{"version":3,"file":"ej2.min.js","sources":["../node_modules/@syncfusion/ej2-base/dist/src/es5/util.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/dom.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/notify-property-change.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/animation.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/internationalization.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/template.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/template-engine.js","../node_modules/@syncfusion/ej2-buttons/dist/src/es5/common/common.js","../node_modules/@syncfusion/ej2-popups/dist/src/es5/common/position.js","../node_modules/@syncfusion/ej2-popups/dist/src/es5/common/collision.js","../node_modules/@syncfusion/ej2-popups/dist/src/es5/popup/popup.js","../node_modules/@syncfusion/ej2-popups/dist/src/es5/spinner/spinner.js","../node_modules/@syncfusion/ej2-splitbuttons/dist/src/es5/common/common.js","../node_modules/@syncfusion/ej2-inputs/dist/src/es5/maskedtextbox/base/mask-base.js","../node_modules/@syncfusion/ej2-lists/dist/src/es5/common/list-base.js","../node_modules/@syncfusion/ej2-file-utils/dist/src/es5/encoding.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/collections/utils.js","../node_modules/@syncfusion/ej2-svg-base/dist/src/es5/tooltip/interface.js","../node_modules/@syncfusion/ej2-svg-base/dist/src/es5/tooltip/helper.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/common/model/theme.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/common/utils/helper.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/accumulation-chart/model/acc-base.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/range-navigator/utils/helper.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/range-navigator/utils/theme.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/smithchart/utils/helper.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/sparkline/utils/helper.js","../node_modules/@syncfusion/ej2-circulargauge/dist/src/es5/circular-gauge/utils/helper.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/utility/path-util.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/primitives/matrix.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/utility/base-util.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/utility/dom-util.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/objects/dictionary/basic-shapes.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/objects/dictionary/common.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/objects/dictionary/flow-shapes.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/objects/tooltip.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/utility/connector.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/objects/connector.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/utility/constraints-util.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/ruler/ruler.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/utility/diagram-util.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/interaction/actions.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/objects/bpmn.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/layout/symmetrical-layout.js","../node_modules/@syncfusion/ej2-dropdowns/dist/src/es5/common/incremental-search.js","../node_modules/@syncfusion/ej2-dropdowns/dist/src/es5/common/highlight-search.js","../node_modules/@syncfusion/ej2-dropdowns/dist/src/es5/multi-select/float-label.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/base/util.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/services/aria-service.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/aggregate.js","../node_modules/@syncfusion/ej2-heatmap/dist/src/es5/heatmap/utils/helper.js","../node_modules/@syncfusion/ej2-lineargauge/dist/src/es5/linear-gauge/utils/helper.js","../node_modules/@syncfusion/ej2-maps/dist/src/es5/maps/utils/helper.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/rich-text-editor/base/util.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/rich-text-editor/actions/html-attributes.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/base/util.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/recurrence-editor/date-generator.js","../node_modules/@syncfusion/ej2-treemap/dist/src/es5/treemap/utils/helper.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/ajax.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/event-handler.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/observer.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/base.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/browser.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/intl/intl-base.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/canvas-renderer.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/module-loader.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/child-property.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/intl/parser-base.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/intl/number-formatter.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/intl/date-formatter.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/component.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/intl/date-parser.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/intl/number-parser.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/draggable.js","../node_modules/@syncfusion/ej2-inputs/dist/src/es5/input/input.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/droppable.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/keyboard.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/l10n.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/svg-renderer.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/touch.js","../node_modules/@syncfusion/ej2-buttons/dist/src/es5/button/button.js","../node_modules/@syncfusion/ej2-buttons/dist/src/es5/check-box/check-box.js","../node_modules/@syncfusion/ej2-buttons/dist/src/es5/radio-button/radio-button.js","../node_modules/@syncfusion/ej2-buttons/dist/src/es5/switch/switch.js","../node_modules/@syncfusion/ej2-popups/dist/src/es5/dialog/dialog.js","../node_modules/@syncfusion/ej2-popups/dist/src/es5/tooltip/tooltip.js","../node_modules/@syncfusion/ej2-splitbuttons/dist/src/es5/drop-down-button/drop-down-button.js","../node_modules/@syncfusion/ej2-splitbuttons/dist/src/es5/split-button/split-button.js","../node_modules/@syncfusion/ej2-inputs/dist/src/es5/numerictextbox/numerictextbox.js","../node_modules/@syncfusion/ej2-inputs/dist/src/es5/form-validator/form-validator.js","../node_modules/@syncfusion/ej2-inputs/dist/src/es5/maskedtextbox/maskedtextbox/maskedtextbox.js","../node_modules/@syncfusion/ej2-inputs/dist/src/es5/slider/slider.js","../node_modules/@syncfusion/ej2-inputs/dist/src/es5/uploader/uploader.js","../node_modules/@syncfusion/ej2-inputs/dist/src/es5/color-picker/color-picker.js","../node_modules/@syncfusion/ej2-data/dist/src/es5/query.js","../node_modules/@syncfusion/ej2-data/dist/src/es5/util.js","../node_modules/@syncfusion/ej2-data/dist/src/es5/adaptors.js","../node_modules/@syncfusion/ej2-data/dist/src/es5/manager.js","../node_modules/@syncfusion/ej2-lists/dist/src/es5/list-view/list-view.js","../node_modules/@syncfusion/ej2-calendars/dist/src/es5/timepicker/timepicker.js","../node_modules/@syncfusion/ej2-lists/dist/src/es5/list-view/virtualization.js","../node_modules/@syncfusion/ej2-calendars/dist/src/es5/calendar/calendar.js","../node_modules/@syncfusion/ej2-calendars/dist/src/es5/datepicker/datepicker.js","../node_modules/@syncfusion/ej2-calendars/dist/src/es5/daterangepicker/daterangepicker.js","../node_modules/@syncfusion/ej2-calendars/dist/src/es5/datetimepicker/datetimepicker.js","../node_modules/@syncfusion/ej2-file-utils/dist/src/es5/save.js","../node_modules/@syncfusion/ej2-file-utils/dist/src/es5/xml-writer.js","../node_modules/@syncfusion/ej2-file-utils/dist/src/es5/stream-writer.js","../node_modules/@syncfusion/ej2-compression/dist/src/es5/compression-writer.js","../node_modules/@syncfusion/ej2-compression/dist/src/es5/zip-archive.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/collections/dictionary.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/primitives/pdf-string.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/primitives/pdf-name.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/input-output/pdf-operators.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/input-output/pdf-dictionary-properties.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/primitives/pdf-dictionary.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/primitives/pdf-number.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/primitives/pdf-array.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/primitives/pdf-stream.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/enum.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/primitives/pdf-reference.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/actions/action.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/actions/uri-action.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/pdf-color.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/fonts/enum.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/drawing/pdf-drawing.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/brushes/pdf-brush.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/brushes/pdf-solid-brush.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/fonts/pdf-string-format.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/fonts/string-layouter.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/fonts/string-tokenizer.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/fonts/pdf-font.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/input-output/enum.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/input-output/pdf-writer.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/input-output/pdf-main-object-collection.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/input-output/cross-table.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/document/pdf-document-base.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/document/pdf-catalog.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/pages/enum.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/input-output/pdf-cross-table.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/pages/pdf-page-size.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/pdf-margins.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/images/image-decoder.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/pages/pdf-page-settings.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/input-output/pdf-stream-writer.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/pdf-pen.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/pdf-transformation-matrix.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/constants.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/collections/object-object-pair/dictionary.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/pdf-transparency.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/document/automatic-fields/automatic-field-info-collection.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/figures/base/graphics-element.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/document/automatic-fields/automatic-field.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/document/automatic-fields/automatic-field-info.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/images/byte-array.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/primitives/pdf-boolean.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/figures/enum.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/unit-convertor.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/images/pdf-image.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/images/pdf-bitmap.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/fonts/ttf-table-info.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/fonts/ttf-name-table.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/fonts/ttf-name-record.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/fonts/ttf-head-table.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/fonts/ttf-metrics.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/fonts/ttf-horizontal-header-table.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/fonts/ttf-OS2-Table.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/fonts/ttf-post-table.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/fonts/ttf-long-hor-metric.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/fonts/ttf-cmap-sub-table.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/fonts/ttf-cmap-table.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/fonts/ttf-glyph-info.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/fonts/ttf-loca-table.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/fonts/ttf-apple-cmap-sub-table.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/fonts/ttf-microsoft-cmap-sub-table.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/fonts/ttf-trimmed-cmap-sub-table.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/fonts/ttf-glyph-header.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/input-output/big-endian-writer.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/fonts/ttf-reader.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/fonts/pdf-font-metrics.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/fonts/unicode-true-type-font.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/pdf-graphics.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/pages/pdf-page-layer.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/general/pdf-collection.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/pages/pdf-page-layer-collection.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/figures/pdf-template.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/pdf-resources.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/pages/pdf-page-base.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/annotations/annotation-collection.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/pages/pdf-page.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/pages/page-added-event-arguments.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/pages/pdf-section-page-collection.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/document/pdf-document-template.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/pages/pdf-section-templates.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/pages/pdf-section.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/pages/pdf-section-collection.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/pages/pdf-document-page-collection.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/general/pdf-cache-collection.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/document/pdf-document.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/fonts/pdf-standard-font-metrics-factory.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/fonts/pdf-standard-font.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/annotations/annotation.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/annotations/link-annotation.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/annotations/action-link-annotation.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/annotations/document-link-annotation.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/figures/base/element-layouter.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/general/enum.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/figures/layout-element.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/figures/base/text-layouter.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/figures/text-element.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/annotations/uri-annotation.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/annotations/pdf-text-web-link.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/document/automatic-fields/pdf-numbers-convertor.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/document/automatic-fields/pdf-template-value-pair.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/document/automatic-fields/multiple-value-field.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/document/automatic-fields/pdf-page-number-field.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/document/automatic-fields/composite-field.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/document/automatic-fields/single-value-field.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/document/automatic-fields/page-count-field.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/general/pdf-destination.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/structured-elements/tables/light-tables/enum.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/fonts/pdf-true-type-font.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/pages/pdf-page-template-element.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/structured-elements/grid/styles/pdf-borders.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/structured-elements/grid/styles/style.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/structured-elements/grid/pdf-grid-cell.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/structured-elements/grid/pdf-grid-column.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/structured-elements/grid/pdf-grid-row.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/structured-elements/grid/pdf-grid.js","../node_modules/@syncfusion/ej2-svg-base/dist/src/es5/tooltip/tooltip.js","../node_modules/@syncfusion/ej2-navigations/dist/src/es5/common/h-scroll.js","../node_modules/@syncfusion/ej2-navigations/dist/src/es5/toolbar/toolbar.js","../node_modules/@syncfusion/ej2-navigations/dist/src/es5/accordion/accordion.js","../node_modules/@syncfusion/ej2-navigations/dist/src/es5/context-menu/context-menu.js","../node_modules/@syncfusion/ej2-navigations/dist/src/es5/tab/tab.js","../node_modules/@syncfusion/ej2-navigations/dist/src/es5/treeview/treeview.js","../node_modules/@syncfusion/ej2-navigations/dist/src/es5/sidebar/sidebar.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/common/model/base.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/utils/double-range.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/axis/double-axis.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/common/model/constants.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/model/chart-base.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/axis/axis.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/axis/cartesian-panel.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/utils/get-data.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/chart-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/common/model/data.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/marker-explode.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/marker.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/common/legend/legend.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/technical-indicators/technical-indicator.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/common/utils/export.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/chart.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/axis/axis-helper.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/axis/date-time-axis.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/axis/category-axis.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/axis/logarithmic-axis.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/axis/date-time-category-axis.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/axis/strip-line.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/line-base.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/line-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/column-base.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/column-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/multi-colored-base.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/area-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/bar-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/axis/polar-radar-panel.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/polar-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/radar-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/stacking-bar-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/candle-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/stacking-column-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/step-line-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/step-area-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/stacking-area-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/scatter-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/range-column-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/waterfall-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/hilo-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/hilo-open-close-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/range-area-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/bubble-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/spline-base.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/spline-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/histogram-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/spline-area-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/technical-indicators/indicator-base.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/technical-indicators/sma-indicator.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/technical-indicators/ema-indicator.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/technical-indicators/tma-indicator.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/technical-indicators/ad-indicator.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/technical-indicators/atr-indicator.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/technical-indicators/momentum-indicator.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/technical-indicators/rsi-indicator.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/technical-indicators/stochastic-indicator.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/technical-indicators/bollinger-bands.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/technical-indicators/macd-indicator.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/trend-lines/trend-line.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/user-interaction/crosshair.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/common/user-interaction/tooltip.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/user-interaction/tooltip.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/user-interaction/zooming-toolkit.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/user-interaction/zooming.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/common/user-interaction/selection.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/user-interaction/selection.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/data-label.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/error-bar.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/legend/legend.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/common/annotation/annotation.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/annotation/annotation.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/box-and-whisker-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/multi-colored-area-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/multi-colored-line-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/axis/multi-level-labels.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/common/scrollbar/scrollbar-elements.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/common/scrollbar/scrollbar.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/accumulation-chart/renderer/accumulation-base.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/accumulation-chart/renderer/pie-base.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/accumulation-chart/renderer/pie-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/accumulation-chart/accumulation.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/accumulation-chart/renderer/triangular-base.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/accumulation-chart/renderer/funnel-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/accumulation-chart/renderer/pyramid-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/accumulation-chart/renderer/legend.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/accumulation-chart/renderer/dataLabel.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/accumulation-chart/user-interaction/tooltip.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/accumulation-chart/user-interaction/selection.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/accumulation-chart/annotation/annotation.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/range-navigator/renderer/chart-render.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/range-navigator/renderer/range-axis.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/range-navigator/model/range-base.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/smithchart/model/theme.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/range-navigator/renderer/slider.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/range-navigator/range-navigator.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/range-navigator/renderer/period-selector.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/range-navigator/user-interaction/tooltip.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/smithchart/utils/utils.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/smithchart/legend/legend.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/smithchart/axis/axis.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/smithchart/title/title.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/smithchart/series/series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/smithchart/utils/area.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/smithchart/axis/axisrender.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/smithchart/series/marker.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/smithchart/series/datalabel.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/smithchart/series/seriesrender.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/smithchart/model/constant.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/smithchart/utils/export.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/smithchart/utils/enum.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/smithchart/smithchart.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/smithchart/series/tooltip.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/smithchart/legend/legendrender.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/sparkline/model/base.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/sparkline/rendering/sparkline-renderer.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/sparkline/sparkline.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/sparkline/rendering/sparkline-tooltip.js","../charts.ts","../node_modules/@syncfusion/ej2-circulargauge/dist/src/es5/circular-gauge/model/theme.js","../node_modules/@syncfusion/ej2-circulargauge/dist/src/es5/circular-gauge/model/base.js","../node_modules/@syncfusion/ej2-circulargauge/dist/src/es5/circular-gauge/axes/axis.js","../node_modules/@syncfusion/ej2-circulargauge/dist/src/es5/circular-gauge/annotations/annotations.js","../node_modules/@syncfusion/ej2-circulargauge/dist/src/es5/circular-gauge/model/constants.js","../node_modules/@syncfusion/ej2-circulargauge/dist/src/es5/circular-gauge/user-interaction/tooltip.js","../node_modules/@syncfusion/ej2-circulargauge/dist/src/es5/circular-gauge/axes/axis-renderer.js","../node_modules/@syncfusion/ej2-circulargauge/dist/src/es5/circular-gauge/axes/pointer-renderer.js","../node_modules/@syncfusion/ej2-circulargauge/dist/src/es5/circular-gauge/axes/axis-panel.js","../node_modules/@syncfusion/ej2-circulargauge/dist/src/es5/circular-gauge/circular-gauge.js","../circulargauge.ts","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/primitives/size.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/primitives/point.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/primitives/rect.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/enum/enum.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/rendering/canvas-renderer.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/rendering/svg-renderer.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/core/elements/diagram-element.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/core/elements/path-element.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/core/elements/image-element.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/core/elements/text-element.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/core/appearance.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/core/containers/container.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/core/elements/native-element.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/core/containers/canvas.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/objects/port.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/objects/annotation.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/objects/icon.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/objects/node-base.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/interaction/selector.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/core/elements/html-element.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/objects/node.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/ruler/ruler.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/rendering/renderer.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/diagram/page-settings.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/objects/service.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/diagram/grid-lines.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/diagram/ruler-settings.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/diagram/data-source.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/layout/layout-base.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/interaction/tool.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/interaction/connector-editing.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/interaction/event-handlers.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/diagram/layer.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/interaction/command-manager.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/interaction/scroller.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/interaction/spatial-search/quad.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/interaction/spatial-search/spatial-search.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/diagram/keyboard-commands.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/diagram.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/print-settings.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/core/containers/stack-panel.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/data-binding/data-binding.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/objects/context-menu.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/objects/connector-bridging.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/objects/snapping.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/objects/undo-redo.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/objects/layout-animation.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/layout/hierarchical-tree.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/layout/mind-map.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/layout/radial-tree.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/diagram/layout/complex-hierarchical-tree.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/symbol-palette/symbol-palette.js","../node_modules/@syncfusion/ej2-diagrams/dist/src/es5/overview/overview.js","../diagrams.ts","../node_modules/@syncfusion/ej2-dropdowns/dist/src/es5/drop-down-base/drop-down-base.js","../node_modules/@syncfusion/ej2-dropdowns/dist/src/es5/drop-down-list/drop-down-list.js","../node_modules/@syncfusion/ej2-dropdowns/dist/src/es5/combo-box/combo-box.js","../node_modules/@syncfusion/ej2-dropdowns/dist/src/es5/auto-complete/auto-complete.js","../node_modules/@syncfusion/ej2-dropdowns/dist/src/es5/multi-select/multi-select.js","../node_modules/@syncfusion/ej2-dropdowns/dist/src/es5/multi-select/checkbox-selection.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/base/dictionary.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/base/unique-format.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/base/unique-formats.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/document-editor.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/implementation/print.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/implementation/format/section-format.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/implementation/list/level-override.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/implementation/list/list.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/implementation/format/list-format.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/implementation/format/paragraph-format.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/implementation/format/character-format.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/implementation/editor/editor-helper.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/implementation/format/style.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/implementation/format/border.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/implementation/format/borders.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/implementation/format/shading.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/implementation/format/table-format.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/implementation/format/row-format.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/implementation/format/cell-format.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/implementation/viewer/page.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/implementation/context-menu.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/implementation/list/abstract-list.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/implementation/list/list-level.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/implementation/viewer/layout.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/implementation/viewer/render.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/implementation/viewer/text-helper.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/implementation/viewer/zooming.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/implementation/viewer/viewer.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/implementation/viewer/sfdt-reader.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/implementation/selection/selection-format.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/implementation/writer/html-export.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/implementation/selection/selection-helper.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/implementation/selection/selection.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/implementation/search/text-search-result.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/implementation/search/text-search-results.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/implementation/search/text-search.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/implementation/search/search.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/implementation/search/options-pane.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/implementation/editor/table-resizer.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/implementation/editor/editor.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/implementation/editor-history/history-helper.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/implementation/editor-history/base-history-info.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/implementation/editor/image-resizer.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/implementation/editor-history/history-info.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/implementation/editor-history/editor-history.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/implementation/writer/word-export.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/implementation/writer/text-export.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/implementation/writer/sfdt-export.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/implementation/dialogs/hyperlink-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/implementation/dialogs/table-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/implementation/dialogs/bookmark-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/implementation/dialogs/table-of-contents-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/implementation/dialogs/page-setup-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/implementation/dialogs/paragraph-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/implementation/dialogs/list-view-model.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/implementation/dialogs/list-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/implementation/dialogs/style-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/implementation/dialogs/bullets-and-numbering-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/implementation/dialogs/font-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/implementation/dialogs/table-properties-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/implementation/dialogs/borders-and-shading-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/implementation/dialogs/table-options-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/implementation/dialogs/cell-options-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/dist/src/es5/document-editor/implementation/dialogs/styles-dialog.js","../documenteditor.ts","../dropdowns.ts","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/base/enum.js","../node_modules/@syncfusion/ej2-excel-export/dist/src/es5/cell-style.js","../node_modules/@syncfusion/ej2-excel-export/dist/src/es5/cell.js","../node_modules/@syncfusion/ej2-excel-export/dist/src/es5/column.js","../node_modules/@syncfusion/ej2-excel-export/dist/src/es5/row.js","../node_modules/@syncfusion/ej2-excel-export/dist/src/es5/worksheets.js","../node_modules/@syncfusion/ej2-excel-export/dist/src/es5/worksheet.js","../node_modules/@syncfusion/ej2-excel-export/dist/src/es5/value-formatter.js","../node_modules/@syncfusion/ej2-excel-export/dist/src/es5/csv-helper.js","../node_modules/@syncfusion/ej2-excel-export/dist/src/es5/blob-helper.js","../node_modules/@syncfusion/ej2-excel-export/dist/src/es5/workbook.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/services/value-formatter.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/models/column.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/base/constant.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/checkbox-filter.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/data.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/models/row.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/models/cell.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/cell-merge-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/row-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/services/row-model-generator.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/services/summary-model-generator.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/services/group-model-generator.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/content-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/header-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/cell-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/header-cell-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/stacked-cell-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/indent-cell-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/caption-cell-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/expand-cell-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/header-indent-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/detail-header-indent-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/detail-expand-cell-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/render.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/services/cell-render-factory.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/services/service-locator.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/services/renderer-factory.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/services/width-controller.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/services/focus-strategy.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/models/page-settings.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/selection.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/search.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/show-hide.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/scroll.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/print.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/models/aggregate.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/clipboard.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/base/grid.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/sort.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/pager/numeric-container.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/pager/pager-message.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/pager/pager.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/pager/pager-dropdown.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/pager/external-message.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/page.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/edit.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/filter-cell-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/filter-menu-operator.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/string-filter-ui.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/number-filter-ui.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/boolean-filter-ui.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/date-filter-ui.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/filter-menu-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/excel-filter.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/filter.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/resize.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/reorder.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/row-reorder.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/group.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/detail-row.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/toolbar.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/footer-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/summary-cell-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/services/intersection-observer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/services/virtual-row-model-generator.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/virtual-content-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/virtual-scroll.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/inline-edit-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/batch-edit-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/dialog-edit-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/edit-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/boolean-edit-cell.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/dropdown-edit-cell.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/numeric-edit-cell.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/default-edit-cell.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/normal-edit.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/inline-edit.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/batch-edit.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/dialog-edit.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/datepicker-edit-cell.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/column-chooser.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/export-helper.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/excel-export.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/pdf-export.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/command-column-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/command-column.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/context-menu.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/services/freeze-row-model-generator.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/freeze-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/freeze.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/column-menu.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/foreign-key.js","../grids.ts","../node_modules/@syncfusion/ej2-heatmap/dist/src/es5/heatmap/model/theme.js","../node_modules/@syncfusion/ej2-heatmap/dist/src/es5/heatmap/model/base.js","../node_modules/@syncfusion/ej2-heatmap/dist/src/es5/heatmap/utils/colorMapping.js","../node_modules/@syncfusion/ej2-heatmap/dist/src/es5/heatmap/axis/axis.js","../node_modules/@syncfusion/ej2-heatmap/dist/src/es5/heatmap/axis/axis-helpers.js","../node_modules/@syncfusion/ej2-heatmap/dist/src/es5/heatmap/series/series.js","../node_modules/@syncfusion/ej2-heatmap/dist/src/es5/heatmap/datasource/twodimensional.js","../node_modules/@syncfusion/ej2-heatmap/dist/src/es5/heatmap/legend/legend.js","../node_modules/@syncfusion/ej2-heatmap/dist/src/es5/heatmap/heatmap.js","../node_modules/@syncfusion/ej2-heatmap/dist/src/es5/heatmap/datasource/adaptor.js","../node_modules/@syncfusion/ej2-heatmap/dist/src/es5/heatmap/utils/tooltip.js","../heatmap.ts","../node_modules/@syncfusion/ej2-lineargauge/dist/src/es5/linear-gauge/model/base.js","../node_modules/@syncfusion/ej2-lineargauge/dist/src/es5/linear-gauge/axes/axis.js","../node_modules/@syncfusion/ej2-lineargauge/dist/src/es5/linear-gauge/axes/axis-panel.js","../node_modules/@syncfusion/ej2-lineargauge/dist/src/es5/linear-gauge/model/constant.js","../node_modules/@syncfusion/ej2-lineargauge/dist/src/es5/linear-gauge/axes/animation.js","../node_modules/@syncfusion/ej2-lineargauge/dist/src/es5/linear-gauge/axes/axis-renderer.js","../node_modules/@syncfusion/ej2-lineargauge/dist/src/es5/linear-gauge/annotations/annotations.js","../node_modules/@syncfusion/ej2-lineargauge/dist/src/es5/linear-gauge/user-interaction/tooltip.js","../node_modules/@syncfusion/ej2-lineargauge/dist/src/es5/linear-gauge/linear-gauge.js","../lineargauge.ts","../lists.ts","../node_modules/@syncfusion/ej2-maps/dist/src/es5/maps/model/theme.js","../node_modules/@syncfusion/ej2-maps/dist/src/es5/maps/model/base.js","../node_modules/@syncfusion/ej2-maps/dist/src/es5/maps/model/constants.js","../node_modules/@syncfusion/ej2-maps/dist/src/es5/maps/layers/bing-map.js","../node_modules/@syncfusion/ej2-maps/dist/src/es5/maps/layers/color-mapping.js","../node_modules/@syncfusion/ej2-maps/dist/src/es5/maps/layers/layer-panel.js","../node_modules/@syncfusion/ej2-maps/dist/src/es5/maps/user-interaction/annotation.js","../node_modules/@syncfusion/ej2-maps/dist/src/es5/maps/utils/export.js","../node_modules/@syncfusion/ej2-maps/dist/src/es5/maps/maps.js","../node_modules/@syncfusion/ej2-maps/dist/src/es5/maps/layers/bubble.js","../node_modules/@syncfusion/ej2-maps/dist/src/es5/maps/layers/marker.js","../node_modules/@syncfusion/ej2-maps/dist/src/es5/maps/layers/data-label.js","../node_modules/@syncfusion/ej2-maps/dist/src/es5/maps/layers/navigation-selected-line.js","../node_modules/@syncfusion/ej2-maps/dist/src/es5/maps/layers/legend.js","../node_modules/@syncfusion/ej2-maps/dist/src/es5/maps/user-interaction/highlight.js","../node_modules/@syncfusion/ej2-maps/dist/src/es5/maps/user-interaction/selection.js","../node_modules/@syncfusion/ej2-maps/dist/src/es5/maps/user-interaction/tooltip.js","../node_modules/@syncfusion/ej2-maps/dist/src/es5/maps/user-interaction/zoom.js","../maps.ts","../node_modules/@syncfusion/ej2-notifications/dist/src/es5/toast/toast.js","../node_modules/@syncfusion/ej2-pivotview/dist/src/es5/base/util.js","../node_modules/@syncfusion/ej2-pivotview/dist/src/es5/base/engine.js","../node_modules/@syncfusion/ej2-pivotview/dist/src/es5/common/base/constant.js","../node_modules/@syncfusion/ej2-pivotview/dist/src/es5/common/base/css-constant.js","../node_modules/@syncfusion/ej2-pivotview/dist/src/es5/pivotview/renderer/render.js","../node_modules/@syncfusion/ej2-pivotview/dist/src/es5/pivotview/model/dataSource.js","../node_modules/@syncfusion/ej2-pivotview/dist/src/es5/pivotview/model/gridsettings.js","../node_modules/@syncfusion/ej2-pivotview/dist/src/es5/pivotview/actions/keyboard.js","../node_modules/@syncfusion/ej2-pivotview/dist/src/es5/common/popups/context-menu.js","../node_modules/@syncfusion/ej2-pivotview/dist/src/es5/pivotview/base/pivotview.js","../node_modules/@syncfusion/ej2-pivotview/dist/src/es5/pivotview/actions/excel-export.js","../node_modules/@syncfusion/ej2-pivotview/dist/src/es5/pivotview/actions/pdf-export.js","../node_modules/@syncfusion/ej2-pivotview/dist/src/es5/common/actions/keyboard.js","../node_modules/@syncfusion/ej2-pivotview/dist/src/es5/common/actions/event-base.js","../node_modules/@syncfusion/ej2-pivotview/dist/src/es5/common/actions/node-state-modified.js","../node_modules/@syncfusion/ej2-pivotview/dist/src/es5/common/actions/dataSource-update.js","../node_modules/@syncfusion/ej2-pivotview/dist/src/es5/common/popups/error-dialog.js","../node_modules/@syncfusion/ej2-pivotview/dist/src/es5/common/popups/filter-dialog.js","../node_modules/@syncfusion/ej2-pivotview/dist/src/es5/common/base/pivot-common.js","../node_modules/@syncfusion/ej2-pivotview/dist/src/es5/field-list/renderer/dialog-renderer.js","../node_modules/@syncfusion/ej2-pivotview/dist/src/es5/field-list/renderer/tree-renderer.js","../node_modules/@syncfusion/ej2-pivotview/dist/src/es5/field-list/renderer/axis-table-renderer.js","../node_modules/@syncfusion/ej2-pivotview/dist/src/es5/common/actions/pivot-button.js","../node_modules/@syncfusion/ej2-pivotview/dist/src/es5/field-list/renderer/axis-field-renderer.js","../node_modules/@syncfusion/ej2-pivotview/dist/src/es5/field-list/renderer/renderer.js","../node_modules/@syncfusion/ej2-pivotview/dist/src/es5/field-list/base/field-list.js","../node_modules/@syncfusion/ej2-pivotview/dist/src/es5/common/calculatedfield/calculated-field.js","../node_modules/@syncfusion/ej2-pivotview/dist/src/es5/common/actions/field-list.js","../node_modules/@syncfusion/ej2-pivotview/dist/src/es5/common/actions/common.js","../node_modules/@syncfusion/ej2-pivotview/dist/src/es5/common/grouping-bar/axis-field-renderer.js","../node_modules/@syncfusion/ej2-pivotview/dist/src/es5/common/grouping-bar/grouping-bar.js","../pivotview.ts","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/rich-text-editor/base/enum.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/rich-text-editor/base/constant.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/rich-text-editor/base/classes.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/rich-text-editor/models/items.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/rich-text-editor/models/default-locale.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/rich-text-editor/renderer/toolbar-renderer.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/rich-text-editor/actions/base-toolbar.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/rich-text-editor/actions/dropdown-buttons.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/rich-text-editor/services/service-locator.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/rich-text-editor/services/renderer-factory.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/rich-text-editor/actions/toolbar-action.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/rich-text-editor/actions/toolbar.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/rich-text-editor/actions/keyboard.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/rich-text-editor/actions/base-quick-toolbar.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/rich-text-editor/renderer/popup-renderer.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/rich-text-editor/actions/quick-toolbar.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/rich-text-editor/actions/count.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/rich-text-editor/actions/color-picker.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/markdown-parser/plugin/markdown-selection.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/rich-text-editor/actions/markdown-toolbar-status.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/rich-text-editor/actions/execute-command-callback.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/common/constant.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/rich-text-editor/formatter/formatter.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/markdown-parser/base/constant.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/markdown-parser/plugin/lists.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/markdown-parser/plugin/formats.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/markdown-parser/plugin/md-selection-formats.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/common/config.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/markdown-parser/plugin/undo.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/markdown-parser/plugin/link.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/markdown-parser/plugin/clearformat.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/markdown-parser/base/markdown-parser.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/rich-text-editor/formatter/markdown-formatter.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/rich-text-editor/renderer/markdown-renderer.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/rich-text-editor/actions/markdown-editor.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/editor-manager/base/constant.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/selection/selection.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/editor-manager/plugin/dom-node.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/editor-manager/plugin/lists.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/editor-manager/plugin/formats.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/editor-manager/plugin/insert-methods.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/editor-manager/plugin/nodecutter.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/editor-manager/plugin/inserthtml.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/editor-manager/plugin/link.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/editor-manager/plugin/alignments.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/editor-manager/plugin/indents.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/editor-manager/plugin/image.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/editor-manager/plugin/isformatted.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/editor-manager/plugin/selection-commands.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/editor-manager/plugin/selection-exec.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/editor-manager/plugin/inserthtml-exec.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/editor-manager/plugin/clearformat.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/editor-manager/plugin/clearformat-exec.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/editor-manager/plugin/undo.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/editor-manager/base/editor-manager.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/rich-text-editor/formatter/html-formatter.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/editor-manager/plugin/toolbar-status.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/rich-text-editor/actions/html-toolbar-status.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/rich-text-editor/renderer/content-renderer.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/rich-text-editor/renderer/iframe-content-renderer.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/rich-text-editor/actions/html-editor.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/rich-text-editor/renderer/render.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/rich-text-editor/renderer/link-module.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/rich-text-editor/renderer/image-module.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/rich-text-editor/renderer/view-source.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/rich-text-editor/base/interface.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/rich-text-editor/models/toolbar-settings.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/rich-text-editor/models/iframe-settings.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/rich-text-editor/models/inline-mode.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/rich-text-editor/actions/full-screen.js","../node_modules/@syncfusion/ej2-richtexteditor/dist/src/es5/rich-text-editor/base/rich-text-editor.js","../richtexteditor.ts","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/base/constant.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/base/css-constant.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/renderer/header-renderer.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/actions/scroll.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/actions/touch.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/actions/keyboard.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/actions/data.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/timezone/timezone.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/event-renderer/event-base.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/actions/crud.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/popups/form-validator.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/popups/quick-popups.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/popups/event-tooltip.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/recurrence-editor/recurrence-editor.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/popups/event-window.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/renderer/renderer.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/models/work-hours.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/models/time-scale.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/models/fields.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/models/event-settings.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/models/group.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/models/resources.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/base/resource.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/base/schedule.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/renderer/view-base.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/actions/work-cells.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/event-renderer/vertical-view.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/event-renderer/month.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/renderer/vertical-view.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/renderer/day.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/renderer/week.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/renderer/work-week.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/renderer/month.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/event-renderer/agenda-base.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/renderer/agenda.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/renderer/month-agenda.js","../schedule.ts","../node_modules/@syncfusion/ej2-treemap/dist/src/es5/treemap/model/theme.js","../node_modules/@syncfusion/ej2-splitbuttons/dist/src/es5/button-group/button-group.js","../node_modules/@syncfusion/ej2-treemap/dist/src/es5/treemap/model/constants.js","../node_modules/@syncfusion/ej2-treemap/dist/src/es5/treemap/model/base.js","../node_modules/@syncfusion/ej2-treemap/dist/src/es5/treemap/layout/render-panel.js","../node_modules/@syncfusion/ej2-treemap/dist/src/es5/treemap/utils/export.js","../node_modules/@syncfusion/ej2-treemap/dist/src/es5/treemap/treemap.js","../node_modules/@syncfusion/ej2-treemap/dist/src/es5/treemap/layout/legend.js","../node_modules/@syncfusion/ej2-treemap/dist/src/es5/treemap/user-interaction/highlight-selection.js","../node_modules/@syncfusion/ej2-treemap/dist/src/es5/treemap/user-interaction/tooltip.js","../treemap.ts"],"sourcesContent":["var instances = 'ej2_instances';\nvar uid = 0;\n/**\n * Create Instance from constructor function with desired parameters.\n * @param {Function} classFunction - Class function to which need to create instance\n * @param {any[]} params - Parameters need to passed while creating instance\n * @return {any}\n * @private\n */\nexport function createInstance(classFunction, params) {\n var arrayParam = params;\n arrayParam.unshift(undefined);\n return new (Function.prototype.bind.apply(classFunction, arrayParam));\n}\n/**\n * To run a callback function immediately after the browser has completed other operations.\n * @param {Function} handler - callback function to be triggered.\n * @return {Function}\n * @private\n */\nexport function setImmediate(handler) {\n var unbind;\n var num = new Uint16Array(5);\n var intCrypto = window.msCrypto || window.crypto;\n intCrypto.getRandomValues(num);\n var secret = 'ej2' + combineArray(num);\n var messageHandler = function (event) {\n if (event.source === window && typeof event.data === 'string' && event.data.length <= 32 && event.data === secret) {\n handler();\n unbind();\n }\n };\n window.addEventListener('message', messageHandler, false);\n window.postMessage(secret, '*');\n return unbind = function () {\n window.removeEventListener('message', messageHandler);\n handler = messageHandler = secret = undefined;\n };\n}\n/**\n * To get nameSpace value from the desired object.\n * @param {string} nameSpace - String value to the get the inner object\n * @param {any} obj - Object to get the inner object value.\n * @return {any}\n * @private\n */\nexport function getValue(nameSpace, obj) {\n /* tslint:disable no-any */\n var value = obj;\n var splits = nameSpace.split('.');\n for (var i = 0; i < splits.length && !isUndefined(value); i++) {\n value = value[splits[i]];\n }\n return value;\n}\n/**\n * To set value for the nameSpace in desired object.\n * @param {string} nameSpace - String value to the get the inner object\n * @param {any} value - Value that you need to set.\n * @param {any} obj - Object to get the inner object value.\n * @return {void}\n * @private\n */\nexport function setValue(nameSpace, value, obj) {\n var keys = nameSpace.split('.');\n var start = obj || {};\n var fromObj = start;\n var i;\n var length = keys.length;\n var key;\n for (i = 0; i < length; i++) {\n key = keys[i];\n if (i + 1 === length) {\n fromObj[key] = value === undefined ? {} : value;\n }\n else if (isNullOrUndefined(fromObj[key])) {\n fromObj[key] = {};\n }\n fromObj = fromObj[key];\n }\n return start;\n}\n/**\n * Delete an item from Object\n * @param {any} obj - Object in which we need to delete an item.\n * @param {string} params - String value to the get the inner object\n * @return {void}\n * @private\n */\nexport function deleteObject(obj, key) {\n delete obj[key];\n}\n/**\n * Check weather the given argument is only object.\n * @param {any} obj - Object which is need to check.\n * @return {boolean}\n * @private\n */\nexport function isObject(obj) {\n var objCon = {};\n return (!isNullOrUndefined(obj) && obj.constructor === objCon.constructor);\n}\n/**\n * To get enum value by giving the string.\n * @param {any} enumObject - Enum object.\n * @param {string} enumValue - Enum value to be searched\n * @return {any}\n * @private\n */\nexport function getEnumValue(enumObject, enumValue) {\n return enumObject[enumValue];\n}\n/**\n * Merge the source object into destination object.\n * @param {any} source - source object which is going to merge with destination object\n * @param {any} destination - object need to be merged\n * @return {void}\n * @private\n */\nexport function merge(source, destination) {\n if (!isNullOrUndefined(destination)) {\n var temrObj = source;\n var tempProp = destination;\n var keys = Object.keys(destination);\n var deepmerge = 'deepMerge';\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n if (!isNullOrUndefined(temrObj[deepmerge]) && (temrObj[deepmerge].indexOf(key) !== -1) &&\n (isObject(tempProp[key]) || Array.isArray(tempProp[key]))) {\n extend(temrObj[key], temrObj[key], tempProp[key], true);\n }\n else {\n temrObj[key] = tempProp[key];\n }\n }\n }\n}\n/**\n * Extend the two object with newer one.\n * @param {any} copied - Resultant object after merged\n * @param {Object} first - First object need to merge\n * @param {Object} second - Second object need to merge\n * @return {Object}\n * @private\n */\nexport function extend(copied, first, second, deep) {\n var result = copied || {};\n var length = arguments.length;\n if (deep) {\n length = length - 1;\n }\n var _loop_1 = function (i) {\n if (!arguments_1[i]) {\n return \"continue\";\n }\n var obj1 = arguments_1[i];\n Object.keys(obj1).forEach(function (key) {\n var src = result[key];\n var copy = obj1[key];\n var clone;\n if (deep && (isObject(copy) || Array.isArray(copy))) {\n if (isObject(copy)) {\n clone = src ? src : {};\n result[key] = extend({}, clone, copy, deep);\n }\n else {\n clone = src ? src : [];\n result[key] = extend([], clone, copy, deep);\n }\n }\n else {\n result[key] = copy;\n }\n });\n };\n var arguments_1 = arguments;\n for (var i = 1; i < length; i++) {\n _loop_1(i);\n }\n return result;\n}\n/**\n * To check whether the object is null or undefined.\n * @param {Object} value - To check the object is null or undefined\n * @return {boolean}\n * @private\n */\nexport function isNullOrUndefined(value) {\n return value === undefined || value === null;\n}\n/**\n * To check whether the object is undefined.\n * @param {Object} value - To check the object is undefined\n * @return {boolean}\n * @private\n */\nexport function isUndefined(value) {\n return ('undefined' === typeof value);\n}\n/**\n * To return the generated unique name\n * @param {string} definedName - To concatenate the unique id to provided name\n * @return {string}\n * @private\n */\nexport function getUniqueID(definedName) {\n return definedName + '_' + uid++;\n}\n/**\n * It limits the rate at which a function can fire. The function will fire only once every provided second instead of as quickly.\n * @param {Function} eventFunction - Specifies the function to run when the event occurs\n * @param {number} delay - A number that specifies the milliseconds for function delay call option\n * @return {Function}\n * @private\n */\nexport function debounce(eventFunction, delay) {\n var out;\n // tslint:disable-next-line\n return function () {\n var _this = this;\n var args = arguments;\n var later = function () {\n out = null;\n return eventFunction.apply(_this, args);\n };\n clearTimeout(out);\n out = setTimeout(later, delay);\n };\n}\n// Added since lint ignored after added '//tslint:disable-next-line' \n/* tslint:disable:no-any */\n/**\n * To convert the object to string for query url\n * @param {Object} data\n * @returns string\n * @private\n */\nexport function queryParams(data) {\n var array = [];\n var keys = Object.keys(data);\n for (var _i = 0, keys_2 = keys; _i < keys_2.length; _i++) {\n var key = keys_2[_i];\n array.push(encodeURIComponent(key) + '=' + encodeURIComponent('' + data[key]));\n }\n return array.join('&');\n}\n/**\n * To check whether the given array contains object.\n * @param {T[]} value- Specifies the T type array to be checked.\n * @private\n */\nexport function isObjectArray(value) {\n var parser = Object.prototype.toString;\n if (parser.call(value) === '[object Array]') {\n if (parser.call(value[0]) === '[object Object]') {\n return true;\n }\n }\n return false;\n}\n/**\n * To check whether the child element is descendant to parent element or parent and child are same element.\n * @param{Element} - Specifies the child element to compare with parent.\n * @param{Element} - Specifies the parent element.\n * @return boolean\n * @private\n */\nexport function compareElementParent(child, parent) {\n var node = child;\n if (node === parent) {\n return true;\n }\n else if (node === document || !node) {\n return false;\n }\n else {\n return compareElementParent(node.parentNode, parent);\n }\n}\n/**\n * To throw custom error message.\n * @param{string} - Specifies the error message to be thrown.\n * @private\n */\nexport function throwError(message) {\n try {\n throw new Error(message);\n }\n catch (e) {\n throw e.message + '\\n' + e.stack;\n }\n}\n/**\n * This function is used to print given element\n * @param{Element} element - Specifies the print content element.\n * @param{Window} printWindow - Specifies the print window.\n * @private\n */\nexport function print(element, printWindow) {\n var div = document.createElement('div');\n var links = [].slice.call(document.getElementsByTagName('head')[0].querySelectorAll('link, style'));\n var reference = '';\n if (isNullOrUndefined(printWindow)) {\n printWindow = window.open('', 'print', 'height=452,width=1024,tabbar=no');\n }\n div.appendChild(element.cloneNode(true));\n for (var i = 0, len = links.length; i < len; i++) {\n reference += links[i].outerHTML;\n }\n printWindow.document.write(' ' + reference + '' + div.innerHTML +\n '' + '');\n printWindow.document.close();\n printWindow.focus();\n // tslint:disable-next-line\n var interval = setInterval(function () {\n if (printWindow.ready) {\n printWindow.print();\n printWindow.close();\n clearInterval(interval);\n }\n }, 500);\n return printWindow;\n}\n/**\n * Function to normalize the units applied to the element.\n * @param {number|string} value\n * @return {string} result\n * @private\n */\nexport function formatUnit(value) {\n var result = value + '';\n if (result === 'auto' || result.indexOf('%') !== -1 || result.indexOf('px') !== -1) {\n return result;\n }\n return result + 'px';\n}\n/**\n * Function to fetch the Instances of a HTML element for the given component.\n * @param {string | HTMLElement} element\n * @param {any} component\n * @return {Object} inst\n * @private\n */\n// tslint:disable-next-line\nexport function getInstance(element, component) {\n // tslint:disable-next-line:no-any\n var elem = (typeof (element) === 'string') ? document.querySelector(element) : element;\n if (elem[instances]) {\n for (var _i = 0, _a = elem[instances]; _i < _a.length; _i++) {\n var inst = _a[_i];\n if (inst instanceof component) {\n return inst;\n }\n }\n }\n return null;\n}\n/**\n * Function to add instances for the given element.\n * @param {string | HTMLElement} element\n * @param {Object} instance\n * @return {void}\n * @private\n */\nexport function addInstance(element, instance) {\n // tslint:disable-next-line:no-any\n var elem = (typeof (element) === 'string') ? document.querySelector(element) : element;\n if (elem[instances]) {\n elem[instances].push(instance);\n }\n else {\n elem[instances] = [instance];\n }\n}\n/**\n * Function to generate the unique id.\n * @return {any}\n * @private\n */\n// tslint:disable-next-line:no-any\nexport function uniqueID() {\n // tslint:disable-next-line:no-any\n if ((typeof window) === 'undefined') {\n return;\n }\n // tslint:disable-next-line:no-any\n var num = new Uint16Array(5);\n var intCrypto = window.msCrypto || window.crypto;\n return intCrypto.getRandomValues(num);\n}\nfunction combineArray(num) {\n var ret = '';\n for (var i = 0; i < 5; i++) {\n ret += (i ? ',' : '') + num[i];\n }\n return ret;\n}\n","/**\n * Functions related to dom operations.\n */\nimport { EventHandler } from './event-handler';\nimport { isNullOrUndefined } from './util';\nvar SVG_REG = /^svg|^path|^g/;\n/**\n * Function to create Html element.\n * @param tagName - Name of the tag, id and class names.\n * @param properties - Object to set properties in the element.\n * @param properties.id - To set the id to the created element.\n * @param properties.className - To add classes to the element.\n * @param properties.innerHTML - To set the innerHTML to element.\n * @param properties.styles - To set the some custom styles to element.\n * @param properties.attrs - To set the attributes to element.\n * @private\n */\nexport function createElement(tagName, properties) {\n //tslint:disable-next-line\n var element = (SVG_REG.test(tagName) ? document.createElementNS('http://www.w3.org/2000/svg', tagName) : document.createElement(tagName));\n if (typeof (properties) === 'undefined') {\n return element;\n }\n element.innerHTML = (properties.innerHTML ? properties.innerHTML : '');\n if (properties.className !== undefined) {\n element.className = properties.className;\n }\n if (properties.id !== undefined) {\n element.id = properties.id;\n }\n if (properties.styles !== undefined) {\n element.setAttribute('style', properties.styles);\n }\n if (properties.attrs !== undefined) {\n attributes(element, properties.attrs);\n }\n return element;\n}\n/**\n * The function used to add the classes to array of elements\n * @param {Element[]|NodeList} elements - An array of elements that need to add a list of classes\n * @param {string|string[]} classes - String or array of string that need to add an individual element as a class\n * @private\n */\nexport function addClass(elements, classes) {\n var classList = getClassList(classes);\n for (var _i = 0, _a = elements; _i < _a.length; _i++) {\n var ele = _a[_i];\n for (var _b = 0, classList_1 = classList; _b < classList_1.length; _b++) {\n var className = classList_1[_b];\n if (!ele.classList.contains(className)) {\n ele.classList.add(className);\n }\n }\n }\n return elements;\n}\n/**\n * The function used to add the classes to array of elements\n * @param {Element[]|NodeList} elements - An array of elements that need to remove a list of classes\n * @param {string|string[]} classes - String or array of string that need to add an individual element as a class\n * @private\n */\nexport function removeClass(elements, classes) {\n var classList = getClassList(classes);\n for (var _i = 0, _a = elements; _i < _a.length; _i++) {\n var ele = _a[_i];\n if (ele.className !== '') {\n for (var _b = 0, classList_2 = classList; _b < classList_2.length; _b++) {\n var className = classList_2[_b];\n ele.classList.remove(className);\n }\n }\n }\n return elements;\n}\nfunction getClassList(classes) {\n var classList = [];\n if (typeof classes === 'string') {\n classList.push(classes);\n }\n else {\n classList = classes;\n }\n return classList;\n}\n/**\n * The function used to check element is visible or not.\n * @param {Element|Node} element - An element the need to check visibility\n * @private\n */\nexport function isVisible(element) {\n var ele = element;\n return (ele.style.visibility === '' && ele.offsetWidth > 0);\n}\n/**\n * The function used to insert an array of elements into a first of the element.\n * @param {Element[]|NodeList} fromElements - An array of elements that need to prepend.\n * @param {Element} toElement - An element that is going to prepend.\n * @private\n */\nexport function prepend(fromElements, toElement) {\n var docFrag = document.createDocumentFragment();\n for (var _i = 0, _a = fromElements; _i < _a.length; _i++) {\n var ele = _a[_i];\n docFrag.appendChild(ele);\n }\n toElement.insertBefore(docFrag, toElement.firstElementChild);\n return fromElements;\n}\n/**\n * The function used to insert an array of elements into last of the element.\n * @param {Element[]|NodeList} fromElements - An array of elements that need to append.\n * @param {Element} toElement - An element that is going to prepend.\n * @private\n */\nexport function append(fromElements, toElement) {\n var docFrag = document.createDocumentFragment();\n for (var _i = 0, _a = fromElements; _i < _a.length; _i++) {\n var ele = _a[_i];\n docFrag.appendChild(ele);\n }\n toElement.appendChild(docFrag);\n return fromElements;\n}\n/**\n * The function used to remove the element from the\n * @param {Element|Node|HTMLElement} element - An element that is going to detach from the Dom\n * @private\n */\nexport function detach(element) {\n var parentNode = element.parentNode;\n return parentNode.removeChild(element);\n}\n/**\n * The function used to remove the element from Dom also clear the bounded events\n * @param {Element|Node|HTMLElement} element - An element remove from the Dom\n * @private\n */\nexport function remove(element) {\n var parentNode = element.parentNode;\n EventHandler.clearEvents(element);\n parentNode.removeChild(element);\n}\n/**\n * The function helps to set multiple attributes to an element\n * @param {Element|Node} element - An element that need to set attributes.\n * @param {{[key:string]:string}} attributes - JSON Object that is going to as attributes.\n * @private\n */\nexport function attributes(element, attributes) {\n var keys = Object.keys(attributes);\n var ele = element;\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n ele.setAttribute(key, attributes[key]);\n }\n return ele;\n}\n/**\n * The function selects the element from giving context.\n * @param {string} selector - Selector string need fetch element from the\n * @param {Document|Element=document} context - It is an optional type, That specifies a Dom context.\n * @private\n */\nexport function select(selector, context) {\n if (context === void 0) { context = document; }\n return context.querySelector(selector);\n}\n/**\n * The function selects an array of element from the given context.\n * @param {string} selector - Selector string need fetch element from the\n * @param {Document|Element=document} context - It is an optional type, That specifies a Dom context.\n * @private\n */\nexport function selectAll(selector, context) {\n if (context === void 0) { context = document; }\n var nodeList = context.querySelectorAll(selector);\n return nodeList;\n}\n/**\n * Returns single closest parent element based on class selector.\n * @param {Element} element - An element that need to find the closest element.\n * @param {string} selector - A classSelector of closest element.\n * @private\n */\nexport function closest(element, selector) {\n var el = element;\n if (typeof el.closest === 'function') {\n return el.closest(selector);\n }\n while (el && el.nodeType === 1) {\n if (matches(el, selector)) {\n return el;\n }\n el = el.parentNode;\n }\n return null;\n}\n/**\n * Returns all sibling elements of the given element.\n * @param {Element|Node} element - An element that need to get siblings.\n * @private\n */\nexport function siblings(element) {\n var siblings = [];\n var childNodes = Array.prototype.slice.call(element.parentNode.childNodes);\n for (var _i = 0, childNodes_1 = childNodes; _i < childNodes_1.length; _i++) {\n var curNode = childNodes_1[_i];\n if (curNode.nodeType === Node.ELEMENT_NODE && element !== curNode) {\n siblings.push(curNode);\n }\n }\n return siblings;\n}\n/**\n * set the value if not exist. Otherwise set the existing value\n * @param {HTMLElement} element - An element to which we need to set value.\n * @param {string} property - Property need to get or set.\n * @param {string} value - value need to set.\n * @private\n */\nexport function getAttributeOrDefault(element, property, value) {\n var attrVal = element.getAttribute(property);\n if (isNullOrUndefined(attrVal)) {\n element.setAttribute(property, value.toString());\n attrVal = value;\n }\n return attrVal;\n}\n/**\n * Set the style attributes to Html element.\n * @param {HTMLElement} element - Element which we want to set attributes\n * @param {any} attrs - Set the given attributes to element\n * @return {void}\n * @private\n */\nexport function setStyleAttribute(element, attrs) {\n if (attrs !== undefined) {\n Object.keys(attrs).forEach(function (key) {\n // tslint:disable-next-line:no-any\n element.style[key] = attrs[key];\n });\n }\n}\n/**\n * Method for add and remove classes to a dom element.\n * @param {Element} element - Element for add and remove classes\n * @param {string[]} addClasses - List of classes need to be add to the element\n * @param {string[]} removeClasses - List of classes need to be remove from the element\n * @return {void}\n * @private\n */\nexport function classList(element, addClasses, removeClasses) {\n addClass([element], addClasses);\n removeClass([element], removeClasses);\n}\n/**\n * Method to check whether the element matches the given selector.\n * @param {Element} element - Element to compare with the selector.\n * @param {string} selector - String selector which element will satisfy.\n * @return {void}\n * @private\n */\nexport function matches(element, selector) {\n var matches = element.matches || element.msMatchesSelector || element.webkitMatchesSelector;\n if (matches) {\n return matches.call(element, selector);\n }\n else {\n return [].indexOf.call(document.querySelectorAll(selector), element) !== -1;\n }\n}\n","import { createInstance, isUndefined, merge, extend, getValue } from './util';\n/**\n * Returns the Class Object\n * @param {ClassObject} instance - instance of ClassObject\n * @param {string} curKey - key of the current instance\n * @param {Object} defaultValue - default Value\n * @param {Object[]} type\n */\nfunction getObject(instance, curKey, defaultValue, type) {\n if (!instance.properties.hasOwnProperty(curKey) || !(instance.properties[curKey] instanceof type)) {\n instance.properties[curKey] = createInstance(type, [instance, curKey, defaultValue]);\n }\n return instance.properties[curKey];\n}\n/**\n * Returns object array\n * @param {ClassObject} instance\n * @param {string} curKey\n * @param {Object[]} defaultValue\n * @param type\n * @param {boolean} isSetter\n * @returns {Object[]}\n */\nfunction getObjectArray(instance, curKey, defaultValue, type, isSetter, isFactory) {\n var result = [];\n var len = defaultValue.length;\n for (var i = 0; i < len; i++) {\n var curType = type;\n if (isFactory) {\n curType = type(defaultValue[i], instance);\n }\n if (isSetter) {\n var inst = createInstance(curType, [instance, curKey, {}, true]);\n inst.setProperties(defaultValue[i], true);\n result.push(inst);\n }\n else {\n result.push(createInstance(curType, [instance, curKey, defaultValue[i], true]));\n }\n }\n return result;\n}\n/**\n * Returns the properties of the object\n * @param {Object} defaultValue\n * @param {string} curKey\n */\nfunction propertyGetter(defaultValue, curKey) {\n return function () {\n if (!this.properties.hasOwnProperty(curKey)) {\n this.properties[curKey] = defaultValue;\n }\n return this.properties[curKey];\n };\n}\n/**\n * Set the properties for the object\n * @param {Object} defaultValue\n * @param {string} curKey\n */\nfunction propertySetter(defaultValue, curKey) {\n return function (newValue) {\n if (this.properties[curKey] !== newValue) {\n var oldVal = this.properties.hasOwnProperty(curKey) ? this.properties[curKey] : defaultValue;\n this.saveChanges(curKey, newValue, oldVal);\n this.properties[curKey] = newValue;\n }\n };\n}\n/**\n * Returns complex objects\n */\nfunction complexGetter(defaultValue, curKey, type) {\n return function () {\n return getObject(this, curKey, defaultValue, type);\n };\n}\n/**\n * Sets complex objects\n */\nfunction complexSetter(defaultValue, curKey, type) {\n return function (newValue) {\n getObject(this, curKey, defaultValue, type).setProperties(newValue);\n };\n}\nfunction complexFactoryGetter(defaultValue, curKey, type) {\n return function () {\n var curType = type({});\n if (this.properties.hasOwnProperty(curKey)) {\n return this.properties[curKey];\n }\n else {\n return getObject(this, curKey, defaultValue, curType);\n }\n };\n}\nfunction complexFactorySetter(defaultValue, curKey, type) {\n return function (newValue) {\n var curType = type(newValue, this);\n getObject(this, curKey, defaultValue, curType).setProperties(newValue);\n };\n}\nfunction complexArrayGetter(defaultValue, curKey, type) {\n return function () {\n if (!this.properties.hasOwnProperty(curKey)) {\n var defCollection = getObjectArray(this, curKey, defaultValue, type, false);\n this.properties[curKey] = defCollection;\n }\n return this.properties[curKey];\n };\n}\nfunction complexArraySetter(defaultValue, curKey, type) {\n return function (newValue) {\n var oldValueCollection = getObjectArray(this, curKey, defaultValue, type, false);\n var newValCollection = getObjectArray(this, curKey, newValue, type, true);\n this.saveChanges(curKey, newValCollection, oldValueCollection);\n this.properties[curKey] = newValCollection;\n };\n}\nfunction complexArrayFactorySetter(defaultValue, curKey, type) {\n return function (newValue) {\n var oldValueCollection = this.properties.hasOwnProperty(curKey) ? this.properties[curKey] : defaultValue;\n var newValCollection = getObjectArray(this, curKey, newValue, type, true, true);\n this.saveChanges(curKey, newValCollection, oldValueCollection);\n this.properties[curKey] = newValCollection;\n };\n}\nfunction complexArrayFactoryGetter(defaultValue, curKey, type) {\n return function () {\n var curType = type({});\n if (!this.properties.hasOwnProperty(curKey)) {\n var defCollection = getObjectArray(this, curKey, defaultValue, curType, false);\n this.properties[curKey] = defCollection;\n }\n return this.properties[curKey];\n };\n}\n/**\n * Method used to create property. General syntax below.\n * @param {T} defaultValue? - Specifies the default value of property.\n * ```\n * @Property('TypeScript')\n * propertyName: Type;\n * ```\n * @private\n */\nexport function Property(defaultValue) {\n return function (target, key) {\n var propertyDescriptor = {\n set: propertySetter(defaultValue, key),\n get: propertyGetter(defaultValue, key),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'prop', defaultValue);\n };\n}\n/**\n * Method used to create complex property. General syntax below.\n * @param {T} defaultValue - Specifies the default value of property.\n * @param {Function} type - Specifies the class type of complex object.\n * ```\n * @Complex({},Type)\n * propertyName: Type;\n * ```\n * @private\n */\nexport function Complex(defaultValue, type) {\n return function (target, key) {\n var propertyDescriptor = {\n set: complexSetter(defaultValue, key, type),\n get: complexGetter(defaultValue, key, type),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'complexProp', defaultValue, type);\n };\n}\n/**\n * Method used to create complex Factory property. General syntax below.\n * @param {Function} defaultType - Specifies the default value of property.\n * @param {Function} type - Specifies the class factory type of complex object.\n * ```\n * @ComplexFactory(defaultType, factoryFunction)\n * propertyName: Type1 | Type2;\n * ```\n * @private\n */\nexport function ComplexFactory(type) {\n return function (target, key) {\n var propertyDescriptor = {\n set: complexFactorySetter({}, key, type),\n get: complexFactoryGetter({}, key, type),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'complexProp', {}, type);\n };\n}\n/**\n * Method used to create complex array property. General syntax below.\n * @param {T[]} defaultValue - Specifies the default value of property.\n * @param {Function} type - Specifies the class type of complex object.\n * ```\n * @Collection([], Type);\n * propertyName: Type;\n * ```\n * @private\n */\nexport function Collection(defaultValue, type) {\n return function (target, key) {\n var propertyDescriptor = {\n set: complexArraySetter(defaultValue, key, type),\n get: complexArrayGetter(defaultValue, key, type),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'colProp', defaultValue, type);\n };\n}\n/**\n * Method used to create complex factory array property. General syntax below.\n * @param {T[]} defaultType - Specifies the default type of property.\n * @param {Function} type - Specifies the class type of complex object.\n * ```\n * @Collection([], Type);\n * propertyName: Type;\n * ```\n * @private\n */\nexport function CollectionFactory(type) {\n return function (target, key) {\n var propertyDescriptor = {\n set: complexArrayFactorySetter([], key, type),\n get: complexArrayFactoryGetter([], key, type),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'colProp', {}, type);\n };\n}\n/**\n * Method used to create event property. General syntax below.\n * @param {Function} defaultValue? - Specifies the default value of property.\n * @param {boolean} isComplex? - Specifies the whether it is complex object.\n * ```\n * @Event(()=>{return true;})\n * ```\n * @private\n */\nexport function Event() {\n return function (target, key) {\n var eventDescriptor = {\n set: function (newValue) {\n var oldValue = this.properties[key];\n if (oldValue !== newValue) {\n var finalContext = getParentContext(this, key);\n if (isUndefined(oldValue) === false) {\n finalContext.context.removeEventListener(finalContext.prefix, oldValue);\n }\n finalContext.context.addEventListener(finalContext.prefix, newValue);\n this.properties[key] = newValue;\n }\n },\n get: propertyGetter(undefined, key),\n enumerable: true,\n configurable: true\n };\n Object.defineProperty(target, key, eventDescriptor);\n addPropertyCollection(target, key, 'event');\n };\n}\n/**\n * NotifyPropertyChanges is triggers the call back when the property has been changed.\n *\n * ```\n * @NotifyPropertyChanges\n * class DemoClass implements INotifyPropertyChanged {\n *\n * @Property()\n * property1: string;\n *\n * dataBind: () => void;\n *\n * constructor() { }\n *\n * onPropertyChanged(newProp: any, oldProp: any) {\n * // Called when property changed\n * }\n * }\n * ```\n * @private\n */\nexport function NotifyPropertyChanges(classConstructor) {\n /** Need to code */\n}\n/**\n * Method used to create the builderObject for the target component.\n * @private\n */\nfunction addPropertyCollection(target, key, propertyType, defaultValue, type) {\n if (isUndefined(target.propList)) {\n target.propList = {\n props: [],\n complexProps: [],\n colProps: [],\n events: [],\n propNames: [],\n complexPropNames: [],\n colPropNames: [],\n eventNames: []\n };\n }\n /* tslint:disable no-any */\n target.propList[propertyType + 's'].push({\n propertyName: key,\n defaultValue: defaultValue,\n type: type\n });\n target.propList[propertyType + 'Names'].push(key);\n /* tslint:enable no-any */\n}\n/**\n * Returns an object containing the builder properties\n * @param {Function} component\n * @private\n */\nfunction getBuilderProperties(component) {\n if (isUndefined(component.prototype.builderObject)) {\n component.prototype.builderObject = {\n properties: {}, propCollections: [], add: function () {\n this.isPropertyArray = true;\n this.propCollections.push(extend({}, this.properties, {}));\n }\n };\n var rex = /complex/;\n for (var _i = 0, _a = Object.keys(component.prototype.propList); _i < _a.length; _i++) {\n var key = _a[_i];\n var _loop_1 = function (prop) {\n if (rex.test(key)) {\n component.prototype.builderObject[prop.propertyName] = function (value) {\n var childType = {};\n merge(childType, getBuilderProperties(prop.type));\n value(childType);\n var tempValue;\n if (!childType.isPropertyArray) {\n tempValue = extend({}, childType.properties, {});\n }\n else {\n tempValue = childType.propCollections;\n }\n this.properties[prop.propertyName] = tempValue;\n childType.properties = {};\n childType.propCollections = [];\n childType.isPropertyArray = false;\n return this;\n };\n }\n else {\n component.prototype.builderObject[prop.propertyName] = function (value) {\n this.properties[prop.propertyName] = value;\n return this;\n };\n }\n };\n for (var _b = 0, _c = component.prototype.propList[key]; _b < _c.length; _b++) {\n var prop = _c[_b];\n _loop_1(prop);\n }\n }\n }\n return component.prototype.builderObject;\n}\n/**\n * Method used to create builder for the components\n * @param {any} component -specifies the target component for which builder to be created.\n * @private\n */\nexport function CreateBuilder(component) {\n var builderFunction = function (element) {\n this.element = element;\n return this;\n };\n var instanceFunction = function (element) {\n if (!builderFunction.prototype.hasOwnProperty('create')) {\n builderFunction.prototype = getBuilderProperties(component);\n builderFunction.prototype.create = function () {\n var temp = extend({}, {}, this.properties);\n this.properties = {};\n return new component(temp, this.element);\n };\n }\n return new builderFunction(element);\n };\n return instanceFunction;\n}\n/**\n * Returns parent options for the object\n * @param {Object} context\n * @param {string} prefix\n * @private\n */\nfunction getParentContext(context, prefix) {\n if (context.hasOwnProperty('parentObj') === false) {\n return { context: context, prefix: prefix };\n }\n else {\n var curText = getValue('propName', context);\n if (curText) {\n prefix = curText + '-' + prefix;\n }\n return getParentContext(getValue('parentObj', context), prefix);\n }\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { createElement, selectAll, closest } from './dom';\nimport { Base } from './base';\nimport { Browser } from './browser';\nimport { EventHandler } from './event-handler';\nimport { Property, NotifyPropertyChanges, Event } from './notify-property-change';\n/**\n * The Animation framework provide options to animate the html DOM elements\n * ```typescript\n * let animeObject = new Animation({\n * name: 'SlideLeftIn',\n * duration: 1000\n * });\n * animeObject.animate('#anime1');\n * animeObject.animate('#anime2', { duration: 500 });\n * ```\n */\nvar Animation = /** @class */ (function (_super) {\n __extends(Animation, _super);\n function Animation(options) {\n var _this = _super.call(this, options, undefined) || this;\n /**\n * @private\n */\n _this.easing = {\n ease: 'cubic-bezier(0.250, 0.100, 0.250, 1.000)',\n linear: 'cubic-bezier(0.250, 0.250, 0.750, 0.750)',\n easeIn: 'cubic-bezier(0.420, 0.000, 1.000, 1.000)',\n easeOut: 'cubic-bezier(0.000, 0.000, 0.580, 1.000)',\n easeInOut: 'cubic-bezier(0.420, 0.000, 0.580, 1.000)',\n elasticInOut: 'cubic-bezier(0.5,-0.58,0.38,1.81)',\n elasticIn: 'cubic-bezier(0.17,0.67,0.59,1.81)',\n elasticOut: 'cubic-bezier(0.7,-0.75,0.99,1.01)'\n };\n return _this;\n }\n Animation_1 = Animation;\n /**\n * Applies animation to the current element.\n * @param {string | HTMLElement} element - Element which needs to be animated.\n * @param {AnimationModel} options - Overriding default animation settings.\n * @return {void}\n */\n Animation.prototype.animate = function (element, options) {\n options = !options ? {} : options;\n var model = this.getModel(options);\n if (typeof element === 'string') {\n var elements = Array.prototype.slice.call(selectAll(element, document));\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var element_1 = elements_1[_i];\n model.element = element_1;\n Animation_1.delayAnimation(model);\n }\n }\n else {\n model.element = element;\n Animation_1.delayAnimation(model);\n }\n };\n /**\n * Stop the animation effect on animated element.\n * @param {HTMLElement} element - Element which needs to be stop the animation.\n * @param {AnimationOptions} model - Handling the animation model at stop function.\n * @return {void}\n */\n Animation.stop = function (element, model) {\n element.style.animation = '';\n element.removeAttribute('e-animate');\n var animationId = element.getAttribute('e-animation-id');\n if (animationId) {\n var frameId = parseInt(animationId, 10);\n cancelAnimationFrame(frameId);\n element.removeAttribute('e-animation-id');\n }\n if (model && model.end) {\n model.end.call(this, model);\n }\n };\n /**\n * Set delay to animation element\n * @param {AnimationModel} model\n * @returns {void}\n */\n Animation.delayAnimation = function (model) {\n if (model.delay) {\n setTimeout(function () { Animation_1.applyAnimation(model); }, model.delay);\n }\n else {\n Animation_1.applyAnimation(model);\n }\n };\n /**\n * Triggers animation\n * @param {AnimationModel} model\n * @returns {void}\n */\n Animation.applyAnimation = function (model) {\n var _this = this;\n model.timeStamp = 0;\n var step = 0;\n var timerId = 0;\n var startTime = 0;\n var prevTimeStamp = 0;\n var duration = model.duration;\n model.element.setAttribute('e-animate', 'true');\n var startAnimation = function (timeStamp) {\n try {\n if (timeStamp) {\n // let step: number = model.timeStamp = timeStamp - startTime;\n /** phantomjs workaround for timestamp fix */\n prevTimeStamp = prevTimeStamp === 0 ? timeStamp : prevTimeStamp;\n model.timeStamp = (timeStamp + model.timeStamp) - prevTimeStamp;\n prevTimeStamp = timeStamp;\n /** phantomjs workaround end */\n // trigger animation begin event\n if (!step && model.begin) {\n model.begin.call(_this, model);\n }\n step = step + 1;\n var avg = model.timeStamp / step;\n if (model.timeStamp < duration && model.timeStamp + avg < duration && model.element.getAttribute('e-animate')) {\n // apply animation effect to the current element \n model.element.style.animation = model.name + ' ' + model.duration + 'ms ' + model.timingFunction;\n if (model.progress) {\n model.progress.call(_this, model);\n }\n // repeat requestAnimationFrame \n requestAnimationFrame(startAnimation);\n }\n else {\n // clear requestAnimationFrame\n cancelAnimationFrame(timerId);\n model.element.removeAttribute('e-animation-id');\n model.element.removeAttribute('e-animate');\n model.element.style.animation = '';\n if (model.end) {\n model.end.call(_this, model);\n }\n }\n }\n else {\n startTime = performance.now();\n // set initial requestAnimationFrame\n timerId = requestAnimationFrame(startAnimation);\n model.element.setAttribute('e-animation-id', timerId.toString());\n }\n }\n catch (e) {\n cancelAnimationFrame(timerId);\n model.element.removeAttribute('e-animation-id');\n if (model.fail) {\n model.fail.call(_this, e);\n }\n }\n };\n startAnimation();\n };\n /**\n * Returns Animation Model\n * @param {AnimationModel} options\n * @returns {AnimationModel}\n */\n Animation.prototype.getModel = function (options) {\n return {\n name: options.name || this.name,\n delay: options.delay || this.delay,\n duration: (options.duration !== undefined ? options.duration : this.duration),\n begin: options.begin || this.begin,\n end: options.end || this.end,\n fail: options.fail || this.fail,\n progress: options.progress || this.progress,\n timingFunction: this.easing[options.timingFunction] ? this.easing[options.timingFunction] :\n (options.timingFunction || this.easing[this.timingFunction])\n };\n };\n /**\n * @private\n */\n Animation.prototype.onPropertyChanged = function (newProp, oldProp) {\n // no code needed\n };\n /**\n * Returns module name as animation\n * @private\n */\n Animation.prototype.getModuleName = function () {\n return 'animation';\n };\n /**\n * @private\n */\n Animation.prototype.destroy = function () {\n //Override base destroy;\n };\n __decorate([\n Property('FadeIn')\n ], Animation.prototype, \"name\", void 0);\n __decorate([\n Property(400)\n ], Animation.prototype, \"duration\", void 0);\n __decorate([\n Property('ease')\n ], Animation.prototype, \"timingFunction\", void 0);\n __decorate([\n Property(0)\n ], Animation.prototype, \"delay\", void 0);\n __decorate([\n Event()\n ], Animation.prototype, \"progress\", void 0);\n __decorate([\n Event()\n ], Animation.prototype, \"begin\", void 0);\n __decorate([\n Event()\n ], Animation.prototype, \"end\", void 0);\n __decorate([\n Event()\n ], Animation.prototype, \"fail\", void 0);\n Animation = Animation_1 = __decorate([\n NotifyPropertyChanges\n ], Animation);\n return Animation;\n var Animation_1;\n}(Base));\nexport { Animation };\n/**\n * Ripple provides material theme's wave effect when an element is clicked\n * ```html\n *
\n * \n * ```\n * @private\n * @param HTMLElement element - Target element\n * @param RippleOptions rippleOptions - Ripple options .\n */\nexport function rippleEffect(element, rippleOptions, done) {\n var rippleModel = getRippleModel(rippleOptions);\n if (rippleModel.rippleFlag === false || (rippleModel.rippleFlag === undefined && !isRippleEnabled)) {\n return Function;\n }\n element.setAttribute('data-ripple', 'true');\n EventHandler.add(element, 'mousedown', rippleHandler, { parent: element, rippleOptions: rippleModel });\n EventHandler.add(element, 'mouseup', rippleUpHandler, { parent: element, rippleOptions: rippleModel, done: done });\n EventHandler.add(element, 'mouseleave', rippleLeaveHandler, { parent: element, rippleOptions: rippleModel });\n if (Browser.isPointer) {\n EventHandler.add(element, 'transitionend', rippleLeaveHandler, { parent: element, rippleOptions: rippleModel });\n }\n return (function () {\n element.removeAttribute('data-ripple');\n EventHandler.remove(element, 'mousedown', rippleHandler);\n EventHandler.remove(element, 'mouseup', rippleUpHandler);\n EventHandler.remove(element, 'mouseleave', rippleLeaveHandler);\n EventHandler.remove(element, 'transitionend', rippleLeaveHandler);\n });\n}\nfunction getRippleModel(rippleOptions) {\n var rippleModel = {\n selector: rippleOptions && rippleOptions.selector ? rippleOptions.selector : null,\n ignore: rippleOptions && rippleOptions.ignore ? rippleOptions.ignore : null,\n rippleFlag: rippleOptions && rippleOptions.rippleFlag,\n isCenterRipple: rippleOptions && rippleOptions.isCenterRipple,\n duration: rippleOptions && rippleOptions.duration ? rippleOptions.duration : 350\n };\n return rippleModel;\n}\n/**\n * Handler for ripple event\n * @param {MouseEvent} e\n * @returns {void}\n * @private\n */\nfunction rippleHandler(e) {\n var target = (e.target);\n var selector = this.rippleOptions.selector;\n var element = selector ? closest(target, selector) : target;\n if (!element || (this.rippleOptions && closest(target, this.rippleOptions.ignore))) {\n return;\n }\n var offset = element.getBoundingClientRect();\n var offsetX = e.pageX - document.body.scrollLeft;\n var offsetY = e.pageY - ((!document.body.scrollTop && document.documentElement) ?\n document.documentElement.scrollTop : document.body.scrollTop);\n var pageX = Math.max(Math.abs(offsetX - offset.left), Math.abs(offsetX - offset.right));\n var pageY = Math.max(Math.abs(offsetY - offset.top), Math.abs(offsetY - offset.bottom));\n var radius = Math.sqrt(pageX * pageX + pageY * pageY);\n var diameter = radius * 2 + 'px';\n var x = offsetX - offset.left - radius;\n var y = offsetY - offset.top - radius;\n if (this.rippleOptions && this.rippleOptions.isCenterRipple) {\n x = 0;\n y = 0;\n diameter = '100%';\n }\n element.classList.add('e-ripple');\n var duration = this.rippleOptions.duration.toString();\n var styles = 'width: ' + diameter + ';height: ' + diameter + ';left: ' + x + 'px;top: ' + y + 'px;' +\n 'transition-duration: ' + duration + 'ms;';\n var rippleElement = createElement('div', { className: 'e-ripple-element', styles: styles });\n element.appendChild(rippleElement);\n window.getComputedStyle(rippleElement).getPropertyValue('opacity');\n rippleElement.style.transform = 'scale(1)';\n if (element !== this.parent) {\n EventHandler.add(element, 'mouseleave', rippleLeaveHandler, { parent: this.parent, rippleOptions: this.rippleOptions });\n }\n}\n/**\n * Handler for ripple element mouse up event\n * @param {MouseEvent} e\n * @returns {void}\n * @private\n */\nfunction rippleUpHandler(e) {\n removeRipple(e, this);\n}\n/**\n * Handler for ripple element mouse move event\n * @param {MouseEvent} e\n * @returns {void}\n * @private\n */\nfunction rippleLeaveHandler(e) {\n removeRipple(e, this);\n}\n/**\n * Handler for removing ripple element\n * @param {MouseEvent} e\n * @param {rippleArgs} eventArgs\n * @returns {void}\n * @private\n */\nfunction removeRipple(e, eventArgs) {\n var duration = eventArgs.rippleOptions.duration;\n var target = (e.target);\n var selector = eventArgs.rippleOptions.selector;\n var element = selector ? closest(target, selector) : target;\n if (!element || (element && element.className.indexOf('e-ripple') === -1)) {\n return;\n }\n var rippleElements = selectAll('.e-ripple-element', element);\n var rippleElement = rippleElements[rippleElements.length - 1];\n if (rippleElement) {\n rippleElement.style.opacity = '0.5';\n }\n if (eventArgs.parent !== element) {\n EventHandler.remove(element, 'mouseleave', rippleLeaveHandler);\n }\n /* tslint:disable:align */\n setTimeout(function () {\n if (rippleElement && rippleElement.parentNode) {\n rippleElement.parentNode.removeChild(rippleElement);\n }\n if (!element.getElementsByClassName('e-ripple-element').length) {\n element.classList.remove('e-ripple');\n }\n if (eventArgs.done) {\n eventArgs.done(e);\n }\n }, duration);\n}\nexport var isRippleEnabled = false;\n/**\n * Animation Module provides support to enable ripple effect functionality to Essential JS 2 components.\n * @param {boolean} isRipple Specifies the boolean value to enable or disable ripple effect.\n * @returns {boolean}\n */\nexport function enableRipple(isRipple) {\n isRippleEnabled = isRipple;\n return isRippleEnabled;\n}\n","import { DateFormat } from './intl/date-formatter';\nimport { NumberFormat } from './intl/number-formatter';\nimport { DateParser } from './intl/date-parser';\nimport { NumberParser } from './intl/number-parser';\nimport { IntlBase } from './intl/intl-base';\nimport { extend, getValue } from './util';\nimport { Observer } from './observer';\n/**\n * Specifies the observer used for external change detection.\n */\nexport var onIntlChange = new Observer();\n/**\n * Specifies the default rtl status for EJ2 components.\n */\nexport var rightToLeft = false;\n/**\n * Specifies the CLDR data loaded for internationalization functionalities.\n * @private\n */\nexport var cldrData = {};\n/**\n * Specifies the default culture value to be considered.\n * @private\n */\nexport var defaultCulture = 'en-US';\n/**\n * Specifies default currency code to be considered\n * @private\n */\nexport var defaultCurrencyCode = 'USD';\nvar mapper = ['numericObject', 'dateObject'];\n/**\n * Internationalization class provides support to parse and format the number and date object to the desired format.\n * ```typescript\n * // To set the culture globally\n * setCulture('en-GB');\n *\n * // To set currency code globally\n * setCurrencyCode('EUR');\n *\n * //Load cldr data\n * loadCldr(gregorainData);\n * loadCldr(timeZoneData);\n * loadCldr(numbersData);\n * loadCldr(numberSystemData);\n *\n * // To use formatter in component side\n * let Intl:Internationalization = new Internationalization();\n *\n * // Date formatting\n * let dateFormatter: Function = Intl.getDateFormat({skeleton:'long',type:'dateTime'});\n * dateFormatter(new Date('11/2/2016'));\n * dateFormatter(new Date('25/2/2030'));\n * Intl.formatDate(new Date(),{skeleton:'E'});\n *\n * //Number formatting\n * let numberFormatter: Function = Intl.getNumberFormat({skeleton:'C5'})\n * numberFormatter(24563334);\n * Intl.formatNumber(123123,{skeleton:'p2'});\n *\n * // Date parser\n * let dateParser: Function = Intl.getDateParser({skeleton:'short',type:'time'});\n * dateParser('10:30 PM');\n * Intl.parseDate('10',{skeleton:'H'});\n * ```\n */\nvar Internationalization = /** @class */ (function () {\n function Internationalization(cultureName) {\n if (cultureName) {\n this.culture = cultureName;\n }\n }\n /**\n * Returns the format function for given options.\n * @param {DateFormatOptions} options - Specifies the format options in which the format function will return.\n * @returns {Function}\n */\n Internationalization.prototype.getDateFormat = function (options) {\n return DateFormat.dateFormat(this.getCulture(), options || { type: 'date', skeleton: 'short' }, cldrData);\n };\n /**\n * Returns the format function for given options.\n * @param {NumberFormatOptions} options - Specifies the format options in which the format function will return.\n * @returns {Function}\n */\n Internationalization.prototype.getNumberFormat = function (options) {\n if (options && !options.currency) {\n options.currency = defaultCurrencyCode;\n }\n return NumberFormat.numberFormatter(this.getCulture(), options || {}, cldrData);\n };\n /**\n * Returns the parser function for given options.\n * @param {DateFormatOptions} options - Specifies the format options in which the parser function will return.\n * @returns {Function}\n * @private\n */\n Internationalization.prototype.getDateParser = function (options) {\n return DateParser.dateParser(this.getCulture(), options || { skeleton: 'short', type: 'date' }, cldrData);\n };\n /**\n * Returns the parser function for given options.\n * @param {NumberFormatOptions} options - Specifies the format options in which the parser function will return.\n * @returns {Function}\n */\n Internationalization.prototype.getNumberParser = function (options) {\n return NumberParser.numberParser(this.getCulture(), options || { format: 'N' }, cldrData);\n };\n /**\n * Returns the formatted string based on format options.\n * @param {Number} value - Specifies the number to format.\n * @param {NumberFormatOptions} option - Specifies the format options in which the number will be formatted.\n * @returns {string}\n */\n Internationalization.prototype.formatNumber = function (value, option) {\n return this.getNumberFormat(option)(value);\n };\n /**\n * Returns the formatted date string based on format options.\n * @param {Number} value - Specifies the number to format.\n * @param {DateFormatOptions} option - Specifies the format options in which the number will be formatted.\n * @returns {string}\n */\n Internationalization.prototype.formatDate = function (value, option) {\n return this.getDateFormat(option)(value);\n };\n /**\n * Returns the date object for given date string and options.\n * @param {string} value - Specifies the string to parse.\n * @param {DateFormatOptions} option - Specifies the parse options in which the date string will be parsed.\n * @returns {Date}\n */\n Internationalization.prototype.parseDate = function (value, option) {\n return this.getDateParser(option)(value);\n };\n /**\n * Returns the number object from the given string value and options.\n * @param {string} value - Specifies the string to parse.\n * @param {NumberFormatOptions} option - Specifies the parse options in which the string number will be parsed.\n * @returns {number}\n */\n Internationalization.prototype.parseNumber = function (value, option) {\n return this.getNumberParser(option)(value);\n };\n /**\n * Returns Native Date Time Pattern\n * @param {DateFormatOptions} option - Specifies the parse options for resultant date time pattern.\n * @param {boolean} isExcelFormat - Specifies format value to be converted to excel pattern.\n * @returns {string}\n * @private\n */\n Internationalization.prototype.getDatePattern = function (option, isExcelFormat) {\n return IntlBase.getActualDateTimeFormat(this.getCulture(), option, cldrData, isExcelFormat);\n };\n /**\n * Returns Native Number Pattern\n * @param {NumberFormatOptions} option - Specifies the parse options for resultant number pattern.\n * @returns {string}\n * @private\n */\n Internationalization.prototype.getNumberPattern = function (option) {\n return IntlBase.getActualNumberFormat(this.getCulture(), option, cldrData);\n };\n Internationalization.prototype.getCulture = function () {\n return this.culture || defaultCulture;\n };\n return Internationalization;\n}());\nexport { Internationalization };\n/**\n * Set the default culture to all EJ2 components\n * @param {string} cultureName - Specifies the culture name to be set as default culture.\n */\nexport function setCulture(cultureName) {\n defaultCulture = cultureName;\n onIntlChange.notify('notifyExternalChange', { 'locale': defaultCulture });\n}\n/**\n * Set the default currency code to all EJ2 components\n * @param {string} currencyCode Specifies the culture name to be set as default culture.\n * @returns {void}\n */\nexport function setCurrencyCode(currencyCode) {\n defaultCurrencyCode = currencyCode;\n onIntlChange.notify('notifyExternalChange', { 'currencyCode': defaultCurrencyCode });\n}\n/**\n * Load the CLDR data into context\n * @param {Object[]} obj Specifies the CLDR data's to be used for formatting and parser.\n * @returns {void}\n */\nexport function loadCldr() {\n var data = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n data[_i] = arguments[_i];\n }\n for (var _a = 0, data_1 = data; _a < data_1.length; _a++) {\n var obj = data_1[_a];\n extend(cldrData, obj, {}, true);\n }\n}\n/**\n * To enable or disable RTL functionality for all components globally.\n * @param {boolean} status - Optional argument Specifies the status value to enable or disable rtl option.\n * @returns {void}\n */\nexport function enableRtl(status) {\n if (status === void 0) { status = true; }\n rightToLeft = status;\n onIntlChange.notify('notifyExternalChange', { enableRtl: rightToLeft });\n}\n/**\n * To get the numeric CLDR object for given culture\n * @param {string} locale - Specifies the locale for which numericObject to be returned.\n * @ignore\n * @private\n */\nexport function getNumericObject(locale, type) {\n /* tslint:disable no-any */\n var numObject = IntlBase.getDependables(cldrData, locale, true)[mapper[0]];\n var dateObject = IntlBase.getDependables(cldrData, locale)[mapper[1]];\n var numSystem = getValue('defaultNumberingSystem', numObject);\n var symbPattern = getValue('symbols-numberSystem-' + numSystem, numObject);\n var pattern = IntlBase.getSymbolPattern(type || 'decimal', numSystem, numObject, false);\n return extend(symbPattern, IntlBase.getFormatData(pattern, true, '', true), { 'dateSeparator': IntlBase.getDateSeparator(dateObject) });\n}\n/**\n * To get the default date CLDR object.\n * @ignore\n * @private\n */\nexport function getDefaultDateObject() {\n return IntlBase.getDependables(cldrData, '', false)[mapper[1]];\n}\n","/**\n * Template Engine\n */\nvar LINES = new RegExp('\\\\n|\\\\r|\\\\s\\\\s+', 'g');\nvar QUOTES = new RegExp(/'|\"/g);\nvar IF_STMT = new RegExp('if ?\\\\(');\nvar ELSEIF_STMT = new RegExp('else if ?\\\\(');\nvar ELSE_STMT = new RegExp('else');\nvar FOR_STMT = new RegExp('for ?\\\\(');\nvar IF_OR_FOR = new RegExp('(\\/if|\\/for)');\nvar CALL_FUNCTION = new RegExp('\\\\((.*)\\\\)', '');\nvar NOT_NUMBER = new RegExp('^[0-9]+$', 'g');\nvar WORD = new RegExp('[\\\\w\"\\'.\\\\s+]+', 'g');\nvar DBL_QUOTED_STR = new RegExp('\"(.*?)\"', 'g');\nvar exp = new RegExp('\\\\${([^}]*)}', 'g');\n// let cachedTemplate: Object = {};\n/**\n * The function to set regular expression for template expression string.\n * @param {RegExp} value - Value expression.\n * @private\n */\nexport function expression(value) {\n if (value) {\n exp = value;\n }\n return exp;\n}\n// /**\n// * To render the template string from the given data.\n// * @param {string} template - String Template.\n// * @param {Object[]|JSON} data - DataSource for the template.\n// * @param {Object} helper? - custom helper object.\n// */\n// export function template(template: string, data: JSON, helper?: Object): string {\n// let hash: string = hashCode(template);\n// let tmpl: Function;\n// if (!cachedTemplate[hash]) {\n// tmpl = cachedTemplate[hash] = compile(template, helper);\n// } else {\n// tmpl = cachedTemplate[hash];\n// }\n// return tmpl(data);\n// }\n/**\n * Compile the template string into template function.\n * @param {string} template - The template string which is going to convert.\n * @param {Object} helper? - Helper functions as an object.\n * @private\n */\nexport function compile(template, helper) {\n var argName = 'data';\n var evalExpResult = evalExp(template, argName, helper);\n var fnCode = \"var str=\\\"\" + evalExpResult + \"\\\"; return str;\";\n // tslint:disable-next-line:no-function-constructor-with-string-args\n var fn = new Function(argName, fnCode);\n return fn.bind(helper);\n}\n// function used to evaluate the function expression\nfunction evalExp(str, nameSpace, helper) {\n var varCOunt = 0;\n /**\n * Variable containing Local Keys\n */\n var localKeys = [];\n return str.replace(LINES, '').replace(DBL_QUOTED_STR, '\\'$1\\'').replace(exp, function (match, cnt, offset, matchStr) {\n var matches = cnt.match(CALL_FUNCTION);\n // matches to detect any function calls\n if (matches) {\n var rlStr = matches[1];\n if (ELSEIF_STMT.test(cnt)) {\n //handling else-if condition\n cnt = '\";} ' + cnt.replace(matches[1], rlStr.replace(WORD, function (str) {\n str = str.trim();\n return addNameSpace(str, !(QUOTES.test(str)) && (localKeys.indexOf(str) === -1), nameSpace, localKeys);\n })) + '{ \\n str = str + \"';\n }\n else if (IF_STMT.test(cnt)) {\n //handling if condition\n cnt = '\"; ' + cnt.replace(matches[1], rlStr.replace(WORD, function (strs) {\n strs = strs.trim();\n return addNameSpace(strs, !(QUOTES.test(strs)) && (localKeys.indexOf(strs) === -1), nameSpace, localKeys);\n })) + '{ \\n str = str + \"';\n }\n else if (FOR_STMT.test(cnt)) {\n //handling for condition\n var rlStr_1 = matches[1].split(' of ');\n // replace for each into actual JavaScript\n cnt = '\"; ' + cnt.replace(matches[1], function (mtc) {\n localKeys.push(rlStr_1[0]);\n localKeys.push(rlStr_1[0] + 'Index');\n varCOunt = varCOunt + 1;\n // tslint:disable-next-line\n return 'var i' + varCOunt + '=0; i' + varCOunt + ' < ' + addNameSpace(rlStr_1[1], true, nameSpace, localKeys) + '.length; i' + varCOunt + '++';\n }) + '{ \\n ' + rlStr_1[0] + '= ' + addNameSpace(rlStr_1[1], true, nameSpace, localKeys)\n + '[i' + varCOunt + ']; \\n var ' + rlStr_1[0] + 'Index=i' + varCOunt + '; \\n str = str + \"';\n }\n else {\n //helper function handling\n var fnStr = cnt.split('(');\n var fNameSpace = (helper && helper.hasOwnProperty(fnStr[0]) ? 'this.' : 'global');\n fNameSpace = (/\\./.test(fnStr[0]) ? '' : fNameSpace);\n cnt = '\" + ' + (fNameSpace === 'global' ? '' : fNameSpace) +\n cnt.replace(rlStr, addNameSpace(matches[1].replace(',', nameSpace + '.'), (fNameSpace === 'global' ? false : true), nameSpace, localKeys)) +\n '+\"';\n }\n }\n else if (ELSE_STMT.test(cnt)) {\n //handling else condition\n cnt = '\"; ' + cnt.replace(ELSE_STMT, '} else { \\n str = str + \"');\n }\n else if (!!cnt.match(IF_OR_FOR)) {\n // close condition \n cnt = cnt.replace(IF_OR_FOR, '\"; \\n } \\n str = str + \"');\n }\n else {\n // evaluate normal expression\n cnt = '\"+' + addNameSpace(cnt, (localKeys.indexOf(cnt) === -1), nameSpace, localKeys) + '+\"';\n }\n return cnt;\n });\n}\nfunction addNameSpace(str, addNS, nameSpace, ignoreList) {\n return ((addNS && !(NOT_NUMBER.test(str)) && ignoreList.indexOf(str.split('.')[0]) === -1) ? nameSpace + '.' + str : str);\n}\n// // Create hashCode for template string to storeCached function\n// function hashCode(str: string): string {\n// return str.split('').reduce((a: number, b: string) => { a = ((a << 5) - a) + b.charCodeAt(0); return a & a; }, 0).toString();\n// }\n","/**\n * Template Engine Bridge\n */\nimport { compile as render } from './template';\nimport { createElement } from './dom';\nvar HAS_ROW = /^[\\n\\r.]+\\ containerWidth) {\n if (overLeft > 0 && overRight <= 0) {\n position.left = containerRight - elemData.width;\n }\n else if (overRight > 0 && overLeft <= 0) {\n position.left = containerLeft;\n }\n else {\n position.left = overLeft > overRight ? (containerRight - elemData.width) : containerLeft;\n }\n }\n else if (overLeft > 0) {\n position.left += overLeft;\n }\n else if (overRight > 0) {\n position.left -= overRight;\n }\n }\n if (axis.Y) {\n var containerHeight = targetContainer ? getTargetContainerHeight() : getViewPortHeight();\n var containerTop = ContainerTop();\n var containerBottom = ContainerBottom();\n var overTop = containerTop - position.top;\n var overBottom = position.top + elemData.height - containerBottom;\n if (elemData.height > containerHeight) {\n if (overTop > 0 && overBottom <= 0) {\n position.top = containerBottom - elemData.height;\n }\n else if (overBottom > 0 && overTop <= 0) {\n position.top = containerTop;\n }\n else {\n position.top = overTop > overBottom ? (containerBottom - elemData.height) : containerTop;\n }\n }\n else if (overTop > 0) {\n position.top += overTop;\n }\n else if (overBottom > 0) {\n position.top -= overBottom;\n }\n }\n return position;\n}\nexport function isCollide(element, viewPortElement, x, y) {\n if (viewPortElement === void 0) { viewPortElement = null; }\n var elemOffset = calculatePosition(element, 'left', 'top');\n if (x) {\n elemOffset.left = x;\n }\n if (y) {\n elemOffset.top = y;\n }\n var data = [];\n targetContainer = viewPortElement;\n parentDocument = element.ownerDocument;\n var elementRect = element.getBoundingClientRect();\n var top = elemOffset.top;\n var left = elemOffset.left;\n var right = elemOffset.left + elementRect.width;\n var bottom = elemOffset.top + elementRect.height;\n var topData = '';\n var leftData = '';\n var yAxis = topCollideCheck(top, bottom);\n var xAxis = leftCollideCheck(left, right);\n if (yAxis.topSide) {\n data.push('top');\n }\n if (xAxis.rightSide) {\n data.push('right');\n }\n if (xAxis.leftSide) {\n data.push('left');\n }\n if (yAxis.bottomSide) {\n data.push('bottom');\n }\n return data;\n}\nexport function flip(element, target, offsetX, offsetY, positionX, positionY, viewPortElement, axis, fixedParent) {\n if (viewPortElement === void 0) { viewPortElement = null; }\n if (axis === void 0) { axis = { X: true, Y: true }; }\n if (!target || !element || !positionX || !positionY || (!axis.X && !axis.Y)) {\n return;\n }\n var tEdge = { TL: null,\n TR: null,\n BL: null,\n BR: null };\n var eEdge = {\n TL: null,\n TR: null,\n BL: null,\n BR: null\n };\n var elementRect = element.getBoundingClientRect();\n var pos = {\n posX: positionX, posY: positionY, offsetX: offsetX, offsetY: offsetY, position: { left: 0, top: 0 }\n };\n targetContainer = viewPortElement;\n parentDocument = target.ownerDocument;\n updateElementData(target, tEdge, pos, fixedParent, elementRect);\n setPosition(eEdge, pos, elementRect);\n if (axis.X) {\n leftFlip(target, eEdge, tEdge, pos, elementRect, true);\n }\n if (axis.Y && tEdge.TL.top > -1) {\n topFlip(target, eEdge, tEdge, pos, elementRect, true);\n }\n setPopup(element, pos, elementRect);\n}\nfunction setPopup(element, pos, elementRect) {\n var left = 0;\n var top = 0;\n if (element.offsetParent != null\n && (getComputedStyle(element.offsetParent).position === 'absolute' ||\n getComputedStyle(element.offsetParent).position === 'relative')) {\n var data = calculatePosition(element.offsetParent, 'left', 'top', false, elementRect);\n left = data.left;\n top = data.top;\n }\n element.style.top = (pos.position.top + pos.offsetY - (top)) + 'px';\n element.style.left = (pos.position.left + pos.offsetX - (left)) + 'px';\n}\nfunction updateElementData(target, edge, pos, fixedParent, elementRect) {\n pos.position = calculatePosition(target, pos.posX, pos.posY, fixedParent, elementRect);\n edge.TL = calculatePosition(target, 'left', 'top', fixedParent, elementRect);\n edge.TR = calculatePosition(target, 'right', 'top', fixedParent, elementRect);\n edge.BR = calculatePosition(target, 'left', 'bottom', fixedParent, elementRect);\n edge.BL = calculatePosition(target, 'right', 'bottom', fixedParent, elementRect);\n}\nfunction setPosition(eStatus, pos, elementRect) {\n eStatus.TL = { top: pos.position.top + pos.offsetY, left: pos.position.left + pos.offsetX };\n eStatus.TR = { top: eStatus.TL.top, left: eStatus.TL.left + elementRect.width };\n eStatus.BL = { top: eStatus.TL.top + elementRect.height,\n left: eStatus.TL.left };\n eStatus.BR = { top: eStatus.TL.top + elementRect.height,\n left: eStatus.TL.left + elementRect.width };\n}\nfunction leftCollideCheck(left, right) {\n var leftSide = false;\n var rightSide = false;\n if (((left - getBodyScrollLeft()) < ContainerLeft())) {\n leftSide = true;\n }\n if (right > ContainerRight()) {\n rightSide = true;\n }\n return { leftSide: leftSide, rightSide: rightSide };\n}\nfunction leftFlip(target, edge, tEdge, pos, elementRect, deepCheck) {\n var collideSide = leftCollideCheck(edge.TL.left, edge.TR.left);\n if ((tEdge.TL.left - getBodyScrollLeft()) <= ContainerLeft()) {\n collideSide.leftSide = false;\n }\n if (tEdge.TR.left >= ContainerRight()) {\n collideSide.rightSide = false;\n }\n if ((collideSide.leftSide && !collideSide.rightSide) || (!collideSide.leftSide && collideSide.rightSide)) {\n if (pos.posX === 'right') {\n pos.posX = 'left';\n }\n else {\n pos.posX = 'right';\n }\n pos.offsetX = pos.offsetX + elementRect.width;\n pos.offsetX = -1 * pos.offsetX;\n pos.position = calculatePosition(target, pos.posX, pos.posY, false);\n setPosition(edge, pos, elementRect);\n if (deepCheck) {\n leftFlip(target, edge, tEdge, pos, elementRect, false);\n }\n }\n}\nfunction topFlip(target, edge, tEdge, pos, elementRect, deepCheck) {\n var collideSide = topCollideCheck(edge.TL.top, edge.BL.top);\n if ((tEdge.TL.top - getBodyScrollTop()) <= ContainerTop()) {\n collideSide.topSide = false;\n }\n if (tEdge.BL.top >= ContainerBottom()) {\n collideSide.bottomSide = false;\n }\n if ((collideSide.topSide && !collideSide.bottomSide) || (!collideSide.topSide && collideSide.bottomSide)) {\n if (pos.posY === 'top') {\n pos.posY = 'bottom';\n }\n else {\n pos.posY = 'top';\n }\n pos.offsetY = pos.offsetY + elementRect.height;\n pos.offsetY = -1 * pos.offsetY;\n pos.position = calculatePosition(target, pos.posX, pos.posY, false, elementRect);\n setPosition(edge, pos, elementRect);\n if (deepCheck) {\n topFlip(target, edge, tEdge, pos, elementRect, false);\n }\n }\n}\nfunction topCollideCheck(top, bottom) {\n var topSide = false;\n var bottomSide = false;\n if ((top - getBodyScrollTop()) < ContainerTop()) {\n topSide = true;\n }\n if (bottom > ContainerBottom()) {\n bottomSide = true;\n }\n return { topSide: topSide, bottomSide: bottomSide };\n}\nfunction getTargetContainerWidth() {\n return targetContainer.getBoundingClientRect().width;\n}\nfunction getTargetContainerHeight() {\n return targetContainer.getBoundingClientRect().height;\n}\nfunction getTargetContainerLeft() {\n return targetContainer.getBoundingClientRect().left;\n}\nfunction getTargetContainerTop() {\n return targetContainer.getBoundingClientRect().top;\n}\nfunction ContainerTop() {\n if (targetContainer) {\n return getTargetContainerTop();\n }\n return 0;\n}\nfunction ContainerLeft() {\n if (targetContainer) {\n return getTargetContainerLeft();\n }\n return 0;\n}\nfunction ContainerRight() {\n if (targetContainer) {\n return (getBodyScrollLeft() + getTargetContainerLeft() + getTargetContainerWidth());\n }\n return (getBodyScrollLeft() + getViewPortWidth());\n}\nfunction ContainerBottom() {\n if (targetContainer) {\n return (getBodyScrollTop() + getTargetContainerTop() + getTargetContainerHeight());\n }\n return (getBodyScrollTop() + getViewPortHeight());\n}\nfunction getBodyScrollTop() {\n // if(targetContainer)\n // return targetContainer.scrollTop;\n return parentDocument.documentElement.scrollTop || parentDocument.body.scrollTop;\n}\nfunction getBodyScrollLeft() {\n // if(targetContainer)\n // return targetContainer.scrollLeft;\n return parentDocument.documentElement.scrollLeft || parentDocument.body.scrollLeft;\n}\nfunction getViewPortHeight() {\n return window.innerHeight;\n}\nfunction getViewPortWidth() {\n return window.innerWidth;\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { setStyleAttribute, addClass, removeClass, ChildProperty, Complex } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, formatUnit } from '@syncfusion/ej2-base';\nimport { Browser } from '@syncfusion/ej2-base';\nimport { calculatePosition, calculateRelativeBasedPosition } from '../common/position';\nimport { Animation, Property, Event, Component } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { EventHandler } from '@syncfusion/ej2-base';\nimport { flip, fit, isCollide } from '../common/collision';\n/**\n * Specifies the offset position values.\n */\nvar PositionData = /** @class */ (function (_super) {\n __extends(PositionData, _super);\n function PositionData() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('left')\n ], PositionData.prototype, \"X\", void 0);\n __decorate([\n Property('top')\n ], PositionData.prototype, \"Y\", void 0);\n return PositionData;\n}(ChildProperty));\nexport { PositionData };\n// don't use space in classNames\nvar CLASSNAMES = {\n ROOT: 'e-popup',\n RTL: 'e-rtl',\n OPEN: 'e-popup-open',\n CLOSE: 'e-popup-close'\n};\n/**\n * Represents the Popup Component\n * ```html\n *
\n *
Popup Content
\n * ```\n * ```typescript\n * \n * ```\n */\nvar Popup = /** @class */ (function (_super) {\n __extends(Popup, _super);\n function Popup(element, options) {\n var _this = _super.call(this, options, element) || this;\n _this.fixedParent = false;\n return _this;\n }\n /**\n * Called internally if any of the property value changed.\n * @private\n */\n Popup.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'width':\n setStyleAttribute(this.element, { 'width': formatUnit(newProp.width) });\n break;\n case 'height':\n setStyleAttribute(this.element, { 'height': formatUnit(newProp.height) });\n break;\n case 'zIndex':\n setStyleAttribute(this.element, { 'zIndex': newProp.zIndex });\n break;\n case 'enableRtl':\n this.setEnableRtl();\n break;\n case 'position':\n case 'relateTo':\n this.refreshPosition();\n break;\n case 'offsetX':\n var x = newProp.offsetX - oldProp.offsetX;\n this.element.style.left = (parseInt(this.element.style.left, 10) + (x)).toString() + 'px';\n break;\n case 'offsetY':\n var y = newProp.offsetY - oldProp.offsetY;\n this.element.style.top = (parseInt(this.element.style.top, 10) + (y)).toString() + 'px';\n break;\n case 'content':\n this.setContent();\n break;\n case 'actionOnScroll':\n if (newProp.actionOnScroll !== 'none') {\n this.wireScrollEvents();\n }\n else {\n this.unwireScrollEvents();\n }\n break;\n }\n }\n };\n /**\n * gets the Component module name.\n * @private\n */\n Popup.prototype.getModuleName = function () {\n return 'popup';\n };\n /**\n * gets the persisted state properties of the Component.\n */\n Popup.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * To destroy the control.\n */\n Popup.prototype.destroy = function () {\n this.element.classList.remove(CLASSNAMES.ROOT, CLASSNAMES.RTL);\n this.unwireEvents();\n _super.prototype.destroy.call(this);\n };\n /**\n * To Initialize the control rendering\n * @private\n */\n Popup.prototype.render = function () {\n this.element.classList.add(CLASSNAMES.ROOT);\n var styles = {};\n if (this.zIndex !== 1000) {\n styles.zIndex = this.zIndex;\n }\n if (this.width !== 'auto') {\n styles.width = formatUnit(this.width);\n }\n if (this.height !== 'auto') {\n styles.height = formatUnit(this.height);\n }\n setStyleAttribute(this.element, styles);\n this.setEnableRtl();\n this.setContent();\n this.wireEvents();\n };\n Popup.prototype.wireEvents = function () {\n if (Browser.isDevice) {\n EventHandler.add(window, 'orientationchange', this.orientationOnChange, this);\n }\n if (this.actionOnScroll !== 'none') {\n this.wireScrollEvents();\n }\n };\n Popup.prototype.wireScrollEvents = function () {\n if (this.getRelateToElement()) {\n for (var _i = 0, _a = this.getScrollableParent(this.getRelateToElement()); _i < _a.length; _i++) {\n var parent_1 = _a[_i];\n EventHandler.add(parent_1, 'scroll', this.scrollRefresh, this);\n }\n }\n };\n Popup.prototype.unwireEvents = function () {\n if (Browser.isDevice) {\n EventHandler.remove(window, 'orientationchange', this.orientationOnChange);\n }\n if (this.actionOnScroll !== 'none') {\n this.unwireScrollEvents();\n }\n };\n Popup.prototype.unwireScrollEvents = function () {\n if (this.getRelateToElement()) {\n for (var _i = 0, _a = this.getScrollableParent(this.getRelateToElement()); _i < _a.length; _i++) {\n var parent_2 = _a[_i];\n EventHandler.remove(parent_2, 'scroll', this.scrollRefresh);\n }\n }\n };\n Popup.prototype.getRelateToElement = function () {\n var relateToElement = this.relateTo === '' || isNullOrUndefined(this.relateTo) ?\n document.body : this.relateTo;\n this.setProperties({ relateTo: relateToElement }, true);\n return ((typeof this.relateTo) === 'string') ?\n document.querySelector(this.relateTo) : this.relateTo;\n };\n Popup.prototype.scrollRefresh = function (e) {\n if (this.actionOnScroll === 'reposition') {\n if (!(this.element.offsetParent === e.target ||\n (this.element.offsetParent && this.element.offsetParent.tagName === 'BODY' &&\n e.target.parentElement == null))) {\n this.refreshPosition();\n }\n }\n else if (this.actionOnScroll === 'hide') {\n this.hide();\n }\n if (this.actionOnScroll !== 'none') {\n if (this.getRelateToElement()) {\n var targetVisible = this.isElementOnViewport(this.getRelateToElement(), e.target);\n if (!targetVisible && !this.targetInvisibleStatus) {\n this.trigger('targetExitViewport');\n this.targetInvisibleStatus = true;\n }\n else if (targetVisible) {\n this.targetInvisibleStatus = false;\n }\n }\n }\n };\n /**\n * This method is to get the element visibility on viewport when scroll\n * the page. This method will returns true even though 1 px of element\n * part is in visible.\n */\n Popup.prototype.isElementOnViewport = function (relateToElement, scrollElement) {\n var scrollParents = this.getScrollableParent(relateToElement);\n for (var parent_3 = 0; parent_3 < scrollParents.length; parent_3++) {\n if (this.isElementVisible(relateToElement, scrollParents[parent_3])) {\n continue;\n }\n else {\n return false;\n }\n }\n return true;\n };\n Popup.prototype.isElementVisible = function (relateToElement, scrollElement) {\n var rect = relateToElement.getBoundingClientRect();\n if (!rect.height || !rect.width) {\n return false;\n }\n if (scrollElement.getBoundingClientRect) {\n var parent_4 = scrollElement.getBoundingClientRect();\n return !(rect.bottom < parent_4.top) &&\n (!(rect.bottom > parent_4.bottom) &&\n (!(rect.right > parent_4.right) &&\n !(rect.left < parent_4.left)));\n }\n else {\n var win = window;\n var windowView = {\n top: win.scrollY,\n left: win.scrollX,\n right: win.scrollX + win.outerWidth,\n bottom: win.scrollY + win.outerHeight\n };\n var off = calculatePosition(relateToElement);\n var ele = {\n top: off.top,\n left: off.left,\n right: off.left + rect.width,\n bottom: off.top + rect.height\n };\n var elementView = {\n top: windowView.bottom - ele.top,\n left: windowView.right - ele.left,\n bottom: ele.bottom - windowView.top,\n right: ele.right - windowView.left\n };\n return elementView.top > 0\n && elementView.left > 0\n && elementView.right > 0\n && elementView.bottom > 0;\n }\n };\n /**\n * Initialize the event handler\n * @private\n */\n Popup.prototype.preRender = function () {\n //There is no event handler\n };\n Popup.prototype.setEnableRtl = function () {\n this.reposition();\n this.enableRtl ? this.element.classList.add(CLASSNAMES.RTL) : this.element.classList.remove(CLASSNAMES.RTL);\n };\n Popup.prototype.setContent = function () {\n if (!isNullOrUndefined(this.content)) {\n this.element.innerHTML = '';\n if (typeof (this.content) === 'string') {\n this.element.textContent = this.content;\n }\n else {\n this.element.appendChild(this.content);\n }\n }\n };\n Popup.prototype.orientationOnChange = function () {\n var _this = this;\n setTimeout(function () {\n _this.refreshPosition();\n }, 200);\n };\n /**\n * Based on the `relative` element and `offset` values, `Popup` element position will refreshed.\n */\n Popup.prototype.refreshPosition = function (target) {\n if (!isNullOrUndefined(target)) {\n this.checkFixedParent(target);\n }\n this.reposition();\n this.checkCollision();\n };\n Popup.prototype.reposition = function () {\n var pos;\n var relateToElement = this.getRelateToElement();\n if (typeof this.position.X === 'number' && typeof this.position.Y === 'number') {\n pos = { left: this.position.X, top: this.position.Y };\n }\n else if (relateToElement) {\n var display = this.element.style.display;\n this.element.style.display = 'block';\n pos = this.getAnchorPosition(relateToElement, this.element, this.position, this.offsetX, this.offsetY);\n this.element.style.display = display;\n }\n else {\n pos = { left: 0, top: 0 };\n }\n this.element.style.left = pos.left + 'px';\n this.element.style.top = pos.top + 'px';\n };\n Popup.prototype.getAnchorPosition = function (anchorEle, ele, position, offsetX, offsetY) {\n var eleRect = ele.getBoundingClientRect();\n var anchorRect = anchorEle.getBoundingClientRect();\n var anchor = anchorEle;\n var anchorPos = { left: 0, top: 0 };\n if (ele.offsetParent && ele.offsetParent.tagName === 'BODY' && anchorEle.tagName === 'BODY') {\n anchorPos = calculatePosition(anchorEle);\n }\n else {\n anchorPos = calculateRelativeBasedPosition(anchor, ele);\n }\n switch (position.X) {\n default:\n case 'left':\n break;\n case 'center':\n if (this.targetType === 'container') {\n anchorPos.left += (anchorRect.width / 2 - eleRect.width / 2);\n }\n else {\n anchorPos.left += (anchorRect.width / 2);\n }\n break;\n case 'right':\n if (this.targetType === 'container') {\n anchorPos.left += (anchorRect.width - eleRect.width);\n }\n else {\n anchorPos.left += (anchorRect.width);\n }\n break;\n }\n switch (position.Y) {\n default:\n case 'top':\n break;\n case 'center':\n if (this.targetType === 'container') {\n anchorPos.top += (anchorRect.height / 2 - eleRect.height / 2);\n }\n else {\n anchorPos.top += (anchorRect.height / 2);\n }\n break;\n case 'bottom':\n if (this.targetType === 'container') {\n anchorPos.top += (anchorRect.height - eleRect.height);\n }\n else {\n anchorPos.top += (anchorRect.height);\n }\n break;\n }\n anchorPos.left += offsetX;\n anchorPos.top += offsetY;\n return anchorPos;\n };\n Popup.prototype.callFlip = function (param) {\n var relateToElement = this.getRelateToElement();\n flip(this.element, relateToElement, this.offsetX, this.offsetY, this.position.X, this.position.Y, this.viewPortElement, param, this.fixedParent);\n };\n Popup.prototype.callFit = function (param) {\n if (isCollide(this.element, this.viewPortElement).length !== 0) {\n if (isNullOrUndefined(this.viewPortElement)) {\n var data = fit(this.element, this.viewPortElement, param);\n this.element.style.left = data.left + 'px';\n this.element.style.top = data.top + 'px';\n }\n else {\n var elementRect = this.element.getBoundingClientRect();\n var viewPortRect = this.viewPortElement.getBoundingClientRect();\n if (param && param.Y === true) {\n if (viewPortRect.top > elementRect.top) {\n this.element.style.top = '0px';\n }\n else if (viewPortRect.bottom < elementRect.bottom) {\n this.element.style.top = parseInt(this.element.style.top, 10) - (elementRect.bottom - viewPortRect.bottom) + 'px';\n }\n }\n if (param && param.X === true) {\n if (viewPortRect.right < elementRect.right) {\n this.element.style.left = parseInt(this.element.style.left, 10) - (elementRect.right - viewPortRect.right) + 'px';\n }\n else if (viewPortRect.left > elementRect.left) {\n this.element.style.left = parseInt(this.element.style.left, 10) + (viewPortRect.left - elementRect.left) + 'px';\n }\n }\n }\n }\n };\n Popup.prototype.checkCollision = function () {\n var horz = this.collision.X;\n var vert = this.collision.Y;\n if (horz === 'none' && vert === 'none') {\n return;\n }\n if (horz === 'flip' && vert === 'flip') {\n this.callFlip({ X: true, Y: true });\n }\n else if (horz === 'fit' && vert === 'fit') {\n this.callFit({ X: true, Y: true });\n }\n else {\n if (horz === 'flip') {\n this.callFlip({ X: true, Y: false });\n }\n else if (vert === 'flip') {\n this.callFlip({ Y: true, X: false });\n }\n if (horz === 'fit') {\n this.callFit({ X: true, Y: false });\n }\n else if (vert === 'fit') {\n this.callFit({ X: false, Y: true });\n }\n }\n };\n /**\n * Shows the popup element from screen.\n * @param { AnimationModel | Function } collisionOrAnimationOptions? - To pass animation options or collision function.\n * @param { Function } collision? - To pass the collision function.\n */\n Popup.prototype.show = function (animationOptions) {\n var _this = this;\n if (this.zIndex === 1000) {\n this.zIndex = getZindexPartial(this.element);\n setStyleAttribute(this.element, { 'zIndex': this.zIndex });\n }\n animationOptions = (!isNullOrUndefined(animationOptions) && typeof animationOptions === 'object') ?\n animationOptions : this.showAnimation;\n if (this.collision.X !== 'none' || this.collision.Y !== 'none') {\n removeClass([this.element], CLASSNAMES.CLOSE);\n addClass([this.element], CLASSNAMES.OPEN);\n this.checkCollision();\n removeClass([this.element], CLASSNAMES.OPEN);\n addClass([this.element], CLASSNAMES.CLOSE);\n }\n if (!isNullOrUndefined(animationOptions)) {\n animationOptions.begin = function () {\n if (!_this.isDestroyed) {\n removeClass([_this.element], CLASSNAMES.CLOSE);\n addClass([_this.element], CLASSNAMES.OPEN);\n }\n };\n animationOptions.end = function () {\n if (!_this.isDestroyed) {\n _this.trigger('open');\n }\n };\n new Animation(animationOptions).animate(this.element);\n }\n else {\n removeClass([this.element], CLASSNAMES.CLOSE);\n addClass([this.element], CLASSNAMES.OPEN);\n this.trigger('open');\n }\n };\n /**\n * Hides the popup element from screen.\n * @param { AnimationModel } animationOptions? - To give the animation options.\n */\n Popup.prototype.hide = function (animationOptions) {\n var _this = this;\n animationOptions = (!isNullOrUndefined(animationOptions) && typeof animationOptions === 'object') ?\n animationOptions : this.hideAnimation;\n if (!isNullOrUndefined(animationOptions)) {\n animationOptions.end = function () {\n if (!_this.isDestroyed) {\n removeClass([_this.element], CLASSNAMES.OPEN);\n addClass([_this.element], CLASSNAMES.CLOSE);\n _this.trigger('close');\n }\n };\n new Animation(animationOptions).animate(this.element);\n }\n else {\n removeClass([this.element], CLASSNAMES.OPEN);\n addClass([this.element], CLASSNAMES.CLOSE);\n this.trigger('close');\n }\n };\n /**\n * Gets scrollable parent elements for the given element.\n * @param { HTMLElement } element - Specify the element to get the scrollable parents of it.\n */\n Popup.prototype.getScrollableParent = function (element) {\n this.checkFixedParent(element);\n return getScrollableParent(element, this.fixedParent);\n };\n Popup.prototype.checkFixedParent = function (element) {\n var parent = element.parentElement;\n while (parent && parent.tagName !== 'HTML') {\n var parentStyle = getComputedStyle(parent);\n if (parentStyle.position === 'fixed' && this.element.offsetParent && this.element.offsetParent.tagName === 'BODY') {\n this.element.style.position = 'fixed';\n this.fixedParent = true;\n }\n parent = parent.parentElement;\n if (isNullOrUndefined(this.element.offsetParent) && parentStyle.position === 'fixed'\n && this.element.style.position === 'fixed') {\n this.fixedParent = true;\n }\n }\n };\n __decorate([\n Property('auto')\n ], Popup.prototype, \"height\", void 0);\n __decorate([\n Property('auto')\n ], Popup.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], Popup.prototype, \"content\", void 0);\n __decorate([\n Property('container')\n ], Popup.prototype, \"targetType\", void 0);\n __decorate([\n Property(null)\n ], Popup.prototype, \"viewPortElement\", void 0);\n __decorate([\n Property({ X: 'none', Y: 'none' })\n ], Popup.prototype, \"collision\", void 0);\n __decorate([\n Property('')\n ], Popup.prototype, \"relateTo\", void 0);\n __decorate([\n Complex({}, PositionData)\n ], Popup.prototype, \"position\", void 0);\n __decorate([\n Property(0)\n ], Popup.prototype, \"offsetX\", void 0);\n __decorate([\n Property(0)\n ], Popup.prototype, \"offsetY\", void 0);\n __decorate([\n Property(1000)\n ], Popup.prototype, \"zIndex\", void 0);\n __decorate([\n Property(false)\n ], Popup.prototype, \"enableRtl\", void 0);\n __decorate([\n Property('reposition')\n ], Popup.prototype, \"actionOnScroll\", void 0);\n __decorate([\n Property(null)\n ], Popup.prototype, \"showAnimation\", void 0);\n __decorate([\n Property(null)\n ], Popup.prototype, \"hideAnimation\", void 0);\n __decorate([\n Event()\n ], Popup.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], Popup.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], Popup.prototype, \"targetExitViewport\", void 0);\n Popup = __decorate([\n NotifyPropertyChanges\n ], Popup);\n return Popup;\n}(Component));\nexport { Popup };\n/**\n * Gets scrollable parent elements for the given element.\n * @param { HTMLElement } element - Specify the element to get the scrollable parents of it.\n * @private\n */\nexport function getScrollableParent(element, fixedParent) {\n var eleStyle = getComputedStyle(element);\n var scrollParents = [];\n var overflowRegex = /(auto|scroll)/;\n var parent = element.parentElement;\n while (parent && parent.tagName !== 'HTML') {\n var parentStyle = getComputedStyle(parent);\n if (!(eleStyle.position === 'absolute' && parentStyle.position === 'static')\n && overflowRegex.test(parentStyle.overflow + parentStyle.overflowY + parentStyle.overflowX)) {\n scrollParents.push(parent);\n }\n parent = parent.parentElement;\n }\n if (!fixedParent) {\n scrollParents.push(document);\n }\n return scrollParents;\n}\n/**\n * Gets the maximum z-index of the given element.\n * @param { HTMLElement } element - Specify the element to get the maximum z-index of it.\n * @private\n */\nexport function getZindexPartial(element) {\n // upto body traversal\n var parent = element.parentElement;\n var parentZindex = [];\n while (parent) {\n if (parent.tagName !== 'BODY') {\n var index = document.defaultView.getComputedStyle(parent, null).getPropertyValue('z-index');\n var position = document.defaultView.getComputedStyle(parent, null).getPropertyValue('position');\n if (index !== 'auto' && position !== 'static') {\n parentZindex.push(index);\n }\n parent = parent.parentElement;\n }\n else {\n break;\n }\n }\n //Body direct children element traversal\n var childrenZindex = [];\n for (var i = 0; i < document.body.children.length; i++) {\n if (!element.isEqualNode(document.body.children[i])) {\n var index = document.defaultView.getComputedStyle(document.body.children[i], null).getPropertyValue('z-index');\n var position = document.defaultView.getComputedStyle(document.body.children[i], null).getPropertyValue('position');\n if (index !== 'auto' && position !== 'static') {\n childrenZindex.push(index);\n }\n }\n }\n childrenZindex.push('999');\n var finalValue = parentZindex.concat(childrenZindex);\n return Math.max.apply(Math, finalValue) + 1;\n}\n","import { isNullOrUndefined, classList } from '@syncfusion/ej2-base';\nvar globalTimeOut = {};\nvar spinTemplate = null;\nvar spinCSSClass = null;\nvar DEFT_MAT_WIDTH = 30;\nvar DEFT_FAB_WIDTH = 30;\nvar DEFT_BOOT_WIDTH = 30;\nvar CLS_SHOWSPIN = 'e-spin-show';\nvar CLS_HIDESPIN = 'e-spin-hide';\nvar CLS_MATERIALSPIN = 'e-spin-material';\nvar CLS_FABRICSPIN = 'e-spin-fabric';\nvar CLS_BOOTSPIN = 'e-spin-bootstrap';\nvar CLS_HIGHCONTRASTSPIN = 'e-spin-high-contrast';\nvar CLS_SPINWRAP = 'e-spinner-pane';\nvar CLS_SPININWRAP = 'e-spinner-inner';\nvar CLS_SPINCIRCLE = 'e-path-circle';\nvar CLS_SPINARC = 'e-path-arc';\nvar CLS_SPINLABEL = 'e-spin-label';\nvar CLS_SPINTEMPLATE = 'e-spin-template';\n/**\n * Create a spinner for the specified target element.\n * ```\n * E.g : createSpinner({ target: targetElement, width: '34px', label: 'Loading..' });\n * ```\n * @param args\n * @private\n */\nexport function createSpinner(args) {\n var radius;\n var container = create_spinner_container(args.target);\n if (!isNullOrUndefined(args.cssClass)) {\n container.wrap.classList.add(args.cssClass);\n }\n if (!isNullOrUndefined(args.template) || !isNullOrUndefined(spinTemplate)) {\n var template = !isNullOrUndefined(args.template) ? args.template : spinTemplate;\n container.wrap.classList.add(CLS_SPINTEMPLATE);\n replaceContent(container.wrap, template, spinCSSClass);\n }\n else {\n var theme = !isNullOrUndefined(args.type) ? args.type : getTheme(container.wrap);\n var width = !isNullOrUndefined(args.width) ? args.width : undefined;\n radius = calculateRadius(width, theme);\n setTheme(theme, container.wrap, radius);\n if (!isNullOrUndefined(args.label)) {\n createLabel(container.inner_wrap, args.label);\n }\n }\n container.wrap.classList.add(CLS_HIDESPIN);\n container = null;\n}\nfunction createLabel(container, label) {\n var labelEle = document.createElement('div');\n labelEle.classList.add(CLS_SPINLABEL);\n labelEle.textContent = label;\n container.appendChild(labelEle);\n return labelEle;\n}\nfunction createMaterialSpinner(container, radius) {\n var uniqueID = random_generator();\n globalTimeOut[uniqueID] = { timeOut: 0, type: 'Material', radius: radius };\n create_material_element(container, uniqueID);\n mat_calculate_attributes(radius, container);\n}\nfunction startMatAnimate(container, uniqueID, radius) {\n var globalObject = {};\n var timeOutVar = 0;\n globalTimeOut[uniqueID].timeOut = 0;\n globalObject[uniqueID] = globalVariables(uniqueID, radius, 0, 0);\n var spinnerInfo = { uniqueID: uniqueID, container: container, globalInfo: globalObject, timeOutVar: timeOutVar };\n animateMaterial(spinnerInfo);\n}\nfunction createFabricSpinner(container, radius) {\n var uniqueID = random_generator();\n globalTimeOut[uniqueID] = { timeOut: 0, type: 'Fabric', radius: radius };\n create_fabric_element(container, uniqueID, CLS_FABRICSPIN);\n fb_calculate_attributes(radius, container, CLS_FABRICSPIN);\n}\nfunction createHighContrastSpinner(container, radius) {\n var uniqueID = random_generator();\n globalTimeOut[uniqueID] = { timeOut: 0, type: 'HighContrast', radius: radius };\n create_fabric_element(container, uniqueID, CLS_HIGHCONTRASTSPIN);\n fb_calculate_attributes(radius, container, CLS_HIGHCONTRASTSPIN);\n}\nfunction getTheme(container) {\n var theme = window.getComputedStyle(container, ':after').getPropertyValue('content');\n return theme.replace(/['\"]+/g, '');\n}\nfunction setTheme(theme, container, radius) {\n var innerContainer = container.querySelector('.' + CLS_SPININWRAP);\n var svg = innerContainer.querySelector('svg');\n if (!isNullOrUndefined(svg)) {\n innerContainer.removeChild(svg);\n }\n switch (theme) {\n case 'Material':\n createMaterialSpinner(innerContainer, radius);\n break;\n case 'Fabric':\n createFabricSpinner(innerContainer, radius);\n break;\n case 'Bootstrap':\n createBootstrapSpinner(innerContainer, radius);\n break;\n case 'HighContrast':\n createHighContrastSpinner(innerContainer, radius);\n break;\n }\n}\nfunction createBootstrapSpinner(innerContainer, radius) {\n var uniqueID = random_generator();\n globalTimeOut[uniqueID] = { timeOut: 0, type: 'Bootstrap', radius: radius };\n create_bootstrap_element(innerContainer, uniqueID);\n boot_calculate_attributes(innerContainer, radius);\n}\nfunction create_bootstrap_element(innerContainer, uniqueID) {\n var svgBoot = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n var viewBoxValue = 64;\n var trans = 32;\n var defaultRadius = 2;\n svgBoot.setAttribute('id', uniqueID);\n svgBoot.setAttribute('class', CLS_BOOTSPIN);\n svgBoot.setAttribute('viewBox', '0 0 ' + viewBoxValue + ' ' + viewBoxValue);\n innerContainer.insertBefore(svgBoot, innerContainer.firstChild);\n for (var item = 0; item <= 7; item++) {\n var bootCircle = document.createElementNS('http://www.w3.org/2000/svg', 'circle');\n bootCircle.setAttribute('class', CLS_SPINCIRCLE + '_' + item);\n bootCircle.setAttribute('r', defaultRadius + '');\n bootCircle.setAttribute('transform', 'translate(' + trans + ',' + trans + ')');\n svgBoot.appendChild(bootCircle);\n }\n}\nfunction boot_calculate_attributes(innerContainer, radius) {\n var svg = innerContainer.querySelector('svg.e-spin-bootstrap');\n svg.style.width = svg.style.height = radius + 'px';\n var x = 0;\n var y = 0;\n var rad = 24;\n var startArc = 90;\n for (var item = 0; item <= 7; item++) {\n var start = defineArcPoints(x, y, rad, startArc);\n var circleEle = svg.querySelector('.' + CLS_SPINCIRCLE + '_' + item);\n circleEle.setAttribute('cx', start.x + '');\n circleEle.setAttribute('cy', start.y + '');\n startArc = startArc >= 360 ? 0 : startArc;\n startArc = startArc + 45;\n }\n}\nfunction generateSeries(begin, stop) {\n var series = [];\n var start = begin;\n var end = stop;\n var increment = false;\n var count = 1;\n formSeries(start);\n function formSeries(i) {\n series.push(i);\n if (i !== end || count === 1) {\n if (i <= start && i > 1 && !increment) {\n i = parseFloat((i - 0.2).toFixed(2));\n }\n else if (i === 1) {\n i = 7;\n i = parseFloat((i + 0.2).toFixed(2));\n increment = true;\n }\n else if (i < 8 && increment) {\n i = parseFloat((i + 0.2).toFixed(2));\n if (i === 8) {\n increment = false;\n }\n }\n else if (i <= 8 && !increment) {\n i = parseFloat((i - 0.2).toFixed(2));\n }\n ++count;\n formSeries(i);\n }\n }\n return series;\n}\nfunction animateBootstrap(innerContainer) {\n var svg = innerContainer.querySelector('svg.e-spin-bootstrap');\n var id = svg.getAttribute('id');\n for (var i = 1; i <= 8; i++) {\n var circleEle = (innerContainer.getElementsByClassName('e-path-circle_' +\n (i === 8 ? 0 : i))[0]);\n rotation(circleEle, i, i, generateSeries(i, i), id);\n }\n function rotation(circle, start, end, series, id) {\n var count = 0;\n boot_animate(start);\n function boot_animate(radius) {\n if (globalTimeOut[id].isAnimate) {\n ++count;\n circle.setAttribute('r', radius + '');\n if (count >= series.length) {\n count = 0;\n }\n globalTimeOut[id].timeOut = setTimeout(boot_animate.bind(null, series[count]), 18);\n }\n }\n }\n}\nfunction replaceContent(container, template, cssClass) {\n if (!isNullOrUndefined(cssClass)) {\n container.classList.add(cssClass);\n }\n var inner = container.querySelector('.e-spinner-inner');\n inner.innerHTML = template;\n}\nfunction calculateRadius(width, theme) {\n var defaultSize = theme === 'Material' ? DEFT_MAT_WIDTH : theme === 'Fabric' ? DEFT_FAB_WIDTH : DEFT_BOOT_WIDTH;\n width = width ? parseFloat(width + '') : defaultSize;\n return theme === 'Bootstrap' ? width : width / 2;\n}\nfunction globalVariables(id, radius, count, previousId) {\n return {\n radius: radius,\n count: count,\n previousId: previousId\n };\n}\nfunction random_generator() {\n var random = '';\n var combine = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n for (var i = 0; i < 5; i++) {\n random += combine.charAt(Math.floor(Math.random() * combine.length));\n }\n return random;\n}\nfunction create_fabric_element(innerContainer, uniqueID, themeClass) {\n var svgFabric = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svgFabric.setAttribute('id', uniqueID);\n svgFabric.setAttribute('class', themeClass);\n var fabricCirclePath = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n fabricCirclePath.setAttribute('class', CLS_SPINCIRCLE);\n var fabricCircleArc = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n fabricCircleArc.setAttribute('class', CLS_SPINARC);\n innerContainer.insertBefore(svgFabric, innerContainer.firstChild);\n svgFabric.appendChild(fabricCirclePath);\n svgFabric.appendChild(fabricCircleArc);\n}\nfunction create_material_element(innerContainer, uniqueID) {\n var svgMaterial = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svgMaterial.setAttribute('class', CLS_MATERIALSPIN);\n svgMaterial.setAttribute('id', uniqueID);\n var matCirclePath = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n matCirclePath.setAttribute('class', CLS_SPINCIRCLE);\n innerContainer.insertBefore(svgMaterial, innerContainer.firstChild);\n svgMaterial.appendChild(matCirclePath);\n}\nfunction create_spinner_container(target) {\n var spinnerContainer = document.createElement('div');\n spinnerContainer.classList.add(CLS_SPINWRAP);\n var spinnerInnerContainer = document.createElement('div');\n spinnerInnerContainer.classList.add(CLS_SPININWRAP);\n target.appendChild(spinnerContainer);\n spinnerContainer.appendChild(spinnerInnerContainer);\n return { wrap: spinnerContainer, inner_wrap: spinnerInnerContainer };\n}\nfunction animateMaterial(spinnerInfo) {\n var start = 1;\n var end = 149;\n var duration = 1333;\n var max = 75;\n createCircle(start, end, easeAnimation, duration, spinnerInfo.globalInfo[spinnerInfo.uniqueID].count, max, spinnerInfo);\n spinnerInfo.globalInfo[spinnerInfo.uniqueID].count = ++spinnerInfo.globalInfo[spinnerInfo.uniqueID].count % 4;\n}\nfunction createCircle(start, end, easing, duration, count, max, spinnerInfo) {\n var id = ++spinnerInfo.globalInfo[spinnerInfo.uniqueID].previousId;\n var startTime = new Date().getTime();\n var change = end - start;\n var diameter = getSize((spinnerInfo.globalInfo[spinnerInfo.uniqueID].radius * 2) + '');\n var strokeSize = getStrokeSize(diameter);\n var rotate = -90 * (spinnerInfo.globalInfo[spinnerInfo.uniqueID].count || 0);\n mat_animation(spinnerInfo);\n function mat_animation(spinnerInfo) {\n var currentTime = Math.max(0, Math.min(new Date().getTime() - startTime, duration));\n updatePath(easing(currentTime, start, change, duration), spinnerInfo.container);\n if (id === spinnerInfo.globalInfo[spinnerInfo.uniqueID].previousId && currentTime < duration) {\n globalTimeOut[spinnerInfo.uniqueID].timeOut = setTimeout(mat_animation.bind(null, spinnerInfo), 1);\n }\n else {\n animateMaterial(spinnerInfo);\n }\n }\n function updatePath(value, container) {\n if ((!isNullOrUndefined(container.querySelector('svg.e-spin-material')))\n && (!isNullOrUndefined(container.querySelector('svg.e-spin-material').querySelector('path.e-path-circle')))) {\n var svg = container.querySelector('svg.e-spin-material');\n var path = svg.querySelector('path.e-path-circle');\n path.setAttribute('stroke-dashoffset', getDashOffset(diameter, strokeSize, value, max) + '');\n path.setAttribute('transform', 'rotate(' + (rotate) + ' ' + diameter / 2 + ' ' + diameter / 2 + ')');\n }\n }\n}\nfunction mat_calculate_attributes(radius, container) {\n var diameter = radius * 2;\n var svg = container.querySelector('svg.e-spin-material');\n var path = svg.querySelector('path.e-path-circle');\n var strokeSize = getStrokeSize(diameter);\n var transformOrigin = (diameter / 2) + 'px';\n svg.setAttribute('viewBox', '0 0 ' + diameter + ' ' + diameter);\n svg.style.width = svg.style.height = diameter + 'px';\n svg.style.transformOrigin = transformOrigin + ' ' + transformOrigin + ' ' + transformOrigin;\n path.setAttribute('stroke-width', strokeSize + '');\n path.setAttribute('d', drawArc(diameter, strokeSize));\n path.setAttribute('stroke-dasharray', ((diameter - strokeSize) * Math.PI * 0.75) + '');\n path.setAttribute('stroke-dashoffset', getDashOffset(diameter, strokeSize, 1, 75) + '');\n}\nfunction getSize(value) {\n var parsed = parseFloat(value);\n return parsed;\n}\nfunction drawArc(diameter, strokeSize) {\n var radius = diameter / 2;\n var offset = strokeSize / 2;\n return 'M' + radius + ',' + offset\n + 'A' + (radius - offset) + ',' + (radius - offset) + ' 0 1 1 ' + offset + ',' + radius;\n}\nfunction getStrokeSize(diameter) {\n return 10 / 100 * diameter;\n}\nfunction getDashOffset(diameter, strokeSize, value, max) {\n return (diameter - strokeSize) * Math.PI * ((3 * (max) / 100) - (value / 100));\n}\nfunction easeAnimation(current, start, change, duration) {\n var timestamp = (current /= duration) * current;\n var timecount = timestamp * current;\n return start + change * (6 * timecount * timestamp + -15 * timestamp * timestamp + 10 * timecount);\n}\nfunction fb_calculate_attributes(radius, innerConainer, trgClass) {\n var centerX = radius;\n var centerY = radius;\n var diameter = radius * 2;\n var startArc = 315;\n var endArc = 45;\n var svg = innerConainer.querySelector('.' + trgClass);\n var circle = svg.querySelector('.e-path-circle');\n var path = svg.querySelector('.e-path-arc');\n var transformOrigin = (diameter / 2) + 'px';\n circle.setAttribute('d', defineCircle(centerX, centerY, radius));\n path.setAttribute('d', defineArc(centerX, centerY, radius, startArc, endArc));\n svg.setAttribute('viewBox', '0 0 ' + diameter + ' ' + diameter);\n svg.style.transformOrigin = transformOrigin + ' ' + transformOrigin + ' ' + transformOrigin;\n svg.style.width = svg.style.height = diameter + 'px';\n}\nfunction defineArcPoints(centerX, centerY, radius, angle) {\n var radians = (angle - 90) * Math.PI / 180.0;\n return {\n x: centerX + (radius * Math.cos(radians)),\n y: centerY + (radius * Math.sin(radians))\n };\n}\nfunction defineArc(x, y, radius, startArc, endArc) {\n var start = defineArcPoints(x, y, radius, endArc);\n var end = defineArcPoints(x, y, radius, startArc);\n var d = [\n 'M', start.x, start.y,\n 'A', radius, radius, 0, 0, 0, end.x, end.y\n ].join(' ');\n return d;\n}\nfunction defineCircle(x, y, radius) {\n var d = [\n 'M', x, y,\n 'm', -radius, 0,\n 'a', radius, radius, 0, 1, 0, radius * 2, 0,\n 'a', radius, radius, 0, 1, 0, -radius * 2, 0,\n ].join(' ');\n return d;\n}\n/**\n * Function to show the Spinner.\n * @param container - Specify the target of the Spinner.\n * @private\n */\nexport function showSpinner(container) {\n showHideSpinner(container, false);\n container = null;\n}\nfunction showHideSpinner(container, isHide) {\n var spinnerWrap = container.classList.contains(CLS_SPINWRAP) ? container :\n container.querySelector('.' + CLS_SPINWRAP);\n var inner = spinnerWrap.querySelector('.' + CLS_SPININWRAP);\n var spinCheck;\n spinCheck = isHide ? !spinnerWrap.classList.contains(CLS_SPINTEMPLATE) && !spinnerWrap.classList.contains(CLS_HIDESPIN) :\n !spinnerWrap.classList.contains(CLS_SPINTEMPLATE) && !spinnerWrap.classList.contains(CLS_SHOWSPIN);\n if (spinCheck) {\n var svgEle = spinnerWrap.querySelector('svg');\n if (isNullOrUndefined(svgEle)) {\n return;\n }\n var id = svgEle.getAttribute('id');\n globalTimeOut[id].isAnimate = !isHide;\n switch (globalTimeOut[id].type) {\n case 'Material':\n isHide ? clearTimeout(globalTimeOut[id].timeOut) : startMatAnimate(inner, id, globalTimeOut[id].radius);\n break;\n case 'Bootstrap':\n isHide ? clearTimeout(globalTimeOut[id].timeOut) : animateBootstrap(inner);\n break;\n }\n }\n isHide ? classList(spinnerWrap, [CLS_HIDESPIN], [CLS_SHOWSPIN]) : classList(spinnerWrap, [CLS_SHOWSPIN], [CLS_HIDESPIN]);\n container = null;\n}\n/**\n * Function to hide the Spinner.\n * @param container - Specify the target of the Spinner.\n * @private\n */\nexport function hideSpinner(container) {\n showHideSpinner(container, true);\n container = null;\n}\n/**\n * Function to change the Spinners in a page globally from application end.\n * ```\n * E.g : setSpinner({ cssClass: 'custom-css'; type: 'Material' });\n * ```\n * @param args\n * @private\n */\nexport function setSpinner(args) {\n if (args.template !== undefined) {\n spinTemplate = args.template;\n if (args.template !== undefined) {\n spinCSSClass = args.cssClass;\n }\n }\n var container = document.querySelectorAll('.' + CLS_SPINWRAP);\n for (var index = 0; index < container.length; index++) {\n ensureTemplate(args.template, container[index], args.type, args.cssClass);\n }\n}\nfunction ensureTemplate(template, container, theme, cssClass) {\n if (isNullOrUndefined(template) && !container.classList.contains(CLS_SPINTEMPLATE)) {\n replaceTheme(container, theme, cssClass);\n if (container.classList.contains(CLS_SHOWSPIN)) {\n container.classList.remove(CLS_SHOWSPIN);\n showSpinner(container);\n }\n else {\n container.classList.remove(CLS_HIDESPIN);\n hideSpinner(container);\n }\n }\n else {\n spinTemplate = template;\n if (!isNullOrUndefined(cssClass)) {\n spinCSSClass = cssClass;\n }\n }\n}\nfunction replaceTheme(container, theme, cssClass) {\n if (!isNullOrUndefined(cssClass)) {\n container.classList.add(cssClass);\n }\n var svgElement = container.querySelector('svg');\n var radius = theme === 'Bootstrap' ? parseFloat(svgElement.style.height) : parseFloat(svgElement.style.height) / 2;\n var classNames = svgElement.getAttribute('class');\n var svgClassList = classNames.split(/\\s/);\n if (svgClassList.indexOf('e-spin-material') >= 0) {\n var id = svgElement.getAttribute('id');\n clearTimeout(globalTimeOut[id].timeOut);\n }\n setTheme(theme, container, radius);\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, extend, deleteObject, Property } from '@syncfusion/ej2-base';\n/**\n * @param props\n * @param model\n */\nexport function getModel(props, model) {\n var obj = extend({}, props);\n for (var _i = 0, _a = Object.keys(obj); _i < _a.length; _i++) {\n var prop = _a[_i];\n if ((model).indexOf(prop) < 0) {\n deleteObject(obj, prop);\n }\n }\n return obj;\n}\nvar Item = /** @class */ (function (_super) {\n __extends(Item, _super);\n function Item() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Item.prototype, \"iconCss\", void 0);\n __decorate([\n Property('')\n ], Item.prototype, \"id\", void 0);\n __decorate([\n Property(false)\n ], Item.prototype, \"separator\", void 0);\n __decorate([\n Property('')\n ], Item.prototype, \"text\", void 0);\n __decorate([\n Property('')\n ], Item.prototype, \"url\", void 0);\n return Item;\n}(ChildProperty));\nexport { Item };\n","/**\n * MaskedTextBox base module\n */\nimport { EventHandler, isNullOrUndefined, merge, attributes, addClass, removeClass, Browser, extend } from '@syncfusion/ej2-base';\nimport { Input } from '../../input/input';\nvar ERROR = 'e-error';\nvar INPUTGROUP = 'e-input-group';\nvar FLOATINPUT = 'e-float-input';\nvar UTILMASK = 'e-utility-mask';\nvar TOPLABEL = 'e-label-top';\nvar BOTTOMLABEL = 'e-label-bottom';\n/**\n * @hidden\n * Built-in masking elements collection.\n */\nexport var regularExpressions = {\n '0': '[0-9]',\n '9': '[0-9 ]',\n '#': '[0-9 +-]',\n 'L': '[A-Za-z]',\n '?': '[A-Za-z ]',\n '&': '[^\\x7f ]+',\n 'C': '[^\\x7f]+',\n 'A': '[A-Za-z0-9]',\n 'a': '[A-Za-z0-9 ]',\n};\n/**\n * @hidden\n * Generate required masking elements to the MaskedTextBox from user mask input.\n */\nexport function createMask() {\n attributes(this.element, {\n 'role': 'textbox', 'autocomplete': 'off', 'autocorrect': 'off', 'autocapitalize': 'off',\n 'spellcheck': 'false', 'aria-live': 'assertive', 'aria-valuenow': ''\n });\n if (this.mask) {\n var splitMask = this.mask.split(']');\n for (var i = 0; i < splitMask.length; i++) {\n if (splitMask[i][splitMask[i].length - 1] === '\\\\') {\n splitMask[i] = splitMask[i] + ']';\n var splitInnerMask = splitMask[i].split('[');\n for (var j = 0; j < splitInnerMask.length; j++) {\n if (splitInnerMask[j][splitInnerMask[j].length - 1] === '\\\\') {\n splitInnerMask[j] = splitInnerMask[j] + '[';\n }\n pushIntoRegExpCollec.call(this, splitInnerMask[j]);\n }\n }\n else {\n var splitInnerMask = splitMask[i].split('[');\n if (splitInnerMask.length > 1) {\n var chkSpace = false;\n for (var j = 0; j < splitInnerMask.length; j++) {\n if (splitInnerMask[j] === '\\\\') {\n this.customRegExpCollec.push('[');\n this.hiddenMask += splitInnerMask[j] + '[';\n }\n else if (splitInnerMask[j] === '') {\n chkSpace = true;\n }\n else if ((splitInnerMask[j] !== '' && chkSpace) || j === splitInnerMask.length - 1) {\n this.customRegExpCollec.push('[' + splitInnerMask[j] + ']');\n this.hiddenMask += this.promptChar;\n chkSpace = false;\n }\n else {\n pushIntoRegExpCollec.call(this, splitInnerMask[j]);\n }\n }\n }\n else {\n pushIntoRegExpCollec.call(this, splitInnerMask[0]);\n }\n }\n }\n this.escapeMaskValue = this.hiddenMask;\n this.promptMask = this.hiddenMask.replace(/[09?LCAa#&]/g, this.promptChar);\n if (!isNullOrUndefined(this.customCharacters)) {\n for (var i = 0; i < this.promptMask.length; i++) {\n if (!isNullOrUndefined(this.customCharacters[this.promptMask[i]])) {\n this.promptMask = this.promptMask.replace(new RegExp(this.promptMask[i], 'g'), this.promptChar);\n }\n }\n }\n var escapeNumber = 0;\n if (this.hiddenMask.match(new RegExp(/\\\\/))) {\n for (var i = 0; i < this.hiddenMask.length; i++) {\n var j = 0;\n if (i >= 2) {\n j = i;\n }\n escapeNumber = this.hiddenMask.length - this.promptMask.length;\n j = j - escapeNumber;\n if ((i > 0 && this.hiddenMask[i - 1] !== '\\\\') && (this.hiddenMask[i] === '>' ||\n this.hiddenMask[i] === '<' || this.hiddenMask[i] === '|')) {\n this.promptMask = this.promptMask.substring(0, j) +\n this.promptMask.substring((i + 1) - escapeNumber, this.promptMask.length);\n this.escapeMaskValue = this.escapeMaskValue.substring(0, j) +\n this.escapeMaskValue.substring((i + 1) - escapeNumber, this.escapeMaskValue.length);\n }\n if (this.hiddenMask[i] === '\\\\') {\n this.promptMask = this.promptMask.substring(0, j) + this.hiddenMask[i + 1] +\n this.promptMask.substring((i + 2) - escapeNumber, this.promptMask.length);\n this.escapeMaskValue = this.escapeMaskValue.substring(0, j) + this.escapeMaskValue[i + 1] +\n this.escapeMaskValue.substring((i + 2) - escapeNumber, this.escapeMaskValue.length);\n }\n }\n }\n else {\n this.promptMask = this.promptMask.replace(/[>|<]/g, '');\n this.escapeMaskValue = this.hiddenMask.replace(/[>|<]/g, '');\n }\n attributes(this.element, { 'aria-invalid': 'false' });\n }\n}\n/**\n * @hidden\n * Apply mask ability with masking elements to the MaskedTextBox.\n */\nexport function applyMask() {\n setElementValue.call(this, this.promptMask);\n setMaskValue.call(this, this.value);\n}\n/**\n * @hidden\n * To wire required events to the MaskedTextBox.\n */\nexport function wireEvents() {\n EventHandler.add(this.element, 'keydown', maskInputKeyDownHandler, this);\n EventHandler.add(this.element, 'keypress', maskInputKeyPressHandler, this);\n EventHandler.add(this.element, 'keyup', maskInputKeyUpHandler, this);\n EventHandler.add(this.element, 'input', maskInputHandler, this);\n EventHandler.add(this.element, 'focus', maskInputFocusHandler, this);\n EventHandler.add(this.element, 'blur', maskInputBlurHandler, this);\n EventHandler.add(this.element, 'paste', maskInputPasteHandler, this);\n EventHandler.add(this.element, 'cut', maskInputCutHandler, this);\n EventHandler.add(this.element, 'drop', maskInputDropHandler, this);\n if (this.enabled) {\n bindClearEvent.call(this);\n }\n}\n/**\n * @hidden\n * To unwire events attached to the MaskedTextBox.\n */\nexport function unwireEvents() {\n EventHandler.remove(this.element, 'keydown', maskInputKeyDownHandler);\n EventHandler.remove(this.element, 'keypress', maskInputKeyPressHandler);\n EventHandler.remove(this.element, 'keyup', maskInputKeyUpHandler);\n EventHandler.remove(this.element, 'input', maskInputHandler);\n EventHandler.remove(this.element, 'focus', maskInputFocusHandler);\n EventHandler.remove(this.element, 'blur', maskInputBlurHandler);\n EventHandler.remove(this.element, 'paste', maskInputPasteHandler);\n EventHandler.remove(this.element, 'cut', maskInputCutHandler);\n}\n/**\n * @hidden\n * To bind required events to the MaskedTextBox clearButton.\n */\nexport function bindClearEvent() {\n if (this.showClearButton) {\n EventHandler.add(this.inputObj.clearButton, 'mousedown touchstart', resetHandler, this);\n }\n}\nfunction resetHandler(e) {\n e.preventDefault();\n if (!this.inputObj.clearButton.classList.contains('e-clear-icon-hide')) {\n clear.call(this, e);\n }\n}\nfunction clear(event) {\n var value = this.element.value;\n setElementValue.call(this, this.promptMask);\n this.redoCollec.unshift({\n value: this.promptMask, startIndex: this.element.selectionStart, endIndex: this.element.selectionEnd\n });\n triggerMaskChangeEvent.call(this, event, value);\n this.element.setSelectionRange(0, 0);\n}\n/**\n * @hidden\n * To get masked value from the MaskedTextBox.\n */\nexport function unstrippedValue(element) {\n return element.value;\n}\n/**\n * @hidden\n * To extract raw value from the MaskedTextBox.\n */\nexport function strippedValue(element, maskValues) {\n var value = '';\n var k = 0;\n var checkMask = false;\n var maskValue = (!isNullOrUndefined(maskValues)) ? maskValues : (!isNullOrUndefined(element) &&\n !isNullOrUndefined(this)) ? element.value : maskValues;\n if (maskValue !== this.promptMask) {\n for (var i = 0; i < this.customRegExpCollec.length; i++) {\n if (checkMask) {\n checkMask = false;\n }\n if (this.customRegExpCollec[k] === '>' || this.customRegExpCollec[k] === '<' ||\n this.customRegExpCollec[k] === '|' || this.customRegExpCollec[k] === '\\\\') {\n --i;\n checkMask = true;\n }\n if (!checkMask) {\n if ((maskValue[i] !== this.promptChar) && (!isNullOrUndefined(this.customRegExpCollec[k]) &&\n ((!isNullOrUndefined(this.regExpCollec[this.customRegExpCollec[k]])) ||\n (this.customRegExpCollec[k].length > 2 && this.customRegExpCollec[k][0] === '[' &&\n this.customRegExpCollec[k][this.customRegExpCollec[k].length - 1] === ']') ||\n (!isNullOrUndefined(this.customCharacters) &&\n (!isNullOrUndefined(this.customCharacters[this.customRegExpCollec[k]]))))) && (maskValue !== '')) {\n value += maskValue[i];\n }\n }\n ++k;\n }\n }\n if (this.mask === null || this.mask === '' && this.value !== undefined) {\n value = maskValue;\n }\n return value;\n}\nfunction pushIntoRegExpCollec(value) {\n for (var k = 0; k < value.length; k++) {\n this.hiddenMask += value[k];\n if (value[k] !== '\\\\') {\n this.customRegExpCollec.push(value[k]);\n }\n }\n}\nexport function maskInputFocusHandler(event) {\n var _this = this;\n if (this.promptMask.length > 0) {\n this.focusEventArgs = { selectionStart: 0, selectionEnd: this.promptMask.length };\n }\n else {\n this.focusEventArgs = { selectionStart: 0, selectionEnd: this.element.value.length };\n }\n var eventArgs = {};\n merge(eventArgs, this.focusEventArgs);\n this.trigger('focus', eventArgs);\n this.focusEventArgs = eventArgs;\n if (this.mask) {\n this.isFocus = true;\n if (this.element.value === '') {\n setElementValue.call(this, this.promptMask);\n }\n else {\n setElementValue.call(this, this.element.value);\n }\n if (!Browser.isDevice && Browser.info.version === '11.0') {\n this.element.setSelectionRange(this.focusEventArgs.selectionStart, this.focusEventArgs.selectionEnd);\n }\n else {\n var delay = (Browser.isDevice && Browser.isIos) ? 450 : 0;\n setTimeout(function () {\n _this.element.setSelectionRange(_this.focusEventArgs.selectionStart, _this.focusEventArgs.selectionEnd);\n }, delay);\n }\n }\n}\nexport function maskInputBlurHandler(event) {\n if (this.mask) {\n this.isFocus = false;\n if (this.placeholder && this.element.value === this.promptMask && this.floatLabelType !== 'Always') {\n setElementValue.call(this, '');\n var labelElement = this.element.parentNode.querySelector('.e-float-text');\n if (this.floatLabelType === 'Auto' && !isNullOrUndefined(labelElement) && labelElement.classList.contains(TOPLABEL)) {\n removeClass([labelElement], TOPLABEL);\n }\n }\n }\n}\nfunction maskInputPasteHandler(event) {\n var _this = this;\n if (this.mask) {\n var sIndex_1 = this.element.selectionStart;\n var eIndex_1 = this.element.selectionEnd;\n var oldValue_1 = this.element.value;\n setElementValue.call(this, '');\n this._callPasteHandler = true;\n setTimeout(function () {\n var value = _this.element.value.replace(/ /g, '');\n if (_this.redoCollec.length > 0 && _this.redoCollec[0].value === _this.element.value) {\n value = strippedValue.call(_this, _this.element);\n }\n setElementValue.call(_this, oldValue_1);\n _this.element.selectionStart = sIndex_1;\n _this.element.selectionEnd = eIndex_1;\n var i = 0;\n _this.maskKeyPress = true;\n do {\n validateValue.call(_this, value[i], false, null);\n ++i;\n } while (i < value.length);\n _this.maskKeyPress = false;\n _this._callPasteHandler = false;\n if (_this.element.value === oldValue_1) {\n var i_1 = 0;\n _this.maskKeyPress = true;\n do {\n validateValue.call(_this, value[i_1], false, null);\n ++i_1;\n } while (i_1 < value.length);\n _this.maskKeyPress = false;\n }\n }, 1);\n }\n}\nfunction maskInputCutHandler(event) {\n var _this = this;\n if (this.mask) {\n var sIndex_2 = this.element.selectionStart;\n var eIndex = this.element.selectionEnd;\n this.undoCollec.push({ value: this.element.value, startIndex: this.element.selectionStart, endIndex: this.element.selectionEnd });\n var value_1 = this.element.value.substring(0, sIndex_2) + this.promptMask.substring(sIndex_2, eIndex) +\n this.element.value.substring(eIndex);\n setTimeout(function () {\n setElementValue.call(_this, value_1);\n _this.element.selectionStart = _this.element.selectionEnd = sIndex_2;\n }, 0);\n }\n}\nexport function maskInputDropHandler(event) {\n event.preventDefault();\n}\nfunction maskInputHandler(event) {\n var eventArgs = { ctrlKey: false, keyCode: 229 };\n // tslint:disable-next-line\n extend(event, eventArgs);\n if (this.mask) {\n if (this.element.value === '') {\n this.redoCollec.unshift({\n value: this.promptMask, startIndex: this.element.selectionStart, endIndex: this.element.selectionEnd\n });\n }\n if (this.element.value.length === 1) {\n this.element.value = this.element.value + this.promptMask;\n this.element.setSelectionRange(1, 1);\n }\n if (!this._callPasteHandler) {\n removeMaskInputValues.call(this, event);\n }\n if (this.element.value.length > this.promptMask.length) {\n var startIndex = this.element.selectionStart;\n var addedValues = this.element.value.length - this.promptMask.length;\n var value = this.element.value.substring(startIndex - addedValues, startIndex);\n this.maskKeyPress = false;\n var i = 0;\n do {\n validateValue.call(this, value[i], event.ctrlKey, event);\n ++i;\n } while (i < value.length);\n }\n var val = strippedValue.call(this, this.element);\n this.prevValue = val;\n this.value = val;\n if (val === '') {\n setElementValue.call(this, this.promptMask);\n this.element.setSelectionRange(0, 0);\n }\n }\n}\nfunction maskInputKeyDownHandler(event) {\n if (this.mask) {\n var value = this;\n if (event.keyCode !== 229) {\n if (event.ctrlKey && (event.keyCode === 89 || event.keyCode === 90)) {\n event.preventDefault();\n }\n removeMaskInputValues.call(this, event);\n }\n var startValue = this.element.value;\n if (event.ctrlKey && (event.keyCode === 89 || event.keyCode === 90)) {\n var collec = void 0;\n if (event.keyCode === 90 && this.undoCollec.length > 0 && startValue !== this.undoCollec[this.undoCollec.length - 1].value) {\n collec = this.undoCollec[this.undoCollec.length - 1];\n this.redoCollec.unshift({\n value: this.element.value, startIndex: this.element.selectionStart,\n endIndex: this.element.selectionEnd\n });\n setElementValue.call(this, collec.value);\n this.element.selectionStart = collec.startIndex;\n this.element.selectionEnd = collec.endIndex;\n this.undoCollec.splice(this.undoCollec.length - 1, 1);\n }\n else if (event.keyCode === 89 && this.redoCollec.length > 0 && startValue !== this.redoCollec[0].value) {\n collec = this.redoCollec[0];\n this.undoCollec.push({\n value: this.element.value, startIndex: this.element.selectionStart,\n endIndex: this.element.selectionEnd\n });\n setElementValue.call(this, collec.value);\n this.element.selectionStart = collec.startIndex;\n this.element.selectionEnd = collec.endIndex;\n this.redoCollec.splice(0, 1);\n }\n }\n }\n}\nexport function mobileRemoveFunction() {\n var collec;\n var sIndex = this.element.selectionStart;\n var eIndex = this.element.selectionEnd;\n if (this.redoCollec.length > 0) {\n collec = this.redoCollec[0];\n setElementValue.call(this, collec.value);\n if ((collec.startIndex - sIndex) === 1) {\n this.element.selectionStart = collec.startIndex;\n this.element.selectionEnd = collec.endIndex;\n }\n else {\n this.element.selectionStart = sIndex + 1;\n this.element.selectionEnd = eIndex + 1;\n }\n }\n else {\n setElementValue.call(this, this.promptMask);\n this.element.selectionStart = this.element.selectionEnd = sIndex;\n }\n}\nfunction removeMaskInputValues(event) {\n var isRemove = false;\n var oldEventVal;\n var isDeleted = false;\n if (this.element.value.length < this.promptMask.length) {\n isRemove = true;\n mobileRemoveFunction.call(this);\n oldEventVal = this.element.value;\n }\n var initStartIndex = this.element.selectionStart;\n var initEndIndex = this.element.selectionEnd;\n var startIndex = this.element.selectionStart;\n var endIndex = this.element.selectionEnd;\n var maskValue = this.hiddenMask.replace(/[>|\\\\<]/g, '');\n var curMask = maskValue[startIndex - 1];\n var parentElement = this.element.parentNode;\n if (isRemove || event.keyCode === 8 || event.keyCode === 46) {\n this.undoCollec.push({ value: this.element.value, startIndex: this.element.selectionStart, endIndex: endIndex });\n var multipleDel = false;\n if (startIndex > 0 || ((event.keyCode === 8 || event.keyCode === 46) && startIndex < this.element.value.length\n && ((this.element.selectionEnd - startIndex) !== this.element.value.length))) {\n var index = startIndex;\n if (startIndex !== endIndex) {\n startIndex = endIndex;\n if (event.keyCode === 46) {\n multipleDel = true;\n }\n }\n else if (event.keyCode === 46) {\n ++index;\n }\n else {\n --index;\n }\n for (var k = startIndex; (event.keyCode === 8 || isRemove || multipleDel) ? k > index : k < index; (event.keyCode === 8 || isRemove || multipleDel) ? k-- : k++) {\n for (var i = startIndex; (event.keyCode === 8 || isRemove || multipleDel) ? i > 0 : i < this.element.value.length; (event.keyCode === 8 || isRemove || multipleDel) ? i-- : i++) {\n var sIndex = void 0;\n if (((event.keyCode === 8 || multipleDel) && ((initStartIndex !== initEndIndex && initStartIndex !== startIndex) ||\n (initStartIndex === initEndIndex))) || isRemove) {\n curMask = maskValue[i - 1];\n sIndex = startIndex - 1;\n }\n else {\n curMask = maskValue[i];\n sIndex = startIndex;\n ++startIndex;\n }\n var oldValue = this.element.value[sIndex];\n if ((isNullOrUndefined(this.regExpCollec[curMask]) && (!isNullOrUndefined(this.customCharacters)\n && isNullOrUndefined(this.customCharacters[curMask]))\n && ((this.hiddenMask[sIndex] !== this.promptChar && this.customRegExpCollec[sIndex][0] !== '['\n && this.customRegExpCollec[sIndex][this.customRegExpCollec[sIndex].length - 1] !== ']')))\n || (this.promptMask[sIndex] !== this.promptChar && isNullOrUndefined(this.customCharacters))) {\n this.element.selectionStart = this.element.selectionEnd = sIndex;\n event.preventDefault();\n if (event.keyCode === 46 && !multipleDel) {\n ++this.element.selectionStart;\n }\n }\n else {\n var value = this.element.value;\n var prompt_1 = this.promptChar;\n var elementValue = value.substring(0, sIndex) + prompt_1 + value.substring(startIndex, value.length);\n setElementValue.call(this, elementValue);\n event.preventDefault();\n this.element.selectionStart = this.element.selectionEnd = sIndex;\n isDeleted = true;\n }\n startIndex = this.element.selectionStart;\n if ((!isDeleted && event.keyCode === 8) || multipleDel || (!isDeleted && !(event.keyCode === 46))) {\n sIndex = startIndex - 1;\n }\n else {\n sIndex = startIndex;\n isDeleted = false;\n }\n oldValue = this.element.value[sIndex];\n if (((initStartIndex !== initEndIndex) && (this.element.selectionStart === initStartIndex))\n || (this.promptMask[sIndex] === this.promptChar) || ((oldValue !== this.promptMask[sIndex]) &&\n (this.promptMask[sIndex] !== this.promptChar) && !isNullOrUndefined(this.customCharacters))) {\n break;\n }\n }\n }\n }\n if (this.element.selectionStart === 0 && (this.element.selectionEnd === this.element.value.length)) {\n setElementValue.call(this, this.promptMask);\n event.preventDefault();\n this.element.selectionStart = this.element.selectionEnd = startIndex;\n }\n this.redoCollec.unshift({\n value: this.element.value, startIndex: this.element.selectionStart,\n endIndex: this.element.selectionEnd\n });\n triggerMaskChangeEvent.call(this, event, oldEventVal);\n }\n}\nfunction maskInputKeyPressHandler(event) {\n if (this.mask) {\n var oldValue = this.element.value;\n if ((!event.ctrlKey) || (event.ctrlKey && event.code !== 'KeyA' && event.code !== 'KeyY'\n && event.code !== 'KeyZ' && event.code !== 'KeyX' && event.code !== 'KeyC' && event.code !== 'KeyV')) {\n this.maskKeyPress = true;\n var key = event.key;\n if (key === 'Spacebar') {\n key = String.fromCharCode(event.keyCode);\n }\n if (!key) {\n this.isIosInvalid = true;\n validateValue.call(this, String.fromCharCode(event.keyCode), event.ctrlKey, event);\n event.preventDefault();\n this.isIosInvalid = false;\n }\n else if (key && key.length === 1) {\n validateValue.call(this, key, event.ctrlKey, event);\n event.preventDefault();\n }\n }\n triggerMaskChangeEvent.call(this, event, oldValue);\n }\n}\nfunction triggerMaskChangeEvent(event, oldValue) {\n if (!isNullOrUndefined(this.changeEventArgs)) {\n var eventArgs = {};\n this.changeEventArgs = { value: this.element.value, maskedValue: this.element.value, isInteraction: false };\n if (this.mask) {\n this.changeEventArgs.value = strippedValue.call(this, this.element);\n }\n if (!isNullOrUndefined(event)) {\n this.changeEventArgs.isInteraction = true;\n this.changeEventArgs.event = event;\n }\n merge(eventArgs, this.changeEventArgs);\n this.trigger('change', eventArgs);\n }\n attributes(this.element, { 'aria-valuenow': this.element.value });\n}\nfunction maskInputKeyUpHandler(event) {\n if (this.mask) {\n var collec = void 0;\n if (!this.maskKeyPress && event.keyCode === 229) {\n var oldEventVal = void 0;\n if (this.element.value.length === 1) {\n this.element.value = this.element.value + this.promptMask;\n this.element.setSelectionRange(1, 1);\n }\n if (this.element.value.length > this.promptMask.length) {\n var startIndex = this.element.selectionStart;\n var addedValues = this.element.value.length - this.promptMask.length;\n var val_1 = this.element.value.substring(startIndex - addedValues, startIndex);\n if (this.undoCollec.length > 0) {\n collec = this.undoCollec[this.undoCollec.length - 1];\n var startIndex_1 = this.element.selectionStart;\n oldEventVal = collec.value;\n var oldVal = collec.value.substring(startIndex_1 - addedValues, startIndex_1);\n collec = this.redoCollec[0];\n val_1 = val_1.trim();\n var isSpace = Browser.isAndroid && val_1 === '';\n if (!isSpace && oldVal !== val_1 && collec.value.substring(startIndex_1 - addedValues, startIndex_1) !== val_1) {\n validateValue.call(this, val_1, event.ctrlKey, event);\n }\n else if (isSpace) {\n preventUnsupportedValues.call(this, event, startIndex_1 - 1, this.element.selectionEnd - 1, val_1, event.ctrlKey, false);\n }\n }\n else {\n oldEventVal = this.promptMask;\n validateValue.call(this, val_1, event.ctrlKey, event);\n }\n this.maskKeyPress = false;\n triggerMaskChangeEvent.call(this, event, oldEventVal);\n }\n }\n else {\n removeMaskError.call(this);\n }\n var val = strippedValue.call(this, this.element);\n if (!((this.element.selectionStart === 0) && (this.promptMask === this.element.value) && val === '')\n || (val === '' && this.value !== val)) {\n this.prevValue = val;\n this.value = val;\n }\n }\n else {\n triggerMaskChangeEvent.call(this, event);\n this.value = this.element.value;\n }\n if (this.element.selectionStart === 0 && this.element.selectionEnd === 0) {\n // tslint:disable-next-line\n var temp_1 = this.element;\n setTimeout(function () {\n temp_1.setSelectionRange(0, 0);\n }, 0);\n }\n}\nfunction mobileSwipeCheck(key) {\n if (key.length > 1 && ((this.promptMask.length + key.length) < this.element.value.length)) {\n var elementValue = this.redoCollec[0].value.substring(0, this.redoCollec[0].startIndex) + key +\n this.redoCollec[0].value.substring(this.redoCollec[0].startIndex, this.redoCollec[0].value.length);\n setElementValue.call(this, elementValue);\n this.element.selectionStart = this.element.selectionEnd = this.redoCollec[0].startIndex + key.length;\n }\n this.element.selectionStart = this.element.selectionStart - key.length;\n this.element.selectionEnd = this.element.selectionEnd - key.length;\n}\nfunction mobileValidation(key) {\n if (!this.maskKeyPress) {\n mobileSwipeCheck.call(this, key);\n }\n}\nfunction validateValue(key, isCtrlKey, event) {\n mobileValidation.call(this, key);\n if (isNullOrUndefined(this) || isNullOrUndefined(key)) {\n return;\n }\n var startIndex = this.element.selectionStart;\n var initStartIndex = startIndex;\n var endIndex = this.element.selectionEnd;\n var curMask;\n var allowText = false;\n var value = this.element.value;\n var eventOldVal;\n var prevSupport = false;\n var isEqualVal = false;\n for (var k = 0; k < key.length; k++) {\n var keyValue = key[k];\n startIndex = this.element.selectionStart;\n endIndex = this.element.selectionEnd;\n if (!this.maskKeyPress && initStartIndex === startIndex) {\n startIndex = startIndex + k;\n }\n if ((!this.maskKeyPress || startIndex < this.promptMask.length)) {\n for (var i = startIndex; i < this.promptMask.length; i++) {\n var maskValue = this.escapeMaskValue;\n curMask = maskValue[startIndex];\n if (this.hiddenMask[startIndex] === '\\\\' && this.hiddenMask[startIndex + 1] === key) {\n isEqualVal = true;\n }\n if ((isNullOrUndefined(this.regExpCollec[curMask]) && (isNullOrUndefined(this.customCharacters)\n || (!isNullOrUndefined(this.customCharacters) && isNullOrUndefined(this.customCharacters[curMask])))\n && ((this.hiddenMask[startIndex] !== this.promptChar && this.customRegExpCollec[startIndex][0] !== '['\n && this.customRegExpCollec[startIndex][this.customRegExpCollec[startIndex].length - 1] !== ']')))\n || ((this.promptMask[startIndex] !== this.promptChar) && isNullOrUndefined(this.customCharacters))\n || (this.promptChar === curMask && this.escapeMaskValue === this.mask)) {\n this.element.selectionStart = this.element.selectionEnd = startIndex + 1;\n startIndex = this.element.selectionStart;\n curMask = this.hiddenMask[startIndex];\n }\n }\n if (!isNullOrUndefined(this.customCharacters) && !isNullOrUndefined(this.customCharacters[curMask])) {\n var customValStr = this.customCharacters[curMask];\n var customValArr = customValStr.split(',');\n for (var i = 0; i < customValArr.length; i++) {\n if (keyValue.match(new RegExp('[' + customValArr[i] + ']'))) {\n allowText = true;\n break;\n }\n }\n }\n else if (!isNullOrUndefined(this.regExpCollec[curMask]) && keyValue.match(new RegExp(this.regExpCollec[curMask]))\n && this.promptMask[startIndex] === this.promptChar) {\n allowText = true;\n }\n else if (this.promptMask[startIndex] === this.promptChar && this.customRegExpCollec[startIndex][0] === '['\n && this.customRegExpCollec[startIndex][this.customRegExpCollec[startIndex].length - 1] === ']'\n && keyValue.match(new RegExp(this.customRegExpCollec[startIndex]))) {\n allowText = true;\n }\n if ((!this.maskKeyPress || startIndex < this.hiddenMask.length) && allowText) {\n if (k === 0) {\n if (this.maskKeyPress) {\n this.undoCollec.push({ value: value, startIndex: startIndex, endIndex: startIndex });\n }\n else {\n var sIndex = this.element.selectionStart;\n var eIndex = this.element.selectionEnd;\n if (this.redoCollec.length > 0) {\n eventOldVal = this.redoCollec[0].value;\n setElementValue.call(this, eventOldVal);\n this.undoCollec.push(this.redoCollec[0]);\n }\n else {\n this.undoCollec.push({ value: this.promptMask, startIndex: startIndex, endIndex: startIndex });\n eventOldVal = this.promptMask;\n setElementValue.call(this, eventOldVal);\n }\n this.element.selectionStart = sIndex;\n this.element.selectionEnd = eIndex;\n }\n }\n startIndex = this.element.selectionStart;\n applySupportedValues.call(this, event, startIndex, keyValue, eventOldVal, isEqualVal);\n prevSupport = true;\n if (k === key.length - 1) {\n this.redoCollec.unshift({\n value: this.element.value, startIndex: this.element.selectionStart, endIndex: this.element.selectionEnd\n });\n }\n allowText = false;\n }\n else {\n startIndex = this.element.selectionStart;\n preventUnsupportedValues.call(this, event, startIndex, initStartIndex, key, isCtrlKey, prevSupport);\n }\n if (k === key.length - 1 && !allowText) {\n if (!Browser.isAndroid || (Browser.isAndroid && startIndex < this.promptMask.length)) {\n this.redoCollec.unshift({\n value: this.element.value, startIndex: this.element.selectionStart, endIndex: this.element.selectionEnd\n });\n }\n }\n }\n else {\n if (key.length === 1 && !isCtrlKey && !isNullOrUndefined(event)) {\n addMaskErrorClass.call(this);\n }\n }\n }\n}\nfunction applySupportedValues(event, startIndex, keyValue, eventOldVal, isEqualVal) {\n if (this.hiddenMask.length > this.promptMask.length) {\n keyValue = changeToLowerUpperCase.call(this, keyValue, this.element.value);\n }\n if (!isEqualVal) {\n var value = this.element.value;\n var elementValue = value.substring(0, startIndex) + keyValue + value.substring(startIndex + 1, value.length);\n setElementValue.call(this, elementValue);\n this.element.selectionStart = this.element.selectionEnd = startIndex + 1;\n }\n triggerMaskChangeEvent.call(this, event, eventOldVal);\n}\nfunction preventUnsupportedValues(event, sIdx, idx, key, ctrl, chkSupport) {\n if (!this.maskKeyPress) {\n var eventOldVal = void 0;\n var value = this.element.value;\n if (sIdx >= this.promptMask.length) {\n setElementValue.call(this, value.substring(0, sIdx));\n }\n else {\n if (idx === sIdx) {\n setElementValue.call(this, value.substring(0, sIdx) + value.substring(sIdx + 1, value.length));\n }\n else {\n if (this.promptMask.length === this.element.value.length) {\n setElementValue.call(this, value.substring(0, sIdx) + value.substring(sIdx, value.length));\n }\n else {\n setElementValue.call(this, value.substring(0, idx) + value.substring(idx + 1, value.length));\n }\n }\n this.element.selectionStart = this.element.selectionEnd = (chkSupport ||\n this.element.value[idx] !== this.promptChar) ? sIdx : idx;\n }\n eventOldVal = this.element.value;\n triggerMaskChangeEvent.call(this, event, eventOldVal);\n addMaskErrorClass.call(this);\n }\n if (key.length === 1 && !ctrl && !isNullOrUndefined(event)) {\n addMaskErrorClass.call(this);\n }\n}\nfunction addMaskErrorClass() {\n var _this = this;\n var parentElement = this.element.parentNode;\n var timer = 200;\n if (parentElement.classList.contains(INPUTGROUP) || parentElement.classList.contains(FLOATINPUT)) {\n addClass([parentElement], ERROR);\n }\n else {\n addClass([this.element], ERROR);\n }\n if (this.isIosInvalid === true) {\n timer = 400;\n }\n attributes(this.element, { 'aria-invalid': 'true' });\n setTimeout(function () {\n if (!_this.maskKeyPress) {\n removeMaskError.call(_this);\n }\n }, timer);\n}\nfunction removeMaskError() {\n var parentElement = this.element.parentNode;\n removeClass([parentElement], ERROR);\n removeClass([this.element], ERROR);\n attributes(this.element, { 'aria-invalid': 'false' });\n}\n/**\n * @hidden\n * Validates user input using masking elements '<' , '>' and '|'.\n */\nfunction changeToLowerUpperCase(key, value) {\n var promptMask;\n var i;\n var j = 0;\n var curVal = value;\n var caseCount = 0;\n for (i = 0; i < this.hiddenMask.length; i++) {\n if (this.hiddenMask[i] === '\\\\') {\n promptMask = curVal.substring(0, i) + '\\\\' + curVal.substring(i, curVal.length);\n }\n if (this.hiddenMask[i] === '>' || this.hiddenMask[i] === '<' || this.hiddenMask[i] === '|') {\n if (this.hiddenMask[i] !== curVal[i]) {\n promptMask = curVal.substring(0, i) + this.hiddenMask[i] + curVal.substring(i, curVal.length);\n }\n ++caseCount;\n }\n if (promptMask) {\n if (((promptMask[i] === this.promptChar) && (i > this.element.selectionStart)) ||\n (this.element.value.indexOf(this.promptChar) < 0 && (this.element.selectionStart + caseCount) === i)) {\n caseCount = 0;\n break;\n }\n curVal = promptMask;\n }\n }\n while (i >= 0 && promptMask) {\n if (i === 0 || promptMask[i - 1] !== '\\\\') {\n var val = this.element.value;\n if (promptMask[i] === '>') {\n key = key.toUpperCase();\n break;\n }\n else if (promptMask[i] === '<') {\n key = key.toLowerCase();\n break;\n }\n else if (promptMask[i] === '|') {\n break;\n }\n }\n --i;\n }\n return key;\n}\n/**\n * @hidden\n * To set updated values in the MaskedTextBox.\n */\nexport function setMaskValue(val) {\n if (this.mask && val !== undefined && (val === '' || this.prevValue !== val)) {\n this.maskKeyPress = true;\n setElementValue.call(this, this.promptMask);\n if (val !== '') {\n this.element.selectionStart = 0;\n this.element.selectionEnd = 0;\n }\n if (val !== null) {\n for (var i = 0; i < val.length; i++) {\n validateValue.call(this, val[i], false, null);\n }\n }\n this.value = strippedValue.call(this, this.element);\n this.maskKeyPress = false;\n var labelElement = this.element.parentNode.querySelector('.e-float-text');\n if (this.element.value === this.promptMask && this.floatLabelType === 'Auto' && this.placeholder &&\n !isNullOrUndefined(labelElement) && labelElement.classList.contains(TOPLABEL) && !this.isFocus) {\n removeClass([labelElement], TOPLABEL);\n addClass([labelElement], BOTTOMLABEL);\n setElementValue.call(this, '');\n }\n }\n if (this.mask === null || this.mask === '' && this.value !== undefined) {\n setElementValue.call(this, this.value);\n }\n}\n/**\n * @hidden\n * To set updated values in the input element.\n */\nexport function setElementValue(val, element) {\n if (!this.isFocus && this.floatLabelType === 'Auto' && this.placeholder && isNullOrUndefined(this.value)) {\n val = '';\n }\n var value = strippedValue.call(this, (element ? element : this.element), val);\n if (value === null || value === '') {\n Input.setValue(val, (element ? element : this.element), this.floatLabelType, false);\n if (this.showClearButton) {\n this.inputObj.clearButton.classList.add('e-clear-icon-hide');\n }\n }\n else {\n Input.setValue(val, (element ? element : this.element), this.floatLabelType, this.showClearButton);\n }\n}\n/**\n * @hidden\n * Provide mask support to input textbox through utility method.\n */\nexport function maskInput(args) {\n var inputEle = getMaskInput(args);\n applyMask.call(inputEle);\n var val = strippedValue.call(this, this.element);\n this.prevValue = val;\n this.value = val;\n if (args.mask) {\n unwireEvents.call(inputEle);\n wireEvents.call(inputEle);\n }\n}\nfunction getMaskInput(args) {\n addClass([args.element], UTILMASK);\n var inputEle = {\n element: args.element,\n mask: args.mask,\n promptMask: '',\n hiddenMask: '',\n escapeMaskValue: '',\n promptChar: args.promptChar ? (args.promptChar.length > 1) ? args.promptChar = args.promptChar[0]\n : args.promptChar : '_',\n value: args.value ? args.value : null,\n regExpCollec: regularExpressions,\n customRegExpCollec: [],\n customCharacters: args.customCharacters,\n undoCollec: [],\n redoCollec: [],\n maskKeyPress: false,\n prevValue: ''\n };\n createMask.call(inputEle);\n return inputEle;\n}\n/**\n * @hidden\n * Gets raw value of the textbox which has been masked through utility method.\n */\nexport function getVal(args) {\n return strippedValue.call(getUtilMaskEle(args), args.element);\n}\n/**\n * @hidden\n * Gets masked value of the textbox which has been masked through utility method.\n */\nexport function getMaskedVal(args) {\n return unstrippedValue.call(getUtilMaskEle(args), args.element);\n}\nfunction getUtilMaskEle(args) {\n var value = '';\n var inputEle;\n if (!isNullOrUndefined(args) && args.element.classList.contains(UTILMASK)) {\n inputEle = getMaskInput(args);\n }\n return inputEle;\n}\n/**\n * @hidden\n * Arguments to perform undo and redo functionalities.\n */\nvar MaskUndo = /** @class */ (function () {\n function MaskUndo() {\n }\n return MaskUndo;\n}());\nexport { MaskUndo };\nvar maskUndo = new MaskUndo();\n","import { extend, merge, isNullOrUndefined, getValue } from '@syncfusion/ej2-base';\nimport { createElement, attributes, prepend, isVisible, append, addClass } from '@syncfusion/ej2-base';\nimport { compile } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nexport var cssClass = {\n li: 'e-list-item',\n ul: 'e-list-parent e-ul',\n group: 'e-list-group-item',\n icon: 'e-list-icon',\n text: 'e-list-text',\n check: 'e-list-check',\n checked: 'e-checked',\n selected: 'e-selected',\n expanded: 'e-expanded',\n textContent: 'e-text-content',\n hasChild: 'e-has-child',\n level: 'e-level',\n url: 'e-list-url',\n collapsible: 'e-icon-collapsible',\n disabled: 'e-disabled',\n image: 'e-list-img',\n iconWrapper: 'e-icon-wrapper'\n};\n/**\n * Base List Generator\n */\nexport var ListBase;\n(function (ListBase) {\n /**\n * Default mapped fields.\n */\n ListBase.defaultMappedFields = {\n id: 'id',\n text: 'text',\n url: 'url',\n value: 'value',\n isChecked: 'isChecked',\n enabled: 'enabled',\n expanded: 'expanded',\n selected: 'selected',\n iconCss: 'iconCss',\n child: 'child',\n isVisible: 'isVisible',\n hasChildren: 'hasChildren',\n tooltip: 'tooltip',\n htmlAttributes: 'htmlAttributes',\n urlAttributes: 'urlAttributes',\n imageAttributes: 'imageAttributes',\n imageUrl: 'imageUrl',\n groupBy: null\n };\n var defaultAriaAttributes = {\n level: 1,\n listRole: 'presentation',\n itemRole: 'presentation',\n groupItemRole: 'group',\n itemText: 'list-item',\n wrapperRole: 'presentation'\n };\n var defaultListBaseOptions = {\n showCheckBox: false,\n showIcon: false,\n expandCollapse: false,\n fields: ListBase.defaultMappedFields,\n ariaAttributes: defaultAriaAttributes,\n listClass: '',\n itemClass: '',\n processSubChild: false,\n sortOrder: 'None',\n template: null,\n groupTemplate: null,\n headerTemplate: null,\n expandIconClass: 'e-icon-collapsible',\n moduleName: 'list',\n expandIconPosition: 'Right'\n };\n /**\n * Function helps to created and return the UL Li element based on your data.\n * @param {{[key:string]:Object}[]|string[]} dataSource - Specifies an array of JSON or String data.\n * @param {ListBaseOptions} options? - Specifies the list options that need to provide.\n */\n function createList(dataSource, options, isSingleLevel) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n var type = typeofData(dataSource).typeof;\n if (type === 'string' || type === 'number') {\n return createListFromArray(dataSource, isSingleLevel, options);\n }\n else {\n return createListFromJson(dataSource, options, ariaAttributes.level, isSingleLevel);\n }\n }\n ListBase.createList = createList;\n /**\n * Function helps to created an element list based on string array input .\n * @param {string[]} dataSource - Specifies an array of string data\n */\n function createListFromArray(dataSource, isSingleLevel, options) {\n var subChild = createListItemFromArray(dataSource, isSingleLevel, options);\n return generateUL(subChild, null, options);\n }\n ListBase.createListFromArray = createListFromArray;\n /**\n * Function helps to created an element list based on string array input .\n * @param {string[]} dataSource - Specifies an array of string data\n */\n function createListItemFromArray(dataSource, isSingleLevel, options) {\n var subChild = [];\n var curOpt = extend({}, defaultListBaseOptions, options);\n cssClass = getModuleClass(curOpt.moduleName);\n var id = generateId(); // generate id for drop-down-list option.\n for (var i = 0; i < dataSource.length; i++) {\n if (isNullOrUndefined(dataSource[i])) {\n continue;\n }\n var li = void 0;\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: dataSource[i],\n text: dataSource[i],\n options: curOpt\n };\n curOpt.itemCreating(curData);\n }\n if (isSingleLevel) {\n li = generateSingleLevelLI(dataSource[i], null, null, [], null, id, i, options);\n }\n else {\n li = generateLI(dataSource[i], null, null, options);\n }\n if (curOpt.itemCreated && typeof curOpt.itemCreated === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: dataSource[i],\n text: dataSource[i],\n item: li,\n options: curOpt\n };\n curOpt.itemCreated(curData);\n }\n subChild.push(li);\n }\n return subChild;\n }\n ListBase.createListItemFromArray = createListItemFromArray;\n /**\n * Function helps to created an element list based on array of JSON input .\n * @param {{[key:string]:Object}[]} dataSource - Specifies an array of JSON data.\n * @param {ListBaseOptions} options? - Specifies the list options that need to provide.\n */\n // tslint:disable-next-line:max-func-body-length\n function createListItemFromJson(dataSource, options, level, isSingleLevel) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n cssClass = getModuleClass(curOpt.moduleName);\n var fields = extend({}, ListBase.defaultMappedFields, curOpt.fields);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n var id;\n if (level) {\n ariaAttributes.level = level;\n }\n var child = [];\n var li;\n if (Object.keys(dataSource).length && !typeofData(dataSource).item.hasOwnProperty(fields.id)) {\n id = generateId(); // generate id for drop-down-list option.\n }\n for (var i = 0; i < dataSource.length; i++) {\n var fieldData = getFieldValues(dataSource[i], fields);\n if (isNullOrUndefined(dataSource[i])) {\n continue;\n }\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: dataSource[i],\n text: fieldData[fields.text],\n options: curOpt,\n fields: fields\n };\n curOpt.itemCreating(curData);\n }\n var curItem = dataSource[i];\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n fieldData = getFieldValues(dataSource[i], fields);\n }\n if (Object.keys(dataSource).length && fieldData.hasOwnProperty(fields.id)\n && !isNullOrUndefined(fieldData[fields.id])) {\n id = fieldData.id;\n }\n var innerEle = [];\n if (curOpt.showCheckBox) {\n innerEle.push(createElement('input', { className: cssClass.check, attrs: { type: 'checkbox' } }));\n }\n if (isSingleLevel === true) {\n if (curOpt.showIcon && fieldData.hasOwnProperty(fields.iconCss)) {\n if (!isNullOrUndefined(fieldData[fields.iconCss])) {\n innerEle.push(createElement('span', { className: cssClass.icon + ' ' + fieldData[fields.iconCss] }));\n }\n }\n li = generateSingleLevelLI(curItem, fields, curOpt.itemClass, innerEle, (curItem.hasOwnProperty('isHeader') &&\n curItem.isHeader) ? true : false, id, i, options);\n }\n else {\n li = generateLI(curItem, fields, curOpt.itemClass, options);\n li.classList.add(cssClass.level + '-' + ariaAttributes.level);\n li.setAttribute('aria-level', ariaAttributes.level.toString());\n if (fieldData.hasOwnProperty(fields.tooltip)) {\n li.setAttribute('title', fieldData[fields.tooltip]);\n }\n if (fieldData.hasOwnProperty(fields.htmlAttributes) && fieldData[fields.htmlAttributes]) {\n setAttribute(li, fieldData[fields.htmlAttributes]);\n }\n if (fieldData.hasOwnProperty(fields.enabled) && fieldData[fields.enabled] === false) {\n li.classList.add(cssClass.disabled);\n }\n if (fieldData.hasOwnProperty(fields.isVisible) && fieldData[fields.isVisible] === false) {\n li.style.display = 'none';\n }\n if (fieldData.hasOwnProperty(fields.imageUrl) && !isNullOrUndefined(fieldData[fields.imageUrl])) {\n var attr = { src: fieldData[fields.imageUrl] };\n if (fieldData.hasOwnProperty(fields.imageUrl)) {\n merge(attr, fieldData[fields.imageAttributes]);\n }\n prepend([createElement('img', { className: cssClass.image, attrs: attr })], li.firstElementChild);\n }\n if (curOpt.showIcon && fieldData.hasOwnProperty(fields.iconCss) && !curOpt.template) {\n if (!isNullOrUndefined(fieldData[fields.iconCss])) {\n prepend([createElement('div', { className: cssClass.icon + ' ' + fieldData[fields.iconCss] })], li.firstElementChild);\n }\n }\n if (innerEle.length) {\n prepend(innerEle, li.firstElementChild);\n }\n processSubChild(curItem, fields, dataSource, curOpt, li, ariaAttributes.level);\n }\n if (curOpt.itemCreated && typeof curOpt.itemCreated === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: dataSource[i],\n text: fieldData[fields.text],\n item: li,\n options: curOpt,\n fields: fields\n };\n curOpt.itemCreated(curData);\n }\n child.push(li);\n }\n return child;\n }\n ListBase.createListItemFromJson = createListItemFromJson;\n /**\n * Function helps to created an element list based on array of JSON input .\n * @param {{[key:string]:Object}[]} dataSource - Specifies an array of JSON data.\n * @param {ListBaseOptions} options? - Specifies the list options that need to provide.\n */\n function createListFromJson(dataSource, options, level, isSingleLevel) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var li = createListItemFromJson(dataSource, options, level, isSingleLevel);\n return generateUL(li, curOpt.listClass, options);\n }\n ListBase.createListFromJson = createListFromJson;\n /**\n * Return the next or previous visible element.\n * @param {Element[]|NodeList} elementArray - An element array to find next or previous element.\n * @param {Element} li - An element to find next or previous after this element.\n * @param {boolean} isPrevious? - Specify when the need get previous element from array.\n */\n function getSiblingLI(elementArray, element, isPrevious) {\n cssClass = getModuleClass(defaultListBaseOptions.moduleName);\n if (!elementArray || !elementArray.length) {\n return void 0;\n }\n var siblingLI;\n var liIndex;\n var liCollections = Array.prototype.slice.call(elementArray);\n if (element) {\n liIndex = indexOf(element, liCollections);\n }\n else {\n liIndex = (isPrevious === true ? liCollections.length : -1);\n }\n siblingLI = liCollections[liIndex + (isPrevious === true ? -1 : 1)];\n while (siblingLI && (!isVisible(siblingLI) || siblingLI.classList.contains(cssClass.disabled))) {\n liIndex = liIndex + (isPrevious === true ? -1 : 1);\n siblingLI = liCollections[liIndex];\n }\n return siblingLI;\n }\n ListBase.getSiblingLI = getSiblingLI;\n /**\n * Return the index of the li element\n * @param {Element} item - An element to find next or previous after this element.\n * @param {Element[]|NodeList} elementArray - An element array to find index of given li.\n */\n function indexOf(item, elementArray) {\n if (!elementArray || !item) {\n return void 0;\n }\n else {\n var liCollections = elementArray;\n liCollections = Array.prototype.slice.call(elementArray);\n return liCollections.indexOf(item);\n }\n }\n ListBase.indexOf = indexOf;\n /**\n * Returns the grouped data from given dataSource.\n * @param {{[key:string]:Object}[]} dataSource - The JSON data which is necessary to process.\n * @param {FieldsMapping} fields - Fields that are mapped from the data source.\n * @param {SortOrder='None'} sortOrder- Specifies final result sort order.\n */\n function groupDataSource(dataSource, fields, sortOrder) {\n if (sortOrder === void 0) { sortOrder = 'None'; }\n var cusQuery = new Query().group(fields.groupBy);\n // need to remove once sorting issues fixed in DataManager\n cusQuery = addSorting(sortOrder, 'key', cusQuery);\n var ds = getDataSource(dataSource, cusQuery);\n dataSource = [];\n for (var j = 0; j < ds.length; j++) {\n var itemObj = ds[j].items;\n var grpItem = {};\n var hdr = 'isHeader';\n grpItem[fields.text] = ds[j].key;\n grpItem[hdr] = true;\n grpItem.id = 'group-list-item-' + (ds[j].key ?\n ds[j].key.toString().trim() : 'undefined');\n grpItem.items = itemObj;\n dataSource.push(grpItem);\n for (var k = 0; k < itemObj.length; k++) {\n dataSource.push(itemObj[k]);\n }\n }\n return dataSource;\n }\n ListBase.groupDataSource = groupDataSource;\n /**\n * Returns a sorted query object.\n * @param {SortOrder} sortOrder - Specifies that sort order.\n * @param {string} sortBy - Specifies sortBy fields.\n * @param {Query=new Query()} query - Pass if any existing query.\n */\n function addSorting(sortOrder, sortBy, query) {\n if (query === void 0) { query = new Query(); }\n if (sortOrder === 'Ascending') {\n query.sortBy(sortBy, 'ascending', true);\n }\n else if (sortOrder === 'Descending') {\n query.sortBy(sortBy, 'descending', true);\n }\n else {\n for (var i = 0; i < query.queries.length; i++) {\n if (query.queries[i].fn === 'onSortBy') {\n query.queries.splice(i, 1);\n }\n }\n }\n return query;\n }\n ListBase.addSorting = addSorting;\n /**\n * Return an array of JSON Data that processed based on queries.\n * @param {{[key:string]:Object}[]} dataSource - Specifies local JSON data source.\n * @param {Query} query - Specifies query that need to process.\n */\n function getDataSource(dataSource, query) {\n // tslint:disable-next-line\n return new DataManager(dataSource)\n .executeLocal(query);\n }\n ListBase.getDataSource = getDataSource;\n /**\n * Created JSON data based the UL and LI element\n * @param {HTMLElement|Element} element - UL element that need to convert as a JSON\n * @param {ListBaseOptions} options? - Specifies listbase option for fields.\n */\n function createJsonFromElement(element, options) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var fields = extend({}, ListBase.defaultMappedFields, curOpt.fields);\n var curEle = element.cloneNode(true);\n var jsonAr = [];\n curEle.classList.add('json-parent');\n var childs = curEle.querySelectorAll('.json-parent>li');\n curEle.classList.remove('json-parent');\n for (var i = 0; i < childs.length; i++) {\n var li = childs[i];\n var anchor = li.querySelector('a');\n var ul = li.querySelector('ul');\n var json = {};\n var childNodes = anchor ? anchor.childNodes : li.childNodes;\n var keys = Object.keys(childNodes);\n for (var i_1 = 0; i_1 < childNodes.length; i_1++) {\n if (!(childNodes[Number(keys[i_1])]).hasChildNodes()) {\n json[fields.text] = childNodes[Number(keys[i_1])].textContent;\n }\n }\n json[fields.id] = generateId();\n var attributes_1 = getAllAttributes(li);\n if (Object.keys(attributes_1).length) {\n json[fields.htmlAttributes] = attributes_1;\n }\n if (anchor) {\n attributes_1 = getAllAttributes(anchor);\n if (Object.keys(attributes_1).length) {\n json[fields.urlAttributes] = attributes_1;\n }\n }\n if (ul) {\n json[fields.child] = createJsonFromElement(ul, options);\n }\n jsonAr.push(json);\n }\n return jsonAr;\n }\n ListBase.createJsonFromElement = createJsonFromElement;\n function typeofData(data) {\n var match = { typeof: null, item: null };\n for (var i = 0; i < data.length; i++) {\n if (!isNullOrUndefined(data[i])) {\n return match = { typeof: typeof data[i], item: data[i] };\n }\n }\n return match;\n }\n function setAttribute(element, elementAttributes) {\n var attr = {};\n merge(attr, elementAttributes);\n if (attr.class) {\n addClass([element], attr.class.split(' '));\n delete attr.class;\n }\n attributes(element, attr);\n }\n function getAllAttributes(element) {\n var attributes = {};\n var attr = element.attributes;\n for (var index = 0; index < attr.length; index++) {\n attributes[attr[index].nodeName] = attr[index].nodeValue;\n }\n return attributes;\n }\n /**\n * Created UL element from content template.\n * @param {string} template - that need to convert and generate li element.\n * @param {{[key:string]:Object}[]} dataSource - Specifies local JSON data source.\n * @param {ListBaseOptions} options? - Specifies listbase option for fields.\n */\n function renderContentTemplate(template, dataSource, fields, options) {\n cssClass = getModuleClass(defaultListBaseOptions.moduleName);\n var ulElement = createElement('ul', { className: cssClass.ul, attrs: { role: 'presentation' } });\n var curOpt = extend({}, defaultListBaseOptions, options);\n var compiledString = compile(template);\n var liCollection = [];\n var id = generateId(); // generate id for drop-down-list option.\n for (var i = 0; i < dataSource.length; i++) {\n var fieldData = getFieldValues(dataSource[i], fields);\n var curItem = dataSource[i];\n var isHeader = curItem.isHeader;\n var value = (typeof curItem === 'string' || typeof curItem === 'number') ? curItem : fieldData[fields.value];\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: curItem,\n text: value,\n options: curOpt,\n fields: fields\n };\n curOpt.itemCreating(curData);\n }\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n fieldData = getFieldValues(dataSource[i], fields);\n value = fieldData[fields.value];\n }\n var li = createElement('li', {\n id: id + '-' + i,\n className: isHeader ? cssClass.group : cssClass.li, attrs: { role: 'presentation' }\n });\n if (isHeader) {\n li.innerText = fieldData[fields.text];\n }\n else {\n append(compiledString(curItem), li);\n li.setAttribute('data-value', value);\n li.setAttribute('role', 'option');\n }\n if (curOpt.itemCreated && typeof curOpt.itemCreated === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: curItem,\n text: value,\n item: li,\n options: curOpt,\n fields: fields\n };\n curOpt.itemCreated(curData);\n }\n liCollection.push(li);\n }\n append(liCollection, ulElement);\n return ulElement;\n }\n ListBase.renderContentTemplate = renderContentTemplate;\n /**\n * Created header items from group template.\n * @param {string} template - that need to convert and generate li element.\n * @param {{[key:string]:Object}[]} dataSource - Specifies local JSON data source.\n * @param {FieldsMapping} fields - Specifies fields for mapping the dataSource.\n * @param {Element[]} headerItems? - Specifies listbase header items.\n */\n function renderGroupTemplate(groupTemplate, groupDataSource, fields, headerItems) {\n var compiledString = compile(groupTemplate);\n var category = fields.groupBy;\n for (var _i = 0, headerItems_1 = headerItems; _i < headerItems_1.length; _i++) {\n var header = headerItems_1[_i];\n var headerData = {};\n headerData[category] = header.textContent;\n header.innerHTML = '';\n append(compiledString(headerData), header);\n }\n return headerItems;\n }\n ListBase.renderGroupTemplate = renderGroupTemplate;\n function generateId() {\n return Math.floor((1 + Math.random()) * 0x10000)\n .toString(16)\n .substring(1);\n }\n ListBase.generateId = generateId;\n function processSubChild(curItem, fields, ds, options, element, level) {\n var fieldData = getFieldValues(curItem, fields);\n // Get SubList \n var subDS = fieldData[fields.child] || [];\n var hasChildren = fieldData[fields.hasChildren];\n //Create Sub child\n if (subDS.length) {\n hasChildren = true;\n element.classList.add(cssClass.hasChild);\n if (options.processSubChild) {\n var subLi = createListFromJson(subDS, options, ++level);\n element.appendChild(subLi);\n }\n }\n // Create expand and collapse node\n if (!!options.expandCollapse && hasChildren && !options.template) {\n if (element.firstElementChild.classList.contains(cssClass.textContent)) {\n element.firstElementChild.classList.add(cssClass.iconWrapper);\n }\n var expandElement = options.expandIconPosition === 'Left' ? prepend : append;\n expandElement([createElement('div', { className: 'e-icons ' + options.expandIconClass })], element.querySelector('.' + cssClass.textContent));\n }\n }\n function generateSingleLevelLI(item, fields, className, innerElements, grpLI, id, index, options) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n var text = item;\n var value = item;\n var dataSource;\n var fieldData = getFieldValues(item, fields);\n if (typeof item !== 'string' && typeof item !== 'number' && typeof item !== 'boolean') {\n dataSource = item;\n text = (typeof fieldData[fields.text] === 'boolean' || typeof fieldData[fields.text] === 'number') ?\n fieldData[fields.text] : (fieldData[fields.text] || '');\n value = fieldData[fields.value];\n }\n var elementID;\n if (!isNullOrUndefined(dataSource) && !isNullOrUndefined(fieldData[fields.id])\n && fieldData[fields.id] !== '') {\n elementID = id;\n }\n else {\n elementID = id + '-' + index;\n }\n var li = createElement('li', {\n className: (grpLI === true ? cssClass.group : cssClass.li) + ' ' + (isNullOrUndefined(className) ? '' : className),\n id: elementID, attrs: (ariaAttributes.groupItemRole !== '' && ariaAttributes.itemRole !== '' ?\n { role: (grpLI === true ? ariaAttributes.groupItemRole : ariaAttributes.itemRole) } : {})\n });\n if (dataSource && fieldData.hasOwnProperty(fields.enabled) && fieldData[fields.enabled].toString() === 'false') {\n li.classList.add(cssClass.disabled);\n }\n if (grpLI) {\n li.innerText = text;\n }\n else {\n if (!isNullOrUndefined(value)) {\n li.setAttribute('data-value', value);\n }\n li.setAttribute('role', 'option');\n if (dataSource && fieldData.hasOwnProperty(fields.htmlAttributes) && fieldData[fields.htmlAttributes]) {\n setAttribute(li, fieldData[fields.htmlAttributes]);\n }\n if (innerElements.length) {\n append(innerElements, li);\n }\n if (dataSource && fieldData.hasOwnProperty(fields.url) && fieldData[fields.url]) {\n li.appendChild(anchorTag(dataSource, fields, text));\n }\n else {\n li.appendChild(document.createTextNode(text));\n }\n }\n return li;\n }\n function getModuleClass(moduleName) {\n var moduleClass;\n return moduleClass = {\n li: \"e-\" + moduleName + \"-item\",\n ul: \"e-\" + moduleName + \"-parent e-ul\",\n group: \"e-\" + moduleName + \"-group-item\",\n icon: \"e-\" + moduleName + \"-icon\",\n text: \"e-\" + moduleName + \"-text\",\n check: \"e-\" + moduleName + \"-check\",\n checked: 'e-checked',\n selected: 'e-selected',\n expanded: 'e-expanded',\n textContent: 'e-text-content',\n hasChild: 'e-has-child',\n level: 'e-level',\n url: \"e-\" + moduleName + \"-url\",\n collapsible: 'e-icon-collapsible',\n disabled: 'e-disabled',\n image: \"e-\" + moduleName + \"-img\",\n iconWrapper: 'e-icon-wrapper'\n };\n }\n function anchorTag(dataSource, fields, text) {\n var fieldData = getFieldValues(dataSource, fields);\n var attr = { href: fieldData[fields.url] };\n if (fieldData.hasOwnProperty(fields.urlAttributes) && fieldData[fields.urlAttributes]) {\n merge(attr, fieldData[fields.urlAttributes]);\n }\n var anchorTag = createElement('a', { className: cssClass.text + ' ' + cssClass.url, innerHTML: text });\n setAttribute(anchorTag, attr);\n return anchorTag;\n }\n /* tslint:disable:align */\n function generateLI(item, fields, className, options) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n var text = item;\n var uID;\n var grpLI;\n var dataSource;\n var fieldData;\n if (typeof item !== 'string' && typeof item !== 'number') {\n fieldData = getFieldValues(item, fields);\n dataSource = item;\n text = fieldData[fields.text] || '';\n uID = fieldData[fields.id];\n grpLI = (item.hasOwnProperty('isHeader') && item.isHeader)\n ? true : false;\n }\n var li = createElement('li', {\n className: (grpLI === true ? cssClass.group : cssClass.li) + ' ' + (isNullOrUndefined(className) ? '' : className),\n attrs: (ariaAttributes.groupItemRole !== '' && ariaAttributes.itemRole !== '' ?\n { role: (grpLI === true ? ariaAttributes.groupItemRole : ariaAttributes.itemRole) } : {})\n });\n !isNullOrUndefined(uID) ? li.setAttribute('data-uid', uID) : li.setAttribute('data-uid', generateId());\n if (grpLI && options && options.groupTemplate) {\n var compiledString = compile(options.groupTemplate);\n append(compiledString(item), li);\n }\n else if (!grpLI && options && options.template) {\n var compiledString = compile(options.template);\n append(compiledString(item), li);\n }\n else {\n var innerDiv = createElement('div', { className: cssClass.textContent,\n attrs: (ariaAttributes.wrapperRole !== '' ? { role: ariaAttributes.wrapperRole } : {}) });\n if (dataSource && fieldData.hasOwnProperty(fields.url) && fieldData[fields.url]) {\n innerDiv.appendChild(anchorTag(dataSource, fields, text));\n }\n else {\n innerDiv.appendChild(createElement('span', { className: cssClass.text, innerHTML: text,\n attrs: (ariaAttributes.itemText !== '' ? { role: ariaAttributes.itemText } : {}) }));\n }\n li.appendChild(innerDiv);\n }\n return li;\n }\n /**\n * Returns UL element based on the given LI element.\n * @param {HTMLElement[]} liElement - Specifies array of LI element.\n * @param {string} className? - Specifies class name that need to be added in UL element.\n * @param {ListBaseOptions} options? - Specifies ListBase options.\n */\n function generateUL(liElement, className, options) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n cssClass = getModuleClass(curOpt.moduleName);\n var ulElement = createElement('ul', {\n className: cssClass.ul + ' ' + (isNullOrUndefined(className) ? '' : className),\n attrs: (ariaAttributes.listRole !== '' ? { role: ariaAttributes.listRole } : {})\n });\n append(liElement, ulElement);\n return ulElement;\n }\n ListBase.generateUL = generateUL;\n /**\n * Returns LI element with additional DIV tag based on the given LI element.\n * @param {liElement} liElement - Specifies LI element.\n * @param {string} className? - Specifies class name that need to be added in created DIV element.\n * @param {ListBaseOptions} options? - Specifies ListBase options.\n */\n function generateIcon(liElement, className, options) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n cssClass = getModuleClass(curOpt.moduleName);\n var expandElement = curOpt.expandIconPosition === 'Left' ? prepend : append;\n expandElement([createElement('div', { className: 'e-icons ' + curOpt.expandIconClass + ' ' +\n (isNullOrUndefined(className) ? '' : className) })], liElement.querySelector('.' + cssClass.textContent));\n return liElement;\n }\n ListBase.generateIcon = generateIcon;\n})(ListBase || (ListBase = {}));\n/**\n * Used to get dataSource item from complex data using fields.\n * @param {{[key:string]:Object}|string[]|string} dataSource - Specifies an JSON or String data.\n * @param {FieldsMapping} fields - Fields that are mapped from the dataSource.\n */\nexport function getFieldValues(dataItem, fields) {\n var fieldData = {};\n var value;\n if (isNullOrUndefined(dataItem)) {\n return dataItem;\n }\n else if (typeof (dataItem) === 'string' || typeof (dataItem) === 'number') {\n return dataItem;\n }\n else if (isNullOrUndefined(dataItem.isHeader)) {\n for (var _i = 0, _a = Object.keys(fields); _i < _a.length; _i++) {\n var field = _a[_i];\n if (!isNullOrUndefined(fields[field]) &&\n typeof (fields[field]) === 'string') {\n var property = fields[field].split('.');\n var dataField = property.length > 1 ? property[0] : fields[field];\n if (!isNullOrUndefined(dataItem[dataField])) {\n value = getValue(fields[field], dataItem);\n if (!isNullOrUndefined(value)) {\n fieldData[fields[field]] = value;\n }\n }\n }\n }\n }\n else if (!isNullOrUndefined(dataItem.isHeader) && dataItem.isHeader) {\n fieldData = dataItem;\n }\n return fieldData;\n}\n","/**\n * Encoding class: Contains the details about encoding type, whether to write a Unicode byte order mark (BOM).\n * ```typescript\n * let encoding : Encoding = new Encoding();\n * encoding.type = 'Utf8';\n * encoding.getBytes('Encoding', 0, 5);\n * ```\n */\nvar Encoding = /** @class */ (function () {\n /**\n * Initializes a new instance of the Encoding class. A parameter specifies whether to write a Unicode byte order mark\n * @param {boolean} includeBom?-true to specify that a Unicode byte order mark is written; otherwise, false.\n */\n function Encoding(includeBom) {\n this.emitBOM = true;\n this.encodingType = 'Ansi';\n this.initBOM(includeBom);\n }\n Object.defineProperty(Encoding.prototype, \"includeBom\", {\n /**\n * Gets a value indicating whether to write a Unicode byte order mark\n * @returns boolean- true to specify that a Unicode byte order mark is written; otherwise, false\n */\n get: function () {\n return this.emitBOM;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Encoding.prototype, \"type\", {\n /**\n * Gets the encoding type.\n * @returns EncodingType\n */\n get: function () {\n return this.encodingType;\n },\n /**\n * Sets the encoding type.\n * @param {EncodingType} value\n */\n set: function (value) {\n this.encodingType = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Initialize the includeBom to emit BOM or Not\n * @param {boolean} includeBom\n */\n Encoding.prototype.initBOM = function (includeBom) {\n if (includeBom === undefined || includeBom === null) {\n this.emitBOM = true;\n }\n else {\n this.emitBOM = includeBom;\n }\n };\n /**\n * Calculates the number of bytes produced by encoding the characters in the specified string\n * @param {string} chars - The string containing the set of characters to encode\n * @returns {number} - The number of bytes produced by encoding the specified characters\n */\n Encoding.prototype.getByteCount = function (chars) {\n var byteCount = 0;\n validateNullOrUndefined(chars, 'string');\n if (chars === '') {\n var byte = this.utf8Len(chars.charCodeAt(0));\n return byte;\n }\n if (this.type === null || this.type === undefined) {\n this.type = 'Ansi';\n }\n return this.getByteCountInternal(chars, 0, chars.length);\n };\n /**\n * Return the Byte of character\n * @param {number} codePoint\n * @returns {number}\n */\n Encoding.prototype.utf8Len = function (codePoint) {\n var bytes = codePoint <= 0x7F ? 1 :\n codePoint <= 0x7FF ? 2 :\n codePoint <= 0xFFFF ? 3 :\n codePoint <= 0x1FFFFF ? 4 : 0;\n return bytes;\n };\n /**\n * for 4 byte character return surrogate pair true, otherwise false\n * @param {number} codeUnit\n * @returns {boolean}\n */\n Encoding.prototype.isHighSurrogate = function (codeUnit) {\n return codeUnit >= 0xD800 && codeUnit <= 0xDBFF;\n };\n /**\n * for 4byte character generate the surrogate pair\n * @param {number} highCodeUnit\n * @param {number} lowCodeUnit\n */\n Encoding.prototype.toCodepoint = function (highCodeUnit, lowCodeUnit) {\n highCodeUnit = (0x3FF & highCodeUnit) << 10;\n var u = highCodeUnit | (0x3FF & lowCodeUnit);\n return u + 0x10000;\n };\n /**\n * private method to get the byte count for specific charindex and count\n * @param {string} chars\n * @param {number} charIndex\n * @param {number} charCount\n */\n Encoding.prototype.getByteCountInternal = function (chars, charIndex, charCount) {\n var byteCount = 0;\n if (this.encodingType === 'Utf8' || this.encodingType === 'Unicode') {\n var isUtf8 = this.encodingType === 'Utf8';\n for (var i = 0; i < charCount; i++) {\n var charCode = chars.charCodeAt(isUtf8 ? charIndex : charIndex++);\n if (this.isHighSurrogate(charCode)) {\n if (isUtf8) {\n var high = charCode;\n var low = chars.charCodeAt(++charIndex);\n byteCount += this.utf8Len(this.toCodepoint(high, low));\n }\n else {\n byteCount += 4;\n ++i;\n }\n }\n else {\n if (isUtf8) {\n byteCount += this.utf8Len(charCode);\n }\n else {\n byteCount += 2;\n }\n }\n if (isUtf8) {\n charIndex++;\n }\n }\n return byteCount;\n }\n else {\n byteCount = charCount;\n return byteCount;\n }\n };\n /**\n * Encodes a set of characters from the specified string into the ArrayBuffer.\n * @param {string} s- The string containing the set of characters to encode\n * @param {number} charIndex-The index of the first character to encode.\n * @param {number} charCount- The number of characters to encode.\n * @returns {ArrayBuffer} - The ArrayBuffer that contains the resulting sequence of bytes.\n */\n Encoding.prototype.getBytes = function (s, charIndex, charCount) {\n validateNullOrUndefined(s, 'string');\n validateNullOrUndefined(charIndex, 'charIndex');\n validateNullOrUndefined(charCount, 'charCount');\n if (charIndex < 0 || charCount < 0) {\n throw new RangeError('Argument Out Of Range Exception: charIndex or charCount is less than zero');\n }\n if (s.length - charIndex < charCount) {\n throw new RangeError('Argument Out Of Range Exception: charIndex and charCount do not denote a valid range in string');\n }\n var bytes;\n if (s === '') {\n bytes = new ArrayBuffer(0);\n return bytes;\n }\n if (this.type === null || this.type === undefined) {\n this.type = 'Ansi';\n }\n var byteCount = this.getByteCountInternal(s, charIndex, charCount);\n switch (this.type) {\n case 'Utf8':\n bytes = this.getBytesOfUtf8Encoding(byteCount, s, charIndex, charCount);\n return bytes;\n case 'Unicode':\n bytes = this.getBytesOfUnicodeEncoding(byteCount, s, charIndex, charCount);\n return bytes;\n default:\n bytes = this.getBytesOfAnsiEncoding(byteCount, s, charIndex, charCount);\n return bytes;\n }\n };\n /**\n * Decodes a sequence of bytes from the specified ArrayBuffer into the string.\n * @param {ArrayBuffer} bytes- The ArrayBuffer containing the sequence of bytes to decode.\n * @param {number} index- The index of the first byte to decode.\n * @param {number} count- The number of bytes to decode.\n * @returns {string} - The string that contains the resulting set of characters.\n */\n Encoding.prototype.getString = function (bytes, index, count) {\n validateNullOrUndefined(bytes, 'bytes');\n validateNullOrUndefined(index, 'index');\n validateNullOrUndefined(count, 'count');\n if (index < 0 || count < 0) {\n throw new RangeError('Argument Out Of Range Exception: index or count is less than zero');\n }\n if (bytes.byteLength - index < count) {\n throw new RangeError('Argument Out Of Range Exception: index and count do not denote a valid range in bytes');\n }\n if (bytes.byteLength === 0 || count === 0) {\n return '';\n }\n if (this.type === null || this.type === undefined) {\n this.type = 'Ansi';\n }\n var out = '';\n var byteCal = new Uint8Array(bytes);\n switch (this.type) {\n case 'Utf8':\n var s = this.getStringOfUtf8Encoding(byteCal, index, count);\n return s;\n case 'Unicode':\n var byteUnicode = new Uint16Array(bytes);\n out = this.getStringofUnicodeEncoding(byteUnicode, index, count);\n return out;\n default:\n var j = index;\n for (var i = 0; i < count; i++) {\n var c = byteCal[j];\n out += String.fromCharCode(c); // 1 byte(ASCII) character \n j++;\n }\n return out;\n }\n };\n Encoding.prototype.getBytesOfAnsiEncoding = function (byteCount, s, charIndex, charCount) {\n var bytes = new ArrayBuffer(byteCount);\n var bufview = new Uint8Array(bytes);\n var k = 0;\n for (var i = 0; i < charCount; i++) {\n var charcode = s.charCodeAt(charIndex++);\n if (charcode < 0x800) {\n bufview[k] = charcode;\n }\n else {\n bufview[k] = 63; //replacement character '?'\n }\n k++;\n }\n return bytes;\n };\n Encoding.prototype.getBytesOfUtf8Encoding = function (byteCount, s, charIndex, charCount) {\n var bytes = new ArrayBuffer(byteCount);\n var uint = new Uint8Array(bytes);\n var index = charIndex;\n var j = 0;\n for (var i = 0; i < charCount; i++) {\n var charcode = s.charCodeAt(index);\n if (charcode <= 0x7F) {\n uint[j] = charcode;\n }\n else if (charcode < 0x800) {\n uint[j] = 0xc0 | (charcode >> 6);\n uint[++j] = 0x80 | (charcode & 0x3f);\n }\n else if ((charcode < 0xd800 || charcode >= 0xe000)) {\n uint[j] = 0xe0 | (charcode >> 12);\n uint[++j] = 0x80 | ((charcode >> 6) & 0x3f);\n uint[++j] = 0x80 | (charcode & 0x3f);\n }\n else {\n uint[j] = 0xef;\n uint[++j] = 0xbf;\n uint[++j] = 0xbd; // U+FFFE \"replacement character\"\n }\n ++j;\n ++index;\n }\n return bytes;\n };\n Encoding.prototype.getBytesOfUnicodeEncoding = function (byteCount, s, charIndex, charCount) {\n var bytes = new ArrayBuffer(byteCount);\n var uint16 = new Uint16Array(bytes);\n for (var i = 0; i < charCount; i++) {\n var charcode = s.charCodeAt(i);\n uint16[i] = charcode;\n }\n return bytes;\n };\n Encoding.prototype.getStringOfUtf8Encoding = function (byteCal, index, count) {\n var j = 0;\n var i = index;\n var s = '';\n for (j; j < count; j++) {\n var c = byteCal[i++];\n while (i > byteCal.length) {\n return s;\n }\n if (c > 127) {\n if (c > 191 && c < 224 && i < count) {\n c = (c & 31) << 6 | byteCal[i] & 63;\n }\n else if (c > 223 && c < 240 && i < byteCal.byteLength) {\n c = (c & 15) << 12 | (byteCal[i] & 63) << 6 | byteCal[++i] & 63;\n }\n else if (c > 239 && c < 248 && i < byteCal.byteLength) {\n c = (c & 7) << 18 | (byteCal[i] & 63) << 12 | (byteCal[++i] & 63) << 6 | byteCal[++i] & 63;\n }\n ++i;\n }\n s += String.fromCharCode(c); // 1 byte(ASCII) character \n }\n return s;\n };\n Encoding.prototype.getStringofUnicodeEncoding = function (byteUni, index, count) {\n if (count > byteUni.length) {\n throw new RangeError('ArgumentOutOfRange_Count');\n }\n var byte16 = new Uint16Array(count);\n var out = '';\n for (var i = 0; i < count && i < byteUni.length; i++) {\n byte16[i] = byteUni[index++];\n }\n out = String.fromCharCode.apply(null, byte16);\n return out;\n };\n /**\n * To clear the encoding instance\n * @return {void}\n */\n Encoding.prototype.destroy = function () {\n this.emitBOM = undefined;\n this.encodingType = undefined;\n };\n return Encoding;\n}());\nexport { Encoding };\n/**\n * To check the object is null or undefined and throw error if it is null or undefined\n * @param {Object} value - object to check is null or undefined\n * @return {boolean}\n * @throws {ArgumentException} - if the value is null or undefined\n * @private\n */\nexport function validateNullOrUndefined(value, message) {\n if (value === null || value === undefined) {\n throw new Error('ArgumentException: ' + message + ' cannot be null or undefined');\n }\n}\n","/**\n * @private\n * @hidden\n */\nexport function defaultToString(item) {\n // if (item === null) {\n // return 'COLLECTION_NULL';\n // } else if (typeof item === 'undefined') {\n // return 'COLLECTION_UNDEFINED';\n // } else if (Object.prototype.toString.call(item) === '[object String]') {\n if (Object.prototype.toString.call(item) === '[object String]') {\n return '$s' + item;\n }\n else {\n return '$o' + item.toString();\n }\n}\n","/** @private */\nexport function getTooltipThemeColor(theme) {\n var style;\n switch (theme) {\n case 'Highcontrast':\n style = {\n tooltipFill: '#ffffff',\n tooltipBoldLabel: '#000000',\n tooltipLightLabel: '#000000',\n tooltipHeaderLine: '#969696'\n };\n break;\n default:\n style = {\n tooltipFill: 'rgba(0, 8, 22, 0.75)',\n tooltipBoldLabel: '#ffffff',\n tooltipLightLabel: '#dbdbdb',\n tooltipHeaderLine: '#ffffff'\n };\n break;\n }\n return style;\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { createElement, remove, SvgRenderer, merge } from '@syncfusion/ej2-base';\n/**\n * Function to measure the height and width of the text.\n * @param {string} text\n * @param {FontModel} font\n * @param {string} id\n * @returns no\n * @private\n */\nexport function measureText(text, font) {\n var htmlObject = document.getElementById('chartmeasuretext');\n if (htmlObject === null) {\n htmlObject = createElement('text', { id: 'chartmeasuretext' });\n document.body.appendChild(htmlObject);\n }\n htmlObject.innerHTML = text;\n htmlObject.style.position = 'absolute';\n htmlObject.style.fontSize = font.size;\n htmlObject.style.fontWeight = font.fontWeight;\n htmlObject.style.fontStyle = font.fontStyle;\n htmlObject.style.fontFamily = font.fontFamily;\n htmlObject.style.visibility = 'hidden';\n htmlObject.style.top = '-100';\n htmlObject.style.left = '0';\n htmlObject.style.whiteSpace = 'nowrap';\n // For bootstrap line height issue\n htmlObject.style.lineHeight = 'normal';\n return new Size(htmlObject.clientWidth, htmlObject.clientHeight);\n}\n/** @private */\nexport function findDirection(rX, rY, rect, arrowLocation, arrowPadding, top, bottom, left, tipX, tipY, tipRadius) {\n var direction = '';\n var startX = rect.x;\n var startY = rect.y;\n var width = rect.x + rect.width;\n var height = rect.y + rect.height;\n tipRadius = tipRadius ? tipRadius : 0;\n if (top) {\n direction = direction.concat('M' + ' ' + (startX) + ' ' + (startY + rY) + ' Q ' + startX + ' '\n + startY + ' ' + (startX + rX) + ' ' + startY + ' ' +\n ' L' + ' ' + (width - rX) + ' ' + (startY) + ' Q ' + width + ' '\n + startY + ' ' + (width) + ' ' + (startY + rY));\n direction = direction.concat(' L' + ' ' + (width) + ' ' + (height - rY) + ' Q ' + width + ' '\n + (height) + ' ' + (width - rX) + ' ' + (height));\n if (arrowPadding !== 0) {\n direction = direction.concat(' L' + ' ' + (arrowLocation.x + arrowPadding / 2) + ' ' + (height));\n direction = direction.concat(' L' + ' ' + (tipX + tipRadius) + ' ' + (height + arrowPadding - tipRadius));\n direction += ' Q' + ' ' + (tipX) + ' ' + (height + arrowPadding) + ' ' + (tipX - tipRadius) +\n ' ' + (height + arrowPadding - tipRadius);\n }\n if ((arrowLocation.x - arrowPadding / 2) > startX) {\n direction = direction.concat(' L' + ' ' + (arrowLocation.x - arrowPadding / 2) + ' ' + height +\n ' L' + ' ' + (startX + rX) + ' ' + height + ' Q ' + startX + ' '\n + height + ' ' + (startX) + ' ' + (height - rY) + ' z');\n }\n else {\n if (arrowPadding === 0) {\n direction = direction.concat(' L' + ' ' + (startX + rX) + ' ' + height + ' Q ' + startX + ' '\n + height + ' ' + (startX) + ' ' + (height - rY) + ' z');\n }\n else {\n direction = direction.concat(' L' + ' ' + (startX) + ' ' + (height + rY) + ' z');\n }\n }\n }\n else if (bottom) {\n direction = direction.concat('M' + ' ' + (startX) + ' ' + (startY + rY) + ' Q ' + startX + ' '\n + (startY) + ' ' + (startX + rX) + ' ' + (startY) + ' L' + ' ' + (arrowLocation.x - arrowPadding / 2) + ' ' + (startY));\n direction = direction.concat(' L' + ' ' + (tipX - tipRadius) + ' ' + (arrowLocation.y + tipRadius));\n direction += ' Q' + ' ' + (tipX) + ' ' + (arrowLocation.y) + ' ' + (tipX + tipRadius) + ' ' + (arrowLocation.y + tipRadius);\n direction = direction.concat(' L' + ' ' + (arrowLocation.x + arrowPadding / 2) + ' ' + (startY) + ' L' + ' '\n + (width - rX) + ' ' + (startY) + ' Q ' + (width) + ' ' + (startY) + ' ' + (width) + ' ' + (startY + rY));\n direction = direction.concat(' L' + ' ' + (width) + ' ' + (height - rY) + ' Q ' + (width) + ' '\n + (height) + ' ' + (width - rX) + ' ' + (height) +\n ' L' + ' ' + (startX + rX) + ' ' + (height) + ' Q ' + (startX) + ' '\n + (height) + ' ' + (startX) + ' ' + (height - rY) + ' z');\n }\n else if (left) {\n direction = direction.concat('M' + ' ' + (startX) + ' ' + (startY + rY) + ' Q ' + startX + ' '\n + (startY) + ' ' + (startX + rX) + ' ' + (startY));\n direction = direction.concat(' L' + ' ' + (width - rX) + ' ' + (startY) + ' Q ' + (width) + ' '\n + (startY) + ' ' + (width) + ' ' + (startY + rY) + ' L' + ' ' + (width) + ' ' + (arrowLocation.y - arrowPadding / 2));\n direction = direction.concat(' L' + ' ' + (width + arrowPadding - tipRadius) + ' ' + (tipY - tipRadius));\n direction += ' Q ' + (width + arrowPadding) + ' ' + (tipY) + ' ' + (width + arrowPadding - tipRadius) + ' ' + (tipY + tipRadius);\n direction = direction.concat(' L' + ' ' + (width) + ' ' + (arrowLocation.y + arrowPadding / 2) +\n ' L' + ' ' + (width) + ' ' + (height - rY) + ' Q ' + width + ' ' + (height) + ' ' + (width - rX) + ' ' + (height));\n direction = direction.concat(' L' + ' ' + (startX + rX) + ' ' + (height) + ' Q ' + startX + ' '\n + (height) + ' ' + (startX) + ' ' + (height - rY) + ' z');\n }\n else {\n direction = direction.concat('M' + ' ' + (startX + rX) + ' ' + (startY) + ' Q ' + (startX) + ' '\n + (startY) + ' ' + (startX) + ' ' + (startY + rY) + ' L' + ' ' + (startX) + ' ' + (arrowLocation.y - arrowPadding / 2));\n direction = direction.concat(' L' + ' ' + (startX - arrowPadding + tipRadius) + ' ' + (tipY - tipRadius));\n direction += ' Q ' + (startX - arrowPadding) + ' ' + (tipY) + ' ' + (startX - arrowPadding + tipRadius) + ' ' + (tipY + tipRadius);\n direction = direction.concat(' L' + ' ' + (startX) + ' ' + (arrowLocation.y + arrowPadding / 2) +\n ' L' + ' ' + (startX) + ' ' + (height - rY) + ' Q ' + startX + ' '\n + (height) + ' ' + (startX + rX) + ' ' + (height));\n direction = direction.concat(' L' + ' ' + (width - rX) + ' ' + (height) + ' Q ' + width + ' '\n + (height) + ' ' + (width) + ' ' + (height - rY) +\n ' L' + ' ' + (width) + ' ' + (startY + rY) + ' Q ' + width + ' '\n + (startY) + ' ' + (width - rX) + ' ' + (startY) + ' z');\n }\n return direction;\n}\n/** @private */\nvar Size = /** @class */ (function () {\n function Size(width, height) {\n this.width = width;\n this.height = height;\n }\n return Size;\n}());\nexport { Size };\n/** @private */\nvar Rect = /** @class */ (function () {\n function Rect(x, y, width, height) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n return Rect;\n}());\nexport { Rect };\nvar Side = /** @class */ (function () {\n function Side(bottom, right) {\n this.isRight = right;\n this.isBottom = bottom;\n }\n return Side;\n}());\nexport { Side };\n/** @private */\nvar CustomizeOption = /** @class */ (function () {\n function CustomizeOption(id) {\n this.id = id;\n }\n return CustomizeOption;\n}());\nexport { CustomizeOption };\n/** @private */\nvar TextOption = /** @class */ (function (_super) {\n __extends(TextOption, _super);\n function TextOption(id, x, y, anchor, text, transform, baseLine) {\n if (transform === void 0) { transform = ''; }\n var _this = _super.call(this, id) || this;\n _this.transform = '';\n _this.baseLine = 'auto';\n _this.x = x;\n _this.y = y;\n _this.anchor = anchor;\n _this.text = text;\n _this.transform = transform;\n _this.baseLine = baseLine;\n return _this;\n }\n return TextOption;\n}(CustomizeOption));\nexport { TextOption };\n/** @private */\nexport function getElement(id) {\n return document.getElementById(id);\n}\n/** @private */\nexport function removeElement(id) {\n var element = getElement(id);\n if (element) {\n remove(element);\n }\n}\n/** @private */\nexport function drawSymbol(location, shape, size, url, options, label) {\n var functionName = 'Path';\n var renderer = new SvgRenderer('');\n var temp = calculateShapes(location, size, shape, options, url);\n var htmlObject = renderer['draw' + temp.functionName](temp.renderOption);\n htmlObject.setAttribute('aria-label', label);\n return htmlObject;\n}\n/** @private */\nexport function calculateShapes(location, size, shape, options, url) {\n var path;\n var functionName = 'Path';\n var width = size.width;\n var height = size.height;\n var locX = location.x;\n var locY = location.y;\n var x = location.x + (-width / 2);\n var y = location.y + (-height / 2);\n switch (shape) {\n case 'Circle':\n case 'Bubble':\n functionName = 'Ellipse';\n merge(options, { 'rx': width / 2, 'ry': height / 2, 'cx': locX, 'cy': locY });\n break;\n case 'Cross':\n path = 'M' + ' ' + x + ' ' + locY + ' ' + 'L' + ' ' + (locX + (width / 2)) + ' ' + locY + ' ' +\n 'M' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' + 'L' + ' ' + locX + ' ' +\n (locY + (-height / 2));\n merge(options, { 'd': path });\n break;\n case 'HorizontalLine':\n path = 'M' + ' ' + x + ' ' + locY + ' ' + 'L' + ' ' + (locX + (width / 2)) + ' ' + locY;\n merge(options, { 'd': path });\n break;\n case 'VerticalLine':\n path = 'M' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' + 'L' + ' ' + locX + ' ' + (locY + (-height / 2));\n merge(options, { 'd': path });\n break;\n case 'Diamond':\n path = 'M' + ' ' + x + ' ' + locY + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + locY + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + locY + ' z';\n merge(options, { 'd': path });\n break;\n case 'Rectangle':\n path = 'M' + ' ' + x + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (locY + (-height / 2)) + ' z';\n merge(options, { 'd': path });\n break;\n case 'Triangle':\n path = 'M' + ' ' + x + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (locY + (height / 2)) + ' z';\n merge(options, { 'd': path });\n break;\n case 'InvertedTriangle':\n path = 'M' + ' ' + (locX + (width / 2)) + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + (locX - (width / 2)) + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY - (height / 2)) + ' z';\n merge(options, { 'd': path });\n break;\n case 'Pentagon':\n var eq = 72;\n var xValue = void 0;\n var yValue = void 0;\n for (var i = 0; i <= 5; i++) {\n xValue = (width / 2) * Math.cos((Math.PI / 180) * (i * eq));\n yValue = (height / 2) * Math.sin((Math.PI / 180) * (i * eq));\n if (i === 0) {\n path = 'M' + ' ' + (locX + xValue) + ' ' + (locY + yValue) + ' ';\n }\n else {\n path = path.concat('L' + ' ' + (locX + xValue) + ' ' + (locY + yValue) + ' ');\n }\n }\n path = path.concat('Z');\n merge(options, { 'd': path });\n break;\n case 'Image':\n functionName = 'Image';\n merge(options, { 'href': url, 'height': height, 'width': width, x: x, y: y });\n break;\n }\n return { renderOption: options, functionName: functionName };\n}\n/** @private */\nvar PathOption = /** @class */ (function (_super) {\n __extends(PathOption, _super);\n function PathOption(id, fill, width, color, opacity, dashArray, d) {\n var _this = _super.call(this, id) || this;\n _this.opacity = opacity;\n _this.fill = fill;\n _this.stroke = color;\n _this['stroke-width'] = width;\n _this['stroke-dasharray'] = dashArray;\n _this.d = d;\n return _this;\n }\n return PathOption;\n}(CustomizeOption));\nexport { PathOption };\n/** @private */\nexport function textElement(options, font, color, parent) {\n var renderOptions = {};\n var htmlObject;\n var tspanElement;\n var renderer = new SvgRenderer('');\n var text;\n var height;\n renderOptions = {\n 'id': options.id,\n 'x': options.x,\n 'y': options.y,\n 'fill': color,\n 'font-size': font.size,\n 'font-style': font.fontStyle,\n 'font-family': font.fontFamily,\n 'font-weight': font.fontWeight,\n 'text-anchor': options.anchor,\n 'transform': options.transform,\n 'opacity': font.opacity,\n 'dominant-baseline': options.baseLine\n };\n text = typeof options.text === 'string' ? options.text : options.text[0];\n htmlObject = renderer.createText(renderOptions, text);\n parent.appendChild(htmlObject);\n return htmlObject;\n}\nvar TooltipLocation = /** @class */ (function () {\n function TooltipLocation(x, y) {\n this.x = x;\n this.y = y;\n }\n return TooltipLocation;\n}());\nexport { TooltipLocation };\n","/**\n * Specifies Chart Themes\n */\nexport var Theme;\n(function (Theme) {\n /** @private */\n Theme.axisLabelFont = {\n size: '12px',\n fontWeight: 'Normal',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Segoe UI'\n };\n /** @private */\n Theme.axisTitleFont = {\n size: '14px',\n fontWeight: 'Normal',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Segoe UI'\n };\n /** @private */\n Theme.chartTitleFont = {\n size: '15px',\n fontWeight: '500',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Segoe UI'\n };\n /** @private */\n Theme.crosshairLabelFont = {\n size: '13px',\n fontWeight: 'Normal',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Segoe UI'\n };\n /** @private */\n Theme.tooltipLabelFont = {\n size: '13px',\n fontWeight: 'Normal',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Segoe UI'\n };\n /** @private */\n Theme.legendLabelFont = {\n size: '13px',\n fontWeight: 'Normal',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Segoe UI'\n };\n /** @private */\n Theme.stripLineLabelFont = {\n size: '12px',\n fontWeight: 'Regular',\n color: '#353535',\n fontStyle: 'Normal',\n fontFamily: 'Segoe UI'\n };\n})(Theme || (Theme = {}));\n/** @private */\nexport function getSeriesColor(theme) {\n var palette;\n switch (theme) {\n case 'Fabric':\n palette = ['#4472c4', '#ed7d31', '#ffc000', '#70ad47', '#5b9bd5',\n '#c1c1c1', '#6f6fe2', '#e269ae', '#9e480e', '#997300'];\n break;\n case 'Bootstrap':\n palette = ['#a16ee5', '#f7ce69', '#55a5c2', '#7ddf1e', '#ff6ea6',\n '#7953ac', '#b99b4f', '#407c92', '#5ea716', '#b91c52'];\n break;\n case 'Highcontrast':\n palette = ['#79ECE4', '#E98272', '#DFE6B6', '#C6E773', '#BA98FF',\n '#FA83C3', '#00C27A', '#43ACEF', '#D681EF', '#D8BC6E'];\n break;\n default:\n palette = ['#00bdae', '#404041', '#357cd2', '#e56590', '#f8b883',\n '#70ad47', '#dd8abd', '#7f84e8', '#7bb4eb', '#ea7a57'];\n break;\n }\n return palette;\n}\n/** @private */\nexport function getThemeColor(theme) {\n var style;\n switch (theme) {\n case 'Highcontrast':\n style = {\n axisLabel: '#ffffff',\n axisTitle: '#ffffff',\n axisLine: '#ffffff',\n majorGridLine: '#BFBFBF',\n minorGridLine: '#969696',\n majorTickLine: '#BFBFBF',\n minorTickLine: '#969696',\n chartTitle: '#ffffff',\n legendLabel: '#ffffff',\n background: '#000000',\n areaBorder: '#ffffff',\n errorBar: '#ffffff',\n crosshairLine: '#ffffff',\n crosshairFill: '#ffffff',\n crosshairLabel: '#000000',\n tooltipFill: '#ffffff',\n tooltipBoldLabel: '#000000',\n tooltipLightLabel: '#000000',\n tooltipHeaderLine: '#969696',\n markerShadow: '#BFBFBF',\n selectionRectFill: 'rgba(255, 217, 57, 0.3)',\n selectionRectStroke: '#ffffff',\n selectionCircleStroke: '#FFD939'\n };\n break;\n default:\n style = {\n axisLabel: '#686868',\n axisTitle: '#424242',\n axisLine: '#b5b5b5',\n majorGridLine: '#dbdbdb',\n minorGridLine: '#eaeaea',\n majorTickLine: '#b5b5b5',\n minorTickLine: '#d6d6d6',\n chartTitle: '#424242',\n legendLabel: '#353535',\n background: '#FFFFFF',\n areaBorder: 'Gray',\n errorBar: '#000000',\n crosshairLine: '#4f4f4f',\n crosshairFill: '#4f4f4f',\n crosshairLabel: '#e5e5e5',\n tooltipFill: 'rgba(0, 8, 22, 0.75)',\n tooltipBoldLabel: '#ffffff',\n tooltipLightLabel: '#dbdbdb',\n tooltipHeaderLine: '#ffffff',\n markerShadow: null,\n selectionRectFill: 'rgba(41, 171, 226, 0.1)',\n selectionRectStroke: '#29abe2',\n selectionCircleStroke: '#29abe2'\n };\n break;\n }\n return style;\n}\n/** @private */\nexport function getScrollbarThemeColor(theme) {\n var scrollStyle;\n switch (theme) {\n case 'Highcontrast':\n scrollStyle = {\n backRect: '#333',\n thumb: '#bfbfbf',\n circle: '#fff',\n circleHover: '#685708',\n arrow: '#333',\n grip: '#333',\n arrowHover: '#fff',\n backRectBorder: '#969696',\n };\n break;\n case 'Bootstrap':\n scrollStyle = {\n backRect: '#f5f5f5',\n thumb: '#e6e6e6',\n circle: '#fff',\n circleHover: '#eee',\n arrow: '#8c8c8c',\n grip: '#8c8c8c'\n };\n break;\n case 'Fabric':\n scrollStyle = {\n backRect: '#f8f8f8',\n thumb: '#eaeaea',\n circle: '#fff',\n circleHover: '#eaeaea',\n arrow: '#a6a6a6',\n grip: '#a6a6a6'\n };\n break;\n default:\n scrollStyle = {\n backRect: '#f5f5f5',\n thumb: '#e0e0e0',\n circle: '#fff',\n circleHover: '#eee',\n arrow: '#9e9e9e',\n grip: '#9e9e9e'\n };\n break;\n }\n return scrollStyle;\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { SvgRenderer, Animation, compile as templateComplier, Browser } from '@syncfusion/ej2-base';\nimport { merge, extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { createElement, remove } from '@syncfusion/ej2-base';\nimport { Index } from '../../common/model/base';\nimport { VisibleLabels } from '../../chart/axis/axis';\nimport { axisLabelRender } from '../model/constants';\n/**\n * Methods for calculating the text size.\n */\n/**\n * Function to measure the height and width of the text.\n * @param {string} text\n * @param {FontModel} font\n * @param {string} id\n * @returns no\n * @private\n */\nexport function measureText(text, font) {\n var htmlObject = document.getElementById('chartmeasuretext');\n if (htmlObject === null) {\n htmlObject = createElement('text', { id: 'chartmeasuretext' });\n document.body.appendChild(htmlObject);\n }\n htmlObject.innerHTML = text;\n htmlObject.style.position = 'absolute';\n htmlObject.style.fontSize = font.size;\n htmlObject.style.fontWeight = font.fontWeight;\n htmlObject.style.fontStyle = font.fontStyle;\n htmlObject.style.fontFamily = font.fontFamily;\n htmlObject.style.visibility = 'hidden';\n htmlObject.style.top = '-100';\n htmlObject.style.left = '0';\n htmlObject.style.whiteSpace = 'nowrap';\n // For bootstrap line height issue\n htmlObject.style.lineHeight = 'normal';\n return new Size(htmlObject.clientWidth, htmlObject.clientHeight);\n}\n/**\n * Function to sort the dataSource, by default it sort the data in ascending order.\n * @param {Object} data\n * @param {string} fields\n * @param {boolean} isDescending\n * @returns Object\n */\nexport function sort(data, fields, isDescending) {\n var sortData = extend([], data, null);\n sortData.sort(function (a, b) {\n var first = 0;\n var second = 0;\n for (var i = 0; i < fields.length; i++) {\n first += a[fields[i]];\n second += b[fields[i]];\n }\n if ((!isDescending && first < second) || (isDescending && first > second)) {\n return -1;\n }\n else if (first === second) {\n return 0;\n }\n return 1;\n });\n return sortData;\n}\n/** @private */\nexport function rotateTextSize(font, text, angle, chart) {\n var renderer = new SvgRenderer(chart.element.id);\n var box;\n var options;\n var htmlObject;\n options = {\n 'font-size': font.size,\n 'font-style': font.fontStyle,\n 'font-family': font.fontFamily,\n 'font-weight': font.fontWeight,\n 'transform': 'rotate(' + angle + ', 0, 0)',\n 'text-anchor': 'middle'\n };\n htmlObject = renderer.createText(options, text);\n if (!chart.delayRedraw) {\n chart.element.appendChild(chart.svgObject);\n }\n chart.svgObject.appendChild(htmlObject);\n box = htmlObject.getBoundingClientRect();\n remove(htmlObject);\n if (!chart.delayRedraw) {\n remove(chart.svgObject);\n }\n return new Size((box.right - box.left), (box.bottom - box.top));\n}\n/** @private */\nexport function removeElement(id) {\n var element = getElement(id);\n if (element) {\n remove(element);\n }\n}\n/** @private */\nexport function logBase(value, base) {\n return Math.log(value) / Math.log(base);\n}\n/** @private */\nexport function showTooltip(text, x, y, areaWidth, id, element, isTouch) {\n //let id1: string = 'EJ2_legend_tooltip';\n var tooltip = document.getElementById(id);\n var width = measureText(text, {\n fontFamily: 'Segoe UI', size: '12px',\n fontStyle: 'Normal', fontWeight: 'Regular'\n }).width + 5;\n x = (x + width > areaWidth) ? x - width : x;\n if (!tooltip) {\n tooltip = createElement('div', {\n innerHTML: text,\n id: id,\n styles: 'top:' + (y + 15).toString() + 'px;left:' + (x + 15).toString() +\n 'px;background-color: rgb(255, 255, 255) !important; color:black !important; ' +\n 'position:absolute;border:1px solid rgb(112, 112, 112); padding-left : 3px; padding-right : 2px;' +\n 'padding-bottom : 2px; padding-top : 2px; font-size:12px; font-family: \"Segoe UI\"'\n });\n element.appendChild(tooltip);\n }\n else {\n tooltip.innerHTML = text;\n tooltip.style.top = (y + 15).toString() + 'px';\n tooltip.style.left = (x + 15).toString() + 'px';\n }\n if (isTouch) {\n setTimeout(function () { removeElement(id); }, 1500);\n }\n}\n/** @private */\nexport function inside(value, range) {\n return (value < range.max) && (value > range.min);\n}\n/** @private */\nexport function withIn(value, range) {\n return (value <= range.max) && (value >= range.min);\n}\n/** @private */\nexport function logWithIn(value, axis) {\n if (axis.valueType === 'Logarithmic') {\n value = logBase(value, axis.logBase);\n }\n else {\n value = value;\n }\n return value;\n}\n/** @private */\nexport function withInRange(previousPoint, currentPoint, nextPoint, series) {\n var mX2 = logWithIn(currentPoint.xValue, series.xAxis);\n var mX1 = previousPoint ? logWithIn(previousPoint.xValue, series.xAxis) : mX2;\n var mX3 = nextPoint ? logWithIn(nextPoint.xValue, series.xAxis) : mX2;\n var xStart = Math.floor(series.xAxis.visibleRange.min);\n var xEnd = Math.ceil(series.xAxis.visibleRange.max);\n return ((mX1 >= xStart && mX1 <= xEnd) || (mX2 >= xStart && mX2 <= xEnd) ||\n (mX3 >= xStart && mX3 <= xEnd) || (xStart >= mX1 && xStart <= mX3));\n}\n/** @private */\nexport function sum(values) {\n var sum = 0;\n for (var _i = 0, values_1 = values; _i < values_1.length; _i++) {\n var value = values_1[_i];\n sum += value;\n }\n return sum;\n}\n/** @private */\nexport function subArraySum(values, first, last, index, series) {\n var sum = 0;\n if (index !== null) {\n for (var i = (first + 1); i < last; i++) {\n if (index.indexOf(i) === -1) {\n sum += values[i][series.yName];\n }\n }\n }\n else {\n for (var i = (first + 1); i < last; i++) {\n if (!isNullOrUndefined(values[i][series.yName])) {\n sum += values[i][series.yName];\n }\n }\n }\n return sum;\n}\n/** @private */\nexport function subtractThickness(rect, thickness) {\n rect.x += thickness.left;\n rect.y += thickness.top;\n rect.width -= thickness.left + thickness.right;\n rect.height -= thickness.top + thickness.bottom;\n return rect;\n}\n/** @private */\nexport function subtractRect(rect, thickness) {\n rect.x += thickness.x;\n rect.y += thickness.y;\n rect.width -= thickness.x + thickness.width;\n rect.height -= thickness.y + thickness.height;\n return rect;\n}\n/** @private */\nexport function degreeToLocation(degree, radius, center) {\n var radian = (degree * Math.PI) / 180;\n return new ChartLocation(Math.cos(radian) * radius + center.x, Math.sin(radian) * radius + center.y);\n}\nfunction getAccumulationLegend(locX, locY, r, height, width, mode) {\n var cartesianlarge = degreeToLocation(270, r, new ChartLocation(locX, locY));\n var cartesiansmall = degreeToLocation(270, r, new ChartLocation(locX + (width / 10), locY));\n return 'M' + ' ' + locX + ' ' + locY + ' ' + 'L' + ' ' + (locX + r) + ' ' + (locY) + ' ' + 'A' + ' ' + (r) + ' ' + (r) +\n ' ' + 0 + ' ' + 1 + ' ' + 1 + ' ' + cartesianlarge.x + ' ' + cartesianlarge.y + ' ' + 'Z' + ' ' + 'M' + ' ' + (locX +\n (width / 10)) + ' ' + (locY - (height / 10)) + ' ' + 'L' + (locX + (r)) + ' ' + (locY - height / 10) + ' ' + 'A' + ' '\n + (r) + ' ' + (r) + ' ' + 0 + ' ' + 0 + ' ' + 0 + ' ' + cartesiansmall.x + ' ' + cartesiansmall.y + ' ' + 'Z';\n}\n/** @private */\nexport function getAngle(center, point) {\n var angle = Math.atan2((point.y - center.y), (point.x - center.x));\n angle = angle < 0 ? (6.283 + angle) : angle;\n return angle * (180 / Math.PI);\n}\n/** @private */\nexport function subArray(values, index) {\n var subArray = [];\n for (var i = 0; i <= index - 1; i++) {\n subArray.push(values[i]);\n }\n return subArray;\n}\n/** @private */\nexport function valueToCoefficient(value, axis) {\n var range = axis.visibleRange;\n var result = (value - range.min) / (range.delta);\n return axis.isInversed ? (1 - result) : result;\n}\n/** @private */\nexport function TransformToVisible(x, y, xAxis, yAxis, isInverted, series) {\n x = (xAxis.valueType === 'Logarithmic' ? logBase(x > 1 ? x : 1, xAxis.logBase) : x);\n y = (yAxis.valueType === 'Logarithmic' ?\n logBase(y > 1 ? y : 1, yAxis.logBase) : y);\n x += xAxis.valueType === 'Category' && xAxis.labelPlacement === 'BetweenTicks' && series.type !== 'Radar' ? 0.5 : 0;\n var radius = series.chart.radius * valueToCoefficient(y, yAxis);\n var point = CoefficientToVector(valueToPolarCoefficient(x, xAxis), series.chart.primaryXAxis.startAngle);\n return {\n x: (series.clipRect.width / 2 + series.clipRect.x) + radius * point.x,\n y: (series.clipRect.height / 2 + series.clipRect.y) + radius * point.y\n };\n}\n/**\n * method to find series, point index by element id\n * @private\n */\nexport function indexFinder(id, isPoint) {\n if (isPoint === void 0) { isPoint = false; }\n var ids = ['NaN', 'NaN'];\n if (id.indexOf('_Point_') > -1) {\n ids = id.split('_Series_')[1].split('_Point_');\n }\n else if (id.indexOf('_shape_') > -1 && (!isPoint || (isPoint && id.indexOf('_legend_') === -1))) {\n ids = id.split('_shape_');\n ids[0] = '0';\n }\n else if (id.indexOf('_text_') > -1 && (!isPoint || (isPoint && id.indexOf('_legend_') === -1))) {\n ids = id.split('_text_');\n ids[0] = '0';\n }\n return new Index(parseInt(ids[0], 10), parseInt(ids[1], 10));\n}\n/** @private */\nexport function CoefficientToVector(coefficient, startAngle) {\n startAngle = startAngle < 0 ? startAngle + 360 : startAngle;\n var angle = Math.PI * (1.5 - 2 * coefficient);\n angle = angle + (startAngle * Math.PI) / 180;\n return { x: Math.cos(angle), y: Math.sin(angle) };\n}\n/** @private */\nexport function valueToPolarCoefficient(value, axis) {\n var range = axis.visibleRange;\n var delta;\n var length;\n if (axis.valueType !== 'Category') {\n delta = (range.max - (axis.valueType === 'DateTime' ? axis.dateTimeInterval : range.interval)) - range.min;\n length = axis.visibleLabels.length - 1;\n delta = delta === 0 ? 1 : delta;\n }\n else {\n delta = range.delta;\n length = axis.visibleLabels.length;\n }\n return axis.isInversed ? ((value - range.min) / delta) * (1 - 1 / (length)) :\n 1 - ((value - range.min) / delta) * (1 - 1 / (length));\n}\n/** @private */\nvar Mean = /** @class */ (function () {\n function Mean(verticalStandardMean, verticalSquareRoot, horizontalStandardMean, horizontalSquareRoot, verticalMean, horizontalMean) {\n this.verticalStandardMean = verticalStandardMean;\n this.horizontalStandardMean = horizontalStandardMean;\n this.verticalSquareRoot = verticalSquareRoot;\n this.horizontalSquareRoot = horizontalSquareRoot;\n this.verticalMean = verticalMean;\n this.horizontalMean = horizontalMean;\n }\n return Mean;\n}());\nexport { Mean };\n/** @private */\nvar PolarArc = /** @class */ (function () {\n function PolarArc(startAngle, endAngle, innerRadius, radius, currentXPosition) {\n this.startAngle = startAngle;\n this.endAngle = endAngle;\n this.innerRadius = innerRadius;\n this.radius = radius;\n this.currentXPosition = currentXPosition;\n }\n return PolarArc;\n}());\nexport { PolarArc };\n/** @private */\nexport function createTooltip(id, text, top, left, fontSize) {\n var tooltip = getElement(id);\n var style = 'top:' + top.toString() + 'px;' +\n 'left:' + left.toString() + 'px;' +\n 'color:black !important; ' +\n 'background:#FFFFFF !important; ' +\n 'position:absolute;border:1px solid #707070;font-size:' + fontSize + ';border-radius:2px;';\n if (!tooltip) {\n tooltip = createElement('div', {\n id: id, innerHTML: ' ' + text + ' ', styles: style\n });\n document.body.appendChild(tooltip);\n }\n else {\n tooltip.setAttribute('innerHTML', ' ' + text + ' ');\n tooltip.setAttribute('styles', style);\n }\n}\n/** @private */\nexport function createZoomingLabels(chart, axis, parent, index, isVertical, rect) {\n var margin = 5;\n var opposedPosition = axis.opposedPosition;\n var anchor = isVertical ? 'start' : 'auto';\n var size;\n var chartRect = chart.availableSize.width;\n var x;\n var y;\n var rx = 3;\n var arrowLocation;\n var direction;\n var scrollBarHeight = axis.zoomingScrollBar && axis.zoomingScrollBar.svgObject ? axis.scrollBarHeight : 0;\n for (var i = 0; i < 2; i++) {\n size = measureText(i ? axis.endLabel : axis.startLabel, axis.labelStyle);\n if (isVertical) {\n arrowLocation = i ? new ChartLocation(rect.x - scrollBarHeight, rect.y + rx) :\n new ChartLocation(axis.rect.x - scrollBarHeight, (rect.y + rect.height - rx));\n x = (rect.x + (opposedPosition ? (rect.width + margin + scrollBarHeight) : -(size.width + margin + margin + scrollBarHeight)));\n y = (rect.y + (i ? 0 : rect.height - size.height - margin));\n x += (x < 0 || ((chartRect) < (x + size.width + margin))) ? (opposedPosition ? -(size.width / 2) : size.width / 2) : 0;\n direction = findDirection(rx, rx, new Rect(x, y, size.width + margin, size.height + margin), arrowLocation, margin, false, false, !opposedPosition, arrowLocation.x, arrowLocation.y + (i ? -rx : rx));\n }\n else {\n arrowLocation = i ? new ChartLocation((rect.x + rect.width - rx), (rect.y + rect.height + scrollBarHeight)) :\n new ChartLocation(rect.x + rx, (rect.y + rect.height + scrollBarHeight));\n x = (rect.x + (i ? (rect.width - size.width - margin) : 0));\n y = (opposedPosition ? (rect.y - size.height - 10 - scrollBarHeight) : (rect.y + rect.height + margin + scrollBarHeight));\n direction = findDirection(rx, rx, new Rect(x, y, size.width + margin, size.height + margin), arrowLocation, margin, opposedPosition, !opposedPosition, false, arrowLocation.x + (i ? rx : -rx), arrowLocation.y);\n }\n x = x + (margin / 2);\n y = y + (3 * (size.height / 4)) + (margin / 2);\n parent.appendChild(chart.renderer.drawPath(new PathOption(chart.element.id + '_Zoom_' + index + '_AxisLabel_Shape_' + i, chart.themeStyle.crosshairFill, 2, chart.themeStyle.crosshairFill, 1, null, direction)));\n textElement(new TextOption(chart.element.id + '_Zoom_' + index + '_AxisLabel_' + i, x, y, anchor, i ? axis.endLabel : axis.startLabel), { color: chart.themeStyle.crosshairLabel, fontFamily: 'Segoe UI', fontWeight: 'Regular', size: '11px' }, chart.themeStyle.crosshairLabel, parent);\n }\n return parent;\n}\n//Within bounds\n/** @private */\nexport function withInBounds(x, y, bounds, width, height) {\n if (width === void 0) { width = 0; }\n if (height === void 0) { height = 0; }\n return (x >= bounds.x - width && x <= bounds.x + bounds.width + width && y >= bounds.y - height\n && y <= bounds.y + bounds.height + height);\n}\n/** @private */\nexport function getValueXByPoint(value, size, axis) {\n var actualValue = !axis.isInversed ? value / size : (1 - (value / size));\n return actualValue * (axis.visibleRange.delta) + axis.visibleRange.min;\n}\n/** @private */\nexport function getValueYByPoint(value, size, axis) {\n var actualValue = axis.isInversed ? value / size : (1 - (value / size));\n return actualValue * (axis.visibleRange.delta) + axis.visibleRange.min;\n}\n/** @private */\nexport function findClipRect(series) {\n var rect = series.clipRect;\n if (series.chart.requireInvertedAxis) {\n rect.x = series.yAxis.rect.x;\n rect.y = series.xAxis.rect.y;\n rect.width = series.yAxis.rect.width;\n rect.height = series.xAxis.rect.height;\n }\n else {\n rect.x = series.xAxis.rect.x;\n rect.y = series.yAxis.rect.y;\n rect.width = series.xAxis.rect.width;\n rect.height = series.yAxis.rect.height;\n }\n}\n/** @private */\nexport function firstToLowerCase(str) {\n return str.substr(0, 1).toLowerCase() + str.substr(1);\n}\n/** @private */\nexport function getMinPointsDelta(axis, seriesCollection) {\n var minDelta = Number.MAX_VALUE;\n var xValues;\n var minVal;\n seriesCollection.forEach(function (series, index) {\n xValues = [];\n if (series.visible &&\n (axis.name === series.xAxisName || (axis.name === 'primaryXAxis' && series.xAxisName === null)\n || (axis.name === series.chart.primaryXAxis.name && !series.xAxisName))) {\n xValues = series.points.map(function (point, index) {\n return point.xValue;\n });\n xValues.sort(function (first, second) { return first - second; });\n if (xValues.length === 1) {\n minVal = xValues[0] - ((!isNullOrUndefined(series.xMin) && series.xAxis.valueType !== 'DateTime') ?\n series.xMin : axis.visibleRange.min);\n if (minVal !== 0) {\n minDelta = Math.min(minDelta, minVal);\n }\n }\n else {\n xValues.forEach(function (value, index, xValues) {\n if (index > 0 && value) {\n minVal = value - xValues[index - 1];\n if (minVal !== 0) {\n minDelta = Math.min(minDelta, minVal);\n }\n }\n });\n }\n }\n });\n if (minDelta === Number.MAX_VALUE) {\n minDelta = 1;\n }\n return minDelta;\n}\n/** @private */\nexport function getAnimationFunction(effect) {\n var functionName;\n switch (effect) {\n case 'Linear':\n functionName = linear;\n break;\n }\n return functionName;\n}\n/**\n * Animation Effect Calculation Started Here\n * @param currentTime\n * @param startValue\n * @param endValue\n * @param duration\n * @private\n */\nexport function linear(currentTime, startValue, endValue, duration) {\n return -endValue * Math.cos(currentTime / duration * (Math.PI / 2)) + endValue + startValue;\n}\n/**\n * Animation Effect Calculation End\n * @private\n */\nexport function markerAnimate(element, delay, duration, series, pointIndex, point, isLabel) {\n var centerX = point.x;\n var centerY = point.y;\n var height = 0;\n element.style.visibility = 'hidden';\n new Animation({}).animate(element, {\n duration: duration,\n delay: delay,\n progress: function (args) {\n if (args.timeStamp > args.delay) {\n args.element.style.visibility = 'visible';\n height = ((args.timeStamp - args.delay) / args.duration);\n element.setAttribute('transform', 'translate(' + centerX\n + ' ' + centerY + ') scale(' + height + ') translate(' + (-centerX) + ' ' + (-centerY) + ')');\n }\n },\n end: function (model) {\n element.style.visibility = '';\n element.removeAttribute('transform');\n if ((series.type === 'Scatter' || series.type === 'Bubble') && !isLabel && (pointIndex === series.points.length - 1)) {\n series.chart.trigger('animationComplete', { series: series });\n }\n }\n });\n}\n/**\n * Triggers the event.\n * @return {void}\n * @private\n */\nexport function triggerLabelRender(chart, tempInterval, text, labelStyle, axis) {\n var argsData;\n argsData = {\n cancel: false, name: axisLabelRender, axis: axis,\n text: text, value: tempInterval, labelStyle: labelStyle\n };\n chart.trigger(axisLabelRender, argsData);\n if (!argsData.cancel) {\n axis.visibleLabels.push(new VisibleLabels(argsData.text, argsData.value, argsData.labelStyle));\n }\n}\n/**\n * The function used to find whether the range is set.\n * @return {boolean}\n * @private\n */\nexport function setRange(axis) {\n return (axis.minimum != null && axis.maximum != null);\n}\n/**\n * Calculate desired interval for the axis.\n * @return {void}\n * @private\n */\nexport function getActualDesiredIntervalsCount(availableSize, axis) {\n var size = axis.orientation === 'Horizontal' ? availableSize.width : availableSize.height;\n if (isNullOrUndefined(axis.desiredIntervals)) {\n var desiredIntervalsCount = (axis.orientation === 'Horizontal' ? 0.533 : 1) * axis.maximumLabels;\n desiredIntervalsCount = Math.max((size * (desiredIntervalsCount / 100)), 1);\n return desiredIntervalsCount;\n }\n else {\n return axis.desiredIntervals;\n }\n}\n/**\n * Animation for template\n * @private\n */\nexport function templateAnimate(element, delay, duration, name, isRemove) {\n new Animation({}).animate(element, {\n duration: duration,\n delay: delay,\n name: name,\n progress: function (args) {\n args.element.style.visibility = 'visible';\n },\n end: function (args) {\n if (isRemove) {\n remove(args.element);\n }\n else {\n args.element.style.visibility = 'visible';\n }\n },\n });\n}\n/** @private */\nexport function drawSymbol(location, shape, size, url, options, label) {\n var functionName = 'Path';\n var renderer = new SvgRenderer('');\n var temp = calculateShapes(location, size, shape, options, url);\n var htmlObject = renderer['draw' + temp.functionName](temp.renderOption);\n htmlObject.setAttribute('aria-label', label);\n return htmlObject;\n}\n/** @private */\nexport function calculateShapes(location, size, shape, options, url) {\n var path;\n var functionName = 'Path';\n var width = size.width;\n var height = size.height;\n var locX = location.x;\n var locY = location.y;\n var x = location.x + (-width / 2);\n var y = location.y + (-height / 2);\n switch (shape) {\n case 'Circle':\n case 'Bubble':\n functionName = 'Ellipse';\n merge(options, { 'rx': width / 2, 'ry': height / 2, 'cx': locX, 'cy': locY });\n break;\n case 'Cross':\n path = 'M' + ' ' + x + ' ' + locY + ' ' + 'L' + ' ' + (locX + (width / 2)) + ' ' + locY + ' ' +\n 'M' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' + 'L' + ' ' + locX + ' ' +\n (locY + (-height / 2));\n merge(options, { 'd': path });\n break;\n case 'HorizontalLine':\n path = 'M' + ' ' + x + ' ' + locY + ' ' + 'L' + ' ' + (locX + (width / 2)) + ' ' + locY;\n merge(options, { 'd': path });\n break;\n case 'VerticalLine':\n path = 'M' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' + 'L' + ' ' + locX + ' ' + (locY + (-height / 2));\n merge(options, { 'd': path });\n break;\n case 'Diamond':\n path = 'M' + ' ' + x + ' ' + locY + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + locY + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + locY + ' z';\n merge(options, { 'd': path });\n break;\n case 'Rectangle':\n case 'Hilo':\n case 'HiloOpenClose':\n case 'Candle':\n case 'Waterfall':\n case 'BoxAndWhisker':\n case 'StepArea':\n path = 'M' + ' ' + x + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (locY + (-height / 2)) + ' z';\n merge(options, { 'd': path });\n break;\n case 'Pyramid':\n case 'Triangle':\n path = 'M' + ' ' + x + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (locY + (height / 2)) + ' z';\n merge(options, { 'd': path });\n break;\n case 'Funnel':\n case 'InvertedTriangle':\n path = 'M' + ' ' + (locX + (width / 2)) + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + (locX - (width / 2)) + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY - (height / 2)) + ' z';\n merge(options, { 'd': path });\n break;\n case 'Pentagon':\n var eq = 72;\n var xValue = void 0;\n var yValue = void 0;\n for (var i = 0; i <= 5; i++) {\n xValue = (width / 2) * Math.cos((Math.PI / 180) * (i * eq));\n yValue = (height / 2) * Math.sin((Math.PI / 180) * (i * eq));\n if (i === 0) {\n path = 'M' + ' ' + (locX + xValue) + ' ' + (locY + yValue) + ' ';\n }\n else {\n path = path.concat('L' + ' ' + (locX + xValue) + ' ' + (locY + yValue) + ' ');\n }\n }\n path = path.concat('Z');\n merge(options, { 'd': path });\n break;\n case 'Image':\n functionName = 'Image';\n merge(options, { 'href': url, 'height': height, 'width': width, x: x, y: y });\n break;\n }\n options = calculateLegendShapes(location, new Size(width, height), shape, options).renderOption;\n return { renderOption: options, functionName: functionName };\n}\n/** @private */\nexport function getRectLocation(startLocation, endLocation, outerRect) {\n var x;\n var y;\n x = (endLocation.x < outerRect.x) ? outerRect.x :\n (endLocation.x > (outerRect.x + outerRect.width)) ? outerRect.x + outerRect.width : endLocation.x;\n y = (endLocation.y < outerRect.y) ? outerRect.y :\n (endLocation.y > (outerRect.y + outerRect.height)) ? outerRect.y + outerRect.height : endLocation.y;\n return new Rect((x > startLocation.x ? startLocation.x : x), (y > startLocation.y ? startLocation.y : y), Math.abs(x - startLocation.x), Math.abs(y - startLocation.y));\n}\n/** @private */\nexport function minMax(value, min, max) {\n return value > max ? max : (value < min ? min : value);\n}\n/** @private */\nexport function getElement(id) {\n return document.getElementById(id);\n}\n/** @private */\nexport function getTemplateFunction(template) {\n var templateFn = null;\n var e;\n try {\n if (document.querySelectorAll(template).length) {\n templateFn = templateComplier(document.querySelector(template).innerHTML.trim());\n }\n }\n catch (e) {\n templateFn = templateComplier(template);\n }\n return templateFn;\n}\n/** @private */\nexport function createTemplate(childElement, pointIndex, content, chart, point, series) {\n var templateFn;\n var templateElement;\n templateFn = getTemplateFunction(content);\n try {\n if (templateFn && templateFn({ chart: chart, series: series, point: point }).length) {\n templateElement = templateFn({ chart: chart, series: series, point: point });\n var len = templateElement.length;\n for (var i = 0; i < len; i++) {\n childElement.appendChild(templateElement[0]);\n }\n }\n }\n catch (e) {\n return childElement;\n }\n return childElement;\n}\n/** @private */\nexport function getFontStyle(font) {\n var style = '';\n style = 'font-size:' + font.size +\n '; font-style:' + font.fontStyle + '; font-weight:' + font.fontWeight +\n '; font-family:' + font.fontFamily + ';opacity:' + font.opacity +\n '; color:' + font.color + ';';\n return style;\n}\n/** @private */\nexport function measureElementRect(element) {\n var bounds;\n document.body.appendChild(element);\n bounds = element.getBoundingClientRect();\n removeElement(element.id);\n return bounds;\n}\n/** @private */\nexport function findlElement(elements, id) {\n var element;\n for (var i = 0, length_1 = elements.length; i < length_1; i++) {\n if (elements[i].id.indexOf(id) > -1) {\n element = elements[i];\n continue;\n }\n }\n return element;\n}\n/** @private */\nexport function getPoint(x, y, xAxis, yAxis, isInverted, series) {\n x = ((xAxis.valueType === 'Logarithmic') ? logBase(((x > 1) ? x : 1), xAxis.logBase) : x);\n y = ((yAxis.valueType === 'Logarithmic') ? logBase(((y > 1) ? y : 1), yAxis.logBase) : y);\n x = valueToCoefficient(x, xAxis);\n y = valueToCoefficient(y, yAxis);\n var xLength = (isInverted ? xAxis.rect.height : xAxis.rect.width);\n var yLength = (isInverted ? yAxis.rect.width : yAxis.rect.height);\n var locationX = isInverted ? y * (yLength) : x * (xLength);\n var locationY = isInverted ? (1 - x) * (xLength) : (1 - y) * (yLength);\n return new ChartLocation(locationX, locationY);\n}\n/** @private */\nexport function appendElement(child, parent) {\n if (child && child.hasChildNodes() && parent) {\n parent.appendChild(child);\n }\n else {\n return null;\n }\n}\n/** @private */\nexport function getDraggedRectLocation(x1, y1, x2, y2, outerRect) {\n var width = Math.abs(x1 - x2);\n var height = Math.abs(y1 - y2);\n var x = Math.max(checkBounds(Math.min(x1, x2), width, outerRect.x, outerRect.width), outerRect.x);\n var y = Math.max(checkBounds(Math.min(y1, y2), height, outerRect.y, outerRect.height), outerRect.y);\n return new Rect(x, y, Math.min(width, outerRect.width), Math.min(height, outerRect.height));\n}\n/** @private */\nexport function checkBounds(start, size, min, max) {\n if (start < min) {\n start = min;\n }\n else if ((start + size) > (max + min)) {\n start = (max + min) - size;\n }\n return start;\n}\n/** @private */\nexport function getLabelText(currentPoint, series, chart) {\n var labelFormat = series.yAxis.labelFormat;\n var text = [];\n var customLabelFormat = labelFormat.match('{value}') !== null;\n switch (series.seriesType) {\n case 'XY':\n text.push(currentPoint.text || currentPoint.yValue.toString());\n break;\n case 'HighLow':\n text.push(currentPoint.text || Math.max(currentPoint.high, currentPoint.low).toString());\n text.push(currentPoint.text || Math.min(currentPoint.high, currentPoint.low).toString());\n break;\n case 'HighLowOpenClose':\n text.push(currentPoint.text || Math.max(currentPoint.high, currentPoint.low).toString());\n text.push(currentPoint.text || Math.min(currentPoint.high, currentPoint.low).toString());\n text.push(currentPoint.text || Math.max(currentPoint.open, currentPoint.close).toString());\n text.push(currentPoint.text || Math.min(currentPoint.open, currentPoint.close).toString());\n break;\n case 'BoxPlot':\n text.push(currentPoint.text || currentPoint.median.toString());\n text.push(currentPoint.text || currentPoint.maximum.toString());\n text.push(currentPoint.text || currentPoint.minimum.toString());\n text.push(currentPoint.text || currentPoint.upperQuartile.toString());\n text.push(currentPoint.text || currentPoint.lowerQuartile.toString());\n for (var _i = 0, _a = currentPoint.outliers; _i < _a.length; _i++) {\n var liers = _a[_i];\n text.push(currentPoint.text || liers.toString());\n }\n break;\n }\n if (labelFormat && !currentPoint.text) {\n for (var i = 0; i < text.length; i++) {\n text[i] = customLabelFormat ? labelFormat.replace('{value}', series.yAxis.format(parseFloat(text[i]))) :\n series.yAxis.format(parseFloat(text[i]));\n }\n }\n return text;\n}\n/** @private */\nexport function stopTimer(timer) {\n window.clearInterval(timer);\n}\n/** @private */\nexport function isCollide(rect, collections, clipRect) {\n var isCollide;\n var currentRect = new Rect(rect.x + clipRect.x, rect.y + clipRect.y, rect.width, rect.height);\n isCollide = collections.some(function (rect) {\n return (currentRect.x < rect.x + rect.width && currentRect.x + currentRect.width > rect.x &&\n currentRect.y < rect.y + rect.height && currentRect.height + currentRect.y > rect.y);\n });\n return isCollide;\n}\n/** @private */\nexport function isOverlap(currentRect, rect) {\n return (currentRect.x < rect.x + rect.width && currentRect.x + currentRect.width > rect.x &&\n currentRect.y < rect.y + rect.height && currentRect.height + currentRect.y > rect.y);\n}\n/** @private */\nexport function containsRect(currentRect, rect) {\n return (currentRect.x <= rect.x && currentRect.x + currentRect.width >= rect.x + rect.width &&\n currentRect.y <= rect.y && currentRect.height + currentRect.y >= rect.y + rect.height);\n}\n/** @private */\nexport function calculateRect(location, textSize, margin) {\n return new Rect((location.x - (textSize.width / 2) - margin.left), (location.y - (textSize.height / 2) - margin.top), textSize.width + margin.left + margin.right, textSize.height + margin.top + margin.bottom);\n}\n/** @private */\nexport function convertToHexCode(value) {\n return '#' + componentToHex(value.r) + componentToHex(value.g) + componentToHex(value.b);\n}\n/** @private */\nexport function componentToHex(value) {\n var hex = value.toString(16);\n return hex.length === 1 ? '0' + hex : hex;\n}\n/** @private */\nexport function convertHexToColor(hex) {\n var result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result ? new ColorValue(parseInt(result[1], 16), parseInt(result[2], 16), parseInt(result[3], 16)) :\n new ColorValue(255, 255, 255);\n}\n/** @private */\nexport function colorNameToHex(color) {\n var element;\n color = color === 'transparent' ? 'white' : color;\n element = document.getElementById('chartmeasuretext');\n element.style.color = color;\n color = window.getComputedStyle(element).color;\n var exp = /^(rgb|hsl)(a?)[(]\\s*([\\d.]+\\s*%?)\\s*,\\s*([\\d.]+\\s*%?)\\s*,\\s*([\\d.]+\\s*%?)\\s*(?:,\\s*([\\d.]+)\\s*)?[)]$/;\n var isRGBValue = exp.exec(color);\n return convertToHexCode(new ColorValue(parseInt(isRGBValue[3], 10), parseInt(isRGBValue[4], 10), parseInt(isRGBValue[5], 10)));\n}\n/** @private */\nexport function getSaturationColor(color, factor) {\n color = colorNameToHex(color);\n color = color.replace(/[^0-9a-f]/gi, '');\n if (color.length < 6) {\n color = color[0] + color[0] + color[1] + color[1] + color[2] + color[2];\n }\n factor = factor || 0;\n // convert to decimal and change luminosity\n var rgb = '#';\n var colorCode;\n for (var i = 0; i < 3; i++) {\n colorCode = parseInt(color.substr(i * 2, 2), 16);\n colorCode = Math.round(Math.min(Math.max(0, colorCode + (colorCode * factor)), 255));\n rgb += ('00' + colorCode.toString(16)).substr(colorCode.toString(16).length);\n }\n return rgb;\n}\n/** @private */\nexport function getMedian(values) {\n var half = Math.floor(values.length / 2);\n return values.length % 2 ? values[half] : ((values[half - 1] + values[half]) / 2.0);\n}\n/** @private */\n// tslint:disable-next-line:max-func-body-length\nexport function calculateLegendShapes(location, size, shape, options) {\n var padding = 10;\n var path = '';\n var height = size.height;\n var width = size.width;\n var locX = location.x;\n var locY = location.y;\n switch (shape) {\n case 'MultiColoredLine':\n case 'Line':\n path = 'M' + ' ' + (locX + (-width / 2)) + ' ' + (locY) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY);\n merge(options, { 'd': path });\n break;\n case 'StepLine':\n options.fill = 'transparent';\n path = 'M' + ' ' + (locX + (-width / 2) - (padding / 4)) + ' ' + (locY + (height / 2)) + ' ' + 'L' + ' ' + (locX +\n (-width / 2) + (width / 10)) + ' ' + (locY + (height / 2)) + ' ' + 'L' + ' ' + (locX + (-width / 2) + (width / 10))\n + ' ' + (locY) + ' ' + 'L' + ' ' + (locX + (-width / 10)) + ' ' + (locY) + ' ' + 'L' + ' ' + (locX + (-width / 10))\n + ' ' + (locY + (height / 2)) + ' ' + 'L' + ' ' + (locX + (width / 5)) + ' ' + (locY + (height / 2)) + ' ' + 'L' +\n ' ' + (locX + (width / 5)) + ' ' + (locY + (-height / 2)) + ' ' + 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY +\n (-height / 2)) + 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' + 'L' + '' + (locX + (width / 2)\n + (padding / 4)) + ' ' + (locY + (height / 2));\n merge(options, { 'd': path });\n break;\n case 'RightArrow':\n var space = 2;\n path = 'M' + ' ' + (locX + (-width / 2)) + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY) + ' ' + 'L' + ' ' +\n (locX + (-width / 2)) + ' ' + (locY + (height / 2)) + ' L' + ' ' + (locX + (-width / 2)) + ' ' +\n (locY + (height / 2) - space) + ' ' + 'L' + ' ' + (locX + (width / 2) - (2 * space)) + ' ' + (locY) +\n ' L' + (locX + (-width / 2)) + ' ' + (locY - (height / 2) + space) + ' Z';\n merge(options, { 'd': path });\n break;\n case 'LeftArrow':\n options.fill = options.stroke;\n options.stroke = 'transparent';\n space = 2;\n path = 'M' + ' ' + (locX + (width / 2)) + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + ' ' + (locX + (-width / 2)) + ' ' + (locY) + ' ' + 'L' + ' ' +\n (locX + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' + 'L' + ' ' +\n (locX + (width / 2)) + ' ' + (locY + (height / 2) - space) + ' L' + ' ' + (locX + (-width / 2) + (2 * space))\n + ' ' + (locY) + ' L' + (locX + (width / 2)) + ' ' + (locY - (height / 2) + space) + ' Z';\n merge(options, { 'd': path });\n break;\n case 'Column':\n case 'StackingColumn':\n case 'StackingColumn100':\n case 'RangeColumn':\n case 'Histogram':\n path = 'M' + ' ' + (locX - 3 * (width / 5)) + ' ' + (locY - (height / 5)) + ' ' + 'L' + ' ' +\n (locX + 3 * (-width / 10)) + ' ' + (locY - (height / 5)) + ' ' + 'L' + ' ' +\n (locX + 3 * (-width / 10)) + ' ' + (locY + (height / 2)) + ' ' + 'L' + ' ' + (locX - 3 *\n (width / 5)) + ' ' + (locY + (height / 2)) + ' ' + 'Z' + ' ' + 'M' + ' ' +\n (locX + (-width / 10) - (width / 20)) + ' ' + (locY - (height / 4) - (padding / 2))\n + ' ' + 'L' + ' ' + (locX + (width / 10) + (width / 20)) + ' ' + (locY - (height / 4) -\n (padding / 2)) + ' ' + 'L' + ' ' + (locX + (width / 10) + (width / 20)) + ' ' + (locY\n + (height / 2)) + ' ' + 'L' + ' ' + (locX + (-width / 10) - (width / 20)) + ' ' + (locY +\n (height / 2)) + ' ' + 'Z' + ' ' + 'M' + ' ' + (locX + 3 * (width / 10)) + ' ' + (locY) + ' ' +\n 'L' + ' ' + (locX + 3 * (width / 5)) + ' ' + (locY) + ' ' + 'L' + ' '\n + (locX + 3 * (width / 5)) + ' ' + (locY + (height / 2)) + ' ' + 'L' + ' '\n + (locX + 3 * (width / 10)) + ' ' + (locY + (height / 2)) + ' ' + 'Z';\n merge(options, { 'd': path });\n break;\n case 'Bar':\n case 'StackingBar':\n case 'StackingBar100':\n path = 'M' + ' ' + (locX + (-width / 2) + (-padding / 4)) + ' ' + (locY - 3 * (height / 5)) + ' '\n + 'L' + ' ' + (locX + 3 * (width / 10)) + ' ' + (locY - 3 * (height / 5)) + ' ' + 'L' + ' ' +\n (locX + 3 * (width / 10)) + ' ' + (locY - 3 * (height / 10)) + ' ' + 'L' + ' ' +\n (locX - (width / 2) + (-padding / 4)) + ' ' + (locY - 3 * (height / 10)) + ' ' + 'Z' + ' '\n + 'M' + ' ' + (locX + (-width / 2) + (-padding / 4)) + ' ' + (locY - (height / 5)\n + (padding / 20)) + ' ' + 'L' + ' ' + (locX + (width / 2) + (padding / 4)) + ' ' + (locY\n - (height / 5) + (padding / 20)) + ' ' + 'L' + ' ' + (locX + (width / 2) + (padding / 4))\n + ' ' + (locY + (height / 10) + (padding / 20)) + ' ' + 'L' + ' ' + (locX - (width / 2)\n + (-padding / 4)) + ' ' + (locY + (height / 10) + (padding / 20)) + ' ' + 'Z' + ' ' + 'M'\n + ' ' + (locX - (width / 2) + (-padding / 4)) + ' ' + (locY + (height / 5)\n + (padding / 10)) + ' ' + 'L' + ' ' + (locX + (-width / 4)) + ' ' + (locY + (height / 5)\n + (padding / 10)) + ' ' + 'L' + ' ' + (locX + (-width / 4)) + ' ' + (locY + (height / 2)\n + (padding / 10)) + ' ' + 'L' + ' ' + (locX - (width / 2) + (-padding / 4))\n + ' ' + (locY + (height / 2) + (padding / 10)) + ' ' + 'Z';\n merge(options, { 'd': path });\n break;\n case 'Spline':\n options.fill = 'transparent';\n path = 'M' + ' ' + (locX - (width / 2)) + ' ' + (locY + (height / 5)) + ' ' + 'Q' + ' '\n + locX + ' ' + (locY - height) + ' ' + locX + ' ' + (locY + (height / 5))\n + ' ' + 'M' + ' ' + locX + ' ' + (locY + (height / 5)) + ' ' + 'Q' + ' ' + (locX\n + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' + (locX + (width / 2)) + ' '\n + (locY - (height / 2));\n merge(options, { 'd': path });\n break;\n case 'Area':\n case 'MultiColoredArea':\n case 'RangeArea':\n case 'StackingArea':\n case 'StackingArea100':\n path = 'M' + ' ' + (locX - (width / 2) - (padding / 4)) + ' ' + (locY + (height / 2))\n + ' ' + 'L' + ' ' + (locX + (-width / 4) + (-padding / 8)) + ' ' + (locY - (height / 2))\n + ' ' + 'L' + ' ' + (locX) + ' ' + (locY + (height / 4)) + ' ' + 'L' + ' ' + (locX\n + (width / 4) + (padding / 8)) + ' ' + (locY + (-height / 2) + (height / 4)) + ' '\n + 'L' + ' ' + (locX + (height / 2) + (padding / 4)) + ' ' + (locY + (height / 2)) + ' ' + 'Z';\n merge(options, { 'd': path });\n break;\n case 'SplineArea':\n path = 'M' + ' ' + (locX - (width / 2)) + ' ' + (locY + (height / 5)) + ' ' + 'Q' + ' ' + locX\n + ' ' + (locY - height) + ' ' + locX + ' ' + (locY + (height / 5)) + ' ' + 'Z' + ' ' + 'M'\n + ' ' + locX + ' ' + (locY + (height / 5)) + ' ' + 'Q' + ' ' + (locX + (width / 2)) + ' '\n + (locY + (height / 2)) + ' ' + (locX + (width / 2)) + ' '\n + (locY - (height / 2)) + ' ' + ' Z';\n merge(options, { 'd': path });\n break;\n case 'Pie':\n case 'Doughnut':\n options.stroke = 'transparent';\n var r = Math.min(height, width) / 2;\n path = getAccumulationLegend(locX, locY, r, height, width, shape);\n merge(options, { 'd': path });\n break;\n }\n return { renderOption: options };\n}\n/** @private */\nexport function textTrim(maxWidth, text, font) {\n var label = text;\n var size = measureText(text, font).width;\n if (size > maxWidth) {\n var textLength = text.length;\n for (var i = textLength - 1; i >= 0; --i) {\n label = text.substring(0, i) + '...';\n size = measureText(label, font).width;\n if (size <= maxWidth) {\n return label;\n }\n }\n }\n return label;\n}\n/** @private */\nexport function stringToNumber(value, containerSize) {\n if (value !== null && value !== undefined) {\n return value.indexOf('%') !== -1 ? (containerSize / 100) * parseInt(value, 10) : parseInt(value, 10);\n }\n return null;\n}\n/** @private */\nexport function findDirection(rX, rY, rect, arrowLocation, arrowPadding, top, bottom, left, tipX, tipY, tipRadius) {\n var direction = '';\n var startX = rect.x;\n var startY = rect.y;\n var width = rect.x + rect.width;\n var height = rect.y + rect.height;\n tipRadius = tipRadius ? tipRadius : 0;\n if (top) {\n direction = direction.concat('M' + ' ' + (startX) + ' ' + (startY + rY) + ' Q ' + startX + ' '\n + startY + ' ' + (startX + rX) + ' ' + startY + ' ' +\n ' L' + ' ' + (width - rX) + ' ' + (startY) + ' Q ' + width + ' '\n + startY + ' ' + (width) + ' ' + (startY + rY));\n direction = direction.concat(' L' + ' ' + (width) + ' ' + (height - rY) + ' Q ' + width + ' '\n + (height) + ' ' + (width - rX) + ' ' + (height));\n if (arrowPadding !== 0) {\n direction = direction.concat(' L' + ' ' + (arrowLocation.x + arrowPadding / 2) + ' ' + (height));\n direction = direction.concat(' L' + ' ' + (tipX + tipRadius) + ' ' + (height + arrowPadding - tipRadius));\n direction += ' Q' + ' ' + (tipX) + ' ' + (height + arrowPadding) + ' ' + (tipX - tipRadius) +\n ' ' + (height + arrowPadding - tipRadius);\n }\n if ((arrowLocation.x - arrowPadding / 2) > startX) {\n direction = direction.concat(' L' + ' ' + (arrowLocation.x - arrowPadding / 2) + ' ' + height +\n ' L' + ' ' + (startX + rX) + ' ' + height + ' Q ' + startX + ' '\n + height + ' ' + (startX) + ' ' + (height - rY) + ' z');\n }\n else {\n if (arrowPadding === 0) {\n direction = direction.concat(' L' + ' ' + (startX + rX) + ' ' + height + ' Q ' + startX + ' '\n + height + ' ' + (startX) + ' ' + (height - rY) + ' z');\n }\n else {\n direction = direction.concat(' L' + ' ' + (startX) + ' ' + (height + rY) + ' z');\n }\n }\n }\n else if (bottom) {\n direction = direction.concat('M' + ' ' + (startX) + ' ' + (startY + rY) + ' Q ' + startX + ' '\n + (startY) + ' ' + (startX + rX) + ' ' + (startY) + ' L' + ' ' + (arrowLocation.x - arrowPadding / 2) + ' ' + (startY));\n direction = direction.concat(' L' + ' ' + (tipX - tipRadius) + ' ' + (arrowLocation.y + tipRadius));\n direction += ' Q' + ' ' + (tipX) + ' ' + (arrowLocation.y) + ' ' + (tipX + tipRadius) + ' ' + (arrowLocation.y + tipRadius);\n direction = direction.concat(' L' + ' ' + (arrowLocation.x + arrowPadding / 2) + ' ' + (startY) + ' L' + ' '\n + (width - rX) + ' ' + (startY) + ' Q ' + (width) + ' ' + (startY) + ' ' + (width) + ' ' + (startY + rY));\n direction = direction.concat(' L' + ' ' + (width) + ' ' + (height - rY) + ' Q ' + (width) + ' '\n + (height) + ' ' + (width - rX) + ' ' + (height) +\n ' L' + ' ' + (startX + rX) + ' ' + (height) + ' Q ' + (startX) + ' '\n + (height) + ' ' + (startX) + ' ' + (height - rY) + ' z');\n }\n else if (left) {\n direction = direction.concat('M' + ' ' + (startX) + ' ' + (startY + rY) + ' Q ' + startX + ' '\n + (startY) + ' ' + (startX + rX) + ' ' + (startY));\n direction = direction.concat(' L' + ' ' + (width - rX) + ' ' + (startY) + ' Q ' + (width) + ' '\n + (startY) + ' ' + (width) + ' ' + (startY + rY) + ' L' + ' ' + (width) + ' ' + (arrowLocation.y - arrowPadding / 2));\n direction = direction.concat(' L' + ' ' + (width + arrowPadding - tipRadius) + ' ' + (tipY - tipRadius));\n direction += ' Q ' + (width + arrowPadding) + ' ' + (tipY) + ' ' + (width + arrowPadding - tipRadius) + ' ' + (tipY + tipRadius);\n direction = direction.concat(' L' + ' ' + (width) + ' ' + (arrowLocation.y + arrowPadding / 2) +\n ' L' + ' ' + (width) + ' ' + (height - rY) + ' Q ' + width + ' ' + (height) + ' ' + (width - rX) + ' ' + (height));\n direction = direction.concat(' L' + ' ' + (startX + rX) + ' ' + (height) + ' Q ' + startX + ' '\n + (height) + ' ' + (startX) + ' ' + (height - rY) + ' z');\n }\n else {\n direction = direction.concat('M' + ' ' + (startX + rX) + ' ' + (startY) + ' Q ' + (startX) + ' '\n + (startY) + ' ' + (startX) + ' ' + (startY + rY) + ' L' + ' ' + (startX) + ' ' + (arrowLocation.y - arrowPadding / 2));\n direction = direction.concat(' L' + ' ' + (startX - arrowPadding + tipRadius) + ' ' + (tipY - tipRadius));\n direction += ' Q ' + (startX - arrowPadding) + ' ' + (tipY) + ' ' + (startX - arrowPadding + tipRadius) + ' ' + (tipY + tipRadius);\n direction = direction.concat(' L' + ' ' + (startX) + ' ' + (arrowLocation.y + arrowPadding / 2) +\n ' L' + ' ' + (startX) + ' ' + (height - rY) + ' Q ' + startX + ' '\n + (height) + ' ' + (startX + rX) + ' ' + (height));\n direction = direction.concat(' L' + ' ' + (width - rX) + ' ' + (height) + ' Q ' + width + ' '\n + (height) + ' ' + (width) + ' ' + (height - rY) +\n ' L' + ' ' + (width) + ' ' + (startY + rY) + ' Q ' + width + ' '\n + (startY) + ' ' + (width - rX) + ' ' + (startY) + ' z');\n }\n return direction;\n}\n/** @private */\nexport function textElement(options, font, color, parent, isMinus) {\n if (isMinus === void 0) { isMinus = false; }\n var renderOptions = {};\n var htmlObject;\n var tspanElement;\n var renderer = new SvgRenderer('');\n var text;\n var height;\n renderOptions = {\n 'id': options.id,\n 'x': options.x,\n 'y': options.y,\n 'fill': color,\n 'font-size': font.size,\n 'font-style': font.fontStyle,\n 'font-family': font.fontFamily,\n 'font-weight': font.fontWeight,\n 'text-anchor': options.anchor,\n 'transform': options.transform,\n 'opacity': font.opacity,\n 'dominant-baseline': options.baseLine\n };\n text = typeof options.text === 'string' ? options.text : isMinus ? options.text[options.text.length - 1] : options.text[0];\n htmlObject = renderer.createText(renderOptions, text);\n if (typeof options.text !== 'string' && options.text.length > 1) {\n for (var i = 1, len = options.text.length; i < len; i++) {\n height = (measureText(options.text[i], font).height);\n tspanElement = renderer.createTSpan({\n 'x': options.x, 'id': options.id,\n 'y': (options.y) + ((isMinus) ? -(i * height) : (i * height))\n }, isMinus ? options.text[options.text.length - (i + 1)] : options.text[i]);\n htmlObject.appendChild(tspanElement);\n }\n }\n parent.appendChild(htmlObject);\n return htmlObject;\n}\n/**\n * Method to calculate the width and height of the chart\n */\nexport function calculateSize(chart) {\n var containerWidth = chart.element.clientWidth;\n var containerHeight = chart.element.clientHeight;\n var height = 450;\n var marginHeight;\n if (chart.getModuleName() === 'rangeNavigator') {\n var range = chart;\n var tooltipSpace = range.tooltip.enable ? 35 : 0;\n var periodHeight = range.periodSelectorSettings.periods.length ?\n range.periodSelectorSettings.height : 0;\n marginHeight = range.margin.top + range.margin.bottom + tooltipSpace;\n var labelSize = measureText('tempString', range.labelStyle).height;\n var labelPadding = 15;\n height = (chart.series.length ? (Browser.isDevice ? 80 : 120) : ((range.enableGrouping ? (40 + labelPadding + labelSize) : 40)\n + marginHeight)) + periodHeight;\n if (range.disableRangeSelector) {\n height = periodHeight;\n }\n }\n chart.availableSize = new Size(stringToNumber(chart.width, containerWidth) || containerWidth || 600, stringToNumber(chart.height, containerHeight) || containerHeight || height);\n}\nexport function createSvg(chart) {\n chart.renderer = new SvgRenderer(chart.element.id);\n calculateSize(chart);\n chart.svgObject = chart.renderer.createSvg({\n id: chart.element.id + '_svg',\n width: chart.availableSize.width,\n height: chart.availableSize.height\n });\n}\n/**\n * To calculate chart title and height\n * @param title\n * @param style\n * @param width\n */\nexport function getTitle(title, style, width) {\n var titleCollection = [];\n switch (style.textOverflow) {\n case 'Wrap':\n titleCollection = textWrap(title, width, style);\n break;\n case 'Trim':\n titleCollection.push(textTrim(width, title, style));\n break;\n default:\n titleCollection.push(title);\n break;\n }\n return titleCollection;\n}\n/**\n * Method to calculate x position of title\n */\nexport function titlePositionX(chartSize, leftPadding, rightPadding, titleStyle) {\n var positionX;\n if (titleStyle.textAlignment === 'Near') {\n positionX = leftPadding;\n }\n else if (titleStyle.textAlignment === 'Center') {\n positionX = chartSize.width / 2;\n }\n else {\n positionX = chartSize.width - rightPadding;\n }\n return positionX;\n}\n/**\n * Method to find new text and element size based on textOverflow\n */\nexport function textWrap(currentLabel, maximumWidth, font) {\n var textCollection = currentLabel.split(' ');\n var label = '';\n var labelCollection = [];\n var text;\n for (var i = 0, len = textCollection.length; i < len; i++) {\n text = textCollection[i];\n if (measureText(label.concat(text), font).width < maximumWidth) {\n label = label.concat((label === '' ? '' : ' ') + text);\n }\n else {\n if (label !== '') {\n labelCollection.push(textTrim(maximumWidth, label, font));\n label = text;\n }\n else {\n labelCollection.push(textTrim(maximumWidth, text, font));\n text = '';\n }\n }\n if (label && i === len - 1) {\n labelCollection.push(textTrim(maximumWidth, label, font));\n }\n }\n return labelCollection;\n}\n/** @private */\nvar CustomizeOption = /** @class */ (function () {\n function CustomizeOption(id) {\n this.id = id;\n }\n return CustomizeOption;\n}());\nexport { CustomizeOption };\n/** @private */\nvar StackValues = /** @class */ (function () {\n function StackValues(startValue, endValue) {\n this.startValues = startValue;\n this.endValues = endValue;\n }\n return StackValues;\n}());\nexport { StackValues };\n/** @private */\nvar TextOption = /** @class */ (function (_super) {\n __extends(TextOption, _super);\n function TextOption(id, x, y, anchor, text, transform, baseLine) {\n if (transform === void 0) { transform = ''; }\n var _this = _super.call(this, id) || this;\n _this.transform = '';\n _this.baseLine = 'auto';\n _this.x = x;\n _this.y = y;\n _this.anchor = anchor;\n _this.text = text;\n _this.transform = transform;\n _this.baseLine = baseLine;\n return _this;\n }\n return TextOption;\n}(CustomizeOption));\nexport { TextOption };\n/** @private */\nvar PathOption = /** @class */ (function (_super) {\n __extends(PathOption, _super);\n function PathOption(id, fill, width, color, opacity, dashArray, d) {\n var _this = _super.call(this, id) || this;\n _this.opacity = opacity;\n _this.fill = fill;\n _this.stroke = color;\n _this['stroke-width'] = width;\n _this['stroke-dasharray'] = dashArray;\n _this.d = d;\n return _this;\n }\n return PathOption;\n}(CustomizeOption));\nexport { PathOption };\n/** @private */\nvar RectOption = /** @class */ (function (_super) {\n __extends(RectOption, _super);\n function RectOption(id, fill, border, opacity, rect, rx, ry, transform, dashArray) {\n var _this = _super.call(this, id, fill, border.width, border.color, opacity, dashArray) || this;\n _this.y = rect.y;\n _this.x = rect.x;\n _this.height = rect.height;\n _this.width = rect.width;\n _this.rx = rx ? rx : 0;\n _this.ry = ry ? ry : 0;\n _this.transform = transform ? transform : '';\n return _this;\n }\n return RectOption;\n}(PathOption));\nexport { RectOption };\n/** @private */\nvar CircleOption = /** @class */ (function (_super) {\n __extends(CircleOption, _super);\n function CircleOption(id, fill, border, opacity, cx, cy, r) {\n var _this = _super.call(this, id, fill, border.width, border.color, opacity) || this;\n _this.cy = cy;\n _this.cx = cx;\n _this.r = r;\n return _this;\n }\n return CircleOption;\n}(PathOption));\nexport { CircleOption };\n/** @private */\nvar PolygonOption = /** @class */ (function () {\n function PolygonOption(id, points, fill) {\n this.id = id;\n this.points = points;\n this.fill = fill;\n }\n return PolygonOption;\n}());\nexport { PolygonOption };\n/** @private */\nvar Size = /** @class */ (function () {\n function Size(width, height) {\n this.width = width;\n this.height = height;\n }\n return Size;\n}());\nexport { Size };\n/** @private */\nvar Rect = /** @class */ (function () {\n function Rect(x, y, width, height) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n return Rect;\n}());\nexport { Rect };\n/** @private */\nvar ChartLocation = /** @class */ (function () {\n function ChartLocation(x, y) {\n this.x = x;\n this.y = y;\n }\n return ChartLocation;\n}());\nexport { ChartLocation };\n/** @private */\nvar Thickness = /** @class */ (function () {\n function Thickness(left, right, top, bottom) {\n this.left = left;\n this.right = right;\n this.top = top;\n this.bottom = bottom;\n }\n return Thickness;\n}());\nexport { Thickness };\n/** @private */\nvar ColorValue = /** @class */ (function () {\n function ColorValue(r, g, b) {\n this.r = r;\n this.g = g;\n this.b = b;\n }\n return ColorValue;\n}());\nexport { ColorValue };\n/** @private */\nvar PointData = /** @class */ (function () {\n function PointData(point, series, index) {\n if (index === void 0) { index = 0; }\n this.point = point;\n this.series = series;\n this.lierIndex = index;\n }\n return PointData;\n}());\nexport { PointData };\n/** @private */\nvar AccPointData = /** @class */ (function () {\n function AccPointData(point, series, index) {\n if (index === void 0) { index = 0; }\n this.point = point;\n this.series = series;\n }\n return AccPointData;\n}());\nexport { AccPointData };\n/** @private */\nvar ControlPoints = /** @class */ (function () {\n function ControlPoints(controlPoint1, controlPoint2) {\n this.controlPoint1 = controlPoint1;\n this.controlPoint2 = controlPoint2;\n }\n return ControlPoints;\n}());\nexport { ControlPoints };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/**\n * AccumulationChart base file\n */\nimport { Property, ChildProperty, Complex, createElement } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, getValue } from '@syncfusion/ej2-base';\nimport { Border, Font, Animation, EmptyPointSettings, Connector } from '../../common/model/base';\nimport { Rect, stringToNumber, PathOption } from '../../common/utils/helper';\nimport { seriesRender, pointRender } from '../../common/model/constants';\nimport { getSeriesColor } from '../../common/model/theme';\nimport { getElement, firstToLowerCase } from '../../common/utils/helper';\n/**\n * Annotation for accumulation series\n */\nvar AccumulationAnnotationSettings = /** @class */ (function (_super) {\n __extends(AccumulationAnnotationSettings, _super);\n function AccumulationAnnotationSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], AccumulationAnnotationSettings.prototype, \"content\", void 0);\n __decorate([\n Property('0')\n ], AccumulationAnnotationSettings.prototype, \"x\", void 0);\n __decorate([\n Property('0')\n ], AccumulationAnnotationSettings.prototype, \"y\", void 0);\n __decorate([\n Property('Pixel')\n ], AccumulationAnnotationSettings.prototype, \"coordinateUnits\", void 0);\n __decorate([\n Property('Chart')\n ], AccumulationAnnotationSettings.prototype, \"region\", void 0);\n __decorate([\n Property('Middle')\n ], AccumulationAnnotationSettings.prototype, \"verticalAlignment\", void 0);\n __decorate([\n Property('Center')\n ], AccumulationAnnotationSettings.prototype, \"horizontalAlignment\", void 0);\n __decorate([\n Property(null)\n ], AccumulationAnnotationSettings.prototype, \"description\", void 0);\n return AccumulationAnnotationSettings;\n}(ChildProperty));\nexport { AccumulationAnnotationSettings };\n/**\n * Configures the dataLabel in accumulation chart.\n */\nvar AccumulationDataLabelSettings = /** @class */ (function (_super) {\n __extends(AccumulationDataLabelSettings, _super);\n function AccumulationDataLabelSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], AccumulationDataLabelSettings.prototype, \"visible\", void 0);\n __decorate([\n Property(null)\n ], AccumulationDataLabelSettings.prototype, \"name\", void 0);\n __decorate([\n Property('transparent')\n ], AccumulationDataLabelSettings.prototype, \"fill\", void 0);\n __decorate([\n Property('Inside')\n ], AccumulationDataLabelSettings.prototype, \"position\", void 0);\n __decorate([\n Property(5)\n ], AccumulationDataLabelSettings.prototype, \"rx\", void 0);\n __decorate([\n Property(5)\n ], AccumulationDataLabelSettings.prototype, \"ry\", void 0);\n __decorate([\n Complex({ width: null, color: null }, Border)\n ], AccumulationDataLabelSettings.prototype, \"border\", void 0);\n __decorate([\n Complex({ size: '11px', color: null }, Font)\n ], AccumulationDataLabelSettings.prototype, \"font\", void 0);\n __decorate([\n Complex({}, Connector)\n ], AccumulationDataLabelSettings.prototype, \"connectorStyle\", void 0);\n __decorate([\n Property(null)\n ], AccumulationDataLabelSettings.prototype, \"template\", void 0);\n return AccumulationDataLabelSettings;\n}(ChildProperty));\nexport { AccumulationDataLabelSettings };\n/**\n * Points model for the series.\n */\nvar AccPoints = /** @class */ (function () {\n function AccPoints() {\n this.visible = true;\n this.symbolLocation = null;\n /** @private */\n this.region = null;\n /** @private */\n this.labelRegion = null;\n /** @private */\n this.labelVisible = true;\n this.regions = null;\n }\n return AccPoints;\n}());\nexport { AccPoints };\n/**\n * Configures the series in accumulation chart.\n */\nvar AccumulationSeries = /** @class */ (function (_super) {\n __extends(AccumulationSeries, _super);\n function AccumulationSeries() {\n /**\n * Specifies the dataSource for the series. It can be an array of JSON objects or an instance of DataManager.\n * ```html\n *
\n * ```\n * ```typescript\n * let dataManager: DataManager = new DataManager({\n * url: 'http://mvc.syncfusion.com/Services/Northwnd.svc/Tasks/'\n * });\n * let query: Query = new Query().take(50).where('Estimate', 'greaterThan', 0, false);\n * let pie: AccumulationChart = new AccumulationChart({\n * ...\n * series: [{\n * dataSource: dataManager,\n * xName: 'Id',\n * yName: 'Estimate',\n * query: query\n * }],\n * ...\n * });\n * pie.appendTo('#Pie');\n * ```\n * @default ''\n */\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** @private */\n _this.points = [];\n /** @private */\n _this.sumOfPoints = 0;\n /** @private */\n _this.isRectSeries = true;\n /** @private */\n _this.clipRect = new Rect(0, 0, 0, 0);\n /** @private */\n _this.category = 'Series';\n return _this;\n }\n /** @private To refresh the Datamanager for series */\n AccumulationSeries.prototype.refreshDataManager = function (accumulation, render) {\n var _this = this;\n if (isNullOrUndefined(this.query)) {\n this.dataManagerSuccess({ result: this.dataSource, count: this.dataSource.length }, accumulation, render);\n return;\n }\n var dataManager = this.dataModule.getData(this.dataModule.generateQuery().requiresCount());\n dataManager.then(function (e) { return _this.dataManagerSuccess(e, accumulation, render); });\n };\n /**\n * To get points on dataManager is success\n * @private\n */\n AccumulationSeries.prototype.dataManagerSuccess = function (e, accumulation, render) {\n var argsData = {\n name: seriesRender, series: this, data: e.result,\n };\n accumulation.trigger(seriesRender, argsData);\n this.resultData = e.result !== '' ? e.result : [];\n this.getPoints(this.resultData, accumulation);\n if (++accumulation.seriesCounts === accumulation.visibleSeries.length && render) {\n accumulation.refreshChart();\n }\n };\n /** @private To find points from result data */\n AccumulationSeries.prototype.getPoints = function (result, accumulation) {\n var length = Object.keys(result).length;\n this.sumOfPoints = 0;\n if (length === 0) {\n return null;\n }\n this.findSumOfPoints(result);\n this.points = [];\n this.sumOfClub = 0;\n var point;\n var colors = this.palettes.length ? this.palettes : getSeriesColor(accumulation.theme);\n var clubValue = stringToNumber(this.groupTo, this.sumOfPoints);\n for (var i = 0; i < length; i++) {\n point = this.setPoints(result, i, colors);\n var currentY = point.y;\n if (!this.isClub(point, clubValue, i)) {\n if (isNullOrUndefined(point.y)) {\n point.visible = false;\n }\n this.pushPoints(point, colors);\n }\n }\n this.lastGroupTo = this.groupTo;\n if (this.sumOfClub > 0) {\n var clubPoint = new AccPoints();\n clubPoint.x = 'Others';\n clubPoint.y = this.sumOfClub;\n clubPoint.text = clubPoint.originalText = clubPoint.x + ': ' + this.sumOfClub;\n this.pushPoints(clubPoint, colors);\n }\n };\n /**\n * Method to set point index and color\n */\n AccumulationSeries.prototype.pushPoints = function (point, colors) {\n point.index = this.points.length;\n point.color = point.color || colors[point.index % colors.length];\n this.points.push(point);\n };\n /**\n * Method to find club point\n */\n AccumulationSeries.prototype.isClub = function (point, clubValue, index) {\n if (!isNullOrUndefined(clubValue)) {\n if (this.groupMode === 'Value' && Math.abs(point.y) <= clubValue) {\n this.sumOfClub += Math.abs(point.y);\n return true;\n }\n else if (this.groupMode === 'Point' && index >= clubValue) {\n this.sumOfClub += Math.abs(point.y);\n return true;\n }\n }\n return false;\n };\n /**\n * Method to find sum of points in the series\n */\n AccumulationSeries.prototype.findSumOfPoints = function (result) {\n var length = Object.keys(result).length;\n for (var i = 0; i < length; i++) {\n if (!isNullOrUndefined(result[i][this.yName])) {\n this.sumOfPoints += Math.abs(result[i][this.yName]);\n }\n }\n };\n /**\n * Method to set points x, y and text from data source\n */\n AccumulationSeries.prototype.setPoints = function (data, i, colors) {\n var point = new AccPoints();\n point.x = getValue(this.xName, data[i]);\n point.y = getValue(this.yName, data[i]);\n point.color = getValue(this.pointColorMapping, data[i]);\n point.text = point.originalText = getValue(this.dataLabel.name || '', data[i]);\n this.setAccEmptyPoint(point, i, data, colors);\n return point;\n };\n /**\n * Method render the series elements for accumulation chart\n * @private\n */\n AccumulationSeries.prototype.renderSeries = function (accumulation) {\n var seriesGroup = accumulation.renderer.createGroup({ id: accumulation.element.id + '_Series_' + this.index });\n this.renderPoints(accumulation, seriesGroup);\n var datalabelGroup;\n if (accumulation.accumulationDataLabelModule && this.dataLabel.visible) {\n datalabelGroup = accumulation.renderer.createGroup({ id: accumulation.element.id + '_datalabel_Series_' + this.index });\n datalabelGroup.style.visibility =\n (this.animation.enable && accumulation.animateSeries && this.type === 'Pie') ? 'hidden' : 'visible';\n this.renderDataLabel(accumulation, datalabelGroup);\n }\n if (this.type === 'Pie') {\n this.findMaxBounds(this.labelBound, this.accumulationBound);\n accumulation.pieSeriesModule.animateSeries(accumulation, this.animation, this, seriesGroup);\n }\n if (accumulation.accumulationLegendModule) {\n this.labelBound.x -= accumulation.explodeDistance;\n this.labelBound.y -= accumulation.explodeDistance;\n this.labelBound.height += (accumulation.explodeDistance - this.labelBound.y);\n this.labelBound.width += (accumulation.explodeDistance - this.labelBound.x);\n }\n };\n /**\n * Method render the points elements for accumulation chart series.\n */\n AccumulationSeries.prototype.renderPoints = function (accumulation, seriesGroup) {\n var pointId = accumulation.element.id + '_Series_' + this.index + '_Point_';\n var option;\n for (var _i = 0, _a = this.points; _i < _a.length; _i++) {\n var point = _a[_i];\n var argsData = {\n cancel: false, name: pointRender, series: this, point: point, fill: point.color,\n border: this.isEmpty(point) ? { width: this.emptyPointSettings.border.width, color: this.emptyPointSettings.border.color } :\n { width: this.border.width, color: this.border.color }\n };\n accumulation.trigger(pointRender, argsData);\n point.color = argsData.fill;\n if (point.visible) {\n option = new PathOption(pointId + point.index, point.color, argsData.border.width || 1, argsData.border.color || point.color, 1, '', '');\n accumulation[(firstToLowerCase(this.type) + 'SeriesModule')].\n renderPoint(point, this, accumulation, option);\n seriesGroup.appendChild(accumulation.renderer.drawPath(option));\n }\n }\n accumulation.getSeriesElement().appendChild(seriesGroup);\n };\n /**\n * Method render the datalabel elements for accumulation chart.\n */\n AccumulationSeries.prototype.renderDataLabel = function (accumulation, datalabelGroup) {\n accumulation.accumulationDataLabelModule.findAreaRect();\n var element = createElement('div', {\n id: accumulation.element.id + '_Series_0' + '_DataLabelCollections'\n });\n for (var _i = 0, _a = this.points; _i < _a.length; _i++) {\n var point = _a[_i];\n if (point.visible) {\n accumulation.accumulationDataLabelModule.renderDataLabel(point, this.dataLabel, datalabelGroup, this.points, this.index, element);\n }\n }\n if (this.dataLabel.template !== null && element.childElementCount) {\n getElement(accumulation.element.id + '_Secondary_Element').appendChild(element);\n }\n accumulation.getSeriesElement().appendChild(datalabelGroup);\n };\n /**\n * To find maximum bounds for smart legend placing\n * @private\n */\n AccumulationSeries.prototype.findMaxBounds = function (totalbound, bound) {\n totalbound.x = bound.x < totalbound.x ? bound.x : totalbound.x;\n totalbound.y = bound.y < totalbound.y ? bound.y : totalbound.y;\n totalbound.height = (bound.y + bound.height) > totalbound.height ? (bound.y + bound.height) : totalbound.height;\n totalbound.width = (bound.x + bound.width) > totalbound.width ? (bound.x + bound.width) : totalbound.width;\n };\n /**\n * To set empty point value for null points\n * @private\n */\n AccumulationSeries.prototype.setAccEmptyPoint = function (point, i, data, colors) {\n if (!isNullOrUndefined(point.y)) {\n return null;\n }\n point.color = this.emptyPointSettings.fill || point.color;\n switch (this.emptyPointSettings.mode) {\n case 'Zero':\n point.y = 0;\n point.visible = true;\n break;\n case 'Average':\n var previous = data[i - 1] ? (data[i - 1][this.yName] || 0) : 0;\n var next = data[i + 1] ? (data[i + 1][this.yName] || 0) : 0;\n point.y = (Math.abs(previous) + Math.abs(next)) / 2;\n this.sumOfPoints += point.y;\n point.visible = true;\n break;\n default:\n point.visible = false;\n break;\n }\n };\n /**\n * To find point is empty\n */\n AccumulationSeries.prototype.isEmpty = function (point) {\n return point.color === this.emptyPointSettings.fill;\n };\n __decorate([\n Property('')\n ], AccumulationSeries.prototype, \"dataSource\", void 0);\n __decorate([\n Property()\n ], AccumulationSeries.prototype, \"query\", void 0);\n __decorate([\n Property('')\n ], AccumulationSeries.prototype, \"xName\", void 0);\n __decorate([\n Property('')\n ], AccumulationSeries.prototype, \"name\", void 0);\n __decorate([\n Property('')\n ], AccumulationSeries.prototype, \"yName\", void 0);\n __decorate([\n Property(true)\n ], AccumulationSeries.prototype, \"visible\", void 0);\n __decorate([\n Complex({ color: null, width: 0 }, Border)\n ], AccumulationSeries.prototype, \"border\", void 0);\n __decorate([\n Complex(null, Animation)\n ], AccumulationSeries.prototype, \"animation\", void 0);\n __decorate([\n Property('SeriesType')\n ], AccumulationSeries.prototype, \"legendShape\", void 0);\n __decorate([\n Property('')\n ], AccumulationSeries.prototype, \"pointColorMapping\", void 0);\n __decorate([\n Property(null)\n ], AccumulationSeries.prototype, \"selectionStyle\", void 0);\n __decorate([\n Property(null)\n ], AccumulationSeries.prototype, \"groupTo\", void 0);\n __decorate([\n Property('Value')\n ], AccumulationSeries.prototype, \"groupMode\", void 0);\n __decorate([\n Complex({}, AccumulationDataLabelSettings)\n ], AccumulationSeries.prototype, \"dataLabel\", void 0);\n __decorate([\n Property([])\n ], AccumulationSeries.prototype, \"palettes\", void 0);\n __decorate([\n Property(0)\n ], AccumulationSeries.prototype, \"startAngle\", void 0);\n __decorate([\n Property(360)\n ], AccumulationSeries.prototype, \"endAngle\", void 0);\n __decorate([\n Property('80%')\n ], AccumulationSeries.prototype, \"radius\", void 0);\n __decorate([\n Property('0')\n ], AccumulationSeries.prototype, \"innerRadius\", void 0);\n __decorate([\n Property('Pie')\n ], AccumulationSeries.prototype, \"type\", void 0);\n __decorate([\n Property(true)\n ], AccumulationSeries.prototype, \"enableTooltip\", void 0);\n __decorate([\n Property(false)\n ], AccumulationSeries.prototype, \"explode\", void 0);\n __decorate([\n Property('30%')\n ], AccumulationSeries.prototype, \"explodeOffset\", void 0);\n __decorate([\n Property(false)\n ], AccumulationSeries.prototype, \"explodeAll\", void 0);\n __decorate([\n Property(null)\n ], AccumulationSeries.prototype, \"explodeIndex\", void 0);\n __decorate([\n Complex({ mode: 'Drop' }, EmptyPointSettings)\n ], AccumulationSeries.prototype, \"emptyPointSettings\", void 0);\n __decorate([\n Property(0)\n ], AccumulationSeries.prototype, \"gapRatio\", void 0);\n __decorate([\n Property('80%')\n ], AccumulationSeries.prototype, \"width\", void 0);\n __decorate([\n Property('80%')\n ], AccumulationSeries.prototype, \"height\", void 0);\n __decorate([\n Property('20%')\n ], AccumulationSeries.prototype, \"neckWidth\", void 0);\n __decorate([\n Property('20%')\n ], AccumulationSeries.prototype, \"neckHeight\", void 0);\n __decorate([\n Property('Linear')\n ], AccumulationSeries.prototype, \"pyramidMode\", void 0);\n __decorate([\n Property(1)\n ], AccumulationSeries.prototype, \"opacity\", void 0);\n return AccumulationSeries;\n}(ChildProperty));\nexport { AccumulationSeries };\n/**\n * method to get series from index\n * @private\n */\nexport function getSeriesFromIndex(index, visibleSeries) {\n for (var _i = 0, visibleSeries_1 = visibleSeries; _i < visibleSeries_1.length; _i++) {\n var series = visibleSeries_1[_i];\n if (index === series.index) {\n return series;\n }\n }\n return visibleSeries[0];\n}\n/**\n * method to get point from index\n * @private\n */\nexport function pointByIndex(index, points) {\n for (var _i = 0, points_1 = points; _i < points_1.length; _i++) {\n var point = points_1[_i];\n if (point.index === index) {\n return point;\n }\n }\n return null;\n}\n","/**\n * Methods for calculating coefficient.\n */\n/** @private */\nexport function rangeValueToCoefficient(value, range, inversed) {\n var result = (value - range.min) / (range.delta);\n return inversed ? (1 - result) : result;\n}\n/** @private */\nexport function getXLocation(x, range, size, inversed) {\n x = rangeValueToCoefficient(x, range, inversed);\n return x * size;\n}\n/** @private */\nexport function getRangeValueXByPoint(value, size, range, inversed) {\n var actualValue = !inversed ? value / size : (1 - (value / size));\n return actualValue * (range.delta) + range.min;\n}\n/** @private */\nexport function getExactData(points, start, end) {\n var selectedData = [];\n points.map(function (point) {\n if (point.xValue >= start && point.xValue <= end) {\n selectedData.push({\n 'x': point.x,\n 'y': point.y\n });\n }\n });\n return selectedData;\n}\n/** @private */\nexport function getNearestValue(values, point) {\n return values.reduce(function (prev, curr) {\n return (Math.abs(curr - point) < Math.abs(prev - point) ? curr : prev);\n });\n}\n/** @private */\nvar DataPoint = /** @class */ (function () {\n function DataPoint(x, y, xValue, yValue, visible) {\n if (visible === void 0) { visible = true; }\n this.x = x;\n this.y = y;\n this.xValue = xValue;\n this.visible = visible;\n }\n return DataPoint;\n}());\nexport { DataPoint };\n","import { Browser, isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n *\n */\nexport var RangeNavigatorTheme;\n(function (RangeNavigatorTheme) {\n /** @private */\n RangeNavigatorTheme.axisLabelFont = {\n size: '12px',\n fontWeight: 'Normal',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Segoe UI'\n };\n /** @private */\n RangeNavigatorTheme.tooltipLabelFont = {\n size: '12px',\n fontWeight: 'Normal',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Segoe UI'\n };\n})(RangeNavigatorTheme || (RangeNavigatorTheme = {}));\n/** @private */\nexport function getRangeThemeColor(theme, range) {\n var thumbSize = range.navigatorStyleSettings.thumb;\n var thumbWidth = isNullOrUndefined(thumbSize.width) ? (Browser.isDevice ? 15 : 20) : thumbSize.width;\n var thumbHeight = isNullOrUndefined(thumbSize.height) ? (Browser.isDevice ? 15 : 20) : thumbSize.height;\n var style = {\n gridLineColor: '#E0E0E0',\n axisLineColor: '#000000',\n labelFontColor: '#686868',\n unselectedRectColor: range.series.length ? 'rgba(255, 255, 255, 0.6)' : '#EEEEEE',\n thumpLineColor: 'rgba(189, 189, 189, 1)',\n thumbBackground: 'rgba(250, 250, 250, 1)',\n gripColor: '#757575',\n background: '#FFFFFF',\n thumbHoverColor: '#EEEEEE',\n selectedRegionColor: range.series.length ? 'transparent' : '#FF4081',\n tooltipBackground: 'rgb(0, 8, 22)',\n tooltipFontColor: '#dbdbdb',\n thumbWidth: thumbWidth,\n thumbHeight: thumbHeight\n };\n switch (theme) {\n case 'Fabric':\n style.selectedRegionColor = range.series.length ? 'transparent' : '#007897';\n break;\n case 'Bootstrap':\n style.selectedRegionColor = range.series.length ? 'transparent' : '#428BCA';\n break;\n case 'Highcontrast':\n style = {\n gridLineColor: '#bdbdbd',\n axisLineColor: '#969696',\n labelFontColor: '#ffffff',\n unselectedRectColor: range.series.length ? 'rgba(255, 255, 255, 0.3)' : '#EEEEEE',\n thumpLineColor: '#ffffff',\n thumbBackground: '#262626',\n gripColor: '#ffffff',\n background: '#000000',\n thumbHoverColor: '#BFBFBF',\n selectedRegionColor: range.series.length ? 'transparent' : '#FFD939',\n tooltipBackground: '#ffffff',\n tooltipFontColor: '#000000',\n thumbWidth: thumbWidth,\n thumbHeight: thumbHeight\n };\n break;\n default:\n style.selectedRegionColor = range.series.length ? 'transparent' : '#FF4081';\n break;\n }\n return style;\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { createElement, SvgRenderer, compile as templateComplier, remove } from '@syncfusion/ej2-base';\nimport { Animation } from '@syncfusion/ej2-base';\nimport { SmithchartSize } from '../../smithchart/utils/utils';\nexport function createSvg(smithchart) {\n smithchart.renderer = new SvgRenderer(smithchart.element.id);\n calculateSize(smithchart);\n smithchart.svgObject = smithchart.renderer.createSvg({\n id: smithchart.element.id + '_svg',\n width: smithchart.availableSize.width,\n height: smithchart.availableSize.height\n });\n}\nexport function getElement(id) {\n return document.getElementById(id);\n}\n/**\n * @private\n * Trim the title text\n */\nexport function textTrim(maxwidth, text, font) {\n var label = text;\n var size = measureText(text, font).width;\n if (size > maxwidth) {\n var textLength = text.length;\n for (var i = textLength - 1; i >= 0; --i) {\n label = text.substring(0, i) + '...';\n size = measureText(label, font).width;\n if (size <= maxwidth || label.length < 4) {\n if (label.length < 4) {\n label = ' ';\n }\n return label;\n }\n }\n }\n return label;\n}\n/**\n * Function to compile the template function for maps.\n * @returns Function\n * @private\n */\nexport function getTemplateFunction(templateString) {\n var templateFn = null;\n var e;\n try {\n if (document.querySelectorAll(templateString).length) {\n templateFn = templateComplier(document.querySelector(templateString).innerHTML.trim());\n }\n }\n catch (e) {\n templateFn = templateComplier(templateString);\n }\n return templateFn;\n}\nexport function convertElementFromLabel(element, labelId, data, index, smithchart) {\n var labelEle = element[0];\n var templateHtml = labelEle.outerHTML;\n var properties = Object.keys(data);\n for (var i = 0; i < properties.length; i++) {\n templateHtml = templateHtml.replace(new RegExp('{{:' + properties[i] + '}}', 'g'), data[properties[i].toString()]);\n }\n return createElement('div', {\n id: labelId,\n innerHTML: templateHtml,\n styles: 'position: absolute'\n });\n}\nexport function _getEpsilonValue() {\n var e = 1.0;\n while ((1.0 + 0.5 * e) !== 1.0) {\n e *= 0.5;\n }\n return e;\n}\n/**\n * Method to calculate the width and height of the smithchart\n */\nexport function calculateSize(smithchart) {\n var containerWidth = smithchart.element.clientWidth;\n var containerHeight = smithchart.element.clientHeight;\n smithchart.availableSize = new SmithchartSize(stringToNumber(smithchart.width, containerWidth) || containerWidth || 600, stringToNumber(smithchart.height, containerHeight) || containerHeight || 450);\n}\n/**\n * Animation for template\n * @private\n */\nexport function templateAnimate(smithchart, element, delay, duration, name) {\n var opacity = 0;\n var delta;\n var value;\n new Animation({}).animate(element, {\n duration: duration,\n delay: delay,\n name: name,\n progress: function (args) {\n delta = ((args.timeStamp - args.delay) / args.duration);\n value = opacity + (delta * 1);\n args.element.style.opacity = value.toString();\n },\n end: function (args) {\n var opacity = 1;\n args.element.style.opacity = opacity.toString();\n smithchart.trigger('animationComplete', event);\n },\n });\n}\n/** @private */\nexport function stringToNumber(value, containerSize) {\n if (value !== null && value !== undefined) {\n return value.indexOf('%') !== -1 ? (containerSize / 100) * parseInt(value, 10) : parseInt(value, 10);\n }\n return null;\n}\n/**\n * Internal use of path options\n * @private\n */\nvar PathOption = /** @class */ (function () {\n function PathOption(id, fill, width, color, opacity, dashArray, d) {\n this.id = id;\n this.opacity = opacity;\n this.fill = fill;\n this.stroke = color;\n this['stroke-width'] = width;\n this['stroke-dasharray'] = dashArray;\n this.d = d;\n }\n return PathOption;\n}());\nexport { PathOption };\n/**\n * Internal use of rectangle options\n * @private\n */\nvar RectOption = /** @class */ (function (_super) {\n __extends(RectOption, _super);\n function RectOption(id, fill, border, opacity, rect) {\n var _this = _super.call(this, id, fill, border.width, border.color, opacity) || this;\n _this.y = rect.y;\n _this.x = rect.x;\n _this.height = rect.height;\n _this.width = rect.width;\n return _this;\n }\n return RectOption;\n}(PathOption));\nexport { RectOption };\n/**\n * Internal use of circle options\n * @private\n */\nvar CircleOption = /** @class */ (function (_super) {\n __extends(CircleOption, _super);\n function CircleOption(id, fill, border, opacity, cx, cy, r, dashArray) {\n var _this = _super.call(this, id, fill, border.width, border.color, opacity) || this;\n _this.cy = cy;\n _this.cx = cx;\n _this.r = r;\n _this['stroke-dasharray'] = dashArray;\n return _this;\n }\n return CircleOption;\n}(PathOption));\nexport { CircleOption };\nexport function measureText(text, font) {\n var htmlObject = document.getElementById('smithchartmeasuretext');\n if (htmlObject === null) {\n htmlObject = createElement('text', { id: 'smithchartmeasuretext' });\n document.body.appendChild(htmlObject);\n }\n htmlObject.innerHTML = text;\n htmlObject.style.position = 'absolute';\n htmlObject.style.visibility = 'hidden';\n htmlObject.style.left = '0';\n htmlObject.style.top = '-100';\n htmlObject.style.whiteSpace = 'nowrap';\n htmlObject.style.fontSize = font.size;\n htmlObject.style.fontWeight = font.fontWeight;\n htmlObject.style.fontStyle = font.fontStyle;\n htmlObject.style.fontFamily = font.fontFamily;\n // For bootstrap line height issue\n htmlObject.style.lineHeight = 'normal';\n return new SmithchartSize(htmlObject.clientWidth, htmlObject.clientHeight);\n}\n/**\n * Internal use of text options\n * @private\n */\nvar TextOption = /** @class */ (function () {\n function TextOption(id, x, y, anchor, text) {\n this.id = id;\n this.x = x;\n this.y = y;\n this.anchor = anchor;\n this.text = text;\n }\n return TextOption;\n}());\nexport { TextOption };\n/**\n * To remove element by id\n */\nexport function removeElement(id) {\n var element = document.getElementById(id);\n return element ? remove(element) : null;\n}\n/**\n * Animation Effect Calculation Started Here\n * @param currentTime\n * @param startValue\n * @param endValue\n * @param duration\n * @private\n */\nexport function linear(currentTime, startValue, endValue, duration) {\n return -endValue * Math.cos(currentTime / duration * (Math.PI / 2)) + endValue + startValue;\n}\nexport function reverselinear(currentTime, startValue, endValue, duration) {\n return -startValue * Math.sin(currentTime / duration * (Math.PI / 2)) + endValue + startValue;\n}\n/** @private */\nexport function getAnimationFunction(effect) {\n var functionName;\n switch (effect) {\n case 'Linear':\n functionName = linear;\n break;\n case 'Reverse':\n functionName = reverselinear;\n break;\n }\n return functionName;\n}\n/**\n * Internal rendering of text\n * @private\n */\nexport function renderTextElement(options, font, color, parent) {\n var renderOptions = {\n 'id': options.id,\n 'x': options.x,\n 'y': options.y,\n 'fill': color,\n 'font-size': font.size,\n 'font-style': font.fontStyle,\n 'font-family': font.fontFamily,\n 'font-weight': font.fontWeight,\n 'text-anchor': options.anchor,\n 'opacity': font.opacity\n };\n var text = options.text;\n var renderer = new SvgRenderer('');\n var height;\n var htmlObject = renderer.createText(renderOptions, text);\n parent.appendChild(htmlObject);\n return htmlObject;\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { SvgRenderer, createElement, remove } from '@syncfusion/ej2-base';\n/**\n * Sparkline control helper file\n */\n/**\n * sparkline internal use of `Size` type\n * @private\n */\nvar Size = /** @class */ (function () {\n function Size(width, height) {\n this.width = width;\n this.height = height;\n }\n return Size;\n}());\nexport { Size };\n/**\n * To find number from string\n * @private\n */\nexport function stringToNumber(value, containerSize) {\n if (value !== null && value !== undefined) {\n return value.indexOf('%') !== -1 ? (containerSize / 100) * parseInt(value, 10) : parseInt(value, 10);\n }\n return null;\n}\n/**\n * Method to calculate the width and height of the sparkline\n */\nexport function calculateSize(sparkline) {\n var containerWidth = sparkline.element.clientWidth;\n var containerHeight = sparkline.element.clientHeight;\n sparkline.availableSize = new Size(stringToNumber(sparkline.width, containerWidth) || containerWidth || 100, stringToNumber(sparkline.height, containerHeight) || containerHeight || (sparkline.isDevice ?\n Math.min(window.innerWidth, window.innerHeight) : 50));\n}\n/**\n * Method to create svg for sparkline.\n */\nexport function createSvg(sparkline) {\n sparkline.renderer = new SvgRenderer(sparkline.element.id);\n calculateSize(sparkline);\n sparkline.svgObject = sparkline.renderer.createSvg({\n id: sparkline.element.id + '_svg',\n width: sparkline.availableSize.width,\n height: sparkline.availableSize.height\n });\n}\n/**\n * Internal use of type rect\n * @private\n */\nvar Rect = /** @class */ (function () {\n function Rect(x, y, width, height) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n return Rect;\n}());\nexport { Rect };\n/**\n * Internal use of path options\n * @private\n */\nvar PathOption = /** @class */ (function () {\n function PathOption(id, fill, width, color, opacity, dashArray, d) {\n this.id = id;\n this.fill = fill;\n this.opacity = opacity;\n this['stroke-width'] = width;\n this.stroke = color;\n this.d = d;\n this['stroke-dasharray'] = dashArray;\n }\n return PathOption;\n}());\nexport { PathOption };\n/**\n * Internal use of rectangle options\n * @private\n */\nvar RectOption = /** @class */ (function (_super) {\n __extends(RectOption, _super);\n function RectOption(id, fill, border, opacity, rect, tl, tr, bl, br) {\n if (tl === void 0) { tl = 0; }\n if (tr === void 0) { tr = 0; }\n if (bl === void 0) { bl = 0; }\n if (br === void 0) { br = 0; }\n var _this = _super.call(this, id, fill, border.width, border.color, opacity) || this;\n _this.rect = rect;\n _this.topLeft = tl;\n _this.topRight = tr;\n _this.bottomLeft = bl;\n _this.bottomRight = br;\n return _this;\n }\n return RectOption;\n}(PathOption));\nexport { RectOption };\n/**\n * Internal use of circle options\n * @private\n */\nvar CircleOption = /** @class */ (function (_super) {\n __extends(CircleOption, _super);\n function CircleOption(id, fill, border, opacity, cx, cy, r, dashArray) {\n var _this = _super.call(this, id, fill, border.width, border.color, opacity) || this;\n _this.cy = cy;\n _this.cx = cx;\n _this.r = r;\n _this['stroke-dasharray'] = dashArray;\n return _this;\n }\n return CircleOption;\n}(PathOption));\nexport { CircleOption };\n/**\n * Internal use of append shape element\n * @private\n */\nexport function appendShape(shape, element) {\n if (element) {\n element.appendChild(shape);\n }\n return shape;\n}\n/**\n * Internal rendering of Circle\n * @private\n */\nexport function drawCircle(sparkline, options, element) {\n return appendShape(sparkline.renderer.drawCircle(options), element);\n}\n/**\n * To get rounded rect path direction\n */\nexport function calculateRoundedRectPath(r, topLeft, topRight, bottomLeft, bottomRight) {\n return 'M' + ' ' + r.x + ' ' + (topLeft + r.y) +\n ' Q ' + r.x + ' ' + r.y + ' ' + (r.x + topLeft) + ' ' +\n r.y + ' ' + 'L' + ' ' + (r.x + r.width - topRight) + ' ' + r.y +\n ' Q ' + (r.x + r.width) + ' ' + r.y + ' ' +\n (r.x + r.width) + ' ' + (r.y + topRight) + ' ' + 'L ' +\n (r.x + r.width) + ' ' + (r.y + r.height - bottomRight)\n + ' Q ' + (r.x + r.width) + ' ' + (r.y + r.height) + ' ' + (r.x + r.width - bottomRight) + ' ' +\n (r.y + r.height) + ' ' + 'L ' + (r.x + bottomLeft) + ' ' + (r.y + r.height) + ' Q ' + r.x + ' ' +\n (r.y + r.height) + ' ' + r.x + ' ' + (r.y + r.height - bottomLeft) + ' ' + 'L' + ' ' + r.x + ' ' +\n (topLeft + r.y) + ' ' + 'Z';\n}\n/**\n * Internal rendering of Rectangle\n * @private\n */\nexport function drawRectangle(sparkline, options, element) {\n options.d = calculateRoundedRectPath(options.rect, options.topLeft, options.topRight, options.bottomLeft, options.bottomRight);\n return appendShape(sparkline.renderer.drawPath(options), element);\n}\n/**\n * Internal rendering of Path\n * @private\n */\nexport function drawPath(sparkline, options, element) {\n return appendShape(sparkline.renderer.drawPath(options), element);\n}\n/**\n * Function to measure the height and width of the text.\n * @param {string} text\n * @param {SparklineFontModel} font\n * @param {string} id\n * @returns no\n * @private\n */\nexport function measureText(text, font) {\n var htmlObject = document.getElementById('sparklinesmeasuretext');\n if (htmlObject === null) {\n htmlObject = createElement('text', { id: 'sparklinesmeasuretext' });\n document.body.appendChild(htmlObject);\n }\n htmlObject.innerHTML = text;\n htmlObject.style.fontStyle = font.fontStyle;\n htmlObject.style.fontFamily = font.fontFamily;\n htmlObject.style.visibility = 'hidden';\n htmlObject.style.top = '-100';\n htmlObject.style.left = '0';\n htmlObject.style.position = 'absolute';\n htmlObject.style.fontSize = font.size;\n htmlObject.style.fontWeight = font.fontWeight;\n htmlObject.style.whiteSpace = 'nowrap';\n // For bootstrap line height issue\n htmlObject.style.lineHeight = 'normal';\n return new Size(htmlObject.clientWidth, htmlObject.clientHeight);\n}\n/**\n * Internal use of text options\n * @private\n */\nvar TextOption = /** @class */ (function () {\n function TextOption(id, x, y, anchor, text, baseLine, transform) {\n if (transform === void 0) { transform = ''; }\n this.transform = '';\n this.baseLine = 'auto';\n this.id = id;\n this.x = x;\n this.y = y;\n this.anchor = anchor;\n this.text = text;\n this.transform = transform;\n this.baseLine = baseLine;\n }\n return TextOption;\n}());\nexport { TextOption };\n/**\n * Internal rendering of text\n * @private\n */\nexport function renderTextElement(options, font, color, parent) {\n var textOptions = {\n 'id': options.id,\n 'x': options.x,\n 'y': options.y,\n 'transform': options.transform,\n 'opacity': font.opacity,\n 'fill': color,\n 'font-family': font.fontFamily,\n 'font-weight': font.fontWeight,\n 'font-size': font.size,\n 'font-style': font.fontStyle,\n 'text-anchor': options.anchor,\n 'dominant-baseline': options.baseLine\n };\n var renderer = new SvgRenderer('');\n var htmlObject = renderer.createText(textOptions, options.text);\n htmlObject.style['user-select'] = 'none';\n htmlObject.style['-moz-user-select'] = 'none';\n htmlObject.style['-webkit-touch-callout'] = 'none';\n htmlObject.style['-webkit-user-select'] = 'none';\n htmlObject.style['-khtml-user-select'] = 'none';\n htmlObject.style['-ms-user-select'] = 'none';\n htmlObject.style['-o-user-select'] = 'none';\n parent.appendChild(htmlObject);\n return htmlObject;\n}\n/**\n * To remove element by id\n */\nexport function removeElement(id) {\n var element = document.getElementById(id);\n return element ? remove(element) : null;\n}\n/**\n * To find the element by id\n */\nexport function getIdElement(id) {\n return document.getElementById(id);\n}\n/**\n * To find point within the bounds.\n */\nexport function withInBounds(x, y, bounds) {\n return (x >= bounds.x && x <= bounds.x + bounds.width && y >= bounds.y && y <= bounds.y + bounds.height);\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * Specifies Circular-Gauge Helper methods\n */\nimport { SvgRenderer, compile as templateComplier } from '@syncfusion/ej2-base';\nimport { merge } from '@syncfusion/ej2-base';\nimport { createElement, remove, setStyleAttribute } from '@syncfusion/ej2-base';\n/**\n * Function to measure the height and width of the text.\n * @param {string} text\n * @param {FontModel} font\n * @param {string} id\n * @returns Size\n * @private\n */\nexport function measureText(text, font) {\n var htmlObject = document.getElementById('gauge-measuretext');\n if (htmlObject === null) {\n htmlObject = createElement('text', { id: 'gauge-measuretext' });\n document.body.appendChild(htmlObject);\n }\n var style = 'position: absolute; visibility: hidden;' +\n ';left: 0; top: -100; white-space: nowrap;' + getFontStyle(font);\n htmlObject.innerHTML = text;\n htmlObject.setAttribute('style', style);\n return new Size(htmlObject.clientWidth, htmlObject.clientHeight);\n}\n/**\n * Function to find number from string\n * * @returns number\n * @private\n */\nexport function toPixel(value, maxDimension) {\n if (value !== null && value !== undefined) {\n return value.indexOf('%') !== -1 ? (maxDimension / 100) * parseInt(value, 10) : parseInt(value, 10);\n }\n return null;\n}\n/**\n * Function to get the style from FontModel.\n * @returns string\n * @private\n */\nexport function getFontStyle(font) {\n var style = '';\n style = 'font-size:' + font.size +\n '; font-style:' + font.fontStyle + '; font-weight:' + font.fontWeight +\n '; font-family:' + font.fontFamily + ';opacity:' + font.opacity +\n '; color:' + font.color + ';';\n return style;\n}\n/**\n * Function to set style to the element.\n * @private\n */\nexport function setStyles(element, fill, border) {\n setStyleAttribute(element, {\n 'stroke': border.color, 'stroke-width': border.width,\n 'fill': fill\n });\n}\n/**\n * Function to measure the element rect.\n * @returns ClientRect\n * @private\n */\nexport function measureElementRect(element) {\n var bounds;\n document.body.appendChild(element);\n bounds = element.getBoundingClientRect();\n removeElement(element.id);\n return bounds;\n}\n/**\n * Function to convert the number from string.\n * @returns number\n * @private\n */\nexport function stringToNumber(value, containerSize) {\n if (value !== null && value !== undefined) {\n return value.indexOf('%') !== -1 ? (containerSize / 100) * parseInt(value, 10) : parseInt(value, 10);\n }\n return null;\n}\n/**\n * Function to create the text element.\n * @returns Element\n * @private\n */\nexport function textElement(options, font, color, parent, styles) {\n var renderOptions = {};\n var htmlObject;\n var renderer = new SvgRenderer('');\n var style = styles + ' font-size:' + font.size + '; font-style:' + font.fontStyle +\n ' ; font-weight:' + font.fontWeight + '; font-family:' + font.fontFamily + ';';\n renderOptions = {\n 'id': options.id,\n 'x': options.x,\n 'y': options.y,\n 'fill': color,\n 'text-anchor': options.anchor,\n 'transform': options.transform,\n 'opacity': font.opacity,\n 'dominant-baseline': options.baseLine,\n 'style': style\n };\n htmlObject = renderer.createText(renderOptions, options.text);\n parent.appendChild(htmlObject);\n return htmlObject;\n}\n/**\n * Function to append the path to the element.\n * @returns Element\n * @private\n */\nexport function appendPath(options, element, gauge, functionName) {\n functionName = functionName ? functionName : 'Path';\n var htmlObject = gauge.renderer['draw' + functionName](options);\n htmlObject.setAttribute('transform', options.transform);\n htmlObject.setAttribute('style', options.style);\n element.appendChild(htmlObject);\n return htmlObject;\n}\n/**\n * Function to calculate the sum of array values.\n * @returns number\n * @private\n */\nexport function calculateSum(from, to, values) {\n var sum = 0;\n var length = values.length;\n for (; from < length; from++) {\n sum += values[from];\n }\n return sum;\n}\n/**\n * Function to calculate the value for linear animation effect\n * @param currentTime\n * @param startValue\n * @param endValue\n * @param duration\n * @private\n */\nexport function linear(currentTime, startValue, endValue, duration) {\n return -endValue * Math.cos(currentTime / duration * (Math.PI / 2)) + endValue + startValue;\n}\n/**\n * Function to get the angle from value for circular gauge.\n * @returns number\n * @private\n */\nexport function getAngleFromValue(value, maximumValue, minimumValue, startAngle, endAngle, isClockWise) {\n var angle;\n endAngle -= isCompleteAngle(startAngle, endAngle) ? 0.0001 : 0;\n startAngle -= 90;\n endAngle -= 90;\n if (isClockWise) {\n angle = ((value - minimumValue) * (getDegree(startAngle, endAngle) / (maximumValue - minimumValue))) + startAngle;\n }\n else {\n angle = endAngle - ((value - minimumValue) * (getDegree(startAngle, endAngle) / (maximumValue - minimumValue)));\n angle = angle < 0 ? 360 + angle : angle;\n }\n angle = Math.round(angle) >= 360 ? (angle - 360) : Math.round(angle) < 0 ? (360 + angle) : angle;\n return angle;\n}\n/**\n * Function to get the degree for circular gauge.\n * @returns number\n * @private\n */\nexport function getDegree(startAngle, endAngle) {\n var degree = endAngle - startAngle;\n return degree < 0 ? (degree + 360) : degree;\n}\n/**\n * Function to get the value from angle for circular gauge.\n * @returns number\n * @private\n */\nexport function getValueFromAngle(angle, maximumValue, minimumValue, startAngle, endAngle, isClockWise) {\n endAngle -= isCompleteAngle(startAngle, endAngle) ? 0.0001 : 0;\n angle = angle < startAngle ? (angle + 360) : angle;\n if (isClockWise) {\n return (((angle - startAngle) / getDegree(startAngle, endAngle)) * (maximumValue - minimumValue)) + minimumValue;\n }\n else {\n return maximumValue - ((((angle - startAngle) / getDegree(startAngle, endAngle)) * (maximumValue - minimumValue)) + minimumValue);\n }\n}\n/**\n * Function to check whether it's a complete circle for circular gauge.\n * @returns boolean\n * @private\n */\nexport function isCompleteAngle(startAngle, endAngle) {\n var totalAngle = endAngle - startAngle;\n totalAngle = totalAngle <= 0 ? (totalAngle + 360) : totalAngle;\n return Math.floor(totalAngle / 360) !== 0;\n}\n/**\n * Function to get angle from location for circular gauge.\n * @returns number\n * @private\n */\nexport function getAngleFromLocation(center, point) {\n var angle = Math.atan2((point.y - center.y), (point.x - center.x));\n angle = Math.round((angle < 0 ? (6.283 + angle) : angle) * (180 / Math.PI)) - 270;\n angle += angle < 0 ? 360 : 0;\n return angle;\n}\n/**\n * Function to get the location from angle for circular gauge.\n * @returns GaugeLocation\n * @private\n */\nexport function getLocationFromAngle(degree, radius, center) {\n var radian = (degree * Math.PI) / 180;\n return new GaugeLocation(Math.cos(radian) * radius + center.x, Math.sin(radian) * radius + center.y);\n}\n/**\n * Function to get the path direction of the circular gauge.\n * @returns string\n * @private\n */\nexport function getPathArc(center, start, end, radius, startWidth, endWidth) {\n end -= isCompleteAngle(start, end) ? 0.0001 : 0;\n var degree = getDegree(start, end);\n var startRadius = radius - startWidth;\n var endRadius = radius - endWidth;\n var arcRadius = radius - ((startWidth + endWidth) / 2);\n if (startWidth !== undefined && endWidth !== undefined) {\n return getRangePath(getLocationFromAngle(start, radius, center), getLocationFromAngle(end, radius, center), getLocationFromAngle(start, startRadius, center), getLocationFromAngle(end, endRadius, center), radius, arcRadius, arcRadius, (degree < 180) ? 0 : 1);\n }\n else {\n return getCirclePath(getLocationFromAngle(start, radius, center), getLocationFromAngle(end, radius, center), radius, (degree < 180) ? 0 : 1);\n }\n}\n/**\n * Function to get the range path direction of the circular gauge.\n * @returns string\n * @private\n */\nexport function getRangePath(start, end, innerStart, innerEnd, radius, startRadius, endRadius, clockWise) {\n return 'M ' + start.x + ' ' + start.y +\n ' A ' + radius + ' ' + radius + ' 0 ' +\n clockWise + ' 1 ' + end.x + ' ' + end.y +\n ' L ' + innerEnd.x + ' ' + innerEnd.y +\n ' A ' + endRadius + ' ' + startRadius + ' 0 ' +\n clockWise + ' 0 ' + innerStart.x + ' ' + innerStart.y + ' Z';\n}\n/**\n * Function to calculate the complete path arc of the circular gauge.\n * @returns string\n * @private\n */\nexport function getCompleteArc(center, start, end, radius, innerRadius) {\n end -= isCompleteAngle(start, end) ? 0.0001 : 0;\n var degree = getDegree(start, end);\n return getCompletePath(center, getLocationFromAngle(start, radius, center), getLocationFromAngle(end, radius, center), radius, getLocationFromAngle(start, innerRadius, center), getLocationFromAngle(end, innerRadius, center), innerRadius, (degree < 180) ? 0 : 1);\n}\n/**\n * Function to get the circular path direction of the circular gauge.\n * @returns string\n * @private\n */\nexport function getCirclePath(start, end, radius, clockWise) {\n return 'M ' + start.x + ' ' + start.y + ' A ' + radius + ' ' +\n radius + ' 0 ' + clockWise + ' 1 ' + end.x + ' ' + end.y;\n}\n/**\n * Function to get the complete path direction of the circular gauge.\n * @returns string\n * @private\n */\nexport function getCompletePath(center, start, end, radius, innerStart, innerEnd, innerRadius, clockWise) {\n return 'M ' + start.x + ' ' + start.y + ' A ' + radius + ' ' + radius + ' 0 ' + clockWise +\n ' 1 ' + end.x + ' ' + end.y + ' L ' + innerEnd.x + ' ' + innerEnd.y + ' A ' + innerRadius +\n ' ' + innerRadius + ' 0 ' + clockWise + ',0 ' + innerStart.x + ' ' + innerStart.y + ' Z';\n}\n/**\n * Function to get element from id.\n * @returns Element\n * @private\n */\nexport function getElement(id) {\n return document.getElementById(id);\n}\n/**\n * Function to compile the template function for circular gauge.\n * @returns Function\n * @private\n */\nexport function getTemplateFunction(template) {\n var templateFn = null;\n var e;\n try {\n if (document.querySelectorAll(template).length) {\n templateFn = templateComplier(document.querySelector(template).innerHTML.trim());\n }\n }\n catch (e) {\n templateFn = templateComplier(template);\n }\n return templateFn;\n}\n/**\n * Function to remove the element from id.\n * @private\n */\nexport function removeElement(id) {\n var element = getElement(id);\n if (element) {\n remove(element);\n }\n}\n/**\n * Function to get current point for circular gauge using element id.\n * @returns IVisiblePointer\n * @private\n */\nexport function getPointer(targetId, gauge) {\n var tempString;\n tempString = targetId.split(gauge.element.id + '_Axis_')[1];\n return {\n axisIndex: +tempString[0],\n pointerIndex: +tempString[tempString.length - 1]\n };\n}\n/**\n * Function to convert the label using formar for cirular gauge.\n * @returns string\n * @private\n */\nexport function getLabelFormat(format) {\n var customLabelFormat = format && format.match('{value}') !== null;\n var skeleton = customLabelFormat ? '' : format;\n return skeleton;\n}\n/**\n * Function to calculate the marker shape for circular gauge.\n * @returns PathOption\n * @private\n */\nexport function calculateShapes(location, shape, size, url, options) {\n var path;\n var width = size.width;\n var height = size.height;\n var locX = location.x;\n var locY = location.y;\n var x = location.x + (-width / 2);\n var y = location.y + (-height / 2);\n switch (shape) {\n case 'Circle':\n merge(options, { 'rx': width / 2, 'ry': height / 2, 'cx': locX, 'cy': locY });\n break;\n case 'Diamond':\n path = 'M' + ' ' + x + ' ' + locY + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + locY + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + locY + ' Z';\n merge(options, { 'd': path });\n break;\n case 'Rectangle':\n path = 'M' + ' ' + x + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (locY + (-height / 2)) + ' Z';\n merge(options, { 'd': path });\n break;\n case 'Triangle':\n path = 'M' + ' ' + locX + ' ' + locY + ' ' +\n 'L' + ' ' + (locX - height) + ' ' + (locY - (width / 2)) +\n 'L' + ' ' + (locX - height) + ' ' + (locY + (width / 2)) + ' Z';\n merge(options, { 'd': path });\n break;\n case 'InvertedTriangle':\n path = 'M' + ' ' + locX + ' ' + locY + ' ' +\n 'L' + ' ' + (locX + height) + ' ' + (locY - (width / 2)) +\n 'L' + ' ' + (locX + height) + ' ' + (locY + (width / 2)) + ' Z';\n merge(options, { 'd': path });\n break;\n case 'Image':\n merge(options, { 'href': url, 'height': height, 'width': width, x: x, y: y });\n break;\n }\n return options;\n}\n/**\n * Function to get range color from value for circular gauge.\n * @returns string\n * @private\n */\nexport function getRangeColor(value, ranges, color) {\n var min = 0;\n var max = 0;\n var currentRange = ranges.filter(function (range) {\n min = Math.min(range.start, range.end);\n max = Math.max(range.start, range.end);\n return (value >= min && max >= value);\n });\n return currentRange.length ? currentRange[0].rangeColor : color;\n}\n/** @private */\nvar CustomizeOption = /** @class */ (function () {\n function CustomizeOption(id) {\n this.id = id;\n }\n return CustomizeOption;\n}());\nexport { CustomizeOption };\n/** @private */\nvar PathOption = /** @class */ (function (_super) {\n __extends(PathOption, _super);\n function PathOption(id, fill, width, color, opacity, dashArray, d, transform, style) {\n if (transform === void 0) { transform = ''; }\n if (style === void 0) { style = ''; }\n var _this = _super.call(this, id) || this;\n _this.opacity = opacity;\n _this.fill = fill;\n _this.stroke = color;\n _this['stroke-width'] = width;\n _this['stroke-dasharray'] = dashArray;\n _this.d = d;\n _this.transform = transform;\n _this.style = style;\n return _this;\n }\n return PathOption;\n}(CustomizeOption));\nexport { PathOption };\n/** @private */\nvar RectOption = /** @class */ (function (_super) {\n __extends(RectOption, _super);\n function RectOption(id, fill, border, opacity, rect) {\n var _this = _super.call(this, id) || this;\n _this.y = rect.y;\n _this.x = rect.x;\n _this.height = rect.height;\n _this.width = rect.width;\n _this.opacity = opacity;\n _this.fill = fill;\n _this.stroke = border.color;\n _this['stroke-width'] = border.width;\n return _this;\n }\n return RectOption;\n}(CustomizeOption));\nexport { RectOption };\n/**\n * Internal class size\n */\nvar Size = /** @class */ (function () {\n function Size(width, height) {\n this.width = width;\n this.height = height;\n }\n return Size;\n}());\nexport { Size };\n/** @private */\nvar GaugeLocation = /** @class */ (function () {\n function GaugeLocation(x, y) {\n this.x = x;\n this.y = y;\n }\n return GaugeLocation;\n}());\nexport { GaugeLocation };\n/** @private */\nvar Rect = /** @class */ (function () {\n function Rect(x, y, width, height) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n return Rect;\n}());\nexport { Rect };\n/** @private */\nvar TextOption = /** @class */ (function (_super) {\n __extends(TextOption, _super);\n function TextOption(id, x, y, anchor, text, transform, baseLine) {\n if (transform === void 0) { transform = ''; }\n var _this = _super.call(this, id) || this;\n _this.transform = '';\n _this.baseLine = 'auto';\n _this.x = x;\n _this.y = y;\n _this.anchor = anchor;\n _this.text = text;\n _this.transform = transform;\n _this.baseLine = baseLine;\n return _this;\n }\n return TextOption;\n}(CustomizeOption));\nexport { TextOption };\n/** @private */\nvar VisibleLabels = /** @class */ (function () {\n function VisibleLabels(text, value, size) {\n this.text = text;\n this.value = value;\n this.size = size;\n }\n return VisibleLabels;\n}());\nexport { VisibleLabels };\n","/**\n * These utility methods help to process the data and to convert it to desired dimensions\n */\n/** @private */\nexport function processPathData(data) {\n var collection = [];\n var arrayCollection = parsePathData(data);\n if (arrayCollection.length > 0) {\n for (var i = 0; i < arrayCollection.length; i++) {\n var ob = arrayCollection[i];\n var char = '';\n char = ob[0];\n switch (char.toLowerCase()) {\n case 'm':\n collection.push({ command: char, x: ob[1], y: ob[2] });\n break;\n case 'l':\n case 't':\n collection.push({ command: char, x: ob[1], y: ob[2] });\n break;\n case 'h':\n collection.push({ command: char, x: ob[1] });\n break;\n case 'v':\n collection.push({ command: char, y: ob[1] });\n break;\n case 'z':\n collection.push({ command: char });\n break;\n case 'c':\n collection.push({ command: char, x1: ob[1], y1: ob[2], x2: ob[3], y2: ob[4], x: ob[5], y: ob[6] });\n break;\n case 's':\n collection.push({ command: char, x2: ob[1], y2: ob[2], x: ob[3], y: ob[4] });\n break;\n case 'q':\n collection.push({ command: char, x1: ob[1], y1: ob[2], x: ob[3], y: ob[4] });\n break;\n case 'a':\n var l = ob[4];\n var s = ob[5];\n collection.push({ command: char, r1: ob[1], r2: ob[2], angle: ob[3], largeArc: l, sweep: s, x: ob[6], y: ob[7] });\n break;\n }\n }\n }\n return collection;\n}\n/** @private */\nexport function parsePathData(data) {\n var tokenizer = /([a-z]+)|([+-]?(?:\\d+\\.?\\d*|\\.\\d+))/gi;\n var current = [];\n var commands = [];\n var match = {};\n tokenizer.lastIndex = 0;\n var isExponential = false;\n match = tokenizer.exec(data);\n while (match) {\n if (match[1] === 'e') {\n var s1 = '';\n isExponential = true;\n }\n else if (match[1]) {\n if (match[1].toLowerCase() === 'zm') {\n if (current.length) {\n commands.push(current);\n }\n commands.push(['Z']);\n current = [match[1].substring(1, 2)];\n }\n else {\n if (current.length) {\n commands.push(current);\n }\n current = [match[1]];\n }\n isExponential = false;\n }\n else {\n if (!current.length) {\n current = [];\n }\n if (!isExponential) {\n current.push(Number(match[2]));\n }\n isExponential = false;\n }\n match = tokenizer.exec(data);\n }\n if (current.length) {\n commands.push(current);\n }\n return commands;\n}\n/**\n * Used to find the path for rounded rect\n */\nexport function getRectanglePath(cornerRadius, height, width) {\n var x = 0;\n var y = 0;\n var path = '';\n var points = [{ x: x + cornerRadius, y: y }, { x: x + width - cornerRadius, y: y },\n { x: x + width, y: y + cornerRadius }, { x: x + width, y: y + height - cornerRadius },\n { x: x + width - cornerRadius, y: y + height }, { x: x + cornerRadius, y: y + height },\n { x: x, y: y + height - cornerRadius }, { x: x, y: y + cornerRadius }\n ];\n var corners = [{ x: x + width, y: y }, { x: x + width, y: y + height }, { x: x, y: y + height }, { x: x, y: y }];\n var corner = 0;\n var point2;\n var next;\n path = 'M' + points[0].x + ' ' + points[0].y;\n var i;\n for (i = 0; i < points.length; i = i + 2) {\n point2 = points[i + 1];\n path += 'L' + point2.x + ' ' + point2.y;\n next = points[i + 2] || points[0];\n path += 'Q' + corners[corner].x + ' ' + corners[corner].y + ' ' + next.x + ' ' + next.y;\n corner++;\n }\n return path;\n}\n/**\n * Used to find the path for polygon shapes\n */\nexport function getPolygonPath(collection) {\n var path = '';\n var seg;\n path = 'M' + collection[0].x + ' ' + collection[0].y;\n var i;\n for (i = 1; i < collection.length; i++) {\n seg = collection[i];\n path += 'L' + seg.x + ' ' + seg.y;\n }\n path += 'Z';\n return path;\n}\n/** @private */\nexport function pathSegmentCollection(collection) {\n var x0;\n var y0;\n var x1;\n var y1;\n var x2;\n var y2;\n var x;\n var y;\n var length;\n var i;\n var initx;\n var inity;\n var segments = [];\n for (x = 0, y = 0, i = 0, length = collection.length; i < length; ++i) {\n var obj = collection[i];\n var seg = obj;\n var char = '';\n char = seg.command;\n if ('y1' in seg) {\n y1 = seg.y1;\n }\n if ('y2' in seg) {\n y2 = seg.y2;\n }\n if ('x1' in seg) {\n x1 = seg.x1;\n }\n if ('x2' in seg) {\n x2 = seg.x2;\n }\n if ('x' in seg) {\n x = seg.x;\n }\n if ('y' in seg) {\n y = seg.y;\n }\n var prev = segments[segments.length - 1];\n switch (char) {\n case 'M':\n segments.push({ command: 'M', x: x, y: y });\n break;\n case 'L':\n segments.push({ command: 'L', x0: x0, y0: y0, x: x, y: y });\n break;\n case 'H':\n segments.push({ command: 'L', x0: x0, y0: y0, x: x, y: y0 });\n break;\n case 'V':\n segments.push({ command: 'L', x0: x0, y0: y0, x: x0, y: y });\n break;\n case 'C':\n segments.push({ command: 'C', x0: x0, y0: y0, x1: x1, y1: y1, x2: x2, y2: y2, x: x, y: y });\n break;\n case 'S':\n if (prev) {\n var ctrl = void 0;\n if (prev.command === 'C' || prev.command === 'S') {\n ctrl = { x: prev.x2, y: prev.y2 };\n }\n else {\n ctrl = { x: x0, y: y0 };\n }\n var cpt2 = { x: 2 * x0 - ctrl.x, y: 2 * y0 - ctrl.y };\n segments.push({ command: 'C', x0: x0, y0: y0, x1: cpt2.x, y1: cpt2.y, x2: x2, y2: y2, x: x, y: y });\n }\n break;\n case 'Q':\n //ctx.quadraticCurveTo(x1, y1, x, y);\n segments.push({ command: 'Q', x0: x0, y0: y0, x1: x1, y1: y1, x: x, y: y });\n break;\n case 'T':\n if (prev) {\n var ctrl = void 0;\n if (prev.command === 'Q') {\n ctrl = { x: prev.x1, y: prev.y1 };\n }\n else {\n ctrl = { x: x0, y: y0 };\n }\n var cpt2 = { x: 2 * x0 - ctrl.x, y: 2 * y0 - ctrl.y };\n segments.push({ command: 'Q', x0: x0, y0: y0, x1: cpt2.x, y1: cpt2.y, x: x, y: y });\n }\n break;\n case 'A':\n var newSeg = seg;\n newSeg.command = 'A';\n segments.push(newSeg);\n break;\n case 'Z':\n case 'z':\n segments.push({ command: 'Z' });\n x = x0;\n y = y0;\n break;\n }\n if (char === 'M' || char === 'm') {\n initx = x;\n inity = y;\n }\n x0 = x;\n y0 = y;\n }\n return segments;\n}\n/** @private */\nexport function transformPath(arr, sX, sY, s, bX, bY, iX, iY) {\n var x0;\n var y0;\n var x1;\n var y1;\n var x2;\n var y2;\n var x;\n var y;\n var length;\n var i;\n var newSeg;\n for (x = 0, y = 0, i = 0, length = arr.length; i < length; ++i) {\n var obj = arr[i];\n var seg = obj;\n var char = seg.command;\n if ('x' in seg) {\n x = seg.x;\n }\n if ('y' in seg) {\n y = seg.y;\n }\n if ('y1' in seg) {\n y1 = seg.y1;\n }\n if ('y2' in seg) {\n y2 = seg.y2;\n }\n if ('x1' in seg) {\n x1 = seg.x1;\n }\n if ('x2' in seg) {\n x2 = seg.x2;\n }\n if (s) {\n if (x !== undefined) {\n x = scalePathData(x, sX, bX, iX);\n }\n if (y !== undefined) {\n y = scalePathData(y, sY, bY, iY);\n }\n if (x1 !== undefined) {\n x1 = scalePathData(x1, sX, bX, iX);\n }\n if (y1 !== undefined) {\n y1 = scalePathData(y1, sY, bY, iY);\n }\n if (x2 !== undefined) {\n x2 = scalePathData(x2, sX, bX, iX);\n }\n if (y2 !== undefined) {\n y2 = scalePathData(y2, sY, bY, iY);\n }\n }\n else {\n if (x !== undefined) {\n x = Number((x + sX).toFixed(2));\n }\n if (y !== undefined) {\n y = Number((y + sY).toFixed(2));\n }\n if (x1 !== undefined) {\n x1 = Number((x1 + sX).toFixed(2));\n }\n if (y1 !== undefined) {\n y1 = Number((y1 + sY).toFixed(2));\n }\n if (x2 !== undefined) {\n x2 = Number((x2 + sX).toFixed(2));\n }\n if (y2 !== undefined) {\n y2 = Number((y2 + sY).toFixed(2));\n }\n }\n var scaledPath = { x: x, y: y, x1: x1, y1: y1, x2: x2, y2: y2, r1: seg.r1, r2: seg.r2 };\n newSeg = updatedSegment(seg, char, scaledPath, s, sX, sY);\n if (newSeg) {\n arr[i] = newSeg;\n }\n // Record the start of a subpath\n if (char === 'M' || char === 'm') {\n x0 = x;\n y0 = y;\n }\n }\n var pathData = getPathString(arr);\n return pathData;\n}\n/** @private */\nexport function updatedSegment(segment, char, obj, isScale, sX, sY) {\n switch (char) {\n case 'M':\n segment.x = obj.x;\n segment.y = obj.y;\n break;\n case 'L':\n segment.x = obj.x;\n segment.y = obj.y;\n break;\n case 'H':\n segment.x = obj.x;\n break;\n case 'V':\n segment.y = obj.y;\n break;\n case 'C':\n segment.x = obj.x;\n segment.y = obj.y;\n segment.x1 = obj.x1;\n segment.y1 = obj.y1;\n segment.x2 = obj.x2;\n segment.y2 = obj.y2;\n break;\n case 'S':\n segment.x = obj.x;\n segment.y = obj.y;\n segment.x2 = obj.x2;\n segment.y2 = obj.y2;\n break;\n case 'Q':\n segment.x = obj.x;\n segment.y = obj.y;\n segment.x1 = obj.x1;\n segment.y1 = obj.y1;\n break;\n case 'T':\n segment.x = obj.x;\n segment.y = obj.y;\n break;\n case 'A':\n var r1 = obj.r1;\n var r2 = obj.r2;\n if (isScale) {\n obj.r1 = r1 = (r1 * sX);\n obj.r2 = r2 = (r2 * sY);\n }\n segment.x = obj.x;\n segment.y = obj.y;\n segment.r1 = obj.r1;\n segment.r2 = obj.r2;\n break;\n case 'z':\n case 'Z':\n segment = { command: 'Z' };\n break;\n }\n return segment;\n}\n/** @private */\nexport function scalePathData(val, scaleFactor, oldOffset, newOffset) {\n if (val !== oldOffset) {\n if (newOffset !== oldOffset) {\n val = (((val * scaleFactor) - (Number(oldOffset) * scaleFactor - Number(oldOffset)))\n + (newOffset - Number(oldOffset)));\n }\n else {\n val = ((Number(val) * scaleFactor) - (Number(oldOffset) * scaleFactor - Number(oldOffset)));\n }\n }\n else {\n if (newOffset !== oldOffset) {\n val = newOffset;\n }\n }\n return Number(val.toFixed(2));\n}\n/** @private */\nexport function splitArrayCollection(arrayCollection) {\n var x0;\n var y0;\n var x1;\n var y1;\n var x2;\n var y2;\n var x;\n var y;\n var length;\n var i;\n for (x = 0, y = 0, i = 0, length = arrayCollection.length; i < length; ++i) {\n var path = arrayCollection[i];\n var seg = path;\n var char = seg.command;\n if (/[MLHVCSQTA]/.test(char)) {\n if ('x' in seg) {\n seg.x = x = seg.x;\n }\n if ('y' in seg) {\n seg.y = y = seg.y;\n }\n }\n else {\n if ('x1' in seg) {\n seg.x1 = x1 = x + seg.x1;\n }\n if ('x2' in seg) {\n seg.x2 = x2 = x + seg.x2;\n }\n if ('y1' in seg) {\n seg.y1 = y1 = y + seg.y1;\n }\n if ('y2' in seg) {\n seg.y2 = y2 = y + seg.y2;\n }\n if ('x' in seg) {\n seg.x = x += seg.x;\n }\n if ('y' in seg) {\n seg.y = y += seg.y;\n }\n var newSeg = void 0;\n switch (char) {\n case 'm':\n case 'M':\n newSeg = { command: 'M', x: x, y: y };\n break;\n case 'l':\n case 'L':\n newSeg = { command: 'L', x: x, y: y };\n break;\n case 'h':\n case 'H':\n newSeg = { command: 'H', x: x };\n break;\n case 'v':\n case 'V':\n newSeg = { command: 'V', y: y };\n break;\n case 'c':\n case 'C':\n newSeg = { command: 'C', x: x, y: y, x1: x1, y1: y1, x2: x2, y2: y2 };\n break;\n case 's':\n case 'S':\n newSeg = { command: 'S', x: x, y: y, x2: x2, y2: y2 };\n break;\n case 'q':\n case 'Q':\n newSeg = { command: 'Q', x: x, y: y, x1: x1, y1: y1 };\n break;\n case 't':\n case 'T':\n newSeg = { command: 'T', x: x, y: y };\n break;\n case 'a':\n case 'A':\n newSeg = { command: 'A', x: x, y: y };\n newSeg.r1 = seg.r1;\n newSeg.r2 = seg.r2;\n newSeg.angle = seg.angle;\n newSeg.largeArc = seg.largeArc;\n newSeg.sweep = seg.sweep;\n break;\n case 'z':\n case 'Z':\n newSeg = { command: 'Z' };\n x = x0;\n y = y0;\n newSeg = arrayCollection[i];\n break;\n }\n if (newSeg) {\n arrayCollection[i] = newSeg;\n }\n }\n if (char === 'M' || char === 'm') {\n x0 = x;\n y0 = y;\n }\n }\n return arrayCollection;\n}\n/** @private */\nexport function getPathString(arrayCollection) {\n var getNewString = '';\n var i;\n for (i = 0; i < arrayCollection.length; i++) {\n if (i === 0) {\n getNewString += getString(arrayCollection[i]);\n }\n else {\n getNewString += ' ' + getString(arrayCollection[i]);\n }\n }\n return getNewString;\n}\n/** @private */\nexport function getString(obj) {\n var string = '';\n switch (obj.command) {\n case 'Z':\n case 'z':\n string = obj.command;\n break;\n case 'M':\n case 'm':\n case 'L':\n case 'l':\n string = obj.command + ' ' + obj.x + ' ' + obj.y;\n break;\n case 'C':\n case 'c':\n string = obj.command + ' ' + obj.x1 + ' ' + obj.y1 + ' ' + obj.x2 + ' ' + obj.y2 + ' ' + obj.x + ' ' + obj.y;\n break;\n case 'Q':\n case 'q':\n string = obj.command + ' ' + obj.x1 + ' ' + obj.y1 + ' ' + obj.x + ' ' + obj.y;\n break;\n case 'A':\n case 'a':\n var cmd = obj.command;\n var ang = obj.angle;\n var l = (obj.largeArc ? '1' : '0');\n var s = (obj.sweep ? '1' : '0');\n string = cmd + ' ' + obj.r1 + ' ' + obj.r2 + ' ' + ang + ' ' + l + ' ' + s + ' ' + obj.x + ' ' + obj.y;\n break;\n case 'H':\n case 'h':\n string = obj.command + ' ' + obj.x;\n break;\n case 'V':\n case 'v':\n string = obj.command + ' ' + obj.y;\n break;\n case 'S':\n case 's':\n string = obj.command + ' ' + obj.x2 + ' ' + obj.y2 + ' ' + obj.x + ' ' + obj.y;\n break;\n case 'T':\n case 't':\n string = obj.command + ' ' + obj.x + ' ' + obj.y;\n }\n return string;\n}\n","/**\n * Matrix module is used to transform points based on offsets, angle\n */\n/** @private */\nexport var MatrixTypes;\n(function (MatrixTypes) {\n MatrixTypes[MatrixTypes[\"Identity\"] = 0] = \"Identity\";\n MatrixTypes[MatrixTypes[\"Translation\"] = 1] = \"Translation\";\n MatrixTypes[MatrixTypes[\"Scaling\"] = 2] = \"Scaling\";\n MatrixTypes[MatrixTypes[\"Unknown\"] = 4] = \"Unknown\";\n})(MatrixTypes || (MatrixTypes = {}));\n/** @private */\nvar Matrix = /** @class */ (function () {\n function Matrix(m11, m12, m21, m22, offsetX, offsetY, type) {\n this.m11 = m11;\n this.m12 = m12;\n this.m21 = m21;\n this.m22 = m22;\n this.offsetX = offsetX;\n this.offsetY = offsetY;\n // if (type === undefined) {\n // this.type = MatrixTypes.Unknown;\n // } else {\n // this.type = type;\n // }\n this.type = type;\n }\n return Matrix;\n}());\nexport { Matrix };\n/** @private */\nexport function identityMatrix() {\n return new Matrix(1, 0, 0, 1, 0, 0, MatrixTypes.Identity);\n}\n/** @private */\nexport function transformPointByMatrix(matrix, point) {\n var pt = multiplyPoint(matrix, point.x, point.y);\n return { x: Math.round(pt.x * 100) / 100, y: Math.round(pt.y * 100) / 100 };\n}\n/** @private */\nexport function transformPointsByMatrix(matrix, points) {\n var transformedPoints = [];\n for (var _i = 0, points_1 = points; _i < points_1.length; _i++) {\n var point = points_1[_i];\n transformedPoints.push(transformPointByMatrix(matrix, point));\n }\n return transformedPoints;\n}\n/** @private */\nexport function rotateMatrix(matrix, angle, centerX, centerY) {\n angle %= 360.0;\n multiplyMatrix(matrix, createRotationRadians(angle * 0.017453292519943295, centerX ? centerX : 0, centerY ? centerY : 0));\n}\n/** @private */\nexport function scaleMatrix(matrix, scaleX, scaleY, centerX, centerY) {\n if (centerX === void 0) { centerX = 0; }\n if (centerY === void 0) { centerY = 0; }\n multiplyMatrix(matrix, createScaling(scaleX, scaleY, centerX, centerY));\n}\n/** @private */\nexport function translateMatrix(matrix, offsetX, offsetY) {\n if (matrix.type & MatrixTypes.Identity) {\n matrix.type = MatrixTypes.Translation;\n setMatrix(matrix, 1.0, 0.0, 0.0, 1.0, offsetX, offsetY);\n return;\n }\n if (matrix.type & MatrixTypes.Unknown) {\n matrix.offsetX += offsetX;\n matrix.offsetY += offsetY;\n return;\n }\n matrix.offsetX += offsetX;\n matrix.offsetY += offsetY;\n matrix.type |= MatrixTypes.Translation;\n}\n/** @private */\nfunction createScaling(scaleX, scaleY, centerX, centerY) {\n var result = identityMatrix();\n result.type = !(centerX || centerY) ? MatrixTypes.Scaling : MatrixTypes.Scaling | MatrixTypes.Translation;\n setMatrix(result, scaleX, 0.0, 0.0, scaleY, centerX - scaleX * centerX, centerY - scaleY * centerY);\n return result;\n}\n/** @private */\nfunction createRotationRadians(angle, centerX, centerY) {\n var result = identityMatrix();\n var num = Math.sin(angle);\n var num2 = Math.cos(angle);\n var offsetX = centerX * (1.0 - num2) + centerY * num;\n var offsetY = centerY * (1.0 - num2) - centerX * num;\n result.type = MatrixTypes.Unknown;\n setMatrix(result, num2, num, -num, num2, offsetX, offsetY);\n return result;\n}\n/** @private */\nfunction multiplyPoint(matrix, x, y) {\n switch (matrix.type) {\n case MatrixTypes.Identity: break;\n case MatrixTypes.Translation:\n x += matrix.offsetX;\n y += matrix.offsetY;\n break;\n case MatrixTypes.Scaling:\n x *= matrix.m11;\n y *= matrix.m22;\n break;\n case MatrixTypes.Translation | MatrixTypes.Scaling:\n x *= matrix.m11;\n x += matrix.offsetX;\n y *= matrix.m22;\n y += matrix.offsetY;\n break;\n default:\n var num = y * matrix.m21 + matrix.offsetX;\n var num2 = x * matrix.m12 + matrix.offsetY;\n x *= matrix.m11;\n x += num;\n y *= matrix.m22;\n y += num2;\n break;\n }\n return { x: x, y: y };\n}\n/** @private */\nexport function multiplyMatrix(matrix1, matrix2) {\n var type = matrix1.type;\n var type2 = matrix2.type;\n if (type2 === MatrixTypes.Identity) {\n return;\n }\n if (type === MatrixTypes.Identity) {\n assignMatrix(matrix1, matrix2);\n matrix1.type = matrix2.type;\n return;\n }\n if (type2 === MatrixTypes.Translation) {\n matrix1.offsetX += matrix2.offsetX;\n matrix1.offsetY += matrix2.offsetY;\n if (type !== MatrixTypes.Unknown) {\n matrix1.type |= MatrixTypes.Translation;\n }\n return;\n }\n if (type !== MatrixTypes.Translation) {\n var num = type << 4 | type2;\n switch (num) {\n case 34:\n matrix1.m11 *= matrix2.m11;\n matrix1.m22 *= matrix2.m22;\n return;\n case 35:\n matrix1.m11 *= matrix2.m11;\n matrix1.m22 *= matrix2.m22;\n matrix1.offsetX = matrix2.offsetX;\n matrix1.offsetY = matrix2.offsetY;\n matrix1.type = (MatrixTypes.Translation | MatrixTypes.Scaling);\n return;\n case 36: break;\n default:\n {\n switch (num) {\n case 50:\n matrix1.m11 *= matrix2.m11;\n matrix1.m22 *= matrix2.m22;\n matrix1.offsetX *= matrix2.m11;\n matrix1.offsetY *= matrix2.m22;\n return;\n case 51:\n matrix1.m11 *= matrix2.m11;\n matrix1.m22 *= matrix2.m22;\n matrix1.offsetX = matrix2.m11 * matrix1.offsetX + matrix2.offsetX;\n matrix1.offsetY = matrix2.m22 * matrix1.offsetY + matrix2.offsetY;\n return;\n case 52: break;\n default:\n switch (num) {\n case 66:\n case 67:\n case 68: break;\n default: return;\n }\n break;\n }\n break;\n }\n }\n var result = identityMatrix();\n var m11New = matrix1.m11 * matrix2.m11 + matrix1.m12 * matrix2.m21;\n var m12New = matrix1.m11 * matrix2.m12 + matrix1.m12 * matrix2.m22;\n var m21New = matrix1.m21 * matrix2.m11 + matrix1.m22 * matrix2.m21;\n var m22New = matrix1.m21 * matrix2.m12 + matrix1.m22 * matrix2.m22;\n var offsetX_1 = matrix1.offsetX * matrix2.m11 + matrix1.offsetY * matrix2.m21 + matrix2.offsetX;\n var offsetY_1 = matrix1.offsetX * matrix2.m12 + matrix1.offsetY * matrix2.m22 + matrix2.offsetY;\n setMatrix(result, m11New, m12New, m21New, m22New, offsetX_1, offsetY_1);\n if (result.m21 || result.m12) {\n result.type = MatrixTypes.Unknown;\n }\n else {\n if (result.m11 && result.m11 !== 1.0 || result.m22 && result.m22 !== 1.0) {\n result.type = MatrixTypes.Scaling;\n }\n if (result.offsetX || result.offsetY) {\n result.type |= MatrixTypes.Translation;\n }\n if ((result.type & (MatrixTypes.Translation | MatrixTypes.Scaling)) === MatrixTypes.Identity) {\n result.type = MatrixTypes.Identity;\n }\n result.type = MatrixTypes.Scaling | MatrixTypes.Translation;\n }\n assignMatrix(matrix1, result);\n matrix1.type = result.type;\n return;\n }\n var offsetX = matrix1.offsetX;\n var offsetY = matrix1.offsetY;\n matrix1.offsetX = offsetX * matrix2.m11 + offsetY * matrix2.m21 + matrix2.offsetX;\n matrix1.offsetY = offsetX * matrix2.m12 + offsetY * matrix2.m22 + matrix2.offsetY;\n if (type2 === MatrixTypes.Unknown) {\n matrix1.type = MatrixTypes.Unknown;\n return;\n }\n matrix1.type = (MatrixTypes.Translation | MatrixTypes.Scaling);\n}\n/** @private */\nfunction setMatrix(mat, m11, m12, m21, m22, x, y) {\n mat.m11 = m11;\n mat.m12 = m12;\n mat.m21 = m21;\n mat.m22 = m22;\n mat.offsetX = x;\n mat.offsetY = y;\n}\n/** @private */\nfunction assignMatrix(matrix1, matrix2) {\n matrix1.m11 = matrix2.m11;\n matrix1.m12 = matrix2.m12;\n matrix1.m21 = matrix2.m21;\n matrix1.m22 = matrix2.m22;\n matrix1.offsetX = matrix2.offsetX;\n matrix1.offsetY = matrix2.offsetY;\n matrix1.type = matrix2.type;\n}\n","import { Rect } from '../primitives/rect';\nimport { Size } from '../primitives/size';\nimport { identityMatrix, transformPointByMatrix, rotateMatrix } from '../primitives/matrix';\nimport { getValue } from '@syncfusion/ej2-base';\n/**\n * Implements the basic functionalities\n */\n/** @private */\nexport function randomId() {\n var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz';\n var id = '';\n var num;\n for (var i = 0; i < 5; i++) {\n if ('crypto' in window && 'getRandomValues' in crypto) {\n var count = new Uint16Array(1);\n // tslint:disable-next-line:no-any\n var intCrypto = window.msCrypto || window.crypto;\n num = intCrypto.getRandomValues(count)[0] % (chars.length - 1);\n }\n else {\n Math.floor(Math.random() * chars.length);\n }\n id += chars.substring(num, num + 1);\n }\n return id;\n}\n/** @private */\nexport function getBounds(element) {\n var bounds = new Rect();\n var corners = new Rect();\n var top = element.offsetY - element.actualSize.height * element.pivot.y;\n var bottom = element.offsetY + element.actualSize.height * (1 - element.pivot.y);\n var left = element.offsetX - element.actualSize.width * element.pivot.x;\n var right = element.offsetX + element.actualSize.width * (1 - element.pivot.x);\n var middleLeft = { x: left, y: (top + bottom) / 2 };\n var topCenter = { x: (left + right) / 2, y: top };\n var bottomCenter = { x: (left + right) / 2, y: bottom };\n var middleRight = { x: right, y: (top + bottom) / 2 };\n var topLeft = { x: left, y: top };\n var topRight = { x: right, y: top };\n var bottomLeft = { x: left, y: bottom };\n var bottomRight = { x: right, y: bottom };\n corners = Rect.toBounds([topLeft, topRight, bottomLeft, bottomRight]);\n element.corners = corners;\n if (element.rotateAngle !== 0 || element.parentTransform !== 0) {\n var matrix = identityMatrix();\n rotateMatrix(matrix, element.rotateAngle + element.parentTransform, element.offsetX, element.offsetY);\n topLeft = transformPointByMatrix(matrix, topLeft);\n topRight = transformPointByMatrix(matrix, topRight);\n bottomLeft = transformPointByMatrix(matrix, bottomLeft);\n bottomRight = transformPointByMatrix(matrix, bottomRight);\n //Set corners based on rotate angle\n }\n bounds = Rect.toBounds([topLeft, topRight, bottomLeft, bottomRight]);\n return bounds;\n}\n/** @private */\nexport function cloneObject(obj, additionalProp, key) {\n var newObject = {};\n var keys = 'properties';\n var prop = 'propName';\n if (obj) {\n key = obj[prop];\n var sourceObject = obj[keys] || obj;\n var properties = [];\n properties = properties.concat(Object.keys(sourceObject));\n var customProperties = [];\n if (key) {\n var propAdditional = getFunction(additionalProp);\n if (propAdditional) {\n customProperties = propAdditional(key);\n }\n else {\n customProperties = [];\n }\n properties = properties.concat(customProperties);\n }\n var internalProp = getInternalProperties(key);\n properties = properties.concat(internalProp);\n for (var _i = 0, properties_1 = properties; _i < properties_1.length; _i++) {\n var property = properties_1[_i];\n if (property !== 'wrapper') {\n var constructorId = 'constructor';\n var name_1 = 'name';\n var isEventEmmitter = obj[property] &&\n obj[property][constructorId] &&\n obj[property][constructorId][name_1] &&\n obj[property][constructorId][name_1] === 'EventEmitter'\n ? true : false;\n if (!isEventEmmitter) {\n if (obj[property] instanceof Array) {\n newObject[property] = cloneArray((internalProp.indexOf(property) === -1 && obj[keys]) ? obj[keys][property] : obj[property], additionalProp, property);\n }\n else if (obj[property] instanceof Array === false && obj[property] instanceof HTMLElement) {\n newObject[property] = obj[property].cloneNode(true).innerHtml;\n }\n else if (obj[property] instanceof Array === false && obj[property] instanceof Object) {\n newObject[property] = cloneObject((internalProp.indexOf(property) === -1 && obj[keys]) ? obj[keys][property] : obj[property]);\n }\n else {\n newObject[property] = obj[property];\n }\n }\n }\n else {\n if (obj[property]) {\n newObject[property] = {\n actualSize: {\n width: obj[property].actualSize.width, height: obj[property].actualSize.height\n }, offsetX: obj[property].offsetX, offsetY: obj[property].offsetY\n };\n }\n }\n }\n }\n return newObject;\n}\n/** @private */\nexport function getInternalProperties(propName) {\n switch (propName) {\n case 'nodes':\n return ['inEdges', 'outEdges', 'parentId', 'processId'];\n case 'connectors':\n return ['parentId'];\n }\n return [];\n}\n/** @private */\nexport function cloneArray(sourceArray, additionalProp, key) {\n var clonedArray;\n if (sourceArray) {\n clonedArray = [];\n for (var i = 0; i < sourceArray.length; i++) {\n if (sourceArray[i] instanceof Array) {\n clonedArray.push(sourceArray[i]);\n }\n else if (sourceArray[i] instanceof Object) {\n clonedArray.push(cloneObject(sourceArray[i], additionalProp, key));\n }\n else {\n clonedArray.push(sourceArray[i]);\n }\n }\n }\n return clonedArray;\n}\n/** @private */\nexport function extendObject(options, childObject) {\n var properties = 'properties';\n if (options) {\n if (!childObject) {\n childObject = { properties: {} };\n }\n var target = childObject;\n for (var _i = 0, _a = Object.keys(options); _i < _a.length; _i++) {\n var property = _a[_i];\n if (options[property] instanceof Array) {\n var extendeArray = extendArray(options[property], childObject[properties][property]);\n if (!childObject[properties][property] || !childObject[properties][property].length) {\n childObject[property] = extendeArray;\n }\n }\n else if (options[property] instanceof Array === false && options[property] instanceof HTMLElement) {\n childObject[property] = options[property].cloneNode(true).innerHtml;\n }\n else if (options[property] instanceof Array === false && options[property] instanceof Object) {\n var extendedObject = extendObject(options[property], childObject[properties][property]);\n if (extendedObject[properties] && !Object.keys(extendedObject[properties]).length) {\n delete extendedObject[properties];\n }\n childObject[property] = extendedObject;\n }\n else {\n childObject[property] = childObject[properties][property] !== undefined ?\n childObject[property] : options[property];\n }\n }\n }\n return childObject;\n}\n/** @private */\nexport function extendArray(sourceArray, childArray) {\n var clonedArray = [];\n var reset = false;\n if (!childArray) {\n childArray = [];\n }\n if (!childArray.length) {\n reset = true;\n }\n for (var i = 0; i < sourceArray.length; i++) {\n if (sourceArray[i] instanceof Array) {\n var extendedArray = extendArray(sourceArray[i], childArray[i]);\n if (reset) {\n clonedArray.push(extendArray);\n }\n }\n else if (sourceArray[i] instanceof Object) {\n var extendedObject = extendObject(sourceArray[i], childArray[i]);\n if (reset) {\n clonedArray.push(extendedObject);\n }\n }\n else {\n clonedArray.push(sourceArray[i]);\n }\n }\n return clonedArray;\n}\n/** @private */\nexport function textAlignToString(value) {\n var state = '';\n switch (value) {\n case 'Center':\n state = 'center';\n break;\n case 'Left':\n state = 'left';\n break;\n case 'Right':\n state = 'right';\n break;\n }\n return state;\n}\n/** @private */\nexport function wordBreakToString(value) {\n var state = '';\n switch (value) {\n case 'Wrap':\n state = 'breakall';\n break;\n case 'NoWrap':\n state = 'keepall';\n break;\n case 'WrapWithOverflow':\n state = 'normal';\n break;\n case 'LineThrough':\n state = 'line-through';\n break;\n }\n return state;\n}\nexport function bBoxText(textContent, options) {\n var measureElement = 'measureElement';\n window[measureElement].style.visibility = 'visible';\n var svg = window[measureElement].children[2];\n var text = svg.children[1];\n text.textContent = textContent;\n text.setAttribute('style', 'font-size:' + options.fontSize + 'px; font-family:'\n + options.fontFamily + ';font-weight:' + (options.bold ? 'bold' : 'normal'));\n var bBox = text.getBBox().width;\n window[measureElement].style.visibility = 'hidden';\n return bBox;\n}\n/** @private */\nexport function middleElement(i, j) {\n var m = 0;\n m = (i + j) / 2;\n return m;\n}\n/** @private */\nexport function overFlow(text, options) {\n var i = 0;\n var j = 0;\n var middle = 0;\n var bounds = 0;\n var temp = '';\n j = text.length;\n var t = 0;\n do {\n if (bounds > 0) {\n i = middle;\n }\n middle = Math.floor(middleElement(i, j));\n temp += text.substr(i, middle);\n bounds = bBoxText(temp, options);\n } while (bounds <= options.width);\n temp = temp.substr(0, i);\n for (t = i; t < j; t++) {\n temp += text[t];\n bounds = bBoxText(temp, options);\n if (bounds >= options.width) {\n text = text.substr(0, temp.length - 1);\n break;\n }\n }\n if (options.textOverflow === 'Ellipsis') {\n text = text.substr(0, text.length - 3);\n text += '...';\n }\n else {\n text = text.substr(0, text.length);\n }\n return text;\n}\n/** @private */\nexport function whiteSpaceToString(value, wrap) {\n if (wrap === 'NoWrap' && value === 'PreserveAll') {\n return 'pre';\n }\n var state = '';\n switch (value) {\n case 'CollapseAll':\n state = 'nowrap';\n break;\n case 'CollapseSpace':\n state = 'pre-line';\n break;\n case 'PreserveAll':\n state = 'pre-wrap';\n break;\n }\n return state;\n}\n/** @private */\nexport function rotateSize(size, angle) {\n var matrix = identityMatrix();\n rotateMatrix(matrix, angle, 0, 0);\n var topLeft = transformPointByMatrix(matrix, { x: 0, y: 0 });\n var topRight = transformPointByMatrix(matrix, { x: size.width, y: 0 });\n var bottomLeft = transformPointByMatrix(matrix, { x: 0, y: size.height });\n var bottomRight = transformPointByMatrix(matrix, { x: size.width, y: size.height });\n var minX = Math.min(topLeft.x, topRight.x, bottomLeft.x, bottomRight.x);\n var minY = Math.min(topLeft.y, topRight.y, bottomLeft.y, bottomRight.y);\n var maxX = Math.max(topLeft.x, topRight.x, bottomLeft.x, bottomRight.x);\n var maxY = Math.max(topLeft.y, topRight.y, bottomLeft.y, bottomRight.y);\n return new Size(maxX - minX, maxY - minY);\n}\n/** @private */\nexport function rotatePoint(angle, pivotX, pivotY, point) {\n if (angle !== 0) {\n var matrix = identityMatrix();\n rotateMatrix(matrix, angle, pivotX, pivotY);\n return transformPointByMatrix(matrix, point);\n }\n return point;\n}\n/** @private */\nexport function getOffset(topLeft, obj) {\n var offX = topLeft.x + obj.desiredSize.width * obj.pivot.x;\n var offY = topLeft.y + obj.desiredSize.height * obj.pivot.y;\n return {\n x: offX, y: offY\n };\n}\n/**\n * Get function\n */\nexport function getFunction(value) {\n if (value !== undefined) {\n if (typeof value === 'string') {\n value = getValue(value, window);\n }\n }\n return value;\n}\n","import { Rect } from '../primitives/rect';\nimport { Size } from '../primitives/size';\nimport { processPathData, splitArrayCollection, transformPath } from './path-util';\nimport { whiteSpaceToString, wordBreakToString, textAlignToString, bBoxText } from './base-util';\nimport { identityMatrix, transformPointByMatrix, rotateMatrix } from '../primitives/matrix';\nimport { compile, createElement } from '@syncfusion/ej2-base';\n/**\n * Defines the functionalities that need to access DOM\n */\n/** @private */\nexport function findSegmentPoints(element) {\n var pts = [];\n var sample;\n var sampleLength;\n var measureElement = 'measureElement';\n window[measureElement].style.visibility = 'visible';\n var svg = window[measureElement].children[2];\n var pathNode = svg.children[0];\n pathNode.setAttributeNS(null, 'd', element.data);\n var pathBounds = element.absoluteBounds; // || pathNode.getBBox();\n var pathData = updatePath(element, pathBounds, element);\n pathNode.setAttributeNS(null, 'd', pathData);\n var pathLength = pathNode.getTotalLength();\n for (sampleLength = 0; sampleLength <= pathLength; sampleLength += 10) {\n sample = pathNode.getPointAtLength(sampleLength);\n pts.push({ x: sample.x, y: sample.y });\n }\n window[measureElement].style.visibility = 'hidden';\n return pts;\n}\nexport function translatePoints(element, points) {\n var translatedPts = [];\n for (var _i = 0, points_1 = points; _i < points_1.length; _i++) {\n var point = points_1[_i];\n var pt1 = {\n x: element.offsetX - element.actualSize.width * element.pivot.x + point.x,\n y: element.offsetY - element.actualSize.height * element.pivot.y + point.y\n };\n var matrix = void 0;\n var angle = element.rotateAngle + element.parentTransform;\n if (angle) {\n matrix = identityMatrix();\n rotateMatrix(matrix, angle, element.offsetX, element.offsetY);\n }\n if (matrix) {\n pt1 = transformPointByMatrix(matrix, pt1);\n }\n translatedPts.push(pt1);\n }\n return translatedPts;\n}\n/** @private */\nexport function measurePath(data) {\n if (data) {\n var measureElement = 'measureElement';\n window[measureElement].style.visibility = 'visible';\n var svg = window[measureElement].children[2];\n var element = svg.children[0];\n element.setAttribute('d', data);\n var bounds = element.getBBox();\n var svgBounds = new Rect(bounds.x, bounds.y, bounds.width, bounds.height);\n window[measureElement].style.visibility = 'hidden';\n return svgBounds;\n }\n return new Rect(0, 0, 0, 0);\n}\nfunction getTextOptions(element, maxWidth) {\n var options = {\n fill: element.style.fill, stroke: element.style.strokeColor, angle: element.rotateAngle + element.parentTransform,\n pivotX: element.pivot.x, pivotY: element.pivot.y, strokeWidth: element.style.strokeWidth,\n dashArray: element.style.strokeDashArray, opacity: element.style.opacity, shadow: element.shadow,\n gradient: element.style.gradient, visible: element.visible, id: element.id, description: element.description,\n width: maxWidth || element.actualSize.width, height: element.actualSize.height,\n x: element.offsetX - element.actualSize.width * element.pivot.x + 0.5,\n y: element.offsetY - element.actualSize.height * element.pivot.y + 0.5\n };\n options.fontSize = element.style.fontSize;\n options.fontFamily = element.style.fontFamily;\n options.textOverflow = element.style.textOverflow;\n options.textDecoration = element.style.textDecoration;\n options.doWrap = element.doWrap;\n options.whiteSpace = whiteSpaceToString(element.style.whiteSpace, element.style.textWrapping);\n options.content = element.content;\n options.breakWord = wordBreakToString(element.style.textWrapping);\n options.textAlign = textAlignToString(element.style.textAlign);\n options.color = element.style.color;\n options.italic = element.style.italic;\n options.bold = element.style.bold;\n options.dashArray = '';\n options.strokeWidth = 0;\n options.fill = '';\n return options;\n}\nfunction wrapSvgText(text, textValue) {\n var childNodes = [];\n var k = 0;\n var txtValue;\n var bounds1;\n var content = textValue || text.content;\n if (text.whiteSpace !== 'nowrap' && text.whiteSpace !== 'pre') {\n if (text.breakWord === 'breakall') {\n txtValue = '';\n txtValue += content[0];\n for (k = 0; k < content.length; k++) {\n bounds1 = bBoxText(txtValue, text);\n if (bounds1 >= text.width && txtValue.length > 0) {\n childNodes[childNodes.length] = { text: txtValue, x: 0, dy: 0, width: bounds1 };\n txtValue = '';\n }\n else {\n txtValue = txtValue + (content[k + 1] || '');\n if (txtValue.indexOf('\\n') > -1) {\n txtValue = txtValue.replace('\\n', '');\n }\n var width = bBoxText(txtValue, text);\n if (Math.ceil(width) + 2 >= text.width && txtValue.length > 0) {\n childNodes[childNodes.length] = { text: txtValue, x: 0, dy: 0, width: width };\n txtValue = '';\n }\n if (k === content.length - 1 && txtValue.length > 0) {\n childNodes[childNodes.length] = { text: txtValue, x: 0, dy: 0, width: width };\n txtValue = '';\n }\n }\n }\n }\n else {\n childNodes = wordWrapping(text, textValue);\n }\n }\n else {\n childNodes[childNodes.length] = { text: content, x: 0, dy: 0, width: bBoxText(content, text) };\n }\n return childNodes;\n}\nfunction wordWrapping(text, textValue) {\n var childNodes = [];\n var txtValue = '';\n var j = 0;\n var i = 0;\n var wrap = text.whiteSpace !== 'nowrap' ? true : false;\n var content = textValue || text.content;\n var eachLine = content.split('\\n');\n var txt;\n var words;\n var newText;\n var existingWidth;\n var existingText;\n for (j = 0; j < eachLine.length; j++) {\n txt = '';\n words = eachLine[j].split(' ');\n for (i = 0; i < words.length; i++) {\n txtValue += (((i !== 0 || words.length === 1) && wrap && txtValue.length > 0) ? ' ' : '') + words[i];\n newText = txtValue + (words[i + 1] || '');\n var width = bBoxText(newText, text);\n if (Math.floor(width) > text.width - 2 && txtValue.length > 0) {\n childNodes[childNodes.length] = {\n text: txtValue, x: 0, dy: 0,\n width: newText === txtValue ? width : (txtValue === existingText) ? existingWidth : bBoxText(txtValue, text)\n };\n txtValue = '';\n }\n else {\n if (i === words.length - 1) {\n childNodes[childNodes.length] = { text: txtValue, x: 0, dy: 0, width: width };\n txtValue = '';\n }\n }\n existingText = newText;\n existingWidth = width;\n }\n }\n return childNodes;\n}\nfunction wrapSvgTextAlign(text, childNodes) {\n var wrapBounds = { x: 0, width: 0 };\n var k = 0;\n var txtWidth;\n var width;\n for (k = 0; k < childNodes.length; k++) {\n txtWidth = childNodes[k].width;\n width = txtWidth;\n if (text.textAlign === 'left') {\n txtWidth = 0;\n }\n else if (text.textAlign === 'center') {\n if (txtWidth > text.width && (text.textOverflow === 'Ellipsis' || text.textOverflow === 'Clip')) {\n txtWidth = 0;\n }\n else {\n txtWidth = -txtWidth / 2;\n }\n }\n else if (text.textAlign === 'right') {\n txtWidth = -txtWidth;\n }\n else {\n txtWidth = childNodes.length > 1 ? 0 : -txtWidth / 2;\n }\n childNodes[k].dy = text.fontSize;\n childNodes[k].x = txtWidth;\n if (!wrapBounds) {\n wrapBounds = {\n x: txtWidth,\n width: width\n };\n }\n else {\n wrapBounds.x = Math.min(wrapBounds.x, txtWidth);\n wrapBounds.width = Math.max(wrapBounds.width, width);\n }\n }\n return wrapBounds;\n}\nexport function measureHtmlText(style, content, width, height, maxWidth) {\n var bounds = new Size();\n var text = document.createElement('Span');\n text.setAttribute('style', 'display:inline-block ; line-height: normal');\n if (style.bold) {\n text.style.fontWeight = 'bold';\n }\n if (style.italic) {\n text.style.fontStyle = 'italic';\n }\n if (width !== undefined) {\n text.style.width = width.toString() + 'px';\n }\n if (height !== undefined) {\n text.style.height = height.toString() + 'px';\n }\n if (maxWidth !== undefined) {\n text.style.maxWidth = maxWidth.toString() + 'px';\n }\n text.style.fontFamily = style.fontFamily;\n text.style.fontSize = style.fontSize + 'px';\n text.style.color = style.color;\n text.textContent = content;\n text.style.whiteSpace = whiteSpaceToString(style.whiteSpace, style.textWrapping);\n if (maxWidth !== undefined) {\n text.style.wordBreak = 'break-word';\n }\n else {\n text.style.wordBreak = wordBreakToString(style.textWrapping);\n }\n document.body.appendChild(text);\n bounds.width = text.offsetWidth;\n bounds.height = text.offsetHeight;\n document.body.removeChild(text);\n return bounds;\n}\n/** @private */\nexport function measureText(text, style, content, maxWidth, textValue) {\n var bounds = new Size(0, 0);\n var childNodes;\n var wrapBounds;\n var options = getTextOptions(text, maxWidth);\n text.childNodes = childNodes = wrapSvgText(options, textValue);\n text.wrapBounds = wrapBounds = wrapSvgTextAlign(options, childNodes);\n bounds.width = wrapBounds.width;\n bounds.height = childNodes.length * text.style.fontSize;\n return bounds;\n}\n/** @private */\nexport function measureImage(source, contentSize) {\n var measureElement = 'measureElement';\n window[measureElement].style.visibility = 'visible';\n var imageElement = window[measureElement].children[1];\n imageElement.setAttribute('src', source);\n var bounds = imageElement.getBoundingClientRect();\n var width = bounds.width;\n var height = bounds.height;\n contentSize = new Size(width, height);\n window[measureElement].style.visibility = 'hidden';\n return contentSize;\n}\n/** @private */\nexport function measureNativeContent(nativeContent) {\n var measureElement = 'measureElement';\n window[measureElement].style.visibility = 'visible';\n var nativeSVG = window[measureElement].children[2];\n nativeSVG.appendChild(nativeContent);\n var bounds = nativeContent.getBoundingClientRect();\n var svgBounds = nativeSVG.getBoundingClientRect();\n var rect = bounds;\n rect.x = bounds.left - svgBounds.left;\n rect.y = bounds.top - svgBounds.top;\n nativeSVG.removeChild(nativeContent);\n window[measureElement].style.visibility = 'hidden';\n return rect;\n}\n/**\n * @private\n */\nexport function measureNativeSvg(nativeContent) {\n var measureElement = 'measureElement';\n window[measureElement].style.visibility = 'visible';\n var nativeSVG = window[measureElement].children[2];\n nativeSVG.appendChild(nativeContent);\n var svgBounds = nativeSVG.getBoundingClientRect();\n nativeSVG.removeChild(nativeContent);\n window[measureElement].style.visibility = 'hidden';\n return svgBounds;\n}\n/** @private */\nexport function updatePath(element, bounds, child) {\n var initX = 0;\n var initY = 0;\n var scaleX = 0;\n var scaleY = 0;\n var isScale = false;\n var bBox;\n var isInit;\n var isResizing = true;\n var newPathString = '';\n var arrayCollection = [];\n bBox = bounds;\n if (initX !== bBox.x || initY !== bBox.y) {\n scaleX = initX - Number(bBox.x);\n scaleY = initY - Number(bBox.y);\n }\n if (element.actualSize.width !== bBox.width || element.actualSize.height !== bBox.height) {\n scaleX = element.actualSize.width / Number(bBox.width ? bBox.width : 1);\n scaleY = element.actualSize.height / Number(bBox.height ? bBox.height : 1);\n isScale = true;\n }\n arrayCollection = processPathData(element.data);\n arrayCollection = splitArrayCollection(arrayCollection);\n newPathString = transformPath(arrayCollection, scaleX, scaleY, isScale, bBox.x, bBox.y, initX, initY);\n isScale = false;\n return newPathString;\n}\n/** @private */\nexport function getDiagramLayerSvg(diagramId) {\n var diagramLayerSvg;\n var diagramElement = getDiagramElement(diagramId);\n var elementcoll;\n elementcoll = diagramElement.getElementsByClassName('e-diagram-layer');\n diagramLayerSvg = elementcoll[0];\n return diagramLayerSvg;\n}\n/** @private */\nexport function getDiagramElement(diagramId) {\n var diagramElement = document.getElementById(diagramId);\n return diagramElement;\n}\n/**\n * @private\n */\nexport function getAdornerLayerSvg(diagramId) {\n var adornerLayerSvg = null;\n var diagramElement = getDiagramElement(diagramId);\n var elementcoll;\n elementcoll = diagramElement.getElementsByClassName('e-adorner-layer');\n adornerLayerSvg = elementcoll[0];\n return adornerLayerSvg;\n}\n/** @private */\nexport function getSelectorElement(diagramId) {\n var adornerLayer = null;\n var adornerSvg = getAdornerLayerSvg(diagramId);\n adornerLayer = adornerSvg.getElementById(diagramId + '_SelectorElement');\n return adornerLayer;\n}\n/**\n * @private\n */\nexport function getAdornerLayer(diagramId) {\n var adornerLayer = null;\n var diagramAdornerSvg = getAdornerLayerSvg(diagramId);\n adornerLayer = diagramAdornerSvg.getElementById(diagramId + '_diagramAdorner');\n return adornerLayer;\n}\n/** @private */\nexport function getDiagramLayer(diagramId) {\n var diagramLayer;\n var diagramLayerSvg = getDiagramLayerSvg(diagramId);\n diagramLayer = diagramLayerSvg.getElementById(diagramId + '_diagramLayer');\n return diagramLayer;\n}\n/** @private */\nexport function getPortLayerSvg(diagramId) {\n var adornerLayerSvg = null;\n var diagramElement = getDiagramElement(diagramId);\n var elementcoll;\n elementcoll = diagramElement.getElementsByClassName('e-ports-expand-layer');\n adornerLayerSvg = elementcoll[0];\n return adornerLayerSvg;\n}\n/** @private */\nexport function getNativeLayerSvg(diagramId) {\n var nativeLayerSvg;\n var diagramElement = getDiagramElement(diagramId);\n var elementcoll;\n elementcoll = diagramElement.getElementsByClassName('e-native-layer');\n nativeLayerSvg = elementcoll[0];\n return nativeLayerSvg;\n}\n/** @private */\nexport function getGridLayerSvg(diagramId) {\n var gridLayerSvg = null;\n var diagramElement = getDiagramElement(diagramId);\n var elementcoll;\n elementcoll = diagramElement.getElementsByClassName('e-grid-layer');\n gridLayerSvg = elementcoll[0];\n return gridLayerSvg;\n}\n/** @private */\nexport function getBackgroundLayerSvg(diagramId) {\n var gridLayerSvg = null;\n var diagramElement = getDiagramElement(diagramId);\n var elementcoll = diagramElement.getElementsByClassName('e-background-layer');\n return elementcoll[0].parentNode;\n}\n/** @private */\nexport function getBackgroundImageLayer(diagramId) {\n var imageLayer = null;\n var diagramElement = getDiagramElement(diagramId);\n var elementcoll;\n elementcoll = diagramElement.getElementsByClassName('e-background-image-layer');\n imageLayer = elementcoll[0];\n return imageLayer;\n}\n/** @private */\nexport function getBackgroundLayer(diagramId) {\n var imageLayer = null;\n var diagramElement = getDiagramElement(diagramId);\n var elementcoll;\n elementcoll = diagramElement.getElementsByClassName('e-background-layer');\n imageLayer = elementcoll[0];\n return imageLayer;\n}\n/** @private */\nexport function getGridLayer(diagramId) {\n var expandCollapse = null;\n var diagramGridSvg = getGridLayerSvg(diagramId);\n expandCollapse = diagramGridSvg.getElementById(diagramId + '_gridline');\n return expandCollapse;\n}\n/** @private */\nexport function getExpandCollapseLayer(diagramId) {\n var expandCollapse = null;\n var diagramPortSvg = getPortLayerSvg(diagramId);\n expandCollapse = diagramPortSvg.getElementById(diagramId + '_diagramExpander');\n return expandCollapse;\n}\n/** @private */\nexport function getPortsLayer(diagramId) {\n var expandCollapse = null;\n var diagramPortSvg = getPortLayerSvg(diagramId);\n expandCollapse = diagramPortSvg.getElementById(diagramId + '_diagramPorts');\n return expandCollapse;\n}\n/** @private */\nexport function getNativeLayer(diagramId) {\n var nativeLayer = null;\n var nativeLayerSvg = getNativeLayerSvg(diagramId);\n nativeLayer = nativeLayerSvg.getElementById(diagramId + '_nativeLayer');\n return nativeLayer;\n}\n/** @private */\nexport function getHTMLLayer(diagramId) {\n var htmlLayer = null;\n var element = getDiagramElement(diagramId);\n var elementcoll;\n elementcoll = element.getElementsByClassName('e-html-layer');\n htmlLayer = elementcoll[0];\n return htmlLayer;\n}\n/** @private */\nexport function createHtmlElement(elementType, attribute) {\n var element = document.createElement(elementType);\n setAttributeHtml(element, attribute);\n return element;\n}\n/** @private */\nexport function createSvgElement(elementType, attribute) {\n var element = document.createElementNS('http://www.w3.org/2000/svg', elementType);\n setAttributeSvg(element, attribute);\n return element;\n}\n/** @hidden */\nexport function parentsUntil(elem, selector, isID) {\n var parent = elem;\n while (parent) {\n if (isID ? parent.id === selector : hasClass(parent, selector)) {\n break;\n }\n parent = parent.parentNode;\n }\n return parent;\n}\nexport function hasClass(element, className) {\n var eClassName = (typeof element.className === 'object') ? element.className.animVal : element.className;\n return ((' ' + eClassName + ' ').indexOf(' ' + className + ' ') > -1) ? true : false;\n}\n/** @hidden */\nexport function getScrollerWidth() {\n var outer = document.createElement('div');\n outer.style.visibility = 'hidden';\n outer.style.width = '100px';\n document.body.appendChild(outer);\n var widthNoScroll = outer.getBoundingClientRect().width;\n // force scrollbars\n outer.style.overflow = 'scroll';\n // add innerdiv\n var inner = document.createElement('div');\n inner.style.width = '100%';\n outer.appendChild(inner);\n var widthWithScroll = inner.getBoundingClientRect().width;\n // remove divs\n outer.parentNode.removeChild(outer);\n return widthNoScroll - widthWithScroll;\n}\n/**\n * Handles the touch pointer.\n * @return {boolean}\n * @private\n */\nexport function addTouchPointer(touchList, e, touches) {\n touchList = [];\n for (var i = 0, length_1 = touches.length; i < length_1; i++) {\n touchList.push({ pageX: touches[i].clientX, pageY: touches[i].clientY, pointerId: null });\n }\n return touchList;\n}\n/**\n * removes the element from dom\n * @param elementId\n */\nexport function removeElement(elementId, contentId) {\n var element = document.getElementById(contentId);\n var div = (contentId && element) ? document.getElementById(contentId).querySelector('#' + elementId) :\n document.getElementById(elementId);\n if (div) {\n div.parentNode.removeChild(div);\n }\n}\nexport function getContent(element, isHtml) {\n var div;\n if (isHtml) {\n var attr = { 'style': 'height: 100%; width: 100%' };\n div = createHtmlElement('div', attr);\n }\n else {\n div = document.createElementNS('http://www.w3.org/2000/svg', 'g');\n }\n var item;\n if (typeof element.content === 'string') {\n var compiledString = void 0;\n compiledString = compile(element.content);\n for (var _i = 0, _a = compiledString({}); _i < _a.length; _i++) {\n item = _a[_i];\n div.appendChild(item);\n }\n }\n else {\n div.appendChild(element.content);\n }\n return isHtml ? div.cloneNode(true) : div.cloneNode(true);\n}\n/** @private */\nexport function setAttributeSvg(svg, attributes) {\n var keys = Object.keys(attributes);\n for (var i = 0; i < keys.length; i++) {\n svg.setAttribute(keys[i], attributes[keys[i]]);\n }\n}\n/** @private */\nexport function setAttributeHtml(element, attributes) {\n var keys = Object.keys(attributes);\n for (var i = 0; i < keys.length; i++) {\n element.setAttribute(keys[i], attributes[keys[i]]);\n }\n}\n/** @private */\nexport function createMeasureElements() {\n var measureElement = 'measureElement';\n if (!window[measureElement]) {\n var divElement = createElement('div', { id: 'measureElement', styles: 'visibility:hidden' });\n var text = document.createElement('Span');\n text.setAttribute('style', 'display:inline-block ; line-height: normal');\n divElement.appendChild(text);\n var imageElement = void 0;\n imageElement = document.createElement('img');\n divElement.appendChild(imageElement);\n var svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.setAttribute('xlink', 'http://www.w3.org/1999/xlink');\n divElement.appendChild(svg);\n var element = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n svg.appendChild(element);\n var data = document.createTextNode('');\n var tSpan = document.createElementNS('http://www.w3.org/2000/svg', 'text');\n tSpan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');\n svg.appendChild(tSpan);\n window[measureElement] = divElement;\n window[measureElement].usageCount = 1;\n document.body.appendChild(divElement);\n }\n else {\n window[measureElement].usageCount += 1;\n }\n}\n","/**\n * BasicShapeDictionary defines the shape of the built-in basic shapes\n */\n/** @private */\nexport function getBasicShape(shape) {\n return basicShapes[shape.toString()];\n}\nvar basicShapes = {\n //Rectangle,\n 'Rectangle': 'M0,0 L50,0 L50,50 L0,50 z',\n //Ellipse,\n 'Ellipse': 'M80.5,12.5 C80.5,19.127417 62.59139,24.5 40.5,24.5 C18.40861,24.5 0.5,19.127417 0.5,12.5' +\n 'C0.5,5.872583 18.40861,0.5 40.5,0.5 C62.59139,0.5 80.5,5.872583 80.5,12.5 z',\n //Hexagon,\n 'Hexagon': 'M30,0 L60,0 L90,30 L60,60 L30,60 L0,30 L30,0 z',\n //Parallelogram,\n 'Parallelogram': 'M30,0 L60,0 L45,30 L15,30 z',\n //Triangle,\n 'Triangle': 'M45,0 L90,45 L0,45 L45,0 z',\n //Plus,\n 'Plus': 'M696.6084,158.2656 L674.8074,158.2656 L674.8074,136.4656 L658.4084,136.4656 L658.4084,158.2656 L636.6084,158.2656' +\n 'L636.6084,174.6646 L658.4084,174.6646 L658.4084,196.4656 L674.8074,196.4656 L674.8074,174.6646 L696.6084,174.6646' +\n 'L696.6084,158.2656 z',\n //Star,\n 'Star': 'M540.3643,137.9336 L546.7973,159.7016 L570.3633,159.7296 L550.7723,171.9366 L558.9053,194.9966 L540.3643,179.4996' +\n 'L521.8223,194.9966 L529.9553,171.9366 L510.3633,159.7296 L533.9313,159.7016 L540.3643,137.9336 z',\n //Pentagon,\n 'Pentagon': 'M30,0 L60,30 L50,70 L10,70 L0,30 L30,0 z',\n //Heptagon,\n 'Heptagon': 'M223.7783,195.7134 L207.1303,174.8364 L213.0713,148.8034 L237.1303,137.2174 L261.1883,148.8034 L267.1303,174.8364' +\n 'L250.4813,195.7134 L223.7783,195.7134 z',\n //Octagon,\n 'Octagon': 'M98.7319,196.4653 L81.1579,178.8923 L81.1579,154.0393 L98.7319,136.4653 L123.5849,136.4653' +\n 'L141.1579,154.0393 L141.1579,178.8923 L123.5849,196.4653 L98.7319,196.4653 z',\n //Trapezoid,\n 'Trapezoid': 'M127.2842,291.4492 L95.0322,291.4492 L81.1582,256.3152 L141.1582,256.3152 L127.2842,291.4492 z',\n //Decagon,\n 'Decagon': 'M657.3379,302.4141 L642.3369,291.5161 L636.6089,273.8821 L642.3369,256.2481 L657.3379,245.3511 L675.8789,245.3511' +\n 'L690.8789,256.2481 L696.6089,273.8821' +\n 'L690.8789,291.5161 L675.8789,302.4141 L657.3379,302.4141 z',\n //RightTriangle,\n 'RightTriangle': 'M836.293,292.9238 L776.293,292.9238 L776.293,254.8408 L836.293,292.9238 z',\n //Cylinder,\n 'Cylinder': 'M 542.802,362.009C 542.802,368.452 525.341,373.676 503.802,373.676C 482.263,373.676 464.802,368.452 464.802,362.009' +\n 'L 464.802,466.484C 464.802,472.928 482.263,478.151 503.802,478.151' +\n 'C 525.341,478.151 542.802,472.928 542.802,466.484L 542.802,362.016C 542.802,368.459 525.341,373.534 503.802,373.534' +\n 'C 482.263,373.534 464.802,368.31 464.802,361.867' +\n 'L 464.802,362.016C 464.802,355.572 482.263,350.349 503.802,350.349C 525.341,350.349 542.802,355.572 542.802,362.016',\n //Diamond,\n 'Diamond': 'M397.784,287.875 L369.5,316.159 L341.216,287.875 L369.5,259.591 L397.784,287.875 z'\n};\n","/**\n * ShapeDictionary defines the shape of the default nodes and ports\n */\n/** @private */\nexport function getPortShape(shape) {\n return portShapes[shape.toString()];\n}\n/** @private */\nexport function getDecoratorShape(shape, decorator) {\n if (shape === 'Custom') {\n return decorator.pathData;\n }\n return decoratorShapes[shape];\n}\n/**\n * @private\n * @param icon\n * sets the path data for different icon shapes\n */\nexport function getIconShape(icon) {\n var data;\n switch (icon.shape) {\n case 'Minus':\n data = 'M0,50 L100,50';\n break;\n case 'Plus':\n data = 'M0,-50 L0,50 M-50,0 L50,0';\n break;\n case 'ArrowUp':\n data = 'M0,100 L50,0 L100,100 Z';\n break;\n case 'ArrowDown':\n data = 'M0,0 L50,100 L100,0 Z';\n break;\n case 'Path':\n data = icon.pathData;\n break;\n }\n return data;\n}\nvar portShapes = {\n 'X': 'M14,14 L106,106 M106,14 L14,106',\n 'Circle': 'M0,50 A50,50,0 1 1 100,50 A50,50,0 1 1 0,50 Z',\n 'Square': 'M0,0 L10,0 L10,10 L0,10 z',\n};\nvar decoratorShapes = {\n 'OpenArrow': 'M15.9,23 L5,16 L15.9,9 L17,10.7 L8.7,16 L17,21.3Z',\n 'Square': 'M0,0 L10,0 L10,10 L0,10 z',\n 'Fletch': 'M14.8,10c0,0-3.5,6,0.2,12c0,0-2.5-6-10.9-6C4.1,16,11.3,16,14.8,10z',\n 'OpenFetch': 'M6,17c-0.6,0-1-0.4-1-1s0.4-1,1-1c10.9,0,11-5,11-5' +\n 'c0-0.6,0.4-1,1-1s1,0.4,1,1C19,10.3,18.9,17,6,17C6,17,6,17,6,17z ' +\n 'M18,23c-0.5,0-1-0.4-1-1c0-0.2-0.3-5-11-5c-0.6,0-1-0.5-1-1s0.4-1,1-1c0,0,0,0,0,0' +\n 'c12.9,0,13,6.7,13,7 C19,22.6,18.6,23,18,23z',\n 'IndentedArrow': 'M17,10c0,0-4.5,5.5,0,12L5,16L17,10z',\n 'OutdentedArrow': 'M14.6,10c0,0,5.4,6,0,12L5,16L14.6,10z',\n 'DoubleArrow': 'M19,10 L19,22 L13,16Z M12,10 L12,22 L6,16Z',\n 'Arrow': 'M15,10 L15,22 L5,16Z',\n 'Diamond': 'M12,23l-7-7l7-7l6.9,7L12,23z',\n 'Circle': 'M0,50 A50,50,0 1 1 100,50 A50,50,0 1 1 0,50 Z'\n};\n","/**\n * FlowShapeDictionary defines the shape of the built-in flow shapes\n */\n/** @private */\nexport function getFlowShape(shape) {\n return flowShapes[shape.toString()];\n}\nvar flowShapes = {\n // Process,\n 'Process': 'M419.511,76.687L359.511,76.687L359.511,43.086L419.511,43.086z',\n // Decision,\n 'Decision': 'M 253.005,115.687L 200.567,146.071L 148.097,115.687L 200.534,85.304L 253.005,115.687 Z',\n // Document,\n 'Document': 'M 60 31.9 c 0 0 -11 -7.7 -30 0 s -30 0 -30 0 V 0 h 60 V 31.9 Z',\n // PreDefinedProcess,\n 'PreDefinedProcess': 'M 0,0 L 50,0 L 50,50 L 0,50 Z M 8.334,0 L 8.334,50 M 41.667,0 L 41.667,50',\n // Terminator,\n 'Terminator': 'M 269.711,29.33C 269.71,44.061 257.77,56 243.04,56L 158.058,56C 143.33,56 131.39,44.061 131.39,29.33L 131.39,29.33' +\n 'C 131.391,14.6057 143.33,2.669 158.058,2.669L 243.044,2.669C 257.772,2.669 269.711,14.6057 269.711,29.333 Z',\n // PaperTap,\n 'PaperTap': 'M0.0009,17.2042 L0.0009,47.165 C0.001,47.165 14.403,53.5455 25.00,47.165 C35.599,40.7852 44.403,43.5087 50.00,47.165' +\n 'L50.001,17.2042 M50.001,32.7987 L50.001,2.8405 C50.001,2.8405 35.599,-3.5427 25.001,2.8405' +\n 'C14.403,9.2237 5.599,6.494 0.0009,2.8405 L0.0009,32.7987',\n // DirectData,\n 'DirectData': 'M 132.62 0 L 17.38 0 C 7.78 0 0 13.43 0 30 C 0 46.57 7.78 60 17.38 60 L 132.62 60 M 132.62 0' +\n 'C 123.02 0 115.24 13.43 115.24 30 C 115.24 46.57 123.02 60 132.62 60 C 142.22 60 150 46.57 150 30 C 150 13.43 142.22 0 132.62 0 z ',\n // SequentialData,\n 'SequentialData': 'M0.0029,24.999 C0.0029,11.1922 10.433,0.0021 23.295,0.0021 C36.159,0.00216 46.585,11.1922 46.585,24.999' +\n 'C46.585,38.8057 36.159,49.9979 23.295,49.9979 C10.433,49.9979 0.0029,38.8057 0.0029,24.999 z M23.294,49.999 L50.002,49.999',\n // Sort,\n 'Sort': 'M50.001,24.9971 L25.001,49.9971 L0.00097,24.9971 L25.001,-0.00286865 L50.001,24.9971 z' +\n ' M0.000976562,24.9971 L50.001,24.9971',\n // MultiDocument,\n 'MultiDocument': 'M43.6826,40 C44.8746,40.6183 45.8586,41.3502 46.8366,42.1122 L46.8366,4.74487 L3.09857,4.74487 L3.09857,10.9544' +\n ' M46.837,35.143 C48.027,35.765 49.025,36.604 50.003,37.369 L50.003,0.002 L6.264,0.002 L6.264,4.744 M43.682,47.113 L43.682,10.765' +\n ' L0.0025,10.7652 L0.0025,47.1132 C0.0025,47.1132 12.5846,53.6101 21.8426,47.1132 C31.1006,40.6163 38.792,43.393 43.6826,47.1132 z',\n // Collate,\n 'Collate': 'M50.001,0.0028 L25.001,25.0029 L0.00097,0.0028 L50.001,0.002 z M0.0009,50.002 L25.001,25.002' +\n 'L50.001,50.002 L0.0009,50.0029 z',\n // SummingJunction,\n 'SummingJunction': 'M7.3252,42.6768 L42.6772,7.3247 M42.6768,42.6768 L7.3248,7.3247 M0.0009,25.001 ' +\n 'C0.0009,11.193 11.197,0.0009 25.001,0.0009' +\n ' C38.809,0.0009 50.001,11.193 50.001,25.001 C50.001,38.809 38.809,50.001 25.001,50.001 C11.197,50.00 0.0009,38.809 0.0009,25.00 z',\n // Or,\n 'Or': 'M 0 50 L 100 50 M 50 100 L 50 0.0 M 0 50 C 0 22.384 22.392 0 50 0 C 77.616 0 100 22.384 100 50' +\n ' C 100 77.616 77.616 100 50 100 C 22.392 100 0 77.616 0 50 Z',\n // InternalStorage,\n 'InternalStorage': 'M 0 3.81946A 2.5,3.81946 0 0,1 2.5,0L 47.5 0A 2.5,3.81946 0 0,1 50,3.81946' +\n 'L 50 45.836A 2.5,3.819446 0 0,1 47.5,49.652778' +\n 'L 2.5 49.652778A 2.5,3.819446 0 0,1 0,45.8336L 0 3.819446ZM 0 11.45834L 50 11.4583334M 12.5 0L 12.5 49.652778',\n // Extract,\n 'Extract': 'M0,35 L30,0 L60,35 Z',\n // ManualOperation,\n 'ManualOperation': 'M46.4,28.8 L14.8,28.8 L0,0 L60,0 Z',\n // Merge,\n 'Merge': 'M60,0 L30,35 L0,0 Z',\n // OffPageReference,\n 'OffPageReference': 'M60,33.3 L30.1,39 L0,33.3 L0,0 L60,0 Z',\n // SequentialAccessStorage,\n 'SequentialAccessStorage': 'M 60 30 C 60 13.4 46.6 0 30 0 S 0 13.4 0 30 s 13.4 30 30 30 h 28.6 v -6.5 h -9.9' +\n 'C 55.5 48 60 39.5 60 30 Z',\n // Annotation,\n 'Annotation': 'M49.9984,50.0029 L-0.00271199,50.0029 L-0.00271199,0.00286865 L49.9984,0.00286865',\n // Annotation2,\n 'Annotation2': 'M49.9977,50.0029 L25.416,50.0029 L25.416,0.00286865 L49.9977,0.00286865 M25.4166,25.0029 L-0.00227869,25.0029',\n // Data,\n 'Data': 'M 10 0 L 40 0 L 30 40 L 0 40 Z',\n // Card,\n 'Card': 'M275,60 L400,60 L400,110 L260,110 L260,75 Z',\n // Delay,\n 'Delay': 'M0,0 L12.029,0 C14.212999,0 16,1.7869979 16,3.9709952 C16,6.1549926 14.212999,7.9409904 12.029,7.9409904 L0,7.9409904 z',\n // Preparation,\n 'Preparation': 'M 1048.17 572 C 1051.06 568.86 1055.17 567.05 1059.5 567 L 1094.51 567'\n + ' C 1098.84 567.05 1102.95 568.86 1105.84 572' +\n ' L 1126.43 595 C 1127.01 596.28 1127.01 597.72 1126.43 599 L 1105.84 622 C 1102.95 625.14 1098.84 626.95 1094.51 627' +\n ' L 1059.5 627 C 1055.17 626.95 1051.06 625.14 1048.17 622 L 1027.58 599 C 1027 597.72 1027 596.28 1027.58 595 L 1048.17 572 Z',\n // Display,\n 'Display': 'M47.8809,19.2914 L32.7968,-0.00594145 L11.3902,-0.00594145 C7.93166,-0.00594145 0.00124586,11.187 0.00124586,24.9968' +\n 'C0.00124586,38.8032 7.93166,49.9962 11.3902,49.9962 L32.7968,49.99 L47.615,31.038 C47.615,31.0388 52.798,24.9968 47.880,19.2914 z',\n // ManualInput,\n 'ManualInput': 'M 912 732 L 1006.85 707 C 1008.2 707 1009.5 707.53 1010.46 708.46 C 1011.41 709.4 1011.95 710.67 1011.95 712' +\n ' L 1011.95 762C 1012 764.41 1010.28 766.52 1007.87 767 L 917.1 767 C 915.75 767 914.45 766.47 913.49 765.54' +\n ' C 912.54 764.6 912 763.33 912 762 L 912 732 Z',\n // LoopLimit,\n 'LoopLimit': 'M 8 9 L 27 9 L 33 15 L 33 26 C 33 27 33 27 32 27 L 4 27 C 3 27 2 27 2 26 L 2 15 L 8 9 Z',\n // StoredData\n 'StoredData': 'M 5.55 0L 50 0A 1.5,30 0 0,1 50,0A 5.555,25 0 0,0 50,50A 1.5,30 0 0,1 50,50L 5.555 50A 5.55,25 0 0,1 5.555,0Z',\n};\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\nimport { Tooltip } from '@syncfusion/ej2-popups';\n/**\n * Defines the behavior of Tooltip\n */\nvar DiagramTooltip = /** @class */ (function (_super) {\n __extends(DiagramTooltip, _super);\n function DiagramTooltip() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], DiagramTooltip.prototype, \"content\", void 0);\n __decorate([\n Property('TopLeft')\n ], DiagramTooltip.prototype, \"position\", void 0);\n __decorate([\n Property('Mouse')\n ], DiagramTooltip.prototype, \"relativeMode\", void 0);\n __decorate([\n Property(true)\n ], DiagramTooltip.prototype, \"showTipPointer\", void 0);\n __decorate([\n Property('auto')\n ], DiagramTooltip.prototype, \"width\", void 0);\n __decorate([\n Property('auto')\n ], DiagramTooltip.prototype, \"height\", void 0);\n __decorate([\n Property()\n ], DiagramTooltip.prototype, \"animation\", void 0);\n return DiagramTooltip;\n}(ChildProperty));\nexport { DiagramTooltip };\n/**\n * @private\n * defines the Tooltip.\n * @param diagram\n */\nexport function initTooltip(diagram) {\n var tooltipOption = new Tooltip;\n tooltipOption = updateTooltipContent(diagram.tooltip, tooltipOption);\n var tooltip = new Tooltip(tooltipOption);\n tooltip.beforeCollision = beforeCollision;\n tooltip.beforeOpen = beforeOpen;\n tooltip.cssClass = 'e-diagram-tooltip';\n tooltip.opensOn = 'custom';\n tooltip.appendTo('#' + diagram.element.id);\n tooltip.close();\n return tooltip;\n}\nfunction beforeOpen(args) {\n if ((this.content === '' || this.content === undefined)) {\n args.element.style.display = 'none';\n }\n}\nfunction beforeCollision(args) {\n if ((args.collidedPosition && args.collidedPosition !== this.position)) {\n args.element.style.display = 'none';\n }\n}\n/**\n * @private\n * updates the contents of the tooltip.\n * @param diagram\n * @param node\n */\nexport function updateTooltip(diagram, node) {\n var tooltip;\n var tooltipObject = diagram.tooltipObject;\n tooltip = node ? node.tooltip : diagram.tooltip;\n updateTooltipContent(tooltip, tooltipObject);\n return tooltipObject;\n}\nfunction updateTooltipContent(tooltip, tooltipObject) {\n if (tooltip.content) {\n tooltipObject.content = tooltip.content;\n tooltipObject.position = tooltip.position;\n tooltipObject.showTipPointer = tooltip.showTipPointer;\n tooltipObject.width = tooltip.width;\n tooltipObject.height = tooltip.height;\n if (!tooltip.animation) {\n tooltipObject.animation = { close: { effect: 'None' } };\n }\n else {\n tooltipObject.animation = tooltip.animation;\n }\n }\n else {\n tooltipObject.close();\n }\n return tooltipObject;\n}\n","import { Point } from './../primitives/point';\nimport { getPoints, intersect3 } from './diagram-util';\nimport { NoOfSegments } from '../enum/enum';\nimport { StraightSegment, BezierSegment, OrthogonalSegment } from './../objects/connector';\nimport { PathElement } from './../core/elements/path-element';\n/**\n * Connector modules are used to dock and update the connectors\n */\n/** @private */\nexport function findConnectorPoints(element, layoutOrientation) {\n var intermeditatePoints;\n var sourcePoint;\n if (element.type === 'Straight' || !element.sourceWrapper) {\n sourcePoint = getSourcePoint(element);\n }\n else {\n sourcePoint = element.sourceWrapper.corners.center;\n }\n intermeditatePoints = terminateConnection(element, sourcePoint, element.targetPoint, layoutOrientation);\n setLineEndPoint(element, intermeditatePoints[0], false);\n setLineEndPoint(element, intermeditatePoints[intermeditatePoints.length - 1], true);\n return intermeditatePoints;\n}\nfunction getSourcePoint(element) {\n var srcPoint;\n if (element.sourcePortWrapper) {\n var srcPort = element.sourcePortWrapper;\n var srcNode = element.sourceWrapper;\n var pt = { x: srcPort.offsetX, y: srcPort.offsetY };\n var direction = getPortDirection(pt, srcNode.corners, srcNode.bounds, false);\n srcPoint = pt;\n }\n else if (element.sourceID && element.sourceWrapper) {\n if (element.targetWrapper) {\n var sPoint = element.sourceWrapper.corners.center;\n var tPoint = element.targetWrapper.corners.center;\n srcPoint = getIntersection(element, element.sourceWrapper, sPoint, tPoint, false);\n }\n else {\n srcPoint = element.sourcePoint;\n }\n }\n else {\n srcPoint = element.sourcePoint;\n }\n return srcPoint;\n}\nfunction getDirection(source, target, layoutOrientation) {\n if (layoutOrientation === 'LeftToRight') {\n source.direction = source.direction ? source.direction : 'Right';\n target.direction = target.direction ? target.direction : 'Left';\n }\n else if (layoutOrientation === 'RightToLeft') {\n source.direction = source.direction ? source.direction : 'Left';\n target.direction = target.direction ? target.direction : 'Right';\n }\n else if (layoutOrientation === 'TopToBottom') {\n source.direction = source.direction ? source.direction : 'Bottom';\n target.direction = target.direction ? target.direction : 'Top';\n }\n else if (layoutOrientation === 'BottomToTop') {\n source.direction = source.direction ? source.direction : 'Top';\n target.direction = target.direction ? target.direction : 'Bottom';\n }\n}\nfunction terminateConnection(element, srcPoint, tarPoint, layoutOrientation) {\n var sourceNode = element.sourceWrapper;\n var targetNode = element.targetWrapper;\n var sourcePort = element.sourcePortWrapper;\n var targetPort = element.targetPortWrapper;\n var srcCorner;\n var tarCorner;\n var intermeditatePoints = [];\n var segPoint;\n var srcDir;\n var tarDir;\n var sourceMargin = { left: 5, right: 5, bottom: 5, top: 5 };\n var targetMargin = { left: 5, right: 5, bottom: 5, top: 5 };\n var source = { corners: srcCorner, point: srcPoint, direction: srcDir, margin: sourceMargin };\n var target = { corners: tarCorner, point: tarPoint, direction: tarDir, margin: targetMargin };\n if (sourceNode !== undefined && targetNode !== undefined) {\n source.corners = sourceNode.corners;\n target.corners = targetNode.corners;\n }\n if (sourcePort !== undefined) {\n var port = { x: sourcePort.offsetX, y: sourcePort.offsetY };\n source.direction = getPortDirection(port, source.corners, sourceNode.bounds, false);\n }\n if (targetPort !== undefined) {\n var tarPortPt = { x: targetPort.offsetX, y: targetPort.offsetY };\n target.direction = getPortDirection(tarPortPt, target.corners, targetNode.bounds, false);\n }\n if (sourceNode !== undefined && targetNode !== undefined) {\n if (source.direction === undefined || target.direction === undefined) {\n if (layoutOrientation) {\n getDirection(source, target, layoutOrientation);\n }\n else {\n if (source.corners.topCenter.y > target.corners.bottomCenter.y &&\n Math.abs(source.corners.topCenter.y - target.corners.bottomCenter.y) >\n (source.margin.top + source.margin.bottom)) {\n source.direction = source.direction ? source.direction : 'Top';\n target.direction = target.direction ? target.direction : 'Bottom';\n }\n else if (source.corners.bottomCenter.y < target.corners.topCenter.y &&\n Math.abs(source.corners.bottomCenter.y - target.corners.topCenter.y) >\n (source.margin.bottom + source.margin.top)) {\n source.direction = source.direction ? source.direction : 'Bottom';\n target.direction = target.direction ? target.direction : 'Top';\n }\n else if (source.corners.middleRight.x < target.corners.middleLeft.x &&\n Math.abs(source.corners.middleRight.x - target.corners.middleLeft.x) >\n (source.margin.right + source.margin.left)) {\n source.direction = source.direction ? source.direction : 'Right';\n target.direction = target.direction ? target.direction : 'Left';\n }\n else if (source.corners.middleLeft.x > target.corners.middleRight.x &&\n Math.abs(source.corners.middleLeft.x - target.corners.middleRight.x) >\n (source.margin.left + source.margin.right)) {\n source.direction = source.direction ? source.direction : 'Left';\n target.direction = target.direction ? target.direction : 'Right';\n }\n else {\n if (sourceNode.id !== targetNode.id && (!source.corners.equals(source.corners, target.corners)) &&\n target.corners.containsPoint(source.corners.topCenter, source.margin.top)) {\n source.direction = source.direction ? source.direction : 'Bottom';\n target.direction = target.direction ? target.direction : 'Top';\n }\n else {\n source.direction = source.direction ? source.direction : 'Top';\n target.direction = target.direction ? target.direction : 'Bottom';\n }\n }\n }\n }\n return defaultOrthoConnection(element, source.direction, target.direction, source.point, target.point);\n }\n //It will be called only when there is only one end node\n checkLastSegmentasTerminal(element);\n if (element.sourceWrapper || element.targetWrapper) {\n connectToOneEnd(element, source, target);\n }\n if (element.type === 'Straight' || element.type === 'Bezier') {\n intermeditatePoints = intermeditatePointsForStraight(element, source, target);\n }\n else {\n if (element.type === 'Orthogonal' && element.segments && element.segments.length > 0 &&\n element.segments[0].length !== null &&\n element.segments[0].direction !== null) {\n intermeditatePoints = findPointToPointOrtho(element, source, target, sourceNode, targetNode, sourcePort, targetPort);\n }\n else {\n if (!source.direction) {\n source.direction = (target.direction) ? ((element.targetPortWrapper !== undefined) ? target.direction : getOppositeDirection(target.direction)) :\n Point.direction(source.point, target.point);\n }\n element.segments[0].points = intermeditatePoints = orthoConnection3Segment(element, source, target);\n }\n }\n return intermeditatePoints;\n}\nfunction updateSegmentPoints(source, segment) {\n var segPoint;\n var angle;\n var extra;\n source.direction = segment.direction;\n segment.points = [];\n segment.points.push(source.point);\n extra = (segment.direction === 'Left' || segment.direction === 'Top') ? -(segment.length) : segment.length;\n angle = (segment.direction === 'Left' || segment.direction === 'Right') ? 0 : 90;\n segPoint = addLineSegment(source.point, extra, angle);\n segment.points.push(segPoint);\n return segPoint;\n}\nfunction pointToPoint(element, source, target) {\n var point;\n var direction;\n var portdirection;\n source.corners = (element.sourceWrapper) ? element.sourceWrapper.corners : undefined;\n if (element.sourcePortWrapper) {\n var port = { x: element.sourcePortWrapper.offsetX, y: element.sourcePortWrapper.offsetY };\n portdirection = getPortDirection(port, source.corners, element.sourceWrapper.bounds, false);\n if (source.corners && (source.direction === 'Bottom' || source.direction === 'Top')) {\n if (target.point.x > source.corners.middleLeft.x && target.point.x < source.corners.middleRight.x) {\n direction = (source.point.y > target.point.y) ? 'Top' : 'Bottom';\n }\n }\n else if (source.corners && (source.direction === 'Left' || source.direction === 'Right')) {\n if (target.point.y > source.corners.topCenter.y && target.point.y < source.corners.bottomCenter.y) {\n direction = (source.point.x > target.point.x) ? 'Left' : 'Right';\n }\n }\n }\n if (element.sourcePortWrapper && portdirection === getOppositeDirection(direction)) {\n var length_1;\n if ((portdirection === 'Left' || portdirection === 'Right') && (source.point.y >= source.corners.topCenter.y\n && source.point.y <= source.corners.center.y) &&\n (target.point.y >= source.corners.topCenter.y && target.point.y <= source.corners.center.y)) {\n source.direction = 'Top';\n length_1 = source.point.y - source.corners.topCenter.y + 20;\n }\n else if ((portdirection === 'Left' || portdirection === 'Right') && (source.point.y > source.corners.center.y\n && source.point.y <= source.corners.bottomCenter.y) &&\n (target.point.y > source.corners.center.y && target.point.y <= source.corners.bottomCenter.y)) {\n source.direction = 'Bottom';\n length_1 = source.corners.bottomCenter.y - source.point.y + 20;\n }\n else if ((portdirection === 'Top' || portdirection === 'Bottom') && (source.point.x >= source.corners.middleLeft.x\n && source.point.x <= source.corners.center.x) &&\n (target.point.x >= source.corners.middleLeft.x && target.point.x <= source.corners.center.x)) {\n source.direction = 'Left';\n length_1 = source.point.x - source.corners.middleLeft.x + 20;\n }\n else if ((portdirection === 'Top' || portdirection === 'Bottom') && (source.point.x <= source.corners.middleRight.x\n && source.point.x > source.corners.center.x) &&\n (target.point.x <= source.corners.middleRight.x && target.point.x < source.corners.center.x)) {\n source.direction = 'Right';\n length_1 = source.corners.middleRight.x - source.point.x + 20;\n }\n if (source.direction && length_1) {\n point = orthoConnection3Segment(element, source, target, length_1, true);\n }\n }\n else {\n source.direction = (direction) ? direction : findSourceDirection(source.direction, source.point, target.point);\n point = orthoConnection2Segment(source, target);\n }\n return point;\n}\nfunction pointToNode(element, source, target) {\n var point;\n target.corners = element.targetWrapper.corners;\n findDirection(element.targetWrapper, source, target, element);\n var direction = findSourceDirection(target.direction, source.point, target.point);\n if (source.direction === target.direction && (source.direction === 'Left' || source.direction === 'Right')) {\n source.direction = direction;\n point = orthoConnection3Segment(element, source, target, element.targetWrapper.width / 2 + 20);\n var source1 = source;\n source1.point = point[1];\n findDirection(element.targetWrapper, source, target, element);\n point = orthoConnection3Segment(element, source, target);\n }\n else {\n source.direction = direction;\n point = orthoConnection2Segment(source, target);\n }\n return point;\n}\nfunction addPoints(element, source, target) {\n var refPoint;\n target.corners = element.targetWrapper.corners;\n var direction;\n var length;\n if (source.direction !== 'Left' && source.direction !== 'Right') {\n if (target.corners.center.y === source.point.y &&\n (!(target.corners.middleLeft.x <= source.point.x && source.point.x <= target.corners.middleRight.x))) {\n direction = 'Top';\n length = target.corners.height / 2 + 20;\n }\n else if ((target.corners.center.y === source.point.y &&\n element.segments[element.segments.length - 2].direction === 'Bottom') ||\n (target.corners.center.y > source.point.y && source.point.y >= target.corners.topCenter.y)) {\n direction = 'Top';\n length = (source.point.y - target.corners.topCenter.y) + 20;\n }\n else if ((target.corners.center.y === source.point.y &&\n element.segments[element.segments.length - 2].direction === 'Top') ||\n (target.corners.center.y < source.point.y && source.point.y <= target.corners.bottomCenter.y)) {\n direction = 'Bottom';\n length = (target.corners.bottomCenter.y - source.point.y) + 20;\n }\n else if (element.sourcePortWrapper !== undefined && element.targetPortWrapper !== undefined &&\n source.corners.topCenter.y <= source.point.y && source.point.y <= source.corners.bottomCenter.y) {\n direction = source.direction;\n length = (source.point.y > target.point.y) ? (source.point.y - source.corners.topCenter.y + 20) :\n (source.corners.bottomCenter.y - source.point.y + 20);\n }\n }\n else {\n if (target.corners.center.x === source.point.x &&\n (!(target.corners.topCenter.y < source.point.y && source.point.y <= target.corners.bottomCenter.y))) {\n direction = 'Left';\n length = target.corners.width / 2 + 20;\n }\n else if ((target.corners.center.x === source.point.x &&\n element.segments[element.segments.length - 2].direction === 'Right')\n || (target.corners.center.x > source.point.x && source.point.x >= target.corners.middleLeft.x)) {\n direction = 'Left';\n length = (source.point.x - target.corners.middleLeft.x) + 20;\n }\n else if ((target.corners.center.x === source.point.x &&\n element.segments[element.segments.length - 2].direction === 'Left') ||\n (target.corners.center.x <= source.point.x && source.point.x <= target.corners.middleRight.x)) {\n direction = 'Right';\n length = (target.corners.middleRight.x - source.point.x) + 20;\n }\n else if (element.sourcePortWrapper !== undefined && element.targetPortWrapper !== undefined &&\n source.corners.middleLeft.x <= source.point.x && source.point.x <= source.corners.middleRight.x) {\n direction = source.direction;\n length = (source.point.x > target.point.x) ? (source.point.x - source.corners.middleLeft.x + 20) :\n (source.corners.middleRight.x - source.point.x + 20);\n }\n }\n var extra = (direction === 'Left' || direction === 'Top') ? -(length) : length;\n var angle = (direction === 'Left' || direction === 'Right') ? 0 : 90;\n refPoint = source.point;\n source.point = addLineSegment(source.point, extra, angle);\n source.direction = Point.direction(source.point, target.point);\n if (element.sourcePortWrapper !== undefined && element.targetPortWrapper !== undefined &&\n (source.corners.center.x === target.corners.center.x || source.corners.center.y === target.corners.center.y)) {\n source.direction = target.direction;\n }\n var point = orthoConnection3Segment(element, source, target);\n point.splice(0, 0, refPoint);\n return point;\n}\nfunction findSegmentDirection(element, source, target, portDir) {\n var update = false;\n switch (target.direction) {\n case 'Left':\n if (element.sourcePortWrapper !== undefined && element.targetPortWrapper !== undefined && (portDir === 'Right' &&\n source.point.x > target.point.x && source.point.y >= source.corners.topCenter.y &&\n source.point.y <= source.corners.bottomCenter.y)\n || (((portDir === 'Bottom' && source.point.y > target.point.y) ||\n (portDir === 'Top' && source.point.y < target.point.y)) &&\n source.point.x >= source.corners.middleLeft.x && source.point.x <= source.corners.middleRight.x)) {\n source.direction = (portDir === 'Right') ? ((source.point.y > target.point.y) ? 'Top' : 'Bottom') :\n (source.point.x < target.point.x ? 'Right' : 'Left');\n update = true;\n }\n else if (source.point.x > target.point.x && (source.point.y > target.point.y || source.point.y < target.point.y)\n && (!(target.corners.topCenter.y > source.point.y && target.corners.bottomCenter.y < source.point.y))) {\n source.direction = 'Left';\n }\n else if ((source.point.x < target.point.x && source.point.y > target.point.y) ||\n (source.point.x > target.point.x && (source.point.y <= target.point.y)\n && ((target.corners.topCenter.y < source.point.y && target.corners.center.y >= source.point.y)))) {\n source.direction = 'Top';\n }\n else if ((source.point.x < target.point.x && source.point.y < target.point.y) ||\n (source.point.x > target.point.x && (source.point.y > target.point.y)\n && ((target.corners.bottomCenter.y < source.point.y && target.corners.center.y > source.point.y)))) {\n source.direction = 'Bottom';\n }\n else if (source.point.y === target.point.y && source.point.x < target.point.x) {\n source.direction = 'Right';\n }\n break;\n case 'Right':\n if (element.sourcePortWrapper !== undefined && element.targetPortWrapper !== undefined &&\n ((portDir === 'Bottom' && source.point.y > target.point.y) ||\n (portDir === 'Top' && source.point.y < target.point.y)) && source.point.x > target.point.x &&\n (source.point.x >= source.corners.middleLeft.x && source.point.x <= source.corners.middleRight.x)) {\n source.direction = (source.point.x > target.point.x) ? 'Left' : 'Right';\n update = true;\n }\n else if (element.sourcePortWrapper !== undefined && element.targetPortWrapper !== undefined &&\n portDir === 'Left' && source.point.x < target.point.x && (source.point.y >= source.corners.topCenter.y &&\n source.point.y <= source.corners.bottomCenter.y)) {\n source.direction = (source.point.y > target.point.y) ? 'Top' : 'Bottom';\n update = true;\n }\n else if (source.point.x < target.point.x && target.corners.topCenter.y <= source.point.y\n && target.corners.bottomCenter.y >= source.point.y && source.point.y === target.point.y) {\n source.direction = 'Top';\n }\n else if (source.point.y > target.point.y && source.point.x > target.point.x) {\n source.direction = 'Top';\n }\n else if (source.point.y < target.point.y && source.point.x > target.point.x) {\n source.direction = 'Bottom';\n }\n else if (source.point.x < target.point.x && (source.point.y > target.point.y ||\n source.point.y < target.point.y)) {\n source.direction = 'Right';\n }\n else if (source.point.y === target.point.y && source.point.x > target.point.x) {\n source.direction = 'Left';\n }\n break;\n case 'Top':\n if (element.sourcePortWrapper !== undefined && element.targetPortWrapper !== undefined && (portDir === 'Bottom' &&\n source.point.y > target.point.y && source.point.x >= source.corners.middleLeft.x &&\n source.point.x <= source.corners.middleRight.x) || (((portDir === 'Right' && source.point.x > target.point.x) ||\n (portDir === 'Left' && target.point.y > source.point.y && target.point.x > source.point.x)) &&\n (source.point.y >= source.corners.topCenter.y && source.point.y <= source.corners.bottomCenter.y))) {\n source.direction = (portDir === 'Bottom') ? ((source.point.x > target.point.x) ? 'Left' : 'Right') :\n (source.point.y < target.point.y) ? 'Bottom' : 'Top';\n update = true;\n }\n else if (source.point.x === target.point.x && source.point.y < target.point.y) {\n source.direction = 'Bottom';\n }\n else if (source.point.y > target.point.y && source.point.x > target.corners.middleLeft.x &&\n source.point.x < target.corners.middleRight.x) {\n source.direction = 'Left';\n }\n else if (source.point.y >= target.point.y) {\n source.direction = 'Top';\n }\n else if (source.point.y < target.point.y && source.point.x > target.point.x) {\n source.direction = 'Left';\n }\n else if (source.point.y < target.point.y && source.point.x < target.point.x) {\n source.direction = 'Right';\n }\n break;\n case 'Bottom':\n if (element.sourcePortWrapper !== undefined && element.targetPortWrapper !== undefined && ((((portDir === 'Right') ||\n (portDir === 'Left' && target.point.x > source.point.x)) && (source.point.y > target.point.y) &&\n source.point.y >= source.corners.topCenter.y && source.point.y <= source.corners.bottomCenter.y) ||\n (((portDir === 'Top' && source.point.y < target.point.y)) &&\n (source.point.x >= source.corners.middleLeft.x && source.point.x <= source.corners.middleRight.x)))) {\n if (portDir === 'Right' || portDir === 'Left') {\n source.direction = (source.point.y > target.point.y) ? 'Top' : 'Bottom';\n }\n else {\n source.direction = (source.point.x > target.point.x) ? 'Left' : 'Right';\n }\n update = true;\n }\n else if (source.point.y < target.point.y && source.point.x > target.corners.middleLeft.x &&\n target.corners.middleRight.x > source.point.x) {\n if (source.point.y < target.point.y && source.point.x > target.corners.middleLeft.x &&\n target.corners.center.x >= source.point.x) {\n source.direction = 'Left';\n }\n else if (source.point.y < target.point.y && source.point.x < target.corners.middleRight.x &&\n target.corners.center.x < source.point.x) {\n source.direction = 'Right';\n }\n }\n else if (source.point.y > target.point.y && source.point.x > target.point.x) {\n source.direction = 'Left';\n }\n else if (source.point.y > target.point.y && source.point.x < target.point.x) {\n source.direction = 'Right';\n }\n else if (source.point.y <= target.point.y && (source.point.x > target.point.x || target.point.x > source.point.x)) {\n source.direction = 'Bottom';\n }\n break;\n }\n return update;\n}\nfunction pointToPort(element, source, target) {\n var point;\n target.corners = element.targetWrapper.corners;\n var portdirection;\n var length;\n if (element.sourcePortWrapper !== undefined) {\n var port = { x: element.sourcePortWrapper.offsetX, y: element.sourcePortWrapper.offsetY };\n portdirection = getPortDirection(port, source.corners, element.sourceWrapper.bounds, false);\n }\n var update = findSegmentDirection(element, source, target, portdirection);\n if (element.sourcePortWrapper !== undefined && element.targetPortWrapper !== undefined &&\n target.direction === getOppositeDirection(portdirection) &&\n ((((target.direction === 'Left' && source.point.x > target.point.x) || (target.direction === 'Right' &&\n source.point.x < target.point.x)) && source.point.y >= source.corners.topCenter.y &&\n source.point.y <= source.corners.bottomCenter.y) || (target.direction === 'Bottom' && source.point.y < target.point.y &&\n (source.point.x >= source.corners.middleLeft.x && source.point.x <= source.corners.middleRight.x)))) {\n point = addPoints(element, source, target);\n }\n else if (source.direction === target.direction) {\n point = orthoConnection3Segment(element, source, target);\n }\n else if ((((target.direction === 'Left' && source.point.x > target.point.x) ||\n (target.direction === 'Right' && source.point.x < target.point.x)) && (source.direction === 'Top' || source.direction === 'Bottom')\n && ((source.point.y <= target.point.y) &&\n ((target.corners.topCenter.y <= source.point.y && target.corners.bottomCenter.y >= source.point.y)))) ||\n ((target.direction === 'Top' && source.point.y > target.point.y) ||\n (target.direction === 'Bottom' && source.point.y < target.point.y) &&\n ((target.corners.middleLeft.x <= source.point.x && target.corners.middleRight.x >= source.point.x)))) {\n point = addPoints(element, source, target);\n }\n else {\n if (element.sourceWrapper !== undefined && element.targetWrapper !== undefined && element.targetPortWrapper !== undefined &&\n ((source.direction === 'Left' || source.direction === 'Right') &&\n (source.point.y >= source.corners.topCenter.y && source.point.y <= source.corners.bottomCenter.y)\n && (target.direction === 'Top' || target.direction === 'Bottom') &&\n (target.corners.center.x === source.corners.center.x))) {\n source.direction = (target.direction === 'Top') ? 'Bottom' : 'Top';\n length = (target.direction === 'Top') ? (source.corners.bottomCenter.y - source.point.y + 20) :\n (source.point.y - source.corners.topCenter.y + 20);\n point = orthoConnection3Segment(element, source, target, length);\n }\n else if (element.sourceWrapper !== undefined && element.targetWrapper !== undefined && element.targetPortWrapper !== undefined &&\n ((source.direction === 'Top' || source.direction === 'Bottom') &&\n (source.point.x >= source.corners.middleLeft.x && source.point.x <= source.corners.middleRight.x) &&\n (target.direction === 'Left' || target.direction === 'Right') && (target.corners.center.y === source.corners.center.y))) {\n source.direction = (target.direction === 'Left') ? 'Right' : 'Left';\n length = (target.direction === 'Left') ? (source.corners.middleRight.x - source.point.x + 20) :\n (source.point.x - source.corners.middleLeft.x + 20);\n point = orthoConnection3Segment(element, source, target, length);\n }\n else if (update) {\n if (source.direction === 'Left' || source.direction === 'Right') {\n length = (source.direction === 'Left') ? (source.point.x - source.corners.middleLeft.x + 20) :\n (source.corners.middleRight.x - source.point.x + 20);\n }\n else {\n length = (source.direction === 'Top') ? (source.point.y - source.corners.topCenter.y + 20) :\n (source.corners.bottomCenter.y - source.point.y + 20);\n }\n point = orthoConnection3Segment(element, source, target, length);\n }\n else {\n point = orthoConnection2Segment(source, target);\n }\n }\n return point;\n}\nfunction findPointToPointOrtho(element, source, target, sourceNode, targetNode, sourcePort, targetPort) {\n var j;\n var point;\n var intermeditatePoints = [];\n var direction;\n var port;\n var seg;\n checkLastSegmentasTerminal(element);\n var removeSegment;\n if (element.segments.length > 0) {\n for (var i = 0; i < element.segments.length; i++) {\n var seg_1 = element.segments[i];\n if (i === 0 && element.sourcePortWrapper !== undefined) {\n port = { x: sourcePort.offsetX, y: sourcePort.offsetY };\n direction = getPortDirection(port, sourceNode.corners, sourceNode.bounds, false);\n if (seg_1.direction === getOppositeDirection(direction)) {\n seg_1.direction = direction;\n }\n }\n if (i > 0 && element.segments[i - 1].direction === seg_1.direction) {\n i = checkConsectiveSegmentAsSame(element, i, source);\n }\n else {\n var lastSegment = element.segments[i - 1];\n source.point = (seg_1.direction) ? updateSegmentPoints(source, seg_1) :\n lastSegment.points[lastSegment.points.length - 1];\n }\n if (i === element.segments.length - 1) {\n if (!targetPort && !targetNode) {\n point = pointToPoint(element, source, target);\n }\n else if (element.targetWrapper && element.targetPortWrapper === undefined) {\n checkSourcePointInTarget(element, source);\n point = pointToNode(element, source, target);\n }\n else {\n point = pointToPort(element, source, target);\n }\n checkPreviousSegment(point, element, source);\n seg_1.points = [];\n if (point.length >= 2) {\n for (j = 0; j < point.length; j++) {\n seg_1.points.push(point[j]);\n }\n }\n else {\n removeSegment = i;\n }\n }\n if (sourcePort && i === 0) {\n var sourcePoint = checkPortdirection(element, sourcePort, sourceNode);\n if (sourcePoint) {\n source.point = sourcePoint;\n }\n }\n }\n if (removeSegment !== undefined) {\n if (removeSegment === element.segments.length - 1) {\n element.segments[removeSegment - 1].direction = null;\n element.segments[removeSegment - 1].length = null;\n }\n element.segments.splice(removeSegment, 1);\n }\n intermeditatePoints = returnIntermeditatePoints(element, intermeditatePoints);\n }\n return intermeditatePoints;\n}\nfunction checkPortdirection(element, sourcePort, sourceNode) {\n var port = { x: sourcePort.offsetX, y: sourcePort.offsetY };\n var point;\n var direction = getPortDirection(port, sourceNode.corners, sourceNode.bounds, false);\n var seg = element.segments[0];\n if (seg.direction !== direction) {\n pointsFromNodeToPoint(seg, direction, sourceNode.corners, seg.points[0], seg.points[seg.points.length - 1], false);\n point = seg.points[seg.points.length - 1];\n seg.direction = Point.direction(seg.points[seg.points.length - 2], seg.points[seg.points.length - 1]);\n }\n return point;\n}\nfunction checkPreviousSegment(tPoints, connector, source) {\n var actualSegment = connector.segments[connector.segments.length - 2];\n var actualLastPoint = actualSegment.points[actualSegment.points.length - 1];\n var direction;\n if (((actualSegment.direction === 'Top' || actualSegment.direction === 'Bottom') && (actualLastPoint.x === tPoints[1].x)) ||\n ((actualSegment.direction === 'Left' || actualSegment.direction === 'Right') && (actualLastPoint.y === tPoints[1].y))) {\n actualSegment.points[actualSegment.points.length - 1] = tPoints[1];\n direction = Point.direction(actualSegment.points[0], actualSegment.points[actualSegment.points.length - 1]);\n if (connector.sourceWrapper !== undefined && connector.sourcePortWrapper === undefined &&\n direction === getOppositeDirection(actualSegment.direction)) {\n if (actualSegment.direction === 'Left' || actualSegment.direction === 'Right') {\n actualSegment.points[0].x = (actualSegment.direction === 'Right') ?\n actualSegment.points[0].x - connector.sourceWrapper.corners.width :\n actualSegment.points[0].x + connector.sourceWrapper.corners.width;\n }\n else {\n actualSegment.points[0].y = (actualSegment.direction === 'Bottom') ?\n actualSegment.points[0].y - connector.sourceWrapper.corners.height :\n actualSegment.points[0].y + connector.sourceWrapper.corners.height;\n }\n }\n actualSegment.direction = direction;\n actualSegment.length = Point.distancePoints(actualSegment.points[0], actualSegment.points[actualSegment.points.length - 1]);\n tPoints.splice(0, 1);\n }\n}\nfunction connectToOneEnd(element, source, target) {\n var sourcePort = element.sourcePortWrapper;\n var targetPort = element.targetPortWrapper;\n var node = element.sourceWrapper;\n var fixedPoint = source.point;\n var nodeMargin = { left: 0, right: 0, top: 0, bottom: 0 };\n var nodeConnectingPoint = { x: 0, y: 0 };\n var refPoint;\n var nodeDirection = 'Top';\n if (!node) {\n node = element.targetWrapper;\n nodeMargin = target.margin;\n }\n else {\n fixedPoint = target.point;\n nodeMargin = source.margin;\n }\n if (element.type === 'Orthogonal') {\n if ((element.segments && element.segments.length > 0) && element.sourceWrapper &&\n element.segments[0].direction) {\n source.direction = element.segments[0].direction;\n nodeConnectingPoint = findPoint(node.corners, source.direction);\n refPoint = findEndPoint(source.direction, nodeConnectingPoint, node);\n nodeConnectingPoint = getIntersection(element, node, nodeConnectingPoint, refPoint, false);\n }\n else {\n var source_1 = { corners: null, direction: null, point: fixedPoint, margin: nodeMargin };\n var target_1 = { corners: null, direction: null, point: null, margin: null };\n findDirection(node, source_1, target_1, element);\n nodeConnectingPoint = target_1.point;\n nodeDirection = target_1.direction;\n }\n }\n else {\n var segmentPoint = void 0;\n if (element.segments && element.segments.length > 1) {\n if (node === element.sourceWrapper) {\n segmentPoint = element.segments[0].point;\n }\n else {\n segmentPoint = element.segments[element.segments.length - 2].point;\n }\n }\n nodeConnectingPoint = getIntersection(element, node, node.bounds.center, (element.segments && element.segments.length > 1) ? segmentPoint : fixedPoint, node === element.targetWrapper);\n }\n if (node === element.sourceWrapper) {\n source.direction = source.direction || nodeDirection;\n source.point = nodeConnectingPoint;\n if (element.sourcePortWrapper) {\n source.point = { x: sourcePort.offsetX, y: sourcePort.offsetY };\n }\n }\n else {\n target.direction = target.direction || nodeDirection;\n target.point = nodeConnectingPoint;\n if (element.targetPortWrapper) {\n target.point = { x: targetPort.offsetX, y: targetPort.offsetY };\n }\n }\n}\nfunction checkSourceAndTargetIntersect(sourceWrapper, targetWrapper) {\n var sourceSegment = createSegmentsCollection(sourceWrapper);\n var targetSegment = createSegmentsCollection(targetWrapper);\n for (var i = 0; i < sourceSegment.length - 1; i++) {\n var srcSegment = sourceSegment[i];\n for (var j = 0; j < targetSegment.length - 1; j++) {\n var tarSegmet = targetSegment[j];\n if (intersect3(srcSegment, tarSegmet).enabled) {\n return true;\n }\n }\n }\n return false;\n}\nfunction createSegmentsCollection(sourceWrapper) {\n var segments = [];\n var points = getPoints(sourceWrapper, sourceWrapper.corners);\n points.push(points[0]);\n for (var i = 0; i < points.length - 1; i++) {\n segments.push(createLineSegment(points[i], points[i + 1]));\n }\n return segments;\n}\nfunction createLineSegment(sPt, tPt) {\n var line = { X1: sPt.x, Y1: sPt.y, X2: tPt.x, Y2: tPt.y };\n return line;\n}\n/* tslint:disable */\nfunction defaultOrthoConnection(ele, srcDir, tarDir, sPt, tPt) {\n var sourceEle = ele.sourceWrapper;\n var targetEle = ele.targetWrapper;\n var srcPort = ele.sourcePortWrapper;\n var tarPort = ele.targetPortWrapper;\n var intermeditatePoints = [];\n var refPoint;\n var seg;\n var srcCor = sourceEle.corners;\n var tarCor = targetEle.corners;\n var point = tarCor.center;\n var i;\n var sourceMargin = { left: 5, right: 5, bottom: 5, top: 5 };\n var targetMargin = { left: 5, right: 5, bottom: 5, top: 5 };\n var source = { corners: srcCor, point: sPt, direction: srcDir, margin: sourceMargin };\n var target = { corners: tarCor, point: tPt, direction: tarDir, margin: targetMargin };\n var isInterSect = false;\n if (ele.sourceWrapper && ele.targetWrapper) {\n isInterSect = checkSourceAndTargetIntersect(ele.sourceWrapper, ele.targetWrapper);\n }\n if (srcPort !== undefined) {\n source.point = { x: srcPort.offsetX, y: srcPort.offsetY };\n switch (source.direction) {\n case 'Bottom':\n case 'Top':\n source.point.y = source.point.y;\n break;\n case 'Left':\n case 'Right':\n source.point.x = source.point.x;\n break;\n }\n }\n else {\n if (ele.type === 'Orthogonal') {\n if (ele.segments && ele.segments.length > 0 && ele.segments[0].direction) {\n source.direction = ele.segments[0].direction;\n }\n source.point = findPoint(source.corners, source.direction);\n refPoint = findEndPoint(source.direction, source.point, sourceEle);\n source.point = getIntersection(ele, sourceEle, source.point, refPoint, false);\n }\n else {\n source.point = sourceEle.corners.center;\n }\n }\n if (tarPort !== undefined) {\n target.point = {\n x: tarPort.offsetX,\n y: tarPort.offsetY\n };\n switch (target.direction) {\n case 'Bottom':\n case 'Top':\n target.point.y = target.point.y;\n break;\n case 'Left':\n case 'Right':\n target.point.x = target.point.x;\n break;\n }\n }\n else {\n if (ele.type === 'Orthogonal') {\n target.point = findPoint(target.corners, target.direction);\n refPoint = findEndPoint(target.direction, target.point, targetEle);\n target.point = getIntersection(ele, targetEle, target.point, refPoint, true);\n }\n else {\n target.point = targetEle.corners.center;\n }\n }\n if (ele.type !== 'Orthogonal') {\n var segment = void 0;\n var first = void 0;\n checkLastSegmentasTerminal(ele);\n if (ele.sourcePortWrapper === undefined) {\n source.point = source.corners.center;\n if (ele.segments && ele.segments.length > 0) {\n first = ele.segments[0];\n segment = (!Point.isEmptyPoint(first.point)) ? first : undefined;\n }\n var tarPoint = (segment !== undefined) ? segment.point : target.point;\n if (ele.type === 'Bezier' && ele.segments.length > 0 &&\n ele.segments[0].vector1.angle && ele.segments[0].vector1.distance) {\n var value = Math.max(source.corners.width, source.corners.height);\n tarPoint = Point.transform(source.point, ele.segments[0].vector1.angle, value / 2);\n }\n source.point = isInterSect ? ele.sourceWrapper.bounds.center : getIntersection(ele, sourceEle, source.point, tarPoint, false);\n }\n if (ele.targetPortWrapper === undefined) {\n target.point = target.corners.center;\n if (ele.segments && ele.segments.length > 1) {\n first = ele.segments[ele.segments.length - 2];\n segment = (!Point.isEmptyPoint(first.point)) ? first : undefined;\n }\n var srcPoint = (segment) ? segment.point : source.point;\n if (ele.type === 'Bezier' && ele.segments.length > 0 &&\n ele.segments[ele.segments.length - 1].vector2.angle &&\n ele.segments[ele.segments.length - 1].vector2.distance) {\n var value = Math.max(source.corners.width, source.corners.height);\n srcPoint = Point.transform(target.point, ele.segments[0].vector2.angle, value / 2);\n }\n target.point = isInterSect ? ele.targetWrapper.bounds.center : getIntersection(ele, targetEle, srcPoint, target.point, true);\n }\n intermeditatePoints = intermeditatePointsForStraight(ele, source, target);\n }\n else {\n if (ele.type === 'Orthogonal' && (ele.segments && ele.segments.length > 0) &&\n ele.segments[0].direction !== null) {\n intermeditatePoints = findIntermeditatePoints(ele, source, target, srcPort, tarPort, sourceEle, targetEle);\n }\n else {\n if (!ele.segments[0]) {\n var segment = new OrthogonalSegment(ele, 'segments', { type: 'Orthogonal' }, true);\n ele.segments.push(segment);\n }\n ele.segments[0].points = intermeditatePoints = findOrthoSegments(ele, source, target);\n }\n }\n return intermeditatePoints;\n}\n/* tslint:enable */\nfunction intermeditatePointsForStraight(element, source, target) {\n var intermeditatePoints = [];\n if (element.segments && element.segments.length > 0) {\n var i = void 0;\n var segPoint = [];\n var srcPoint = source.point;\n for (i = 0; i < element.segments.length; i++) {\n var seg = element.segments[i];\n segPoint = [];\n segPoint.push(srcPoint);\n if (i !== element.segments.length - 1) {\n segPoint.push(seg.point);\n srcPoint = seg.point;\n }\n else {\n segPoint.push(target.point);\n }\n element.segments[i].points = segPoint;\n if (element.segments.length > 1 && Point.equals(seg.points[0], seg.points[1])) {\n (element.segments).splice(i, 1);\n }\n if (seg) {\n for (var j = 0; j < seg.points.length; j++) {\n if (j > 0 || i === 0) {\n intermeditatePoints.push(seg.points[j]);\n }\n }\n }\n }\n }\n return intermeditatePoints;\n}\nfunction findSourceDirection(dir, srcPoint, tarPoint) {\n var direction = (dir === 'Top' || dir === 'Bottom') ?\n ((tarPoint.x > srcPoint.x) ? 'Right' : 'Left') :\n ((tarPoint.y > srcPoint.y) ? 'Bottom' : 'Top');\n return direction;\n}\nfunction checkLastSegmentasTerminal(ele) {\n if (ele.type === 'Straight' || ele.type === 'Bezier') {\n if ((ele.segments.length === 0 || (ele.segments.length > 0 &&\n (!Point.isEmptyPoint(ele.segments[ele.segments.length - 1].point))))) {\n var segment = void 0;\n segment = (ele.type === 'Bezier') ? new BezierSegment(ele, 'segments', { type: 'Bezier' }, true) :\n new StraightSegment(ele, 'segments', { type: 'Straight' }, true);\n (ele.segments).push(segment);\n }\n }\n else {\n if (ele.segments.length === 0 || ele.segments[ele.segments.length - 1].direction) {\n var segment = new OrthogonalSegment(ele, 'segments', { type: 'Orthogonal' }, true);\n ele.segments.push(segment);\n }\n }\n}\nfunction checkConsectiveSegmentAsSame(ele, i, source) {\n var seg = ele.segments[i];\n var extra = (seg.direction === 'Left' || seg.direction === 'Top') ? -(seg.length) : seg.length;\n var angle = (seg.direction === 'Left' || seg.direction === 'Right') ? 0 : 90;\n var segPoint = addLineSegment(source.point, extra, angle);\n ele.segments[i - 1].length += seg.length;\n ele.segments[i - 1].points[1] = source.point = segPoint;\n ele.segments.splice(i, 1);\n i--;\n return i;\n}\nfunction nodeOrPortToNode(ele, source, target) {\n var point;\n var portdirection;\n if (ele.sourcePortWrapper) {\n var port = { x: ele.sourcePortWrapper.offsetX, y: ele.sourcePortWrapper.offsetY };\n portdirection = getPortDirection(port, source.corners, ele.sourceWrapper.bounds, false);\n }\n findDirection(ele.targetWrapper, source, target, ele);\n var direction = findSourceDirection(target.direction, source.point, target.point);\n if (ele.sourcePortWrapper !== undefined && source.direction === target.direction &&\n ((source.direction === 'Top' || source.direction === 'Bottom') && (source.corners.center.x === target.corners.center.x)\n || (source.direction === 'Left' || source.direction === 'Right') && (source.corners.center.y === target.corners.center.y))) {\n source.direction = direction;\n point = (direction === 'Top' || direction === 'Bottom') ?\n orthoConnection3Segment(ele, source, target, ele.sourceWrapper.height / 2 + 20) :\n orthoConnection3Segment(ele, source, target, ele.sourceWrapper.width / 2 + 20);\n var source1 = source;\n source1.point = point[1];\n if (direction === 'Left' || direction === 'Right') {\n target.direction = direction;\n target.point = (direction === 'Left') ? target.corners.middleLeft : target.corners.middleRight;\n }\n else {\n findDirection(ele.targetWrapper, source, target, ele);\n }\n point = orthoConnection3Segment(ele, source, target);\n }\n else if (target.point.x >= source.corners.middleLeft.x && target.point.x <= source.corners.middleRight.x &&\n source.point.y >= source.corners.topCenter.y && source.point.y <= source.corners.bottomCenter.y) {\n source.direction = (target.point.y > source.point.y) ? 'Bottom' : 'Top';\n var length_2 = (source.direction === 'Top') ? (source.point.y - source.corners.topCenter.y + 20) :\n (source.corners.bottomCenter.y - source.point.y + 20);\n point = orthoConnection3Segment(ele, source, target, length_2);\n }\n else if (ele.sourcePortWrapper && portdirection === getOppositeDirection(direction)) {\n var length_3;\n if ((portdirection === 'Left' || portdirection === 'Right') && (source.point.y >= source.corners.topCenter.y\n && source.point.y <= source.corners.bottomCenter.y)) {\n source.direction = (target.point.y > source.point.y) ? 'Bottom' : 'Top';\n length_3 = source.corners.height / 2 + 20;\n }\n else if ((portdirection === 'Top' || portdirection === 'Bottom') && (source.point.x >= source.corners.middleLeft.x\n && source.point.x <= source.corners.middleRight.x)) {\n source.direction = (target.point.x > source.point.x) ? 'Right' : 'Left';\n length_3 = source.corners.width / 2 + 20;\n }\n if (source.direction && length_3) {\n point = orthoConnection3Segment(ele, source, target, length_3, true);\n }\n else {\n source.direction = direction;\n point = orthoConnection2Segment(source, target);\n }\n }\n else if (ele.sourcePortWrapper && portdirection === target.direction && (portdirection === 'Top' || portdirection === 'Bottom') &&\n (source.corners.center.x === target.corners.center.x)) {\n source.direction = (target.point.y > source.point.y) ? 'Bottom' : 'Top';\n var len = (source.direction === 'Bottom') ? (source.corners.bottomCenter.y - source.point.y + 20) :\n (source.point.y - source.corners.topCenter.y + 20);\n point = orthoConnection3Segment(ele, source, target, len);\n }\n else {\n source.direction = direction;\n point = orthoConnection2Segment(source, target);\n }\n return point;\n}\nfunction checkSourcePointInTarget(ele, source) {\n if (ele.targetWrapper !== undefined && ele.targetPortWrapper === undefined) {\n if (ele.targetWrapper.corners.containsPoint(source.point)) {\n var target = ele.targetWrapper;\n var segment = ele.segments[ele.segments.length - 2];\n var lastPoint = segment.points[segment.points.length - 1];\n var direction = getOppositeDirection(segment.direction);\n if (direction === 'Bottom') {\n if (lastPoint.y < target.corners.bottomCenter.y) {\n segment.points[segment.points.length - 1].y = target.corners.bottomCenter.y + 20;\n segment.length = Point.distancePoints(segment.points[0], segment.points[segment.points.length - 1]);\n }\n }\n else if (direction === 'Top') {\n if (lastPoint.y > target.corners.topCenter.y) {\n segment.points[segment.points.length - 1].y = target.corners.topCenter.y - 20;\n segment.length = Point.distancePoints(segment.points[0], segment.points[segment.points.length - 1]);\n }\n }\n else if (direction === 'Left') {\n if (lastPoint.x > target.corners.middleLeft.x) {\n segment.points[segment.points.length - 1].x = target.corners.middleLeft.x - 20;\n segment.length = Point.distancePoints(segment.points[0], segment.points[segment.points.length - 1]);\n }\n }\n else if (direction === 'Right') {\n if (lastPoint.x < target.corners.middleRight.x) {\n segment.points[segment.points.length - 1].x = target.corners.middleRight.x + 20;\n segment.length = Point.distancePoints(segment.points[0], segment.points[segment.points.length - 1]);\n }\n }\n source.point = segment.points[segment.points.length - 1];\n }\n }\n}\nfunction findIntermeditatePoints(ele, source, target, srcPort, tarPort, sourceEle, targetEle) {\n var point;\n var intermeditatePoints = [];\n var seg;\n var j;\n var removeSegment;\n checkLastSegmentasTerminal(ele);\n for (var i = 0; i < ele.segments.length; i++) {\n seg = ele.segments[i];\n if (srcPort && source.direction === getOppositeDirection(seg.direction)) {\n seg.direction = source.direction;\n }\n if (i > 0 && ele.segments[i - 1].direction === seg.direction) {\n i = checkConsectiveSegmentAsSame(ele, i, source);\n }\n else {\n if (seg.direction) {\n source.point = updateSegmentPoints(source, ele.segments[i]);\n }\n else {\n var segment = ele.segments[i - 1];\n source.point = segment.points[segment.points.length - 1];\n }\n }\n if (i === ele.segments.length - 1) {\n checkSourcePointInTarget(ele, source);\n if (tarPort === undefined) {\n point = nodeOrPortToNode(ele, source, target);\n }\n else {\n point = pointToPort(ele, source, target);\n }\n checkPreviousSegment(point, ele, source);\n seg.points = [];\n if (point.length >= 2) {\n for (j = 0; j < point.length; j++) {\n seg.points.push(point[j]);\n }\n }\n else {\n removeSegment = i;\n }\n }\n if (removeSegment !== undefined) {\n if (removeSegment === ele.segments.length - 1) {\n ele.segments[removeSegment - 1].direction = null;\n ele.segments[removeSegment - 1].length = null;\n }\n ele.segments.splice(removeSegment, 1);\n }\n if (srcPort && i === 0) {\n var sourcePoint = checkPortdirection(ele, srcPort, sourceEle);\n if (sourcePoint) {\n source.point = sourcePoint;\n }\n }\n }\n return returnIntermeditatePoints(ele, intermeditatePoints);\n}\nfunction returnIntermeditatePoints(element, intermeditatePoints) {\n for (var i = 0; i < element.segments.length; i++) {\n var seg = element.segments[i];\n for (var j = 0; j < seg.points.length; j++) {\n if (j > 0 || i === 0) {\n intermeditatePoints.push(seg.points[j]);\n }\n }\n }\n return intermeditatePoints;\n}\nfunction findDirection(node, source, target, ele) {\n var nodeDirection;\n var nodeConnectingPoint = { x: 0, y: 0 };\n var nodeCorners = node.corners;\n var nodeMargin = source.margin;\n var fixedPoint = source.point;\n if (nodeCorners.bottomCenter.y + nodeMargin.bottom < fixedPoint.y) {\n nodeDirection = 'Bottom';\n nodeConnectingPoint = nodeCorners.bottomCenter;\n }\n else if (nodeCorners.topCenter.y - nodeMargin.top > fixedPoint.y) {\n nodeDirection = 'Top';\n nodeConnectingPoint = nodeCorners.topCenter;\n }\n else if (nodeCorners.middleLeft.x - nodeMargin.left > fixedPoint.x) {\n nodeDirection = 'Left';\n nodeConnectingPoint = nodeCorners.middleLeft;\n }\n else if (nodeCorners.middleRight.x + nodeMargin.right < fixedPoint.x) {\n nodeDirection = 'Right';\n nodeConnectingPoint = nodeCorners.middleRight;\n }\n else {\n var top_1 = Math.abs(fixedPoint.y - nodeCorners.topCenter.y);\n var right = Math.abs(fixedPoint.x - nodeCorners.middleRight.x);\n var bottom = Math.abs(fixedPoint.y - nodeCorners.bottomCenter.y);\n var left = Math.abs(fixedPoint.x - nodeCorners.middleLeft.x);\n var shortes = Number.MAX_VALUE;\n shortes = top_1;\n nodeDirection = 'Top';\n nodeConnectingPoint = nodeCorners.topCenter;\n if (shortes > right) {\n shortes = right;\n nodeDirection = 'Right';\n nodeConnectingPoint = nodeCorners.middleRight;\n }\n if (shortes > bottom) {\n shortes = bottom;\n nodeDirection = 'Bottom';\n nodeConnectingPoint = nodeCorners.bottomCenter;\n }\n if (shortes > left) {\n //shortes = left;\n nodeDirection = 'Left';\n nodeConnectingPoint = nodeCorners.middleLeft;\n }\n }\n target.point = nodeConnectingPoint;\n target.direction = nodeDirection;\n var refPoint = findEndPoint(target.direction, target.point, node);\n target.point = getIntersection(ele, node, target.point, refPoint, node === ele.targetWrapper);\n}\nfunction findOrthoSegments(ele, source, target, extra) {\n var swap = false;\n var intermeditatePoints = [];\n var seg;\n swap = getSwapping(source.direction, target.direction);\n if (swap) {\n swapPoints(source, target);\n }\n if (source.direction === 'Right' && target.direction === 'Left') {\n seg = getRightToLeftSegmentCount(ele, source, target, swap);\n }\n else if (source.direction === 'Right' && target.direction === 'Right') {\n seg = getRightToRightSegmentCount(ele, source, target);\n }\n else if (source.direction === 'Right' && target.direction === 'Top') {\n seg = getRightToTopSegmentCount(ele, source, target, swap);\n }\n else if (source.direction === 'Right' && target.direction === 'Bottom') {\n seg = getRightToBottomSegmentCount(ele, source, target, swap);\n }\n else if (source.direction === 'Bottom' && target.direction === 'Top') {\n seg = getBottomToTopSegmentCount(source, target);\n }\n else if (source.direction === 'Bottom' && target.direction === 'Bottom') {\n source.margin = { left: 10, right: 10, top: 10, bottom: 10 };\n target.margin = { left: 10, right: 10, top: 10, bottom: 10 };\n seg = getBottomToBottomSegmentCount(ele, source, target);\n }\n else if (source.direction === 'Bottom' && target.direction === 'Left') {\n seg = getBottomToLeftSegmentCount(ele, source, target, swap);\n }\n else if (source.direction === 'Left' && target.direction === 'Left') {\n seg = getLeftToLeftSegmentCount(ele, source, target);\n }\n else if (source.direction === 'Left' && target.direction === 'Top') {\n seg = getLeftToTopSegmentCount(ele, source, target, swap);\n }\n else if (source.direction === 'Top' && target.direction === 'Top') {\n seg = getTopToTopSegmentCount(ele, source, target);\n }\n if (swap) {\n swapPoints(source, target);\n }\n intermeditatePoints = addOrthoSegments(ele, seg, source, target, extra);\n return intermeditatePoints;\n}\n/** @private */\nexport function findAngle(s, e) {\n var r = { x: e.x, y: s.y };\n var sr = Point.findLength(s, r);\n var re = Point.findLength(r, e);\n var es = Point.findLength(e, s);\n var ang = Math.asin(re / es);\n ang = ang * 180 / Math.PI;\n if (s.x < e.x) {\n if (s.y > e.y) {\n ang = 360 - ang;\n }\n }\n else {\n if (s.y < e.y) {\n ang = 180 - ang;\n }\n else {\n ang = 180 + ang;\n }\n }\n return ang;\n}\nfunction findPoint(cor, direction) {\n var point;\n switch (direction) {\n case 'Left':\n point = cor.middleLeft;\n break;\n case 'Top':\n point = cor.topCenter;\n break;\n case 'Right':\n point = cor.middleRight;\n break;\n case 'Bottom':\n point = cor.bottomCenter;\n break;\n }\n return point;\n}\nfunction pointsFromNodeToPoint(seg, direction, bounds, point, endPoint, isTarget) {\n var minSpace = 13;\n var x;\n var points = [];\n var y;\n points.push(point);\n var straight;\n straight = (point.y === endPoint.y && (direction === 'Left' && endPoint.x < point.x ||\n direction === 'Right' && endPoint.x > point.x)) ||\n (point.x === endPoint.x && (direction === 'Top' && endPoint.y < point.y ||\n direction === 'Bottom' && endPoint.y > point.y));\n if (!straight) {\n if (direction === 'Top' || direction === 'Bottom') {\n if (direction === 'Top' && endPoint.y < point.y && endPoint.y > point.y - minSpace ||\n direction === 'Bottom' && endPoint.y > point.y && endPoint.y < point.y + minSpace) {\n y = direction === 'Top' ? bounds.top - minSpace : bounds.bottom + minSpace;\n points.push({ x: point.x, y: y });\n points.push({ x: point.x + (endPoint.x - point.x) / 2, y: y });\n points.push({ x: point.x + (endPoint.x - point.x) / 2, y: endPoint.y });\n }\n else if (Math.abs(point.x - endPoint.x) > minSpace &&\n (direction === 'Top' && endPoint.y < point.y || direction === 'Bottom' && endPoint.y > point.y)) {\n //twosegments\n points.push({ x: point.x, y: endPoint.y });\n }\n else {\n y = direction === 'Top' ? bounds.top - minSpace : bounds.bottom + minSpace;\n x = (endPoint.x < point.x) ? bounds.left - minSpace : bounds.right + minSpace;\n points.push({ x: point.x, y: y });\n points.push({ x: endPoint.x, y: y });\n }\n }\n else {\n if (direction === 'Left' && endPoint.x < point.x && endPoint.x > point.x - minSpace || direction === 'right' &&\n endPoint.x > point.x && endPoint.x < point.x + minSpace) {\n x = direction === 'Left' ? bounds.left - minSpace : bounds.right + minSpace;\n points.push({ x: x, y: point.y });\n points.push({ x: x, y: point.y + (endPoint.y - point.y) / 2 });\n points.push({ x: endPoint.x, y: point.y + (endPoint.y - point.y) / 2 });\n }\n else if (Math.abs(point.y - endPoint.y) > minSpace &&\n (direction === 'Left' && endPoint.x < point.x || direction === 'Right' && endPoint.x > point.x)) {\n points.push({ x: endPoint.x, y: point.y });\n //twosegments\n }\n else {\n x = direction === 'Left' ? bounds.left - minSpace : bounds.right + minSpace;\n points.push({ x: x, y: point.y });\n points.push({ x: x, y: endPoint.y });\n }\n }\n if (isTarget) {\n points.push(seg.points[0]);\n points.reverse();\n }\n seg.points = points;\n }\n}\nfunction addLineSegment(point, extra, angle) {\n var segEnd = Point.transform(point, angle, extra);\n return segEnd;\n}\nfunction getIntersection(ele, bounds, sPt, tPt, isTar) {\n sPt = { x: sPt.x, y: sPt.y };\n tPt = { x: tPt.x, y: tPt.y };\n var angle = Point.findAngle(tPt, sPt);\n var child;\n var intersection;\n var wrapper = isTar ? ele.targetWrapper : ele.sourceWrapper;\n var segmentPoints;\n var point = isTar || ele.type === 'Orthogonal' ? sPt : tPt;\n var sourcePoint = Point.transform(sPt, angle, Math.max(wrapper.actualSize.height / 2, wrapper.actualSize.width / 2));\n child = wrapper;\n if (ele.type === 'Orthogonal') {\n var constValue = Math.abs(child.bounds.height - child.actualSize.height) / 2 + 5;\n if (sPt.x === tPt.x) {\n if (sPt.y < tPt.y) {\n sPt.y -= constValue;\n }\n else {\n sPt.y += constValue;\n }\n }\n constValue = Math.abs(child.bounds.width - child.actualSize.width) / 2 + 5;\n if (sPt.y === tPt.y) {\n if (sPt.x < tPt.x) {\n sPt.x -= constValue;\n }\n else {\n sPt.x += constValue;\n }\n }\n }\n else {\n var angle_1 = isTar ? Point.findAngle(sPt, tPt) : Point.findAngle(tPt, sPt);\n if (isTar) {\n var angle_2 = Point.findAngle(sPt, tPt);\n tPt = Point.transform({ x: tPt.x, y: tPt.y }, angle_2, Math.max(wrapper.actualSize.width, wrapper.actualSize.height));\n }\n else {\n var angle_3 = Point.findAngle(tPt, sPt);\n sPt = Point.transform({ x: sPt.x, y: sPt.y }, angle_3, Math.max(wrapper.actualSize.width, wrapper.actualSize.height));\n }\n }\n if (wrapper instanceof PathElement && wrapper.data) {\n segmentPoints = child.getPoints();\n if (((child.data.split('m').length - 1) + (child.data.split('M').length - 1)) === 1) {\n segmentPoints[segmentPoints.length] = segmentPoints[0];\n }\n }\n else {\n segmentPoints = getPoints(wrapper, wrapper.corners);\n segmentPoints[segmentPoints.length] = segmentPoints[0];\n }\n var length = segmentPoints.length;\n var thisSegment = { X1: sPt.x, Y1: sPt.y, X2: tPt.x, Y2: tPt.y };\n return getIntersectionPoints(thisSegment, segmentPoints, true, point) || ((isTar) ? tPt : sPt);\n}\nfunction setLineEndPoint(element, point, isTarget) {\n point.x = Math.round(point.x * 100) / 100;\n point.y = Math.round(point.y * 100) / 100;\n if (isTarget) {\n element.targetPoint = point;\n }\n else {\n element.sourcePoint = point;\n }\n return point;\n}\n/** @private */\nexport function getIntersectionPoints(thisSegment, pts, minimal, point) {\n var length = pts.length;\n var min;\n var segment = {\n X1: pts[0].x, Y1: pts[0].y, X2: pts[1].x,\n Y2: pts[1].y\n };\n var intersection = intersectSegment(thisSegment, segment);\n if (intersection) {\n // if (!minimal) { return intersection; } //commented because minimal is always true\n min = Point.distancePoints(intersection, point);\n }\n if (isNaN(min) || min > 0) {\n for (var i = 1; i < length - 1; i++) {\n segment = {\n X1: pts[i].x, Y1: pts[i].y,\n X2: pts[i + 1].x, Y2: pts[i + 1].y\n };\n var intersect = intersectSegment(thisSegment, segment);\n if (intersect) {\n // if (!minimal) { return intersect; }//commented because minimal is always true\n var dist = Point.distancePoints(intersect, point);\n if (isNaN(min) || min > dist) {\n min = dist;\n intersection = intersect;\n }\n if (min >= 0 && min <= 1) {\n break;\n }\n }\n }\n }\n return intersection;\n}\nfunction intersectSegment(segment1, segment2) {\n var x1 = segment1.X1;\n var y1 = segment1.Y1;\n var x2 = segment1.X2;\n var y2 = segment1.Y2;\n var x3 = segment2.X1;\n var y3 = segment2.Y1;\n var x4 = segment2.X2;\n var y4 = segment2.Y2;\n var a1;\n var a2;\n var b1;\n var b2;\n var c1;\n var c2;\n var x;\n var y;\n var r1;\n var r2;\n var r3;\n var r4;\n var denom;\n var offset;\n var num;\n a1 = y2 - y1;\n b1 = x1 - x2;\n c1 = (x2 * y1) - (x1 * y2);\n r3 = ((a1 * x3) + (b1 * y3) + c1);\n r4 = ((a1 * x4) + (b1 * y4) + c1);\n if ((r3 !== 0) && (r4 !== 0) && sameSign(r3, r4)) {\n return null;\n }\n a2 = y4 - y3;\n b2 = x3 - x4;\n c2 = (x4 * y3) - (x3 * y4);\n r1 = (a2 * x1) + (b2 * y1) + c2;\n r2 = (a2 * x2) + (b2 * y2) + c2;\n if ((r1 !== 0) && (r2 !== 0) && (sameSign(r1, r2))) {\n return null;\n }\n denom = (a1 * b2) - (a2 * b1);\n if (denom === 0) {\n return null;\n }\n if (denom < 0) {\n offset = -denom / 2;\n }\n else {\n offset = denom / 2;\n }\n offset = 0;\n num = (b1 * c2) - (b2 * c1);\n if (num < 0) {\n x = (num - offset) / denom;\n }\n else {\n x = (num + offset) / denom;\n }\n num = (a2 * c1) - (a1 * c2);\n if (num < 0) {\n y = (num - offset) / denom;\n }\n else {\n y = (num + offset) / denom;\n }\n return { x: x, y: y };\n}\nfunction sameSign(a, b) {\n return ((a * b) >= 0);\n}\nfunction findEndPoint(direction, point, node) {\n var targetPoint;\n switch (direction) {\n case 'Bottom':\n targetPoint = { x: point.x, y: point.y - Math.max(node.actualSize.width, node.actualSize.height) };\n break;\n case 'Top':\n targetPoint = { x: point.x, y: point.y + Math.max(node.actualSize.width, node.actualSize.height) };\n break;\n case 'Right':\n targetPoint = { y: point.y, x: point.x - Math.max(node.actualSize.width, node.actualSize.height) };\n break;\n case 'Left':\n targetPoint = { y: point.y, x: point.x + Math.max(node.actualSize.width, node.actualSize.height) };\n break;\n }\n return targetPoint;\n}\nfunction getRightToLeftSegmentCount(element, source, target, swap) {\n var srcPort = element.sourcePortWrapper;\n var targetPort = element.targetPortWrapper;\n var pts;\n var diffY = Math.round(Math.abs(source.point.y - target.point.y));\n var diffX = Math.round(Math.abs(source.point.x - target.point.x));\n var right = { x: Math.max(source.point.x, source.corners.right), y: source.point.y };\n var left = { x: Math.min(target.point.x, target.corners.left), y: target.point.y };\n var margin = 10;\n if (swap) {\n var point = void 0;\n point = left;\n left = right;\n right = point;\n }\n if (!(source.corners.bottomCenter.y + margin < target.corners.topCenter.y - margin ||\n source.corners.topCenter.y - margin > target.corners.bottomCenter.y + margin)) {\n margin = 0;\n }\n source.margin = { left: margin, right: margin, top: margin, bottom: margin };\n target.margin = { left: margin, right: margin, top: margin, bottom: margin };\n if (diffY === 0 && (source.corners.middleRight.x < target.corners.middleLeft.x\n || (swap && source.corners.middleRight.x < target.corners.middleLeft.x))) {\n pts = NoOfSegments.One;\n }\n else if (source.corners.middleRight.x + source.margin.right < target.corners.middleLeft.x - target.margin.left) {\n pts = NoOfSegments.Three;\n }\n else if (element.sourceWrapper !== element.targetWrapper &&\n (source.corners.containsPoint(left) || target.corners.containsPoint(right))) {\n pts = NoOfSegments.Three;\n }\n else if (source.corners.bottomCenter.y <= target.corners.topCenter.y) {\n pts = NoOfSegments.Five;\n }\n else if (source.corners.topCenter.y >= target.corners.topCenter.y) {\n pts = NoOfSegments.Five;\n }\n else if ((srcPort !== undefined && srcPort.offsetY <= target.corners.topCenter.y) ||\n (srcPort === undefined && source.corners.middleRight.y <= target.corners.topCenter.y)) {\n pts = NoOfSegments.Five;\n }\n else if ((srcPort !== undefined && srcPort.offsetY >= target.corners.bottomCenter.y) ||\n (srcPort === undefined && source.corners.middleRight.y >= target.corners.bottomCenter.y)) {\n pts = NoOfSegments.Five;\n }\n else {\n pts = NoOfSegments.Five;\n }\n return pts;\n}\nfunction getRightToRightSegmentCount(element, sourceObj, targetObj) {\n var sourcePort = element.sourcePortWrapper;\n var tarPort = element.targetPortWrapper;\n var pts;\n var diffX = sourceObj.point.x - targetObj.point.x;\n var diffY = sourceObj.point.y - targetObj.point.y;\n targetObj.margin = { left: 10, right: 10, top: 10, bottom: 10 };\n sourceObj.margin = { left: 10, right: 10, top: 10, bottom: 10 };\n if (sourceObj.corners.middleRight.x >= targetObj.corners.middleRight.x) {\n if ((sourcePort !== undefined && (sourcePort.offsetY < targetObj.corners.topCenter.y ||\n sourcePort.offsetY > targetObj.corners.bottomCenter.y)) ||\n (sourcePort === undefined && sourceObj.corners.middleRight.y < targetObj.corners.topCenter.y)) {\n pts = NoOfSegments.Three;\n }\n else if ((sourcePort !== undefined && sourcePort.offsetY > targetObj.corners.bottomCenter.y + targetObj.margin.bottom\n && sourceObj.corners.topCenter.y > targetObj.corners.bottomCenter.y) ||\n (sourcePort === undefined && sourceObj.corners.middleRight.y > targetObj.corners.bottomCenter.y)) {\n pts = NoOfSegments.Three;\n }\n else if ((sourcePort !== undefined && sourcePort.offsetY < targetObj.corners.topCenter.y\n && sourceObj.corners.bottomCenter.y > targetObj.corners.topCenter.y) ||\n (sourcePort === undefined && sourceObj.corners.middleRight.y > targetObj.corners.bottomCenter.y)) {\n pts = NoOfSegments.Three;\n }\n else if (sourceObj.corners.middleRight.x < targetObj.corners.middleLeft.x ||\n targetObj.corners.middleRight.x < sourceObj.corners.middleLeft.x) {\n pts = NoOfSegments.Five;\n }\n else if (diffX === 0 || diffY === 0) {\n pts = NoOfSegments.One;\n }\n else {\n pts = NoOfSegments.Three;\n }\n }\n else if ((tarPort !== undefined && sourceObj.corners.bottomCenter.y < tarPort.offsetY) ||\n (tarPort === undefined && sourceObj.corners.bottomCenter.y < targetObj.corners.middleRight.y)) {\n pts = NoOfSegments.Three;\n }\n else if ((tarPort !== undefined && sourceObj.corners.topCenter.y > tarPort.offsetY) ||\n (tarPort === undefined && sourceObj.corners.topCenter.y > targetObj.corners.middleRight.y)) {\n pts = NoOfSegments.Three;\n }\n else if ((tarPort !== undefined && ((sourcePort !== undefined && sourcePort.offsetX < targetObj.corners.middleLeft.x &&\n sourcePort.offsetX !== tarPort.offsetX && sourcePort.offsetY !== tarPort.offsetY &&\n (Math.abs(sourceObj.corners.middleRight.x - targetObj.corners.middleLeft.x) <= 20)) ||\n (sourcePort === undefined && sourceObj.corners.middleRight.x < targetObj.corners.middleLeft.x &&\n sourceObj.corners.center.x !== targetObj.corners.center.x && sourceObj.corners.center.y !== targetObj.corners.center.y)))) {\n pts = NoOfSegments.Three;\n }\n else if (sourceObj.corners.middleRight.x < targetObj.corners.middleLeft.x) {\n pts = NoOfSegments.Five;\n }\n else if (diffX === 0 || diffY === 0) {\n pts = NoOfSegments.One;\n }\n else {\n pts = NoOfSegments.Three;\n }\n return pts;\n}\nfunction getRightToTopSegmentCount(element, source, target, swap) {\n var tarPort = element.targetPortWrapper;\n var srcPort = element.sourcePortWrapper;\n var right = { x: Math.max(source.point.x, source.corners.right), y: source.point.y };\n var top = { x: target.point.x, y: Math.min(target.point.y, target.corners.top) };\n var pts;\n target.margin = { left: 5, right: 5, top: 5, bottom: 5 };\n source.margin = { top: 5, bottom: 5, left: 5, right: 5 };\n if (swap) {\n var port = void 0;\n port = srcPort;\n srcPort = tarPort;\n tarPort = port;\n }\n if ((srcPort !== undefined && srcPort.offsetY < target.corners.topCenter.y - target.margin.top) ||\n (srcPort === undefined && source.corners.bottomCenter.y < target.corners.topCenter.y - target.margin.top)) {\n if (source.corners.bottomCenter.y < target.corners.topCenter.y) {\n if ((tarPort !== undefined && source.corners.middleRight.x + source.margin.right < tarPort.offsetX) ||\n (tarPort === undefined && source.corners.middleRight.x + source.margin.right < target.corners.topCenter.x)) {\n pts = NoOfSegments.Two;\n }\n else {\n pts = NoOfSegments.Four;\n }\n }\n else if ((tarPort !== undefined && source.corners.middleLeft.x > tarPort.offsetX) ||\n (tarPort === undefined && source.corners.middleLeft.x > target.corners.topCenter.x)) {\n pts = NoOfSegments.Four;\n }\n else {\n pts = NoOfSegments.Two;\n }\n }\n else if (srcPort !== undefined && Math.abs(source.corners.middleRight.x - target.corners.middleLeft.x) <= 25 &&\n Math.abs(srcPort.offsetY - target.corners.topCenter.y) <= 25) {\n pts = NoOfSegments.Two;\n }\n else if (tarPort !== undefined && Math.abs(tarPort.offsetX - source.corners.topCenter.x) >= 25 &&\n source.corners.middleRight.y < tarPort.offsetY) {\n pts = NoOfSegments.Two;\n }\n else if (source.corners.middleRight.x < target.corners.middleLeft.x) {\n pts = NoOfSegments.Four;\n }\n else if (element.sourceWrapper !== element.targetWrapper &&\n (source.corners.containsPoint(top) || target.corners.containsPoint(right))) {\n pts = NoOfSegments.Two;\n }\n else {\n pts = NoOfSegments.Four;\n }\n return pts;\n}\nfunction getRightToBottomSegmentCount(element, source, target, swap) {\n source.margin = { left: 10, right: 10, top: 10, bottom: 10 };\n target.margin = { left: 10, right: 10, top: 10, bottom: 10 };\n var pts;\n var srcPort = element.sourcePortWrapper;\n var tarPort = element.targetPortWrapper;\n var right = { x: Math.max(source.point.x, source.corners.right), y: source.point.y };\n var bottom = { x: target.point.x, y: Math.max(target.point.y, target.corners.bottom) };\n if (swap) {\n var port = void 0;\n port = srcPort;\n srcPort = tarPort;\n tarPort = port;\n }\n if ((srcPort !== undefined && srcPort.offsetY > target.corners.bottomCenter.y + target.margin.bottom) ||\n (srcPort === undefined && source.corners.middleRight.y > target.corners.bottomCenter.y + target.margin.bottom)) {\n if (source.corners.topCenter.y > target.corners.bottomCenter.y) {\n if ((tarPort !== undefined && source.corners.middleRight.x + source.margin.right < tarPort.offsetX) ||\n (tarPort === undefined && source.corners.middleRight.x + source.margin.right < target.corners.bottomCenter.x)) {\n pts = NoOfSegments.Two;\n }\n else {\n pts = NoOfSegments.Four;\n }\n }\n else if ((tarPort !== undefined && source.corners.middleLeft.x > tarPort.offsetX) ||\n (tarPort === undefined && source.corners.middleLeft.x > target.corners.bottomCenter.x)) {\n pts = NoOfSegments.Four;\n }\n else {\n pts = NoOfSegments.Two;\n }\n }\n else if (srcPort !== undefined &&\n Math.abs(source.corners.middleRight.x - target.corners.middleLeft.x) <= 25 &&\n Math.abs(srcPort.offsetY - target.corners.bottomCenter.y) <= 25) {\n pts = NoOfSegments.Two;\n }\n else if (source.corners.middleRight.x < target.corners.middleLeft.x) {\n pts = NoOfSegments.Four;\n }\n else {\n pts = NoOfSegments.Four;\n }\n return pts;\n}\nfunction getBottomToTopSegmentCount(source, target) {\n var pts;\n var diffX = source.point.x - target.point.x;\n var diffY = source.point.y - target.point.y;\n var bottom = { x: source.point.x, y: Math.max(source.point.y, source.corners.bottom) };\n var top = { x: target.point.x, y: Math.min(target.point.y, target.corners.top) };\n var margin = 10;\n if (!(source.corners.middleRight.x + margin < target.corners.middleLeft.x - margin ||\n source.corners.middleLeft.x - margin > target.corners.middleRight.x + margin)) {\n margin = 0;\n }\n source.margin = { left: margin, right: margin, top: margin, bottom: margin };\n target.margin = { left: margin, right: margin, top: margin, bottom: margin };\n if (diffX === 0 && source.corners.bottomCenter.y < target.corners.topCenter.y) {\n pts = NoOfSegments.One;\n }\n else if (source.corners.bottomCenter.y + source.margin.bottom < target.corners.topCenter.y - target.margin.top) {\n pts = NoOfSegments.Three;\n }\n else if (source.corners.middleRight.x + source.margin.right < target.corners.middleLeft.x - target.margin.left) {\n pts = NoOfSegments.Five;\n }\n else if (source.corners.middleLeft.x - source.margin.left > target.corners.middleRight.x + target.margin.right) {\n pts = NoOfSegments.Five;\n }\n else {\n pts = NoOfSegments.Five;\n }\n return pts;\n}\nfunction getBottomToLeftSegmentCount(element, source, target, swap) {\n var srcPort = element.sourcePortWrapper;\n var tarPort = element.targetPortWrapper;\n var bottom = { x: source.point.x, y: Math.max(source.point.y, source.corners.bottom) };\n var left = { x: Math.min(target.point.x, target.corners.left), y: target.point.y };\n var pts;\n if (swap) {\n var port = void 0;\n port = srcPort;\n srcPort = tarPort;\n tarPort = port;\n }\n if ((srcPort !== undefined && srcPort.offsetX < target.corners.middleLeft.x - target.margin.left) ||\n (srcPort === undefined && source.corners.bottomCenter.x < target.corners.bottomLeft.x - target.margin.left)) {\n if (source.corners.middleRight.x < target.corners.middleLeft.x) {\n if ((tarPort !== undefined && source.corners.bottomCenter.y + source.margin.bottom < tarPort.offsetY) ||\n (tarPort === undefined && source.corners.bottomCenter.y + source.margin.bottom < target.corners.middleLeft.y)) {\n pts = NoOfSegments.Two;\n }\n else {\n pts = NoOfSegments.Four;\n }\n }\n else if ((tarPort !== undefined && source.corners.topCenter.y > tarPort.offsetY) ||\n (tarPort === undefined && source.corners.topCenter.y > target.corners.middleLeft.y)) {\n pts = NoOfSegments.Four;\n }\n else {\n pts = NoOfSegments.Two;\n }\n }\n else if (tarPort !== undefined &&\n Math.abs(source.corners.middleRight.x - target.corners.middleLeft.x) <= 25 &&\n Math.abs(tarPort.offsetY - source.corners.bottomCenter.y) <= 25) {\n pts = NoOfSegments.Two;\n }\n else {\n pts = NoOfSegments.Four;\n }\n return pts;\n}\nfunction getBottomToBottomSegmentCount(element, source, target) {\n var srcPort = element.sourcePortWrapper;\n var tarPort = element.targetPortWrapper;\n var difX = Math.round(Math.abs(source.point.x - target.point.x));\n var diffY = Math.round(Math.abs(target.point.y - target.point.y));\n var pts;\n if (source.corners.bottomCenter.y < target.corners.bottomCenter.y) {\n if ((srcPort !== undefined && srcPort.offsetX < target.corners.middleLeft.x - target.margin.left) ||\n (srcPort === undefined && source.corners.bottomCenter.x < target.corners.middleLeft.x - target.margin.left)) {\n pts = NoOfSegments.Three;\n }\n else if ((srcPort !== undefined && srcPort.offsetX > target.corners.middleRight.x + target.margin.right) ||\n (srcPort === undefined && source.corners.bottomCenter.x > target.corners.middleRight.x + target.margin.right)) {\n pts = NoOfSegments.Three;\n }\n else if (source.corners.bottomCenter.y < target.corners.topCenter.y) {\n pts = NoOfSegments.Five;\n }\n else if (difX === 0 || diffY === 0) {\n pts = NoOfSegments.One;\n }\n else {\n pts = NoOfSegments.Three;\n }\n }\n else if ((tarPort !== undefined && source.corners.middleLeft.x > tarPort.offsetX) ||\n (tarPort === undefined && source.corners.middleLeft.x > target.corners.middleLeft.x)) {\n pts = NoOfSegments.Three;\n }\n else if ((tarPort !== undefined && source.corners.middleRight.x < tarPort.offsetX) ||\n (tarPort === undefined &&\n source.corners.middleRight.x < target.corners.middleRight.x)) {\n pts = NoOfSegments.Three;\n }\n else if (source.corners.topCenter.y > target.corners.bottomCenter.y) {\n pts = NoOfSegments.Five;\n }\n else if (difX === 0 || diffY === 0) {\n pts = NoOfSegments.One;\n }\n else {\n pts = NoOfSegments.Three;\n }\n return pts;\n}\nfunction getLeftToTopSegmentCount(element, source, target, swap) {\n var pts;\n var sourcePort = element.sourcePortWrapper;\n var tarPort = element.targetPortWrapper;\n var left = { x: Math.min(source.point.x, source.corners.left), y: source.point.y };\n var top = { x: target.point.x, y: Math.min(target.point.y, target.corners.top) };\n if (swap) {\n var port = void 0;\n port = sourcePort;\n sourcePort = tarPort;\n tarPort = port;\n }\n if ((sourcePort !== undefined && sourcePort.offsetY < target.corners.topCenter.y - target.margin.top) ||\n (sourcePort === undefined && (source.corners.bottomCenter.y < target.corners.topCenter.y - target.margin.top ||\n source.corners.middleLeft.y < target.corners.topCenter.y - target.margin.top))) {\n if (source.corners.bottomCenter.y < target.corners.topCenter.y) {\n if ((tarPort !== undefined && source.corners.middleLeft.x - source.margin.left > tarPort.offsetX) ||\n (tarPort === undefined && source.corners.middleLeft.x - source.margin.left > target.corners.topCenter.x)) {\n pts = NoOfSegments.Two;\n }\n else {\n pts = NoOfSegments.Four;\n }\n }\n else if ((tarPort !== undefined && source.corners.middleRight.x < tarPort.offsetX) ||\n (tarPort === undefined && source.corners.middleRight.x < target.corners.topCenter.x)) {\n pts = NoOfSegments.Four;\n }\n else {\n pts = NoOfSegments.Two;\n }\n }\n else if (sourcePort !== undefined &&\n Math.abs(source.corners.middleLeft.x - target.corners.middleRight.x) <= 25 &&\n Math.abs(sourcePort.offsetY - target.corners.topCenter.y) <= 25) {\n pts = NoOfSegments.Two;\n }\n else if (element.sourceWrapper !== element.targetWrapper &&\n (source.corners.containsPoint(top) || target.corners.containsPoint(left))) {\n pts = NoOfSegments.Two;\n }\n else if (source.corners.middleLeft.x > target.corners.middleRight.x) {\n pts = NoOfSegments.Four;\n }\n else {\n pts = NoOfSegments.Four;\n }\n return pts;\n}\nfunction getLeftToLeftSegmentCount(element, source, target) {\n var srcPort = element.sourcePortWrapper;\n var targetPort = element.targetPortWrapper;\n source.margin = { left: 10, right: 10, top: 10, bottom: 10 };\n target.margin = { left: 10, right: 10, top: 10, bottom: 10 };\n var diffX = Math.round(Math.abs(source.point.x - target.point.x));\n var diffY = Math.round(Math.abs(source.point.y - target.point.y));\n var pts;\n if (source.corners.middleLeft.x < target.corners.middleLeft.x) {\n if ((targetPort !== undefined && source.corners.bottomCenter.y + source.margin.bottom < targetPort.offsetY) ||\n (targetPort === undefined && source.corners.bottomCenter.y + source.margin.bottom < target.corners.middleLeft.y)) {\n pts = NoOfSegments.Three;\n }\n else if ((targetPort !== undefined && source.corners.topCenter.y - source.margin.top > targetPort.offsetY) ||\n (targetPort === undefined && source.corners.topCenter.y - source.margin.top > target.corners.middleLeft.y)) {\n pts = NoOfSegments.Three;\n }\n else if (source.corners.middleRight.x < target.corners.middleLeft.x ||\n target.corners.middleRight.x < source.corners.middleLeft.x) {\n pts = NoOfSegments.Five;\n }\n else if (diffX === 0 || diffY === 0) {\n pts = NoOfSegments.One;\n }\n else {\n pts = NoOfSegments.Three;\n }\n }\n else if ((srcPort !== undefined && srcPort.offsetY < target.corners.topCenter.y - target.margin.top) ||\n (srcPort === undefined && source.corners.middleLeft.y < target.corners.topCenter.y)) {\n pts = NoOfSegments.Three;\n }\n else if ((srcPort !== undefined && srcPort.offsetY > target.corners.bottomCenter.y + target.margin.bottom) ||\n (srcPort === undefined && source.corners.middleLeft.y > target.corners.bottomCenter.y + target.margin.bottom)) {\n pts = NoOfSegments.Three;\n }\n else if (source.corners.middleLeft.x > target.corners.middleRight.x) {\n pts = NoOfSegments.Five;\n }\n else if (diffX === 0 || diffY === 0) {\n pts = NoOfSegments.One;\n }\n else {\n pts = NoOfSegments.Three;\n }\n return pts;\n}\nfunction getTopToTopSegmentCount(element, source, target) {\n var srcPort = element.sourcePortWrapper;\n var targetPort = element.targetPortWrapper;\n var diffX = Math.round(Math.abs(source.point.x - target.point.x));\n var diffY = Math.round(Math.abs(source.point.y - target.point.y));\n source.margin = { left: 10, right: 10, top: 10, bottom: 10 };\n var pts;\n target.margin = { left: 10, right: 10, top: 10, bottom: 10 };\n if (source.corners.topCenter.y < target.corners.topCenter.y) {\n if ((targetPort !== undefined && source.corners.middleLeft.x > targetPort.offsetX) ||\n (targetPort === undefined && source.corners.middleLeft.x > target.corners.middleLeft.x)) {\n pts = NoOfSegments.Three;\n }\n else if ((targetPort !== undefined && source.corners.middleRight.x < targetPort.offsetX) ||\n (targetPort === undefined && source.corners.middleRight.x < target.corners.middleRight.x)) {\n pts = NoOfSegments.Three;\n }\n else if (source.corners.bottomCenter.y < target.corners.topCenter.y) {\n pts = NoOfSegments.Five;\n }\n else if (diffX === 0 || diffY === 0) {\n pts = NoOfSegments.One;\n }\n else {\n pts = NoOfSegments.Three;\n }\n }\n else if ((srcPort !== undefined && srcPort.offsetX > target.corners.middleRight.x) ||\n (srcPort === undefined && source.corners.middleLeft.x > target.corners.middleRight.x)) {\n pts = NoOfSegments.Three;\n }\n else if ((srcPort !== undefined && srcPort.offsetX < target.corners.middleLeft.x) ||\n (srcPort === undefined && source.corners.bottomRight.x < target.corners.middleLeft.x)) {\n pts = NoOfSegments.Three;\n }\n else if (source.corners.topCenter.y > target.corners.bottomCenter.y) {\n pts = NoOfSegments.Five;\n }\n else if (diffX === 0 || diffY === 0) {\n pts = NoOfSegments.One;\n }\n else {\n pts = NoOfSegments.Three;\n }\n return pts;\n}\nfunction addOrthoSegments(element, seg, source, target, segLength) {\n var src = element.sourceWrapper;\n var tar = element.targetWrapper;\n var tarPort = element.targetPortWrapper;\n var intermeditatePoints;\n var srcCorner = src.corners;\n var tarCorner = tar.corners;\n if (tar !== undefined) {\n if (tarPort === undefined) {\n var refPoint = findEndPoint(target.direction, target.point, tar);\n target.point = getIntersection(element, tar, target.point, refPoint, true);\n }\n }\n var extra = 20;\n if (source.direction !== target.direction || seg === NoOfSegments.Five) {\n if (source.direction === getOppositeDirection(target.direction) || seg === NoOfSegments.Three) {\n switch (source.direction) {\n case 'Left':\n if (srcCorner.middleLeft.x > tarCorner.middleRight.x) {\n extra = Math.min(extra, (srcCorner.middleLeft.x - tarCorner.middleRight.x) / 2);\n }\n break;\n case 'Right':\n if (srcCorner.middleRight.x < tarCorner.middleLeft.x) {\n extra = Math.min(extra, (tarCorner.middleLeft.x - srcCorner.middleRight.x) / 2);\n }\n break;\n case 'Top':\n if (srcCorner.topCenter.y > tarCorner.bottomCenter.y) {\n extra = Math.min(extra, (srcCorner.topCenter.y - tarCorner.bottomCenter.y) / 2);\n }\n break;\n case 'Bottom':\n if (srcCorner.bottomCenter.y < tarCorner.topCenter.y) {\n extra = Math.min(extra, (tarCorner.topCenter.y - srcCorner.bottomCenter.y) / 2);\n }\n break;\n }\n }\n }\n switch (source.direction) {\n case 'Left':\n if (source.point.x > srcCorner.middleLeft.x) {\n extra = (source.point.x - srcCorner.middleLeft.x) > extra ? ((source.point.x - srcCorner.middleLeft.x) + extra) : extra;\n }\n break;\n case 'Right':\n if (source.point.x < srcCorner.middleRight.x) {\n extra = (srcCorner.middleRight.x - source.point.x) > extra ? ((srcCorner.middleRight.x - source.point.x) + extra) : extra;\n }\n break;\n case 'Top':\n if (source.point.y > srcCorner.topCenter.y) {\n extra = (source.point.y - srcCorner.topCenter.y) > extra ? ((source.point.y - srcCorner.topCenter.y) + extra) : extra;\n }\n break;\n case 'Bottom':\n if (source.point.y < srcCorner.bottomCenter.y) {\n extra = (srcCorner.bottomCenter.y - source.point.y) > extra ? ((srcCorner.bottomCenter.y - source.point.y) + extra) : extra;\n }\n break;\n }\n if (segLength) {\n extra = Math.max(extra, segLength);\n }\n if (seg === NoOfSegments.One) {\n intermeditatePoints = [source.point, target.point];\n }\n if (seg === NoOfSegments.Two) {\n intermeditatePoints = orthoConnection2Segment(source, target);\n }\n if (seg === NoOfSegments.Three) {\n intermeditatePoints = orthoConnection3Segment(element, source, target, extra);\n }\n if (seg === NoOfSegments.Four) {\n var prevDir = undefined;\n intermeditatePoints = orthoConnection4Segment(source, target, prevDir, intermeditatePoints, extra);\n }\n if (seg === NoOfSegments.Five) {\n intermeditatePoints = orthoConnection5Segment(source, target, extra);\n }\n return intermeditatePoints;\n}\nfunction orthoConnection2Segment(source, target) {\n var intermeditatePoints;\n switch (source.direction) {\n case 'Left':\n case 'Right':\n var point1 = { x: target.point.x, y: source.point.y };\n intermeditatePoints = (Point.equals(source.point, point1) || Point.equals(target.point, point1)) ?\n [source.point, target.point] : [source.point, point1, target.point];\n break;\n case 'Top':\n case 'Bottom':\n var point2 = { x: source.point.x, y: target.point.y };\n intermeditatePoints = (Point.equals(source.point, point2) || Point.equals(target.point, point2)) ?\n [source.point, target.point] : [source.point, point2, target.point];\n break;\n }\n return intermeditatePoints;\n}\nfunction orthoConnection3Segment(element, source, target, extra, allow) {\n if (!extra) {\n extra = 20;\n }\n var srcPort = element.sourcePortWrapper;\n var intermeditatePoints;\n var segmentValue;\n var next;\n var diffx = target.point.x - source.point.x;\n var diffy = target.point.y - source.point.y;\n var temp;\n if (!allow && (Math.abs(diffx) < 0.001 || Math.abs(diffy) < 0.001)) {\n if (target.direction === undefined) {\n intermeditatePoints = [source.point, target.point];\n return intermeditatePoints;\n }\n }\n if (element.targetWrapper === undefined && Math.abs(diffx) <= 31 && Math.abs(diffy) <= 31) {\n if ((source.direction === 'Left' || source.direction === 'Right')) {\n if (Math.abs(diffy) < 12) {\n source.direction = (source.point.y > target.point.y) ? 'Top' : 'Bottom';\n }\n }\n else {\n if (Math.abs(diffx) < 12) {\n source.direction = (source.point.x > target.point.x) ? 'Left' : 'Right';\n }\n }\n if (Math.abs(diffx) > 12 || Math.abs(diffy) > 12) {\n return orthoConnection2Segment(source, target);\n }\n else {\n extra += 5;\n }\n }\n if (source.direction === 'Left' || source.direction === 'Right') {\n if (source.direction === 'Right') {\n if (target.direction !== undefined && target.direction === 'Right') {\n extra = Math.max(source.point.x, target.point.x) - source.point.x + extra;\n }\n if (source.point.x > target.point.x && srcPort === undefined) {\n extra = -extra;\n }\n }\n else {\n if (target.direction !== undefined && target.direction === 'Left') {\n extra = source.point.x - Math.min(source.point.x, target.point.x) + extra;\n }\n if (source.point.x > target.point.x || srcPort !== undefined || source.direction === 'Left') {\n extra = -extra;\n }\n }\n temp = target.point.y - source.point.y;\n segmentValue = addLineSegment(source.point, extra, 0);\n temp = target.point.y - segmentValue.y;\n if (temp !== 0) {\n next = addLineSegment(segmentValue, target.point.y - segmentValue.y, 90);\n }\n }\n else if (source.direction === 'Top' || source.direction === 'Bottom') {\n if (source.direction === 'Bottom') {\n if (target.direction !== undefined && target.direction === 'Bottom') {\n extra = Math.max(source.point.y, target.point.y) - source.point.y + extra;\n }\n }\n else {\n if (target.direction !== undefined && target.direction === 'Top') {\n extra = source.point.y - Math.min(source.point.y, target.point.y) + extra;\n }\n if (source.point.y > target.point.y || (srcPort !== undefined) || source.direction === 'Top') {\n extra = -extra;\n }\n }\n temp = target.point.x - source.point.x;\n if (source.direction === 'Top') {\n segmentValue = addLineSegment(source.point, extra, 90);\n }\n else {\n segmentValue = addLineSegment(source.point, extra, 90);\n }\n temp = target.point.x - segmentValue.x;\n if (temp !== 0) {\n next = addLineSegment(segmentValue, target.point.x - segmentValue.x, 0);\n }\n }\n if (temp === 0) {\n return intermeditatePoints = [\n source.point,\n target.point\n ];\n }\n intermeditatePoints = [\n source.point,\n segmentValue,\n next,\n target.point\n ];\n return intermeditatePoints;\n}\nfunction orthoConnection5Segment(source, target, extra) {\n if (extra === void 0) { extra = 20; }\n var intermeditatePoints;\n var length = extra;\n var sLeft = source.corners.middleLeft.x - source.margin.left;\n var sRight = source.corners.middleRight.x + source.margin.right;\n var sBottom = source.corners.bottomCenter.y + source.margin.bottom;\n var sTop = source.corners.topCenter.y - source.margin.top;\n var tLeft = target.corners.middleLeft.x - target.margin.left;\n var tRight = target.corners.middleRight.x + target.margin.right;\n var tBottom = target.corners.bottomCenter.y + target.margin.bottom;\n var tTop = target.corners.topCenter.y - target.margin.top;\n var segmentValue;\n switch (source.direction) {\n case 'Left':\n if ((sTop > tTop && sTop < tBottom || sBottom < tBottom && sBottom > tTop) &&\n sLeft > tLeft && sLeft <= tRight && extra >= 20) {\n length = source.point.x - target.corners.middleLeft.x + length;\n }\n segmentValue = addLineSegment(source.point, length, 180);\n break;\n case 'Top':\n if ((sLeft > tLeft && sLeft < tRight || sRight < tRight && sRight > tLeft) &&\n sTop > tTop && sTop <= tBottom && extra >= 20) {\n length = source.point.y - target.corners.topCenter.y + length;\n }\n segmentValue = addLineSegment(source.point, length, 270);\n break;\n case 'Right':\n if ((sTop > tTop && sTop < tBottom || sBottom < tBottom && sBottom > tTop) &&\n sRight < tRight && sRight >= tLeft && extra >= 20) {\n length = target.corners.middleRight.x - source.point.x + length;\n }\n segmentValue = addLineSegment(source.point, length, 0);\n break;\n case 'Bottom':\n if ((sLeft > tLeft && sLeft < tRight || sRight < tRight && sRight > tLeft) &&\n sBottom < tBottom && sBottom >= tTop && extra >= 20) {\n length = target.corners.bottomCenter.y - source.point.y + length;\n }\n segmentValue = addLineSegment(source.point, length, 90);\n break;\n }\n intermeditatePoints = [\n source.point,\n segmentValue\n ];\n if (source.direction === 'Top' || source.direction === 'Bottom') {\n var prevDir = source.direction;\n source.direction = segmentValue.x > target.point.x ? 'Left' : 'Right';\n source.point = segmentValue;\n intermeditatePoints = orthoConnection4Segment(source, target, prevDir, intermeditatePoints);\n }\n else {\n var prevDir = source.direction;\n source.direction = segmentValue.y > target.point.y ? 'Top' : 'Bottom';\n source.point = segmentValue;\n intermeditatePoints = orthoConnection4Segment(source, target, prevDir, intermeditatePoints);\n }\n return intermeditatePoints;\n}\nfunction orthoConnection4Segment(source, target, prevDir, interPt, e) {\n if (e === void 0) { e = 20; }\n var segmentValue;\n if (prevDir === undefined) {\n source.margin = { left: 2, right: 2, top: 2, bottom: 2 };\n target.margin = { left: 0, right: 5, top: 0, bottom: 5 };\n }\n else {\n if (source.direction === 'Bottom') {\n if (target.corners.top > source.corners.bottom && target.corners.top - source.corners.bottom < 20) {\n e = (target.corners.top - source.corners.bottom) / 2;\n }\n }\n else if (source.direction === 'Top') {\n if (target.corners.bottom < source.corners.top && source.corners.top - target.corners.bottom < 20) {\n e = (source.corners.top - target.corners.bottom) / 2;\n }\n }\n else if (source.direction === 'Right') {\n if (target.corners.left > source.corners.right && target.corners.left - source.corners.right < 20) {\n e = (target.corners.left - source.corners.right) / 2;\n }\n }\n else if (source.direction === 'Left') {\n if (target.corners.right < source.corners.left && source.corners.left - target.corners.right < 20) {\n e = (source.corners.left - target.corners.right) / 2;\n }\n }\n }\n switch (source.direction) {\n case 'Left':\n e = getLeftLength(source, target, prevDir, e);\n segmentValue = addLineSegment(source.point, e, 180);\n break;\n case 'Right':\n e = getRightLength(source, target, e, prevDir);\n segmentValue = addLineSegment(source.point, e, 0);\n break;\n case 'Top':\n e = getTopLength(source, target, prevDir, e);\n segmentValue = addLineSegment(source.point, e, 270);\n break;\n case 'Bottom':\n e = getBottomLength(source, target, e, prevDir);\n segmentValue = addLineSegment(source.point, e, 90);\n }\n if (interPt !== undefined) {\n interPt.push(segmentValue);\n }\n else {\n interPt = [\n source.point,\n segmentValue\n ];\n }\n if (source.direction === 'Top' || source.direction === 'Bottom') {\n getOrtho3Seg(segmentValue, 'horizontal', source, target, interPt);\n }\n else if (source.direction === 'Right' || source.direction === 'Left') {\n getOrtho3Seg(segmentValue, 'vertical', source, target, interPt);\n }\n return interPt;\n}\nfunction getOrtho3Seg(sPt, orientation, src, tar, points) {\n var point1;\n var point2;\n var point3;\n if (orientation === 'horizontal') {\n src.margin = { left: 0, right: 10, top: 0, bottom: 10 };\n tar.margin = { left: 0, right: 10, top: 0, bottom: 10 };\n }\n else if (orientation === 'vertical') {\n src.margin = { left: 10, right: 0, top: 10, bottom: 0 };\n tar.margin = { left: 10, right: 0, top: 10, bottom: 0 };\n }\n var extra = 20;\n if (orientation === 'horizontal') {\n switch (tar.direction) {\n case 'Left':\n if (src.corners.right + src.margin.right < tar.corners.left - tar.margin.left &&\n (tar.corners.left - src.corners.right > extra || (src.corners.top - src.margin.top <= tar.point.y &&\n src.corners.bottom + src.margin.bottom >= tar.point.y))) {\n var gap = Math.min(Math.abs(tar.corners.left - src.corners.right) / 2, 20);\n extra = src.corners.right - sPt.x + gap;\n }\n else {\n if ((src.direction === 'Top' && sPt.y > tar.point.y) || (src.direction === 'Bottom' && sPt.y < tar.point.y)) {\n extra = Math.min(tar.corners.left, sPt.x) - sPt.x - 20;\n }\n else if (sPt.x >= src.corners.left - src.margin.left && sPt.x <= src.corners.right + src.margin.right) {\n extra = Math.min(tar.corners.left, src.corners.left) - sPt.x - 20;\n }\n else {\n extra = tar.corners.left - sPt.x - 20;\n }\n }\n break;\n case 'Right':\n if (src.corners.left - src.margin.left > tar.corners.right + tar.margin.right &&\n (src.corners.left - tar.corners.right > extra || (src.corners.top - src.margin.top <= tar.point.y &&\n src.corners.bottom + src.margin.bottom >= tar.point.y))) {\n var gap = Math.min(Math.abs(src.corners.left - tar.corners.right) / 2, 20);\n extra = src.corners.left - sPt.x - gap;\n }\n else {\n if ((src.direction === 'Top' && sPt.y > tar.point.y) || (src.direction === 'Bottom' && sPt.y < tar.point.y)) {\n extra = Math.max(tar.corners.right, sPt.x) - sPt.x + 20;\n }\n else if (sPt.x >= src.corners.left - src.margin.left && sPt.x <= src.corners.right + src.margin.right) {\n extra = Math.max(tar.corners.right, src.corners.right) - sPt.x + 20;\n }\n else {\n extra = tar.corners.right - sPt.x + 20;\n }\n }\n break;\n }\n point1 = addLineSegment(sPt, extra, 0);\n point2 = addLineSegment(point1, tar.point.y - sPt.y, 90);\n point3 = tar.point;\n }\n else if (orientation === 'vertical') {\n switch (tar.direction) {\n case 'Top':\n if (src.corners.bottom + src.margin.bottom < tar.corners.top - tar.margin.top &&\n (tar.corners.top - src.corners.bottom > extra || (src.corners.left - src.margin.left <= tar.point.x &&\n src.corners.right + src.margin.right >= tar.point.x))) {\n var gap = Math.min(Math.abs(tar.corners.top - src.corners.bottom) / 2, 20);\n extra = src.corners.bottom - sPt.y + gap;\n }\n else {\n if ((src.direction === 'Left' && sPt.x > tar.point.x) || (src.direction === 'Right' && sPt.x < tar.point.x)) {\n extra = Math.min(tar.corners.top, sPt.y) - sPt.y - 20;\n }\n else if (sPt.y >= src.corners.top - src.margin.top && sPt.y <= src.corners.bottom + src.margin.bottom) {\n extra = Math.min(tar.corners.top, src.corners.top) - sPt.y - 20;\n }\n else {\n extra = tar.corners.top - sPt.y - 20;\n }\n }\n break;\n case 'Bottom':\n if (src.corners.top - src.margin.top > tar.corners.bottom + tar.margin.bottom &&\n (src.corners.top - tar.corners.bottom > extra || (src.corners.left - src.margin.left <= tar.point.x &&\n src.corners.right + src.margin.right >= tar.point.x))) {\n var gap = Math.min(Math.abs(src.corners.top - tar.corners.bottom) / 2, 20);\n extra = src.corners.top - sPt.y - gap;\n }\n else {\n if ((src.direction === 'Left' && sPt.x > tar.point.x) || (src.direction === 'Right' && sPt.x < tar.point.x)) {\n extra = Math.max(tar.corners.bottom, sPt.y) - sPt.y + 20;\n }\n else if (sPt.y >= src.corners.top - src.margin.top && sPt.y <= src.corners.bottom + src.margin.bottom) {\n extra = Math.max(tar.corners.bottom, src.corners.bottom) - sPt.y + 20;\n }\n else {\n extra = tar.corners.bottom - sPt.y + 20;\n }\n }\n break;\n }\n point1 = addLineSegment(sPt, extra, 90);\n point2 = addLineSegment(point1, tar.point.x - sPt.x, 0);\n point3 = tar.point;\n }\n points.push(point1);\n points.push(point2);\n points.push(point3);\n}\nfunction getTopLength(source, target, preDir, length) {\n if (source.corners.top - source.margin.top > target.corners.top + target.margin.top &&\n source.corners.top - source.margin.top <= target.corners.bottom + target.margin.bottom) {\n if (target.direction === 'Right' && source.point.x < target.point.x) {\n length += source.corners.top - target.corners.top;\n }\n else if (target.direction === 'Left' && source.point.x > target.point.x) {\n length += source.corners.top - target.corners.top;\n }\n length += source.point.y - source.corners.top;\n }\n else {\n if ((preDir !== undefined && preDir !== 'Left') && target.direction === 'Right' && source.point.x < target.point.x) {\n length += Math.abs(source.point.y - target.corners.bottom);\n }\n else if ((preDir !== undefined && preDir !== 'Right') && target.direction === 'Left'\n && target.point.x < source.point.x) {\n length += Math.abs(source.point.y - target.corners.bottom);\n }\n else {\n length += source.point.y - source.corners.top;\n }\n }\n return length;\n}\nfunction getLeftLength(source, target, prevDir, segLength) {\n if (source.corners.left - source.margin.left > target.corners.left - target.margin.left &&\n source.corners.left - source.margin.left <= target.corners.right + target.margin.right) {\n if (target.direction === 'Bottom' && source.point.y < target.point.y) {\n segLength += source.corners.left - target.corners.left;\n }\n else if (target.direction === 'Top' && source.point.y > target.point.y) {\n segLength += source.corners.left - target.corners.left;\n }\n segLength += source.point.x - source.corners.left;\n }\n else {\n if ((prevDir !== undefined && prevDir !== 'Top') && target.direction === 'Bottom' && source.point.y < target.point.y) {\n segLength += Math.abs(source.point.x - target.corners.right);\n }\n else if ((prevDir !== undefined && prevDir !== 'Bottom') &&\n target.direction === 'Top' && target.point.y < source.point.y) {\n segLength += Math.abs(source.point.x - target.corners.right);\n }\n else {\n segLength += source.point.x - source.corners.left;\n }\n }\n return segLength;\n}\nfunction getRightLength(source, target, length, prevDir) {\n if (source.corners.right + source.margin.right < target.corners.right + target.margin.right &&\n source.corners.right + source.margin.right >= target.corners.left - target.margin.left) {\n if (target.direction === 'Bottom' && source.point.y < target.point.y) {\n length += target.corners.right - source.corners.right;\n }\n else if (target.direction === 'Top' && source.point.y > target.point.y) {\n length += target.corners.right - source.corners.right;\n }\n length += source.corners.right - source.point.x;\n }\n else {\n if ((prevDir !== undefined && prevDir !== 'Top') && target.direction === 'Bottom' && source.point.y < target.point.y) {\n length += Math.abs(source.point.x - target.corners.right);\n }\n else if ((prevDir !== undefined && prevDir !== 'Bottom') && target.direction === 'Top' && target.point.y < source.point.y) {\n length += Math.abs(source.point.x - target.corners.right);\n }\n else {\n length += source.corners.right - source.point.x;\n }\n }\n return length;\n}\nfunction getBottomLength(source, target, segLength, prevDir) {\n if (source.corners.bottom + source.margin.bottom < target.corners.bottom + target.margin.bottom &&\n source.corners.bottom + source.margin.bottom >= target.corners.top - target.margin.top) {\n if (target.direction === 'Right' && source.point.x < target.point.x) {\n segLength += target.corners.bottom - source.corners.bottom;\n }\n else if (target.direction === 'Left' && source.point.x > target.point.x) {\n segLength += target.corners.bottom - source.corners.bottom;\n }\n segLength += source.corners.bottom - source.point.y;\n }\n else {\n if ((prevDir !== undefined && prevDir !== 'Left') &&\n target.direction === 'Right' && source.point.x < target.point.x) {\n segLength += Math.abs(source.point.y - target.corners.bottom);\n }\n else if ((prevDir !== undefined && prevDir !== 'Right') &&\n target.direction === 'Left' && target.point.x < source.point.x) {\n segLength += Math.abs(source.point.y - target.corners.bottom);\n }\n else {\n segLength += source.corners.bottom - source.point.y;\n }\n }\n return segLength;\n}\nfunction getSwapping(srcDir, tarDir) {\n var swap = false;\n switch (srcDir) {\n case 'Left':\n switch (tarDir) {\n case 'Right':\n case 'Bottom':\n swap = true;\n break;\n }\n break;\n case 'Top':\n switch (tarDir) {\n case 'Left':\n case 'Right':\n case 'Bottom':\n swap = true;\n break;\n }\n break;\n case 'Bottom':\n switch (tarDir) {\n case 'Right':\n swap = true;\n break;\n }\n break;\n }\n return swap;\n}\nfunction swapPoints(source, target) {\n var direction = source.direction;\n source.direction = target.direction;\n target.direction = direction;\n var point = source.point;\n source.point = target.point;\n target.point = point;\n var corner = source.corners;\n source.corners = target.corners;\n target.corners = corner;\n}\nexport function getPortDirection(point, corner, bounds, closeEdge) {\n var direction;\n var boundsValue = corner === undefined ? bounds : corner;\n var one = boundsValue.topLeft;\n var two = boundsValue.topRight;\n var three = boundsValue.bottomRight;\n var four = boundsValue.bottomLeft;\n var center = boundsValue.center;\n var angle = findAngle(center, point);\n var fourty5 = findAngle(center, three);\n var one35 = findAngle(center, four);\n var two25 = findAngle(center, one);\n var three15 = findAngle(center, two);\n if (angle > two25 && angle < three15) {\n direction = 'Top';\n // if (bounds.width < bounds.height && closeEdge) {\n // let height: number = (bounds.height - bounds.width) / 2;\n // let width: number = bounds.width;\n // if (Math.abs(point.x - one.x) < Math.abs(point.x - two.x)) {\n // direction = checkCloseEdge(direction, new Rect(one.x, one.y, width, height), point, 'Left');\n // } else {\n // direction = checkCloseEdge(direction, new Rect(two.x - bounds.width, two.y, width, height), point, 'Right');\n // }\n // }\n }\n else if (angle >= fourty5 && angle < one35) {\n direction = 'Bottom';\n // if (bounds.width < bounds.height && closeEdge) {\n // let height: number = (bounds.height - bounds.width) / 2;\n // let width: number = bounds.width;\n // if (Math.abs(point.x - four.x) < Math.abs(point.x - three.x)) {\n // direction = checkCloseEdge(direction, new Rect(four.x, four.y - height, width, height), point, 'Left');\n // } else {\n // let value: Rect = new Rect(three.x - bounds.width, three.y - bounds.height / 4, bounds.width, bounds.height / 4);\n // direction = checkCloseEdge(direction, value, point, 'Right');\n // }\n // }\n }\n else if (angle >= one35 && angle <= two25) {\n direction = 'Left';\n // if (bounds.width > bounds.height && closeEdge) {\n // let width: number = (bounds.width - bounds.height) / 2;\n // let height: number = bounds.height;\n // if (Math.abs(point.y - one.y) < Math.abs(point.y - four.y)) {\n // direction = checkCloseEdge(direction, new Rect(one.x, one.y, width, height), point, 'Top');\n // } else {\n // direction = checkCloseEdge(direction, new Rect(four.x, four.y - height, width, height), point, 'Bottom');\n // }\n // }\n }\n else if (angle >= three15 || angle < fourty5) {\n direction = 'Right';\n // if (bounds.width > bounds.height && closeEdge) {\n // let width: number = (bounds.width - bounds.height) / 2;\n // let height: number = bounds.height;\n // if (Math.abs(point.y - two.y) < Math.abs(point.y - three.y)) {\n // direction = checkCloseEdge(direction, new Rect(two.x - width, two.y, width, height), point, 'Top');\n // } else {\n // direction = checkCloseEdge(direction, \n //new Rect(three.x - width, three.y - height, width, height), point, 'Bottom');\n // }\n // }\n }\n else {\n direction = 'Right';\n }\n return direction;\n}\n// function checkCloseEdge(direction: string, threshold: Rect, port: PointModel, nearest: string): string {\n// if (threshold) {\n// switch (direction) {\n// case 'Bottom':\n// case 'Top':\n// let left: number = Math.abs(threshold.left - port.x);\n// let right: number = Math.abs(threshold.right - port.x);\n// let ver: number = direction === 'Top' ? Math.abs(threshold.top - port.y) : Math.abs(threshold.bottom - port.y);\n// if (left < right) {\n// if (left < ver) {\n// return 'Left';\n// }\n// } else {\n// if (right < ver) {\n// return 'Right';\n// }\n// }\n// break;\n// case 'Left':\n// case 'Right':\n// let top: number = Math.abs(threshold.top - port.y);\n// let bottom: number = Math.abs(threshold.bottom - port.y);\n// let hor: number = direction === 'Left' ? Math.abs(threshold.left - port.x) : Math.abs(threshold.right - port.x);\n// if (top < bottom) {\n// if (top < hor) {\n// return 'Top';\n// }\n// } else {\n// if (bottom < hor) {\n// return 'Bottom';\n// }\n// }\n// break;\n// }\n// }\n//Meant for dock port\n// return direction;\n// }\n/** @private */\nexport function getOuterBounds(obj) {\n var outerBounds;\n outerBounds = obj.wrapper.children[0].bounds;\n if (obj.sourceDecorator.shape !== 'None') {\n outerBounds.uniteRect(obj.wrapper.children[1].bounds);\n }\n if (obj.targetDecorator.shape !== 'None') {\n outerBounds.uniteRect(obj.wrapper.children[2].bounds);\n }\n return outerBounds;\n}\nexport function getOppositeDirection(direction) {\n switch (direction) {\n case 'Top':\n return 'Bottom';\n case 'Bottom':\n return 'Top';\n case 'Left':\n return 'Right';\n case 'Right':\n return 'Left';\n }\n return 'auto';\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/// \nimport { Property, Complex, Collection, ChildProperty, ComplexFactory, CollectionFactory } from '@syncfusion/ej2-base';\nimport { ShapeStyle, StrokeStyle } from '../core/appearance';\nimport { Point } from '../primitives/point';\nimport { TextElement } from '../core/elements/text-element';\nimport { Transform, ConnectorConstraints } from '../enum/enum';\nimport { Rect } from '../primitives/rect';\nimport { Size } from '../primitives/size';\nimport { findAngle, findConnectorPoints, getOuterBounds } from '../utility/connector';\nimport { getAnnotationPosition, alignLabelOnSegments, updateConnector } from '../utility/diagram-util';\nimport { randomId, getFunction } from './../utility/base-util';\nimport { PathElement } from '../core/elements/path-element';\nimport { PathAnnotation } from './annotation';\nimport { Canvas } from '../core/containers/canvas';\nimport { getDecoratorShape } from './dictionary/common';\nimport { NodeBase } from './node-base';\nimport { DiagramTooltip } from './tooltip';\nimport { identityMatrix, rotateMatrix, scaleMatrix, transformPointsByMatrix } from '../primitives/matrix';\nvar getConnectorType = function (obj) {\n switch (obj.type) {\n case 'Bpmn':\n return BpmnFlow;\n default:\n return ConnectorShape;\n }\n};\nvar getSegmentType = function (obj) {\n switch (obj.type) {\n case 'Straight':\n return StraightSegment;\n case 'Bezier':\n return BezierSegment;\n case 'Orthogonal':\n return OrthogonalSegment;\n default:\n return StraightSegment;\n }\n};\n/**\n * Decorators are used to decorate the end points of the connector with some predefined path geometry\n */\nvar Decorator = /** @class */ (function (_super) {\n __extends(Decorator, _super);\n function Decorator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(10)\n ], Decorator.prototype, \"width\", void 0);\n __decorate([\n Property(10)\n ], Decorator.prototype, \"height\", void 0);\n __decorate([\n Property('Arrow')\n ], Decorator.prototype, \"shape\", void 0);\n __decorate([\n Complex({ fill: 'black', strokeColor: 'black', strokeWidth: 1 }, ShapeStyle)\n ], Decorator.prototype, \"style\", void 0);\n __decorate([\n Complex({ x: 0, y: 0.5 }, Point)\n ], Decorator.prototype, \"pivot\", void 0);\n __decorate([\n Property('')\n ], Decorator.prototype, \"pathData\", void 0);\n return Decorator;\n}(ChildProperty));\nexport { Decorator };\nvar Vector = /** @class */ (function (_super) {\n __extends(Vector, _super);\n function Vector() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0)\n ], Vector.prototype, \"angle\", void 0);\n __decorate([\n Property(0)\n ], Vector.prototype, \"distance\", void 0);\n return Vector;\n}(ChildProperty));\nexport { Vector };\n/**\n * Sets the type of the connector\n */\nvar ConnectorShape = /** @class */ (function (_super) {\n __extends(ConnectorShape, _super);\n function ConnectorShape() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('None')\n ], ConnectorShape.prototype, \"type\", void 0);\n return ConnectorShape;\n}(ChildProperty));\nexport { ConnectorShape };\n/**\n * Sets the type of the Bpmn flows\n */\nvar BpmnFlow = /** @class */ (function (_super) {\n __extends(BpmnFlow, _super);\n function BpmnFlow() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Sequence')\n ], BpmnFlow.prototype, \"flow\", void 0);\n __decorate([\n Property('Normal')\n ], BpmnFlow.prototype, \"sequence\", void 0);\n __decorate([\n Property('Default')\n ], BpmnFlow.prototype, \"message\", void 0);\n __decorate([\n Property('Default')\n ], BpmnFlow.prototype, \"association\", void 0);\n return BpmnFlow;\n}(ConnectorShape));\nexport { BpmnFlow };\nvar ConnectorSegment = /** @class */ (function (_super) {\n __extends(ConnectorSegment, _super);\n // tslint:disable-next-line:no-any\n function ConnectorSegment(parent, propName, defaultValue, isArray) {\n var _this = _super.call(this, parent, propName, defaultValue, isArray) || this;\n _this.points = [];\n return _this;\n }\n __decorate([\n Property('Straight')\n ], ConnectorSegment.prototype, \"type\", void 0);\n return ConnectorSegment;\n}(ChildProperty));\nexport { ConnectorSegment };\nvar StraightSegment = /** @class */ (function (_super) {\n __extends(StraightSegment, _super);\n function StraightSegment() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({ x: 0, y: 0 }, Point)\n ], StraightSegment.prototype, \"point\", void 0);\n return StraightSegment;\n}(ConnectorSegment));\nexport { StraightSegment };\nvar BezierSegment = /** @class */ (function (_super) {\n __extends(BezierSegment, _super);\n function BezierSegment() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({ x: 0, y: 0 }, Point)\n ], BezierSegment.prototype, \"point1\", void 0);\n __decorate([\n Complex({ x: 0, y: 0 }, Point)\n ], BezierSegment.prototype, \"point2\", void 0);\n __decorate([\n Complex({ angle: 0, distance: 0 }, Vector)\n ], BezierSegment.prototype, \"vector1\", void 0);\n __decorate([\n Complex({ angle: 0, distance: 0 }, Vector)\n ], BezierSegment.prototype, \"vector2\", void 0);\n return BezierSegment;\n}(StraightSegment));\nexport { BezierSegment };\nvar OrthogonalSegment = /** @class */ (function (_super) {\n __extends(OrthogonalSegment, _super);\n function OrthogonalSegment() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], OrthogonalSegment.prototype, \"length\", void 0);\n __decorate([\n Property(null)\n ], OrthogonalSegment.prototype, \"direction\", void 0);\n return OrthogonalSegment;\n}(ConnectorSegment));\nexport { OrthogonalSegment };\n/**\n * Get the direction of the control points while the bezier is connected to the node\n */\nexport function getDirection(bounds, points, excludeBounds) {\n var center = bounds.center;\n var direction;\n var part = excludeBounds ? 45 : (180 / (2 + 2 / (bounds.height / bounds.width)));\n var fourty5 = part;\n var one35 = (180 - part);\n var two25 = one35 + (2 * part);\n var three15 = 360 - part;\n var angle = findAngle(points, center);\n if (angle > fourty5 && angle < one35) {\n return direction = 'top';\n }\n else if (angle > one35 && angle < two25) {\n return direction = 'right';\n }\n else if (angle > two25 && angle < three15) {\n return direction = 'bottom';\n }\n else {\n return direction = 'left';\n }\n}\nexport function isEmptyVector(element) {\n if (!element.distance && !element.angle) {\n return true;\n }\n return false;\n}\n/**\n * Get the bezier points if control points are not given.\n */\nexport function getBezierPoints(sourcePoint, targetPoint, direction) {\n var distance = 60;\n var value = { x: 0, y: 0 };\n if (!direction) {\n if (Math.abs(targetPoint.x - sourcePoint.x) > Math.abs(targetPoint.y - sourcePoint.y)) {\n direction = sourcePoint.x < targetPoint.x ? 'right' : 'left';\n }\n else {\n direction = sourcePoint.y < targetPoint.y ? 'bottom' : 'top';\n }\n }\n switch (direction) {\n case 'bottom':\n case 'top':\n distance = Math.min(Math.abs(sourcePoint.y - targetPoint.y) * 0.45, distance);\n value = { x: sourcePoint.x, y: sourcePoint.y + (direction === 'bottom' ? distance : -distance) };\n break;\n case 'right':\n case 'left':\n distance = Math.min(Math.abs(sourcePoint.x - targetPoint.x) * 0.45, distance);\n value = { x: sourcePoint.x + (direction === 'right' ? distance : -distance), y: sourcePoint.y };\n break;\n }\n return value;\n}\n/**\n * Get the bezier curve bounds.\n */\nexport function getBezierBounds(startPoint, controlPoint1, controlPoint2, endPoint, connector) {\n var minx = 0;\n var miny = 0;\n var maxx = 0;\n var maxy = 0;\n var tolerancevalue = 3;\n var max = Number((connector.distance(controlPoint1, startPoint) +\n connector.distance(controlPoint2, controlPoint1) +\n connector.distance(endPoint, controlPoint2)) / tolerancevalue);\n if (max !== 0) {\n for (var i = 0; i <= max; i++) {\n var t = i / max;\n var x = (1 - t) * (1 - t) * (1 - t) * startPoint.x +\n 3 * t * (1 - t) * (1 - t) * controlPoint1.x +\n 3 * t * t * (1 - t) * controlPoint2.x +\n t * t * t * endPoint.x;\n var y = (1 - t) * (1 - t) * (1 - t) * startPoint.y +\n 3 * t * (1 - t) * (1 - t) * controlPoint1.y +\n 3 * t * t * (1 - t) * controlPoint2.y +\n t * t * t * endPoint.y;\n if (i === 0) {\n minx = maxx = x;\n miny = maxy = y;\n }\n else {\n minx = Math.min(x, minx);\n miny = Math.min(y, miny);\n maxx = Math.max(x, maxx);\n maxy = Math.max(y, maxy);\n }\n }\n }\n return {\n x: minx, y: miny, width: maxx - minx, height: maxy - miny,\n left: minx, top: miny, right: (minx + (maxx - minx)), bottom: (miny + (maxy - miny)),\n center: { x: (minx + (maxx - minx)) / 2, y: (miny + (maxy - miny)) / 2 },\n };\n}\n/**\n * Get the intermediate bezier curve for point over connector\n */\nexport function bezierPoints(connector, startPoint, point1, point2, endPoint, i, max) {\n var pt = { x: 0, y: 0 };\n var t = i / max;\n var x = (1 - t) * (1 - t) * (1 - t) * startPoint.x +\n 3 * t * (1 - t) * (1 - t) * point1.x +\n 3 * t * t * (1 - t) * point2.x +\n t * t * t * endPoint.x;\n pt.x = x;\n var y = (1 - t) * (1 - t) * (1 - t) * startPoint.y +\n 3 * t * (1 - t) * (1 - t) * point1.y +\n 3 * t * t * (1 - t) * point2.y +\n t * t * t * endPoint.y;\n pt.y = y;\n return pt;\n}\n/**\n * Connectors are used to create links between nodes\n */\nvar Connector = /** @class */ (function (_super) {\n __extends(Connector, _super);\n // tslint:disable-next-line:no-any\n function Connector(parent, propName, defaultValue, isArray) {\n var _this = _super.call(this, parent, propName, defaultValue, isArray) || this;\n /** @private */\n _this.parentId = '';\n /** @private */\n _this.bridges = [];\n return _this;\n }\n /** @private */\n // tslint:disable-next-line:no-any\n Connector.prototype.init = function (diagram) {\n if (!this.id) {\n this.id = randomId();\n }\n var bpmnElement;\n var container = new Canvas();\n var segment = new PathElement();\n segment.id = this.id + '_path';\n var srcDecorator = new PathElement();\n var targetDecorator = new PathElement();\n segment = this.getSegmentElement(this, segment);\n var bounds;\n var points = [];\n points = this.getConnectorPoints(this.type);\n points = this.clipDecorators(this, points);\n bounds = Rect.toBounds(points);\n container.width = bounds.width;\n container.height = bounds.height;\n container.offsetX = bounds.x + container.pivot.x * bounds.width;\n container.offsetY = bounds.y + container.pivot.y * bounds.height;\n switch (this.shape.type) {\n case 'Bpmn':\n switch (this.shape.flow) {\n case 'Sequence':\n bpmnElement = this.getBpmnSequenceFlow();\n break;\n case 'Association':\n bpmnElement = new PathElement();\n bpmnElement.visible = false;\n this.getBpmnAssociationFlow();\n break;\n case 'Message':\n bpmnElement = this.getBpmnMessageFlow();\n segment = this.getSegmentElement(this, segment);\n this.updateShapePosition(this, bpmnElement);\n break;\n }\n break;\n }\n var anglePoints = this.intermediatePoints;\n if (this.type === 'Bezier') {\n var firstSegment = this.segments[0];\n var lastSegment = this.segments[this.segments.length - 1];\n anglePoints = [!Point.isEmptyPoint(lastSegment.point2) ? lastSegment.point2 : lastSegment.bezierPoint2,\n !Point.isEmptyPoint(firstSegment.point1) ? firstSegment.point1 : firstSegment.bezierPoint1];\n }\n var accessContent = 'getDescription';\n var getDescription = diagram[accessContent];\n var strokeWidth = this.sourceWrapper ? this.sourceWrapper.style.strokeWidth / 2 / 2 : 0;\n srcDecorator = this.getDecoratorElement(points[0], anglePoints[1], this.sourceDecorator, true, getDescription);\n targetDecorator = this.getDecoratorElement(points[points.length - 1], anglePoints[anglePoints.length - 2], this.targetDecorator, false, getDescription);\n srcDecorator.id = this.id + '_srcDec';\n targetDecorator.id = this.id + '_tarDec';\n segment.style = this.style;\n /* tslint:disable:no-string-literal */\n segment.style['fill'] = 'transparent';\n if (getDescription !== undefined) {\n // tslint:disable-next-line:no-any\n var wrapperContent = getDescription(this, diagram);\n segment.description = wrapperContent ? wrapperContent : this.id;\n }\n container.style.strokeColor = 'transparent';\n container.style.fill = 'transparent';\n container.style.strokeWidth = 0;\n container.children = [segment, srcDecorator, targetDecorator];\n container.id = this.id;\n if (bpmnElement !== undefined) {\n container.children.push(bpmnElement);\n }\n container.offsetX = segment.offsetX;\n container.offsetY = segment.offsetY;\n container.width = segment.width;\n container.height = segment.height;\n for (var i = 0; this.annotations !== undefined, i < this.annotations.length; i++) {\n container.children.push(this.getAnnotationElement(this.annotations[i], this.intermediatePoints, bounds, getDescription));\n }\n this.wrapper = container;\n return container;\n };\n Connector.prototype.getBpmnSequenceFlow = function () {\n var segment = new PathElement();\n var pathseq = new PathElement();\n var pathseqData;\n if ((this.shape.sequence) === 'Normal' && this.type !== 'Bezier') {\n this.targetDecorator.shape = 'Arrow';\n this.targetDecorator.style.fill = 'black';\n }\n if ((this.shape.sequence) === 'Default') {\n segment = this.getSegmentElement(this, segment);\n var anglePoints = this.intermediatePoints;\n for (var j = 0; j < anglePoints.length - 1; j++) {\n length = length + this.distance(anglePoints[j], anglePoints[j + 1]);\n pathseqData = this.findPath(anglePoints[j], anglePoints[j + 1]);\n pathseq.data = pathseqData[0];\n pathseq.id = this.id + '_' + (this.shape.sequence);\n pathseq.offsetX = pathseqData[1].x;\n pathseq.offsetY = pathseqData[1].y;\n pathseq.rotateAngle = 45;\n pathseq.transform = Transform.Self;\n }\n this.targetDecorator.shape = 'Arrow';\n this.targetDecorator.style.fill = 'black';\n }\n if ((this.shape.sequence) === 'Conditional') {\n this.targetDecorator.shape = 'Arrow';\n this.sourceDecorator.shape = 'Diamond';\n this.sourceDecorator.style.fill = 'white';\n this.targetDecorator.style.fill = 'black';\n this.sourceDecorator.width = 20;\n this.sourceDecorator.height = 10;\n }\n return pathseq;\n };\n Connector.prototype.getBpmnAssociationFlow = function () {\n if ((this.shape.association) === 'Default') {\n this.targetDecorator.shape = 'Arrow';\n this.targetDecorator.style.fill = 'black';\n }\n if ((this.shape.association) === 'Directional') {\n this.style.strokeDashArray = '2 2';\n this.targetDecorator.style.fill = 'black';\n this.targetDecorator.shape = 'Arrow';\n }\n if ((this.shape.association) === 'BiDirectional') {\n this.style.strokeDashArray = '2 2';\n this.targetDecorator.shape = 'Arrow';\n this.targetDecorator.style.fill = 'black';\n this.sourceDecorator.shape = 'Arrow';\n this.sourceDecorator.style.fill = 'white';\n this.sourceDecorator.width = 5;\n this.sourceDecorator.height = 10;\n }\n };\n Connector.prototype.getBpmnMessageFlow = function () {\n var segmentMessage = new PathElement();\n this.style.strokeDashArray = '4 4';\n this.targetDecorator.shape = 'Arrow';\n this.targetDecorator.width = 5;\n this.targetDecorator.height = 10;\n this.sourceDecorator.shape = 'Circle';\n if (((this.shape.message) === 'InitiatingMessage') ||\n ((this.shape.message) === 'NonInitiatingMessage')) {\n segmentMessage.id = this.id + '_' + (this.shape.message);\n segmentMessage.width = 25;\n segmentMessage.height = 15;\n segmentMessage.data = 'M0,0 L19.8,12.8 L40,0 L0, 0 L0, 25.5 L40, 25.5 L 40, 0';\n segmentMessage.horizontalAlignment = 'Center';\n segmentMessage.verticalAlignment = 'Center';\n segmentMessage.transform = Transform.Self;\n segmentMessage.style.fill = (this.shape.message) === 'NonInitiatingMessage' ? 'lightgrey' : 'white';\n }\n return segmentMessage;\n };\n /** @private */\n Connector.prototype.distance = function (pt1, pt2) {\n return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n };\n Connector.prototype.findPath = function (sourcePt, targetPt) {\n var beginningpoint = { x: sourcePt.x, y: sourcePt.y };\n var distance = this.distance(sourcePt, targetPt);\n distance = Math.min(30, distance / 2);\n var angle = findAngle(sourcePt, targetPt);\n var transferpoint = Point.transform({ x: beginningpoint.x, y: beginningpoint.y }, angle, distance);\n var startpoint1 = Point.transform({ x: transferpoint.x, y: transferpoint.y }, angle, -12);\n var endpoint1 = Point.transform({ x: startpoint1.x, y: startpoint1.y }, angle, 12 * 2);\n var path = 'M' + startpoint1.x + ' ' + startpoint1.y + ' L' + endpoint1.x + ' ' + endpoint1.y;\n return [path, transferpoint];\n };\n /** @private */\n Connector.prototype.getAnnotationElement = function (annotation, points, bounds, getDescription) {\n annotation.id = annotation.id || randomId();\n var textele = new TextElement();\n textele.constraints = annotation.constraints;\n textele.visible = annotation.visibility;\n textele.horizontalAlignment = annotation.horizontalAlignment;\n textele.verticalAlignment = annotation.verticalAlignment;\n if (bounds.width !== undefined) {\n textele.width = (annotation.width || bounds.width) - annotation.margin.left - annotation.margin.right;\n }\n textele.margin = annotation.margin;\n textele.id = this.id + '_' + annotation.id;\n if (bounds.width === 0) {\n bounds.width = this.style.strokeWidth;\n }\n if (bounds.height === 0) {\n bounds.height = this.style.strokeWidth;\n }\n textele.content = annotation.content;\n textele.style = annotation.style;\n // tslint:disable-next-line:no-any\n var wrapperContent;\n var description = getFunction(getDescription);\n if (description) {\n wrapperContent = description(annotation, this);\n }\n textele.description = wrapperContent ? wrapperContent : textele.id;\n this.updateAnnotation(annotation, points, bounds, textele);\n textele.style.textOverflow = 'Wrap';\n return textele;\n };\n /** @private */\n Connector.prototype.updateAnnotation = function (annotation, points, bounds, textElement) {\n var getPointloop;\n var newPoint;\n var align;\n var hAlign;\n var vAlign;\n var offsetPoint;\n var pivotPoint = { x: 0, y: 0 };\n annotation.margin = { left: 0, right: 0, top: 0, bottom: 0 };\n textElement.refreshTextElement();\n textElement.width = (annotation.width || bounds.width) - textElement.margin.left - textElement.margin.right;\n getPointloop = getAnnotationPosition(points, annotation, bounds);\n newPoint = getPointloop.point;\n if (bounds.width === 0) {\n bounds.width = this.style.strokeWidth;\n }\n if (bounds.height === 0) {\n bounds.height = this.style.strokeWidth;\n }\n offsetPoint = { x: ((newPoint.x - bounds.x) / bounds.width), y: ((newPoint.y - bounds.y) / bounds.height) };\n pivotPoint.x = bounds.width * offsetPoint.x;\n pivotPoint.y = bounds.height * offsetPoint.y;\n align = alignLabelOnSegments(annotation, getPointloop.angle, points);\n hAlign = align.hAlign;\n vAlign = align.vAlign;\n var horizor;\n var verzor;\n if (hAlign === 'left') {\n horizor = 'Left';\n pivotPoint.x += annotation.displacement.x;\n }\n else if (hAlign === 'right') {\n horizor = 'Right';\n pivotPoint.x -= annotation.displacement.x;\n }\n else if (hAlign === 'center') {\n horizor = 'Center';\n }\n if (vAlign === 'top') {\n verzor = 'Top';\n pivotPoint.y += annotation.displacement.y;\n }\n else if (vAlign === 'bottom') {\n verzor = 'Bottom';\n pivotPoint.y -= annotation.displacement.y;\n }\n else if (vAlign === 'center') {\n verzor = 'Center';\n }\n textElement.horizontalAlignment = horizor;\n textElement.verticalAlignment = verzor;\n textElement.setOffsetWithRespectToBounds(pivotPoint.x, pivotPoint.y, 'Absolute');\n textElement.relativeMode = 'Point';\n };\n /** @private */\n Connector.prototype.getConnectorPoints = function (type, points, layoutOrientation) {\n var width = Math.abs(this.sourcePoint.x - this.targetPoint.x);\n var height = Math.abs(this.sourcePoint.y - this.targetPoint.y);\n points = findConnectorPoints(this, layoutOrientation);\n var newPoints = points.slice(0);\n if (newPoints && newPoints.length > 0) {\n this.sourcePoint = newPoints[0];\n this.targetPoint = newPoints[newPoints.length - 1];\n }\n return newPoints;\n };\n /** @private */\n Connector.prototype.clipDecorator = function (connector, points, isSource) {\n var point = { x: 0, y: 0 };\n var start = { x: 0, y: 0 };\n var end = { x: 0, y: 0 };\n var length = points.length;\n start = !isSource ? points[length - 1] : points[0];\n end = !isSource ? points[length - 2] : points[1];\n var len = Point.distancePoints(start, end);\n len = (len === 0) ? 1 : len;\n var width = connector.style.strokeWidth - 1;\n point.x = (Math.round(start.x + width * (end.x - start.x) / len));\n point.y = (Math.round(start.y + width * (end.y - start.y) / len));\n var strokeWidth = 1;\n var node = isSource ? connector.sourceWrapper : connector.targetWrapper;\n if (node) {\n strokeWidth = node.style.strokeWidth;\n }\n if ((isSource && connector.sourceDecorator.shape !== 'None') ||\n (!isSource && connector.targetDecorator.shape !== 'None')) {\n point = Point.adjustPoint(point, end, true, (strokeWidth / 2));\n }\n return point;\n };\n /** @private */\n Connector.prototype.clipDecorators = function (connector, pts) {\n if (connector.sourceDecorator.shape !== 'None') {\n pts[0] = this.clipDecorator(connector, pts, true);\n }\n if (connector.targetDecorator.shape !== 'None') {\n pts[pts.length - 1] = this.clipDecorator(connector, pts, false);\n }\n return pts;\n };\n /** @private */\n Connector.prototype.updateSegmentElement = function (connector, points, element) {\n var segmentPath;\n var bounds = new Rect();\n var point;\n segmentPath = this.getSegmentPath(connector, points);\n if (connector.type === 'Bezier') {\n if (this.segments.length > 0) {\n for (var i = 0; i < this.segments.length; i++) {\n var segment = this.segments[i];\n var connectorSegment = connector.segments[i];\n var point1 = !Point.isEmptyPoint(segment.point1) ? connectorSegment.point1 : connectorSegment.bezierPoint1;\n var point2 = !Point.isEmptyPoint(segment.point2) ? connectorSegment.point2 : connectorSegment.bezierPoint2;\n bounds.uniteRect(getBezierBounds(segment.points[0], point1, point2, segment.points[1], connector));\n }\n }\n }\n else {\n bounds = Rect.toBounds(points);\n }\n element.width = bounds.width;\n element.height = bounds.height;\n element.offsetX = bounds.x + element.width / 2;\n element.offsetY = bounds.y + element.height / 2;\n element.data = segmentPath;\n if (connector.wrapper) {\n connector.wrapper.offsetX = element.offsetX;\n connector.wrapper.offsetY = element.offsetY;\n connector.wrapper.width = bounds.width;\n connector.wrapper.height = bounds.height;\n }\n return element;\n };\n /** @private */\n Connector.prototype.getSegmentElement = function (connector, segmentElement) {\n var bounds;\n var segmentPath;\n var points = [];\n points = this.getConnectorPoints(connector.type);\n this.intermediatePoints = points;\n segmentElement.staticSize = true;\n segmentElement = this.updateSegmentElement(connector, points, segmentElement);\n return segmentElement;\n };\n /** @private */\n Connector.prototype.getDecoratorElement = function (offsetPoint, adjacentPoint, decorator, isSource, getDescription) {\n var decEle = new PathElement();\n var getPath;\n var angle;\n decEle.transform = Transform.Self;\n this.updateDecoratorElement(decEle, offsetPoint, adjacentPoint, decorator);\n if (getDescription !== undefined) {\n // tslint:disable-next-line:no-any\n var wrapperContent = getDescription(decorator, this);\n decEle.description = wrapperContent ? wrapperContent :\n ('Specifies the ' + isSource ? 'source' : 'target' + 'port element of the connector');\n }\n return decEle;\n };\n Connector.prototype.bridgePath = function (connector, path, pointIndex) {\n var pathData = path;\n if (connector.bridges.length > 0) {\n if (connector.type === 'Straight') {\n for (var n = 0; n < connector.bridges.length; n++) {\n var bridge = connector.bridges[n];\n if (!bridge.rendered) {\n pathData += ' L' + bridge.startPoint.x + ' ' + bridge.startPoint.y;\n pathData += bridge.path;\n bridge.rendered = true;\n }\n }\n }\n else if (connector.type === 'Orthogonal') {\n for (var n = 0; n < connector.bridges.length; n++) {\n var bridge = connector.bridges[n];\n if (bridge.segmentPointIndex === pointIndex) {\n if (!bridge.rendered) {\n if (bridge.segmentPointIndex === pointIndex) {\n pathData += ' L' + bridge.startPoint.x + ' ' + bridge.startPoint.y;\n pathData += bridge.path;\n bridge.rendered = true;\n }\n }\n }\n }\n }\n }\n return pathData;\n };\n /** @private */\n Connector.prototype.updateDecoratorElement = function (element, pt, adjacentPoint, decorator) {\n var getPath;\n var angle;\n element.offsetX = pt.x;\n element.offsetY = pt.y;\n angle = Point.findAngle(pt, adjacentPoint);\n getPath = getDecoratorShape(decorator.shape, decorator);\n var size = new Size(decorator.width, decorator.height);\n element.pivot.x = decorator.pivot.x;\n element.pivot.y = decorator.pivot.y;\n element.style = decorator.style;\n element.rotateAngle = angle;\n element.data = getPath;\n element.width = size.width;\n element.height = size.height;\n };\n /** @private */\n Connector.prototype.getSegmentPath = function (connector, points) {\n var path = '';\n var getPt;\n var end;\n var st;\n var pts = [];\n var j = 0;\n while (j < points.length) {\n pts.push({ x: points[j].x, y: points[j].y });\n j++;\n }\n for (var m = 0; m < connector.bridges.length; m++) {\n var bridge = connector.bridges[m];\n bridge.rendered = false;\n }\n pts = this.clipDecorators(connector, pts);\n if (this.cornerRadius > 0 && this.type !== 'Bezier') {\n for (var j_1 = 0; j_1 < pts.length - 1; j_1++) {\n getPt = pts[j_1];\n if (j_1 === 0) {\n path = 'M' + getPt.x + ' ' + getPt.y;\n }\n var segLength = Point.distancePoints(pts[j_1], pts[j_1 + 1]);\n if (segLength > 0) {\n if (j_1 < pts.length - 2) {\n if (segLength < this.cornerRadius * 2) {\n end = Point.adjustPoint(pts[j_1], pts[j_1 + 1], false, segLength / 2);\n }\n else {\n end = Point.adjustPoint(pts[j_1], pts[j_1 + 1], false, this.cornerRadius);\n }\n }\n else {\n end = pts[j_1 + 1];\n }\n if (j_1 > 0) {\n if (segLength < this.cornerRadius * 2) {\n st = Point.adjustPoint(pts[j_1], pts[j_1 + 1], true, segLength / 2);\n if (j_1 < pts.length - 2) {\n end = null;\n }\n }\n else {\n st = Point.adjustPoint(pts[j_1], pts[j_1 + 1], true, this.cornerRadius);\n }\n }\n if (st) {\n path += 'Q' + getPt.x + ' ' + getPt.y + ' ' + st.x + ' ' + st.y;\n }\n if (end) {\n if (connector.bridges.length > 0) {\n path = this.bridgePath(connector, path, j_1);\n if (connector.type === 'Orthogonal') {\n path = this.bridgePath(connector, path, j_1 + 1);\n }\n }\n path += ' L' + end.x + ' ' + end.y;\n }\n }\n }\n }\n else {\n if (this.type === 'Bezier') {\n var direction = void 0;\n var segments = this.segments;\n for (var j_2 = 0; j_2 < segments.length; j_2++) {\n if (pts.length > 2) {\n segments[j_2].bezierPoint1 = { x: 0, y: 0 };\n segments[j_2].bezierPoint2 = { x: 0, y: 0 };\n }\n if (Point.isEmptyPoint(segments[j_2].point1) && !segments[j_2].vector1.angle && !segments[j_2].vector1.distance) {\n if ((connector.sourceID || this.sourcePortID) && this.sourceWrapper) {\n direction = getDirection(this.sourceWrapper.bounds, pts[j_2], true);\n }\n segments[j_2].bezierPoint1 = getBezierPoints(pts[j_2], pts[j_2 + 1], direction);\n }\n else if (segments[j_2].vector1.angle || segments[j_2].vector1.distance) {\n segments[j_2].bezierPoint1 = Point.transform(pts[j_2], segments[j_2].vector1.angle, segments[j_2].vector1.distance);\n }\n else {\n segments[j_2].bezierPoint1 = {\n x: segments[j_2].point1.x || segments[j_2].bezierPoint1.x,\n y: segments[j_2].point1.y || segments[j_2].bezierPoint1.y\n };\n }\n if (Point.isEmptyPoint(segments[j_2].point2) && !segments[j_2].vector2.angle && !segments[j_2].vector2.distance) {\n if ((connector.targetID || this.targetPortID) && this.targetWrapper) {\n direction = getDirection(this.targetWrapper.bounds, pts[j_2 + 1], true);\n }\n segments[j_2].bezierPoint2 = getBezierPoints(pts[j_2 + 1], pts[j_2], direction);\n }\n else if (segments[j_2].vector2.angle || segments[j_2].vector2.distance) {\n segments[j_2].bezierPoint2 = Point.transform(pts[j_2 + 1], segments[j_2].vector2.angle, segments[j_2].vector2.distance);\n }\n else {\n segments[j_2].bezierPoint2 = {\n x: segments[j_2].point2.x || segments[j_2].bezierPoint2.x,\n y: segments[j_2].point2.y || segments[j_2].bezierPoint2.y\n };\n }\n }\n pts.splice(1, 0, { x: segments[0].bezierPoint1.x, y: segments[0].bezierPoint1.y });\n pts.splice(pts.length - 1, 0, {\n x: segments[segments.length - 1].bezierPoint2.x, y: segments[segments.length - 1].bezierPoint2.y\n });\n pts = this.clipDecorators(connector, pts);\n for (var j_3 = 0; j_3 < segments.length; j_3++) {\n if (j_3 === 0) {\n path = 'M' + pts[0].x + ' ' + pts[0].y;\n }\n var lastPoint = (j_3 === segments.length - 1) ? pts[pts.length - 1].x + ' ' + pts[pts.length - 1].y :\n segments[j_3].points[segments[j_3].points.length - 1].x + ' ' + segments[j_3].points[segments[j_3].points.length - 1].y;\n path += 'C' +\n segments[j_3].bezierPoint1.x + ' ' + segments[j_3].bezierPoint1.y + ' ' + segments[j_3].bezierPoint2.x + ' '\n + segments[j_3].bezierPoint2.y + ' ' + lastPoint;\n }\n }\n else {\n for (var k = 0; k < pts.length; k++) {\n getPt = pts[k];\n if (k === 0) {\n path = 'M' + getPt.x + ' ' + getPt.y;\n }\n if (k > 0) {\n path = this.bridgePath(connector, path, k);\n path += ' ' + 'L' + getPt.x + ' ' + getPt.y;\n }\n }\n }\n }\n return path;\n };\n /** @private */\n Connector.prototype.updateShapeElement = function (connector) {\n var element;\n switch (connector.shape.type) {\n case 'Bpmn':\n if (connector.wrapper.children[3] instanceof PathElement) {\n element = connector.wrapper.children[3];\n }\n if (connector.shape.flow === 'Message') {\n this.updateShapePosition(connector, element);\n }\n break;\n }\n };\n /** @private */\n Connector.prototype.updateShapePosition = function (connector, element) {\n var segmentOffset = 0.5;\n var angle;\n var pt;\n var length = 0;\n var anglePoints = this.intermediatePoints;\n for (var i = 0; i < anglePoints.length - 1; i++) {\n length = length + this.distance(anglePoints[i], anglePoints[i + 1]);\n var offsetLength = length * segmentOffset;\n if (length >= offsetLength) {\n angle = findAngle(anglePoints[i], anglePoints[i + 1]);\n pt = Point.transform(anglePoints[i], angle, offsetLength);\n }\n }\n element.offsetX = pt.x;\n element.offsetY = pt.y;\n };\n /** @hidden */\n Connector.prototype.scale = function (sw, sh, width, height, refObject) {\n var tx = 0;\n var ty = 0;\n if (this.wrapper && this.wrapper.outerBounds) {\n var outerBounds = getOuterBounds(this);\n var connWidth = (this.wrapper.bounds.width || this.style.strokeWidth || 1) - 2;\n var connHeight = (this.wrapper.bounds.height || this.style.strokeWidth || 1) - 2;\n tx = (outerBounds.width - connWidth);\n ty = (outerBounds.height - connHeight);\n sw = (width - (Math.max(tx, ty))) / connWidth;\n sh = (height - (Math.max(tx, ty))) / connHeight;\n tx = ty = Math.min(tx, ty);\n }\n sw = sh = Math.min(sw, sh);\n var matrix = identityMatrix();\n refObject = refObject || this.wrapper;\n rotateMatrix(matrix, -refObject.rotateAngle, refObject.offsetX, refObject.offsetY);\n scaleMatrix(matrix, sw, sh, refObject.offsetX, refObject.offsetY);\n rotateMatrix(matrix, refObject.rotateAngle, refObject.offsetX, refObject.offsetY);\n var points = transformPointsByMatrix(matrix, this.intermediatePoints);\n this.sourcePoint = points[0];\n this.targetPoint = points[points.length - 1];\n points = this.intermediatePoints = findConnectorPoints(this);\n updateConnector(this, points);\n return { x: tx, y: ty };\n };\n __decorate([\n ComplexFactory(getConnectorType)\n ], Connector.prototype, \"shape\", void 0);\n __decorate([\n Property(ConnectorConstraints.Default)\n ], Connector.prototype, \"constraints\", void 0);\n __decorate([\n Property(10)\n ], Connector.prototype, \"bridgeSpace\", void 0);\n __decorate([\n Collection([], PathAnnotation)\n ], Connector.prototype, \"annotations\", void 0);\n __decorate([\n Complex({}, Point)\n ], Connector.prototype, \"sourcePoint\", void 0);\n __decorate([\n Complex({}, Point)\n ], Connector.prototype, \"targetPoint\", void 0);\n __decorate([\n CollectionFactory(getSegmentType)\n ], Connector.prototype, \"segments\", void 0);\n __decorate([\n Property('')\n ], Connector.prototype, \"sourceID\", void 0);\n __decorate([\n Property('')\n ], Connector.prototype, \"targetID\", void 0);\n __decorate([\n Property(10)\n ], Connector.prototype, \"hitPadding\", void 0);\n __decorate([\n Property('Straight')\n ], Connector.prototype, \"type\", void 0);\n __decorate([\n Property(0)\n ], Connector.prototype, \"cornerRadius\", void 0);\n __decorate([\n Complex({ shape: 'None' }, Decorator)\n ], Connector.prototype, \"sourceDecorator\", void 0);\n __decorate([\n Complex({ shape: 'Arrow' }, Decorator)\n ], Connector.prototype, \"targetDecorator\", void 0);\n __decorate([\n Complex({}, DiagramTooltip)\n ], Connector.prototype, \"tooltip\", void 0);\n __decorate([\n Property('')\n ], Connector.prototype, \"sourcePortID\", void 0);\n __decorate([\n Property('')\n ], Connector.prototype, \"targetPortID\", void 0);\n __decorate([\n Complex({ strokeWidth: 1, strokeColor: 'black' }, StrokeStyle)\n ], Connector.prototype, \"style\", void 0);\n __decorate([\n Property(null)\n ], Connector.prototype, \"wrapper\", void 0);\n return Connector;\n}(NodeBase));\nexport { Connector };\n","import { Node } from './../objects/node';\nimport { NodeConstraints, ConnectorConstraints, DiagramConstraints, DiagramTools, DiagramAction } from '../enum/enum';\nimport { AnnotationConstraints, PortConstraints } from '../enum/enum';\nimport { Connector } from './../objects/connector';\nimport { Selector } from './../interaction/selector';\n/**\n * constraints-util module contains the common constraints\n */\n/** @private */\nexport function canSelect(node) {\n if (node) {\n var state = 0;\n if (node instanceof Connector) {\n state = node.constraints & ConnectorConstraints.Select;\n }\n else {\n state = node.constraints & NodeConstraints.Select;\n }\n return state;\n }\n return 1;\n}\n/** @private */\nexport function canMove(node) {\n if (node) {\n var state = 0;\n if (node instanceof Connector) {\n state = node.constraints & ConnectorConstraints.Drag;\n }\n else if (node instanceof Selector) {\n state = 1;\n }\n else {\n state = node.constraints & NodeConstraints.Drag;\n }\n return state;\n }\n return 1;\n}\n/** @private */\nexport function canEnablePointerEvents(node, diagram) {\n var state = 0;\n if (node instanceof Connector) {\n state = node.constraints & ConnectorConstraints.PointerEvents;\n }\n else {\n state = node.constraints & NodeConstraints.PointerEvents;\n }\n return state;\n}\n/** @private */\nexport function canDelete(node) {\n var state = 0;\n if (node instanceof Connector) {\n state = node.constraints & ConnectorConstraints.Delete;\n }\n else {\n state = node.constraints & NodeConstraints.Delete;\n }\n return state;\n}\n/** @private */\nexport function canBridge(connector, diagram) {\n var state = 0;\n if (connector.constraints & ConnectorConstraints.Bridging) {\n state = connector.constraints & ConnectorConstraints.Bridging;\n }\n else if (connector.constraints & ConnectorConstraints.InheritBridging) {\n state = diagram.constraints & DiagramConstraints.Bridging;\n }\n else {\n state = 0;\n }\n return state;\n}\n/** @private */\nexport function canDragSourceEnd(connector) {\n return connector.constraints & ConnectorConstraints.DragSourceEnd;\n}\n/** @private */\nexport function canDragTargetEnd(connector) {\n return connector.constraints & ConnectorConstraints.DragTargetEnd;\n}\n/** @private */\nexport function canDragSegmentThumb(connector) {\n return connector.constraints & ConnectorConstraints.DragSegmentThumb;\n}\n/** @private */\nexport function canRotate(node) {\n return node.constraints & NodeConstraints.Rotate;\n}\n/** @private */\nexport function canShadow(node) {\n return node.constraints & NodeConstraints.Shadow;\n}\n/** @private */\nexport function canInConnect(node) {\n if ((node instanceof Node) && (node.constraints & NodeConstraints.InConnect)) {\n return node.constraints & NodeConstraints.InConnect;\n }\n return 0;\n}\n/** @private */\nexport function canOutConnect(node) {\n if ((node instanceof Node) && (node.constraints & NodeConstraints.OutConnect)) {\n return node.constraints & NodeConstraints.OutConnect;\n }\n return 0;\n}\n/** @private */\nexport function canResize(node, direction) {\n var returnValue = 0;\n if (node) {\n if (direction === 'SouthEast') {\n returnValue = node.constraints & NodeConstraints.ResizeSouthEast;\n }\n else if (direction === 'East') {\n returnValue = node.constraints & NodeConstraints.ResizeEast;\n }\n else if (direction === 'NorthEast') {\n returnValue = node.constraints & NodeConstraints.ResizeNorthEast;\n }\n else if (direction === 'South') {\n returnValue = node.constraints & NodeConstraints.ResizeSouth;\n }\n else if (direction === 'North') {\n returnValue = node.constraints & NodeConstraints.ResizeNorth;\n }\n else if (direction === 'SouthWest') {\n returnValue = node.constraints & NodeConstraints.ResizeSouthWest;\n }\n else if (direction === 'West') {\n returnValue = node.constraints & NodeConstraints.ResizeWest;\n }\n else if (direction === 'NorthWest') {\n returnValue = node.constraints & NodeConstraints.ResizeNorthWest;\n }\n }\n return returnValue;\n}\n/** @private */\nexport function canAllowDrop(node) {\n var state = 0;\n if (node instanceof Connector) {\n state = node.constraints & ConnectorConstraints.AllowDrop;\n }\n else {\n state = node.constraints & NodeConstraints.AllowDrop;\n }\n return state;\n}\n/** @private */\nexport function canEnableToolTip(node, diagram) {\n var state = 0;\n if (node instanceof Connector) {\n if (node.constraints & ConnectorConstraints.Tooltip) {\n state = node.constraints & ConnectorConstraints.Tooltip;\n }\n else if (node.constraints & ConnectorConstraints.InheritTooltip) {\n state = diagram.constraints & DiagramConstraints.Tooltip;\n }\n }\n else {\n if (node.constraints & NodeConstraints.Tooltip) {\n state = node.constraints & NodeConstraints.Tooltip;\n }\n else if (node.constraints & NodeConstraints.InheritTooltip) {\n state = diagram.constraints & DiagramConstraints.Tooltip;\n }\n }\n return state;\n}\n/** @private */\nexport function canSingleSelect(model) {\n return model.tool & DiagramTools.SingleSelect;\n}\n/** @private */\nexport function canMultiSelect(model) {\n return model.tool & DiagramTools.MultipleSelect;\n}\n/** @private */\nexport function canZoomPan(model) {\n return model.tool & DiagramTools.ZoomPan;\n}\n/** @private */\nexport function canContinuousDraw(model) {\n return model.tool & DiagramTools.ContinuousDraw;\n}\n/** @private */\nexport function canDrawOnce(model) {\n return model.tool & DiagramTools.DrawOnce;\n}\n/** @private */\nexport function defaultTool(model) {\n return (model.tool & DiagramTools.SingleSelect) || (model.tool & DiagramTools.MultipleSelect);\n}\n/** @private */\nexport function canZoom(model) {\n return model.constraints & DiagramConstraints.Zoom;\n}\n/** @private */\nexport function canPan(model) {\n return model.constraints & DiagramConstraints.Pan;\n}\n/** @private */\nexport function canUserInteract(model) {\n return model.constraints & DiagramConstraints.UserInteraction;\n}\n/** @private */\nexport function canApiInteract(model) {\n return model.constraints & DiagramConstraints.ApiUpdate;\n}\n/** @private */\nexport function canPanX(model) {\n return ((model.constraints & DiagramConstraints.PanX));\n}\n/** @private */\nexport function canPanY(model) {\n return ((model.constraints & DiagramConstraints.PanY));\n}\n/** @private */\nexport function canPageEditable(model) {\n return canApiInteract(model) || (model.diagramActions & DiagramAction.ToolAction);\n}\n/** @private */\nexport function enableReadOnly(annotation, node) {\n var enumValue = 0;\n enumValue = (node instanceof Connector) ? ConnectorConstraints.ReadOnly : NodeConstraints.ReadOnly;\n if (node.shape.type === 'Text') {\n return node.constraints & NodeConstraints.ReadOnly;\n }\n else if (node.constraints & enumValue) {\n if (annotation.constraints & AnnotationConstraints.InheritReadOnly) {\n return 1;\n }\n else {\n return 0;\n }\n }\n else if (annotation.constraints & AnnotationConstraints.ReadOnly) {\n return 1;\n }\n return 0;\n}\n/** @private */\nexport function canDraw(port, diagram) {\n return port.constraints & PortConstraints.Draw;\n}\n/** @private */\nexport function canDrag(port, diagram) {\n return port.constraints & PortConstraints.Drag;\n}\n","import { createHtmlElement, removeElement } from '../utility/dom-util';\nimport { Ruler } from '../../ruler/index';\nimport { Size } from '../primitives/size';\nimport { getFunction } from '../utility/base-util';\n/**\n * defines the helper methods for the ruler\n */\n/**\n * @private\n */\nexport function renderOverlapElement(diagram) {\n var rulerSize = getRulerSize(diagram);\n var attributes = {\n 'id': diagram.element.id + '_overlapRuler',\n style: 'height:' + rulerSize.height + 'px;width:' + rulerSize.width + 'px;position:absolute;left:0;top:0',\n class: 'e-ruler-overlap'\n };\n var overlap = createHtmlElement('div', attributes);\n diagram.element.insertBefore(overlap, diagram.element.firstChild);\n}\n/**\n * @private\n */\nexport function renderRuler(diagram, isHorizontal) {\n var div = document.getElementById(diagram.element.id + (isHorizontal ? '_hRuler' : '_vRuler'));\n var rulerSize = getRulerSize(diagram);\n var rulerGeometry = getRulerGeometry(diagram);\n var margin = isHorizontal ? ('margin-left:' + rulerSize.width + 'px;') : ('margin-top:' + rulerSize.height + 'px;');\n if (!div) {\n var style = 'height:' + (isHorizontal ? rulerSize.height : (rulerGeometry.height + 100)) + 'px;overflow:hidden;width:' +\n (isHorizontal ? (rulerGeometry.width + 100) : rulerSize.width) + 'px;position:absolute;font-size:11px;' + margin;\n var attributes = {\n 'id': diagram.element.id + (isHorizontal ? '_hRuler' : '_vRuler'),\n style: style\n };\n div = createHtmlElement('div', attributes);\n }\n diagram.element.insertBefore(div, diagram.element.firstChild);\n var diagramRuler = isHorizontal ? diagram.rulerSettings.horizontalRuler : diagram.rulerSettings.verticalRuler;\n var ruler = new Ruler(diagramRuler);\n ruler.orientation = isHorizontal ? 'Horizontal' : 'Vertical';\n ruler.length = (isHorizontal ? rulerGeometry.width : rulerGeometry.height) + diagramRuler.segmentWidth;\n ruler.appendTo('#' + diagram.element.id + (isHorizontal ? '_hRuler' : '_vRuler'));\n isHorizontal ? diagram.hRuler = ruler : diagram.vRuler = ruler;\n var rulerObj = document.getElementById(diagram.element.id + (isHorizontal ? '_hRuler' : '_vRuler'));\n isHorizontal ? diagram.hRuler.element = rulerObj : diagram.vRuler.element = rulerObj;\n}\n/**\n * @private\n */\nexport function updateRuler(diagram) {\n var hOffset = -diagram.scroller.horizontalOffset;\n var vOffset = -diagram.scroller.verticalOffset;\n if (diagram && diagram.rulerSettings.showRulers) {\n diagram.hRuler.length = 0;\n diagram.vRuler.length = 0;\n if (hOffset !== undefined && diagram.hRuler.element) {\n updateRulerDimension(diagram, diagram.hRuler, hOffset, true);\n }\n if (vOffset !== undefined && diagram.vRuler.element) {\n updateRulerDimension(diagram, diagram.vRuler, vOffset, false);\n }\n }\n else {\n removeRulerElements(diagram);\n }\n}\n/**\n * @private\n */\nexport function removeRulerElements(diagram) {\n removeElement(diagram.element.id + '_hRuler');\n removeElement(diagram.element.id + '_vRuler');\n removeElement(diagram.element.id + '_overlapRuler');\n}\n/** @private */\nexport function getRulerSize(diagram) {\n var top = 0;\n var left = 0;\n if (diagram.rulerSettings.showRulers) {\n top = diagram.rulerSettings.horizontalRuler.thickness;\n left = diagram.rulerSettings.verticalRuler.thickness;\n }\n return new Size(left, top);\n}\n/** @private */\nexport function getRulerGeometry(diagram) {\n var rulerSize = getRulerSize(diagram);\n var height = diagram.scroller.viewPortHeight;\n var width = diagram.scroller.viewPortWidth;\n if (width < diagram.element.clientWidth - rulerSize.width) {\n width = diagram.element.clientWidth - rulerSize.width;\n }\n if (height < diagram.element.clientHeight - rulerSize.height) {\n height = diagram.element.clientHeight - rulerSize.height;\n }\n if (diagram.hRuler && diagram.hRuler.length) {\n width = diagram.hRuler.length;\n }\n if (diagram.vRuler && diagram.vRuler.length) {\n height = diagram.vRuler.length;\n }\n return new Size(width, height);\n}\n/**\n * @private\n */\nexport function removeRulerMarkers() {\n var markers = document.getElementsByClassName('e-d-ruler-marker');\n var marker;\n var i;\n if (markers && markers.length > 0) {\n for (i = markers.length - 1; i >= 0; i--) {\n marker = markers[i];\n if (marker) {\n marker.parentNode.removeChild(marker);\n }\n }\n }\n}\nexport function drawRulerMarkers(diagram, currentPoint) {\n if (diagram.rulerSettings.showRulers) {\n diagram.hRuler.drawRulerMarker(diagram.hRuler.element, currentPoint, diagram.scroller.horizontalOffset);\n diagram.vRuler.drawRulerMarker(diagram.vRuler.element, currentPoint, diagram.scroller.verticalOffset);\n }\n}\nfunction updateRulerDimension(diagram, ruler, offset, isHorizontal) {\n var rulerSize = getRulerSize(diagram);\n var rulerGeometry = getRulerGeometry(diagram);\n var diagramRuler = isHorizontal ? diagram.rulerSettings.horizontalRuler : diagram.rulerSettings.verticalRuler;\n updateRulerDiv(diagram, rulerGeometry, isHorizontal);\n updateRulerSpace(diagram, rulerGeometry, isHorizontal);\n ruler.offset = offset;\n ruler.scale = diagram.scroller.currentZoom;\n ruler.length = rulerGeometry.width + 100;\n ruler.arrangeTick = getFunction(diagramRuler.arrangeTick);\n ruler.dataBind();\n var rulerObj = isHorizontal ? diagram.hRuler.element : diagram.vRuler.element;\n if (isHorizontal) {\n rulerObj.style.marginLeft = (rulerSize.width - ruler.hRulerOffset) + 'px';\n }\n else {\n rulerObj.style.marginTop = (rulerSize.height - ruler.vRulerOffset) + 'px';\n }\n}\nfunction updateRulerSpace(diagram, rulerGeometry, isHorizontal) {\n var div = document.getElementById(diagram.element.id + (isHorizontal ? '_hRuler_ruler_space' : '_vRuler_ruler_space'));\n var ruler = isHorizontal ? diagram.hRuler : diagram.vRuler;\n if (div && diagram && rulerGeometry) {\n div.style.width = (isHorizontal ? (rulerGeometry.width + (ruler.segmentWidth * 2)) : ruler.thickness) + 'px';\n div.style.height = (isHorizontal ? ruler.thickness : (rulerGeometry.height + (ruler.segmentWidth * 2))) + 'px';\n }\n}\nfunction updateRulerDiv(diagram, rulerGeometry, isHorizontal) {\n var div = document.getElementById(diagram.element.id + (isHorizontal ? '_hRuler' : '_vRuler'));\n var ruler = isHorizontal ? diagram.hRuler : diagram.vRuler;\n if (div && diagram && rulerGeometry) {\n div.style.width = (isHorizontal ? (rulerGeometry.width + ruler.segmentWidth) : ruler.thickness) + 'px';\n div.style.height = (isHorizontal ? ruler.thickness : (rulerGeometry.height + ruler.segmentWidth)) + 'px';\n div = document.getElementById(diagram.element.id + '_overlapRuler');\n if (div) {\n isHorizontal ? (div.style.height = ruler.thickness + 'px') : (div.style.width = ruler.thickness + 'px');\n }\n }\n}\n","import { Rect } from './../primitives/rect';\nimport { identityMatrix, rotateMatrix, transformPointByMatrix, scaleMatrix } from './../primitives/matrix';\nimport { DiagramElement } from './../core/elements/diagram-element';\nimport { Container } from './../core/containers/container';\nimport { StrokeStyle } from './../core/appearance';\nimport { Point } from './../primitives/point';\nimport { ConnectorConstraints, NodeConstraints } from './../enum/enum';\nimport { SelectorConstraints, ThumbsConstraints } from './../enum/enum';\nimport { PathElement } from './../core/elements/path-element';\nimport { DiagramNativeElement } from './../core/elements/native-element';\nimport { TextElement } from '../core/elements/text-element';\nimport { ImageElement } from '../core/elements/image-element';\nimport { Node } from './../objects/node';\nimport { Connector, bezierPoints } from './../objects/connector';\nimport { getBasicShape } from './../objects/dictionary/basic-shapes';\nimport { getFlowShape } from './../objects/dictionary/flow-shapes';\nimport { Diagram } from './../diagram';\nimport { getContent, removeElement } from './dom-util';\nimport { getBounds, cloneObject, rotatePoint, getFunction } from './base-util';\nimport { getPolygonPath } from './../utility/path-util';\nimport { DiagramHtmlElement } from '../core/elements/html-element';\nimport { getRulerSize } from '../ruler/ruler';\n/** @private */\nexport function completeRegion(region, selectedObjects) {\n var collection = [];\n for (var i = 0; i < selectedObjects.length; i++) {\n var obj = selectedObjects[i];\n if (region.containsRect(obj.wrapper.bounds)) {\n collection.push(obj);\n }\n }\n return collection;\n}\n/**\n * @private\n */\nexport function findObjectType(drawingObject) {\n var type;\n if (drawingObject) {\n if (drawingObject.type) {\n type = 'Connector';\n }\n else if (drawingObject.shape && !drawingObject.type) {\n type = 'Node';\n }\n }\n return type;\n}\n/** @private */\nexport function findNearestPoint(reference, start, end) {\n var shortestPoint;\n var shortest = Point.findLength(start, reference);\n var shortest1 = Point.findLength(end, reference);\n if (shortest > shortest1) {\n shortestPoint = end;\n }\n else {\n shortestPoint = start;\n }\n var angleBWStAndEnd = Point.findAngle(start, end);\n var angleBWStAndRef = Point.findAngle(shortestPoint, reference);\n var r = Point.findLength(shortestPoint, reference);\n var vaAngle = angleBWStAndRef + ((angleBWStAndEnd - angleBWStAndRef) * 2);\n return {\n x: (shortestPoint.x + r * Math.cos(vaAngle * Math.PI / 180)),\n y: (shortestPoint.y + r * Math.sin(vaAngle * Math.PI / 180))\n };\n}\nfunction pointsForBezier(connector) {\n var points = [];\n if (connector.type === 'Bezier') {\n var k = 0;\n for (var i = 0; i < connector.segments.length; i++) {\n var tolerance = 1.5;\n var segment = connector.segments[i];\n var pt = { x: 0, y: 0 };\n var point1 = !Point.isEmptyPoint(segment.point1) ? segment.point1 : segment.bezierPoint1;\n var point2 = !Point.isEmptyPoint(segment.point2) ? segment.point2 : segment.bezierPoint2;\n var max = Number((connector.distance(point1, segment.points[0]) +\n connector.distance(point2, point1) +\n connector.distance(segment.points[1], point2)) / tolerance);\n for (var j = 0; j < max - 1; j = j + 10) {\n points[k] =\n bezierPoints(connector, segment.points[0], !Point.isEmptyPoint(segment.point1) ? segment.point1 : segment.bezierPoint1, !Point.isEmptyPoint(segment.point2) ? segment.point2 : segment.bezierPoint2, segment.points[1], j, max);\n k++;\n }\n }\n }\n return points;\n}\n/** @private */\nexport function isPointOverConnector(connector, reference) {\n var intermediatePoints;\n intermediatePoints = connector.type === 'Bezier' ? pointsForBezier(connector) :\n connector.intermediatePoints;\n for (var i = 0; i < intermediatePoints.length - 1; i++) {\n var start = intermediatePoints[i];\n var end = intermediatePoints[i + 1];\n var rect = Rect.toBounds([start, end]);\n rect.Inflate(connector.hitPadding);\n if (rect.containsPoint(reference)) {\n var intersectinPt = findNearestPoint(reference, start, end);\n var segment1 = { X1: start.x, X2: end.x, Y1: start.y, Y2: end.y };\n var segment2 = { X1: reference.x, X2: intersectinPt.x, Y1: reference.y, Y2: intersectinPt.y };\n var intersectDetails = intersect3(segment1, segment2);\n if (intersectDetails.enabled) {\n var distance = Point.findLength(reference, intersectDetails.intersectPt);\n if (Math.abs(distance) < connector.hitPadding) {\n return true;\n }\n }\n else {\n var rect_1 = Rect.toBounds([reference, reference]);\n rect_1.Inflate(3);\n if (rect_1.containsPoint(start) || rect_1.containsPoint(end)) {\n return true;\n }\n }\n if (Point.equals(reference, intersectinPt)) {\n return true;\n }\n }\n }\n return false;\n}\n/** @private */\nexport function intersect3(lineUtil1, lineUtil2) {\n var point = { x: 0, y: 0 };\n var l1 = lineUtil1;\n var l2 = lineUtil2;\n var d = (l2.Y2 - l2.Y1) * (l1.X2 - l1.X1) - (l2.X2 - l2.X1) * (l1.Y2 - l1.Y1);\n var na = (l2.X2 - l2.X1) * (l1.Y1 - l2.Y1) - (l2.Y2 - l2.Y1) * (l1.X1 - l2.X1);\n var nb = (l1.X2 - l1.X1) * (l1.Y1 - l2.Y1) - (l1.Y2 - l1.Y1) * (l1.X1 - l2.X1);\n if (d === 0) {\n return { enabled: false, intersectPt: point };\n }\n var ua = na / d;\n var ub = nb / d;\n if (ua >= 0 && ua <= 1 && ub >= 0 && ub <= 1) {\n point.x = l1.X1 + (ua * (l1.X2 - l1.X1));\n point.y = l1.Y1 + (ua * (l1.Y2 - l1.Y1));\n return { enabled: true, intersectPt: point };\n }\n return { enabled: false, intersectPt: point };\n}\n/** @private */\nexport function getPoints(element, corners) {\n var line = [];\n var X1 = corners.topLeft;\n var X2 = corners.topRight;\n var Y1 = corners.bottomRight;\n var Y2 = corners.bottomLeft;\n if (element.rotateAngle !== 0 || element.parentTransform !== 0) {\n var matrix = identityMatrix();\n rotateMatrix(matrix, element.rotateAngle + element.parentTransform, element.offsetX, element.offsetY);\n X1 = transformPointByMatrix(matrix, X1);\n X2 = transformPointByMatrix(matrix, X2);\n Y1 = transformPointByMatrix(matrix, Y1);\n Y2 = transformPointByMatrix(matrix, Y2);\n }\n line.push(X1);\n line.push(X2);\n line.push(Y1);\n line.push(Y2);\n return line;\n}\n/**\n * @private\n * sets the offset of the tooltip.\n * @param diagram\n * @param mousePosition\n * @param node\n */\nexport function getTooltipOffset(diagram, mousePosition, node) {\n var offset;\n var inheritTooltip = (node instanceof Node) ? (node.constraints & NodeConstraints.InheritTooltip)\n : (node.constraints & ConnectorConstraints.InheritTooltip);\n var objectTooltip = (node instanceof Node) ? (node.constraints & NodeConstraints.Tooltip)\n : (node.constraints & ConnectorConstraints.Tooltip);\n var isMouseBased = ((!inheritTooltip && objectTooltip ? node.tooltip.relativeMode\n : diagram.tooltip.relativeMode) === 'Mouse') ? true : false;\n offset = tooltipOffset(node, mousePosition, diagram, isMouseBased);\n var rulerSize = getRulerSize(diagram);\n return { x: offset.x + rulerSize.width, y: offset.y + rulerSize.height };\n}\nfunction tooltipOffset(node, mousePosition, diagram, isMouseBased) {\n var point = {};\n var scale = diagram.scroller.transform.scale;\n var element = document.getElementById(diagram.element.id);\n var bounds = node.wrapper.outerBounds;\n var rect = element.getBoundingClientRect();\n var horizontalOffset = diagram.scroller.horizontalOffset;\n var verticalOffset = diagram.scroller.verticalOffset;\n switch (diagram.tooltipObject.position) {\n case 'BottomCenter':\n point = offsetPoint(mousePosition, bounds.bottomCenter, diagram, isMouseBased, (rect.width / 2), rect.height);\n break;\n case 'BottomLeft':\n case 'LeftBottom':\n point = offsetPoint(mousePosition, bounds.bottomLeft, diagram, isMouseBased, 0, rect.height);\n break;\n case 'BottomRight':\n case 'RightBottom':\n point = offsetPoint(mousePosition, bounds.bottomRight, diagram, isMouseBased, rect.width, rect.height);\n break;\n case 'LeftCenter':\n point = offsetPoint(mousePosition, bounds.middleLeft, diagram, isMouseBased, 0, (rect.height / 2));\n break;\n case 'LeftTop':\n case 'TopLeft':\n point = offsetPoint(mousePosition, bounds.topLeft, diagram, isMouseBased, 0, 0);\n break;\n case 'RightCenter':\n point = offsetPoint(mousePosition, bounds.middleRight, diagram, isMouseBased, rect.width, (rect.height / 2));\n break;\n case 'RightTop':\n case 'TopRight':\n point = offsetPoint(mousePosition, bounds.topRight, diagram, isMouseBased, rect.width, 0);\n break;\n case 'TopCenter':\n point = offsetPoint(mousePosition, bounds.topCenter, diagram, isMouseBased, (rect.width / 2), 0);\n break;\n }\n return point;\n}\nfunction offsetPoint(mousePosition, bound, diagram, isMouseBased, x, y) {\n var point = {};\n var scale = diagram.scroller.transform.scale;\n var horizontalOffset = diagram.scroller.horizontalOffset;\n var verticalOffset = diagram.scroller.verticalOffset;\n point.x = (isMouseBased ? mousePosition.x : bound.x) * scale + horizontalOffset - x;\n point.y = (isMouseBased ? mousePosition.y : bound.y) * scale + verticalOffset - y;\n return point;\n}\n/** @private */\nexport function sort(objects) {\n var i = 0;\n var j = 0;\n var temp;\n for (i = 0; i < objects.length; i++) {\n var b = getBounds(objects[i].wrapper);\n for (j = i; j < objects.length; j++) {\n var bounds = getBounds(objects[j].wrapper);\n if (b.center.x > bounds.center.x) {\n temp = objects[i];\n objects[i] = objects[j];\n objects[j] = temp;\n }\n }\n }\n return objects;\n}\n/** @private */\nexport function getAnnotationPosition(pts, annotation, bound) {\n var angle;\n var getloop;\n var point;\n getloop = getOffsetOfConnector(pts, annotation, bound);\n angle = Point.findAngle(pts[getloop.index], pts[getloop.index + 1]);\n var alignednumber = getAlignedPosition(annotation);\n point = Point.transform(getloop.point, angle + 45, alignednumber);\n getloop.point = point;\n getloop.angle = angle;\n return getloop;\n}\n/** @private */\nexport function getOffsetOfConnector(points, annotation, bounds) {\n var length = 0;\n var offset = annotation.offset;\n var point;\n var angle;\n var offsetLength;\n var lengths = [];\n var prevLength;\n var kCount;\n for (var j = 0; j < points.length - 1; j++) {\n length += Point.distancePoints(points[j], points[j + 1]);\n lengths.push(length);\n }\n offsetLength = offset * length;\n for (var k = 0; k < lengths.length; k++) {\n if (lengths[k] >= offsetLength) {\n angle = Point.findAngle(points[k], points[k + 1]);\n point = Point.transform(points[k], angle, offsetLength - (prevLength || 0));\n kCount = k;\n return { point: point, index: kCount };\n }\n prevLength = lengths[k];\n }\n return { point: point, index: kCount };\n}\n/** @private */\nexport function getAlignedPosition(annotation) {\n var cnst = annotation.content === undefined ? 10 : 0;\n var state = 0;\n switch (annotation.alignment) {\n case 'Center':\n state = 0;\n break;\n case 'Before':\n state = -((0) / 2 + cnst);\n break;\n case 'After':\n state = ((0) / 2 + cnst);\n break;\n }\n return state;\n}\n/** @private */\nexport function alignLabelOnSegments(obj, ang, pts) {\n var angle = ang % 360;\n ang %= 360;\n var fourty5 = 45;\n var one35 = 135;\n var two25 = 225;\n var three15 = 315;\n var vAlign;\n var hAlign;\n switch (obj.alignment) {\n case 'Before':\n if (ang >= fourty5 && ang <= one35) {\n hAlign = 'right';\n vAlign = obj.offset === 0.5 ? 'center' : 'top';\n }\n else if (ang >= two25 && ang <= three15) {\n hAlign = 'left';\n vAlign = obj.offset === 0.5 ? 'center' : 'bottom';\n }\n else if (ang > fourty5 && ang < two25) {\n vAlign = 'top';\n hAlign = obj.offset === 0.5 ? 'center' : 'right';\n }\n else {\n vAlign = 'bottom';\n hAlign = (obj.offset === 0.5) ? 'center' : 'left';\n }\n break;\n case 'After':\n if (ang >= fourty5 && ang <= one35) {\n hAlign = 'left';\n vAlign = obj.offset === 0.5 ? 'center' : 'top';\n }\n else if (ang >= two25 && ang <= three15) {\n hAlign = 'right';\n vAlign = obj.offset === 0.5 ? 'center' : 'bottom';\n }\n else if (ang > fourty5 && ang < two25) {\n vAlign = 'bottom';\n hAlign = obj.offset === 0.5 ? 'center' : 'right';\n }\n else {\n vAlign = 'top';\n hAlign = obj.offset === 0.5 ? 'center' : 'left';\n }\n break;\n case 'Center':\n hAlign = 'center';\n vAlign = 'center';\n break;\n }\n if (obj.offset === 0 || obj.offset === 1) {\n var direction = void 0;\n direction = getBezierDirection(pts[0], pts[1]);\n switch (direction) {\n case 'left':\n hAlign = obj.offset === 0 ? 'right' : 'left';\n break;\n case 'right':\n hAlign = obj.offset === 0 ? 'left' : 'right';\n break;\n case 'bottom':\n vAlign = obj.offset === 0 ? 'top' : 'bottom';\n break;\n case 'top':\n vAlign = obj.offset === 0 ? 'bottom' : 'top';\n break;\n }\n }\n return { hAlign: hAlign, vAlign: vAlign };\n}\n/** @private */\nexport function getBezierDirection(src, tar) {\n if (Math.abs(tar.x - src.x) > Math.abs(tar.y - src.y)) {\n return src.x < tar.x ? 'right' : 'left';\n }\n else {\n return src.y < tar.y ? 'bottom' : 'top';\n }\n}\n/** @private */\nexport function serialize(model) {\n var clonedObject = cloneObject(model, model.getCustomProperty);\n return JSON.stringify(clonedObject);\n}\n/** @private */\nexport function deserialize(model, diagram) {\n diagram.clear();\n diagram.protectPropertyChange(true);\n var map = diagram.dataSourceSettings.doBinding;\n var nodeTemp = diagram.setNodeTemplate;\n var getDescription = diagram.getDescription;\n var getCustomProperty = diagram.getCustomProperty;\n var commands = {};\n for (var _i = 0, _a = diagram.commandManager.commands; _i < _a.length; _i++) {\n var command = _a[_i];\n commands[command.name] = { execute: command.execute, canExecute: command.canExecute };\n }\n var arrangeTickHorizontal = diagram.rulerSettings.horizontalRuler.arrangeTick;\n var arrangeTickVertical = diagram.rulerSettings.verticalRuler.arrangeTick;\n var getLayoutInfo = diagram.layout.getLayoutInfo;\n var getBranch = diagram.layout.getBranch;\n var nodeDefaults = diagram.getNodeDefaults;\n var connectorDefaults = diagram.getConnectorDefaults;\n var dataObj = JSON.parse(model);\n diagram.contextMenuSettings = dataObj.contextMenuSettings;\n diagram.constraints = dataObj.constraints;\n diagram.tool = dataObj.tool;\n diagram.bridgeDirection = dataObj.bridgeDirection;\n diagram.pageSettings = dataObj.pageSettings;\n diagram.drawingObject = dataObj.drawingObject;\n diagram.tooltip = dataObj.tooltip;\n diagram.addInfo = dataObj.addInfo;\n diagram.getDescription = getDescription;\n diagram.scrollSettings = dataObj.scrollSettings;\n diagram.commandManager = dataObj.commandManager;\n diagram.layers = dataObj.layers;\n diagram.rulerSettings.horizontalRuler.arrangeTick = arrangeTickHorizontal;\n diagram.rulerSettings.verticalRuler.arrangeTick = arrangeTickVertical;\n for (var _b = 0, _c = diagram.commandManager.commands; _b < _c.length; _b++) {\n var cmd = _c[_b];\n if (commands[cmd.name]) {\n cmd.execute = commands[cmd.name].execute;\n cmd.canExecute = commands[cmd.name].canExecute;\n }\n }\n diagram.backgroundColor = dataObj.backgroundColor;\n diagram.basicElements = dataObj.basicElements;\n diagram.connectors = dataObj.connectors;\n diagram.dataSourceSettings = dataObj.dataSourceSettings;\n diagram.dataSourceSettings.doBinding = map;\n diagram.height = dataObj.height;\n diagram.setNodeTemplate = nodeTemp;\n diagram.getConnectorDefaults = connectorDefaults;\n diagram.getNodeDefaults = nodeDefaults;\n diagram.getCustomProperty = getCustomProperty;\n diagram.mode = dataObj.mode;\n diagram.nodes = dataObj.nodes;\n diagram.rulerSettings = dataObj.rulerSettings;\n diagram.snapSettings = dataObj.snapSettings;\n diagram.width = dataObj.width;\n diagram.layout = dataObj.layout;\n diagram.layout.getLayoutInfo = getFunction(getLayoutInfo);\n diagram.layout.getBranch = getFunction(getBranch);\n diagram.diagramActions = 0;\n diagram.isLoading = true;\n diagram.protectPropertyChange(false);\n var key = 'refresh';\n var component;\n for (var i = 0; i < diagram.views.length; i++) {\n component = diagram.views[diagram.views[i]];\n component.refresh();\n if (component instanceof Diagram) {\n diagram.element.classList.add('e-diagram');\n }\n }\n var selectedNodes = getCollection(dataObj.selectedItems.nodes, diagram.nodes);\n var selcectedConnectors = getCollection(dataObj.selectedItems.connectors, diagram.connectors);\n var selectedItems = [];\n selectedItems = selectedItems.concat(selectedNodes).concat(selcectedConnectors);\n diagram.select(selectedItems);\n return dataObj;\n}\nfunction getCollection(objNodes, diagramNodes) {\n var collection = [];\n for (var i = 0; i < objNodes.length; i++) {\n for (var _i = 0, diagramNodes_1 = diagramNodes; _i < diagramNodes_1.length; _i++) {\n var connectors = diagramNodes_1[_i];\n if (connectors.id === objNodes[i].id) {\n collection.push(connectors);\n }\n }\n }\n return collection;\n}\n/** @private */\nexport function updateStyle(changedObject, target) {\n //since text style model is the super set of shape style model, we used text style model\n var style = target.style;\n var textElement = target;\n for (var _i = 0, _a = Object.keys(changedObject); _i < _a.length; _i++) {\n var key = _a[_i];\n switch (key) {\n case 'fill':\n style.fill = changedObject.fill;\n if (style instanceof StrokeStyle) {\n /* tslint:disable:no-string-literal */\n style['fill'] = 'transparent';\n }\n break;\n case 'textOverflow':\n style.textOverflow = changedObject.textOverflow;\n break;\n case 'opacity':\n style.opacity = changedObject.opacity;\n break;\n case 'strokeColor':\n style.strokeColor = changedObject.strokeColor;\n break;\n case 'strokeDashArray':\n style.strokeDashArray = changedObject.strokeDashArray;\n break;\n case 'strokeWidth':\n style.strokeWidth = changedObject.strokeWidth;\n break;\n case 'bold':\n style.bold = changedObject.bold;\n break;\n case 'color':\n style.color = changedObject.color;\n break;\n case 'textWrapping':\n style.textWrapping = changedObject.textWrapping;\n break;\n case 'fontFamily':\n style.fontFamily = changedObject.fontFamily;\n break;\n case 'fontSize':\n style.fontSize = changedObject.fontSize;\n break;\n case 'italic':\n style.italic = changedObject.italic;\n break;\n case 'textAlign':\n style.textAlign = changedObject.textAlign;\n break;\n case 'whiteSpace':\n style.whiteSpace = changedObject.whiteSpace;\n break;\n case 'textDecoration':\n style.textDecoration = changedObject.textDecoration;\n break;\n case 'gradient':\n style.gradient = changedObject.gradient;\n break;\n }\n }\n if (target instanceof TextElement) {\n textElement.refreshTextElement();\n }\n}\n/** @private */\nexport function updateHyperlink(changedObject, target, actualAnnotation) {\n var textElement = target;\n var hyperlink = textElement.hyperlink;\n for (var _i = 0, _a = Object.keys(changedObject); _i < _a.length; _i++) {\n var key = _a[_i];\n switch (key) {\n case 'color':\n textElement.style.color = hyperlink.color = changedObject.color;\n break;\n case 'content':\n textElement.content = hyperlink.content = changedObject.content || hyperlink.link;\n break;\n case 'link':\n var labelStyle = actualAnnotation.style;\n textElement.style.color = changedObject.link ? hyperlink.color : labelStyle.color;\n textElement.style.textDecoration = changedObject.link ? hyperlink.textDecoration : actualAnnotation.style.textDecoration;\n textElement.content = changedObject.link ? hyperlink.content || changedObject.link : actualAnnotation.content;\n hyperlink.link = changedObject.link;\n break;\n case 'textDecoration':\n textElement.style.textDecoration = hyperlink.textDecoration = changedObject.textDecoration;\n break;\n }\n }\n}\nexport function updateShapeContent(content, actualObject, diagram) {\n content.width = actualObject.width;\n content.height = actualObject.height;\n content.minHeight = actualObject.minHeight;\n content.maxHeight = actualObject.maxHeight;\n content.minWidth = actualObject.minWidth;\n content.maxWidth = actualObject.maxWidth;\n content.horizontalAlignment = actualObject.wrapper.children[0].horizontalAlignment;\n content.verticalAlignment = actualObject.wrapper.children[0].verticalAlignment;\n content.relativeMode = actualObject.wrapper.children[0].relativeMode;\n content.visible = actualObject.wrapper.children[0].visible;\n if (actualObject.shape instanceof Text) {\n content.margin = actualObject.shape.margin;\n }\n content.id = actualObject.wrapper.children[0].id;\n content.style = actualObject.style;\n var view;\n for (var _i = 0, _a = diagram.views; _i < _a.length; _i++) {\n var elementId = _a[_i];\n removeElement(actualObject.id + '_groupElement', elementId);\n removeElement(actualObject.id + '_content_groupElement', elementId);\n removeElement(actualObject.id + '_content_html_element', elementId);\n }\n actualObject.wrapper.children.splice(0, 1);\n actualObject.wrapper.children.splice(0, 0, content);\n}\n/** @private */\nexport function updateShape(node, actualObject, oldObject, diagram) {\n var content = new DiagramElement();\n var i;\n var textStyle;\n var nodeStyle;\n switch (node.shape.type) {\n case 'Path':\n var pathContent = new PathElement();\n pathContent.data = actualObject.shape.data;\n content = pathContent;\n updateShapeContent(content, actualObject, diagram);\n break;\n case 'Image':\n var imageContent = new ImageElement();\n imageContent.source = actualObject.shape.source;\n imageContent.imageAlign = actualObject.shape.align;\n imageContent.imageScale = actualObject.shape.scale;\n content = imageContent;\n updateShapeContent(content, actualObject, diagram);\n break;\n case 'Text':\n //issue\n var textContent = new TextElement();\n // (textContent as TextElement).content = (node.shape as TextModel).content;\n content = textContent;\n updateShapeContent(content, actualObject, diagram);\n break;\n case 'Basic':\n var element = void 0;\n element = actualObject.shape.shape === 'Rectangle' ? new DiagramElement() : new PathElement();\n if (actualObject.shape.shape === 'Polygon') {\n element.data = getPolygonPath(actualObject.shape.points);\n }\n else {\n element.data = getBasicShape(actualObject.shape.shape);\n }\n updateShapeContent(content, actualObject, diagram);\n if (actualObject.shape.shape === 'Rectangle') {\n element.cornerRadius = actualObject.shape.cornerRadius;\n }\n content = element;\n break;\n case 'Flow':\n var flowShapeElement = new PathElement();\n flowShapeElement.data = getFlowShape(actualObject.shape.shape);\n content = flowShapeElement;\n updateShapeContent(content, actualObject, diagram);\n break;\n case 'Native':\n var nativeContent = new DiagramNativeElement();\n nativeContent.content = actualObject.shape.content;\n nativeContent.scale = actualObject.shape.scale;\n content = nativeContent;\n updateShapeContent(content, actualObject, diagram);\n break;\n case 'HTML':\n var htmlContent = new DiagramHtmlElement();\n htmlContent.content = actualObject.shape.content;\n content = htmlContent;\n updateShapeContent(content, actualObject, diagram);\n }\n if (node.shape.type === undefined || node.shape.type === oldObject.shape.type) {\n updateContent(node, actualObject);\n }\n else {\n content.width = actualObject.wrapper.children[0].width;\n content.height = actualObject.wrapper.children[0].height;\n if (actualObject.shape instanceof Text) {\n content.margin = actualObject.shape.margin;\n }\n content.style = actualObject.style;\n actualObject.wrapper.children[0] = content;\n }\n}\n/** @private */\nexport function updateContent(newValues, actualObject) {\n if (Object.keys(newValues.shape).length > 0) {\n if (actualObject.shape.type === 'Path' && newValues.shape.data !== undefined) {\n actualObject.wrapper.children[0].data = newValues.shape.data;\n }\n else if (actualObject.shape.type === 'Text' && newValues.shape.content !== undefined) {\n actualObject.wrapper.children[0].content = newValues.shape.content;\n }\n else if (actualObject.shape.type === 'Image' && newValues.shape.source !== undefined) {\n actualObject.wrapper.children[0].source = newValues.shape.source;\n }\n else if (actualObject.shape.type === 'Native') {\n var nativeElement = document.getElementById(actualObject.wrapper.children[0].id + '_groupElement');\n if (newValues.shape.content !== undefined && nativeElement) {\n nativeElement.removeChild(nativeElement.children[0]);\n actualObject.wrapper.children[0].content = newValues.shape.content;\n nativeElement.appendChild(getContent(actualObject.wrapper.children[0], false));\n }\n actualObject.wrapper.children[0].scale = newValues.shape.scale ?\n newValues.shape.scale : actualObject.wrapper.children[0].scale;\n }\n else if (actualObject.shape.type === 'HTML') {\n var htmlElement = document.getElementById(actualObject.wrapper.children[0].id + '_html_element');\n if (htmlElement) {\n htmlElement.removeChild(htmlElement.children[0]);\n actualObject.wrapper.children[0].content = newValues.shape.content;\n htmlElement.appendChild(getContent(actualObject.wrapper.children[0], true));\n }\n }\n else if (actualObject.shape.type === 'Flow' && newValues.shape.shape !== undefined) {\n actualObject.shape.shape = newValues.shape.shape;\n var shapes = actualObject.shape.shape;\n var flowshapedata = getFlowShape(shapes.toString());\n actualObject.wrapper.children[0].data = flowshapedata;\n }\n else if (newValues.shape.cornerRadius !== undefined) {\n actualObject.wrapper.children[0].cornerRadius = newValues.shape.cornerRadius;\n }\n else if (newValues.shape.shape !== undefined) {\n actualObject.shape.shape = newValues.shape.shape;\n var shapes = actualObject.shape.shape;\n var basicShapeData = getBasicShape(shapes.toString());\n actualObject.wrapper.children[0].data = basicShapeData;\n }\n }\n}\n/** @private */\nexport function removeItem(array, item) {\n var index = array.indexOf(item);\n if (index >= 0) {\n array.splice(index, 1);\n }\n}\n/** @private */\nexport function updateConnector(connector, points) {\n var srcPoint;\n var anglePoint;\n var srcDecorator;\n var tarDecorator;\n var targetPoint;\n connector.intermediatePoints = points;\n connector.updateSegmentElement(connector, points, connector.wrapper.children[0]);\n srcPoint = connector.sourcePoint;\n srcDecorator = connector.sourceDecorator;\n if (connector.type === 'Bezier') {\n var firstSegment = connector.segments[0];\n var lastSegment = connector.segments[connector.segments.length - 1];\n anglePoint = [!Point.isEmptyPoint(lastSegment.point2) ? lastSegment.point2 : lastSegment.bezierPoint2,\n !Point.isEmptyPoint(firstSegment.point1) ? firstSegment.point1 : firstSegment.bezierPoint1];\n }\n else {\n anglePoint = connector.intermediatePoints;\n }\n points = connector.clipDecorators(connector, points);\n var element = connector.wrapper.children[1];\n connector.updateDecoratorElement(element, points[0], anglePoint[1], srcDecorator);\n targetPoint = connector.targetPoint;\n tarDecorator = connector.targetDecorator;\n element = connector.wrapper.children[2];\n connector.updateDecoratorElement(element, points[points.length - 1], anglePoint[anglePoint.length - 2], tarDecorator);\n connector.updateShapeElement(connector);\n}\n/** @private */\nexport function getUserHandlePosition(selectorItem, handle, transform) {\n var wrapper = selectorItem.wrapper;\n var positionPoints;\n var bounds = wrapper.bounds;\n var offset = handle.offset;\n var size = handle.size / transform.scale;\n var margin = handle.margin;\n var point;\n var left = wrapper.offsetX - wrapper.actualSize.width * wrapper.pivot.x;\n var top = wrapper.offsetY - wrapper.actualSize.height * wrapper.pivot.y;\n point = { x: 0, y: 0 };\n if (selectorItem.nodes.length > 0) {\n switch (handle.side) {\n case 'Top':\n point.x += left + bounds.width * offset;\n point.y += top - size;\n break;\n case 'Bottom':\n point.x += left + offset * bounds.width;\n point.y += top + wrapper.actualSize.height + size;\n break;\n case 'Left':\n point.x += left - size;\n point.y += top + offset * bounds.height;\n break;\n case 'Right':\n point.x += left + wrapper.actualSize.width + size;\n point.y += top + offset * bounds.height;\n break;\n }\n point.x += (margin.left - margin.right) +\n (size / 2) * (handle.horizontalAlignment === 'Center' ? 0 : (handle.horizontalAlignment === 'Right' ? -1 : 1));\n point.y += (margin.top - margin.bottom) +\n (size / 2) * (handle.verticalAlignment === 'Center' ? 0 : (handle.verticalAlignment === 'Top' ? -1 : 1));\n }\n else if (selectorItem.connectors.length > 0) {\n var connector = selectorItem.connectors[0];\n var annotation = { offset: offset };\n var connectorOffset = getOffsetOfConnector(connector.intermediatePoints, annotation, bounds);\n var index = connectorOffset.index;\n point = connectorOffset.point;\n var getPointloop = getAnnotationPosition(connector.intermediatePoints, annotation, bounds);\n var points = connector.intermediatePoints;\n var offsetLength = void 0;\n var angle = getPointloop.angle;\n var matrix = identityMatrix();\n rotateMatrix(matrix, -angle, connector.intermediatePoints[index].x, connector.intermediatePoints[index].y);\n point = transformPointByMatrix(matrix, point);\n point.x += (margin.left - margin.right) +\n (size / 2) * (handle.horizontalAlignment === 'Center' ? 0 : (handle.horizontalAlignment === 'Right' ? -1 : 1));\n point.y += (margin.top - margin.bottom) +\n (size / 2) * (handle.verticalAlignment === 'Center' ? 0 : (handle.verticalAlignment === 'Top' ? -1 : 1));\n matrix = identityMatrix();\n rotateMatrix(matrix, angle, connector.intermediatePoints[index].x, connector.intermediatePoints[index].y);\n point = transformPointByMatrix(matrix, point);\n }\n if (wrapper.rotateAngle !== 0 || wrapper.parentTransform !== 0) {\n var matrix = identityMatrix();\n rotateMatrix(matrix, wrapper.rotateAngle + wrapper.parentTransform, wrapper.offsetX, wrapper.offsetY);\n point = transformPointByMatrix(matrix, point);\n }\n return point;\n}\n/** @private */\nexport function canResizeCorner(selectorConstraints, action, thumbsConstraints) {\n if ((SelectorConstraints[action] & selectorConstraints) && (ThumbsConstraints[action] & thumbsConstraints)) {\n return true;\n }\n return false;\n}\n/** @private */\nexport function canShowCorner(selectorConstraints, action) {\n if (SelectorConstraints[action] & selectorConstraints) {\n return true;\n }\n return false;\n}\n/** @private */\nexport function checkPortRestriction(port, portVisibility) {\n return port.visibility & portVisibility;\n}\n/** @private */\nexport function findAnnotation(node, id) {\n var annotation;\n if (node.shape.type === 'Text') {\n annotation = (node.shape);\n }\n else {\n var annotationId = id.split('_');\n id = annotationId[annotationId.length - 1];\n for (var i = 0; i < node.annotations.length; i++) {\n if (id === node.annotations[i].id) {\n annotation = node.annotations[i];\n }\n }\n }\n return annotation;\n}\nexport function findPortIndex(node, id) {\n var index;\n for (var i = 0; i < node.ports.length; i++) {\n if (node.ports[i].id === id) {\n return (i).toString();\n }\n }\n return null;\n}\n/** @private */\nexport function getObjectFromCollection(obj, id) {\n var i;\n for (i = 0; i < obj.length; i++) {\n if (id === obj[i].id) {\n return true;\n }\n }\n return false;\n}\n/** @private */\nexport function scaleElement(element, sw, sh, refObject) {\n if (element.width !== undefined && element.height !== undefined) {\n element.width *= sw;\n element.height *= sh;\n }\n if (element instanceof Container) {\n var matrix = identityMatrix();\n var width = refObject.width || refObject.actualSize.width;\n var height = refObject.height || refObject.actualSize.height;\n if (width !== undefined && height !== undefined) {\n var x = refObject.offsetX - width * refObject.pivot.x;\n var y = refObject.offsetY - height * refObject.pivot.y;\n var refPoint = {\n x: x + width * refObject.pivot.x,\n y: y + height * refObject.pivot.y\n };\n refPoint = rotatePoint(refObject.rotateAngle, refObject.offsetX, refObject.offsetY, refPoint);\n rotateMatrix(matrix, -refObject.rotateAngle, refPoint.x, refPoint.y);\n scaleMatrix(matrix, sw, sh, refPoint.x, refPoint.y);\n rotateMatrix(matrix, refObject.rotateAngle, refPoint.x, refPoint.y);\n for (var _i = 0, _a = element.children; _i < _a.length; _i++) {\n var child = _a[_i];\n if (child.width !== undefined && child.height !== undefined) {\n var newPosition = transformPointByMatrix(matrix, { x: child.offsetX, y: child.offsetY });\n child.offsetX = newPosition.x;\n child.offsetY = newPosition.y;\n scaleElement(child, sw, sh, refObject);\n }\n }\n }\n }\n}\n/** @private */\nexport function insertObject(obj, key, collection) {\n if (collection.length === 0) {\n collection.push(obj);\n }\n else if (collection.length === 1) {\n if (collection[0][key] > obj[key]) {\n collection.splice(0, 0, obj);\n }\n else {\n collection.push(obj);\n }\n }\n else if (collection.length > 1) {\n var low = 0;\n var high = collection.length - 1;\n var mid = Math.floor((low + high) / 2);\n while (mid !== low) {\n if (collection[mid][key] < obj[key]) {\n low = mid;\n mid = Math.floor((low + high) / 2);\n }\n else if (collection[mid][key] > obj[key]) {\n high = mid;\n mid = Math.floor((low + high) / 2);\n }\n }\n if (collection[high][key] < obj[key]) {\n collection.push(obj);\n }\n else if (collection[low][key] > obj[key]) {\n collection.splice(low, 0, obj);\n }\n else if ((collection[low][key] < obj[key]) && collection[high][key] > obj[key]) {\n collection.splice(high, 0, obj);\n }\n }\n}\n/**\n * Get the object as Node | Connector\n * @param obj\n */\nexport var getObjectType = function (obj) {\n if (obj) {\n if (obj.sourceID !== undefined || obj.sourcePoint !== undefined ||\n obj.targetID !== undefined || obj.targetPoint !== undefined ||\n obj.type !== undefined) {\n obj = Connector;\n }\n else {\n obj = Node;\n }\n }\n return obj;\n};\n","import { Connector } from '../objects/connector';\nimport { Node } from '../objects/node';\nimport { Rect } from '../primitives/rect';\nimport { identityMatrix, transformPointByMatrix, rotateMatrix } from '../primitives/matrix';\nimport { getUserHandlePosition, checkPortRestriction } from '../utility/diagram-util';\nimport { canMove, canDragSourceEnd, canDragTargetEnd, canContinuousDraw, canDragSegmentThumb } from '../utility/constraints-util';\nimport { canZoomPan, defaultTool, canDrawOnce, canDrag, canDraw } from '../utility/constraints-util';\nimport { canShowCorner, canResizeCorner } from '../utility/diagram-util';\nimport { Point } from '../primitives/point';\nimport { TextElement } from '../core/elements/text-element';\nimport { PortConstraints, DiagramTools, PortVisibility, ThumbsConstraints } from '../enum/enum';\nimport { Selector } from './selector';\nimport { PointPort } from './../objects/port';\n/**\n * Finds the action to be taken for the object under mouse\n *\n */\n/** @private */\nexport function findToolToActivate(obj, wrapper, position, diagram, touchStart, touchMove, target) {\n var conn = diagram.selectedItems.connectors[0];\n if (touchMove && touchMove.length > 1 && touchStart && touchStart.length > 1) {\n return 'PinchZoom';\n }\n if (diagram.currentSymbol) {\n return 'Drag';\n }\n var eventHandler = 'eventHandler';\n if (diagram[eventHandler].action === 'PortDraw') {\n diagram.tool &= ~DiagramTools.DrawOnce;\n }\n //Drawing Tools\n if ((canDrawOnce(diagram) || canContinuousDraw(diagram)) && diagram.drawingObject) {\n return 'Draw';\n }\n if (hasSelection(diagram)) {\n var handle = diagram.selectedItems;\n if (handle.wrapper && canShowCorner(handle.constraints, 'UserHandle')) {\n for (var _i = 0, _a = handle.userHandles; _i < _a.length; _i++) {\n var obj_1 = _a[_i];\n if (obj_1.visible) {\n var paddedBounds = getUserHandlePosition(handle, obj_1, diagram.scroller.transform);\n if (contains(position, paddedBounds, obj_1.size / 2)) {\n return obj_1.name;\n }\n }\n }\n }\n }\n //Panning\n if (canZoomPan(diagram) && !obj) {\n return 'Pan';\n }\n if (hasSelection(diagram)) {\n var element = diagram.selectedItems.wrapper;\n var selectorBnds = element.bounds;\n var paddedBounds = new Rect(selectorBnds.x, selectorBnds.y, selectorBnds.width, selectorBnds.height);\n var handle = diagram.selectedItems;\n if (hasSingleConnection(diagram)) {\n var conn_1 = diagram.selectedItems.connectors[0];\n var sourcePaddingValue = 10 / diagram.scrollSettings.currentZoom;\n var targetPaddingValue = 10 / diagram.scrollSettings.currentZoom;\n if (canShowCorner(handle.constraints, 'ResizeAll')) {\n if ((canShowCorner(handle.constraints, 'ConnectorSourceThumb'))\n && canDragSourceEnd(conn_1) && contains(position, conn_1.sourcePoint, sourcePaddingValue)) {\n return 'ConnectorSourceEnd';\n }\n if ((canShowCorner(handle.constraints, 'ConnectorTargetThumb'))\n && canDragTargetEnd(conn_1) && contains(position, conn_1.targetPoint, targetPaddingValue)) {\n return 'ConnectorTargetEnd';\n }\n var action = checkForConnectorSegment(conn_1, handle, position, diagram);\n if (action) {\n return action;\n }\n }\n }\n else {\n var ten = 10 / diagram.scroller.currentZoom;\n var matrix = identityMatrix();\n rotateMatrix(matrix, element.rotateAngle + element.parentTransform, element.offsetX, element.offsetY);\n //check for resizing tool\n var x = element.offsetX - element.pivot.x * element.actualSize.width;\n var y = element.offsetY - element.pivot.y * element.actualSize.height;\n var rotateThumb = { x: x + element.actualSize.width / 2, y: y - 30 / diagram.scroller.currentZoom };\n rotateThumb = transformPointByMatrix(matrix, rotateThumb);\n if ((canShowCorner(handle.constraints, 'Rotate')) && contains(position, rotateThumb, ten) &&\n (diagram.selectedItems.thumbsConstraints & ThumbsConstraints.Rotate)) {\n return 'Rotate';\n }\n paddedBounds.Inflate(ten);\n if (paddedBounds.containsPoint(position)) {\n var action = checkForResizeHandles(diagram, element, position, matrix, x, y);\n if (action) {\n return action;\n }\n }\n }\n }\n if (target instanceof PointPort && (!canZoomPan(diagram))) {\n var action = findPortToolToActivate(diagram, target);\n if (action !== 'None') {\n return action;\n }\n }\n if (obj !== null) {\n if (obj instanceof Node || obj instanceof Connector) {\n if (wrapper && wrapper.id) {\n var id = wrapper.id.split(obj.id)[1];\n if (id && id.match('^_icon')) {\n return 'LayoutAnimation';\n }\n }\n if (canMove(obj) && wrapper instanceof TextElement && wrapper.hyperlink.link) {\n return 'Hyperlink';\n }\n if (canMove(obj) && isSelected(diagram, obj, false)) {\n if ((obj instanceof Connector && !(contains(position, obj.sourcePoint, obj.hitPadding) ||\n contains(position, obj.targetPoint, obj.hitPadding))) ||\n !(obj instanceof Connector)) {\n return 'Drag';\n }\n }\n else if (obj && canZoomPan(diagram) && !defaultTool(diagram)) {\n return 'Pan';\n }\n else {\n return 'Select';\n }\n }\n else {\n return 'Select';\n }\n }\n return 'Select';\n}\nfunction checkForConnectorSegment(conn, handle, position, diagram) {\n var targetPaddingValue = 10 / diagram.scrollSettings.currentZoom;\n var sourcePaddingValue = 10 / diagram.scrollSettings.currentZoom;\n if (conn.type === 'Bezier') {\n for (var i = 0; i < conn.segments.length; i++) {\n var segment = (conn.segments)[i];\n if (contains(position, !Point.isEmptyPoint(segment.point1) ? segment.point1 : segment.bezierPoint1, sourcePaddingValue)) {\n return 'BezierSourceThumb';\n }\n if (contains(position, !Point.isEmptyPoint(segment.point2) ? segment.point2 : segment.bezierPoint2, targetPaddingValue)) {\n return 'BezierTargetThumb';\n }\n }\n }\n if (diagram.connectorEditingToolModule && canDragSegmentThumb(conn)) {\n if (conn.type === 'Straight' || conn.type === 'Bezier') {\n for (var i = 0; i < conn.segments.length; i++) {\n var segment = void 0;\n segment = (conn.segments)[i];\n if (contains(position, segment.point, 10)) {\n return 'SegmentEnd';\n }\n }\n }\n else {\n for (var i = 0; i < conn.segments.length; i++) {\n var segment = void 0;\n var segPoint = { x: 0, y: 0 };\n segment = (conn.segments)[i];\n for (var j = 0; j < segment.points.length - 1; j++) {\n var length_1 = Point.distancePoints(segment.points[j], segment.points[j + 1]);\n if (length_1 >= 50) {\n segPoint.x = ((segment.points[j].x + segment.points[j + 1].x) / 2);\n segPoint.y = ((segment.points[j].y + segment.points[j + 1].y) / 2);\n if (contains(position, segPoint, 30)) {\n return 'OrthoThumb';\n }\n }\n }\n }\n }\n }\n return null;\n}\n/** @private */\nexport function findPortToolToActivate(diagram, target, touchStart, touchMove) {\n if (canDrag(target, diagram) && (checkPortRestriction(target, PortVisibility.Hover)\n || (checkPortRestriction(target, PortVisibility.Visible)))) {\n if ((target.constraints & PortConstraints.Drag)) {\n return 'PortDrag';\n }\n }\n else if (canDraw(target, diagram) && (checkPortRestriction(target, PortVisibility.Hover)\n || (checkPortRestriction(target, PortVisibility.Visible)))) {\n if (target.constraints & PortConstraints.Draw) {\n diagram.drawingObject = {};\n var connector = { type: 'Orthogonal', sourcePortID: target.id };\n diagram.drawingObject = connector;\n diagram.tool |= DiagramTools.DrawOnce;\n diagram.currentDrawingObject = connector;\n return 'PortDraw';\n }\n }\n return 'None';\n}\nfunction checkForResizeHandles(diagram, element, position, matrix, x, y) {\n var node = diagram.selectedItems.nodes[0];\n var forty = 40 / diagram.scroller.currentZoom;\n var ten = 10 / diagram.scroller.currentZoom;\n var selectedItems = diagram.selectedItems;\n if (element.actualSize.width >= forty && element.actualSize.height >= forty) {\n if (canResizeCorner(selectedItems.constraints, 'ResizeSouthEast', selectedItems.thumbsConstraints) && contains(position, transformPointByMatrix(matrix, { x: x + element.actualSize.width, y: y + element.actualSize.height }), ten)) {\n return 'ResizeSouthEast';\n }\n if (canResizeCorner(selectedItems.constraints, 'ResizeSouthWest', selectedItems.thumbsConstraints) &&\n contains(position, transformPointByMatrix(matrix, { x: x, y: y + element.actualSize.height }), ten)) {\n return 'ResizeSouthWest';\n }\n if (canResizeCorner(selectedItems.constraints, 'ResizeNorthEast', selectedItems.thumbsConstraints) &&\n contains(position, transformPointByMatrix(matrix, { x: x + element.actualSize.width, y: y }), ten)) {\n return 'ResizeNorthEast';\n }\n if (canResizeCorner(selectedItems.constraints, 'ResizeNorthWest', selectedItems.thumbsConstraints) &&\n contains(position, transformPointByMatrix(matrix, { x: x, y: y }), ten)) {\n return 'ResizeNorthWest';\n }\n }\n if (canResizeCorner(selectedItems.constraints, 'ResizeEast', selectedItems.thumbsConstraints) && contains(position, transformPointByMatrix(matrix, { x: x + element.actualSize.width, y: y + element.actualSize.height / 2 }), ten)) {\n return 'ResizeEast';\n }\n if (canResizeCorner(selectedItems.constraints, 'ResizeWest', selectedItems.thumbsConstraints) &&\n contains(position, transformPointByMatrix(matrix, { x: x, y: y + element.actualSize.height / 2 }), ten)) {\n return 'ResizeWest';\n }\n if (canResizeCorner(selectedItems.constraints, 'ResizeSouth', selectedItems.thumbsConstraints) &&\n contains(position, transformPointByMatrix(matrix, { x: x + element.actualSize.width / 2, y: y + element.actualSize.height }), ten)) {\n return 'ResizeSouth';\n }\n if (canResizeCorner(selectedItems.constraints, 'ResizeNorth', selectedItems.thumbsConstraints) &&\n contains(position, transformPointByMatrix(matrix, { x: x + element.actualSize.width / 2, y: y }), ten)) {\n return 'ResizeNorth';\n }\n return null;\n}\n/** @private */\nexport function contains(mousePosition, corner, padding) {\n if (mousePosition.x >= corner.x - padding && mousePosition.x <= corner.x + padding) {\n if (mousePosition.y >= corner.y - padding && mousePosition.y <= corner.y + padding) {\n return true;\n }\n }\n return false;\n}\n/** @private */\nexport function hasSelection(diagram) {\n if (diagram.selectedItems.nodes.length > 0 || diagram.selectedItems.connectors.length > 0) {\n return true;\n }\n return false;\n}\n/** @private */\nexport function hasSingleConnection(diagram) {\n if (diagram.selectedItems.connectors.length === 1 && !diagram.selectedItems.nodes.length) {\n return true;\n }\n return false;\n}\n/** @private */\nexport function isSelected(diagram, element, firstLevel) {\n if (firstLevel === void 0) { firstLevel = true; }\n if (element instanceof Selector) {\n return true;\n }\n if (element instanceof Node) {\n while (element) {\n if (diagram.selectedItems.nodes.indexOf(element) !== -1) {\n return true;\n }\n if (!firstLevel) {\n element = diagram.nameTable[element.parentId];\n }\n else {\n break;\n }\n }\n }\n else if (element instanceof Connector) {\n if (diagram.selectedItems.connectors.indexOf(element) !== -1) {\n return true;\n }\n }\n return false;\n}\n/** @private */\nexport function getCursor(cursor, angle) {\n //to avoid angles less than 0 & angles greater than 360\n angle += 360;\n angle %= 360;\n if (cursor.indexOf('Resize') === -1) {\n return cursors[cursor];\n }\n else {\n var dir = cursors[cursor];\n if ((angle >= 0 && angle < 25) || (angle >= 160 && angle <= 205) || (angle >= 340 && angle <= 360)) {\n return dir;\n }\n else if ((angle >= 25 && angle <= 70) || (angle >= 205 && angle <= 250)) {\n if (dir === 'n-resize' || dir === 's-resize') {\n return 'ne-resize';\n }\n else if (dir === 'nw-resize' || dir === 'se-resize') {\n return 'n-resize';\n }\n else if (dir === 'e-resize' || dir === 'w-resize') {\n return 'nw-resize';\n }\n else {\n return 'e-resize';\n }\n }\n else if ((angle >= 70 && angle <= 115) || (angle >= 250 && angle <= 295)) {\n if (dir === 'n-resize' || dir === 's-resize') {\n return 'e-resize';\n }\n else if (dir === 'nw-resize' || dir === 'se-resize') {\n return 'ne-resize';\n }\n else if (dir === 'e-resize' || dir === 'w-resize') {\n return 'n-resize';\n }\n else {\n return 'nw-resize';\n }\n }\n else if ((angle >= 115 && angle <= 155) || (angle >= 295 && angle <= 340)) {\n if (dir === 'n-resize' || dir === 's-resize') {\n return 'nw-resize';\n }\n else if (dir === 'nw-resize' || dir === 'se-resize') {\n return 'e-resize';\n }\n else if (dir === 'e-resize' || dir === 'w-resize') {\n return 'ne-resize';\n }\n }\n else {\n return 'n-resize';\n }\n }\n return cursors[cursor];\n}\nvar cursors = {\n 'None': 'default',\n 'Rotate': 'crosshair',\n 'Select': 'default',\n 'Drag': 'move',\n 'ResizeWest': 'w-resize',\n 'ResizeEast': 'e-resize',\n 'ResizeSouth': 's-resize',\n 'ResizeNorth': 'n-resize',\n 'Draw': 'crosshair',\n 'PortDraw': 'crosshair',\n 'ResizeNorthEast': 'ne-resize',\n 'ResizeNorthWest': 'nw-resize',\n 'ResizeSouthEast': 'se-resize',\n 'ResizeSouthWest': 'sw-resize',\n 'ConnectorSourceEnd': 'move',\n 'ConnectorTargetEnd': 'move',\n 'BezierSourceThumb': 'move',\n 'BezierTargetThumb': 'move',\n 'OrthoThumb': 'move',\n 'SegmentEnd': 'move',\n 'Pan': 'pointer',\n 'Hyperlink': 'pointer',\n 'PortDrag': 'pointer'\n};\n","import { Node } from './../objects/node';\nimport { DiagramElement } from './../core/elements/diagram-element';\nimport { Canvas } from './../core/containers/canvas';\nimport { Container } from './../core/containers/container';\nimport { PathElement } from './../core/elements/path-element';\nimport { TextElement } from './../core/elements/text-element';\nimport { updateStyle } from './../../diagram/utility/diagram-util';\nimport { randomId, cloneObject } from './../utility/base-util';\nimport { Connector } from './../objects/connector';\nimport { BpmnAnnotation } from './../objects/node';\nimport { Transform } from '../enum/enum';\nimport { findAngle, getIntersectionPoints, getPortDirection } from '../utility/connector';\nimport { Point } from '../primitives/point';\nimport { NodeConstraints, ConnectorConstraints } from '../enum/enum';\nimport { Rect } from '../primitives/rect';\nimport { Size } from '../primitives/size';\nimport { getDiagramElement } from '../utility/dom-util';\n/**\n * BPMN Diagrams contains the BPMN functionalities\n */\nvar BpmnDiagrams = /** @class */ (function () {\n //End size region\n /**\n * Constructor for the BpmnDiagrams module\n * @private\n */\n function BpmnDiagrams() {\n //Code conversion for Bpmn Shapes\n //Start Region\n this.annotationObjects = {};\n //constructs the BpmnDiagrams module\n }\n Object.defineProperty(BpmnDiagrams.prototype, \"textAnnotationConnectors\", {\n get: function () {\n var connectors = [];\n for (var _i = 0, _a = Object.keys(this.annotationObjects); _i < _a.length; _i++) {\n var key = _a[_i];\n var entry = this.annotationObjects[key];\n for (var _b = 0, _c = Object.keys(entry); _b < _c.length; _b++) {\n var annotation = _c[_b];\n var key_1 = 'connector';\n connectors.push(entry[annotation][key_1]);\n }\n }\n return connectors;\n },\n enumerable: true,\n configurable: true\n });\n /** @private */\n BpmnDiagrams.prototype.getTextAnnotationConn = function (obj) {\n var connectors = [];\n if (obj.shape.type === 'Bpmn' && obj.shape.annotations.length !== 0) {\n var entry = this.annotationObjects[obj.id];\n for (var _i = 0, _a = Object.keys(entry); _i < _a.length; _i++) {\n var annotation = _a[_i];\n var key = 'connector';\n connectors.push(entry[annotation][key]);\n }\n }\n return connectors;\n };\n BpmnDiagrams.prototype.getSize = function (node, content) {\n var size = new Size(node.width, node.height);\n if (size.width === undefined || size.height === undefined) {\n if (!(content instanceof PathElement)) {\n size.width = size.width || 50;\n size.height = size.height || 50;\n }\n if (content.actualSize.width && content.actualSize.height) {\n return content.actualSize;\n }\n else {\n content.measure(new Size());\n size.width = size.width || content.desiredSize.width;\n size.height = size.height || content.desiredSize.height;\n }\n if (node.maxWidth !== undefined) {\n size.width = Math.min(size.width, node.maxWidth);\n }\n if (node.maxHeight !== undefined) {\n size.height = Math.min(size.height, node.maxHeight);\n }\n if (node.minWidth !== undefined) {\n size.width = Math.max(size.width, node.minWidth);\n }\n if (node.minHeight !== undefined) {\n size.height = Math.max(size.height, node.minHeight);\n }\n }\n return size;\n };\n /** @private */\n BpmnDiagrams.prototype.initBPMNContent = function (content, node, diagram) {\n var shape = node.shape;\n if (shape.shape === 'Event') {\n content = this.getBPMNEventShape(node, shape.event);\n }\n if (shape.shape === 'Gateway') {\n content = this.getBPMNGatewayShape(node);\n }\n if (shape.shape === 'DataObject') {\n content = this.getBPMNDataObjectShape(node);\n }\n if (shape.shape === 'Message' || shape.shape === 'DataSource') {\n content = this.getBPMNShapes(node);\n }\n // if (shape.shape === 'Group') {\n // content = this.getBPMNGroup(node, diagram);\n // content.style.strokeDashArray = '2 2 6 2';\n // content.horizontalAlignment = 'Center';\n // content.verticalAlignment = 'Center';\n // }\n if (shape.shape === 'Activity') {\n content = this.getBPMNActivityShape(node);\n }\n var annotations = {};\n if (shape.annotations.length > 0) {\n for (var i = 0; i < shape.annotations.length && shape.annotations[i].text; i++) {\n content.children.push(this.getBPMNTextAnnotation(node, diagram, shape.annotations[i], content));\n }\n }\n content.style.strokeDashArray = '2 2 6 2';\n return content;\n };\n /** @private */\n BpmnDiagrams.prototype.getBPMNShapes = function (node) {\n var bpmnShape = new PathElement();\n //set style\n this.setStyle(bpmnShape, node);\n if ((node.constraints & NodeConstraints.Shadow) !== 0) {\n bpmnShape.shadow = node.shadow;\n }\n var bpmnShapeData = getBpmnShapePathData(node.shape.shape);\n bpmnShape.data = bpmnShapeData;\n bpmnShape.id = node.id + '_' + node.shape.shape;\n if (node.width !== undefined && node.height !== undefined) {\n bpmnShape.width = node.width;\n bpmnShape.height = node.height;\n }\n return bpmnShape;\n };\n /** @private */\n // public getBPMNGroup(node: Node, diagram: Diagram): Container {\n // let group: Container = new Container();\n // group.id = node.id + '_group';\n // //group.style.strokeDashArray = '2 2 6 2';\n // if (!group.children) { group.children = []; }\n // let grp: BpmnGroup = ((node.shape as BpmnShape).group as BpmnGroup);\n // if ((node.shape as BpmnShape).group as BpmnGroup) {\n // for (let i: number = 0; i < grp.children.length; i++) {\n // let b: Node | Connector = diagram.nameTable[grp.children[i]];\n // group.children.push(b.wrapper);\n // }\n // }\n // return group;\n // }\n /** @private */\n BpmnDiagrams.prototype.getBPMNGatewayShape = function (node) {\n var gatewayshape = new Canvas();\n //childNode0\n var gatewayNode = new PathElement();\n gatewayNode.id = node.id + '_0_gateway';\n gatewayNode.offsetX = node.offsetX;\n gatewayNode.offsetY = node.offsetY;\n gatewayNode.data = 'M 40 20 L 20 40 L 0 20 L 20 0 L 40 20 Z';\n this.setStyle(gatewayNode, node);\n //childNode1\n var gatewayTypeNode = new PathElement();\n gatewayTypeNode.id = node.id + '_1_gatewayType';\n //set style - opacity\n gatewayTypeNode.style.opacity = node.style.opacity;\n gatewayTypeNode.horizontalAlignment = 'Center';\n gatewayTypeNode.verticalAlignment = 'Center';\n gatewayTypeNode.relativeMode = 'Object';\n var shapeType = node.shape.gateway;\n var gatewayTypeNodeShapeData;\n gatewayTypeNodeShapeData = getBpmnGatewayShapePathData(shapeType.type);\n if (shapeType.type === 'EventBased' || shapeType.type === 'ExclusiveEventBased' || shapeType.type === 'ParallelEventBased') {\n gatewayTypeNode.style.fill = 'white';\n }\n else {\n gatewayTypeNode.style.fill = 'black';\n }\n gatewayTypeNode.data = gatewayTypeNodeShapeData;\n // append child and set style\n gatewayshape.style.fill = 'transparent';\n gatewayshape.style.strokeColor = 'transparent';\n gatewayshape.style.strokeWidth = 0;\n gatewayshape.children = [gatewayNode, gatewayTypeNode];\n var size = this.getSize(node, gatewayNode);\n this.setSizeForBPMNGateway(node.shape.gateway, gatewayshape, size.width, size.height);\n return gatewayshape;\n };\n /** @private */\n BpmnDiagrams.prototype.getBPMNDataObjectShape = function (node) {\n var dataObjectshape = new Canvas();\n var shape = node.shape.dataObject;\n //childNode0\n var dataobjNode = new PathElement();\n dataobjNode.id = node.id + '_0_dataobj';\n dataobjNode.data = 'M29.904,5 L7.853,5 L7.853,45 L42.147,45 L42.147,17.242,L29.932,5,L29.932,17.242,L42.147,17.242';\n var size = this.getSize(node, dataobjNode);\n dataobjNode.width = size.width;\n dataobjNode.height = size.height;\n this.setStyle(dataobjNode, node);\n //childNode1\n var dataobjTypeNode = new PathElement();\n dataobjTypeNode.id = node.id + '_1_type';\n dataobjTypeNode.width = 25;\n dataobjTypeNode.height = 20;\n dataobjTypeNode.margin.left = 5;\n dataobjTypeNode.margin.top = 5;\n dataobjTypeNode.data = 'M 3 9.4 l 6 0 v 2.4 l 3.6 -4 L 9 4 v 2.5 H 3 V 9.4 Z';\n //set style - opacity\n dataobjTypeNode.style.opacity = node.style.opacity;\n //childNode2\n var dataobjCollectionNode = new PathElement();\n dataobjCollectionNode.id = node.id + '_2_collection';\n dataobjCollectionNode.width = 7.5;\n dataobjCollectionNode.height = 15;\n dataobjCollectionNode.style.fill = 'black';\n dataobjCollectionNode.visible = true;\n dataobjCollectionNode.horizontalAlignment = 'Center';\n dataobjCollectionNode.verticalAlignment = 'Bottom';\n dataobjCollectionNode.relativeMode = 'Object';\n //set style - opacity\n dataobjCollectionNode.style.opacity = node.style.opacity;\n dataobjCollectionNode.data = 'M 0 0 L 0.1 0 L 0.1 2 L 0 2 Z M 0.4 0 L 0.6 0 L 0.6 2 L0.4 2 Z M 0.9 0 L 1 0 L 1 2 L 0.9 2 Z';\n switch (shape.type) {\n case 'None':\n dataobjTypeNode.visible = false;\n break;\n case 'Input':\n dataobjTypeNode.style.fill = 'white';\n break;\n case 'Output':\n dataobjTypeNode.style.fill = 'black';\n break;\n }\n if (shape.collection === false) {\n dataobjCollectionNode.visible = false;\n }\n //append child and set style\n dataObjectshape.style.fill = 'transparent';\n dataObjectshape.style.strokeColor = 'transparent';\n dataObjectshape.style.strokeWidth = 0;\n dataObjectshape.children = [dataobjNode, dataobjTypeNode, dataobjCollectionNode];\n return dataObjectshape;\n };\n /** @private */\n BpmnDiagrams.prototype.getBPMNTaskShape = function (node) {\n var shape = node.shape.activity;\n var task = shape.task;\n var taskShapes = new Canvas();\n //childNode0\n var taskNode = new DiagramElement();\n taskNode.cornerRadius = 10;\n var size = this.getSize(node, taskNode);\n taskNode.id = node.id + '_0_task';\n taskNode.width = size.width;\n taskNode.height = size.height;\n this.setStyle(taskNode, node);\n // if task as call \n if ((task.call !== undefined) && task.call === true) {\n taskNode.style.strokeWidth = 4;\n }\n taskShapes.width = size.width;\n taskShapes.height = size.height;\n var childCount = this.getTaskChildCount(node);\n var x;\n var childSpace = childCount * 12;\n var area = size.width / 2 - childSpace;\n if (childCount === 1) {\n x = area + 8;\n }\n else {\n x = area + (childCount - 1) * 8;\n }\n //childNode1\n var taskTypeNode = new PathElement();\n var taskTypeNodeData;\n if (task.type === 'Receive' || task.type === 'Send') {\n taskTypeNode.width = 18;\n taskTypeNode.height = 16;\n }\n else {\n taskTypeNode.width = 20;\n taskTypeNode.height = 20;\n }\n taskTypeNode.id = node.id + '_1_tasktType';\n taskTypeNode.margin.left = 5;\n taskTypeNode.margin.top = 5;\n taskTypeNodeData = getBpmnTaskShapePathData(task.type);\n taskTypeNode.data = taskTypeNodeData;\n taskTypeNode.style.fill = 'transparent';\n taskTypeNode.style.opacity = node.style.opacity;\n // append child and set style\n taskShapes.style.fill = 'transparent';\n taskShapes.style.strokeColor = 'transparent';\n taskShapes.style.strokeWidth = 0;\n taskShapes.children = [taskNode, taskTypeNode];\n // if task as loop\n var loopType = task.loop;\n var taskLoopNode = new PathElement();\n var childNode2data;\n childNode2data = getBpmnLoopShapePathData(loopType);\n taskLoopNode.data = childNode2data;\n taskLoopNode.style.fill = 'black';\n if (loopType !== 'None') {\n taskLoopNode.visible = true;\n }\n else {\n taskLoopNode.visible = false;\n }\n if (childCount === 1) {\n x = area + 9;\n }\n taskLoopNode.margin.left = x;\n if (taskLoopNode.visible === true) {\n x += 12 + 8;\n }\n taskLoopNode.width = 12;\n taskLoopNode.height = 12;\n taskLoopNode.margin.bottom = 5;\n taskLoopNode.id = node.id + '_2_loop';\n taskLoopNode.horizontalAlignment = 'Left';\n taskLoopNode.verticalAlignment = 'Bottom';\n taskLoopNode.setOffsetWithRespectToBounds(0, 1, 'Fraction');\n taskLoopNode.relativeMode = 'Point';\n taskLoopNode.style.fill = 'transparent';\n taskTypeNode.style.opacity = node.style.opacity;\n taskShapes.children.push(taskLoopNode);\n //if task as compensation\n var taskCompNode = new PathElement();\n taskCompNode = this.getBPMNCompensationShape(node, taskCompNode);\n if (task.compensation === true) {\n taskCompNode.visible = true;\n }\n else {\n taskCompNode.visible = false;\n }\n if (childCount === 1) {\n x = area + 9;\n }\n taskCompNode.margin.left = x - 3;\n x += 12 + 6;\n taskShapes.children.push(taskCompNode);\n return taskShapes;\n };\n /** @private */\n BpmnDiagrams.prototype.getBPMNEventShape = function (node, subEvent, sub, id) {\n var eventshape = new Canvas();\n var event;\n var trigger;\n var width;\n var height;\n id = id || node.id;\n var pathdata = 'M164.1884,84.6909000000001C156.2414,84.6909000000001,149.7764,78.2259000000001,149.7764,70.2769000000001' +\n 'C149.7764,62.3279000000001,156.2414,55.8629000000001,164.1884,55.8629000000001C172.1354,55.8629000000001,178.6024,' +\n '62.3279000000001,178.6024,70.2769000000001C178.6024,78.2259000000001,172.1354,84.6909000000001,164.1884,84.6909000000001';\n var shapeEvent = node.shape.event;\n if (node.shape.shape === 'Event') {\n event = shapeEvent.event;\n trigger = shapeEvent.trigger;\n }\n width = subEvent.width;\n height = subEvent.height;\n if (sub) {\n width = width || 20;\n height = height || 20;\n }\n else if (subEvent.width === undefined || subEvent.height === undefined) {\n var pathElement = new PathElement();\n pathElement.data = pathdata;\n var size = this.getSize(node, pathElement);\n width = size.width;\n height = size.height;\n }\n var shapeActivity = node.shape.activity;\n if (node.shape.shape === 'Activity') {\n var subProcess = shapeActivity.subProcess;\n event = subEvent.event;\n trigger = subEvent.trigger;\n }\n //childNode0\n var innerEvtNode = new PathElement();\n innerEvtNode.data = pathdata;\n innerEvtNode.id = id + '_0_event';\n innerEvtNode.width = width;\n innerEvtNode.height = height;\n innerEvtNode.horizontalAlignment = 'Center';\n innerEvtNode.verticalAlignment = 'Center';\n innerEvtNode.relativeMode = 'Object';\n this.setStyle(innerEvtNode, node);\n //childNode1\n var outerEvtNode = new PathElement();\n outerEvtNode.data = pathdata;\n outerEvtNode.id = id + '_1_event';\n outerEvtNode.horizontalAlignment = 'Center';\n outerEvtNode.verticalAlignment = 'Center';\n outerEvtNode.relativeMode = 'Object';\n // set style opacity & strokeColor\n outerEvtNode.style.strokeColor = node.style.strokeColor;\n outerEvtNode.style.opacity = node.style.opacity;\n //childNode2\n var triggerNode = new PathElement();\n var triggerNodeData = getBpmnTriggerShapePathData(trigger);\n triggerNode.data = triggerNodeData;\n triggerNode.id = id + '_2_trigger';\n triggerNode.horizontalAlignment = 'Center';\n triggerNode.verticalAlignment = 'Center';\n triggerNode.relativeMode = 'Object';\n // set style opacity & strokeColor\n triggerNode.style.strokeColor = node.style.strokeColor;\n triggerNode.style.opacity = node.style.opacity;\n switch (event) {\n case 'Start':\n outerEvtNode.visible = false;\n break;\n case 'NonInterruptingStart':\n innerEvtNode.style.strokeDashArray = '2 3';\n outerEvtNode.visible = false;\n break;\n case 'Intermediate':\n innerEvtNode.style.fill = 'white';\n innerEvtNode.style.gradient = null;\n break;\n case 'NonInterruptingIntermediate':\n innerEvtNode.style.fill = 'white';\n innerEvtNode.style.gradient = null;\n innerEvtNode.style.strokeDashArray = '2 3';\n outerEvtNode.style.strokeDashArray = '2 3';\n break;\n case 'ThrowingIntermediate':\n case 'End':\n innerEvtNode.style.fill = event !== 'End' ? 'white' : 'black';\n innerEvtNode.style.gradient = null;\n triggerNode.style.fill = 'black';\n triggerNode.style.strokeColor = node.style.fill;\n break;\n }\n //append child and set style\n eventshape.style.fill = 'transparent';\n eventshape.style.strokeColor = 'transparent';\n eventshape.style.strokeWidth = 0;\n eventshape.children = [innerEvtNode, outerEvtNode, triggerNode];\n this.setSizeForBPMNEvents(shapeEvent, eventshape, width, height);\n return eventshape;\n };\n BpmnDiagrams.prototype.setEventVisibility = function (node, canvas) {\n var event = node.shape.event.event;\n var innerEvtNode = canvas[0];\n var outerEvtNode = canvas[1];\n var triggerNode = canvas[2];\n switch (event) {\n case 'Start':\n outerEvtNode.visible = false;\n break;\n case 'NonInterruptingStart':\n innerEvtNode.style.strokeDashArray = '2 3';\n outerEvtNode.visible = false;\n break;\n }\n };\n BpmnDiagrams.prototype.setSubProcessVisibility = function (node) {\n if (node.shape.activity.subProcess) {\n var subProcess = node.shape.activity.subProcess;\n var eventLength = subProcess.events.length;\n var index = (node.shape.activity.subProcess.type === 'Transaction') ? 2 : 0;\n var elementWrapper = node.wrapper.children[0].children[0];\n if (subProcess.adhoc === false) {\n elementWrapper.children[3 + index + eventLength].visible = false;\n }\n if (subProcess.compensation === false) {\n elementWrapper.children[4 + index + eventLength].visible = false;\n }\n if (eventLength > 0) {\n for (var i = 0; i < eventLength; i++) {\n this.setEventVisibility(node, elementWrapper.children[2 + i].children);\n }\n }\n }\n };\n /** @private */\n BpmnDiagrams.prototype.getBPMNSubProcessShape = function (node) {\n var subProcessShapes = new Canvas();\n var loopType;\n var events;\n var event;\n var subprocessAdhoc = new PathElement();\n var subProcessEventsShapes = new Canvas();\n var subProcessLoopShapes = new PathElement();\n var shape = node.shape.activity;\n var subProcess = shape.subProcess;\n var subChildCount = this.getSubprocessChildCount(node);\n var x;\n var subprocessNode = new DiagramElement();\n subprocessNode.id = node.id + '_0_Subprocess';\n subprocessNode.style.fill = 'transparent';\n subprocessNode.cornerRadius = 10;\n var size = this.getSize(node, subprocessNode);\n subprocessNode.width = size.width;\n subprocessNode.height = size.height;\n subProcessShapes.children = [subprocessNode];\n if (shape.subProcess.type === 'Transaction') {\n this.getBPMNSubProcessTransaction(node, node.shape, subProcessShapes);\n }\n var iconSpace = 4;\n var subChildSpace = 12;\n var childSpace = subChildCount * subChildSpace;\n var area = size.width / 2;\n if (subChildCount === 1) {\n x = area - (subChildSpace * 0.5);\n }\n else {\n x = area - (childSpace / 2) - ((subChildCount - 1) * iconSpace) / 2;\n }\n //set style\n this.setStyle(subprocessNode, node);\n if ((node.constraints & NodeConstraints.Shadow) !== 0) {\n subProcessShapes.shadow = node.shadow;\n }\n var collapsedShape = new PathElement();\n collapsedShape.id = node.id + '_0_collapsed';\n collapsedShape.width = 12;\n collapsedShape.height = 12;\n collapsedShape.style.fill = 'black';\n collapsedShape.margin.bottom = 5;\n collapsedShape.horizontalAlignment = 'Left';\n collapsedShape.verticalAlignment = 'Bottom';\n collapsedShape.setOffsetWithRespectToBounds(0, 1, 'Fraction');\n collapsedShape.relativeMode = 'Point';\n collapsedShape.data = getBpmnShapePathData('collapsedShape');\n collapsedShape.margin.left = x;\n if (subProcess.collapsed === true && !subProcess.processes) {\n collapsedShape.visible = true;\n }\n else {\n collapsedShape.visible = false;\n }\n if (collapsedShape.visible === true) {\n x += 12 + 6;\n }\n subProcessShapes.children.push(collapsedShape);\n if (subProcess.type === 'Event') {\n subprocessNode.style.strokeWidth = 1;\n subprocessNode.style.strokeDashArray = '2 2';\n events = subProcess.events;\n for (var i = 0; i < events.length; i++) {\n event = events[i];\n this.getBPMNSubEvent(event, node, subProcessShapes);\n }\n }\n // set loop for subprocess\n subProcessLoopShapes = this.getBPMNSubProcessLoopShape(node);\n if (subChildCount === 1) {\n x = area + 8;\n }\n subProcessLoopShapes.margin.left = x;\n if (subProcessLoopShapes.visible === true) {\n x += subChildSpace + iconSpace;\n }\n subProcessShapes.children.push(subProcessLoopShapes);\n // set boundary for subprocess\n subprocessNode.id = node.id + '_boundary';\n if (subProcess.boundary === 'Default') {\n subprocessNode.style.strokeWidth = 1;\n subprocessNode.style.strokeDashArray = '1 0';\n }\n if (subProcess.boundary === 'Call') {\n subprocessNode.style.strokeWidth = 4;\n subprocessNode.style.strokeDashArray = '1 0';\n }\n if (subProcess.boundary === 'Event') {\n subprocessNode.style.strokeWidth = 1;\n subprocessNode.style.strokeDashArray = '2 2';\n }\n //set adhoc for subprocess\n subprocessAdhoc = this.getBPMNAdhocShape(node, subprocessAdhoc, subProcess);\n if (subChildCount === 1) {\n x = area + 8;\n }\n subprocessAdhoc.margin.left = x;\n if (subprocessAdhoc.visible === true) {\n x += subChildSpace + iconSpace;\n }\n subProcessShapes.children.push(subprocessAdhoc);\n //set compensation for subprocess\n var subprocessComp = new PathElement();\n if (subProcess.compensation === true) {\n subprocessComp.visible = true;\n }\n else {\n subprocessComp.visible = false;\n }\n subprocessComp = this.getBPMNCompensationShape(node, subprocessComp);\n if (subChildCount === 1) {\n x = area + 8;\n }\n subprocessComp.margin.left = x;\n if (subprocessComp.visible === true) {\n x += subChildSpace + iconSpace;\n }\n subProcessShapes.children.push(subprocessComp);\n //set style for subprocess\n subProcessShapes.style.strokeColor = 'transparent';\n subProcessShapes.style.strokeWidth = 0;\n subProcessShapes.style.fill = 'transparent';\n return subProcessShapes;\n };\n BpmnDiagrams.prototype.getBPMNSubEvent = function (event, node, container, id) {\n container.children = container.children || [];\n var eventContainer;\n eventContainer = this.getBPMNEventShape(node, event, true, id);\n this.getBPMNSubprocessEvent(node, eventContainer, event);\n eventContainer.id = id || (node.id + '_subprocessEvents');\n eventContainer.width = event.width || 20;\n eventContainer.height = event.height || 20;\n // set offset for subevents\n eventContainer.setOffsetWithRespectToBounds(event.offset.x, event.offset.y, 'Fraction');\n eventContainer.relativeMode = 'Point';\n //set margin for subevents\n eventContainer.margin = event.margin;\n //set alignment for subevents\n eventContainer.horizontalAlignment = event.horizontalAlignment;\n eventContainer.verticalAlignment = event.verticalAlignment;\n // set style for subevent\n eventContainer.style.fill = 'transparent';\n eventContainer.style.strokeColor = 'transparent';\n eventContainer.style.strokeWidth = 0;\n container.children.push(eventContainer);\n };\n BpmnDiagrams.prototype.getBPMNSubProcessTransaction = function (node, shape, container) {\n var shapeWidth = container.children[0].width;\n var shapeHeight = container.children[0].height;\n var innerRect = new DiagramElement();\n innerRect.margin = { left: 3, right: 0, top: 3, bottom: 0 };\n innerRect.id = node.id + '_0_Subprocess_innnerRect';\n innerRect.cornerRadius = 10;\n innerRect.width = shapeWidth - 6;\n innerRect.height = shapeHeight - 6;\n container.children.push(innerRect);\n var transactionEvents = new Canvas();\n transactionEvents.id = node.id + '_transaction_events';\n var transaction = shape.activity.subProcess.transaction;\n this.getBPMNSubEvent(transaction.success, node, transactionEvents, node.id + '_success');\n this.getBPMNSubEvent(transaction.cancel, node, transactionEvents, node.id + '_cancel');\n this.getBPMNSubEvent(transaction.failure, node, transactionEvents, node.id + '_failure');\n this.updateDiagramContainerVisibility(transactionEvents.children[0], transaction.success.visible);\n this.updateDiagramContainerVisibility(transactionEvents.children[1], transaction.cancel.visible);\n this.updateDiagramContainerVisibility(transactionEvents.children[2], transaction.failure.visible);\n transactionEvents.float = true;\n transactionEvents.width = shapeWidth;\n transactionEvents.height = shapeHeight;\n transactionEvents.style.fill = transactionEvents.style.strokeColor = 'transparent';\n container.children.push(transactionEvents);\n };\n /** @private */\n BpmnDiagrams.prototype.getBPMNSubProcessLoopShape = function (node) {\n var shape = node.shape.activity;\n var loopType;\n var subprocessLoop = new PathElement();\n var subprocessLoopData;\n var subProcess = shape.subProcess;\n loopType = subProcess.loop;\n subprocessLoopData = getBpmnLoopShapePathData(loopType);\n if (loopType !== 'None') {\n subprocessLoop.visible = true;\n }\n else {\n subprocessLoop.visible = false;\n }\n subprocessLoop.id = node.id + '_loop';\n subprocessLoop.data = subprocessLoopData;\n subprocessLoop.style.fill = 'black';\n subprocessLoop.width = 12;\n subprocessLoop.height = 12;\n subprocessLoop.horizontalAlignment = 'Left';\n subprocessLoop.verticalAlignment = 'Bottom';\n subprocessLoop.setOffsetWithRespectToBounds(0, 1, 'Fraction');\n subprocessLoop.relativeMode = 'Point';\n subprocessLoop.margin.bottom = 5;\n subprocessLoop.style.fill = 'transparent';\n return subprocessLoop;\n };\n /** @private */\n BpmnDiagrams.prototype.drag = function (obj, tx, ty, diagram) {\n var node = diagram.nameTable[(obj).processId];\n if (obj.margin.top + ty >= 0) {\n diagram.nodePropertyChange(obj, {}, { margin: { top: obj.margin.top + ty } });\n }\n if (obj.margin.left + tx >= 0) {\n diagram.nodePropertyChange(obj, {}, { margin: { left: obj.margin.left + tx } });\n }\n var diffX = 0;\n var diffY = 0;\n var bound = this.getChildrenBound(node, obj.id, diagram);\n this.updateSubProcessess(bound, obj, diagram);\n node.wrapper.measure(new Size(undefined, undefined));\n node.wrapper.arrange(node.wrapper.desiredSize);\n diagram.refreshCanvasLayers();\n diagram.updateSelector();\n this.updateDocks(obj, diagram);\n };\n /** @private */\n BpmnDiagrams.prototype.dropBPMNchild = function (target, source, diagram) {\n if (source && source.shape.type === 'Bpmn') {\n var subProcess = diagram.nameTable[target.id].shape.activity.subProcess;\n if (diagram.currentSymbol && target.shape.type === 'Bpmn' && !subProcess.collapsed) {\n source.processId = target.id;\n return;\n }\n subProcess.processes = subProcess.processes || [];\n if (subProcess.processes && subProcess.processes.indexOf(source.id) === -1 && !subProcess.collapsed) {\n subProcess.processes.push(source.id);\n var redoElement = cloneObject(source);\n var sources = diagram.nameTable[source.id].wrapper;\n var targetWrapper = diagram.nameTable[target.id].wrapper;\n sources.margin.top = (sources.offsetY - (sources.actualSize.height / 2))\n - (target.offsetY - (target.actualSize.height / 2));\n sources.margin.left = (sources.offsetX - (sources.actualSize.width / 2))\n - (target.offsetX - (target.actualSize.width / 2));\n sources.margin.top = (sources.margin.top < 0) ? 0 : sources.margin.top;\n sources.margin.left = (sources.margin.left < 0) ? 0 : sources.margin.left;\n diagram.nameTable[source.id].processId = target.id;\n targetWrapper.children.push(diagram.nameTable[source.id].wrapper);\n var bound = this.getChildrenBound(target, source.id, diagram);\n this.updateSubProcessess(bound, source, diagram);\n targetWrapper.measure(new Size(undefined, undefined));\n targetWrapper.arrange(targetWrapper.desiredSize);\n diagram.refreshCanvasLayers();\n diagram.updateSelector();\n var edges = [];\n edges = edges.concat(source.outEdges, source.inEdges);\n for (var i = edges.length - 1; i >= 0; i--) {\n diagram.remove(diagram.nameTable[edges[i]]);\n }\n var obj = cloneObject(source);\n var entry = {\n type: 'PositionChanged', undoObject: { nodes: [redoElement] },\n redoObject: { nodes: [obj] }, category: 'Internal'\n };\n diagram.addHistoryEntry(entry);\n if (diagram.mode === 'SVG') {\n if (source.zIndex < target.zIndex) {\n diagram.updateProcesses(source);\n }\n }\n this.updateDocks(source, diagram);\n }\n }\n };\n /** @private */\n BpmnDiagrams.prototype.updateDocks = function (obj, diagram) {\n if (obj.shape.type === 'Bpmn' && obj.shape.activity.subProcess.processes &&\n !obj.shape.activity.subProcess.collapsed) {\n var processTable = obj.shape.activity.subProcess.processes;\n for (var _i = 0, processTable_1 = processTable; _i < processTable_1.length; _i++) {\n var i = processTable_1[_i];\n var actualObject = diagram.nameTable[i];\n if (actualObject) {\n diagram.updateConnectorEdges(actualObject);\n actualObject.wrapper.measure(new Size(actualObject.wrapper.width, actualObject.wrapper.height));\n actualObject.wrapper.arrange(actualObject.wrapper.desiredSize);\n if (actualObject.shape.activity.subProcess.processes\n && actualObject.shape.activity.subProcess.processes.length) {\n this.updateDocks(actualObject, diagram);\n }\n }\n }\n }\n };\n /** @private */\n BpmnDiagrams.prototype.removeBpmnProcesses = function (currentObj, diagram) {\n var element = diagram.nameTable[currentObj.processId];\n if (currentObj.shape.type === 'Bpmn' && currentObj.shape.activity.subProcess.processes &&\n currentObj.shape.activity.subProcess.processes.length > 0) {\n var processes = currentObj.shape.activity.subProcess.processes;\n for (var j = processes.length - 1; j >= 0; j--) {\n diagram.remove(diagram.nameTable[processes[j]]);\n }\n }\n if (element) {\n diagram.removeDependentConnector(currentObj);\n var processes = element.shape.activity.subProcess.processes;\n this.removeChildFromBPMN(element.wrapper, currentObj.id);\n var processIndex = processes.indexOf(currentObj.id);\n processes.splice(processIndex, 1);\n }\n };\n /** @private */\n BpmnDiagrams.prototype.removeChildFromBPMN = function (wrapper, name) {\n for (var _i = 0, _a = wrapper.children; _i < _a.length; _i++) {\n var i = _a[_i];\n if (i.id === name) {\n wrapper.children.splice(wrapper.children.indexOf(i), 1);\n }\n else if (i.children) {\n this.removeChildFromBPMN(i, name);\n }\n }\n };\n /** @private */\n BpmnDiagrams.prototype.removeProcess = function (id, diagram) {\n var node = diagram.nameTable[id];\n if (node) {\n var parent_1 = diagram.nameTable[node.processId];\n if (parent_1 && parent_1.shape.type === 'Bpmn') {\n var processes = parent_1.shape.activity.subProcess.processes;\n diagram.removeDependentConnector(node);\n this.removeChildFromBPMN(parent_1.wrapper, id);\n var processIndex = processes.indexOf(id);\n processes.splice(processIndex, 1);\n node.processId = '';\n diagram.refreshDiagramLayer();\n diagram.updateSelector();\n }\n }\n };\n /** @private */\n BpmnDiagrams.prototype.addProcess = function (process, parentId, diagram) {\n var id;\n process.id = process.id || randomId();\n id = process.id;\n var node = diagram.nameTable[id];\n if (!node) {\n diagram.add(process);\n }\n process.processId = parentId;\n var parentNode = diagram.nameTable[parentId];\n var subProcess = parentNode.shape.activity.subProcess;\n if (node && parentNode && parentNode.shape.type === 'Bpmn' && node.shape.type === 'Bpmn' &&\n subProcess.processes && !subProcess.collapsed) {\n node.processId = parentId;\n var processes = parentNode.shape.activity.subProcess.processes;\n if (processes.indexOf(id) < 0) {\n processes.push(id);\n }\n parentNode.wrapper.children.push(node.wrapper);\n parentNode.wrapper.measure(new Size());\n parentNode.wrapper.arrange(parentNode.wrapper.desiredSize);\n diagram.bpmnModule.updateDocks(parentNode, diagram);\n diagram.refreshDiagramLayer();\n if (diagram.mode === 'SVG' && (node.shape && node.shape.activity\n && !node.shape.activity.subProcess.processes)) {\n var child = getDiagramElement(parentId + '_groupElement');\n child.appendChild(getDiagramElement(process.id + '_groupElement'));\n }\n }\n };\n /** @private */\n BpmnDiagrams.prototype.getChildrenBound = function (node, excludeChild, diagram) {\n var processes = node.shape.activity.subProcess.processes;\n var bound;\n if (processes && processes.length) {\n for (var _i = 0, processes_1 = processes; _i < processes_1.length; _i++) {\n var i = processes_1[_i];\n if (excludeChild !== i) {\n if (!bound) {\n bound = diagram.nameTable[i].wrapper.bounds;\n }\n else {\n bound = diagram.nameTable[i].wrapper.bounds.uniteRect(bound);\n }\n }\n }\n }\n return bound || diagram.nameTable[excludeChild].wrapper.bounds;\n };\n /** @private */\n BpmnDiagrams.prototype.updateSubProcessess = function (bound, obj, diagram) {\n var diffX;\n var diffY;\n var node = diagram.nameTable[obj.processId];\n var right;\n var bottom;\n var pivot = { x: 0.5, y: 0.5 };\n if ((node.wrapper.bounds.left + obj.margin.left + obj.width) > (node.wrapper.bounds.right)) {\n right = true;\n }\n if ((node.wrapper.bounds.top + obj.margin.top + obj.height) > (node.wrapper.bounds.bottom)) {\n bottom = true;\n }\n if (right) {\n pivot.x = 0;\n }\n if (bottom) {\n pivot.y = 0;\n }\n var actualSize = node.wrapper.actualSize;\n if (right) {\n diffX = (obj.wrapper.margin.left + obj.wrapper.bounds.width) / actualSize.width;\n }\n if (bottom) {\n diffY = (obj.wrapper.margin.top + obj.wrapper.bounds.height) / actualSize.height;\n }\n if (diffX > 0 || diffY > 0) {\n diagram.commandHandler.scale(diagram.nameTable[obj.processId], diffX || 1, diffY || 1, pivot);\n }\n };\n /** @private */\n BpmnDiagrams.prototype.getBPMNCompensationShape = function (node, compensationNode) {\n compensationNode.id = node.id + '_0_compensation';\n compensationNode.width = 12;\n compensationNode.height = 12;\n compensationNode.margin.bottom = 5;\n compensationNode.style.fill = 'transparent';\n compensationNode.horizontalAlignment = 'Left';\n compensationNode.verticalAlignment = 'Bottom';\n compensationNode.relativeMode = 'Object';\n compensationNode.data = 'M 22.462 18.754 l -6.79 3.92 l 6.79 3.92 V 22.89 l 6.415 3.705 v -7.841 l -6.415 3.705 V 18.754 Z' +\n ' M 28.331 19.701 v 5.947 l -5.149 -2.973 L 28.331 19.701 Z M 21.916 25.647 l -5.15 -2.973 l 5.15 -2.973 V 25.647 Z' +\n ' M 22.275 12.674 c -5.513 0 -9.999 4.486 -9.999 9.999 c 0 5.514 4.486 10.001 9.999 10.001' +\n ' c 5.514 0 9.999 -4.486 9.999 -10.001 C 32.274 17.16 27.789 12.674 22.275 12.674 Z M 22.275 32.127 ' +\n ' c -5.212 0 -9.453 -4.241 -9.453 -9.454 c 0 -5.212 4.241 -9.453 9.453 -9.453 c 5.212 0 9.453 4.241 9.453 9.453' +\n ' C 31.728 27.887 27.487 32.127 22.275 32.127 Z';\n return compensationNode;\n };\n /** @private */\n BpmnDiagrams.prototype.getBPMNActivityShape = function (node) {\n var eventshape = new Canvas();\n var content;\n var shape = node.shape.activity;\n var task = shape.activity;\n var subProcess = shape.subProcess;\n var activityType = shape.activity;\n if (task === 'Task') {\n content = this.getBPMNTaskShape(node);\n }\n if (task === 'SubProcess' && subProcess) {\n content = this.getBPMNSubProcessShape(node);\n }\n eventshape.children = [content];\n eventshape.style.fill = 'transparent';\n eventshape.style.strokeColor = 'transparent';\n eventshape.style.strokeWidth = 0;\n return eventshape;\n };\n /** @private */\n BpmnDiagrams.prototype.getBPMNSubprocessEvent = function (node, subProcessEventsShapes, events) {\n var annotations;\n var ports;\n if (events.annotations.length !== 0) {\n for (var i = 0; i < events.annotations.length; i++) {\n var annot = events.annotations[i];\n annotations = node.initAnnotationWrapper(annot);\n annotations.width = events.width;\n annotations.height = events.height;\n subProcessEventsShapes.children.push(annotations);\n }\n }\n if (events.ports.length !== 0) {\n for (var i = 0; i < events.ports.length; i++) {\n var port = events.ports[i];\n ports = node.initPortWrapper(port);\n subProcessEventsShapes.children.push(ports);\n }\n }\n };\n /** @private */\n BpmnDiagrams.prototype.getBPMNAdhocShape = function (node, adhocNode, subProcess) {\n adhocNode.id = node.id + '_0_adhoc';\n adhocNode.width = 12;\n adhocNode.height = 8;\n adhocNode.style.fill = 'black';\n adhocNode.margin.bottom = 5;\n adhocNode.horizontalAlignment = 'Left';\n adhocNode.verticalAlignment = 'Bottom';\n adhocNode.relativeMode = 'Object';\n adhocNode.data = 'M 49.832 76.811 v -2.906 c 0 0 0.466 -1.469 1.931 -1.5 c 1.465 -0.031 2.331 1.219 2.897 1.688 ' +\n 's 1.06 0.75 1.526 0.75 c 0.466 0 1.548 -0.521 1.682 -1.208 s 0.083 3.083 0.083 3.083 s -0.76 0.969 -1.859 0.969 ' +\n 'c -1.066 0 -1.865 -0.625 -2.464 -1.438 s -1.359 -0.998 -2.064 -0.906 C 50.598 75.467 49.832 76.811 49.832 76.811 Z';\n if (subProcess && subProcess.adhoc === true) {\n adhocNode.visible = true;\n }\n else {\n adhocNode.visible = false;\n }\n return adhocNode;\n };\n /** @private */\n BpmnDiagrams.prototype.getBPMNTextAnnotation = function (node, diagram, annotation, content) {\n annotation.id = annotation.id || randomId();\n var annotationContainer = new Canvas();\n var annotationPath = new PathElement();\n var textElement = new TextElement();\n var margin = 10;\n annotationPath.id = node.id + '_' + annotation.id + '_path';\n annotationPath.width = annotation.width;\n annotationPath.height = annotation.height;\n annotationPath.relativeMode = 'Object';\n textElement.id = node.id + '_' + annotation.id + '_text';\n textElement.content = annotation.text;\n var style = node.style;\n textElement.style = {\n fontSize: style.fontSize, italic: style.italic, gradient: null, opacity: style.opacity,\n bold: style.bold, textWrapping: style.textWrapping, color: style.color, fill: 'white',\n fontFamily: style.fontFamily, whiteSpace: style.whiteSpace, textOverflow: 'Wrap',\n strokeColor: 'none', strokeWidth: 0,\n strokeDashArray: style.strokeDashArray, textAlign: style.textAlign, textDecoration: style.textDecoration\n };\n textElement.horizontalAlignment = 'Center';\n textElement.verticalAlignment = 'Center';\n textElement.relativeMode = 'Object';\n textElement.margin = { left: 5, right: 5, top: 5, bottom: 5 };\n annotationContainer.offsetX = node.offsetX + annotation.length *\n Math.cos(annotation.angle * (Math.PI / 180));\n annotationContainer.offsetY = node.offsetY + annotation.length *\n Math.sin(annotation.angle * (Math.PI / 180));\n annotationContainer.float = true;\n annotationContainer.transform = Transform.Self;\n annotationContainer.id = node.id + '_textannotation_' + annotation.id;\n annotationContainer.style.strokeColor = 'transparent';\n annotationContainer.margin = { left: margin, right: margin, top: margin, bottom: margin };\n annotationContainer.relativeMode = 'Object';\n annotationContainer.rotateAngle = 0;\n annotationContainer.children = [annotationPath, textElement];\n var annotationNode = new Node(node.shape, 'annotations', { id: annotationContainer.id, shape: { type: 'Bpmn', shape: 'TextAnnotation' } }, true);\n annotationNode.ports = [\n {\n id: annotationPath.id + '_port', shape: 'Square',\n offset: { x: 0, y: 0.5 },\n }\n ];\n annotationNode.offsetX = annotationContainer.offsetX;\n annotationNode.offsetY = annotationContainer.offsetY;\n annotationNode.wrapper = annotationContainer;\n annotationContainer.children.push(annotationNode.initPortWrapper(annotationNode.ports[0]));\n var bounds = new Rect(0, 0, 0, 0);\n if (node.width !== undefined && node.height !== undefined) {\n bounds = new Rect(node.offsetX - node.width / 2, node.offsetY - node.height / 2, node.width, node.height);\n }\n this.setAnnotationPath(bounds, annotationContainer, { x: annotationNode.offsetX, y: annotationNode.offsetY }, annotationNode, annotation.length, annotation.angle);\n var connector = {\n id: node.id + '_' + annotation.id + '_connector',\n constraints: ConnectorConstraints.Default & ~ConnectorConstraints.DragTargetEnd,\n sourceID: node.id, targetID: annotationContainer.id,\n targetDecorator: { shape: 'None' }\n };\n var annotationConnector = new Connector(node.shape, 'annotations', connector, true);\n annotationConnector.targetPortID = annotationNode.ports[0].id;\n annotationConnector.init(diagram);\n annotationConnector.wrapper.float = false;\n annotationConnector.wrapper.transform = Transform.Self;\n content.children.push(annotationConnector.wrapper);\n annotationConnector.zIndex = 10000;\n var entry = this.annotationObjects[node.id];\n if (!entry) {\n entry = {};\n }\n if (!entry[annotation.id]) {\n entry[annotation.id] = {};\n }\n var nodeKey = 'node';\n var connKey = 'connector';\n entry[annotation.id][nodeKey] = annotationNode;\n entry[annotation.id][connKey] = annotationConnector;\n this.annotationObjects[node.id] = entry;\n diagram.initObject(annotationNode, undefined, false);\n annotationNode.zIndex = 10000;\n return annotationContainer;\n };\n /** @private */\n BpmnDiagrams.prototype.getTextAnnotationWrapper = function (node, id) {\n if (node && node.shape.type === 'Bpmn') {\n var shape = node.shape;\n if (shape.shape === 'TextAnnotation') {\n return node.wrapper.children[1];\n }\n else if (this.annotationObjects[node.id] && this.annotationObjects[node.id][id]) {\n var annotationNode = this.annotationObjects[node.id][id].node;\n return this.getTextAnnotationWrapper(annotationNode, id);\n }\n }\n return null;\n };\n /** @private */\n BpmnDiagrams.prototype.addAnnotation = function (node, annotation, diagram) {\n var bpmnShapeContent = node.wrapper.children[0];\n var shape = node.shape;\n var annotationObj = new BpmnAnnotation(shape, 'annotations', annotation, true);\n shape.annotations.push(annotationObj);\n bpmnShapeContent.children.push(this.getBPMNTextAnnotation(node, diagram, annotation, bpmnShapeContent));\n node.wrapper.measure(new Size());\n node.wrapper.arrange(node.wrapper.desiredSize);\n return this.annotationObjects[node.id][annotation.id].connector;\n };\n BpmnDiagrams.prototype.clearAnnotations = function (obj, diagram) {\n var bpmnShape = obj.shape;\n if (bpmnShape.annotations.length) {\n for (var _i = 0, _a = bpmnShape.annotations; _i < _a.length; _i++) {\n var annotation = _a[_i];\n this.removeAnnotationObjects(obj, annotation, diagram);\n }\n }\n delete this.annotationObjects[obj.id];\n };\n /** @private */\n BpmnDiagrams.prototype.checkAndRemoveAnnotations = function (node, diagram) {\n //remove connector path\n //remove annotation node wrapper\n //remove from a quad\n if (node.shape.type === 'Bpmn') {\n if (node.shape.shape === 'TextAnnotation') {\n var id = node.id.split('_');\n var annotationId = id[id.length - 1];\n var nodeId = id[id.length - 3];\n var parentNode = diagram.nameTable[nodeId];\n var bpmnShape = parentNode.shape;\n for (var _i = 0, _a = bpmnShape.annotations; _i < _a.length; _i++) {\n var annotation = _a[_i];\n if (annotation.id === annotationId) {\n var index = bpmnShape.annotations.indexOf(annotation);\n if (index !== -1) {\n diagram.removeDependentConnector(node);\n this.removeAnnotationObjects(parentNode, annotation, diagram);\n return true;\n }\n }\n }\n }\n else if (node.shape.annotations && node.shape.annotations.length) {\n this.clearAnnotations(node, diagram);\n }\n }\n return false;\n };\n BpmnDiagrams.prototype.removeAnnotationObjects = function (parentNode, annotation, diagram) {\n var bpmnShape = parentNode.shape;\n var index = bpmnShape.annotations.indexOf(annotation);\n if (index !== -1) {\n bpmnShape.annotations.splice(index, 1);\n var entry = this.annotationObjects[parentNode.id];\n if (entry && entry[annotation.id]) {\n var annotationNode = entry[annotation.id].node;\n var annotationConnector = entry[annotation.id].connector;\n diagram.removeElements(annotationNode);\n diagram.removeElements(annotationConnector);\n var nodeContent = parentNode.wrapper.children[0];\n index = nodeContent.children.indexOf(annotationNode.wrapper);\n nodeContent.children.splice(index, 1);\n index = nodeContent.children.indexOf(annotationConnector.wrapper);\n nodeContent.children.splice(index, 1);\n diagram.removeFromAQuad(annotationNode);\n diagram.removeFromAQuad(annotationConnector);\n delete diagram.nameTable[annotationNode.id];\n delete diagram.nameTable[annotationConnector.id];\n delete entry[annotation.id];\n }\n }\n };\n BpmnDiagrams.prototype.setAnnotationPath = function (parentBounds, wrapper, position, node, length, angle) {\n var rotateAngle = this.getAnnotationPathAngle(position, parentBounds);\n var data = '';\n var pathElement = wrapper.children[0];\n var portElement = wrapper.children[2];\n var textElement = wrapper.children[1];\n pathElement.horizontalAlignment = 'Stretch';\n pathElement.verticalAlignment = 'Stretch';\n textElement.margin.left = textElement.margin.right = 5;\n textElement.margin.top = textElement.margin.bottom = 5;\n var point;\n var segment;\n if (rotateAngle === 0) {\n data = 'M10,20 L0,20 L0,0 L10,0';\n pathElement.width = 10;\n pathElement.horizontalAlignment = 'Left';\n portElement.setOffsetWithRespectToBounds(0, 0.5, 'Fraction');\n textElement.margin.top = textElement.margin.bottom = 10;\n point = parentBounds.middleRight;\n segment = {\n X1: parentBounds.right, Y1: parentBounds.top,\n X2: parentBounds.right, Y2: parentBounds.bottom\n };\n }\n else if (rotateAngle === 180) {\n data = 'M0,0 L10,0 L10,20 L0,20';\n pathElement.width = 10;\n pathElement.horizontalAlignment = 'Right';\n portElement.setOffsetWithRespectToBounds(1, 0.5, 'Fraction');\n textElement.margin.top = textElement.margin.bottom = 10;\n point = parentBounds.middleLeft;\n segment = {\n X1: parentBounds.left, Y1: parentBounds.top,\n X2: parentBounds.left, Y2: parentBounds.bottom\n };\n }\n else if (rotateAngle === 90) {\n data = 'M20,10 L20,0 L0,0 L0,10';\n pathElement.height = 10;\n pathElement.verticalAlignment = 'Top';\n portElement.setOffsetWithRespectToBounds(0.5, 0, 'Fraction');\n textElement.margin.left = textElement.margin.right = 10;\n point = parentBounds.bottomCenter;\n segment = {\n X1: parentBounds.right, Y1: parentBounds.bottom,\n X2: parentBounds.left, Y2: parentBounds.bottom\n };\n }\n else {\n data = 'M0,0 L0,10 L20,10 L20,0';\n pathElement.height = 10;\n pathElement.verticalAlignment = 'Bottom';\n portElement.setOffsetWithRespectToBounds(0.5, 1, 'Fraction');\n textElement.margin.left = textElement.margin.right = 10;\n point = parentBounds.topCenter;\n segment = {\n X1: parentBounds.right, Y1: parentBounds.top,\n X2: parentBounds.left, Y2: parentBounds.top,\n };\n }\n var center = parentBounds.center;\n var endPoint = Point.transform(position, angle, Math.max(parentBounds.width, parentBounds.height));\n point = getIntersectionPoints(segment, [center, endPoint], false, center);\n pathElement.data = data;\n if (length !== undefined && angle !== undefined) {\n point = Point.transform(point, angle, length);\n wrapper.offsetX = node.offsetX = point.x;\n wrapper.offsetY = node.offsetY = point.y;\n }\n };\n BpmnDiagrams.prototype.isBpmnTextAnnotation = function (activeLabel, diagram) {\n if (this.annotationObjects) {\n var parentNodeId = activeLabel.parentId;\n var annotationId = activeLabel.id;\n var parentNode = diagram.nameTable[parentNodeId];\n if (parentNode && parentNode.shape.type === 'Bpmn' && this.annotationObjects[parentNodeId] &&\n this.annotationObjects[parentNodeId][annotationId]) {\n return parentNode;\n }\n return null;\n }\n return null;\n };\n /** @private */\n BpmnDiagrams.prototype.updateTextAnnotationContent = function (parentNode, activeLabel, text, diagram) {\n var parentNodeId = activeLabel.parentId;\n var annotationId = activeLabel.id;\n if (this.annotationObjects[parentNodeId] && this.annotationObjects[parentNodeId][annotationId]) {\n for (var _i = 0, _a = parentNode.shape.annotations; _i < _a.length; _i++) {\n var annotation = _a[_i];\n if (annotation.id === annotationId) {\n annotation.text = text;\n var wrapper = this.annotationObjects[parentNodeId][annotationId].node.wrapper.children[1];\n wrapper.content = text;\n wrapper.visible = true;\n parentNode.wrapper.measure(new Size());\n parentNode.wrapper.arrange(parentNode.wrapper.desiredSize);\n }\n }\n }\n };\n BpmnDiagrams.prototype.updateQuad = function (actualObject, diagram) {\n var annotation = actualObject.shape.annotations;\n var annotationNode;\n if (annotation && annotation.length > 0) {\n for (var i = 0; i < annotation.length; i++) {\n annotationNode = this.annotationObjects[actualObject.id][annotation[i].id].node;\n diagram.updateQuad(annotationNode);\n }\n }\n };\n /** @private */\n BpmnDiagrams.prototype.updateTextAnnotationProp = function (actualObject, oldObject, diagram) {\n if (actualObject.shape.type === 'Bpmn') {\n var annotation = actualObject.shape.annotations;\n if (annotation && annotation.length > 0) {\n for (var i = 0; i < actualObject.wrapper.children[0].children.length; i++) {\n for (var j = 0; j < annotation.length; j++) {\n var annotationId = actualObject.wrapper.children[0].children[i].id.split('_');\n var id = annotationId[annotationId.length - 1];\n if (id === annotation[j].id) {\n var annotationNode = this.annotationObjects[actualObject.id][annotation[j].id].node;\n var connector = this.annotationObjects[actualObject.id][annotation[j].id].connector;\n var direction = getPortDirection(connector.targetPoint, actualObject.wrapper.bounds, actualObject.wrapper.bounds, false);\n var position = connector.sourcePoint;\n position = {\n x: connector.sourcePoint.x + actualObject.offsetX - (oldObject.offsetX),\n y: connector.sourcePoint.y + actualObject.offsetY - (oldObject.offsetY)\n };\n position = Point.transform(position, annotation[j].angle, annotation[j].length);\n actualObject.wrapper.children[0].children[i].offsetX =\n annotationNode.offsetX = position.x;\n actualObject.wrapper.children[0].children[i].offsetY =\n annotationNode.offsetY = position.y;\n diagram.updateQuad(annotationNode);\n }\n }\n }\n }\n }\n };\n /** @private */\n BpmnDiagrams.prototype.findInteractableObject = function (obj, diagram) {\n if (obj.targetID) {\n var targetNode = diagram.nameTable[obj.targetID];\n if (targetNode.shape.type === 'Bpmn' && targetNode.shape.shape === 'TextAnnotation') {\n return targetNode;\n }\n }\n return obj;\n };\n /** @private */\n BpmnDiagrams.prototype.canAdd = function (obj) {\n if (obj.shape && obj.shape.type === 'Bpmn' && obj.shape.shape === 'TextAnnotation') {\n return false;\n }\n return true;\n };\n /** @private */\n BpmnDiagrams.prototype.getSubprocessChildCount = function (node) {\n var count = 0;\n var shape = node.shape.activity;\n var loopType;\n var subProcess = shape.subProcess;\n loopType = subProcess.loop;\n if (loopType !== undefined && loopType !== 'None') {\n count++;\n }\n if ((subProcess.compensation !== undefined) &&\n subProcess.compensation === true) {\n count++;\n }\n if ((subProcess.collapsed !== undefined) &&\n subProcess.collapsed === true) {\n count++;\n }\n if ((subProcess.adhoc !== undefined) &&\n subProcess.adhoc === true) {\n count++;\n }\n return count;\n };\n /** @private */\n BpmnDiagrams.prototype.getTaskChildCount = function (node) {\n var count = 0;\n var shape = node.shape.activity;\n var task = shape.task;\n var loopType;\n if ((task.compensation !== undefined) &&\n task.compensation === true) {\n count++;\n }\n if ((task.loop !== undefined) &&\n task.loop !== 'None') {\n count++;\n }\n return count;\n };\n /** @private */\n BpmnDiagrams.prototype.setStyle = function (child, node) {\n //set style\n child.style.fill = node.style.fill;\n child.style.strokeColor = node.style.strokeColor;\n child.style.strokeWidth = node.style.strokeWidth;\n child.style.strokeDashArray = node.style.strokeDashArray;\n child.style.opacity = node.style.opacity;\n child.style.gradient = node.style.gradient;\n if ((node.constraints & NodeConstraints.Shadow) !== 0) {\n child.shadow = node.shadow;\n }\n };\n //End code conversion region\n //Update BPMN Shapes on NodePropertyChange\n //Start region\n /** @private */\n BpmnDiagrams.prototype.updateBPMN = function (changedProp, oldObject, actualObject, diagram) {\n var newShape = changedProp.shape || {};\n var elementWrapper = actualObject.wrapper.children[0];\n var actualShape = actualObject.shape.shape;\n var sizeChanged = changedProp.width !== undefined || changedProp.height !== undefined;\n if (newShape.shape === 'Gateway' && newShape.gateway) {\n actualObject.wrapper.children[0] = this.getBPMNGatewayShape(actualObject);\n }\n else if (newShape.shape === 'DataObject' && newShape.dataObject) {\n actualObject.wrapper.children[0] = this.getBPMNDataObjectShape(actualObject);\n }\n else if (newShape.shape === 'Activity' && newShape.activity) {\n actualObject.wrapper.children[0] = this.getBPMNActivityShape(actualObject);\n }\n else if (newShape.shape === 'Event' && newShape.event) {\n var shapeEvent = newShape.event;\n actualObject.wrapper.children[0] = this.getBPMNEventShape(actualObject, shapeEvent);\n }\n else if (newShape.shape === 'Message' || newShape.shape === 'DataSource') {\n actualObject.wrapper.children[0] = this.getBPMNShapes(actualObject);\n //} \n // else if (newShape.shape === 'Group') {\n // actualObject.wrapper.children[0] = this.getBPMNGroup(actualObject, diagram);\n }\n else if (newShape.gateway !== undefined || (actualShape === 'Gateway' && sizeChanged)) {\n this.updateBPMNGateway(actualObject, changedProp);\n }\n else if (newShape.dataObject !== undefined || (actualShape === 'DataObject' && sizeChanged)) {\n this.updateBPMNDataObject(actualObject, changedProp, oldObject);\n }\n else if (newShape.activity !== undefined || (actualShape === 'Activity' && sizeChanged)) {\n this.updateBPMNActivity(actualObject, changedProp, oldObject, diagram);\n }\n else if (newShape.event !== undefined || (actualShape === 'Event' && sizeChanged)) {\n this.updateBPMNEvent(actualObject, changedProp, oldObject);\n }\n if (changedProp.style) {\n updateStyle(changedProp.style, elementWrapper instanceof Container ? (actualObject.shape.shape === 'Activity') ?\n elementWrapper.children[0].children[0] :\n elementWrapper.children[0] : elementWrapper);\n }\n };\n /** @private */\n BpmnDiagrams.prototype.updateBPMNGateway = function (node, changedProp) {\n var bpmnShape = node.shape;\n var elementWrapper = node.wrapper.children[0];\n if (bpmnShape) {\n updateStyle(node.style, elementWrapper.children[0]);\n var bpmnshapeGatewaydata = getBpmnGatewayShapePathData(bpmnShape.gateway.type);\n elementWrapper.children[1].data = bpmnshapeGatewaydata;\n }\n if (changedProp.width !== undefined || changedProp.height !== undefined) {\n this.setSizeForBPMNGateway(node.shape.gateway, elementWrapper, changedProp.width || node.width, changedProp.height || node.height);\n }\n };\n /** @private */\n BpmnDiagrams.prototype.updateBPMNDataObject = function (node, newObject, oldObject) {\n var bpmnShape = newObject.shape;\n var elementWrapper = node.wrapper.children[0];\n if (bpmnShape) {\n var elementWrapperChild1 = elementWrapper.children[1];\n var elementWrapperChild2 = elementWrapper.children[2];\n if (newObject.style !== undefined) {\n updateStyle(newObject.style, elementWrapper.children[0]);\n elementWrapperChild1.style.opacity = node.style.opacity;\n elementWrapperChild2.style.opacity = node.style.opacity;\n }\n if (bpmnShape.dataObject) {\n switch (bpmnShape.dataObject.type) {\n case 'None':\n elementWrapperChild1.visible = false;\n break;\n case 'Input':\n elementWrapperChild1.style.fill = 'white';\n break;\n case 'Output':\n elementWrapperChild1.style.fill = 'black';\n break;\n }\n if (oldObject.shape.dataObject.type === 'None') {\n elementWrapperChild1.visible = true;\n }\n if (newObject.shape.dataObject.collection !== undefined) {\n elementWrapperChild2.visible = bpmnShape.dataObject.collection;\n }\n }\n }\n if (newObject.width !== undefined || newObject.height !== undefined) {\n this.setSizeForBPMNDataObjects(node.shape.dataObject, elementWrapper, newObject.width || node.width, newObject.height || node.height);\n }\n };\n /** @private */\n BpmnDiagrams.prototype.getEvent = function (node, oldObject, event, child0, child1, child2) {\n switch (event) {\n case 'Start':\n child1.visible = false;\n child0.style.strokeDashArray = '';\n child2.style.fill = 'white';\n child2.style.strokeColor = 'black';\n child0.style.fill = 'white';\n break;\n case 'NonInterruptingStart':\n child0.style.strokeDashArray = '2 3';\n child2.style.fill = 'white';\n child0.style.fill = 'white';\n child2.style.strokeColor = 'black';\n child1.visible = false;\n break;\n case 'Intermediate':\n child0.style.strokeDashArray = '';\n child0.style.fill = 'white';\n child1.style.strokeDashArray = '';\n child0.style.gradient = null;\n child2.style.fill = 'white';\n child2.style.strokeColor = 'black';\n this.updateEventVisibility(oldObject, child1);\n break;\n case 'NonInterruptingIntermediate':\n child0.style.fill = 'white';\n child0.style.gradient = null;\n child2.style.fill = 'white';\n child2.style.strokeColor = 'black';\n child0.style.strokeDashArray = '2 3';\n child1.style.strokeDashArray = '2 3';\n this.updateEventVisibility(oldObject, child1);\n break;\n case 'ThrowingIntermediate':\n case 'End':\n child0.style.fill = event !== 'End' ? 'white' : 'black';\n child0.style.strokeDashArray = '';\n child1.style.strokeDashArray = '';\n child0.style.gradient = null;\n child2.style.fill = 'black';\n this.updateEventVisibility(oldObject, child1);\n child2.style.strokeColor = node.style.fill;\n break;\n }\n };\n /** @private */\n BpmnDiagrams.prototype.updateEventVisibility = function (oldObject, child1) {\n if (oldObject.shape.activity && oldObject.shape.activity.subProcess &&\n oldObject.shape.activity.subProcess.events &&\n oldObject.shape.activity.subProcess.events[0] !== undefined &&\n oldObject.shape.activity.subProcess.events[0].event !== undefined) {\n if (oldObject.shape.activity.subProcess.events[0].event === 'NonInterruptingStart' ||\n oldObject.shape.activity.subProcess.events[0].event === 'Start') {\n child1.visible = true;\n }\n }\n else if (oldObject.shape.event !== undefined) {\n if (oldObject.shape.event.event === 'NonInterruptingStart' ||\n oldObject.shape.event.event === 'Start') {\n child1.visible = true;\n }\n }\n };\n /** @private */\n BpmnDiagrams.prototype.updateBPMNEvent = function (node, newObject, oldObject) {\n var bpmnShape = newObject.shape;\n var elementWrapper = node.wrapper.children[0];\n if (bpmnShape) {\n var elementWrapperChild0 = elementWrapper.children[0];\n var elementWrapperChild1 = elementWrapper.children[1];\n var elementWrapperChild2 = elementWrapper.children[2];\n var event_1;\n var trigger = void 0;\n if (newObject.style !== undefined) {\n updateStyle(node.style, elementWrapper.children[0]);\n if (newObject.style.opacity !== undefined || newObject.style.strokeColor !== undefined) {\n elementWrapperChild1.style.opacity = node.style.opacity;\n elementWrapperChild1.style.strokeColor = node.style.strokeColor;\n }\n }\n event_1 = bpmnShape.event.event;\n trigger = bpmnShape.event.trigger;\n if (event_1 !== undefined) {\n this.getEvent(node, oldObject, event_1, elementWrapperChild0, elementWrapperChild1, elementWrapperChild2);\n }\n if (trigger !== undefined) {\n this.updateBPMNEventTrigger(node, newObject);\n }\n }\n if (newObject.width !== undefined || newObject.height !== undefined) {\n this.setSizeForBPMNEvents(node.shape.event, elementWrapper, newObject.width || node.width, newObject.height || node.height);\n }\n };\n /** @private */\n BpmnDiagrams.prototype.updateBPMNEventTrigger = function (node, newObject) {\n var bpmnShape = node.shape;\n var elementWrapper = node.wrapper.children[0].children[2];\n if (newObject.style &&\n (newObject.style.strokeColor !== undefined || newObject.style.opacity !== undefined)) {\n updateStyle(node.style, elementWrapper);\n }\n var bpmnshapeTriggerdata = getBpmnTriggerShapePathData(bpmnShape.event.trigger);\n if (bpmnShape.event.trigger) {\n elementWrapper.height = elementWrapper.height * 0.8;\n }\n elementWrapper.data = bpmnshapeTriggerdata;\n };\n /** @private */\n BpmnDiagrams.prototype.updateBPMNActivity = function (node, newObject, oldObject, diagram) {\n var bpmnShape = newObject.shape;\n var elementWrapper = node.wrapper.children[0];\n var size = this.getSize(node, elementWrapper.children[0].children[0]);\n if (bpmnShape) {\n var oldProp = oldObject.shape.activity.activity;\n var actualObjectProp = node.shape.activity.activity;\n if ((oldProp === 'SubProcess' || oldProp === 'Task') && (actualObjectProp === 'SubProcess' || actualObjectProp === 'Task')) {\n diagram.removeElements(node);\n node.wrapper.children[0] = this.getBPMNActivityShape(node);\n }\n else {\n if (actualObjectProp === 'Task' && bpmnShape.activity.task !== undefined) {\n this.updateBPMNActivityTask(node, newObject);\n var subChildCount = this.getTaskChildCount(node);\n var x = void 0;\n var childSpace = subChildCount * 12;\n var area = size.width / 2 - childSpace;\n if (subChildCount === 1) {\n x = area + 8;\n }\n else {\n x = area + (subChildCount - 1) * 8;\n }\n if (bpmnShape.activity.task.loop !== undefined) {\n this.updateBPMNActivityTaskLoop(node, newObject, x, subChildCount, area, 2);\n }\n }\n if (actualObjectProp === 'SubProcess' && bpmnShape.activity.subProcess !== undefined) {\n this.updateBPMNActivitySubProcess(node, newObject, oldObject, diagram);\n }\n }\n this.setSizeForBPMNActivity(node.shape.activity, elementWrapper, newObject.width || size.width, newObject.height || size.height, node);\n }\n if (newObject.width !== undefined || newObject.height !== undefined) {\n this.setSizeForBPMNActivity(node.shape.activity, elementWrapper, newObject.width || size.width, newObject.height || size.height, node);\n }\n };\n /** @private */\n BpmnDiagrams.prototype.updateBPMNActivityTask = function (node, newObject) {\n var bpmnShape = newObject.shape;\n var elementWrapper = node.wrapper.children[0].children[0];\n var task = bpmnShape.activity.task;\n if (task.type === 'Receive' || task.type === 'Send') {\n elementWrapper.children[1].height = 14;\n }\n else {\n elementWrapper.children[1].height = 20;\n }\n if (task.type !== undefined) {\n var bpmnshapeTaskdata = getBpmnTaskShapePathData(task.type);\n elementWrapper.children[1].data = bpmnshapeTaskdata;\n }\n if (bpmnShape.activity.task.call !== undefined) {\n if (bpmnShape.activity.task.call !== false) {\n elementWrapper.children[0].style.strokeWidth = 4;\n }\n else {\n elementWrapper.children[0].style.strokeWidth = 1;\n }\n }\n if (bpmnShape.activity.task.compensation !== undefined) {\n if (bpmnShape.activity.task.compensation === true) {\n elementWrapper.children[3].visible = true;\n }\n else {\n elementWrapper.children[3].visible = false;\n }\n }\n };\n /** @private */\n BpmnDiagrams.prototype.updateBPMNActivityTaskLoop = function (node, newObject, x, subChildCount, area, start) {\n var bpmnShape = newObject.shape;\n var elementWrapper = node.wrapper.children[0].children[0];\n var activity = bpmnShape.activity;\n var loop;\n var index = 0;\n var bpmnshapeLoopdata;\n if (activity.subProcess !== undefined) {\n var subProcess = activity.subProcess;\n index = (activity.subProcess.type === 'Transaction') ? 2 : 0;\n loop = subProcess.loop;\n bpmnshapeLoopdata = getBpmnLoopShapePathData(loop);\n elementWrapper.children[2 + index].data = bpmnshapeLoopdata;\n elementWrapper.children[2 + index].visible = (loop === 'None') ? false : true;\n }\n else if (activity.task !== undefined && activity.task.loop !== undefined) {\n bpmnshapeLoopdata = getBpmnLoopShapePathData(activity.task.loop);\n elementWrapper.children[2].data = bpmnshapeLoopdata;\n elementWrapper.children[2].visible = (activity.task.loop === 'None') ? false : true;\n }\n this.updateChildMargin(elementWrapper, subChildCount, area, x, start + index);\n };\n /** @private */\n BpmnDiagrams.prototype.updateChildMargin = function (elementWrapper, subChildCount, area, x, start) {\n if (subChildCount === 1) {\n for (var i = start; i < elementWrapper.children.length; i++) {\n if (i !== 2 && elementWrapper.children[i].visible === true) {\n elementWrapper.children[i].margin.left = x;\n x = area + 8;\n }\n }\n }\n else {\n x = area + (subChildCount - 1) * 8;\n for (var i = start; i < elementWrapper.children.length; i++) {\n if (i !== 2 && elementWrapper.children[i].visible === true) {\n elementWrapper.children[i].margin.left = x;\n x += 12 + 8;\n }\n }\n }\n };\n /** @private */\n BpmnDiagrams.prototype.updateBPMNActivitySubProcess = function (node, newObject, oldObject, diagram) {\n var bpmnShape = newObject.shape;\n var elementWrapper = node.wrapper.children[0];\n var size = this.getSize(node, elementWrapper.children[0].children[0]);\n var subProcess = bpmnShape.activity.subProcess;\n var subChildCount = this.getSubprocessChildCount(node);\n var x;\n var childSpace = subChildCount * 12;\n var area = size.width / 2 - childSpace;\n if (subChildCount === 1) {\n x = area + 8;\n }\n else {\n x = area + (subChildCount - 1) * 8;\n }\n updateStyle(node.style, elementWrapper.children[0].children[0]);\n if (subProcess.events !== undefined) {\n this.updateBPMNSubProcessEvent(node, newObject, oldObject, diagram);\n }\n if (subProcess.adhoc !== undefined) {\n this.updateBPMNSubProcessAdhoc(node, oldObject, subProcess, x, subChildCount, area);\n }\n if (subProcess.boundary !== undefined) {\n this.updateBPMNSubProcessBoundary(node, subProcess);\n }\n if (subProcess.collapsed !== undefined) {\n this.updateBPMNSubProcessCollapsed(node, oldObject, subProcess, x, subChildCount, area, diagram);\n }\n if (subProcess.compensation !== undefined) {\n this.updateBPMNSubProcessCompensation(node, oldObject, subProcess, x, subChildCount, area);\n }\n if (subProcess.loop !== undefined) {\n this.updateBPMNSubProcessLoop(node, oldObject, subProcess, x, subChildCount, area);\n }\n if (subProcess.transaction !== undefined) {\n this.updateBPMNSubProcessTransaction(node, newObject, oldObject, diagram);\n }\n };\n /** @private */\n BpmnDiagrams.prototype.updateBPMNSubProcessEvent = function (node, newObject, oldObject, diagram) {\n var bpmnShape = newObject.shape;\n var elementWrapper = node.wrapper.children[0];\n var nodeContent = elementWrapper.children[0];\n var index;\n var j = 0;\n var elementWrapperChildLen = elementWrapper.children[0].children.length;\n var subProcess = bpmnShape.activity.subProcess;\n var events;\n var start = 2;\n for (var _i = 0, _a = Object.keys(subProcess.events); _i < _a.length; _i++) {\n var key = _a[_i];\n var eventIndex = Number(key);\n var eventWrapper = nodeContent.children[eventIndex + start];\n var actualEvent = node.shape.activity.subProcess.events[eventIndex];\n this.updateBPMNSubEvent(node, subProcess.events[eventIndex], actualEvent, eventWrapper, newObject, oldObject, diagram);\n }\n };\n BpmnDiagrams.prototype.updateBPMNSubEvent = function (node, newEvent, actualEvent, eventWrapper, newObject, oldObject, diagram) {\n var elementWrapper = node.wrapper.children[0];\n var bpmnShape = newObject.shape;\n var child0 = eventWrapper.children[0];\n var child1 = eventWrapper.children[1];\n var child2 = eventWrapper.children[2];\n var eventType;\n var trigger;\n if (newObject.style) {\n if (newObject.style.strokeColor !== undefined || newObject.style.opacity !== undefined) {\n elementWrapper.children[0].children[1].style.strokeColor = newObject.style.strokeColor;\n elementWrapper.children[0].children[1].style.opacity = newObject.style.opacity;\n }\n }\n if (bpmnShape.activity.subProcess !== undefined) {\n eventType = newEvent.event;\n trigger = newEvent.trigger;\n }\n if (eventType !== undefined) {\n this.getEvent(newObject, oldObject, eventType, child0, child1, child2);\n }\n if (trigger !== undefined) {\n if (newObject.style) {\n updateStyle(newObject.style, elementWrapper.children[0]);\n }\n var bpmnshapeTriggerdata = getBpmnTriggerShapePathData(trigger);\n eventWrapper.children[2].data = bpmnshapeTriggerdata;\n }\n if (newEvent.height !== undefined || newEvent.width !== undefined) {\n this.getEventSize(newEvent, eventWrapper);\n }\n if (newEvent.id !== undefined) {\n eventWrapper.id = newEvent.id;\n }\n if (newEvent.margin !== undefined) {\n eventWrapper.margin = newEvent.margin;\n }\n if (newEvent.horizontalAlignment !== undefined) {\n eventWrapper.horizontalAlignment = newEvent.horizontalAlignment;\n }\n if (newEvent.verticalAlignment !== undefined) {\n eventWrapper.verticalAlignment = newEvent.verticalAlignment;\n }\n if (newEvent.offset !== undefined) {\n eventWrapper.setOffsetWithRespectToBounds(actualEvent.offset.x, actualEvent.offset.y, 'Fraction');\n eventWrapper.relativeMode = 'Point';\n }\n if (newEvent.annotations !== undefined) {\n var annotations = void 0;\n var annotation = elementWrapper.children[0].children[2];\n if (eventWrapper.children[3] && eventWrapper.children.length > 3) {\n annotations = eventWrapper.children[3];\n diagram.updateAnnotation(newEvent.annotations[0], annotations, annotation);\n }\n }\n if (newEvent.ports !== undefined) {\n var ports = void 0;\n var port = elementWrapper.children[0].children[2];\n if (eventWrapper.children[4] && eventWrapper.children.length > 4) {\n ports = eventWrapper.children[4];\n diagram.updatePort(newEvent.ports[0], ports, port);\n }\n }\n if (newEvent.visible !== undefined) {\n this.updateDiagramContainerVisibility(eventWrapper, newEvent.visible);\n }\n };\n BpmnDiagrams.prototype.updateBPMNSubProcessTransaction = function (node, newObject, oldObject, diagram) {\n var transaction = newObject.shape.activity.subProcess.transaction;\n var eventContainer = node.wrapper.children[0].children[0].children[2];\n var actualEvent;\n if (transaction.success !== undefined) {\n actualEvent = node.shape.activity.subProcess.transaction.success;\n this.updateBPMNSubEvent(node, transaction.success, actualEvent, eventContainer.children[0], newObject, oldObject, diagram);\n }\n if (transaction.cancel !== undefined) {\n actualEvent = node.shape.activity.subProcess.transaction.cancel;\n this.updateBPMNSubEvent(node, transaction.cancel, actualEvent, eventContainer.children[1], newObject, oldObject, diagram);\n }\n if (transaction.failure !== undefined) {\n actualEvent = node.shape.activity.subProcess.transaction.failure;\n this.updateBPMNSubEvent(node, transaction.failure, actualEvent, eventContainer.children[2], newObject, oldObject, diagram);\n }\n for (var _i = 0, _a = node.outEdges; _i < _a.length; _i++) {\n var edge = _a[_i];\n var connector = diagram.nameTable[edge];\n switch (connector.sourcePortID) {\n case 'success':\n if (transaction.success && transaction.success.visible !== undefined) {\n diagram.connectorPropertyChange(connector, {}, { sourcePortID: 'success' });\n }\n break;\n case 'cancel':\n if (transaction.cancel && transaction.cancel.visible !== undefined) {\n diagram.connectorPropertyChange(connector, {}, { sourcePortID: 'cancel' });\n }\n break;\n case 'failure':\n if (transaction.failure && transaction.failure.visible !== undefined) {\n diagram.connectorPropertyChange(connector, {}, { sourcePortID: 'failure' });\n }\n break;\n }\n }\n };\n /** @private */\n BpmnDiagrams.prototype.getEventSize = function (events, wrapperChild) {\n if (events.height !== undefined) {\n wrapperChild.height = events.height;\n wrapperChild.children[0].height = events.height;\n wrapperChild.children[1].height = events.height * 0.85;\n wrapperChild.children[2].height = events.height * 0.54;\n }\n if (events.width !== undefined) {\n wrapperChild.width = events.width;\n wrapperChild.children[0].width = events.width;\n wrapperChild.children[1].width = events.width * 0.85;\n wrapperChild.children[2].width = events.width * 0.54;\n }\n };\n /** @private */\n BpmnDiagrams.prototype.updateBPMNSubProcessAdhoc = function (node, oldObject, subProcess, x, subChildCount, area) {\n var shape = node.shape;\n var elementWrapper = node.wrapper.children[0].children[0];\n var index = (node.shape.activity.subProcess.type === 'Transaction') ? 2 : 0;\n if (subProcess.adhoc === false) {\n elementWrapper.children[3 + index].visible = false;\n }\n else {\n elementWrapper.children[3 + index].visible = true;\n }\n this.updateChildMargin(elementWrapper, subChildCount, area, x, 3 + index);\n };\n /** @private */\n BpmnDiagrams.prototype.updateBPMNSubProcessBoundary = function (node, subProcess) {\n var shape = node.shape;\n var elementWrapper = (node.wrapper.children[0].children[0].children[0]);\n if (subProcess.boundary === 'Default') {\n elementWrapper.style.strokeWidth = 1;\n elementWrapper.style.strokeDashArray = '1 0';\n }\n if (subProcess.boundary === 'Call') {\n elementWrapper.style.strokeWidth = 4;\n elementWrapper.style.strokeDashArray = '1 0';\n }\n if (subProcess.boundary === 'Event') {\n elementWrapper.style.strokeWidth = 1;\n elementWrapper.style.strokeDashArray = '2 2';\n }\n };\n /** @private */\n BpmnDiagrams.prototype.updateElementVisibility = function (node, visible, diagram) {\n if (node.shape.activity.subProcess.processes\n && node.shape.activity.subProcess.processes.length > 0) {\n var processes = node.shape.activity.subProcess.processes;\n for (var j = processes.length - 1; j >= 0; j--) {\n var currentNode = diagram.nameTable[processes[j]];\n currentNode.visible = visible;\n diagram.updateElementVisibility(currentNode.wrapper, currentNode, visible);\n if (visible) {\n if (currentNode.shape.shape === 'Event') {\n this.setEventVisibility(currentNode, currentNode.wrapper.children[0].children);\n }\n if (currentNode.shape.activity.activity === 'SubProcess') {\n this.setSubProcessVisibility(currentNode);\n }\n }\n var connectors = currentNode.inEdges.concat(currentNode.outEdges);\n for (var i = connectors.length - 1; i >= 0; i--) {\n var connector = diagram.nameTable[connectors[i]];\n connector.visible = visible;\n diagram.updateElementVisibility(connector.wrapper, connector, visible);\n }\n }\n }\n if (visible) {\n if (node.shape.shape === 'Event') {\n this.setEventVisibility(node, node.wrapper.children[0].children);\n }\n if (node.shape.activity.activity === 'SubProcess') {\n this.setSubProcessVisibility(node);\n }\n if (node.shape.activity.activity === 'Task' &&\n node.shape.shape === 'Activity' && node.shape.activity.subProcess.loop === 'None') {\n node.wrapper.children[0].children[0].children[3].visible = false;\n }\n }\n };\n /** @private */\n BpmnDiagrams.prototype.updateBPMNSubProcessCollapsed = function (node, oldObject, subProcess, x, subChildCount, area, diagram) {\n var eventLength = node.shape.activity.subProcess.events.length;\n var elementWrapper = node.wrapper.children[0].children[0];\n var index = (node.shape.activity.subProcess.type === 'Transaction') ? 3 : 1;\n if (subProcess.collapsed === false) {\n this.updateElementVisibility(node, true, diagram);\n elementWrapper.children[index + eventLength].visible = false;\n }\n else {\n this.updateElementVisibility(node, false, diagram);\n elementWrapper.children[index + eventLength].visible = true;\n }\n this.updateChildMargin(elementWrapper, subChildCount, area, x, 3 + eventLength);\n };\n /** @private */\n BpmnDiagrams.prototype.updateBPMNSubProcessCompensation = function (node, oldObject, subProcess, x, subChildCount, area) {\n var elementWrapper = node.wrapper.children[0].children[0];\n var index = (node.shape.activity.subProcess.type === 'Transaction') ? 2 : 0;\n if (subProcess.compensation === false) {\n elementWrapper.children[4 + index].visible = false;\n }\n else {\n elementWrapper.children[4 + index].visible = true;\n }\n this.updateChildMargin(elementWrapper, subChildCount, area, x, 4 + index);\n };\n /** @private */\n BpmnDiagrams.prototype.updateBPMNSubProcessLoop = function (node, oldObject, subProcess, x, subChildCount, area) {\n this.updateBPMNActivityTaskLoop(node, node, x, subChildCount, area, 1);\n };\n /** @private */\n BpmnDiagrams.prototype.updateBPMNConnector = function (actualObject, oldObject, connection, diagram) {\n var flowType = connection.shape;\n if (flowType.sequence !== undefined) {\n actualObject = this.getSequence(actualObject, oldObject, connection, diagram);\n }\n if (flowType.association !== undefined) {\n actualObject = this.getAssociation(actualObject, oldObject, connection, diagram);\n }\n if (flowType.message !== undefined) {\n actualObject = this.getMessage(actualObject, oldObject, connection, diagram);\n }\n return actualObject;\n };\n /** @private */\n BpmnDiagrams.prototype.getSequence = function (actualObject, oldObject, connection, diagram) {\n if ((connection.shape.sequence) === 'Normal') {\n diagram.connectorPropertyChange(actualObject, oldObject, {\n type: 'Straight',\n targetDecorator: { shape: 'Arrow', style: { fill: 'black' } }\n });\n actualObject.wrapper.children[3].visible = false;\n }\n if ((connection.shape.sequence) === 'Default') {\n diagram.connectorPropertyChange(actualObject, oldObject, {\n type: 'Straight',\n targetDecorator: { shape: 'Arrow', style: { fill: 'black' } },\n sourceDecorator: { shape: 'None' }\n });\n var segment = new PathElement();\n var pathseq = new PathElement();\n var pathseqData = void 0;\n segment = actualObject.getSegmentElement(actualObject, segment);\n var anglePoints = actualObject.intermediatePoints;\n for (var j = 0; j < anglePoints.length - 1; j++) {\n length = length + actualObject.distance(anglePoints[j], anglePoints[j + 1]);\n pathseqData = actualObject.findPath(anglePoints[j], anglePoints[j + 1]);\n }\n actualObject.wrapper.children[3].data = pathseqData[0];\n actualObject.wrapper.children[3].id = actualObject.id + '_' + (connection.shape.sequence);\n actualObject.wrapper.children[3].offsetX = pathseqData[1].x;\n actualObject.wrapper.children[3].offsetY = pathseqData[1].y;\n actualObject.wrapper.children[3].rotateAngle = 45;\n actualObject.wrapper.children[3].transform = Transform.Self;\n }\n if ((connection.shape.sequence) === 'Conditional') {\n diagram.connectorPropertyChange(actualObject, oldObject, {\n type: 'Straight',\n targetDecorator: { shape: 'Arrow', style: { fill: 'black' } },\n sourceDecorator: { shape: 'Diamond', width: 20, height: 10, style: { fill: 'white' } }\n });\n actualObject.wrapper.children[3].visible = false;\n }\n return actualObject;\n };\n /** @private */\n BpmnDiagrams.prototype.getAssociation = function (actualObject, oldObject, connection, diagram) {\n if ((connection.shape.association) === 'Default') {\n diagram.connectorPropertyChange(actualObject, oldObject, {\n type: 'Straight', style: { strokeDashArray: 'None' },\n targetDecorator: { shape: 'Arrow', style: { fill: 'black' } },\n sourceDecorator: { shape: 'None' }\n });\n }\n if ((connection.shape.association) === 'Directional') {\n diagram.connectorPropertyChange(actualObject, oldObject, {\n type: 'Straight', style: { strokeDashArray: '2 2' },\n targetDecorator: { shape: 'Arrow', style: { fill: 'black' } },\n sourceDecorator: { shape: 'None' }\n });\n }\n if ((connection.shape.association) === 'BiDirectional') {\n diagram.connectorPropertyChange(actualObject, oldObject, {\n type: 'Straight', style: { strokeDashArray: '2 2' },\n targetDecorator: { shape: 'Arrow', style: { fill: 'black' } },\n sourceDecorator: { shape: 'Arrow', width: 5, height: 10, style: { fill: 'white' } }\n });\n }\n return actualObject;\n };\n /** @private */\n BpmnDiagrams.prototype.getMessage = function (actualObject, oldObject, connection, diagram) {\n var segmentOffset = 0.5;\n var angle;\n var pt;\n if ((oldObject.shape.message) === 'Default') {\n if ((connection.shape.message) !== undefined) {\n if (((connection.shape.message) === 'InitiatingMessage') ||\n ((connection.shape.message) === 'NonInitiatingMessage')) {\n var segment = new PathElement();\n segment = actualObject.getSegmentElement(actualObject, segment);\n var anglePoints = actualObject.intermediatePoints;\n for (var j = 0; j < anglePoints.length - 1; j++) {\n length = length + actualObject.distance(anglePoints[j], anglePoints[j + 1]);\n var offLength = length * segmentOffset;\n if (length >= offLength) {\n angle = findAngle(anglePoints[j], anglePoints[j + 1]);\n pt = Point.transform(anglePoints[j], angle, offLength);\n }\n }\n }\n actualObject.wrapper.children[3].id = actualObject.id + '_' + (connection.shape.message);\n actualObject.wrapper.children[3].width = 25;\n actualObject.wrapper.children[3].height = 15;\n actualObject.wrapper.children[3].data = 'M0,0 L19.8,12.8 L40,0 L0, 0 L0, 25.5 L40, 25.5 L 40, 0';\n actualObject.wrapper.children[3].horizontalAlignment = 'Center';\n actualObject.wrapper.children[3].verticalAlignment = 'Center';\n actualObject.wrapper.children[3].transform = Transform.Self;\n actualObject.wrapper.children[3].style.fill = (connection.shape.message) === 'NonInitiatingMessage' ?\n 'lightgrey' : 'white';\n actualObject.wrapper.children[3].offsetX = pt.x;\n actualObject.wrapper.children[3].offsetY = pt.y;\n }\n }\n else if ((oldObject.shape.message) !== 'NonInitiatingMessage' ||\n (oldObject.shape.message) !== 'InitiatingMessage') {\n if ((connection.shape.message) !== 'Default') {\n actualObject.wrapper.children[3].style.fill = (connection.shape.message) === 'NonInitiatingMessage' ?\n 'lightgrey' : 'white';\n }\n else {\n actualObject.wrapper.children[3].visible = false;\n }\n }\n return actualObject;\n };\n //End update Region\n //size updation\n BpmnDiagrams.prototype.setSizeForBPMNEvents = function (event, wrapper, width, height) {\n wrapper.children[0].width = width;\n wrapper.children[0].height = height;\n //child node 1 - event node\n var eventNode = wrapper.children[1];\n eventNode.width = width * 0.85;\n eventNode.height = height * 0.85;\n var triggerNode = wrapper.children[2];\n if (event.trigger === 'Message') {\n triggerNode.width = width * 0.54;\n triggerNode.height = height * 0.4;\n }\n else {\n triggerNode.width = width * 0.5;\n triggerNode.height = height * 0.5;\n }\n };\n /** @private */\n BpmnDiagrams.prototype.updateAnnotationDrag = function (node, diagram, tx, ty) {\n var checkAnnotation = node.id.split('_');\n if (checkAnnotation[1] === 'textannotation') {\n var parentNode = void 0;\n for (var j = 0; j < node.inEdges.length; j++) {\n var connector = diagram.nameTable[node.inEdges[j]];\n if (connector) {\n parentNode = diagram.nameTable[connector.sourceID];\n }\n var start = { x: node.offsetX + tx, y: node.offsetY + ty };\n var end = connector.sourcePoint;\n var length_1 = Point.findLength(start, end);\n var angle = Point.findAngle(end, start);\n if (parentNode.shape.annotations) {\n for (var x = 0; x < (parentNode.shape.annotations).length; x++) {\n if ((parentNode.shape.annotations)[x].id === checkAnnotation[checkAnnotation.length - 1]) {\n (parentNode.shape.annotations[x]).length = length_1;\n (parentNode.shape.annotations[x]).angle = angle;\n this.setAnnotationPath(parentNode.wrapper.bounds, node.wrapper, start, node);\n return false;\n }\n }\n }\n }\n }\n if (node.processId) {\n this.drag(node, tx, ty, diagram);\n return true;\n }\n return false;\n };\n BpmnDiagrams.prototype.getAnnotationPathAngle = function (point, bounds) {\n var direction = getPortDirection(point, bounds, bounds, false);\n var rotateAngle = 0;\n switch (direction) {\n case 'Right':\n rotateAngle = 0;\n break;\n case 'Left':\n rotateAngle = 180;\n break;\n case 'Bottom':\n rotateAngle = 90;\n break;\n case 'Top':\n rotateAngle = 270;\n break;\n }\n return rotateAngle;\n };\n BpmnDiagrams.prototype.setSizeForBPMNGateway = function (event, wrapper, width, height) {\n wrapper.children[0].width = width;\n wrapper.children[0].height = height;\n wrapper.children[1].width = width * 0.45;\n wrapper.children[1].height = height * 0.45;\n };\n BpmnDiagrams.prototype.setSizeForBPMNDataObjects = function (event, wrapper, width, height) {\n wrapper.children[0].width = width;\n wrapper.children[0].height = height;\n };\n BpmnDiagrams.prototype.setSizeForBPMNActivity = function (activity, wrapper, width, height, node) {\n //child node 1 - event node\n wrapper.children[0].width = width;\n wrapper.children[0].height = height;\n wrapper.children[0].children[0].width = width;\n wrapper.children[0].children[0].height = height;\n if (activity.subProcess.type === 'Transaction') {\n wrapper.children[0].children[1].width = Math.max(width - 6, 1);\n wrapper.children[0].children[1].height = Math.max(height - 6, 1);\n wrapper.children[0].children[2].width = width;\n wrapper.children[0].children[2].height = height;\n }\n var taskNode = new DiagramElement();\n var x;\n var size = this.getSize(node, taskNode);\n var childCount;\n var iconSpace = 4;\n if (activity.activity === 'Task') {\n childCount = this.getTaskChildCount(node);\n }\n else {\n childCount = this.getSubprocessChildCount(node);\n }\n var childSpace = childCount * 12;\n var area = (width || size.width) / 2;\n if (childCount === 1) {\n x = area - 6;\n }\n else {\n x = area - (childSpace / 2) - ((childCount - 1) * iconSpace) / 2;\n }\n for (var i = 0; i < wrapper.children[0].children.length; i++) {\n if (wrapper.children[0].children[i].visible &&\n (wrapper.children[0].children[i].id.indexOf('_loop') > -1 ||\n wrapper.children[0].children[i].id.indexOf('_0_compensation') > -1 ||\n wrapper.children[0].children[i].id.indexOf('_0_adhoc') > -1 ||\n wrapper.children[0].children[i].id.indexOf('_0_collapsed') > -1)) {\n wrapper.children[0].children[i].margin.left = x;\n x += wrapper.children[0].children[i].actualSize.width + iconSpace;\n }\n }\n };\n BpmnDiagrams.prototype.updateDiagramContainerVisibility = function (element, visible) {\n if (element instanceof Container) {\n for (var i = 0; i < element.children.length; i++) {\n this.updateDiagramContainerVisibility(element.children[i], visible);\n }\n }\n element.visible = visible;\n };\n /**\n * To destroy the BpmnDiagrams module\n * @return {void}\n * @private\n */\n BpmnDiagrams.prototype.destroy = function () {\n /**\n * Destroys the BpmnDiagrams module\n */\n };\n /**\n * Get module name.\n */\n BpmnDiagrams.prototype.getModuleName = function () {\n /**\n * Returns the module name\n */\n return 'Bpmn';\n };\n return BpmnDiagrams;\n}());\nexport { BpmnDiagrams };\nexport function getBpmnShapePathData(shape) {\n return bpmnShapes[shape.toString()];\n}\nexport function getBpmnTriggerShapePathData(shape) {\n return bpmnTriggerShapes[shape.toString()];\n}\nexport function getBpmnGatewayShapePathData(shape) {\n return bpmnGatewayShapes[shape.toString()];\n}\nexport function getBpmnTaskShapePathData(shape) {\n return bpmnTaskShapes[shape.toString()];\n}\nexport function getBpmnLoopShapePathData(shape) {\n return bpmnLoopShapes[shape.toString()];\n}\nvar bpmnShapes = {\n 'Event': 'M80.5,12.5 C80.5,19.127417 62.59139,24.5 40.5,24.5 C18.40861,24.5 0.5,19.127417 0.5,12.5' +\n 'C0.5,5.872583 18.40861,0.5 40.5,0.5 C62.59139,0.5 80.5,5.872583 80.5,12.5 z',\n 'Message': 'M0,0L19.8,12.8L40,0L0,0L0,25.5L40,25.5L40,0z',\n 'DataSource': 'M 0 10.6 c 0 5.9 16.8 10.6 37.5 10.6 S 75 16.4 75 10.6 v 0 v 68.9 v -0.1 C 75 85.3 58.2 90 37.5 90 ' +\n 'S 0 85.3 0 79.4 l 0 0.1 V 56 V 40.6 L 0 10.6 C 0 4.7 16.8 0 37.5 0 S 75 4.7 75 10.6 S 58.2 21.2 37.5 21.2' +\n 'S 0 16.5 0 10.6 l 0 6.7 v -0.2 c 0 5.9 16.8 10.6 37.5 10.6 S 75 22.9 75 17.1 v 6.8 v -0.1 ' +\n 'c 0 5.9 -16.8 10.6 -37.5 10.6 S 0 29.6 0 23.8',\n 'SubProcess': 'M100,100 h200 a20,20 0 0 1 20,20 v200 a20,20 0 0 1 -20,20 h-200 ' +\n 'a20,20 0 0 1 -20,-20 v-200 a20,20 0 0 1 20,-20 z',\n 'collapsedShape': 'M 8.13789 15 H 0 V 0 H 8.13789 V 15 Z M 0.625991 13.75 H 7.51189 V 1.25 H 0.625991 V 13.75 Z ' +\n 'M 2.18095 7.03125 L 5.95631 7.03125 L 5.95631 7.46875 L 2.18095 7.46875 Z M 3.8342 3.73 ' +\n 'L 4.30369 3.73 L 4.30369 11.2687 L 3.8342 11.2687 Z',\n};\nvar bpmnTriggerShapes = {\n // 'None': '',\n 'Message': 'M0,0 L19.8,12.8 L40,0 L0, 0 L0, 25.5 L40, 25.5 L 40, 0',\n 'Timer': 'M40,20c0,8.654-5.496,16.024-13.189,18.81' +\n 'C24.685,39.58,22.392,40,20,40C8.954,40,0,31.046,0,20S8.954,0,20,0S40,8.954,40,20z M20,0 L20,2.583 L20,5.283 M10.027,2.681' +\n 'L11.659,5.507 L12.669,7.257 M2.731,9.989 L6.014,11.885 L7.307,12.631 M0.067,19.967 L2.667,19.967 L5.35,19.967' +\n 'M2.748,29.939 L5.731,28.217 L7.323,27.298 M10.056,37.236 L11.292,35.095 L12.698,32.66 M20.033,39.9 L20.033,36.417 L20.033,34.617' +\n 'M30.006,37.219 L28.893,35.292 L27.364,32.643 M37.302,29.911 L34.608,28.355 L32.727,27.269' +\n 'M39.967,19.933 L37.417,19.933 L34.683,19.933 M37.286,9.961 L34.583,11.521 L32.71,12.602 M29.977,2.664 L28.653,4.957 L27.336,' +\n '7.24 M22.104,8.5 L19.688,20 L24.75,20 L31.604,20 L24.75,20 L19.688,20z',\n 'Error': 'M 23.77 18.527 l -7.107 27.396 l 8.507 -17.247 L 36.94 40.073 l 6.394 -25.997 l -8.497 15.754 L 23.77 18.527 Z',\n 'Escalation': 'M 30.001 8.098 L 11.842 43.543 l 18.159 -18.882 l 18.162 18.882 L 30.001 8.098 Z ',\n 'Cancel': 'M 3.5 16 L 0 12.6 L 4.6 8 L 0 3.5 L 3.4 0 L 8 4.6 l 4.5 -4.5 L 16 3.5 L 11.5 8 l 4.5 4.5 l -3.4 3.5 L 8 11.4 L 3.5 16 Z',\n 'Compensation': 'M 25.7086 0 L 0 25 L 25.7086 50 V 26.3752 L 50 50 V 0 L 25.7086 23.6248 V 0 Z ',\n 'Conditional': 'M 0 0 H 16 V 16 H 0 z M 1.14 3.2 H 14.85 M 1.14 6.4 H 14.85 M 1.14 9.6 H 14.85 M 1.14 12.8 H 14.85',\n 'Link': 'M 32.014 19.258 v 5.992 H 9.373 v 9.504 h 22.641 v 5.988 L 50.622 30 L 32.014 19.258 Z',\n 'Signal': 'M 50 50 H 0 L 25.0025 0 L 50 50 Z',\n 'Terminate': 'M 25 50 C 11.21 50 0 38.79 0 25 C 0 11.21 11.21 0 25 0 C 38.78 0 50 11.21 50 25 C 50 38.79 38.78 50 25 50',\n 'Multiple': 'M 17.784 48.889 H 42.21 l 7.548 -23.23 L 29.997 11.303 L 10.236 25.658 L 17.784 48.889 Z',\n 'Parallel': 'M 27.276 49.986 h 5.58 v -17.15 h 17.146 V 27.17 h -17.15 l 0.004 -17.15 h -5.58 l -0.004 17.15 ' +\n 'H 9.994 v 5.666 h 17.278 L 27.276 49.986 Z',\n};\nvar bpmnGatewayShapes = {\n 'None': '',\n //exclusive\n 'Exclusive': 'M 11.196 29.009 l 6.36 -9.712 l -5.764 -8.899 h 4.393 l 3.732 5.979 l 3.656 -5.979 h 4.354 l -5.789 9.039' +\n 'l 6.36 9.572 h -4.532 l -4.126 -6.437 l -4.139 6.437 H 11.196 Z',\n //inclusive\n 'Inclusive': 'M 20.323 31.333 c -6.625 0 -12.015 -5.39 -12.015 -12.015 s 5.39 -12.015 12.015 -12.015 ' +\n 's 12.016 5.39 12.016 12.015 S 26.948 31.333 20.323 31.333 Z M 20.323 9.303 c -5.522 0 -10.015 4.493 -10.015 10.015 ' +\n 's 4.492 10.015 10.015 10.015 s 10.016 -4.493 10.016 -10.015 S 25.846 9.303 20.323 9.303 Z',\n //parallel\n 'Parallel': 'M 18.394 29.542 v -8.833 H 9.626 v -3.691 h 8.768 V 8.251 h 3.734 v 8.767 h 8.768 v 3.691 h -8.768 v 8.833 H 18.394 Z',\n //complex\n 'Complex': 'M29.198,19.063L23.089,19.063L27.794,14.358L26.38,12.944L21.223,18.101L21.223,10.443L19.223,10.443L19.223,17.976' +\n 'L14.022,12.776L12.608,14.19L17.48,19.063L10.365,19.063L10.365,21.063L18.261,21.063L12.392,26.932L13.806,28.346' +\n 'L19.223,22.929L19.223,30.225L21.223,30.225L21.223,22.805L25.925,27.507L27.339,26.093L22.309,21.063L29.198,21.063z',\n //eventbased\n 'EventBased': 'M 20.322 29.874 c -5.444 0 -9.873 -4.43 -9.873 -9.874 s 4.429 -9.874 9.873 -9.874 s 9.874 4.429 9.874 9.874 ' +\n 'S 25.767 29.874 20.322 29.874 Z M 20.322 32.891 c -7.107 0 -12.89 -5.783 -12.89 -12.891 c 0 -7.107 5.782 -12.89 12.89 -12.89 ' +\n 'c 7.108 0 12.891 5.783 12.891 12.89 C 33.213 27.108 27.431 32.891 20.322 32.891 Z M 24.191 25.386 ' +\n 'h -7.984 l -2.469 -7.595 l 6.461 -4.693 l 6.461 4.693 L 24.191 25.386 Z',\n //exclusive event based\n 'ExclusiveEventBased': 'M 30 15 C 30 23.28 23.28 30 15 30 S 0 23.28 0 15 S 6.72 0 15 0 S 30 6.72 30 15 z M 15 5 ' +\n 'L 5 12.5 L 8 22.5 H 22 L 25 12.5 z',\n //parallel event based\n 'ParallelEventBased': 'M 35 17.5 C 35 27.16 27.16 35 17.5 35 S 0 27.16 0 17.5 S 7.84 0 17.5 0 S 35 7.84 35 17.5 z M 14.58 5.83 ' +\n 'V 14.58 H 5.83 V 20.42 H 14.58 V 29.17 H 20.42 V 20.42 H 29.17 V 14.58 H 20.42 V 5.83 z',\n};\nvar bpmnTaskShapes = {\n 'None': '',\n 'Service': 'M 32.699 20.187 v -4.005 h -3.32 c -0.125 -0.43 -0.292 -0.83 -0.488 -1.21 l 2.373 -2.375 ' +\n 'l -2.833 -2.83 l -2.333 2.333 c -0.44 -0.253 -0.9 -0.448 -1.387 -0.595 v -3.32 h -4.003 v 3.32 c -0.46 0.137 -0.89' +\n '0.322 -1.3 0.537 l -2.285 -2.275 l -2.833 2.83 l 2.285 2.278 c -0.235 0.42 -0.41 0.847 -0.547 1.307 h -3.33 v 4.005 h 3.33 ' +\n 'c 0.148 0.488 0.343 0.955 0.588 1.395 l -2.325 2.325 l 2.822 2.832 l 2.373 -2.382 c 0.392 0.205 0.792 0.37 1.212 0.497 v 3.33 ' +\n 'h 4.003 v -3.33 c 0.46 -0.138 0.89 -0.323 1.3 -0.547 l 2.43 2.432 l 2.822 -2.832 l -2.42 -2.422 c 0.222 -0.41 0.4 -0.85 0.535' +\n '-1.297 H 32.699 Z M 22.699 21.987 c -2.1 0 -3.803 -1.703 -3.803 -3.803 c 0 -2.1 1.703 -3.803 3.803 -3.803 c 2.1 0 3.803 ' +\n '1.703 3.803 3.803 C 26.502 20.285 24.8 21.987 22.699 21.987 Z',\n 'Receive': 'M 12.217 12.134 v 13.334 h 20 V 12.134 H 12.217 Z M 30.44 13.007 l -8.223 5.35 l -8.223 -5.35 H 30.44 Z M 13.09' +\n ' 24.594 V 13.459 l 9.127 5.94 l 9.127 -5.94 v 11.135 H 13.09 Z',\n 'Send': 'M 45.7256 3.16055 L 25 23.4017 L 4.27442 3.16055 H 45.7256 Z M 47.8963 46.8413 H 2.10375 V 4.80813' +\n ' L 25 27.1709 L 47.8963 4.80813 V 46.8413 Z',\n 'InstantiatingReceive': 'M 16.306 17.39 v 8.79 h 13.198 v -8.79 H 16.306 Z M 28.375 17.946 l -5.47 3.558 l -5.47 -3.558 ' +\n 'H 28.375 Z M 28.948 25.625 H 16.861 v -7.389 l 6.043 3.931 l 6.043 -3.931 V 25.625 Z M 22.905 11.785' +\n 'c -5.514 0 -9.999 4.486 -9.999 10 c 0 5.514 4.485 10 9.999 10 s 9.999 -4.486 9.999 -10 ' +\n 'C 32.904 16.272 28.419 11.785 22.905 11.785 Z M 22.905 31.239 c -5.212 0 -9.453 -4.241 -9.453 -9.454' +\n 'c 0 -5.212 4.241 -9.453 9.453 -9.453 s 9.452 4.241 9.452 9.453 C 32.357 26.998 28.117 31.239 22.905 31.239 Z',\n 'Manual': 'M 13.183 15.325 h 2.911 c 0.105 0 0.207 -0.043 0.281 -0.117 c 0.078 -0.074 0.117 -0.176 0.117 -0.281' +\n 'c 0 -0.753 0.718 -1.362 1.596 -1.362 h 2.579 c -0.117 0.227 -0.191 0.48 -0.195 0.757 c 0 0.433 0.168 0.851 0.46 1.144 ' +\n 'c 0.008 0.004 0.015 0.011 0.019 0.015 c -0.289 0.285 -0.475 0.691 -0.479 1.148 c 0 0.433 0.168 0.846 0.46 1.139 ' +\n 'c 0.011 0.012 0.023 0.02 0.035 0.032 c -0.301 0.281 -0.491 0.694 -0.495 1.155 c 0 0.432 0.168 0.847 0.46 1.143' +\n 'c 0.265 0.266 0.612 0.414 0.975 0.414 h 0.839 c 0.027 0.004 0.051 0.012 0.074 0.012 h 8.443 ' +\n 'c 0.352 0 0.636 0.344 0.636 0.761 c 0 0.414 -0.285 0.753 -0.636 0.753 h -6.687 c -0.019 0 -0.035 -0.008 -0.051 -0.008' +\n 'h -2.27 c -0.121 -0.835 -0.667 -1.187 -1.795 -1.187 h -2.158 c -0.223 0 -0.402 0.18 -0.402 0.403' +\n 'c 0 0.219 0.179 0.398 0.402 0.398 h 2.158 c 0.972 0 1.019 0.203 1.019 0.784 c 0 0.219 0.179 0.399 0.402 0.399 ' +\n 'c 0.008 0 0.016 -0.004 0.027 -0.004 c 0.028 0.004 0.055 0.016 0.082 0.016 h 2.56 c 0.34 0.015 0.616 0.343 0.616 0.752' +\n 'c 0 0.418 -0.285 0.757 -0.636 0.761 h -0.004 h -6.442 c -0.878 0 -1.595 -0.639 -1.595 -1.427 v -0.683 ' +\n 'c 0 -0.109 -0.043 -0.211 -0.114 -0.285 c -0.078 -0.074 -0.179 -0.117 -0.285 -0.117 h -0.004 l -2.989 0.027 ' +\n 'c -0.223 0 -0.398 0.184 -0.398 0.402 c 0 0.219 0.179 0.395 0.398 0.395 h 0.004 l 2.591 -0.02 v 0.282 ' +\n 'c 0 1.229 1.073 2.223 2.391 2.223 h 3.895 c 0.004 0 0.007 0.004 0.011 0.004 h 2.536 c 0.792 0 1.436 -0.698 1.436 -1.561 ' +\n 'c 0 -0.273 -0.07 -0.53 -0.188 -0.752 h 5.49 c 0.792 0 1.436 -0.695 1.436 -1.553 c 0 -0.858 -0.644 -1.557 -1.436 -1.557' +\n 'h -3.566 c 0.121 -0.226 0.199 -0.487 0.199 -0.768 c 0 -0.468 -0.195 -0.882 -0.495 -1.167' +\n 'c 0.301 -0.285 0.495 -0.698 0.495 -1.163 c 0 -0.456 -0.191 -0.866 -0.483 -1.152 c 0.293 -0.285 0.483 -0.694 0.483 -1.151' +\n 'c 0 -0.858 -0.647 -1.557 -1.439 -1.557 h -8.373 c -1.167 0 -2.142 0.757 -2.352 1.76 l -2.548 -0.004 ' +\n 'c -0.219 0 -0.399 0.18 -0.399 0.403 C 12.784 15.145 12.964 15.325 13.183 15.325 L 13.183 15.325 Z M 21.907 19.707 ' +\n 'c -0.191 0 -0.328 -0.094 -0.41 -0.176 c -0.144 -0.145 -0.226 -0.355 -0.226 -0.577 c 0.003 -0.418 0.289 -0.753 0.643 -0.753 ' +\n 'h 4.468 c 0.008 0 0.015 -0.004 0.027 -0.008 h 0.051 c 0.351 0 0.636 0.344 0.636 0.761 c 0 0.414 -0.286 0.753 -0.636 0.753 ' +\n 'H 21.907 Z M 27.097 16.629 c 0 0.414 -0.286 0.753 -0.64 0.753 h -4.464 c -0.004 0 -0.004 0 -0.004 0 h -0.082' +\n 'c -0.191 0 -0.328 -0.098 -0.414 -0.18 c -0.14 -0.145 -0.222 -0.352 -0.222 -0.573 c 0 -0.413 0.285 -0.749 0.631 -0.753' +\n 'h 3.434 c 0 0 0 0 0.004 0 h 1.116 c 0.008 0 0.012 -0.004 0.02 -0.004 C 26.819 15.887 27.097 16.215 27.097 16.629' +\n 'L 27.097 16.629 Z M 27.097 14.322 c 0 0.41 -0.278 0.737 -0.62 0.749 c -0.008 0 -0.012 0 -0.016 0 h -3.637 ' +\n 'c -0.008 0 -0.015 0.004 -0.023 0.004 h -0.886 c -0.004 0 -0.008 0 -0.012 0 c -0.187 0 -0.324 -0.094 -0.406 -0.176' +\n 'c -0.144 -0.144 -0.226 -0.355 -0.226 -0.577 c 0.003 -0.414 0.293 -0.753 0.643 -0.753 h 4.468 ' +\n 'c 0.008 0 0.015 -0.004 0.027 -0.004 h 0.051 C 26.811 13.565 27.097 13.905 27.097 14.322 L 27.097 14.322 Z M 27.097 14.322',\n 'BusinessRule': 'M 32.844 13.245 h -0.089 v 0 H 13.764 v -0.015 h -1.009 v 16.989 h 0.095 v 0.011 h 19.716 v -0.011 h 0.278 ' +\n 'V 13.245 Z M 31.844 14.229 v 4.185 h -18.08 v -4.185 H 31.844 Z M 18.168 25.306 v 3.938 h -4.404 v -3.938 H 18.168 Z ' +\n 'M 13.764 24.322 v -4.923 h 4.404 v 4.923 H 13.764 Z M 19.177 25.306 h 12.667 v 3.938 H 19.177 V 25.306 Z M 19.177 24.322' +\n 'v -4.923 h 12.667 v 4.923 H 19.177 Z',\n 'User': 'M 21.762 21.935 c 2.584 0 4.687 -2.561 4.687 -5.703 c 0 -3.147 -2.103 -5.703 -4.687 -5.703 c -1.279 0 -2.475 0.61' +\n '-3.363 1.721 c -0.855 1.071 -1.327 2.484 -1.324 3.983 C 17.075 19.374 19.178 21.935 21.762 21.935 L 21.762 21.935 Z' +\n 'M 21.762 11.779 c 1.894 0 3.436 1.995 3.436 4.452 c 0 2.453 -1.541 4.452 -3.436 4.452 c -1.895 0 -3.44 -1.999 -3.44 -4.452' +\n 'C 18.323 13.774 19.864 11.779 21.762 11.779 L 21.762 11.779 Z M 25.699 21.309 c -0.348 0 -0.626 0.277 -0.626 0.626 ' +\n 'c 0 0.344 0.277 0.622 0.626 0.622 c 2.136 0 3.875 1.74 3.875 3.879 c 0 0.272 -0.227 0.498 -0.501 0.498 H 14.447 c -0.274 0 ' +\n '-0.497 -0.223 -0.497 -0.498 c 0 -2.139 1.736 -3.879 3.872 -3.879 c 0.344 0 0.625 -0.277 0.625 -0.622 c 0 -0.348 -0.28 -0.626' +\n '-0.625 -0.626 c -2.826 0 -5.124 2.297 -5.124 5.126 c 0 0.965 0.784 1.749 1.748 1.749 h 14.626 c 0.964 0 1.748 -0.784' +\n '1.748 -1.749 C 30.822 23.606 28.524 21.309 25.699 21.309 L 25.699 21.309 Z M 22.217 9.832 c 0.448 -0.263 0.924 -0.396 ' +\n '1.419 -0.396 c 1.895 0 3.436 1.995 3.436 4.452 c 0 0.439 -0.048 0.873 -0.143 1.284 c -0.08 0.336 0.128 0.672 0.464 0.751 ' +\n 'c 0.048 0.012 0.098 0.019 0.143 0.019 c 0.284 0 0.541 -0.195 0.608 -0.483 c 0.119 -0.506 0.18 -1.034 0.18 -1.571' +\n 'c 0 -3.147 -2.102 -5.703 -4.687 -5.703 c -0.711 0 -1.419 0.198 -2.054 0.573 c -0.296 0.174 -0.397 0.559 -0.219 0.855' +\n 'C 21.536 9.911 21.921 10.009 22.217 9.832 L 22.217 9.832 Z M 27.697 18.81 c -0.345 0 -0.626 0.277 -0.626 0.622 ' +\n 'c 0 0.348 0.281 0.626 0.626 0.626 c 2.137 0 3.75 1.782 3.75 3.918 c 0 0.07 -0.013 0.141 -0.043 0.205 c -0.14 0.314 0.003' +\n '0.684 0.318 0.823 c 0.082 0.037 0.167 0.055 0.253 0.055 c 0.241 0 0.466 -0.141 0.57 -0.373 c 0.101 -0.226 0.153 -0.464 0.153' +\n '-0.714 C 32.699 21.15 30.523 18.81 27.697 18.81 L 27.697 18.81 Z M 27.697 18.81',\n 'Script': 'M 22.453 15.04 c 0 0 -1.194 -3.741 2.548 -3.774 c 0 0 2.497 0.126 1.766 4.321 c -0.008 0.043 -0.015 0.086 -0.024 0.13' +\n 'c -0.806 4.323 -2.516 8.42 -3.193 10.581 h 3.904 c 0 0 0.983 4.581 -2.549 4.968 H 13.292 c 0 0 -3.097 -1.42 -1.517 -5.323 l ' +\n '3 -10.839 H 11.84 c 0 0 -1.129 -2.902 1.709 -3.806 l 11.425 -0.032 l -0.73 0.355 l -1.193 1.726 L 22.453 15.04 Z M 22.409 ' +\n '12.597 c 0 0 -0.242 0.483 -0.278 0.98 h -9.098 c 0 0 -0.06 -0.871 0.714 -1.041 L 22.409 12.597 Z M 26.341 27.734' +\n 'c 0 0 -0.13 2.678 -2.226 1.871 c 0 0 -0.823 -0.565 -0.758 -1.855 L 26.341 27.734 Z M 22.905 15.008 c 0 0 0.653 -0.258 0.709' +\n '-1.501 c 0 0 0.145 -1.144 1.483 -0.693 c 0 0 0.808 0.355 0.259 2.404 c 0 0 -2.226 8.5 -3.032 10.339 c 0 0 -1.064 2.646 ' +\n '0.096 4.226 h -8.581 c 0 0 -1.806 -0.452 -0.741 -3.613 c 0 0 2.935 -9.549 3.193 -11.162 L 22.905 15.008 Z',\n};\nvar bpmnLoopShapes = {\n 'None': '',\n 'Standard': 'M 52.002 73.379 c -2.494 -2.536 -6.55 -2.534 -9.043 0 c -1.208 1.228 -1.874 2.861 -1.874 4.598 ' +\n 'c 0 1.225 0.337 2.395 0.957 3.411 l -1.167 1.186 l 2.071 0.458 l 2.071 0.458 l -0.45 -2.106 l -0.45 -2.106 l -1.292 1.314' +\n 'c -1.119 -2.065 -0.842 -4.709 0.877 -6.458 c 2.084 -2.119 5.475 -2.117 7.557 0 c 2.083 2.119 2.083 5.565 0 7.685' +\n 'c -0.976 0.992 -2.272 1.557 -3.65 1.59 l 0.025 1.068 c 1.65 -0.041 3.2 -0.716 4.368 -1.903 ' +\n 'c 1.208 -1.228 1.874 -2.861 1.874 -4.597 C 53.875 76.24 53.209 74.607 52.002 73.379 Z',\n 'ParallelMultiInstance': 'M 51.5,69.5 L52.5,69.5 L52.5,84.5 L51.5 84.5 Z M 46.5,69.5 L47.5,69.5 L47.5,84.5 L46.5 84.5 Z' +\n ' M 41.5,69.5 L42.5,69.5 L42.5,84.5 L41.5 84.5 Z ',\n 'SequenceMultiInstance': 'M 40.375,71.5 L 55.375,71.5 L 55.375,72.5 L 40.375,72.5 Z M 40.375,76.5 L 55.375,76.5 ' +\n 'L 55.375,77.5 L 40.375,77.5 Z M 40.375,76.5 L 55.375,76.5 L 55.375,77.5 L 40.375,77.5 Z M 40.375,81.5 L 55.375,81.5' +\n 'L 55.375,82.5 L 40.375,82.5 Z'\n};\n","import { Rect } from '../primitives/rect';\nimport { cloneObject } from '../utility/base-util';\nvar GraphForceNode = /** @class */ (function () {\n function GraphForceNode(gnNode) {\n /**\n * @private\n */\n this.velocityX = 0;\n /**\n * @private\n */\n this.velocityY = 0;\n /**\n * @private\n */\n this.nodes = [];\n this.graphNode = gnNode;\n var nNode = this.graphNode;\n var bounds = getGraphBounds(nNode);\n this.location = bounds.center;\n this.nodes = [];\n if (!gnNode.treeInfo.parents) {\n gnNode.treeInfo.parents = [];\n }\n if (!gnNode.treeInfo.children) {\n gnNode.treeInfo.children = [];\n }\n this.nodes = (gnNode.treeInfo.parents).concat(gnNode.treeInfo.children);\n }\n /**\n * @private\n */\n GraphForceNode.prototype.applyChanges = function () {\n this.graphNode.treeInfo.center = this.location;\n };\n return GraphForceNode;\n}());\nexport { GraphForceNode };\n/**\n * SymmetricalLayout\n */\nvar SymmetricLayout = /** @class */ (function () {\n function SymmetricLayout() {\n this.cdCOEF = 0.442;\n this.cfMAXVELOCITY = 50;\n this.cnMAXITERACTION = 1000;\n this.cnSPRINGLENGTH = 100;\n this.mszMaxForceVelocity = { width: this.cfMAXVELOCITY, height: this.cfMAXVELOCITY };\n /**\n * @private\n */\n this.springLength = 0;\n /**\n * @private\n */\n this.springFactor = this.cdCOEF;\n /**\n * @private\n */\n this.maxIteration = this.cnMAXITERACTION;\n this.springLength = this.cnSPRINGLENGTH;\n }\n /**\n * @private\n */\n SymmetricLayout.prototype.destroy = function () {\n /**\n * Destroys symmetricLayout\n */\n };\n SymmetricLayout.prototype.getModuleName = function () {\n return 'SymmetricalLayout';\n };\n SymmetricLayout.prototype.doGraphLayout = function (graphLayoutManager) {\n var graph = this.selectedNode;\n graph.treeInfo.Bounds = graphLayoutManager.getModelBounds(graphLayoutManager.nodes);\n var lstGraphNodes = graph.treeInfo.GraphNodes;\n var lstNodes = this.convertGraphNodes(lstGraphNodes);\n var count = lstNodes.length;\n count = Math.min(this.maxIteration, count * count * count);\n this.preLayoutNodes(lstNodes, graph.treeInfo.Bounds);\n for (var i = 0, nLenght = count; i < nLenght; i++) {\n this.makeSymmetricLayout(lstNodes);\n this.appendForces(lstNodes);\n }\n this.resetGraphPosition(lstNodes, graph);\n };\n SymmetricLayout.prototype.preLayoutNodes = function (lstNodes, rcBounds) {\n var fMaxSize = Math.max(rcBounds ? rcBounds.width : 25, rcBounds ? rcBounds.height : 25);\n var ptCenter = { x: fMaxSize / 2, y: fMaxSize / 2 };\n var dRotateAngle = 2 * Math.PI / lstNodes.length;\n var dAngle = dRotateAngle;\n for (var i = 0; i < lstNodes.length; i++) {\n var gnNode = lstNodes[i];\n var forceNode = this.getForceNode(gnNode);\n forceNode.location = {\n x: ptCenter.x + fMaxSize * Number((Math.cos(dAngle)).toFixed(2)),\n y: ptCenter.y + fMaxSize * Number(Math.sin(dAngle).toFixed(2))\n };\n dAngle -= dRotateAngle;\n }\n };\n /**\n * @private\n */\n SymmetricLayout.prototype.doLayout = function (graphLayoutManager) {\n this.selectedNode = graphLayoutManager.selectedNode;\n this.doGraphLayout(graphLayoutManager);\n };\n SymmetricLayout.prototype.makeSymmetricLayout = function (lstNodes) {\n var forceNode;\n var force;\n for (var k = 0; k < lstNodes.length; k++) {\n var gnNode = lstNodes[k];\n forceNode = this.getForceNode(gnNode);\n var nodes = forceNode.nodes;\n for (var l = 0; l < nodes.length; l++) {\n var gnChild = nodes[l];\n if (collectionContains(gnChild.id, lstNodes)) {\n this.calcNodesForce(forceNode, this.getForceNode(gnChild));\n }\n }\n for (var i = 0, length_1 = nodes.length; i < length_1; i++) {\n if (length_1 < 2) {\n break;\n }\n var vtx1 = this.getForceNode(nodes[i]);\n var vtx2 = (i + 1 >= length_1) ? this.getForceNode(nodes[0]) : this.getForceNode((nodes[i + 1]));\n var angle = (360 / nodes.length / 2) * Math.PI / 180;\n var normalDistance = 2 * this.springLength * Math.sin(angle);\n this.calcRelatesForce(vtx1, vtx2, normalDistance);\n }\n for (var s = 0; s < lstNodes.length; s++) {\n var gnChild = lstNodes[s];\n if (!collectionContains(gnChild.id, nodes) && gnChild.id !== gnNode.id) {\n force = this.getForceNode(gnChild);\n this.updateNeigbour(forceNode, force);\n }\n }\n }\n };\n SymmetricLayout.prototype.appendForces = function (lstNodes) {\n var gfnNode = null;\n for (var k = 0; k < lstNodes.length; k++) {\n var gnNode = lstNodes[k];\n gfnNode = this.getForceNode(gnNode);\n var ptPoint = gfnNode.location;\n ptPoint.x += Math.min(gfnNode.velocityX, this.mszMaxForceVelocity.width);\n ptPoint.y += Math.min(gfnNode.velocityY, this.mszMaxForceVelocity.height);\n gfnNode.velocityX = 0;\n gfnNode.velocityY = 0;\n gfnNode.location = ptPoint;\n }\n };\n SymmetricLayout.prototype.resetGraphPosition = function (lstNodes, graph) {\n var szMin = { width: Number.MAX_VALUE, height: Number.MAX_VALUE };\n var gfnNode = null;\n var gnNode;\n for (var k = 0; k < lstNodes.length; k++) {\n gnNode = lstNodes[k];\n gfnNode = this.getForceNode(gnNode);\n var ptLocation = {\n x: gfnNode.location.x - gnNode.actualSize.width / 2,\n y: gfnNode.location.y - gnNode.actualSize.height / 2\n };\n szMin.width = Math.min(szMin.width, ptLocation.x);\n szMin.height = Math.min(szMin.height, ptLocation.y);\n }\n for (var k = 0; k < lstNodes.length; k++) {\n gnNode = lstNodes[k];\n gfnNode = this.getForceNode(gnNode);\n var ptLocation = gfnNode.location;\n ptLocation.x -= szMin.width - (graph.treeInfo.location ? graph.treeInfo.location.x : 0);\n ptLocation.y -= szMin.height - (graph.treeInfo.location ? graph.treeInfo.location.y : 0);\n gfnNode.location = ptLocation;\n gfnNode.applyChanges();\n }\n };\n SymmetricLayout.prototype.convertGraphNodes = function (lstNodes) {\n var lstToReturn = [];\n var keys = Object.keys(lstNodes);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var k = keys_1[_i];\n if (lstNodes[k]) {\n var gnNode = lstNodes[k];\n var forceNode = new GraphForceNode(gnNode);\n gnNode.treeInfo.tag = forceNode;\n lstToReturn.push(gnNode);\n }\n }\n return lstToReturn;\n };\n /**\n * @private\n */\n SymmetricLayout.prototype.getForceNode = function (gnNode) {\n return gnNode.treeInfo.tag;\n };\n SymmetricLayout.prototype.updateNeigbour = function (vtSource, vtTarget) {\n if (vtTarget == null || vtSource == null) {\n return;\n }\n var distance = this.pointDistance(vtSource.location, vtTarget.location);\n var angle = this.lineAngle(vtSource.location, vtTarget.location);\n var normalDistance = (this.springLength * 0.9);\n if (distance < normalDistance) {\n this.calcForce(distance, normalDistance, angle, vtTarget);\n }\n };\n SymmetricLayout.prototype.lineAngle = function (pt1, pt2) {\n var radians = 0;\n var vx = pt2.x - pt1.x;\n var vy = pt2.y - pt1.y;\n if (vx === 0) {\n if (vy <= 0) {\n radians = (3.0 * Math.PI) / 2.0;\n }\n else {\n radians = Math.PI / 2.0;\n }\n }\n else if (vy === 0) {\n if (vx < 0) {\n radians = Math.PI;\n }\n else {\n radians = 0;\n }\n }\n else {\n radians = Math.atan(vy / vx);\n if (vx < 0 && vy > 0) {\n radians = Math.PI + radians;\n }\n else if (vx < 0 && vy < 0) {\n radians = Math.PI + radians;\n }\n else if (vx > 0 && vy < 0) {\n radians = 2.0 * Math.PI + radians;\n }\n }\n return radians;\n };\n SymmetricLayout.prototype.pointDistance = function (pt1, pt2) {\n var d = 0;\n var dx = pt2.x - pt1.x;\n var dy = pt2.y - pt1.y;\n var t = (dx * dx) + (dy * dy);\n if (t > 0) {\n d = Math.sqrt(t);\n }\n return d;\n };\n SymmetricLayout.prototype.calcRelatesForce = function (vtSource, vtTarget, normalDistance) {\n var distance = this.pointDistance(vtSource.location, vtTarget.location);\n var angle = this.lineAngle(vtSource.location, vtTarget.location);\n if (distance < normalDistance) {\n this.calcForce(distance, normalDistance, angle, vtTarget);\n }\n };\n /**\n * @private\n */\n SymmetricLayout.prototype.updateLayout = function (nodeCollection, connectors, symmetricLayout, nameTable, layout, viewPort) {\n var layoutManager = new GraphLayoutManager();\n layoutManager.updateLayout(nodeCollection, connectors, symmetricLayout, nameTable, layout, viewPort);\n };\n SymmetricLayout.prototype.calcNodesForce = function (vtSource, vtTarget) {\n var distance = this.pointDistance(vtSource.location, vtTarget.location);\n var angle = this.lineAngle(vtSource.location, vtTarget.location);\n if (distance > this.springLength || distance < this.springLength) {\n this.calcForce(distance, this.springLength, angle, vtTarget);\n }\n };\n SymmetricLayout.prototype.calcForce = function (distance, minDist, angle, vtTarget) {\n var count = vtTarget.nodes.length;\n var length = distance - minDist;\n var factor = this.springFactor / (count * count) * Math.sqrt(count);\n if (length !== 0) {\n var fVelocity = length * factor;\n var fOffset = fVelocity;\n var offsetX = Math.cos(angle) * fOffset;\n var offsetY = Math.sin(angle) * fOffset;\n vtTarget.velocityX -= offsetX;\n vtTarget.velocityY -= offsetY;\n }\n };\n return SymmetricLayout;\n}());\nexport { SymmetricLayout };\nvar GraphLayoutManager = /** @class */ (function () {\n function GraphLayoutManager() {\n this.visitedStack = [];\n this.cycleEdgesCollection = [];\n this.graphObjects = [];\n this.passedNodes = [];\n }\n /**\n * @private\n */\n GraphLayoutManager.prototype.updateLayout = function (nodeCollection, connectors, symmetricLayout, nameTable, layout, viewPort) {\n this.nameTable = nameTable;\n this.nodes = nodeCollection;\n this.connectors = connectors;\n var selectionList = nodeCollection;\n if (selectionList.length > 0) {\n this.mhelperSelectedNode = cloneObject(selectionList[0]);\n }\n for (var _i = 0, nodeCollection_1 = nodeCollection; _i < nodeCollection_1.length; _i++) {\n var node = nodeCollection_1[_i];\n var nodeGraphObject = void 0;\n nodeGraphObject = node;\n nodeGraphObject.treeInfo = {};\n nodeGraphObject.treeInfo.graphType = 'Node';\n this.graphObjects.push(nodeGraphObject);\n }\n for (var _a = 0, connectors_1 = connectors; _a < connectors_1.length; _a++) {\n var connector = connectors_1[_a];\n var connectorGraphObject = void 0;\n connectorGraphObject = connector;\n connectorGraphObject.treeInfo = {};\n connectorGraphObject.treeInfo.graphType = 'Connector';\n this.graphObjects.push(connectorGraphObject);\n }\n this.updateLayout1(this.graphObjects, symmetricLayout);\n var modelBounds = this.getModelBounds(selectionList);\n for (var i = 0; i < selectionList.length; i++) {\n var node = selectionList[i];\n var trnsX = (viewPort.x - modelBounds.width) / 2;\n var margin = layout.margin || {};\n var marginX = void 0;\n var marginY = void 0;\n margin.left = margin.left || 0;\n margin.right = margin.right || 0;\n margin.top = margin.top || 0;\n margin.bottom = margin.bottom || 0;\n if (layout.margin.left) {\n margin.left = layout.margin.left;\n }\n if (layout.margin.top) {\n margin.top = layout.margin.top;\n }\n var dx = (node.treeInfo.tag.location.x - (node.offsetX - (node.actualSize.width / 2)) -\n modelBounds.x + trnsX + margin.left);\n var dy = (node.treeInfo.tag.location.y - (node.offsetY - (node.actualSize.height / 2)) - modelBounds.y + margin.top);\n node.offsetX += dx;\n node.offsetY += dy;\n delete node.treeInfo;\n }\n return true;\n };\n /**\n * @private\n */\n GraphLayoutManager.prototype.getModelBounds = function (lNodes) {\n lNodes = lNodes.slice();\n var rect = null;\n var rect1 = null;\n var node;\n for (var i = 0; i < lNodes.length; i++) {\n node = lNodes[i];\n var bounds = getGraphBounds(node);\n rect = new Rect(node.treeInfo.tag ? node.treeInfo.tag.location.x : bounds.x, node.treeInfo.tag ? node.treeInfo.tag.location.y : bounds.y, node.actualSize.width, node.actualSize.height);\n if (rect1) {\n rect1 = rect1.uniteRect(rect);\n }\n else {\n rect1 = rect;\n }\n }\n return rect1;\n };\n GraphLayoutManager.prototype.updateLayout1 = function (nodesToLayout, symmetricLayout) {\n this.detectCyclesInGraph(nodesToLayout);\n var nodesCount = nodesToLayout.length;\n if (nodesCount > 0) {\n var cycleConnColln = [];\n var nodes = [];\n var nodeSymbols = [];\n for (var s = 0; s < nodesToLayout.length; s++) {\n var nd = nodesToLayout[s];\n if (nd.treeInfo.isCycleEdge === undefined) {\n nd.treeInfo.isCycleEdge = false;\n }\n if (nd.treeInfo.graphType === 'Connector' && !nd.treeInfo.isCycleEdge) {\n nodes.push(nd);\n }\n else if (nd.treeInfo.graphType === 'Connector') {\n cycleConnColln.push(nd);\n }\n else {\n nodeSymbols.push(nd);\n }\n }\n nodes = nodes.concat(nodeSymbols);\n nodes = cycleConnColln.concat(nodes);\n while (nodesCount > this.dictionaryLength(this.passedNodes)) {\n this.getNodesToPosition(nodes);\n if (this.selectedNode == null) {\n continue;\n }\n symmetricLayout.doLayout(this);\n this.selectedNode = null;\n this.visitedStack = [];\n for (var _i = 0, _a = this.cycleEdgesCollection; _i < _a.length; _i++) {\n var connector = _a[_i];\n connector.treeInfo.isCycleEdge = false;\n }\n }\n this.passedNodes = null;\n this.selectedNode = null;\n }\n return false;\n };\n GraphLayoutManager.prototype.getNodesToPosition = function (nodes) {\n for (var i = 0; i < nodes.length; i++) {\n var node = nodes[i];\n if (!collectionContains(node.id, this.passedNodes)) {\n if (node) {\n this.selectNodes(node);\n }\n break;\n }\n }\n };\n GraphLayoutManager.prototype.selectNodes = function (node) {\n var nodeGraph = node;\n if (node.treeInfo.graphType === 'Connector') {\n this.exploreGraphEdge(node);\n }\n else if (nodeGraph != null) {\n if (this.addNode(node, 'passed')) {\n this.addNode(node, 'selected');\n if (this.isConnectedToAnotherNode(nodeGraph)) {\n this.selectedNode = { treeInfo: {} };\n this.selectedNode.treeInfo.LeftMargin = 10;\n this.selectedNode.treeInfo.TopMargin = 10;\n this.selectConnectedNodes(nodeGraph);\n }\n else {\n this.selectedNode = node;\n }\n }\n }\n };\n GraphLayoutManager.prototype.selectConnectedNodes = function (nodeGraph) {\n var graph = this.selectedNode;\n if (!graph.treeInfo.GraphNodes) {\n graph.treeInfo.GraphNodes = {};\n }\n var node = nodeGraph;\n if (node != null && this.addNode(node, 'passed')) {\n var nodeName = node.id;\n if (!this.dictionaryContains(graph.treeInfo.GraphNodes, node)) {\n var gnNode = this.addGraphNode(node);\n this.getConnectedRelatives(gnNode);\n this.exploreRelatives(nodeGraph);\n }\n else {\n var graphNode = graph.treeInfo.GraphNodes[nodeName];\n if (graphNode.treeInfo.Added) {\n graphNode.treeInfo.Added = false;\n this.getConnectedRelatives(graphNode);\n this.exploreRelatives(nodeGraph);\n }\n }\n }\n };\n GraphLayoutManager.prototype.exploreRelatives = function (nodeGraph) {\n this.exploreRelatives1(nodeGraph, 'Parents');\n this.exploreRelatives1(nodeGraph, 'Children');\n };\n GraphLayoutManager.prototype.exploreRelatives1 = function (nodeGraph, relativesToExplore) {\n var edges = [];\n if (relativesToExplore === 'Parents') {\n edges = nodeGraph.inEdges;\n }\n else if (relativesToExplore === 'Children') {\n edges = nodeGraph.outEdges;\n }\n for (var i = 0; i < edges.length; i++) {\n var edge = this.nameTable[edges[i]];\n if (this.addNode(edge, 'passed')) {\n var fromNode = this.nameTable[edge.sourceID];\n var toNode = this.nameTable[edge.targetID];\n if (relativesToExplore === 'Parents' && fromNode != null &&\n collectionContains(fromNode.id, this.nodes)) {\n this.selectConnectedNodes(this.nameTable[edge.sourceID]);\n }\n else if (relativesToExplore === 'Children' && toNode != null &&\n collectionContains(toNode.id, this.nodes)) {\n this.selectConnectedNodes(this.nameTable[edge.targetID]);\n }\n }\n }\n };\n GraphLayoutManager.prototype.getConnectedRelatives = function (graphNode) {\n this.getConnectedParents(graphNode);\n this.getConnectedChildren(graphNode);\n };\n GraphLayoutManager.prototype.dictionaryContains = function (obj, keyObj) {\n var keys = Object.keys(obj);\n for (var i = 0; i < keys.length; i++) {\n if (keys[i] === keyObj.id) {\n return true;\n }\n }\n return false;\n };\n GraphLayoutManager.prototype.dictionaryLength = function (obj) {\n var keys = Object.keys(obj);\n return keys.length;\n };\n GraphLayoutManager.prototype.getConnectedChildren = function (graphNode) {\n var graph = this.selectedNode;\n var nodeGraph = graphNode;\n for (var s = 0; s < nodeGraph.outEdges.length; s++) {\n var edge = this.nameTable[nodeGraph.outEdges[s]];\n if (!edge.treeInfo.isCycleEdge) {\n var node = this.nameTable[edge.targetID];\n if (collectionContains(node.id, this.nodes) && node != null && node.visible) {\n var gnNodeChildren = void 0;\n if (!this.dictionaryContains(graph.treeInfo.GraphNodes, node)) {\n gnNodeChildren = this.addGraphNode(node);\n gnNodeChildren.treeInfo.Added = true;\n }\n else {\n gnNodeChildren = graph.treeInfo.GraphNodes[node.id];\n }\n if (!graphNode.treeInfo.children) {\n graphNode.treeInfo.children = [];\n }\n if (!gnNodeChildren.treeInfo.parents) {\n gnNodeChildren.treeInfo.parents = [];\n }\n this.setNode(gnNodeChildren.treeInfo.parents, graphNode);\n if (this.findNode(graphNode.treeInfo.children, gnNodeChildren.id) < 0) {\n graphNode.treeInfo.children.push(gnNodeChildren);\n }\n }\n }\n }\n };\n GraphLayoutManager.prototype.getConnectedParents = function (graphNode) {\n var graph = this.selectedNode;\n var nodeGraph = graphNode;\n for (var s = 0; s < nodeGraph.inEdges.length; s++) {\n var edge = this.nameTable[nodeGraph.inEdges[s]];\n if (!edge.treeInfo.isCycleEdge) {\n var node = this.nameTable[edge.sourceID];\n if (collectionContains(node.id, this.nodes) && node != null && node.visible) {\n var gnNode = void 0;\n if (!this.dictionaryContains(graph.treeInfo.GraphNodes, node)) {\n gnNode = this.addGraphNode(node);\n gnNode.treeInfo.Added = true;\n }\n else {\n gnNode = graph.treeInfo.GraphNodes[node.id];\n }\n if (!graphNode.treeInfo.parents) {\n graphNode.treeInfo.parents = [];\n }\n if (!gnNode.treeInfo.children) {\n gnNode.treeInfo.children = [];\n }\n this.setNode(gnNode.treeInfo.children, graphNode);\n if (this.findNode(graphNode.treeInfo.parents, gnNode.id) < 0) {\n graphNode.treeInfo.parents.push(gnNode);\n }\n }\n }\n }\n };\n GraphLayoutManager.prototype.setNode = function (list, node) {\n var nIndex = this.findNode(list, node.id);\n if (nIndex >= 0 && nIndex < list.length) {\n list[nIndex] = node;\n }\n else {\n list.push(node);\n }\n };\n GraphLayoutManager.prototype.findNode = function (list, fullName) {\n var nIndex = -1;\n if (list != null && fullName !== '') {\n for (var i = 0, nLength = list.length; i < nLength; i++) {\n var gnNode = list[i];\n if (typeof (gnNode) === 'string' && gnNode === fullName) {\n nIndex = i;\n break;\n }\n else if (gnNode != null && gnNode.id === fullName) {\n nIndex = i;\n break;\n }\n }\n }\n return nIndex;\n };\n GraphLayoutManager.prototype.addGraphNode = function (node) {\n var graph = this.selectedNode;\n if (!graph.treeInfo.GraphNodes) {\n graph.treeInfo.GraphNodes = {};\n }\n var gnNode = node;\n if (graph != null) {\n graph.treeInfo.GraphNodes[gnNode.id] = gnNode;\n var nodeHelper = this.mhelperSelectedNode;\n if (nodeHelper != null && node.id === nodeHelper.id) {\n this.mhelperSelectedNode = gnNode;\n }\n }\n return gnNode;\n };\n GraphLayoutManager.prototype.isConnectedToAnotherNode = function (gnNode) {\n var bFoundConnectedNode = false;\n var edges = (gnNode.inEdges).concat(gnNode.outEdges);\n if (edges.length > 0) {\n if ((gnNode.inEdges != null) && (gnNode.inEdges.length > 0)) {\n bFoundConnectedNode = this.searchEdgeCollection(gnNode.inEdges, 'FromNode');\n }\n if ((!bFoundConnectedNode) && (gnNode.outEdges != null) && (gnNode.outEdges.length > 0)) {\n bFoundConnectedNode = this.searchEdgeCollection(gnNode.outEdges, 'ToNode');\n }\n }\n return bFoundConnectedNode;\n };\n GraphLayoutManager.prototype.searchEdgeCollection = function (edgesToSearchThrough, connectionDirection) {\n var bFoundConnectedNode = false;\n for (var i = 0; i < edgesToSearchThrough.length - 1; i++) {\n var edge = this.nameTable[edgesToSearchThrough[i]];\n if (!this.addNode(edge, 'passed')) {\n continue;\n }\n if (!edge.treeInfo.isCycleEdge && ((connectionDirection === 'FromNode' && this.nameTable[edge.sourceID] != null)\n || (connectionDirection === 'ToNode' && this.nameTable[edge.targetID] != null))) {\n bFoundConnectedNode = true;\n break;\n }\n }\n return bFoundConnectedNode;\n };\n GraphLayoutManager.prototype.exploreGraphEdge = function (node) {\n var nodeLink = node;\n if (nodeLink != null && !nodeLink.treeInfo.isCycleEdge && this.addNode(node, 'passed')) {\n this.addNode(node, 'selected');\n var fromNode = this.nameTable[nodeLink.sourceID];\n var toNode = this.nameTable[nodeLink.targetID];\n if (fromNode != null) {\n this.selectNodes(fromNode);\n }\n else if (toNode != null) {\n this.selectNodes(toNode);\n }\n else {\n this.selectedNode = node;\n }\n }\n };\n GraphLayoutManager.prototype.addNode = function (nodeToAdd, collectionToAdd) {\n var bResult = true;\n var node = nodeToAdd;\n if (collectionToAdd === 'passed' || !node.visible) {\n if (!this.dictionaryContains(this.passedNodes, node)) {\n this.passedNodes[node.id] = node;\n }\n }\n if (!node.visible) {\n return false;\n }\n return bResult;\n };\n GraphLayoutManager.prototype.detectCyclesInGraph = function (nodes) {\n var vertex = [];\n var currentStack = [];\n for (var k = 0; k < nodes.length; k++) {\n if (!(nodes[k].treeInfo.graphType === 'Connector')) {\n vertex.push(nodes[k]);\n }\n }\n if (vertex.length > 0) {\n currentStack.push(vertex[0]);\n this.visitedStack.push(vertex[0]);\n while (currentStack.length > 0) {\n var top_1 = currentStack[currentStack.length - 1];\n var childNodes = this.getUnVisitedChildNodes(top_1);\n if (childNodes.length > 0) {\n var child = childNodes[0];\n var currentEdge = childNodes[childNodes.length - 1];\n if (collectionContains(child.id, this.visitedStack)) {\n currentEdge.treeInfo.isCycleEdge = true;\n this.cycleEdgesCollection.push(currentEdge);\n }\n else {\n currentStack.push(child);\n this.visitedStack.splice(0, 0, child);\n }\n }\n else {\n currentStack.pop();\n }\n }\n }\n };\n GraphLayoutManager.prototype.getUnVisitedChildNodes = function (top) {\n var childNodes = [];\n if (top.outEdges.length > 0) {\n for (var i = 0; i < top.outEdges.length; i++) {\n var con = this.nameTable[top.outEdges[i]];\n if (!collectionContains(con.id, this.visitedStack)) {\n var toNode = this.nameTable[con.targetID];\n if (toNode != null) {\n childNodes.push(toNode);\n }\n childNodes.push(con);\n this.visitedStack.splice(0, 0, con);\n return childNodes;\n }\n }\n return childNodes;\n }\n return childNodes;\n };\n return GraphLayoutManager;\n}());\nexport { GraphLayoutManager };\nfunction getGraphBounds(node) {\n var x = node.offsetX - node.actualSize.width * node.pivot.x;\n var y = node.offsetY - node.actualSize.height * node.pivot.y;\n return new Rect(x, y, node.actualSize.width, node.actualSize.height);\n}\nfunction collectionContains(id, coll) {\n for (var i = 0; i < coll.length; i++) {\n if (coll[i].id === id) {\n return true;\n }\n }\n return false;\n}\n","/**\n * IncrementalSearch module file\n */\nvar queryString = '';\nvar prevString = '';\nvar matches = [];\nvar activeClass = 'e-active';\n/**\n * Search and focus the list item based on key code matches with list text content\n * @param { number } keyCode - Specifies the key code which pressed on keyboard events.\n * @param { HTMLElement[]] } items - Specifies an array of HTMLElement, from which matches find has done.\n * @param { number } selectedIndex - Specifies the selected item in list item, so that search will happen\n * after selected item otherwise it will do from initial.\n * @param { boolean } ignoreCase - Specifies the case consideration when search has done.\n */\nexport function incrementalSearch(keyCode, items, selectedIndex, ignoreCase) {\n queryString += String.fromCharCode(keyCode);\n setTimeout(function () { queryString = ''; }, 1000);\n var index;\n queryString = ignoreCase ? queryString.toLowerCase() : queryString;\n if (prevString === queryString) {\n for (var i = 0; i < matches.length; i++) {\n if (matches[i].classList.contains(activeClass)) {\n index = i;\n break;\n }\n }\n index = index + 1;\n return matches[index];\n }\n else {\n var listItems = items;\n var strLength = queryString.length;\n var text = void 0;\n var item = void 0;\n selectedIndex = selectedIndex ? selectedIndex + 1 : 0;\n var i = selectedIndex;\n matches = [];\n do {\n if (i === listItems.length) {\n i = -1;\n }\n i === -1 ? index = 0 : index = i;\n item = listItems[index];\n text = ignoreCase ? item.innerText.toLowerCase() : item.innerText;\n if (text.substr(0, strLength) === queryString) {\n matches.push(listItems[index]);\n }\n i++;\n } while (i !== selectedIndex);\n prevString = queryString;\n return matches[0];\n }\n}\nexport function Search(inputVal, items, searchType, ignoreCase) {\n var listItems = items;\n ignoreCase = ignoreCase !== undefined && ignoreCase !== null ? ignoreCase : true;\n var itemData = { item: null, index: null };\n if (inputVal.length) {\n var strLength = inputVal.length;\n var queryStr = ignoreCase ? inputVal.toLocaleLowerCase() : inputVal;\n for (var i = 0, itemsData = listItems; i < itemsData.length; i++) {\n var item = itemsData[i];\n var text = (ignoreCase ? item.textContent.toLocaleLowerCase() : item.textContent).replace(/^\\s+|\\s+$/g, '');\n if ((searchType === 'Equal' && text === queryStr) || (searchType === 'StartsWith' && text.substr(0, strLength) === queryStr)) {\n itemData.item = item;\n itemData.index = i;\n return { item: item, index: i };\n }\n }\n return itemData;\n }\n return itemData;\n}\n","/**\n * Function helps to find which highlightSearch is to call based on your data.\n * @param {HTMLElement} element - Specifies an li element.\n * @param {string} query - Specifies the string to be highlighted.\n * @param {boolean} ignoreCase - Specifies the ignoreCase option.\n * @param {HightLightType} type - Specifies the type of highlight.\n */\nexport function highlightSearch(element, query, ignoreCase, type) {\n if (query === '') {\n return;\n }\n else {\n var ignoreRegex = ignoreCase ? 'gim' : 'gm';\n query = /^[a-zA-Z0-9- ]*$/.test(query) ? query : query.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&');\n var replaceQuery = type === 'StartsWith' ? '^(' + query + ')' : type === 'EndsWith' ? '(' + query + ')$' : '(' + query + ')';\n var pattern = new RegExp(replaceQuery, ignoreRegex);\n element.innerHTML = element.innerHTML.replace(pattern, '$1');\n }\n}\n/**\n * Function helps to remove highlighted element based on your data.\n * @param {HTMLElement} content - Specifies an content element.\n */\nexport function revertHighlightSearch(content) {\n var contentElement = content.querySelectorAll('.e-highlight');\n for (var i = contentElement.length - 1; i >= 0; i--) {\n var parent_1 = contentElement[i].parentNode;\n var text = document.createTextNode(contentElement[i].textContent);\n parent_1.replaceChild(text, contentElement[i]);\n }\n}\n","/**\n * FloatLable Moduel\n * Specifies whether to display the floating label above the input element.\n */\nimport { removeClass, addClass, detach } from '@syncfusion/ej2-base';\nimport { attributes, isNullOrUndefined, createElement } from '@syncfusion/ej2-base';\nvar FLOATLINE = 'e-float-line';\nvar FLOATTEXT = 'e-float-text';\nvar LABELTOP = 'e-label-top';\nvar LABELBOTTOM = 'e-label-bottom';\n/**\n * Function to create Float Label element.\n * @param overAllWrapper - overall wrapper of multiselect.\n * @param element - the given html element.\n * @param inputElement - specify the input wrapper.\n * @param value - Value of the MultiSelect.\n * @param floatLabelType - Specify the FloatLabel Type.\n * @param placeholder - Specify the PlaceHolder text.\n */\nexport function createFloatLabel(overAllWrapper, searchWrapper, element, inputElement, value, floatLabelType, placeholder) {\n var floatLinelement;\n var floatLabelElement;\n floatLinelement = createElement('span', { className: FLOATLINE });\n floatLabelElement = createElement('label', { className: FLOATTEXT });\n if (!isNullOrUndefined(element.id) && element.id !== '') {\n floatLabelElement.id = 'label_' + element.id.replace(/ /g, '_');\n attributes(element, { 'aria-labelledby': floatLabelElement.id });\n }\n if (!isNullOrUndefined(inputElement.placeholder) && inputElement.placeholder !== '') {\n floatLabelElement.innerHTML = inputElement.placeholder;\n inputElement.removeAttribute('placeholder');\n }\n if (!isNullOrUndefined(placeholder) && placeholder !== '') {\n floatLabelElement.innerHTML = placeholder;\n }\n searchWrapper.appendChild(floatLinelement);\n searchWrapper.appendChild(floatLabelElement);\n overAllWrapper.classList.add('e-float-input');\n updateFloatLabelState(value, floatLabelElement);\n if (floatLabelType === 'Always') {\n if (floatLabelElement.classList.contains(LABELBOTTOM)) {\n removeClass([floatLabelElement], LABELBOTTOM);\n }\n addClass([floatLabelElement], LABELTOP);\n }\n}\n/**\n * Function to update status of the Float Label element.\n * @param value - Value of the MultiSelect.\n * @param label - float label element.\n */\nexport function updateFloatLabelState(value, label) {\n if (value && value.length > 0) {\n addClass([label], LABELTOP);\n removeClass([label], LABELBOTTOM);\n }\n else {\n removeClass([label], LABELTOP);\n addClass([label], LABELBOTTOM);\n }\n}\n/**\n * Function to remove Float Label element.\n * @param overAllWrapper - overall wrapper of multiselect.\n * @param componentWrapper - wrapper element of multiselect.\n * @param searchWrapper - search wrapper of multiselect.\n * @param inputElement - specify the input wrapper.\n * @param value - Value of the MultiSelect.\n * @param floatLabelType - Specify the FloatLabel Type.\n * @param placeholder - Specify the PlaceHolder text.\n */\nexport function removeFloating(overAllWrapper, componentWrapper, searchWrapper, inputElement, value, floatLabelType, placeholder) {\n var placeholderElement = componentWrapper.querySelector('.' + FLOATTEXT);\n var floatLine = componentWrapper.querySelector('.' + FLOATLINE);\n var placeholderText;\n if (!isNullOrUndefined(placeholderElement)) {\n placeholderText = placeholderElement.innerText;\n detach(searchWrapper.querySelector('.' + FLOATTEXT));\n setPlaceHolder(value, inputElement, placeholderText);\n if (!isNullOrUndefined(floatLine)) {\n detach(searchWrapper.querySelector('.' + FLOATLINE));\n }\n }\n else {\n placeholderText = (placeholder !== null) ? placeholder : '';\n setPlaceHolder(value, inputElement, placeholderText);\n }\n overAllWrapper.classList.remove('e-float-input');\n}\n/**\n * Function to set the placeholder to the element.\n * @param value - Value of the MultiSelect.\n * @param inputElement - specify the input wrapper.\n * @param placeholder - Specify the PlaceHolder text.\n */\nexport function setPlaceHolder(value, inputElement, placeholder) {\n if (value && value.length) {\n inputElement.placeholder = '';\n }\n else {\n inputElement.placeholder = placeholder;\n }\n}\n/**\n * Function for focusing the Float Element.\n * @param overAllWrapper - overall wrapper of multiselect.\n * @param componentWrapper - wrapper element of multiselect.\n */\nexport function floatLabelFocus(overAllWrapper, componentWrapper) {\n overAllWrapper.classList.add('e-input-focus');\n var label = componentWrapper.querySelector('.' + FLOATTEXT);\n if (!isNullOrUndefined(label)) {\n addClass([label], LABELTOP);\n if (label.classList.contains(LABELBOTTOM)) {\n removeClass([label], LABELBOTTOM);\n }\n }\n}\n/**\n * Function to focus the Float Label element.\n * @param overAllWrapper - overall wrapper of multiselect.\n * @param componentWrapper - wrapper element of multiselect.\n * @param value - Value of the MultiSelect.\n * @param floatLabelType - Specify the FloatLabel Type.\n * @param placeholder - Specify the PlaceHolder text.\n */\nexport function floatLabelBlur(overAllWrapper, componentWrapper, value, floatLabelType, placeholder) {\n overAllWrapper.classList.remove('e-input-focus');\n var label = componentWrapper.querySelector('.' + FLOATTEXT);\n if (value && value.length <= 0 && floatLabelType === 'Auto' && !isNullOrUndefined(label)) {\n if (label.classList.contains(LABELTOP)) {\n removeClass([label], LABELTOP);\n }\n addClass([label], LABELBOTTOM);\n }\n}\n","import { ChildProperty, compile as baseTemplateComplier, setValue } from '@syncfusion/ej2-base';\nimport { extend as baseExtend, isNullOrUndefined, getValue, classList } from '@syncfusion/ej2-base';\nimport { setStyleAttribute, addClass, attributes, remove, createElement, removeClass } from '@syncfusion/ej2-base';\nimport { DataUtil, Query, DataManager, Predicate } from '@syncfusion/ej2-data';\nimport { Column } from '../models/column';\nimport { calculateRelativeBasedPosition, calculatePosition } from '@syncfusion/ej2-popups';\n//https://typescript.codeplex.com/discussions/401501\n/**\n * Function to check whether target object implement specific interface\n * @param {Object} target\n * @param {string} checkFor\n * @returns no\n * @hidden\n */\nexport function doesImplementInterface(target, checkFor) {\n /* tslint:disable:no-any */\n return target.prototype && checkFor in target.prototype;\n}\n/**\n * Function to get value from provided data\n * @param {string} field\n * @param {Object} data\n * @param {IColumn} column\n * @hidden\n */\nexport function valueAccessor(field, data, column) {\n field = isNullOrUndefined(field) ? '' : field;\n return getValue(field, data);\n}\n/**\n * The function used to update Dom using requestAnimationFrame.\n * @param {Function} fn - Function that contains the actual action\n * @return {Promise}\n * @hidden\n */\nexport function getUpdateUsingRaf(updateFunction, callBack) {\n requestAnimationFrame(function () {\n try {\n callBack(null, updateFunction());\n }\n catch (e) {\n callBack(e);\n }\n });\n}\n/**\n * @hidden\n */\nexport function iterateArrayOrObject(collection, predicate) {\n var result = [];\n for (var i = 0, len = collection.length; i < len; i++) {\n var pred = predicate(collection[i], i);\n if (!isNullOrUndefined(pred)) {\n result.push(pred);\n }\n }\n return result;\n}\n/** @hidden */\nexport function templateCompiler(template) {\n if (template) {\n var e = void 0;\n try {\n if (document.querySelectorAll(template).length) {\n return baseTemplateComplier(document.querySelector(template).innerHTML.trim());\n }\n }\n catch (e) {\n return baseTemplateComplier(template);\n }\n }\n return undefined;\n}\n/** @hidden */\nexport function setStyleAndAttributes(node, customAttributes) {\n var copyAttr = {};\n var literals = ['style', 'class'];\n //Dont touch the original object - make a copy\n baseExtend(copyAttr, customAttributes, {});\n if ('style' in copyAttr) {\n setStyleAttribute(node, copyAttr[literals[0]]);\n delete copyAttr[literals[0]];\n }\n if ('class' in copyAttr) {\n addClass([node], copyAttr[literals[1]]);\n delete copyAttr[literals[1]];\n }\n attributes(node, copyAttr);\n}\n/** @hidden */\nexport function extend(copied, first, second, exclude) {\n var moved = baseExtend(copied, first, second);\n Object.keys(moved).forEach(function (value, index) {\n if (exclude.indexOf(value) !== -1) {\n delete moved[value];\n }\n });\n return moved;\n}\n/** @hidden */\nexport function prepareColumns(columns, autoWidth) {\n for (var c = 0, len = columns.length; c < len; c++) {\n var column = void 0;\n if (typeof columns[c] === 'string') {\n column = new Column({ field: columns[c] });\n }\n else if (!(columns[c] instanceof Column)) {\n if (!columns[c].columns) {\n column = new Column(columns[c]);\n }\n else {\n column = new Column(columns[c]);\n columns[c].columns = prepareColumns(columns[c].columns);\n }\n }\n else {\n column = columns[c];\n }\n column.headerText = isNullOrUndefined(column.headerText) ? column.foreignKeyValue || column.field || '' : column.headerText;\n column.foreignKeyField = column.foreignKeyField || column.field;\n column.valueAccessor = column.valueAccessor || valueAccessor;\n column.width = autoWidth && isNullOrUndefined(column.width) ? 200 : column.width;\n if (isNullOrUndefined(column.visible)) {\n column.visible = true;\n }\n columns[c] = column;\n }\n return columns;\n}\n/** @hidden */\nexport function setCssInGridPopUp(popUp, e, className) {\n var popUpSpan = popUp.querySelector('span');\n var position = popUp.parentElement.getBoundingClientRect();\n var targetPosition = e.target.getBoundingClientRect();\n var isBottomTail;\n popUpSpan.className = className;\n popUp.style.display = '';\n isBottomTail = (isNullOrUndefined(e.clientY) ? e.changedTouches[0].clientY :\n e.clientY) > popUp.offsetHeight + 10;\n popUp.style.top = targetPosition.top - position.top +\n (isBottomTail ? -(popUp.offsetHeight + 10) : popUp.offsetHeight + 10) + 'px'; //10px for tail element\n popUp.style.left = getPopupLeftPosition(popUp, e, targetPosition, position.left) + 'px';\n if (isBottomTail) {\n popUp.querySelector('.e-downtail').style.display = '';\n popUp.querySelector('.e-uptail').style.display = 'none';\n }\n else {\n popUp.querySelector('.e-downtail').style.display = 'none';\n popUp.querySelector('.e-uptail').style.display = '';\n }\n}\n/** @hidden */\nfunction getPopupLeftPosition(popup, e, targetPosition, left) {\n var width = popup.offsetWidth / 2;\n var x = getPosition(e).x;\n if (x - targetPosition.left < width) {\n return targetPosition.left - left;\n }\n else if (targetPosition.right - x < width) {\n return targetPosition.right - left - width * 2;\n }\n else {\n return x - left - width;\n }\n}\n/** @hidden */\nexport function getActualProperties(obj) {\n if (obj instanceof ChildProperty) {\n return getValue('properties', obj);\n }\n else {\n return obj;\n }\n}\n/** @hidden */\nexport function parentsUntil(elem, selector, isID) {\n var parent = elem;\n while (parent) {\n if (isID ? parent.id === selector : parent.classList.contains(selector)) {\n break;\n }\n parent = parent.parentElement;\n }\n return parent;\n}\n/** @hidden */\nexport function getElementIndex(element, elements) {\n var index = -1;\n for (var i = 0, len = elements.length; i < len; i++) {\n if (elements[i].isEqualNode(element)) {\n index = i;\n break;\n }\n }\n return index;\n}\n/** @hidden */\nexport function inArray(value, collection) {\n for (var i = 0, len = collection.length; i < len; i++) {\n if (collection[i] === value) {\n return i;\n }\n }\n return -1;\n}\n/** @hidden */\nexport function getActualPropFromColl(collection) {\n var coll = [];\n for (var i = 0, len = collection.length; i < len; i++) {\n if (collection[i].hasOwnProperty('properties')) {\n coll.push(collection[i].properties);\n }\n else {\n coll.push(collection[i]);\n }\n }\n return coll;\n}\n/** @hidden */\nexport function removeElement(target, selector) {\n var elements = [].slice.call(target.querySelectorAll(selector));\n for (var i = 0; i < elements.length; i++) {\n remove(elements[i]);\n }\n}\n/** @hidden */\nexport function getPosition(e) {\n var position = {};\n position.x = (isNullOrUndefined(e.clientX) ? e.changedTouches[0].clientX :\n e.clientX);\n position.y = (isNullOrUndefined(e.clientY) ? e.changedTouches[0].clientY :\n e.clientY);\n return position;\n}\nvar uid = 0;\n/** @hidden */\nexport function getUid(prefix) {\n return prefix + uid++;\n}\n/** @hidden */\nexport function appendChildren(elem, children) {\n for (var i = 0, len = children.length; i < len; i++) {\n if (len === children.length) {\n elem.appendChild(children[i]);\n }\n else {\n elem.appendChild(children[0]);\n }\n }\n return elem;\n}\n/** @hidden */\nexport function parents(elem, selector, isID) {\n var parent = elem;\n var parents = [];\n while (parent) {\n if (isID ? parent.id === selector : parent.classList.contains(selector)) {\n parents.push(parent);\n }\n parent = parent.parentElement;\n }\n return parents;\n}\n/** @hidden */\nexport function calculateAggregate(type, data, column, context) {\n if (type === 'Custom') {\n return column.customAggregate ? column.customAggregate.call(context, data, column) : '';\n }\n return column.field in data ? DataUtil.aggregates[type.toLowerCase()](data, column.field) : null;\n}\n/** @hidden */\nvar scrollWidth = null;\n/** @hidden */\nexport function getScrollBarWidth() {\n if (scrollWidth !== null) {\n return scrollWidth;\n }\n var divNode = document.createElement('div');\n var value = 0;\n divNode.style.cssText = 'width:100px;height: 100px;overflow: scroll;position: absolute;top: -9999px;';\n document.body.appendChild(divNode);\n value = (divNode.offsetWidth - divNode.clientWidth) | 0;\n document.body.removeChild(divNode);\n return scrollWidth = value;\n}\n/** @hidden */\nvar rowHeight;\n/** @hidden */\nexport function getRowHeight(element) {\n if (rowHeight !== undefined) {\n return rowHeight;\n }\n var table = createElement('table', { className: 'e-table', styles: 'visibility: hidden' });\n table.innerHTML = 'A';\n element.appendChild(table);\n var rect = table.querySelector('td').getBoundingClientRect();\n element.removeChild(table);\n rowHeight = Math.ceil(rect.height);\n return rowHeight;\n}\n/** @hidden */\nexport function isComplexField(field) {\n return field.split('.').length > 1;\n}\n/** @hidden */\nexport function getComplexFieldID(field) {\n var length = field.split('.').length;\n var splits = field.split('.');\n var fieldName = '';\n for (var i = 0; i < length; i++) {\n fieldName = fieldName + splits[i];\n }\n return fieldName;\n}\n/** @hidden */\nexport function getComplexValue(rowData, field) {\n var length = field.split('.').length;\n var splits = field.split('.');\n var complexData = rowData[splits[0]];\n var complexValue = complexData[splits[1]];\n for (var i = 2; i < length; i++) {\n complexValue = complexValue[splits[i]];\n }\n return complexValue;\n}\n/** @hidden */\nexport function isEditable(col, type, elem) {\n var row = parentsUntil(elem, 'e-row');\n var isOldRow = !row ? true : row && !row.classList.contains('e-insertedrow');\n if (type === 'beginEdit' && isOldRow) {\n if (col.isIdentity || col.isPrimaryKey || !col.allowEditing) {\n return false;\n }\n return true;\n }\n else if (type === 'add' && col.isIdentity && col.isPrimaryKey) {\n return false;\n }\n else {\n if (isOldRow && !col.allowEditing && !col.isIdentity && !col.isPrimaryKey) {\n return false;\n }\n return true;\n }\n}\n/** @hidden */\nexport function isActionPrevent(inst) {\n var dlg = inst.element.querySelector('#' + inst.element.id + 'EditConfirm');\n return inst.editSettings.mode === 'Batch' &&\n (inst.element.querySelectorAll('.e-updatedtd').length) && inst.editSettings.showConfirmDialog &&\n (dlg ? dlg.classList.contains('e-popup-close') : true);\n}\n/** @hidden */\nexport function wrap(elem, action) {\n var clName = 'e-wrap';\n elem = elem instanceof Array ? elem : [elem];\n for (var i = 0; i < elem.length; i++) {\n action ? elem[i].classList.add(clName) : elem[i].classList.remove(clName);\n }\n}\nexport function changeButtonType(target) {\n var elements = [].slice.call(target.querySelectorAll('button'));\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var button = elements_1[_i];\n attributes(button, { type: 'button' });\n }\n}\n/** @hidden */\nexport function setFormatter(serviceLocator, column) {\n var fmtr = serviceLocator.getService('valueFormatter');\n switch (column.type) {\n case 'date':\n column.setFormatter(fmtr.getFormatFunction({ type: 'date', skeleton: column.format }));\n column.setParser(fmtr.getParserFunction({ type: 'date', skeleton: column.format }));\n break;\n case 'datetime':\n column.setFormatter(fmtr.getFormatFunction({ type: 'dateTime', skeleton: column.format }));\n column.setParser(fmtr.getParserFunction({ type: 'dateTime', skeleton: column.format }));\n break;\n case 'number':\n column.setFormatter(fmtr.getFormatFunction({ format: column.format }));\n column.setParser(fmtr.getParserFunction({ format: column.format }));\n break;\n }\n}\n/** @hidden */\nexport function addRemoveActiveClasses(cells, add) {\n var args = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n args[_i - 2] = arguments[_i];\n }\n for (var i = 0, len = cells.length; i < len; i++) {\n if (add) {\n classList(cells[i], args.slice(), []);\n cells[i].setAttribute('aria-selected', 'true');\n }\n else {\n classList(cells[i], [], args.slice());\n cells[i].removeAttribute('aria-selected');\n }\n }\n}\n/** @hidden */\nexport function distinctStringValues(result) {\n var temp = {};\n var res = [];\n for (var i = 0; i < result.length; i++) {\n if (!(result[i] in temp)) {\n res.push(result[i].toString());\n temp[result[i]] = 1;\n }\n }\n return res;\n}\n/** @hidden */\nexport function getFilterMenuPostion(target, dialogObj, grid) {\n var elementVisible = dialogObj.element.style.display;\n dialogObj.element.style.display = 'block';\n var dlgWidth = dialogObj.width;\n var newpos;\n if (!grid.enableRtl) {\n newpos = calculateRelativeBasedPosition(target, dialogObj.element);\n dialogObj.element.style.display = elementVisible;\n dialogObj.element.style.top = (newpos.top + target.getBoundingClientRect().height) - 5 + 'px';\n var leftPos = ((newpos.left - dlgWidth) + target.clientWidth);\n if (leftPos < 1) {\n dialogObj.element.style.left = (dlgWidth + leftPos) - 16 + 'px'; // right calculation\n }\n else {\n dialogObj.element.style.left = leftPos + -4 + 'px';\n }\n }\n else {\n newpos = calculatePosition(target, 'left', 'bottom');\n dialogObj.element.style.top = (newpos.top + target.getBoundingClientRect().height) - 35 + 'px';\n dialogObj.element.style.display = elementVisible;\n var leftPos = ((newpos.left - dlgWidth) + target.clientWidth);\n if (leftPos < 1) {\n dialogObj.element.style.left = (dlgWidth + leftPos) + -16 + 'px';\n }\n else {\n dialogObj.element.style.left = leftPos - 16 + 'px';\n }\n }\n}\n/** @hidden */\nexport function getZIndexCalcualtion(args, dialogObj) {\n args.popup.element.style.zIndex = (dialogObj.zIndex + 1).toString();\n}\n/** @hidden */\nexport function toogleCheckbox(elem) {\n var span = elem.querySelector('.e-frame');\n span.classList.contains('e-check') ? classList(span, ['e-uncheck'], ['e-check']) :\n classList(span, ['e-check'], ['e-uncheck']);\n}\n/** @hidden */\nexport function createCboxWithWrap(uid, elem, className) {\n var div = createElement('div', { className: className });\n div.appendChild(elem);\n div.setAttribute('uid', uid);\n return div;\n}\n/** @hidden */\nexport function removeAddCboxClasses(elem, checked) {\n removeClass([elem], ['e-check', 'e-stop', 'e-uncheck']);\n if (checked) {\n elem.classList.add('e-check');\n }\n else {\n elem.classList.add('e-uncheck');\n }\n}\n/**\n * Refresh the Row model's foreign data.\n * @param row - Grid Row model object.\n * @param columns - Foreign columns array.\n * @param data - Updated Row data.\n * @hidden\n */\nexport function refreshForeignData(row, columns, data) {\n columns.forEach(function (col) {\n setValue(col.field, getForeignData(col, data), row.foreignKeyData);\n });\n row.cells.forEach(function (cell) {\n if (cell.isForeignKey) {\n setValue('foreignKeyData', getValue(cell.column.field, row.foreignKeyData), cell);\n }\n });\n}\n/**\n * Get the foreign data for the corresponding cell value.\n * @param column - Foreign Key column\n * @param data - Row data.\n * @param lValue - cell value.\n * @param foreignData - foreign data source.\n * @hidden\n */\nexport function getForeignData(column, data, lValue, foreignKeyData) {\n var fField = column.foreignKeyField;\n var key = (lValue || valueAccessor(column.field, data, column));\n key = isNullOrUndefined(key) ? '' : key;\n var query = new Query();\n var fdata = foreignKeyData || (column.dataSource instanceof DataManager) && column.dataSource.dataSource.offline ?\n column.dataSource.dataSource.json : column.columnData;\n if (key.getDay) {\n query.where(getDatePredicate({ field: fField, operator: 'equal', value: key, matchCase: false }));\n }\n else {\n query.where(fField, '==', key, false);\n }\n return new DataManager(fdata).executeLocal(query);\n}\n/**\n * To use to get the column's object by the foreign key value.\n * @param foreignKeyValue - Defines ForeignKeyValue.\n * @param columns - Array of column object.\n * @hidden\n */\nexport function getColumnByForeignKeyValue(foreignKeyValue, columns) {\n var column;\n return columns.some(function (col) {\n column = col;\n return col.foreignKeyValue === foreignKeyValue;\n }) && column;\n}\n/**\n * @hidden\n * @param filterObject - Defines predicate model object\n */\nexport function getDatePredicate(filterObject) {\n var datePredicate;\n var prevDate;\n var nextDate;\n var prevObj = baseExtend({}, getActualProperties(filterObject));\n var nextObj = baseExtend({}, getActualProperties(filterObject));\n var value = new Date(filterObject.value);\n if (filterObject.operator === 'equal' || filterObject.operator === 'notequal') {\n prevDate = new Date(value.setHours(0) - 1);\n nextDate = new Date(value.setHours(24));\n prevObj.value = prevDate;\n nextObj.value = nextDate;\n if (filterObject.operator === 'equal') {\n prevObj.operator = 'greaterthan';\n nextObj.operator = 'lessthan';\n }\n else if (filterObject.operator === 'notequal') {\n prevObj.operator = 'lessthanorequal';\n nextObj.operator = 'greaterthanorequal';\n }\n var predicateSt = new Predicate(prevObj.field, prevObj.operator, prevObj.value, false);\n var predicateEnd = new Predicate(nextObj.field, nextObj.operator, nextObj.value, false);\n datePredicate = filterObject.operator === 'equal' ? predicateSt.and(predicateEnd) : predicateSt.or(predicateEnd);\n }\n else {\n if (typeof (prevObj.value) === 'string') {\n prevObj.value = new Date(prevObj.value);\n }\n var predicates = new Predicate(prevObj.field, prevObj.operator, prevObj.value, false);\n datePredicate = predicates;\n }\n if (filterObject.setProperties) {\n filterObject.setProperties({ ejpredicate: datePredicate }, true);\n }\n else {\n filterObject.ejpredicate = datePredicate;\n }\n return datePredicate;\n}\n/**\n * @hidden\n */\nexport function renderMovable(ele, frzCols) {\n var mEle = ele.cloneNode(true);\n for (var i = 0; i < frzCols; i++) {\n mEle.removeChild(mEle.children[0]);\n }\n for (var i = frzCols, len = ele.childElementCount; i < len; i++) {\n ele.removeChild(ele.children[ele.childElementCount - 1]);\n }\n return mEle;\n}\n","/**\n * AriaService\n * @hidden\n */\nvar AriaService = /** @class */ (function () {\n function AriaService() {\n }\n AriaService.prototype.setOptions = function (target, options) {\n var props = Object.keys(options);\n props.forEach(function (name) { return setStateAndProperties(target, config[name], options[name]); });\n };\n AriaService.prototype.setExpand = function (target, expand) {\n setStateAndProperties(target, config.expand, expand);\n };\n AriaService.prototype.setSort = function (target, direction) {\n setStateAndProperties(target, config.sort, direction, typeof direction === 'boolean');\n };\n AriaService.prototype.setBusy = function (target, isBusy) {\n setStateAndProperties(target, config.busy, isBusy);\n setStateAndProperties(target, config.invalid, null, true);\n };\n AriaService.prototype.setGrabbed = function (target, isGrabbed, remove) {\n setStateAndProperties(target, config.grabbed, isGrabbed, remove);\n };\n AriaService.prototype.setDropTarget = function (target, isTarget) {\n setStateAndProperties(target, config.dropeffect, 'copy', !isTarget);\n };\n return AriaService;\n}());\nexport { AriaService };\n/**\n * @hidden\n */\nfunction setStateAndProperties(target, attribute, value, remove) {\n if (remove) {\n target.removeAttribute(attribute);\n return;\n }\n if (target) {\n target.setAttribute(attribute, value);\n }\n}\nvar config = {\n expand: 'aria-expanded',\n role: 'role',\n selected: 'aria-selected',\n multiselectable: 'aria-multiselectable',\n sort: 'aria-sort',\n busy: 'aria-busy',\n invalid: 'aria-invalid',\n grabbed: 'aria-grabbed',\n dropeffect: 'aria-dropeffect',\n haspopup: 'aria-haspopup',\n level: 'aria-level',\n colcount: 'aria-colcount'\n};\n","import { remove } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\nimport { uiUpdate, initialEnd, dataReady, modelChanged } from '../base/constant';\nimport { FooterRenderer } from '../renderer/footer-renderer';\nimport { SummaryCellRenderer } from '../renderer/summary-cell-renderer';\nimport { GroupSummaryModelGenerator, CaptionSummaryModelGenerator } from '../services/summary-model-generator';\n/**\n * Summary Action controller.\n */\nvar Aggregate = /** @class */ (function () {\n function Aggregate(parent, locator) {\n this.parent = parent;\n this.locator = locator;\n this.addEventListener();\n }\n Aggregate.prototype.getModuleName = function () {\n return 'aggregate';\n };\n Aggregate.prototype.initiateRender = function () {\n var _this = this;\n var cellFac = this.locator.getService('cellRendererFactory');\n var instance = new SummaryCellRenderer(this.parent, this.locator);\n [CellType.Summary, CellType.CaptionSummary, CellType.GroupSummary].forEach(function (type) {\n return cellFac.addCellRenderer(type, instance);\n });\n this.footerRenderer = new FooterRenderer(this.parent, this.locator);\n this.footerRenderer.renderPanel();\n this.footerRenderer.renderTable();\n this.locator.register('footerRenderer', this.footerRenderer);\n var fn = function () {\n _this.prepareSummaryInfo();\n _this.parent.off(dataReady, fn);\n };\n this.parent.on(dataReady, fn, this);\n this.parent.on(dataReady, this.footerRenderer.refresh, this.footerRenderer);\n };\n Aggregate.prototype.prepareSummaryInfo = function () {\n var _this = this;\n summaryIterator(this.parent.aggregates, function (column) {\n var dataColumn = _this.parent.getColumnByField(column.field) || {};\n var type = dataColumn.type;\n column.setPropertiesSilent({ format: _this.getFormatFromType(column.format, type) });\n column.setFormatter();\n column.setPropertiesSilent({ columnName: column.columnName || column.field });\n });\n };\n Aggregate.prototype.getFormatFromType = function (format, type) {\n if (isNullOrUndefined(type) || typeof format !== 'string') {\n return format;\n }\n var obj;\n switch (type) {\n case 'number':\n obj = { format: format };\n break;\n case 'date':\n obj = { type: type, skeleton: format };\n break;\n case 'datetime':\n obj = { type: 'dateTime', skeleton: format };\n break;\n }\n return obj;\n };\n Aggregate.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName()) {\n return;\n }\n if (isNullOrUndefined(this.footerRenderer)) {\n this.initiateRender();\n }\n this.prepareSummaryInfo();\n this.footerRenderer.refresh();\n var cModel = new CaptionSummaryModelGenerator(this.parent);\n var gModel = new GroupSummaryModelGenerator(this.parent);\n if (gModel.getData().length !== 0 || !cModel.isEmpty()) {\n this.parent.notify(modelChanged, {});\n }\n };\n Aggregate.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(initialEnd, this.initiateRender, this);\n this.parent.on(uiUpdate, this.onPropertyChanged, this);\n };\n Aggregate.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.footerRenderer.removeEventListener();\n this.parent.off(initialEnd, this.initiateRender);\n this.parent.off(dataReady, this.footerRenderer.refresh);\n this.parent.off(uiUpdate, this.onPropertyChanged);\n };\n Aggregate.prototype.destroy = function () {\n this.removeEventListener();\n remove(this.parent.element.querySelector('.e-gridfooter'));\n };\n return Aggregate;\n}());\nexport { Aggregate };\n/**\n * @private\n */\nexport function summaryIterator(aggregates, callback) {\n aggregates.forEach(function (row) {\n row.columns.forEach(function (column) {\n callback(column, row);\n });\n });\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { SvgRenderer, remove, createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { RgbColor } from '../utils/colorMapping';\n/**\n * Helper method for heatmap\n */\n/** @private */\nexport function stringToNumber(value, containerSize) {\n if (value !== null && value !== undefined) {\n return value.indexOf('%') !== -1 ? (containerSize / 100) * parseInt(value, 10) : parseInt(value, 10);\n }\n return null;\n}\n/**\n * Function to measure the height and width of the text.\n * @private\n */\nexport function measureText(text, font) {\n var htmlObject = document.getElementById('heatmapmeasuretext');\n if (htmlObject === null) {\n htmlObject = createElement('text', { id: 'heatmapmeasuretext' });\n document.body.appendChild(htmlObject);\n }\n htmlObject.innerHTML = text;\n htmlObject.style.position = 'absolute';\n htmlObject.style.visibility = 'hidden';\n htmlObject.style.fontSize = font.size;\n htmlObject.style.fontWeight = font.fontWeight;\n htmlObject.style.fontStyle = font.fontStyle;\n htmlObject.style.fontFamily = font.fontFamily;\n htmlObject.style.top = '-100';\n htmlObject.style.left = '0';\n htmlObject.style.whiteSpace = 'nowrap';\n // For bootstrap line height issue\n htmlObject.style.lineHeight = 'normal';\n return new Size(htmlObject.clientWidth, htmlObject.clientHeight);\n}\n/** @private */\nvar TextElement = /** @class */ (function () {\n function TextElement(fontModel, fontColor) {\n this['font-size'] = fontModel.size;\n this['font-style'] = fontModel.fontStyle;\n this['font-family'] = fontModel.fontFamily;\n this['font-weight'] = fontModel.fontWeight;\n this.fill = fontColor ? fontColor : '';\n }\n return TextElement;\n}());\nexport { TextElement };\nexport function titlePositionX(width, leftPadding, rightPadding, titleStyle) {\n var positionX;\n if (titleStyle.textAlignment === 'Near') {\n positionX = leftPadding;\n }\n else if (titleStyle.textAlignment === 'Center') {\n positionX = leftPadding + width / 2;\n }\n else {\n positionX = width - rightPadding;\n }\n return positionX;\n}\n/**\n * Internal class size for height and width\n */\nvar Size = /** @class */ (function () {\n function Size(width, height) {\n this.width = width;\n this.height = height;\n }\n return Size;\n}());\nexport { Size };\n/** @private */\nvar CustomizeOption = /** @class */ (function () {\n function CustomizeOption(id) {\n this.id = id;\n }\n return CustomizeOption;\n}());\nexport { CustomizeOption };\n/** @private */\nvar PathOption = /** @class */ (function (_super) {\n __extends(PathOption, _super);\n function PathOption(id, fill, width, color, opacity, dashArray, d) {\n var _this = _super.call(this, id) || this;\n _this.opacity = opacity;\n _this.fill = fill;\n _this.stroke = color ? color : '';\n _this['stroke-width'] = width;\n _this['stroke-dasharray'] = dashArray;\n _this.d = d;\n return _this;\n }\n return PathOption;\n}(CustomizeOption));\nexport { PathOption };\n/**\n * Class to define currentRect private property.\n * @private\n */\nvar CurrentRect = /** @class */ (function () {\n function CurrentRect(x, y, width, height, value, id) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n this.value = value;\n this.id = id;\n }\n return CurrentRect;\n}());\nexport { CurrentRect };\n/**\n * Class to define property to draw rectangle.\n * @private\n */\nvar RectOption = /** @class */ (function (_super) {\n __extends(RectOption, _super);\n function RectOption(id, fill, border, opacity, rect, borderColor, rx, ry, transform, dashArray) {\n var _this = _super.call(this, id, fill, border.width, borderColor, opacity, dashArray) || this;\n _this.y = rect.y;\n _this.x = rect.x;\n _this.height = rect.height;\n _this.width = rect.width;\n _this.rx = rx ? rx : 0;\n _this.ry = ry ? ry : 0;\n _this.transform = transform ? transform : '';\n return _this;\n }\n return RectOption;\n}(PathOption));\nexport { RectOption };\n/**\n * Helper Class to define property to draw rectangle.\n * @private\n */\nvar Rect = /** @class */ (function () {\n function Rect(x, y, width, height) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n return Rect;\n}());\nexport { Rect };\n/**\n * Class to define property to draw text.\n * @private\n */\nvar TextOption = /** @class */ (function (_super) {\n __extends(TextOption, _super);\n function TextOption(id, basic, element, fontColor) {\n var _this = _super.call(this, element, fontColor) || this;\n _this.transform = '';\n _this['dominant-baseline'] = 'auto';\n _this.labelRotation = 0;\n _this.baseline = 'auto';\n _this.id = id;\n _this.x = basic.x;\n _this.y = basic.y;\n _this['text-anchor'] = basic['text-anchor'];\n _this.text = basic.text;\n _this.transform = basic.transform;\n _this.labelRotation = basic.labelRotation;\n _this['dominant-baseline'] = basic['dominant-baseline'];\n _this.baseline = basic.baseline;\n return _this;\n }\n return TextOption;\n}(TextElement));\nexport { TextOption };\n/**\n * Helper Class to define property to draw text.\n * @private\n */\nvar TextBasic = /** @class */ (function () {\n function TextBasic(x, y, anchor, text, labelRotation, transform, baseLine) {\n this.transform = '';\n this['dominant-baseline'] = 'auto';\n this.labelRotation = 0;\n this.baseline = 'auto';\n this.x = x ? x : 0;\n this.y = y ? y : 0;\n this['text-anchor'] = anchor ? anchor : '';\n this.text = text ? text : '';\n this.transform = transform ? transform : '';\n this.labelRotation = labelRotation;\n this['dominant-baseline'] = baseLine ? baseLine : '';\n this.baseline = baseLine ? baseLine : '';\n }\n return TextBasic;\n}());\nexport { TextBasic };\n/**\n * Class to define property to draw line.\n * @private\n */\nvar Line = /** @class */ (function () {\n function Line(x1, y1, x2, y2) {\n this.x1 = x1;\n this.y1 = y1;\n this.x2 = x2;\n this.y2 = y2;\n }\n return Line;\n}());\nexport { Line };\n/**\n * Class to define property to draw line.\n * @private\n */\nvar LineOption = /** @class */ (function (_super) {\n __extends(LineOption, _super);\n function LineOption(id, line, stroke, strokewidth, opacity, dasharray) {\n var _this = _super.call(this, id, null, strokewidth, stroke, opacity, dasharray, null) || this;\n _this.x1 = line.x1;\n _this.y1 = line.y1;\n _this.x2 = line.x2;\n _this.y2 = line.y2;\n return _this;\n }\n return LineOption;\n}(PathOption));\nexport { LineOption };\n/** @private */\nexport function sum(values) {\n var sum = 0;\n for (var _i = 0, values_1 = values; _i < values_1.length; _i++) {\n var value = values_1[_i];\n sum += value;\n }\n return sum;\n}\nexport function titlePositionY(heatmapSize, topPadding, bottomPadding, titleStyle) {\n var positionY;\n if (titleStyle.textAlignment === 'Near') {\n positionY = heatmapSize.height - bottomPadding;\n }\n else if (titleStyle.textAlignment === 'Center') {\n positionY = heatmapSize.height / 2;\n }\n else {\n positionY = topPadding;\n }\n return positionY;\n}\n/** @private */\nexport function rotateTextSize(font, text, angle) {\n var renderer = new SvgRenderer('heatmapMeasureRotateText');\n var svgObject = renderer.createSvg({ id: 'heatmapMeasureRotateText_svg', width: 100, height: 100 });\n var box;\n var options;\n var htmlObject;\n options = {\n 'font-size': font.size,\n 'font-style': font.fontStyle,\n 'font-family': font.fontFamily,\n 'font-weight': font.fontWeight,\n 'transform': 'rotate(' + angle + ', 0, 0)',\n 'text-anchor': 'middle'\n };\n htmlObject = renderer.createText(options, text);\n svgObject.appendChild(htmlObject);\n document.body.appendChild(svgObject);\n box = htmlObject.getBoundingClientRect();\n remove(svgObject);\n return new Size((box.right - box.left), (box.bottom - box.top));\n}\n/**\n * Class to draw SVG and Canvas Rectangle & Text.\n * @private\n */\nvar DrawSvgCanvas = /** @class */ (function () {\n function DrawSvgCanvas(heatmap) {\n this.heatMap = heatmap;\n }\n //Svg & Canvas Rectangle Part\n DrawSvgCanvas.prototype.drawRectangle = function (properties, parentElement) {\n if (!this.heatMap.enableCanvasRendering) {\n parentElement.appendChild(this.heatMap.renderer.drawRectangle(properties));\n }\n else {\n this.drawCanvasRectangle(this.heatMap.canvasRenderer, properties);\n }\n };\n //Svg & Canvas Text Part\n DrawSvgCanvas.prototype.createText = function (properties, parentElement, text) {\n if (!this.heatMap.enableCanvasRendering) {\n parentElement.appendChild(this.heatMap.renderer.createText(properties, text));\n }\n else {\n this.canvasDrawText(properties, text);\n }\n };\n //Draw the wrapped text for both SVG & canvas\n DrawSvgCanvas.prototype.createWrapText = function (options, font, parentElement) {\n var renderOptions = {};\n var htmlObject;\n var tspanElement;\n var text;\n var height;\n renderOptions = {\n 'id': options.id,\n 'x': options.x,\n 'y': options.y,\n 'fill': options.fill,\n 'font-size': font.size,\n 'font-style': font.fontStyle,\n 'font-family': font.fontFamily,\n 'font-weight': font.fontWeight,\n 'text-anchor': options['text-anchor'],\n 'transform': options.transform,\n 'dominant-baseline': options['dominant-baseline']\n };\n text = options.text[0];\n if (!this.heatMap.enableCanvasRendering) {\n htmlObject = this.heatMap.renderer.createText(renderOptions, text);\n }\n else {\n this.heatMap.canvasRenderer.drawText(options, text);\n }\n if (typeof options.text !== 'string' && options.text.length > 1) {\n for (var i = 1, len = options.text.length; i < len; i++) {\n height = (measureText(options.text[i], font).height);\n if (!this.heatMap.enableCanvasRendering) {\n tspanElement = this.heatMap.renderer.createTSpan({\n 'x': options.x, 'id': options.id + i,\n 'y': (options.y) + (i * height)\n }, options.text[i]);\n htmlObject.appendChild(tspanElement);\n }\n else {\n options.id = options.id + i;\n options.y += height;\n this.heatMap.canvasRenderer.drawText(options, options.text[i]);\n }\n }\n }\n if (!this.heatMap.enableCanvasRendering) {\n parentElement.appendChild(htmlObject);\n }\n };\n DrawSvgCanvas.prototype.drawLine = function (properties, parentElement) {\n if (!this.heatMap.enableCanvasRendering) {\n parentElement.appendChild(this.heatMap.renderer.drawLine(properties));\n }\n else {\n this.heatMap.canvasRenderer.drawLine(properties);\n }\n };\n //Canvas Text Part\n DrawSvgCanvas.prototype.canvasDrawText = function (options, label, translateX, translateY) {\n var ctx = this.heatMap.canvasRenderer.ctx;\n if (!translateX) {\n translateX = options.x;\n }\n if (!translateY) {\n translateY = options.y;\n }\n var fontWeight = this.getOptionValue(options, 'font-weight');\n if (!isNullOrUndefined(fontWeight) && fontWeight.toLowerCase() === 'regular') {\n fontWeight = 'normal';\n }\n var fontFamily = this.getOptionValue(options, 'font-family');\n var fontSize = (options['font-size'].toString()).indexOf('px') === -1 ? options['font-size'] + 'px' : options['font-size'];\n var anchor = this.getOptionValue(options, 'text-anchor');\n var fontStyle = this.getOptionValue(options, 'font-style').toLowerCase();\n var font = (fontStyle + ' ' + fontWeight + ' ' + fontSize + ' ' + fontFamily);\n if (anchor === 'middle') {\n anchor = 'center';\n }\n ctx.save();\n ctx.fillStyle = options.fill;\n ctx.font = font;\n ctx.textAlign = anchor;\n if (options.baseline) {\n ctx.textBaseline = options.baseline;\n }\n ctx.translate(translateX, translateY);\n ctx.rotate(options.labelRotation * Math.PI / 180);\n ctx.fillText(label, options.x - translateX, options.y - translateY);\n ctx.restore();\n };\n // method to get the attributes value\n /* tslint:disable */\n DrawSvgCanvas.prototype.getOptionValue = function (options, key) {\n return options[key];\n };\n DrawSvgCanvas.prototype.setAttributes = function (canvas, options) {\n canvas.ctx.lineWidth = options['stroke-width'];\n var dashArray = options['stroke-dasharray'];\n if (!isNullOrUndefined(dashArray)) {\n var dashArrayString = dashArray.split(',');\n canvas.ctx.setLineDash([parseInt(dashArrayString[0], 10), parseInt(dashArrayString[1], 10)]);\n }\n canvas.ctx.strokeStyle = options['stroke'];\n };\n ;\n DrawSvgCanvas.prototype.drawCanvasRectangle = function (canvas, options) {\n var canvasCtx = canvas.ctx;\n var cornerRadius = options.rx;\n canvas.ctx.save();\n canvas.ctx.beginPath();\n canvas.ctx.globalAlpha = options['opacity'];\n this.setAttributes(canvas, options);\n canvas.ctx.rect(options.x, options.y, options.width, options.height);\n if (cornerRadius !== null && cornerRadius >= 0) {\n this.drawCornerRadius(canvas, options);\n }\n else {\n if (options.fill === 'none') {\n options.fill = 'transparent';\n }\n canvas.ctx.fillStyle = options.fill;\n canvas.ctx.fillRect(options.x, options.y, options.width, options.height);\n }\n if (options['stroke-width'] && options['stroke-width'] != 0) {\n canvas.ctx.stroke();\n }\n canvas.ctx.restore();\n canvas.ctx = canvasCtx;\n };\n ;\n // To draw the corner of a rectangle\n DrawSvgCanvas.prototype.drawCornerRadius = function (canvas, options) {\n var cornerRadius = options.rx;\n var x = options.x;\n var y = options.y;\n var width = options.width;\n var height = options.height;\n if (options.fill === 'none') {\n options.fill = 'transparent';\n }\n canvas.ctx.fillStyle = options.fill;\n if (width < 2 * cornerRadius) {\n cornerRadius = width / 2;\n }\n if (height < 2 * cornerRadius) {\n cornerRadius = height / 2;\n }\n canvas.ctx.beginPath();\n canvas.ctx.moveTo(x + width - cornerRadius, y);\n canvas.ctx.arcTo(x + width, y, x + width, y + height, cornerRadius);\n canvas.ctx.arcTo(x + width, y + height, x, y + height, cornerRadius);\n canvas.ctx.arcTo(x, y + height, x, y, cornerRadius);\n canvas.ctx.arcTo(x, y, x + width, y, cornerRadius);\n canvas.ctx.closePath();\n canvas.ctx.fill();\n };\n ;\n return DrawSvgCanvas;\n}());\nexport { DrawSvgCanvas };\nexport function getTitle(title, style, width) {\n var titleCollection = [];\n switch (style.textOverflow) {\n case 'Wrap':\n titleCollection = textWrap(title, width, style);\n break;\n case 'Trim':\n titleCollection.push(textTrim(width, title, style));\n break;\n default:\n titleCollection.push(textNone(width, title, style));\n break;\n }\n return titleCollection;\n}\nexport function textWrap(currentLabel, maximumWidth, font) {\n var textCollection = currentLabel.split(' ');\n var label = '';\n var labelCollection = [];\n var text;\n for (var i = 0, len = textCollection.length; i < len; i++) {\n text = textCollection[i];\n if (measureText(label.concat(text), font).width < maximumWidth) {\n label = label.concat((label === '' ? '' : ' ') + text);\n }\n else {\n if (label !== '') {\n labelCollection.push(textTrim(maximumWidth, label, font));\n label = text;\n }\n else {\n labelCollection.push(textTrim(maximumWidth, text, font));\n text = '';\n }\n }\n if (label && i === len - 1) {\n labelCollection.push(textTrim(maximumWidth, label, font));\n }\n }\n return labelCollection;\n}\n/** @private */\nexport function textTrim(maxWidth, text, font) {\n var label = text;\n var size = measureText(text, font).width;\n if (size > maxWidth) {\n var textLength = text.length;\n for (var index = textLength - 1; index >= 0; --index) {\n label = text.substring(0, index) + '...';\n size = measureText(label, font).width;\n if (size <= maxWidth) {\n return label;\n }\n }\n }\n return label;\n}\n/** @private */\nexport function textNone(maxWidth, text, font) {\n var label = text;\n var size = measureText(text, font).width;\n if (size > maxWidth) {\n var textLength = text.length;\n for (var i = textLength - 1; i >= 0; --i) {\n label = text.substring(0, i);\n size = measureText(label, font).width;\n if (size <= maxWidth) {\n return label;\n }\n }\n }\n return label;\n}\n/** @private */\nvar Gradient = /** @class */ (function () {\n function Gradient(x, x1, x2, y1, y2) {\n this.id = x;\n this.x1 = x1;\n this.x2 = x2;\n this.y1 = y1;\n this.y2 = y2;\n }\n return Gradient;\n}());\nexport { Gradient };\nvar GradientColor = /** @class */ (function () {\n function GradientColor(color, colorStop) {\n this.color = color;\n this.colorStop = colorStop;\n }\n return GradientColor;\n}());\nexport { GradientColor };\n/** @private */\nexport function showTooltip(text, x, y, areaWidth, id, element, isTouch) {\n var tooltip = document.getElementById(id);\n var width = measureText(text, {\n fontFamily: 'Segoe UI', size: '12px',\n fontStyle: 'Normal', fontWeight: 'Regular'\n }).width + 5;\n x = (x + width > areaWidth) ? x - width : x;\n x = x < 0 ? 5 : x;\n if (!tooltip) {\n tooltip = createElement('div', {\n innerHTML: text,\n id: id,\n styles: 'top:' + (y + 15).toString() + 'px;left:' + (x + 15).toString() +\n 'px;background-color: rgb(255, 255, 255) !important; color:black !important; ' +\n 'position:absolute;border:1px solid rgb(112, 112, 112); padding-left : 3px; padding-right : 2px;' +\n 'padding-bottom : 2px; padding-top : 2px; font-size:12px; font-family: Segoe UI'\n });\n element.appendChild(tooltip);\n }\n else {\n tooltip.innerHTML = text;\n tooltip.style.top = (y + 15).toString() + 'px';\n tooltip.style.left = (x + 15).toString() + 'px';\n }\n if (isTouch) {\n setTimeout(function () { removeElement(id); }, 1500);\n }\n}\n/** @private */\nexport function removeElement(id) {\n var element = getElement(id);\n if (element) {\n remove(element);\n }\n}\n/** @private */\nexport function getElement(id) {\n return document.getElementById(id);\n}\n/** @private */\nexport function increaseDateTimeInterval(value, interval, intervalType) {\n var result = new Date(value);\n interval = Math.ceil(interval);\n switch (intervalType) {\n case 'Years':\n result.setFullYear(result.getFullYear() + interval);\n break;\n case 'Months':\n result.setMonth(result.getMonth() + interval);\n break;\n case 'Days':\n result.setDate(result.getDate() + interval);\n break;\n case 'Hours':\n result.setHours(result.getHours() + interval);\n break;\n case 'Minutes':\n result.setMinutes(result.getMinutes() + interval);\n break;\n }\n return result;\n}\n/* private */\nvar CanvasTooltip = /** @class */ (function () {\n function CanvasTooltip(text, rect) {\n this.region = new Rect(0, 0, 0, 0);\n this.text = text;\n this.region = rect;\n }\n return CanvasTooltip;\n}());\nexport { CanvasTooltip };\n/* private*/\n/* Method to get the tool tip text in canvas based on region. */\nexport function getTooltipText(tooltipCollection, xPosition, yPosition) {\n var length = tooltipCollection.length;\n var tooltip;\n var region;\n var text;\n for (var i = 0; i < length; i++) {\n tooltip = tooltipCollection[i];\n region = tooltip.region;\n if (xPosition >= region.x && xPosition <= (region.x + region.width) && yPosition >= region.y && yPosition <= (region.y + region.height)) {\n text = tooltip.text;\n break;\n }\n }\n return text;\n}\n/**\n * @private\n */\nvar PaletterColor = /** @class */ (function () {\n function PaletterColor() {\n }\n return PaletterColor;\n}());\nexport { PaletterColor };\n/**\n * @private\n */\nvar GradientPointer = /** @class */ (function () {\n function GradientPointer(pathX1, pathY1, pathX2, pathY2, pathX3, pathY3) {\n this.pathX1 = pathX1;\n this.pathY1 = pathY1;\n this.pathX2 = pathX2;\n this.pathY2 = pathY2;\n this.pathX3 = pathX3;\n this.pathY3 = pathY3;\n }\n return GradientPointer;\n}());\nexport { GradientPointer };\n/** @private */\nexport function colorNameToHex(color) {\n var element;\n color = color === 'transparent' ? 'white' : color;\n element = document.getElementById('heatmapmeasuretext');\n element.style.color = color;\n color = window.getComputedStyle(element).color;\n var exp = /^(rgb|hsl)(a?)[(]\\s*([\\d.]+\\s*%?)\\s*,\\s*([\\d.]+\\s*%?)\\s*,\\s*([\\d.]+\\s*%?)\\s*(?:,\\s*([\\d.]+)\\s*)?[)]$/;\n var isRGBValue = exp.exec(color);\n return convertToHexCode(new RgbColor(parseInt(isRGBValue[3], 10), parseInt(isRGBValue[4], 10), parseInt(isRGBValue[5], 10)));\n}\n/** @private */\nexport function convertToHexCode(value) {\n return '#' + componentToHex(value.R) + componentToHex(value.G) + componentToHex(value.B);\n}\n/** @private */\nexport function componentToHex(value) {\n var hex = value.toString(16);\n return hex.length === 1 ? '0' + hex : hex;\n}\n/** @private */\nexport function convertHexToColor(hex) {\n var result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result ? new RgbColor(parseInt(result[1], 16), parseInt(result[2], 16), parseInt(result[3], 16)) :\n new RgbColor(255, 255, 255);\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { SvgRenderer, compile as templateComplier, remove, merge, createElement } from '@syncfusion/ej2-base';\n/**\n * Specifies Linear-Gauge Helper methods\n */\n/** @private */\nexport function stringToNumber(value, containerSize) {\n if (value !== null && value !== undefined) {\n return value.indexOf('%') !== -1 ? (containerSize / 100) * parseInt(value, 10) : parseInt(value, 10);\n }\n return null;\n}\n/**\n * Function to measure the height and width of the text.\n * @param {string} text\n * @param {FontModel} font\n * @param {string} id\n * @returns no\n * @private\n */\nexport function measureText(text, font) {\n var htmlObject = document.getElementById('gauge-measuretext');\n var size;\n if (htmlObject === null) {\n htmlObject = createElement('text', { id: 'gauge-measuretext' });\n document.body.appendChild(htmlObject);\n }\n htmlObject.innerHTML = text;\n htmlObject.style.position = 'absolute';\n htmlObject.style.fontSize = font.size;\n htmlObject.style.fontWeight = font.fontWeight;\n htmlObject.style.fontStyle = font.fontStyle;\n htmlObject.style.fontFamily = font.fontFamily;\n htmlObject.style.visibility = 'hidden';\n htmlObject.style.top = '-100';\n htmlObject.style.left = '0';\n htmlObject.style.whiteSpace = 'nowrap';\n size = new Size(htmlObject.clientWidth, htmlObject.clientHeight);\n //remove(htmlObject);\n return size;\n}\n/** @private */\nexport function withInRange(value, start, end, max, min, type) {\n var withIn;\n if (type === 'pointer') {\n withIn = (((value <= max) && (value >= min)));\n }\n else {\n withIn = (start != null && (start <= max) && (start >= min)) && (end != null && (end <= max) && (end >= min));\n }\n return withIn;\n}\nexport function convertPixelToValue(parentElement, pointerElement, orientation, axis, type, location) {\n var elementRect = parentElement.getBoundingClientRect();\n var pointerRect = pointerElement.getBoundingClientRect();\n var height = (pointerElement.id.indexOf('MarkerPointer') > -1) ? (pointerRect.height / 2) :\n (!axis.isInversed) ? 0 : pointerRect.height;\n var width = (pointerElement.id.indexOf('MarkerPointer') > -1) ? (pointerRect.width / 2) :\n (!axis.isInversed) ? pointerRect.width : 0;\n var size = new Size(axis.lineBounds.width, axis.lineBounds.height);\n var y = (type === 'drag') ? (location.y - axis.lineBounds.y) :\n ((pointerRect.top + height) - elementRect.top - axis.lineBounds.y);\n var x = (type === 'drag') ? (location.x - axis.lineBounds.x) :\n ((pointerRect.left + width) - elementRect.left - axis.lineBounds.x);\n var newSize = (orientation === 'Vertical') ? size.height : size.width;\n var divideVal = (orientation === 'Vertical') ? y : x;\n var value = (orientation === 'Vertical') ? (axis.isInversed) ? (divideVal / newSize) :\n (1 - (divideVal / newSize)) : (axis.isInversed) ? (1 - (divideVal / newSize)) : (divideVal / newSize);\n value = value * (axis.visibleRange.delta) + axis.visibleRange.min;\n return value;\n}\nexport function getPathToRect(path, size, parentElement) {\n var tempDiv = document.getElementById('gauge_path');\n if (tempDiv === null) {\n tempDiv = createElement('text', { id: 'gauge_path' });\n tempDiv.style.position = 'absolute';\n tempDiv.style.top = '0px';\n tempDiv.style.left = '0px';\n parentElement.appendChild(tempDiv);\n }\n var render = new SvgRenderer('id');\n var svg = render.createSvg({ id: 'box_path', width: size.width, height: size.height });\n svg.appendChild(path);\n tempDiv.appendChild(svg);\n var svgRect = path.getBBox();\n remove(tempDiv);\n return svgRect;\n}\n/** @private */\nexport function getElement(id) {\n return document.getElementById(id);\n}\n/** @private */\nexport function removeElement(id) {\n var element = getElement(id);\n if (element) {\n remove(element);\n }\n}\n/** @private */\nexport function isPointerDrag(axes) {\n var pointerEnable = false;\n axes.map(function (axis, index) {\n axis.pointers.map(function (pointer, index) {\n if (pointer.enableDrag) {\n pointerEnable = true;\n }\n });\n });\n return pointerEnable;\n}\n/** @private */\nexport function valueToCoefficient(value, axis, orientation, range) {\n var result = (value - range.min) / range.delta;\n result = (orientation === 'Vertical') ? (!axis.isInversed) ? (1 - result) : result : (!axis.isInversed) ? result : (1 - result);\n return result;\n}\nexport function getFontStyle(font) {\n var style = '';\n style = 'font-size:' + font.size +\n '; font-style:' + font.fontStyle + '; font-weight:' + font.fontWeight +\n '; font-family:' + font.fontFamily + ';opacity:' + font.opacity +\n '; color:' + font.color + ';';\n return style;\n}\n/** @private */\nexport function getLabelFormat(format) {\n var customLabelFormat = format && format.match('{value}') !== null;\n var skeleton = customLabelFormat ? '' : format;\n return skeleton;\n}\n/** @private */\nexport function getTemplateFunction(template) {\n var templateFn = null;\n var e;\n try {\n if (document.querySelectorAll(template).length) {\n templateFn = templateComplier(document.querySelector(template).innerHTML.trim());\n }\n }\n catch (e) {\n templateFn = templateComplier(template);\n }\n return templateFn;\n}\n/** @private */\nexport function getElementOffset(childElement, parentElement) {\n var width;\n var height;\n parentElement.appendChild(childElement);\n width = childElement.offsetWidth;\n height = childElement.offsetHeight;\n parentElement.removeChild(childElement);\n return new Size(width, height);\n}\n/** @private */\nvar VisibleRange = /** @class */ (function () {\n function VisibleRange(min, max, interval, delta) {\n this.min = min;\n this.max = max;\n this.interval = interval;\n this.delta = delta;\n }\n return VisibleRange;\n}());\nexport { VisibleRange };\n/** @private */\nvar GaugeLocation = /** @class */ (function () {\n function GaugeLocation(x, y) {\n this.x = x;\n this.y = y;\n }\n return GaugeLocation;\n}());\nexport { GaugeLocation };\n/**\n * Internal class size for height and width\n */\nvar Size = /** @class */ (function () {\n function Size(width, height) {\n this.width = width;\n this.height = height;\n }\n return Size;\n}());\nexport { Size };\n/** @private */\nvar Rect = /** @class */ (function () {\n function Rect(x, y, width, height) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n return Rect;\n}());\nexport { Rect };\n/** @private */\nvar CustomizeOption = /** @class */ (function () {\n function CustomizeOption(id) {\n this.id = id;\n }\n return CustomizeOption;\n}());\nexport { CustomizeOption };\n/** @private */\nvar PathOption = /** @class */ (function (_super) {\n __extends(PathOption, _super);\n function PathOption(id, fill, width, color, opacity, dashArray, d, transform) {\n if (transform === void 0) { transform = ''; }\n var _this = _super.call(this, id) || this;\n _this.opacity = opacity;\n _this.fill = fill;\n _this.stroke = color;\n _this['stroke-width'] = width;\n _this['stroke-dasharray'] = dashArray;\n _this.d = d;\n _this.transform = transform;\n return _this;\n }\n return PathOption;\n}(CustomizeOption));\nexport { PathOption };\n/** @private */\nvar RectOption = /** @class */ (function () {\n function RectOption(id, fill, border, opacity, rect, transform, dashArray) {\n this.opacity = opacity;\n this.id = id;\n this.y = rect.y;\n this.x = rect.x;\n this.fill = fill;\n this.stroke = border.color;\n this['stroke-width'] = border.width;\n this.height = rect.height;\n this.width = rect.width;\n }\n return RectOption;\n}());\nexport { RectOption };\n/** @private */\nvar TextOption = /** @class */ (function (_super) {\n __extends(TextOption, _super);\n function TextOption(id, x, y, anchor, text, transform, baseLine) {\n if (transform === void 0) { transform = ''; }\n var _this = _super.call(this, id) || this;\n _this.transform = '';\n _this.baseLine = 'auto';\n _this.x = x;\n _this.y = y;\n _this.anchor = anchor;\n _this.text = text;\n _this.transform = transform;\n _this.baseLine = baseLine;\n return _this;\n }\n return TextOption;\n}(CustomizeOption));\nexport { TextOption };\n/** @private */\nvar VisibleLabels = /** @class */ (function () {\n function VisibleLabels(text, value, size) {\n this.text = text;\n this.value = value;\n this.size = size;\n }\n return VisibleLabels;\n}());\nexport { VisibleLabels };\n/** @private */\nvar Align = /** @class */ (function () {\n function Align(axisIndex, align) {\n this.align = align;\n this.axisIndex = axisIndex;\n }\n return Align;\n}());\nexport { Align };\n/** @private */\nexport function textElement(options, font, color, parent) {\n var renderOptions = {};\n var htmlObject;\n var renderer = new SvgRenderer('');\n var style = 'fill:' + color + '; font-size:' + font.size +\n '; font-style:' + font.fontStyle + ' ; font-weight:' + font.fontWeight + '; font-family:' +\n font.fontFamily + '; text-anchor:' + options.anchor + '; transform:' + options.transform +\n '; opacity:' + font.opacity + '; dominant-baseline:' + options.baseLine + ';';\n renderOptions = {\n 'id': options.id,\n 'x': options.x,\n 'y': options.y,\n 'style': style\n };\n htmlObject = renderer.createText(renderOptions, options.text);\n parent.appendChild(htmlObject);\n return htmlObject;\n}\nexport function calculateNiceInterval(min, max, size, orientation) {\n var delta = max - min;\n var currentInterval;\n var intervalDivs = [10, 5, 2, 1];\n var desiredIntervalsCount = getActualDesiredIntervalsCount(size, orientation);\n var niceInterval = delta / desiredIntervalsCount;\n var minInterval = Math.pow(10, Math.floor(Math.log(niceInterval) / Math.log(10)));\n for (var _i = 0, intervalDivs_1 = intervalDivs; _i < intervalDivs_1.length; _i++) {\n var interval = intervalDivs_1[_i];\n currentInterval = minInterval * interval;\n if (desiredIntervalsCount < (delta / currentInterval)) {\n break;\n }\n niceInterval = currentInterval;\n }\n return niceInterval;\n}\nexport function getActualDesiredIntervalsCount(size, orientation) {\n var maximumLabels = 5;\n var desiredIntervalsCount = (orientation === 'Horizontal' ? 0.533 : 1) * maximumLabels;\n desiredIntervalsCount = Math.max((size * (desiredIntervalsCount / 100)), 1);\n return desiredIntervalsCount;\n}\n/** @private */\nexport function getPointer(target, gauge) {\n var split = [];\n var axisIndex;\n var radix = 10;\n var pointIndex;\n var axis;\n var pointer;\n split = target.id.split('_');\n axisIndex = parseInt(split[2], radix);\n pointIndex = parseInt(split[4], radix);\n axis = gauge.axes[axisIndex];\n pointer = gauge.axes[axisIndex].pointers[pointIndex];\n return { axis: axis, axisIndex: axisIndex, pointer: pointer, pointerIndex: pointIndex };\n}\n/** @private */\nexport function getRangeColor(value, ranges) {\n var rangeColor = null;\n ranges.forEach(function (range, index) {\n if (value >= range.start && range.end >= value) {\n rangeColor = range.interior;\n }\n });\n return rangeColor;\n}\n/** @private */\nexport function getRangePalette() {\n var palette = ['#ff5985', '#ffb133', '#fcde0b', '#27d5ff', '#50c917'];\n return palette;\n}\n/** @private */\nexport function calculateShapes(location, shape, size, url, options, orientation, axis, pointer) {\n var path;\n var width = size.width;\n var height = size.height;\n var locX = location.x;\n var locY = location.y;\n var radius;\n switch (shape) {\n case 'Circle':\n radius = ((width + height) / 4);\n locX = (orientation === 'Vertical') ? (!axis.opposedPosition) ? (pointer.placement !== 'Far') ? locX - radius : locX + radius :\n pointer.placement === 'Near' ? locX - radius : locX + radius : locX;\n locY = (orientation === 'Vertical') ? locY : (!axis.opposedPosition) ? (pointer.placement === 'Far') ?\n locY + radius : locY - radius : (pointer.placement === 'Near') ? locY - radius : locY + radius;\n merge(options, { 'r': radius, 'cx': locX, 'cy': locY });\n break;\n case 'Diamond':\n case 'Rectangle':\n locX = (orientation === 'Horizontal') ? ((locX - (width / 2))) : ((!axis.opposedPosition && pointer.placement !== 'Far') ||\n (axis.opposedPosition && pointer.placement === 'Near')) ? locX - width : locX;\n locY = (orientation === 'Vertical') ? locY : (!axis.opposedPosition) ?\n (pointer.placement === 'Far') ? locY + (height / 2) : locY - (height / 2) :\n (pointer.placement === 'Near') ? locY - (height / 2) : locY + (height / 2);\n if (shape === 'Diamond') {\n path = 'M' + ' ' + locX + ' ' + locY + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + ' ' + (locX + width) + ' ' + locY + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + locX + ' ' + locY + ' z';\n }\n else {\n path = 'M' + ' ' + locX + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + ' ' + (locX + width) + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + ' ' + (locX + width) + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + locX + ' ' + (locY - (height / 2)) + ' z';\n }\n merge(options, { 'd': path });\n break;\n case 'Triangle':\n if (orientation === 'Vertical') {\n path = 'M' + ' ' + locX + ' ' + locY + ' ' +\n 'L' + (locX - width) + ' ' + (locY - (height / 2)) +\n 'L' + (locX - width) + ' ' + (locY + (height / 2)) + ' Z';\n }\n else {\n path = 'M' + ' ' + locX + ' ' + locY + ' ' +\n 'L' + (locX + (width / 2)) + ' ' + (locY - height) +\n 'L' + (locX - (width / 2)) + ' ' + (locY - height) + ' Z';\n }\n merge(options, { 'd': path });\n break;\n case 'InvertedTriangle':\n if (orientation === 'Vertical') {\n path = 'M' + ' ' + locX + ' ' + locY + ' ' +\n 'L' + (locX + width) + ' ' + (locY - (height / 2)) +\n 'L' + (locX + width) + ' ' + (locY + (height / 2)) + ' Z';\n }\n else {\n path = 'M' + ' ' + locX + ' ' + locY + ' ' +\n 'L' + (locX + (width / 2)) + ' ' + (locY + height) +\n 'L' + (locX - (width / 2)) + ' ' + (locY + height) + ' Z';\n }\n merge(options, { 'd': path });\n break;\n case 'Arrow':\n if (orientation === 'Vertical') {\n path = 'M' + ' ' + locX + ' ' + locY + ' ' + 'L' + (locX - (width / 2)) + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + (locX - (width / 2)) + ' ' + ((locY - (height / 2)) + (height / 4)) + ' ' + 'L' + (locX - width) + ' '\n + ((locY - (height / 2)) + (height / 4)) + ' ' + 'L' + (locX - width) + ' ' + ((locY + (height / 2)) -\n (height / 4)) + ' ' + 'L' + (locX - (width / 2)) + ' ' + ((locY + (height / 2)) - (height / 4)) + ' ' +\n 'L' + (locX - (width / 2)) + ' ' + (locY + height / 2) + 'z';\n }\n else {\n path = 'M' + ' ' + locX + ' ' + locY + ' ' + 'L' + (locX + (width / 2)) + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + ((locX + (width / 2)) - (width / 4)) + ' ' + (locY - (height / 2)) + ' ' + 'L' + ((locX + (width / 2)) -\n (width / 4)) + ' ' + (locY - height) + ' ' + 'L' + ((locX - (width / 2)) + (width / 4)) + ' ' + (locY - height) +\n ' ' + 'L' + ((locX - (width / 2)) + (width / 4)) + ' ' + (locY - (height / 2)) + ' ' + 'L' + (locX - (width / 2))\n + ' ' + (locY - (height / 2)) + 'z';\n }\n merge(options, { 'd': path });\n break;\n case 'InvertedArrow':\n if (orientation === 'Vertical') {\n path = 'M' + ' ' + locX + ' ' + locY + 'L' + (locX + (width / 2)) + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + (locX + (width / 2)) + ' ' + ((locY - (height / 2)) + (height / 4)) + ' ' + 'L' + (locX + width) + ' '\n + ((locY - (height / 2)) + (height / 4)) + ' ' + 'L' + (locX + width) + ' ' + ((locY + (height / 2)) - (height / 4))\n + ' ' + 'L' + (locX + (width / 2)) + ' ' + ((locY + (height / 2)) - (height / 4)) + ' ' +\n 'L' + (locX + (width / 2)) + ' ' + (locY + height / 2) + 'z';\n }\n else {\n path = 'M' + ' ' + locX + ' ' + locY + ' ' + 'L' + (locX + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ((locX + (width / 2)) - (width / 4)) + ' ' + (locY + (height / 2)) + ' ' + 'L' + ((locX + (width / 2)) -\n (width / 4)) + ' ' + (locY + height) + ' ' + 'L' + ((locX - (width / 2)) + (width / 4)) + ' ' + (locY + height)\n + ' ' + 'L' + ((locX - (width / 2)) + (width / 4)) + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + (locX - (width / 2)) + ' ' + (locY + (height / 2)) + 'z';\n }\n merge(options, { 'd': path });\n break;\n case 'Image':\n merge(options, { 'href': url, 'height': height, 'width': width, x: locX - (width / 2), y: locY - (height / 2) });\n break;\n }\n return options;\n}\n/** @private */\nexport function getBox(location, boxName, orientation, size, type, containerWidth, axis, cornerRadius) {\n var path = ' ';\n var radius = cornerRadius;\n var x1;\n var y1;\n var rectWidth;\n var rectHeight;\n var bottomRadius;\n var topRadius;\n switch (boxName) {\n case 'RoundedRectangle':\n x1 = location.x;\n y1 = location.y;\n rectWidth = location.width;\n rectHeight = location.height;\n path = 'M' + ' ' + x1 + ' ' + (radius + y1) + ' Q ' + x1 + ' ' + y1 + ' ' + (x1 + radius) + ' ' + y1 + ' ';\n path += 'L' + ' ' + (x1 + rectWidth - radius) + ' ' + y1 + ' Q ' + (x1 + rectWidth) + ' ' + y1 + ' '\n + (x1 + rectWidth) + ' ' + (y1 + radius) + ' ';\n path += 'L ' + (x1 + rectWidth) + ' ' + (y1 + rectHeight - radius) + ' Q ' + (x1 + rectWidth) + ' ' + (y1 + rectHeight)\n + ' ' + (x1 + rectWidth - radius) + ' ' + (y1 + rectHeight) + ' ';\n path += ' L ' + (x1 + radius) + ' ' + (y1 + rectHeight) + ' Q ' + x1 + ' ' + (y1 + rectHeight)\n + ' ' + x1 + ' ' + (y1 + rectHeight - radius) + ' ';\n path += 'L' + ' ' + x1 + ' ' + (radius + y1) + ' ' + 'z';\n break;\n case 'Thermometer':\n var width = (orientation === 'Vertical') ? location.width : location.height;\n bottomRadius = width + ((width / 2) / Math.PI);\n topRadius = width / 2;\n if (orientation === 'Vertical') {\n var addValue = ((containerWidth + ((containerWidth / 2) / Math.PI)) - bottomRadius);\n var y1_1 = (type === 'bar') ? location.y + addValue : location.y;\n var locY = (type === 'bar') ? location.y + (topRadius - (topRadius / Math.PI)) : location.y;\n var locHeight = location.height;\n path = 'M' + location.x + ' ' + (y1_1 + locHeight) +\n ' A ' + bottomRadius + ' ' + bottomRadius + ', 0, 1, 0, ' + (location.x + location.width) + ' ' + (y1_1 + locHeight) +\n ' L ' + (location.x + location.width) + ' ' + locY +\n ' A ' + topRadius + ' ' + topRadius + ', 0, 1, 0, ' + location.x + ' ' + locY + ' z ';\n }\n else {\n var x1_1 = (type === 'bar' && !axis.isInversed) ?\n location.x - ((containerWidth + ((containerWidth / 2) / Math.PI)) - bottomRadius) : location.x;\n var locWidth = (type === 'bar') ? (location.width - (topRadius - ((topRadius / Math.PI)))) : location.width;\n path = 'M' + x1_1 + ' ' + (location.y) +\n ' A ' + bottomRadius + ' ' + bottomRadius + ', 0, 1, 0, ' + x1_1 + ' ' + (location.y + location.height) +\n ' L ' + ((type === 'bar' ? location.x : x1_1) + locWidth) + ' ' + (location.y + location.height) +\n ' A ' + topRadius + ' ' + topRadius + ', 0, 1, 0, ' +\n ((type === 'bar' ? location.x : x1_1) + locWidth) + ' ' + (location.y) + ' z ';\n }\n break;\n }\n return path;\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * Helper functions for maps control\n */\nimport { SvgRenderer, createElement, isNullOrUndefined, remove, compile as templateComplier, merge } from '@syncfusion/ej2-base';\nimport { Animation } from '@syncfusion/ej2-base';\nimport { animationComplete } from '../index';\n/**\n * Maps internal use of `Size` type\n * @private\n */\nvar Size = /** @class */ (function () {\n function Size(width, height) {\n this.width = width;\n this.height = height;\n }\n return Size;\n}());\nexport { Size };\n/**\n * To find number from string\n * @private\n */\nexport function stringToNumber(value, containerSize) {\n if (value !== null && value !== undefined) {\n return value.indexOf('%') !== -1 ? (containerSize / 100) * parseInt(value, 10) : parseInt(value, 10);\n }\n return null;\n}\n/**\n * Method to calculate the width and height of the maps\n */\nexport function calculateSize(maps) {\n var containerWidth = maps.element.clientWidth;\n var containerHeight = maps.element.clientHeight;\n maps.availableSize = new Size(stringToNumber(maps.width, containerWidth) || containerWidth || 600, stringToNumber(maps.height, containerHeight) || containerHeight || (maps.isDevice ?\n Math.min(window.innerWidth, window.innerHeight) : 450));\n}\n/**\n * Method to create svg for maps.\n */\nexport function createSvg(maps) {\n maps.renderer = new SvgRenderer(maps.element.id);\n calculateSize(maps);\n maps.svgObject = maps.renderer.createSvg({\n id: maps.element.id + '_svg',\n width: maps.availableSize.width,\n height: maps.availableSize.height\n });\n}\n/**\n * Method to convert degrees to radians\n */\nexport function degreesToRadians(deg) {\n return deg * (Math.PI / 180);\n}\n/**\n * Convert radians to degrees method\n */\nexport function radiansToDegrees(radian) {\n return radian * (180 / Math.PI);\n}\n/**\n * Method for converting from latitude and longitude values to points\n */\nexport function convertGeoToPoint(latitude, longitude, factor, layer, mapModel) {\n var mapSize = new Size(mapModel.mapAreaRect.width, mapModel.mapAreaRect.height);\n var x;\n var y;\n var value;\n var lat;\n var lng;\n var temp;\n var longitudeMinMax = mapModel.baseMapBounds.longitude;\n var latitudeMinMax = mapModel.baseMapBounds.latitude;\n var latRadian = degreesToRadians(latitude);\n var lngRadian = degreesToRadians(longitude);\n var type = mapModel.projectionType;\n var size = (mapModel.isTileMap) ? Math.pow(2, 1) * 256 : (isNullOrUndefined(factor)) ? Math.min(mapSize.width, mapSize.height) :\n (Math.min(mapSize.width, mapSize.height) * factor);\n if (layer.geometryType === 'Normal') {\n x = isNullOrUndefined(factor) ? longitude : Math.abs((longitude - longitudeMinMax.min) * factor);\n y = isNullOrUndefined(factor) ? latitude : Math.abs((latitudeMinMax.max - latitude) * factor);\n }\n else if (layer.geometryType === 'Geographic') {\n switch (type) {\n case 'Mercator':\n var pixelOrigin = new Point(size / 2, size / 2);\n x = pixelOrigin.x + longitude * (size / 360);\n var sinY = calculateBound(Math.sin(degreesToRadians(latitude)), -0.9999, 0.9999);\n y = pixelOrigin.y + 0.5 * (Math.log((1 + sinY) / (1 - sinY))) * (-(size / (2 * Math.PI)));\n break;\n case 'Winkel3':\n value = aitoff(lngRadian, latRadian);\n lng = (value.x + lngRadian / (Math.PI / 2)) / 2;\n lat = (value.y + latRadian) / 2;\n break;\n case 'Miller':\n lng = lngRadian;\n lat = (1.25 * Math.log(Math.tan((Math.PI / 4) + (.4 * latRadian))));\n break;\n case 'Eckert3':\n temp = Math.sqrt(Math.PI * (4 + Math.PI));\n lng = 2 / temp * lngRadian * (1 + Math.sqrt(1 - 4 * latRadian * latRadian / (Math.PI * Math.PI)));\n lat = 4 / temp * latRadian;\n break;\n case 'AitOff':\n value = aitoff(lngRadian, latRadian);\n lng = value.x;\n lat = value.y;\n break;\n case 'Eckert5':\n lng = lngRadian * (1 + Math.cos(latRadian)) / Math.sqrt(2 + Math.PI);\n lat = 2 * latRadian / Math.sqrt(2 + Math.PI);\n break;\n case 'Equirectangular':\n lng = lngRadian;\n lat = latRadian;\n break;\n case 'Eckert6':\n var epsilon = 1e-6;\n temp = (1 + (Math.PI / 2)) * Math.sin(latRadian);\n var delta = Infinity;\n for (var i = 0; i < 10 && Math.abs(delta) > epsilon; i++) {\n delta = (latRadian + (Math.sin(latRadian)) - temp) / (1 + Math.cos(latRadian));\n latRadian = latRadian - delta;\n }\n temp = Math.sqrt(2 + Math.PI);\n lng = lngRadian * (1 + Math.cos(latRadian)) / temp;\n lat = 2 * latRadian / temp;\n break;\n }\n x = (type === 'Mercator') ? x : roundTo(xToCoordinate(mapModel, radiansToDegrees(lng)), 3);\n y = (type === 'Mercator') ? y : (-(roundTo(yToCoordinate(mapModel, radiansToDegrees(lat)), 3)));\n }\n return new Point(x, y);\n}\n/**\n * Converting tile latitude and longitude to point\n */\nexport function convertTileLatLongToPoint(center, zoomLevel, tileTranslatePoint, isMapCoordinates) {\n var size = Math.pow(2, zoomLevel) * 256;\n var x = (center.x + 180) / 360;\n var sinLatitude = Math.sin(center.y * Math.PI / 180);\n var y = 0.5 - Math.log((1 + sinLatitude) / (1 - sinLatitude)) / (4 * Math.PI);\n var pixelX = center.x;\n var pixelY = center.y;\n if (isMapCoordinates) {\n pixelX = (x * size + 0.5) + tileTranslatePoint.x;\n pixelY = (y * size + 0.5) + tileTranslatePoint.y;\n }\n return { x: pixelX, y: pixelY };\n}\n/**\n * Method for calculate x point\n */\nexport function xToCoordinate(mapObject, val) {\n var longitudeMinMax = mapObject.baseMapBounds.longitude;\n var totalSize = isNullOrUndefined(mapObject.baseSize) ? mapObject.mapAreaRect.width : mapObject.mapAreaRect.width +\n (Math.abs(mapObject.baseSize.width - mapObject.mapAreaRect.width) / 2);\n return Math.round(totalSize * (val - longitudeMinMax.min) / (longitudeMinMax.max - longitudeMinMax.min) * 100) / 100;\n}\n/**\n * Method for calculate y point\n */\nexport function yToCoordinate(mapObject, val) {\n var latitudeMinMax = mapObject.baseMapBounds.latitude;\n return Math.round(mapObject.mapAreaRect.height * (val - latitudeMinMax.min) / (latitudeMinMax.max - latitudeMinMax.min) * 100) / 100;\n}\n/**\n * Method for calculate aitoff projection\n */\nexport function aitoff(x, y) {\n var cosy = Math.cos(y);\n var sincia = sinci(acos(cosy * Math.cos(x /= 2)));\n return new Point(2 * cosy * Math.sin(x) * sincia, Math.sin(y) * sincia);\n}\n/**\n * Method to round the number\n */\nexport function roundTo(a, b) {\n var c = Math.pow(10, b);\n return (Math.round(a * c) / c);\n}\nexport function sinci(x) {\n return x / Math.sin(x);\n}\nexport function acos(a) {\n return Math.acos(a);\n}\n/**\n * Method to calculate bound\n */\nexport function calculateBound(value, min, max) {\n if (!isNullOrUndefined(min)) {\n value = Math.max(value, min);\n }\n if (!(isNullOrUndefined(max))) {\n value = Math.min(value, max);\n }\n return value;\n}\n/**\n * Map internal class for point\n */\nvar Point = /** @class */ (function () {\n function Point(x, y) {\n this.x = x;\n this.y = y;\n }\n return Point;\n}());\nexport { Point };\n/**\n * Map internal class for min and max\n *\n */\nvar MinMax = /** @class */ (function () {\n function MinMax(min, max) {\n this.min = min;\n this.max = max;\n }\n return MinMax;\n}());\nexport { MinMax };\n/**\n * Map internal class locations\n */\nvar GeoLocation = /** @class */ (function () {\n function GeoLocation(latitude, longitude) {\n this.latitude = new MinMax(latitude.min, latitude.max);\n this.longitude = new MinMax(longitude.min, longitude.max);\n }\n return GeoLocation;\n}());\nexport { GeoLocation };\n/**\n * Function to measure the height and width of the text.\n * @param {string} text\n * @param {FontModel} font\n * @param {string} id\n * @returns no\n * @private\n */\nexport function measureText(text, font) {\n var htmlObject = document.getElementById('mapsmeasuretext');\n if (htmlObject === null) {\n htmlObject = createElement('text', { id: 'mapsmeasuretext' });\n document.body.appendChild(htmlObject);\n }\n htmlObject.innerHTML = text;\n htmlObject.style.position = 'absolute';\n htmlObject.style.fontSize = font.size;\n htmlObject.style.fontWeight = font.fontWeight;\n htmlObject.style.fontStyle = font.fontStyle;\n htmlObject.style.fontFamily = font.fontFamily;\n htmlObject.style.visibility = 'hidden';\n htmlObject.style.top = '-100';\n htmlObject.style.left = '0';\n htmlObject.style.whiteSpace = 'nowrap';\n // For bootstrap line height issue\n htmlObject.style.lineHeight = 'normal';\n return new Size(htmlObject.clientWidth, htmlObject.clientHeight);\n}\n/**\n * Internal use of text options\n * @private\n */\nvar TextOption = /** @class */ (function () {\n function TextOption(id, x, y, anchor, text, transform, baseLine) {\n if (transform === void 0) { transform = ''; }\n this.transform = '';\n this.baseLine = 'auto';\n this.id = id;\n this.x = x;\n this.y = y;\n this.anchor = anchor;\n this.text = text;\n this.transform = transform;\n this.baseLine = baseLine;\n }\n return TextOption;\n}());\nexport { TextOption };\n/**\n * Internal use of path options\n * @private\n */\nvar PathOption = /** @class */ (function () {\n function PathOption(id, fill, width, color, opacity, dashArray, d) {\n this.id = id;\n this.opacity = opacity;\n this.fill = fill;\n this.stroke = color;\n this['stroke-width'] = width;\n this['stroke-dasharray'] = dashArray;\n this.d = d;\n }\n return PathOption;\n}());\nexport { PathOption };\n/**\n * Internal use of rectangle options\n * @private\n */\nvar RectOption = /** @class */ (function (_super) {\n __extends(RectOption, _super);\n function RectOption(id, fill, border, opacity, rect, rx, ry, transform, dashArray) {\n var _this = _super.call(this, id, fill, border.width, border.color, opacity, dashArray) || this;\n _this.y = rect.y;\n _this.x = rect.x;\n _this.height = rect.height;\n _this.width = rect.width;\n _this.rx = rx ? rx : 0;\n _this.ry = ry ? ry : 0;\n _this.transform = transform ? transform : '';\n _this['stroke-dasharray'] = dashArray;\n return _this;\n }\n return RectOption;\n}(PathOption));\nexport { RectOption };\n/**\n * Internal use of circle options\n * @private\n */\nvar CircleOption = /** @class */ (function (_super) {\n __extends(CircleOption, _super);\n function CircleOption(id, fill, border, opacity, cx, cy, r, dashArray) {\n var _this = _super.call(this, id, fill, border.width, border.color, opacity) || this;\n _this.cy = cy;\n _this.cx = cx;\n _this.r = r;\n _this['stroke-dasharray'] = dashArray;\n return _this;\n }\n return CircleOption;\n}(PathOption));\nexport { CircleOption };\n/**\n * Internal use of polygon options\n * @private\n */\nvar PolygonOption = /** @class */ (function (_super) {\n __extends(PolygonOption, _super);\n function PolygonOption(id, points, fill, width, color, opacity, dashArray) {\n if (opacity === void 0) { opacity = 1; }\n if (dashArray === void 0) { dashArray = ''; }\n var _this = _super.call(this, id, fill, width, color, opacity, dashArray) || this;\n _this.points = points;\n return _this;\n }\n return PolygonOption;\n}(PathOption));\nexport { PolygonOption };\n/**\n * Internal use of polyline options\n * @private\n */\nvar PolylineOption = /** @class */ (function (_super) {\n __extends(PolylineOption, _super);\n function PolylineOption(id, points, fill, width, color, opacity, dashArray) {\n if (opacity === void 0) { opacity = 1; }\n if (dashArray === void 0) { dashArray = ''; }\n return _super.call(this, id, points, fill, width, color, opacity, dashArray) || this;\n }\n return PolylineOption;\n}(PolygonOption));\nexport { PolylineOption };\n/**\n * Internal use of line options\n * @private\n */\nvar LineOption = /** @class */ (function (_super) {\n __extends(LineOption, _super);\n function LineOption(id, line, fill, width, color, opacity, dashArray) {\n if (opacity === void 0) { opacity = 1; }\n if (dashArray === void 0) { dashArray = ''; }\n var _this = _super.call(this, id, fill, width, color, opacity, dashArray) || this;\n _this.x1 = line.x1;\n _this.y1 = line.y1;\n _this.x2 = line.x2;\n _this.y2 = line.y2;\n return _this;\n }\n return LineOption;\n}(PathOption));\nexport { LineOption };\n/**\n * Internal use of line\n * @property\n */\nvar Line = /** @class */ (function () {\n function Line(x1, y1, x2, y2) {\n this.x1 = x1;\n this.y1 = y1;\n this.x2 = x2;\n this.y2 = y2;\n }\n return Line;\n}());\nexport { Line };\n/**\n * Internal use of map location type\n * @private\n */\nvar MapLocation = /** @class */ (function () {\n function MapLocation(x, y) {\n this.x = x;\n this.y = y;\n }\n return MapLocation;\n}());\nexport { MapLocation };\n/**\n * Internal use of type rect\n * @private\n */\nvar Rect = /** @class */ (function () {\n function Rect(x, y, width, height) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n return Rect;\n}());\nexport { Rect };\n/**\n * Internal use for pattern creation.\n * @property\n */\nvar PatternOptions = /** @class */ (function () {\n function PatternOptions(id, x, y, width, height, patternUnits, patternContentUnits, patternTransform, href) {\n if (patternUnits === void 0) { patternUnits = 'userSpaceOnUse'; }\n if (patternContentUnits === void 0) { patternContentUnits = 'userSpaceOnUse'; }\n if (patternTransform === void 0) { patternTransform = ''; }\n if (href === void 0) { href = ''; }\n this.id = id;\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n this.patternUnits = patternUnits;\n this.patternContentUnits = patternContentUnits;\n this.patternTransform = patternTransform;\n this.href = href;\n }\n return PatternOptions;\n}());\nexport { PatternOptions };\n/**\n * Internal rendering of text\n * @private\n */\nexport function renderTextElement(options, font, color, parent, isMinus) {\n if (isMinus === void 0) { isMinus = false; }\n var renderOptions = {\n 'id': options.id,\n 'x': options.x,\n 'y': options.y,\n 'fill': color,\n 'font-size': font.size,\n 'font-style': font.fontStyle,\n 'font-family': font.fontFamily,\n 'font-weight': font.fontWeight,\n 'text-anchor': options.anchor,\n 'transform': options.transform,\n 'opacity': font.opacity,\n 'dominant-baseline': options.baseLine\n };\n var text = typeof options.text === 'string' ? options.text : isMinus ? options.text[options.text.length - 1] : options.text[0];\n var tspanElement;\n var renderer = new SvgRenderer('');\n var height;\n var htmlObject = renderer.createText(renderOptions, text);\n htmlObject.style['user-select'] = 'none';\n htmlObject.style['-moz-user-select'] = 'none';\n htmlObject.style['-webkit-touch-callout'] = 'none';\n htmlObject.style['-webkit-user-select'] = 'none';\n htmlObject.style['-khtml-user-select'] = 'none';\n htmlObject.style['-ms-user-select'] = 'none';\n htmlObject.style['-o-user-select'] = 'none';\n if (typeof options.text !== 'string' && options.text.length > 1) {\n for (var i = 1, len = options.text.length; i < len; i++) {\n height = (measureText(options.text[i], font).height);\n tspanElement = renderer.createTSpan({\n 'x': options.x, 'id': options.id,\n 'y': (options.y) + ((isMinus) ? -(i * height) : (i * height))\n }, isMinus ? options.text[options.text.length - (i + 1)] : options.text[i]);\n htmlObject.appendChild(tspanElement);\n }\n }\n parent.appendChild(htmlObject);\n return htmlObject;\n}\n/**\n * @private\n */\nexport function convertElement(element, markerId, data, index, mapObj) {\n var childElement = createElement('div', {\n id: markerId,\n styles: 'position: absolute;pointer-events: auto;'\n });\n while (element.length > 0) {\n childElement.appendChild(element[0]);\n }\n var templateHtml = childElement.innerHTML;\n var properties = Object.keys(data);\n for (var i = 0; i < properties.length; i++) {\n if (properties[i].toLowerCase() !== 'latitude' && properties[i].toLowerCase() !== 'longitude') {\n templateHtml = templateHtml.replace(new RegExp('{{:' + properties[i] + '}}', 'g'), data[properties[i].toString()]);\n }\n }\n childElement.innerHTML = templateHtml;\n return childElement;\n}\nexport function convertElementFromLabel(element, labelId, data, index, mapObj) {\n var labelEle = isNullOrUndefined(element.childElementCount) ? element[0] : element;\n var templateHtml = labelEle.outerHTML;\n var properties = Object.keys(data);\n for (var i = 0; i < properties.length; i++) {\n templateHtml = templateHtml.replace(new RegExp('{{:' + properties[i] + '}}', 'g'), data[properties[i].toString()]);\n }\n return createElement('div', {\n id: labelId,\n innerHTML: templateHtml,\n styles: 'position: absolute'\n });\n}\n/**\n * Internal use of append shape element\n * @private\n */\nexport function appendShape(shape, element) {\n if (element) {\n element.appendChild(shape);\n }\n return shape;\n}\n/**\n * Internal rendering of Circle\n * @private\n */\nexport function drawCircle(maps, options, element) {\n return appendShape(maps.renderer.drawCircle(options), element);\n}\n/**\n * Internal rendering of Rectangle\n * @private\n */\nexport function drawRectangle(maps, options, element) {\n return appendShape(maps.renderer.drawRectangle(options), element);\n}\n/**\n * Internal rendering of Path\n * @private\n */\nexport function drawPath(maps, options, element) {\n return appendShape(maps.renderer.drawPath(options), element);\n}\n/**\n * Internal rendering of Polygon\n * @private\n */\nexport function drawPolygon(maps, options, element) {\n return appendShape(maps.renderer.drawPolygon(options), element);\n}\n/**\n * Internal rendering of Polyline\n * @private\n */\nexport function drawPolyline(maps, options, element) {\n return appendShape(maps.renderer.drawPolyline(options), element);\n}\n/**\n * Internal rendering of Line\n * @private\n */\nexport function drawLine(maps, options, element) {\n return appendShape(maps.renderer.drawLine(options), element);\n}\n/**\n * @private\n * Calculate marker shapes\n */\nexport function calculateShapes(maps, shape, options, size, location, markerEle) {\n var tempGroup;\n switch (shape) {\n case 'Balloon':\n tempGroup = drawBalloon(maps, options, size, location, markerEle);\n break;\n case 'Cross':\n options.d = 'M ' + location.x + ' ' + (location.y - size.height / 2) + ' L ' + location.x + ' ' + (location.y + size.height\n / 2) + ' M ' + (location.x - size.width / 2) + ' ' + location.y + ' L ' + (location.x + size.width / 2) + ' ' + location.y;\n break;\n case 'Diamond':\n options.d = 'M ' + location.x + ' ' + (location.y - size.height / 2) + ' L ' + (location.x + size.width / 2) + ' '\n + location.y + ' L ' + location.x + ' ' + (location.y + size.height / 2) + ' L ' + (location.x - size.width / 2)\n + ' ' + location.y + ' Z';\n break;\n case 'Star':\n options.d = 'M ' + (location.x + size.width / 3) + ' ' + (location.y - size.height / 2) + ' L ' + (location.x - size.width / 2)\n + ' ' + (location.y + size.height / 6) + ' L ' + (location.x + size.width / 2) + ' ' + (location.y + size.height / 6)\n + ' L ' + (location.x - size.width / 3) + ' ' + (location.y - size.height / 2) + ' L ' + location.x + ' ' +\n (location.y + size.height / 2) + ' L ' + (location.x + size.width / 3) + ' ' + (location.y - size.height / 2) + ' Z';\n break;\n case 'Triangle':\n options.d = 'M ' + location.x + ' ' + (location.y - size.height / 2) + ' L ' + (location.x + size.width / 2) + ' ' +\n (location.y + size.height / 2) + ' L ' + (location.x - size.width / 2) + ' ' + (location.y + size.height / 2) + ' Z';\n break;\n case 'HorizontalLine':\n options.d = ' M ' + (location.x - size.width / 2) + ' ' + location.y + ' L ' + (location.x + size.width / 2) + ' '\n + location.y;\n break;\n case 'VerticalLine':\n options.d = 'M ' + location.x + ' ' + (location.y - size.height / 2) + ' L ' + location.x + ' ' +\n (location.y + size.height / 2);\n break;\n }\n return shape === 'Balloon' ? tempGroup : maps.renderer.drawPath(options);\n}\n/**\n * Internal rendering of Diamond\n * @private\n */\nexport function drawDiamond(maps, options, size, location, element) {\n options.d = 'M ' + location.x + ' ' + (location.y - size.height / 2) + ' L ' + (location.x + size.width / 2) + ' ' + location.y +\n ' L ' + location.x + ' ' + (location.y + size.height / 2) + ' L ' + (location.x - size.width / 2) + ' ' + location.y + ' Z';\n return appendShape(maps.renderer.drawPath(options), element);\n}\n/**\n * Internal rendering of Triangle\n * @private\n */\nexport function drawTriangle(maps, options, size, location, element) {\n options.d = 'M ' + location.x + ' ' + (location.y - size.height / 2) + ' L ' + (location.x + size.width / 2) + ' ' +\n (location.y + size.height / 2) + ' L ' + (location.x - size.width / 2) + ' ' + (location.y + size.height / 2) + ' Z';\n return appendShape(maps.renderer.drawPath(options), element);\n}\n/**\n * Internal rendering of Cross\n * @private\n */\nexport function drawCross(maps, options, size, location, element) {\n options.d = 'M ' + location.x + ' ' + (location.y - size.height / 2) + ' L ' + location.x + ' ' + (location.y + size.height / 2) +\n ' M ' + (location.x - size.width / 2) + ' ' + location.y + ' L ' + (location.x + size.width / 2) + ' ' + location.y;\n return appendShape(maps.renderer.drawPath(options), element);\n}\n/**\n * Internal rendering of HorizontalLine\n * @private\n */\nexport function drawHorizontalLine(maps, options, size, location, element) {\n options.d = ' M ' + (location.x - size.width / 2) + ' ' + location.y + ' L ' + (location.x + size.width / 2) + ' ' + location.y;\n return appendShape(maps.renderer.drawPath(options), element);\n}\n/**\n * Internal rendering of VerticalLine\n * @private\n */\nexport function drawVerticalLine(maps, options, size, location, element) {\n options.d = 'M ' + location.x + ' ' + (location.y - size.height / 2) + ' L ' + location.x + ' ' + (location.y + size.height / 2);\n return appendShape(maps.renderer.drawPath(options), element);\n}\n/**\n * Internal rendering of Star\n * @private\n */\nexport function drawStar(maps, options, size, location, element) {\n options.d = 'M ' + (location.x + size.width / 3) + ' ' + (location.y - size.height / 2) + ' L ' + (location.x - size.width / 2)\n + ' ' + (location.y + size.height / 6) + ' L ' + (location.x + size.width / 2) + ' ' + (location.y + size.height / 6) + ' L '\n + (location.x - size.width / 3) + ' ' + (location.y - size.height / 2) + ' L ' + location.x + ' ' + (location.y + size.height / 2)\n + ' L ' + (location.x + size.width / 3) + ' ' + (location.y - size.height / 2) + ' Z';\n return appendShape(maps.renderer.drawPath(options), element);\n}\n/**\n * Internal rendering of Balloon\n * @private\n */\nexport function drawBalloon(maps, options, size, location, element) {\n var width = size.width;\n var height = size.height;\n var padding = 5;\n location.x -= width / 2;\n location.y -= height;\n options.d = 'M15,0C8.8,0,3.8,5,3.8,11.2C3.8,17.5,9.4,24.4,15,30c5.6-5.6,11.2-12.5,11.2-18.8C26.2,5,21.2,0,15,0z M15,16' +\n 'c-2.8,0-5-2.2-5-5s2.2-5,5-5s5,2.2,5,5S17.8,16,15,16z';\n var balloon = maps.renderer.drawPath(options);\n var x = size.width / 22.5;\n var y = size.height / 30;\n balloon.setAttribute('transform', 'translate(' + location.x + ', ' + location.y + ') scale(' + x + ', ' + y + ')');\n var g = maps.renderer.createGroup({ id: options.id });\n appendShape(balloon, g);\n return appendShape(g, element);\n}\n/**\n * Internal rendering of Pattern\n * @private\n */\nexport function drawPattern(maps, options, elements, element) {\n var pattern = maps.renderer.createPattern(options, 'pattern');\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var ele = elements_1[_i];\n appendShape(ele, pattern);\n }\n return appendShape(pattern, element);\n}\n/**\n * Method to get specific field and vaues from data.\n * @private\n */\n// tslint:disable:no-any\nexport function getFieldData(dataSource, fields) {\n var newData = [];\n var data;\n for (var _i = 0, dataSource_1 = dataSource; _i < dataSource_1.length; _i++) {\n var temp = dataSource_1[_i];\n data = {};\n for (var _a = 0, fields_1 = fields; _a < fields_1.length; _a++) {\n var field = fields_1[_a];\n if (temp[field]) {\n data[field] = temp[field];\n }\n }\n newData.push(data);\n }\n return newData;\n}\n/**\n * To find the index of dataSource from shape properties\n */\n// tslint:disable:no-string-literal\nexport function checkShapeDataFields(dataSource, properties, dataPath, propertyPath) {\n if (!(isNullOrUndefined(properties))) {\n for (var i = 0; i < dataSource.length; i++) {\n if (dataSource[i][dataPath] === properties[propertyPath]) {\n return i;\n }\n }\n }\n return null;\n}\nexport function filter(points, start, end) {\n var pointObject = [];\n for (var i = 0; i < points.length; i++) {\n var point = points[i];\n if (start <= point.y && end >= point.y) {\n pointObject.push(point);\n }\n }\n return pointObject;\n}\n/**\n * To find the midpoint of the polygon from points\n */\nexport function findMidPointOfPolygon(points) {\n if (!points.length) {\n return null;\n }\n var min = 0;\n var max = points.length;\n var startX;\n var startY;\n var startX1;\n var startY1;\n var sum = 0;\n var xSum = 0;\n var ySum = 0;\n for (var i = min; i <= max - 1; i++) {\n startX = points[i].x;\n startY = points[i].y;\n if (i === max - 1) {\n startX1 = points[0].x;\n startY1 = points[0].y;\n }\n else {\n startX1 = points[i + 1].x;\n startY1 = points[i + 1].y;\n }\n sum = sum + Math.abs(((startX * startY1)) - (startX1 * startY));\n xSum = xSum + Math.abs(((startX + startX1) * (((startX * startY1) - (startX1 * startY)))));\n ySum = ySum + Math.abs(((startY + startY1) * (((startX * startY1) - (startX1 * startY)))));\n }\n sum = 0.5 * sum;\n xSum = (1 / (4 * sum)) * xSum;\n ySum = (1 / (4 * sum)) * ySum;\n /* Code for finding nearest points in polygon related to midPoint*/\n var rightMinPoint = { x: 0, y: 0 };\n var rightMaxPoint = { x: 0, y: 0 };\n var leftMinPoint = { x: 0, y: 0 };\n var leftMaxPoint = { x: 0, y: 0 };\n var bottomMinPoint = { x: 0, y: 0 };\n var bottomMaxPoint = { x: 0, y: 0 };\n var topMinPoint = { x: 0, y: 0 };\n var topMaxPoint = { x: 0, y: 0 };\n var height = 0;\n for (var i = min; i <= max - 1; i++) {\n var point = points[i];\n if (point.y > ySum) {\n if (point.x < xSum && xSum - point.x < xSum - bottomMinPoint.x) {\n bottomMinPoint = { x: point.x, y: point.y };\n }\n else if (point.x > xSum && (bottomMaxPoint.x === 0 || point.x - xSum < bottomMaxPoint.x - xSum)) {\n bottomMaxPoint = { x: point.x, y: point.y };\n }\n }\n else {\n if (point.x < xSum && xSum - point.x < xSum - topMinPoint.x) {\n topMinPoint = { x: point.x, y: point.y };\n }\n else if (point.x > xSum && (topMaxPoint.x === 0 || point.x - xSum < topMaxPoint.x - xSum)) {\n topMaxPoint = { x: point.x, y: point.y };\n }\n }\n height = (bottomMaxPoint.y - topMaxPoint.y) + ((bottomMaxPoint.y - topMaxPoint.y) / 4);\n if (point.x > xSum) {\n if (point.y < ySum && ySum - point.y < ySum - rightMinPoint.y) {\n rightMinPoint = { x: point.x, y: point.y };\n }\n else if (point.y > ySum && (rightMaxPoint.y === 0 || point.y - ySum < rightMaxPoint.y - ySum)) {\n rightMaxPoint = { x: point.x, y: point.y };\n }\n }\n else {\n if (point.y < ySum && ySum - point.y < ySum - leftMinPoint.y) {\n leftMinPoint = { x: point.x, y: point.y };\n }\n else if (point.y > ySum && (leftMaxPoint.y === 0 || point.y - ySum < leftMaxPoint.y - ySum)) {\n leftMaxPoint = { x: point.x, y: point.y };\n }\n }\n }\n return {\n x: xSum, y: ySum, rightMin: rightMinPoint, rightMax: rightMaxPoint,\n leftMin: leftMinPoint, leftMax: leftMaxPoint, points: points, topMax: topMaxPoint, topMin: topMinPoint,\n bottomMax: bottomMaxPoint, bottomMin: bottomMinPoint, height: height\n };\n}\n/**\n * @private\n * Check custom path\n */\n/* tslint:disable:no-string-literal */\nexport function isCustomPath(layerData) {\n var customPath = false;\n if (Object.prototype.toString.call(layerData) === '[object Array]') {\n layerData.forEach(function (layer, index) {\n if (!isNullOrUndefined(layer['geometry']) && layer['geometry']['type'] === 'Path') {\n customPath = true;\n }\n });\n }\n return customPath;\n}\n/**\n * @private\n * Trim the title text\n */\nexport function textTrim(maxWidth, text, font) {\n var label = text;\n var size = measureText(text, font).width;\n if (size > maxWidth) {\n var textLength = text.length;\n for (var i = textLength - 1; i >= 0; --i) {\n label = text.substring(0, i) + '...';\n size = measureText(label, font).width;\n if (size <= maxWidth || label.length < 4) {\n if (label.length < 4) {\n label = ' ';\n }\n return label;\n }\n }\n }\n return label;\n}\n/**\n * Method to calculate x position of title\n */\nexport function findPosition(location, alignment, textSize, type) {\n var x;\n var y;\n switch (alignment) {\n case 'Near':\n x = location.x;\n break;\n case 'Center':\n x = (type === 'title') ? (location.width / 2 - textSize.width / 2) :\n ((location.x + (location.width / 2)) - textSize.width / 2);\n break;\n case 'Far':\n x = (type === 'title') ? (location.width - location.y - textSize.width) :\n ((location.x + location.width) - textSize.width);\n break;\n }\n y = (type === 'title') ? location.y + (textSize.height / 2) : ((location.y + location.height / 2) + textSize.height / 2);\n return new Point(x, y);\n}\n/**\n * To remove element by id\n */\nexport function removeElement(id) {\n var element = document.getElementById(id);\n return element ? remove(element) : null;\n}\n/**\n * @private\n */\nexport function getTranslate(mapObject, layer, animate) {\n var zoomFactor = animate ? 1 : mapObject.zoomSettings.zoomFactor;\n var min = mapObject.baseMapRectBounds['min'];\n var max = mapObject.baseMapRectBounds['max'];\n var size = mapObject.mapAreaRect;\n var availSize = mapObject.availableSize;\n var x;\n var y;\n var mapWidth = Math.abs(max['x'] - min['x']);\n var mapHeight = Math.abs(min['y'] - max['y']);\n var factor = animate ? 1 : mapObject.zoomSettings.zoomFactor;\n var scaleFactor;\n var scaleX;\n var scaleY;\n var center = mapObject.centerPosition;\n if (!isNullOrUndefined(center.longitude) && !isNullOrUndefined(center.latitude)) {\n var leftPosition = ((mapWidth + Math.abs(mapObject.mapAreaRect.width - mapWidth)) / 2) / factor;\n var topPosition = ((mapHeight + Math.abs(mapObject.mapAreaRect.height - mapHeight)) / 2) / factor;\n var point = convertGeoToPoint(center.latitude, center.longitude, mapObject.mapLayerPanel.calculateFactor(layer), layer, mapObject);\n x = -point.x + leftPosition;\n y = -point.y + topPosition;\n scaleFactor = zoomFactor;\n }\n else {\n scaleFactor = parseFloat(Math.min(size.width / mapWidth, size.height / mapHeight).toFixed(2));\n mapWidth *= scaleFactor;\n mapHeight *= scaleFactor;\n x = size.x + ((-(min['x'])) + ((size.width / 2) - (mapWidth / 2)));\n y = size.y + ((-(min['y'])) + ((size.height / 2) - (mapHeight / 2)));\n }\n return { scale: scaleFactor, location: new Point(x, y) };\n}\n/**\n * To get the html element by specified id\n */\nexport function getElementByID(id) {\n return document.getElementById(id);\n}\n/**\n * To apply internalization\n */\nexport function Internalize(maps, value) {\n maps.formatFunction =\n maps.intl.getNumberFormat({ format: maps.format, useGrouping: maps.useGroupingSeparator });\n return maps.formatFunction(value);\n}\n/**\n * Function to compile the template function for maps.\n * @returns Function\n * @private\n */\nexport function getTemplateFunction(template) {\n var templateFn = null;\n var e;\n try {\n if (document.querySelectorAll(template).length) {\n templateFn = templateComplier(document.querySelector(template).innerHTML.trim());\n }\n }\n catch (e) {\n templateFn = templateComplier(template);\n }\n return templateFn;\n}\n/**\n * Function to get element from id.\n * @returns Element\n * @private\n */\nexport function getElement(id) {\n return document.getElementById(id);\n}\n/**\n * Function to get shape data using target id\n */\nexport function getShapeData(targetId, map) {\n var layerIndex = parseInt(targetId.split('_LayerIndex_')[1].split('_')[0], 10);\n var shapeIndex = parseInt(targetId.split('_ShapeIndex_')[1].split('_')[0], 10);\n var layer = map.layers[layerIndex];\n var shapeData = layer.layerData[shapeIndex]['property'];\n var data;\n if (layer.dataSource) {\n data = layer.dataSource[checkShapeDataFields(layer.dataSource, shapeData, layer.shapeDataPath, layer.shapePropertyPath)];\n }\n return { shapeData: shapeData, data: data };\n}\n/**\n * Function to trigger shapeSelected event\n * @private\n */\nexport function triggerShapeEvent(targetId, selection, maps, eventName) {\n var shape = getShapeData(targetId, maps);\n var eventArgs = {\n cancel: false,\n name: eventName,\n fill: selection.fill,\n opacity: selection.opacity,\n border: selection.border,\n shapeData: shape.shapeData,\n data: shape.data,\n target: targetId\n };\n maps.trigger(eventName, eventArgs);\n return eventArgs;\n}\n/**\n * Function to get elements using class name\n */\nexport function getElementsByClassName(className) {\n return document.getElementsByClassName(className);\n}\n/**\n * Function to get elements using querySelectorAll\n */\n// export function querySelectorAll(args: string, element: Element): NodeListOf {\n// return element.querySelectorAll('.' + args);\n// }\n/**\n * Function to get elements using querySelector\n */\nexport function querySelector(args, elementSelector) {\n var targetEle = null;\n if (document.getElementById(elementSelector)) {\n targetEle = document.getElementById(elementSelector).querySelector('#' + args);\n }\n return targetEle;\n}\n/**\n * Function to get the element for selection and highlight using public method\n */\nexport function getTargetElement(layerIndex, name, enable, map) {\n var shapeIndex;\n var targetId;\n var targetEle;\n var shapeData = map.layers[layerIndex].shapeData['features'];\n for (var i = 0; i < shapeData.length; i++) {\n if (shapeData[i]['properties'].name === name) {\n targetId = map.element.id + '_' + 'LayerIndex_' + layerIndex + '_ShapeIndex_' + i + '_dataIndex_undefined';\n break;\n }\n }\n targetEle = getElement(targetId);\n return targetEle;\n}\n/**\n * Function to create style element for highlight and selection\n */\nexport function createStyle(id, className, eventArgs) {\n return createElement('style', {\n id: id, innerHTML: '.' + className + '{fill:'\n + eventArgs.fill + ';' + 'opacity:' + eventArgs.opacity.toString() + ';' +\n '}'\n });\n}\n/**\n * Function to customize the style for highlight and selection\n */\nexport function customizeStyle(id, className, eventArgs) {\n var styleEle = getElement(id);\n styleEle.innerHTML = '.' + className + '{fill:'\n + eventArgs.fill + ';' + 'opacity:' + eventArgs.opacity.toString() + ';' +\n 'stroke-width:' + eventArgs.border.width.toString() +\n 'stroke-color:' + eventArgs.border.color + '}';\n}\n/**\n * Function to remove class from element\n */\nexport function removeClass(element) {\n element.removeAttribute('class');\n}\n/**\n * Animation Effect Calculation End\n * @private\n */\nexport function elementAnimate(element, delay, duration, point, maps, ele, radius) {\n if (radius === void 0) { radius = 0; }\n var centerX = point.x;\n var centerY = point.y;\n var height = 0;\n var transform = element.getAttribute('transform') || '';\n new Animation({}).animate(element, {\n duration: duration,\n delay: delay,\n progress: function (args) {\n if (args.timeStamp > args.delay) {\n height = ((args.timeStamp - args.delay) / args.duration);\n element.setAttribute('transform', 'translate( ' + (centerX - (radius * height)) + ' ' + (centerY - (radius * height)) +\n ' ) scale(' + height + ')');\n }\n },\n end: function (model) {\n element.setAttribute('transform', transform);\n if (!ele) {\n return;\n }\n var event = {\n cancel: false, name: animationComplete, element: ele, maps: maps\n };\n maps.trigger(animationComplete, event);\n }\n });\n}\nexport function timeout(id) {\n removeElement(id);\n}\nexport function showTooltip(text, size, x, y, areaWidth, areaHeight, id, element, isTouch) {\n var tooltip = document.getElementById(id);\n var width = measureText(text, {\n fontFamily: 'Segoe UI', size: '8px',\n fontStyle: 'Normal', fontWeight: 'Regular'\n }).width;\n var str = text.split(' ');\n var demo = str[0].length;\n for (var i = 1; i < str.length; i++) {\n if (demo < str[i].length) {\n demo = str[i].length;\n }\n }\n if (!tooltip) {\n tooltip = createElement('div', {\n id: id,\n styles: 'background-color: rgb(255, 255, 255) !important; color:black !important; ' +\n 'position:absolute;border:1px solid rgb(0, 0, 0); padding-left:5px;' +\n 'font-size:12px; font-family: \"Segoe UI\"; text-align:center'\n });\n }\n if (x < (areaWidth - width)) {\n x = x;\n }\n else if (x > (areaWidth - width) && x < areaWidth - (demo * 8)) {\n width = (areaWidth - x);\n }\n else if (x >= areaWidth - demo * 8) {\n if (x > width) {\n x = x - width;\n }\n else {\n width = x;\n x = 0;\n }\n }\n var size1 = size.split('px');\n wordWrap(tooltip, text, x, y, size1, width, areaWidth, element);\n var height = tooltip.clientHeight;\n if ((height + parseInt(size1[0], 10) * 2) > areaHeight) {\n width = x;\n x = 0;\n }\n wordWrap(tooltip, text, x, y, size1, width, areaWidth, element);\n if (isTouch) {\n setTimeout(timeout, 5000, id);\n }\n}\nexport function wordWrap(tooltip, text, x, y, size1, width, areaWidth, element) {\n tooltip.innerHTML = text;\n tooltip.style.top = (parseInt(size1[0], 10) * 2).toString() + 'px';\n tooltip.style.left = (x).toString() + 'px';\n tooltip.style.width = width.toString() + 'px';\n tooltip.style.maxWidth = (areaWidth).toString() + 'px';\n tooltip.style.wordWrap = 'break-word';\n element.appendChild(tooltip);\n}\n// /**\n// * \n// * @param touchList \n// * @param e \n// * @param touches \n// */\n// export function addTouchPointer(touchList: ITouches[], e: PointerEvent, touches: TouchList): ITouches[] {\n// if (touches) {\n// touchList = [];\n// for (let i: number = 0, length: number = touches.length; i < length; i++) {\n// touchList.push({ pageX: touches[i].clientX, pageY: touches[i].clientY, pointerId: null });\n// }\n// } else {\n// touchList = touchList ? touchList : [];\n// if (touchList.length === 0) {\n// touchList.push({ pageX: e.clientX, pageY: e.clientY, pointerId: e.pointerId });\n// } else {\n// for (let i: number = 0, length: number = touchList.length; i < length; i++) {\n// if (touchList[i].pointerId === e.pointerId) {\n// touchList[i] = { pageX: e.clientX, pageY: e.clientY, pointerId: e.pointerId };\n// } else {\n// touchList.push({ pageX: e.clientX, pageY: e.clientY, pointerId: e.pointerId });\n// }\n// }\n// }\n// }\n// return touchList;\n// }\n/** @private */\nexport function createTooltip(id, text, top, left, fontSize) {\n var tooltip = getElement(id);\n var style = 'top:' + top.toString() + 'px;' +\n 'left:' + left.toString() + 'px;' +\n 'color: #000000; ' +\n 'background:' + '#FFFFFF' + ';' +\n 'position:absolute;border:1px solid #707070;font-size:' + fontSize + ';border-radius:2px;';\n if (!tooltip) {\n tooltip = createElement('div', {\n id: id, innerHTML: ' ' + text + ' ', styles: style\n });\n document.body.appendChild(tooltip);\n }\n else {\n tooltip.setAttribute('innerHTML', ' ' + text + ' ');\n tooltip.setAttribute('styles', style);\n }\n}\n/** @private */\nexport function drawSymbol(location, shape, size, url, options) {\n var functionName = 'Path';\n var renderer = new SvgRenderer('');\n var temp = calculateLegendShapes(location, size, shape, options, url);\n var htmlObject = renderer['draw' + temp.functionName](temp.renderOption);\n return htmlObject;\n}\n/** @private */\nexport function calculateLegendShapes(location, size, shape, options, url) {\n var path;\n var functionName = 'Path';\n var width = size.width;\n var height = size.height;\n var locX = location.x;\n var locY = location.y;\n var x = location.x + (-width / 2);\n var y = location.y + (-height / 2);\n switch (shape) {\n case 'Circle':\n case 'Bubble':\n functionName = 'Ellipse';\n merge(options, { 'rx': width / 2, 'ry': height / 2, 'cx': locX, 'cy': locY });\n break;\n case 'Star':\n path = 'M ' + (location.x + size.width / 3) + ' ' + (location.y - size.height / 2) + ' L ' + (location.x - size.width / 2)\n + ' ' + (location.y + size.height / 6) + ' L ' + (location.x + size.width / 2) + ' ' + (location.y + size.height / 6)\n + ' L ' + (location.x - size.width / 3) + ' ' + (location.y - size.height / 2) + ' L ' + location.x + ' ' +\n (location.y + size.height / 2) + ' L ' + (location.x + size.width / 3) + ' ' + (location.y - size.height / 2) + ' Z';\n merge(options, { 'd': path });\n break;\n case 'Cross':\n path = 'M' + ' ' + x + ' ' + locY + ' ' + 'L' + ' ' + (locX + (width / 2)) + ' ' + locY + ' ' +\n 'M' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' + 'L' + ' ' + locX + ' ' +\n (locY + (-height / 2));\n merge(options, { 'd': path });\n break;\n case 'HorizontalLine':\n path = 'M' + ' ' + x + ' ' + locY + ' ' + 'L' + ' ' + (locX + (width / 2)) + ' ' + locY;\n merge(options, { 'd': path });\n break;\n case 'VerticalLine':\n path = 'M' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' + 'L' + ' ' + locX + ' ' + (locY + (-height / 2));\n merge(options, { 'd': path });\n break;\n case 'Diamond':\n path = 'M' + ' ' + x + ' ' + locY + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + locY + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + locY + ' z';\n merge(options, { 'd': path });\n break;\n case 'Rectangle':\n path = 'M' + ' ' + x + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (locY + (-height / 2)) + ' z';\n merge(options, { 'd': path });\n break;\n case 'Triangle':\n path = 'M' + ' ' + x + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (locY + (height / 2)) + ' z';\n merge(options, { 'd': path });\n break;\n case 'InvertedTriangle':\n path = 'M' + ' ' + (locX + (width / 2)) + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + (locX - (width / 2)) + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY - (height / 2)) + ' z';\n merge(options, { 'd': path });\n break;\n case 'Pentagon':\n var eq = 72;\n var xValue = void 0;\n var yValue = void 0;\n for (var i = 0; i <= 5; i++) {\n xValue = (width / 2) * Math.cos((Math.PI / 180) * (i * eq));\n yValue = (height / 2) * Math.sin((Math.PI / 180) * (i * eq));\n if (i === 0) {\n path = 'M' + ' ' + (locX + xValue) + ' ' + (locY + yValue) + ' ';\n }\n else {\n path = path.concat('L' + ' ' + (locX + xValue) + ' ' + (locY + yValue) + ' ');\n }\n }\n path = path.concat('Z');\n merge(options, { 'd': path });\n break;\n case 'Image':\n functionName = 'Image';\n merge(options, { 'href': url, 'height': height, 'width': width, x: x, y: y });\n break;\n }\n return { renderOption: options, functionName: functionName };\n}\n/**\n * Animation Effect Calculation End\n * @private\n */\n// export function markerTemplateAnimate(element: Element, delay: number, duration: number, point: MapLocation): void {\n// let delta: number = 0;\n// let top: string = (element as HTMLElement).style.top;\n// let y: number = parseInt(top, 10);\n// new Animation({}).animate(element, {\n// duration: duration,\n// delay: delay,\n// progress: (args: AnimationOptions): void => {\n// if (args.timeStamp > args.delay) {\n// delta = ((args.timeStamp - args.delay) / args.duration);\n// (element as HTMLElement).style.top = y - 100 + (delta * 100) + 'px';\n// }\n// },\n// end: (model: AnimationOptions) => {\n// (element as HTMLElement).style.top = top;\n// }\n// });\n// }\n/** @private */\nexport function getElementOffset(childElement, parentElement) {\n var width;\n var height;\n parentElement.appendChild(childElement);\n width = childElement.offsetWidth;\n height = childElement.offsetHeight;\n parentElement.removeChild(childElement);\n return new Size(width, height);\n}\n/** @private */\nexport function changeBorderWidth(element, index, scale, maps) {\n var childNode;\n for (var l = 0; l < element.childElementCount; l++) {\n childNode = element.childNodes[l];\n if (childNode.id.indexOf('_NavigationGroup') > -1) {\n changeNavaigationLineWidth(childNode, index, scale, maps);\n }\n else {\n var currentStroke = (maps.layersCollection[index].shapeSettings.border.width);\n childNode.setAttribute('stroke-width', (currentStroke / scale).toString());\n }\n }\n}\n/** @private */\nexport function changeNavaigationLineWidth(element, index, scale, maps) {\n var node;\n for (var m = 0; m < element.childElementCount; m++) {\n node = element.childNodes[m];\n if (node.tagName === 'path') {\n var currentStroke = (maps.layersCollection[index]\n .navigationLineSettings[parseFloat(node.id.split('_')[2])].width);\n node.setAttribute('stroke-width', (currentStroke / scale).toString());\n }\n }\n}\n// /** Pinch zoom helper methods */\n/** @private */\nexport function targetTouches(event) {\n var targetTouches = [];\n var touches = event.touches;\n for (var i = 0; i < touches.length; i++) {\n targetTouches.push({ pageX: touches[i].pageX, pageY: touches[i].pageY });\n }\n return targetTouches;\n}\n/** @private */\nexport function calculateScale(startTouches, endTouches) {\n var startDistance = getDistance(startTouches[0], startTouches[1]);\n var endDistance = getDistance(endTouches[0], endTouches[1]);\n return (endDistance / startDistance);\n}\n/** @private */\nexport function getDistance(a, b) {\n var x = a.pageX - b.pageX;\n var y = a.pageY - b.pageY;\n return Math.sqrt(x * x + y * y);\n}\n/** @private */\nexport function getTouches(touches, maps) {\n var rect = maps.element.getBoundingClientRect();\n var posTop = rect.top + document.defaultView.pageXOffset;\n var posLeft = rect.left + document.defaultView.pageYOffset;\n return Array.prototype.slice.call(touches).map(function (touch) {\n return {\n x: touch.pageX - posLeft,\n y: touch.pageY - posTop,\n };\n });\n}\n/** @private */\nexport function getTouchCenter(touches) {\n return {\n x: touches.map(function (e) { return e['x']; }).reduce(sum) / touches.length,\n y: touches.map(function (e) { return e['y']; }).reduce(sum) / touches.length\n };\n}\n/** @private */\nexport function sum(a, b) {\n return a + b;\n}\n/**\n * Animation Effect Calculation End\n * @private\n */\nexport function zoomAnimate(element, delay, duration, point, scale, size, maps) {\n var delta = 0;\n var previousLocation = maps.previousPoint;\n var preScale = maps.previousScale;\n var diffScale = scale - preScale;\n var currentLocation = new MapLocation(0, 0);\n var currentScale = 1;\n if (scale === preScale) {\n element.setAttribute('transform', 'scale( ' + (scale) + ' ) translate( ' + point.x + ' ' + point.y + ' )');\n return;\n }\n var slope = function (previousLocation, point) {\n if (previousLocation.x === point.x) {\n return null;\n }\n return (point.y - previousLocation.y) / (point.x - previousLocation.x);\n };\n var intercept = function (point, slopeValue) {\n if (slopeValue === null) {\n return point.x;\n }\n return point.y - slopeValue * point.x;\n };\n var slopeFactor = slope(previousLocation, point);\n var slopeIntersection = intercept(previousLocation, slopeFactor);\n var horizontalDifference = point.x - previousLocation.x;\n var verticalDifference = point.y - previousLocation.y;\n animate(element, delay, duration, function (args) {\n if (args.timeStamp > args.delay) {\n delta = ((args.timeStamp - args.delay) / args.duration);\n currentScale = preScale + (delta * diffScale);\n currentLocation.x = previousLocation.x + (delta * horizontalDifference) / (currentScale / scale);\n if (slopeFactor == null) {\n currentLocation.y = previousLocation.y + (delta * verticalDifference);\n }\n else {\n currentLocation.y = ((slopeFactor * currentLocation.x) + slopeIntersection);\n }\n args.element.setAttribute('transform', 'scale( ' + currentScale + ' ) ' +\n 'translate( ' + currentLocation.x + ' ' + currentLocation.y + ' )');\n maps.translatePoint = currentLocation;\n maps.scale = currentScale;\n maps.zoomModule.processTemplate(point.x, point.y, currentScale, maps);\n }\n }, function () {\n maps.translatePoint = point;\n maps.scale = scale;\n element.setAttribute('transform', 'scale( ' + (scale) + ' ) translate( ' + point.x + ' ' + point.y + ' )');\n maps.zoomModule.processTemplate(point.x, point.y, scale, maps);\n });\n}\n/**\n * To process custom animation\n */\nexport function animate(element, delay, duration, process, end) {\n var _this = this;\n var start = null;\n var clearAnimation;\n var startAnimation = function (timestamp) {\n if (!start) {\n start = timestamp;\n }\n var progress = timestamp - start;\n if (progress < duration) {\n process.call(_this, { element: element, delay: 0, timeStamp: progress, duration: duration });\n window.requestAnimationFrame(startAnimation);\n }\n else {\n window.cancelAnimationFrame(clearAnimation);\n end.call(_this, { element: element });\n }\n };\n clearAnimation = window.requestAnimationFrame(startAnimation);\n}\nvar MapAjax = /** @class */ (function () {\n function MapAjax(options, type, async, contentType, sendData) {\n this.dataOptions = options;\n this.type = type || 'GET';\n this.async = async || true;\n this.contentType = contentType;\n this.sendData = sendData;\n }\n return MapAjax;\n}());\nexport { MapAjax };\n/**\n * Animation Translate\n * @private\n */\nexport function smoothTranslate(element, delay, duration, point) {\n var delta = 0;\n var transform = element.getAttribute('transform').split(' ');\n if (transform.length === 2) {\n transform[2] = transform[1].split(')')[0];\n transform[1] = transform[0].split('(')[1];\n }\n var previousLocation = new MapLocation(parseInt(transform[1], 10), parseInt(transform[2], 10));\n var diffx = point.x - previousLocation.x;\n var diffy = point.y - previousLocation.y;\n var currentLocation = new MapLocation(0, 0);\n animate(element, delay, duration, function (args) {\n if (args.timeStamp > args.delay) {\n delta = ((args.timeStamp - args.delay) / args.duration);\n currentLocation.x = previousLocation.x + (delta * diffx);\n currentLocation.y = previousLocation.y + (delta * diffy);\n args.element.setAttribute('transform', 'translate( ' + currentLocation.x + ' ' + currentLocation.y + ' )');\n }\n }, function () {\n element.setAttribute('transform', 'translate( ' + point.x + ' ' + point.y + ' )');\n });\n}\n","/**\n * Exports util methods used by RichTextEditor.\n */\nimport { isNullOrUndefined as isNOU, addClass, removeClass, selectAll } from '@syncfusion/ej2-base';\nimport * as classes from '../base/classes';\nimport * as model from '../models/items';\nimport { toolsLocale } from '../models/default-locale';\nvar undoRedoItems = ['Undo', 'Redo'];\nexport function getIndex(val, items) {\n var index = -1;\n items.some(function (item, i) {\n if (typeof item === 'string' && val === item.toLocaleLowerCase()) {\n index = i;\n return true;\n }\n return false;\n });\n return index;\n}\nexport function hasClass(element, className) {\n var hasClass = false;\n if (element.classList.contains(className)) {\n hasClass = true;\n }\n return hasClass;\n}\nexport function getDropDownValue(items, value, type, returnType) {\n var data;\n var result;\n for (var k = 0; k < items.length; k++) {\n if (type === 'value' && items[k].value.toLocaleLowerCase() === value.toLocaleLowerCase()) {\n data = items[k];\n break;\n }\n else if (type === 'text' && items[k].text.toLocaleLowerCase() === value.toLocaleLowerCase()) {\n data = items[k];\n break;\n }\n else if (type === 'subCommand' && items[k].subCommand.toLocaleLowerCase() === value.toLocaleLowerCase()) {\n data = items[k];\n break;\n }\n }\n if (!isNOU(data)) {\n switch (returnType) {\n case 'text':\n result = data.text;\n break;\n case 'value':\n result = data.value;\n break;\n case 'iconCss':\n result = data.iconCss;\n break;\n }\n }\n return result;\n}\nexport function isIDevice() {\n var result = false;\n var iosDevices = ['iphone', 'ipad', 'ipod'];\n for (var i = 0; i < iosDevices.length; i++) {\n if (navigator.platform.toLocaleLowerCase().indexOf(iosDevices[i]) > -1) {\n result = true;\n break;\n }\n }\n return result;\n}\nexport function getFormattedFontSize(value) {\n if (isNOU(value)) {\n return '';\n }\n var result = value.split('pt');\n return result[0] + ' pt';\n}\nexport function pageYOffset(e, parentElement, isIFrame) {\n var y = 0;\n if (isIFrame) {\n y = window.pageYOffset + parentElement.getBoundingClientRect().top + e.clientY;\n }\n else {\n y = e.pageY;\n }\n return y;\n}\nexport function getTooltipText(item, serviceLocator) {\n var i10n = serviceLocator.getService('rteLocale');\n var itemLocale = toolsLocale[item];\n var tooltipText = i10n.getConstant(itemLocale);\n return tooltipText;\n}\nexport function setToolbarStatus(e, isPopToolbar) {\n var dropDown = e.dropDownModule;\n var data = e.args;\n var keys = Object.keys(e.args);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n for (var j = 0; j < e.tbItems.length; j++) {\n var item = e.tbItems[j].subCommand;\n var itemStr = item && item.toLocaleLowerCase();\n if (item && (itemStr === key) || (item === 'UL' && key === 'unorderedlist') || (item === 'OL' && key === 'orderedlist')) {\n if (typeof data[key] === 'boolean') {\n if (data[key] === true) {\n addClass([e.tbElements[j]], [classes.CLS_ACTIVE]);\n }\n else {\n removeClass([e.tbElements[j]], [classes.CLS_ACTIVE]);\n }\n }\n else if ((typeof data[key] === 'string' || data[key] === null) &&\n getIndex(key, e.parent.toolbarSettings.items) > -1) {\n var value = ((data[key]) ? data[key] : '');\n var result = '';\n switch (key) {\n case 'formats':\n if (isNOU(dropDown.formatDropDown) || isPopToolbar) {\n return;\n }\n var formatItems = e.parent.format.types;\n result = getDropDownValue(formatItems, value, 'subCommand', 'text');\n dropDown.formatDropDown.content = ('' +\n ''\n + (isNOU(result) ? 'Paragraph' : result) +\n '');\n dropDown.formatDropDown.dataBind();\n break;\n case 'alignments':\n if (isNOU(dropDown.alignDropDown)) {\n return;\n }\n var alignItems = model.alignmentItems;\n result = getDropDownValue(alignItems, value, 'subCommand', 'iconCss');\n dropDown.alignDropDown.iconCss = isNOU(result) ? 'e-icons e-justify-left' : result;\n dropDown.alignDropDown.dataBind();\n break;\n case 'fontname':\n if (isNOU(dropDown.fontNameDropDown) || isPopToolbar) {\n return;\n }\n var fontNameItems = e.parent.fontFamily.items;\n result = getDropDownValue(fontNameItems, value, 'value', 'text');\n var name_1 = (isNOU(result) ? 'Segoe UI' : result);\n e.tbElements[j].title = name_1;\n dropDown.fontNameDropDown.content = ('' +\n ''\n + name_1 + '');\n dropDown.fontNameDropDown.dataBind();\n break;\n case 'fontsize':\n if (isNOU(dropDown.fontSizeDropDown)) {\n return;\n }\n var fontSizeItems = e.parent.fontSize.items;\n result = getDropDownValue(fontSizeItems, value, 'value', 'value');\n dropDown.fontSizeDropDown.content = ('' +\n ''\n + (isNOU(result) ? '10 pt' : getFormattedFontSize(result)) +\n '');\n dropDown.fontSizeDropDown.dataBind();\n break;\n }\n }\n }\n }\n }\n}\nexport function getCollection(items) {\n if (typeof items === 'object') {\n return items;\n }\n else {\n return [items];\n }\n}\nexport function getTBarItemsIndex(items, toolbarItems) {\n var itemsIndex = [];\n for (var i = 0; i < items.length; i++) {\n for (var j = 0; j < toolbarItems.length; j++) {\n if (toolbarItems[j].type === 'Separator') {\n continue;\n }\n else {\n if (items[i] === 'OrderedList' && toolbarItems[j].subCommand === 'OL') {\n itemsIndex.push(j);\n break;\n }\n else if (items[i] === 'UnorderedList' && toolbarItems[j].subCommand === 'UL') {\n itemsIndex.push(j);\n break;\n }\n else if (items[i] === toolbarItems[j].subCommand) {\n itemsIndex.push(j);\n break;\n }\n }\n }\n }\n return itemsIndex;\n}\nexport function updateUndoRedoStatus(baseToolbar, undoRedoStatus) {\n var i = 0;\n var trgItems = getTBarItemsIndex(getCollection(undoRedoItems), baseToolbar.toolbarObj.items);\n var tbItems = selectAll('.' + classes.CLS_TB_ITEM, baseToolbar.toolbarObj.element);\n var keys = Object.keys(undoRedoStatus);\n for (var _i = 0, keys_2 = keys; _i < keys_2.length; _i++) {\n var key = keys_2[_i];\n var target = tbItems[trgItems[i]];\n if (target) {\n baseToolbar.toolbarObj.enableItems(target, undoRedoStatus[key]);\n }\n i++;\n }\n}\n/**\n * To dispatch the event manually\n */\nexport function dispatchEvent(element, type) {\n var evt = document.createEvent('HTMLEvents');\n evt.initEvent(type, false, true);\n element.dispatchEvent(evt);\n}\n","export function setAttributes(htmlAttributes, rte, isFrame) {\n var target;\n if (isFrame) {\n var iFrame = rte.contentModule.getDocument();\n target = iFrame.querySelector('body');\n }\n else {\n target = rte.element;\n }\n if (Object.keys(htmlAttributes).length) {\n for (var _i = 0, _a = Object.keys(htmlAttributes); _i < _a.length; _i++) {\n var htmlAttr = _a[_i];\n if (htmlAttr === 'class') {\n target.classList.add(htmlAttributes[htmlAttr]);\n }\n else if (htmlAttr === 'disabled' && htmlAttributes[htmlAttr] === 'disabled') {\n rte.enabled = false;\n rte.setEnable();\n }\n else if (htmlAttr === 'readonly' && htmlAttributes[htmlAttr] === 'readonly') {\n rte.readonly = true;\n rte.setReadOnly();\n }\n else if (htmlAttr === 'style') {\n target.setAttribute('style', htmlAttributes[htmlAttr]);\n }\n else if (htmlAttr === 'placeholder') {\n rte.placeholder = htmlAttributes[htmlAttr];\n rte.setPlaceHolder();\n }\n else {\n var validateAttr = ['name', 'required'];\n if (validateAttr.indexOf(htmlAttr) > -1) {\n rte.valueContainer.setAttribute(htmlAttr, htmlAttributes[htmlAttr]);\n }\n else {\n target.setAttribute(htmlAttr, htmlAttributes[htmlAttr]);\n }\n }\n }\n }\n}\n","/**\n * Schedule common utilities\n */\nexport var WEEK_LENGTH = 7;\nexport var MS_PER_DAY = 86400000;\nexport var MS_PER_MINUTE = 60000;\nexport function getWeekFirstDate(date1, firstDayOfWeek) {\n var date = new Date(date1.getTime());\n firstDayOfWeek = (firstDayOfWeek - date.getDay() + 7 * (-1)) % 7;\n return new Date(date.setDate(date.getDate() + firstDayOfWeek));\n}\nexport function firstDateOfMonth(date) {\n return new Date(date.getFullYear(), date.getMonth());\n}\nexport function lastDateOfMonth(dt) {\n return new Date(dt.getFullYear(), dt.getMonth() + 1, 0);\n}\nexport function getWeekNumber(dt) {\n var currentDate = new Date('' + dt).valueOf();\n var date = new Date(dt.getFullYear(), 0, 1).valueOf();\n var a = (currentDate - date);\n return Math.ceil((((a) / MS_PER_DAY) + new Date(date).getDay() + 1) / 7);\n}\nexport function setTime(date, time) {\n var tzOffsetBefore = date.getTimezoneOffset();\n var d = new Date(date.getTime() + time);\n var tzOffsetDiff = d.getTimezoneOffset() - tzOffsetBefore;\n date.setTime(d.getTime() + tzOffsetDiff * MS_PER_DAY);\n return date;\n}\nexport function resetTime(date) {\n date.setHours(0, 0, 0, 0);\n return date;\n}\nexport function getDateInMs(date) {\n return date.getTime() - new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0).getTime();\n}\nexport function addDays(date, i) {\n date = new Date('' + date);\n return new Date(date.setDate(date.getDate() + i));\n}\nexport function addMonths(date, i) {\n date = new Date('' + date);\n var day = date.getDate();\n date.setDate(1);\n date.setMonth(date.getMonth() + i);\n date.setDate(Math.min(day, getMaxDays(date)));\n return date;\n}\nexport function addYears(date, i) {\n date = new Date('' + date);\n var day = date.getDate();\n date.setDate(1);\n date.setFullYear(date.getFullYear() + i);\n date.setDate(Math.min(day, getMaxDays(date)));\n return date;\n}\nexport function getStartEndHours(date, startHour, endHour) {\n var date1 = new Date(date.getTime());\n date1.setHours(startHour.getHours());\n date1.setMinutes(startHour.getMinutes());\n date1.setSeconds(startHour.getSeconds());\n var date2 = new Date(date.getTime());\n if (endHour.getHours() === 0) {\n date2 = addDays(date2, 1);\n }\n else {\n date2.setHours(endHour.getHours());\n date2.setMinutes(endHour.getMinutes());\n date2.setSeconds(endHour.getSeconds());\n }\n return { startHour: date1, endHour: date2 };\n}\nexport function getMaxDays(d) {\n var date = new Date(d.getFullYear(), d.getMonth() + 1, 0);\n return date.getDate();\n}\nexport function getDaysCount(startDate, endDate) {\n var strTime = resetTime(new Date(startDate));\n var endTime = resetTime(new Date(endDate));\n return (endTime.getTime() - strTime.getTime()) / MS_PER_DAY;\n}\nexport function getDateFromString(date) {\n return date.indexOf('Date') !== -1 ? new Date(parseInt(date.match(/\\d+/g).toString(), 10)) :\n date.indexOf('T') !== -1 ? new Date(date) : new Date(date.replace(/-/g, '/'));\n}\n/** @hidden */\nvar scrollWidth = null;\n/** @hidden */\nexport function getScrollBarWidth() {\n if (scrollWidth !== null) {\n return scrollWidth;\n }\n var divNode = document.createElement('div');\n var value = 0;\n divNode.style.cssText = 'width:100px;height: 100px;overflow: scroll;position: absolute;top: -9999px;';\n document.body.appendChild(divNode);\n value = (divNode.offsetWidth - divNode.clientWidth) | 0;\n document.body.removeChild(divNode);\n return scrollWidth = value;\n}\nexport function findIndexInData(data, property, value) {\n for (var i = 0, length_1 = data.length; i < length_1; i++) {\n if (data[i][property] === value) {\n return i;\n }\n }\n return -1;\n}\n","import { isNullOrUndefined, getDefaultDateObject, getValue, cldrData } from '@syncfusion/ej2-base';\nimport { MS_PER_DAY } from '../schedule/base/util';\n/**\n * Date Generator from Recurrence Rule\n */\nexport function generateSummary(rule, localeObject, locale) {\n var ruleObject = extractObjectFromRule(rule);\n var summary = localeObject.getConstant(EVERY) + ' ';\n var cldrObj;\n var cldrObj1;\n if (locale === 'en' || locale === 'en-US') {\n cldrObj1 = (getValue('months.stand-alone.abbreviated', getDefaultDateObject()));\n cldrObj = (getValue('days.stand-alone.abbreviated', getDefaultDateObject()));\n }\n else {\n cldrObj1 = (getValue('main.' + '' + locale + '.dates.calendars.gregorian.months.stand-alone.abbreviated', cldrData));\n cldrObj = (getValue('main.' + '' + locale + '.dates.calendars.gregorian.days.stand-alone.abbreviated', cldrData));\n }\n if (ruleObject.interval > 1) {\n summary += ruleObject.interval + ' ';\n }\n switch (ruleObject.freq) {\n case 'DAILY':\n summary += localeObject.getConstant(DAYS);\n break;\n case 'WEEKLY':\n summary += localeObject.getConstant(WEEKS) + ' ' + localeObject.getConstant(ON) + ' ';\n ruleObject.day.forEach(function (day, index) {\n summary += getValue(DAYINDEXOBJECT[day], cldrObj);\n summary += (((ruleObject.day.length - 1) === index) ? '' : ', ');\n });\n break;\n case 'MONTHLY':\n summary += localeObject.getConstant(MONTHS) + ' ' + localeObject.getConstant(ON) + ' ';\n summary += getMonthSummary(ruleObject, cldrObj, localeObject);\n break;\n case 'YEARLY':\n summary += localeObject.getConstant(YEARS) + ' ' + localeObject.getConstant(ON) + ' ';\n summary += getValue((ruleObject.month[0]).toString(), cldrObj1) + ' ';\n summary += getMonthSummary(ruleObject, cldrObj, localeObject);\n break;\n default:\n return '';\n }\n if (ruleObject.count) {\n summary += ', ' + (ruleObject.count) + ' ' + localeObject.getConstant(TIMES);\n }\n else if (ruleObject.until) {\n var tempDate = ruleObject.until;\n summary += ', ' + localeObject.getConstant(UNTIL)\n + ' ' + tempDate.getDate()\n + ' ' + getValue((tempDate.getMonth() + 1).toString(), cldrObj1)\n + ' ' + tempDate.getFullYear();\n }\n return summary;\n}\nfunction getMonthSummary(ruleObject, cldrObj, localeObj) {\n var summary = '';\n if (ruleObject.monthDay.length) {\n summary += ruleObject.monthDay[0];\n }\n else if (ruleObject.day) {\n var pos = ruleObject.setPosition - 1;\n summary += localeObj.getConstant(WEEKPOS[pos > -1 ? pos : (WEEKPOS.length - 1)])\n + ' ' + getValue(DAYINDEXOBJECT[ruleObject.day[0]], cldrObj);\n }\n return summary;\n}\nexport function generate(startDate, rule, excludeDate, startDayOfWeek, maximumCount, viewDate) {\n if (maximumCount === void 0) { maximumCount = MAXOCCURRENCE; }\n if (viewDate === void 0) { viewDate = null; }\n var ruleObject = extractObjectFromRule(rule);\n var cacheDate;\n var data = [];\n var modifiedDate = new Date(startDate.getTime());\n if (viewDate && viewDate > startDate && !ruleObject.count) {\n tempViewDate = new Date(new Date(viewDate.getTime()).setHours(0, 0, 0));\n }\n else {\n tempViewDate = null;\n }\n if (!ruleObject.until && tempViewDate) {\n cacheDate = new Date(tempViewDate.getTime());\n cacheDate.setDate(tempViewDate.getDate() + 42 * (ruleObject.interval));\n ruleObject.until = cacheDate;\n }\n if (ruleObject.until && startDate > ruleObject.until) {\n return data;\n }\n maxOccurrence = maximumCount;\n setFirstDayOfWeek(DAYINDEX[startDayOfWeek]);\n tempExcludeDate = [];\n var tempDate = isNullOrUndefined(excludeDate) ? [] : excludeDate.split(',');\n tempDate.forEach(function (content) {\n var parsedDate = getDateFromRecurrenceDateString(content);\n tempExcludeDate.push(new Date(parsedDate.getTime()).setHours(0, 0, 0, 0));\n });\n switch (ruleObject.freq) {\n case 'DAILY':\n dailyType(modifiedDate, ruleObject.until, data, ruleObject);\n break;\n case 'WEEKLY':\n weeklyType(modifiedDate, ruleObject.until, data, ruleObject);\n break;\n case 'MONTHLY':\n monthlyType(modifiedDate, ruleObject.until, data, ruleObject);\n break;\n case 'YEARLY':\n yearlyType(modifiedDate, ruleObject.until, data, ruleObject);\n }\n return data;\n}\nfunction getDateFromRecurrenceDateString(recDateString) {\n return new Date(recDateString.substr(0, 4) +\n '-' + recDateString.substr(4, 2) +\n '-' + recDateString.substr(6, 5) +\n ':' + recDateString.substr(11, 2) +\n ':' + recDateString.substr(13));\n}\nfunction excludeDateHandler(data, date) {\n var zeroIndex = new Date(date).setHours(0, 0, 0, 0);\n if (tempExcludeDate.indexOf(zeroIndex) === -1 && (!tempViewDate || zeroIndex >= tempViewDate.getTime())) {\n data.push(date);\n }\n}\nfunction dailyType(startDate, endDate, data, ruleObject) {\n var tempDate = new Date(startDate.getTime());\n var interval = ruleObject.interval;\n var expectedCount = ruleObject.count ? ruleObject.count : maxOccurrence;\n var state;\n while (compareDates(tempDate, endDate)) {\n state = true;\n state = validateRules(tempDate, ruleObject);\n if (state) {\n excludeDateHandler(data, tempDate.getTime());\n if (expectedCount && (data.length + tempExcludeDate.length) >= expectedCount) {\n break;\n }\n }\n tempDate.setDate(tempDate.getDate() + interval);\n }\n}\nfunction weeklyType(startDate, endDate, data, ruleObject) {\n var tempDate = getStartDateForWeek(startDate, ruleObject.day);\n var interval = ruleObject.interval;\n var expectedDays = ruleObject.day;\n var expectedCount = ruleObject.count ? ruleObject.count : maxOccurrence;\n var state;\n var dayCycleData = processWeekDays(expectedDays);\n while (compareDates(tempDate, endDate)) {\n state = true;\n state = validateRules(tempDate, ruleObject);\n if (state) {\n excludeDateHandler(data, tempDate.getTime());\n if (expectedCount && (data.length + tempExcludeDate.length) >= expectedCount) {\n break;\n }\n }\n if (expectedDays.length > 1) {\n tempDate.setDate(tempDate.getDate()\n + dayCycleData[DAYINDEX[tempDate.getDay()]]\n + ((expectedDays.indexOf(DAYINDEX[tempDate.getDay()]) === expectedDays.length - 1) ?\n ((interval - 1) * 7) : 0));\n }\n else {\n tempDate.setDate(tempDate.getDate()\n + (interval * 7));\n }\n }\n}\nfunction monthlyType(startDate, endDate, data, ruleObject) {\n var ruleType = validateMonthlyRuleType(ruleObject);\n switch (ruleType) {\n case 'day':\n monthlyDayTypeProcess(startDate, endDate, data, ruleObject);\n break;\n case 'both':\n case 'date':\n monthlyDateTypeProcess(startDate, endDate, data, ruleObject);\n break;\n }\n}\nfunction yearlyType(startDate, endDate, data, ruleObject) {\n var typeValue = checkYearlyType(ruleObject);\n switch (typeValue) {\n case 'MONTH':\n monthlyType(startDate, endDate, data, ruleObject);\n break;\n case 'WEEKNO':\n processWeekNo(startDate, endDate, data, ruleObject);\n break;\n case 'YEARDAY':\n processYearDay(startDate, endDate, data, ruleObject);\n break;\n }\n}\nfunction processWeekNo(startDate, endDate, data, ruleObject) {\n var stDate = new Date(startDate.getFullYear(), 0, 0);\n var tempDate;\n var expectedCount = ruleObject.count ? ruleObject.count : maxOccurrence;\n var state;\n var startDay;\n var firstWeekSpan;\n var weekNos = ruleObject.weekNo;\n var weekNo;\n var maxDate;\n var minDate;\n while (compareDates(stDate, endDate)) {\n startDay = dayIndex.indexOf(DAYINDEX[stDate.getDay()]);\n firstWeekSpan = (6 - startDay) + 1;\n for (var index = 0; index < weekNos.length; index++) {\n weekNo = weekNos[index];\n weekNo = (weekNo > 0) ? weekNo : 53 + weekNo + 1;\n maxDate = (weekNo === 1) ? firstWeekSpan : firstWeekSpan + ((weekNo - 1) * 7);\n minDate = (weekNo === 1) ? firstWeekSpan - 7 : firstWeekSpan + ((weekNo - 2) * 7);\n while (minDate < maxDate) {\n tempDate = new Date(stDate.getTime() + (MS_PER_DAY * minDate));\n state = validateRules(tempDate, ruleObject);\n if ((tempDate >= startDate) && state && compareDates(tempDate, endDate)) {\n excludeDateHandler(data, tempDate.getTime());\n if (expectedCount && (data.length + tempExcludeDate.length) >= expectedCount) {\n return;\n }\n }\n minDate++;\n }\n }\n stDate = new Date(tempDate.getFullYear() + ruleObject.interval, 0, 0);\n }\n}\nfunction processYearDay(startDate, endDate, data, ruleObject) {\n var stDate = new Date(startDate.getFullYear(), 0, 0);\n var tempDate;\n var expectedCount = ruleObject.count ? ruleObject.count : maxOccurrence;\n var state;\n var date;\n while (compareDates(stDate, endDate)) {\n for (var index = 0; index < ruleObject.yearDay.length; index++) {\n date = ruleObject.yearDay[index];\n tempDate = new Date(stDate.getTime());\n if ((date === LEAPYEAR || date === -LEAPYEAR) && ((tempDate.getFullYear() + 1) % 4 !== 0)) {\n tempDate.setDate(tempDate.getDate() + 1);\n continue;\n }\n tempDate.setDate(tempDate.getDate() + ((date < 0) ? getMaxYearDay(tempDate.getFullYear() + 1) + 1 + date : date));\n state = validateRules(tempDate, ruleObject);\n if ((tempDate >= startDate) && state && compareDates(tempDate, endDate)) {\n excludeDateHandler(data, tempDate.getTime());\n if (expectedCount && (data.length + tempExcludeDate.length) >= expectedCount) {\n return;\n }\n }\n }\n stDate = new Date(tempDate.getFullYear() + ruleObject.interval, 0, 0);\n }\n}\nfunction getMaxYearDay(date) {\n return (date % 4 === 0) ? LEAPYEAR : NORMALYEAR;\n}\nfunction checkYearlyType(ruleObject) {\n if (ruleObject.yearDay.length) {\n return 'YEARDAY';\n }\n else if (ruleObject.weekNo.length) {\n return 'WEEKNO';\n }\n return 'MONTH';\n}\nfunction monthlyDateTypeProcess(startDate, endDate, data, ruleObject) {\n var tempDate = new Date(startDate.getTime());\n var mainDate = new Date(startDate.getTime());\n var expectedCount = ruleObject.count ? ruleObject.count : maxOccurrence;\n var interval = ruleObject.interval;\n var monthInit = 0;\n var date;\n var state;\n tempDate.setDate(1);\n mainDate.setDate(1);\n if (ruleObject.month.length) {\n tempDate.setMonth(ruleObject.month[0] - 1);\n }\n while (compareDates(tempDate, endDate)) {\n for (var index = 0; index < ruleObject.monthDay.length; index++) {\n date = ruleObject.monthDay[index];\n var maxDate = (tempDate.getMonth() === 1) ?\n (tempDate.getFullYear() % 4 === 0 ? 29 : 28) : monthDay[tempDate.getMonth()];\n date = date > 0 ? date : (maxDate + date + 1);\n if ((date > 0) && validateProperDate(tempDate, date, mainDate)) {\n tempDate.setDate(date);\n if (endDate && tempDate > endDate) {\n return;\n }\n state = validateRules(tempDate, ruleObject);\n if ((tempDate >= startDate) && state && compareDates(tempDate, endDate)) {\n excludeDateHandler(data, tempDate.getTime());\n if (expectedCount && (data.length + tempExcludeDate.length) >= expectedCount) {\n return;\n }\n }\n }\n }\n monthInit = setNextValidDate(tempDate, ruleObject, monthInit, interval);\n }\n}\nfunction setNextValidDate(tempDate, ruleObject, monthInit, interval, beginDate) {\n if (beginDate === void 0) { beginDate = null; }\n var monthData = beginDate ? beginDate.getMonth() : 0;\n tempDate.setDate(1);\n if (ruleObject.month.length) {\n monthInit++;\n monthInit = monthInit % ruleObject.month.length;\n tempDate.setMonth(ruleObject.month[monthInit] - 1);\n if (monthInit === 0) {\n tempDate.setFullYear(tempDate.getFullYear() + interval);\n }\n }\n else {\n if (beginDate && (beginDate.getFullYear() < tempDate.getFullYear())) {\n monthData = tempDate.getMonth() - 1;\n }\n tempDate.setMonth((beginDate ?\n monthData :\n tempDate.getMonth()) + interval);\n }\n return monthInit;\n}\nfunction monthlyDayTypeProcess(startDate, endDate, data, ruleObject) {\n var tempDate = new Date(startDate.getTime());\n var expectedDays = ruleObject.day;\n var expectedCount = ruleObject.count ? ruleObject.count : maxOccurrence;\n var dayCycleData = processWeekDays(expectedDays);\n var interval = ruleObject.interval;\n var state;\n var monthCollection = [];\n var weekCollection = [];\n var month;\n var index;\n var beginDate;\n var monthInit = 0;\n tempDate.setDate(1);\n if (ruleObject.month.length) {\n tempDate.setMonth(ruleObject.month[0] - 1);\n }\n tempDate = getStartDateForWeek(tempDate, ruleObject.day);\n while (compareDates(tempDate, endDate)) {\n month = tempDate.getMonth();\n beginDate = new Date(tempDate.getTime());\n if (expectedDays.length > 1) {\n while (tempDate.getMonth() === month) {\n weekCollection.push(tempDate.getTime());\n if (DAYINDEX[tempDate.getDay()] === expectedDays[expectedDays.length - 1]) {\n monthCollection.push(weekCollection);\n weekCollection = [];\n }\n tempDate.setDate(tempDate.getDate()\n + dayCycleData[DAYINDEX[tempDate.getDay()]]);\n }\n }\n else {\n var currentMonthDate = new Date(tempDate.getTime());\n while (currentMonthDate.getMonth() === month) {\n monthCollection.push([currentMonthDate.getTime()]);\n currentMonthDate.setDate(currentMonthDate.getDate() + (7));\n }\n }\n index = ((ruleObject.setPosition < 1) ? (monthCollection.length + ruleObject.setPosition) : ruleObject.setPosition - 1);\n if (ruleObject.setPosition === null) {\n index = 0;\n var datas = [];\n for (var week = 0; week < monthCollection.length; week++) {\n for (var row = 0; row < monthCollection[week].length; row++) {\n datas.push(monthCollection[week][row]);\n }\n }\n monthCollection = [datas];\n }\n for (var week = 0; week < monthCollection[index].length; week++) {\n var dayData = monthCollection[index][week];\n var chDate = new Date(dayData);\n state = validateRules(chDate, ruleObject);\n if ((chDate >= startDate) && compareDates(chDate, endDate) && state) {\n excludeDateHandler(data, dayData);\n if (expectedCount && (data.length + tempExcludeDate.length) >= expectedCount) {\n return;\n }\n }\n }\n monthInit = setNextValidDate(tempDate, ruleObject, monthInit, interval, beginDate);\n monthCollection = [];\n weekCollection = [];\n tempDate = getStartDateForWeek(tempDate, ruleObject.day);\n }\n}\nfunction compareDates(startDate, endDate) {\n return endDate ? (startDate <= endDate) : true;\n}\nfunction checkDayIndex(day, expectedDays) {\n return (expectedDays.indexOf(DAYINDEX[day]) === -1);\n}\nfunction getStartDateForWeek(startDate, expectedDays) {\n var tempDate = new Date(startDate.getTime());\n if (expectedDays.indexOf(DAYINDEX[tempDate.getDay()]) === -1) {\n do {\n tempDate.setDate(tempDate.getDate() + 1);\n } while (expectedDays.indexOf(DAYINDEX[tempDate.getDay()]) === -1);\n }\n return tempDate;\n}\nexport function extractObjectFromRule(rules) {\n var ruleObject = {\n freq: null,\n interval: 1,\n count: null,\n until: null,\n day: [],\n month: [],\n weekNo: [],\n monthDay: [],\n yearDay: [],\n setPosition: null,\n validRules: []\n };\n var rulesList = rules.split(';');\n var splitData = [];\n var temp;\n rulesList.forEach(function (data) {\n splitData = data.split('=');\n switch (splitData[0]) {\n case 'UNTIL':\n temp = splitData[1];\n ruleObject.until = getDateFromRecurrenceDateString(temp);\n break;\n case 'BYDAY':\n ruleObject.day = splitData[1].split(',');\n ruleObject.validRules.push(splitData[0]);\n break;\n case 'BYMONTHDAY':\n ruleObject.monthDay = splitData[1].split(',').map(Number);\n ruleObject.validRules.push(splitData[0]);\n break;\n case 'BYMONTH':\n ruleObject.month = splitData[1].split(',').map(Number);\n ruleObject.validRules.push(splitData[0]);\n break;\n case 'BYYEARDAY':\n ruleObject.yearDay = splitData[1].split(',').map(Number);\n ruleObject.validRules.push(splitData[0]);\n break;\n case 'BYWEEKNO':\n ruleObject.weekNo = splitData[1].split(',').map(Number);\n ruleObject.validRules.push(splitData[0]);\n break;\n case 'INTERVAL':\n ruleObject.interval = parseInt(splitData[1], 10);\n break;\n case 'COUNT':\n ruleObject.count = parseInt(splitData[1], 10);\n break;\n case 'BYSETPOS':\n ruleObject.setPosition = parseInt(splitData[1], 10);\n break;\n case 'FREQ':\n ruleObject.freq = splitData[1];\n break;\n }\n });\n if ((ruleObject.freq === 'MONTHLY') && (ruleObject.monthDay.length === 0)) {\n var index = ruleObject.validRules.indexOf('BYDAY');\n ruleObject.validRules.splice(index, 1);\n }\n return ruleObject;\n}\nfunction validateProperDate(tempDate, data, startDate) {\n var maxDate = (tempDate.getMonth() === 1) ? (tempDate.getFullYear() % 4 === 0 ? 29 : 28) : monthDay[tempDate.getMonth()];\n return (data <= maxDate) && (tempDate >= startDate);\n}\nfunction processWeekDays(expectedDays) {\n var dayCycle = {};\n expectedDays.forEach(function (element, index) {\n if (index === expectedDays.length - 1) {\n var startIndex = dayIndex.indexOf(element);\n var temp = startIndex;\n while (temp % 7 !== dayIndex.indexOf(expectedDays[0])) {\n temp++;\n }\n dayCycle[element] = temp - startIndex;\n }\n else {\n dayCycle[element] = dayIndex.indexOf(expectedDays[(index + 1)]) - dayIndex.indexOf(element);\n }\n });\n return dayCycle;\n}\nfunction checkMonth(tempDate, expectedMonth) {\n return (expectedMonth.indexOf(tempDate.getMonth() + 1) === -1);\n}\nfunction checkDate(tempDate, expectedDate) {\n var temp = expectedDate.slice(0);\n var data;\n var maxDate = (tempDate.getMonth() === 1) ?\n (tempDate.getFullYear() % 4 === 0 ? 29 : 28) : monthDay[tempDate.getMonth()];\n data = temp.shift();\n while (data) {\n if (data < 0) {\n data = data + maxDate + 1;\n }\n if (data === tempDate.getDate()) {\n return false;\n }\n data = temp.shift();\n }\n return true;\n}\nfunction checkYear(tempDate, expectedyearDay) {\n var temp = expectedyearDay.slice(0);\n var data;\n var yearDay = getYearDay(tempDate);\n data = temp.shift();\n while (data) {\n if (data < 0) {\n data = data + getMaxYearDay(tempDate.getFullYear()) + 1;\n }\n if (data === yearDay) {\n return false;\n }\n data = temp.shift();\n }\n return true;\n}\nfunction getYearDay(currentDate) {\n if (!startDateCollection[currentDate.getFullYear()]) {\n startDateCollection[currentDate.getFullYear()] = new Date(currentDate.getFullYear(), 0, 0);\n }\n var tempDate = startDateCollection[currentDate.getFullYear()];\n var diff = currentDate.getTime() - tempDate.getTime();\n return Math.ceil(diff / MS_PER_DAY);\n}\nfunction validateMonthlyRuleType(ruleObject) {\n if (ruleObject.monthDay.length && !ruleObject.day.length) {\n return 'date';\n }\n else if (!ruleObject.monthDay.length && ruleObject.day.length) {\n return 'day';\n }\n return 'both';\n}\nfunction rotate(days) {\n var data = days.shift();\n days.push(data);\n}\nfunction setFirstDayOfWeek(day) {\n while (dayIndex[0] !== day) {\n rotate(dayIndex);\n }\n}\nfunction validateRules(tempDate, ruleObject) {\n var state = true;\n var expectedDays = ruleObject.day;\n var expectedMonth = ruleObject.month;\n var expectedDate = ruleObject.monthDay;\n var expectedyearDay = ruleObject.yearDay;\n ruleObject.validRules.forEach(function (rule) {\n switch (rule) {\n case 'BYDAY':\n if (checkDayIndex(tempDate.getDay(), expectedDays)) {\n state = false;\n }\n break;\n case 'BYMONTH':\n if (checkMonth(tempDate, expectedMonth)) {\n state = false;\n }\n break;\n case 'BYMONTHDAY':\n if (checkDate(tempDate, expectedDate)) {\n state = false;\n }\n break;\n case 'BYYEARDAY':\n if (checkYear(tempDate, expectedyearDay)) {\n state = false;\n }\n break;\n }\n });\n return state;\n}\nvar startDateCollection = {};\nvar propertyKeys = {\n FREQ: 'freq',\n BYDAY: 'day',\n BYSETPOS: 'setPos',\n UNTIL: 'until',\n INTERVAL: 'interval',\n COUNT: 'count',\n BYMONTH: 'month',\n BYWEEKNO: 'weekNo',\n BYMONTHDAY: 'monthDay',\n BYYEARDAY: 'yearDay'\n};\nvar tempExcludeDate;\nvar dayIndex = ['SU', 'MO', 'TU', 'WE', 'TH', 'FR', 'SA'];\nvar maxOccurrence;\nvar tempViewDate;\nvar monthDay = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nvar DAYINDEX = ['SU', 'MO', 'TU', 'WE', 'TH', 'FR', 'SA'];\nvar MAXOCCURRENCE = 43;\nvar LEAPYEAR = 366;\nvar NORMALYEAR = 365;\nvar WEEKPOS = ['first', 'second', 'third', 'fourth', 'last'];\nvar MONTHDATA = ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec'];\nvar TIMES = 'summaryTimes';\nvar ON = 'summaryOn';\nvar REPEAT = 'summaryRepeat';\nvar EVERY = 'every';\nvar UNTIL = 'summaryUntil';\nvar DAYS = 'summaryDay';\nvar WEEKS = 'summaryWeek';\nvar MONTHS = 'summaryMonth';\nvar YEARS = 'summaryYear';\nvar DAYINDEXOBJECT = {\n SU: 'sun',\n MO: 'mon',\n TU: 'tue',\n WE: 'wed',\n TH: 'thu',\n FR: 'fri',\n SA: 'sat'\n};\nexport function getRecurrenceStringFromDate(date) {\n return [date.getUTCFullYear(),\n roundDateValues(date.getUTCMonth() + 1),\n roundDateValues(date.getUTCDate()),\n 'T',\n roundDateValues(date.getUTCHours()),\n roundDateValues(date.getUTCMinutes()),\n roundDateValues(date.getUTCSeconds()),\n 'Z'].join('');\n}\nfunction roundDateValues(date) {\n return ('0' + date).slice(-2);\n}\n","import { createElement, SvgRenderer, compile, merge, isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * Create the class for size\n * @private\n */\nvar Size = /** @class */ (function () {\n function Size(width, height) {\n this.width = width;\n this.height = height;\n }\n return Size;\n}());\nexport { Size };\nexport function stringToNumber(value, containerSize) {\n if (value !== null && value !== undefined) {\n return value.indexOf('%') !== -1 ? (containerSize / 100) * parseInt(value, 10) : parseInt(value, 10);\n }\n return null;\n}\n/**\n * Internal use of type rect\n * @private\n */\nvar Rect = /** @class */ (function () {\n function Rect(x, y, width, height) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n return Rect;\n}());\nexport { Rect };\n/**\n * Internal use of rectangle options\n * @private\n */\nvar RectOption = /** @class */ (function () {\n function RectOption(id, fill, border, opacity, rect, dashArray) {\n this.y = rect.y;\n this.x = rect.x;\n this.height = rect.height;\n this.width = rect.width;\n this.id = id;\n this.fill = fill;\n this.opacity = opacity;\n this.stroke = border.color;\n this['stroke-width'] = border.width;\n this['stroke-dasharray'] = dashArray;\n }\n return RectOption;\n}());\nexport { RectOption };\nvar PathOption = /** @class */ (function () {\n function PathOption(id, fill, width, color, opacity, dashArray, d) {\n this.id = id;\n this.opacity = opacity;\n this.fill = fill;\n this.stroke = color;\n this['stroke-width'] = width;\n this['stroke-dasharray'] = dashArray;\n this.d = d;\n }\n return PathOption;\n}());\nexport { PathOption };\n/**\n * Function to measure the height and width of the text.\n * @param {string} text\n * @param {FontModel} font\n * @param {string} id\n * @returns no\n * @private\n */\nexport function measureText(text, font) {\n var measureObject = document.getElementById('treeMapMeasureText');\n if (measureObject === null) {\n measureObject = createElement('text', { id: 'treeMapMeasureText' });\n document.body.appendChild(measureObject);\n }\n measureObject.innerHTML = text;\n measureObject.style.position = 'absolute';\n measureObject.style.fontSize = font.size;\n measureObject.style.fontWeight = font.fontWeight;\n measureObject.style.fontStyle = font.fontStyle;\n measureObject.style.fontFamily = font.fontFamily;\n measureObject.style.visibility = 'hidden';\n measureObject.style.top = '-100';\n measureObject.style.left = '0';\n measureObject.style.whiteSpace = 'nowrap';\n // For bootstrap line height issue\n measureObject.style.lineHeight = 'normal';\n return new Size(measureObject.clientWidth, measureObject.clientHeight);\n}\n/**\n * Internal use of text options\n * @private\n */\nvar TextOption = /** @class */ (function () {\n function TextOption(id, x, y, anchor, text, transform, baseLine) {\n if (transform === void 0) { transform = ''; }\n this.transform = '';\n this.baseLine = 'auto';\n this.id = id;\n this.text = text;\n this.transform = transform;\n this.anchor = anchor;\n this.x = x;\n this.y = y;\n this.baseLine = baseLine;\n }\n return TextOption;\n}());\nexport { TextOption };\n/**\n * @private\n * Trim the title text\n */\nexport function textTrim(maxWidth, text, font) {\n var label = text;\n var size = measureText(text, font).width;\n if (size > maxWidth) {\n var textLength = text.length;\n for (var i = textLength - 1; i >= 0; --i) {\n label = text.substring(0, i) + '...';\n size = measureText(label, font).width;\n if (size <= maxWidth || label.length < 4) {\n if (label.length < 4) {\n label = ' ';\n }\n return label;\n }\n }\n }\n return label;\n}\n/**\n * Map internal class for Point\n */\nvar Location = /** @class */ (function () {\n function Location(x, y) {\n this.x = x;\n this.y = y;\n }\n return Location;\n}());\nexport { Location };\n/**\n * Method to calculate x position of title\n */\nexport function findPosition(location, alignment, textSize, type) {\n var x;\n var y;\n switch (alignment) {\n case 'Near':\n x = location.x;\n break;\n case 'Center':\n x = (type === 'title') ? (location.width / 2 - textSize.width / 2) :\n ((location.x + (location.width / 2)) - textSize.width / 2);\n break;\n case 'Far':\n x = (type === 'title') ? (location.width - location.y - textSize.width) :\n ((location.x + location.width) - textSize.width);\n break;\n }\n y = (type === 'title') ? location.y + (textSize.height / 2) : ((location.y + location.height / 2) + textSize.height / 2);\n return new Location(x, y);\n}\n/**\n * Internal rendering of text\n * @private\n */\nexport function renderTextElement(options, font, color, parent, isMinus) {\n if (isMinus === void 0) { isMinus = false; }\n var renderOptions = {\n 'font-size': font.size,\n 'font-style': font.fontStyle,\n 'font-family': font.fontFamily,\n 'font-weight': font.fontWeight,\n 'text-anchor': options.anchor,\n 'transform': options.transform,\n 'opacity': font.opacity,\n 'dominant-baseline': options.baseLine,\n 'id': options.id,\n 'x': options.x,\n 'y': options.y,\n 'fill': color\n };\n var text = typeof options.text === 'string' ? options.text : isMinus ? options.text[options.text.length - 1] : options.text[0];\n var tspanElement;\n var renderer = new SvgRenderer('');\n var height;\n var htmlObject = renderer.createText(renderOptions, text);\n htmlObject.style['user-select'] = 'none';\n htmlObject.style['-moz-user-select'] = 'none';\n htmlObject.style['-webkit-touch-callout'] = 'none';\n htmlObject.style['-webkit-user-select'] = 'none';\n htmlObject.style['-khtml-user-select'] = 'none';\n htmlObject.style['-ms-user-select'] = 'none';\n htmlObject.style['-o-user-select'] = 'none';\n if (typeof options.text !== 'string' && options.text.length > 1) {\n for (var i = 1, len = options.text.length; i < len; i++) {\n height = (measureText(options.text[i], font).height);\n tspanElement = renderer.createTSpan({\n 'x': options.x, 'id': options.id,\n 'y': (options.y) + (i * height)\n }, options.text[i]);\n htmlObject.appendChild(tspanElement);\n }\n }\n parent.appendChild(htmlObject);\n return htmlObject;\n}\nexport function getElement(id) {\n return document.getElementById(id);\n}\n/* tslint:disable:no-string-literal */\nexport function itemsToOrder(a, b) {\n return a['weight'] === b['weight'] ? 0 : a['weight'] < b['weight'] ? 1 : -1;\n}\nexport function isContainsData(source, pathName, processData, treemap) {\n var isExist = false;\n var name = '';\n var path;\n var leaf = treemap.leafItemSettings;\n for (var i = 0; i < source.length; i++) {\n path = treemap.levels[i] ? treemap.levels[i].groupPath : leaf.labelPath ? leaf.labelPath : treemap.weightValuePath;\n if (source[i] === processData[path]) {\n name += (processData[path]) + (i === source.length - 1 ? '' : '_');\n if (name === pathName) {\n isExist = true;\n break;\n }\n }\n }\n return isExist;\n}\nexport function findChildren(data) {\n var children;\n if (data) {\n var keys = Object.keys(data);\n children = new Object();\n for (var i = 0; i < keys.length; i++) {\n if (data[keys[i]] instanceof Array) {\n children['values'] = data[keys[i]];\n children['key'] = keys[i];\n break;\n }\n }\n }\n return children;\n}\nexport function findHightLightItems(data, items, mode, treeMap) {\n if (mode === 'Child') {\n items.push(data['levelOrderName']);\n var children = findChildren(data)['values'];\n if (children && children.length > 0) {\n for (var i = 0; i < children.length; i++) {\n if (items.indexOf(children[i]['levelOrderName']) === -1) {\n items.push(children[i]['levelOrderName']);\n }\n }\n for (var j = 0; j < children.length; j++) {\n findHightLightItems(children[j], items, mode, treeMap);\n }\n }\n }\n else if (mode === 'Parent') {\n if (typeof data['levelOrderName'] === 'string' && items.indexOf(data['levelOrderName']) === -1) {\n items.push(data['levelOrderName']);\n findHightLightItems(data['parent'], items, mode, treeMap);\n }\n }\n else if (mode === 'All') {\n var parentName = data['levelOrderName'].split('_')[0];\n var currentItem = void 0;\n for (var i = 0; i < treeMap.layout.renderItems.length; i++) {\n currentItem = treeMap.layout.renderItems[i];\n if ((currentItem['levelOrderName']).indexOf(parentName) > -1 && items.indexOf(currentItem['levelOrderName']) === -1) {\n items.push(currentItem['levelOrderName']);\n }\n }\n }\n else {\n items.push(data['levelOrderName']);\n }\n return items;\n}\n/**\n * Function to compile the template function for maps.\n * @returns Function\n * @private\n */\nexport function getTemplateFunction(template) {\n var templateFn = null;\n var e;\n try {\n if (document.querySelectorAll(template).length) {\n templateFn = compile(document.querySelector(template).innerHTML.trim());\n }\n }\n catch (e) {\n templateFn = compile(template);\n }\n return templateFn;\n}\n/**\n * @private\n */\nexport function convertElement(element, labelId, data) {\n var childElement = createElement('div', {\n id: labelId,\n styles: 'position: absolute;pointer-events: auto;'\n });\n while (element.length > 0) {\n childElement.appendChild(element[0]);\n }\n var templateHtml = childElement.innerHTML;\n var keys = Object.keys(data);\n for (var i = 0; i < keys.length; i++) {\n templateHtml = templateHtml.replace(new RegExp('{{:' + keys[i] + '}}', 'g'), data[keys[i].toString()]);\n }\n childElement.innerHTML = templateHtml;\n return childElement;\n}\nexport function findLabelLocation(rect, position, labelSize, type, treemap) {\n var location = new Location(0, 0);\n var padding = 5;\n var paddings = 2;\n var elementRect = treemap.element.getBoundingClientRect();\n var x = (type === 'Template') ? treemap.areaRect.x : 0;\n var y = (type === 'Template') ? treemap.areaRect.y : 0;\n location.x = (Math.abs(x - ((position.indexOf('Left') > -1) ? rect.x + padding : !(position.indexOf('Right') > -1) ?\n rect.x + ((rect.width / 2) - (labelSize.width / 2)) : (rect.x + rect.width) - labelSize.width))) - paddings;\n location.y = Math.abs(y - ((position.indexOf('Top') > -1) ? (type === 'Template' ? rect.y : rect.y + labelSize.height) :\n !(position.indexOf('Bottom') > -1) ? type === 'Template' ? (rect.y + ((rect.height / 2) - (labelSize.height / 2))) :\n (rect.y + (rect.height / 2) + labelSize.height / 4) : (rect.y + rect.height) - labelSize.height));\n return location;\n}\nexport function measureElement(element, parentElement) {\n var size = new Size(0, 0);\n parentElement.appendChild(element);\n size.height = element.offsetHeight;\n size.width = element.offsetWidth;\n document.getElementById(element.id).remove();\n return size;\n}\nexport function getArea(rect) {\n return (rect.width - rect.x) * (rect.height - rect.y);\n}\nexport function getShortestEdge(input) {\n var container = convertToContainer(input);\n var width = container.width;\n var height = container.height;\n var result = Math.min(width, height);\n return result;\n}\nexport function convertToContainer(rect) {\n var x = rect.x;\n var y = rect.y;\n var width = rect.width;\n var height = rect.height;\n return {\n x: x,\n y: y,\n width: width - x,\n height: height - y\n };\n}\nexport function convertToRect(container) {\n var xOffset = container.x;\n var yOffset = container.y;\n var width = container.width;\n var height = container.height;\n return {\n x: xOffset,\n y: yOffset,\n width: xOffset + width,\n height: yOffset + height,\n };\n}\nexport function getMousePosition(pageX, pageY, element) {\n var elementRect = element.getBoundingClientRect();\n var pageXOffset = element.ownerDocument.defaultView.pageXOffset;\n var pageYOffset = element.ownerDocument.defaultView.pageYOffset;\n var clientTop = element.ownerDocument.documentElement.clientTop;\n var clientLeft = element.ownerDocument.documentElement.clientLeft;\n var positionX = elementRect.left + pageXOffset - clientLeft;\n var positionY = elementRect.top + pageYOffset - clientTop;\n return new Location((pageX - positionX), (pageY - positionY));\n}\nexport function colorMap(colorMapping, equalValue, value, weightValuePath) {\n var fill;\n var paths = [];\n var opacity;\n if (isNullOrUndefined(equalValue) && (isNullOrUndefined(value) && isNaN(value))) {\n return null;\n }\n for (var i = 0; i < colorMapping.length; i++) {\n var color = null;\n if (colorMapping[i].from && colorMapping[i].to && colorMapping[i].value) {\n if ((value >= colorMapping[i].from && colorMapping[i].to >= value) && (colorMapping[i].value === equalValue)) {\n color = colorMapping[i].color;\n }\n }\n else if ((colorMapping[i].from && colorMapping[i].to) || (colorMapping[i].value)) {\n colorMapping[i].value = !isNullOrUndefined(colorMapping[i].value) ? colorMapping[i].value.toString() : colorMapping[i].value;\n if ((value >= colorMapping[i].from && colorMapping[i].to >= value) || (colorMapping[i].value === equalValue)) {\n color = colorMapping[i].color;\n }\n }\n if (colorMapping[i].minOpacity && colorMapping[i].maxOpacity && color) {\n opacity = deSaturationColor(weightValuePath, colorMapping[i], color, value);\n }\n fill = color;\n opacity = (colorMapping[i].minOpacity) ? opacity : '1';\n paths.push(fill);\n }\n for (var j = paths.length - 1; j >= 0; j--) {\n fill = paths[j];\n j = (fill) ? -1 : j;\n }\n return { fill: fill, opacity: opacity };\n}\nexport function deSaturationColor(weightValuePath, colorMapping, color, rangeValue) {\n var opacity = 0;\n if ((rangeValue >= colorMapping.from && rangeValue <= colorMapping.to)) {\n var ratio = (rangeValue - colorMapping.from) / (colorMapping.to - colorMapping.from);\n opacity = (ratio * (colorMapping.maxOpacity - colorMapping.minOpacity)) + colorMapping.minOpacity;\n }\n return opacity.toString();\n}\nexport function wordWrap(maximumWidth, dataLabel, font) {\n var textCollection = dataLabel.split(' ');\n var label = '';\n var labelCollection = [];\n var text;\n for (var i = 0, len = textCollection.length; i < len; i++) {\n text = textCollection[i];\n if (measureText(label.concat(text), font).width < maximumWidth) {\n label = label.concat((label === '' ? '' : ' ') + text);\n }\n else {\n if (label !== '') {\n labelCollection.push(textTrim(maximumWidth, label, font));\n label = text;\n }\n else {\n labelCollection.push(textTrim(maximumWidth, text, font));\n text = '';\n }\n }\n if (label && i === len - 1) {\n labelCollection.push(textTrim(maximumWidth, label, font));\n }\n }\n return labelCollection;\n}\nexport function textWrap(maxWidth, label, font) {\n var text = label;\n var resultText = [];\n var currentLength = 0;\n var totalWidth = measureText(label, font).width;\n var totalLength = label.length;\n if (maxWidth >= totalWidth) {\n resultText.push(label);\n return resultText;\n }\n else {\n for (var i = label.length; i > currentLength; i--) {\n var sliceString = label.slice(currentLength, i);\n totalWidth = measureText(sliceString, font).width;\n if (totalWidth <= maxWidth) {\n resultText.push(sliceString);\n currentLength += sliceString.length;\n if (totalLength === currentLength) {\n return resultText;\n }\n i = totalLength + 1;\n }\n }\n }\n return resultText;\n}\n/**\n * hide function\n */\nexport function hide(maxWidth, maxHeight, text, font) {\n var hideText = text;\n var textSize = measureText(text, font);\n hideText = (textSize.width > maxWidth || textSize.height > maxHeight) ? ' ' : text;\n return hideText;\n}\nexport function orderByArea(a, b) {\n if (a['itemArea'] === b['itemArea']) {\n return 0;\n }\n else if (a['itemArea'] < b['itemArea']) {\n return 1;\n }\n return -1;\n}\nexport function removeClassNames(elements, type, treemap) {\n var opacity;\n var process = true;\n var element;\n var stroke;\n var strokeWidth;\n var fill;\n var options = {};\n for (var j = 0; j < elements.length; j++) {\n element = elements[j].childNodes[0];\n options = treemap.layout.renderItems[element.id.split('_')[6]]['options'];\n applyOptions(element, options);\n elements[j].classList.remove(type);\n j -= 1;\n }\n}\nexport function applyOptions(element, options) {\n element.setAttribute('opacity', options['opacity']);\n element.setAttribute('fill', options['fill']);\n element.setAttribute('stroke', options['border']['color']);\n element.setAttribute('stroke-width', options['border']['width']);\n}\nexport function textFormatter(format, data, treemap) {\n if (isNullOrUndefined(format)) {\n return null;\n }\n var keys = Object.keys(data);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n format = format.split('${' + key + '}').join(formatValue(data[key], treemap).toString());\n }\n return format;\n}\nexport function formatValue(value, treemap) {\n var formatValue;\n var formatFunction;\n if (treemap.format && !isNaN(Number(value))) {\n formatFunction = treemap.intl.getNumberFormat({ format: treemap.format, useGrouping: treemap.useGroupingSeparator });\n formatValue = formatFunction(Number(value));\n }\n else {\n formatValue = value;\n }\n return formatValue ? formatValue : '';\n}\n/** @private */\nvar ColorValue = /** @class */ (function () {\n function ColorValue(r, g, b) {\n this.r = r;\n this.g = g;\n this.b = b;\n }\n return ColorValue;\n}());\nexport { ColorValue };\n/** @private */\nexport function convertToHexCode(value) {\n return '#' + componentToHex(value.r) + componentToHex(value.g) + componentToHex(value.b);\n}\n/** @private */\nexport function componentToHex(value) {\n var hex = value.toString(16);\n return hex.length === 1 ? '0' + hex : hex;\n}\n/** @private */\nexport function convertHexToColor(hex) {\n var result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result ? new ColorValue(parseInt(result[1], 16), parseInt(result[2], 16), parseInt(result[3], 16)) :\n new ColorValue(255, 255, 255);\n}\n/** @private */\nexport function colorNameToHex(color) {\n var element;\n color = color === 'transparent' ? 'white' : color;\n element = document.getElementById('treeMapMeasureText');\n element.style.color = color;\n color = window.getComputedStyle(element).color;\n var exp = /^(rgb|hsl)(a?)[(]\\s*([\\d.]+\\s*%?)\\s*,\\s*([\\d.]+\\s*%?)\\s*,\\s*([\\d.]+\\s*%?)\\s*(?:,\\s*([\\d.]+)\\s*)?[)]$/;\n var isRGBValue = exp.exec(color);\n return convertToHexCode(new ColorValue(parseInt(isRGBValue[3], 10), parseInt(isRGBValue[4], 10), parseInt(isRGBValue[5], 10)));\n}\n/** @private */\nexport function drawSymbol(location, shape, size, url, options, label) {\n var functionName = 'Path';\n var svgRenderer = new SvgRenderer('');\n var temp = renderLegendShape(location, size, shape, options, url);\n var htmlElement = svgRenderer['draw' + temp.functionName](temp.renderOption);\n htmlElement.setAttribute('aria-label', label);\n return htmlElement;\n}\n/** @private */\nexport function renderLegendShape(location, size, shape, options, url) {\n var renderPath;\n var functionName = 'Path';\n var shapeWidth = size.width;\n var shapeHeight = size.height;\n var shapeX = location.x;\n var shapeY = location.y;\n var x = location.x + (-shapeWidth / 2);\n var y = location.y + (-shapeHeight / 2);\n switch (shape) {\n case 'Circle':\n case 'Bubble':\n functionName = 'Ellipse';\n merge(options, { 'rx': shapeWidth / 2, 'ry': shapeHeight / 2, 'cx': shapeX, 'cy': shapeY });\n break;\n case 'VerticalLine':\n renderPath = 'M' + ' ' + shapeX + ' ' + (shapeY + (shapeHeight / 2)) + ' ' + 'L' + ' ' + shapeX + ' '\n + (shapeY + (-shapeHeight / 2));\n merge(options, { 'd': renderPath });\n break;\n case 'Diamond':\n renderPath = 'M' + ' ' + x + ' ' + shapeY + ' ' +\n 'L' + ' ' + shapeX + ' ' + (shapeY + (-shapeHeight / 2)) + ' ' +\n 'L' + ' ' + (shapeX + (shapeWidth / 2)) + ' ' + shapeY + ' ' +\n 'L' + ' ' + shapeX + ' ' + (shapeY + (shapeHeight / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + shapeY + ' z';\n merge(options, { 'd': renderPath });\n break;\n case 'Rectangle':\n renderPath = 'M' + ' ' + x + ' ' + (shapeY + (-shapeHeight / 2)) + ' ' +\n 'L' + ' ' + (shapeX + (shapeWidth / 2)) + ' ' + (shapeY + (-shapeHeight / 2)) + ' ' +\n 'L' + ' ' + (shapeX + (shapeWidth / 2)) + ' ' + (shapeY + (shapeHeight / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (shapeY + (shapeHeight / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (shapeY + (-shapeHeight / 2)) + ' z';\n merge(options, { 'd': renderPath });\n break;\n case 'Triangle':\n renderPath = 'M' + ' ' + x + ' ' + (shapeY + (shapeHeight / 2)) + ' ' +\n 'L' + ' ' + shapeX + ' ' + (shapeY + (-shapeHeight / 2)) + ' ' +\n 'L' + ' ' + (shapeX + (shapeWidth / 2)) + ' ' + (shapeY + (shapeHeight / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (shapeY + (shapeHeight / 2)) + ' z';\n merge(options, { 'd': renderPath });\n break;\n case 'InvertedTriangle':\n renderPath = 'M' + ' ' + (shapeX + (shapeWidth / 2)) + ' ' + (shapeY - (shapeHeight / 2)) + ' ' +\n 'L' + ' ' + shapeX + ' ' + (shapeY + (shapeHeight / 2)) + ' ' +\n 'L' + ' ' + (shapeX - (shapeWidth / 2)) + ' ' + (shapeY - (shapeHeight / 2)) + ' ' +\n 'L' + ' ' + (shapeX + (shapeWidth / 2)) + ' ' + (shapeY - (shapeHeight / 2)) + ' z';\n merge(options, { 'd': renderPath });\n break;\n case 'Pentagon':\n var eq = 72;\n var xValue = void 0;\n var yValue = void 0;\n for (var i = 0; i <= 5; i++) {\n xValue = (shapeWidth / 2) * Math.cos((Math.PI / 180) * (i * eq));\n yValue = (shapeWidth / 2) * Math.sin((Math.PI / 180) * (i * eq));\n if (i === 0) {\n renderPath = 'M' + ' ' + (shapeX + xValue) + ' ' + (shapeY + yValue) + ' ';\n }\n else {\n renderPath = renderPath.concat('L' + ' ' + (shapeX + xValue) + ' ' + (shapeY + yValue) + ' ');\n }\n }\n renderPath = renderPath.concat('Z');\n merge(options, { 'd': renderPath });\n break;\n case 'Star':\n renderPath = 'M ' + (location.x + size.width / 3) + ' ' + (location.y - size.height / 2) + ' L ' + (location.x - size.width / 2)\n + ' ' + (location.y + size.height / 6) + ' L ' + (location.x + size.width / 2) + ' ' + (location.y + size.height / 6)\n + ' L ' + (location.x - size.width / 3) + ' ' + (location.y - size.height / 2) + ' L ' + location.x + ' ' +\n (location.y + size.height / 2) + ' L ' + (location.x + size.width / 3) + ' ' + (location.y - size.height / 2) + ' Z';\n merge(options, { 'd': renderPath });\n break;\n case 'Cross':\n renderPath = 'M' + ' ' + x + ' ' + shapeY + ' ' + 'L' + ' ' + (shapeX + (shapeWidth / 2)) + ' ' + shapeY + ' ' +\n 'M' + ' ' + shapeX + ' ' + (shapeY + (shapeHeight / 2)) + ' ' + 'L' + ' ' + shapeX + ' ' +\n (shapeY + (-shapeHeight / 2));\n merge(options, { 'd': renderPath });\n break;\n case 'Image':\n functionName = 'Image';\n merge(options, { 'href': url, 'height': shapeHeight, 'width': shapeWidth, x: x, y: y });\n break;\n }\n return { renderOption: options, functionName: functionName };\n}\nexport function isParentItem(data, item) {\n var isParentItem = false;\n for (var j = 0; j < data.length; j++) {\n if (item['levelOrderName'] === data[j]['levelOrderName']) {\n isParentItem = true;\n break;\n }\n }\n return isParentItem;\n}\nvar TreeMapAjax = /** @class */ (function () {\n function TreeMapAjax(options, type, async, contentType, sendData) {\n this.dataOptions = options;\n this.type = type || 'GET';\n this.async = async || true;\n this.contentType = contentType;\n this.sendData = sendData;\n }\n return TreeMapAjax;\n}());\nexport { TreeMapAjax };\n","import { isNullOrUndefined, merge } from './util';\nvar headerRegex = /^(.*?):[ \\t]*([^\\r\\n]*)$/gm;\nvar defaultType = 'GET';\n/**\n * Ajax class provides ability to make asynchronous HTTP request to the server\n * ```typescript\n * var ajax = new Ajax(\"index.html\", \"GET\", true);\n * ajax.send().then(\n * function (value) {\n * console.log(value);\n * },\n * function (reason) {\n * console.log(reason);\n * });\n * ```\n */\nvar Ajax = /** @class */ (function () {\n /**\n * Constructor for Ajax class\n * @param {string|Object} options?\n * @param {string} type?\n * @param {boolean} async?\n * @returns defaultType\n */\n function Ajax(options, type, async, contentType) {\n /**\n * A boolean value indicating whether the request should be sent asynchronous or not.\n * @default true\n */\n this.mode = true;\n /**\n * A boolean value indicating whether to ignore the promise reject.\n * @private\n * @default true\n */\n this.emitError = true;\n this.options = {};\n if (typeof options === 'string') {\n this.url = options;\n this.type = type ? type.toUpperCase() : defaultType;\n this.mode = !isNullOrUndefined(async) ? async : true;\n }\n else if (typeof options === 'object') {\n this.options = options;\n merge(this, this.options);\n }\n this.type = this.type ? this.type.toUpperCase() : defaultType;\n this.contentType = (this.contentType !== undefined) ? this.contentType : contentType;\n }\n /**\n * Send the request to server.\n * @param {any} data - To send the user data\n * @return {Promise}\n */\n Ajax.prototype.send = function (data) {\n var _this = this;\n this.data = isNullOrUndefined(data) ? this.data : data;\n var eventArgs = {\n cancel: false\n };\n var promise = new Promise(function (resolve, reject) {\n _this.httpRequest = new XMLHttpRequest();\n _this.httpRequest.onreadystatechange = function () { _this.stateChange(resolve, reject); };\n if (!isNullOrUndefined(_this.onLoad)) {\n _this.httpRequest.onload = _this.onLoad;\n }\n if (!isNullOrUndefined(_this.onProgress)) {\n _this.httpRequest.onprogress = _this.onProgress;\n }\n /* istanbul ignore next */\n if (!isNullOrUndefined(_this.onAbort)) {\n _this.httpRequest.onabort = _this.onAbort;\n }\n /* istanbul ignore next */\n if (!isNullOrUndefined(_this.onError)) {\n _this.httpRequest.onerror = _this.onError;\n }\n //** Upload Events **/\n /* istanbul ignore next */\n if (!isNullOrUndefined(_this.onUploadProgress)) {\n _this.httpRequest.upload.onprogress = _this.onUploadProgress;\n }\n _this.httpRequest.open(_this.type, _this.url, _this.mode);\n // Set default headers\n if (!isNullOrUndefined(_this.data) && _this.contentType !== null) {\n _this.httpRequest.setRequestHeader('Content-Type', _this.contentType || 'application/json; charset=utf-8');\n }\n if (_this.beforeSend) {\n _this.beforeSend(eventArgs);\n }\n if (!eventArgs.cancel) {\n _this.httpRequest.send(!isNullOrUndefined(_this.data) ? _this.data : null);\n }\n });\n return promise;\n };\n Ajax.prototype.successHandler = function (data) {\n if (this.onSuccess) {\n this.onSuccess(data, this);\n }\n return data;\n };\n Ajax.prototype.failureHandler = function (reason) {\n if (this.onFailure) {\n this.onFailure(this.httpRequest);\n }\n return reason;\n };\n Ajax.prototype.stateChange = function (resolve, reject) {\n var data = this.httpRequest.responseText;\n if (this.dataType && this.dataType.toLowerCase() === 'json') {\n if (data === '') {\n data = undefined;\n }\n else {\n try {\n data = JSON.parse(data);\n }\n catch (error) {\n // no exception handle\n }\n }\n }\n if (this.httpRequest.readyState === 4) {\n //success range should be 200 to 299\n if ((this.httpRequest.status >= 200 && this.httpRequest.status <= 299) || this.httpRequest.status === 304) {\n resolve(this.successHandler(data));\n }\n else {\n if (this.emitError) {\n reject(new Error(this.failureHandler(this.httpRequest.statusText)));\n }\n else {\n resolve();\n }\n }\n }\n };\n /**\n * To get the response header from XMLHttpRequest\n * @param {string} key Key to search in the response header\n * @returns {string}\n */\n Ajax.prototype.getResponseHeader = function (key) {\n var responseHeaders;\n var header;\n responseHeaders = {};\n var headers = headerRegex.exec(this.httpRequest.getAllResponseHeaders());\n while (headers) {\n responseHeaders[headers[1].toLowerCase()] = headers[2];\n headers = headerRegex.exec(this.httpRequest.getAllResponseHeaders());\n }\n header = responseHeaders[key.toLowerCase()];\n return isNullOrUndefined(header) ? null : header;\n };\n return Ajax;\n}());\nexport { Ajax };\n","import { debounce, extend } from './util';\n/**\n * EventHandler class provides option to add, remove, clear and trigger events to a HTML DOM element\n * @private\n * ```html\n *
\n * \n * ```\n */\nvar EventHandler = /** @class */ (function () {\n function EventHandler() {\n }\n // to get the event data based on element\n EventHandler.addOrGetEventData = function (element) {\n if ('__eventList' in element) {\n return element.__eventList.events;\n }\n else {\n element.__eventList = {};\n return element.__eventList.events = [];\n }\n };\n /**\n * Add an event to the specified DOM element.\n * @param {any} element - Target HTML DOM element\n * @param {string} eventName - A string that specifies the name of the event\n * @param {Function} listener - Specifies the function to run when the event occurs\n * @param {Object} bindTo - A object that binds 'this' variable in the event handler\n * @param {number} debounce - Specifies at what interval given event listener should be triggered.\n * @return {Function}\n */\n EventHandler.add = function (element, eventName, listener, bindTo, intDebounce) {\n var eventData = EventHandler.addOrGetEventData(element);\n var debounceListener;\n if (intDebounce) {\n debounceListener = debounce(listener, intDebounce);\n }\n else {\n debounceListener = listener;\n }\n if (bindTo) {\n debounceListener = debounceListener.bind(bindTo);\n }\n var event = eventName.split(' ');\n for (var i = 0; i < event.length; i++) {\n eventData.push({\n name: event[i],\n listener: listener,\n debounce: debounceListener\n });\n element.addEventListener(event[i], debounceListener);\n }\n return debounceListener;\n };\n /**\n * Remove an event listener that has been attached before.\n * @param {any} element - Specifies the target html element to remove the event\n * @param {string} eventName - A string that specifies the name of the event to remove\n * @param {Function} listener - Specifies the function to remove\n * @return {void}\n */\n EventHandler.remove = function (element, eventName, listener) {\n var eventData = EventHandler.addOrGetEventData(element);\n var event = eventName.split(' ');\n var _loop_1 = function (j) {\n var index = -1;\n var debounceListener;\n if (eventData && eventData.length !== 0) {\n eventData.some(function (x, i) {\n return x.name === event[j] && x.listener === listener ?\n (index = i, debounceListener = x.debounce, true) : false;\n });\n }\n if (index !== -1) {\n eventData.splice(index, 1);\n }\n if (debounceListener) {\n element.removeEventListener(event[j], debounceListener);\n }\n };\n for (var j = 0; j < event.length; j++) {\n _loop_1(j);\n }\n };\n /**\n * Clear all the event listeners that has been previously attached to the element.\n * @param {any} element - Specifies the target html element to clear the events\n * @return {void}\n */\n EventHandler.clearEvents = function (element) {\n var eventData;\n var copyData;\n eventData = EventHandler.addOrGetEventData(element);\n copyData = extend([], copyData, eventData);\n for (var i = 0; i < copyData.length; i++) {\n element.removeEventListener(copyData[i].name, copyData[i].debounce);\n eventData.shift();\n }\n };\n /**\n * Trigger particular event of the element.\n * @param {any} element - Specifies the target html element to trigger the events\n * @param {string} eventName - Specifies the event to trigger for the specified element.\n * Can be a custom event, or any of the standard events.\n * @param {any} eventProp - Additional parameters to pass on to the event properties\n * @return {void}\n */\n EventHandler.trigger = function (element, eventName, eventProp) {\n var eventData = EventHandler.addOrGetEventData(element);\n var fn = null;\n for (var _i = 0, eventData_1 = eventData; _i < eventData_1.length; _i++) {\n var event_1 = eventData_1[_i];\n if (event_1.name === eventName) {\n event_1.debounce.call(this, eventProp);\n }\n }\n };\n return EventHandler;\n}());\nexport { EventHandler };\n","import { isNullOrUndefined, getValue } from './util';\nvar Observer = /** @class */ (function () {\n function Observer(context) {\n this.ranArray = [];\n this.boundedEvents = {};\n if (isNullOrUndefined(context)) {\n return;\n }\n this.context = context;\n }\n ;\n /**\n * To attach handler for given property in current context.\n * @param {string} property - specifies the name of the event.\n * @param {Function} handler - Specifies the handler function to be called while event notified.\n * @param {Object} context - Specifies the context binded to the handler.\n * @param {string} id - specifies the random generated id.\n * @return {void}\n */\n Observer.prototype.on = function (property, handler, context, id) {\n if (isNullOrUndefined(handler)) {\n return;\n }\n var cntxt = context || this.context;\n if (this.notExist(property)) {\n this.boundedEvents[property] = [{ handler: handler, context: cntxt }];\n return;\n }\n if (!isNullOrUndefined(id)) {\n if (this.ranArray.indexOf(id) === -1) {\n this.ranArray.push(id);\n this.boundedEvents[property].push({ handler: handler, context: cntxt, id: id });\n }\n }\n else if (!this.isHandlerPresent(this.boundedEvents[property], handler)) {\n this.boundedEvents[property].push({ handler: handler, context: cntxt });\n }\n };\n /**\n * To remove handlers from a event attached using on() function.\n * @param {string} eventName - specifies the name of the event.\n * @param {Function} handler - Optional argument specifies the handler function to be called while event notified.\n * @param {string} id - specifies the random generated id.\n * @return {void}\n */\n Observer.prototype.off = function (property, handler, id) {\n if (this.notExist(property)) {\n return;\n }\n var curObject = getValue(property, this.boundedEvents);\n if (handler) {\n for (var i = 0; i < curObject.length; i++) {\n if (id) {\n curObject.splice(i, 1);\n var indexLocation = this.ranArray.indexOf(id);\n if (indexLocation !== -1) {\n this.ranArray.splice(indexLocation, 1);\n }\n break;\n }\n else if (handler === curObject[i].handler) {\n curObject.splice(i, 1);\n break;\n }\n }\n }\n else {\n delete this.boundedEvents[property];\n }\n };\n /**\n * To notify the handlers in the specified event.\n * @param {string} property - Specifies the event to be notify.\n * @param {Object} args - Additional parameters to pass while calling the handler.\n * @return {void}\n */\n Observer.prototype.notify = function (property, argument) {\n if (this.notExist(property)) {\n return;\n }\n if (argument) {\n argument.name = property;\n }\n var curObject = getValue(property, this.boundedEvents).slice(0);\n for (var _i = 0, curObject_1 = curObject; _i < curObject_1.length; _i++) {\n var cur = curObject_1[_i];\n cur.handler.call(cur.context, argument);\n }\n };\n /**\n * To destroy handlers in the event\n */\n Observer.prototype.destroy = function () {\n this.boundedEvents = this.context = undefined;\n };\n /**\n * Returns if the property exists.\n */\n Observer.prototype.notExist = function (prop) {\n return this.boundedEvents.hasOwnProperty(prop) === false;\n };\n /**\n * Returns if the handler is present.\n */\n Observer.prototype.isHandlerPresent = function (boundedEvents, handler) {\n for (var _i = 0, boundedEvents_1 = boundedEvents; _i < boundedEvents_1.length; _i++) {\n var cur = boundedEvents_1[_i];\n if (cur.handler === handler) {\n return true;\n }\n }\n return false;\n };\n return Observer;\n}());\nexport { Observer };\n","import { isUndefined, isNullOrUndefined, merge, setImmediate, setValue } from './util';\nimport { addClass, removeClass } from './dom';\nimport { Observer } from './observer';\n/* tslint:enable:no-any */\n/**\n * Base library module is common module for Framework modules like touch,keyboard and etc.,\n * @private\n */\nvar Base = /** @class */ (function () {\n /**\n * Base constructor accept options and element\n */\n function Base(options, element) {\n this.isProtectedOnChange = true;\n this.properties = {};\n this.changedProperties = {};\n this.oldProperties = {};\n this.refreshing = false;\n // tslint:disable-next-line:no-empty\n this.finalUpdate = function () { };\n this.childChangedProperties = {};\n this.modelObserver = new Observer(this);\n if (!isUndefined(element)) {\n if ('string' === typeof (element)) {\n this.element = document.querySelector(element);\n }\n else {\n this.element = element;\n }\n if (!isNullOrUndefined(this.element)) {\n this.isProtectedOnChange = false;\n this.addInstance();\n }\n }\n if (!isUndefined(options)) {\n this.setProperties(options, true);\n }\n this.isDestroyed = false;\n }\n /** Property base section */\n /**\n * Function used to set bunch of property at a time.\n * @private\n * @param {Object} prop - JSON object which holds components properties.\n * @param {boolean} muteOnChange? - Specifies to true when we set properties.\n */\n Base.prototype.setProperties = function (prop, muteOnChange) {\n var prevDetection = this.isProtectedOnChange;\n this.isProtectedOnChange = !!muteOnChange;\n merge(this, prop);\n if (muteOnChange !== true) {\n merge(this.changedProperties, prop);\n this.dataBind();\n }\n this.finalUpdate();\n this.changedProperties = {};\n this.oldProperties = {};\n this.isProtectedOnChange = prevDetection;\n };\n ;\n /**\n * Calls for child element data bind\n * @param {Object} obj\n * @param {Object} parent\n * @returns {void}\n */\n // tslint:disable-next-line:no-any\n Base.callChildDataBind = function (obj, parent) {\n var keys = Object.keys(obj);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n if (parent[key] instanceof Array) {\n for (var _a = 0, _b = parent[key]; _a < _b.length; _a++) {\n var obj_1 = _b[_a];\n if (obj_1.dataBind !== undefined) {\n obj_1.dataBind();\n }\n }\n }\n else {\n parent[key].dataBind();\n }\n }\n };\n Base.prototype.clearChanges = function () {\n this.finalUpdate();\n this.changedProperties = {};\n this.oldProperties = {};\n this.childChangedProperties = {};\n };\n /**\n * Bind property changes immediately to components\n */\n Base.prototype.dataBind = function () {\n Base.callChildDataBind(this.childChangedProperties, this);\n if (Object.getOwnPropertyNames(this.changedProperties).length) {\n var prevDetection = this.isProtectedOnChange;\n var newChanges = this.changedProperties;\n var oldChanges = this.oldProperties;\n this.clearChanges();\n this.isProtectedOnChange = true;\n this.onPropertyChanged(newChanges, oldChanges);\n this.isProtectedOnChange = prevDetection;\n }\n };\n ;\n Base.prototype.saveChanges = function (key, newValue, oldValue) {\n if (this.isProtectedOnChange) {\n return;\n }\n this.oldProperties[key] = oldValue;\n this.changedProperties[key] = newValue;\n this.finalUpdate();\n this.finalUpdate = setImmediate(this.dataBind.bind(this));\n };\n ;\n /** Event Base Section */\n /**\n * Adds the handler to the given event listener.\n * @param {string} eventName - A String that specifies the name of the event\n * @param {Function} listener - Specifies the call to run when the event occurs.\n * @return {void}\n */\n Base.prototype.addEventListener = function (eventName, handler) {\n this.modelObserver.on(eventName, handler);\n };\n /**\n * Removes the handler from the given event listener.\n * @param {string} eventName - A String that specifies the name of the event to remove\n * @param {Function} listener - Specifies the function to remove\n * @return {void}\n */\n Base.prototype.removeEventListener = function (eventName, handler) {\n this.modelObserver.off(eventName, handler);\n };\n /**\n * Triggers the handlers in the specified event.\n * @private\n * @param {string} eventName - Specifies the event to trigger for the specified component properties.\n * Can be a custom event, or any of the standard events.\n * @param {Event} eventProp - Additional parameters to pass on to the event properties\n * @return {void}\n */\n Base.prototype.trigger = function (eventName, eventProp) {\n if (this.isDestroyed !== true) {\n var prevDetection = this.isProtectedOnChange;\n this.isProtectedOnChange = false;\n this.modelObserver.notify(eventName, eventProp);\n this.isProtectedOnChange = prevDetection;\n }\n };\n /**\n * To maintain instance in base class\n */\n Base.prototype.addInstance = function () {\n // Add module class to the root element\n var moduleClass = 'e-' + this.getModuleName().toLowerCase();\n addClass([this.element], ['e-control', moduleClass]);\n if (!isNullOrUndefined(this.element.ej2_instances)) {\n this.element.ej2_instances.push(this);\n }\n else {\n setValue('ej2_instances', [this], this.element);\n }\n };\n /**\n * To remove the instance from the element\n */\n Base.prototype.destroy = function () {\n var _this = this;\n this.element.ej2_instances =\n this.element.ej2_instances.filter(function (i) { return i !== _this; });\n removeClass([this.element], ['e-' + this.getModuleName()]);\n if (this.element.ej2_instances.length === 0) {\n // Remove module class from the root element\n removeClass([this.element], ['e-control']);\n }\n this.clearChanges();\n this.modelObserver.destroy();\n this.isDestroyed = true;\n };\n return Base;\n}());\nexport { Base };\nexport function getComponent(elem, comp) {\n var instance;\n var i;\n for (i = 0; i < elem.ej2_instances.length; i++) {\n instance = elem.ej2_instances[i];\n var compName = instance.getModuleName();\n if (comp === compName) {\n return instance;\n }\n }\n return undefined;\n}\n","import { isUndefined } from './util';\nvar REGX_MOBILE = /android|webos|iphone|ipad|ipod|blackberry|iemobile|opera mini|mobile/i;\nvar REGX_IE = /msie|trident/i;\nvar REGX_IE11 = /Trident\\/7\\./;\nvar REGX_IOS = /(ipad|iphone|ipod touch)/i;\nvar REGX_IOS7 = /(ipad|iphone|ipod touch);.*os 7_\\d|(ipad|iphone|ipod touch);.*os 8_\\d/i;\nvar REGX_ANDROID = /android/i;\nvar REGX_WINDOWS = /trident|windows phone|edge/i;\nvar REGX_VERSION = /(version)[ \\/]([\\w.]+)/i;\nvar REGX_BROWSER = {\n OPERA: /(opera|opr)(?:.*version|)[ \\/]([\\w.]+)/i,\n EDGE: /(edge)(?:.*version|)[ \\/]([\\w.]+)/i,\n CHROME: /(chrome|crios)[ \\/]([\\w.]+)/i,\n PANTHOMEJS: /(phantomjs)[ \\/]([\\w.]+)/i,\n SAFARI: /(safari)[ \\/]([\\w.]+)/i,\n WEBKIT: /(webkit)[ \\/]([\\w.]+)/i,\n MSIE: /(msie|trident) ([\\w.]+)/i,\n MOZILLA: /(mozilla)(?:.*? rv:([\\w.]+)|)/i\n};\n/* istanbul ignore else */\nif (typeof window !== 'undefined') {\n window.browserDetails = window.browserDetails || {};\n}\n/**\n * Get configuration details for Browser\n * @private\n */\nvar Browser = /** @class */ (function () {\n function Browser() {\n }\n Browser.extractBrowserDetail = function () {\n var browserInfo = { culture: {} };\n var keys = Object.keys(REGX_BROWSER);\n var clientInfo = [];\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n clientInfo = Browser.userAgent.match(REGX_BROWSER[key]);\n if (clientInfo) {\n browserInfo.name = (clientInfo[1].toLowerCase() === 'opr' ? 'opera' : clientInfo[1].toLowerCase());\n browserInfo.name = (clientInfo[1].toLowerCase() === 'crios' ? 'chrome' : browserInfo.name);\n browserInfo.version = clientInfo[2];\n browserInfo.culture.name = browserInfo.culture.language = navigator.language;\n if (!!Browser.userAgent.match(REGX_IE11)) {\n browserInfo.name = 'msie';\n break;\n }\n var version = Browser.userAgent.match(REGX_VERSION);\n if (browserInfo.name === 'safari' && version) {\n browserInfo.version = version[2];\n }\n break;\n }\n }\n return browserInfo;\n };\n /**\n * To get events from the browser\n * @param {string} event - type of event triggered.\n * @returns {Boolean}\n */\n Browser.getEvent = function (event) {\n // tslint:disable-next-line:no-any\n var events = {\n start: {\n isPointer: 'pointerdown', isTouch: 'touchstart', isDevice: 'mousedown'\n },\n move: {\n isPointer: 'pointermove', isTouch: 'touchmove', isDevice: 'mousemove'\n },\n end: {\n isPointer: 'pointerup', isTouch: 'touchend', isDevice: 'mouseup'\n },\n cancel: {\n isPointer: 'pointercancel', isTouch: 'touchcancel', isDevice: 'mouseleave'\n }\n };\n return (Browser.isPointer ? events[event].isPointer :\n (Browser.isTouch ? events[event].isTouch + (!Browser.isDevice ? ' ' + events[event].isDevice : '')\n : events[event].isDevice));\n };\n /**\n * To get the Touch start event from browser\n * @returns {string}\n */\n Browser.getTouchStartEvent = function () {\n return Browser.getEvent('start');\n };\n /**\n * To get the Touch end event from browser\n * @returns {string}\n */\n Browser.getTouchEndEvent = function () {\n return Browser.getEvent('end');\n };\n /**\n * To get the Touch move event from browser\n * @returns {string}\n */\n Browser.getTouchMoveEvent = function () {\n return Browser.getEvent('move');\n };\n /**\n * To cancel the touch event from browser\n * @returns {string}\n */\n Browser.getTouchCancelEvent = function () {\n return Browser.getEvent('cancel');\n };\n /**\n * To get the value based on provided key and regX\n * @param {string} key\n * @param {RegExp} regX\n * @returns {Object}\n */\n Browser.getValue = function (key, regX) {\n var browserDetails = window.browserDetails;\n if ('undefined' === typeof browserDetails[key]) {\n return browserDetails[key] = regX.test(Browser.userAgent);\n }\n return browserDetails[key];\n };\n Object.defineProperty(Browser, \"userAgent\", {\n get: function () {\n return Browser.uA;\n },\n //Properties \n /**\n * Property specifies the userAgent of the browser. Default userAgent value is based on the browser.\n * Also we can set our own userAgent.\n */\n set: function (uA) {\n Browser.uA = uA;\n window.browserDetails = {};\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"info\", {\n //Read Only Properties\n /**\n * Property is to get the browser information like Name, Version and Language\n * @returns BrowserInfo\n */\n get: function () {\n if (isUndefined(window.browserDetails.info)) {\n return window.browserDetails.info = Browser.extractBrowserDetail();\n }\n return window.browserDetails.info;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isIE\", {\n /**\n * Property is to get whether the userAgent is based IE.\n */\n get: function () {\n return Browser.getValue('isIE', REGX_IE);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isTouch\", {\n /**\n * Property is to get whether the browser has touch support.\n */\n get: function () {\n if (isUndefined(window.browserDetails.isTouch)) {\n return window.browserDetails.isTouch = ('ontouchstart' in window);\n }\n return window.browserDetails.isTouch;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isPointer\", {\n /**\n * Property is to get whether the browser has Pointer support.\n */\n get: function () {\n if (isUndefined(window.browserDetails.isPointer)) {\n return window.browserDetails.isPointer = ('pointerEnabled' in window.navigator);\n }\n return window.browserDetails.isPointer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isMSPointer\", {\n /**\n * Property is to get whether the browser has MSPointer support.\n */\n get: function () {\n if (isUndefined(window.browserDetails.isMSPointer)) {\n return window.browserDetails.isMSPointer = ('msPointerEnabled' in window.navigator);\n }\n return window.browserDetails.isMSPointer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isDevice\", {\n /**\n * Property is to get whether the userAgent is device based.\n */\n get: function () {\n return Browser.getValue('isDevice', REGX_MOBILE);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isIos\", {\n /**\n * Property is to get whether the userAgent is IOS.\n */\n get: function () {\n return Browser.getValue('isIos', REGX_IOS);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isIos7\", {\n /**\n * Property is to get whether the userAgent is Ios7.\n */\n get: function () {\n return Browser.getValue('isIos7', REGX_IOS7);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isAndroid\", {\n /**\n * Property is to get whether the userAgent is Android.\n */\n get: function () {\n return Browser.getValue('isAndroid', REGX_ANDROID);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isWebView\", {\n /**\n * Property is to identify whether application ran in web view.\n */\n get: function () {\n if (isUndefined(window.browserDetails.isWebView)) {\n window.browserDetails.isWebView = !(isUndefined(window.cordova) && isUndefined(window.PhoneGap)\n && isUndefined(window.phonegap) && window.forge !== 'object');\n return window.browserDetails.isWebView;\n }\n return window.browserDetails.isWebView;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isWindows\", {\n /**\n * Property is to get whether the userAgent is Windows.\n */\n get: function () {\n return Browser.getValue('isWindows', REGX_WINDOWS);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"touchStartEvent\", {\n /**\n * Property is to get the touch start event. It returns event name based on browser.\n */\n get: function () {\n if (isUndefined(window.browserDetails.touchStartEvent)) {\n return window.browserDetails.touchStartEvent = Browser.getTouchStartEvent();\n }\n return window.browserDetails.touchStartEvent;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"touchMoveEvent\", {\n /**\n * Property is to get the touch move event. It returns event name based on browser.\n */\n get: function () {\n if (isUndefined(window.browserDetails.touchMoveEvent)) {\n return window.browserDetails.touchMoveEvent = Browser.getTouchMoveEvent();\n }\n return window.browserDetails.touchMoveEvent;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"touchEndEvent\", {\n /**\n * Property is to get the touch end event. It returns event name based on browser.\n */\n get: function () {\n if (isUndefined(window.browserDetails.touchEndEvent)) {\n return window.browserDetails.touchEndEvent = Browser.getTouchEndEvent();\n }\n return window.browserDetails.touchEndEvent;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"touchCancelEvent\", {\n /**\n * Property is to cancel the touch end event.\n */\n get: function () {\n if (isUndefined(window.browserDetails.touchCancelEvent)) {\n return window.browserDetails.touchCancelEvent = Browser.getTouchCancelEvent();\n }\n return window.browserDetails.touchCancelEvent;\n },\n enumerable: true,\n configurable: true\n });\n /* istanbul ignore next */\n Browser.uA = typeof navigator !== 'undefined' ? navigator.userAgent : '';\n return Browser;\n}());\nexport { Browser };\n","import { defaultCurrencyCode } from '../internationalization';\nimport { getValue, isNullOrUndefined, extend } from '../util';\nimport { ParserBase as parser } from './parser-base';\nimport { DateFormat } from './date-formatter';\nimport { NumberFormat } from './number-formatter';\n/**\n * Date base common constants and function for date parser and formatter.\n */\nexport var IntlBase;\n(function (IntlBase) {\n // tslint:disable-next-line:max-line-length\n IntlBase.negativeDataRegex = /^(('[^']+'|''|[^*#@0,.E])*)(\\*.)?((([#,]*[0,]*0+)(\\.0*[0-9]*#*)?)|([#,]*@+#*))(E\\+?0+)?(('[^']+'|''|[^*#@0,.E])*)$/;\n IntlBase.customRegex = /^(('[^']+'|''|[^*#@0,.])*)(\\*.)?((([0#,]*[0,]*[0#]*)(\\.[0#]*)?)|([#,]*@+#*))(E\\+?0+)?(('[^']+'|''|[^*#@0,.E])*)$/;\n IntlBase.latnParseRegex = /0|1|2|3|4|5|6|7|8|9/g;\n var fractionRegex = /[0-9]/g;\n IntlBase.defaultCurrency = '$';\n var mapper = ['infinity', 'nan', 'group', 'decimal'];\n var patternRegex = /G|M|L|H|c|'| a|yy|y|EEEE|E/g;\n var patternMatch = {\n 'G': '',\n 'M': 'm',\n 'L': 'm',\n 'H': 'h',\n 'c': 'd',\n '\\'': '\"',\n ' a': ' AM/PM',\n 'yy': 'yy',\n 'y': 'yyyy',\n 'EEEE': 'dddd',\n 'E': 'ddd'\n };\n IntlBase.formatRegex = /(^[ncpae]{1})([0-1]?[0-9]|20)?$/i;\n IntlBase.currencyFormatRegex = /(^[ca]{1})([0-1]?[0-9]|20)?$/i;\n IntlBase.curWithoutNumberRegex = /(c|a)$/ig;\n var typeMapper = {\n '$': 'isCurrency',\n '%': 'isPercent',\n '-': 'isNegative',\n 0: 'nlead',\n 1: 'nend'\n };\n IntlBase.dateParseRegex = /([a-z])\\1*|'([^']|'')+'|''|./gi;\n IntlBase.basicPatterns = ['short', 'medium', 'long', 'full'];\n /* tslint:disable:quotemark */\n IntlBase.defaultObject = {\n 'dates': {\n 'calendars': {\n 'gregorian': {\n 'months': {\n 'stand-alone': {\n 'abbreviated': {\n '1': 'Jan',\n '2': 'Feb',\n '3': 'Mar',\n '4': 'Apr',\n '5': 'May',\n '6': 'Jun',\n '7': 'Jul',\n '8': 'Aug',\n '9': 'Sep',\n '10': 'Oct',\n '11': 'Nov',\n '12': 'Dec'\n },\n 'narrow': {\n '1': 'J',\n '2': 'F',\n '3': 'M',\n '4': 'A',\n '5': 'M',\n '6': 'J',\n '7': 'J',\n '8': 'A',\n '9': 'S',\n '10': 'O',\n '11': 'N',\n '12': 'D'\n },\n 'wide': {\n '1': 'January',\n '2': 'February',\n '3': 'March',\n '4': 'April',\n '5': 'May',\n '6': 'June',\n '7': 'July',\n '8': 'August',\n '9': 'September',\n '10': 'October',\n '11': 'November',\n '12': 'December'\n }\n }\n },\n \"days\": {\n \"stand-alone\": {\n \"abbreviated\": {\n \"sun\": \"Sun\",\n \"mon\": \"Mon\",\n \"tue\": \"Tue\",\n \"wed\": \"Wed\",\n \"thu\": \"Thu\",\n \"fri\": \"Fri\",\n \"sat\": \"Sat\"\n },\n \"narrow\": {\n \"sun\": \"S\",\n \"mon\": \"M\",\n \"tue\": \"T\",\n \"wed\": \"W\",\n \"thu\": \"T\",\n \"fri\": \"F\",\n \"sat\": \"S\"\n },\n \"short\": {\n \"sun\": \"Su\",\n \"mon\": \"Mo\",\n \"tue\": \"Tu\",\n \"wed\": \"We\",\n \"thu\": \"Th\",\n \"fri\": \"Fr\",\n \"sat\": \"Sa\"\n },\n \"wide\": {\n \"sun\": \"Sunday\",\n \"mon\": \"Monday\",\n \"tue\": \"Tuesday\",\n \"wed\": \"Wednesday\",\n \"thu\": \"Thursday\",\n \"fri\": \"Friday\",\n \"sat\": \"Saturday\"\n }\n }\n },\n \"dayPeriods\": {\n \"format\": {\n \"wide\": {\n \"am\": \"AM\",\n \"pm\": \"PM\"\n }\n }\n },\n 'eras': {\n 'eraNames': {\n '0': 'Before Christ',\n '0-alt-variant': 'Before Common Era',\n '1': 'Anno Domini',\n \"1-alt-variant\": \"Common Era\"\n },\n 'eraAbbr': {\n '0': 'BC',\n '0-alt-variant': 'BCE',\n '1': 'AD',\n '1-alt-variant': 'CE'\n },\n 'eraNarrow': {\n '0': 'B',\n '0-alt-variant': 'BCE',\n '1': 'A',\n '1-alt-variant': 'CE'\n }\n },\n 'dateFormats': {\n 'full': 'EEEE, MMMM d, y',\n 'long': 'MMMM d, y',\n 'medium': 'MMM d, y',\n 'short': 'M/d/yy'\n },\n 'timeFormats': {\n 'full': 'h:mm:ss a zzzz',\n 'long': 'h:mm:ss a z',\n 'medium': 'h:mm:ss a',\n 'short': 'h:mm a'\n },\n 'dateTimeFormats': {\n 'full': \"{1} 'at' {0}\",\n 'long': \"{1} 'at' {0}\",\n 'medium': '{1}, {0}',\n 'short': '{1}, {0}',\n 'availableFormats': {\n 'd': 'd',\n 'E': 'ccc',\n 'Ed': 'd E',\n 'Ehm': 'E h:mm a',\n 'EHm': 'E HH:mm',\n 'Ehms': 'E h:mm:ss a',\n 'EHms': 'E HH:mm:ss',\n 'Gy': 'y G',\n 'GyMMM': 'MMM y G',\n 'GyMMMd': 'MMM d, y G',\n 'GyMMMEd': 'E, MMM d, y G',\n 'h': 'h a',\n 'H': 'HH',\n 'hm': 'h:mm a',\n 'Hm': 'HH:mm',\n 'hms': 'h:mm:ss a',\n 'Hms': 'HH:mm:ss',\n 'hmsv': 'h:mm:ss a v',\n 'Hmsv': 'HH:mm:ss v',\n 'hmv': 'h:mm a v',\n 'Hmv': 'HH:mm v',\n 'M': 'L',\n 'Md': 'M/d',\n 'MEd': 'E, M/d',\n 'MMM': 'LLL',\n 'MMMd': 'MMM d',\n 'MMMEd': 'E, MMM d',\n 'MMMMd': 'MMMM d',\n 'ms': 'mm:ss',\n 'y': 'y',\n 'yM': 'M/y',\n 'yMd': 'M/d/y',\n 'yMEd': 'E, M/d/y',\n 'yMMM': 'MMM y',\n 'yMMMd': 'MMM d, y',\n 'yMMMEd': 'E, MMM d, y',\n 'yMMMM': 'MMMM y',\n },\n }\n }\n },\n 'timeZoneNames': {\n \"hourFormat\": \"+HH:mm;-HH:mm\",\n \"gmtFormat\": \"GMT{0}\",\n \"gmtZeroFormat\": \"GMT\",\n }\n },\n 'numbers': {\n 'currencies': {\n 'USD': {\n 'displayName': 'US Dollar',\n 'symbol': '$',\n 'symbol-alt-narrow': '$'\n },\n 'EUR': {\n 'displayName': 'Euro',\n 'symbol': '€',\n 'symbol-alt-narrow': '€'\n },\n 'GBP': {\n 'displayName': 'British Pound',\n 'symbol-alt-narrow': '£'\n },\n },\n 'defaultNumberingSystem': 'latn',\n 'minimumGroupingDigits': '1',\n 'symbols-numberSystem-latn': {\n 'decimal': '.',\n 'group': ',',\n 'list': ';',\n 'percentSign': '%',\n 'plusSign': '+',\n 'minusSign': '-',\n 'exponential': 'E',\n 'superscriptingExponent': '×',\n 'perMille': '‰',\n 'infinity': '∞',\n 'nan': 'NaN',\n 'timeSeparator': ':'\n },\n 'decimalFormats-numberSystem-latn': {\n 'standard': '#,##0.###',\n },\n 'percentFormats-numberSystem-latn': {\n 'standard': '#,##0%'\n },\n 'currencyFormats-numberSystem-latn': {\n 'standard': '¤#,##0.00',\n 'accounting': '¤#,##0.00;(¤#,##0.00)'\n },\n 'scientificFormats-numberSystem-latn': {\n 'standard': '#E0'\n }\n }\n };\n /* tslint:enable:quotemark */\n IntlBase.monthIndex = {\n 3: 'abbreviated',\n 4: 'wide',\n 5: 'narrow',\n 1: 'abbreviated'\n };\n /**\n *\n */\n IntlBase.month = 'months';\n IntlBase.days = 'days';\n /**\n * Default numerber Object\n */\n IntlBase.patternMatcher = {\n C: 'currency',\n P: 'percent',\n N: 'decimal',\n A: 'currency',\n E: 'scientific'\n };\n /**\n * Returns the resultant pattern based on the skeleton, dateObject and the type provided\n * @private\n * @param {string} skeleton\n * @param {Object} dateObject\n * @param {string} type\n * @returns {string}\n */\n function getResultantPattern(skeleton, dateObject, type) {\n var resPattern;\n var iType = type || 'date';\n if (IntlBase.basicPatterns.indexOf(skeleton) !== -1) {\n resPattern = getValue(iType + 'Formats.' + skeleton, dateObject);\n if (iType === 'dateTime') {\n var dPattern = getValue('dateFormats.' + skeleton, dateObject);\n var tPattern = getValue('timeFormats.' + skeleton, dateObject);\n resPattern = resPattern.replace('{1}', dPattern).replace('{0}', tPattern);\n }\n }\n else {\n resPattern = getValue('dateTimeFormats.availableFormats.' + skeleton, dateObject);\n }\n return resPattern;\n }\n IntlBase.getResultantPattern = getResultantPattern;\n /**\n * Returns the dependable object for provided cldr data and culture\n * @private\n * @param {Object} cldr\n * @param {string} culture\n * @param {boolean} isNumber\n * @returns {Dependables}\n */\n function getDependables(cldr, culture, isNumber) {\n var ret = {};\n ret.parserObject = parser.getMainObject(cldr, culture) || IntlBase.defaultObject;\n if (isNumber) {\n ret.numericObject = getValue('numbers', ret.parserObject);\n }\n else {\n ret.dateObject = getValue('dates.calendars.gregorian', ret.parserObject);\n }\n return ret;\n }\n IntlBase.getDependables = getDependables;\n /**\n * Returns the symbol pattern for provided parameters\n * @private\n * @param {string} type\n * @param {string} numSystem\n * @param {Object} obj\n * @param {boolean} isAccount\n * @returns {string}\n */\n function getSymbolPattern(type, numSystem, obj, isAccount) {\n return getValue(type + 'Formats-numberSystem-' +\n numSystem + (isAccount ? '.accounting' : '.standard'), obj) || (isAccount ? getValue(type + 'Formats-numberSystem-' +\n numSystem + '.standard', obj) : '');\n }\n IntlBase.getSymbolPattern = getSymbolPattern;\n /**\n * Returns proper numeric skeleton\n * @private\n * @param {string} skeleton\n * @returns {NumericSkeleton}\n */\n function getProperNumericSkeleton(skeleton) {\n var matches = skeleton.match(IntlBase.formatRegex);\n var ret = {};\n var pattern = matches[1].toUpperCase();\n ret.isAccount = (pattern === 'A');\n /* tslint:disable no-any */\n ret.type = IntlBase.patternMatcher[pattern];\n if (skeleton.length > 1) {\n ret.fractionDigits = parseInt(matches[2], 10);\n }\n return ret;\n }\n IntlBase.getProperNumericSkeleton = getProperNumericSkeleton;\n /**\n * Returns format data for number formatting like minimum fraction, maximum fraction, etc..,\n * @private\n * @param {string} pattern\n * @param {boolean} needFraction\n * @param {string} cSymbol\n * @param {boolean} fractionOnly\n * @returns {NegativeData}\n */\n function getFormatData(pattern, needFraction, cSymbol, fractionOnly) {\n var nData = fractionOnly ? {} : { nlead: '', nend: '' };\n var match = pattern.match(IntlBase.customRegex);\n if (match) {\n if (!fractionOnly) {\n nData.nlead = changeCurrencySymbol(match[1], cSymbol);\n nData.nend = changeCurrencySymbol(match[10], cSymbol);\n nData.groupPattern = match[4];\n }\n var fraction = match[7];\n if (fraction && needFraction) {\n var fmatch = fraction.match(fractionRegex);\n if (!isNullOrUndefined(fmatch)) {\n nData.minimumFraction = fmatch.length;\n }\n else {\n nData.minimumFraction = 0;\n }\n nData.maximumFraction = fraction.length - 1;\n }\n }\n return nData;\n }\n IntlBase.getFormatData = getFormatData;\n /**\n * Changes currency symbol\n * @private\n * @param {string} val\n * @param {string} sym\n * @returns {string}\n */\n function changeCurrencySymbol(val, sym) {\n if (val) {\n return val.replace(IntlBase.defaultCurrency, sym);\n }\n return '';\n }\n /**\n * Returns currency symbol based on currency code\n * @private\n * @param {Object} numericObject\n * @param {string} currencyCode\n * @returns {string}\n */\n function getCurrencySymbol(numericObject, currencyCode) {\n return getValue('currencies.' + currencyCode + '.symbol', numericObject) || '$';\n }\n IntlBase.getCurrencySymbol = getCurrencySymbol;\n /**\n * Returns formatting options for custom number format\n * @private\n * @param {string} format\n * @param {CommonOptions} dOptions\n * @param {Dependables} obj\n * @returns {GenericFormatOptions}\n */\n function customFormat(format, dOptions, obj) {\n var options = {};\n var formatSplit = format.split(';');\n var data = ['pData', 'nData', 'zeroData'];\n for (var i = 0; i < formatSplit.length; i++) {\n options[data[i]] = customNumberFormat(formatSplit[i], dOptions, obj);\n }\n if (isNullOrUndefined(options.nData)) {\n options.nData = extend({}, options.pData);\n options.nData.nlead = isNullOrUndefined(dOptions) ? '-' + options.nData.nlead : dOptions.minusSymbol + options.nData.nlead;\n }\n return options;\n }\n IntlBase.customFormat = customFormat;\n /**\n * Returns custom formatting options\n * @private\n * @param {string} format\n * @param {CommonOptions} dOptions\n * @param {Object} numObject\n * @returns {NegativeData}\n */\n function customNumberFormat(format, dOptions, numObject) {\n var cOptions = { type: 'decimal', minimumFractionDigits: 0, maximumFractionDigits: 0 };\n var pattern = format.match(IntlBase.customRegex);\n if (isNullOrUndefined(pattern) || (pattern[5] === '' && format !== 'N/A')) {\n cOptions.type = undefined;\n }\n cOptions.nlead = pattern[1];\n cOptions.nend = pattern[10];\n var integerPart = pattern[6];\n cOptions.useGrouping = integerPart.indexOf(',') !== -1;\n integerPart = integerPart.replace(/,/g, '');\n var fractionPart = pattern[7];\n if (integerPart.indexOf('0') !== -1) {\n cOptions.minimumIntegerDigits = integerPart.length - integerPart.indexOf('0');\n }\n if (!isNullOrUndefined(fractionPart)) {\n cOptions.minimumFractionDigits = fractionPart.lastIndexOf('0');\n cOptions.maximumFractionDigits = fractionPart.lastIndexOf('#');\n if (cOptions.minimumFractionDigits === -1) {\n cOptions.minimumFractionDigits = 0;\n }\n if (cOptions.maximumFractionDigits === -1 || cOptions.maximumFractionDigits < cOptions.minimumFractionDigits) {\n cOptions.maximumFractionDigits = cOptions.minimumFractionDigits;\n }\n }\n if (!isNullOrUndefined(dOptions)) {\n extend(cOptions, isCurrencyPercent([cOptions.nlead, cOptions.nend], '$', dOptions.currencySymbol));\n if (!cOptions.isCurrency) {\n extend(cOptions, isCurrencyPercent([cOptions.nlead, cOptions.nend], '%', dOptions.percentSymbol));\n }\n }\n else {\n extend(cOptions, isCurrencyPercent([cOptions.nlead, cOptions.nend], '%', '%'));\n }\n if (!isNullOrUndefined(numObject)) {\n var symbolPattern = getSymbolPattern(cOptions.type, dOptions.numberMapper.numberSystem, numObject, false);\n if (cOptions.useGrouping) {\n cOptions.groupSeparator = dOptions.numberMapper.numberSymbols[mapper[2]];\n cOptions.groupData = NumberFormat.getGroupingDetails(symbolPattern.split(';')[0]);\n }\n cOptions.nlead = cOptions.nlead.replace(/\\'/g, '');\n cOptions.nend = cOptions.nend.replace(/\\'/g, '');\n }\n return cOptions;\n }\n /**\n * Returns formatting options for currency or percent type\n * @private\n * @param {string[]} parts\n * @param {string} actual\n * @param {string} symbol\n * @returns {NegativeData}\n */\n function isCurrencyPercent(parts, actual, symbol) {\n var options = { nlead: parts[0], nend: parts[1] };\n for (var i = 0; i < 2; i++) {\n var part = parts[i];\n var loc = part.indexOf(actual);\n if ((loc !== -1) && ((loc < part.indexOf('\\'')) || (loc > part.lastIndexOf('\\'')))) {\n options[typeMapper[i]] = part.substr(0, loc) + symbol + part.substr(loc + 1);\n options[typeMapper[actual]] = true;\n options.type = options.isCurrency ? 'currency' : 'percent';\n break;\n }\n }\n return options;\n }\n IntlBase.isCurrencyPercent = isCurrencyPercent;\n /**\n * Returns culture based date separator\n * @private\n * @param {Object} dateObj\n * @returns {string}\n */\n function getDateSeparator(dateObj) {\n var value = (getValue('dateFormats.short', dateObj) || '').match(/[d‏M‏]([^d‏M])[d‏M‏]/i);\n return value ? value[1] : '/';\n }\n IntlBase.getDateSeparator = getDateSeparator;\n /**\n * Returns Native Date Time pattern\n * @private\n * @param {string} culture\n * @param {DateFormatOptions} options\n * @param {Object} cldr\n * @returns {string}\n */\n function getActualDateTimeFormat(culture, options, cldr, isExcelFormat) {\n var dependable = getDependables(cldr, culture);\n var actualPattern = options.format || getResultantPattern(options.skeleton, dependable.dateObject, options.type);\n if (isExcelFormat) {\n actualPattern = actualPattern.replace(patternRegex, function (pattern) {\n return patternMatch[pattern];\n });\n if (actualPattern.indexOf('z') !== -1) {\n var tLength = actualPattern.match(/z/g).length;\n var timeZonePattern = void 0;\n var options_1 = { 'timeZone': {} };\n options_1.numMapper = parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr));\n options_1.timeZone = getValue('dates.timeZoneNames', dependable.parserObject);\n var value = new Date();\n var timezone = value.getTimezoneOffset();\n var pattern = (tLength < 4) ? '+H;-H' : options_1.timeZone.hourFormat;\n pattern = pattern.replace(/:/g, options_1.numMapper.timeSeparator);\n if (timezone === 0) {\n timeZonePattern = options_1.timeZone.gmtZeroFormat;\n }\n else {\n timeZonePattern = DateFormat.getTimeZoneValue(timezone, pattern);\n timeZonePattern = options_1.timeZone.gmtFormat.replace(/\\{0\\}/, timeZonePattern);\n }\n actualPattern = actualPattern.replace(/[z]+/, '\"' + timeZonePattern + '\"');\n }\n actualPattern = actualPattern.replace(/ $/, '');\n }\n return actualPattern;\n }\n IntlBase.getActualDateTimeFormat = getActualDateTimeFormat;\n /**\n * Returns Native Number pattern\n * @private\n * @param {string} culture\n * @param {NumberFormatOptions} options\n * @param {Object} cldr\n * @returns {string}\n */\n function getActualNumberFormat(culture, options, cldr) {\n var dependable = getDependables(cldr, culture, true);\n var parseOptions = { custom: true };\n var minFrac;\n var curObj = {};\n var curMatch = (options.format || '').match(IntlBase.currencyFormatRegex);\n if (curMatch) {\n var dOptions = {};\n dOptions.numberMapper = parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr), true);\n var curCode = getCurrencySymbol(dependable.numericObject, options.currency || defaultCurrencyCode);\n var symbolPattern = getSymbolPattern('currency', dOptions.numberMapper.numberSystem, dependable.numericObject, (/a/i).test(options.format));\n symbolPattern = symbolPattern.replace(/\\u00A4/g, curCode);\n var split = symbolPattern.split(';');\n curObj.hasNegativePattern = (split.length > 1);\n curObj.nData = getFormatData(split[1] || '-' + split[0], true, curCode);\n curObj.pData = getFormatData(split[0], false, curCode);\n if (!curMatch[2] && !options.minimumFractionDigits && !options.maximumFractionDigits) {\n minFrac = getFormatData(symbolPattern.split(';')[0], true, '', true).minimumFraction;\n }\n }\n var actualPattern;\n if ((IntlBase.formatRegex.test(options.format)) || !(options.format)) {\n extend(parseOptions, getProperNumericSkeleton(options.format || 'N'));\n parseOptions.custom = false;\n actualPattern = '###0';\n if (parseOptions.fractionDigits || options.minimumFractionDigits || options.maximumFractionDigits || minFrac) {\n var defaultMinimum = 0;\n if (parseOptions.fractionDigits) {\n options.minimumFractionDigits = options.maximumFractionDigits = parseOptions.fractionDigits;\n }\n actualPattern = fractionDigitsPattern(actualPattern, minFrac || parseOptions.fractionDigits ||\n options.minimumFractionDigits || defaultMinimum, options.maximumFractionDigits || defaultMinimum);\n }\n if (options.minimumIntegerDigits) {\n actualPattern = minimumIntegerPattern(actualPattern, options.minimumIntegerDigits);\n }\n if (options.useGrouping) {\n actualPattern = groupingPattern(actualPattern);\n }\n if (parseOptions.type === 'currency') {\n var cPattern = actualPattern;\n actualPattern = curObj.pData.nlead + cPattern + curObj.pData.nend;\n if (curObj.hasNegativePattern) {\n actualPattern += ';' + curObj.nData.nlead + cPattern + curObj.nData.nend;\n }\n }\n if (parseOptions.type === 'percent') {\n actualPattern += ' %';\n }\n }\n else {\n actualPattern = options.format.replace(/\\'/g, '\"');\n }\n return actualPattern;\n }\n IntlBase.getActualNumberFormat = getActualNumberFormat;\n function fractionDigitsPattern(pattern, minDigits, maxDigits) {\n pattern += '.';\n for (var a = 0; a < minDigits; a++) {\n pattern += '0';\n }\n if (minDigits < maxDigits) {\n var diff = maxDigits - minDigits;\n for (var b = 0; b < diff; b++) {\n pattern += '#';\n }\n }\n return pattern;\n }\n function minimumIntegerPattern(pattern, digits) {\n var temp = pattern.split('.');\n var integer = '';\n for (var x = 0; x < digits; x++) {\n integer += '0';\n }\n return temp[1] ? (integer + '.' + temp[1]) : integer;\n }\n function groupingPattern(pattern) {\n var temp = pattern.split('.');\n var integer = temp[0];\n var no = 3 - integer.length % 3;\n var hash = (no && no === 1) ? '#' : (no === 2 ? '##' : '');\n integer = hash + integer;\n pattern = '';\n for (var x = integer.length - 1; x > 0; x = x - 3) {\n pattern = ',' + integer[x - 2] + integer[x - 1] + integer[x] + pattern;\n }\n pattern = pattern.slice(1);\n return temp[1] ? (pattern + '.' + temp[1]) : pattern;\n }\n})(IntlBase || (IntlBase = {}));\n","/**\n * To import utils\n */\nimport { isNullOrUndefined } from './util';\n/**\n * @private\n */\nvar CanvasRenderer = /** @class */ (function () {\n /* End-Properties */\n function CanvasRenderer(rootID) {\n this.rootId = rootID;\n }\n // method to get the attributes value\n /* tslint:disable */\n CanvasRenderer.prototype.getOptionValue = function (options, key) {\n return options[key];\n };\n /* tslint:enable */\n /**\n * To create a Html5 canvas element\n * @param {BaseAttibutes} options - Options to create canvas\n * @return {HTMLCanvasElement}\n */\n CanvasRenderer.prototype.createCanvas = function (options) {\n var canvasObj = document.createElement('canvas');\n canvasObj.setAttribute('id', this.rootId + '_canvas');\n this.ctx = canvasObj.getContext('2d');\n this.canvasObj = canvasObj;\n this.setCanvasSize(options.width, options.height);\n return this.canvasObj;\n };\n /**\n * To set the width and height for the Html5 canvas element\n * @param {number} width - width of the canvas\n * @param {number} height - height of the canvas\n * @return {void}\n */\n CanvasRenderer.prototype.setCanvasSize = function (width, height) {\n var element = document.getElementById(this.rootId);\n var size = !isNullOrUndefined(element) ? element.getBoundingClientRect() : null;\n if (isNullOrUndefined(this.width)) {\n this.canvasObj.setAttribute('width', width ? width.toString() : size.width.toString());\n }\n else {\n this.canvasObj.setAttribute('width', this.width.toString());\n }\n if (isNullOrUndefined(this.height)) {\n this.canvasObj.setAttribute('height', height ? height.toString() : '450');\n }\n else {\n this.canvasObj.setAttribute('height', this.height.toString());\n }\n };\n // To set the values to the attributes\n CanvasRenderer.prototype.setAttributes = function (options) {\n this.ctx.lineWidth = this.getOptionValue(options, 'stroke-width');\n var dashArray = this.getOptionValue(options, 'stroke-dasharray');\n if (!isNullOrUndefined(dashArray)) {\n var dashArrayString = dashArray.split(',');\n this.ctx.setLineDash([parseInt(dashArrayString[0], 10), parseInt(dashArrayString[1], 10)]);\n }\n this.ctx.strokeStyle = this.getOptionValue(options, 'stroke');\n };\n /**\n * To draw a line\n * @param {LineAttributes} options - required options to draw a line on the canvas\n * @return {void}\n */\n CanvasRenderer.prototype.drawLine = function (options) {\n this.ctx.save();\n this.ctx.beginPath();\n this.ctx.lineWidth = this.getOptionValue(options, 'stroke-width');\n this.ctx.strokeStyle = options.stroke;\n this.ctx.moveTo(options.x1, options.y1);\n this.ctx.lineTo(options.x2, options.y2);\n this.ctx.stroke();\n this.ctx.restore();\n this.dataUrl = this.canvasObj.toDataURL();\n };\n /**\n * To draw a rectangle\n * @param {RectAttributes} options - required options to draw a rectangle on the canvas\n * @return {void}\n */\n CanvasRenderer.prototype.drawRectangle = function (options) {\n var canvasCtx = this.ctx;\n var cornerRadius = options.rx;\n this.ctx.save();\n this.ctx.beginPath();\n this.ctx.globalAlpha = this.getOptionValue(options, 'opacity');\n this.setAttributes(options);\n this.ctx.rect(options.x, options.y, options.width, options.height);\n if (cornerRadius !== null && cornerRadius >= 0) {\n this.drawCornerRadius(options);\n }\n else {\n if (options.fill === 'none') {\n options.fill = 'transparent';\n }\n this.ctx.fillStyle = options.fill;\n this.ctx.fillRect(options.x, options.y, options.width, options.height);\n this.ctx.stroke();\n }\n this.ctx.restore();\n this.ctx = canvasCtx;\n this.dataUrl = this.canvasObj.toDataURL();\n };\n // To draw the corner of a rectangle\n CanvasRenderer.prototype.drawCornerRadius = function (options) {\n var cornerRadius = options.rx;\n var x = options.x;\n var y = options.y;\n var width = options.width;\n var height = options.height;\n if (options.fill === 'none') {\n options.fill = 'transparent';\n }\n this.ctx.fillStyle = options.fill;\n if (width < 2 * cornerRadius) {\n cornerRadius = width / 2;\n }\n if (height < 2 * cornerRadius) {\n cornerRadius = height / 2;\n }\n this.ctx.beginPath();\n this.ctx.moveTo(x + width - cornerRadius, y);\n this.ctx.arcTo(x + width, y, x + width, y + height, cornerRadius);\n this.ctx.arcTo(x + width, y + height, x, y + height, cornerRadius);\n this.ctx.arcTo(x, y + height, x, y, cornerRadius);\n this.ctx.arcTo(x, y, x + width, y, cornerRadius);\n this.ctx.closePath();\n this.ctx.fill();\n this.ctx.stroke();\n this.dataUrl = this.canvasObj.toDataURL();\n };\n /**\n * To draw a path on the canvas\n * @param {PathAttributes} options - options needed to draw path\n * @param {Int32Array} canvasTranslate - Array of numbers to translate the canvas\n * @return {void}\n */\n CanvasRenderer.prototype.drawPath = function (options, canvasTranslate) {\n var path = options.d;\n var dataSplit = path.split(' ');\n var borderWidth = this.getOptionValue(options, 'stroke-width');\n var canvasCtx = this.ctx;\n var flag = true;\n this.ctx.save();\n this.ctx.beginPath();\n if (canvasTranslate) {\n this.ctx.translate(canvasTranslate[0], canvasTranslate[1]);\n }\n this.ctx.globalAlpha = options.opacity ? options.opacity : this.getOptionValue(options, 'fill-opacity');\n this.setAttributes(options);\n for (var i = 0; i < dataSplit.length; i = i + 3) {\n var x1 = parseFloat(dataSplit[i + 1]);\n var y1 = parseFloat(dataSplit[i + 2]);\n switch (dataSplit[i]) {\n case 'M':\n if (!options.innerR && !options.cx) {\n this.ctx.moveTo(x1, y1);\n }\n break;\n case 'L':\n if (!options.innerR) {\n this.ctx.lineTo(x1, y1);\n }\n break;\n case 'C':\n var c1 = parseFloat(dataSplit[i + 3]);\n var c2 = parseFloat(dataSplit[i + 4]);\n var c3 = parseFloat(dataSplit[i + 5]);\n var c4 = parseFloat(dataSplit[i + 6]);\n this.ctx.bezierCurveTo(x1, y1, c1, c2, c3, c4);\n i = i + 4;\n break;\n case 'A':\n if (!options.innerR) {\n if (options.cx) {\n this.ctx.arc(options.cx, options.cy, options.radius, 0, 2 * Math.PI, options.counterClockWise);\n }\n else {\n this.ctx.moveTo(options.x, options.y);\n this.ctx.arc(options.x, options.y, options.radius, options.start, options.end, options.counterClockWise);\n this.ctx.lineTo(options.x, options.y);\n }\n }\n else if (flag) {\n this.ctx.arc(options.x, options.y, options.radius, options.start, options.end, options.counterClockWise);\n this.ctx.arc(options.x, options.y, options.innerR, options.end, options.start, !options.counterClockWise);\n flag = false;\n }\n i = i + 5;\n break;\n case 'z':\n this.ctx.closePath();\n break;\n }\n }\n if (options.fill !== 'none' && options.fill !== undefined) {\n this.ctx.fillStyle = options.fill;\n this.ctx.fill();\n }\n if (borderWidth > 0) {\n this.ctx.stroke();\n }\n this.ctx.restore();\n this.ctx = canvasCtx;\n this.dataUrl = this.canvasObj.toDataURL();\n };\n /**\n * To draw a text\n * @param {TextAttributes} options - options required to draw text\n * @param {string} label - Specifies the text which has to be drawn on the canvas\n * @return {void}\n */\n CanvasRenderer.prototype.drawText = function (options, label) {\n var fontWeight = this.getOptionValue(options, 'font-weight');\n if (!isNullOrUndefined(fontWeight) && fontWeight.toLowerCase() === 'regular') {\n fontWeight = 'normal';\n }\n var fontSize = this.getOptionValue(options, 'font-size');\n var fontFamily = this.getOptionValue(options, 'font-family');\n var fontStyle = this.getOptionValue(options, 'font-style').toLowerCase();\n var font = (fontStyle + ' ' + fontWeight + ' ' + fontSize + ' ' + fontFamily);\n var anchor = this.getOptionValue(options, 'text-anchor');\n var opacity = options.opacity !== undefined ? options.opacity : 1;\n if (anchor === 'middle') {\n anchor = 'center';\n }\n this.ctx.save();\n this.ctx.fillStyle = options.fill;\n this.ctx.font = font;\n this.ctx.textAlign = anchor;\n this.ctx.globalAlpha = opacity;\n if (options.baseline) {\n this.ctx.textBaseline = options.baseline;\n }\n var txtlngth = 0;\n this.ctx.translate(options.x + (txtlngth / 2), options.y);\n this.ctx.rotate(options.labelRotation * Math.PI / 180);\n this.ctx.fillText(label, 0, 0);\n this.ctx.restore();\n this.dataUrl = this.canvasObj.toDataURL();\n };\n /**\n * To draw circle on the canvas\n * @param {CircleAttributes} options - required options to draw the circle\n * @return {void}\n */\n CanvasRenderer.prototype.drawCircle = function (options) {\n var canvasCtx = this.ctx;\n this.ctx.save();\n this.ctx.beginPath();\n this.ctx.arc(options.cx, options.cy, options.r, 0, 2 * Math.PI);\n this.ctx.fillStyle = options.fill;\n this.ctx.globalAlpha = options.opacity;\n this.ctx.fill();\n this.setAttributes(options);\n this.ctx.stroke();\n this.ctx.restore();\n this.ctx = canvasCtx;\n this.dataUrl = this.canvasObj.toDataURL();\n };\n /**\n * To draw polyline\n * @param {PolylineAttributes} options - options needed to draw polyline\n * @return {void}\n */\n CanvasRenderer.prototype.drawPolyline = function (options) {\n this.ctx.save();\n this.ctx.beginPath();\n var points = options.points.split(' ');\n for (var i = 0; i < points.length - 1; i++) {\n var point = points[i].split(',');\n var x = parseFloat(point[0]);\n var y = parseFloat(point[1]);\n if (i === 0) {\n this.ctx.moveTo(x, y);\n }\n else {\n this.ctx.lineTo(x, y);\n }\n }\n this.ctx.lineWidth = this.getOptionValue(options, 'stroke-width');\n this.ctx.strokeStyle = options.stroke;\n this.ctx.stroke();\n this.ctx.restore();\n this.dataUrl = this.canvasObj.toDataURL();\n };\n /**\n * To draw an ellipse on the canvas\n * @param {EllipseAttributes} options - options needed to draw ellipse\n * @return {void}\n */\n CanvasRenderer.prototype.drawEllipse = function (options) {\n var canvasCtx = this.ctx;\n var circumference = Math.max(options.rx, options.ry);\n var scaleX = options.rx / circumference;\n var scaleY = options.ry / circumference;\n this.ctx.save();\n this.ctx.beginPath();\n this.ctx.translate(options.cx, options.cy);\n this.ctx.save();\n this.ctx.scale(scaleX, scaleY);\n this.ctx.arc(0, 0, circumference, 0, 2 * Math.PI, false);\n this.ctx.fillStyle = options.fill;\n this.ctx.fill();\n this.ctx.restore();\n this.ctx.lineWidth = this.getOptionValue(options, 'stroke-width');\n this.ctx.strokeStyle = options.stroke;\n this.ctx.stroke();\n this.ctx.restore();\n this.ctx = canvasCtx;\n this.dataUrl = this.canvasObj.toDataURL();\n };\n /**\n * To draw an image\n * @param {ImageAttributes} options - options required to draw an image on the canvas\n * @return {void}\n */\n CanvasRenderer.prototype.drawImage = function (options) {\n this.ctx.save();\n var imageObj = new Image();\n if (!isNullOrUndefined(options.href)) {\n imageObj.src = options.href;\n this.ctx.drawImage(imageObj, options.x, options.y, options.width, options.height);\n }\n this.ctx.restore();\n this.dataUrl = this.canvasObj.toDataURL();\n };\n /**\n * To create a linear gradient\n * @param {string[]} colors - Specifies the colors required to create linear gradient\n * @return {string}\n */\n CanvasRenderer.prototype.createLinearGradient = function (colors) {\n var myGradient;\n if (!isNullOrUndefined(colors[0].colorStop)) {\n myGradient = this.ctx.createLinearGradient(0, 0, 0, this.canvasObj.height);\n }\n var color = this.setGradientValues(colors, myGradient);\n return color;\n };\n /**\n * To create a radial gradient\n * @param {string[]} colors - Specifies the colors required to create linear gradient\n * @return {string}\n */\n CanvasRenderer.prototype.createRadialGradient = function (colors) {\n var myGradient;\n if (!isNullOrUndefined(colors[0].colorStop)) {\n myGradient = this.ctx.createRadialGradient(0, 0, 0, 0, 0, this.canvasObj.height);\n }\n var colorName = this.setGradientValues(colors, myGradient);\n return colorName;\n };\n // To set the gradient values\n CanvasRenderer.prototype.setGradientValues = function (colors, myGradient) {\n var colorName;\n if (!isNullOrUndefined(colors[0].colorStop)) {\n for (var i = 0; i <= colors.length - 1; i++) {\n var color = colors[i].color;\n var newColorStop = (colors[i].colorStop).slice(0, -1);\n var stopColor = parseInt(newColorStop, 10) / 100;\n myGradient.addColorStop(stopColor, color);\n }\n colorName = myGradient.toString();\n }\n else {\n colorName = colors[0].color.toString();\n }\n this.dataUrl = this.canvasObj.toDataURL();\n return colorName;\n };\n /**\n * To set the attributes to the element\n * @param {SVGCanvasAttributes} options - Attributes to set for the element\n * @param {HTMLElement} element - The element to which the attributes need to be set\n * @return {HTMLElement}\n */\n CanvasRenderer.prototype.setElementAttributes = function (options, element) {\n var keys = Object.keys(options);\n var values = Object.keys(options).map(function (key) { return options[key]; });\n for (var i = 0; i < keys.length; i++) {\n element.setAttribute(keys[i], values[i]);\n }\n return element;\n };\n /**\n * To update the values of the canvas element attributes\n * @param {SVGCanvasAttributes} options - Specifies the colors required to create gradient\n * @return {void}\n */\n CanvasRenderer.prototype.updateCanvasAttributes = function (options) {\n this.setElementAttributes(options, this.canvasObj);\n var ctx = this.ctx;\n if (!isNullOrUndefined(this.dataUrl)) {\n var img_1 = new Image;\n img_1.onload = function () {\n ctx.drawImage(img_1, 0, 0);\n };\n img_1.src = this.dataUrl;\n }\n };\n return CanvasRenderer;\n}());\nexport { CanvasRenderer };\n","/**\n * Module loading operations\n */\nimport { createInstance, setValue, getValue, deleteObject } from './util';\nvar MODULE_SUFFIX = 'Module';\nvar ModuleLoader = /** @class */ (function () {\n function ModuleLoader(parent) {\n this.loadedModules = [];\n this.parent = parent;\n }\n ;\n /**\n * Inject required modules in component library\n * @return {void}\n * @param {ModuleDeclaration[]} requiredModules - Array of modules to be required\n * @param {Function[]} moduleList - Array of modules to be injected from sample side\n */\n ModuleLoader.prototype.inject = function (requiredModules, moduleList) {\n var reqLength = requiredModules.length;\n if (reqLength === 0) {\n this.clean();\n return;\n }\n if (this.loadedModules.length) {\n this.clearUnusedModule(requiredModules);\n }\n for (var i = 0; i < reqLength; i++) {\n var modl = requiredModules[i];\n for (var _i = 0, moduleList_1 = moduleList; _i < moduleList_1.length; _i++) {\n var module = moduleList_1[_i];\n var modName = modl.member;\n if (module.prototype.getModuleName() === modl.member && !this.isModuleLoaded(modName)) {\n var moduleObject = createInstance(module, modl.args);\n var memberName = this.getMemberName(modName);\n if (modl.isProperty) {\n setValue(memberName, module, this.parent);\n }\n else {\n setValue(memberName, moduleObject, this.parent);\n }\n var loadedModule = modl;\n loadedModule.member = memberName;\n this.loadedModules.push(loadedModule);\n }\n }\n }\n };\n /**\n * To remove the created object while destroying the control\n * @return {void}\n */\n ModuleLoader.prototype.clean = function () {\n for (var _i = 0, _a = this.loadedModules; _i < _a.length; _i++) {\n var modules = _a[_i];\n if (!modules.isProperty) {\n getValue(modules.member, this.parent).destroy();\n }\n }\n this.loadedModules = [];\n };\n /**\n * Removes all unused modules\n * @param {ModuleDeclaration[]} moduleList\n * @returns {void}\n */\n ModuleLoader.prototype.clearUnusedModule = function (moduleList) {\n var _this = this;\n var usedModules = moduleList.map(function (arg) { return _this.getMemberName(arg.member); });\n var removableModule = this.loadedModules.filter(function (module) {\n return usedModules.indexOf(module.member) === -1;\n });\n for (var _i = 0, removableModule_1 = removableModule; _i < removableModule_1.length; _i++) {\n var mod = removableModule_1[_i];\n if (!mod.isProperty) {\n getValue(mod.member, this.parent).destroy();\n }\n this.loadedModules.splice(this.loadedModules.indexOf(mod), 1);\n deleteObject(this.parent, mod.member);\n }\n };\n /**\n * To get the name of the member.\n * @param {string} name\n * @returns {string}\n */\n ModuleLoader.prototype.getMemberName = function (name) {\n return name[0].toLowerCase() + name.substring(1) + MODULE_SUFFIX;\n };\n /**\n * Returns boolean based on whether the module specified is loaded or not\n * @param {string} modName\n * @returns {boolean}\n */\n ModuleLoader.prototype.isModuleLoaded = function (modName) {\n for (var _i = 0, _a = this.loadedModules; _i < _a.length; _i++) {\n var mod = _a[_i];\n if (mod.member === this.getMemberName(modName)) {\n return true;\n }\n }\n return false;\n };\n return ModuleLoader;\n}());\nexport { ModuleLoader };\n","import { getValue, setValue, merge } from './util';\nimport { Base } from './base';\n/**\n * To detect the changes for inner properties.\n * @private\n */\nvar ChildProperty = /** @class */ (function () {\n function ChildProperty(parent, propName, defaultValue, isArray) {\n this.properties = {};\n this.changedProperties = {};\n this.childChangedProperties = {};\n this.oldProperties = {};\n // tslint:disable-next-line:no-empty\n this.finalUpdate = function () { };\n this.callChildDataBind = getValue('callChildDataBind', Base);\n this.parentObj = parent;\n this.controlParent = this.parentObj.controlParent || this.parentObj;\n this.propName = propName;\n this.setProperties(defaultValue, true);\n this.isParentArray = isArray;\n }\n /**\n * Updates the property changes\n * @param {boolean} val\n * @param {string} propName\n * @returns {void}\n */\n ChildProperty.prototype.updateChange = function (val, propName) {\n if (val === true) {\n this.parentObj.childChangedProperties[propName] = val;\n }\n else {\n delete this.parentObj.childChangedProperties[propName];\n }\n if (this.parentObj.updateChange) {\n this.parentObj.updateChange(val, this.parentObj.propName);\n }\n };\n /**\n * Updates time out duration\n */\n ChildProperty.prototype.updateTimeOut = function () {\n if (this.parentObj.updateTimeOut) {\n this.parentObj.finalUpdate();\n this.parentObj.updateTimeOut();\n }\n else {\n var changeTime_1 = setTimeout(this.parentObj.dataBind.bind(this.parentObj));\n var clearUpdate = function () {\n clearTimeout(changeTime_1);\n };\n this.finalUpdate = clearUpdate;\n }\n };\n /**\n * Clears changed properties\n */\n ChildProperty.prototype.clearChanges = function () {\n this.finalUpdate();\n this.updateChange(false, this.propName);\n this.oldProperties = {};\n this.changedProperties = {};\n };\n /**\n * Set property changes\n * @param {Object} prop\n * @param {boolean} muteOnChange\n * {void}\n */\n ChildProperty.prototype.setProperties = function (prop, muteOnChange) {\n if (muteOnChange === true) {\n merge(this, prop);\n this.updateChange(false, this.propName);\n this.clearChanges();\n }\n else {\n merge(this, prop);\n }\n };\n /**\n * Binds data\n */\n ChildProperty.prototype.dataBind = function () {\n this.callChildDataBind(this.childChangedProperties, this);\n if (this.isParentArray) {\n var curIndex = this.parentObj[this.propName].indexOf(this);\n if (Object.keys(this.changedProperties).length) {\n setValue(this.propName + '.' + curIndex, this.changedProperties, this.parentObj.changedProperties);\n setValue(this.propName + '.' + curIndex, this.oldProperties, this.parentObj.oldProperties);\n }\n }\n else {\n this.parentObj.changedProperties[this.propName] = this.changedProperties;\n this.parentObj.oldProperties[this.propName] = this.oldProperties;\n }\n this.clearChanges();\n };\n /**\n * Saves changes to newer values\n * @param {string} key\n * @param {Object} newValue\n * @param {Object} oldValue\n * @returns {void}\n */\n ChildProperty.prototype.saveChanges = function (key, newValue, oldValue) {\n if (this.controlParent.isProtectedOnChange) {\n return;\n }\n this.oldProperties[key] = oldValue;\n this.changedProperties[key] = newValue;\n this.updateChange(true, this.propName);\n this.finalUpdate();\n this.updateTimeOut();\n };\n return ChildProperty;\n}());\nexport { ChildProperty };\n","/**\n * Parser\n */\nvar defaultNumberingSystem = {\n 'latn': {\n '_digits': '0123456789',\n '_type': 'numeric'\n }\n};\nimport { isUndefined, getValue } from '../util';\nvar latnRegex = /^[0-9]*$/;\nvar defaultNumberSymbols = {\n 'decimal': '.',\n 'group': ',',\n 'percentSign': '%',\n 'plusSign': '+',\n 'minusSign': '-',\n 'infinity': '∞',\n 'nan': 'NaN',\n 'exponential': 'E'\n};\nvar latnNumberSystem = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];\n/**\n * Interface for parser base\n * @private\n */\nvar ParserBase = /** @class */ (function () {\n function ParserBase() {\n }\n /**\n * Returns the cldr object for the culture specifies\n * @param {Object} obj - Specifies the object from which culture object to be acquired.\n * @param {string} cName - Specifies the culture name.\n * @returns {Object}\n */\n ParserBase.getMainObject = function (obj, cName) {\n return getValue('main.' + cName, obj);\n };\n /**\n * Returns the numbering system object from given cldr data.\n * @param {Object} obj - Specifies the object from which number system is acquired.\n * @returns {Object}\n */\n ParserBase.getNumberingSystem = function (obj) {\n return getValue('supplemental.numberingSystems', obj) || this.numberingSystems;\n };\n /**\n * Returns the reverse of given object keys or keys specified.\n * @param {Object} prop - Specifies the object to be reversed.\n * @param {number[]} keys - Optional parameter specifies the custom keyList for reversal.\n * @returns {Object}\n */\n ParserBase.reverseObject = function (prop, keys) {\n var propKeys = keys || Object.keys(prop);\n var res = {};\n for (var _i = 0, propKeys_1 = propKeys; _i < propKeys_1.length; _i++) {\n var key = propKeys_1[_i];\n /* tslint:disable no-any */\n if (!res.hasOwnProperty(prop[key])) {\n res[prop[key]] = key;\n }\n }\n return res;\n };\n /**\n * Returns the symbol regex by skipping the escape sequence.\n * @param {string[]} props - Specifies the array values to be skipped.\n * @returns {RegExp}\n */\n ParserBase.getSymbolRegex = function (props) {\n var regexStr = props.map(function (str) {\n return str.replace(/([.*+?^=!:${}()|\\[\\]\\/\\\\])/g, '\\\\$1');\n }).join('|');\n return new RegExp(regexStr, 'g');\n };\n ParserBase.getSymbolMatch = function (prop) {\n var matchKeys = Object.keys(defaultNumberSymbols);\n var ret = {};\n for (var _i = 0, matchKeys_1 = matchKeys; _i < matchKeys_1.length; _i++) {\n var key = matchKeys_1[_i];\n ret[prop[key]] = defaultNumberSymbols[key];\n }\n return ret;\n };\n /**\n * Returns regex string for provided value\n * @param {string} val\n * @returns {string}\n */\n ParserBase.constructRegex = function (val) {\n var len = val.length;\n var ret = '';\n for (var i = 0; i < len; i++) {\n if (i !== len - 1) {\n ret += val[i] + '|';\n }\n else {\n ret += val[i];\n }\n }\n return ret;\n };\n /**\n * Returns the replaced value of matching regex and obj mapper.\n * @param {string} value - Specifies the values to be replaced.\n * @param {RegExp} regex - Specifies the regex to search.\n * @param {Object} obj - Specifies the object matcher to be replace value parts.\n * @returns {string}\n */\n ParserBase.convertValueParts = function (value, regex, obj) {\n return value.replace(regex, function (str) {\n return obj[str];\n });\n };\n /**\n * Returns default numbering system object for formatting from cldr data\n * @param {Object} obj\n * @returns {NumericObject}\n */\n ParserBase.getDefaultNumberingSystem = function (obj) {\n var ret = {};\n ret.obj = getValue('numbers', obj);\n ret.nSystem = getValue('defaultNumberingSystem', ret.obj);\n return ret;\n };\n /**\n * Returns the replaced value of matching regex and obj mapper.\n */\n ParserBase.getCurrentNumericOptions = function (curObj, numberSystem, needSymbols) {\n var ret = {};\n var cur = this.getDefaultNumberingSystem(curObj);\n if (!isUndefined(cur.nSystem)) {\n var digits = getValue(cur.nSystem + '._digits', numberSystem);\n if (!isUndefined(digits)) {\n ret.numericPair = this.reverseObject(digits, latnNumberSystem);\n ret.numberParseRegex = new RegExp(this.constructRegex(digits), 'g');\n ret.numericRegex = '[' + digits[0] + '-' + digits[9] + ']';\n if (needSymbols) {\n ret.numericRegex = digits[0] + '-' + digits[9];\n ret.symbolNumberSystem = getValue('symbols-numberSystem-' + cur.nSystem, cur.obj);\n ret.symbolMatch = this.getSymbolMatch(ret.symbolNumberSystem);\n ret.numberSystem = cur.nSystem;\n }\n }\n }\n return ret;\n };\n /**\n * Returns number mapper object for the provided cldr data\n * @param {Object} curObj\n * @param {Object} numberSystem\n * @param {boolean} isNumber\n * @returns {NumberMapper}\n */\n ParserBase.getNumberMapper = function (curObj, numberSystem, isNumber) {\n var ret = { mapper: {} };\n var cur = this.getDefaultNumberingSystem(curObj);\n if (!isUndefined(cur.nSystem)) {\n ret.numberSystem = cur.nSystem;\n ret.numberSymbols = getValue('symbols-numberSystem-' + cur.nSystem, cur.obj);\n ret.timeSeparator = getValue('timeSeparator', ret.numberSymbols);\n var digits = getValue(cur.nSystem + '._digits', numberSystem);\n if (!isUndefined(digits)) {\n for (var _i = 0, latnNumberSystem_1 = latnNumberSystem; _i < latnNumberSystem_1.length; _i++) {\n var i = latnNumberSystem_1[_i];\n ret.mapper[i] = digits[i];\n }\n }\n }\n return ret;\n };\n ParserBase.nPair = 'numericPair';\n ParserBase.nRegex = 'numericRegex';\n ParserBase.numberingSystems = defaultNumberingSystem;\n return ParserBase;\n}());\nexport { ParserBase };\n","import { isUndefined, throwError, isNullOrUndefined, extend } from '../util';\nimport { defaultCurrencyCode } from '../internationalization';\nimport { IntlBase as base } from './intl-base';\nimport { ParserBase as parser } from './parser-base';\nvar errorText = {\n 'ms': 'minimumSignificantDigits',\n 'ls': 'maximumSignificantDigits',\n 'mf': 'minimumFractionDigits',\n 'lf': 'maximumFractionDigits',\n};\nvar integerError = 'minimumIntegerDigits';\nvar percentSign = 'percentSign';\nvar minusSign = 'minusSign';\nvar spaceRegex = /\\s/;\nvar mapper = ['infinity', 'nan', 'group', 'decimal', 'exponential'];\nvar infinity = 'infinity';\nvar nan = 'nan';\n/**\n * Module for number formatting.\n * @private\n */\nvar NumberFormat = /** @class */ (function () {\n function NumberFormat() {\n }\n /**\n * Returns the formatter function for given skeleton.\n * @param {string} culture - Specifies the culture name to be which formatting.\n * @param {NumberFormatOptions} option - Specific the format in which number will format.\n * @param {Object} object- Specifies the global cldr data collection.\n * @return Function.\n */\n NumberFormat.numberFormatter = function (culture, option, cldr) {\n var _this = this;\n var fOptions = extend({}, option);\n var cOptions = {};\n var dOptions = {};\n var symbolPattern;\n var dependable = base.getDependables(cldr, culture, true);\n dOptions.numberMapper = parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr), true);\n dOptions.currencySymbol = base.getCurrencySymbol(dependable.numericObject, fOptions.currency || defaultCurrencyCode);\n /* tslint:disable no-any */\n dOptions.percentSymbol = dOptions.numberMapper.numberSymbols[percentSign];\n dOptions.minusSymbol = dOptions.numberMapper.numberSymbols[minusSign];\n var symbols = dOptions.numberMapper.numberSymbols;\n if ((option.format) && !(base.formatRegex.test(option.format))) {\n cOptions = base.customFormat(option.format, dOptions, dependable.numericObject);\n }\n else {\n extend(fOptions, base.getProperNumericSkeleton(option.format || 'N'));\n fOptions.isCurrency = fOptions.type === 'currency';\n fOptions.isPercent = fOptions.type === 'percent';\n symbolPattern = base.getSymbolPattern(fOptions.type, dOptions.numberMapper.numberSystem, dependable.numericObject, fOptions.isAccount);\n fOptions.groupOne = this.checkValueRange(fOptions.maximumSignificantDigits, fOptions.minimumSignificantDigits, true);\n this.checkValueRange(fOptions.maximumFractionDigits, fOptions.minimumFractionDigits, false, true);\n if (!isUndefined(fOptions.fractionDigits)) {\n fOptions.minimumFractionDigits = fOptions.maximumFractionDigits = fOptions.fractionDigits;\n }\n if (isUndefined(fOptions.useGrouping)) {\n fOptions.useGrouping = true;\n }\n if (fOptions.isCurrency) {\n symbolPattern = symbolPattern.replace(/\\u00A4/g, base.defaultCurrency);\n }\n var split = symbolPattern.split(';');\n cOptions.nData = base.getFormatData(split[1] || '-' + split[0], true, dOptions.currencySymbol);\n cOptions.pData = base.getFormatData(split[0], false, dOptions.currencySymbol);\n if (fOptions.useGrouping) {\n fOptions.groupSeparator = symbols[mapper[2]];\n fOptions.groupData = this.getGroupingDetails(split[0]);\n }\n var minFrac = isUndefined(fOptions.minimumFractionDigits);\n if (minFrac) {\n fOptions.minimumFractionDigits = cOptions.nData.minimumFraction;\n }\n if (isUndefined(fOptions.maximumFractionDigits)) {\n var mval = cOptions.nData.maximumFraction;\n fOptions.maximumFractionDigits = isUndefined(mval) && fOptions.isPercent ? 0 : mval;\n }\n var mfrac = fOptions.minimumFractionDigits;\n var lfrac = fOptions.maximumFractionDigits;\n if (!isUndefined(mfrac) && !isUndefined(lfrac)) {\n if (mfrac > lfrac) {\n fOptions.maximumFractionDigits = mfrac;\n }\n }\n }\n extend(cOptions.nData, fOptions);\n extend(cOptions.pData, fOptions);\n return function (value) {\n if (isNaN(value)) {\n return symbols[mapper[1]];\n }\n else if (!isFinite(value)) {\n return symbols[mapper[0]];\n }\n return _this.intNumberFormatter(value, cOptions, dOptions);\n };\n };\n /**\n * Returns grouping details for the pattern provided\n * @param {string} pattern\n * @returns {GroupDetails}\n */\n NumberFormat.getGroupingDetails = function (pattern) {\n var ret = {};\n var match = pattern.match(base.negativeDataRegex);\n if (match && match[4]) {\n var pattern_1 = match[4];\n var p = pattern_1.lastIndexOf(',');\n if (p !== -1) {\n var temp = pattern_1.split('.')[0];\n ret.primary = (temp.length - p) - 1;\n var s = pattern_1.lastIndexOf(',', p - 1);\n if (s !== -1) {\n ret.secondary = p - 1 - s;\n }\n }\n }\n return ret;\n };\n /**\n * Returns if the provided integer range is valid.\n * @param {number} val1\n * @param {number} val2\n * @param {boolean} checkbothExist\n * @param {boolean} isFraction\n * @returns {boolean}\n */\n NumberFormat.checkValueRange = function (val1, val2, checkbothExist, isFraction) {\n var decide = isFraction ? 'f' : 's';\n var dint = 0;\n var str1 = errorText['l' + decide];\n var str2 = errorText['m' + decide];\n if (!isUndefined(val1)) {\n this.checkRange(val1, str1, isFraction);\n dint++;\n }\n if (!isUndefined(val2)) {\n this.checkRange(val2, str2, isFraction);\n dint++;\n }\n if (dint === 2) {\n if (val1 < val2) {\n throwError(str2 + 'specified must be less than the' + str1);\n }\n else {\n return true;\n }\n }\n else if (checkbothExist && dint === 1) {\n throwError('Both' + str2 + 'and' + str2 + 'must be present');\n }\n return false;\n };\n /**\n * Check if the provided fraction range is valid\n * @param {number} val\n * @param {string} text\n * @param {boolean} isFraction\n * @returns {void}\n */\n NumberFormat.checkRange = function (val, text, isFraction) {\n var range = isFraction ? [0, 20] : [1, 21];\n if (val < range[0] || val > range[1]) {\n throwError(text + 'value must be within the range' + range[0] + 'to' + range[1]);\n }\n };\n /**\n * Returns formatted numeric string for provided formatting options\n * @param {number} value\n * @param {base.GenericFormatOptions} fOptions\n * @param {CommonOptions} dOptions\n * @returns {string}\n */\n NumberFormat.intNumberFormatter = function (value, fOptions, dOptions) {\n var curData;\n if (isUndefined(fOptions.nData.type)) {\n return undefined;\n }\n else {\n if (value < 0) {\n value = value * -1;\n curData = fOptions.nData;\n }\n else if (value === 0) {\n curData = fOptions.zeroData || fOptions.pData;\n }\n else {\n curData = fOptions.pData;\n }\n var fValue = '';\n if (curData.isPercent) {\n value = value * 100;\n }\n if (curData.groupOne) {\n fValue = this.processSignificantDigits(value, curData.minimumSignificantDigits, curData.maximumSignificantDigits);\n }\n else {\n fValue = this.processFraction(value, curData.minimumFractionDigits, curData.maximumFractionDigits);\n if (curData.minimumIntegerDigits) {\n fValue = this.processMinimumIntegers(fValue, curData.minimumIntegerDigits);\n }\n }\n if (curData.type === 'scientific') {\n fValue = value.toExponential(curData.maximumFractionDigits);\n fValue = fValue.replace('e', dOptions.numberMapper.numberSymbols[mapper[4]]);\n }\n fValue = fValue.replace('.', dOptions.numberMapper.numberSymbols[mapper[3]]);\n if (curData.useGrouping) {\n fValue = this.groupNumbers(fValue, curData.groupData.primary, curData.groupSeparator || ',', dOptions.numberMapper.numberSymbols[mapper[3]] || '.', curData.groupData.secondary);\n }\n fValue = parser.convertValueParts(fValue, base.latnParseRegex, dOptions.numberMapper.mapper);\n if (curData.nlead === 'N/A') {\n return curData.nlead;\n }\n else {\n return curData.nlead + fValue + curData.nend;\n }\n }\n };\n /**\n * Returns significant digits processed numeric string\n * @param {number} value\n * @param {number} min\n * @param {number} max\n * @returns {string}\n */\n NumberFormat.processSignificantDigits = function (value, min, max) {\n var temp = value + '';\n var tn;\n var length = temp.length;\n if (length < min) {\n return value.toPrecision(min);\n }\n else {\n temp = value.toPrecision(max);\n tn = +temp;\n return tn + '';\n }\n };\n /**\n * Returns grouped numeric string\n * @param {string} val\n * @param {number} level1\n * @param {string} sep\n * @param {string} decimalSymbol\n * @param {number} level2\n * @returns {string}\n */\n NumberFormat.groupNumbers = function (val, level1, sep, decimalSymbol, level2) {\n var flag = !isNullOrUndefined(level2) && level2 !== 0;\n var split = val.split(decimalSymbol);\n var prefix = split[0];\n var length = prefix.length;\n var str = '';\n while (length > level1) {\n str = prefix.slice(length - level1, length) + (str.length ?\n (sep + str) : '');\n length -= level1;\n if (flag) {\n level1 = level2;\n flag = false;\n }\n }\n split[0] = prefix.slice(0, length) + (str.length ? sep : '') + str;\n return split.join(decimalSymbol);\n };\n /**\n * Returns fraction processed numeric string\n * @param {number} value\n * @param {number} min\n * @param {number} max\n * @returns {string}\n */\n NumberFormat.processFraction = function (value, min, max) {\n var temp = (value + '').split('.')[1];\n var length = temp ? temp.length : 0;\n if (min && length < min) {\n var ret = '';\n if (length === 0) {\n ret = value.toFixed(min);\n }\n else {\n ret += value;\n for (var j = 0; j < min - length; j++) {\n ret += '0';\n }\n return ret;\n }\n return value.toFixed(min);\n }\n else if (!isNullOrUndefined(max) && (length > max || max === 0)) {\n return value.toFixed(max);\n }\n return value + '';\n };\n /**\n * Returns integer processed numeric string\n * @param {string} value\n * @param {number} min\n * @returns {string}\n */\n NumberFormat.processMinimumIntegers = function (value, min) {\n var temp = value.split('.');\n var lead = temp[0];\n var len = lead.length;\n if (len < min) {\n for (var i = 0; i < min - len; i++) {\n lead = '0' + lead;\n }\n temp[0] = lead;\n }\n return temp.join('.');\n };\n return NumberFormat;\n}());\nexport { NumberFormat };\n","import { ParserBase as parser } from './parser-base';\nimport { IntlBase as base } from './intl-base';\nimport { isUndefined, throwError, getValue } from '../util';\nvar abbreviateRegexGlobal = /\\/MMMMM|MMMM|MMM|a|LLL|EEEEE|EEEE|E|K|ccc|G+|z+/gi;\nvar standalone = 'stand-alone';\nvar weekdayKey = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'];\nexport var basicPatterns = ['short', 'medium', 'long', 'full'];\nvar timeSetter = {\n m: 'getMinutes',\n h: 'getHours',\n H: 'getHours',\n s: 'getSeconds',\n d: 'getDate',\n};\nexport var datePartMatcher = {\n 'M': 'month',\n 'd': 'day',\n 'E': 'weekday',\n 'c': 'weekday',\n 'y': 'year',\n 'm': 'minute',\n 'h': 'hour',\n 'H': 'hour',\n 's': 'second',\n 'L': 'month',\n 'a': 'designator',\n 'z': 'timeZone',\n 'Z': 'timeZone',\n 'G': 'era'\n};\nvar timeSeparator = 'timeSeparator';\n/**\n * Date Format is a framework provides support for date formatting.\n * @private\n */\nvar DateFormat = /** @class */ (function () {\n function DateFormat() {\n }\n /**\n * Returns the formatter function for given skeleton.\n * @param {string} - Specifies the culture name to be which formatting.\n * @param {DateFormatOptions} - Specific the format in which date will format.\n * @param {cldr} - Specifies the global cldr data collection.\n * @return Function.\n */\n DateFormat.dateFormat = function (culture, option, cldr) {\n var _this = this;\n var dependable = base.getDependables(cldr, culture);\n var formatOptions = {};\n var resPattern = option.format || base.getResultantPattern(option.skeleton, dependable.dateObject, option.type);\n formatOptions.dateSeperator = base.getDateSeparator(dependable.dateObject);\n if (isUndefined(resPattern)) {\n throwError('Format options or type given must be invalid');\n }\n else {\n formatOptions.pattern = resPattern;\n formatOptions.numMapper = parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr));\n var patternMatch = resPattern.match(abbreviateRegexGlobal) || [];\n for (var _i = 0, patternMatch_1 = patternMatch; _i < patternMatch_1.length; _i++) {\n var str = patternMatch_1[_i];\n var len = str.length;\n var char = str[0];\n if (char === 'K') {\n char = 'h';\n }\n /* tslint:disable no-any */\n var charKey = datePartMatcher[char];\n switch (char) {\n case 'E':\n case 'c':\n formatOptions.weekday = dependable.dateObject[base.days][standalone][base.monthIndex[len]];\n break;\n case 'M':\n case 'L':\n formatOptions.month = dependable.dateObject[base.month][standalone][base.monthIndex[len]];\n break;\n case 'a':\n formatOptions.designator = getValue('dayPeriods.format.wide', dependable.dateObject);\n break;\n case 'G':\n var eText = (len <= 3) ? 'eraAbbr' : (len === 4) ? 'eraNames' : 'eraNarrow';\n formatOptions.era = getValue('eras.' + eText, dependable.dateObject);\n break;\n case 'z':\n formatOptions.timeZone = getValue('dates.timeZoneNames', dependable.parserObject);\n break;\n }\n }\n }\n return function (value) {\n if (isNaN(value.getDate())) {\n return null;\n }\n return _this.intDateFormatter(value, formatOptions);\n };\n };\n /**\n * Returns formatted date string based on options passed.\n * @param {Date} value\n * @param {FormatOptions} options\n */\n DateFormat.intDateFormatter = function (value, options) {\n var pattern = options.pattern;\n var ret = '';\n var matches = pattern.match(base.dateParseRegex);\n for (var _i = 0, matches_1 = matches; _i < matches_1.length; _i++) {\n var match = matches_1[_i];\n var length_1 = match.length;\n var char = match[0];\n if (char === 'K') {\n char = 'h';\n }\n var curval = void 0;\n var isNumber = void 0;\n var processNumber = void 0;\n var curstr = '';\n switch (char) {\n case 'M':\n case 'L':\n curval = value.getMonth() + 1;\n if (length_1 > 2) {\n ret += options.month[curval];\n }\n else {\n isNumber = true;\n }\n break;\n case 'E':\n case 'c':\n ret += options.weekday[weekdayKey[value.getDay()]];\n break;\n case 'H':\n case 'h':\n case 'm':\n case 's':\n case 'd':\n isNumber = true;\n curval = value[timeSetter[char]]();\n if (char === 'h') {\n curval = curval % 12 || 12;\n }\n break;\n case 'y':\n processNumber = true;\n curstr += value.getFullYear();\n if (length_1 === 2) {\n curstr = curstr.substr(curstr.length - 2);\n }\n break;\n case 'a':\n var desig = value.getHours() < 12 ? 'am' : 'pm';\n ret += options.designator[desig];\n break;\n case 'G':\n var dec = value.getFullYear() < 0 ? 0 : 1;\n ret += options.era[dec];\n break;\n case '\\'':\n ret += (match === '\\'\\'') ? '\\'' : match.replace(/\\'/g, '');\n break;\n case 'z':\n var timezone = value.getTimezoneOffset();\n var pattern_1 = (length_1 < 4) ? '+H;-H' : options.timeZone.hourFormat;\n pattern_1 = pattern_1.replace(/:/g, options.numMapper.timeSeparator);\n if (timezone === 0) {\n ret += options.timeZone.gmtZeroFormat;\n }\n else {\n processNumber = true;\n curstr = this.getTimeZoneValue(timezone, pattern_1);\n }\n curstr = options.timeZone.gmtFormat.replace(/\\{0\\}/, curstr);\n break;\n case ':':\n ret += options.numMapper.numberSymbols[timeSeparator];\n /* tslint:enable no-any */\n break;\n case '/':\n ret += options.dateSeperator;\n break;\n default:\n ret += match;\n }\n if (isNumber) {\n processNumber = true;\n curstr = this.checkTwodigitNumber(curval, length_1);\n }\n if (processNumber) {\n ret += parser.convertValueParts(curstr, base.latnParseRegex, options.numMapper.mapper);\n }\n }\n return ret;\n };\n /**\n * Returns two digit numbers for given value and length\n */\n DateFormat.checkTwodigitNumber = function (val, len) {\n var ret = val + '';\n if (len === 2 && ret.length !== 2) {\n return '0' + ret;\n }\n return ret;\n };\n /**\n * Returns the value of the Time Zone.\n * @param {number} tVal\n * @param {string} pattern\n * @private\n */\n DateFormat.getTimeZoneValue = function (tVal, pattern) {\n var _this = this;\n var splt = pattern.split(';');\n var curPattern = splt[tVal > 0 ? 1 : 0];\n var no = Math.abs(tVal);\n return curPattern = curPattern.replace(/HH?|mm/g, function (str) {\n var len = str.length;\n var ishour = str.indexOf('H') !== -1;\n return _this.checkTwodigitNumber(Math.floor(ishour ? (no / 60) : (no % 60)), len);\n });\n };\n return DateFormat;\n}());\nexport { DateFormat };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { isUndefined, getValue, isNullOrUndefined, setValue, uniqueID } from './util';\nimport { ModuleLoader } from './module-loader';\nimport { Base } from './base';\nimport { Observer } from './observer';\nimport { ChildProperty } from './child-property';\nimport { Property, NotifyPropertyChanges } from './notify-property-change';\nimport { onIntlChange, rightToLeft, defaultCulture } from './internationalization';\nvar componentCount = 0;\nvar lastPageID;\nvar lastHistoryLen = 0;\n/**\n * Base class for all Essential JavaScript components\n */\nvar Component = /** @class */ (function (_super) {\n __extends(Component, _super);\n /**\n * Initialize the constructor for component base\n */\n function Component(options, selector) {\n var _this = _super.call(this, options, selector) || this;\n _this.randomId = uniqueID();\n _this.needsID = false;\n if (isNullOrUndefined(_this.enableRtl)) {\n _this.setProperties({ 'enableRtl': rightToLeft }, true);\n }\n if (isNullOrUndefined(_this.locale)) {\n _this.setProperties({ 'locale': defaultCulture }, true);\n }\n _this.moduleLoader = new ModuleLoader(_this);\n _this.localObserver = new Observer(_this);\n // tslint:disable-next-line:no-function-constructor-with-string-args\n _this.detectFunction = new Function('args', 'var prop = Object.keys(args); if(prop.length){this[prop[0]] = args[prop[0]];}');\n onIntlChange.on('notifyExternalChange', _this.detectFunction, _this, _this.randomId);\n if (!isUndefined(selector)) {\n _this.appendTo();\n }\n return _this;\n }\n Component.prototype.requiredModules = function () {\n return [];\n };\n ;\n /**\n * Destroys the sub modules while destroying the widget\n */\n Component.prototype.destroy = function () {\n if (this.isDestroyed) {\n return;\n }\n if (this.enablePersistence) {\n this.setPersistData();\n }\n this.localObserver.destroy();\n if (this.refreshing) {\n return;\n }\n this.trigger('destroyed', { cancel: false });\n _super.prototype.destroy.call(this);\n this.moduleLoader.clean();\n onIntlChange.off('notifyExternalChange', this.detectFunction, this.randomId);\n };\n /**\n * Applies all the pending property changes and render the component again.\n */\n Component.prototype.refresh = function () {\n this.refreshing = true;\n this.moduleLoader.clean();\n this.destroy();\n this.clearChanges();\n this.localObserver = new Observer(this);\n this.preRender();\n this.injectModules();\n this.render();\n this.refreshing = false;\n };\n /**\n * Appends the control within the given HTML element\n * @param {string | HTMLElement} selector - Target element where control needs to be appended\n */\n Component.prototype.appendTo = function (selector) {\n if (!isNullOrUndefined(selector) && typeof (selector) === 'string') {\n this.element = document.querySelector(selector);\n }\n else if (!isNullOrUndefined(selector)) {\n this.element = selector;\n }\n if (!isNullOrUndefined(this.element)) {\n this.isProtectedOnChange = false;\n if (this.needsID && !this.element.id) {\n this.element.id = this.getUniqueID(this.getModuleName());\n }\n if (this.enablePersistence) {\n this.mergePersistData();\n window.addEventListener('unload', this.setPersistData.bind(this));\n }\n var inst = getValue('ej2_instances', this.element);\n if (!inst || inst.indexOf(this) === -1) {\n _super.prototype.addInstance.call(this);\n }\n this.preRender();\n this.injectModules();\n this.render();\n this.trigger('created');\n }\n };\n /**\n * When invoked, applies the pending property changes immediately to the component.\n */\n Component.prototype.dataBind = function () {\n this.injectModules();\n _super.prototype.dataBind.call(this);\n };\n ;\n /**\n * Attach one or more event handler to the current component context.\n * It is used for internal handling event internally within the component only.\n * @param {BoundOptions[]| string} event - It is optional type either to Set the collection of event list or the eventName.\n * @param {Function} handler - optional parameter Specifies the handler to run when the event occurs\n * @param {Object} context - optional parameter Specifies the context to be bind in the handler.\n * @return {void}\n * @private\n */\n Component.prototype.on = function (event, handler, context) {\n if (typeof event === 'string') {\n this.localObserver.on(event, handler, context);\n }\n else {\n for (var _i = 0, event_1 = event; _i < event_1.length; _i++) {\n var arg = event_1[_i];\n this.localObserver.on(arg.event, arg.handler, arg.context);\n }\n }\n };\n /**\n * To remove one or more event handler that has been attached with the on() method.\n * @param {BoundOptions[]| string} event - It is optional type either to Set the collection of event list or the eventName.\n * @param {Function} handler - optional parameter Specifies the function to run when the event occurs\n * @return {void}\n * @private\n */\n Component.prototype.off = function (event, handler) {\n if (typeof event === 'string') {\n this.localObserver.off(event, handler);\n }\n else {\n for (var _i = 0, event_2 = event; _i < event_2.length; _i++) {\n var arg = event_2[_i];\n this.localObserver.off(arg.event, arg.handler);\n }\n }\n };\n /**\n * To notify the handlers in the specified event.\n * @param {string} property - Specifies the event to be notify.\n * @param {Object} argument - Additional parameters to pass while calling the handler.\n * @return {void}\n * @private\n */\n Component.prototype.notify = function (property, argument) {\n if (this.isDestroyed !== true) {\n this.localObserver.notify(property, argument);\n }\n };\n /**\n * Get injected modules\n * @private\n */\n Component.prototype.getInjectedModules = function () {\n return this.injectedModules;\n };\n ;\n /**\n * Dynamically injects the required modules to the component.\n */\n Component.Inject = function () {\n var moduleList = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n moduleList[_i] = arguments[_i];\n }\n if (!this.prototype.injectedModules) {\n this.prototype.injectedModules = [];\n }\n for (var i = 0; i < moduleList.length; i++) {\n if (this.prototype.injectedModules.indexOf(moduleList[i]) === -1) {\n this.prototype.injectedModules.push(moduleList[i]);\n }\n }\n };\n Component.prototype.injectModules = function () {\n if (this.injectedModules && this.injectedModules.length) {\n this.moduleLoader.inject(this.requiredModules(), this.injectedModules);\n }\n };\n Component.prototype.mergePersistData = function () {\n var data = window.localStorage.getItem(this.getModuleName() + this.element.id);\n if (!(isNullOrUndefined(data) || (data === ''))) {\n this.setProperties(JSON.parse(data), true);\n }\n };\n Component.prototype.setPersistData = function () {\n if (!this.isDestroyed) {\n window.localStorage.setItem(this.getModuleName() + this.element.id, this.getPersistData());\n }\n };\n Component.prototype.clearTemplate = function (templateName) {\n //No Code\n };\n Component.prototype.getUniqueID = function (definedName) {\n if (this.isHistoryChanged()) {\n componentCount = 0;\n }\n lastPageID = this.pageID(location.href);\n lastHistoryLen = history.length;\n return definedName + '_' + lastPageID + '_' + componentCount++;\n };\n Component.prototype.pageID = function (url) {\n var hash = 0;\n if (url.length === 0) {\n return hash;\n }\n for (var i = 0; i < url.length; i++) {\n var char = url.charCodeAt(i);\n hash = ((hash << 5) - hash) + char;\n hash = hash & hash; // Convert to 32bit integer\n }\n return Math.abs(hash);\n };\n Component.prototype.isHistoryChanged = function () {\n return lastPageID !== this.pageID(location.href) || lastHistoryLen !== history.length;\n };\n Component.prototype.addOnPersist = function (options) {\n var _this = this;\n var persistObj = {};\n for (var _i = 0, options_1 = options; _i < options_1.length; _i++) {\n var key = options_1[_i];\n var objValue = void 0;\n objValue = getValue(key, this);\n if (!isUndefined(objValue)) {\n setValue(key, this.getActualProperties(objValue), persistObj);\n }\n }\n return JSON.stringify(persistObj, function (key, value) {\n return _this.getActualProperties(value);\n });\n };\n Component.prototype.getActualProperties = function (obj) {\n if (obj instanceof ChildProperty) {\n return getValue('properties', obj);\n }\n else {\n return obj;\n }\n };\n Component.prototype.ignoreOnPersist = function (options) {\n return JSON.stringify(this.iterateJsonProperties(this.properties, options));\n };\n Component.prototype.iterateJsonProperties = function (obj, ignoreList) {\n var newObj = {};\n var _loop_1 = function (key) {\n if (ignoreList.indexOf(key) === -1) {\n // tslint:disable-next-line:no-any\n var value = obj[key];\n if (typeof value === 'object' && !(value instanceof Array)) {\n var newList = ignoreList.filter(function (str) {\n return new RegExp(key + '.').test(str);\n }).map(function (str) {\n return str.replace(key + '.', '');\n });\n newObj[key] = this_1.iterateJsonProperties(this_1.getActualProperties(value), newList);\n }\n else {\n newObj[key] = value;\n }\n }\n };\n var this_1 = this;\n for (var _i = 0, _a = Object.keys(obj); _i < _a.length; _i++) {\n var key = _a[_i];\n _loop_1(key);\n }\n return newObj;\n };\n __decorate([\n Property(false)\n ], Component.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property()\n ], Component.prototype, \"enableRtl\", void 0);\n __decorate([\n Property()\n ], Component.prototype, \"locale\", void 0);\n Component = __decorate([\n NotifyPropertyChanges\n ], Component);\n return Component;\n}(Base));\nexport { Component };\n//Function handling for page navigation detection \n/* istanbul ignore next */\n(function () {\n if (typeof window !== 'undefined') {\n window.addEventListener('popstate', \n /* istanbul ignore next */\n function () {\n componentCount = 0;\n });\n }\n})();\n","import { IntlBase as base } from './intl-base';\nimport { ParserBase as parser } from './parser-base';\nimport { isUndefined, throwError, getValue, isNullOrUndefined } from '../util';\nimport { datePartMatcher } from './date-formatter';\nvar number = 'numbers';\nvar defNoSystem = 'defaultNumberingSystem';\nvar noSystem = 'numberingSystem';\nvar standalone = 'stand-alone';\nvar curWeekDay = 'curWeekDay';\nvar latnRegex = /^[0-9]*$/;\nvar abbreviateRegex = /\\/MMMMM|MMMM|MMM|a|LLL|EEEEE|EEEE|E|ccc/;\nvar timeSetter = {\n minute: 'setMinutes',\n hour: 'setHours',\n second: 'setSeconds',\n day: 'setDate',\n month: 'setMonth'\n};\nvar month = 'months';\n/* tslint:disable no-any */\n/**\n * Date Parser.\n * @private\n */\nvar DateParser = /** @class */ (function () {\n function DateParser() {\n }\n /**\n * Returns the parser function for given skeleton.\n * @param {string} - Specifies the culture name to be which formatting.\n * @param {DateFormatOptions} - Specific the format in which string date will be parsed.\n * @param {cldr} - Specifies the global cldr data collection.\n * @return Function.\n */\n // tslint:disable-next-line:max-func-body-length\n DateParser.dateParser = function (culture, option, cldr) {\n var _this = this;\n var dependable = base.getDependables(cldr, culture);\n var numOptions = parser.getCurrentNumericOptions(dependable.parserObject, parser.getNumberingSystem(cldr));\n var parseOptions = {};\n var resPattern = option.format || base.getResultantPattern(option.skeleton, dependable.dateObject, option.type);\n var regexString = '';\n var hourOnly;\n if (isUndefined(resPattern)) {\n throwError('Format options or type given must be invalid');\n }\n else {\n parseOptions = { pattern: resPattern, evalposition: {} };\n var patternMatch = resPattern.match(base.dateParseRegex) || [];\n var length_1 = patternMatch.length;\n var gmtCorrection = 0;\n var zCorrectTemp = 0;\n var isgmtTraversed = false;\n var nRegx = numOptions.numericRegex;\n for (var i = 0; i < length_1; i++) {\n var str = patternMatch[i];\n var len = str.length;\n var char = (str[0] === 'K') ? 'h' : str[0];\n var isNumber = void 0;\n var canUpdate = void 0;\n var charKey = datePartMatcher[char];\n var optional = (len === 2) ? '' : '?';\n if (isgmtTraversed) {\n gmtCorrection = zCorrectTemp;\n isgmtTraversed = false;\n }\n switch (char) {\n case 'E':\n case 'c':\n // tslint:disable-next-line\n var weekObject = parser.reverseObject(dependable.dateObject[base.days][standalone][base.monthIndex[len]]);\n regexString += '(' + Object.keys(weekObject).join('|') + ')';\n break;\n case 'M':\n case 'L':\n case 'd':\n case 'm':\n case 's':\n case 'h':\n case 'H':\n canUpdate = true;\n if ((char === 'M' || char === 'L') && len > 2) {\n // tslint:disable-next-line\n parseOptions[charKey] = parser.reverseObject(dependable.dateObject[month][standalone][base.monthIndex[len]]);\n /* tslint:disable no-any */\n regexString += '(' + Object.keys(parseOptions[charKey]).join('|') + ')';\n }\n else {\n isNumber = true;\n regexString += '(' + nRegx + nRegx + optional + ')';\n }\n if (char === 'h') {\n parseOptions.hour12 = true;\n }\n break;\n case 'y':\n canUpdate = isNumber = true;\n if (len === 2) {\n regexString += '(' + nRegx + nRegx + ')';\n }\n else {\n regexString += '(' + nRegx + '{' + len + ',})';\n }\n break;\n case 'a':\n canUpdate = true;\n parseOptions[charKey] = parser.reverseObject(getValue('dayPeriods.format.wide', dependable.dateObject));\n regexString += '(' + Object.keys(parseOptions[charKey]).join('|') + ')';\n break;\n case 'G':\n canUpdate = true;\n var eText = (len <= 3) ? 'eraAbbr' : (len === 4) ? 'eraNames' : 'eraNarrow';\n parseOptions[charKey] = parser.reverseObject(getValue('eras.' + eText, dependable.dateObject));\n regexString += '(' + Object.keys(parseOptions[charKey]).join('|') + '?)';\n break;\n case 'z':\n var tval = new Date().getTimezoneOffset();\n canUpdate = (tval !== 0);\n parseOptions[charKey] = getValue('dates.timeZoneNames', dependable.parserObject);\n var tzone = parseOptions[charKey];\n hourOnly = (len < 4);\n var hpattern = hourOnly ? '+H;-H' : tzone.hourFormat;\n regexString += '(' + this.parseTimeZoneRegx(hpattern, tzone, nRegx) + ')?';\n isgmtTraversed = true;\n zCorrectTemp = hourOnly ? 6 : 12;\n break;\n case '\\'':\n var iString = str.replace(/\\'/g, '');\n regexString += '(' + iString + ')?';\n break;\n default:\n regexString += '([\\\\D])';\n break;\n }\n if (canUpdate) {\n parseOptions.evalposition[charKey] = { isNumber: isNumber, pos: i + 1 + gmtCorrection, hourOnly: hourOnly };\n }\n if (i === length_1 - 1 && !isNullOrUndefined(regexString)) {\n parseOptions.parserRegex = new RegExp('^' + regexString + '$');\n }\n }\n }\n return function (value) {\n var parsedDateParts = _this.internalDateParse(value, parseOptions, numOptions);\n if (isNullOrUndefined(parsedDateParts) || !Object.keys(parsedDateParts).length) {\n return null;\n }\n return _this.getDateObject(parsedDateParts);\n };\n };\n /**\n * Returns date object for provided date options\n * @param {DateParts} options\n * @param {Date} value\n * @returns {Date}\n */\n DateParser.getDateObject = function (options, value) {\n var res = value || new Date();\n res.setMilliseconds(0);\n var tKeys = ['hour', 'minute', 'second', 'month', 'day'];\n var y = options.year;\n var desig = options.designator;\n var tzone = options.timeZone;\n if (!isUndefined(y)) {\n var len = (y + '').length;\n if (len <= 2) {\n var century = Math.floor(res.getFullYear() / 100) * 100;\n y += century;\n }\n res.setFullYear(y);\n }\n for (var _i = 0, tKeys_1 = tKeys; _i < tKeys_1.length; _i++) {\n var key = tKeys_1[_i];\n var tValue = options[key];\n if (!isUndefined(tValue)) {\n if (key === 'month') {\n tValue -= 1;\n if (tValue < 0 || tValue > 11) {\n return new Date('invalid');\n }\n var pDate = res.getDate();\n res.setDate(1);\n res[timeSetter[key]](tValue);\n var lDate = new Date(res.getFullYear(), tValue + 1, 0).getDate();\n res.setDate(pDate < lDate ? pDate : lDate);\n }\n else {\n if (key === 'day') {\n var lastDay = new Date(res.getFullYear(), res.getMonth() + 1, 0).getDate();\n if ((tValue < 1 || tValue > lastDay)) {\n return null;\n }\n }\n res[timeSetter[key]](tValue);\n }\n }\n }\n if (!isUndefined(desig)) {\n var hour = res.getHours();\n if (desig === 'pm') {\n res.setHours(hour + (hour === 12 ? 0 : 12));\n }\n else if (hour === 12) {\n res.setHours(0);\n }\n }\n if (!isUndefined(tzone)) {\n var tzValue = tzone - res.getTimezoneOffset();\n if (tzValue !== 0) {\n res.setMinutes(res.getMinutes() + tzValue);\n }\n }\n return res;\n };\n /**\n * Returns date parsing options for provided value along with parse and numeric options\n * @param {string} value\n * @param {ParseOptions} parseOptions\n * @param {NumericOptions} num\n * @returns {DateParts}\n */\n DateParser.internalDateParse = function (value, parseOptions, num) {\n var matches = value.match(parseOptions.parserRegex);\n var retOptions = { 'hour': 0, 'minute': 0, 'second': 0 };\n var nRegx = num.numericRegex;\n if (isNullOrUndefined(matches)) {\n return null;\n }\n else {\n var props = Object.keys(parseOptions.evalposition);\n for (var _i = 0, props_1 = props; _i < props_1.length; _i++) {\n var prop = props_1[_i];\n var curObject = parseOptions.evalposition[prop];\n var matchString = matches[curObject.pos];\n if (curObject.isNumber) {\n retOptions[prop] = this.internalNumberParser(matchString, num);\n }\n else {\n if (prop === 'timeZone' && !isUndefined(matchString)) {\n var pos = curObject.pos;\n var val = void 0;\n var tmatch = matches[pos + 1];\n var flag = !isUndefined(tmatch);\n if (curObject.hourOnly) {\n val = this.getZoneValue(flag, tmatch, matches[pos + 4], num) * 60;\n }\n else {\n val = this.getZoneValue(flag, tmatch, matches[pos + 7], num) * 60;\n val += this.getZoneValue(flag, matches[pos + 4], matches[pos + 10], num);\n }\n if (!isNullOrUndefined(val)) {\n retOptions[prop] = val;\n }\n }\n else {\n retOptions[prop] = parseOptions[prop][matchString];\n }\n }\n }\n if (parseOptions.hour12) {\n retOptions.hour12 = true;\n }\n }\n return retOptions;\n };\n /**\n * Returns parsed number for provided Numeric string and Numeric Options\n * @param {string} value\n * @param {NumericOptions} option\n * @returns {number}\n */\n DateParser.internalNumberParser = function (value, option) {\n value = parser.convertValueParts(value, option.numberParseRegex, option.numericPair);\n if (latnRegex.test(value)) {\n return +value;\n }\n return null;\n };\n /**\n * Returns parsed time zone RegExp for provided hour format and time zone\n * @param {string} hourFormat\n * @param {base.TimeZoneOptions} tZone\n * @param {string} nRegex\n * @returns {string}\n */\n DateParser.parseTimeZoneRegx = function (hourFormat, tZone, nRegex) {\n var pattern = tZone.gmtFormat;\n var ret;\n var result;\n var cRegex = '(' + nRegex + ')' + '(' + nRegex + ')';\n var splitStr;\n ret = hourFormat.replace('+', '\\\\+');\n if (hourFormat.indexOf('HH') !== -1) {\n ret = ret.replace(/HH|mm/g, '(' + cRegex + ')');\n }\n else {\n ret = ret.replace(/H|m/g, '(' + cRegex + '?)');\n }\n splitStr = (ret.split(';').map(function (str) {\n return pattern.replace('{0}', str);\n }));\n ret = splitStr.join('|') + '|' + tZone.gmtZeroFormat;\n return ret;\n };\n /**\n * Returns zone based value.\n * @param {boolean} flag\n * @param {string} val1\n * @param {string} val2\n * @param {NumericOptions} num\n * @returns {number}\n */\n DateParser.getZoneValue = function (flag, val1, val2, num) {\n var ival = flag ? val1 : val2;\n if (!ival) {\n return 0;\n }\n var value = this.internalNumberParser(ival, num);\n if (flag) {\n return -value;\n }\n return value;\n };\n return DateParser;\n}());\nexport { DateParser };\n","import { extend, isNullOrUndefined } from '../util';\nimport { ParserBase as parser } from './parser-base';\nimport { IntlBase as base } from './intl-base';\nvar formatRegex = /(^[ncpa]{1})([0-1]?[0-9]|20)?$/i;\nvar parseRegex = /^([^0-9]*)(([0-9,]*[0-9]+)(\\.[0-9]+)?)([Ee][+-]?[0-9]+)?([^0-9]*)$/;\nvar groupRegex = /,/g;\nvar latnDecimalRegex = /^[0-9]*(\\.[0-9]+)?$/;\nvar keys = ['minusSign', 'infinity'];\n/**\n * Module for Number Parser.\n * @private\n */\nvar NumberParser = /** @class */ (function () {\n function NumberParser() {\n }\n /**\n * Returns the parser function for given skeleton.\n * @param {string} - Specifies the culture name to be which formatting.\n * @param {NumberFormatOptions} - Specific the format in which number will parsed.\n * @param {cldr} - Specifies the global cldr data collection.\n * @return Function.\n */\n NumberParser.numberParser = function (culture, option, cldr) {\n var _this = this;\n var dependable = base.getDependables(cldr, culture, true);\n var parseOptions = { custom: true };\n var numOptions;\n if ((base.formatRegex.test(option.format)) || !(option.format)) {\n extend(parseOptions, base.getProperNumericSkeleton(option.format || 'N'));\n parseOptions.custom = false;\n }\n else {\n extend(parseOptions, base.customFormat(option.format, null, null));\n }\n numOptions = parser.getCurrentNumericOptions(dependable.parserObject, parser.getNumberingSystem(cldr), true);\n parseOptions.symbolRegex = parser.getSymbolRegex(Object.keys(numOptions.symbolMatch));\n // tslint:disable-next-line:no-any\n parseOptions.infinity = numOptions.symbolNumberSystem[keys[1]];\n var symbolpattern = base.getSymbolPattern(parseOptions.type, numOptions.numberSystem, dependable.numericObject, parseOptions.isAccount);\n if (symbolpattern) {\n symbolpattern = symbolpattern.replace(/\\u00A4/g, base.defaultCurrency);\n var split = symbolpattern.split(';');\n parseOptions.nData = base.getFormatData(split[1] || '-' + split[0], true, '');\n parseOptions.pData = base.getFormatData(split[0], true, '');\n }\n return function (value) {\n return _this.getParsedNumber(value, parseOptions, numOptions);\n };\n };\n /**\n * Returns parsed number for the provided formatting options\n * @param {string} value\n * @param {NumericParts} options\n * @param {NumericOptions} numOptions\n * @returns {number}\n */\n NumberParser.getParsedNumber = function (value, options, numOptions) {\n var isNegative;\n var isPercent;\n var tempValue;\n var lead;\n var end;\n var ret;\n if (value.indexOf(options.infinity) !== -1) {\n return Infinity;\n }\n else {\n value = parser.convertValueParts(value, options.symbolRegex, numOptions.symbolMatch);\n value = parser.convertValueParts(value, numOptions.numberParseRegex, numOptions.numericPair);\n if (value.indexOf('.') === 0) {\n value = '0' + value;\n }\n var matches = value.match(parseRegex);\n if (isNullOrUndefined(matches)) {\n return NaN;\n }\n lead = matches[1];\n tempValue = matches[2];\n var exponent = matches[5];\n end = matches[6];\n isNegative = options.custom ? ((lead === options.nData.nlead) && (end === options.nData.nend)) :\n ((lead.indexOf(options.nData.nlead) !== -1) && (end.indexOf(options.nData.nend) !== -1));\n isPercent = isNegative ?\n options.nData.isPercent :\n options.pData.isPercent;\n tempValue = tempValue.replace(groupRegex, '');\n if (exponent) {\n tempValue += exponent;\n }\n ret = +tempValue;\n if (options.type === 'percent' || isPercent) {\n ret = ret / 100;\n }\n if (options.custom || options.fractionDigits) {\n ret = parseFloat(ret.toFixed(options.custom ?\n (isNegative ? options.nData.maximumFractionDigits : options.pData.maximumFractionDigits) : options.fractionDigits));\n }\n if (isNegative) {\n ret *= -1;\n }\n return ret;\n }\n };\n return NumberParser;\n}());\nexport { NumberParser };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Base } from './base';\nimport { Browser } from './browser';\nimport { isVisible } from './dom';\nimport { Property, Complex, NotifyPropertyChanges, Event } from './notify-property-change';\nimport { EventHandler } from './event-handler';\nimport { ChildProperty } from './child-property';\nimport { select, closest, setStyleAttribute, addClass, createElement } from './dom';\nimport { extend, isUndefined, isNullOrUndefined, compareElementParent } from './util';\nvar defaultPosition = { left: 0, top: 0, bottom: 0, right: 0 };\nvar positionProp = ['offsetLeft', 'offsetTop'];\nvar axisMapper = ['x', 'y'];\nvar axisValueMapper = ['left', 'top'];\n/**\n * Specifies the position coordinates\n */\nvar Position = /** @class */ (function (_super) {\n __extends(Position, _super);\n function Position() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0)\n ], Position.prototype, \"left\", void 0);\n __decorate([\n Property(0)\n ], Position.prototype, \"top\", void 0);\n return Position;\n}(ChildProperty));\nexport { Position };\n/**\n * Draggable Module provides support to enable draggable functionality in Dom Elements.\n * ```html\n *
Draggable
\n * \n * ```\n */\nvar Draggable = /** @class */ (function (_super) {\n __extends(Draggable, _super);\n function Draggable(element, options) {\n var _this = _super.call(this, options, element) || this;\n _this.dragLimit = Draggable_1.getDefaultPosition();\n _this.borderWidth = Draggable_1.getDefaultPosition();\n _this.padding = Draggable_1.getDefaultPosition();\n _this.diffX = 0;\n _this.diffY = 0;\n _this.droppables = {};\n _this.bind();\n return _this;\n }\n Draggable_1 = Draggable;\n Draggable.prototype.bind = function () {\n this.toggleEvents();\n if (Browser.isIE) {\n addClass([this.element], 'e-block-touch');\n }\n this.droppables[this.scope] = {};\n };\n Draggable.getDefaultPosition = function () {\n return extend({}, defaultPosition);\n };\n Draggable.prototype.toggleEvents = function (isUnWire) {\n var ele;\n if (!isUndefined(this.handle)) {\n ele = select(this.handle, this.element);\n }\n if (isUnWire) {\n EventHandler.remove(ele || this.element, Browser.touchStartEvent, this.initialize);\n }\n else {\n EventHandler.add(ele || this.element, Browser.touchStartEvent, this.initialize, this);\n }\n };\n Draggable.prototype.initialize = function (evt) {\n this.target = evt.currentTarget;\n if (this.preventDefault && !isUndefined(evt.changedTouches)) {\n evt.preventDefault();\n }\n if (this.abort) {\n if (!isNullOrUndefined(closest(evt.target, this.abort))) {\n return;\n }\n }\n this.element.setAttribute('aria-grabbed', 'true');\n var intCoord = this.getCoordinates(evt);\n this.initialPosition = { x: intCoord.pageX, y: intCoord.pageY };\n if (!this.clone) {\n var pos = this.element.getBoundingClientRect();\n this.relativeXPosition = intCoord.pageX - pos.left;\n this.relativeYPosition = intCoord.pageY - pos.top;\n }\n EventHandler.add(document, Browser.touchMoveEvent, this.intDragStart, this);\n EventHandler.add(document, Browser.touchEndEvent, this.intDestroy, this);\n this.toggleEvents(true);\n document.body.classList.add('e-prevent-select');\n EventHandler.trigger(document.documentElement, Browser.touchStartEvent, evt);\n };\n Draggable.prototype.intDragStart = function (evt) {\n var isChangeTouch = !isUndefined(evt.changedTouches);\n if (isChangeTouch && (evt.changedTouches.length !== 1)) {\n return;\n }\n if (isChangeTouch) {\n evt.preventDefault();\n }\n var intCordinate = this.getCoordinates(evt);\n var pos;\n var styleProp = getComputedStyle(this.element);\n this.margin = {\n left: parseInt(styleProp.marginLeft, 10),\n top: parseInt(styleProp.marginTop, 10),\n right: parseInt(styleProp.marginRight, 10),\n bottom: parseInt(styleProp.marginBottom, 10),\n };\n var element = this.element;\n if (this.clone && this.dragTarget) {\n var intClosest = closest(evt.target, this.dragTarget);\n if (!isNullOrUndefined(intClosest)) {\n element = intClosest;\n }\n }\n this.offset = this.calculateParentPosition(element);\n this.position = this.getMousePosition(evt);\n var x = this.initialPosition.x - intCordinate.pageX;\n var y = this.initialPosition.y - intCordinate.pageY;\n var distance = Math.sqrt((x * x) + (y * y));\n if (distance >= this.distance) {\n var ele = this.getHelperElement(evt);\n if (!ele || isNullOrUndefined(ele)) {\n return;\n }\n var dragTargetElement = this.helperElement = ele;\n this.parentClientRect = this.calculateParentPosition(dragTargetElement.offsetParent);\n if (this.dragStart) {\n var curTarget = this.getProperTargetElement(evt);\n this.trigger('dragStart', { event: evt, element: element, target: curTarget });\n }\n if (this.dragArea) {\n this.setDragArea();\n }\n else {\n this.dragLimit = { left: 0, right: 0, bottom: 0, top: 0 };\n this.borderWidth = { top: 0, left: 0 };\n }\n pos = { left: this.position.left - this.parentClientRect.left, top: this.position.top - this.parentClientRect.top };\n if (this.clone && !this.enableTailMode) {\n this.diffX = this.position.left - this.offset.left;\n this.diffY = this.position.top - this.offset.top;\n }\n var posValue = this.getProcessedPositionValue({\n top: (pos.top - this.diffY) + 'px',\n left: (pos.left - this.diffX) + 'px'\n });\n setStyleAttribute(dragTargetElement, this.getDragPosition({ position: 'absolute', left: posValue.left, top: posValue.top }));\n EventHandler.remove(document, Browser.touchMoveEvent, this.intDragStart);\n EventHandler.remove(document, Browser.touchEndEvent, this.intDestroy);\n if (isVisible(dragTargetElement)) {\n EventHandler.add(document, Browser.touchMoveEvent, this.intDrag, this);\n EventHandler.add(document, Browser.touchEndEvent, this.intDragStop, this);\n this.setGlobalDroppables(false, this.element, dragTargetElement);\n }\n else {\n this.toggleEvents();\n document.body.classList.remove('e-prevent-select');\n }\n }\n };\n Draggable.prototype.elementInViewport = function (el) {\n this.top = el.offsetTop;\n this.left = el.offsetLeft;\n this.width = el.offsetWidth;\n this.height = el.offsetHeight;\n while (el.offsetParent) {\n el = el.offsetParent;\n this.top += el.offsetTop;\n this.left += el.offsetLeft;\n }\n return (this.top >= window.pageYOffset &&\n this.left >= window.pageXOffset &&\n (this.top + this.height) <= (window.pageYOffset + window.innerHeight) &&\n (this.left + this.width) <= (window.pageXOffset + window.innerWidth));\n };\n Draggable.prototype.getProcessedPositionValue = function (value) {\n if (this.queryPositionInfo) {\n return this.queryPositionInfo(value);\n }\n return value;\n };\n Draggable.prototype.calculateParentPosition = function (ele) {\n if (isNullOrUndefined(ele)) {\n return { left: 0, top: 0 };\n }\n var rect = ele.getBoundingClientRect();\n var style = getComputedStyle(ele);\n return {\n left: (rect.left + window.pageXOffset) - parseInt(style.marginLeft, 10),\n top: (rect.top + window.pageYOffset) - parseInt(style.marginTop, 10)\n };\n };\n Draggable.prototype.intDrag = function (evt) {\n if (!isUndefined(evt.changedTouches) && (evt.changedTouches.length !== 1)) {\n return;\n }\n var left;\n var top;\n this.position = this.getMousePosition(evt);\n var docHeight = this.getDocumentWidthHeight('Height');\n if (docHeight < this.position.top) {\n this.position.top = docHeight;\n }\n var docWidth = this.getDocumentWidthHeight('Width');\n if (docWidth < this.position.left) {\n this.position.left = docWidth;\n }\n if (this.drag) {\n var curTarget = this.getProperTargetElement(evt);\n this.trigger('drag', { event: evt, element: this.element, target: curTarget });\n }\n var eleObj = this.checkTargetElement(evt);\n if (eleObj.target && eleObj.instance) {\n /* tslint:disable no-any */\n eleObj.instance.dragData[this.scope] = this.droppables[this.scope];\n eleObj.instance.intOver(evt, eleObj.target);\n this.hoverObject = eleObj;\n }\n else if (this.hoverObject) {\n this.hoverObject.instance.intOut(evt, eleObj.target);\n this.hoverObject.instance.dragData[this.scope] = null;\n this.hoverObject = null;\n }\n var helperElement = this.droppables[this.scope].helper;\n this.parentClientRect = this.calculateParentPosition(this.helperElement.offsetParent);\n var tLeft = this.parentClientRect.left;\n var tTop = this.parentClientRect.top;\n var intCoord = this.getCoordinates(evt);\n var pagex = intCoord.pageX;\n var pagey = intCoord.pageY;\n var dLeft = this.position.left - this.diffX;\n var dTop = this.position.top - this.diffY;\n if (this.dragArea) {\n var styles = getComputedStyle(helperElement);\n if (this.pageX !== pagex || this.skipDistanceCheck) {\n var helperWidth = helperElement.offsetWidth + (parseFloat(styles.marginLeft)\n + parseFloat(styles.marginRight));\n if (this.dragLimit.left > dLeft) {\n left = this.dragLimit.left;\n }\n else if (this.dragLimit.right < dLeft + helperWidth) {\n left = this.dragLimit.right - helperWidth;\n }\n else {\n left = dLeft;\n }\n }\n if (this.pageY !== pagey || this.skipDistanceCheck) {\n var helperHeight = helperElement.offsetHeight + (parseFloat(styles.marginTop)\n + parseFloat(styles.marginBottom));\n if (this.dragLimit.top > dTop) {\n top = this.dragLimit.top;\n }\n else if (this.dragLimit.bottom < dTop + helperHeight) {\n top = this.dragLimit.bottom - helperHeight;\n }\n else {\n top = dTop;\n }\n }\n }\n else {\n left = dLeft;\n top = dTop;\n }\n var iTop = tTop + this.borderWidth.top;\n var iLeft = tLeft + this.borderWidth.left;\n var dragValue = this.getProcessedPositionValue({ top: (top - iTop) + 'px', left: (left - iLeft) + 'px' });\n setStyleAttribute(helperElement, this.getDragPosition(dragValue));\n if (!this.elementInViewport(helperElement) && this.enableAutoScroll) {\n this.helperElement.scrollIntoView();\n }\n this.position.left = left;\n this.position.top = top;\n this.pageX = pagex;\n this.pageY = pagey;\n };\n Draggable.prototype.getDragPosition = function (dragValue) {\n var temp = extend({}, dragValue);\n if (this.axis) {\n if (this.axis === 'x') {\n delete temp.top;\n }\n else if (this.axis === 'y') {\n delete temp.left;\n }\n }\n return temp;\n };\n Draggable.prototype.getDocumentWidthHeight = function (str) {\n var docBody = document.body;\n var docEle = document.documentElement;\n var returnValue = Math.max(docBody['scroll' + str], docEle['scroll' + str], docBody['offset' + str], docEle['offset' + str], docEle['client' + str]);\n return returnValue;\n };\n Draggable.prototype.intDragStop = function (evt) {\n if (!isUndefined(evt.changedTouches) && (evt.changedTouches.length !== 1)) {\n return;\n }\n var type = ['touchend', 'pointerup', 'mouseup'];\n if (type.indexOf(evt.type) !== -1) {\n if (this.dragStop) {\n var curTarget = this.getProperTargetElement(evt);\n this.trigger('dragStop', { event: evt, element: this.element, target: curTarget, helper: this.helperElement });\n }\n this.intDestroy(evt);\n }\n else {\n this.element.setAttribute('aria-grabbed', 'false');\n }\n var eleObj = this.checkTargetElement(evt);\n if (eleObj.target && eleObj.instance) {\n eleObj.instance.dragStopCalled = true;\n eleObj.instance.dragData[this.scope] = this.droppables[this.scope];\n eleObj.instance.intDrop(evt, eleObj.target);\n }\n this.setGlobalDroppables(true);\n document.body.classList.remove('e-prevent-select');\n };\n Draggable.prototype.intDestroy = function (evt) {\n this.toggleEvents();\n document.body.classList.remove('e-prevent-select');\n this.element.setAttribute('aria-grabbed', 'false');\n EventHandler.remove(document, Browser.touchMoveEvent, this.intDragStart);\n EventHandler.remove(document, Browser.touchEndEvent, this.intDragStop);\n EventHandler.remove(document, Browser.touchEndEvent, this.intDestroy);\n EventHandler.remove(document, Browser.touchMoveEvent, this.intDrag);\n };\n // triggers when property changed\n Draggable.prototype.onPropertyChanged = function (newProp, oldProp) {\n //No Code to handle\n };\n Draggable.prototype.getModuleName = function () {\n return 'draggable';\n };\n Draggable.prototype.setDragArea = function () {\n var eleWidthBound;\n var eleHeightBound;\n var top = 0;\n var left = 0;\n var ele;\n var type = typeof this.dragArea;\n if (type === 'string') {\n ele = select(this.dragArea);\n }\n else {\n ele = this.dragArea;\n }\n if (ele) {\n var elementArea = ele.getBoundingClientRect();\n eleWidthBound = elementArea.width ? elementArea.width : elementArea.right - elementArea.left;\n eleHeightBound = elementArea.height ? elementArea.height : elementArea.bottom - elementArea.top;\n var keys = ['Top', 'Left', 'Bottom', 'Right'];\n var styles = getComputedStyle(ele);\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n var tborder = styles['border' + key + 'Width'];\n var tpadding = styles['padding' + key];\n var lowerKey = key.toLowerCase();\n this.borderWidth[lowerKey] = isNaN(parseFloat(tborder)) ? 0 : parseFloat(tborder);\n this.padding[lowerKey] = isNaN(parseFloat(tpadding)) ? 0 : parseFloat(tpadding);\n }\n top = elementArea.top;\n left = elementArea.left;\n this.dragLimit.left = left + this.borderWidth.left + this.padding.left;\n this.dragLimit.top = top + this.borderWidth.top + this.padding.top;\n this.dragLimit.right = left + eleWidthBound - (this.borderWidth.right + this.padding.right);\n this.dragLimit.bottom = top + eleHeightBound - (this.borderWidth.bottom + this.padding.bottom);\n }\n };\n Draggable.prototype.getProperTargetElement = function (evt) {\n var intCoord = this.getCoordinates(evt);\n var ele;\n var prevStyle = this.helperElement.style.display || '';\n if (compareElementParent(evt.target, this.helperElement) || evt.type.indexOf('touch') !== -1) {\n this.helperElement.style.display = 'none';\n ele = document.elementFromPoint(intCoord.clientX, intCoord.clientY);\n this.helperElement.style.display = prevStyle;\n }\n else {\n ele = evt.target;\n }\n return ele;\n };\n Draggable.prototype.getMousePosition = function (evt) {\n var intCoord = this.getCoordinates(evt);\n var pageX = this.clone ? intCoord.pageX : intCoord.pageX - this.relativeXPosition;\n var pageY = this.clone ? intCoord.pageY : intCoord.pageY - this.relativeYPosition;\n return {\n left: pageX - (this.margin.left + this.cursorAt.left),\n top: pageY - (this.margin.top + this.cursorAt.top)\n };\n };\n Draggable.prototype.getCoordinates = function (evt) {\n if (evt.type.indexOf('touch') > -1) {\n return evt.changedTouches[0];\n }\n return evt;\n };\n Draggable.prototype.getHelperElement = function (evt) {\n var element;\n if (this.clone) {\n if (this.helper) {\n element = this.helper({ sender: evt, element: this.target });\n }\n else {\n element = createElement('div', { className: 'e-drag-helper e-block-touch', innerHTML: 'Draggable' });\n document.body.appendChild(element);\n }\n }\n else {\n element = this.element;\n }\n return element;\n };\n Draggable.prototype.setGlobalDroppables = function (reset, drag, helper) {\n this.droppables[this.scope] = reset ? null : {\n draggable: drag,\n helper: helper,\n draggedElement: this.element\n };\n };\n Draggable.prototype.checkTargetElement = function (evt) {\n var target = this.getProperTargetElement(evt);\n var dropIns = this.getDropInstance(target);\n if (!dropIns && target && !isNullOrUndefined(target.parentNode)) {\n var parent_1 = closest(target.parentNode, '.e-droppable') || target.parentElement;\n if (parent_1) {\n dropIns = this.getDropInstance(parent_1);\n }\n }\n return { target: target, instance: dropIns };\n };\n Draggable.prototype.getDropInstance = function (ele) {\n var name = 'getModuleName';\n var drop;\n var eleInst = ele && ele.ej2_instances;\n if (eleInst) {\n for (var _i = 0, eleInst_1 = eleInst; _i < eleInst_1.length; _i++) {\n var inst = eleInst_1[_i];\n if (inst[name]() === 'droppable') {\n drop = inst;\n break;\n }\n }\n }\n return drop;\n };\n Draggable.prototype.destroy = function () {\n this.toggleEvents(true);\n _super.prototype.destroy.call(this);\n };\n __decorate([\n Complex({}, Position)\n ], Draggable.prototype, \"cursorAt\", void 0);\n __decorate([\n Property(true)\n ], Draggable.prototype, \"clone\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"dragArea\", void 0);\n __decorate([\n Event()\n ], Draggable.prototype, \"drag\", void 0);\n __decorate([\n Event()\n ], Draggable.prototype, \"dragStart\", void 0);\n __decorate([\n Event()\n ], Draggable.prototype, \"dragStop\", void 0);\n __decorate([\n Property(1)\n ], Draggable.prototype, \"distance\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"handle\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"abort\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"helper\", void 0);\n __decorate([\n Property('default')\n ], Draggable.prototype, \"scope\", void 0);\n __decorate([\n Property('')\n ], Draggable.prototype, \"dragTarget\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"axis\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"queryPositionInfo\", void 0);\n __decorate([\n Property(false)\n ], Draggable.prototype, \"enableTailMode\", void 0);\n __decorate([\n Property(false)\n ], Draggable.prototype, \"skipDistanceCheck\", void 0);\n __decorate([\n Property(true)\n ], Draggable.prototype, \"preventDefault\", void 0);\n __decorate([\n Property(false)\n ], Draggable.prototype, \"enableAutoScroll\", void 0);\n Draggable = Draggable_1 = __decorate([\n NotifyPropertyChanges\n ], Draggable);\n return Draggable;\n var Draggable_1;\n}(Base));\nexport { Draggable };\n","import { createElement, attributes, addClass, removeClass, detach, classList, closest, isNullOrUndefined } from '@syncfusion/ej2-base';\nvar CLASSNAMES = {\n RTL: 'e-rtl',\n DISABLE: 'e-disabled',\n INPUT: 'e-input',\n INPUTGROUP: 'e-input-group',\n FLOATINPUT: 'e-float-input',\n FLOATLINE: 'e-float-line',\n FLOATTEXT: 'e-float-text',\n CLEARICON: 'e-clear-icon',\n CLEARICONHIDE: 'e-clear-icon-hide',\n LABELTOP: 'e-label-top',\n LABELBOTTOM: 'e-label-bottom',\n NOFLOATLABEL: 'e-no-float-label',\n INPUTCUSTOMTAG: 'e-input-custom-tag',\n FLOATCUSTOMTAG: 'e-float-custom-tag'\n};\n/**\n * Base for Input creation through util methods.\n */\nexport var Input;\n(function (Input) {\n var privateInputObj = {\n container: null,\n buttons: [],\n clearButton: null\n };\n /**\n * Create a wrapper to input element with multiple span elements and set the basic properties to input based components.\n * ```\n * E.g : Input.createInput({ element: element, floatLabelType : \"Auto\", properties: { placeholder: 'Search' } });\n * ```\n * @param args\n */\n function createInput(args) {\n var inputObject = { container: null, buttons: [], clearButton: null };\n if (isNullOrUndefined(args.floatLabelType) || args.floatLabelType === 'Never') {\n inputObject.container = createInputContainer(args, CLASSNAMES.INPUTGROUP, CLASSNAMES.INPUTCUSTOMTAG, 'span');\n args.element.parentNode.insertBefore(inputObject.container, args.element);\n addClass([args.element], CLASSNAMES.INPUT);\n inputObject.container.appendChild(args.element);\n }\n else {\n createFloatingInput(args, inputObject);\n }\n args.element.addEventListener('focus', function () {\n var parent = getParentNode(this);\n if (parent.classList.contains('e-input-group')) {\n parent.classList.add('e-input-focus');\n }\n });\n args.element.addEventListener('blur', function () {\n var parent = getParentNode(this);\n if (parent.classList.contains('e-input-group')) {\n parent.classList.remove('e-input-focus');\n }\n });\n if (!isNullOrUndefined(args.properties) && !isNullOrUndefined(args.properties.showClearButton) && args.properties.showClearButton) {\n setClearButton(args.properties.showClearButton, args.element, inputObject, true);\n if (inputObject.container.classList.contains(CLASSNAMES.FLOATINPUT)) {\n addClass([inputObject.container], CLASSNAMES.INPUTGROUP);\n }\n }\n if (!isNullOrUndefined(args.buttons)) {\n for (var i = 0; i < args.buttons.length; i++) {\n inputObject.buttons.push(appendSpan(args.buttons[i], inputObject.container));\n }\n }\n inputObject = setPropertyValue(args, inputObject);\n privateInputObj = inputObject;\n return inputObject;\n }\n Input.createInput = createInput;\n function _focusFn() {\n var label = getParentNode(this).getElementsByClassName('e-float-text')[0];\n addClass([label], CLASSNAMES.LABELTOP);\n if (label.classList.contains(CLASSNAMES.LABELBOTTOM)) {\n removeClass([label], CLASSNAMES.LABELBOTTOM);\n }\n }\n function _blurFn() {\n var parent = getParentNode(this);\n if (parent.getElementsByTagName('input')[0].value === '') {\n var label = parent.getElementsByClassName('e-float-text')[0];\n if (label.classList.contains(CLASSNAMES.LABELTOP)) {\n removeClass([label], CLASSNAMES.LABELTOP);\n }\n addClass([label], CLASSNAMES.LABELBOTTOM);\n }\n }\n function wireFloatingEvents(element) {\n element.addEventListener('focus', _focusFn);\n element.addEventListener('blur', _blurFn);\n }\n function unwireFloatingEvents(element) {\n element.removeEventListener('focus', _focusFn);\n element.removeEventListener('blur', _blurFn);\n }\n function createFloatingInput(args, inputObject) {\n var inputElement;\n var floatLinelement;\n var floatLabelElement;\n if (args.floatLabelType === 'Auto') {\n wireFloatingEvents(args.element);\n }\n if (isNullOrUndefined(inputObject.container)) {\n inputObject.container = createInputContainer(args, CLASSNAMES.FLOATINPUT, CLASSNAMES.FLOATCUSTOMTAG, 'div');\n args.element.parentNode.insertBefore(inputObject.container, args.element);\n }\n else {\n if (!isNullOrUndefined(args.customTag)) {\n inputObject.container.classList.add(CLASSNAMES.FLOATCUSTOMTAG);\n }\n inputObject.container.classList.add(CLASSNAMES.FLOATINPUT);\n }\n floatLinelement = createElement('span', { className: CLASSNAMES.FLOATLINE });\n floatLabelElement = createElement('label', { className: CLASSNAMES.FLOATTEXT });\n if (!isNullOrUndefined(args.element.id) && args.element.id !== '') {\n floatLabelElement.id = 'label_' + args.element.id.replace(/ /g, '_');\n attributes(args.element, { 'aria-labelledby': floatLabelElement.id });\n }\n if (!isNullOrUndefined(args.element.placeholder) && args.element.placeholder !== '') {\n floatLabelElement.innerHTML = args.element.placeholder;\n args.element.removeAttribute('placeholder');\n }\n if (!isNullOrUndefined(args.properties) && !isNullOrUndefined(args.properties.placeholder) &&\n args.properties.placeholder !== '') {\n floatLabelElement.innerHTML = args.properties.placeholder;\n }\n if (!floatLabelElement.innerHTML) {\n inputObject.container.classList.add(CLASSNAMES.NOFLOATLABEL);\n }\n inputObject.container.appendChild(args.element);\n inputObject.container.appendChild(floatLinelement);\n inputObject.container.appendChild(floatLabelElement);\n updateLabelState(args.element.value, floatLabelElement);\n if (args.floatLabelType === 'Always') {\n if (floatLabelElement.classList.contains(CLASSNAMES.LABELBOTTOM)) {\n removeClass([floatLabelElement], CLASSNAMES.LABELBOTTOM);\n }\n addClass([floatLabelElement], CLASSNAMES.LABELTOP);\n }\n if (args.floatLabelType === 'Auto') {\n args.element.addEventListener('input', function (event) {\n updateLabelState(args.element.value, floatLabelElement);\n });\n args.element.addEventListener('blur', function (event) {\n updateLabelState(args.element.value, floatLabelElement);\n });\n }\n }\n function setPropertyValue(args, inputObject) {\n if (!isNullOrUndefined(args.properties)) {\n for (var _i = 0, _a = Object.keys(args.properties); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n setCssClass(args.properties.cssClass, [inputObject.container]);\n break;\n case 'enabled':\n setEnabled(args.properties.enabled, args.element);\n break;\n case 'enableRtl':\n setEnableRtl(args.properties.enableRtl, [inputObject.container]);\n break;\n case 'placeholder':\n setPlaceholder(args.properties.placeholder, args.element);\n break;\n case 'readonly':\n setReadonly(args.properties.readonly, args.element);\n break;\n }\n }\n }\n return inputObject;\n }\n function updateIconState(value, button) {\n if (value) {\n removeClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n else {\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n }\n function updateLabelState(value, label) {\n if (value) {\n addClass([label], CLASSNAMES.LABELTOP);\n if (label.classList.contains(CLASSNAMES.LABELBOTTOM)) {\n removeClass([label], CLASSNAMES.LABELBOTTOM);\n }\n }\n else {\n if (label.classList.contains(CLASSNAMES.LABELTOP)) {\n removeClass([label], CLASSNAMES.LABELTOP);\n }\n addClass([label], CLASSNAMES.LABELBOTTOM);\n }\n }\n function getParentNode(element) {\n var parentNode = element.parentNode;\n return parentNode;\n }\n /**\n * To create clear button.\n */\n function createClearButton(element, inputObject, initial) {\n var button = createElement('span', { className: CLASSNAMES.CLEARICON });\n var container = inputObject.container;\n if (!isNullOrUndefined(initial)) {\n container.appendChild(button);\n }\n else {\n var baseElement = inputObject.container.classList.contains(CLASSNAMES.FLOATINPUT) ?\n inputObject.container.querySelector('.' + CLASSNAMES.FLOATTEXT) : element;\n baseElement.insertAdjacentElement('afterend', button);\n }\n if (!isNullOrUndefined(container) &&\n container.classList.contains(CLASSNAMES.FLOATINPUT)) {\n addClass([container], CLASSNAMES.INPUTGROUP);\n }\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n wireClearBtnEvents(element, button, container);\n return button;\n }\n function wireClearBtnEvents(element, button, container) {\n button.addEventListener('click', function (event) {\n if (!(element.classList.contains(CLASSNAMES.DISABLE) || element.readOnly)) {\n event.preventDefault();\n if (element !== document.activeElement) {\n element.focus();\n }\n element.value = '';\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n });\n element.addEventListener('input', function (event) {\n updateIconState(element.value, button);\n });\n element.addEventListener('focus', function (event) {\n updateIconState(element.value, button);\n });\n element.addEventListener('blur', function (event) {\n setTimeout(function () { addClass([button], CLASSNAMES.CLEARICONHIDE); }, 200);\n });\n }\n function validateLabel(element, floatLabelType) {\n var parent = getParentNode(element);\n if (parent.classList.contains(CLASSNAMES.FLOATINPUT) && floatLabelType === 'Auto') {\n var label = getParentNode(element).getElementsByClassName('e-float-text')[0];\n updateLabelState(element.value, label);\n }\n }\n /**\n * To create input box contianer.\n */\n function createInputContainer(args, className, tagClass, tag) {\n var container;\n if (!isNullOrUndefined(args.customTag)) {\n container = createElement(args.customTag, { className: className });\n container.classList.add(tagClass);\n }\n else {\n container = createElement(tag, { className: className });\n }\n container.classList.add('e-control-wrapper');\n return container;\n }\n /**\n * Sets the value to the input element.\n * ```\n * E.g : Input.setValue('content', element, \"Auto\", true );\n * ```\n * @param value - Specify the value of the input element.\n * @param element - The element on which the specified value is updated.\n * @param floatLabelType - Specify the float label type of the input element.\n * @param clearButton - Boolean value to specify whether the clear icon is enabled / disabled on the input.\n */\n function setValue(value, element, floatLabelType, clearButton) {\n element.value = value;\n if ((!isNullOrUndefined(floatLabelType)) && floatLabelType === 'Auto') {\n validateLabel(element, floatLabelType);\n }\n if (!isNullOrUndefined(clearButton) && clearButton) {\n var parentElement = getParentNode(element);\n var button = parentElement.getElementsByClassName(CLASSNAMES.CLEARICON)[0];\n if (element.value && parentElement.classList.contains('e-input-focus')) {\n removeClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n else {\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n }\n }\n Input.setValue = setValue;\n /**\n * Sets the single or multiple cssClass to wrapper of input element.\n * ```\n * E.g : Input.setCssClass('e-custom-class', [element]);\n * ```\n * @param cssClass - Css class names which are needed to add.\n * @param elements - The elements which are needed to add / remove classes.\n * @param oldClass - Css class names which are needed to remove. If old classes are need to remove, can give this optional parameter.\n */\n function setCssClass(cssClass, elements, oldClass) {\n if (!isNullOrUndefined(oldClass) && oldClass !== '') {\n removeClass(elements, oldClass);\n }\n if (!isNullOrUndefined(cssClass) && cssClass !== '') {\n addClass(elements, cssClass);\n }\n }\n Input.setCssClass = setCssClass;\n /**\n * Set the placeholder attribute to the input element.\n * ```\n * E.g : Input.setPlaceholder('Search here', element);\n * ```\n * @param placeholder - Placeholder value which is need to add.\n * @param element - The element on which the placeholder is need to add.\n */\n function setPlaceholder(placeholder, element) {\n var parentElement;\n parentElement = getParentNode(element);\n if (parentElement.classList.contains(CLASSNAMES.FLOATINPUT)) {\n if (!isNullOrUndefined(placeholder) && placeholder !== '') {\n parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = placeholder;\n parentElement.classList.remove(CLASSNAMES.NOFLOATLABEL);\n }\n else {\n parentElement.classList.add(CLASSNAMES.NOFLOATLABEL);\n parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = '';\n }\n }\n else {\n if (!isNullOrUndefined(placeholder) && placeholder !== '') {\n attributes(element, { 'placeholder': placeholder, 'aria-placeholder': placeholder });\n }\n else {\n element.removeAttribute('placeholder');\n element.removeAttribute('aria-placeholder');\n }\n }\n }\n Input.setPlaceholder = setPlaceholder;\n /**\n * Set the read only attribute to the input element\n * ```\n * E.g : Input.setReadonly(true, element);\n * ```\n * @param isReadonly\n * - Boolean value to specify whether to set read only. Setting \"True\" value enables read only.\n * @param element\n * - The element which is need to enable read only.\n */\n function setReadonly(isReadonly, element, floatLabelType) {\n if (isReadonly) {\n attributes(element, { readonly: '' });\n }\n else {\n element.removeAttribute('readonly');\n }\n if (!isNullOrUndefined(floatLabelType)) {\n validateLabel(element, floatLabelType);\n }\n }\n Input.setReadonly = setReadonly;\n /**\n * Displays the element direction from right to left when its enabled.\n * ```\n * E.g : Input.setEnableRtl(true, [inputObj.container]);\n * ```\n * @param isRtl\n * - Boolean value to specify whether to set RTL. Setting \"True\" value enables the RTL mode.\n * @param elements\n * - The elements that are needed to enable/disable RTL.\n */\n function setEnableRtl(isRtl, elements) {\n if (isRtl) {\n addClass(elements, CLASSNAMES.RTL);\n }\n else {\n removeClass(elements, CLASSNAMES.RTL);\n }\n }\n Input.setEnableRtl = setEnableRtl;\n /**\n * Enables or disables the given input element.\n * ```\n * E.g : Input.setEnabled(false, element);\n * ```\n * @param isEnable\n * - Boolean value to specify whether to enable or disable.\n * @param element\n * - Element to be enabled or disabled.\n */\n function setEnabled(isEnable, element, floatLabelType) {\n var disabledAttrs = { 'disabled': 'disabled', 'aria-disabled': 'true' };\n if (isEnable) {\n element.classList.remove(CLASSNAMES.DISABLE);\n removeAttributes(disabledAttrs, element);\n }\n else {\n element.classList.add(CLASSNAMES.DISABLE);\n addAttributes(disabledAttrs, element);\n }\n if (!isNullOrUndefined(floatLabelType)) {\n validateLabel(element, floatLabelType);\n }\n }\n Input.setEnabled = setEnabled;\n function setClearButton(isClear, element, inputObject, initial) {\n if (isClear) {\n inputObject.clearButton = createClearButton(element, inputObject, initial);\n }\n else {\n inputObject.clearButton.remove();\n inputObject.clearButton = null;\n }\n }\n Input.setClearButton = setClearButton;\n /**\n * Removing the multiple attributes from the given element such as \"disabled\",\"id\" , etc.\n * ```\n * E.g : Input.removeAttributes({ 'disabled': 'disabled', 'aria-disabled': 'true' }, element);\n * ```\n * @param attrs\n * - Array of attributes which are need to removed from the element.\n * @param element\n * - Element on which the attributes are needed to be removed.\n */\n function removeAttributes(attrs, element) {\n for (var _i = 0, _a = Object.keys(attrs); _i < _a.length; _i++) {\n var key = _a[_i];\n var parentElement = void 0;\n parentElement = getParentNode(element);\n if (key === 'disabled') {\n element.classList.remove(CLASSNAMES.DISABLE);\n }\n if (key === 'disabled' && parentElement.classList.contains(CLASSNAMES.INPUTGROUP)) {\n parentElement.classList.remove(CLASSNAMES.DISABLE);\n }\n if (key === 'placeholder' && parentElement.classList.contains(CLASSNAMES.FLOATINPUT)) {\n parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = '';\n }\n else {\n element.removeAttribute(key);\n }\n }\n }\n Input.removeAttributes = removeAttributes;\n /**\n * Adding the multiple attributes to the given element such as \"disabled\",\"id\" , etc.\n * ```\n * E.g : Input.addAttributes({ 'id': 'inputpopup' }, element);\n * ```\n * @param attrs\n * - Array of attributes which is added to element.\n * @param element\n * - Element on which the attributes are needed to be added.\n */\n function addAttributes(attrs, element) {\n for (var _i = 0, _a = Object.keys(attrs); _i < _a.length; _i++) {\n var key = _a[_i];\n var parentElement = void 0;\n parentElement = getParentNode(element);\n if (key === 'disabled') {\n element.classList.add(CLASSNAMES.DISABLE);\n }\n if (key === 'disabled' && parentElement.classList.contains(CLASSNAMES.INPUTGROUP)) {\n parentElement.classList.add(CLASSNAMES.DISABLE);\n }\n if (key === 'placeholder' && parentElement.classList.contains(CLASSNAMES.FLOATINPUT)) {\n parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = attrs[key];\n }\n else {\n element.setAttribute(key, attrs[key]);\n }\n }\n }\n Input.addAttributes = addAttributes;\n function removeFloating(input) {\n var container = input.container;\n if (!isNullOrUndefined(container) && container.classList.contains(CLASSNAMES.FLOATINPUT)) {\n var inputEle = container.querySelector('input');\n var placeholder = container.querySelector('.' + CLASSNAMES.FLOATTEXT).textContent;\n var clearButton = container.querySelector('.e-clear-icon') !== null;\n detach(container.querySelector('.' + CLASSNAMES.FLOATLINE));\n detach(container.querySelector('.' + CLASSNAMES.FLOATTEXT));\n classList(container, [CLASSNAMES.INPUTGROUP], [CLASSNAMES.FLOATINPUT]);\n unwireFloatingEvents(inputEle);\n attributes(inputEle, { 'placeholder': placeholder });\n inputEle.classList.add(CLASSNAMES.INPUT);\n if (!clearButton) {\n inputEle.removeAttribute('required');\n }\n }\n }\n Input.removeFloating = removeFloating;\n function addFloating(input, type, placeholder) {\n var container = closest(input, '.' + CLASSNAMES.INPUTGROUP);\n if (type !== 'Never') {\n var customTag = container.tagName;\n customTag = customTag !== 'DIV' && customTag !== 'SPAN' ? customTag : null;\n var args = { element: input, floatLabelType: type, customTag: customTag, properties: { placeholder: placeholder } };\n var iconEle = container.querySelector('.e-clear-icon');\n var inputObj = { container: container };\n input.classList.remove(CLASSNAMES.INPUT);\n createFloatingInput(args, inputObj);\n if (isNullOrUndefined(iconEle)) {\n iconEle = container.querySelector('.e-input-group-icon');\n }\n if (isNullOrUndefined(iconEle)) {\n container.classList.remove(CLASSNAMES.INPUTGROUP);\n }\n else {\n var floatLine = container.querySelector('.' + CLASSNAMES.FLOATLINE);\n var floatText = container.querySelector('.' + CLASSNAMES.FLOATTEXT);\n container.insertBefore(input, iconEle);\n container.insertBefore(floatLine, iconEle);\n container.insertBefore(floatText, iconEle);\n }\n }\n }\n Input.addFloating = addFloating;\n /**\n * Enable or Disable the ripple effect on the icons inside the Input. Ripple effect is only applicable for material theme.\n * ```\n * E.g : Input.setRipple(true, [inputObjects]);\n * ```\n * @param isRipple\n * - Boolean value to specify whether to enable the ripple effect.\n * @param inputObject\n * - Specify the collection of input objects.\n */\n function setRipple(isRipple, inputObj) {\n for (var i = 0; i < inputObj.length; i++) {\n _internalRipple(isRipple, inputObj[i].container);\n }\n }\n Input.setRipple = setRipple;\n function _internalRipple(isRipple, container, button) {\n var argsButton = [];\n argsButton.push(button);\n var buttons = isNullOrUndefined(button) ?\n container.querySelectorAll('.e-input-group-icon') : argsButton;\n if (isRipple && buttons.length > 0) {\n for (var index = 0; index < buttons.length; index++) {\n buttons[index].addEventListener('mousedown', _onMouseDownRipple, false);\n buttons[index].addEventListener('mouseup', _onMouseUpRipple, false);\n }\n }\n else if (buttons.length > 0) {\n for (var index = 0; index < buttons.length; index++) {\n buttons[index].removeEventListener('mousedown', _onMouseDownRipple, this);\n buttons[index].removeEventListener('mouseup', _onMouseUpRipple, this);\n }\n }\n }\n function _onMouseRipple(container, button) {\n if (!container.classList.contains('e-disabled') && !container.querySelector('input').readOnly) {\n button.classList.add('e-input-btn-ripple');\n }\n }\n function _onMouseDownRipple() {\n var ele = this;\n var parentEle = this.parentElement;\n while (!parentEle.classList.contains('e-input-group')) {\n parentEle = parentEle.parentElement;\n }\n _onMouseRipple(parentEle, ele);\n }\n function _onMouseUpRipple() {\n var ele = this;\n setTimeout(function () { ele.classList.remove('e-input-btn-ripple'); }, 500);\n }\n /**\n * Creates a new span element with the given icons added and append it in container element.\n * ```\n * E.g : Input.appendSpan('e-icon-spin', inputObj.container);\n * ```\n * @param iconClass - Icon classes which are need to add to the span element which is going to created.\n * Span element acts as icon or button element for input.\n * @param container - The container on which created span element is going to append.\n */\n function appendSpan(iconClass, container) {\n var button = createElement('span', { className: iconClass });\n button.classList.add('e-input-group-icon');\n container.appendChild(button);\n if (!container.classList.contains(CLASSNAMES.INPUTGROUP)) {\n container.classList.add(CLASSNAMES.INPUTGROUP);\n }\n _internalRipple(true, container, button);\n return button;\n }\n Input.appendSpan = appendSpan;\n})(Input || (Input = {}));\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Base } from './base';\nimport { Browser } from './browser';\nimport { isVisible, matches } from './dom';\nimport { Property, NotifyPropertyChanges, Event } from './notify-property-change';\nimport { EventHandler } from './event-handler';\nimport { compareElementParent } from './util';\n/**\n * Droppable Module provides support to enable droppable functionality in Dom Elements.\n * ```html\n *
Droppable
\n * \n * ```\n */\nvar Droppable = /** @class */ (function (_super) {\n __extends(Droppable, _super);\n function Droppable(element, options) {\n var _this = _super.call(this, options, element) || this;\n _this.mouseOver = false;\n _this.dragData = {};\n _this.dragStopCalled = false;\n _this.bind();\n return _this;\n }\n Droppable.prototype.bind = function () {\n this.wireEvents();\n };\n Droppable.prototype.wireEvents = function () {\n EventHandler.add(this.element, Browser.touchEndEvent, this.intDrop, this);\n };\n // triggers when property changed\n Droppable.prototype.onPropertyChanged = function (newProp, oldProp) {\n //No Code to handle\n };\n Droppable.prototype.getModuleName = function () {\n return 'droppable';\n };\n Droppable.prototype.intOver = function (event, element) {\n if (!this.mouseOver) {\n var drag = this.dragData[this.scope];\n this.trigger('over', { event: event, target: element, dragData: drag });\n this.mouseOver = true;\n }\n };\n Droppable.prototype.intOut = function (event, element) {\n if (this.mouseOver) {\n this.trigger('out', { evt: event, target: element });\n this.mouseOver = false;\n }\n };\n Droppable.prototype.intDrop = function (evt, element) {\n if (!this.dragStopCalled) {\n return;\n }\n else {\n this.dragStopCalled = false;\n }\n var accept = true;\n var drag = this.dragData[this.scope];\n var isDrag = drag ? (drag.helper && isVisible(drag.helper)) : false;\n var area;\n if (isDrag) {\n area = this.isDropArea(evt, drag.helper, element);\n if (this.accept) {\n accept = matches(drag.helper, this.accept);\n }\n }\n if (isDrag && this.drop && area.canDrop && accept) {\n this.trigger('drop', { event: evt, target: area.target, droppedElement: drag.helper, dragData: drag });\n }\n this.mouseOver = false;\n };\n Droppable.prototype.isDropArea = function (evt, helper, element) {\n var area = { canDrop: true, target: element || evt.target };\n var isTouch = evt.type === 'touchend';\n if (isTouch || area.target === helper) {\n helper.style.display = 'none';\n var coord = isTouch ? (evt.changedTouches[0]) : evt;\n var ele = document.elementFromPoint(coord.clientX, coord.clientY);\n area.canDrop = false;\n area.canDrop = compareElementParent(ele, this.element);\n if (area.canDrop) {\n area.target = ele;\n }\n helper.style.display = '';\n }\n return area;\n };\n Droppable.prototype.destroy = function () {\n EventHandler.remove(this.element, Browser.touchEndEvent, this.intDrop);\n _super.prototype.destroy.call(this);\n };\n __decorate([\n Property()\n ], Droppable.prototype, \"accept\", void 0);\n __decorate([\n Property('default')\n ], Droppable.prototype, \"scope\", void 0);\n __decorate([\n Event()\n ], Droppable.prototype, \"drop\", void 0);\n __decorate([\n Event()\n ], Droppable.prototype, \"over\", void 0);\n __decorate([\n Event()\n ], Droppable.prototype, \"out\", void 0);\n Droppable = __decorate([\n NotifyPropertyChanges\n ], Droppable);\n return Droppable;\n}(Base));\nexport { Droppable };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, NotifyPropertyChanges, Event } from './notify-property-change';\nimport { Base } from './base';\nvar keyCode = {\n 'backspace': 8,\n 'tab': 9,\n 'enter': 13,\n 'shift': 16,\n 'control': 17,\n 'alt': 18,\n 'pause': 19,\n 'capslock': 20,\n 'space': 32,\n 'escape': 27,\n 'pageup': 33,\n 'pagedown': 34,\n 'end': 35,\n 'home': 36,\n 'leftarrow': 37,\n 'uparrow': 38,\n 'rightarrow': 39,\n 'downarrow': 40,\n 'insert': 45,\n 'delete': 46,\n 'f1': 112,\n 'f2': 113,\n 'f3': 114,\n 'f4': 115,\n 'f5': 116,\n 'f6': 117,\n 'f7': 118,\n 'f8': 119,\n 'f9': 120,\n 'f10': 121,\n 'f11': 122,\n 'f12': 123,\n 'semicolon': 186,\n 'plus': 187,\n 'comma': 188,\n 'minus': 189,\n 'dot': 190,\n 'forwardslash': 191,\n 'graveaccent': 192,\n 'openbracket': 219,\n 'backslash': 220,\n 'closebracket': 221,\n 'singlequote': 222\n};\n/**\n * KeyboardEvents class enables you to bind key action desired key combinations for ex., Ctrl+A, Delete, Alt+Space etc.\n * ```html\n *
;\n * \n * ```\n */\nvar KeyboardEvents = /** @class */ (function (_super) {\n __extends(KeyboardEvents, _super);\n /**\n * Initializes the KeyboardEvents\n * @param {HTMLElement} element\n * @param {KeyboardEventsModel} options\n */\n function KeyboardEvents(element, options) {\n var _this = _super.call(this, options, element) || this;\n /**\n * To handle a key press event returns null\n */\n _this.keyPressHandler = function (e) {\n var isAltKey = e.altKey;\n var isCtrlKey = e.ctrlKey;\n var isShiftKey = e.shiftKey;\n var curkeyCode = e.which;\n var keys = Object.keys(_this.keyConfigs);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n var configCollection = _this.keyConfigs[key].split(',');\n for (var _a = 0, configCollection_1 = configCollection; _a < configCollection_1.length; _a++) {\n var rconfig = configCollection_1[_a];\n var rKeyObj = KeyboardEvents_1.getKeyConfigData(rconfig.trim());\n if (isAltKey === rKeyObj.altKey && isCtrlKey === rKeyObj.ctrlKey &&\n isShiftKey === rKeyObj.shiftKey && curkeyCode === rKeyObj.keyCode) {\n e.action = key;\n if (_this.keyAction) {\n _this.keyAction(e);\n }\n }\n }\n }\n };\n _this.bind();\n return _this;\n }\n KeyboardEvents_1 = KeyboardEvents;\n /**\n * Unwire bound events and destroy the instance.\n * @return {void}\n */\n KeyboardEvents.prototype.destroy = function () {\n this.unwireEvents();\n _super.prototype.destroy.call(this);\n };\n /**\n * Function can be used to specify certain action if a property is changed\n * @param newProp\n * @param oldProp\n * @returns {void}\n * @private\n */\n KeyboardEvents.prototype.onPropertyChanged = function (newProp, oldProp) {\n // No code are needed\n };\n ;\n KeyboardEvents.prototype.bind = function () {\n this.wireEvents();\n };\n /**\n * To get the module name, returns 'keyboard'.\n * @private\n */\n KeyboardEvents.prototype.getModuleName = function () {\n return 'keyboard';\n };\n /**\n * Wiring event handlers to events\n */\n KeyboardEvents.prototype.wireEvents = function () {\n this.element.addEventListener(this.eventName, this.keyPressHandler);\n };\n /**\n * Unwiring event handlers to events\n */\n KeyboardEvents.prototype.unwireEvents = function () {\n this.element.removeEventListener(this.eventName, this.keyPressHandler);\n };\n /**\n * To get the key configuration data\n * @param {string} config - configuration data\n * returns {KeyData}\n */\n KeyboardEvents.getKeyConfigData = function (config) {\n if (config in this.configCache) {\n return this.configCache[config];\n }\n var keys = config.toLowerCase().split('+');\n var keyData = {\n altKey: (keys.indexOf('alt') !== -1 ? true : false),\n ctrlKey: (keys.indexOf('ctrl') !== -1 ? true : false),\n shiftKey: (keys.indexOf('shift') !== -1 ? true : false),\n keyCode: null\n };\n if (keys[keys.length - 1].length > 1 && !!Number(keys[keys.length - 1])) {\n keyData.keyCode = Number(keys[keys.length - 1]);\n }\n else {\n keyData.keyCode = KeyboardEvents_1.getKeyCode(keys[keys.length - 1]);\n }\n KeyboardEvents_1.configCache[config] = keyData;\n return keyData;\n };\n // Return the keycode value as string \n KeyboardEvents.getKeyCode = function (keyVal) {\n return keyCode[keyVal] || keyVal.toUpperCase().charCodeAt(0);\n };\n KeyboardEvents.configCache = {};\n __decorate([\n Property({})\n ], KeyboardEvents.prototype, \"keyConfigs\", void 0);\n __decorate([\n Property('keyup')\n ], KeyboardEvents.prototype, \"eventName\", void 0);\n __decorate([\n Event()\n ], KeyboardEvents.prototype, \"keyAction\", void 0);\n KeyboardEvents = KeyboardEvents_1 = __decorate([\n NotifyPropertyChanges\n ], KeyboardEvents);\n return KeyboardEvents;\n var KeyboardEvents_1;\n}(Base));\nexport { KeyboardEvents };\n","import { extend } from './util';\nimport { defaultCulture } from './internationalization';\n/**\n * L10n modules provides localized text for different culture.\n * ```typescript\n * import {setCulture} from '@syncfusion/ts-base-library';\n * //load global locale object common for all components.\n * L10n.load({\n * 'fr-BE': {\n * 'button': {\n * 'check': 'vérifié'\n * }\n * }\n * });\n * //set globale default locale culture.\n * setCulture('fr-BE');\n * let instance: L10n = new L10n('button', {\n * check: 'checked'\n * });\n * //Get locale text for current property.\n * instance.getConstant('check');\n * //Change locale culture in a component.\n * instance.setLocale('en-US');\n * ```\n */\nvar L10n = /** @class */ (function () {\n /**\n * Constructor\n */\n function L10n(controlName, localeStrings, locale) {\n this.controlName = controlName;\n this.localeStrings = localeStrings;\n this.setLocale(locale || defaultCulture);\n }\n /**\n * Sets the locale text\n * @param {string} locale\n * @returns {void}\n */\n L10n.prototype.setLocale = function (locale) {\n var intLocale = this.intGetControlConstant(L10n.locale, locale);\n this.currentLocale = intLocale || this.localeStrings;\n };\n /**\n * Sets the global locale for all components.\n * @param {Object} localeObject - specifies the localeObject to be set as global locale.\n */\n L10n.load = function (localeObject) {\n this.locale = extend(this.locale, localeObject, {}, true);\n };\n /**\n * Returns current locale text for the property based on the culture name and control name.\n * @param {string} propertyName - specifies the property for which localize text to be returned.\n * @return string\n */\n L10n.prototype.getConstant = function (prop) {\n /* tslint:disable no-any */\n return this.currentLocale[prop] || this.localeStrings[prop] || '';\n };\n /**\n * Returns the control constant object for current object and the locale specified.\n * @param {Object} curObject\n * @param {string} locale\n * @returns {Object}\n */\n L10n.prototype.intGetControlConstant = function (curObject, locale) {\n if (curObject[locale]) {\n return curObject[locale][this.controlName];\n }\n return null;\n };\n L10n.locale = {};\n return L10n;\n}());\nexport { L10n };\n","/**\n * To import utils\n */\nimport { isNullOrUndefined, } from './util';\nvar SvgRenderer = /** @class */ (function () {\n /* End-Properties */\n function SvgRenderer(rootID) {\n //Internal Variables \n this.svgLink = 'http://www.w3.org/2000/svg';\n this.rootId = rootID;\n }\n // method to get the attributes value\n /* tslint:disable */\n SvgRenderer.prototype.getOptionValue = function (options, key) {\n return options[key];\n }; /* tslint:enable */\n /**\n * To create a Html5 SVG element\n * @param {SVGAttributes} options - Options to create SVG\n * @return {Element}\n */\n SvgRenderer.prototype.createSvg = function (options) {\n if (isNullOrUndefined(options.id)) {\n options.id = this.rootId + '_svg';\n }\n this.svgObj = document.getElementById(options.id);\n if (isNullOrUndefined(document.getElementById(options.id))) {\n this.svgObj = document.createElementNS(this.svgLink, 'svg');\n }\n this.svgObj = this.setElementAttributes(options, this.svgObj);\n this.setSVGSize(options.width, options.height);\n return this.svgObj;\n };\n // method to set the height and width for the SVG element\n SvgRenderer.prototype.setSVGSize = function (width, height) {\n var element = document.getElementById(this.rootId);\n var size = !isNullOrUndefined(element) ? element.getBoundingClientRect() : null;\n if (isNullOrUndefined(this.width) || this.width <= 0) {\n this.svgObj.setAttribute('width', width ? width.toString() : size.width.toString());\n }\n else {\n this.svgObj.setAttribute('width', this.width.toString());\n }\n if (isNullOrUndefined(this.height) || this.height <= 0) {\n this.svgObj.setAttribute('height', height ? height.toString() : '450');\n }\n else {\n this.svgObj.setAttribute('height', this.height.toString());\n }\n };\n /**\n * To draw a path\n * @param {PathAttributes} options - Options to draw a path in SVG\n * @return {Element}\n */\n SvgRenderer.prototype.drawPath = function (options) {\n var path = document.getElementById(options.id);\n if (path === null) {\n path = document.createElementNS(this.svgLink, 'path');\n }\n path = this.setElementAttributes(options, path);\n return path;\n };\n /**\n * To draw a line\n * @param {LineAttributes} options - Options to draw a line in SVG\n * @return {Element}\n */\n SvgRenderer.prototype.drawLine = function (options) {\n var line = document.getElementById(options.id);\n if (line === null) {\n line = document.createElementNS(this.svgLink, 'line');\n }\n line = this.setElementAttributes(options, line);\n return line;\n };\n /**\n * To draw a rectangle\n * @param {BaseAttibutes} options - Required options to draw a rectangle in SVG\n * @return {Element}\n */\n SvgRenderer.prototype.drawRectangle = function (options) {\n var rectangle = document.getElementById(options.id);\n if (rectangle === null) {\n rectangle = document.createElementNS(this.svgLink, 'rect');\n }\n rectangle = this.setElementAttributes(options, rectangle);\n return rectangle;\n };\n /**\n * To draw a circle\n * @param {CircleAttributes} options - Required options to draw a circle in SVG\n * @return {Element}\n */\n SvgRenderer.prototype.drawCircle = function (options) {\n var circle = document.getElementById(options.id);\n if (circle === null) {\n circle = document.createElementNS(this.svgLink, 'circle');\n }\n circle = this.setElementAttributes(options, circle);\n return circle;\n };\n /**\n * To draw a polyline\n * @param {PolylineAttributes} options - Options required to draw a polyline\n * @return {Element}\n */\n SvgRenderer.prototype.drawPolyline = function (options) {\n var polyline = document.getElementById(options.id);\n if (polyline === null) {\n polyline = document.createElementNS(this.svgLink, 'polyline');\n }\n polyline = this.setElementAttributes(options, polyline);\n return polyline;\n };\n /**\n * To draw an ellipse\n * @param {EllipseAttributes} options - Options required to draw an ellipse\n * @return {Element}\n */\n SvgRenderer.prototype.drawEllipse = function (options) {\n var ellipse = document.getElementById(options.id);\n if (ellipse === null) {\n ellipse = document.createElementNS(this.svgLink, 'ellipse');\n }\n ellipse = this.setElementAttributes(options, ellipse);\n return ellipse;\n };\n /**\n * To draw a polygon\n * @param {PolylineAttributes} options - Options needed to draw a polygon in SVG\n * @return {Element}\n */\n SvgRenderer.prototype.drawPolygon = function (options) {\n var polygon = document.getElementById(options.id);\n if (polygon === null) {\n polygon = document.createElementNS(this.svgLink, 'polygon');\n }\n polygon = this.setElementAttributes(options, polygon);\n return polygon;\n };\n /**\n * To draw an image\n * @param {ImageAttributes} options - Required options to draw an image in SVG\n * @return {Element}\n */\n SvgRenderer.prototype.drawImage = function (options) {\n var img = document.createElementNS(this.svgLink, 'image');\n img.setAttributeNS(null, 'height', options.height.toString());\n img.setAttributeNS(null, 'width', options.width.toString());\n img.setAttributeNS('http://www.w3.org/1999/xlink', 'href', options.href);\n img.setAttributeNS(null, 'x', options.x.toString());\n img.setAttributeNS(null, 'y', options.y.toString());\n img.setAttributeNS(null, 'id', options.id);\n img.setAttributeNS(null, 'visibility', options.visibility);\n if (!isNullOrUndefined(this.getOptionValue(options, 'clip-path'))) {\n img.setAttributeNS(null, 'clip-path', this.getOptionValue(options, 'clip-path'));\n }\n if (!isNullOrUndefined(options.preserveAspectRatio)) {\n img.setAttributeNS(null, 'preserveAspectRatio', options.preserveAspectRatio);\n }\n return img;\n };\n /**\n * To draw a text\n * @param {TextAttributes} options - Options needed to draw a text in SVG\n * @return {Element}\n */\n SvgRenderer.prototype.createText = function (options, label) {\n var text = document.createElementNS(this.svgLink, 'text');\n text = this.setElementAttributes(options, text);\n if (!isNullOrUndefined(label)) {\n text.textContent = label;\n }\n return text;\n };\n /**\n * To create a tSpan\n * @param {TextAttributes} options - Options to create tSpan\n * @param {string} label - The text content which is to be rendered in the tSpan\n * @return {Element}\n */\n SvgRenderer.prototype.createTSpan = function (options, label) {\n var tSpan = document.createElementNS(this.svgLink, 'tspan');\n tSpan = this.setElementAttributes(options, tSpan);\n if (!isNullOrUndefined(label)) {\n tSpan.textContent = label;\n }\n return tSpan;\n };\n /**\n * To create a title\n * @param {string} text - The text content which is to be rendered in the title\n * @return {Element}\n */\n SvgRenderer.prototype.createTitle = function (text) {\n var title = document.createElementNS(this.svgLink, 'title');\n title.textContent = text;\n return title;\n };\n /**\n * To create defs element in SVG\n * @return {Element}\n */\n SvgRenderer.prototype.createDefs = function () {\n var defs = document.createElementNS(this.svgLink, 'defs');\n return defs;\n };\n /**\n * To create clip path in SVG\n * @param {BaseAttibutes} options - Options needed to create clip path\n * @return {Element}\n */\n SvgRenderer.prototype.createClipPath = function (options) {\n var clipPath = document.createElementNS(this.svgLink, 'clipPath');\n clipPath = this.setElementAttributes(options, clipPath);\n return clipPath;\n };\n /**\n * To create foreign object in SVG\n * @param {BaseAttibutes} options - Options needed to create foreign object\n * @return {Element}\n */\n SvgRenderer.prototype.createForeignObject = function (options) {\n var foreignObject = document.createElementNS(this.svgLink, 'foreignObject');\n foreignObject = this.setElementAttributes(options, foreignObject);\n return foreignObject;\n };\n /**\n * To create group element in SVG\n * @param {BaseAttibutes} options - Options needed to create group\n * @return {Element}\n */\n SvgRenderer.prototype.createGroup = function (options) {\n var group = document.createElementNS(this.svgLink, 'g');\n group = this.setElementAttributes(options, group);\n return group;\n };\n /**\n * To create pattern in SVG\n * @param {PatternAttributes} options - Required options to create pattern in SVG\n * @param {string} type - Specifies the name of the pattern\n * @return {Element}\n */\n SvgRenderer.prototype.createPattern = function (options, element) {\n var pattern = document.createElementNS(this.svgLink, element);\n pattern = this.setElementAttributes(options, pattern);\n return pattern;\n };\n /**\n * To create radial gradient in SVG\n * @param {string[]} colors - Specifies the colors required to create radial gradient\n * @param {string[]} colorStop - Specifies the colorstop required to create radial gradient\n * @param {string} name - Specifies the name of the gradient\n * @param {RadialGradient} options - value for radial gradient\n * @return {string}\n */\n SvgRenderer.prototype.createRadialGradient = function (colors, name, options) {\n var colorName;\n if (!isNullOrUndefined(colors[0].colorStop)) {\n var newOptions = {\n 'id': this.rootId + '_' + name + 'radialGradient',\n 'cx': options.cx + '%',\n 'cy': options.cy + '%',\n 'r': options.r + '%',\n 'fx': options.fx + '%',\n 'fy': options.fy + '%'\n };\n this.drawGradient('radialGradient', newOptions, colors);\n colorName = 'url(#' + this.rootId + '_' + name + 'radialGradient)';\n }\n else {\n colorName = colors[0].color.toString();\n }\n return colorName;\n };\n /**\n * To create linear gradient in SVG\n * @param {string[]} colors - Array of string specifies the values for color\n * @param {string[]} colors - Array of string specifies the values for colorStop\n * @param {string} name - Specifies the name of the gradient\n * @param {LinearGradient} options - Specifies the options for gradient\n * @return {string}\n */\n SvgRenderer.prototype.createLinearGradient = function (colors, name, options) {\n var colorName;\n if (!isNullOrUndefined(colors[0].colorStop)) {\n var newOptions = {\n 'id': this.rootId + '_' + name + 'linearGradient',\n 'x1': options.x1 + '%',\n 'y1': options.y1 + '%',\n 'x2': options.x2 + '%',\n 'y2': options.y2 + '%'\n };\n this.drawGradient('linearGradient', newOptions, colors);\n colorName = 'url(#' + this.rootId + '_' + name + 'linearGradient)';\n }\n else {\n colorName = colors[0].color.toString();\n }\n return colorName;\n };\n /**\n * To render the gradient element in SVG\n * @param {string} gradientType - Specifies the type of the gradient\n * @param {RadialGradient | LinearGradient} options - Options required to render a gradient\n * @param {string[]} colors - Array of string specifies the values for color\n * @param {string[]} colorStop - Array of string specifies the values for colorStop\n * @return {Element}\n */\n SvgRenderer.prototype.drawGradient = function (gradientType, options, colors) {\n var defs = this.createDefs();\n var gradient = document.createElementNS(this.svgLink, gradientType);\n gradient = this.setElementAttributes(options, gradient);\n for (var i = 0; i < colors.length; i++) {\n var stop_1 = document.createElementNS(this.svgLink, 'stop');\n stop_1.setAttribute('offset', colors[i].colorStop);\n stop_1.setAttribute('stop-color', colors[i].color);\n stop_1.setAttribute('stop-opacity', '1');\n gradient.appendChild(stop_1);\n }\n defs.appendChild(gradient);\n return defs;\n };\n /**\n * To render a clip path\n * @param {BaseAttibutes} options - Options required to render a clip path\n * @return {Element}\n */\n SvgRenderer.prototype.drawClipPath = function (options) {\n var defs = this.createDefs();\n var clipPath = this.createClipPath({ 'id': options.id });\n var rect = this.drawRectangle(options);\n clipPath.appendChild(rect);\n defs.appendChild(clipPath);\n return defs;\n };\n /**\n * To create circular clip path in SVG\n * @param {CircleAttributes} options - Options required to create circular clip path\n * @return {Element}\n */\n SvgRenderer.prototype.drawCircularClipPath = function (options) {\n var defs = this.createDefs();\n var clipPath = this.createClipPath({ 'id': options.id });\n var circle = this.drawCircle(options);\n clipPath.appendChild(circle);\n defs.appendChild(clipPath);\n return defs;\n };\n /**\n * To set the attributes to the element\n * @param {SVGCanvasAttributes} options - Attributes to set for the element\n * @param {Element} element - The element to which the attributes need to be set\n * @return {Element}\n */\n SvgRenderer.prototype.setElementAttributes = function (options, element) {\n var keys = Object.keys(options);\n for (var i = 0; i < keys.length; i++) {\n element.setAttribute(keys[i], options[keys[i]]);\n }\n return element;\n };\n return SvgRenderer;\n}());\nexport { SvgRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { extend } from './util';\nimport { Property, Complex, NotifyPropertyChanges, Event } from './notify-property-change';\nimport { Browser } from './browser';\nimport { Base } from './base';\nimport { ChildProperty } from './child-property';\nimport { EventHandler } from './event-handler';\n/**\n * SwipeSettings is a framework module that provides support to handle swipe event like swipe up, swipe right, etc..,\n * @private\n */\nvar SwipeSettings = /** @class */ (function (_super) {\n __extends(SwipeSettings, _super);\n function SwipeSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(50)\n ], SwipeSettings.prototype, \"swipeThresholdDistance\", void 0);\n return SwipeSettings;\n}(ChildProperty));\nexport { SwipeSettings };\nvar swipeRegex = /(Up|Down)/;\n/**\n * Touch class provides support to handle the touch event like tap, double tap, tap hold, etc..,\n * ```typescript\n * let node: HTMLElement;\n * let touchObj: Touch = new Touch({\n * element: node,\n * tap: function (e) {\n * // tap handler function code\n * }\n * tapHold: function (e) {\n * // tap hold handler function code\n * }\n * scroll: function (e) {\n * // scroll handler function code\n * }\n * swipe: function (e) {\n * // swipe handler function code\n * }\n * });\n * ```\n */\nvar Touch = /** @class */ (function (_super) {\n __extends(Touch, _super);\n /* End-Properties */\n function Touch(element, options) {\n var _this = _super.call(this, options, element) || this;\n _this.touchAction = true;\n _this.tapCount = 0;\n _this.startEvent = function (evt) {\n if (_this.touchAction === true) {\n var point = (evt.changedTouches ? evt.changedTouches[0] : evt);\n if (evt.changedTouches !== undefined) {\n _this.touchAction = false;\n }\n _this.isTouchMoved = false;\n _this.movedDirection = '';\n _this.startPoint = _this.lastMovedPoint = { clientX: point.clientX, clientY: point.clientY };\n _this.startEventData = point;\n _this.hScrollLocked = _this.vScrollLocked = false;\n _this.tStampStart = Date.now();\n _this.timeOutTapHold = setTimeout(function () { _this.tapHoldEvent(evt); }, _this.tapHoldThreshold);\n EventHandler.add(_this.element, Browser.touchMoveEvent, _this.moveEvent, _this);\n EventHandler.add(_this.element, Browser.touchEndEvent, _this.endEvent, _this);\n EventHandler.add(_this.element, Browser.touchCancelEvent, _this.cancelEvent, _this);\n }\n };\n _this.moveEvent = function (evt) {\n var point = evt.changedTouches ? evt.changedTouches[0] : evt;\n _this.movedPoint = point;\n _this.isTouchMoved = !(point.clientX === _this.startPoint.clientX && point.clientY === _this.startPoint.clientY);\n var eScrollArgs = {};\n if (_this.isTouchMoved) {\n clearTimeout(_this.timeOutTapHold);\n _this.calcScrollPoints(evt);\n var scrollArg = {\n startEvents: _this.startEventData,\n originalEvent: evt, startX: _this.startPoint.clientX,\n startY: _this.startPoint.clientY, distanceX: _this.distanceX,\n distanceY: _this.distanceY, scrollDirection: _this.scrollDirection,\n velocity: _this.getVelocity(point)\n };\n eScrollArgs = extend(eScrollArgs, {}, scrollArg);\n _this.trigger('scroll', eScrollArgs);\n _this.lastMovedPoint = { clientX: point.clientX, clientY: point.clientY };\n }\n };\n _this.cancelEvent = function (evt) {\n clearTimeout(_this.timeOutTapHold);\n clearTimeout(_this.timeOutTap);\n _this.tapCount = 0;\n _this.swipeFn(evt);\n EventHandler.remove(_this.element, Browser.touchCancelEvent, _this.cancelEvent);\n };\n _this.endEvent = function (evt) {\n _this.swipeFn(evt);\n if (!_this.isTouchMoved) {\n if (typeof _this.tap === 'function') {\n _this.trigger('tap', { originalEvent: evt, tapCount: ++_this.tapCount });\n _this.timeOutTap = setTimeout(function () {\n _this.tapCount = 0;\n }, _this.tapThreshold);\n }\n }\n _this.modeclear();\n };\n _this.swipeFn = function (evt) {\n clearTimeout(_this.timeOutTapHold);\n clearTimeout(_this.timeOutTap);\n var point = evt;\n if (evt.changedTouches) {\n point = evt.changedTouches[0];\n }\n var diffX = point.clientX - _this.startPoint.clientX;\n var diffY = point.clientY - _this.startPoint.clientY;\n diffX = Math.floor(diffX < 0 ? -1 * diffX : diffX);\n diffY = Math.floor(diffY < 0 ? -1 * diffY : diffX);\n _this.isTouchMoved = diffX > 1 || diffY > 1;\n _this.endPoint = point;\n _this.calcPoints(evt);\n var swipeArgs = {\n originalEvent: evt,\n startEvents: _this.startEventData,\n startX: _this.startPoint.clientX,\n startY: _this.startPoint.clientY,\n distanceX: _this.distanceX, distanceY: _this.distanceY, swipeDirection: _this.movedDirection,\n velocity: _this.getVelocity(point)\n };\n if (_this.isTouchMoved) {\n var eSwipeArgs = void 0;\n var tDistance = _this.swipeSettings.swipeThresholdDistance;\n eSwipeArgs = extend(eSwipeArgs, _this.defaultArgs, swipeArgs);\n var canTrigger = false;\n var ele = _this.element;\n var scrollBool = _this.isScrollable(ele);\n var moved = swipeRegex.test(_this.movedDirection);\n if ((tDistance < _this.distanceX && !moved) || (tDistance < _this.distanceY && moved)) {\n if (!scrollBool) {\n canTrigger = true;\n }\n else {\n canTrigger = _this.checkSwipe(ele, moved);\n }\n }\n if (canTrigger) {\n _this.trigger('swipe', eSwipeArgs);\n }\n }\n _this.modeclear();\n };\n _this.modeclear = function () {\n _this.modeClear = setTimeout(function () {\n _this.touchAction = true;\n }, (typeof _this.tap !== 'function' ? 0 : 10));\n _this.lastTapTime = new Date().getTime();\n EventHandler.remove(_this.element, Browser.touchMoveEvent, _this.moveEvent);\n EventHandler.remove(_this.element, Browser.touchEndEvent, _this.endEvent);\n EventHandler.remove(_this.element, Browser.touchCancelEvent, _this.cancelEvent);\n };\n _this.bind();\n return _this;\n }\n // triggers when property changed \n /**\n * @private\n * @param newProp\n * @param oldProp\n */\n Touch.prototype.onPropertyChanged = function (newProp, oldProp) {\n //No Code to handle\n };\n Touch.prototype.bind = function () {\n this.wireEvents();\n if (Browser.isIE) {\n this.element.classList.add('e-block-touch');\n }\n };\n /**\n * To destroy the touch instance.\n * @return {void}\n */\n Touch.prototype.destroy = function () {\n this.unwireEvents();\n _super.prototype.destroy.call(this);\n };\n // Need to changes the event binding once we updated the event handler.\n Touch.prototype.wireEvents = function () {\n EventHandler.add(this.element, Browser.touchStartEvent, this.startEvent, this);\n };\n Touch.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, Browser.touchStartEvent, this.startEvent);\n };\n /**\n * Returns module name as touch\n * @returns {string}\n * @private\n */\n Touch.prototype.getModuleName = function () {\n return 'touch';\n };\n /**\n * Returns if the HTML element is Scrollable.\n * @param {HTMLElement} element - HTML Element to check if Scrollable.\n * @returns {boolean}\n */\n Touch.prototype.isScrollable = function (element) {\n var eleStyle = getComputedStyle(element);\n var style = eleStyle.overflow + eleStyle.overflowX + eleStyle.overflowY;\n if ((/(auto|scroll)/).test(style)) {\n return true;\n }\n return false;\n };\n Touch.prototype.tapHoldEvent = function (evt) {\n this.tapCount = 0;\n this.touchAction = true;\n var eTapArgs;\n EventHandler.remove(this.element, Browser.touchMoveEvent, this.moveEvent);\n EventHandler.remove(this.element, Browser.touchEndEvent, this.endEvent);\n eTapArgs = { originalEvent: evt };\n this.trigger('tapHold', eTapArgs);\n EventHandler.remove(this.element, Browser.touchCancelEvent, this.cancelEvent);\n };\n Touch.prototype.calcPoints = function (evt) {\n var point = evt.changedTouches ? evt.changedTouches[0] : evt;\n this.defaultArgs = { originalEvent: evt };\n this.distanceX = Math.abs((Math.abs(point.clientX) - Math.abs(this.startPoint.clientX)));\n this.distanceY = Math.abs((Math.abs(point.clientY) - Math.abs(this.startPoint.clientY)));\n if (this.distanceX > this.distanceY) {\n this.movedDirection = (point.clientX > this.startPoint.clientX) ? 'Right' : 'Left';\n }\n else {\n this.movedDirection = (point.clientY < this.startPoint.clientY) ? 'Up' : 'Down';\n }\n };\n Touch.prototype.calcScrollPoints = function (evt) {\n var point = evt.changedTouches ? evt.changedTouches[0] : evt;\n this.defaultArgs = { originalEvent: evt };\n this.distanceX = Math.abs((Math.abs(point.clientX) - Math.abs(this.lastMovedPoint.clientX)));\n this.distanceY = Math.abs((Math.abs(point.clientY) - Math.abs(this.lastMovedPoint.clientY)));\n if ((this.distanceX > this.distanceY || this.hScrollLocked === true) && this.vScrollLocked === false) {\n this.scrollDirection = (point.clientX > this.lastMovedPoint.clientX) ? 'Right' : 'Left';\n this.hScrollLocked = true;\n }\n else {\n this.scrollDirection = (point.clientY < this.lastMovedPoint.clientY) ? 'Up' : 'Down';\n this.vScrollLocked = true;\n }\n };\n Touch.prototype.getVelocity = function (pnt) {\n var newX = pnt.clientX;\n var newY = pnt.clientY;\n var newT = Date.now();\n var xDist = newX - this.startPoint.clientX;\n var yDist = newY - this.startPoint.clientX;\n var interval = newT - this.tStampStart;\n return Math.sqrt(xDist * xDist + yDist * yDist) / interval;\n };\n // tslint:disable-next-line:no-any\n Touch.prototype.checkSwipe = function (ele, flag) {\n var keys = ['scroll', 'offset'];\n var temp = flag ? ['Height', 'Top'] : ['Width', 'Left'];\n if ((ele[keys[0] + temp[0]] <= ele[keys[1] + temp[0]])) {\n return true;\n }\n return (ele[keys[0] + temp[1]] === 0) ||\n (ele[keys[1] + temp[0]] + ele[keys[0] + temp[1]] >= ele[keys[0] + temp[0]]);\n };\n __decorate([\n Event()\n ], Touch.prototype, \"tap\", void 0);\n __decorate([\n Event()\n ], Touch.prototype, \"tapHold\", void 0);\n __decorate([\n Event()\n ], Touch.prototype, \"swipe\", void 0);\n __decorate([\n Event()\n ], Touch.prototype, \"scroll\", void 0);\n __decorate([\n Property(350)\n ], Touch.prototype, \"tapThreshold\", void 0);\n __decorate([\n Property(750)\n ], Touch.prototype, \"tapHoldThreshold\", void 0);\n __decorate([\n Complex({}, SwipeSettings)\n ], Touch.prototype, \"swipeSettings\", void 0);\n Touch = __decorate([\n NotifyPropertyChanges\n ], Touch);\n return Touch;\n}(Base));\nexport { Touch };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, NotifyPropertyChanges, Component } from '@syncfusion/ej2-base';\nimport { addClass, createElement, detach, removeClass, rippleEffect, EventHandler } from '@syncfusion/ej2-base';\nimport { getTextNode } from '../common/common';\nvar cssClassName = {\n RTL: 'e-rtl',\n BUTTON: 'e-btn',\n PRIMARY: 'e-primary',\n ICONBTN: 'e-icon-btn'\n};\n/**\n * The Button is a graphical user interface element that triggers an event on its click action. It can contain a text, an image, or both.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar Button = /** @class */ (function (_super) {\n __extends(Button, _super);\n /**\n * Constructor for creating the widget\n * @param {ButtonModel} options?\n * @param {string|HTMLButtonElement} element?\n */\n function Button(options, element) {\n return _super.call(this, options, element) || this;\n }\n Button.prototype.preRender = function () {\n // pre render code snippets\n };\n /**\n * Initialize the control rendering\n * @returns void\n * @private\n */\n Button.prototype.render = function () {\n this.initialize();\n };\n Button.prototype.initialize = function () {\n if (this.cssClass) {\n addClass([this.element], this.cssClass.split(' '));\n }\n if (this.isPrimary) {\n this.element.classList.add(cssClassName.PRIMARY);\n }\n if (this.content) {\n this.element.innerHTML = this.content;\n }\n this.setIconCss();\n if (this.enableRtl) {\n this.element.classList.add(cssClassName.RTL);\n }\n if (this.disabled) {\n this.controlStatus(this.disabled);\n }\n else {\n this.wireEvents();\n }\n this.removeRippleEffect = rippleEffect(this.element, { selector: '.' + cssClassName.BUTTON });\n };\n Button.prototype.controlStatus = function (disabled) {\n this.element.disabled = disabled;\n };\n Button.prototype.setIconCss = function () {\n if (this.iconCss) {\n var span = createElement('span', { className: 'e-btn-icon ' + this.iconCss });\n if (!this.element.textContent.trim()) {\n this.element.classList.add(cssClassName.ICONBTN);\n }\n else {\n span.classList.add('e-icon-' + this.iconPosition.toLowerCase());\n }\n var node = this.element.childNodes[0];\n if (node && (this.iconPosition === 'Left')) {\n this.element.insertBefore(span, node);\n }\n else {\n this.element.appendChild(span);\n }\n }\n };\n Button.prototype.wireEvents = function () {\n if (this.isToggle) {\n EventHandler.add(this.element, 'click', this.btnClickHandler, this);\n }\n };\n Button.prototype.unWireEvents = function () {\n if (this.isToggle) {\n EventHandler.remove(this.element, 'click', this.btnClickHandler);\n }\n };\n Button.prototype.btnClickHandler = function () {\n if (this.element.classList.contains('e-active')) {\n this.element.classList.remove('e-active');\n }\n else {\n this.element.classList.add('e-active');\n }\n };\n /**\n * Destroys the widget.\n * @returns void\n */\n Button.prototype.destroy = function () {\n var span;\n var element = this.element;\n _super.prototype.destroy.call(this);\n removeClass([this.element], [cssClassName.PRIMARY, cssClassName.RTL, cssClassName.ICONBTN, 'e-success',\n 'e-info', 'e-danger', 'e-warning', 'e-flat', 'e-outline', 'e-small', 'e-bigger', 'e-active', 'e-round']);\n ['e-ripple', 'disabled'].forEach(function (value) {\n element.removeAttribute(value);\n });\n if (this.content) {\n element.innerHTML = element.innerHTML.replace(this.content, '');\n }\n span = element.querySelector('span.e-btn-icon');\n if (span) {\n detach(span);\n }\n this.unWireEvents();\n this.removeRippleEffect();\n };\n /**\n * Get component name.\n * @returns string\n * @private\n */\n Button.prototype.getModuleName = function () {\n return 'btn';\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @returns string\n */\n Button.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * Called internally if any of the property value changed.\n * @param {Button} newProp\n * @param {Button} oldProp\n * @returns void\n * @private\n */\n Button.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'isPrimary':\n if (newProp.isPrimary) {\n this.element.classList.add(cssClassName.PRIMARY);\n }\n else {\n this.element.classList.remove(cssClassName.PRIMARY);\n }\n break;\n case 'disabled':\n this.controlStatus(newProp.disabled);\n this.unWireEvents();\n break;\n case 'iconCss':\n var span = this.element.querySelector('span.e-btn-icon');\n if (span) {\n span.className = 'e-btn-icon ' + newProp.iconCss;\n if (this.element.textContent.trim()) {\n if (this.iconPosition === 'Left') {\n span.classList.add('e-icon-left');\n }\n else {\n span.classList.add('e-icon-right');\n }\n }\n }\n else {\n this.setIconCss();\n }\n break;\n case 'iconPosition':\n span = this.element.querySelector('span.e-btn-icon');\n if (span) {\n detach(span);\n }\n this.setIconCss();\n break;\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([this.element], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([this.element], newProp.cssClass.split(' '));\n }\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n this.element.classList.add(cssClassName.RTL);\n }\n else {\n this.element.classList.remove(cssClassName.RTL);\n }\n break;\n case 'content':\n var node = getTextNode(this.element);\n if (!node) {\n this.element.classList.remove(cssClassName.ICONBTN);\n }\n this.element.innerHTML = newProp.content;\n this.setIconCss();\n break;\n case 'isToggle':\n if (newProp.isToggle) {\n EventHandler.add(this.element, 'click', this.btnClickHandler, this);\n }\n else {\n EventHandler.remove(this.element, 'click', this.btnClickHandler);\n removeClass([this.element], ['e-active']);\n }\n break;\n }\n }\n };\n __decorate([\n Property('Left')\n ], Button.prototype, \"iconPosition\", void 0);\n __decorate([\n Property('')\n ], Button.prototype, \"iconCss\", void 0);\n __decorate([\n Property(false)\n ], Button.prototype, \"disabled\", void 0);\n __decorate([\n Property(false)\n ], Button.prototype, \"isPrimary\", void 0);\n __decorate([\n Property('')\n ], Button.prototype, \"cssClass\", void 0);\n __decorate([\n Property('')\n ], Button.prototype, \"content\", void 0);\n __decorate([\n Property(false)\n ], Button.prototype, \"isToggle\", void 0);\n Button = __decorate([\n NotifyPropertyChanges\n ], Button);\n return Button;\n}(Component));\nexport { Button };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, NotifyPropertyChanges, Property } from '@syncfusion/ej2-base';\nimport { Event, EventHandler } from '@syncfusion/ej2-base';\nimport { addClass, createElement, detach, getUniqueID, isRippleEnabled, removeClass, rippleEffect } from '@syncfusion/ej2-base';\nimport { wrapperInitialize, rippleMouseHandler } from './../common/common';\nvar CHECK = 'e-check';\nvar DISABLED = 'e-checkbox-disabled';\nvar FRAME = 'e-frame';\nvar INDETERMINATE = 'e-stop';\nvar LABEL = 'e-label';\nvar RIPPLE = 'e-ripple-container';\nvar RIPPLECHECK = 'e-ripple-check';\nvar RIPPLEINDETERMINATE = 'e-ripple-stop';\nvar RTL = 'e-rtl';\nvar WRAPPER = 'e-checkbox-wrapper';\n/**\n * The CheckBox is a graphical user interface element that allows you to select one or more options from the choices.\n * It contains checked, unchecked, and indeterminate states.\n * ```html\n * \n * \n * ```\n */\nvar CheckBox = /** @class */ (function (_super) {\n __extends(CheckBox, _super);\n /**\n * Constructor for creating the widget\n * @private\n */\n function CheckBox(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isKeyPressed = false;\n return _this;\n }\n CheckBox.prototype.changeState = function (state) {\n var ariaState;\n var rippleSpan;\n var frameSpan = this.getWrapper().getElementsByClassName(FRAME)[0];\n if (isRippleEnabled) {\n rippleSpan = this.getWrapper().getElementsByClassName(RIPPLE)[0];\n }\n if (state === 'check') {\n frameSpan.classList.remove(INDETERMINATE);\n frameSpan.classList.add(CHECK);\n if (rippleSpan) {\n rippleSpan.classList.remove(RIPPLEINDETERMINATE);\n rippleSpan.classList.add(RIPPLECHECK);\n }\n ariaState = 'true';\n this.element.checked = true;\n }\n else if (state === 'uncheck') {\n removeClass([frameSpan], [CHECK, INDETERMINATE]);\n if (rippleSpan) {\n removeClass([rippleSpan], [RIPPLECHECK, RIPPLEINDETERMINATE]);\n }\n ariaState = 'false';\n this.element.checked = false;\n }\n else {\n frameSpan.classList.remove(CHECK);\n frameSpan.classList.add(INDETERMINATE);\n if (rippleSpan) {\n rippleSpan.classList.remove(RIPPLECHECK);\n rippleSpan.classList.add(RIPPLEINDETERMINATE);\n }\n ariaState = 'mixed';\n this.element.indeterminate = true;\n }\n this.getWrapper().setAttribute('aria-checked', ariaState);\n };\n CheckBox.prototype.clickHandler = function (event) {\n this.focusOutHandler();\n if (this.indeterminate) {\n this.changeState(this.checked ? 'check' : 'uncheck');\n this.indeterminate = false;\n this.element.indeterminate = false;\n }\n else if (this.checked) {\n this.changeState('uncheck');\n this.checked = false;\n }\n else {\n this.changeState('check');\n this.checked = true;\n }\n var changeEventArgs = { checked: this.element.checked, event: event };\n this.trigger('change', changeEventArgs);\n };\n /**\n * Destroys the widget.\n * @returns void\n */\n CheckBox.prototype.destroy = function () {\n var _this = this;\n var wrapper = this.getWrapper();\n _super.prototype.destroy.call(this);\n if (!this.disabled) {\n this.unWireEvents();\n }\n if (this.tagName === 'INPUT') {\n wrapper.parentNode.insertBefore(this.element, wrapper);\n detach(wrapper);\n this.element.checked = false;\n if (this.indeterminate) {\n this.element.indeterminate = false;\n }\n ['name', 'value', 'disabled'].forEach(function (key) {\n _this.element.removeAttribute(key);\n });\n }\n else {\n ['role', 'aria-checked', 'class'].forEach(function (key) {\n wrapper.removeAttribute(key);\n });\n if (this.element.id) {\n wrapper.setAttribute('id', this.element.id);\n }\n wrapper.innerHTML = '';\n }\n };\n CheckBox.prototype.focusHandler = function () {\n if (this.isKeyPressed) {\n this.getWrapper().classList.add('e-focus');\n }\n };\n CheckBox.prototype.focusOutHandler = function () {\n this.getWrapper().classList.remove('e-focus');\n };\n /**\n * Gets the module name.\n * @private\n */\n CheckBox.prototype.getModuleName = function () {\n return 'checkbox';\n };\n /**\n * Gets the properties to be maintained in the persistence state.\n * @private\n */\n CheckBox.prototype.getPersistData = function () {\n return this.addOnPersist(['checked', 'indeterminate']);\n };\n CheckBox.prototype.getWrapper = function () {\n return this.element.parentElement.parentElement;\n };\n CheckBox.prototype.initialize = function () {\n if (this.name) {\n this.element.setAttribute('name', this.name);\n }\n if (this.value) {\n this.element.setAttribute('value', this.value);\n }\n if (this.checked) {\n this.changeState('check');\n }\n if (this.indeterminate) {\n this.changeState();\n }\n if (this.disabled) {\n this.setDisabled();\n }\n };\n CheckBox.prototype.initWrapper = function () {\n var wrapper = this.element.parentElement;\n if (!wrapper.classList.contains(WRAPPER)) {\n wrapper = createElement('div', {\n className: WRAPPER, attrs: { 'role': 'checkbox', 'aria-checked': 'false' }\n });\n this.element.parentNode.insertBefore(wrapper, this.element);\n }\n var label = createElement('label', { attrs: { for: this.element.id } });\n var frameSpan = createElement('span', { className: 'e-icons ' + FRAME });\n if (this.enableRtl) {\n wrapper.classList.add(RTL);\n }\n if (this.cssClass) {\n addClass([wrapper], this.cssClass.split(' '));\n }\n wrapper.appendChild(label);\n label.appendChild(this.element);\n label.appendChild(frameSpan);\n if (isRippleEnabled) {\n var rippleSpan = createElement('span', { className: RIPPLE });\n if (this.labelPosition === 'Before') {\n label.appendChild(rippleSpan);\n }\n else {\n label.insertBefore(rippleSpan, frameSpan);\n }\n rippleEffect(rippleSpan, { duration: 400, isCenterRipple: true });\n }\n if (this.label) {\n this.setText(this.label);\n }\n };\n CheckBox.prototype.keyDownHandler = function () {\n this.isKeyPressed = true;\n };\n CheckBox.prototype.labelMouseHandler = function (e) {\n var rippleSpan = this.getWrapper().getElementsByClassName(RIPPLE)[0];\n rippleMouseHandler(e, rippleSpan);\n };\n CheckBox.prototype.mouseDownHandler = function () {\n this.isKeyPressed = false;\n };\n /**\n * Called internally if any of the property value changes.\n * @private\n */\n CheckBox.prototype.onPropertyChanged = function (newProp, oldProp) {\n var wrapper = this.getWrapper();\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'checked':\n this.indeterminate = false;\n this.element.indeterminate = false;\n this.changeState(newProp.checked ? 'check' : 'uncheck');\n break;\n case 'indeterminate':\n if (newProp.indeterminate) {\n this.changeState();\n }\n else {\n this.element.indeterminate = false;\n this.changeState(this.checked ? 'check' : 'uncheck');\n }\n break;\n case 'disabled':\n if (newProp.disabled) {\n this.setDisabled();\n this.unWireEvents();\n }\n else {\n this.element.disabled = false;\n wrapper.classList.remove(DISABLED);\n wrapper.setAttribute('aria-disabled', 'false');\n this.wireEvents();\n }\n break;\n case 'cssClass':\n if (oldProp.cssClass) {\n wrapper.classList.remove(oldProp.cssClass);\n }\n wrapper.classList.add(newProp.cssClass);\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n wrapper.classList.add(RTL);\n }\n else {\n wrapper.classList.remove(RTL);\n }\n break;\n case 'label':\n this.setText(newProp.label);\n break;\n case 'labelPosition':\n var label = wrapper.getElementsByClassName(LABEL)[0];\n var labelWrap = wrapper.getElementsByTagName('label')[0];\n detach(label);\n if (newProp.labelPosition === 'After') {\n labelWrap.appendChild(label);\n }\n else {\n labelWrap.insertBefore(label, wrapper.getElementsByClassName(FRAME)[0]);\n }\n break;\n case 'name':\n this.element.setAttribute('name', newProp.name);\n break;\n case 'value':\n this.element.setAttribute('value', newProp.value);\n break;\n }\n }\n };\n /**\n * Initialize Angular, React and Unique ID support.\n * @private\n */\n CheckBox.prototype.preRender = function () {\n var element = this.element;\n this.tagName = this.element.tagName;\n element = wrapperInitialize('EJS-CHECKBOX', 'checkbox', element, WRAPPER, 'checkbox');\n this.element = element;\n if (this.element.getAttribute('type') !== 'checkbox') {\n this.element.setAttribute('type', 'checkbox');\n }\n if (!this.element.id) {\n this.element.id = getUniqueID('e-' + this.getModuleName());\n }\n };\n /**\n * Initialize the control rendering\n * @private\n */\n CheckBox.prototype.render = function () {\n this.initWrapper();\n this.initialize();\n if (!this.disabled) {\n this.wireEvents();\n }\n };\n CheckBox.prototype.setDisabled = function () {\n var wrapper = this.getWrapper();\n this.element.disabled = true;\n wrapper.classList.add(DISABLED);\n wrapper.setAttribute('aria-disabled', 'true');\n };\n CheckBox.prototype.setText = function (text) {\n var label = this.getWrapper().getElementsByClassName(LABEL)[0];\n if (label) {\n label.textContent = text;\n }\n else {\n label = createElement('span', { className: LABEL, innerHTML: text });\n var labelWrap = this.getWrapper().getElementsByTagName('label')[0];\n if (this.labelPosition === 'Before') {\n labelWrap.insertBefore(label, this.getWrapper().getElementsByClassName(FRAME)[0]);\n }\n else {\n labelWrap.appendChild(label);\n }\n }\n };\n CheckBox.prototype.unWireEvents = function () {\n var wrapper = this.getWrapper();\n EventHandler.remove(this.element, 'click', this.clickHandler);\n EventHandler.remove(document, 'keydown', this.keyDownHandler);\n EventHandler.remove(wrapper, 'mousedown', this.mouseDownHandler);\n EventHandler.remove(this.element, 'focus', this.focusHandler);\n EventHandler.remove(this.element, 'focusout', this.focusOutHandler);\n var label = wrapper.getElementsByTagName('label')[0];\n EventHandler.remove(label, 'mousedown', this.labelMouseHandler);\n EventHandler.remove(label, 'mouseup', this.labelMouseHandler);\n };\n CheckBox.prototype.wireEvents = function () {\n var wrapper = this.getWrapper();\n EventHandler.add(this.element, 'click', this.clickHandler, this);\n EventHandler.add(document, 'keydown', this.keyDownHandler, this);\n EventHandler.add(wrapper, 'mousedown', this.mouseDownHandler, this);\n EventHandler.add(this.element, 'focus', this.focusHandler, this);\n EventHandler.add(this.element, 'focusout', this.focusOutHandler, this);\n var label = wrapper.getElementsByTagName('label')[0];\n EventHandler.add(label, 'mousedown', this.labelMouseHandler, this);\n EventHandler.add(label, 'mouseup', this.labelMouseHandler, this);\n };\n __decorate([\n Event()\n ], CheckBox.prototype, \"change\", void 0);\n __decorate([\n Property(false)\n ], CheckBox.prototype, \"checked\", void 0);\n __decorate([\n Property('')\n ], CheckBox.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], CheckBox.prototype, \"disabled\", void 0);\n __decorate([\n Property(false)\n ], CheckBox.prototype, \"indeterminate\", void 0);\n __decorate([\n Property('')\n ], CheckBox.prototype, \"label\", void 0);\n __decorate([\n Property('After')\n ], CheckBox.prototype, \"labelPosition\", void 0);\n __decorate([\n Property('')\n ], CheckBox.prototype, \"name\", void 0);\n __decorate([\n Property('')\n ], CheckBox.prototype, \"value\", void 0);\n CheckBox = __decorate([\n NotifyPropertyChanges\n ], CheckBox);\n return CheckBox;\n}(Component));\nexport { CheckBox };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, rippleEffect, NotifyPropertyChanges, Property } from '@syncfusion/ej2-base';\nimport { addClass, createElement, getInstance, getUniqueID, isRippleEnabled, removeClass } from '@syncfusion/ej2-base';\nimport { detach, Event, EventHandler } from '@syncfusion/ej2-base';\nimport { wrapperInitialize, rippleMouseHandler } from './../common/common';\nvar LABEL = 'e-label';\nvar RIPPLE = 'e-ripple-container';\nvar RTL = 'e-rtl';\nvar WRAPPER = 'e-radio-wrapper';\n/**\n * The RadioButton is a graphical user interface element that allows you to select one option from the choices.\n * It contains checked and unchecked states.\n * ```html\n * \n * \n * ```\n */\nvar RadioButton = /** @class */ (function (_super) {\n __extends(RadioButton, _super);\n /**\n * Constructor for creating the widget\n * @private\n */\n function RadioButton(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isKeyPressed = false;\n return _this;\n }\n RadioButton_1 = RadioButton;\n RadioButton.prototype.changeHandler = function (event) {\n this.checked = true;\n this.dataBind();\n var changeEventArgs = { value: this.value, event: event };\n this.trigger('change', changeEventArgs);\n };\n RadioButton.prototype.updateChange = function (state) {\n var input;\n var name = this.element.getAttribute('name');\n var radioGrp = document.querySelectorAll('input.e-radio[name=\"' + name + '\"]');\n for (var i = 0; i < radioGrp.length; i++) {\n input = radioGrp[i];\n if (input !== this.element) {\n getInstance(input, RadioButton_1).checked = false;\n }\n }\n };\n /**\n * Destroys the widget.\n * @returns void\n */\n RadioButton.prototype.destroy = function () {\n var _this = this;\n var radioWrap = this.element.parentElement;\n _super.prototype.destroy.call(this);\n if (!this.disabled) {\n this.unWireEvents();\n }\n if (this.tagName === 'INPUT') {\n radioWrap.parentNode.insertBefore(this.element, radioWrap);\n detach(radioWrap);\n this.element.checked = false;\n ['name', 'value', 'disabled'].forEach(function (key) {\n _this.element.removeAttribute(key);\n });\n }\n else {\n ['role', 'aria-checked', 'class'].forEach(function (key) {\n radioWrap.removeAttribute(key);\n });\n if (this.element.id) {\n radioWrap.setAttribute('id', this.element.id);\n }\n radioWrap.innerHTML = '';\n }\n };\n RadioButton.prototype.focusHandler = function () {\n if (this.isKeyPressed) {\n this.getLabel().classList.add('e-focus');\n }\n };\n RadioButton.prototype.focusOutHandler = function () {\n this.getLabel().classList.remove('e-focus');\n };\n RadioButton.prototype.getModuleName = function () {\n return 'radio';\n };\n /**\n * Gets the properties to be maintained in the persistence state.\n * @private\n */\n RadioButton.prototype.getPersistData = function () {\n return this.addOnPersist(['checked']);\n };\n RadioButton.prototype.getLabel = function () {\n return this.element.nextElementSibling;\n };\n RadioButton.prototype.initialize = function () {\n this.initWrapper();\n if (this.name) {\n this.element.setAttribute('name', this.name);\n }\n if (this.value) {\n this.element.setAttribute('value', this.value);\n }\n if (this.checked) {\n this.element.checked = true;\n }\n if (this.disabled) {\n this.setDisabled();\n }\n };\n RadioButton.prototype.initWrapper = function () {\n var rippleSpan;\n var wrapper = this.element.parentElement;\n if (!wrapper.classList.contains(WRAPPER)) {\n wrapper = createElement('div', { className: WRAPPER });\n this.element.parentNode.insertBefore(wrapper, this.element);\n }\n var label = createElement('label', { attrs: { for: this.element.id } });\n wrapper.appendChild(this.element);\n wrapper.appendChild(label);\n if (isRippleEnabled) {\n rippleSpan = createElement('span', { className: (RIPPLE) });\n label.appendChild(rippleSpan);\n rippleEffect(rippleSpan, {\n duration: 400,\n isCenterRipple: true\n });\n }\n if (this.enableRtl) {\n label.classList.add(RTL);\n }\n if (this.cssClass) {\n addClass([label], this.cssClass.split(' '));\n }\n if (this.label) {\n this.setText(this.label);\n }\n };\n RadioButton.prototype.keyDownHandler = function () {\n this.isKeyPressed = true;\n };\n RadioButton.prototype.labelRippleHandler = function (e) {\n var ripple = this.getLabel().getElementsByClassName(RIPPLE)[0];\n rippleMouseHandler(e, ripple);\n };\n RadioButton.prototype.mouseDownHandler = function () {\n this.isKeyPressed = false;\n };\n /**\n * Called internally if any of the property value changes.\n * @private\n */\n RadioButton.prototype.onPropertyChanged = function (newProp, oldProp) {\n var label = this.getLabel();\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'checked':\n if (newProp.checked) {\n this.updateChange(newProp.checked);\n }\n this.element.checked = newProp.checked;\n break;\n case 'disabled':\n if (newProp.disabled) {\n this.setDisabled();\n this.unWireEvents();\n }\n else {\n this.element.disabled = false;\n this.wireEvents();\n }\n break;\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([label], oldProp.cssClass.split(' '));\n }\n addClass([label], newProp.cssClass.split(' '));\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n label.classList.add(RTL);\n }\n else {\n label.classList.remove(RTL);\n }\n break;\n case 'label':\n this.setText(newProp.label);\n break;\n case 'labelPosition':\n if (newProp.labelPosition === 'Before') {\n label.classList.add('e-right');\n }\n else {\n label.classList.remove('e-right');\n }\n break;\n case 'name':\n this.element.setAttribute('name', newProp.name);\n break;\n case 'value':\n this.element.setAttribute('value', newProp.value);\n break;\n }\n }\n };\n /**\n * Initialize checked Property, Angular and React and Unique ID support.\n * @private\n */\n RadioButton.prototype.preRender = function () {\n var element = this.element;\n this.tagName = this.element.tagName;\n element = wrapperInitialize('EJS-RADIOBUTTON', 'radio', element, WRAPPER, 'radio');\n this.element = element;\n if (this.element.getAttribute('type') !== 'radio') {\n this.element.setAttribute('type', 'radio');\n }\n if (!this.element.id) {\n this.element.id = getUniqueID('e-' + this.getModuleName());\n }\n };\n /**\n * Initialize the control rendering\n * @private\n */\n RadioButton.prototype.render = function () {\n this.initialize();\n if (!this.disabled) {\n this.wireEvents();\n }\n };\n RadioButton.prototype.setDisabled = function () {\n this.element.disabled = true;\n };\n RadioButton.prototype.setText = function (text) {\n var label = this.getLabel();\n var textLabel = label.getElementsByClassName(LABEL)[0];\n if (textLabel) {\n textLabel.textContent = text;\n }\n else {\n textLabel = createElement('span', { className: LABEL, innerHTML: text });\n label.appendChild(textLabel);\n }\n if (this.labelPosition === 'Before') {\n this.getLabel().classList.add('e-right');\n }\n else {\n this.getLabel().classList.remove('e-right');\n }\n };\n RadioButton.prototype.unWireEvents = function () {\n var label = this.getLabel();\n EventHandler.remove(this.element, 'change', this.changeHandler);\n EventHandler.remove(document, 'keydown', this.keyDownHandler);\n EventHandler.remove(label, 'mousedown', this.mouseDownHandler);\n EventHandler.remove(this.element, 'focus', this.focusHandler);\n EventHandler.remove(this.element, 'focusout', this.focusOutHandler);\n var rippleLabel = label.getElementsByClassName(LABEL)[0];\n if (rippleLabel) {\n EventHandler.remove(rippleLabel, 'mousedown', this.labelRippleHandler);\n EventHandler.remove(rippleLabel, 'mouseup', this.labelRippleHandler);\n }\n };\n RadioButton.prototype.wireEvents = function () {\n var label = this.getLabel();\n EventHandler.add(this.element, 'change', this.changeHandler, this);\n EventHandler.add(document, 'keydown', this.keyDownHandler, this);\n EventHandler.add(label, 'mousedown', this.mouseDownHandler, this);\n EventHandler.add(this.element, 'focus', this.focusHandler, this);\n EventHandler.add(this.element, 'focusout', this.focusOutHandler, this);\n var rippleLabel = label.getElementsByClassName(LABEL)[0];\n if (rippleLabel) {\n EventHandler.add(rippleLabel, 'mousedown', this.labelRippleHandler, this);\n EventHandler.add(rippleLabel, 'mouseup', this.labelRippleHandler, this);\n }\n };\n __decorate([\n Event()\n ], RadioButton.prototype, \"change\", void 0);\n __decorate([\n Property(false)\n ], RadioButton.prototype, \"checked\", void 0);\n __decorate([\n Property('')\n ], RadioButton.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], RadioButton.prototype, \"disabled\", void 0);\n __decorate([\n Property('')\n ], RadioButton.prototype, \"label\", void 0);\n __decorate([\n Property('After')\n ], RadioButton.prototype, \"labelPosition\", void 0);\n __decorate([\n Property('')\n ], RadioButton.prototype, \"name\", void 0);\n __decorate([\n Property('')\n ], RadioButton.prototype, \"value\", void 0);\n RadioButton = RadioButton_1 = __decorate([\n NotifyPropertyChanges\n ], RadioButton);\n return RadioButton;\n var RadioButton_1;\n}(Component));\nexport { RadioButton };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, NotifyPropertyChanges, Property } from '@syncfusion/ej2-base';\nimport { Event, EventHandler } from '@syncfusion/ej2-base';\nimport { addClass, createElement, isRippleEnabled, removeClass, rippleEffect } from '@syncfusion/ej2-base';\nimport { rippleMouseHandler, destroy, preRender } from './../common/common';\nvar CHECK = 'e-check';\nvar DISABLED = 'e-switch-disabled';\nvar RIPPLE = 'e-ripple-container';\nvar RIPPLE_CHECK = 'e-ripple-check';\nvar RTL = 'e-rtl';\nvar WRAPPER = 'e-switch-wrapper';\nvar ACTIVE = 'e-switch-active';\n/**\n * The Switch is a graphical user interface element that allows you to toggle between checked and unchecked states.\n * ```html\n * \n * \n * ```\n */\nvar Switch = /** @class */ (function (_super) {\n __extends(Switch, _super);\n /**\n * Constructor for creating the widget.\n * @private\n */\n function Switch(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isKeyPressed = false;\n _this.isDrag = false;\n return _this;\n }\n Switch.prototype.changeState = function (state) {\n var ariaState;\n var rippleSpan;\n var wrapper = this.getWrapper();\n var bar = wrapper.querySelector('.e-switch-inner');\n var handle = wrapper.querySelector('.e-switch-handle');\n if (isRippleEnabled) {\n rippleSpan = wrapper.getElementsByClassName(RIPPLE)[0];\n }\n if (state) {\n addClass([bar, handle], ACTIVE);\n ariaState = 'true';\n this.element.checked = true;\n this.checked = true;\n if (rippleSpan) {\n addClass([rippleSpan], [RIPPLE_CHECK]);\n }\n }\n else {\n removeClass([bar, handle], ACTIVE);\n ariaState = 'false';\n this.element.checked = false;\n this.checked = false;\n if (rippleSpan) {\n removeClass([rippleSpan], [RIPPLE_CHECK]);\n }\n }\n wrapper.setAttribute('aria-checked', ariaState);\n };\n Switch.prototype.clickHandler = function (evt) {\n this.isDrag = false;\n this.focusOutHandler();\n this.changeState(!this.checked);\n this.element.focus();\n var changeEventArgs = { checked: this.element.checked, event: evt };\n this.trigger('change', changeEventArgs);\n };\n /**\n * Destroys the Switch widget.\n * @returns void\n */\n Switch.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n if (!this.disabled) {\n this.unWireEvents();\n }\n destroy(this, this.getWrapper(), this.tagName);\n };\n Switch.prototype.focusHandler = function () {\n if (this.isKeyPressed) {\n this.getWrapper().classList.add('e-focus');\n }\n };\n Switch.prototype.focusOutHandler = function () {\n this.getWrapper().classList.remove('e-focus');\n };\n /**\n * Gets the module name.\n * @private\n */\n Switch.prototype.getModuleName = function () {\n return 'switch';\n };\n /**\n * Gets the properties to be maintained in the persistence state.\n * @private\n */\n Switch.prototype.getPersistData = function () {\n return this.addOnPersist(['checked']);\n };\n Switch.prototype.getWrapper = function () {\n return this.element.parentElement;\n };\n Switch.prototype.initialize = function () {\n if (this.name) {\n this.element.setAttribute('name', this.name);\n }\n if (this.value) {\n this.element.setAttribute('value', this.value);\n }\n if (this.checked) {\n this.changeState(true);\n }\n if (this.disabled) {\n this.setDisabled();\n }\n if (this.onLabel || this.offLabel) {\n this.setLabel(this.onLabel, this.offLabel);\n }\n };\n Switch.prototype.initWrapper = function () {\n var wrapper = this.element.parentElement;\n if (!wrapper.classList.contains(WRAPPER)) {\n wrapper = createElement('div', {\n className: WRAPPER, attrs: { 'role': 'switch', 'aria-checked': 'false' }\n });\n this.element.parentNode.insertBefore(wrapper, this.element);\n }\n var switchInner = createElement('span', { className: 'e-switch-inner' });\n var onLabel = createElement('span', { className: 'e-switch-on' });\n var offLabel = createElement('span', { className: 'e-switch-off' });\n var handle = createElement('span', { className: 'e-switch-handle' });\n wrapper.appendChild(this.element);\n switchInner.appendChild(onLabel);\n switchInner.appendChild(offLabel);\n wrapper.appendChild(switchInner);\n wrapper.appendChild(handle);\n if (isRippleEnabled) {\n var rippleSpan = createElement('span', { className: RIPPLE });\n handle.appendChild(rippleSpan);\n rippleEffect(rippleSpan, { duration: 400, isCenterRipple: true });\n }\n if (this.enableRtl) {\n wrapper.classList.add(RTL);\n }\n if (this.cssClass) {\n addClass([wrapper], this.cssClass.split(' '));\n }\n };\n /**\n * Called internally if any of the property value changes.\n * @private\n */\n Switch.prototype.onPropertyChanged = function (newProp, oldProp) {\n var wrapper = this.getWrapper();\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'checked':\n this.changeState(newProp.checked);\n break;\n case 'disabled':\n if (newProp.disabled) {\n this.setDisabled();\n this.unWireEvents();\n }\n else {\n this.element.disabled = false;\n wrapper.classList.remove(DISABLED);\n wrapper.setAttribute('aria-disabled', 'false');\n this.wireEvents();\n }\n break;\n case 'value':\n this.element.setAttribute('value', newProp.value);\n break;\n case 'name':\n this.element.setAttribute('name', newProp.name);\n break;\n case 'onLabel':\n case 'offLabel':\n this.setLabel(newProp.onLabel, newProp.offLabel);\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n wrapper.classList.add(RTL);\n }\n else {\n wrapper.classList.remove(RTL);\n }\n break;\n case 'cssClass':\n if (oldProp.cssClass) {\n wrapper.classList.remove(oldProp.cssClass);\n }\n wrapper.classList.add(newProp.cssClass);\n break;\n }\n }\n };\n /**\n * Initialize Angular, React and Unique ID support.\n * @private\n */\n Switch.prototype.preRender = function () {\n var element = this.element;\n this.tagName = this.element.tagName;\n preRender(this, 'EJS-SWITCH', WRAPPER, element, this.getModuleName());\n };\n /**\n * Initialize control rendering.\n * @private\n */\n Switch.prototype.render = function () {\n this.initWrapper();\n this.initialize();\n if (!this.disabled) {\n this.wireEvents();\n }\n };\n Switch.prototype.rippleHandler = function (e) {\n var rippleSpan = this.getWrapper().getElementsByClassName(RIPPLE)[0];\n rippleMouseHandler(e, rippleSpan);\n if (e.type === 'mousedown' && e.currentTarget.classList.contains('e-switch-wrapper') && e.which === 1) {\n this.isDrag = true;\n this.isKeyPressed = false;\n }\n };\n Switch.prototype.rippleTouchHandler = function (eventType) {\n var rippleSpan = this.getWrapper().getElementsByClassName(RIPPLE)[0];\n if (rippleSpan) {\n var event_1 = document.createEvent('MouseEvents');\n event_1.initEvent(eventType, false, true);\n rippleSpan.dispatchEvent(event_1);\n }\n };\n Switch.prototype.setDisabled = function () {\n var wrapper = this.getWrapper();\n this.element.disabled = true;\n wrapper.classList.add(DISABLED);\n wrapper.setAttribute('aria-disabled', 'true');\n };\n Switch.prototype.setLabel = function (onText, offText) {\n var wrapper = this.getWrapper();\n if (onText) {\n wrapper.querySelector('.e-switch-on').textContent = onText;\n }\n if (offText) {\n wrapper.querySelector('.e-switch-off').textContent = offText;\n }\n };\n Switch.prototype.switchFocusHandler = function () {\n this.isKeyPressed = true;\n };\n Switch.prototype.switchMouseUp = function (e) {\n var target = e.target;\n var rippleSpan = this.getWrapper().getElementsByClassName(RIPPLE)[0];\n if (e.type === 'touchmove') {\n e.preventDefault();\n }\n if (e.type === 'touchstart') {\n this.isDrag = true;\n this.rippleTouchHandler('mousedown');\n }\n if (this.isDrag) {\n if ((e.type === 'mouseup' && target.className.indexOf('e-switch') < 0) || e.type === 'touchend') {\n this.clickHandler(e);\n this.rippleTouchHandler('mouseup');\n e.preventDefault();\n }\n }\n };\n /**\n * Toggle the Switch component state into checked/unchecked.\n * @returns void\n */\n Switch.prototype.toggle = function () {\n this.clickHandler();\n };\n Switch.prototype.wireEvents = function () {\n var wrapper = this.getWrapper();\n var handle = wrapper.querySelector('.e-switch-handle');\n EventHandler.add(wrapper, 'click', this.clickHandler, this);\n EventHandler.add(this.element, 'focus', this.focusHandler, this);\n EventHandler.add(this.element, 'focusout', this.focusOutHandler, this);\n EventHandler.add(document, 'mouseup', this.switchMouseUp, this);\n EventHandler.add(document, 'keydown', this.switchFocusHandler, this);\n EventHandler.add(wrapper, 'mousedown mouseup', this.rippleHandler, this);\n EventHandler.add(wrapper, 'touchstart touchmove touchend', this.switchMouseUp, this);\n };\n Switch.prototype.unWireEvents = function () {\n var wrapper = this.getWrapper();\n var handle = wrapper.querySelector('.e-switch-handle');\n EventHandler.remove(wrapper, 'click', this.clickHandler);\n EventHandler.remove(this.element, 'focus', this.focusHandler);\n EventHandler.remove(this.element, 'focusout', this.focusOutHandler);\n EventHandler.remove(document, 'mouseup', this.switchMouseUp);\n EventHandler.remove(document, 'keydown', this.switchFocusHandler);\n EventHandler.remove(wrapper, 'mousedown mouseup', this.rippleHandler);\n EventHandler.remove(wrapper, 'touchstart touchmove touchend', this.switchMouseUp);\n };\n __decorate([\n Event()\n ], Switch.prototype, \"change\", void 0);\n __decorate([\n Property(false)\n ], Switch.prototype, \"checked\", void 0);\n __decorate([\n Property('')\n ], Switch.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], Switch.prototype, \"disabled\", void 0);\n __decorate([\n Property('')\n ], Switch.prototype, \"name\", void 0);\n __decorate([\n Property('')\n ], Switch.prototype, \"onLabel\", void 0);\n __decorate([\n Property('')\n ], Switch.prototype, \"offLabel\", void 0);\n __decorate([\n Property('')\n ], Switch.prototype, \"value\", void 0);\n Switch = __decorate([\n NotifyPropertyChanges\n ], Switch);\n return Switch;\n}(Component));\nexport { Switch };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, Event, Collection, L10n, Browser, Complex, compile } from '@syncfusion/ej2-base';\nimport { createElement, addClass, removeClass, detach, attributes, prepend, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, ChildProperty } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, formatUnit, append } from '@syncfusion/ej2-base';\nimport { EventHandler } from '@syncfusion/ej2-base';\nimport { Draggable } from '@syncfusion/ej2-base';\nimport { Popup, PositionData, getZindexPartial } from '../popup/popup';\nimport { Button } from '@syncfusion/ej2-buttons';\nvar ButtonProps = /** @class */ (function (_super) {\n __extends(ButtonProps, _super);\n function ButtonProps() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], ButtonProps.prototype, \"buttonModel\", void 0);\n __decorate([\n Property()\n ], ButtonProps.prototype, \"click\", void 0);\n return ButtonProps;\n}(ChildProperty));\nexport { ButtonProps };\n/**\n * Configures the animation properties for both open and close the dialog.\n */\nvar AnimationSettings = /** @class */ (function (_super) {\n __extends(AnimationSettings, _super);\n function AnimationSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Fade')\n ], AnimationSettings.prototype, \"effect\", void 0);\n __decorate([\n Property(400)\n ], AnimationSettings.prototype, \"duration\", void 0);\n __decorate([\n Property(0)\n ], AnimationSettings.prototype, \"delay\", void 0);\n return AnimationSettings;\n}(ChildProperty));\nexport { AnimationSettings };\nvar ROOT = 'e-dialog';\nvar RTL = 'e-rtl';\nvar DLG_HEADER_CONTENT = 'e-dlg-header-content';\nvar DLG_HEADER = 'e-dlg-header';\nvar DLG_FOOTER_CONTENT = 'e-footer-content';\nvar MODAL_DLG = 'e-dlg-modal';\nvar DLG_CONTENT = 'e-dlg-content';\nvar DLG_CLOSE_ICON = 'e-icon-dlg-close';\nvar DLG_OVERLAY = 'e-dlg-overlay';\nvar DLG_CONTAINER = 'e-dlg-container';\nvar SCROLL_DISABLED = 'e-scroll-disabled';\nvar DLG_PRIMARY_BUTTON = 'e-primary';\nvar ICON = 'e-icons';\nvar POPUP_ROOT = 'e-popup';\nvar DEVICE = 'e-device';\nvar FULLSCREEN = 'e-dlg-fullscreen';\nvar DLG_CLOSE_ICON_BTN = 'e-dlg-closeicon-btn';\nvar DLG_HIDE = 'e-popup-close';\nvar DLG_SHOW = 'e-popup-open';\n/**\n * Represents the dialog component that displays the information and get input from the user.\n * Two types of dialog components are `Modal and Modeless (non-modal)` depending on its interaction with parent application.\n * ```html\n *
\n * ```\n * ```typescript\n * \n * ```\n */\nvar Dialog = /** @class */ (function (_super) {\n __extends(Dialog, _super);\n /**\n * Constructor for creating the widget\n * @hidden\n */\n function Dialog(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Initialize the control rendering\n * @private\n */\n Dialog.prototype.render = function () {\n this.initialize();\n this.initRender();\n this.wireEvents();\n };\n /**\n * Initialize the event handler\n * @private\n */\n Dialog.prototype.preRender = function () {\n var _this = this;\n this.headerContent = null;\n var classArray = [];\n for (var j = 0; j < this.element.classList.length; j++) {\n if (!isNullOrUndefined(this.element.classList[j].match('e-control')) ||\n !isNullOrUndefined(this.element.classList[j].match(ROOT))) {\n classArray.push(this.element.classList[j]);\n }\n }\n removeClass([this.element], classArray);\n this.clonedEle = this.element.cloneNode(true);\n this.closeIconClickEventHandler = function (event) {\n _this.hide(event);\n };\n this.dlgOverlayClickEventHandler = function (event) {\n _this.trigger('overlayClick', event);\n };\n var localeText = { close: 'Close' };\n this.l10n = new L10n('dialog', localeText, this.locale);\n if (isNullOrUndefined(this.target)) {\n var prevOnChange = this.isProtectedOnChange;\n this.isProtectedOnChange = true;\n this.target = document.body;\n this.isProtectedOnChange = prevOnChange;\n }\n };\n ;\n /* istanbul ignore next */\n Dialog.prototype.keyDown = function (event) {\n var _this = this;\n if (event.keyCode === 9) {\n if (this.isModal) {\n var buttonObj = void 0;\n if (!isNullOrUndefined(this.btnObj)) {\n buttonObj = this.btnObj[this.btnObj.length - 1];\n }\n if (!isNullOrUndefined(buttonObj) && document.activeElement === buttonObj.element && !event.shiftKey) {\n event.preventDefault();\n this.focusableElements(this.element).focus();\n }\n if (document.activeElement === this.focusableElements(this.element) && event.shiftKey) {\n event.preventDefault();\n if (!isNullOrUndefined(buttonObj)) {\n buttonObj.element.focus();\n }\n }\n }\n }\n var element = document.activeElement;\n var isTagName = (['input', 'textarea'].indexOf(element.tagName.toLowerCase()) > -1);\n var isContentEdit = false;\n if (!isTagName) {\n isContentEdit = element.hasAttribute('contenteditable') && element.getAttribute('contenteditable') === 'true';\n }\n if (event.keyCode === 27 && this.closeOnEscape) {\n this.hide(event);\n }\n if ((event.keyCode === 13 && !event.ctrlKey && element.tagName.toLowerCase() !== 'textarea' &&\n isTagName && !isNullOrUndefined(this.primaryButtonEle)) ||\n (event.keyCode === 13 && event.ctrlKey && (element.tagName.toLowerCase() === 'textarea' ||\n isContentEdit)) && !isNullOrUndefined(this.primaryButtonEle)) {\n var buttonIndex_1;\n var firstPrimary = this.buttons.some(function (data, index) {\n buttonIndex_1 = index;\n var buttonModel = data.buttonModel;\n return !isNullOrUndefined(buttonModel) && buttonModel.isPrimary === true;\n });\n if (firstPrimary && typeof (this.buttons[buttonIndex_1].click) === 'function') {\n setTimeout(function () {\n _this.buttons[buttonIndex_1].click.call(_this, event);\n });\n }\n }\n };\n /**\n * Initialize the control rendering\n * @private\n */\n Dialog.prototype.initialize = function () {\n if (!isNullOrUndefined(this.target)) {\n this.targetEle = ((typeof this.target) === 'string') ?\n document.querySelector(this.target) : this.target;\n }\n addClass([this.element], ROOT);\n if (Browser.isDevice) {\n addClass([this.element], DEVICE);\n }\n this.setCSSClass();\n this.setMaxHeight();\n };\n /**\n * Initialize the rendering\n * @private\n */\n Dialog.prototype.initRender = function () {\n var _this = this;\n this.initialRender = true;\n attributes(this.element, { role: 'dialog' });\n if (this.zIndex === 1000) {\n this.zIndex = getZindexPartial(this.element);\n }\n this.setTargetContent();\n if (this.header !== '' && !isNullOrUndefined(this.header)) {\n this.setHeader();\n }\n if (this.showCloseIcon) {\n this.renderCloseIcon();\n }\n this.setContent();\n if (this.footerTemplate !== '' && !isNullOrUndefined(this.footerTemplate)) {\n this.setFooterTemplate();\n }\n else if (!isNullOrUndefined(this.buttons[0].buttonModel)) {\n this.setButton();\n }\n if (this.allowDragging && (!this.isModal) && (!isNullOrUndefined(this.headerContent))) {\n this.setAllowDragging();\n }\n attributes(this.element, { 'aria-modal': (this.isModal ? 'true' : 'false') });\n if (this.isModal) {\n this.setIsModal();\n }\n if (!isNullOrUndefined(this.targetEle)) {\n this.isModal ? this.targetEle.appendChild(this.dlgContainer) : this.targetEle.appendChild(this.element);\n }\n this.popupObj = new Popup(this.element, {\n height: this.height,\n width: this.width,\n zIndex: this.zIndex,\n relateTo: this.target,\n actionOnScroll: 'none',\n open: function (event) {\n _this.focusContent();\n var eventArgs = {\n container: _this.isModal ? _this.dlgContainer : _this.element,\n element: _this.element,\n target: _this.target\n };\n _this.trigger('open', eventArgs);\n },\n close: function (event) {\n _this.unBindEvent(_this.element);\n if (_this.isModal) {\n _this.dlgContainer.style.display = 'none';\n }\n _this.trigger('close', _this.closeArgs);\n if (!isNullOrUndefined(_this.storeActiveElement)) {\n _this.storeActiveElement.focus();\n }\n }\n });\n this.positionChange();\n this.setEnableRTL();\n addClass([this.element], DLG_HIDE);\n if (this.isModal) {\n this.setOverlayZindex();\n }\n if (this.visible) {\n this.show();\n }\n else {\n if (this.isModal) {\n this.dlgOverlay.style.display = 'none';\n }\n }\n this.initialRender = false;\n };\n Dialog.prototype.setOverlayZindex = function (zIndexValue) {\n var zIndex;\n if (isNullOrUndefined(zIndexValue)) {\n zIndex = parseInt(this.element.style.zIndex, 10) ? parseInt(this.element.style.zIndex, 10) : this.zIndex;\n }\n else {\n zIndex = zIndexValue;\n }\n this.dlgOverlay.style.zIndex = (zIndex - 1).toString();\n this.dlgContainer.style.zIndex = zIndex.toString();\n };\n Dialog.prototype.positionChange = function () {\n if (this.isModal) {\n this.dlgContainer.classList.add('e-dlg-' + this.position.X + '-' + this.position.Y);\n if (typeof (this.position.X) === 'number' && typeof (this.position.Y) === 'number') {\n this.setPopupPosition();\n }\n }\n else {\n this.setPopupPosition();\n }\n };\n Dialog.prototype.setPopupPosition = function () {\n this.popupObj.setProperties({\n position: {\n X: this.position.X, Y: this.position.Y\n }\n });\n };\n Dialog.prototype.setAllowDragging = function () {\n var _this = this;\n var handleContent = '.' + DLG_HEADER_CONTENT;\n this.dragObj = new Draggable(this.element, {\n clone: false,\n handle: handleContent,\n dragStart: function (event) {\n _this.trigger('dragStart', event);\n },\n dragStop: function (event) {\n _this.trigger('dragStop', event);\n },\n drag: function (event) {\n _this.trigger('drag', event);\n }\n });\n if (!isNullOrUndefined(this.targetEle)) {\n this.dragObj.dragArea = this.targetEle;\n }\n };\n Dialog.prototype.setButton = function () {\n this.buttonContent = [];\n this.btnObj = [];\n var primaryBtnFlag = true;\n for (var i = 0; i < this.buttons.length; i++) {\n var btn = createElement('button', { attrs: { type: 'button' } });\n this.buttonContent.push(btn.outerHTML);\n }\n this.setFooterTemplate();\n for (var i = 0; i < this.buttons.length; i++) {\n this.btnObj[i] = new Button(this.buttons[i].buttonModel);\n if (typeof (this.buttons[i].click) === 'function') {\n EventHandler.add(this.ftrTemplateContent.children[i], 'click', this.buttons[i].click, this);\n }\n this.btnObj[i].appendTo(this.ftrTemplateContent.children[i]);\n this.btnObj[i].element.classList.add('e-flat');\n this.primaryButtonEle = this.element.getElementsByClassName('e-primary')[0];\n }\n };\n Dialog.prototype.setContent = function () {\n attributes(this.element, { 'aria-describedby': this.element.id + '_dialog-content' });\n this.contentEle = createElement('div', { className: DLG_CONTENT, id: this.element.id + '_dialog-content' });\n if (this.innerContentElement) {\n this.contentEle.appendChild(this.innerContentElement);\n }\n else if (!isNullOrUndefined(this.content) && this.content !== '' || !this.initialRender) {\n if (typeof (this.content) === 'string') {\n this.contentEle.innerHTML = this.content;\n }\n else if (this.content instanceof HTMLElement) {\n this.contentEle.appendChild(this.content);\n }\n else {\n this.setTemplate(this.content, this.contentEle);\n }\n }\n if (!isNullOrUndefined(this.headerContent)) {\n this.element.insertBefore(this.contentEle, this.element.children[1]);\n }\n else {\n this.element.insertBefore(this.contentEle, this.element.children[0]);\n }\n if (this.height === 'auto') {\n this.setMaxHeight();\n }\n };\n Dialog.prototype.setTemplate = function (template, toElement) {\n var templateFn = compile(template);\n var fromElements = [];\n for (var _i = 0, _a = templateFn({}); _i < _a.length; _i++) {\n var item = _a[_i];\n fromElements.push(item);\n }\n append([].slice.call(fromElements), toElement);\n };\n Dialog.prototype.setMaxHeight = function () {\n var display = this.element.style.display;\n this.element.style.display = 'none';\n this.element.style.maxHeight = (!isNullOrUndefined(this.target)) ?\n (this.targetEle.offsetHeight - 20) + 'px' : (window.innerHeight - 20) + 'px';\n this.element.style.display = display;\n };\n Dialog.prototype.setEnableRTL = function () {\n this.enableRtl ? addClass([this.element], RTL) : removeClass([this.element], RTL);\n };\n Dialog.prototype.setTargetContent = function () {\n if (isNullOrUndefined(this.content) || this.content === '') {\n var isContent = this.element.innerHTML.replace(/\\s/g, '') !== '';\n if (this.element.children.length > 0 || isContent) {\n this.innerContentElement = document.createDocumentFragment();\n while (this.element.childNodes.length !== 0) {\n this.innerContentElement.appendChild(this.element.childNodes[0]);\n }\n }\n }\n };\n Dialog.prototype.setHeader = function () {\n if (this.headerEle) {\n this.headerEle.innerHTML = '';\n }\n else {\n this.headerEle = createElement('div', { id: this.element.id + '_title', className: DLG_HEADER });\n }\n this.createHeaderContent();\n this.headerContent.appendChild(this.headerEle);\n this.setTemplate(this.header, this.headerEle);\n attributes(this.element, { 'aria-labelledby': this.element.id + '_title' });\n this.element.insertBefore(this.headerContent, this.element.children[0]);\n };\n Dialog.prototype.setFooterTemplate = function () {\n if (this.ftrTemplateContent) {\n this.ftrTemplateContent.innerHTML = '';\n }\n else {\n this.ftrTemplateContent = createElement('div', {\n className: DLG_FOOTER_CONTENT\n });\n }\n if (this.footerTemplate !== '' && !isNullOrUndefined(this.footerTemplate)) {\n this.setTemplate(this.footerTemplate, this.ftrTemplateContent);\n }\n else {\n this.ftrTemplateContent.innerHTML = this.buttonContent.join('');\n }\n this.element.appendChild(this.ftrTemplateContent);\n };\n Dialog.prototype.createHeaderContent = function () {\n if (isNullOrUndefined(this.headerContent)) {\n this.headerContent = createElement('div', { className: DLG_HEADER_CONTENT });\n }\n };\n Dialog.prototype.renderCloseIcon = function () {\n this.closeIcon = createElement('button', { className: DLG_CLOSE_ICON_BTN, attrs: { type: 'button' } });\n this.closeIconBtnObj = new Button({ cssClass: 'e-flat', iconCss: DLG_CLOSE_ICON + ' ' + ICON });\n this.closeIconTitle();\n if (!isNullOrUndefined(this.headerContent)) {\n prepend([this.closeIcon], this.headerContent);\n }\n else {\n this.createHeaderContent();\n prepend([this.closeIcon], this.headerContent);\n this.element.insertBefore(this.headerContent, this.element.children[0]);\n }\n this.closeIconBtnObj.appendTo(this.closeIcon);\n };\n Dialog.prototype.closeIconTitle = function () {\n this.l10n.setLocale(this.locale);\n var closeIconTitle = this.l10n.getConstant('close');\n this.closeIcon.setAttribute('title', closeIconTitle);\n };\n Dialog.prototype.setCSSClass = function (oldCSSClass) {\n if (this.cssClass) {\n addClass([this.element], this.cssClass.split(' '));\n }\n if (oldCSSClass) {\n removeClass([this.element], oldCSSClass.split(' '));\n }\n };\n Dialog.prototype.setIsModal = function () {\n this.dlgContainer = createElement('div', { className: DLG_CONTAINER });\n this.element.classList.remove(DLG_SHOW);\n this.element.parentNode.insertBefore(this.dlgContainer, this.element);\n this.dlgContainer.appendChild(this.element);\n addClass([this.element], MODAL_DLG);\n this.dlgOverlay = createElement('div', { className: DLG_OVERLAY });\n this.dlgOverlay.style.zIndex = (this.zIndex - 1).toString();\n this.dlgContainer.appendChild(this.dlgOverlay);\n };\n Dialog.prototype.getValidFocusNode = function (items) {\n var node;\n for (var u = 0; u < items.length; u++) {\n node = items[u];\n if ((node.clientHeight > 0 || (node.tagName.toLowerCase() === 'a' && node.hasAttribute('href'))) && node.tabIndex > -1 &&\n !node.disabled && !this.disableElement(node, '[disabled],[aria-disabled=\"true\"],[type=\"hidden\"]')) {\n return node;\n }\n }\n return node;\n };\n Dialog.prototype.focusableElements = function (content) {\n if (!isNullOrUndefined(content)) {\n var value = 'input,select,textarea,button,a,[contenteditable=\"true\"],[tabindex]';\n var items = content.querySelectorAll(value);\n return this.getValidFocusNode(items);\n }\n return null;\n };\n Dialog.prototype.getAutoFocusNode = function (container) {\n var node = container.querySelector('.' + DLG_CLOSE_ICON_BTN);\n var value = '[autofocus]';\n var items = container.querySelectorAll(value);\n var validNode = this.getValidFocusNode(items);\n if (!isNullOrUndefined(validNode)) {\n node = validNode;\n }\n else {\n validNode = this.focusableElements(this.contentEle);\n if (!isNullOrUndefined(validNode)) {\n return node = validNode;\n }\n else if (!isNullOrUndefined(this.primaryButtonEle)) {\n return this.element.querySelector('.' + DLG_PRIMARY_BUTTON);\n }\n }\n return node;\n };\n Dialog.prototype.disableElement = function (element, t) {\n var elementMatch = element ? element.matches || element.webkitMatchesSelector || element.msMatchesSelector : null;\n if (elementMatch) {\n for (; element; element = element.parentNode) {\n if (element instanceof Element && elementMatch.call(element, t)) {\n /* istanbul ignore next */\n return element;\n }\n }\n }\n return null;\n };\n Dialog.prototype.focusContent = function () {\n var element = this.getAutoFocusNode(this.element);\n var node = !isNullOrUndefined(element) ? element : this.element;\n node.focus();\n this.bindEvent(this.element);\n };\n Dialog.prototype.bindEvent = function (element) {\n EventHandler.add(element, 'keydown', this.keyDown, this);\n };\n Dialog.prototype.unBindEvent = function (element) {\n EventHandler.remove(element, 'keydown', this.keyDown);\n };\n /**\n * Module required function\n * @private\n */\n Dialog.prototype.getModuleName = function () {\n return 'dialog';\n };\n /**\n * Called internally if any of the property value changed\n * @private\n */\n Dialog.prototype.onPropertyChanged = function (newProp, oldProp) {\n if (!this.element.classList.contains(ROOT)) {\n return;\n }\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'content':\n if (!isNullOrUndefined(this.content) && this.content !== '') {\n if (!isNullOrUndefined(this.contentEle) && this.contentEle.getAttribute('role') !== 'dialog') {\n this.contentEle.innerHTML = '';\n typeof (this.content) === 'string' ?\n this.contentEle.innerHTML = this.content : this.contentEle.appendChild(this.content);\n this.setMaxHeight();\n }\n else {\n this.setContent();\n }\n }\n else if (!isNullOrUndefined(this.contentEle)) {\n detach(this.contentEle);\n this.contentEle = null;\n }\n break;\n case 'header':\n if (this.header === '' || isNullOrUndefined(this.header)) {\n detach(this.headerEle);\n }\n else {\n this.setHeader();\n }\n break;\n case 'footerTemplate':\n if (this.footerTemplate === '' || isNullOrUndefined(this.footerTemplate)) {\n if (!this.ftrTemplateContent) {\n return;\n }\n detach(this.ftrTemplateContent);\n this.ftrTemplateContent = null;\n this.buttons = [{}];\n }\n else {\n this.setFooterTemplate();\n this.buttons = [{}];\n }\n break;\n case 'showCloseIcon':\n if (this.element.getElementsByClassName(DLG_CLOSE_ICON).length > 0) {\n if (!this.showCloseIcon && (this.header === '' || isNullOrUndefined(this.header))) {\n detach(this.headerContent);\n this.headerContent = null;\n }\n else if (!this.showCloseIcon) {\n detach(this.closeIcon);\n }\n }\n else {\n this.renderCloseIcon();\n this.wireEvents();\n }\n break;\n case 'locale':\n if (this.showCloseIcon) {\n this.closeIconTitle();\n }\n break;\n case 'visible':\n this.visible ? this.show() : this.hide();\n break;\n case 'isModal':\n this.updateIsModal();\n break;\n case 'height':\n setStyleAttribute(this.element, { 'height': formatUnit(newProp.height) });\n break;\n case 'width':\n setStyleAttribute(this.element, { 'width': formatUnit(newProp.width) });\n break;\n case 'zIndex':\n this.popupObj.zIndex = this.zIndex;\n if (this.isModal) {\n this.setOverlayZindex(this.zIndex);\n }\n break;\n case 'cssClass':\n this.setCSSClass(oldProp.cssClass);\n break;\n case 'buttons':\n if (!isNullOrUndefined(this.buttons[0].buttonModel)) {\n if (!isNullOrUndefined(this.ftrTemplateContent)) {\n detach(this.ftrTemplateContent);\n this.ftrTemplateContent = null;\n }\n this.footerTemplate = '';\n this.setButton();\n }\n break;\n case 'allowDragging':\n if (this.allowDragging && (!this.isModal) && (!isNullOrUndefined(this.headerContent))) {\n this.setAllowDragging();\n }\n else {\n this.dragObj.destroy();\n }\n break;\n case 'target':\n this.popupObj.relateTo = newProp.target;\n break;\n case 'position':\n this.positionChange();\n break;\n case 'enableRtl':\n this.setEnableRTL();\n break;\n }\n }\n };\n Dialog.prototype.updateIsModal = function () {\n this.element.setAttribute('aria-modal', this.isModal ? 'true' : 'false');\n if (this.isModal) {\n this.setIsModal();\n this.element.style.top = '0px';\n this.element.style.left = '0px';\n if (!isNullOrUndefined(this.targetEle)) {\n this.targetEle.appendChild(this.dlgContainer);\n }\n }\n else {\n removeClass([this.element], MODAL_DLG);\n removeClass([document.body], SCROLL_DISABLED);\n detach(this.dlgOverlay);\n while (this.dlgContainer.firstChild) {\n this.dlgContainer.parentElement.insertBefore(this.dlgContainer.firstChild, this.dlgContainer);\n }\n this.dlgContainer.parentElement.removeChild(this.dlgContainer);\n }\n if (this.visible) {\n this.show();\n }\n this.positionChange();\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @private\n */\n Dialog.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * To destroy the widget\n * @method destroy\n * @return {void}\n * @memberof dialog\n */\n Dialog.prototype.destroy = function () {\n if (this.element.classList.contains(ROOT)) {\n this.unWireEvents();\n _super.prototype.destroy.call(this);\n var classArray = [\n ROOT, RTL, MODAL_DLG\n ];\n removeClass([this.element, this.element], classArray);\n if (this.popupObj.element.classList.contains(POPUP_ROOT)) {\n this.popupObj.destroy();\n }\n /* istanbul ignore next */\n if (!isNullOrUndefined(this.btnObj)) {\n for (var i = void 0; i < this.btnObj.length; i++) {\n this.btnObj[i].destroy();\n }\n }\n if (this.isModal) {\n detach(this.dlgOverlay);\n this.dlgContainer.parentNode.insertBefore(this.element, this.dlgContainer);\n detach(this.dlgContainer);\n }\n this.element.innerHTML = '';\n while (this.element.attributes.length > 0) {\n this.element.removeAttribute(this.element.attributes[0].name);\n }\n for (var k = 0; k < this.clonedEle.attributes.length; k++) {\n this.element.setAttribute(this.clonedEle.attributes[k].name, this.clonedEle.attributes[k].value);\n }\n }\n };\n /**\n * Binding event to the element while widget creation\n * @hidden\n */\n Dialog.prototype.wireEvents = function () {\n if (this.showCloseIcon) {\n EventHandler.add(this.closeIcon, 'click', this.closeIconClickEventHandler, this);\n }\n if (this.isModal) {\n EventHandler.add(this.dlgOverlay, 'click', this.dlgOverlayClickEventHandler, this);\n }\n };\n /**\n * Unbinding event to the element while widget destroy\n * @hidden\n */\n Dialog.prototype.unWireEvents = function () {\n if (this.showCloseIcon) {\n EventHandler.remove(this.closeIcon, 'click', this.closeIconClickEventHandler);\n }\n if (this.isModal) {\n EventHandler.remove(this.dlgOverlay, 'click', this.dlgOverlayClickEventHandler);\n }\n if (!isNullOrUndefined(this.buttons[0].buttonModel)) {\n for (var i = 0; i < this.buttons.length; i++) {\n if (typeof (this.buttons[i].click) === 'function') {\n EventHandler.remove(this.ftrTemplateContent.children[i], 'click', this.buttons[i].click);\n }\n }\n }\n };\n /**\n * Refreshes the dialog's position when the user changes its header and footer height/width dynamically.\n * @return {void}\n */\n Dialog.prototype.refreshPosition = function () {\n this.popupObj.refreshPosition();\n };\n /**\n * Opens the dialog if it is in hidden state.\n * To open the dialog with full screen width, set the parameter to true.\n * @param { boolean } isFullScreen - Enable the fullScreen Dialog.\n * @return {void}\n */\n Dialog.prototype.show = function (isFullScreen) {\n if (!this.element.classList.contains(ROOT)) {\n return;\n }\n if (!this.element.classList.contains(DLG_SHOW) || (!isNullOrUndefined(isFullScreen))) {\n if (!isNullOrUndefined(isFullScreen)) {\n this.fullScreen(isFullScreen);\n }\n var eventArgs = {\n cancel: false,\n element: this.element,\n container: this.isModal ? this.dlgContainer : this.element,\n target: this.target\n };\n this.trigger('beforeOpen', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n this.storeActiveElement = document.activeElement;\n this.element.tabIndex = -1;\n if (this.isModal && (!isNullOrUndefined(this.dlgOverlay))) {\n this.dlgOverlay.style.display = 'block';\n this.dlgContainer.style.display = 'flex';\n if (!isNullOrUndefined(this.targetEle)) {\n if (this.targetEle === document.body) {\n this.dlgContainer.style.position = 'fixed';\n }\n else {\n this.dlgContainer.style.position = 'absolute';\n }\n this.dlgOverlay.style.position = 'absolute';\n this.element.style.position = 'relative';\n addClass([this.targetEle], SCROLL_DISABLED);\n }\n else {\n addClass([document.body], SCROLL_DISABLED);\n }\n }\n var openAnimation = {\n name: this.animationSettings.effect + 'In',\n duration: this.animationSettings.duration,\n delay: this.animationSettings.delay\n };\n this.animationSettings.effect === 'None' ? this.popupObj.show() : this.popupObj.show(openAnimation);\n this.dialogOpen = true;\n var prevOnChange = this.isProtectedOnChange;\n this.isProtectedOnChange = true;\n this.visible = true;\n this.isProtectedOnChange = prevOnChange;\n }\n };\n /**\n * Closes the dialog if it is in visible state.\n * @return {void}\n */\n Dialog.prototype.hide = function (event) {\n if (!this.element.classList.contains(ROOT)) {\n return;\n }\n var eventArgs = {\n cancel: false,\n isInteraction: event ? true : false,\n element: this.element,\n target: this.target,\n container: this.isModal ? this.dlgContainer : this.element,\n event: event\n };\n this.trigger('beforeClose', eventArgs);\n this.closeArgs = eventArgs;\n if (eventArgs.cancel) {\n return;\n }\n if (this.isModal) {\n this.dlgOverlay.style.display = 'none';\n !isNullOrUndefined(this.targetEle) ? removeClass([this.targetEle], SCROLL_DISABLED) :\n removeClass([document.body], SCROLL_DISABLED);\n }\n var closeAnimation = {\n name: this.animationSettings.effect + 'Out',\n duration: this.animationSettings.duration,\n delay: this.animationSettings.delay\n };\n this.animationSettings.effect === 'None' ? this.popupObj.hide() : this.popupObj.hide(closeAnimation);\n this.dialogOpen = false;\n var prevOnChange = this.isProtectedOnChange;\n this.isProtectedOnChange = true;\n this.visible = false;\n this.isProtectedOnChange = prevOnChange;\n };\n /**\n * Specifies to view the Full screen Dialog.\n * @private\n */\n Dialog.prototype.fullScreen = function (args) {\n var top = this.element.offsetTop;\n var left = this.element.offsetLeft;\n if (args) {\n addClass([this.element], FULLSCREEN);\n var display = this.element.style.display;\n this.element.style.display = 'none';\n this.element.style.maxHeight = (!isNullOrUndefined(this.target)) ?\n (this.targetEle.offsetHeight) + 'px' : (window.innerHeight) + 'px';\n this.element.style.display = display;\n addClass([document.body], SCROLL_DISABLED);\n if (this.allowDragging && !isNullOrUndefined(this.dragObj)) {\n this.dragObj.destroy();\n }\n }\n else {\n removeClass([this.element], FULLSCREEN);\n removeClass([document.body], SCROLL_DISABLED);\n if (this.allowDragging && (!this.isModal) && (!isNullOrUndefined(this.headerContent))) {\n this.setAllowDragging();\n }\n }\n return args;\n };\n __decorate([\n Property('')\n ], Dialog.prototype, \"content\", void 0);\n __decorate([\n Property(false)\n ], Dialog.prototype, \"showCloseIcon\", void 0);\n __decorate([\n Property(false)\n ], Dialog.prototype, \"isModal\", void 0);\n __decorate([\n Property('')\n ], Dialog.prototype, \"header\", void 0);\n __decorate([\n Property(true)\n ], Dialog.prototype, \"visible\", void 0);\n __decorate([\n Property('auto')\n ], Dialog.prototype, \"height\", void 0);\n __decorate([\n Property('100%')\n ], Dialog.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], Dialog.prototype, \"cssClass\", void 0);\n __decorate([\n Property(1000)\n ], Dialog.prototype, \"zIndex\", void 0);\n __decorate([\n Property(null)\n ], Dialog.prototype, \"target\", void 0);\n __decorate([\n Property('')\n ], Dialog.prototype, \"footerTemplate\", void 0);\n __decorate([\n Property(false)\n ], Dialog.prototype, \"allowDragging\", void 0);\n __decorate([\n Collection([{}], ButtonProps)\n ], Dialog.prototype, \"buttons\", void 0);\n __decorate([\n Property(true)\n ], Dialog.prototype, \"closeOnEscape\", void 0);\n __decorate([\n Complex({}, AnimationSettings)\n ], Dialog.prototype, \"animationSettings\", void 0);\n __decorate([\n Complex({ X: 'center', Y: 'center' }, PositionData)\n ], Dialog.prototype, \"position\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"dragStart\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"dragStop\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"drag\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"overlayClick\", void 0);\n Dialog = __decorate([\n NotifyPropertyChanges\n ], Dialog);\n return Dialog;\n}(Component));\nexport { Dialog };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, ChildProperty, Event, append, compile } from '@syncfusion/ej2-base';\nimport { EventHandler, Touch, Browser, Animation as PopupAnimation } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, getUniqueID, formatUnit } from '@syncfusion/ej2-base';\nimport { attributes, createElement, closest, removeClass, addClass, remove } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, Complex } from '@syncfusion/ej2-base';\nimport { Popup } from '../popup/popup';\nimport { calculatePosition } from '../common/position';\nimport { isCollide, fit } from '../common/collision';\nvar TOUCHEND_HIDE_DELAY = 1500;\nvar TAPHOLD_THRESHOLD = 500;\nvar SHOW_POINTER_TIP_GAP = 0;\nvar HIDE_POINTER_TIP_GAP = 8;\nvar MOUSE_TRAIL_GAP = 2;\nvar POINTER_ADJUST = 2;\nvar ROOT = 'e-tooltip';\nvar RTL = 'e-rtl';\nvar DEVICE = 'e-bigger';\nvar ICON = 'e-icons';\nvar CLOSE = 'e-tooltip-close';\nvar TOOLTIP_WRAP = 'e-tooltip-wrap';\nvar CONTENT = 'e-tip-content';\nvar ARROW_TIP = 'e-arrow-tip';\nvar ARROW_TIP_OUTER = 'e-arrow-tip-outer';\nvar ARROW_TIP_INNER = 'e-arrow-tip-inner';\nvar TIP_BOTTOM = 'e-tip-bottom';\nvar TIP_TOP = 'e-tip-top';\nvar TIP_LEFT = 'e-tip-left';\nvar TIP_RIGHT = 'e-tip-right';\nvar POPUP_ROOT = 'e-popup';\nvar POPUP_OPEN = 'e-popup-open';\nvar POPUP_CLOSE = 'e-popup-close';\nvar Animation = /** @class */ (function (_super) {\n __extends(Animation, _super);\n function Animation() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property({ effect: 'FadeIn', duration: 150, delay: 0 })\n ], Animation.prototype, \"open\", void 0);\n __decorate([\n Property({ effect: 'FadeOut', duration: 150, delay: 0 })\n ], Animation.prototype, \"close\", void 0);\n return Animation;\n}(ChildProperty));\nexport { Animation };\n/**\n * Represents the Tooltip component that displays a piece of information about the target element on mouse hover.\n * ```html\n *
Show Tooltip
\n * ```\n * ```typescript\n * \n * ```\n */\nvar Tooltip = /** @class */ (function (_super) {\n __extends(Tooltip, _super);\n /**\n * Constructor for creating the Tooltip Component\n */\n function Tooltip(options, element) {\n return _super.call(this, options, element) || this;\n }\n Tooltip.prototype.initialize = function () {\n this.formatPosition();\n addClass([this.element], ROOT);\n };\n Tooltip.prototype.formatPosition = function () {\n if (this.position.indexOf('Top') === 0 || this.position.indexOf('Bottom') === 0) {\n _a = this.position.split(/(?=[A-Z])/), this.tooltipPositionY = _a[0], this.tooltipPositionX = _a[1];\n }\n else {\n _b = this.position.split(/(?=[A-Z])/), this.tooltipPositionX = _b[0], this.tooltipPositionY = _b[1];\n }\n var _a, _b;\n };\n Tooltip.prototype.renderArrow = function () {\n this.setTipClass(this.position);\n var tip = createElement('div', { className: ARROW_TIP + ' ' + this.tipClass });\n tip.appendChild(createElement('div', { className: ARROW_TIP_OUTER + ' ' + this.tipClass }));\n tip.appendChild(createElement('div', { className: ARROW_TIP_INNER + ' ' + this.tipClass }));\n this.tooltipEle.appendChild(tip);\n };\n Tooltip.prototype.setTipClass = function (position) {\n if (position.indexOf('Right') === 0) {\n this.tipClass = TIP_LEFT;\n }\n else if (position.indexOf('Bottom') === 0) {\n this.tipClass = TIP_TOP;\n }\n else if (position.indexOf('Left') === 0) {\n this.tipClass = TIP_RIGHT;\n }\n else {\n this.tipClass = TIP_BOTTOM;\n }\n };\n Tooltip.prototype.renderPopup = function (target) {\n var elePos = this.mouseTrail ? { top: 0, left: 0 } : this.getTooltipPosition(target);\n this.popupObj = new Popup(this.tooltipEle, {\n height: this.height,\n width: this.width,\n position: {\n X: elePos.left,\n Y: elePos.top\n },\n enableRtl: this.enableRtl,\n open: this.openPopupHandler.bind(this),\n close: this.closePopupHandler.bind(this)\n });\n };\n Tooltip.prototype.getTooltipPosition = function (target) {\n this.tooltipEle.style.display = 'none';\n var pos = calculatePosition(target, this.tooltipPositionX, this.tooltipPositionY);\n this.tooltipEle.style.display = '';\n var offsetPos = this.calculateTooltipOffset(this.position);\n var elePos = this.collisionFlipFit(target, pos.left + offsetPos.left, pos.top + offsetPos.top);\n return elePos;\n };\n Tooltip.prototype.reposition = function (target) {\n var elePos = this.getTooltipPosition(target);\n this.popupObj.position = { X: elePos.left, Y: elePos.top };\n this.popupObj.dataBind();\n };\n Tooltip.prototype.openPopupHandler = function () {\n this.trigger('afterOpen', this.tooltipEventArgs);\n };\n Tooltip.prototype.closePopupHandler = function () {\n this.clear();\n this.trigger('afterClose', this.tooltipEventArgs);\n };\n Tooltip.prototype.calculateTooltipOffset = function (position) {\n var pos = { top: 0, left: 0 };\n var tooltipEleWidth = this.tooltipEle.offsetWidth;\n var tooltipEleHeight = this.tooltipEle.offsetHeight;\n var arrowEle = this.tooltipEle.querySelector('.' + ARROW_TIP);\n var tipWidth = arrowEle ? arrowEle.offsetWidth : 0;\n var tipHeight = arrowEle ? arrowEle.offsetHeight : 0;\n var tipAdjust = (this.showTipPointer ? SHOW_POINTER_TIP_GAP : HIDE_POINTER_TIP_GAP);\n var tipHeightAdjust = (tipHeight / 2) + POINTER_ADJUST + (this.tooltipEle.offsetHeight - this.tooltipEle.clientHeight);\n var tipWidthAdjust = (tipWidth / 2) + POINTER_ADJUST + (this.tooltipEle.offsetWidth - this.tooltipEle.clientWidth);\n if (this.mouseTrail) {\n tipAdjust += MOUSE_TRAIL_GAP;\n }\n switch (position) {\n case 'RightTop':\n pos.left += tipWidth + tipAdjust;\n pos.top -= tooltipEleHeight - tipHeightAdjust;\n break;\n case 'RightCenter':\n pos.left += tipWidth + tipAdjust;\n pos.top -= (tooltipEleHeight / 2);\n break;\n case 'RightBottom':\n pos.left += tipWidth + tipAdjust;\n pos.top -= (tipHeightAdjust);\n break;\n case 'BottomRight':\n pos.top += (tipHeight + tipAdjust);\n pos.left -= (tipWidthAdjust);\n break;\n case 'BottomCenter':\n pos.top += (tipHeight + tipAdjust);\n pos.left -= (tooltipEleWidth / 2);\n break;\n case 'BottomLeft':\n pos.top += (tipHeight + tipAdjust);\n pos.left -= (tooltipEleWidth - tipWidthAdjust);\n break;\n case 'LeftBottom':\n pos.left -= (tipWidth + tooltipEleWidth + tipAdjust);\n pos.top -= (tipHeightAdjust);\n break;\n case 'LeftCenter':\n pos.left -= (tipWidth + tooltipEleWidth + tipAdjust);\n pos.top -= (tooltipEleHeight / 2);\n break;\n case 'LeftTop':\n pos.left -= (tipWidth + tooltipEleWidth + tipAdjust);\n pos.top -= (tooltipEleHeight - tipHeightAdjust);\n break;\n case 'TopLeft':\n pos.top -= (tooltipEleHeight + tipHeight + tipAdjust);\n pos.left -= (tooltipEleWidth - tipWidthAdjust);\n break;\n case 'TopRight':\n pos.top -= (tooltipEleHeight + tipHeight + tipAdjust);\n pos.left -= (tipWidthAdjust);\n break;\n default:\n pos.top -= (tooltipEleHeight + tipHeight + tipAdjust);\n pos.left -= (tooltipEleWidth / 2);\n break;\n }\n pos.left += this.offsetX;\n pos.top += this.offsetY;\n return pos;\n };\n Tooltip.prototype.updateTipPosition = function (position) {\n var selEle = this.tooltipEle.querySelectorAll('.' + ARROW_TIP + ',.' + ARROW_TIP_OUTER + ',.' + ARROW_TIP_INNER);\n var removeList = [TIP_BOTTOM, TIP_TOP, TIP_LEFT, TIP_RIGHT];\n removeClass(selEle, removeList);\n this.setTipClass(position);\n addClass(selEle, this.tipClass);\n };\n Tooltip.prototype.adjustArrow = function (target, position, tooltipPositionX, tooltipPositionY) {\n if (this.showTipPointer === false) {\n return;\n }\n this.updateTipPosition(position);\n var leftValue;\n var topValue;\n var tooltipWidth = this.tooltipEle.clientWidth;\n var tooltipHeight = this.tooltipEle.clientHeight;\n var arrowEle = this.tooltipEle.querySelector('.' + ARROW_TIP);\n var arrowInnerELe = this.tooltipEle.querySelector('.' + ARROW_TIP_INNER);\n var tipWidth = arrowEle.offsetWidth;\n var tipHeight = arrowEle.offsetHeight;\n if (this.tipClass === TIP_BOTTOM || this.tipClass === TIP_TOP) {\n if (this.tipClass === TIP_BOTTOM) {\n topValue = '99.9%';\n // Arrow icon aligned -2px height from ArrowOuterTip div\n arrowInnerELe.style.top = '-' + (tipHeight - 2) + 'px';\n }\n else {\n topValue = -(tipHeight - 1) + 'px';\n // Arrow icon aligned -6px height from ArrowOuterTip div\n arrowInnerELe.style.top = '-' + (tipHeight - 6) + 'px';\n }\n var tipPosExclude = tooltipPositionX !== 'Center' || (tooltipWidth > target.offsetWidth) || this.mouseTrail;\n if ((tipPosExclude && tooltipPositionX === 'Left') || (!tipPosExclude && this.tipPointerPosition === 'End')) {\n leftValue = (tooltipWidth - tipWidth - POINTER_ADJUST) + 'px';\n }\n else if ((tipPosExclude && tooltipPositionX === 'Right') || (!tipPosExclude && this.tipPointerPosition === 'Start')) {\n leftValue = POINTER_ADJUST + 'px';\n }\n else {\n leftValue = ((tooltipWidth / 2) - (tipWidth / 2)) + 'px';\n }\n }\n else {\n if (this.tipClass === TIP_RIGHT) {\n leftValue = '99.9%';\n // Arrow icon aligned -2px left from ArrowOuterTip div\n arrowInnerELe.style.left = '-' + (tipWidth - 2) + 'px';\n }\n else {\n leftValue = -(tipWidth - 1) + 'px';\n // Arrow icon aligned -2px from ArrowOuterTip width\n arrowInnerELe.style.left = (-(tipWidth) + (tipWidth - 2)) + 'px';\n }\n var tipPosExclude = tooltipPositionY !== 'Center' || (tooltipHeight > target.offsetHeight) || this.mouseTrail;\n if ((tipPosExclude && tooltipPositionY === 'Top') || (!tipPosExclude && this.tipPointerPosition === 'End')) {\n topValue = (tooltipHeight - tipHeight - POINTER_ADJUST) + 'px';\n }\n else if ((tipPosExclude && tooltipPositionY === 'Bottom') || (!tipPosExclude && this.tipPointerPosition === 'Start')) {\n topValue = POINTER_ADJUST + 'px';\n }\n else {\n topValue = ((tooltipHeight / 2) - (tipHeight / 2)) + 'px';\n }\n }\n arrowEle.style.top = topValue;\n arrowEle.style.left = leftValue;\n };\n Tooltip.prototype.renderContent = function (target) {\n var tooltipContent = this.tooltipEle.querySelector('.' + CONTENT);\n if (target && !isNullOrUndefined(target.getAttribute('title'))) {\n target.setAttribute('data-content', target.getAttribute('title'));\n target.removeAttribute('title');\n }\n if (!isNullOrUndefined(this.content)) {\n tooltipContent.innerHTML = '';\n if (this.content instanceof HTMLElement) {\n tooltipContent.appendChild(this.content);\n }\n else if (typeof this.content === 'string') {\n tooltipContent.innerHTML = this.content;\n }\n else {\n var templateFunction = compile(this.content);\n append(templateFunction(), tooltipContent);\n }\n }\n else {\n if (target && !isNullOrUndefined(target.getAttribute('data-content'))) {\n tooltipContent.innerHTML = target.getAttribute('data-content');\n }\n }\n };\n Tooltip.prototype.renderCloseIcon = function () {\n if (!this.isSticky) {\n return;\n }\n var tipClose = createElement('div', { className: ICON + ' ' + CLOSE });\n this.tooltipEle.appendChild(tipClose);\n EventHandler.add(tipClose, Browser.touchStartEvent, this.onStickyClose, this);\n };\n Tooltip.prototype.addDescribedBy = function (target, id) {\n var describedby = (target.getAttribute('aria-describedby') || '').split(/\\s+/);\n if (describedby.indexOf(id) < 0) {\n describedby.push(id);\n }\n attributes(target, { 'aria-describedby': describedby.join(' ').trim(), 'data-tooltip-id': id });\n };\n Tooltip.prototype.removeDescribedBy = function (target) {\n var id = target.getAttribute('data-tooltip-id');\n var describedby = (target.getAttribute('aria-describedby') || '').split(/\\s+/);\n var index = describedby.indexOf(id);\n if (index !== -1) {\n describedby.splice(index, 1);\n }\n target.removeAttribute('data-tooltip-id');\n var orgdescribedby = describedby.join(' ').trim();\n if (orgdescribedby) {\n target.setAttribute('aria-describedby', orgdescribedby);\n }\n else {\n target.removeAttribute('aria-describedby');\n }\n };\n Tooltip.prototype.tapHoldHandler = function (evt) {\n clearTimeout(this.autoCloseTimer);\n this.targetHover(evt.originalEvent);\n };\n Tooltip.prototype.touchEndHandler = function (e) {\n var _this = this;\n if (this.isSticky) {\n return;\n }\n var close = function () {\n _this.close();\n };\n this.autoCloseTimer = setTimeout(close, TOUCHEND_HIDE_DELAY);\n };\n Tooltip.prototype.targetClick = function (e) {\n var target;\n if (this.target) {\n target = closest(e.target, this.target);\n }\n else {\n target = this.element;\n }\n if (isNullOrUndefined(target)) {\n return;\n }\n if (target.getAttribute('data-tooltip-id') === null) {\n this.targetHover(e);\n }\n else if (!this.isSticky) {\n this.hideTooltip(this.animation.close, e, target);\n }\n };\n Tooltip.prototype.targetHover = function (e) {\n var target;\n if (this.target) {\n target = closest(e.target, this.target);\n }\n else {\n target = this.element;\n }\n if (isNullOrUndefined(target) || target.getAttribute('data-tooltip-id') !== null) {\n return;\n }\n var targetList = [].slice.call(document.querySelectorAll('[data-tooltip-id= ' + this.ctrlId + '_content]'));\n for (var _i = 0, targetList_1 = targetList; _i < targetList_1.length; _i++) {\n var target_1 = targetList_1[_i];\n this.restoreElement(target_1);\n }\n this.showTooltip(target, this.animation.open, e);\n this.wireMouseEvents(e, target);\n };\n Tooltip.prototype.showTooltip = function (target, showAnimation, e) {\n var _this = this;\n clearTimeout(this.showTimer);\n clearTimeout(this.hideTimer);\n this.tooltipEventArgs = e ? { type: e.type, cancel: false, target: target, event: e, element: this.tooltipEle } :\n { type: null, cancel: false, target: target, event: null, element: this.tooltipEle };\n this.trigger('beforeRender', this.tooltipEventArgs);\n if (this.tooltipEventArgs.cancel) {\n this.isHidden = true;\n this.clear();\n return;\n }\n this.isHidden = false;\n if (isNullOrUndefined(this.tooltipEle)) {\n this.ctrlId = this.element.getAttribute('id') ? getUniqueID(this.element.getAttribute('id')) : getUniqueID('tooltip');\n this.tooltipEle = createElement('div', {\n className: TOOLTIP_WRAP + ' ' + POPUP_ROOT, attrs: {\n role: 'tooltip', 'aria-hidden': 'false', 'id': this.ctrlId + '_content'\n }, styles: 'width:' + formatUnit(this.width) + ';height:' + formatUnit(this.height) + ';position:absolute;'\n });\n if (this.cssClass) {\n addClass([this.tooltipEle], this.cssClass.split(' '));\n }\n if (Browser.isDevice) {\n addClass([this.tooltipEle], DEVICE);\n }\n if (this.width !== 'auto') {\n this.tooltipEle.style.maxWidth = formatUnit(this.width);\n }\n this.tooltipEle.appendChild(createElement('div', { className: CONTENT }));\n document.body.appendChild(this.tooltipEle);\n this.addDescribedBy(target, this.ctrlId + '_content');\n this.renderContent(target);\n addClass([this.tooltipEle], POPUP_OPEN);\n if (this.showTipPointer) {\n this.renderArrow();\n }\n this.renderCloseIcon();\n this.renderPopup(target);\n }\n else {\n this.adjustArrow(target, this.position, this.tooltipPositionX, this.tooltipPositionY);\n this.addDescribedBy(target, this.ctrlId + '_content');\n this.renderContent(target);\n PopupAnimation.stop(this.tooltipEle);\n this.reposition(target);\n }\n removeClass([this.tooltipEle], POPUP_OPEN);\n addClass([this.tooltipEle], POPUP_CLOSE);\n this.tooltipEventArgs = e ? { type: e.type, cancel: false, target: target, event: e, element: this.tooltipEle } :\n { type: null, cancel: false, target: target, event: null, element: this.tooltipEle };\n this.trigger('beforeOpen', this.tooltipEventArgs);\n if (this.tooltipEventArgs.cancel) {\n this.isHidden = true;\n this.clear();\n return;\n }\n var openAnimation = {\n name: showAnimation.effect, duration: showAnimation.duration, delay: showAnimation.delay, timingFunction: 'easeOut'\n };\n if (showAnimation.effect === 'None') {\n openAnimation = undefined;\n }\n if (this.openDelay > 0) {\n var show = function () {\n if (_this.popupObj) {\n _this.popupObj.show(openAnimation);\n }\n };\n this.showTimer = setTimeout(show, this.openDelay);\n }\n else {\n this.popupObj.show(openAnimation);\n }\n };\n Tooltip.prototype.checkCollision = function (target, x, y) {\n var elePos = {\n left: x, top: y, position: this.position,\n horizontal: this.tooltipPositionX, vertical: this.tooltipPositionY\n };\n var affectedPos = isCollide(this.tooltipEle, (this.target ? this.element : null), x, y);\n if (affectedPos.length > 0) {\n elePos.horizontal = affectedPos.indexOf('left') >= 0 ? 'Right' : affectedPos.indexOf('right') >= 0 ? 'Left' :\n this.tooltipPositionX;\n elePos.vertical = affectedPos.indexOf('top') >= 0 ? 'Bottom' : affectedPos.indexOf('bottom') >= 0 ? 'Top' :\n this.tooltipPositionY;\n }\n return elePos;\n };\n Tooltip.prototype.collisionFlipFit = function (target, x, y) {\n var elePos = this.checkCollision(target, x, y);\n var newpos = elePos.position;\n if (this.tooltipPositionY !== elePos.vertical) {\n newpos = ((this.position.indexOf('Bottom') === 0 || this.position.indexOf('Top') === 0) ?\n elePos.vertical + this.tooltipPositionX : this.tooltipPositionX + elePos.vertical);\n }\n if (this.tooltipPositionX !== elePos.horizontal) {\n if (newpos.indexOf('Left') === 0) {\n elePos.vertical = (newpos === 'LeftTop' || newpos === 'LeftCenter') ? 'Top' : 'Bottom';\n newpos = (elePos.vertical + 'Left');\n }\n if (newpos.indexOf('Right') === 0) {\n elePos.vertical = (newpos === 'RightTop' || newpos === 'RightCenter') ? 'Top' : 'Bottom';\n newpos = (elePos.vertical + 'Right');\n }\n elePos.horizontal = this.tooltipPositionX;\n }\n this.tooltipEventArgs = {\n type: null, cancel: false, target: target, event: null,\n element: this.tooltipEle, collidedPosition: newpos\n };\n this.trigger('beforeCollision', this.tooltipEventArgs);\n if (elePos.position !== newpos) {\n var pos = calculatePosition(target, this.tooltipPositionX, elePos.vertical);\n this.adjustArrow(target, newpos, elePos.horizontal, elePos.vertical);\n var offsetPos = this.calculateTooltipOffset(newpos);\n elePos.position = newpos;\n elePos.left = pos.left + offsetPos.left;\n elePos.top = pos.top + offsetPos.top;\n }\n else {\n this.adjustArrow(target, newpos, elePos.horizontal, elePos.vertical);\n }\n var eleOffset = { left: elePos.left, top: elePos.top };\n var left = fit(this.tooltipEle, (this.target ? this.element : null), { X: true, Y: false }, eleOffset).left;\n if (this.showTipPointer && (newpos.indexOf('Bottom') === 0 || newpos.indexOf('Top') === 0)) {\n var arrowEle = this.tooltipEle.querySelector('.' + ARROW_TIP);\n var arrowleft = parseInt(arrowEle.style.left, 10) - (left - elePos.left);\n if (arrowleft < 0) {\n arrowleft = 0;\n }\n else if ((arrowleft + arrowEle.offsetWidth) > this.tooltipEle.clientWidth) {\n arrowleft = this.tooltipEle.clientWidth - arrowEle.offsetWidth;\n }\n arrowEle.style.left = arrowleft.toString() + 'px';\n }\n eleOffset.left = left;\n return eleOffset;\n };\n Tooltip.prototype.hideTooltip = function (hideAnimation, e, targetElement) {\n var _this = this;\n var target;\n if (e) {\n target = this.target ? (targetElement || e.target) : this.element;\n this.tooltipEventArgs = {\n type: e.type, cancel: false, target: target, event: e, element: this.tooltipEle\n };\n }\n else {\n target = document.querySelector('[data-tooltip-id= ' + this.ctrlId + '_content]');\n this.tooltipEventArgs = {\n type: null, cancel: false, target: target, event: null, element: this.tooltipEle\n };\n }\n if (isNullOrUndefined(target)) {\n return;\n }\n this.trigger('beforeClose', this.tooltipEventArgs);\n if (!this.tooltipEventArgs.cancel) {\n this.restoreElement(target);\n this.isHidden = true;\n var closeAnimation_1 = {\n name: hideAnimation.effect, duration: hideAnimation.duration, delay: hideAnimation.delay, timingFunction: 'easeIn'\n };\n if (hideAnimation.effect === 'None') {\n closeAnimation_1 = undefined;\n }\n if (this.closeDelay > 0) {\n var hide = function () {\n if (_this.popupObj) {\n _this.popupObj.hide(closeAnimation_1);\n }\n };\n this.hideTimer = setTimeout(hide, this.closeDelay);\n }\n else {\n this.popupObj.hide(closeAnimation_1);\n }\n }\n else {\n this.isHidden = false;\n }\n };\n Tooltip.prototype.restoreElement = function (target) {\n this.unwireMouseEvents(target);\n if (!isNullOrUndefined(target.getAttribute('data-content'))) {\n target.setAttribute('title', target.getAttribute('data-content'));\n target.removeAttribute('data-content');\n }\n this.removeDescribedBy(target);\n };\n Tooltip.prototype.clear = function () {\n if (this.tooltipEle) {\n removeClass([this.tooltipEle], POPUP_CLOSE);\n addClass([this.tooltipEle], POPUP_OPEN);\n }\n if (this.isHidden) {\n if (this.popupObj) {\n this.popupObj.destroy();\n }\n if (this.tooltipEle) {\n remove(this.tooltipEle);\n }\n this.tooltipEle = null;\n this.popupObj = null;\n }\n };\n Tooltip.prototype.onMouseOut = function (e) {\n this.hideTooltip(this.animation.close, e);\n };\n Tooltip.prototype.onStickyClose = function (e) {\n this.close();\n };\n Tooltip.prototype.onMouseMove = function (event) {\n var eventPageX = 0;\n var eventPageY = 0;\n if (event.type.indexOf('touch') > -1) {\n event.preventDefault();\n eventPageX = event.touches[0].pageX;\n eventPageY = event.touches[0].pageY;\n }\n else {\n eventPageX = event.pageX;\n eventPageY = event.pageY;\n }\n PopupAnimation.stop(this.tooltipEle);\n removeClass([this.tooltipEle], POPUP_CLOSE);\n addClass([this.tooltipEle], POPUP_OPEN);\n this.adjustArrow(event.target, this.position, this.tooltipPositionX, this.tooltipPositionY);\n var pos = this.calculateTooltipOffset(this.position);\n var x = eventPageX + pos.left + this.offsetX;\n var y = eventPageY + pos.top + this.offsetY;\n var elePos = this.checkCollision(event.target, x, y);\n if (this.tooltipPositionX !== elePos.horizontal || this.tooltipPositionY !== elePos.vertical) {\n var newpos = (this.position.indexOf('Bottom') === 0 || this.position.indexOf('Top') === 0) ?\n elePos.vertical + elePos.horizontal : elePos.horizontal + elePos.vertical;\n elePos.position = newpos;\n this.adjustArrow(event.target, elePos.position, elePos.horizontal, elePos.vertical);\n var colpos = this.calculateTooltipOffset(elePos.position);\n elePos.left = eventPageX + colpos.left - this.offsetX;\n elePos.top = eventPageY + colpos.top - this.offsetY;\n }\n this.tooltipEle.style.left = elePos.left + 'px';\n this.tooltipEle.style.top = elePos.top + 'px';\n };\n Tooltip.prototype.keyDown = function (event) {\n if (this.tooltipEle && event.keyCode === 27) {\n this.close();\n }\n };\n Tooltip.prototype.touchEnd = function (e) {\n if (this.tooltipEle && closest(e.target, '.' + ROOT) === null) {\n this.close();\n }\n };\n Tooltip.prototype.scrollHandler = function (e) {\n if (this.tooltipEle) {\n this.close();\n }\n };\n /**\n * Core method that initializes the control rendering.\n * @private\n */\n Tooltip.prototype.render = function () {\n this.initialize();\n this.wireEvents(this.opensOn);\n };\n /**\n * Initializes the values of private members.\n * @private\n */\n Tooltip.prototype.preRender = function () {\n this.tipClass = TIP_BOTTOM;\n this.tooltipPositionX = 'Center';\n this.tooltipPositionY = 'Top';\n this.isHidden = true;\n };\n /**\n * Binding events to the Tooltip element.\n * @hidden\n */\n Tooltip.prototype.wireEvents = function (trigger) {\n var triggerList = this.getTriggerList(trigger);\n for (var _i = 0, triggerList_1 = triggerList; _i < triggerList_1.length; _i++) {\n var opensOn = triggerList_1[_i];\n if (opensOn === 'Custom') {\n return;\n }\n if (opensOn === 'Focus') {\n this.wireFocusEvents();\n }\n if (opensOn === 'Click') {\n EventHandler.add(this.element, Browser.touchStartEvent, this.targetClick, this);\n }\n if (opensOn === 'Hover') {\n if (Browser.isDevice) {\n this.touchModule = new Touch(this.element, {\n tapHoldThreshold: TAPHOLD_THRESHOLD,\n tapHold: this.tapHoldHandler.bind(this)\n });\n EventHandler.add(this.element, Browser.touchEndEvent, this.touchEndHandler, this);\n }\n else {\n EventHandler.add(this.element, 'mouseover', this.targetHover, this);\n }\n }\n }\n EventHandler.add(document, 'touchend', this.touchEnd, this);\n EventHandler.add(document, 'scroll', this.scrollHandler, this);\n EventHandler.add(document, 'keydown', this.keyDown, this);\n };\n Tooltip.prototype.getTriggerList = function (trigger) {\n if (trigger === 'Auto') {\n trigger = (Browser.isDevice) ? 'Hover' : 'Hover Focus';\n }\n return trigger.split(' ');\n };\n Tooltip.prototype.wireFocusEvents = function () {\n if (!isNullOrUndefined(this.target)) {\n var targetList = [].slice.call(this.element.querySelectorAll(this.target));\n for (var _i = 0, targetList_2 = targetList; _i < targetList_2.length; _i++) {\n var target = targetList_2[_i];\n EventHandler.add(target, 'focus', this.targetHover, this);\n }\n }\n else {\n EventHandler.add(this.element, 'focus', this.targetHover, this);\n }\n };\n Tooltip.prototype.wireMouseEvents = function (e, target) {\n if (this.tooltipEle) {\n if (!this.isSticky) {\n if (e.type === 'focus') {\n EventHandler.add(target, 'blur', this.onMouseOut, this);\n }\n if (e.type === 'mouseover') {\n EventHandler.add(target, 'mouseleave', this.onMouseOut, this);\n }\n }\n if (this.mouseTrail) {\n EventHandler.add(target, 'mousemove touchstart mouseenter', this.onMouseMove, this);\n }\n }\n };\n /**\n * Unbinding events from the element on widget destroy.\n * @hidden\n */\n Tooltip.prototype.unwireEvents = function (trigger) {\n var triggerList = this.getTriggerList(trigger);\n for (var _i = 0, triggerList_2 = triggerList; _i < triggerList_2.length; _i++) {\n var opensOn = triggerList_2[_i];\n if (opensOn === 'Custom') {\n return;\n }\n if (opensOn === 'Focus') {\n this.unwireFocusEvents();\n }\n if (opensOn === 'Click') {\n EventHandler.remove(this.element, Browser.touchStartEvent, this.targetClick);\n }\n if (opensOn === 'Hover') {\n if (Browser.isDevice) {\n if (this.touchModule) {\n this.touchModule.destroy();\n }\n EventHandler.remove(this.element, Browser.touchEndEvent, this.touchEndHandler);\n }\n else {\n EventHandler.remove(this.element, 'mouseover', this.targetHover);\n }\n }\n }\n EventHandler.remove(document, 'touchend', this.touchEnd);\n EventHandler.remove(document, 'scroll', this.scrollHandler);\n EventHandler.remove(document, 'keydown', this.keyDown);\n };\n Tooltip.prototype.unwireFocusEvents = function () {\n if (!isNullOrUndefined(this.target)) {\n var targetList = [].slice.call(this.element.querySelectorAll(this.target));\n for (var _i = 0, targetList_3 = targetList; _i < targetList_3.length; _i++) {\n var target = targetList_3[_i];\n EventHandler.remove(target, 'focus', this.targetHover);\n }\n }\n else {\n EventHandler.remove(this.element, 'focus', this.targetHover);\n }\n };\n Tooltip.prototype.unwireMouseEvents = function (target) {\n if (!this.isSticky) {\n var triggerList = this.getTriggerList(this.opensOn);\n for (var _i = 0, triggerList_3 = triggerList; _i < triggerList_3.length; _i++) {\n var opensOn = triggerList_3[_i];\n if (opensOn === 'Focus') {\n EventHandler.remove(target, 'blur', this.onMouseOut);\n }\n if (opensOn === 'Hover' && !Browser.isDevice) {\n EventHandler.remove(target, 'mouseleave', this.onMouseOut);\n }\n }\n }\n if (this.mouseTrail) {\n EventHandler.remove(target, 'mousemove touchstart mouseenter', this.onMouseMove);\n }\n };\n /**\n * Core method to return the component name.\n * @private\n */\n Tooltip.prototype.getModuleName = function () {\n return 'tooltip';\n };\n /**\n * Returns the properties to be maintained in the persisted state.\n * @private\n */\n Tooltip.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * Called internally, if any of the property value changed.\n * @private\n */\n Tooltip.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'width':\n if (this.tooltipEle) {\n this.tooltipEle.style.width = formatUnit(newProp.width);\n }\n break;\n case 'height':\n if (this.tooltipEle) {\n this.tooltipEle.style.height = formatUnit(newProp.height);\n }\n break;\n case 'content':\n if (this.tooltipEle) {\n this.renderContent();\n }\n break;\n case 'opensOn':\n this.unwireEvents(oldProp.opensOn);\n this.wireEvents(newProp.opensOn);\n break;\n case 'position':\n this.formatPosition();\n var target = document.querySelector('[data-tooltip-id= ' + this.ctrlId + '_content]');\n if (this.tooltipEle && target) {\n var arrowInnerELe = this.tooltipEle.querySelector('.' + ARROW_TIP_INNER);\n arrowInnerELe.style.top = arrowInnerELe.style.left = null;\n this.reposition(target);\n }\n break;\n case 'tipPointerPosition':\n var trgt = document.querySelector('[data-tooltip-id= ' + this.ctrlId + '_content]');\n if (this.tooltipEle && trgt) {\n this.reposition(trgt);\n }\n break;\n case 'offsetX':\n if (this.tooltipEle) {\n var x = newProp.offsetX - oldProp.offsetX;\n this.tooltipEle.style.left = (parseInt(this.tooltipEle.style.left, 10) + (x)).toString() + 'px';\n }\n break;\n case 'offsetY':\n if (this.tooltipEle) {\n var y = newProp.offsetY - oldProp.offsetY;\n this.tooltipEle.style.top = (parseInt(this.tooltipEle.style.top, 10) + (y)).toString() + 'px';\n }\n break;\n case 'cssClass':\n if (this.tooltipEle) {\n if (oldProp.cssClass) {\n removeClass([this.tooltipEle], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([this.tooltipEle], newProp.cssClass.split(' '));\n }\n }\n break;\n case 'enableRtl':\n if (this.tooltipEle) {\n if (this.enableRtl) {\n addClass([this.tooltipEle], RTL);\n }\n else {\n removeClass([this.tooltipEle], RTL);\n }\n }\n break;\n }\n }\n };\n /**\n * It is used to show the Tooltip on the specified target with specific animation settings.\n * @param element Target element where the Tooltip is to be displayed.\n * @param animation Sets the specific animation, while showing the Tooltip on the screen.\n * @return {void}\n */\n Tooltip.prototype.open = function (element, animation) {\n if (animation === void 0) { animation = this.animation.open; }\n if (element.style.display === 'none') {\n return;\n }\n this.showTooltip(element, animation);\n };\n /**\n * It is used to hide the Tooltip with specific animation effect.\n * @param animation Sets the specific animation when hiding Tooltip from the screen.\n * @return {void}\n */\n Tooltip.prototype.close = function (animation) {\n if (animation === void 0) { animation = this.animation.close; }\n this.hideTooltip(animation);\n };\n /**\n * It is used to refresh the Tooltip content and its position.\n * @param target Target element where the Tooltip content or position needs to be refreshed.\n * @return {void}\n */\n Tooltip.prototype.refresh = function (target) {\n if (this.tooltipEle) {\n this.renderContent(target);\n }\n if (this.popupObj && target) {\n this.reposition(target);\n }\n };\n /**\n * It is used to destroy the Tooltip component.\n * @method destroy\n * @return {void}\n * @memberof Tooltip\n */\n Tooltip.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n removeClass([this.element], ROOT);\n this.unwireEvents(this.opensOn);\n if (this.popupObj) {\n this.popupObj.destroy();\n }\n if (this.tooltipEle) {\n remove(this.tooltipEle);\n }\n this.tooltipEle = null;\n this.popupObj = null;\n };\n __decorate([\n Property('auto')\n ], Tooltip.prototype, \"width\", void 0);\n __decorate([\n Property('auto')\n ], Tooltip.prototype, \"height\", void 0);\n __decorate([\n Property()\n ], Tooltip.prototype, \"content\", void 0);\n __decorate([\n Property()\n ], Tooltip.prototype, \"target\", void 0);\n __decorate([\n Property('TopCenter')\n ], Tooltip.prototype, \"position\", void 0);\n __decorate([\n Property(0)\n ], Tooltip.prototype, \"offsetX\", void 0);\n __decorate([\n Property(0)\n ], Tooltip.prototype, \"offsetY\", void 0);\n __decorate([\n Property(true)\n ], Tooltip.prototype, \"showTipPointer\", void 0);\n __decorate([\n Property('Auto')\n ], Tooltip.prototype, \"tipPointerPosition\", void 0);\n __decorate([\n Property('Auto')\n ], Tooltip.prototype, \"opensOn\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"mouseTrail\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"isSticky\", void 0);\n __decorate([\n Complex({}, Animation)\n ], Tooltip.prototype, \"animation\", void 0);\n __decorate([\n Property(0)\n ], Tooltip.prototype, \"openDelay\", void 0);\n __decorate([\n Property(0)\n ], Tooltip.prototype, \"closeDelay\", void 0);\n __decorate([\n Property()\n ], Tooltip.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"enableRtl\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"beforeRender\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"afterOpen\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"afterClose\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"beforeCollision\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"destroyed\", void 0);\n Tooltip = __decorate([\n NotifyPropertyChanges\n ], Tooltip);\n return Tooltip;\n}(Component));\nexport { Tooltip };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Collection, Event, NotifyPropertyChanges, detach, Property, EventHandler } from '@syncfusion/ej2-base';\nimport { addClass, createElement, getUniqueID, rippleEffect } from '@syncfusion/ej2-base';\nimport { attributes, Component, closest, select } from '@syncfusion/ej2-base';\nimport { classList, removeClass } from '@syncfusion/ej2-base';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { Popup, getZindexPartial } from '@syncfusion/ej2-popups';\nimport { getModel, Item } from './../common/common';\nvar classNames = {\n DISABLED: 'e-disabled',\n FOCUS: 'e-focused',\n ICON: 'e-menu-icon',\n ITEM: 'e-item',\n POPUP: 'e-dropdown-popup',\n RTL: 'e-rtl',\n SEPARATOR: 'e-separator',\n VERTICAL: 'e-vertical'\n};\n/**\n * DropDownButton component is used to toggle contextual overlays for displaying list of action items.\n * It can contain both text and images.\n * ``````html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar DropDownButton = /** @class */ (function (_super) {\n __extends(DropDownButton, _super);\n /**\n * Constructor for creating the widget\n * @param {DropDownButtonModel} options?\n * @param {string|HTMLButtonElement} element?\n */\n function DropDownButton(options, element) {\n return _super.call(this, options, element) || this;\n }\n DropDownButton.prototype.preRender = function () {\n /** */\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @returns string\n */\n DropDownButton.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * To open/close DropDownButton popup based on current state of the DropDownButton.\n * @returns void\n */\n DropDownButton.prototype.toggle = function () {\n this.canOpen() ? this.openPopUp() : this.closePopup();\n };\n /**\n * Initialize the Component rendering\n * @returns void\n * @private\n */\n DropDownButton.prototype.render = function () {\n this.initialize();\n if (!this.disabled) {\n this.wireEvents();\n }\n };\n DropDownButton.prototype.createPopup = function () {\n var div = createElement('div', {\n className: classNames.POPUP,\n id: this.element.id + '-popup'\n });\n document.body.appendChild(div);\n this.dropDown = new Popup(div, {\n relateTo: this.element,\n collision: { X: 'fit', Y: 'flip' },\n position: { X: 'left', Y: 'bottom' },\n targetType: 'relative',\n content: this.target ? this.getTargetElement() : '',\n zIndex: getZindexPartial(div),\n enableRtl: this.enableRtl\n });\n this.dropDown.hide();\n attributes(this.element, (_a = {},\n _a['role'] = 'menu',\n _a['aria-haspopup'] = this.items.length || this.target ? 'true' : 'false',\n _a['aria-expanded'] = 'false',\n _a['aria-owns'] = this.getPopUpElement().id,\n _a['type'] = 'button',\n _a));\n if (this.cssClass) {\n addClass([div], this.cssClass.split(' '));\n }\n var _a;\n };\n DropDownButton.prototype.getTargetElement = function () {\n return typeof (this.target) === 'string' ? select(this.target) : this.target;\n };\n DropDownButton.prototype.createItems = function (items) {\n var showIcon = this.hasIcon(items, 'iconCss');\n var span;\n var item;\n var li;\n var eventArgs;\n var ul = createElement('ul', {\n attrs: { 'tabindex': '0' }\n });\n for (var i = 0; i < items.length; i++) {\n item = items[i];\n li = createElement('li', {\n innerHTML: item.url ? '' : item.text,\n className: item.separator ? classNames.ITEM + ' ' + classNames.SEPARATOR : classNames.ITEM,\n attrs: { 'role': 'menuItem', 'tabindex': '-1' },\n id: item.id ? item.id : getUniqueID('e-' + this.getModuleName() + '-item')\n });\n if (item.iconCss) {\n span = createElement('span', { className: classNames.ICON + ' ' + item.iconCss });\n li.insertBefore(span, li.childNodes[0]);\n }\n else {\n if (showIcon && !item.separator) {\n li.classList.add('e-blank-icon');\n }\n }\n if (item.url) {\n li.appendChild(this.createAnchor(item));\n }\n eventArgs = { item: item, element: li };\n this.trigger('beforeItemRender', eventArgs);\n ul.appendChild(li);\n }\n return ul;\n };\n DropDownButton.prototype.hasIcon = function (items, field) {\n for (var i = 0, len = items.length; i < len; i++) {\n if (items[i][field]) {\n return true;\n }\n }\n return false;\n };\n DropDownButton.prototype.createAnchor = function (item) {\n return createElement('a', { className: 'e-menu-text e-menu-url', innerHTML: item.text, attrs: { 'href': item.url } });\n };\n DropDownButton.prototype.initialize = function () {\n this.button = new Button({\n iconCss: this.iconCss, cssClass: this.cssClass, content: this.content,\n disabled: this.disabled, enableRtl: this.enableRtl, enablePersistence: this.enablePersistence\n });\n this.button.appendTo(this.element);\n if (!this.element.id) {\n this.element.id = getUniqueID('e-' + this.getModuleName());\n }\n this.setIconPositionTop();\n this.appendArrowSpan();\n this.createPopup();\n this.setActiveElem([this.element]);\n };\n DropDownButton.prototype.setIconPositionTop = function () {\n var iconSpan = this.element.querySelector('.e-icon-left');\n if (iconSpan && this.iconPosition === 'Top') {\n addClass([this.element], 'e-top-icon-btn');\n removeClass([iconSpan], 'e-icon-left');\n addClass([iconSpan], 'e-icon-top');\n }\n };\n DropDownButton.prototype.appendArrowSpan = function () {\n this.element.appendChild(createElement('span', {\n className: 'e-btn-icon e-icons ' + 'e-icon-' + (this.cssClass.indexOf(classNames.VERTICAL) > -1\n ? 'bottom' : 'right') + ' e-caret'\n }));\n };\n DropDownButton.prototype.setActiveElem = function (elem) {\n this.activeElem = elem;\n };\n /**\n * Get component name.\n * @returns string\n * @private\n */\n DropDownButton.prototype.getModuleName = function () {\n return 'dropdown-btn';\n };\n DropDownButton.prototype.canOpen = function () {\n return this.getPopUpElement().classList.contains('e-popup-close');\n };\n /**\n * Destroys the widget.\n * @returns void\n */\n DropDownButton.prototype.destroy = function () {\n var _this = this;\n if (this.element.querySelector('span.e-caret')) {\n detach(this.element.querySelector('span.e-caret'));\n }\n _super.prototype.destroy.call(this);\n this.button.destroy();\n ['role', 'aria-haspopup', 'aria-expanded', 'aria-owns', 'type'].forEach(function (key) {\n _this.element.removeAttribute(key);\n });\n removeClass([this.element], ['e-btn']);\n removeClass(this.activeElem, ['e-active']);\n this.dropDown.destroy();\n var popupEle = document.getElementById(this.getPopUpElement().id);\n if (popupEle) {\n removeClass([popupEle], ['e-popup-open', 'e-popup-close']);\n detach(popupEle);\n }\n if (!this.disabled) {\n this.unWireEvents();\n }\n };\n DropDownButton.prototype.getPopUpElement = function () {\n return this.dropDown.element;\n };\n DropDownButton.prototype.getULElement = function () {\n return this.getPopUpElement().children[0];\n };\n DropDownButton.prototype.wireEvents = function () {\n var popupElement = this.getPopUpElement();\n this.delegateMousedownHandler = this.mousedownHandler.bind(this);\n EventHandler.add(document, 'mousedown touchstart', this.delegateMousedownHandler, this);\n EventHandler.add(this.element, 'click', this.clickHandler, this);\n EventHandler.add(popupElement, 'click', this.clickHandler, this);\n EventHandler.add(this.element, 'keydown', this.keyBoardHandler, this);\n EventHandler.add(popupElement, 'keydown', this.keyBoardHandler, this);\n this.rippleFn = rippleEffect(popupElement, { selector: '.' + classNames.ITEM });\n };\n DropDownButton.prototype.keyBoardHandler = function (e) {\n if (e.target === this.element && (e.keyCode === 9 || (!e.altKey && e.keyCode === 40) || e.keyCode === 38)) {\n return;\n }\n switch (e.keyCode) {\n case 38:\n case 40:\n if (e.altKey && (e.keyCode === 38 || e.keyCode === 40)) {\n this.keyEventHandler(e);\n }\n else {\n this.upDownKeyHandler(e);\n }\n break;\n case 9:\n case 13:\n case 27:\n case 32:\n this.keyEventHandler(e);\n break;\n }\n };\n DropDownButton.prototype.upDownKeyHandler = function (e) {\n if (this.target && (e.keyCode === 38 || e.keyCode === 40)) {\n return;\n }\n e.preventDefault();\n var ul = this.getULElement();\n var defaultIdx = e.keyCode === 40 ? 0 : ul.childElementCount - 1;\n var liIdx = defaultIdx;\n var li = null;\n this.removeCustomSelection();\n for (var i = 0, len = ul.children.length; i < len; i++) {\n if (ul.children[i].classList.contains(classNames.FOCUS)) {\n li = ul.children[i];\n liIdx = i;\n li.classList.remove(classNames.FOCUS);\n e.keyCode === 40 ? liIdx++ : liIdx--;\n if (liIdx === (e.keyCode === 40 ? ul.childElementCount : -1)) {\n liIdx = defaultIdx;\n }\n }\n }\n li = ul.children[liIdx];\n liIdx = this.isValidLI(li, liIdx, e.keyCode);\n if (liIdx !== -1) {\n addClass([ul.children[liIdx]], classNames.FOCUS);\n ul.children[liIdx].focus();\n }\n };\n DropDownButton.prototype.removeCustomSelection = function () {\n var selectedLi = this.getULElement().querySelector('.e-selected');\n if (selectedLi) {\n selectedLi.classList.remove('e-selected');\n }\n };\n DropDownButton.prototype.isValidLI = function (li, index, keyCode, count) {\n if (count === void 0) { count = 0; }\n if (li.classList.contains(classNames.SEPARATOR) || li.classList.contains(classNames.DISABLED)) {\n if (index === (keyCode === 40 ? this.items.length - 1 : 0)) {\n index = keyCode === 40 ? 0 : this.items.length - 1;\n }\n else {\n keyCode === 40 ? index++ : index--;\n }\n }\n li = this.getULElement().children[index];\n if (li.classList.contains(classNames.SEPARATOR) || li.classList.contains(classNames.DISABLED)) {\n count++;\n if (count === this.items.length) {\n return index = -1;\n }\n index = this.isValidLI(li, index, keyCode, count);\n }\n return index;\n };\n DropDownButton.prototype.keyEventHandler = function (e) {\n if (this.target && (e.keyCode === 13 || e.keyCode === 9)) {\n return;\n }\n if (e.keyCode !== 9) {\n e.preventDefault();\n }\n if (e.keyCode === 27 || e.keyCode === 38 || e.keyCode === 9) {\n if (!this.canOpen()) {\n this.closePopup(e, this.element);\n }\n }\n else {\n this.clickHandler(e);\n }\n };\n DropDownButton.prototype.getLI = function (elem) {\n return elem.tagName === 'LI' ? elem : closest(elem, 'li');\n };\n DropDownButton.prototype.mousedownHandler = function (e) {\n var trgt = e.target;\n if (!this.canOpen() && !(closest(trgt, '#' + this.getPopUpElement().id) || closest(trgt, '#' + this.element.id))) {\n this.closePopup(e);\n }\n };\n DropDownButton.prototype.clickHandler = function (e) {\n var trgt = e.target;\n var canOpen = this.canOpen();\n if (closest(trgt, '#' + this.element.id)) {\n if (canOpen) {\n this.openPopUp(e);\n }\n else {\n this.closePopup(e, this.activeElem[0]);\n }\n }\n else {\n if (closest(trgt, '#' + this.getPopUpElement().id)) {\n var eventArgs = void 0;\n var liIdx = void 0;\n var item = void 0;\n var li = this.getLI(trgt);\n if (li) {\n liIdx = Array.prototype.indexOf.call(this.getULElement().children, li);\n item = this.items[liIdx];\n if (item) {\n eventArgs = { element: li, item: item };\n this.trigger('select', eventArgs);\n }\n this.closePopup(e, this.activeElem[0]);\n }\n }\n else {\n if (!canOpen) {\n this.closePopup(e);\n }\n }\n }\n };\n DropDownButton.prototype.openPopUp = function (e) {\n if (e === void 0) { e = null; }\n if (!this.target) {\n this.getPopUpElement().appendChild(this.createItems(this.items));\n }\n var ul = this.getULElement();\n var beforeOpenArgs = { element: ul, items: this.items, event: e, cancel: false };\n this.trigger('beforeOpen', beforeOpenArgs);\n if (!beforeOpenArgs.cancel) {\n this.dropDown.show();\n addClass([this.element], 'e-active');\n this.element.setAttribute('aria-expanded', 'true');\n ul.focus();\n var openArgs = { element: ul, items: this.items };\n this.trigger('open', openArgs);\n }\n };\n DropDownButton.prototype.closePopup = function (e, focusEle) {\n if (e === void 0) { e = null; }\n var ul = this.getULElement();\n var beforeCloseArgs = { element: ul, items: this.items, event: e, cancel: false };\n this.trigger('beforeClose', beforeCloseArgs);\n if (!beforeCloseArgs.cancel) {\n this.removeCustomSelection();\n this.dropDown.hide();\n removeClass(this.activeElem, 'e-active');\n this.element.setAttribute('aria-expanded', 'false');\n if (focusEle) {\n focusEle.focus();\n }\n var closeArgs = { element: ul, items: this.items };\n this.trigger('close', closeArgs);\n if (!this.target && ul) {\n detach(ul);\n }\n }\n };\n DropDownButton.prototype.unWireEvents = function () {\n EventHandler.remove(document, 'mousedown touchstart', this.delegateMousedownHandler);\n EventHandler.remove(this.element, 'click', this.clickHandler);\n EventHandler.remove(this.getPopUpElement(), 'click', this.clickHandler);\n EventHandler.remove(this.element, 'keydown', this.keyBoardHandler);\n EventHandler.remove(this.getPopUpElement(), 'keydown', this.keyBoardHandler);\n this.rippleFn();\n };\n /**\n * Called internally if any of the property value changed.\n * @param {DropDownButtonModel} newProp\n * @param {DropDownButtonModel} oldProp\n * @returns void\n * @private\n */\n DropDownButton.prototype.onPropertyChanged = function (newProp, oldProp) {\n var btnModel = ['content', 'cssClass', 'iconCss', 'disabled', 'enableRtl'];\n if (newProp.iconPosition === 'Left') {\n btnModel.push('iconPosition');\n }\n this.button.setProperties(getModel(newProp, btnModel));\n var popupElement = this.getPopUpElement();\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'content':\n if (!this.element.querySelector('span.e-caret')) {\n this.appendArrowSpan();\n }\n break;\n case 'disabled':\n if (newProp.disabled) {\n this.unWireEvents();\n if (!this.canOpen()) {\n this.closePopup();\n }\n }\n else {\n this.wireEvents();\n }\n break;\n case 'cssClass':\n if (newProp.cssClass.indexOf(classNames.VERTICAL) > -1) {\n var arrowSpan = this.element.querySelector('span.e-caret');\n classList(arrowSpan, ['e-icon-bottom'], ['e-icon-right']);\n }\n if (oldProp.cssClass) {\n removeClass([popupElement], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([popupElement], newProp.cssClass.split(' '));\n }\n break;\n case 'iconPosition':\n this.setIconPositionTop();\n break;\n case 'enableRtl':\n popupElement.classList.toggle(classNames.RTL);\n break;\n case 'target':\n this.target = newProp.target;\n detach(this.getULElement());\n popupElement.appendChild(this.getTargetElement());\n this.dropDown.content = this.getTargetElement();\n break;\n case 'items':\n this.dropDown.refresh();\n if (popupElement.classList.contains('e-popup-open')) {\n classList(popupElement, ['e-popup-close'], ['e-popup-open']);\n }\n break;\n }\n }\n };\n __decorate([\n Property('')\n ], DropDownButton.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], DropDownButton.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], DropDownButton.prototype, \"disabled\", void 0);\n __decorate([\n Property('')\n ], DropDownButton.prototype, \"iconCss\", void 0);\n __decorate([\n Property('Left')\n ], DropDownButton.prototype, \"iconPosition\", void 0);\n __decorate([\n Collection([], Item)\n ], DropDownButton.prototype, \"items\", void 0);\n __decorate([\n Property('')\n ], DropDownButton.prototype, \"target\", void 0);\n __decorate([\n Event()\n ], DropDownButton.prototype, \"beforeItemRender\", void 0);\n __decorate([\n Event()\n ], DropDownButton.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], DropDownButton.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], DropDownButton.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], DropDownButton.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], DropDownButton.prototype, \"select\", void 0);\n DropDownButton = __decorate([\n NotifyPropertyChanges\n ], DropDownButton);\n return DropDownButton;\n}(Component));\nexport { DropDownButton };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/// \nimport { Event, createElement, remove, addClass, removeClass, detach, getValue, setValue } from '@syncfusion/ej2-base';\nimport { EventHandler, Collection, NotifyPropertyChanges, Property } from '@syncfusion/ej2-base';\nimport { attributes, getUniqueID, getInstance, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { getModel, Item } from './../common/common';\nimport { DropDownButton } from '../drop-down-button/drop-down-button';\nvar RTL = 'e-rtl';\nvar TAGNAME = 'EJS-SPLITBUTTON';\n/**\n * SplitButton component has primary and secondary button. Primary button is used to select\n * default action and secondary button is used to toggle contextual overlays for displaying list of\n * action items. It can contain both text and images.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar SplitButton = /** @class */ (function (_super) {\n __extends(SplitButton, _super);\n /**\n * Constructor for creating the widget\n * @param {SplitButtonModel} options?\n * @param {string|HTMLButtonElement} element?\n */\n function SplitButton(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Initialize Angular support.\n * @private\n */\n SplitButton.prototype.preRender = function () {\n var ele = this.element;\n if (ele.tagName === TAGNAME) {\n var ejInstance = getValue('ej2_instances', ele);\n var btn = createElement('button', { attrs: { 'type': 'button' } });\n var wrapper = createElement(TAGNAME, { className: 'e-' + this.getModuleName() + '-wrapper' });\n for (var idx = 0, len = ele.attributes.length; idx < len; idx++) {\n btn.setAttribute(ele.attributes[idx].nodeName, ele.attributes[idx].nodeValue);\n }\n ele.parentNode.insertBefore(wrapper, ele);\n detach(ele);\n ele = btn;\n wrapper.appendChild(ele);\n setValue('ej2_instances', ejInstance, ele);\n this.wrapper = wrapper;\n this.element = ele;\n }\n if (!this.element.id) {\n this.element.id = getUniqueID('e-' + this.getModuleName());\n }\n };\n SplitButton.prototype.render = function () {\n this.initWrapper();\n this.createPrimaryButton();\n this.createSecondaryButton();\n this.setActiveElem([this.element, this.secondaryBtnObj.element]);\n this.setAria();\n this.wireEvents();\n };\n SplitButton.prototype.initWrapper = function () {\n if (!this.wrapper) {\n this.wrapper = createElement('div', { className: 'e-' + this.getModuleName() + '-wrapper' });\n this.element.parentNode.insertBefore(this.wrapper, this.element);\n }\n this.element.classList.remove('e-' + this.getModuleName());\n if (this.enableRtl) {\n this.wrapper.classList.add(RTL);\n }\n if (this.cssClass) {\n addClass([this.wrapper], this.cssClass.split(' '));\n }\n };\n SplitButton.prototype.createPrimaryButton = function () {\n var btnModel = {\n cssClass: this.cssClass,\n enableRtl: this.enableRtl,\n iconCss: this.iconCss,\n content: this.content,\n disabled: this.disabled\n };\n this.primaryBtnObj = new Button(btnModel, this.element);\n this.element.classList.add('e-' + this.getModuleName());\n this.element.type = 'button';\n this.wrapper.appendChild(this.element);\n this.setIconPositionTop();\n };\n SplitButton.prototype.createSecondaryButton = function () {\n var _this = this;\n var btnElem = createElement('button', {\n className: 'e-icon-btn',\n attrs: { 'tabindex': '-1' },\n id: this.element.id + '_dropdownbtn'\n });\n this.wrapper.appendChild(btnElem);\n var dropDownBtnModel = {\n cssClass: this.cssClass,\n disabled: this.disabled,\n enableRtl: this.enableRtl,\n items: this.items,\n target: this.target,\n beforeItemRender: function (args) {\n _this.trigger('beforeItemRender', args);\n },\n beforeOpen: function (args) {\n _this.trigger('beforeOpen', args);\n },\n beforeClose: function (args) {\n _this.trigger('beforeClose', args);\n },\n open: function (args) {\n _this.trigger('open', args);\n },\n close: function (args) {\n _this.trigger('close', args);\n },\n select: function (args) {\n _this.trigger('select', args);\n }\n };\n this.secondaryBtnObj = new DropDownButton(dropDownBtnModel, btnElem);\n this.secondaryBtnObj.dropDown.relateTo = this.wrapper;\n this.dropDown = this.secondaryBtnObj.dropDown;\n this.secondaryBtnObj.activeElem = [this.element, this.secondaryBtnObj.element];\n EventHandler.remove(this.getPopUpElement(), 'keydown', this.secondaryBtnObj.keyBoardHandler);\n this.secondaryBtnObj.element.querySelector('.e-btn-icon').classList.remove('e-icon-right');\n };\n SplitButton.prototype.setAria = function () {\n attributes(this.element, {\n 'role': 'listbox', 'aria-expanded': 'false', 'aria-haspopup': 'true',\n 'aria-label': this.element.textContent + ' splitbutton', 'aria-owns': this.secondaryBtnObj.dropDown.element.id\n });\n };\n /**\n * Get component name.\n * @returns string\n * @private\n */\n SplitButton.prototype.getModuleName = function () {\n return 'split-btn';\n };\n /**\n * To open/close SplitButton popup based on current state of the SplitButton.\n * @returns void\n */\n SplitButton.prototype.toggle = function () {\n this.secondaryBtnObj.toggle();\n };\n SplitButton.prototype.destroy = function () {\n var _this = this;\n this.primaryBtnObj.destroy();\n this.secondaryBtnObj.destroy();\n var element = document.getElementById(this.element.id);\n if (element && element.parentElement === this.wrapper) {\n if (this.wrapper.tagName === TAGNAME) {\n this.wrapper.innerHTML = '';\n removeClass([this.wrapper], ['e-rtl', 'e-' + this.getModuleName() + '-wrapper']);\n removeClass([this.wrapper], this.cssClass.split(' '));\n }\n else {\n removeClass([this.element], ['e-' + this.getModuleName(), RTL]);\n ['role', 'aria-label', 'aria-haspopup', 'aria-expanded', 'aria-owns', 'type'].forEach(function (key) {\n _this.element.removeAttribute(key);\n });\n this.wrapper.parentNode.insertBefore(this.element, this.wrapper);\n remove(this.wrapper);\n }\n this.unWireEvents();\n }\n };\n SplitButton.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'click', this.primaryBtnClickHandler, this);\n EventHandler.add(this.getPopUpElement(), 'keydown', this.keyBoardHandler, this);\n new KeyboardEvents(this.element, {\n keyAction: this.btnKeyBoardHandler.bind(this),\n keyConfigs: {\n altdownarrow: 'alt+downarrow'\n }\n });\n };\n SplitButton.prototype.unWireEvents = function () {\n EventHandler.remove(this.element, 'click', this.primaryBtnClickHandler);\n getInstance(this.element, KeyboardEvents).destroy();\n };\n SplitButton.prototype.primaryBtnClickHandler = function () {\n this.trigger('click', { element: this.element });\n };\n SplitButton.prototype.btnKeyBoardHandler = function (e) {\n switch (e.action) {\n case 'altdownarrow':\n this.clickHandler(e);\n break;\n }\n };\n /**\n * Called internally if any of the property value changed.\n * @param {SplitButtonModel} newProp\n * @param {SplitButtonModel} oldProp\n * @returns void\n */\n SplitButton.prototype.onPropertyChanged = function (newProp, oldProp) {\n var model = ['content', 'iconCss', 'cssClass', 'disabled', 'enableRtl'];\n if (newProp.iconPosition === 'Left') {\n model.push('iconPosition');\n }\n this.primaryBtnObj.setProperties(getModel(newProp, model));\n model = ['items', 'beforeOpen', 'beforeItemRender', 'select', 'open',\n 'close', 'cssClass', 'disabled', 'enableRtl'];\n this.secondaryBtnObj.setProperties(getModel(newProp, model));\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([this.wrapper], oldProp.cssClass.split(' '));\n }\n addClass([this.wrapper], newProp.cssClass.split(' '));\n break;\n case 'iconPosition':\n this.setIconPositionTop();\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n addClass([this.wrapper], RTL);\n }\n else {\n removeClass([this.wrapper], RTL);\n }\n break;\n }\n }\n };\n __decorate([\n Property('')\n ], SplitButton.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], SplitButton.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], SplitButton.prototype, \"disabled\", void 0);\n __decorate([\n Property('')\n ], SplitButton.prototype, \"iconCss\", void 0);\n __decorate([\n Property('Left')\n ], SplitButton.prototype, \"iconPosition\", void 0);\n __decorate([\n Collection([], Item)\n ], SplitButton.prototype, \"items\", void 0);\n __decorate([\n Property('')\n ], SplitButton.prototype, \"target\", void 0);\n __decorate([\n Event()\n ], SplitButton.prototype, \"beforeItemRender\", void 0);\n __decorate([\n Event()\n ], SplitButton.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], SplitButton.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], SplitButton.prototype, \"click\", void 0);\n __decorate([\n Event()\n ], SplitButton.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], SplitButton.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], SplitButton.prototype, \"select\", void 0);\n SplitButton = __decorate([\n NotifyPropertyChanges\n ], SplitButton);\n return SplitButton;\n}(DropDownButton));\nexport { SplitButton };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, EventHandler, Property, Event, Browser, L10n } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { createElement, attributes, addClass, removeClass, setStyleAttribute, detach } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, getValue, formatUnit, setValue, merge } from '@syncfusion/ej2-base';\nimport { Internationalization, getNumericObject } from '@syncfusion/ej2-base';\nimport { Input } from '../input/input';\nvar ROOT = 'e-control-wrapper e-numeric';\nvar SPINICON = 'e-input-group-icon';\nvar SPINUP = 'e-spin-up';\nvar SPINDOWN = 'e-spin-down';\nvar ERROR = 'e-error';\nvar INCREMENT = 'increment';\nvar DECREMENT = 'decrement';\nvar INTREGEXP = new RegExp('/^(-)?(\\d*)$/');\nvar DECIMALSEPARATOR = '.';\n/**\n * Represents the NumericTextBox component that allows the user to enter only numeric values.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar NumericTextBox = /** @class */ (function (_super) {\n __extends(NumericTextBox, _super);\n function NumericTextBox(options, element) {\n return _super.call(this, options, element) || this;\n }\n NumericTextBox.prototype.preRender = function () {\n this.isPrevFocused = false;\n this.decimalSeparator = '.';\n this.intRegExp = new RegExp('/^(-)?(\\d*)$/');\n this.isCalled = false;\n var ejInstance = getValue('ej2_instances', this.element);\n this.cloneElement = this.element.cloneNode(true);\n this.angularTagName = null;\n if (this.element.tagName === 'EJS-NUMERICTEXTBOX') {\n this.angularTagName = this.element.tagName;\n var input = createElement('input');\n var index = 0;\n for (index; index < this.element.attributes.length; index++) {\n input.setAttribute(this.element.attributes[index].nodeName, this.element.attributes[index].nodeValue);\n input.innerHTML = this.element.innerHTML;\n }\n if (this.element.hasAttribute('id')) {\n this.element.removeAttribute('id');\n }\n this.element.classList.remove('e-control', 'e-numerictextbox');\n this.element.appendChild(input);\n this.element = input;\n setValue('ej2_instances', ejInstance, this.element);\n }\n attributes(this.element, { 'role': 'spinbutton', 'tabindex': '0', 'autocomplete': 'off', 'aria-live': 'assertive' });\n var localeText = { incrementTitle: 'Increment value', decrementTitle: 'Decrement value', placeholder: '' };\n this.l10n = new L10n('numerictextbox', localeText, this.locale);\n this.isValidState = true;\n this.inputStyle = null;\n this.inputName = null;\n this.cultureInfo = {};\n this.initCultureInfo();\n this.initCultureFunc();\n this.checkAttributes();\n this.prevValue = this.value;\n this.validateMinMax();\n this.validateStep();\n if (this.placeholder === null) {\n this.updatePlaceholder();\n }\n };\n /**\n * To Initialize the control rendering\n * @private\n */\n NumericTextBox.prototype.render = function () {\n if (this.element.tagName.toLowerCase() === 'input') {\n this.createWrapper();\n if (this.showSpinButton) {\n this.spinBtnCreation();\n }\n if (!isNullOrUndefined(this.width)) {\n setStyleAttribute(this.container, { 'width': formatUnit(this.width) });\n }\n if (!this.container.classList.contains('e-input-group')) {\n this.container.classList.add('e-input-group');\n }\n this.changeValue(this.value === null || isNaN(this.value) ? null : this.strictMode ? this.trimValue(this.value) : this.value);\n this.wireEvents();\n if (this.value !== null && !isNaN(this.value)) {\n if (this.decimals) {\n this.setProperties({ value: this.roundNumber(this.value, this.decimals) }, true);\n }\n }\n }\n };\n NumericTextBox.prototype.checkAttributes = function () {\n var attributes = ['value', 'min', 'max', 'step', 'disabled', 'readonly', 'style', 'name'];\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var prop = attributes_1[_i];\n if (!isNullOrUndefined(this.element.getAttribute(prop))) {\n switch (prop) {\n case 'disabled':\n var enabled = this.element.getAttribute(prop) === 'disabled' ||\n this.element.getAttribute(prop) === 'true' ? false : true;\n this.setProperties({ enabled: enabled }, true);\n break;\n case 'readonly':\n var readonly = this.element.getAttribute(prop) === 'readonly'\n || this.element.getAttribute(prop) === 'true' ? true : false;\n this.setProperties({ readonly: readonly }, true);\n break;\n case 'style':\n this.inputStyle = this.element.getAttribute(prop);\n break;\n case 'name':\n this.inputName = this.element.getAttribute(prop);\n break;\n default:\n var value = this.instance.getNumberParser({ format: 'n' })(this.element.getAttribute(prop));\n if ((value !== null && !isNaN(value)) || (prop === 'value')) {\n this.setProperties(setValue(prop, value, {}), true);\n }\n break;\n }\n }\n }\n };\n NumericTextBox.prototype.updatePlaceholder = function () {\n this.setProperties({ placeholder: this.l10n.getConstant('placeholder') }, true);\n };\n NumericTextBox.prototype.initCultureFunc = function () {\n this.instance = new Internationalization(this.locale);\n };\n NumericTextBox.prototype.initCultureInfo = function () {\n this.cultureInfo.format = this.format;\n if (getValue('currency', this) !== null) {\n setValue('currency', this.currency, this.cultureInfo);\n this.setProperties({ currencyCode: this.currency }, true);\n }\n };\n /* Wrapper creation */\n NumericTextBox.prototype.createWrapper = function () {\n var inputObj = Input.createInput({\n element: this.element,\n floatLabelType: this.floatLabelType,\n properties: {\n readonly: this.readonly,\n placeholder: this.placeholder,\n cssClass: this.cssClass,\n enableRtl: this.enableRtl,\n showClearButton: this.showClearButton,\n enabled: this.enabled\n }\n });\n this.inputWrapper = inputObj;\n this.container = inputObj.container;\n this.container.setAttribute('class', ROOT + ' ' + this.container.getAttribute('class'));\n if (this.readonly) {\n attributes(this.element, { 'aria-readonly': 'true' });\n }\n this.hiddenInput = (createElement('input', { attrs: { type: 'hidden', 'validateHidden': 'true' } }));\n this.inputName = this.inputName !== null ? this.inputName : this.element.id;\n this.element.removeAttribute('name');\n attributes(this.hiddenInput, { 'name': this.inputName });\n this.container.insertBefore(this.hiddenInput, this.container.childNodes[1]);\n if (this.inputStyle !== null) {\n attributes(this.container, { 'style': this.inputStyle });\n }\n };\n /* Spinner creation */\n NumericTextBox.prototype.spinBtnCreation = function () {\n this.spinDown = Input.appendSpan(SPINICON + ' ' + SPINDOWN, this.container);\n attributes(this.spinDown, {\n 'title': this.l10n.getConstant('decrementTitle'),\n 'aria-label': this.l10n.getConstant('decrementTitle')\n });\n this.spinUp = Input.appendSpan(SPINICON + ' ' + SPINUP, this.container);\n attributes(this.spinUp, {\n 'title': this.l10n.getConstant('incrementTitle'),\n 'aria-label': this.l10n.getConstant('incrementTitle')\n });\n this.wireSpinBtnEvents();\n };\n NumericTextBox.prototype.validateMinMax = function () {\n if (!(typeof (this.min) === 'number' && !isNaN(this.min))) {\n this.setProperties({ min: -(Number.MAX_VALUE) }, true);\n }\n if (!(typeof (this.max) === 'number' && !isNaN(this.max))) {\n this.setProperties({ max: Number.MAX_VALUE }, true);\n }\n if (this.decimals !== null) {\n if (this.min !== -(Number.MAX_VALUE)) {\n this.setProperties({ min: this.instance.getNumberParser({ format: 'n' })(this.formattedValue(this.decimals, this.min)) }, true);\n }\n if (this.max !== (Number.MAX_VALUE)) {\n this.setProperties({ max: this.instance.getNumberParser({ format: 'n' })(this.formattedValue(this.decimals, this.max)) }, true);\n }\n }\n this.setProperties({ min: this.min > this.max ? this.max : this.min }, true);\n attributes(this.element, { 'aria-valuemin': this.min.toString(), 'aria-valuemax': this.max.toString() });\n };\n NumericTextBox.prototype.formattedValue = function (decimals, value) {\n return this.instance.getNumberFormat({\n maximumFractionDigits: decimals,\n minimumFractionDigits: decimals, useGrouping: false\n })(value);\n };\n NumericTextBox.prototype.validateStep = function () {\n if (this.decimals !== null) {\n this.setProperties({ step: this.instance.getNumberParser({ format: 'n' })(this.formattedValue(this.decimals, this.step)) }, true);\n }\n };\n NumericTextBox.prototype.action = function (operation, event) {\n this.isInteract = true;\n var value = this.isFocused ? this.instance.getNumberParser({ format: 'n' })(this.element.value) : this.value;\n this.changeValue(this.performAction(value, this.step, operation));\n this.raiseChangeEvent(event);\n };\n NumericTextBox.prototype.checkErrorClass = function () {\n if (this.isValidState) {\n removeClass([this.container], ERROR);\n }\n else {\n addClass([this.container], ERROR);\n }\n attributes(this.element, { 'aria-invalid': this.isValidState ? 'false' : 'true' });\n };\n NumericTextBox.prototype.bindClearEvent = function () {\n if (this.showClearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown touchstart', this.resetHandler, this);\n }\n };\n NumericTextBox.prototype.resetHandler = function (e) {\n e.preventDefault();\n if (!(this.inputWrapper.clearButton.classList.contains('e-clear-icon-hide'))) {\n this.clear(e);\n }\n };\n NumericTextBox.prototype.clear = function (event) {\n this.setProperties({ value: null }, true);\n this.setElementValue('');\n };\n NumericTextBox.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'focus', this.focusIn, this);\n EventHandler.add(this.element, 'blur', this.focusOut, this);\n EventHandler.add(this.element, 'keydown', this.keyDownHandler, this);\n EventHandler.add(this.element, 'keyup', this.keyUpHandler, this);\n EventHandler.add(this.element, 'input', this.inputHandler, this);\n EventHandler.add(this.element, 'keypress', this.keyPressHandler, this);\n EventHandler.add(this.element, 'change', this.changeHandler, this);\n EventHandler.add(this.element, 'paste', this.pasteHandler, this);\n if (this.enabled) {\n this.bindClearEvent();\n }\n };\n NumericTextBox.prototype.wireSpinBtnEvents = function () {\n /* bind spin button events */\n EventHandler.add(this.spinUp, Browser.touchStartEvent, this.mouseDownOnSpinner, this);\n EventHandler.add(this.spinDown, Browser.touchStartEvent, this.mouseDownOnSpinner, this);\n EventHandler.add(this.spinUp, Browser.touchEndEvent, this.mouseUpOnSpinner, this);\n EventHandler.add(this.spinDown, Browser.touchEndEvent, this.mouseUpOnSpinner, this);\n EventHandler.add(this.spinUp, Browser.touchMoveEvent, this.touchMoveOnSpinner, this);\n EventHandler.add(this.spinDown, Browser.touchMoveEvent, this.touchMoveOnSpinner, this);\n };\n NumericTextBox.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, 'focus', this.focusIn);\n EventHandler.remove(this.element, 'blur', this.focusOut);\n EventHandler.remove(this.element, 'keyup', this.keyUpHandler);\n EventHandler.remove(this.element, 'input', this.inputHandler);\n EventHandler.remove(this.element, 'keydown', this.keyDownHandler);\n EventHandler.remove(this.element, 'keypress', this.keyPressHandler);\n EventHandler.remove(this.element, 'change', this.changeHandler);\n EventHandler.remove(this.element, 'paste', this.pasteHandler);\n };\n NumericTextBox.prototype.unwireSpinBtnEvents = function () {\n /* unbind spin button events */\n EventHandler.remove(this.spinUp, Browser.touchStartEvent, this.mouseDownOnSpinner);\n EventHandler.remove(this.spinDown, Browser.touchStartEvent, this.mouseDownOnSpinner);\n EventHandler.remove(this.spinUp, Browser.touchEndEvent, this.mouseUpOnSpinner);\n EventHandler.remove(this.spinDown, Browser.touchEndEvent, this.mouseUpOnSpinner);\n EventHandler.remove(this.spinUp, Browser.touchMoveEvent, this.touchMoveOnSpinner);\n EventHandler.remove(this.spinDown, Browser.touchMoveEvent, this.touchMoveOnSpinner);\n };\n NumericTextBox.prototype.changeHandler = function (event) {\n if (!this.element.value.length) {\n this.setProperties({ value: null }, true);\n }\n var parsedInput = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n this.updateValue(parsedInput, event);\n };\n NumericTextBox.prototype.raiseChangeEvent = function (event) {\n if (this.prevValue !== this.value) {\n var eventArgs = {};\n this.changeEventArgs = { value: this.value, previousValue: this.prevValue, isInteraction: this.isInteract, event: event };\n if (event) {\n this.changeEventArgs.event = event;\n }\n merge(eventArgs, this.changeEventArgs);\n this.prevValue = this.value;\n this.isInteract = false;\n this.trigger('change', eventArgs);\n }\n };\n NumericTextBox.prototype.pasteHandler = function () {\n var _this = this;\n var beforeUpdate = this.element.value;\n setTimeout(function () {\n if (!_this.numericRegex().test(_this.element.value)) {\n _this.setElementValue(beforeUpdate);\n }\n });\n };\n NumericTextBox.prototype.preventHandler = function () {\n var _this = this;\n var iOS = !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);\n setTimeout(function () {\n if (_this.element.selectionStart > 0) {\n var currentPos = _this.element.selectionStart;\n var prevPos = _this.element.selectionStart - 1;\n var start = 0;\n var ignoreKeyCode = void 0;\n var valArray = _this.element.value.split('');\n var numericObject = getNumericObject(_this.locale);\n var decimalSeparator = getValue('decimal', numericObject);\n ignoreKeyCode = decimalSeparator.charCodeAt(0);\n if (_this.element.value[prevPos] === ' ' && _this.element.selectionStart > 0 && !iOS) {\n if (isNullOrUndefined(_this.prevVal)) {\n _this.element.value = _this.element.value.trim();\n }\n else if (prevPos !== 0) {\n _this.element.value = _this.prevVal;\n }\n else if (prevPos === 0) {\n _this.element.value = _this.element.value.trim();\n }\n _this.element.setSelectionRange(prevPos, prevPos);\n }\n else if (isNaN(parseFloat(_this.element.value[_this.element.selectionStart - 1])) &&\n _this.element.value[_this.element.selectionStart - 1].charCodeAt(0) !== 45) {\n if ((valArray.indexOf(_this.element.value[_this.element.selectionStart - 1]) !==\n valArray.lastIndexOf(_this.element.value[_this.element.selectionStart - 1]) &&\n _this.element.value[_this.element.selectionStart - 1].charCodeAt(0) === ignoreKeyCode) ||\n _this.element.value[_this.element.selectionStart - 1].charCodeAt(0) !== ignoreKeyCode) {\n _this.element.value = _this.element.value.substring(0, prevPos) +\n _this.element.value.substring(currentPos, _this.element.value.length);\n _this.element.setSelectionRange(prevPos, prevPos);\n if (isNaN(parseFloat(_this.element.value[_this.element.selectionStart - 1])) && _this.element.selectionStart > 0\n && _this.element.value.length) {\n _this.preventHandler();\n }\n }\n }\n else if (isNaN(parseFloat(_this.element.value[_this.element.selectionStart - 2])) && _this.element.selectionStart > 1 &&\n _this.element.value[_this.element.selectionStart - 2].charCodeAt(0) !== 45) {\n if ((valArray.indexOf(_this.element.value[_this.element.selectionStart - 2]) !==\n valArray.lastIndexOf(_this.element.value[_this.element.selectionStart - 2]) &&\n _this.element.value[_this.element.selectionStart - 2].charCodeAt(0) === ignoreKeyCode) ||\n _this.element.value[_this.element.selectionStart - 2].charCodeAt(0) !== ignoreKeyCode) {\n _this.element.setSelectionRange(prevPos, prevPos);\n _this.nextEle = _this.element.value[_this.element.selectionStart];\n _this.cursorPosChanged = true;\n _this.preventHandler();\n }\n }\n if (_this.cursorPosChanged === true && _this.element.value[_this.element.selectionStart] === _this.nextEle &&\n isNaN(parseFloat(_this.element.value[_this.element.selectionStart - 1]))) {\n _this.element.setSelectionRange(_this.element.selectionStart + 1, _this.element.selectionStart + 1);\n _this.cursorPosChanged = false;\n _this.nextEle = null;\n }\n if (_this.element.value.trim() === '') {\n _this.element.setSelectionRange(start, start);\n }\n if (_this.element.selectionStart > 0) {\n if ((_this.element.value[_this.element.selectionStart - 1].charCodeAt(0) === 45) && _this.element.selectionStart > 1) {\n if (isNullOrUndefined(_this.prevVal)) {\n _this.element.value = _this.element.value;\n }\n else {\n _this.element.value = _this.prevVal;\n }\n _this.element.setSelectionRange(_this.element.selectionStart, _this.element.selectionStart);\n }\n }\n _this.prevVal = _this.element.value;\n }\n });\n };\n NumericTextBox.prototype.keyUpHandler = function (event) {\n var iOS = !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);\n if (!iOS && Browser.isDevice) {\n this.preventHandler();\n }\n };\n ;\n NumericTextBox.prototype.inputHandler = function (event) {\n var iOS = !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);\n if (iOS && Browser.isDevice) {\n this.preventHandler();\n }\n };\n ;\n NumericTextBox.prototype.keyDownHandler = function (event) {\n if (!this.readonly) {\n switch (event.keyCode) {\n case 38:\n event.preventDefault();\n this.action(INCREMENT, event);\n break;\n case 40:\n event.preventDefault();\n this.action(DECREMENT, event);\n break;\n default: break;\n }\n }\n };\n ;\n NumericTextBox.prototype.performAction = function (value, step, operation) {\n if (value === null || isNaN(value)) {\n value = 0;\n }\n var updatedValue = operation === INCREMENT ? value + step : value - step;\n updatedValue = this.correctRounding(value, step, updatedValue);\n return this.strictMode ? this.trimValue(updatedValue) : updatedValue;\n };\n ;\n NumericTextBox.prototype.correctRounding = function (value, step, result) {\n var floatExp = new RegExp('[,.](.*)');\n var valueText = value.toString();\n var stepText = step.toString();\n var floatValue = floatExp.test(value.toString());\n var floatStep = floatExp.test(step.toString());\n if (floatValue || floatStep) {\n var valueCount = floatValue ? floatExp.exec(value.toString())[0].length : 0;\n var stepCount = floatStep ? floatExp.exec(step.toString())[0].length : 0;\n var max = Math.max(valueCount, stepCount);\n return value = this.roundValue(result, max);\n }\n return result;\n };\n ;\n NumericTextBox.prototype.roundValue = function (result, precision) {\n precision = precision || 0;\n var divide = Math.pow(10, precision);\n return result *= divide, result = Math.round(result) / divide;\n };\n ;\n NumericTextBox.prototype.updateValue = function (value, event) {\n if (event) {\n this.isInteract = true;\n }\n if (value !== null && !isNaN(value)) {\n if (this.decimals) {\n value = this.roundNumber(value, this.decimals);\n }\n }\n this.changeValue(value === null || isNaN(value) ? null : this.strictMode ? this.trimValue(value) : value);\n this.raiseChangeEvent(event);\n };\n NumericTextBox.prototype.updateCurrency = function (prop, propVal) {\n setValue(prop, propVal, this.cultureInfo);\n this.updateValue(this.value);\n };\n NumericTextBox.prototype.changeValue = function (value) {\n if (!(value || value === 0)) {\n value = null;\n this.setProperties({ value: value }, true);\n }\n else {\n var numberOfDecimals = void 0;\n var decimalPart = value.toString().split('.')[1];\n numberOfDecimals = !decimalPart || !decimalPart.length ? 0 : decimalPart.length;\n if (this.decimals !== null) {\n numberOfDecimals = numberOfDecimals < this.decimals ? numberOfDecimals : this.decimals;\n }\n this.setProperties({ value: this.roundNumber(value, numberOfDecimals) }, true);\n }\n this.modifyText();\n if (!this.strictMode) {\n this.validateState();\n }\n };\n ;\n NumericTextBox.prototype.modifyText = function () {\n if (this.value || this.value === 0) {\n var value = this.formatNumber();\n var elementValue = this.isFocused ? value : this.instance.getNumberFormat(this.cultureInfo)(this.value);\n this.setElementValue(elementValue);\n attributes(this.element, { 'aria-valuenow': value });\n this.hiddenInput.value = value;\n }\n else {\n this.setElementValue('');\n this.element.removeAttribute('aria-valuenow');\n this.hiddenInput.value = null;\n }\n };\n ;\n NumericTextBox.prototype.setElementValue = function (val, element) {\n Input.setValue(val, (element ? element : this.element), this.floatLabelType, this.showClearButton);\n };\n NumericTextBox.prototype.validateState = function () {\n this.isValidState = true;\n if (this.value || this.value === 0) {\n this.isValidState = !(this.value > this.max || this.value < this.min);\n }\n this.checkErrorClass();\n };\n NumericTextBox.prototype.formatNumber = function () {\n var numberOfDecimals;\n var currentValue = this.value;\n var decimalPart = currentValue.toString().split('.')[1];\n numberOfDecimals = !decimalPart || !decimalPart.length ? 0 : decimalPart.length;\n if (this.decimals !== null) {\n numberOfDecimals = numberOfDecimals < this.decimals ? numberOfDecimals : this.decimals;\n }\n return this.instance.getNumberFormat({\n maximumFractionDigits: numberOfDecimals,\n minimumFractionDigits: numberOfDecimals, useGrouping: false\n })(this.value);\n };\n ;\n NumericTextBox.prototype.trimValue = function (value) {\n if (value > this.max) {\n return this.max;\n }\n if (value < this.min) {\n return this.min;\n }\n return value;\n };\n ;\n NumericTextBox.prototype.roundNumber = function (value, precision) {\n var result = value;\n var decimals = precision || 0;\n var result1 = result.toString().split('e');\n result = Math.round(Number(result1[0] + 'e' + (result1[1] ? (Number(result1[1]) + decimals) : decimals)));\n var result2 = result.toString().split('e');\n result = Number(result2[0] + 'e' + (result2[1] ? (Number(result2[1]) - decimals) : -decimals));\n return Number(result.toFixed(decimals));\n };\n ;\n NumericTextBox.prototype.cancelEvent = function (event) {\n event.preventDefault();\n return false;\n };\n NumericTextBox.prototype.keyPressHandler = function (event) {\n if (event.which === 0 || event.metaKey || event.ctrlKey || event.keyCode === 8 || event.keyCode === 13) {\n return true;\n }\n var currentChar = String.fromCharCode(event.which);\n var text = this.element.value;\n text = text.substring(0, this.element.selectionStart) + currentChar + text.substring(this.element.selectionEnd);\n if (!this.numericRegex().test(text)) {\n event.preventDefault();\n event.stopPropagation();\n return false;\n }\n else {\n return true;\n }\n };\n ;\n NumericTextBox.prototype.numericRegex = function () {\n var numericObject = getNumericObject(this.locale);\n var decimalSeparator = getValue('decimal', numericObject);\n var fractionRule = '*';\n if (decimalSeparator === DECIMALSEPARATOR) {\n decimalSeparator = '\\\\' + decimalSeparator;\n }\n if (this.decimals === 0) {\n return INTREGEXP;\n }\n if (this.decimals && this.validateDecimalOnType) {\n fractionRule = '{0,' + this.decimals + '}';\n }\n return new RegExp('^(-)?(((\\\\d+(' + decimalSeparator + '\\\\d' + fractionRule +\n ')?)|(' + decimalSeparator + '\\\\d' + fractionRule + ')))?$');\n };\n ;\n NumericTextBox.prototype.mouseWheel = function (event) {\n event.preventDefault();\n var delta;\n var rawEvent = event;\n if (rawEvent.wheelDelta) {\n delta = rawEvent.wheelDelta / 120;\n }\n else if (rawEvent.detail) {\n delta = -rawEvent.detail / 3;\n }\n if (delta > 0) {\n this.action(INCREMENT, event);\n }\n else if (delta < 0) {\n this.action(DECREMENT, event);\n }\n this.cancelEvent(event);\n };\n NumericTextBox.prototype.focusIn = function (event) {\n var _this = this;\n if (!this.enabled || this.readonly) {\n return;\n }\n this.isFocused = true;\n removeClass([this.container], ERROR);\n this.prevValue = this.value;\n if ((this.value || this.value === 0)) {\n var formatValue_1 = this.formatNumber();\n this.setElementValue(formatValue_1);\n if (!this.isPrevFocused) {\n var delay = (Browser.isDevice && Browser.isIos) ? 600 : 0;\n setTimeout(function () {\n _this.element.setSelectionRange(0, formatValue_1.length);\n }, delay);\n }\n }\n if (!Browser.isDevice) {\n EventHandler.add(this.element, 'mousewheel DOMMouseScroll', this.mouseWheel, this);\n }\n };\n ;\n NumericTextBox.prototype.focusOut = function (event) {\n var _this = this;\n if (this.isPrevFocused) {\n event.preventDefault();\n if (Browser.isDevice) {\n var value_1 = this.element.value;\n this.element.focus();\n this.isPrevFocused = false;\n var ele_1 = this.element;\n setTimeout(function () {\n _this.setElementValue(value_1, ele_1);\n }, 200);\n }\n }\n else {\n this.isFocused = false;\n if (!this.element.value.length) {\n this.setProperties({ value: null }, true);\n }\n var parsedInput = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n this.updateValue(parsedInput);\n if (!Browser.isDevice) {\n EventHandler.remove(this.element, 'mousewheel DOMMouseScroll', this.mouseWheel);\n }\n }\n };\n ;\n NumericTextBox.prototype.mouseDownOnSpinner = function (event) {\n var _this = this;\n if (this.isFocused) {\n this.isPrevFocused = true;\n event.preventDefault();\n }\n if (!this.getElementData(event)) {\n return;\n }\n var result = this.getElementData(event);\n var target = event.currentTarget;\n var action = (target.classList.contains(SPINUP)) ? INCREMENT : DECREMENT;\n EventHandler.add(target, 'mouseleave', this.mouseUpClick, this);\n this.timeOut = setInterval(function () { _this.isCalled = true; _this.action(action, event); }, 150);\n EventHandler.add(document, 'mouseup', this.mouseUpClick, this);\n };\n NumericTextBox.prototype.touchMoveOnSpinner = function (event) {\n var target = document.elementFromPoint(event.clientX, event.clientY);\n if (!(target.classList.contains(SPINICON))) {\n clearInterval(this.timeOut);\n }\n };\n NumericTextBox.prototype.mouseUpOnSpinner = function (event) {\n if (this.isPrevFocused) {\n this.element.focus();\n if (!Browser.isDevice) {\n this.isPrevFocused = false;\n }\n }\n if (!Browser.isDevice) {\n event.preventDefault();\n }\n if (!this.getElementData(event)) {\n return;\n }\n var target = event.currentTarget;\n var action = (target.classList.contains(SPINUP)) ? INCREMENT : DECREMENT;\n EventHandler.remove(target, 'mouseleave', this.mouseUpClick);\n if (!this.isCalled) {\n this.action(action, event);\n }\n this.isCalled = false;\n EventHandler.remove(document, 'mouseup', this.mouseUpClick);\n };\n NumericTextBox.prototype.getElementData = function (event) {\n if ((event.which && event.which === 3) || (event.button && event.button === 2)\n || !this.enabled || this.readonly) {\n return false;\n }\n clearInterval(this.timeOut);\n return true;\n };\n NumericTextBox.prototype.floatLabelTypeUpdate = function () {\n Input.removeFloating(this.inputWrapper);\n var hiddenInput = this.hiddenInput;\n this.hiddenInput.remove();\n Input.addFloating(this.element, this.floatLabelType, this.placeholder);\n this.container.insertBefore(hiddenInput, this.container.childNodes[1]);\n };\n NumericTextBox.prototype.mouseUpClick = function (event) {\n event.stopPropagation();\n clearInterval(this.timeOut);\n this.isCalled = false;\n EventHandler.remove(this.spinUp, 'mouseleave', this.mouseUpClick);\n EventHandler.remove(this.spinDown, 'mouseleave', this.mouseUpClick);\n };\n /**\n * Increments the NumericTextBox value with the specified step value.\n * @param {number} step - Specifies the value used to increment the NumericTextBox value.\n * if its not given then numeric value will be incremented based on the step property value.\n */\n NumericTextBox.prototype.increment = function (step) {\n if (step === void 0) { step = this.step; }\n this.isInteract = false;\n this.changeValue(this.performAction(this.value, step, INCREMENT));\n this.raiseChangeEvent();\n };\n /**\n * Decrements the NumericTextBox value with specified step value.\n * @param {number} step - Specifies the value used to decrement the NumericTextBox value.\n * if its not given then numeric value will be decremented based on the step property value.\n */\n NumericTextBox.prototype.decrement = function (step) {\n if (step === void 0) { step = this.step; }\n this.isInteract = false;\n this.changeValue(this.performAction(this.value, step, DECREMENT));\n this.raiseChangeEvent();\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it maintains the initial input element from the DOM.\n * @method destroy\n * @return {void}\n */\n NumericTextBox.prototype.destroy = function () {\n this.unwireEvents();\n detach(this.hiddenInput);\n if (this.showSpinButton) {\n this.unwireSpinBtnEvents();\n detach(this.spinUp);\n detach(this.spinDown);\n }\n this.container.parentElement.appendChild(this.cloneElement);\n detach(this.container);\n _super.prototype.destroy.call(this);\n };\n /**\n * Returns the value of NumericTextBox with the format applied to the NumericTextBox.\n */\n NumericTextBox.prototype.getText = function () {\n return this.element.value;\n };\n /**\n * Gets the properties to be maintained in the persisted state.\n * @return {string}\n */\n NumericTextBox.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Calls internally if any of the property value is changed.\n * @private\n */\n NumericTextBox.prototype.onPropertyChanged = function (newProp, oldProp) {\n var elementVal;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'width':\n setStyleAttribute(this.container, { 'width': formatUnit(newProp.width) });\n break;\n case 'cssClass':\n Input.setCssClass(newProp.cssClass, [this.container], oldProp.cssClass);\n break;\n case 'enabled':\n Input.setEnabled(newProp.enabled, this.element);\n break;\n case 'enableRtl':\n Input.setEnableRtl(newProp.enableRtl, [this.container]);\n break;\n case 'readonly':\n Input.setReadonly(newProp.readonly, this.element);\n if (this.readonly) {\n attributes(this.element, { 'aria-readonly': 'true' });\n }\n else {\n this.element.removeAttribute('aria-readonly');\n }\n break;\n case 'placeholder':\n Input.setPlaceholder(newProp.placeholder, this.element);\n break;\n case 'step':\n this.step = newProp.step;\n this.validateStep();\n break;\n case 'showSpinButton':\n if (newProp.showSpinButton) {\n this.spinBtnCreation();\n }\n else {\n detach(this.spinUp);\n detach(this.spinDown);\n }\n break;\n case 'showClearButton':\n Input.setClearButton(newProp.showClearButton, this.element, this.inputWrapper);\n this.bindClearEvent();\n break;\n case 'floatLabelType':\n this.floatLabelType = newProp.floatLabelType;\n this.floatLabelTypeUpdate();\n break;\n case 'value':\n this.updateValue(newProp.value);\n break;\n case 'min':\n case 'max':\n setValue(prop, getValue(prop, newProp), this);\n this.validateMinMax();\n this.updateValue(this.value);\n break;\n case 'strictMode':\n this.strictMode = newProp.strictMode;\n this.updateValue(this.value);\n this.validateState();\n break;\n case 'locale':\n this.initCultureFunc();\n this.l10n.setLocale(this.locale);\n if (!isNullOrUndefined(this.spinDown)) {\n attributes(this.spinDown, {\n 'title': this.l10n.getConstant('decrementTitle'),\n 'aria-label': this.l10n.getConstant('decrementTitle')\n });\n }\n if (!isNullOrUndefined(this.spinUp)) {\n attributes(this.spinUp, {\n 'title': this.l10n.getConstant('incrementTitle'),\n 'aria-label': this.l10n.getConstant('incrementTitle')\n });\n }\n this.updatePlaceholder();\n Input.setPlaceholder(this.placeholder, this.element);\n this.updateValue(this.value);\n break;\n case 'currency':\n var propVal = getValue(prop, newProp);\n this.setProperties({ currencyCode: propVal }, true);\n this.updateCurrency(prop, propVal);\n break;\n case 'currencyCode':\n var propValue = getValue(prop, newProp);\n this.setProperties({ currency: propValue }, true);\n this.updateCurrency('currency', propValue);\n break;\n case 'format':\n setValue(prop, getValue(prop, newProp), this);\n this.initCultureInfo();\n this.updateValue(this.value);\n break;\n case 'decimals':\n this.decimals = newProp.decimals;\n this.updateValue(this.value);\n }\n }\n };\n /**\n * Gets the component name\n * @private\n */\n NumericTextBox.prototype.getModuleName = function () {\n return 'numerictextbox';\n };\n __decorate([\n Property('')\n ], NumericTextBox.prototype, \"cssClass\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"value\", void 0);\n __decorate([\n Property(-(Number.MAX_VALUE))\n ], NumericTextBox.prototype, \"min\", void 0);\n __decorate([\n Property(Number.MAX_VALUE)\n ], NumericTextBox.prototype, \"max\", void 0);\n __decorate([\n Property(1)\n ], NumericTextBox.prototype, \"step\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"placeholder\", void 0);\n __decorate([\n Property(true)\n ], NumericTextBox.prototype, \"showSpinButton\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"readonly\", void 0);\n __decorate([\n Property(true)\n ], NumericTextBox.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"enableRtl\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property('n2')\n ], NumericTextBox.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"decimals\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"currency\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"currencyCode\", void 0);\n __decorate([\n Property(true)\n ], NumericTextBox.prototype, \"strictMode\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"validateDecimalOnType\", void 0);\n __decorate([\n Property('Never')\n ], NumericTextBox.prototype, \"floatLabelType\", void 0);\n __decorate([\n Event()\n ], NumericTextBox.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], NumericTextBox.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], NumericTextBox.prototype, \"change\", void 0);\n NumericTextBox = __decorate([\n NotifyPropertyChanges\n ], NumericTextBox);\n return NumericTextBox;\n}(Component));\nexport { NumericTextBox };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { selectAll, select, createElement, Base } from '@syncfusion/ej2-base';\nimport { extend, isNullOrUndefined, EventHandler } from '@syncfusion/ej2-base';\nimport { Property, NotifyPropertyChanges, Event } from '@syncfusion/ej2-base';\n/**\n * global declarations\n */\nvar VALIDATE_EMAIL = new RegExp('^[A-Za-z0-9._%+-]{3,}@[a-zA-Z]{3,}([.]{1}[a-zA-Z]{2,5}' +\n '|[.]{1}[a-zA-Z]{2,4}[.]{1}[a-zA-Z]{2,4})$');\nvar VALIDATE_URL = new RegExp('^((ftp|http|https):\\/\\/)?www\\.([A-z]{2,})\\.([A-z]{2,})$');\nvar VALIDATE_DATE_ISO = new RegExp('^([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$');\nvar VALIDATE_DIGITS = new RegExp('^[0-9]*$');\nvar VALIDATE_PHONE = new RegExp('^[+]?[0-9]{9,13}$');\nvar VALIDATE_CREDITCARD = new RegExp('^\\\\d{13,16}$');\n/**\n * ErrorOption values\n * @private\n */\nexport var ErrorOption;\n(function (ErrorOption) {\n ErrorOption[ErrorOption[\"Message\"] = 0] = \"Message\";\n ErrorOption[ErrorOption[\"Label\"] = 1] = \"Label\";\n})(ErrorOption || (ErrorOption = {}));\n/**\n * FormValidator class enables you to validate the form fields based on your defined rules\n * ```html\n *
\n * \n * \n *
\n * \n * ```\n */\nvar FormValidator = /** @class */ (function (_super) {\n __extends(FormValidator, _super);\n // Initializes the FormValidator \n function FormValidator(element, options) {\n var _this = _super.call(this, options, element) || this;\n _this.validated = [];\n _this.errorRules = [];\n _this.allowSubmit = false;\n _this.required = 'required';\n _this.infoElement = null;\n _this.inputElement = null;\n _this.selectQuery = 'input:not([type=reset]):not([type=button]), select, textarea';\n /**\n * Specifies the default messages for validation rules.\n * @default : { List of validation message };\n */\n _this.defaultMessages = {\n required: 'This field is required.',\n email: 'Please enter a valid email address.',\n url: 'Please enter a valid URL.',\n date: 'Please enter a valid date.',\n dateIso: 'Please enter a valid date ( ISO ).',\n creditcard: 'Please enter valid card number',\n number: 'Please enter a valid number.',\n digits: 'Please enter only digits.',\n maxLength: 'Please enter no more than {0} characters.',\n minLength: 'Please enter at least {0} characters.',\n rangeLength: 'Please enter a value between {0} and {1} characters long.',\n range: 'Please enter a value between {0} and {1}.',\n max: 'Please enter a value less than or equal to {0}.',\n min: 'Please enter a value greater than or equal to {0}.',\n regex: 'Please enter a correct value.',\n tel: 'Please enter a valid phone number.',\n pattern: 'Please enter a correct pattern value.',\n equalTo: 'Please enter the valid match text',\n };\n if (typeof _this.rules === 'undefined') {\n _this.rules = {};\n }\n element = typeof element === 'string' ? select(element, document) : element;\n // Set novalidate to prevent default HTML5 form validation\n if (_this.element != null) {\n _this.element.setAttribute('novalidate', '');\n _this.inputElements = selectAll(_this.selectQuery, _this.element);\n _this.createHTML5Rules();\n _this.wireEvents();\n }\n else {\n return undefined;\n }\n return _this;\n }\n FormValidator_1 = FormValidator;\n /**\n * Add validation rules to the corresponding input element based on `name` attribute.\n * @param {string} name `name` of form field.\n * @param {Object} rules Validation rules for the corresponding element.\n * @return {void}\n */\n FormValidator.prototype.addRules = function (name, rules) {\n if (name) {\n if (this.rules.hasOwnProperty(name)) {\n extend(this.rules[name], rules, {});\n }\n else {\n this.rules[name] = rules;\n }\n }\n };\n /**\n * Remove validation to the corresponding field based on name attribute.\n * When no parameter is passed, remove all the validations in the form.\n * @param {string} name Input name attribute value.\n * @param {string[]} rules List of validation rules need to be remove from the corresponding element.\n * @return {void}\n */\n FormValidator.prototype.removeRules = function (name, rules) {\n if (!name && !rules) {\n this.rules = {};\n }\n else if (this.rules[name] && !rules) {\n delete this.rules[name];\n }\n else if (!isNullOrUndefined(this.rules[name] && rules)) {\n for (var i = 0; i < rules.length; i++) {\n delete this.rules[name][rules[i]];\n }\n }\n else {\n return;\n }\n };\n /**\n * Validate the current form values using defined rules.\n * Returns `true` when the form is valid otherwise `false`\n * @param {string} selected - Optional parameter to validate specified element.\n * @return {boolean}\n */\n FormValidator.prototype.validate = function (selected) {\n var rules = Object.keys(this.rules);\n if (selected && rules.length) {\n this.validateRules(selected);\n //filter the selected element it don't have any valid input element\n return rules.indexOf(selected) !== -1 && this.errorRules.filter(function (data) {\n return data.name === selected;\n }).length === 0;\n }\n else {\n for (var _i = 0, rules_1 = rules; _i < rules_1.length; _i++) {\n var name_1 = rules_1[_i];\n this.validateRules(name_1);\n }\n return this.errorRules.length === 0;\n }\n };\n /**\n * Reset the value of all the fields in form.\n * @return {void}\n */\n FormValidator.prototype.reset = function () {\n this.element.reset();\n this.clearForm();\n };\n /**\n * Get input element by name.\n * @param {string} name - Input element name attribute value.\n * @return {HTMLInputElement}\n */\n FormValidator.prototype.getInputElement = function (name) {\n this.inputElement = (select('[name=' + name + ']', this.element));\n return this.inputElement;\n };\n /**\n * Destroy the form validator object and error elements.\n * @return {void}\n */\n FormValidator.prototype.destroy = function () {\n this.reset();\n this.unwireEvents();\n this.rules = {};\n var elements = selectAll('.' + this.errorClass + ', .' + this.validClass, this.element);\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var element = elements_1[_i];\n element.remove();\n }\n _super.prototype.destroy.call(this);\n };\n /**\n * @private\n */\n FormValidator.prototype.onPropertyChanged = function (newProp, oldProp) {\n // No code are needed\n };\n ;\n /**\n * @private\n */\n FormValidator.prototype.getModuleName = function () {\n return 'formValidator';\n };\n FormValidator.prototype.clearForm = function () {\n this.errorRules = [];\n this.validated = [];\n var elements = selectAll(this.selectQuery, this.element);\n for (var _i = 0, elements_2 = elements; _i < elements_2.length; _i++) {\n var element = elements_2[_i];\n var input = element;\n input.removeAttribute('aria-invalid');\n input.classList.remove(this.errorClass);\n if (input.name.length > 0) {\n this.getInputElement(input.name);\n this.getErrorElement(input.name);\n this.hideMessage(input.name);\n }\n input.classList.remove(this.validClass);\n }\n };\n FormValidator.prototype.createHTML5Rules = function () {\n var defRules = ['required', 'validateHidden', 'regex', 'rangeLength', 'maxLength', 'minLength', 'dateIso', 'digits',\n 'pattern', 'data-val-required', 'type', 'data-validation', 'min', 'max', 'range', 'equalTo', 'data-val-minlength-min',\n 'data-val-equalto-other', 'data-val-maxlength-max', 'data-val-range-min', 'data-val-regex-pattern', 'data-val-length-max',\n 'data-val-creditcard', 'data-val-phone'];\n var acceptedTypes = ['hidden', 'email', 'url', 'date', 'number', 'tel'];\n for (var _i = 0, _a = (this.inputElements); _i < _a.length; _i++) {\n var input = _a[_i];\n // Default attribute rules \n var allRule = {};\n for (var _b = 0, defRules_1 = defRules; _b < defRules_1.length; _b++) {\n var rule = defRules_1[_b];\n if (input.getAttribute(rule) !== null) {\n switch (rule) {\n case 'required':\n this.defRule(input, allRule, rule, input.required);\n break;\n case 'data-validation':\n rule = input.getAttribute(rule);\n this.defRule(input, allRule, rule, true);\n break;\n case 'type':\n if (acceptedTypes.indexOf(input.type) !== -1) {\n this.defRule(input, allRule, input.type, true);\n }\n break;\n case 'rangeLength':\n case 'range':\n this.defRule(input, allRule, rule, JSON.parse(input.getAttribute(rule)));\n break;\n case 'equalTo':\n var id = input.getAttribute(rule);\n this.defRule(input, allRule, rule, id);\n break;\n default:\n if (input.getAttribute('data-val') === 'true') {\n this.annotationRule(input, allRule, rule, input.getAttribute(rule));\n }\n else {\n this.defRule(input, allRule, rule, input.getAttribute(rule));\n }\n }\n }\n }\n //adding pattern type validation\n if (Object.keys(allRule).length !== 0) {\n this.addRules(input.name, allRule);\n }\n }\n };\n FormValidator.prototype.annotationRule = function (input, ruleCon, ruleName, value) {\n var annotationRule = ruleName.split('-');\n var rulesList = ['required', 'creditcard', 'phone', 'maxlength', 'minlength', 'range', 'regex', 'equalto'];\n var ruleFirstName = annotationRule[annotationRule.length - 1];\n var ruleSecondName = annotationRule[annotationRule.length - 2];\n if (rulesList.indexOf(ruleFirstName) !== -1) {\n switch (ruleFirstName) {\n case 'required':\n this.defRule(input, ruleCon, 'required', value);\n break;\n case 'creditcard':\n this.defRule(input, ruleCon, 'creditcard', value);\n break;\n case 'phone':\n this.defRule(input, ruleCon, 'tel', value);\n break;\n }\n }\n else if (rulesList.indexOf(ruleSecondName) !== -1) {\n switch (ruleSecondName) {\n case 'maxlength':\n this.defRule(input, ruleCon, 'maxLength', value);\n break;\n case 'minlength':\n this.defRule(input, ruleCon, 'minLength', value);\n break;\n case 'range':\n var minvalue = input.getAttribute('data-val-range-min');\n var maxvalue = input.getAttribute('data-val-range-max');\n this.defRule(input, ruleCon, 'range', [minvalue, maxvalue]);\n break;\n case 'equalto':\n var id = input.getAttribute(ruleName).split('.');\n this.defRule(input, ruleCon, 'equalTo', id[id.length - 1]);\n break;\n case 'regex':\n this.defRule(input, ruleCon, 'regex', value);\n break;\n }\n }\n };\n FormValidator.prototype.defRule = function (input, ruleCon, ruleName, value) {\n var message = input.getAttribute('data-' + ruleName + '-message');\n var annotationMessage = input.getAttribute('data-val-' + ruleName);\n if (message) {\n value = [value, message];\n }\n else if (annotationMessage) {\n value = [value, annotationMessage];\n }\n ruleCon[ruleName] = value;\n };\n // Wire events to the form elements\n FormValidator.prototype.wireEvents = function () {\n for (var _i = 0, _a = (this.inputElements); _i < _a.length; _i++) {\n var input = _a[_i];\n if (FormValidator_1.isCheckable(input)) {\n EventHandler.add(input, 'click', this.clickHandler, this);\n }\n else if (input.tagName === 'SELECT') {\n EventHandler.add(input, 'change', this.changeHandler, this);\n }\n else {\n EventHandler.add(input, 'focusout', this.focusOutHandler, this);\n EventHandler.add(input, 'keyup', this.keyUpHandler, this);\n }\n }\n EventHandler.add(this.element, 'submit', this.submitHandler, this);\n EventHandler.add(this.element, 'reset', this.resetHandler, this);\n };\n // UnWire events to the form elements\n FormValidator.prototype.unwireEvents = function () {\n for (var _i = 0, _a = (this.inputElements); _i < _a.length; _i++) {\n var input = _a[_i];\n EventHandler.clearEvents(input);\n }\n EventHandler.remove(this.element, 'submit', this.submitHandler);\n EventHandler.remove(this.element, 'reset', this.resetHandler);\n };\n // Handle input element focusout event\n FormValidator.prototype.focusOutHandler = function (e) {\n this.trigger('focusout', e);\n //FormValidator.triggerCallback(this.focusout, e);\n var element = e.target;\n if (this.rules[element.name]) {\n if (this.rules[element.name][this.required] || element.value.length > 0) {\n this.validate(element.name);\n }\n else if (this.validated.indexOf(element.name) === -1) {\n this.validated.push(element.name);\n }\n }\n };\n // Handle input element keyup event\n FormValidator.prototype.keyUpHandler = function (e) {\n this.trigger('keyup', e);\n var element = e.target;\n // List of keys need to prevent while validation\n var excludeKeys = [16, 17, 18, 20, 35, 36, 37, 38, 39, 40, 45, 144, 225];\n if (e.which === 9 && (!this.rules[element.name] || (this.rules[element.name] && !this.rules[element.name][this.required]))) {\n return;\n }\n if (this.validated.indexOf(element.name) !== -1 && this.rules[element.name] && excludeKeys.indexOf(e.which) === -1) {\n this.validate(element.name);\n }\n };\n // Handle input click event\n FormValidator.prototype.clickHandler = function (e) {\n this.trigger('click', e);\n var element = e.target;\n // If element type is not submit allow validation\n if (element.type !== 'submit') {\n this.validate(element.name);\n }\n else if (element.getAttribute('formnovalidate') !== null) {\n // Prevent form validation, if submit button has formnovalidate attribute\n this.allowSubmit = true;\n }\n };\n // Handle input change event\n FormValidator.prototype.changeHandler = function (e) {\n this.trigger('change', e);\n var element = e.target;\n this.validate(element.name);\n };\n // Handle form submit event\n FormValidator.prototype.submitHandler = function (e) {\n this.trigger('submit', e);\n //FormValidator.triggerCallback(this.submit, e);\n // Prevent form submit if validation failed\n if (!this.allowSubmit && !this.validate()) {\n e.preventDefault();\n }\n else {\n this.allowSubmit = false;\n }\n };\n // Handle form reset\n FormValidator.prototype.resetHandler = function () {\n this.clearForm();\n };\n // Validate each rule based on input element name\n FormValidator.prototype.validateRules = function (name) {\n if (!this.rules[name]) {\n return;\n }\n var rules = Object.keys(this.rules[name]);\n var hiddenType = false;\n var validateHiddenType = false;\n var vhPos = rules.indexOf('validateHidden');\n var hPos = rules.indexOf('hidden');\n this.getInputElement(name);\n if (hPos !== -1) {\n hiddenType = true;\n }\n if (vhPos !== -1) {\n validateHiddenType = true;\n }\n if (!hiddenType || (hiddenType && validateHiddenType)) {\n if (vhPos !== -1) {\n rules.splice(vhPos, 1);\n }\n if (hPos !== -1) {\n rules.splice((hPos - 1), 1);\n }\n this.getErrorElement(name);\n for (var _i = 0, rules_2 = rules; _i < rules_2.length; _i++) {\n var rule = rules_2[_i];\n var errorMessage = this.getErrorMessage(this.rules[name][rule], rule);\n var errorRule = { name: name, message: errorMessage };\n var eventArgs = {\n inputName: name,\n element: this.inputElement,\n message: errorMessage\n };\n if (!this.isValid(name, rule) && !this.inputElement.classList.contains(this.ignore)) {\n this.removeErrorRules(name);\n this.errorRules.push(errorRule);\n // Set aria attributes to invalid elements\n this.inputElement.setAttribute('aria-invalid', 'true');\n this.inputElement.setAttribute('aria-describedby', this.inputElement.id + '-info');\n this.inputElement.classList.add(this.errorClass);\n this.inputElement.classList.remove(this.validClass);\n if (!this.infoElement) {\n this.createErrorElement(name, errorRule.message, this.inputElement);\n }\n else {\n this.showMessage(errorRule);\n }\n eventArgs.errorElement = this.infoElement;\n eventArgs.status = 'failure';\n this.trigger('validationComplete', eventArgs);\n // Set aria-required to required rule elements\n if (rule === 'required') {\n this.inputElement.setAttribute('aria-required', 'true');\n }\n break;\n }\n else {\n this.hideMessage(name);\n eventArgs.status = 'success';\n this.trigger('validationComplete', eventArgs);\n }\n }\n }\n else {\n return;\n }\n };\n // Check the input element whether it's value satisfy the validation rule or not\n FormValidator.prototype.isValid = function (name, rule) {\n var params = this.rules[name][rule];\n var param = (params instanceof Array && typeof params[1] === 'string') ? params[0] : params;\n var currentRule = this.rules[name][rule];\n var args = { value: this.inputElement.value, param: param, element: this.inputElement, formElement: this.element };\n this.trigger('validationBegin', args);\n if (currentRule && typeof currentRule[0] === 'function') {\n var fn = currentRule[0];\n return fn.call(this, { element: this.inputElement, value: this.inputElement.value });\n }\n else if (FormValidator_1.isCheckable(this.inputElement)) {\n if (rule !== 'required') {\n return true;\n }\n return selectAll('input[name=' + name + ']:checked', this.element).length > 0;\n }\n else {\n return FormValidator_1.checkValidator[rule](args);\n }\n };\n // Return default error message or custom error message \n FormValidator.prototype.getErrorMessage = function (ruleValue, rule) {\n var message = (ruleValue instanceof Array && typeof ruleValue[1] === 'string') ? ruleValue[1] : this.defaultMessages[rule];\n var formats = message.match(/{(\\d)}/g);\n if (!isNullOrUndefined(formats)) {\n for (var i = 0; i < formats.length; i++) {\n var value = ruleValue instanceof Array ? ruleValue[i] : ruleValue;\n message = message.replace(formats[i], value);\n }\n }\n return message;\n };\n // Create error element based on name and error message\n FormValidator.prototype.createErrorElement = function (name, message, input) {\n var errorElement = createElement(this.errorElement, {\n className: this.errorClass,\n innerHTML: message,\n attrs: { for: name }\n });\n // Create message design if errorOption is message\n if (this.errorOption === ErrorOption.Message) {\n errorElement.classList.remove(this.errorClass);\n errorElement.classList.add('e-message');\n errorElement = createElement(this.errorContainer, { className: this.errorClass, innerHTML: errorElement.outerHTML });\n }\n errorElement.id = this.inputElement.name + '-info';\n // Append error message into MVC error message element\n if (this.element.querySelector('[data-valmsg-for=\"' + input.id + '\"]')) {\n this.element.querySelector('[data-valmsg-for=\"' + input.id + '\"]').appendChild(errorElement);\n }\n else if (input.hasAttribute('data-msg-containerid') === true) {\n // Append error message into custom div element\n var containerId = input.getAttribute('data-msg-containerid');\n var divElement = this.element.querySelector('#' + containerId);\n divElement.appendChild(errorElement);\n }\n else if (this.customPlacement != null) {\n // Call custom placement function if customPlacement is not null\n this.customPlacement.call(this, this.inputElement, errorElement);\n }\n else {\n this.inputElement.parentNode.insertBefore(errorElement, this.inputElement.nextSibling);\n }\n errorElement.style.display = 'block';\n this.getErrorElement(name);\n this.validated.push(name);\n this.checkRequired(name);\n };\n // Get error element by name\n FormValidator.prototype.getErrorElement = function (name) {\n this.infoElement = select(this.errorElement + '.' + this.errorClass, this.inputElement.parentElement);\n if (!this.infoElement) {\n this.infoElement = select(this.errorElement + '.' + this.errorClass + '[for=\"' + name + '\"]');\n }\n return this.infoElement;\n };\n // Remove existing rule from errorRules object\n FormValidator.prototype.removeErrorRules = function (name) {\n for (var i = 0; i < this.errorRules.length; i++) {\n var rule = this.errorRules[i];\n if (rule.name === name) {\n this.errorRules.splice(i, 1);\n }\n }\n };\n // Show error message to the input element\n FormValidator.prototype.showMessage = function (errorRule) {\n this.infoElement.style.display = 'block';\n this.infoElement.innerHTML = errorRule.message;\n this.checkRequired(errorRule.name);\n };\n // Hide error message based on input name\n FormValidator.prototype.hideMessage = function (name) {\n if (this.infoElement) {\n this.infoElement.style.display = 'none';\n this.removeErrorRules(name);\n this.inputElement.classList.add(this.validClass);\n this.inputElement.classList.remove(this.errorClass);\n this.inputElement.setAttribute('aria-invalid', 'false');\n }\n };\n // Check whether the input element have required rule and its value is not empty\n FormValidator.prototype.checkRequired = function (name) {\n if (!this.rules[name][this.required] && !this.inputElement.value.length) {\n this.infoElement.innerHTML = this.inputElement.value;\n this.infoElement.setAttribute('aria-invalid', 'false');\n this.hideMessage(name);\n }\n };\n // Return boolean result if the input have chekcable or submit types\n FormValidator.isCheckable = function (input) {\n var inputType = input.getAttribute('type');\n return inputType && (inputType === 'checkbox' || inputType === 'radio' || inputType === 'submit');\n };\n // List of function to validate the rules\n FormValidator.checkValidator = {\n required: function (option) {\n return option.value.length > 0;\n },\n email: function (option) {\n return VALIDATE_EMAIL.test(option.value);\n },\n url: function (option) {\n return VALIDATE_URL.test(option.value);\n },\n dateIso: function (option) {\n return VALIDATE_DATE_ISO.test(option.value);\n },\n tel: function (option) {\n return VALIDATE_PHONE.test(option.value);\n },\n creditcard: function (option) {\n return VALIDATE_CREDITCARD.test(option.value);\n },\n number: function (option) {\n return !isNaN(Number(option.value)) && option.value.indexOf(' ') === -1;\n },\n digits: function (option) {\n return VALIDATE_DIGITS.test(option.value);\n },\n maxLength: function (option) {\n return option.value.length <= option.param;\n },\n minLength: function (option) {\n return option.value.length >= option.param;\n },\n rangeLength: function (option) {\n var param = option.param;\n return option.value.length >= param[0] && option.value.length <= param[1];\n },\n range: function (option) {\n var param = option.param;\n return !isNaN(Number(option.value)) && Number(option.value) >= param[0] && Number(option.value) <= param[1];\n },\n date: function (option) {\n return !isNaN(new Date(option.value).getTime());\n },\n max: function (option) {\n if (!isNaN(Number(option.value))) {\n // Maximum rule validation for number\n return +option.value <= option.param;\n }\n // Maximum rule validation for date\n return new Date(option.value).getTime() <= new Date(JSON.parse(JSON.stringify(option.param))).getTime();\n },\n min: function (option) {\n if (!isNaN(Number(option.value))) {\n // Minimum rule validation for number\n return +option.value >= option.param;\n }\n // Minimum rule validation for date\n return new Date(option.value).getTime() >= new Date(JSON.parse(JSON.stringify(option.param))).getTime();\n },\n regex: function (option) {\n return new RegExp(option.param).test(option.value);\n },\n equalTo: function (option) {\n var compareTo = option.formElement.querySelector('#' + option.param);\n option.param = compareTo.value;\n return option.param === option.value;\n },\n };\n __decorate([\n Property('e-hidden')\n ], FormValidator.prototype, \"ignore\", void 0);\n __decorate([\n Property()\n ], FormValidator.prototype, \"rules\", void 0);\n __decorate([\n Property('e-error')\n ], FormValidator.prototype, \"errorClass\", void 0);\n __decorate([\n Property('e-valid')\n ], FormValidator.prototype, \"validClass\", void 0);\n __decorate([\n Property('label')\n ], FormValidator.prototype, \"errorElement\", void 0);\n __decorate([\n Property('div')\n ], FormValidator.prototype, \"errorContainer\", void 0);\n __decorate([\n Property(ErrorOption.Label)\n ], FormValidator.prototype, \"errorOption\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"focusout\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"keyup\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"click\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"submit\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"validationBegin\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"validationComplete\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"customPlacement\", void 0);\n FormValidator = FormValidator_1 = __decorate([\n NotifyPropertyChanges\n ], FormValidator);\n return FormValidator;\n var FormValidator_1;\n}(Base));\nexport { FormValidator };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Event, Property, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, formatUnit, getValue, setValue, addClass, detach, createElement } from '@syncfusion/ej2-base';\nimport { Input } from '../../input/input';\nimport { regularExpressions, createMask, applyMask, wireEvents, unwireEvents, unstrippedValue, strippedValue } from '../base/index';\nimport { setMaskValue, setElementValue, bindClearEvent } from '../base/index';\nimport { maskInputBlurHandler } from '../base/mask-base';\nvar ROOT = 'e-widget e-control-wrapper e-mask';\nvar INPUT = 'e-input';\n/**\n * The MaskedTextBox allows the user to enter the valid input only based on the provided mask.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar MaskedTextBox = /** @class */ (function (_super) {\n __extends(MaskedTextBox, _super);\n function MaskedTextBox(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Gets the component name\n * @private\n */\n MaskedTextBox.prototype.getModuleName = function () {\n return 'maskedtextbox';\n };\n /**\n * Initializes the event handler\n * @private\n */\n MaskedTextBox.prototype.preRender = function () {\n this.promptMask = '';\n this.hiddenMask = '';\n this.escapeMaskValue = '';\n this.regExpCollec = regularExpressions;\n this.customRegExpCollec = [];\n this.undoCollec = [];\n this.redoCollec = [];\n this.changeEventArgs = {};\n this.focusEventArgs = {};\n this.maskKeyPress = false;\n this.isFocus = false;\n this.isInitial = false;\n this.isIosInvalid = false;\n var ejInstance = getValue('ej2_instances', this.element);\n this.cloneElement = this.element.cloneNode(true);\n this.angularTagName = null;\n if (this.element.tagName === 'EJS-MASKEDTEXTBOX') {\n this.angularTagName = this.element.tagName;\n var input = createElement('input');\n for (var i = 0; i < this.element.attributes.length; i++) {\n input.setAttribute(this.element.attributes[i].nodeName, this.element.attributes[i].nodeValue);\n input.innerHTML = this.element.innerHTML;\n }\n if (this.element.hasAttribute('id')) {\n this.element.removeAttribute('id');\n }\n this.element.classList.remove('e-control', 'e-maskedtextbox');\n this.element.classList.add('e-mask-container');\n this.element.appendChild(input);\n this.element = input;\n setValue('ej2_instances', ejInstance, this.element);\n }\n };\n /**\n * Gets the properties to be maintained in the persisted state.\n * @return {string}\n */\n MaskedTextBox.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Initializes the component rendering.\n * @private\n */\n MaskedTextBox.prototype.render = function () {\n if (this.element.tagName.toLowerCase() === 'input') {\n if (this.floatLabelType === 'Never') {\n addClass([this.element], INPUT);\n }\n this.createWrapper();\n this.isInitial = true;\n this.resetMaskedTextBox();\n this.isInitial = false;\n this.setMaskPlaceholder(true, false);\n this.setWidth(this.width);\n }\n };\n MaskedTextBox.prototype.resetMaskedTextBox = function () {\n this.promptMask = '';\n this.hiddenMask = '';\n this.escapeMaskValue = '';\n this.customRegExpCollec = [];\n this.undoCollec = [];\n this.redoCollec = [];\n if (this.promptChar.length > 1) {\n this.promptChar = this.promptChar[0];\n }\n createMask.call(this);\n applyMask.call(this);\n if (this.mask === null || this.mask === '' && this.value !== undefined) {\n setElementValue.call(this, this.value);\n }\n var val = strippedValue.call(this, this.element);\n this.prevValue = val;\n this.value = val;\n if (!this.isInitial) {\n unwireEvents.call(this);\n }\n wireEvents.call(this);\n };\n MaskedTextBox.prototype.setMaskPlaceholder = function (setVal, dynamicPlaceholder) {\n if (dynamicPlaceholder || this.placeholder) {\n Input.setPlaceholder(this.placeholder, this.element);\n if (this.element.value === this.promptMask && setVal && this.floatLabelType !== 'Always') {\n setElementValue.call(this, '');\n }\n if (this.floatLabelType === 'Never') {\n maskInputBlurHandler.call(this);\n }\n }\n };\n MaskedTextBox.prototype.setCssClass = function (cssClass, element) {\n if (cssClass) {\n addClass(element, cssClass);\n }\n };\n MaskedTextBox.prototype.setWidth = function (width) {\n if (!isNullOrUndefined(width)) {\n this.element.style.width = formatUnit(width);\n this.inputObj.container.style.width = formatUnit(width);\n }\n };\n MaskedTextBox.prototype.createWrapper = function () {\n this.inputObj = Input.createInput({\n element: this.element,\n floatLabelType: this.floatLabelType,\n properties: {\n enableRtl: this.enableRtl,\n cssClass: this.cssClass,\n enabled: this.enabled,\n placeholder: this.placeholder,\n showClearButton: this.showClearButton\n }\n });\n this.inputObj.container.setAttribute('class', ROOT + ' ' + this.inputObj.container.getAttribute('class'));\n };\n /**\n * Calls internally if any of the property value is changed.\n * @hidden\n */\n MaskedTextBox.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'value':\n setMaskValue.call(this, this.value);\n if (this.placeholder) {\n this.setMaskPlaceholder(false, false);\n }\n break;\n case 'placeholder':\n this.setMaskPlaceholder(true, true);\n break;\n case 'width':\n this.setWidth(newProp.width);\n break;\n case 'cssClass':\n this.setCssClass(newProp.cssClass, [this.inputObj.container]);\n break;\n case 'enabled':\n Input.setEnabled(newProp.enabled, this.element);\n break;\n case 'enableRtl':\n Input.setEnableRtl(newProp.enableRtl, [this.inputObj.container]);\n break;\n case 'customCharacters':\n this.customCharacters = newProp.customCharacters;\n this.resetMaskedTextBox();\n break;\n case 'showClearButton':\n Input.setClearButton(newProp.showClearButton, this.element, this.inputObj);\n bindClearEvent.call(this);\n break;\n case 'floatLabelType':\n this.floatLabelType = newProp.floatLabelType;\n Input.removeFloating(this.inputObj);\n Input.addFloating(this.element, this.floatLabelType, this.placeholder);\n break;\n case 'mask':\n var strippedValue_1 = this.value;\n this.mask = newProp.mask;\n this.updateValue(strippedValue_1);\n break;\n case 'promptChar':\n if (newProp.promptChar.length > 1) {\n newProp.promptChar = newProp.promptChar[0];\n }\n if (newProp.promptChar) {\n this.promptChar = newProp.promptChar;\n }\n else {\n this.promptChar = '_';\n }\n var value = this.element.value.replace(new RegExp('[' + oldProp.promptChar + ']', 'g'), this.promptChar);\n if (this.promptMask === this.element.value) {\n value = this.promptMask.replace(new RegExp('[' + oldProp.promptChar + ']', 'g'), this.promptChar);\n }\n this.promptMask = this.promptMask.replace(new RegExp('[' + oldProp.promptChar + ']', 'g'), this.promptChar);\n this.undoCollec = this.redoCollec = [];\n setElementValue.call(this, value);\n break;\n }\n }\n };\n MaskedTextBox.prototype.updateValue = function (strippedVal) {\n this.resetMaskedTextBox();\n setMaskValue.call(this, strippedVal);\n };\n /**\n * Gets the value of the MaskedTextBox with the masked format.\n * By using `value` property, you can get the raw value of maskedtextbox without literals and prompt characters.\n * @return {string}\n */\n MaskedTextBox.prototype.getMaskedValue = function () {\n return unstrippedValue.call(this, this.element);\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it maintains the initial input element from the DOM.\n * @method destroy\n * @return {void}\n */\n MaskedTextBox.prototype.destroy = function () {\n unwireEvents.call(this);\n this.inputObj.container.parentElement.appendChild(this.cloneElement);\n detach(this.inputObj.container);\n _super.prototype.destroy.call(this);\n };\n __decorate([\n Property(null)\n ], MaskedTextBox.prototype, \"cssClass\", void 0);\n __decorate([\n Property(null)\n ], MaskedTextBox.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], MaskedTextBox.prototype, \"placeholder\", void 0);\n __decorate([\n Property('Never')\n ], MaskedTextBox.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property(true)\n ], MaskedTextBox.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], MaskedTextBox.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(false)\n ], MaskedTextBox.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(false)\n ], MaskedTextBox.prototype, \"enableRtl\", void 0);\n __decorate([\n Property(null)\n ], MaskedTextBox.prototype, \"mask\", void 0);\n __decorate([\n Property('_')\n ], MaskedTextBox.prototype, \"promptChar\", void 0);\n __decorate([\n Property(null)\n ], MaskedTextBox.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], MaskedTextBox.prototype, \"customCharacters\", void 0);\n __decorate([\n Event()\n ], MaskedTextBox.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], MaskedTextBox.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], MaskedTextBox.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], MaskedTextBox.prototype, \"focus\", void 0);\n MaskedTextBox = __decorate([\n NotifyPropertyChanges\n ], MaskedTextBox);\n return MaskedTextBox;\n}(Component));\nexport { MaskedTextBox };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, EventHandler, Property, Event, Complex } from '@syncfusion/ej2-base';\nimport { L10n, Internationalization } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, ChildProperty } from '@syncfusion/ej2-base';\nimport { createElement, attributes, addClass, removeClass, setStyleAttribute, detach } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, formatUnit, Browser } from '@syncfusion/ej2-base';\nimport { Tooltip } from '@syncfusion/ej2-popups';\n/**\n * Configures the ticks data of the Slider.\n */\nvar TicksData = /** @class */ (function (_super) {\n __extends(TicksData, _super);\n function TicksData() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('None')\n ], TicksData.prototype, \"placement\", void 0);\n __decorate([\n Property(10)\n ], TicksData.prototype, \"largeStep\", void 0);\n __decorate([\n Property(1)\n ], TicksData.prototype, \"smallStep\", void 0);\n __decorate([\n Property(false)\n ], TicksData.prototype, \"showSmallTicks\", void 0);\n __decorate([\n Property(null)\n ], TicksData.prototype, \"format\", void 0);\n return TicksData;\n}(ChildProperty));\nexport { TicksData };\n/**\n * It illustrates the limit data in slider.\n */\nvar LimitData = /** @class */ (function (_super) {\n __extends(LimitData, _super);\n function LimitData() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], LimitData.prototype, \"enabled\", void 0);\n __decorate([\n Property(null)\n ], LimitData.prototype, \"minStart\", void 0);\n __decorate([\n Property(null)\n ], LimitData.prototype, \"minEnd\", void 0);\n __decorate([\n Property(null)\n ], LimitData.prototype, \"maxStart\", void 0);\n __decorate([\n Property(null)\n ], LimitData.prototype, \"maxEnd\", void 0);\n __decorate([\n Property(false)\n ], LimitData.prototype, \"startHandleFixed\", void 0);\n __decorate([\n Property(false)\n ], LimitData.prototype, \"endHandleFixed\", void 0);\n return LimitData;\n}(ChildProperty));\nexport { LimitData };\n/**\n * It illustrates the tooltip data in slider.\n */\nvar TooltipData = /** @class */ (function (_super) {\n __extends(TooltipData, _super);\n function TooltipData() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], TooltipData.prototype, \"cssClass\", void 0);\n __decorate([\n Property('Before')\n ], TooltipData.prototype, \"placement\", void 0);\n __decorate([\n Property('Focus')\n ], TooltipData.prototype, \"showOn\", void 0);\n __decorate([\n Property(false)\n ], TooltipData.prototype, \"isVisible\", void 0);\n __decorate([\n Property(null)\n ], TooltipData.prototype, \"format\", void 0);\n return TooltipData;\n}(ChildProperty));\nexport { TooltipData };\nvar bootstrapTooltipOffset = 6;\nvar classNames = {\n root: 'e-slider',\n rtl: 'e-rtl',\n sliderHiddenInput: 'e-slider-input',\n controlWrapper: 'e-control-wrapper',\n sliderHandle: 'e-handle',\n rangeBar: 'e-range',\n sliderButton: 'e-slider-button',\n firstButton: 'e-first-button',\n secondButton: 'e-second-button',\n scale: 'e-scale',\n tick: 'e-tick',\n large: 'e-large',\n tickValue: 'e-tick-value',\n sliderTooltip: 'e-slider-tooltip',\n sliderHover: 'e-slider-hover',\n sliderFirstHandle: 'e-handle-first',\n sliderSecondHandle: 'e-handle-second',\n sliderDisabled: 'e-disabled',\n sliderContainer: 'e-slider-container',\n horizontalTooltipBefore: 'e-slider-horizontal-before',\n horizontalTooltipAfter: 'e-slider-horizontal-after',\n verticalTooltipBefore: 'e-slider-vertical-before',\n verticalTooltipAfter: 'e-slider-vertical-after',\n materialTooltip: 'e-material-tooltip',\n materialTooltipOpen: 'e-material-tooltip-open',\n materialTooltipActive: 'e-tooltip-active',\n materialSlider: 'e-material-slider',\n sliderTrack: 'e-slider-track',\n sliderHandleFocused: 'e-handle-focused',\n verticalSlider: 'e-vertical',\n horizontalSlider: 'e-horizontal',\n sliderHandleStart: 'e-handle-start',\n sliderTooltipStart: 'e-material-tooltip-start',\n sliderTabHandle: 'e-tab-handle',\n sliderButtonIcon: 'e-button-icon',\n sliderSmallSize: 'e-small-size',\n sliderTickPosition: 'e-tick-pos',\n sliderFirstTick: 'e-first-tick',\n sliderLastTick: 'e-last-tick',\n sliderButtonClass: 'e-slider-btn',\n sliderTooltipWrapper: 'e-tooltip-wrap',\n sliderTabTrack: 'e-tab-track',\n sliderTabRange: 'e-tab-range',\n sliderActiveHandle: 'e-handle-active',\n sliderMaterialHandle: 'e-material-handle',\n sliderMaterialRange: 'e-material-range',\n sliderMaterialDefault: 'e-material-default',\n materialTooltipShow: 'e-material-tooltip-show',\n materialTooltipHide: 'e-material-tooltip-hide',\n readonly: 'e-read-only',\n limits: 'e-limits',\n limitBarDefault: 'e-limit-bar',\n limitBarFirst: 'e-limit-first',\n limitBarSecond: 'e-limit-second',\n dragHorizontal: 'e-drag-horizontal',\n dragVertical: 'e-drag-vertical'\n};\n/**\n * The Slider component allows the user to select a value or range\n * of values in-between a min and max range, by dragging the handle over the slider bar.\n * ```html\n *
\n * ```\n * ```typescript\n * \n * ```\n */\nvar Slider = /** @class */ (function (_super) {\n __extends(Slider, _super);\n function Slider(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.horDir = 'left';\n _this.verDir = 'bottom';\n _this.transition = {\n handle: 'left .4s cubic-bezier(.25, .8, .25, 1), right .4s cubic-bezier(.25, .8, .25, 1), ' +\n 'top .4s cubic-bezier(.25, .8, .25, 1) , bottom .4s cubic-bezier(.25, .8, .25, 1)',\n rangeBar: 'all .4s cubic-bezier(.25, .8, .25, 1)'\n };\n _this.transitionOnMaterialTooltip = {\n handle: 'left 1ms ease-out, right 1ms ease-out, bottom 1ms ease-out',\n rangeBar: 'left 1ms ease-out, right 1ms ease-out, bottom 1ms ease-out, width 1ms ease-out, height 1ms ease-out'\n };\n _this.scaleTransform = 'transform .4s cubic-bezier(.25, .8, .25, 1)';\n _this.customAriaText = null;\n _this.drag = true;\n return _this;\n }\n Slider.prototype.preRender = function () {\n var localeText = { incrementTitle: 'Increase', decrementTitle: 'Decrease' };\n this.l10n = new L10n('slider', localeText, this.locale);\n this.isElementFocused = false;\n this.tickElementCollection = [];\n this.tooltipFormatInfo = {};\n this.ticksFormatInfo = {};\n this.initCultureInfo();\n this.initCultureFunc();\n };\n Slider.prototype.initCultureFunc = function () {\n this.internationalization = new Internationalization(this.locale);\n };\n Slider.prototype.initCultureInfo = function () {\n this.tooltipFormatInfo.format = (!isNullOrUndefined(this.tooltip.format)) ? this.tooltip.format : null;\n this.ticksFormatInfo.format = (!isNullOrUndefined(this.ticks.format)) ? this.ticks.format : null;\n };\n Slider.prototype.formatString = function (value, formatInfo) {\n var formatValue = null;\n var formatString = null;\n if ((value || value === 0)) {\n formatValue = this.formatNumber(value);\n var numberOfDecimals = this.numberOfDecimals(value);\n formatString = this.internationalization.getNumberFormat(formatInfo)(this.makeRoundNumber(value, numberOfDecimals));\n }\n return { elementVal: formatValue, formatString: formatString };\n };\n ;\n Slider.prototype.formatNumber = function (value) {\n var numberOfDecimals = this.numberOfDecimals(value);\n return this.internationalization.getNumberFormat({\n maximumFractionDigits: numberOfDecimals,\n minimumFractionDigits: numberOfDecimals, useGrouping: false\n })(value);\n };\n ;\n Slider.prototype.numberOfDecimals = function (value) {\n var decimalPart = value.toString().split('.')[1];\n var numberOfDecimals = !decimalPart || !decimalPart.length ? 0 : decimalPart.length;\n return numberOfDecimals;\n };\n Slider.prototype.makeRoundNumber = function (value, precision) {\n var decimals = precision || 0;\n return Number(value.toFixed(decimals));\n };\n ;\n Slider.prototype.fractionalToInteger = function (value) {\n value = (this.numberOfDecimals(value) === 0) ? Number(value).toFixed(this.noOfDecimals) : value;\n var tens = 1;\n for (var i = 0; i < this.noOfDecimals; i++) {\n tens *= 10;\n }\n value = Number((value * tens).toFixed(0));\n return value;\n };\n /**\n * To Initialize the control rendering\n * @private\n */\n Slider.prototype.render = function () {\n this.initialize();\n this.initRender();\n this.wireEvents();\n this.setZindex();\n };\n Slider.prototype.initialize = function () {\n addClass([this.element], classNames.root);\n this.setCSSClass();\n };\n Slider.prototype.setCSSClass = function (oldCSSClass) {\n if (oldCSSClass) {\n removeClass([this.element], oldCSSClass.split(' '));\n }\n if (this.cssClass) {\n addClass([this.element], this.cssClass.split(' '));\n }\n };\n Slider.prototype.setEnabled = function () {\n var tooltipElement = this.type !== 'Range' ? [this.firstTooltipElement] :\n [this.firstTooltipElement, this.secondTooltipElement];\n if (!this.enabled) {\n addClass([this.sliderContainer], [classNames.sliderDisabled]);\n if (this.tooltip.isVisible && this.tooltip.showOn === 'Always') {\n tooltipElement.forEach(function (tooltipElement) {\n tooltipElement.classList.add(classNames.sliderDisabled);\n });\n }\n this.unwireEvents();\n }\n else {\n removeClass([this.sliderContainer], [classNames.sliderDisabled]);\n if (this.tooltip.isVisible && this.tooltip.showOn === 'Always') {\n tooltipElement.forEach(function (tooltipElement) {\n tooltipElement.classList.remove(classNames.sliderDisabled);\n });\n }\n this.wireEvents();\n }\n };\n Slider.prototype.getTheme = function (container) {\n var theme = window.getComputedStyle(container, ':after').getPropertyValue('content');\n return theme.replace(/['\"]+/g, '');\n };\n /**\n * Initialize the rendering\n * @private\n */\n Slider.prototype.initRender = function () {\n this.sliderContainer = createElement('div', { className: classNames.sliderContainer + ' ' + classNames.controlWrapper });\n this.element.parentNode.insertBefore(this.sliderContainer, this.element);\n this.sliderContainer.appendChild(this.element);\n this.sliderTrack = createElement('div', { className: classNames.sliderTrack });\n this.element.appendChild(this.sliderTrack);\n this.element.tabIndex = -1;\n this.isMaterial = this.getTheme(this.sliderContainer) === 'material';\n this.isBootstrap = this.getTheme(this.sliderContainer) === 'bootstrap';\n this.setHandler();\n this.createRangeBar();\n if (this.limits.enabled) {\n this.createLimitBar();\n }\n this.setOrientClass();\n this.hiddenInput = (createElement('input', {\n attrs: {\n type: 'hidden', value: (isNullOrUndefined(this.value) ? this.min.toString() : this.value.toString()),\n name: this.element.getAttribute('name') || this.element.getAttribute('id') ||\n '_' + (Math.random() * 1000).toFixed(0) + 'slider', class: classNames.sliderHiddenInput\n }\n }));\n this.hiddenInput.tabIndex = -1;\n this.sliderContainer.appendChild(this.hiddenInput);\n if (this.showButtons) {\n this.setButtons();\n }\n this.setEnableRTL();\n if (this.type === 'Range') {\n this.rangeValueUpdate();\n }\n else {\n this.value = isNullOrUndefined(this.value) ? parseFloat(formatUnit(this.min.toString())) : this.value;\n }\n this.previousVal = this.type !== 'Range' ? this.checkHandleValue(parseFloat(formatUnit(this.value.toString()))) :\n [this.checkHandleValue(parseFloat(formatUnit(this.value[0].toString()))),\n this.checkHandleValue(parseFloat(formatUnit(this.value[1].toString())))];\n this.previousChanged = this.previousVal;\n if (!isNullOrUndefined(this.element.hasAttribute('name'))) {\n this.element.removeAttribute('name');\n }\n this.setValue();\n if (this.limits.enabled) {\n this.setLimitBar();\n }\n if (this.ticks.placement !== 'None') {\n this.renderScale();\n }\n if (this.tooltip.isVisible) {\n this.renderTooltip();\n }\n if (!this.enabled) {\n addClass([this.sliderContainer], [classNames.sliderDisabled]);\n }\n else {\n removeClass([this.sliderContainer], [classNames.sliderDisabled]);\n }\n if (this.readonly) {\n addClass([this.sliderContainer], [classNames.readonly]);\n }\n else {\n removeClass([this.sliderContainer], [classNames.readonly]);\n }\n };\n Slider.prototype.createRangeBar = function () {\n if (this.type !== 'Default') {\n this.rangeBar = (createElement('div', { attrs: { class: classNames.rangeBar } }));\n this.element.appendChild(this.rangeBar);\n if (this.drag && this.type === 'Range') {\n if (this.orientation === 'Horizontal') {\n this.rangeBar.classList.add(classNames.dragHorizontal);\n }\n else {\n this.rangeBar.classList.add(classNames.dragVertical);\n }\n }\n }\n };\n Slider.prototype.createLimitBar = function () {\n var firstElementClassName = this.type !== 'Range' ? classNames.limitBarDefault :\n classNames.limitBarFirst;\n firstElementClassName += ' ' + classNames.limits;\n this.limitBarFirst = (createElement('div', {\n attrs: { class: firstElementClassName }\n }));\n this.element.appendChild(this.limitBarFirst);\n if (this.type === 'Range') {\n this.limitBarSecond = (createElement('div', {\n attrs: {\n class: classNames.limitBarSecond + ' ' + classNames.limits\n }\n }));\n this.element.appendChild(this.limitBarSecond);\n }\n };\n Slider.prototype.setOrientClass = function () {\n if (this.orientation !== 'Vertical') {\n this.sliderContainer.classList.remove(classNames.verticalSlider);\n this.sliderContainer.classList.add(classNames.horizontalSlider);\n this.firstHandle.setAttribute('aria-orientation', 'horizontal');\n if (this.type === 'Range') {\n this.secondHandle.setAttribute('aria-orientation', 'horizontal');\n }\n }\n else {\n this.sliderContainer.classList.remove(classNames.horizontalSlider);\n this.sliderContainer.classList.add(classNames.verticalSlider);\n this.firstHandle.setAttribute('aria-orientation', 'vertical');\n if (this.type === 'Range') {\n this.secondHandle.setAttribute('aria-orientation', 'vertical');\n }\n }\n };\n Slider.prototype.setAriaAttributes = function (element) {\n var _this = this;\n var min = this.min;\n var max = this.max;\n if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n min = this.customValues[0];\n max = this.customValues[this.customValues.length - 1];\n }\n if (this.type !== 'Range') {\n attributes(element, {\n 'aria-valuemin': min.toString(), 'aria-valuemax': max.toString()\n });\n }\n else {\n var range = !isNullOrUndefined(this.customValues) && this.customValues.length > 0 ?\n [[min.toString(), (this.customValues[this.value[1]]).toString()],\n [(this.customValues[this.value[0]]).toString(), max.toString()]] :\n [[min.toString(), this.value[1].toString()], [this.value[0].toString(), max.toString()]];\n range.forEach(function (range, index) {\n var element = index === 0 ? _this.firstHandle : _this.secondHandle;\n if (element) {\n attributes(element, {\n 'aria-valuemin': range[0], 'aria-valuemax': range[1]\n });\n }\n });\n }\n };\n Slider.prototype.createSecondHandle = function () {\n this.secondHandle = createElement('div', {\n attrs: {\n class: classNames.sliderHandle, 'role': 'slider', 'aria-labelledby': this.element.id + '_title', tabIndex: '0'\n }\n });\n this.secondHandle.classList.add(classNames.sliderSecondHandle);\n this.element.appendChild(this.secondHandle);\n if (this.isMaterial && this.tooltip.isVisible) {\n this.secondMaterialHandle = createElement('div', {\n attrs: {\n class: classNames.sliderHandle + ' ' +\n classNames.sliderMaterialHandle\n }\n });\n this.element.appendChild(this.secondMaterialHandle);\n }\n };\n Slider.prototype.createFirstHandle = function () {\n this.firstHandle = createElement('div', {\n attrs: {\n class: classNames.sliderHandle, 'role': 'slider', 'aria-labelledby': this.element.id + '_title', tabIndex: '0'\n }\n });\n this.firstHandle.classList.add(classNames.sliderFirstHandle);\n this.element.appendChild(this.firstHandle);\n if (this.isMaterial && this.tooltip.isVisible) {\n this.firstMaterialHandle = createElement('div', {\n attrs: {\n class: classNames.sliderHandle + ' ' +\n classNames.sliderMaterialHandle\n }\n });\n this.element.appendChild(this.firstMaterialHandle);\n }\n };\n Slider.prototype.wireFirstHandleEvt = function (destroy) {\n if (!destroy) {\n EventHandler.add(this.firstHandle, 'mousedown touchstart', this.handleFocus, this);\n EventHandler.add(this.firstHandle, 'transitionend', this.transitionEnd, this);\n EventHandler.add(this.firstHandle, 'mouseenter touchenter', this.handleOver, this);\n EventHandler.add(this.firstHandle, 'mouseleave touchend', this.handleLeave, this);\n }\n else {\n EventHandler.remove(this.firstHandle, 'mousedown touchstart', this.handleFocus);\n EventHandler.remove(this.firstHandle, 'transitionend', this.transitionEnd);\n EventHandler.remove(this.firstHandle, 'mouseenter touchenter', this.handleOver);\n EventHandler.remove(this.firstHandle, 'mouseleave touchend', this.handleLeave);\n }\n };\n Slider.prototype.wireSecondHandleEvt = function (destroy) {\n if (!destroy) {\n EventHandler.add(this.secondHandle, 'mousedown touchstart', this.handleFocus, this);\n EventHandler.add(this.secondHandle, 'transitionend', this.transitionEnd, this);\n EventHandler.add(this.secondHandle, 'mouseenter touchenter', this.handleOver, this);\n EventHandler.add(this.secondHandle, 'mouseleave touchend', this.handleLeave, this);\n }\n else {\n EventHandler.remove(this.secondHandle, 'mousedown touchstart', this.handleFocus);\n EventHandler.remove(this.secondHandle, 'transitionend', this.transitionEnd);\n EventHandler.remove(this.secondHandle, 'mouseenter touchenter', this.handleOver);\n EventHandler.remove(this.secondHandle, 'mouseleave touchend', this.handleLeave);\n }\n };\n Slider.prototype.handleStart = function () {\n var pos = (this.activeHandle === 1) ? this.handlePos1 : this.handlePos2;\n var tooltipElement = this.activeHandle === 1 ? this.firstTooltipElement : this.secondTooltipElement;\n if (pos === 0 && this.type !== 'Range') {\n this.getHandle().classList.add(classNames.sliderHandleStart);\n if (this.isMaterial && this.tooltip.isVisible) {\n this.firstMaterialHandle.classList.add(classNames.sliderHandleStart);\n if (tooltipElement) {\n tooltipElement.classList.add(classNames.sliderTooltipStart);\n }\n }\n }\n };\n Slider.prototype.transitionEnd = function (e) {\n this.handleStart();\n this.getHandle().style.transition = 'none';\n if (this.type !== 'Default') {\n this.rangeBar.style.transition = 'none';\n }\n if (this.tooltip.isVisible) {\n var tooltipObj = this.activeHandle === 1 ? this.firstTooltipObj : this.secondTooltipObj;\n var tooltipElement = this.activeHandle === 1 ? this.firstTooltipElement : this.secondTooltipElement;\n if (!this.isMaterial) {\n tooltipObj.animation = { open: { effect: 'None' }, close: { effect: 'FadeOut', duration: 500 } };\n this.tooltipAnimation();\n }\n else {\n if (!tooltipElement.classList.contains(classNames.materialTooltipOpen) && e.propertyName !== 'transform') {\n this.openMaterialTooltip();\n }\n else {\n if (this.type === 'Default') {\n tooltipElement.style.transition = this.transition.handle;\n }\n this.refreshTooltip();\n }\n }\n }\n if (this.tooltip.showOn !== 'Always') {\n this.closeTooltip();\n }\n };\n Slider.prototype.handleFocusOut = function () {\n if (this.firstHandle.classList.contains(classNames.sliderHandleFocused)) {\n this.firstHandle.classList.remove(classNames.sliderHandleFocused);\n }\n if (this.type === 'Range') {\n if (this.secondHandle.classList.contains(classNames.sliderHandleFocused)) {\n this.secondHandle.classList.remove(classNames.sliderHandleFocused);\n }\n }\n };\n Slider.prototype.handleFocus = function (e) {\n if (e.currentTarget === this.firstHandle) {\n this.firstHandle.classList.add(classNames.sliderHandleFocused);\n }\n else {\n this.secondHandle.classList.add(classNames.sliderHandleFocused);\n }\n };\n Slider.prototype.handleOver = function (e) {\n if (this.tooltip.isVisible && this.tooltip.showOn === 'Hover') {\n this.tooltipValue();\n var tooltipObj = e.currentTarget === this.firstHandle ? this.firstTooltipObj : this.secondTooltipObj;\n tooltipObj.animation = { open: { effect: 'None' }, close: { effect: 'FadeOut', duration: 500 } };\n if (e.currentTarget === this.firstHandle) {\n this.firstTooltipObj.open(this.firstHandle);\n }\n else {\n this.secondTooltipObj.open(this.secondHandle);\n }\n }\n };\n Slider.prototype.handleLeave = function (e) {\n if (this.tooltip.isVisible && this.tooltip.showOn === 'Hover' &&\n !e.currentTarget.classList.contains(classNames.sliderHandleFocused) &&\n !e.currentTarget.classList.contains(classNames.sliderTabHandle)) {\n this.tooltipValue();\n var tooltipObj = e.currentTarget === this.firstHandle ? this.firstTooltipObj : this.secondTooltipObj;\n if (e.currentTarget === this.firstHandle) {\n this.firstTooltipObj.close();\n }\n else {\n this.secondTooltipObj.close();\n }\n tooltipObj.animation = { open: { effect: 'None' }, close: { effect: 'FadeOut', duration: 500 } };\n }\n };\n Slider.prototype.setHandler = function () {\n if (this.min > this.max) {\n this.min = this.max;\n }\n this.createFirstHandle();\n if (this.type === 'Range') {\n this.createSecondHandle();\n }\n };\n Slider.prototype.setEnableRTL = function () {\n this.enableRtl && this.orientation !== 'Vertical' ? addClass([this.sliderContainer], classNames.rtl) :\n removeClass([this.sliderContainer], classNames.rtl);\n var preDir = (this.orientation !== 'Vertical') ? this.horDir : this.verDir;\n if (this.enableRtl) {\n this.horDir = 'right';\n this.verDir = 'bottom';\n }\n else {\n this.horDir = 'left';\n this.verDir = 'bottom';\n }\n var currDir = (this.orientation !== 'Vertical') ? this.horDir : this.verDir;\n if (preDir !== currDir) {\n if (this.orientation === 'Horizontal') {\n setStyleAttribute(this.firstHandle, { 'right': '', 'left': 'auto' });\n if (this.type === 'Range') {\n setStyleAttribute(this.secondHandle, { 'top': '', 'left': 'auto' });\n }\n }\n }\n };\n Slider.prototype.tooltipValue = function () {\n var text;\n var value1;\n var value2;\n var args = {\n value: this.value,\n text: ''\n };\n this.setTooltipContent();\n args.text = text = this.firstTooltipObj.content;\n this.trigger('tooltipChange', args);\n this.addTooltipClass(args.text);\n if (text !== args.text) {\n this.customAriaText = args.text;\n this.firstTooltipObj.content = args.text;\n this.setAriaAttrValue(this.firstHandle);\n if (this.type === 'Range') {\n this.secondTooltipObj.content = args.text;\n this.setAriaAttrValue(this.secondHandle);\n }\n }\n };\n Slider.prototype.setTooltipContent = function () {\n var content;\n if (this.type === 'Range') {\n content = this.formatContent(this.tooltipFormatInfo, false);\n this.firstTooltipObj.content = content;\n this.secondTooltipObj.content = content;\n }\n else {\n if (!isNullOrUndefined(this.handleVal1)) {\n content = this.formatContent(this.tooltipFormatInfo, false);\n this.firstTooltipObj.content = content;\n }\n }\n };\n Slider.prototype.formatContent = function (formatInfo, ariaContent) {\n var content = '';\n var handle1 = this.handleVal1;\n var handle2 = this.handleVal2;\n if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n handle1 = this.customValues[this.handleVal1];\n handle2 = this.customValues[this.handleVal2];\n }\n if (!ariaContent) {\n if (this.type === 'Range') {\n if (this.enableRtl && this.orientation !== 'Vertical') {\n content = (!isNullOrUndefined(formatInfo.format)) ? (this.formatString(handle2, formatInfo)\n .formatString + ' - ' + this.formatString(handle1, formatInfo).formatString) :\n (handle2.toString() + ' - ' + handle1.toString());\n }\n else {\n content = (!isNullOrUndefined(formatInfo.format)) ? (this.formatString(handle1, formatInfo)\n .formatString + ' - ' + this.formatString(handle2, formatInfo).formatString) :\n (handle1.toString() + ' - ' + handle2.toString());\n }\n }\n else {\n if (!isNullOrUndefined(handle1)) {\n content = (!isNullOrUndefined(formatInfo.format)) ?\n this.formatString(handle1, formatInfo).formatString : handle1.toString();\n }\n }\n return content;\n }\n else {\n if (this.type === 'Range') {\n if (this.enableRtl && this.orientation !== 'Vertical') {\n content = (!isNullOrUndefined(this.tooltip) && !isNullOrUndefined(this.tooltip.format)) ?\n (this.formatString(handle2, formatInfo).elementVal + ' - ' +\n this.formatString(handle1, formatInfo).elementVal) :\n (handle2.toString() + ' - ' + handle1.toString());\n }\n else {\n content = (!isNullOrUndefined(this.tooltip) && !isNullOrUndefined(this.tooltip.format)) ?\n (this.formatString(handle1, formatInfo).elementVal + ' - ' +\n this.formatString(handle2, formatInfo).elementVal) :\n (handle1.toString() + ' - ' + handle2.toString());\n }\n }\n else {\n if (!isNullOrUndefined(handle1)) {\n content = (!isNullOrUndefined(this.tooltip) && !isNullOrUndefined(this.tooltip.format)) ?\n this.formatString(handle1, formatInfo).elementVal : handle1.toString();\n }\n }\n return content;\n }\n };\n Slider.prototype.addTooltipClass = function (content) {\n var _this = this;\n if (this.isMaterial && this.tooltip.isVisible) {\n var count_1 = content.toString().length;\n var tooltipElement = this.type !== 'Range' ? [this.firstTooltipElement] :\n [this.firstTooltipElement, this.secondTooltipElement];\n tooltipElement.forEach(function (element, index) {\n if (!element) {\n var cssClass = count_1 > 4 ? classNames.sliderMaterialRange : classNames.sliderMaterialDefault;\n !index ? _this.firstTooltipObj.cssClass = classNames.sliderTooltip + ' ' + cssClass :\n _this.secondTooltipObj.cssClass = classNames.sliderTooltip + ' ' + cssClass;\n }\n else {\n if (count_1 > 4) {\n element.classList.remove(classNames.sliderMaterialDefault);\n if (!element.classList.contains(classNames.sliderMaterialRange)) {\n element.classList.add(classNames.sliderMaterialRange);\n element.style.transform = 'scale(1)';\n }\n }\n else {\n element.classList.remove(classNames.sliderMaterialRange);\n if (!element.classList.contains(classNames.sliderMaterialDefault)) {\n element.classList.add(classNames.sliderMaterialDefault);\n element.style.transform = _this.getTooltipTransformProperties(_this.previousTooltipClass).rotate;\n }\n }\n }\n });\n }\n };\n Slider.prototype.tooltipPlacement = function () {\n var tooltipPosition;\n if (this.orientation === 'Horizontal') {\n this.tooltip.placement === 'Before' ? tooltipPosition = 'TopCenter' : tooltipPosition = 'BottomCenter';\n }\n else {\n this.tooltip.placement === 'Before' ? tooltipPosition = 'LeftCenter' : tooltipPosition = 'RightCenter';\n }\n this.firstTooltipObj.position = tooltipPosition;\n if (this.type === 'Range') {\n this.secondTooltipObj.position = tooltipPosition;\n }\n if (this.isMaterial) {\n this.firstTooltipObj.showTipPointer = true;\n this.setProperties({ tooltip: { showOn: 'Always' } }, true);\n this.firstTooltipObj.height = 30;\n if (this.type === 'Range') {\n this.secondTooltipObj.showTipPointer = true;\n this.secondTooltipObj.height = 30;\n }\n }\n };\n Slider.prototype.tooltipBeforeOpen = function (args) {\n var tooltipElement = args.target === this.firstHandle ? this.firstTooltipElement = args.element :\n this.secondTooltipElement = args.element;\n if (this.tooltip.cssClass !== '') {\n addClass([tooltipElement], this.tooltip.cssClass.split(' '));\n }\n args.target.removeAttribute('aria-describedby');\n if (this.isMaterial && this.tooltip.isVisible) {\n var transformProperties = this.getTooltipTransformProperties(this.previousTooltipClass);\n tooltipElement.firstChild.classList.add(classNames.materialTooltipHide);\n this.handleStart();\n if (tooltipElement.firstElementChild.innerText.length > 4) {\n tooltipElement.style.transform = transformProperties.translate + \" scale(0.01)\";\n }\n else {\n tooltipElement.style.transform = transformProperties.translate + \" \" + transformProperties.rotate + \" scale(0.01)\";\n }\n }\n if (this.isBootstrap) {\n switch (this.bootstrapCollisionArgs.collidedPosition) {\n case 'TopCenter':\n this.firstTooltipObj.setProperties({ 'offsetY': -(bootstrapTooltipOffset) }, false);\n if (this.type === 'Range') {\n this.secondTooltipObj.setProperties({ 'offsetY': -(bootstrapTooltipOffset) }, false);\n }\n break;\n case 'BottomCenter':\n this.firstTooltipObj.setProperties({ 'offsetY': bootstrapTooltipOffset }, false);\n if (this.type === 'Range') {\n this.secondTooltipObj.setProperties({ 'offsetY': bootstrapTooltipOffset }, false);\n }\n break;\n case 'LeftCenter':\n this.firstTooltipObj.setProperties({ 'offsetX': -(bootstrapTooltipOffset) }, false);\n if (this.type === 'Range') {\n this.secondTooltipObj.setProperties({ 'offsetX': -(bootstrapTooltipOffset) }, false);\n }\n break;\n case 'RightCenter':\n this.firstTooltipObj.setProperties({ 'offsetX': bootstrapTooltipOffset }, false);\n if (this.type === 'Range') {\n this.secondTooltipObj.setProperties({ 'offsetX': bootstrapTooltipOffset }, false);\n }\n break;\n default:\n break;\n }\n }\n };\n Slider.prototype.wireMaterialTooltipEvent = function (destroy) {\n if (this.isMaterial && this.tooltip.isVisible) {\n if (!destroy) {\n EventHandler.add(this.firstTooltipElement, 'mousedown touchstart', this.sliderDown, this);\n if (this.type === 'Range') {\n EventHandler.add(this.secondTooltipElement, 'mousedown touchstart', this.sliderDown, this);\n }\n }\n else {\n EventHandler.remove(this.firstTooltipElement, 'mousedown touchstart', this.sliderDown);\n if (this.type === 'Range') {\n EventHandler.remove(this.secondTooltipElement, 'mousedown touchstart', this.sliderDown);\n }\n }\n }\n };\n Slider.prototype.tooltipPositionCalculation = function (position) {\n var cssClass;\n switch (position) {\n case 'TopCenter':\n cssClass = classNames.horizontalTooltipBefore;\n break;\n case 'BottomCenter':\n cssClass = classNames.horizontalTooltipAfter;\n break;\n case 'LeftCenter':\n cssClass = classNames.verticalTooltipBefore;\n break;\n case 'RightCenter':\n cssClass = classNames.verticalTooltipAfter;\n break;\n }\n return cssClass;\n };\n Slider.prototype.getTooltipTransformProperties = function (className) {\n if (this.firstTooltipElement) {\n var position = void 0;\n if (this.orientation === 'Horizontal') {\n position = (this.firstTooltipElement.clientHeight + 14) - (this.firstTooltipElement.clientHeight / 2);\n }\n else {\n position = (this.firstTooltipElement.clientWidth + 14) - (this.firstTooltipElement.clientWidth / 2);\n }\n var transformProperties = this.orientation === 'Horizontal' ?\n (className === classNames.horizontalTooltipBefore ? { rotate: 'rotate(45deg)', translate: \"translateY(\" + position + \"px)\" } :\n { rotate: 'rotate(225deg)', translate: \"translateY(\" + -(position) + \"px)\" }) :\n (className === classNames.verticalTooltipBefore ? { rotate: 'rotate(-45deg)', translate: \"translateX(\" + position + \"px)\" } :\n { rotate: 'rotate(-225deg)', translate: \"translateX(\" + (-position) + \"px)\" });\n return transformProperties;\n }\n return undefined;\n };\n Slider.prototype.openMaterialTooltip = function () {\n var _this = this;\n this.refreshTooltip();\n var tooltipElement = this.activeHandle === 1 ? this.firstTooltipElement : this.secondTooltipElement;\n var handle = this.activeHandle === 1 ? this.firstMaterialHandle : this.secondMaterialHandle;\n if (tooltipElement.firstChild.classList.contains(classNames.materialTooltipHide)) {\n tooltipElement.firstChild.classList.remove(classNames.materialTooltipHide);\n }\n tooltipElement.firstChild.classList.add(classNames.materialTooltipShow);\n this.getHandle().style.cursor = 'default';\n tooltipElement.style.transition = this.scaleTransform;\n tooltipElement.classList.add(classNames.materialTooltipOpen);\n handle.style.transform = 'scale(0)';\n if (tooltipElement.firstElementChild.innerText.length > 4) {\n tooltipElement.style.transform = 'scale(1)';\n }\n else {\n tooltipElement.style.transform = this.getTooltipTransformProperties(this.previousTooltipClass).rotate;\n }\n if (this.type === 'Default') {\n setTimeout(function () { tooltipElement.style.transition = _this.transition.handle; }, 2500);\n }\n else {\n setTimeout(function () { tooltipElement.style.transition = 'none'; }, 2500);\n }\n };\n Slider.prototype.checkTooltipPosition = function (args) {\n var tooltipPosition = args.target === this.firstHandle ? this.firstHandleTooltipPosition :\n this.secondHandleTooltipPosition;\n if (this.isMaterial && (tooltipPosition === undefined || tooltipPosition !== args.collidedPosition)) {\n var tooltipClass = this.tooltipPositionCalculation(args.collidedPosition);\n args.element.classList.remove(this.previousTooltipClass);\n args.element.classList.add(tooltipClass);\n this.previousTooltipClass = tooltipClass;\n if (args.element.style.transform && args.element.classList.contains(classNames.materialTooltipOpen) &&\n args.element.firstElementChild.innerText.length < 4) {\n args.element.style.transform = this.getTooltipTransformProperties(this.previousTooltipClass).rotate;\n }\n if (args.target === this.firstHandle) {\n this.firstHandleTooltipPosition = args.collidedPosition;\n }\n else {\n this.secondHandleTooltipPosition = args.collidedPosition;\n }\n }\n this.bootstrapCollisionArgs = args;\n };\n Slider.prototype.renderTooltip = function () {\n if (this.tooltip.showOn === 'Auto') {\n this.setProperties({ tooltip: { showOn: 'Hover' } }, true);\n }\n var tooltipPointer = this.isBootstrap ? true : false;\n this.firstTooltipObj = new Tooltip({\n showTipPointer: tooltipPointer,\n cssClass: classNames.sliderTooltip,\n animation: { open: { effect: 'None' }, close: { effect: 'None' } },\n opensOn: 'Custom',\n beforeOpen: this.tooltipBeforeOpen.bind(this),\n beforeCollision: this.checkTooltipPosition.bind(this),\n afterClose: this.tooltipAfterClose.bind(this)\n });\n this.firstTooltipObj.appendTo(this.firstHandle);\n if (this.type === 'Range') {\n this.secondTooltipObj = new Tooltip({\n showTipPointer: tooltipPointer,\n cssClass: classNames.sliderTooltip,\n animation: { open: { effect: 'None' }, close: { effect: 'None' } },\n opensOn: 'Custom',\n beforeOpen: this.tooltipBeforeOpen.bind(this),\n beforeCollision: this.checkTooltipPosition.bind(this),\n afterClose: this.tooltipAfterClose.bind(this)\n });\n this.secondTooltipObj.appendTo(this.secondHandle);\n }\n this.tooltipPlacement();\n this.firstHandle.style.transition = 'none';\n if (this.type !== 'Default') {\n this.rangeBar.style.transition = 'none';\n }\n if (this.type === 'Range') {\n this.secondHandle.style.transition = 'none';\n }\n if (this.isMaterial) {\n this.sliderContainer.classList.add(classNames.materialSlider);\n this.tooltipValue();\n this.firstTooltipObj.open(this.firstHandle);\n if (this.type === 'Range') {\n this.secondTooltipObj.open(this.secondHandle);\n }\n }\n };\n Slider.prototype.tooltipAfterClose = function (args) {\n if (args.element === this.firstTooltipElement) {\n this.firstTooltipElement = undefined;\n }\n else {\n this.secondTooltipElement = undefined;\n }\n };\n Slider.prototype.setButtons = function () {\n this.firstBtn = createElement('div', { className: classNames.sliderButton + ' ' + classNames.firstButton });\n this.firstBtn.appendChild(createElement('span', { className: classNames.sliderButtonIcon }));\n this.firstBtn.tabIndex = -1;\n this.secondBtn = createElement('div', { className: classNames.sliderButton + ' ' + classNames.secondButton });\n this.secondBtn.appendChild(createElement('span', { className: classNames.sliderButtonIcon }));\n this.secondBtn.tabIndex = -1;\n this.sliderContainer.classList.add(classNames.sliderButtonClass);\n this.sliderContainer.appendChild(this.firstBtn);\n this.sliderContainer.appendChild(this.secondBtn);\n this.sliderContainer.appendChild(this.element);\n this.buttonTitle();\n };\n Slider.prototype.buttonTitle = function () {\n var enabledRTL = this.enableRtl && this.orientation !== 'Vertical';\n this.l10n.setLocale(this.locale);\n var decrementTitle = this.l10n.getConstant('decrementTitle');\n var incrementTitle = this.l10n.getConstant('incrementTitle');\n attributes(enabledRTL ? this.secondBtn : this.firstBtn, { 'aria-label': decrementTitle, title: decrementTitle });\n attributes(enabledRTL ? this.firstBtn : this.secondBtn, { 'aria-label': incrementTitle, title: incrementTitle });\n };\n Slider.prototype.buttonFocusOut = function () {\n if (this.isMaterial) {\n this.getHandle().classList.remove('e-large-thumb-size');\n }\n };\n Slider.prototype.repeatButton = function (args) {\n var buttonElement = args.target.parentElement;\n var tooltipElement = this.activeHandle === 1 ? this.firstTooltipElement : this.secondTooltipElement;\n if (!tooltipElement && this.tooltip.isVisible) {\n this.openTooltip();\n }\n var hVal = this.handleValueUpdate();\n var enabledRTL = this.enableRtl && this.orientation !== 'Vertical';\n var value;\n if (args.target.parentElement.classList.contains(classNames.firstButton)\n || args.target.classList.contains(classNames.firstButton)) {\n enabledRTL ? (value = this.add(hVal, parseFloat(this.step.toString()), true)) :\n (value = this.add(hVal, parseFloat(this.step.toString()), false));\n }\n else if (args.target.parentElement.classList.contains(classNames.secondButton)\n || (args.target.classList.contains(classNames.secondButton))) {\n enabledRTL ? (value = this.add(hVal, parseFloat(this.step.toString()), false)) :\n (value = this.add(hVal, parseFloat(this.step.toString()), true));\n }\n if (this.limits.enabled) {\n value = this.getLimitCorrectedValues(value);\n }\n if (value >= this.min && value <= this.max) {\n this.changeHandleValue(value);\n this.refreshTooltipOnMove();\n }\n };\n Slider.prototype.repeatHandlerMouse = function (args) {\n args.preventDefault();\n if (args.type === ('mousedown') || args.type === ('touchstart')) {\n this.buttonClick(args);\n this.repeatInterval = setInterval(this.repeatButton.bind(this), 180, args);\n }\n };\n Slider.prototype.materialChange = function () {\n if (!this.getHandle().classList.contains('e-large-thumb-size')) {\n this.getHandle().classList.add('e-large-thumb-size');\n }\n };\n Slider.prototype.repeatHandlerUp = function (e) {\n this.changeEvent('changed');\n if (this.tooltip.isVisible && this.tooltip.showOn !== 'Always' && !this.isMaterial) {\n this.closeTooltip();\n }\n clearInterval(this.repeatInterval);\n this.getHandle().focus();\n };\n Slider.prototype.customTickCounter = function (bigNum) {\n var tickCount = 4;\n if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n if (bigNum > 4) {\n tickCount = 3;\n }\n if (bigNum > 7) {\n tickCount = 2;\n }\n if (bigNum > 14) {\n tickCount = 1;\n }\n if (bigNum > 28) {\n tickCount = 0;\n }\n }\n return tickCount;\n };\n Slider.prototype.renderScale = function () {\n var orien = this.orientation === 'Vertical' ? 'v' : 'h';\n var spanText;\n this.noOfDecimals = this.numberOfDecimals(this.step);\n this.ul = createElement('ul', {\n className: classNames.scale + ' ' + 'e-' + orien + '-scale ' + classNames.tick + '-' + this.ticks.placement.toLowerCase(),\n attrs: { role: 'presentation', tabIndex: '-1', 'aria-hidden': 'true' }\n });\n this.ul.style.zIndex = '-1';\n if (Browser.isAndroid && orien === 'h') {\n this.ul.classList.add(classNames.sliderTickPosition);\n }\n var smallStep = this.ticks.smallStep;\n if (!this.ticks.showSmallTicks) {\n this.ticks.largeStep > 0 ? (smallStep = this.ticks.largeStep) :\n (smallStep = (parseFloat(formatUnit(this.max))) - (parseFloat(formatUnit(this.min))));\n }\n else if (smallStep <= 0) {\n smallStep = parseFloat(formatUnit(this.step));\n }\n var min = this.fractionalToInteger(this.min);\n var max = this.fractionalToInteger(this.max);\n var steps = this.fractionalToInteger(smallStep);\n var bigNum = !isNullOrUndefined(this.customValues) && this.customValues.length > 0 && this.customValues.length - 1;\n var customStep = this.customTickCounter(bigNum);\n var count = !isNullOrUndefined(this.customValues) && this.customValues.length > 0 ?\n (bigNum * customStep) + bigNum : Math.abs((max - min) / steps);\n this.element.appendChild(this.ul);\n var li;\n var start = parseFloat(this.min.toString());\n if (orien === 'v') {\n start = parseFloat(this.max.toString());\n }\n var left = 0;\n var islargeTick;\n var tickWidth = 100 / count;\n if (tickWidth === Infinity) {\n tickWidth = 5;\n }\n for (var i = 0, y = !isNullOrUndefined(this.customValues) && this.customValues.length > 0 ?\n this.customValues.length - 1 : 0, k = 0; i <= count; i++) {\n li = (createElement('li', {\n attrs: {\n class: classNames.tick, role: 'presentation', tabIndex: '-1',\n 'aria-hidden': 'true'\n }\n }));\n if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n islargeTick = i % (customStep + 1) === 0;\n if (islargeTick) {\n if (orien === 'h') {\n start = this.customValues[k];\n k++;\n }\n else {\n start = this.customValues[y];\n y--;\n }\n li.setAttribute('title', start.toString());\n }\n }\n else {\n li.setAttribute('title', start.toString());\n if (this.numberOfDecimals(this.max) === 0 && this.numberOfDecimals(this.min) === 0 &&\n this.numberOfDecimals(this.step) === 0) {\n if (orien === 'h') {\n islargeTick = ((start - parseFloat(this.min.toString())) % this.ticks.largeStep === 0) ? true : false;\n }\n else {\n islargeTick = (Math.abs(start - parseFloat(this.max.toString())) % this.ticks.largeStep === 0) ? true : false;\n }\n }\n else {\n var largestep = this.fractionalToInteger(this.ticks.largeStep);\n var startValue = this.fractionalToInteger(start);\n islargeTick = ((startValue - min) % largestep === 0) ? true : false;\n }\n }\n if (islargeTick) {\n li.classList.add(classNames.large);\n }\n (orien === 'h') ? (li.style.width = tickWidth + '%') : (li.style.height = tickWidth + '%');\n var repeat = islargeTick ? (this.ticks.placement === 'Both' ? 2 : 1) : 0;\n if (islargeTick) {\n for (var j = 0; j < repeat; j++) {\n this.createTick(li, start);\n }\n }\n else if (isNullOrUndefined(this.customValues)) {\n this.formatTicksValue(li, start);\n }\n this.ul.appendChild(li);\n this.tickElementCollection.push(li);\n var decimalPoints = void 0;\n if (isNullOrUndefined(this.customValues)) {\n if (this.numberOfDecimals(smallStep) > this.numberOfDecimals(start)) {\n decimalPoints = this.numberOfDecimals(smallStep);\n }\n else {\n decimalPoints = this.numberOfDecimals(start);\n }\n if (orien === 'h') {\n start = this.makeRoundNumber(start + smallStep, decimalPoints);\n }\n else {\n start = this.makeRoundNumber(start - smallStep, decimalPoints);\n }\n left = this.makeRoundNumber(left + smallStep, decimalPoints);\n }\n }\n this.tickesAlignment(orien, tickWidth);\n };\n Slider.prototype.tickesAlignment = function (orien, tickWidth) {\n this.firstChild = this.ul.firstElementChild;\n this.lastChild = this.ul.lastElementChild;\n this.firstChild.classList.add(classNames.sliderFirstTick);\n this.lastChild.classList.add(classNames.sliderLastTick);\n this.sliderContainer.classList.add(classNames.scale + '-' + this.ticks.placement.toLowerCase());\n if (orien === 'h') {\n this.firstChild.style.width = tickWidth / 2 + '%';\n this.lastChild.style.width = tickWidth / 2 + '%';\n }\n else {\n this.firstChild.style.height = tickWidth / 2 + '%';\n this.lastChild.style.height = tickWidth / 2 + '%';\n }\n var eventArgs = { ticksWrapper: this.ul, tickElements: this.tickElementCollection };\n this.trigger('renderedTicks', eventArgs);\n this.scaleAlignment();\n };\n Slider.prototype.createTick = function (li, start) {\n var span = createElement('span', {\n className: classNames.tickValue + ' ' + classNames.tick + '-' + this.ticks.placement.toLowerCase(),\n attrs: { role: 'presentation', tabIndex: '-1', 'aria-hidden': 'true' }\n });\n li.appendChild(span);\n span.innerHTML = isNullOrUndefined(this.customValues) ? this.formatTicksValue(li, start) : start;\n };\n Slider.prototype.formatTicksValue = function (li, start) {\n var tickText = this.formatNumber(start);\n var text = !isNullOrUndefined(this.ticks) && !isNullOrUndefined(this.ticks.format) ?\n this.formatString(start, this.ticksFormatInfo).formatString : tickText;\n var eventArgs = { value: start, text: text, tickElement: li };\n this.trigger('renderingTicks', eventArgs);\n li.setAttribute('title', eventArgs.text.toString());\n return eventArgs.text.toString();\n };\n Slider.prototype.scaleAlignment = function () {\n this.tickValuePosition();\n var smallTick = 12;\n var largeTick = 20;\n var half = largeTick / 2;\n var orien = this.orientation === 'Vertical' ? 'v' : 'h';\n if (this.orientation === 'Vertical') {\n (this.element.getBoundingClientRect().width <= 15) ?\n this.sliderContainer.classList.add(classNames.sliderSmallSize) :\n this.sliderContainer.classList.remove(classNames.sliderSmallSize);\n }\n else {\n (this.element.getBoundingClientRect().height <= 15) ?\n this.sliderContainer.classList.add(classNames.sliderSmallSize) :\n this.sliderContainer.classList.remove(classNames.sliderSmallSize);\n }\n };\n Slider.prototype.tickValuePosition = function () {\n var first = this.firstChild.getBoundingClientRect();\n var firstChild;\n var smallStep = this.ticks.smallStep;\n var count = Math.abs((parseFloat(formatUnit(this.max))) - (parseFloat(formatUnit(this.min)))) / smallStep;\n if (this.firstChild.children.length > 0) {\n firstChild = this.firstChild.children[0].getBoundingClientRect();\n }\n var tickElements = [this.sliderContainer.querySelectorAll('.' + classNames.tick + '.' +\n classNames.large + ' .' + classNames.tickValue)];\n var other;\n if (this.ticks.placement === 'Both') {\n other = [].slice.call(tickElements[0], 2);\n }\n else {\n other = [].slice.call(tickElements[0], 1);\n }\n var tickWidth = this.orientation === 'Vertical' ?\n (first.height * 2) : (first.width * 2);\n for (var i = 0; i < this.firstChild.children.length; i++) {\n if (this.orientation === 'Vertical') {\n this.firstChild.children[i].style.top = -(firstChild.height / 2) + 'px';\n }\n else {\n if (!this.enableRtl) {\n this.firstChild.children[i].style.left = -(firstChild.width / 2) + 'px';\n }\n else {\n this.firstChild.children[i].style.left = (tickWidth -\n this.firstChild.children[i].getBoundingClientRect().width) / 2 + 'px';\n }\n }\n }\n for (var i = 0; i < other.length; i++) {\n var otherChild = other[i].getBoundingClientRect();\n if (this.orientation === 'Vertical') {\n setStyleAttribute(other[i], { top: (tickWidth - otherChild.height) / 2 + 'px' });\n }\n else {\n setStyleAttribute(other[i], { left: (tickWidth - otherChild.width) / 2 + 'px' });\n }\n }\n if (this.enableRtl && this.lastChild.children.length && count !== 0) {\n this.lastChild.children[0].style.left = -(this.lastChild.getBoundingClientRect().width / 2) + 'px';\n if (this.ticks.placement === 'Both') {\n this.lastChild.children[1].style.left = -(this.lastChild.getBoundingClientRect().width / 2) + 'px';\n }\n }\n if (count === 0) {\n if (this.orientation === 'Horizontal') {\n if (!this.enableRtl) {\n this.firstChild.classList.remove(classNames.sliderLastTick);\n this.firstChild.style.left = this.firstHandle.style.left;\n }\n else {\n this.firstChild.classList.remove(classNames.sliderLastTick);\n this.firstChild.style.right = this.firstHandle.style.right;\n this.firstChild.children[0].style.left =\n (this.firstChild.getBoundingClientRect().width / 2) + 2 + 'px';\n if (this.ticks.placement === 'Both') {\n this.firstChild.children[1].style.left =\n (this.firstChild.getBoundingClientRect().width / 2) + 2 + 'px';\n }\n }\n }\n if (this.orientation === 'Vertical') {\n this.firstChild.classList.remove(classNames.sliderLastTick);\n }\n }\n };\n Slider.prototype.setAriaAttrValue = function (element) {\n var ariaValueText;\n var isTickFormatted = ((!isNullOrUndefined(this.ticks) && !isNullOrUndefined(this.ticks.format))) ? true : false;\n var text = !isTickFormatted ?\n this.formatContent(this.ticksFormatInfo, false) : this.formatContent(this.tooltipFormatInfo, false);\n var valuenow = isTickFormatted ? this.formatContent(this.ticksFormatInfo, true) :\n this.formatContent(this.tooltipFormatInfo, true);\n text = (!this.customAriaText) ? (text) : (this.customAriaText);\n if (text.split(' - ').length === 2) {\n ariaValueText = text.split(' - ');\n }\n else {\n ariaValueText = [text, text];\n }\n this.setAriaAttributes(element);\n if (this.type !== 'Range') {\n attributes(element, { 'aria-valuenow': valuenow, 'aria-valuetext': text });\n }\n else {\n (!this.enableRtl) ? ((element === this.firstHandle) ?\n attributes(element, { 'aria-valuenow': valuenow.split(' - ')[0], 'aria-valuetext': ariaValueText[0] }) :\n attributes(element, { 'aria-valuenow': valuenow.split(' - ')[1], 'aria-valuetext': ariaValueText[1] })) :\n ((element === this.firstHandle) ?\n attributes(element, { 'aria-valuenow': valuenow.split(' - ')[1], 'aria-valuetext': ariaValueText[1] }) :\n attributes(element, { 'aria-valuenow': valuenow.split(' - ')[0], 'aria-valuetext': ariaValueText[0] }));\n }\n };\n Slider.prototype.handleValueUpdate = function () {\n var hVal;\n if (this.type === 'Range') {\n if (this.activeHandle === 1) {\n hVal = this.handleVal1;\n }\n else {\n hVal = this.handleVal2;\n }\n }\n else {\n hVal = this.handleVal1;\n }\n return hVal;\n };\n Slider.prototype.getLimitCorrectedValues = function (value) {\n if (this.type === 'MinRange' || this.type === 'Default') {\n value = (this.getLimitValueAndPosition(value, this.limits.minStart, this.limits.minEnd))[0];\n }\n else {\n if (this.activeHandle === 1) {\n value = (this.getLimitValueAndPosition(value, this.limits.minStart, this.limits.minEnd))[0];\n }\n else {\n value = (this.getLimitValueAndPosition(value, this.limits.maxStart, this.limits.maxEnd))[0];\n }\n }\n return value;\n };\n Slider.prototype.focusSliderElement = function () {\n if (!this.isElementFocused) {\n this.element.focus();\n this.isElementFocused = true;\n }\n };\n Slider.prototype.buttonClick = function (args) {\n this.focusSliderElement();\n var value;\n var enabledRTL = this.enableRtl && this.orientation !== 'Vertical';\n var hVal = this.handleValueUpdate();\n if ((args.keyCode === 40) || (args.keyCode === 37)\n || args.currentTarget.classList.contains(classNames.firstButton)) {\n enabledRTL ? (value = this.add(hVal, parseFloat(this.step.toString()), true)) :\n (value = this.add(hVal, parseFloat(this.step.toString()), false));\n }\n else if ((args.keyCode === 38) || (args.keyCode === 39) ||\n args.currentTarget.classList.contains(classNames.secondButton)) {\n enabledRTL ? (value = this.add(hVal, parseFloat(this.step.toString()), false)) :\n (value = this.add(hVal, parseFloat(this.step.toString()), true));\n }\n else if ((args.keyCode === 33\n || args.currentTarget.classList.contains(classNames.firstButton))) {\n enabledRTL ? (value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), false)) :\n (value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), true));\n }\n else if ((args.keyCode === 34) ||\n args.currentTarget.classList.contains(classNames.secondButton)) {\n enabledRTL ? (value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), true)) :\n (value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), false));\n }\n else if ((args.keyCode === 36)) {\n value = parseFloat(this.min.toString());\n }\n else if ((args.keyCode === 35)) {\n value = parseFloat(this.max.toString());\n }\n if (this.limits.enabled) {\n value = this.getLimitCorrectedValues(value);\n }\n this.changeHandleValue(value);\n if (this.isMaterial && !this.tooltip.isVisible &&\n !this.getHandle().classList.contains(classNames.sliderTabHandle)) {\n this.materialChange();\n }\n this.tooltipAnimation();\n this.getHandle().focus();\n if (args.currentTarget.classList.contains(classNames.firstButton)) {\n EventHandler.add(this.firstBtn, 'mouseup touchend', this.buttonUp, this);\n }\n if (args.currentTarget.classList.contains(classNames.secondButton)) {\n EventHandler.add(this.secondBtn, 'mouseup touchend', this.buttonUp, this);\n }\n };\n Slider.prototype.tooltipAnimation = function () {\n if (this.tooltip.isVisible) {\n var tooltipObj = this.activeHandle === 1 ? this.firstTooltipObj : this.secondTooltipObj;\n var tooltipElement = this.activeHandle === 1 ? this.firstTooltipElement : this.secondTooltipElement;\n if (this.isMaterial) {\n !tooltipElement.classList.contains(classNames.materialTooltipOpen) ? this.openMaterialTooltip() : this.refreshTooltip();\n }\n else {\n tooltipObj.animation = { open: { effect: 'None' }, close: { effect: 'FadeOut', duration: 500 } };\n this.openTooltip();\n }\n }\n };\n Slider.prototype.buttonUp = function (args) {\n if (this.tooltip.isVisible) {\n if (!this.isMaterial) {\n var tooltipObj = this.activeHandle === 1 ? this.firstTooltipObj : this.secondTooltipObj;\n tooltipObj.animation = { open: { effect: 'None' }, close: { effect: 'None' } };\n }\n }\n if (args.currentTarget.classList.contains(classNames.firstButton)) {\n EventHandler.remove(this.firstBtn, 'mouseup touchend', this.buttonUp);\n }\n if (args.currentTarget.classList.contains(classNames.secondButton)) {\n EventHandler.remove(this.secondBtn, 'mouseup touchend', this.buttonUp);\n }\n };\n Slider.prototype.setRangeBar = function () {\n if (this.orientation === 'Horizontal') {\n if (this.type === 'MinRange') {\n this.enableRtl ? (this.rangeBar.style.right = '0px') : (this.rangeBar.style.left = '0px');\n setStyleAttribute(this.rangeBar, { 'width': isNullOrUndefined(this.handlePos1) ? 0 : this.handlePos1 + 'px' });\n }\n else {\n this.enableRtl ? (this.rangeBar.style.right =\n this.handlePos1 + 'px') : (this.rangeBar.style.left = this.handlePos1 + 'px');\n setStyleAttribute(this.rangeBar, { 'width': this.handlePos2 - this.handlePos1 + 'px' });\n }\n }\n else {\n if (this.type === 'MinRange') {\n this.rangeBar.style.bottom = '0px';\n setStyleAttribute(this.rangeBar, { 'height': isNullOrUndefined(this.handlePos1) ? 0 : this.handlePos1 + 'px' });\n }\n else {\n this.rangeBar.style.bottom = this.handlePos1 + 'px';\n setStyleAttribute(this.rangeBar, { 'height': this.handlePos2 - this.handlePos1 + 'px' });\n }\n }\n };\n Slider.prototype.checkValidValueAndPos = function (value) {\n value = this.checkHandleValue(value);\n value = this.checkHandlePosition(value);\n return value;\n };\n Slider.prototype.setLimitBarPositions = function (fromMinPostion, fromMaxpostion, toMinPostion, toMaxpostion) {\n if (this.orientation === 'Horizontal') {\n if (!this.enableRtl) {\n this.limitBarFirst.style.left = fromMinPostion + 'px';\n this.limitBarFirst.style.width = (fromMaxpostion - fromMinPostion) + 'px';\n }\n else {\n this.limitBarFirst.style.right = fromMinPostion + 'px';\n this.limitBarFirst.style.width = (fromMaxpostion - fromMinPostion) + 'px';\n }\n }\n else {\n this.limitBarFirst.style.bottom = fromMinPostion + 'px';\n this.limitBarFirst.style.height = (fromMaxpostion - fromMinPostion) + 'px';\n }\n if (this.type === 'Range') {\n if (this.orientation === 'Horizontal') {\n if (!this.enableRtl) {\n this.limitBarSecond.style.left = toMinPostion + 'px';\n this.limitBarSecond.style.width = (toMaxpostion - toMinPostion) + 'px';\n }\n else {\n this.limitBarSecond.style.right = toMinPostion + 'px';\n this.limitBarSecond.style.width = (toMaxpostion - toMinPostion) + 'px';\n }\n }\n else {\n this.limitBarSecond.style.bottom = toMinPostion + 'px';\n this.limitBarSecond.style.height = (toMaxpostion - toMinPostion) + 'px';\n }\n }\n };\n Slider.prototype.setLimitBar = function () {\n if (this.type === 'Default' || this.type === 'MinRange') {\n var fromPosition = (this.getLimitValueAndPosition(this.limits.minStart, this.limits.minStart, this.limits.minEnd, true))[0];\n fromPosition = this.checkValidValueAndPos(fromPosition);\n var toPosition = (this.getLimitValueAndPosition(this.limits.minEnd, this.limits.minStart, this.limits.minEnd, true))[0];\n toPosition = this.checkValidValueAndPos(toPosition);\n this.setLimitBarPositions(fromPosition, toPosition);\n }\n else if (this.type === 'Range') {\n var fromMinPostion = (this.getLimitValueAndPosition(this.limits.minStart, this.limits.minStart, this.limits.minEnd, true))[0];\n fromMinPostion = this.checkValidValueAndPos(fromMinPostion);\n var fromMaxpostion = (this.getLimitValueAndPosition(this.limits.minEnd, this.limits.minStart, this.limits.minEnd, true))[0];\n fromMaxpostion = this.checkValidValueAndPos(fromMaxpostion);\n var toMinPostion = (this.getLimitValueAndPosition(this.limits.maxStart, this.limits.maxStart, this.limits.maxEnd, true))[0];\n toMinPostion = this.checkValidValueAndPos(toMinPostion);\n var toMaxpostion = (this.getLimitValueAndPosition(this.limits.maxEnd, this.limits.maxStart, this.limits.maxEnd, true))[0];\n toMaxpostion = this.checkValidValueAndPos(toMaxpostion);\n this.setLimitBarPositions(fromMinPostion, fromMaxpostion, toMinPostion, toMaxpostion);\n }\n };\n Slider.prototype.getLimitValueAndPosition = function (currentValue, minValue, maxValue, limitBar) {\n if (isNullOrUndefined(minValue)) {\n minValue = this.min;\n if (isNullOrUndefined(currentValue) && limitBar) {\n currentValue = minValue;\n }\n }\n if (isNullOrUndefined(maxValue)) {\n maxValue = this.max;\n if (isNullOrUndefined(currentValue) && limitBar) {\n currentValue = maxValue;\n }\n }\n if (currentValue < minValue) {\n currentValue = minValue;\n }\n if (currentValue > maxValue) {\n currentValue = maxValue;\n }\n return [currentValue, this.checkHandlePosition(currentValue)];\n };\n Slider.prototype.setValue = function () {\n if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n this.min = 0;\n this.max = this.customValues.length - 1;\n }\n this.setAriaAttributes(this.firstHandle);\n this.handleVal1 = isNullOrUndefined(this.value) ? this.checkHandleValue(parseFloat(this.min.toString())) :\n this.checkHandleValue(parseFloat(this.value.toString()));\n this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n this.preHandlePos1 = this.handlePos1;\n isNullOrUndefined(this.activeHandle) ? (this.type === 'Range' ? this.activeHandle = 2 : this.activeHandle = 1) :\n this.activeHandle = this.activeHandle;\n if (this.type === 'Default' || this.type === 'MinRange') {\n if (this.limits.enabled) {\n var values = this.getLimitValueAndPosition(this.handleVal1, this.limits.minStart, this.limits.minEnd);\n this.handleVal1 = values[0];\n this.handlePos1 = values[1];\n this.preHandlePos1 = this.handlePos1;\n }\n this.setHandlePosition();\n this.handleStart();\n this.value = this.handleVal1;\n this.setAriaAttrValue(this.firstHandle);\n this.changeEvent('changed');\n }\n else {\n this.validateRangeValue();\n }\n if (this.type !== 'Default') {\n this.setRangeBar();\n }\n if (this.limits.enabled) {\n this.setLimitBar();\n }\n };\n Slider.prototype.rangeValueUpdate = function () {\n if (this.value === null || typeof (this.value) !== 'object') {\n this.value = [parseFloat(formatUnit(this.min)), parseFloat(formatUnit(this.max))];\n }\n };\n Slider.prototype.validateRangeValue = function () {\n this.rangeValueUpdate();\n this.setRangeValue();\n };\n Slider.prototype.modifyZindex = function () {\n if (this.type === 'Range') {\n if (this.activeHandle === 1) {\n this.firstHandle.style.zIndex = (this.zIndex + 4) + '';\n this.secondHandle.style.zIndex = (this.zIndex + 3) + '';\n if (this.isMaterial && this.tooltip.isVisible && this.firstTooltipElement && this.secondTooltipElement) {\n this.firstTooltipElement.style.zIndex = (this.zIndex + 4) + '';\n this.secondTooltipElement.style.zIndex = (this.zIndex + 3) + '';\n }\n }\n else {\n this.firstHandle.style.zIndex = (this.zIndex + 3) + '';\n this.secondHandle.style.zIndex = (this.zIndex + 4) + '';\n if (this.isMaterial && this.tooltip.isVisible && this.firstTooltipElement && this.secondTooltipElement) {\n this.firstTooltipElement.style.zIndex = (this.zIndex + 3) + '';\n this.secondTooltipElement.style.zIndex = (this.zIndex + 4) + '';\n }\n }\n }\n else if (this.isMaterial && this.tooltip.isVisible && this.firstTooltipElement) {\n this.firstTooltipElement.style.zIndex = (this.zIndex + 4) + '';\n }\n };\n Slider.prototype.setHandlePosition = function () {\n var _this = this;\n var pos = (this.activeHandle === 1) ? this.handlePos1 : this.handlePos2;\n var val = (this.activeHandle === 1) ? this.handleVal1 : this.handleVal2;\n var handle;\n var tooltipElement;\n if (this.isMaterial && this.tooltip.isVisible) {\n tooltipElement = this.activeHandle === 1 ? this.firstTooltipElement : this.secondTooltipElement;\n handle = [this.getHandle(), (this.activeHandle === 1 ? this.firstMaterialHandle : this.secondMaterialHandle)];\n }\n else {\n handle = [this.getHandle()];\n }\n if (this.tooltip.isVisible && pos === 0 && this.type !== 'Range') {\n handle[0].classList.add(classNames.sliderHandleStart);\n if (this.isMaterial) {\n handle[1].classList.add(classNames.sliderHandleStart);\n if (tooltipElement) {\n tooltipElement.classList.add(classNames.sliderTooltipStart);\n }\n }\n }\n else {\n handle[0].classList.remove(classNames.sliderHandleStart);\n if (this.tooltip.isVisible && this.isMaterial) {\n handle[1].classList.remove(classNames.sliderHandleStart);\n if (tooltipElement) {\n tooltipElement.classList.remove(classNames.sliderTooltipStart);\n }\n }\n }\n handle.forEach(function (handle) {\n if (_this.orientation === 'Horizontal') {\n _this.enableRtl ? (handle.style.right =\n pos + \"px\") : (handle.style.left = pos + \"px\");\n }\n else {\n handle.style.bottom = pos + \"px\";\n }\n });\n this.changeEvent('change');\n };\n Slider.prototype.getHandle = function () {\n return (this.activeHandle === 1) ? this.firstHandle : this.secondHandle;\n };\n Slider.prototype.setRangeValue = function () {\n var temp = this.activeHandle;\n this.updateRangeValue();\n this.activeHandle = 1;\n this.setHandlePosition();\n this.activeHandle = 2;\n this.setHandlePosition();\n this.activeHandle = 1;\n };\n Slider.prototype.changeEvent = function (eventName) {\n var previous = eventName === 'change' ? this.previousVal : this.previousChanged;\n if (this.type !== 'Range') {\n this.setProperties({ 'value': this.handleVal1 }, true);\n if (previous !== this.value) {\n this.trigger(eventName, this.changeEventArgs(eventName));\n this.setPreviousVal(eventName, this.value);\n }\n this.setAriaAttrValue(this.firstHandle);\n }\n else {\n var value = this.value = [this.handleVal1, this.handleVal2];\n this.setProperties({ 'value': value }, true);\n if (previous.length === this.value.length\n && this.value[0] !== previous[0] || this.value[1] !== previous[1]) {\n this.trigger(eventName, this.changeEventArgs(eventName));\n this.setPreviousVal(eventName, this.value);\n }\n this.setAriaAttrValue(this.getHandle());\n }\n this.hiddenInput.value = this.value.toString();\n };\n Slider.prototype.changeEventArgs = function (eventName) {\n var eventArgs;\n if (this.tooltip.isVisible && this.firstTooltipObj) {\n this.tooltipValue();\n eventArgs = {\n value: this.value,\n previousValue: eventName === 'change' ? this.previousVal : this.previousChanged,\n action: eventName, text: this.firstTooltipObj.content\n };\n }\n else {\n eventArgs = {\n value: this.value,\n previousValue: eventName === 'change' ? this.previousVal : this.previousChanged,\n action: eventName, text: isNullOrUndefined(this.ticksFormatInfo.format) ? this.value.toString() :\n (this.type !== 'Range' ? this.formatString(this.value, this.ticksFormatInfo).formatString :\n (this.formatString(this.value[0], this.ticksFormatInfo).formatString + ' - ' +\n this.formatString(this.value[1], this.ticksFormatInfo).formatString))\n };\n }\n return eventArgs;\n };\n Slider.prototype.setPreviousVal = function (eventName, value) {\n if (eventName === 'change') {\n this.previousVal = value;\n }\n else {\n this.previousChanged = value;\n }\n };\n Slider.prototype.updateRangeValue = function () {\n var values = this.value.toString().split(',').map(Number);\n if ((this.enableRtl && this.orientation !== 'Vertical') || this.rtl) {\n this.value = [values[1], values[0]];\n }\n else {\n this.value = [values[0], values[1]];\n }\n if (this.enableRtl && this.orientation !== 'Vertical') {\n this.handleVal1 = this.checkHandleValue(this.value[1]);\n this.handleVal2 = this.checkHandleValue(this.value[0]);\n }\n else {\n this.handleVal1 = this.checkHandleValue(this.value[0]);\n this.handleVal2 = this.checkHandleValue(this.value[1]);\n }\n this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n this.handlePos2 = this.checkHandlePosition(this.handleVal2);\n if (this.handlePos1 > this.handlePos2) {\n this.handlePos1 = this.handlePos2;\n this.handleVal1 = this.handleVal2;\n }\n this.preHandlePos1 = this.handlePos1;\n this.preHandlePos2 = this.handlePos2;\n if (this.limits.enabled) {\n this.activeHandle = 1;\n var values_1 = this.getLimitValueAndPosition(this.handleVal1, this.limits.minStart, this.limits.minEnd);\n this.handleVal1 = values_1[0];\n this.handlePos1 = values_1[1];\n this.preHandlePos1 = this.handlePos1;\n this.activeHandle = 2;\n values_1 = this.getLimitValueAndPosition(this.handleVal2, this.limits.maxStart, this.limits.maxEnd);\n this.handleVal2 = values_1[0];\n this.handlePos2 = values_1[1];\n this.preHandlePos2 = this.handlePos2;\n }\n };\n Slider.prototype.checkHandlePosition = function (value) {\n var pos;\n value = (100 *\n (value - (parseFloat(formatUnit(this.min))))) / ((parseFloat(formatUnit(this.max))) - (parseFloat(formatUnit(this.min))));\n if (this.orientation === 'Horizontal') {\n pos = this.element.getBoundingClientRect().width * (value / 100);\n }\n else {\n pos = this.element.getBoundingClientRect().height * (value / 100);\n }\n if (((parseFloat(formatUnit(this.max))) === (parseFloat(formatUnit(this.min))))) {\n if (this.orientation === 'Horizontal') {\n pos = this.element.getBoundingClientRect().width;\n }\n else {\n pos = this.element.getBoundingClientRect().height;\n }\n }\n return pos;\n };\n Slider.prototype.checkHandleValue = function (value) {\n if (this.min > this.max) {\n this.min = this.max;\n }\n if (this.min === this.max) {\n return (parseFloat(formatUnit(this.max)));\n }\n var handle = this.tempStartEnd();\n if (value < handle.start) {\n value = handle.start;\n }\n else if (value > handle.end) {\n value = handle.end;\n }\n return value;\n };\n Slider.prototype.onResize = function () {\n var _this = this;\n this.firstHandle.style.transition = 'none';\n if (this.type !== 'Default') {\n this.rangeBar.style.transition = 'none';\n }\n if (this.type === 'Range') {\n this.secondHandle.style.transition = 'none';\n }\n this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n if (this.handleVal2) {\n this.handlePos2 = this.checkHandlePosition(this.handleVal2);\n }\n if (this.orientation === 'Horizontal') {\n this.enableRtl ? this.firstHandle.style.right =\n this.handlePos1 + \"px\" : this.firstHandle.style.left = this.handlePos1 + \"px\";\n if (this.isMaterial && this.tooltip.isVisible && this.firstMaterialHandle) {\n this.enableRtl ? this.firstMaterialHandle.style.right =\n this.handlePos1 + \"px\" : this.firstMaterialHandle.style.left = this.handlePos1 + \"px\";\n }\n if (this.type === 'MinRange') {\n this.enableRtl ? (this.rangeBar.style.right = '0px') : (this.rangeBar.style.left = '0px');\n setStyleAttribute(this.rangeBar, { 'width': isNullOrUndefined(this.handlePos1) ? 0 : this.handlePos1 + 'px' });\n }\n else if (this.type === 'Range') {\n this.enableRtl ? this.secondHandle.style.right =\n this.handlePos2 + \"px\" : this.secondHandle.style.left = this.handlePos2 + \"px\";\n if (this.isMaterial && this.tooltip.isVisible && this.secondMaterialHandle) {\n this.enableRtl ? this.secondMaterialHandle.style.right =\n this.handlePos2 + \"px\" : this.secondMaterialHandle.style.left = this.handlePos2 + \"px\";\n }\n this.enableRtl ? (this.rangeBar.style.right =\n this.handlePos1 + 'px') : (this.rangeBar.style.left = this.handlePos1 + 'px');\n setStyleAttribute(this.rangeBar, { 'width': this.handlePos2 - this.handlePos1 + 'px' });\n }\n }\n else {\n this.firstHandle.style.bottom = this.handlePos1 + \"px\";\n if (this.isMaterial && this.tooltip.isVisible && this.firstMaterialHandle) {\n this.firstMaterialHandle.style.bottom = this.handlePos1 + \"px\";\n }\n if (this.type === 'MinRange') {\n this.rangeBar.style.bottom = '0px';\n setStyleAttribute(this.rangeBar, { 'height': isNullOrUndefined(this.handlePos1) ? 0 : this.handlePos1 + 'px' });\n }\n else if (this.type === 'Range') {\n this.secondHandle.style.bottom = this.handlePos2 + \"px\";\n if (this.isMaterial && this.tooltip.isVisible && this.secondMaterialHandle) {\n this.secondMaterialHandle.style.bottom = this.handlePos2 + \"px\";\n }\n this.rangeBar.style.bottom = this.handlePos1 + 'px';\n setStyleAttribute(this.rangeBar, { 'height': this.handlePos2 - this.handlePos1 + 'px' });\n }\n }\n if (this.limits.enabled) {\n this.setLimitBar();\n }\n if (this.ticks.placement !== 'None' && this.ul) {\n this.removeElement(this.ul);\n this.renderScale();\n }\n if (!this.tooltip.isVisible) {\n setTimeout(function () {\n _this.firstHandle.style.transition = _this.scaleTransform;\n if (_this.type === 'Range') {\n _this.secondHandle.style.transition = _this.scaleTransform;\n }\n });\n }\n this.refreshTooltip();\n };\n Slider.prototype.changeHandleValue = function (value) {\n var position = null;\n if (this.activeHandle === 1) {\n if (!(this.limits.enabled && this.limits.startHandleFixed)) {\n this.handleVal1 = this.checkHandleValue(value);\n this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n if (this.type === 'Range' && this.handlePos1 > this.handlePos2) {\n this.handlePos1 = this.handlePos2;\n this.handleVal1 = this.handleVal2;\n }\n if (this.handlePos1 !== this.preHandlePos1) {\n position = this.preHandlePos1 = this.handlePos1;\n }\n }\n this.modifyZindex();\n }\n else {\n if (!(this.limits.enabled && this.limits.endHandleFixed)) {\n this.handleVal2 = this.checkHandleValue(value);\n this.handlePos2 = this.checkHandlePosition(this.handleVal2);\n if (this.type === 'Range' && this.handlePos2 < this.handlePos1) {\n this.handlePos2 = this.handlePos1;\n this.handleVal2 = this.handleVal1;\n }\n if (this.handlePos2 !== this.preHandlePos2) {\n position = this.preHandlePos2 = this.handlePos2;\n }\n }\n this.modifyZindex();\n }\n if (position !== null) {\n if (this.type !== 'Default') {\n this.setRangeBar();\n }\n this.setHandlePosition();\n }\n };\n Slider.prototype.tempStartEnd = function () {\n if (this.min > this.max) {\n return {\n start: this.max,\n end: this.min\n };\n }\n else {\n return {\n start: this.min,\n end: this.max\n };\n }\n };\n Slider.prototype.xyToPosition = function (position) {\n var pos;\n if (this.min === this.max) {\n return 100;\n }\n if (this.orientation === 'Horizontal') {\n var left = position.x - this.element.getBoundingClientRect().left;\n var num = this.element.offsetWidth / 100;\n this.val = (left / num);\n }\n else {\n var top_1 = position.y - this.element.getBoundingClientRect().top;\n var num = this.element.offsetHeight / 100;\n this.val = 100 - (top_1 / num);\n }\n var val = this.stepValueCalculation(this.val);\n if (val < 0) {\n val = 0;\n }\n else if (val > 100) {\n val = 100;\n }\n if (this.enableRtl && this.orientation !== 'Vertical') {\n val = 100 - val;\n }\n if (this.orientation === 'Horizontal') {\n pos = this.element.getBoundingClientRect().width * (val / 100);\n }\n else {\n pos = this.element.getBoundingClientRect().height * (val / 100);\n }\n return pos;\n };\n Slider.prototype.stepValueCalculation = function (value) {\n if (this.step === 0) {\n this.step = 1;\n }\n var percentStep = (parseFloat(formatUnit(this.step))) / ((parseFloat(formatUnit(this.max)) - parseFloat(formatUnit(this.min))) / 100);\n var remain = value % Math.abs(percentStep);\n if (remain !== 0) {\n if ((percentStep / 2) > remain) {\n value -= remain;\n }\n else {\n value += Math.abs(percentStep) - remain;\n }\n }\n return value;\n };\n Slider.prototype.add = function (a, b, addition) {\n var precision;\n var x = Math.pow(10, precision || 3);\n var val;\n if (addition) {\n val = (Math.round(a * x) + Math.round(b * x)) / x;\n }\n else {\n val = (Math.round(a * x) - Math.round(b * x)) / x;\n }\n return val;\n };\n Slider.prototype.round = function (a) {\n var f = this.step.toString().split('.');\n return f[1] ? parseFloat(a.toFixed(f[1].length)) : Math.round(a);\n };\n Slider.prototype.positionToValue = function (pos) {\n var val;\n var diff = parseFloat(formatUnit(this.max)) - parseFloat(formatUnit(this.min));\n if (this.orientation === 'Horizontal') {\n val = (pos / this.element.getBoundingClientRect().width) * diff;\n }\n else {\n val = (pos / this.element.getBoundingClientRect().height) * diff;\n }\n var total = this.add(val, parseFloat(this.min.toString()), true);\n return (total);\n };\n Slider.prototype.sliderBarClick = function (evt) {\n evt.preventDefault();\n var pos;\n if (evt.type === 'mousedown' || evt.type === 'click') {\n pos = { x: evt.clientX, y: evt.clientY };\n }\n else if (evt.type === 'touchstart') {\n pos = { x: evt.changedTouches[0].clientX, y: evt.changedTouches[0].clientY };\n }\n var handlepos = this.xyToPosition(pos);\n var handleVal = this.positionToValue(handlepos);\n if (this.type === 'Range' && (this.handlePos2 - handlepos) < (handlepos - this.handlePos1)) {\n this.activeHandle = 2;\n if (!(this.limits.enabled && this.limits.endHandleFixed)) {\n if (this.limits.enabled) {\n var value = this.getLimitValueAndPosition(handleVal, this.limits.maxStart, this.limits.maxEnd);\n handleVal = value[0];\n handlepos = value[1];\n }\n this.secondHandle.classList.add(classNames.sliderActiveHandle);\n this.handlePos2 = this.preHandlePos2 = handlepos;\n this.handleVal2 = handleVal;\n }\n this.modifyZindex();\n this.secondHandle.focus();\n }\n else {\n this.activeHandle = 1;\n if (!(this.limits.enabled && this.limits.startHandleFixed)) {\n if (this.limits.enabled) {\n var value = this.getLimitValueAndPosition(handleVal, this.limits.minStart, this.limits.minEnd);\n handleVal = value[0];\n handlepos = value[1];\n }\n this.firstHandle.classList.add(classNames.sliderActiveHandle);\n this.handlePos1 = this.preHandlePos1 = handlepos;\n this.handleVal1 = handleVal;\n }\n this.modifyZindex();\n this.firstHandle.focus();\n }\n if (this.isMaterial && this.tooltip.isVisible) {\n var tooltipElement = this.activeHandle === 1 ? this.firstTooltipElement : this.secondTooltipElement;\n tooltipElement.classList.add(classNames.materialTooltipActive);\n }\n var focusedElement = this.element.querySelector('.' + classNames.sliderTabHandle);\n if (focusedElement && this.getHandle() !== focusedElement) {\n focusedElement.classList.remove(classNames.sliderTabHandle);\n }\n var handle = this.activeHandle === 1 ? this.firstHandle : this.secondHandle;\n if (evt.target === handle) {\n if (this.isMaterial && !this.tooltip.isVisible &&\n !this.getHandle().classList.contains(classNames.sliderTabHandle)) {\n this.materialChange();\n }\n this.tooltipAnimation();\n return;\n }\n if (!this.checkRepeatedValue(handleVal)) {\n return;\n }\n var transition = this.isMaterial && this.tooltip.isVisible ?\n this.transitionOnMaterialTooltip : this.transition;\n this.getHandle().style.transition = transition.handle;\n if (this.type !== 'Default') {\n this.rangeBar.style.transition = transition.rangeBar;\n }\n this.setHandlePosition();\n if (this.type !== 'Default') {\n this.setRangeBar();\n }\n };\n Slider.prototype.refreshTooltipOnMove = function () {\n if (this.tooltip.isVisible) {\n this.tooltipValue();\n this.activeHandle === 1 ? this.firstTooltipObj.refresh(this.firstHandle) :\n this.secondTooltipObj.refresh(this.secondHandle);\n }\n };\n Slider.prototype.sliderDown = function (event) {\n event.preventDefault();\n this.focusSliderElement();\n if (this.type === 'Range' && this.drag && event.target === this.rangeBar) {\n var xPostion = void 0;\n var yPostion = void 0;\n if (event.type === 'mousedown') {\n _a = [event.clientX, event.clientY], xPostion = _a[0], yPostion = _a[1];\n }\n else if (event.type === 'touchstart') {\n _b = [event.changedTouches[0].clientX, event.changedTouches[0].clientY], xPostion = _b[0], yPostion = _b[1];\n }\n if (this.orientation === 'Horizontal') {\n this.firstPartRemain = xPostion - this.rangeBar.getBoundingClientRect().left;\n this.secondPartRemain = this.rangeBar.getBoundingClientRect().right - xPostion;\n }\n else {\n this.firstPartRemain = yPostion - this.rangeBar.getBoundingClientRect().top;\n this.secondPartRemain = this.rangeBar.getBoundingClientRect().bottom - yPostion;\n }\n this.minDiff = this.handleVal2 - this.handleVal1;\n this.getHandle().focus();\n EventHandler.add(document, 'mousemove touchmove', this.dragRangeBarMove, this);\n EventHandler.add(document, 'mouseup touchend', this.dragRangeBarUp, this);\n }\n else {\n this.sliderBarClick(event);\n EventHandler.add(document, 'mousemove touchmove', this.sliderBarMove, this);\n EventHandler.add(document, 'mouseup touchend', this.sliderBarUp, this);\n }\n var _a, _b;\n };\n Slider.prototype.handleValueAdjust = function (handleValue, assignValue, handleNumber) {\n if (handleNumber === 1) {\n this.handleVal1 = assignValue;\n this.handleVal2 = this.handleVal1 + this.minDiff;\n }\n else if (handleNumber === 2) {\n this.handleVal2 = assignValue;\n this.handleVal1 = this.handleVal2 - this.minDiff;\n }\n this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n this.handlePos2 = this.checkHandlePosition(this.handleVal2);\n };\n Slider.prototype.dragRangeBarMove = function (event) {\n if (event.type !== 'touchmove') {\n event.preventDefault();\n }\n var pos;\n this.rangeBar.style.transition = 'none';\n this.firstHandle.style.transition = 'none';\n this.secondHandle.style.transition = 'none';\n var xPostion;\n var yPostion;\n if (event.type === 'mousemove') {\n _a = [event.clientX, event.clientY], xPostion = _a[0], yPostion = _a[1];\n }\n else {\n _b = [event.changedTouches[0].clientX, event.changedTouches[0].clientY], xPostion = _b[0], yPostion = _b[1];\n }\n if (!(this.limits.enabled && this.limits.startHandleFixed) && !(this.limits.enabled && this.limits.endHandleFixed)) {\n if (!this.enableRtl) {\n pos = { x: xPostion - this.firstPartRemain, y: yPostion + this.secondPartRemain };\n }\n else {\n pos = { x: xPostion + this.secondPartRemain, y: yPostion + this.secondPartRemain };\n }\n this.handlePos1 = this.xyToPosition(pos);\n this.handleVal1 = this.positionToValue(this.handlePos1);\n if (!this.enableRtl) {\n pos = { x: xPostion + this.secondPartRemain, y: yPostion - this.firstPartRemain };\n }\n else {\n pos = { x: xPostion - this.firstPartRemain, y: yPostion - this.firstPartRemain };\n }\n this.handlePos2 = this.xyToPosition(pos);\n this.handleVal2 = this.positionToValue(this.handlePos2);\n if (this.limits.enabled) {\n var value = this.getLimitValueAndPosition(this.handleVal1, this.limits.minStart, this.limits.minEnd);\n this.handleVal1 = value[0];\n this.handlePos1 = value[1];\n if (this.handleVal1 === this.limits.minEnd) {\n this.handleValueAdjust(this.handleVal1, this.limits.minEnd, 1);\n }\n if (this.handleVal1 === this.limits.minStart) {\n this.handleValueAdjust(this.handleVal1, this.limits.minStart, 1);\n }\n value = this.getLimitValueAndPosition(this.handleVal2, this.limits.maxStart, this.limits.maxEnd);\n this.handleVal2 = value[0];\n this.handlePos2 = value[1];\n if (this.handleVal2 === this.limits.maxStart) {\n this.handleValueAdjust(this.handleVal2, this.limits.maxStart, 2);\n }\n if (this.handleVal2 === this.limits.maxEnd) {\n this.handleValueAdjust(this.handleVal2, this.limits.maxEnd, 2);\n }\n }\n if (this.handleVal2 === this.max) {\n this.handleValueAdjust(this.handleVal2, this.max, 2);\n }\n if (this.handleVal1 === this.min) {\n this.handleValueAdjust(this.handleVal1, this.min, 1);\n }\n }\n this.activeHandle = 1;\n this.setHandlePosition();\n if (this.tooltip.isVisible) {\n if (this.isMaterial) {\n !this.firstTooltipElement.classList.contains(classNames.materialTooltipOpen) ? this.openMaterialTooltip() :\n this.refreshTooltipOnMove();\n }\n else {\n !this.firstTooltipElement ? this.openTooltip() : this.refreshTooltipOnMove();\n }\n }\n this.activeHandle = 2;\n this.setHandlePosition();\n if (this.tooltip.isVisible) {\n if (this.isMaterial) {\n !this.secondTooltipElement.classList.contains(classNames.materialTooltipOpen) ? this.openMaterialTooltip() :\n this.refreshTooltipOnMove();\n }\n else {\n !this.secondTooltipElement ? this.openTooltip() : this.refreshTooltipOnMove();\n }\n }\n this.setRangeBar();\n var _a, _b;\n };\n Slider.prototype.sliderBarUp = function () {\n this.changeEvent('changed');\n this.handleFocusOut();\n this.firstHandle.classList.remove(classNames.sliderActiveHandle);\n if (this.type === 'Range') {\n this.secondHandle.classList.remove(classNames.sliderActiveHandle);\n }\n if (this.tooltip.isVisible) {\n if (this.tooltip.showOn !== 'Always') {\n this.closeTooltip();\n }\n if (!this.isMaterial) {\n var tooltipObj = this.activeHandle === 1 ? this.firstTooltipObj : this.secondTooltipObj;\n tooltipObj.animation = { open: { effect: 'None' }, close: { effect: 'None' } };\n }\n }\n if (this.isMaterial) {\n this.getHandle().classList.remove('e-large-thumb-size');\n if (this.tooltip.isVisible) {\n var tooltipElement = this.activeHandle === 1 ? this.firstTooltipElement : this.secondTooltipElement;\n tooltipElement.classList.remove(classNames.materialTooltipActive);\n }\n }\n EventHandler.remove(document, 'mousemove touchmove', this.sliderBarMove);\n EventHandler.remove(document, 'mouseup touchend', this.sliderBarUp);\n };\n Slider.prototype.sliderBarMove = function (evt) {\n if (evt.type !== 'touchmove') {\n evt.preventDefault();\n }\n var pos;\n if (evt.type === 'mousemove') {\n pos = { x: evt.clientX, y: evt.clientY };\n }\n else {\n pos = { x: evt.changedTouches[0].clientX, y: evt.changedTouches[0].clientY };\n }\n var handlepos = this.xyToPosition(pos);\n var handleVal = this.positionToValue(handlepos);\n handlepos = Math.round(handlepos);\n if (this.type !== 'Range' && this.activeHandle === 1) {\n if (!(this.limits.enabled && this.limits.startHandleFixed)) {\n if (this.limits.enabled) {\n var valueAndPostion = this.getLimitValueAndPosition(handleVal, this.limits.minStart, this.limits.minEnd);\n handlepos = valueAndPostion[1];\n handleVal = valueAndPostion[0];\n }\n this.handlePos1 = handlepos;\n this.handleVal1 = handleVal;\n }\n this.firstHandle.classList.add(classNames.sliderActiveHandle);\n }\n if (this.type === 'Range') {\n if (this.activeHandle === 1) {\n this.firstHandle.classList.add(classNames.sliderActiveHandle);\n if (!(this.limits.enabled && this.limits.startHandleFixed)) {\n if (handlepos > this.handlePos2) {\n handlepos = this.handlePos2;\n handleVal = this.handleVal2;\n }\n if (handlepos !== this.preHandlePos1) {\n if (this.limits.enabled) {\n var value = this.getLimitValueAndPosition(handleVal, this.limits.minStart, this.limits.minEnd);\n handleVal = value[0];\n handlepos = value[1];\n }\n this.handlePos1 = this.preHandlePos1 = handlepos;\n this.handleVal1 = handleVal;\n this.activeHandle = 1;\n }\n }\n }\n else if (this.activeHandle === 2) {\n this.secondHandle.classList.add(classNames.sliderActiveHandle);\n if (!(this.limits.enabled && this.limits.endHandleFixed)) {\n if (handlepos < this.handlePos1) {\n handlepos = this.handlePos1;\n handleVal = this.handleVal1;\n }\n if (handlepos !== this.preHandlePos2) {\n if (this.limits.enabled) {\n var value = this.getLimitValueAndPosition(handleVal, this.limits.maxStart, this.limits.maxEnd);\n handleVal = value[0];\n handlepos = value[1];\n }\n this.handlePos2 = this.preHandlePos2 = handlepos;\n this.handleVal2 = handleVal;\n this.activeHandle = 2;\n }\n }\n }\n }\n if (!this.checkRepeatedValue(handleVal)) {\n return;\n }\n this.getHandle().style.transition = this.scaleTransform;\n if (this.type !== 'Default') {\n this.rangeBar.style.transition = 'none';\n }\n this.setHandlePosition();\n if (this.isMaterial && !this.tooltip.isVisible &&\n !this.getHandle().classList.contains(classNames.sliderTabHandle)) {\n this.materialChange();\n }\n var tooltipElement = this.activeHandle === 1 ? this.firstTooltipElement : this.secondTooltipElement;\n if (this.tooltip.isVisible) {\n if (this.isMaterial) {\n !tooltipElement.classList.contains(classNames.materialTooltipOpen) ? this.openMaterialTooltip() :\n this.refreshTooltipOnMove();\n }\n else {\n !tooltipElement ? this.openTooltip() : this.refreshTooltipOnMove();\n }\n }\n if (this.type !== 'Default') {\n this.setRangeBar();\n }\n };\n Slider.prototype.dragRangeBarUp = function (event) {\n this.changeEvent('changed');\n if (this.tooltip.isVisible) {\n if (this.tooltip.showOn !== 'Always' && !this.isMaterial) {\n this.activeHandle = 1;\n this.firstTooltipObj.animation = { open: { effect: 'None' }, close: { effect: 'FadeOut', duration: 500 } };\n this.closeTooltip();\n this.activeHandle = 2;\n this.secondTooltipObj.animation = { open: { effect: 'None' }, close: { effect: 'FadeOut', duration: 500 } };\n this.closeTooltip();\n }\n }\n EventHandler.remove(document, 'mousemove touchmove', this.dragRangeBarMove);\n EventHandler.remove(document, 'mouseup touchend', this.dragRangeBarUp);\n };\n Slider.prototype.checkRepeatedValue = function (currentValue) {\n if (this.type === 'Range') {\n var previousVal = this.enableRtl && this.orientation !== 'Vertical' ? (this.activeHandle === 1 ?\n this.previousVal[1] : this.previousVal[0]) :\n (this.activeHandle === 1 ? this.previousVal[0] : this.previousVal[1]);\n if (currentValue === previousVal) {\n return 0;\n }\n }\n else {\n if (currentValue === this.previousVal) {\n return 0;\n }\n }\n return 1;\n };\n Slider.prototype.refreshTooltip = function () {\n if (this.tooltip.isVisible && this.firstTooltipObj) {\n this.tooltipValue();\n this.firstTooltipObj.refresh(this.firstHandle);\n if (this.type === 'Range') {\n this.secondTooltipObj.refresh(this.secondHandle);\n }\n }\n };\n Slider.prototype.openTooltip = function () {\n if (this.tooltip.isVisible && this.firstTooltipObj) {\n this.tooltipValue();\n if (this.isMaterial) {\n this.openMaterialTooltip();\n }\n else {\n if (this.activeHandle === 1) {\n this.firstTooltipObj.open(this.firstHandle);\n }\n else {\n this.secondTooltipObj.open(this.secondHandle);\n }\n }\n }\n };\n Slider.prototype.keyDown = function (event) {\n switch (event.keyCode) {\n case 37:\n case 38:\n case 39:\n case 40:\n case 33:\n case 34:\n case 36:\n case 35:\n event.preventDefault();\n this.buttonClick(event);\n if (this.tooltip.isVisible && this.tooltip.showOn !== 'Always' && !this.isMaterial) {\n this.closeTooltip();\n }\n break;\n }\n };\n Slider.prototype.wireButtonEvt = function (destroy) {\n if (!destroy) {\n EventHandler.add(this.firstBtn, 'mouseleave touchleave', this.buttonFocusOut, this);\n EventHandler.add(this.secondBtn, 'mouseleave touchleave', this.buttonFocusOut, this);\n EventHandler.add(this.firstBtn, 'mousedown touchstart', this.repeatHandlerMouse, this);\n EventHandler.add(this.firstBtn, 'mouseup mouseleave touchup touchend', this.repeatHandlerUp, this);\n EventHandler.add(this.secondBtn, 'mousedown touchstart', this.repeatHandlerMouse, this);\n EventHandler.add(this.secondBtn, 'mouseup mouseleave touchup touchend', this.repeatHandlerUp, this);\n EventHandler.add(this.firstBtn, 'focusout', this.sliderFocusOut, this);\n EventHandler.add(this.secondBtn, 'focusout', this.sliderFocusOut, this);\n }\n else {\n EventHandler.remove(this.firstBtn, 'mouseleave touchleave', this.buttonFocusOut);\n EventHandler.remove(this.secondBtn, 'mouseleave touchleave', this.buttonFocusOut);\n EventHandler.remove(this.firstBtn, 'mousedown touchstart', this.repeatHandlerMouse);\n EventHandler.remove(this.firstBtn, 'mouseup mouseleave touchup touchend', this.repeatHandlerUp);\n EventHandler.remove(this.secondBtn, 'mousedown touchstart', this.repeatHandlerMouse);\n EventHandler.remove(this.secondBtn, 'mouseup mouseleave touchup touchend', this.repeatHandlerUp);\n EventHandler.remove(this.firstBtn, 'focusout', this.sliderFocusOut);\n EventHandler.remove(this.secondBtn, 'focusout', this.sliderFocusOut);\n }\n };\n Slider.prototype.wireEvents = function () {\n this.onresize = this.onResize.bind(this);\n window.addEventListener('resize', this.onresize);\n if (this.enabled && !this.readonly) {\n EventHandler.add(this.element, 'mousedown touchstart', this.sliderDown, this);\n EventHandler.add(this.sliderContainer, 'keydown', this.keyDown, this);\n EventHandler.add(this.sliderContainer, 'keyup', this.keyUp, this);\n EventHandler.add(this.element, 'focusout', this.sliderFocusOut, this);\n EventHandler.add(this.sliderContainer, 'mouseover mouseout touchstart touchend', this.hover, this);\n this.wireFirstHandleEvt(false);\n if (this.type === 'Range') {\n this.wireSecondHandleEvt(false);\n }\n if (this.showButtons) {\n this.wireButtonEvt(false);\n }\n this.wireMaterialTooltipEvent(false);\n }\n };\n Slider.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, 'mousedown touchstart', this.sliderDown);\n EventHandler.remove(this.sliderContainer, 'keydown', this.keyDown);\n EventHandler.remove(this.sliderContainer, 'keyup', this.keyUp);\n EventHandler.remove(this.element, 'focusout', this.sliderFocusOut);\n EventHandler.remove(this.sliderContainer, 'mouseover mouseout touchstart touchend', this.hover);\n this.wireFirstHandleEvt(true);\n if (this.type === 'Range') {\n this.wireSecondHandleEvt(true);\n }\n if (this.showButtons) {\n this.wireButtonEvt(true);\n }\n this.wireMaterialTooltipEvent(true);\n };\n Slider.prototype.keyUp = function (event) {\n if (event.keyCode === 9 && event.target.classList.contains(classNames.sliderHandle)) {\n this.focusSliderElement();\n if (!event.target.classList.contains(classNames.sliderTabHandle)) {\n if (this.element.querySelector('.' + classNames.sliderTabHandle)) {\n this.element.querySelector('.' + classNames.sliderTabHandle).classList.remove(classNames.sliderTabHandle);\n }\n event.target.classList.add(classNames.sliderTabHandle);\n var parentElement = event.target.parentElement;\n if (parentElement === this.element) {\n parentElement.querySelector('.' + classNames.sliderTrack).classList.add(classNames.sliderTabTrack);\n if (this.type === 'Range' || this.type === 'MinRange') {\n parentElement.querySelector('.' + classNames.rangeBar).classList.add(classNames.sliderTabRange);\n }\n }\n if (this.type === 'Range') {\n (event.target.previousSibling).classList.contains(classNames.sliderHandle) ?\n this.activeHandle = 2 : this.activeHandle = 1;\n }\n this.getHandle().focus();\n this.tooltipAnimation();\n if (this.tooltip.isVisible && this.tooltip.showOn !== 'Always' && !this.isMaterial) {\n this.closeTooltip();\n }\n }\n }\n this.changeEvent('changed');\n };\n Slider.prototype.hover = function (event) {\n if (!isNullOrUndefined(event)) {\n if (event.type === 'mouseover' || event.type === 'touchmove' || event.type === 'mousemove' ||\n event.type === 'pointermove' || event.type === 'touchstart') {\n this.sliderContainer.classList.add(classNames.sliderHover);\n }\n else {\n this.sliderContainer.classList.remove(classNames.sliderHover);\n }\n }\n };\n Slider.prototype.sliderFocusOut = function (event) {\n var _this = this;\n if (event.relatedTarget !== this.secondHandle && event.relatedTarget !== this.firstHandle &&\n event.relatedTarget !== this.element && event.relatedTarget !== this.firstBtn && event.relatedTarget !== this.secondBtn) {\n if (this.isMaterial && this.tooltip.isVisible) {\n var transformProperties_1 = this.getTooltipTransformProperties(this.previousTooltipClass);\n var tooltipElement = this.type !== 'Range' ? [this.firstTooltipElement] :\n [this.firstTooltipElement, this.secondTooltipElement];\n var hiddenHandle_1 = this.type !== 'Range' ? [this.firstHandle] : [this.firstHandle, this.secondHandle];\n var handle_1 = this.type !== 'Range' ? [this.firstMaterialHandle] :\n [this.firstMaterialHandle, this.secondMaterialHandle];\n tooltipElement.forEach(function (tooltipElement, index) {\n if (tooltipElement) {\n tooltipElement.style.transition = _this.scaleTransform;\n tooltipElement.firstChild.classList.remove(classNames.materialTooltipShow);\n tooltipElement.firstChild.classList.add(classNames.materialTooltipHide);\n hiddenHandle_1[index].style.cursor = '-webkit-grab';\n hiddenHandle_1[index].style.cursor = 'grab';\n handle_1[index].style.transform = 'scale(1)';\n tooltipElement.classList.remove(classNames.materialTooltipOpen);\n if (tooltipElement.firstElementChild.innerText.length > 4) {\n tooltipElement.style.transform = transformProperties_1.translate + ' ' + 'scale(0.01)';\n }\n else {\n tooltipElement.style.transform = transformProperties_1.translate + ' ' +\n transformProperties_1.rotate + ' ' + 'scale(0.01)';\n }\n setTimeout(function () { tooltipElement.style.transition = 'none'; }, 2500);\n }\n });\n }\n if (this.element.querySelector('.' + classNames.sliderTabHandle)) {\n this.element.querySelector('.' + classNames.sliderTabHandle).classList.remove(classNames.sliderTabHandle);\n }\n if (this.element.querySelector('.' + classNames.sliderTabTrack)) {\n this.element.querySelector('.' + classNames.sliderTabTrack).classList.remove(classNames.sliderTabTrack);\n if ((this.type === 'Range' || this.type === 'MinRange') &&\n this.element.querySelector('.' + classNames.sliderTabRange)) {\n this.element.querySelector('.' + classNames.sliderTabRange).classList.remove(classNames.sliderTabRange);\n }\n }\n this.hiddenInput.focus();\n this.hiddenInput.blur();\n this.isElementFocused = false;\n }\n };\n Slider.prototype.closeTooltip = function () {\n if (this.tooltip.isVisible) {\n this.tooltipValue();\n if (this.activeHandle === 1) {\n this.firstTooltipObj.close();\n }\n else {\n this.secondTooltipObj.close();\n }\n }\n };\n Slider.prototype.removeElement = function (element) {\n if (element.parentNode) {\n element.parentNode.removeChild(element);\n }\n };\n Slider.prototype.changeSliderType = function (type) {\n if (this.isMaterial && this.firstMaterialHandle) {\n this.sliderContainer.classList.remove(classNames.materialSlider);\n this.removeElement(this.firstMaterialHandle);\n this.firstTooltipElement = undefined;\n this.firstHandleTooltipPosition = undefined;\n if (this.secondMaterialHandle) {\n this.removeElement(this.secondMaterialHandle);\n this.secondTooltipElement = undefined;\n this.secondHandleTooltipPosition = undefined;\n }\n }\n if (this.tooltip.isVisible && this.isMaterial) {\n this.sliderContainer.classList.add(classNames.materialSlider);\n }\n this.removeElement(this.firstHandle);\n if (type !== 'Default') {\n if (type === 'Range') {\n this.removeElement(this.secondHandle);\n }\n this.removeElement(this.rangeBar);\n }\n if (this.tooltip.isVisible && !isNullOrUndefined(this.firstTooltipObj)) {\n this.firstTooltipObj.destroy();\n if (type === 'Range' && !isNullOrUndefined(this.secondTooltipObj)) {\n this.secondTooltipObj.destroy();\n }\n }\n if (this.limits.enabled && type === 'MinRange' || type === 'Default') {\n if (!isNullOrUndefined(this.limitBarFirst)) {\n this.removeElement(this.limitBarFirst);\n }\n }\n if (type === 'Range') {\n if (this.limits.enabled) {\n if (!isNullOrUndefined(this.limitBarFirst) && !isNullOrUndefined(this.limitBarSecond)) {\n this.removeElement(this.limitBarFirst);\n this.removeElement(this.limitBarSecond);\n }\n }\n }\n this.createRangeBar();\n if (this.limits.enabled) {\n this.createLimitBar();\n }\n this.setHandler();\n this.setOrientClass();\n this.wireFirstHandleEvt(false);\n if (this.type === 'Range') {\n this.wireSecondHandleEvt(false);\n }\n this.setValue();\n if (this.tooltip.isVisible) {\n this.renderTooltip();\n this.wireMaterialTooltipEvent(false);\n }\n this.updateConfig();\n };\n Slider.prototype.changeRtl = function () {\n if (!this.enableRtl && this.type === 'Range') {\n this.value = [this.handleVal2, this.handleVal1];\n }\n this.updateConfig();\n if (this.tooltip.isVisible) {\n this.firstTooltipObj.refresh(this.firstHandle);\n if (this.type === 'Range') {\n this.secondTooltipObj.refresh(this.secondHandle);\n }\n }\n if (this.showButtons) {\n var enabledRTL = this.enableRtl && this.orientation !== 'Vertical';\n attributes(enabledRTL ? this.secondBtn : this.firstBtn, { 'aria-label': 'Decrease', title: 'Decrease' });\n attributes(enabledRTL ? this.firstBtn : this.secondBtn, { 'aria-label': 'Increase', title: 'Increase' });\n }\n };\n Slider.prototype.changeOrientation = function () {\n this.changeSliderType(this.type);\n };\n Slider.prototype.updateConfig = function () {\n this.setEnableRTL();\n this.setValue();\n if (this.tooltip.isVisible) {\n this.refreshTooltip();\n }\n if (this.ticks.placement !== 'None') {\n if (this.ul) {\n this.removeElement(this.ul);\n this.renderScale();\n }\n }\n this.limitsPropertyChange();\n };\n Slider.prototype.limitsPropertyChange = function () {\n if (this.limits.enabled) {\n if (isNullOrUndefined(this.limitBarFirst) && this.type !== 'Range') {\n this.createLimitBar();\n }\n if (isNullOrUndefined(this.limitBarFirst) && isNullOrUndefined(this.limitBarSecond) && this.type === 'Range') {\n this.createLimitBar();\n }\n this.setLimitBar();\n this.setValue();\n }\n else {\n if (!isNullOrUndefined(this.limitBarFirst)) {\n detach(this.limitBarFirst);\n }\n if (!isNullOrUndefined(this.limitBarSecond)) {\n detach(this.limitBarSecond);\n }\n }\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @private\n */\n Slider.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Prepares the slider for safe removal from the DOM.\n * Detaches all event handlers, attributes, and classes to avoid memory leaks.\n * @method destroy\n * @return {void}\n */\n Slider.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n this.unwireEvents();\n window.removeEventListener('resize', this.onresize);\n removeClass([this.sliderContainer], [classNames.sliderDisabled]);\n this.firstHandle.removeAttribute('aria-orientation');\n if (this.type === 'Range') {\n this.secondHandle.removeAttribute('aria-orientation');\n }\n this.sliderContainer.parentNode.insertBefore(this.element, this.sliderContainer);\n detach(this.sliderContainer);\n if (this.tooltip.isVisible) {\n this.firstTooltipObj.destroy();\n if (this.type === 'Range' && !isNullOrUndefined(this.secondTooltipObj)) {\n this.secondTooltipObj.destroy();\n }\n }\n this.element.innerHTML = '';\n };\n /**\n * Calls internally if any of the property value is changed.\n * @private\n */\n Slider.prototype.onPropertyChanged = function (newProp, oldProp) {\n var _this = this;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n this.setCSSClass(oldProp.cssClass);\n break;\n case 'value':\n if (!isNullOrUndefined(oldProp.value) && !isNullOrUndefined(newProp.value)) {\n if (oldProp.value.toString() !== newProp.value.toString()) {\n this.setValue();\n this.refreshTooltip();\n if (this.type === 'Range') {\n if (oldProp.value[0] === newProp.value[0]) {\n this.activeHandle = 2;\n }\n else {\n this.activeHandle = 1;\n }\n }\n }\n }\n break;\n case 'min':\n case 'step':\n case 'max':\n this.setMinMaxValue();\n break;\n case 'tooltip':\n if (!isNullOrUndefined(newProp.tooltip) && !isNullOrUndefined(oldProp.tooltip)) {\n this.setTooltip();\n }\n break;\n case 'type':\n this.changeSliderType(oldProp.type);\n this.setZindex();\n break;\n case 'enableRtl':\n if (oldProp.enableRtl !== newProp.enableRtl && this.orientation !== 'Vertical') {\n this.rtl = oldProp.enableRtl;\n this.changeRtl();\n }\n break;\n case 'limits':\n this.limitsPropertyChange();\n break;\n case 'orientation':\n this.changeOrientation();\n break;\n case 'ticks':\n if (!isNullOrUndefined(this.sliderContainer.querySelector('.' + classNames.scale))) {\n detach(this.ul);\n Array.prototype.forEach.call(this.sliderContainer.classList, function (className) {\n if (className.match(/e-scale-/)) {\n _this.sliderContainer.classList.remove(className);\n }\n });\n }\n if (this.ticks.placement !== 'None') {\n this.renderScale();\n this.setZindex();\n }\n break;\n case 'locale':\n if (this.showButtons) {\n this.buttonTitle();\n }\n break;\n case 'showButtons':\n if (newProp.showButtons) {\n this.setButtons();\n this.onResize();\n if (this.enabled && !this.readonly) {\n this.wireButtonEvt(false);\n }\n }\n else {\n if (this.firstBtn && this.secondBtn) {\n this.sliderContainer.removeChild(this.firstBtn);\n this.sliderContainer.removeChild(this.secondBtn);\n this.firstBtn = undefined;\n this.secondBtn = undefined;\n }\n }\n break;\n case 'enabled':\n this.setEnabled();\n break;\n case 'readonly':\n this.setReadOnly();\n break;\n case 'customValue':\n this.setValue();\n this.onResize();\n break;\n }\n }\n };\n Slider.prototype.setReadOnly = function () {\n if (this.readonly) {\n this.unwireEvents();\n this.sliderContainer.classList.add(classNames.readonly);\n }\n else {\n this.wireEvents();\n this.sliderContainer.classList.remove(classNames.readonly);\n }\n };\n Slider.prototype.setMinMaxValue = function () {\n var _this = this;\n this.setValue();\n this.refreshTooltip();\n if (!isNullOrUndefined(this.sliderContainer.querySelector('.' + classNames.scale))) {\n if (this.ul) {\n detach(this.ul);\n Array.prototype.forEach.call(this.sliderContainer.classList, function (className) {\n if (className.match(/e-scale-/)) {\n _this.sliderContainer.classList.remove(className);\n }\n });\n }\n }\n if (this.ticks.placement !== 'None') {\n this.renderScale();\n this.setZindex();\n }\n };\n Slider.prototype.setZindex = function () {\n this.zIndex = 6;\n if (!isNullOrUndefined(this.ticks) && this.ticks.placement !== 'None') {\n this.ul.style.zIndex = (this.zIndex + -7) + '';\n this.element.style.zIndex = (this.zIndex + 2) + '';\n }\n if (!this.isMaterial && !isNullOrUndefined(this.ticks) && this.ticks.placement === 'Both') {\n this.element.style.zIndex = (this.zIndex + 2) + '';\n }\n this.firstHandle.style.zIndex = (this.zIndex + 3) + '';\n if (this.type === 'Range') {\n this.secondHandle.style.zIndex = (this.zIndex + 4) + '';\n }\n };\n Slider.prototype.setTooltip = function () {\n this.changeSliderType(this.type);\n };\n /**\n * Gets the component name\n * @private\n */\n Slider.prototype.getModuleName = function () {\n return 'slider';\n };\n __decorate([\n Property(null)\n ], Slider.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], Slider.prototype, \"customValues\", void 0);\n __decorate([\n Property(1)\n ], Slider.prototype, \"step\", void 0);\n __decorate([\n Property(0)\n ], Slider.prototype, \"min\", void 0);\n __decorate([\n Property(100)\n ], Slider.prototype, \"max\", void 0);\n __decorate([\n Property(false)\n ], Slider.prototype, \"readonly\", void 0);\n __decorate([\n Property('Default')\n ], Slider.prototype, \"type\", void 0);\n __decorate([\n Complex({}, TicksData)\n ], Slider.prototype, \"ticks\", void 0);\n __decorate([\n Complex({}, LimitData)\n ], Slider.prototype, \"limits\", void 0);\n __decorate([\n Property(true)\n ], Slider.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], Slider.prototype, \"enableRtl\", void 0);\n __decorate([\n Complex({}, TooltipData)\n ], Slider.prototype, \"tooltip\", void 0);\n __decorate([\n Property(false)\n ], Slider.prototype, \"showButtons\", void 0);\n __decorate([\n Property(true)\n ], Slider.prototype, \"enableAnimation\", void 0);\n __decorate([\n Property('Horizontal')\n ], Slider.prototype, \"orientation\", void 0);\n __decorate([\n Property('')\n ], Slider.prototype, \"cssClass\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"changed\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"renderingTicks\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"renderedTicks\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"tooltipChange\", void 0);\n Slider = __decorate([\n NotifyPropertyChanges\n ], Slider);\n return Slider;\n}(Component));\nexport { Slider };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, Event, EventHandler, L10n, compile, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, createElement, detach, append, Animation } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, KeyboardEvents, setValue, getValue, ChildProperty } from '@syncfusion/ej2-base';\nimport { Collection, Complex, Browser, Ajax } from '@syncfusion/ej2-base';\nimport { createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nvar ROOT = 'e-uploader';\nvar CONTROL_WRAPPER = 'e-upload';\nvar INPUT_WRAPPER = 'e-file-select';\nvar DROP_AREA = 'e-file-drop';\nvar DROP_WRAPPER = 'e-file-select-wrap';\nvar LIST_PARENT = 'e-upload-files';\nvar FILE = 'e-upload-file-list';\nvar STATUS = 'e-file-status';\nvar ACTION_BUTTONS = 'e-upload-actions';\nvar UPLOAD_BUTTONS = 'e-file-upload-btn e-css e-btn e-flat e-primary';\nvar CLEAR_BUTTONS = 'e-file-clear-btn e-css e-btn e-flat';\nvar FILE_NAME = 'e-file-name';\nvar FILE_TYPE = 'e-file-type';\nvar FILE_SIZE = 'e-file-size';\nvar CLEAR_ICON = 'e-file-remove-btn';\nvar REMOVE_ICON = 'e-file-delete-btn';\nvar ABORT_ICON = 'e-file-abort-btn';\nvar RETRY_ICON = 'e-file-reload-btn';\nvar DRAG_HOVER = 'e-upload-drag-hover';\nvar PROGRESS_WRAPPER = 'e-upload-progress-wrap';\nvar PROGRESSBAR = 'e-upload-progress-bar';\nvar PROGRESSBAR_TEXT = 'e-progress-bar-text';\nvar UPLOAD_INPROGRESS = 'e-upload-progress';\nvar UPLOAD_SUCCESS = 'e-upload-success';\nvar UPLOAD_FAILED = 'e-upload-fails';\nvar TEXT_CONTAINER = 'e-file-container';\nvar VALIDATION_FAILS = 'e-validation-fails';\nvar RTL = 'e-rtl';\nvar DISABLED = 'e-disabled';\nvar RTL_CONTAINER = 'e-rtl-container';\nvar ICON_FOCUSED = 'e-clear-icon-focus';\nvar PROGRESS_INNER_WRAPPER = 'e-progress-inner-wrap';\nvar PAUSE_UPLOAD = 'e-file-pause-btn';\nvar RESUME_UPLOAD = 'e-file-play-btn';\nvar FilesProp = /** @class */ (function (_super) {\n __extends(FilesProp, _super);\n function FilesProp() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], FilesProp.prototype, \"name\", void 0);\n __decorate([\n Property(null)\n ], FilesProp.prototype, \"size\", void 0);\n __decorate([\n Property('')\n ], FilesProp.prototype, \"type\", void 0);\n return FilesProp;\n}(ChildProperty));\nexport { FilesProp };\nvar ButtonsProps = /** @class */ (function (_super) {\n __extends(ButtonsProps, _super);\n function ButtonsProps() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Browse...')\n ], ButtonsProps.prototype, \"browse\", void 0);\n __decorate([\n Property('Upload')\n ], ButtonsProps.prototype, \"upload\", void 0);\n __decorate([\n Property('Clear')\n ], ButtonsProps.prototype, \"clear\", void 0);\n return ButtonsProps;\n}(ChildProperty));\nexport { ButtonsProps };\nvar AsyncSettings = /** @class */ (function (_super) {\n __extends(AsyncSettings, _super);\n function AsyncSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], AsyncSettings.prototype, \"saveUrl\", void 0);\n __decorate([\n Property('')\n ], AsyncSettings.prototype, \"removeUrl\", void 0);\n __decorate([\n Property(0)\n ], AsyncSettings.prototype, \"chunkSize\", void 0);\n __decorate([\n Property(3)\n ], AsyncSettings.prototype, \"retryCount\", void 0);\n __decorate([\n Property(500)\n ], AsyncSettings.prototype, \"retryAfterDelay\", void 0);\n return AsyncSettings;\n}(ChildProperty));\nexport { AsyncSettings };\n/**\n * The uploader component allows to upload images, documents, and other files from local to server.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar Uploader = /** @class */ (function (_super) {\n __extends(Uploader, _super);\n /**\n * Triggers when change the Uploader value.\n */\n function Uploader(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.initialAttr = { accept: null, multiple: false, disabled: false };\n _this.fileList = [];\n _this.filesData = [];\n _this.uploadedFilesData = [];\n _this.isForm = false;\n _this.allTypes = false;\n _this.pausedData = [];\n _this.uploadMetaData = [];\n return _this;\n }\n /**\n * Calls internally if any of the property value is changed.\n * @private\n */\n Uploader.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'allowedExtensions':\n this.setExtensions(this.allowedExtensions);\n this.clearAll();\n break;\n case 'enabled':\n this.setControlStatus();\n break;\n case 'multiple':\n this.setMultipleSelection();\n break;\n case 'enableRtl':\n this.setRTL();\n this.reRenderFileList();\n break;\n case 'buttons':\n this.buttons.browse = isNullOrUndefined(this.buttons.browse) ? '' : this.buttons.browse;\n this.buttons.clear = isNullOrUndefined(this.buttons.clear) ? '' : this.buttons.clear;\n this.buttons.upload = isNullOrUndefined(this.buttons.upload) ? '' : this.buttons.upload;\n this.renderButtonTemplates();\n break;\n case 'dropArea':\n this.unBindDropEvents();\n this.setDropArea();\n break;\n case 'files':\n this.renderPreLoadFiles();\n break;\n case 'minFileSize':\n case 'maxFileSize':\n case 'template':\n case 'autoUpload':\n this.clearAll();\n break;\n case 'locale':\n this.l10n.setLocale(this.locale);\n this.setLocalizedTexts();\n this.preLocaleObj = getValue('currentLocale', this.l10n);\n break;\n }\n }\n };\n Uploader.prototype.setLocalizedTexts = function () {\n if (isNullOrUndefined(this.template)) {\n if (typeof (this.buttons.browse) === 'string') {\n this.browseButton.innerText = (this.buttons.browse === 'Browse...') ?\n this.localizedTexts('Browse') : this.buttons.browse;\n this.browseButton.setAttribute('title', this.browseButton.innerText);\n this.uploadWrapper.querySelector('.' + DROP_AREA).innerHTML = this.localizedTexts('dropFilesHint');\n }\n this.updateFileList();\n }\n };\n Uploader.prototype.getKeyValue = function (val) {\n var keyValue;\n for (var _i = 0, _a = Object.keys(this.preLocaleObj); _i < _a.length; _i++) {\n var key = _a[_i];\n if (this.preLocaleObj[key] === val) {\n keyValue = key;\n }\n }\n return keyValue;\n };\n Uploader.prototype.updateFileList = function () {\n var element;\n if (this.fileList.length > 0 && !isNullOrUndefined(this.uploadWrapper.querySelector('.' + LIST_PARENT))) {\n for (var i = 0; i < this.fileList.length; i++) {\n element = this.fileList[i].querySelector('.e-file-status');\n element.innerHTML = this.localizedTexts(this.getKeyValue(this.filesData[i].status));\n this.filesData[i].status = this.localizedTexts(this.getKeyValue(this.filesData[i].status));\n /* istanbul ignore next */\n if (this.fileList[i].classList.contains(UPLOAD_SUCCESS)) {\n this.fileList[i].querySelector('.e-icons').setAttribute('title', this.localizedTexts('remove'));\n }\n else {\n this.fileList[i].querySelector('.e-icons').setAttribute('title', this.localizedTexts('delete'));\n }\n if (!this.autoUpload) {\n this.uploadButton.innerText = (this.buttons.upload === 'Upload') ?\n this.localizedTexts('Upload') : this.buttons.upload;\n this.clearButton.innerText = (this.buttons.clear === 'Clear') ?\n this.localizedTexts('Clear') : this.buttons.clear;\n }\n }\n }\n };\n Uploader.prototype.reRenderFileList = function () {\n if (this.listParent) {\n detach(this.listParent);\n this.listParent = null;\n this.fileList = [];\n this.createFileList(this.filesData);\n if (this.actionButtons) {\n this.removeActionButtons();\n this.renderActionButtons();\n this.checkActionButtonStatus();\n }\n }\n };\n Uploader.prototype.preRender = function () {\n this.cloneElement = this.element.cloneNode(true);\n this.localeText = { Browse: 'Browse...', Clear: 'Clear', Upload: 'Upload',\n dropFilesHint: 'Or drop files here', invalidMaxFileSize: 'File size is too large',\n invalidMinFileSize: 'File size is too small', invalidFileType: 'File type is not allowed',\n uploadFailedMessage: 'File failed to upload', uploadSuccessMessage: 'File uploaded successfully',\n removedSuccessMessage: 'File removed successfully', removedFailedMessage: 'Unable to remove file', inProgress: 'Uploading',\n readyToUploadMessage: 'Ready to upload', abort: 'Abort', remove: 'Remove', cancel: 'Cancel', delete: 'Delete file',\n pauseUpload: 'File upload paused', pause: 'Pause', resume: 'Resume', retry: 'Retry',\n fileUploadCancel: 'File upload canceled'\n };\n this.l10n = new L10n('uploader', this.localeText, this.locale);\n this.preLocaleObj = getValue('currentLocale', this.l10n);\n this.checkHTMLAttributes();\n if (this.asyncSettings.saveUrl === '' && this.asyncSettings.removeUrl === '' && !this.autoUpload) {\n var parentEle = this.element.parentElement;\n for (; parentEle && parentEle !== document.documentElement; parentEle = parentEle.parentElement) {\n if (parentEle.tagName === 'FORM') {\n this.isForm = true;\n this.formElement = parentEle;\n parentEle.setAttribute('enctype', 'multipart/form-data');\n parentEle.setAttribute('encoding', 'multipart/form-data');\n }\n }\n }\n // tslint:disable-next-line\n var ejInstance = getValue('ej2_instances', this.element);\n /* istanbul ignore next */\n if (this.element.tagName === 'EJS-UPLOADER') {\n var inputElement = createElement('input', { attrs: { type: 'file' } });\n var index = 0;\n for (index; index < this.element.attributes.length; index++) {\n inputElement.setAttribute(this.element.attributes[index].nodeName, this.element.attributes[index].nodeValue);\n inputElement.innerHTML = this.element.innerHTML;\n }\n if (!inputElement.hasAttribute('name')) {\n inputElement.setAttribute('name', 'UploadFiles');\n }\n this.element.appendChild(inputElement);\n this.element = inputElement;\n setValue('ej2_instances', ejInstance, this.element);\n }\n /* istanbul ignore next */\n if (ejInstance[0].isPureReactComponent) {\n if (!isNullOrUndefined(ejInstance[0].props.name)) {\n this.element.setAttribute('name', ejInstance[0].props.name);\n }\n else if (!isNullOrUndefined(ejInstance[0].props.id) && isNullOrUndefined(ejInstance[0].props.name)) {\n this.element.setAttribute('name', ejInstance[0].props.id);\n }\n else {\n this.element.setAttribute('name', 'UploadFiles');\n }\n }\n if (isNullOrUndefined(this.element.getAttribute('name'))) {\n this.element.setAttribute('name', this.element.getAttribute('id'));\n }\n if (!this.element.hasAttribute('type')) {\n this.element.setAttribute('type', 'file');\n }\n this.keyConfigs = {\n previous: 'shift+tab',\n enter: 'enter',\n next: 'tab'\n };\n };\n Uploader.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * Return the module name of the component.\n */\n Uploader.prototype.getModuleName = function () {\n return 'uploader';\n };\n /**\n * To Initialize the control rendering\n * @private\n */\n Uploader.prototype.render = function () {\n this.renderBrowseButton();\n this.initializeUpload();\n this.wireEvents();\n this.setMultipleSelection();\n this.setExtensions(this.allowedExtensions);\n this.setRTL();\n this.renderPreLoadFiles();\n this.setControlStatus();\n };\n Uploader.prototype.renderBrowseButton = function () {\n this.browseButton = createElement('button', { className: 'e-css e-btn', attrs: { 'type': 'button' } });\n if (typeof (this.buttons.browse) === 'string') {\n this.browseButton.innerText = (this.buttons.browse === 'Browse...') ?\n this.localizedTexts('Browse') : this.buttons.browse;\n this.browseButton.setAttribute('title', this.browseButton.innerText);\n }\n else {\n this.browseButton.appendChild(this.buttons.browse);\n }\n this.element.setAttribute('aria-label', 'Uploader');\n };\n Uploader.prototype.renderActionButtons = function () {\n this.element.setAttribute('tabindex', '-1');\n this.actionButtons = createElement('div', { className: ACTION_BUTTONS });\n this.uploadButton = createElement('button', { className: UPLOAD_BUTTONS, attrs: { 'type': 'button', 'tabindex': '-1' } });\n this.clearButton = createElement('button', { className: CLEAR_BUTTONS, attrs: { 'type': 'button', 'tabindex': '-1' } });\n this.actionButtons.appendChild(this.clearButton);\n this.actionButtons.appendChild(this.uploadButton);\n this.renderButtonTemplates();\n this.uploadWrapper.appendChild(this.actionButtons);\n this.browseButton.blur();\n this.uploadButton.focus();\n this.wireActionButtonEvents();\n };\n Uploader.prototype.wireActionButtonEvents = function () {\n EventHandler.add(this.uploadButton, 'click', this.uploadButtonClick, this);\n EventHandler.add(this.clearButton, 'click', this.clearButtonClick, this);\n };\n Uploader.prototype.unwireActionButtonEvents = function () {\n EventHandler.remove(this.uploadButton, 'click', this.uploadButtonClick);\n EventHandler.remove(this.clearButton, 'click', this.clearButtonClick);\n };\n Uploader.prototype.removeActionButtons = function () {\n if (this.actionButtons) {\n this.unwireActionButtonEvents();\n detach(this.actionButtons);\n this.actionButtons = null;\n }\n };\n Uploader.prototype.renderButtonTemplates = function () {\n if (typeof (this.buttons.browse) === 'string') {\n this.browseButton.innerText = (this.buttons.browse === 'Browse...') ?\n this.localizedTexts('Browse') : this.buttons.browse;\n this.browseButton.setAttribute('title', this.browseButton.innerText);\n }\n else {\n this.browseButton.innerHTML = '';\n this.browseButton.appendChild(this.buttons.browse);\n }\n if (this.uploadButton) {\n var uploadText = void 0;\n uploadText = isNullOrUndefined(this.buttons.upload) ? 'Upload' : this.buttons.upload;\n this.buttons.upload = uploadText;\n if (typeof (this.buttons.upload) === 'string') {\n this.uploadButton.innerText = (this.buttons.upload === 'Upload') ?\n this.localizedTexts('Upload') : this.buttons.upload;\n this.uploadButton.setAttribute('title', this.uploadButton.innerText);\n }\n else {\n this.uploadButton.innerHTML = '';\n this.uploadButton.appendChild(this.buttons.upload);\n }\n }\n if (this.clearButton) {\n var clearText = void 0;\n clearText = isNullOrUndefined(this.buttons.clear) ? 'Clear' : this.buttons.clear;\n this.buttons.clear = clearText;\n if (typeof (this.buttons.clear) === 'string') {\n this.clearButton.innerText = (this.buttons.clear === 'Clear') ?\n this.localizedTexts('Clear') : this.buttons.clear;\n this.clearButton.setAttribute('title', this.clearButton.innerText);\n }\n else {\n this.clearButton.innerHTML = '';\n this.clearButton.appendChild(this.buttons.clear);\n }\n }\n };\n Uploader.prototype.initializeUpload = function () {\n this.element.setAttribute('tabindex', '-1');\n var inputWrapper = createElement('span', { className: INPUT_WRAPPER });\n this.element.parentElement.insertBefore(inputWrapper, this.element);\n this.dropAreaWrapper = createElement('div', { className: DROP_WRAPPER });\n this.element.parentElement.insertBefore(this.dropAreaWrapper, this.element);\n inputWrapper.appendChild(this.element);\n this.dropAreaWrapper.appendChild(this.browseButton);\n this.dropAreaWrapper.appendChild(inputWrapper);\n var fileDropArea = createElement('span', { className: DROP_AREA });\n fileDropArea.innerHTML = this.localizedTexts('dropFilesHint');\n this.dropAreaWrapper.appendChild(fileDropArea);\n this.uploadWrapper = createElement('div', { className: CONTROL_WRAPPER, attrs: { 'aria-activedescendant': 'li-focused' } });\n this.dropAreaWrapper.parentElement.insertBefore(this.uploadWrapper, this.dropAreaWrapper);\n this.uploadWrapper.appendChild(this.dropAreaWrapper);\n this.setDropArea();\n };\n Uploader.prototype.renderPreLoadFiles = function () {\n if (isNullOrUndefined(this.files[0].size) || !isNullOrUndefined(this.template)) {\n return;\n }\n var files = [].slice.call(this.files);\n var filesData = [];\n if (!this.multiple) {\n this.clearData();\n files = [files[0]];\n }\n for (var _i = 0, files_1 = files; _i < files_1.length; _i++) {\n var data = files_1[_i];\n var fileData = {\n name: data.name + '.' + data.type.split('.')[data.type.split('.').length - 1],\n rawFile: '',\n size: data.size,\n status: this.localizedTexts('uploadSuccessMessage'),\n type: data.type,\n validationMessages: { minSize: '', maxSize: '' },\n statusCode: '2'\n };\n filesData.push(fileData);\n this.filesData.push(fileData);\n }\n this.createFileList(filesData);\n if (!this.autoUpload && this.listParent && !this.actionButtons && !this.isForm && this.showFileList) {\n this.renderActionButtons();\n }\n this.checkActionButtonStatus();\n };\n Uploader.prototype.checkActionButtonStatus = function () {\n if (this.actionButtons) {\n var length_1 = this.uploadWrapper.querySelectorAll('.' + VALIDATION_FAILS).length +\n this.uploadWrapper.querySelectorAll('.e-upload-fails:not(.e-upload-progress)').length +\n this.uploadWrapper.querySelectorAll('span.' + UPLOAD_SUCCESS).length +\n this.uploadWrapper.querySelectorAll('span.' + UPLOAD_INPROGRESS).length;\n if (length_1 > 0 && length_1 === this.uploadWrapper.querySelectorAll('li').length) {\n this.uploadButton.setAttribute('disabled', 'disabled');\n }\n else {\n this.uploadButton.removeAttribute('disabled');\n }\n }\n };\n Uploader.prototype.setDropArea = function () {\n var dropTextArea = this.dropAreaWrapper.querySelector('.e-file-drop');\n if (this.dropArea) {\n this.dropZoneElement = (typeof (this.dropArea) !== 'string') ? this.dropArea :\n document.querySelector(this.dropArea);\n var element = this.element;\n var enableDropText = false;\n while (element.parentNode) {\n element = element.parentNode;\n if (element === this.dropZoneElement) {\n enableDropText = true;\n dropTextArea.textContent = this.localizedTexts('dropFilesHint');\n }\n }\n if (!enableDropText) {\n dropTextArea.textContent = '';\n }\n }\n else {\n this.dropZoneElement = this.uploadWrapper;\n dropTextArea.textContent = this.localizedTexts('dropFilesHint');\n }\n this.bindDropEvents();\n };\n Uploader.prototype.setMultipleSelection = function () {\n if (this.multiple && !this.element.hasAttribute('multiple')) {\n var newAttr = document.createAttribute('multiple');\n this.element.setAttributeNode(newAttr);\n }\n else if (!this.multiple) {\n this.element.removeAttribute('multiple');\n }\n };\n Uploader.prototype.checkAutoUpload = function (fileData) {\n if (this.autoUpload) {\n this.upload(fileData);\n this.removeActionButtons();\n }\n else if (!this.actionButtons) {\n this.renderActionButtons();\n }\n this.checkActionButtonStatus();\n };\n Uploader.prototype.wireEvents = function () {\n EventHandler.add(this.browseButton, 'click', this.browseButtonClick, this);\n EventHandler.add(this.element, 'change', this.onSelectFiles, this);\n EventHandler.add(document, 'click', this.removeFocus, this);\n this.keyboardModule = new KeyboardEvents(this.uploadWrapper, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown',\n });\n if (this.isForm) {\n EventHandler.add(this.formElement, 'reset', this.resetForm, this);\n }\n };\n Uploader.prototype.unWireEvents = function () {\n EventHandler.remove(this.browseButton, 'click', this.browseButtonClick);\n EventHandler.remove(this.element, 'change', this.onSelectFiles);\n EventHandler.remove(document, 'click', this.removeFocus);\n this.keyboardModule.destroy();\n };\n Uploader.prototype.resetForm = function () {\n this.clearAll();\n };\n Uploader.prototype.keyActionHandler = function (e) {\n var targetElement = e.target;\n switch (e.action) {\n case 'next':\n if (e.target === this.browseButton && isNullOrUndefined(this.listParent)) {\n this.browseButton.blur();\n }\n else if (e.target === this.uploadButton) {\n this.uploadButton.blur();\n }\n else {\n this.setTabFocus(e);\n e.preventDefault();\n e.stopPropagation();\n if (e.target === this.clearButton && this.uploadButton.hasAttribute('disabled')) {\n this.clearButton.blur();\n }\n }\n break;\n case 'previous':\n if (e.target === this.browseButton) {\n this.browseButton.blur();\n }\n else {\n this.setReverseFocus(e);\n e.preventDefault();\n e.stopPropagation();\n }\n break;\n case 'enter':\n if (e.target === this.clearButton) {\n this.clearButtonClick();\n }\n else if (e.target === this.uploadButton) {\n this.uploadButtonClick();\n }\n else if (e.target === this.browseButton) {\n this.browseButtonClick();\n }\n else if (targetElement.classList.contains(PAUSE_UPLOAD)) {\n var metaData = this.getCurrentMetaData(null, e);\n metaData.file.statusCode = '4';\n metaData.file.status = this.localizedTexts('pauseUpload');\n this.abortUpload(metaData, false);\n }\n else if (targetElement.classList.contains(RESUME_UPLOAD)) {\n this.resumeUpload(this.getCurrentMetaData(null, e), e);\n }\n else if (targetElement.classList.contains(RETRY_ICON)) {\n var metaData = this.getCurrentMetaData(null, e);\n metaData.file.statusCode = '1';\n metaData.file.status = this.localizedTexts('readyToUploadMessage');\n this.chunkUpload(metaData.file);\n }\n else {\n this.removeFiles(e);\n if (!targetElement.classList.contains(ABORT_ICON)) {\n this.browseButton.focus();\n }\n }\n e.preventDefault();\n e.stopPropagation();\n break;\n }\n };\n Uploader.prototype.getCurrentMetaData = function (fileInfo, e) {\n var fileData;\n var targetMetaData;\n if (isNullOrUndefined(fileInfo)) {\n var target = this.uploadWrapper.querySelector('.' + ICON_FOCUSED).parentElement;\n fileData = this.filesData[this.fileList.indexOf(target)];\n }\n else {\n fileData = fileInfo;\n }\n for (var i = 0; i < this.uploadMetaData.length; i++) {\n if (this.uploadMetaData[i].file.name === fileData.name) {\n targetMetaData = this.uploadMetaData[i];\n }\n }\n return targetMetaData;\n };\n Uploader.prototype.setReverseFocus = function (e) {\n var target = e.target;\n if (target === this.uploadButton) {\n this.uploadButton.blur();\n this.clearButton.focus();\n }\n else if (target === this.clearButton && this.listParent && this.listParent.querySelector('.e-icons')) {\n this.clearButton.blur();\n var items = [].slice.call(this.listParent.querySelectorAll('span.e-icons'));\n items[items.length - 1].classList.add(ICON_FOCUSED);\n items[items.length - 1].focus();\n }\n else {\n var iconElements = [].slice.call(this.listParent.querySelectorAll('span.e-icons'));\n var index = iconElements.indexOf(target);\n if (index > 0) {\n this.removeFocus();\n iconElements[index - 1].classList.add(ICON_FOCUSED);\n iconElements[index - 1].focus();\n }\n else {\n this.removeFocus();\n this.browseButton.focus();\n }\n }\n };\n Uploader.prototype.setTabFocus = function (e) {\n var target = e.target;\n if (target === this.clearButton) {\n this.removeFocus();\n if (this.uploadButton.hasAttribute('disabled')) {\n return;\n }\n this.uploadButton.focus();\n }\n else if (target.classList.contains('e-icons')) {\n var iconElements = [].slice.call(this.listParent.querySelectorAll('span.e-icons'));\n var index = iconElements.indexOf(target);\n if (index < (iconElements.length - 1)) {\n this.removeFocus();\n iconElements[index + 1].classList.add(ICON_FOCUSED);\n iconElements[index + 1].focus();\n }\n else {\n this.removeFocus();\n this.clearButton.focus();\n }\n }\n else {\n this.browseButton.blur();\n var iconElement = this.listParent.querySelectorAll('span.e-icons')[0];\n iconElement.focus();\n iconElement.classList.add(ICON_FOCUSED);\n }\n };\n Uploader.prototype.removeFocus = function () {\n if (this.uploadWrapper && this.listParent && this.listParent.querySelector('.' + ICON_FOCUSED)) {\n document.activeElement.blur();\n this.listParent.querySelector('.' + ICON_FOCUSED).classList.remove(ICON_FOCUSED);\n }\n };\n Uploader.prototype.browseButtonClick = function () {\n this.element.click();\n };\n Uploader.prototype.uploadButtonClick = function () {\n this.upload(this.filesData);\n };\n Uploader.prototype.clearButtonClick = function () {\n this.clearAll();\n };\n Uploader.prototype.bindDropEvents = function () {\n if (this.dropZoneElement) {\n EventHandler.add(this.dropZoneElement, 'drop', this.dropElement, this);\n EventHandler.add(this.dropZoneElement, 'dragover', this.dragHover, this);\n EventHandler.add(this.dropZoneElement, 'dragleave', this.onDragLeave, this);\n }\n };\n Uploader.prototype.unBindDropEvents = function () {\n if (this.dropZoneElement) {\n EventHandler.remove(this.dropZoneElement, 'drop', this.dropElement);\n EventHandler.remove(this.dropZoneElement, 'dragover', this.dragHover);\n EventHandler.remove(this.dropZoneElement, 'dragleave', this.onDragLeave);\n }\n };\n Uploader.prototype.onDragLeave = function (e) {\n this.dropZoneElement.classList.remove(DRAG_HOVER);\n };\n Uploader.prototype.dragHover = function (e) {\n if (!this.enabled) {\n return;\n }\n this.dropZoneElement.classList.add(DRAG_HOVER);\n e.preventDefault();\n e.stopPropagation();\n };\n Uploader.prototype.dropElement = function (e) {\n this.dropZoneElement.classList.remove(DRAG_HOVER);\n this.onSelectFiles(e);\n e.preventDefault();\n e.stopPropagation();\n };\n Uploader.prototype.removeFiles = function (args) {\n if (!this.enabled) {\n return;\n }\n var selectedElement = args.target.parentElement;\n var index = this.fileList.indexOf(selectedElement);\n var liElement = this.fileList[index];\n var fileData = this.filesData[index];\n if (args.target.classList.contains(ABORT_ICON)) {\n if (args.target.classList.contains(DISABLED)) {\n return;\n }\n fileData.statusCode = '5';\n if (!isNullOrUndefined(liElement)) {\n var spinnerTarget = liElement.querySelector('.' + ABORT_ICON);\n createSpinner({ target: spinnerTarget, width: '20px' });\n showSpinner(spinnerTarget);\n }\n }\n else {\n this.remove(fileData, false, false, args);\n }\n this.element.value = '';\n this.checkActionButtonStatus();\n };\n Uploader.prototype.removeFilesData = function (file, customTemplate) {\n if (customTemplate) {\n return;\n }\n var selectedElement = this.getLiElement(file);\n if (isNullOrUndefined(selectedElement)) {\n return;\n }\n detach(selectedElement);\n var index = this.fileList.indexOf(selectedElement);\n this.fileList.splice(index, 1);\n this.filesData.splice(index, 1);\n if (this.fileList.length === 0 && !isNullOrUndefined(this.listParent)) {\n detach(this.listParent);\n this.listParent = null;\n this.removeActionButtons();\n }\n };\n Uploader.prototype.removeUploadedFile = function (file, eventArgs, removeDirectly, custom) {\n var _this = this;\n var selectedFiles = file;\n var name = this.element.getAttribute('name');\n var ajax = new Ajax(this.asyncSettings.removeUrl, 'POST', true, null);\n var formData = new FormData();\n ajax.beforeSend = function (e) {\n eventArgs.currentRequest = ajax.httpRequest;\n if (!removeDirectly) {\n _this.trigger('removing', eventArgs);\n }\n if (eventArgs.cancel) {\n e.cancel = true;\n }\n if (eventArgs.postRawFile && !isNullOrUndefined(selectedFiles.rawFile) && selectedFiles.rawFile !== '') {\n formData.append(name, selectedFiles.rawFile);\n }\n else {\n formData.append(name, selectedFiles.name);\n }\n _this.updateFormData(formData, eventArgs.customFormData);\n };\n var liElement = this.getLiElement(file);\n ajax.onLoad = function (e) { _this.removeCompleted(e, selectedFiles, custom); return {}; };\n /* istanbul ignore next */\n ajax.onError = function (e) { _this.removeFailed(e, selectedFiles, custom); return {}; };\n ajax.send(formData);\n if (!isNullOrUndefined(liElement) && !isNullOrUndefined(liElement.querySelector('.' + REMOVE_ICON))) {\n var spinnerTarget = liElement.querySelector('.' + REMOVE_ICON);\n createSpinner({ target: spinnerTarget, width: '20px' });\n showSpinner(spinnerTarget);\n }\n };\n /* istanbul ignore next */\n Uploader.prototype.updateFormData = function (formData, customData) {\n if (customData.length > 0 && customData[0]) {\n for (var i = 0; i < customData.length; i++) {\n var data = customData[i];\n // tslint:disable-next-line\n formData.append(Object.keys(data)[0], Object.values(data)[0]);\n }\n }\n };\n Uploader.prototype.removeCompleted = function (e, files, customTemplate) {\n var args = {\n e: e, operation: 'remove', file: this.updateStatus(files, this.localizedTexts('removedSuccessMessage'), '2')\n };\n this.trigger('success', args);\n this.removeFilesData(files, customTemplate);\n var index = this.uploadedFilesData.indexOf(files);\n this.uploadedFilesData.splice(index, 1);\n this.trigger('change', { files: this.uploadedFilesData });\n };\n Uploader.prototype.removeFailed = function (e, files, customTemplate) {\n var args = {\n e: e, operation: 'remove', file: this.updateStatus(files, this.localizedTexts('removedFailedMessage'), '0')\n };\n if (!customTemplate) {\n var index = this.filesData.indexOf(files);\n var rootElement = this.fileList[index];\n if (rootElement) {\n var statusElement = rootElement.querySelector('.' + STATUS);\n rootElement.classList.remove(UPLOAD_SUCCESS);\n statusElement.classList.remove(UPLOAD_SUCCESS);\n rootElement.classList.add(UPLOAD_FAILED);\n statusElement.classList.add(UPLOAD_FAILED);\n }\n this.checkActionButtonStatus();\n }\n this.trigger('failure', args);\n var liElement = this.getLiElement(files);\n if (!isNullOrUndefined(liElement) && !isNullOrUndefined(liElement.querySelector('.' + REMOVE_ICON))) {\n var spinnerTarget = liElement.querySelector('.' + REMOVE_ICON);\n hideSpinner(spinnerTarget);\n detach(liElement.querySelector('.e-spinner-pane'));\n }\n };\n Uploader.prototype.onSelectFiles = function (args) {\n if (!this.enabled) {\n return;\n }\n var fileData = [];\n var targetFiles;\n if (args.type === 'drop') {\n var files = args.dataTransfer.files;\n targetFiles = this.multiple ? this.sortFileList(files) : [files[0]];\n }\n else {\n targetFiles = [].slice.call(args.target.files);\n }\n if (!this.multiple) {\n this.clearData(true);\n targetFiles = [targetFiles[0]];\n }\n for (var i = 0; i < targetFiles.length; i++) {\n var file = targetFiles[i];\n var eventArgs_1 = {\n name: file.name,\n rawFile: file,\n size: file.size,\n status: this.localizedTexts('readyToUploadMessage'),\n type: this.getFileType(file.name),\n validationMessages: this.validatedFileSize(file.size),\n statusCode: '1'\n };\n eventArgs_1.status = eventArgs_1.validationMessages.minSize !== '' ? this.localizedTexts('invalidMinFileSize') :\n eventArgs_1.validationMessages.maxSize !== '' ? this.localizedTexts('invalidMaxFileSize') : eventArgs_1.status;\n if (eventArgs_1.validationMessages.minSize !== '' || eventArgs_1.validationMessages.maxSize !== '') {\n eventArgs_1.statusCode = '0';\n }\n fileData.push(eventArgs_1);\n }\n var eventArgs = {\n event: args,\n cancel: false,\n filesData: fileData,\n isModified: false,\n modifiedFilesData: [],\n progressInterval: ''\n };\n if (this.allowedExtensions.indexOf('*') > -1) {\n this.allTypes = true;\n }\n if (args.type === 'drop' && !this.allTypes) {\n fileData = this.checkExtension(fileData);\n }\n this.trigger('selected', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n if (this.showFileList) {\n if (eventArgs.isModified && eventArgs.modifiedFilesData.length > 0) {\n var dataFiles = this.allTypes ? eventArgs.modifiedFilesData :\n this.checkExtension(eventArgs.modifiedFilesData);\n this.updateSortedFileList(dataFiles);\n this.filesData = dataFiles;\n if (!this.isForm) {\n this.checkAutoUpload(dataFiles);\n }\n }\n else {\n this.createFileList(fileData);\n this.filesData = this.filesData.concat(fileData);\n if (!this.isForm) {\n this.checkAutoUpload(fileData);\n }\n }\n if (!isNullOrUndefined(eventArgs.progressInterval) && eventArgs.progressInterval !== '') {\n this.progressInterval = eventArgs.progressInterval;\n }\n }\n };\n Uploader.prototype.clearData = function (singleUpload) {\n if (!isNullOrUndefined(this.listParent)) {\n detach(this.listParent);\n this.listParent = null;\n }\n if (Browser.info.name !== 'msie' && !singleUpload) {\n this.element.value = '';\n }\n this.fileList = [];\n this.filesData = [];\n this.removeActionButtons();\n };\n Uploader.prototype.updateSortedFileList = function (filesData) {\n var previousListClone = createElement('div', { id: 'clonewrapper' });\n var added = -1;\n var removedList;\n if (this.listParent) {\n for (var i = 0; i < this.listParent.querySelectorAll('li').length; i++) {\n var liElement = this.listParent.querySelectorAll('li')[i];\n previousListClone.appendChild(liElement.cloneNode(true));\n }\n removedList = this.listParent.querySelectorAll('li');\n for (var _i = 0, removedList_1 = removedList; _i < removedList_1.length; _i++) {\n var item = removedList_1[_i];\n detach(item);\n }\n this.removeActionButtons();\n var oldList = [].slice.call(previousListClone.childNodes);\n detach(this.listParent);\n this.listParent = null;\n this.fileList = [];\n this.createParentUL();\n for (var index = 0; index < filesData.length; index++) {\n for (var j = 0; j < this.filesData.length; j++) {\n if (this.filesData[j].name === filesData[index].name) {\n this.listParent.appendChild(oldList[j]);\n EventHandler.add(oldList[j].querySelector('.e-icons'), 'click', this.removeFiles, this);\n this.fileList.push(oldList[j]);\n added = index;\n }\n }\n if (added !== index) {\n this.createFileList([filesData[index]]);\n }\n }\n }\n else {\n this.createFileList(filesData);\n }\n };\n Uploader.prototype.checkExtension = function (files) {\n var dropFiles = files;\n if (this.allowedExtensions !== '') {\n var allowedExtensions = [];\n var extensions = this.allowedExtensions.split(',');\n for (var _i = 0, extensions_1 = extensions; _i < extensions_1.length; _i++) {\n var extension = extensions_1[_i];\n allowedExtensions.push(extension.trim().toLocaleLowerCase());\n }\n for (var i = 0; i < files.length; i++) {\n if (allowedExtensions.indexOf(('.' + files[i].type).toLocaleLowerCase()) === -1) {\n files[i].status = this.localizedTexts('invalidFileType');\n files[i].statusCode = '0';\n }\n }\n }\n return dropFiles;\n };\n Uploader.prototype.validatedFileSize = function (fileSize) {\n var minSizeError = '';\n var maxSizeError = '';\n if (fileSize < this.minFileSize) {\n minSizeError = this.localizedTexts('invalidMinFileSize');\n }\n else if (fileSize > this.maxFileSize) {\n maxSizeError = this.localizedTexts('invalidMaxFileSize');\n }\n else {\n minSizeError = '';\n maxSizeError = '';\n }\n var errorMessage = { minSize: minSizeError, maxSize: maxSizeError };\n return errorMessage;\n };\n Uploader.prototype.createCustomfileList = function (fileData) {\n this.createParentUL();\n for (var _i = 0, fileData_1 = fileData; _i < fileData_1.length; _i++) {\n var listItem = fileData_1[_i];\n var liElement = createElement('li', { className: FILE, attrs: { 'data-file-name': listItem.name } });\n this.uploadTemplateFn = this.templateComplier(this.template);\n this.listParent.appendChild(liElement);\n var fromElements = [].slice.call(this.uploadTemplateFn(listItem));\n append(fromElements, liElement);\n this.fileList.push(liElement);\n }\n };\n Uploader.prototype.createParentUL = function () {\n if (isNullOrUndefined(this.listParent)) {\n this.listParent = createElement('ul', { className: LIST_PARENT });\n this.uploadWrapper.appendChild(this.listParent);\n }\n };\n Uploader.prototype.createFileList = function (fileData) {\n this.createParentUL();\n if (this.template !== '' && !isNullOrUndefined(this.template)) {\n this.createCustomfileList(fileData);\n }\n else {\n for (var _i = 0, fileData_2 = fileData; _i < fileData_2.length; _i++) {\n var listItem = fileData_2[_i];\n var liElement = createElement('li', { className: FILE, attrs: { 'data-file-name': listItem.name } });\n var textContainer = createElement('span', { className: TEXT_CONTAINER });\n var textElement = createElement('span', { className: FILE_NAME, attrs: { 'title': listItem.name } });\n textElement.innerHTML = this.getFileNameOnly(listItem.name);\n var fileExtension = createElement('span', { className: FILE_TYPE });\n fileExtension.innerHTML = '.' + this.getFileType(listItem.name);\n if (!this.enableRtl) {\n textContainer.appendChild(textElement);\n textContainer.appendChild(fileExtension);\n }\n else {\n var rtlContainer = createElement('span', { className: RTL_CONTAINER });\n rtlContainer.appendChild(fileExtension);\n rtlContainer.appendChild(textElement);\n textContainer.appendChild(rtlContainer);\n }\n var fileSize = createElement('span', { className: FILE_SIZE });\n fileSize.innerHTML = this.bytesToSize(listItem.size);\n textContainer.appendChild(fileSize);\n var statusElement = createElement('span', { className: STATUS });\n textContainer.appendChild(statusElement);\n statusElement.innerHTML = listItem.status;\n liElement.appendChild(textContainer);\n var iconElement = createElement('span', { className: ' e-icons', attrs: { 'tabindex': '-1' } });\n /* istanbul ignore next */\n if (Browser.info.name === 'msie') {\n iconElement.classList.add('e-msie');\n }\n iconElement.setAttribute('title', this.localizedTexts('remove'));\n liElement.appendChild(iconElement);\n EventHandler.add(iconElement, 'click', this.removeFiles, this);\n if (listItem.statusCode === '2') {\n statusElement.classList.add(UPLOAD_SUCCESS);\n iconElement.classList.add(REMOVE_ICON);\n iconElement.setAttribute('title', this.localizedTexts('delete'));\n }\n else if (listItem.statusCode !== '1') {\n statusElement.classList.remove(UPLOAD_SUCCESS);\n statusElement.classList.add(VALIDATION_FAILS);\n }\n if (this.autoUpload && listItem.statusCode === '1' && this.asyncSettings.saveUrl !== '') {\n statusElement.innerHTML = '';\n }\n if (!iconElement.classList.contains(REMOVE_ICON)) {\n iconElement.classList.add(CLEAR_ICON);\n }\n this.listParent.appendChild(liElement);\n this.fileList.push(liElement);\n this.truncateName(textElement);\n }\n }\n };\n Uploader.prototype.truncateName = function (name) {\n var nameElement = name;\n var text;\n if (nameElement.offsetWidth < nameElement.scrollWidth) {\n text = nameElement.textContent;\n nameElement.dataset.tail = text.slice(text.length - 10);\n }\n };\n Uploader.prototype.getFileType = function (name) {\n var extension;\n var index = name.lastIndexOf('.');\n if (index >= 0) {\n extension = name.substring(index + 1);\n }\n return extension ? extension : '';\n };\n Uploader.prototype.getFileNameOnly = function (name) {\n var type = this.getFileType(name);\n var names = name.split('.' + type);\n return type = names[0];\n };\n Uploader.prototype.setInitialAttributes = function () {\n if (this.initialAttr.accept) {\n this.element.setAttribute('accept', this.initialAttr.accept);\n }\n if (this.initialAttr.disabled) {\n this.element.setAttribute('disabled', 'disabled');\n }\n if (this.initialAttr.multiple) {\n var newAttr = document.createAttribute('multiple');\n this.element.setAttributeNode(newAttr);\n }\n };\n Uploader.prototype.filterfileList = function (files) {\n var filterFiles = [];\n var li;\n for (var i = 0; i < files.length; i++) {\n li = this.getLiElement(files[i]);\n if (!li.classList.contains(UPLOAD_SUCCESS)) {\n filterFiles.push(files[i]);\n }\n }\n return filterFiles;\n };\n Uploader.prototype.updateStatus = function (files, status, statusCode) {\n if (!(status === '' || isNullOrUndefined(status)) && !(statusCode === '' || isNullOrUndefined(statusCode))) {\n files.status = status;\n files.statusCode = statusCode;\n }\n var li = this.getLiElement(files);\n if (!isNullOrUndefined(li)) {\n if (!isNullOrUndefined(li.querySelector('.' + STATUS)) && !((status === '' || isNullOrUndefined(status)))) {\n li.querySelector('.' + STATUS).textContent = status;\n }\n }\n return files;\n };\n Uploader.prototype.getLiElement = function (files) {\n var index = this.filesData.indexOf(files);\n return this.fileList[index];\n };\n Uploader.prototype.createProgressBar = function (liElement) {\n var progressbarWrapper = createElement('span', { className: PROGRESS_WRAPPER });\n var progressBar = createElement('progressbar', { className: PROGRESSBAR, attrs: { value: '0', max: '100' } });\n var progressbarInnerWrapper = createElement('span', { className: PROGRESS_INNER_WRAPPER });\n progressBar.setAttribute('style', 'width: 0%');\n var progressbarText = createElement('span', { className: PROGRESSBAR_TEXT });\n progressbarText.textContent = '0%';\n progressbarInnerWrapper.appendChild(progressBar);\n progressbarWrapper.appendChild(progressbarInnerWrapper);\n progressbarWrapper.appendChild(progressbarText);\n liElement.querySelector('.' + TEXT_CONTAINER).appendChild(progressbarWrapper);\n };\n /* istanbul ignore next */\n Uploader.prototype.updateProgressbar = function (e, li) {\n if (!isNaN(Math.round((e.loaded / e.total) * 100)) && !isNullOrUndefined(li.querySelector('.' + PROGRESSBAR))) {\n if (!isNullOrUndefined(this.progressInterval) && this.progressInterval !== '') {\n var value = (Math.round((e.loaded / e.total) * 100)) % parseInt(this.progressInterval, 10);\n if (value === 0 || value === 100) {\n this.changeProgressValue(li, Math.round((e.loaded / e.total) * 100).toString() + '%');\n }\n }\n else {\n this.changeProgressValue(li, Math.round((e.loaded / e.total) * 100).toString() + '%');\n }\n }\n };\n Uploader.prototype.changeProgressValue = function (li, progressValue) {\n li.querySelector('.' + PROGRESSBAR).setAttribute('style', 'width:' + progressValue);\n li.querySelector('.' + PROGRESSBAR_TEXT).textContent = progressValue;\n };\n Uploader.prototype.uploadInProgress = function (e, files, customUI, request) {\n var _this = this;\n var li = this.getLiElement(files);\n if (isNullOrUndefined(li) && (!customUI || isNullOrUndefined(customUI))) {\n return;\n }\n if (!isNullOrUndefined(li)) {\n /* istanbul ignore next */\n if (files.statusCode === '5') {\n var eventArgs = {\n event: e,\n fileData: files,\n cancel: false\n };\n this.trigger('canceling', eventArgs);\n if (eventArgs.cancel) {\n files.statusCode = '3';\n var spinnerTarget = li.querySelector('.' + ABORT_ICON);\n if (!isNullOrUndefined(li) && !isNullOrUndefined(spinnerTarget)) {\n hideSpinner(spinnerTarget);\n detach(li.querySelector('.e-spinner-pane'));\n }\n return;\n }\n request.emitError = false;\n request.httpRequest.abort();\n var formData = new FormData();\n if (files.statusCode === '5') {\n var name_1 = this.element.getAttribute('name');\n formData.append(name_1, files.name);\n formData.append('cancel-uploading', files.name);\n var ajax = new Ajax(this.asyncSettings.removeUrl, 'POST', true, null);\n ajax.onLoad = function (e) { _this.removecanceledFile(e, files); return {}; };\n ajax.send(formData);\n }\n }\n if (!(li.querySelectorAll('.' + PROGRESS_WRAPPER).length > 0) && li.querySelector('.' + STATUS)) {\n li.querySelector('.' + STATUS).classList.add(UPLOAD_INPROGRESS);\n this.createProgressBar(li);\n this.updateProgressBarClasses(li, UPLOAD_INPROGRESS);\n li.querySelector('.' + STATUS).classList.remove(UPLOAD_FAILED);\n }\n this.updateProgressbar(e, li);\n var iconEle = li.querySelector('.' + CLEAR_ICON);\n if (!isNullOrUndefined(iconEle)) {\n iconEle.classList.add(ABORT_ICON, UPLOAD_INPROGRESS);\n iconEle.setAttribute('title', this.localizedTexts('abort'));\n iconEle.classList.remove(CLEAR_ICON);\n }\n }\n var args = { e: e, operation: 'upload', file: this.updateStatus(files, this.localizedTexts('inProgress'), '3') };\n this.trigger('progress', args);\n };\n Uploader.prototype.removecanceledFile = function (e, file) {\n var liElement = this.getLiElement(file);\n if (liElement.querySelector('.' + RETRY_ICON) || isNullOrUndefined(liElement.querySelector('.' + ABORT_ICON))) {\n return;\n }\n this.updateStatus(file, this.localizedTexts('fileUploadCancel'), '5');\n this.renderFailureState(e, file, liElement);\n var spinnerTarget = liElement.querySelector('.' + CLEAR_ICON);\n if (!isNullOrUndefined(liElement)) {\n hideSpinner(spinnerTarget);\n detach(liElement.querySelector('.e-spinner-pane'));\n }\n var args = { event: e, operation: 'cancel', file: file };\n this.trigger('success', args);\n };\n Uploader.prototype.renderFailureState = function (e, file, liElement) {\n var _this = this;\n this.updateProgressBarClasses(liElement, UPLOAD_FAILED);\n this.removeProgressbar(liElement, 'failure');\n if (!isNullOrUndefined(liElement.querySelector('.e-file-status'))) {\n liElement.querySelector('.e-file-status').classList.add(UPLOAD_FAILED);\n }\n var deleteIcon = liElement.querySelector('.' + ABORT_ICON);\n if (isNullOrUndefined(deleteIcon)) {\n return;\n }\n deleteIcon.classList.remove(ABORT_ICON, UPLOAD_INPROGRESS);\n deleteIcon.classList.add(CLEAR_ICON);\n deleteIcon.setAttribute('title', this.localizedTexts('remove'));\n this.pauseButton = createElement('span', { className: 'e-icons e-file-reload-btn', attrs: { 'tabindex': '-1' } });\n liElement.insertBefore(this.pauseButton, deleteIcon);\n this.pauseButton.setAttribute('title', this.localizedTexts('retry'));\n var retryElement = liElement.querySelector('.' + RETRY_ICON);\n /* istanbul ignore next */\n retryElement.addEventListener('click', function (e) { _this.reloadcanceledFile(e, file, liElement); }, false);\n };\n Uploader.prototype.reloadcanceledFile = function (e, file, liElement) {\n file.statusCode = '1';\n file.status = this.localizedTexts('readyToUploadMessage');\n liElement.querySelector('.' + STATUS).classList.remove(UPLOAD_FAILED);\n detach(liElement.querySelector('.' + RETRY_ICON));\n this.pauseButton = null;\n this.upload([file]);\n };\n /* istanbul ignore next */\n Uploader.prototype.uploadComplete = function (e, file, customUI) {\n var status = e.target;\n if (status.readyState === 4 && status.status >= 200 && status.status <= 299) {\n var li = this.getLiElement(file);\n if (isNullOrUndefined(li) && (!customUI || isNullOrUndefined(customUI))) {\n return;\n }\n if (!isNullOrUndefined(li)) {\n this.updateProgressBarClasses(li, UPLOAD_SUCCESS);\n this.removeProgressbar(li, 'success');\n var iconEle = li.querySelector('.' + ABORT_ICON);\n if (!isNullOrUndefined(iconEle)) {\n iconEle.classList.add(REMOVE_ICON);\n iconEle.setAttribute('title', this.localizedTexts('delete'));\n iconEle.classList.remove(ABORT_ICON);\n iconEle.classList.remove(UPLOAD_INPROGRESS);\n }\n }\n this.raiseSuccessEvent(e, file);\n }\n else {\n this.uploadFailed(e, file);\n }\n };\n Uploader.prototype.raiseSuccessEvent = function (e, file) {\n var args = { e: e, operation: 'upload', file: this.updateStatus(file, this.localizedTexts('uploadSuccessMessage'), '2') };\n this.trigger('success', args);\n this.uploadedFilesData.push(file);\n this.trigger('change', { file: this.uploadedFilesData });\n this.checkActionButtonStatus();\n };\n Uploader.prototype.uploadFailed = function (e, file) {\n var li = this.getLiElement(file);\n var args = { e: e, operation: 'upload', file: this.updateStatus(file, this.localizedTexts('uploadFailedMessage'), '0') };\n if (!isNullOrUndefined(li)) {\n this.renderFailureState(e, file, li);\n }\n this.trigger('failure', args);\n this.checkActionButtonStatus();\n };\n Uploader.prototype.updateProgressBarClasses = function (li, className) {\n var progressBar = li.querySelector('.' + PROGRESSBAR);\n if (!isNullOrUndefined(progressBar)) {\n progressBar.classList.add(className);\n }\n };\n Uploader.prototype.removeProgressbar = function (li, callType) {\n var _this = this;\n if (!isNullOrUndefined(li.querySelector('.' + PROGRESS_WRAPPER))) {\n this.progressAnimation = new Animation({ duration: 1250 });\n this.progressAnimation.animate(li.querySelector('.' + PROGRESS_WRAPPER), { name: 'FadeOut' });\n this.progressAnimation.animate(li.querySelector('.' + PROGRESSBAR_TEXT), { name: 'FadeOut' });\n setTimeout(function () { _this.animateProgressBar(li, callType); }, 750);\n }\n };\n /* istanbul ignore next */\n Uploader.prototype.animateProgressBar = function (li, callType) {\n if (callType === 'success') {\n li.classList.add(UPLOAD_SUCCESS);\n if (!isNullOrUndefined(li.querySelector('.' + STATUS))) {\n li.querySelector('.' + STATUS).classList.remove(UPLOAD_INPROGRESS);\n this.progressAnimation.animate(li.querySelector('.' + STATUS), { name: 'FadeIn' });\n li.querySelector('.' + STATUS).classList.add(UPLOAD_SUCCESS);\n }\n }\n else {\n if (!isNullOrUndefined(li.querySelector('.' + STATUS))) {\n li.querySelector('.' + STATUS).classList.remove(UPLOAD_INPROGRESS);\n this.progressAnimation.animate(li.querySelector('.' + STATUS), { name: 'FadeIn' });\n li.querySelector('.' + STATUS).classList.add(UPLOAD_FAILED);\n }\n }\n if (li.querySelector('.' + PROGRESS_WRAPPER)) {\n detach(li.querySelector('.' + PROGRESS_WRAPPER));\n }\n };\n Uploader.prototype.setExtensions = function (extensions) {\n this.element.setAttribute('accept', extensions);\n };\n Uploader.prototype.templateComplier = function (uploadTemplate) {\n if (uploadTemplate) {\n var exception = void 0;\n try {\n if (document.querySelectorAll(uploadTemplate).length) {\n return compile(document.querySelector(uploadTemplate).innerHTML.trim());\n }\n }\n catch (exception) {\n return compile(uploadTemplate);\n }\n }\n return undefined;\n };\n Uploader.prototype.setRTL = function () {\n this.enableRtl ? addClass([this.uploadWrapper], RTL) : removeClass([this.uploadWrapper], RTL);\n };\n Uploader.prototype.localizedTexts = function (localeText) {\n this.l10n.setLocale(this.locale);\n return this.l10n.getConstant(localeText);\n };\n Uploader.prototype.setControlStatus = function () {\n if (!this.enabled) {\n this.uploadWrapper.classList.add(DISABLED);\n this.element.setAttribute('disabled', 'disabled');\n this.browseButton.setAttribute('disabled', 'disabled');\n if (!isNullOrUndefined(this.clearButton)) {\n this.clearButton.setAttribute('disabled', 'disabled');\n }\n if (!isNullOrUndefined(this.uploadButton)) {\n this.uploadButton.setAttribute('disabled', 'disabled');\n }\n }\n else {\n if (this.uploadWrapper.classList.contains(DISABLED)) {\n this.uploadWrapper.classList.remove(DISABLED);\n }\n if (!isNullOrUndefined(this.browseButton) && this.element.hasAttribute('disabled')) {\n this.element.removeAttribute('disabled');\n this.browseButton.removeAttribute('disabled');\n }\n if (!isNullOrUndefined(this.clearButton) && this.clearButton.hasAttribute('disabled')) {\n this.clearButton.removeAttribute('disabled');\n }\n if (!isNullOrUndefined(this.uploadButton) && this.uploadButton.hasAttribute('disabled')) {\n this.uploadButton.hasAttribute('disabled');\n }\n }\n };\n Uploader.prototype.checkHTMLAttributes = function () {\n if (this.element.hasAttribute('accept')) {\n this.allowedExtensions = this.element.getAttribute('accept');\n this.initialAttr.accept = this.allowedExtensions;\n }\n if (this.element.hasAttribute('multiple')) {\n this.multiple = true;\n this.initialAttr.multiple = true;\n }\n if (this.element.hasAttribute('disabled')) {\n this.enabled = false;\n this.initialAttr.disabled = true;\n }\n };\n Uploader.prototype.chunkUpload = function (file, custom) {\n var start = 0;\n var end = Math.min(this.asyncSettings.chunkSize, file.size);\n var index = 0;\n var blob = file.rawFile.slice(start, end);\n var metaData = { chunkIndex: index, blob: blob, file: file, start: start, end: end, retryCount: 0, request: null };\n this.sendRequest(file, metaData, custom);\n };\n Uploader.prototype.sendRequest = function (file, metaData, custom) {\n var _this = this;\n var formData = new FormData();\n var blob = file.rawFile.slice(metaData.start, metaData.end);\n formData.append('chunkFile', blob, file.name);\n formData.append('chunk-index', metaData.chunkIndex.toString());\n var totalChunk = Math.max(Math.ceil(file.size / this.asyncSettings.chunkSize), 1);\n formData.append('total-chunk', totalChunk.toString());\n var ajax = new Ajax({ url: this.asyncSettings.saveUrl, type: 'POST', async: true, contentType: null });\n ajax.onLoad = function (e) { _this.chunkUploadComplete(e, metaData, custom); return {}; };\n ajax.onUploadProgress = function (e) {\n _this.chunkUploadInProgress(e, metaData, custom);\n return {};\n };\n var eventArgs = {\n fileData: file,\n customFormData: [],\n cancel: false,\n chunkSize: this.asyncSettings.chunkSize === 0 ? null : this.asyncSettings.chunkSize\n };\n ajax.beforeSend = function (e) {\n if (metaData.chunkIndex !== 0) {\n return;\n }\n eventArgs.currentRequest = ajax.httpRequest;\n _this.trigger('uploading', eventArgs);\n if (eventArgs.cancel) {\n _this.eventCancelByArgs(e, eventArgs, file);\n }\n else {\n _this.updateFormData(formData, eventArgs.customFormData);\n }\n };\n /* istanbul ignore next */\n ajax.onError = function (e) { _this.chunkUploadFailed(e, metaData, custom); return {}; };\n ajax.send(formData);\n metaData.request = ajax;\n };\n Uploader.prototype.eventCancelByArgs = function (e, eventArgs, file) {\n var _this = this;\n e.cancel = true;\n if (eventArgs.fileData.statusCode === '5') {\n return;\n }\n var liElement = this.getLiElement(eventArgs.fileData);\n liElement.querySelector('.' + STATUS).innerHTML = this.localizedTexts('fileUploadCancel');\n liElement.querySelector('.' + STATUS).classList.add(UPLOAD_FAILED);\n eventArgs.fileData.statusCode = '5';\n eventArgs.fileData.status = this.localizedTexts('fileUploadCancel');\n this.pauseButton = createElement('span', { className: 'e-icons e-file-reload-btn', attrs: { 'tabindex': '-1' } });\n liElement.insertBefore(this.pauseButton, liElement.querySelector('.' + CLEAR_ICON));\n this.pauseButton.setAttribute('title', this.localizedTexts('retry'));\n /* istanbul ignore next */\n this.pauseButton.addEventListener('click', function (e) { _this.reloadcanceledFile(e, file, liElement); }, false);\n this.checkActionButtonStatus();\n };\n Uploader.prototype.checkChunkUpload = function () {\n return (this.asyncSettings.chunkSize <= 0 || isNullOrUndefined(this.asyncSettings.chunkSize)) ? false : true;\n };\n Uploader.prototype.chunkUploadComplete = function (e, metaData, custom) {\n var _this = this;\n var response = e.target;\n var liElement;\n if (response.readyState === 4 && response.status >= 200 && response.status < 300) {\n var totalChunk = Math.max(Math.ceil(metaData.file.size / this.asyncSettings.chunkSize), 1);\n var eventArgs = {\n event: e,\n file: metaData.file,\n chunkIndex: metaData.chunkIndex,\n totalChunk: totalChunk,\n chunkSize: this.asyncSettings.chunkSize\n };\n this.trigger('chunkSuccess', eventArgs);\n if (isNullOrUndefined(custom) || !custom) {\n liElement = this.getLiElement(metaData.file);\n }\n this.updateMetaData(metaData);\n if (metaData.end === metaData.file.size) {\n metaData.file.statusCode = '3';\n }\n if (metaData.file.statusCode === '5') {\n var eventArgs_2 = { event: e, fileData: metaData.file, cancel: false };\n this.trigger('canceling', eventArgs_2);\n if (eventArgs_2.cancel) {\n metaData.file.statusCode = '3';\n var spinnerTarget = liElement.querySelector('.' + ABORT_ICON);\n if (!isNullOrUndefined(liElement) && !isNullOrUndefined(spinnerTarget)) {\n hideSpinner(spinnerTarget);\n detach(liElement.querySelector('.e-spinner-pane'));\n }\n this.sendNextRequest(metaData);\n return;\n }\n metaData.request.emitError = false;\n response.abort();\n var formData = new FormData();\n var name_2 = this.element.getAttribute('name');\n formData.append(name_2, metaData.file.name);\n formData.append('cancel-uploading', metaData.file.name);\n var ajax = new Ajax(this.asyncSettings.removeUrl, 'POST', true, null);\n ajax.onLoad = function (e) { _this.removeChunkFile(e, metaData, custom); return {}; };\n ajax.send(formData);\n }\n else {\n if ((totalChunk - 1) === metaData.chunkIndex && totalChunk > metaData.chunkIndex) {\n var index = this.pausedData.indexOf(metaData);\n if (index >= 0) {\n this.pausedData.splice(index, 1);\n }\n if (isNullOrUndefined(this.template) && (isNullOrUndefined(custom) || !custom) && liElement) {\n if (liElement) {\n detach(liElement.querySelector('.' + PAUSE_UPLOAD));\n }\n this.removeChunkProgressBar(metaData);\n }\n this.raiseSuccessEvent(e, metaData.file);\n return;\n }\n this.sendNextRequest(metaData);\n }\n }\n else {\n this.chunkUploadFailed(e, metaData);\n }\n };\n Uploader.prototype.sendNextRequest = function (metaData) {\n metaData.start = metaData.end;\n metaData.end += this.asyncSettings.chunkSize;\n metaData.end = Math.min(metaData.end, metaData.file.size);\n metaData.chunkIndex += 1;\n this.sendRequest(metaData.file, metaData);\n };\n Uploader.prototype.removeChunkFile = function (e, metaData, custom) {\n if (isNullOrUndefined(this.template) && (isNullOrUndefined(custom) && !custom)) {\n var liElement = this.getLiElement(metaData.file);\n var deleteIcon = liElement.querySelector('.' + ABORT_ICON);\n var spinnerTarget = deleteIcon;\n this.updateStatus(metaData.file, this.localizedTexts('fileUploadCancel'), '5');\n this.updateProgressBarClasses(liElement, UPLOAD_FAILED);\n this.removeProgressbar(liElement, 'failure');\n deleteIcon.classList.remove(ABORT_ICON);\n deleteIcon.classList.add(CLEAR_ICON);\n deleteIcon.setAttribute('title', this.localizedTexts('remove'));\n var pauseIcon = liElement.querySelector('.' + PAUSE_UPLOAD);\n pauseIcon.classList.add(RETRY_ICON);\n pauseIcon.classList.remove(PAUSE_UPLOAD);\n pauseIcon.setAttribute('title', this.localizedTexts('retry'));\n if (!isNullOrUndefined(liElement) && !isNullOrUndefined(deleteIcon)) {\n hideSpinner(spinnerTarget);\n detach(liElement.querySelector('.e-spinner-pane'));\n }\n }\n };\n Uploader.prototype.pauseUpload = function (metaData, e, custom) {\n metaData.file.statusCode = '4';\n metaData.file.status = this.localizedTexts('pause');\n this.updateMetaData(metaData);\n var eventArgs = {\n event: e ? e : null,\n file: metaData.file,\n chunkIndex: metaData.chunkIndex,\n chunkCount: Math.round(metaData.file.size / this.asyncSettings.chunkSize),\n chunkSize: this.asyncSettings.chunkSize\n };\n this.abortUpload(metaData, custom, eventArgs);\n };\n Uploader.prototype.abortUpload = function (metaData, custom, eventArgs) {\n metaData.request.emitError = false;\n metaData.request.httpRequest.abort();\n var liElement = this.getLiElement(metaData.file);\n if (isNullOrUndefined(this.template) && (isNullOrUndefined(custom) || !custom)) {\n var targetElement = liElement.querySelector('.' + PAUSE_UPLOAD);\n targetElement.classList.remove(PAUSE_UPLOAD);\n targetElement.classList.add(RESUME_UPLOAD);\n targetElement.setAttribute('title', this.localizedTexts('resume'));\n }\n for (var i = 0; i < this.pausedData.length; i++) {\n if (this.pausedData[i].file.name === metaData.file.name) {\n this.pausedData.splice(i, 1);\n }\n }\n this.pausedData.push(metaData);\n this.trigger('pausing', eventArgs);\n };\n Uploader.prototype.resumeUpload = function (metaData, e, custom) {\n var liElement = this.getLiElement(metaData.file);\n var targetElement;\n if (!isNullOrUndefined(liElement)) {\n targetElement = liElement.querySelector('.' + RESUME_UPLOAD);\n }\n if (!isNullOrUndefined(targetElement) && (isNullOrUndefined(custom) || !custom)) {\n targetElement.classList.remove(RESUME_UPLOAD);\n targetElement.classList.add(PAUSE_UPLOAD);\n targetElement.setAttribute('title', this.localizedTexts('pause'));\n }\n metaData.file.status = this.localizedTexts('inProgress');\n metaData.file.statusCode = '3';\n this.updateMetaData(metaData);\n var eventArgs = {\n event: e ? e : null,\n file: metaData.file,\n chunkIndex: metaData.chunkIndex,\n chunkCount: Math.round(metaData.file.size / this.asyncSettings.chunkSize),\n chunkSize: this.asyncSettings.chunkSize\n };\n this.trigger('resuming', eventArgs);\n for (var i = 0; i < this.pausedData.length; i++) {\n if (this.pausedData[i].end === this.pausedData[i].file.size) {\n this.chunkUploadComplete(e, metaData, custom);\n }\n else {\n if (this.pausedData[i].file.name === metaData.file.name) {\n this.pausedData[i].start = this.pausedData[i].end;\n this.pausedData[i].end = this.pausedData[i].end + this.asyncSettings.chunkSize;\n this.pausedData[i].end = Math.min(this.pausedData[i].end, this.pausedData[i].file.size);\n this.pausedData[i].chunkIndex = this.pausedData[i].chunkIndex + 1;\n this.sendRequest(this.pausedData[i].file, this.pausedData[i], custom);\n }\n }\n }\n };\n Uploader.prototype.updateMetaData = function (metaData) {\n if (this.uploadMetaData.indexOf(metaData) === -1) {\n this.uploadMetaData.push(metaData);\n }\n else {\n this.uploadMetaData.splice(this.uploadMetaData.indexOf(metaData), 1);\n this.uploadMetaData.push(metaData);\n }\n };\n Uploader.prototype.removeChunkProgressBar = function (metaData) {\n var liElement = this.getLiElement(metaData.file);\n if (!isNullOrUndefined(liElement)) {\n this.updateProgressBarClasses(liElement, UPLOAD_SUCCESS);\n this.removeProgressbar(liElement, 'success');\n var cancelButton = liElement.querySelector('.' + ABORT_ICON);\n if (!isNullOrUndefined(cancelButton)) {\n cancelButton.classList.add(REMOVE_ICON);\n cancelButton.setAttribute('title', this.localizedTexts('delete'));\n cancelButton.classList.remove(ABORT_ICON, UPLOAD_INPROGRESS);\n }\n }\n };\n Uploader.prototype.chunkUploadFailed = function (e, metaData, custom) {\n var _this = this;\n var chunkCount = Math.max(Math.ceil(metaData.file.size / this.asyncSettings.chunkSize), 1);\n var liElement;\n if (isNullOrUndefined(this.template) && (isNullOrUndefined(custom) || !custom)) {\n liElement = this.getLiElement(metaData.file);\n }\n var eventArgs = {\n event: e,\n file: metaData.file,\n chunkIndex: metaData.chunkIndex,\n totalChunk: chunkCount,\n chunkSize: this.asyncSettings.chunkSize\n };\n this.trigger('chunkFailure', eventArgs);\n if (metaData.retryCount < this.asyncSettings.retryCount) {\n setTimeout(function () { _this.retryRequest(liElement, metaData, custom); }, this.asyncSettings.retryAfterDelay);\n }\n else {\n if (!isNullOrUndefined(liElement)) {\n var pauseButton = liElement.querySelector('.' + PAUSE_UPLOAD) ?\n liElement.querySelector('.' + PAUSE_UPLOAD) : liElement.querySelector('.' + RESUME_UPLOAD);\n if (!isNullOrUndefined(pauseButton)) {\n pauseButton.classList.add(RETRY_ICON);\n pauseButton.classList.remove(PAUSE_UPLOAD, RESUME_UPLOAD);\n }\n this.updateProgressBarClasses(liElement, UPLOAD_FAILED);\n this.removeProgressbar(liElement, 'failure');\n liElement.querySelector('.e-icons').classList.remove(UPLOAD_INPROGRESS);\n var iconElement = liElement.querySelector('.' + ABORT_ICON);\n iconElement.classList.remove(ABORT_ICON);\n if (!isNullOrUndefined(liElement.querySelector('.' + PAUSE_UPLOAD))) {\n detach(liElement.querySelector('.' + PAUSE_UPLOAD));\n }\n if (metaData.start > 0) {\n iconElement.classList.add(REMOVE_ICON);\n iconElement.setAttribute('title', this.localizedTexts('delete'));\n }\n else {\n iconElement.classList.add(CLEAR_ICON);\n iconElement.setAttribute('title', this.localizedTexts('remove'));\n }\n }\n metaData.retryCount = 0;\n var file = metaData.file;\n var args = { e: e, operation: 'upload', file: this.updateStatus(file, this.localizedTexts('uploadFailedMessage'), '0') };\n this.trigger('failure', args);\n }\n };\n Uploader.prototype.retryRequest = function (liElement, metaData, custom) {\n if (isNullOrUndefined(this.template) && (isNullOrUndefined(custom) || !custom) && liElement) {\n this.updateProgressBarClasses(liElement, UPLOAD_FAILED);\n }\n metaData.retryCount += 1;\n this.sendRequest(metaData.file, metaData);\n };\n Uploader.prototype.checkPausePlayAction = function (e) {\n var targetElement = e.target;\n var selectedElement = e.target.parentElement;\n var index = this.fileList.indexOf(selectedElement);\n var fileData = this.filesData[index];\n var metaData = this.getCurrentMetaData(fileData);\n if (targetElement.classList.contains(PAUSE_UPLOAD)) {\n this.pauseUpload(metaData, e);\n targetElement.nextElementSibling.classList.add(DISABLED);\n }\n else if (targetElement.classList.contains(RESUME_UPLOAD)) {\n this.resumeUpload(metaData, e);\n targetElement.nextElementSibling.classList.remove(DISABLED);\n }\n else if (targetElement.classList.contains(RETRY_ICON)) {\n if (metaData.file.status === this.localizedTexts('fileUploadCancel')) {\n this.retryUpload(metaData, false);\n }\n else {\n this.retryUpload(metaData, true);\n }\n }\n };\n Uploader.prototype.retryUpload = function (metaData, fromcanceledStage) {\n if (fromcanceledStage) {\n metaData.end = metaData.end + this.asyncSettings.chunkSize;\n metaData.start = metaData.start + this.asyncSettings.chunkSize;\n this.sendRequest(metaData.file, metaData);\n }\n else {\n metaData.file.statusCode = '1';\n metaData.file.status = this.localizedTexts('readyToUploadMessage');\n this.chunkUpload(metaData.file);\n }\n };\n Uploader.prototype.chunkUploadInProgress = function (e, metaData, custom) {\n var _this = this;\n if (metaData.file.statusCode === '4') {\n return;\n }\n if (metaData.file.statusCode !== '4' && metaData.file.statusCode !== '5') {\n metaData.file.statusCode = '3';\n metaData.file.status = this.localizedTexts('inProgress');\n }\n this.updateMetaData(metaData);\n var liElement = this.getLiElement(metaData.file);\n if (isNullOrUndefined(liElement)) {\n return;\n }\n var target;\n var retryElement = liElement.querySelector('.' + RETRY_ICON);\n if (!isNullOrUndefined(retryElement)) {\n retryElement.classList.add(PAUSE_UPLOAD);\n retryElement.setAttribute('title', this.localizedTexts('pause'));\n retryElement.classList.remove(RETRY_ICON);\n }\n if (!isNullOrUndefined(liElement)) {\n if (!(liElement.querySelectorAll('.' + PROGRESS_WRAPPER).length > 0)) {\n var statusElement = liElement.querySelector('.' + STATUS);\n if (isNullOrUndefined(this.template)) {\n statusElement.classList.add(UPLOAD_INPROGRESS);\n statusElement.classList.remove(UPLOAD_FAILED);\n this.createProgressBar(liElement);\n this.updateProgressBarClasses(liElement, UPLOAD_INPROGRESS);\n }\n var clearIcon = liElement.querySelector('.' + CLEAR_ICON) ? liElement.querySelector('.' + CLEAR_ICON) :\n liElement.querySelector('.' + REMOVE_ICON);\n if (!isNullOrUndefined(clearIcon)) {\n clearIcon.classList.add(ABORT_ICON);\n clearIcon.setAttribute('title', this.localizedTexts('abort'));\n clearIcon.classList.remove(CLEAR_ICON);\n }\n }\n if (!isNaN(Math.round((e.loaded / e.total) * 100)) && isNullOrUndefined(this.template) && metaData.file.statusCode !== '4') {\n var loadedSize = (metaData.chunkIndex * this.asyncSettings.chunkSize);\n var value = Math.min((((loadedSize + e.loaded) / metaData.file.size) * 100), 100);\n this.changeProgressValue(liElement, Math.round(value).toString() + '%');\n }\n if (metaData.chunkIndex === 0) {\n this.checkActionButtonStatus();\n }\n }\n if (isNullOrUndefined(liElement.querySelector('.' + PAUSE_UPLOAD)) && isNullOrUndefined(this.template)) {\n this.pauseButton = createElement('span', { className: 'e-icons e-file-pause-btn', attrs: { 'tabindex': '-1' } });\n if (Browser.info.name === 'msie') {\n this.pauseButton.classList.add('e-msie');\n }\n liElement.insertBefore(this.pauseButton, liElement.querySelector('.' + ABORT_ICON));\n this.pauseButton.setAttribute('title', this.localizedTexts('pause'));\n this.pauseButton.addEventListener('click', function (e) { _this.checkPausePlayAction(e); }, false);\n }\n };\n /**\n * It is used to convert bytes value into kilobytes or megabytes depending on the size based\n * on [binary prefix](https://en.wikipedia.org/wiki/Binary_prefix).\n * @param { number } bytes - specifies the file size in bytes.\n * @returns string\n */\n Uploader.prototype.bytesToSize = function (bytes) {\n var i = -1;\n var size;\n if (!bytes) {\n return '0.0 KB';\n }\n do {\n bytes = bytes / 1024;\n i++;\n } while (bytes > 99);\n if (i >= 2) {\n bytes = bytes * 1024;\n i = 1;\n }\n return Math.max(bytes, 0).toFixed(1) + ' ' + ['KB', 'MB'][i];\n };\n /**\n * Allows you to sort the file data alphabetically based on its file name clearly.\n * @param { FileList } filesData - specifies the files data for upload.\n * @returns File[]\n */\n Uploader.prototype.sortFileList = function (filesData) {\n var files = filesData;\n var fileNames = [];\n for (var i = 0; i < files.length; i++) {\n fileNames.push(files[i].name);\n }\n var sortedFileNames = fileNames.sort();\n var sortedFilesData = [];\n var index = 0;\n for (var _i = 0, sortedFileNames_1 = sortedFileNames; _i < sortedFileNames_1.length; _i++) {\n var name_3 = sortedFileNames_1[_i];\n for (var i = 0; i < files.length; i++) {\n if (name_3 === files[i].name) {\n sortedFilesData.push(files[i]);\n }\n }\n }\n return sortedFilesData;\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers. Also it removes the attributes and classes.\n * @method destroy\n * @return {void}.\n */\n Uploader.prototype.destroy = function () {\n this.element.value = null;\n this.clearAll();\n this.unWireEvents();\n this.unBindDropEvents();\n if (this.multiple) {\n this.element.removeAttribute('multiple');\n }\n if (!this.enabled) {\n this.element.removeAttribute('disabled');\n }\n this.element.removeAttribute('accept');\n this.setInitialAttributes();\n this.uploadWrapper.parentElement.appendChild(this.cloneElement);\n this.cloneElement.classList.remove('e-control', ROOT);\n detach(this.uploadWrapper);\n this.uploadWrapper = null;\n _super.prototype.destroy.call(this);\n };\n /**\n * Allows you to call the upload process manually by calling save URL action.\n * To process the selected files (added in upload queue), pass an empty argument otherwise\n * upload the specific file based on its argument.\n * @param { FileInfo | FileInfo[] } files - specifies the files data for upload.\n * @returns void\n */\n Uploader.prototype.upload = function (files, custom) {\n var uploadFiles = this.validateFileType(files);\n this.uploadFiles(uploadFiles, custom);\n };\n Uploader.prototype.validateFileType = function (files) {\n var uploadFiles = [];\n if (files instanceof Array) {\n uploadFiles = files;\n }\n else {\n uploadFiles.push(files);\n }\n return uploadFiles;\n };\n Uploader.prototype.uploadFiles = function (files, custom) {\n var _this = this;\n var selectedFiles = [];\n if (this.asyncSettings.saveUrl === '' || isNullOrUndefined(this.asyncSettings.saveUrl)) {\n return;\n }\n if (!custom || isNullOrUndefined(custom)) {\n if (!this.multiple) {\n var file = [];\n file.push(files[0]);\n selectedFiles = this.filterfileList(file);\n }\n else {\n selectedFiles = this.filterfileList(files);\n }\n }\n else {\n selectedFiles = files;\n }\n var chunkEnabled = this.checkChunkUpload();\n var _loop_1 = function (i) {\n var ajax = new Ajax(this_1.asyncSettings.saveUrl, 'POST', true, null);\n var eventArgs = {\n fileData: selectedFiles[i],\n customFormData: [],\n cancel: false\n };\n var formData = new FormData();\n ajax.beforeSend = function (e) {\n eventArgs.currentRequest = ajax.httpRequest;\n _this.trigger('uploading', eventArgs);\n if (eventArgs.cancel) {\n _this.eventCancelByArgs(e, eventArgs, selectedFiles[i]);\n }\n _this.updateFormData(formData, eventArgs.customFormData);\n };\n if (selectedFiles[i].statusCode === '1') {\n var name_4 = this_1.element.getAttribute('name');\n formData.append(name_4, selectedFiles[i].rawFile, selectedFiles[i].name);\n if (chunkEnabled && selectedFiles[i].size > this_1.asyncSettings.chunkSize) {\n this_1.chunkUpload(selectedFiles[i], custom);\n }\n else {\n ajax.onLoad = function (e) { _this.uploadComplete(e, selectedFiles[i], custom); return {}; };\n ajax.onUploadProgress = function (e) {\n _this.uploadInProgress(e, selectedFiles[i], custom, ajax);\n return {};\n };\n /* istanbul ignore next */\n ajax.onError = function (e) { _this.uploadFailed(e, selectedFiles[i]); return {}; };\n ajax.send(formData);\n }\n }\n };\n var this_1 = this;\n for (var i = 0; i < selectedFiles.length; i++) {\n _loop_1(i);\n }\n };\n /**\n * Remove the uploaded file from server manually by calling the remove URL action.\n * If you pass an empty argument to this method, the complete file list can be cleared,\n * otherwise remove the specific file based on its argument (“file_data”).\n * @param { FileInfo | FileInfo[] } fileData - specifies the files data to remove from file list/server.\n * @param { boolean } customTemplate - Set true if the component rendering with customize template.\n * @param { boolean } removeDirectly - Set true if files remove without removing event.\n * @returns void\n */\n Uploader.prototype.remove = function (fileData, customTemplate, removeDirectly, args) {\n var removeFiles = [];\n fileData = !isNullOrUndefined(fileData) ? fileData : this.filesData;\n if (fileData instanceof Array) {\n removeFiles = fileData;\n }\n else {\n removeFiles.push(fileData);\n }\n var eventArgs = {\n event: args,\n cancel: false,\n filesData: removeFiles,\n customFormData: [],\n postRawFile: true\n };\n var removeUrl = this.asyncSettings.removeUrl;\n var validUrl = (removeUrl === '' || isNullOrUndefined(removeUrl)) ? false : true;\n for (var _i = 0, removeFiles_1 = removeFiles; _i < removeFiles_1.length; _i++) {\n var files = removeFiles_1[_i];\n if (files.statusCode === '2' && validUrl) {\n this.removeUploadedFile(files, eventArgs, removeDirectly, customTemplate);\n }\n else {\n if (!removeDirectly) {\n this.trigger('removing', eventArgs);\n }\n if (eventArgs.cancel) {\n return;\n }\n this.removeFilesData(files, customTemplate);\n }\n }\n };\n /**\n * Clear all the file entries from list that can be uploaded files or added in upload queue.\n * @returns void\n */\n Uploader.prototype.clearAll = function () {\n if (isNullOrUndefined(this.listParent)) {\n return;\n }\n var eventArgs = {\n cancel: false,\n filesData: this.filesData\n };\n this.trigger('clearing', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n this.clearData();\n };\n /**\n * Get the data of files which are shown in file list.\n * @returns FileInfo[]\n */\n Uploader.prototype.getFilesData = function () {\n return this.filesData;\n };\n /**\n * Pauses the in-progress chunked upload based on the file data.\n * @param { FileInfo | FileInfo[] } fileData - specifies the files data to pause from uploading.\n * @param { boolean } custom - Set true if used custom UI.\n * @returns void\n */\n Uploader.prototype.pause = function (fileData, custom) {\n var fileDataFiles = this.validateFileType(fileData);\n this.pauseUploading(fileDataFiles, custom);\n };\n Uploader.prototype.pauseUploading = function (fileData, custom) {\n var files = this.getFiles(fileData);\n for (var i = 0; i < files.length; i++) {\n if (files[i].statusCode === '3') {\n this.pauseUpload(this.getCurrentMetaData(files[i], null), null, custom);\n }\n }\n };\n Uploader.prototype.getFiles = function (fileData) {\n var files = [];\n if (!isNullOrUndefined(fileData) && !(fileData instanceof Array)) {\n files.push(fileData);\n }\n else {\n files = fileData;\n }\n return files;\n };\n /**\n * Resumes the chunked upload that is previously paused based on the file data.\n * @param { FileInfo | FileInfo[] } fileData - specifies the files data to resume the paused file.\n * @param { boolean } custom - Set true if used custom UI.\n * @returns void\n */\n Uploader.prototype.resume = function (fileData, custom) {\n var fileDataFiles = this.validateFileType(fileData);\n this.resumeFiles(fileDataFiles, custom);\n };\n Uploader.prototype.resumeFiles = function (fileData, custom) {\n var files = this.getFiles(fileData);\n for (var i = 0; i < files.length; i++) {\n if (files[i].statusCode === '4') {\n this.resumeUpload(this.getCurrentMetaData(files[i], null), null, custom);\n }\n }\n };\n /**\n * Retries the canceled or failed file upload based on the file data.\n * @param { FileInfo | FileInfo[] } fileData - specifies the files data to retry the canceled or failed file.\n * @param { boolean } fromcanceledStage - Set true to retry from canceled stage and set false to retry from initial stage.\n * @returns void\n */\n Uploader.prototype.retry = function (fileData, fromcanceledStage) {\n var fileDataFiles = this.validateFileType(fileData);\n this.retryFailedFiles(fileDataFiles, fromcanceledStage);\n };\n Uploader.prototype.retryFailedFiles = function (fileData, fromcanceledStage) {\n var files = this.getFiles(fileData);\n for (var i = 0; i < files.length; i++) {\n if (files[i].statusCode === '5' || files[i].statusCode === '0') {\n if (this.asyncSettings.chunkSize > 0) {\n this.retryUpload(this.getCurrentMetaData(files[i], null), fromcanceledStage);\n }\n else {\n var liElement = this.fileList[this.filesData.indexOf(files[i])];\n this.reloadcanceledFile(null, files[i], liElement);\n }\n }\n }\n };\n /**\n * Stops the in-progress chunked upload based on the file data.\n * When the file upload is canceled, the partially uploaded file is removed from server.\n * @param { FileInfo | FileInfo[] } fileData - specifies the files data to cancel the progressing file.\n * @returns void\n */\n Uploader.prototype.cancel = function (fileData) {\n var fileDataFiles = this.validateFileType(fileData);\n this.cancelUpload(fileDataFiles);\n };\n Uploader.prototype.cancelUpload = function (fileData) {\n var files = this.getFiles(fileData);\n for (var i = 0; i < files.length; i++) {\n if (files[i].statusCode === '3') {\n var metaData = this.getCurrentMetaData(files[i], null);\n metaData.file.statusCode = '5';\n metaData.file.status = this.localizedTexts('fileUploadCancel');\n this.updateMetaData(metaData);\n var liElement = this.getLiElement(files[i]);\n if (!isNullOrUndefined(liElement) && isNullOrUndefined(this.template)) {\n var spinnerTarget = liElement.querySelector('.' + ABORT_ICON);\n createSpinner({ target: spinnerTarget, width: '20px' });\n showSpinner(spinnerTarget);\n }\n }\n }\n };\n __decorate([\n Complex({ saveUrl: '', removeUrl: '' }, AsyncSettings)\n ], Uploader.prototype, \"asyncSettings\", void 0);\n __decorate([\n Property(false)\n ], Uploader.prototype, \"enableRtl\", void 0);\n __decorate([\n Property(true)\n ], Uploader.prototype, \"enabled\", void 0);\n __decorate([\n Property(null)\n ], Uploader.prototype, \"template\", void 0);\n __decorate([\n Property(true)\n ], Uploader.prototype, \"multiple\", void 0);\n __decorate([\n Property(true)\n ], Uploader.prototype, \"autoUpload\", void 0);\n __decorate([\n Complex({}, ButtonsProps)\n ], Uploader.prototype, \"buttons\", void 0);\n __decorate([\n Property('')\n ], Uploader.prototype, \"allowedExtensions\", void 0);\n __decorate([\n Property(0)\n ], Uploader.prototype, \"minFileSize\", void 0);\n __decorate([\n Property(30000000)\n ], Uploader.prototype, \"maxFileSize\", void 0);\n __decorate([\n Property(null)\n ], Uploader.prototype, \"dropArea\", void 0);\n __decorate([\n Collection([{}], FilesProp)\n ], Uploader.prototype, \"files\", void 0);\n __decorate([\n Property(true)\n ], Uploader.prototype, \"showFileList\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"selected\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"uploading\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"success\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"failure\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"removing\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"clearing\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"progress\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"chunkSuccess\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"chunkFailure\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"canceling\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"pausing\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"resuming\", void 0);\n Uploader = __decorate([\n NotifyPropertyChanges\n ], Uploader);\n return Uploader;\n}(Component));\nexport { Uploader };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Event, NotifyPropertyChanges, Property } from '@syncfusion/ej2-base';\nimport { Browser, closest, createElement, detach, EventHandler, getInstance, select, selectAll, formatUnit } from '@syncfusion/ej2-base';\nimport { addClass, attributes, classList, isNullOrUndefined, L10n } from '@syncfusion/ej2-base';\nimport { remove, removeClass, rippleEffect } from '@syncfusion/ej2-base';\nimport { SplitButton, getModel } from '@syncfusion/ej2-splitbuttons';\nimport { Tooltip, getZindexPartial, Popup } from '@syncfusion/ej2-popups';\nimport { Input } from './../input/index';\nimport { NumericTextBox } from './../numerictextbox/index';\nimport { Slider } from './../slider/slider';\nvar APPLY = 'e-apply';\nvar CANCEL = 'e-cancel';\nvar CURRENT = 'e-current';\nvar CONTAINER = 'e-container';\nvar CTRLBTN = 'e-ctrl-btn';\nvar CTRLSWITCH = 'e-switch-ctrl-btn';\nvar DISABLED = 'e-disabled';\nvar FORMATSWITCH = 'e-value-switch-btn';\nvar HANDLER = 'e-handler';\nvar HEX = 'e-hex';\nvar HSVAREA = 'e-hsv-color';\nvar HSVCONTAINER = 'e-hsv-container';\nvar INPUTWRAPPER = 'e-selected-value';\nvar MODESWITCH = 'e-mode-switch-btn';\nvar NOCOLOR = 'e-nocolor-item';\nvar PALETTES = 'e-palette';\nvar PALETTECONTENT = 'e-color-palette';\nvar PICKERCONTENT = 'e-color-picker';\nvar PREVIEW = 'e-preview-container';\nvar PREVIOUS = 'e-previous';\nvar RTL = 'e-rtl';\nvar SELECT = 'e-selected';\nvar SPLITPREVIEW = 'e-split-preview';\nvar TILE = 'e-tile';\nvar TOHSV = 'e-to-hsv';\nvar presets = {\n default: ['#000000', '#f44336', '#e91e63', '#9c27b0', '#673ab7', '#2196f3', '#03a9f4', '#00bcd4', '#009688', '#ffeb3b',\n '#ffffff', '#ffebee', '#fce4ec', '#f3e5f5', '#ede7f6', '#e3f2fd', '#e1f5fe', '#e0f7fa', '#e0f2f1', '#fffde7',\n '#f2f2f2', '#ffcdd2', '#f8bbd0', '#e1bee7', '#d1c4e9', '#bbdefb', '#b3e5fc', '#b2ebf2', '#b2dfdb', '#fff9c4',\n '#e6e6e6', '#ef9a9a', '#f48fb1', '#ce93d8', '#b39ddb', '#90caf9', '#81d4fa', '#80deea', '#80cbc4', '#fff59d',\n '#cccccc', '#e57373', '#f06292', '#ba68c8', '#9575cd', '#64b5f6', '#4fc3f7', '#4dd0e1', '#4db6ac', '#fff176',\n '#b3b3b3', '#ef5350', '#ec407a', '#ab47bc', '#7e57c2', '#42a5f5', '#29b6f6', '#26c6da', '#26a69a', '#ffee58',\n '#999999', '#e53935', '#d81b60', '#8e24aa', '#5e35b1', '#1e88e5', '#039be5', '#00acc1', '#00897b', '#fdd835',\n '#808080', '#d32f2f', '#c2185b', '#7b1fa2', '#512da8', '#1976d2', '#0288d1', '#0097a7', '#00796b', '#fbc02d',\n '#666666', '#c62828', '#ad1457', '#6a1b9a', '#4527a0', '#1565c0', '#0277bd', '#00838f', '#00695c', '#f9a825',\n '#4d4d4d', '#b71c1c', '#880e4f', '#4a148c', '#311b92', '#0d47a1', '#01579b', '#006064', '#004d40', '#f57f17']\n};\n/**\n * ColorPicker component is a user interface to select and adjust color values. It provides supports for various\n * color specification like Red Green Blue, Hue Saturation Value and Hex codes.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar ColorPicker = /** @class */ (function (_super) {\n __extends(ColorPicker, _super);\n function ColorPicker(options, element) {\n return _super.call(this, options, element) || this;\n }\n ColorPicker.prototype.preRender = function () {\n var localeText = { Apply: 'Apply', Cancel: 'Cancel', ModeSwitcher: 'Switch Mode' };\n this.l10n = new L10n('colorpicker', localeText, this.locale);\n };\n /**\n * To Initialize the component rendering\n * @private\n */\n ColorPicker.prototype.render = function () {\n this.initWrapper();\n if (this.inline) {\n this.createWidget();\n }\n else {\n this.createSplitBtn();\n }\n };\n ColorPicker.prototype.initWrapper = function () {\n var wrapper = createElement('div', { className: 'e-' + this.getModuleName() + '-wrapper' });\n this.element.parentNode.insertBefore(wrapper, this.element);\n wrapper.appendChild(this.element);\n attributes(this.element, { 'tabindex': '-1', 'spellcheck': 'false' });\n this.container = createElement('div', { className: CONTAINER });\n this.getWrapper().appendChild(this.container);\n var value = this.value;\n this.element.value = value.slice(0, 7);\n if (this.mode === 'Picker') {\n value = this.roundValue(value);\n }\n this.setProperties({ 'value': value }, true);\n if (this.enableRtl) {\n wrapper.classList.add(RTL);\n }\n if (this.cssClass) {\n addClass([wrapper], this.cssClass.split(' '));\n }\n this.tileRipple = rippleEffect(this.container, { selector: '.' + TILE });\n this.ctrlBtnRipple = rippleEffect(this.container, { selector: '.e-btn' });\n };\n ColorPicker.prototype.getWrapper = function () {\n return this.element.parentElement;\n };\n ColorPicker.prototype.createWidget = function () {\n if (this.mode === 'Palette') {\n this.createPalette();\n if (!this.inline) {\n this.firstPaletteFocus();\n }\n }\n else {\n this.createPicker();\n if (!this.inline) {\n this.getDragHandler().focus();\n }\n }\n var wrapper = this.getWrapper();\n if ((this.isPicker() && !wrapper.classList.contains('e-hide-value')) || wrapper.classList.contains('e-show-value')) {\n this.createInput();\n }\n this.createCtrlBtn();\n if (!this.disabled) {\n this.wireEvents();\n }\n if (this.inline && this.disabled) {\n this.toggleDisabled(true);\n }\n if (Browser.isDevice) {\n this.refreshPopupPos();\n }\n };\n ColorPicker.prototype.createSplitBtn = function () {\n var _this = this;\n var splitButton = createElement('button', { className: 'e-split-colorpicker' });\n this.getWrapper().appendChild(splitButton);\n this.splitBtn = new SplitButton({\n iconCss: 'e-selected-color',\n target: this.container,\n disabled: this.disabled,\n enableRtl: this.enableRtl,\n beforeOpen: this.beforeOpenFn.bind(this),\n open: this.onOpen.bind(this),\n beforeClose: this.popupClose.bind(this),\n click: function (args) {\n _this.trigger('change', {\n currentValue: { hex: _this.value.slice(0, 7), rgba: _this.convertToRgbString(_this.hexToRgb(_this.value)) },\n previousValue: { hex: null, rgba: null }\n });\n }\n }, splitButton);\n var preview = createElement('span', { className: SPLITPREVIEW });\n select('.e-selected-color', splitButton).appendChild(preview);\n preview.style.backgroundColor = this.convertToRgbString(this.hexToRgb(this.value));\n var popupEle = this.getPopupEle();\n addClass([popupEle], 'e-colorpicker-popup');\n if (this.cssClass) {\n addClass([popupEle], this.cssClass.split(' '));\n }\n if (Browser.isDevice) {\n var popupInst = this.getPopupInst();\n popupInst.relateTo = document.body;\n popupInst.position = { X: 'center', Y: 'center' };\n popupInst.targetType = 'container';\n popupInst.collision = { X: 'fit', Y: 'fit' };\n popupInst.offsetY = 4;\n }\n };\n ColorPicker.prototype.onOpen = function (args) {\n this.trigger('open', { element: this.container });\n };\n ColorPicker.prototype.getPopupInst = function () {\n return getInstance(this.getPopupEle(), Popup);\n };\n ColorPicker.prototype.beforeOpenFn = function (args) {\n var beforeOpenArgs = { element: this.container, event: args.event, cancel: false };\n this.trigger('beforeOpen', beforeOpenArgs);\n args.cancel = beforeOpenArgs.cancel;\n if (!beforeOpenArgs.cancel) {\n var popupEle = this.getPopupEle();\n popupEle.style.display = 'block';\n this.createWidget();\n popupEle.style.display = '';\n if (Browser.isDevice) {\n this.modal = createElement('div');\n this.modal.className = 'e-' + this.getModuleName() + ' e-modal';\n this.modal.style.display = 'none';\n document.body.insertBefore(this.modal, popupEle);\n document.body.className += ' e-colorpicker-overflow';\n this.modal.style.display = 'block';\n }\n }\n };\n ColorPicker.prototype.popupClose = function (args) {\n var beforeCloseArgs = { element: this.container, event: args.event, cancel: false };\n this.trigger('beforeClose', beforeCloseArgs);\n args.cancel = beforeCloseArgs.cancel;\n if (!beforeCloseArgs.cancel) {\n if (args.event && Browser.isDevice && args.event.target === this.modal) {\n args.cancel = true;\n }\n else {\n this.unWireEvents();\n this.destroyOtherComp();\n this.container.style.width = '';\n select('.' + SPLITPREVIEW, this.splitBtn.element).style.backgroundColor\n = this.convertToRgbString(this.hexToRgb(this.value));\n this.container.innerHTML = '';\n removeClass([this.container], [PICKERCONTENT, PALETTECONTENT]);\n if (Browser.isDevice && this.modal) {\n removeClass([document.body], 'e-colorpicker-overflow');\n this.modal.style.display = 'none';\n this.modal.outerHTML = '';\n this.modal = null;\n }\n }\n }\n };\n ColorPicker.prototype.createPalette = function () {\n classList(this.container, [PALETTECONTENT], [PICKERCONTENT]);\n if (this.presetColors) {\n var paletteGroup = createElement('div', { className: 'e-custom-palette' });\n this.appendElement(paletteGroup);\n var keys = Object.keys(this.presetColors);\n if (keys.length === 1) {\n this.appendPalette(this.presetColors[keys[0]], keys[0], paletteGroup);\n }\n else {\n for (var i = 0, len = keys.length; i < len; i++) {\n this.appendPalette(this.presetColors[keys[i]], keys[i], paletteGroup);\n }\n }\n if (selectAll('.e-row', paletteGroup).length > 10) {\n addClass([paletteGroup], 'e-palette-group');\n }\n }\n else {\n this.appendPalette(presets.default, 'default');\n }\n if (this.mode === 'Palette' && !this.modeSwitcher && this.noColor) {\n this.setNoColor();\n }\n var width = parseInt(getComputedStyle(this.container).borderBottomWidth, 10);\n this.container.style.width = formatUnit(this.container.children[0].offsetWidth + width + width);\n this.rgb = this.hexToRgb(this.roundValue(this.value));\n this.hsv = this.rgbToHsv.apply(this, this.rgb);\n };\n ColorPicker.prototype.firstPaletteFocus = function () {\n if (!select('.' + SELECT, this.container.children[0])) {\n selectAll('.' + PALETTES, this.container)[0].focus();\n }\n };\n ColorPicker.prototype.appendPalette = function (colors, key, refEle) {\n var palette = createElement('div', { className: PALETTES, attrs: { 'tabindex': '0' } });\n if (refEle) {\n refEle.appendChild(palette);\n }\n else {\n this.appendElement(palette);\n }\n var row;\n var tile;\n for (var i = 0, len = colors.length; i < len; i++) {\n if (i === 0 || i % this.columns === 0) {\n row = createElement('div', {\n className: 'e-row', attrs: { 'role': 'row' }\n });\n palette.appendChild(row);\n }\n tile = createElement('span', {\n className: TILE, attrs: { 'role': 'gridcell', 'aria-label': colors[i], 'aria-selected': 'false' }\n });\n this.trigger('beforeTileRender', { element: tile, presetName: key, value: colors[i] });\n row.appendChild(tile);\n if (this.value.slice(0, colors[i].length).toLowerCase() === colors[i].toLowerCase()) {\n this.addTileSelection(tile);\n palette.focus();\n }\n tile.style.backgroundColor = colors[i];\n }\n };\n ColorPicker.prototype.setNoColor = function () {\n var noColorEle = selectAll('.e-row')[0].children[0];\n noColorEle.classList.add(NOCOLOR);\n if (!this.value) {\n noColorEle.classList.add(SELECT);\n closest(noColorEle, '.' + PALETTES).focus();\n }\n ['aria-selected', 'aria-label'].forEach(function (attr) { noColorEle.removeAttribute(attr); });\n noColorEle.style.backgroundColor = '';\n };\n ColorPicker.prototype.appendElement = function (ele, insertPos) {\n if (insertPos === void 0) { insertPos = 0; }\n var refEle = this.container.children[insertPos];\n refEle ? this.container.insertBefore(ele, refEle) : this.container.appendChild(ele);\n };\n ColorPicker.prototype.addTileSelection = function (ele) {\n ele.classList.add(SELECT);\n ele.setAttribute('aria-selected', 'true');\n };\n ColorPicker.prototype.createPicker = function () {\n classList(this.container, [PICKERCONTENT], [PALETTECONTENT]);\n var hsvContainer = createElement('div', { className: HSVCONTAINER });\n this.appendElement(hsvContainer);\n hsvContainer.appendChild(createElement('div', { className: HSVAREA }));\n var dragHandler = createElement('span', { className: HANDLER, attrs: { 'tabindex': '0' } });\n hsvContainer.appendChild(dragHandler);\n this.rgb = this.hexToRgb(this.value);\n this.hsv = this.rgbToHsv.apply(this, this.rgb);\n this.setHsvContainerBg();\n this.setHandlerPosition();\n this.createSlider();\n this.createDragTooltip();\n };\n ColorPicker.prototype.setHsvContainerBg = function (h) {\n if (h === void 0) { h = this.hsv[0]; }\n this.getHsvContainer().style.backgroundColor = this.convertToRgbString(this.hsvToRgb(h, 100, 100, 1));\n };\n ColorPicker.prototype.getHsvContainer = function () {\n return select('.' + HSVCONTAINER, this.container);\n };\n ColorPicker.prototype.setHandlerPosition = function () {\n var dragHandler = this.getDragHandler();\n var hsvArea = select('.' + HSVAREA, this.container);\n if (this.enableRtl) {\n dragHandler.style.left = formatUnit(hsvArea.offsetWidth * Math.abs(100 - this.hsv[1]) / 100);\n }\n else {\n dragHandler.style.left = formatUnit(hsvArea.offsetWidth * this.hsv[1] / 100);\n }\n dragHandler.style.top = formatUnit(hsvArea.offsetHeight * (100 - this.hsv[2]) / 100);\n };\n ColorPicker.prototype.createSlider = function () {\n var sliderPreviewWrapper = createElement('div', { className: 'e-slider-preview' });\n this.appendElement(sliderPreviewWrapper, 1);\n this.createPreview(sliderPreviewWrapper);\n var sliderWrapper = createElement('div', { className: 'e-colorpicker-slider' });\n sliderPreviewWrapper.insertBefore(sliderWrapper, sliderPreviewWrapper.children[0]);\n var slider = createElement('div', { className: 'e-hue-slider' });\n sliderWrapper.appendChild(slider);\n this.hueSlider = new Slider({\n value: this.hsv[0],\n min: 0,\n max: 359,\n enableRtl: this.enableRtl,\n enabled: !this.disabled,\n change: this.hueChange.bind(this)\n }, slider);\n slider = createElement('div', { className: 'e-opacity-slider' });\n sliderWrapper.appendChild(slider);\n this.opacitySlider = new Slider({\n value: this.rgb[3] * 100,\n min: 0,\n max: 100,\n enableRtl: this.enableRtl,\n enabled: !this.disabled,\n change: this.opacityChange.bind(this)\n }, slider);\n var opacityBgTrack = createElement('div', { className: 'e-opacity-empty-track' });\n slider.appendChild(opacityBgTrack);\n this.updateOpacitySliderBg();\n };\n ColorPicker.prototype.updateOpacitySliderBg = function () {\n var direction = this.enableRtl ? 'to left' : 'to right';\n select('.e-slider-track', this.opacitySlider.element).style.background =\n 'linear-gradient(' + direction + ', rgba(' + this.rgb.slice(0, 3) + ', 0) 0%, ' +\n this.convertToRgbString(this.rgb.slice(0, 3)) + ' 100%)';\n };\n ColorPicker.prototype.hueChange = function (args) {\n this.hsv[0] = args.value;\n this.setHsvContainerBg();\n this.convertToOtherFormat();\n };\n ColorPicker.prototype.opacityChange = function (args) {\n var value = args.value;\n var pValue = this.rgbToHex(this.rgb);\n this.hsv[3] = value / 100;\n this.rgb[3] = value / 100;\n var cValue = this.rgbToHex(this.rgb);\n if (!this.getWrapper().classList.contains('e-hide-value')) {\n getInstance(select('.e-opacity-value', this.container), NumericTextBox).value = value;\n }\n var rgb = this.convertToRgbString(this.rgb);\n this.updatePreview(rgb);\n this.triggerEvent(cValue, pValue, rgb);\n };\n ColorPicker.prototype.createPreview = function (parentEle) {\n var previewContainer = createElement('div', { className: PREVIEW });\n parentEle.appendChild(previewContainer);\n var preview = createElement('span', { className: 'e-preview ' + CURRENT });\n previewContainer.appendChild(preview);\n var colorValue = this.convertToRgbString(this.rgb);\n preview.style.backgroundColor = colorValue;\n preview = createElement('span', { className: 'e-preview ' + PREVIOUS });\n previewContainer.appendChild(preview);\n preview.style.backgroundColor = colorValue;\n };\n ColorPicker.prototype.isPicker = function () {\n return !this.container.classList.contains(PALETTECONTENT);\n };\n ColorPicker.prototype.getPopupEle = function () {\n return this.container.parentElement;\n };\n ColorPicker.prototype.getNumericTextBoxModel = function (value, label, max) {\n var _this = this;\n return {\n value: value,\n placeholder: label,\n min: 0,\n max: max,\n format: '###.##',\n showSpinButton: false,\n floatLabelType: 'Always',\n enableRtl: this.enableRtl,\n enabled: !this.disabled,\n readonly: this.isPicker() ? false : true,\n change: function (args) {\n if (args.event) {\n _this.inputHandler(args.event);\n }\n }\n };\n };\n ColorPicker.prototype.createInput = function (child) {\n if (child === void 0) { child = 2; }\n var inputWrap = createElement('div', { className: INPUTWRAPPER });\n this.appendElement(inputWrap, child);\n var container = createElement('div', { className: 'e-input-container' });\n inputWrap.appendChild(container);\n inputWrap.appendChild(createElement('button', { className: 'e-icons e-btn e-flat e-icon-btn ' + FORMATSWITCH + ' ' + TOHSV }));\n var hexInput = createElement('input', {\n className: HEX,\n attrs: { 'maxlength': '7', 'spellcheck': 'false' }\n });\n if (!this.isPicker()) {\n Input.setReadonly(true, hexInput);\n }\n container.appendChild(hexInput);\n Input.createInput({\n element: hexInput,\n floatLabelType: 'Always',\n properties: {\n placeholder: 'HEX',\n enableRtl: this.enableRtl,\n enabled: !this.disabled\n }\n });\n Input.setValue(this.value.slice(0, 7), hexInput);\n var numericInput;\n var label = 'RGB';\n var clsName = ['rh', 'gs', 'bv'];\n for (var i = 0; i < 3; i++) {\n numericInput = new NumericTextBox(this.getNumericTextBoxModel(this.rgb[i], label[i], 255), container.appendChild(createElement('input', { className: 'e-' + clsName[i] + '-value' })));\n }\n numericInput = new NumericTextBox(this.getNumericTextBoxModel(this.rgb[3] * 100, 'A', 100), container.appendChild(createElement('input', { className: 'e-opacity-value' })));\n };\n ColorPicker.prototype.createCtrlBtn = function () {\n if (this.modeSwitcher || this.showButtons) {\n this.l10n.setLocale(this.locale);\n var btnWrapper = createElement('div', { className: CTRLSWITCH });\n this.container.appendChild(btnWrapper);\n if (this.showButtons) {\n var controlBtnWrapper = createElement('div', { className: CTRLBTN });\n btnWrapper.appendChild(controlBtnWrapper);\n var apply = this.l10n.getConstant('Apply');\n controlBtnWrapper.appendChild(createElement('button', {\n innerHTML: apply,\n className: 'e-btn e-flat e-primary e-small ' + APPLY,\n attrs: { 'title': apply }\n }));\n var cancel = this.l10n.getConstant('Cancel');\n controlBtnWrapper.appendChild(createElement('button', {\n innerHTML: cancel,\n className: 'e-btn e-flat e-small ' + CANCEL,\n attrs: { 'title': cancel }\n }));\n }\n if (this.modeSwitcher) {\n this.appendModeSwitchBtn();\n }\n }\n };\n ColorPicker.prototype.appendModeSwitchBtn = function () {\n var modeSwitcher = createElement('button', {\n className: 'e-icons e-btn e-flat e-icon-btn ' + MODESWITCH, attrs: { title: this.l10n.getConstant('ModeSwitcher') }\n });\n select('.' + CTRLSWITCH, this.container).insertBefore(modeSwitcher, select('.' + CTRLBTN, this.container));\n };\n ColorPicker.prototype.createDragTooltip = function () {\n var _this = this;\n var tooltip = new Tooltip({\n opensOn: 'Custom',\n showTipPointer: false,\n cssClass: 'e-color-picker-tooltip',\n beforeOpen: function (args) {\n _this.tooltipEle = args.element;\n },\n animation: { open: { effect: 'None' }, close: { effect: 'None' } }\n });\n tooltip.appendTo(this.container);\n tooltip.open(this.container);\n this.tooltipEle.style.zIndex = getZindexPartial(this.tooltipEle).toString();\n select('.e-tip-content', this.tooltipEle).appendChild(createElement('div', { className: 'e-tip-transparent' }));\n };\n ColorPicker.prototype.getTooltipInst = function () {\n return getInstance(this.container, Tooltip);\n };\n ColorPicker.prototype.setTooltipOffset = function (value) {\n this.getTooltipInst().offsetY = value;\n };\n ColorPicker.prototype.toggleDisabled = function (enable) {\n enable ? this.getWrapper().classList.add(DISABLED) : this.getWrapper().classList.remove(DISABLED);\n if (this.showButtons) {\n ([].slice.call(selectAll('.e-btn', this.container))).forEach(function (ele) {\n enable ? attributes(ele, { 'disabled': '' }) : ele.removeAttribute('disabled');\n });\n }\n };\n ColorPicker.prototype.convertToRgbString = function (rgb) {\n return rgb.length ? rgb.length === 4 ? 'rgba(' + rgb.join() + ')' : 'rgb(' + rgb.join() + ')' : '';\n };\n ColorPicker.prototype.convertToHsvString = function (hsv) {\n return hsv.length === 4 ? 'hsva(' + hsv.join() + ')' : 'hsv(' + hsv.join() + ')';\n };\n ColorPicker.prototype.updateHsv = function () {\n this.hsv[1] = this.hsv[1] > 100 ? 100 : this.hsv[1];\n this.hsv[2] = this.hsv[2] > 100 ? 100 : this.hsv[2];\n this.setHandlerPosition();\n };\n ColorPicker.prototype.convertToOtherFormat = function (isKey) {\n if (isKey === void 0) { isKey = false; }\n var pValue = this.rgbToHex(this.rgb);\n this.rgb = this.hsvToRgb.apply(this, this.hsv);\n var cValue = this.rgbToHex(this.rgb);\n var rgba = this.convertToRgbString(this.rgb);\n this.updatePreview(rgba);\n this.updateInput(cValue);\n this.triggerEvent(cValue, pValue, rgba, isKey);\n };\n ColorPicker.prototype.updateInput = function (value) {\n if (!this.getWrapper().classList.contains('e-hide-value')) {\n Input.setValue(value.substr(0, 7), select('.' + HEX, this.container));\n if (select('.' + FORMATSWITCH, this.container).classList.contains(TOHSV)) {\n this.updateValue(this.rgb, false);\n }\n else {\n this.updateValue(this.hsv, false);\n }\n }\n };\n ColorPicker.prototype.updatePreview = function (value) {\n this.updateOpacitySliderBg();\n select('.e-tip-transparent', this.tooltipEle).style.backgroundColor = value;\n select('.' + PREVIEW + ' .' + CURRENT, this.container).style.backgroundColor = value;\n select('.' + PREVIEW + ' .' + PREVIOUS, this.container).style.backgroundColor\n = this.convertToRgbString(this.hexToRgb(this.value));\n };\n ColorPicker.prototype.getDragHandler = function () {\n return select('.' + HANDLER, this.container);\n };\n ColorPicker.prototype.removeTileSelection = function () {\n var selectedEle = [].slice.call(selectAll('.' + SELECT, this.container.children[0]));\n selectedEle.forEach(function (ele) {\n ele.classList.remove(SELECT);\n ele.setAttribute('aria-selected', 'false');\n });\n };\n ColorPicker.prototype.convertRgbToNumberArray = function (value) {\n return (value.slice(value.indexOf('(') + 1, value.indexOf(')'))).split(',').map(function (n, i) {\n return (i !== 3) ? parseInt(n, 10) : parseFloat(n);\n });\n };\n /**\n * To get color value in specified type.\n * @param value - Specify the color value.\n * @param type - Specify the converted color value type.\n * @method getValue\n * @return {string}\n */\n ColorPicker.prototype.getValue = function (value, type) {\n if (!value) {\n value = this.value;\n }\n type = !type ? 'hex' : type.toLowerCase();\n if (value[0] === 'r') {\n var cValue = this.convertRgbToNumberArray(value);\n if (type === 'hex' || type === 'hexa') {\n var hex = this.rgbToHex(cValue);\n return type === 'hex' ? hex.slice(0, 7) : hex;\n }\n else {\n if (type === 'hsv') {\n return this.convertToHsvString(this.rgbToHsv.apply(this, cValue.slice(0, 3)));\n }\n else {\n if (type === 'hsva') {\n return this.convertToHsvString(this.rgbToHsv.apply(this, cValue));\n }\n else {\n return 'null';\n }\n }\n }\n }\n else {\n if (value[0] === 'h') {\n var cValue = this.hsvToRgb.apply(this, this.convertRgbToNumberArray(value));\n if (type === 'rgba') {\n return this.convertToRgbString(cValue);\n }\n else {\n if (type === 'hex' || type === 'hexa') {\n var hex = this.rgbToHex(cValue);\n return type === 'hex' ? hex.slice(0, 7) : hex;\n }\n else {\n if (type === 'rgb') {\n return this.convertToRgbString(cValue.slice(0, 3));\n }\n else {\n return 'null';\n }\n }\n }\n }\n else {\n value = this.roundValue(value);\n var rgb = this.hexToRgb(value);\n if (type === 'rgb' || type === 'hsv') {\n rgb = rgb.slice(0, 3);\n }\n if (type === 'rgba' || type === 'rgb') {\n return this.convertToRgbString(rgb);\n }\n else {\n if (type === 'hsva' || type === 'hsv') {\n return this.convertToHsvString(this.rgbToHsv.apply(this, rgb));\n }\n else {\n if (type === 'hex') {\n return value.slice(0, 7);\n }\n else {\n if (type === 'a') {\n return rgb[3].toString();\n }\n else {\n return 'null';\n }\n }\n }\n }\n }\n }\n };\n /**\n * To show/hide ColorPicker popup based on current state of the SplitButton.\n * @method toggle\n * @return {void}\n */\n ColorPicker.prototype.toggle = function () {\n this.splitBtn.toggle();\n };\n /**\n * Get component name.\n * @returns string\n * @private\n */\n ColorPicker.prototype.getModuleName = function () {\n return 'colorpicker';\n };\n /**\n * Gets the properties to be maintained in the persisted state.\n * @return {string}\n */\n ColorPicker.prototype.getPersistData = function () {\n return this.addOnPersist(['value']);\n };\n ColorPicker.prototype.wireEvents = function () {\n if (this.isPicker()) {\n var dragHandler = this.getDragHandler();\n EventHandler.add(dragHandler, 'keydown', this.pickerKeyDown, this);\n EventHandler.add(this.getHsvContainer(), 'mousedown touchstart', this.handlerDown, this);\n if (this.modeSwitcher || this.showButtons) {\n this.addCtrlSwitchEvent();\n }\n if (!this.getWrapper().classList.contains('e-hide-value')) {\n this.addvalueEventHandler();\n }\n EventHandler.add(select('.' + PREVIOUS, this.container), 'click', this.previewHandler, this);\n }\n else {\n EventHandler.add(this.container, 'click', this.paletteClickHandler, this);\n EventHandler.add(this.container, 'keydown', this.paletteKeyDown, this);\n }\n };\n ColorPicker.prototype.addCtrlSwitchEvent = function () {\n EventHandler.add(select('.' + CTRLSWITCH, this.container), 'click', this.btnClickHandler, this);\n };\n ColorPicker.prototype.addInputEvent = function () {\n EventHandler.add(select('.' + HEX, this.container), 'input', this.inputHandler, this);\n };\n ColorPicker.prototype.addvalueEventHandler = function () {\n this.addInputEvent();\n EventHandler.add(select('.' + FORMATSWITCH, this.container), 'click', this.formatSwitchHandler, this);\n };\n ColorPicker.prototype.pickerKeyDown = function (e) {\n switch (e.keyCode) {\n case 39:\n this.handlerDragPosition(1, this.enableRtl ? -1 : 1, e);\n break;\n case 37:\n this.handlerDragPosition(1, this.enableRtl ? 1 : -1, e);\n break;\n case 38:\n this.handlerDragPosition(2, 1, e);\n break;\n case 40:\n this.handlerDragPosition(2, -1, e);\n break;\n case 13:\n e.preventDefault();\n var cValue = this.rgbToHex(this.rgb);\n this.enterKeyHandler(cValue);\n }\n };\n ColorPicker.prototype.enterKeyHandler = function (value) {\n this.triggerChangeEvent(value);\n if (!this.inline) {\n this.toggle();\n this.splitBtn.element.focus();\n }\n };\n ColorPicker.prototype.triggerChangeEvent = function (value) {\n var hex = value.slice(0, 7);\n this.trigger('change', {\n currentValue: { hex: hex, rgba: this.convertToRgbString(this.rgb) },\n previousValue: { hex: this.value.slice(0, 7), rgba: this.convertToRgbString(this.hexToRgb(this.value)) }\n });\n this.setProperties({ 'value': value }, true);\n this.element.value = hex ? hex : '#000000';\n };\n ColorPicker.prototype.handlerDragPosition = function (prob, value, e) {\n e.preventDefault();\n this.hsv[prob] += value * (e.ctrlKey ? 1 : 3);\n if (this.hsv[prob] < 0) {\n this.hsv[prob] = 0;\n }\n this.updateHsv();\n this.convertToOtherFormat(true);\n };\n ColorPicker.prototype.handlerDown = function (e) {\n if (e.type !== 'touchstart') {\n e.preventDefault();\n }\n var x;\n var y;\n if (e.type === 'mousedown') {\n this.clientX = Math.abs(e.pageX - pageXOffset);\n this.clientY = Math.abs(e.pageY - pageYOffset);\n this.setTooltipOffset(8);\n }\n else {\n this.clientX = Math.abs(e.changedTouches[0].pageX - pageXOffset);\n this.clientY = Math.abs(e.changedTouches[0].pageY - pageYOffset);\n this.setTooltipOffset(-8);\n }\n this.setHsv(this.clientX, this.clientY);\n this.getDragHandler().style.transition = 'left .4s cubic-bezier(.25, .8, .25, 1), top .4s cubic-bezier(.25, .8, .25, 1)';\n this.updateHsv();\n this.convertToOtherFormat();\n this.getDragHandler().focus();\n EventHandler.add(document, 'mousemove touchmove', this.handlerMove, this);\n EventHandler.add(document, 'mouseup touchend', this.handlerEnd, this);\n };\n ColorPicker.prototype.handlerMove = function (e) {\n if (e.type !== 'touchmove') {\n e.preventDefault();\n }\n var x;\n var y;\n if (e.type === 'mousemove') {\n x = Math.abs(e.pageX - pageXOffset);\n y = Math.abs(e.pageY - pageYOffset);\n }\n else {\n x = Math.abs(e.changedTouches[0].pageX - pageXOffset);\n y = Math.abs(e.changedTouches[0].pageY - pageYOffset);\n }\n this.setHsv(x, y);\n var dragHandler = this.getDragHandler();\n var left = parseInt(dragHandler.style.left, 10);\n var top = parseInt(dragHandler.style.top, 10);\n this.updateHsv();\n this.convertToOtherFormat();\n this.getTooltipInst().refresh(dragHandler);\n if (!this.tooltipEle.style.transform) {\n if (Math.abs(this.clientX - x) > 8 || Math.abs(this.clientY - y) > 8) {\n select('.' + HSVAREA, this.container).style.cursor = 'pointer';\n dragHandler.style.transition = 'none';\n if (!this.inline) {\n this.tooltipEle.style.zIndex = (parseInt(this.getPopupEle().style.zIndex, 10) + 1).toString();\n }\n this.tooltipEle.style.transform = 'rotate(45deg)';\n dragHandler.classList.add('e-hide-handler');\n }\n }\n };\n ColorPicker.prototype.setHsv = function (clientX, clientY) {\n var ele = select('.' + HSVAREA, this.container);\n var position = ele.getBoundingClientRect();\n if (this.enableRtl) {\n clientX = clientX > position.right ? 0 : Math.abs(clientX - position.right);\n }\n else {\n clientX = clientX > position.left ? Math.abs(clientX - position.left) : 0;\n }\n clientY = clientY > position.top ? Math.abs(clientY - position.top) : 0;\n this.hsv[2] = Math.round(Number(100 * (ele.offsetHeight -\n Math.max(0, Math.min(ele.offsetHeight, (clientY - ele.offsetTop)))) / ele.offsetHeight) * 10) / 10;\n this.hsv[1] =\n Math.round(Number(100 * (Math.max(0, Math.min(ele.offsetWidth, (clientX - ele.offsetLeft)))) / ele.offsetWidth) * 10) / 10;\n };\n ColorPicker.prototype.handlerEnd = function (e) {\n if (e.type !== 'touchend') {\n e.preventDefault();\n }\n EventHandler.remove(document, 'mousemove touchmove', this.handlerMove);\n EventHandler.remove(document, 'mouseup touchend', this.handlerEnd);\n var dragHandler = this.getDragHandler();\n select('.' + HSVAREA, this.container).style.cursor = '';\n if (this.tooltipEle.style.transform) {\n this.tooltipEle.style.transform = '';\n dragHandler.classList.remove('e-hide-handler');\n }\n if (!this.inline && !this.showButtons) {\n this.toggle();\n }\n };\n ColorPicker.prototype.btnClickHandler = function (e) {\n var target = e.target;\n if (closest(target, '.' + MODESWITCH)) {\n e.stopPropagation();\n this.switchToPalette();\n }\n else {\n if (target.classList.contains(APPLY) || target.classList.contains(CANCEL)) {\n this.ctrlBtnClick(target);\n }\n }\n };\n ColorPicker.prototype.switchToPalette = function () {\n this.trigger('beforeModeSwitch', { element: this.container, mode: 'Palette' });\n this.unWireEvents();\n this.destroyOtherComp();\n detach(select('.e-slider-preview', this.container));\n if (!this.getWrapper().classList.contains('e-hide-value')) {\n detach(select('.' + INPUTWRAPPER, this.container));\n }\n detach(this.getHsvContainer());\n this.createPalette();\n this.firstPaletteFocus();\n if (this.getWrapper().classList.contains('e-show-value')) {\n this.createInput(1);\n }\n this.refreshPopupPos();\n this.wireEvents();\n };\n ColorPicker.prototype.refreshPopupPos = function () {\n if (!this.inline) {\n var popupEle = this.getPopupEle();\n popupEle.style.left = '0px';\n popupEle.style.top = '0px';\n this.getPopupInst().refreshPosition(this.splitBtn.element.parentElement);\n }\n };\n ColorPicker.prototype.formatSwitchHandler = function (e) {\n var target = e.target;\n if (target.classList.contains(TOHSV)) {\n this.updateValue(this.hsv, true, 3, [360, 100, 100]);\n target.classList.remove(TOHSV);\n }\n else {\n this.updateValue(this.rgb, true, 2);\n target.classList.add(TOHSV);\n }\n };\n ColorPicker.prototype.updateValue = function (value, format, idx, max) {\n var clsName = ['e-rh-value', 'e-gs-value', 'e-bv-value'];\n var inst;\n for (var i = 0, len = clsName.length; i < len; i++) {\n inst = getInstance(select('.' + clsName[i], this.container), NumericTextBox);\n inst.value = Math.round(value[i]);\n if (format) {\n inst.placeholder = clsName[i].substr(idx, 1).toUpperCase();\n inst.max = max ? max[i] : 255;\n }\n inst.dataBind();\n }\n };\n ColorPicker.prototype.previewHandler = function (e) {\n var target = e.target;\n var pValue = this.rgbToHex(this.rgb);\n this.rgb = this.convertRgbToNumberArray(target.style.backgroundColor);\n if (!this.rgb[3]) {\n this.rgb[3] = 1;\n }\n var cValue = this.rgbToHex(this.rgb);\n var hsv = this.rgbToHsv.apply(this, this.rgb);\n if (hsv[0] !== this.hsv[0]) {\n this.hueSlider.setProperties({ 'value': hsv[0] }, true);\n this.hueSlider.refresh();\n }\n this.setHsvContainerBg(hsv[0]);\n if (hsv[3] !== this.hsv[3]) {\n this.opacitySlider.setProperties({ 'value': hsv[3] * 100 }, true);\n this.opacitySlider.refresh();\n }\n this.updateOpacitySliderBg();\n this.hsv = hsv;\n this.setHandlerPosition();\n this.updateInput(cValue);\n select('.' + PREVIEW + ' .' + CURRENT, this.container).style.backgroundColor = this.convertToRgbString(this.rgb);\n this.triggerEvent(cValue, pValue, this.convertToRgbString(this.rgb));\n };\n ColorPicker.prototype.paletteClickHandler = function (e) {\n e.preventDefault();\n var target = e.target;\n if (target.classList.contains(TILE)) {\n this.removeTileSelection();\n this.addTileSelection(target);\n if (target.classList.contains(NOCOLOR)) {\n this.noColorTile();\n }\n else {\n var cValue = target.getAttribute('aria-label');\n var pValue = this.rgbToHex(this.rgb);\n this.rgb = this.hexToRgb(this.roundValue(cValue));\n this.hsv = this.rgbToHsv.apply(this, this.rgb);\n if (this.getWrapper().classList.contains('e-show-value')) {\n this.updateInput(cValue);\n }\n this.triggerEvent(cValue, pValue, this.convertToRgbString(this.rgb));\n }\n if (!this.inline && !this.showButtons) {\n this.toggle();\n }\n }\n else {\n if (closest(target, '.' + MODESWITCH)) {\n this.switchToPicker();\n }\n else {\n if (target.classList.contains(APPLY) || target.classList.contains(CANCEL)) {\n this.ctrlBtnClick(target);\n }\n else {\n if (this.getWrapper().classList.contains('e-show-value') && closest(target, '.' + FORMATSWITCH)) {\n this.formatSwitchHandler(e);\n }\n }\n }\n }\n };\n ColorPicker.prototype.noColorTile = function (isKey) {\n if (isKey === void 0) { isKey = false; }\n var pValue = this.rgbToHex(this.rgb);\n this.rgb = [];\n this.hsv = [];\n this.triggerEvent('', pValue, '', isKey);\n };\n ColorPicker.prototype.switchToPicker = function () {\n var wrapper = this.getWrapper();\n this.trigger('beforeModeSwitch', { element: this.container, mode: 'Picker' });\n this.unWireEvents();\n ([].slice.call(selectAll('.' + PALETTES, this.container))).forEach(function (ele) {\n detach(ele);\n });\n if (wrapper.classList.contains('e-show-value')) {\n detach(select('.' + INPUTWRAPPER, this.container));\n }\n this.container.style.width = '';\n var grpEle = select('.e-custom-palette', this.container);\n if (this.presetColors) {\n remove(grpEle);\n }\n this.createPicker();\n this.getDragHandler().focus();\n if (!wrapper.classList.contains('e-hide-value')) {\n this.createInput();\n }\n this.refreshPopupPos();\n this.wireEvents();\n };\n ColorPicker.prototype.ctrlBtnClick = function (ele) {\n if (ele.classList.contains(APPLY)) {\n var cValue = this.rgbToHex(this.rgb);\n this.triggerChangeEvent(cValue);\n }\n if (!this.inline) {\n this.toggle();\n this.splitBtn.element.focus();\n }\n };\n ColorPicker.prototype.paletteKeyDown = function (e) {\n var target = e.target;\n if (!target.classList.contains(PALETTES)) {\n return;\n }\n var selectedEle;\n var idx;\n var tiles = [].slice.call(selectAll('.' + TILE, target));\n var prevSelectedEle = (tiles.filter(function (tile) { return tile.classList.contains('e-selected'); })).pop();\n switch (!e.altKey && e.keyCode) {\n case 39:\n e.preventDefault();\n selectedEle = prevSelectedEle ? tiles[this.tilePosition(tiles, prevSelectedEle, this.enableRtl ? -1 : 1)]\n : tiles[this.enableRtl ? tiles.length - 1 : 0];\n this.keySelectionChanges(selectedEle);\n break;\n case 37:\n e.preventDefault();\n selectedEle = prevSelectedEle ? tiles[this.tilePosition(tiles, prevSelectedEle, this.enableRtl ? 1 : -1)]\n : tiles[this.enableRtl ? 0 : tiles.length - 1];\n this.keySelectionChanges(selectedEle);\n break;\n case 38:\n e.preventDefault();\n idx = prevSelectedEle ? this.tilePosition(tiles, prevSelectedEle, -this.columns) : 0;\n selectedEle = tiles[idx] ? tiles[idx] : tiles[idx - this.columns];\n this.keySelectionChanges(selectedEle);\n break;\n case 40:\n e.preventDefault();\n idx = prevSelectedEle ? this.tilePosition(tiles, prevSelectedEle, this.columns) : tiles.length - 1;\n if (tiles[idx]) {\n selectedEle = tiles[idx];\n }\n else {\n idx %= tiles.length;\n idx += tiles[tiles.length - 1].parentElement.childElementCount;\n selectedEle = tiles[idx];\n }\n this.keySelectionChanges(selectedEle);\n break;\n case 13:\n e.preventDefault();\n if (prevSelectedEle) {\n var cValue = prevSelectedEle.getAttribute('aria-label');\n this.enterKeyHandler(cValue ? cValue : '');\n }\n }\n };\n ColorPicker.prototype.keySelectionChanges = function (newEle) {\n this.removeTileSelection();\n this.addTileSelection(newEle);\n if (newEle.classList.contains(NOCOLOR)) {\n this.noColorTile(true);\n }\n else {\n var cValue = newEle.getAttribute('aria-label');\n var pValue = this.rgbToHex(this.rgb);\n this.rgb = this.hexToRgb(cValue);\n this.hsv = this.rgbToHsv.apply(this, this.rgb);\n if (this.getWrapper().classList.contains('e-show-value')) {\n this.updateInput(cValue);\n }\n this.triggerEvent(cValue, pValue, this.convertToRgbString(this.rgb), true);\n }\n };\n ColorPicker.prototype.tilePosition = function (items, element, cIdx) {\n items = Array.prototype.slice.call(items);\n var n = items.length;\n var emptyCount = this.columns - items[n - 1].parentElement.childElementCount;\n var idx = items.indexOf(element);\n idx += cIdx;\n idx < 0 ? idx += n + emptyCount : idx %= n + emptyCount;\n return idx;\n };\n ColorPicker.prototype.inputHandler = function (e) {\n var target = e.target;\n if (!target.value.length) {\n return;\n }\n var hsv;\n var pValue;\n var label = select('.e-float-text', target.parentElement).textContent;\n switch (label) {\n case 'HEX':\n var value = '';\n if ((target.value[0] === '#' && target.value.length !== 5) || (target.value[0] !== '#' && target.value.length !== 4)) {\n value = this.roundValue(target.value);\n }\n if (value.length === 9) {\n pValue = this.rgbToHex(this.rgb);\n this.rgb = this.hexToRgb(value + value.substr(-2));\n this.inputValueChange(this.rgbToHsv.apply(this, this.rgb), pValue, target.value);\n }\n else {\n return;\n }\n break;\n case 'R':\n if (this.rgb[0] !== Number(target.value)) {\n pValue = this.rgbToHex(this.rgb);\n this.rgb[0] = Number(target.value);\n hsv = this.rgbToHsv.apply(this, this.rgb);\n this.inputValueChange(hsv, pValue);\n }\n break;\n case 'G':\n if (this.rgb[1] !== Number(target.value)) {\n pValue = this.rgbToHex(this.rgb);\n this.rgb[1] = Number(target.value);\n hsv = this.rgbToHsv.apply(this, this.rgb);\n this.inputValueChange(hsv, pValue);\n }\n break;\n case 'B':\n if (this.rgb[2] !== Number(target.value)) {\n pValue = this.rgbToHex(this.rgb);\n this.rgb[2] = Number(target.value);\n hsv = this.rgbToHsv.apply(this, this.rgb);\n this.inputValueChange(hsv, pValue);\n }\n break;\n case 'H':\n this.hueSlider.value = Number(target.value);\n break;\n case 'S':\n if (this.hsv[1] !== Number(target.value)) {\n this.hsv[1] = Number(target.value);\n this.updateHsv();\n this.convertToOtherFormat();\n }\n break;\n case 'V':\n if (this.hsv[2] !== Number(target.value)) {\n this.hsv[2] = Number(target.value);\n this.updateHsv();\n this.convertToOtherFormat();\n }\n break;\n case 'A':\n this.opacitySlider.value = Number(target.value);\n break;\n }\n };\n ColorPicker.prototype.inputValueChange = function (hsv, pValue, value) {\n if (hsv[0] !== this.hsv[0]) {\n this.hueSlider.setProperties({ 'value': hsv[0] }, true);\n this.hueSlider.refresh();\n this.setHsvContainerBg(hsv[0]);\n }\n this.hsv = hsv;\n var cValue = this.rgbToHex(this.rgb);\n this.setHandlerPosition();\n this.updateInput(value ? value : cValue);\n var rgba = this.convertToRgbString(this.rgb);\n this.updatePreview(rgba);\n this.triggerEvent(cValue, pValue, rgba);\n };\n ColorPicker.prototype.triggerEvent = function (cValue, pValue, rgba, isKey) {\n if (isKey === void 0) { isKey = false; }\n var hex = cValue.slice(0, 7);\n var eventArgs = {\n currentValue: { hex: hex, rgba: rgba },\n previousValue: { hex: pValue.slice(0, 7), rgba: this.convertToRgbString(this.hexToRgb(pValue)) }\n };\n if (!this.showButtons && !isKey) {\n eventArgs.previousValue = { hex: this.value.slice(0, 7), rgba: this.convertToRgbString(this.hexToRgb(this.value)) };\n this.trigger('change', eventArgs);\n this.setProperties({ 'value': cValue }, true);\n this.element.value = hex ? hex : '#000000';\n }\n else {\n this.trigger('select', eventArgs);\n }\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it maintains the initial input element from the DOM.\n * @method destroy\n * @return {void}\n */\n ColorPicker.prototype.destroy = function () {\n var _this = this;\n var wrapper = this.getWrapper();\n _super.prototype.destroy.call(this);\n ['tabindex', 'spellcheck'].forEach(function (attr) { _this.element.removeAttribute(attr); });\n if (this.inline) {\n this.unWireEvents();\n this.destroyOtherComp();\n }\n else {\n if (this.isPopupOpen()) {\n this.unWireEvents();\n this.destroyOtherComp();\n }\n this.splitBtn.destroy();\n this.splitBtn = null;\n }\n this.tileRipple();\n this.tileRipple = null;\n this.ctrlBtnRipple();\n this.ctrlBtnRipple = null;\n detach(this.element.nextElementSibling);\n wrapper.parentElement.insertBefore(this.element, wrapper);\n detach(wrapper);\n this.container = null;\n };\n ColorPicker.prototype.destroyOtherComp = function () {\n if (this.isPicker()) {\n this.hueSlider.destroy();\n this.opacitySlider.destroy();\n this.hueSlider = null;\n this.opacitySlider = null;\n var tooltipInst = this.getTooltipInst();\n tooltipInst.close();\n tooltipInst.destroy();\n this.tooltipEle = null;\n }\n };\n ColorPicker.prototype.isPopupOpen = function () {\n return this.getPopupEle().classList.contains('e-popup-open');\n };\n ColorPicker.prototype.unWireEvents = function () {\n if (this.isPicker()) {\n var dragHandler = this.getDragHandler();\n EventHandler.remove(dragHandler, 'keydown', this.pickerKeyDown);\n EventHandler.remove(this.getHsvContainer(), 'mousedown touchstart', this.handlerDown);\n if (this.modeSwitcher || this.showButtons) {\n EventHandler.remove(select('.' + CTRLSWITCH, this.container), 'click', this.btnClickHandler);\n }\n if (!this.getWrapper().classList.contains('e-hide-value')) {\n EventHandler.remove(select('.' + FORMATSWITCH, this.container), 'click', this.formatSwitchHandler);\n EventHandler.remove(select('.' + HEX, this.container), 'input', this.inputHandler);\n }\n EventHandler.remove(select('.' + PREVIOUS, this.container), 'click', this.previewHandler);\n }\n else {\n EventHandler.remove(this.container, 'click', this.paletteClickHandler);\n EventHandler.remove(this.container, 'keydown', this.paletteKeyDown);\n }\n };\n ColorPicker.prototype.roundValue = function (value) {\n if (!value) {\n return '';\n }\n if (value[0] !== '#') {\n value = '#' + value;\n }\n var len = value.length;\n if (len === 4) {\n value += 'f';\n len = 5;\n }\n if (len === 5) {\n var tempValue = '';\n for (var i = 1, len_1 = value.length; i < len_1; i++) {\n tempValue += (value.charAt(i) + value.charAt(i));\n }\n value = '#' + tempValue;\n len = 9;\n }\n if (len === 7) {\n value += 'ff';\n }\n return value;\n };\n ColorPicker.prototype.hexToRgb = function (hex) {\n if (!hex) {\n return [];\n }\n hex = hex.trim();\n if (hex.length !== 9) {\n hex = this.roundValue(hex);\n }\n var opacity = Number((parseInt(hex.slice(-2), 16) / 255).toFixed(2));\n hex = hex.slice(1, 7);\n var bigInt = parseInt(hex, 16);\n var h = [];\n h.push((bigInt >> 16) & 255);\n h.push((bigInt >> 8) & 255);\n h.push(bigInt & 255);\n h.push(opacity);\n return h;\n };\n ColorPicker.prototype.rgbToHsv = function (r, g, b, opacity) {\n if (this.rgb && !this.rgb.length) {\n return [];\n }\n r /= 255;\n g /= 255;\n b /= 255;\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var h;\n var s;\n var v = max;\n var d = max - min;\n s = max === 0 ? 0 : d / max;\n if (max === min) {\n h = 0;\n }\n else {\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n var hsv = [Math.round(h * 360), Math.round(s * 1000) / 10, Math.round(v * 1000) / 10];\n if (!isNullOrUndefined(opacity)) {\n hsv.push(opacity);\n }\n return hsv;\n };\n ColorPicker.prototype.hsvToRgb = function (h, s, v, opacity) {\n var r;\n var g;\n var b;\n var i;\n var f;\n var p;\n var q;\n var t;\n s /= 100;\n v /= 100;\n if (s === 0) {\n r = g = b = v;\n return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255), opacity];\n }\n h /= 60;\n i = Math.floor(h);\n f = h - i;\n p = v * (1 - s);\n q = v * (1 - s * f);\n t = v * (1 - s * (1 - f));\n switch (i) {\n case 0:\n r = v;\n g = t;\n b = p;\n break;\n case 1:\n r = q;\n g = v;\n b = p;\n break;\n case 2:\n r = p;\n g = v;\n b = t;\n break;\n case 3:\n r = p;\n g = q;\n b = v;\n break;\n case 4:\n r = t;\n g = p;\n b = v;\n break;\n default:\n r = v;\n g = p;\n b = q;\n }\n var rgb = [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)];\n if (!isNullOrUndefined(opacity)) {\n rgb.push(opacity);\n }\n return rgb;\n };\n ColorPicker.prototype.rgbToHex = function (rgb) {\n return rgb.length ? ('#' + this.hex(rgb[0]) + this.hex(rgb[1]) + this.hex(rgb[2]) +\n (!isNullOrUndefined(rgb[3]) ? (rgb[3] !== 0 ? (Math.round(rgb[3] * 255) + 0x10000).toString(16).substr(-2) : '00') : '')) : '';\n };\n ColorPicker.prototype.hex = function (x) {\n return ('0' + x.toString(16)).slice(-2);\n };\n ColorPicker.prototype.changeModeSwitcherProp = function (prop) {\n var ctrlSwitchWrapper = select('.' + CTRLSWITCH, this.container);\n if (prop) {\n if (ctrlSwitchWrapper) {\n this.appendModeSwitchBtn();\n }\n else {\n this.createCtrlBtn();\n if (this.isPicker() && !this.disabled) {\n this.addCtrlSwitchEvent();\n }\n }\n }\n else {\n if (ctrlSwitchWrapper) {\n if (this.showButtons) {\n detach(select('.' + MODESWITCH, ctrlSwitchWrapper));\n }\n else {\n remove(ctrlSwitchWrapper);\n }\n }\n }\n };\n ColorPicker.prototype.changeShowBtnProps = function (prop) {\n var ctrlBtnWrapper = select('.' + CTRLSWITCH, this.container);\n if (prop) {\n if (ctrlBtnWrapper) {\n remove(ctrlBtnWrapper);\n }\n this.createCtrlBtn();\n if (this.isPicker() && !this.disabled) {\n this.addCtrlSwitchEvent();\n }\n }\n else {\n if (this.modeSwitcher) {\n detach(select('.' + CTRLBTN, ctrlBtnWrapper));\n }\n else {\n remove(ctrlBtnWrapper);\n }\n }\n };\n ColorPicker.prototype.changeValueProp = function (newProp) {\n if (this.isPicker()) {\n this.rgb = this.hexToRgb(newProp);\n this.hsv = this.rgbToHsv.apply(this, this.rgb);\n this.setHandlerPosition();\n detach(closest(this.hueSlider.element, '.e-slider-preview'));\n this.createSlider();\n this.setHsvContainerBg();\n this.updateOpacitySliderBg();\n this.updateInput(newProp);\n }\n else {\n this.removeTileSelection();\n this.addTileSelection(select('span[aria-label=\"' + newProp + '\"]', this.container));\n }\n this.element.value = newProp.slice(0, 7);\n };\n ColorPicker.prototype.setInputEleProps = function (prop) {\n remove(select('.' + INPUTWRAPPER, this.container));\n this.createInput();\n };\n ColorPicker.prototype.changeDisabledProp = function (newProp) {\n if (this.isPicker()) {\n this.hueSlider.enabled = !newProp;\n this.opacitySlider.enabled = !newProp;\n this.setInputEleProps(newProp);\n }\n if (newProp) {\n this.toggleDisabled(true);\n this.unWireEvents();\n }\n else {\n this.toggleDisabled(false);\n this.wireEvents();\n }\n };\n ColorPicker.prototype.changeCssClassProps = function (newProp, oldProp) {\n var wrapper = this.getWrapper();\n var popupWrapper = this.getPopupEle();\n if (oldProp) {\n removeClass([wrapper, popupWrapper], oldProp.split(' '));\n }\n if (newProp) {\n addClass([wrapper, popupWrapper], newProp.split(' '));\n }\n };\n ColorPicker.prototype.changeRtlProps = function (newProp) {\n if (newProp) {\n addClass([this.getWrapper()], 'e-rtl');\n }\n else {\n removeClass([this.getWrapper()], 'e-rtl');\n }\n };\n ColorPicker.prototype.changePaletteProps = function () {\n detach(this.container.children[0]);\n this.container.style.width = '';\n this.createPalette();\n };\n /**\n * Called internally if any of the property value changed.\n * @param {ColorPickerModel} newProp\n * @param {ColorPickerModel} oldProp\n * @returns void\n * @private\n */\n ColorPicker.prototype.onPropertyChanged = function (newProp, oldProp) {\n var _this = this;\n var wrapper = this.getWrapper();\n if (!this.inline && isNullOrUndefined(newProp.inline)) {\n var otherCompModel = ['disabled', 'enableRtl'];\n this.splitBtn.setProperties(getModel(newProp, otherCompModel));\n if (!this.isPopupOpen()) {\n if (newProp.value) {\n select('.' + SPLITPREVIEW, this.splitBtn.element).style.backgroundColor = newProp.value;\n }\n this.changeCssClassProps(newProp.cssClass, oldProp.cssClass);\n this.changeRtlProps(newProp.enableRtl);\n return;\n }\n }\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'inline':\n if (newProp.inline) {\n this.getWrapper().appendChild(this.container);\n this.splitBtn.destroy();\n detach(this.element.nextElementSibling);\n if (!this.container.children.length) {\n this.createWidget();\n }\n }\n else {\n this.destroyOtherComp();\n this.unWireEvents();\n this.container.innerHTML = '';\n this.createSplitBtn();\n }\n break;\n case 'cssClass':\n if (this.isPicker()) {\n if (wrapper.classList.contains('e-hide-value')) {\n this.createInput();\n this.addvalueEventHandler();\n }\n newProp.cssClass.split(' ').forEach(function (cls) {\n if (cls === 'e-hide-value') {\n remove(select('.' + INPUTWRAPPER, _this.container));\n }\n });\n }\n else {\n if (wrapper.classList.contains('e-show-value')) {\n remove(select('.' + INPUTWRAPPER, this.container));\n }\n newProp.cssClass.split(' ').forEach(function (cls) {\n if (cls === 'e-show-value') {\n _this.createInput(1);\n _this.addInputEvent();\n }\n });\n }\n this.changeCssClassProps(newProp.cssClass, oldProp.cssClass);\n break;\n case 'enableRtl':\n if (this.isPicker()) {\n this.hueSlider.enableRtl = newProp.enableRtl;\n this.opacitySlider.enableRtl = newProp.enableRtl;\n this.setInputEleProps(newProp.enableRtl);\n }\n this.changeRtlProps(newProp.enableRtl);\n break;\n case 'disabled':\n this.changeDisabledProp(newProp.disabled);\n break;\n case 'value':\n this.changeValueProp(newProp.value);\n break;\n case 'showButtons':\n this.changeShowBtnProps(newProp.showButtons);\n break;\n case 'mode':\n if (newProp.mode === 'Picker') {\n this.switchToPicker();\n }\n else {\n this.switchToPalette();\n }\n break;\n case 'modeSwitcher':\n this.changeModeSwitcherProp(newProp.modeSwitcher);\n break;\n case 'columns':\n case 'presetColors':\n if (!this.isPicker()) {\n this.changePaletteProps();\n }\n break;\n case 'noColor':\n if (newProp.noColor) {\n if (this.mode === 'Palette' && !this.modeSwitcher) {\n this.setNoColor();\n }\n }\n else {\n this.changePaletteProps();\n }\n break;\n }\n }\n };\n __decorate([\n Property('#008000')\n ], ColorPicker.prototype, \"value\", void 0);\n __decorate([\n Property('')\n ], ColorPicker.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], ColorPicker.prototype, \"disabled\", void 0);\n __decorate([\n Property(false)\n ], ColorPicker.prototype, \"enableRtl\", void 0);\n __decorate([\n Property('Picker')\n ], ColorPicker.prototype, \"mode\", void 0);\n __decorate([\n Property(true)\n ], ColorPicker.prototype, \"modeSwitcher\", void 0);\n __decorate([\n Property(null)\n ], ColorPicker.prototype, \"presetColors\", void 0);\n __decorate([\n Property(true)\n ], ColorPicker.prototype, \"showButtons\", void 0);\n __decorate([\n Property(10)\n ], ColorPicker.prototype, \"columns\", void 0);\n __decorate([\n Property(false)\n ], ColorPicker.prototype, \"inline\", void 0);\n __decorate([\n Property(false)\n ], ColorPicker.prototype, \"noColor\", void 0);\n __decorate([\n Property(false)\n ], ColorPicker.prototype, \"enablePersistence\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"select\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"beforeTileRender\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"beforeModeSwitch\", void 0);\n ColorPicker = __decorate([\n NotifyPropertyChanges\n ], ColorPicker);\n return ColorPicker;\n}(Component));\nexport { ColorPicker };\n","import { DataUtil } from './util';\n/**\n * Query class is used to build query which is used by the DataManager to communicate with datasource.\n */\nvar Query = /** @class */ (function () {\n /**\n * Constructor for Query class.\n * @param {string|string[]} from?\n * @hidden\n */\n function Query(from) {\n /** @hidden */\n this.subQuery = null;\n /** @hidden */\n this.isChild = false;\n this.queries = [];\n this.key = '';\n this.fKey = '';\n if (typeof from === 'string') {\n this.fromTable = from;\n }\n else if (from && from instanceof Array) {\n this.lookups = from;\n }\n this.expands = [];\n this.sortedColumns = [];\n this.groupedColumns = [];\n this.subQuery = null;\n this.isChild = false;\n this.params = [];\n return this;\n }\n /**\n * Sets the primary key.\n * @param {string} field - Defines the column field.\n */\n Query.prototype.setKey = function (field) {\n this.key = field;\n return this;\n };\n /**\n * Sets default DataManager to execute query.\n * @param {DataManager} dataManager - Defines the DataManager.\n */\n Query.prototype.using = function (dataManager) {\n this.dataManager = dataManager;\n return this;\n };\n /**\n * Executes query with the given DataManager.\n * @param {DataManager} dataManager - Defines the DataManager.\n * @param {Function} done - Defines the success callback.\n * @param {Function} fail - Defines the failure callback.\n * @param {Function} always - Defines the callback which will be invoked on either success or failure.\n *\n *
\n     * let dataManager: DataManager = new DataManager([{ ID: '10' }, { ID: '2' }, { ID: '1' }, { ID: '20' }]);\n     * let query: Query = new Query();\n     * query.sortBy('ID', (x: string, y: string): number => { return parseInt(x, 10) - parseInt(y, 10) });\n     * let promise: Promise< Object > = query.execute(dataManager);\n     * promise.then((e: { result: Object }) => { });\n     * 
\n */\n Query.prototype.execute = function (dataManager, done, fail, always) {\n dataManager = dataManager || this.dataManager;\n if (dataManager) {\n return dataManager.executeQuery(this, done, fail, always);\n }\n return DataUtil.throwError('Query - execute() : dataManager needs to be is set using \"using\" function or should be passed as argument');\n };\n /**\n * Executes query with the local datasource.\n * @param {DataManager} dataManager - Defines the DataManager.\n */\n Query.prototype.executeLocal = function (dataManager) {\n dataManager = dataManager || this.dataManager;\n if (dataManager) {\n return dataManager.executeLocal(this);\n }\n return DataUtil.throwError('Query - executeLocal() : dataManager needs to be is set using \"using\" function or should be passed as argument');\n };\n /**\n * Creates deep copy of the Query object.\n */\n Query.prototype.clone = function () {\n var cloned = new Query();\n cloned.queries = this.queries.slice(0);\n cloned.key = this.key;\n cloned.isChild = this.isChild;\n cloned.dataManager = this.dataManager;\n cloned.fromTable = this.fromTable;\n cloned.params = this.params.slice(0);\n cloned.expands = this.expands.slice(0);\n cloned.sortedColumns = this.sortedColumns.slice(0);\n cloned.groupedColumns = this.groupedColumns.slice(0);\n cloned.subQuerySelector = this.subQuerySelector;\n cloned.subQuery = this.subQuery;\n cloned.fKey = this.fKey;\n cloned.isCountRequired = this.isCountRequired;\n return cloned;\n };\n /**\n * Specifies the name of table to retrieve data in query execution.\n * @param {string} tableName - Defines the table name.\n */\n Query.prototype.from = function (tableName) {\n this.fromTable = tableName;\n return this;\n };\n /**\n * Adds additional parameter which will be sent along with the request which will be generated while DataManager execute.\n * @param {string} key - Defines the key of additional parameter.\n * @param {Function|string} value - Defines the value for the key.\n */\n Query.prototype.addParams = function (key, value) {\n if (typeof value === 'function') {\n this.params.push({ key: key, fn: value });\n }\n else {\n this.params.push({ key: key, value: value });\n }\n return this;\n };\n /**\n * Expands the related table.\n * @param {string|Object[]} tables\n */\n Query.prototype.expand = function (tables) {\n if (typeof tables === 'string') {\n this.expands = [].slice.call([tables], 0);\n }\n else {\n this.expands = tables.slice(0);\n }\n return this;\n };\n /**\n * Filter data with given filter criteria.\n * @param {string|Predicate} fieldName - Defines the column field or Predicate.\n * @param {string} operator - Defines the operator how to filter data.\n * @param {string|number|boolean} value - Defines the values to match with data.\n * @param {boolean} ignoreCase - If ignore case set to false, then filter data with exact match or else\n * filter data with case insensitive.\n */\n Query.prototype.where = function (fieldName, operator, value, ignoreCase, ignoreAccent) {\n operator = operator ? (operator).toLowerCase() : null;\n var predicate = null;\n if (typeof fieldName === 'string') {\n predicate = new Predicate(fieldName, operator, value, ignoreCase, ignoreAccent);\n }\n else if (fieldName instanceof Predicate) {\n predicate = fieldName;\n }\n this.queries.push({\n fn: 'onWhere',\n e: predicate\n });\n return this;\n };\n /**\n * Search data with given search criteria.\n * @param {string|number|boolean} searchKey - Defines the search key.\n * @param {string|string[]} fieldNames - Defines the collection of column fields.\n * @param {string} operator - Defines the operator how to search data.\n * @param {boolean} ignoreCase - If ignore case set to false, then filter data with exact match or else\n * filter data with case insensitive.\n */\n Query.prototype.search = function (searchKey, fieldNames, operator, ignoreCase, ignoreAccent) {\n if (typeof fieldNames === 'string') {\n fieldNames = [fieldNames];\n }\n operator = operator || 'contains';\n var comparer = DataUtil.fnOperators[operator];\n this.queries.push({\n fn: 'onSearch',\n e: {\n fieldNames: fieldNames,\n operator: operator,\n searchKey: searchKey,\n ignoreCase: ignoreCase,\n ignoreAccent: ignoreAccent,\n comparer: comparer\n }\n });\n return this;\n };\n /**\n * Sort the data with given sort criteria.\n * By default, sort direction is ascending.\n * @param {string|string[]} fieldName - Defines the single or collection of column fields.\n * @param {string|Function} comparer - Defines the sort direction or custom sort comparer function.\n */\n Query.prototype.sortBy = function (fieldName, comparer, isFromGroup) {\n var order = 'ascending';\n var sorts;\n var temp;\n if (typeof fieldName === 'string' && DataUtil.endsWith(fieldName.toLowerCase(), ' desc')) {\n fieldName = fieldName.replace(/ desc$/i, '');\n comparer = 'descending';\n }\n if (!comparer || typeof comparer === 'string') {\n order = comparer ? comparer.toLowerCase() : 'ascending';\n comparer = DataUtil.fnSort(comparer);\n }\n if (isFromGroup) {\n sorts = Query.filterQueries(this.queries, 'onSortBy');\n for (var i = 0; i < sorts.length; i++) {\n temp = sorts[i].e.fieldName;\n if (typeof temp === 'string') {\n if (temp === fieldName) {\n return this;\n }\n }\n else if (temp instanceof Array) {\n for (var j = 0; j < temp.length; j++) {\n if (temp[j] === fieldName || fieldName.toLowerCase() === temp[j] + ' desc') {\n return this;\n }\n }\n }\n }\n }\n this.queries.push({\n fn: 'onSortBy',\n e: {\n fieldName: fieldName,\n comparer: comparer,\n direction: order\n }\n });\n return this;\n };\n /**\n * Sorts data in descending order.\n * @param {string} fieldName - Defines the column field.\n */\n Query.prototype.sortByDesc = function (fieldName) {\n return this.sortBy(fieldName, 'descending');\n };\n /**\n * Groups data with the given field name.\n * @param {string} fieldName - Defines the column field.\n */\n Query.prototype.group = function (fieldName, fn, format) {\n this.sortBy(fieldName, null, true);\n this.queries.push({\n fn: 'onGroup',\n e: {\n fieldName: fieldName,\n comparer: fn ? fn : null,\n format: format ? format : null\n }\n });\n return this;\n };\n /**\n * Gets data based on the given page index and size.\n * @param {number} pageIndex - Defines the current page index.\n * @param {number} pageSize - Defines the no of records per page.\n */\n Query.prototype.page = function (pageIndex, pageSize) {\n this.queries.push({\n fn: 'onPage',\n e: {\n pageIndex: pageIndex,\n pageSize: pageSize\n }\n });\n return this;\n };\n /**\n * Gets data based on the given start and end index.\n * @param {number} start - Defines the start index of the datasource.\n * @param {number} end - Defines the end index of the datasource.\n */\n Query.prototype.range = function (start, end) {\n this.queries.push({\n fn: 'onRange',\n e: {\n start: start,\n end: end\n }\n });\n return this;\n };\n /**\n * Gets data from the top of the data source based on given number of records count.\n * @param {number} nos - Defines the no of records to retrieve from datasource.\n */\n Query.prototype.take = function (nos) {\n this.queries.push({\n fn: 'onTake',\n e: {\n nos: nos\n }\n });\n return this;\n };\n /**\n * Skips data with given number of records count from the top of the data source.\n * @param {number} nos - Defines the no of records skip in the datasource.\n */\n Query.prototype.skip = function (nos) {\n this.queries.push({\n fn: 'onSkip',\n e: { nos: nos }\n });\n return this;\n };\n /**\n * Selects specified columns from the data source.\n * @param {string|string[]} fieldNames - Defines the collection of column fields.\n */\n Query.prototype.select = function (fieldNames) {\n if (typeof fieldNames === 'string') {\n fieldNames = [].slice.call([fieldNames], 0);\n }\n this.queries.push({\n fn: 'onSelect',\n e: { fieldNames: fieldNames }\n });\n return this;\n };\n /**\n * Gets the records in hierarchical relationship from two tables. It requires the foreign key to relate two tables.\n * @param {Query} query - Defines the query to relate two tables.\n * @param {Function} selectorFn - Defines the custom function to select records.\n */\n Query.prototype.hierarchy = function (query, selectorFn) {\n this.subQuerySelector = selectorFn;\n this.subQuery = query;\n return this;\n };\n /**\n * Sets the foreign key which is used to get data from the related table.\n * @param {string} key - Defines the foreign key.\n */\n Query.prototype.foreignKey = function (key) {\n this.fKey = key;\n return this;\n };\n /**\n * It is used to get total number of records in the DataManager execution result.\n */\n Query.prototype.requiresCount = function () {\n this.isCountRequired = true;\n return this;\n };\n //type - sum, avg, min, max\n /**\n * Aggregate the data with given type and field name.\n * @param {string} type - Defines the aggregate type.\n * @param {string} field - Defines the column field to aggregate.\n */\n Query.prototype.aggregate = function (type, field) {\n this.queries.push({\n fn: 'onAggregates',\n e: { field: field, type: type }\n });\n return this;\n };\n /**\n * Pass array of filterColumn query for performing filter operation.\n * @param {QueryOptions[]} queries\n * @param {string} name\n * @hidden\n */\n Query.filterQueries = function (queries, name) {\n return queries.filter(function (q) {\n return q.fn === name;\n });\n };\n /**\n * To get the list of queries which is already filtered in current data source.\n * @param {Object[]} queries\n * @param {string[]} singles\n * @hidden\n */\n Query.filterQueryLists = function (queries, singles) {\n var filtered = queries.filter(function (q) {\n return singles.indexOf(q.fn) !== -1;\n });\n var res = {};\n for (var i = 0; i < filtered.length; i++) {\n if (!res[filtered[i].fn]) {\n res[filtered[i].fn] = filtered[i].e;\n }\n }\n return res;\n };\n return Query;\n}());\nexport { Query };\n/**\n * Predicate class is used to generate complex filter criteria.\n * This will be used by DataManager to perform multiple filtering operation.\n */\nvar Predicate = /** @class */ (function () {\n /**\n * Constructor for Predicate class.\n * @param {string|Predicate} field\n * @param {string} operator\n * @param {string|number|boolean|Predicate|Predicate[]} value\n * @param {boolean=false} ignoreCase\n * @hidden\n */\n function Predicate(field, operator, value, ignoreCase, ignoreAccent) {\n if (ignoreCase === void 0) { ignoreCase = false; }\n /** @hidden */\n this.ignoreAccent = false;\n /** @hidden */\n this.isComplex = false;\n if (typeof field === 'string') {\n this.field = field;\n this.operator = operator.toLowerCase();\n this.value = value;\n this.ignoreCase = ignoreCase;\n this.ignoreAccent = ignoreAccent;\n this.isComplex = false;\n this.comparer = DataUtil.fnOperators.processOperator(this.operator);\n }\n else if (field instanceof Predicate && value instanceof Predicate || value instanceof Array) {\n this.isComplex = true;\n this.condition = operator.toLowerCase();\n this.predicates = [field];\n if (value instanceof Array) {\n [].push.apply(this.predicates, value);\n }\n else {\n this.predicates.push(value);\n }\n }\n return this;\n }\n /**\n * Adds n-number of new predicates on existing predicate with “and” condition.\n * @param {Object[]} args - Defines the collection of predicates.\n */\n Predicate.and = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return Predicate.combinePredicates([].slice.call(args, 0), 'and');\n };\n /**\n * Adds new predicate on existing predicate with “and” condition.\n * @param {string} field - Defines the column field.\n * @param {string} operator - Defines the operator how to filter data.\n * @param {string} value - Defines the values to match with data.\n * @param {boolean} ignoreCase? - If ignore case set to false, then filter data with exact match or else\n * filter data with case insensitive.\n */\n Predicate.prototype.and = function (field, operator, value, ignoreCase, ignoreAccent) {\n return Predicate.combine(this, field, operator, value, 'and', ignoreCase, ignoreAccent);\n };\n /**\n * Adds n-number of new predicates on existing predicate with “or” condition.\n * @param {Object[]} args - Defines the collection of predicates.\n */\n Predicate.or = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return Predicate.combinePredicates([].slice.call(args, 0), 'or');\n };\n /**\n * Adds new predicate on existing predicate with “or” condition.\n * @param {string} field - Defines the column field.\n * @param {string} operator - Defines the operator how to filter data.\n * @param {string} value - Defines the values to match with data.\n * @param {boolean} ignoreCase? - If ignore case set to false, then filter data with exact match or else\n * filter data with case insensitive.\n */\n Predicate.prototype.or = function (field, operator, value, ignoreCase, ignoreAccent) {\n return Predicate.combine(this, field, operator, value, 'or', ignoreCase, ignoreAccent);\n };\n /**\n * Converts plain JavaScript object to Predicate object.\n * @param {Predicate[]|Predicate} json - Defines single or collection of Predicate.\n */\n Predicate.fromJson = function (json) {\n if (json instanceof Array) {\n var res = [];\n for (var i = 0, len = json.length; i < len; i++) {\n res.push(this.fromJSONData(json[i]));\n }\n return res;\n }\n var pred = json;\n return this.fromJSONData(pred);\n };\n /**\n * Validate the record based on the predicates.\n * @param {Object} record - Defines the datasource record.\n */\n Predicate.prototype.validate = function (record) {\n var predicate = this.predicates ? this.predicates : [];\n var isAnd;\n var ret;\n if (!this.isComplex && this.comparer) {\n return this.comparer.call(this, DataUtil.getObject(this.field, record), this.value, this.ignoreCase, this.ignoreAccent);\n }\n isAnd = this.condition === 'and';\n for (var i = 0; i < predicate.length; i++) {\n ret = predicate[i].validate(record);\n if (isAnd) {\n if (!ret) {\n return false;\n }\n }\n else {\n if (ret) {\n return true;\n }\n }\n }\n return isAnd;\n };\n /**\n * Converts predicates to plain JavaScript.\n * This method is uses Json stringify when serializing Predicate object.\n */\n Predicate.prototype.toJson = function () {\n var predicates;\n var p;\n if (this.isComplex) {\n predicates = [];\n p = this.predicates;\n for (var i = 0; i < p.length; i++) {\n predicates.push(p[i].toJson());\n }\n }\n return {\n isComplex: this.isComplex,\n field: this.field,\n operator: this.operator,\n value: this.value,\n ignoreCase: this.ignoreCase,\n ignoreAccent: this.ignoreAccent,\n condition: this.condition,\n predicates: predicates\n };\n };\n Predicate.combinePredicates = function (predicates, operator) {\n if (predicates.length === 1) {\n if (!(predicates[0] instanceof Array)) {\n return predicates[0];\n }\n predicates = predicates[0];\n }\n return new Predicate(predicates[0], operator, predicates.slice(1));\n };\n Predicate.combine = function (pred, field, operator, value, condition, ignoreCase, ignoreAccent) {\n if (field instanceof Predicate) {\n return Predicate[condition](pred, field);\n }\n if (typeof field === 'string') {\n return Predicate[condition](pred, new Predicate(field, operator, value, ignoreCase, ignoreAccent));\n }\n return DataUtil.throwError('Predicate - ' + condition + ' : invalid arguments');\n };\n Predicate.fromJSONData = function (json) {\n var preds = json.predicates || [];\n var len = preds.length;\n var predicates = [];\n var result;\n for (var i = 0; i < len; i++) {\n predicates.push(this.fromJSONData(preds[i]));\n }\n if (!json.isComplex) {\n result = new Predicate(json.field, json.operator, json.value, json.ignoreCase, json.ignoreAccent);\n }\n else {\n result = new Predicate(predicates[0], json.condition, predicates.slice(1));\n }\n return result;\n };\n return Predicate;\n}());\nexport { Predicate };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DataManager } from './manager';\nimport { Query } from './query';\nvar consts = { GroupGuid: '{271bbba0-1ee7}' };\n/**\n * Data manager common utility methods.\n * @hidden\n */\nvar DataUtil = /** @class */ (function () {\n function DataUtil() {\n }\n /**\n * Returns the value by invoking the provided parameter function.\n * If the paramater is not of type function then it will be returned as it is.\n * @param {Function|string|string[]|number} value\n * @param {Object} inst?\n * @hidden\n */\n DataUtil.getValue = function (value, inst) {\n if (typeof value === 'function') {\n return value.call(inst || {});\n }\n return value;\n };\n /**\n * Returns true if the input string ends with given string.\n * @param {string} input\n * @param {string} substr\n */\n DataUtil.endsWith = function (input, substr) {\n return input.slice(-substr.length) === substr;\n };\n /**\n * Returns true if the input string starts with given string.\n * @param {string} str\n * @param {string} startstr\n */\n DataUtil.startsWith = function (input, start) {\n return input.slice(0, start.length) === start;\n };\n /**\n * To return the sorting function based on the string.\n * @param {string} order\n * @hidden\n */\n DataUtil.fnSort = function (order) {\n order = order ? DataUtil.toLowerCase(order) : 'ascending';\n if (order === 'ascending') {\n return this.fnAscending;\n }\n return this.fnDescending;\n };\n /**\n * Comparer function which is used to sort the data in ascending order.\n * @param {string|number} x\n * @param {string|number} y\n * @returns number\n */\n DataUtil.fnAscending = function (x, y) {\n if (y === null || y === undefined) {\n return -1;\n }\n if (typeof x === 'string') {\n return x.localeCompare(y);\n }\n if (x === null || x === undefined) {\n return 1;\n }\n return x - y;\n };\n /**\n * Comparer function which is used to sort the data in descending order.\n * @param {string|number} x\n * @param {string|number} y\n * @returns number\n */\n DataUtil.fnDescending = function (x, y) {\n if (y === null || y === undefined) {\n return 1;\n }\n if (typeof x === 'string') {\n return x.localeCompare(y) * -1;\n }\n if (x === null || x === undefined) {\n return -1;\n }\n return y - x;\n };\n DataUtil.extractFields = function (obj, fields) {\n var newObj = {};\n for (var i = 0; i < fields.length; i++) {\n newObj = this.setValue(fields[i], this.getObject(fields[i], obj), newObj);\n }\n return newObj;\n };\n /**\n * Select objects by given fields from jsonArray.\n * @param {Object[]} jsonArray\n * @param {string[]} fields\n */\n DataUtil.select = function (jsonArray, fields) {\n var newData = [];\n for (var i = 0; i < jsonArray.length; i++) {\n newData.push(this.extractFields(jsonArray[i], fields));\n }\n return newData;\n };\n /**\n * Group the input data based on the field name.\n * It also performs aggregation of the grouped records based on the aggregates paramater.\n * @param {Object[]} jsonArray\n * @param {string} field?\n * @param {Object[]} agg?\n * @param {number} level?\n * @param {Object[]} groupDs?\n */\n DataUtil.group = function (jsonArray, field, aggregates, level, groupDs, format) {\n level = level || 1;\n var jsonData = jsonArray;\n var guid = 'GroupGuid';\n if (jsonData.GroupGuid === consts[guid]) {\n var _loop_1 = function (j) {\n if (!isNullOrUndefined(groupDs)) {\n var indx = -1;\n var temp = groupDs.filter(function (e) { return e.key === jsonData[j].key; });\n indx = groupDs.indexOf(temp[0]);\n jsonData[j].items = this_1.group(jsonData[j].items, field, aggregates, jsonData.level + 1, groupDs[indx].items, format);\n jsonData[j].count = groupDs[indx].count;\n }\n else {\n jsonData[j].items = this_1.group(jsonData[j].items, field, aggregates, jsonData.level + 1, null, format);\n jsonData[j].count = jsonData[j].items.length;\n }\n };\n var this_1 = this;\n for (var j = 0; j < jsonData.length; j++) {\n _loop_1(j);\n }\n jsonData.childLevels += 1;\n return jsonData;\n }\n var grouped = {};\n var groupedArray = [];\n groupedArray.GroupGuid = consts[guid];\n groupedArray.level = level;\n groupedArray.childLevels = 0;\n groupedArray.records = jsonData;\n var _loop_2 = function (i) {\n var val = this_2.getVal(jsonData, i, field);\n if (!isNullOrUndefined(format)) {\n val = format(val, field);\n }\n if (!grouped[val]) {\n grouped[val] = {\n key: val,\n count: 0,\n items: [],\n aggregates: {},\n field: field\n };\n groupedArray.push(grouped[val]);\n if (!isNullOrUndefined(groupDs)) {\n var tempObj = groupDs.filter(function (e) { return e.key === grouped[val].key; });\n grouped[val].count = tempObj[0].count;\n }\n }\n grouped[val].count = !isNullOrUndefined(groupDs) ? grouped[val].count : grouped[val].count += 1;\n grouped[val].items.push(jsonData[i]);\n };\n var this_2 = this;\n for (var i = 0; i < jsonData.length; i++) {\n _loop_2(i);\n }\n if (aggregates && aggregates.length) {\n var _loop_3 = function (i) {\n var res = {};\n var fn = void 0;\n var aggs = aggregates;\n for (var j = 0; j < aggregates.length; j++) {\n fn = DataUtil.aggregates[aggregates[j].type];\n if (!isNullOrUndefined(groupDs)) {\n var temp = groupDs.filter(function (e) { return e.key === groupedArray[i].key; });\n if (fn) {\n res[aggs[j].field + ' - ' + aggs[j].type] = fn(temp[0].items, aggs[j].field);\n }\n }\n else {\n if (fn) {\n res[aggs[j].field + ' - ' + aggs[j].type] = fn(groupedArray[i].items, aggs[j].field);\n }\n }\n }\n groupedArray[i].aggregates = res;\n };\n for (var i = 0; i < groupedArray.length; i++) {\n _loop_3(i);\n }\n }\n return jsonData.length && groupedArray || jsonData;\n };\n /**\n * It is used to categorize the multiple items based on a specific field in jsonArray.\n * The hierarchical queries are commonly required when you use foreign key binding.\n * @param {string} fKey\n * @param {string} from\n * @param {Object[]} source\n * @param {Group} lookup?\n * @param {string} pKey?\n * @hidden\n */\n DataUtil.buildHierarchy = function (fKey, from, source, lookup, pKey) {\n var i;\n var grp = {};\n var temp;\n if (lookup.result) {\n lookup = lookup.result;\n }\n if (lookup.GroupGuid) {\n this.throwError('DataManager: Do not have support Grouping in hierarchy');\n }\n for (i = 0; i < lookup.length; i++) {\n var fKeyData = this.getObject(fKey, lookup[i]);\n temp = grp[fKeyData] || (grp[fKeyData] = []);\n temp.push(lookup[i]);\n }\n for (i = 0; i < source.length; i++) {\n var fKeyData = this.getObject(pKey || fKey, source[i]);\n source[i][from] = grp[fKeyData];\n }\n };\n /**\n * The method used to get the field names which started with specified characters.\n * @param {Object} obj\n * @param {string[]} fields?\n * @param {string} prefix?\n * @hidden\n */\n DataUtil.getFieldList = function (obj, fields, prefix) {\n if (prefix === undefined) {\n prefix = '';\n }\n if (fields === undefined || fields === null) {\n return this.getFieldList(obj, [], prefix);\n }\n var copyObj = obj;\n var keys = Object.keys(obj);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var prop = keys_1[_i];\n if (typeof copyObj[prop] === 'object' && !(copyObj[prop] instanceof Array)) {\n this.getFieldList(copyObj[prop], fields, prefix + prop + '.');\n }\n else {\n fields.push(prefix + prop);\n }\n }\n return fields;\n };\n /**\n * Gets the value of the property in the given object.\n * The complex object can be accessed by providing the field names concatenated with dot(.).\n * @param {string} nameSpace - The name of the property to be accessed.\n * @param {Object} from - Defines the source object.\n */\n DataUtil.getObject = function (nameSpace, from) {\n if (!nameSpace) {\n return from;\n }\n if (!from) {\n return undefined;\n }\n if (nameSpace.indexOf('.') === -1) {\n return from[nameSpace];\n }\n var value = from;\n var splits = nameSpace.split('.');\n for (var i = 0; i < splits.length; i++) {\n if (value == null) {\n break;\n }\n value = value[splits[i]];\n }\n return value;\n };\n /**\n * To set value for the nameSpace in desired object.\n * @param {string} nameSpace - String value to the get the inner object.\n * @param {Object} value - Value that you need to set.\n * @param {Object} obj - Object to get the inner object value.\n * @return { [key: string]: Object; } | Object\n * @hidden\n */\n DataUtil.setValue = function (nameSpace, value, obj) {\n var keys = nameSpace.toString().split('.');\n var start = obj || {};\n var fromObj = start;\n var i;\n var length = keys.length;\n var key;\n for (i = 0; i < length; i++) {\n key = keys[i];\n if (i + 1 === length) {\n fromObj[key] = value === undefined ? undefined : value;\n }\n else if (isNullOrUndefined(fromObj[key])) {\n fromObj[key] = {};\n }\n fromObj = fromObj[key];\n }\n return start;\n };\n /**\n * Sort the given data based on the field and comparer.\n * @param {Object[]} ds - Defines the input data.\n * @param {string} field - Defines the field to be sorted.\n * @param {Function} comparer - Defines the comparer function used to sort the records.\n */\n DataUtil.sort = function (ds, field, comparer) {\n if (ds.length <= 1) {\n return ds;\n }\n var middle = parseInt((ds.length / 2).toString(), 10);\n var left = ds.slice(0, middle);\n var right = ds.slice(middle);\n left = this.sort(left, field, comparer);\n right = this.sort(right, field, comparer);\n return this.merge(left, right, field, comparer);\n };\n DataUtil.ignoreDiacritics = function (value) {\n if (typeof value !== 'string') {\n return value;\n }\n var result = value.split('');\n var newValue = result.map(function (temp) { return temp in DataUtil.diacritics ? DataUtil.diacritics[temp] : temp; });\n return newValue.join('');\n };\n DataUtil.merge = function (left, right, fieldName, comparer) {\n var result = [];\n var current;\n while (left.length > 0 || right.length > 0) {\n if (left.length > 0 && right.length > 0) {\n if (comparer) {\n current = comparer(this.getVal(left, 0, fieldName), this.getVal(right, 0, fieldName)) <= 0 ? left : right;\n }\n else {\n current = left[0][fieldName] < left[0][fieldName] ? left : right;\n }\n }\n else {\n current = left.length > 0 ? left : right;\n }\n result.push(current.shift());\n }\n return result;\n };\n DataUtil.getVal = function (array, index, field) {\n return field ? this.getObject(field, array[index]) : array[index];\n };\n DataUtil.toLowerCase = function (val) {\n return val ? typeof val === 'string' ? val.toLowerCase() : val.toString() : (val === 0 || val === false) ? val.toString() : '';\n };\n /**\n * To perform the filter operation with specified adaptor and returns the result.\n * @param {Object} adaptor\n * @param {string} fnName\n * @param {Object} param1?\n * @param {Object} param2?\n * @hidden\n */\n DataUtil.callAdaptorFunction = function (adaptor, fnName, param1, param2) {\n if (fnName in adaptor) {\n var res = adaptor[fnName](param1, param2);\n if (!isNullOrUndefined(res)) {\n param1 = res;\n }\n }\n return param1;\n };\n /**\n * Checks wheather the given input is a plain object or not.\n * @param {Object|Object[]} obj\n */\n DataUtil.isPlainObject = function (obj) {\n return (!!obj) && (obj.constructor === Object);\n };\n /**\n * Returns true when the browser cross origin request.\n */\n DataUtil.isCors = function () {\n var xhr = null;\n var request = 'XMLHttpRequest';\n try {\n xhr = new window[request]();\n }\n catch (e) {\n // No exception handling\n }\n return !!xhr && ('withCredentials' in xhr);\n };\n /**\n * Generate random GUID value which will be prefixed with the given value.\n * @param {string} prefix\n */\n DataUtil.getGuid = function (prefix) {\n var hexs = '0123456789abcdef';\n var rand;\n return (prefix || '') + '00000000-0000-4000-0000-000000000000'.replace(/0/g, function (val, i) {\n if ('crypto' in window && 'getRandomValues' in crypto) {\n var arr = new Uint8Array(1);\n window.crypto.getRandomValues(arr);\n rand = arr[0] % 16 | 0;\n }\n else {\n rand = Math.random() * 16 | 0;\n }\n return hexs[i === 19 ? rand & 0x3 | 0x8 : rand];\n });\n };\n /**\n * Checks wheather the given value is null or not.\n * @param {string|Object} val\n * @returns boolean\n */\n DataUtil.isNull = function (val) {\n return val === undefined || val === null;\n };\n /**\n * To get the required items from collection of objects.\n * @param {Object[]} array\n * @param {string} field\n * @param {Function} comparer\n * @returns Object\n * @hidden\n */\n DataUtil.getItemFromComparer = function (array, field, comparer) {\n var keyVal;\n var current;\n var key;\n var i = 0;\n var castRequired = typeof DataUtil.getVal(array, 0, field) === 'string';\n if (array.length) {\n while (isNullOrUndefined(keyVal) && i < array.length) {\n keyVal = DataUtil.getVal(array, i, field);\n key = array[i++];\n }\n }\n for (; i < array.length; i++) {\n current = DataUtil.getVal(array, i, field);\n if (isNullOrUndefined(current)) {\n continue;\n }\n if (castRequired) {\n keyVal = +keyVal;\n current = +current;\n }\n if (comparer(keyVal, current) > 0) {\n keyVal = current;\n key = array[i];\n }\n }\n return key;\n };\n /**\n * To get distinct values of Array or Array of Objects.\n * @param {Object[]} json\n * @param {string} field\n * @param {boolean} requiresCompleteRecord\n * @returns Object[]\n * * distinct array of objects is return when requiresCompleteRecord set as true.\n * @hidden\n */\n DataUtil.distinct = function (json, fieldName, requiresCompleteRecord) {\n requiresCompleteRecord = isNullOrUndefined(requiresCompleteRecord) ? false : requiresCompleteRecord;\n var result = [];\n var val;\n var tmp = {};\n json.forEach(function (data, index) {\n val = DataUtil.getVal(json, index, fieldName);\n if (!(val in tmp)) {\n result.push(!requiresCompleteRecord ? val : json[index]);\n tmp[val] = 1;\n }\n });\n return result;\n };\n /**\n * Specifies the value which will be used to adjust the date value to server timezone.\n * @default null\n */\n DataUtil.serverTimezoneOffset = null;\n /**\n * Throw error with the given string as message.\n * @param {string} er\n */\n DataUtil.throwError = function (error) {\n try {\n throw new Error(error);\n }\n catch (e) {\n throw e.message + '\\n' + e.stack;\n }\n };\n DataUtil.aggregates = {\n /**\n * Calculate sum of the given field in the data.\n * @param {Object[]} ds\n * @param {string} field\n */\n sum: function (ds, field) {\n var result = 0;\n var val;\n var castRequired = typeof DataUtil.getVal(ds, 0, field) !== 'number';\n for (var i = 0; i < ds.length; i++) {\n val = DataUtil.getVal(ds, i, field);\n if (!isNaN(val) && val !== null) {\n if (castRequired) {\n val = +val;\n }\n result += val;\n }\n }\n return result;\n },\n /**\n * Calculate average value of the given field in the data.\n * @param {Object[]} ds\n * @param {string} field\n */\n average: function (ds, field) {\n return DataUtil.aggregates.sum(ds, field) / ds.length;\n },\n /**\n * Returns the min value of the data based on the field.\n * @param {Object[]} ds\n * @param {string|Function} field\n */\n min: function (ds, field) {\n var comparer;\n if (typeof field === 'function') {\n comparer = field;\n field = null;\n }\n return DataUtil.getObject(field, DataUtil.getItemFromComparer(ds, field, comparer || DataUtil.fnAscending));\n },\n /**\n * Returns the max value of the data based on the field.\n * @param {Object[]} ds\n * @param {string} field\n * @returns number\n */\n max: function (ds, field) {\n var comparer;\n if (typeof field === 'function') {\n comparer = field;\n field = null;\n }\n return DataUtil.getObject(field, DataUtil.getItemFromComparer(ds, field, comparer || DataUtil.fnDescending));\n },\n /**\n * Returns the total number of true value present in the data based on the given boolean field name.\n * @param {Object[]} ds\n * @param {string} field\n */\n truecount: function (ds, field) {\n return new DataManager(ds).executeLocal(new Query().where(field, 'equal', true, true)).length;\n },\n /**\n * Returns the total number of false value present in the data based on the given boolean field name.\n * @param {Object[]} ds\n * @param {string} field\n */\n falsecount: function (ds, field) {\n return new DataManager(ds).executeLocal(new Query().where(field, 'equal', false, true)).length;\n },\n /**\n * Returns the length of the given data.\n * @param {Object[]} ds\n * @param {string} field?\n * @returns number\n */\n count: function (ds, field) {\n return ds.length;\n }\n };\n /**\n * Specifies the Object with filter operators.\n */\n DataUtil.operatorSymbols = {\n '<': 'lessthan',\n '>': 'greaterthan',\n '<=': 'lessthanorequal',\n '>=': 'greaterthanorequal',\n '==': 'equal',\n '!=': 'notequal',\n '*=': 'contains',\n '$=': 'endswith',\n '^=': 'startswith'\n };\n /**\n * Specifies the Object with filter operators which will be used for OData filter query generation.\n * * It will be used for date/number type filter query.\n */\n DataUtil.odBiOperator = {\n '<': ' lt ',\n '>': ' gt ',\n '<=': ' le ',\n '>=': ' ge ',\n '==': ' eq ',\n '!=': ' ne ',\n 'lessthan': ' lt ',\n 'lessthanorequal': ' le ',\n 'greaterthan': ' gt ',\n 'greaterthanorequal': ' ge ',\n 'equal': ' eq ',\n 'notequal': ' ne '\n };\n /**\n * Specifies the Object with filter operators which will be used for OData filter query generation.\n * It will be used for string type filter query.\n */\n DataUtil.odUniOperator = {\n '$=': 'endswith',\n '^=': 'startswith',\n '*=': 'substringof',\n 'endswith': 'endswith',\n 'startswith': 'startswith',\n 'contains': 'substringof'\n };\n /**\n * Specifies the Object with filter operators which will be used for ODataV4 filter query generation.\n * It will be used for string type filter query.\n */\n DataUtil.odv4UniOperator = {\n '$=': 'endswith',\n '^=': 'startswith',\n '*=': 'contains',\n 'endswith': 'endswith',\n 'startswith': 'startswith',\n 'contains': 'contains'\n };\n DataUtil.diacritics = {\n '\\u24B6': 'A',\n '\\uFF21': 'A',\n '\\u00C0': 'A',\n '\\u00C1': 'A',\n '\\u00C2': 'A',\n '\\u1EA6': 'A',\n '\\u1EA4': 'A',\n '\\u1EAA': 'A',\n '\\u1EA8': 'A',\n '\\u00C3': 'A',\n '\\u0100': 'A',\n '\\u0102': 'A',\n '\\u1EB0': 'A',\n '\\u1EAE': 'A',\n '\\u1EB4': 'A',\n '\\u1EB2': 'A',\n '\\u0226': 'A',\n '\\u01E0': 'A',\n '\\u00C4': 'A',\n '\\u01DE': 'A',\n '\\u1EA2': 'A',\n '\\u00C5': 'A',\n '\\u01FA': 'A',\n '\\u01CD': 'A',\n '\\u0200': 'A',\n '\\u0202': 'A',\n '\\u1EA0': 'A',\n '\\u1EAC': 'A',\n '\\u1EB6': 'A',\n '\\u1E00': 'A',\n '\\u0104': 'A',\n '\\u023A': 'A',\n '\\u2C6F': 'A',\n '\\uA732': 'AA',\n '\\u00C6': 'AE',\n '\\u01FC': 'AE',\n '\\u01E2': 'AE',\n '\\uA734': 'AO',\n '\\uA736': 'AU',\n '\\uA738': 'AV',\n '\\uA73A': 'AV',\n '\\uA73C': 'AY',\n '\\u24B7': 'B',\n '\\uFF22': 'B',\n '\\u1E02': 'B',\n '\\u1E04': 'B',\n '\\u1E06': 'B',\n '\\u0243': 'B',\n '\\u0182': 'B',\n '\\u0181': 'B',\n '\\u24B8': 'C',\n '\\uFF23': 'C',\n '\\u0106': 'C',\n '\\u0108': 'C',\n '\\u010A': 'C',\n '\\u010C': 'C',\n '\\u00C7': 'C',\n '\\u1E08': 'C',\n '\\u0187': 'C',\n '\\u023B': 'C',\n '\\uA73E': 'C',\n '\\u24B9': 'D',\n '\\uFF24': 'D',\n '\\u1E0A': 'D',\n '\\u010E': 'D',\n '\\u1E0C': 'D',\n '\\u1E10': 'D',\n '\\u1E12': 'D',\n '\\u1E0E': 'D',\n '\\u0110': 'D',\n '\\u018B': 'D',\n '\\u018A': 'D',\n '\\u0189': 'D',\n '\\uA779': 'D',\n '\\u01F1': 'DZ',\n '\\u01C4': 'DZ',\n '\\u01F2': 'Dz',\n '\\u01C5': 'Dz',\n '\\u24BA': 'E',\n '\\uFF25': 'E',\n '\\u00C8': 'E',\n '\\u00C9': 'E',\n '\\u00CA': 'E',\n '\\u1EC0': 'E',\n '\\u1EBE': 'E',\n '\\u1EC4': 'E',\n '\\u1EC2': 'E',\n '\\u1EBC': 'E',\n '\\u0112': 'E',\n '\\u1E14': 'E',\n '\\u1E16': 'E',\n '\\u0114': 'E',\n '\\u0116': 'E',\n '\\u00CB': 'E',\n '\\u1EBA': 'E',\n '\\u011A': 'E',\n '\\u0204': 'E',\n '\\u0206': 'E',\n '\\u1EB8': 'E',\n '\\u1EC6': 'E',\n '\\u0228': 'E',\n '\\u1E1C': 'E',\n '\\u0118': 'E',\n '\\u1E18': 'E',\n '\\u1E1A': 'E',\n '\\u0190': 'E',\n '\\u018E': 'E',\n '\\u24BB': 'F',\n '\\uFF26': 'F',\n '\\u1E1E': 'F',\n '\\u0191': 'F',\n '\\uA77B': 'F',\n '\\u24BC': 'G',\n '\\uFF27': 'G',\n '\\u01F4': 'G',\n '\\u011C': 'G',\n '\\u1E20': 'G',\n '\\u011E': 'G',\n '\\u0120': 'G',\n '\\u01E6': 'G',\n '\\u0122': 'G',\n '\\u01E4': 'G',\n '\\u0193': 'G',\n '\\uA7A0': 'G',\n '\\uA77D': 'G',\n '\\uA77E': 'G',\n '\\u24BD': 'H',\n '\\uFF28': 'H',\n '\\u0124': 'H',\n '\\u1E22': 'H',\n '\\u1E26': 'H',\n '\\u021E': 'H',\n '\\u1E24': 'H',\n '\\u1E28': 'H',\n '\\u1E2A': 'H',\n '\\u0126': 'H',\n '\\u2C67': 'H',\n '\\u2C75': 'H',\n '\\uA78D': 'H',\n '\\u24BE': 'I',\n '\\uFF29': 'I',\n '\\u00CC': 'I',\n '\\u00CD': 'I',\n '\\u00CE': 'I',\n '\\u0128': 'I',\n '\\u012A': 'I',\n '\\u012C': 'I',\n '\\u0130': 'I',\n '\\u00CF': 'I',\n '\\u1E2E': 'I',\n '\\u1EC8': 'I',\n '\\u01CF': 'I',\n '\\u0208': 'I',\n '\\u020A': 'I',\n '\\u1ECA': 'I',\n '\\u012E': 'I',\n '\\u1E2C': 'I',\n '\\u0197': 'I',\n '\\u24BF': 'J',\n '\\uFF2A': 'J',\n '\\u0134': 'J',\n '\\u0248': 'J',\n '\\u24C0': 'K',\n '\\uFF2B': 'K',\n '\\u1E30': 'K',\n '\\u01E8': 'K',\n '\\u1E32': 'K',\n '\\u0136': 'K',\n '\\u1E34': 'K',\n '\\u0198': 'K',\n '\\u2C69': 'K',\n '\\uA740': 'K',\n '\\uA742': 'K',\n '\\uA744': 'K',\n '\\uA7A2': 'K',\n '\\u24C1': 'L',\n '\\uFF2C': 'L',\n '\\u013F': 'L',\n '\\u0139': 'L',\n '\\u013D': 'L',\n '\\u1E36': 'L',\n '\\u1E38': 'L',\n '\\u013B': 'L',\n '\\u1E3C': 'L',\n '\\u1E3A': 'L',\n '\\u0141': 'L',\n '\\u023D': 'L',\n '\\u2C62': 'L',\n '\\u2C60': 'L',\n '\\uA748': 'L',\n '\\uA746': 'L',\n '\\uA780': 'L',\n '\\u01C7': 'LJ',\n '\\u01C8': 'Lj',\n '\\u24C2': 'M',\n '\\uFF2D': 'M',\n '\\u1E3E': 'M',\n '\\u1E40': 'M',\n '\\u1E42': 'M',\n '\\u2C6E': 'M',\n '\\u019C': 'M',\n '\\u24C3': 'N',\n '\\uFF2E': 'N',\n '\\u01F8': 'N',\n '\\u0143': 'N',\n '\\u00D1': 'N',\n '\\u1E44': 'N',\n '\\u0147': 'N',\n '\\u1E46': 'N',\n '\\u0145': 'N',\n '\\u1E4A': 'N',\n '\\u1E48': 'N',\n '\\u0220': 'N',\n '\\u019D': 'N',\n '\\uA790': 'N',\n '\\uA7A4': 'N',\n '\\u01CA': 'NJ',\n '\\u01CB': 'Nj',\n '\\u24C4': 'O',\n '\\uFF2F': 'O',\n '\\u00D2': 'O',\n '\\u00D3': 'O',\n '\\u00D4': 'O',\n '\\u1ED2': 'O',\n '\\u1ED0': 'O',\n '\\u1ED6': 'O',\n '\\u1ED4': 'O',\n '\\u00D5': 'O',\n '\\u1E4C': 'O',\n '\\u022C': 'O',\n '\\u1E4E': 'O',\n '\\u014C': 'O',\n '\\u1E50': 'O',\n '\\u1E52': 'O',\n '\\u014E': 'O',\n '\\u022E': 'O',\n '\\u0230': 'O',\n '\\u00D6': 'O',\n '\\u022A': 'O',\n '\\u1ECE': 'O',\n '\\u0150': 'O',\n '\\u01D1': 'O',\n '\\u020C': 'O',\n '\\u020E': 'O',\n '\\u01A0': 'O',\n '\\u1EDC': 'O',\n '\\u1EDA': 'O',\n '\\u1EE0': 'O',\n '\\u1EDE': 'O',\n '\\u1EE2': 'O',\n '\\u1ECC': 'O',\n '\\u1ED8': 'O',\n '\\u01EA': 'O',\n '\\u01EC': 'O',\n '\\u00D8': 'O',\n '\\u01FE': 'O',\n '\\u0186': 'O',\n '\\u019F': 'O',\n '\\uA74A': 'O',\n '\\uA74C': 'O',\n '\\u01A2': 'OI',\n '\\uA74E': 'OO',\n '\\u0222': 'OU',\n '\\u24C5': 'P',\n '\\uFF30': 'P',\n '\\u1E54': 'P',\n '\\u1E56': 'P',\n '\\u01A4': 'P',\n '\\u2C63': 'P',\n '\\uA750': 'P',\n '\\uA752': 'P',\n '\\uA754': 'P',\n '\\u24C6': 'Q',\n '\\uFF31': 'Q',\n '\\uA756': 'Q',\n '\\uA758': 'Q',\n '\\u024A': 'Q',\n '\\u24C7': 'R',\n '\\uFF32': 'R',\n '\\u0154': 'R',\n '\\u1E58': 'R',\n '\\u0158': 'R',\n '\\u0210': 'R',\n '\\u0212': 'R',\n '\\u1E5A': 'R',\n '\\u1E5C': 'R',\n '\\u0156': 'R',\n '\\u1E5E': 'R',\n '\\u024C': 'R',\n '\\u2C64': 'R',\n '\\uA75A': 'R',\n '\\uA7A6': 'R',\n '\\uA782': 'R',\n '\\u24C8': 'S',\n '\\uFF33': 'S',\n '\\u1E9E': 'S',\n '\\u015A': 'S',\n '\\u1E64': 'S',\n '\\u015C': 'S',\n '\\u1E60': 'S',\n '\\u0160': 'S',\n '\\u1E66': 'S',\n '\\u1E62': 'S',\n '\\u1E68': 'S',\n '\\u0218': 'S',\n '\\u015E': 'S',\n '\\u2C7E': 'S',\n '\\uA7A8': 'S',\n '\\uA784': 'S',\n '\\u24C9': 'T',\n '\\uFF34': 'T',\n '\\u1E6A': 'T',\n '\\u0164': 'T',\n '\\u1E6C': 'T',\n '\\u021A': 'T',\n '\\u0162': 'T',\n '\\u1E70': 'T',\n '\\u1E6E': 'T',\n '\\u0166': 'T',\n '\\u01AC': 'T',\n '\\u01AE': 'T',\n '\\u023E': 'T',\n '\\uA786': 'T',\n '\\uA728': 'TZ',\n '\\u24CA': 'U',\n '\\uFF35': 'U',\n '\\u00D9': 'U',\n '\\u00DA': 'U',\n '\\u00DB': 'U',\n '\\u0168': 'U',\n '\\u1E78': 'U',\n '\\u016A': 'U',\n '\\u1E7A': 'U',\n '\\u016C': 'U',\n '\\u00DC': 'U',\n '\\u01DB': 'U',\n '\\u01D7': 'U',\n '\\u01D5': 'U',\n '\\u01D9': 'U',\n '\\u1EE6': 'U',\n '\\u016E': 'U',\n '\\u0170': 'U',\n '\\u01D3': 'U',\n '\\u0214': 'U',\n '\\u0216': 'U',\n '\\u01AF': 'U',\n '\\u1EEA': 'U',\n '\\u1EE8': 'U',\n '\\u1EEE': 'U',\n '\\u1EEC': 'U',\n '\\u1EF0': 'U',\n '\\u1EE4': 'U',\n '\\u1E72': 'U',\n '\\u0172': 'U',\n '\\u1E76': 'U',\n '\\u1E74': 'U',\n '\\u0244': 'U',\n '\\u24CB': 'V',\n '\\uFF36': 'V',\n '\\u1E7C': 'V',\n '\\u1E7E': 'V',\n '\\u01B2': 'V',\n '\\uA75E': 'V',\n '\\u0245': 'V',\n '\\uA760': 'VY',\n '\\u24CC': 'W',\n '\\uFF37': 'W',\n '\\u1E80': 'W',\n '\\u1E82': 'W',\n '\\u0174': 'W',\n '\\u1E86': 'W',\n '\\u1E84': 'W',\n '\\u1E88': 'W',\n '\\u2C72': 'W',\n '\\u24CD': 'X',\n '\\uFF38': 'X',\n '\\u1E8A': 'X',\n '\\u1E8C': 'X',\n '\\u24CE': 'Y',\n '\\uFF39': 'Y',\n '\\u1EF2': 'Y',\n '\\u00DD': 'Y',\n '\\u0176': 'Y',\n '\\u1EF8': 'Y',\n '\\u0232': 'Y',\n '\\u1E8E': 'Y',\n '\\u0178': 'Y',\n '\\u1EF6': 'Y',\n '\\u1EF4': 'Y',\n '\\u01B3': 'Y',\n '\\u024E': 'Y',\n '\\u1EFE': 'Y',\n '\\u24CF': 'Z',\n '\\uFF3A': 'Z',\n '\\u0179': 'Z',\n '\\u1E90': 'Z',\n '\\u017B': 'Z',\n '\\u017D': 'Z',\n '\\u1E92': 'Z',\n '\\u1E94': 'Z',\n '\\u01B5': 'Z',\n '\\u0224': 'Z',\n '\\u2C7F': 'Z',\n '\\u2C6B': 'Z',\n '\\uA762': 'Z',\n '\\u24D0': 'a',\n '\\uFF41': 'a',\n '\\u1E9A': 'a',\n '\\u00E0': 'a',\n '\\u00E1': 'a',\n '\\u00E2': 'a',\n '\\u1EA7': 'a',\n '\\u1EA5': 'a',\n '\\u1EAB': 'a',\n '\\u1EA9': 'a',\n '\\u00E3': 'a',\n '\\u0101': 'a',\n '\\u0103': 'a',\n '\\u1EB1': 'a',\n '\\u1EAF': 'a',\n '\\u1EB5': 'a',\n '\\u1EB3': 'a',\n '\\u0227': 'a',\n '\\u01E1': 'a',\n '\\u00E4': 'a',\n '\\u01DF': 'a',\n '\\u1EA3': 'a',\n '\\u00E5': 'a',\n '\\u01FB': 'a',\n '\\u01CE': 'a',\n '\\u0201': 'a',\n '\\u0203': 'a',\n '\\u1EA1': 'a',\n '\\u1EAD': 'a',\n '\\u1EB7': 'a',\n '\\u1E01': 'a',\n '\\u0105': 'a',\n '\\u2C65': 'a',\n '\\u0250': 'a',\n '\\uA733': 'aa',\n '\\u00E6': 'ae',\n '\\u01FD': 'ae',\n '\\u01E3': 'ae',\n '\\uA735': 'ao',\n '\\uA737': 'au',\n '\\uA739': 'av',\n '\\uA73B': 'av',\n '\\uA73D': 'ay',\n '\\u24D1': 'b',\n '\\uFF42': 'b',\n '\\u1E03': 'b',\n '\\u1E05': 'b',\n '\\u1E07': 'b',\n '\\u0180': 'b',\n '\\u0183': 'b',\n '\\u0253': 'b',\n '\\u24D2': 'c',\n '\\uFF43': 'c',\n '\\u0107': 'c',\n '\\u0109': 'c',\n '\\u010B': 'c',\n '\\u010D': 'c',\n '\\u00E7': 'c',\n '\\u1E09': 'c',\n '\\u0188': 'c',\n '\\u023C': 'c',\n '\\uA73F': 'c',\n '\\u2184': 'c',\n '\\u24D3': 'd',\n '\\uFF44': 'd',\n '\\u1E0B': 'd',\n '\\u010F': 'd',\n '\\u1E0D': 'd',\n '\\u1E11': 'd',\n '\\u1E13': 'd',\n '\\u1E0F': 'd',\n '\\u0111': 'd',\n '\\u018C': 'd',\n '\\u0256': 'd',\n '\\u0257': 'd',\n '\\uA77A': 'd',\n '\\u01F3': 'dz',\n '\\u01C6': 'dz',\n '\\u24D4': 'e',\n '\\uFF45': 'e',\n '\\u00E8': 'e',\n '\\u00E9': 'e',\n '\\u00EA': 'e',\n '\\u1EC1': 'e',\n '\\u1EBF': 'e',\n '\\u1EC5': 'e',\n '\\u1EC3': 'e',\n '\\u1EBD': 'e',\n '\\u0113': 'e',\n '\\u1E15': 'e',\n '\\u1E17': 'e',\n '\\u0115': 'e',\n '\\u0117': 'e',\n '\\u00EB': 'e',\n '\\u1EBB': 'e',\n '\\u011B': 'e',\n '\\u0205': 'e',\n '\\u0207': 'e',\n '\\u1EB9': 'e',\n '\\u1EC7': 'e',\n '\\u0229': 'e',\n '\\u1E1D': 'e',\n '\\u0119': 'e',\n '\\u1E19': 'e',\n '\\u1E1B': 'e',\n '\\u0247': 'e',\n '\\u025B': 'e',\n '\\u01DD': 'e',\n '\\u24D5': 'f',\n '\\uFF46': 'f',\n '\\u1E1F': 'f',\n '\\u0192': 'f',\n '\\uA77C': 'f',\n '\\u24D6': 'g',\n '\\uFF47': 'g',\n '\\u01F5': 'g',\n '\\u011D': 'g',\n '\\u1E21': 'g',\n '\\u011F': 'g',\n '\\u0121': 'g',\n '\\u01E7': 'g',\n '\\u0123': 'g',\n '\\u01E5': 'g',\n '\\u0260': 'g',\n '\\uA7A1': 'g',\n '\\u1D79': 'g',\n '\\uA77F': 'g',\n '\\u24D7': 'h',\n '\\uFF48': 'h',\n '\\u0125': 'h',\n '\\u1E23': 'h',\n '\\u1E27': 'h',\n '\\u021F': 'h',\n '\\u1E25': 'h',\n '\\u1E29': 'h',\n '\\u1E2B': 'h',\n '\\u1E96': 'h',\n '\\u0127': 'h',\n '\\u2C68': 'h',\n '\\u2C76': 'h',\n '\\u0265': 'h',\n '\\u0195': 'hv',\n '\\u24D8': 'i',\n '\\uFF49': 'i',\n '\\u00EC': 'i',\n '\\u00ED': 'i',\n '\\u00EE': 'i',\n '\\u0129': 'i',\n '\\u012B': 'i',\n '\\u012D': 'i',\n '\\u00EF': 'i',\n '\\u1E2F': 'i',\n '\\u1EC9': 'i',\n '\\u01D0': 'i',\n '\\u0209': 'i',\n '\\u020B': 'i',\n '\\u1ECB': 'i',\n '\\u012F': 'i',\n '\\u1E2D': 'i',\n '\\u0268': 'i',\n '\\u0131': 'i',\n '\\u24D9': 'j',\n '\\uFF4A': 'j',\n '\\u0135': 'j',\n '\\u01F0': 'j',\n '\\u0249': 'j',\n '\\u24DA': 'k',\n '\\uFF4B': 'k',\n '\\u1E31': 'k',\n '\\u01E9': 'k',\n '\\u1E33': 'k',\n '\\u0137': 'k',\n '\\u1E35': 'k',\n '\\u0199': 'k',\n '\\u2C6A': 'k',\n '\\uA741': 'k',\n '\\uA743': 'k',\n '\\uA745': 'k',\n '\\uA7A3': 'k',\n '\\u24DB': 'l',\n '\\uFF4C': 'l',\n '\\u0140': 'l',\n '\\u013A': 'l',\n '\\u013E': 'l',\n '\\u1E37': 'l',\n '\\u1E39': 'l',\n '\\u013C': 'l',\n '\\u1E3D': 'l',\n '\\u1E3B': 'l',\n '\\u017F': 'l',\n '\\u0142': 'l',\n '\\u019A': 'l',\n '\\u026B': 'l',\n '\\u2C61': 'l',\n '\\uA749': 'l',\n '\\uA781': 'l',\n '\\uA747': 'l',\n '\\u01C9': 'lj',\n '\\u24DC': 'm',\n '\\uFF4D': 'm',\n '\\u1E3F': 'm',\n '\\u1E41': 'm',\n '\\u1E43': 'm',\n '\\u0271': 'm',\n '\\u026F': 'm',\n '\\u24DD': 'n',\n '\\uFF4E': 'n',\n '\\u01F9': 'n',\n '\\u0144': 'n',\n '\\u00F1': 'n',\n '\\u1E45': 'n',\n '\\u0148': 'n',\n '\\u1E47': 'n',\n '\\u0146': 'n',\n '\\u1E4B': 'n',\n '\\u1E49': 'n',\n '\\u019E': 'n',\n '\\u0272': 'n',\n '\\u0149': 'n',\n '\\uA791': 'n',\n '\\uA7A5': 'n',\n '\\u01CC': 'nj',\n '\\u24DE': 'o',\n '\\uFF4F': 'o',\n '\\u00F2': 'o',\n '\\u00F3': 'o',\n '\\u00F4': 'o',\n '\\u1ED3': 'o',\n '\\u1ED1': 'o',\n '\\u1ED7': 'o',\n '\\u1ED5': 'o',\n '\\u00F5': 'o',\n '\\u1E4D': 'o',\n '\\u022D': 'o',\n '\\u1E4F': 'o',\n '\\u014D': 'o',\n '\\u1E51': 'o',\n '\\u1E53': 'o',\n '\\u014F': 'o',\n '\\u022F': 'o',\n '\\u0231': 'o',\n '\\u00F6': 'o',\n '\\u022B': 'o',\n '\\u1ECF': 'o',\n '\\u0151': 'o',\n '\\u01D2': 'o',\n '\\u020D': 'o',\n '\\u020F': 'o',\n '\\u01A1': 'o',\n '\\u1EDD': 'o',\n '\\u1EDB': 'o',\n '\\u1EE1': 'o',\n '\\u1EDF': 'o',\n '\\u1EE3': 'o',\n '\\u1ECD': 'o',\n '\\u1ED9': 'o',\n '\\u01EB': 'o',\n '\\u01ED': 'o',\n '\\u00F8': 'o',\n '\\u01FF': 'o',\n '\\u0254': 'o',\n '\\uA74B': 'o',\n '\\uA74D': 'o',\n '\\u0275': 'o',\n '\\u01A3': 'oi',\n '\\u0223': 'ou',\n '\\uA74F': 'oo',\n '\\u24DF': 'p',\n '\\uFF50': 'p',\n '\\u1E55': 'p',\n '\\u1E57': 'p',\n '\\u01A5': 'p',\n '\\u1D7D': 'p',\n '\\uA751': 'p',\n '\\uA753': 'p',\n '\\uA755': 'p',\n '\\u24E0': 'q',\n '\\uFF51': 'q',\n '\\u024B': 'q',\n '\\uA757': 'q',\n '\\uA759': 'q',\n '\\u24E1': 'r',\n '\\uFF52': 'r',\n '\\u0155': 'r',\n '\\u1E59': 'r',\n '\\u0159': 'r',\n '\\u0211': 'r',\n '\\u0213': 'r',\n '\\u1E5B': 'r',\n '\\u1E5D': 'r',\n '\\u0157': 'r',\n '\\u1E5F': 'r',\n '\\u024D': 'r',\n '\\u027D': 'r',\n '\\uA75B': 'r',\n '\\uA7A7': 'r',\n '\\uA783': 'r',\n '\\u24E2': 's',\n '\\uFF53': 's',\n '\\u00DF': 's',\n '\\u015B': 's',\n '\\u1E65': 's',\n '\\u015D': 's',\n '\\u1E61': 's',\n '\\u0161': 's',\n '\\u1E67': 's',\n '\\u1E63': 's',\n '\\u1E69': 's',\n '\\u0219': 's',\n '\\u015F': 's',\n '\\u023F': 's',\n '\\uA7A9': 's',\n '\\uA785': 's',\n '\\u1E9B': 's',\n '\\u24E3': 't',\n '\\uFF54': 't',\n '\\u1E6B': 't',\n '\\u1E97': 't',\n '\\u0165': 't',\n '\\u1E6D': 't',\n '\\u021B': 't',\n '\\u0163': 't',\n '\\u1E71': 't',\n '\\u1E6F': 't',\n '\\u0167': 't',\n '\\u01AD': 't',\n '\\u0288': 't',\n '\\u2C66': 't',\n '\\uA787': 't',\n '\\uA729': 'tz',\n '\\u24E4': 'u',\n '\\uFF55': 'u',\n '\\u00F9': 'u',\n '\\u00FA': 'u',\n '\\u00FB': 'u',\n '\\u0169': 'u',\n '\\u1E79': 'u',\n '\\u016B': 'u',\n '\\u1E7B': 'u',\n '\\u016D': 'u',\n '\\u00FC': 'u',\n '\\u01DC': 'u',\n '\\u01D8': 'u',\n '\\u01D6': 'u',\n '\\u01DA': 'u',\n '\\u1EE7': 'u',\n '\\u016F': 'u',\n '\\u0171': 'u',\n '\\u01D4': 'u',\n '\\u0215': 'u',\n '\\u0217': 'u',\n '\\u01B0': 'u',\n '\\u1EEB': 'u',\n '\\u1EE9': 'u',\n '\\u1EEF': 'u',\n '\\u1EED': 'u',\n '\\u1EF1': 'u',\n '\\u1EE5': 'u',\n '\\u1E73': 'u',\n '\\u0173': 'u',\n '\\u1E77': 'u',\n '\\u1E75': 'u',\n '\\u0289': 'u',\n '\\u24E5': 'v',\n '\\uFF56': 'v',\n '\\u1E7D': 'v',\n '\\u1E7F': 'v',\n '\\u028B': 'v',\n '\\uA75F': 'v',\n '\\u028C': 'v',\n '\\uA761': 'vy',\n '\\u24E6': 'w',\n '\\uFF57': 'w',\n '\\u1E81': 'w',\n '\\u1E83': 'w',\n '\\u0175': 'w',\n '\\u1E87': 'w',\n '\\u1E85': 'w',\n '\\u1E98': 'w',\n '\\u1E89': 'w',\n '\\u2C73': 'w',\n '\\u24E7': 'x',\n '\\uFF58': 'x',\n '\\u1E8B': 'x',\n '\\u1E8D': 'x',\n '\\u24E8': 'y',\n '\\uFF59': 'y',\n '\\u1EF3': 'y',\n '\\u00FD': 'y',\n '\\u0177': 'y',\n '\\u1EF9': 'y',\n '\\u0233': 'y',\n '\\u1E8F': 'y',\n '\\u00FF': 'y',\n '\\u1EF7': 'y',\n '\\u1E99': 'y',\n '\\u1EF5': 'y',\n '\\u01B4': 'y',\n '\\u024F': 'y',\n '\\u1EFF': 'y',\n '\\u24E9': 'z',\n '\\uFF5A': 'z',\n '\\u017A': 'z',\n '\\u1E91': 'z',\n '\\u017C': 'z',\n '\\u017E': 'z',\n '\\u1E93': 'z',\n '\\u1E95': 'z',\n '\\u01B6': 'z',\n '\\u0225': 'z',\n '\\u0240': 'z',\n '\\u2C6C': 'z',\n '\\uA763': 'z',\n '\\u0386': '\\u0391',\n '\\u0388': '\\u0395',\n '\\u0389': '\\u0397',\n '\\u038A': '\\u0399',\n '\\u03AA': '\\u0399',\n '\\u038C': '\\u039F',\n '\\u038E': '\\u03A5',\n '\\u03AB': '\\u03A5',\n '\\u038F': '\\u03A9',\n '\\u03AC': '\\u03B1',\n '\\u03AD': '\\u03B5',\n '\\u03AE': '\\u03B7',\n '\\u03AF': '\\u03B9',\n '\\u03CA': '\\u03B9',\n '\\u0390': '\\u03B9',\n '\\u03CC': '\\u03BF',\n '\\u03CD': '\\u03C5',\n '\\u03CB': '\\u03C5',\n '\\u03B0': '\\u03C5',\n '\\u03C9': '\\u03C9',\n '\\u03C2': '\\u03C3'\n };\n DataUtil.fnOperators = {\n /**\n * Returns true when the actual input is equal to the given input.\n * @param {string|number|boolean} actual\n * @param {string|number|boolean} expected\n * @param {boolean} ignoreCase?\n * @param {boolean} ignoreAccent?\n */\n equal: function (actual, expected, ignoreCase, ignoreAccent) {\n if (ignoreAccent) {\n actual = DataUtil.ignoreDiacritics(actual);\n expected = DataUtil.ignoreDiacritics(expected);\n }\n if (ignoreCase) {\n return DataUtil.toLowerCase(actual) === DataUtil.toLowerCase(expected);\n }\n return actual === expected;\n },\n /**\n * Returns true when the actual input is not equal to the given input.\n * @param {string|number|boolean} actual\n * @param {string|number|boolean} expected\n * @param {boolean} ignoreCase?\n */\n notequal: function (actual, expected, ignoreCase, ignoreAccent) {\n if (ignoreAccent) {\n actual = DataUtil.ignoreDiacritics(actual);\n expected = DataUtil.ignoreDiacritics(expected);\n }\n return !DataUtil.fnOperators.equal(actual, expected, ignoreCase);\n },\n /**\n * Returns true when the actual input is less than to the given input.\n * @param {string|number|boolean} actual\n * @param {string|number|boolean} expected\n * @param {boolean} ignoreCase?\n */\n lessthan: function (actual, expected, ignoreCase) {\n if (ignoreCase) {\n return DataUtil.toLowerCase(actual) < DataUtil.toLowerCase(expected);\n }\n return actual < expected;\n },\n /**\n * Returns true when the actual input is greater than to the given input.\n * @param {string|number|boolean} actual\n * @param {string|number|boolean} expected\n * @param {boolean} ignoreCase?\n */\n greaterthan: function (actual, expected, ignoreCase) {\n if (ignoreCase) {\n return DataUtil.toLowerCase(actual) > DataUtil.toLowerCase(expected);\n }\n return actual > expected;\n },\n /**\n * Returns true when the actual input is less than or equal to the given input.\n * @param {string|number|boolean} actual\n * @param {string|number|boolean} expected\n * @param {boolean} ignoreCase?\n */\n lessthanorequal: function (actual, expected, ignoreCase) {\n if (ignoreCase) {\n return DataUtil.toLowerCase(actual) <= DataUtil.toLowerCase(expected);\n }\n return actual <= expected;\n },\n /**\n * Returns true when the actual input is greater than or equal to the given input.\n * @param {string|number|boolean} actual\n * @param {string|number|boolean} expected\n * @param {boolean} ignoreCase?\n */\n greaterthanorequal: function (actual, expected, ignoreCase) {\n if (ignoreCase) {\n return DataUtil.toLowerCase(actual) >= DataUtil.toLowerCase(expected);\n }\n return actual >= expected;\n },\n /**\n * Returns true when the actual input contains the given string.\n * @param {string|number} actual\n * @param {string|number} expected\n * @param {boolean} ignoreCase?\n */\n contains: function (actual, expected, ignoreCase, ignoreAccent) {\n if (ignoreAccent) {\n actual = DataUtil.ignoreDiacritics(actual);\n expected = DataUtil.ignoreDiacritics(expected);\n }\n if (ignoreCase) {\n return !isNullOrUndefined(actual) && !isNullOrUndefined(expected) &&\n DataUtil.toLowerCase(actual).indexOf(DataUtil.toLowerCase(expected)) !== -1;\n }\n return !isNullOrUndefined(actual) && !isNullOrUndefined(expected) &&\n actual.toString().indexOf(expected) !== -1;\n },\n /**\n * Returns true when the given input value is not null.\n * @param {string|number} actual\n * @returns boolean\n */\n notnull: function (actual) {\n return actual !== null;\n },\n /**\n * Returns true when the given input value is null.\n * @param {string|number} actual\n * @returns boolean\n */\n isnull: function (actual) {\n return actual === null;\n },\n /**\n * Returns true when the actual input starts with the given string\n * @param {string} actual\n * @param {string} expected\n * @param {boolean} ignoreCase?\n */\n startswith: function (actual, expected, ignoreCase, ignoreAccent) {\n if (ignoreAccent) {\n actual = DataUtil.ignoreDiacritics(actual);\n expected = DataUtil.ignoreDiacritics(expected);\n }\n if (ignoreCase) {\n return actual && expected && DataUtil.startsWith(DataUtil.toLowerCase(actual), DataUtil.toLowerCase(expected));\n }\n return actual && expected && DataUtil.startsWith(actual, expected);\n },\n /**\n * Returns true when the actual input ends with the given string.\n * @param {string} actual\n * @param {string} expected\n * @param {boolean} ignoreCase?\n */\n endswith: function (actual, expected, ignoreCase, ignoreAccent) {\n if (ignoreAccent) {\n actual = DataUtil.ignoreDiacritics(actual);\n expected = DataUtil.ignoreDiacritics(expected);\n }\n if (ignoreCase) {\n return actual && expected && DataUtil.endsWith(DataUtil.toLowerCase(actual), DataUtil.toLowerCase(expected));\n }\n return actual && expected && DataUtil.endsWith(actual, expected);\n },\n /**\n * It will return the filter operator based on the filter symbol.\n * @param {string} operator\n * @hidden\n */\n processSymbols: function (operator) {\n var fnName = DataUtil.operatorSymbols[operator];\n if (fnName) {\n var fn = DataUtil.fnOperators[fnName];\n return fn;\n }\n return DataUtil.throwError('Query - Process Operator : Invalid operator');\n },\n /**\n * It will return the valid filter operator based on the specified operators.\n * @param {string} operator\n * @hidden\n */\n processOperator: function (operator) {\n var fn = DataUtil.fnOperators[operator];\n if (fn) {\n return fn;\n }\n return DataUtil.fnOperators.processSymbols(operator);\n }\n };\n /**\n * To perform the parse operation on JSON data, like convert to string from JSON or convert to JSON from string.\n */\n DataUtil.parse = {\n /**\n * Parse the given string to the plain JavaScript object.\n * @param {string|Object|Object[]} jsonText\n */\n parseJson: function (jsonText) {\n if (typeof jsonText === 'string') {\n jsonText = JSON.parse(jsonText, DataUtil.parse.jsonReviver);\n }\n else if (jsonText instanceof Array) {\n DataUtil.parse.iterateAndReviveArray(jsonText);\n }\n else if (typeof jsonText === 'object') {\n DataUtil.parse.iterateAndReviveJson(jsonText);\n }\n return jsonText;\n },\n /**\n * It will perform on array of values.\n * @param {string[]|Object[]} array\n * @hidden\n */\n iterateAndReviveArray: function (array) {\n for (var i = 0; i < array.length; i++) {\n if (typeof array[i] === 'object') {\n DataUtil.parse.iterateAndReviveJson(array[i]);\n }\n else if (typeof array[i] === 'string' && !/^[\\s]*\\[|^[\\s]*\\{|\\\"/g.test(array[i])) {\n array[i] = DataUtil.parse.jsonReviver('', array[i]);\n }\n else {\n array[i] = DataUtil.parse.parseJson(array[i]);\n }\n }\n },\n /**\n * It will perform on JSON values\n * @param {JSON} json\n * @hidden\n */\n iterateAndReviveJson: function (json) {\n var value;\n var keys = Object.keys(json);\n for (var _i = 0, keys_2 = keys; _i < keys_2.length; _i++) {\n var prop = keys_2[_i];\n if (DataUtil.startsWith(prop, '__')) {\n continue;\n }\n value = json[prop];\n if (typeof value === 'object') {\n if (value instanceof Array) {\n DataUtil.parse.iterateAndReviveArray(value);\n }\n else if (value) {\n DataUtil.parse.iterateAndReviveJson(value);\n }\n }\n else {\n json[prop] = DataUtil.parse.jsonReviver(json[prop], value);\n }\n }\n },\n /**\n * It will perform on JSON values\n * @param {string} field\n * @param {string|Date} value\n * @hidden\n */\n jsonReviver: function (field, value) {\n var dupValue = value;\n if (typeof value === 'string') {\n var ms = /^\\/Date\\(([+-]?[0-9]+)([+-][0-9]{4})?\\)\\/$/.exec(value);\n if (ms) {\n return DataUtil.dateParse.toTimeZone(new Date(parseInt(ms[1], 10)), DataUtil.serverTimezoneOffset, true);\n }\n else if (/^(\\d{4}\\-\\d\\d\\-\\d\\d([tT][\\d:\\.]*){1})([zZ]|([+\\-])(\\d\\d):?(\\d\\d))?$/.test(value)) {\n var arr = dupValue.split(/[^0-9]/);\n value = DataUtil.dateParse\n .toTimeZone(new Date(parseInt(arr[0], 10), parseInt(arr[1], 10) - 1, parseInt(arr[2], 10), parseInt(arr[3], 10), parseInt(arr[4], 10), parseInt(arr[5], 10)), DataUtil.serverTimezoneOffset, true);\n }\n }\n return value;\n },\n /**\n * Check wheather the given value is JSON or not.\n * @param {Object[]} jsonData\n */\n isJson: function (jsonData) {\n if (typeof jsonData[0] === 'string') {\n return jsonData;\n }\n return DataUtil.parse.parseJson(jsonData);\n },\n /**\n * Checks wheather the given value is GUID or not.\n * @param {string} value\n */\n isGuid: function (value) {\n var regex = /[A-Fa-f0-9]{8}(?:-[A-Fa-f0-9]{4}){3}-[A-Fa-f0-9]{12}/i;\n var match = regex.exec(value);\n return match != null;\n },\n /**\n * The method used to replace the value based on the type.\n * @param {Object} value\n * @param {boolean} stringify\n * @hidden\n */\n replacer: function (value, stringify) {\n if (DataUtil.isPlainObject(value)) {\n return DataUtil.parse.jsonReplacer(value, stringify);\n }\n if (value instanceof Array) {\n return DataUtil.parse.arrayReplacer(value);\n }\n if (value instanceof Date) {\n return DataUtil.parse.jsonReplacer({ val: value }, stringify).val;\n }\n return value;\n },\n /**\n * It will replace the JSON value.\n * @param {string} key\n * @param {Object} val\n * @hidden\n */\n jsonReplacer: function (val, stringify) {\n var value;\n var keys = Object.keys(val);\n for (var _i = 0, keys_3 = keys; _i < keys_3.length; _i++) {\n var prop = keys_3[_i];\n value = val[prop];\n if (!(value instanceof Date)) {\n continue;\n }\n var d = value;\n val[prop] = DataUtil.dateParse.toTimeZone(DataUtil.dateParse.addSelfOffset(d), DataUtil.serverTimezoneOffset).toJSON();\n }\n return val;\n },\n /**\n * It will replace the Array of value.\n * @param {string} key\n * @param {Object[]} val\n * @hidden\n */\n arrayReplacer: function (val) {\n for (var i = 0; i < val.length; i++) {\n if (DataUtil.isPlainObject(val[i])) {\n val[i] = DataUtil.parse.jsonReplacer(val[i]);\n }\n else if (val[i] instanceof Date) {\n val[i] = DataUtil.parse.jsonReplacer({ date: val[i] }).date;\n }\n }\n return val;\n }\n };\n /**\n * @hidden\n */\n DataUtil.dateParse = {\n addSelfOffset: function (input) {\n return new Date(+input - (input.getTimezoneOffset() * 60000));\n },\n toUTC: function (input) {\n return new Date(+input + (input.getTimezoneOffset() * 60000));\n },\n toTimeZone: function (input, offset, utc) {\n if (offset === null) {\n return input;\n }\n var unix = utc ? DataUtil.dateParse.toUTC(input) : input;\n return new Date(+unix - (offset * 3600000));\n }\n };\n return DataUtil;\n}());\nexport { DataUtil };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { merge, extend, isNullOrUndefined, setValue, getValue } from '@syncfusion/ej2-base';\nimport { DataUtil } from './util';\nimport { Query, Predicate } from './query';\n/**\n * Adaptors are specific data source type aware interfaces that are used by DataManager to communicate with DataSource.\n * This is the base adaptor class that other adaptors can extend.\n * @hidden\n */\nvar Adaptor = /** @class */ (function () {\n /**\n * Constructor for Adaptor class\n * @param {DataOptions} ds?\n * @hidden\n * @returns aggregates\n */\n function Adaptor(ds) {\n // common options for all the adaptors \n this.options = {\n from: 'table',\n requestType: 'json',\n sortBy: 'sorted',\n select: 'select',\n skip: 'skip',\n group: 'group',\n take: 'take',\n search: 'search',\n count: 'requiresCounts',\n where: 'where',\n aggregates: 'aggregates'\n };\n /**\n * Specifies the type of adaptor.\n * @default Adaptor\n */\n this.type = Adaptor;\n this.dataSource = ds;\n this.pvt = {};\n }\n /**\n * Returns the data from the query processing.\n * @param {Object} data\n * @param {DataOptions} ds?\n * @param {Query} query?\n * @param {XMLHttpRequest} xhr?\n * @returns Object\n */\n Adaptor.prototype.processResponse = function (data, ds, query, xhr) {\n return data;\n };\n return Adaptor;\n}());\nexport { Adaptor };\n/**\n * JsonAdaptor is used to process JSON data. It contains methods to process the given JSON data based on the queries.\n * @hidden\n */\nvar JsonAdaptor = /** @class */ (function (_super) {\n __extends(JsonAdaptor, _super);\n function JsonAdaptor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Process the JSON data based on the provided queries.\n * @param {DataManager} dataManager\n * @param {Query} query\n * @returns Object\n */\n JsonAdaptor.prototype.processQuery = function (dataManager, query) {\n var result = dataManager.dataSource.json.slice(0);\n var count = result.length;\n var countFlg = true;\n var ret;\n var key;\n var agg = {};\n for (var i = 0; i < query.queries.length; i++) {\n key = query.queries[i];\n ret = this[key.fn].call(this, result, key.e, query);\n if (key.fn === 'onAggregates') {\n agg[key.e.field + ' - ' + key.e.type] = ret;\n }\n else {\n result = ret !== undefined ? ret : result;\n }\n if (key.fn === 'onPage' || key.fn === 'onSkip' || key.fn === 'onTake' || key.fn === 'onRange') {\n countFlg = false;\n }\n if (countFlg) {\n count = result.length;\n }\n }\n if (query.isCountRequired) {\n result = {\n result: result,\n count: count,\n aggregates: agg\n };\n }\n return result;\n };\n /**\n * Performs batch update in the JSON array which add, remove and update records.\n * @param {DataManager} dm\n * @param {CrudOptions} changes\n * @param {RemoteArgs} e\n */\n JsonAdaptor.prototype.batchRequest = function (dm, changes, e) {\n var i;\n for (i = 0; i < changes.addedRecords.length; i++) {\n this.insert(dm, changes.addedRecords[i]);\n }\n for (i = 0; i < changes.changedRecords.length; i++) {\n this.update(dm, e.key, changes.changedRecords[i]);\n }\n for (i = 0; i < changes.deletedRecords.length; i++) {\n this.remove(dm, e.key, changes.deletedRecords[i]);\n }\n return changes;\n };\n /**\n * Performs filter operation with the given data and where query.\n * @param {Object[]} ds\n * @param {{validate:Function}} e\n */\n JsonAdaptor.prototype.onWhere = function (ds, e) {\n if (!ds || !ds.length) {\n return ds;\n }\n return ds.filter(function (obj) {\n if (e) {\n return e.validate(obj);\n }\n });\n };\n /**\n * Returns aggregate function based on the aggregate type.\n * @param {Object[]} ds\n * @param {{field:string} e\n * @param {string}} type\n */\n JsonAdaptor.prototype.onAggregates = function (ds, e) {\n var fn = DataUtil.aggregates[e.type];\n if (!ds || !fn || ds.length === 0) {\n return null;\n }\n return fn(ds, e.field);\n };\n /**\n * Performs search operation based on the given query.\n * @param {Object[]} ds\n * @param {QueryOptions} e\n */\n JsonAdaptor.prototype.onSearch = function (ds, e) {\n if (!ds || !ds.length) {\n return ds;\n }\n if (e.fieldNames.length === 0) {\n DataUtil.getFieldList(ds[0], e.fieldNames);\n }\n return ds.filter(function (obj) {\n for (var j = 0; j < e.fieldNames.length; j++) {\n if (e.comparer.call(obj, DataUtil.getObject(e.fieldNames[j], obj), e.searchKey, e.ignoreCase, e.ignoreAccent)) {\n return true;\n }\n }\n return false;\n });\n };\n /**\n * Sort the data with given direction and field.\n * @param {Object[]} ds\n * @param {{comparer:(a:Object} e\n * @param {Object} b\n */\n JsonAdaptor.prototype.onSortBy = function (ds, e, query) {\n if (!ds || !ds.length) {\n return ds;\n }\n var fnCompare;\n var field = DataUtil.getValue(e.fieldName, query);\n if (!field) {\n return ds.sort(e.comparer);\n }\n if (field instanceof Array) {\n field = field.slice(0);\n for (var i = field.length - 1; i >= 0; i--) {\n if (!field[i]) {\n continue;\n }\n fnCompare = e.comparer;\n if (DataUtil.endsWith(field[i], ' desc')) {\n fnCompare = DataUtil.fnSort('descending');\n field[i] = field[i].replace(' desc', '');\n }\n ds = DataUtil.sort(ds, field[i], fnCompare);\n }\n return ds;\n }\n return DataUtil.sort(ds, field, e.comparer);\n };\n /**\n * Group the data based on the given query.\n * @param {Object[]} ds\n * @param {QueryOptions} e\n * @param {Query} query\n */\n JsonAdaptor.prototype.onGroup = function (ds, e, query) {\n if (!ds || !ds.length) {\n return ds;\n }\n var aggQuery = Query.filterQueries(query.queries, 'onAggregates');\n var agg = [];\n if (aggQuery.length) {\n var tmp = void 0;\n for (var i = 0; i < aggQuery.length; i++) {\n tmp = aggQuery[i].e;\n agg.push({ type: tmp.type, field: DataUtil.getValue(tmp.field, query) });\n }\n }\n return DataUtil.group(ds, DataUtil.getValue(e.fieldName, query), agg, null, null, e.comparer);\n };\n /**\n * Retrieves records based on the given page index and size.\n * @param {Object[]} ds\n * @param {{pageSize:number} e\n * @param {number}} pageIndex\n * @param {Query} query\n */\n JsonAdaptor.prototype.onPage = function (ds, e, query) {\n var size = DataUtil.getValue(e.pageSize, query);\n var start = (DataUtil.getValue(e.pageIndex, query) - 1) * size;\n var end = start + size;\n if (!ds || !ds.length) {\n return ds;\n }\n return ds.slice(start, end);\n };\n /**\n * Retrieves records based on the given start and end index from query.\n * @param {Object[]} ds\n * @param {{start:number} e\n * @param {number}} end\n */\n JsonAdaptor.prototype.onRange = function (ds, e) {\n if (!ds || !ds.length) {\n return ds;\n }\n return ds.slice(DataUtil.getValue(e.start), DataUtil.getValue(e.end));\n };\n /**\n * Picks the given count of records from the top of the datasource.\n * @param {Object[]} ds\n * @param {{nos:number}} e\n */\n JsonAdaptor.prototype.onTake = function (ds, e) {\n if (!ds || !ds.length) {\n return ds;\n }\n return ds.slice(0, DataUtil.getValue(e.nos));\n };\n /**\n * Skips the given count of records from the data source.\n * @param {Object[]} ds\n * @param {{nos:number}} e\n */\n JsonAdaptor.prototype.onSkip = function (ds, e) {\n if (!ds || !ds.length) {\n return ds;\n }\n return ds.slice(DataUtil.getValue(e.nos));\n };\n /**\n * Selects specified columns from the data source.\n * @param {Object[]} ds\n * @param {{fieldNames:string}} e\n */\n JsonAdaptor.prototype.onSelect = function (ds, e) {\n if (!ds || !ds.length) {\n return ds;\n }\n return DataUtil.select(ds, DataUtil.getValue(e.fieldNames));\n };\n /**\n * Inserts new record in the table.\n * @param {DataManager} dm\n * @param {Object} data\n * @param {number} position\n */\n JsonAdaptor.prototype.insert = function (dm, data, tableName, query, position) {\n if (isNullOrUndefined(position)) {\n return dm.dataSource.json.push(data);\n }\n else {\n return dm.dataSource.json.splice(position, 0, data);\n }\n };\n /**\n * Remove the data from the dataSource based on the key field value.\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {Object} value\n * @param {string} tableName?\n * @returns null\n */\n JsonAdaptor.prototype.remove = function (dm, keyField, value, tableName) {\n var ds = dm.dataSource.json;\n var i;\n if (typeof value === 'object') {\n value = value[keyField];\n }\n for (i = 0; i < ds.length; i++) {\n if (ds[i][keyField] === value) {\n break;\n }\n }\n return i !== ds.length ? ds.splice(i, 1) : null;\n };\n /**\n * Updates existing record and saves the changes to the table.\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {Object} value\n * @param {string} tableName?\n * @returns null\n */\n JsonAdaptor.prototype.update = function (dm, keyField, value, tableName) {\n var ds = dm.dataSource.json;\n var i;\n var key = value[keyField];\n for (i = 0; i < ds.length; i++) {\n if (ds[i][keyField] === key) {\n break;\n }\n }\n return i < ds.length ? merge(ds[i], value) : null;\n };\n return JsonAdaptor;\n}(Adaptor));\nexport { JsonAdaptor };\n/**\n * URL Adaptor of DataManager can be used when you are required to use remote service to retrieve data.\n * It interacts with server-side for all DataManager Queries and CRUD operations.\n * @hidden\n */\nvar UrlAdaptor = /** @class */ (function (_super) {\n __extends(UrlAdaptor, _super);\n function UrlAdaptor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Process the query to generate request body.\n * @param {DataManager} dm\n * @param {Query} query\n * @param {Object[]} hierarchyFilters?\n * @returns p\n */\n UrlAdaptor.prototype.processQuery = function (dm, query, hierarchyFilters) {\n var queries = this.getQueryRequest(query);\n var singles = Query.filterQueryLists(query.queries, ['onSelect', 'onPage', 'onSkip', 'onTake', 'onRange']);\n var params = query.params;\n var url = dm.dataSource.url;\n var temp;\n var skip;\n var take = null;\n var options = this.options;\n var request = { sorts: [], groups: [], filters: [], searches: [], aggregates: [] };\n // calc Paging & Range\n if ('onPage' in singles) {\n temp = singles.onPage;\n skip = DataUtil.getValue(temp.pageIndex, query);\n take = DataUtil.getValue(temp.pageSize, query);\n skip = (skip - 1) * take;\n }\n else if ('onRange' in singles) {\n temp = singles.onRange;\n skip = temp.start;\n take = temp.end - temp.start;\n }\n // Sorting\n for (var i = 0; i < queries.sorts.length; i++) {\n temp = DataUtil.getValue(queries.sorts[i].e.fieldName, query);\n request.sorts.push(DataUtil.callAdaptorFunction(this, 'onEachSort', { name: temp, direction: queries.sorts[i].e.direction }, query));\n }\n // hierarchy\n if (hierarchyFilters) {\n temp = this.getFiltersFrom(hierarchyFilters, query);\n if (temp) {\n request.filters.push(DataUtil.callAdaptorFunction(this, 'onEachWhere', temp.toJson(), query));\n }\n }\n // Filters\n for (var i = 0; i < queries.filters.length; i++) {\n request.filters.push(DataUtil.callAdaptorFunction(this, 'onEachWhere', queries.filters[i].e.toJson(), query));\n var keys_1 = typeof request.filters[i] === 'object' ? Object.keys(request.filters[i]) : [];\n for (var _i = 0, keys_2 = keys_1; _i < keys_2.length; _i++) {\n var prop = keys_2[_i];\n if (DataUtil.isNull((request)[prop])) {\n delete request[prop];\n }\n }\n }\n // Searches\n for (var i = 0; i < queries.searches.length; i++) {\n temp = queries.searches[i].e;\n request.searches.push(DataUtil.callAdaptorFunction(this, 'onEachSearch', {\n fields: temp.fieldNames,\n operator: temp.operator,\n key: temp.searchKey,\n ignoreCase: temp.ignoreCase\n }, query));\n }\n // Grouping\n for (var i = 0; i < queries.groups.length; i++) {\n request.groups.push(DataUtil.getValue(queries.groups[i].e.fieldName, query));\n }\n // aggregates\n for (var i = 0; i < queries.aggregates.length; i++) {\n temp = queries.aggregates[i].e;\n request.aggregates.push({ type: temp.type, field: DataUtil.getValue(temp.field, query) });\n }\n var req = {};\n this.getRequestQuery(options, query, singles, request, req);\n // Params\n DataUtil.callAdaptorFunction(this, 'addParams', { dm: dm, query: query, params: params, reqParams: req });\n // cleanup\n var keys = Object.keys(req);\n for (var _a = 0, keys_3 = keys; _a < keys_3.length; _a++) {\n var prop = keys_3[_a];\n if (DataUtil.isNull(req[prop]) || req[prop] === '' || req[prop].length === 0) {\n delete req[prop];\n }\n }\n if (!(options.skip in req && options.take in req) && take !== null) {\n req[options.skip] = DataUtil.callAdaptorFunction(this, 'onSkip', skip, query);\n req[options.take] = DataUtil.callAdaptorFunction(this, 'onTake', take, query);\n }\n var p = this.pvt;\n this.pvt = {};\n if (this.options.requestType === 'json') {\n return {\n data: JSON.stringify(req),\n url: url,\n pvtData: p,\n type: 'POST',\n contentType: 'application/json; charset=utf-8'\n };\n }\n temp = this.convertToQueryString(req, query, dm);\n temp = (dm.dataSource.url.indexOf('?') !== -1 ? '&' : '/') + temp;\n return {\n type: 'GET', url: temp.length ? url.replace(/\\/*$/, temp) : url, pvtData: p\n };\n };\n UrlAdaptor.prototype.getRequestQuery = function (options, query, singles, request, request1) {\n var param = 'param';\n var req = request1;\n req[options.from] = query.fromTable;\n if (options.expand) {\n req[options.expand] = query.expands;\n }\n req[options.select] = 'onSelect' in singles ?\n DataUtil.callAdaptorFunction(this, 'onSelect', DataUtil.getValue(singles.onSelect.fieldNames, query), query) : '';\n req[options.count] = query.isCountRequired ? DataUtil.callAdaptorFunction(this, 'onCount', query.isCountRequired, query) : '';\n req[options.search] = request.searches.length ? DataUtil.callAdaptorFunction(this, 'onSearch', request.searches, query) : '';\n req[options.skip] = 'onSkip' in singles ?\n DataUtil.callAdaptorFunction(this, 'onSkip', DataUtil.getValue(singles.onSkip.nos, query), query) : '';\n req[options.take] = 'onTake' in singles ?\n DataUtil.callAdaptorFunction(this, 'onTake', DataUtil.getValue(singles.onTake.nos, query), query) : '';\n req[options.where] = request.filters.length || request.searches.length ?\n DataUtil.callAdaptorFunction(this, 'onWhere', request.filters, query) : '';\n req[options.sortBy] = request.sorts.length ? DataUtil.callAdaptorFunction(this, 'onSortBy', request.sorts, query) : '';\n req[options.group] = request.groups.length ? DataUtil.callAdaptorFunction(this, 'onGroup', request.groups, query) : '';\n req[options.aggregates] = request.aggregates.length ?\n DataUtil.callAdaptorFunction(this, 'onAggregates', request.aggregates, query) : '';\n req[param] = [];\n };\n /**\n * Convert the object from processQuery to string which can be added query string.\n * @param {Object} req\n * @param {Query} query\n * @param {DataManager} dm\n */\n UrlAdaptor.prototype.convertToQueryString = function (request, query, dm) {\n return '';\n // this needs to be overridden\n };\n /**\n * Return the data from the data manager processing.\n * @param {DataResult} data\n * @param {DataOptions} ds?\n * @param {Query} query?\n * @param {XMLHttpRequest} xhr?\n * @param {Object} request?\n * @param {CrudOptions} changes?\n */\n UrlAdaptor.prototype.processResponse = function (data, ds, query, xhr, request, changes) {\n var requests = request;\n var pvt = requests.pvtData || {};\n var groupDs = data.groupDs;\n if (xhr && xhr.getResponseHeader('Content-Type') &&\n xhr.getResponseHeader('Content-Type').indexOf('xml') !== -1) {\n return (query.isCountRequired ? { result: [], count: 0 } : []);\n }\n var d = JSON.parse(requests.data);\n if (d && d.action === 'batch' && data.addedRecords) {\n changes.addedRecords = data.addedRecords;\n return changes;\n }\n if (data.d) {\n data = data.d;\n }\n var args = {};\n if ('count' in data) {\n args.count = data.count;\n }\n args.result = data.result ? data.result : data;\n this.getAggregateResult(pvt, data, args, groupDs);\n return DataUtil.isNull(args.count) ? args.result : { result: args.result, count: args.count, aggregates: args.aggregates };\n };\n /**\n * Add the group query to the adaptor`s option.\n * @param {Object[]} e\n * @returns void\n */\n UrlAdaptor.prototype.onGroup = function (e) {\n this.pvt.groups = e;\n return e;\n };\n /**\n * Add the aggregate query to the adaptor`s option.\n * @param {Aggregates[]} e\n * @returns void\n */\n UrlAdaptor.prototype.onAggregates = function (e) {\n this.pvt.aggregates = e;\n };\n /**\n * Prepare the request body based on the newly added, removed and updated records.\n * The result is used by the batch request.\n * @param {DataManager} dm\n * @param {CrudOptions} changes\n * @param {Object} e\n */\n UrlAdaptor.prototype.batchRequest = function (dm, changes, e) {\n var url;\n var key;\n return {\n type: 'POST',\n url: dm.dataSource.batchUrl || dm.dataSource.crudUrl || dm.dataSource.removeUrl || dm.dataSource.url,\n contentType: 'application/json; charset=utf-8',\n dataType: 'json',\n data: JSON.stringify({\n changed: changes.changedRecords,\n added: changes.addedRecords,\n deleted: changes.deletedRecords,\n action: 'batch',\n table: e[url],\n key: e[key]\n })\n };\n };\n /**\n * Method will trigger before send the request to server side.\n * Used to set the custom header or modify the request options.\n * @param {DataManager} dm\n * @param {XMLHttpRequest} request\n * @returns void\n */\n UrlAdaptor.prototype.beforeSend = function (dm, request) {\n // need to extend this method\n };\n /**\n * Prepare and returns request body which is used to insert a new record in the table.\n * @param {DataManager} dm\n * @param {Object} data\n * @param {string} tableName\n */\n UrlAdaptor.prototype.insert = function (dm, data, tableName) {\n return {\n url: dm.dataSource.insertUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n data: JSON.stringify({\n value: data,\n table: tableName,\n action: 'insert'\n })\n };\n };\n /**\n * Prepare and return request body which is used to remove record from the table.\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {number|string} value\n * @param {string} tableName\n */\n UrlAdaptor.prototype.remove = function (dm, keyField, value, tableName) {\n return {\n type: 'POST',\n url: dm.dataSource.removeUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n data: JSON.stringify({\n key: value,\n keyColumn: keyField,\n table: tableName,\n action: 'remove'\n })\n };\n };\n /**\n * Prepare and return request body which is used to update record.\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {Object} value\n * @param {string} tableName\n */\n UrlAdaptor.prototype.update = function (dm, keyField, value, tableName) {\n return {\n type: 'POST',\n url: dm.dataSource.updateUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n data: JSON.stringify({\n value: value,\n action: 'update',\n keyColumn: keyField,\n key: value[keyField],\n table: tableName\n })\n };\n };\n /**\n * To generate the predicate based on the filtered query.\n * @param {Object[]|string[]|number[]} data\n * @param {Query} query\n * @hidden\n */\n UrlAdaptor.prototype.getFiltersFrom = function (data, query) {\n var key = query.fKey;\n var value;\n var prop = key;\n var pKey = query.key;\n var predicats = [];\n if (typeof data[0] !== 'object') {\n prop = null;\n }\n for (var i = 0; i < data.length; i++) {\n if (typeof data[0] === 'object') {\n value = DataUtil.getObject(pKey || prop, data[i]);\n }\n else {\n value = data[i];\n }\n predicats.push(new Predicate(key, 'equal', value));\n }\n return Predicate.or(predicats);\n };\n UrlAdaptor.prototype.getAggregateResult = function (pvt, data, args, groupDs) {\n var pData = data;\n if (data && data.result) {\n pData = data.result;\n }\n if (pvt && pvt.aggregates && pvt.aggregates.length) {\n var agg = pvt.aggregates;\n var fn = void 0;\n var aggregateData = pData;\n var res = {};\n if (data.aggregate) {\n aggregateData = data.aggregate;\n }\n for (var i = 0; i < agg.length; i++) {\n fn = DataUtil.aggregates[agg[i].type];\n if (fn) {\n res[agg[i].field + ' - ' + agg[i].type] = fn(aggregateData, agg[i].field);\n }\n }\n args.aggregates = res;\n }\n if (pvt && pvt.groups && pvt.groups.length) {\n var groups = pvt.groups;\n for (var i = 0; i < groups.length; i++) {\n var level = null;\n if (!isNullOrUndefined(groupDs)) {\n groupDs = DataUtil.group(groupDs, groups[i]);\n }\n pData = DataUtil.group(pData, groups[i], pvt.aggregates, level, groupDs);\n }\n args.result = pData;\n }\n return args;\n };\n UrlAdaptor.prototype.getQueryRequest = function (query) {\n var req = { sorts: [], groups: [], filters: [], searches: [], aggregates: [] };\n req.sorts = Query.filterQueries(query.queries, 'onSortBy');\n req.groups = Query.filterQueries(query.queries, 'onGroup');\n req.filters = Query.filterQueries(query.queries, 'onWhere');\n req.searches = Query.filterQueries(query.queries, 'onSearch');\n req.aggregates = Query.filterQueries(query.queries, 'onAggregates');\n return req;\n };\n UrlAdaptor.prototype.addParams = function (options) {\n var req = options.reqParams;\n if (options.params.length) {\n req.params = {};\n }\n for (var _i = 0, _a = options.params; _i < _a.length; _i++) {\n var tmp = _a[_i];\n if (req[tmp.key]) {\n throw new Error('Query() - addParams: Custom Param is conflicting other request arguments');\n }\n req[tmp.key] = tmp.value;\n if (tmp.fn) {\n req[tmp.key] = tmp.fn.call(options.query, tmp.key, options.query, options.dm);\n }\n req.params[tmp.key] = req[tmp.key];\n }\n };\n return UrlAdaptor;\n}(Adaptor));\nexport { UrlAdaptor };\n/**\n * OData Adaptor that is extended from URL Adaptor, is used for consuming data through OData Service.\n * @hidden\n */\nvar ODataAdaptor = /** @class */ (function (_super) {\n __extends(ODataAdaptor, _super);\n function ODataAdaptor() {\n var _this = _super.call(this) || this;\n // options replaced the default adaptor options\n _this.options = extend({}, _this.options, {\n requestType: 'get',\n accept: 'application/json;odata=light;q=1,application/json;odata=verbose;q=0.5',\n multipartAccept: 'multipart/mixed',\n sortBy: '$orderby',\n select: '$select',\n skip: '$skip',\n take: '$top',\n count: '$inlinecount',\n where: '$filter',\n expand: '$expand',\n batch: '$batch',\n changeSet: '--changeset_',\n batchPre: 'batch_',\n contentId: 'Content-Id: ',\n batchContent: 'Content-Type: multipart/mixed; boundary=',\n changeSetContent: 'Content-Type: application/http\\nContent-Transfer-Encoding: binary ',\n batchChangeSetContentType: 'Content-Type: application/json; charset=utf-8 '\n });\n _this.getModuleName = getValue('getModulename', _this);\n return _this;\n }\n /**\n * Generate request string based on the filter criteria from query.\n * @param {Predicate} pred\n * @param {boolean} requiresCast?\n */\n ODataAdaptor.prototype.onPredicate = function (predicate, query, requiresCast) {\n var returnValue = '';\n var operator;\n var guid;\n var val = predicate.value;\n var type = typeof val;\n var field = predicate.field ? ODataAdaptor.getField(predicate.field) : null;\n if (val instanceof Date) {\n val = 'datetime\\'' + DataUtil.parse.replacer(val) + '\\'';\n }\n if (type === 'string') {\n val = '\\'' + val + '\\'';\n if (requiresCast) {\n field = 'cast(' + field + ', \\'Edm.String\\')';\n }\n if (DataUtil.parse.isGuid(val)) {\n guid = 'guid';\n }\n if (predicate.ignoreCase) {\n if (!guid) {\n field = 'tolower(' + field + ')';\n }\n val = val.toLowerCase();\n }\n }\n operator = DataUtil.odBiOperator[predicate.operator];\n if (operator) {\n returnValue += field;\n returnValue += operator;\n if (guid) {\n returnValue += guid;\n }\n return returnValue + val;\n }\n if (!isNullOrUndefined(this.getModuleName)) {\n if (this.getModuleName() === 'ODataV4Adaptor') {\n operator = DataUtil.odv4UniOperator[predicate.operator];\n }\n }\n else {\n operator = DataUtil.odUniOperator[predicate.operator];\n }\n if (operator === 'substringof') {\n var temp = val;\n val = field;\n field = temp;\n }\n returnValue += operator + '(';\n returnValue += field + ',';\n if (guid) {\n returnValue += guid;\n }\n returnValue += val + ')';\n return returnValue;\n };\n /**\n * Generate request string based on the multiple filter criteria from query.\n * @param {Predicate} pred\n * @param {boolean} requiresCast?\n */\n ODataAdaptor.prototype.onComplexPredicate = function (predicate, query, requiresCast) {\n var res = [];\n for (var i = 0; i < predicate.predicates.length; i++) {\n res.push('(' + this.onEachWhere(predicate.predicates[i], query, requiresCast) + ')');\n }\n return res.join(' ' + predicate.condition + ' ');\n };\n /**\n * Generate query string based on the multiple filter criteria from query.\n * @param {Predicate} filter\n * @param {boolean} requiresCast?\n */\n ODataAdaptor.prototype.onEachWhere = function (filter, query, requiresCast) {\n return filter.isComplex ? this.onComplexPredicate(filter, query, requiresCast) : this.onPredicate(filter, query, requiresCast);\n };\n /**\n * Generate query string based on the multiple filter criteria from query.\n * @param {string[]} filters\n */\n ODataAdaptor.prototype.onWhere = function (filters) {\n if (this.pvt.search) {\n filters.push(this.onEachWhere(this.pvt.search, null, true));\n }\n return filters.join(' and ');\n };\n /**\n * Generate query string based on the multiple search criteria from query.\n * @param {{fields:string[]} e\n * @param {string} operator\n * @param {string} key\n * @param {boolean}} ignoreCase\n */\n ODataAdaptor.prototype.onEachSearch = function (e) {\n if (e.fields && e.fields.length === 0) {\n DataUtil.throwError('Query() - Search : oData search requires list of field names to search');\n }\n var filter = this.pvt.search || [];\n for (var i = 0; i < e.fields.length; i++) {\n filter.push(new Predicate(e.fields[i], e.operator, e.key, e.ignoreCase));\n }\n this.pvt.search = filter;\n };\n /**\n * Generate query string based on the search criteria from query.\n * @param {Object} e\n */\n ODataAdaptor.prototype.onSearch = function (e) {\n this.pvt.search = Predicate.or(this.pvt.search);\n return '';\n };\n /**\n * Generate query string based on multiple sort criteria from query.\n * @param {QueryOptions} e\n */\n ODataAdaptor.prototype.onEachSort = function (e) {\n var res = [];\n if (e.name instanceof Array) {\n for (var i = 0; i < e.name.length; i++) {\n res.push(ODataAdaptor.getField(e.name[i]) + (e.direction === 'descending' ? ' desc' : ''));\n }\n }\n else {\n res.push(ODataAdaptor.getField(e.name) + (e.direction === 'descending' ? ' desc' : ''));\n }\n return res.join(',');\n };\n /**\n * Returns sort query string.\n * @param {string[]} e\n */\n ODataAdaptor.prototype.onSortBy = function (e) {\n return e.reverse().join(',');\n };\n /**\n * Adds the group query to the adaptor option.\n * @param {Object[]} e\n * @returns string\n */\n ODataAdaptor.prototype.onGroup = function (e) {\n this.pvt.groups = e;\n return [];\n };\n /**\n * Returns the select query string.\n * @param {string[]} e\n */\n ODataAdaptor.prototype.onSelect = function (e) {\n for (var i = 0; i < e.length; i++) {\n e[i] = ODataAdaptor.getField(e[i]);\n }\n return e.join(',');\n };\n /**\n * Add the aggregate query to the adaptor option.\n * @param {Object[]} e\n * @returns string\n */\n ODataAdaptor.prototype.onAggregates = function (e) {\n this.pvt.aggregates = e;\n return '';\n };\n /**\n * Returns the query string which requests total count from the data source.\n * @param {boolean} e\n * @returns string\n */\n ODataAdaptor.prototype.onCount = function (e) {\n return e === true ? 'allpages' : '';\n };\n /**\n * Method will trigger before send the request to server side.\n * Used to set the custom header or modify the request options.\n * @param {DataManager} dm\n * @param {XMLHttpRequest} request\n * @param {Ajax} settings?\n */\n ODataAdaptor.prototype.beforeSend = function (dm, request, settings) {\n if (DataUtil.endsWith(settings.url, this.options.batch) && settings.type.toLowerCase() === 'post') {\n request.setRequestHeader('Accept', this.options.multipartAccept);\n request.setRequestHeader('DataServiceVersion', '2.0');\n request.overrideMimeType('text/plain; charset=x-user-defined');\n }\n else {\n request.setRequestHeader('Accept', this.options.accept);\n }\n request.setRequestHeader('DataServiceVersion', '2.0');\n request.setRequestHeader('MaxDataServiceVersion', '2.0');\n };\n /**\n * Returns the data from the query processing.\n * @param {DataResult} data\n * @param {DataOptions} ds?\n * @param {Query} query?\n * @param {XMLHttpRequest} xhr?\n * @param {Ajax} request?\n * @param {CrudOptions} changes?\n * @returns aggregateResult\n */\n ODataAdaptor.prototype.processResponse = function (data, ds, query, xhr, request, changes) {\n var pvtData = 'pvtData';\n if (!isNullOrUndefined(data.d)) {\n var dataCopy = ((query && query.isCountRequired) ? data.d.results : data.d);\n var metaData = '__metadata';\n if (!isNullOrUndefined(dataCopy)) {\n for (var i = 0; i < dataCopy.length; i++) {\n if (!isNullOrUndefined(dataCopy[i][metaData])) {\n delete dataCopy[i][metaData];\n }\n }\n }\n }\n var pvt = request && request[pvtData];\n var emptyAndBatch = this.processBatchResponse(data, query, xhr, request, changes);\n if (emptyAndBatch) {\n return emptyAndBatch;\n }\n var versionCheck = xhr && request.getResponseHeader('DataServiceVersion');\n var count = null;\n var version = (versionCheck && parseInt(versionCheck, 10)) || 2;\n if (query && query.isCountRequired) {\n var oDataCount = '__count';\n if (data[oDataCount] || data['odata.count']) {\n count = data[oDataCount] || data['odata.count'];\n }\n if (data.d) {\n data = data.d;\n }\n if (data[oDataCount] || data['odata.count']) {\n count = data[oDataCount] || data['odata.count'];\n }\n }\n if (version === 3 && data.value) {\n data = data.value;\n }\n if (data.d) {\n data = data.d;\n }\n if (version < 3 && data.results) {\n data = data.results;\n }\n var args = {};\n args.count = count;\n args.result = data;\n this.getAggregateResult(pvt, data, args);\n return DataUtil.isNull(count) ? args.result : { result: args.result, count: args.count, aggregates: args.aggregates };\n };\n /**\n * Converts the request object to query string.\n * @param {Object} req\n * @param {Query} query\n * @param {DataManager} dm\n * @returns tableName\n */\n ODataAdaptor.prototype.convertToQueryString = function (request, query, dm) {\n var res = [];\n var table = 'table';\n var tableName = request[table] || '';\n var format = '$format';\n delete request[table];\n if (dm.dataSource.requiresFormat) {\n request[format] = 'json';\n }\n var keys = Object.keys(request);\n for (var _i = 0, keys_4 = keys; _i < keys_4.length; _i++) {\n var prop = keys_4[_i];\n res.push(prop + '=' + request[prop]);\n }\n res = res.join('&');\n if (dm.dataSource.url && dm.dataSource.url.indexOf('?') !== -1 && !tableName) {\n return res;\n }\n return res.length ? tableName + '?' + res : tableName || '';\n };\n /**\n * Prepare and returns request body which is used to insert a new record in the table.\n * @param {DataManager} dm\n * @param {Object} data\n * @param {string} tableName?\n */\n ODataAdaptor.prototype.insert = function (dm, data, tableName) {\n return {\n url: dm.dataSource.url.replace(/\\/*$/, tableName ? '/' + tableName : ''),\n data: JSON.stringify(data)\n };\n };\n /**\n * Prepare and return request body which is used to remove record from the table.\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {number} value\n * @param {string} tableName?\n */\n ODataAdaptor.prototype.remove = function (dm, keyField, value, tableName) {\n return {\n type: 'DELETE',\n url: dm.dataSource.url.replace(/\\/*$/, tableName ? '/' + tableName : '') + '(' + value + ')'\n };\n };\n /**\n * Updates existing record and saves the changes to the table.\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {Object} value\n * @param {string} tableName?\n * @returns this\n */\n ODataAdaptor.prototype.update = function (dm, keyField, value, tableName) {\n return {\n type: 'PUT',\n url: dm.dataSource.url.replace(/\\/*$/, tableName ? '/' + tableName : '') + '(' + value[keyField] + ')',\n data: JSON.stringify(value),\n accept: this.options.accept\n };\n };\n /**\n * Prepare the request body based on the newly added, removed and updated records.\n * The result is used by the batch request.\n * @param {DataManager} dm\n * @param {CrudOptions} changes\n * @param {RemoteArgs} e\n * @returns {Object}\n */\n ODataAdaptor.prototype.batchRequest = function (dm, changes, e) {\n var initialGuid = e.guid = DataUtil.getGuid(this.options.batchPre);\n var url = dm.dataSource.url.replace(/\\/*$/, '/' + this.options.batch);\n var args = {\n url: e.url,\n key: e.key,\n cid: 1,\n cSet: DataUtil.getGuid(this.options.changeSet)\n };\n var req = '--' + initialGuid + '\\n';\n req += 'Content-Type: multipart/mixed; boundary=' + args.cSet.replace('--', '') + '\\n';\n this.pvt.changeSet = 0;\n req += this.generateInsertRequest(changes.addedRecords, args);\n req += this.generateUpdateRequest(changes.changedRecords, args);\n req += this.generateDeleteRequest(changes.deletedRecords, args);\n req += args.cSet + '--\\n';\n req += '--' + initialGuid + '--';\n return {\n type: 'POST',\n url: url,\n dataType: 'json',\n contentType: 'multipart/mixed; charset=UTF-8;boundary=' + initialGuid,\n data: req\n };\n };\n /**\n * Generate the string content from the removed records.\n * The result will be send during batch update.\n * @param {Object[]} arr\n * @param {RemoteArgs} e\n * @returns this\n */\n ODataAdaptor.prototype.generateDeleteRequest = function (arr, e) {\n if (!arr) {\n return '';\n }\n var req = '';\n var stat = {\n 'method': 'DELETE ',\n 'url': function (data, i, key) { return '(' + data[i][key] + ')'; },\n 'data': function (data, i) { return ''; }\n };\n req = this.generateBodyContent(arr, e, stat);\n return req + '\\n';\n };\n /**\n * Generate the string content from the inserted records.\n * The result will be send during batch update.\n * @param {Object[]} arr\n * @param {RemoteArgs} e\n */\n ODataAdaptor.prototype.generateInsertRequest = function (arr, e) {\n if (!arr) {\n return '';\n }\n var req = '';\n var stat = {\n 'method': 'POST ',\n 'url': function (data, i, key) { return ''; },\n 'data': function (data, i) { return JSON.stringify(data[i]) + '\\n\\n'; }\n };\n req = this.generateBodyContent(arr, e, stat);\n return req;\n };\n /**\n * Generate the string content from the updated records.\n * The result will be send during batch update.\n * @param {Object[]} arr\n * @param {RemoteArgs} e\n */\n ODataAdaptor.prototype.generateUpdateRequest = function (arr, e) {\n if (!arr) {\n return '';\n }\n var req = '';\n var stat = {\n 'method': 'PUT ',\n 'url': function (data, i, key) { return '(' + data[i][key] + ')'; },\n 'data': function (data, i) { return JSON.stringify(data[i]) + '\\n\\n'; }\n };\n req = this.generateBodyContent(arr, e, stat);\n return req;\n };\n ODataAdaptor.getField = function (prop) {\n return prop.replace(/\\./g, '/');\n };\n ODataAdaptor.prototype.generateBodyContent = function (arr, e, stat) {\n var req = '';\n for (var i = 0; i < arr.length; i++) {\n req += '\\n' + e.cSet + '\\n';\n req += this.options.changeSetContent + '\\n\\n';\n req += stat.method;\n req += e.url + stat.url(arr, i, e.key) + ' HTTP/1.1\\n';\n req += 'Accept: ' + this.options.accept + '\\n';\n req += 'Content-Id: ' + this.pvt.changeSet++ + '\\n';\n req += this.options.batchChangeSetContentType + '\\n\\n';\n req += stat.data(arr, i);\n }\n return req;\n };\n ODataAdaptor.prototype.processBatchResponse = function (data, query, xhr, request, changes) {\n if (xhr && xhr.getResponseHeader('Content-Type') && xhr.getResponseHeader('Content-Type').indexOf('xml') !== -1) {\n return (query.isCountRequired ? { result: [], count: 0 } : []);\n }\n if (request && this.options.batch && DataUtil.endsWith(request.url, this.options.batch) && request.type.toLowerCase() === 'post') {\n var guid = xhr.getResponseHeader('Content-Type');\n var cIdx = void 0;\n var jsonObj = void 0;\n var d = data + '';\n guid = guid.substring(guid.indexOf('=batchresponse') + 1);\n d = d.split(guid);\n if (d.length < 2) {\n return {};\n }\n d = d[1];\n var exVal = /(?:\\bContent-Type.+boundary=)(changesetresponse.+)/i.exec(d);\n if (exVal) {\n d.replace(exVal[0], '');\n }\n var changeGuid = exVal ? exVal[1] : '';\n d = d.split(changeGuid);\n for (var i = d.length; i > -1; i--) {\n if (!/\\bContent-ID:/i.test(d[i]) || !/\\bHTTP.+201/.test(d[i])) {\n continue;\n }\n cIdx = parseInt(/\\bContent-ID: (\\d+)/i.exec(d[i])[1], 10);\n if (changes.addedRecords[cIdx]) {\n jsonObj = DataUtil.parse.parseJson(/^\\{.+\\}/m.exec(d[i])[0]);\n extend({}, changes.addedRecords[cIdx], this.processResponse(jsonObj));\n }\n }\n return changes;\n }\n return null;\n };\n return ODataAdaptor;\n}(UrlAdaptor));\nexport { ODataAdaptor };\n/**\n * The OData v4 is an improved version of OData protocols.\n * The DataManager uses the ODataV4Adaptor to consume OData v4 services.\n * @hidden\n */\nvar ODataV4Adaptor = /** @class */ (function (_super) {\n __extends(ODataV4Adaptor, _super);\n function ODataV4Adaptor() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n // options replaced the default adaptor options\n _this.options = extend({}, _this.options, {\n requestType: 'get',\n accept: 'application/json, text/javascript, */*; q=0.01',\n multipartAccept: 'multipart/mixed',\n sortBy: '$orderby',\n select: '$select',\n skip: '$skip',\n take: '$top',\n count: '$count',\n search: '$search',\n where: '$filter',\n expand: '$expand',\n batch: '$batch',\n changeSet: '--changeset_',\n batchPre: 'batch_',\n contentId: 'Content-Id: ',\n batchContent: 'Content-Type: multipart/mixed; boundary=',\n changeSetContent: 'Content-Type: application/http\\nContent-Transfer-Encoding: binary ',\n batchChangeSetContentType: 'Content-Type: application/json; charset=utf-8 '\n });\n return _this;\n }\n /**\n * @hidden\n */\n ODataV4Adaptor.prototype.getModulename = function () {\n return 'ODataV4Adaptor';\n };\n ;\n /**\n * Returns the query string which requests total count from the data source.\n * @param {boolean} e\n * @returns string\n */\n ODataV4Adaptor.prototype.onCount = function (e) {\n return e === true ? 'true' : '';\n };\n /**\n * Generate request string based on the filter criteria from query.\n * @param {Predicate} pred\n * @param {boolean} requiresCast?\n */\n ODataV4Adaptor.prototype.onPredicate = function (predicate, query, requiresCast) {\n var returnValue = '';\n var val = predicate.value;\n var isDate = val instanceof Date;\n returnValue = _super.prototype.onPredicate.call(this, predicate, query, requiresCast);\n if (isDate) {\n returnValue = returnValue.replace(/datetime'(.*)'$/, '$1');\n }\n return returnValue;\n };\n /**\n * Generate query string based on the multiple search criteria from query.\n * @param {{fields:string[]} e\n * @param {string} operator\n * @param {string} key\n * @param {boolean}} ignoreCase\n */\n ODataV4Adaptor.prototype.onEachSearch = function (e) {\n var search = this.pvt.searches || [];\n search.push(e.key);\n this.pvt.searches = search;\n };\n /**\n * Generate query string based on the search criteria from query.\n * @param {Object} e\n */\n ODataV4Adaptor.prototype.onSearch = function (e) {\n return this.pvt.searches.join(' OR ');\n };\n /**\n * Method will trigger before send the request to server side.\n * Used to set the custom header or modify the request options.\n * @param {DataManager} dm\n * @param {XMLHttpRequest} request\n * @param {Ajax} settings\n * @returns void\n */\n ODataV4Adaptor.prototype.beforeSend = function (dm, request, settings) {\n request.setRequestHeader('Accept', this.options.accept);\n };\n /**\n * Returns the data from the query processing.\n * @param {DataResult} data\n * @param {DataOptions} ds?\n * @param {Query} query?\n * @param {XMLHttpRequest} xhr?\n * @param {Ajax} request?\n * @param {CrudOptions} changes?\n * @returns aggregateResult\n */\n ODataV4Adaptor.prototype.processResponse = function (data, ds, query, xhr, request, changes) {\n var pvtData = 'pvtData';\n var pvt = request && request[pvtData];\n var emptyAndBatch = _super.prototype.processBatchResponse.call(this, data, query, xhr, request, changes);\n if (emptyAndBatch) {\n return emptyAndBatch;\n }\n var count = null;\n var dataCount = '@odata.count';\n if (query && query.isCountRequired) {\n if (dataCount in data) {\n count = data[dataCount];\n }\n }\n data = data.value;\n var args = {};\n args.count = count;\n args.result = data;\n this.getAggregateResult(pvt, data, args);\n return DataUtil.isNull(count) ? args.result : { result: args.result, count: count, aggregates: args.aggregates };\n };\n return ODataV4Adaptor;\n}(ODataAdaptor));\nexport { ODataV4Adaptor };\n/**\n * The Web API is a programmatic interface to define the request and response messages system that is mostly exposed in JSON or XML.\n * The DataManager uses the WebApiAdaptor to consume Web API.\n * Since this adaptor is targeted to interact with Web API created using OData endpoint, it is extended from ODataAdaptor\n * @hidden\n */\nvar WebApiAdaptor = /** @class */ (function (_super) {\n __extends(WebApiAdaptor, _super);\n function WebApiAdaptor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Prepare and returns request body which is used to insert a new record in the table.\n * @param {DataManager} dm\n * @param {Object} data\n * @param {string} tableName?\n */\n WebApiAdaptor.prototype.insert = function (dm, data, tableName) {\n return {\n type: 'POST',\n url: dm.dataSource.url,\n data: JSON.stringify(data)\n };\n };\n /**\n * Prepare and return request body which is used to remove record from the table.\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {number} value\n * @param {string} tableName?\n */\n WebApiAdaptor.prototype.remove = function (dm, keyField, value, tableName) {\n return {\n type: 'DELETE',\n url: dm.dataSource.url + '/' + value,\n data: JSON.stringify(value)\n };\n };\n /**\n * Prepare and return request body which is used to update record.\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {Object} value\n * @param {string} tableName?\n */\n WebApiAdaptor.prototype.update = function (dm, keyField, value, tableName) {\n return {\n type: 'PUT',\n url: dm.dataSource.url,\n data: JSON.stringify(value)\n };\n };\n /**\n * Method will trigger before send the request to server side.\n * Used to set the custom header or modify the request options.\n * @param {DataManager} dm\n * @param {XMLHttpRequest} request\n * @param {Ajax} settings\n * @returns void\n */\n WebApiAdaptor.prototype.beforeSend = function (dm, request, settings) {\n request.setRequestHeader('Accept', 'application/json, text/javascript, */*; q=0.01');\n };\n /**\n * Returns the data from the query processing.\n * @param {DataResult} data\n * @param {DataOptions} ds?\n * @param {Query} query?\n * @param {XMLHttpRequest} xhr?\n * @param {Ajax} request?\n * @param {CrudOptions} changes?\n * @returns aggregateResult\n */\n WebApiAdaptor.prototype.processResponse = function (data, ds, query, xhr, request, changes) {\n var pvtData = 'pvtData';\n var pvt = request && request[pvtData];\n var count = null;\n var args = {};\n if (request && request.type.toLowerCase() !== 'post') {\n var versionCheck = xhr && request.getResponseHeader('DataServiceVersion');\n var version = (versionCheck && parseInt(versionCheck, 10)) || 2;\n if (query && query.isCountRequired) {\n if (!DataUtil.isNull(data.Count)) {\n count = data.Count;\n }\n }\n if (version < 3 && data.Items) {\n data = data.Items;\n }\n args.count = count;\n args.result = data;\n this.getAggregateResult(pvt, data, args);\n }\n args.result = args.result || data;\n return DataUtil.isNull(count) ? args.result : { result: args.result, count: args.count, aggregates: args.aggregates };\n };\n return WebApiAdaptor;\n}(ODataAdaptor));\nexport { WebApiAdaptor };\n/**\n * WebMethodAdaptor can be used by DataManager to interact with web method.\n * @hidden\n */\nvar WebMethodAdaptor = /** @class */ (function (_super) {\n __extends(WebMethodAdaptor, _super);\n function WebMethodAdaptor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Prepare the request body based on the query.\n * The query information can be accessed at the WebMethod using variable named `value`.\n * @param {DataManager} dm\n * @param {Query} query\n * @param {Object[]} hierarchyFilters?\n * @returns application\n */\n WebMethodAdaptor.prototype.processQuery = function (dm, query, hierarchyFilters) {\n var obj = new UrlAdaptor().processQuery(dm, query, hierarchyFilters);\n var getData = 'data';\n var data = DataUtil.parse.parseJson(obj[getData]);\n var result = {};\n var value = 'value';\n if (data.param) {\n for (var i = 0; i < data.param.length; i++) {\n var param = data.param[i];\n var key = Object.keys(param)[0];\n result[key] = param[key];\n }\n }\n result[value] = data;\n var pvtData = 'pvtData';\n var url = 'url';\n return {\n data: JSON.stringify(result),\n url: obj[url],\n pvtData: obj[pvtData],\n type: 'POST',\n contentType: 'application/json; charset=utf-8'\n };\n };\n return WebMethodAdaptor;\n}(UrlAdaptor));\nexport { WebMethodAdaptor };\n/**\n * RemoteSaveAdaptor, extended from JsonAdaptor and it is used for binding local data and performs all DataManager queries in client-side.\n * It interacts with server-side only for CRUD operations.\n * @hidden\n */\nvar RemoteSaveAdaptor = /** @class */ (function (_super) {\n __extends(RemoteSaveAdaptor, _super);\n /**\n * @hidden\n */\n function RemoteSaveAdaptor() {\n var _this = _super.call(this) || this;\n setValue('beforeSend', UrlAdaptor.prototype.beforeSend, _this);\n return _this;\n }\n RemoteSaveAdaptor.prototype.insert = function (dm, data, tableName) {\n _super.prototype.insert.call(this, dm, data, null, null, 0);\n return {\n url: dm.dataSource.insertUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n data: JSON.stringify({\n value: data,\n table: tableName,\n action: 'insert'\n })\n };\n };\n RemoteSaveAdaptor.prototype.remove = function (dm, keyField, value, tableName) {\n _super.prototype.remove.call(this, dm, keyField, value);\n return {\n type: 'POST',\n url: dm.dataSource.removeUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n data: JSON.stringify({\n key: value,\n keyColumn: keyField,\n table: tableName,\n action: 'remove'\n })\n };\n };\n RemoteSaveAdaptor.prototype.update = function (dm, keyField, value, tableName) {\n _super.prototype.update.call(this, dm, keyField, value);\n return {\n type: 'POST',\n url: dm.dataSource.updateUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n data: JSON.stringify({\n value: value,\n action: 'update',\n keyColumn: keyField,\n key: value[keyField],\n table: tableName\n })\n };\n };\n /**\n * Prepare the request body based on the newly added, removed and updated records.\n * Also perform the changes in the locally cached data to sync with the remote data.\n * The result is used by the batch request.\n * @param {DataManager} dm\n * @param {CrudOptions} changes\n * @param {RemoteArgs} e\n */\n RemoteSaveAdaptor.prototype.batchRequest = function (dm, changes, e) {\n var i;\n for (i = 0; i < changes.addedRecords.length; i++) {\n JsonAdaptor.prototype.insert(dm, changes.addedRecords[i]);\n }\n for (i = 0; i < changes.changedRecords.length; i++) {\n JsonAdaptor.prototype.update(dm, e.key, changes.changedRecords[i]);\n }\n for (i = 0; i < changes.deletedRecords.length; i++) {\n JsonAdaptor.prototype.remove(dm, e.key, changes.deletedRecords[i]);\n }\n return {\n type: 'POST',\n url: dm.dataSource.batchUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n contentType: 'application/json; charset=utf-8',\n dataType: 'json',\n data: JSON.stringify({\n changed: changes.changedRecords,\n added: changes.addedRecords,\n deleted: changes.deletedRecords,\n action: 'batch',\n table: e.url,\n key: e.key\n })\n };\n };\n return RemoteSaveAdaptor;\n}(JsonAdaptor));\nexport { RemoteSaveAdaptor };\n/**\n * Cache Adaptor is used to cache the data of the visited pages. It prevents new requests for the previously visited pages.\n * You can configure cache page size and duration of caching by using cachingPageSize and timeTillExpiration properties of the DataManager\n * @hidden\n */\nvar CacheAdaptor = /** @class */ (function (_super) {\n __extends(CacheAdaptor, _super);\n /**\n * Constructor for CacheAdaptor class.\n * @param {CacheAdaptor} adaptor?\n * @param {number} timeStamp?\n * @param {number} pageSize?\n * @hidden\n */\n function CacheAdaptor(adaptor, timeStamp, pageSize) {\n var _this = _super.call(this) || this;\n _this.isCrudAction = false;\n _this.isInsertAction = false;\n if (!isNullOrUndefined(adaptor)) {\n _this.cacheAdaptor = adaptor;\n }\n _this.pageSize = pageSize;\n _this.guidId = DataUtil.getGuid('cacheAdaptor');\n var obj = { keys: [], results: [] };\n window.localStorage.setItem(_this.guidId, JSON.stringify(obj));\n var guid = _this.guidId;\n if (!isNullOrUndefined(timeStamp)) {\n setInterval(function () {\n var data;\n data = DataUtil.parse.parseJson(window.localStorage.getItem(guid));\n var forDel = [];\n for (var i = 0; i < data.results.length; i++) {\n var currentTime = +new Date();\n var requestTime = +new Date(data.results[i].timeStamp);\n data.results[i].timeStamp = currentTime - requestTime;\n if (currentTime - requestTime > timeStamp) {\n forDel.push(i);\n }\n }\n for (var i = 0; i < forDel.length; i++) {\n data.results.splice(forDel[i], 1);\n data.keys.splice(forDel[i], 1);\n }\n window.localStorage.removeItem(guid);\n window.localStorage.setItem(guid, JSON.stringify(data));\n }, timeStamp);\n }\n return _this;\n }\n /**\n * It will generate the key based on the URL when we send a request to server.\n * @param {string} url\n * @param {Query} query?\n * @hidden\n */\n CacheAdaptor.prototype.generateKey = function (url, query) {\n var queries = this.getQueryRequest(query);\n var singles = Query.filterQueryLists(query.queries, ['onSelect', 'onPage', 'onSkip', 'onTake', 'onRange']);\n var key = url;\n var page = 'onPage';\n if (page in singles) {\n key += singles[page].pageIndex;\n }\n queries.sorts.forEach(function (obj) {\n key += obj.e.direction + obj.e.fieldName;\n });\n queries.groups.forEach(function (obj) {\n key += obj.e.fieldName;\n });\n queries.searches.forEach(function (obj) {\n key += obj.e.searchKey;\n });\n for (var filter = 0; filter < queries.filters.length; filter++) {\n var currentFilter = queries.filters[filter];\n if (currentFilter.e.isComplex) {\n var newQuery = query.clone();\n newQuery.queries = [];\n for (var i = 0; i < currentFilter.e.predicates.length; i++) {\n newQuery.queries.push({ fn: 'onWhere', e: currentFilter.e.predicates[i], filter: query.queries.filter });\n }\n key += currentFilter.e.condition + this.generateKey(url, newQuery);\n }\n else {\n key += currentFilter.e.field + currentFilter.e.operator + currentFilter.e.value;\n }\n }\n return key;\n };\n /**\n * Process the query to generate request body.\n * If the data is already cached, it will return the cached data.\n * @param {DataManager} dm\n * @param {Query} query?\n * @param {Object[]} hierarchyFilters?\n */\n CacheAdaptor.prototype.processQuery = function (dm, query, hierarchyFilters) {\n var key = this.generateKey(dm.dataSource.url, query);\n var cachedItems;\n cachedItems = DataUtil.parse.parseJson(window.localStorage.getItem(this.guidId));\n var data = cachedItems ? cachedItems.results[cachedItems.keys.indexOf(key)] : null;\n if (data != null && !this.isCrudAction && !this.isInsertAction) {\n return data;\n }\n this.isCrudAction = null;\n this.isInsertAction = null;\n return this.cacheAdaptor.processQuery.apply(this.cacheAdaptor, [].slice.call(arguments, 0));\n };\n /**\n * Returns the data from the query processing.\n * It will also cache the data for later usage.\n * @param {DataResult} data\n * @param {DataManager} ds?\n * @param {Query} query?\n * @param {XMLHttpRequest} xhr?\n * @param {Ajax} request?\n * @param {CrudOptions} changes?\n */\n CacheAdaptor.prototype.processResponse = function (data, ds, query, xhr, request, changes) {\n if (this.isInsertAction || (request && this.cacheAdaptor.options.batch &&\n DataUtil.endsWith(request.url, this.cacheAdaptor.options.batch) && request.type.toLowerCase() === 'post')) {\n return this.cacheAdaptor.processResponse(data, ds, query, xhr, request, changes);\n }\n data = this.cacheAdaptor.processResponse.apply(this.cacheAdaptor, [].slice.call(arguments, 0));\n var key = query ? this.generateKey(ds.dataSource.url, query) : ds.dataSource.url;\n var obj = {};\n obj = DataUtil.parse.parseJson(window.localStorage.getItem(this.guidId));\n var index = obj.keys.indexOf(key);\n if (index !== -1) {\n obj.results.splice(index, 1);\n obj.keys.splice(index, 1);\n }\n obj.results[obj.keys.push(key) - 1] = { keys: key, result: data.result, timeStamp: new Date(), count: data.count };\n while (obj.results.length > this.pageSize) {\n obj.results.splice(0, 1);\n obj.keys.splice(0, 1);\n }\n window.localStorage.setItem(this.guidId, JSON.stringify(obj));\n return data;\n };\n /**\n * Method will trigger before send the request to server side. Used to set the custom header or modify the request options.\n * @param {DataManager} dm\n * @param {XMLHttpRequest} request\n * @param {Ajax} settings?\n */\n CacheAdaptor.prototype.beforeSend = function (dm, request, settings) {\n if (DataUtil.endsWith(settings.url, this.cacheAdaptor.options.batch) && settings.type.toLowerCase() === 'post') {\n request.setRequestHeader('Accept', this.cacheAdaptor.options.multipartAccept);\n }\n if (!dm.dataSource.crossDomain) {\n request.setRequestHeader('Accept', this.cacheAdaptor.options.accept);\n }\n };\n /**\n * Updates existing record and saves the changes to the table.\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {Object} value\n * @param {string} tableName\n */\n CacheAdaptor.prototype.update = function (dm, keyField, value, tableName) {\n this.isCrudAction = true;\n return this.cacheAdaptor.update(dm, keyField, value, tableName);\n };\n /**\n * Prepare and returns request body which is used to insert a new record in the table.\n * @param {DataManager} dm\n * @param {Object} data\n * @param {string} tableName?\n */\n CacheAdaptor.prototype.insert = function (dm, data, tableName) {\n this.isInsertAction = true;\n return this.cacheAdaptor.insert(dm, data, tableName);\n };\n /**\n * Prepare and return request body which is used to remove record from the table.\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {Object} value\n * @param {string} tableName?\n */\n CacheAdaptor.prototype.remove = function (dm, keyField, value, tableName) {\n this.isCrudAction = true;\n return this.cacheAdaptor.remove(dm, keyField, value, tableName);\n };\n /**\n * Prepare the request body based on the newly added, removed and updated records.\n * The result is used by the batch request.\n * @param {DataManager} dm\n * @param {CrudOptions} changes\n * @param {RemoteArgs} e\n */\n CacheAdaptor.prototype.batchRequest = function (dm, changes, e) {\n return this.cacheAdaptor.batchRequest(dm, changes, e);\n };\n return CacheAdaptor;\n}(UrlAdaptor));\nexport { CacheAdaptor };\n","import { Ajax } from '@syncfusion/ej2-base';\nimport { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DataUtil } from './util';\nimport { Query } from './query';\nimport { ODataAdaptor, JsonAdaptor, CacheAdaptor, RemoteSaveAdaptor } from './adaptors';\n/**\n * DataManager is used to manage and manipulate relational data.\n */\nvar DataManager = /** @class */ (function () {\n /**\n * Constructor for DataManager class\n * @param {DataOptions|JSON[]} dataSource?\n * @param {Query} query?\n * @param {AdaptorOptions|string} adaptor?\n * @hidden\n */\n function DataManager(dataSource, query, adaptor) {\n var _this = this;\n /** @hidden */\n this.dateParse = true;\n this.requests = [];\n if (!dataSource && !this.dataSource) {\n dataSource = [];\n }\n adaptor = adaptor || dataSource.adaptor;\n var data;\n if (dataSource instanceof Array) {\n data = {\n json: dataSource,\n offline: true\n };\n }\n else if (typeof dataSource === 'object') {\n if (!dataSource.json) {\n dataSource.json = [];\n }\n data = {\n url: dataSource.url,\n insertUrl: dataSource.insertUrl,\n removeUrl: dataSource.removeUrl,\n updateUrl: dataSource.updateUrl,\n crudUrl: dataSource.crudUrl,\n batchUrl: dataSource.batchUrl,\n json: dataSource.json,\n headers: dataSource.headers,\n accept: dataSource.accept,\n data: dataSource.data,\n timeTillExpiration: dataSource.timeTillExpiration,\n cachingPageSize: dataSource.cachingPageSize,\n enableCaching: dataSource.enableCaching,\n requestType: dataSource.requestType,\n key: dataSource.key,\n crossDomain: dataSource.crossDomain,\n jsonp: dataSource.jsonp,\n dataType: dataSource.dataType,\n offline: dataSource.offline !== undefined ? dataSource.offline\n : dataSource.adaptor instanceof RemoteSaveAdaptor ? false : dataSource.url ? false : true,\n requiresFormat: dataSource.requiresFormat\n };\n }\n else {\n DataUtil.throwError('DataManager: Invalid arguments');\n }\n if (data.requiresFormat === undefined && !DataUtil.isCors()) {\n data.requiresFormat = isNullOrUndefined(data.crossDomain) ? true : data.crossDomain;\n }\n if (data.dataType === undefined) {\n data.dataType = 'json';\n }\n this.dataSource = data;\n this.defaultQuery = query;\n if (data.url && data.offline && !data.json.length) {\n this.isDataAvailable = false;\n this.adaptor = adaptor || new ODataAdaptor();\n this.dataSource.offline = false;\n this.ready = this.executeQuery(query || new Query());\n this.ready.then(function (e) {\n _this.dataSource.offline = true;\n _this.isDataAvailable = true;\n data.json = e.result;\n _this.adaptor = new JsonAdaptor();\n });\n }\n else {\n this.adaptor = data.offline ? new JsonAdaptor() : new ODataAdaptor();\n }\n if (!data.jsonp && this.adaptor instanceof ODataAdaptor) {\n data.jsonp = 'callback';\n }\n this.adaptor = adaptor || this.adaptor;\n if (data.enableCaching) {\n this.adaptor = new CacheAdaptor(this.adaptor, data.timeTillExpiration, data.cachingPageSize);\n }\n return this;\n }\n /**\n * Overrides DataManager's default query with given query.\n * @param {Query} query - Defines the new default query.\n */\n DataManager.prototype.setDefaultQuery = function (query) {\n this.defaultQuery = query;\n return this;\n };\n /**\n * Executes the given query with local data source.\n * @param {Query} query - Defines the query to retrieve data.\n */\n DataManager.prototype.executeLocal = function (query) {\n if (!this.defaultQuery && !(query instanceof Query)) {\n DataUtil.throwError('DataManager - executeLocal() : A query is required to execute');\n }\n if (!this.dataSource.json) {\n DataUtil.throwError('DataManager - executeLocal() : Json data is required to execute');\n }\n query = query || this.defaultQuery;\n var result = this.adaptor.processQuery(this, query);\n if (query.subQuery) {\n var from = query.subQuery.fromTable;\n var lookup = query.subQuery.lookups;\n var res = query.isCountRequired ? result.result :\n result;\n if (lookup && lookup instanceof Array) {\n DataUtil.buildHierarchy(query.subQuery.fKey, from, res, lookup, query.subQuery.key);\n }\n for (var j = 0; j < res.length; j++) {\n if (res[j][from] instanceof Array) {\n res[j] = extend({}, {}, res[j]);\n res[j][from] = this.adaptor.processResponse(query.subQuery.using(new DataManager(res[j][from].slice(0))).executeLocal(), this, query);\n }\n }\n }\n return this.adaptor.processResponse(result, this, query);\n };\n /**\n * Executes the given query with either local or remote data source.\n * It will be executed as asynchronously and returns Promise object which will be resolved or rejected after action completed.\n * @param {Query|Function} query - Defines the query to retrieve data.\n * @param {Function} done - Defines the callback function and triggers when the Promise is resolved.\n * @param {Function} fail - Defines the callback function and triggers when the Promise is rejected.\n * @param {Function} always - Defines the callback function and triggers when the Promise is resolved or rejected.\n */\n DataManager.prototype.executeQuery = function (query, done, fail, always) {\n var _this = this;\n if (typeof query === 'function') {\n always = fail;\n fail = done;\n done = query;\n query = null;\n }\n if (!query) {\n query = this.defaultQuery;\n }\n if (!(query instanceof Query)) {\n DataUtil.throwError('DataManager - executeQuery() : A query is required to execute');\n }\n var deffered = new Deferred();\n var args = { query: query };\n if (!this.dataSource.offline && this.dataSource.url !== undefined) {\n var result = this.adaptor.processQuery(this, query);\n this.makeRequest(result, deffered, args, query);\n }\n else {\n DataManager.nextTick(function () {\n var res = _this.executeLocal(query);\n args = DataManager.getDeferedArgs(query, res, args);\n deffered.resolve(args);\n });\n }\n return deffered.promise;\n };\n DataManager.getDeferedArgs = function (query, result, args) {\n if (query.isCountRequired) {\n args.result = result.result;\n args.count = result.count;\n args.aggregates = result.aggregates;\n }\n else {\n args.result = result;\n }\n return args;\n };\n DataManager.nextTick = function (fn) {\n (window.setImmediate || window.setTimeout)(fn, 0);\n };\n DataManager.prototype.extendRequest = function (url, fnSuccess, fnFail) {\n return extend({}, {\n type: 'GET',\n dataType: this.dataSource.dataType,\n crossDomain: this.dataSource.crossDomain,\n jsonp: this.dataSource.jsonp,\n cache: true,\n processData: false,\n onSuccess: fnSuccess,\n onFailure: fnFail\n }, url);\n };\n DataManager.prototype.makeRequest = function (url, deffered, args, query) {\n var _this = this;\n var isSelector = !!query.subQuerySelector;\n var fnFail = function (e) {\n args.error = e;\n deffered.reject(args);\n };\n var process = function (data, count, xhr, request, actual, aggregates, virtualSelectRecords) {\n args.xhr = xhr;\n args.count = count ? parseInt(count.toString(), 10) : 0;\n args.result = data;\n args.request = request;\n args.aggregates = aggregates;\n args.actual = actual;\n args.virtualSelectRecords = virtualSelectRecords;\n deffered.resolve(args);\n };\n var fnQueryChild = function (data, selector) {\n var subDeffer = new Deferred();\n var childArgs = { parent: args };\n query.subQuery.isChild = true;\n var subUrl = _this.adaptor.processQuery(_this, query.subQuery, data ? _this.adaptor.processResponse(data) : selector);\n var childReq = _this.makeRequest(subUrl, subDeffer, childArgs, query.subQuery);\n if (!isSelector) {\n subDeffer.then(function (subData) {\n if (data) {\n DataUtil.buildHierarchy(query.subQuery.fKey, query.subQuery.fromTable, data, subData, query.subQuery.key);\n process(data, subData.count, subData.xhr);\n }\n }, fnFail);\n }\n return childReq;\n };\n var fnSuccess = function (data, request) {\n if (request.httpRequest.getResponseHeader('Content-Type').indexOf('xml') === -1 && _this.dateParse) {\n data = DataUtil.parse.parseJson(data);\n }\n var result = _this.adaptor.processResponse(data, _this, query, request.httpRequest, request);\n var count = 0;\n var aggregates = null;\n var virtualSelectRecords = 'virtualSelectRecords';\n var virtualRecords = data[virtualSelectRecords];\n if (query.isCountRequired) {\n count = result.count;\n aggregates = result.aggregates;\n result = result.result;\n }\n if (!query.subQuery) {\n process(result, count, request.httpRequest, request.type, data, aggregates, virtualRecords);\n return;\n }\n if (!isSelector) {\n fnQueryChild(result, request);\n }\n };\n var req = this.extendRequest(url, fnSuccess, fnFail);\n var ajax = new Ajax(req);\n ajax.beforeSend = function () {\n _this.beforeSend(ajax.httpRequest, ajax);\n };\n req = ajax.send();\n req.catch(function (e) { return true; }); // to handle failure remote requests. \n this.requests.push(ajax);\n if (isSelector) {\n var promise = void 0;\n var res = query.subQuerySelector.call(this, { query: query.subQuery, parent: query });\n if (res && res.length) {\n promise = Promise.all([req, fnQueryChild(null, res)]);\n promise.then(function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var result = args[0];\n var pResult = _this.adaptor.processResponse(result[0], _this, query, _this.requests[0].httpRequest, _this.requests[0]);\n var count = 0;\n if (query.isCountRequired) {\n count = pResult.count;\n pResult = pResult.result;\n }\n var cResult = _this.adaptor.processResponse(result[1], _this, query.subQuery, _this.requests[1].httpRequest, _this.requests[1]);\n count = 0;\n if (query.subQuery.isCountRequired) {\n count = cResult.count;\n cResult = cResult.result;\n }\n DataUtil.buildHierarchy(query.subQuery.fKey, query.subQuery.fromTable, pResult, cResult, query.subQuery.key);\n isSelector = false;\n process(pResult, count, _this.requests[0].httpRequest);\n });\n }\n else {\n isSelector = false;\n }\n }\n return req;\n };\n DataManager.prototype.beforeSend = function (request, settings) {\n this.adaptor.beforeSend(this, request, settings);\n var headers = this.dataSource.headers;\n var props;\n for (var i = 0; headers && i < headers.length; i++) {\n props = [];\n var keys = Object.keys(headers[i]);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var prop = keys_1[_i];\n props.push(prop);\n request.setRequestHeader(prop, headers[i][prop]);\n }\n }\n };\n /**\n * Save bulk changes to the given table name.\n * User can add a new record, edit an existing record, and delete a record at the same time.\n * If the datasource from remote, then updated in a single post.\n * @param {Object} changes - Defines the CrudOptions.\n * @param {string} key - Defines the column field.\n * @param {string|Query} tableName - Defines the table name.\n * @param {Query} query - Sets default query for the DataManager.\n */\n DataManager.prototype.saveChanges = function (changes, key, tableName, query) {\n var _this = this;\n if (tableName instanceof Query) {\n query = tableName;\n tableName = null;\n }\n var args = {\n url: tableName,\n key: key || this.dataSource.key\n };\n var req = this.adaptor.batchRequest(this, changes, args, query);\n if (this.dataSource.offline) {\n return req;\n }\n var deff = new Deferred();\n var ajax = new Ajax(req);\n ajax.beforeSend = function () {\n _this.beforeSend(ajax.httpRequest, ajax);\n };\n ajax.onSuccess = function (data, request) {\n deff.resolve(_this.adaptor.processResponse(DataUtil.parse.parseJson(data), _this, null, request.httpRequest, request, changes));\n };\n ajax.onFailure = function (e) {\n deff.reject([{ error: e }]);\n };\n ajax.send().catch(function (e) { return true; }); // to handle the failure requests. \n return deff.promise;\n };\n /**\n * Inserts new record in the given table.\n * @param {Object} data - Defines the data to insert.\n * @param {string|Query} tableName - Defines the table name.\n * @param {Query} query - Sets default query for the DataManager.\n */\n DataManager.prototype.insert = function (data, tableName, query, position) {\n if (tableName instanceof Query) {\n query = tableName;\n tableName = null;\n }\n var req = this.adaptor.insert(this, data, tableName, query, position);\n if (this.dataSource.offline) {\n return req;\n }\n return this.doAjaxRequest(req);\n };\n /**\n * Removes data from the table with the given key.\n * @param {string} keyField - Defines the column field.\n * @param {Object} value - Defines the value to find the data in the specified column.\n * @param {string|Query} tableName - Defines the table name\n * @param {Query} query - Sets default query for the DataManager.\n */\n DataManager.prototype.remove = function (keyField, value, tableName, query) {\n if (typeof value === 'object') {\n value = value[keyField];\n }\n if (tableName instanceof Query) {\n query = tableName;\n tableName = null;\n }\n var res = this.adaptor.remove(this, keyField, value, tableName, query);\n if (this.dataSource.offline) {\n return res;\n }\n return this.doAjaxRequest(res);\n };\n /**\n * Updates existing record in the given table.\n * @param {string} keyField - Defines the column field.\n * @param {Object} value - Defines the value to find the data in the specified column.\n * @param {string|Query} tableName - Defines the table name\n * @param {Query} query - Sets default query for the DataManager.\n */\n DataManager.prototype.update = function (keyField, value, tableName, query) {\n if (tableName instanceof Query) {\n query = tableName;\n tableName = null;\n }\n var res = this.adaptor.update(this, keyField, value, tableName, query);\n if (this.dataSource.offline) {\n return res;\n }\n return this.doAjaxRequest(res);\n };\n DataManager.prototype.doAjaxRequest = function (res) {\n var _this = this;\n var defer = new Deferred();\n res = extend({}, {\n type: 'POST',\n contentType: 'application/json; charset=utf-8',\n processData: false\n }, res);\n var ajax = new Ajax(res);\n ajax.beforeSend = function () {\n _this.beforeSend(ajax.httpRequest, ajax);\n };\n ajax.onSuccess = function (record, request) {\n try {\n DataUtil.parse.parseJson(record);\n }\n catch (e) {\n record = [];\n }\n record = _this.adaptor.processResponse(DataUtil.parse.parseJson(record), _this, null, request.httpRequest, request);\n defer.resolve(record);\n };\n ajax.onFailure = function (e) {\n defer.reject([{ error: e }]);\n };\n ajax.send().catch(function (e) { return true; }); // to handle the failure requests.\n return defer.promise;\n };\n return DataManager;\n}());\nexport { DataManager };\n/**\n * Deferred is used to handle asynchronous operation.\n */\nvar Deferred = /** @class */ (function () {\n function Deferred() {\n var _this = this;\n /**\n * Promise is an object that represents a value that may not be available yet, but will be resolved at some point in the future.\n */\n this.promise = new Promise(function (resolve, reject) {\n _this.resolve = resolve;\n _this.reject = reject;\n });\n /**\n * Defines the callback function triggers when the Deferred object is resolved.\n */\n this.then = this.promise.then.bind(this.promise);\n /**\n * Defines the callback function triggers when the Deferred object is rejected.\n */\n this.catch = this.promise.catch.bind(this.promise);\n }\n return Deferred;\n}());\nexport { Deferred };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { merge, formatUnit, isNullOrUndefined, append, detach } from '@syncfusion/ej2-base';\nimport { attributes, addClass, removeClass, createElement, prepend, closest, remove } from '@syncfusion/ej2-base';\nimport { Component, EventHandler, Property, Complex, Event } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, ChildProperty } from '@syncfusion/ej2-base';\nimport { compile } from '@syncfusion/ej2-base';\nimport { Animation, rippleEffect, Touch } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { ListBase, getFieldValues } from '../common/list-base';\n// Effect Configuration Effect[] = [fromViewBackward,fromViewForward,toViewBackward,toviewForward];\nvar effectsConfig = {\n 'None': [],\n 'SlideLeft': ['SlideRightOut', 'SlideLeftOut', 'SlideLeftIn', 'SlideRightIn'],\n 'SlideDown': ['SlideTopOut', 'SlideBottomOut', 'SlideBottomIn', 'SlideTopIn'],\n 'Zoom': ['FadeOut', 'FadeZoomOut', 'FadeZoomIn', 'FadeIn'],\n 'Fade': ['FadeOut', 'FadeOut', 'FadeIn', 'FadeIn']\n};\nvar effectsRTLConfig = {\n 'None': [],\n 'SlideLeft': ['SlideLeftOut', 'SlideRightOut', 'SlideRightIn', 'SlideLeftIn'],\n 'SlideDown': ['SlideBottomOut', 'SlideTopOut', 'SlideTopIn', 'SlideBottomIn'],\n 'Zoom': ['FadeZoomOut', 'FadeOut', 'FadeIn', 'FadeZoomIn'],\n 'Fade': ['FadeOut', 'FadeOut', 'FadeIn', 'FadeIn']\n};\n// don't use space in classnames.\nexport var classNames = {\n root: 'e-listview',\n hover: 'e-hover',\n selected: 'e-active',\n focused: 'e-focused',\n parentItem: 'e-list-parent',\n listItem: 'e-list-item',\n listIcon: 'e-list-icon',\n textContent: 'e-text-content',\n listItemText: 'e-list-text',\n groupListItem: 'e-list-group-item',\n hasChild: 'e-has-child',\n view: 'e-view',\n header: 'e-list-header',\n headerText: 'e-headertext',\n headerTemplateText: 'e-headertemplate-text',\n text: 'e-text',\n disable: 'e-disabled',\n content: 'e-content',\n icon: 'e-icons',\n backIcon: 'e-icon-back',\n checkboxWrapper: 'e-checkbox-wrapper',\n checkbox: 'e-checkbox',\n checked: 'e-check',\n checklist: 'e-checklist',\n checkboxIcon: 'e-frame',\n checkboxRight: 'e-checkbox-right',\n checkboxLeft: 'e-checkbox-left',\n listviewCheckbox: 'e-listview-checkbox',\n itemCheckList: 'e-checklist'\n};\nvar FieldSettings = /** @class */ (function (_super) {\n __extends(FieldSettings, _super);\n function FieldSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('id')\n ], FieldSettings.prototype, \"id\", void 0);\n __decorate([\n Property('text')\n ], FieldSettings.prototype, \"text\", void 0);\n __decorate([\n Property('isChecked')\n ], FieldSettings.prototype, \"isChecked\", void 0);\n __decorate([\n Property('isVisible')\n ], FieldSettings.prototype, \"isVisible\", void 0);\n __decorate([\n Property('enabled')\n ], FieldSettings.prototype, \"enabled\", void 0);\n __decorate([\n Property('iconCss')\n ], FieldSettings.prototype, \"iconCss\", void 0);\n __decorate([\n Property('child')\n ], FieldSettings.prototype, \"child\", void 0);\n __decorate([\n Property('tooltip')\n ], FieldSettings.prototype, \"tooltip\", void 0);\n __decorate([\n Property('groupBy')\n ], FieldSettings.prototype, \"groupBy\", void 0);\n __decorate([\n Property('text')\n ], FieldSettings.prototype, \"sortBy\", void 0);\n __decorate([\n Property('htmlAttributes')\n ], FieldSettings.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property('tableName')\n ], FieldSettings.prototype, \"tableName\", void 0);\n return FieldSettings;\n}(ChildProperty));\nexport { FieldSettings };\n/**\n * Represents the EJ2 ListView control.\n * ```html\n *
\n *
    \n *
  • Favourite
  • \n *
  • Documents
  • \n *
  • Downloads
  • \n *
\n *
\n * ```\n * ```typescript\n * var lvObj = new ListView({});\n * lvObj.appendTo(\"#listview\");\n * ```\n */\nvar ListView = /** @class */ (function (_super) {\n __extends(ListView, _super);\n /**\n * Constructor for creating the widget\n */\n function ListView(options, element) {\n return _super.call(this, options, element) || this;\n }\n ListView.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'htmlAttributes':\n this.setHTMLAttribute();\n break;\n case 'cssClass':\n this.setCSSClass(oldProp.cssClass);\n break;\n case 'enable':\n this.setEnable();\n break;\n case 'width':\n case 'height':\n this.setSize();\n break;\n case 'enableRtl':\n this.setEnableRTL();\n break;\n case 'fields':\n this.listBaseOption.fields = this.fields.properties;\n if (this.enableVirtualization) {\n this.virtualizationModule.reRenderUiVirtualization();\n }\n else {\n this.reRender();\n }\n break;\n case 'headerTitle':\n if (!this.curDSLevel.length) {\n this.header(this.headerTitle, false);\n }\n break;\n case 'showHeader':\n this.header(this.headerTitle, false);\n break;\n case 'enableVirtualization':\n detach(this.contentContainer);\n this.refresh();\n break;\n case 'showCheckBox':\n case 'checkBoxPosition':\n if (this.enableVirtualization) {\n this.virtualizationModule.reRenderUiVirtualization();\n }\n else {\n this.setCheckbox();\n }\n break;\n case 'dataSource':\n if (this.enableVirtualization) {\n this.virtualizationModule.reRenderUiVirtualization();\n }\n else {\n this.reRender();\n }\n break;\n case 'sortOrder':\n case 'showIcon':\n if (this.enableVirtualization) {\n this.virtualizationModule.reRenderUiVirtualization();\n }\n else {\n this.listBaseOption.showIcon = this.showIcon;\n this.curViewDS = this.getSubDS();\n this.resetCurrentList();\n }\n break;\n default:\n break;\n }\n }\n };\n // Model Changes\n ListView.prototype.setHTMLAttribute = function () {\n if (Object.keys(this.htmlAttributes).length) {\n attributes(this.element, this.htmlAttributes);\n }\n };\n ListView.prototype.setCSSClass = function (oldCSSClass) {\n if (this.cssClass) {\n addClass([this.element], this.cssClass.split(' '));\n }\n if (oldCSSClass) {\n removeClass([this.element], oldCSSClass.split(' '));\n }\n };\n ListView.prototype.setSize = function () {\n this.element.style.height = formatUnit(this.height);\n this.element.style.width = formatUnit(this.width);\n this.isWindow = this.element.getBoundingClientRect().height ? false : true;\n };\n ListView.prototype.setEnable = function () {\n this.enableElement(this.element, this.enable);\n };\n ListView.prototype.setEnableRTL = function () {\n if (this.enableRtl) {\n this.element.classList.add('e-rtl');\n }\n else {\n this.element.classList.remove('e-rtl');\n }\n };\n ListView.prototype.enableElement = function (element, isEnabled) {\n if (isEnabled) {\n element.classList.remove(classNames.disable);\n }\n else {\n element.classList.add(classNames.disable);\n }\n };\n //Suport Component Functions\n ListView.prototype.header = function (text, showBack) {\n if (this.headerEle === undefined && this.showHeader) {\n this.headerEle = createElement('div', { className: classNames.header });\n var innerHeaderEle = createElement('span', { className: classNames.headerText, innerHTML: this.headerTitle });\n var textEle = createElement('div', { className: classNames.text, innerHTML: innerHeaderEle.outerHTML });\n var hedBackButton = createElement('div', {\n className: classNames.icon + ' ' + classNames.backIcon + ' e-but-back',\n attrs: { style: 'display:none;' }\n });\n this.headerEle.appendChild(hedBackButton);\n this.headerEle.appendChild(textEle);\n if (this.headerTemplate) {\n var compiledString = compile(this.headerTemplate);\n var headerTemplateEle = createElement('div', { className: classNames.headerTemplateText });\n append(compiledString({}), headerTemplateEle);\n append([headerTemplateEle], this.headerEle);\n }\n if (this.headerTemplate && this.headerTitle) {\n textEle.classList.add('header');\n }\n this.element.classList.add('e-has-header');\n prepend([this.headerEle], this.element);\n }\n else if (this.headerEle) {\n if (this.showHeader) {\n this.headerEle.style.display = '';\n var textEle = this.headerEle.querySelector('.' + classNames.headerText);\n var hedBackButton = this.headerEle.querySelector('.' + classNames.backIcon);\n textEle.innerHTML = text;\n if (this.headerTemplate && showBack) {\n textEle.parentElement.classList.remove('header');\n this.headerEle.querySelector('.' + classNames.headerTemplateText).classList.add('nested-header');\n }\n if (this.headerTemplate && !showBack) {\n textEle.parentElement.classList.add('header');\n this.headerEle.querySelector('.' + classNames.headerTemplateText).classList.remove('nested-header');\n this.headerEle.querySelector('.' + classNames.headerTemplateText).classList.add('header');\n }\n if (showBack === true) {\n hedBackButton.style.display = '';\n }\n else {\n hedBackButton.style.display = 'none';\n }\n }\n else {\n this.headerEle.style.display = 'none';\n }\n }\n };\n // Animation Related Functions\n ListView.prototype.switchView = function (fromView, toView, reverse) {\n var _this = this;\n if (fromView && toView) {\n var fPos_1 = fromView.style.position;\n var overflow_1 = (this.element.style.overflow !== 'hidden') ? this.element.style.overflow : '';\n fromView.style.position = 'absolute';\n fromView.classList.add('e-view');\n var anim = void 0;\n var duration = this.animation.duration;\n if (this.animation.effect) {\n anim = (this.enableRtl ? effectsRTLConfig[this.animation.effect] : effectsConfig[this.animation.effect]);\n }\n else {\n var slideLeft = 'SlideLeft';\n anim = effectsConfig[slideLeft];\n reverse = this.enableRtl;\n duration = 0;\n }\n this.element.style.overflow = 'hidden';\n this.aniObj.animate(fromView, {\n name: (reverse === true ? anim[0] : anim[1]),\n duration: duration,\n timingFunction: this.animation.easing,\n end: function (model) {\n fromView.style.display = 'none';\n _this.element.style.overflow = overflow_1;\n fromView.style.position = fPos_1;\n fromView.classList.remove('e-view');\n }\n });\n toView.style.display = '';\n this.aniObj.animate(toView, {\n name: (reverse === true ? anim[2] : anim[3]),\n duration: duration,\n timingFunction: this.animation.easing,\n end: function () {\n _this.trigger('actionComplete');\n }\n });\n this.curUL = toView;\n }\n };\n ListView.prototype.preRender = function () {\n this.listBaseOption = {\n template: this.template,\n headerTemplate: this.headerTemplate,\n groupTemplate: this.groupTemplate, expandCollapse: true, listClass: '',\n ariaAttributes: {\n itemRole: 'listitem', listRole: 'list', itemText: '',\n groupItemRole: 'group', wrapperRole: 'presentation'\n },\n fields: this.fields.properties, sortOrder: this.sortOrder, showIcon: this.showIcon,\n itemCreated: this.renderCheckbox.bind(this)\n };\n this.initialization();\n };\n ListView.prototype.initialization = function () {\n this.curDSLevel = [];\n this.animateOptions = {};\n this.curViewDS = [];\n this.currentLiElements = [];\n this.isNestedList = false;\n this.selectedData = [];\n this.selectedId = [];\n this.aniObj = new Animation(this.animateOptions);\n };\n ListView.prototype.renderCheckbox = function (args) {\n if (args.item.classList.contains(classNames.hasChild)) {\n this.isNestedList = true;\n }\n if (this.showCheckBox && this.isValidLI(args.item)) {\n var checkboxElement = void 0;\n var fieldData = void 0;\n checkboxElement = createCheckBox(false, {\n checked: false, enableRtl: this.enableRtl,\n cssClass: classNames.listviewCheckbox\n });\n checkboxElement.setAttribute('role', 'checkbox');\n var frameElement_1 = checkboxElement.querySelector('.' + classNames.checkboxIcon);\n args.item.classList.add(classNames.itemCheckList);\n args.item.firstElementChild.classList.add(classNames.checkbox);\n if (typeof this.dataSource[0] !== 'string' && typeof this.dataSource[0] !== 'number') {\n fieldData = getFieldValues(args.curData, this.listBaseOption.fields);\n if (fieldData[this.listBaseOption.fields.isChecked]) {\n this.checkInternally(args, checkboxElement);\n }\n }\n else if (((typeof this.dataSource[0] === 'string' ||\n typeof this.dataSource[0] === 'number') && this.selectedData.indexOf(args.text) !== -1)) {\n this.checkInternally(args, checkboxElement);\n }\n checkboxElement.setAttribute('aria-checked', frameElement_1.classList.contains(classNames.checked) ? 'true' : 'false');\n if (this.checkBoxPosition === 'Left') {\n checkboxElement.classList.add(classNames.checkboxLeft);\n args.item.firstElementChild.classList.add(classNames.checkboxLeft);\n args.item.firstElementChild.insertBefore(checkboxElement, args.item.firstElementChild.childNodes[0]);\n }\n else {\n checkboxElement.classList.add(classNames.checkboxRight);\n args.item.firstElementChild.classList.add(classNames.checkboxRight);\n args.item.firstElementChild.appendChild(checkboxElement);\n }\n this.currentLiElements.push(args.item);\n }\n };\n ListView.prototype.checkInternally = function (args, checkboxElement) {\n args.item.classList.add(classNames.selected);\n args.item.setAttribute('aria-selected', 'true');\n checkboxElement.querySelector('.' + classNames.checkboxIcon).classList.add(classNames.checked);\n checkboxElement.setAttribute('aria-checked', 'true');\n };\n /**\n * It is used to check the checkbox of an item.\n * @param {Fields | HTMLElement} item - It accepts Fields or HTML list element as an argument.\n */\n ListView.prototype.checkItem = function (item) {\n this.toggleCheckBase(item, true);\n };\n ListView.prototype.toggleCheckBase = function (item, checked) {\n if (this.showCheckBox) {\n var liElement = item;\n if (item instanceof Object && item.constructor !== HTMLLIElement) {\n liElement = this.getLiFromObjOrElement(item);\n }\n if (!isNullOrUndefined(liElement)) {\n var checkboxIcon = liElement.querySelector('.' + classNames.checkboxIcon);\n checked ? liElement.classList.add(classNames.selected) : liElement.classList.remove(classNames.selected);\n liElement.setAttribute('aria-selected', checked ? 'true' : 'false');\n checked ? checkboxIcon.classList.add(classNames.checked) : checkboxIcon.classList.remove(classNames.checked);\n checkboxIcon.parentElement.setAttribute('aria-checked', checked ? 'true' : 'false');\n }\n this.setSelectedItemData(liElement);\n }\n };\n /**\n * It is used to uncheck the checkbox of an item.\n * @param {Fields | HTMLElement} item - It accepts Fields or HTML list element as an argument.\n */\n ListView.prototype.uncheckItem = function (item) {\n this.toggleCheckBase(item, false);\n };\n /**\n * It is used to check all the items in ListView.\n */\n ListView.prototype.checkAllItems = function () {\n this.toggleAllCheckBase(true);\n };\n /**\n * It is used to un-check all the items in ListView.\n */\n ListView.prototype.uncheckAllItems = function () {\n this.toggleAllCheckBase(false);\n };\n ListView.prototype.toggleAllCheckBase = function (checked) {\n if (this.showCheckBox) {\n for (var i = 0; i < this.liCollection.length; i++) {\n var checkIcon = this.liCollection[i].querySelector('.' + classNames.checkboxIcon);\n if (checkIcon) {\n if (checked) {\n if (!checkIcon.classList.contains(classNames.checked)) {\n this.checkItem(this.liCollection[i]);\n }\n }\n else {\n if (checkIcon.classList.contains(classNames.checked)) {\n this.uncheckItem(this.liCollection[i]);\n }\n }\n }\n }\n if (this.enableVirtualization) {\n this.virtualizationModule.checkedItem(checked);\n }\n }\n };\n ListView.prototype.setCheckbox = function () {\n var _this = this;\n if (this.showCheckBox) {\n var liCollection = Array.prototype.slice.call(this.element.querySelectorAll('.' + classNames.listItem));\n var args_1 = {\n item: undefined, curData: undefined, dataSource: undefined, fields: undefined,\n options: undefined, text: ''\n };\n liCollection.forEach(function (element) {\n args_1.item = element;\n args_1.curData = _this.getItemData(element);\n if (element.querySelector('.' + classNames.checkboxWrapper)) {\n _this.removeElement(element.querySelector('.' + classNames.checkboxWrapper));\n }\n _this.renderCheckbox(args_1);\n if (args_1.item.classList.contains(classNames.selected)) {\n _this.checkInternally(args_1, args_1.item.querySelector('.' + classNames.checkboxWrapper));\n }\n });\n }\n else {\n var liCollection = Array.prototype.slice.call(this.element.querySelectorAll('.' + classNames.itemCheckList));\n liCollection.forEach(function (element) {\n element.classList.remove(classNames.selected);\n element.firstElementChild.classList.remove(classNames.checkbox);\n _this.removeElement(element.querySelector('.' + classNames.checkboxWrapper));\n });\n if (this.selectedItems) {\n this.selectedItems.item.classList.add(classNames.selected);\n }\n }\n };\n ListView.prototype.clickHandler = function (e) {\n var target = e.target;\n var classList = target.classList;\n if (classList.contains(classNames.backIcon) || classList.contains(classNames.headerText)) {\n if (this.showCheckBox && this.curDSLevel[this.curDSLevel.length - 1]) {\n this.uncheckAllItems();\n }\n this.back();\n }\n else {\n var li = closest(target.parentNode, '.' + classNames.listItem);\n if (li === null) {\n li = target;\n }\n this.removeFocus();\n if (this.enable && this.showCheckBox && this.isValidLI(li)) {\n if (e.target.classList.contains(classNames.checkboxIcon)) {\n li.classList.add(classNames.focused);\n if (isNullOrUndefined(li.querySelector('.' + classNames.checked))) {\n var args = {\n curData: undefined, dataSource: undefined, fields: undefined, options: undefined,\n text: undefined, item: li\n };\n this.checkInternally(args, args.item.querySelector('.' + classNames.checkboxWrapper));\n }\n else {\n this.uncheckItem(li);\n li.classList.add(classNames.focused);\n }\n if (e) {\n var eventArgs = this.selectEventData(li, e);\n var checkIcon = li.querySelector('.' + classNames.checkboxIcon);\n merge(eventArgs, { isChecked: checkIcon.classList.contains(classNames.checked) });\n this.trigger('select', eventArgs);\n }\n }\n else if (li.classList.contains(classNames.hasChild)) {\n this.removeHover();\n this.removeSelect();\n this.removeSelect(li);\n this.setSelectLI(li, e);\n li.classList.remove(classNames.selected);\n }\n else {\n this.setCheckboxLI(li, e);\n }\n }\n else {\n this.setSelectLI(li, e);\n }\n }\n };\n ListView.prototype.removeElement = function (element) {\n return element && element.parentNode && element.parentNode.removeChild(element);\n };\n ListView.prototype.hoverHandler = function (e) {\n var curLi = closest(e.target.parentNode, '.' + classNames.listItem);\n this.setHoverLI(curLi);\n };\n ListView.prototype.leaveHandler = function (e) {\n this.removeHover();\n };\n ;\n ListView.prototype.homeKeyHandler = function (e, end) {\n if (Object.keys(this.dataSource).length && this.curUL) {\n var li = this.curUL.querySelectorAll('.' + classNames.listItem);\n var focusedElement = this.curUL.querySelector('.' + classNames.focused) ||\n this.curUL.querySelector('.' + classNames.selected);\n if (focusedElement) {\n focusedElement.classList.remove(classNames.focused);\n if (!this.showCheckBox) {\n focusedElement.classList.remove(classNames.selected);\n }\n }\n var index = !end ? 0 : li.length - 1;\n if (li[index].classList.contains(classNames.hasChild) || this.showCheckBox) {\n li[index].classList.add(classNames.focused);\n }\n else {\n this.setSelectLI(li[index], e);\n }\n }\n };\n ListView.prototype.onArrowKeyDown = function (e, prev) {\n var siblingLI;\n var li;\n var hasChild = !isNullOrUndefined(this.curUL.querySelector('.' + classNames.hasChild)) ? true : false;\n if (hasChild || this.showCheckBox) {\n li = this.curUL.querySelector('.' + classNames.focused) || this.curUL.querySelector('.' + classNames.selected);\n siblingLI = ListBase.getSiblingLI(this.curUL.querySelectorAll('.' + classNames.listItem), li, prev);\n if (!isNullOrUndefined(siblingLI)) {\n if (li) {\n li.classList.remove(classNames.focused);\n if (!this.showCheckBox) {\n li.classList.remove(classNames.selected);\n }\n }\n if (siblingLI.classList.contains(classNames.hasChild) || this.showCheckBox) {\n siblingLI.classList.add(classNames.focused);\n }\n else {\n this.setSelectLI(siblingLI, e);\n }\n }\n }\n else {\n li = this.curUL.querySelector('.' + classNames.selected);\n siblingLI = ListBase.getSiblingLI(this.curUL.querySelectorAll('.' + classNames.listItem), li, prev);\n this.setSelectLI(siblingLI, e);\n }\n return siblingLI;\n };\n ListView.prototype.arrowKeyHandler = function (e, prev) {\n var _this = this;\n if (Object.keys(this.dataSource).length && this.curUL) {\n var siblingLI = this.onArrowKeyDown(e, prev);\n var elementTop = this.element.getBoundingClientRect().top;\n var elementHeight = this.element.getBoundingClientRect().height;\n var firstItemBounds = this.curUL.querySelector('.' + classNames.listItem).getBoundingClientRect();\n var heightDiff = void 0;\n var groupItemBounds = void 0;\n if (this.fields.groupBy) {\n groupItemBounds = this.curUL.querySelector('.' + classNames.groupListItem).getBoundingClientRect();\n }\n if (siblingLI) {\n var siblingTop = siblingLI.getBoundingClientRect().top;\n var siblingHeight = siblingLI.getBoundingClientRect().height;\n if (!prev) {\n var height = this.isWindow ? window.innerHeight : elementHeight;\n heightDiff = this.isWindow ? (siblingTop + siblingHeight) :\n ((siblingTop - elementTop) + siblingHeight);\n if (heightDiff > height) {\n this.isWindow ? window.scrollTo(0, pageYOffset + (heightDiff - height)) :\n this.element.scrollTo(0, this.element.scrollTop + (heightDiff - height));\n }\n }\n else {\n heightDiff = this.isWindow ? siblingTop : (siblingTop - elementTop);\n if (heightDiff < 0) {\n this.isWindow ? window.scrollTo(0, pageYOffset + heightDiff) :\n this.element.scrollTo(0, this.element.scrollTop + heightDiff);\n }\n }\n }\n else if (this.enableVirtualization && prev && this.virtualizationModule.uiFirstIndex) {\n this.onUIScrolled = function () {\n _this.onArrowKeyDown(e, prev);\n _this.onUIScrolled = undefined;\n };\n heightDiff = this.virtualizationModule.listItemHeight;\n this.isWindow ? window.scrollTo(0, pageYOffset - heightDiff) :\n this.element.scrollTo(0, this.element.scrollTop - heightDiff);\n }\n else if (prev) {\n if (this.showHeader && this.headerEle) {\n var topHeight = groupItemBounds ? groupItemBounds.top : firstItemBounds.top;\n var headerBounds = this.headerEle.getBoundingClientRect();\n heightDiff = headerBounds.top < 0 ? (headerBounds.height - topHeight) : 0;\n this.isWindow ? window.scrollTo(0, pageYOffset - heightDiff)\n : this.element.scrollTo(0, 0);\n }\n else if (this.fields.groupBy) {\n heightDiff = this.isWindow ? (groupItemBounds.top < 0 ? groupItemBounds.top : 0) :\n (elementTop - firstItemBounds.top) + groupItemBounds.height;\n this.isWindow ? window.scrollTo(0, pageYOffset + heightDiff) :\n this.element.scrollTo(0, this.element.scrollTop - heightDiff);\n }\n }\n }\n };\n ListView.prototype.enterKeyHandler = function (e) {\n if (Object.keys(this.dataSource).length && this.curUL) {\n var hasChild = !isNullOrUndefined(this.curUL.querySelector('.' + classNames.hasChild)) ? true : false;\n var li = this.curUL.querySelector('.' + classNames.focused);\n if (hasChild && li) {\n li.classList.remove(classNames.focused);\n if (this.showCheckBox) {\n this.removeSelect();\n this.removeSelect(li);\n this.removeHover();\n }\n this.setSelectLI(li, e);\n }\n }\n };\n ListView.prototype.spaceKeyHandler = function (e) {\n if (this.enable && this.showCheckBox && Object.keys(this.dataSource).length && this.curUL) {\n var li = this.curUL.querySelector('.' + classNames.focused);\n if (!isNullOrUndefined(li) && isNullOrUndefined(li.querySelector('.' + classNames.checked))) {\n var args = {\n curData: undefined, dataSource: undefined, fields: undefined, options: undefined,\n text: undefined, item: li\n };\n this.checkInternally(args, args.item.querySelector('.' + classNames.checkboxWrapper));\n }\n else {\n this.uncheckItem(li);\n }\n }\n };\n ListView.prototype.keyActionHandler = function (e) {\n e.preventDefault();\n switch (e.keyCode) {\n case 36:\n this.homeKeyHandler(e);\n break;\n case 35:\n this.homeKeyHandler(e, true);\n break;\n case 40:\n this.arrowKeyHandler(e);\n break;\n case 38:\n this.arrowKeyHandler(e, true);\n break;\n case 13:\n this.enterKeyHandler(e);\n break;\n case 8:\n if (this.showCheckBox && this.curDSLevel[this.curDSLevel.length - 1]) {\n this.uncheckAllItems();\n }\n this.back();\n break;\n case 9:\n this.tabFocus(e);\n break;\n case 32:\n this.spaceKeyHandler(e);\n break;\n }\n };\n ListView.prototype.swipeActionHandler = function (e) {\n if (e.swipeDirection === 'Right') {\n if (this.showCheckBox && this.curDSLevel[this.curDSLevel.length - 1]) {\n this.uncheckAllItems();\n }\n this.back();\n }\n };\n ListView.prototype.focusout = function () {\n if (Object.keys(this.dataSource).length && this.curUL) {\n var focusedElement = this.curUL.querySelector('.' + classNames.focused);\n var activeElement = this.curUL.querySelector('[aria-selected = true]');\n if (focusedElement && !this.showCheckBox) {\n focusedElement.classList.remove(classNames.focused);\n if (activeElement) {\n activeElement.classList.add(classNames.selected);\n }\n }\n }\n };\n ListView.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'keydown', this.keyActionHandler, this);\n EventHandler.add(this.element, 'click', this.clickHandler, this);\n if (!this.enableVirtualization) {\n EventHandler.add(this.element, 'mouseover', this.hoverHandler, this);\n EventHandler.add(this.element, 'mouseout', this.leaveHandler, this);\n }\n EventHandler.add(this.element, 'focusout', this.focusout, this);\n this.touchModule = new Touch(this.element, { swipe: this.swipeActionHandler.bind(this) });\n };\n ListView.prototype.unWireEvents = function () {\n EventHandler.remove(this.element, 'click', this.clickHandler);\n if (!this.enableVirtualization) {\n EventHandler.remove(this.element, 'mouseover', this.hoverHandler);\n EventHandler.remove(this.element, 'mouseout', this.leaveHandler);\n }\n EventHandler.remove(this.element, 'mouseover', this.hoverHandler);\n EventHandler.remove(this.element, 'mouseout', this.leaveHandler);\n this.touchModule.destroy();\n };\n ListView.prototype.tabFocus = function (e) {\n if (Object.keys(this.dataSource).length && this.curUL) {\n var selectedList = this.curUL.querySelector('.' + classNames.selected);\n if ((!selectedList && this.curUL) || this.showCheckBox) {\n var li = this.curUL.querySelector('.' + classNames.listItem);\n if (li.classList.contains(classNames.hasChild) || this.showCheckBox) {\n var focusedElement = this.curUL.querySelector('.' + classNames.focused);\n if (isNullOrUndefined(focusedElement)) {\n li.classList.add(classNames.focused);\n }\n }\n else {\n this.setSelectLI(li, e);\n }\n }\n }\n };\n ListView.prototype.removeFocus = function () {\n var focusedLI = this.element.querySelectorAll('.' + classNames.focused);\n for (var _i = 0, focusedLI_1 = focusedLI; _i < focusedLI_1.length; _i++) {\n var ele = focusedLI_1[_i];\n ele.classList.remove(classNames.focused);\n }\n };\n ListView.prototype.removeHover = function () {\n var hoverLI = this.element.querySelector('.' + classNames.hover);\n if (hoverLI) {\n hoverLI.classList.remove(classNames.hover);\n }\n };\n ListView.prototype.removeSelect = function (li) {\n if (isNullOrUndefined(li)) {\n var selectedLI = this.element.querySelectorAll('.' + classNames.selected);\n for (var _i = 0, selectedLI_1 = selectedLI; _i < selectedLI_1.length; _i++) {\n var ele = selectedLI_1[_i];\n if (this.showCheckBox && ele.querySelector('.' + classNames.checked)) {\n continue;\n }\n else {\n ele.setAttribute('aria-selected', 'false');\n ele.classList.remove(classNames.selected);\n }\n }\n }\n else {\n li.classList.remove(classNames.selected);\n li.setAttribute('aria-selected', 'false');\n }\n };\n ListView.prototype.isValidLI = function (li) {\n return (li && li.classList.contains(classNames.listItem)\n && !li.classList.contains(classNames.groupListItem)\n && !li.classList.contains(classNames.disable));\n };\n ListView.prototype.setCheckboxLI = function (li, e) {\n if (this.isValidLI(li) && this.enable && this.showCheckBox) {\n if (this.curUL.querySelector('.' + classNames.focused)) {\n this.curUL.querySelector('.' + classNames.focused).classList.remove(classNames.focused);\n }\n li.classList.add(classNames.focused);\n var checkboxElement = li.querySelector('.' + classNames.checkboxWrapper);\n var checkIcon = checkboxElement.querySelector('.' + classNames.checkboxIcon + '.' + classNames.icon);\n this.removeHover();\n if (!checkIcon.classList.contains(classNames.checked)) {\n checkIcon.classList.add(classNames.checked);\n li.classList.add(classNames.selected);\n li.setAttribute('aria-selected', 'true');\n }\n else {\n checkIcon.classList.remove(classNames.checked);\n li.classList.remove(classNames.selected);\n li.setAttribute('aria-selected', 'false');\n }\n checkboxElement.setAttribute('aria-checked', checkIcon.classList.contains(classNames.checked) ?\n 'true' : 'false');\n if (e) {\n var eventArgs = this.selectEventData(li, e);\n merge(eventArgs, { isChecked: checkIcon.classList.contains(classNames.checked) });\n if (this.enableVirtualization) {\n this.virtualizationModule.setCheckboxLI(li, e);\n }\n this.trigger('select', eventArgs);\n }\n this.setSelectedItemData(li);\n this.renderSubList(li);\n }\n };\n ListView.prototype.selectEventData = function (li, e) {\n var data = this.getItemData(li);\n var fieldData = getFieldValues(data, this.listBaseOption.fields);\n var selectedItem;\n try {\n if (data && typeof this.dataSource[0] === 'string' ||\n typeof this.dataSource[0] === 'number') {\n selectedItem = { item: li, text: li.innerText.trim(), data: this.dataSource };\n }\n else {\n selectedItem = { item: li, text: fieldData[this.listBaseOption.fields.text], data: data };\n }\n // tslint:disable-next-line\n }\n catch (e) { }\n var eventArgs = {};\n merge(eventArgs, selectedItem);\n if (e) {\n merge(eventArgs, { isInteracted: true, event: e, index: Array.prototype.indexOf.call(this.curUL.children, li) });\n }\n return eventArgs;\n };\n ListView.prototype.setSelectedItemData = function (li) {\n var data = this.getItemData(li);\n var fieldData = getFieldValues(data, this.listBaseOption.fields);\n try {\n if (data && ((typeof this.dataSource[0] === 'string') ||\n (typeof this.dataSource[0] === 'number'))) {\n this.selectedItems = {\n item: li,\n text: li.innerText.trim(),\n data: this.dataSource\n };\n }\n else {\n this.selectedItems = {\n item: li,\n text: fieldData[this.listBaseOption.fields.text],\n data: data\n };\n }\n // tslint:disable-next-line\n }\n catch (e) { }\n };\n ListView.prototype.setSelectLI = function (li, e) {\n if (this.isValidLI(li) && !li.classList.contains(classNames.selected) && this.enable) {\n if (!this.showCheckBox) {\n this.removeSelect();\n }\n li.classList.add(classNames.selected);\n li.setAttribute('aria-selected', 'true');\n this.removeHover();\n this.setSelectedItemData(li);\n if (this.enableVirtualization) {\n this.virtualizationModule.setSelectLI(li, e);\n }\n var eventArgs = this.selectEventData(li, e);\n this.trigger('select', eventArgs);\n this.selectedLI = li;\n this.renderSubList(li);\n }\n };\n ListView.prototype.setHoverLI = function (li) {\n if (this.isValidLI(li) && !li.classList.contains(classNames.hover) && this.enable) {\n var lastLi = this.element.querySelectorAll('.' + classNames.hover);\n if (lastLi && lastLi.length) {\n removeClass(lastLi, classNames.hover);\n }\n if (!li.classList.contains(classNames.selected) || this.showCheckBox) {\n li.classList.add(classNames.hover);\n }\n }\n };\n ListView.prototype.hoverSiblingLI = function (prev) {\n var lastLi = this.curUL.querySelector('.' + classNames.hover);\n var siblingLI;\n if (!lastLi) {\n lastLi = this.curUL.querySelector('.' + classNames.selected);\n }\n if (lastLi) {\n siblingLI = ListBase.getSiblingLI(this.curUL.querySelectorAll('.' + classNames.listItem), lastLi, prev);\n }\n else {\n if (prev) {\n var curLIs = this.curUL.querySelectorAll('.' + classNames.listItem);\n siblingLI = curLIs[curLIs.length - 1];\n }\n else {\n siblingLI = this.curUL.querySelector('.' + classNames.listItem);\n }\n }\n this.setHoverLI(siblingLI);\n };\n //Data Source Related Functions\n ListView.prototype.getSubDS = function () {\n var levelKeys = this.curDSLevel;\n if (levelKeys.length) {\n var ds = this.localData;\n for (var _i = 0, levelKeys_1 = levelKeys; _i < levelKeys_1.length; _i++) {\n var key = levelKeys_1[_i];\n var field = {};\n field[this.fields.id] = key;\n this.curDSJSON = this.findItemFromDS(ds, field);\n var fieldData = getFieldValues(this.curDSJSON, this.listBaseOption.fields);\n ds = this.curDSJSON ? fieldData[this.fields.child] : ds;\n }\n return ds;\n }\n return this.localData;\n };\n ListView.prototype.getItemData = function (li) {\n var fields = this.getElementUID(li);\n var curDS;\n if (isNullOrUndefined(this.curUL.querySelector('.' + classNames.hasChild)) && this.fields.groupBy) {\n curDS = this.curViewDS;\n }\n else {\n curDS = this.dataSource;\n }\n return this.findItemFromDS(curDS, fields);\n };\n ListView.prototype.findItemFromDS = function (dataSource, fields, parent) {\n var _this = this;\n var resultJSON;\n if (dataSource && dataSource.length && fields) {\n dataSource.some(function (data) {\n var fieldData = getFieldValues(data, _this.listBaseOption.fields);\n //(!(fid) || id === fid) && (!(ftext) || text === ftext) && (!!fid || !!ftext)\n if ((fields[_this.fields.id] || fields[_this.fields.text]) &&\n (!fields[_this.fields.id] || (!isNullOrUndefined(fieldData[_this.fields.id]) &&\n fieldData[_this.fields.id].toString()) === fields[_this.fields.id].toString()) &&\n (!fields[_this.fields.text] || fieldData[_this.fields.text] === fields[_this.fields.text])) {\n resultJSON = (parent ? dataSource : data);\n }\n else if (typeof data !== 'object' && dataSource.indexOf(data) !== -1) {\n resultJSON = (parent ? dataSource : data);\n }\n else if (!isNullOrUndefined(fields[_this.fields.id]) && isNullOrUndefined(fieldData[_this.fields.id])) {\n var li = _this.element.querySelector('[data-uid=\"'\n + fields[_this.fields.id] + '\"]');\n if (li && li.innerText.trim() === fieldData[_this.fields.text]) {\n resultJSON = data;\n }\n }\n else if (fieldData.hasOwnProperty(_this.fields.child) && fieldData[_this.fields.child].length) {\n resultJSON = _this.findItemFromDS(fieldData[_this.fields.child], fields, parent);\n }\n return !!resultJSON;\n });\n }\n else {\n resultJSON = dataSource;\n }\n return resultJSON;\n };\n ListView.prototype.getQuery = function () {\n var columns = [];\n var query = (this.query ? this.query : new Query());\n if (!this.query) {\n for (var _i = 0, _a = Object.keys(this.fields.properties); _i < _a.length; _i++) {\n var column = _a[_i];\n if (column !== 'tableName' && !!(this.fields[column]) &&\n this.fields[column] !==\n ListBase.defaultMappedFields[column]\n && columns.indexOf(this.fields[column]) === -1) {\n columns.push(this.fields[column]);\n }\n }\n query.select(columns);\n if (this.fields.properties.hasOwnProperty('tableName')) {\n query.from(this.fields.tableName);\n }\n }\n return query;\n };\n ListView.prototype.setViewDataSource = function (dataSource) {\n if (dataSource === void 0) { dataSource = this.localData; }\n if (dataSource && this.fields.groupBy) {\n this.curViewDS = ListBase.groupDataSource(dataSource, this.fields, this.sortOrder);\n }\n else if (dataSource && this.sortOrder !== 'None') {\n this.curViewDS = ListBase.getDataSource(dataSource, ListBase.addSorting(this.sortOrder, this.fields.sortBy));\n }\n else {\n this.curViewDS = dataSource;\n }\n };\n ListView.prototype.isInAnimation = function () {\n return this.curUL.classList.contains('.e-animate');\n };\n ListView.prototype.setLocalData = function () {\n var _this = this;\n this.trigger('actionBegin');\n if (this.dataSource instanceof DataManager) {\n this.dataSource.executeQuery(this.getQuery()).then(function (e) {\n if (_this.isDestroyed) {\n return;\n }\n _this.localData = e.result;\n _this.renderList();\n _this.trigger('actionComplete', e);\n }).catch(function (e) {\n if (_this.isDestroyed) {\n return;\n }\n _this.trigger('actionFailure', e);\n });\n }\n else if (!this.dataSource || !this.dataSource.length) {\n var ul = this.element.querySelector('ul');\n if (ul) {\n remove(ul);\n this.setProperties({ dataSource: ListBase.createJsonFromElement(ul) }, true);\n this.localData = this.dataSource;\n this.renderList();\n this.trigger('actionComplete', { data: this.localData });\n }\n }\n else {\n this.localData = this.dataSource;\n this.renderList();\n this.trigger('actionComplete', { data: this.localData });\n }\n };\n ListView.prototype.reRender = function () {\n this.element.innerHTML = '';\n this.headerEle = this.ulElement = this.liCollection = undefined;\n this.setLocalData();\n this.header();\n };\n ListView.prototype.resetCurrentList = function () {\n this.setViewDataSource(this.curViewDS);\n this.contentContainer.innerHTML = '';\n this.createList();\n this.renderIntoDom(this.curUL);\n };\n ListView.prototype.createList = function () {\n this.currentLiElements = [];\n this.isNestedList = false;\n this.ulElement = this.curUL = ListBase.createList(this.curViewDS, this.listBaseOption);\n this.liCollection = this.curUL.querySelectorAll('.' + classNames.listItem);\n };\n ListView.prototype.renderSubList = function (li) {\n var uID = li.getAttribute('data-uid');\n if (li.classList.contains(classNames.hasChild) && uID) {\n var ul = closest(li.parentNode, '.' + classNames.parentItem);\n var ele = this.element.querySelector('[pid=\\'' + uID + '\\']');\n this.curDSLevel.push(uID);\n this.setViewDataSource(this.getSubDS());\n if (!ele) {\n var data = this.curViewDS;\n ele = ListBase.createListFromJson(data, this.listBaseOption, this.curDSLevel.length);\n ele.setAttribute('pID', uID);\n ele.style.display = 'none';\n this.renderIntoDom(ele);\n }\n this.switchView(ul, ele);\n this.liCollection = this.curUL.querySelectorAll('.' + classNames.listItem);\n if (this.selectedItems) {\n var fieldData = getFieldValues(this.selectedItems.data, this.listBaseOption.fields);\n this.header((fieldData[this.listBaseOption.fields.text]), true);\n }\n this.selectedLI = undefined;\n }\n };\n ListView.prototype.renderIntoDom = function (ele) {\n this.contentContainer.appendChild(ele);\n };\n ListView.prototype.renderList = function (data) {\n this.setViewDataSource(data);\n if (this.enableVirtualization && Object.keys(this.dataSource).length) {\n if (this.template || this.groupTemplate) {\n this.listBaseOption.template = null;\n this.listBaseOption.groupTemplate = null;\n this.listBaseOption.itemCreated = this.virtualizationModule.createUIItem.bind(this.virtualizationModule);\n }\n this.virtualizationModule.uiVirtualization();\n }\n else {\n this.createList();\n this.contentContainer = createElement('div', { className: classNames.content });\n this.element.appendChild(this.contentContainer);\n this.renderIntoDom(this.ulElement);\n }\n };\n ListView.prototype.getElementUID = function (obj) {\n var fields = {};\n if (obj instanceof Element) {\n fields[this.fields.id] = obj.getAttribute('data-uid');\n }\n else {\n fields = obj;\n }\n return fields;\n };\n /**\n * It is used to Initialize the control rendering.\n */\n ListView.prototype.render = function () {\n this.element.classList.add(classNames.root);\n attributes(this.element, { role: 'list', tabindex: '0' });\n this.setCSSClass();\n this.setEnableRTL();\n this.setEnable();\n this.setSize();\n this.wireEvents();\n this.header();\n this.setLocalData();\n this.setHTMLAttribute();\n this.rippleFn = rippleEffect(this.element, {\n selector: '.' + classNames.listItem\n });\n };\n /**\n * It is used to destroy the ListView component.\n */\n ListView.prototype.destroy = function () {\n this.unWireEvents();\n var classAr = [classNames.root, this.cssClass, classNames.disable, 'e-rtl',\n 'e-has-header', 'e-control'];\n removeClass([this.element], classAr);\n this.rippleFn();\n this.element.removeAttribute('role');\n this.element.removeAttribute('tabindex');\n this.element.innerHTML = '';\n this.curUL = this.ulElement = this.liCollection = this.headerEle = undefined;\n _super.prototype.destroy.call(this);\n };\n /**\n * It helps to switch back from navigated sub list.\n */\n ListView.prototype.back = function () {\n var pID = this.curDSLevel[this.curDSLevel.length - 1];\n if (pID === undefined || this.isInAnimation()) {\n return;\n }\n this.curDSLevel.pop();\n this.setViewDataSource(this.getSubDS());\n var toUL = this.element.querySelector('[data-uid=\\'' + pID + '\\']');\n var fromUL = this.curUL;\n if (!toUL) {\n this.createList();\n this.renderIntoDom(this.ulElement);\n toUL = this.curUL;\n }\n else {\n toUL = toUL.parentElement;\n }\n var fieldData = getFieldValues(this.curDSJSON, this.listBaseOption.fields);\n var text = fieldData[this.fields.text];\n this.switchView(fromUL, toUL, true);\n this.removeFocus();\n var li = this.element.querySelector('[data-uid=\\'' + pID + '\\']');\n li.classList.add(classNames.focused);\n if (this.showCheckBox && li.querySelector('.' + classNames.checkboxIcon).classList.contains(classNames.checked)) {\n li.setAttribute('aria-selected', 'true');\n }\n else {\n li.classList.remove(classNames.selected);\n li.setAttribute('aria-selected', 'false');\n }\n this.liCollection = this.curUL.querySelectorAll('.' + classNames.listItem);\n this.header((this.curDSLevel.length ? text : this.headerTitle), (this.curDSLevel.length ? true : false));\n };\n /**\n * It is used to select the list item from the ListView.\n * @param {Fields|HTMLElement} obj - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.selectItem = function (obj) {\n if (!isNullOrUndefined(obj)) {\n if (this.enableVirtualization) {\n this.virtualizationModule.selectItem(obj);\n }\n else if (this.showCheckBox) {\n this.setCheckboxLI(this.getLiFromObjOrElement(obj));\n }\n else {\n this.setSelectLI(this.getLiFromObjOrElement(obj));\n }\n }\n };\n ListView.prototype.getLiFromObjOrElement = function (obj) {\n var li;\n if (!isNullOrUndefined(obj)) {\n if (typeof this.dataSource[0] === 'string' || typeof this.dataSource[0] === 'number') {\n if (obj instanceof Element) {\n var uid = obj.getAttribute('data-uid').toString();\n for (var i = 0; i < this.liCollection.length; i++) {\n if (this.liCollection[i].getAttribute('data-uid').toString() === uid) {\n li = this.liCollection[i];\n break;\n }\n }\n }\n else {\n Array.prototype.some.call(this.curUL.querySelectorAll('.' + classNames.listItem), function (item) {\n if (item.innerText.trim() === obj.toString()) {\n li = item;\n return true;\n }\n else {\n return false;\n }\n });\n }\n }\n else {\n var resultJSON = this.getItemData(obj);\n var fieldData = getFieldValues(resultJSON, this.listBaseOption.fields);\n if (resultJSON) {\n li = this.element.querySelector('[data-uid=\"'\n + fieldData[this.fields.id] + '\"]');\n if (isNullOrUndefined(li)) {\n var curLi = this.element.querySelectorAll('.' + classNames.listItem);\n for (var i = 0; i < curLi.length; i++) {\n if (curLi[i].innerText.trim() === resultJSON.text) {\n li = curLi[i];\n }\n }\n }\n }\n }\n }\n return li;\n };\n /**\n * It is used to select multiple list item from the ListView.\n * @param {Fields[] | HTMLElement[]} obj - We can pass array of elements or array of field Object with ID and Text fields.\n */\n ListView.prototype.selectMultipleItems = function (obj) {\n if (!isNullOrUndefined(obj)) {\n for (var i = 0; i < obj.length; i++) {\n if (!isNullOrUndefined(obj[i])) {\n this.selectItem(obj[i]);\n }\n }\n }\n };\n ListView.prototype.getParentId = function () {\n var parentId = [];\n if (this.isNestedList) {\n for (var i = this.curDSLevel.length - 1; i >= 0; i--) {\n parentId.push(this.curDSLevel[i]);\n }\n }\n return parentId;\n };\n /**\n * It is used to get the currently\n * {@link http://ej2.syncfusion.com/documentation/list-view/api-selectedItem.html?lang=typescript selected}\n * item details from the list items.\n */\n ListView.prototype.getSelectedItems = function () {\n this.selectedId = [];\n if (this.enableVirtualization) {\n return this.virtualizationModule.getSelectedItems();\n }\n else if (this.showCheckBox) {\n var liCollection = this.curUL.getElementsByClassName(classNames.selected);\n var liTextCollection = [];\n var liDataCollection = [];\n this.selectedId = [];\n var dataParent = [];\n for (var i = 0; i < liCollection.length; i++) {\n if (typeof this.dataSource[0] === 'string' || typeof this.dataSource[0] === 'number') {\n liTextCollection.push(liCollection[i].innerText.trim());\n }\n else {\n var tempData = this.getItemData(liCollection[i]);\n var fieldData = getFieldValues(tempData, this.listBaseOption.fields);\n if (this.isNestedList) {\n dataParent.push({ data: tempData, parentId: this.getParentId() });\n }\n else {\n liDataCollection.push(tempData);\n }\n if (fieldData) {\n liTextCollection.push(fieldData[this.listBaseOption.fields.text]);\n this.selectedId.push(fieldData[this.listBaseOption.fields.id]);\n }\n else {\n liTextCollection.push(undefined);\n this.selectedId.push(undefined);\n }\n }\n }\n if (typeof this.dataSource[0] === 'string' || typeof this.dataSource[0] === 'number') {\n return { item: liCollection, data: this.dataSource, text: liTextCollection };\n }\n if (this.isNestedList) {\n return { item: liCollection, data: dataParent, text: liTextCollection };\n }\n else {\n return { item: liCollection, data: liDataCollection, text: liTextCollection };\n }\n }\n else {\n var liElement = this.element.getElementsByClassName(classNames.selected)[0];\n var fieldData = getFieldValues(this.getItemData(liElement), this.listBaseOption.fields);\n if (typeof this.dataSource[0] === 'string' || typeof this.dataSource[0] === 'number') {\n return (!isNullOrUndefined(liElement)) ? {\n item: liElement, data: this.dataSource,\n text: liElement.innerText.trim()\n } : undefined;\n }\n else {\n if (isNullOrUndefined(fieldData) || isNullOrUndefined(liElement)) {\n return undefined;\n }\n else {\n this.selectedId.push(fieldData[this.listBaseOption.fields.id]);\n return {\n text: fieldData[this.listBaseOption.fields.text], item: liElement,\n data: this.getItemData(liElement)\n };\n }\n }\n }\n };\n /**\n * It is used to find out an item details from the current list.\n * @param {Fields|HTMLElement} obj - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.findItem = function (obj) {\n return this.getItemData(obj);\n };\n /**\n * A function that used to enable the disabled list items based on passed element.\n * @param {Fields|HTMLElement} obj - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.enableItem = function (obj) {\n this.setItemState(obj, true);\n if (this.enableVirtualization) {\n this.virtualizationModule.enableItem(obj);\n }\n };\n /**\n * It is used to disable the list items based on passed element.\n * @param {Fields|HTMLElement} obj - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.disableItem = function (obj) {\n this.setItemState(obj, false);\n if (this.enableVirtualization) {\n this.virtualizationModule.disableItem(obj);\n }\n };\n //A function that used to set state of the list item like enable, disable.\n ListView.prototype.setItemState = function (obj, isEnable) {\n var resultJSON = this.getItemData(obj);\n var fieldData = getFieldValues(resultJSON, this.listBaseOption.fields);\n if (resultJSON) {\n var li = this.element.querySelector('[data-uid=\"' + fieldData[this.fields.id] + '\"]');\n if (isEnable) {\n if (li) {\n li.classList.remove(classNames.disable);\n }\n delete resultJSON[this.fields.enabled];\n }\n else if (!isEnable) {\n if (li) {\n li.classList.add(classNames.disable);\n }\n resultJSON[this.fields.enabled] = false;\n }\n }\n };\n /**\n * It is used to show an list item from the ListView.\n * @param {Fields|HTMLElement} obj - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.showItem = function (obj) {\n this.showHideItem(obj, false, '');\n if (this.enableVirtualization) {\n this.virtualizationModule.showItem(obj);\n }\n };\n /**\n * It is used to hide an item from the ListView.\n * @param {Fields|HTMLElement} obj - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.hideItem = function (obj) {\n this.showHideItem(obj, true, 'none');\n if (this.enableVirtualization) {\n this.virtualizationModule.hideItem(obj);\n }\n };\n ListView.prototype.showHideItem = function (obj, isHide, display) {\n var resultJSON = this.getItemData(obj);\n var fieldData = getFieldValues(resultJSON, this.listBaseOption.fields);\n if (resultJSON) {\n var li = this.element.querySelector('[data-uid=\"' + fieldData[this.fields.id] + '\"]');\n if (li) {\n li.style.display = display;\n }\n if (isHide) {\n resultJSON[this.fields.isVisible] = false;\n }\n else {\n delete resultJSON[this.fields.isVisible];\n }\n }\n };\n /**\n * It adds new item to current ListView.\n * To add a new item in the list view, we need to pass ‘data’ as array or object and ‘fields’ as object.\n * For example fields: { text: 'Name', tooltip: 'Name', id:'id'}\n * @param {{[key:string]:Object}[]} data - Array JSON Data that need to add.\n * @param {Fields} fields - Fields as an Object with ID and Text fields.\n */\n ListView.prototype.addItem = function (data, fields) {\n var _this = this;\n if (fields === void 0) { fields = undefined; }\n if (data instanceof Array) {\n if (this.enableVirtualization) {\n this.virtualizationModule.addItem(data, fields);\n }\n else {\n var ds = this.findItemFromDS(this.dataSource, fields);\n var fieldData = getFieldValues(ds, this.listBaseOption.fields);\n var child = fieldData[this.fields.child];\n if (!child) {\n child = [];\n }\n child = child.concat(data);\n if (ds instanceof Array) {\n data.forEach(function (dataSource) {\n _this.dataSource.push(dataSource);\n _this.setViewDataSource(_this.dataSource);\n if (_this.ulElement) {\n var index = _this.curViewDS.indexOf(dataSource);\n _this.addListItem(dataSource, index);\n var curViewDS = _this.curViewDS[index - 1];\n if (curViewDS && curViewDS.isHeader && curViewDS.items.length === 1) {\n _this.addListItem(curViewDS, (index - 1));\n }\n }\n else {\n _this.reRender();\n }\n });\n this.liCollection = this.curUL.querySelectorAll('.' + classNames.listItem);\n }\n else {\n ds[this.fields.child] = child;\n this.reRender();\n }\n }\n }\n };\n ListView.prototype.addListItem = function (dataSource, index) {\n var target = this.getLiFromObjOrElement(this.curViewDS[index + 1]) ||\n this.getLiFromObjOrElement(this.curViewDS[index + 2]) || null;\n var li = ListBase.createListItemFromJson([dataSource], this.listBaseOption);\n this.ulElement.insertBefore(li[0], target);\n };\n /**\n * A function that removes the item from data source based on passed element like fields: { text: 'Name', tooltip: 'Name', id:'id'}\n * @param {Fields|HTMLElement} obj - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.removeItem = function (obj) {\n if (this.enableVirtualization) {\n this.virtualizationModule.removeItem(obj);\n }\n else {\n this.removeItemFromList(obj);\n }\n };\n ListView.prototype.removeItemFromList = function (obj) {\n var fields = obj instanceof Element ? this.getElementUID(obj) : obj;\n var dataSource;\n dataSource = this.findItemFromDS(this.dataSource, fields, true);\n if (dataSource) {\n var data = void 0;\n data = this.findItemFromDS(dataSource, fields);\n var index = this.curViewDS.indexOf(data);\n if (this.fields.groupBy && this.curViewDS[index - 1] &&\n this.curViewDS[index - 1].isHeader &&\n (this.curViewDS[index - 1])\n .items.length === 1) {\n detach(this.getLiFromObjOrElement(this.curViewDS[index - 1]));\n }\n if (this.getLiFromObjOrElement(obj)) {\n detach(this.getLiFromObjOrElement(obj));\n }\n var dsIndex = dataSource.indexOf(data);\n dataSource.splice(dsIndex, 1);\n this.setViewDataSource(this.dataSource);\n this.liCollection = Array.prototype.slice.call(this.element.querySelectorAll('.' + classNames.listItem));\n }\n };\n /**\n * A function that removes multiple item from list view based on given input.\n * @param {Fields[] | HTMLElement[]} obj - We can pass array of elements or array of field Object with ID and Text fields.\n */\n ListView.prototype.removeMultipleItems = function (obj) {\n if (obj.length) {\n for (var i = 0; i < obj.length; i++) {\n if (this.enableVirtualization) {\n this.removeItem(obj[i]);\n }\n else {\n this.removeItemFromList(obj[i]);\n }\n }\n }\n };\n // Module Required function\n ListView.prototype.getModuleName = function () {\n return 'listview';\n };\n ListView.prototype.requiredModules = function () {\n var modules = [];\n if (this.enableVirtualization) {\n modules.push({ args: [this], member: 'virtualization' });\n }\n return modules;\n };\n /**\n * Get the properties to be maintained in the persisted state.\n */\n ListView.prototype.getPersistData = function () {\n return this.addOnPersist(['cssClass', 'enableRtl', 'htmlAttributes',\n 'enable', 'fields', 'animation', 'headerTitle',\n 'sortOrder', 'showIcon', 'height', 'width', 'showCheckBox', 'checkBoxPosition']);\n };\n __decorate([\n Property()\n ], ListView.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], ListView.prototype, \"enableVirtualization\", void 0);\n __decorate([\n Property({})\n ], ListView.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(true)\n ], ListView.prototype, \"enable\", void 0);\n __decorate([\n Property([])\n ], ListView.prototype, \"dataSource\", void 0);\n __decorate([\n Property()\n ], ListView.prototype, \"query\", void 0);\n __decorate([\n Complex(ListBase.defaultMappedFields, FieldSettings)\n ], ListView.prototype, \"fields\", void 0);\n __decorate([\n Property({ effect: 'SlideLeft', duration: 400, easing: 'ease' })\n ], ListView.prototype, \"animation\", void 0);\n __decorate([\n Property('None')\n ], ListView.prototype, \"sortOrder\", void 0);\n __decorate([\n Property(false)\n ], ListView.prototype, \"showIcon\", void 0);\n __decorate([\n Property(false)\n ], ListView.prototype, \"showCheckBox\", void 0);\n __decorate([\n Property('Left')\n ], ListView.prototype, \"checkBoxPosition\", void 0);\n __decorate([\n Property('')\n ], ListView.prototype, \"headerTitle\", void 0);\n __decorate([\n Property(false)\n ], ListView.prototype, \"showHeader\", void 0);\n __decorate([\n Property('')\n ], ListView.prototype, \"height\", void 0);\n __decorate([\n Property('')\n ], ListView.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], ListView.prototype, \"template\", void 0);\n __decorate([\n Property(null)\n ], ListView.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property(null)\n ], ListView.prototype, \"groupTemplate\", void 0);\n __decorate([\n Event()\n ], ListView.prototype, \"select\", void 0);\n __decorate([\n Event()\n ], ListView.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], ListView.prototype, \"actionComplete\", void 0);\n __decorate([\n Event()\n ], ListView.prototype, \"actionFailure\", void 0);\n ListView = __decorate([\n NotifyPropertyChanges\n ], ListView);\n return ListView;\n}(Component));\nexport { ListView };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { EventHandler, Property, Internationalization, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, Animation, Browser } from '@syncfusion/ej2-base';\nimport { cldrData, L10n, Component, getDefaultDateObject, rippleEffect, Event } from '@syncfusion/ej2-base';\nimport { createElement, remove, addClass, removeClass, closest, append, attributes, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, formatUnit, getValue, getUniqueID } from '@syncfusion/ej2-base';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { ListBase, cssClass as ListBaseClasses } from '@syncfusion/ej2-lists';\nvar WRAPPERCLASS = 'e-time-wrapper';\nvar POPUP = 'e-popup';\nvar ERROR = 'e-error';\nvar POPUPDIMENSION = '240px';\nvar DAY = new Date().getDate();\nvar MONTH = new Date().getMonth();\nvar YEAR = new Date().getFullYear();\nvar ROOT = 'e-timepicker';\nvar RTL = 'e-rtl';\nvar CONTENT = 'e-content';\nvar SELECTED = 'e-active';\nvar HOVER = 'e-hover';\nvar NAVIGATION = 'e-navigation';\nvar DISABLED = 'e-disabled';\nvar ICONANIMATION = 'e-icon-anim';\nvar FOCUS = 'e-input-focus';\nvar DEVICE = 'e-device';\nvar LISTCLASS = ListBaseClasses.li;\nvar HALFPOSITION = 2;\nvar ANIMATIONDURATION = 50;\nexport var TimePickerBase;\n(function (TimePickerBase) {\n function createListItems(min, max, globalize, timeFormat, step) {\n var start;\n var end;\n var interval = step * 60000;\n var listItems = [];\n var timeCollections = [];\n start = +(min.setMilliseconds(0));\n end = +(max.setMilliseconds(0));\n while (end >= start) {\n timeCollections.push(start);\n listItems.push(globalize.formatDate(new Date(start), { format: timeFormat, type: 'time' }));\n start += interval;\n }\n var listTag = ListBase.createList(listItems, null, true);\n return { collection: timeCollections, list: listTag };\n }\n TimePickerBase.createListItems = createListItems;\n})(TimePickerBase || (TimePickerBase = {}));\n/**\n * TimePicker is an intuitive interface component which provides an options to select a time value\n * from popup list or to set a desired time value.\n * ```\n * \n * \n * ```\n */\nvar TimePicker = /** @class */ (function (_super) {\n __extends(TimePicker, _super);\n /**\n * Constructor for creating the widget\n */\n function TimePicker(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.liCollections = [];\n _this.timeCollections = [];\n _this.disableItemCollection = [];\n return _this;\n }\n /**\n * Initialize the event handler\n * @private\n */\n TimePicker.prototype.preRender = function () {\n this.keyConfigure = {\n enter: 'enter',\n escape: 'escape',\n end: 'end',\n tab: 'tab',\n home: 'home',\n down: 'downarrow',\n up: 'uparrow',\n left: 'leftarrow',\n right: 'rightarrow',\n open: 'alt+downarrow',\n close: 'alt+uparrow'\n };\n this.cloneElement = this.element.cloneNode(true);\n this.inputElement = this.element;\n this.angularTag = null;\n if (this.element.tagName === 'EJS-TIMEPICKER') {\n this.angularTag = this.element.tagName;\n this.inputElement = createElement('input');\n this.element.appendChild(this.inputElement);\n }\n };\n // element creation\n TimePicker.prototype.render = function () {\n this.initialize();\n this.createInputElement();\n this.setEnable();\n this.validateInterval();\n this.bindEvents();\n this.validateDisable();\n this.setValue(this.getFormattedValue(this.value));\n };\n TimePicker.prototype.validateDisable = function () {\n this.setMinMax(this.initMin, this.initMax);\n this.popupCreation();\n this.popupObj.hide();\n if ((!isNaN(+this.value) && this.value !== null)) {\n if (!this.valueIsDisable(this.value)) {\n //disable value given in value property so reset the date based on current date\n if (this.strictMode) {\n this.resetState();\n }\n this.initValue = null;\n this.initMax = this.getDateObject(this.initMax);\n this.initMin = this.getDateObject(this.initMin);\n this.timeCollections = this.liCollections = [];\n this.setMinMax(this.initMin, this.initMax);\n }\n }\n };\n TimePicker.prototype.validationAttribute = function (target, input) {\n var name = target.getAttribute('name') ? target.getAttribute('name') : target.getAttribute('id');\n input.setAttribute('name', name);\n target.removeAttribute('name');\n var attributes = ['required', 'aria-required', 'form'];\n for (var i = 0; i < attributes.length; i++) {\n if (isNullOrUndefined(target.getAttribute(attributes[i]))) {\n continue;\n }\n var attr = target.getAttribute(attributes[i]);\n input.setAttribute(attributes[i], attr);\n target.removeAttribute(attributes[i]);\n }\n };\n TimePicker.prototype.initialize = function () {\n this.globalize = new Internationalization(this.locale);\n this.defaultCulture = new Internationalization('en');\n // persist the value property.\n this.setProperties({ value: this.checkDateValue(new Date('' + this.value)) }, true);\n this.setProperties({ min: this.checkDateValue(new Date('' + this.min)) }, true);\n this.setProperties({ max: this.checkDateValue(new Date('' + this.max)) }, true);\n if (this.angularTag !== null) {\n this.validationAttribute(this.element, this.inputElement);\n }\n this.checkAttributes(); //check the input element attributes\n var localeText = { placeholder: this.placeholder };\n this.l10n = new L10n('timepicker', localeText, this.locale);\n this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n this.initValue = this.checkDateValue(this.value);\n this.initMin = this.checkDateValue(this.min);\n this.initMax = this.checkDateValue(this.max);\n this.isNavigate = this.isPreventBlur = this.isTextSelected = false;\n this.activeIndex = this.valueWithMinutes = this.prevDate = null;\n if (!isNullOrUndefined(this.element.getAttribute('id'))) {\n if (this.angularTag !== null) {\n this.inputElement.id = this.element.getAttribute('id') + '_input';\n }\n }\n else {\n //for angular case\n this.element.id = getUniqueID('ej2_timepicker');\n if (this.angularTag !== null) {\n attributes(this.inputElement, { 'id': this.element.id + '_input' });\n }\n }\n if (isNullOrUndefined(this.inputElement.getAttribute('name'))) {\n attributes(this.inputElement, { 'name': this.element.id });\n }\n };\n TimePicker.prototype.checkDateValue = function (value) {\n return (!isNullOrUndefined(value) && value instanceof Date && !isNaN(+value)) ? value : null;\n };\n TimePicker.prototype.createInputElement = function () {\n this.inputWrapper = Input.createInput({\n element: this.inputElement,\n floatLabelType: this.floatLabelType,\n properties: {\n readonly: this.readonly,\n placeholder: this.placeholder,\n cssClass: this.cssClass,\n enabled: this.enabled,\n enableRtl: this.enableRtl,\n showClearButton: this.showClearButton,\n },\n buttons: [' e-input-group-icon e-time-icon e-icons']\n });\n this.inputWrapper.container.style.width = this.setWidth(this.width);\n attributes(this.inputElement, {\n 'aria-haspopup': 'true', 'aria-autocomplete': 'list', 'tabindex': '0', 'aria-activedescendant': 'null',\n 'aria-owns': this.element.id + '_options', 'aria-expanded': 'false', 'role': 'combobox', 'autocomplete': 'off',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false', 'aria-disabled': 'false', 'aria-invalid': 'false'\n });\n if (!this.isNullOrEmpty(this.inputStyle)) {\n Input.addAttributes({ 'style': this.inputStyle }, this.inputElement);\n }\n addClass([this.inputWrapper.container], WRAPPERCLASS);\n };\n // destroy function\n TimePicker.prototype.destroy = function () {\n this.hide();\n this.unBindEvents();\n var ariaAttribute = {\n 'aria-haspopup': 'true', 'aria-autocomplete': 'list', 'tabindex': '0', 'aria-activedescendant': 'null',\n 'aria-owns': this.element.id + '_options', 'aria-expanded': 'false', 'role': 'combobox', 'autocomplete': 'off',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false', 'aria-disabled': 'true', 'aria-invalid': 'false'\n };\n if (this.inputElement) {\n Input.removeAttributes(ariaAttribute, this.inputElement);\n if (this.angularTag === null) {\n this.inputWrapper.container.parentElement.appendChild(this.inputElement);\n }\n this.ensureInputAttribute();\n this.enableElement([this.inputElement]);\n this.inputElement.classList.remove('e-input');\n if (isNullOrUndefined(this.cloneElement.getAttribute('disabled'))) {\n Input.setEnabled(true, this.inputElement, this.floatLabelType);\n }\n }\n if (this.inputWrapper.container) {\n remove(this.inputWrapper.container);\n }\n this.inputWrapper = this.popupWrapper = this.cloneElement = undefined;\n this.liCollections = this.timeCollections = this.disableItemCollection = [];\n if (!isNullOrUndefined(this.rippleFn)) {\n this.rippleFn();\n }\n _super.prototype.destroy.call(this);\n var form = closest(this.element, 'form');\n if (form) {\n EventHandler.remove(form, 'reset', this.formResetHandler.bind(this));\n }\n };\n TimePicker.prototype.ensureInputAttribute = function () {\n for (var i = 0; i < this.inputElement.attributes.length; i++) {\n var prop = this.inputElement.attributes[i].name;\n if (isNullOrUndefined(this.cloneElement.getAttribute(prop))) {\n if (prop.toLowerCase() === 'value' || isNullOrUndefined(this.cloneElement.getAttribute('value'))) {\n this.inputElement.value = '';\n }\n this.inputElement.removeAttribute(prop);\n }\n }\n };\n //popup creation\n TimePicker.prototype.popupCreation = function () {\n this.popupWrapper = createElement('div', {\n className: ROOT + ' ' + POPUP,\n attrs: { 'id': this.element.id + '_popup', 'style': 'visibility:hidden' }\n });\n if (!isNullOrUndefined(this.cssClass)) {\n this.popupWrapper.classList.add(this.cssClass);\n }\n if (!isNullOrUndefined(this.step) && this.step > 0) {\n this.generateList();\n append([this.listWrapper], this.popupWrapper);\n }\n document.body.appendChild(this.popupWrapper);\n this.addSelection();\n this.renderPopup();\n this.setScrollPosition();\n };\n TimePicker.prototype.getPopupHeight = function () {\n var height = parseInt(POPUPDIMENSION, 10);\n var popupHeight = this.popupWrapper.getBoundingClientRect().height;\n return popupHeight > height ? height : popupHeight;\n };\n TimePicker.prototype.generateList = function () {\n this.createListItems();\n this.wireListEvents();\n var rippleModel = { duration: 300, selector: '.' + LISTCLASS };\n this.rippleFn = rippleEffect(this.listWrapper, rippleModel);\n this.liCollections = this.listWrapper.querySelectorAll('.' + LISTCLASS);\n };\n TimePicker.prototype.popupCalculation = function () {\n var left = 0;\n if (Browser.isDevice) {\n var firstItem = this.isEmptyList() ? this.listTag : this.liCollections[0];\n left = -(parseInt(getComputedStyle(firstItem).textIndent, 10) -\n (this.enableRtl ? parseInt(getComputedStyle(this.inputElement).paddingRight, 10) :\n parseInt(getComputedStyle(this.inputElement).paddingLeft, 10)));\n }\n return left;\n };\n TimePicker.prototype.isEmptyList = function () {\n return !isNullOrUndefined(this.liCollections) && this.liCollections.length === 0 ||\n isNullOrUndefined(this.liCollections);\n };\n TimePicker.prototype.renderPopup = function () {\n var _this = this;\n this.containerStyle = this.inputWrapper.container.getBoundingClientRect();\n var offset = Browser.isDevice ? this.setPopupPosition() : 2;\n this.popupObj = new Popup(this.popupWrapper, {\n width: this.setPopupWidth(this.width),\n zIndex: this.zIndex,\n targetType: 'relative',\n collision: { X: 'flip', Y: 'flip' },\n relateTo: this.inputWrapper.container,\n position: { X: 'left', Y: 'bottom' },\n enableRtl: this.enableRtl,\n offsetY: offset,\n offsetX: this.popupCalculation(),\n open: function () {\n _this.popupWrapper.style.visibility = 'visible';\n addClass([_this.inputWrapper.buttons[0]], SELECTED);\n }, close: function () {\n removeClass([_this.inputWrapper.buttons[0]], SELECTED);\n _this.unWireListEvents();\n _this.inputElement.setAttribute('aria-activedescendant', 'null');\n remove(_this.popupObj.element);\n _this.popupObj.destroy();\n _this.popupWrapper.innerHTML = '';\n _this.listWrapper = _this.popupWrapper = _this.listTag = undefined;\n }\n });\n if (!Browser.isDevice) {\n this.popupObj.collision = { X: 'none', Y: 'flip' };\n }\n this.popupObj.element.style.maxHeight = POPUPDIMENSION;\n };\n //util function\n TimePicker.prototype.getFormattedValue = function (value) {\n if (isNullOrUndefined(this.checkDateValue(value))) {\n return null;\n }\n else {\n return this.globalize.formatDate(value, { skeleton: 'medium', type: 'time' });\n }\n };\n TimePicker.prototype.getDateObject = function (text) {\n if (!this.isNullOrEmpty(text)) {\n var dateValue = this.createDateObj(text);\n var value = !this.isNullOrEmpty(this.initValue);\n if (this.checkDateValue(dateValue)) {\n var date = value ? this.initValue.getDate() : DAY;\n var month = value ? this.initValue.getMonth() : MONTH;\n var year = value ? this.initValue.getFullYear() : YEAR;\n return new Date(year, month, date, dateValue.getHours(), dateValue.getMinutes(), dateValue.getSeconds());\n }\n }\n return null;\n };\n TimePicker.prototype.checkErrorState = function (val) {\n var value = this.getDateObject(val);\n if (this.validateState(value)) {\n removeClass([this.inputWrapper.container], ERROR);\n attributes(this.inputElement, { 'aria-invalid': 'false' });\n }\n else {\n addClass([this.inputWrapper.container], ERROR);\n attributes(this.inputElement, { 'aria-invalid': 'true' });\n }\n };\n TimePicker.prototype.validateInterval = function () {\n if (!isNullOrUndefined(this.step) && this.step > 0) {\n this.enableElement([this.inputWrapper.buttons[0]]);\n }\n else {\n this.disableTimeIcon();\n }\n };\n TimePicker.prototype.disableTimeIcon = function () {\n this.disableElement([this.inputWrapper.buttons[0]]);\n this.hide();\n };\n TimePicker.prototype.disableElement = function (element) {\n addClass(element, DISABLED);\n };\n TimePicker.prototype.enableElement = function (element) {\n removeClass(element, DISABLED);\n };\n TimePicker.prototype.selectInputText = function () {\n this.inputElement.setSelectionRange(0, (this.inputElement).value.length);\n };\n TimePicker.prototype.getMeridianText = function () {\n var meridian;\n if (this.locale === 'en' || this.locale === 'en-US') {\n meridian = getValue('dayPeriods.format.wide', getDefaultDateObject());\n }\n else {\n meridian = getValue('main.' + '' + this.locale + '.dates.calendars.gregorian.dayPeriods.format.abbreviated', cldrData);\n }\n return meridian;\n };\n TimePicker.prototype.getCursorSelection = function () {\n var input = (this.inputElement);\n var start = 0;\n var end = 0;\n if (!isNaN(input.selectionStart)) {\n start = input.selectionStart;\n end = input.selectionEnd;\n }\n return { start: Math.abs(start), end: Math.abs(end) };\n };\n TimePicker.prototype.getActiveElement = function () {\n if (!isNullOrUndefined(this.popupWrapper)) {\n return this.popupWrapper.querySelectorAll('.' + SELECTED);\n }\n else {\n return null;\n }\n };\n TimePicker.prototype.isNullOrEmpty = function (value) {\n if (isNullOrUndefined(value) || (typeof value === 'string' && value.trim() === '')) {\n return true;\n }\n else {\n return false;\n }\n };\n TimePicker.prototype.setWidth = function (width) {\n if (typeof width === 'number') {\n width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n width = (width.match(/px|%|em/)) ? width : formatUnit(width);\n }\n else {\n width = '100%';\n }\n return width;\n };\n TimePicker.prototype.setPopupWidth = function (width) {\n width = this.setWidth(width);\n if (width.indexOf('%') > -1) {\n var inputWidth = this.containerStyle.width * parseFloat(width) / 100;\n width = inputWidth.toString() + 'px';\n }\n if (Browser.isDevice) {\n var firstItem = this.isEmptyList() ? this.listTag : this.liCollections[0];\n width = (parseInt(width, 10) + (parseInt(getComputedStyle(firstItem).textIndent, 10) -\n parseInt(getComputedStyle(this.inputElement).textIndent, 10) +\n parseInt(getComputedStyle(this.inputElement.parentElement).borderLeftWidth, 10)) * 2) + 'px';\n }\n return width;\n };\n TimePicker.prototype.setScrollPosition = function () {\n var listHeight = this.getPopupHeight();\n var element;\n element = this.selectedElement;\n if (!isNullOrUndefined(element)) {\n this.findScrollTop(element);\n }\n else if (this.popupWrapper && this.checkDateValue(this.scrollTo)) {\n this.setScrollTo();\n }\n };\n TimePicker.prototype.findScrollTop = function (element) {\n var listHeight = this.getPopupHeight();\n var nextEle = element.nextElementSibling;\n var height = nextEle ? nextEle.offsetTop : element.offsetTop;\n var liHeight = element.getBoundingClientRect().height;\n if ((height + element.offsetTop) > listHeight) {\n this.popupWrapper.scrollTop = nextEle ? (height - (listHeight / HALFPOSITION + liHeight / HALFPOSITION)) : height;\n }\n else {\n this.popupWrapper.scrollTop = 0;\n }\n };\n TimePicker.prototype.setScrollTo = function () {\n var element;\n if (!isNullOrUndefined(this.popupWrapper)) {\n var items = this.popupWrapper.querySelectorAll('.' + LISTCLASS);\n if (items.length) {\n var initialTime = this.timeCollections[0];\n var scrollTime = this.getDateObject(this.checkDateValue(this.scrollTo)).getTime();\n element = items[Math.round((scrollTime - initialTime) / (this.step * 60000))];\n }\n }\n else {\n this.popupWrapper.scrollTop = 0;\n }\n if (!isNullOrUndefined(element)) {\n this.findScrollTop(element);\n }\n else {\n this.popupWrapper.scrollTop = 0;\n }\n };\n TimePicker.prototype.getText = function () {\n return (isNullOrUndefined(this.checkDateValue(this.value))) ? '' : this.getValue(this.value);\n };\n TimePicker.prototype.getValue = function (value) {\n return (isNullOrUndefined(this.checkDateValue(value))) ? null : this.globalize.formatDate(value, {\n format: this.cldrTimeFormat(), type: 'time'\n });\n };\n TimePicker.prototype.cldrDateFormat = function () {\n var cldrDate;\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrDate = (getValue('dateFormats.short', getDefaultDateObject()));\n }\n else {\n cldrDate = (this.getCultureDateObject(cldrData, '' + this.locale));\n }\n return cldrDate;\n };\n TimePicker.prototype.cldrTimeFormat = function () {\n var cldrTime;\n if (this.isNullOrEmpty(this.format)) {\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrTime = (getValue('timeFormats.short', getDefaultDateObject()));\n }\n else {\n cldrTime = (this.getCultureTimeObject(cldrData, '' + this.locale));\n }\n }\n else {\n cldrTime = this.format;\n }\n return cldrTime;\n };\n TimePicker.prototype.dateToNumeric = function () {\n var cldrTime;\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrTime = (getValue('timeFormats.medium', getDefaultDateObject()));\n }\n else {\n cldrTime = (getValue('main.' + '' + this.locale + '.dates.calendars.gregorian.timeFormats.medium', cldrData));\n }\n return cldrTime;\n };\n TimePicker.prototype.getExactDateTime = function (value) {\n if (isNullOrUndefined(this.checkDateValue(value))) {\n return null;\n }\n else {\n return this.globalize.formatDate(value, { format: this.dateToNumeric(), type: 'time' });\n }\n };\n TimePicker.prototype.setValue = function (value) {\n var time = this.checkValue(value);\n if (!this.strictMode && !this.validateState(time)) {\n this.initValue = this.valueWithMinutes = null;\n this.validateMinMax(this.value, this.min, this.max);\n }\n else {\n if (this.isNullOrEmpty(time)) {\n this.initValue = null;\n this.validateMinMax(this.value, this.min, this.max);\n }\n else {\n this.initValue = this.compareFormatChange(time);\n }\n }\n this.updateInput(true, this.initValue);\n };\n TimePicker.prototype.compareFormatChange = function (value) {\n if (isNullOrUndefined(value)) {\n return null;\n }\n return (value !== this.getText()) ? this.getDateObject(value) : this.getDateObject(this.value);\n };\n TimePicker.prototype.updatePlaceHolder = function () {\n Input.setPlaceholder(this.l10n.getConstant('placeholder'), this.inputElement);\n };\n //event related functions\n TimePicker.prototype.popupHandler = function (e) {\n e.preventDefault();\n if (this.isPopupOpen()) {\n this.closePopup(0, e);\n }\n else {\n this.show(e);\n }\n };\n TimePicker.prototype.mouseDownHandler = function () {\n if (!this.readonly) {\n var curPos = this.getCursorSelection();\n this.inputElement.setSelectionRange(0, 0);\n EventHandler.add(this.inputElement, 'mouseup', this.mouseUpHandler, this);\n }\n };\n TimePicker.prototype.mouseUpHandler = function (event) {\n if (!this.readonly) {\n event.preventDefault();\n EventHandler.remove(this.inputElement, 'mouseup', this.mouseUpHandler);\n var curPos = this.getCursorSelection();\n if (!(curPos.start === 0 && curPos.end === this.inputElement.value.length)) {\n if (this.inputElement.value.length > 0) {\n this.cursorDetails = this.focusSelection();\n }\n this.inputElement.setSelectionRange(this.cursorDetails.start, this.cursorDetails.end);\n }\n }\n };\n TimePicker.prototype.focusSelection = function () {\n var regex = new RegExp('^[a-zA-Z0-9]+$');\n var split = this.inputElement.value.split('');\n split.push(' ');\n var curPos = this.getCursorSelection();\n var start = 0;\n var end = 0;\n var isSeparator = false;\n if (!this.isTextSelected) {\n for (var i = 0; i < split.length; i++) {\n if (!regex.test(split[i])) {\n end = i;\n isSeparator = true;\n }\n if (isSeparator) {\n if (curPos.start >= start && curPos.end <= end) {\n end = end;\n this.isTextSelected = true;\n break;\n }\n else {\n start = i + 1;\n isSeparator = false;\n }\n }\n }\n }\n else {\n start = curPos.start;\n end = curPos.end;\n this.isTextSelected = false;\n }\n return { start: start, end: end };\n };\n TimePicker.prototype.inputHandler = function (event) {\n if (!this.readonly && this.enabled) {\n if (event.action !== 'right' && event.action !== 'left' && event.action !== 'tab') {\n event.preventDefault();\n }\n switch (event.action) {\n case 'home':\n case 'end':\n case 'up':\n case 'down':\n this.keyHandler(event);\n break;\n case 'enter':\n if (this.isNavigate) {\n this.selectedElement = this.liCollections[this.activeIndex];\n this.valueWithMinutes = new Date(this.timeCollections[this.activeIndex]);\n this.updateValue(this.valueWithMinutes, event);\n }\n else {\n this.updateValue(this.inputElement.value, event);\n }\n this.hide();\n addClass([this.inputWrapper.container], FOCUS);\n this.isNavigate = false;\n break;\n case 'open':\n this.show(event);\n break;\n case 'escape':\n Input.setValue(this.objToString(this.value), this.inputElement, this.floatLabelType, this.showClearButton);\n this.previousState(this.value);\n this.hide();\n break;\n case 'close':\n this.hide();\n break;\n default:\n this.isNavigate = false;\n break;\n }\n }\n };\n TimePicker.prototype.onMouseClick = function (event) {\n var target = event.target;\n var li = this.selectedElement = closest(target, '.' + LISTCLASS);\n this.setSelection(li, event);\n if (li && li.classList.contains(LISTCLASS)) {\n this.hide();\n if (!Browser.isDevice) {\n addClass([this.inputWrapper.container], FOCUS);\n }\n }\n };\n TimePicker.prototype.closePopup = function (delay, e) {\n if (this.isPopupOpen() && this.popupWrapper) {\n var args = {\n popup: this.popupObj,\n event: e || null,\n cancel: false,\n name: 'open'\n };\n this.trigger('close', args);\n if (!args.cancel) {\n var animModel = {\n name: 'FadeOut',\n duration: ANIMATIONDURATION,\n delay: delay ? delay : 0\n };\n this.popupObj.hide(new Animation(animModel));\n removeClass([this.inputWrapper.container], [ICONANIMATION]);\n attributes(this.inputElement, { 'aria-expanded': 'false' });\n EventHandler.remove(document, 'mousedown touchstart', this.documentClickHandler);\n }\n }\n };\n TimePicker.prototype.checkValueChange = function (event, isNavigation) {\n if (!this.strictMode && !this.validateState(this.valueWithMinutes)) {\n this.initValue = this.valueWithMinutes = null;\n this.setProperties({ value: this.compareFormatChange(this.inputElement.value) }, true);\n this.prevValue = this.inputElement.value;\n if (+this.prevDate !== +this.value) {\n this.changeEvent(event);\n }\n }\n else {\n if (!isNavigation) {\n if ((this.prevValue !== this.inputElement.value) || isNullOrUndefined(this.checkDateValue(this.value))) {\n this.valueProcess(event, this.compareFormatChange(this.inputElement.value));\n }\n }\n else {\n var value = this.getDateObject(new Date(this.timeCollections[this.activeIndex]));\n if (+this.prevDate !== +value) {\n this.valueProcess(event, value);\n }\n }\n }\n };\n TimePicker.prototype.onMouseOver = function (event) {\n var currentLi = closest(event.target, '.' + LISTCLASS);\n this.setHover(currentLi, HOVER);\n };\n TimePicker.prototype.setHover = function (li, className) {\n if (this.enabled && this.isValidLI(li) && !li.classList.contains(className)) {\n this.removeHover(className);\n addClass([li], className);\n if (className === NAVIGATION) {\n li.setAttribute('aria-selected', 'true');\n }\n }\n };\n TimePicker.prototype.setSelection = function (li, event) {\n if (this.isValidLI(li) && !li.classList.contains(SELECTED)) {\n this.checkValue(li.getAttribute('data-value'));\n this.selectedElement = li;\n this.activeIndex = Array.prototype.slice.call(this.liCollections).indexOf(li);\n this.valueWithMinutes = new Date(this.timeCollections[this.activeIndex]);\n addClass([this.selectedElement], SELECTED);\n this.selectedElement.setAttribute('aria-selected', 'true');\n this.checkValueChange(event, true);\n }\n };\n TimePicker.prototype.onMouseLeave = function () {\n this.removeHover(HOVER);\n };\n TimePicker.prototype.scrollHandler = function () {\n if (this.getModuleName() === 'timepicker' && Browser.isDevice) {\n return;\n }\n else {\n this.hide();\n }\n };\n TimePicker.prototype.setMinMax = function (minVal, maxVal) {\n if (isNullOrUndefined(this.checkDateValue(minVal))) {\n this.initMin = this.getDateObject('12:00:00 AM');\n }\n if (isNullOrUndefined(this.checkDateValue(maxVal))) {\n this.initMax = this.getDateObject('11:59:59 PM');\n }\n };\n //protected function\n TimePicker.prototype.validateMinMax = function (dateVal, minVal, maxVal) {\n var value = dateVal instanceof Date ? dateVal : this.getDateObject(dateVal);\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n dateVal = this.strictOperation(this.initMin, this.initMax, dateVal, value);\n }\n else if (+(this.createDateObj(this.getFormattedValue(this.initMin))) >\n +(this.createDateObj(this.getFormattedValue(this.initMax)))) {\n this.disableTimeIcon();\n }\n if (this.strictMode) {\n dateVal = this.valueIsDisable(dateVal) ? dateVal : null;\n }\n this.checkErrorState(dateVal);\n return dateVal;\n };\n TimePicker.prototype.valueIsDisable = function (value) {\n if (this.disableItemCollection.length > 0) {\n if (this.disableItemCollection.length === this.timeCollections.length) {\n return false;\n }\n var time = value instanceof Date ? this.objToString(value) : value;\n for (var index = 0; index < this.disableItemCollection.length; index++) {\n if (time === this.disableItemCollection[index]) {\n return false;\n }\n }\n }\n return true;\n };\n TimePicker.prototype.validateState = function (val) {\n if (!this.strictMode) {\n if (this.valueIsDisable(val)) {\n var value = typeof val === 'string' ? this.setCurrentDate(this.getDateObject(val)) :\n this.setCurrentDate(this.getDateObject(val));\n var maxValue = this.setCurrentDate(this.getDateObject(this.initMax));\n var minValue = this.setCurrentDate(this.getDateObject(this.initMin));\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n if ((+(value) > +(maxValue)) || (+(value) < +(minValue))) {\n return false;\n }\n }\n else {\n if ((+(maxValue) < +(minValue)) || this.inputElement.value !== '') {\n return false;\n }\n }\n }\n else {\n return false;\n }\n }\n return true;\n };\n TimePicker.prototype.strictOperation = function (minimum, maximum, dateVal, val) {\n var maxValue = this.createDateObj(this.getFormattedValue(maximum));\n var minValue = this.createDateObj(this.getFormattedValue(minimum));\n var value = this.createDateObj(this.getFormattedValue(val));\n if (this.strictMode) {\n if (+minValue > +maxValue) {\n this.disableTimeIcon();\n this.initValue = this.getDateObject(maxValue);\n Input.setValue(this.getValue(this.initValue), this.inputElement, this.floatLabelType, this.showClearButton);\n return this.inputElement.value;\n }\n else if (+minValue >= +value) {\n return this.getDateObject(minValue);\n }\n else if (+value >= +maxValue || +minValue === +maxValue) {\n return this.getDateObject(maxValue);\n }\n }\n else {\n if (+minValue > +maxValue) {\n this.disableTimeIcon();\n if (!isNaN(+this.createDateObj(dateVal))) {\n return dateVal;\n }\n }\n }\n return dateVal;\n };\n TimePicker.prototype.bindEvents = function () {\n EventHandler.add(this.inputWrapper.buttons[0], 'mousedown touchstart', this.popupHandler, this);\n EventHandler.add(this.inputElement, 'blur', this.inputBlurHandler, this);\n EventHandler.add(this.inputElement, 'focus', this.inputFocusHandler, this);\n EventHandler.add(this.inputElement, 'change', this.inputChangeHandler, this);\n if (this.showClearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown touchstart', this.clearHandler, this);\n }\n var form = closest(this.element, 'form');\n if (form) {\n EventHandler.add(form, 'reset', this.formResetHandler.bind(this));\n }\n if (!Browser.isDevice) {\n this.inputEvent = new KeyboardEvents(this.inputWrapper.container, {\n keyAction: this.inputHandler.bind(this), keyConfigs: this.keyConfigure, eventName: 'keydown'\n });\n if (this.showClearButton) {\n EventHandler.add(this.inputElement, 'mousedown touchstart', this.mouseDownHandler, this);\n }\n }\n };\n TimePicker.prototype.formResetHandler = function () {\n if (this.inputElement.getAttribute('value')) {\n this.value = this.checkDateValue(new Date('' + this.element.getAttribute('value')));\n }\n else {\n this.value = null;\n }\n };\n TimePicker.prototype.inputChangeHandler = function (e) {\n e.stopPropagation();\n };\n TimePicker.prototype.unBindEvents = function () {\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown touchstart', this.popupHandler);\n EventHandler.remove(this.inputElement, 'blur', this.inputBlurHandler);\n EventHandler.remove(this.inputElement, 'focus', this.inputFocusHandler);\n EventHandler.remove(this.inputElement, 'change', this.inputChangeHandler);\n if (this.inputEvent) {\n this.inputEvent.destroy();\n }\n EventHandler.remove(this.inputElement, 'mousedown touchstart', this.mouseDownHandler);\n EventHandler.remove(this.inputWrapper.clearButton, 'mousedown touchstart', this.clearHandler);\n var form = closest(this.element, 'form');\n if (form) {\n EventHandler.remove(form, 'reset', this.formResetHandler.bind(this));\n }\n };\n TimePicker.prototype.bindClearEvent = function () {\n if (this.showClearButton && this.inputWrapper.clearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown touchstart', this.clearHandler, this);\n }\n };\n TimePicker.prototype.clearHandler = function (e) {\n e.preventDefault();\n this.clear(e);\n if (this.popupWrapper) {\n this.popupWrapper.scrollTop = 0;\n }\n };\n TimePicker.prototype.clear = function (event) {\n this.setProperties({ value: null }, true);\n this.initValue = null;\n this.resetState();\n this.changeEvent(event);\n };\n TimePicker.prototype.setZIndex = function () {\n if (this.popupObj) {\n this.popupObj.zIndex = this.zIndex;\n this.popupObj.dataBind();\n }\n };\n TimePicker.prototype.checkAttributes = function () {\n var attributes = ['step', 'disabled', 'readonly', 'style', 'name', 'value', 'min', 'max', 'placeholder'];\n var value;\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var prop = attributes_1[_i];\n if (!isNullOrUndefined(this.inputElement.getAttribute(prop))) {\n switch (prop) {\n case 'disabled':\n var enabled = isNullOrUndefined(this.inputElement.getAttribute(prop));\n this.setProperties({ enabled: enabled }, true);\n break;\n case 'readonly':\n var readonly = !isNullOrUndefined(this.inputElement.getAttribute(prop));\n this.setProperties({ readonly: readonly }, true);\n break;\n case 'style':\n this.inputStyle = this.inputElement.getAttribute(prop);\n break;\n case 'name':\n this.inputElement.setAttribute('name', this.inputElement.getAttribute(prop));\n break;\n case 'step':\n this.step = parseInt(this.inputElement.getAttribute(prop), 10);\n break;\n case 'placeholder':\n this.placeholder = this.inputElement.getAttribute(prop);\n break;\n case 'min':\n value = new Date(this.inputElement.getAttribute(prop));\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n this.setProperties({ min: value }, true);\n }\n break;\n case 'max':\n value = new Date(this.inputElement.getAttribute(prop));\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n this.setProperties({ max: value }, true);\n }\n break;\n case 'value':\n value = new Date(this.inputElement.getAttribute(prop));\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n this.initValue = value;\n this.updateInput(false, this.initValue);\n }\n break;\n }\n }\n }\n };\n TimePicker.prototype.setCurrentDate = function (value) {\n if (isNullOrUndefined(this.checkDateValue(value))) {\n return null;\n }\n return new Date(YEAR, MONTH, DAY, value.getHours(), value.getMinutes(), value.getSeconds());\n };\n TimePicker.prototype.getTextFormat = function () {\n var time = 0;\n if (this.cldrTimeFormat().split(' ')[0] === 'a' || this.cldrTimeFormat().indexOf('a') === 0) {\n time = 1;\n }\n else if (this.cldrTimeFormat().indexOf('a') < 0) {\n var strArray = this.cldrTimeFormat().split(' ');\n for (var i = 0; i < strArray.length; i++) {\n if (strArray[i].toLowerCase().indexOf('h') >= 0) {\n time = i;\n break;\n }\n }\n }\n return time;\n };\n TimePicker.prototype.updateValue = function (value, event) {\n var val;\n if (this.isNullOrEmpty(value)) {\n this.resetState();\n }\n else {\n val = this.checkValue(value);\n if (this.strictMode) {\n // this case set previous value to the text box when set invalid date\n var inputVal = (val === null && value.trim().length > 0) ?\n this.previousState(this.prevDate) : this.inputElement.value;\n Input.setValue(inputVal, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n }\n this.checkValueChange(event, typeof value === 'string' ? false : true);\n };\n TimePicker.prototype.previousState = function (date) {\n var value = this.getDateObject(date);\n for (var i = 0; i < this.timeCollections.length; i++) {\n if (+value === this.timeCollections[i]) {\n this.activeIndex = i;\n this.selectedElement = this.liCollections[i];\n this.valueWithMinutes = new Date(this.timeCollections[i]);\n break;\n }\n }\n return this.prevValue;\n };\n TimePicker.prototype.resetState = function () {\n this.removeSelection();\n Input.setValue('', this.inputElement, this.floatLabelType, false);\n this.valueWithMinutes = this.activeIndex = null;\n if (!this.strictMode) {\n this.checkErrorState(null);\n }\n };\n TimePicker.prototype.objToString = function (val) {\n if (isNullOrUndefined(this.checkDateValue(val))) {\n return null;\n }\n else {\n return this.globalize.formatDate(val, { format: this.cldrTimeFormat(), type: 'time' });\n }\n };\n TimePicker.prototype.checkValue = function (value) {\n if (!this.isNullOrEmpty(value)) {\n var date = value instanceof Date ? value : this.getDateObject(value);\n return this.validateValue(date, value);\n }\n this.resetState();\n return this.valueWithMinutes = null;\n };\n TimePicker.prototype.validateValue = function (date, value) {\n var time;\n var val = this.validateMinMax(value, this.min, this.max);\n var newval = this.createDateObj(val);\n if (this.getFormattedValue(newval) !== this.getFormattedValue(this.value)) {\n this.valueWithMinutes = isNullOrUndefined(newval) ? null : newval;\n time = this.objToString(this.valueWithMinutes);\n }\n else {\n if (this.strictMode) {\n //for strict mode case, when value not present within a range. Reset the nearest range value.\n date = newval;\n }\n this.valueWithMinutes = this.checkDateValue(date);\n time = this.objToString(this.valueWithMinutes);\n }\n if (!this.strictMode && isNullOrUndefined(time)) {\n var value_1 = val.trim().length > 0 ? val : '';\n Input.setValue(value_1, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n else {\n Input.setValue(time, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n return time;\n };\n TimePicker.prototype.findNextElement = function (event) {\n var textVal = (this.inputElement).value;\n var value = isNullOrUndefined(this.valueWithMinutes) ? this.createDateObj(textVal) :\n this.getDateObject(this.valueWithMinutes);\n var timeVal = null;\n var count = this.liCollections.length;\n if (!isNullOrUndefined(this.checkDateValue(value)) || !isNullOrUndefined(this.activeIndex)) {\n if (event.action === 'home') {\n var index = this.validLiElement(0);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n }\n else if (event.action === 'end') {\n var index = this.validLiElement(this.timeCollections.length - 1, true);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n }\n else {\n if (event.action === 'down') {\n for (var i = 0; i < count; i++) {\n if (+value < this.timeCollections[i]) {\n var index = this.validLiElement(i);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n break;\n }\n else if (i === count - 1) {\n var index = this.validLiElement(0);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n break;\n }\n }\n }\n else {\n for (var i = count - 1; i >= 0; i--) {\n if (+value > this.timeCollections[i]) {\n var index = this.validLiElement(i, true);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n break;\n }\n else if (i === 0) {\n var index = this.validLiElement(count - 1);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n break;\n }\n }\n }\n }\n this.selectedElement = this.liCollections[this.activeIndex];\n this.elementValue(isNullOrUndefined(timeVal) ? null : new Date(timeVal));\n }\n else {\n var index = this.validLiElement(0, event.action === 'down' ? false : true);\n this.activeIndex = index;\n this.selectedElement = this.liCollections[index];\n this.elementValue(new Date(this.timeCollections[index]));\n }\n };\n TimePicker.prototype.elementValue = function (value) {\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n this.checkValue(value);\n }\n };\n TimePicker.prototype.validLiElement = function (index, backward) {\n var elementIndex = null;\n var items = isNullOrUndefined(this.popupWrapper) ? this.liCollections :\n this.popupWrapper.querySelectorAll('.' + LISTCLASS);\n var isCheck = true;\n if (items.length) {\n if (backward) {\n for (var i = index; i >= 0; i--) {\n if (!items[i].classList.contains(DISABLED)) {\n elementIndex = i;\n break;\n }\n else if (i === 0) {\n if (isCheck) {\n index = i = items.length;\n isCheck = false;\n }\n }\n }\n }\n else {\n for (var i = index; i <= items.length - 1; i++) {\n if (!items[i].classList.contains(DISABLED)) {\n elementIndex = i;\n break;\n }\n else if (i === items.length - 1) {\n if (isCheck) {\n index = i = -1;\n isCheck = false;\n }\n }\n }\n }\n }\n return elementIndex;\n };\n TimePicker.prototype.keyHandler = function (event) {\n if (isNullOrUndefined(this.step) || this.step <= 0 || this.inputWrapper.buttons[0].classList.contains(DISABLED)) {\n return;\n }\n var count = this.timeCollections.length;\n if (isNullOrUndefined(this.getActiveElement()) || this.getActiveElement().length === 0) {\n if (this.liCollections.length > 0) {\n if (isNullOrUndefined(this.value) && isNullOrUndefined(this.activeIndex)) {\n var index = this.validLiElement(0, event.action === 'down' ? false : true);\n this.activeIndex = index;\n this.selectedElement = this.liCollections[index];\n this.elementValue(new Date(this.timeCollections[index]));\n }\n else {\n this.findNextElement(event);\n }\n }\n else {\n this.findNextElement(event);\n }\n }\n else {\n var nextItem = void 0;\n if ((event.keyCode >= 37) && (event.keyCode <= 40)) {\n var index = (event.keyCode === 40 || event.keyCode === 39) ? ++this.activeIndex : --this.activeIndex;\n this.activeIndex = index = this.activeIndex === (count) ? 0 : this.activeIndex;\n this.activeIndex = index = this.activeIndex < 0 ? (count - 1) : this.activeIndex;\n this.activeIndex = index = this.validLiElement(this.activeIndex, (event.keyCode === 40 || event.keyCode === 39) ?\n false : true);\n nextItem = isNullOrUndefined(this.timeCollections[index]) ? this.timeCollections[0] : this.timeCollections[index];\n }\n else if (event.action === 'home') {\n var index = this.validLiElement(0);\n this.activeIndex = index;\n nextItem = this.timeCollections[index];\n }\n else if (event.action === 'end') {\n var index = this.validLiElement(count - 1, true);\n this.activeIndex = index;\n nextItem = this.timeCollections[index];\n }\n this.selectedElement = this.liCollections[this.activeIndex];\n this.elementValue(new Date(nextItem));\n }\n this.isNavigate = true;\n this.setHover(this.selectedElement, NAVIGATION);\n this.setActiveDescendant();\n this.selectInputText();\n if (this.isPopupOpen() && this.selectedElement !== null && (!event || event.type !== 'click')) {\n this.setScrollPosition();\n }\n };\n TimePicker.prototype.setPopupPosition = function () {\n var offsetValue;\n var padding = 1;\n var popupHeight = this.getPopupHeight();\n var element = this.getActiveElement();\n var liHeight = this.liCollections[0].getBoundingClientRect().height;\n var listHeight = popupHeight / HALFPOSITION;\n var height = element.length === 0 ? this.liCollections[0].offsetTop : element[0].offsetTop;\n var lastItemOffsetValue = this.liCollections[this.liCollections.length - 1].offsetTop;\n var ulPadding = (parseInt(getComputedStyle(this.listTag).paddingTop, 10));\n if (lastItemOffsetValue - listHeight < height) {\n var count = popupHeight / liHeight;\n offsetValue = (count - (this.liCollections.length - this.activeIndex)) * liHeight - ulPadding - HALFPOSITION;\n }\n else if ((height + liHeight) > listHeight) {\n offsetValue = listHeight - liHeight / HALFPOSITION;\n }\n else {\n offsetValue = height;\n }\n offsetValue = offsetValue + HALFPOSITION + ((liHeight - this.containerStyle.height) / HALFPOSITION);\n return -offsetValue;\n };\n TimePicker.prototype.getCultureTimeObject = function (ld, c) {\n return getValue('main.' + c + '.dates.calendars.gregorian.timeFormats.short', ld);\n };\n TimePicker.prototype.getCultureDateObject = function (ld, c) {\n return getValue('main.' + c + '.dates.calendars.gregorian.dateFormats.short', ld);\n };\n TimePicker.prototype.wireListEvents = function () {\n EventHandler.add(this.listWrapper, 'click', this.onMouseClick, this);\n if (!Browser.isDevice) {\n EventHandler.add(this.listWrapper, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.listWrapper, 'mouseout', this.onMouseLeave, this);\n }\n };\n TimePicker.prototype.unWireListEvents = function () {\n if (this.listWrapper) {\n EventHandler.remove(this.listWrapper, 'click', this.onMouseClick);\n if (!Browser.isDevice) {\n EventHandler.remove(this.listWrapper, 'mouseover', this.onMouseOver);\n EventHandler.remove(this.listWrapper, 'mouseout', this.onMouseLeave);\n }\n }\n };\n TimePicker.prototype.valueProcess = function (event, value) {\n var result = (isNullOrUndefined(this.checkDateValue(value))) ? null : value;\n if (+this.prevDate !== +result) {\n this.initValue = result;\n this.changeEvent(event);\n }\n };\n TimePicker.prototype.changeEvent = function (e) {\n this.addSelection();\n this.updateInput(true, this.initValue);\n var eventArgs = {\n event: (e || null),\n value: this.value,\n text: (this.inputElement).value,\n isInteracted: !isNullOrUndefined(e),\n element: this.element\n };\n eventArgs.value = this.valueWithMinutes || this.getDateObject(this.inputElement.value);\n this.prevDate = this.valueWithMinutes || this.getDateObject(this.inputElement.value);\n this.trigger('change', eventArgs);\n };\n TimePicker.prototype.updateInput = function (isUpdate, date) {\n if (isUpdate) {\n this.prevValue = this.getValue(date);\n }\n this.prevDate = this.valueWithMinutes = date;\n this.setProperties({ value: date }, true);\n };\n TimePicker.prototype.setActiveDescendant = function () {\n if (!isNullOrUndefined(this.selectedElement)) {\n attributes(this.inputElement, { 'aria-activedescendant': this.selectedElement.getAttribute('id') });\n }\n else {\n attributes(this.inputElement, { 'aria-activedescendant': 'null' });\n }\n };\n TimePicker.prototype.removeSelection = function () {\n this.removeHover(HOVER);\n if (!isNullOrUndefined(this.popupWrapper)) {\n var items = this.popupWrapper.querySelectorAll('.' + SELECTED);\n if (items.length) {\n removeClass(items, SELECTED);\n items[0].removeAttribute('aria-selected');\n }\n }\n };\n TimePicker.prototype.removeHover = function (className) {\n var hoveredItem = this.getHoverItem(className);\n if (hoveredItem && hoveredItem.length) {\n removeClass(hoveredItem, className);\n if (className === NAVIGATION) {\n hoveredItem[0].removeAttribute('aria-selected');\n }\n }\n };\n TimePicker.prototype.getHoverItem = function (className) {\n var hoveredItem;\n if (!isNullOrUndefined(this.popupWrapper)) {\n hoveredItem = this.popupWrapper.querySelectorAll('.' + className);\n }\n return hoveredItem;\n };\n TimePicker.prototype.setActiveClass = function () {\n if (!isNullOrUndefined(this.popupWrapper)) {\n var items = this.popupWrapper.querySelectorAll('.' + LISTCLASS);\n if (items.length) {\n for (var i = 0; i < items.length; i++) {\n if (this.timeCollections[i] === +this.getDateObject(this.valueWithMinutes)) {\n items[i].setAttribute('aria-selected', 'true');\n this.selectedElement = items[i];\n this.activeIndex = i;\n break;\n }\n }\n }\n }\n };\n TimePicker.prototype.addSelection = function () {\n this.selectedElement = null;\n this.removeSelection();\n this.setActiveClass();\n if (!isNullOrUndefined(this.selectedElement)) {\n addClass([this.selectedElement], SELECTED);\n this.selectedElement.setAttribute('aria-selected', 'true');\n }\n };\n TimePicker.prototype.isValidLI = function (li) {\n return (li && li.classList.contains(LISTCLASS) && !li.classList.contains(DISABLED));\n };\n TimePicker.prototype.createDateObj = function (val) {\n var today = this.globalize.formatDate(new Date(), { skeleton: 'short', type: 'date' });\n var value = null;\n if (typeof val === 'string') {\n if (val.toUpperCase().indexOf('AM') > -1 || val.toUpperCase().indexOf('PM') > -1) {\n today = this.defaultCulture.formatDate(new Date(), { skeleton: 'short', type: 'date' });\n value = isNaN(+new Date(today + ' ' + val)) ? null : new Date(new Date(today + ' ' + val).setMilliseconds(0));\n if (isNullOrUndefined(value)) {\n value = this.TimeParse(today, val);\n }\n }\n else {\n value = this.TimeParse(today, val);\n }\n }\n else if (val instanceof Date) {\n value = val;\n }\n return value;\n };\n TimePicker.prototype.TimeParse = function (today, val) {\n var value;\n value = this.globalize.parseDate(today + ' ' + val, {\n format: this.cldrDateFormat() + ' ' + this.cldrTimeFormat(), type: 'datetime'\n });\n value = isNullOrUndefined(value) ? this.globalize.parseDate(today + ' ' + val, {\n format: this.cldrDateFormat() + ' ' + this.dateToNumeric(), type: 'datetime'\n }) : value;\n value = isNullOrUndefined(value) ? value : new Date(value.setMilliseconds(0));\n return value;\n };\n TimePicker.prototype.createListItems = function () {\n var _this = this;\n this.listWrapper = createElement('div', { className: CONTENT, attrs: { 'tabindex': '0' } });\n var start;\n var end;\n var interval = this.step * 60000;\n var listItems = [];\n this.timeCollections = [];\n this.disableItemCollection = [];\n start = +(this.getDateObject(this.initMin).setMilliseconds(0));\n end = +(this.getDateObject(this.initMax).setMilliseconds(0));\n while (end >= start) {\n this.timeCollections.push(start);\n listItems.push(this.globalize.formatDate(new Date(start), { format: this.cldrTimeFormat(), type: 'time' }));\n start += interval;\n }\n var listBaseOptions = {\n itemCreated: function (args) {\n var eventArgs = {\n element: args.item,\n text: args.text, value: _this.getDateObject(args.text), isDisabled: false\n };\n _this.trigger('itemRender', eventArgs);\n if (eventArgs.isDisabled) {\n eventArgs.element.classList.add(DISABLED);\n }\n if (eventArgs.element.classList.contains(DISABLED)) {\n _this.disableItemCollection.push(eventArgs.element.getAttribute('data-value'));\n }\n }\n };\n this.listTag = ListBase.createList(listItems, listBaseOptions, true);\n attributes(this.listTag, { 'role': 'listbox', 'aria-hidden': 'false', 'id': this.element.id + '_options' });\n append([this.listTag], this.listWrapper);\n };\n TimePicker.prototype.documentClickHandler = function (event) {\n if (!Browser.isDevice) {\n event.preventDefault();\n }\n var target = event.target;\n if (!(closest(target, '#' + this.popupObj.element.id)) && target !== this.inputElement\n && target !== (this.inputWrapper && this.inputWrapper.buttons[0]) &&\n target !== (this.inputWrapper && this.inputWrapper.clearButton) &&\n target !== (this.inputWrapper && this.inputWrapper.container)) {\n if (this.isPopupOpen()) {\n this.hide();\n }\n }\n else if (target !== this.inputElement) {\n if (!Browser.isDevice) {\n this.isPreventBlur = (Browser.isIE || Browser.info.name === 'edge') && (document.activeElement === this.inputElement);\n event.preventDefault();\n }\n }\n };\n TimePicker.prototype.setEnableRtl = function () {\n Input.setEnableRtl(this.enableRtl, [this.inputWrapper.container]);\n if (this.popupObj) {\n this.popupObj.enableRtl = this.enableRtl;\n this.popupObj.dataBind();\n }\n };\n TimePicker.prototype.setEnable = function () {\n Input.setEnabled(this.enabled, this.inputElement, this.floatLabelType);\n if (this.enabled) {\n removeClass([this.inputWrapper.container], DISABLED);\n attributes(this.inputElement, { 'aria-disabled': 'false' });\n }\n else {\n this.hide();\n addClass([this.inputWrapper.container], DISABLED);\n attributes(this.inputElement, { 'aria-disabled': 'true' });\n }\n };\n TimePicker.prototype.getProperty = function (date, val) {\n if (val === 'min') {\n this.initMin = this.checkDateValue(new Date('' + date.min));\n this.setProperties({ min: this.initMin }, true);\n }\n else {\n this.initMax = this.checkDateValue(new Date('' + date.max));\n this.setProperties({ max: this.initMax }, true);\n }\n if (this.inputElement.value === '') {\n this.validateMinMax(this.value, this.min, this.max);\n }\n else {\n this.checkValue(this.inputElement.value);\n }\n this.checkValueChange(null, false);\n };\n TimePicker.prototype.inputBlurHandler = function (e) {\n // IE popup closing issue when click over the scrollbar\n if (this.isPreventBlur && this.isPopupOpen()) {\n this.inputElement.focus();\n return;\n }\n this.closePopup(0, e);\n removeClass([this.inputWrapper.container], [FOCUS]);\n var blurArguments = {\n model: this\n };\n this.trigger('blur', blurArguments);\n if (this.getText() !== this.inputElement.value) {\n this.updateValue((this.inputElement).value, e);\n }\n else if (this.inputElement.value.trim().length === 0) {\n this.resetState();\n }\n this.cursorDetails = null;\n this.isNavigate = false;\n };\n /**\n * Focuses out the TimePicker textbox element.\n * @returns void\n */\n TimePicker.prototype.focusOut = function () {\n if (document.activeElement === this.inputElement) {\n this.inputElement.blur();\n var blurArguments = {\n model: this\n };\n this.trigger('blur', blurArguments);\n }\n };\n TimePicker.prototype.isPopupOpen = function () {\n if (this.popupWrapper && this.popupWrapper.classList.contains('' + ROOT)) {\n return true;\n }\n return false;\n };\n TimePicker.prototype.inputFocusHandler = function () {\n var focusArguments = {\n model: this\n };\n if (!this.readonly && !Browser.isDevice) {\n this.selectInputText();\n }\n this.trigger('focus', focusArguments);\n };\n /**\n * Focused the TimePicker textbox element.\n * @returns void\n */\n TimePicker.prototype.focusIn = function () {\n if (document.activeElement !== this.inputElement && this.enabled) {\n this.inputElement.focus();\n var focusArguments = {\n model: this\n };\n this.trigger('focus', focusArguments);\n }\n };\n /**\n * Hides the TimePicker popup.\n * @returns void\n */\n TimePicker.prototype.hide = function () {\n this.closePopup(100, null);\n };\n /**\n * Opens the popup to show the list items.\n * @returns void\n */\n TimePicker.prototype.show = function (event) {\n if ((this.enabled && this.readonly) || !this.enabled || this.popupWrapper) {\n return;\n }\n else {\n var args = {\n popup: this.popupObj || null,\n cancel: false,\n event: event || null,\n name: 'open'\n };\n this.trigger('open', args);\n if (!args.cancel && !this.isPopupOpen() && !this.inputWrapper.buttons[0].classList.contains(DISABLED)) {\n if (!Browser.isDevice) {\n this.inputElement.focus();\n }\n this.popupCreation();\n if (!args.cancel) {\n var openAnimation = {\n name: 'FadeIn',\n duration: ANIMATIONDURATION,\n };\n this.popupObj.refreshPosition(this.inputElement);\n this.popupObj.show(new Animation(openAnimation));\n this.setActiveDescendant();\n attributes(this.inputElement, { 'aria-expanded': 'true' });\n if (!Browser.isDevice) {\n addClass([this.inputWrapper.container], FOCUS);\n }\n }\n EventHandler.add(document, 'mousedown touchstart', this.documentClickHandler, this);\n }\n }\n };\n /**\n * Gets the properties to be maintained upon browser refresh.\n * @returns string\n */\n TimePicker.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * To get component name\n * @private\n */\n TimePicker.prototype.getModuleName = function () {\n return 'timepicker';\n };\n /**\n * Called internally if any of the property value changed.\n * returns void\n * @private\n */\n TimePicker.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'placeholder':\n Input.setPlaceholder(newProp.placeholder, this.inputElement);\n this.inputElement.setAttribute('aria-placeholder', newProp.placeholder);\n break;\n case 'readonly':\n Input.setReadonly(this.readonly, this.inputElement, this.floatLabelType);\n if (this.readonly) {\n this.hide();\n }\n break;\n case 'cssClass':\n addClass([this.inputWrapper.container], [newProp.cssClass]);\n if (this.popupWrapper) {\n addClass([this.popupWrapper], [newProp.cssClass]);\n }\n this.setProperties({ cssClass: newProp.cssClass }, true);\n break;\n case 'enabled':\n this.setProperties({ enabled: newProp.enabled }, true);\n this.setEnable();\n break;\n case 'enableRtl':\n this.setProperties({ enableRtl: newProp.enableRtl }, true);\n this.setEnableRtl();\n break;\n case 'zIndex':\n this.setProperties({ zIndex: newProp.zIndex }, true);\n this.setZIndex();\n break;\n case 'min':\n case 'max':\n this.getProperty(newProp, prop);\n break;\n case 'showClearButton':\n Input.setClearButton(this.showClearButton, this.inputElement, this.inputWrapper);\n this.bindClearEvent();\n break;\n case 'locale':\n this.setProperties({ locale: newProp.locale }, true);\n this.globalize = new Internationalization(this.locale);\n this.l10n.setLocale(this.locale);\n this.updatePlaceHolder();\n this.setValue(this.value);\n break;\n case 'width':\n setStyleAttribute(this.inputWrapper.container, { 'width': this.setWidth(newProp.width) });\n this.containerStyle = this.inputWrapper.container.getBoundingClientRect();\n break;\n case 'format':\n this.setProperties({ format: newProp.format }, true);\n this.setValue(this.value);\n break;\n case 'value':\n if (typeof newProp.value === 'string') {\n this.setProperties({ value: this.checkDateValue(new Date(newProp.value)) }, true);\n newProp.value = this.value;\n }\n else {\n newProp.value = this.checkDateValue(new Date('' + newProp.value));\n }\n this.initValue = newProp.value;\n newProp.value = this.compareFormatChange(this.checkValue(newProp.value));\n this.checkValueChange(null, false);\n break;\n case 'floatLabelType':\n this.floatLabelType = newProp.floatLabelType;\n Input.removeFloating(this.inputWrapper);\n Input.addFloating(this.inputElement, this.floatLabelType, this.placeholder);\n break;\n case 'strictMode':\n if (newProp.strictMode) {\n this.checkErrorState(null);\n }\n this.setProperties({ strictMode: newProp.strictMode }, true);\n this.checkValue((this.inputElement).value);\n this.checkValueChange(null, false);\n break;\n case 'scrollTo':\n if (this.checkDateValue(new Date('' + newProp.scrollTo))) {\n if (this.popupWrapper) {\n this.setScrollTo();\n }\n this.setProperties({ scrollTo: newProp.scrollTo }, true);\n }\n else {\n this.setProperties({ scrollTo: null }, true);\n }\n break;\n }\n }\n };\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], TimePicker.prototype, \"strictMode\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"format\", void 0);\n __decorate([\n Property(true)\n ], TimePicker.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], TimePicker.prototype, \"readonly\", void 0);\n __decorate([\n Property('Never')\n ], TimePicker.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"placeholder\", void 0);\n __decorate([\n Property(1000)\n ], TimePicker.prototype, \"zIndex\", void 0);\n __decorate([\n Property(false)\n ], TimePicker.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(true)\n ], TimePicker.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(30)\n ], TimePicker.prototype, \"step\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"scrollTo\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"min\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"max\", void 0);\n __decorate([\n Property(false)\n ], TimePicker.prototype, \"enableRtl\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"itemRender\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"focus\", void 0);\n TimePicker = __decorate([\n NotifyPropertyChanges\n ], TimePicker);\n return TimePicker;\n}(Component));\nexport { TimePicker };\n","import { classNames } from './list-view';\nimport { EventHandler, createElement, append, isNullOrUndefined, detach } from '@syncfusion/ej2-base';\nimport { ListBase } from '../common/list-base';\nvar Virtualization = /** @class */ (function () {\n function Virtualization(instance) {\n this.listViewInstance = instance;\n }\n Virtualization.prototype.uiVirtualization = function () {\n var curViewDS = this.listViewInstance.curViewDS;\n var firstDs = curViewDS.slice(0, 1);\n this.listViewInstance.ulElement = this.listViewInstance.curUL = ListBase.createList(firstDs, this.listViewInstance.listBaseOption);\n this.listViewInstance.contentContainer = createElement('div', { className: classNames.content });\n this.listViewInstance.element.appendChild(this.listViewInstance.contentContainer);\n this.listViewInstance.contentContainer.appendChild(this.listViewInstance.ulElement);\n this.listItemHeight = this.listViewInstance.ulElement.firstElementChild.getBoundingClientRect().height;\n this.expectedDomItemCount = this.ValidateItemCount(10000);\n this.domItemCount = this.ValidateItemCount(Object.keys(this.listViewInstance.curViewDS).length);\n this.uiFirstIndex = 0;\n this.uiLastIndex = this.domItemCount - 1;\n this.wireScrollEvent(false);\n var otherDs = curViewDS.slice(1, this.domItemCount);\n var listItems = ListBase.createListItemFromJson(otherDs, this.listViewInstance.listBaseOption);\n append(listItems, this.listViewInstance.ulElement);\n this.listViewInstance.liCollection = this.listViewInstance.curUL.querySelectorAll('li');\n this.topElement = createElement('div');\n this.listViewInstance.ulElement.insertBefore(this.topElement, this.listViewInstance.ulElement.firstElementChild);\n this.bottomElement = createElement('div');\n this.listViewInstance.ulElement.insertBefore(this.bottomElement, null);\n this.totalHeight = (Object.keys(curViewDS).length * this.listItemHeight) - (this.domItemCount * this.listItemHeight);\n this.topElement.style.height = 0 + 'px';\n this.bottomElement.style.height = this.totalHeight + 'px';\n this.topElementHeight = 0;\n this.bottomElementHeight = this.totalHeight;\n this.listDiff = 0;\n this.uiIndicesInitialization();\n };\n Virtualization.prototype.wireScrollEvent = function (destroy) {\n if (!destroy) {\n if (this.listViewInstance.isWindow) {\n this.onVirtualScroll = this.onVirtualUiScroll.bind(this);\n window.addEventListener('scroll', this.onVirtualScroll);\n }\n else {\n EventHandler.add(this.listViewInstance.element, 'scroll', this.onVirtualUiScroll, this);\n }\n }\n else {\n this.listViewInstance.isWindow ? window.removeEventListener('scroll', this.onVirtualScroll) :\n EventHandler.remove(this.listViewInstance.element, 'scroll', this.onVirtualUiScroll);\n }\n };\n Virtualization.prototype.ValidateItemCount = function (dataSourceLength) {\n var itemCount = this.listViewInstance.isWindow ? Math.round((window.innerHeight / this.listItemHeight) * 3) :\n Math.round((this.listViewInstance.height / this.listItemHeight) * 1.5);\n if (itemCount > dataSourceLength) {\n itemCount = dataSourceLength;\n }\n return itemCount;\n };\n Virtualization.prototype.uiIndicesInitialization = function () {\n var _this = this;\n this.uiIndices = { 'activeIndices': [], 'disabledItemIndices': [], 'hiddenItemIndices': [] };\n this.listViewInstance.curViewDS.forEach(function (ds, index) {\n if (_this.listViewInstance.showCheckBox && ds[_this.listViewInstance.fields.isChecked]) {\n _this.uiIndices.activeIndices.push(index);\n }\n if (!isNullOrUndefined(ds[_this.listViewInstance.fields.enabled]) && !ds[_this.listViewInstance.fields.enabled]) {\n _this.uiIndices.disabledItemIndices.push(index);\n }\n });\n };\n Virtualization.prototype.getscrollerHeight = function () {\n return this.listViewInstance.isWindow ? (((pageYOffset - this.startingHeight) <= 0) ? 0 :\n (pageYOffset - this.startingHeight)) : ((this.listViewInstance.element.scrollTop - this.startingHeight) <= 0) ? 0 :\n (this.listViewInstance.element.scrollTop - this.startingHeight);\n };\n Virtualization.prototype.onVirtualUiScroll = function () {\n if (isNullOrUndefined(this.startingHeight)) {\n if (this.listViewInstance.isWindow) {\n this.startingHeight = document.documentElement.getBoundingClientRect().height -\n this.listViewInstance.ulElement.getBoundingClientRect().height;\n }\n else {\n this.startingHeight = this.listViewInstance.headerEle ? this.listViewInstance.headerEle.getBoundingClientRect().height : 0;\n }\n this.scrollPosition = 0;\n }\n var scroll = this.getscrollerHeight();\n this.topElementHeight = this.listItemHeight * Math.floor(scroll / this.listItemHeight);\n this.bottomElementHeight = this.totalHeight - this.topElementHeight;\n _a = scroll <= this.totalHeight ?\n [this.topElementHeight, this.bottomElementHeight] : [this.totalHeight, 0], this.topElementHeight = _a[0], this.bottomElementHeight = _a[1];\n if (this.topElementHeight !== parseFloat(this.topElement.style.height)) {\n this.topElement.style.height = this.topElementHeight + 'px';\n this.bottomElement.style.height = this.bottomElementHeight + 'px';\n if (scroll > this.scrollPosition) {\n var listDiff = ((this.topElementHeight / this.listItemHeight) - this.listDiff);\n if (listDiff > (this.expectedDomItemCount + 5)) {\n this.onLongScroll(listDiff, true);\n }\n else {\n this.onNormalScroll(listDiff, true);\n }\n }\n else {\n var listDiff = (this.listDiff - (this.topElementHeight / this.listItemHeight));\n if (listDiff > (this.expectedDomItemCount + 5)) {\n this.onLongScroll(listDiff, false);\n }\n else {\n this.onNormalScroll(listDiff, false);\n }\n }\n this.listDiff = this.topElementHeight / this.listItemHeight;\n if (typeof this.listViewInstance.onUIScrolled === 'function') {\n this.listViewInstance.onUIScrolled();\n }\n }\n this.scrollPosition = scroll;\n var _a;\n };\n Virtualization.prototype.onLongScroll = function (listDiff, isScrollingDown) {\n var _this = this;\n var index = isScrollingDown ? (this.uiFirstIndex + listDiff) : (this.uiFirstIndex - listDiff);\n Array.prototype.forEach.call(this.listViewInstance.ulElement.querySelectorAll('li'), function (element) {\n _this.updateUI(element, index);\n index++;\n });\n this.uiLastIndex = isScrollingDown ? (this.uiLastIndex + listDiff) : (this.uiLastIndex - listDiff);\n this.uiFirstIndex = isScrollingDown ? (this.uiFirstIndex + listDiff) : (this.uiFirstIndex - listDiff);\n };\n Virtualization.prototype.onNormalScroll = function (listDiff, isScrollingDown) {\n if (isScrollingDown) {\n for (var i = 0; i < listDiff; i++) {\n var index = ++this.uiLastIndex;\n this.updateUI(this.topElement.nextElementSibling, index, this.bottomElement);\n this.uiFirstIndex++;\n }\n }\n else {\n for (var i = 0; i < listDiff; i++) {\n var index = --this.uiFirstIndex;\n var target = this.topElement.nextSibling;\n this.updateUI(this.bottomElement.previousElementSibling, index, target);\n this.uiLastIndex--;\n }\n }\n };\n Virtualization.prototype.updateUiContent = function (element, index) {\n var curViewDs = this.listViewInstance.curViewDS;\n if (typeof this.listViewInstance.dataSource[0] === 'string' ||\n typeof this.listViewInstance.dataSource[0] === 'number') {\n element.dataset.uid = ListBase.generateId();\n element.getElementsByClassName(classNames.listItemText)[0].innerHTML =\n this.listViewInstance.curViewDS[index].toString();\n }\n else {\n element.dataset.uid = curViewDs[index][this.listViewInstance.fields.id] ?\n curViewDs[index][this.listViewInstance.fields.id].toString() : ListBase.generateId();\n element.getElementsByClassName(classNames.listItemText)[0].innerHTML =\n curViewDs[index][this.listViewInstance.fields.text].toString();\n }\n if (this.listViewInstance.showIcon) {\n if (element.querySelector('.' + classNames.listIcon)) {\n detach(element.querySelector('.' + classNames.listIcon));\n }\n if (this.listViewInstance.curViewDS[index][this.listViewInstance.fields.iconCss]) {\n var textContent = element.querySelector('.' + classNames.textContent);\n var target = createElement('div', {\n className: classNames.listIcon + ' ' +\n this.listViewInstance.curViewDS[index][this.listViewInstance.fields.iconCss]\n });\n textContent.insertBefore(target, element.querySelector('.' + classNames.listItemText));\n }\n }\n if (this.listViewInstance.showCheckBox && this.listViewInstance.fields.groupBy) {\n if (!this.checkListWrapper) {\n this.checkListWrapper = this.listViewInstance.curUL.querySelector('.' + classNames.checkboxWrapper).cloneNode(true);\n }\n var textContent = element.querySelector('.' + classNames.textContent);\n if (this.listViewInstance.curViewDS[index].isHeader) {\n if (element.querySelector('.' + classNames.checkboxWrapper)) {\n element.classList.remove(classNames.checklist);\n textContent.classList.remove(classNames.checkbox);\n detach(element.querySelector('.' + classNames.checkboxWrapper));\n }\n }\n else {\n if (!element.querySelector('.' + classNames.checkboxWrapper)) {\n element.classList.add(classNames.checklist);\n textContent.classList.add(classNames.checkbox);\n textContent.insertBefore(this.checkListWrapper.cloneNode(true), element.querySelector('.' + classNames.listItemText));\n }\n }\n }\n };\n Virtualization.prototype.changeElementAttributes = function (element, index) {\n element.classList.remove(classNames.disable);\n if (this.uiIndices.disabledItemIndices.length && this.uiIndices.disabledItemIndices.indexOf(index) !== -1) {\n element.classList.add(classNames.disable);\n }\n element.style.display = '';\n if (this.uiIndices.hiddenItemIndices.length && this.uiIndices.hiddenItemIndices.indexOf(index) !== -1) {\n element.style.display = 'none';\n }\n if (this.listViewInstance.showCheckBox) {\n var checklistElement = element.querySelector('.' + classNames.checkboxWrapper);\n element.classList.remove(classNames.selected);\n element.classList.remove(classNames.focused);\n if (checklistElement) {\n checklistElement.removeAttribute('aria-checked');\n checklistElement.firstElementChild.classList.remove(classNames.checked);\n }\n if (this.uiIndices.activeIndices.length && this.uiIndices.activeIndices.indexOf(index) !== -1 &&\n !this.listViewInstance.curUL.querySelector(classNames.selected)) {\n element.classList.add(classNames.selected);\n checklistElement.firstElementChild.classList.add(classNames.checked);\n checklistElement.setAttribute('aria-checked', 'true');\n if (this.activeIndex === index) {\n element.classList.add(classNames.focused);\n }\n }\n }\n else {\n element.classList.remove(classNames.selected);\n element.removeAttribute('aria-selected');\n if (!isNullOrUndefined(this.activeIndex) && this.activeIndex === index &&\n !this.listViewInstance.curUL.querySelector(classNames.selected)) {\n element.classList.add(classNames.selected);\n element.setAttribute('aria-selected', 'true');\n }\n }\n if (this.listViewInstance.fields.groupBy) {\n if (this.listViewInstance.curViewDS[index].isHeader) {\n if (element.classList.contains(classNames.listItem)) {\n element.classList.remove(classNames.listItem);\n element.setAttribute('role', 'group');\n element.classList.add(classNames.groupListItem);\n }\n }\n else {\n if (element.classList.contains(classNames.groupListItem)) {\n element.classList.remove(classNames.groupListItem);\n element.setAttribute('role', 'listitem');\n element.classList.add(classNames.listItem);\n }\n }\n }\n };\n Virtualization.prototype.findDSAndIndexFromId = function (ds, fields) {\n var _this = this;\n var resultJSON = {};\n ds.some(function (data, index) {\n if ((fields[_this.listViewInstance.fields.id] &&\n fields[_this.listViewInstance.fields.id].toString()\n === (data[_this.listViewInstance.fields.id] && data[_this.listViewInstance.fields.id].toString())) || fields === data) {\n resultJSON.index = index;\n resultJSON.data = data;\n return true;\n }\n else {\n return false;\n }\n });\n return resultJSON;\n };\n Virtualization.prototype.getSelectedItems = function () {\n var _this = this;\n if (!isNullOrUndefined(this.activeIndex) || (this.listViewInstance.showCheckBox && this.uiIndices.activeIndices.length)) {\n var dataCollection_1 = [];\n var textCollection_1 = [];\n if (typeof this.listViewInstance.dataSource[0] === 'string' ||\n typeof this.listViewInstance.dataSource[0] === 'number') {\n var curViewDS_1 = this.listViewInstance.curViewDS;\n if (this.listViewInstance.showCheckBox) {\n this.uiIndices.activeIndices.forEach(function (index) {\n dataCollection_1.push(curViewDS_1[index]);\n });\n return {\n text: dataCollection_1,\n data: dataCollection_1,\n index: this.uiIndices.activeIndices.map(function (index) {\n return _this.listViewInstance.dataSource.indexOf(curViewDS_1[index]);\n })\n };\n }\n else {\n return {\n text: curViewDS_1[this.activeIndex],\n data: curViewDS_1[this.activeIndex],\n index: this.listViewInstance.dataSource.indexOf(curViewDS_1[this.activeIndex])\n };\n }\n }\n else {\n var curViewDS_2 = this.listViewInstance.curViewDS;\n var text_1 = this.listViewInstance.fields.text;\n if (this.listViewInstance.showCheckBox) {\n this.uiIndices.activeIndices.forEach(function (index) {\n textCollection_1.push(curViewDS_2[index][text_1]);\n dataCollection_1.push(curViewDS_2[index]);\n });\n return {\n text: textCollection_1,\n data: dataCollection_1,\n index: this.uiIndices.activeIndices.map(function (index) {\n return (_this.listViewInstance.dataSource).indexOf(curViewDS_2[index]);\n })\n };\n }\n else {\n return {\n text: curViewDS_2[this.activeIndex][this.listViewInstance.fields.text],\n data: curViewDS_2[this.activeIndex],\n index: this.listViewInstance.dataSource.indexOf(curViewDS_2[this.activeIndex])\n };\n }\n }\n }\n else {\n return undefined;\n }\n };\n Virtualization.prototype.selectItem = function (obj) {\n var resutJSON = this.findDSAndIndexFromId(this.listViewInstance.curViewDS, obj);\n if (Object.keys(resutJSON).length) {\n this.activeIndex = resutJSON.index;\n if (this.listViewInstance.showCheckBox && this.uiIndices.activeIndices.indexOf(resutJSON.index) === -1) {\n this.uiIndices.activeIndices.push(resutJSON.index);\n }\n this.listViewInstance.removeSelect();\n if (this.listViewInstance.showCheckBox && this.listViewInstance.curUL.querySelector('.' + classNames.focused)) {\n this.listViewInstance.curUL.querySelector('.' + classNames.focused).classList.remove(classNames.focused);\n }\n if (this.listViewInstance.getLiFromObjOrElement(obj)) {\n if (this.listViewInstance.showCheckBox) {\n this.listViewInstance.setCheckboxLI(this.listViewInstance.getLiFromObjOrElement(obj));\n }\n else {\n this.listViewInstance.setSelectLI(this.listViewInstance.getLiFromObjOrElement(obj));\n }\n }\n else {\n var eventArgs = void 0;\n if (typeof this.listViewInstance.dataSource[0] === 'string' ||\n typeof this.listViewInstance.dataSource[0] === 'number') {\n eventArgs = {\n text: this.listViewInstance.curViewDS[this.activeIndex],\n data: this.listViewInstance.curViewDS[this.activeIndex],\n index: this.activeIndex\n };\n }\n else {\n var curViewDS = this.listViewInstance.curViewDS;\n eventArgs = {\n text: curViewDS[this.activeIndex][this.listViewInstance.fields.text],\n data: curViewDS[this.activeIndex],\n index: this.uiIndices.activeIndices\n };\n }\n this.listViewInstance.trigger('select', eventArgs);\n }\n }\n };\n Virtualization.prototype.enableItem = function (obj) {\n var resutJSON = this.findDSAndIndexFromId(this.listViewInstance.curViewDS, obj);\n if (Object.keys(resutJSON).length) {\n this.uiIndices.disabledItemIndices.splice(this.uiIndices.disabledItemIndices.indexOf(resutJSON.index), 1);\n }\n };\n Virtualization.prototype.disableItem = function (obj) {\n var resutJSON = this.findDSAndIndexFromId(this.listViewInstance.curViewDS, obj);\n if (Object.keys(resutJSON).length && this.uiIndices.disabledItemIndices.indexOf(resutJSON.index) === -1) {\n this.uiIndices.disabledItemIndices.push(resutJSON.index);\n }\n };\n Virtualization.prototype.showItem = function (obj) {\n var resutJSON = this.findDSAndIndexFromId(this.listViewInstance.curViewDS, obj);\n if (Object.keys(resutJSON).length) {\n this.uiIndices.hiddenItemIndices.splice(this.uiIndices.hiddenItemIndices.indexOf(resutJSON.index), 1);\n }\n };\n Virtualization.prototype.hideItem = function (obj) {\n var resutJSON = this.findDSAndIndexFromId(this.listViewInstance.curViewDS, obj);\n if (Object.keys(resutJSON).length && this.uiIndices.hiddenItemIndices.indexOf(resutJSON.index) === -1) {\n this.uiIndices.hiddenItemIndices.push(resutJSON.index);\n }\n };\n Virtualization.prototype.removeItem = function (obj) {\n var dataSource;\n var resutJSON = this.findDSAndIndexFromId(this.listViewInstance.curViewDS, obj);\n if (Object.keys(resutJSON).length) {\n dataSource = resutJSON.data;\n if (this.listViewInstance.curViewDS[resutJSON.index - 1] &&\n this.listViewInstance.curViewDS[resutJSON.index - 1].isHeader &&\n (this.listViewInstance.curViewDS[resutJSON.index - 1])\n .items.length === 1) {\n this.removeUiItem(resutJSON.index - 1);\n this.removeUiItem(resutJSON.index - 1);\n }\n else {\n this.removeUiItem(resutJSON.index);\n }\n }\n var index = this.listViewInstance.dataSource.indexOf(dataSource);\n if (index !== -1) {\n this.listViewInstance.dataSource.splice(index, 1);\n this.listViewInstance.setViewDataSource(this.listViewInstance.dataSource);\n }\n };\n Virtualization.prototype.setCheckboxLI = function (li, e) {\n var index = Array.prototype.indexOf.call(this.listViewInstance.curUL.querySelectorAll('li'), li) + this.uiFirstIndex;\n this.activeIndex = Array.prototype.indexOf.call(this.listViewInstance.curUL.querySelectorAll('li'), li) + this.uiFirstIndex;\n if (li.classList.contains(classNames.selected)) {\n if (this.uiIndices.activeIndices.indexOf(index) === -1) {\n this.uiIndices.activeIndices.push(index);\n }\n }\n else {\n this.uiIndices.activeIndices.splice(this.uiIndices.activeIndices.indexOf(index), 1);\n }\n };\n Virtualization.prototype.setSelectLI = function (li, e) {\n this.activeIndex = Array.prototype.indexOf.call(this.listViewInstance.curUL.querySelectorAll('li'), li) + this.uiFirstIndex;\n };\n Virtualization.prototype.checkedItem = function (checked) {\n var _this = this;\n if (checked) {\n this.uiIndices.activeIndices = [];\n this.activeIndex = undefined;\n this.listViewInstance.curViewDS.forEach(function (ds, index) {\n if (!ds.isHeader) {\n _this.uiIndices.activeIndices.push(index);\n }\n });\n }\n else {\n this.activeIndex = undefined;\n this.uiIndices.activeIndices = [];\n }\n };\n Virtualization.prototype.addUiItem = function (index) {\n var curViewDs = this.listViewInstance.curViewDS;\n this.changeUiIndices(index, true);\n if (this.activeIndex && this.activeIndex >= index) {\n this.activeIndex++;\n }\n if (this.listViewInstance.showCheckBox &&\n curViewDs[index][this.listViewInstance.fields.isChecked]) {\n this.uiIndices.activeIndices.push(index);\n }\n if (!parseFloat(this.bottomElement.style.height) && !parseFloat(this.topElement.style.height)) {\n this.bottomElement.style.height = parseFloat(this.bottomElement.style.height) + this.listItemHeight + 'px';\n }\n if (parseFloat(this.bottomElement.style.height)) {\n var liItem = this.listViewInstance.curUL.lastElementChild.previousSibling;\n var target = this.listViewInstance.getLiFromObjOrElement(curViewDs[index + 1]) ||\n this.listViewInstance.getLiFromObjOrElement(curViewDs[index + 2]);\n if (target) {\n this.bottomElement.style.height = parseFloat(this.bottomElement.style.height) + this.listItemHeight + 'px';\n this.updateUI(liItem, index, target);\n }\n }\n else {\n var liItem = this.listViewInstance.curUL.firstElementChild.nextSibling;\n var target = void 0;\n if ((Object.keys(this.listViewInstance.curViewDS).length - 1) === index) {\n target = this.listViewInstance.curUL.lastElementChild;\n }\n else {\n target = this.listViewInstance.getLiFromObjOrElement(curViewDs[index + 1]) ||\n this.listViewInstance.getLiFromObjOrElement(curViewDs[index + 2]);\n }\n this.topElement.style.height = parseFloat(this.topElement.style.height) + this.listItemHeight + 'px';\n this.uiFirstIndex++;\n this.uiLastIndex++;\n if (target) {\n this.updateUI(liItem, index, target);\n this.listViewInstance.isWindow ? window.scrollTo(0, (pageYOffset + this.listItemHeight)) :\n this.listViewInstance.element.scrollTop += this.listItemHeight;\n }\n }\n this.totalHeight += this.listItemHeight;\n this.listDiff = parseFloat(this.topElement.style.height) / this.listItemHeight;\n };\n Virtualization.prototype.removeUiItem = function (index) {\n this.totalHeight -= this.listItemHeight;\n var curViewDS = this.listViewInstance.curViewDS[index];\n var liItem = this.listViewInstance.getLiFromObjOrElement(curViewDS);\n this.listViewInstance.curViewDS.splice(index, 1);\n if (this.activeIndex && this.activeIndex >= index) {\n this.activeIndex--;\n }\n if (liItem) {\n if (this.domItemCount > Object.keys(this.listViewInstance.curViewDS).length) {\n detach(liItem);\n this.domItemCount--;\n this.uiLastIndex--;\n this.totalHeight = 0;\n }\n else {\n if (liItem.classList.contains(classNames.disable)) {\n liItem.classList.remove(classNames.disable);\n this.uiIndices.disabledItemIndices.splice(this.uiIndices.disabledItemIndices.indexOf(index), 1);\n }\n if (liItem.style.display === 'none') {\n liItem.style.display = '';\n this.uiIndices.hiddenItemIndices.splice(this.uiIndices.hiddenItemIndices.indexOf(index), 1);\n }\n if (this.listViewInstance.showCheckBox && liItem.classList.contains(classNames.selected)) {\n this.listViewInstance.removeSelect();\n this.uiIndices.activeIndices.splice(this.uiIndices.activeIndices.indexOf(index), 1);\n var checklistElement = liItem.querySelector('.' + classNames.checkboxWrapper);\n checklistElement.removeAttribute('aria-checked');\n checklistElement.firstElementChild.classList.remove(classNames.checked);\n if (liItem.classList.contains(classNames.focused)) {\n liItem.classList.remove(classNames.focused);\n this.activeIndex = undefined;\n }\n }\n else if (liItem.classList.contains(classNames.selected)) {\n this.listViewInstance.removeSelect();\n this.activeIndex = undefined;\n }\n if (!parseFloat(this.bottomElement.style.height) && !parseFloat(this.topElement.style.height)) {\n this.updateUI(liItem, this.uiLastIndex, this.bottomElement);\n }\n else if (parseFloat(this.bottomElement.style.height)) {\n this.bottomElement.style.height = parseFloat(this.bottomElement.style.height) - this.listItemHeight + 'px';\n this.updateUI(liItem, this.uiLastIndex, this.bottomElement);\n }\n else {\n this.topElement.style.height = parseFloat(this.topElement.style.height) - this.listItemHeight + 'px';\n this.updateUI(liItem, (this.uiFirstIndex - 1), this.topElement.nextSibling);\n this.uiLastIndex--;\n this.uiFirstIndex--;\n }\n }\n }\n this.changeUiIndices(index, false);\n this.listDiff = parseFloat(this.topElement.style.height) / this.listItemHeight;\n };\n Virtualization.prototype.changeUiIndices = function (index, increment) {\n var _this = this;\n Object.keys(this.uiIndices).forEach(function (key) {\n _this.uiIndices[key] = _this.uiIndices[key].map(function (i) {\n if (i >= index) {\n return increment ? ++i : --i;\n }\n else {\n return i;\n }\n });\n });\n };\n Virtualization.prototype.addItem = function (data, fields) {\n var _this = this;\n data.forEach(function (dataSource) {\n _this.listViewInstance.dataSource.push(dataSource);\n _this.listViewInstance.setViewDataSource(_this.listViewInstance.dataSource);\n if (!_this.domItemCount) {\n _this.uiVirtualization();\n }\n else if (_this.domItemCount < _this.expectedDomItemCount) {\n _this.wireScrollEvent(true);\n detach(_this.listViewInstance.contentContainer);\n _this.uiVirtualization();\n }\n else {\n var index = _this.listViewInstance.curViewDS.indexOf(dataSource);\n _this.addUiItem(index);\n var curViewDS = _this.listViewInstance.curViewDS[index - 1];\n if (curViewDS && curViewDS.isHeader && curViewDS.items.length === 1) {\n _this.addUiItem(index - 1);\n }\n }\n });\n };\n Virtualization.prototype.createUIItem = function (args) {\n var template = document.createElement('div');\n var commonTemplate = '
' +\n ' ${' + this.listViewInstance.fields.text + '}
';\n template.innerHTML = this.listViewInstance.template || commonTemplate;\n var templateElements = template.getElementsByTagName('*');\n var groupTemplate = document.createElement('div');\n if (this.listViewInstance.fields.groupBy) {\n groupTemplate.innerHTML = this.listViewInstance.groupTemplate || commonTemplate;\n }\n var groupTemplateElements = groupTemplate.getElementsByTagName('*');\n if (args.curData.isHeader) {\n this.headerData = args.curData;\n }\n this.templateData = args.curData.isHeader ? args.curData.items[0] :\n args.curData;\n args.item.innerHTML = '';\n args.item.context = { data: args.curData, nodes: { flatTemplateNodes: [], groupTemplateNodes: [] } };\n for (var i = 0; i < templateElements.length; i++) {\n this.compileTemplate(templateElements[i], args.item, false);\n }\n for (var i = 0; i < groupTemplateElements.length; i++) {\n this.compileTemplate(groupTemplateElements[i], args.item, true);\n }\n args.item.context.template = args.curData.isHeader ? template.firstElementChild :\n groupTemplate.firstElementChild;\n args.item.context.type = args.curData.isHeader ? 'flatList' : 'groupList';\n var element = args.curData.isHeader ? groupTemplate : template;\n args.item.insertBefore(element.firstElementChild, null);\n };\n Virtualization.prototype.compileTemplate = function (element, item, isHeader) {\n this.textProperty(element, item, isHeader);\n this.classProperty(element, item, isHeader);\n this.attributeProperty(element, item, isHeader);\n };\n Virtualization.prototype.onChange = function (newData, listElement) {\n listElement.context.data = newData;\n var groupTemplateNodes = listElement.context.nodes.groupTemplateNodes;\n var flatTemplateNodes = listElement.context.nodes.flatTemplateNodes;\n if (!isNullOrUndefined(newData.isHeader) && newData.isHeader && listElement.context.type === 'groupList') {\n var element = listElement.firstElementChild;\n detach(listElement.firstElementChild);\n listElement.insertBefore(listElement.context.template, null);\n listElement.context.template = element;\n listElement.context.type = 'flatList';\n groupTemplateNodes.forEach(function (node) { return node.onChange(newData); });\n }\n else if (!newData.isHeader && listElement.context.type === 'flatList') {\n var element = listElement.firstElementChild;\n detach(listElement.firstElementChild);\n listElement.insertBefore(listElement.context.template, null);\n listElement.context.template = element;\n listElement.context.type = 'groupList';\n flatTemplateNodes.forEach(function (node) { return node.onChange(newData); });\n }\n else if (!newData.isHeader) {\n flatTemplateNodes.forEach(function (node) { return node.onChange(newData); });\n }\n else {\n groupTemplateNodes.forEach(function (node) { return node.onChange(newData); });\n }\n };\n Virtualization.prototype.updateContextData = function (listElement, node, isHeader) {\n if (isHeader) {\n listElement.context.nodes.groupTemplateNodes.push(node);\n }\n else {\n listElement.context.nodes.flatTemplateNodes.push(node);\n }\n };\n Virtualization.prototype.classProperty = function (element, listElement, isHeader) {\n var _this = this;\n var regex = new RegExp('\\\\${([^}]*)}', 'g');\n var resultantOutput = [];\n var regexMatch;\n while (regexMatch !== null) {\n var match = regex.exec(element.className);\n resultantOutput.push(match);\n regexMatch = match;\n if (regexMatch === null) {\n resultantOutput.pop();\n }\n }\n if (resultantOutput && resultantOutput.length) {\n resultantOutput.forEach(function (classNameMatch) {\n var classFunction;\n if (classNameMatch[1].indexOf('?') !== -1 && classNameMatch[1].indexOf(':') !== -1) {\n // tslint:disable-next-line:no-function-constructor-with-string-args\n classFunction = new Function('data', 'return ' + classNameMatch[1].replace(/\\$/g, 'data.'));\n }\n else {\n // tslint:disable-next-line:no-function-constructor-with-string-args\n classFunction = new Function('data', 'return ' + 'data.' + classNameMatch[1]);\n }\n var subNode = {};\n if (isHeader) {\n subNode.bindedvalue = classFunction(_this.headerData);\n }\n else {\n subNode.bindedvalue = classFunction(_this.templateData);\n }\n subNode.onChange = function (value) {\n element.classList.remove(subNode.bindedvalue);\n element.classList.add(classFunction(value));\n subNode.bindedvalue = classFunction(value);\n };\n classNameMatch[0].split(' ').forEach(function (className) {\n element.classList.remove(className);\n });\n element.classList.add(subNode.bindedvalue);\n _this.updateContextData(listElement, subNode, isHeader);\n });\n }\n };\n Virtualization.prototype.attributeProperty = function (element, listElement, isHeader) {\n var _this = this;\n var attributeNames = [];\n for (var i = 0; i < element.attributes.length; i++) {\n attributeNames.push(element.attributes[i].nodeName);\n }\n if (attributeNames.indexOf('class') !== -1) {\n attributeNames.splice(attributeNames.indexOf('class'), 1);\n }\n attributeNames.forEach(function (attributeName) {\n var attrNameMatch = new RegExp('\\\\${([^}]*)}', 'g').exec(attributeName) || [];\n var attrValueMatch = new RegExp('\\\\${([^}]*)}', 'g').exec(element.getAttribute(attributeName))\n || [];\n var attributeNameFunction;\n var attributeValueFunction;\n if (attrNameMatch.length || attrValueMatch.length) {\n if (attrNameMatch[1]) {\n // tslint:disable-next-line:no-function-constructor-with-string-args\n attributeNameFunction = new Function('data', 'return ' + 'data.' + attrNameMatch[1]);\n }\n if (attrValueMatch[1]) {\n if (attrValueMatch[1].indexOf('?') !== -1 && attrValueMatch[1].indexOf(':') !== -1) {\n // tslint:disable-next-line:no-function-constructor-with-string-args\n attributeValueFunction = new Function('data', 'return ' + attrValueMatch[1].replace(/\\$/g, 'data.'));\n }\n else {\n // tslint:disable-next-line:no-function-constructor-with-string-args\n attributeValueFunction = new Function('data', 'return ' + 'data.' + attrValueMatch[1]);\n }\n }\n var subNode_1 = {};\n if (isHeader) {\n subNode_1.bindedvalue = [attrNameMatch[1] === undefined ? undefined : attributeNameFunction(_this.headerData),\n attrValueMatch[1] === undefined ? undefined : attributeValueFunction(_this.headerData)];\n }\n else {\n subNode_1.bindedvalue = [attrNameMatch[1] === undefined ? undefined : attributeNameFunction(_this.templateData),\n attrValueMatch[1] === undefined ? undefined : attributeValueFunction(_this.templateData)];\n }\n subNode_1.attrName = subNode_1.bindedvalue[0] === undefined ?\n attributeName : subNode_1.bindedvalue[0];\n subNode_1.onChange = function (value) {\n var bindedvalue = subNode_1.bindedvalue[1] === undefined ?\n element.getAttribute(subNode_1.attrName) : attributeValueFunction(value);\n element.removeAttribute(subNode_1.attrName);\n subNode_1.attrName = subNode_1.bindedvalue[0] === undefined ? subNode_1.attrName : attributeNameFunction(value);\n element.setAttribute(subNode_1.attrName, bindedvalue);\n subNode_1.bindedvalue = [subNode_1.bindedvalue[0] === undefined ? undefined : attributeNameFunction(value),\n subNode_1.bindedvalue[1] === undefined ? undefined : attributeValueFunction(value)];\n };\n var attributeValue = subNode_1.bindedvalue[1] === undefined ? element.getAttribute(attributeName) :\n subNode_1.bindedvalue[1];\n element.removeAttribute(attributeName);\n element.setAttribute(subNode_1.attrName, attributeValue);\n _this.updateContextData(listElement, subNode_1, isHeader);\n }\n });\n };\n Virtualization.prototype.textProperty = function (element, listElement, isHeader) {\n var _this = this;\n var regex = new RegExp('\\\\${([^}]*)}', 'g');\n var resultantOutput = [];\n var regexMatch;\n while (regexMatch !== null) {\n var match = regex.exec(element.innerText);\n resultantOutput.push(match);\n regexMatch = match;\n if (regexMatch === null) {\n resultantOutput.pop();\n }\n }\n var isChildHasTextContent = Array.prototype.some.call(element.children, function (element) {\n if (new RegExp('\\\\${([^}]*)}', 'g').exec(element.innerText)) {\n return true;\n }\n else {\n return false;\n }\n });\n if (resultantOutput && resultantOutput.length && !isChildHasTextContent) {\n resultantOutput.forEach(function (textPropertyMatch) {\n var subNode = {};\n var textFunction;\n if (textPropertyMatch[1].indexOf('?') !== -1 && textPropertyMatch[1].indexOf(':') !== -1) {\n // tslint:disable-next-line:no-function-constructor-with-string-args\n textFunction = new Function('data', 'return ' + textPropertyMatch[1].replace(/\\$/g, 'data.'));\n }\n else {\n // tslint:disable-next-line:no-function-constructor-with-string-args\n textFunction = new Function('data', 'return ' + 'data.' + textPropertyMatch[1]);\n }\n if (isHeader) {\n subNode.bindedvalue = textFunction(_this.headerData);\n }\n else {\n subNode.bindedvalue = textFunction(_this.templateData);\n }\n subNode.onChange = function (value) {\n element.innerText = element.innerText.replace(subNode.bindedvalue, textFunction(value));\n subNode.bindedvalue = textFunction(value);\n };\n element.innerText = element.innerText.replace(textPropertyMatch[0], subNode.bindedvalue);\n _this.updateContextData(listElement, subNode, isHeader);\n });\n }\n };\n Virtualization.prototype.reRenderUiVirtualization = function () {\n this.wireScrollEvent(true);\n if (this.listViewInstance.contentContainer) {\n detach(this.listViewInstance.contentContainer);\n }\n this.listViewInstance.preRender();\n this.listViewInstance.localData = this.listViewInstance.dataSource;\n this.listViewInstance.renderList();\n };\n Virtualization.prototype.updateUI = function (element, index, targetElement) {\n if (this.listViewInstance.template || this.listViewInstance.groupTemplate) {\n var curViewDS = this.listViewInstance.curViewDS[index];\n element.dataset.uid = curViewDS[this.listViewInstance.fields.id] ?\n curViewDS[this.listViewInstance.fields.id].toString() : ListBase.generateId();\n this.onChange(curViewDS, element);\n }\n else {\n this.updateUiContent(element, index);\n }\n this.changeElementAttributes(element, index);\n if (targetElement) {\n this.listViewInstance.ulElement.insertBefore(element, targetElement);\n }\n };\n Virtualization.prototype.getModuleName = function () {\n return 'virtualization';\n };\n Virtualization.prototype.destroy = function () {\n this.wireScrollEvent(true);\n };\n return Virtualization;\n}());\nexport { Virtualization };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, EventHandler, Internationalization, } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, L10n } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { cldrData, getDefaultDateObject, rippleEffect } from '@syncfusion/ej2-base';\nimport { createElement, removeClass, detach, closest, addClass, attributes } from '@syncfusion/ej2-base';\nimport { getValue, getUniqueID, extend, Browser } from '@syncfusion/ej2-base';\nimport { Property, Event, isNullOrUndefined } from '@syncfusion/ej2-base';\n//class constant defination.\nvar OTHERMONTH = 'e-other-month';\nvar ROOT = 'e-calendar';\nvar DEVICE = 'e-device';\nvar HEADER = 'e-header';\nvar RTL = 'e-rtl';\nvar CONTENT = 'e-content';\nvar YEAR = 'e-year';\nvar MONTH = 'e-month';\nvar DECADE = 'e-decade';\nvar ICON = 'e-icons';\nvar PREVICON = 'e-prev';\nvar NEXTICON = 'e-next';\nvar PREVSPAN = 'e-date-icon-prev';\nvar NEXTSPAN = 'e-date-icon-next ';\nvar ICONCONTAINER = 'e-icon-container';\nvar DISABLED = 'e-disabled';\nvar OVERLAY = 'e-overlay';\nvar WEEKEND = 'e-weekend';\nvar WEEKNUMBER = 'e-week-number';\nvar SELECTED = 'e-selected';\nvar FOCUSEDDATE = 'e-focused-date';\nvar OTHERMONTHROW = 'e-month-hide';\nvar TODAY = 'e-today';\nvar TITLE = 'e-title';\nvar LINK = 'e-day';\nvar CELL = 'e-cell';\nvar WEEKHEADER = 'e-week-header';\nvar ZOOMIN = 'e-zoomin';\nvar FOOTER = 'e-footer-container';\nvar BTN = 'e-btn';\nvar FLAT = 'e-flat';\nvar CSS = 'e-css';\nvar PRIMARY = 'e-primary';\nvar dayMilliSeconds = 86400000;\nvar minutesMilliSeconds = 60000;\n/**\n *\n * @private\n */\nvar CalendarBase = /** @class */ (function (_super) {\n __extends(CalendarBase, _super);\n /**\n * Initialized new instance of Calendar Class.\n * Constructor for creating the widget\n * @param {CalendarModel} options?\n * @param {string|HTMLElement} element?\n */\n function CalendarBase(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.effect = '';\n _this.keyConfigs = {\n controlUp: 'ctrl+38',\n controlDown: 'ctrl+40',\n moveDown: 'downarrow',\n moveUp: 'uparrow',\n moveLeft: 'leftarrow',\n moveRight: 'rightarrow',\n select: 'enter',\n home: 'home',\n end: 'end',\n pageUp: 'pageup',\n pageDown: 'pagedown',\n shiftPageUp: 'shift+pageup',\n shiftPageDown: 'shift+pagedown',\n controlHome: 'ctrl+home',\n controlEnd: 'ctrl+end',\n altUpArrow: 'alt+uparrow',\n spacebar: 'space'\n };\n return _this;\n }\n /**\n * To Initialize the control rendering.\n * @returns void\n * @private\n */\n CalendarBase.prototype.render = function () {\n this.globalize = new Internationalization(this.locale);\n this.todayDisabled = false;\n this.todayDate = new Date(new Date().setHours(0, 0, 0, 0));\n if (this.getModuleName() === 'calendar') {\n this.element.classList.add(ROOT);\n if (this.enableRtl) {\n this.element.classList.add(RTL);\n }\n if (Browser.isDevice) {\n this.element.classList.add(DEVICE);\n }\n attributes(this.element, {\n 'data-role': 'calendar'\n });\n }\n else {\n this.calendarElement = createElement('div');\n this.calendarElement.classList.add(ROOT);\n if (this.enableRtl) {\n this.calendarElement.classList.add(RTL);\n }\n if (Browser.isDevice) {\n this.calendarElement.classList.add(DEVICE);\n }\n attributes(this.calendarElement, {\n 'role': 'calendar'\n });\n }\n this.createHeader();\n this.createContent();\n this.wireEvents();\n };\n CalendarBase.prototype.validateDate = function (value) {\n this.setProperties({ min: this.checkDateValue(new Date('' + this.min)) }, true);\n this.setProperties({ max: this.checkDateValue(new Date('' + this.max)) }, true);\n this.currentDate = this.currentDate ? this.currentDate : new Date(new Date().setHours(0, 0, 0, 0));\n if (!isNullOrUndefined(value) && this.min <= this.max && value >= this.min && value <= this.max) {\n this.currentDate = new Date('' + value);\n }\n };\n CalendarBase.prototype.minMaxUpdate = function (value) {\n if (!(+this.min <= +this.max)) {\n this.setProperties({ min: this.min }, true);\n addClass([this.element], OVERLAY);\n }\n else {\n removeClass([this.element], OVERLAY);\n }\n this.min = isNullOrUndefined(this.min) || !(+this.min) ? this.min = new Date(1900, 0, 1) : this.min;\n this.max = isNullOrUndefined(this.max) || !(+this.max) ? this.max = new Date(2099, 11, 31) : this.max;\n if (+this.min <= +this.max && value && +value <= +this.max && +value >= +this.min) {\n this.currentDate = new Date('' + value);\n }\n else {\n if (+this.min <= +this.max && !value && +this.currentDate > +this.max) {\n this.currentDate = new Date('' + this.max);\n }\n else {\n if (+this.currentDate < +this.min) {\n this.currentDate = new Date('' + this.min);\n }\n }\n }\n };\n CalendarBase.prototype.createHeader = function () {\n var ariaPrevAttrs = {\n 'aria-disabled': 'false',\n 'aria-label': 'previous month'\n };\n var ariaNextAttrs = {\n 'aria-disabled': 'false',\n 'aria-label': 'next month'\n };\n var ariaTitleAttrs = {\n 'aria-atomic': 'true', 'aria-live': 'assertive', 'aria-label': 'title'\n };\n this.headerElement = createElement('div', { className: HEADER });\n var iconContainer = createElement('div', { className: ICONCONTAINER });\n this.previousIcon = createElement('button', { className: '' + PREVICON, attrs: { type: 'button' } });\n rippleEffect(this.previousIcon, {\n duration: 400,\n selector: '.e-prev',\n isCenterRipple: true\n });\n attributes(this.previousIcon, ariaPrevAttrs);\n this.nextIcon = createElement('button', { className: '' + NEXTICON, attrs: { type: 'button' } });\n rippleEffect(this.nextIcon, {\n selector: '.e-next',\n duration: 400,\n isCenterRipple: true\n });\n attributes(this.nextIcon, ariaNextAttrs);\n this.headerTitleElement = createElement('div', { className: '' + LINK + ' ' + TITLE });\n attributes(this.headerTitleElement, ariaTitleAttrs);\n this.headerElement.appendChild(this.headerTitleElement);\n this.previousIcon.appendChild(createElement('span', { className: '' + PREVSPAN + ' ' + ICON }));\n this.nextIcon.appendChild(createElement('span', { className: '' + NEXTSPAN + ' ' + ICON }));\n iconContainer.appendChild(this.previousIcon);\n iconContainer.appendChild(this.nextIcon);\n this.headerElement.appendChild(iconContainer);\n if (this.getModuleName() === 'calendar') {\n this.element.appendChild(this.headerElement);\n }\n else {\n this.calendarElement.appendChild(this.headerElement);\n }\n };\n CalendarBase.prototype.createContent = function () {\n this.contentElement = createElement('div', { className: CONTENT });\n this.table = createElement('table', { attrs: { tabIndex: '0', 'role': 'grid', 'aria-activedescendant': '' } });\n if (this.getModuleName() === 'calendar') {\n this.element.appendChild(this.contentElement);\n }\n else {\n this.calendarElement.appendChild(this.contentElement);\n }\n this.contentElement.appendChild(this.table);\n this.createContentHeader();\n this.createContentBody();\n if (this.showTodayButton) {\n this.createContentFooter();\n }\n };\n CalendarBase.prototype.getCultureValues = function () {\n var culShortNames = [];\n var cldrObj;\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrObj = (getValue('days.stand-alone.short', getDefaultDateObject()));\n }\n else {\n cldrObj = (this.getCultureObjects(cldrData, '' + this.locale));\n }\n for (var _i = 0, _a = Object.keys(cldrObj); _i < _a.length; _i++) {\n var obj = _a[_i];\n culShortNames.push(getValue(obj, cldrObj));\n }\n return culShortNames;\n };\n CalendarBase.prototype.createContentHeader = function () {\n if (this.getModuleName() === 'calendar') {\n if (!isNullOrUndefined(this.element.querySelectorAll('.e-content .e-week-header')[0])) {\n detach(this.element.querySelectorAll('.e-content .e-week-header')[0]);\n }\n }\n else {\n if (!isNullOrUndefined(this.calendarElement.querySelectorAll('.e-content .e-week-header')[0])) {\n detach(this.calendarElement.querySelectorAll('.e-content .e-week-header')[0]);\n }\n }\n var daysCount = 6;\n var html = '';\n var shortNames;\n if (this.firstDayOfWeek > 6 || this.firstDayOfWeek < 0) {\n this.setProperties({ firstDayOfWeek: 0 }, true);\n }\n this.tableHeadElement = createElement('thead', { className: WEEKHEADER });\n if (this.weekNumber) {\n html += '';\n if (this.getModuleName() === 'calendar') {\n addClass([this.element], '' + WEEKNUMBER);\n }\n else {\n addClass([this.calendarElement], '' + WEEKNUMBER);\n }\n }\n shortNames = this.shiftArray(((this.getCultureValues().length > 0 && this.getCultureValues())), this.firstDayOfWeek);\n for (var days = 0; days <= daysCount; days++) {\n html += '' + shortNames[days] + '';\n }\n html = '' + html + '';\n this.tableHeadElement.innerHTML = html;\n this.table.appendChild(this.tableHeadElement);\n };\n CalendarBase.prototype.createContentBody = function () {\n if (this.getModuleName() === 'calendar') {\n if (!isNullOrUndefined(this.element.querySelectorAll('.e-content tbody')[0])) {\n detach(this.element.querySelectorAll('.e-content tbody')[0]);\n }\n }\n else {\n if (!isNullOrUndefined(this.calendarElement.querySelectorAll('.e-content tbody')[0])) {\n detach(this.calendarElement.querySelectorAll('.e-content tbody')[0]);\n }\n }\n switch (this.start) {\n case 'Year':\n this.renderYears();\n break;\n case 'Decade':\n this.renderDecades();\n break;\n default:\n this.renderMonths();\n }\n };\n CalendarBase.prototype.updateFooter = function () {\n this.todayElement.textContent = this.l10.getConstant('today');\n };\n CalendarBase.prototype.createContentFooter = function () {\n if (this.showTodayButton) {\n var minimum = new Date(+this.min);\n var maximum = new Date(+this.max);\n var l10nLocale = { today: 'Today' };\n this.globalize = new Internationalization(this.locale);\n this.l10 = new L10n(this.getModuleName(), l10nLocale, this.locale);\n this.todayElement = createElement('button');\n rippleEffect(this.todayElement);\n this.updateFooter();\n addClass([this.todayElement], [BTN, TODAY, FLAT, PRIMARY, CSS]);\n if ((!(+new Date(minimum.setHours(0, 0, 0, 0)) <= +this.todayDate &&\n +this.todayDate <= +new Date(maximum.setHours(0, 0, 0, 0)))) || (this.todayDisabled)) {\n addClass([this.todayElement], DISABLED);\n }\n this.footer = createElement('div', { className: FOOTER });\n this.footer.appendChild(this.todayElement);\n if (this.getModuleName() === 'calendar') {\n this.element.appendChild(this.footer);\n }\n if (this.getModuleName() === 'datepicker') {\n this.calendarElement.appendChild(this.footer);\n }\n if (this.getModuleName() === 'datetimepicker') {\n this.calendarElement.appendChild(this.footer);\n }\n if (!this.todayElement.classList.contains(DISABLED)) {\n EventHandler.add(this.todayElement, 'click', this.todayButtonClick, this);\n }\n }\n };\n CalendarBase.prototype.wireEvents = function () {\n EventHandler.add(this.headerTitleElement, 'click', this.navigateTitle, this);\n if (this.getModuleName() === 'calendar') {\n this.keyboardModule = new KeyboardEvents(this.element, {\n eventName: 'keydown',\n keyAction: this.keyActionHandle.bind(this),\n keyConfigs: this.keyConfigs\n });\n }\n else {\n this.keyboardModule = new KeyboardEvents(this.calendarElement, {\n eventName: 'keydown',\n keyAction: this.keyActionHandle.bind(this),\n keyConfigs: this.keyConfigs\n });\n }\n };\n CalendarBase.prototype.todayButtonClick = function (value) {\n if (this.showTodayButton) {\n if (this.currentView() === this.depth) {\n this.effect = '';\n }\n else {\n this.effect = 'e-zoomin';\n }\n if (this.getViewNumber(this.start) >= this.getViewNumber(this.depth)) {\n this.navigateTo(this.depth, new Date('' + value));\n }\n else {\n this.navigateTo('Month', new Date('' + value));\n }\n }\n };\n CalendarBase.prototype.keyActionHandle = function (e, value) {\n var view = this.getViewNumber(this.currentView());\n var focusedDate = this.tableBodyElement.querySelector('tr td.e-focused-date');\n var selectedDate = this.tableBodyElement.querySelector('tr td.e-selected');\n var depthValue = this.getViewNumber(this.depth);\n var levelRestrict = (view === depthValue && this.getViewNumber(this.start) >= depthValue);\n this.effect = '';\n switch (e.action) {\n case 'moveLeft':\n this.KeyboardNavigate(-1, view, e, this.max, this.min);\n e.preventDefault();\n break;\n case 'moveRight':\n this.KeyboardNavigate(1, view, e, this.max, this.min);\n e.preventDefault();\n break;\n case 'moveUp':\n if (view === 0) {\n this.KeyboardNavigate(-7, view, e, this.max, this.min); // move the current date to the previous seven days.\n }\n else {\n this.KeyboardNavigate(-4, view, e, this.max, this.min); // move the current year to the previous four days.\n }\n e.preventDefault();\n break;\n case 'moveDown':\n if (view === 0) {\n this.KeyboardNavigate(7, view, e, this.max, this.min);\n }\n else {\n this.KeyboardNavigate(4, view, e, this.max, this.min);\n }\n e.preventDefault();\n break;\n case 'select':\n if (e.target === this.todayElement) {\n this.todayButtonClick(value);\n }\n else {\n var element = !isNullOrUndefined(focusedDate) ? focusedDate : selectedDate;\n if (!isNullOrUndefined(element) && !element.classList.contains(DISABLED)) {\n if (levelRestrict) {\n var d = new Date(parseInt('' + (element).id, 0));\n this.selectDate(e, d, (element), value);\n }\n else {\n this.contentClick(null, --view, (element), value);\n }\n }\n }\n break;\n case 'controlUp':\n this.title();\n e.preventDefault();\n break;\n case 'controlDown':\n if (!isNullOrUndefined(focusedDate) || !isNullOrUndefined(selectedDate) && !levelRestrict) {\n this.contentClick(null, --view, (focusedDate || selectedDate), value);\n }\n e.preventDefault();\n break;\n case 'home':\n this.currentDate = this.firstDay(this.currentDate);\n detach(this.tableBodyElement);\n this.renderMonths(e);\n e.preventDefault();\n break;\n case 'end':\n this.currentDate = this.lastDay(this.currentDate);\n detach(this.tableBodyElement);\n this.renderMonths(e);\n e.preventDefault();\n break;\n case 'pageUp':\n this.addMonths(this.currentDate, -1);\n this.navigateTo('Month', this.currentDate);\n e.preventDefault();\n break;\n case 'pageDown':\n this.addMonths(this.currentDate, 1);\n this.navigateTo('Month', this.currentDate);\n e.preventDefault();\n break;\n case 'shiftPageUp':\n this.addYears(this.currentDate, -1);\n this.navigateTo('Month', this.currentDate);\n e.preventDefault();\n break;\n case 'shiftPageDown':\n this.addYears(this.currentDate, 1);\n this.navigateTo('Month', this.currentDate);\n e.preventDefault();\n break;\n case 'controlHome':\n this.navigateTo('Month', new Date(this.currentDate.getFullYear(), 0, 1));\n e.preventDefault();\n break;\n case 'controlEnd':\n this.navigateTo('Month', new Date(this.currentDate.getFullYear(), 11, 31));\n e.preventDefault();\n break;\n }\n if (this.getModuleName() === 'calendar') {\n this.table.focus();\n }\n };\n CalendarBase.prototype.KeyboardNavigate = function (number, currentView, e, max, min) {\n var date = new Date('' + this.currentDate);\n switch (currentView) {\n case 2:\n this.addYears(this.currentDate, number);\n if (this.isMinMaxRange(this.currentDate)) {\n detach(this.tableBodyElement);\n this.renderDecades(e);\n }\n else {\n this.currentDate = date;\n }\n break;\n case 1:\n this.addMonths(this.currentDate, number);\n if (this.isMinMaxRange(this.currentDate)) {\n detach(this.tableBodyElement);\n this.renderYears(e);\n }\n else {\n this.currentDate = date;\n }\n break;\n case 0:\n this.addDay(this.currentDate, number, e, max, min);\n if (this.isMinMaxRange(this.currentDate)) {\n detach(this.tableBodyElement);\n this.renderMonths(e);\n }\n else {\n this.currentDate = date;\n }\n break;\n }\n };\n /**\n * Initialize the event handler\n * @private\n */\n CalendarBase.prototype.preRender = function (value) {\n var _this = this;\n this.navigatePreviousHandler = this.navigatePrevious.bind(this);\n this.navigateNextHandler = this.navigateNext.bind(this);\n this.navigateHandler = function (e) {\n _this.triggerNavigate(e);\n };\n };\n ;\n CalendarBase.prototype.minMaxDate = function (localDate) {\n var currentDate = new Date(new Date(+localDate).setHours(0, 0, 0, 0));\n var minDate = new Date(new Date(+this.min).setHours(0, 0, 0, 0));\n var maxDate = new Date(new Date(+this.max).setHours(0, 0, 0, 0));\n if (+currentDate === +minDate || +currentDate === +maxDate) {\n if (+localDate < +this.min) {\n localDate = new Date(+this.min);\n }\n if (+localDate > +this.max) {\n localDate = new Date(+this.max);\n }\n }\n return localDate;\n };\n CalendarBase.prototype.renderMonths = function (e, value) {\n var numCells = this.weekNumber ? 8 : 7;\n var tdEles = this.renderDays(this.currentDate, e, value);\n this.createContentHeader();\n this.renderTemplate(tdEles, numCells, MONTH, e, value);\n };\n CalendarBase.prototype.renderDays = function (currentDate, e, value) {\n var tdEles = [];\n var cellsCount = 42;\n var localDate = new Date('' + currentDate);\n var minMaxDate;\n var numCells = this.weekNumber ? 8 : 7;\n // 8 and 7 denotes the number of columns to be specified.\n var currentMonth = localDate.getMonth();\n this.titleUpdate(currentDate, 'days');\n var d = localDate;\n localDate = new Date(d.getFullYear(), d.getMonth(), 0, d.getHours(), d.getMinutes(), d.getSeconds(), d.getMilliseconds());\n while (localDate.getDay() !== this.firstDayOfWeek) {\n this.setStartDate(localDate, -1 * dayMilliSeconds);\n }\n for (var day = 0; day < cellsCount; ++day) {\n var weekEle = createElement('td', { className: CELL });\n var weekAnchor = createElement('span');\n if (day % 7 === 0 && this.weekNumber) {\n weekAnchor.textContent = '' + this.getWeek(localDate);\n weekEle.appendChild(weekAnchor);\n addClass([weekEle], '' + WEEKNUMBER);\n tdEles.push(weekEle);\n }\n minMaxDate = new Date(+localDate);\n localDate = this.minMaxDate(localDate);\n var dateFormatOptions = { type: 'dateTime', skeleton: 'full' };\n var date = this.globalize.parseDate(this.globalize.formatDate(localDate, dateFormatOptions), dateFormatOptions);\n var tdEle = this.dayCell(localDate);\n var title = this.globalize.formatDate(localDate, { type: 'date', skeleton: 'full' });\n var dayLink = createElement('span');\n dayLink.textContent = this.globalize.formatDate(localDate, { type: 'date', skeleton: 'd' });\n var disabled = (this.min > localDate) || (this.max < localDate);\n if (disabled) {\n addClass([tdEle], DISABLED);\n addClass([tdEle], OVERLAY);\n }\n else {\n dayLink.setAttribute('title', '' + title);\n }\n if (currentMonth !== localDate.getMonth()) {\n addClass([tdEle], OTHERMONTH);\n }\n if (localDate.getDay() === 0 || localDate.getDay() === 6) {\n addClass([tdEle], WEEKEND);\n }\n tdEle.appendChild(dayLink);\n this.renderDayCellArgs = {\n date: localDate,\n isDisabled: false,\n element: tdEle,\n isOutOfRange: disabled\n };\n var argument = this.renderDayCellArgs;\n this.renderDayCellEvent(argument);\n if (argument.isDisabled) {\n if (value && +value === +argument.date) {\n this.setProperties({ value: null }, true);\n }\n }\n if (this.renderDayCellArgs.isDisabled && !tdEle.classList.contains(SELECTED)) {\n addClass([tdEle], DISABLED);\n addClass([tdEle], OVERLAY);\n if (+this.renderDayCellArgs.date === +this.todayDate) {\n this.todayDisabled = true;\n }\n }\n var otherMnthBool = tdEle.classList.contains(OTHERMONTH);\n var disabledCls = tdEle.classList.contains(DISABLED);\n if (!disabledCls) {\n EventHandler.add(tdEle, 'click', this.clickHandler, this);\n }\n // to set the value as null while setting the disabled date onProperty change.\n // if (args.isDisabled && +this.value === +args.date) {\n // this.setProperties({ value: null }, true);\n // }\n if (!otherMnthBool && !disabledCls && this.getDateVal(localDate, value)) {\n addClass([tdEle], SELECTED);\n }\n else {\n if (currentDate.getDate() === localDate.getDate() && !otherMnthBool && !disabledCls) {\n addClass([tdEle], FOCUSEDDATE);\n }\n else {\n if (currentDate >= this.max && parseInt(tdEle.id, 0) === +this.max && !otherMnthBool && !disabledCls) {\n addClass([tdEle], FOCUSEDDATE);\n }\n if (currentDate <= this.min && parseInt(tdEle.id, 0) === +this.min && !otherMnthBool && !disabledCls) {\n addClass([tdEle], FOCUSEDDATE);\n }\n }\n }\n if (date.getMonth() === new Date().getMonth() && date.getDate() === new Date().getDate()) {\n if (date.getFullYear() === new Date().getFullYear()) {\n addClass([tdEle], TODAY);\n }\n }\n tdEles.push(this.renderDayCellArgs.element);\n localDate = new Date(+minMaxDate);\n this.addDay(localDate, 1, null, this.max, this.min);\n }\n return tdEles;\n };\n CalendarBase.prototype.renderYears = function (e, value) {\n this.removeTableHeadElement();\n var numCells = 4;\n var days;\n var tdEles = [];\n var valueUtil = isNullOrUndefined(value);\n var curDate = new Date('' + this.currentDate);\n var mon = curDate.getMonth();\n var yr = curDate.getFullYear();\n var localDate = curDate;\n var curYrs = localDate.getFullYear();\n var minYr = new Date('' + this.min).getFullYear();\n var minMonth = new Date('' + this.min).getMonth();\n var maxYr = new Date('' + this.max).getFullYear();\n var maxMonth = new Date('' + this.max).getMonth();\n localDate.setMonth(0);\n this.titleUpdate(this.currentDate, 'months');\n var disabled = (this.min > localDate) || (this.max < localDate);\n localDate.setDate(1);\n for (var month = 0; month < 12; ++month) {\n var tdEle = this.dayCell(localDate);\n var dayLink = createElement('span');\n var localMonth = (value && (value).getMonth() === localDate.getMonth());\n var select = (value && (value).getFullYear() === yr && localMonth);\n dayLink.textContent = this.globalize.formatDate(localDate, { type: 'dateTime', skeleton: 'MMM' });\n if ((this.min && (curYrs < minYr || (month < minMonth && curYrs === minYr))) || (this.max && (curYrs > maxYr || (month > maxMonth && curYrs >= maxYr)))) {\n addClass([tdEle], DISABLED);\n }\n else if (!valueUtil && select) {\n addClass([tdEle], SELECTED);\n }\n else {\n if (localDate.getMonth() === mon && this.currentDate.getMonth() === mon) {\n addClass([tdEle], FOCUSEDDATE);\n }\n }\n localDate.setDate(1);\n localDate.setMonth(localDate.getMonth() + 1);\n if (!tdEle.classList.contains(DISABLED)) {\n EventHandler.add(tdEle, 'click', this.clickHandler, this);\n }\n tdEle.appendChild(dayLink);\n tdEles.push(tdEle);\n }\n this.renderTemplate(tdEles, numCells, YEAR, e, value);\n };\n CalendarBase.prototype.renderDecades = function (e, value) {\n this.removeTableHeadElement();\n var numCells = 4;\n var yearCell = 12;\n var tdEles = [];\n var localDate = new Date('' + this.currentDate);\n localDate.setMonth(0);\n localDate.setDate(1);\n var localYr = localDate.getFullYear();\n var startYr = new Date('' + (localYr - localYr % 10));\n var endYr = new Date('' + (localYr - localYr % 10 + (10 - 1)));\n var startHdrYr = this.globalize.formatDate(startYr, { type: 'dateTime', skeleton: 'y' });\n var endHdrYr = this.globalize.formatDate(endYr, { type: 'dateTime', skeleton: 'y' });\n this.headerTitleElement.textContent = startHdrYr + ' - ' + (endHdrYr);\n var start = new Date(localYr - (localYr % 10) - 1, 0, 1);\n var startYear = start.getFullYear();\n for (var rowIterator = 0; rowIterator < yearCell; ++rowIterator) {\n var year = startYear + rowIterator;\n localDate.setFullYear(year);\n var tdEle = this.dayCell(localDate);\n attributes(tdEle, { 'role': 'gridcell' });\n var dayLink = createElement('span');\n dayLink.textContent = this.globalize.formatDate(localDate, { type: 'dateTime', skeleton: 'y' });\n if (year < new Date('' + this.min).getFullYear() || year > new Date('' + this.max).getFullYear()) {\n addClass([tdEle], DISABLED);\n }\n else if (!isNullOrUndefined(value) && localDate.getFullYear() === (value).getFullYear()) {\n addClass([tdEle], SELECTED);\n }\n else {\n if (localDate.getFullYear() === this.currentDate.getFullYear() && !tdEle.classList.contains(DISABLED)) {\n addClass([tdEle], FOCUSEDDATE);\n }\n }\n if (!tdEle.classList.contains(DISABLED)) {\n EventHandler.add(tdEle, 'click', this.clickHandler, this);\n }\n tdEle.appendChild(dayLink);\n tdEles.push(tdEle);\n }\n this.renderTemplate(tdEles, numCells, 'e-decade', e, value);\n };\n CalendarBase.prototype.dayCell = function (localDate) {\n var dateFormatOptions = { skeleton: 'full', type: 'dateTime' };\n var date = this.globalize.parseDate(this.globalize.formatDate(localDate, dateFormatOptions), dateFormatOptions);\n var value = date.valueOf();\n var attrs = {\n className: CELL, attrs: { 'id': '' + getUniqueID('' + value), 'aria-selected': 'false', 'role': 'gridcell' }\n };\n return createElement('td', attrs);\n };\n CalendarBase.prototype.firstDay = function (date) {\n var collection = this.tableBodyElement.querySelectorAll('td' + ':not(.' + OTHERMONTH + '');\n if (collection.length) {\n for (var i = 0; i < collection.length; i++) {\n if (!collection[i].classList.contains(DISABLED)) {\n date = new Date(parseInt(collection[i].id, 0));\n break;\n }\n }\n }\n return date;\n };\n CalendarBase.prototype.lastDay = function (date) {\n var lastDate = new Date(date.getFullYear(), date.getMonth() + 1, 0);\n var timeOffset = Math.abs(lastDate.getTimezoneOffset() - this.firstDay(date).getTimezoneOffset());\n if (timeOffset) {\n lastDate.setHours(this.firstDay(date).getHours() + (timeOffset / 60));\n }\n return this.findLastDay(lastDate);\n };\n ;\n CalendarBase.prototype.checkDateValue = function (value) {\n return (!isNullOrUndefined(value) && value instanceof Date && !isNaN(+value)) ? value : null;\n };\n CalendarBase.prototype.findLastDay = function (date) {\n var collection = this.tableBodyElement.querySelectorAll('td' + ':not(.' + OTHERMONTH + '');\n if (collection.length) {\n for (var i = collection.length - 1; i >= 0; i--) {\n if (!collection[i].classList.contains(DISABLED)) {\n date = new Date(parseInt(collection[i].id, 0));\n break;\n }\n }\n }\n return date;\n };\n CalendarBase.prototype.removeTableHeadElement = function () {\n if (this.getModuleName() === 'calendar') {\n if (!isNullOrUndefined(this.element.querySelectorAll('.e-content table thead')[0])) {\n detach(this.tableHeadElement);\n }\n }\n else {\n if (!isNullOrUndefined(this.calendarElement.querySelectorAll('.e-content table thead')[0])) {\n detach(this.tableHeadElement);\n }\n }\n };\n CalendarBase.prototype.renderTemplate = function (elements, count, classNm, e, value) {\n var view = this.getViewNumber(this.currentView());\n var trEle;\n this.tableBodyElement = createElement('tbody');\n this.table.appendChild(this.tableBodyElement);\n removeClass([this.contentElement, this.headerElement], [MONTH, DECADE, YEAR]);\n addClass([this.contentElement, this.headerElement], [classNm]);\n var weekNumCell = 41;\n var numberCell = 35;\n var otherMonthCell = 6;\n var row = count;\n var rowIterator = 0;\n for (var dayCell = 0; dayCell < elements.length / count; ++dayCell) {\n trEle = createElement('tr', { attrs: { 'role': 'row' } });\n for (rowIterator = 0 + rowIterator; rowIterator < row; rowIterator++) {\n if (!elements[rowIterator].classList.contains('e-week-number') && !isNullOrUndefined(elements[rowIterator].children[0])) {\n addClass([elements[rowIterator].children[0]], [LINK]);\n rippleEffect(elements[rowIterator].children[0], {\n duration: 600,\n isCenterRipple: true\n });\n }\n trEle.appendChild(elements[rowIterator]);\n if (!this.weekNumber && rowIterator === otherMonthCell && elements[otherMonthCell].classList.contains(OTHERMONTH)) {\n addClass([trEle], OTHERMONTHROW);\n }\n if (this.weekNumber) {\n if (rowIterator === weekNumCell && elements[weekNumCell].classList.contains(OTHERMONTH)) {\n addClass([trEle], OTHERMONTHROW);\n }\n }\n else {\n if (rowIterator === numberCell && elements[numberCell].classList.contains(OTHERMONTH)) {\n addClass([trEle], OTHERMONTHROW);\n }\n }\n }\n row = row + count;\n rowIterator = rowIterator + 0;\n this.tableBodyElement.appendChild(trEle);\n }\n this.table.querySelector('tbody').className = this.effect;\n this.iconHandler();\n if (view !== this.getViewNumber(this.currentView()) || (view === 0 && view !== this.getViewNumber(this.currentView()))) {\n this.navigateHandler(e);\n }\n this.setAriaActiveDescendant();\n };\n CalendarBase.prototype.clickHandler = function (e, value) {\n this.clickEventEmitter(e);\n var eve = e.currentTarget;\n var view = this.getViewNumber(this.currentView());\n if (eve.classList.contains(OTHERMONTH)) {\n this.contentClick(e, 0, null, value);\n }\n else if (view === this.getViewNumber(this.depth) && this.getViewNumber(this.start) >= this.getViewNumber(this.depth)) {\n this.contentClick(e, 1, null, value);\n }\n else if (2 === view) {\n this.contentClick(e, 1, null, value);\n }\n else if (!eve.classList.contains(OTHERMONTH) && view === 0) {\n this.selectDate(e, this.getIdValue(e, null), null, value);\n }\n else {\n this.contentClick(e, 0, eve, value);\n }\n if (this.getModuleName() === 'calendar') {\n this.table.focus();\n }\n };\n // Content click event handler required for extended components\n CalendarBase.prototype.clickEventEmitter = function (e) {\n e.preventDefault();\n };\n CalendarBase.prototype.contentClick = function (e, view, element, value) {\n var currentView = this.getViewNumber(this.currentView());\n var d = this.getIdValue(e, element);\n switch (view) {\n case 0:\n if (currentView === this.getViewNumber(this.depth) && this.getViewNumber(this.start) >= this.getViewNumber(this.depth)) {\n detach(this.tableBodyElement);\n this.currentDate = d;\n this.effect = ZOOMIN;\n this.renderMonths(e);\n }\n else {\n this.currentDate.setMonth(d.getMonth());\n if (d.getMonth() > 0 && this.currentDate.getMonth() !== d.getMonth()) {\n this.currentDate.setDate(0);\n }\n this.currentDate.setFullYear(d.getFullYear());\n this.effect = ZOOMIN;\n detach(this.tableBodyElement);\n this.renderMonths(e);\n }\n break;\n case 1:\n if (currentView === this.getViewNumber(this.depth) && this.getViewNumber(this.start) >= this.getViewNumber(this.depth)) {\n this.selectDate(e, d, null, value);\n }\n else {\n this.currentDate.setFullYear(d.getFullYear());\n this.effect = ZOOMIN;\n detach(this.tableBodyElement);\n this.renderYears(e);\n }\n }\n };\n CalendarBase.prototype.switchView = function (view, e) {\n switch (view) {\n case 0:\n detach(this.tableBodyElement);\n this.renderMonths(e);\n break;\n case 1:\n detach(this.tableBodyElement);\n this.renderYears(e);\n break;\n case 2:\n detach(this.tableBodyElement);\n this.renderDecades(e);\n }\n };\n /**\n * To get component name\n * @private\n */\n CalendarBase.prototype.getModuleName = function () {\n return 'calendar';\n };\n /**\n * Gets the properties to be maintained upon browser refresh.\n * @returns string\n */\n CalendarBase.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Called internally if any of the property value changed.\n * returns void\n * @private\n */\n CalendarBase.prototype.onPropertyChanged = function (newProp, oldProp) {\n this.effect = '';\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'enableRtl':\n if (newProp.enableRtl) {\n if (this.getModuleName() === 'calendar') {\n this.element.classList.add('e-rtl');\n }\n else {\n this.calendarElement.classList.add('e-rtl');\n }\n }\n else {\n if (this.getModuleName() === 'calendar') {\n this.element.classList.remove('e-rtl');\n }\n else {\n this.calendarElement.classList.remove('e-rtl');\n }\n }\n break;\n case 'min':\n case 'max':\n prop === 'min' ? this.setProperties({ min: this.checkDateValue(new Date('' + newProp.min)) }, true) :\n this.setProperties({ max: this.checkDateValue(new Date('' + newProp.max)) }, true);\n this.setProperties({ start: this.currentView() }, true);\n detach(this.tableBodyElement);\n this.minMaxUpdate();\n this.createContentBody();\n if ((this.todayDate < this.min || this.max < this.todayDate) && (this.footer) && (this.todayElement)) {\n detach(this.todayElement);\n detach(this.footer);\n this.todayElement = this.footer = undefined;\n this.createContentFooter();\n }\n else {\n if (this.todayElement.classList.contains('e-disabled') && (this.footer) && (this.todayElement)) {\n removeClass([this.todayElement], DISABLED);\n }\n }\n break;\n case 'start':\n case 'weekNumber':\n case 'firstDayOfWeek':\n this.createContentHeader();\n this.createContentBody();\n break;\n case 'locale':\n this.globalize = new Internationalization(this.locale);\n this.createContentHeader();\n this.createContentBody();\n this.l10.setLocale(this.locale);\n this.updateFooter();\n break;\n case 'showTodayButton':\n if (newProp.showTodayButton) {\n this.createContentFooter();\n }\n else {\n detach(this.todayElement);\n detach(this.footer);\n this.todayElement = this.footer = undefined;\n }\n this.setProperties({ showTodayButton: newProp.showTodayButton }, true);\n break;\n }\n }\n };\n CalendarBase.prototype.setValueUpdate = function () {\n detach(this.tableBodyElement);\n this.setProperties({ start: this.currentView() }, true);\n this.createContentBody();\n };\n CalendarBase.prototype.titleUpdate = function (date, view) {\n var globalize = new Internationalization(this.locale);\n switch (view) {\n case 'days':\n this.headerTitleElement.textContent = globalize.formatDate(date, { type: 'dateTime', skeleton: 'yMMMM' });\n break;\n case 'months':\n this.headerTitleElement.textContent = globalize.formatDate(date, { type: 'dateTime', skeleton: 'y' });\n }\n };\n CalendarBase.prototype.setActiveDescendant = function () {\n var id;\n var focusedEle = this.tableBodyElement.querySelector('tr td.e-focused-date');\n var selectedEle = this.tableBodyElement.querySelector('tr td.e-selected');\n var title = this.globalize.formatDate(this.currentDate, { type: 'date', skeleton: 'full' });\n if (selectedEle || focusedEle) {\n (focusedEle || selectedEle).setAttribute('aria-selected', 'true');\n (focusedEle || selectedEle).setAttribute('aria-label', 'The current focused date is ' + '' + title);\n id = (focusedEle || selectedEle).getAttribute('id');\n }\n return id;\n };\n CalendarBase.prototype.iconHandler = function () {\n new Date('' + this.currentDate).setDate(1);\n switch (this.currentView()) {\n case 'Month':\n this.previousIconHandler(this.compareMonth(new Date('' + this.currentDate), this.min) < 1);\n this.nextIconHandler(this.compareMonth(new Date('' + this.currentDate), this.max) > -1);\n break;\n case 'Year':\n this.previousIconHandler(this.compareYear(new Date('' + this.currentDate), this.min) < 1);\n this.nextIconHandler(this.compareYear(new Date('' + this.currentDate), this.max) > -1);\n break;\n case 'Decade':\n this.previousIconHandler(this.compareDecade(new Date('' + this.currentDate), this.min) < 1);\n this.nextIconHandler(this.compareDecade(new Date('' + this.currentDate), this.max) > -1);\n }\n };\n /**\n * Destroys the widget.\n * @returns void\n */\n CalendarBase.prototype.destroy = function () {\n if (this.getModuleName() === 'calendar') {\n removeClass([this.element], [ROOT]);\n }\n else {\n if (this.calendarElement) {\n removeClass([this.element], [ROOT]);\n }\n }\n if (this.getModuleName() === 'calendar') {\n EventHandler.remove(this.headerTitleElement, 'click', this.navigateTitle);\n if (this.todayElement) {\n EventHandler.remove(this.todayElement, 'click', this.todayButtonClick);\n }\n this.previousIconHandler(true);\n this.nextIconHandler(true);\n this.keyboardModule.destroy();\n this.element.removeAttribute('data-role');\n }\n this.element.innerHTML = '';\n _super.prototype.destroy.call(this);\n };\n CalendarBase.prototype.title = function (e) {\n var currentView = this.getViewNumber(this.currentView());\n this.effect = ZOOMIN;\n this.switchView(++currentView, e);\n };\n CalendarBase.prototype.getViewNumber = function (stringVal) {\n if (stringVal === 'Month') {\n return 0;\n }\n else if (stringVal === 'Year') {\n return 1;\n }\n else {\n return 2;\n }\n };\n CalendarBase.prototype.navigateTitle = function (e) {\n e.preventDefault();\n this.title(e);\n if (this.getModuleName() === 'calendar') {\n this.table.focus();\n }\n };\n CalendarBase.prototype.previous = function () {\n this.effect = '';\n var currentView = this.getViewNumber(this.currentView());\n switch (this.currentView()) {\n case 'Month':\n this.addMonths(this.currentDate, -1);\n this.switchView(currentView);\n break;\n case 'Year':\n this.addYears(this.currentDate, -1);\n this.switchView(currentView);\n break;\n case 'Decade':\n this.addYears(this.currentDate, -10);\n this.switchView(currentView);\n break;\n }\n };\n CalendarBase.prototype.navigatePrevious = function (e) {\n e.preventDefault();\n this.previous();\n this.triggerNavigate(e);\n if (this.getModuleName() === 'calendar') {\n this.table.focus();\n }\n };\n CalendarBase.prototype.next = function () {\n this.effect = '';\n var currentView = this.getViewNumber(this.currentView());\n switch (this.currentView()) {\n case 'Month':\n this.addMonths(this.currentDate, 1);\n this.switchView(currentView);\n break;\n case 'Year':\n this.addYears(this.currentDate, 1);\n this.switchView(currentView);\n break;\n case 'Decade':\n this.addYears(this.currentDate, 10);\n this.switchView(currentView);\n break;\n }\n };\n CalendarBase.prototype.navigateNext = function (eve) {\n eve.preventDefault();\n this.next();\n this.triggerNavigate(eve);\n if (this.getModuleName() === 'calendar') {\n this.table.focus();\n }\n };\n /**\n * This method is used to navigate to the month/year/decade view of the Calendar.\n * @param {string} view - Specifies the view of the Calendar.\n * @param {Date} date - Specifies the focused date in a view.\n * @returns void\n */\n CalendarBase.prototype.navigateTo = function (view, date) {\n if (+date >= +this.min && +date <= +this.max) {\n this.currentDate = date;\n }\n if (+date <= +this.min) {\n this.currentDate = new Date('' + this.min);\n }\n if (+date >= +this.max) {\n this.currentDate = new Date('' + this.max);\n }\n if (this.getModuleName() === 'daterangepicker') {\n this.currentDate = date;\n }\n if ((this.getViewNumber(this.depth) >= this.getViewNumber(view))) {\n if ((this.getViewNumber(this.depth) <= this.getViewNumber(this.start))\n || this.getViewNumber(this.depth) === this.getViewNumber(view)) {\n view = this.depth;\n }\n }\n this.switchView(this.getViewNumber(view));\n };\n /**\n * Gets the current view of the Calendar.\n * @returns string\n */\n CalendarBase.prototype.currentView = function () {\n if (this.contentElement.classList.contains(YEAR)) {\n return 'Year';\n }\n else if (this.contentElement.classList.contains(DECADE)) {\n return 'Decade';\n }\n else {\n return 'Month';\n }\n };\n CalendarBase.prototype.getDateVal = function (date, value) {\n return (!isNullOrUndefined(value) && date.getDate() === (value).getDate()\n && date.getMonth() === (value).getMonth() && date.getFullYear() === (value).getFullYear());\n };\n CalendarBase.prototype.getCultureObjects = function (ld, c) {\n return getValue('main.' + '' + this.locale + '.dates.calendars.gregorian.days.format.short', ld);\n };\n ;\n CalendarBase.prototype.getWeek = function (d) {\n var currentDate = new Date('' + d).valueOf();\n var date = new Date(d.getFullYear(), 0, 1).valueOf();\n var a = (currentDate - date);\n return Math.ceil((((a) / dayMilliSeconds) + new Date(date).getDay() + 1) / 7);\n };\n CalendarBase.prototype.setStartDate = function (date, time) {\n var tzOffset = date.getTimezoneOffset();\n var d = new Date(date.getTime() + time);\n var tzOffsetDiff = d.getTimezoneOffset() - tzOffset;\n date.setTime(d.getTime() + tzOffsetDiff * minutesMilliSeconds);\n };\n CalendarBase.prototype.addMonths = function (date, i) {\n var day = date.getDate();\n date.setDate(1);\n date.setMonth(date.getMonth() + i);\n date.setDate(Math.min(day, this.getMaxDays(date)));\n };\n CalendarBase.prototype.addYears = function (date, i) {\n var day = date.getDate();\n date.setDate(1);\n date.setFullYear(date.getFullYear() + i);\n date.setDate(Math.min(day, this.getMaxDays(date)));\n };\n CalendarBase.prototype.getIdValue = function (e, element) {\n var eve;\n if (e) {\n eve = e.currentTarget;\n }\n else {\n eve = element;\n }\n var dateFormatOptions = { type: 'dateTime', skeleton: 'full' };\n var dateString = this.globalize.formatDate(new Date(parseInt('' + eve.getAttribute('id'), 0)), dateFormatOptions);\n var date = this.globalize.parseDate(dateString, dateFormatOptions);\n var value = date.valueOf() - date.valueOf() % 1000;\n return new Date(value);\n //return this.globalize.parseDate(dateString, dateFormatOptions);\n };\n CalendarBase.prototype.selectDate = function (e, date, node, value) {\n var element = node || e.currentTarget;\n if (this.currentView() === 'Decade') {\n this.setDateDecade(this.currentDate, date.getFullYear());\n }\n else if (this.currentView() === 'Year') {\n this.setDateYear(this.currentDate, date);\n }\n else {\n this.setProperties({ value: new Date('' + date) }, true);\n this.currentDate = new Date('' + date);\n }\n var tableBodyElement = closest(element, '.' + ROOT);\n if (isNullOrUndefined(tableBodyElement)) {\n tableBodyElement = this.tableBodyElement;\n }\n if (!isNullOrUndefined(tableBodyElement.querySelector('.' + SELECTED))) {\n removeClass([tableBodyElement.querySelector('.' + SELECTED)], SELECTED);\n }\n if (!isNullOrUndefined(tableBodyElement.querySelector('.' + FOCUSEDDATE))) {\n removeClass([tableBodyElement.querySelector('.' + FOCUSEDDATE)], FOCUSEDDATE);\n }\n addClass([element], SELECTED);\n };\n CalendarBase.prototype.setAriaActiveDescendant = function () {\n attributes(this.table, {\n 'aria-activedescendant': '' + this.setActiveDescendant()\n });\n };\n CalendarBase.prototype.previousIconHandler = function (disabled) {\n if (disabled) {\n EventHandler.remove(this.previousIcon, 'click', this.navigatePreviousHandler);\n addClass([this.previousIcon], '' + DISABLED);\n addClass([this.previousIcon], '' + OVERLAY);\n this.previousIcon.setAttribute('aria-disabled', 'true');\n }\n else {\n EventHandler.add(this.previousIcon, 'click', this.navigatePreviousHandler);\n removeClass([this.previousIcon], '' + DISABLED);\n removeClass([this.previousIcon], '' + OVERLAY);\n this.previousIcon.setAttribute('aria-disabled', 'false');\n }\n };\n CalendarBase.prototype.renderDayCellEvent = function (args) {\n extend(this.renderDayCellArgs, { name: 'renderDayCell' });\n this.trigger('renderDayCell', args);\n };\n CalendarBase.prototype.navigatedEvent = function (eve) {\n extend(this.navigatedArgs, { name: 'navigated', event: eve });\n this.trigger('navigated', this.navigatedArgs);\n };\n CalendarBase.prototype.triggerNavigate = function (event) {\n this.navigatedArgs = { view: this.currentView(), date: this.currentDate };\n this.navigatedEvent(event);\n };\n CalendarBase.prototype.nextIconHandler = function (disabled) {\n if (disabled) {\n EventHandler.remove(this.nextIcon, 'click', this.navigateNextHandler);\n addClass([this.nextIcon], DISABLED);\n addClass([this.nextIcon], OVERLAY);\n this.nextIcon.setAttribute('aria-disabled', 'true');\n }\n else {\n EventHandler.add(this.nextIcon, 'click', this.navigateNextHandler);\n removeClass([this.nextIcon], DISABLED);\n removeClass([this.nextIcon], OVERLAY);\n this.nextIcon.setAttribute('aria-disabled', 'false');\n }\n };\n CalendarBase.prototype.compare = function (startDate, endDate, modifier) {\n var start = endDate.getFullYear();\n var end;\n var result;\n end = start;\n result = 0;\n if (modifier) {\n start = start - start % modifier;\n end = start - start % modifier + modifier - 1;\n }\n if (startDate.getFullYear() > end) {\n result = 1;\n }\n else if (startDate.getFullYear() < start) {\n result = -1;\n }\n return result;\n };\n CalendarBase.prototype.isMinMaxRange = function (date) {\n return +date >= +this.min && +date <= +this.max;\n };\n CalendarBase.prototype.compareYear = function (start, end) {\n return this.compare(start, end, 0);\n };\n CalendarBase.prototype.compareDecade = function (start, end) {\n return this.compare(start, end, 10);\n };\n CalendarBase.prototype.shiftArray = function (array, i) {\n return array.slice(i).concat(array.slice(0, i));\n };\n CalendarBase.prototype.addDay = function (date, i, e, max, min) {\n var column = i;\n var value = new Date(+date);\n if (!isNullOrUndefined(this.tableBodyElement) && !isNullOrUndefined(e)) {\n while (this.findNextTD(new Date(+date), column, max, min)) {\n column += i;\n }\n var rangeValue = new Date(value.setDate(value.getDate() + column));\n column = (+rangeValue > +max || +rangeValue < +min) ? column === i ? i - i : i : column;\n }\n date.setDate(date.getDate() + column);\n };\n CalendarBase.prototype.findNextTD = function (date, column, max, min) {\n var value = new Date(date.setDate(date.getDate() + column));\n var collection = [];\n var isDisabled = false;\n if ((!isNullOrUndefined(value) && value.getMonth()) === (!isNullOrUndefined(this.currentDate) && this.currentDate.getMonth())) {\n var tdEles = this.renderDays(value, null);\n collection = tdEles.filter(function (element) {\n return element.classList.contains(DISABLED);\n });\n }\n else {\n collection = this.tableBodyElement.querySelectorAll('td.' + DISABLED);\n }\n if (+value <= (+(max)) && +value >= (+(min))) {\n if (collection.length) {\n for (var i = 0; i < collection.length; i++) {\n isDisabled = (+value === +new Date(parseInt(collection[i].id, 0))) ? true : false;\n if (isDisabled) {\n break;\n }\n }\n }\n }\n return isDisabled;\n };\n CalendarBase.prototype.getMaxDays = function (d) {\n var date;\n var month;\n var tmpDate = new Date('' + d);\n date = 28;\n month = tmpDate.getMonth();\n while (tmpDate.getMonth() === month) {\n ++date;\n tmpDate.setDate(date);\n }\n return date - 1;\n };\n CalendarBase.prototype.setDateDecade = function (date, year) {\n date.setFullYear(year);\n this.setProperties({ value: new Date('' + date) }, true);\n };\n ;\n CalendarBase.prototype.setDateYear = function (date, value) {\n date.setFullYear(value.getFullYear(), value.getMonth(), date.getDate());\n if (value.getMonth() !== date.getMonth()) {\n date.setDate(0);\n }\n this.setProperties({ value: new Date('' + date) }, true);\n this.currentDate = new Date('' + value);\n };\n CalendarBase.prototype.compareMonth = function (start, end) {\n var result;\n if (start.getFullYear() > end.getFullYear()) {\n result = 1;\n }\n else if (start.getFullYear() < end.getFullYear()) {\n result = -1;\n }\n else {\n result = start.getMonth() === end.getMonth() ? 0 : start.getMonth() > end.getMonth() ? 1 : -1;\n }\n return result;\n };\n __decorate([\n Property(new Date(1900, 0, 1))\n ], CalendarBase.prototype, \"min\", void 0);\n __decorate([\n Property(new Date(2099, 11, 31))\n ], CalendarBase.prototype, \"max\", void 0);\n __decorate([\n Property(0)\n ], CalendarBase.prototype, \"firstDayOfWeek\", void 0);\n __decorate([\n Property('Month')\n ], CalendarBase.prototype, \"start\", void 0);\n __decorate([\n Property('Month')\n ], CalendarBase.prototype, \"depth\", void 0);\n __decorate([\n Property(false)\n ], CalendarBase.prototype, \"weekNumber\", void 0);\n __decorate([\n Property(true)\n ], CalendarBase.prototype, \"showTodayButton\", void 0);\n __decorate([\n Event()\n ], CalendarBase.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], CalendarBase.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], CalendarBase.prototype, \"navigated\", void 0);\n __decorate([\n Event()\n ], CalendarBase.prototype, \"renderDayCell\", void 0);\n CalendarBase = __decorate([\n NotifyPropertyChanges\n ], CalendarBase);\n return CalendarBase;\n}(Component));\nexport { CalendarBase };\n/**\n * Represents the Calendar component that allows the user to select a date.\n * ```html\n *
\n * ```\n * ```typescript\n * \n * ```\n */\nvar Calendar = /** @class */ (function (_super) {\n __extends(Calendar, _super);\n /**\n * Initialized new instance of Calendar Class.\n * Constructor for creating the widget\n * @param {CalendarModel} options?\n * @param {string|HTMLElement} element?\n */\n function Calendar(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * To Initialize the control rendering.\n * @returns void\n * @private\n */\n Calendar.prototype.render = function () {\n this.validateDate();\n this.minMaxUpdate();\n _super.prototype.render.call(this);\n if (this.getModuleName() === 'calendar') {\n var form = closest(this.element, 'form');\n if (form) {\n EventHandler.add(form, 'reset', this.formResetHandler.bind(this));\n }\n }\n };\n Calendar.prototype.formResetHandler = function () {\n this.value = null;\n };\n Calendar.prototype.validateDate = function () {\n if (typeof this.value === 'string') {\n this.setProperties({ value: this.checkDateValue(new Date('' + this.value)) }, true); // persist the value property.\n }\n _super.prototype.validateDate.call(this, this.value);\n if (!isNullOrUndefined(this.value) && this.min <= this.max && this.value >= this.min && this.value <= this.max) {\n this.currentDate = new Date('' + this.value);\n }\n if (isNaN(+this.value)) {\n this.setProperties({ value: null }, true);\n }\n };\n Calendar.prototype.minMaxUpdate = function () {\n if (this.getModuleName() === 'calendar') {\n if (!isNullOrUndefined(this.value) && this.value <= this.min && this.min <= this.max) {\n this.setProperties({ value: this.min }, true);\n this.changedArgs = { value: this.value };\n }\n else {\n if (!isNullOrUndefined(this.value) && this.value >= this.max && this.min <= this.max) {\n this.setProperties({ value: this.max }, true);\n this.changedArgs = { value: this.value };\n }\n }\n }\n if (this.getModuleName() !== 'calendar' && !isNullOrUndefined(this.value)) {\n if (!isNullOrUndefined(this.value) && this.value < this.min && this.min <= this.max) {\n _super.prototype.minMaxUpdate.call(this, this.min);\n }\n else {\n if (!isNullOrUndefined(this.value) && this.value > this.max && this.min <= this.max) {\n _super.prototype.minMaxUpdate.call(this, this.max);\n }\n }\n }\n else {\n _super.prototype.minMaxUpdate.call(this, this.value);\n }\n };\n Calendar.prototype.todayButtonClick = function () {\n if (this.showTodayButton) {\n var tempValue = new Date();\n if (this.value) {\n tempValue.setHours(this.value.getHours());\n tempValue.setMinutes(this.value.getMinutes());\n tempValue.setSeconds(this.value.getSeconds());\n tempValue.setMilliseconds(this.value.getMilliseconds());\n }\n else {\n tempValue = new Date(tempValue.getFullYear(), tempValue.getMonth(), tempValue.getDate(), 0, 0, 0, 0);\n }\n this.setProperties({ value: tempValue }, true);\n _super.prototype.todayButtonClick.call(this, new Date(+this.value));\n }\n };\n Calendar.prototype.keyActionHandle = function (e) {\n _super.prototype.keyActionHandle.call(this, e, this.value);\n };\n /**\n * Initialize the event handler\n * @private\n */\n Calendar.prototype.preRender = function () {\n var _this = this;\n this.changeHandler = function (e) {\n _this.triggerChange(e);\n };\n _super.prototype.preRender.call(this, this.value);\n };\n ;\n Calendar.prototype.createContent = function () {\n this.previousDate = this.value;\n _super.prototype.createContent.call(this);\n };\n Calendar.prototype.minMaxDate = function (localDate) {\n return _super.prototype.minMaxDate.call(this, localDate);\n };\n Calendar.prototype.renderMonths = function (e) {\n _super.prototype.renderMonths.call(this, e, this.value);\n };\n Calendar.prototype.renderDays = function (currentDate, e) {\n return _super.prototype.renderDays.call(this, currentDate, e, this.value);\n };\n Calendar.prototype.renderYears = function (e) {\n _super.prototype.renderYears.call(this, e, this.value);\n };\n Calendar.prototype.renderDecades = function (e) {\n _super.prototype.renderDecades.call(this, e, this.value);\n };\n Calendar.prototype.renderTemplate = function (elements, count, classNm, e) {\n _super.prototype.renderTemplate.call(this, elements, count, classNm, e, this.value);\n this.changedArgs = { value: this.value };\n this.changeHandler();\n };\n Calendar.prototype.clickHandler = function (e) {\n var eve = e.currentTarget;\n if (eve.classList.contains(OTHERMONTH)) {\n this.value = this.getIdValue(e, null);\n }\n _super.prototype.clickHandler.call(this, e, this.value);\n };\n Calendar.prototype.switchView = function (view, e) {\n _super.prototype.switchView.call(this, view, e);\n };\n /**\n * To get component name\n * @private\n */\n Calendar.prototype.getModuleName = function () {\n _super.prototype.getModuleName.call(this);\n return 'calendar';\n };\n /**\n * Gets the properties to be maintained upon browser refresh.\n * @returns string\n */\n Calendar.prototype.getPersistData = function () {\n _super.prototype.getPersistData.call(this);\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Called internally if any of the property value changed.\n * returns void\n * @private\n */\n Calendar.prototype.onPropertyChanged = function (newProp, oldProp) {\n this.effect = '';\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'value':\n if (typeof newProp.value === 'string') {\n this.setProperties({ value: new Date('' + newProp.value) }, true);\n }\n else {\n newProp.value = new Date('' + newProp.value);\n }\n if (isNaN(+this.value)) {\n this.setProperties({ value: oldProp.value }, true);\n }\n this.validateDate();\n this.minMaxUpdate();\n _super.prototype.setValueUpdate.call(this);\n break;\n default:\n _super.prototype.onPropertyChanged.call(this, newProp, oldProp);\n }\n }\n };\n /**\n * Destroys the widget.\n * @returns void\n */\n Calendar.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n if (this.getModuleName() === 'calendar') {\n var form = closest(this.element, 'form');\n if (form) {\n EventHandler.remove(form, 'reset', this.formResetHandler.bind(this));\n }\n }\n };\n /**\n * This method is used to navigate to the month/year/decade view of the Calendar.\n * @param {string} view - Specifies the view of the Calendar.\n * @param {Date} date - Specifies the focused date in a view.\n * @returns void\n */\n Calendar.prototype.navigateTo = function (view, date) {\n this.minMaxUpdate();\n _super.prototype.navigateTo.call(this, view, date);\n };\n /**\n * Gets the current view of the Calendar.\n * @returns string\n */\n Calendar.prototype.currentView = function () {\n return _super.prototype.currentView.call(this);\n };\n Calendar.prototype.selectDate = function (e, date, element) {\n _super.prototype.selectDate.call(this, e, date, element, this.value);\n this.changedArgs = { value: this.value };\n this.changeHandler(e);\n };\n Calendar.prototype.changeEvent = function (e) {\n this.trigger('change', this.changedArgs);\n this.previousDate = new Date(+this.value);\n };\n Calendar.prototype.triggerChange = function (e) {\n this.changedArgs.event = e || null;\n this.changedArgs.isInteracted = !isNullOrUndefined(e);\n if (!isNullOrUndefined(this.value)) {\n this.setProperties({ value: this.value }, true);\n }\n if (+this.value !== Number.NaN && +this.value !== +this.previousDate) {\n this.changeEvent(e);\n }\n };\n __decorate([\n Property(null)\n ], Calendar.prototype, \"value\", void 0);\n __decorate([\n Event()\n ], Calendar.prototype, \"change\", void 0);\n Calendar = __decorate([\n NotifyPropertyChanges\n ], Calendar);\n return Calendar;\n}(CalendarBase));\nexport { Calendar };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/// \nimport { EventHandler, Property, Internationalization, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, Animation, Event, L10n, Browser, formatUnit } from '@syncfusion/ej2-base';\nimport { createElement, detach, addClass, removeClass, closest, attributes } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, setValue, getUniqueID } from '@syncfusion/ej2-base';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { Calendar } from '../calendar/calendar';\n//class constant defination\nvar DATEWRAPPER = 'e-date-wrapper';\nvar ROOT = 'e-datepicker';\nvar POPUPWRAPPER = 'e-popup-wrapper';\nvar INPUTWRAPPER = 'e-input-group-icon';\nvar POPUP = 'e-popup';\nvar INPUTCONTAINER = 'e-input-group';\nvar INPUTFOCUS = 'e-input-focus';\nvar INPUTROOT = 'e-input';\nvar ERROR = 'e-error';\nvar RTL = 'e-rtl';\nvar LINK = 'e-day';\nvar ACTIVE = 'e-active';\nvar OVERFLOW = 'e-date-overflow';\nvar DATEICON = 'e-date-icon';\nvar ICONS = 'e-icons';\nvar OPENDURATION = 300;\nvar CLOSEDURATION = 200;\nvar OFFSETVALUE = 4;\n/**\n * Represents the DatePicker component that allows user to select\n * or enter a date value.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar DatePicker = /** @class */ (function (_super) {\n __extends(DatePicker, _super);\n /**\n * Constructor for creating the widget.\n */\n function DatePicker(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.previousElementValue = '';\n _this.isDateIconClicked = false;\n _this.keyConfigs = {\n altUpArrow: 'alt+uparrow',\n altDownArrow: 'alt+downarrow',\n escape: 'escape',\n enter: 'enter',\n controlUp: 'ctrl+38',\n controlDown: 'ctrl+40',\n moveDown: 'downarrow',\n moveUp: 'uparrow',\n moveLeft: 'leftarrow',\n moveRight: 'rightarrow',\n select: 'enter',\n home: 'home',\n end: 'end',\n pageUp: 'pageup',\n pageDown: 'pagedown',\n shiftPageUp: 'shift+pageup',\n shiftPageDown: 'shift+pagedown',\n controlHome: 'ctrl+home',\n controlEnd: 'ctrl+end',\n tab: 'tab'\n };\n _this.calendarKeyConfigs = {\n escape: 'escape',\n enter: 'enter',\n tab: 'tab'\n };\n return _this;\n }\n /**\n * To Initialize the control rendering.\n * @return void\n * @private\n */\n DatePicker.prototype.render = function () {\n this.initialize();\n this.bindEvents();\n };\n DatePicker.prototype.initialize = function () {\n this.createInput();\n this.updateInput();\n this.previousElementValue = this.inputElement.value;\n this.previousDate = new Date(+this.value);\n };\n DatePicker.prototype.createInput = function () {\n var ariaAttrs = {\n 'aria-live': 'assertive', 'aria-atomic': 'true',\n 'aria-haspopup': 'true', 'aria-activedescendant': 'null',\n 'aria-owns': this.element.id + '_options', 'aria-expanded': 'false', 'role': 'combobox', 'autocomplete': 'off',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false'\n };\n if (this.getModuleName() === 'datepicker') {\n var l10nLocale = { placeholder: null };\n this.globalize = new Internationalization(this.locale);\n this.l10n = new L10n('datepicker', l10nLocale, this.locale);\n this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n }\n this.inputWrapper = Input.createInput({\n element: this.inputElement,\n floatLabelType: this.floatLabelType,\n properties: {\n readonly: this.readonly,\n placeholder: this.placeholder,\n cssClass: this.cssClass,\n enabled: this.enabled,\n enableRtl: this.enableRtl,\n showClearButton: this.showClearButton,\n },\n buttons: [INPUTWRAPPER + ' ' + DATEICON + ' ' + ICONS]\n });\n this.setWidth(this.width);\n if (this.inputElement.name !== '') {\n this.inputElement.setAttribute('name', '' + this.inputElement.getAttribute('name'));\n }\n else {\n this.inputElement.setAttribute('name', '' + this.element.id);\n }\n attributes(this.inputElement, ariaAttrs);\n if (!this.enabled) {\n this.inputElement.setAttribute('aria-disabled', 'true');\n }\n else {\n this.inputElement.setAttribute('aria-disabled', 'false');\n }\n Input.addAttributes({ 'aria-label': 'select' }, this.inputWrapper.buttons[0]);\n addClass([this.inputWrapper.container], DATEWRAPPER);\n };\n DatePicker.prototype.updateInput = function () {\n if (this.value && !this.isCalendar()) {\n this.disabledDates();\n }\n if (+new Date('' + this.value)) {\n if (typeof this.value === 'string') {\n this.value = this.checkDateValue(new Date('' + this.value));\n var dateOptions = void 0;\n if (this.getModuleName() === 'datetimepicker') {\n dateOptions = {\n format: !isNullOrUndefined(this.format) ? this.format : this.dateTimeFormat,\n type: 'dateTime', skeleton: 'yMd'\n };\n }\n else {\n dateOptions = { format: this.format, type: 'dateTime', skeleton: 'yMd' };\n }\n var dateString = this.globalize.formatDate(this.value, dateOptions);\n this.setProperties({ value: this.globalize.parseDate(dateString, dateOptions) }, true);\n }\n }\n else {\n this.setProperties({ value: null }, true);\n }\n if (this.strictMode) {\n //calls the Calendar processDate protected method to update the date value according to the strictMode true behaviour.\n _super.prototype.validateDate.call(this);\n this.minMaxUpdates();\n _super.prototype.minMaxUpdate.call(this);\n }\n if (!isNullOrUndefined(this.value)) {\n var dateValue = this.value;\n var dateString = void 0;\n var tempFormat = !isNullOrUndefined(this.format) ? this.format : this.dateTimeFormat;\n if (this.getModuleName() === 'datetimepicker') {\n dateString = this.globalize.formatDate(this.value, { format: tempFormat, type: 'dateTime', skeleton: 'yMd' });\n }\n else {\n dateString = this.globalize.formatDate(this.value, { format: this.format, type: 'dateTime', skeleton: 'yMd' });\n }\n if ((+dateValue <= +this.max) && (+dateValue >= +this.min)) {\n Input.setValue(dateString, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n else {\n var value = (+dateValue >= +this.max || !+this.value) || (!+this.value || +dateValue <= +this.min);\n if (!this.strictMode && value) {\n Input.setValue(dateString, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n }\n }\n if (isNullOrUndefined(this.value) && this.strictMode) {\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n }\n this.changedArgs = { value: this.value };\n this.errorClass();\n };\n ;\n DatePicker.prototype.minMaxUpdates = function () {\n if (!isNullOrUndefined(this.value) && this.value < this.min && this.min <= this.max && this.strictMode) {\n this.setProperties({ value: this.min }, true);\n this.changedArgs = { value: this.value };\n }\n else {\n if (!isNullOrUndefined(this.value) && this.value > this.max && this.min <= this.max && this.strictMode) {\n this.setProperties({ value: this.max }, true);\n this.changedArgs = { value: this.value };\n }\n }\n };\n DatePicker.prototype.bindEvents = function () {\n var formElement = closest(this.inputElement, 'form');\n if (this.enabled) {\n EventHandler.add(this.inputWrapper.buttons[0], 'mousedown touchstart', this.dateIconHandler, this);\n EventHandler.add(this.inputElement, 'focus', this.inputFocusHandler, this);\n EventHandler.add(this.inputElement, 'blur', this.inputBlurHandler, this);\n // To prevent the twice triggering.\n EventHandler.add(this.inputElement, 'change', this.inputChangeHandler, this);\n if (this.showClearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown touchstart', this.resetHandler, this);\n }\n if (formElement) {\n EventHandler.add(formElement, 'reset', this.resetFormHandler, this);\n }\n }\n else {\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown touchstart', this.dateIconHandler);\n EventHandler.remove(this.inputElement, 'focus', this.inputFocusHandler);\n EventHandler.remove(this.inputElement, 'blur', this.inputBlurHandler);\n EventHandler.remove(this.inputElement, 'change', this.inputChangeHandler);\n if (this.showClearButton) {\n EventHandler.remove(this.inputWrapper.clearButton, 'mousedown touchstart', this.resetHandler);\n }\n if (formElement) {\n EventHandler.remove(formElement, 'reset', this.resetFormHandler);\n }\n }\n this.keyboardModules = new KeyboardEvents(this.inputElement, {\n eventName: 'keydown',\n keyAction: this.inputKeyActionHandle.bind(this),\n keyConfigs: this.keyConfigs\n });\n };\n DatePicker.prototype.resetFormHandler = function () {\n if (this.inputElement.getAttribute('value')) {\n this.value = this.checkDateValue(new Date('' + this.element.getAttribute('value')));\n }\n else {\n this.value = null;\n }\n };\n DatePicker.prototype.inputChangeHandler = function (e) {\n e.stopPropagation();\n };\n DatePicker.prototype.bindClearEvent = function () {\n if (this.showClearButton && this.inputWrapper.clearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown touchstart', this.resetHandler, this);\n }\n };\n DatePicker.prototype.resetHandler = function (e) {\n e.preventDefault();\n this.clear(e);\n };\n DatePicker.prototype.clear = function (event) {\n this.setProperties({ value: null }, true);\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n this.updateInput();\n this.changeEvent(event);\n };\n DatePicker.prototype.dateIconHandler = function (e) {\n e.preventDefault();\n if (!this.readonly) {\n if (this.isCalendar()) {\n this.hide(e);\n }\n else {\n this.isDateIconClicked = true;\n this.show(null, e);\n if (!Browser.isDevice) {\n if (this.getModuleName() === 'datetimepicker') {\n this.inputElement.focus();\n }\n this.inputElement.focus();\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\n addClass(this.inputWrapper.buttons, ACTIVE);\n }\n }\n };\n DatePicker.prototype.CalendarKeyActionHandle = function (e) {\n switch (e.action) {\n case 'escape':\n if (this.isCalendar()) {\n this.hide(e);\n }\n else {\n this.inputWrapper.container.children[this.index].blur();\n }\n break;\n case 'enter':\n if (!this.isCalendar()) {\n this.show(null, e);\n }\n else {\n if (+this.value !== +this.currentDate && !this.isCalendar()) {\n this.inputWrapper.container.children[this.index].focus();\n }\n }\n if (this.getModuleName() === 'datetimepicker') {\n this.inputElement.focus();\n }\n break;\n case 'tab':\n this.hide(e);\n }\n };\n DatePicker.prototype.inputFocusHandler = function () {\n var focusArguments = {\n model: this\n };\n this.isDateIconClicked = false;\n this.trigger('focus', focusArguments);\n };\n DatePicker.prototype.inputBlurHandler = function (e) {\n this.strictModeUpdate();\n this.updateInput();\n this.changeTrigger(e);\n this.errorClass();\n if (this.isCalendar() && document.activeElement === this.inputElement) {\n this.hide(e);\n }\n if (this.getModuleName() === 'datepicker') {\n var blurArguments = {\n model: this\n };\n this.trigger('blur', blurArguments);\n }\n if (this.isCalendar()) {\n this.calendarKeyboardModules = new KeyboardEvents(this.calendarElement.children[1].firstElementChild, {\n eventName: 'keydown',\n keyAction: this.CalendarKeyActionHandle.bind(this),\n keyConfigs: this.calendarKeyConfigs\n });\n }\n };\n DatePicker.prototype.documentHandler = function (e) {\n if (!Browser.isDevice) {\n e.preventDefault();\n }\n var target = e.target;\n if (!(closest(target, '.e-datepicker.e-popup-wrapper'))\n && !(closest(target, '.' + INPUTCONTAINER) === this.inputWrapper.container)\n && (!target.classList.contains('e-day'))) {\n this.hide(e);\n }\n };\n DatePicker.prototype.inputKeyActionHandle = function (e) {\n switch (e.action) {\n case 'altUpArrow':\n this.hide(e);\n this.inputElement.focus();\n break;\n case 'altDownArrow':\n this.strictModeUpdate();\n this.updateInput();\n this.changeTrigger(e);\n if (this.getModuleName() === 'datepicker') {\n this.show(null, e);\n }\n break;\n case 'escape':\n this.hide(e);\n break;\n case 'enter':\n this.strictModeUpdate();\n this.updateInput();\n this.changeTrigger(e);\n this.errorClass();\n if (!this.isCalendar() && document.activeElement === this.inputElement) {\n this.hide(e);\n }\n break;\n case 'tab':\n this.strictModeUpdate();\n this.updateInput();\n this.changeTrigger(e);\n this.errorClass();\n this.hide(e);\n break;\n default:\n this.previousDate = (!isNullOrUndefined(this.value) && new Date('' + this.value) || null);\n if (this.isCalendar()) {\n _super.prototype.keyActionHandle.call(this, e);\n }\n }\n };\n DatePicker.prototype.strictModeUpdate = function () {\n var format;\n if (this.getModuleName() === 'datetimepicker') {\n format = !isNullOrUndefined(this.format) ? this.format : this.dateTimeFormat;\n }\n else {\n format = isNullOrUndefined(this.format) ? this.format : this.format.replace('dd', 'd');\n }\n if (!isNullOrUndefined(format)) {\n var len = format.split('M').length - 1;\n if (len < 3) {\n format = format.replace('MM', 'M');\n }\n }\n var dateOptions;\n if (this.getModuleName() === 'datetimepicker') {\n dateOptions = {\n format: !isNullOrUndefined(this.format) ? this.format : this.dateTimeFormat,\n type: 'dateTime', skeleton: 'yMd'\n };\n }\n else {\n dateOptions = { format: format, type: 'dateTime', skeleton: 'yMd' };\n }\n var date = this.globalize.parseDate(this.inputElement.value, dateOptions);\n if (this.strictMode && date) {\n Input.setValue(this.globalize.formatDate(date, dateOptions), this.inputElement, this.floatLabelType, this.showClearButton);\n if (this.inputElement.value !== this.previousElementValue) {\n this.setProperties({ value: date }, true);\n }\n }\n else if (!this.strictMode) {\n if (this.inputElement.value !== this.previousElementValue) {\n this.setProperties({ value: date }, true);\n }\n }\n if (this.strictMode && !date && this.inputElement.value === '') {\n this.setProperties({ value: null }, true);\n }\n if (isNaN(+this.value)) {\n this.setProperties({ value: null }, true);\n }\n if (isNullOrUndefined(this.value)) {\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n }\n };\n DatePicker.prototype.createCalendar = function () {\n var _this = this;\n this.popupWrapper = createElement('div', { className: '' + ROOT + ' ' + POPUPWRAPPER });\n if (!isNullOrUndefined(this.cssClass)) {\n this.popupWrapper.classList.add(this.cssClass);\n }\n document.body.appendChild(this.popupWrapper);\n if (Browser.isDevice) {\n this.modelHeader();\n this.modal = createElement('div');\n this.modal.className = '' + ROOT + ' e-date-modal';\n document.body.className += ' ' + OVERFLOW;\n this.modal.style.display = 'block';\n document.body.appendChild(this.modal);\n }\n //this.calendarElement represent the Calendar object from the Calendar class.\n this.calendarElement.querySelector('table tbody').className = '';\n this.popupObj = new Popup(this.popupWrapper, {\n content: this.calendarElement,\n relateTo: Browser.isDevice ? document.body : this.inputWrapper.container,\n position: Browser.isDevice ? { X: 'center', Y: 'center' } : { X: 'left', Y: 'bottom' },\n offsetY: OFFSETVALUE,\n targetType: 'container',\n enableRtl: this.enableRtl,\n zIndex: this.zIndex,\n collision: Browser.isDevice ? { X: 'fit', Y: 'fit' } : { X: 'flip', Y: 'flip' },\n open: function () {\n if (_this.getModuleName() !== 'datetimepicker') {\n if (document.activeElement !== _this.inputElement && !Browser.isDevice) {\n _this.calendarElement.children[1].firstElementChild.focus();\n _this.calendarKeyboardModules = new KeyboardEvents(_this.calendarElement.children[1].firstElementChild, {\n eventName: 'keydown',\n keyAction: _this.CalendarKeyActionHandle.bind(_this),\n keyConfigs: _this.calendarKeyConfigs\n });\n _this.calendarKeyboardModules = new KeyboardEvents(_this.inputWrapper.container.children[_this.index], {\n eventName: 'keydown',\n keyAction: _this.CalendarKeyActionHandle.bind(_this),\n keyConfigs: _this.calendarKeyConfigs\n });\n }\n }\n }, close: function () {\n if (!Browser.isDevice) {\n if (_this.isDateIconClicked) {\n _this.inputWrapper.container.children[_this.index].focus();\n }\n }\n if (_this.value) {\n _this.disabledDates();\n }\n if (_this.popupObj) {\n _this.popupObj.destroy();\n }\n detach(_this.popupWrapper);\n _this.popupObj = _this.popupWrapper = null;\n _this.setAriaAttributes();\n }\n });\n this.popupObj.element.classList.add(this.cssClass);\n this.setAriaAttributes();\n };\n DatePicker.prototype.modelHeader = function () {\n var modelHeader = createElement('div', { className: 'e-model-header' });\n var yearHeading = createElement('h1', { className: 'e-model-year' });\n var h2 = createElement('div');\n var daySpan = createElement('span', { className: 'e-model-day' });\n var monthSpan = createElement('span', { className: 'e-model-month' });\n yearHeading.textContent = '' + this.globalize.formatDate(this.value || new Date(), { format: 'y', skeleton: 'dateTime' });\n daySpan.textContent = '' + this.globalize.formatDate(this.value || new Date(), { format: 'E', skeleton: 'dateTime' }) + ', ';\n monthSpan.textContent = '' + this.globalize.formatDate(this.value || new Date(), { format: 'MMM d', skeleton: 'dateTime' });\n modelHeader.appendChild(yearHeading);\n h2.appendChild(daySpan);\n h2.appendChild(monthSpan);\n modelHeader.appendChild(h2);\n this.calendarElement.insertBefore(modelHeader, this.calendarElement.firstElementChild);\n };\n DatePicker.prototype.changeTrigger = function (event) {\n if (this.inputElement.value !== this.previousElementValue) {\n if (((this.previousDate && this.previousDate.valueOf()) !== (this.value && this.value.valueOf()))) {\n this.changedArgs.value = this.value;\n this.changedArgs.event = this.changedArgs.event = event || null;\n this.changedArgs.element = this.element;\n this.changedArgs.isInteracted = !isNullOrUndefined(event);\n this.trigger('change', this.changedArgs);\n this.previousElementValue = this.inputElement.value;\n this.previousDate = new Date('' + this.value);\n }\n }\n };\n DatePicker.prototype.navigatedEvent = function () {\n this.trigger('navigated', this.navigatedArgs);\n };\n DatePicker.prototype.changeEvent = function (event) {\n if (((this.previousDate && this.previousDate.valueOf()) !== (this.value && this.value.valueOf()))) {\n this.selectCalendar(event);\n this.changedArgs.event = event ? event : null;\n this.changedArgs.element = this.element;\n this.changedArgs.isInteracted = !isNullOrUndefined(event);\n this.trigger('change', this.changedArgs);\n this.previousDate = this.value && new Date(+this.value);\n this.hide(event);\n this.previousElementValue = this.inputElement.value;\n this.errorClass();\n }\n };\n DatePicker.prototype.selectCalendar = function (e) {\n var date;\n var tempFormat;\n if (this.getModuleName() === 'datetimepicker') {\n tempFormat = !isNullOrUndefined(this.format) ? this.format : this.dateTimeFormat;\n }\n else {\n tempFormat = this.format;\n }\n if (this.value) {\n if (this.getModuleName() === 'datetimepicker') {\n date = this.globalize.formatDate(this.changedArgs.value, { format: tempFormat, type: 'dateTime', skeleton: 'yMd' });\n }\n else {\n date = this.globalize.formatDate(this.changedArgs.value, { format: this.format, type: 'dateTime', skeleton: 'yMd' });\n }\n }\n if (!isNullOrUndefined(date)) {\n Input.setValue(date, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n };\n DatePicker.prototype.isCalendar = function () {\n if (this.popupWrapper && this.popupWrapper.classList.contains('' + POPUPWRAPPER)) {\n return true;\n }\n return false;\n };\n DatePicker.prototype.setWidth = function (width) {\n if (typeof width === 'number') {\n this.inputWrapper.container.style.width = formatUnit(this.width);\n }\n else if (typeof width === 'string') {\n this.inputWrapper.container.style.width = (width.match(/px|%|em/)) ? (this.width) : (formatUnit(this.width));\n }\n else {\n this.inputWrapper.container.style.width = '100%';\n }\n };\n /**\n * Shows the Calendar.\n * @returns void\n */\n DatePicker.prototype.show = function (type, e) {\n if ((this.enabled && this.readonly) || !this.enabled || this.popupObj) {\n return;\n }\n else {\n var prevent_1 = true;\n var outOfRange = void 0;\n if (!isNullOrUndefined(this.value) && !(+this.value >= +this.min && +this.value <= +this.max)) {\n outOfRange = new Date('' + this.value);\n this.setProperties({ 'value': null }, true);\n }\n else {\n outOfRange = this.value || null;\n }\n if (!this.isCalendar()) {\n _super.prototype.render.call(this);\n this.setProperties({ 'value': outOfRange || null }, true);\n this.previousDate = outOfRange;\n this.createCalendar();\n }\n this.preventArgs = {\n preventDefault: function () {\n prevent_1 = false;\n },\n popup: this.popupObj,\n event: e || null,\n cancel: false\n };\n this.trigger('open', this.preventArgs);\n if (prevent_1 && !this.preventArgs.cancel) {\n addClass(this.inputWrapper.buttons, ACTIVE);\n document.body.appendChild(this.popupObj.element);\n this.popupObj.refreshPosition(this.inputElement);\n var openAnimation = {\n name: 'FadeIn',\n duration: Browser.isDevice ? 0 : OPENDURATION,\n };\n this.popupObj.show(new Animation(openAnimation));\n this.setAriaAttributes();\n }\n else {\n detach(this.popupWrapper);\n this.popupObj.destroy();\n this.popupWrapper = this.popupObj = null;\n }\n EventHandler.add(document, 'mousedown touchstart', this.documentHandler, this);\n }\n };\n /**\n * Hide the Calendar.\n * @returns void\n */\n DatePicker.prototype.hide = function (event) {\n if (!isNullOrUndefined(this.popupWrapper)) {\n var prevent_2 = true;\n this.preventArgs = {\n preventDefault: function () {\n prevent_2 = false;\n },\n popup: this.popupObj,\n event: event || null,\n cancel: false\n };\n removeClass(this.inputWrapper.buttons, ACTIVE);\n removeClass([document.body], OVERFLOW);\n if (this.isCalendar()) {\n this.trigger('close', this.preventArgs);\n }\n if (this.isCalendar() && (prevent_2 && !this.preventArgs.cancel)) {\n var closeAnimation = {\n name: 'FadeOut',\n duration: CLOSEDURATION,\n };\n this.popupObj.hide();\n this.keyboardModule.destroy();\n removeClass(this.inputWrapper.buttons, ACTIVE);\n }\n this.setAriaAttributes();\n this.previousElementValue = this.inputElement.value;\n if (Browser.isDevice && this.modal) {\n this.modal.style.display = 'none';\n this.modal.outerHTML = '';\n this.modal = null;\n }\n EventHandler.remove(document, 'mousedown touchstart', this.documentHandler);\n }\n };\n /**\n * Sets the focus to widget for interaction.\n * @returns void\n */\n DatePicker.prototype.focusIn = function (triggerEvent) {\n if (document.activeElement !== this.inputElement && this.enabled) {\n this.inputElement.focus();\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n var focusArguments = {\n model: this\n };\n this.trigger('focus', focusArguments);\n }\n };\n /**\n * Remove the focus from widget, if the widget is in focus state.\n * @returns void\n */\n DatePicker.prototype.focusOut = function () {\n if (document.activeElement === this.inputElement) {\n this.inputElement.blur();\n removeClass([this.inputWrapper.container], [INPUTFOCUS]);\n var blurArguments = {\n model: this\n };\n this.trigger('blur', blurArguments);\n }\n };\n /**\n * Gets the current view of the DatePicker.\n * @returns string\n */\n DatePicker.prototype.currentView = function () {\n var currentView;\n if (this.calendarElement) {\n // calls the Calendar currentView public method\n currentView = _super.prototype.currentView.call(this);\n }\n return currentView;\n };\n /**\n * This method used to navigate to the month/year/decade view of the DatePicker.\n * @param {string} view - Specifies the view of the calendar.\n * @param {Date} date - Specifies the focused date in a view.\n * @returns void\n */\n DatePicker.prototype.navigateTo = function (view, date) {\n if (this.calendarElement) {\n // calls the Calendar navigateTo public method\n _super.prototype.navigateTo.call(this, view, date);\n }\n };\n /**\n * To destroy the widget.\n * @returns void\n */\n DatePicker.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n this.keyboardModules.destroy();\n if (this.popupObj && this.popupObj.element.classList.contains(POPUP)) {\n _super.prototype.destroy.call(this);\n }\n var ariaAttrs = {\n 'aria-live': 'assertive', 'aria-atomic': 'true', 'aria-disabled': 'true',\n 'aria-haspopup': 'true', 'aria-activedescendant': 'null',\n 'aria-owns': this.element.id + '_options', 'aria-expanded': 'false', 'role': 'combobox', 'autocomplete': 'off',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false'\n };\n if (this.inputElement) {\n Input.removeAttributes(ariaAttrs, this.inputElement);\n EventHandler.remove(this.inputElement, 'blur', this.inputBlurHandler);\n EventHandler.remove(this.inputElement, 'focus', this.inputFocusHandler);\n this.ensureInputAttribute();\n }\n if (this.isCalendar()) {\n if (this.popupWrapper) {\n detach(this.popupWrapper);\n }\n this.popupObj = this.popupWrapper = null;\n this.keyboardModule.destroy();\n }\n if (this.ngTag === null) {\n if (this.inputElement) {\n this.inputWrapper.container.insertAdjacentElement('afterend', this.inputElement);\n removeClass([this.inputElement], [INPUTROOT]);\n }\n removeClass([this.element], [ROOT]);\n detach(this.inputWrapper.container);\n }\n var formElement = closest(this.inputElement, 'form');\n if (formElement) {\n EventHandler.remove(formElement, 'reset', this.resetFormHandler);\n }\n };\n DatePicker.prototype.ensureInputAttribute = function () {\n for (var i = 0; i < this.inputElement.attributes.length; i++) {\n var prop = this.inputElement.attributes[i].name;\n if (isNullOrUndefined(this.inputEleCopy.getAttribute(prop))) {\n if (prop.toLowerCase() === 'value' || isNullOrUndefined(this.inputEleCopy.getAttribute('value'))) {\n this.inputElement.value = '';\n }\n this.inputElement.removeAttribute(prop);\n }\n }\n };\n /**\n * Initialize the event handler\n * @private\n */\n DatePicker.prototype.preRender = function () {\n this.inputEleCopy = this.element.cloneNode(true);\n this.inputElement = this.element;\n this.index = this.showClearButton ? 2 : 1;\n this.ngTag = null;\n if (this.element.tagName === 'EJS-DATEPICKER' || this.element.tagName === 'EJS-DATETIMEPICKER') {\n this.ngTag = this.element.tagName;\n this.inputElement = createElement('input');\n this.element.appendChild(this.inputElement);\n }\n if (this.element.getAttribute('id')) {\n if (this.ngTag !== null) {\n this.inputElement.id = this.element.getAttribute('id') + '_input';\n }\n }\n else {\n if (this.getModuleName() === 'datetimepicker') {\n this.element.id = getUniqueID('ej2-datetimepicker');\n if (this.ngTag !== null) {\n attributes(this.inputElement, { 'id': this.element.id + '_input' });\n }\n }\n else {\n this.element.id = getUniqueID('ej2-datepicker');\n if (this.ngTag !== null) {\n attributes(this.inputElement, { 'id': this.element.id + '_input' });\n }\n }\n }\n if (this.ngTag !== null) {\n this.validationAttribute(this.element, this.inputElement);\n }\n this.checkHtmlAttributes();\n _super.prototype.preRender.call(this);\n };\n ;\n DatePicker.prototype.validationAttribute = function (target, inputElement) {\n var nameAttribute = target.getAttribute('name') ? target.getAttribute('name') : target.getAttribute('id');\n inputElement.setAttribute('name', nameAttribute);\n target.removeAttribute('name');\n var attribute = ['required', 'aria-required', 'form'];\n for (var i = 0; i < attribute.length; i++) {\n if (isNullOrUndefined(target.getAttribute(attribute[i]))) {\n continue;\n }\n var attr = target.getAttribute(attribute[i]);\n inputElement.setAttribute(attribute[i], attr);\n target.removeAttribute(attribute[i]);\n }\n };\n DatePicker.prototype.checkHtmlAttributes = function () {\n this.globalize = new Internationalization(this.locale);\n var attributes = ['value', 'min', 'max', 'disabled', 'readonly', 'style', 'name', 'placeholder', 'type'];\n var options;\n if (this.getModuleName() === 'datetimepicker') {\n options = {\n format: !isNullOrUndefined(this.format) ? this.format : this.dateTimeFormat,\n type: 'dateTime', skeleton: 'yMd'\n };\n }\n else {\n options = { format: this.format, type: 'dateTime', skeleton: 'yMd' };\n }\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var prop = attributes_1[_i];\n if (!isNullOrUndefined(this.inputElement.getAttribute(prop))) {\n switch (prop) {\n case 'disabled':\n var enabled = this.inputElement.getAttribute(prop) === 'disabled' ||\n this.inputElement.getAttribute(prop) === '';\n this.setProperties({ enabled: !enabled }, true);\n break;\n case 'readonly':\n var readonly = this.inputElement.getAttribute(prop) === 'readonly' ||\n this.inputElement.getAttribute(prop) === '';\n this.setProperties({ readonly: readonly }, true);\n break;\n case 'placeholder':\n if (this.placeholder === null) {\n var placeholder = this.inputElement.getAttribute(prop);\n this.setProperties({ placeholder: this.inputElement.getAttribute(prop) }, true);\n }\n break;\n case 'style':\n this.inputElement.setAttribute('style', '' + this.inputElement.getAttribute(prop));\n break;\n case 'name':\n this.inputElement.setAttribute('name', '' + this.inputElement.getAttribute(prop));\n break;\n case 'value':\n if (!this.value) {\n var value = this.inputElement.getAttribute(prop);\n this.setProperties(setValue(prop, this.globalize.parseDate(value, options), {}), true);\n }\n break;\n case 'min':\n if (+this.min === +new Date(1900, 0, 1)) {\n this.setProperties(setValue(prop, this.globalize.parseDate(this.inputElement.getAttribute(prop)), {}), true);\n }\n break;\n case 'max':\n if (+this.max === +new Date(2099, 11, 31)) {\n this.setProperties(setValue(prop, this.globalize.parseDate(this.inputElement.getAttribute(prop)), {}), true);\n }\n break;\n case 'type':\n if (this.inputElement.getAttribute(prop) !== 'text') {\n this.inputElement.setAttribute('type', 'text');\n }\n break;\n }\n }\n }\n };\n /**\n * To get component name.\n * @private\n */\n DatePicker.prototype.getModuleName = function () {\n return 'datepicker';\n };\n DatePicker.prototype.disabledDates = function () {\n var valueCopy = new Date(' ' + this.value);\n var previousValCopy = this.previousDate;\n //calls the Calendar render method to check the disabled dates through renderDayCell event and update the input value accordingly.\n this.minMaxUpdates();\n _super.prototype.render.call(this);\n this.previousDate = previousValCopy;\n var date = valueCopy && +(valueCopy);\n var dateIdString = '*[id^=\"/id\"]'.replace('/id', '' + date);\n if (!this.strictMode) {\n if (typeof this.value === 'string' || ((typeof this.value === 'object') && (+this.value) !== (+valueCopy))) {\n this.setProperties({ value: valueCopy }, true);\n }\n }\n if (!isNullOrUndefined(this.calendarElement.querySelectorAll(dateIdString)[0])) {\n if (this.calendarElement.querySelectorAll(dateIdString)[0].classList.contains('e-disabled')) {\n if (!this.strictMode) {\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n }\n }\n }\n var inputVal;\n if (this.getModuleName() === 'datetimepicker') {\n inputVal = this.globalize.formatDate(valueCopy, {\n format: !isNullOrUndefined(this.format) ? this.format : this.dateTimeFormat,\n type: 'dateTime', skeleton: 'yMd'\n });\n }\n else {\n inputVal = this.globalize.formatDate(valueCopy, { format: this.format, type: 'dateTime', skeleton: 'yMd' });\n }\n Input.setValue(inputVal, this.inputElement, this.floatLabelType, this.showClearButton);\n };\n DatePicker.prototype.setAriaAttributes = function () {\n if (this.isCalendar()) {\n Input.addAttributes({ 'aria-expanded': 'true' }, this.inputElement);\n attributes(this.inputElement, {\n 'aria-activedescendant': '' + this.setActiveDescendant()\n });\n }\n else {\n Input.addAttributes({ 'aria-expanded': 'false' }, this.inputElement);\n attributes(this.inputElement, {\n 'aria-activedescendant': 'null'\n });\n }\n };\n DatePicker.prototype.errorClass = function () {\n var dateIdString = '*[id^=\"/id\"]'.replace('/id', '' + (+this.value));\n var isDisabledDate = this.calendarElement &&\n this.calendarElement.querySelectorAll(dateIdString)[0] &&\n this.calendarElement.querySelectorAll(dateIdString)[0].classList.contains('e-disabled');\n if ((!isNullOrUndefined(this.value) && !(+this.value >= +this.min && +this.value <= +this.max))\n || (!this.strictMode && this.inputElement.value !== '' && isNullOrUndefined(this.value) || isDisabledDate)) {\n addClass([this.inputWrapper.container], ERROR);\n }\n else {\n removeClass([this.inputWrapper.container], ERROR);\n }\n };\n /**\n * Called internally if any of the property value changed.\n * returns void\n * @private\n */\n DatePicker.prototype.onPropertyChanged = function (newProp, oldProp) {\n var options = { format: this.format, type: 'dateTime', skeleton: 'yMd' };\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'value':\n if (typeof newProp.value === 'string') {\n newProp.value = this.globalize.parseDate(newProp.value, options);\n this.setProperties({ value: newProp.value }, true);\n }\n this.previousElementValue = this.inputElement.value;\n if (isNullOrUndefined(this.value)) {\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n }\n this.updateInput();\n this.changeTrigger(null);\n break;\n case 'format':\n this.updateInput();\n break;\n case 'placeholder':\n Input.setPlaceholder(this.placeholder, this.inputElement);\n break;\n case 'readonly':\n Input.setReadonly(this.readonly, this.inputElement);\n break;\n case 'enabled':\n Input.setEnabled(this.enabled, this.inputElement);\n if (!this.enabled) {\n this.inputElement.setAttribute('aria-disabled', 'true');\n }\n else {\n this.inputElement.setAttribute('aria-disabled', 'false');\n }\n this.bindEvents();\n break;\n case 'locale':\n this.globalize = new Internationalization(this.locale);\n this.l10n.setLocale(this.locale);\n this.setProperties({ placeholder: this.l10n.getConstant('placeholder') }, true);\n Input.setPlaceholder(this.placeholder, this.inputElement);\n this.updateInput();\n break;\n case 'enableRtl':\n Input.setEnableRtl(this.enableRtl, [this.inputWrapper.container]);\n break;\n case 'zIndex':\n this.setProperties({ zIndex: newProp.zIndex }, true);\n break;\n case 'cssClass':\n Input.setCssClass(newProp.cssClass, [this.inputWrapper.container]);\n if (this.popupWrapper) {\n addClass([this.popupWrapper], [newProp.cssClass]);\n }\n break;\n case 'showClearButton':\n Input.setClearButton(this.showClearButton, this.inputElement, this.inputWrapper);\n this.bindClearEvent();\n break;\n case 'strictMode':\n this.updateInput();\n break;\n case 'width':\n this.setWidth(newProp.width);\n break;\n case 'floatLabelType':\n this.floatLabelType = newProp.floatLabelType;\n Input.removeFloating(this.inputWrapper);\n Input.addFloating(this.inputElement, this.floatLabelType, this.placeholder);\n break;\n default:\n if (this.calendarElement) {\n _super.prototype.onPropertyChanged.call(this, newProp, oldProp);\n }\n break;\n }\n this.hide(null);\n }\n };\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], DatePicker.prototype, \"strictMode\", void 0);\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"format\", void 0);\n __decorate([\n Property(true)\n ], DatePicker.prototype, \"enabled\", void 0);\n __decorate([\n Property(true)\n ], DatePicker.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(false)\n ], DatePicker.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(1000)\n ], DatePicker.prototype, \"zIndex\", void 0);\n __decorate([\n Property(false)\n ], DatePicker.prototype, \"readonly\", void 0);\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"placeholder\", void 0);\n __decorate([\n Property('Never')\n ], DatePicker.prototype, \"floatLabelType\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"destroyed\", void 0);\n DatePicker = __decorate([\n NotifyPropertyChanges\n ], DatePicker);\n return DatePicker;\n}(Calendar));\nexport { DatePicker };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/// \nimport { Property, EventHandler, Internationalization, NotifyPropertyChanges, detach, getUniqueID } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, Event, Browser, L10n, ChildProperty } from '@syncfusion/ej2-base';\nimport { addClass, createElement, remove, closest, select, prepend, removeClass, attributes, Collection } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, isUndefined, formatUnit, setValue, rippleEffect, merge, extend } from '@syncfusion/ej2-base';\nimport { CalendarBase } from '../calendar/calendar';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { ListBase, cssClass as ListBaseClasses } from '@syncfusion/ej2-lists';\nvar DATERANGEWRAPPER = 'e-date-range-wrapper';\nvar INPUTCONTAINER = 'e-input-group';\nvar DATERANGEICON = 'e-input-group-icon e-range-icon e-icons';\nvar POPUP = 'e-popup';\nvar LEFTCALENDER = 'e-left-calendar';\nvar RIGHTCALENDER = 'e-right-calendar';\nvar LEFTCONTAINER = 'e-left-container';\nvar RIGHTCONTAINER = 'e-right-container';\nvar ROOT = 'e-daterangepicker';\nvar ERROR = 'e-error';\nvar ACTIVE = 'e-active';\nvar STARTENDCONTAINER = 'e-start-end';\nvar STARTDATE = 'e-start-date';\nvar ENDDATE = 'e-end-date';\nvar STARTBUTTON = 'e-start-btn';\nvar INPUTFOCUS = 'e-input-focus';\nvar ENDBUTTON = 'e-end-btn';\nvar RANGEHOVER = 'e-range-hover';\nvar OTHERMONTH = 'e-other-month';\nvar STARTLABEL = 'e-start-label';\nvar ENDLABEL = 'e-end-label';\nvar DISABLED = 'e-disabled';\nvar SELECTED = 'e-selected';\nvar CALENDAR = 'e-calendar';\nvar NEXTICON = 'e-next';\nvar PREVICON = 'e-prev';\nvar HEADER = 'e-header';\nvar TITLE = 'e-title';\nvar ICONCONTAINER = 'e-icon-container';\nvar RANGECONTAINER = 'e-date-range-container';\nvar RANGEHEADER = 'e-range-header';\nvar PRESETS = 'e-presets';\nvar FOOTER = 'e-footer';\nvar RANGEBORDER = 'e-range-border';\nvar TODAY = 'e-today';\nvar FOCUSDATE = 'e-focused-date';\nvar CONTENT = 'e-content';\nvar DAYSPAN = 'e-day-span';\nvar WEEKNUMBER = 'e-week-number';\nvar DATEDISABLED = 'e-date-disabled';\nvar ICONDISABLED = 'e-icon-disabled';\nvar CALENDARCONTAINER = 'e-calendar-container';\nvar SEPARATOR = 'e-separator';\nvar APPLY = 'e-apply';\nvar CANCEL = 'e-cancel';\nvar DEVICE = 'e-device';\nvar OVERLAY = 'e-overlay';\nvar CHANGEICON = 'e-change-icon e-icons';\nvar LISTCLASS = ListBaseClasses.li;\nvar RTL = 'e-rtl';\nvar HOVER = 'e-hover';\nvar OVERFLOW = 'e-range-overflow';\nvar OFFSETVALUE = 4;\nvar PRIMARY = 'e-primary';\nvar FLAT = 'e-flat';\nvar CSS = 'e-css';\nvar Presets = /** @class */ (function (_super) {\n __extends(Presets, _super);\n function Presets() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], Presets.prototype, \"label\", void 0);\n __decorate([\n Property()\n ], Presets.prototype, \"start\", void 0);\n __decorate([\n Property()\n ], Presets.prototype, \"end\", void 0);\n return Presets;\n}(ChildProperty));\nexport { Presets };\n/**\n * Represents the DateRangePicker component that allows user to select the date range from the calendar\n * or entering the range through the input element.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar DateRangePicker = /** @class */ (function (_super) {\n __extends(DateRangePicker, _super);\n /**\n * Constructor for creating the widget\n */\n function DateRangePicker(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isCustomRange = false;\n _this.isCustomWindow = false;\n _this.presetsItem = [];\n _this.liCollections = [];\n _this.previousEleValue = '';\n _this.isKeyPopup = false;\n _this.dateDisabled = false;\n _this.isRangeIconClicked = false;\n _this.isMaxDaysClicked = false;\n _this.disabledDays = [];\n _this.preventBlur = false;\n _this.preventFocus = false;\n return _this;\n }\n /**\n * To Initialize the control rendering.\n * @return void\n * @private\n */\n DateRangePicker.prototype.render = function () {\n this.initialize();\n this.setProperties({ startDate: this.startValue }, true);\n this.setProperties({ endDate: this.endValue }, true);\n this.setModelValue();\n };\n /**\n * Initialize the event handler\n * @returns void\n * @private\n */\n DateRangePicker.prototype.preRender = function () {\n this.presetKeyConfig = {\n moveUp: 'uparrow',\n moveDown: 'downarrow',\n enter: 'enter',\n tab: 'tab',\n spacebar: 'space'\n };\n this.keyInputConfigs = {\n altDownArrow: 'alt+downarrow',\n escape: 'escape',\n enter: 'enter',\n tab: 'tab',\n };\n this.defaultConstant = {\n placeholder: '',\n startLabel: 'Start Date',\n endLabel: 'End Date',\n customRange: 'Custom Range',\n applyText: 'Apply',\n cancelText: 'Cancel',\n selectedDays: 'Selected Days',\n days: 'days'\n };\n /**\n * Mobile View\n */\n this.isMobile = window.matchMedia('(max-width:550px)').matches;\n this.inputElement = this.element;\n this.angularTag = null;\n if (this.element.tagName === 'EJS-DATERANGEPICKER') {\n this.angularTag = this.element.tagName;\n this.inputElement = createElement('input');\n this.element.appendChild(this.inputElement);\n }\n this.cloneElement = this.element.cloneNode(true);\n if (this.element.getAttribute('id')) {\n if (this.angularTag !== null) {\n this.inputElement.id = this.element.getAttribute('id') + '_input';\n }\n }\n else {\n this.element.id = getUniqueID('ej2-datetimepicker');\n if (this.angularTag !== null) {\n attributes(this.inputElement, { 'id': this.element.id + '_input' });\n }\n }\n this.initProperty();\n _super.prototype.preRender.call(this);\n this.navNextFunction = this.navNextMonth.bind(this);\n this.navPrevFunction = this.navPrevMonth.bind(this);\n this.deviceNavNextFunction = this.deviceNavNext.bind(this);\n this.deviceNavPrevFunction = this.deviceNavPrevious.bind(this);\n this.initStartDate = this.checkDateValue(this.startValue);\n this.initEndDate = this.checkDateValue(this.endValue);\n };\n ;\n DateRangePicker.prototype.updateValue = function () {\n var dateOptions = { format: this.format, type: 'date', skeleton: 'yMd' };\n if (this.value && this.value.length > 0) {\n if (this.value[0] instanceof Date && !isNaN(+this.value[0])) {\n this.setProperties({ startDate: this.value[0] }, true);\n this.startValue = this.value[0];\n }\n else if (typeof this.value[0] === 'string') {\n this.setProperties({ startDate: new Date('' + this.value[0]) }, true);\n this.startValue = new Date('' + this.value[0]);\n }\n else {\n this.startValue = null;\n this.setValue();\n }\n if (this.value[1] instanceof Date && !isNaN(+this.value[1])) {\n this.setProperties({ endDate: this.value[1] }, true);\n this.endValue = this.value[1];\n }\n else if (typeof this.value[1] === 'string') {\n this.setProperties({ endDate: new Date('' + this.value[1]) }, true);\n this.endValue = new Date('' + this.value[1]);\n this.setValue();\n }\n else {\n this.setProperties({ endDate: null }, true);\n this.endValue = null;\n this.setValue();\n }\n }\n else if (isNullOrUndefined(this.value)) {\n this.endValue = this.checkDateValue(new Date('' + this.endDate));\n this.startValue = this.checkDateValue(new Date('' + this.startDate));\n this.setValue();\n }\n };\n DateRangePicker.prototype.initProperty = function () {\n this.globalize = new Internationalization(this.locale);\n this.updateValue();\n };\n DateRangePicker.prototype.initialize = function () {\n if (this.angularTag !== null) {\n this.validationAttribute(this.element, this.inputElement);\n }\n this.checkHtmlAttributes();\n merge(this.keyConfigs, { shiftTab: 'shift+tab' });\n this.setProperties({ startDate: this.checkDateValue(new Date('' + this.startValue)) }, true); // persist the value propeerty.\n this.setProperties({ endValue: this.checkDateValue(new Date('' + this.endValue)) }, true);\n this.setValue();\n this.setProperties({ min: this.checkDateValue(new Date('' + this.min)) }, true);\n this.setProperties({ max: this.checkDateValue(new Date('' + this.max)) }, true);\n this.l10n = new L10n('daterangepicker', this.defaultConstant, this.locale);\n this.l10n.setLocale(this.locale);\n this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n this.processPresets();\n this.createInput();\n this.bindEvents();\n };\n DateRangePicker.prototype.validationAttribute = function (element, input) {\n var name = element.getAttribute('name') ? element.getAttribute('name') : element.getAttribute('id');\n input.setAttribute('name', name);\n element.removeAttribute('name');\n var attributes = ['required', 'aria-required', 'form'];\n for (var i = 0; i < attributes.length; i++) {\n if (isNullOrUndefined(element.getAttribute(attributes[i]))) {\n continue;\n }\n var attr = element.getAttribute(attributes[i]);\n input.setAttribute(attributes[i], attr);\n element.removeAttribute(attributes[i]);\n }\n };\n DateRangePicker.prototype.processPresets = function () {\n var i = 0;\n if (!isUndefined(this.presets[0].start && this.presets[0].end && this.presets[0].label)) {\n for (var _i = 0, _a = this.presets; _i < _a.length; _i++) {\n var range = _a[_i];\n var id = range.label.replace(/\\s+/g, '') + '_' + (++i);\n if (typeof range.end === 'string' && typeof range.end === 'string') {\n this.presetsItem.push({\n id: id, text: range.label, end: new Date('' + range.end), start: new Date('' + range.start)\n });\n }\n else {\n this.presetsItem.push({ id: id, text: range.label, start: range.start, end: range.end });\n }\n }\n var startDate = isNullOrUndefined(this.startValue) ? null : new Date(+this.startValue);\n var endDate = isNullOrUndefined(this.endValue) ? null : new Date(+this.endValue);\n this.presetsItem.push({ id: 'custom_range', text: this.l10n.getConstant('customRange'), start: startDate, end: endDate });\n if (!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) {\n this.isCustomRange = true;\n this.activeIndex = this.presetsItem.length - 1;\n }\n }\n };\n DateRangePicker.prototype.bindEvents = function () {\n var form = closest(this.element, 'form');\n if (this.enabled) {\n EventHandler.add(this.inputWrapper.buttons[0], 'mousedown touchstart', this.rangeIconHandler, this);\n EventHandler.add(this.inputElement, 'focus', this.inputFocusHandler, this);\n EventHandler.add(this.inputElement, 'blur', this.inputBlurHandler, this);\n EventHandler.add(this.inputElement, 'change', this.inputChangeHandler, this);\n if (this.showClearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown touchstart', this.resetHandler, this);\n }\n if (!this.isMobile) {\n this.inputKeyboardModule = new KeyboardEvents(this.inputElement, {\n eventName: 'keydown', keyAction: this.inputHandler.bind(this), keyConfigs: this.keyInputConfigs\n });\n }\n if (form) {\n EventHandler.add(form, 'reset', this.formResetHandler.bind(this));\n }\n }\n else {\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown touchstart', this.rangeIconHandler);\n EventHandler.remove(this.inputElement, 'blur', this.inputBlurHandler);\n EventHandler.remove(this.inputElement, 'focus', this.inputFocusHandler);\n EventHandler.remove(this.inputElement, 'change', this.inputChangeHandler);\n if (this.showClearButton) {\n EventHandler.remove(this.inputWrapper.clearButton, 'mousedown touchstart', this.resetHandler);\n }\n if (!this.isMobile) {\n if (!isNullOrUndefined(this.inputKeyboardModule)) {\n this.inputKeyboardModule.destroy();\n }\n }\n if (form) {\n EventHandler.remove(form, 'reset', this.formResetHandler.bind(this));\n }\n }\n };\n DateRangePicker.prototype.inputChangeHandler = function (e) {\n e.stopPropagation();\n };\n DateRangePicker.prototype.bindClearEvent = function () {\n if (this.showClearButton && this.inputWrapper.clearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown touchstart', this.resetHandler, this);\n }\n };\n DateRangePicker.prototype.resetHandler = function (e) {\n e.preventDefault();\n this.clear();\n this.changeTrigger(e);\n this.clearRange();\n this.hide(e);\n };\n DateRangePicker.prototype.formResetHandler = function () {\n this.value = null;\n };\n DateRangePicker.prototype.clear = function () {\n if (this.startValue !== null) {\n this.startValue = null;\n }\n if (this.endValue !== null) {\n this.endValue = null;\n }\n if (this.value !== null) {\n this.setProperties({ value: null }, true);\n }\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n if (!(isNullOrUndefined(this.applyButton))) {\n this.applyButton.disabled = this.applyButton.element.disabled = true;\n }\n this.removeSelection();\n };\n DateRangePicker.prototype.rangeIconHandler = function (e) {\n e.preventDefault();\n this.targetElement = null;\n if (this.isPopupOpen()) {\n this.applyFunction(e);\n }\n else {\n this.isRangeIconClicked = true;\n if (!this.isMobile) {\n this.inputWrapper.container.children[0].focus();\n }\n this.show(null, e);\n if (!this.isMobile) {\n if (!isNullOrUndefined(this.leftCalendar)) {\n this.isRangeIconClicked = false;\n this.calendarFocus();\n this.isRangeIconClicked = true;\n }\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\n }\n };\n DateRangePicker.prototype.checkHtmlAttributes = function () {\n this.globalize = new Internationalization(this.locale);\n var attributes;\n attributes = ['startDate', 'endDate', 'minDays', 'maxDays', 'min', 'max', 'disabled',\n 'readonly', 'style', 'name', 'placeholder', 'type'];\n var format = { format: this.format, type: 'date', skeleton: 'yMd' };\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var prop = attributes_1[_i];\n if (!isNullOrUndefined(this.inputElement.getAttribute(prop))) {\n switch (prop) {\n case 'disabled':\n var disabled = this.inputElement.getAttribute(prop) === 'disabled' ||\n this.inputElement.getAttribute(prop) === '';\n this.setProperties({ enabled: !disabled }, true);\n break;\n case 'readonly':\n var readonly = this.inputElement.getAttribute(prop) === 'readonly' ||\n this.inputElement.getAttribute(prop) === '';\n this.setProperties({ readonly: readonly }, true);\n break;\n case 'placeholder':\n if (isNullOrUndefined(this.placeholder) || this.placeholder.trim() === '') {\n this.setProperties({ placeholder: this.inputElement.getAttribute(prop) }, true);\n }\n break;\n case 'style':\n this.inputElement.setAttribute('style', '' + this.inputElement.getAttribute(prop));\n break;\n case 'min':\n if (isNullOrUndefined(this.min) || +this.min === +new Date(1900, 0, 1)) {\n var dateValue = this.globalize.parseDate(this.inputElement.getAttribute(prop), format);\n this.setProperties(setValue(prop, dateValue, {}), true);\n }\n break;\n case 'name':\n this.inputElement.setAttribute('name', '' + this.inputElement.getAttribute(prop));\n break;\n case 'max':\n if (isNullOrUndefined(this.max) || +this.max === +new Date(2099, 11, 31)) {\n var dateValue = this.globalize.parseDate(this.inputElement.getAttribute(prop), format);\n this.setProperties(setValue(prop, dateValue, {}), true);\n }\n break;\n case 'startDate':\n if (isNullOrUndefined(this.startDate)) {\n var dateValue = this.globalize.parseDate(this.inputElement.getAttribute(prop), format);\n this.startValue = dateValue;\n this.setValue();\n }\n break;\n case 'endDate':\n if (isNullOrUndefined(this.endDate)) {\n var dateValue = this.globalize.parseDate(this.inputElement.getAttribute(prop), format);\n this.endValue = dateValue;\n this.setValue();\n }\n break;\n case 'minDays':\n if (isNullOrUndefined(this.minDays)) {\n this.setProperties(setValue(prop, parseInt(this.inputElement.getAttribute(prop), 10), {}), true);\n }\n break;\n case 'maxDays':\n if (isNullOrUndefined(this.maxDays)) {\n this.setProperties(setValue(prop, parseInt(this.inputElement.getAttribute(prop), 10), {}), true);\n }\n break;\n case 'type':\n if (this.inputElement.getAttribute(prop) !== 'text') {\n this.inputElement.setAttribute('type', 'text');\n }\n break;\n }\n }\n }\n };\n DateRangePicker.prototype.createPopup = function () {\n for (var i = 0; i < this.presetsItem.length; i++) {\n if ((i !== (this.presetsItem.length - 1)) && this.presetsItem[i].id === 'custom_range') {\n this.presetsItem.splice(i, 1);\n }\n }\n this.activeIndex = this.presetsItem.length - 1;\n this.isCustomRange = true;\n for (var i = 0; i <= this.presetsItem.length - 2; i++) {\n var startDate = this.presetsItem[i].start;\n var endDate = this.presetsItem[i].end;\n if (this.startValue && this.endValue) {\n if ((+startDate.setMilliseconds(0) === +this.startValue.setMilliseconds(0)) &&\n (+endDate.setMilliseconds(0) === +this.endValue.setMilliseconds(0))) {\n this.activeIndex = i;\n this.isCustomRange = false;\n }\n }\n }\n this.popupWrapper = createElement('div', { id: this.element.id + '_popup', className: ROOT + ' ' + POPUP });\n var isPreset = (!this.isCustomRange || this.isMobile);\n if (!isUndefined(this.presets[0].start && this.presets[0].end && this.presets[0].label) && isPreset) {\n this.isCustomWindow = false;\n this.createPresets();\n document.body.appendChild(this.popupWrapper);\n this.listRippleEffect();\n this.renderPopup();\n }\n else {\n this.isCustomWindow = true;\n this.renderControl();\n }\n };\n DateRangePicker.prototype.renderControl = function () {\n this.createControl();\n this.bindCalendarEvents();\n this.updateRange((this.isMobile ? [this.calendarElement] : [this.leftCalendar, this.rightCalendar]));\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue)) {\n this.disabledDateRender();\n }\n this.updateHeader();\n };\n DateRangePicker.prototype.clearCalendarEvents = function () {\n EventHandler.clearEvents(this.leftCalPrevIcon);\n EventHandler.clearEvents(this.leftCalNextIcon);\n EventHandler.clearEvents(this.rightCalPrevIcon);\n EventHandler.clearEvents(this.rightCalNextIcon);\n };\n DateRangePicker.prototype.updateNavIcons = function () {\n if (this.currentView() === 'Year' || this.currentView() === 'Decade') {\n return;\n }\n this.previousIcon = this.rightCalPrevIcon;\n this.nextIcon = this.leftCalNextIcon;\n this.nextIconHandler(this.compareMonths(new Date('' + this.leftCalCurrentDate), this.rightCalCurrentDate) < 1);\n this.previousIconHandler(this.compareMonths(new Date('' + this.leftCalCurrentDate), this.rightCalCurrentDate) < 1);\n };\n DateRangePicker.prototype.calendarIconEvent = function () {\n this.clearCalendarEvents();\n if (this.leftCalPrevIcon && !this.leftCalPrevIcon.classList.contains(DISABLED)) {\n EventHandler.add(this.leftCalPrevIcon, 'mousedown touchstart', this.navPrevFunction);\n }\n if (this.leftCalNextIcon && !this.leftCalNextIcon.classList.contains(DISABLED)) {\n EventHandler.add(this.leftCalNextIcon, 'mousedown touchstart', this.navNextFunction);\n }\n if (this.rightCalPrevIcon && !this.rightCalPrevIcon.classList.contains(DISABLED)) {\n EventHandler.add(this.rightCalPrevIcon, 'mousedown touchstart', this.navPrevFunction);\n }\n if (this.rightCalNextIcon && !this.rightCalNextIcon.classList.contains(DISABLED)) {\n EventHandler.add(this.rightCalNextIcon, 'mousedown touchstart', this.navNextFunction);\n }\n };\n DateRangePicker.prototype.bindCalendarEvents = function () {\n if (!this.isMobile) {\n this.updateNavIcons();\n this.calendarIconEvent();\n this.calendarIconRipple();\n this.headerTitleElement = this.popupObj.element.querySelector('.' + RIGHTCALENDER + ' .' + HEADER + ' .' + TITLE);\n this.headerTitleElement = this.popupObj.element.querySelector('.' + LEFTCALENDER + ' .' + HEADER + ' .' + TITLE);\n this.leftKeyboardModule = new KeyboardEvents(this.leftCalendar, {\n eventName: 'keydown',\n keyAction: this.keyInputHandler.bind(this),\n keyConfigs: this.keyConfigs\n });\n this.rightKeyboardModule = new KeyboardEvents(this.rightCalendar, {\n eventName: 'keydown',\n keyAction: this.keyInputHandler.bind(this),\n keyConfigs: this.keyConfigs\n });\n }\n else {\n this.deviceCalendarEvent();\n EventHandler.add(this.startButton.element, 'click touchstart', this.deviceHeaderClick, this);\n EventHandler.add(this.endButton.element, 'click touchstart', this.deviceHeaderClick, this);\n }\n this.bindCalendarCellEvents();\n this.removeFocusedDate();\n };\n DateRangePicker.prototype.calendarIconRipple = function () {\n rippleEffect(this.leftCalPrevIcon, { selector: '.e-prev', duration: 400, isCenterRipple: true });\n rippleEffect(this.leftCalNextIcon, { selector: '.e-next', duration: 400, isCenterRipple: true });\n rippleEffect(this.rightCalPrevIcon, { selector: '.e-prev', duration: 400, isCenterRipple: true });\n rippleEffect(this.rightCalNextIcon, { selector: '.e-next', duration: 400, isCenterRipple: true });\n };\n DateRangePicker.prototype.deviceCalendarEvent = function () {\n EventHandler.clearEvents(this.nextIcon);\n EventHandler.clearEvents(this.previousIcon);\n rippleEffect(this.nextIcon, { selector: '.e-prev', duration: 400, isCenterRipple: true });\n rippleEffect(this.previousIcon, { selector: '.e-next', duration: 400, isCenterRipple: true });\n if (this.nextIcon && !this.nextIcon.classList.contains(DISABLED)) {\n EventHandler.add(this.nextIcon, 'mousedown touchstart', this.deviceNavNextFunction);\n }\n if (this.previousIcon && !this.previousIcon.classList.contains(DISABLED)) {\n EventHandler.add(this.previousIcon, 'mousedown touchstart', this.deviceNavPrevFunction);\n }\n };\n DateRangePicker.prototype.deviceNavNext = function (e) {\n var calendar = closest(e.target, '.' + CALENDAR);\n this.updateDeviceCalendar(calendar);\n this.navigateNext(e);\n this.deviceNavigation();\n };\n DateRangePicker.prototype.deviceNavPrevious = function (e) {\n var calendar = closest(e.target, '.' + CALENDAR);\n this.updateDeviceCalendar(calendar);\n this.navigatePrevious(e);\n this.deviceNavigation();\n };\n DateRangePicker.prototype.updateDeviceCalendar = function (calendar) {\n if (calendar) {\n this.previousIcon = calendar.querySelector('.' + PREVICON);\n this.nextIcon = calendar.querySelector('.' + NEXTICON);\n this.calendarElement = calendar;\n this.deviceCalendar = calendar;\n this.contentElement = calendar.querySelector('.' + CONTENT);\n this.tableBodyElement = select('.' + CONTENT + ' tbody', calendar);\n this.table = calendar.querySelector('.' + CONTENT).getElementsByTagName('table')[0];\n this.headerTitleElement = calendar.querySelector('.' + HEADER + ' .' + TITLE);\n this.headerElement = calendar.querySelector('.' + HEADER);\n }\n };\n DateRangePicker.prototype.deviceHeaderClick = function (event) {\n var element = event.currentTarget;\n if (element.classList.contains(STARTBUTTON) && !isNullOrUndefined(this.startValue)) {\n this.endButton.element.classList.remove(ACTIVE);\n this.startButton.element.classList.add(ACTIVE);\n var calendar = this.popupObj.element.querySelector('.' + CALENDAR);\n this.updateDeviceCalendar(calendar);\n if (isNullOrUndefined(this.calendarElement.querySelector('.' + STARTDATE + ':not(.e-other-month)'))) {\n this.currentDate = new Date(+this.startValue);\n remove(this.tableBodyElement);\n this.renderMonths();\n this.deviceNavigation();\n }\n this.removeClassDisabled();\n }\n else if (!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) {\n this.startButton.element.classList.remove(ACTIVE);\n this.endButton.element.classList.add(ACTIVE);\n var calendar = this.popupObj.element.querySelector('.' + CALENDAR);\n this.updateDeviceCalendar(calendar);\n if (isNullOrUndefined(this.calendarElement.querySelector('.' + ENDDATE + ':not(.e-other-month)'))) {\n this.currentDate = new Date(+this.endValue);\n remove(this.tableBodyElement);\n this.renderMonths();\n this.deviceNavigation();\n }\n this.updateMinMaxDays(this.popupObj.element.querySelector('.' + CALENDAR));\n this.selectableDates();\n }\n };\n DateRangePicker.prototype.inputFocusHandler = function () {\n this.preventBlur = false;\n var focusArguments = {\n model: this\n };\n if (!this.preventFocus) {\n this.preventFocus = true;\n this.trigger('focus', focusArguments);\n }\n };\n DateRangePicker.prototype.inputBlurHandler = function (e) {\n if (!this.preventBlur) {\n var value = this.inputElement.value;\n if (!isNullOrUndefined(this.presetsItem)) {\n if (this.presetsItem.length > 0 && this.previousEleValue !== this.inputElement.value) {\n this.activeIndex = this.presetsItem.length - 1;\n this.isCustomRange = true;\n }\n }\n if (!isNullOrUndefined(value) && value.trim() !== '') {\n var range = value.split(' ' + this.separator + ' ');\n if (range.length > 1) {\n var dateOptions = { format: this.format, type: 'date', skeleton: 'yMd' };\n var startDate = this.globalize.parseDate(range[0].trim(), dateOptions);\n var endDate = this.globalize.parseDate(range[1].trim(), dateOptions);\n if (!isNullOrUndefined(startDate) && !isNaN(+startDate) && !isNullOrUndefined(endDate) && !isNaN(+endDate)) {\n this.startValue = startDate;\n this.endValue = endDate;\n this.setValue();\n this.refreshControl();\n this.changeTrigger(e);\n if (!this.preventBlur && document.activeElement !== this.inputElement) {\n this.preventFocus = false;\n var blurArguments = {\n model: this\n };\n this.trigger('blur', blurArguments);\n }\n return;\n }\n else {\n if (!this.strictMode) {\n this.startValue = null;\n this.endValue = null;\n this.setValue();\n }\n }\n }\n else {\n if (!this.strictMode) {\n this.startValue = null;\n this.endValue = null;\n this.setValue();\n }\n }\n }\n if (!this.strictMode) {\n this.clearRange();\n this.startValue = null;\n this.endValue = null;\n this.setValue();\n }\n else {\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n this.updateInput();\n }\n this.errorClass();\n this.changeTrigger(e);\n if (!this.preventBlur && document.activeElement !== this.inputElement) {\n this.preventFocus = false;\n var blurArguments = {\n model: this\n };\n this.trigger('blur', blurArguments);\n }\n }\n };\n DateRangePicker.prototype.clearRange = function () {\n this.previousStartValue = this.previousEndValue = null;\n this.currentDate = null;\n };\n DateRangePicker.prototype.errorClass = function () {\n var inputStr = this.inputElement.value.trim();\n if (((isNullOrUndefined(this.endValue) && isNullOrUndefined(this.startValue) && inputStr !== '') ||\n ((!isNullOrUndefined(this.startValue) && +this.startValue < +this.min)\n || ((!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) && +this.startValue > +this.endValue)\n || (!isNullOrUndefined(this.endValue) && +this.endValue > +this.max))\n || ((this.startValue && this.isDateDisabled(this.startValue))\n || (this.endValue && this.isDateDisabled(this.endValue)))) && inputStr !== '') {\n addClass([this.inputWrapper.container], ERROR);\n attributes(this.inputElement, { 'aria-invalid': 'true' });\n }\n else {\n if (this.inputWrapper) {\n removeClass([this.inputWrapper.container], ERROR);\n attributes(this.inputElement, { 'aria-invalid': 'false' });\n }\n }\n };\n DateRangePicker.prototype.keyCalendarUpdate = function (isLeftCalendar, ele) {\n this.removeFocusedDate();\n if (isLeftCalendar) {\n this.leftCalCurrentDate = new Date(+this.currentDate);\n ele = this.leftCalendar;\n }\n else {\n this.rightCalCurrentDate = new Date(+this.currentDate);\n ele = this.rightCalendar;\n }\n this.updateCalendarElement(ele);\n this.table.focus();\n return ele;\n };\n DateRangePicker.prototype.navInCalendar = function (e, isLeftCalendar, leftLimit, rightLimit, ele) {\n var date;\n var min = this.min;\n var max;\n if (!isNullOrUndefined(this.maxDays) && this.isMaxDaysClicked && !isNullOrUndefined(this.startValue)) {\n max = new Date(new Date(+this.startValue).setDate(this.startValue.getDate() + (this.maxDays - 1)));\n }\n else {\n max = this.max;\n }\n switch (e.action) {\n case 'moveRight':\n date = new Date(+this.currentDate);\n this.addDay(date, 1, e, max, min);\n if (isLeftCalendar && +date === +rightLimit) {\n ele = this.keyCalendarUpdate(false, ele);\n }\n this.KeyboardNavigate(1, 0, e, max, min);\n this.keyNavigation(ele, e);\n break;\n case 'moveLeft':\n date = new Date(+this.currentDate);\n this.addDay(date, -1, e, max, min);\n if (!isLeftCalendar && +date === +leftLimit) {\n ele = this.keyCalendarUpdate(true, ele);\n }\n this.KeyboardNavigate(-1, 0, e, max, min);\n this.keyNavigation(ele, e);\n break;\n case 'moveUp':\n date = new Date(+this.currentDate);\n this.addDay(date, -7, e, max, min);\n if (!isLeftCalendar && +date <= +leftLimit) {\n ele = this.keyCalendarUpdate(true, ele);\n }\n this.KeyboardNavigate(-7, 0, e, max, min);\n this.keyNavigation(ele, e);\n break;\n case 'moveDown':\n date = new Date(+this.currentDate);\n this.addDay(date, 7, e, max, min);\n if (isLeftCalendar && +date >= +rightLimit) {\n ele = this.keyCalendarUpdate(false, ele);\n }\n this.KeyboardNavigate(7, 0, e, max, min);\n this.keyNavigation(ele, e);\n break;\n case 'home':\n this.currentDate = this.firstDay(this.currentDate);\n remove(this.tableBodyElement);\n this.renderMonths();\n this.keyNavigation(ele, e);\n break;\n case 'end':\n this.currentDate = this.lastDay(this.currentDate);\n remove(this.tableBodyElement);\n this.renderMonths();\n this.keyNavigation(ele, e);\n break;\n }\n };\n // tslint:disable-next-line:max-func-body-length\n DateRangePicker.prototype.keyInputHandler = function (e) {\n var date;\n var rightDateLimit = new Date(this.rightCalCurrentDate.getFullYear(), this.rightCalCurrentDate.getMonth(), 1);\n var leftDateLimit = new Date(this.leftCalCurrentDate.getFullYear(), this.leftCalCurrentDate.getMonth() + 1, 0);\n var ele = closest(e.target, '.' + RIGHTCALENDER);\n ele = isNullOrUndefined(ele) ? this.leftCalendar : ele;\n var isLeftCalendar = ele.classList.contains(LEFTCALENDER);\n this.updateCalendarElement(ele);\n var focusedDate = ele.querySelector('tr td.' + FOCUSDATE);\n var startDate = ele.querySelector('tr td.' + STARTDATE);\n var endDate = ele.querySelector('tr td.' + ENDDATE);\n if (!isNullOrUndefined(focusedDate)) {\n this.currentDate = this.currentDate;\n }\n else if (!isNullOrUndefined(endDate) && !this.dateDisabled) {\n this.currentDate = new Date(+this.endValue);\n }\n else if (!isNullOrUndefined(startDate) && !this.dateDisabled) {\n this.currentDate = new Date(+this.startValue);\n }\n else if (!this.dateDisabled) {\n this.currentDate.setDate(1);\n }\n this.effect = '';\n switch (e.action) {\n case 'altUpArrow':\n if (this.isPopupOpen()) {\n this.hide(e);\n this.preventFocus = true;\n if (!this.isMobile) {\n this.inputElement.focus();\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\n }\n break;\n case 'select':\n var element = !isNullOrUndefined(focusedDate) ? focusedDate : startDate;\n if (!isNullOrUndefined(element) && !element.classList.contains(DISABLED)) {\n this.selectRange(e, (element));\n }\n e.preventDefault();\n break;\n case 'controlHome':\n var yearDate = new Date(this.currentDate.getFullYear(), 0, 1);\n if (!isLeftCalendar && +yearDate < +leftDateLimit) {\n ele = this.keyCalendarUpdate(true, ele);\n }\n this.navigateTo('Month', new Date(this.currentDate.getFullYear(), 0, 1));\n this.keyNavigation(ele, e);\n break;\n case 'controlEnd':\n yearDate = new Date(this.currentDate.getFullYear(), 11, 31);\n if (isLeftCalendar && +yearDate > +rightDateLimit) {\n ele = this.keyCalendarUpdate(false, ele);\n }\n this.navigateTo('Month', new Date(this.currentDate.getFullYear(), 11, 31));\n this.keyNavigation(ele, e);\n break;\n case 'pageUp':\n date = new Date(+this.currentDate);\n this.addMonths(date, -1);\n if (!isLeftCalendar && +date <= +leftDateLimit) {\n ele = this.keyCalendarUpdate(true, ele);\n }\n this.addMonths(this.currentDate, -1);\n this.navigateTo('Month', this.currentDate);\n this.keyNavigation(ele, e);\n break;\n case 'pageDown':\n date = new Date(+this.currentDate);\n this.addMonths(date, 1);\n if (isLeftCalendar && +date >= +rightDateLimit) {\n ele = this.keyCalendarUpdate(false, ele);\n }\n this.addMonths(this.currentDate, 1);\n this.navigateTo('Month', this.currentDate);\n this.keyNavigation(ele, e);\n break;\n case 'shiftPageUp':\n date = new Date(+this.currentDate);\n this.addYears(date, -1);\n if (!isLeftCalendar && +date <= +leftDateLimit) {\n ele = this.keyCalendarUpdate(true, ele);\n }\n this.addYears(this.currentDate, -1);\n this.navigateTo('Month', this.currentDate);\n this.keyNavigation(ele, e);\n break;\n case 'shiftPageDown':\n date = new Date(+this.currentDate);\n this.addYears(date, 1);\n if (isLeftCalendar && +date >= +rightDateLimit) {\n ele = this.keyCalendarUpdate(false, ele);\n }\n this.addYears(this.currentDate, 1);\n this.navigateTo('Month', this.currentDate);\n this.keyNavigation(ele, e);\n break;\n case 'shiftTab':\n if (!isNullOrUndefined(this.presetElement)) {\n this.presetElement.setAttribute('tabindex', '0');\n this.presetElement.focus();\n this.removeFocusedDate();\n }\n e.preventDefault();\n break;\n case 'spacebar':\n if (this.applyButton && !this.applyButton.disabled) {\n this.applyFunction(e);\n }\n break;\n default:\n this.navInCalendar(e, isLeftCalendar, leftDateLimit, rightDateLimit, ele);\n this.checkMinMaxDays();\n }\n this.presetHeight();\n };\n DateRangePicker.prototype.keyNavigation = function (calendar, e) {\n this.bindCalendarCellEvents(calendar);\n if (calendar.classList.contains(LEFTCALENDER)) {\n this.leftCalCurrentDate = new Date(+this.currentDate);\n }\n else {\n this.rightCalCurrentDate = new Date(+this.currentDate);\n }\n this.updateNavIcons();\n this.calendarIconEvent();\n this.updateRange([calendar]);\n this.dateDisabled = this.isDateDisabled(this.currentDate);\n e.preventDefault();\n };\n DateRangePicker.prototype.inputHandler = function (e) {\n switch (e.action) {\n case 'altDownArrow':\n if (!this.isPopupOpen()) {\n this.show(null, e);\n this.isRangeIconClicked = false;\n if (!this.isMobile) {\n if (!isNullOrUndefined(this.leftCalendar)) {\n this.calendarFocus();\n }\n }\n this.isKeyPopup = true;\n }\n break;\n case 'escape':\n if (this.isPopupOpen()) {\n this.hide(e);\n }\n break;\n case 'enter':\n if (document.activeElement === this.inputElement) {\n this.inputBlurHandler(e);\n this.hide(e);\n }\n break;\n case 'tab':\n if (document.activeElement === this.inputElement && this.isPopupOpen()) {\n this.hide(e);\n e.preventDefault();\n }\n break;\n }\n };\n DateRangePicker.prototype.bindCalendarCellEvents = function (calendar) {\n var tdCells;\n if (calendar) {\n tdCells = calendar.querySelectorAll('.' + CALENDAR + ' td');\n }\n else {\n tdCells = this.popupObj.element.querySelectorAll('.' + CALENDAR + ' td');\n }\n for (var _i = 0, tdCells_1 = tdCells; _i < tdCells_1.length; _i++) {\n var cell = tdCells_1[_i];\n EventHandler.clearEvents(cell);\n var disabledCell = void 0;\n disabledCell = cell.classList.contains(DISABLED) || cell.classList.contains(DATEDISABLED);\n if (!disabledCell && !cell.classList.contains(WEEKNUMBER)) {\n if (!this.isMobile) {\n EventHandler.add(cell, 'mouseover touchstart', this.hoverSelection, this);\n }\n EventHandler.add(cell, 'mousedown touchstart', this.selectRange, this);\n }\n }\n };\n DateRangePicker.prototype.removeFocusedDate = function () {\n var isDate = !isNullOrUndefined(this.startValue) || !isNullOrUndefined(this.endValue);\n var focusedDate;\n focusedDate = this.popupObj.element.querySelectorAll('.' + CALENDAR + ' .' + FOCUSDATE);\n if ((this.leftCalendar && this.leftCalendar.querySelector('.e-content').classList.contains('e-month')\n && this.rightCalendar && this.rightCalendar.querySelector('.e-content').classList.contains('e-month')) ||\n this.calendarElement && this.calendarElement.querySelector('.e-content').classList.contains('e-month')) {\n for (var _i = 0, focusedDate_1 = focusedDate; _i < focusedDate_1.length; _i++) {\n var ele = focusedDate_1[_i];\n if (!ele.classList.contains(TODAY) || (ele.classList.contains(TODAY) && (isDate))) {\n ele.classList.remove(FOCUSDATE);\n if (!ele.classList.contains(STARTDATE) && !ele.classList.contains(ENDDATE)) {\n ele.removeAttribute('aria-label');\n }\n }\n }\n }\n };\n DateRangePicker.prototype.hoverSelection = function (event, element) {\n var currentElement = element || event.currentTarget;\n var currentDate = this.getIdValue(null, currentElement);\n if ((!isNullOrUndefined(this.startValue) && +this.startValue >= +this.min && +this.startValue <= +this.max)\n || (!isNullOrUndefined(this.endValue) && +this.endValue >= +this.min && +this.endValue <= +this.max)) {\n if ((!this.isDateDisabled(this.endValue) && !this.isDateDisabled(this.startValue)\n && isNullOrUndefined(this.startValue) && isNullOrUndefined(this.endValue))\n || (!isNullOrUndefined(this.startValue) && isNullOrUndefined(this.endValue))) {\n var tdCells = void 0;\n tdCells = this.popupObj.element.querySelectorAll('.' + CALENDAR + ' td');\n for (var _i = 0, tdCells_2 = tdCells; _i < tdCells_2.length; _i++) {\n var ele = tdCells_2[_i];\n var isDisabledCell = (!ele.classList.contains(DISABLED) || ele.classList.contains(DATEDISABLED));\n if (!ele.classList.contains(WEEKNUMBER) && isDisabledCell) {\n var eleDate = this.getIdValue(null, ele);\n var startDateValue = new Date(+this.startValue);\n var eleDateValue = new Date(+eleDate);\n if (eleDateValue.setHours(0, 0, 0, 0) >= startDateValue.setHours(0, 0, 0, 0) && +eleDate <= +currentDate) {\n addClass([ele], RANGEHOVER);\n }\n else {\n removeClass([ele], [RANGEHOVER]);\n }\n }\n }\n }\n }\n };\n DateRangePicker.prototype.updateRange = function (elementCollection) {\n if (!isNullOrUndefined(this.startValue)) {\n for (var _i = 0, elementCollection_1 = elementCollection; _i < elementCollection_1.length; _i++) {\n var calendar = elementCollection_1[_i];\n var tdCells = calendar.querySelectorAll('.' + CALENDAR + ' td');\n for (var _a = 0, tdCells_3 = tdCells; _a < tdCells_3.length; _a++) {\n var ele = tdCells_3[_a];\n if (!ele.classList.contains(WEEKNUMBER) && !ele.classList.contains(DISABLED)) {\n var eleDate = this.getIdValue(null, ele);\n if (!isNullOrUndefined(this.endValue)) {\n if (+eleDate >= +this.startValue && +eleDate <= +this.endValue && +this.startValue !== +this.endValue &&\n +this.startValue >= +this.min && +this.endValue <= +this.max\n && !(this.isDateDisabled(this.startValue) || this.isDateDisabled(this.endValue))) {\n addClass([ele], RANGEHOVER);\n }\n }\n else {\n removeClass([ele], [RANGEHOVER]);\n }\n if (!ele.classList.contains(OTHERMONTH)) {\n var startDateValue = new Date(+this.startValue);\n var eleDateValue = new Date(+eleDate);\n if (eleDateValue.setHours(0, 0, 0, 0) === startDateValue.setHours(0, 0, 0, 0)\n && eleDateValue.setHours(0, 0, 0, 0) >= startDateValue.setHours(0, 0, 0, 0) &&\n +this.startValue >= +this.min\n && !this.inputWrapper.container.classList.contains('e-error')\n && !(this.isDateDisabled(this.startValue) || this.isDateDisabled(this.endValue))) {\n addClass([ele], [STARTDATE, SELECTED]);\n this.addSelectedAttributes(ele, this.startValue, true);\n }\n if (!isNullOrUndefined(this.endValue) && +eleDate === +this.endValue\n && +eleDate <= +this.endValue &&\n +this.startValue >= +this.min\n && !this.inputWrapper.container.classList.contains('e-error')\n && !(this.isDateDisabled(this.startValue) || this.isDateDisabled(this.endValue))) {\n addClass([ele], [ENDDATE, SELECTED]);\n this.addSelectedAttributes(ele, this.startValue, false);\n }\n if (+eleDate === +this.startValue && !isNullOrUndefined(this.endValue) && +eleDate === +this.endValue) {\n this.addSelectedAttributes(ele, this.endValue, false, true);\n }\n }\n }\n }\n }\n }\n };\n DateRangePicker.prototype.checkMinMaxDays = function () {\n if ((!isNullOrUndefined(this.minDays) && this.minDays > 0) || (!isNullOrUndefined(this.maxDays) && this.maxDays > 0)) {\n if (!this.isMobile) {\n this.updateMinMaxDays(this.popupObj.element.querySelector('.' + LEFTCALENDER));\n this.updateMinMaxDays(this.popupObj.element.querySelector('.' + RIGHTCALENDER));\n }\n else {\n this.updateMinMaxDays(this.popupObj.element.querySelector('.' + CALENDAR));\n }\n }\n };\n DateRangePicker.prototype.rangeArgs = function (e) {\n var inputValue;\n var range;\n var startDate = !isNullOrUndefined(this.startValue) ?\n this.globalize.formatDate(this.startValue, { format: this.format, type: 'date', skeleton: 'yMd' }) : null;\n var endDate = !isNullOrUndefined(this.endValue) ?\n this.globalize.formatDate(this.endValue, { format: this.format, type: 'date', skeleton: 'yMd' }) : null;\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue)) {\n inputValue = startDate + ' ' + this.separator + ' ' + endDate;\n range = (Math.round(Math.abs((this.startValue.getTime() - this.endValue.getTime()) / (1000 * 60 * 60 * 24))) + 1);\n }\n else {\n inputValue = '';\n range = 0;\n }\n var args = {\n value: this.value,\n startDate: this.startValue,\n endDate: this.endValue,\n daySpan: range,\n event: e || null,\n element: this.element,\n isInteracted: !isNullOrUndefined(e),\n text: inputValue\n };\n return args;\n };\n DateRangePicker.prototype.otherMonthSelect = function (ele, isStartDate, sameDate) {\n var value = +this.getIdValue(null, ele);\n var dateIdString = '*[id^=\"/id\"]:not(.e-other-month)'.replace('/id', '' + value);\n var tdCell = this.popupObj.element.querySelector(dateIdString);\n if (!isNullOrUndefined(tdCell)) {\n if (isStartDate) {\n addClass([tdCell], [STARTDATE, SELECTED]);\n this.addSelectedAttributes(tdCell, this.startValue, true);\n }\n else {\n addClass([tdCell], [ENDDATE, SELECTED]);\n this.addSelectedAttributes(tdCell, this.endValue, true);\n }\n if (sameDate) {\n this.addSelectedAttributes(ele, this.endValue, false, true);\n }\n }\n };\n // tslint:disable-next-line:max-func-body-length\n DateRangePicker.prototype.selectRange = function (event, element) {\n event.preventDefault();\n var date;\n date = (event instanceof MouseEvent || event instanceof TouchEvent) ? this.getIdValue(event, null) : this.getIdValue(null, element);\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue)) {\n if (!this.isMobile || this.isMobile && !this.endButton.element.classList.contains(ACTIVE)) {\n this.removeSelection();\n }\n }\n else if (this.isMobile && this.startButton.element.classList.contains(ACTIVE)) {\n this.removeSelection();\n }\n var ele = element || event.currentTarget;\n if (isNullOrUndefined(this.startValue)) {\n if (!isNullOrUndefined(this.previousStartValue)) {\n date.setHours(this.previousStartValue.getHours());\n date.setMinutes(this.previousStartValue.getMinutes());\n date.setSeconds(this.previousStartValue.getSeconds());\n }\n this.startValue = new Date('' + date);\n this.endValue = null;\n this.setValue();\n addClass([ele], STARTDATE);\n this.addSelectedAttributes(ele, this.startValue, true);\n if (ele.classList.contains(OTHERMONTH)) {\n this.otherMonthSelect(ele, true);\n }\n this.checkMinMaxDays();\n this.applyButton.disabled = true;\n this.applyButton.element.disabled = true;\n if (this.isMobile) {\n this.endButton.element.classList.add(ACTIVE);\n this.startButton.element.classList.remove(ACTIVE);\n this.endButton.element.removeAttribute('disabled');\n this.selectableDates();\n }\n this.trigger('select', this.rangeArgs(event));\n }\n else {\n if (+date === +this.startValue || +date > +this.startValue) {\n if (+date === +this.startValue && !isNullOrUndefined(this.minDays) && this.minDays > 1) {\n return;\n }\n this.endValue = null;\n this.setValue();\n if (this.isMobile || element) {\n this.hoverSelection(event, element);\n }\n if (!isNullOrUndefined(this.previousEndValue)) {\n date.setHours(this.previousEndValue.getHours());\n date.setMinutes(this.previousEndValue.getMinutes());\n date.setSeconds(this.previousEndValue.getSeconds());\n }\n this.endValue = new Date('' + date);\n this.setValue();\n var endEle = this.popupObj.element.querySelectorAll('.' + ENDDATE);\n if (this.isMobile) {\n this.startButton.element.classList.remove(ACTIVE);\n this.endButton.element.classList.add(ACTIVE);\n for (var _i = 0, endEle_1 = endEle; _i < endEle_1.length; _i++) {\n var ele_1 = endEle_1[_i];\n ele_1.removeAttribute('aria-label');\n if (!ele_1.classList.contains(STARTDATE)) {\n ele_1.setAttribute('aria-selected', 'false');\n removeClass([ele_1], [ENDDATE, SELECTED]);\n }\n else {\n this.addSelectedAttributes(ele_1, this.startValue, true);\n removeClass([ele_1], [ENDDATE]);\n }\n }\n }\n addClass([ele], ENDDATE);\n if (+this.endValue === +this.startValue) {\n this.addSelectedAttributes(ele, this.endValue, false, true);\n }\n else {\n this.addSelectedAttributes(ele, this.endValue, false);\n }\n if (ele.classList.contains(OTHERMONTH)) {\n if (+this.endValue === +this.startValue) {\n this.otherMonthSelect(ele, false, true);\n }\n else {\n this.otherMonthSelect(ele, false);\n }\n }\n endEle = this.popupObj.element.querySelectorAll('.' + ENDDATE);\n for (var _a = 0, endEle_2 = endEle; _a < endEle_2.length; _a++) {\n var ele_2 = endEle_2[_a];\n if (ele_2.classList.contains(STARTDATE)) {\n removeClass([ele_2], [RANGEHOVER]);\n }\n }\n this.applyButton.disabled = false;\n this.applyButton.element.disabled = false;\n if (!this.isMobile) {\n this.removeClassDisabled();\n }\n this.disabledDateRender();\n this.trigger('select', this.rangeArgs(event));\n }\n else if (+date < +this.startValue) {\n this.removeClassDisabled();\n this.startValue = new Date('' + date);\n this.setValue();\n this.removeSelectedAttributes();\n removeClass(this.popupObj.element.querySelectorAll('.' + STARTDATE), [STARTDATE, SELECTED]);\n addClass([ele], STARTDATE);\n this.addSelectedAttributes(ele, this.startValue, true);\n if (ele.classList.contains(OTHERMONTH)) {\n this.otherMonthSelect(ele, true);\n }\n this.checkMinMaxDays();\n }\n }\n addClass([ele], SELECTED);\n this.updateHeader();\n this.removeFocusedDate();\n };\n DateRangePicker.prototype.selectableDates = function () {\n if (!isNullOrUndefined(this.startValue)) {\n var tdCells = this.calendarElement.querySelectorAll('.' + CALENDAR + ' td');\n var isStartDate = false;\n if (this.currentView() === 'Month') {\n for (var _i = 0, tdCells_4 = tdCells; _i < tdCells_4.length; _i++) {\n var ele = tdCells_4[_i];\n if (!ele.classList.contains(STARTDATE) && !ele.classList.contains(WEEKNUMBER)) {\n if (!ele.classList.contains(DISABLED)) {\n var eleDate = this.getIdValue(null, ele);\n if (+eleDate < +this.startValue) {\n addClass([ele], [DATEDISABLED, DISABLED, OVERLAY]);\n EventHandler.clearEvents(ele);\n continue;\n }\n else {\n break;\n }\n }\n }\n if (ele.classList.contains(STARTDATE) && !ele.classList.contains(OTHERMONTH)) {\n isStartDate = true;\n break;\n }\n }\n if (isStartDate) {\n if (!this.previousIcon.classList.contains(DISABLED)) {\n addClass([this.previousIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n }\n }\n else {\n for (var _a = 0, tdCells_5 = tdCells; _a < tdCells_5.length; _a++) {\n var ele = tdCells_5[_a];\n var startMonth = this.startValue.getMonth();\n var startYear = this.startValue.getFullYear();\n var element = this.getIdValue(null, ele);\n if (!this.startButton.element.classList.contains(ACTIVE) && ((this.currentView() === 'Year' &&\n (element.getMonth() < startMonth) && (element.getFullYear() <= startYear))\n || (this.currentView() === 'Decade' && (element.getMonth() <= startMonth) &&\n (element.getFullYear() < startYear)))) {\n addClass([ele], [DISABLED]);\n }\n else {\n break;\n }\n }\n if (tdCells[0].classList.contains(DISABLED)) {\n this.previousIconHandler(true);\n }\n else if (tdCells[tdCells.length - 1].classList.contains(DISABLED)) {\n this.nextIconHandler(true);\n }\n }\n }\n };\n DateRangePicker.prototype.updateMinMaxDays = function (calendar) {\n if (!isNullOrUndefined(this.startValue) && (isNullOrUndefined(this.endValue) || this.isMobile)) {\n if ((!isNullOrUndefined(this.minDays) && this.minDays > 0) || (!isNullOrUndefined(this.maxDays) && this.maxDays > 0)) {\n var minDate = new Date(new Date(+this.startValue).setDate(this.startValue.getDate() + (this.minDays - 1)));\n var maxDate = new Date(new Date(+this.startValue).setDate(this.startValue.getDate() + (this.maxDays - 1)));\n minDate = (!isNullOrUndefined(this.minDays) && this.minDays > 0) ? minDate : null;\n maxDate = (!isNullOrUndefined(this.maxDays) && this.maxDays > 0) ? maxDate : null;\n var tdCells = calendar.querySelectorAll('.' + CALENDAR + ' td');\n var maxEle = void 0;\n for (var _i = 0, tdCells_6 = tdCells; _i < tdCells_6.length; _i++) {\n var ele = tdCells_6[_i];\n if (!ele.classList.contains(STARTDATE) && !ele.classList.contains(WEEKNUMBER)) {\n var eleDate = this.getIdValue(null, ele);\n if (!isNullOrUndefined(minDate) && +eleDate === +minDate && ele.classList.contains(DISABLED)) {\n minDate.setDate(minDate.getDate() + 1);\n }\n if (!ele.classList.contains(DISABLED)) {\n if (+eleDate <= +this.startValue) {\n continue;\n }\n if (!isNullOrUndefined(minDate) && +eleDate < +minDate) {\n addClass([ele], [DATEDISABLED, DISABLED, OVERLAY]);\n EventHandler.clearEvents(ele);\n }\n if (!isNullOrUndefined(maxDate) && +eleDate > +maxDate) {\n addClass([ele], [DATEDISABLED, DISABLED, OVERLAY]);\n this.isMaxDaysClicked = true;\n EventHandler.clearEvents(ele);\n if (isNullOrUndefined(maxEle) && !ele.classList.contains(OTHERMONTH)) {\n maxEle = ele;\n }\n }\n }\n }\n }\n if (!isNullOrUndefined(maxEle)) {\n if (this.isMobile) {\n if (!this.nextIcon.classList.contains(DISABLED)) {\n addClass([this.nextIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n }\n else {\n var calendar_1 = closest(maxEle, '.' + RIGHTCALENDER);\n calendar_1 = isNullOrUndefined(calendar_1) ? this.leftCalendar : calendar_1;\n var isLeftCalendar = calendar_1.classList.contains(LEFTCALENDER);\n if (!isLeftCalendar) {\n if (!this.rightCalNextIcon.classList.contains(DISABLED)) {\n addClass([this.rightCalNextIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n }\n else {\n if (!this.rightCalNextIcon.classList.contains(DISABLED)) {\n addClass([this.rightCalNextIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n if (!this.leftCalNextIcon.classList.contains(DISABLED)) {\n addClass([this.leftCalNextIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n if (!this.rightCalPrevIcon.classList.contains(DISABLED)) {\n addClass([this.rightCalPrevIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n }\n }\n }\n }\n }\n else {\n this.isMaxDaysClicked = false;\n }\n };\n DateRangePicker.prototype.removeClassDisabled = function () {\n var tdCells;\n tdCells = this.popupObj.element.querySelectorAll('.' + CALENDAR + ' td' + '.' + DATEDISABLED);\n for (var _i = 0, tdCells_7 = tdCells; _i < tdCells_7.length; _i++) {\n var ele = tdCells_7[_i];\n if (ele.classList.contains(DATEDISABLED)) {\n removeClass([ele], [DATEDISABLED, DISABLED, OVERLAY]);\n EventHandler.add(ele, 'click', this.selectRange, this);\n if (!this.isMobile) {\n EventHandler.add(ele, 'mouseover touchstart', this.hoverSelection, this);\n }\n }\n }\n if (this.isMobile) {\n if (this.nextIcon.classList.contains(ICONDISABLED)) {\n removeClass([this.nextIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n if (this.previousIcon.classList.contains(ICONDISABLED)) {\n removeClass([this.previousIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n }\n else {\n if (this.rightCalNextIcon.classList.contains(ICONDISABLED)) {\n removeClass([this.rightCalNextIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n if (this.rightCalPrevIcon.classList.contains(ICONDISABLED)) {\n removeClass([this.rightCalPrevIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n if (this.leftCalNextIcon.classList.contains(ICONDISABLED)) {\n removeClass([this.leftCalNextIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n }\n };\n DateRangePicker.prototype.updateHeader = function () {\n var format = { type: 'date', skeleton: 'yMMMd' };\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue)) {\n var range = (Math.round(Math.abs((this.startValue.getTime() - this.endValue.getTime()) / (1000 * 60 * 60 * 24))) + 1);\n if (!isNullOrUndefined(this.disabledDayCnt)) {\n range = range - this.disabledDayCnt;\n this.disabledDayCnt = null;\n }\n this.popupObj.element.querySelector('.' + DAYSPAN).textContent = range.toString() + ' ' + this.l10n.getConstant('days');\n }\n else {\n this.popupObj.element.querySelector('.' + DAYSPAN).textContent = this.l10n.getConstant('selectedDays');\n }\n if (!this.isMobile) {\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue)) {\n this.popupObj.element.querySelector('.' + ENDLABEL).textContent = this.globalize.formatDate(this.endValue, format);\n }\n else {\n this.popupObj.element.querySelector('.' + ENDLABEL).textContent = this.l10n.getConstant('endLabel');\n }\n if (!isNullOrUndefined(this.startValue)) {\n this.popupObj.element.querySelector('.' + STARTLABEL).textContent = this.globalize.formatDate(this.startValue, format);\n }\n else {\n this.popupObj.element.querySelector('.' + STARTLABEL).textContent = this.l10n.getConstant('startLabel');\n }\n }\n else {\n if (!isNullOrUndefined(this.startValue)) {\n this.startButton.element.textContent = this.globalize.formatDate(this.startValue, format);\n }\n else {\n this.startButton.element.textContent = this.l10n.getConstant('startLabel');\n }\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue)) {\n this.endButton.element.textContent = this.globalize.formatDate(this.endValue, format);\n }\n else {\n this.endButton.element.textContent = this.l10n.getConstant('endLabel');\n }\n }\n if ((this.isDateDisabled(this.startValue) || this.isDateDisabled(this.endValue)) ||\n ((!isNullOrUndefined(this.startValue) && +this.startValue < +this.min)\n || (!isNullOrUndefined(this.endValue) && +this.endValue > +this.max)\n || ((!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue))\n && +this.startValue > +this.endValue))) {\n if (!this.isMobile) {\n this.popupObj.element.querySelector('.' + DAYSPAN).textContent = this.l10n.getConstant('selectedDays');\n this.popupObj.element.querySelector('.' + STARTLABEL).textContent = this.l10n.getConstant('startLabel');\n this.popupObj.element.querySelector('.' + ENDLABEL).textContent = this.l10n.getConstant('endLabel');\n }\n else {\n this.startButton.element.textContent = this.l10n.getConstant('startLabel');\n this.endButton.element.textContent = this.l10n.getConstant('endLabel');\n this.popupObj.element.querySelector('.' + DAYSPAN).textContent = this.l10n.getConstant('selectedDays');\n }\n }\n };\n DateRangePicker.prototype.removeSelection = function () {\n this.startValue = null;\n this.endValue = null;\n this.setValue();\n this.removeSelectedAttributes();\n if (this.popupObj) {\n if (this.popupObj.element.querySelectorAll('.' + SELECTED).length > 0) {\n removeClass(this.popupObj.element.querySelectorAll('.' + SELECTED), [STARTDATE, ENDDATE, SELECTED]);\n }\n if (this.popupObj.element.querySelectorAll('.' + FOCUSDATE).length > 0) {\n removeClass(this.popupObj.element.querySelectorAll('.' + FOCUSDATE), FOCUSDATE);\n }\n if (this.popupObj.element.querySelectorAll('.' + RANGEHOVER).length > 0) {\n removeClass(this.popupObj.element.querySelectorAll('.' + RANGEHOVER), [RANGEHOVER]);\n }\n }\n };\n DateRangePicker.prototype.addSelectedAttributes = function (ele, date, isStartDate, sameDate) {\n if (ele) {\n var title = this.globalize.formatDate(date, { type: 'date', skeleton: 'full' });\n if (!isNullOrUndefined(sameDate) && sameDate) {\n ele.setAttribute('aria-label', 'The current start and end date is ' + '' + title);\n }\n else {\n ele.setAttribute('aria-label', 'The current ' + (isStartDate ? 'start' : 'end') + ' date is ' + '' + title);\n }\n ele.setAttribute('aria-selected', 'true');\n }\n };\n DateRangePicker.prototype.removeSelectedAttributes = function () {\n if (this.popupObj) {\n var start = this.popupObj.element.querySelectorAll('.' + STARTDATE);\n for (var _i = 0, start_1 = start; _i < start_1.length; _i++) {\n var ele = start_1[_i];\n ele.setAttribute('aria-selected', 'false');\n ele.removeAttribute('aria-label');\n }\n var end = this.popupObj.element.querySelectorAll('.' + ENDDATE);\n for (var _a = 0, end_1 = end; _a < end_1.length; _a++) {\n var ele = end_1[_a];\n ele.setAttribute('aria-selected', 'false');\n ele.removeAttribute('aria-label');\n }\n }\n };\n DateRangePicker.prototype.updateCalendarElement = function (calendar) {\n if (calendar.classList.contains(LEFTCALENDER)) {\n this.calendarElement = this.leftCalendar;\n this.currentDate = this.leftCalCurrentDate;\n this.previousIcon = this.leftCalPrevIcon;\n this.nextIcon = this.leftCalNextIcon;\n }\n else {\n this.calendarElement = this.rightCalendar;\n this.currentDate = this.rightCalCurrentDate;\n this.previousIcon = this.rightCalPrevIcon;\n this.nextIcon = this.rightCalNextIcon;\n }\n this.contentElement = calendar.querySelector('.' + CONTENT);\n this.tableBodyElement = select('.' + CONTENT + ' tbody', calendar);\n this.table = calendar.querySelector('.' + CONTENT).getElementsByTagName('table')[0];\n this.headerTitleElement = calendar.querySelector('.' + HEADER + ' .' + TITLE);\n this.headerElement = calendar.querySelector('.' + HEADER);\n };\n DateRangePicker.prototype.navPrevMonth = function (e) {\n e.preventDefault();\n var ele = closest(e.target, '.' + LEFTCALENDER);\n ele = isNullOrUndefined(ele) ? closest(e.target, '.' + RIGHTCALENDER) : ele;\n this.updateCalendarElement(ele);\n this.navigatePrevious(e);\n if (!isNullOrUndefined(this.startValue) && isNullOrUndefined(this.endValue)) {\n this.updateMinMaxDays(ele);\n }\n this.updateControl(ele);\n };\n DateRangePicker.prototype.deviceNavigation = function (ele) {\n this.deviceCalendarEvent();\n this.updateRange([this.popupObj.element.querySelector('.' + CALENDAR)]);\n if ((!isNullOrUndefined(this.endValue) && this.endButton.element.classList.contains(ACTIVE))) {\n this.updateMinMaxDays(this.popupObj.element.querySelector('.' + CALENDAR));\n }\n if (this.endButton.element.classList.contains(ACTIVE)) {\n this.selectableDates();\n }\n if (this.currentView() === 'Month') {\n this.bindCalendarCellEvents();\n }\n this.removeFocusedDate();\n this.popupObj.refreshPosition(this.inputElement);\n this.popupObj.show();\n };\n DateRangePicker.prototype.updateControl = function (calendar) {\n if (calendar.classList.contains(RIGHTCALENDER)) {\n this.rightCalCurrentDate = new Date(+this.currentDate);\n }\n else {\n this.leftCalCurrentDate = new Date(+this.currentDate);\n }\n this.updateNavIcons();\n this.calendarIconEvent();\n if ((this.leftCalendar.querySelector('.e-content').classList.contains('e-month')\n && this.rightCalendar.querySelector('.e-content').classList.contains('e-month'))\n || this.isMobile) {\n this.bindCalendarCellEvents();\n }\n this.removeFocusedDate();\n this.updateRange([calendar]);\n this.presetHeight();\n if (!(this.isMobile || this.enableRtl)) {\n this.popupObj.offsetX = -this.popupWrapper.getBoundingClientRect().width;\n this.popupObj.show();\n }\n };\n DateRangePicker.prototype.navNextMonth = function (event) {\n event.preventDefault();\n var ele = closest(event.target, '.' + LEFTCALENDER);\n ele = isNullOrUndefined(ele) ? closest(event.target, '.' + RIGHTCALENDER) : ele;\n this.updateCalendarElement(ele);\n this.navigateNext(event);\n if (!isNullOrUndefined(this.startValue) && isNullOrUndefined(this.endValue)) {\n this.updateMinMaxDays(ele);\n }\n this.updateControl(ele);\n };\n DateRangePicker.prototype.compareMonths = function (start, end) {\n var result;\n if ((this.currentView() === 'Year' || this.currentView() === 'Decade') &&\n start.getFullYear() === end.getFullYear()) {\n result = -1;\n }\n else if (start.getFullYear() > end.getFullYear()) {\n result = -1;\n }\n else if (start.getFullYear() < end.getFullYear()) {\n if (start.getFullYear() + 1 === end.getFullYear() && start.getMonth() === 11 && end.getMonth() === 0) {\n result = -1;\n }\n else {\n result = 1;\n }\n }\n else {\n result = start.getMonth() === end.getMonth() ? 0 : start.getMonth() + 1 === end.getMonth() ? -1 : 1;\n }\n return result;\n };\n DateRangePicker.prototype.isPopupOpen = function () {\n if (!isNullOrUndefined(this.popupObj) && this.popupObj.element.classList.contains(POPUP)) {\n return true;\n }\n return false;\n };\n DateRangePicker.prototype.createRangeHeader = function () {\n var labelContainer = createElement('div', { className: STARTENDCONTAINER });\n if (!this.isMobile) {\n var startLabel = createElement('a', { className: STARTLABEL });\n var endLabel = createElement('a', { className: ENDLABEL });\n var changeIcon = createElement('span', { className: CHANGEICON });\n attributes(startLabel, { 'aria-atomic': 'true', 'aria-live': 'assertive', 'aria-label': 'Start Date', 'role': 'button' });\n attributes(endLabel, { 'aria-atomic': 'true', 'aria-live': 'assertive', 'aria-label': 'End Date', 'role': 'button' });\n labelContainer.appendChild(startLabel);\n labelContainer.appendChild(changeIcon);\n labelContainer.appendChild(endLabel);\n startLabel.textContent = this.l10n.getConstant('startLabel');\n endLabel.textContent = this.l10n.getConstant('endLabel');\n }\n else {\n var endBtn = createElement('button', { className: ENDBUTTON });\n var startBtn = createElement('button', { className: STARTBUTTON });\n this.startButton = new Button({ content: this.l10n.getConstant('startLabel') }, startBtn);\n this.endButton = new Button({ content: this.l10n.getConstant('endLabel') }, endBtn);\n labelContainer.appendChild(startBtn);\n labelContainer.appendChild(endBtn);\n }\n return labelContainer;\n };\n DateRangePicker.prototype.disableInput = function () {\n if (this.strictMode) {\n if (!isNullOrUndefined(this.previousStartValue) && !isNullOrUndefined(this.previousEndValue)) {\n this.startValue = this.previousStartValue;\n this.endValue = this.previousEndValue;\n this.setValue();\n this.updateInput();\n }\n }\n else {\n this.updateInput();\n this.clearRange();\n this.setProperties({ startDate: null }, true);\n this.setProperties({ endDate: null }, true);\n this.startValue = null;\n this.endValue = null;\n this.setValue();\n this.errorClass();\n }\n this.setProperties({ enabled: false }, true);\n Input.setEnabled(this.enabled, this.inputElement);\n this.bindEvents();\n };\n DateRangePicker.prototype.validateMinMax = function () {\n this.min = isNullOrUndefined(this.min) || !(+this.min) ? this.min = new Date(1900, 0, 1) : this.min;\n this.max = isNullOrUndefined(this.max) || !(+this.max) ? this.max = new Date(2099, 11, 31) : this.max;\n if (!(this.min <= this.max)) {\n this.disableInput();\n return;\n }\n if (!isNullOrUndefined(this.minDays) && !isNullOrUndefined(this.maxDays)) {\n if (this.maxDays > 0 && this.minDays > 0 && (this.minDays > this.maxDays)) {\n this.maxDays = null;\n }\n }\n if (!isNullOrUndefined(this.minDays) && this.minDays < 0) {\n this.minDays = null;\n }\n if (!isNullOrUndefined(this.maxDays) && this.maxDays < 0) {\n this.maxDays = null;\n }\n };\n DateRangePicker.prototype.validateRangeStrict = function () {\n if (!isNullOrUndefined(this.startValue)) {\n if (+this.startValue < +this.min) {\n this.startValue = this.min;\n this.setValue();\n }\n else if (+this.startValue > +this.max) {\n this.startValue = this.max;\n }\n }\n if (!isNullOrUndefined(this.endValue)) {\n if (+this.endValue > +this.max) {\n this.endValue = this.max;\n this.setValue();\n }\n else if (+this.endValue < +this.min) {\n this.endValue = this.min;\n this.setValue();\n }\n }\n if ((!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) && +this.startValue > +this.endValue) {\n this.endValue = this.max;\n this.setValue();\n }\n this.validateMinMaxDays();\n };\n DateRangePicker.prototype.validateRange = function () {\n this.validateMinMaxDays();\n };\n DateRangePicker.prototype.validateMinMaxDays = function () {\n if (!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) {\n var range = (Math.round(Math.abs((this.startValue.getTime() - this.endValue.getTime()) / (1000 * 60 * 60 * 24))) + 1);\n if ((!isNullOrUndefined(this.minDays) && this.minDays > 0) && !(range >= this.minDays)) {\n if (this.strictMode) {\n var date = new Date(+this.startValue);\n date.setDate(date.getDate() + (this.minDays - 1));\n if (+date > +this.max) {\n this.endValue = this.max;\n this.setValue();\n }\n else {\n this.endValue = date;\n this.setValue();\n }\n }\n else {\n this.startValue = null;\n this.endValue = null;\n this.setValue();\n }\n }\n if ((!isNullOrUndefined(this.maxDays) && this.maxDays > 0) && !(range <= this.maxDays)) {\n if (this.strictMode) {\n this.endValue = new Date(+this.startValue);\n this.endValue.setDate(this.endValue.getDate() + (this.maxDays - 1));\n this.setValue();\n }\n else {\n this.startValue = null;\n this.endValue = null;\n this.setValue();\n }\n }\n }\n };\n DateRangePicker.prototype.renderCalendar = function () {\n this.calendarElement = createElement('div');\n this.calendarElement.classList.add(CALENDAR);\n if (this.enableRtl) {\n this.calendarElement.classList.add(RTL);\n }\n attributes(this.calendarElement, { 'role': 'calendar' });\n _super.prototype.createHeader.call(this);\n _super.prototype.createContent.call(this);\n };\n DateRangePicker.prototype.isSameMonth = function (start, end) {\n if (start.getMonth() === end.getMonth() && start.getFullYear() === end.getFullYear()) {\n return true;\n }\n return false;\n };\n DateRangePicker.prototype.startMonthCurrentDate = function () {\n if (this.isSameMonth(this.min, this.max) || +this.currentDate > +this.max || this.isSameMonth(this.currentDate, this.max)) {\n this.currentDate = new Date(+this.max);\n this.currentDate.setDate(1);\n this.currentDate.setMonth(this.currentDate.getMonth() - 1);\n }\n else if (this.currentDate < this.min) {\n this.currentDate = new Date('' + this.min);\n }\n };\n DateRangePicker.prototype.selectNextMonth = function () {\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue) && !this.isSameMonth(this.endValue, this.currentDate)\n && !this.isDateDisabled(this.endValue) && !this.isDateDisabled(this.startValue)) {\n this.currentDate = new Date(+this.endValue);\n }\n else {\n this.currentDate.setDate(1);\n this.currentDate.setMonth(this.currentDate.getMonth() + 1);\n return;\n }\n if ((!isNullOrUndefined(this.startValue) && +this.startValue < +this.min)\n || (!isNullOrUndefined(this.endValue) && +this.endValue > +this.max)\n || ((!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) && +this.startValue > +this.endValue)) {\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n this.currentDate.setDate(1);\n this.currentDate.setMonth(this.currentDate.getMonth() + 1);\n }\n };\n DateRangePicker.prototype.selectStartMonth = function () {\n if (!isNullOrUndefined(this.startValue)) {\n if (!isNullOrUndefined(this.max) && this.isSameMonth(this.startValue, this.max)) {\n this.currentDate = new Date(+this.max);\n this.currentDate.setDate(1);\n this.currentDate.setMonth(this.currentDate.getMonth() - 1);\n }\n else if (!(this.startValue >= this.min && this.startValue <= this.max)\n || this.isDateDisabled(this.startValue)) {\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n }\n else {\n this.currentDate = new Date(+this.startValue);\n }\n }\n else {\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n this.startMonthCurrentDate();\n }\n if ((!isNullOrUndefined(this.endValue) && +this.endValue > +this.max)\n || (!isNullOrUndefined(this.startValue) && +this.startValue < +this.min)\n || ((!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) && +this.startValue > +this.endValue)) {\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n }\n this.startMonthCurrentDate();\n };\n DateRangePicker.prototype.createCalendar = function () {\n var calendarContainer = createElement('div', { className: CALENDARCONTAINER });\n if (!this.isMobile) {\n this.selectStartMonth();\n this.renderCalendar();\n this.leftCalCurrentDate = new Date(+this.currentDate);\n this.calendarElement.classList.add(LEFTCALENDER);\n this.leftCalPrevIcon = this.calendarElement.querySelector('.' + LEFTCALENDER + ' .' + PREVICON);\n this.leftCalNextIcon = this.calendarElement.querySelector('.' + LEFTCALENDER + ' .' + NEXTICON);\n this.leftTitle = this.calendarElement.querySelector('.' + LEFTCALENDER + ' .' + TITLE);\n remove(this.calendarElement.querySelector('.' + LEFTCALENDER + ' .' + ICONCONTAINER));\n this.calendarElement.querySelector('.' + LEFTCALENDER + ' .' + HEADER).appendChild(this.leftCalNextIcon);\n this.calendarElement.querySelector('.' + LEFTCALENDER + ' .' + HEADER).appendChild(this.leftCalPrevIcon);\n prepend([this.leftCalPrevIcon], this.calendarElement.querySelector('.' + LEFTCALENDER + ' .' + HEADER));\n this.leftCalendar = this.calendarElement;\n var leftContainer = createElement('div', { className: LEFTCONTAINER });\n var rightContainer = createElement('div', { className: RIGHTCONTAINER });\n leftContainer.appendChild(this.leftCalendar);\n calendarContainer.appendChild(leftContainer);\n if (!this.isMobile) {\n EventHandler.add(this.leftTitle, 'click', this.leftNavTitle, this);\n }\n this.selectNextMonth();\n this.renderCalendar();\n this.rightCalCurrentDate = new Date(+this.currentDate);\n addClass([this.calendarElement], RIGHTCALENDER);\n this.rightCalendar = this.calendarElement;\n removeClass([this.leftCalendar && this.leftCalendar.querySelector('.e-content tbody')], 'e-zoomin');\n removeClass([this.rightCalendar && this.rightCalendar.querySelector('.e-content tbody')], 'e-zoomin');\n this.rightCalPrevIcon = this.calendarElement.querySelector('.' + RIGHTCALENDER + ' .' + PREVICON);\n this.rightCalNextIcon = this.calendarElement.querySelector('.' + RIGHTCALENDER + ' .' + NEXTICON);\n this.rightTitle = this.calendarElement.querySelector('.' + RIGHTCALENDER + ' .' + TITLE);\n remove(this.calendarElement.querySelector('.' + RIGHTCALENDER + ' .' + ICONCONTAINER));\n this.calendarElement.querySelector('table').setAttribute('tabindex', '-1');\n this.calendarElement.querySelector('.' + RIGHTCALENDER + ' .' + HEADER).appendChild(this.rightCalNextIcon);\n this.calendarElement.querySelector('.' + RIGHTCALENDER + ' .' + HEADER).appendChild(this.rightCalPrevIcon);\n prepend([this.rightCalPrevIcon], this.calendarElement.querySelector('.' + RIGHTCALENDER + ' .' + HEADER));\n rightContainer.appendChild(this.rightCalendar);\n calendarContainer.appendChild(rightContainer);\n if (!this.isMobile) {\n EventHandler.add(this.rightTitle, 'click', this.rightNavTitle, this);\n }\n }\n else {\n if (!isNullOrUndefined(this.startValue)) {\n this.currentDate = new Date(+this.startValue);\n }\n _super.prototype.validateDate.call(this);\n _super.prototype.minMaxUpdate.call(this);\n _super.prototype.render.call(this);\n var prevIcon = this.calendarElement.querySelector('.' + CALENDAR + ' .' + PREVICON);\n var nextIcon = this.calendarElement.querySelector('.' + CALENDAR + ' .' + NEXTICON);\n remove(this.calendarElement.querySelector('.' + CALENDAR + ' .' + ICONCONTAINER));\n this.calendarElement.querySelector('.' + CALENDAR + ' .' + HEADER).appendChild(nextIcon);\n this.calendarElement.querySelector('.' + CALENDAR + ' .' + HEADER).appendChild(prevIcon);\n prepend([prevIcon], this.calendarElement.querySelector('.' + CALENDAR + ' .' + HEADER));\n this.deviceCalendar = this.calendarElement;\n calendarContainer.appendChild(this.calendarElement);\n this.headerTitleElement = this.calendarElement.querySelector('.' + CALENDAR + ' .' + HEADER + ' .' + TITLE);\n }\n return calendarContainer;\n };\n DateRangePicker.prototype.leftNavTitle = function (e) {\n if (this.isPopupOpen()) {\n this.calendarElement = this.leftCalendar;\n this.table = this.leftCalendar.querySelector('table');\n this.headerTitleElement = this.leftCalendar.querySelector('.e-title');\n this.tableBodyElement = this.leftCalendar.querySelector('tbody');\n this.tableHeadElement = this.leftCalendar.querySelector('thead');\n this.contentElement = this.leftCalendar.querySelector('.e-content');\n this.updateCalendarElement(this.leftCalendar);\n _super.prototype.navigateTitle.call(this, e);\n this.updateNavIcons();\n }\n };\n DateRangePicker.prototype.rightNavTitle = function (e) {\n if (this.isPopupOpen()) {\n this.calendarElement = this.rightCalendar;\n this.table = this.rightCalendar.querySelector('table');\n this.headerTitleElement = this.rightCalendar.querySelector('.e-title');\n this.tableBodyElement = this.rightCalendar.querySelector('tbody');\n this.tableHeadElement = this.rightCalendar.querySelector('thead');\n this.contentElement = this.rightCalendar.querySelector('.e-content');\n this.updateCalendarElement(this.rightCalendar);\n _super.prototype.navigateTitle.call(this, e);\n this.updateNavIcons();\n }\n };\n DateRangePicker.prototype.clickEventEmitter = function (e) {\n if (!this.isMobile) {\n if (closest(e.target, '.e-calendar.e-left-calendar')) {\n this.calendarElement = this.leftCalendar;\n this.updateCalendarElement(this.leftCalendar);\n }\n else {\n this.calendarElement = this.rightCalendar;\n this.updateCalendarElement(this.rightCalendar);\n }\n }\n };\n /**\n * Gets the current view of the Calendar.\n * @returns string\n * @private\n * @hidden\n */\n DateRangePicker.prototype.currentView = function () {\n return _super.prototype.currentView.call(this);\n };\n DateRangePicker.prototype.navigatedEvent = function (e) {\n var element;\n if (this.isMobile && this.currentView() === 'Month') {\n this.bindCalendarCellEvents();\n this.deviceNavigation();\n this.removeFocusedDate();\n }\n else if (this.isMobile && (this.currentView() === 'Decade' || this.currentView() === 'Year')) {\n this.selectableDates();\n }\n else {\n if (!this.isMobile && this.currentView() === 'Month') {\n element = this.calendarElement.classList.contains('e-left-calendar') ? this.leftCalendar : this.rightCalendar;\n if (element === this.leftCalendar && e && !e.currentTarget.children[0].classList.contains('e-icons')) {\n this.leftCalCurrentDate = new Date(+this.currentDate);\n this.rightCalCurrentDate = new Date(new Date(+this.currentDate).setMonth(new Date(+this.currentDate).getMonth() + 1));\n this.currentDate = this.leftCalCurrentDate;\n this.updateCalendarElement(this.leftCalendar);\n this.updateControl(this.leftCalendar);\n this.updateCalendarElement(this.rightCalendar);\n this.navigateTo('Month', this.rightCalCurrentDate);\n this.updateControl(this.rightCalendar);\n this.updateNavIcons();\n this.calendarIconEvent();\n this.calendarIconRipple();\n }\n else if (e && !e.currentTarget.children[0].classList.contains('e-icons')) {\n this.rightCalCurrentDate = new Date(+this.currentDate);\n this.leftCalCurrentDate = new Date(this.currentDate.setMonth(this.currentDate.getMonth() - 1));\n this.currentDate = this.rightCalCurrentDate;\n this.updateCalendarElement(this.rightCalendar);\n this.updateControl(this.rightCalendar);\n this.updateCalendarElement(this.leftCalendar);\n if (this.startValue && +this.startValue < +this.rightCalCurrentDate) {\n if (isNullOrUndefined(this.endValue)) {\n this.effect = '';\n this.navigateTo('Month', new Date(+this.startValue));\n }\n else {\n this.navigateTo('Month', this.leftCalCurrentDate);\n }\n }\n else {\n this.navigateTo('Month', this.leftCalCurrentDate);\n }\n this.updateControl(this.leftCalendar);\n this.updateNavIcons();\n this.calendarIconEvent();\n this.calendarIconRipple();\n }\n }\n else if (!this.isMobile && (this.currentView() === 'Decade' || this.currentView() === 'Year')) {\n this.updateNavIcons();\n this.calendarIconEvent();\n }\n }\n };\n DateRangePicker.prototype.createControl = function () {\n var controlContainer = createElement('div', { className: RANGECONTAINER });\n var headerContainer = createElement('div', { className: RANGEHEADER });\n var labelContainer = this.createRangeHeader();\n headerContainer.appendChild(labelContainer);\n var daySpan = createElement('div', { className: DAYSPAN });\n attributes(daySpan, { 'aria-label': 'Selected Days' });\n daySpan.textContent = this.l10n.getConstant('selectedDays');\n headerContainer.appendChild(daySpan);\n var separator = createElement('div', { className: SEPARATOR });\n var calendarContainer = this.createCalendar();\n controlContainer.appendChild(headerContainer);\n controlContainer.appendChild(separator);\n controlContainer.appendChild(calendarContainer);\n var footerSection = createElement('div', { className: FOOTER });\n var cancelBtn = createElement('button', { className: CANCEL + ' ' + FLAT + ' ' + CSS });\n var applyBtn = createElement('button');\n addClass([applyBtn], [APPLY, FLAT, PRIMARY, CSS]);\n footerSection.appendChild(applyBtn);\n footerSection.appendChild(cancelBtn);\n var enable = !isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue);\n this.cancelButton = new Button({ content: this.l10n.getConstant('cancelText') }, cancelBtn);\n this.applyButton = new Button({ content: this.l10n.getConstant('applyText'), disabled: !enable }, applyBtn);\n EventHandler.add(applyBtn, 'click touchstart', this.applyFunction, this);\n EventHandler.add(cancelBtn, 'click touchstart', this.cancelFunction, this);\n this.popupWrapper.appendChild(controlContainer);\n document.body.appendChild(this.popupWrapper);\n if (!this.isMobile) {\n if (!isUndefined(this.presets[0].start && this.presets[0].end && this.presets[0].label)) {\n this.createPresets();\n this.listRippleEffect();\n addClass([controlContainer], RANGEBORDER);\n addClass([this.popupWrapper], 'e-preset-wrapper');\n var presets = this.popupWrapper.querySelector('.' + PRESETS);\n presets.style.height = this.popupWrapper.querySelector('.' + RANGECONTAINER).getBoundingClientRect().height + 'px';\n }\n }\n this.popupWrapper.appendChild(footerSection);\n if (this.isMobile) {\n this.deviceHeaderUpdate();\n }\n this.renderPopup();\n };\n DateRangePicker.prototype.cancelFunction = function (eve) {\n if (document.activeElement !== this.inputElement) {\n this.preventFocus = true;\n if (!this.isMobile) {\n this.inputElement.focus();\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\n }\n eve.preventDefault();\n if (!this.isMobile && this.isKeyPopup) {\n this.inputElement.focus();\n this.isKeyPopup = false;\n }\n this.startValue = null;\n this.endValue = null;\n this.hide(eve ? eve : null);\n };\n DateRangePicker.prototype.deviceHeaderUpdate = function () {\n if (isNullOrUndefined(this.startValue) && isNullOrUndefined(this.endValue)) {\n this.endButton.element.setAttribute('disabled', '');\n this.startButton.element.classList.add(ACTIVE);\n }\n else if (!isNullOrUndefined(this.startValue)) {\n this.startButton.element.classList.add(ACTIVE);\n }\n };\n DateRangePicker.prototype.applyFunction = function (eve) {\n if (document.activeElement !== this.inputElement) {\n this.preventFocus = true;\n if (!this.isMobile) {\n this.inputElement.focus();\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\n }\n eve.preventDefault();\n if (!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) {\n this.previousStartValue = new Date(+this.startValue);\n this.previousEndValue = new Date(+this.endValue);\n this.previousEleValue = this.inputElement.value;\n Input.setValue(this.rangeArgs(eve).text, this.inputElement, this.floatLabelType, this.showClearButton);\n this.changeTrigger(eve);\n this.hide(eve ? eve : null);\n this.errorClass();\n }\n else {\n this.hide(eve ? eve : null);\n }\n if (!this.isMobile) {\n this.isKeyPopup = false;\n if (this.isRangeIconClicked) {\n this.inputWrapper.container.children[1].focus();\n this.popupKeyboardModule = new KeyboardEvents(this.inputWrapper.container.children[1], {\n eventName: 'keydown',\n keyAction: this.popupKeyActionHandle.bind(this),\n keyConfigs: this.keyInputConfigs\n });\n }\n }\n };\n DateRangePicker.prototype.onMouseClick = function (event, item) {\n if (event.type === 'touchstart') {\n return;\n }\n var target = item || event.target;\n var li = closest(target, '.' + LISTCLASS);\n var isClick = li && li.classList.contains(ACTIVE);\n if (li && li.classList.contains(LISTCLASS)) {\n this.setListSelection(li, event);\n }\n if (!this.isMobile) {\n this.preventFocus = true;\n this.inputElement.focus();\n if (li && li.classList.contains(LISTCLASS) && li.getAttribute('id') === 'custom_range') {\n this.leftCalendar.children[1].firstElementChild.focus();\n }\n else {\n if (!isClick && event.type === 'keydown') {\n this.inputElement.focus();\n }\n }\n }\n };\n DateRangePicker.prototype.onMouseOver = function (event) {\n var li = closest(event.target, '.' + LISTCLASS);\n if (li && li.classList.contains(LISTCLASS) && !li.classList.contains(HOVER)) {\n addClass([li], HOVER);\n }\n };\n DateRangePicker.prototype.onMouseLeave = function (event) {\n var item = closest(event.target, '.' + HOVER);\n if (!isNullOrUndefined(item)) {\n removeClass([item], HOVER);\n }\n };\n DateRangePicker.prototype.setListSelection = function (li, event) {\n if (li && (!li.classList.contains(ACTIVE) || (this.isMobile && li.classList.contains(ACTIVE)))) {\n if (this.isMobile && li.classList.contains(ACTIVE)) {\n this.activeIndex = Array.prototype.slice.call(this.liCollections).indexOf(li);\n var values_1 = this.presetsItem[this.activeIndex];\n if (values_1.id === 'custom_range') {\n this.renderCustomPopup();\n return;\n }\n return;\n }\n this.removeListSelection();\n this.activeIndex = Array.prototype.slice.call(this.liCollections).indexOf(li);\n addClass([li], ACTIVE);\n li.setAttribute('aria-selected', 'true');\n var values = this.presetsItem[this.activeIndex];\n if (values.id === 'custom_range') {\n this.renderCustomPopup();\n }\n else {\n this.applyPresetRange(values);\n }\n }\n };\n DateRangePicker.prototype.removeListSelection = function () {\n var item = this.presetElement.querySelector('.' + ACTIVE);\n if (!isNullOrUndefined(item)) {\n removeClass([item], ACTIVE);\n item.removeAttribute('aria-selected');\n }\n };\n DateRangePicker.prototype.setValue = function () {\n this.modelValue = [this.startValue, this.endValue];\n };\n DateRangePicker.prototype.applyPresetRange = function (values) {\n this.hide(null);\n this.presetsItem[this.presetsItem.length - 1].start = null;\n this.presetsItem[this.presetsItem.length - 1].end = null;\n this.startValue = values.start;\n this.endValue = values.end;\n this.setValue();\n this.refreshControl();\n this.trigger('select', this.rangeArgs(null));\n this.changeTrigger();\n this.previousEleValue = this.inputElement.value;\n this.isCustomRange = false;\n this.leftCalendar = this.rightCalendar = null;\n if (this.isKeyPopup) {\n this.isRangeIconClicked = false;\n this.inputElement.focus();\n }\n };\n DateRangePicker.prototype.renderCustomPopup = function () {\n this.isCustomWindow = true;\n this.popupObj.hide();\n this.popupWrapper = createElement('div', { id: this.element.id + '_popup', className: ROOT + ' ' + POPUP });\n this.renderControl();\n this.isCustomRange = true;\n if (!this.isMobile) {\n this.calendarFocus();\n }\n };\n DateRangePicker.prototype.listRippleEffect = function () {\n for (var _i = 0, _a = this.liCollections; _i < _a.length; _i++) {\n var li = _a[_i];\n rippleEffect(li);\n }\n };\n DateRangePicker.prototype.createPresets = function () {\n if (!isUndefined(this.presets[0].start && this.presets[0].end && this.presets[0].label)) {\n this.presetElement = createElement('div', { className: PRESETS, attrs: { 'tabindex': '0' } });\n var listTag = ListBase.createList(this.presetsItem, null, true);\n attributes(listTag, { 'role': 'listbox', 'aria-hidden': 'false', 'id': this.element.id + '_options' });\n this.presetElement.appendChild(listTag);\n this.popupWrapper.appendChild(this.presetElement);\n this.liCollections = this.presetElement.querySelectorAll('.' + LISTCLASS);\n this.wireListEvents();\n if (this.isMobile) {\n this.presetElement.style.width = this.inputWrapper.container.getBoundingClientRect().width + 'px';\n }\n if (!isNullOrUndefined(this.activeIndex) && this.activeIndex > -1) {\n addClass([this.liCollections[this.activeIndex]], ACTIVE);\n }\n }\n };\n DateRangePicker.prototype.wireListEvents = function () {\n EventHandler.add(this.presetElement, 'click touchstart', this.onMouseClick, this);\n if (!this.isMobile) {\n EventHandler.add(this.presetElement, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.presetElement, 'mouseout', this.onMouseLeave, this);\n }\n };\n DateRangePicker.prototype.unWireListEvents = function () {\n if (!isNullOrUndefined(this.presetElement)) {\n EventHandler.remove(this.presetElement, 'clicktouchstart', this.onMouseClick);\n if (!this.isMobile) {\n EventHandler.remove(this.presetElement, 'mouseover', this.onMouseOver);\n EventHandler.remove(this.presetElement, 'mouseout', this.onMouseLeave);\n }\n }\n };\n // tslint:disable-next-line:max-func-body-length\n DateRangePicker.prototype.renderPopup = function () {\n var _this = this;\n this.popupWrapper.classList.add('e-control');\n var popupWidth = this.popupWrapper.getBoundingClientRect().width;\n if (!isNullOrUndefined(this.cssClass) && this.cssClass.trim() !== '') {\n this.popupWrapper.classList.add(this.cssClass);\n }\n if (this.isMobile && this.isCustomWindow) {\n this.modal = createElement('div');\n document.body.appendChild(this.modal);\n }\n this.popupObj = new Popup(this.popupWrapper, {\n relateTo: this.isMobile && this.isCustomWindow ? document.body :\n (!isNullOrUndefined(this.targetElement) ? this.targetElement : this.inputWrapper.container),\n position: (this.isMobile ?\n (!isUndefined(this.presets[0].start && this.presets[0].end && this.presets[0].label) && !this.isCustomWindow ?\n { X: 'left', Y: 'bottom' } : { X: 'center', Y: 'center' }) :\n this.enableRtl ? { X: 'left', Y: 'bottom' } : { X: 'right', Y: 'bottom' }),\n offsetX: this.isMobile || this.enableRtl ? 0 : -popupWidth,\n offsetY: OFFSETVALUE,\n collision: this.isMobile ?\n (!isUndefined(this.presets[0].start && this.presets[0].end && this.presets[0].label) && !this.isCustomWindow ?\n { X: 'fit' } : { X: 'fit', Y: 'fit' }) : { X: 'fit' },\n targetType: this.isMobile && this.isCustomWindow ? 'container' : 'relative',\n enableRtl: this.enableRtl,\n zIndex: this.zIndex,\n open: function () {\n attributes(_this.inputElement, { 'aria-expanded': 'true' });\n addClass([_this.inputWrapper.buttons[0]], ACTIVE);\n if (!_this.isMobile) {\n if (_this.cancelButton) {\n _this.btnKeyboardModule = new KeyboardEvents(_this.cancelButton.element, {\n eventName: 'keydown',\n keyAction: _this.hide.bind(_this),\n keyConfigs: { tab: 'tab' }\n });\n }\n if (!isNullOrUndefined(_this.leftCalendar)) {\n if (!_this.isRangeIconClicked) {\n _this.calendarFocus();\n }\n }\n if (!isNullOrUndefined(_this.presetElement)) {\n _this.presetKeyboardModule = new KeyboardEvents(_this.presetElement, {\n eventName: 'keydown',\n keyAction: _this.presetKeyActionHandler.bind(_this),\n keyConfigs: _this.presetKeyConfig\n });\n if (isNullOrUndefined(_this.leftCalendar)) {\n _this.preventBlur = true;\n _this.presetElement.focus();\n }\n else {\n _this.presetElement.setAttribute('tabindex', '-1');\n }\n }\n _this.popupKeyBoardHandler();\n }\n if (_this.isMobile && !Browser.isDevice) {\n EventHandler.add(document, 'keydown', _this.popupCloseHandler, _this);\n }\n },\n close: function () {\n attributes(_this.inputElement, { 'aria-expanded': 'false' });\n removeClass([_this.inputWrapper.buttons[0]], ACTIVE);\n if (!_this.isMobile) {\n if (_this.isRangeIconClicked) {\n _this.inputWrapper.container.children[1].focus();\n }\n }\n if (!isUndefined(_this.presets[0].start && _this.presets[0].end && _this.presets[0].label)) {\n _this.unWireListEvents();\n }\n if (!isNullOrUndefined(_this.popupObj)) {\n remove(_this.popupObj.element);\n _this.popupObj.destroy();\n _this.popupObj = null;\n }\n if (_this.isMobile && !Browser.isDevice) {\n EventHandler.remove(document, 'keydown', _this.popupCloseHandler);\n }\n }\n });\n document.body.appendChild(this.popupObj.element);\n if (this.isMobile) {\n this.popupObj.element.classList.add(DEVICE);\n if (!this.isMobile) {\n this.popupObj.element.classList.add('e-bigger');\n }\n }\n if (this.isMobile && this.isCustomWindow) {\n addClass([this.modal], [DEVICE, ROOT, 'e-range-modal']);\n document.body.className += ' ' + OVERFLOW;\n this.modal.style.display = 'block';\n }\n this.presetHeight();\n if (!(this.isMobile || this.enableRtl)) {\n this.popupObj.offsetX = -this.popupWrapper.getBoundingClientRect().width;\n }\n this.popupObj.refreshPosition(this.inputElement);\n this.popupObj.show();\n EventHandler.add(document, 'mousedown touchstart', this.documentHandler, this);\n };\n DateRangePicker.prototype.popupCloseHandler = function (e) {\n switch (e.keyCode) {\n case 27:\n this.hide(e);\n break;\n }\n };\n DateRangePicker.prototype.calendarFocus = function () {\n var startDate = this.popupObj && this.popupObj.element.querySelector('.' + STARTDATE);\n if (startDate) {\n var ele = closest(startDate, '.' + RIGHTCALENDER);\n ele = isNullOrUndefined(ele) ? this.leftCalendar : ele;\n if (this.isRangeIconClicked) {\n this.inputWrapper.container.focus();\n }\n else {\n this.preventBlur = true;\n ele.children[1].firstElementChild.focus();\n }\n addClass([startDate], FOCUSDATE);\n }\n else {\n if (this.isRangeIconClicked) {\n this.inputWrapper.container.focus();\n }\n else {\n this.preventBlur = true;\n this.leftCalendar.children[1].firstElementChild.focus();\n }\n }\n };\n DateRangePicker.prototype.presetHeight = function () {\n var presets = this.popupObj && this.popupObj.element.querySelector('.' + PRESETS);\n var rangeContainer = this.popupObj && this.popupObj.element.querySelector('.' + RANGECONTAINER);\n if (!isNullOrUndefined(presets) && !isNullOrUndefined(rangeContainer)) {\n presets.style.height = rangeContainer.getBoundingClientRect().height + 'px';\n }\n };\n DateRangePicker.prototype.presetKeyActionHandler = function (e) {\n switch (e.action) {\n case 'moveDown':\n this.listMoveDown(e);\n this.setScrollPosition();\n e.preventDefault();\n break;\n case 'moveUp':\n this.listMoveUp(e);\n this.setScrollPosition();\n e.preventDefault();\n break;\n case 'enter':\n var hvrItem = this.getHoverLI();\n var actItem = this.getActiveLI();\n if (!isNullOrUndefined(this.leftCalendar) && !isNullOrUndefined(actItem)) {\n if (isNullOrUndefined(hvrItem) || (!isNullOrUndefined(actItem) && actItem === hvrItem)) {\n this.activeIndex = Array.prototype.slice.call(this.liCollections).indexOf(actItem);\n var values = this.presetsItem[this.activeIndex];\n if (values.id === 'custom_range') {\n this.calendarFocus();\n actItem.classList.remove(HOVER);\n e.preventDefault();\n return;\n }\n }\n }\n if (!isNullOrUndefined(hvrItem) || !isNullOrUndefined(actItem)) {\n this.onMouseClick(e, hvrItem || actItem);\n }\n e.preventDefault();\n break;\n case 'tab':\n if (this.leftCalendar) {\n var item = this.getHoverLI();\n if (!isNullOrUndefined(item)) {\n item.classList.remove(HOVER);\n }\n }\n else {\n this.hide(e);\n e.preventDefault();\n }\n break;\n }\n };\n DateRangePicker.prototype.listMoveDown = function (e) {\n var hvrItem = this.getHoverLI();\n var actItem = this.getActiveLI();\n if (!isNullOrUndefined(hvrItem)) {\n var li = hvrItem.nextElementSibling;\n if (!isNullOrUndefined(li) && li.classList.contains(LISTCLASS)) {\n removeClass([hvrItem], HOVER);\n addClass([li], HOVER);\n }\n }\n else if (!isNullOrUndefined(actItem)) {\n var li = actItem.nextElementSibling;\n if (!isNullOrUndefined(li) && li.classList.contains(LISTCLASS)) {\n addClass([li], HOVER);\n }\n }\n else {\n addClass([this.liCollections[0]], HOVER);\n }\n };\n DateRangePicker.prototype.listMoveUp = function (e) {\n var hvrItem = this.getHoverLI();\n var actItem = this.getActiveLI();\n if (!isNullOrUndefined(hvrItem)) {\n var li = hvrItem.previousElementSibling;\n if (!isNullOrUndefined(li) && li.classList.contains(LISTCLASS)) {\n removeClass([hvrItem], HOVER);\n addClass([li], HOVER);\n }\n }\n else if (!isNullOrUndefined(actItem)) {\n var li = actItem.previousElementSibling;\n if (!isNullOrUndefined(li) && li.classList.contains(LISTCLASS)) {\n addClass([li], HOVER);\n }\n }\n };\n DateRangePicker.prototype.getHoverLI = function () {\n var item = this.presetElement.querySelector('.' + HOVER);\n return item;\n };\n DateRangePicker.prototype.getActiveLI = function () {\n var item = this.presetElement.querySelector('.' + ACTIVE);\n return item;\n };\n DateRangePicker.prototype.popupKeyBoardHandler = function () {\n this.popupKeyboardModule = new KeyboardEvents(this.popupWrapper, {\n eventName: 'keydown',\n keyAction: this.popupKeyActionHandle.bind(this),\n keyConfigs: { escape: 'escape' }\n });\n this.popupKeyboardModule = new KeyboardEvents(this.inputWrapper.container.children[1], {\n eventName: 'keydown',\n keyAction: this.popupKeyActionHandle.bind(this),\n keyConfigs: this.keyInputConfigs\n });\n };\n DateRangePicker.prototype.setScrollPosition = function () {\n var listHeight = this.presetElement.getBoundingClientRect().height;\n var hover = this.presetElement.querySelector('.' + HOVER);\n var active = this.presetElement.querySelector('.' + ACTIVE);\n var element = !isNullOrUndefined(hover) ? hover : active;\n if (!isNullOrUndefined(element)) {\n var nextEle = element.nextElementSibling;\n var height = nextEle ? nextEle.offsetTop : element.offsetTop;\n var liHeight = element.getBoundingClientRect().height;\n if ((height + element.offsetTop) > listHeight) {\n this.presetElement.scrollTop = nextEle ? (height - (listHeight / 2 + liHeight / 2)) : height;\n }\n else {\n this.presetElement.scrollTop = 0;\n }\n }\n };\n DateRangePicker.prototype.popupKeyActionHandle = function (e) {\n switch (e.action) {\n case 'escape':\n if (this.isPopupOpen()) {\n if (this.isKeyPopup) {\n this.inputElement.focus();\n this.isKeyPopup = false;\n }\n this.hide(e);\n }\n else {\n this.inputWrapper.container.children[1].blur();\n }\n break;\n case 'enter':\n if (!this.isPopupOpen()) {\n this.show(null, e);\n }\n else {\n this.inputWrapper.container.children[1].focus();\n }\n break;\n case 'tab':\n this.hide(e);\n }\n };\n DateRangePicker.prototype.documentHandler = function (e) {\n if (isNullOrUndefined(this.popupObj)) {\n return;\n }\n var target = e.target;\n if (!this.inputWrapper.container.contains(target) ||\n (!isNullOrUndefined(this.popupObj) && !closest(target, this.popupWrapper.id))) {\n if (e.type !== 'touchstart') {\n e.preventDefault();\n }\n }\n if ((isNullOrUndefined(this.targetElement) ||\n (!isNullOrUndefined(this.targetElement) && !(target === this.targetElement))) &&\n !(closest(target, '#' + this.popupObj.element.id))\n && !(closest(target, '.' + INPUTCONTAINER) === this.inputWrapper.container)\n && !(closest(target, '.e-daterangepicker.e-popup') && (!target.classList.contains('e-day')))) {\n this.preventBlur = false;\n if (this.isPopupOpen()) {\n this.applyFunction(e);\n if (!this.isMobile) {\n this.isRangeIconClicked = false;\n }\n }\n }\n };\n DateRangePicker.prototype.createInput = function () {\n this.inputWrapper = Input.createInput({\n floatLabelType: this.floatLabelType,\n element: this.inputElement,\n properties: {\n readonly: this.readonly,\n placeholder: this.placeholder,\n cssClass: this.cssClass,\n enabled: this.enabled,\n enableRtl: this.enableRtl,\n showClearButton: this.showClearButton,\n },\n buttons: [DATERANGEICON]\n });\n attributes(this.inputElement, {\n 'aria-readonly': this.readonly ? 'true' : 'false', 'tabindex': '1', 'aria-haspopup': 'true',\n 'aria-activedescendant': 'null', 'aria-owns': this.element.id + '_popup', 'aria-expanded': 'false',\n 'role': 'daterangepicker', 'autocomplete': 'off', 'aria-disabled': !this.enabled ? 'true' : 'false',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false'\n });\n Input.addAttributes({ 'aria-label': 'select' }, this.inputWrapper.buttons[0]);\n if (!isNullOrUndefined(this.placeholder) && this.placeholder.trim() !== '') {\n Input.addAttributes({ 'aria-placeholder': this.placeholder }, this.inputElement);\n }\n this.setEleWidth(this.width);\n addClass([this.inputWrapper.container], DATERANGEWRAPPER);\n if (isNullOrUndefined(this.inputElement.getAttribute('name'))) {\n attributes(this.inputElement, { 'name': this.element.id });\n }\n if (this.inputElement.type === 'hidden') {\n this.inputWrapper.container.style.display = 'none';\n }\n this.refreshControl();\n this.previousEleValue = this.inputElement.value;\n };\n DateRangePicker.prototype.setEleWidth = function (width) {\n if (typeof width === 'string') {\n this.inputWrapper.container.style.width = (this.width);\n }\n else if (typeof width === 'number') {\n this.inputWrapper.container.style.width = formatUnit(this.width);\n }\n else {\n this.inputWrapper.container.style.width = '100%';\n }\n };\n DateRangePicker.prototype.refreshControl = function () {\n this.validateMinMax();\n if (this.strictMode) {\n this.validateRangeStrict();\n }\n var isDisabled = this.disabledDates();\n if (this.strictMode && (isDisabled)) {\n this.startValue = this.previousStartValue;\n this.setProperties({ startDate: this.startValue }, true);\n this.endValue = this.previousEndValue;\n this.setProperties({ endDate: this.endValue }, true);\n this.setValue();\n }\n this.updateInput();\n if (!this.strictMode) {\n this.validateRange();\n }\n if (!this.strictMode && (isDisabled)) {\n this.clearRange();\n }\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue) && !isDisabled) {\n this.disabledDateRender();\n }\n this.errorClass();\n this.previousStartValue = isNullOrUndefined(this.startValue) || isNaN(+this.startValue) ? null : new Date(+this.startValue);\n this.previousEndValue = isNullOrUndefined(this.endValue) || isNaN(+this.endValue) ? null : new Date(+this.endValue);\n };\n DateRangePicker.prototype.updateInput = function () {\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue)) {\n var startDate = this.globalize.formatDate(this.startValue, { format: this.format, type: 'date', skeleton: 'yMd' });\n var endDate = this.globalize.formatDate(this.endValue, { format: this.format, type: 'date', skeleton: 'yMd' });\n Input.setValue(startDate + ' ' + this.separator + ' ' + endDate, this.inputElement, this.floatLabelType, this.showClearButton);\n this.previousStartValue = new Date(+this.startValue);\n this.previousEndValue = new Date(+this.endValue);\n }\n };\n DateRangePicker.prototype.isDateDisabled = function (date) {\n var value = new Date(+date);\n if (+value < +this.min || +value > +this.max) {\n return true;\n }\n this.virtualRenderCellArgs = {\n date: value,\n isDisabled: false,\n };\n var args = this.virtualRenderCellArgs;\n this.virtualRenderCellEvent(args);\n if (args.isDisabled) {\n return true;\n }\n return false;\n };\n DateRangePicker.prototype.disabledDateRender = function () {\n this.disabledDays = [];\n this.disabledDayCnt = null;\n var localDate = new Date(+this.startValue);\n var count = 0;\n while (+localDate <= +this.endValue) {\n this.virtualRenderCellArgs = {\n date: localDate,\n isDisabled: false,\n };\n var args = this.virtualRenderCellArgs;\n this.virtualRenderCellEvent(args);\n if (args.isDisabled) {\n this.disabledDays.push(new Date(+args.date));\n if (+localDate > +this.startValue && +localDate < +this.endValue) {\n count++;\n }\n }\n this.addDay(localDate, 1, null, this.max, this.min);\n }\n this.disabledDayCnt = count;\n };\n DateRangePicker.prototype.virtualRenderCellEvent = function (args) {\n extend(this.virtualRenderCellArgs, { name: 'renderDayCell' });\n this.trigger('renderDayCell', args);\n };\n DateRangePicker.prototype.disabledDates = function () {\n var isStartDisabled = false;\n var isEndDisabled = false;\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue)) {\n isStartDisabled = this.isDateDisabled(this.startValue);\n isEndDisabled = this.isDateDisabled(this.endValue);\n this.currentDate = null;\n this.setValue();\n }\n return (isStartDisabled || isEndDisabled);\n };\n DateRangePicker.prototype.setModelValue = function () {\n if (this.startDate === null && this.endDate === null) {\n this.setProperties({ value: null }, true);\n }\n else {\n this.setProperties({ value: [this.startDate, this.endDate] }, true);\n }\n };\n DateRangePicker.prototype.changeTrigger = function (e) {\n if (+this.initStartDate !== +this.startValue || +this.initEndDate !== +this.endValue) {\n this.setProperties({ endDate: this.checkDateValue(this.endValue) }, true);\n this.setProperties({ startDate: this.checkDateValue(this.startValue) }, true);\n this.setModelValue();\n this.trigger('change', this.rangeArgs(e));\n }\n this.previousEleValue = this.inputElement.value;\n this.initStartDate = this.checkDateValue(this.startValue);\n this.initEndDate = this.checkDateValue(this.endValue);\n };\n /**\n * This method is used to navigate to the month/year/decade view of the Calendar.\n * @param {string} view - Specifies the view of the Calendar.\n * @param {Date} date - Specifies the focused date in a view.\n * @returns void\n * @hidden\n */\n DateRangePicker.prototype.navigateTo = function (view, value) {\n _super.prototype.navigateTo.call(this, view, value);\n };\n /**\n * Sets the focus to widget for interaction.\n * @returns void\n */\n DateRangePicker.prototype.focusIn = function () {\n if (document.activeElement !== this.inputElement && this.enabled) {\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n this.inputElement.focus();\n var focusArguments = {\n model: this\n };\n this.trigger('focus', focusArguments);\n }\n };\n /**\n * Remove the focus from widget, if the widget is in focus state.\n * @returns void\n */\n DateRangePicker.prototype.focusOut = function () {\n var isBlur = this.preventBlur;\n if (document.activeElement === this.inputElement) {\n removeClass([this.inputWrapper.container], [INPUTFOCUS]);\n this.preventBlur = false;\n this.inputElement.blur();\n this.preventBlur = isBlur;\n }\n };\n /**\n * To destroy the widget.\n * @returns void\n */\n DateRangePicker.prototype.destroy = function () {\n this.hide(null);\n var ariaAttrs = {\n 'aria-readonly': this.readonly ? 'true' : 'false', 'tabindex': '1', 'aria-haspopup': 'true',\n 'aria-activedescendant': 'null', 'aria-owns': this.element.id + '_popup', 'aria-expanded': 'false',\n 'role': 'daterangepicker', 'autocomplete': 'off', 'aria-disabled': !this.enabled ? 'true' : 'false',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'aria-invalid': 'false', 'spellcheck': 'false'\n };\n if (this.inputElement) {\n removeClass([this.inputElement], [ROOT]);\n EventHandler.remove(this.inputElement, 'blur', this.inputBlurHandler);\n Input.removeAttributes(ariaAttrs, this.inputElement);\n this.ensureInputAttribute();\n this.inputElement.classList.remove('e-input');\n if (!isNullOrUndefined(this.inputWrapper)) {\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown touchstart', this.rangeIconHandler);\n if (this.angularTag === null) {\n this.inputWrapper.container.parentElement.appendChild(this.inputElement);\n }\n detach(this.inputWrapper.container);\n }\n }\n if (!isNullOrUndefined(this.inputKeyboardModule) && !this.isMobile) {\n this.inputKeyboardModule.destroy();\n }\n if (this.popupObj) {\n if (!this.isMobile) {\n this.clearCalendarEvents();\n }\n }\n _super.prototype.destroy.call(this);\n this.inputWrapper = this.popupWrapper = this.popupObj = this.cloneElement = this.presetElement = null;\n var form = closest(this.element, 'form');\n if (form) {\n EventHandler.remove(form, 'reset', this.formResetHandler.bind(this));\n }\n };\n DateRangePicker.prototype.ensureInputAttribute = function () {\n for (var attr = 0; attr < this.inputElement.attributes.length; attr++) {\n var prop = this.inputElement.attributes[attr].name;\n if (isNullOrUndefined(this.cloneElement.getAttribute(prop))) {\n if (prop.toLowerCase() === 'value' || isNullOrUndefined(this.cloneElement.getAttribute('value'))) {\n this.inputElement.value = '';\n }\n this.inputElement.removeAttribute(prop);\n }\n }\n };\n /**\n * To get component name\n * @returns string\n * @private\n */\n DateRangePicker.prototype.getModuleName = function () {\n return 'daterangepicker';\n };\n /**\n * Return the properties that are maintained upon browser refresh.\n * @returns string\n */\n DateRangePicker.prototype.getPersistData = function () {\n var keyEntity = ['startDate', 'endDate', 'value'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Return the selected range and day span in the DateRangePicker.\n * @returns Object\n */\n DateRangePicker.prototype.getSelectedRange = function () {\n var range;\n if (!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) {\n range = (Math.round(Math.abs((this.startValue.getTime() - this.endValue.getTime()) / (1000 * 60 * 60 * 24))) + 1);\n this.disabledDateRender();\n if (!isNullOrUndefined(this.disabledDayCnt)) {\n range = range - this.disabledDayCnt;\n this.disabledDayCnt = null;\n }\n }\n else {\n range = 0;\n }\n return { startDate: this.startValue, endDate: this.endValue, daySpan: range };\n };\n /**\n * To open the Popup container in the DateRangePicker component.\n * @returns void\n */\n DateRangePicker.prototype.show = function (element, event) {\n if ((this.enabled && this.readonly) || !this.enabled || this.popupObj) {\n return;\n }\n else {\n if (!this.isPopupOpen()) {\n if (element) {\n this.targetElement = element;\n }\n var args = {\n popup: this.popupObj || null,\n cancel: false,\n date: this.inputElement.value,\n model: this,\n event: event ? event : null\n };\n this.trigger('open', args);\n if (!args.cancel) {\n this.createPopup();\n var isPreset = (!this.isCustomRange || (this.isMobile && this.isCustomRange));\n if (!isUndefined(this.presets[0].start && this.presets[0].end && this.presets[0].label) && isPreset) {\n this.setScrollPosition();\n }\n }\n }\n }\n };\n /**\n * To close the Popup container in the DateRangePicker component.\n * @returns void\n */\n DateRangePicker.prototype.hide = function (event) {\n if (this.popupObj) {\n if (isNullOrUndefined(this.previousEndValue) && isNullOrUndefined(this.previousStartValue)) {\n this.clearRange();\n }\n else {\n if (!isNullOrUndefined(this.previousStartValue)) {\n this.startValue = new Date('' + this.previousStartValue);\n this.setValue();\n this.currentDate = new Date('' + this.startValue);\n }\n else {\n this.startValue = null;\n this.setValue();\n }\n if (!isNullOrUndefined(this.previousEndValue)) {\n this.endValue = new Date('' + this.previousEndValue);\n this.setValue();\n }\n else {\n this.endValue = null;\n this.setValue();\n }\n }\n if (this.isPopupOpen()) {\n var args = {\n cancel: false,\n popup: this.popupObj,\n date: this.inputElement.value,\n model: this,\n event: event ? event : null\n };\n this.trigger('close', args);\n if (!args.cancel) {\n if (this.isMobile) {\n if (!isNullOrUndefined(this.startButton) && !isNullOrUndefined(this.endButton)) {\n EventHandler.remove(this.startButton.element, 'click touchstart', this.deviceHeaderClick);\n EventHandler.remove(this.endButton.element, 'click touchstart', this.deviceHeaderClick);\n }\n }\n if (this.popupObj) {\n this.popupObj.hide();\n }\n if (!this.isMobile) {\n if (!isNullOrUndefined(this.leftKeyboardModule) && !isNullOrUndefined(this.rightKeyboardModule)) {\n this.leftKeyboardModule.destroy();\n this.rightKeyboardModule.destroy();\n }\n if (!isNullOrUndefined(this.presetElement)) {\n this.presetKeyboardModule.destroy();\n }\n if (!isNullOrUndefined(this.cancelButton)) {\n this.btnKeyboardModule.destroy();\n }\n }\n this.targetElement = null;\n removeClass([document.body], OVERFLOW);\n EventHandler.remove(document, 'mousedown touchstart', this.documentHandler);\n if (this.isMobile && this.modal) {\n this.modal.style.display = 'none';\n this.modal.outerHTML = '';\n this.modal = null;\n }\n this.isKeyPopup = this.dateDisabled = false;\n }\n else {\n EventHandler.remove(document, 'mousedown touchstart', this.documentHandler);\n removeClass([this.inputWrapper.buttons[0]], ACTIVE);\n }\n }\n }\n };\n DateRangePicker.prototype.setLocale = function () {\n this.globalize = new Internationalization(this.locale);\n this.l10n.setLocale(this.locale);\n this.setProperties({ placeholder: this.l10n.getConstant('placeholder') }, true);\n Input.setPlaceholder(this.placeholder, this.inputElement);\n this.updateInput();\n this.changeTrigger();\n };\n DateRangePicker.prototype.refreshChange = function () {\n this.refreshControl();\n this.changeTrigger();\n };\n DateRangePicker.prototype.setDate = function () {\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n this.refreshChange();\n };\n DateRangePicker.prototype.enableInput = function () {\n if (+this.min <= +this.max) {\n this.setProperties({ enabled: true }, true);\n Input.setEnabled(this.enabled, this.inputElement);\n if (this.element.hasAttribute('disabled')) {\n this.bindEvents();\n }\n }\n };\n DateRangePicker.prototype.clearModelvalue = function () {\n this.setProperties({ startDate: null }, true);\n this.setProperties({ endDate: null }, true);\n this.setProperties({ value: null }, true);\n this.updateValue();\n this.setDate();\n };\n /**\n * Called internally if any of the property value changed.\n * returns void\n * @private\n */\n // tslint:disable-next-line:max-func-body-length\n DateRangePicker.prototype.onPropertyChanged = function (newProp, oldProp) {\n var format = { format: this.format, type: 'date', skeleton: 'yMd' };\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n this.hide(null);\n switch (prop) {\n case 'width':\n this.setEleWidth(this.width);\n break;\n case 'separator':\n this.previousEleValue = this.inputElement.value;\n this.setProperties({ separator: newProp.separator }, true);\n this.updateInput();\n this.changeTrigger();\n break;\n case 'placeholder':\n Input.setPlaceholder(newProp.placeholder, this.inputElement);\n this.setProperties({ placeholder: newProp.placeholder }, true);\n break;\n case 'readonly':\n Input.setReadonly(this.readonly, this.inputElement);\n this.inputElement.setAttribute('aria-readonly', '' + this.readonly);\n break;\n case 'cssClass':\n if (this.popupWrapper) {\n addClass([this.popupWrapper], [newProp.cssClass]);\n }\n addClass([this.inputWrapper.container], [newProp.cssClass]);\n this.setProperties({ cssClass: newProp.cssClass }, true);\n break;\n case 'enabled':\n this.setProperties({ enabled: newProp.enabled }, true);\n Input.setEnabled(this.enabled, this.inputElement);\n this.bindEvents();\n break;\n case 'enableRtl':\n this.setProperties({ enableRtl: newProp.enableRtl }, true);\n Input.setEnableRtl(this.enableRtl, [this.inputWrapper.container]);\n break;\n case 'zIndex':\n this.setProperties({ zIndex: newProp.zIndex }, true);\n break;\n case 'format':\n this.setProperties({ format: newProp.format }, true);\n this.updateInput();\n this.changeTrigger();\n break;\n case 'locale':\n this.globalize = new Internationalization(this.locale);\n this.l10n.setLocale(this.locale);\n this.setProperties({ placeholder: this.l10n.getConstant('placeholder') }, true);\n Input.setPlaceholder(this.placeholder, this.inputElement);\n this.setLocale();\n break;\n case 'showClearButton':\n Input.setClearButton(this.showClearButton, this.inputElement, this.inputWrapper);\n this.bindClearEvent();\n break;\n case 'startDate':\n if (typeof newProp.startDate === 'string') {\n newProp.startDate = this.globalize.parseDate(newProp.startDate, format);\n }\n if (+this.initStartDate !== +newProp.startDate) {\n this.startValue = newProp.startDate;\n this.setValue();\n this.setDate();\n }\n break;\n case 'endDate':\n if (typeof newProp.endDate === 'string') {\n newProp.endDate = this.globalize.parseDate(newProp.endDate, format);\n }\n if (+this.initEndDate !== +newProp.endDate) {\n this.endValue = this.checkDateValue(new Date('' + newProp.endDate));\n this.setValue();\n this.setDate();\n }\n break;\n case 'value':\n if (!isNullOrUndefined(newProp.value) && newProp.value.length > 0) {\n if (newProp.value[0] === null) {\n if (newProp.value.length === 1) {\n this.clearModelvalue();\n }\n else if (newProp.value[1] === null) {\n this.clearModelvalue();\n }\n }\n else if (+this.initStartDate !== +newProp.value[0] || +this.initEndDate !== +newProp.value[1]) {\n this.modelValue = newProp.value;\n this.updateValue();\n this.setDate();\n }\n }\n else {\n if (isNullOrUndefined(this.value) || this.value.length === 0) {\n this.startValue = null;\n this.endValue = null;\n this.clearModelvalue();\n }\n }\n break;\n case 'minDays':\n this.setProperties({ minDays: newProp.minDays }, true);\n this.refreshChange();\n break;\n case 'maxDays':\n this.setProperties({ maxDays: newProp.maxDays }, true);\n this.refreshChange();\n break;\n case 'min':\n this.setProperties({ min: this.checkDateValue(new Date('' + newProp.min)) }, true);\n this.previousEleValue = this.inputElement.value;\n this.enableInput();\n this.refreshChange();\n break;\n case 'max':\n this.setProperties({ max: this.checkDateValue(new Date('' + newProp.max)) }, true);\n this.enableInput();\n this.refreshChange();\n break;\n case 'strictMode':\n this.setProperties({ strictMode: newProp.strictMode }, true);\n this.refreshChange();\n break;\n case 'presets':\n this.setProperties({ presets: newProp.presets }, true);\n this.processPresets();\n break;\n case 'floatLabelType':\n this.floatLabelType = newProp.floatLabelType;\n Input.removeFloating(this.inputWrapper);\n Input.addFloating(this.inputElement, this.floatLabelType, this.placeholder);\n break;\n }\n }\n };\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"value\", void 0);\n __decorate([\n Property(false)\n ], DateRangePicker.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(false)\n ], DateRangePicker.prototype, \"enableRtl\", void 0);\n __decorate([\n Property(new Date(1900, 0, 1))\n ], DateRangePicker.prototype, \"min\", void 0);\n __decorate([\n Property(new Date(2099, 11, 31))\n ], DateRangePicker.prototype, \"max\", void 0);\n __decorate([\n Property('en-US')\n ], DateRangePicker.prototype, \"locale\", void 0);\n __decorate([\n Property(0)\n ], DateRangePicker.prototype, \"firstDayOfWeek\", void 0);\n __decorate([\n Property(false)\n ], DateRangePicker.prototype, \"weekNumber\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"navigated\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"renderDayCell\", void 0);\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"startDate\", void 0);\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"endDate\", void 0);\n __decorate([\n Collection([{}], Presets)\n ], DateRangePicker.prototype, \"presets\", void 0);\n __decorate([\n Property('')\n ], DateRangePicker.prototype, \"width\", void 0);\n __decorate([\n Property(1000)\n ], DateRangePicker.prototype, \"zIndex\", void 0);\n __decorate([\n Property(true)\n ], DateRangePicker.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(true)\n ], DateRangePicker.prototype, \"showTodayButton\", void 0);\n __decorate([\n Property('Month')\n ], DateRangePicker.prototype, \"start\", void 0);\n __decorate([\n Property('Month')\n ], DateRangePicker.prototype, \"depth\", void 0);\n __decorate([\n Property('')\n ], DateRangePicker.prototype, \"cssClass\", void 0);\n __decorate([\n Property('-')\n ], DateRangePicker.prototype, \"separator\", void 0);\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"minDays\", void 0);\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"maxDays\", void 0);\n __decorate([\n Property(false)\n ], DateRangePicker.prototype, \"strictMode\", void 0);\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"format\", void 0);\n __decorate([\n Property(true)\n ], DateRangePicker.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], DateRangePicker.prototype, \"readonly\", void 0);\n __decorate([\n Property('Never')\n ], DateRangePicker.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"placeholder\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"select\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"blur\", void 0);\n DateRangePicker = __decorate([\n NotifyPropertyChanges\n ], DateRangePicker);\n return DateRangePicker;\n}(CalendarBase));\nexport { DateRangePicker };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n///\nimport { EventHandler, Internationalization, Property, NotifyPropertyChanges, Browser } from '@syncfusion/ej2-base';\nimport { Animation, Event, cldrData, getDefaultDateObject, detach } from '@syncfusion/ej2-base';\nimport { createElement, remove, addClass, L10n, removeClass, closest, append, attributes } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, isNullOrUndefined, formatUnit, getValue, rippleEffect } from '@syncfusion/ej2-base';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { DatePicker } from '../datepicker/datepicker';\nimport { TimePickerBase } from '../timepicker/timepicker';\nimport { cssClass as ListBaseClasses } from '@syncfusion/ej2-lists';\n//class constant defination\nvar DATEWRAPPER = 'e-date-wrapper';\nvar DATEPICKERROOT = 'e-datepicker';\nvar DATETIMEWRAPPER = 'e-datetime-wrapper';\nvar DAY = new Date().getDate();\nvar MONTH = new Date().getMonth();\nvar YEAR = new Date().getFullYear();\nvar HOUR = new Date().getHours();\nvar MINUTE = new Date().getMinutes();\nvar SECOND = new Date().getSeconds();\nvar MILLISECOND = new Date().getMilliseconds();\nvar ROOT = 'e-datetimepicker';\nvar DATETIMEPOPUPWRAPPER = 'e-datetimepopup-wrapper';\nvar INPUTWRAPPER = 'e-input-group-icon';\nvar POPUP = 'e-popup';\nvar TIMEICON = 'e-time-icon';\nvar INPUTFOCUS = 'e-input-focus';\nvar POPUPDIMENSION = '250px';\nvar ICONANIMATION = 'e-icon-anim';\nvar DISABLED = 'e-disabled';\nvar ERROR = 'e-error';\nvar CONTENT = 'e-content';\nvar RTL = 'e-rtl';\nvar NAVIGATION = 'e-navigation';\nvar ACTIVE = 'e-active';\nvar HOVER = 'e-hover';\nvar ICONS = 'e-icons';\nvar HALFPOSITION = 2;\nvar LISTCLASS = ListBaseClasses.li;\nvar ANIMATIONDURATION = 100;\nvar OVERFLOW = 'e-time-overflow';\n/**\n * Represents the DateTimePicker component that allows user to select\n * or enter a date time value.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar DateTimePicker = /** @class */ (function (_super) {\n __extends(DateTimePicker, _super);\n /**\n * Constructor for creating the widget\n */\n function DateTimePicker(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.valueWithMinutes = null;\n _this.previousDateTime = null;\n return _this;\n }\n DateTimePicker.prototype.focusHandler = function () {\n addClass([this.inputWrapper.container], INPUTFOCUS);\n };\n /**\n * Sets the focus to widget for interaction.\n * @returns void\n */\n DateTimePicker.prototype.focusIn = function () {\n _super.prototype.focusIn.call(this);\n };\n /**\n * Remove the focus from widget, if the widget is in focus state.\n * @returns void\n */\n DateTimePicker.prototype.focusOut = function () {\n if (document.activeElement === this.inputElement) {\n this.inputElement.blur();\n removeClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\n };\n DateTimePicker.prototype.blurHandler = function (e) {\n // IE popup closing issue when click over the scrollbar\n if (this.isTimePopupOpen() && this.isPreventBlur) {\n this.inputElement.focus();\n return;\n }\n removeClass([this.inputWrapper.container], INPUTFOCUS);\n var blurArguments = {\n model: this\n };\n if (this.isTimePopupOpen()) {\n this.hide(e);\n }\n this.trigger('blur', blurArguments);\n };\n /**\n * To destroy the widget.\n * @returns void\n */\n DateTimePicker.prototype.destroy = function () {\n if (this.popupObject && this.popupObject.element.classList.contains(POPUP)) {\n this.dateTimeWrapper = undefined;\n this.liCollections = this.timeCollections = [];\n if (!isNullOrUndefined(this.rippleFn)) {\n this.rippleFn();\n }\n }\n var ariaAttribute = {\n 'aria-live': 'assertive', 'aria-atomic': 'true', 'aria-invalid': 'false',\n 'aria-haspopup': 'true', 'aria-activedescendant': 'null',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false',\n 'aria-owns': this.element.id + '_options', 'aria-expanded': 'false', 'role': 'combobox', 'autocomplete': 'off'\n };\n if (this.inputElement) {\n Input.removeAttributes(ariaAttribute, this.inputElement);\n this.inputElement.removeAttribute('aria-placeholder');\n }\n if (this.isCalendar()) {\n if (this.popupWrapper) {\n detach(this.popupWrapper);\n }\n this.popupObject = this.popupWrapper = null;\n this.keyboardHandler.destroy();\n }\n this.unBindInputEvents();\n _super.prototype.destroy.call(this);\n };\n /**\n * To Initialize the control rendering.\n * @return void\n * @private\n */\n DateTimePicker.prototype.render = function () {\n this.timekeyConfigure = {\n enter: 'enter',\n escape: 'escape',\n end: 'end',\n tab: 'tab',\n home: 'home',\n down: 'downarrow',\n up: 'uparrow',\n left: 'leftarrow',\n right: 'rightarrow',\n open: 'alt+downarrow',\n close: 'alt+uparrow'\n };\n this.valueWithMinutes = null;\n this.previousDateTime = null;\n this.isPreventBlur = false;\n this.cloneElement = this.element.cloneNode(true);\n this.dateTimeFormat = this.cldrDateTimeFormat();\n this.initValue = this.value;\n this.checkAttributes();\n var localeText = { placeholder: this.placeholder };\n this.l10n = new L10n('datetimepicker', localeText, this.locale);\n this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n _super.prototype.render.call(this);\n this.createInputElement();\n this.bindInputEvents();\n this.setValue();\n this.previousDateTime = this.value && new Date(+this.value);\n };\n DateTimePicker.prototype.setValue = function () {\n this.initValue = this.validateMinMaxRange(this.value);\n if (!this.strictMode && this.isDateObject(this.initValue)) {\n var value = this.validateMinMaxRange(this.initValue);\n Input.setValue(this.getFormattedValue(value), this.inputElement, this.floatLabelType, this.showClearButton);\n this.setProperties({ value: value }, true);\n }\n else {\n if (isNullOrUndefined(this.value)) {\n this.initValue = null;\n this.setProperties({ value: null }, true);\n }\n }\n this.valueWithMinutes = this.value;\n _super.prototype.updateInput.call(this);\n };\n DateTimePicker.prototype.validateMinMaxRange = function (value) {\n var result = value;\n if (this.isDateObject(value)) {\n result = this.validateValue(value);\n }\n else {\n if (+this.min > +this.max) {\n this.disablePopupButton(true);\n }\n }\n this.checkValidState(result);\n return result;\n };\n DateTimePicker.prototype.checkValidState = function (value) {\n this.isValidState = true;\n if (!this.strictMode) {\n if ((+(value) > +(this.max)) || (+(value) < +(this.min))) {\n this.isValidState = false;\n }\n }\n this.checkErrorState();\n };\n DateTimePicker.prototype.checkErrorState = function () {\n if (this.isValidState) {\n removeClass([this.inputWrapper.container], ERROR);\n }\n else {\n addClass([this.inputWrapper.container], ERROR);\n }\n attributes(this.inputElement, { 'aria-invalid': this.isValidState ? 'false' : 'true' });\n };\n DateTimePicker.prototype.validateValue = function (value) {\n var dateVal = value;\n if (this.strictMode) {\n if (+this.min > +this.max) {\n this.disablePopupButton(true);\n dateVal = this.max;\n }\n else if (+value < +this.min) {\n dateVal = this.min;\n }\n else if (+value > +this.max) {\n dateVal = this.max;\n }\n }\n else {\n if (+this.min > +this.max) {\n this.disablePopupButton(true);\n dateVal = value;\n }\n }\n return dateVal;\n };\n DateTimePicker.prototype.disablePopupButton = function (isDisable) {\n if (isDisable) {\n addClass([this.inputWrapper.buttons[0], this.timeIcon], DISABLED);\n this.hide();\n }\n else {\n removeClass([this.inputWrapper.buttons[0], this.timeIcon], DISABLED);\n }\n };\n DateTimePicker.prototype.getFormattedValue = function (value) {\n if (!isNullOrUndefined(value)) {\n var dateOptions = { format: this.cldrDateTimeFormat(), type: 'dateTime', skeleton: 'yMd' };\n return this.globalize.formatDate(value, dateOptions);\n }\n else {\n return null;\n }\n };\n DateTimePicker.prototype.isDateObject = function (value) {\n return (!isNullOrUndefined(value) && !isNaN(+value)) ? true : false;\n };\n DateTimePicker.prototype.createInputElement = function () {\n removeClass([this.inputElement], DATEPICKERROOT);\n removeClass([this.inputWrapper.container], DATEWRAPPER);\n addClass([this.inputWrapper.container], DATETIMEWRAPPER);\n addClass([this.inputElement], ROOT);\n this.renderTimeIcon();\n };\n DateTimePicker.prototype.renderTimeIcon = function () {\n this.timeIcon = Input.appendSpan(INPUTWRAPPER + ' ' + TIMEICON + ' ' + ICONS, this.inputWrapper.container);\n };\n DateTimePicker.prototype.bindInputEvents = function () {\n EventHandler.add(this.timeIcon, 'mousedown touchstart', this.timeHandler, this);\n EventHandler.add(this.inputWrapper.buttons[0], 'mousedown touchstart', this.dateHandler, this);\n EventHandler.add(this.inputElement, 'blur', this.blurHandler, this);\n EventHandler.add(this.inputElement, 'focus', this.focusHandler, this);\n this.keyboardHandler = new KeyboardEvents(this.inputElement, {\n eventName: 'keydown',\n keyAction: this.inputKeyAction.bind(this),\n keyConfigs: this.keyConfigs\n });\n };\n DateTimePicker.prototype.unBindInputEvents = function () {\n EventHandler.remove(this.timeIcon, 'mousedown touchstart', this.timeHandler);\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown touchstart', this.dateHandler);\n if (this.inputElement) {\n EventHandler.remove(this.inputElement, 'blur', this.blurHandler);\n EventHandler.remove(this.inputElement, 'focus', this.focusHandler);\n }\n if (this.keyboardHandler) {\n this.keyboardHandler.destroy();\n }\n };\n DateTimePicker.prototype.cldrTimeFormat = function () {\n var cldrTime;\n if (this.isNullOrEmpty(this.timeFormat)) {\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrTime = (getValue('timeFormats.short', getDefaultDateObject()));\n }\n else {\n cldrTime = (this.getCultureTimeObject(cldrData, '' + this.locale));\n }\n }\n else {\n cldrTime = this.timeFormat;\n }\n return cldrTime;\n };\n DateTimePicker.prototype.cldrDateTimeFormat = function () {\n var cldrTime;\n var culture = new Internationalization(this.locale);\n var dateFormat = culture.getDatePattern({ skeleton: 'yMd' });\n if (this.isNullOrEmpty(this.format)) {\n cldrTime = dateFormat + ' ' + this.getCldrFormat('time');\n }\n else {\n cldrTime = this.format;\n }\n return cldrTime;\n };\n DateTimePicker.prototype.getCldrFormat = function (type) {\n var cldrDateTime;\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrDateTime = (getValue('timeFormats.short', getDefaultDateObject()));\n }\n else {\n cldrDateTime = (this.getCultureTimeObject(cldrData, '' + this.locale));\n }\n return cldrDateTime;\n };\n DateTimePicker.prototype.isNullOrEmpty = function (value) {\n if (isNullOrUndefined(value) || (typeof value === 'string' && value.trim() === '')) {\n return true;\n }\n else {\n return false;\n }\n };\n DateTimePicker.prototype.getCultureTimeObject = function (ld, c) {\n return getValue('main.' + '' + this.locale + '.dates.calendars.gregorian.timeFormats.short', ld);\n };\n DateTimePicker.prototype.timeHandler = function (e) {\n if (e.currentTarget === this.timeIcon) {\n e.preventDefault();\n }\n if (this.enabled && !this.readonly) {\n if (this.isDatePopupOpen()) {\n _super.prototype.hide.call(this, e);\n }\n if (this.isTimePopupOpen()) {\n this.closePopup(e);\n }\n else {\n if (!Browser.isDevice) {\n this.inputElement.focus();\n }\n this.popupCreation('time', e);\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\n }\n };\n DateTimePicker.prototype.dateHandler = function (e) {\n if (e.currentTarget === this.inputWrapper.buttons[0]) {\n e.preventDefault();\n }\n if (this.enabled && !this.readonly) {\n if (this.isTimePopupOpen()) {\n this.closePopup(e);\n }\n if (!isNullOrUndefined(this.popupWrapper)) {\n this.popupCreation('date', e);\n }\n }\n };\n DateTimePicker.prototype.show = function (type, e) {\n if ((this.enabled && this.readonly) || !this.enabled) {\n return;\n }\n else {\n if (type === 'time' && !this.dateTimeWrapper) {\n if (this.isDatePopupOpen()) {\n this.hide(e);\n }\n this.popupCreation('time', e);\n }\n else if (!this.popupObj) {\n if (this.isTimePopupOpen()) {\n this.hide(e);\n }\n _super.prototype.show.call(this);\n this.popupCreation('date', e);\n }\n }\n };\n DateTimePicker.prototype.toggle = function (e) {\n if (this.isDatePopupOpen()) {\n _super.prototype.hide.call(this, e);\n this.show('time', null);\n }\n else if (this.isTimePopupOpen()) {\n this.hide(e);\n _super.prototype.show.call(this, null, e);\n this.popupCreation('date', null);\n }\n else {\n this.show(null, e);\n }\n };\n DateTimePicker.prototype.listCreation = function () {\n var value = isNullOrUndefined(this.value) ? this.inputElement.value !== '' ?\n this.globalize.parseDate(this.inputElement.value, { format: this.cldrDateTimeFormat(), type: 'datetime' }) :\n new Date() : this.value;\n this.valueWithMinutes = value;\n this.listWrapper = createElement('div', { className: CONTENT, attrs: { 'tabindex': '0' } });\n var min = this.startTime(value);\n var max = this.endTime(value);\n var listDetails = TimePickerBase.createListItems(min, max, this.globalize, this.cldrTimeFormat(), this.step);\n this.timeCollections = listDetails.collection;\n this.listTag = listDetails.list;\n attributes(this.listTag, { 'role': 'listbox', 'aria-hidden': 'false', 'id': this.element.id + '_options' });\n append([listDetails.list], this.listWrapper);\n this.wireTimeListEvents();\n var rippleModel = { duration: 300, selector: '.' + LISTCLASS };\n this.rippleFn = rippleEffect(this.listWrapper, rippleModel);\n this.liCollections = this.listWrapper.querySelectorAll('.' + LISTCLASS);\n };\n DateTimePicker.prototype.popupCreation = function (type, e) {\n if (type === 'date') {\n if (!this.readonly && this.popupWrapper) {\n addClass([this.popupWrapper], DATETIMEPOPUPWRAPPER);\n attributes(this.popupWrapper, { 'id': this.element.id + '_datepopup' });\n }\n }\n else {\n if (!this.readonly) {\n this.dateTimeWrapper = createElement('div', {\n className: ROOT + ' ' + POPUP,\n attrs: { 'id': this.element.id + '_timepopup', 'style': 'visibility:hidden ; display:block' }\n });\n if (!isNullOrUndefined(this.cssClass)) {\n this.dateTimeWrapper.classList.add(this.cssClass);\n }\n if (!isNullOrUndefined(this.step) && this.step > 0) {\n this.listCreation();\n append([this.listWrapper], this.dateTimeWrapper);\n }\n document.body.appendChild(this.dateTimeWrapper);\n this.addTimeSelection();\n this.renderPopup();\n this.setTimeScrollPosition();\n this.openPopup(e);\n this.popupObject.refreshPosition(this.inputElement);\n }\n }\n };\n DateTimePicker.prototype.openPopup = function (e) {\n this.preventArgs = {\n cancel: false,\n popup: this.popupObject,\n event: e || null\n };\n this.trigger('open', this.preventArgs);\n if (!this.preventArgs.cancel && !this.readonly) {\n var openAnimation = {\n name: 'FadeIn',\n duration: ANIMATIONDURATION,\n };\n this.popupObject.show(new Animation(openAnimation));\n addClass([this.inputWrapper.container], [ICONANIMATION]);\n attributes(this.inputElement, { 'aria-expanded': 'true' });\n EventHandler.add(document, 'mousedown touchstart', this.documentClickHandler, this);\n }\n };\n DateTimePicker.prototype.documentClickHandler = function (event) {\n if (!Browser.isDevice) {\n event.preventDefault();\n }\n var target = event.target;\n if (!(closest(target, '#' + (this.popupObject && this.popupObject.element.id))) && target !== this.inputElement\n && target !== this.timeIcon && target !== this.inputWrapper.container) {\n if (this.isTimePopupOpen()) {\n this.hide(event);\n }\n }\n else if (target !== this.inputElement) {\n if (!Browser.isDevice) {\n this.isPreventBlur = (Browser.isIE || Browser.info.name === 'edge') && (document.activeElement === this.inputElement);\n event.preventDefault();\n }\n }\n };\n DateTimePicker.prototype.isTimePopupOpen = function () {\n return (this.dateTimeWrapper && this.dateTimeWrapper.classList.contains('' + ROOT)) ? true : false;\n };\n DateTimePicker.prototype.isDatePopupOpen = function () {\n return (this.popupWrapper && this.popupWrapper.classList.contains('' + DATETIMEPOPUPWRAPPER)) ? true : false;\n };\n DateTimePicker.prototype.renderPopup = function () {\n var _this = this;\n this.containerStyle = this.inputWrapper.container.getBoundingClientRect();\n if (Browser.isDevice) {\n this.timeModal = createElement('div');\n this.timeModal.className = '' + ROOT + ' e-time-modal';\n document.body.className += ' ' + OVERFLOW;\n this.timeModal.style.display = 'block';\n document.body.appendChild(this.timeModal);\n }\n var offset = 4;\n this.popupObject = new Popup(this.dateTimeWrapper, {\n width: this.setPopupWidth(),\n zIndex: this.zIndex,\n targetType: 'container',\n collision: Browser.isDevice ? { X: 'fit', Y: 'fit' } : { X: 'flip', Y: 'flip' },\n relateTo: Browser.isDevice ? document.body : this.inputWrapper.container,\n position: Browser.isDevice ? { X: 'center', Y: 'center' } : { X: 'left', Y: 'bottom' },\n enableRtl: this.enableRtl,\n offsetY: offset,\n open: function () {\n _this.dateTimeWrapper.style.visibility = 'visible';\n addClass([_this.timeIcon], ACTIVE);\n if (!Browser.isDevice) {\n _this.inputEvent = new KeyboardEvents(_this.inputWrapper.container, {\n keyAction: _this.TimeKeyActionHandle.bind(_this), keyConfigs: _this.timekeyConfigure, eventName: 'keydown'\n });\n }\n }, close: function () {\n removeClass([_this.timeIcon], ACTIVE);\n _this.unWireTimeListEvents();\n _this.inputElement.setAttribute('aria-activedescendant', 'null');\n remove(_this.popupObject.element);\n _this.popupObject.destroy();\n _this.dateTimeWrapper.innerHTML = '';\n _this.listWrapper = _this.dateTimeWrapper = undefined;\n if (_this.inputEvent) {\n _this.inputEvent.destroy();\n }\n }\n });\n this.popupObject.element.style.maxHeight = POPUPDIMENSION;\n };\n DateTimePicker.prototype.setDimension = function (width) {\n if (typeof width === 'number') {\n width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n width = width;\n }\n else {\n width = '100%';\n }\n return width;\n };\n DateTimePicker.prototype.setPopupWidth = function () {\n var width = this.setDimension(this.width);\n if (width.indexOf('%') > -1) {\n var inputWidth = this.containerStyle.width * parseFloat(width) / 100;\n width = inputWidth.toString() + 'px';\n }\n return width;\n };\n DateTimePicker.prototype.wireTimeListEvents = function () {\n EventHandler.add(this.listWrapper, 'click', this.onMouseClick, this);\n if (!Browser.isDevice) {\n EventHandler.add(this.listWrapper, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.listWrapper, 'mouseout', this.onMouseLeave, this);\n }\n };\n DateTimePicker.prototype.unWireTimeListEvents = function () {\n if (this.listWrapper) {\n EventHandler.remove(this.listWrapper, 'click', this.onMouseClick);\n EventHandler.remove(document, 'mousedown touchstart', this.documentClickHandler);\n if (!Browser.isDevice) {\n EventHandler.add(this.listWrapper, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.listWrapper, 'mouseout', this.onMouseLeave, this);\n }\n }\n };\n DateTimePicker.prototype.onMouseOver = function (event) {\n var currentLi = closest(event.target, '.' + LISTCLASS);\n this.setTimeHover(currentLi, HOVER);\n };\n DateTimePicker.prototype.onMouseLeave = function () {\n this.removeTimeHover(HOVER);\n };\n DateTimePicker.prototype.setTimeHover = function (li, className) {\n if (this.enabled && this.isValidLI(li) && !li.classList.contains(className)) {\n this.removeTimeHover(className);\n addClass([li], className);\n }\n };\n DateTimePicker.prototype.getPopupHeight = function () {\n var height = parseInt(POPUPDIMENSION, 10);\n var popupHeight = this.dateTimeWrapper.getBoundingClientRect().height;\n return popupHeight > height ? height : popupHeight;\n };\n DateTimePicker.prototype.changeEvent = function (e) {\n if (+this.previousDateTime !== +this.value) {\n _super.prototype.changeEvent.call(this, e);\n if (!Browser.isDevice) {\n this.inputElement.focus();\n }\n this.valueWithMinutes = this.value;\n this.setInputValue('date');\n this.previousDateTime = this.value && new Date(+this.value);\n }\n };\n DateTimePicker.prototype.updateValue = function (e) {\n this.setInputValue('time');\n if (+this.previousDateTime !== +this.value) {\n this.changedArgs = {\n value: this.value, event: e || null,\n isInteracted: !isNullOrUndefined(e),\n element: this.element\n };\n this.addTimeSelection();\n this.trigger('change', this.changedArgs);\n this.previousDateTime = this.value;\n }\n };\n DateTimePicker.prototype.setTimeScrollPosition = function () {\n var popupHeight = this.getPopupHeight();\n var popupElement;\n popupElement = this.selectedElement;\n if (!isNullOrUndefined(popupElement)) {\n var nextEle = popupElement.nextElementSibling;\n var height = nextEle ? nextEle.offsetTop : popupElement.offsetTop;\n var liHeight = popupElement.getBoundingClientRect().height;\n if ((height + popupElement.offsetTop) > popupHeight) {\n this.dateTimeWrapper.scrollTop = nextEle ? (height - (popupHeight / HALFPOSITION + liHeight / HALFPOSITION)) : height;\n }\n else {\n this.dateTimeWrapper.scrollTop = 0;\n }\n }\n };\n DateTimePicker.prototype.setInputValue = function (type) {\n if (type === 'date') {\n this.inputElement.value = this.previousElementValue = this.getFormattedValue(this.getFullDateTime());\n this.setProperties({ value: this.getFullDateTime() }, true);\n }\n else {\n var tempVal = this.getFormattedValue(new Date(this.timeCollections[this.activeIndex]));\n Input.setValue(tempVal, this.inputElement, this.floatLabelType, this.showClearButton);\n this.previousElementValue = this.inputElement.value;\n this.setProperties({ value: new Date(this.timeCollections[this.activeIndex]) }, true);\n }\n };\n DateTimePicker.prototype.getFullDateTime = function () {\n var value = null;\n if (this.isDateObject(this.valueWithMinutes)) {\n value = this.combineDateTime(this.valueWithMinutes);\n }\n else {\n value = this.previousDate;\n }\n return this.validateMinMaxRange(value);\n };\n DateTimePicker.prototype.combineDateTime = function (value) {\n if (this.isDateObject(value)) {\n var day = this.previousDate.getDate();\n var month = this.previousDate.getMonth();\n var year = this.previousDate.getFullYear();\n var hour = value.getHours();\n var minutes = value.getMinutes();\n var seconds = value.getSeconds();\n return new Date(year, month, day, hour, minutes, seconds);\n }\n else {\n return this.previousDate;\n }\n };\n DateTimePicker.prototype.onMouseClick = function (event) {\n var target = event.target;\n var li = this.selectedElement = closest(target, '.' + LISTCLASS);\n if (li && li.classList.contains(LISTCLASS)) {\n this.timeValue = li.getAttribute('data-value');\n this.hide(event);\n }\n this.setSelection(li, event);\n };\n DateTimePicker.prototype.setSelection = function (li, event) {\n if (this.isValidLI(li) && !li.classList.contains(ACTIVE)) {\n var value = li.getAttribute('data-value');\n this.selectedElement = li;\n var index = Array.prototype.slice.call(this.liCollections).indexOf(li);\n this.activeIndex = index;\n this.valueWithMinutes = new Date(this.timeCollections[this.activeIndex]);\n addClass([this.selectedElement], ACTIVE);\n this.selectedElement.setAttribute('aria-selected', 'true');\n this.updateValue(event);\n }\n };\n DateTimePicker.prototype.setTimeActiveClass = function () {\n var collections = isNullOrUndefined(this.dateTimeWrapper) ? this.listWrapper : this.dateTimeWrapper;\n if (!isNullOrUndefined(collections)) {\n var items = collections.querySelectorAll('.' + LISTCLASS);\n if (items.length) {\n for (var i = 0; i < items.length; i++) {\n if (this.timeCollections[i] === +(this.valueWithMinutes)) {\n items[i].setAttribute('aria-selected', 'true');\n this.selectedElement = items[i];\n this.activeIndex = i;\n this.setTimeActiveDescendant();\n break;\n }\n }\n }\n }\n };\n DateTimePicker.prototype.setTimeActiveDescendant = function () {\n if (!isNullOrUndefined(this.selectedElement)) {\n attributes(this.inputElement, { 'aria-activedescendant': this.selectedElement.getAttribute('id') });\n }\n else {\n attributes(this.inputElement, { 'aria-activedescendant': 'null' });\n }\n };\n DateTimePicker.prototype.addTimeSelection = function () {\n this.selectedElement = null;\n this.removeTimeSelection();\n this.setTimeActiveClass();\n if (!isNullOrUndefined(this.selectedElement)) {\n addClass([this.selectedElement], ACTIVE);\n this.selectedElement.setAttribute('aria-selected', 'true');\n }\n };\n DateTimePicker.prototype.removeTimeSelection = function () {\n this.removeTimeHover(HOVER);\n if (!isNullOrUndefined(this.dateTimeWrapper)) {\n var items = this.dateTimeWrapper.querySelectorAll('.' + ACTIVE);\n if (items.length) {\n removeClass(items, ACTIVE);\n items[0].removeAttribute('aria-selected');\n }\n }\n };\n DateTimePicker.prototype.removeTimeHover = function (className) {\n var hoveredItem = this.getTimeHoverItem(className);\n if (hoveredItem && hoveredItem.length) {\n removeClass(hoveredItem, className);\n }\n };\n DateTimePicker.prototype.getTimeHoverItem = function (className) {\n var collections = isNullOrUndefined(this.dateTimeWrapper) ? this.listWrapper : this.dateTimeWrapper;\n var hoveredItem;\n if (!isNullOrUndefined(collections)) {\n hoveredItem = collections.querySelectorAll('.' + className);\n }\n return hoveredItem;\n };\n DateTimePicker.prototype.isValidLI = function (li) {\n return (li && li.classList.contains(LISTCLASS) && !li.classList.contains(DISABLED));\n };\n DateTimePicker.prototype.calculateStartEnd = function (value, range, method) {\n var day = value.getDate();\n var month = value.getMonth();\n var year = value.getFullYear();\n var hours = value.getHours();\n var minutes = value.getMinutes();\n var seconds = value.getSeconds();\n var milliseconds = value.getMilliseconds();\n if (range) {\n if (method === 'starttime') {\n return new Date(year, month, day, 0, 0, 0);\n }\n else {\n return new Date(year, month, day, 23, 59, 59);\n }\n }\n else {\n return new Date(year, month, day, hours, minutes, seconds, milliseconds);\n }\n };\n DateTimePicker.prototype.startTime = function (date) {\n var tempStartValue;\n var start;\n var tempMin = this.min;\n var value;\n value = date === null ? new Date() : date;\n if ((+value.getDate() === +tempMin.getDate() && +value.getMonth() === +tempMin.getMonth() &&\n +value.getFullYear() === +tempMin.getFullYear()) || ((+new Date(value.getFullYear(), value.getMonth(), value.getDate())) <=\n +new Date(tempMin.getFullYear(), tempMin.getMonth(), tempMin.getDate()))) {\n start = false;\n tempStartValue = this.min;\n }\n else if (+value < +this.max && +value > +this.min) {\n start = true;\n tempStartValue = value;\n }\n else if (+value >= +this.max) {\n start = true;\n tempStartValue = this.max;\n }\n return this.calculateStartEnd(tempStartValue, start, 'starttime');\n };\n DateTimePicker.prototype.endTime = function (date) {\n var tempEndValue;\n var end;\n var tempMax = this.max;\n var value;\n value = date === null ? new Date() : date;\n if ((+value.getDate() === +tempMax.getDate() && +value.getMonth() === +tempMax.getMonth() &&\n +value.getFullYear() === +tempMax.getFullYear()) || (+new Date(value.getUTCFullYear(), value.getMonth(), value.getDate()) >=\n +new Date(tempMax.getFullYear(), tempMax.getMonth(), tempMax.getDate()))) {\n end = false;\n tempEndValue = this.max;\n }\n else if (+value < +this.max && +value > +this.min) {\n end = true;\n tempEndValue = value;\n }\n else if (+value <= +this.min) {\n end = true;\n tempEndValue = this.min;\n }\n return this.calculateStartEnd(tempEndValue, end, 'endtime');\n };\n DateTimePicker.prototype.hide = function (e) {\n if (this.popupObj || this.dateTimeWrapper) {\n this.preventArgs = {\n cancel: false,\n popup: this.popupObj || this.popupObject,\n event: e || null\n };\n if (isNullOrUndefined(this.popupObj)) {\n this.trigger('close', this.preventArgs);\n }\n if (!this.preventArgs.cancel) {\n if (this.isDatePopupOpen()) {\n _super.prototype.hide.call(this, e);\n }\n else if (this.isTimePopupOpen()) {\n this.closePopup(e);\n removeClass([document.body], OVERFLOW);\n if (Browser.isDevice && this.timeModal) {\n this.timeModal.style.display = 'none';\n this.timeModal.outerHTML = '';\n this.timeModal = null;\n }\n this.setTimeActiveDescendant();\n }\n }\n }\n };\n DateTimePicker.prototype.closePopup = function (e) {\n if (this.isTimePopupOpen() && this.popupObject) {\n var animModel = {\n name: 'FadeOut',\n duration: ANIMATIONDURATION,\n delay: 0\n };\n this.popupObject.hide(new Animation(animModel));\n this.inputWrapper.container.classList.remove(ICONANIMATION);\n attributes(this.inputElement, { 'aria-expanded': 'false' });\n EventHandler.remove(document, 'mousedown touchstart', this.documentClickHandler);\n }\n if (Browser.isDevice) {\n removeClass([this.inputWrapper.container], INPUTFOCUS);\n }\n };\n DateTimePicker.prototype.preRender = function () {\n _super.prototype.preRender.call(this);\n };\n ;\n DateTimePicker.prototype.getProperty = function (date, val) {\n if (val === 'min') {\n this.setProperties({ min: this.validateValue(date.min) }, true);\n }\n else {\n this.setProperties({ max: this.validateValue(date.max) }, true);\n }\n };\n DateTimePicker.prototype.checkAttributes = function () {\n var attributes = ['style', 'name', 'step', 'disabled', 'readonly', 'value', 'min', 'max', 'placeholder', 'type'];\n var value;\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var prop = attributes_1[_i];\n if (!isNullOrUndefined(this.inputElement.getAttribute(prop))) {\n switch (prop) {\n case 'name':\n this.inputElement.setAttribute('name', this.inputElement.getAttribute(prop));\n break;\n case 'step':\n this.step = parseInt(this.inputElement.getAttribute(prop), 10);\n break;\n case 'readonly':\n var readonly = !isNullOrUndefined(this.inputElement.getAttribute(prop));\n this.setProperties({ readonly: readonly }, true);\n break;\n case 'placeholder':\n this.placeholder = this.inputElement.getAttribute(prop);\n break;\n case 'min':\n value = new Date(this.inputElement.getAttribute(prop));\n if (!this.isNullOrEmpty(value) && !isNaN(+value)) {\n this.setProperties({ min: value }, true);\n }\n break;\n case 'disabled':\n var enabled = isNullOrUndefined(this.inputElement.getAttribute(prop));\n this.setProperties({ enabled: enabled }, true);\n break;\n case 'max':\n value = new Date(this.inputElement.getAttribute(prop));\n if (!this.isNullOrEmpty(value) && !isNaN(+value)) {\n this.setProperties({ max: value }, true);\n }\n break;\n }\n }\n }\n };\n DateTimePicker.prototype.getTimeActiveElement = function () {\n if (!isNullOrUndefined(this.dateTimeWrapper)) {\n return this.dateTimeWrapper.querySelectorAll('.' + ACTIVE);\n }\n else {\n return null;\n }\n };\n DateTimePicker.prototype.createDateObj = function (val) {\n return val instanceof Date ? val : null;\n };\n DateTimePicker.prototype.getDateObject = function (text) {\n if (!this.isNullOrEmpty(text)) {\n var dateValue = this.createDateObj(text);\n var value = this.valueWithMinutes;\n var status_1 = !isNullOrUndefined(value);\n if (this.checkDateValue(dateValue)) {\n var date = status_1 ? value.getDate() : DAY;\n var month = status_1 ? value.getMonth() : MONTH;\n var year = status_1 ? value.getFullYear() : YEAR;\n var hour = status_1 ? value.getHours() : HOUR;\n var minute = status_1 ? value.getMinutes() : MINUTE;\n var second = status_1 ? value.getSeconds() : SECOND;\n var millisecond = status_1 ? value.getMilliseconds() : MILLISECOND;\n return new Date(year, month, date, hour, minute, second, millisecond);\n }\n }\n return null;\n };\n DateTimePicker.prototype.findNextTimeElement = function (event) {\n var textVal = (this.inputElement).value;\n var value = isNullOrUndefined(this.valueWithMinutes) ? this.createDateObj(textVal) :\n this.getDateObject(this.valueWithMinutes);\n var dateTimeVal = null;\n var listCount = this.liCollections.length;\n if (!isNullOrUndefined(this.checkDateValue(value)) || !isNullOrUndefined(this.activeIndex)) {\n if (event.action === 'home') {\n dateTimeVal = +(this.createDateObj(new Date(this.timeCollections[0])));\n this.activeIndex = 0;\n }\n else if (event.action === 'end') {\n dateTimeVal = +(this.createDateObj(new Date(this.timeCollections[this.timeCollections.length - 1])));\n this.activeIndex = this.timeCollections.length - 1;\n }\n else {\n if (event.action === 'down') {\n for (var i = 0; i < listCount; i++) {\n if (+value < this.timeCollections[i]) {\n dateTimeVal = +(this.createDateObj(new Date(this.timeCollections[i])));\n this.activeIndex = i;\n break;\n }\n }\n }\n else {\n for (var i = listCount - 1; i >= 0; i--) {\n if (+value > this.timeCollections[i]) {\n dateTimeVal = +(this.createDateObj(new Date(this.timeCollections[i])));\n this.activeIndex = i;\n break;\n }\n }\n }\n }\n this.selectedElement = this.liCollections[this.activeIndex];\n this.timeElementValue(isNullOrUndefined(dateTimeVal) ? null : new Date(dateTimeVal));\n }\n };\n DateTimePicker.prototype.setTimeValue = function (date, value) {\n var time;\n var val = this.validateMinMaxRange(value);\n var newval = this.createDateObj(val);\n if (this.getFormattedValue(newval) !== (!isNullOrUndefined(this.value) ? this.getFormattedValue(this.value) : null)) {\n this.valueWithMinutes = isNullOrUndefined(newval) ? null : newval;\n time = new Date(+this.valueWithMinutes);\n }\n else {\n if (this.strictMode) {\n //for strict mode case, when value not present within a range. Reset the nearest range value.\n date = newval;\n }\n this.valueWithMinutes = this.checkDateValue(date);\n time = new Date(+this.valueWithMinutes);\n }\n var dateString = this.globalize.formatDate(time, {\n format: !isNullOrUndefined(this.format) ? this.format : this.cldrDateTimeFormat(), type: 'dateTime', skeleton: 'yMd'\n });\n if (!this.strictMode && isNullOrUndefined(time)) {\n Input.setValue(dateString, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n else {\n Input.setValue(dateString, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n return time;\n };\n DateTimePicker.prototype.timeElementValue = function (value) {\n if (!isNullOrUndefined(this.checkDateValue(value)) && !this.isNullOrEmpty(value)) {\n var date = value instanceof Date ? value : this.getDateObject(value);\n return this.setTimeValue(date, value);\n }\n return null;\n };\n DateTimePicker.prototype.timeKeyHandler = function (event) {\n if (isNullOrUndefined(this.step) || this.step <= 0) {\n return;\n }\n var listCount = this.timeCollections.length;\n if (isNullOrUndefined(this.getTimeActiveElement()) || this.getTimeActiveElement().length === 0) {\n if (this.liCollections.length > 0) {\n if (isNullOrUndefined(this.value) && isNullOrUndefined(this.activeIndex)) {\n this.activeIndex = 0;\n this.selectedElement = this.liCollections[0];\n this.timeElementValue(new Date(this.timeCollections[0]));\n }\n else {\n this.findNextTimeElement(event);\n }\n }\n }\n else {\n var nextItemValue = void 0;\n if ((event.keyCode >= 37) && (event.keyCode <= 40)) {\n var index = (event.keyCode === 40 || event.keyCode === 39) ? ++this.activeIndex : --this.activeIndex;\n this.activeIndex = index = this.activeIndex === (listCount) ? 0 : this.activeIndex;\n this.activeIndex = index = this.activeIndex < 0 ? (listCount - 1) : this.activeIndex;\n nextItemValue = isNullOrUndefined(this.timeCollections[index]) ? this.timeCollections[0] : this.timeCollections[index];\n }\n else if (event.action === 'home') {\n this.activeIndex = 0;\n nextItemValue = this.timeCollections[0];\n }\n else if (event.action === 'end') {\n this.activeIndex = listCount - 1;\n nextItemValue = this.timeCollections[listCount - 1];\n }\n this.selectedElement = this.liCollections[this.activeIndex];\n this.timeElementValue(new Date(nextItemValue));\n }\n this.isNavigate = true;\n this.setTimeHover(this.selectedElement, NAVIGATION);\n this.setTimeActiveDescendant();\n if (this.isTimePopupOpen() && this.selectedElement !== null && (!event || event.type !== 'click')) {\n this.setTimeScrollPosition();\n }\n };\n DateTimePicker.prototype.TimeKeyActionHandle = function (event) {\n if (this.enabled) {\n if (event.action !== 'right' && event.action !== 'left' && event.action !== 'tab') {\n event.preventDefault();\n }\n switch (event.action) {\n case 'up':\n case 'down':\n case 'home':\n case 'end':\n this.timeKeyHandler(event);\n break;\n case 'enter':\n if (this.isNavigate) {\n this.selectedElement = this.liCollections[this.activeIndex];\n this.valueWithMinutes = new Date(this.timeCollections[this.activeIndex]);\n this.setInputValue('time');\n if (+this.previousDateTime !== +this.value) {\n this.changedArgs.value = this.value;\n this.addTimeSelection();\n this.previousDateTime = this.value;\n }\n }\n else {\n this.updateValue(event);\n }\n this.hide(event);\n addClass([this.inputWrapper.container], INPUTFOCUS);\n this.isNavigate = false;\n break;\n case 'escape':\n this.hide(event);\n break;\n default:\n this.isNavigate = false;\n break;\n }\n }\n };\n DateTimePicker.prototype.inputKeyAction = function (event) {\n switch (event.action) {\n case 'altDownArrow':\n this.strictModeUpdate();\n this.updateInput();\n this.toggle(event);\n break;\n }\n };\n DateTimePicker.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'value':\n var options = { format: this.cldrDateTimeFormat(), type: 'dateTime', skeleton: 'yMd' };\n if (typeof newProp.value === 'string') {\n this.setProperties({ value: this.globalize.parseDate(newProp.value, options) }, true);\n newProp.value = this.globalize.parseDate(newProp.value, options);\n }\n newProp.value = this.validateValue(newProp.value);\n Input.setValue(this.getFormattedValue(newProp.value), this.inputElement, this.floatLabelType, this.showClearButton);\n this.valueWithMinutes = newProp.value;\n this.setProperties({ value: newProp.value }, true);\n this.previousDateTime = new Date(this.inputElement.value);\n this.updateInput();\n this.changeTrigger(null);\n break;\n case 'min':\n case 'max':\n this.getProperty(newProp, prop);\n this.updateInput();\n break;\n case 'enableRtl':\n Input.setEnableRtl(this.enableRtl, [this.inputWrapper.container]);\n break;\n case 'cssClass':\n Input.setCssClass(newProp.cssClass, [this.inputWrapper.container]);\n if (this.dateTimeWrapper) {\n addClass([this.dateTimeWrapper], [newProp.cssClass]);\n }\n break;\n case 'locale':\n this.globalize = new Internationalization(this.locale);\n this.l10n.setLocale(this.locale);\n this.setProperties({ placeholder: this.l10n.getConstant('placeholder') }, true);\n Input.setPlaceholder(this.l10n.getConstant('placeholder'), this.inputElement);\n this.dateTimeFormat = this.cldrDateTimeFormat();\n _super.prototype.updateInput.call(this);\n break;\n case 'format':\n this.setProperties({ format: newProp.format }, true);\n this.setValue();\n break;\n case 'placeholder':\n Input.setPlaceholder(newProp.placeholder, this.inputElement);\n this.inputElement.setAttribute('aria-placeholder', newProp.placeholder);\n break;\n case 'enabled':\n Input.setEnabled(this.enabled, this.inputElement);\n this.bindEvents();\n break;\n case 'strictMode':\n this.updateInput();\n break;\n case 'width':\n this.setWidth(newProp.width);\n break;\n case 'readonly':\n Input.setReadonly(this.readonly, this.inputElement);\n break;\n case 'floatLabelType':\n this.floatLabelType = newProp.floatLabelType;\n Input.removeFloating(this.inputWrapper);\n Input.addFloating(this.inputElement, this.floatLabelType, this.placeholder);\n break;\n default:\n _super.prototype.onPropertyChanged.call(this, newProp, oldProp);\n break;\n }\n this.hide(null);\n }\n };\n /**\n * To get component name.\n * @private\n */\n DateTimePicker.prototype.getModuleName = function () {\n return 'datetimepicker';\n };\n __decorate([\n Property(null)\n ], DateTimePicker.prototype, \"timeFormat\", void 0);\n __decorate([\n Property(30)\n ], DateTimePicker.prototype, \"step\", void 0);\n __decorate([\n Property(1000)\n ], DateTimePicker.prototype, \"zIndex\", void 0);\n __decorate([\n Property(false)\n ], DateTimePicker.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(true)\n ], DateTimePicker.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(null)\n ], DateTimePicker.prototype, \"placeholder\", void 0);\n __decorate([\n Property(false)\n ], DateTimePicker.prototype, \"strictMode\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"destroyed\", void 0);\n DateTimePicker = __decorate([\n NotifyPropertyChanges\n ], DateTimePicker);\n return DateTimePicker;\n}(DatePicker));\nexport { DateTimePicker };\n","/**\n * Save class provide method to save file\n * ```typescript\n * let blob : Blob = new Blob([''], { type: 'text/plain' });\n * Save.save('fileName.txt',blob);\n */\nvar Save = /** @class */ (function () {\n /**\n * Initialize new instance of {save}\n */\n function Save() {\n // tslint:disable\n }\n /**\n * Saves the file with specified name and sends the file to client browser\n * @param {string} fileName- file name to save.\n * @param {Blob} buffer- the content to write in file\n * @param {boolean} isMicrosoftBrowser- specify whether microsoft browser or not\n * @returns {void}\n */\n Save.save = function (fileName, buffer) {\n if (fileName === null || fileName === undefined || fileName === '') {\n throw new Error('ArgumentException: fileName cannot be undefined, null or empty');\n }\n var extension = fileName.substring(fileName.lastIndexOf('.') + 1, fileName.length);\n var mimeType = this.getMimeType(extension);\n if (mimeType !== '') {\n buffer = new Blob([buffer], { type: mimeType });\n }\n if (this.isMicrosoftBrowser) {\n navigator.msSaveBlob(buffer, fileName);\n }\n else {\n var downloadLink = document.createElementNS('http://www.w3.org/1999/xhtml', 'a');\n this.saveInternal(fileName, extension, buffer, downloadLink, 'download' in downloadLink);\n }\n };\n Save.saveInternal = function (fileName, extension, buffer, downloadLink, hasDownloadAttribute) {\n if (hasDownloadAttribute) {\n downloadLink.download = fileName;\n var dataUrl_1 = window.URL.createObjectURL(buffer);\n downloadLink.href = dataUrl_1;\n var event_1 = document.createEvent('MouseEvent');\n event_1.initEvent('click', true, true);\n downloadLink.dispatchEvent(event_1);\n setTimeout(function () {\n window.URL.revokeObjectURL(dataUrl_1);\n dataUrl_1 = undefined;\n });\n }\n else {\n if (extension !== 'docx' && extension !== 'xlsx') {\n var url = window.URL.createObjectURL(buffer);\n var isPopupBlocked = window.open(url, '_blank');\n if (!isPopupBlocked) {\n window.location.href = url;\n }\n }\n else {\n var reader_1 = new FileReader();\n reader_1.onloadend = function () {\n var isPopupBlocked = window.open(reader_1.result, '_blank');\n if (!isPopupBlocked) {\n window.location.href = reader_1.result;\n }\n };\n reader_1.readAsDataURL(buffer);\n }\n }\n };\n /**\n *\n * @param {string} extension - get mime type of the specified extension\n * @private\n */\n Save.getMimeType = function (extension) {\n var mimeType = '';\n switch (extension) {\n case 'html':\n mimeType = 'text/html';\n break;\n case 'pdf':\n mimeType = 'application/pdf';\n break;\n case 'docx':\n mimeType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';\n break;\n case 'xlsx':\n mimeType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';\n break;\n case 'txt':\n mimeType = 'text/plain';\n break;\n }\n return mimeType;\n };\n return Save;\n}());\nexport { Save };\n","import { Save } from './save';\n/**\n * XmlWriter class provide method to create XML data\n */\nvar XmlWriter = /** @class */ (function () {\n /**\n * Initialize new instance of {XmlWriter}\n */\n function XmlWriter() {\n this.contentPos = 0;\n this.bufferText = '';\n this.bufferBlob = new Blob([''], { type: 'text/plain' });\n this.currentState = 'Initial';\n this.namespaceStack = [];\n this.namespaceStack.push(new Namespace());\n this.namespaceStack[0].set('xmlns', 'http://www.w3.org/2000/xmlns/', 'Special');\n this.namespaceStack.push(new Namespace());\n this.namespaceStack[1].set('xml', 'http://www.w3.org/XML/1998/namespace', 'Special');\n this.namespaceStack.push(new Namespace());\n this.namespaceStack[2].set('', '', 'Implied');\n this.elementStack = [];\n this.elementStack.push(new XmlElement());\n this.elementStack[0].set('', '', '', this.namespaceStack.length - 1);\n this.attributeStack = [];\n Save.isMicrosoftBrowser = !(!navigator.msSaveBlob);\n }\n Object.defineProperty(XmlWriter.prototype, \"buffer\", {\n /**\n * Gets the content written to the {XmlWriter} as Blob.\n * @returns {Blob}\n */\n get: function () {\n this.flush();\n return this.bufferBlob;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Writes processing instruction with a space between the name and text\n * @param {string} name - name of the processing instruction\n * @param {string} text - text to write in the processing instruction\n * @throws ArgumentException\n * @throws InvalidArgumentException\n * @throws InvalidOperationException\n */\n XmlWriter.prototype.writeProcessingInstruction = function (name, text) {\n if (name === undefined || name === null || name.length === 0) {\n throw new Error('ArgumentException: name should not be undefined, null or empty');\n }\n this.checkName(name);\n if (text === undefined || text === null) {\n text = '';\n }\n if (name.length === 3 && name === 'xml') {\n if (this.currentState !== 'Initial') {\n // tslint:disable-next-line:max-line-length\n throw new Error('InvalidArgumentException: Cannot write XML declaration.WriteStartDocument method has already written it');\n }\n }\n if (this.currentState !== 'Initial' || this.bufferBlob === undefined) {\n throw new Error('InvalidOperationException: Wrong Token');\n }\n else {\n this.writeStartDocument();\n this.writeProcessingInstructionInternal(name, text);\n }\n };\n /**\n * Writes Xml declaration with version and standalone attribute\n * @param {boolean} standalone - if true it write standalone=yes else standalone=no\n * @throws InvalidOperation\n */\n XmlWriter.prototype.writeStartDocument = function (standalone) {\n if (this.currentState !== 'Initial' || this.bufferBlob === undefined) {\n throw new Error('InvalidOperationException: Wrong Token');\n }\n this.currentState = 'StartDocument';\n this.rawText('');\n };\n /**\n * Closes any open tag or attribute and write the state back to start\n */\n XmlWriter.prototype.writeEndDocument = function () {\n while (this.elementStack.length - 1 > 0) {\n this.writeEndElement();\n }\n this.currentState = 'EndDocument';\n this.flush();\n };\n /**\n * Writes the specified start tag and associates it with the given namespace and prefix.\n * @param {string} prefix - namespace prefix of element\n * @param {string} localName -localName of element\n * @param {string} namespace - namespace URI associate with element\n * @throws ArgumentException\n * @throws InvalidOperationException\n */\n XmlWriter.prototype.writeStartElement = function (prefix, localName, namespace) {\n if (this.bufferBlob === undefined) {\n throw new Error('InvalidOperationException: Wrong Token');\n }\n if (localName === undefined || localName === null || localName.length === 0) {\n throw new Error('ArgumentException: localName cannot be undefined, null or empty');\n }\n this.checkName(localName);\n if (this.currentState === 'Initial') {\n this.writeStartDocument();\n }\n if (this.currentState === 'StartElement') {\n this.startElementContent();\n }\n this.currentState = 'StartElement';\n if (prefix === undefined || prefix === null) {\n if (namespace !== undefined && namespace !== null) {\n prefix = this.lookupPrefix(namespace);\n }\n if (prefix === undefined || prefix === null) {\n prefix = '';\n }\n }\n else if (prefix.length > 0) {\n if (namespace === undefined || namespace === null) {\n namespace = this.lookupNamespace(prefix);\n }\n if (namespace === undefined || namespace === null || (namespace !== undefined && namespace.length === 0)) {\n throw new Error('ArgumentException: Cannot use a prefix with an empty namespace');\n }\n }\n if (namespace === undefined || namespace === null) {\n namespace = this.lookupNamespace(prefix);\n }\n this.writeStartElementInternal(prefix, localName, namespace);\n };\n /**\n * Closes one element and pop corresponding namespace scope\n */\n XmlWriter.prototype.writeEndElement = function () {\n if (this.currentState === 'StartElement') {\n this.startElementContent();\n this.currentState = 'ElementContent';\n }\n else if (this.currentState === 'ElementContent') {\n this.currentState = 'ElementContent';\n }\n this.currentState = 'EndElement';\n var top = this.elementStack.length - 1;\n this.writeEndElementInternal(this.elementStack[top].prefix, this.elementStack[top].localName);\n this.namespaceStack.splice(this.elementStack[top].previousTop + 1);\n this.elementStack.splice(top);\n if (this.bufferText.length > 10240) {\n this.flush();\n }\n };\n /**\n * Writes an element with the specified prefix, local name, namespace URI, and value.\n * @param {string} prefix - namespace prefix of element\n * @param {string} localName - localName of element\n * @param {string} namespace - namespace URI associate with element\n * @param {string} value - value of element\n */\n XmlWriter.prototype.writeElementString = function (prefix, localName, namespace, value) {\n this.writeStartElement(prefix, localName, namespace);\n if (value !== undefined && value !== null && value.length !== 0) {\n this.writeString(value);\n }\n this.writeEndElement();\n };\n /**\n * Writes out the attribute with the specified prefix, local name, namespace URI, and value\n * @param {string} prefix - namespace prefix of element\n * @param {string} localName - localName of element\n * @param {string} namespace - namespace URI associate with element\n * @param {string} value - value of element\n */\n XmlWriter.prototype.writeAttributeString = function (prefix, localName, namespace, value) {\n this.writeStartAttribute(prefix, localName, namespace, value);\n this.writeStringInternal(value, true);\n this.writeEndAttribute();\n };\n /**\n * Writes the given text content\n * @param {string} text - text to write\n * @throws InvalidOperationException\n */\n XmlWriter.prototype.writeString = function (text) {\n this.writeInternal(text, false);\n };\n /**\n * Write given text as raw data\n * @param {string} text - text to write\n * @throws InvalidOperationException\n */\n XmlWriter.prototype.writeRaw = function (text) {\n this.writeInternal(text, true);\n };\n XmlWriter.prototype.writeInternal = function (text, isRawString) {\n if (text === undefined || text === null) {\n return;\n }\n else {\n if (this.currentState !== 'StartElement' && this.currentState !== 'ElementContent') {\n throw new Error('InvalidOperationException: Wrong Token');\n }\n if (this.currentState === 'StartElement') {\n this.startElementContent();\n }\n this.currentState = 'ElementContent';\n if (isRawString) {\n this.rawText(text);\n }\n else {\n this.writeStringInternal(text, false);\n }\n }\n };\n /**\n * Saves the file with specified name and sends the file to client browser\n * @param {string} fileName - file name\n */\n XmlWriter.prototype.save = function (fileName) {\n while (this.elementStack.length - 1 > 0) {\n this.writeEndElement();\n }\n if (this.bufferText !== '') {\n this.flush();\n }\n Save.save(fileName, this.buffer);\n };\n /**\n * Releases the resources used by XmlWriter.\n */\n XmlWriter.prototype.destroy = function () {\n this.bufferBlob = undefined;\n for (var i = 0; i < this.namespaceStack.length; i++) {\n this.namespaceStack[i].destroy();\n }\n this.namespaceStack = [];\n for (var i = 0; i < this.elementStack.length; i++) {\n this.elementStack[i].destroy();\n }\n this.elementStack = [];\n this.bufferText = '';\n this.contentPos = 0;\n };\n XmlWriter.prototype.flush = function () {\n if (this.bufferBlob === undefined) {\n return;\n }\n this.bufferBlob = new Blob([this.bufferBlob, this.bufferText], { type: 'text/plain' });\n this.bufferText = '';\n };\n XmlWriter.prototype.writeProcessingInstructionInternal = function (name, text) {\n this.bufferText += ' 0) {\n this.bufferText += ' ';\n text = text.replace(/\\?\\>/g, '? >');\n this.bufferText += text;\n }\n this.bufferText += '?';\n this.bufferText += '>';\n };\n XmlWriter.prototype.writeStartAttribute = function (prefix, localName, namespace, value) {\n if (localName === undefined || localName === null || localName.length === 0) {\n if (prefix === 'xmlns') {\n localName = 'xmlns';\n prefix = '';\n }\n else {\n throw new Error('ArgumentException: localName cannot be undefined, null or empty');\n }\n }\n if (this.currentState !== 'StartElement') {\n throw new Error('InvalidOperationException: Wrong Token');\n }\n this.checkName(localName);\n this.writeStartAttributePrefixAndNameSpace(prefix, localName, namespace, value);\n };\n XmlWriter.prototype.writeStartAttributePrefixAndNameSpace = function (prefix, localName, namespace, value) {\n if (prefix === undefined || prefix === null) {\n if (namespace !== undefined && namespace !== null) {\n if (!(localName === 'xmlns' && namespace === 'http://www.w3.org/2000/xmlns/')) {\n prefix = this.lookupPrefix(namespace);\n }\n }\n if (prefix === undefined || prefix === null) {\n prefix = '';\n }\n }\n if (namespace === undefined || namespace === null) {\n if (prefix !== undefined && prefix !== null && prefix.length > 0) {\n namespace = this.lookupNamespace(prefix);\n }\n if (namespace === undefined || namespace === null) {\n namespace = '';\n }\n }\n this.writeStartAttributeSpecialAttribute(prefix, localName, namespace, value);\n };\n XmlWriter.prototype.writeStartAttributeSpecialAttribute = function (prefix, localName, namespace, value) {\n if (prefix.length === 0) {\n if (localName[0] === 'x' && localName === 'xmlns') {\n this.skipPushAndWrite(prefix, localName, namespace);\n this.pushNamespaceExplicit('', value);\n return;\n }\n else if (namespace.length > 0) {\n prefix = this.lookupPrefix(namespace);\n }\n }\n else {\n if (prefix[0] === 'x') {\n if (prefix === 'xmlns') {\n this.skipPushAndWrite(prefix, localName, namespace);\n this.pushNamespaceExplicit(localName, value);\n return;\n }\n else if (prefix === 'xml') {\n if (localName === 'space' || localName === 'lang') {\n this.skipPushAndWrite(prefix, localName, namespace);\n return;\n }\n }\n }\n if (namespace.length === 0) {\n prefix = '';\n }\n }\n if (prefix !== undefined && prefix !== null && prefix.length !== 0) {\n this.pushNamespaceImplicit(prefix, namespace);\n }\n this.skipPushAndWrite(prefix, localName, namespace);\n };\n XmlWriter.prototype.writeEndAttribute = function () {\n this.currentState = 'StartElement';\n this.bufferText += '\"';\n };\n XmlWriter.prototype.writeStartElementInternal = function (prefix, localName, namespace) {\n this.bufferText += '<';\n if (prefix.length > 0) {\n this.rawText(prefix);\n this.bufferText += ':';\n }\n this.rawText(localName);\n var top = this.elementStack.length;\n this.elementStack.push(new XmlElement());\n this.elementStack[top].set(prefix, localName, namespace, this.namespaceStack.length - 1);\n this.pushNamespaceImplicit(prefix, namespace);\n for (var i = 0; i < this.attributeStack.length; i++) {\n this.attributeStack[i].destroy();\n }\n this.attributeStack = [];\n };\n XmlWriter.prototype.writeEndElementInternal = function (prefix, localName) {\n if (this.contentPos !== this.bufferText.length + 1) {\n this.bufferText += '';\n }\n else {\n this.bufferText = this.bufferText.substring(0, this.bufferText.length - 1);\n this.bufferText += ' />';\n }\n };\n XmlWriter.prototype.writeStartAttributeInternal = function (prefix, localName, namespaceName) {\n this.bufferText += ' ';\n if (prefix !== undefined && prefix !== null && prefix.length > 0) {\n this.rawText(prefix);\n this.bufferText += ':';\n }\n this.rawText(localName);\n this.bufferText += '=';\n this.bufferText += '\"';\n };\n XmlWriter.prototype.writeNamespaceDeclaration = function (prefix, namespaceUri) {\n this.writeStartNamespaceDeclaration(prefix);\n this.writeStringInternal(namespaceUri, true);\n this.bufferText += '\"';\n };\n XmlWriter.prototype.writeStartNamespaceDeclaration = function (prefix) {\n if (prefix === undefined || prefix === null || prefix.length === 0) {\n this.rawText(' xmlns=\\\"');\n }\n else {\n this.rawText(' xmlns:');\n this.rawText(prefix);\n this.bufferText += '=';\n this.bufferText += '\"';\n }\n };\n XmlWriter.prototype.writeStringInternal = function (text, inAttributeValue) {\n if (text === null || text === undefined) {\n text = '';\n }\n var tempText = '';\n text = text.replace(/\\&/g, '&');\n text = text.replace(/\\/g, '>');\n if (inAttributeValue) {\n text = text.replace(/\\\"/g, '"');\n }\n this.bufferText += text;\n if (!inAttributeValue) {\n this.contentPos = 0;\n }\n };\n XmlWriter.prototype.startElementContent = function () {\n var start = this.elementStack[this.elementStack.length - 1].previousTop;\n for (var i = this.namespaceStack.length - 1; i > start; i--) {\n if (this.namespaceStack[i].kind === 'NeedToWrite') {\n this.writeNamespaceDeclaration(this.namespaceStack[i].prefix, this.namespaceStack[i].namespaceUri);\n }\n }\n this.bufferText += '>';\n this.contentPos = this.bufferText.length + 1;\n };\n XmlWriter.prototype.rawText = function (text) {\n this.bufferText += text;\n };\n XmlWriter.prototype.addNamespace = function (prefix, ns, kind) {\n var top = this.namespaceStack.length;\n this.namespaceStack.push(new Namespace());\n this.namespaceStack[top].set(prefix, ns, kind);\n };\n XmlWriter.prototype.lookupPrefix = function (namespace) {\n for (var i = this.namespaceStack.length - 1; i >= 0; i--) {\n if (this.namespaceStack[i].namespaceUri === namespace) {\n return this.namespaceStack[i].prefix;\n }\n }\n return undefined;\n };\n XmlWriter.prototype.lookupNamespace = function (prefix) {\n for (var i = this.namespaceStack.length - 1; i >= 0; i--) {\n if (this.namespaceStack[i].prefix === prefix) {\n return this.namespaceStack[i].namespaceUri;\n }\n }\n return undefined;\n };\n XmlWriter.prototype.lookupNamespaceIndex = function (prefix) {\n for (var i = this.namespaceStack.length - 1; i >= 0; i--) {\n if (this.namespaceStack[i].prefix === prefix) {\n return i;\n }\n }\n return -1;\n };\n XmlWriter.prototype.pushNamespaceImplicit = function (prefix, ns) {\n var kind;\n var existingNsIndex = this.lookupNamespaceIndex(prefix);\n if (existingNsIndex !== -1) {\n if (existingNsIndex > this.elementStack[this.elementStack.length - 1].previousTop) {\n if (this.namespaceStack[existingNsIndex].namespaceUri !== ns) {\n throw new Error('XmlException namespace Uri needs to be the same as the one that is already declared');\n }\n return;\n }\n else {\n if (this.namespaceStack[existingNsIndex].kind === 'Special') {\n if (prefix === 'xml') {\n if (ns !== this.namespaceStack[existingNsIndex].namespaceUri) {\n throw new Error('InvalidArgumentException: Xml String');\n }\n else {\n kind = 'Implied';\n }\n }\n else {\n throw new Error('InvalidArgumentException: Prefix \"xmlns\" is reserved for use by XML.');\n }\n }\n else {\n kind = (this.namespaceStack[existingNsIndex].namespaceUri === ns) ? 'Implied' : 'NeedToWrite';\n }\n }\n }\n else {\n if ((ns === 'http://www.w3.org/XML/1998/namespace' && prefix !== 'xml') ||\n (ns === 'http://www.w3.org/2000/xmlns/' && prefix !== 'xmlns')) {\n throw new Error('InvalidArgumentException');\n }\n kind = 'NeedToWrite';\n }\n this.addNamespace(prefix, ns, kind);\n };\n XmlWriter.prototype.pushNamespaceExplicit = function (prefix, ns) {\n var existingNsIndex = this.lookupNamespaceIndex(prefix);\n if (existingNsIndex !== -1) {\n if (existingNsIndex > this.elementStack[this.elementStack.length - 1].previousTop) {\n this.namespaceStack[existingNsIndex].kind = 'Written';\n return;\n }\n }\n this.addNamespace(prefix, ns, 'Written');\n return;\n };\n XmlWriter.prototype.addAttribute = function (prefix, localName, namespaceName) {\n var top = this.attributeStack.length;\n this.attributeStack.push(new XmlAttribute());\n this.attributeStack[top].set(prefix, localName, namespaceName);\n for (var i = 0; i < top; i++) {\n if (this.attributeStack[i].isDuplicate(prefix, localName, namespaceName)) {\n throw new Error('XmlException: duplicate attribute name');\n }\n }\n };\n XmlWriter.prototype.skipPushAndWrite = function (prefix, localName, namespace) {\n this.addAttribute(prefix, localName, namespace);\n this.writeStartAttributeInternal(prefix, localName, namespace);\n };\n XmlWriter.prototype.checkName = function (text) {\n var format = /[ !@#$%^&*()+\\=\\[\\]{};':\"\\\\|,<>\\/?]/;\n if (format.test(text)) {\n throw new Error('InvalidArgumentException: invalid name character');\n }\n };\n return XmlWriter;\n}());\nexport { XmlWriter };\n/**\n * class for managing namespace collection\n */\nvar Namespace = /** @class */ (function () {\n function Namespace() {\n }\n /**\n * set value for current namespace instance\n * @param {string} prefix namespace's prefix\n * @param {string} namespaceUri namespace URI\n * @param {string} kind namespace kind\n */\n Namespace.prototype.set = function (prefix, namespaceUri, kind) {\n this.prefix = prefix;\n this.namespaceUri = namespaceUri;\n this.kind = kind;\n };\n /**\n * Releases the resources used by Namespace\n */\n Namespace.prototype.destroy = function () {\n this.prefix = undefined;\n this.namespaceUri = undefined;\n this.kind = undefined;\n };\n return Namespace;\n}());\nexport { Namespace };\n/**\n * class for managing element collection\n */\nvar XmlElement = /** @class */ (function () {\n function XmlElement() {\n }\n /**\n * set value of current element\n * @param {string} prefix - element prefix\n * @param {string} localName - element local name\n * @param {string} namespaceUri -namespace URI\n * @param {string} previousTop - previous namespace top\n */\n XmlElement.prototype.set = function (prefix, localName, namespaceUri, previousTop) {\n this.previousTop = previousTop;\n this.prefix = prefix;\n this.namespaceUri = namespaceUri;\n this.localName = localName;\n };\n /**\n * Releases the resources used by XmlElement\n */\n XmlElement.prototype.destroy = function () {\n this.previousTop = undefined;\n this.prefix = undefined;\n this.localName = undefined;\n this.namespaceUri = undefined;\n };\n return XmlElement;\n}());\nexport { XmlElement };\n/**\n * class for managing attribute collection\n */\nvar XmlAttribute = /** @class */ (function () {\n function XmlAttribute() {\n }\n /**\n * set value of current attribute\n * @param {string} prefix - namespace's prefix\n * @param {string} namespaceUri - namespace URI\n * @param {string} localName - attribute localName\n */\n XmlAttribute.prototype.set = function (prefix, localName, namespaceUri) {\n this.prefix = prefix;\n this.namespaceUri = namespaceUri;\n this.localName = localName;\n };\n /**\n * get whether the attribute is duplicate or not\n * @param {string} prefix - namespace's prefix\n * @param {string} namespaceUri - namespace URI\n * @param {string} localName - attribute localName\n */\n XmlAttribute.prototype.isDuplicate = function (prefix, localName, namespaceUri) {\n return ((this.localName === localName) && ((this.prefix === prefix) || (this.namespaceUri === namespaceUri)));\n };\n /**\n * Releases the resources used by XmlAttribute\n */\n XmlAttribute.prototype.destroy = function () {\n this.prefix = undefined;\n this.namespaceUri = undefined;\n this.localName = undefined;\n };\n return XmlAttribute;\n}());\nexport { XmlAttribute };\n","import { Encoding, validateNullOrUndefined } from './encoding';\nimport { Save } from './save';\n/**\n * StreamWriter class contains the implementation for writing characters to a file in a particular encoding\n * ```typescript\n * let writer = new StreamWriter();\n * writer.write('Hello World');\n * writer.save('Sample.txt');\n * writer.dispose();\n * ```\n */\nvar StreamWriter = /** @class */ (function () {\n /**\n * Initializes a new instance of the StreamWriter class by using the specified encoding.\n * @param {Encoding} encoding?- The character encoding to use.\n */\n function StreamWriter(encoding) {\n this.bufferBlob = new Blob(['']);\n this.bufferText = '';\n this.init(encoding);\n Save.isMicrosoftBrowser = !(!navigator.msSaveBlob);\n }\n Object.defineProperty(StreamWriter.prototype, \"buffer\", {\n /**\n * Gets the content written to the StreamWriter as Blob.\n * @returns Blob\n */\n get: function () {\n this.flush();\n return this.bufferBlob;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(StreamWriter.prototype, \"encoding\", {\n /**\n * Gets the encoding.\n * @returns Encoding\n */\n get: function () {\n return this.enc;\n },\n enumerable: true,\n configurable: true\n });\n StreamWriter.prototype.init = function (encoding) {\n if (encoding === null || encoding === undefined) {\n this.enc = new Encoding(false);\n this.enc.type = 'Utf8';\n }\n else {\n this.enc = encoding;\n this.setBomByte();\n }\n };\n /**\n * Private method to set Byte Order Mark(BOM) value based on EncodingType\n */\n StreamWriter.prototype.setBomByte = function () {\n if (this.encoding.includeBom) {\n switch (this.encoding.type) {\n case 'Unicode':\n var arrayUnicode = new ArrayBuffer(2);\n var uint8 = new Uint8Array(arrayUnicode);\n uint8[0] = 255;\n uint8[1] = 254;\n this.bufferBlob = new Blob([arrayUnicode]);\n break;\n case 'Utf8':\n var arrayUtf8 = new ArrayBuffer(3);\n var utf8 = new Uint8Array(arrayUtf8);\n utf8[0] = 239;\n utf8[1] = 187;\n utf8[2] = 191;\n this.bufferBlob = new Blob([arrayUtf8]);\n break;\n default:\n this.bufferBlob = new Blob(['']);\n break;\n }\n }\n };\n /**\n * Saves the file with specified name and sends the file to client browser\n * @param {string} fileName - The file name to save\n * @returns {void}\n */\n StreamWriter.prototype.save = function (fileName) {\n if (this.bufferText !== '') {\n this.flush();\n }\n Save.save(fileName, this.buffer);\n };\n /**\n * Writes the specified string.\n * @param {string} value - The string to write. If value is null or undefined, nothing is written.\n * @returns {void}\n */\n StreamWriter.prototype.write = function (value) {\n if (this.encoding === undefined) {\n throw new Error('Object Disposed Exception: current writer is disposed');\n }\n validateNullOrUndefined(value, 'string');\n this.bufferText += value;\n if (this.bufferText.length >= 10240) {\n this.flush();\n }\n };\n StreamWriter.prototype.flush = function () {\n if (this.bufferText === undefined || this.bufferText === null || this.bufferText.length === 0) {\n return;\n }\n var bufferArray = this.encoding.getBytes(this.bufferText, 0, this.bufferText.length);\n this.bufferText = '';\n this.bufferBlob = new Blob([this.bufferBlob, bufferArray]);\n };\n /**\n * Writes the specified string followed by a line terminator\n * @param {string} value - The string to write. If value is null or undefined, nothing is written\n * @returns {void}\n */\n StreamWriter.prototype.writeLine = function (value) {\n if (this.encoding === undefined) {\n throw new Error('Object Disposed Exception: current writer is disposed');\n }\n validateNullOrUndefined(value, 'string');\n this.bufferText = this.bufferText + value + '\\r\\n';\n if (this.bufferText.length >= 10240) {\n this.flush();\n }\n };\n /**\n * Releases the resources used by the StreamWriter\n * @returns {void}\n */\n StreamWriter.prototype.destroy = function () {\n this.bufferBlob = undefined;\n this.bufferText = undefined;\n if (this.enc instanceof Encoding) {\n this.enc.destroy();\n }\n this.enc = undefined;\n };\n return StreamWriter;\n}());\nexport { StreamWriter };\n","import { Encoding } from '@syncfusion/ej2-file-utils';\n/**\n * array literal codes\n */\nvar arrLiteralCodes = new Int16Array(286);\nvar arrLiteralLengths = new Uint8Array(286);\nvar arrDistanceCodes = new Int16Array(30);\nvar arrDistanceLengths = new Uint8Array(30);\n/**\n * represent compression stream writer\n * ```typescript\n * let compressedWriter = new CompressedStreamWriter();\n * let text: string = 'Hello world!!!';\n * compressedWriter.write(text, 0, text.length);\n * compressedWriter.close();\n * ```\n */\nvar CompressedStreamWriter = /** @class */ (function () {\n /**\n * Initializes compressor and writes ZLib header if needed.\n * @param {boolean} noWrap - optional if true, ZLib header and checksum will not be written.\n */\n function CompressedStreamWriter(noWrap) {\n this.pendingBuffer = new Uint8Array(1 << 16);\n this.pendingBufLength = 0;\n this.pendingBufCache = 0;\n this.pendingBufBitsInCache = 0;\n this.bufferPosition = 0;\n this.extraBits = 0;\n this.currentHash = 0;\n this.matchStart = 0;\n this.matchLength = 0;\n this.matchPrevAvail = false;\n this.blockStart = 0;\n this.stringStart = 0;\n this.lookAhead = 0;\n this.totalBytesIn = 0;\n this.inputOffset = 0;\n this.inputEnd = 0;\n this.windowSize = 1 << 15;\n this.windowMask = this.windowSize - 1;\n this.hashSize = 1 << 15;\n this.hashMask = this.hashSize - 1;\n this.hashShift = Math.floor((15 + 3 - 1) / 3);\n this.maxDist = this.windowSize - 262;\n this.checkSum = 1;\n this.noWrap = false;\n this.treeLiteral = new CompressorHuffmanTree(this, 286, 257, 15);\n this.treeDistances = new CompressorHuffmanTree(this, 30, 1, 15);\n this.treeCodeLengths = new CompressorHuffmanTree(this, 19, 4, 7);\n this.arrDistances = new Uint16Array((1 << 14));\n this.arrLiterals = new Uint8Array((1 << 14));\n this.stream = [];\n this.dataWindow = new Uint8Array(2 * this.windowSize);\n this.hashHead = new Int16Array(this.hashSize);\n this.hashPrevious = new Int16Array(this.windowSize);\n this.blockStart = this.stringStart = 1;\n this.noWrap = noWrap;\n if (!noWrap) {\n this.writeZLibHeader();\n }\n }\n Object.defineProperty(CompressedStreamWriter.prototype, \"compressedData\", {\n /**\n * get compressed data\n */\n get: function () {\n return this.stream;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CompressedStreamWriter.prototype, \"getCompressedString\", {\n get: function () {\n var compressedString = '';\n if (this.stream !== undefined) {\n for (var i = 0; i < this.stream.length; i++) {\n compressedString += String.fromCharCode.apply(null, this.stream[i]);\n }\n }\n return compressedString;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Compresses data and writes it to the stream.\n * @param {Uint8Array} data - data to compress\n * @param {number} offset - offset in data\n * @param {number} length - length of the data\n * @returns {void}\n */\n CompressedStreamWriter.prototype.write = function (data, offset, length) {\n if (data === undefined || data === null) {\n throw new Error('ArgumentException: data cannot null or undefined');\n }\n var end = offset + length;\n if (0 > offset || offset > end || end > data.length) {\n throw new Error('ArgumentOutOfRangeException: Offset or length is incorrect');\n }\n if (typeof data === 'string') {\n var encode = new Encoding(false);\n encode.type = 'Utf8';\n data = new Uint8Array(encode.getBytes(data, 0, data.length));\n end = offset + data.length;\n }\n this.inputBuffer = data;\n this.inputOffset = offset;\n this.inputEnd = end;\n if (!this.noWrap) {\n this.checkSum = ChecksumCalculator.checksumUpdate(this.checkSum, this.inputBuffer, this.inputOffset, end);\n }\n while (!(this.inputEnd === this.inputOffset) || !(this.pendingBufLength === 0)) {\n this.pendingBufferFlush();\n this.compressData(false);\n }\n };\n /**\n * write ZLib header to the compressed data\n * @return {void}\n */\n CompressedStreamWriter.prototype.writeZLibHeader = function () {\n /* Initialize header.*/\n var headerDate = (8 + (7 << 4)) << 8;\n /* Save compression level.*/\n headerDate |= ((5 >> 2) & 3) << 6;\n /* Align header.*/\n headerDate += 31 - (headerDate % 31);\n /* Write header to stream.*/\n this.pendingBufferWriteShortBytes(headerDate);\n };\n /**\n * Write Most Significant Bytes in to stream\n * @param {number} s - check sum value\n */\n CompressedStreamWriter.prototype.pendingBufferWriteShortBytes = function (s) {\n this.pendingBuffer[this.pendingBufLength++] = s >> 8;\n this.pendingBuffer[this.pendingBufLength++] = s;\n };\n CompressedStreamWriter.prototype.compressData = function (finish) {\n var success;\n do {\n this.fillWindow();\n var canFlush = (finish && this.inputEnd === this.inputOffset);\n success = this.compressSlow(canFlush, finish);\n } while (this.pendingBufLength === 0 && success);\n return success;\n };\n CompressedStreamWriter.prototype.compressSlow = function (flush, finish) {\n if (this.lookAhead < 262 && !flush) {\n return false;\n }\n while (this.lookAhead >= 262 || flush) {\n if (this.lookAhead === 0) {\n return this.lookAheadCompleted(finish);\n }\n if (this.stringStart >= 2 * this.windowSize - 262) {\n this.slideWindow();\n }\n var prevMatch = this.matchStart;\n var prevLen = this.matchLength;\n if (this.lookAhead >= 3) {\n this.discardMatch();\n }\n if (prevLen >= 3 && this.matchLength <= prevLen) {\n prevLen = this.matchPreviousBest(prevMatch, prevLen);\n }\n else {\n this.matchPreviousAvailable();\n }\n if (this.bufferPosition >= (1 << 14)) {\n return this.huffmanIsFull(finish);\n }\n }\n return true;\n };\n CompressedStreamWriter.prototype.discardMatch = function () {\n var hashHead = this.insertString();\n if (hashHead !== 0 && this.stringStart - hashHead <= this.maxDist && this.findLongestMatch(hashHead)) {\n if (this.matchLength <= 5 && (this.matchLength === 3 && this.stringStart - this.matchStart > 4096)) {\n this.matchLength = 3 - 1;\n }\n }\n };\n CompressedStreamWriter.prototype.matchPreviousAvailable = function () {\n if (this.matchPrevAvail) {\n this.huffmanTallyLit(this.dataWindow[this.stringStart - 1] & 0xff);\n }\n this.matchPrevAvail = true;\n this.stringStart++;\n this.lookAhead--;\n };\n CompressedStreamWriter.prototype.matchPreviousBest = function (prevMatch, prevLen) {\n this.huffmanTallyDist(this.stringStart - 1 - prevMatch, prevLen);\n prevLen -= 2;\n do {\n this.stringStart++;\n this.lookAhead--;\n if (this.lookAhead >= 3) {\n this.insertString();\n }\n } while (--prevLen > 0);\n this.stringStart++;\n this.lookAhead--;\n this.matchPrevAvail = false;\n this.matchLength = 3 - 1;\n return prevLen;\n };\n CompressedStreamWriter.prototype.lookAheadCompleted = function (finish) {\n if (this.matchPrevAvail) {\n this.huffmanTallyLit(this.dataWindow[this.stringStart - 1] & 0xff);\n }\n this.matchPrevAvail = false;\n this.huffmanFlushBlock(this.dataWindow, this.blockStart, this.stringStart - this.blockStart, finish);\n this.blockStart = this.stringStart;\n return false;\n };\n CompressedStreamWriter.prototype.huffmanIsFull = function (finish) {\n var len = this.stringStart - this.blockStart;\n if (this.matchPrevAvail) {\n len--;\n }\n var lastBlock = (finish && this.lookAhead === 0 && !this.matchPrevAvail);\n this.huffmanFlushBlock(this.dataWindow, this.blockStart, len, lastBlock);\n this.blockStart += len;\n return !lastBlock;\n };\n CompressedStreamWriter.prototype.fillWindow = function () {\n if (this.stringStart >= this.windowSize + this.maxDist) {\n this.slideWindow();\n }\n while (this.lookAhead < 262 && this.inputOffset < this.inputEnd) {\n var more = 2 * this.windowSize - this.lookAhead - this.stringStart;\n if (more > this.inputEnd - this.inputOffset) {\n more = this.inputEnd - this.inputOffset;\n }\n this.dataWindow.set(this.inputBuffer.subarray(this.inputOffset, this.inputOffset + more), this.stringStart + this.lookAhead);\n this.inputOffset += more;\n this.totalBytesIn += more;\n this.lookAhead += more;\n }\n if (this.lookAhead >= 3) {\n this.updateHash();\n }\n };\n CompressedStreamWriter.prototype.slideWindow = function () {\n this.dataWindow.set(this.dataWindow.subarray(this.windowSize, this.windowSize + this.windowSize), 0);\n this.matchStart -= this.windowSize;\n this.stringStart -= this.windowSize;\n this.blockStart -= this.windowSize;\n for (var i = 0; i < this.hashSize; ++i) {\n var m = this.hashHead[i] & 0xffff;\n this.hashHead[i] = (((m >= this.windowSize) ? (m - this.windowSize) : 0));\n }\n for (var i = 0; i < this.windowSize; i++) {\n var m = this.hashPrevious[i] & 0xffff;\n this.hashPrevious[i] = ((m >= this.windowSize) ? (m - this.windowSize) : 0);\n }\n };\n CompressedStreamWriter.prototype.insertString = function () {\n var match;\n var hash = ((this.currentHash << this.hashShift) ^ this.dataWindow[this.stringStart + (3 - 1)]) & this.hashMask;\n this.hashPrevious[this.stringStart & this.windowMask] = match = this.hashHead[hash];\n this.hashHead[hash] = this.stringStart;\n this.currentHash = hash;\n return match & 0xffff;\n };\n CompressedStreamWriter.prototype.findLongestMatch = function (curMatch) {\n var chainLen = 4096;\n var niceLen = 258;\n var scan = this.stringStart;\n var match;\n var bestEnd = this.stringStart + this.matchLength;\n var bestLength = Math.max(this.matchLength, 3 - 1);\n var limit = Math.max(this.stringStart - this.maxDist, 0);\n var stringEnd = this.stringStart + 258 - 1;\n var scanEnd1 = this.dataWindow[bestEnd - 1];\n var scanEnd = this.dataWindow[bestEnd];\n var data = this.dataWindow;\n if (bestLength >= 32) {\n chainLen >>= 2;\n }\n if (niceLen > this.lookAhead) {\n niceLen = this.lookAhead;\n }\n do {\n if (data[curMatch + bestLength] !== scanEnd ||\n data[curMatch + bestLength - 1] !== scanEnd1 ||\n data[curMatch] !== data[scan] ||\n data[curMatch + 1] !== data[scan + 1]) {\n continue;\n }\n match = curMatch + 2;\n scan += 2;\n /* tslint:disable */\n while (data[++scan] === data[++match] && data[++scan] === data[++match] &&\n data[++scan] === data[++match] && data[++scan] === data[++match] &&\n data[++scan] === data[++match] && data[++scan] === data[++match] &&\n data[++scan] === data[++match] && data[++scan] === data[++match] && scan < stringEnd) {\n /* tslint:disable */\n }\n if (scan > bestEnd) {\n this.matchStart = curMatch;\n bestEnd = scan;\n bestLength = scan - this.stringStart;\n if (bestLength >= niceLen) {\n break;\n }\n scanEnd1 = data[bestEnd - 1];\n scanEnd = data[bestEnd];\n }\n scan = this.stringStart;\n } while ((curMatch = (this.hashPrevious[curMatch & this.windowMask] & 0xffff)) > limit && --chainLen !== 0);\n this.matchLength = Math.min(bestLength, this.lookAhead);\n return this.matchLength >= 3;\n };\n CompressedStreamWriter.prototype.updateHash = function () {\n this.currentHash = (this.dataWindow[this.stringStart] << this.hashShift) ^ this.dataWindow[this.stringStart + 1];\n };\n CompressedStreamWriter.prototype.huffmanTallyLit = function (literal) {\n this.arrDistances[this.bufferPosition] = 0;\n this.arrLiterals[this.bufferPosition++] = literal;\n this.treeLiteral.codeFrequencies[literal]++;\n return this.bufferPosition >= (1 << 14);\n };\n CompressedStreamWriter.prototype.huffmanTallyDist = function (dist, len) {\n this.arrDistances[this.bufferPosition] = dist;\n this.arrLiterals[this.bufferPosition++] = (len - 3);\n var lc = this.huffmanLengthCode(len - 3);\n this.treeLiteral.codeFrequencies[lc]++;\n if (lc >= 265 && lc < 285) {\n this.extraBits += Math.floor((lc - 261) / 4);\n }\n var dc = this.huffmanDistanceCode(dist - 1);\n this.treeDistances.codeFrequencies[dc]++;\n if (dc >= 4) {\n this.extraBits += Math.floor((dc / 2 - 1));\n }\n return this.bufferPosition >= (1 << 14);\n };\n CompressedStreamWriter.prototype.huffmanFlushBlock = function (stored, storedOffset, storedLength, lastBlock) {\n this.treeLiteral.codeFrequencies[256]++;\n this.treeLiteral.buildTree();\n this.treeDistances.buildTree();\n this.treeLiteral.calculateBLFreq(this.treeCodeLengths);\n this.treeDistances.calculateBLFreq(this.treeCodeLengths);\n this.treeCodeLengths.buildTree();\n var blTreeCodes = 4;\n for (var i = 18; i > blTreeCodes; i--) {\n if (this.treeCodeLengths.codeLengths[CompressorHuffmanTree.huffCodeLengthOrders[i]] > 0) {\n blTreeCodes = i + 1;\n }\n }\n var opt_len = 14 + blTreeCodes * 3 + this.treeCodeLengths.getEncodedLength() +\n this.treeLiteral.getEncodedLength() + this.treeDistances.getEncodedLength() + this.extraBits;\n var static_len = this.extraBits;\n for (var i = 0; i < 286; i++) {\n static_len += this.treeLiteral.codeFrequencies[i] * arrLiteralLengths[i];\n }\n for (var i = 0; i < 30; i++) {\n static_len += this.treeDistances.codeFrequencies[i] * arrDistanceLengths[i];\n }\n if (opt_len >= static_len) {\n // Force static trees.\n opt_len = static_len;\n }\n if (storedOffset >= 0 && storedLength + 4 < opt_len >> 3) {\n this.huffmanFlushStoredBlock(stored, storedOffset, storedLength, lastBlock);\n }\n else if (opt_len == static_len) {\n // Encode with static tree.\n this.pendingBufferWriteBits((1 << 1) + (lastBlock ? 1 : 0), 3);\n this.treeLiteral.setStaticCodes(arrLiteralCodes, arrLiteralLengths);\n this.treeDistances.setStaticCodes(arrDistanceCodes, arrDistanceLengths);\n this.huffmanCompressBlock();\n this.huffmanReset();\n }\n else {\n this.pendingBufferWriteBits((2 << 1) + (lastBlock ? 1 : 0), 3);\n this.huffmanSendAllTrees(blTreeCodes);\n this.huffmanCompressBlock();\n this.huffmanReset();\n }\n };\n CompressedStreamWriter.prototype.huffmanFlushStoredBlock = function (stored, storedOffset, storedLength, lastBlock) {\n this.pendingBufferWriteBits((0 << 1) + (lastBlock ? 1 : 0), 3);\n this.pendingBufferAlignToByte();\n this.pendingBufferWriteShort(storedLength);\n this.pendingBufferWriteShort(~storedLength);\n this.pendingBufferWriteByteBlock(stored, storedOffset, storedLength);\n this.huffmanReset();\n };\n CompressedStreamWriter.prototype.huffmanLengthCode = function (len) {\n if (len === 255) {\n return 285;\n }\n var code = 257;\n while (len >= 8) {\n code += 4;\n len >>= 1;\n }\n return code + len;\n };\n CompressedStreamWriter.prototype.huffmanDistanceCode = function (distance) {\n var code = 0;\n while (distance >= 4) {\n code += 2;\n distance >>= 1;\n }\n return code + distance;\n };\n CompressedStreamWriter.prototype.huffmanSendAllTrees = function (blTreeCodes) {\n this.treeCodeLengths.buildCodes();\n this.treeLiteral.buildCodes();\n this.treeDistances.buildCodes();\n this.pendingBufferWriteBits(this.treeLiteral.treeLength - 257, 5);\n this.pendingBufferWriteBits(this.treeDistances.treeLength - 1, 5);\n this.pendingBufferWriteBits(blTreeCodes - 4, 4);\n for (var rank = 0; rank < blTreeCodes; rank++) {\n this.pendingBufferWriteBits(this.treeCodeLengths.codeLengths[CompressorHuffmanTree.huffCodeLengthOrders[rank]], 3);\n }\n this.treeLiteral.writeTree(this.treeCodeLengths);\n this.treeDistances.writeTree(this.treeCodeLengths);\n };\n CompressedStreamWriter.prototype.huffmanReset = function () {\n this.bufferPosition = 0;\n this.extraBits = 0;\n this.treeLiteral.reset();\n this.treeDistances.reset();\n this.treeCodeLengths.reset();\n };\n CompressedStreamWriter.prototype.huffmanCompressBlock = function () {\n for (var i = 0; i < this.bufferPosition; i++) {\n var literalLen = this.arrLiterals[i] & 255;\n var dist = this.arrDistances[i];\n if (dist-- !== 0) {\n var lc = this.huffmanLengthCode(literalLen);\n this.treeLiteral.writeCodeToStream(lc);\n var bits = Math.floor((lc - 261) / 4);\n if (bits > 0 && bits <= 5) {\n this.pendingBufferWriteBits(literalLen & ((1 << bits) - 1), bits);\n }\n var dc = this.huffmanDistanceCode(dist);\n this.treeDistances.writeCodeToStream(dc);\n bits = Math.floor(dc / 2 - 1);\n if (bits > 0) {\n this.pendingBufferWriteBits(dist & ((1 << bits) - 1), bits);\n }\n }\n else {\n this.treeLiteral.writeCodeToStream(literalLen);\n }\n }\n this.treeLiteral.writeCodeToStream(256);\n };\n /**\n * write bits in to internal buffer\n * @param {number} b - source of bits\n * @param {number} count - count of bits to write\n */\n CompressedStreamWriter.prototype.pendingBufferWriteBits = function (b, count) {\n var uint = new Uint32Array(1);\n uint[0] = this.pendingBufCache | (b << this.pendingBufBitsInCache);\n this.pendingBufCache = uint[0];\n this.pendingBufBitsInCache += count;\n this.pendingBufferFlushBits();\n };\n CompressedStreamWriter.prototype.pendingBufferFlush = function (isClose) {\n this.pendingBufferFlushBits();\n if (this.pendingBufLength > 0) {\n var array = new Uint8Array(this.pendingBufLength);\n array.set(this.pendingBuffer.subarray(0, this.pendingBufLength), 0);\n this.stream.push(array);\n }\n this.pendingBufLength = 0;\n };\n CompressedStreamWriter.prototype.pendingBufferFlushBits = function () {\n var result = 0;\n while (this.pendingBufBitsInCache >= 8 && this.pendingBufLength < (1 << 16)) {\n this.pendingBuffer[this.pendingBufLength++] = this.pendingBufCache;\n this.pendingBufCache >>= 8;\n this.pendingBufBitsInCache -= 8;\n result++;\n }\n return result;\n };\n CompressedStreamWriter.prototype.pendingBufferWriteByteBlock = function (data, offset, length) {\n var array = data.subarray(offset, offset + length);\n this.pendingBuffer.set(array, this.pendingBufLength);\n this.pendingBufLength += length;\n };\n CompressedStreamWriter.prototype.pendingBufferWriteShort = function (s) {\n this.pendingBuffer[this.pendingBufLength++] = s;\n this.pendingBuffer[this.pendingBufLength++] = (s >> 8);\n };\n CompressedStreamWriter.prototype.pendingBufferAlignToByte = function () {\n if (this.pendingBufBitsInCache > 0) {\n this.pendingBuffer[this.pendingBufLength++] = this.pendingBufCache;\n }\n this.pendingBufCache = 0;\n this.pendingBufBitsInCache = 0;\n };\n /**\n * close the stream and write all pending buffer in to stream\n * @returns {void}\n */\n CompressedStreamWriter.prototype.close = function () {\n do {\n this.pendingBufferFlush(true);\n if (!this.compressData(true)) {\n this.pendingBufferFlush(true);\n this.pendingBufferAlignToByte();\n if (!this.noWrap) {\n this.pendingBufferWriteShortBytes(this.checkSum >> 16);\n this.pendingBufferWriteShortBytes(this.checkSum & 0xffff);\n }\n this.pendingBufferFlush(true);\n }\n } while (!(this.inputEnd === this.inputOffset) ||\n !(this.pendingBufLength === 0));\n };\n /**\n * release allocated un-managed resource\n * @returns {void}\n */\n CompressedStreamWriter.prototype.destroy = function () {\n this.stream = [];\n this.stream = undefined;\n this.pendingBuffer = undefined;\n this.treeLiteral = undefined;\n this.treeDistances = undefined;\n this.treeCodeLengths = undefined;\n this.arrLiterals = undefined;\n this.arrDistances = undefined;\n this.hashHead = undefined;\n this.hashPrevious = undefined;\n this.dataWindow = undefined;\n this.inputBuffer = undefined;\n this.pendingBufLength = undefined;\n this.pendingBufCache = undefined;\n this.pendingBufBitsInCache = undefined;\n this.bufferPosition = undefined;\n this.extraBits = undefined;\n this.currentHash = undefined;\n this.matchStart = undefined;\n this.matchLength = undefined;\n this.matchPrevAvail = undefined;\n this.blockStart = undefined;\n this.stringStart = undefined;\n this.lookAhead = undefined;\n this.totalBytesIn = undefined;\n this.inputOffset = undefined;\n this.inputEnd = undefined;\n this.windowSize = undefined;\n this.windowMask = undefined;\n this.hashSize = undefined;\n this.hashMask = undefined;\n this.hashShift = undefined;\n this.maxDist = undefined;\n this.checkSum = undefined;\n this.noWrap = undefined;\n };\n return CompressedStreamWriter;\n}());\nexport { CompressedStreamWriter };\n/**\n * represent the Huffman Tree\n */\nvar CompressorHuffmanTree = /** @class */ (function () {\n /**\n * Create new Huffman Tree\n * @param {CompressedStreamWriter} writer instance\n * @param {number} elementCount - element count\n * @param {number} minCodes - minimum count\n * @param {number} maxLength - maximum count\n */\n function CompressorHuffmanTree(writer, elementCount, minCodes, maxLength) {\n this.writer = writer;\n this.codeMinCount = minCodes;\n this.maxLength = maxLength;\n this.codeFrequency = new Uint16Array(elementCount);\n this.lengthCount = new Int32Array(maxLength);\n }\n Object.defineProperty(CompressorHuffmanTree.prototype, \"treeLength\", {\n get: function () {\n return this.codeCount;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CompressorHuffmanTree.prototype, \"codeLengths\", {\n get: function () {\n return this.codeLength;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CompressorHuffmanTree.prototype, \"codeFrequencies\", {\n get: function () {\n return this.codeFrequency;\n },\n enumerable: true,\n configurable: true\n });\n CompressorHuffmanTree.prototype.setStaticCodes = function (codes, lengths) {\n var temp = new Int16Array(codes.length);\n temp.set(codes, 0);\n this.codes = temp;\n var lengthTemp = new Uint8Array(lengths.length);\n lengthTemp.set(lengths, 0);\n this.codeLength = lengthTemp;\n };\n /**\n * reset all code data in tree\n * @returns {void}\n */\n CompressorHuffmanTree.prototype.reset = function () {\n for (var i = 0; i < this.codeFrequency.length; i++) {\n this.codeFrequency[i] = 0;\n }\n this.codes = undefined;\n this.codeLength = undefined;\n };\n /**\n * write code to the compressor output stream\n * @param {number} code - code to be written\n * @returns {void}\n */\n CompressorHuffmanTree.prototype.writeCodeToStream = function (code) {\n this.writer.pendingBufferWriteBits(this.codes[code] & 0xffff, this.codeLength[code]);\n };\n /**\n * calculate code from their frequencies\n * @returns {void}\n */\n CompressorHuffmanTree.prototype.buildCodes = function () {\n var nextCode = new Int32Array(this.maxLength);\n this.codes = new Int16Array(this.codeCount);\n var code = 0;\n for (var bitsCount = 0; bitsCount < this.maxLength; bitsCount++) {\n nextCode[bitsCount] = code;\n code += this.lengthCount[bitsCount] << (15 - bitsCount);\n }\n for (var i = 0; i < this.codeCount; i++) {\n var bits = this.codeLength[i];\n if (bits > 0) {\n this.codes[i] = CompressorHuffmanTree.bitReverse(nextCode[bits - 1]);\n nextCode[bits - 1] += 1 << (16 - bits);\n }\n }\n };\n CompressorHuffmanTree.bitReverse = function (value) {\n return (CompressorHuffmanTree.reverseBits[value & 15] << 12\n | CompressorHuffmanTree.reverseBits[(value >> 4) & 15] << 8\n | CompressorHuffmanTree.reverseBits[(value >> 8) & 15] << 4\n | CompressorHuffmanTree.reverseBits[value >> 12]);\n };\n /**\n * calculate length of compressed data\n * @returns {number}\n */\n CompressorHuffmanTree.prototype.getEncodedLength = function () {\n var len = 0;\n for (var i = 0; i < this.codeFrequency.length; i++) {\n len += this.codeFrequency[i] * this.codeLength[i];\n }\n return len;\n };\n /**\n * calculate code frequencies\n * @param {CompressorHuffmanTree} blTree\n * @returns {void}\n */\n CompressorHuffmanTree.prototype.calculateBLFreq = function (blTree) {\n var maxCount;\n var minCount;\n var count;\n var curLen = -1;\n var i = 0;\n while (i < this.codeCount) {\n count = 1;\n var nextLen = this.codeLength[i];\n if (nextLen === 0) {\n maxCount = 138;\n minCount = 3;\n }\n else {\n maxCount = 6;\n minCount = 3;\n if (curLen !== nextLen) {\n blTree.codeFrequency[nextLen]++;\n count = 0;\n }\n }\n curLen = nextLen;\n i++;\n while (i < this.codeCount && curLen === this.codeLength[i]) {\n i++;\n if (++count >= maxCount) {\n break;\n }\n }\n if (count < minCount) {\n blTree.codeFrequency[curLen] += count;\n }\n else if (curLen !== 0) {\n blTree.codeFrequency[16]++;\n }\n else if (count <= 10) {\n blTree.codeFrequency[17]++;\n }\n else {\n blTree.codeFrequency[18]++;\n }\n }\n };\n /**\n * @param {CompressorHuffmanTree} blTree - write tree to output stream\n * @returns {void}\n */\n CompressorHuffmanTree.prototype.writeTree = function (blTree) {\n var maxRepeatCount;\n var minRepeatCount;\n var currentRepeatCount;\n var currentCodeLength = -1;\n var i = 0;\n while (i < this.codeCount) {\n currentRepeatCount = 1;\n var nextLen = this.codeLength[i];\n if (nextLen === 0) {\n maxRepeatCount = 138;\n minRepeatCount = 3;\n }\n else {\n maxRepeatCount = 6;\n minRepeatCount = 3;\n if (currentCodeLength !== nextLen) {\n blTree.writeCodeToStream(nextLen);\n currentRepeatCount = 0;\n }\n }\n currentCodeLength = nextLen;\n i++;\n while (i < this.codeCount && currentCodeLength === this.codeLength[i]) {\n i++;\n if (++currentRepeatCount >= maxRepeatCount) {\n break;\n }\n }\n if (currentRepeatCount < minRepeatCount) {\n while (currentRepeatCount-- > 0) {\n blTree.writeCodeToStream(currentCodeLength);\n }\n }\n else if (currentCodeLength !== 0) {\n blTree.writeCodeToStream(16);\n this.writer.pendingBufferWriteBits(currentRepeatCount - 3, 2);\n }\n else if (currentRepeatCount <= 10) {\n blTree.writeCodeToStream(17);\n this.writer.pendingBufferWriteBits(currentRepeatCount - 3, 3);\n }\n else {\n blTree.writeCodeToStream(18);\n this.writer.pendingBufferWriteBits(currentRepeatCount - 11, 7);\n }\n }\n };\n /**\n * Build huffman tree\n * @returns {void}\n */\n CompressorHuffmanTree.prototype.buildTree = function () {\n var codesCount = this.codeFrequency.length;\n var arrTree = new Int32Array(codesCount);\n var treeLength = 0;\n var maxCount = 0;\n for (var n = 0; n < codesCount; n++) {\n var freq = this.codeFrequency[n];\n if (freq !== 0) {\n var pos = treeLength++;\n var pPos = 0;\n while (pos > 0 && this.codeFrequency[arrTree[pPos = Math.floor((pos - 1) / 2)]] > freq) {\n arrTree[pos] = arrTree[pPos];\n pos = pPos;\n }\n arrTree[pos] = n;\n maxCount = n;\n }\n }\n while (treeLength < 2) {\n arrTree[treeLength++] =\n (maxCount < 2) ? ++maxCount : 0;\n }\n this.codeCount = Math.max(maxCount + 1, this.codeMinCount);\n var leafsCount = treeLength;\n var nodesCount = leafsCount;\n var child = new Int32Array(4 * treeLength - 2);\n var values = new Int32Array(2 * treeLength - 1);\n for (var i = 0; i < treeLength; i++) {\n var node = arrTree[i];\n var iIndex = 2 * i;\n child[iIndex] = node;\n child[iIndex + 1] = -1;\n values[i] = (this.codeFrequency[node] << 8);\n arrTree[i] = i;\n }\n this.constructHuffmanTree(arrTree, treeLength, values, nodesCount, child);\n this.buildLength(child);\n };\n CompressorHuffmanTree.prototype.constructHuffmanTree = function (arrTree, treeLength, values, nodesCount, child) {\n do {\n var first = arrTree[0];\n var last = arrTree[--treeLength];\n var lastVal = values[last];\n var pPos = 0;\n var path = 1;\n while (path < treeLength) {\n if (path + 1 < treeLength && values[arrTree[path]] > values[arrTree[path + 1]]) {\n path++;\n }\n arrTree[pPos] = arrTree[path];\n pPos = path;\n path = pPos * 2 + 1;\n }\n while ((path = pPos) > 0 && values[arrTree[pPos = Math.floor((path - 1) / 2)]] > lastVal) {\n arrTree[path] = arrTree[pPos];\n }\n arrTree[path] = last;\n var second = arrTree[0];\n last = nodesCount++;\n child[2 * last] = first;\n child[2 * last + 1] = second;\n var minDepth = Math.min(values[first] & 0xff, values[second] & 0xff);\n values[last] = lastVal = values[first] + values[second] - minDepth + 1;\n pPos = 0;\n path = 1;\n /* tslint:disable */\n while (path < treeLength) {\n if (path + 1 < treeLength && values[arrTree[path]] > values[arrTree[path + 1]]) {\n path++;\n }\n arrTree[pPos] = arrTree[path];\n pPos = path;\n path = pPos * 2 + 1;\n } /* tslint:disable */\n while ((path = pPos) > 0 && values[arrTree[pPos = Math.floor((path - 1) / 2)]] > lastVal) {\n arrTree[path] = arrTree[pPos];\n }\n arrTree[path] = last;\n } while (treeLength > 1);\n };\n CompressorHuffmanTree.prototype.buildLength = function (child) {\n this.codeLength = new Uint8Array(this.codeFrequency.length);\n var numNodes = Math.floor(child.length / 2);\n var numLeafs = Math.floor((numNodes + 1) / 2);\n var overflow = 0;\n for (var i = 0; i < this.maxLength; i++) {\n this.lengthCount[i] = 0;\n }\n overflow = this.calculateOptimalCodeLength(child, overflow, numNodes);\n if (overflow === 0) {\n return;\n }\n var iIncreasableLength = this.maxLength - 1;\n do {\n while (this.lengthCount[--iIncreasableLength] === 0) {\n /* tslint:disable */\n }\n do {\n this.lengthCount[iIncreasableLength]--;\n this.lengthCount[++iIncreasableLength]++;\n overflow -= (1 << (this.maxLength - 1 - iIncreasableLength));\n } while (overflow > 0 && iIncreasableLength < this.maxLength - 1);\n } while (overflow > 0);\n this.recreateTree(child, overflow, numLeafs);\n };\n CompressorHuffmanTree.prototype.recreateTree = function (child, overflow, numLeafs) {\n this.lengthCount[this.maxLength - 1] += overflow;\n this.lengthCount[this.maxLength - 2] -= overflow;\n var nodePtr = 2 * numLeafs;\n for (var bits = this.maxLength; bits !== 0; bits--) {\n var n = this.lengthCount[bits - 1];\n while (n > 0) {\n var childPtr = 2 * child[nodePtr++];\n if (child[childPtr + 1] === -1) {\n this.codeLength[child[childPtr]] = bits;\n n--;\n }\n }\n }\n };\n CompressorHuffmanTree.prototype.calculateOptimalCodeLength = function (child, overflow, numNodes) {\n var lengths = new Int32Array(numNodes);\n lengths[numNodes - 1] = 0;\n for (var i = numNodes - 1; i >= 0; i--) {\n var childIndex = 2 * i + 1;\n if (child[childIndex] !== -1) {\n var bitLength = lengths[i] + 1;\n if (bitLength > this.maxLength) {\n bitLength = this.maxLength;\n overflow++;\n }\n lengths[child[childIndex - 1]] = lengths[child[childIndex]] = bitLength;\n }\n else {\n var bitLength = lengths[i];\n this.lengthCount[bitLength - 1]++;\n this.codeLength[child[childIndex - 1]] = lengths[i];\n }\n }\n return overflow;\n };\n CompressorHuffmanTree.reverseBits = [0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15];\n CompressorHuffmanTree.huffCodeLengthOrders = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15];\n return CompressorHuffmanTree;\n}());\nexport { CompressorHuffmanTree };\n/**\n * Checksum calculator, based on Adler32 algorithm.\n */\nvar ChecksumCalculator = /** @class */ (function () {\n function ChecksumCalculator() {\n }\n /**\n * Updates checksum by calculating checksum of the\n * given buffer and adding it to current value.\n * @param {number} checksum - current checksum.\n * @param {Uint8Array} buffer - data byte array.\n * @param {number} offset - offset in the buffer.\n * @param {number} length - length of data to be used from the stream.\n * @returns {number}\n */\n ChecksumCalculator.checksumUpdate = function (checksum, buffer, offset, length) {\n var uint = new Uint32Array(1);\n uint[0] = checksum;\n var checksum_uint = uint[0];\n var s1 = uint[0] = checksum_uint & 65535;\n var s2 = uint[0] = checksum_uint >> ChecksumCalculator.checkSumBitOffset;\n while (length > 0) {\n var steps = Math.min(length, ChecksumCalculator.checksumIterationCount);\n length -= steps;\n while (--steps >= 0) {\n s1 = s1 + (uint[0] = (buffer[offset++] & 255));\n s2 = s2 + s1;\n }\n s1 %= ChecksumCalculator.checksumBase;\n s2 %= ChecksumCalculator.checksumBase;\n }\n checksum_uint = (s2 << ChecksumCalculator.checkSumBitOffset) | s1;\n return checksum_uint;\n };\n ChecksumCalculator.checkSumBitOffset = 16;\n ChecksumCalculator.checksumBase = 65521;\n ChecksumCalculator.checksumIterationCount = 3800;\n return ChecksumCalculator;\n}());\nexport { ChecksumCalculator };\n/**\n * Huffman Tree literal calculation\n */\n(function () {\n var i = 0;\n while (i < 144) {\n arrLiteralCodes[i] = CompressorHuffmanTree.bitReverse((0x030 + i) << 8);\n arrLiteralLengths[i++] = 8;\n }\n while (i < 256) {\n arrLiteralCodes[i] = CompressorHuffmanTree.bitReverse((0x190 - 144 + i) << 7);\n arrLiteralLengths[i++] = 9;\n }\n while (i < 280) {\n arrLiteralCodes[i] = CompressorHuffmanTree.bitReverse((0x000 - 256 + i) << 9);\n arrLiteralLengths[i++] = 7;\n }\n while (i < 286) {\n arrLiteralCodes[i] = CompressorHuffmanTree.bitReverse((0x0c0 - 280 + i) << 8);\n arrLiteralLengths[i++] = 8;\n }\n for (i = 0; i < 30; i++) {\n arrDistanceCodes[i] = CompressorHuffmanTree.bitReverse(i << 11);\n arrDistanceLengths[i] = 5;\n }\n})();\n","import { CompressedStreamWriter } from './compression-writer';\nimport { Save } from '@syncfusion/ej2-file-utils';\nvar crc32Table = [];\n/**\n * class provide compression library\n * ```typescript\n * let archive = new ZipArchive();\n * archive.compressionLevel = 'Normal';\n * let archiveItem = new ZipArchiveItem(archive, 'directoryName\\fileName.txt');\n * archive.addItem(archiveItem);\n * archive.save(fileName.zip);\n * ```\n */\nvar ZipArchive = /** @class */ (function () {\n /**\n * constructor for creating ZipArchive instance\n */\n function ZipArchive() {\n this.files = [];\n this.level = 'Normal';\n Save.isMicrosoftBrowser = !(!navigator.msSaveBlob);\n }\n Object.defineProperty(ZipArchive.prototype, \"compressionLevel\", {\n /**\n * gets compression level\n */\n get: function () {\n return this.level;\n },\n /**\n * sets compression level\n */\n set: function (level) {\n this.level = level;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ZipArchive.prototype, \"length\", {\n /**\n * gets items count\n */\n get: function () {\n if (this.files === undefined) {\n return 0;\n }\n return this.files.length;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * add new item to archive\n * @param {ZipArchiveItem} item - item to be added\n * @returns {void}\n */\n ZipArchive.prototype.addItem = function (item) {\n if (item === null || item === undefined) {\n throw new Error('ArgumentException: item cannot be null or undefined');\n }\n for (var i = 0; i < this.files.length; i++) {\n var file = this.files[i];\n if (file instanceof ZipArchiveItem) {\n if (file.name === item.name) {\n throw new Error('item with same name already exist');\n }\n }\n }\n this.files.push(item);\n };\n /**\n * add new directory to archive\n * @param directoryName directoryName to be created\n * @returns {void}\n */\n ZipArchive.prototype.addDirectory = function (directoryName) {\n if (directoryName === null || directoryName === undefined) {\n throw new Error('ArgumentException: string cannot be null or undefined');\n }\n if (directoryName.length === 0) {\n throw new Error('ArgumentException: string cannot be empty');\n }\n if (directoryName.slice(-1) !== '/') {\n directoryName += '/';\n }\n if (this.files.indexOf(directoryName) !== -1) {\n throw new Error('item with same name already exist');\n }\n this.files.push(directoryName);\n };\n /**\n * gets item at specified index\n * @param {number} index - item index\n * @returns {ZipArchiveItem}\n */\n ZipArchive.prototype.getItem = function (index) {\n if (index >= 0 && index < this.files.length) {\n return this.files[index];\n }\n return undefined;\n };\n /**\n * determines whether an element is in the collection\n * @param {string | ZipArchiveItem} item - item to search\n * @returns {boolean}\n */\n ZipArchive.prototype.contains = function (item) {\n return this.files.indexOf(item) !== -1 ? true : false;\n };\n /**\n * save archive with specified file name\n * @param {string} fileName save archive with specified file name\n * @returns {Promise}\n */\n ZipArchive.prototype.save = function (fileName) {\n if (fileName === null || fileName === undefined || fileName.length === 0) {\n throw new Error('ArgumentException: fileName cannot be null or undefined');\n }\n if (this.files.length === 0) {\n throw new Error('InvalidOperation');\n }\n var zipArchive = this;\n var promise;\n return promise = new Promise(function (resolve, reject) {\n zipArchive.saveInternal(fileName, false).then(function () {\n resolve(zipArchive);\n });\n });\n };\n /**\n * Save archive as blob\n * @return {Promise}\n */\n ZipArchive.prototype.saveAsBlob = function () {\n var zipArchive = this;\n var promise;\n return promise = new Promise(function (resolve, reject) {\n zipArchive.saveInternal('', true).then(function (blob) {\n resolve(blob);\n });\n });\n };\n ZipArchive.prototype.saveInternal = function (fileName, skipFileSave) {\n var _this = this;\n var zipArchive = this;\n var promise;\n return promise = new Promise(function (resolve, reject) {\n var zipData = [];\n var dirLength = 0;\n for (var i = 0; i < zipArchive.files.length; i++) {\n var compressedObject = _this.getCompressedData(_this.files[i]);\n compressedObject.then(function (data) {\n dirLength = zipArchive.constructZippedObject(zipData, data, dirLength, data.isDirectory);\n if (zipData.length === zipArchive.files.length) {\n var blob = zipArchive.writeZippedContent(fileName, zipData, dirLength, skipFileSave);\n resolve(blob);\n }\n });\n }\n });\n };\n /**\n * release allocated un-managed resource\n * @returns {void}\n */\n ZipArchive.prototype.destroy = function () {\n if (this.files !== undefined && this.files.length > 0) {\n for (var i = 0; i < this.files.length; i++) {\n var file = this.files[i];\n if (file instanceof ZipArchiveItem) {\n file.destroy();\n }\n file = undefined;\n }\n this.files = [];\n }\n this.files = undefined;\n this.level = undefined;\n };\n ZipArchive.prototype.getCompressedData = function (item) {\n var zipArchive = this;\n var promise = new Promise(function (resolve, reject) {\n if (item instanceof ZipArchiveItem) {\n var reader_1 = new FileReader();\n reader_1.onload = function () {\n var input = new Uint8Array(reader_1.result);\n var data = {\n fileName: item.name, crc32Value: 0, compressedData: [],\n compressedSize: undefined, uncompressedDataSize: input.length, compressionType: undefined,\n isDirectory: false\n };\n if (zipArchive.level === 'Normal') {\n zipArchive.compressData(input, data, crc32Table);\n var length_1 = 0;\n for (var i = 0; i < data.compressedData.length; i++) {\n length_1 += data.compressedData[i].length;\n }\n data.compressedSize = length_1;\n data.compressionType = '\\x08\\x00'; //Deflated = 8\n }\n else {\n data.compressedSize = input.length;\n data.crc32Value = zipArchive.calculateCrc32Value(0, input, crc32Table);\n data.compressionType = '\\x00\\x00'; // Stored = 0\n data.compressedData.push(input);\n }\n resolve(data);\n };\n reader_1.readAsArrayBuffer(item.data);\n }\n else {\n var data = {\n fileName: item, crc32Value: 0, compressedData: '', compressedSize: 0, uncompressedDataSize: 0,\n compressionType: '\\x00\\x00', isDirectory: true\n };\n resolve(data);\n }\n });\n return promise;\n };\n ZipArchive.prototype.compressData = function (input, data, crc32Table) {\n var compressor = new CompressedStreamWriter(true);\n var currentIndex = 0;\n var nextIndex = 0;\n do {\n if (currentIndex >= input.length) {\n compressor.close();\n break;\n }\n nextIndex = Math.min(input.length, currentIndex + 16384);\n var subArray = input.subarray(currentIndex, nextIndex);\n data.crc32Value = this.calculateCrc32Value(data.crc32Value, subArray, crc32Table);\n compressor.write(subArray, 0, nextIndex - currentIndex);\n currentIndex = nextIndex;\n } while (currentIndex <= input.length);\n data.compressedData = compressor.compressedData;\n compressor.destroy();\n };\n ZipArchive.prototype.constructZippedObject = function (zipParts, data, dirLength, isDirectory) {\n var extFileAttr = 0;\n var date = new Date();\n if (isDirectory) {\n extFileAttr = extFileAttr | 0x00010; // directory flag\n }\n extFileAttr = extFileAttr | (0 & 0x3F);\n var header = this.writeHeader(data, date);\n var localHeader = 'PK\\x03\\x04' + header + data.fileName;\n var centralDir = this.writeCentralDirectory(data, header, dirLength, extFileAttr);\n zipParts.push({ localHeader: localHeader, centralDir: centralDir, compressedData: data });\n return dirLength + localHeader.length + data.compressedSize;\n };\n ZipArchive.prototype.writeHeader = function (data, date) {\n var zipHeader = '';\n zipHeader += '\\x0A\\x00' + '\\x00\\x00'; // version needed to extract & general purpose bit flag\n zipHeader += data.compressionType; // compression method Deflate=8,Stored=0\n zipHeader += this.getBytes(this.getModifiedTime(date), 2); // last modified Time\n zipHeader += this.getBytes(this.getModifiedDate(date), 2); // last modified date\n zipHeader += this.getBytes(data.crc32Value, 4); // crc-32 value\n zipHeader += this.getBytes(data.compressedSize, 4); // compressed file size\n zipHeader += this.getBytes(data.uncompressedDataSize, 4); // uncompressed file size\n zipHeader += this.getBytes(data.fileName.length, 2); // file name length\n zipHeader += this.getBytes(0, 2); // extra field length\n return zipHeader;\n };\n ZipArchive.prototype.writeZippedContent = function (fileName, zipData, localDirLen, skipFileSave) {\n var cenDirLen = 0;\n var buffer = [];\n for (var i = 0; i < zipData.length; i++) {\n var item = zipData[i];\n cenDirLen += item.centralDir.length;\n buffer.push(this.getArrayBuffer(item.localHeader));\n while (item.compressedData.compressedData.length) {\n buffer.push(item.compressedData.compressedData.shift().buffer);\n }\n }\n for (var i = 0; i < zipData.length; i++) {\n buffer.push(this.getArrayBuffer(zipData[i].centralDir));\n }\n buffer.push(this.getArrayBuffer(this.writeFooter(zipData, cenDirLen, localDirLen)));\n var blob = new Blob(buffer, { type: 'application/zip' });\n if (!skipFileSave) {\n Save.save(fileName, blob);\n }\n return blob;\n };\n ZipArchive.prototype.writeCentralDirectory = function (data, localHeader, offset, externalFileAttribute) {\n var directoryHeader = 'PK\\x01\\x02' +\n this.getBytes(0x0014, 2) + localHeader + // inherit from file header\n this.getBytes(0, 2) + // comment length\n '\\x00\\x00' + '\\x00\\x00' + // internal file attributes \n this.getBytes(externalFileAttribute, 4) + // external file attributes\n this.getBytes(offset, 4) + // local fileHeader relative offset\n data.fileName;\n return directoryHeader;\n };\n ZipArchive.prototype.writeFooter = function (zipData, centralLength, localLength) {\n var dirEnd = 'PK\\x05\\x06' + '\\x00\\x00' + '\\x00\\x00' +\n this.getBytes(zipData.length, 2) + this.getBytes(zipData.length, 2) +\n this.getBytes(centralLength, 4) + this.getBytes(localLength, 4) +\n this.getBytes(0, 2);\n return dirEnd;\n };\n ZipArchive.prototype.getArrayBuffer = function (input) {\n var a = new Uint8Array(input.length);\n for (var j = 0; j < input.length; ++j) {\n a[j] = input.charCodeAt(j) & 0xFF;\n }\n return a.buffer;\n };\n ZipArchive.prototype.getBytes = function (value, offset) {\n var bytes = '';\n for (var i = 0; i < offset; i++) {\n bytes += String.fromCharCode(value & 0xff);\n value = value >>> 8;\n }\n return bytes;\n };\n ZipArchive.prototype.getModifiedTime = function (date) {\n var modTime = date.getHours();\n modTime = modTime << 6;\n modTime = modTime | date.getMinutes();\n modTime = modTime << 5;\n return modTime = modTime | date.getSeconds() / 2;\n };\n ZipArchive.prototype.getModifiedDate = function (date) {\n var modiDate = date.getFullYear() - 1980;\n modiDate = modiDate << 4;\n modiDate = modiDate | (date.getMonth() + 1);\n modiDate = modiDate << 5;\n return modiDate = modiDate | date.getDate();\n };\n ZipArchive.prototype.calculateCrc32Value = function (crc32Value, input, crc32Table) {\n crc32Value ^= -1;\n for (var i = 0; i < input.length; i++) {\n crc32Value = (crc32Value >>> 8) ^ crc32Table[(crc32Value ^ input[i]) & 0xFF];\n }\n return (crc32Value ^ (-1));\n };\n return ZipArchive;\n}());\nexport { ZipArchive };\n/**\n * Class represent unique ZipArchive item\n * ```typescript\n * let archiveItem = new ZipArchiveItem(archive, 'directoryName\\fileName.txt');\n * ```\n */\nvar ZipArchiveItem = /** @class */ (function () {\n /**\n * constructor for creating {ZipArchiveItem} instance\n * @param {Blob|ArrayBuffer} data file data\n * @param {itemName} itemName absolute file path\n */\n function ZipArchiveItem(data, itemName) {\n if (data === null || data === undefined) {\n throw new Error('ArgumentException: data cannot be null or undefined');\n }\n if (itemName === null || itemName === undefined) {\n throw new Error('ArgumentException: string cannot be null or undefined');\n }\n if (itemName.length === 0) {\n throw new Error('string cannot be empty');\n }\n this.data = data;\n this.name = itemName;\n }\n Object.defineProperty(ZipArchiveItem.prototype, \"name\", {\n /**\n * Get the name of archive item\n * @returns string\n */\n get: function () {\n return this.fileName;\n },\n /**\n * Set the name of archive item\n * @param {string} value\n */\n set: function (value) {\n this.fileName = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * release allocated un-managed resource\n * @returns {void}\n */\n ZipArchiveItem.prototype.destroy = function () {\n this.fileName = undefined;\n this.data = undefined;\n };\n return ZipArchiveItem;\n}());\nexport { ZipArchiveItem };\n/**\n * construct cyclic redundancy code table\n */\n(function () {\n var i;\n for (var j = 0; j < 256; j++) {\n i = j;\n for (var k = 0; k < 8; k++) {\n i = ((i & 1) ? (0xEDB88320 ^ (i >>> 1)) : (i >>> 1));\n }\n crc32Table[j] = i;\n }\n})();\n","/**\n * Dictionary.ts class for EJ2-PDF\n * @private\n * @hidden\n */\nimport { defaultToString } from './utils';\n/**\n * @private\n * @hidden\n */\nvar Dictionary = /** @class */ (function () {\n /**\n * @private\n * @hidden\n */\n function Dictionary(toStringFunction) {\n this.table = {};\n this.nElements = 0;\n this.toStr = toStringFunction || defaultToString;\n }\n /**\n * @private\n * @hidden\n */\n Dictionary.prototype.getValue = function (key) {\n var pair = this.table['$' + this.toStr(key)];\n if (typeof pair === 'undefined') {\n return undefined;\n }\n return pair.value;\n };\n /**\n * @private\n * @hidden\n */\n Dictionary.prototype.setValue = function (key, value) {\n // if (typeof key === 'undefined' || typeof value === 'undefined') {\n // return undefined;\n // }\n var ret;\n var k = '$' + this.toStr(key);\n var previousElement = this.table[k];\n // if (typeof previousElement === 'undefined') {\n this.nElements++;\n ret = undefined;\n // }\n this.table[k] = {\n key: key,\n value: value\n };\n return ret;\n };\n /**\n * @private\n * @hidden\n */\n Dictionary.prototype.remove = function (key) {\n var k = '$' + this.toStr(key);\n var previousElement = this.table[k];\n // if (typeof previousElement !== 'undefined') {\n delete this.table[k];\n this.nElements--;\n return previousElement.value;\n // }\n // return undefined;\n };\n /**\n * @private\n * @hidden\n */\n Dictionary.prototype.keys = function () {\n var keysArray = [];\n var namesOfKeys = Object.keys(this.table);\n for (var index1 = 0; index1 < namesOfKeys.length; index1++) {\n // if (Object.prototype.hasOwnProperty.call(this.table, namesOfKeys[index1])) {\n var pair1 = this.table[namesOfKeys[index1]];\n keysArray.push(pair1.key);\n // }\n }\n return keysArray;\n };\n /**\n * @private\n * @hidden\n */\n Dictionary.prototype.values = function () {\n var valuesArray = [];\n var namesOfValues = Object.keys(this.table);\n for (var index2 = 0; index2 < namesOfValues.length; index2++) {\n // if (Object.prototype.hasOwnProperty.call(this.table, namesOfValues[index2])) {\n var pair2 = this.table[namesOfValues[index2]];\n valuesArray.push(pair2.value);\n // }\n }\n return valuesArray;\n };\n /**\n * @private\n * @hidden\n */\n Dictionary.prototype.containsKey = function (key) {\n var retutnValue = true;\n if (typeof this.getValue(key) === 'undefined') {\n retutnValue = true;\n }\n else {\n retutnValue = false;\n }\n return !retutnValue;\n };\n /**\n * @private\n * @hidden\n */\n Dictionary.prototype.clear = function () {\n this.table = {};\n this.nElements = 0;\n };\n /**\n * @private\n * @hidden\n */\n Dictionary.prototype.size = function () {\n return this.nElements;\n };\n return Dictionary;\n}()); // End of dictionary\nexport { Dictionary };\n","/**\n * `PdfString` class is used to perform string related primitive operations.\n * @private\n */\nexport var InternalEnum;\n(function (InternalEnum) {\n //Internals\n /**\n * public Enum for `ForceEncoding`.\n * @private\n */\n var ForceEncoding;\n (function (ForceEncoding) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n ForceEncoding[ForceEncoding[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `Ascii`.\n * @private\n */\n ForceEncoding[ForceEncoding[\"Ascii\"] = 1] = \"Ascii\";\n /**\n * Specifies the type of `Unicode`.\n * @private\n */\n ForceEncoding[ForceEncoding[\"Unicode\"] = 2] = \"Unicode\";\n })(ForceEncoding = InternalEnum.ForceEncoding || (InternalEnum.ForceEncoding = {}));\n /**\n * public Enum for `SourceType`.\n * @private\n */\n var SourceType;\n (function (SourceType) {\n /**\n * Specifies the type of `StringValue`.\n * @private\n */\n SourceType[SourceType[\"StringValue\"] = 0] = \"StringValue\";\n /**\n * Specifies the type of `ByteBuffer`.\n * @private\n */\n SourceType[SourceType[\"ByteBuffer\"] = 1] = \"ByteBuffer\";\n })(SourceType || (SourceType = {}));\n})(InternalEnum || (InternalEnum = {}));\nvar PdfString = /** @class */ (function () {\n function PdfString(value) {\n /**\n * Value indicating whether the string was converted to hex.\n * @default false\n * @private\n */\n this.bHex = false;\n /**\n * Internal variable to store the `position`.\n * @default -1\n * @private\n */\n this.position1 = -1;\n /**\n * Internal variable to hold `cloned object`.\n * @default null\n * @private\n */\n this.clonedObject1 = null;\n /**\n * `Shows` if the data of the stream was decrypted.\n * @default false\n * @private\n */\n this.bDecrypted = false;\n /**\n * Shows if the data of the stream `was decrypted`.\n * @default false\n * @private\n */\n this.isParentDecrypted = false;\n /**\n * Gets a value indicating whether the object is `packed or not`.\n * @default false\n * @private\n */\n this.isPacked = false;\n /**\n * @hidden\n * @private\n */\n this.isFormField = false;\n /**\n * @hidden\n * @private\n */\n this.isColorSpace = false;\n /**\n * @hidden\n * @private\n */\n this.isHexString = true;\n if (typeof value === 'undefined') {\n this.bHex = false;\n }\n else {\n if (!(value.length > 0 && value[0] === '0xfeff')) {\n this.stringValue = value;\n this.data = [];\n for (var i = 0; i < value.length; ++i) {\n this.data.push(value.charCodeAt(i));\n }\n }\n }\n }\n Object.defineProperty(PdfString.prototype, \"hex\", {\n //Property\n /**\n * Gets a value indicating whether string is in `hex`.\n * @private\n */\n get: function () {\n return this.bHex;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfString.prototype, \"value\", {\n /**\n * Gets or sets string `value` of the object.\n * @private\n */\n get: function () {\n return this.stringValue;\n },\n set: function (value) {\n this.stringValue = value;\n this.data = null;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfString.prototype, \"status\", {\n /**\n * Gets or sets the `Status` of the specified object.\n * @private\n */\n get: function () {\n return this.status1;\n },\n set: function (value) {\n this.status1 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfString.prototype, \"isSaving\", {\n /**\n * Gets or sets a value indicating whether this document `is saving` or not.\n * @private\n */\n get: function () {\n return this.isSaving1;\n },\n set: function (value) {\n this.isSaving1 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfString.prototype, \"objectCollectionIndex\", {\n /**\n * Gets or sets the `index` value of the specified object.\n * @private\n */\n get: function () {\n return this.index1;\n },\n set: function (value) {\n this.index1 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfString.prototype, \"clonedObject\", {\n /**\n * Returns `cloned object`.\n * @private\n */\n get: function () {\n return this.clonedObject1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfString.prototype, \"position\", {\n /**\n * Gets or sets the `position` of the object.\n * @private\n */\n get: function () {\n return this.position1;\n },\n set: function (value) {\n this.position1 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfString.prototype, \"CrossTable\", {\n /**\n * Returns `PdfCrossTable` associated with the object.\n * @private\n */\n get: function () {\n return this.crossTable;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfString.prototype, \"converted\", {\n /**\n * Gets a value indicating whether to check if the value has unicode characters.\n * @private\n */\n get: function () {\n return this.bConverted;\n },\n /**\n * sets a value indicating whether to check if the value has unicode characters.\n * @private\n */\n set: function (value) {\n this.bConverted = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfString.prototype, \"encode\", {\n /**\n * Gets value indicating whether we should convert data to Unicode.\n */\n get: function () {\n return this.bForceEncoding;\n },\n set: function (value) {\n this.bForceEncoding = value;\n },\n enumerable: true,\n configurable: true\n });\n //Methods\n /**\n * Converts `bytes to string using hex format` for representing string.\n * @private\n */\n PdfString.bytesToHex = function (bytes) {\n if (bytes == null) {\n return '';\n }\n var builder = '';\n return builder;\n };\n /**\n * `Saves` the object using the specified writer.\n * @private\n */\n PdfString.prototype.save = function (writer) {\n if (writer === null) {\n throw new Error('ArgumentNullException : writer');\n }\n if (this.encode !== undefined && this.encode === InternalEnum.ForceEncoding.Ascii) {\n writer.write(this.pdfEncode());\n }\n else {\n writer.write(PdfString.stringMark[0] + this.value + PdfString.stringMark[1]);\n }\n };\n PdfString.prototype.pdfEncode = function () {\n var result = '';\n if (this.encode !== undefined && this.encode === InternalEnum.ForceEncoding.Ascii) {\n var data = this.escapeSymbols(this.value);\n for (var i = 0; i < data.length; i++) {\n result += String.fromCharCode(data[i]);\n }\n result = PdfString.stringMark[0] + result + PdfString.stringMark[1];\n }\n else {\n result = this.value;\n }\n return result;\n };\n PdfString.prototype.escapeSymbols = function (value) {\n var data = [];\n for (var i = 0; i < value.length; i++) {\n var currentData = value.charCodeAt(i);\n switch (currentData) {\n case 40:\n case 41:\n data.push(92);\n data.push(currentData);\n break;\n case 13:\n data.push(92);\n data.push(114);\n break;\n case 92:\n data.push(92);\n data.push(currentData);\n break;\n default:\n data.push(currentData);\n break;\n }\n }\n return data;\n };\n /**\n * Creates a `copy of PdfString`.\n * @private\n */\n PdfString.prototype.clone = function (crossTable) {\n if (this.clonedObject1 !== null && this.clonedObject1.CrossTable === crossTable) {\n return this.clonedObject1;\n }\n else {\n this.clonedObject1 = null;\n }\n var newString = new PdfString(this.stringValue);\n newString.bHex = this.bHex;\n newString.crossTable = crossTable;\n newString.isColorSpace = this.isColorSpace;\n this.clonedObject1 = newString;\n return newString;\n };\n /**\n * Converts string to array of unicode symbols.\n */\n PdfString.toUnicodeArray = function (value, bAddPrefix) {\n if (value == null) {\n throw new Error('Argument Null Exception : value');\n }\n var startIndex = 0;\n var output = [];\n for (var i = 0; i < value.length; i++) {\n output.push(0);\n output.push(value.charCodeAt(i));\n }\n return output;\n };\n /**\n * Converts byte data to string.\n */\n PdfString.byteToString = function (data) {\n if (data == null) {\n throw new Error('Argument Null Exception : stream');\n }\n var result = '';\n for (var i = 0; i < data.length; ++i) {\n result += String.fromCharCode(data[i]);\n }\n return result;\n };\n //constants = ;\n /**\n * `General markers` for string.\n * @private\n */\n PdfString.stringMark = '()';\n /**\n * `Hex markers` for string.\n * @private\n */\n PdfString.hexStringMark = '<>';\n /**\n * Format of password data.\n * @private\n */\n PdfString.hexFormatPattern = '{0:X2}';\n return PdfString;\n}());\nexport { PdfString };\n","/**\n * `PdfName` class is used to perform name (element names) related primitive operations.\n * @private\n */\nvar PdfName = /** @class */ (function () {\n function PdfName(value) {\n /**\n * `Start symbol` of the name object.\n * @default /\n * @private\n */\n this.stringStartMark = '/';\n /**\n * `Value` of the element.\n * @private\n */\n this.internalValue = '';\n /**\n * Indicates if the object is currently in `saving state or not`.\n * @default false\n * @private\n */\n this.isSaving6 = false;\n /**\n * Internal variable to store the `position`.\n * @default -1\n * @private\n */\n this.position6 = -1;\n this.internalValue = this.normalizeValue(value);\n }\n Object.defineProperty(PdfName.prototype, \"status\", {\n //property\n /**\n * Gets or sets the `Status` of the specified object.\n * @private\n */\n get: function () {\n return this.status6;\n },\n set: function (value) {\n this.status6 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfName.prototype, \"isSaving\", {\n /**\n * Gets or sets a value indicating whether this document `is saving` or not.\n * @private\n */\n get: function () {\n return this.isSaving6;\n },\n set: function (value) {\n this.isSaving6 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfName.prototype, \"objectCollectionIndex\", {\n /**\n * Gets or sets the `index` value of the specified object.\n * @private\n */\n get: function () {\n return this.index6;\n },\n set: function (value) {\n this.index6 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfName.prototype, \"position\", {\n /**\n * Gets or sets the `position` of the object.\n * @private\n */\n get: function () {\n return this.position6;\n },\n set: function (value) {\n this.position6 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfName.prototype, \"clonedObject\", {\n /**\n * Returns `cloned object`.\n * @private\n */\n get: function () {\n return null;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfName.prototype, \"value\", {\n /**\n * Gets or sets the `value` of the object.\n * @private\n */\n get: function () {\n return this.internalValue;\n },\n set: function (value) {\n // if (value !== this.value) {\n var val = value;\n if (value !== null && value.length > 0) {\n // val = (value.substring(0, 1) === this.stringStartMark) ? value.substring(1) : value;\n val = value;\n this.internalValue = this.normalizeValue(val);\n }\n else {\n this.internalValue = val;\n }\n // }\n },\n enumerable: true,\n configurable: true\n });\n //public methods\n /**\n * `Saves` the name using the specified writer.\n * @private\n */\n PdfName.prototype.save = function (writer) {\n // if (writer === null) {\n // throw new Error('ArgumentNullException : writer');\n // }\n writer.write(this.toString());\n };\n /**\n * Gets `string` representation of the primitive.\n * @private\n */\n PdfName.prototype.toString = function () {\n return (this.stringStartMark + this.escapeString(this.value));\n };\n /**\n * Creates a `copy of PdfName`.\n * @private\n */\n PdfName.prototype.clone = function (crossTable) {\n var newName = new PdfName();\n newName.value = this.internalValue;\n return newName;\n };\n /**\n * Replace some characters with its `escape sequences`.\n * @private\n */\n PdfName.prototype.escapeString = function (stringValue) {\n // if (str === null) {\n // throw new Error('ArgumentNullException : str');\n // }\n // if (str === '') {\n // return str;\n // }\n var result = '';\n var len = 0;\n for (var i = 0, len_1 = stringValue.length; i < len_1; i++) {\n var ch = stringValue[i];\n var index = PdfName.delimiters.indexOf(ch);\n // switch (ch) {\n // case '\\r' :\n // result = result + '\\\\r';\n // break;\n // case '\\n' :\n // result = result + '\\n';\n // break;\n // case '(' :\n // case ')' :\n // case '\\\\' :\n // //result.Append( '\\\\' ).Append( ch );\n // result = result + ch;\n // break;\n // default :\n // result = result + ch;\n // break;\n // }\n result = result + ch;\n }\n return result;\n };\n //methiods\n /**\n * Replace a symbol with its code with the precedence of the `sharp sign`.\n * @private\n */\n PdfName.prototype.normalizeValue = function (value, c) {\n // if (typeof c === undefined) {\n // let str : string = value;\n // for (let i : number = 0; i < PdfName.replacements.length; i++) {\n // str = this.normalizeValue(str, c);\n // }\n // return str;\n // } else {\n var strFormat = '#{0:X}';\n //return value.replace(c.toString(),String.format(strFormat,c));\n return value;\n // }\n };\n /**\n * PDF `special characters`.\n * @private\n */\n PdfName.delimiters = '()<>[]{}/%}';\n /**\n * The symbols that are not allowed in PDF names and `should be replaced`.\n * @private\n */\n PdfName.replacements = [' ', '\\t', '\\n', '\\r'];\n return PdfName;\n}());\nexport { PdfName };\n","/**\n * PdfOperators.ts class for EJ2-PDF\n * Class of string PDF common operators.\n * @private\n */\nvar Operators = /** @class */ (function () {\n /**\n * Create an instance of `PdfOperator` class.\n * @private\n */\n function Operators() {\n /**\n * Specifies the value of `test`.\n * @private\n */\n this.forTest = 'test';\n this.forTest = Operators.obj;\n }\n /**\n * Specifies the value of `obj`.\n * @private\n */\n Operators.obj = 'obj';\n /**\n * Specifies the value of `endObj`.\n * @private\n */\n Operators.endObj = 'endobj';\n /**\n * Specifies the value of `R`.\n * @private\n */\n Operators.r = 'R';\n /**\n * Specifies the value of ` `.\n * @private\n */\n Operators.whiteSpace = ' ';\n /**\n * Specifies the value of `/`.\n * @private\n */\n Operators.slash = '/';\n /**\n * Specifies the value of `\\r\\n`.\n * @private\n */\n Operators.newLine = '\\r\\n';\n /**\n * Specifies the value of `stream`.\n * @private\n */\n Operators.stream = 'stream';\n /**\n * Specifies the value of `endStream`.\n * @private\n */\n Operators.endStream = 'endstream';\n /**\n * Specifies the value of `xref`.\n * @private\n */\n Operators.xref = 'xref';\n /**\n * Specifies the value of `f`.\n * @private\n */\n Operators.f = 'f';\n /**\n * Specifies the value of `n`.\n * @private\n */\n Operators.n = 'n';\n /**\n * Specifies the value of `trailer`.\n * @private\n */\n Operators.trailer = 'trailer';\n /**\n * Specifies the value of `startxref`.\n * @private\n */\n Operators.startxref = 'startxref';\n /**\n * Specifies the value of `eof`.\n * @private\n */\n Operators.eof = '%%EOF';\n /**\n * Specifies the value of `header`.\n * @private\n */\n Operators.header = '%PDF-1.5';\n /**\n * Specifies the value of `beginText`.\n * @private\n */\n Operators.beginText = 'BT';\n /**\n * Specifies the value of `endText`.\n * @private\n */\n Operators.endText = 'ET';\n /**\n * Specifies the value of `m`.\n * @private\n */\n Operators.beginPath = 'm';\n /**\n * Specifies the value of `l`.\n * @private\n */\n Operators.appendLineSegment = 'l';\n /**\n * Specifies the value of `S`.\n * @private\n */\n Operators.stroke = 'S';\n /**\n * Specifies the value of `f`.\n * @private\n */\n Operators.fill = 'f';\n /**\n * Specifies the value of `f*`.\n * @private\n */\n Operators.fillEvenOdd = 'f*';\n /**\n * Specifies the value of `B`.\n * @private\n */\n Operators.fillStroke = 'B';\n /**\n * Specifies the value of `B*`.\n * @private\n */\n Operators.fillStrokeEvenOdd = 'B*';\n /**\n * Specifies the value of `c`.\n * @private\n */\n Operators.appendbeziercurve = 'c';\n /**\n * Specifies the value of `re`.\n * @private\n */\n Operators.appendRectangle = 're';\n /**\n * Specifies the value of `q`.\n * @private\n */\n Operators.saveState = 'q';\n /**\n * Specifies the value of `Q`.\n * @private\n */\n Operators.restoreState = 'Q';\n /**\n * Specifies the value of `Do`.\n * @private\n */\n Operators.paintXObject = 'Do';\n /**\n * Specifies the value of `cm`.\n * @private\n */\n Operators.modifyCtm = 'cm';\n /**\n * Specifies the value of `Tm`.\n * @private\n */\n Operators.modifyTM = 'Tm';\n /**\n * Specifies the value of `w`.\n * @private\n */\n Operators.setLineWidth = 'w';\n /**\n * Specifies the value of `J`.\n * @private\n */\n Operators.setLineCapStyle = 'J';\n /**\n * Specifies the value of `j`.\n * @private\n */\n Operators.setLineJoinStyle = 'j';\n /**\n * Specifies the value of `d`.\n * @private\n */\n Operators.setDashPattern = 'd';\n /**\n * Specifies the value of `i`.\n * @private\n */\n Operators.setFlatnessTolerance = 'i';\n /**\n * Specifies the value of `h`.\n * @private\n */\n Operators.closePath = 'h';\n /**\n * Specifies the value of `s`.\n * @private\n */\n Operators.closeStrokePath = 's';\n /**\n * Specifies the value of `b`.\n * @private\n */\n Operators.closeFillStrokePath = 'b';\n /**\n * Specifies the value of `setCharacterSpace`.\n * @private\n */\n Operators.setCharacterSpace = 'Tc';\n /**\n * Specifies the value of `setWordSpace`.\n * @private\n */\n Operators.setWordSpace = 'Tw';\n /**\n * Specifies the value of `setHorizontalScaling`.\n * @private\n */\n Operators.setHorizontalScaling = 'Tz';\n /**\n * Specifies the value of `setTextLeading`.\n * @private\n */\n Operators.setTextLeading = 'TL';\n /**\n * Specifies the value of `setFont`.\n * @private\n */\n Operators.setFont = 'Tf';\n /**\n * Specifies the value of `setRenderingMode`.\n * @private\n */\n Operators.setRenderingMode = 'Tr';\n /**\n * Specifies the value of `setTextRise`.\n * @private\n */\n Operators.setTextRise = 'Ts';\n /**\n * Specifies the value of `setTextScaling`.\n * @private\n */\n Operators.setTextScaling = 'Tz';\n /**\n * Specifies the value of `setCoords`.\n * @private\n */\n Operators.setCoords = 'Td';\n /**\n * Specifies the value of `goToNextLine`.\n * @private\n */\n Operators.goToNextLine = 'T*';\n /**\n * Specifies the value of `setText`.\n * @private\n */\n Operators.setText = 'Tj';\n /**\n * Specifies the value of `setTextWithFormatting`.\n * @private\n */\n Operators.setTextWithFormatting = 'TJ';\n /**\n * Specifies the value of `setTextOnNewLine`.\n * @private\n */\n Operators.setTextOnNewLine = '\\'';\n /**\n * Specifies the value of `selectcolorspaceforstroking`.\n * @private\n */\n Operators.selectcolorspaceforstroking = 'CS';\n /**\n * Specifies the value of `selectcolorspacefornonstroking`.\n * @private\n */\n Operators.selectcolorspacefornonstroking = 'cs';\n /**\n * Specifies the value of `setrbgcolorforstroking`.\n * @private\n */\n Operators.setrbgcolorforstroking = 'RG';\n /**\n * Specifies the value of `setrbgcolorfornonstroking`.\n * @private\n */\n Operators.setrbgcolorfornonstroking = 'rg';\n /**\n * Specifies the value of `K`.\n * @private\n */\n Operators.setcmykcolorforstroking = 'K';\n /**\n * Specifies the value of `k`.\n * @private\n */\n Operators.setcmykcolorfornonstroking = 'k';\n /**\n * Specifies the value of `G`.\n * @private\n */\n Operators.setgraycolorforstroking = 'G';\n /**\n * Specifies the value of `g`.\n * @private\n */\n Operators.setgraycolorfornonstroking = 'g';\n /**\n * Specifies the value of `W`.\n * @private\n */\n Operators.clipPath = 'W';\n /**\n * Specifies the value of `clipPathEvenOdd`.\n * @private\n */\n Operators.clipPathEvenOdd = 'W*';\n /**\n * Specifies the value of `n`.\n * @private\n */\n Operators.endPath = 'n';\n /**\n * Specifies the value of `setGraphicsState`.\n * @private\n */\n Operators.setGraphicsState = 'gs';\n /**\n * Specifies the value of `%`.\n * @private\n */\n Operators.comment = '%';\n /**\n * Specifies the value of `*`.\n * @private\n */\n Operators.evenOdd = '*';\n /**\n * Specifies the value of `M`.\n * @private\n */\n Operators.setMiterLimit = 'M';\n return Operators;\n}());\nexport { Operators };\n","/**\n * dictionaryProperties.ts class for EJ2-PDF\n * PDF dictionary properties.\n * @private\n */\nvar DictionaryProperties = /** @class */ (function () {\n /**\n * Initialize an instance for `PdfDictionaryProperties` class.\n * @private\n */\n function DictionaryProperties() {\n /**\n * Specifies the value of `Pages`.\n * @private\n */\n this.pages = 'Pages';\n /**\n * Specifies the value of `Kids`.\n * @private\n */\n this.kids = 'Kids';\n /**\n * Specifies the value of `Count`.\n * @private\n */\n this.count = 'Count';\n /**\n * Specifies the value of `Resources`.\n * @private\n */\n this.resources = 'Resources';\n /**\n * Specifies the value of `Type`.\n * @private\n */\n this.type = 'Type';\n /**\n * Specifies the value of `Size`.\n * @private\n */\n this.size = 'Size';\n /**\n * Specifies the value of `MediaBox`.\n * @private\n */\n this.mediaBox = 'MediaBox';\n /**\n * Specifies the value of `Parent`.\n * @private\n */\n this.parent = 'Parent';\n /**\n * Specifies the value of `Root`.\n * @private\n */\n this.root = 'Root';\n /**\n * Specifies the value of `DecodeParms`.\n * @private\n */\n this.decodeParms = 'DecodeParms';\n /**\n * Specifies the value of `Filter`.\n * @private\n */\n this.filter = 'Filter';\n /**\n * Specifies the value of `Font`.\n * @private\n */\n this.font = 'Font';\n /**\n * Specifies the value of `Type1`.\n * @private\n */\n this.type1 = 'Type1';\n /**\n * Specifies the value of `BaseFont`.\n * @private\n */\n this.baseFont = 'BaseFont';\n /**\n * Specifies the value of `Encoding`.\n * @private\n */\n this.encoding = 'Encoding';\n /**\n * Specifies the value of `Subtype`.\n * @private\n */\n this.subtype = 'Subtype';\n /**\n * Specifies the value of `Contents`.\n * @private\n */\n this.contents = 'Contents';\n /**\n * Specifies the value of `ProcSet`.\n * @private\n */\n this.procset = 'ProcSet';\n /**\n * Specifies the value of `ColorSpace`.\n * @private\n */\n this.colorSpace = 'ColorSpace';\n /**\n * Specifies the value of `ExtGState`.\n * @private\n */\n this.extGState = 'ExtGState';\n /**\n * Specifies the value of `Pattern`.\n * @private\n */\n this.pattern = 'Pattern';\n /**\n * Specifies the value of `XObject`.\n * @private\n */\n this.xObject = 'XObject';\n /**\n * Specifies the value of `Length`.\n * @private\n */\n this.length = 'Length';\n /**\n * Specifies the value of `Width`.\n * @private\n */\n this.width = 'Width';\n /**\n * Specifies the value of `Height`.\n * @private\n */\n this.height = 'Height';\n /**\n * Specifies the value of `BitsPerComponent`.\n * @private\n */\n this.bitsPerComponent = 'BitsPerComponent';\n /**\n * Specifies the value of `Image`.\n * @private\n */\n this.image = 'Image';\n /**\n * Specifies the value of `dctdecode`.\n * @private\n */\n this.dctdecode = 'DCTDecode';\n /**\n * Specifies the value of `Columns`.\n * @private\n */\n this.columns = 'Columns';\n /**\n * Specifies the value of `BlackIs1`.\n * @private\n */\n this.blackIs1 = 'BlackIs1';\n /**\n * Specifies the value of `K`.\n * @private\n */\n this.k = 'K';\n /**\n * Specifies the value of `S`.\n * @private\n */\n this.s = 'S';\n /**\n * Specifies the value of `Predictor`.\n * @private\n */\n this.predictor = 'Predictor';\n /**\n * Specifies the value of `DeviceRGB`.\n * @private\n */\n this.deviceRgb = 'DeviceRGB';\n /**\n * Specifies the value of `Next`.\n * @private\n */\n this.next = 'Next';\n /**\n * Specifies the value of `Action`.\n * @private\n */\n this.action = 'Action';\n /**\n * Specifies the value of `Link`.\n * @private\n */\n this.link = 'Link';\n /**\n *\n * Specifies the value of `A`.\n * @private\n */\n this.a = 'A';\n /**\n * Specifies the value of `Annot`.\n * @private\n */\n this.annot = 'Annot';\n /**\n * Specifies the value of `P`.\n * @private\n */\n this.p = 'P';\n /**\n * Specifies the value of `C`.\n * @private\n */\n this.c = 'C';\n /**\n * Specifies the value of `Rect`.\n * @private\n */\n this.rect = 'Rect';\n /**\n * Specifies the value of `URI`.\n * @private\n */\n this.uri = 'URI';\n /**\n * Specifies the value of `Annots`.\n * @private\n */\n this.annots = 'Annots';\n /**\n * Specifies the value of `ca`.\n * @private\n */\n this.ca = 'ca';\n /**\n * Specifies the value of `CA`.\n * @private\n */\n this.CA = 'CA';\n /**\n * Specifies the value of `XYZ`.\n * @private\n */\n this.xyz = 'XYZ';\n /**\n * Specifies the value of `Fit`.\n * @private\n */\n this.fit = 'Fit';\n /**\n * Specifies the value of `Dest`.\n * @private\n */\n this.dest = 'Dest';\n /**\n * Specifies the value of `BM`.\n * @private\n */\n this.BM = 'BM';\n /**\n * Specifies the value of `flatedecode`.\n * @private\n */\n this.flatedecode = 'FlateDecode';\n /**\n * Specifies the value of `Rotate`.\n * @private\n */\n this.rotate = 'Rotate';\n /**\n * Specifies the value of 'bBox'.\n * @private\n */\n this.bBox = 'BBox';\n /**\n * Specifies the value of 'form'.\n * @private\n */\n this.form = 'Form';\n /**\n * Specifies the value of 'w'.\n * @private\n */\n this.w = 'W';\n /**\n * Specifies the value of 'cIDFontType2'.\n * @private\n */\n this.cIDFontType2 = 'CIDFontType2';\n /**\n * Specifies the value of 'cIDToGIDMap'.\n * @private\n */\n this.cIDToGIDMap = 'CIDToGIDMap';\n /**\n * Specifies the value of 'identity'.\n * @private\n */\n this.identity = 'Identity';\n /**\n * Specifies the value of 'dw'.\n * @private\n */\n this.dw = 'DW';\n /**\n * Specifies the value of 'fontDescriptor'.\n * @private\n */\n this.fontDescriptor = 'FontDescriptor';\n /**\n * Specifies the value of 'cIDSystemInfo'.\n * @private\n */\n this.cIDSystemInfo = 'CIDSystemInfo';\n /**\n * Specifies the value of 'fontName'.\n * @private\n */\n this.fontName = 'FontName';\n /**\n * Specifies the value of 'flags'.\n * @private\n */\n this.flags = 'Flags';\n /**\n * Specifies the value of 'fontBBox'.\n * @private\n */\n this.fontBBox = 'FontBBox';\n /**\n * Specifies the value of 'missingWidth'.\n * @private\n */\n this.missingWidth = 'MissingWidth';\n /**\n * Specifies the value of 'stemV'.\n * @private\n */\n this.stemV = 'StemV';\n /**\n * Specifies the value of 'italicAngle'.\n * @private\n */\n this.italicAngle = 'ItalicAngle';\n /**\n * Specifies the value of 'capHeight'.\n * @private\n */\n this.capHeight = 'CapHeight';\n /**\n * Specifies the value of 'ascent'.\n * @private\n */\n this.ascent = 'Ascent';\n /**\n * Specifies the value of 'descent'.\n * @private\n */\n this.descent = 'Descent';\n /**\n * Specifies the value of 'leading'.\n * @private\n */\n this.leading = 'Leading';\n /**\n * Specifies the value of 'avgWidth'.\n * @private\n */\n this.avgWidth = 'AvgWidth';\n /**\n * Specifies the value of 'fontFile2'.\n * @private\n */\n this.fontFile2 = 'FontFile2';\n /**\n * Specifies the value of 'maxWidth'.\n * @private\n */\n this.maxWidth = 'MaxWidth';\n /**\n * Specifies the value of 'xHeight'.\n * @private\n */\n this.xHeight = 'XHeight';\n /**\n * Specifies the value of 'stemH'.\n * @private\n */\n this.stemH = 'StemH';\n /**\n * Specifies the value of 'registry'.\n * @private\n */\n this.registry = 'Registry';\n /**\n * Specifies the value of 'ordering'.\n * @private\n */\n this.ordering = 'Ordering';\n /**\n * Specifies the value of 'supplement'.\n * @private\n */\n this.supplement = 'Supplement';\n /**\n * Specifies the value of 'type0'.\n * @private\n */\n this.type0 = 'Type0';\n /**\n * Specifies the value of 'identityH'.\n * @private\n */\n this.identityH = 'Identity-H';\n /**\n * Specifies the value of 'toUnicode'.\n * @private\n */\n this.toUnicode = 'ToUnicode';\n /**\n * Specifies the value of 'descendantFonts'.\n * @private\n */\n this.descendantFonts = 'DescendantFonts';\n //\n }\n return DictionaryProperties;\n}());\nexport { DictionaryProperties };\n","import { Dictionary } from './../collections/dictionary';\nimport { PdfName } from './pdf-name';\nimport { Operators } from './../input-output/pdf-operators';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\n/**\n * `PdfDictionary` class is used to perform primitive operations.\n * @private\n */\nvar PdfDictionary = /** @class */ (function () {\n function PdfDictionary(dictionary) {\n /**\n * Internal variable to store the `position`.\n * @default -1\n * @private\n */\n this.position7 = -1;\n /**\n * The `IPdfSavable` with the specified key.\n * @private\n */\n this.primitiveItems = new Dictionary();\n /**\n * `Start marker` for dictionary.\n * @private\n */\n this.prefix = '<<';\n /**\n * `End marker` for dictionary.\n * @private\n */\n this.suffix = '>>';\n /**\n * @hidden\n * @private\n */\n this.resources = [];\n /**\n * Internal variable to hold `cloned object`.\n * @default null\n * @private\n */\n this.object = null;\n /**\n * Flag for PDF file formar 1.5 is dictionary `archiving` needed.\n * @default true\n * @private\n */\n this.archive = true;\n /**\n * Represents the Font dictionary.\n * @hidden\n * @private\n */\n this.isFont = false;\n if (typeof dictionary === 'undefined') {\n this.primitiveItems = new Dictionary();\n this.encrypt = true;\n this.dictionaryProperties = new DictionaryProperties();\n }\n else {\n this.primitiveItems = new Dictionary();\n var keys = dictionary.items.keys();\n var values = dictionary.items.values();\n for (var index = 0; index < dictionary.items.size(); index++) {\n this.primitiveItems.setValue(keys[index], values[index]);\n }\n this.status = dictionary.status;\n this.freezeChanges(this);\n this.encrypt = true;\n this.dictionaryProperties = new DictionaryProperties();\n }\n }\n Object.defineProperty(PdfDictionary.prototype, \"items\", {\n //Properties\n /**\n * Gets or sets the `IPdfSavable` with the specified key.\n * @private\n */\n get: function () {\n return this.primitiveItems;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDictionary.prototype, \"status\", {\n /**\n * Gets or sets the `Status` of the specified object.\n * @private\n */\n get: function () {\n return this.status7;\n },\n set: function (value) {\n this.status7 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDictionary.prototype, \"isSaving\", {\n /**\n * Gets or sets a value indicating whether this document `is saving` or not.\n * @private\n */\n get: function () {\n return this.isSaving7;\n },\n set: function (value) {\n this.isSaving7 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDictionary.prototype, \"objectCollectionIndex\", {\n /**\n * Gets or sets the `index` value of the specified object.\n * @private\n */\n get: function () {\n return this.index7;\n },\n set: function (value) {\n this.index7 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDictionary.prototype, \"clonedObject\", {\n /**\n * Returns `cloned object`.\n * @private\n */\n get: function () {\n return this.object;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDictionary.prototype, \"position\", {\n /**\n * Gets or sets the `position` of the object.\n * @private\n */\n get: function () {\n return this.position7;\n },\n set: function (value) {\n this.position7 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDictionary.prototype, \"Count\", {\n /**\n * Gets the `count`.\n * @private\n */\n get: function () {\n return this.primitiveItems.size();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDictionary.prototype, \"Dictionary\", {\n /**\n * Collection of `items` in the object.\n * @private\n */\n get: function () {\n return this;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Get flag if need to `archive` dictionary.\n * @private\n */\n PdfDictionary.prototype.getArchive = function () {\n return this.archive;\n };\n /**\n * Set flag if need to `archive` dictionary.\n * @private\n */\n PdfDictionary.prototype.setArchive = function (value) {\n this.archive = value;\n };\n /**\n * Sets flag if `encryption` is needed.\n * @private\n */\n PdfDictionary.prototype.setEncrypt = function (value) {\n this.encrypt = value;\n this.modify();\n };\n /**\n * Gets flag if `encryption` is needed.\n * @private\n */\n PdfDictionary.prototype.getEncrypt = function () {\n return this.encrypt;\n };\n /**\n * `Freezes` the changes.\n * @private\n */\n PdfDictionary.prototype.freezeChanges = function (freezer) {\n this.bChanged = false;\n };\n /**\n * Creates a `copy of PdfDictionary`.\n * @private\n */\n PdfDictionary.prototype.clone = function (crossTable) {\n //Need to add more codings\n var newDict = new PdfDictionary();\n return newDict;\n };\n /**\n * `Mark` this instance modified.\n * @private\n */\n PdfDictionary.prototype.modify = function () {\n this.bChanged = true;\n };\n /**\n * `Removes` the specified key.\n * @private\n */\n PdfDictionary.prototype.remove = function (key) {\n if (typeof key !== 'string') {\n this.primitiveItems.remove(key.value);\n this.modify();\n }\n else {\n this.remove(new PdfName(key));\n }\n };\n /**\n * `Determines` whether the dictionary contains the key.\n * @private\n */\n PdfDictionary.prototype.containsKey = function (key) {\n var returnValue = false;\n returnValue = this.primitiveItems.containsKey(key.toString());\n return returnValue;\n };\n /**\n * Raises event `BeginSave`.\n * @private\n */\n PdfDictionary.prototype.onBeginSave = function () {\n this.beginSave.sender.beginSave();\n };\n /**\n * Raises event `Font Dictionary BeginSave`.\n * @private\n */\n PdfDictionary.prototype.onFontDictionaryBeginSave = function () {\n this.fontDictionaryBeginSave.sender.fontDictionaryBeginSave();\n };\n /**\n * Raises event `Descendant Font BeginSave`.\n * @private\n */\n PdfDictionary.prototype.onDescendantFontBeginSave = function () {\n this.descendantFontBeginSave.sender.descendantFontBeginSave();\n };\n /**\n * Raises event 'BeginSave'.\n * @private\n */\n PdfDictionary.prototype.onTemplateBeginSave = function () {\n this.pageBeginDrawTemplate.sender.pageBeginSave();\n };\n /**\n * Raises event `BeginSave`.\n * @private\n */\n PdfDictionary.prototype.onBeginAnnotationSave = function () {\n this.annotationBeginSave.sender.beginSave();\n };\n /**\n * Raises event `BeginSave`.\n * @private\n */\n PdfDictionary.prototype.onSectionBeginSave = function (writer) {\n var saveEvent = this.sectionBeginSave;\n saveEvent.sender.beginSave(saveEvent.state, writer);\n };\n PdfDictionary.prototype.save = function (writer, bRaiseEvent) {\n if (typeof bRaiseEvent === 'undefined') {\n this.save(writer, true);\n }\n else {\n writer.write(this.prefix);\n if (typeof this.beginSave !== 'undefined') {\n this.onBeginSave();\n }\n if (typeof this.descendantFontBeginSave !== 'undefined') {\n this.onDescendantFontBeginSave();\n }\n if (typeof this.fontDictionaryBeginSave !== 'undefined') {\n this.onFontDictionaryBeginSave();\n }\n if (typeof this.annotationBeginSave !== 'undefined') {\n this.onBeginAnnotationSave();\n }\n if (typeof this.sectionBeginSave !== 'undefined') {\n this.onSectionBeginSave(writer);\n }\n if (typeof this.pageBeginDrawTemplate !== 'undefined') {\n this.onTemplateBeginSave();\n }\n // }\n if (this.Count > 0) {\n this.saveItems(writer);\n }\n writer.write(this.suffix);\n writer.write(Operators.newLine);\n }\n };\n /**\n * `Save dictionary items`.\n * @private\n */\n PdfDictionary.prototype.saveItems = function (writer) {\n writer.write(Operators.newLine);\n var keys = this.primitiveItems.keys();\n var values = this.primitiveItems.values();\n for (var index = 0; index < keys.length; index++) {\n var key = keys[index];\n var name_1 = new PdfName(key);\n name_1.save(writer);\n writer.write(Operators.whiteSpace);\n var resources = values[index];\n resources.save(writer);\n writer.write(Operators.newLine);\n }\n };\n return PdfDictionary;\n}());\nexport { PdfDictionary };\nvar SaveSectionCollectionEventHandler = /** @class */ (function () {\n /**\n * New instance for `save section collection event handler` class.\n * @private\n */\n function SaveSectionCollectionEventHandler(sender) {\n this.sender = sender;\n }\n return SaveSectionCollectionEventHandler;\n}());\nexport { SaveSectionCollectionEventHandler };\nvar SaveDescendantFontEventHandler = /** @class */ (function () {\n /**\n * New instance for `save section collection event handler` class.\n * @private\n */\n function SaveDescendantFontEventHandler(sender) {\n this.sender = sender;\n }\n return SaveDescendantFontEventHandler;\n}());\nexport { SaveDescendantFontEventHandler };\nvar SaveFontDictionaryEventHandler = /** @class */ (function () {\n /**\n * New instance for `save section collection event handler` class.\n * @private\n */\n function SaveFontDictionaryEventHandler(sender) {\n this.sender = sender;\n }\n return SaveFontDictionaryEventHandler;\n}());\nexport { SaveFontDictionaryEventHandler };\nvar SaveAnnotationEventHandler = /** @class */ (function () {\n /**\n * New instance for `save annotation event handler` class.\n * @private\n */\n function SaveAnnotationEventHandler(sender) {\n this.sender = sender;\n }\n return SaveAnnotationEventHandler;\n}());\nexport { SaveAnnotationEventHandler };\nvar SaveSectionEventHandler = /** @class */ (function () {\n // constructors\n /**\n * New instance for `save section event handler` class.\n * @private\n */\n function SaveSectionEventHandler(sender, state) {\n this.sender = sender;\n this.state = state;\n }\n return SaveSectionEventHandler;\n}());\nexport { SaveSectionEventHandler };\n/**\n * SaveTemplateEventHandler class used to store information about template elements.\n * @private\n * @hidden\n */\nvar SaveTemplateEventHandler = /** @class */ (function () {\n /**\n * New instance for save section collection event handler class.\n * @public\n */\n function SaveTemplateEventHandler(sender) {\n this.sender = sender;\n }\n return SaveTemplateEventHandler;\n}());\nexport { SaveTemplateEventHandler };\n","/**\n * `PdfNumber` class is used to perform number related primitive operations.\n * @private\n */\nvar PdfNumber = /** @class */ (function () {\n /**\n * Initializes a new instance of the `PdfNumber` class.\n * @private\n */\n function PdfNumber(value) {\n /**\n * Sotres the `position`.\n * @default -1\n * @private\n */\n this.position5 = -1;\n this.value = value;\n }\n Object.defineProperty(PdfNumber.prototype, \"intValue\", {\n /**\n * Gets or sets the `integer` value.\n * @private\n */\n get: function () {\n return this.value;\n },\n set: function (value) {\n this.value = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfNumber.prototype, \"isInteger\", {\n /**\n * Gets or sets a value indicating whether this instance `is integer`.\n * @private\n */\n get: function () {\n return this.integer;\n },\n set: function (value) {\n this.integer = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfNumber.prototype, \"status\", {\n /**\n * Gets or sets the `Status` of the specified object.\n * @private\n */\n get: function () {\n return this.status5;\n },\n set: function (value) {\n this.status5 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfNumber.prototype, \"isSaving\", {\n /**\n * Gets or sets a value indicating whether this document `is saving` or not.\n * @private\n */\n get: function () {\n return this.isSaving5;\n },\n set: function (value) {\n this.isSaving5 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfNumber.prototype, \"objectCollectionIndex\", {\n /**\n * Gets or sets the `index` value of the specified object.\n * @private\n */\n get: function () {\n return this.index5;\n },\n set: function (value) {\n this.index5 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfNumber.prototype, \"position\", {\n /**\n * Gets or sets the `position` of the object.\n * @private\n */\n get: function () {\n return this.position5;\n },\n set: function (value) {\n this.position5 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfNumber.prototype, \"clonedObject\", {\n /**\n * Returns `cloned object`.\n * @private\n */\n get: function () {\n var rValue = null;\n return rValue;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Saves the object`.\n * @private\n */\n PdfNumber.prototype.save = function (writer) {\n writer.write(this.intValue.toString()); //tostring(CultureInfo.InletiantCulture)\n };\n /**\n * Creates a `copy of PdfNumber`.\n * @private\n */\n PdfNumber.prototype.clone = function (crossTable) {\n var newNumber = new PdfNumber(this.value);\n return newNumber;\n };\n /**\n * Converts a `float value to a string` using Adobe PDF rules.\n * @private\n */\n PdfNumber.floatToString = function (number) {\n // let tempString1 : string = number.toString();\n // let tempString2 : string = tempString1.indexOf('.') != -1 ? tempString1.substring(0, tempString1.indexOf('.')) : tempString1;\n var returnString = number.toFixed(2);\n if (returnString === '0.00') {\n returnString = '.00';\n }\n // let prefixLength : number = (22 - tempString2.length) >= 0 ? (22 - tempString2.length) : 0;\n // for (let index : number = 0; index < prefixLength; index++) {\n // returnString += '0';\n // }\n // returnString += tempString2 + '.00';\n // returnString += (tempString3.length > 6) ? tempString3.substring(0,6) : tempString3;\n // let suffixLength : number = (6 - tempString3.length) >= 0 ? (6 - tempString3.length) : 0;\n // for (let index : number = 0; index < suffixLength; index++) {\n // returnString += '0';\n // }\n return returnString;\n };\n /**\n * Determines the `minimum of the three values`.\n * @private\n */\n PdfNumber.min = function (x, y, z) {\n var r = Math.min(x, y);\n return Math.min(z, r);\n };\n return PdfNumber;\n}());\nexport { PdfNumber };\n","import { PdfNumber } from './pdf-number';\nimport { Operators } from './../input-output/pdf-operators';\n/**\n * `PdfArray` class is used to perform array related primitive operations.\n * @private\n */\nvar PdfArray = /** @class */ (function () {\n function PdfArray(array) {\n //Fields\n /**\n * `startMark` - '['\n * @private\n */\n this.startMark = '[';\n /**\n * `endMark` - ']'.\n * @private\n */\n this.endMark = ']';\n /**\n * Internal variable to store the `position`.\n * @default -1\n * @private\n */\n this.position9 = -1;\n /**\n * Internal variable to hold `cloned object`.\n * @default null\n * @private\n */\n this.clonedObject9 = null;\n /**\n * Represents the Font dictionary.\n * @hidden\n * @private\n */\n this.isFont = false;\n if (typeof array === 'undefined') {\n this.internalElements = [];\n }\n else {\n if (typeof array !== 'undefined' && !(array instanceof PdfArray)) {\n var tempNumberArray = array;\n for (var index = 0; index < tempNumberArray.length; index++) {\n var pdfNumber = new PdfNumber(tempNumberArray[index]);\n this.add(pdfNumber);\n }\n // } else if (typeof array !== 'undefined' && (array instanceof PdfArray)) {\n }\n else {\n var tempArray = array;\n // if (tempArray.Elements.length > 0) {\n this.internalElements = [];\n for (var index = 0; index < tempArray.elements.length; index++) {\n this.internalElements.push(tempArray.elements[index]);\n }\n // }\n }\n }\n }\n //property\n /**\n * Gets the `IPdfSavable` at the specified index.\n * @private\n */\n PdfArray.prototype.items = function (index) {\n // if (index < 0 || index >= this.Count) {\n // throw new Error('ArgumentOutOfRangeException : index, The index can\"t be less then zero or greater then Count.');\n // }\n return this.internalElements[index];\n };\n Object.defineProperty(PdfArray.prototype, \"count\", {\n /**\n * Gets the `count`.\n * @private\n */\n get: function () {\n return this.internalElements.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfArray.prototype, \"status\", {\n /**\n * Gets or sets the `Status` of the specified object.\n * @private\n */\n get: function () {\n return this.status9;\n },\n set: function (value) {\n this.status9 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfArray.prototype, \"isSaving\", {\n /**\n * Gets or sets a value indicating whether this document `is saving` or not.\n * @private\n */\n get: function () {\n return this.isSaving9;\n },\n set: function (value) {\n this.isSaving9 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfArray.prototype, \"clonedObject\", {\n /**\n * Returns `cloned object`.\n * @private\n */\n get: function () {\n return this.clonedObject9;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfArray.prototype, \"position\", {\n /**\n * Gets or sets the `position` of the object.\n * @private\n */\n get: function () {\n return this.position9;\n },\n set: function (value) {\n this.position9 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfArray.prototype, \"objectCollectionIndex\", {\n /**\n * Gets or sets the `index` value of the specified object.\n * @private\n */\n get: function () {\n return this.index9;\n },\n set: function (value) {\n this.index9 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfArray.prototype, \"CrossTable\", {\n /**\n * Returns `PdfCrossTable` associated with the object.\n * @private\n */\n get: function () {\n return this.pdfCrossTable;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfArray.prototype, \"elements\", {\n /**\n * Gets the `elements` of the Pdf Array.\n * @private\n */\n get: function () {\n return this.internalElements;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Adds` the specified element to the PDF array.\n * @private\n */\n PdfArray.prototype.add = function (element) {\n // if (element === null) {\n // throw new Error('ArgumentNullException : obj');\n // }\n if (typeof this.internalElements === 'undefined') {\n this.internalElements = [];\n }\n this.internalElements.push(element);\n this.markedChange();\n };\n /**\n * `Marks` the object changed.\n * @private\n */\n PdfArray.prototype.markedChange = function () {\n this.bChanged = true;\n };\n /**\n * `Determines` whether the specified element is within the array.\n * @private\n */\n PdfArray.prototype.contains = function (element) {\n var returnValue = false;\n for (var index = 0; index < this.internalElements.length; index++) {\n var tempElement = this.internalElements[index];\n var inputElement = element;\n if (tempElement != null && typeof tempElement !== 'undefined' && inputElement != null && typeof inputElement !== 'undefined') {\n if (tempElement.value === inputElement.value) {\n return true;\n }\n }\n // if (this.internalElements[index] === element) {\n // returnValue = true;\n // }\n }\n return returnValue;\n };\n /**\n * Returns the `primitive object` of input index.\n * @private\n */\n PdfArray.prototype.getItems = function (index) {\n // if (index < 0 || index >= this.Count) {\n // throw new Error('ArgumentOutOfRangeException : index , The index can\"t be less then zero or greater then Count.');\n // }\n return this.internalElements[index];\n };\n /**\n * `Saves` the object using the specified writer.\n * @private\n */\n PdfArray.prototype.save = function (writer) {\n // if (writer === null) {\n // throw new Error('ArgumentNullException : writer');\n // }\n writer.write(this.startMark);\n for (var i = 0, len = this.count; i < len; i++) {\n this.getItems(i).save(writer);\n if (i + 1 !== len) {\n writer.write(Operators.whiteSpace);\n }\n }\n writer.write(this.endMark);\n };\n /**\n * Creates a `copy of PdfArray`.\n * @private\n */\n PdfArray.prototype.clone = function (crossTable) {\n // if (this.clonedObject9 !== null && this.clonedObject9.CrossTable === crossTable) {\n // return this.clonedObject9;\n // } else {\n this.clonedObject9 = null;\n // Else clone the object.\n var newArray = new PdfArray();\n for (var index = 0; index < this.internalElements.length; index++) {\n var obj = this.internalElements[index];\n newArray.add(obj.clone(crossTable));\n }\n newArray.pdfCrossTable = crossTable;\n this.clonedObject9 = newArray;\n return newArray;\n };\n /**\n * Creates filled PDF array `from the rectangle`.\n * @private\n */\n PdfArray.fromRectangle = function (bounds) {\n var values = [bounds.x, bounds.y, bounds.width, bounds.height];\n var array = new PdfArray(values);\n return array;\n };\n // /**\n // * Creates the rectangle from filled PDF array.\n // * @private\n // */\n // public ToRectangle() : RectangleF {\n // if (this.Count < 4) {\n // throw Error('InvalidOperationException-Can not convert to rectangle.');\n // }\n // let x1 : number;\n // let x2 : number;\n // let y1 : number;\n // let y2 : number;\n // let num : PdfNumber = this.getItems(0) as PdfNumber;\n // x1 = num.IntValue;\n // num = this.getItems(1) as PdfNumber;\n // y1 = num.IntValue;\n // num = this.getItems(2) as PdfNumber;\n // x2 = num.IntValue;\n // num = this.getItems(3) as PdfNumber;\n // y2 = num.IntValue;\n // let x : number = Math.min(x1, x2);\n // let y : number = Math.min(y1, y2);\n // let width : number = Math.abs(x1 - x2);\n // let height : number = Math.abs(y1 - y2);\n // let rect : RectangleF = new RectangleF(new PointF(x, y), new SizeF(width, height));\n // return rect;\n // }\n /**\n * `Inserts` the element into the array.\n * @private\n */\n PdfArray.prototype.insert = function (index, element) {\n if (index < this.internalElements.length && index > 0) {\n var tempElements = [];\n for (var i = 0; i < index; i++) {\n tempElements.push(this.internalElements[i]);\n }\n tempElements.push(element);\n for (var i = index; i < this.internalElements.length; i++) {\n tempElements.push(this.internalElements[i]);\n }\n this.internalElements = tempElements;\n }\n else {\n this.internalElements.push(element);\n }\n this.markChanged();\n };\n /**\n * `Checks whether array contains the element`.\n * @private\n */\n PdfArray.prototype.indexOf = function (element) {\n return this.internalElements.indexOf(element);\n };\n /**\n * `Removes` element from the array.\n * @private\n */\n PdfArray.prototype.remove = function (element) {\n // if (element === null) {\n // throw new Error('ArgumentNullException : element');\n // }\n var index = this.internalElements.indexOf(element);\n // if (index >= 0 && index < this.internalElements.length) {\n this.internalElements[index] = null;\n // }\n this.markChanged();\n };\n /**\n * `Remove` the element from the array by its index.\n * @private\n */\n PdfArray.prototype.removeAt = function (index) {\n // this.internalElements.RemoveAt(index);\n if (this.internalElements.length > index) {\n var tempArray = [];\n for (var i = 0; i < index; i++) {\n tempArray.push(this.internalElements[i]);\n }\n for (var i = index + 1; i < this.internalElements.length; i++) {\n tempArray.push(this.internalElements[i]);\n }\n this.internalElements = tempArray;\n }\n this.markChanged();\n };\n /**\n * `Clear` the array.\n * @private\n */\n PdfArray.prototype.clear = function () {\n this.internalElements = [];\n this.markChanged();\n };\n /**\n * `Marks` the object changed.\n * @private\n */\n PdfArray.prototype.markChanged = function () {\n this.bChanged = true;\n };\n return PdfArray;\n}());\nexport { PdfArray };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { PdfDictionary } from './pdf-dictionary';\nimport { PdfNumber } from './pdf-number';\nimport { Operators } from './../input-output/pdf-operators';\nimport { PdfName } from './pdf-name';\nimport { PdfArray } from './pdf-array';\nimport { PdfReferenceHolder } from './pdf-reference';\nimport { CompressedStreamWriter } from '@syncfusion/ej2-compression';\n/**\n * `PdfStream` class is used to perform stream related primitive operations.\n * @private\n */\nvar PdfStream = /** @class */ (function (_super) {\n __extends(PdfStream, _super);\n function PdfStream(dictionary, data) {\n var _this = _super.call(this, dictionary) || this;\n //Constants\n /**\n * @hidden\n * @private\n */\n _this.dicPrefix = 'stream';\n /**\n * @hidden\n * @private\n */\n _this.dicSuffix = 'endstream';\n /**\n * Internal variable to hold `cloned object`.\n * @private\n */\n _this.clonedObject2 = null;\n /**\n * @hidden\n * @private\n */\n _this.bCompress = true;\n /**\n * @hidden\n * @private\n */\n _this.isImageStream = false;\n /**\n * @hidden\n * @private\n */\n _this.isFontStream = false;\n if (typeof dictionary !== 'undefined' || typeof data !== 'undefined') {\n _this.dataStream2 = [];\n _this.dataStream2 = data;\n _this.bCompress2 = false;\n }\n else {\n _this.dataStream2 = [];\n _this.bCompress2 = true;\n //Pending\n }\n return _this;\n }\n Object.defineProperty(PdfStream.prototype, \"internalStream\", {\n /**\n * Gets the `internal` stream.\n * @private\n */\n get: function () {\n return this.dataStream2;\n },\n set: function (value) {\n this.dataStream2 = [];\n this.dataStream2 = value;\n this.modify();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStream.prototype, \"isImage\", {\n /**\n * Gets or sets 'is image' flag.\n * @private\n */\n get: function () {\n return this.isImageStream;\n },\n set: function (value) {\n this.isImageStream = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStream.prototype, \"isFont\", {\n /**\n * Gets or sets 'is font' flag.\n * @private\n */\n get: function () {\n return this.isFontStream;\n },\n set: function (value) {\n this.isFontStream = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStream.prototype, \"compress\", {\n /**\n * Gets or sets `compression` flag.\n * @private\n */\n get: function () {\n return this.bCompress;\n },\n set: function (value) {\n this.bCompress = value;\n this.modify();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStream.prototype, \"data\", {\n /**\n * Gets or sets the `data`.\n * @private\n */\n get: function () {\n return this.dataStream2;\n },\n set: function (value) {\n this.dataStream2 = [];\n this.dataStream2 = value;\n this.modify();\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Clear` the internal stream.\n * @private\n */\n PdfStream.prototype.clearStream = function () {\n this.internalStream = [];\n if (this.items.containsKey(this.dictionaryProperties.filter)) {\n this.remove(this.dictionaryProperties.filter);\n }\n this.bCompress = true;\n this.modify();\n };\n /**\n * `Writes` the specified string.\n * @private\n */\n PdfStream.prototype.write = function (text) {\n if (text == null) {\n throw new Error('ArgumentNullException:text');\n }\n if (text.length <= 0) {\n throw new Error('ArgumentException: Can not write an empty string, text');\n }\n this.dataStream2.push(text);\n this.modify();\n };\n /**\n * `Writes` the specified bytes.\n * @private\n */\n PdfStream.prototype.writeBytes = function (data) {\n if (data === null) {\n throw new Error('ArgumentNullException:data');\n }\n if (data.length <= 0) {\n throw new Error('ArgumentException: Can not write an empty bytes, data');\n }\n var text = '';\n for (var i = 0; i < data.length; i++) {\n text += String.fromCharCode(data[i]);\n }\n this.dataStream2.push(text);\n this.modify();\n };\n /**\n * Raises event `Cmap BeginSave`.\n * @private\n */\n PdfStream.prototype.onCmapBeginSave = function () {\n this.cmapBeginSave.sender.cmapBeginSave();\n };\n /**\n * Raises event `Font Program BeginSave`.\n * @private\n */\n PdfStream.prototype.onFontProgramBeginSave = function () {\n this.fontProgramBeginSave.sender.fontProgramBeginSave();\n };\n /**\n * `Compresses the content` if it's required.\n * @private\n */\n PdfStream.prototype.compressContent = function (data, writer) {\n if (this.bCompress) {\n var byteArray = [];\n for (var i = 0; i < data.length; i++) {\n byteArray.push(data.charCodeAt(i));\n }\n var dataArray = new Uint8Array(byteArray);\n var sw = new CompressedStreamWriter();\n // data = 'Hello World!!!';\n sw.write(dataArray, 0, dataArray.length);\n sw.close();\n data = sw.getCompressedString;\n this.addFilter(this.dictionaryProperties.flatedecode);\n }\n return data;\n };\n /**\n * `Adds a filter` to the filter array.\n * @private\n */\n PdfStream.prototype.addFilter = function (filterName) {\n var obj = this.items.getValue(this.dictionaryProperties.filter);\n if (obj instanceof PdfReferenceHolder) {\n var rh = obj;\n obj = rh.object;\n }\n var array = obj;\n var name = obj;\n if (name != null) {\n array = new PdfArray();\n array.insert(0, name);\n this.items.setValue(this.dictionaryProperties.filter, array);\n }\n name = new PdfName(filterName);\n if (array == null) {\n this.items.setValue(this.dictionaryProperties.filter, name);\n }\n else {\n array.insert(0, name);\n }\n };\n /**\n * `Saves` the object using the specified writer.\n * @private\n */\n PdfStream.prototype.save = function (writer) {\n if (typeof this.cmapBeginSave !== 'undefined') {\n this.onCmapBeginSave();\n }\n if (typeof this.fontProgramBeginSave !== 'undefined') {\n this.onFontProgramBeginSave();\n }\n var data = '';\n for (var i = 0; i < this.data.length; i++) {\n data = data + this.data[i];\n }\n if (data.length > 1 && !this.isImage && !this.isFont) {\n data = 'q\\r\\n' + data + 'Q\\r\\n';\n }\n data = this.compressContent(data, writer);\n var length = data.length;\n this.items.setValue(this.dictionaryProperties.length, new PdfNumber(length));\n _super.prototype.save.call(this, writer, false);\n writer.write(this.dicPrefix);\n writer.write(Operators.newLine);\n if (data.length > 0) {\n writer.write(data);\n }\n writer.write(Operators.newLine);\n writer.write(this.dicSuffix);\n writer.write(Operators.newLine);\n };\n /**\n * Converts `bytes to string`.\n * @private\n */\n PdfStream.bytesToString = function (byteArray) {\n var output = '';\n for (var i = 0; i < byteArray.length; i++) {\n output = output + String.fromCharCode(byteArray[i]);\n }\n return output;\n };\n return PdfStream;\n}(PdfDictionary));\nexport { PdfStream };\nvar SaveCmapEventHandler = /** @class */ (function () {\n /**\n * New instance for `save section collection event handler` class.\n * @private\n */\n function SaveCmapEventHandler(sender) {\n this.sender = sender;\n }\n return SaveCmapEventHandler;\n}());\nexport { SaveCmapEventHandler };\nvar SaveFontProgramEventHandler = /** @class */ (function () {\n /**\n * New instance for `save section collection event handler` class.\n * @private\n */\n function SaveFontProgramEventHandler(sender) {\n this.sender = sender;\n }\n return SaveFontProgramEventHandler;\n}());\nexport { SaveFontProgramEventHandler };\n","/**\n * public Enum for `PdfHorizontalAlignment`.\n * @private\n */\nexport var PdfHorizontalAlignment;\n(function (PdfHorizontalAlignment) {\n /**\n * Specifies the type of `Left`.\n * @private\n */\n PdfHorizontalAlignment[PdfHorizontalAlignment[\"Left\"] = 0] = \"Left\";\n /**\n * Specifies the type of `Center`.\n * @private\n */\n PdfHorizontalAlignment[PdfHorizontalAlignment[\"Center\"] = 1] = \"Center\";\n /**\n * Specifies the type of `Right`.\n * @private\n */\n PdfHorizontalAlignment[PdfHorizontalAlignment[\"Right\"] = 2] = \"Right\";\n})(PdfHorizontalAlignment || (PdfHorizontalAlignment = {}));\n/**\n * public Enum for `PdfVerticalAlignment`.\n * @private\n */\nexport var PdfVerticalAlignment;\n(function (PdfVerticalAlignment) {\n /**\n * Specifies the type of `Top`.\n * @private\n */\n PdfVerticalAlignment[PdfVerticalAlignment[\"Top\"] = 0] = \"Top\";\n /**\n * Specifies the type of `Middle`.\n * @private\n */\n PdfVerticalAlignment[PdfVerticalAlignment[\"Middle\"] = 1] = \"Middle\";\n /**\n * Specifies the type of `Bottom`.\n * @private\n */\n PdfVerticalAlignment[PdfVerticalAlignment[\"Bottom\"] = 2] = \"Bottom\";\n})(PdfVerticalAlignment || (PdfVerticalAlignment = {}));\n/**\n * public Enum for `public`.\n * @private\n */\nexport var PdfTextAlignment;\n(function (PdfTextAlignment) {\n /**\n * Specifies the type of `Left`.\n * @private\n */\n PdfTextAlignment[PdfTextAlignment[\"Left\"] = 0] = \"Left\";\n /**\n * Specifies the type of `Center`.\n * @private\n */\n PdfTextAlignment[PdfTextAlignment[\"Center\"] = 1] = \"Center\";\n /**\n * Specifies the type of `Right`.\n * @private\n */\n PdfTextAlignment[PdfTextAlignment[\"Right\"] = 2] = \"Right\";\n /**\n * Specifies the type of `Justify`.\n * @private\n */\n PdfTextAlignment[PdfTextAlignment[\"Justify\"] = 3] = \"Justify\";\n})(PdfTextAlignment || (PdfTextAlignment = {}));\n/**\n * public Enum for `TextRenderingMode`.\n * @private\n */\nexport var TextRenderingMode;\n(function (TextRenderingMode) {\n /**\n * Specifies the type of `Fill`.\n * @private\n */\n TextRenderingMode[TextRenderingMode[\"Fill\"] = 0] = \"Fill\";\n /**\n * Specifies the type of `Stroke`.\n * @private\n */\n TextRenderingMode[TextRenderingMode[\"Stroke\"] = 1] = \"Stroke\";\n /**\n * Specifies the type of `FillStroke`.\n * @private\n */\n TextRenderingMode[TextRenderingMode[\"FillStroke\"] = 2] = \"FillStroke\";\n /**\n * Specifies the type of `None`.\n * @private\n */\n TextRenderingMode[TextRenderingMode[\"None\"] = 3] = \"None\";\n /**\n * Specifies the type of `ClipFlag`.\n * @private\n */\n TextRenderingMode[TextRenderingMode[\"ClipFlag\"] = 4] = \"ClipFlag\";\n /**\n * Specifies the type of `ClipFill`.\n * @private\n */\n TextRenderingMode[TextRenderingMode[\"ClipFill\"] = 4] = \"ClipFill\";\n /**\n * Specifies the type of `ClipStroke`.\n * @private\n */\n TextRenderingMode[TextRenderingMode[\"ClipStroke\"] = 5] = \"ClipStroke\";\n /**\n * Specifies the type of `ClipFillStroke`.\n * @private\n */\n TextRenderingMode[TextRenderingMode[\"ClipFillStroke\"] = 6] = \"ClipFillStroke\";\n /**\n * Specifies the type of `Clip`.\n * @private\n */\n TextRenderingMode[TextRenderingMode[\"Clip\"] = 7] = \"Clip\";\n})(TextRenderingMode || (TextRenderingMode = {}));\n/**\n * public Enum for `PdfLineJoin`.\n * @private\n */\nexport var PdfLineJoin;\n(function (PdfLineJoin) {\n /**\n * Specifies the type of `Miter`.\n * @private\n */\n PdfLineJoin[PdfLineJoin[\"Miter\"] = 0] = \"Miter\";\n /**\n * Specifies the type of `Round`.\n * @private\n */\n PdfLineJoin[PdfLineJoin[\"Round\"] = 1] = \"Round\";\n /**\n * Specifies the type of `Bevel`.\n * @private\n */\n PdfLineJoin[PdfLineJoin[\"Bevel\"] = 2] = \"Bevel\";\n})(PdfLineJoin || (PdfLineJoin = {}));\n/**\n * public Enum for `PdfLineCap`.\n * @private\n */\nexport var PdfLineCap;\n(function (PdfLineCap) {\n /**\n * Specifies the type of `Flat`.\n * @private\n */\n PdfLineCap[PdfLineCap[\"Flat\"] = 0] = \"Flat\";\n /**\n * Specifies the type of `Round`.\n * @private\n */\n PdfLineCap[PdfLineCap[\"Round\"] = 1] = \"Round\";\n /**\n * Specifies the type of `Square`.\n * @private\n */\n PdfLineCap[PdfLineCap[\"Square\"] = 2] = \"Square\";\n})(PdfLineCap || (PdfLineCap = {}));\n/**\n * public Enum for `PdfDashStyle`.\n * @private\n */\nexport var PdfDashStyle;\n(function (PdfDashStyle) {\n /**\n * Specifies the type of `Solid`.\n * @private\n */\n PdfDashStyle[PdfDashStyle[\"Solid\"] = 0] = \"Solid\";\n /**\n * Specifies the type of `Dash`.\n * @private\n */\n PdfDashStyle[PdfDashStyle[\"Dash\"] = 1] = \"Dash\";\n /**\n * Specifies the type of `Dot`.\n * @private\n */\n PdfDashStyle[PdfDashStyle[\"Dot\"] = 2] = \"Dot\";\n /**\n * Specifies the type of `DashDot`.\n * @private\n */\n PdfDashStyle[PdfDashStyle[\"DashDot\"] = 3] = \"DashDot\";\n /**\n * Specifies the type of `DashDotDot`.\n * @private\n */\n PdfDashStyle[PdfDashStyle[\"DashDotDot\"] = 4] = \"DashDotDot\";\n /**\n * Specifies the type of `Custom`.\n * @private\n */\n PdfDashStyle[PdfDashStyle[\"Custom\"] = 5] = \"Custom\";\n})(PdfDashStyle || (PdfDashStyle = {}));\n/**\n * public Enum for `PdfFillMode`.\n * @private\n */\nexport var PdfFillMode;\n(function (PdfFillMode) {\n /**\n * Specifies the type of `Winding`.\n * @private\n */\n PdfFillMode[PdfFillMode[\"Winding\"] = 0] = \"Winding\";\n /**\n * Specifies the type of `Alternate`.\n * @private\n */\n PdfFillMode[PdfFillMode[\"Alternate\"] = 1] = \"Alternate\";\n})(PdfFillMode || (PdfFillMode = {}));\n/**\n * public Enum for `PdfColorSpace`.\n * @private\n */\nexport var PdfColorSpace;\n(function (PdfColorSpace) {\n /**\n * Specifies the type of `Rgb`.\n * @private\n */\n PdfColorSpace[PdfColorSpace[\"Rgb\"] = 0] = \"Rgb\";\n /**\n * Specifies the type of `Cmyk`.\n * @private\n */\n PdfColorSpace[PdfColorSpace[\"Cmyk\"] = 1] = \"Cmyk\";\n /**\n * Specifies the type of `GrayScale`.\n * @private\n */\n PdfColorSpace[PdfColorSpace[\"GrayScale\"] = 2] = \"GrayScale\";\n /**\n * Specifies the type of `Indexed`.\n * @private\n */\n PdfColorSpace[PdfColorSpace[\"Indexed\"] = 3] = \"Indexed\";\n})(PdfColorSpace || (PdfColorSpace = {}));\n/**\n * public Enum for `PdfBlendMode`.\n * @private\n */\nexport var PdfBlendMode;\n(function (PdfBlendMode) {\n /**\n * Specifies the type of `Normal`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Normal\"] = 0] = \"Normal\";\n /**\n * Specifies the type of `Multiply`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Multiply\"] = 1] = \"Multiply\";\n /**\n * Specifies the type of `Screen`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Screen\"] = 2] = \"Screen\";\n /**\n * Specifies the type of `Overlay`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Overlay\"] = 3] = \"Overlay\";\n /**\n * Specifies the type of `Darken`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Darken\"] = 4] = \"Darken\";\n /**\n * Specifies the type of `Lighten`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Lighten\"] = 5] = \"Lighten\";\n /**\n * Specifies the type of `ColorDodge`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"ColorDodge\"] = 6] = \"ColorDodge\";\n /**\n * Specifies the type of `ColorBurn`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"ColorBurn\"] = 7] = \"ColorBurn\";\n /**\n * Specifies the type of `HardLight`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"HardLight\"] = 8] = \"HardLight\";\n /**\n * Specifies the type of `SoftLight`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"SoftLight\"] = 9] = \"SoftLight\";\n /**\n * Specifies the type of `Difference`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Difference\"] = 10] = \"Difference\";\n /**\n * Specifies the type of `Exclusion`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Exclusion\"] = 11] = \"Exclusion\";\n /**\n * Specifies the type of `Hue`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Hue\"] = 12] = \"Hue\";\n /**\n * Specifies the type of `Saturation`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Saturation\"] = 13] = \"Saturation\";\n /**\n * Specifies the type of `Color`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Color\"] = 14] = \"Color\";\n /**\n * Specifies the type of `Luminosity`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Luminosity\"] = 15] = \"Luminosity\";\n})(PdfBlendMode || (PdfBlendMode = {}));\n/**\n * public Enum for `PdfGraphicsUnit`.\n * @private\n */\nexport var PdfGraphicsUnit;\n(function (PdfGraphicsUnit) {\n /**\n * Specifies the type of `Centimeter`.\n * @private\n */\n PdfGraphicsUnit[PdfGraphicsUnit[\"Centimeter\"] = 0] = \"Centimeter\";\n /**\n * Specifies the type of `Pica`.\n * @private\n */\n PdfGraphicsUnit[PdfGraphicsUnit[\"Pica\"] = 1] = \"Pica\";\n /**\n * Specifies the type of `Pixel`.\n * @private\n */\n PdfGraphicsUnit[PdfGraphicsUnit[\"Pixel\"] = 2] = \"Pixel\";\n /**\n * Specifies the type of `Point`.\n * @private\n */\n PdfGraphicsUnit[PdfGraphicsUnit[\"Point\"] = 3] = \"Point\";\n /**\n * Specifies the type of `Inch`.\n * @private\n */\n PdfGraphicsUnit[PdfGraphicsUnit[\"Inch\"] = 4] = \"Inch\";\n /**\n * Specifies the type of `Document`.\n * @private\n */\n PdfGraphicsUnit[PdfGraphicsUnit[\"Document\"] = 5] = \"Document\";\n /**\n * Specifies the type of `Millimeter`.\n * @private\n */\n PdfGraphicsUnit[PdfGraphicsUnit[\"Millimeter\"] = 6] = \"Millimeter\";\n})(PdfGraphicsUnit || (PdfGraphicsUnit = {}));\n/**\n * public Enum for `PdfGridImagePosition`.\n * @private\n */\nexport var PdfGridImagePosition;\n(function (PdfGridImagePosition) {\n /**\n * Specifies the type of `Fit`.\n * @private\n */\n PdfGridImagePosition[PdfGridImagePosition[\"Fit\"] = 0] = \"Fit\";\n /**\n * Specifies the type of `Center`.\n * @private\n */\n PdfGridImagePosition[PdfGridImagePosition[\"Center\"] = 1] = \"Center\";\n /**\n * Specifies the type of `Stretch`.\n * @private\n */\n PdfGridImagePosition[PdfGridImagePosition[\"Stretch\"] = 2] = \"Stretch\";\n /**\n * Specifies the type of `Tile`.\n * @private\n */\n PdfGridImagePosition[PdfGridImagePosition[\"Tile\"] = 3] = \"Tile\";\n})(PdfGridImagePosition || (PdfGridImagePosition = {}));\n","import { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\nimport { PdfStream } from './../primitives/pdf-stream';\nimport { PdfArray } from './../primitives/pdf-array';\nimport { PdfNumber } from './../primitives/pdf-number';\nimport { PdfName } from './../primitives/pdf-name';\nimport { PdfDictionary } from './../primitives/pdf-dictionary';\nimport { PdfString } from './../primitives/pdf-string';\n/**\n * `PdfReference` class is used to perform reference related primitive operations.\n * @private\n */\nvar PdfReference = /** @class */ (function () {\n function PdfReference(objNumber, genNumber) {\n /**\n * Holds the `index` number of the object.\n * @default -1\n * @private\n */\n this.index3 = -1;\n /**\n * Internal variable to store the `position`.\n * @default -1\n * @private\n */\n this.position3 = -1;\n /**\n * Holds the `object number`.\n * @default 0\n * @private\n */\n this.objNumber = 0;\n /**\n * Holds the `generation number` of the object.\n * @default 0\n * @private\n */\n this.genNumber = 0;\n if (typeof objNumber === 'number' && typeof genNumber === 'number') {\n this.objNumber = objNumber;\n this.genNumber = genNumber;\n // } else if (typeof objNum === 'string' && typeof genNum === 'string') {\n }\n else {\n this.objNumber = Number(objNumber);\n this.genNumber = Number(genNumber);\n }\n }\n Object.defineProperty(PdfReference.prototype, \"status\", {\n //Property\n /**\n * Gets or sets the `Status` of the specified object.\n * @private\n */\n get: function () {\n return this.status3;\n },\n set: function (value) {\n this.status3 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReference.prototype, \"isSaving\", {\n /**\n * Gets or sets a value indicating whether this document `is saving` or not.\n * @private\n */\n get: function () {\n return this.isSaving3;\n },\n set: function (value) {\n this.isSaving3 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReference.prototype, \"objectCollectionIndex\", {\n /**\n * Gets or sets the `index` value of the specified object.\n * @private\n */\n get: function () {\n return this.index3;\n },\n set: function (value) {\n this.index3 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReference.prototype, \"position\", {\n /**\n * Gets or sets the `position` of the object.\n * @private\n */\n get: function () {\n return this.position3;\n },\n set: function (value) {\n this.position3 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReference.prototype, \"clonedObject\", {\n /**\n * Returns `cloned object`.\n * @private\n */\n get: function () {\n var returnObject3 = null;\n return returnObject3;\n },\n enumerable: true,\n configurable: true\n });\n //IPdfPrimitives methods\n /**\n * `Saves` the object.\n * @private\n */\n PdfReference.prototype.save = function (writer) {\n writer.write(this.toString());\n };\n /**\n * Returns a `string` representing the object.\n * @private\n */\n PdfReference.prototype.toString = function () {\n return this.objNumber.toString() + ' ' + this.genNumber.toString() + ' R';\n };\n /**\n * Creates a `deep copy` of the IPdfPrimitive object.\n * @private\n */\n PdfReference.prototype.clone = function (crossTable) {\n return null;\n };\n return PdfReference;\n}());\nexport { PdfReference };\n/**\n * `PdfReferenceHolder` class is used to perform reference holder related primitive operations.\n * @private\n */\nvar PdfReferenceHolder = /** @class */ (function () {\n function PdfReferenceHolder(obj1, obj2) {\n /**\n * Holds the `index` number of the object.\n * @default -1\n * @private\n */\n this.index4 = -1;\n /**\n * Internal variable to store the `position`.\n * @default -1\n * @private\n */\n this.position4 = -1;\n /**\n * The `index` of the object within the object collection.\n * @default -1\n * @private\n */\n this.objectIndex = -1;\n /**\n * @hidden\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n // if (typeof obj2 === 'undefined') {\n if (obj1 instanceof PdfArray\n || obj1 instanceof PdfDictionary\n || obj1 instanceof PdfName\n || obj1 instanceof PdfNumber\n || obj1 instanceof PdfStream\n || obj1 instanceof PdfReference\n || obj1 instanceof PdfString) {\n // if (obj1 === null) {\n // throw new Error('ArgumentNullException : obj');\n // }\n this.primitiveObject = obj1;\n // } else if (obj1 instanceof PdfPageBase\n // || obj1 instanceof PdfPage\n // || obj1 instanceof PdfSection\n // || obj1 instanceof PdfSectionCollection) {\n }\n else {\n var tempObj = obj1;\n this.constructor(tempObj.element);\n }\n // }\n // else {\n // if (obj2 === null) {\n // throw new Error('ArgumentNullException : crossTable');\n // }\n // if (obj1 === null) {\n // throw new Error('ArgumentNullException : reference');\n // }\n // this.crossTable = obj2;\n // let tempObj1 : PdfReference = obj1;\n // this.reference = tempObj1;\n // }\n }\n Object.defineProperty(PdfReferenceHolder.prototype, \"status\", {\n //Properties\n /**\n * Gets or sets the `Status` of the specified object.\n * @private\n */\n get: function () {\n return this.status4;\n },\n set: function (value) {\n this.status4 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReferenceHolder.prototype, \"isSaving\", {\n /**\n * Gets or sets a value indicating whether this document `is saving` or not.\n * @private\n */\n get: function () {\n return this.isSaving4;\n },\n set: function (value) {\n this.isSaving4 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReferenceHolder.prototype, \"objectCollectionIndex\", {\n /**\n * Gets or sets the `index` value of the specified object.\n * @private\n */\n get: function () {\n return this.index4;\n },\n set: function (value) {\n this.index4 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReferenceHolder.prototype, \"position\", {\n /**\n * Gets or sets the `position` of the object.\n * @private\n */\n get: function () {\n return this.position4;\n },\n set: function (value) {\n this.position4 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReferenceHolder.prototype, \"clonedObject\", {\n /**\n * Returns `cloned object`.\n * @private\n */\n get: function () {\n return null;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReferenceHolder.prototype, \"object\", {\n /**\n * Gets the `object` the reference is of.\n * @private\n */\n get: function () {\n // if ((this.reference != null) || (this.object == null)) {\n // this.object = this.GetterObject();\n // }\n return this.primitiveObject;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReferenceHolder.prototype, \"reference\", {\n /**\n * Gets the `reference`.\n * @private\n */\n get: function () {\n return this.pdfReference;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReferenceHolder.prototype, \"index\", {\n /**\n * Gets the `index` of the object.\n * @private\n */\n get: function () {\n // let items : PdfMainObjectCollection = this.crossTable.PdfObjects;\n // this.objectIndex = items.GetObjectIndex(this.reference);\n // if (this.objectIndex < 0) {\n // let obj : IPdfPrimitive = this.crossTable.GetObject(this.reference);\n // this.objectIndex = items.Count - 1;\n // }\n return this.objectIndex;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReferenceHolder.prototype, \"element\", {\n /**\n * Gets the `element`.\n * @private\n */\n get: function () {\n return this.primitiveObject;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Writes` a reference into a PDF document.\n * @private\n */\n PdfReferenceHolder.prototype.save = function (writer) {\n // if (writer == null) {\n // throw new Error('ArgumentNullException : writer');\n // }\n var position = writer.position;\n var cTable = writer.document.crossTable;\n // if (cTable.Document instanceof PdfDocument) {\n this.object.isSaving = true;\n // }\n var reference = null;\n // if (writer.Document.FileStructure.IncrementalUpdate === true && writer.Document.isStreamCopied === true) {\n // if (this.reference === null) {\n // reference = cTable.GetReference(this.Object);\n // } else {\n // reference = this.reference;\n // }\n // } else {\n // reference = cTable.GetReference(this.Object);\n // }\n // if (!(writer.Document.FileStructure.IncrementalUpdate === true && writer.Document.isStreamCopied === true)) {\n reference = cTable.getReference(this.object);\n // }\n // if (writer.Position !== position) {\n // writer.Position = position;\n // }\n reference.save(writer);\n };\n /**\n * Creates a `copy of PdfReferenceHolder`.\n * @private\n */\n PdfReferenceHolder.prototype.clone = function (crossTable) {\n var refHolder = null;\n var temp = null;\n var refNum = '';\n var reference = null;\n // Restricts addition of same object multiple time.\n /* if (this.Reference != null && this.crossTable != null && this.crossTable.PageCorrespondance.containsKey(this.Reference)) {\n refHolder = new PdfReferenceHolder(this.crossTable.PageCorrespondance.getValue(this.Reference) as PdfReference, crossTable);\n return refHolder;\n }\n if (Object instanceof PdfNumber) {\n return new PdfNumber((Object as PdfNumber).IntValue);\n }\n */\n // if (Object instanceof PdfDictionary) {\n // // Meaning the referenced page is not available for import.\n // let type : PdfName = new PdfName(this.dictionaryProperties.type);\n // let dict : PdfDictionary = Object as PdfDictionary;\n // if (dict.ContainsKey(type)) {\n // let pageName : PdfName = dict.Items.getValue(type.Value) as PdfName;\n // if (pageName !== null) {\n // if (pageName.Value === 'Page') {\n // return new PdfNull();\n // }\n // }\n // }\n // }\n /* if (Object instanceof PdfName) {\n return new PdfName ((Object as PdfName ).Value);\n }\n */\n // Resolves circular references.\n // if (crossTable.PrevReference !== null && (crossTable.PrevReference.indexOf(this.Reference) !== -1)) {\n // let obj : IPdfPrimitive = this.crossTable.GetObject(this.Reference).ClonedObject;\n // if (obj !== null) {\n // reference = crossTable.GetReference(obj);\n // return new PdfReferenceHolder(reference, crossTable);\n // } else {\n // return new PdfNull();\n // }\n // }\n /*if (this.Reference !== null) {\n crossTable.PrevReference.push(this.Reference);\n }\n reference = crossTable.GetReference(temp);\n refHolder = new PdfReferenceHolder(reference, crossTable);\n return refHolder;\n */\n return null;\n };\n return PdfReferenceHolder;\n}());\nexport { PdfReferenceHolder };\n","import { PdfDictionary } from './../primitives/pdf-dictionary';\nimport { PdfReferenceHolder } from './../primitives/pdf-reference';\nimport { PdfName } from './../primitives/pdf-name';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\n/**\n * `PdfAction` class represents base class for all action types.\n * @private\n */\nvar PdfAction = /** @class */ (function () {\n // Constructors\n /**\n * Initialize instance for `Action` class.\n * @private\n */\n function PdfAction() {\n /**\n * Specifies the Next `action` to perform.\n * @private\n */\n this.action = null;\n /**\n * Specifies the Internal variable to store `dictionary properties`.\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n // super(); -> Object()\n this.initialize();\n }\n Object.defineProperty(PdfAction.prototype, \"next\", {\n // Properties\n /**\n * Gets and Sets the `Next` action to perform.\n * @private\n */\n get: function () {\n return this.action;\n },\n set: function (value) {\n // if (this.action !== value) {\n this.action = value;\n this.dictionary.items.setValue(this.dictionaryProperties.next, new PdfReferenceHolder(this.action));\n // }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAction.prototype, \"dictionary\", {\n /**\n * Gets and Sets the instance of PdfDictionary class for `Dictionary`.\n * @private\n */\n get: function () {\n if (typeof this.pdfDictionary === 'undefined') {\n this.pdfDictionary = new PdfDictionary();\n }\n return this.pdfDictionary;\n },\n enumerable: true,\n configurable: true\n });\n // Implementation\n /**\n * `Initialize` the action type.\n * @private\n */\n PdfAction.prototype.initialize = function () {\n this.dictionary.items.setValue(this.dictionaryProperties.type, new PdfName(this.dictionaryProperties.action));\n };\n Object.defineProperty(PdfAction.prototype, \"element\", {\n // IPdfWrapper Members\n /**\n * Gets the `Element` as IPdfPrimitive class.\n * @private\n */\n get: function () {\n return this.dictionary;\n },\n enumerable: true,\n configurable: true\n });\n return PdfAction;\n}());\nexport { PdfAction };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { PdfAction } from './action';\nimport { PdfString } from './../primitives/pdf-string';\nimport { PdfName } from './../primitives/pdf-name';\n/**\n * `PdfUriAction` class for initialize the uri related internals.\n * @private\n */\nvar PdfUriAction = /** @class */ (function (_super) {\n __extends(PdfUriAction, _super);\n function PdfUriAction(uri) {\n var _this = _super.call(this) || this;\n // Fields\n /**\n * Specifies the `uri` string.\n * @default ''.\n * @private\n */\n _this.uniformResourceIdentifier = '';\n return _this;\n }\n Object.defineProperty(PdfUriAction.prototype, \"uri\", {\n // Properties\n /**\n * Gets and Sets the value of `Uri`.\n * @private\n */\n get: function () {\n return this.uniformResourceIdentifier;\n },\n set: function (value) {\n this.uniformResourceIdentifier = value;\n this.dictionary.items.setValue(this.dictionaryProperties.uri, new PdfString(this.uniformResourceIdentifier));\n },\n enumerable: true,\n configurable: true\n });\n // Implementation\n /**\n * `Initialize` the internals.\n * @private\n */\n PdfUriAction.prototype.initialize = function () {\n _super.prototype.initialize.call(this);\n this.dictionary.items.setValue(this.dictionaryProperties.s, new PdfName(this.dictionaryProperties.uri));\n };\n return PdfUriAction;\n}(PdfAction));\nexport { PdfUriAction };\n","import { PdfColorSpace } from './enum';\nimport { Operators } from './../input-output/pdf-operators';\nimport { Dictionary } from './../collections/dictionary';\nimport { PdfNumber } from './../primitives/pdf-number';\nimport { PdfArray } from './../primitives/pdf-array';\n/**\n * Implements structures and routines working with `color`.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a new page to the document\n * let page1 : PdfPage = document.pages.add();\n * // set the font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * //\n * // set color\n * let brushColor : PdfColor = new PdfColor(0, 0, 0);\n * //\n * // create black brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(brushColor);\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(0, 0));\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n * @default black color\n */\nvar PdfColor = /** @class */ (function () {\n function PdfColor(color1, color2, color3, color4) {\n if (color1 instanceof PdfColor) {\n this.redColor = color1.r;\n this.greenColor = color1.g;\n this.blueColor = color1.b;\n this.grayColor = color1.gray;\n this.alpha = color1.alpha;\n this.filled = (this.alpha !== 0);\n }\n else if (typeof color1 === 'number' && typeof color2 === 'number' && typeof color3 === 'number' &&\n typeof color4 === 'undefined') {\n this.constructor(PdfColor.maxColourChannelValue, color1, color2, color3); //doubt-byte/float\n }\n else if (typeof color1 === 'number' && typeof color2 === 'number' && typeof color3 === 'number' && typeof color4 === 'number') {\n this.redColor = color2;\n this.cyanColor = 0;\n this.greenColor = color3;\n this.magentaColor = 0;\n this.blueColor = color4;\n this.yellowColor = 0;\n this.blackColor = 0;\n this.grayColor = 0;\n this.alpha = color1;\n this.filled = true;\n this.assignCMYK(color2, color3, color4);\n }\n }\n /**\n * `Calculate and assign` cyan, megenta, yellow colors from rgb values..\n * @private\n */\n PdfColor.prototype.assignCMYK = function (r, g, b) {\n var red = r / PdfColor.maxColourChannelValue;\n var green = g / PdfColor.maxColourChannelValue;\n var blue = b / PdfColor.maxColourChannelValue;\n var black = PdfNumber.min(1 - red, 1 - green, 1 - blue);\n var cyan = (black === 1.0) ? 0 : (1 - red - black) / (1 - black);\n var magenta = (black === 1.0) ? 0 : (1 - green - black) / (1 - black);\n var yellow = (black === 1.0) ? 0 : (1 - blue - black) / (1 - black);\n this.blackColor = black;\n this.cyanColor = cyan;\n this.magentaColor = magenta;\n this.yellowColor = yellow;\n };\n Object.defineProperty(PdfColor.prototype, \"r\", {\n //Properties\n // public static get Empty():PdfColor\n // {\n // return this.s_emptyColor\n // }\n /**\n * Gets or sets `Red` channel value.\n * @private\n */\n get: function () {\n return this.redColor;\n },\n set: function (value) {\n this.redColor = value;\n this.assignCMYK(this.redColor, this.greenColor, this.blueColor);\n this.filled = true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfColor.prototype, \"red\", {\n /**\n * Gets the `Red` color\n * @private\n */\n get: function () {\n return (this.r / PdfColor.maxColourChannelValue);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfColor.prototype, \"b\", {\n /**\n * Gets or sets `Blue` channel value.\n * @private\n */\n get: function () {\n return this.blueColor;\n },\n set: function (value) {\n this.blueColor = value;\n this.assignCMYK(this.redColor, this.greenColor, this.blueColor);\n this.filled = true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfColor.prototype, \"blue\", {\n /**\n * Gets the `blue` color.\n * @private\n */\n get: function () {\n return (this.b / PdfColor.maxColourChannelValue);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfColor.prototype, \"g\", {\n /**\n * Gets or sets `Green` channel value.\n * @private\n */\n get: function () {\n return this.greenColor;\n },\n set: function (value) {\n this.greenColor = value;\n this.assignCMYK(this.redColor, this.greenColor, this.blueColor);\n this.filled = true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfColor.prototype, \"green\", {\n /**\n * Gets the `Green` color.\n * @private\n */\n get: function () {\n return (this.g / PdfColor.maxColourChannelValue);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfColor.prototype, \"gray\", {\n /**\n * Gets or sets `Gray` channel value.\n * @private\n */\n get: function () {\n return ((((this.redColor + this.greenColor) + this.blueColor)) / (PdfColor.maxColourChannelValue * 3));\n },\n set: function (value) {\n if (value < 0) {\n this.grayColor = 0;\n }\n else if (value > 1) {\n this.grayColor = 1;\n }\n else {\n this.grayColor = value;\n }\n this.r = (this.grayColor * PdfColor.maxColourChannelValue);\n this.g = (this.grayColor * PdfColor.maxColourChannelValue);\n this.b = (this.grayColor * PdfColor.maxColourChannelValue);\n this.assignCMYK(this.redColor, this.greenColor, this.blueColor);\n this.filled = true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfColor.prototype, \"isEmpty\", {\n /**\n * Gets whether the PDFColor `is Empty` or not.\n * @private\n */\n get: function () {\n return !this.filled;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfColor.prototype, \"a\", {\n /**\n * Gets or sets `Alpha` channel value.\n * @private\n */\n get: function () {\n return this.alpha;\n },\n set: function (value) {\n if (value < 0) {\n this.alpha = 0;\n }\n else {\n // if (this.alpha !== value) {\n this.alpha = value;\n // }\n }\n this.filled = true;\n },\n enumerable: true,\n configurable: true\n });\n //Public methods\n /**\n * Converts `PDFColor to PDF string` representation.\n * @private\n */\n PdfColor.prototype.toString = function (colorSpace, stroke) {\n if (this.isEmpty) {\n return '';\n }\n return this.rgbToString(stroke);\n };\n /**\n * Sets `RGB` color.\n * @private\n */\n PdfColor.prototype.rgbToString = function (ifStroking) {\n var r = this.r;\n var g = this.g;\n var b = this.b;\n var key = (r << 16) + (g << 8) + b;\n if (ifStroking) {\n key += 1 << 24;\n }\n var colour = '';\n var obj = null;\n if (PdfColor.rgbStrings.containsKey(key)) {\n obj = PdfColor.rgbStrings.getValue(key);\n }\n if (obj == null) {\n var red = r / PdfColor.maxColourChannelValue;\n var green = g / PdfColor.maxColourChannelValue;\n var blue = b / PdfColor.maxColourChannelValue;\n if (ifStroking) {\n colour = red.toString() + ' ' + green.toString() + ' ' + blue.toString() + ' RG';\n }\n else {\n colour = red.toString() + ' ' + green.toString() + ' ' + blue.toString() + ' rg';\n }\n PdfColor.rgbStrings.setValue(key, colour);\n }\n else {\n colour = obj.toString();\n }\n return colour + Operators.newLine;\n };\n /**\n * Converts `colour to a PDF array`.\n * @private\n */\n PdfColor.prototype.toArray = function (colorSpace) {\n var array = new PdfArray();\n switch (colorSpace) {\n case PdfColorSpace.Rgb:\n array.add(new PdfNumber(this.red));\n array.add(new PdfNumber(this.green));\n array.add(new PdfNumber(this.blue));\n break;\n default:\n throw new Error('NotSupportedException : Unsupported colour space.');\n }\n return array;\n };\n //Fields\n /**\n * Holds `RGB colors` converted into strings.\n * @private\n */\n PdfColor.rgbStrings = new Dictionary();\n /**\n * Holds Gray scale colors converted into strings for `stroking`.\n * @private\n */\n PdfColor.grayStringsSroke = new Dictionary();\n /**\n * Holds Gray scale colors converted into strings for `filling`.\n * @private\n */\n PdfColor.grayStringsFill = new Dictionary();\n /**\n * `Max value` of color channel.\n * @private\n */\n PdfColor.maxColourChannelValue = 255.0;\n return PdfColor;\n}());\nexport { PdfColor };\n","/**\n * public Enum for `PdfFontStyle`.\n * @private\n */\nexport var PdfFontStyle;\n(function (PdfFontStyle) {\n /**\n * Specifies the type of `Regular`.\n * @private\n */\n PdfFontStyle[PdfFontStyle[\"Regular\"] = 0] = \"Regular\";\n /**\n * Specifies the type of `Bold`.\n * @private\n */\n PdfFontStyle[PdfFontStyle[\"Bold\"] = 1] = \"Bold\";\n /**\n * Specifies the type of `Italic`.\n * @private\n */\n PdfFontStyle[PdfFontStyle[\"Italic\"] = 2] = \"Italic\";\n /**\n * Specifies the type of `Underline`.\n * @private\n */\n PdfFontStyle[PdfFontStyle[\"Underline\"] = 4] = \"Underline\";\n /**\n * Specifies the type of `Strikeout`.\n * @private\n */\n PdfFontStyle[PdfFontStyle[\"Strikeout\"] = 8] = \"Strikeout\";\n})(PdfFontStyle || (PdfFontStyle = {}));\n/**\n * Specifies the font family from the standard font.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a new page to the document\n * let page1 : PdfPage = document.pages.add();\n * // create new standard font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // create black brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(0, 0));\n * // save the document\n * document.save('output.pdf');\n * ```\n */\nexport var PdfFontFamily;\n(function (PdfFontFamily) {\n /**\n * Specifies the `Helvetica` font.\n */\n PdfFontFamily[PdfFontFamily[\"Helvetica\"] = 0] = \"Helvetica\";\n /**\n * Specifies the `Courier` font.\n */\n PdfFontFamily[PdfFontFamily[\"Courier\"] = 1] = \"Courier\";\n /**\n * Specifies the `TimesRoman` font.\n */\n PdfFontFamily[PdfFontFamily[\"TimesRoman\"] = 2] = \"TimesRoman\";\n /**\n * Specifies the `Symbol` font.\n */\n PdfFontFamily[PdfFontFamily[\"Symbol\"] = 3] = \"Symbol\";\n /**\n * Specifies the `ZapfDingbats` font.\n */\n PdfFontFamily[PdfFontFamily[\"ZapfDingbats\"] = 4] = \"ZapfDingbats\";\n})(PdfFontFamily || (PdfFontFamily = {}));\n/**\n * public Enum for `PdfFontType`.\n * @private\n */\nexport var PdfFontType;\n(function (PdfFontType) {\n /**\n * Specifies the type of `Standard`.\n * @private\n */\n PdfFontType[PdfFontType[\"Standard\"] = 0] = \"Standard\";\n /**\n * Specifies the type of `TrueType`.\n * @private\n */\n PdfFontType[PdfFontType[\"TrueType\"] = 1] = \"TrueType\";\n /**\n * Specifies the type of `TrueTypeEmbedded`.\n * @private\n */\n PdfFontType[PdfFontType[\"TrueTypeEmbedded\"] = 2] = \"TrueTypeEmbedded\";\n})(PdfFontType || (PdfFontType = {}));\n/**\n * public Enum for `PdfWordWrapType`.\n * @private\n */\nexport var PdfWordWrapType;\n(function (PdfWordWrapType) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n PdfWordWrapType[PdfWordWrapType[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `Word`.\n * @private\n */\n PdfWordWrapType[PdfWordWrapType[\"Word\"] = 1] = \"Word\";\n /**\n * Specifies the type of `WordOnly`.\n * @private\n */\n PdfWordWrapType[PdfWordWrapType[\"WordOnly\"] = 2] = \"WordOnly\";\n /**\n * Specifies the type of `Character`.\n * @private\n */\n PdfWordWrapType[PdfWordWrapType[\"Character\"] = 3] = \"Character\";\n})(PdfWordWrapType || (PdfWordWrapType = {}));\n/**\n * public Enum for `PdfSubSuperScript`.\n * @private\n */\nexport var PdfSubSuperScript;\n(function (PdfSubSuperScript) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n PdfSubSuperScript[PdfSubSuperScript[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `SuperScript`.\n * @private\n */\n PdfSubSuperScript[PdfSubSuperScript[\"SuperScript\"] = 1] = \"SuperScript\";\n /**\n * Specifies the type of `SubScript`.\n * @private\n */\n PdfSubSuperScript[PdfSubSuperScript[\"SubScript\"] = 2] = \"SubScript\";\n})(PdfSubSuperScript || (PdfSubSuperScript = {}));\n/**\n * public Enum for `FontEncoding`.\n * @private\n */\nexport var FontEncoding;\n(function (FontEncoding) {\n /**\n * Specifies the type of `Unknown`.\n * @private\n */\n FontEncoding[FontEncoding[\"Unknown\"] = 0] = \"Unknown\";\n /**\n * Specifies the type of `StandardEncoding`.\n * @private\n */\n FontEncoding[FontEncoding[\"StandardEncoding\"] = 1] = \"StandardEncoding\";\n /**\n * Specifies the type of `MacRomanEncoding`.\n * @private\n */\n FontEncoding[FontEncoding[\"MacRomanEncoding\"] = 2] = \"MacRomanEncoding\";\n /**\n * Specifies the type of `MacExpertEncoding`.\n * @private\n */\n FontEncoding[FontEncoding[\"MacExpertEncoding\"] = 3] = \"MacExpertEncoding\";\n /**\n * Specifies the type of `WinAnsiEncoding`.\n * @private\n */\n FontEncoding[FontEncoding[\"WinAnsiEncoding\"] = 4] = \"WinAnsiEncoding\";\n /**\n * Specifies the type of `PdfDocEncoding`.\n * @private\n */\n FontEncoding[FontEncoding[\"PdfDocEncoding\"] = 5] = \"PdfDocEncoding\";\n /**\n * Specifies the type of `IdentityH`.\n * @private\n */\n FontEncoding[FontEncoding[\"IdentityH\"] = 6] = \"IdentityH\";\n})(FontEncoding || (FontEncoding = {}));\n/**\n * public Enum for `TtfCmapFormat`.\n * @private\n */\nexport var TtfCmapFormat;\n(function (TtfCmapFormat) {\n /**\n * This is the Apple standard character to glyph index mapping table.\n * @private\n */\n TtfCmapFormat[TtfCmapFormat[\"Apple\"] = 0] = \"Apple\";\n /**\n * This is the Microsoft standard character to glyph index mapping table.\n * @private\n */\n TtfCmapFormat[TtfCmapFormat[\"Microsoft\"] = 4] = \"Microsoft\";\n /**\n * Format 6: Trimmed table mapping.\n * @private\n */\n TtfCmapFormat[TtfCmapFormat[\"Trimmed\"] = 6] = \"Trimmed\";\n})(TtfCmapFormat || (TtfCmapFormat = {}));\n/**\n * Enumerator that implements CMAP encodings.\n * @private\n */\nexport var TtfCmapEncoding;\n(function (TtfCmapEncoding) {\n /**\n * Unknown encoding.\n * @private\n */\n TtfCmapEncoding[TtfCmapEncoding[\"Unknown\"] = 0] = \"Unknown\";\n /**\n * When building a symbol font for Windows.\n * @private\n */\n TtfCmapEncoding[TtfCmapEncoding[\"Symbol\"] = 1] = \"Symbol\";\n /**\n * When building a Unicode font for Windows.\n * @private\n */\n TtfCmapEncoding[TtfCmapEncoding[\"Unicode\"] = 2] = \"Unicode\";\n /**\n * For font that will be used on a Macintosh.\n * @private\n */\n TtfCmapEncoding[TtfCmapEncoding[\"Macintosh\"] = 3] = \"Macintosh\";\n})(TtfCmapEncoding || (TtfCmapEncoding = {}));\n/**\n * Ttf platform ID.\n * @private\n */\nexport var TtfPlatformID;\n(function (TtfPlatformID) {\n /**\n * Apple platform.\n * @private\n */\n TtfPlatformID[TtfPlatformID[\"AppleUnicode\"] = 0] = \"AppleUnicode\";\n /**\n * Macintosh platform.\n * @private\n */\n TtfPlatformID[TtfPlatformID[\"Macintosh\"] = 1] = \"Macintosh\";\n /**\n * Iso platform.\n * @private\n */\n TtfPlatformID[TtfPlatformID[\"Iso\"] = 2] = \"Iso\";\n /**\n * Microsoft platform.\n * @private\n */\n TtfPlatformID[TtfPlatformID[\"Microsoft\"] = 3] = \"Microsoft\";\n})(TtfPlatformID || (TtfPlatformID = {}));\n/**\n * Microsoft encoding ID.\n * @private\n */\nexport var TtfMicrosoftEncodingID;\n(function (TtfMicrosoftEncodingID) {\n /**\n * Undefined encoding.\n * @private\n */\n TtfMicrosoftEncodingID[TtfMicrosoftEncodingID[\"Undefined\"] = 0] = \"Undefined\";\n /**\n * Unicode encoding.\n * @private\n */\n TtfMicrosoftEncodingID[TtfMicrosoftEncodingID[\"Unicode\"] = 1] = \"Unicode\";\n})(TtfMicrosoftEncodingID || (TtfMicrosoftEncodingID = {}));\n/**\n * Macintosh encoding ID.\n * @private\n */\nexport var TtfMacintoshEncodingID;\n(function (TtfMacintoshEncodingID) {\n /**\n * Roman encoding.\n * @private\n */\n TtfMacintoshEncodingID[TtfMacintoshEncodingID[\"Roman\"] = 0] = \"Roman\";\n /**\n * Japanese encoding.\n * @private\n */\n TtfMacintoshEncodingID[TtfMacintoshEncodingID[\"Japanese\"] = 1] = \"Japanese\";\n /**\n * Chinese encoding.\n * @private\n */\n TtfMacintoshEncodingID[TtfMacintoshEncodingID[\"Chinese\"] = 2] = \"Chinese\";\n})(TtfMacintoshEncodingID || (TtfMacintoshEncodingID = {}));\n/**\n * Enumerator that implements font descriptor flags.\n * @private\n */\nexport var FontDescriptorFlags;\n(function (FontDescriptorFlags) {\n /**\n * All glyphs have the same width (as opposed to proportional or variable-pitch fonts, which have different widths).\n * @private\n */\n FontDescriptorFlags[FontDescriptorFlags[\"FixedPitch\"] = 1] = \"FixedPitch\";\n /**\n * Glyphs have serifs, which are short strokes drawn at an angle on the top and\n * bottom of glyph stems (as opposed to sans serif fonts, which do not).\n * @private\n */\n FontDescriptorFlags[FontDescriptorFlags[\"Serif\"] = 2] = \"Serif\";\n /**\n * Font contains glyphs outside the Adobe standard Latin character set. The\n * flag and the nonsymbolic flag cannot both be set or both be clear.\n * @private\n */\n FontDescriptorFlags[FontDescriptorFlags[\"Symbolic\"] = 4] = \"Symbolic\";\n /**\n * Glyphs resemble cursive handwriting.\n * @private\n */\n FontDescriptorFlags[FontDescriptorFlags[\"Script\"] = 8] = \"Script\";\n /**\n * Font uses the Adobe standard Latin character set or a subset of it.\n * @private\n */\n FontDescriptorFlags[FontDescriptorFlags[\"Nonsymbolic\"] = 32] = \"Nonsymbolic\";\n /**\n * Glyphs have dominant vertical strokes that are slanted.\n * @private\n */\n FontDescriptorFlags[FontDescriptorFlags[\"Italic\"] = 64] = \"Italic\";\n /**\n * Bold font.\n * @private\n */\n FontDescriptorFlags[FontDescriptorFlags[\"ForceBold\"] = 262144] = \"ForceBold\";\n})(FontDescriptorFlags || (FontDescriptorFlags = {}));\n/**\n * true type font composite glyph flags.\n * @private\n */\nexport var TtfCompositeGlyphFlags;\n(function (TtfCompositeGlyphFlags) {\n /**\n * The Arg1And2AreWords.\n * @private\n */\n TtfCompositeGlyphFlags[TtfCompositeGlyphFlags[\"Arg1And2AreWords\"] = 1] = \"Arg1And2AreWords\";\n /**\n * The ArgsAreXyValues.\n * @private\n */\n TtfCompositeGlyphFlags[TtfCompositeGlyphFlags[\"ArgsAreXyValues\"] = 2] = \"ArgsAreXyValues\";\n /**\n * The RoundXyToGrid.\n * @private\n */\n TtfCompositeGlyphFlags[TtfCompositeGlyphFlags[\"RoundXyToGrid\"] = 4] = \"RoundXyToGrid\";\n /**\n * The WeHaveScale.\n * @private\n */\n TtfCompositeGlyphFlags[TtfCompositeGlyphFlags[\"WeHaveScale\"] = 8] = \"WeHaveScale\";\n /**\n * The Reserved.\n * @private\n */\n TtfCompositeGlyphFlags[TtfCompositeGlyphFlags[\"Reserved\"] = 16] = \"Reserved\";\n /**\n * The MoreComponents.\n * @private\n */\n TtfCompositeGlyphFlags[TtfCompositeGlyphFlags[\"MoreComponents\"] = 32] = \"MoreComponents\";\n /**\n * The WeHaveAnXyScale.\n * @private\n */\n TtfCompositeGlyphFlags[TtfCompositeGlyphFlags[\"WeHaveAnXyScale\"] = 64] = \"WeHaveAnXyScale\";\n /**\n * The WeHaveTwoByTwo\n */\n TtfCompositeGlyphFlags[TtfCompositeGlyphFlags[\"WeHaveTwoByTwo\"] = 128] = \"WeHaveTwoByTwo\";\n /**\n * The WeHaveInstructions.\n */\n TtfCompositeGlyphFlags[TtfCompositeGlyphFlags[\"WeHaveInstructions\"] = 256] = \"WeHaveInstructions\";\n /**\n * The UseMyMetrics.\n */\n TtfCompositeGlyphFlags[TtfCompositeGlyphFlags[\"UseMyMetrics\"] = 512] = \"UseMyMetrics\";\n})(TtfCompositeGlyphFlags || (TtfCompositeGlyphFlags = {}));\n","/**\n * Coordinates of Position for `PointF`.\n * @private\n */\nvar PointF = /** @class */ (function () {\n function PointF(x, y) {\n if (typeof x === 'undefined') {\n this.x = 0;\n this.y = 0;\n }\n else {\n if (x !== null) {\n this.x = x;\n }\n else {\n this.x = 0;\n }\n if (y !== null) {\n this.y = y;\n }\n else {\n this.y = 0;\n }\n }\n }\n return PointF;\n}());\nexport { PointF };\n/**\n * Width and Height as `Size`.\n * @private\n */\nvar SizeF = /** @class */ (function () {\n function SizeF(width, height) {\n if (typeof height === 'undefined') {\n this.height = 0;\n this.width = 0;\n }\n else {\n if (height !== null) {\n this.height = height;\n }\n else {\n this.height = 0;\n }\n if (width !== null) {\n this.width = width;\n }\n else {\n this.width = 0;\n }\n }\n }\n return SizeF;\n}());\nexport { SizeF };\n/**\n * `RectangleF` with Position and size.\n * @private\n */\nvar RectangleF = /** @class */ (function () {\n function RectangleF(arg1, arg2, arg3, arg4) {\n if (typeof arg1 === typeof arg1 && typeof arg1 === 'undefined') {\n this.x = 0;\n this.y = 0;\n this.height = 0;\n this.width = 0;\n }\n else {\n if (arg1 instanceof PointF && arg2 instanceof SizeF && typeof arg3 === 'undefined') {\n var pointf = arg1;\n this.x = pointf.x;\n this.y = pointf.y;\n var sizef = arg2;\n this.height = sizef.height;\n this.width = sizef.width;\n }\n else {\n var x = arg1;\n var y = arg2;\n var width = arg3;\n var height = arg4;\n this.x = x;\n this.y = y;\n this.height = height;\n this.width = width;\n }\n }\n }\n return RectangleF;\n}());\nexport { RectangleF };\n/**\n * `Rectangle` with left, right, top and bottom.\n * @private\n */\nvar Rectangle = /** @class */ (function () {\n /**\n * Instance of `RectangleF` class with X, Y, Width and Height.\n * @private\n */\n function Rectangle(left, top, right, bottom) {\n this.left = left;\n this.top = top;\n this.right = right;\n this.bottom = bottom;\n }\n Object.defineProperty(Rectangle.prototype, \"width\", {\n /**\n * Gets a value of width\n */\n get: function () {\n return this.right - this.left;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rectangle.prototype, \"height\", {\n /**\n * Gets a value of height\n */\n get: function () {\n return this.bottom - this.top;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rectangle.prototype, \"topLeft\", {\n /**\n * Gets a value of Top and Left\n */\n get: function () {\n return new PointF(this.left, this.top);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rectangle.prototype, \"size\", {\n /**\n * Gets a value of size\n */\n get: function () {\n return new SizeF(this.width, this.height);\n },\n enumerable: true,\n configurable: true\n });\n Rectangle.prototype.toString = function () {\n return this.topLeft + 'x' + this.size;\n };\n return Rectangle;\n}());\nexport { Rectangle };\n","/**\n * `PdfBrush` class provides objects used to fill the interiors of graphical shapes such as rectangles,\n * ellipses, pies, polygons, and paths.\n * @private\n */\nvar PdfBrush = /** @class */ (function () {\n /**\n * Creates instanceof `PdfBrush` class.\n * @hidden\n * @private\n */\n function PdfBrush() {\n //\n }\n return PdfBrush;\n}());\nexport { PdfBrush };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { PdfColor } from './../pdf-color';\nimport { PdfColorSpace } from './../enum';\nimport { PdfBrush } from './pdf-brush';\n/**\n * Represents a brush that fills any object with a solid color.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // set font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(10, 10));\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\nvar PdfSolidBrush = /** @class */ (function (_super) {\n __extends(PdfSolidBrush, _super);\n //Constructors\n /**\n * Initializes a new instance of the `PdfSolidBrush` class.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // set font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(10, 10));\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n * @param color color of the brush\n */\n function PdfSolidBrush(color) {\n var _this = _super.call(this) || this;\n _this.pdfColor = color;\n return _this;\n }\n Object.defineProperty(PdfSolidBrush.prototype, \"color\", {\n //Properties\n /**\n * Gets or sets the `color` of the brush.\n * @private\n */\n get: function () {\n return this.pdfColor;\n },\n set: function (value) {\n this.pdfColor = value;\n },\n enumerable: true,\n configurable: true\n });\n //Implementation\n /**\n * `Monitors` the changes of the brush and modify PDF state respectively.\n * @private\n */\n PdfSolidBrush.prototype.monitorChanges = function (brush, streamWriter, getResources, saveChanges, currentColorSpace) {\n if (streamWriter == null) {\n throw new Error('ArgumentNullException:streamWriter');\n }\n var diff = false;\n if (brush == null) {\n diff = true;\n streamWriter.setColorAndSpace(this.pdfColor, currentColorSpace, false);\n return diff;\n }\n else {\n var sBrush = brush;\n diff = true;\n streamWriter.setColorAndSpace(this.pdfColor, currentColorSpace, false);\n return diff;\n }\n };\n /**\n * `Resets` the changes, which were made by the brush.\n * @private\n */\n PdfSolidBrush.prototype.resetChanges = function (streamWriter) {\n streamWriter.setColorAndSpace(new PdfColor(0, 0, 0), PdfColorSpace.Rgb, false);\n };\n return PdfSolidBrush;\n}(PdfBrush));\nexport { PdfSolidBrush };\n","/**\n * PdfStringFormat.ts class for EJ2-PDF\n */\nimport { PdfVerticalAlignment } from './../../graphics/enum';\nimport { PdfSubSuperScript, PdfWordWrapType } from './../../graphics/fonts/enum';\n/**\n * `PdfStringFormat` class represents the text layout information on PDF.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // set font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * //\n * // set the format for string\n * let stringFormat : PdfStringFormat = new PdfStringFormat();\n * // set the text alignment\n * stringFormat.alignment = PdfTextAlignment.Center;\n * // set the vertical alignment\n * stringFormat.lineAlignment = PdfVerticalAlignment.Middle;\n * //\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(10, 10), stringFormat);\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\nvar PdfStringFormat = /** @class */ (function () {\n function PdfStringFormat(arg1, arg2) {\n /**\n * The `scaling factor` of the text being drawn.\n * @private\n */\n this.scalingFactor = 100.0;\n if (typeof arg1 === 'undefined') {\n this.internalLineLimit = true;\n this.wordWrapType = PdfWordWrapType.Word;\n }\n else if (typeof arg1 === 'string') {\n this.constructor();\n }\n else {\n if (typeof arg2 === 'undefined') {\n this.constructor();\n this.textAlignment = arg1;\n }\n else {\n this.constructor(arg1);\n this.verticalAlignment = arg2;\n }\n }\n }\n Object.defineProperty(PdfStringFormat.prototype, \"alignment\", {\n //Properties\n /**\n * Gets or sets the `horizontal` text alignment\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // set font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * //\n * // set the format for string\n * let stringFormat : PdfStringFormat = new PdfStringFormat();\n * // set the text alignment\n * stringFormat.alignment = PdfTextAlignment.Center;\n * //\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(10, 10), stringFormat);\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n return this.textAlignment;\n },\n set: function (value) {\n this.textAlignment = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"lineAlignment\", {\n /**\n * Gets or sets the `vertical` text alignment.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // set font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * //\n * // set the format for string\n * let stringFormat : PdfStringFormat = new PdfStringFormat();\n * // set the vertical alignment\n * stringFormat.lineAlignment = PdfVerticalAlignment.Middle;\n * //\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(10, 10), stringFormat);\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n if (typeof this.verticalAlignment === 'undefined' || this.verticalAlignment == null) {\n return PdfVerticalAlignment.Top;\n }\n else {\n return this.verticalAlignment;\n }\n },\n set: function (value) {\n this.verticalAlignment = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"rightToLeft\", {\n /**\n * Gets or sets the value that indicates text `direction` mode.\n * @private\n */\n get: function () {\n if (typeof this.isRightToLeft === 'undefined' || this.isRightToLeft == null) {\n return false;\n }\n else {\n return this.isRightToLeft;\n }\n },\n set: function (value) {\n this.isRightToLeft = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"characterSpacing\", {\n /**\n * Gets or sets value that indicates a `size` among the characters in the text.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // set font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * //\n * // set the format for string\n * let stringFormat : PdfStringFormat = new PdfStringFormat();\n * // set character spacing\n * stringFormat.characterSpacing = 10;\n * //\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(10, 10), stringFormat);\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n if (typeof this.internalCharacterSpacing === 'undefined' || this.internalCharacterSpacing == null) {\n return 0;\n }\n else {\n return this.internalCharacterSpacing;\n }\n },\n set: function (value) {\n this.internalCharacterSpacing = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"wordSpacing\", {\n /**\n * Gets or sets value that indicates a `size` among the words in the text.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // set font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * //\n * // set the format for string\n * let stringFormat : PdfStringFormat = new PdfStringFormat();\n * // set word spacing\n * stringFormat.wordSpacing = 10;\n * //\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(10, 10), stringFormat);\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n if (typeof this.internalWordSpacing === 'undefined' || this.internalWordSpacing == null) {\n return 0;\n }\n else {\n return this.internalWordSpacing;\n }\n },\n set: function (value) {\n this.internalWordSpacing = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"lineSpacing\", {\n /**\n * Gets or sets value that indicates the `vertical distance` between the baselines of adjacent lines of text.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // set font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * // set string\n * let text : string = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor\n * incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitati';\n * // set rectangle bounds\n * let rectangle : RectangleF = new RectangleF({x : 0, y : 0}, {width : 300, height : 100})\n * //\n * // set the format for string\n * let stringFormat : PdfStringFormat = new PdfStringFormat();\n * // set line spacing\n * stringFormat.lineSpacing = 10;\n * //\n * // draw the text\n * page1.graphics.drawString(text, font, blackBrush, rectangle, stringFormat);\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n if (typeof this.leading === 'undefined' || this.leading == null) {\n return 0;\n }\n else {\n return this.leading;\n }\n },\n set: function (value) {\n this.leading = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"clipPath\", {\n /**\n * Gets or sets a value indicating whether the text is `clipped` or not.\n * @private\n */\n get: function () {\n if (typeof this.clip === 'undefined' || this.clip == null) {\n return false;\n }\n else {\n return this.clip;\n }\n },\n set: function (value) {\n this.clip = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"subSuperScript\", {\n /**\n * Gets or sets value indicating whether the text is in `subscript or superscript` mode.\n * @private\n */\n get: function () {\n if (typeof this.pdfSubSuperScript === 'undefined' || this.pdfSubSuperScript == null) {\n return PdfSubSuperScript.None;\n }\n else {\n return this.pdfSubSuperScript;\n }\n },\n set: function (value) {\n this.pdfSubSuperScript = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"paragraphIndent\", {\n /**\n * Gets or sets the `indent` of the first line in the paragraph.\n * @private\n */\n get: function () {\n if (typeof this.internalParagraphIndent === 'undefined' || this.internalParagraphIndent == null) {\n return 0;\n }\n else {\n return this.internalParagraphIndent;\n }\n },\n set: function (value) {\n this.internalParagraphIndent = value;\n this.firstLineIndent = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"lineLimit\", {\n /**\n * Gets or sets a value indicating whether [`line limit`].\n * @private\n */\n get: function () {\n return this.internalLineLimit;\n },\n set: function (value) {\n this.internalLineLimit = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"measureTrailingSpaces\", {\n /**\n * Gets or sets a value indicating whether [`measure trailing spaces`].\n * @private\n */\n get: function () {\n if (typeof this.trailingSpaces === 'undefined' || this.trailingSpaces == null) {\n return false;\n }\n else {\n return this.trailingSpaces;\n }\n },\n set: function (value) {\n this.trailingSpaces = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"noClip\", {\n /**\n * Gets or sets a value indicating whether [`no clip`].\n * @private\n */\n get: function () {\n if (typeof this.isNoClip === 'undefined' || this.isNoClip == null) {\n return false;\n }\n else {\n return this.isNoClip;\n }\n },\n set: function (value) {\n this.isNoClip = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"wordWrap\", {\n /**\n * Gets or sets value indicating type of the text `wrapping`.\n * @private\n */\n get: function () {\n // if (typeof this.wrapType === 'undefined' || this.wrapType == null) {\n // return PdfWordWrapType.Word;\n // } else {\n return this.wordWrapType;\n // }\n },\n set: function (value) {\n this.wordWrapType = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"horizontalScalingFactor\", {\n /**\n * Gets or sets the `scaling factor`.\n * @private\n */\n get: function () {\n // if (typeof this.scalingFactor === 'undefined' || this.scalingFactor == null) {\n // return 100;\n // } else {\n return this.scalingFactor;\n // }\n },\n set: function (value) {\n if (value <= 0) {\n throw new Error('ArgumentOutOfRangeException:The scaling factor cant be less of equal to zero, ScalingFactor');\n }\n this.scalingFactor = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"firstLineIndent\", {\n /**\n * Gets or sets the `indent` of the first line in the text.\n * @private\n */\n get: function () {\n if (typeof this.initialLineIndent === 'undefined' || this.initialLineIndent == null) {\n return 0;\n }\n else {\n return this.initialLineIndent;\n }\n },\n set: function (value) {\n this.initialLineIndent = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Clones` the object.\n * @private\n */\n //IClonable implementation\n PdfStringFormat.prototype.clone = function () {\n var format = this;\n return format;\n };\n return PdfStringFormat;\n}());\nexport { PdfStringFormat };\n","import { SizeF, RectangleF, PointF } from './../../drawing/pdf-drawing';\nimport { PdfWordWrapType } from './enum';\nimport { StringTokenizer } from './string-tokenizer';\n/**\n * Class `lay outing the text`.\n */\nvar PdfStringLayouter = /** @class */ (function () {\n // Constructors\n /**\n * Initializes a new instance of the `StringLayouter` class.\n * @private\n */\n function PdfStringLayouter() {\n /**\n * Checks whether the x co-ordinate is need to set as client size or not.\n * @hidden\n * @private\n */\n this.isOverloadWithPosition = false;\n //\n }\n PdfStringLayouter.prototype.layout = function (arg1, arg2, arg3, arg4, arg5, arg6, arg7) {\n if (arg4 instanceof RectangleF) {\n this.initialize(arg1, arg2, arg3, arg4, arg5);\n this.isOverloadWithPosition = arg6;\n this.clientSize = arg7;\n var result = this.doLayout();\n this.clear();\n return result;\n }\n else {\n this.initialize(arg1, arg2, arg3, arg4);\n this.isOverloadWithPosition = arg5;\n this.clientSize = arg6;\n var result = this.doLayout();\n this.clear();\n return result;\n }\n };\n PdfStringLayouter.prototype.initialize = function (text, font, format, rectSize, pageHeight) {\n if (typeof pageHeight === 'number') {\n if (text == null) {\n throw new Error('ArgumentNullException:text');\n }\n if (font == null) {\n throw new Error('ArgumentNullException:font');\n }\n this.text = text;\n this.font = font;\n this.format = format;\n this.size = new SizeF(rectSize.width, rectSize.height);\n this.rectangle = rectSize;\n this.pageHeight = pageHeight;\n this.reader = new StringTokenizer(text);\n }\n else {\n this.initialize(text, font, format, new RectangleF(new PointF(0, 0), rectSize), 0);\n }\n };\n /**\n * `Clear` all resources.\n * @private\n */\n PdfStringLayouter.prototype.clear = function () {\n this.font = null;\n this.format = null;\n this.reader.close();\n this.reader = null;\n this.text = null;\n };\n /**\n * `Layouts` the text.\n * @private\n */\n PdfStringLayouter.prototype.doLayout = function () {\n var result = new PdfStringLayoutResult();\n var lineResult = new PdfStringLayoutResult();\n var lines = [];\n var line = this.reader.peekLine();\n var lineIndent = this.getLineIndent(true);\n while (line != null) {\n lineResult = this.layoutLine(line, lineIndent);\n // if (!lineResult.Empty) {\n var numSymbolsInserted = 0;\n /* tslint:disable */\n var returnedValue = this.copyToResult(result, lineResult, lines, /*out*/ numSymbolsInserted);\n /* tslint:enable */\n var success = returnedValue.success;\n numSymbolsInserted = returnedValue.numInserted;\n this.reader.readLine();\n line = this.reader.peekLine();\n lineIndent = this.getLineIndent(false);\n }\n this.finalizeResult(result, lines);\n return result;\n };\n /**\n * Returns `line indent` for the line.\n * @private\n */\n PdfStringLayouter.prototype.getLineIndent = function (firstLine) {\n var lineIndent = 0;\n if (this.format != null) {\n lineIndent = (firstLine) ? this.format.firstLineIndent : this.format.paragraphIndent;\n lineIndent = (this.size.width > 0) ? Math.min(this.size.width, lineIndent) : lineIndent;\n }\n return lineIndent;\n };\n /**\n * Calculates `height` of the line.\n * @private\n */\n PdfStringLayouter.prototype.getLineHeight = function () {\n var height = this.font.height;\n if (this.format != null && this.format.lineSpacing !== 0) {\n height = this.format.lineSpacing + this.font.height;\n }\n return height;\n };\n /**\n * Calculates `width` of the line.\n * @private\n */\n PdfStringLayouter.prototype.getLineWidth = function (line) {\n var width = this.font.getLineWidth(line, this.format);\n return width;\n };\n // tslint:disable\n /**\n * `Layouts` line.\n * @private\n */\n PdfStringLayouter.prototype.layoutLine = function (line, lineIndent) {\n var lineResult = new PdfStringLayoutResult();\n lineResult.layoutLineHeight = this.getLineHeight();\n var lines = [];\n var maxWidth = this.size.width;\n var lineWidth = this.getLineWidth(line) + lineIndent;\n var lineType = LineType.FirstParagraphLine;\n var readWord = true;\n // line is in bounds.\n if (maxWidth <= 0 || Math.round(lineWidth) <= Math.round(maxWidth)) {\n this.addToLineResult(lineResult, lines, line, lineWidth, LineType.NewLineBreak | lineType);\n }\n else {\n var builder = '';\n var curLine = '';\n lineWidth = lineIndent;\n var curIndent = lineIndent;\n var reader = new StringTokenizer(line);\n var word = reader.peekWord();\n var isSingleWord = false;\n while (word != null) {\n curLine = curLine + word;\n var curLineWidth = this.getLineWidth(curLine.toString()) + curIndent /*)*/;\n if (curLineWidth > maxWidth) {\n if (this.getWrapType() == PdfWordWrapType.None)\n break;\n if (this.getWrapType() != PdfWordWrapType.Character || !readWord) {\n var ln = builder.toString();\n if (ln.indexOf(' ') === -1) {\n isSingleWord = true;\n this.addToLineResult(lineResult, lines, curLine, lineWidth, LineType.LayoutBreak | lineType);\n }\n else {\n this.addToLineResult(lineResult, lines, ln, lineWidth, LineType.LayoutBreak | lineType);\n }\n if (this.isOverloadWithPosition) {\n maxWidth = this.clientSize.width;\n }\n curLine = '';\n builder = '';\n lineWidth = 0;\n curIndent = 0;\n curLineWidth = 0;\n lineType = LineType.None;\n if (isSingleWord) {\n reader.readWord();\n readWord = false;\n }\n word = (readWord) ? word : reader.peekWord();\n isSingleWord = false;\n readWord = true;\n }\n else {\n readWord = false;\n curLine = curLine + builder.toString();\n word = reader.peek().toString();\n }\n continue;\n }\n builder = builder + word;\n lineWidth = curLineWidth;\n if (readWord) {\n reader.readWord();\n word = reader.peekWord();\n isSingleWord = false;\n }\n else {\n reader.read();\n word = reader.peek().toString();\n }\n }\n if (builder.length > 0) {\n var ln = builder.toString();\n this.addToLineResult(lineResult, lines, ln, lineWidth, LineType.NewLineBreak | LineType.LastParagraphLine);\n }\n reader.close();\n }\n lineResult.layoutLines = [];\n for (var index = 0; index < lines.length; index++) {\n lineResult.layoutLines.push(lines[index]);\n }\n lines = [];\n return lineResult;\n };\n /**\n * `Adds` line to line result.\n * @private\n */\n PdfStringLayouter.prototype.addToLineResult = function (lineResult, lines, line, lineWidth, breakType) {\n var info = new LineInfo();\n info.text = line;\n info.width = lineWidth;\n info.lineType = breakType;\n lines.push(info);\n var size = lineResult.actualSize;\n size.height += this.getLineHeight();\n size.width = Math.max(size.width, lineWidth);\n lineResult.size = size;\n };\n /**\n * `Copies` layout result from line result to entire result. Checks whether we can proceed lay outing or not.\n * @private\n */\n PdfStringLayouter.prototype.copyToResult = function (result, lineResult, lines, \n /*out*/ numInserted) {\n var success = true;\n var allowPartialLines = (this.format != null && !this.format.lineLimit);\n var height = result.actualSize.height;\n var maxHeight = this.size.height;\n if ((this.pageHeight > 0) && (maxHeight + this.rectangle.y > this.pageHeight)) {\n maxHeight = this.rectangle.y - this.pageHeight;\n maxHeight = Math.max(maxHeight, -maxHeight);\n }\n numInserted = 0;\n for (var i = 0, len = lineResult.lines.length; i < len; i++) {\n var expHeight = height + lineResult.lineHeight;\n var info = lineResult.lines[i];\n numInserted += info.text.length;\n info = this.trimLine(info, (lines.length === 0));\n lines.push(info);\n // Update width.\n var size_1 = result.actualSize;\n size_1.width = Math.max(size_1.width, info.width);\n result.size = size_1;\n height = expHeight;\n }\n var size = result.actualSize;\n size.height = height;\n result.size = size;\n return { success: success, numInserted: numInserted };\n };\n /**\n * `Finalizes` final result.\n * @private\n */\n PdfStringLayouter.prototype.finalizeResult = function (result, lines) {\n result.layoutLines = [];\n for (var index = 0; index < lines.length; index++) {\n result.layoutLines.push(lines[index]);\n }\n result.layoutLineHeight = this.getLineHeight();\n lines = [];\n };\n /**\n * `Trims` whitespaces at the line.\n * @private\n */\n PdfStringLayouter.prototype.trimLine = function (info, firstLine) {\n var line = info.text;\n var lineWidth = info.width;\n // Trim start whitespaces if the line is not a start of the paragraph only.\n // let trimStartSpaces : boolean = ((info.LineType & LineType.FirstParagraphLine) === 0);\n var start = (this.format == null || !this.format.rightToLeft);\n var spaces = StringTokenizer.spaces;\n line = (start) ? line.trim() : line.trim();\n // Recalculate line width.\n if (line.length !== info.text.length) {\n lineWidth = this.getLineWidth(line);\n lineWidth += this.getLineIndent(firstLine);\n }\n info.text = line;\n info.width = lineWidth;\n return info;\n };\n /**\n * Returns `wrap` type.\n * @private\n */\n PdfStringLayouter.prototype.getWrapType = function () {\n var wrapType = (this.format != null) ? this.format.wordWrap : PdfWordWrapType.Word;\n return wrapType;\n };\n return PdfStringLayouter;\n}());\nexport { PdfStringLayouter };\n//Internal declaration\nvar PdfStringLayoutResult = /** @class */ (function () {\n function PdfStringLayoutResult() {\n }\n Object.defineProperty(PdfStringLayoutResult.prototype, \"remainder\", {\n // Properties\n /**\n * Gets the `text` which is not lay outed.\n * @private\n */\n get: function () {\n return this.textRemainder;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringLayoutResult.prototype, \"actualSize\", {\n /**\n * Gets the actual layout text `bounds`.\n * @private\n */\n get: function () {\n if (typeof this.size === 'undefined') {\n this.size = new SizeF(0, 0);\n }\n return this.size;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringLayoutResult.prototype, \"lines\", {\n /**\n * Gets layout `lines` information.\n * @private\n */\n get: function () {\n return this.layoutLines;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringLayoutResult.prototype, \"lineHeight\", {\n /**\n * Gets the `height` of the line.\n * @private\n */\n get: function () {\n return this.layoutLineHeight;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringLayoutResult.prototype, \"empty\", {\n /**\n * Gets value that indicates whether any layout text [`empty`].\n * @private\n */\n get: function () {\n return (this.layoutLines == null || this.layoutLines.length === 0);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringLayoutResult.prototype, \"lineCount\", {\n /**\n * Gets `number of` the layout lines.\n * @private\n */\n get: function () {\n var count = (!this.empty) ? this.layoutLines.length : 0;\n return count;\n },\n enumerable: true,\n configurable: true\n });\n return PdfStringLayoutResult;\n}());\nexport { PdfStringLayoutResult };\nvar LineInfo = /** @class */ (function () {\n function LineInfo() {\n }\n Object.defineProperty(LineInfo.prototype, \"lineType\", {\n //Properties\n /**\n * Gets the `type` of the line text.\n * @private\n */\n get: function () {\n return this.type;\n },\n set: function (value) {\n this.type = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LineInfo.prototype, \"text\", {\n /**\n * Gets the line `text`.\n * @private\n */\n get: function () {\n return this.content;\n },\n set: function (value) {\n this.content = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LineInfo.prototype, \"width\", {\n /**\n * Gets `width` of the line text.\n * @private\n */\n get: function () {\n return this.lineWidth;\n },\n set: function (value) {\n this.lineWidth = value;\n },\n enumerable: true,\n configurable: true\n });\n return LineInfo;\n}());\nexport { LineInfo };\n/**\n* Break type of the `line`.\n* @private\n*/\nexport var LineType;\n(function (LineType) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n LineType[LineType[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `NewLineBreak`.\n * @private\n */\n LineType[LineType[\"NewLineBreak\"] = 1] = \"NewLineBreak\";\n /**\n * Specifies the type of `LayoutBreak`.\n * @private\n */\n LineType[LineType[\"LayoutBreak\"] = 2] = \"LayoutBreak\";\n /**\n * Specifies the type of `FirstParagraphLine`.\n * @private\n */\n LineType[LineType[\"FirstParagraphLine\"] = 4] = \"FirstParagraphLine\";\n /**\n * Specifies the type of `LastParagraphLine`.\n * @private\n */\n LineType[LineType[\"LastParagraphLine\"] = 8] = \"LastParagraphLine\";\n})(LineType || (LineType = {}));\n","/**\n * StringTokenizer.ts class for EJ2-PDF\n * Utility class for working with strings.\n * @private\n */\nvar StringTokenizer = /** @class */ (function () {\n // Constructors\n /**\n * Initializes a new instance of the `StringTokenizer` class.\n * @private\n */\n function StringTokenizer(textValue) {\n /**\n * Current `position`.\n * @private\n */\n this.currentPosition = 0;\n if (textValue == null) {\n throw new Error('ArgumentNullException:text');\n }\n this.text = textValue;\n }\n Object.defineProperty(StringTokenizer.prototype, \"length\", {\n // Properties\n /**\n * Gets text `length`.\n * @private\n */\n get: function () {\n return this.text.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(StringTokenizer.prototype, \"position\", {\n /**\n * Gets or sets the position.\n * @private\n */\n get: function () {\n return this.currentPosition;\n },\n set: function (value) {\n this.currentPosition = value;\n },\n enumerable: true,\n configurable: true\n });\n StringTokenizer.getCharsCount = function (text, symbols) {\n if (typeof symbols === 'string') {\n if (text == null) {\n throw new Error('ArgumentNullException:wholeText');\n }\n var numSymbols = 0;\n var curIndex = 0;\n for (;;) {\n curIndex = text.indexOf(symbols, curIndex);\n if (curIndex === -1) {\n break;\n }\n else {\n numSymbols++;\n curIndex++;\n }\n }\n return numSymbols;\n }\n else {\n if (text == null) {\n throw new Error('ArgumentNullException:text');\n }\n if (symbols == null) {\n throw new Error('ArgumentNullException:symbols');\n }\n var count = 0;\n for (var i = 0, len = text.length; i < len; i++) {\n var ch = text[i];\n if (this.contains(symbols, ch)) {\n count++;\n }\n }\n return count;\n }\n };\n /**\n * Reads line of the text.\n * @private\n */\n StringTokenizer.prototype.readLine = function () {\n var pos = this.currentPosition;\n while (pos < this.length) {\n var ch = this.text[pos];\n switch (ch) {\n case '\\r':\n case '\\n': {\n var text = this.text.substring(this.currentPosition, pos - this.currentPosition);\n this.currentPosition = pos + 1;\n this.currentPosition++;\n return text;\n }\n }\n pos++;\n }\n // The remaining text.\n if (pos > this.currentPosition) {\n var text2 = this.text.substring(this.currentPosition, pos - this.currentPosition);\n this.currentPosition = pos;\n return text2;\n }\n return null;\n };\n /**\n * Reads line of the text.\n * @private\n */\n StringTokenizer.prototype.peekLine = function () {\n var pos = this.currentPosition;\n var line = this.readLine();\n this.currentPosition = pos;\n return line;\n };\n /**\n * Reads a word from the text.\n * @private\n */\n StringTokenizer.prototype.readWord = function () {\n var pos = this.currentPosition;\n while (pos < this.length) {\n var ch = this.text[pos];\n switch (ch) {\n case '\\r':\n case '\\n':\n var textValue = this.text.substr(this.currentPosition, pos - this.currentPosition);\n this.currentPosition = pos + 1;\n if (((ch === '\\r') && (this.currentPosition < this.length)) && (this.text[this.currentPosition] === '\\n')) {\n this.currentPosition++;\n }\n return textValue;\n case ' ':\n case '\\t': {\n if (pos === this.currentPosition) {\n pos++;\n }\n var text = this.text.substr(this.currentPosition, pos - this.currentPosition);\n this.currentPosition = pos;\n return text;\n }\n }\n pos++;\n }\n // The remaining text.\n if (pos > this.currentPosition) {\n var text2 = this.text.substr(this.currentPosition, pos - this.currentPosition);\n this.currentPosition = pos;\n return text2;\n }\n return null;\n };\n /**\n * Peeks a word from the text.\n * @private\n */\n StringTokenizer.prototype.peekWord = function () {\n var pos = this.currentPosition;\n var word = this.readWord();\n this.currentPosition = pos;\n return word;\n };\n StringTokenizer.prototype.read = function (count) {\n if (typeof count === 'undefined') {\n var ch = '0';\n return ch;\n }\n else {\n var num = 0;\n var builder = '';\n return builder;\n }\n };\n /**\n * Peeks char form the data.\n * @private\n */\n StringTokenizer.prototype.peek = function () {\n var ch = '0';\n return ch;\n };\n /**\n * Closes a reader.\n * @private\n */\n StringTokenizer.prototype.close = function () {\n this.text = null;\n };\n //Implementation\n /**\n * Checks whether array contains a symbol.\n * @private\n */\n StringTokenizer.contains = function (array, symbol) {\n var contains = false;\n for (var i = 0; i < array.length; i++) {\n if (array[i] === symbol) {\n contains = true;\n break;\n }\n }\n return contains;\n };\n // Constants\n /**\n * `Whitespace` symbol.\n * @private\n */\n StringTokenizer.whiteSpace = ' ';\n /**\n * `tab` symbol.\n * @private\n */\n StringTokenizer.tab = '\\t';\n /**\n * Array of `spaces`.\n * @private\n */\n StringTokenizer.spaces = [StringTokenizer.whiteSpace, StringTokenizer.tab];\n /**\n * `Pattern` for WhiteSpace.\n * @private\n */\n StringTokenizer.whiteSpacePattern = '^[ \\t]+$';\n return StringTokenizer;\n}());\nexport { StringTokenizer };\n","/**\n * PdfFont.ts class for EJ2-PDF\n */\nimport { PdfFontStyle } from './enum';\nimport { SizeF } from './../../drawing/pdf-drawing';\nimport { PdfStringFormat } from './pdf-string-format';\nimport { PdfStringLayouter } from './string-layouter';\nimport { StringTokenizer } from './string-tokenizer';\n/**\n * Defines a particular format for text, including font face, size, and style attributes.\n * @private\n */\nvar PdfFont = /** @class */ (function () {\n function PdfFont(size, style) {\n /**\n * `Style` of the font.\n * @private\n */\n this.fontStyle = PdfFontStyle.Regular;\n if (typeof size === 'number' && typeof style === 'undefined') {\n this.fontSize = size;\n }\n else {\n this.fontSize = size;\n this.setStyle(style);\n }\n }\n Object.defineProperty(PdfFont.prototype, \"name\", {\n //Properties\n /**\n * Gets the face name of this Font.\n * @private\n */\n get: function () {\n return this.metrics.name;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfFont.prototype, \"size\", {\n /**\n * Gets the size of this font.\n * @private\n */\n get: function () {\n return this.fontSize;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfFont.prototype, \"height\", {\n /**\n * Gets the height of the font in points.\n * @private\n */\n get: function () {\n return this.metrics.getHeight(null);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfFont.prototype, \"style\", {\n /**\n * Gets the style information for this font.\n * @private\n */\n get: function () {\n return this.fontStyle;\n },\n set: function (value) {\n this.fontStyle = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfFont.prototype, \"bold\", {\n /**\n * Gets a value indicating whether this `PdfFont` is `bold`.\n * @private\n */\n get: function () {\n return ((this.style & PdfFontStyle.Bold) > 0);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfFont.prototype, \"italic\", {\n /**\n * Gets a value indicating whether this `PdfFont` has the `italic` style applied.\n * @private\n */\n get: function () {\n return ((this.style & PdfFontStyle.Italic) > 0);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfFont.prototype, \"strikeout\", {\n /**\n * Gets a value indicating whether this `PdfFont` is `strikeout`.\n * @private\n */\n get: function () {\n return ((this.style & PdfFontStyle.Strikeout) > 0);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfFont.prototype, \"underline\", {\n /**\n * Gets a value indicating whether this `PdfFont` is `underline`.\n * @private\n */\n get: function () {\n return ((this.style & PdfFontStyle.Underline) > 0);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfFont.prototype, \"metrics\", {\n /**\n * Gets or sets the `metrics` for this font.\n * @private\n */\n get: function () {\n return this.fontMetrics;\n },\n set: function (value) {\n this.fontMetrics = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfFont.prototype, \"element\", {\n // /**\n // * Gets and Sets the font `internals`.\n // * @private\n // */\n // public get fontInternal() : IPdfPrimitive {\n // return this.pdfFontInternals;\n // }\n // public set fontInternal(value : IPdfPrimitive) {\n // this.pdfFontInternals = value;\n // }\n //IPdfWrapper Members\n /**\n * Gets the `element` representing the font.\n * @private\n */\n get: function () {\n return this.pdfFontInternals;\n },\n enumerable: true,\n configurable: true\n });\n PdfFont.prototype.measureString = function (text, arg2, arg3, arg4, arg5) {\n if (typeof text === 'string' && typeof arg2 === 'undefined') {\n return this.measureString(text, null);\n }\n else if (typeof text === 'string' && (arg2 instanceof PdfStringFormat || arg2 == null) && typeof arg3 === 'undefined' && typeof arg4 === 'undefined') {\n var temparg2 = arg2;\n var charactersFitted = 0;\n var linesFilled = 0;\n return this.measureString(text, temparg2, charactersFitted, linesFilled);\n }\n else if (typeof text === 'string' && (arg2 instanceof PdfStringFormat || arg2 == null) && typeof arg3 === 'number' && typeof arg4 === 'number') {\n var temparg2 = arg2;\n return this.measureString(text, 0, temparg2, arg3, arg4);\n // } else if (typeof text === 'string' && typeof arg2 === 'number' && typeof arg3 === 'undefined') {\n // return this.measureString(text, arg2, null);\n // } else if (typeof text === 'string' && typeof arg2 === 'number' && (arg3 instanceof PdfStringFormat || arg3 == null) && typeof arg4 === 'undefined' && typeof arg5 === 'undefined') {\n // let temparg3 : PdfStringFormat = arg3 as PdfStringFormat;\n // let charactersFitted : number = 0;\n // let linesFilled : number = 0;\n // return this.measureString(text, arg2, temparg3, charactersFitted, linesFilled);\n }\n else if (typeof text === 'string' && typeof arg2 === 'number' && (arg3 instanceof PdfStringFormat || arg3 == null) && typeof arg4 === 'number' && typeof arg5 === 'number') {\n var layoutArea = new SizeF(arg2, 0);\n var temparg3 = arg3;\n return this.measureString(text, layoutArea, temparg3, arg4, arg5);\n // } else if (typeof text === 'string' && arg2 instanceof SizeF && typeof arg3 === 'undefined') {\n // return this.measureString(text, arg2, null);\n // } else if (typeof text === 'string' && arg2 instanceof SizeF && (arg3 instanceof PdfStringFormat || arg3 == null) && typeof arg4 === 'undefined' && typeof arg5 === 'undefined') {\n // let temparg3 : PdfStringFormat = arg3 as PdfStringFormat;\n // let charactersFitted : number = 0;\n // let linesFilled : number = 0;\n // return this.measureString(text, arg2, temparg3, charactersFitted, linesFilled);\n }\n else {\n if (text == null) {\n throw Error(\"ArgumentNullException(\\\"text\\\")\");\n }\n var temparg2 = arg2;\n var temparg3 = arg3;\n var layouter = new PdfStringLayouter();\n var result = layouter.layout(text, this, temparg3, temparg2, false, new SizeF(0, 0));\n // arg4 = (result.Remainder == null) ? text.length : text.length - result.Remainder.length;\n arg4 = text.length;\n arg5 = (result.empty) ? 0 : result.lines.length;\n return result.actualSize;\n }\n };\n /* tslint:enable */\n //IPdfCache Members\n /**\n * `Checks` whether the object is similar to another object.\n * @private\n */\n PdfFont.prototype.equalsTo = function (obj) {\n var result = this.equalsToFont(obj);\n return result;\n };\n /**\n * Returns `internals` of the object.\n * @private\n */\n PdfFont.prototype.getInternals = function () {\n return this.pdfFontInternals;\n };\n /**\n * Sets `internals` to the object.\n * @private\n */\n PdfFont.prototype.setInternals = function (internals) {\n if (internals == null) {\n throw new Error('ArgumentNullException:internals');\n }\n this.pdfFontInternals = internals;\n };\n /**\n * Sets the `style` of the font.\n * @private\n */\n PdfFont.prototype.setStyle = function (style) {\n this.fontStyle = style;\n };\n /**\n * Applies `settings` to the default line width.\n * @private\n */\n PdfFont.prototype.applyFormatSettings = function (line, format, width) {\n // if (line == null) {\n // throw new Error(`ArgumentNullException:line`);\n // }\n var realWidth = width;\n if (format != null && width > 0) {\n // Space among characters is not default.\n if (format.characterSpacing !== 0) {\n realWidth += (line.length - 1) * format.characterSpacing;\n }\n // Space among words is not default.\n if (format.wordSpacing !== 0) {\n var symbols = StringTokenizer.spaces;\n var whitespacesCount = StringTokenizer.getCharsCount(line, symbols);\n realWidth += whitespacesCount * format.wordSpacing;\n }\n }\n return realWidth;\n };\n //Constants\n /**\n * `Multiplier` of the symbol width.\n * @default 0.001\n * @private\n */\n PdfFont.charSizeMultiplier = 0.001;\n /**\n * `Synchronization` object.\n * @private\n */\n PdfFont.syncObject = new Object();\n return PdfFont;\n}());\nexport { PdfFont };\n","/**\n * public Enum for `CompositeFontType`.\n * @private\n */\nexport var ObjectStatus;\n(function (ObjectStatus) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n ObjectStatus[ObjectStatus[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `Registered`.\n * @private\n */\n ObjectStatus[ObjectStatus[\"Registered\"] = 1] = \"Registered\";\n})(ObjectStatus || (ObjectStatus = {}));\n","/**\n * Used to `write a string` into output file.\n * @private\n */\nvar PdfWriter = /** @class */ (function () {\n /**\n * Initialize an instance of `PdfWriter` class.\n * @private\n */\n function PdfWriter(stream) {\n this.streamWriter = stream;\n }\n Object.defineProperty(PdfWriter.prototype, \"document\", {\n //properties\n /**\n * Gets and Sets the `document`.\n * @private\n */\n get: function () {\n return this.pdfDocument;\n },\n set: function (value) {\n this.pdfDocument = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfWriter.prototype, \"position\", {\n /**\n * Gets the `position`.\n * @private\n */\n get: function () {\n return this.streamWriter.buffer.size;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfWriter.prototype, \"length\", {\n /**\n * Gets the `length` of the stream'.\n * @private\n */\n get: function () {\n return this.streamWriter.buffer.size;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfWriter.prototype, \"stream\", {\n /**\n * Gets the `stream`.\n * @private\n */\n get: function () {\n var result = this.streamWriter;\n return result;\n },\n enumerable: true,\n configurable: true\n });\n //public Methods\n /**\n * `Writes the specified data`.\n * @private\n */\n PdfWriter.prototype.write = function (overload) {\n var data = [];\n var tempOverload = overload;\n this.streamWriter.write(tempOverload);\n };\n return PdfWriter;\n}());\nexport { PdfWriter };\n","/**\n * PdfMainObjectCollection.ts class for EJ2-PDF\n */\nimport { Dictionary } from './../collections/dictionary';\nimport { ObjectStatus } from './enum';\n/**\n * The collection of all `objects` within a PDF document.\n * @private\n */\nvar PdfMainObjectCollection = /** @class */ (function () {\n function PdfMainObjectCollection() {\n //Fields\n /**\n * The collection of the `indirect objects`.\n * @default []\n * @private\n */\n this.objectCollections = [];\n /**\n * The collection of the `Indirect objects`.\n * @default new Dictionary()\n * @private\n */\n this.mainObjectCollection = new Dictionary();\n /**\n * The collection of `primitive objects`.\n * @private\n */\n this.primitiveObjectCollection = new Dictionary();\n }\n Object.defineProperty(PdfMainObjectCollection.prototype, \"count\", {\n //Properties\n /**\n * Gets the `count`.\n * @private\n */\n get: function () {\n return this.objectCollections.length;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Gets the value of `ObjectInfo` from object collection.\n * @private\n */\n PdfMainObjectCollection.prototype.items = function (index) {\n return this.objectCollections[index];\n };\n Object.defineProperty(PdfMainObjectCollection.prototype, \"outIsNew\", {\n //Methods\n /**\n * Specifies the value of `IsNew`.\n * @private\n */\n get: function () {\n return this.isNew;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Adds` the specified element.\n * @private\n */\n PdfMainObjectCollection.prototype.add = function (element) {\n var objInfo = new ObjectInfo(element);\n this.objectCollections.push(objInfo);\n if (!this.primitiveObjectCollection.containsKey(element)) {\n this.primitiveObjectCollection.setValue(element, this.objectCollections.length - 1);\n }\n element.position = this.index = this.objectCollections.length - 1;\n element.status = ObjectStatus.Registered;\n };\n /**\n * `Looks` through the collection for the object specified.\n * @private\n */\n PdfMainObjectCollection.prototype.lookFor = function (obj) {\n var index = -1;\n if (obj.position !== -1) {\n return obj.position;\n }\n if (this.primitiveObjectCollection.containsKey(obj) && this.count === this.primitiveObjectCollection.size()) {\n index = this.primitiveObjectCollection.getValue(obj);\n }\n else {\n for (var i = this.count - 1; i >= 0; i--) {\n var oi = this.objectCollections[i];\n if (oi.object === obj) {\n index = i;\n break;\n }\n }\n }\n return index;\n };\n /**\n * Gets the `reference of the object`.\n * @private\n */\n PdfMainObjectCollection.prototype.getReference = function (index, isNew) {\n this.index = this.lookFor(index);\n var reference;\n this.isNew = false;\n var oi = this.objectCollections[this.index];\n reference = oi.reference;\n var obj = { reference: reference, wasNew: isNew };\n return obj;\n };\n /**\n * Tries to set the `reference to the object`.\n * @private\n */\n PdfMainObjectCollection.prototype.trySetReference = function (obj, reference, found) {\n var result = true;\n found = true;\n this.index = this.lookFor(obj);\n var oi = this.objectCollections[this.index];\n oi.setReference(reference);\n return result;\n };\n PdfMainObjectCollection.prototype.destroy = function () {\n for (var _i = 0, _a = this.objectCollections; _i < _a.length; _i++) {\n var obj = _a[_i];\n if (obj !== undefined) {\n obj.pdfObject.position = -1;\n obj.pdfObject.isSaving = undefined;\n obj.pdfObject.objectCollectionIndex = undefined;\n obj.pdfObject.position = undefined;\n }\n }\n this.objectCollections = [];\n this.mainObjectCollection = new Dictionary();\n this.primitiveObjectCollection = new Dictionary();\n };\n return PdfMainObjectCollection;\n}());\nexport { PdfMainObjectCollection };\nvar ObjectInfo = /** @class */ (function () {\n function ObjectInfo(obj, reference) {\n this.pdfObject = obj;\n this.pdfReference = reference;\n }\n Object.defineProperty(ObjectInfo.prototype, \"object\", {\n //Properties\n /**\n * Gets the `object`.\n * @private\n */\n get: function () {\n return this.pdfObject;\n },\n set: function (value) {\n this.pdfObject = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ObjectInfo.prototype, \"reference\", {\n /**\n * Gets the `reference`.\n * @private\n */\n get: function () {\n return this.pdfReference;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Sets the `reference`.\n * @private\n */\n ObjectInfo.prototype.setReference = function (reference) {\n this.pdfReference = reference;\n };\n return ObjectInfo;\n}());\nexport { ObjectInfo };\n","/**\n * public Enum for `ObjectType`.\n * @private\n */\nexport var ObjectType;\n(function (ObjectType) {\n /**\n * Specifies the type of `Free`.\n * @private\n */\n ObjectType[ObjectType[\"Free\"] = 0] = \"Free\";\n /**\n * Specifies the type of `Normal`.\n * @private\n */\n ObjectType[ObjectType[\"Normal\"] = 1] = \"Normal\";\n /**\n * Specifies the type of `Packed`.\n * @private\n */\n ObjectType[ObjectType[\"Packed\"] = 2] = \"Packed\";\n})(ObjectType || (ObjectType = {}));\n","import { StreamWriter } from '@syncfusion/ej2-file-utils';\nimport { Encoding } from '@syncfusion/ej2-file-utils';\nimport { PdfDocument } from './pdf-document';\n/**\n * `PdfDocumentBase` class represent common properties of PdfDocument classes.\n * @private\n */\nvar PdfDocumentBase = /** @class */ (function () {\n function PdfDocumentBase(document) {\n /**\n * If the stream is copied, then it specifies true.\n * @private\n */\n this.isStreamCopied = false;\n if (document instanceof PdfDocument) {\n this.document = document;\n }\n }\n Object.defineProperty(PdfDocumentBase.prototype, \"pdfObjects\", {\n //Prpperties\n /**\n * Gets the `PDF objects` collection, which stores all objects and references to it..\n * @private\n */\n get: function () {\n return this.objects;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentBase.prototype, \"crossTable\", {\n /**\n * Gets the `cross-reference` table.\n * @private\n */\n get: function () {\n return this.pdfCrossTable;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentBase.prototype, \"currentSavingObj\", {\n /**\n * Gets or sets the current saving `object number`.\n * @private\n */\n get: function () {\n return this.currentSavingObject;\n },\n set: function (value) {\n this.currentSavingObject = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentBase.prototype, \"catalog\", {\n /**\n * Gets the PDF document `catalog`.\n * @private\n */\n get: function () {\n return this.pdfCatalog;\n },\n set: function (value) {\n this.pdfCatalog = value;\n },\n enumerable: true,\n configurable: true\n });\n //Public methods\n /**\n * Sets the `main object collection`.\n * @private\n */\n PdfDocumentBase.prototype.setMainObjectCollection = function (mainObjectCollection) {\n this.objects = mainObjectCollection;\n };\n /**\n * Sets the `cross table`.\n * @private\n */\n PdfDocumentBase.prototype.setCrossTable = function (cTable) {\n this.pdfCrossTable = cTable;\n };\n /**\n * Sets the `catalog`.\n * @private\n */\n PdfDocumentBase.prototype.setCatalog = function (catalog) {\n this.pdfCatalog = catalog;\n };\n PdfDocumentBase.prototype.save = function (filename) {\n var _this = this;\n var encoding = new Encoding(true);\n var SW = new StreamWriter(encoding);\n if (typeof filename === 'undefined') {\n var encoding_1 = new Encoding(true);\n var SW_1 = new StreamWriter(encoding_1);\n return new Promise(function (resolve, reject) {\n /* tslint:disable-next-line:no-any */\n var obj = {};\n obj.blobData = new Blob([_this.document.docSave(SW_1, true)], { type: 'application/pdf' });\n resolve(obj);\n });\n }\n else {\n this.document.docSave(SW, filename, true);\n }\n };\n /**\n * `Clone` of parent object - PdfDocument.\n * @private\n */\n PdfDocumentBase.prototype.clone = function () {\n return this.document;\n };\n return PdfDocumentBase;\n}());\nexport { PdfDocumentBase };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * PdfCatalog.ts class for EJ2-PDF\n */\nimport { PdfDictionary } from './../primitives/pdf-dictionary';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\nimport { PdfName } from './../primitives/pdf-name';\nimport { PdfReferenceHolder } from './../primitives/pdf-reference';\n/**\n * `PdfCatalog` class represents internal catalog of the Pdf document.\n * @private\n */\nvar PdfCatalog = /** @class */ (function (_super) {\n __extends(PdfCatalog, _super);\n //constructor\n /**\n * Initializes a new instance of the `PdfCatalog` class.\n * @private\n */\n function PdfCatalog() {\n var _this = _super.call(this) || this;\n //fields\n /**\n * Internal variable to store collection of `sections`.\n * @default null\n * @private\n */\n _this.sections = null;\n /**\n * Internal variable for accessing fields from `DictionryProperties` class.\n * @private\n */\n _this.tempDictionaryProperties = new DictionaryProperties();\n _this.items.setValue(new DictionaryProperties().type, new PdfName('Catalog'));\n return _this;\n }\n Object.defineProperty(PdfCatalog.prototype, \"pages\", {\n //Properties\n /**\n * Gets or sets the sections, which contain `pages`.\n * @private\n */\n get: function () {\n return this.sections;\n },\n set: function (value) {\n var dictionary = value.element;\n // if (this.sections !== value) {\n // this.sections = value;\n // this.Items.setValue(this.tempDictionaryProperties.pages, new PdfReferenceHolder(value));\n // }\n this.sections = value;\n this.items.setValue(this.tempDictionaryProperties.pages, new PdfReferenceHolder(value));\n },\n enumerable: true,\n configurable: true\n });\n return PdfCatalog;\n}(PdfDictionary));\nexport { PdfCatalog };\n","/**\n * public Enum for `PdfPageOrientation`.\n * @private\n */\nexport var PdfPageOrientation;\n(function (PdfPageOrientation) {\n /**\n * Specifies the type of `Portrait`.\n * @private\n */\n PdfPageOrientation[PdfPageOrientation[\"Portrait\"] = 0] = \"Portrait\";\n /**\n * Specifies the type of `Landscape`.\n * @private\n */\n PdfPageOrientation[PdfPageOrientation[\"Landscape\"] = 1] = \"Landscape\";\n})(PdfPageOrientation || (PdfPageOrientation = {}));\n/**\n * public Enum for `PdfPageRotateAngle`.\n * @private\n */\nexport var PdfPageRotateAngle;\n(function (PdfPageRotateAngle) {\n /**\n * Specifies the type of `RotateAngle0`.\n * @private\n */\n PdfPageRotateAngle[PdfPageRotateAngle[\"RotateAngle0\"] = 0] = \"RotateAngle0\";\n /**\n * Specifies the type of `RotateAngle90`.\n * @private\n */\n PdfPageRotateAngle[PdfPageRotateAngle[\"RotateAngle90\"] = 1] = \"RotateAngle90\";\n /**\n * Specifies the type of `RotateAngle180`.\n * @private\n */\n PdfPageRotateAngle[PdfPageRotateAngle[\"RotateAngle180\"] = 2] = \"RotateAngle180\";\n /**\n * Specifies the type of `RotateAngle270`.\n * @private\n */\n PdfPageRotateAngle[PdfPageRotateAngle[\"RotateAngle270\"] = 3] = \"RotateAngle270\";\n})(PdfPageRotateAngle || (PdfPageRotateAngle = {}));\n/**\n * public Enum for `PdfNumberStyle`.\n * @private\n */\nexport var PdfNumberStyle;\n(function (PdfNumberStyle) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n PdfNumberStyle[PdfNumberStyle[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `Numeric`.\n * @private\n */\n PdfNumberStyle[PdfNumberStyle[\"Numeric\"] = 1] = \"Numeric\";\n /**\n * Specifies the type of `LowerLatin`.\n * @private\n */\n PdfNumberStyle[PdfNumberStyle[\"LowerLatin\"] = 2] = \"LowerLatin\";\n /**\n * Specifies the type of `LowerRoman`.\n * @private\n */\n PdfNumberStyle[PdfNumberStyle[\"LowerRoman\"] = 3] = \"LowerRoman\";\n /**\n * Specifies the type of `UpperLatin`.\n * @private\n */\n PdfNumberStyle[PdfNumberStyle[\"UpperLatin\"] = 4] = \"UpperLatin\";\n /**\n * Specifies the type of `UpperRoman`.\n * @private\n */\n PdfNumberStyle[PdfNumberStyle[\"UpperRoman\"] = 5] = \"UpperRoman\";\n})(PdfNumberStyle || (PdfNumberStyle = {}));\n/**\n * public Enum for `PdfDockStyle`.\n * @private\n */\nexport var PdfDockStyle;\n(function (PdfDockStyle) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n PdfDockStyle[PdfDockStyle[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `Bottom`.\n * @private\n */\n PdfDockStyle[PdfDockStyle[\"Bottom\"] = 1] = \"Bottom\";\n /**\n * Specifies the type of `Top`.\n * @private\n */\n PdfDockStyle[PdfDockStyle[\"Top\"] = 2] = \"Top\";\n /**\n * Specifies the type of `Left`.\n * @private\n */\n PdfDockStyle[PdfDockStyle[\"Left\"] = 3] = \"Left\";\n /**\n * Specifies the type of `Right`.\n * @private\n */\n PdfDockStyle[PdfDockStyle[\"Right\"] = 4] = \"Right\";\n /**\n * Specifies the type of `Fill`.\n * @private\n */\n PdfDockStyle[PdfDockStyle[\"Fill\"] = 5] = \"Fill\";\n})(PdfDockStyle || (PdfDockStyle = {}));\n/**\n * public Enum for `PdfAlignmentStyle`.\n * @private\n */\nexport var PdfAlignmentStyle;\n(function (PdfAlignmentStyle) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `TopLeft`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"TopLeft\"] = 1] = \"TopLeft\";\n /**\n * Specifies the type of `TopCenter`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"TopCenter\"] = 2] = \"TopCenter\";\n /**\n * Specifies the type of `TopRight`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"TopRight\"] = 3] = \"TopRight\";\n /**\n * Specifies the type of `MiddleLeft`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"MiddleLeft\"] = 4] = \"MiddleLeft\";\n /**\n * Specifies the type of `MiddleCenter`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"MiddleCenter\"] = 5] = \"MiddleCenter\";\n /**\n * Specifies the type of `MiddleRight`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"MiddleRight\"] = 6] = \"MiddleRight\";\n /**\n * Specifies the type of `BottomLeft`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"BottomLeft\"] = 7] = \"BottomLeft\";\n /**\n * Specifies the type of `BottomCenter`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"BottomCenter\"] = 8] = \"BottomCenter\";\n /**\n * Specifies the type of `BottomRight`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"BottomRight\"] = 9] = \"BottomRight\";\n})(PdfAlignmentStyle || (PdfAlignmentStyle = {}));\n/**\n * public Enum for `TemplateType`.\n * @private\n */\nexport var TemplateType;\n(function (TemplateType) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n TemplateType[TemplateType[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `Top`.\n * @private\n */\n TemplateType[TemplateType[\"Top\"] = 1] = \"Top\";\n /**\n * Specifies the type of `Bottom`.\n * @private\n */\n TemplateType[TemplateType[\"Bottom\"] = 2] = \"Bottom\";\n /**\n * Specifies the type of `Left`.\n * @private\n */\n TemplateType[TemplateType[\"Left\"] = 3] = \"Left\";\n /**\n * Specifies the type of `Right`.\n * @private\n */\n TemplateType[TemplateType[\"Right\"] = 4] = \"Right\";\n})(TemplateType || (TemplateType = {}));\n","import { ObjectStatus } from './../input-output/enum';\nimport { PdfDictionary } from './../primitives/pdf-dictionary';\nimport { DictionaryProperties } from './pdf-dictionary-properties';\nimport { Operators } from './pdf-operators';\nimport { Dictionary } from './../collections/dictionary';\nimport { PdfReference } from './../primitives/pdf-reference';\nimport { ObjectType } from './cross-table';\nimport { PdfStream } from './../primitives/pdf-stream';\nimport { PdfNumber } from './../primitives/pdf-number';\nimport { PdfCatalog } from './../document/pdf-catalog';\n/**\n * `PdfCrossTable` is responsible for intermediate level parsing\n * and savingof a PDF document.\n * @private\n */\nvar PdfCrossTable = /** @class */ (function () {\n function PdfCrossTable() {\n /**\n * The modified `objects` that should be saved.\n * @private\n */\n this.objects = new Dictionary();\n /**\n * Holds `maximal generation number` or offset to object.\n * @default 0\n * @private\n */\n this.maxGenNumIndex = 0;\n /**\n * The `number of the objects`.\n * @default 0\n * @private\n */\n this.objectCount = 0;\n /**\n * Internal variable for accessing fields from `DictionryProperties` class.\n * @default new PdfDictionaryProperties()\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n }\n Object.defineProperty(PdfCrossTable.prototype, \"isMerging\", {\n //Properties\n /**\n * Gets or sets if the document `is merged`.\n * @private\n */\n get: function () {\n return this.merging;\n },\n set: function (value) {\n this.merging = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfCrossTable.prototype, \"trailer\", {\n /**\n * Gets the `trailer`.\n * @private\n */\n get: function () {\n if (this.internalTrailer == null) {\n this.internalTrailer = new PdfStream();\n }\n return this.internalTrailer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfCrossTable.prototype, \"document\", {\n /**\n * Gets or sets the main `PdfDocument` class instance.\n * @private\n */\n get: function () {\n return this.pdfDocument;\n },\n set: function (value) {\n this.pdfDocument = value;\n this.items = this.pdfDocument.pdfObjects;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfCrossTable.prototype, \"pdfObjects\", {\n /**\n * Gets the catched `PDF object` main collection.\n * @private\n */\n get: function () {\n return this.items;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfCrossTable.prototype, \"objectCollection\", {\n /**\n * Gets the `object collection`.\n * @private\n */\n get: function () {\n return this.pdfDocument.pdfObjects;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfCrossTable.prototype, \"count\", {\n /**\n * Gets or sets the `number of the objects` within the document.\n * @private\n */\n get: function () {\n return this.objectCount;\n },\n set: function (value) {\n this.objectCount = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfCrossTable.prototype, \"nextObjNumber\", {\n /**\n * Returns `next available object number`.\n * @private\n */\n get: function () {\n this.count = this.count + 1;\n return this.count;\n },\n enumerable: true,\n configurable: true\n });\n PdfCrossTable.prototype.save = function (writer, filename) {\n this.saveHead(writer);\n var state = false;\n this.mappedReferences = null;\n this.objects.clear();\n this.markTrailerReferences();\n this.saveObjects(writer);\n var saveCount = this.count;\n var xrefPos = writer.position;\n this.registerObject(0, new PdfReference(0, -1), true);\n var prevXRef = 0;\n writer.write(Operators.xref);\n writer.write(Operators.newLine);\n this.saveSections(writer);\n this.saveTrailer(writer, this.count, prevXRef);\n this.saveTheEndess(writer, xrefPos);\n this.count = saveCount;\n for (var i = 0; i < this.objectCollection.count; ++i) {\n var oi = this.objectCollection.items(i);\n oi.object.isSaving = false;\n }\n if (typeof filename === 'undefined') {\n return writer.stream.buffer;\n }\n else {\n writer.stream.save(filename);\n }\n };\n /**\n * `Saves the endess` of the file.\n * @private\n */\n PdfCrossTable.prototype.saveTheEndess = function (writer, xrefPos) {\n writer.write(Operators.newLine + Operators.startxref + Operators.newLine);\n writer.write(xrefPos.toString() + Operators.newLine);\n writer.write(Operators.eof + Operators.newLine);\n };\n /**\n * `Saves the new trailer` dictionary.\n * @private\n */\n PdfCrossTable.prototype.saveTrailer = function (writer, count, prevXRef) {\n writer.write(Operators.trailer + Operators.newLine);\n // Save the dictionary.\n var trailer = this.trailer;\n trailer.items.setValue(this.dictionaryProperties.size, new PdfNumber(this.objectCount + 1));\n trailer = new PdfDictionary(trailer); // Make it real dictionary.\n trailer.setEncrypt(false);\n trailer.save(writer);\n };\n /**\n * `Saves the xref section`.\n * @private\n */\n PdfCrossTable.prototype.saveSections = function (writer) {\n var objectNum = 0;\n var count = 0;\n do {\n count = this.prepareSubsection(objectNum);\n this.saveSubsection(writer, objectNum, count);\n objectNum += count;\n } while (count !== 0);\n };\n /**\n * `Saves a subsection`.\n * @private\n */\n PdfCrossTable.prototype.saveSubsection = function (writer, objectNum, count) {\n if (count <= 0 || objectNum >= this.count) {\n return;\n }\n var subsectionHead = '{0} {1}{2}';\n writer.write(objectNum + ' ' + (count + 1) + Operators.newLine);\n for (var i = objectNum; i <= objectNum + count; ++i) {\n var obj = this.objects.getValue(i);\n var str = '';\n if (obj.type === ObjectType.Free) {\n str = this.getItem(obj.offset, 65535, true);\n }\n else {\n str = this.getItem(obj.offset, obj.generation, false);\n }\n writer.write(str);\n }\n };\n /**\n * Generates string for `xref table item`.\n * @private\n */\n PdfCrossTable.prototype.getItem = function (offset, genNumber, isFree) {\n var returnString = '';\n var addOffsetLength = 10 - offset.toString().length;\n if (genNumber <= 0) {\n genNumber = 0;\n }\n var addGenNumberLength = (5 - genNumber.toString().length) <= 0 ? 0 : (5 - genNumber.toString().length);\n for (var index = 0; index < addOffsetLength; index++) {\n returnString = returnString + '0';\n }\n returnString = returnString + offset.toString() + ' ';\n for (var index = 0; index < addGenNumberLength; index++) {\n returnString = returnString + '0';\n }\n returnString = returnString + genNumber.toString() + ' ';\n returnString = returnString + ((isFree) ? Operators.f : Operators.n) + Operators.newLine;\n return returnString;\n };\n /**\n * `Prepares a subsection` of the current section within the cross-reference table.\n * @private\n */\n PdfCrossTable.prototype.prepareSubsection = function (objectNum) {\n var count = 0;\n var i;\n var total = this.count;\n for (var k = 0; k < this.document.pdfObjects.count; k++) {\n var reference = this.document.pdfObjects.items(k).reference;\n var refString = reference.toString();\n var refArray = refString.split(' ');\n }\n if (objectNum >= total) {\n return count;\n }\n // search for first changed indirect object.\n for (i = objectNum; i < total; ++i) {\n break;\n }\n objectNum = i;\n // look up for all indirect objects in one subsection.\n for (; i < total; ++i) {\n ++count;\n }\n return count;\n };\n /**\n * `Marks the trailer references` being saved.\n * @private\n */\n PdfCrossTable.prototype.markTrailerReferences = function () {\n var tempArray;\n var keys = this.trailer.items.keys();\n var values = this.trailer.items.values();\n };\n /**\n * `Saves the head`.\n * @private\n */\n PdfCrossTable.prototype.saveHead = function (writer) {\n var version = this.generateFileVersion(writer.document);\n writer.write('%PDF-' + version);\n writer.write(Operators.newLine);\n };\n /**\n * Generates the `version` of the file.\n * @private\n */\n PdfCrossTable.prototype.generateFileVersion = function (document) {\n var iVersion = 4;\n var version = '1.' + iVersion.toString();\n return version;\n };\n PdfCrossTable.prototype.getReference = function (obj, bNew) {\n if (typeof bNew === 'undefined') {\n var wasNew = false;\n return this.getReference(obj, wasNew);\n }\n else {\n //code splitted for reducing lines of code exceeds 100.\n return this.getSubReference(obj, bNew);\n }\n };\n /**\n * Retrieves the `reference` of the object given.\n * @private\n */\n PdfCrossTable.prototype.getSubReference = function (obj, bNew) {\n var isNew = false;\n var wasNew;\n var reference = null;\n // if (obj.IsSaving) {\n if (this.items.count > 0 && obj.objectCollectionIndex > 0 && this.items.count > obj.objectCollectionIndex - 1) {\n var tempObj = this.document.pdfObjects.getReference(obj, wasNew);\n reference = tempObj.reference;\n wasNew = tempObj.wasNew;\n }\n if (reference == null) {\n if (obj.status === ObjectStatus.Registered) {\n wasNew = false;\n }\n else {\n wasNew = true;\n }\n }\n else {\n wasNew = false;\n }\n // need to add mapped reference code\n if (reference == null) {\n var objnumber = this.nextObjNumber;\n reference = new PdfReference(objnumber, 0);\n var found = void 0;\n if (wasNew) {\n this.document.pdfObjects.add(obj);\n this.document.pdfObjects.trySetReference(obj, reference, found);\n var tempIndex = this.document.pdfObjects.count - 1;\n var tempkey = this.document.pdfObjects.objectCollections[tempIndex].reference.objNumber;\n var tempvalue = this.document.pdfObjects.objectCollections[this.document.pdfObjects.count - 1];\n this.document.pdfObjects.mainObjectCollection.setValue(tempkey, tempvalue);\n obj.position = -1;\n }\n else {\n this.document.pdfObjects.trySetReference(obj, reference, found);\n }\n obj.objectCollectionIndex = reference.objNumber;\n obj.status = ObjectStatus.None;\n isNew = true;\n }\n bNew = isNew || this.bForceNew;\n return reference;\n };\n /**\n * `Saves all objects` in the collection.\n * @private\n */\n PdfCrossTable.prototype.saveObjects = function (writer) {\n var objectCollection = this.objectCollection;\n for (var i = 0; i < objectCollection.count; ++i) {\n var oi = objectCollection.items(i);\n var obj = oi.object;\n obj.isSaving = true;\n this.saveIndirectObject(obj, writer);\n }\n };\n /**\n * `Saves indirect object`.\n * @private\n */\n PdfCrossTable.prototype.saveIndirectObject = function (obj, writer) {\n var reference = this.getReference(obj);\n if (obj instanceof PdfCatalog) {\n this.trailer.items.setValue(this.dictionaryProperties.root, reference);\n }\n // NOTE : This is needed for correct string objects encryption.\n this.pdfDocument.currentSavingObj = reference;\n var tempArchive = false;\n tempArchive = obj.getArchive();\n var allowedType = !((obj instanceof PdfStream) || !tempArchive || (obj instanceof PdfCatalog));\n var sigFlag = false;\n this.registerObject(writer.position, reference);\n this.doSaveObject(obj, reference, writer);\n };\n /**\n * Performs `real saving` of the save object.\n * @private\n */\n PdfCrossTable.prototype.doSaveObject = function (obj, reference, writer) {\n var correctPosition = writer.length;\n writer.write(reference.objNumber.toString());\n writer.write(Operators.whiteSpace);\n writer.write(reference.genNumber.toString());\n writer.write(Operators.whiteSpace);\n writer.write(Operators.obj);\n writer.write(Operators.newLine);\n obj.save(writer);\n var stream = writer.stream;\n writer.write(Operators.endObj);\n writer.write(Operators.newLine);\n };\n PdfCrossTable.prototype.registerObject = function (offset, reference, free) {\n if (typeof free === 'boolean') {\n // Register the object by its number.\n this.objects.setValue(reference.objNumber, new RegisteredObject(offset, reference, free));\n this.maxGenNumIndex = Math.max(this.maxGenNumIndex, reference.genNumber);\n }\n else if (typeof free === 'undefined') {\n // Register the object by its number.\n this.objects.setValue(reference.objNumber, new RegisteredObject(offset, reference));\n this.maxGenNumIndex = Math.max(this.maxGenNumIndex, reference.genNumber);\n }\n };\n /**\n * `Dereferences` the specified primitive object.\n * @private\n */\n PdfCrossTable.dereference = function (obj) {\n var rh = obj;\n if (rh != null) {\n obj = rh.object;\n }\n return obj;\n };\n return PdfCrossTable;\n}());\nexport { PdfCrossTable };\nvar RegisteredObject = /** @class */ (function () {\n function RegisteredObject(offset, reference, free) {\n if (typeof free === 'undefined') {\n var tempOffset = offset;\n this.offsetNumber = tempOffset;\n var tempReference = reference;\n this.generation = tempReference.genNumber;\n this.object = tempReference.objNumber;\n this.type = ObjectType.Normal;\n }\n else {\n var tempOffset = offset;\n var tempReference = reference;\n this.constructor(tempOffset, tempReference);\n var tempFree = free;\n this.type = ObjectType.Free;\n }\n }\n Object.defineProperty(RegisteredObject.prototype, \"objectNumber\", {\n //Properties\n /**\n * Gets the `object number`.\n * @private\n */\n get: function () {\n return this.object;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(RegisteredObject.prototype, \"offset\", {\n /**\n * Gets the `offset`.\n * @private\n */\n get: function () {\n var result;\n result = this.offsetNumber;\n return result;\n },\n enumerable: true,\n configurable: true\n });\n return RegisteredObject;\n}());\nexport { RegisteredObject };\n","/**\n * PdfPageSize.ts class for EJ2-PDF\n */\nimport { SizeF } from './../drawing/pdf-drawing';\n/**\n * Represents information about various predefined `page sizes`.\n */\nvar PdfPageSize = /** @class */ (function () {\n //constructor\n /**\n * Initialize an instance for `PdfPageSize` class.\n * @private\n */\n function PdfPageSize() {\n // \n }\n /**\n * Specifies the size of `letter`.\n * @private\n */\n PdfPageSize.letter = new SizeF(612, 792);\n /**\n * Specifies the size of `note`.\n * @private\n */\n PdfPageSize.note = new SizeF(540, 720);\n /**\n * Specifies the size of `legal`.\n * @private\n */\n PdfPageSize.legal = new SizeF(612, 1008);\n /**\n * Specifies the size of `a0`.\n * @private\n */\n PdfPageSize.a0 = new SizeF(2380, 3368);\n /**\n * Specifies the size of `a1`.\n * @private\n */\n PdfPageSize.a1 = new SizeF(1684, 2380);\n /**\n * Specifies the size of `a2`.\n * @private\n */\n PdfPageSize.a2 = new SizeF(1190, 1684);\n /**\n * Specifies the size of `a3`.\n * @private\n */\n PdfPageSize.a3 = new SizeF(842, 1190);\n /**\n * Specifies the size of `a4`.\n * @private\n */\n PdfPageSize.a4 = new SizeF(595, 842);\n /**\n * Specifies the size of `a5`.\n * @private\n */\n PdfPageSize.a5 = new SizeF(421, 595);\n /**\n * Specifies the size of `a6`.\n * @private\n */\n PdfPageSize.a6 = new SizeF(297, 421);\n /**\n * Specifies the size of `a7`.\n * @private\n */\n PdfPageSize.a7 = new SizeF(210, 297);\n /**\n * Specifies the size of `a8`.\n * @private\n */\n PdfPageSize.a8 = new SizeF(148, 210);\n /**\n * Specifies the size of `a9`.\n * @private\n */\n PdfPageSize.a9 = new SizeF(105, 148);\n /**\n * Specifies the size of `a10`.\n * @private\n */\n PdfPageSize.a10 = new SizeF(74, 105);\n /**\n * Specifies the size of `b0`.\n * @private\n */\n PdfPageSize.b0 = new SizeF(2836, 4008);\n /**\n * Specifies the size of `b1`.\n * @private\n */\n PdfPageSize.b1 = new SizeF(2004, 2836);\n /**\n * Specifies the size of `b2`.\n * @private\n */\n PdfPageSize.b2 = new SizeF(1418, 2004);\n /**\n * Specifies the size of `b3`.\n * @private\n */\n PdfPageSize.b3 = new SizeF(1002, 1418);\n /**\n * Specifies the size of `b4`.\n * @private\n */\n PdfPageSize.b4 = new SizeF(709, 1002);\n /**\n * Specifies the size of `b5`.\n * @private\n */\n PdfPageSize.b5 = new SizeF(501, 709);\n /**\n * Specifies the size of `archE`.\n * @private\n */\n PdfPageSize.archE = new SizeF(2592, 3456);\n /**\n * Specifies the size of `archD`.\n * @private\n */\n PdfPageSize.archD = new SizeF(1728, 2592);\n /**\n * Specifies the size of `archC`.\n * @private\n */\n PdfPageSize.archC = new SizeF(1296, 1728);\n /**\n * Specifies the size of `archB`.\n * @private\n */\n PdfPageSize.archB = new SizeF(864, 1296);\n /**\n * Specifies the size of `archA`.\n * @private\n */\n PdfPageSize.archA = new SizeF(648, 864);\n /**\n * Specifies the size of `flsa`.\n * @private\n */\n PdfPageSize.flsa = new SizeF(612, 936);\n /**\n * Specifies the size of `halfLetter`.\n * @private\n */\n PdfPageSize.halfLetter = new SizeF(396, 612);\n /**\n * Specifies the size of `letter11x17`.\n * @private\n */\n PdfPageSize.letter11x17 = new SizeF(792, 1224);\n /**\n * Specifies the size of `ledger`.\n * @private\n */\n PdfPageSize.ledger = new SizeF(1224, 792);\n return PdfPageSize;\n}());\nexport { PdfPageSize };\n","/**\n * PdfMargins.ts class for EJ2-PDF\n * A class representing PDF page margins.\n */\nvar PdfMargins = /** @class */ (function () {\n /**\n * Initializes a new instance of the `PdfMargins` class.\n * @private\n */\n function PdfMargins() {\n /**\n * Represents the `Default Page Margin` value.\n * @default 0.0\n * @private\n */\n this.pdfMargin = 40.0;\n this.setMargins(this.pdfMargin);\n }\n Object.defineProperty(PdfMargins.prototype, \"left\", {\n //Properties\n /**\n * Gets or sets the `left margin` size.\n * @private\n */\n get: function () {\n return this.leftMargin;\n },\n set: function (value) {\n this.leftMargin = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfMargins.prototype, \"top\", {\n /**\n * Gets or sets the `top margin` size.\n * @private\n */\n get: function () {\n return this.topMargin;\n },\n set: function (value) {\n this.topMargin = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfMargins.prototype, \"right\", {\n /**\n * Gets or sets the `right margin` size.\n * @private\n */\n get: function () {\n return this.rightMargin;\n },\n set: function (value) {\n this.rightMargin = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfMargins.prototype, \"bottom\", {\n /**\n * Gets or sets the `bottom margin` size.\n * @private\n */\n get: function () {\n return this.bottomMargin;\n },\n set: function (value) {\n this.bottomMargin = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfMargins.prototype, \"all\", {\n /**\n * Sets the `margins`.\n * @private\n */\n set: function (value) {\n this.setMargins(value);\n },\n enumerable: true,\n configurable: true\n });\n PdfMargins.prototype.setMargins = function (margin1, margin2, margin3, margin4) {\n if (typeof margin2 === 'undefined') {\n this.leftMargin = this.topMargin = this.rightMargin = this.bottomMargin = margin1;\n }\n else {\n if (typeof margin3 === 'undefined') {\n this.leftMargin = this.rightMargin = margin1;\n this.bottomMargin = this.topMargin = margin2;\n }\n else {\n this.leftMargin = margin1;\n this.topMargin = margin2;\n this.rightMargin = margin3;\n this.bottomMargin = margin4;\n }\n }\n };\n /**\n * `Clones` the object.\n * @private\n */\n PdfMargins.prototype.clone = function () {\n return this;\n };\n return PdfMargins;\n}());\nexport { PdfMargins };\n","/**\n * ImageDecoder class\n */\nimport { ByteArray } from './byte-array';\nimport { PdfStream } from './../../primitives/pdf-stream';\nimport { DictionaryProperties } from './../../input-output/pdf-dictionary-properties';\nimport { PdfName } from './../../primitives/pdf-name';\nimport { PdfNumber } from './../../primitives/pdf-number';\nimport { PdfBoolean } from './../../primitives/pdf-boolean';\nimport { PdfDictionary } from './../../primitives/pdf-dictionary';\n/**\n * Specifies the image `format`.\n * @private\n */\nexport var ImageFormat;\n(function (ImageFormat) {\n /**\n * Specifies the type of `Unknown`.\n * @hidden\n * @private\n */\n ImageFormat[ImageFormat[\"Unknown\"] = 0] = \"Unknown\";\n /**\n * Specifies the type of `Bmp`.\n * @hidden\n * @private\n */\n ImageFormat[ImageFormat[\"Bmp\"] = 1] = \"Bmp\";\n /**\n * Specifies the type of `Emf`.\n * @hidden\n * @private\n */\n ImageFormat[ImageFormat[\"Emf\"] = 2] = \"Emf\";\n /**\n * Specifies the type of `Gif`.\n * @hidden\n * @private\n */\n ImageFormat[ImageFormat[\"Gif\"] = 3] = \"Gif\";\n /**\n * Specifies the type of `Jpeg`.\n * @hidden\n * @private\n */\n ImageFormat[ImageFormat[\"Jpeg\"] = 4] = \"Jpeg\";\n /**\n * Specifies the type of `Png`.\n * @hidden\n * @private\n */\n ImageFormat[ImageFormat[\"Png\"] = 5] = \"Png\";\n /**\n * Specifies the type of `Wmf`.\n * @hidden\n * @private\n */\n ImageFormat[ImageFormat[\"Wmf\"] = 6] = \"Wmf\";\n /**\n * Specifies the type of `Icon`.\n * @hidden\n * @private\n */\n ImageFormat[ImageFormat[\"Icon\"] = 7] = \"Icon\";\n})(ImageFormat || (ImageFormat = {}));\n/**\n * `Decode the image stream`.\n * @private\n */\nvar ImageDecoder = /** @class */ (function () {\n /**\n * Initialize the new instance for `image-decoder` class.\n * @private\n */\n function ImageDecoder(stream) {\n /**\n * Specifies `format` of image.\n * @hidden\n * @private\n */\n this.mFormat = ImageFormat.Unknown;\n /**\n * `Bits per component`.\n * @default 8\n * @hidden\n * @private\n */\n this.mbitsPerComponent = 8;\n /**\n * Internal variable for accessing fields from `DictionryProperties` class.\n * @hidden\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n this.mStream = stream;\n this.initialize();\n }\n Object.defineProperty(ImageDecoder.prototype, \"height\", {\n /**\n * Gets the `height` of image.\n * @hidden\n * @private\n */\n get: function () {\n return this.mHeight;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageDecoder.prototype, \"width\", {\n /**\n * Gets the `width` of image.\n * @hidden\n * @private\n */\n get: function () {\n return this.mWidth;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageDecoder.prototype, \"bitsPerComponent\", {\n /**\n * Gets `bits per component`.\n * @hidden\n * @private\n */\n get: function () {\n return this.mbitsPerComponent;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageDecoder.prototype, \"size\", {\n /**\n * Gets the `size` of an image data.\n * @hidden\n * @private\n */\n get: function () {\n return this.mImageData.count;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageDecoder.prototype, \"imageData\", {\n /**\n * Gets the value of an `image data`.\n * @hidden\n * @private\n */\n get: function () {\n return this.mImageData;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageDecoder.prototype, \"imageDataAsNumberArray\", {\n /**\n * Gets the value of an `image data as number array`.\n * @hidden\n * @private\n */\n get: function () {\n return this.mImageData.internalBuffer.buffer;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Initialize` image data and image stream.\n * @hidden\n * @private\n */\n ImageDecoder.prototype.initialize = function () {\n if (this.mFormat === ImageFormat.Unknown && this.checkIfJpeg()) {\n this.mFormat = ImageFormat.Jpeg;\n this.parseJpegImage();\n }\n this.reset();\n this.mImageData = new ByteArray(this.mStream.count);\n this.mStream.read(this.mImageData, 0, this.mImageData.count);\n };\n /**\n * `Reset` stream position into 0.\n * @hidden\n * @private\n */\n ImageDecoder.prototype.reset = function () {\n this.mStream.position = 0;\n };\n /**\n * `Parse` Jpeg image.\n * @hidden\n * @private\n */\n ImageDecoder.prototype.parseJpegImage = function () {\n this.reset();\n var imgData = new ByteArray(this.mStream.count);\n this.mStream.read(imgData, 0, imgData.count);\n var i = 4;\n /* tslint:disable */\n if (String.fromCharCode(imgData.getBuffer(i + 2)) === 'J' && String.fromCharCode(imgData.getBuffer(i + 3)) === 'F' && String.fromCharCode(imgData.getBuffer(i + 4)) === 'I' && String.fromCharCode(imgData.getBuffer(i + 5)) === 'F' && imgData.getBuffer(i + 6) === 0) {\n var length_1 = imgData.getBuffer(i) * 256 + imgData.getBuffer(i + 1);\n while (i + length_1 < imgData.count) {\n i += length_1;\n if (imgData.getBuffer(i + 1) === 192) {\n this.mHeight = imgData.getBuffer(i + 5) * 256 + imgData.getBuffer(i + 6);\n this.mWidth = imgData.getBuffer(i + 7) * 256 + imgData.getBuffer(i + 8);\n return;\n }\n else {\n i += 2;\n length_1 = imgData.getBuffer(i) * 256 + imgData.getBuffer(i + 1);\n }\n }\n }\n /* tslint:enable */\n };\n Object.defineProperty(ImageDecoder.prototype, \"format\", {\n /**\n * Gets the image `format`.\n * @private\n * @hidden\n */\n get: function () {\n return this.mFormat;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Checks if JPG`.\n * @private\n * @hidden\n */\n ImageDecoder.prototype.checkIfJpeg = function () {\n this.reset();\n for (var i = 0; i < ImageDecoder.mJpegHeader.length; i++) {\n if (ImageDecoder.mJpegHeader[i] !== this.mStream.readByte(i)) {\n return false;\n }\n this.mStream.position++;\n }\n return true;\n };\n /**\n * Return image `dictionary`.\n * @hidden\n * @private\n */\n ImageDecoder.prototype.getImageDictionary = function () {\n if (this.mFormat === ImageFormat.Jpeg) {\n var tempArrayBuffer = this.imageData.internalBuffer.length;\n this.imageStream = new PdfStream();\n this.imageStream.isImage = true;\n var tempString = '';\n var decodedString = '';\n for (var i = 0; i < this.imageDataAsNumberArray.byteLength; i++) {\n tempString += String.fromCharCode(null, this.mStream.readByte(i));\n }\n for (var i = 0; i < tempString.length; i++) {\n if (i % 2 !== 0) {\n decodedString += tempString[i];\n }\n }\n this.imageStream.data = [decodedString];\n this.imageStream.compress = false;\n this.imageStream.items.setValue(this.dictionaryProperties.type, new PdfName(this.dictionaryProperties.xObject));\n this.imageStream.items.setValue(this.dictionaryProperties.subtype, new PdfName(this.dictionaryProperties.image));\n this.imageStream.items.setValue(this.dictionaryProperties.width, new PdfNumber(this.width));\n this.imageStream.items.setValue(this.dictionaryProperties.height, new PdfNumber(this.height));\n this.imageStream.items.setValue(this.dictionaryProperties.bitsPerComponent, new PdfNumber(this.bitsPerComponent));\n this.imageStream.items.setValue(this.dictionaryProperties.filter, new PdfName(this.dictionaryProperties.dctdecode));\n this.imageStream.items.setValue(this.dictionaryProperties.colorSpace, new PdfName(this.getColorSpace()));\n this.imageStream.items.setValue(this.dictionaryProperties.decodeParms, this.getDecodeParams());\n return this.imageStream;\n }\n else {\n return this.imageStream;\n }\n };\n /**\n * Return `colorSpace` of an image.\n * @hidden\n * @private\n */\n ImageDecoder.prototype.getColorSpace = function () {\n return this.dictionaryProperties.deviceRgb;\n };\n /**\n * Return `decode parameters` of an image.\n * @hidden\n * @private\n */\n ImageDecoder.prototype.getDecodeParams = function () {\n var decodeParams = new PdfDictionary();\n decodeParams.items.setValue(this.dictionaryProperties.columns, new PdfNumber(this.width));\n decodeParams.items.setValue(this.dictionaryProperties.blackIs1, new PdfBoolean(true));\n decodeParams.items.setValue(this.dictionaryProperties.k, new PdfNumber(-1));\n decodeParams.items.setValue(this.dictionaryProperties.predictor, new PdfNumber(15));\n decodeParams.items.setValue(this.dictionaryProperties.bitsPerComponent, new PdfNumber(this.bitsPerComponent));\n return decodeParams;\n };\n /**\n * Number array for `png header`.\n * @hidden\n * @private\n */\n ImageDecoder.mPngHeader = [137, 80, 78, 71, 13, 10, 26, 10];\n /**\n * Number Array for `jpeg header`.\n * @hidden\n * @private\n */\n ImageDecoder.mJpegHeader = [255, 216];\n /**\n * Number array for `gif header`.\n * @hidden\n * @private\n */\n ImageDecoder.GIF_HEADER = 'G,I,F,8';\n /**\n * Number array for `bmp header.`\n * @hidden\n * @private\n */\n ImageDecoder.BMP_HEADER = 'B,M';\n return ImageDecoder;\n}());\nexport { ImageDecoder };\n","/**\n * PdfPageSettings.ts class for EJ2-PDF\n */\nimport { SizeF, PointF } from './../drawing/pdf-drawing';\nimport { PdfPageSize } from './pdf-page-size';\nimport { PdfPageRotateAngle, PdfPageOrientation } from './enum';\nimport { PdfMargins } from './../graphics/pdf-margins';\n/**\n * The class provides various `setting` related with PDF pages.\n */\nvar PdfPageSettings = /** @class */ (function () {\n function PdfPageSettings(margins) {\n //Fields\n /**\n * The page `margins`.\n * @private\n */\n this.pageMargins = new PdfMargins();\n /**\n * The page `size`.\n * @default a4\n * @private\n */\n this.pageSize = PdfPageSize.a4;\n /**\n * The page `rotation angle`.\n * @default PdfPageRotateAngle.RotateAngle0\n * @private\n */\n this.rotateAngle = PdfPageRotateAngle.RotateAngle0;\n /**\n * The page `orientation`.\n * @default PdfPageOrientation.Portrait\n * @private\n */\n this.pageOrientation = PdfPageOrientation.Portrait;\n /**\n * The page `origin`.\n * @default 0,0\n * @private\n */\n this.pageOrigin = new PointF(0, 0);\n /**\n * Checks the Whether the `rotation` is applied or not.\n * @default false\n * @private\n */\n this.isRotation = false;\n if (typeof margins === 'number') {\n this.pageMargins.setMargins(margins);\n }\n }\n Object.defineProperty(PdfPageSettings.prototype, \"size\", {\n //Properties\n /**\n * Gets or sets the `size` of the page.\n * @private\n */\n get: function () {\n return this.pageSize;\n },\n set: function (value) {\n this.setSize(value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageSettings.prototype, \"orientation\", {\n /**\n * Gets or sets the page `orientation`.\n * @private\n */\n get: function () {\n return this.pageOrientation;\n },\n set: function (orientation) {\n if (this.pageOrientation !== orientation) {\n this.pageOrientation = orientation;\n this.updateSize(orientation);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageSettings.prototype, \"margins\", {\n /**\n * Gets or sets the `margins` of the page.\n * @private\n */\n get: function () {\n return this.pageMargins;\n },\n set: function (value) {\n this.pageMargins = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageSettings.prototype, \"width\", {\n /**\n * Gets or sets the `width` of the page.\n * @private\n */\n get: function () {\n return this.pageSize.width;\n },\n set: function (value) {\n this.pageSize.width = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageSettings.prototype, \"height\", {\n /**\n * Gets or sets the `height` of the page.\n * @private\n */\n get: function () {\n return this.pageSize.height;\n },\n set: function (value) {\n this.pageSize.height = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageSettings.prototype, \"origin\", {\n /**\n * Gets or sets the `origin` of the page.\n * @private\n */\n get: function () {\n return this.pageOrigin;\n },\n set: function (value) {\n this.pageOrigin = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageSettings.prototype, \"rotate\", {\n /**\n * Gets or sets the number of degrees by which the page should be `rotated` clockwise when displayed or printed.\n * @private\n */\n get: function () {\n return this.rotateAngle;\n },\n set: function (value) {\n this.rotateAngle = value;\n this.isRotation = true;\n },\n enumerable: true,\n configurable: true\n });\n //Methods\n /**\n * `Update page size` depending on orientation.\n * @private\n */\n PdfPageSettings.prototype.updateSize = function (orientation) {\n var min = Math.min(this.pageSize.width, this.pageSize.height);\n var max = Math.max(this.pageSize.width, this.pageSize.height);\n switch (orientation) {\n case PdfPageOrientation.Portrait:\n this.pageSize = new SizeF(min, max);\n break;\n case PdfPageOrientation.Landscape:\n this.pageSize = new SizeF(max, min);\n break;\n }\n };\n /**\n * Creates a `clone` of the object.\n * @private\n */\n PdfPageSettings.prototype.clone = function () {\n var settings = this;\n settings.pageMargins = this.pageMargins.clone();\n // if (GetTransition() != null)\n // {\n // settings.Transition = (PdfPageTransition)Transition.clone();\n // }\n return settings;\n };\n /**\n * Returns `size`, shrinked by the margins.\n * @private\n */\n PdfPageSettings.prototype.getActualSize = function () {\n var width = this.width - (this.margins.left + this.margins.right);\n var height = this.height - (this.margins.top + this.margins.bottom);\n var size = new SizeF(width, height);\n return size;\n };\n /**\n * Sets `size` to the page aaccording to the orientation.\n * @private\n */\n PdfPageSettings.prototype.setSize = function (size) {\n var min = Math.min(size.width, size.height);\n var max = Math.max(size.width, size.height);\n if (this.orientation === PdfPageOrientation.Portrait) {\n this.pageSize = new SizeF(min, max);\n }\n else {\n this.pageSize = new SizeF(max, min);\n }\n };\n return PdfPageSettings;\n}());\nexport { PdfPageSettings };\n","import { Operators } from './pdf-operators';\nimport { PdfNumber } from './../primitives/pdf-number';\nimport { PointF, RectangleF } from './../drawing/pdf-drawing';\nimport { PdfString } from './../primitives/pdf-string';\nimport { PdfName } from './../primitives/pdf-name';\n/**\n * Helper class to `write PDF graphic streams` easily.\n * @private\n */\nvar PdfStreamWriter = /** @class */ (function () {\n /**\n * Initialize an instance of `PdfStreamWriter` class.\n * @private\n */\n function PdfStreamWriter(stream) {\n if (stream == null) {\n throw new Error('ArgumentNullException:stream');\n }\n this.stream = stream;\n }\n //Implementation\n /**\n * `Clear` the stream.\n * @public\n */\n PdfStreamWriter.prototype.clear = function () {\n this.stream.clearStream();\n };\n PdfStreamWriter.prototype.setGraphicsState = function (dictionaryName) {\n if (dictionaryName instanceof PdfName) {\n this.stream.write(dictionaryName.toString());\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setGraphicsState);\n }\n else {\n this.stream.write(Operators.slash);\n this.stream.write(dictionaryName);\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setGraphicsState);\n }\n };\n /**\n * `Executes the XObject`.\n * @private\n */\n PdfStreamWriter.prototype.executeObject = function (name) {\n this.stream.write(name.toString());\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.paintXObject);\n this.stream.write(Operators.newLine);\n };\n /**\n * `Closes path object`.\n * @private\n */\n PdfStreamWriter.prototype.closePath = function () {\n this.writeOperator(Operators.closePath);\n };\n /**\n * `Clips the path`.\n * @private\n */\n PdfStreamWriter.prototype.clipPath = function (useEvenOddRule) {\n this.stream.write(Operators.clipPath);\n if (useEvenOddRule) {\n this.stream.write(Operators.evenOdd);\n }\n this.stream.write(Operators.whiteSpace);\n this.stream.write(Operators.endPath);\n this.stream.write(Operators.newLine);\n };\n /**\n * `Closes, then fills and strokes the path`.\n * @private\n */\n PdfStreamWriter.prototype.closeFillStrokePath = function (useEvenOddRule) {\n this.stream.write(Operators.closeFillStrokePath);\n if (useEvenOddRule) {\n this.stream.write(Operators.evenOdd);\n this.stream.write(Operators.newLine);\n }\n else {\n this.stream.write(Operators.newLine);\n }\n };\n /**\n * `Fills and strokes path`.\n * @private\n */\n PdfStreamWriter.prototype.fillStrokePath = function (useEvenOddRule) {\n this.stream.write(Operators.fillStroke);\n if (useEvenOddRule) {\n this.stream.write(Operators.evenOdd);\n this.stream.write(Operators.newLine);\n }\n else {\n this.stream.write(Operators.newLine);\n }\n };\n /**\n * `Fills path`.\n * @private\n */\n PdfStreamWriter.prototype.fillPath = function (useEvenOddRule) {\n this.stream.write(Operators.fill);\n if (useEvenOddRule) {\n this.stream.write(Operators.evenOdd);\n this.stream.write(Operators.newLine);\n }\n else {\n this.stream.write(Operators.newLine);\n }\n };\n /**\n * `Ends the path`.\n * @private\n */\n PdfStreamWriter.prototype.endPath = function () {\n this.writeOperator(Operators.n);\n };\n /**\n * `Closes and fills the path`.\n * @private\n */\n PdfStreamWriter.prototype.closeFillPath = function (useEvenOddRule) {\n this.writeOperator(Operators.closePath);\n this.stream.write(Operators.fill);\n if (useEvenOddRule) {\n this.stream.write(Operators.evenOdd);\n this.stream.write(Operators.newLine);\n }\n else {\n this.stream.write(Operators.newLine);\n }\n };\n /**\n * `Closes and strokes the path`.\n * @private\n */\n PdfStreamWriter.prototype.closeStrokePath = function () {\n this.writeOperator(Operators.closeStrokePath);\n };\n /**\n * `Sets the text scaling`.\n * @private\n */\n PdfStreamWriter.prototype.setTextScaling = function (textScaling) {\n this.stream.write(PdfNumber.floatToString(textScaling));\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setTextScaling);\n };\n /**\n * `Strokes path`.\n * @private\n */\n PdfStreamWriter.prototype.strokePath = function () {\n this.writeOperator(Operators.stroke);\n };\n /**\n * `Restores` the graphics state.\n * @private\n */\n PdfStreamWriter.prototype.restoreGraphicsState = function () {\n this.writeOperator(Operators.restoreState);\n };\n /**\n * `Saves` the graphics state.\n * @private\n */\n PdfStreamWriter.prototype.saveGraphicsState = function () {\n this.writeOperator(Operators.saveState);\n };\n PdfStreamWriter.prototype.startNextLine = function (arg1, arg2) {\n if (typeof arg1 === 'undefined') {\n this.writeOperator(Operators.goToNextLine);\n }\n else if (arg1 instanceof PointF) {\n this.writePoint(arg1);\n this.writeOperator(Operators.setCoords);\n }\n else {\n this.writePoint(arg1, arg2);\n this.writeOperator(Operators.setCoords);\n }\n };\n /**\n * Shows the `text`.\n * @private\n */\n PdfStreamWriter.prototype.showText = function (text) {\n this.checkTextParam(text);\n this.writeText(text);\n this.writeOperator(Operators.setText);\n };\n /**\n * Sets `text leading`.\n * @private\n */\n PdfStreamWriter.prototype.setLeading = function (leading) {\n this.stream.write(PdfNumber.floatToString(leading));\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setTextLeading);\n };\n /**\n * `Begins the path`.\n * @private\n */\n PdfStreamWriter.prototype.beginPath = function (x, y) {\n this.writePoint(x, y);\n this.writeOperator(Operators.beginPath);\n };\n /**\n * `Begins text`.\n * @private\n */\n PdfStreamWriter.prototype.beginText = function () {\n this.writeOperator(Operators.beginText);\n };\n /**\n * `Ends text`.\n * @private\n */\n PdfStreamWriter.prototype.endText = function () {\n this.writeOperator(Operators.endText);\n };\n PdfStreamWriter.prototype.appendRectangle = function (arg1, arg2, arg3, arg4) {\n if (arg1 instanceof RectangleF) {\n this.appendRectangle(arg1.x, arg1.y, arg1.width, arg1.height);\n }\n else {\n this.writePoint(arg1, arg2);\n this.writePoint(arg3, arg4);\n this.writeOperator(Operators.appendRectangle);\n }\n };\n PdfStreamWriter.prototype.appendLineSegment = function (arg1, arg2) {\n if (arg1 instanceof PointF) {\n this.appendLineSegment(arg1.x, arg1.y);\n }\n else {\n this.writePoint(arg1, arg2);\n this.writeOperator(Operators.appendLineSegment);\n }\n };\n /**\n * Sets the `text rendering mode`.\n * @private\n */\n PdfStreamWriter.prototype.setTextRenderingMode = function (renderingMode) {\n this.stream.write(renderingMode.toString());\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setRenderingMode);\n };\n /**\n * Sets the `character spacing`.\n * @private\n */\n PdfStreamWriter.prototype.setCharacterSpacing = function (charSpacing) {\n this.stream.write(PdfNumber.floatToString(charSpacing));\n this.stream.write(Operators.whiteSpace);\n this.stream.write(Operators.setCharacterSpace);\n this.stream.write(Operators.newLine);\n };\n /**\n * Sets the `word spacing`.\n * @private\n */\n PdfStreamWriter.prototype.setWordSpacing = function (wordSpacing) {\n this.stream.write(PdfNumber.floatToString(wordSpacing));\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setWordSpace);\n };\n PdfStreamWriter.prototype.showNextLineText = function (arg1, arg2) {\n if (arg1 instanceof PdfString) {\n this.checkTextParam(arg1);\n this.writeText(arg1);\n this.writeOperator(Operators.setTextOnNewLine);\n }\n else {\n this.checkTextParam(arg1);\n this.writeText(arg1, arg2);\n this.writeOperator(Operators.setTextOnNewLine);\n }\n };\n PdfStreamWriter.prototype.setColorSpace = function (arg1, arg2) {\n if (arg1 instanceof PdfName && typeof arg2 === 'boolean') {\n var temparg1 = arg1;\n var temparg2 = arg2;\n // if (temparg1 == null) {\n // throw new Error('ArgumentNullException:name');\n // }\n var op = (temparg2) ? Operators.selectcolorspaceforstroking : Operators.selectcolorspacefornonstroking;\n this.stream.write(temparg1.toString());\n this.stream.write(Operators.whiteSpace);\n this.stream.write(op);\n this.stream.write(Operators.newLine);\n }\n else {\n var temparg1 = arg1;\n var temparg2 = arg2;\n this.setColorSpace(new PdfName(temparg1), temparg2);\n }\n };\n /**\n * Modifies current `transformation matrix`.\n * @private\n */\n PdfStreamWriter.prototype.modifyCtm = function (matrix) {\n if (matrix == null) {\n throw new Error('ArgumentNullException:matrix');\n }\n this.stream.write(matrix.toString());\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.modifyCtm);\n };\n PdfStreamWriter.prototype.setFont = function (font, name, size) {\n if (typeof name === 'string') {\n this.setFont(font, new PdfName(name), size);\n }\n else {\n if (font == null) {\n throw new Error('ArgumentNullException:font');\n }\n this.stream.write(name.toString());\n this.stream.write(Operators.whiteSpace);\n this.stream.write(PdfNumber.floatToString(size));\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setFont);\n }\n };\n /**\n * `Writes the operator`.\n * @private\n */\n PdfStreamWriter.prototype.writeOperator = function (opcode) {\n this.stream.write(opcode);\n this.stream.write(Operators.newLine);\n };\n PdfStreamWriter.prototype.checkTextParam = function (text) {\n if (text == null) {\n throw new Error('ArgumentNullException:text');\n }\n if (typeof text === 'string' && text === '') {\n throw new Error('ArgumentException:The text can not be an empty string, text');\n }\n };\n PdfStreamWriter.prototype.writeText = function (arg1, arg2) {\n if ((arg1 instanceof PdfString) && (typeof arg2 === 'undefined')) {\n this.stream.write(arg1.pdfEncode());\n }\n else {\n var start = void 0;\n var end = void 0;\n if (arg2) {\n start = PdfString.hexStringMark[0];\n end = PdfString.hexStringMark[1];\n }\n else {\n start = PdfString.stringMark[0];\n end = PdfString.stringMark[1];\n }\n this.stream.write(start);\n this.stream.write(arg1);\n this.stream.write(end);\n }\n };\n PdfStreamWriter.prototype.writePoint = function (arg1, arg2) {\n if ((arg1 instanceof PointF) && (typeof arg2 === 'undefined')) {\n this.writePoint(arg1.x, arg1.y);\n }\n else {\n var temparg1 = arg1;\n this.stream.write(PdfNumber.floatToString(temparg1));\n this.stream.write(Operators.whiteSpace);\n // NOTE: Change Y co-ordinate because we shifted co-ordinate system only.\n arg2 = this.updateY(arg2);\n this.stream.write(PdfNumber.floatToString(arg2));\n this.stream.write(Operators.whiteSpace);\n }\n };\n /**\n * `Updates y` co-ordinate.\n * @private\n */\n PdfStreamWriter.prototype.updateY = function (arg) {\n return -arg;\n };\n /**\n * `Writes string` to the file.\n * @private\n */\n PdfStreamWriter.prototype.write = function (string) {\n var builder = '';\n builder += string;\n builder += Operators.newLine;\n this.writeOperator(builder);\n };\n /**\n * `Writes comment` to the file.\n * @private\n */\n PdfStreamWriter.prototype.writeComment = function (comment) {\n if (comment != null && comment.length > 0) {\n var builder = '';\n builder += Operators.comment;\n builder += Operators.whiteSpace;\n builder += comment;\n //builder.Append( Operators.NewLine );\n this.writeOperator(builder);\n }\n else {\n throw new Error('Invalid comment');\n }\n };\n /**\n * Sets the `color and space`.\n * @private\n */\n PdfStreamWriter.prototype.setColorAndSpace = function (color, colorSpace, forStroking) {\n if (!color.isEmpty) {\n // bool test = color is PdfExtendedColor;\n this.stream.write(color.toString(colorSpace, forStroking));\n this.stream.write(Operators.newLine);\n }\n };\n // public setLineDashPattern(pattern : number[], patternOffset : number) : void\n // {\n // let pat : PdfArray = new PdfArray(pattern);\n // let off : PdfNumber = new PdfNumber(patternOffset);\n // this.setLineDashPatternHelper(pat, off);\n // }\n // private setLineDashPatternHelper(pattern : PdfArray, patternOffset : PdfNumber) : void\n // {\n // pattern.Save(this);\n // this.m_stream.write(Operators.whiteSpace);\n // patternOffset.Save(this);\n // this.m_stream.write(Operators.whiteSpace);\n // this.writeOperator(Operators.setDashPattern);\n // }\n /**\n * Sets the `line dash pattern`.\n * @private\n */\n PdfStreamWriter.prototype.setLineDashPattern = function (pattern, patternOffset) {\n // let pat : PdfArray = new PdfArray(pattern);\n // let off : PdfNumber = new PdfNumber(patternOffset);\n // this.setLineDashPatternHelper(pat, off);\n this.setLineDashPatternHelper(pattern, patternOffset);\n };\n /**\n * Sets the `line dash pattern`.\n * @private\n */\n PdfStreamWriter.prototype.setLineDashPatternHelper = function (pattern, patternOffset) {\n var tempPattern = '[';\n if (pattern.length > 1) {\n for (var index = 0; index < pattern.length; index++) {\n if (index === pattern.length - 1) {\n tempPattern += pattern[index].toString();\n }\n else {\n tempPattern += pattern[index].toString() + ' ';\n }\n }\n }\n tempPattern += '] ';\n tempPattern += patternOffset.toString();\n tempPattern += ' ' + Operators.setDashPattern;\n this.stream.write(tempPattern);\n this.stream.write(Operators.newLine);\n };\n /**\n * Sets the `miter limit`.\n * @private\n */\n PdfStreamWriter.prototype.setMiterLimit = function (miterLimit) {\n this.stream.write(PdfNumber.floatToString(miterLimit));\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setMiterLimit);\n };\n /**\n * Sets the `width of the line`.\n * @private\n */\n PdfStreamWriter.prototype.setLineWidth = function (width) {\n this.stream.write(PdfNumber.floatToString(width));\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setLineWidth);\n };\n /**\n * Sets the `line cap`.\n * @private\n */\n PdfStreamWriter.prototype.setLineCap = function (lineCapStyle) {\n this.stream.write((lineCapStyle).toString());\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setLineCapStyle);\n };\n /**\n * Sets the `line join`.\n * @private\n */\n PdfStreamWriter.prototype.setLineJoin = function (lineJoinStyle) {\n this.stream.write((lineJoinStyle).toString());\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setLineJoinStyle);\n };\n Object.defineProperty(PdfStreamWriter.prototype, \"position\", {\n //IPdfWriter members\n /**\n * Gets or sets the current `position` within the stream.\n * @private\n */\n get: function () {\n return this.stream.position;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStreamWriter.prototype, \"length\", {\n /**\n * Gets `stream length`.\n * @private\n */\n get: function () {\n var returnValue = 0;\n if (this.stream.data.length !== 0 && this.stream.data.length !== -1) {\n for (var index = 0; index < this.stream.data.length; index++) {\n returnValue += this.stream.data[index].length;\n }\n }\n return returnValue;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStreamWriter.prototype, \"document\", {\n /**\n * Gets and Sets the `current document`.\n * @private\n */\n get: function () {\n return null;\n },\n enumerable: true,\n configurable: true\n });\n return PdfStreamWriter;\n}());\nexport { PdfStreamWriter };\n","/**\n * PdfPen.ts class for EJ2-PDF\n */\nimport { PdfColor } from './pdf-color';\nimport { PdfDashStyle, PdfColorSpace } from './enum';\nimport { PdfBrush } from './brushes/pdf-brush';\n/**\n * `PdfPen` class defining settings for drawing operations, that determines the color,\n * width, and style of the drawing elements.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // create a new page\n * let page1 : PdfPage = document.pages.add();\n * // set pen\n * let pen : PdfPen = new PdfPen(new PdfColor(0, 0, 0));\n * // draw rectangle\n * page1.graphics.drawRectangle(pen, new RectangleF({x : 0, y : 0}, {width : 100, height : 50}));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\nvar PdfPen = /** @class */ (function () {\n function PdfPen(arg1, arg2) {\n //Fields\n /**\n * Specifies the `color of the pen`.\n * @default new PdfColor()\n * @private\n */\n this.pdfColor = new PdfColor(0, 0, 0);\n /**\n * Specifies the `dash offset of the pen`.\n * @default 0\n * @private\n */\n this.dashOffsetValue = 0;\n /**\n * Specifies the `dash pattern of the pen`.\n * @default [0]\n * @private\n */\n this.penDashPattern = [0];\n /**\n * Specifies the `dash style of the pen`.\n * @default Solid\n * @private\n */\n this.pdfDashStyle = PdfDashStyle.Solid;\n /**\n * Specifies the `line cap of the pen`.\n * @default 0\n * @private\n */\n this.pdfLineCap = 0;\n /**\n * Specifies the `line join of the pen`.\n * @default 0\n * @private\n */\n this.pdfLineJoin = 0;\n /**\n * Specifies the `width of the pen`.\n * @default 1.0\n * @private\n */\n this.penWidth = 1.0;\n /**\n * Specifies the `mitter limit of the pen`.\n * @default 0.0\n * @private\n */\n this.internalMiterLimit = 0.0;\n /**\n * Stores the `colorspace` value.\n * @default Rgb\n * @private\n */\n this.colorSpace = PdfColorSpace.Rgb;\n if (typeof arg2 === 'number') {\n this.constructor(arg1);\n this.width = arg2;\n }\n else if (typeof arg2 === 'undefined' && arg1 instanceof PdfBrush) {\n this.setBrush(arg1);\n }\n else if (typeof arg2 === 'undefined' && arg1 instanceof PdfColor) {\n this.color = arg1;\n }\n }\n Object.defineProperty(PdfPen.prototype, \"color\", {\n //Properties\n /**\n * Gets or sets the `color of the pen`.\n * @private\n */\n get: function () {\n return this.pdfColor;\n },\n set: function (value) {\n this.pdfColor = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPen.prototype, \"dashOffset\", {\n /**\n * Gets or sets the `dash offset of the pen`.\n * @private\n */\n get: function () {\n if (typeof this.dashOffsetValue === 'undefined' || this.dashOffsetValue == null) {\n return 0;\n }\n else {\n return this.dashOffsetValue;\n }\n },\n set: function (value) {\n this.dashOffsetValue = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPen.prototype, \"dashPattern\", {\n /**\n * Gets or sets the `dash pattern of the pen`.\n * @private\n */\n get: function () {\n return this.penDashPattern;\n },\n set: function (value) {\n this.penDashPattern = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPen.prototype, \"dashStyle\", {\n /**\n * Gets or sets the `dash style of the pen`.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // create a new page\n * let page1 : PdfPage = document.pages.add();\n * // set pen\n * let pen : PdfPen = new PdfPen(new PdfColor(0, 0, 0));\n * //\n * // set pen style\n * pen.dashStyle = PdfDashStyle.DashDot;\n * // get pen style\n * let style : PdfDashStyle = pen.dashStyle;\n * //\n * // draw rectangle\n * page1.graphics.drawRectangle(pen, new RectangleF({x : 0, y : 0}, {width : 100, height : 50}));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n return this.pdfDashStyle;\n },\n set: function (value) {\n if (this.pdfDashStyle !== value) {\n this.pdfDashStyle = value;\n switch (this.pdfDashStyle) {\n case PdfDashStyle.Custom:\n break;\n case PdfDashStyle.Dash:\n this.penDashPattern = [3, 1];\n break;\n case PdfDashStyle.Dot:\n this.penDashPattern = [1, 1];\n break;\n case PdfDashStyle.DashDot:\n this.penDashPattern = [3, 1, 1, 1];\n break;\n case PdfDashStyle.DashDotDot:\n this.penDashPattern = [3, 1, 1, 1, 1, 1];\n break;\n case PdfDashStyle.Solid:\n break;\n default:\n this.pdfDashStyle = PdfDashStyle.Solid;\n this.penDashPattern = [0];\n break;\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPen.prototype, \"lineCap\", {\n /**\n * Gets or sets the `line cap of the pen`.\n * @private\n */\n get: function () {\n return this.pdfLineCap;\n },\n set: function (value) {\n this.pdfLineCap = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPen.prototype, \"lineJoin\", {\n /**\n * Gets or sets the `line join style of the pen`.\n * @private\n */\n get: function () {\n return this.pdfLineJoin;\n },\n set: function (value) {\n this.pdfLineJoin = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPen.prototype, \"miterLimit\", {\n /**\n * Gets or sets the `miter limit`.\n * @private\n */\n get: function () {\n return this.internalMiterLimit;\n },\n set: function (value) {\n this.internalMiterLimit = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPen.prototype, \"width\", {\n /**\n * Gets or sets the `width of the pen`.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // create a new page\n * let page1 : PdfPage = document.pages.add();\n * // set pen\n * let pen : PdfPen = new PdfPen(new PdfColor(0, 0, 0));\n * //\n * // set pen width\n * pen.width = 2;\n * //\n * // draw rectangle\n * page1.graphics.drawRectangle(pen, new RectangleF({x : 0, y : 0}, {width : 100, height : 50}));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n return this.penWidth;\n },\n set: function (value) {\n this.penWidth = value;\n },\n enumerable: true,\n configurable: true\n });\n //Helper\n /**\n * `Clones` this instance of PdfPen class.\n * @private\n */\n PdfPen.prototype.clone = function () {\n var pen = this;\n return pen;\n };\n /**\n * `Sets the brush`.\n * @private\n */\n PdfPen.prototype.setBrush = function (brush) {\n var sBrush = brush;\n this.color = sBrush.color;\n this.pdfBrush = sBrush;\n };\n /**\n * `Monitors the changes`.\n * @private\n */\n PdfPen.prototype.monitorChanges = function (currentPen, streamWriter, getResources, saveState, currentColorSpace, matrix) {\n var diff = false;\n saveState = true;\n if (currentPen == null) {\n diff = true;\n }\n diff = this.dashControl(currentPen, saveState, streamWriter);\n streamWriter.setLineWidth(this.width);\n streamWriter.setLineJoin(this.lineJoin);\n streamWriter.setLineCap(this.lineCap);\n var miterLimit = this.miterLimit;\n if (miterLimit > 0) {\n streamWriter.setMiterLimit(miterLimit);\n diff = true;\n }\n var brush = this.pdfBrush;\n streamWriter.setColorAndSpace(this.color, currentColorSpace, true);\n diff = true;\n return diff;\n };\n /**\n * `Controls the dash style` and behaviour of each line.\n * @private\n */\n PdfPen.prototype.dashControl = function (pen, saveState, streamWriter) {\n saveState = true;\n var lineWidth = this.width;\n var pattern = this.getPattern();\n streamWriter.setLineDashPattern(pattern, this.dashOffset * lineWidth);\n return saveState;\n };\n /**\n * `Gets the pattern` of PdfPen.\n * @private\n */\n PdfPen.prototype.getPattern = function () {\n var pattern = this.dashPattern;\n for (var i = 0; i < pattern.length; ++i) {\n pattern[i] *= this.width;\n }\n return pattern;\n };\n return PdfPen;\n}());\nexport { PdfPen };\n","/**\n * PdfTransformationMatrix.ts class for EJ2-PDF\n */\nimport { PointF } from './../drawing/pdf-drawing';\nimport { PdfNumber } from './../primitives/pdf-number';\n/**\n * Class for representing Root `transformation matrix`.\n */\nvar PdfTransformationMatrix = /** @class */ (function () {\n function PdfTransformationMatrix(value) {\n /**\n * Value for `angle converting`.\n * @default 180.0 / Math.PI\n * @private\n */\n this.radDegFactor = 180.0 / Math.PI;\n if (typeof value === 'undefined') {\n this.transformationMatrix = new Matrix(1.00, 0.00, 0.00, 1.00, 0.00, 0.00);\n }\n else {\n this.transformationMatrix = new Matrix(1.00, 0.00, 0.00, -1.00, 0.00, 0.00);\n }\n }\n Object.defineProperty(PdfTransformationMatrix.prototype, \"matrix\", {\n // Properties\n /**\n * Gets or sets the `internal matrix object`.\n * @private\n */\n get: function () {\n return this.transformationMatrix;\n },\n set: function (value) {\n this.transformationMatrix = value;\n },\n enumerable: true,\n configurable: true\n });\n // Public methods\n /**\n * `Translates` coordinates by specified coordinates.\n * @private\n */\n PdfTransformationMatrix.prototype.translate = function (offsetX, offsetY) {\n this.transformationMatrix.translate(offsetX, offsetY);\n };\n /**\n * `Scales` coordinates by specified coordinates.\n * @private\n */\n PdfTransformationMatrix.prototype.scale = function (scaleX, scaleY) {\n this.transformationMatrix.elements[0] = scaleX;\n this.transformationMatrix.elements[3] = scaleY;\n };\n /**\n * `Rotates` coordinate system in counterclockwise direction.\n * @private\n */\n PdfTransformationMatrix.prototype.rotate = function (angle) {\n //Convert from degree to radian \n angle = (angle * Math.PI) / 180;\n //Rotation \n this.transformationMatrix.elements[0] = Math.cos(angle);\n this.transformationMatrix.elements[1] = Math.sin(angle);\n this.transformationMatrix.elements[2] = -Math.sin(angle);\n this.transformationMatrix.elements[3] = Math.cos(angle);\n };\n // Overrides\n /**\n * Gets `PDF representation`.\n * @private\n */\n PdfTransformationMatrix.prototype.toString = function () {\n var builder = '';\n var whitespace = ' ';\n for (var i = 0, len = this.transformationMatrix.elements.length; i < len; i++) {\n var temp = this.matrix.elements[i];\n builder += PdfNumber.floatToString(this.transformationMatrix.elements[i]);\n builder += whitespace;\n }\n return builder;\n };\n // Implementation\n /**\n * `Multiplies` matrices (changes coordinate system.)\n * @private\n */\n PdfTransformationMatrix.prototype.multiply = function (matrix) {\n this.transformationMatrix.multiply(matrix.matrix);\n };\n /**\n * Converts `degrees to radians`.\n * @private\n */\n PdfTransformationMatrix.degreesToRadians = function (degreesX) {\n return this.degRadFactor * degreesX;\n };\n /**\n * Converts `radians to degrees`.\n * @private\n */\n PdfTransformationMatrix.prototype.radiansToDegrees = function (radians) {\n return this.radDegFactor * radians;\n };\n /**\n * `Clones` this instance of PdfTransformationMatrix.\n * @private\n */\n PdfTransformationMatrix.prototype.clone = function () {\n return this;\n };\n // Constants\n /**\n * Value for `angle converting`.\n * @default Math.PI / 180.0\n * @private\n */\n PdfTransformationMatrix.degRadFactor = Math.PI / 180.0;\n return PdfTransformationMatrix;\n}());\nexport { PdfTransformationMatrix };\nvar Matrix = /** @class */ (function () {\n function Matrix(arg1, arg2, arg3, arg4, arg5, arg6) {\n if (typeof arg1 === 'undefined') {\n this.metrixElements = [];\n }\n else if (typeof arg1 === 'number') {\n this.constructor();\n this.metrixElements.push(arg1);\n this.metrixElements.push(arg2);\n this.metrixElements.push(arg3);\n this.metrixElements.push(arg4);\n this.metrixElements.push(arg5);\n this.metrixElements.push(arg6);\n }\n else {\n this.metrixElements = arg1;\n }\n }\n Object.defineProperty(Matrix.prototype, \"elements\", {\n // Properties\n /**\n * Gets the `elements`.\n * @private\n */\n get: function () {\n return this.metrixElements;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Matrix.prototype, \"offsetX\", {\n /**\n * Gets the off set `X`.\n * @private\n */\n get: function () {\n return this.metrixElements[4];\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Matrix.prototype, \"offsetY\", {\n /**\n * Gets the off set `Y`.\n * @private\n */\n get: function () {\n return this.metrixElements[5];\n },\n enumerable: true,\n configurable: true\n });\n // Implementation\n /**\n * `Translates` coordinates by specified coordinates.\n * @private\n */\n Matrix.prototype.translate = function (offsetX, offsetY) {\n this.metrixElements[4] = offsetX;\n this.metrixElements[5] = offsetY;\n };\n /**\n * `Translates` the specified offset X.\n * @private\n */\n Matrix.prototype.transform = function (point) {\n var x = point.x;\n var y = point.y;\n var x2 = x * this.elements[0] + y * this.elements[2] + this.offsetX;\n var y2 = x * this.elements[1] + y * this.elements[3] + this.offsetY;\n return new PointF(x2, y2);\n };\n /**\n * `Multiplies matrices` (changes coordinate system.)\n * @private\n */\n Matrix.prototype.multiply = function (matrix) {\n var tempMatrix = [];\n tempMatrix.push(this.elements[0] * matrix.elements[0] + this.elements[1] * matrix.elements[2]);\n tempMatrix[1] = (this.elements[0] * matrix.elements[1] + this.elements[1] * matrix.elements[3]);\n tempMatrix[2] = (this.elements[2] * matrix.elements[0] + this.elements[3] * matrix.elements[2]);\n tempMatrix[3] = (this.elements[2] * matrix.elements[1] + this.elements[3] * matrix.elements[3]);\n tempMatrix[4] = (this.offsetX * matrix.elements[0] + this.offsetY * matrix.elements[2] + matrix.offsetX);\n tempMatrix[5] = (this.offsetX * matrix.elements[1] + this.offsetY * matrix.elements[3] + matrix.offsetY);\n for (var i = 0; i < tempMatrix.length; i++) {\n this.elements[i] = tempMatrix[i];\n }\n };\n // IDisposable Members\n /**\n * `Dispose` this instance of PdfTransformationMatrix class.\n * @private\n */\n Matrix.prototype.dispose = function () {\n this.metrixElements = null;\n };\n // ICloneable Members\n /**\n * `Clones` this instance of PdfTransformationMatrix class.\n * @private\n */\n Matrix.prototype.clone = function () {\n var m = new Matrix(this.metrixElements);\n return m;\n };\n return Matrix;\n}());\nexport { Matrix };\n","/**\n * `constants.ts` class for EJ2-PDF\n * @private\n */\nvar ProcedureSets = /** @class */ (function () {\n function ProcedureSets() {\n /**\n * Specifies the `PDF` procedure set.\n * @private\n */\n this.pdf = 'PDF';\n /**\n * Specifies the `Text` procedure set.\n * @private\n */\n this.text = 'Text';\n /**\n * Specifies the `ImageB` procedure set.\n * @private\n */\n this.imageB = 'ImageB';\n /**\n * Specifies the `ImageC` procedure set.\n * @private\n */\n this.imageC = 'ImageC';\n /**\n * Specifies the `ImageI` procedure set.\n * @private\n */\n this.imageI = 'ImageI';\n }\n return ProcedureSets;\n}());\nexport { ProcedureSets };\n","/**\n * Dictionary class\n * @private\n * @hidden\n */\nvar TemporaryDictionary = /** @class */ (function () {\n function TemporaryDictionary() {\n /**\n * @hidden\n * @private\n */\n this.mKeys = [];\n /**\n * @hidden\n * @private\n */\n this.mValues = [];\n }\n /**\n * @hidden\n * @private\n */\n TemporaryDictionary.prototype.size = function () {\n return this.mKeys.length;\n };\n /**\n * @hidden\n * @private\n */\n TemporaryDictionary.prototype.add = function (key, value) {\n if (key === undefined || key === null || value === undefined || value === null) {\n throw new ReferenceError('Provided key or value is not valid.');\n }\n var index = this.mKeys.indexOf(key);\n if (index < 0) {\n this.mKeys.push(key);\n this.mValues.push(value);\n return 1;\n }\n else {\n throw new RangeError('An item with the same key has already been added.');\n }\n };\n /**\n * @hidden\n * @private\n */\n TemporaryDictionary.prototype.keys = function () {\n return this.mKeys;\n };\n /**\n * @hidden\n * @private\n */\n TemporaryDictionary.prototype.values = function () {\n return this.mValues;\n };\n /**\n * @hidden\n * @private\n */\n TemporaryDictionary.prototype.getValue = function (key) {\n if (key === undefined || key === null) {\n throw new ReferenceError('Provided key is not valid.');\n }\n var index = this.mKeys.indexOf(key);\n if (index < 0) {\n throw new RangeError('No item with the specified key has been added.');\n }\n else {\n return this.mValues[index];\n }\n };\n /**\n * @hidden\n * @private\n */\n TemporaryDictionary.prototype.setValue = function (key, value) {\n if (key === undefined || key === null) {\n throw new ReferenceError('Provided key is not valid.');\n }\n var index = this.mKeys.indexOf(key);\n if (index < 0) {\n this.mKeys.push(key);\n this.mValues.push(value);\n }\n else {\n this.mValues[index] = value;\n }\n };\n /**\n * @hidden\n * @private\n */\n TemporaryDictionary.prototype.remove = function (key) {\n if (key === undefined || key === null) {\n throw new ReferenceError('Provided key is not valid.');\n }\n var index = this.mKeys.indexOf(key);\n if (index < 0) {\n throw new RangeError('No item with the specified key has been added.');\n }\n else {\n this.mKeys.splice(index, 1);\n this.mValues.splice(index, 1);\n return true;\n }\n };\n /**\n * @hidden\n * @private\n */\n TemporaryDictionary.prototype.containsKey = function (key) {\n if (key === undefined || key === null) {\n throw new ReferenceError('Provided key is not valid.');\n }\n var index = this.mKeys.indexOf(key);\n if (index < 0) {\n return false;\n }\n return true;\n };\n /**\n * @hidden\n * @private\n */\n TemporaryDictionary.prototype.clear = function () {\n this.mKeys = [];\n this.mValues = [];\n };\n return TemporaryDictionary;\n}());\nexport { TemporaryDictionary };\n","import { PdfDictionary } from './../primitives/pdf-dictionary';\nimport { PdfNumber } from './../primitives/pdf-number';\nimport { PdfName } from './../primitives/pdf-name';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\n/**\n * Represents a simple `transparency`.\n * @private\n */\nvar PdfTransparency = /** @class */ (function () {\n // Properties\n // /**\n // * Gets the `stroke` operation alpha value.\n // * @private\n // */\n // public get stroke() : number {\n // let result : number = this.getNumber(this.dictionaryProperties.CA);\n // return result;\n // }\n // /**\n // * Gets the `fill` operation alpha value.\n // * @private\n // */\n // public get fill() : number {\n // let result : number = this.getNumber(this.dictionaryProperties.ca);\n // return result;\n // }\n // /**\n // * Gets the `blend mode`.\n // * @private\n // */\n // public get mode() : PdfBlendMode {\n // let result : string = this.getName(this.dictionaryProperties.ca);\n // return PdfBlendMode.Normal;\n // }\n // Constructors\n /**\n * Initializes a new instance of the `Transparency` class.\n * @private\n */\n function PdfTransparency(stroke, fill, mode) {\n // Fields\n /**\n * Internal variable to store `dictionary`.\n * @default new PdfDictionary()\n * @private\n */\n this.dictionary = new PdfDictionary();\n /**\n * Internal variable for accessing fields from `DictionryProperties` class.\n * @default new DictionaryProperties()\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n this.dictionary.items.setValue(this.dictionaryProperties.CA, new PdfNumber(stroke));\n this.dictionary.items.setValue(this.dictionaryProperties.ca, new PdfNumber(fill));\n this.dictionary.items.setValue(this.dictionaryProperties.BM, new PdfName(mode.toString()));\n }\n Object.defineProperty(PdfTransparency.prototype, \"element\", {\n // // Implementation\n // /**\n // * Gets the `number value`.\n // * @private\n // */\n // private getNumber(keyName : string) : number {\n // let result : number = 0.0;\n // let numb : PdfNumber = this.dictionary.items.getValue(keyName) as PdfNumber;\n // result = numb.intValue;\n // return result;\n // }\n // /**\n // * Gets the `name value`.\n // * @private\n // */\n // private getName(keyName : string) : string {\n // let result : string = null;\n // let name : PdfName = this.dictionary.items.getValue(keyName) as PdfName;\n // result = name.value;\n // return result;\n // }\n // IPdfWrapper Members\n /**\n * Gets the `element`.\n * @private\n */\n get: function () {\n return this.dictionary;\n },\n enumerable: true,\n configurable: true\n });\n return PdfTransparency;\n}());\nexport { PdfTransparency };\n","/**\n * Represent a `collection of automatic fields information`.\n * @private\n */\nvar PdfAutomaticFieldInfoCollection = /** @class */ (function () {\n /**\n * Initializes a new instance of the 'PdfPageNumberFieldInfoCollection' class.\n * @private\n */\n function PdfAutomaticFieldInfoCollection() {\n /**\n * Internal variable to store instance of `pageNumberFields` class.\n * @private\n */\n this.automaticFieldsInformation = [];\n //\n }\n Object.defineProperty(PdfAutomaticFieldInfoCollection.prototype, \"automaticFields\", {\n /**\n * Gets the `page number fields collection`.\n * @private\n */\n get: function () {\n return this.automaticFieldsInformation;\n },\n enumerable: true,\n configurable: true\n });\n // Public methods\n /// Adds the specified field info.\n /**\n * Add page number field into collection.\n * @private\n */\n PdfAutomaticFieldInfoCollection.prototype.add = function (fieldInfo) {\n return this.automaticFields.push(fieldInfo);\n };\n return PdfAutomaticFieldInfoCollection;\n}());\nexport { PdfAutomaticFieldInfoCollection };\n","/**\n * Represents a base class for all page graphics elements.\n */\nvar PdfGraphicsElement = /** @class */ (function () {\n // Constructors\n function PdfGraphicsElement() {\n //\n }\n /**\n * `Draws` the page number field.\n * @public\n */\n PdfGraphicsElement.prototype.drawHelper = function (graphics, x, y) {\n var bNeedSave = (x !== 0 || y !== 0);\n var gState = null;\n // Translate co-ordinates.\n if (bNeedSave) {\n // Save state.\n gState = graphics.save();\n graphics.translateTransform(x, y);\n }\n this.drawInternal(graphics);\n if (bNeedSave) {\n // Restore state.\n graphics.restore(gState);\n }\n };\n return PdfGraphicsElement;\n}());\nexport { PdfGraphicsElement };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * PdfAutomaticField.ts class for EJ2-PDF\n */\nimport { RectangleF, SizeF, PointF } from './../../drawing/pdf-drawing';\nimport { PdfSolidBrush } from './../../graphics/brushes/pdf-solid-brush';\nimport { PdfColor } from './../../graphics/pdf-color';\nimport { PdfDocument } from './../pdf-document';\nimport { PdfGraphicsElement } from './../../graphics/figures/base/graphics-element';\nimport { PdfAutomaticFieldInfo } from './automatic-field-info';\n/**\n * Represents a fields which is calculated before the document saves.\n */\nvar PdfAutomaticField = /** @class */ (function (_super) {\n __extends(PdfAutomaticField, _super);\n // Constructors\n function PdfAutomaticField() {\n var _this = _super.call(this) || this;\n // Fields\n _this.internalBounds = new RectangleF(0, 0, 0, 0);\n _this.internalTemplateSize = new SizeF(0, 0);\n return _this;\n }\n Object.defineProperty(PdfAutomaticField.prototype, \"bounds\", {\n // Properties\n get: function () {\n return this.internalBounds;\n },\n set: function (value) {\n this.internalBounds = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAutomaticField.prototype, \"size\", {\n get: function () {\n return new SizeF(this.bounds.width, this.bounds.height);\n },\n set: function (value) {\n this.bounds.width = value.width;\n this.bounds.height = value.height;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAutomaticField.prototype, \"location\", {\n get: function () {\n return new PointF(this.bounds.x, this.bounds.y);\n },\n set: function (value) {\n this.bounds.x = value.x;\n this.bounds.y = value.y;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAutomaticField.prototype, \"font\", {\n get: function () {\n return this.internalFont;\n },\n set: function (value) {\n this.internalFont = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAutomaticField.prototype, \"brush\", {\n get: function () {\n return this.internalBrush;\n },\n set: function (value) {\n this.internalBrush = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAutomaticField.prototype, \"pen\", {\n get: function () {\n return this.internalPen;\n },\n set: function (value) {\n this.internalPen = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAutomaticField.prototype, \"stringFormat\", {\n get: function () {\n return this.internalStringFormat;\n },\n set: function (value) {\n this.internalStringFormat = value;\n },\n enumerable: true,\n configurable: true\n });\n PdfAutomaticField.prototype.performDrawHelper = function (graphics, location, scalingX, scalingY) {\n if (this.bounds.height === 0 || this.bounds.width === 0) {\n var text = this.getValue(graphics);\n this.internalTemplateSize = this.getFont().measureString(text, this.size, this.stringFormat);\n }\n };\n PdfAutomaticField.prototype.draw = function (arg1, arg2, arg3) {\n if (typeof arg2 === 'undefined') {\n var location_1 = new PointF(0, 0);\n this.draw(arg1, location_1);\n }\n else if (arg2 instanceof PointF) {\n this.draw(arg1, arg2.x, arg2.y);\n }\n else {\n this.drawHelper(arg1, arg2, arg3);\n var info = new PdfAutomaticFieldInfo(this, new PointF(arg2, arg3));\n arg1.automaticFields.add(info);\n }\n };\n PdfAutomaticField.prototype.getSize = function () {\n if (this.bounds.height === 0 || this.bounds.width === 0) {\n return this.internalTemplateSize;\n }\n else {\n return this.size;\n }\n };\n PdfAutomaticField.prototype.drawInternal = function (graphics) {\n //\n };\n /* tslint:disable */\n PdfAutomaticField.prototype.getBrush = function () {\n return (typeof this.internalBrush === 'undefined' || this.internalBrush == null) ? new PdfSolidBrush(new PdfColor(0, 0, 0)) : this.internalBrush;\n };\n PdfAutomaticField.prototype.getFont = function () {\n return (typeof this.internalFont === 'undefined' || this.internalFont == null) ? PdfDocument.defaultFont : this.internalFont;\n };\n /* tslint:enable */\n PdfAutomaticField.prototype.getPageFromGraphics = function (graphics) {\n if (typeof graphics.page !== 'undefined' && graphics.page !== null) {\n var page = graphics.page;\n return page;\n }\n else {\n var page = graphics.currentPage;\n return page;\n }\n };\n return PdfAutomaticField;\n}(PdfGraphicsElement));\nexport { PdfAutomaticField };\n","/**\n * PdfAutomaticFieldInfo.ts class for EJ2-PDF\n * @private\n */\nimport { PointF } from './../../drawing/pdf-drawing';\nimport { PdfAutomaticField } from './automatic-field';\n/**\n * Represents information about the automatic field.\n * @private\n */\nvar PdfAutomaticFieldInfo = /** @class */ (function () {\n function PdfAutomaticFieldInfo(field, location, scaleX, scaleY) {\n // Fields\n /**\n * Internal variable to store location of the field.\n * @private\n */\n this.pageNumberFieldLocation = new PointF();\n /**\n * Internal variable to store field.\n * @private\n */\n this.pageNumberField = null;\n /**\n * Internal variable to store x scaling factor.\n * @private\n */\n this.scaleX = 1;\n /**\n * Internal variable to store y scaling factor.\n * @private\n */\n this.scaleY = 1;\n if (typeof location === 'undefined' && field instanceof PdfAutomaticFieldInfo) {\n this.pageNumberField = field.field;\n this.pageNumberFieldLocation = field.location;\n this.scaleX = field.scalingX;\n this.scaleY = field.scalingY;\n }\n else if (typeof scaleX === 'undefined' && location instanceof PointF && field instanceof PdfAutomaticField) {\n this.pageNumberField = field;\n this.pageNumberFieldLocation = location;\n }\n else {\n this.pageNumberField = field;\n this.pageNumberFieldLocation = location;\n this.scaleX = scaleX;\n this.scaleY = scaleY;\n }\n }\n Object.defineProperty(PdfAutomaticFieldInfo.prototype, \"location\", {\n /* tslint:enable */\n // Properties\n /**\n * Gets or sets the location.\n * @private\n */\n get: function () {\n return this.pageNumberFieldLocation;\n },\n set: function (value) {\n this.pageNumberFieldLocation = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAutomaticFieldInfo.prototype, \"field\", {\n /**\n * Gets or sets the field.\n * @private\n */\n get: function () {\n return this.pageNumberField;\n },\n set: function (value) {\n this.pageNumberField = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAutomaticFieldInfo.prototype, \"scalingX\", {\n /**\n * Gets or sets the scaling X factor.\n * @private\n */\n get: function () {\n return this.scaleX;\n },\n set: function (value) {\n this.scaleX = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAutomaticFieldInfo.prototype, \"scalingY\", {\n /**\n * Gets or sets the scaling Y factor.\n * @private\n */\n get: function () {\n return this.scaleY;\n },\n set: function (value) {\n this.scaleY = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfAutomaticFieldInfo;\n}());\nexport { PdfAutomaticFieldInfo };\n","/**\n * ByteArray class\n * Used to keep information about image stream as byte array.\n * @private\n */\nvar ByteArray = /** @class */ (function () {\n /**\n * Initialize the new instance for `byte-array` class\n * @hidden\n * @private\n */\n function ByteArray(length) {\n /**\n * Current stream `position`.\n * @default 0\n * @private\n */\n this.mPosition = 0;\n this.buffer = new Uint8Array(length);\n this.dataView = new DataView(this.buffer.buffer);\n }\n Object.defineProperty(ByteArray.prototype, \"position\", {\n /**\n * Gets and Sets a current `position` of byte array.\n * @hidden\n * @private\n */\n get: function () {\n return this.mPosition;\n },\n set: function (value) {\n this.mPosition = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Read` from current stream position.\n * @default 0\n * @hidden\n * @private\n */\n ByteArray.prototype.read = function (buffer, offset, count) {\n for (var index = offset; index < count; index++) {\n var position = this.position;\n buffer.buffer[index] = this.readByte(position);\n this.position++;\n }\n };\n /**\n * @hidden\n */\n ByteArray.prototype.getBuffer = function (index) {\n return this.buffer[index];\n };\n /**\n * @hidden\n */\n ByteArray.prototype.writeFromBase64String = function (base64) {\n var arr = this.encodedString(base64);\n this.buffer = arr;\n };\n /**\n * @hidden\n */\n ByteArray.prototype.encodedString = function (input) {\n var keyStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n var chr1;\n var chr2;\n var chr3;\n var enc1;\n var enc2;\n var enc3;\n var enc4;\n var i = 0;\n var resultIndex = 0;\n var dataUrlPrefix = 'data:';\n input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, '');\n var totalLength = input.length * 3 / 4;\n if (input.charAt(input.length - 1) === keyStr.charAt(64)) {\n totalLength--;\n }\n var output = new Uint8Array(totalLength | 0);\n while (i < input.length) {\n enc1 = keyStr.indexOf(input.charAt(i++));\n enc2 = keyStr.indexOf(input.charAt(i++));\n enc3 = keyStr.indexOf(input.charAt(i++));\n enc4 = keyStr.indexOf(input.charAt(i++));\n chr1 = (enc1 << 2) | (enc2 >> 4);\n chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\n chr3 = ((enc3 & 3) << 6) | enc4;\n output[resultIndex++] = chr1;\n output[resultIndex++] = chr2;\n output[resultIndex++] = chr3;\n }\n return output;\n };\n /**\n * @hidden\n */\n ByteArray.prototype.readByte = function (offset) {\n return (this.buffer[offset]);\n };\n Object.defineProperty(ByteArray.prototype, \"internalBuffer\", {\n /**\n * @hidden\n */\n get: function () {\n return this.buffer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ByteArray.prototype, \"count\", {\n /**\n * @hidden\n */\n get: function () {\n return this.buffer.byteLength;\n },\n enumerable: true,\n configurable: true\n });\n return ByteArray;\n}());\nexport { ByteArray };\n","/**\n * `PdfBoolean` class is used to perform boolean related primitive operations.\n * @private\n */\nvar PdfBoolean = /** @class */ (function () {\n //constructor\n /**\n * Initializes a new instance of the `PdfBoolean` class.\n * @private\n */\n function PdfBoolean(value) {\n /**\n * Internal variable to store the `position`.\n * @default -1\n * @private\n */\n this.currentPosition = -1;\n this.value = value;\n }\n Object.defineProperty(PdfBoolean.prototype, \"status\", {\n //Properties\n /**\n * Gets or sets the `Status` of the specified object.\n * @private\n */\n get: function () {\n return this.objectStatus;\n },\n set: function (value) {\n this.objectStatus = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfBoolean.prototype, \"isSaving\", {\n /**\n * Gets or sets a value indicating whether this document `is saving` or not.\n * @private\n */\n get: function () {\n return this.saving;\n },\n set: function (value) {\n this.saving = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfBoolean.prototype, \"objectCollectionIndex\", {\n /**\n * Gets or sets the `index` value of the specified object.\n * @private\n */\n get: function () {\n return this.index;\n },\n set: function (value) {\n this.index = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfBoolean.prototype, \"position\", {\n /**\n * Gets or sets the `position` of the object.\n * @private\n */\n get: function () {\n return this.currentPosition;\n },\n set: function (value) {\n this.currentPosition = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfBoolean.prototype, \"clonedObject\", {\n /**\n * Returns `cloned object`.\n * @private\n */\n get: function () {\n var rValue = null;\n return rValue;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Saves` the object using the specified writer.\n * @private\n */\n PdfBoolean.prototype.save = function (writer) {\n writer.write(this.boolToStr(this.value));\n };\n /**\n * Creates a `copy of PdfBoolean`.\n * @private\n */\n PdfBoolean.prototype.clone = function (crossTable) {\n var newNumber = new PdfBoolean(this.value);\n return newNumber;\n };\n // Implementation\n /**\n * Converts `boolean to string` - 0/1 'true'/'false'.\n * @private\n */\n PdfBoolean.prototype.boolToStr = function (value) {\n return value ? 'true' : 'false';\n };\n return PdfBoolean;\n}());\nexport { PdfBoolean };\n","/**\n * public Enum for `PdfLayoutType`.\n * @private\n */\nexport var PdfLayoutType;\n(function (PdfLayoutType) {\n /**\n * Specifies the type of `Paginate`.\n * @private\n */\n PdfLayoutType[PdfLayoutType[\"Paginate\"] = 0] = \"Paginate\";\n /**\n * Specifies the type of `OnePage`.\n * @private\n */\n PdfLayoutType[PdfLayoutType[\"OnePage\"] = 1] = \"OnePage\";\n})(PdfLayoutType || (PdfLayoutType = {}));\n/**\n * public Enum for `PdfLayoutBreakType`.\n * @private\n */\nexport var PdfLayoutBreakType;\n(function (PdfLayoutBreakType) {\n /**\n * Specifies the type of `FitPage`.\n * @private\n */\n PdfLayoutBreakType[PdfLayoutBreakType[\"FitPage\"] = 0] = \"FitPage\";\n /**\n * Specifies the type of `FitElement`.\n * @private\n */\n PdfLayoutBreakType[PdfLayoutBreakType[\"FitElement\"] = 1] = \"FitElement\";\n /**\n * Specifies the type of `FitColumnsToPage`.\n * @private\n */\n PdfLayoutBreakType[PdfLayoutBreakType[\"FitColumnsToPage\"] = 2] = \"FitColumnsToPage\";\n})(PdfLayoutBreakType || (PdfLayoutBreakType = {}));\n","/**\n * Used to perform `convertion between pixels and points`.\n * @private\n */\nvar PdfUnitConverter = /** @class */ (function () {\n //constructors\n /**\n * Initializes a new instance of the `UnitConvertor` class with DPI value.\n * @private\n */\n function PdfUnitConverter(dpi) {\n this.updateProportionsHelper(dpi);\n }\n /**\n * `Converts` the value, from one graphics unit to another graphics unit.\n * @private\n */\n PdfUnitConverter.prototype.convertUnits = function (value, from, to) {\n return this.convertFromPixels(this.convertToPixels(value, from), to);\n };\n /**\n * Converts the value `to pixel` from specified graphics unit.\n * @private\n */\n PdfUnitConverter.prototype.convertToPixels = function (value, from) {\n var index = from;\n var result = (value * this.proportions[index]);\n return result;\n };\n /**\n * Converts value, to specified graphics unit `from Pixel`.\n * @private\n */\n PdfUnitConverter.prototype.convertFromPixels = function (value, to) {\n var index = to;\n var result = (value / this.proportions[index]);\n return result;\n };\n /**\n * `Update proportions` matrix according to Graphics settings.\n * @private\n */\n PdfUnitConverter.prototype.updateProportionsHelper = function (pixelPerInch) {\n this.proportions = [\n pixelPerInch / 2.54,\n pixelPerInch / 6.0,\n 1,\n pixelPerInch / 72.0,\n pixelPerInch,\n pixelPerInch / 300.0,\n pixelPerInch / 25.4 // Millimeter\n ];\n };\n //Fields\n /**\n * Indicates default `horizontal resolution`.\n * @default 96\n * @private\n */\n PdfUnitConverter.horizontalResolution = 96;\n /**\n * Indicates default `vertical resolution`.\n * @default 96\n * @private\n */\n PdfUnitConverter.verticalResolution = 96;\n return PdfUnitConverter;\n}());\nexport { PdfUnitConverter };\n","import { SizeF } from './../../drawing/pdf-drawing';\nimport { PdfGraphicsUnit } from './../enum';\nimport { PdfUnitConverter } from './../unit-convertor';\n/**\n * `PdfImage` class represents the base class for images and provides functionality for the 'PdfBitmap' class.\n * @private\n */\nvar PdfImage = /** @class */ (function () {\n function PdfImage() {\n }\n Object.defineProperty(PdfImage.prototype, \"width\", {\n /**\n * Gets and Sets the `width` of an image.\n * @private\n */\n get: function () {\n return this.imageWidth;\n },\n set: function (value) {\n this.imageWidth = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfImage.prototype, \"height\", {\n /**\n * Gets and Sets the `height` of an image.\n * @private\n */\n get: function () {\n return this.imageHeight;\n },\n set: function (value) {\n this.imageHeight = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfImage.prototype, \"size\", {\n /**\n * Gets or sets the size of the image.\n * @private\n */\n set: function (value) {\n this.width = value.width;\n this.height = value.height;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfImage.prototype, \"physicalDimension\", {\n /**\n * Gets the `physical dimension` of an image.\n * @private\n */\n get: function () {\n this.imagePhysicalDimension = this.getPointSize(this.width, this.height, this.horizontalResolution, this.verticalResolution);\n return new SizeF(this.width, this.height);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfImage.prototype, \"element\", {\n // /**\n // * Gets the `image stream as string`.\n // * @private\n // */\n // public static fromString(string : string) : PdfImage {\n // let image : PdfImage = new PdfBitmap(string);\n // return image;\n // }\n /**\n * Gets the `element` image stream.\n * @private\n */\n get: function () {\n return this.imageStream;\n },\n enumerable: true,\n configurable: true\n });\n PdfImage.prototype.getPointSize = function (width, height, horizontalResolution, verticalResolution) {\n if (typeof horizontalResolution === 'undefined') {\n var dpiX = PdfUnitConverter.horizontalResolution;\n var dpiY = PdfUnitConverter.verticalResolution;\n var size = this.getPointSize(width, height, dpiX, dpiY);\n return size;\n }\n else {\n var ucX = new PdfUnitConverter(horizontalResolution);\n var ucY = new PdfUnitConverter(verticalResolution);\n var ptWidth = ucX.convertUnits(width, PdfGraphicsUnit.Pixel, PdfGraphicsUnit.Point);\n var ptHeight = ucY.convertUnits(height, PdfGraphicsUnit.Pixel, PdfGraphicsUnit.Point);\n var size = new SizeF(ptWidth, ptHeight);\n return size;\n }\n };\n return PdfImage;\n}());\nexport { PdfImage };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * PdfBitmap.ts class for EJ2-PDF\n */\nimport { ImageDecoder } from './../../graphics/images/image-decoder';\nimport { ByteArray } from './../../graphics/images/byte-array';\nimport { DictionaryProperties } from './../../input-output/pdf-dictionary-properties';\nimport { PdfImage } from './pdf-image';\n/**\n * The 'PdfBitmap' contains methods and properties to handle the Bitmap images.\n * ```typescript\n * // create a new PDF document.\n * let document : PdfDocument = new PdfDocument();\n * // add a page to the document.\n * let page1 : PdfPage = document.pages.add();\n * // base64 string of an image\n * let imageString : string = '/9j/3+2w7em7HzY/KiijFw … 1OEYRUYrQ45yc5OUtz/9k=';\n * // load the image from the base64 string of original image.\n * let image : PdfBitmap = new PdfBitmap(imageString);\n * // draw the image\n * page1.graphics.drawImage(image, new RectangleF({x : 10, y : 10}, {width : 200, height : 200}));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\nvar PdfBitmap = /** @class */ (function (_super) {\n __extends(PdfBitmap, _super);\n /**\n * Create an instance for `PdfBitmap` class.\n * @param encodedString Base64 string of an image.\n * ```typescript\n * // create a new PDF document.\n * let document : PdfDocument = new PdfDocument();\n * // add a page to the document.\n * let page1 : PdfPage = document.pages.add();\n * // base64 string of an image\n * let imageString : string = '/9j/3+2w7em7HzY/KiijFw … 1OEYRUYrQ45yc5OUtz/9k=';\n * //\n * // load the image from the base64 string of original image.\n * let image : PdfBitmap = new PdfBitmap(imageString);\n * //\n * // draw the image\n * page1.graphics.drawImage(image, new RectangleF({x : 10, y : 10}, {width : 200, height : 200}));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n function PdfBitmap(encodedString) {\n var _this = _super.call(this) || this;\n //Fields\n /**\n * Specifies the `status` of an image.\n * @default true.\n * @hidden\n * @private\n */\n _this.imageStatus = true;\n /**\n * Internal variable for accessing fields from `DictionryProperties` class.\n * @hidden\n * @private\n */\n _this.dictionaryProperties = new DictionaryProperties();\n _this.loadImage(encodedString);\n return _this;\n }\n /**\n * `Load image`.\n * @hidden\n * @private\n */\n PdfBitmap.prototype.loadImage = function (encodedString) {\n var task = this.initializeAsync(encodedString);\n };\n /**\n * `Initialize` image parameters.\n * @private\n */\n PdfBitmap.prototype.initializeAsync = function (encodedString) {\n var byteArray = new ByteArray(encodedString.length);\n byteArray.writeFromBase64String(encodedString);\n this.decoder = new ImageDecoder(byteArray);\n this.height = this.decoder.height;\n this.width = this.decoder.width;\n // FrameCount = BitmapImageDecoder.FrameCount;\n this.bitsPerComponent = this.decoder.bitsPerComponent;\n };\n /**\n * `Saves` the image into stream.\n * @private\n */\n PdfBitmap.prototype.save = function () {\n this.imageStatus = true;\n this.imageStream = this.decoder.getImageDictionary();\n };\n return PdfBitmap;\n}(PdfImage));\nexport { PdfBitmap };\n","/**\n * TtfTableInfo.ts class for EJ2-PDF\n */\nvar TtfTableInfo = /** @class */ (function () {\n function TtfTableInfo() {\n }\n Object.defineProperty(TtfTableInfo.prototype, \"empty\", {\n //Properties\n /**\n * Gets a value indicating whether this table is empty.\n * @private\n */\n get: function () {\n var empty = (this.offset === this.length && this.length === this.checksum && this.checksum === 0);\n return empty;\n },\n enumerable: true,\n configurable: true\n });\n return TtfTableInfo;\n}());\nexport { TtfTableInfo };\n","var TtfNameTable = /** @class */ (function () {\n function TtfNameTable() {\n }\n return TtfNameTable;\n}());\nexport { TtfNameTable };\n","/**\n * TtfNameRecord.ts class for EJ2-PDF\n */\nvar TtfNameRecord = /** @class */ (function () {\n function TtfNameRecord() {\n }\n return TtfNameRecord;\n}());\nexport { TtfNameRecord };\n","/**\n * TtfHeadTable.ts class for EJ2-PDF\n */\nvar TtfHeadTable = /** @class */ (function () {\n function TtfHeadTable() {\n }\n return TtfHeadTable;\n}());\nexport { TtfHeadTable };\n","var TtfMetrics = /** @class */ (function () {\n function TtfMetrics() {\n }\n Object.defineProperty(TtfMetrics.prototype, \"isItalic\", {\n //Properties\n /**\n * Gets a value indicating whether this instance is italic.\n */\n get: function () {\n return ((this.macStyle & 2) !== 0);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TtfMetrics.prototype, \"isBold\", {\n /**\n * Gets a value indicating whether this instance is bold.\n */\n get: function () {\n return ((this.macStyle & 1) !== 0);\n },\n enumerable: true,\n configurable: true\n });\n return TtfMetrics;\n}());\nexport { TtfMetrics };\n","/**\n * TtfHorizontalHeaderTable.ts class for EJ2-PDF\n */\nvar TtfHorizontalHeaderTable = /** @class */ (function () {\n function TtfHorizontalHeaderTable() {\n }\n return TtfHorizontalHeaderTable;\n}());\nexport { TtfHorizontalHeaderTable };\n","/**\n * TtfOS2Table.ts class for EJ2-PDF\n * The OS/2 table consists of a set of metrics that are required by Windows and OS/2.\n */\nvar TtfOS2Table = /** @class */ (function () {\n function TtfOS2Table() {\n }\n return TtfOS2Table;\n}());\nexport { TtfOS2Table };\n","/**\n * TtfPostTable.ts class for EJ2-PDF\n */\nvar TtfPostTable = /** @class */ (function () {\n function TtfPostTable() {\n }\n return TtfPostTable;\n}());\nexport { TtfPostTable };\n","/**\n * TtfLongHorMetric.ts class for EJ2-PDF\n */\nvar TtfLongHorMetric = /** @class */ (function () {\n function TtfLongHorMetric() {\n }\n return TtfLongHorMetric;\n}());\nexport { TtfLongHorMetric };\n","/**\n * TtfCmapSubTable.ts class for EJ2-PDF\n */\nvar TtfCmapSubTable = /** @class */ (function () {\n function TtfCmapSubTable() {\n }\n return TtfCmapSubTable;\n}());\nexport { TtfCmapSubTable };\n","/**\n * TtfCmapTable.ts class for EJ2-PDF\n */\nvar TtfCmapTable = /** @class */ (function () {\n function TtfCmapTable() {\n }\n return TtfCmapTable;\n}());\nexport { TtfCmapTable };\n","/**\n * TtfGlyphInfo.ts class for EJ2-PDF\n */\nvar TtfGlyphInfo = /** @class */ (function () {\n function TtfGlyphInfo() {\n }\n Object.defineProperty(TtfGlyphInfo.prototype, \"empty\", {\n //Properties\n /**\n * Gets a value indicating whether this TtfGlyphInfo is empty.\n */\n get: function () {\n var empty = (this.index === this.width && this.width === this.charCode && this.charCode === 0);\n return empty;\n },\n enumerable: true,\n configurable: true\n });\n //IComparable implementation\n /**\n * Compares two WidthDescriptor objects.\n */\n TtfGlyphInfo.prototype.compareTo = function (obj) {\n var glyph = obj;\n return this.index - glyph.index;\n };\n return TtfGlyphInfo;\n}());\nexport { TtfGlyphInfo };\n","/**\n * TtfLocaTable.ts class for EJ2-PDF\n */\nvar TtfLocaTable = /** @class */ (function () {\n function TtfLocaTable() {\n }\n return TtfLocaTable;\n}());\nexport { TtfLocaTable };\n","/**\n * TtfAppleCmapSubTable.ts class for EJ2-PDF\n */\nvar TtfAppleCmapSubTable = /** @class */ (function () {\n function TtfAppleCmapSubTable() {\n }\n return TtfAppleCmapSubTable;\n}());\nexport { TtfAppleCmapSubTable };\n","/**\n * TtfMicrosoftCmapSubTable.ts class for EJ2-PDF\n */\nvar TtfMicrosoftCmapSubTable = /** @class */ (function () {\n function TtfMicrosoftCmapSubTable() {\n }\n return TtfMicrosoftCmapSubTable;\n}());\nexport { TtfMicrosoftCmapSubTable };\n","/**\n * TtfTrimmedCmapSubTable.ts class for EJ2-PDF\n */\nvar TtfTrimmedCmapSubTable = /** @class */ (function () {\n function TtfTrimmedCmapSubTable() {\n }\n return TtfTrimmedCmapSubTable;\n}());\nexport { TtfTrimmedCmapSubTable };\n","/**\n * TtfLocaTable.ts class for EJ2-PDF\n */\nvar TtfGlyphHeader = /** @class */ (function () {\n function TtfGlyphHeader() {\n }\n return TtfGlyphHeader;\n}());\nexport { TtfGlyphHeader };\n","/**\n * Writes data in BigEndian order.\n */\nvar BigEndianWriter = /** @class */ (function () {\n //Constructors\n /**\n * Creates a new writer.\n */\n function BigEndianWriter(capacity) {\n //Constants\n /**\n * Size of Int32 type.\n */\n this.int32Size = 4;\n /**\n * Size of Int16 type.\n */\n this.int16Size = 2;\n /**\n * Size of long type.\n */\n this.int64Size = 8;\n this.bufferLength = capacity;\n this.buffer = [];\n }\n Object.defineProperty(BigEndianWriter.prototype, \"data\", {\n //Properties\n /**\n * Gets data written to the writer.\n */\n get: function () {\n if (this.buffer.length < this.bufferLength) {\n var length_1 = this.bufferLength - this.buffer.length;\n for (var i = 0; i < length_1; i++) {\n this.buffer.push(0);\n }\n }\n return this.buffer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BigEndianWriter.prototype, \"position\", {\n /// \n /// Gets position of the internal buffer.\n /// \n get: function () {\n if (this.internalPosition === undefined || this.internalPosition === null) {\n this.internalPosition = 0;\n }\n return this.internalPosition;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Writes short value.\n */\n BigEndianWriter.prototype.writeShort = function (value) {\n var bytes = [((value & 0x0000ff00) >> 8), value & 0x000000ff];\n this.flush(bytes);\n };\n /**\n * Writes int value.\n */\n BigEndianWriter.prototype.writeInt = function (value) {\n var i1 = (value & 0xff000000) >> 24;\n i1 = i1 < 0 ? 256 + i1 : i1;\n var i2 = (value & 0x00ff0000) >> 16;\n i2 = i2 < 0 ? 256 + i2 : i2;\n var i3 = (value & 0x0000ff00) >> 8;\n i3 = i3 < 0 ? 256 + i3 : i3;\n var i4 = value & 0x000000ff;\n i4 = i4 < 0 ? 256 + i4 : i4;\n var bytes = [(value & 0xff000000) >> 24, (value & 0x00ff0000) >> 16, (value & 0x0000ff00) >> 8, value & 0x000000ff];\n this.flush(bytes);\n };\n /**\n * Writes u int value.\n */\n BigEndianWriter.prototype.writeUInt = function (value) {\n var buff = [(value & 0xff000000) >> 24, (value & 0x00ff0000) >> 16, (value & 0x0000ff00) >> 8, value & 0x000000ff];\n this.flush(buff);\n };\n /**\n * Writes string value.\n */\n BigEndianWriter.prototype.writeString = function (value) {\n if (value == null) {\n throw new Error('Argument Null Exception : value');\n }\n var bytes = [];\n for (var i = 0; i < value.length; i++) {\n bytes.push(value.charCodeAt(i));\n }\n this.flush(bytes);\n };\n /**\n * Writes byte[] value.\n */\n BigEndianWriter.prototype.writeBytes = function (value) {\n this.flush(value);\n };\n // //Implementation\n BigEndianWriter.prototype.flush = function (buff) {\n if (buff === null) {\n throw new Error('Argument Null Exception : buff');\n }\n var result = [];\n for (var i = 0; i < this.position; i++) {\n result.push(this.buffer[i]);\n }\n for (var i = 0; i < buff.length; i++) {\n result.push(buff[i]);\n }\n for (var i = this.position; i < this.buffer.length; i++) {\n result.push(this.buffer[i]);\n }\n this.buffer = result;\n this.internalPosition += buff.length;\n };\n return BigEndianWriter;\n}());\nexport { BigEndianWriter };\n","/**\n * TtfReader.ts class for EJ2-PDF\n */\nimport { TtfTableInfo } from './ttf-table-info';\nimport { Dictionary } from './../../collections/dictionary';\nimport { TtfNameTable } from './ttf-name-table';\nimport { TtfNameRecord } from './ttf-name-record';\nimport { TtfHeadTable } from './ttf-head-table';\nimport { TtfMetrics } from './ttf-metrics';\nimport { TtfHorizontalHeaderTable } from './ttf-horizontal-header-table';\nimport { TtfOS2Table } from './ttf-OS2-Table';\nimport { TtfPostTable } from './ttf-post-table';\nimport { TtfLongHorMetric } from './ttf-long-hor-metric';\nimport { TtfCmapSubTable } from './ttf-cmap-sub-table';\nimport { TtfCmapTable } from './ttf-cmap-table';\nimport { TtfGlyphInfo } from './ttf-glyph-info';\nimport { TtfLocaTable } from './ttf-loca-table';\nimport { TtfAppleCmapSubTable } from './ttf-apple-cmap-sub-table';\nimport { TtfMicrosoftCmapSubTable } from './ttf-microsoft-cmap-sub-table';\nimport { TtfTrimmedCmapSubTable } from './ttf-trimmed-cmap-sub-table';\nimport { TtfGlyphHeader } from './ttf-glyph-header';\nimport { Rectangle } from './../../drawing/pdf-drawing';\nimport { StringTokenizer } from './string-tokenizer';\nimport { TtfCmapFormat, TtfCmapEncoding, TtfPlatformID } from './enum';\nimport { TtfMicrosoftEncodingID, TtfMacintoshEncodingID, TtfCompositeGlyphFlags } from './enum';\nimport { BigEndianWriter } from './../../input-output/big-endian-writer';\nvar TtfReader = /** @class */ (function () {\n //Constructors\n function TtfReader(fontData) {\n this.int32Size = 4;\n this.isTtcFont = false;\n this.isMacTtf = false;\n this.metricsName = '';\n this.isMacTTF = false;\n this.missedGlyphs = 0;\n this.tableNames = ['cvt ', 'fpgm', 'glyf', 'head', 'hhea', 'hmtx', 'loca', 'maxp', 'prep'];\n this.entrySelectors = [0, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4];\n this.fontData = fontData;\n this.initialize();\n }\n Object.defineProperty(TtfReader.prototype, \"macintosh\", {\n //Properties\n /**\n * Gets glyphs for Macintosh or Symbol fonts (char - key, glyph - value).\n */\n get: function () {\n if (this.macintoshDictionary === null || this.macintoshDictionary === undefined) {\n this.macintoshDictionary = new Dictionary();\n }\n return this.macintoshDictionary;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TtfReader.prototype, \"microsoft\", {\n /**\n * Gets glyphs for Microsoft or Symbol fonts (char - key, glyph - value).\n */\n get: function () {\n if (this.microsoftDictionary === null || this.microsoftDictionary === undefined) {\n this.microsoftDictionary = new Dictionary();\n }\n return this.microsoftDictionary;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TtfReader.prototype, \"macintoshGlyphs\", {\n /**\n * Gets glyphs for Macintosh or Symbol fonts (glyph index - key, glyph - value).\n */\n get: function () {\n if (this.internalMacintoshGlyphs === null || this.internalMacintoshGlyphs === undefined) {\n this.internalMacintoshGlyphs = new Dictionary();\n }\n return this.internalMacintoshGlyphs;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TtfReader.prototype, \"microsoftGlyphs\", {\n /**\n * Gets glyphs for Microsoft Unicode fonts (glyph index - key, glyph - value).\n */\n get: function () {\n if (this.internalMicrosoftGlyphs === null || this.internalMicrosoftGlyphs === undefined) {\n this.internalMicrosoftGlyphs = new Dictionary();\n }\n return this.internalMicrosoftGlyphs;\n },\n enumerable: true,\n configurable: true\n });\n //Implementation\n TtfReader.prototype.initialize = function () {\n if (this.metrics === undefined) {\n this.metrics = new TtfMetrics();\n }\n this.readFontDictionary();\n var nameTable = this.readNameTable();\n var headTable = this.readHeadTable();\n this.initializeFontName(nameTable);\n this.metrics.macStyle = headTable.macStyle;\n };\n TtfReader.prototype.readFontDictionary = function () {\n this.offset = 0;\n var version = this.checkPreambula();\n //this.offset += 4;\n var numTables = this.readInt16(this.offset);\n var searchRange = this.readInt16(this.offset);\n var entrySelector = this.readInt16(this.offset);\n var rangeShift = this.readInt16(this.offset);\n if (this.tableDirectory === undefined) {\n this.tableDirectory = new Dictionary();\n }\n for (var i = 0; i < numTables; ++i) {\n var table = new TtfTableInfo();\n var tableKey = this.readString(this.int32Size);\n table.checksum = this.readInt32(this.offset);\n table.offset = this.readInt32(this.offset);\n table.length = this.readInt32(this.offset);\n this.tableDirectory.setValue(tableKey, table);\n }\n this.lowestPosition = this.offset;\n if (!this.isTtcFont) {\n this.fixOffsets();\n }\n };\n TtfReader.prototype.fixOffsets = function () {\n var minOffset = Number.MAX_VALUE;\n // Search for a smallest offset and compare it with the lowest position found.\n var tableKeys = this.tableDirectory.keys();\n for (var i = 0; i < tableKeys.length; i++) {\n var value = this.tableDirectory.getValue(tableKeys[i]);\n var offset = value.offset;\n if (minOffset > offset) {\n minOffset = offset;\n if (minOffset <= this.lowestPosition) {\n break;\n }\n }\n }\n var shift = minOffset - this.lowestPosition;\n if (shift !== 0) {\n var table = new Dictionary();\n for (var i = 0; i < tableKeys.length; i++) {\n var value = this.tableDirectory.getValue(tableKeys[i]);\n value.offset -= shift;\n table.setValue(tableKeys[i], value);\n }\n this.tableDirectory = table;\n }\n };\n TtfReader.prototype.checkPreambula = function () {\n var version = this.readInt32(this.offset);\n this.isMacTtf = (version === 0x74727565) ? true : false;\n if (version !== 0x10000 && version !== 0x74727565 && version !== 0x4f54544f) {\n this.isTtcFont = true;\n this.offset = 0;\n var fontTag = this.readString(4);\n if (fontTag !== 'ttcf') {\n throw new Error('Can not read TTF font data');\n }\n //skip 4\n this.offset += 4;\n var ttcIdentificationNumber = this.readInt32(this.offset);\n if (ttcIdentificationNumber < 0) {\n throw new Error('Can not read TTF font data');\n }\n this.offset = this.readInt32(this.offset);\n version = this.readInt32(this.offset);\n }\n return version;\n };\n TtfReader.prototype.readNameTable = function () {\n var tableInfo = this.getTable('name');\n this.offset = tableInfo.offset;\n var table = new TtfNameTable();\n table.formatSelector = this.readUInt16(this.offset);\n table.recordsCount = this.readUInt16(this.offset);\n table.offset = this.readUInt16(this.offset);\n table.nameRecords = [];\n var recordSize = 12;\n var position = this.offset;\n for (var i = 0; i < table.recordsCount; i++) {\n this.offset = position;\n var record = new TtfNameRecord();\n record.platformID = this.readUInt16(this.offset);\n record.encodingID = this.readUInt16(this.offset);\n record.languageID = this.readUInt16(this.offset);\n record.nameID = this.readUInt16(this.offset);\n record.length = this.readUInt16(this.offset);\n record.offset = this.readUInt16(this.offset);\n this.offset = tableInfo.offset + table.offset + record.offset;\n var unicode = (record.platformID === 0 || record.platformID === 3);\n record.name = this.readString(record.length, unicode);\n table.nameRecords[i] = record;\n position += recordSize;\n }\n return table;\n };\n TtfReader.prototype.readHeadTable = function () {\n var tableInfo = this.getTable('head');\n this.offset = tableInfo.offset;\n var table = new TtfHeadTable();\n table.version = this.readFixed(this.offset);\n table.fontRevision = this.readFixed(this.offset);\n table.checkSumAdjustment = this.readUInt32(this.offset);\n table.magicNumber = this.readUInt32(this.offset);\n table.flags = this.readUInt16(this.offset);\n table.unitsPerEm = this.readUInt16(this.offset);\n table.created = this.readInt64(this.offset);\n table.modified = this.readInt64(this.offset);\n table.xMin = this.readInt16(this.offset);\n table.yMin = this.readInt16(this.offset);\n table.xMax = this.readInt16(this.offset);\n table.yMax = this.readInt16(this.offset);\n table.macStyle = this.readUInt16(this.offset);\n table.lowestReadableSize = this.readUInt16(this.offset);\n table.fontDirectionHint = this.readInt16(this.offset);\n table.indexToLocalFormat = this.readInt16(this.offset);\n table.glyphDataFormat = this.readInt16(this.offset);\n return table;\n };\n TtfReader.prototype.readHorizontalHeaderTable = function () {\n var tableInfo = this.getTable('hhea');\n this.offset = tableInfo.offset;\n var table = new TtfHorizontalHeaderTable();\n table.version = this.readFixed(this.offset);\n table.ascender = this.readInt16(this.offset);\n table.descender = this.readInt16(this.offset);\n table.lineGap = this.readInt16(this.offset);\n table.advanceWidthMax = this.readUInt16(this.offset);\n table.minLeftSideBearing = this.readInt16(this.offset);\n table.minRightSideBearing = this.readInt16(this.offset);\n table.xMaxExtent = this.readInt16(this.offset);\n table.caretSlopeRise = this.readInt16(this.offset);\n table.caretSlopeRun = this.readInt16(this.offset);\n //skip 2 * 5\n this.offset += 10;\n table.metricDataFormat = this.readInt16(this.offset);\n table.numberOfHMetrics = this.readUInt16(this.offset);\n return table;\n };\n TtfReader.prototype.readOS2Table = function () {\n var tableInfo = this.getTable('OS/2');\n this.offset = tableInfo.offset;\n var table = new TtfOS2Table();\n table.version = this.readUInt16(this.offset);\n table.xAvgCharWidth = this.readInt16(this.offset);\n table.usWeightClass = this.readUInt16(this.offset);\n table.usWidthClass = this.readUInt16(this.offset);\n table.fsType = this.readInt16(this.offset);\n table.ySubscriptXSize = this.readInt16(this.offset);\n table.ySubscriptYSize = this.readInt16(this.offset);\n table.ySubscriptXOffset = this.readInt16(this.offset);\n table.ySubscriptYOffset = this.readInt16(this.offset);\n table.ySuperscriptXSize = this.readInt16(this.offset);\n table.ySuperscriptYSize = this.readInt16(this.offset);\n table.ySuperscriptXOffset = this.readInt16(this.offset);\n table.ySuperscriptYOffset = this.readInt16(this.offset);\n table.yStrikeoutSize = this.readInt16(this.offset);\n table.yStrikeoutPosition = this.readInt16(this.offset);\n table.sFamilyClass = this.readInt16(this.offset);\n table.panose = this.readBytes(10);\n table.ulUnicodeRange1 = this.readUInt32(this.offset);\n table.ulUnicodeRange2 = this.readUInt32(this.offset);\n table.ulUnicodeRange3 = this.readUInt32(this.offset);\n table.ulUnicodeRange4 = this.readUInt32(this.offset);\n table.vendorIdentifier = this.readBytes(4);\n table.fsSelection = this.readUInt16(this.offset);\n table.usFirstCharIndex = this.readUInt16(this.offset);\n table.usLastCharIndex = this.readUInt16(this.offset);\n table.sTypoAscender = this.readInt16(this.offset);\n table.sTypoDescender = this.readInt16(this.offset);\n table.sTypoLineGap = this.readInt16(this.offset);\n table.usWinAscent = this.readUInt16(this.offset);\n table.usWinDescent = this.readUInt16(this.offset);\n table.ulCodePageRange1 = this.readUInt32(this.offset);\n table.ulCodePageRange2 = this.readUInt32(this.offset);\n if (table.version > 1) {\n table.sxHeight = this.readInt16(this.offset);\n table.sCapHeight = this.readInt16(this.offset);\n table.usDefaultChar = this.readUInt16(this.offset);\n table.usBreakChar = this.readUInt16(this.offset);\n table.usMaxContext = this.readUInt16(this.offset);\n }\n else {\n table.sxHeight = 0;\n table.sCapHeight = 0;\n table.usDefaultChar = 0;\n table.usBreakChar = 0;\n table.usMaxContext = 0;\n }\n return table;\n };\n TtfReader.prototype.readPostTable = function () {\n var tableInfo = this.getTable('post');\n this.offset = tableInfo.offset;\n var table = new TtfPostTable();\n table.formatType = this.readFixed(this.offset);\n table.italicAngle = this.readFixed(this.offset);\n table.underlinePosition = this.readInt16(this.offset);\n table.underlineThickness = this.readInt16(this.offset);\n table.isFixedPitch = this.readUInt32(this.offset);\n table.minType42 = this.readUInt32(this.offset);\n table.maxType42 = this.readUInt32(this.offset);\n table.minType1 = this.readUInt32(this.offset);\n table.maxType1 = this.readUInt32(this.offset);\n return table;\n };\n /**\n * Reads Width of the glyphs.\n */\n TtfReader.prototype.readWidthTable = function (glyphCount, unitsPerEm) {\n var tableInfo = this.getTable('hmtx');\n this.offset = tableInfo.offset;\n var width = [];\n for (var i = 0; i < glyphCount; i++) {\n var glyph = new TtfLongHorMetric();\n glyph.advanceWidth = this.readUInt16(this.offset);\n glyph.lsb = this.readInt16(this.offset);\n var glyphWidth = glyph.advanceWidth * 1000 / unitsPerEm;\n width.push(Math.floor(glyphWidth));\n }\n return width;\n };\n /**\n * Reads the cmap table.\n */\n TtfReader.prototype.readCmapTable = function () {\n var tableInfo = this.getTable('cmap');\n this.offset = tableInfo.offset;\n var table = new TtfCmapTable();\n table.version = this.readUInt16(this.offset);\n table.tablesCount = this.readUInt16(this.offset);\n var position = this.offset;\n var subTables = [];\n for (var i = 0; i < table.tablesCount; i++) {\n this.offset = position;\n var subTable = new TtfCmapSubTable();\n subTable.platformID = this.readUInt16(this.offset);\n subTable.encodingID = this.readUInt16(this.offset);\n subTable.offset = this.readUInt32(this.offset);\n position = this.offset;\n this.readCmapSubTable(subTable);\n subTables[i] = subTable;\n }\n return subTables;\n };\n /**\n * Reads the cmap sub table.\n */\n TtfReader.prototype.readCmapSubTable = function (subTable) {\n var tableInfo = this.getTable('cmap');\n this.offset = tableInfo.offset + subTable.offset;\n var format = this.readUInt16(this.offset);\n var encoding = this.getCmapEncoding(subTable.platformID, subTable.encodingID);\n var platform = (encoding === TtfCmapEncoding.Macintosh) ? TtfPlatformID.Macintosh : TtfPlatformID.Microsoft;\n if (encoding !== TtfCmapEncoding.Unknown) {\n switch (format) {\n case TtfCmapFormat.Apple:\n this.readAppleCmapTable(subTable, encoding);\n break;\n case TtfCmapFormat.Microsoft:\n this.readMicrosoftCmapTable(subTable, encoding);\n break;\n case TtfCmapFormat.Trimmed:\n this.readTrimmedCmapTable(subTable, encoding);\n break;\n }\n }\n };\n /**\n * Reads Symbol cmap table.\n */\n TtfReader.prototype.readAppleCmapTable = function (subTable, encoding) {\n var tableInfo = this.getTable('cmap');\n this.offset = tableInfo.offset + subTable.offset;\n var table = new TtfAppleCmapSubTable();\n table.format = this.readUInt16(this.offset);\n table.length = this.readUInt16(this.offset);\n table.version = this.readUInt16(this.offset);\n if (this.maxMacIndex === null || this.maxMacIndex === undefined) {\n this.maxMacIndex = 0;\n }\n for (var i = 0; i < 256; ++i) {\n var glyphInfo = new TtfGlyphInfo();\n glyphInfo.index = this.readByte(this.offset);\n glyphInfo.width = this.getWidth(glyphInfo.index);\n glyphInfo.charCode = i;\n this.macintosh.setValue(i, glyphInfo);\n this.addGlyph(glyphInfo, encoding);\n // NOTE: this code fixes char codes that extends 0x100. However, it might corrupt something.\n this.maxMacIndex = Math.max(i, this.maxMacIndex);\n }\n };\n /**\n * Reads Symbol cmap table.\n */\n TtfReader.prototype.readMicrosoftCmapTable = function (subTable, encoding) {\n var tableInfo = this.getTable('cmap');\n this.offset = tableInfo.offset + subTable.offset;\n var collection = (encoding === TtfCmapEncoding.Unicode) ? this.microsoft : this.macintosh;\n var table = new TtfMicrosoftCmapSubTable();\n table.format = this.readUInt16(this.offset);\n table.length = this.readUInt16(this.offset);\n table.version = this.readUInt16(this.offset);\n table.segCountX2 = this.readUInt16(this.offset);\n table.searchRange = this.readUInt16(this.offset);\n table.entrySelector = this.readUInt16(this.offset);\n table.rangeShift = this.readUInt16(this.offset);\n var segCount = table.segCountX2 / 2;\n table.endCount = this.readUshortArray(segCount);\n table.reservedPad = this.readUInt16(this.offset);\n table.startCount = this.readUshortArray(segCount);\n table.idDelta = this.readUshortArray(segCount);\n table.idRangeOffset = this.readUshortArray(segCount);\n var length = (table.length / 2 - 8) - (segCount * 4);\n table.glyphID = this.readUshortArray(length);\n // Process glyphIdArray array.\n var codeOffset = 0;\n var index = 0;\n for (var j = 0; j < segCount; j++) {\n for (var k = table.startCount[j]; k <= table.endCount[j] && k !== 65535; k++) {\n if (table.idRangeOffset[j] === 0) {\n codeOffset = (k + table.idDelta[j]) & 65535;\n }\n else {\n index = j + table.idRangeOffset[j] / 2 - segCount + k - table.startCount[j];\n if (index >= table.glyphID.length) {\n continue;\n }\n codeOffset = (table.glyphID[index] + table.idDelta[j]) & 65535;\n }\n var glyph = new TtfGlyphInfo();\n glyph.index = codeOffset;\n glyph.width = this.getWidth(glyph.index);\n var id = (encoding === TtfCmapEncoding.Symbol) ? ((k & 0xff00) === 0xf000 ? k & 0xff : k) : k;\n glyph.charCode = id;\n collection.setValue(id, glyph);\n this.addGlyph(glyph, encoding);\n }\n }\n };\n /**\n * Reads Trimed cmap table.\n */\n TtfReader.prototype.readTrimmedCmapTable = function (subTable, encoding) {\n var tableInfo = this.getTable('cmap');\n this.offset = tableInfo.offset + subTable.offset;\n var table = new TtfTrimmedCmapSubTable();\n table.format = this.readUInt16(this.offset);\n table.length = this.readUInt16(this.offset);\n table.version = this.readUInt16(this.offset);\n table.firstCode = this.readUInt16(this.offset);\n table.entryCount = this.readUInt16(this.offset);\n for (var i = 0; i < table.entryCount; ++i) {\n var glyphInfo = new TtfGlyphInfo();\n glyphInfo.index = this.readUInt16(this.offset);\n glyphInfo.width = this.getWidth(glyphInfo.index);\n glyphInfo.charCode = i + table.firstCode;\n this.macintosh.setValue(i, glyphInfo);\n this.addGlyph(glyphInfo, encoding);\n // NOTE: this code fixes char codes that extends 0x100. However, it might corrupt something.\n this.maxMacIndex = Math.max(i, this.maxMacIndex);\n }\n };\n TtfReader.prototype.initializeFontName = function (nameTable) {\n for (var i = 0; i < nameTable.recordsCount; i++) {\n var record = nameTable.nameRecords[i];\n if (record.nameID === 1) {\n //font family\n this.metrics.fontFamily = record.name;\n }\n else if (record.nameID === 6) {\n //post script name\n this.metrics.postScriptName = record.name;\n }\n /* tslint:disable */\n if (this.metrics.fontFamily !== null && this.metrics.fontFamily !== undefined && this.metrics.postScriptName !== null && this.metrics.postScriptName !== undefined) {\n break;\n }\n /* tslint:disable */\n }\n };\n TtfReader.prototype.getTable = function (name) {\n // if (name === null) {\n // throw new Error('Argument Null Exception : name');\n // }\n var table = new TtfTableInfo();\n var obj;\n if (this.tableDirectory.containsKey(name)) {\n obj = this.tableDirectory.getValue(name);\n }\n if (obj !== null && obj !== undefined) {\n table = obj;\n }\n return table;\n };\n /**\n * Returns width of the glyph.\n */\n TtfReader.prototype.getWidth = function (glyphCode) {\n glyphCode = (glyphCode < this.width.length) ? glyphCode : this.width.length - 1;\n return this.width[glyphCode];\n };\n /**\n * Gets CMAP encoding based on platform ID and encoding ID.\n */\n /* tslint:disable */\n TtfReader.prototype.getCmapEncoding = function (platformID, encodingID) {\n var format = TtfCmapEncoding.Unknown;\n if (platformID == TtfPlatformID.Microsoft && encodingID == TtfMicrosoftEncodingID.Undefined) {\n // When building a symbol font for Windows,\n // the platform ID should be 3 and the encoding ID should be 0.\n format = TtfCmapEncoding.Symbol;\n }\n else if (platformID == TtfPlatformID.Microsoft && encodingID == TtfMicrosoftEncodingID.Unicode) {\n // When building a Unicode font for Windows,\n // the platform ID should be 3 and the encoding ID should be 1.\n format = TtfCmapEncoding.Unicode;\n }\n else if (platformID == TtfPlatformID.Macintosh && encodingID == TtfMacintoshEncodingID.Roman) {\n // When building a font that will be used on the Macintosh,\n // the platform ID should be 1 and the encoding ID should be 0.\n format = TtfCmapEncoding.Macintosh;\n }\n return format;\n };\n /* tslint:enable */\n /**\n * Adds glyph to the collection.\n */\n TtfReader.prototype.addGlyph = function (glyph, encoding) {\n var collection = null;\n switch (encoding) {\n case TtfCmapEncoding.Unicode:\n collection = this.microsoftGlyphs;\n break;\n case TtfCmapEncoding.Macintosh:\n case TtfCmapEncoding.Symbol:\n collection = this.macintoshGlyphs;\n break;\n }\n collection.setValue(glyph.index, glyph);\n };\n /**\n * Initializes metrics.\n */\n /* tslint:disable */\n TtfReader.prototype.initializeMetrics = function (nameTable, headTable, horizontalHeadTable, os2Table, postTable, cmapTables) {\n /* tslint:enable */\n // if (cmapTables === null) {\n // throw new Error('ArgumentNullException : cmapTables');\n // }\n this.initializeFontName(nameTable);\n // Get font encoding.\n var bSymbol = false;\n for (var i = 0; i < cmapTables.length; i++) {\n var subTable = cmapTables[i];\n var encoding = this.getCmapEncoding(subTable.platformID, subTable.encodingID);\n if (encoding === TtfCmapEncoding.Symbol) {\n bSymbol = true;\n break;\n }\n }\n this.metrics.isSymbol = bSymbol;\n this.metrics.macStyle = headTable.macStyle;\n this.metrics.isFixedPitch = (postTable.isFixedPitch !== 0);\n this.metrics.italicAngle = postTable.italicAngle;\n var factor = 1000 / headTable.unitsPerEm;\n this.metrics.winAscent = os2Table.sTypoAscender * factor;\n this.metrics.macAscent = horizontalHeadTable.ascender * factor;\n //m_metrics.MacAscent = os2Table.UsWinAscent * factor;\n // NOTE: This is stange workaround. The value is good if os2Table.SCapHeight != 0, otherwise it should be properly computed.\n this.metrics.capHeight = (os2Table.sCapHeight !== 0) ? os2Table.sCapHeight : 0.7 * headTable.unitsPerEm * factor;\n this.metrics.winDescent = os2Table.sTypoDescender * factor;\n this.metrics.macDescent = horizontalHeadTable.descender * factor;\n //m_metrics.MacDescent = -os2Table.UsWinDescent * factor;\n this.metrics.leading = (os2Table.sTypoAscender - os2Table.sTypoDescender + os2Table.sTypoLineGap) * factor;\n this.metrics.lineGap = Math.ceil(horizontalHeadTable.lineGap * factor);\n var left = headTable.xMin * factor;\n var top = Math.ceil(this.metrics.macAscent + this.metrics.lineGap);\n var right = headTable.xMax * factor;\n var bottom = this.metrics.macDescent;\n this.metrics.fontBox = new Rectangle(left, top, right, bottom);\n // NOTE: Strange!\n this.metrics.stemV = 80;\n this.metrics.widthTable = this.updateWidth();\n this.metrics.contains = this.tableDirectory.containsKey('CFF');\n this.metrics.subScriptSizeFactor = headTable.unitsPerEm / os2Table.ySubscriptYSize;\n this.metrics.superscriptSizeFactor = headTable.unitsPerEm / os2Table.ySuperscriptYSize;\n };\n /**\n * Updates chars structure which is used in the case of ansi encoding (256 bytes).\n */\n TtfReader.prototype.updateWidth = function () {\n var count = 256;\n var bytes = [];\n if (this.metrics.isSymbol) {\n for (var i = 0; i < count; i++) {\n var glyphInfo = this.getGlyph(String.fromCharCode(i));\n bytes[i] = (glyphInfo.empty) ? 0 : glyphInfo.width;\n }\n }\n else {\n var byteToProcess = [];\n var unknown = '?';\n var space = String.fromCharCode(32);\n for (var i = 0; i < count; i++) {\n byteToProcess[0] = i;\n var text = this.getString(byteToProcess, 0, byteToProcess.length);\n var ch = (text.length > 0) ? text[0] : unknown;\n var glyphInfo = this.getGlyph(ch);\n if (!glyphInfo.empty) {\n bytes[i] = glyphInfo.width;\n }\n else {\n glyphInfo = this.getGlyph(space);\n bytes[i] = (glyphInfo.empty) ? 0 : glyphInfo.width;\n }\n }\n }\n return bytes;\n };\n /**\n * Returns default glyph.\n */\n TtfReader.prototype.getDefaultGlyph = function () {\n var glyph = this.getGlyph(StringTokenizer.whiteSpace);\n return glyph;\n };\n /**\n * Reads unicode string from byte array.\n */\n TtfReader.prototype.getString = function (byteToProcess, start, length) {\n var result = '';\n for (var index = 0; index < length; index++) {\n result += String.fromCharCode(byteToProcess[index + start]);\n }\n return result;\n };\n /**\n * Reads loca table.\n */\n TtfReader.prototype.readLocaTable = function (bShort) {\n var tableInfo = this.getTable('loca');\n this.offset = tableInfo.offset;\n var table = new TtfLocaTable();\n var buffer = null;\n if (bShort) {\n var len = tableInfo.length / 2;\n buffer = [];\n for (var i = 0; i < len; i++) {\n buffer[i] = this.readUInt16(this.offset) * 2;\n }\n }\n else {\n var len = tableInfo.length / 4;\n buffer = [];\n for (var i = 0; i < len; i++) {\n buffer[i] = this.readUInt32(this.offset);\n }\n }\n table.offsets = buffer;\n return table;\n };\n /**\n * Updates hash table of used glyphs.\n */\n TtfReader.prototype.updateGlyphChars = function (glyphChars, locaTable) {\n // if (glyphChars === null) {\n // throw new Error('Argument Null Exception : glyphChars');\n // }\n // Add zero key.\n if (!glyphChars.containsKey(0)) {\n glyphChars.setValue(0, 0);\n }\n var clone = new Dictionary();\n var glyphCharKeys = glyphChars.keys();\n for (var i = 0; i < glyphCharKeys.length; i++) {\n clone.setValue(glyphCharKeys[0], glyphChars.getValue(glyphCharKeys[0]));\n }\n for (var i = 0; i < glyphCharKeys.length; i++) {\n var nextKey = glyphCharKeys[0];\n this.processCompositeGlyph(glyphChars, nextKey, locaTable);\n }\n };\n /**\n * Checks if glyph is composite or not.\n */\n TtfReader.prototype.processCompositeGlyph = function (glyphChars, glyph, locaTable) {\n // if (glyphChars === null) {\n // throw new Error('Argument Null Exception : glyphChars');\n // }\n // Is in range.\n if (glyph < locaTable.offsets.length - 1) {\n var glyphOffset = locaTable.offsets[glyph];\n if (glyphOffset !== locaTable.offsets[glyph + 1]) {\n var tableInfo = this.getTable('glyf');\n this.offset = tableInfo.offset + glyphOffset;\n var glyphHeader = new TtfGlyphHeader();\n glyphHeader.numberOfContours = this.readInt16(this.offset);\n glyphHeader.xMin = this.readInt16(this.offset);\n glyphHeader.yMin = this.readInt16(this.offset);\n glyphHeader.xMax = this.readInt16(this.offset);\n glyphHeader.yMax = this.readInt16(this.offset);\n // Glyph is composite.\n if (glyphHeader.numberOfContours < 0) {\n var skipBytes = 0;\n var entry = true;\n while (entry) {\n var flags = this.readUInt16(this.offset);\n var glyphIndex = this.readUInt16(this.offset);\n if (!glyphChars.containsKey(glyphIndex)) {\n glyphChars.setValue(glyphIndex, 0);\n }\n if ((flags & TtfCompositeGlyphFlags.MoreComponents) === 0) {\n break;\n }\n skipBytes = ((flags & TtfCompositeGlyphFlags.Arg1And2AreWords) !== 0) ? 4 : 2;\n if ((flags & TtfCompositeGlyphFlags.WeHaveScale) !== 0) {\n skipBytes += 2;\n }\n else if ((flags & TtfCompositeGlyphFlags.WeHaveAnXyScale) !== 0) {\n skipBytes += 4;\n }\n else if ((flags & TtfCompositeGlyphFlags.WeHaveTwoByTwo) !== 0) {\n skipBytes += 2 * 4;\n }\n this.offset += skipBytes;\n }\n }\n }\n }\n };\n /**\n * Creates new glyph tables based on chars that are used for output.\n */\n /* tslint:disable */\n TtfReader.prototype.generateGlyphTable = function (glyphChars, locaTable, newLocaTable, newGlyphTable) {\n /* tslint:enable */\n // if (glyphChars === null) {\n // throw new Error('Argument Null Exception : glyphChars');\n // }\n newLocaTable = [];\n // Sorting used glyphs keys.\n var activeGlyphs = glyphChars.keys();\n activeGlyphs.sort(function (a, b) { return a - b; });\n var glyphSize = 0;\n for (var i = 0; i < activeGlyphs.length; i++) {\n var glyphIndex = activeGlyphs[i];\n if (locaTable.offsets.length > 0) {\n glyphSize += locaTable.offsets[glyphIndex + 1] - locaTable.offsets[glyphIndex];\n }\n }\n var glyphSizeAligned = this.align(glyphSize);\n newGlyphTable = [];\n for (var i = 0; i < glyphSizeAligned; i++) {\n newGlyphTable.push(0);\n }\n var nextGlyphOffset = 0;\n var nextGlyphIndex = 0;\n var table = this.getTable('glyf');\n // Creating NewLocaTable - that would hold offsets for filtered glyphs.\n for (var i = 0; i < locaTable.offsets.length; i++) {\n newLocaTable.push(nextGlyphOffset);\n if (nextGlyphIndex < activeGlyphs.length && activeGlyphs[nextGlyphIndex] === i) {\n ++nextGlyphIndex;\n newLocaTable[i] = nextGlyphOffset;\n var oldGlyphOffset = locaTable.offsets[i];\n var oldNextGlyphOffset = locaTable.offsets[i + 1] - oldGlyphOffset;\n if (oldNextGlyphOffset > 0) {\n this.offset = table.offset + oldGlyphOffset;\n var result = this.read(newGlyphTable, nextGlyphOffset, oldNextGlyphOffset);\n newGlyphTable = result.buffer;\n nextGlyphOffset += oldNextGlyphOffset;\n }\n }\n }\n return { glyphTableSize: glyphSize, newLocaTable: newLocaTable, newGlyphTable: newGlyphTable };\n };\n /**\n * Updates new Loca table.\n */\n /* tslint:disable */\n TtfReader.prototype.updateLocaTable = function (newLocaTable, bLocaIsShort, newLocaTableOut) {\n /* tslint:enable */\n if (newLocaTable === null) {\n throw new Error('Argument Null Exception : newLocaTable');\n }\n var size = (bLocaIsShort) ? newLocaTable.length * 2 : newLocaTable.length * 4;\n var count = this.align(size);\n //BigEndianWiter\n var writer = new BigEndianWriter(count);\n for (var i = 0; i < newLocaTable.length; i++) {\n var value = newLocaTable[i];\n if (bLocaIsShort) {\n value /= 2;\n writer.writeShort(value);\n }\n else {\n writer.writeInt(value);\n }\n }\n return { newLocaUpdated: writer.data, newLocaSize: size };\n };\n /**\n * Aligns number to be divisible on 4.\n */\n TtfReader.prototype.align = function (value) {\n return (value + 3) & (~3);\n };\n /**\n * Returns font program data.\n */\n /* tslint:disable */\n TtfReader.prototype.getFontProgram = function (newLocaTableOut, newGlyphTable, glyphTableSize, locaTableSize) {\n /* tslint:enable */\n if (newLocaTableOut === null) {\n throw new Error('Argument Null Exception : newLocaTableOut');\n }\n if (newGlyphTable === null) {\n throw new Error('Argument Null Exception : newGlyphTable');\n }\n var tableNames = this.tableNames;\n var result = this.getFontProgramLength(newLocaTableOut, newGlyphTable, 0);\n var fontProgramLength = result.fontProgramLength;\n var numTables = result.numTables;\n var writer = new BigEndianWriter(fontProgramLength);\n writer.writeInt(0x10000);\n writer.writeShort(numTables);\n var entrySelector = this.entrySelectors[numTables];\n writer.writeShort((1 << (entrySelector & 31)) * 16);\n writer.writeShort(entrySelector);\n writer.writeShort((numTables - (1 << (entrySelector & 31))) * 16);\n // Writing to destination buffer - checksums && sizes of used tables.\n this.writeCheckSums(writer, numTables, newLocaTableOut, newGlyphTable, glyphTableSize, locaTableSize);\n // // Writing to destination buffer - used glyphs.\n this.writeGlyphs(writer, newLocaTableOut, newGlyphTable);\n return writer.data;\n };\n /* tslint:disable */\n TtfReader.prototype.getFontProgramLength = function (newLocaTableOut, newGlyphTable, numTables) {\n /* tslint:enable */\n if (newLocaTableOut === null) {\n throw new Error('Argument Null Exception : newLocaTableOut');\n }\n if (newGlyphTable === null) {\n throw new Error('Argument Null Exception : newGlyphTable');\n }\n // glyf and loca are used by default;\n numTables = 2;\n var tableNames = this.tableNames;\n var fontProgramLength = 0;\n for (var i = 0; i < tableNames.length; i++) {\n var tableName = tableNames[i];\n if (tableName !== 'glyf' && tableName !== 'loca') {\n var table = this.getTable(tableName);\n if (!table.empty) {\n ++numTables;\n fontProgramLength += this.align(table.length);\n }\n }\n }\n fontProgramLength += newLocaTableOut.length;\n fontProgramLength += newGlyphTable.length;\n var usedTablesSize = numTables * 16 + (3 * 4);\n fontProgramLength += usedTablesSize;\n return { fontProgramLength: fontProgramLength, numTables: numTables };\n };\n /**\n * Writing to destination buffer - checksums and sizes of used tables.\n */\n /* tslint:disable */\n TtfReader.prototype.writeCheckSums = function (writer, numTables, newLocaTableOut, newGlyphTable, glyphTableSize, locaTableSize) {\n /* tslint:enable */\n if (writer === null) {\n throw new Error('Argument Null Exception : writer');\n }\n if (newLocaTableOut === null) {\n throw new Error('Argument Null Exception : newLocaTableOut');\n }\n if (newGlyphTable === null) {\n throw new Error('Argument Null Exception : newGlyphTable');\n }\n var tableNames = this.tableNames;\n var usedTablesSize = numTables * 16 + (3 * 4);\n var nextTableSize = 0;\n for (var i = 0; i < tableNames.length; i++) {\n var tableName = tableNames[i];\n var tableInfo = this.getTable(tableName);\n if (tableInfo.empty) {\n continue;\n }\n writer.writeString(tableName);\n if (tableName === 'glyf') {\n var checksum = this.calculateCheckSum(newGlyphTable);\n writer.writeInt(checksum);\n nextTableSize = glyphTableSize;\n }\n else if (tableName === 'loca') {\n var checksum = this.calculateCheckSum(newLocaTableOut);\n writer.writeInt(checksum);\n nextTableSize = locaTableSize;\n }\n else {\n writer.writeInt(tableInfo.checksum);\n nextTableSize = tableInfo.length;\n }\n writer.writeUInt(usedTablesSize);\n writer.writeUInt(nextTableSize);\n usedTablesSize += this.align(nextTableSize);\n }\n };\n /**\n * Gets checksum from source buffer.\n */\n TtfReader.prototype.calculateCheckSum = function (bytes) {\n if (bytes === null) {\n throw new Error('Argument Null Exception : bytes');\n }\n var pos = 0;\n var byte1 = 0;\n var byte2 = 0;\n var byte3 = 0;\n var byte4 = 0;\n for (var i = 0; i < (bytes.length + 1) / 4; i++) {\n byte4 += (bytes[pos++] & 255);\n byte3 += (bytes[pos++] & 255);\n byte2 += (bytes[pos++] & 255);\n byte1 += (bytes[pos++] & 255);\n }\n var result = byte1;\n result += (byte2 << 8);\n result += (byte3 << 16);\n result += (byte4 << 24);\n return result;\n };\n /**\n * Writing to destination buffer - used glyphs.\n */\n TtfReader.prototype.writeGlyphs = function (writer, newLocaTable, newGlyphTable) {\n if (writer === null) {\n throw new Error('Argument Null Exception : writer');\n }\n if (newLocaTable === null) {\n throw new Error('Argument Null Exception : newLocaTableOut');\n }\n if (newGlyphTable === null) {\n throw new Error('Argument Null Exception : newGlyphTable');\n }\n var tableNames = this.tableNames;\n for (var i = 0; i < tableNames.length; i++) {\n var tableName = tableNames[i];\n var tableInfo = this.getTable(tableName);\n if (tableInfo.empty) {\n continue;\n }\n if (tableName === 'glyf') {\n writer.writeBytes(newGlyphTable);\n }\n else if (tableName === 'loca') {\n writer.writeBytes(newLocaTable);\n }\n else {\n var count = this.align(tableInfo.length);\n var buff = [];\n for (var i_1 = 0; i_1 < count; i_1++) {\n buff.push(0);\n }\n this.offset = tableInfo.offset;\n var result = this.read(buff, 0, tableInfo.length);\n writer.writeBytes(result.buffer);\n }\n }\n };\n //public methods\n /**\n * Sets position value of font data.\n */\n TtfReader.prototype.setOffset = function (offset) {\n this.offset = offset;\n };\n /**\n * Creates font Internals\n * @private\n */\n TtfReader.prototype.createInternals = function () {\n this.metrics = new TtfMetrics();\n var nameTable = this.readNameTable();\n var headTable = this.readHeadTable();\n this.bIsLocaShort = (headTable.indexToLocalFormat === 0);\n var horizontalHeadTable = this.readHorizontalHeaderTable();\n var os2Table = this.readOS2Table();\n var postTable = this.readPostTable();\n this.width = this.readWidthTable(horizontalHeadTable.numberOfHMetrics, headTable.unitsPerEm);\n var subTables = this.readCmapTable();\n this.initializeMetrics(nameTable, headTable, horizontalHeadTable, os2Table, postTable, subTables);\n };\n /**\n * Gets glyph's info by char code.\n */\n TtfReader.prototype.getGlyph = function (charCode) {\n var obj = null;\n var code = charCode.charCodeAt(0);\n if (!this.metrics.isSymbol && this.microsoft !== null) {\n if (this.microsoft.containsKey(code)) {\n obj = this.microsoft.getValue(code);\n if (code !== StringTokenizer.whiteSpace.charCodeAt(0)) {\n this.isFontPresent = true;\n }\n }\n else if (code !== StringTokenizer.whiteSpace.charCodeAt(0)) {\n this.isFontPresent = false;\n }\n }\n else if (this.metrics.isSymbol && this.macintosh !== null || this.isMacTTF) {\n // NOTE: this code fixes char codes that extends 0x100. However, it might corrupt something.\n if (this.maxMacIndex !== 0) {\n code %= this.maxMacIndex + 1;\n }\n else {\n code = ((code & 0xff00) === 0xf000 ? code & 0xff : code);\n }\n if (this.macintosh.containsKey(code)) {\n obj = this.macintosh.getValue(code);\n this.isFontPresent = true;\n }\n }\n // Fix for StackOverFlow exception in XPS to PDF converter\n if (charCode === StringTokenizer.whiteSpace && obj === null) {\n obj = new TtfGlyphInfo();\n }\n var glyph = (obj !== null) ? obj : this.getDefaultGlyph();\n return glyph;\n };\n /**\n * Gets hash table with chars indexed by glyph index.\n */\n TtfReader.prototype.getGlyphChars = function (chars) {\n if (chars === null || chars === undefined) {\n throw new Error('Argument Null Exception : chars');\n }\n var dictionary = new Dictionary();\n var charKeys = chars.keys();\n for (var i = 0; i < charKeys.length; i++) {\n var ch = charKeys[i];\n var glyph = this.getGlyph(ch);\n if (!glyph.empty) {\n dictionary.setValue(glyph.index, ch.charCodeAt(0));\n }\n }\n return dictionary;\n };\n /**\n * Gets all glyphs.\n */\n TtfReader.prototype.getAllGlyphs = function () {\n var allGlyphInfo = [];\n var info = new TtfGlyphInfo();\n var index = 0;\n for (var i = 0; i < this.width.length; i++) {\n var width = this.width[i];\n info.index = index;\n info.width = width;\n allGlyphInfo.push(info);\n index++;\n }\n return allGlyphInfo;\n };\n /**\n * Reads a font's program.\n * @private\n */\n TtfReader.prototype.readFontProgram = function (chars) {\n var glyphChars = this.getGlyphChars(chars);\n var locaTable = this.readLocaTable(this.bIsLocaShort);\n if (glyphChars.size() < chars.size()) {\n this.missedGlyphs = chars.size() - glyphChars.size();\n }\n this.updateGlyphChars(glyphChars, locaTable);\n /* tslint:disable */\n var result1 = this.generateGlyphTable(glyphChars, locaTable, null, null);\n /* tslint:enable */\n var glyphTableSize = result1.glyphTableSize;\n var newLocaTable = result1.newLocaTable;\n var newGlyphTable = result1.newGlyphTable;\n var result2 = this.updateLocaTable(newLocaTable, this.bIsLocaShort, null);\n var newLocaSize = result2.newLocaSize;\n var newLocaUpdated = result2.newLocaUpdated;\n var fontProgram = this.getFontProgram(newLocaUpdated, newGlyphTable, glyphTableSize, newLocaSize);\n return fontProgram;\n };\n /**\n * Reconverts string to be in proper format saved into PDF file.\n */\n TtfReader.prototype.convertString = function (text) {\n if (text === null) {\n throw new Error('Argument Null Exception : text');\n }\n var glyph = '';\n var i = 0;\n for (var k = 0; k < text.length; k++) {\n var ch = text[k];\n var glyphInfo = this.getGlyph(ch);\n if (!glyphInfo.empty) {\n glyph += String.fromCharCode(glyphInfo.index);\n i++;\n }\n }\n return glyph;\n };\n /**\n * Gets char width.\n */\n TtfReader.prototype.getCharWidth = function (code) {\n var glyphInfo = this.getGlyph(code);\n glyphInfo = (!glyphInfo.empty) ? glyphInfo : this.getDefaultGlyph();\n var codeWidth = (!glyphInfo.empty) ? glyphInfo.width : 0;\n return codeWidth;\n };\n TtfReader.prototype.readString = function (length, isUnicode) {\n if (isUnicode === undefined) {\n return this.readString(length, false);\n }\n else {\n //let buffer : number[] = this.readBytes(length);\n var result = '';\n if (isUnicode) {\n for (var i = 0; i < length; i++) {\n if (i % 2 !== 0) {\n result += String.fromCharCode(this.fontData[this.offset]);\n }\n this.offset += 1;\n }\n }\n else {\n for (var i = 0; i < length; i++) {\n result += String.fromCharCode(this.fontData[this.offset]);\n this.offset += 1;\n }\n }\n return result;\n }\n };\n TtfReader.prototype.readFixed = function (offset) {\n var integer = this.readInt16(offset);\n var sFraction = this.readInt16(offset + 2);\n var fraction = sFraction / 16384;\n return integer + fraction;\n };\n TtfReader.prototype.readInt32 = function (offset) {\n var i1 = this.fontData[offset + 3];\n var i2 = this.fontData[offset + 2];\n var i3 = this.fontData[offset + 1];\n var i4 = this.fontData[offset];\n this.offset += 4;\n return i1 + (i2 << 8) + (i3 << 16) + (i4 << 24);\n };\n TtfReader.prototype.readUInt32 = function (offset) {\n var i1 = this.fontData[offset + 3];\n var i2 = this.fontData[offset + 2];\n var i3 = this.fontData[offset + 1];\n var i4 = this.fontData[offset];\n this.offset += 4;\n return (i1 | i2 << 8 | i3 << 16 | i4 << 24);\n };\n // private readInt16(offset : number) : number {\n // let result : number = (this.fontData[offset] << 8) + this.fontData[offset + 1];\n // this.offset += 2;\n // return result;\n // }\n TtfReader.prototype.readInt16 = function (offset) {\n var result = (this.fontData[offset] << 8) + this.fontData[offset + 1];\n result = result & (1 << 15) ? result - 0x10000 : result;\n this.offset += 2;\n return result;\n };\n TtfReader.prototype.readInt64 = function (offset) {\n var low = this.readInt32(offset + 4);\n var n = this.readInt32(offset) * 4294967296.0 + low;\n if (low < 0) {\n n += 4294967296;\n }\n return n;\n };\n TtfReader.prototype.readUInt16 = function (offset) {\n var result = (this.fontData[offset] << 8) | this.fontData[offset + 1];\n this.offset += 2;\n return result;\n };\n /**\n * Reads ushort array.\n */\n TtfReader.prototype.readUshortArray = function (length) {\n var buffer = [];\n for (var i = 0; i < length; i++) {\n buffer[i] = this.readUInt16(this.offset);\n }\n return buffer;\n };\n TtfReader.prototype.readBytes = function (length) {\n var result = [];\n for (var i = 0; i < length; i++) {\n result.push(this.fontData[this.offset]);\n this.offset += 1;\n }\n return result;\n };\n TtfReader.prototype.readByte = function (offset) {\n var result = this.fontData[offset];\n this.offset += 1;\n return result;\n };\n /**\n * Reads bytes to array in BigEndian order.\n * @private\n */\n TtfReader.prototype.read = function (buffer, index, count) {\n if (buffer === null) {\n throw new Error('Argument Null Exception : buffer');\n }\n var written = 0;\n var read = 0;\n do {\n for (var i = 0; (i < count - written) && (this.offset + i < this.fontData.length); i++) {\n buffer[index + i] = this.fontData[this.offset + i];\n }\n read = count - written;\n this.offset += read;\n written += read;\n } while (written < count);\n return { buffer: buffer, written: written };\n };\n return TtfReader;\n}());\nexport { TtfReader };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { PdfFont } from './pdf-font';\nimport { PdfSubSuperScript } from './enum';\nimport { PdfArray } from './../../primitives/pdf-array';\n/**\n * `Metrics` of the font.\n * @private\n */\nvar PdfFontMetrics = /** @class */ (function () {\n function PdfFontMetrics() {\n /**\n * `Line gap`.\n * @private\n */\n this.lineGap = 0;\n }\n // Public methods\n /**\n * Returns `ascent` taking into consideration font`s size.\n * @private\n */\n PdfFontMetrics.prototype.getAscent = function (format) {\n var returnValue = this.ascent * PdfFont.charSizeMultiplier * this.getSize(format);\n return returnValue;\n };\n /**\n * Returns `descent` taking into consideration font`s size.\n * @private\n */\n PdfFontMetrics.prototype.getDescent = function (format) {\n var returnValue = this.descent * PdfFont.charSizeMultiplier * this.getSize(format);\n return returnValue;\n };\n /**\n * Returns `Line gap` taking into consideration font`s size.\n * @private\n */\n PdfFontMetrics.prototype.getLineGap = function (format) {\n var returnValue = this.lineGap * PdfFont.charSizeMultiplier * this.getSize(format);\n return returnValue;\n };\n /**\n * Returns `height` taking into consideration font`s size.\n * @private\n */\n PdfFontMetrics.prototype.getHeight = function (format) {\n var height;\n var clearTypeFonts = ['cambria', 'candara', 'constantia', 'corbel', 'cariadings'];\n var clearTypeFontCollection = [];\n for (var index = 0; index < clearTypeFonts.length; index++) {\n var font = clearTypeFonts[index];\n clearTypeFontCollection.push(font);\n }\n if (this.getDescent(format) < 0) {\n // if ((clearTypeFontCollection.indexOf(this.name.toLowerCase()) !== -1) && !this.isUnicodeFont) {\n // height = (this.GetAscent(format) - this.GetDescent(format) - this.GetLineGap(format));\n // } else {\n height = (this.getAscent(format) - this.getDescent(format) + this.getLineGap(format));\n // }\n }\n else {\n height = (this.getAscent(format) + this.getDescent(format) + this.getLineGap(format));\n }\n return height;\n };\n /**\n * Calculates `size` of the font depending on the subscript/superscript value.\n * @private\n */\n PdfFontMetrics.prototype.getSize = function (format) {\n var size = this.size;\n if (format != null) {\n switch (format.subSuperScript) {\n case PdfSubSuperScript.SubScript:\n size /= this.subScriptSizeFactor;\n break;\n case PdfSubSuperScript.SuperScript:\n size /= this.superscriptSizeFactor;\n break;\n }\n }\n return size;\n };\n /**\n * `Clones` the metrics.\n * @private\n */\n PdfFontMetrics.prototype.clone = function () {\n var metrics = this;\n metrics.widthTable = WidthTable.clone();\n return metrics;\n };\n Object.defineProperty(PdfFontMetrics.prototype, \"widthTable\", {\n // Properies\n /**\n * Gets or sets the `width table`.\n * @private\n */\n get: function () {\n return this.internalWidthTable;\n },\n set: function (value) {\n this.internalWidthTable = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfFontMetrics;\n}());\nexport { PdfFontMetrics };\nvar WidthTable = /** @class */ (function () {\n function WidthTable() {\n }\n /**\n * Static `clones` this instance of the WidthTable class.\n * @private\n */\n WidthTable.clone = function () {\n return null;\n };\n return WidthTable;\n}());\nexport { WidthTable };\nvar StandardWidthTable = /** @class */ (function (_super) {\n __extends(StandardWidthTable, _super);\n // Constructors\n /**\n * Initializes a new instance of the `StandardWidthTable` class.\n * @private\n */\n function StandardWidthTable(widths) {\n var _this = _super.call(this) || this;\n if (widths == null) {\n throw new Error('ArgumentNullException:widths');\n }\n _this.widths = widths;\n return _this;\n }\n //Properties\n /**\n * Gets the `32 bit number` at the specified index.\n * @private\n */\n StandardWidthTable.prototype.items = function (index) {\n if (index < 0 || index >= this.widths.length) {\n throw new Error('ArgumentOutOfRangeException:index, The character is not supported by the font.');\n }\n var result = this.widths[index];\n return result;\n };\n Object.defineProperty(StandardWidthTable.prototype, \"length\", {\n /**\n * Gets the `length` of the internal array.\n * @private\n */\n get: function () {\n return this.widths.length;\n },\n enumerable: true,\n configurable: true\n });\n //Overrides\n /**\n * `Clones` this instance of the WidthTable class.\n * @private\n */\n StandardWidthTable.prototype.clone = function () {\n var swt = this;\n swt.widths = this.widths;\n return swt;\n };\n /**\n * Converts width table to a `PDF array`.\n * @private\n */\n StandardWidthTable.prototype.toArray = function () {\n var arr = new PdfArray(this.widths);\n return arr;\n };\n return StandardWidthTable;\n}(WidthTable));\nexport { StandardWidthTable };\n","/**\n * TrueTypeFont.ts class for EJ2-PDF\n */\nimport { ByteArray } from './../../graphics/images/index';\nimport { TtfReader } from './ttf-reader';\nimport { PdfDictionary, SaveDescendantFontEventHandler, SaveFontDictionaryEventHandler } from './../../primitives/pdf-dictionary';\nimport { SaveFontProgramEventHandler, SaveCmapEventHandler } from './../../primitives/pdf-stream';\nimport { PdfStream } from './../../primitives/pdf-stream';\nimport { PdfArray } from './../../primitives/pdf-array';\nimport { PdfName } from './../../primitives/pdf-name';\nimport { PdfNumber } from './../../primitives/pdf-number';\nimport { PdfString } from './../../primitives/pdf-string';\nimport { PdfReferenceHolder } from './../../primitives/pdf-reference';\nimport { PdfFontMetrics } from './pdf-font-metrics';\nimport { StandardWidthTable } from './pdf-font-metrics';\nimport { DictionaryProperties } from './../../input-output/pdf-dictionary-properties';\nimport { Dictionary } from './../../collections/dictionary';\nimport { FontDescriptorFlags } from './enum';\nimport { RectangleF } from './../../drawing/pdf-drawing';\nimport { Operators } from './../../input-output/pdf-operators';\nvar UnicodeTrueTypeFont = /** @class */ (function () {\n /* tslint:enable */\n //Constructors\n /**\n * Initializes a new instance of the `PdfTrueTypeFont` class.\n * @private\n */\n function UnicodeTrueTypeFont(base64String, size) {\n // Fields\n this.nameString = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n /**\n * Specifies the Internal variable to store fields of `PdfDictionaryProperties`.\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n /**\n * Indicates whether the font program is compressed or not.\n * @private\n */\n this.isCompress = false;\n /**\n * Cmap table's start prefix.\n */\n /* tslint:disable */\n this.cmapPrefix = '/CIDInit /ProcSet findresource begin\\n12 dict begin\\nbegincmap' + Operators.newLine + '/CIDSystemInfo << /Registry (Adobe)/Ordering (UCS)/Supplement 0>> def\\n/CMapName ' + '/Adobe-Identity-UCS def\\n/CMapType 2 def\\n1 begincodespacerange' + Operators.newLine;\n /* tslint:enable */\n /**\n * Cmap table's start suffix.\n */\n this.cmapEndCodespaceRange = 'endcodespacerange' + Operators.newLine;\n /**\n * Cmap's begin range marker.\n */\n this.cmapBeginRange = 'beginbfrange' + Operators.newLine;\n /**\n * Cmap's end range marker.\n */\n this.cmapEndRange = 'endbfrange' + Operators.newLine;\n /**\n * Cmap table's end\n */\n /* tslint:disable */\n this.cmapSuffix = 'endbfrange\\nendcmap\\nCMapName currentdict ' + '/CMap defineresource pop\\nend end' + Operators.newLine;\n if (base64String === null || base64String === undefined) {\n throw new Error('ArgumentNullException:base64String');\n }\n this.fontSize = size;\n this.fontString = base64String;\n this.Initialize();\n }\n //Implementation\n /**\n * Returns width of the char symbol.\n */\n UnicodeTrueTypeFont.prototype.getCharWidth = function (charCode) {\n var codeWidth = this.ttfReader.getCharWidth(charCode);\n return codeWidth;\n };\n /**\n * Initializes a new instance of the `PdfTrueTypeFont` class.\n * @private\n */\n UnicodeTrueTypeFont.prototype.Initialize = function () {\n var byteArray = new ByteArray(this.fontString.length);\n byteArray.writeFromBase64String(this.fontString);\n this.fontData = byteArray.internalBuffer;\n this.ttfReader = new TtfReader(this.fontData);\n this.ttfMetrics = this.ttfReader.metrics;\n };\n UnicodeTrueTypeFont.prototype.createInternals = function () {\n this.fontDictionary = new PdfDictionary();\n this.fontProgram = new PdfStream();\n this.cmap = new PdfStream();\n this.descendantFont = new PdfDictionary();\n this.metrics = new PdfFontMetrics();\n this.ttfReader.createInternals();\n this.ttfMetrics = this.ttfReader.metrics;\n this.initializeMetrics();\n // Create all the dictionaries of the font.\n this.subsetName = this.getFontName();\n this.createDescendantFont();\n this.createCmap();\n this.createFontDictionary();\n this.createFontProgram();\n };\n UnicodeTrueTypeFont.prototype.getInternals = function () {\n return this.fontDictionary;\n };\n /**\n * Initializes metrics.\n */\n UnicodeTrueTypeFont.prototype.initializeMetrics = function () {\n var ttfMetrics = this.ttfReader.metrics;\n this.metrics.ascent = ttfMetrics.macAscent;\n this.metrics.descent = ttfMetrics.macDescent;\n this.metrics.height = ttfMetrics.macAscent - ttfMetrics.macDescent + ttfMetrics.lineGap;\n this.metrics.name = ttfMetrics.fontFamily;\n this.metrics.postScriptName = ttfMetrics.postScriptName;\n this.metrics.size = this.fontSize;\n this.metrics.widthTable = new StandardWidthTable(ttfMetrics.widthTable);\n this.metrics.lineGap = ttfMetrics.lineGap;\n this.metrics.subScriptSizeFactor = ttfMetrics.subScriptSizeFactor;\n this.metrics.superscriptSizeFactor = ttfMetrics.superscriptSizeFactor;\n this.metrics.isBold = ttfMetrics.isBold;\n };\n /**\n * Gets random string.\n */\n UnicodeTrueTypeFont.prototype.getFontName = function () {\n var builder = '';\n var name;\n // if (this.isEmbed === false) {\n for (var i = 0; i < 6; i++) {\n var index = Math.floor(Math.random() * (25 - 0 + 1)) + 0;\n builder += this.nameString[index];\n }\n builder += '+';\n // }\n builder += this.ttfReader.metrics.postScriptName;\n name = builder.toString();\n // if (name === '') {\n // name = this.ttfReader.metrics.fontFamily;\n // }\n name = this.formatName(name);\n return name;\n };\n /**\n * Generates name of the font.\n */\n UnicodeTrueTypeFont.prototype.formatName = function (fontName) {\n // if (fontName === null) {\n // throw new Error('ArgumentNullException : fontName');\n // }\n // if (fontName === '') {\n // throw new Error('ArgumentOutOfRangeException : fontName, Parameter can not be empty');\n // }\n var ret = fontName.replace('(', '#28');\n ret = ret.replace(')', '#29');\n ret = ret.replace('[', '#5B');\n ret = ret.replace(']', '#5D');\n ret = ret.replace('<', '#3C');\n ret = ret.replace('>', '#3E');\n ret = ret.replace('{', '#7B');\n ret = ret.replace('}', '#7D');\n ret = ret.replace('/', '#2F');\n ret = ret.replace('%', '#25');\n return ret.replace(' ', '#20');\n };\n /**\n * Creates descendant font.\n */\n UnicodeTrueTypeFont.prototype.createDescendantFont = function () {\n // Set property used to clone Font every time\n this.descendantFont.isFont = true;\n this.descendantFont.descendantFontBeginSave = new SaveDescendantFontEventHandler(this);\n this.descendantFont.items.setValue(this.dictionaryProperties.type, new PdfName(this.dictionaryProperties.font));\n this.descendantFont.items.setValue(this.dictionaryProperties.subtype, new PdfName(this.dictionaryProperties.cIDFontType2));\n this.descendantFont.items.setValue(this.dictionaryProperties.baseFont, new PdfName(this.subsetName));\n this.descendantFont.items.setValue(this.dictionaryProperties.cIDToGIDMap, new PdfName(this.dictionaryProperties.identity));\n this.descendantFont.items.setValue(this.dictionaryProperties.dw, new PdfNumber(1000));\n this.fontDescriptor = this.createFontDescriptor();\n this.descendantFont.items.setValue(this.dictionaryProperties.fontDescriptor, new PdfReferenceHolder(this.fontDescriptor));\n var systemInfo = this.createSystemInfo();\n this.descendantFont.items.setValue(this.dictionaryProperties.cIDSystemInfo, systemInfo);\n };\n /**\n * Creates font descriptor.\n */\n UnicodeTrueTypeFont.prototype.createFontDescriptor = function () {\n var descriptor = new PdfDictionary();\n var metrics = this.ttfReader.metrics;\n // Set property used to clone Font every time\n descriptor.isFont = true;\n descriptor.items.setValue(this.dictionaryProperties.type, new PdfName(this.dictionaryProperties.fontDescriptor));\n descriptor.items.setValue(this.dictionaryProperties.fontName, new PdfName(this.subsetName));\n descriptor.items.setValue(this.dictionaryProperties.flags, new PdfNumber(this.getDescriptorFlags()));\n descriptor.items.setValue(this.dictionaryProperties.fontBBox, PdfArray.fromRectangle(this.getBoundBox()));\n descriptor.items.setValue(this.dictionaryProperties.missingWidth, new PdfNumber(metrics.widthTable[32]));\n descriptor.items.setValue(this.dictionaryProperties.stemV, new PdfNumber(metrics.stemV));\n descriptor.items.setValue(this.dictionaryProperties.italicAngle, new PdfNumber(metrics.italicAngle));\n descriptor.items.setValue(this.dictionaryProperties.capHeight, new PdfNumber(metrics.capHeight));\n descriptor.items.setValue(this.dictionaryProperties.ascent, new PdfNumber(metrics.winAscent));\n descriptor.items.setValue(this.dictionaryProperties.descent, new PdfNumber(metrics.winDescent));\n descriptor.items.setValue(this.dictionaryProperties.leading, new PdfNumber(metrics.leading));\n descriptor.items.setValue(this.dictionaryProperties.avgWidth, new PdfNumber(metrics.widthTable[32]));\n descriptor.items.setValue(this.dictionaryProperties.fontFile2, new PdfReferenceHolder(this.fontProgram));\n descriptor.items.setValue(this.dictionaryProperties.maxWidth, new PdfNumber(metrics.widthTable[32]));\n descriptor.items.setValue(this.dictionaryProperties.xHeight, new PdfNumber(0));\n descriptor.items.setValue(this.dictionaryProperties.stemH, new PdfNumber(0));\n return descriptor;\n };\n /**\n * Generates cmap.\n * @private\n */\n UnicodeTrueTypeFont.prototype.createCmap = function () {\n this.cmap.cmapBeginSave = new SaveCmapEventHandler(this);\n };\n /**\n * Generates font dictionary.\n */\n UnicodeTrueTypeFont.prototype.createFontDictionary = function () {\n // Set property used to clone Font every time\n this.fontDictionary.isFont = true;\n this.fontDictionary.fontDictionaryBeginSave = new SaveFontDictionaryEventHandler(this);\n this.fontDictionary.items.setValue(this.dictionaryProperties.type, new PdfName(this.dictionaryProperties.font));\n this.fontDictionary.items.setValue(this.dictionaryProperties.baseFont, new PdfName(this.subsetName));\n this.fontDictionary.items.setValue(this.dictionaryProperties.subtype, new PdfName(this.dictionaryProperties.type0));\n this.fontDictionary.items.setValue(this.dictionaryProperties.encoding, new PdfName(this.dictionaryProperties.identityH));\n var descFonts = new PdfArray();\n var reference = new PdfReferenceHolder(this.descendantFont);\n // Set property used to clone Font every time\n descFonts.isFont = true;\n descFonts.add(reference);\n this.fontDictionary.items.setValue(this.dictionaryProperties.descendantFonts, descFonts);\n };\n /**\n * Creates font program.\n */\n UnicodeTrueTypeFont.prototype.createFontProgram = function () {\n this.fontProgram.fontProgramBeginSave = new SaveFontProgramEventHandler(this);\n };\n /**\n * Creates system info dictionary for CID font.\n * @private\n */\n UnicodeTrueTypeFont.prototype.createSystemInfo = function () {\n var systemInfo = new PdfDictionary();\n systemInfo.items.setValue(this.dictionaryProperties.registry, new PdfString('Adobe'));\n systemInfo.items.setValue(this.dictionaryProperties.ordering, new PdfString(this.dictionaryProperties.identity));\n systemInfo.items.setValue(this.dictionaryProperties.supplement, new PdfNumber(0));\n return systemInfo;\n };\n /**\n * Runs before font Dictionary will be saved.\n */\n UnicodeTrueTypeFont.prototype.descendantFontBeginSave = function () {\n if (this.usedChars !== null && this.usedChars !== undefined && this.usedChars.size() > 0) {\n var width = this.getDescendantWidth();\n if (width !== null) {\n this.descendantFont.items.setValue(this.dictionaryProperties.w, width);\n }\n }\n };\n /**\n * Runs before font Dictionary will be saved.\n */\n UnicodeTrueTypeFont.prototype.cmapBeginSave = function () {\n this.generateCmap();\n };\n /**\n * Runs before font Dictionary will be saved.\n */\n /* tslint:disable */\n UnicodeTrueTypeFont.prototype.fontDictionaryBeginSave = function () {\n if (this.usedChars !== null && this.usedChars !== undefined && this.usedChars.size() > 0 && !this.fontDictionary.containsKey(this.dictionaryProperties.toUnicode)) {\n this.fontDictionary.items.setValue(this.dictionaryProperties.toUnicode, new PdfReferenceHolder(this.cmap));\n }\n };\n /* tslint:enable */\n /**\n * Runs before font program stream save.\n */\n UnicodeTrueTypeFont.prototype.fontProgramBeginSave = function () {\n this.isCompress = true;\n this.generateFontProgram();\n };\n /**\n * Gets width description pad array for c i d font.\n */\n UnicodeTrueTypeFont.prototype.getDescendantWidth = function () {\n var array = new PdfArray();\n if (this.usedChars !== null && this.usedChars !== undefined && this.usedChars.size() > 0) {\n var glyphInfo = [];\n // if (!this.isEmbedFont) {\n var keys = this.usedChars.keys();\n for (var i = 0; i < keys.length; i++) {\n var chLen = keys[i];\n var glyph = this.ttfReader.getGlyph(chLen);\n if (glyph.empty) {\n continue;\n }\n glyphInfo.push(glyph);\n }\n // } else {\n // glyphInfo = this.ttfReader.getAllGlyphs();\n // }\n glyphInfo.sort(function (a, b) { return a.index - b.index; });\n var firstGlyphIndex = 0;\n var lastGlyphIndex = 0;\n var firstGlyphIndexWasSet = false;\n var widthDetails = new PdfArray();\n // if (!this.isEmbedFont) {\n for (var i = 0; i < glyphInfo.length; i++) {\n var glyph = glyphInfo[i];\n if (!firstGlyphIndexWasSet) {\n firstGlyphIndexWasSet = true;\n firstGlyphIndex = glyph.index;\n lastGlyphIndex = glyph.index - 1;\n }\n if ((lastGlyphIndex + 1 !== glyph.index || (i + 1 === glyphInfo.length)) && glyphInfo.length > 1) {\n // Add glyph index / width.\n array.add(new PdfNumber(firstGlyphIndex));\n if (i !== 0) {\n array.add(widthDetails);\n }\n firstGlyphIndex = glyph.index;\n widthDetails = new PdfArray();\n }\n widthDetails.add(new PdfNumber(glyph.width));\n if (i + 1 === glyphInfo.length) {\n array.add(new PdfNumber(firstGlyphIndex));\n array.add(widthDetails);\n }\n lastGlyphIndex = glyph.index;\n }\n // } else {\n // for (let i : number = 0; i < glyphInfo.length; i++) {\n // let glyph : TtfGlyphInfo = glyphInfo[i];\n // if (!firstGlyphIndexWasSet) {\n // firstGlyphIndexWasSet = true;\n // lastGlyphIndex = glyph.index - 1;\n // }\n // firstGlyphIndex = glyph.index;\n // if ((lastGlyphIndex + 1 === glyph.index || (i + 1 === glyphInfo.length)) && glyphInfo.length > 1) {\n // // Add glyph index / width.\n // widthDetails.add(new PdfNumber(glyph.width));\n // array.add(new PdfNumber(firstGlyphIndex));\n // array.add(widthDetails);\n // widthDetails = new PdfArray();\n // }\n // lastGlyphIndex = glyph.index;\n // }\n // }\n }\n return array;\n };\n /**\n * Creates cmap.\n */\n UnicodeTrueTypeFont.prototype.generateCmap = function () {\n if (this.usedChars !== null && this.usedChars !== undefined && this.usedChars.size() > 0) {\n var glyphChars = this.ttfReader.getGlyphChars(this.usedChars);\n if (glyphChars.size() > 0) {\n var keys = glyphChars.keys().sort();\n // add first and last glyph indexes\n var first = keys[0];\n var last = keys[keys.length - 1];\n var middlePart = this.toHexString(first, false) + this.toHexString(last, false) + Operators.newLine;\n var builder = '';\n builder += this.cmapPrefix;\n builder += middlePart;\n builder += this.cmapEndCodespaceRange;\n var nextRange = 0;\n for (var i = 0; i < keys.length; i++) {\n if (nextRange === 0) {\n if (i !== 0) {\n builder += this.cmapEndRange;\n }\n nextRange = Math.min(100, keys.length - i);\n builder += nextRange;\n builder += Operators.whiteSpace;\n builder += this.cmapBeginRange;\n }\n nextRange -= 1;\n var key = keys[i];\n /* tslint:disable */\n builder += this.toHexString(key, true) + this.toHexString(key, true) + this.toHexString(glyphChars.getValue(key), true) + '\\n';\n /* tslint:enable */\n }\n builder += this.cmapSuffix;\n this.cmap.clearStream();\n this.cmap.isFont = true;\n this.cmap.write(builder);\n }\n }\n };\n /**\n * Generates font program.\n */\n UnicodeTrueTypeFont.prototype.generateFontProgram = function () {\n var fontProgram = null;\n this.usedChars = (this.usedChars === null || this.usedChars === undefined) ? new Dictionary() : this.usedChars;\n this.ttfReader.setOffset(0);\n fontProgram = this.ttfReader.readFontProgram(this.usedChars);\n this.fontProgram.clearStream();\n this.fontProgram.isFont = true;\n this.fontProgram.writeBytes(fontProgram);\n };\n /**\n * Calculates flags for the font descriptor.\n * @private\n */\n UnicodeTrueTypeFont.prototype.getDescriptorFlags = function () {\n var flags = 0;\n var metrics = this.ttfReader.metrics;\n if (metrics.isFixedPitch) {\n flags |= FontDescriptorFlags.FixedPitch;\n }\n if (metrics.isSymbol) {\n flags |= FontDescriptorFlags.Symbolic;\n }\n else {\n flags |= FontDescriptorFlags.Nonsymbolic;\n }\n if (metrics.isItalic) {\n flags |= FontDescriptorFlags.Italic;\n }\n if (metrics.isBold) {\n flags |= FontDescriptorFlags.ForceBold;\n }\n return flags;\n };\n /**\n * Calculates BoundBox of the descriptor.\n * @private\n */\n UnicodeTrueTypeFont.prototype.getBoundBox = function () {\n var rect = this.ttfReader.metrics.fontBox;\n var width = Math.abs(rect.right - rect.left);\n var height = Math.abs(rect.top - rect.bottom);\n var rectangle = new RectangleF(rect.left, rect.bottom, width, height);\n return rectangle;\n };\n /**\n * Converts integer of decimal system to hex integer.\n */\n UnicodeTrueTypeFont.prototype.toHexString = function (n, isCaseChange) {\n var s = n.toString(16);\n if (isCaseChange) {\n s = s.toUpperCase();\n }\n return '<0000'.substring(0, 5 - s.length) + s + '>';\n };\n /**\n * Stores used symbols.\n */\n UnicodeTrueTypeFont.prototype.setSymbols = function (text) {\n if (text === null) {\n throw new Error('Argument Null Exception : text');\n }\n if (this.usedChars === null || this.usedChars === undefined) {\n this.usedChars = new Dictionary();\n }\n for (var i = 0; i < text.length; i++) {\n var ch = text[i];\n this.usedChars.setValue(ch, String.fromCharCode(0));\n }\n this.getDescendantWidth();\n };\n return UnicodeTrueTypeFont;\n}());\nexport { UnicodeTrueTypeFont };\n","/**\n * PdfGraphics.ts class for EJ2-PDF\n */\nimport { PdfColorSpace, TextRenderingMode, PdfFillMode, PdfTextAlignment } from './enum';\nimport { PdfVerticalAlignment, PdfBlendMode } from './enum';\nimport { PdfSubSuperScript } from './fonts/enum';\nimport { PdfStreamWriter } from './../input-output/pdf-stream-writer';\nimport { PdfPen } from './pdf-pen';\nimport { PdfBrush } from './brushes/pdf-brush';\nimport { PdfSolidBrush } from './brushes/pdf-solid-brush';\nimport { PdfFont } from './fonts/pdf-font';\nimport { PdfTransformationMatrix } from './pdf-transformation-matrix';\nimport { PointF, SizeF, RectangleF } from './../drawing/pdf-drawing';\nimport { ProcedureSets } from './constants';\nimport { PdfString } from './../primitives/pdf-string';\nimport { PdfStringFormat } from './fonts/pdf-string-format';\nimport { TemporaryDictionary } from './../collections/object-object-pair/dictionary';\nimport { PdfTransparency } from './pdf-transparency';\nimport { PdfStringLayouter, LineType } from './fonts/string-layouter';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\nimport { StringTokenizer } from './fonts/string-tokenizer';\nimport { PdfAutomaticFieldInfoCollection } from './../document/automatic-fields/automatic-field-info-collection';\nimport { PdfAutomaticFieldInfo } from './../document/automatic-fields/automatic-field-info';\nimport { Operators } from './../input-output/pdf-operators';\nimport { UnicodeTrueTypeFont } from './fonts/unicode-true-type-font';\nimport { InternalEnum } from './../primitives/pdf-string';\n/**\n * `PdfGraphics` class represents a graphics context of the objects.\n * It's used for performing all the graphics operations.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a new page to the document\n * let page1 : PdfPage = document.pages.add();\n * // set the font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // create black brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * //\n * //graphics of the page\n * let page1Graphics : PdfGraphics = page1.graphics;\n * // draw the text on the page1 graphics\n * page1Graphics.drawString('Hello World', font, blackBrush, new PointF(0, 0));\n * //\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\nvar PdfGraphics = /** @class */ (function () {\n function PdfGraphics(arg1, arg2, arg3) {\n /**\n * Represents the `Current color space`.\n * @private\n */\n this.currentColorSpace = PdfColorSpace.Rgb;\n /**\n * Stores `previous rendering mode`.\n * @private\n */\n this.previousTextRenderingMode = TextRenderingMode.Fill;\n /**\n * Previous `character spacing` value or 0.\n * @private\n */\n this.previousCharacterSpacing = 0.0;\n /**\n * Previous `word spacing` value or 0.\n * @private\n */\n this.previousWordSpacing = 0.0;\n /**\n * The `previously used text scaling` value.\n * @private\n */\n this.previousTextScaling = 100.0;\n /**\n * Instance of `ProcedureSets` class.\n * @private\n */\n this.procedureSets = new ProcedureSets();\n /**\n * To check wihether it is a `direct text rendering`.\n * @default true\n * @private\n */\n this.isNormalRender = true;\n /**\n * check whether to `use font size` to calculate the shift.\n * @default false\n * @private\n */\n this.isUseFontSize = false;\n /**\n * check whether the font is in `italic type`.\n * @default false\n * @private\n */\n this.isItalic = false;\n /**\n * Check whether it is an `emf Text Matrix`.\n * @default false\n * @private\n */\n this.isEmfTextScaled = false;\n /**\n * Check whether it is an `emf` call.\n * @default false\n * @private\n */\n this.isEmf = false;\n /**\n * Check whether it is an `emf plus` call.\n * @default false\n * @private\n */\n this.isEmfPlus = false;\n /**\n * Check whether it is in `base line format`.\n * @default true\n * @private\n */\n this.isBaselineFormat = true;\n /**\n * Emf Text `Scaling Factor`.\n * @private\n */\n this.emfScalingFactor = new SizeF(0, 0);\n /**\n * To check whether the `last color space` of document and garphics is saved.\n * @private\n */\n this.colorSpaceChanged = false;\n /**\n * Stores an instance of `DictionaryProperties`.\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n /**\n * Checks whether the x co-ordinate is need to set as client size or not.\n * @hidden\n * @private\n */\n this.isOverloadWithPosition = false;\n /**\n * Checks whether the x co-ordinate is need to set as client size or not.\n * @hidden\n * @private\n */\n this.isPointOverload = false;\n /**\n * Current colorspaces.\n * @hidden\n * @private\n */\n this.currentColorSpaces = ['RGB', 'CMYK', 'GrayScale', 'Indexed'];\n /**\n * Checks the current image `is optimized` or not.\n * @default false.\n * @private\n */\n this.isImageOptimized = false;\n /**\n * Stores the `graphics states`.\n * @private\n */\n this.graphicsState = [];\n /**\n * Indicates whether the object `had trasparency`.\n * @default false\n * @private\n */\n this.istransparencySet = false;\n /**\n * Stores the instance of `PdfAutomaticFieldInfoCollection` class .\n * @default null\n * @private\n */\n this.internalAutomaticFields = null;\n /**\n * Stores the index of the start line that should draw with in the next page.\n * @private\n */\n this.startCutIndex = -1;\n if (arg3 instanceof PdfStreamWriter) {\n this.pdfStreamWriter = arg3;\n this.getResources = arg2;\n this.canvasSize = arg1;\n this.initialize();\n }\n else {\n this.constructor(arg1, arg2, new PdfStreamWriter(arg3));\n }\n }\n Object.defineProperty(PdfGraphics.prototype, \"stringLayoutResult\", {\n // Properties\n /**\n * Returns the `result` after drawing string.\n * @private\n */\n get: function () {\n return this.pdfStringLayoutResult;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphics.prototype, \"size\", {\n /**\n * Gets the `size` of the canvas.\n * @private\n */\n get: function () {\n return this.canvasSize;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphics.prototype, \"mediaBoxUpperRightBound\", {\n /**\n * Gets and Sets the value of `MediaBox upper right bound`.\n * @private\n */\n get: function () {\n if (typeof this.internalMediaBoxUpperRightBound === 'undefined') {\n this.internalMediaBoxUpperRightBound = 0;\n }\n return this.internalMediaBoxUpperRightBound;\n },\n set: function (value) {\n this.internalMediaBoxUpperRightBound = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphics.prototype, \"clientSize\", {\n /**\n * Gets the `size` of the canvas reduced by margins and page templates.\n * @private\n */\n get: function () {\n return new SizeF(this.clipBounds.width, this.clipBounds.height);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphics.prototype, \"colorSpace\", {\n /**\n * Gets or sets the current `color space` of the document\n * @private\n */\n get: function () {\n return this.currentColorSpace;\n },\n set: function (value) {\n this.currentColorSpace = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphics.prototype, \"streamWriter\", {\n /**\n * Gets the `stream writer`.\n * @private\n */\n get: function () {\n return this.pdfStreamWriter;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphics.prototype, \"matrix\", {\n /**\n * Gets the `transformation matrix` reflecting current transformation.\n * @private\n */\n get: function () {\n if (this.transformationMatrix == null) {\n this.transformationMatrix = new PdfTransformationMatrix();\n }\n return this.transformationMatrix;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphics.prototype, \"layer\", {\n /**\n * Gets the `layer` for the graphics, if exists.\n * @private\n */\n get: function () {\n return this.pageLayer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphics.prototype, \"page\", {\n /**\n * Gets the `page` for this graphics, if exists.\n * @private\n */\n get: function () {\n return this.pageLayer.page;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphics.prototype, \"automaticFields\", {\n get: function () {\n if (this.internalAutomaticFields == null || typeof this.internalAutomaticFields === 'undefined') {\n this.internalAutomaticFields = new PdfAutomaticFieldInfoCollection();\n }\n return this.internalAutomaticFields;\n },\n enumerable: true,\n configurable: true\n });\n //Implementation\n /**\n * `Initializes` this instance.\n * @private\n */\n PdfGraphics.prototype.initialize = function () {\n this.bStateSaved = false;\n this.currentPen = null;\n this.currentBrush = null;\n this.currentFont = null;\n this.currentColorSpace = PdfColorSpace.Rgb;\n this.bCSInitialized = false;\n this.transformationMatrix = null;\n this.previousTextRenderingMode = (-1); //.Fill;\n this.previousCharacterSpacing = -1.0;\n this.previousWordSpacing = -1.0;\n this.previousTextScaling = -100.0;\n // this.m_trasparencies = null;\n this.currentStringFormat = null;\n this.clipBounds = new RectangleF(new PointF(0, 0), this.size);\n this.getResources.getResources().requireProcedureSet(this.procedureSets.pdf);\n };\n PdfGraphics.prototype.drawPdfTemplate = function (template, location, size) {\n if (typeof size === 'undefined') {\n if (template == null) {\n throw Error('ArgumentNullException-template');\n }\n this.drawPdfTemplate(template, location, template.size);\n }\n else {\n // let crossTable : PdfCrossTable = null;\n // if (this.pageLayer != null) {\n // crossTable = (this.page as PdfPage).section.parentDocument.crossTable;\n // }\n if (template == null) {\n throw Error('ArgumentNullException-template');\n }\n var scaleX = (template.width > 0) ? size.width / template.width : 1;\n var scaleY = (template.height > 0) ? size.height / template.height : 1;\n var bNeedScale = !(scaleX === 1 && scaleY === 1);\n // Save state.\n var state = this.save();\n // Take into consideration that rect location is bottom/left.\n var matrix = new PdfTransformationMatrix();\n if (this.pageLayer != null) {\n this.getTranslateTransform(location.x, location.y + size.height, matrix);\n }\n if (bNeedScale) {\n this.getScaleTransform(scaleX, scaleY, matrix);\n }\n this.pdfStreamWriter.modifyCtm(matrix);\n // Output template.\n var resources = this.getResources.getResources();\n var name_1 = resources.getName(template);\n this.pdfStreamWriter.executeObject(name_1);\n // Restore state.\n this.restore(state);\n //Transfer automatic fields from template.\n var g = template.graphics;\n if (g != null) {\n for (var index = 0; index < g.automaticFields.automaticFields.length; index++) {\n var fieldInfo = g.automaticFields.automaticFields[index];\n var newLocation = new PointF(fieldInfo.location.x + location.x, fieldInfo.location.y + location.y);\n var scalingX = template.size.width == 0 ? 0 : size.width / template.size.width;\n var scalingY = template.size.height == 0 ? 0 : size.height / template.size.height;\n this.automaticFields.add(new PdfAutomaticFieldInfo(fieldInfo.field, newLocation, scalingX, scalingY));\n this.page.dictionary.modify();\n }\n }\n this.getResources.getResources().requireProcedureSet(this.procedureSets.imageB);\n this.getResources.getResources().requireProcedureSet(this.procedureSets.imageC);\n this.getResources.getResources().requireProcedureSet(this.procedureSets.imageI);\n this.getResources.getResources().requireProcedureSet(this.procedureSets.text);\n }\n };\n /* tslint:disable */\n /**\n * @public\n */\n PdfGraphics.prototype.drawString = function (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) {\n if (typeof arg1 === 'string' && arg2 instanceof PdfFont && (arg3 instanceof PdfPen || arg3 === null) && (arg4 instanceof PdfBrush || arg4 === null) && typeof arg5 === 'number' && typeof arg6 === 'number' && (arg7 instanceof PdfStringFormat || arg7 === null) && typeof arg8 === 'undefined') {\n this.isOverloadWithPosition = true;\n this.drawString(arg1, arg2, arg3, arg4, arg5, arg6, (this.clientSize.width - arg5), 0, arg7);\n }\n else {\n var temparg3 = arg3;\n var temparg4 = arg4;\n var temparg5 = arg5;\n var temparg6 = arg6;\n var temparg7 = arg7;\n var temparg8 = arg8;\n var temparg9 = arg9;\n var layouter = new PdfStringLayouter();\n var result = layouter.layout(arg1, arg2, temparg9, new SizeF(temparg7, 0), this.isOverloadWithPosition, this.clientSize);\n if (!result.empty) {\n var rect = this.checkCorrectLayoutRectangle(result.actualSize, temparg5, temparg6, temparg9);\n if (temparg7 <= 0) {\n temparg5 = rect.x;\n temparg7 = rect.width;\n }\n if (temparg8 <= 0) {\n temparg6 = rect.y;\n temparg8 = rect.height;\n }\n this.drawStringLayoutResult(result, arg2, temparg3, temparg4, new RectangleF(temparg5, temparg6, temparg7, temparg8), temparg9);\n this.isEmfTextScaled = false;\n this.emfScalingFactor = new SizeF(0, 0);\n }\n this.getResources.getResources().requireProcedureSet(this.procedureSets.text);\n this.isNormalRender = true;\n this.pdfStringLayoutResult = result;\n this.isUseFontSize = false;\n }\n }; /* tslint:enable */\n PdfGraphics.prototype.drawLine = function (arg1, arg2, arg3, arg4, arg5) {\n if (arg2 instanceof PointF) {\n var temparg2 = arg2;\n var temparg3 = arg3;\n this.drawLine(arg1, temparg2.x, temparg2.y, temparg3.x, temparg3.y);\n }\n else {\n var temparg2 = arg2;\n var temparg3 = arg3;\n var temparg4 = arg4;\n var temparg5 = arg5;\n this.stateControl(arg1, null, null);\n var sw = this.streamWriter;\n sw.beginPath(temparg2, temparg3);\n sw.appendLineSegment(temparg4, temparg5);\n sw.strokePath();\n this.getResources.getResources().requireProcedureSet(this.procedureSets.pdf);\n }\n };\n /* tslint:disable */\n PdfGraphics.prototype.drawRectangle = function (arg1, arg2, arg3, arg4, arg5, arg6) {\n if (arg1 instanceof PdfPen && typeof arg2 === 'number') {\n var temparg3 = arg3;\n this.drawRectangle(arg1, null, arg2, temparg3, arg4, arg5);\n }\n else if (arg1 instanceof PdfBrush && typeof arg2 === 'number') {\n var temparg3 = arg3;\n this.drawRectangle(null, arg1, arg2, temparg3, arg4, arg5);\n }\n else {\n var temparg3 = arg3;\n var temparg4 = arg4;\n var temparg5 = arg5;\n var temparg6 = arg6;\n if (arg2 instanceof PdfSolidBrush && arg2.color.isEmpty) {\n arg2 = null;\n }\n var temparg1 = arg1;\n var temparg2 = arg2;\n this.stateControl(temparg1, temparg2, null);\n this.streamWriter.appendRectangle(temparg3, temparg4, temparg5, temparg6);\n this.drawPath(temparg1, temparg2, false);\n }\n };\n PdfGraphics.prototype.drawPath = function (arg1, arg2, arg3, arg4) {\n if (typeof arg3 === 'boolean') {\n var temparg3 = arg3;\n this.drawPath(arg1, arg2, PdfFillMode.Winding, temparg3);\n }\n else {\n var temparg3 = arg3;\n var temparg4 = arg4;\n var isPen = arg1 != null;\n var isBrush = arg2 != null;\n var isEvenOdd = (temparg3 === PdfFillMode.Alternate);\n if (isPen && isBrush) {\n this.streamWriter.fillStrokePath(isEvenOdd);\n }\n else if (!isPen && !isBrush) {\n this.streamWriter.endPath();\n }\n else if (isPen) {\n this.streamWriter.strokePath();\n }\n else {\n this.streamWriter.fillPath(isEvenOdd);\n }\n }\n };\n /* tslint:disable */\n PdfGraphics.prototype.drawImage = function (arg1, arg2, arg3, arg4, arg5) {\n if (typeof arg2 === 'number' && typeof arg3 === 'number' && typeof arg4 === 'undefined') {\n var size = arg1.physicalDimension;\n this.drawImage(arg1, arg2, arg3, size.width, size.height);\n }\n else {\n var temparg2 = arg2;\n var temparg3 = arg3;\n var temparg4 = arg4;\n var temparg5 = arg5;\n arg1.save();\n var matrix = new PdfTransformationMatrix();\n this.getTranslateTransform(temparg2, (temparg3 + temparg5), matrix);\n this.getScaleTransform(arg4, arg5, matrix);\n this.pdfStreamWriter.write('q');\n this.pdfStreamWriter.modifyCtm(matrix);\n // Output template.\n var resources = this.getResources.getResources();\n if (typeof this.pageLayer !== 'undefined' && this.page != null) {\n resources.document = this.page.document;\n }\n var name_2 = resources.getName(arg1);\n if (typeof this.pageLayer !== 'undefined') {\n this.page.setResources(resources);\n }\n this.pdfStreamWriter.executeObject(name_2);\n this.pdfStreamWriter.write(Operators.restoreState);\n this.pdfStreamWriter.write(Operators.newLine);\n var resource = this.getResources.getResources();\n resource.requireProcedureSet(this.procedureSets.imageB);\n resource.requireProcedureSet(this.procedureSets.imageC);\n resource.requireProcedureSet(this.procedureSets.imageI);\n resource.requireProcedureSet(this.procedureSets.text);\n }\n };\n //Implementation\n /* tslint:disable */\n /**\n * Returns `bounds` of the line info.\n * @private\n */\n PdfGraphics.prototype.getLineBounds = function (lineIndex, result, font, layoutRectangle, format) {\n var bounds;\n if (!result.empty && lineIndex < result.lineCount && lineIndex >= 0) {\n var line = result.lines[lineIndex];\n var vShift = this.getTextVerticalAlignShift(result.actualSize.height, layoutRectangle.height, format);\n var y = vShift + layoutRectangle.y + (result.lineHeight * lineIndex);\n var lineWidth = line.width;\n var hShift = this.getHorizontalAlignShift(lineWidth, layoutRectangle.width, format);\n var lineIndent = this.getLineIndent(line, format, layoutRectangle, (lineIndex === 0));\n hShift += (!this.rightToLeft(format)) ? lineIndent : 0;\n var x = layoutRectangle.x + hShift;\n /* tslint:disable */\n var width = (!this.shouldJustify(line, layoutRectangle.width, format)) ? lineWidth - lineIndent : layoutRectangle.width - lineIndent; /* tslint:enable */\n var height = result.lineHeight;\n bounds = new RectangleF(x, y, width, height);\n }\n else {\n bounds = new RectangleF(0, 0, 0, 0);\n }\n return bounds;\n };\n /**\n * Creates `lay outed rectangle` depending on the text settings.\n * @private\n */\n PdfGraphics.prototype.checkCorrectLayoutRectangle = function (textSize, x, y, format) {\n var layoutedRectangle = new RectangleF(x, y, textSize.width, textSize.width);\n if (format != null) {\n switch (format.alignment) {\n case PdfTextAlignment.Center:\n layoutedRectangle.x -= layoutedRectangle.width / 2;\n break;\n case PdfTextAlignment.Right:\n layoutedRectangle.x -= layoutedRectangle.width;\n break;\n }\n switch (format.lineAlignment) {\n case PdfVerticalAlignment.Middle:\n layoutedRectangle.y -= layoutedRectangle.height / 2;\n break;\n case PdfVerticalAlignment.Bottom:\n layoutedRectangle.y -= layoutedRectangle.height;\n break;\n }\n }\n return layoutedRectangle;\n };\n /**\n * Sets the `layer` for the graphics.\n * @private\n */\n PdfGraphics.prototype.setLayer = function (layer) {\n this.pageLayer = layer;\n var page = layer.page;\n if (page != null && typeof page !== 'undefined') {\n page.beginSave = this.pageSave;\n }\n };\n /**\n * Adding page number field before page saving.\n * @private\n */\n /* tslint:disable */\n PdfGraphics.prototype.pageSave = function (page) {\n if (page.graphics.automaticFields != null) {\n for (var i = 0; i < page.graphics.automaticFields.automaticFields.length; i++) {\n var fieldInfo = page.graphics.automaticFields.automaticFields[i];\n fieldInfo.field.performDraw(page.graphics, fieldInfo.location, fieldInfo.scalingX, fieldInfo.scalingY);\n }\n }\n };\n /**\n * `Draws a layout result`.\n * @private\n */\n PdfGraphics.prototype.drawStringLayoutResult = function (result, font, pen, brush, layoutRectangle, format) {\n if (!result.empty) {\n this.applyStringSettings(font, pen, brush, format, layoutRectangle);\n // Set text scaling\n var textScaling = (format != null) ? format.horizontalScalingFactor : 100.0;\n if (textScaling !== this.previousTextScaling && !this.isEmfTextScaled) {\n this.pdfStreamWriter.setTextScaling(textScaling);\n this.previousTextScaling = textScaling;\n }\n var height = (format == null || format.lineSpacing === 0) ? font.height : format.lineSpacing + font.height;\n var subScript = (format != null && format.subSuperScript === PdfSubSuperScript.SubScript);\n var shift = 0;\n shift = (subScript) ? height - (font.height + font.metrics.getDescent(format)) : (height - font.metrics.getAscent(format));\n this.shift = shift;\n this.pdfStreamWriter.startNextLine(layoutRectangle.x, layoutRectangle.y - shift);\n this.pdfStreamWriter.setLeading(+height);\n var resultHeight = 0;\n var remainingString = '';\n for (var i = 0; i < result.lines.length; i++) {\n resultHeight += result.lineHeight;\n if ((layoutRectangle.y + resultHeight) > this.clientSize.height) {\n this.startCutIndex = i;\n break;\n }\n }\n for (var j = this.startCutIndex; (j < result.lines.length && j >= 0); j++) {\n remainingString += result.lines[j].text;\n }\n var bounds = new RectangleF(layoutRectangle.x, layoutRectangle.y, layoutRectangle.width, layoutRectangle.height);\n this.drawLayoutResult(result, font, format, layoutRectangle);\n this.underlineStrikeoutText(pen, brush, result, font, bounds, format);\n this.isEmfPlus = false;\n this.isUseFontSize = false;\n if (this.startCutIndex !== -1) {\n var page = this.getNextPage();\n page.graphics.drawString(remainingString, font, pen, brush, layoutRectangle.x, 0, layoutRectangle.width, 0, format);\n }\n }\n else {\n throw new Error('ArgumentNullException:result');\n }\n };\n /**\n * Gets the `next page`.\n * @private\n */\n PdfGraphics.prototype.getNextPage = function () {\n var section = this.currentPage.section;\n var nextPage = null;\n var index = section.indexOf(this.currentPage);\n if (index === section.count - 1) {\n nextPage = section.add();\n }\n else {\n nextPage = section.getPages()[index + 1];\n }\n return nextPage;\n };\n PdfGraphics.prototype.setClip = function (rectangle, mode) {\n if (typeof mode === 'undefined') {\n this.setClip(rectangle, PdfFillMode.Winding);\n }\n else {\n this.pdfStreamWriter.appendRectangle(rectangle);\n this.pdfStreamWriter.clipPath((mode === PdfFillMode.Alternate));\n }\n };\n /**\n * Applies all the `text settings`.\n * @private\n */\n PdfGraphics.prototype.applyStringSettings = function (font, pen, brush, format, bounds) {\n var setLineWidth = false;\n var tm = this.getTextRenderingMode(pen, brush, format);\n this.stateControl(pen, brush, font, format);\n this.pdfStreamWriter.beginText();\n if ((tm) !== this.previousTextRenderingMode) {\n this.pdfStreamWriter.setTextRenderingMode(tm);\n this.previousTextRenderingMode = tm;\n }\n // Set character spacing.\n var cs = (format != null) ? format.characterSpacing : 0;\n if (cs !== this.previousCharacterSpacing && !this.isEmfTextScaled) {\n this.pdfStreamWriter.setCharacterSpacing(cs);\n this.previousCharacterSpacing = cs;\n }\n // Set word spacing.\n // NOTE: it works only if the space code is equal to 32 (0x20).\n var ws = (format != null) ? format.wordSpacing : 0;\n if (ws !== this.previousWordSpacing) {\n this.pdfStreamWriter.setWordSpacing(ws);\n this.previousWordSpacing = ws;\n }\n };\n /**\n * Calculates `shift value` if the text is vertically aligned.\n * @private\n */\n PdfGraphics.prototype.getTextVerticalAlignShift = function (textHeight, boundsHeight, format) {\n var shift = 0;\n if (boundsHeight >= 0 && format != null && format.lineAlignment !== PdfVerticalAlignment.Top) {\n switch (format.lineAlignment) {\n case PdfVerticalAlignment.Middle:\n shift = (boundsHeight - textHeight) / 2;\n break;\n case PdfVerticalAlignment.Bottom:\n shift = boundsHeight - textHeight;\n break;\n }\n }\n return shift;\n };\n /* tslint:disable */\n /**\n * `Draws layout result`.\n * @private\n */\n PdfGraphics.prototype.drawLayoutResult = function (result, font, format, layoutRectangle) {\n var vAlignShift = this.getTextVerticalAlignShift(result.actualSize.height, layoutRectangle.height, format);\n if (vAlignShift !== 0) {\n this.pdfStreamWriter.startNextLine(0, vAlignShift);\n }\n var ttfFont = font;\n var unicode = (ttfFont != null && ttfFont.isUnicode);\n var embed = (ttfFont != null && ttfFont.isEmbedFont);\n var lines = result.lines;\n for (var i = 0, len = lines.length; (i < len && i !== this.startCutIndex); i++) {\n var lineInfo = lines[i];\n var line = lineInfo.text;\n var lineWidth = lineInfo.width;\n var hAlignShift = this.getHorizontalAlignShift(lineWidth, layoutRectangle.width, format);\n var lineIndent = this.getLineIndent(lineInfo, format, layoutRectangle, (i === 0));\n hAlignShift += (!this.rightToLeft(format)) ? lineIndent : 0;\n if (hAlignShift !== 0 && !this.isEmfTextScaled) {\n this.pdfStreamWriter.startNextLine(hAlignShift, 0);\n }\n if (unicode) {\n this.drawUnicodeLine(lineInfo, layoutRectangle, font, format);\n }\n else {\n this.drawAsciiLine(lineInfo, layoutRectangle, font, format);\n }\n if (hAlignShift !== 0 && !this.isEmfTextScaled) {\n this.pdfStreamWriter.startNextLine(-hAlignShift, 0);\n }\n if (this.isOverloadWithPosition && lines.length > 1) {\n this.pdfStreamWriter.startNextLine(-(layoutRectangle.x), 0);\n layoutRectangle.x = 0;\n layoutRectangle.width = this.clientSize.width;\n this.isOverloadWithPosition = false;\n this.isPointOverload = true;\n }\n }\n this.getResources.getResources().requireProcedureSet(this.procedureSets.text);\n if (vAlignShift !== 0) {\n this.pdfStreamWriter.startNextLine(0, -(vAlignShift - result.lineHeight));\n }\n this.pdfStreamWriter.endText();\n };\n /**\n * Draws unicode line.\n * @private\n */\n PdfGraphics.prototype.drawUnicodeLine = function (lineInfo, layoutRectangle, font, format) {\n var line = lineInfo.text;\n var lineWidth = lineInfo.width;\n var rtl = (format !== null && format.rightToLeft);\n var useWordSpace = (format !== null && (format.wordSpacing !== 0 || format.alignment === PdfTextAlignment.Justify));\n var ttfFont = font;\n var wordSpacing = this.justifyLine(lineInfo, layoutRectangle.width, format);\n if (useWordSpace) {\n var result = this.breakUnicodeLine(line, ttfFont, null);\n var blocks = result.tokens;\n var words = result.words;\n this.drawUnicodeBlocks(blocks, words, ttfFont, format, wordSpacing);\n }\n else {\n var token = this.convertToUnicode(line, ttfFont);\n var value = this.getUnicodeString(token);\n this.streamWriter.showNextLineText(value);\n }\n };\n /**\n * Draws array of unicode tokens.\n */\n /* tslint:disable */\n PdfGraphics.prototype.drawUnicodeBlocks = function (blocks, words, font, format, wordSpacing) {\n /* tslint:enable */\n if (blocks == null) {\n throw new Error('Argument Null Exception : blocks');\n }\n if (words == null) {\n throw new Error('Argument Null Exception : words');\n }\n this.streamWriter.startNextLine();\n var x = 0;\n var xShift = 0;\n var firstLineIndent = 0;\n var paragraphIndent = 0;\n try {\n if (format !== null) {\n firstLineIndent = format.firstLineIndent;\n paragraphIndent = format.paragraphIndent;\n format.firstLineIndent = 0;\n format.paragraphIndent = 0;\n }\n var spaceWidth = font.getCharWidth(StringTokenizer.whiteSpace, format) + wordSpacing;\n var characterSpacing = (format != null) ? format.characterSpacing : 0;\n var wordSpace = (format !== null && wordSpacing === 0) ? format.wordSpacing : 0;\n spaceWidth += characterSpacing + wordSpace;\n for (var i = 0; i < blocks.length; i++) {\n var token = blocks[i];\n var word = words[i];\n var tokenWidth = 0;\n if (x !== 0) {\n this.streamWriter.startNextLine(x, 0);\n }\n if (word.length > 0) {\n tokenWidth += /*Utils.Round(*/ font.measureString(word, format).width /*)*/;\n tokenWidth += characterSpacing;\n var val = this.getUnicodeString(token);\n this.streamWriter.showText(val);\n }\n if (i !== blocks.length - 1) {\n x = tokenWidth + spaceWidth;\n xShift += x;\n }\n }\n // Rolback current line position.\n if (xShift > 0) {\n this.streamWriter.startNextLine(-xShift, 0);\n }\n }\n finally {\n if (format !== null) {\n format.firstLineIndent = firstLineIndent;\n format.paragraphIndent = paragraphIndent;\n }\n }\n };\n /**\n * Breakes the unicode line to the words and converts symbols to glyphs.\n */\n PdfGraphics.prototype.breakUnicodeLine = function (line, ttfFont, words) {\n if (line === null) {\n throw new Error('Argument Null Exception : line');\n }\n words = line.split(null);\n var tokens = [];\n for (var i = 0; i < words.length; i++) {\n // Reconvert string according to unicode standard.\n var word = words[i];\n var token = this.convertToUnicode(word, ttfFont);\n tokens[i] = token;\n }\n return { tokens: tokens, words: words };\n };\n /**\n * Creates PdfString from the unicode text.\n */\n PdfGraphics.prototype.getUnicodeString = function (token) {\n if (token === null) {\n throw new Error('Argument Null Exception : token');\n }\n var val = new PdfString(token);\n val.converted = true;\n val.encode = InternalEnum.ForceEncoding.Ascii;\n return val;\n };\n /**\n * Converts to unicode format.\n */\n PdfGraphics.prototype.convertToUnicode = function (text, ttfFont) {\n var token = null;\n if (text == null) {\n throw new Error('Argument Null Exception : text');\n }\n if (ttfFont == null) {\n throw new Error('Argument Null Exception : ttfFont');\n }\n if (ttfFont.fontInternal instanceof UnicodeTrueTypeFont) {\n var ttfReader = ttfFont.fontInternal.ttfReader;\n ttfFont.setSymbols(text);\n token = ttfReader.convertString(text);\n var bytes = PdfString.toUnicodeArray(token, false);\n token = PdfString.byteToString(bytes);\n }\n return token;\n };\n /**\n * `Draws Ascii line`.\n * @private\n */\n PdfGraphics.prototype.drawAsciiLine = function (lineInfo, layoutRectangle, font, format) {\n this.justifyLine(lineInfo, layoutRectangle.width, format);\n var value = '';\n if (lineInfo.text.indexOf('(') !== -1 || lineInfo.text.indexOf(')') !== -1) {\n for (var i = 0; i < lineInfo.text.length; i++) {\n if (lineInfo.text[i] === '(') {\n value += '\\\\\\(';\n }\n else if (lineInfo.text[i] === ')') {\n value += '\\\\\\)';\n }\n else {\n value += lineInfo.text[i];\n }\n }\n }\n if (value === '') {\n value = lineInfo.text;\n }\n var line = '(' + value + ')';\n this.pdfStreamWriter.showNextLineText(new PdfString(line));\n };\n /**\n * `Justifies` the line if needed.\n * @private\n */\n PdfGraphics.prototype.justifyLine = function (lineInfo, boundsWidth, format) {\n var line = lineInfo.text;\n var lineWidth = lineInfo.width;\n var shouldJustify = this.shouldJustify(lineInfo, boundsWidth, format);\n var hasWordSpacing = (format != null && format.wordSpacing !== 0);\n var symbols = StringTokenizer.spaces;\n var whitespacesCount = StringTokenizer.getCharsCount(line, symbols);\n var wordSpace = 0;\n if (shouldJustify) {\n // Correct line width.\n if (hasWordSpacing) {\n lineWidth -= (whitespacesCount * format.wordSpacing);\n }\n var difference = boundsWidth - lineWidth;\n wordSpace = difference / whitespacesCount;\n this.pdfStreamWriter.setWordSpacing(wordSpace);\n }\n else {\n // If there is justifying, but the line shouldn't be justified, restore default word spacing.\n if (hasWordSpacing) {\n this.pdfStreamWriter.setWordSpacing(format.wordSpacing);\n }\n else {\n this.pdfStreamWriter.setWordSpacing(0);\n }\n }\n return wordSpace;\n };\n /**\n * `Reset` or reinitialize the current graphic value.\n * @private\n */\n PdfGraphics.prototype.reset = function (size) {\n this.canvasSize = size;\n this.streamWriter.clear();\n this.initialize();\n this.initializeCoordinates();\n };\n /**\n * Checks whether the line should be `justified`.\n * @private\n */\n PdfGraphics.prototype.shouldJustify = function (lineInfo, boundsWidth, format) {\n var line = lineInfo.text;\n var lineWidth = lineInfo.width;\n var justifyStyle = (format != null && format.alignment === PdfTextAlignment.Justify);\n var goodWidth = (boundsWidth >= 0 && lineWidth < boundsWidth);\n var symbols = StringTokenizer.spaces;\n var whitespacesCount = StringTokenizer.getCharsCount(line, symbols);\n var hasSpaces = (whitespacesCount > 0 && line[0] !== StringTokenizer.whiteSpace);\n var goodLineBreakStyle = ((lineInfo.lineType & LineType.LayoutBreak) > 0);\n /* tslint:disable */\n var shouldJustify = (justifyStyle && goodWidth && hasSpaces && (goodLineBreakStyle || format.alignment === PdfTextAlignment.Justify)); /* tslint:enable */\n return shouldJustify;\n };\n /* tslint:disable */\n /**\n * Emulates `Underline, Strikeout` of the text if needed.\n * @private\n */\n PdfGraphics.prototype.underlineStrikeoutText = function (pen, brush, result, font, layoutRectangle, format) {\n if (font.underline || font.strikeout) {\n // Calculate line width.\n var linePen = this.createUnderlineStikeoutPen(pen, brush, font, format);\n if (linePen != null) {\n // Approximate line positions.\n var vShift = this.getTextVerticalAlignShift(result.actualSize.height, layoutRectangle.height, format);\n var underlineYOffset = 0;\n underlineYOffset = layoutRectangle.y + vShift + font.metrics.getAscent(format) + 1.5 * linePen.width;\n var strikeoutYOffset = layoutRectangle.y + vShift + font.metrics.getHeight(format) / 2 + 1.5 * linePen.width;\n var lines = result.lines;\n // Run through the text and draw lines.\n for (var i = 0, len = result.lineCount; i < len; i++) {\n var lineInfo = lines[i];\n var line = lineInfo.text;\n var lineWidth = lineInfo.width;\n var hShift = this.getHorizontalAlignShift(lineWidth, layoutRectangle.width, format);\n var lineIndent = this.getLineIndent(lineInfo, format, layoutRectangle, (i === 0));\n hShift += (!this.rightToLeft(format)) ? lineIndent : 0;\n var x1 = layoutRectangle.x + hShift;\n /* tslint:disable */\n var x2 = (!this.shouldJustify(lineInfo, layoutRectangle.width, format)) ? x1 + lineWidth - lineIndent : x1 + layoutRectangle.width - lineIndent;\n /* tslint:enable */\n if (font.underline) {\n var y = underlineYOffset;\n this.drawLine(linePen, x1, y, x2, y);\n underlineYOffset += result.lineHeight;\n }\n if (font.strikeout) {\n var y = strikeoutYOffset;\n this.drawLine(linePen, x1, y, x2, y);\n strikeoutYOffset += result.lineHeight;\n }\n if (this.isPointOverload && lines.length > 1) {\n layoutRectangle.x = 0;\n layoutRectangle.width = this.clientSize.width;\n }\n }\n this.isPointOverload = false;\n }\n }\n };\n /**\n * `Creates a pen` for drawing lines in the text.\n * @private\n */\n PdfGraphics.prototype.createUnderlineStikeoutPen = function (pen, brush, font, format) {\n // Calculate line width.\n var lineWidth = font.metrics.getSize(format) / 20;\n var linePen = null;\n // Create a pen fo the lines.\n if (pen != null) {\n linePen = new PdfPen(pen.color, lineWidth);\n }\n else if (brush != null) {\n linePen = new PdfPen(brush, lineWidth);\n }\n return linePen;\n };\n /**\n * Return `text rendering mode`.\n * @private\n */\n PdfGraphics.prototype.getTextRenderingMode = function (pen, brush, format) {\n var tm = TextRenderingMode.None;\n if (pen != null && brush != null) {\n tm = TextRenderingMode.FillStroke;\n }\n else if (pen != null) {\n tm = TextRenderingMode.Stroke;\n }\n else {\n tm = TextRenderingMode.Fill;\n }\n if (format != null && format.clipPath) {\n tm |= TextRenderingMode.ClipFlag;\n }\n return tm;\n };\n /**\n * Returns `line indent` for the line.\n * @private\n */\n PdfGraphics.prototype.getLineIndent = function (lineInfo, format, layoutBounds, firstLine) {\n var lineIndent = 0;\n var firstParagraphLine = ((lineInfo.lineType & LineType.FirstParagraphLine) > 0);\n if (format != null && firstParagraphLine) {\n lineIndent = (firstLine) ? format.firstLineIndent : format.paragraphIndent;\n lineIndent = (layoutBounds.width > 0) ? Math.min(layoutBounds.width, lineIndent) : lineIndent;\n }\n return lineIndent;\n };\n /**\n * Calculates shift value if the line is `horizontaly aligned`.\n * @private\n */\n PdfGraphics.prototype.getHorizontalAlignShift = function (lineWidth, boundsWidth, format) {\n var shift = 0;\n if (boundsWidth >= 0 && format != null && format.alignment !== PdfTextAlignment.Left) {\n switch (format.alignment) {\n case PdfTextAlignment.Center:\n shift = (boundsWidth - lineWidth) / 2;\n break;\n case PdfTextAlignment.Right:\n shift = boundsWidth - lineWidth;\n break;\n }\n }\n return shift;\n };\n /**\n * Gets or sets the value that indicates `text direction` mode.\n * @private\n */\n PdfGraphics.prototype.rightToLeft = function (format) {\n var rtl = (format != null && format.rightToLeft);\n return rtl;\n };\n PdfGraphics.prototype.stateControl = function (pen, brush, font, format) {\n if (typeof format === 'undefined') {\n this.stateControl(pen, brush, font, null);\n }\n else {\n var saveState = false;\n if (brush !== null) {\n var solidBrush = brush;\n if (typeof this.pageLayer !== 'undefined' && this.pageLayer != null) {\n if (this.colorSpaceChanged === false) {\n this.lastDocumentCS = this.pageLayer.page.document.colorSpace;\n this.lastGraphicsCS = this.pageLayer.page.graphics.colorSpace;\n this.colorSpace = this.pageLayer.page.document.colorSpace;\n this.currentColorSpace = this.pageLayer.page.document.colorSpace;\n this.colorSpaceChanged = true;\n }\n }\n this.initCurrentColorSpace(this.currentColorSpace);\n }\n else if (pen != null) {\n var pdfPen = pen;\n if (typeof this.pageLayer !== 'undefined' && this.pageLayer != null) {\n /* tslint:disable */\n this.colorSpace = this.pageLayer.page.document.colorSpace;\n this.currentColorSpace = this.pageLayer.page.document.colorSpace;\n }\n this.initCurrentColorSpace(this.currentColorSpace);\n }\n this.penControl(pen, saveState);\n this.brushControl(brush, saveState);\n this.fontControl(font, format, saveState);\n }\n };\n /**\n * Initializes the `current color space`.\n * @private\n */\n PdfGraphics.prototype.initCurrentColorSpace = function (colorspace) {\n var re = this.getResources.getResources();\n if (!this.bCSInitialized) {\n this.pdfStreamWriter.setColorSpace('Device' + this.currentColorSpaces[this.currentColorSpace], true);\n this.pdfStreamWriter.setColorSpace('Device' + this.currentColorSpaces[this.currentColorSpace], false);\n this.bCSInitialized = true;\n }\n };\n /**\n * Controls the `pen state`.\n * @private\n */\n PdfGraphics.prototype.penControl = function (pen, saveState) {\n if (pen != null) {\n this.currentPen = pen;\n this.colorSpace = PdfColorSpace.Rgb;\n /* tslint:disable */\n pen.monitorChanges(this.currentPen, this.pdfStreamWriter, this.getResources, saveState, this.colorSpace, this.matrix.clone());\n /* tslint:enable */\n this.currentPen = pen.clone();\n }\n };\n /**\n * Controls the `brush state`.\n * @private\n */\n PdfGraphics.prototype.brushControl = function (brush, saveState) {\n if (brush != null) {\n this.currentBrush = brush;\n /* tslint:disable */\n brush.monitorChanges(this.currentBrush, this.pdfStreamWriter, this.getResources, saveState, this.colorSpace);\n /* tslint:enable */\n this.currentBrush = brush;\n brush = null;\n }\n };\n /**\n * Saves the font and other `font settings`.\n * @private\n */\n PdfGraphics.prototype.fontControl = function (font, format, saveState) {\n if (font != null) {\n var curSubSuper = (format != null) ? format.subSuperScript : PdfSubSuperScript.None;\n /* tslint:disable */\n var prevSubSuper = (this.currentStringFormat != null) ? this.currentStringFormat.subSuperScript : PdfSubSuperScript.None; /* tslint:enable */\n if (saveState || font !== this.currentFont || curSubSuper !== prevSubSuper) {\n var resources = this.getResources.getResources();\n this.currentFont = font;\n this.currentStringFormat = format;\n var size = font.metrics.getSize(format);\n /* tslint:disable */\n this.isEmfTextScaled = false;\n var fontName = resources.getName(font);\n this.pdfStreamWriter.setFont(font, fontName, size);\n }\n }\n };\n PdfGraphics.prototype.setTransparency = function (arg1, arg2, arg3) {\n if (typeof arg2 === 'undefined') {\n this.istransparencySet = true;\n this.setTransparency(arg1, arg1, PdfBlendMode.Normal);\n }\n else if (typeof arg2 === 'number' && typeof arg3 === 'undefined') {\n this.setTransparency(arg1, arg2, PdfBlendMode.Normal);\n }\n else {\n if (this.trasparencies == null) {\n this.trasparencies = new TemporaryDictionary();\n }\n var transp = null;\n var td = new TransparencyData(arg1, arg2, arg3);\n if (this.trasparencies.containsKey(td)) {\n transp = this.trasparencies.getValue(td);\n }\n if (transp == null) {\n transp = new PdfTransparency(arg1, arg2, arg3);\n this.trasparencies.setValue(td, transp);\n }\n var resources = this.getResources.getResources();\n var name_3 = resources.getName(transp);\n var sw = this.streamWriter;\n sw.setGraphicsState(name_3);\n }\n };\n PdfGraphics.prototype.clipTranslateMargins = function (x, y, left, top, right, bottom) {\n if (x instanceof RectangleF && typeof y === 'undefined') {\n this.clipBounds = x;\n this.pdfStreamWriter.writeComment('Clip margins.');\n this.pdfStreamWriter.appendRectangle(x);\n this.pdfStreamWriter.closePath();\n this.pdfStreamWriter.clipPath(false);\n this.pdfStreamWriter.writeComment('Translate co-ordinate system.');\n this.translateTransform(x.x, x.y);\n }\n else if (typeof x === 'number') {\n var clipArea = new RectangleF(left, top, this.size.width - left - right, this.size.height - top - bottom);\n this.clipBounds = clipArea;\n this.pdfStreamWriter.writeComment(\"Clip margins.\");\n this.pdfStreamWriter.appendRectangle(clipArea);\n this.pdfStreamWriter.closePath();\n this.pdfStreamWriter.clipPath(false);\n this.pdfStreamWriter.writeComment(\"Translate co-ordinate system.\");\n this.translateTransform(x, y);\n }\n };\n /**\n * `Updates y` co-ordinate.\n * @private\n */\n PdfGraphics.prototype.updateY = function (y) {\n return -y;\n };\n /**\n * Used to `translate the transformation`.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // create a new page\n * let page1 : PdfPage = document.pages.add();\n * // set pen\n * let pen : PdfPen = new PdfPen(new PdfColor(0, 0, 0));\n * //\n * // set translate transform\n * page1.graphics.translateTransform(100, 100);\n * //\n * // draw the rectangle after applying translate transform\n * page1.graphics.drawRectangle(pen, new RectangleF({x : 0, y : 0}, {width : 100, height : 50}));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n * @param offsetX The x-coordinate of the translation.\n * @param offsetY The y-coordinate of the translation.\n */\n PdfGraphics.prototype.translateTransform = function (offsetX, offsetY) {\n var matrix = new PdfTransformationMatrix();\n this.getTranslateTransform(offsetX, offsetY, matrix);\n this.pdfStreamWriter.modifyCtm(matrix);\n this.matrix.multiply(matrix);\n };\n /**\n * `Translates` coordinates of the input matrix.\n * @private\n */\n PdfGraphics.prototype.getTranslateTransform = function (x, y, input) {\n input.translate(x, this.updateY(y));\n return input;\n };\n /* tslint:disable */\n /**\n * Applies the specified `scaling operation` to the transformation matrix of this Graphics by prepending it to the object's transformation matrix.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // create a new page\n * let page1 : PdfPage = document.pages.add();\n * // create pen\n * let pen : PdfPen = new PdfPen(new PdfColor(0, 0, 0));\n * //\n * // apply scaling trasformation\n * page1.graphics.scaleTransform(1.5, 2);\n * //\n * // draw the rectangle after applying scaling transform\n * page1.graphics.drawRectangle(pen, new RectangleF({x : 100, y : 100}, {width : 100, height : 50}));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n * @param scaleX Scale factor in the x direction.\n * @param scaleY Scale factor in the y direction.\n */\n /* tslint:enable */\n PdfGraphics.prototype.scaleTransform = function (scaleX, scaleY) {\n var matrix = new PdfTransformationMatrix();\n this.getScaleTransform(scaleX, scaleY, matrix);\n this.pdfStreamWriter.modifyCtm(matrix);\n this.matrix.multiply(matrix);\n };\n /**\n * `Scales` coordinates of the input matrix.\n * @private\n */\n PdfGraphics.prototype.getScaleTransform = function (x, y, input) {\n if (input == null) {\n input = new PdfTransformationMatrix();\n }\n input.scale(x, y);\n return input;\n };\n /**\n * Applies the specified `rotation` to the transformation matrix of this Graphics.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // create a new page\n * let page1 : PdfPage = document.pages.add();\n * // create pen\n * let pen : PdfPen = new PdfPen(new PdfColor(0, 0, 0));\n * //\n * // set RotateTransform with 25 degree of angle\n * page1.graphics.rotateTransform(25);\n * //\n * // draw the rectangle after RotateTransformation\n * page1.graphics.drawRectangle(pen, new RectangleF({x : 100, y : 100}, {width : 100, height : 50}));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n * @param angle Angle of rotation in degrees.\n */\n PdfGraphics.prototype.rotateTransform = function (angle) {\n var matrix = new PdfTransformationMatrix();\n this.getRotateTransform(angle, matrix);\n this.pdfStreamWriter.modifyCtm(matrix);\n this.matrix.multiply(matrix);\n };\n /**\n * `Initializes coordinate system`.\n * @private\n */\n PdfGraphics.prototype.initializeCoordinates = function () {\n // Matrix equation: TM(T-1)=M', where T=[1 0 0 -1 0 h]\n this.pdfStreamWriter.writeComment('Change co-ordinate system to left/top.');\n // Translate co-ordinates only, don't flip.\n if (this.mediaBoxUpperRightBound !== -(this.size.height)) {\n if (this.cropBox == null) {\n if (this.mediaBoxUpperRightBound === this.size.height || this.mediaBoxUpperRightBound === 0) {\n this.translateTransform(0, this.updateY(this.size.height));\n }\n else {\n this.translateTransform(0, this.updateY(this.mediaBoxUpperRightBound));\n }\n }\n }\n };\n /**\n * `Rotates` coordinates of the input matrix.\n * @private\n */\n PdfGraphics.prototype.getRotateTransform = function (angle, input) {\n if (input == null || typeof input === 'undefined') {\n input = new PdfTransformationMatrix();\n }\n input.rotate(this.updateY(angle));\n return input;\n };\n /**\n * `Saves` the current state of this Graphics and identifies the saved state with a GraphicsState.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // create a new page\n * let page1 : PdfPage = document.pages.add();\n * // create pen\n * let pen : PdfPen = new PdfPen(new PdfColor(0, 0, 0));\n * //\n * // save the graphics state\n * let state1 : PdfGraphicsState = page1.graphics.save();\n * //\n * page1.graphics.scaleTransform(1.5, 2);\n * // draw the rectangle\n * page1.graphics.drawRectangle(pen, new RectangleF({x : 100, y : 100}, {width : 100, height : 50}));\n * // restore the graphics state\n * page1.graphics.restore(state1);\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n PdfGraphics.prototype.save = function () {\n var state = new PdfGraphicsState(this, this.matrix.clone());\n state.brush = this.currentBrush;\n state.pen = this.currentPen;\n state.font = this.currentFont;\n state.colorSpace = this.currentColorSpace;\n state.characterSpacing = this.previousCharacterSpacing;\n state.wordSpacing = this.previousWordSpacing;\n state.textScaling = this.previousTextScaling;\n state.textRenderingMode = this.previousTextRenderingMode;\n this.graphicsState.push(state);\n this.pdfStreamWriter.saveGraphicsState();\n return state;\n };\n PdfGraphics.prototype.restore = function (state) {\n if (typeof state === 'undefined') {\n if (this.graphicsState.length > 0) {\n this.doRestoreState();\n }\n }\n else {\n if (this.graphicsState.indexOf(state) !== -1) {\n for (;;) {\n if (this.graphicsState.length === 0) {\n break;\n }\n var popState = this.doRestoreState();\n if (popState === state) {\n break;\n }\n }\n }\n }\n };\n /**\n * `Restores graphics state`.\n * @private\n */\n PdfGraphics.prototype.doRestoreState = function () {\n var state = this.graphicsState.pop();\n this.transformationMatrix = state.matrix;\n this.currentBrush = state.brush;\n this.currentPen = state.pen;\n this.currentFont = state.font;\n this.currentColorSpace = state.colorSpace;\n this.previousCharacterSpacing = state.characterSpacing;\n this.previousWordSpacing = state.wordSpacing;\n this.previousTextScaling = state.textScaling;\n this.previousTextRenderingMode = state.textRenderingMode;\n this.pdfStreamWriter.restoreGraphicsState();\n return state;\n };\n // Constants\n /**\n * Specifies the mask of `path type values`.\n * @private\n */\n PdfGraphics.pathTypesValuesMask = 0xf;\n /**\n * Checks whether the object is `transparencyObject`.\n * @hidden\n * @private\n */\n PdfGraphics.transparencyObject = false;\n return PdfGraphics;\n}());\nexport { PdfGraphics };\n/**\n * `GetResourceEventHandler` class is alternate for event handlers and delegates.\n * @private\n * @hidden\n */\nvar GetResourceEventHandler = /** @class */ (function () {\n /**\n * Initialize instance of `GetResourceEventHandler` class.\n * Alternate for event handlers and delegates.\n * @private\n */\n function GetResourceEventHandler(sender) {\n this.sender = sender;\n }\n /**\n * Return the instance of `PdfResources` class.\n * @private\n */\n GetResourceEventHandler.prototype.getResources = function () {\n return this.sender.getResources();\n };\n return GetResourceEventHandler;\n}());\nexport { GetResourceEventHandler };\nvar PdfGraphicsState = /** @class */ (function () {\n function PdfGraphicsState(graphics, matrix) {\n /**\n * Stores `previous rendering mode`.\n * @default TextRenderingMode.Fill\n * @private\n */\n this.internalTextRenderingMode = TextRenderingMode.Fill;\n /**\n * `Previous character spacing` value or 0.\n * @default 0.0\n * @private\n */\n this.internalCharacterSpacing = 0.0;\n /**\n * `Previous word spacing` value or 0.\n * @default 0.0\n * @private\n */\n this.internalWordSpacing = 0.0;\n /**\n * The previously used `text scaling value`.\n * @default 100.0\n * @private\n */\n this.internalTextScaling = 100.0;\n /**\n * `Current color space`.\n * @default PdfColorSpace.Rgb\n * @private\n */\n this.pdfColorSpace = PdfColorSpace.Rgb;\n if (typeof graphics !== 'undefined') {\n this.pdfGraphics = graphics;\n this.transformationMatrix = matrix;\n }\n }\n Object.defineProperty(PdfGraphicsState.prototype, \"graphics\", {\n // Properties\n /**\n * Gets the parent `graphics object`.\n * @private\n */\n get: function () {\n return this.pdfGraphics;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphicsState.prototype, \"matrix\", {\n /**\n * Gets the `current matrix`.\n * @private\n */\n get: function () {\n return this.transformationMatrix;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphicsState.prototype, \"characterSpacing\", {\n /**\n * Gets or sets the `current character spacing`.\n * @private\n */\n get: function () {\n return this.internalCharacterSpacing;\n },\n set: function (value) {\n this.internalCharacterSpacing = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphicsState.prototype, \"wordSpacing\", {\n /**\n * Gets or sets the `word spacing` value.\n * @private\n */\n get: function () {\n return this.internalWordSpacing;\n },\n set: function (value) {\n this.internalWordSpacing = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphicsState.prototype, \"textScaling\", {\n /**\n * Gets or sets the `text scaling` value.\n * @private\n */\n get: function () {\n return this.internalTextScaling;\n },\n set: function (value) {\n this.internalTextScaling = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphicsState.prototype, \"pen\", {\n /**\n * Gets or sets the `current pen` object.\n * @private\n */\n get: function () {\n return this.pdfPen;\n },\n set: function (value) {\n this.pdfPen = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphicsState.prototype, \"brush\", {\n /**\n * Gets or sets the `brush`.\n * @private\n */\n get: function () {\n return this.pdfBrush;\n },\n set: function (value) {\n this.pdfBrush = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphicsState.prototype, \"font\", {\n /**\n * Gets or sets the `current font` object.\n * @private\n */\n get: function () {\n return this.pdfFont;\n },\n set: function (value) {\n this.pdfFont = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphicsState.prototype, \"colorSpace\", {\n /**\n * Gets or sets the `current color space` value.\n * @private\n */\n get: function () {\n return this.pdfColorSpace;\n },\n set: function (value) {\n this.pdfColorSpace = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphicsState.prototype, \"textRenderingMode\", {\n /**\n * Gets or sets the `text rendering mode`.\n * @private\n */\n get: function () {\n return this.internalTextRenderingMode;\n },\n set: function (value) {\n this.internalTextRenderingMode = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfGraphicsState;\n}());\nexport { PdfGraphicsState };\nvar TransparencyData = /** @class */ (function () {\n // Constructors\n /**\n * Initializes a new instance of the `TransparencyData` class.\n * @private\n */\n function TransparencyData(alphaPen, alphaBrush, blendMode) {\n this.alphaPen = alphaPen;\n this.alphaBrush = alphaBrush;\n this.blendMode = blendMode;\n }\n return TransparencyData;\n}());\n","import { PdfStream } from './../primitives/pdf-stream';\nimport { PdfGraphics, GetResourceEventHandler } from './../graphics/pdf-graphics';\nimport { PdfPageLayerCollection } from './pdf-page-layer-collection';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\nimport { PdfColorSpace } from './../graphics/enum';\n/**\n * The `PdfPageLayer` used to create layers in PDF document.\n * @private\n */\nvar PdfPageLayer = /** @class */ (function () {\n function PdfPageLayer(page, streamClipPageTemplates) {\n // private bSaved : boolean;\n /**\n * Local Variable to store the `color space` of the document.\n * @private\n */\n this.pdfColorSpace = PdfColorSpace.Rgb;\n /**\n * Local Variable to set `visibility`.\n * @default true\n * @private\n */\n this.isVisible = true;\n /**\n * Indicates if `Sublayer` is present.\n * @default false\n * @private\n */\n this.sublayer = false;\n /**\n * Local variable to store `length` of the graphics.\n * @default 0\n * @private\n */\n this.contentLength = 0;\n /**\n * Instance for `PdfDictionaryProperties` Class.\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n if (typeof streamClipPageTemplates === 'undefined') {\n this.pdfPage = page;\n this.clipPageTemplates = true;\n this.content = new PdfStream();\n }\n else if (streamClipPageTemplates instanceof PdfStream || streamClipPageTemplates === null) {\n if (page == null) {\n throw new Error('ArgumentNullException:page');\n }\n if (streamClipPageTemplates == null) {\n throw new Error('ArgumentNullException:stream');\n }\n this.pdfPage = page;\n this.content = streamClipPageTemplates;\n }\n else {\n this.constructor(page);\n this.clipPageTemplates = streamClipPageTemplates;\n }\n }\n Object.defineProperty(PdfPageLayer.prototype, \"colorSpace\", {\n // Properties\n /**\n * Get or set the `color space`.\n * @private\n */\n get: function () {\n return this.pdfColorSpace;\n },\n set: function (value) {\n this.pdfColorSpace = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageLayer.prototype, \"page\", {\n /**\n * Gets parent `page` of the layer.\n * @private\n */\n get: function () {\n return this.pdfPage;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageLayer.prototype, \"layerId\", {\n /**\n * Gets and Sets the `id of the layer`.\n * @private\n */\n get: function () {\n return this.layerid;\n },\n set: function (value) {\n this.layerid = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageLayer.prototype, \"name\", {\n /**\n * Gets or sets the `name` of the layer.\n * @private\n */\n get: function () {\n return this.layerName;\n },\n set: function (value) {\n this.layerName = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageLayer.prototype, \"visible\", {\n /**\n * Gets or sets the `visibility` of the layer.\n * @private\n */\n get: function () {\n return this.isVisible;\n },\n set: function (value) {\n this.isVisible = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageLayer.prototype, \"graphics\", {\n /**\n * Gets `Graphics` context of the layer, used to draw various graphical content on layer.\n * @private\n */\n get: function () {\n if ((this.pdfGraphics == null)) {\n this.initializeGraphics(this.page);\n }\n return this.pdfGraphics;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageLayer.prototype, \"layers\", {\n /**\n * Gets the collection of `PdfPageLayer`, this collection handle by the class 'PdfPageLayerCollection'.\n * @private\n */\n get: function () {\n if (this.layer == null) {\n this.layer = new PdfPageLayerCollection(this.page);\n this.layer.sublayer = true;\n return this.layer;\n }\n else {\n return this.layer;\n }\n },\n enumerable: true,\n configurable: true\n });\n // Implementation\n /**\n * `Adds` a new PDF Page layer.\n * @private\n */\n PdfPageLayer.prototype.add = function () {\n var layer = new PdfPageLayer(this.pdfPage);\n layer.name = '';\n return layer;\n };\n /**\n * Returns a value indicating the `sign` of a single-precision floating-point number.\n * @private\n */\n PdfPageLayer.prototype.sign = function (number) {\n if (number === 0) {\n return 0;\n }\n else if (number > 0) {\n return 1;\n }\n else {\n return -1;\n }\n };\n /**\n * `Initializes Graphics context` of the layer.\n * @private\n */\n PdfPageLayer.prototype.initializeGraphics = function (page) {\n var oPage = page;\n var gr = new GetResourceEventHandler(this.page);\n var cropBox = null;\n this.pdfGraphics = new PdfGraphics(page.size, gr, this.content);\n this.pdfGraphics.mediaBoxUpperRightBound = 0;\n if (oPage != null) {\n var sc = oPage.section.parent;\n if (sc != null) {\n this.pdfGraphics.colorSpace = sc.document.colorSpace;\n this.colorSpace = sc.document.colorSpace;\n }\n }\n // Transform coordinates to the left/top and activate margins.\n var isSame = (this.sign(page.origin.y) === this.sign(page.origin.x));\n // if (page != null) {\n if (page.origin.x >= 0 && page.origin.y >= 0 || !(isSame)) {\n this.pdfGraphics.initializeCoordinates();\n }\n else {\n // this.m_graphics.InitializeCoordinates(page);\n }\n var clipRect = oPage.section.getActualBounds(oPage, true);\n var margins = oPage.section.pageSettings.margins;\n if (this.clipPageTemplates) {\n if (page.origin.x >= 0 && page.origin.y >= 0) {\n this.pdfGraphics.clipTranslateMargins(clipRect);\n }\n }\n else {\n this.graphics.clipTranslateMargins(clipRect.x, clipRect.y, margins.left, margins.top, margins.right, margins.bottom);\n }\n this.pdfGraphics.setLayer(this);\n // this.bSaved = false;\n };\n Object.defineProperty(PdfPageLayer.prototype, \"element\", {\n // IPdfWrapper Members\n /**\n * Gets the wrapped `element`.\n * @private\n */\n get: function () {\n return this.content;\n },\n enumerable: true,\n configurable: true\n });\n return PdfPageLayer;\n}());\nexport { PdfPageLayer };\n","/**\n * PdfCollection.ts class for EJ2-PDF\n * The class used to handle the collection of PdF objects.\n */\nvar PdfCollection = /** @class */ (function () {\n // Constructors\n /**\n * Initializes a new instance of the `Collection` class.\n * @private\n */\n function PdfCollection() {\n //\n }\n Object.defineProperty(PdfCollection.prototype, \"count\", {\n // Properties\n /**\n * Gets the `Count` of stored objects.\n * @private\n */\n get: function () {\n if (typeof this.collection === 'undefined') {\n this.collection = [];\n }\n return this.collection.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfCollection.prototype, \"list\", {\n /**\n * Gets the `list` of stored objects.\n * @private\n */\n get: function () {\n if (typeof this.collection === 'undefined') {\n this.collection = [];\n }\n return this.collection;\n },\n enumerable: true,\n configurable: true\n });\n return PdfCollection;\n}());\nexport { PdfCollection };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * PdfPageLayerCollection.ts class for EJ2-PDF\n */\nimport { PdfPageBase } from './pdf-page-base';\nimport { PdfDictionary } from './../primitives/pdf-dictionary';\nimport { PdfPageLayer } from './pdf-page-layer';\nimport { PdfCollection } from './../general/pdf-collection';\nimport { PdfReferenceHolder } from './../primitives/pdf-reference';\nimport { PdfStream } from './../primitives/pdf-stream';\n/**\n * The class provides methods and properties to handle the collections of `PdfPageLayer`.\n */\nvar PdfPageLayerCollection = /** @class */ (function (_super) {\n __extends(PdfPageLayerCollection, _super);\n function PdfPageLayerCollection(page) {\n var _this = _super.call(this) || this;\n /**\n * Stores the `number of first level layers` in the document.\n * @default 0\n * @private\n */\n _this.parentLayerCount = 0;\n /**\n * Indicates if `Sublayer` is present.\n * @default false\n * @private\n */\n _this.sublayer = false;\n /**\n * Stores the `optional content dictionary`.\n * @private\n */\n _this.optionalContent = new PdfDictionary();\n if (page instanceof PdfPageBase) {\n // if (page == null) {\n // throw new Error('ArgumentNullException:page');\n // }\n _this.page = page;\n var lPage = page;\n // if (lPage != null) {\n _this.parseLayers(lPage);\n // }\n }\n return _this;\n }\n PdfPageLayerCollection.prototype.items = function (index, value) {\n if (typeof index === 'number' && typeof value === 'undefined') {\n var obj = this.list[index];\n return obj;\n }\n else {\n if (value == null) {\n throw new Error('ArgumentNullException: layer');\n }\n if (value.page !== this.page) {\n throw new Error('ArgumentException: The layer belongs to another page');\n }\n // // Add/remove the layer.\n // let layer : PdfPageLayer = this.items(index);\n // if (layer != null) {\n // this.RemoveLayer(layer);\n // }\n // this.List[index] = value;\n // this.InsertLayer(index, value);\n }\n };\n PdfPageLayerCollection.prototype.add = function (firstArgument, secondArgument) {\n if (typeof firstArgument === 'undefined') {\n var layer = new PdfPageLayer(this.page);\n layer.name = '';\n this.add(layer);\n return layer;\n }\n else if (firstArgument instanceof PdfPageLayer) {\n // if (layer == null)\n // throw new ArgumentNullException(\"layer\");\n // if (layer.Page != m_page)\n // throw new ArgumentException(\"The layer belongs to another page\");\n var index = this.list.push(firstArgument);\n // Register layer.\n this.addLayer(index, firstArgument);\n return index;\n }\n else {\n return 0;\n }\n };\n /**\n * Registers `layer` at the page.\n * @private\n */\n PdfPageLayerCollection.prototype.addLayer = function (index, layer) {\n var reference = new PdfReferenceHolder(layer);\n this.page.contents.add(reference);\n };\n // private RemoveLayer(layer : PdfPageLayer) : void {\n // if (layer == null) {\n // throw new Error('ArgumentNullException:layer');\n // }\n // let reference : PdfReferenceHolder = new PdfReferenceHolder(layer);\n // if (this.page != null) {\n // this.page.Contents.Remove(reference);\n // }\n // }\n /**\n * Inserts `PdfPageLayer` into the collection at specified index.\n * @private\n */\n PdfPageLayerCollection.prototype.insert = function (index, layer) {\n // if (index < 0)\n // throw new ArgumentOutOfRangeException(\"index\", \"Value can not be less 0\");\n // if (layer == null)\n // throw new ArgumentNullException(\"layer\");\n // if (layer.Page != m_page)\n // throw new ArgumentException(\"The layer belongs to another page\");\n var list = [];\n var length = this.list.length;\n for (var i = index; i < length; i++) {\n list.push(this.list.pop());\n }\n this.list.push(layer);\n for (var i = 0; i < list.length; i++) {\n this.list.push(list[i]);\n }\n // Register layer.\n this.insertLayer(index, layer);\n };\n /**\n * Registers layer at the page.\n * @private\n */\n PdfPageLayerCollection.prototype.insertLayer = function (index, layer) {\n if (layer == null) {\n throw new Error('ArgumentNullException:layer');\n }\n var reference = new PdfReferenceHolder(layer);\n this.page.contents.insert(index, reference);\n };\n // tslint:disable\n /**\n * `Parses the layers`.\n * @private\n */\n PdfPageLayerCollection.prototype.parseLayers = function (loadedPage) {\n // if (loadedPage == null) {\n // throw new Error('ArgumentNullException:loadedPage');\n // }\n var contents = this.page.contents;\n var resource = this.page.getResources();\n var crossTable = null;\n var ocproperties = null;\n var propertie = null;\n var isLayerAdded = false;\n // if (loadedPage instanceof PdfPage) {\n crossTable = loadedPage.crossTable;\n // } else {\n // crossTable = (loadedPage as PdfLoadedPage).CrossTable;\n // Propertie = PdfCrossTable.Dereference(Resource[DictionaryProperties.Properties]) as PdfDictionary;\n // ocproperties = PdfCrossTable.Dereference((loadedPage as PdfLoadedPage).\n // Document.Catalog[DictionaryProperties.OCProperties]) as PdfDictionary;\n // }\n var saveStream = new PdfStream();\n var restoreStream = new PdfStream();\n var saveState = 'q';\n var newLine = '\\n';\n var restoreState = 'Q';\n // for (let index : number = 0; index < contents.Items.length; index++) {\n // let obj : IPdfPrimitive = contents[index];\n // let stream : PdfStream = crossTable.GetObject(obj) as PdfStream;\n // if (stream == null)\n // throw new PdfDocumentException(\"Invalid contents array.\");\n // // if (stream.Compress)\n // {\n // if (!loadedPage.Imported)\n // stream.Decompress();\n // }\n // byte[] contentId = stream.Data;\n // string str = PdfString.ByteToString(contentId);\n // if (!loadedPage.Imported && (contents.Count == 1) && ((stream.Data[stream.Data.Length - 2] ==\n // RestoreState) || (stream.Data[stream.Data.Length - 1] == RestoreState)))\n // {\n // byte[] content = stream.Data;\n // byte[] data = new byte[content.Length + 4];\n // data[0] = SaveState;\n // data[1] = NewLine;\n // content.CopyTo(data, 2);\n // data[data.Length - 2] = NewLine;\n // data[data.Length - 1] = RestoreState;\n // stream.Data = data;\n // }\n // if (ocproperties != null)\n // {\n // if (Propertie != null)\n // {\n // foreach (KeyValuePair prop in Propertie.Items)\n // {\n // String Key = prop.Key.ToString();\n // PdfReferenceHolder refh = prop.Value as PdfReferenceHolder;\n // PdfDictionary Dict = null;\n // if (refh != null)\n // {\n // Dict = refh.Object as PdfDictionary;\n // }\n // else\n // {\n // Dict = prop.Value as PdfDictionary;\n // }\n // PdfDictionary m_usage = PdfCrossTable.Dereference(Dict[DictionaryProperties.Usage]) as PdfDictionary;\n // if (m_usage != null)\n // {\n // if (str.Contains(Key))\n // {\n // PdfPageLayer layer = new PdfPageLayer(loadedPage, stream);\n // PdfDictionary printoption = PdfCrossTable.Dereference(m_usage[DictionaryProperties.Print])\n // as PdfDictionary;\n // if (printoption != null)\n // {\n // layer.m_printOption = printoption;\n // foreach (KeyValuePair value in printoption.Items)\n // {\n // if (value.Key.Value.Equals(DictionaryProperties.PrintState))\n // {\n // string printState = (value.Value as PdfName).Value;\n // if (printState.Equals(DictionaryProperties.OCGON))\n // {\n // layer.PrintState = PdfPrintState.AlwaysPrint;\n // break;\n // }\n // else\n // {\n // layer.PrintState = PdfPrintState.NeverPrint;\n // break;\n // }\n // }\n // }\n // }\n // PdfString layerName = PdfCrossTable.Dereference(Dict[DictionaryProperties.Name]) as PdfString;\n // layer.Name = layerName.Value;\n // List.add(layer);\n // isLayerAdded = true;\n // if(!str.Contains(\"EMC\"))\n // break;\n // }\n // }\n // else\n // {\n // if (str.Contains(Key))\n // {\n // PdfPageLayer layer = new PdfPageLayer(loadedPage, stream);\n // List.add(layer);\n // if(Dict.ContainsKey(DictionaryProperties.Name))\n // {\n // PdfString layerName = PdfCrossTable.Dereference(Dict[DictionaryProperties.Name]) as PdfString;\n // layer.Name = layerName.Value;\n // }\n // isLayerAdded = true;\n // break;\n // }\n // }\n // }\n // }\n // }\n // if (!isLayerAdded)\n // {\n // PdfPageLayer layer = new PdfPageLayer(loadedPage, stream);\n // List.add(layer);\n // }\n // else\n // isLayerAdded = false;\n // }\n var saveData = [];\n saveData.push(saveState);\n saveStream.data = saveData;\n contents.insert(0, new PdfReferenceHolder(saveStream));\n saveData = [];\n saveData.push(restoreState);\n restoreStream.data = saveData;\n contents.insert(contents.count, new PdfReferenceHolder(restoreStream));\n };\n /**\n * Returns `index of` the `PdfPageLayer` in the collection if exists, -1 otherwise.\n * @private\n */\n PdfPageLayerCollection.prototype.indexOf = function (layer) {\n if (layer == null) {\n throw new Error('ArgumentNullException: layer');\n }\n var index = this.list.indexOf(layer);\n return index;\n };\n return PdfPageLayerCollection;\n}(PdfCollection));\nexport { PdfPageLayerCollection };\n","/**\n * PdfTemplate.ts class for EJ2-PDF\n */\nimport { PdfStream } from './../../primitives/pdf-stream';\nimport { DictionaryProperties } from './../../input-output/pdf-dictionary-properties';\nimport { PdfArray } from './../../primitives/pdf-array';\nimport { PdfGraphics } from './../pdf-graphics';\nimport { PdfResources } from './../pdf-resources';\nimport { PdfName } from './../../primitives/pdf-name';\nimport { PointF, SizeF, RectangleF } from './../../drawing/pdf-drawing';\nimport { GetResourceEventHandler } from './../pdf-graphics';\n/**\n * Represents `Pdf Template` object.\n * @private\n */\nvar PdfTemplate = /** @class */ (function () {\n function PdfTemplate(arg1, arg2) {\n /**\n * Initialize an instance for `DictionaryProperties` class.\n * @private\n * @hidden\n */\n this.dictionaryProperties = new DictionaryProperties();\n /**\n * Checks whether the transformation 'is performed'.\n * @default true\n * @private\n */\n this.writeTransformation = true;\n if (typeof arg1 === 'undefined') {\n //\n }\n else if (arg1 instanceof SizeF && typeof arg2 === 'undefined') {\n this.content = new PdfStream();\n var tempSize = new SizeF(arg1.width, arg1.height);\n this.setSize(tempSize);\n this.initialize();\n }\n else {\n this.content = new PdfStream();\n this.setSize(new SizeF(arg1, arg2));\n this.initialize();\n }\n }\n Object.defineProperty(PdfTemplate.prototype, \"size\", {\n //Properties\n /**\n * Gets the size of the 'PdfTemplate'.\n */\n get: function () {\n return this.templateSize;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfTemplate.prototype, \"width\", {\n /**\n * Gets the width of the 'PdfTemplate'.\n */\n get: function () {\n return this.size.width;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfTemplate.prototype, \"height\", {\n /**\n * Gets the height of the 'PdfTemplate'.\n */\n get: function () {\n return this.size.height;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfTemplate.prototype, \"graphics\", {\n /**\n * Gets the `graphics` of the 'PdfTemplate'.\n */\n get: function () {\n if (this.pdfGraphics == null || typeof this.pdfGraphics === 'undefined') {\n var gr = new GetResourceEventHandler(this);\n var g = new PdfGraphics(this.size, gr, this.content);\n this.pdfGraphics = g;\n // if(this.writeTransformation) {\n // Transform co-ordinates to Top/Left.\n this.pdfGraphics.initializeCoordinates();\n // }\n }\n return this.pdfGraphics;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Gets the resources and modifies the template dictionary.\n * @private\n */\n PdfTemplate.prototype.getResources = function () {\n if (this.resources == null) {\n this.resources = new PdfResources();\n this.content.items.setValue(this.dictionaryProperties.resources, this.resources);\n }\n return this.resources;\n };\n // Public methods\n /**\n * `Initialize` the type and subtype of the template.\n * @private\n */\n PdfTemplate.prototype.initialize = function () {\n this.addType();\n this.addSubType();\n };\n /**\n * `Adds type key`.\n * @private\n */\n PdfTemplate.prototype.addType = function () {\n var value = new PdfName(this.dictionaryProperties.xObject);\n this.content.items.setValue(this.dictionaryProperties.type, value);\n };\n /**\n * `Adds SubType key`.\n * @private\n */\n PdfTemplate.prototype.addSubType = function () {\n var value = new PdfName(this.dictionaryProperties.form);\n this.content.items.setValue(this.dictionaryProperties.subtype, value);\n };\n PdfTemplate.prototype.reset = function (size) {\n if (typeof size === 'undefined') {\n if (this.resources != null) {\n this.resources = null;\n this.content.remove(this.dictionaryProperties.resources);\n }\n if (this.graphics != null) {\n this.graphics.reset(this.size);\n }\n }\n else {\n this.setSize(size);\n this.reset();\n }\n };\n /**\n * `Set the size` of the 'PdfTemplate'.\n * @private\n */\n PdfTemplate.prototype.setSize = function (size) {\n var rect = new RectangleF(new PointF(0, 0), size);\n var val = PdfArray.fromRectangle(rect);\n this.content.items.setValue(this.dictionaryProperties.bBox, val);\n this.templateSize = size;\n };\n Object.defineProperty(PdfTemplate.prototype, \"element\", {\n // /**\n // * Returns the value of current graphics.\n // * @private\n // */\n // public GetGraphics(g : PdfGraphics) : PdfGraphics {\n // if (this.graphics == null || typeof this.graphics === 'undefined') {\n // this.graphics = g;\n // this.graphics.Size = this.Size;\n // this.graphics.StreamWriter = new PdfStreamWriter(this.content)\n // this.graphics.Initialize();\n // if(this.writeTransformation) {\n // this.graphics.InitializeCoordinates();\n // }\n // }\n // return this.graphics;\n // }\n // IPdfWrapper Members\n /**\n * Gets the `content stream` of 'PdfTemplate' class.\n * @private\n */\n get: function () {\n return this.content;\n },\n enumerable: true,\n configurable: true\n });\n return PdfTemplate;\n}());\nexport { PdfTemplate };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * PdfResources.ts class for EJ2-PDF\n */\nimport { PdfDictionary } from './../primitives/pdf-dictionary';\nimport { TemporaryDictionary } from './../collections/object-object-pair/dictionary';\nimport { PdfName } from './../primitives/pdf-name';\nimport { PdfArray } from './../primitives/pdf-array';\nimport { PdfReferenceHolder } from './../primitives/pdf-reference';\nimport { PdfCrossTable } from './../input-output/pdf-cross-table';\nimport { PdfFont } from './fonts/pdf-font';\nimport { PdfTemplate } from './figures/pdf-template';\nimport { PdfBrush } from './brushes/pdf-brush';\nimport { PdfTransparency } from './pdf-transparency';\nimport { PdfBitmap } from './../graphics/images/pdf-bitmap';\nimport { PdfImage } from './../graphics/images/pdf-image';\n/**\n * `PdfResources` class used to set resource contents like font, image.\n * @private\n */\nvar PdfResources = /** @class */ (function (_super) {\n __extends(PdfResources, _super);\n function PdfResources(baseDictionary) {\n var _this = _super.call(this) || this;\n /**\n * Dictionary for the `properties names`.\n * @private\n */\n _this.properties = new PdfDictionary();\n if (baseDictionary instanceof PdfDictionary) {\n _this = _super.call(this, baseDictionary) || this;\n }\n return _this;\n }\n Object.defineProperty(PdfResources.prototype, \"names\", {\n //Properties\n /**\n * Gets the `font names`.\n * @private\n */\n get: function () {\n return this.getNames();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfResources.prototype, \"document\", {\n /**\n * Get or set the `page document`.\n * @private\n */\n get: function () {\n return this.pdfDocument;\n },\n set: function (value) {\n this.pdfDocument = value;\n },\n enumerable: true,\n configurable: true\n });\n //Public Methods\n /**\n * `Generates name` for the object and adds to the resource if the object is new.\n * @private\n */\n PdfResources.prototype.getName = function (obj) {\n var primitive = obj.element;\n var name = null;\n if (this.names.containsKey(primitive)) {\n name = this.names.getValue(primitive);\n }\n // Object is new.\n if (name == null) {\n var sName = this.generateName();\n name = new PdfName(sName);\n this.names.setValue(primitive, name);\n if (obj instanceof PdfFont) {\n this.add(obj, name);\n }\n else if (obj instanceof PdfTemplate) {\n this.add(obj, name);\n }\n else if (obj instanceof PdfTransparency) {\n this.add(obj, name);\n }\n else if (obj instanceof PdfImage || obj instanceof PdfBitmap) {\n this.add(obj, name);\n }\n }\n return name;\n };\n /**\n * Gets `resource names` to font dictionaries.\n * @private\n */\n PdfResources.prototype.getNames = function () {\n if (this.pdfNames == null) {\n this.pdfNames = new TemporaryDictionary();\n }\n var fonts = this.items.getValue(this.dictionaryProperties.font);\n if (fonts != null) {\n var reference = fonts;\n var dictionary = fonts;\n dictionary = PdfCrossTable.dereference(fonts);\n }\n return this.pdfNames;\n };\n /**\n * Add `RequireProcedureSet` into procset array.\n * @private\n */\n PdfResources.prototype.requireProcedureSet = function (procedureSetName) {\n if (procedureSetName == null) {\n throw new Error('ArgumentNullException:procedureSetName');\n }\n var procSets = this.items.getValue(this.dictionaryProperties.procset);\n if (procSets == null) {\n procSets = new PdfArray();\n this.items.setValue(this.dictionaryProperties.procset, procSets);\n }\n var name = new PdfName(procedureSetName);\n if (!procSets.contains(name)) {\n procSets.add(name);\n }\n };\n //Helper Methods\n /**\n * `Remove font` from array.\n * @private\n */\n PdfResources.prototype.removeFont = function (name) {\n var key = null;\n var keys = this.pdfNames.keys();\n for (var index = 0; index < this.pdfNames.size(); index++) {\n if (this.pdfNames.getValue(keys[index]) === new PdfName(name)) {\n key = keys[index];\n break;\n }\n }\n if (key != null) {\n this.pdfNames.remove(key);\n }\n };\n /**\n * Generates `Unique string name`.\n * @private\n */\n PdfResources.prototype.generateName = function () {\n var name = Guid.getNewGuidString();\n return name;\n };\n PdfResources.prototype.add = function (arg1, arg2) {\n if (arg1 instanceof PdfFont) {\n var dictionary = null;\n var fonts = this.items.getValue(this.dictionaryProperties.font);\n if (fonts != null) {\n var reference = fonts;\n dictionary = fonts;\n dictionary = fonts;\n }\n else {\n dictionary = new PdfDictionary();\n this.items.setValue(this.dictionaryProperties.font, dictionary);\n }\n dictionary.items.setValue(arg2.value, new PdfReferenceHolder(arg1.element));\n }\n else if (arg1 instanceof PdfTemplate) {\n var xobjects = void 0;\n xobjects = this.items.getValue(this.dictionaryProperties.xObject);\n // Create fonts dictionary.\n if (xobjects == null) {\n xobjects = new PdfDictionary();\n this.items.setValue(this.dictionaryProperties.xObject, xobjects);\n }\n xobjects.items.setValue(arg2.value, new PdfReferenceHolder(arg1.element));\n }\n else if (arg1 instanceof PdfBrush) {\n // let savable : IPdfPrimitive = (arg1 as IPdfWrapper).Element;\n // if (savable != null)\n // {\n // let pattern : PdfDictionary = this.Items.getValue(this.dictionaryProperties.pattern) as PdfDictionary;\n // // Create a new pattern dictionary.\n // if (pattern == null) {\n // pattern = new PdfDictionary();\n // this.Items.setValue(this.dictionaryProperties.pattern, pattern);\n // }\n // pattern.Items.setValue(name, new PdfReferenceHolder(savable));\n // }\n }\n else if (arg1 instanceof PdfTransparency) {\n var savable = arg1.element;\n var transDic = null;\n transDic = this.items.getValue(this.dictionaryProperties.extGState);\n // Create a new pattern dictionary.\n if (transDic == null) {\n transDic = new PdfDictionary();\n this.items.setValue(this.dictionaryProperties.extGState, transDic);\n }\n transDic.items.setValue(arg2.value, new PdfReferenceHolder(savable));\n }\n else {\n /* tslint:disable */\n var xobjects = this.Dictionary.items.getValue(this.dictionaryProperties.xObject);\n var parentXObjects = void 0;\n if (typeof this.pdfDocument !== 'undefined') {\n parentXObjects = this.pdfDocument.sections.element.items.getValue(this.dictionaryProperties.resources).items.getValue(this.dictionaryProperties.xObject);\n }\n var values = this.Dictionary.items.values();\n var hasSameImageStream = false;\n var oldReference = void 0;\n if (typeof this.pdfDocument !== 'undefined' && (typeof parentXObjects === undefined || parentXObjects == null)) {\n parentXObjects = new PdfDictionary();\n this.pdfDocument.sections.element.items.getValue(this.dictionaryProperties.resources).items.setValue(this.dictionaryProperties.xObject, parentXObjects);\n }\n else if (typeof this.pdfDocument !== 'undefined') {\n var values_1 = parentXObjects.items.values();\n for (var i = 0; i < values_1.length; i++) {\n if (typeof values_1[i] !== 'undefined' && typeof values_1[i].element !== 'undefined') {\n if (values_1[i].element.data[0] === arg1.element.data[0]) {\n oldReference = values_1[i];\n hasSameImageStream = true;\n }\n }\n }\n }\n if (xobjects == null) {\n xobjects = new PdfDictionary();\n this.Dictionary.items.setValue(this.dictionaryProperties.xObject, xobjects);\n }\n if (hasSameImageStream && typeof oldReference !== 'undefined') {\n xobjects.items.setValue(arg2.value, oldReference);\n }\n else {\n var reference = new PdfReferenceHolder(arg1.element);\n xobjects.items.setValue(arg2.value, reference);\n if (typeof this.pdfDocument !== 'undefined') {\n parentXObjects.items.setValue(arg2.value, reference);\n }\n }\n /* tslint:enable */\n }\n };\n return PdfResources;\n}(PdfDictionary));\nexport { PdfResources };\n/**\n * Used to create new guid for resources.\n * @private\n */\nvar Guid = /** @class */ (function () {\n /**\n * Initialize an `instance of GUID` class.\n * @private\n */\n function Guid(stringValue) {\n this.stringValue = stringValue || Guid.getNewGuidString();\n }\n Object.defineProperty(Guid, \"randomNumber\", {\n /**\n * Generate `Random number` for GUID.\n * @private\n */\n get: function () {\n Guid.guid = Guid.guid + 1;\n Guid.guid = Guid.guid > 999999999999 ? 0 : Guid.guid;\n return Guid.guid;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Return the value of `GUID as string`.\n * @private\n */\n Guid.prototype.toString = function () {\n return this.stringValue;\n };\n /**\n * Generate `new GUID`.\n * @private\n */\n Guid.getNewGuidString = function () {\n var guid = 'abc7def4-ghi9-jkl2-m6n3-';\n var temproaryString = 'opqrstuvwxyz';\n var randomString = Guid.randomNumber.toString();\n randomString = guid + temproaryString.substr(0, (12 - randomString.length)) + randomString;\n return randomString;\n };\n /**\n * static field to store `endding value of current GUID`.\n * @private\n */\n Guid.guid = 0;\n return Guid;\n}());\nexport { Guid };\n","import { PdfArray } from './../primitives/pdf-array';\nimport { PdfPageLayerCollection } from './pdf-page-layer-collection';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\nimport { PdfResources } from './../graphics/pdf-resources';\n/**\n * The abstract base class for all pages,\n * `PdfPageBase` class provides methods and properties to create PDF pages and its elements.\n * @private\n */\nvar PdfPageBase = /** @class */ (function () {\n //constructors\n /**\n * Initializes a new instance of the `PdfPageBase` class.\n * @private\n */\n function PdfPageBase(dictionary) {\n /**\n * `Index` of the default layer.\n * @default -1.\n * @private\n */\n this.defLayerIndex = -1;\n /**\n * Local variable to store if page `updated`.\n * @default false.\n * @private\n */\n this.modified = false;\n /**\n * Instance of `DictionaryProperties` class.\n * @hidden\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n this.pageDictionary = dictionary;\n }\n Object.defineProperty(PdfPageBase.prototype, \"section\", {\n //Properties\n /**\n * Gets the `section` of a page.\n * @private\n */\n get: function () {\n // if (this.pdfSection === null) {\n // throw new Error('PdfException : Page must be added to some section before using.');\n // }\n return this.pdfSection;\n },\n set: function (value) {\n this.pdfSection = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageBase.prototype, \"dictionary\", {\n /**\n * Gets the page `dictionary`.\n * @private\n */\n get: function () {\n return this.pageDictionary;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageBase.prototype, \"element\", {\n /**\n * Gets the wrapped `element`.\n * @private\n */\n get: function () {\n return this.pageDictionary;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageBase.prototype, \"defaultLayer\", {\n /**\n * Gets the `default layer` of the page (Read only).\n * @private\n */\n get: function () {\n var layer = this.layers;\n var index = this.defaultLayerIndex;\n var returnlayer = layer.items(index);\n return returnlayer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageBase.prototype, \"defaultLayerIndex\", {\n /**\n * Gets or sets `index of the default layer`.\n * @private\n */\n get: function () {\n if (this.layerCollection.count === 0 || this.defLayerIndex === -1) {\n var layer = this.layerCollection.add();\n this.defLayerIndex = this.layerCollection.indexOf(layer);\n }\n return this.defLayerIndex;\n },\n /**\n * Gets or sets` index of the default layer`.\n * @private\n */\n set: function (value) {\n if (value < 0 || value > this.layers.count - 1) {\n throw new Error('ArgumentOutOfRangeException : value, Index can not be less 0 and greater Layers.Count - 1');\n }\n else {\n this.defLayerIndex = value;\n this.modified = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageBase.prototype, \"layers\", {\n /**\n * Gets the collection of the page's `layers` (Read only).\n * @private\n */\n get: function () {\n if (this.layerCollection == null || typeof this.layerCollection === 'undefined') {\n this.layerCollection = new PdfPageLayerCollection(this);\n }\n return this.layerCollection;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Return an instance of `PdfResources` class.\n * @private\n */\n PdfPageBase.prototype.getResources = function () {\n if (this.resources == null) {\n this.resources = new PdfResources();\n this.dictionary.items.setValue(this.dictionaryProperties.resources, this.resources);\n }\n return this.resources;\n };\n Object.defineProperty(PdfPageBase.prototype, \"contents\", {\n /**\n * Gets `array of page's content`.\n * @private\n */\n get: function () {\n var obj = this.pageDictionary.items.getValue(this.dictionaryProperties.contents);\n var contents = obj;\n var rh = obj;\n if (contents == null) {\n contents = new PdfArray();\n this.pageDictionary.items.setValue(this.dictionaryProperties.contents, contents);\n }\n return contents;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Sets the `resources`.\n * @private\n */\n PdfPageBase.prototype.setResources = function (res) {\n this.resources = res;\n this.dictionary.items.setValue(this.dictionaryProperties.resources, this.resources);\n this.modified = true;\n };\n return PdfPageBase;\n}());\nexport { PdfPageBase };\n","import { PdfArray } from './../primitives/pdf-array';\nimport { PdfReferenceHolder } from './../primitives/pdf-reference';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\nimport { SizeF, RectangleF, PointF } from './../drawing/pdf-drawing';\nimport { PdfStringLayouter } from './../graphics/fonts/string-layouter';\nimport { PdfColorSpace } from './../graphics/enum';\n/**\n * `PdfAnnotationCollection` class represents the collection of 'PdfAnnotation' objects.\n * @private\n */\nvar PdfAnnotationCollection = /** @class */ (function () {\n function PdfAnnotationCollection(page) {\n // Constants\n /**\n * `Error` constant message.\n * @private\n */\n this.alreadyExistsAnnotationError = 'This annotatation had been already added to page';\n /**\n * `Error` constant message.\n * @private\n */\n this.missingAnnotationException = 'Annotation is not contained in collection.';\n /**\n * Specifies the Internal variable to store fields of `PdfDictionaryProperties`.\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n /**\n * Array of the `annotations`.\n * @private\n */\n this.internalAnnotations = new PdfArray();\n /**\n * privte `list` for the annotations.\n * @private\n */\n this.lists = [];\n if (typeof page !== 'undefined') {\n this.page = page;\n }\n }\n Object.defineProperty(PdfAnnotationCollection.prototype, \"annotations\", {\n /**\n * Gets the `PdfAnnotation` object at the specified index. Read-Only.\n * @private\n */\n get: function () {\n return this.internalAnnotations;\n },\n set: function (value) {\n this.internalAnnotations = value;\n },\n enumerable: true,\n configurable: true\n });\n // Public methods\n /**\n * `Adds` a new annotation to the collection.\n * @private\n */\n PdfAnnotationCollection.prototype.add = function (annotation) {\n // this.SetPrint(annotation);\n this.doAdd(annotation);\n };\n /**\n * `Adds` a Annotation to collection.\n * @private\n */\n /* tslint:disable */\n PdfAnnotationCollection.prototype.doAdd = function (annotation) {\n if (typeof annotation.destination !== 'undefined') {\n var layout = new PdfStringLayouter();\n var layoutResult = layout.layout(annotation.text, annotation.font, annotation.stringFormat, new SizeF((annotation.bounds.width), 0), false, new SizeF(0, 0));\n var lastPosition = annotation.bounds.y;\n if (layoutResult.lines.length === 1) {\n var size = annotation.font.measureString(layoutResult.lines[0].text);\n annotation.bounds = new RectangleF(new PointF(annotation.bounds.x, lastPosition), size);\n annotation.text = layoutResult.lines[0].text;\n //Draw Annotation Text.\n this.page.graphics.drawString(annotation.text, annotation.font, null, annotation.brush, annotation.bounds.x, annotation.bounds.y, annotation.bounds.width, annotation.bounds.height, null);\n //Add annotation to dictionary.\n annotation.setPage(this.page);\n this.setColor(annotation);\n this.internalAnnotations.add(new PdfReferenceHolder(annotation));\n this.lists.push(annotation);\n }\n else {\n for (var i = 0; i < layoutResult.lines.length; i++) {\n var size = annotation.font.measureString(layoutResult.lines[i].text);\n if (i === 0) {\n annotation.bounds = new RectangleF(annotation.bounds.x, lastPosition, size.width, size.height);\n annotation.text = layoutResult.lines[i].text;\n //Draw Annotation Text.\n this.page.graphics.drawString(annotation.text, annotation.font, null, annotation.brush, annotation.bounds.x, lastPosition, size.width, size.height, null);\n //Add annotation to dictionary.\n annotation.setPage(this.page);\n this.setColor(annotation);\n this.internalAnnotations.add(new PdfReferenceHolder(annotation));\n this.lists.push(annotation);\n //Update y for drawing next line of the text.\n lastPosition += annotation.bounds.height;\n }\n else {\n var annot = annotation.clone();\n annot.bounds = new RectangleF(new PointF(annotation.bounds.x, lastPosition), size);\n annot.text = layoutResult.lines[i].text;\n //Draw Annotation Text.\n this.page.graphics.drawString(annot.text, annot.font, null, annot.brush, annot.bounds.x, annot.bounds.y, annot.bounds.width, annot.bounds.height, null);\n //Add annotation to dictionary.\n annot.setPage(this.page);\n this.setColor(annot);\n this.internalAnnotations.add(new PdfReferenceHolder(annot));\n this.lists.push(annot);\n //Update y for drawing next line of the text.\n lastPosition += annot.bounds.height;\n }\n }\n }\n }\n else {\n annotation.setPage(this.page);\n this.internalAnnotations.add(new PdfReferenceHolder(annotation));\n return this.lists.push(annotation);\n }\n };\n /* tslint:enable */\n /**\n * `Set a color of an annotation`.\n * @private\n */\n PdfAnnotationCollection.prototype.setColor = function (annotation) {\n var cs = PdfColorSpace.Rgb;\n var colours = annotation.color.toArray(cs);\n annotation.dictionary.items.setValue(this.dictionaryProperties.c, colours);\n };\n Object.defineProperty(PdfAnnotationCollection.prototype, \"element\", {\n // IPdfWrapper Members\n /**\n * Gets the `Element` representing this object.\n * @private\n */\n get: function () {\n return this.internalAnnotations;\n },\n enumerable: true,\n configurable: true\n });\n return PdfAnnotationCollection;\n}());\nexport { PdfAnnotationCollection };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { PdfPageBase } from './pdf-page-base';\nimport { PdfDictionary, SaveTemplateEventHandler } from './../primitives/pdf-dictionary';\nimport { PdfName } from './../primitives/pdf-name';\nimport { PdfReferenceHolder } from './../primitives/pdf-reference';\nimport { SizeF } from './../drawing/pdf-drawing';\nimport { PdfAnnotationCollection } from './../annotations/annotation-collection';\nimport { PdfPageLayer } from './pdf-page-layer';\n/**\n * Provides methods and properties to create pages and its elements.\n * `PdfPage` class inherited from the `PdfPageBase` class.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * //\n * // add a new page to the document\n * let page1 : PdfPage = document.pages.add();\n * //\n * // set the font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // create black brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(0, 0));\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\nvar PdfPage = /** @class */ (function (_super) {\n __extends(PdfPage, _super);\n //constructors\n /**\n * Initialize the new instance for `PdfPage` class.\n * @private\n */\n function PdfPage() {\n var _this = _super.call(this, new PdfDictionary()) || this;\n /**\n * Stores the instance of `PdfAnnotationCollection` class.\n * @hidden\n * @default null\n * @private\n */\n _this.annotationCollection = null;\n /**\n * Stores the instance of `PageBeginSave` event for Page Number Field.\n * @default null\n * @private\n */\n _this.beginSave = null;\n _this.initialize();\n return _this;\n }\n Object.defineProperty(PdfPage.prototype, \"document\", {\n //Properties\n /**\n * Gets current `document`.\n * @private\n */\n get: function () {\n if (this.section !== null && this.section.parent !== null) {\n return this.section.parent.document;\n }\n else {\n return null;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPage.prototype, \"graphics\", {\n /**\n * Get the current `graphics`.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a new page to the document\n * let page1 : PdfPage = document.pages.add();\n * //\n * // get graphics\n * let graphics : PdfGraphics = page1.graphics;\n * //\n * // set the font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // create black brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * // draw the text\n * graphics.drawString('Hello World', font, blackBrush, new PointF(0, 0));\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n var result = this.defaultLayer.graphics;\n result.currentPage = this;\n return result;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPage.prototype, \"crossTable\", {\n /**\n * Gets the `cross table`.\n * @private\n */\n get: function () {\n if (this.section === null) {\n throw new Error('PdfDocumentException : Page is not created');\n }\n return this.section.parent === null ? this.section.parentDocument.crossTable : this.section.parent.document.crossTable;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPage.prototype, \"size\", {\n /**\n * Gets the size of the PDF page- Read only.\n * @public\n */\n get: function () {\n return this.section.pageSettings.size;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPage.prototype, \"origin\", {\n /**\n * Gets the `origin` of the page.\n * @private\n */\n get: function () {\n return this.section.pageSettings.origin;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPage.prototype, \"annotations\", {\n /**\n * Gets a collection of the `annotations` of the page- Read only.\n * @private\n */\n get: function () {\n if (this.annotationCollection == null) {\n this.annotationCollection = new PdfAnnotationCollection(this);\n // if (!this.Dictionary.ContainsKey(this.dictionaryProperties.annots)) {\n this.dictionary.items.setValue(this.dictionaryProperties.annots, this.annotationCollection.element);\n // }\n this.annotationCollection.annotations = this.dictionary.items.getValue(this.dictionaryProperties.annots);\n }\n return this.annotationCollection;\n },\n enumerable: true,\n configurable: true\n });\n //Implementation\n /**\n * `Initializes` a page.\n * @private\n */\n PdfPage.prototype.initialize = function () {\n this.dictionary.items.setValue(this.dictionaryProperties.type, new PdfName('Page'));\n this.dictionary.pageBeginDrawTemplate = new SaveTemplateEventHandler(this);\n };\n /**\n * Sets parent `section` to the page.\n * @private\n */\n PdfPage.prototype.setSection = function (section) {\n this.section = section;\n this.dictionary.items.setValue(this.dictionaryProperties.parent, new PdfReferenceHolder(section));\n };\n /**\n * `Resets the progress`.\n * @private\n */\n PdfPage.prototype.resetProgress = function () {\n this.isProgressOn = false;\n };\n /**\n * Get the page size reduced by page margins and page template dimensions.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // create new standard font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * //\n * // set the specified point using `getClientSize` method\n * let point : PointF = new PointF(page1.getClientSize().width - 200, page1.getClientSize().height - 200);\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, point);\n * //\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n PdfPage.prototype.getClientSize = function () {\n var returnValue = this.section.getActualBounds(this, true);\n return new SizeF(returnValue.width, returnValue.height);\n };\n /**\n * Helper method to retrive the instance of `PageBeginSave` event for header and footer elements.\n * @private\n */\n PdfPage.prototype.pageBeginSave = function () {\n var doc = this.document;\n if (typeof doc !== undefined && doc != null) {\n this.drawPageTemplates(doc);\n }\n if (this.beginSave != null && typeof this.beginSave !== 'undefined') {\n this.beginSave(this);\n }\n };\n /**\n * Helper method to draw template elements.\n * @private\n */\n PdfPage.prototype.drawPageTemplates = function (document) {\n // Draw Background templates.\n var hasBackTemplates = this.section.containsTemplates(document, this, false);\n if (hasBackTemplates) {\n var backLayer = new PdfPageLayer(this, false);\n this.layers.insert(0, backLayer);\n this.section.drawTemplates(this, backLayer, document, false);\n if (backLayer.graphics !== null && typeof backLayer.graphics !== 'undefined') {\n for (var i = 0; i < backLayer.graphics.automaticFields.automaticFields.length; i++) {\n var fieldInfo = backLayer.graphics.automaticFields.automaticFields[i];\n fieldInfo.field.performDraw(backLayer.graphics, fieldInfo.location, fieldInfo.scalingX, fieldInfo.scalingY);\n }\n }\n }\n // Draw Foreground templates.\n var hasFrontTemplates = this.section.containsTemplates(document, this, true);\n if (hasFrontTemplates) {\n var frontLayer = new PdfPageLayer(this, false);\n this.layers.add(frontLayer);\n this.section.drawTemplates(this, frontLayer, document, true);\n }\n };\n return PdfPage;\n}(PdfPageBase));\nexport { PdfPage };\n","/**\n * Provides data for `PageAddedEventHandler` event.\n * This event raises when adding the new PDF page to the PDF document.\n */\nvar PageAddedEventArgs = /** @class */ (function () {\n function PageAddedEventArgs(page) {\n if (typeof page !== 'undefined') {\n this.pdfPage = page;\n }\n else {\n this.pdfPage = null;\n }\n }\n Object.defineProperty(PageAddedEventArgs.prototype, \"page\", {\n /**\n * Gets the `newly added page`.\n * @private\n */\n get: function () {\n return this.pdfPage;\n },\n enumerable: true,\n configurable: true\n });\n return PageAddedEventArgs;\n}());\nexport { PageAddedEventArgs };\n","/**\n * Represents the `collection of pages in a section`.\n * @private\n */\nvar PdfSectionPageCollection = /** @class */ (function () {\n // Constructors\n /**\n * Initializes a new instance of the `PdfSectionPageCollection` class.\n * @private\n */\n function PdfSectionPageCollection(section) {\n // Fields\n /**\n * @hidden\n * @private\n */\n this.pdfSection = null;\n if (section == null) {\n throw Error('ArgumentNullException(\"section\")');\n }\n this.section = section;\n }\n Object.defineProperty(PdfSectionPageCollection.prototype, \"section\", {\n // Properties\n /**\n * Gets the `PdfPage` at the specified index.\n * @private\n */\n get: function () {\n return this.pdfSection;\n },\n set: function (value) {\n this.pdfSection = value;\n },\n enumerable: true,\n configurable: true\n });\n // Public Methods\n /**\n * `Determines` whether the specified page is within the collection.\n * @private\n */\n PdfSectionPageCollection.prototype.contains = function (page) {\n return this.section.contains(page);\n };\n /**\n * `Removes` the specified page from collection.\n * @private\n */\n PdfSectionPageCollection.prototype.remove = function (page) {\n this.section.remove(page);\n };\n /**\n * `Adds` a new page from collection.\n * @private\n */\n PdfSectionPageCollection.prototype.add = function () {\n return this.section.add();\n };\n return PdfSectionPageCollection;\n}());\nexport { PdfSectionPageCollection };\n","import { TemplateType } from './../pages/enum';\n// import { PdfStampCollection } from `./../Pages/PdfStampCollection`;\n/**\n * `PdfDocumentTemplate` class encapsulates a page template for all the pages in the document.\n * @private\n */\nvar PdfDocumentTemplate = /** @class */ (function () {\n // Constructors\n /**\n * Initializes a new instance of the `PdfDocumentTemplate` class.\n * @public\n */\n function PdfDocumentTemplate() {\n //\n }\n Object.defineProperty(PdfDocumentTemplate.prototype, \"left\", {\n // private m_stamps : PdfStampCollection;\n // Properties\n /**\n * `Left` page template object.\n * @public\n */\n get: function () {\n return this.leftTemplate;\n },\n set: function (value) {\n this.leftTemplate = this.checkElement(value, TemplateType.Left);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentTemplate.prototype, \"top\", {\n /**\n * `Top` page template object.\n * @public\n */\n get: function () {\n return this.topTemplate;\n },\n set: function (value) {\n this.topTemplate = this.checkElement(value, TemplateType.Top);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentTemplate.prototype, \"right\", {\n /**\n * `Right` page template object.\n * @public\n */\n get: function () {\n return this.rightTemplate;\n },\n set: function (value) {\n this.rightTemplate = this.checkElement(value, TemplateType.Right);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentTemplate.prototype, \"bottom\", {\n /**\n * `Bottom` page template object.\n * @public\n */\n get: function () {\n return this.bottomTemplate;\n },\n set: function (value) {\n this.bottomTemplate = this.checkElement(value, TemplateType.Bottom);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentTemplate.prototype, \"EvenLeft\", {\n /**\n * `EvenLeft` page template object.\n * @public\n */\n get: function () {\n return this.evenLeft;\n },\n set: function (value) {\n this.evenLeft = this.checkElement(value, TemplateType.Left);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentTemplate.prototype, \"EvenTop\", {\n /**\n * `EvenTop` page template object.\n * @public\n */\n get: function () {\n return this.evenTop;\n },\n set: function (value) {\n this.evenTop = this.checkElement(value, TemplateType.Top);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentTemplate.prototype, \"EvenRight\", {\n /**\n * `EvenRight` page template object.\n * @public\n */\n get: function () {\n return this.evenRight;\n },\n set: function (value) {\n this.evenRight = this.checkElement(value, TemplateType.Right);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentTemplate.prototype, \"EvenBottom\", {\n /**\n * `EvenBottom` page template object.\n * @public\n */\n get: function () {\n return this.evenBottom;\n },\n set: function (value) {\n this.evenBottom = this.checkElement(value, TemplateType.Bottom);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentTemplate.prototype, \"OddLeft\", {\n /**\n * `OddLeft` page template object.\n * @public\n */\n get: function () {\n return this.oddLeft;\n },\n set: function (value) {\n this.oddLeft = this.checkElement(value, TemplateType.Left);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentTemplate.prototype, \"OddTop\", {\n /**\n * `OddTop` page template object.\n * @public\n */\n get: function () {\n return this.oddTop;\n },\n set: function (value) {\n this.oddTop = this.checkElement(value, TemplateType.Top);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentTemplate.prototype, \"OddRight\", {\n /**\n * `OddRight` page template object.\n * @public\n */\n get: function () {\n return this.oddRight;\n },\n set: function (value) {\n this.oddRight = this.checkElement(value, TemplateType.Right);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentTemplate.prototype, \"OddBottom\", {\n /**\n * `OddBottom` page template object.\n * @public\n */\n get: function () {\n return this.oddBottom;\n },\n set: function (value) {\n this.oddBottom = this.checkElement(value, TemplateType.Bottom);\n },\n enumerable: true,\n configurable: true\n });\n // Implementation\n /**\n * Returns `left` template.\n * @public\n */\n PdfDocumentTemplate.prototype.getLeft = function (page) {\n if (page == null) {\n throw new Error('ArgumentNullException:page');\n }\n var template = null;\n // if (page.Document.Pages != null) {\n var even = this.isEven(page);\n if (even) {\n template = (this.EvenLeft != null) ? this.EvenLeft : this.left;\n }\n else {\n template = (this.OddLeft != null) ? this.OddLeft : this.left;\n }\n // }\n return template;\n };\n /**\n * Returns `top` template.\n * @public\n */\n PdfDocumentTemplate.prototype.getTop = function (page) {\n if (page == null) {\n throw new Error('ArgumentNullException:page');\n }\n var template = null;\n // if (page.Document.Pages != null) {\n var even = this.isEven(page);\n if (even) {\n template = (this.EvenTop != null) ? this.EvenTop : this.top;\n }\n else {\n template = (this.OddTop != null) ? this.OddTop : this.top;\n }\n // }\n return template;\n };\n /**\n * Returns `right` template.\n * @public\n */\n PdfDocumentTemplate.prototype.getRight = function (page) {\n if (page == null) {\n throw new Error('ArgumentNullException:page');\n }\n var template = null;\n // if (page.Document.Pages != null) {\n var even = this.isEven(page);\n if (even) {\n template = (this.EvenRight != null) ? this.EvenRight : this.right;\n }\n else {\n template = (this.OddRight != null) ? this.OddRight : this.right;\n }\n // }\n return template;\n };\n /**\n * Returns `bottom` template.\n * @public\n */\n PdfDocumentTemplate.prototype.getBottom = function (page) {\n if (page == null) {\n throw new Error('ArgumentNullException:page');\n }\n var template = null;\n // if (page.Document.Pages != null) {\n var even = this.isEven(page);\n if (even) {\n template = (this.EvenBottom != null) ? this.EvenBottom : this.bottom;\n }\n else {\n template = (this.OddBottom != null) ? this.OddBottom : this.bottom;\n }\n // }\n return template;\n };\n /**\n * Checks whether the page `is even`.\n * @private\n */\n PdfDocumentTemplate.prototype.isEven = function (page) {\n var pages = page.section.document.pages;\n var index = 0;\n if (pages.pageCollectionIndex.containsKey(page)) {\n index = pages.pageCollectionIndex.getValue(page) + 1;\n }\n else {\n index = pages.indexOf(page) + 1;\n }\n var even = ((index % 2) === 0);\n return even;\n };\n /**\n * Checks a `template element`.\n * @private\n */\n PdfDocumentTemplate.prototype.checkElement = function (templateElement, type) {\n if (templateElement != null) {\n if ((typeof templateElement.type !== 'undefined') && (templateElement.type !== TemplateType.None)) {\n throw new Error('NotSupportedException:Can not reassign the template element. Please, create new one.');\n }\n templateElement.type = type;\n }\n return templateElement;\n };\n return PdfDocumentTemplate;\n}());\nexport { PdfDocumentTemplate };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * PdfSectionTemplate.ts class for EJ2-PDF\n */\nimport { PdfDocumentTemplate } from './../document/pdf-document-template';\n/**\n * Represents a `page template` for all the pages in the section.\n */\nvar PdfSectionTemplate = /** @class */ (function (_super) {\n __extends(PdfSectionTemplate, _super);\n // Constructors\n /**\n * `Creates a new object`.\n * @private\n */\n function PdfSectionTemplate() {\n var _this = _super.call(this) || this;\n _this.leftValue = _this.topValue = _this.rightValue = _this.bottomValue = _this.stampValue = true;\n return _this;\n }\n Object.defineProperty(PdfSectionTemplate.prototype, \"applyDocumentLeftTemplate\", {\n // Properties\n /**\n * Gets or sets value indicating whether parent `Left page template should be used or not`.\n * @private\n */\n get: function () {\n return this.leftValue;\n },\n set: function (value) {\n this.leftValue = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSectionTemplate.prototype, \"applyDocumentTopTemplate\", {\n /**\n * Gets or sets value indicating whether parent `Top page template should be used or not`.\n * @private\n */\n get: function () {\n return this.topValue;\n },\n set: function (value) {\n this.topValue = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSectionTemplate.prototype, \"applyDocumentRightTemplate\", {\n /**\n * Gets or sets value indicating whether parent `Right page template should be used or not`.\n * @private\n */\n get: function () {\n return this.rightValue;\n },\n set: function (value) {\n this.rightValue = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSectionTemplate.prototype, \"applyDocumentBottomTemplate\", {\n /**\n * Gets or sets value indicating whether parent `Bottom page template should be used or not`.\n * @private\n */\n get: function () {\n return this.bottomValue;\n },\n set: function (value) {\n this.bottomValue = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSectionTemplate.prototype, \"applyDocumentStamps\", {\n /**\n * Gets or sets value indicating whether the `stamp value` is true or not.\n * @private\n */\n get: function () {\n return this.stampValue;\n },\n set: function (value) {\n this.stampValue = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfSectionTemplate;\n}(PdfDocumentTemplate));\nexport { PdfSectionTemplate };\n","import { PdfPage } from './pdf-page';\nimport { PageAddedEventArgs } from './page-added-event-arguments';\nimport { PdfReferenceHolder } from './../primitives/pdf-reference';\nimport { PdfArray } from './../primitives/pdf-array';\nimport { PdfNumber } from './../primitives/pdf-number';\nimport { PdfName } from './../primitives/pdf-name';\nimport { PdfDictionary } from './../primitives/pdf-dictionary';\nimport { SaveSectionEventHandler } from './../primitives/pdf-dictionary';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\nimport { PdfSectionCollection } from './pdf-section-collection';\nimport { PdfSectionPageCollection } from './pdf-section-page-collection';\nimport { RectangleF } from './../drawing/pdf-drawing';\nimport { PdfSectionTemplate } from './pdf-section-templates';\n/**\n * Represents a `section` entity. A section it's a set of the pages with similar page settings.\n */\nvar PdfSection = /** @class */ (function () {\n function PdfSection(document, pageSettings) {\n //Fields\n //public PageAdded() : PageAddedEventArgs.PageAddedEventHandler = new PageAddedEventArgs.PageAddedEventHandler(Object,args)\n /**\n * @hidden\n * @private\n */\n this.pageAdded = new PageAddedEventArgs();\n /**\n * @hidden\n * @private\n */\n this.pdfPages = [];\n /**\n * @hidden\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n if (typeof pageSettings === 'undefined') {\n this.constructor(document, document.pageSettings);\n }\n else {\n this.pdfDocument = document;\n this.settings = pageSettings.clone();\n this.initialSettings = this.settings.clone();\n this.initialize();\n }\n }\n Object.defineProperty(PdfSection.prototype, \"parent\", {\n //Property\n /**\n * Gets or sets the `parent`.\n * @private\n */\n get: function () {\n return this.sectionCollection;\n },\n set: function (value) {\n this.sectionCollection = value;\n this.section.items.setValue(this.dictionaryProperties.parent, new PdfReferenceHolder(value));\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSection.prototype, \"parentDocument\", {\n /**\n * Gets the `parent document`.\n * @private\n */\n get: function () {\n return this.pdfDocument;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSection.prototype, \"pageSettings\", {\n /**\n * Gets or sets the `page settings` of the section.\n * @private\n */\n get: function () {\n return this.settings;\n },\n set: function (value) {\n if (value != null) {\n this.settings = value;\n }\n else {\n throw Error('Value can not be null.');\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSection.prototype, \"element\", {\n /**\n * Gets the wrapped `element`.\n * @private\n */\n get: function () {\n return this.section;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSection.prototype, \"count\", {\n /**\n * Gets the `count` of the pages in the section.\n * @private\n */\n get: function () {\n return this.pagesReferences.count;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSection.prototype, \"template\", {\n /**\n * Gets or sets a `template` for the pages in the section.\n * @private\n */\n get: function () {\n if (this.pageTemplate == null) {\n this.pageTemplate = new PdfSectionTemplate();\n }\n return this.pageTemplate;\n },\n set: function (value) {\n this.pageTemplate = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSection.prototype, \"document\", {\n /**\n * Gets the `document`.\n * @private\n */\n get: function () {\n return this.sectionCollection.document;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSection.prototype, \"pages\", {\n /**\n * Gets the collection of `pages` in a section (Read only)\n * @private\n */\n get: function () {\n if (this.pagesCollection == null || typeof this.pagesCollection === 'undefined') {\n this.pagesCollection = new PdfSectionPageCollection(this);\n }\n return this.pagesCollection;\n },\n enumerable: true,\n configurable: true\n });\n //methods\n /**\n * `Return the page collection` of current section.\n * @private\n */\n PdfSection.prototype.getPages = function () {\n return this.pdfPages;\n };\n /**\n * `Translates` point into native coordinates of the page.\n * @private\n */\n PdfSection.prototype.pointToNativePdf = function (page, point) {\n var bounds = this.getActualBounds(page, true);\n point.x += bounds.x;\n point.y = this.pageSettings.height - (point.y);\n return point;\n };\n /**\n * Sets the page setting of the current section.\n * @public\n * @param settings Instance of `PdfPageSettings`\n */\n PdfSection.prototype.setPageSettings = function (settings) {\n this.settings = settings;\n this.state.orientation = settings.orientation;\n this.state.rotate = settings.rotate;\n this.state.size = settings.size;\n this.state.origin = settings.origin;\n };\n /**\n * `Initializes` the object.\n * @private\n */\n PdfSection.prototype.initialize = function () {\n this.pagesReferences = new PdfArray();\n this.section = new PdfDictionary();\n this.state = new PageSettingsState(this.pdfDocument);\n this.section.sectionBeginSave = new SaveSectionEventHandler(this, this.state);\n this.pageCount = new PdfNumber(0);\n this.section.items.setValue(this.dictionaryProperties.count, this.pageCount);\n this.section.items.setValue(this.dictionaryProperties.type, new PdfName(this.dictionaryProperties.pages));\n this.section.items.setValue(this.dictionaryProperties.kids, this.pagesReferences);\n };\n /**\n * Checks whether any template should be printed on this layer.\n * @private\n * @param document The parent document.\n * @param page The parent page.\n * @param foreground Layer z-order.\n * @returns True - if some content should be printed on the layer, False otherwise.\n */\n PdfSection.prototype.containsTemplates = function (document, page, foreground) {\n var documentHeaders = this.getDocumentTemplates(document, page, true, foreground);\n var documentTemplates = this.getDocumentTemplates(document, page, false, foreground);\n var contains = (documentHeaders.length > 0 || documentTemplates.length > 0);\n return contains;\n };\n /**\n * Returns array of the document templates.\n * @private\n * @param document The parent document.\n * @param page The parent page.\n * @param headers If true - return headers/footers, if false - return simple templates.\n * @param foreground If true - return foreground templates, if false - return background templates.\n * @returns Returns array of the document templates.\n */\n /* tslint:disable */\n PdfSection.prototype.getDocumentTemplates = function (document, page, headers, foreground) {\n var templates = [];\n if (headers) {\n if (this.template.applyDocumentTopTemplate && document.template.getTop(page) != null) {\n if ((!(document.template.getTop(page).foreground || foreground)) || (document.template.getTop(page).foreground && foreground)) {\n templates.push(document.template.getTop(page));\n }\n }\n if (this.template.applyDocumentBottomTemplate && document.template.getBottom(page) != null) {\n if ((!(document.template.getBottom(page).foreground || foreground)) || (document.template.getBottom(page).foreground && foreground)) {\n templates.push(document.template.getBottom(page));\n }\n }\n if (this.template.applyDocumentLeftTemplate && document.template.getLeft(page) != null) {\n if ((!(document.template.getLeft(page).foreground || foreground)) || (document.template.getLeft(page).foreground && foreground)) {\n templates.push(document.template.getLeft(page));\n }\n }\n if (this.template.applyDocumentRightTemplate && document.template.getRight(page) != null) {\n if ((!(document.template.getRight(page).foreground || foreground)) || (document.template.getRight(page).foreground && foreground)) {\n templates.push(document.template.getRight(page));\n }\n }\n }\n return templates;\n };\n /* tslint:enable */\n /**\n * `Adds` the specified page.\n * @private\n */\n PdfSection.prototype.add = function (page) {\n if (typeof page === 'undefined') {\n var page_1 = new PdfPage();\n this.add(page_1);\n return page_1;\n }\n else {\n var r = this.checkPresence(page);\n this.pdfPages.push(page);\n this.pagesReferences.add(r);\n page.setSection(this);\n page.resetProgress();\n this.pageAddedMethod(page);\n }\n };\n /**\n * `Checks the presence`.\n * @private\n */\n PdfSection.prototype.checkPresence = function (page) {\n var rh = new PdfReferenceHolder(page);\n var contains = false;\n var sc = this.parent;\n for (var index = 0; index < sc.section.length; index++) {\n var section = sc.section[index];\n contains = contains || section.contains(page);\n }\n return rh;\n };\n /**\n * `Determines` whether the page in within the section.\n * @private\n */\n PdfSection.prototype.contains = function (page) {\n var index = this.indexOf(page);\n return (0 <= index);\n };\n /**\n * Get the `index of` the page.\n * @private\n */\n PdfSection.prototype.indexOf = function (page) {\n for (var index = 0; index < this.pdfPages.length; index++) {\n if (this.pdfPages[index] === page) {\n return this.pdfPages.indexOf(page);\n }\n }\n var r = new PdfReferenceHolder(page);\n return this.pagesReferences.indexOf(r);\n };\n /**\n * Call two event's methods.\n * @hidden\n * @private\n */\n PdfSection.prototype.pageAddedMethod = function (page) {\n //Create event's arguments\n var args = new PageAddedEventArgs(page);\n this.onPageAdded(args);\n var parent = this.parent;\n parent.document.pages.onPageAdded(args);\n this.pageCount.intValue = this.count;\n };\n /**\n * Called when the page has been added.\n * @hidden\n * @private\n */\n PdfSection.prototype.onPageAdded = function (args) {\n //\n };\n PdfSection.prototype.getActualBounds = function (arg1, arg2, arg3) {\n if (arg1 instanceof PdfPage && typeof arg2 === 'boolean') {\n var result = void 0;\n var document_1 = this.parent.document;\n result = this.getActualBounds(document_1, arg1, arg2);\n return result;\n }\n else {\n arg1 = arg1;\n arg2 = arg2;\n arg3 = arg3;\n var bounds = new RectangleF(0, 0, 0, 0);\n bounds.height = (arg3) ? this.pageSettings.size.height : this.pageSettings.getActualSize().height;\n bounds.width = (arg3) ? this.pageSettings.size.width : this.pageSettings.getActualSize().width;\n var left = this.getLeftIndentWidth(arg1, arg2, arg3);\n var top_1 = this.getTopIndentHeight(arg1, arg2, arg3);\n var right = this.getRightIndentWidth(arg1, arg2, arg3);\n var bottom = this.getBottomIndentHeight(arg1, arg2, arg3);\n bounds.x += left;\n bounds.y += top_1;\n bounds.width -= (left + right);\n bounds.height -= (top_1 + bottom);\n return bounds;\n }\n };\n /**\n * Calculates width of the `left indent`.\n * @private\n */\n PdfSection.prototype.getLeftIndentWidth = function (document, page, includeMargins) {\n if (document == null) {\n throw new Error('ArgumentNullException:document');\n }\n if (page == null) {\n throw new Error('ArgumentNullException:page');\n }\n var value = (includeMargins) ? this.pageSettings.margins.left : 0;\n var templateWidth = (this.template.getLeft(page) != null) ? this.template.getLeft(page).width : 0;\n var docTemplateWidth = (document.template.getLeft(page) != null) ? document.template.getLeft(page).width : 0;\n value += (this.template.applyDocumentLeftTemplate) ? Math.max(templateWidth, docTemplateWidth) : templateWidth;\n return value;\n };\n /**\n * Calculates `Height` of the top indent.\n * @private\n */\n PdfSection.prototype.getTopIndentHeight = function (document, page, includeMargins) {\n if (document == null) {\n throw new Error('ArgumentNullException:document');\n }\n if (page == null) {\n throw new Error('ArgumentNullException:page');\n }\n var value = (includeMargins) ? this.pageSettings.margins.top : 0;\n var templateHeight = (this.template.getTop(page) != null) ? this.template.getTop(page).height : 0;\n var docTemplateHeight = (document.template.getTop(page) != null) ? document.template.getTop(page).height : 0;\n value += (this.template.applyDocumentTopTemplate) ? Math.max(templateHeight, docTemplateHeight) : templateHeight;\n return value;\n };\n /**\n * Calculates `width` of the right indent.\n * @private\n */\n PdfSection.prototype.getRightIndentWidth = function (document, page, includeMargins) {\n if (document == null) {\n throw new Error('ArgumentNullException:document');\n }\n if (page == null) {\n throw new Error('ArgumentNullException:page');\n }\n var value = (includeMargins) ? this.pageSettings.margins.right : 0;\n var templateWidth = (this.template.getRight(page) != null) ? this.template.getRight(page).width : 0;\n var docTemplateWidth = (document.template.getRight(page) != null) ? document.template.getRight(page).width : 0;\n value += (this.template.applyDocumentRightTemplate) ? Math.max(templateWidth, docTemplateWidth) : templateWidth;\n return value;\n };\n /**\n * Calculates `Height` of the bottom indent.\n * @private\n */\n PdfSection.prototype.getBottomIndentHeight = function (document, page, includeMargins) {\n if (document == null) {\n throw new Error('ArgumentNullException:document');\n }\n if (page == null) {\n throw new Error('ArgumentNullException:page');\n }\n var value = (includeMargins) ? this.pageSettings.margins.bottom : 0;\n var templateHeight = (this.template.getBottom(page) != null) ? this.template.getBottom(page).height : 0;\n var docTemplateHeight = (document.template.getBottom(page) != null) ? document.template.getBottom(page).height : 0;\n value += (this.template.applyDocumentBottomTemplate) ? Math.max(templateHeight, docTemplateHeight) : templateHeight;\n return value;\n };\n /**\n * `Removes` the page from the section.\n * @private\n */\n PdfSection.prototype.remove = function (page) {\n if (page == null) {\n throw Error('ArgumentNullException(\"page\")');\n }\n var index = this.pdfPages.indexOf(page);\n this.pagesReferences.removeAt(index);\n var temproaryPages = [];\n for (var j = 0; j < index; j++) {\n temproaryPages.push(this.pdfPages[j]);\n }\n for (var j = index + 1; j < this.pdfPages.length; j++) {\n temproaryPages.push(this.pdfPages[j]);\n }\n this.pdfPages = temproaryPages;\n };\n /**\n * In fills dictionary by the data from `Page settings`.\n * @private\n */\n PdfSection.prototype.applyPageSettings = function (container, parentSettings, state) {\n var bounds = new RectangleF(state.origin, state.size);\n container.items.setValue(this.dictionaryProperties.mediaBox, PdfArray.fromRectangle(bounds));\n var rotate = 0;\n rotate = PdfSectionCollection.rotateFactor * state.rotate;\n var angle = new PdfNumber(rotate);\n container.items.setValue(this.dictionaryProperties.rotate, angle);\n };\n /**\n * Catches the Save event of the dictionary.\n * @hidden\n * @private\n */\n PdfSection.prototype.beginSave = function (state, writer) {\n var doc = writer.document;\n this.applyPageSettings(this.section, doc.pageSettings, state);\n };\n /**\n * Draws page templates on the page.\n * @private\n */\n PdfSection.prototype.drawTemplates = function (page, layer, document, foreground) {\n var documentHeaders = this.getDocumentTemplates(document, page, true, foreground);\n var documentTemplates = this.getDocumentTemplates(document, page, false, foreground);\n if (foreground) {\n this.drawTemplatesHelper(layer, document, documentHeaders);\n this.drawTemplatesHelper(layer, document, documentTemplates);\n }\n else {\n this.drawTemplatesHelper(layer, document, documentHeaders);\n this.drawTemplatesHelper(layer, document, documentTemplates);\n }\n };\n /**\n * Draws page templates on the page.\n * @private\n */\n PdfSection.prototype.drawTemplatesHelper = function (layer, document, templates) {\n if (templates != null && templates.length > 0) {\n var len = templates.length;\n for (var i = 0; i < len; i++) {\n var template = templates[i];\n template.draw(layer, document);\n }\n }\n };\n return PdfSection;\n}());\nexport { PdfSection };\nvar PageSettingsState = /** @class */ (function () {\n //Public Constructor\n /**\n * New instance to store the `PageSettings`.\n * @private\n */\n function PageSettingsState(document) {\n this.pageOrientation = document.pageSettings.orientation;\n this.pageRotate = document.pageSettings.rotate;\n this.pageSize = document.pageSettings.size;\n this.pageOrigin = document.pageSettings.origin;\n }\n Object.defineProperty(PageSettingsState.prototype, \"orientation\", {\n //public Properties\n /**\n * @hidden\n * @private\n */\n get: function () {\n return this.pageOrientation;\n },\n set: function (value) {\n this.pageOrientation = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PageSettingsState.prototype, \"rotate\", {\n /**\n * @hidden\n * @private\n */\n get: function () {\n return this.pageRotate;\n },\n set: function (value) {\n this.pageRotate = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PageSettingsState.prototype, \"size\", {\n /**\n * @hidden\n * @private\n */\n get: function () {\n return this.pageSize;\n },\n set: function (value) {\n this.pageSize = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PageSettingsState.prototype, \"origin\", {\n /**\n * @hidden\n * @private\n */\n get: function () {\n return this.pageOrigin;\n },\n set: function (value) {\n this.pageOrigin = value;\n },\n enumerable: true,\n configurable: true\n });\n return PageSettingsState;\n}());\nexport { PageSettingsState };\n","import { PdfNumber } from './../primitives/pdf-number';\nimport { PdfName } from './../primitives/pdf-name';\nimport { PdfArray } from './../primitives/pdf-array';\nimport { PdfDictionary, SaveSectionCollectionEventHandler } from './../primitives/pdf-dictionary';\nimport { PdfReferenceHolder } from './../primitives/pdf-reference';\nimport { RectangleF, PointF } from './../drawing/pdf-drawing';\nimport { PdfSection } from './pdf-section';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\n/**\n * Represents the `collection of the sections`.\n * @private\n */\nvar PdfSectionCollection = /** @class */ (function () {\n //constructor\n /**\n * Initializes a new instance of the `PdfSectionCollection` class.\n * @private\n */\n function PdfSectionCollection(document) {\n /**\n * @hidden\n * @private\n */\n this.sections = [];\n /**\n * @hidden\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n // if (document === null) {\n // throw new Error('ArgumentNullException : document');\n // }\n this.pdfDocument = document.clone();\n this.initialize();\n }\n Object.defineProperty(PdfSectionCollection.prototype, \"section\", {\n //Properties\n /**\n * Gets the `Section` collection.\n */\n get: function () {\n return this.sections;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSectionCollection.prototype, \"document\", {\n /**\n * Gets a parent `document`.\n * @private\n */\n get: function () {\n return this.pdfDocument;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSectionCollection.prototype, \"count\", {\n /**\n * Gets the `number of sections` in a document.\n * @private\n */\n get: function () {\n return this.sections.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSectionCollection.prototype, \"element\", {\n /**\n * Gets the wrapped `element`.\n * @private\n */\n get: function () {\n return this.pages;\n },\n enumerable: true,\n configurable: true\n });\n //Methods\n /**\n * `Initializes the object`.\n * @private\n */\n PdfSectionCollection.prototype.initialize = function () {\n this.sectionCount = new PdfNumber(0);\n this.sectionCollection = new PdfArray();\n this.pages = new PdfDictionary();\n this.pages.beginSave = new SaveSectionCollectionEventHandler(this);\n this.pages.items.setValue(this.dictionaryProperties.type, new PdfName('Pages'));\n this.pages.items.setValue(this.dictionaryProperties.kids, this.sectionCollection);\n this.pages.items.setValue(this.dictionaryProperties.count, this.sectionCount);\n this.pages.items.setValue(this.dictionaryProperties.resources, new PdfDictionary());\n this.setPageSettings(this.pages, this.pdfDocument.pageSettings);\n };\n /**\n * Initializes a new instance of the `PdfSectionCollection` class.\n * @private\n */\n PdfSectionCollection.prototype.pdfSectionCollection = function (index) {\n if (index < 0 || index >= this.count) {\n throw new Error('IndexOutOfRangeException()');\n }\n return this.sections[index];\n };\n /**\n * In fills dictionary by the data from `Page settings`.\n * @private\n */\n PdfSectionCollection.prototype.setPageSettings = function (container, pageSettings) {\n // if (container === null) {\n // throw new Error('ArgumentNullException : container');\n // }\n // if (pageSettings === null) {\n // throw new Error('ArgumentNullException : pageSettings');\n // }\n var bounds = new RectangleF(new PointF(), pageSettings.size);\n container.items.setValue(this.dictionaryProperties.mediaBox, PdfArray.fromRectangle(bounds));\n };\n /**\n * `Adds` the specified section.\n * @private\n */\n PdfSectionCollection.prototype.add = function (section) {\n if (typeof section === 'undefined') {\n var section_1 = new PdfSection(this.pdfDocument);\n this.add(section_1);\n return section_1;\n }\n else {\n // if (section === null) {\n // throw new Error('ArgumentNullException : section');\n // }\n var r = this.checkSection(section);\n this.sections.push(section);\n section.parent = this;\n this.sectionCollection.add(r);\n return this.sections.indexOf(section);\n }\n };\n /**\n * `Checks` if the section is within the collection.\n * @private\n */\n PdfSectionCollection.prototype.checkSection = function (section) {\n var r = new PdfReferenceHolder(section);\n var contains = this.sectionCollection.contains(r);\n // if (contains) {\n // throw new Error('ArgumentException : The object can not be added twice to the collection,section');\n // }\n return r;\n };\n /**\n * Catches the Save event of the dictionary to `count the pages`.\n * @private\n */\n PdfSectionCollection.prototype.countPages = function () {\n var count = 0;\n this.sections.forEach(function (n) { return (count += n.count); });\n return count;\n };\n /**\n * Catches the Save event of the dictionary to `count the pages`.\n * @hidden\n * @private\n */\n PdfSectionCollection.prototype.beginSave = function () {\n this.sectionCount.intValue = this.countPages();\n };\n //Fields\n /**\n * Rotate factor for page `rotation`.\n * @default 90\n * @private\n */\n PdfSectionCollection.rotateFactor = 90;\n return PdfSectionCollection;\n}());\nexport { PdfSectionCollection };\n","import { PdfPage } from './pdf-page';\nimport { Dictionary } from './../collections/dictionary';\nimport { PdfPageOrientation } from './enum';\n/**\n * Represents a virtual collection of all the pages in the document.\n * @private\n */\nvar PdfDocumentPageCollection = /** @class */ (function () {\n //constructor\n /**\n * Initializes a new instance of the `PdfPageCollection` class.\n * @private\n */\n function PdfDocumentPageCollection(document) {\n /**\n * It holds the page collection with the `index`.\n * @private\n */\n this.pdfPageCollectionIndex = new Dictionary();\n /**\n * Stores the previous pages's `orientation`.\n * @default PdfPageOrientation.Portrait\n * @private\n */\n this.previousPageOrientation = PdfPageOrientation.Portrait;\n this.document = document;\n }\n Object.defineProperty(PdfDocumentPageCollection.prototype, \"count\", {\n //Property\n /**\n * Gets the total `number of the pages`.\n * @private\n */\n get: function () {\n return this.countPages();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentPageCollection.prototype, \"pageCollectionIndex\", {\n /**\n * Gets a `page index` from the document.\n * @private\n */\n get: function () {\n return this.pdfPageCollectionIndex;\n },\n enumerable: true,\n configurable: true\n });\n PdfDocumentPageCollection.prototype.add = function (page) {\n if (typeof page === 'undefined') {\n var page_1 = new PdfPage();\n this.add(page_1);\n return page_1;\n }\n else {\n var section = this.getLastSection();\n if (section.pageSettings.orientation !== this.previousPageOrientation) {\n section = this.document.sections.add();\n section.pageSettings.orientation = this.document.pageSettings.orientation;\n }\n section.add(page);\n }\n };\n /**\n * Returns `last section` in the document.\n * @private\n */\n PdfDocumentPageCollection.prototype.getLastSection = function () {\n var sc = this.document.sections;\n if (sc.section.length === 0) {\n sc.add();\n }\n var section = sc.section[sc.section.length - 1];\n return section;\n };\n /**\n * Called when `new page has been added`.\n * @private\n */\n PdfDocumentPageCollection.prototype.onPageAdded = function (args) {\n // if (PageAdded !== null)\n // {\n // PageAdded(this, args);\n // }\n };\n /**\n * Gets the `total number of pages`.\n * @private\n */\n PdfDocumentPageCollection.prototype.countPages = function () {\n var sc = this.document.sections;\n var count = 0;\n for (var index = 0; index < sc.section.length; index++) {\n count += sc.section[index].count;\n }\n return count;\n };\n /**\n * Gets the `page object` from page index.\n * @private\n */\n PdfDocumentPageCollection.prototype.getPageByIndex = function (index) {\n return this.getPage(index);\n };\n /**\n * Gets a page by its `index` in the document.\n * @private\n */\n PdfDocumentPageCollection.prototype.getPage = function (index) {\n if ((index < 0) || (index >= this.count)) {\n throw Error('ArgumentOutOfRangeException(\"index\", \"Value can not be less 0\")');\n }\n var page = null;\n var sectionStartIndex = 0;\n var sectionCount = 0;\n var pageIndex = 0;\n var length = this.document.sections.count;\n for (var i = 0; i < length; i++) {\n var section = this.document.sections.section[i];\n sectionCount = section.count;\n pageIndex = index - sectionStartIndex;\n // We found a section containing the page.\n if ((index >= sectionStartIndex && pageIndex < sectionCount)) {\n page = section.getPages()[pageIndex];\n break;\n }\n sectionStartIndex += sectionCount;\n }\n return page;\n };\n /**\n * Gets the `index of` the page in the document.\n * @private\n */\n PdfDocumentPageCollection.prototype.indexOf = function (page) {\n var index = -1;\n if (page == null) {\n throw new Error('ArgumentNullException: page');\n }\n else {\n var numPages = 0;\n for (var i = 0, len = this.document.sections.count; i < len; i++) {\n var section = this.document.sections.pdfSectionCollection(i);\n index = section.indexOf(page);\n if (index >= 0) {\n index += numPages;\n break;\n }\n else {\n index = -1;\n }\n numPages += section.count;\n }\n }\n return index;\n };\n /**\n * `Removes` the specified page.\n * @private\n */\n PdfDocumentPageCollection.prototype.remove = function (page) {\n if (page == null) {\n throw Error('ArgumentNullException(\"page\")');\n }\n var section = null;\n var len;\n for (var i = 0, len_1 = this.document.sections.count; i < len_1; i++) {\n section = this.document.sections.pdfSectionCollection(i);\n if (section.pages.contains(page)) {\n section.pages.remove(page);\n break;\n }\n }\n return section;\n };\n return PdfDocumentPageCollection;\n}());\nexport { PdfDocumentPageCollection };\n","/**\n * PdfCacheCollection.ts class for EJ2-PDF\n */\nimport { Dictionary } from './../collections/dictionary';\n/**\n * `Collection of the cached objects`.\n * @private\n */\nvar PdfCacheCollection = /** @class */ (function () {\n // Constructors\n /**\n * Initializes a new instance of the `PdfCacheCollection` class.\n * @private\n */\n function PdfCacheCollection() {\n this.referenceObjects = [];\n this.pdfFontCollection = new Dictionary();\n }\n // Public methods\n /**\n * `Searches` for the similar cached object. If is not found - adds the object to the cache.\n * @private\n */\n PdfCacheCollection.prototype.search = function (obj) {\n var result = null;\n var group = this.getGroup(obj);\n if (group == null) {\n group = this.createNewGroup();\n }\n else if (group.length > 0) {\n result = group[0];\n }\n group.push(obj);\n return result;\n };\n // Implementation\n /**\n * `Creates` a new group.\n * @private\n */\n PdfCacheCollection.prototype.createNewGroup = function () {\n var group = [];\n this.referenceObjects.push(group);\n return group;\n };\n PdfCacheCollection.prototype.destroy = function () {\n this.pdfFontCollection = undefined;\n this.referenceObjects = undefined;\n };\n /**\n * `Find and Return` a group.\n * @private\n */\n PdfCacheCollection.prototype.getGroup = function (result) {\n var group = null;\n if (result !== null) {\n var len = this.referenceObjects.length;\n for (var i = 0; i < len; i++) {\n if (this.referenceObjects.length > 0) {\n var tGroup = this.referenceObjects[i];\n if (tGroup.length > 0) {\n var representative = tGroup[0];\n if (result.equalsTo(representative)) {\n group = tGroup;\n break;\n }\n }\n else {\n this.removeGroup(tGroup);\n }\n }\n len = this.referenceObjects.length;\n }\n }\n return group;\n };\n /**\n * Remove a group from the storage.\n */\n PdfCacheCollection.prototype.removeGroup = function (group) {\n if (group !== null) {\n var index = this.referenceObjects.indexOf(group);\n this.referenceObjects.slice(index, index + 1);\n }\n };\n return PdfCacheCollection;\n}());\nexport { PdfCacheCollection };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { PdfWriter } from './../input-output/pdf-writer';\nimport { PdfMainObjectCollection } from './../input-output/pdf-main-object-collection';\nimport { PdfDocumentBase } from './pdf-document-base';\nimport { PdfCrossTable } from './../input-output/pdf-cross-table';\nimport { PdfCatalog } from './pdf-catalog';\nimport { PdfPageSettings } from './../pages/pdf-page-settings';\nimport { PdfSectionCollection } from './../pages/pdf-section-collection';\nimport { PdfDocumentPageCollection } from './../pages/pdf-document-page-collection';\nimport { PdfCacheCollection } from './../general/pdf-cache-collection';\nimport { PdfColorSpace } from './../graphics/enum';\nimport { PdfDocumentTemplate } from './pdf-document-template';\nimport { PdfFontFamily } from './../graphics/fonts/enum';\nimport { PdfStandardFont } from './../graphics/fonts/pdf-standard-font';\n/**\n * Represents a PDF document and can be used to create a new PDF document from the scratch.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a new page to the document\n * let page1 : PdfPage = document.pages.add();\n * // set the font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // create black brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(0, 0));\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\nvar PdfDocument = /** @class */ (function (_super) {\n __extends(PdfDocument, _super);\n function PdfDocument(isMerging) {\n var _this = _super.call(this) || this;\n /**\n * Default `margin` value.\n * @default 40.0\n * @private\n */\n _this.defaultMargin = 40.0;\n /**\n * Internal variable to store instance of `StreamWriter` classes..\n * @default null\n * @private\n */\n _this.streamWriter = null;\n _this = _super.call(this, _this) || this;\n if (isMerging === true || isMerging === false || typeof isMerging !== 'undefined') {\n var objects = new PdfMainObjectCollection();\n _this.setMainObjectCollection(objects);\n var crossTable = new PdfCrossTable();\n crossTable.isMerging = isMerging;\n crossTable.document = _this;\n _this.setCrossTable(crossTable);\n var catalog = new PdfCatalog();\n _this.setCatalog(catalog);\n objects.add(catalog);\n catalog.position = -1;\n _this.sectionCollection = new PdfSectionCollection(_this);\n _this.documentPageCollection = new PdfDocumentPageCollection(_this);\n catalog.pages = _this.sectionCollection;\n }\n else {\n PdfDocument.cacheCollection = new PdfCacheCollection();\n _this.constructor(false);\n }\n return _this;\n }\n Object.defineProperty(PdfDocument, \"defaultFont\", {\n //Properties\n /**\n * Gets the `default font`. It is used for complex objects when font is not explicitly defined.\n * @private\n */\n get: function () {\n if (this.defaultStandardFont == null) {\n this.defaultStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 8);\n }\n return this.defaultStandardFont;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocument.prototype, \"sections\", {\n /**\n * Gets the collection of the `sections` in the document.\n * @private\n */\n get: function () {\n return this.sectionCollection;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocument.prototype, \"pageSettings\", {\n /**\n * Gets the document's page setting.\n * @public\n */\n get: function () {\n if (this.settings == null) {\n this.settings = new PdfPageSettings(this.defaultMargin);\n }\n return this.settings;\n },\n /**\n * Sets the document's page setting.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n *\n * // sets the right margin of the page\n * document.pageSettings.margins.right = 0;\n * // set the page size.\n * document.pageSettings.size = new SizeF(500, 500);\n * // change the page orientation to landscape\n * document.pageSettings.orientation = PdfPageOrientation.Landscape;\n * // apply 90 degree rotation on the page\n * document.pageSettings.rotate = PdfPageRotateAngle.RotateAngle90;\n *\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // set font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * // set the specified Point\n * let point : PointF = new PointF(page1.getClientSize().width - 200, page1.getClientSize().height - 200);\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, point);\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n set: function (value) {\n this.settings = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocument.prototype, \"pages\", {\n /**\n * Represents the collection of pages in the PDF document.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * //\n * // get the collection of pages in the document\n * let pageCollection : PdfDocumentPageCollection = document.pages;\n * //\n * // add pages\n * let page1 : PdfPage = pageCollection.add();\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n return this.documentPageCollection;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocument, \"cache\", {\n /**\n * Gets collection of the `cached objects`.\n * @private\n */\n get: function () {\n if (typeof PdfDocument.cacheCollection === 'undefined' || PdfDocument.cacheCollection == null) {\n return new PdfCacheCollection();\n }\n return PdfDocument.cacheCollection;\n },\n /**\n * Sets collection of the `cached objects`.\n * @private\n */\n set: function (value) {\n this.cacheCollection = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocument, \"enableCache\", {\n /**\n * Gets the value of enable cache.\n * @private\n */\n get: function () {\n return this.isCacheEnabled;\n },\n /**\n * Sets thie value of enable cache.\n * @private\n */\n set: function (value) {\n this.isCacheEnabled = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocument.prototype, \"colorSpace\", {\n /* tslint:disable */\n /**\n * Gets or sets the `color space` of the document. This property can be used to create PDF document in RGB, Gray scale or CMYK color spaces.\n * @private\n */\n get: function () {\n if ((this.pdfColorSpace === PdfColorSpace.Rgb) || ((this.pdfColorSpace === PdfColorSpace.Cmyk)\n || (this.pdfColorSpace === PdfColorSpace.GrayScale))) {\n return this.pdfColorSpace;\n }\n else {\n return PdfColorSpace.Rgb;\n }\n },\n set: function (value) {\n if ((value === PdfColorSpace.Rgb) || ((value === PdfColorSpace.Cmyk) ||\n (value === PdfColorSpace.GrayScale))) {\n this.pdfColorSpace = value;\n }\n else {\n this.pdfColorSpace = PdfColorSpace.Rgb;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocument.prototype, \"template\", {\n /* tslint:enable */\n /**\n * Gets or sets a `template` to all pages in the document.\n * @private\n */\n get: function () {\n if (this.pageTemplate == null) {\n this.pageTemplate = new PdfDocumentTemplate();\n }\n return this.pageTemplate;\n },\n set: function (value) {\n this.pageTemplate = value;\n },\n enumerable: true,\n configurable: true\n });\n PdfDocument.prototype.docSave = function (stream, arg2, arg3) {\n this.checkPagesPresence();\n if (stream === null) {\n throw new Error('ArgumentNullException : stream');\n }\n this.streamWriter = stream;\n var writer = new PdfWriter(stream);\n writer.document = this;\n if (typeof arg2 === 'boolean' && typeof arg3 === 'undefined') {\n return this.crossTable.save(writer);\n }\n else {\n this.crossTable.save(writer, arg2);\n }\n };\n /**\n * Checks the pages `presence`.\n * @private\n */\n PdfDocument.prototype.checkPagesPresence = function () {\n if (this.pages.count === 0) {\n this.pages.add();\n }\n };\n /**\n * disposes the current instance of `PdfDocument` class.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a new page to the document\n * let page1 : PdfPage = document.pages.add();\n * // set the font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // create black brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(0, 0));\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n PdfDocument.prototype.destroy = function () {\n this.catalog = undefined;\n this.colorSpace = undefined;\n this.currentSavingObj = undefined;\n this.documentPageCollection = undefined;\n this.isStreamCopied = undefined;\n this.pageSettings = undefined;\n this.pageTemplate = undefined;\n this.pdfColorSpace = undefined;\n this.sectionCollection = undefined;\n PdfDocument.cache.destroy();\n this.crossTable.pdfObjects.destroy();\n PdfDocument.cache = undefined;\n this.streamWriter.destroy();\n };\n /**\n * `Font` used in complex objects to draw strings and text when it is not defined explicitly.\n * @default null\n * @private\n */\n PdfDocument.defaultStandardFont = null;\n /**\n * Indicates whether enable cache or not\n * @default true\n * @private\n */\n PdfDocument.isCacheEnabled = true;\n return PdfDocument;\n}(PdfDocumentBase));\nexport { PdfDocument };\n","/**\n * PdfStandardFontMetricsFactory.ts class for EJ2-PDF\n */\nimport { PdfFontStyle, PdfFontFamily } from './enum';\nimport { PdfFontMetrics, StandardWidthTable } from './pdf-font-metrics';\n/**\n * @private\n * `Factory of the standard fonts metrics`.\n */\nvar PdfStandardFontMetricsFactory = /** @class */ (function () {\n function PdfStandardFontMetricsFactory() {\n }\n /**\n * Returns `metrics` of the font.\n * @private\n */\n PdfStandardFontMetricsFactory.getMetrics = function (fontFamily, fontStyle, size) {\n var metrics = null;\n switch (fontFamily) {\n case PdfFontFamily.Helvetica:\n metrics = this.getHelveticaMetrics(fontFamily, fontStyle, size);\n break;\n case PdfFontFamily.Courier:\n metrics = this.getCourierMetrics(fontFamily, fontStyle, size);\n break;\n case PdfFontFamily.TimesRoman:\n metrics = this.getTimesMetrics(fontFamily, fontStyle, size);\n break;\n case PdfFontFamily.Symbol:\n metrics = this.getSymbolMetrics(fontFamily, fontStyle, size);\n break;\n case PdfFontFamily.ZapfDingbats:\n metrics = this.getZapfDingbatsMetrics(fontFamily, fontStyle, size);\n break;\n default:\n metrics = this.getHelveticaMetrics(PdfFontFamily.Helvetica, fontStyle, size);\n break;\n }\n metrics.name = fontFamily.toString();\n metrics.subScriptSizeFactor = this.subSuperScriptFactor;\n metrics.superscriptSizeFactor = this.subSuperScriptFactor;\n return metrics;\n };\n // Implementation\n /**\n * Creates `Helvetica font metrics`.\n * @private\n */\n PdfStandardFontMetricsFactory.getHelveticaMetrics = function (fontFamily, fontStyle, size) {\n var metrics = new PdfFontMetrics();\n if ((fontStyle & PdfFontStyle.Bold) > 0 && (fontStyle & PdfFontStyle.Italic) > 0) {\n metrics.ascent = this.helveticaBoldItalicAscent;\n metrics.descent = this.helveticaBoldItalicDescent;\n metrics.postScriptName = this.helveticaBoldItalicName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.arialBoldWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n else if ((fontStyle & PdfFontStyle.Bold) > 0) {\n metrics.ascent = this.helveticaBoldAscent;\n metrics.descent = this.helveticaBoldDescent;\n metrics.postScriptName = this.helveticaBoldName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.arialBoldWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n else if ((fontStyle & PdfFontStyle.Italic) > 0) {\n metrics.ascent = this.helveticaItalicAscent;\n metrics.descent = this.helveticaItalicDescent;\n metrics.postScriptName = this.helveticaItalicName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.arialWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n else {\n metrics.ascent = this.helveticaAscent;\n metrics.descent = this.helveticaDescent;\n metrics.postScriptName = this.helveticaName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.arialWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n return metrics;\n };\n /**\n * Creates `Courier font metrics`.\n * @private\n */\n PdfStandardFontMetricsFactory.getCourierMetrics = function (fontFamily, fontStyle, size) {\n var metrics = new PdfFontMetrics();\n if ((fontStyle & PdfFontStyle.Bold) > 0 && (fontStyle & PdfFontStyle.Italic) > 0) {\n metrics.ascent = this.courierBoldItalicAscent;\n metrics.descent = this.courierBoldItalicDescent;\n metrics.postScriptName = this.courierBoldItalicName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.fixedWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n else if ((fontStyle & PdfFontStyle.Bold) > 0) {\n metrics.ascent = this.courierBoldAscent;\n metrics.descent = this.courierBoldDescent;\n metrics.postScriptName = this.courierBoldName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.fixedWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n else if ((fontStyle & PdfFontStyle.Italic) > 0) {\n metrics.ascent = this.courierItalicAscent;\n metrics.descent = this.courierItalicDescent;\n metrics.postScriptName = this.courierItalicName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.fixedWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n else {\n metrics.ascent = this.courierAscent;\n metrics.descent = this.courierDescent;\n metrics.postScriptName = this.courierName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.fixedWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n return metrics;\n };\n /**\n * Creates `Times font metrics`.\n * @private\n */\n PdfStandardFontMetricsFactory.getTimesMetrics = function (fontFamily, fontStyle, size) {\n var metrics = new PdfFontMetrics();\n if ((fontStyle & PdfFontStyle.Bold) > 0 && (fontStyle & PdfFontStyle.Italic) > 0) {\n metrics.ascent = this.timesBoldItalicAscent;\n metrics.descent = this.timesBoldItalicDescent;\n metrics.postScriptName = this.timesBoldItalicName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.timesRomanBoldItalicWidths);\n metrics.height = metrics.ascent - metrics.descent;\n }\n else if ((fontStyle & PdfFontStyle.Bold) > 0) {\n metrics.ascent = this.timesBoldAscent;\n metrics.descent = this.timesBoldDescent;\n metrics.postScriptName = this.timesBoldName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.timesRomanBoldWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n else if ((fontStyle & PdfFontStyle.Italic) > 0) {\n metrics.ascent = this.timesItalicAscent;\n metrics.descent = this.timesItalicDescent;\n metrics.postScriptName = this.timesItalicName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.timesRomanItalicWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n else {\n metrics.ascent = this.timesAscent;\n metrics.descent = this.timesDescent;\n metrics.postScriptName = this.timesName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.timesRomanWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n return metrics;\n };\n /**\n * Creates `Symbol font metrics`.\n * @private\n */\n PdfStandardFontMetricsFactory.getSymbolMetrics = function (fontFamily, fontStyle, size) {\n var metrics = new PdfFontMetrics();\n metrics.ascent = this.symbolAscent;\n metrics.descent = this.symbolDescent;\n metrics.postScriptName = this.symbolName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.symbolWidth);\n metrics.height = metrics.ascent - metrics.descent;\n return metrics;\n };\n /**\n * Creates `ZapfDingbats font metrics`.\n * @private\n */\n PdfStandardFontMetricsFactory.getZapfDingbatsMetrics = function (fontFamily, fontStyle, size) {\n var metrics = new PdfFontMetrics();\n metrics.ascent = this.zapfDingbatsAscent;\n metrics.descent = this.zapfDingbatsDescent;\n metrics.postScriptName = this.zapfDingbatsName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.zapfDingbatsWidth);\n metrics.height = metrics.ascent - metrics.descent;\n return metrics;\n };\n /**\n * `Multiplier` os subscript superscript.\n * @private\n */\n PdfStandardFontMetricsFactory.subSuperScriptFactor = 1.52;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaAscent = 931;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaDescent = -225;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaName = 'Helvetica';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaBoldAscent = 962;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaBoldDescent = -228;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaBoldName = 'Helvetica-Bold';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaItalicAscent = 931;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaItalicDescent = -225;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaItalicName = 'Helvetica-Oblique';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaBoldItalicAscent = 962;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaBoldItalicDescent = -228;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaBoldItalicName = 'Helvetica-BoldOblique';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.courierAscent = 805;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.courierDescent = -250;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.courierName = 'Courier';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.courierBoldAscent = 801;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.courierBoldDescent = -250;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.courierBoldName = 'Courier-Bold';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.courierItalicAscent = 805;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.courierItalicDescent = -250;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.courierItalicName = 'Courier-Oblique';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.courierBoldItalicAscent = 801;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.courierBoldItalicDescent = -250;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.courierBoldItalicName = 'Courier-BoldOblique';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.timesAscent = 898;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.timesDescent = -218;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.timesName = 'Times-Roman';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.timesBoldAscent = 935;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.timesBoldDescent = -218;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.timesBoldName = 'Times-Bold';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.timesItalicAscent = 883;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.timesItalicDescent = -217;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.timesItalicName = 'Times-Italic';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.timesBoldItalicAscent = 921;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.timesBoldItalicDescent = -218;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.timesBoldItalicName = 'Times-BoldItalic';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.symbolAscent = 1010;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.symbolDescent = -293;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.symbolName = 'Symbol';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.zapfDingbatsAscent = 820;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.zapfDingbatsDescent = -143;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.zapfDingbatsName = 'ZapfDingbats';\n /**\n * `Arial` widths table.\n * @private\n */\n PdfStandardFontMetricsFactory.arialWidth = [\n 278, 278, 355, 556, 556, 889, 667, 191, 333, 333, 389, 584, 278, 333,\n 278, 278, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 278, 278, 584, 584,\n 584, 556, 1015, 667, 667, 722, 722, 667, 611, 778, 722, 278, 500, 667, 556, 833,\n 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, 667, 611, 278, 278, 278,\n 469, 556, 333, 556, 556, 500, 556, 556, 278, 556, 556, 222, 222, 500, 222, 833,\n 556, 556, 556, 556, 333, 500, 278, 556, 500, 722, 500, 500, 500, 334, 260, 334,\n 584, 0, 556, 0, 222, 556, 333, 1000, 556, 556, 333, 1000, 667, 333, 1000, 0,\n 611, 0, 0, 222, 222, 333, 333, 350, 556, 1000, 333, 1000, 500, 333, 944, 0,\n 500, 667, 0, 333, 556, 556, 556, 556, 260, 556, 333, 737, 370, 556, 584, 0,\n 737, 333, 400, 584, 333, 333, 333, 556, 537, 278, 333, 333, 365, 556, 834, 834,\n 834, 611, 667, 667, 667, 667, 667, 667, 1000, 722, 667, 667, 667, 667, 278, 278,\n 278, 278, 722, 722, 778, 778, 778, 778, 778, 584, 778, 722, 722, 722, 722, 667,\n 667, 611, 556, 556, 556, 556, 556, 556, 889, 500, 556, 556, 556, 556, 278, 278,\n 278, 278, 556, 556, 556, 556, 556, 556, 556, 584, 611, 556, 556, 556, 556, 500,\n 556, 500\n ];\n /**\n * `Arial bold` widths table.\n * @private\n */\n PdfStandardFontMetricsFactory.arialBoldWidth = [\n 278, 333, 474, 556, 556, 889, 722, 238, 333, 333, 389, 584, 278, 333,\n 278, 278, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 333, 333, 584, 584,\n 584, 611, 975, 722, 722, 722, 722, 667, 611, 778, 722, 278, 556, 722, 611, 833,\n 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, 667, 611, 333, 278, 333,\n 584, 556, 333, 556, 611, 556, 611, 556, 333, 611, 611, 278, 278, 556, 278, 889,\n 611, 611, 611, 611, 389, 556, 333, 611, 556, 778, 556, 556, 500, 389, 280, 389,\n 584, 0, 556, 0, 278, 556, 500, 1000, 556, 556, 333, 1000, 667, 333, 1000, 0,\n 611, 0, 0, 278, 278, 500, 500, 350, 556, 1000, 333, 1000, 556, 333, 944, 0,\n 500, 667, 0, 333, 556, 556, 556, 556, 280, 556, 333, 737, 370, 556, 584, 0,\n 737, 333, 400, 584, 333, 333, 333, 611, 556, 278, 333, 333, 365, 556, 834, 834,\n 834, 611, 722, 722, 722, 722, 722, 722, 1000, 722, 667, 667, 667, 667, 278, 278,\n 278, 278, 722, 722, 778, 778, 778, 778, 778, 584, 778, 722, 722, 722, 722, 667,\n 667, 611, 556, 556, 556, 556, 556, 556, 889, 556, 556, 556, 556, 556, 278, 278,\n 278, 278, 611, 611, 611, 611, 611, 611, 611, 584, 611, 611, 611, 611, 611, 556,\n 611, 556\n ];\n /**\n * `Fixed` widths table.\n * @private\n */\n PdfStandardFontMetricsFactory.fixedWidth = [\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600\n ];\n /**\n * `Times` widths table.\n * @private\n */\n PdfStandardFontMetricsFactory.timesRomanWidth = [\n 250, 333, 408, 500, 500, 833, 778, 180, 333, 333, 500, 564, 250, 333,\n 250, 278, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 278, 278, 564, 564,\n 564, 444, 921, 722, 667, 667, 722, 611, 556, 722, 722, 333, 389, 722, 611, 889,\n 722, 722, 556, 722, 667, 556, 611, 722, 722, 944, 722, 722, 611, 333, 278, 333,\n 469, 500, 333, 444, 500, 444, 500, 444, 333, 500, 500, 278, 278, 500, 278, 778,\n 500, 500, 500, 500, 333, 389, 278, 500, 500, 722, 500, 500, 444, 480, 200, 480,\n 541, 0, 500, 0, 333, 500, 444, 1000, 500, 500, 333, 1000, 556, 333, 889, 0,\n 611, 0, 0, 333, 333, 444, 444, 350, 500, 1000, 333, 980, 389, 333, 722, 0,\n 444, 722, 0, 333, 500, 500, 500, 500, 200, 500, 333, 760, 276, 500, 564, 0,\n 760, 333, 400, 564, 300, 300, 333, 500, 453, 250, 333, 300, 310, 500, 750, 750,\n 750, 444, 722, 722, 722, 722, 722, 722, 889, 667, 611, 611, 611, 611, 333, 333,\n 333, 333, 722, 722, 722, 722, 722, 722, 722, 564, 722, 722, 722, 722, 722, 722,\n 556, 500, 444, 444, 444, 444, 444, 444, 667, 444, 444, 444, 444, 444, 278, 278,\n 278, 278, 500, 500, 500, 500, 500, 500, 500, 564, 500, 500, 500, 500, 500, 500,\n 500, 500\n ];\n /**\n * `Times bold` widths table.\n * @private\n */\n PdfStandardFontMetricsFactory.timesRomanBoldWidth = [\n 250, 333, 555, 500, 500, 1000, 833, 278, 333, 333, 500, 570, 250, 333,\n 250, 278, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 333, 333, 570, 570,\n 570, 500, 930, 722, 667, 722, 722, 667, 611, 778, 778, 389, 500, 778, 667, 944,\n 722, 778, 611, 778, 722, 556, 667, 722, 722, 1000, 722, 722, 667, 333, 278, 333,\n 581, 500, 333, 500, 556, 444, 556, 444, 333, 500, 556, 278, 333, 556, 278, 833,\n 556, 500, 556, 556, 444, 389, 333, 556, 500, 722, 500, 500, 444, 394, 220, 394,\n 520, 0, 500, 0, 333, 500, 500, 1000, 500, 500, 333, 1000, 556, 333, 1000, 0,\n 667, 0, 0, 333, 333, 500, 500, 350, 500, 1000, 333, 1000, 389, 333, 722, 0,\n 444, 722, 0, 333, 500, 500, 500, 500, 220, 500, 333, 747, 300, 500, 570, 0,\n 747, 333, 400, 570, 300, 300, 333, 556, 540, 250, 333, 300, 330, 500, 750, 750,\n 750, 500, 722, 722, 722, 722, 722, 722, 1000, 722, 667, 667, 667, 667, 389, 389,\n 389, 389, 722, 722, 778, 778, 778, 778, 778, 570, 778, 722, 722, 722, 722, 722,\n 611, 556, 500, 500, 500, 500, 500, 500, 722, 444, 444, 444, 444, 444, 278, 278,\n 278, 278, 500, 556, 500, 500, 500, 500, 500, 570, 500, 556, 556, 556, 556, 500,\n 556, 500\n ];\n /**\n * `Times italic` widths table.\n * @private\n */\n PdfStandardFontMetricsFactory.timesRomanItalicWidth = [\n 250, 333, 420, 500, 500, 833, 778, 214, 333, 333, 500, 675, 250, 333,\n 250, 278, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 333, 333, 675, 675,\n 675, 500, 920, 611, 611, 667, 722, 611, 611, 722, 722, 333, 444, 667, 556, 833,\n 667, 722, 611, 722, 611, 500, 556, 722, 611, 833, 611, 556, 556, 389, 278, 389,\n 422, 500, 333, 500, 500, 444, 500, 444, 278, 500, 500, 278, 278, 444, 278, 722,\n 500, 500, 500, 500, 389, 389, 278, 500, 444, 667, 444, 444, 389, 400, 275, 400,\n 541, 0, 500, 0, 333, 500, 556, 889, 500, 500, 333, 1000, 500, 333, 944, 0,\n 556, 0, 0, 333, 333, 556, 556, 350, 500, 889, 333, 980, 389, 333, 667, 0,\n 389, 556, 0, 389, 500, 500, 500, 500, 275, 500, 333, 760, 276, 500, 675, 0,\n 760, 333, 400, 675, 300, 300, 333, 500, 523, 250, 333, 300, 310, 500, 750, 750,\n 750, 500, 611, 611, 611, 611, 611, 611, 889, 667, 611, 611, 611, 611, 333, 333,\n 333, 333, 722, 667, 722, 722, 722, 722, 722, 675, 722, 722, 722, 722, 722, 556,\n 611, 500, 500, 500, 500, 500, 500, 500, 667, 444, 444, 444, 444, 444, 278, 278,\n 278, 278, 500, 500, 500, 500, 500, 500, 500, 675, 500, 500, 500, 500, 500, 444,\n 500, 444\n ];\n /**\n * `Times bold italic` widths table.\n * @private\n */\n PdfStandardFontMetricsFactory.timesRomanBoldItalicWidths = [\n 250, 389, 555, 500, 500, 833, 778, 278, 333, 333, 500, 570, 250, 333,\n 250, 278, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 333, 333, 570, 570,\n 570, 500, 832, 667, 667, 667, 722, 667, 667, 722, 778, 389, 500, 667, 611, 889,\n 722, 722, 611, 722, 667, 556, 611, 722, 667, 889, 667, 611, 611, 333, 278, 333,\n 570, 500, 333, 500, 500, 444, 500, 444, 333, 500, 556, 278, 278, 500, 278, 778,\n 556, 500, 500, 500, 389, 389, 278, 556, 444, 667, 500, 444, 389, 348, 220, 348,\n 570, 0, 500, 0, 333, 500, 500, 1000, 500, 500, 333, 1000, 556, 333, 944, 0,\n 611, 0, 0, 333, 333, 500, 500, 350, 500, 1000, 333, 1000, 389, 333, 722, 0,\n 389, 611, 0, 389, 500, 500, 500, 500, 220, 500, 333, 747, 266, 500, 606, 0,\n 747, 333, 400, 570, 300, 300, 333, 576, 500, 250, 333, 300, 300, 500, 750, 750,\n 750, 500, 667, 667, 667, 667, 667, 667, 944, 667, 667, 667, 667, 667, 389, 389,\n 389, 389, 722, 722, 722, 722, 722, 722, 722, 570, 722, 722, 722, 722, 722, 611,\n 611, 500, 500, 500, 500, 500, 500, 500, 722, 444, 444, 444, 444, 444, 278, 278,\n 278, 278, 500, 556, 500, 500, 500, 500, 500, 570, 500, 556, 556, 556, 556, 444,\n 500, 444\n ];\n /**\n * `Symbol` widths table.\n * @private\n */\n PdfStandardFontMetricsFactory.symbolWidth = [\n 250, 333, 713, 500, 549, 833, 778, 439, 333, 333, 500, 549, 250, 549,\n 250, 278, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 278, 278,\n 549, 549, 549, 444, 549, 722, 667, 722, 612, 611, 763, 603, 722, 333,\n 631, 722, 686, 889, 722, 722, 768, 741, 556, 592, 611, 690, 439, 768,\n 645, 795, 611, 333, 863, 333, 658, 500, 500, 631, 549, 549, 494, 439,\n 521, 411, 603, 329, 603, 549, 549, 576, 521, 549, 549, 521, 549, 603,\n 439, 576, 713, 686, 493, 686, 494, 480, 200, 480, 549, 750, 620, 247,\n 549, 167, 713, 500, 753, 753, 753, 753, 1042, 987, 603, 987, 603, 400,\n 549, 411, 549, 549, 713, 494, 460, 549, 549, 549, 549, 1000, 603, 1000,\n 658, 823, 686, 795, 987, 768, 768, 823, 768, 768, 713, 713, 713, 713,\n 713, 713, 713, 768, 713, 790, 790, 890, 823, 549, 250, 713, 603, 603,\n 1042, 987, 603, 987, 603, 494, 329, 790, 790, 786, 713, 384, 384, 384,\n 384, 384, 384, 494, 494, 494, 494, 329, 274, 686, 686, 686, 384, 384,\n 384, 384, 384, 384, 494, 494, 494, -1\n ];\n /**\n * `Zip dingbats` widths table.\n * @private\n */\n PdfStandardFontMetricsFactory.zapfDingbatsWidth = [\n 278, 974, 961, 974, 980, 719, 789, 790, 791, 690, 960, 939, 549, 855,\n 911, 933, 911, 945, 974, 755, 846, 762, 761, 571, 677, 763, 760, 759,\n 754, 494, 552, 537, 577, 692, 786, 788, 788, 790, 793, 794, 816, 823,\n 789, 841, 823, 833, 816, 831, 923, 744, 723, 749, 790, 792, 695, 776,\n 768, 792, 759, 707, 708, 682, 701, 826, 815, 789, 789, 707, 687, 696,\n 689, 786, 787, 713, 791, 785, 791, 873, 761, 762, 762, 759, 759, 892,\n 892, 788, 784, 438, 138, 277, 415, 392, 392, 668, 668, 390, 390, 317,\n 317, 276, 276, 509, 509, 410, 410, 234, 234, 334, 334, 732, 544, 544,\n 910, 667, 760, 760, 776, 595, 694, 626, 788, 788, 788, 788, 788, 788,\n 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788,\n 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788,\n 788, 788, 788, 788, 788, 788, 894, 838, 1016, 458, 748, 924, 748, 918,\n 927, 928, 928, 834, 873, 828, 924, 924, 917, 930, 931, 463, 883, 836,\n 836, 867, 867, 696, 696, 874, 874, 760, 946, 771, 865, 771, 888, 967,\n 888, 831, 873, 927, 970, 918\n ];\n return PdfStandardFontMetricsFactory;\n}());\nexport { PdfStandardFontMetricsFactory };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { PdfFontFamily, PdfFontStyle, FontEncoding } from './enum';\nimport { PdfFont } from './pdf-font';\nimport { PdfDocument } from './../../document/pdf-document';\nimport { PdfStandardFontMetricsFactory } from './pdf-standard-font-metrics-factory';\nimport { PdfDictionary } from './../../primitives/pdf-dictionary';\nimport { DictionaryProperties } from './../../input-output/pdf-dictionary-properties';\nimport { PdfName } from './../../primitives/pdf-name';\n/**\n * Represents one of the 14 standard fonts.\n * It's used to create a standard PDF font to draw the text in to the PDF.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a new page to the document\n * let page1 : PdfPage = document.pages.add();\n * //\n * // create new standard font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * //\n * // create black brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(0, 0));\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\nvar PdfStandardFont = /** @class */ (function (_super) {\n __extends(PdfStandardFont, _super);\n function PdfStandardFont(fontFamilyPrototype, size, style) {\n var _this = _super.call(this, size, style) || this;\n /**\n * Gets `ascent` of the font.\n * @private\n */\n _this.dictionaryProperties = new DictionaryProperties();\n /**\n * Gets `encodings` for internal class use.\n * @hidden\n * @private\n */\n _this.encodings = ['Unknown', 'StandardEncoding', 'MacRomanEncoding', 'MacExpertEncoding',\n 'WinAnsiEncoding', 'PDFDocEncoding', 'IdentityH'];\n if ((typeof fontFamilyPrototype === 'number') && (typeof style === 'undefined')) {\n _this.constructor(fontFamilyPrototype, size, PdfFontStyle.Regular);\n }\n else if ((typeof fontFamilyPrototype === 'number') && (typeof style !== 'undefined')) {\n _this = _super.call(this, size, style) || this;\n _this.pdfFontFamily = fontFamilyPrototype;\n _this.checkStyle();\n _this.initializeInternals();\n }\n else if ((fontFamilyPrototype instanceof PdfStandardFont) && (typeof style === 'undefined')) {\n _this.constructor(fontFamilyPrototype.fontFamily, size, fontFamilyPrototype.style);\n }\n else if ((fontFamilyPrototype instanceof PdfStandardFont) && (typeof style !== 'undefined')) {\n _this.constructor(fontFamilyPrototype.fontFamily, size, style);\n }\n return _this;\n }\n Object.defineProperty(PdfStandardFont.prototype, \"fontFamily\", {\n //Properties\n /**\n * Gets the `FontFamily`.\n * @private\n */\n get: function () {\n return this.pdfFontFamily;\n },\n enumerable: true,\n configurable: true\n });\n //methods\n /**\n * Checks font `style` of the font.\n * @private\n */\n PdfStandardFont.prototype.checkStyle = function () {\n if (this.fontFamily === PdfFontFamily.Symbol || this.fontFamily === PdfFontFamily.ZapfDingbats) {\n var style = this.style;\n style &= ~(PdfFontStyle.Bold | PdfFontStyle.Italic);\n this.setStyle(style);\n }\n };\n /**\n * Returns `width` of the line.\n * @public\n */\n PdfStandardFont.prototype.getLineWidth = function (line, format) {\n if (line == null) {\n throw new Error('ArgumentNullException:line');\n }\n var width = 0;\n var name = this.name;\n line = PdfStandardFont.convert(line);\n for (var i = 0, len = line.length; i < len; i++) {\n var ch = line[i];\n var charWidth = this.getCharWidthInternal(ch, format);\n width += charWidth;\n }\n var size = this.metrics.getSize(format);\n width *= (PdfFont.charSizeMultiplier * size);\n width = this.applyFormatSettings(line, format, width);\n return width;\n };\n /**\n * Checks whether fonts are `equals`.\n * @private\n */\n PdfStandardFont.prototype.equalsToFont = function (font) {\n var equal = false;\n var stFont = font;\n if (stFont != null) {\n var fontFamilyEqual = (this.fontFamily === stFont.fontFamily);\n var lineReducer = (~(PdfFontStyle.Underline | PdfFontStyle.Strikeout));\n var styleEqual = (this.style & lineReducer) === (stFont.style & lineReducer);\n equal = (fontFamilyEqual && styleEqual);\n }\n return equal;\n };\n /**\n * `Initializes` font internals..\n * @private\n */\n PdfStandardFont.prototype.initializeInternals = function () {\n var equalFont = null;\n // if (PdfDocument.EnableCache) {\n equalFont = PdfDocument.cache.search(this);\n // }\n var internals = null;\n // if (equalFont == null) {\n // Create font metrics.\n var metrics = PdfStandardFontMetricsFactory.getMetrics(this.pdfFontFamily, this.style, this.size);\n this.metrics = metrics;\n internals = this.createInternals();\n this.setInternals(internals);\n };\n /**\n * `Creates` font`s dictionary.\n * @private\n */\n PdfStandardFont.prototype.createInternals = function () {\n var dictionary = new PdfDictionary();\n dictionary.items.setValue(this.dictionaryProperties.type, new PdfName(this.dictionaryProperties.font));\n dictionary.items.setValue(this.dictionaryProperties.subtype, new PdfName(this.dictionaryProperties.type1));\n dictionary.items.setValue(this.dictionaryProperties.baseFont, new PdfName(this.metrics.postScriptName));\n if (this.fontFamily !== PdfFontFamily.Symbol && this.fontFamily !== PdfFontFamily.ZapfDingbats) {\n var encoding = this.encodings[FontEncoding.WinAnsiEncoding];\n dictionary.items.setValue(this.dictionaryProperties.encoding, new PdfName(encoding));\n }\n return dictionary;\n };\n /**\n * Returns `width` of the char. This methods doesn`t takes into consideration font`s size.\n * @private\n */\n PdfStandardFont.prototype.getCharWidthInternal = function (charCode, format) {\n var width = 0;\n var code = 0;\n code = charCode.charCodeAt(0);\n if (this.name === '0' || this.name === '1' || this.name === '2' ||\n this.name === '3' || this.name === '4') {\n code = code - PdfStandardFont.charOffset;\n }\n code = (code >= 0 && code !== 128) ? code : 0;\n var metrics = this.metrics;\n var widthTable = metrics.widthTable;\n width = widthTable.items(code);\n return width;\n };\n /**\n * `Converts` the specified text.\n * @private\n */\n PdfStandardFont.convert = function (text) {\n return text;\n };\n //Constants\n /**\n * First character `position`.\n * @private\n */\n PdfStandardFont.charOffset = 32;\n return PdfStandardFont;\n}(PdfFont));\nexport { PdfStandardFont };\n","import { PdfColor } from './../graphics/pdf-color';\nimport { RectangleF, PointF } from './../drawing/pdf-drawing';\nimport { PdfDictionary, SaveAnnotationEventHandler } from './../primitives/pdf-dictionary';\nimport { PdfArray } from './../primitives/pdf-array';\nimport { PdfNumber } from './../primitives/pdf-number';\nimport { PdfReferenceHolder } from './../primitives/pdf-reference';\nimport { PdfString } from './../primitives/pdf-string';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\nimport { PdfName } from './../primitives/pdf-name';\nimport { PdfSolidBrush } from './../graphics/brushes/pdf-solid-brush';\nimport { PdfStandardFont } from './../graphics/fonts/pdf-standard-font';\nimport { PdfFontFamily } from './../graphics/fonts/enum';\nimport { PdfStringFormat } from './../graphics/fonts/pdf-string-format';\nimport { PdfTextAlignment } from './../graphics/enum';\n/**\n * `PdfAnnotation` class represents the base class for annotation objects.\n * @private\n */\nvar PdfAnnotation = /** @class */ (function () {\n function PdfAnnotation(arg1) {\n // Fields\n /**\n * Specifies the Internal variable to store fields of `PdfDictionaryProperties`.\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n /**\n * `Color` of the annotation\n * @private\n */\n this.pdfColor = new PdfColor(255, 255, 255);\n /**\n * `Bounds` of the annotation.\n * @private\n */\n this.rectangle = new RectangleF(0, 0, 0, 0);\n /**\n * Parent `page` of the annotation.\n * @private\n */\n this.pdfPage = null;\n /**\n * `Brush of the text` of the annotation.\n * @default new PdfSolidBrush(new PdfColor(0, 0, 0))\n * @private\n */\n this.textBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n /**\n * `Font of the text` of the annotation.\n * @default new PdfStandardFont(PdfFontFamily.TimesRoman, 10)\n * @private\n */\n this.textFont = new PdfStandardFont(PdfFontFamily.TimesRoman, 10);\n /**\n * `StringFormat of the text` of the annotation.\n * @default new PdfStringFormat(PdfTextAlignment.Left)\n * @private\n */\n this.format = new PdfStringFormat(PdfTextAlignment.Left);\n /**\n * `Text` of the annotation.\n * @private\n */\n this.content = '';\n /**\n * Internal variable to store `dictionary`.\n * @private\n */\n this.pdfDictionary = new PdfDictionary();\n /**\n * To specifying the `Inner color` with which to fill the annotation\n * @private\n */\n this.internalColor = new PdfColor();\n /**\n * `opacity or darkness` of the annotation.\n * @private\n * @default 1.0\n */\n this.darkness = 1.0;\n if (typeof arg1 === 'undefined') {\n this.initialize();\n }\n else {\n this.initialize();\n this.bounds = arg1;\n }\n }\n Object.defineProperty(PdfAnnotation.prototype, \"color\", {\n // Properties\n /**\n * `Color` of the annotation\n * @private\n */\n get: function () {\n return this.pdfColor;\n },\n set: function (value) {\n this.pdfColor = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAnnotation.prototype, \"innerColor\", {\n /**\n * To specifying the `Inner color` with which to fill the annotation\n * @private\n */\n get: function () {\n return this.internalColor;\n },\n set: function (value) {\n this.internalColor = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAnnotation.prototype, \"bounds\", {\n /**\n * `bounds` of the annotation.\n * @private\n */\n get: function () {\n return this.rectangle;\n },\n set: function (value) {\n this.rectangle = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAnnotation.prototype, \"page\", {\n /**\n * Parent `page` of the annotation.\n * @private\n */\n get: function () {\n return this.pdfPage;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAnnotation.prototype, \"font\", {\n /**\n * To specifying the `Font of the text` in the annotation.\n * @private\n */\n get: function () {\n return this.textFont;\n },\n set: function (value) {\n this.textFont = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAnnotation.prototype, \"stringFormat\", {\n /**\n * To specifying the `StringFormat of the text` in the annotation.\n * @private\n */\n get: function () {\n return this.format;\n },\n set: function (value) {\n this.format = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAnnotation.prototype, \"brush\", {\n /**\n * To specifying the `Brush of the text` in the annotation.\n * @private\n */\n get: function () {\n return this.textBrush;\n },\n set: function (value) {\n this.textBrush = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAnnotation.prototype, \"text\", {\n /**\n * `Text` of the annotation.\n * @private\n */\n get: function () {\n return this.content;\n },\n set: function (value) {\n this.content = value;\n this.dictionary.items.setValue(this.dictionaryProperties.contents, new PdfString(this.content));\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAnnotation.prototype, \"dictionary\", {\n /**\n * Internal variable to store `dictionary`.\n * @hidden\n */\n get: function () {\n return this.pdfDictionary;\n },\n set: function (value) {\n this.pdfDictionary = value;\n },\n enumerable: true,\n configurable: true\n });\n // Implementation\n /**\n * `Initialize` the annotation event handler and specifies the type of the annotation.\n * @private\n */\n PdfAnnotation.prototype.initialize = function () {\n this.pdfDictionary.annotationBeginSave = new SaveAnnotationEventHandler(this);\n this.pdfDictionary.items.setValue(this.dictionaryProperties.type, new PdfName(this.dictionaryProperties.annot));\n };\n /**\n * Sets related `page` of the annotation.\n * @private\n */\n PdfAnnotation.prototype.setPage = function (page) {\n this.pdfPage = page;\n this.pdfDictionary.items.setValue(this.dictionaryProperties.p, new PdfReferenceHolder(this.pdfPage));\n };\n /**\n * Handles the `BeginSave` event of the Dictionary.\n * @private\n */\n PdfAnnotation.prototype.beginSave = function () {\n this.save();\n };\n /**\n * `Saves` an annotation.\n * @private\n */\n /* tslint:disable */\n PdfAnnotation.prototype.save = function () {\n var nativeRectangle = new RectangleF(this.rectangle.x, this.rectangle.y, this.rectangle.width, this.rectangle.height);\n var section = this.pdfPage.section;\n var initialHeight = nativeRectangle.height;\n var tempLoacation = section.pointToNativePdf(this.page, new PointF(nativeRectangle.x, nativeRectangle.y));\n nativeRectangle.x = tempLoacation.x;\n nativeRectangle.width = tempLoacation.x + nativeRectangle.width;\n nativeRectangle.y = (tempLoacation.y - this.page.document.pageSettings.margins.top);\n nativeRectangle.height = nativeRectangle.y - initialHeight;\n this.pdfDictionary.items.setValue(this.dictionaryProperties.rect, PdfArray.fromRectangle(nativeRectangle));\n this.dictionary.items.setValue(this.dictionaryProperties.ca, new PdfNumber(this.darkness));\n };\n Object.defineProperty(PdfAnnotation.prototype, \"element\", {\n /* tslint:enable */\n // IPdfWrapper Members\n /**\n * Gets the `element`.\n * @private\n */\n get: function () {\n return this.pdfDictionary;\n },\n enumerable: true,\n configurable: true\n });\n return PdfAnnotation;\n}());\nexport { PdfAnnotation };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { PdfAnnotation } from './annotation';\nimport { PdfName } from './../primitives/pdf-name';\n/**\n * `PdfLinkAnnotation` class represents the ink annotation class.\n * @private\n */\nvar PdfLinkAnnotation = /** @class */ (function (_super) {\n __extends(PdfLinkAnnotation, _super);\n function PdfLinkAnnotation(rectangle) {\n var _this = this;\n if (typeof rectangle === 'undefined') {\n _this = _super.call(this) || this;\n }\n else {\n _this = _super.call(this, rectangle) || this;\n }\n return _this;\n }\n // Implementation\n /**\n * `Initializes` annotation object.\n * @private\n */\n PdfLinkAnnotation.prototype.initialize = function () {\n _super.prototype.initialize.call(this);\n this.dictionary.items.setValue(this.dictionaryProperties.subtype, new PdfName(this.dictionaryProperties.link));\n };\n return PdfLinkAnnotation;\n}(PdfAnnotation));\nexport { PdfLinkAnnotation };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { PdfLinkAnnotation } from './link-annotation';\n/**\n * Represents base class for `link annotations` with associated action.\n * @private\n */\nvar PdfActionLinkAnnotation = /** @class */ (function (_super) {\n __extends(PdfActionLinkAnnotation, _super);\n // Constructors\n /**\n * Specifies the constructor for `ActionLinkAnnotation`.\n * @private\n */\n function PdfActionLinkAnnotation(rectangle) {\n var _this = _super.call(this, rectangle) || this;\n // Fields\n /**\n * Internal variable to store annotation's `action`.\n * @default null\n * @private\n */\n _this.pdfAction = null;\n return _this;\n }\n //Public method\n /**\n * get and set the `action`.\n * @hidden\n */\n PdfActionLinkAnnotation.prototype.getSetAction = function (value) {\n if (typeof value === 'undefined') {\n return this.pdfAction;\n }\n else {\n this.pdfAction = value;\n }\n };\n return PdfActionLinkAnnotation;\n}(PdfLinkAnnotation));\nexport { PdfActionLinkAnnotation };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { PdfLinkAnnotation } from './link-annotation';\n/**\n * `PdfDocumentLinkAnnotation` class represents an annotation object with holds link on another location within a document.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // create new pages\n * let page1 : PdfPage = document.pages.add();\n * let page2 : PdfPage = document.pages.add();\n * // create a new rectangle\n * let bounds : RectangleF = new RectangleF({x : 10, y : 200}, {width : 300, height : 25});\n * //\n * // create a new document link annotation\n * let documentLinkAnnotation : PdfDocumentLinkAnnotation = new PdfDocumentLinkAnnotation(bounds);\n * // set the annotation text\n * documentLinkAnnotation.text = 'Document link annotation';\n * // set the destination\n * documentLinkAnnotation.destination = new PdfDestination(page2);\n * // set the documentlink annotation location\n * documentLinkAnnotation.destination.location = new PointF(10, 0);\n * // add this annotation to a new page\n * page1.annotations.add(documentLinkAnnotation);\n * //\n * // save the document to disk\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\nvar PdfDocumentLinkAnnotation = /** @class */ (function (_super) {\n __extends(PdfDocumentLinkAnnotation, _super);\n function PdfDocumentLinkAnnotation(rectangle, destination) {\n var _this = _super.call(this, rectangle) || this;\n // Fields\n /**\n * `Destination` of the annotation.\n * @default null\n * @private\n */\n _this.pdfDestination = null;\n if (typeof destination !== 'undefined') {\n _this.destination = destination;\n }\n return _this;\n }\n Object.defineProperty(PdfDocumentLinkAnnotation.prototype, \"destination\", {\n // Properties\n /**\n * Gets or sets the `destination` of the annotation.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // create new pages\n * let page1 : PdfPage = document.pages.add();\n * let page2 : PdfPage = document.pages.add();\n * // create a new rectangle\n * let bounds : RectangleF = new RectangleF({x : 10, y : 200}, {width : 300, height : 25});\n * //\n * // create a new document link annotation\n * let documentLinkAnnotation : PdfDocumentLinkAnnotation = new PdfDocumentLinkAnnotation(bounds);\n * // set the annotation text\n * documentLinkAnnotation.text = 'Document link annotation';\n * // set the destination\n * documentLinkAnnotation.destination = new PdfDestination(page2);\n * // set the documentlink annotation location\n * documentLinkAnnotation.destination.location = new PointF(10, 0);\n * // add this annotation to a new page\n * page1.annotations.add(documentLinkAnnotation);\n * //\n * // save the document to disk\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n * @default null\n */\n get: function () {\n return this.pdfDestination;\n },\n set: function (value) {\n // if (this.pdfDestination !== value) {\n this.pdfDestination = value;\n // }\n },\n enumerable: true,\n configurable: true\n });\n // Implementation\n /**\n * `Saves` annotation object.\n * @private\n */\n PdfDocumentLinkAnnotation.prototype.save = function () {\n _super.prototype.save.call(this);\n if (this.pdfDestination != null) {\n this.dictionary.items.setValue(this.dictionaryProperties.dest, this.pdfDestination.element);\n }\n };\n /**\n * `Clone` the document link annotation.\n * @private\n */\n PdfDocumentLinkAnnotation.prototype.clone = function () {\n var annot = new PdfDocumentLinkAnnotation(this.bounds, this.destination);\n annot.color = this.color;\n annot.brush = this.brush;\n annot.destination = this.destination;\n annot.font = this.font;\n return annot;\n };\n return PdfDocumentLinkAnnotation;\n}(PdfLinkAnnotation));\nexport { PdfDocumentLinkAnnotation };\n","/**\n * ElementLayouter.ts class for EJ2-PDF\n */\nimport { RectangleF } from './../../../drawing/pdf-drawing';\nimport { PdfLayoutType, PdfLayoutBreakType } from './../enum';\n/**\n * Base class for `elements lay outing`.\n * @private\n */\nvar ElementLayouter = /** @class */ (function () {\n // Constructor\n /**\n * Initializes a new instance of the `ElementLayouter` class.\n * @private\n */\n function ElementLayouter(element) {\n this.layoutElement = element;\n }\n Object.defineProperty(ElementLayouter.prototype, \"elements\", {\n // Properties\n /**\n * Gets the `element`.\n * @private\n */\n get: function () {\n return this.layoutElement;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Gets the `element`.\n * @private\n */\n ElementLayouter.prototype.getElement = function () {\n return this.layoutElement;\n };\n ElementLayouter.prototype.layout = function (param, isBoundsChanged) {\n if (typeof isBoundsChanged === 'boolean' && isBoundsChanged === true) {\n return this.layoutInternal(param, true);\n }\n else {\n return this.layoutInternal(param);\n }\n };\n /**\n * Returns the `next page`.\n * @private\n */\n ElementLayouter.prototype.getNextPage = function (currentPage) {\n var section = currentPage.section;\n var nextPage = section.add();\n return nextPage;\n };\n return ElementLayouter;\n}());\nexport { ElementLayouter };\nvar PdfLayoutFormat = /** @class */ (function () {\n function PdfLayoutFormat(baseFormat) {\n if (typeof baseFormat === 'undefined') {\n //\n }\n else {\n this.break = baseFormat.break;\n this.layout = baseFormat.layout;\n this.paginateBounds = baseFormat.paginateBounds;\n this.boundsSet = baseFormat.usePaginateBounds;\n }\n }\n Object.defineProperty(PdfLayoutFormat.prototype, \"layout\", {\n // Properties\n /**\n * Gets or sets `layout` type of the element.\n * @private\n */\n get: function () {\n if (typeof this.layoutType === 'undefined' || this.layoutType == null) {\n this.layoutType = PdfLayoutType.Paginate;\n }\n return this.layoutType;\n },\n set: function (value) {\n this.layoutType = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfLayoutFormat.prototype, \"break\", {\n /**\n * Gets or sets `break` type of the element.\n * @private\n */\n get: function () {\n if (typeof this.breakType === 'undefined' || this.boundsSet == null) {\n this.breakType = PdfLayoutBreakType.FitPage;\n }\n return this.breakType;\n },\n set: function (value) {\n this.breakType = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfLayoutFormat.prototype, \"paginateBounds\", {\n /**\n * Gets or sets the `bounds` on the next page.\n * @private\n */\n get: function () {\n if (typeof this.layoutPaginateBounds === 'undefined' && this.layoutPaginateBounds == null) {\n this.layoutPaginateBounds = new RectangleF(0, 0, 0, 0);\n }\n return this.layoutPaginateBounds;\n },\n set: function (value) {\n this.layoutPaginateBounds = value;\n this.boundsSet = true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfLayoutFormat.prototype, \"usePaginateBounds\", {\n /**\n * Gets a value indicating whether [`use paginate bounds`].\n * @private\n */\n get: function () {\n if (typeof this.boundsSet === 'undefined' || this.boundsSet == null) {\n this.boundsSet = false;\n }\n return this.boundsSet;\n },\n enumerable: true,\n configurable: true\n });\n return PdfLayoutFormat;\n}());\nexport { PdfLayoutFormat };\nvar PdfLayoutParams = /** @class */ (function () {\n function PdfLayoutParams() {\n }\n Object.defineProperty(PdfLayoutParams.prototype, \"page\", {\n // Properties\n /**\n * Gets or sets the layout `page` for the element.\n * @private\n */\n get: function () {\n return this.pdfPage;\n },\n set: function (value) {\n this.pdfPage = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfLayoutParams.prototype, \"bounds\", {\n /**\n * Gets or sets layout `bounds` for the element.\n * @private\n */\n get: function () {\n return new RectangleF(this.layoutBounds.x, this.layoutBounds.y, this.layoutBounds.width, this.layoutBounds.height);\n },\n set: function (value) {\n this.layoutBounds = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfLayoutParams.prototype, \"format\", {\n /**\n * Gets or sets `layout settings` for the element.\n * @private\n */\n get: function () {\n return this.layoutFormat;\n },\n set: function (value) {\n this.layoutFormat = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfLayoutParams;\n}());\nexport { PdfLayoutParams };\nvar PdfLayoutResult = /** @class */ (function () {\n // Constructors\n /**\n * Initializes the new instance of `PdfLayoutResult` class.\n * @private\n */\n function PdfLayoutResult(page, bounds) {\n this.pdfPage = page;\n this.layoutBounds = bounds;\n }\n Object.defineProperty(PdfLayoutResult.prototype, \"page\", {\n // Properties\n /**\n * Gets the last `page` where the element was drawn.\n * @private\n */\n get: function () {\n return this.pdfPage;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfLayoutResult.prototype, \"bounds\", {\n /**\n * Gets the `bounds` of the element on the last page where it was drawn.\n * @private\n */\n get: function () {\n return this.layoutBounds;\n },\n enumerable: true,\n configurable: true\n });\n return PdfLayoutResult;\n}());\nexport { PdfLayoutResult };\n","/**\n * public Enum for `PdfDestinationMode`.\n * @private\n */\nexport var PdfDestinationMode;\n(function (PdfDestinationMode) {\n /**\n * Specifies the type of `Location`.\n * @private\n */\n PdfDestinationMode[PdfDestinationMode[\"Location\"] = 0] = \"Location\";\n /**\n * Specifies the type of `FitToPage`.\n * @private\n */\n PdfDestinationMode[PdfDestinationMode[\"FitToPage\"] = 1] = \"FitToPage\";\n /**\n * Specifies the type of `FitR`.\n * @private\n */\n PdfDestinationMode[PdfDestinationMode[\"FitR\"] = 2] = \"FitR\";\n})(PdfDestinationMode || (PdfDestinationMode = {}));\n","import { RectangleF, PointF } from './../../drawing/pdf-drawing';\nimport { PdfLayoutParams, PdfLayoutFormat } from './base/element-layouter';\n/**\n * `PdfLayoutElement` class represents the base class for all elements that can be layout on the pages.\n * @private\n */\nvar PdfLayoutElement = /** @class */ (function () {\n function PdfLayoutElement() {\n }\n PdfLayoutElement.prototype.drawHelper = function (arg2, arg3, arg4, arg5) {\n if (arg3 instanceof PointF && typeof arg3.width === 'undefined' && typeof arg3 === 'undefined') {\n return this.drawHelper(arg2, arg3.x, arg3.y);\n }\n else if (typeof arg3 === 'number' && typeof arg4 === 'number' && typeof arg5 === 'undefined') {\n return this.drawHelper(arg2, arg3, arg4, null);\n }\n else if (arg3 instanceof RectangleF && typeof arg3.width !== 'undefined' && typeof arg4 === 'undefined') {\n return this.drawHelper(arg2, arg3, null);\n }\n else if (arg3 instanceof PointF && typeof arg3.width === 'undefined' && arg4 instanceof PdfLayoutFormat) {\n return this.drawHelper(arg2, arg3.x, arg3.y, arg4);\n }\n else if (typeof arg3 === 'number' && typeof arg4 === 'number' && (arg5 instanceof PdfLayoutFormat || arg5 == null)) {\n var width = (arg2.graphics.clientSize.width - arg3);\n var layoutRectangle = new RectangleF(arg3, arg4, width, 0);\n return this.drawHelper(arg2, layoutRectangle, arg5);\n }\n else if (arg3 instanceof RectangleF && typeof arg3.width !== 'undefined' && typeof arg4 === 'boolean') {\n this.bEmbedFonts = arg4;\n return this.drawHelper(arg2, arg3, null);\n }\n else {\n var param = new PdfLayoutParams();\n var temparg3 = arg3;\n var temparg4 = arg4;\n param.page = arg2;\n param.bounds = temparg3;\n param.format = (temparg4 != null) ? temparg4 : new PdfLayoutFormat();\n var result = this.layout(param);\n return result;\n }\n };\n return PdfLayoutElement;\n}());\nexport { PdfLayoutElement };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * TextLayouter.ts class for EJ2-PDF\n */\nimport { ElementLayouter, PdfLayoutResult } from './element-layouter';\nimport { RectangleF, SizeF } from './../../../drawing/pdf-drawing';\nimport { PdfStringLayouter } from './../../fonts/string-layouter';\nimport { PdfLayoutBreakType } from './../../figures/enum';\nimport { PdfColor } from './../../pdf-color';\nimport { PdfTextWebLink } from './../../../annotations/pdf-text-web-link';\n/**\n * Class that `layouts the text`.\n * @private\n */\nvar TextLayouter = /** @class */ (function (_super) {\n __extends(TextLayouter, _super);\n // Constructors\n /**\n * Initializes a new instance of the `TextLayouter` class.\n * @private\n */\n function TextLayouter(element) {\n return _super.call(this, element) || this;\n }\n Object.defineProperty(TextLayouter.prototype, \"element\", {\n /**\n * Gets the layout `element`.\n * @private\n */\n get: function () {\n return _super.prototype.getElement.call(this);\n },\n enumerable: true,\n configurable: true\n });\n // Implementation\n /**\n * `Layouts` the element.\n * @private\n */\n TextLayouter.prototype.layoutInternal = function (param) {\n /* tslint:disable */\n this.format = (this.element.stringFormat !== null && typeof this.element.stringFormat !== 'undefined') ? this.element.stringFormat : null;\n var currentPage = param.page;\n var currentBounds = param.bounds;\n var text = this.element.value;\n var result = null;\n var pageResult = new TextPageLayoutResult();\n pageResult.page = currentPage;\n pageResult.remainder = text;\n for (;;) {\n pageResult = this.layoutOnPage(text, currentPage, currentBounds, param);\n result = this.getLayoutResult(pageResult);\n break;\n }\n /* tslint:enable */\n return result;\n };\n /**\n * Raises `PageLayout` event if needed.\n * @private\n */\n TextLayouter.prototype.getLayoutResult = function (pageResult) {\n var result = new PdfTextLayoutResult(pageResult.page, pageResult.bounds, pageResult.remainder, pageResult.lastLineBounds);\n return result;\n };\n /* tslint:disable */\n /**\n * `Layouts` the text on the page.\n * @private\n */\n TextLayouter.prototype.layoutOnPage = function (text, currentPage, currentBounds, param) {\n var result = new TextPageLayoutResult();\n result.remainder = text;\n result.page = currentPage;\n currentBounds = this.checkCorrectBounds(currentPage, currentBounds);\n var layouter = new PdfStringLayouter();\n var stringResult = layouter.layout(text, this.element.font, this.format, currentBounds, currentPage.getClientSize().height, false, new SizeF(0, 0));\n var textFinished = (stringResult.remainder == null);\n var doesntFit = (param.format.break === PdfLayoutBreakType.FitElement);\n var canDraw = !(doesntFit || stringResult.empty);\n // Draw the text.\n var graphics = currentPage.graphics;\n var brush = this.element.getBrush();\n if (this.element instanceof PdfTextWebLink) {\n brush.color = new PdfColor(0, 0, 255);\n }\n graphics.drawStringLayoutResult(stringResult, this.element.font, this.element.pen, brush, currentBounds, this.format);\n var lineInfo = stringResult.lines[stringResult.lineCount - 1];\n result.lastLineBounds = graphics.getLineBounds(stringResult.lineCount - 1, stringResult, this.element.font, currentBounds, this.format);\n result.bounds = this.getTextPageBounds(currentPage, currentBounds, stringResult);\n result.remainder = stringResult.remainder;\n result.end = (textFinished);\n return result;\n };\n /* tslint:enable */\n /**\n * `Corrects current bounds` on the page.\n * @private\n */\n TextLayouter.prototype.checkCorrectBounds = function (currentPage, currentBounds) {\n var pageSize = currentPage.graphics.clientSize;\n currentBounds.height = (currentBounds.height > 0) ? currentBounds.height : pageSize.height - currentBounds.y;\n return currentBounds;\n };\n /**\n * Returns a `rectangle` where the text was printed on the page.\n * @private\n */\n /* tslint:disable */\n TextLayouter.prototype.getTextPageBounds = function (currentPage, currentBounds, stringResult) {\n var textSize = stringResult.actualSize;\n var x = currentBounds.x;\n var y = currentBounds.y;\n var width = (currentBounds.width > 0) ? currentBounds.width : textSize.width;\n var height = textSize.height;\n var shiftedRect = currentPage.graphics.checkCorrectLayoutRectangle(textSize, currentBounds.x, currentBounds.y, this.format);\n // if (currentBounds.width <= 0) {\n x = shiftedRect.x;\n // }\n var verticalShift = currentPage.graphics.getTextVerticalAlignShift(textSize.height, currentBounds.height, this.format);\n y += verticalShift;\n var bounds = new RectangleF(x, y, width, height);\n return bounds;\n };\n return TextLayouter;\n}(ElementLayouter));\nexport { TextLayouter };\nvar TextPageLayoutResult = /** @class */ (function () {\n function TextPageLayoutResult() {\n }\n return TextPageLayoutResult;\n}());\nexport { TextPageLayoutResult };\nvar PdfTextLayoutResult = /** @class */ (function (_super) {\n __extends(PdfTextLayoutResult, _super);\n // Constructors\n /**\n * Initializes the new instance of `PdfTextLayoutResult` class.\n * @private\n */\n function PdfTextLayoutResult(page, bounds, remainder, lastLineBounds) {\n var _this = _super.call(this, page, bounds) || this;\n _this.remainderText = remainder;\n _this.lastLineTextBounds = lastLineBounds;\n return _this;\n }\n Object.defineProperty(PdfTextLayoutResult.prototype, \"remainder\", {\n // Properties\n /**\n * Gets a value that contains the `text` that was not printed.\n * @private\n */\n get: function () {\n return this.remainderText;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfTextLayoutResult.prototype, \"lastLineBounds\", {\n /**\n * Gets a value that indicates the `bounds` of the last line that was printed on the page.\n * @private\n */\n get: function () {\n return this.lastLineTextBounds;\n },\n enumerable: true,\n configurable: true\n });\n return PdfTextLayoutResult;\n}(PdfLayoutResult));\nexport { PdfTextLayoutResult };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * PdfTextElement.ts class for EJ2-PDF\n */\nimport { PdfLayoutElement } from './../figures/layout-element';\nimport { PdfBrush } from './../brushes/pdf-brush';\nimport { PdfFont } from './../fonts/pdf-font';\nimport { PdfStandardFont } from './../fonts/pdf-standard-font';\nimport { PdfPen } from './../pdf-pen';\nimport { PdfLayoutParams } from './../figures/base/element-layouter';\nimport { TextLayouter } from './base/text-layouter';\nimport { PdfSolidBrush } from './../brushes/pdf-solid-brush';\nimport { PdfColor } from './../pdf-color';\nimport { RectangleF, SizeF, PointF } from './../../drawing/pdf-drawing';\nimport { PdfLayoutFormat } from './base/element-layouter';\nimport { PdfStringLayouter } from './../fonts/string-layouter';\nimport { PdfTextAlignment } from './../enum';\n/**\n * `PdfTextElement` class represents the text area with the ability to span several pages\n * and inherited from the 'PdfLayoutElement' class.\n * @private\n */\nvar PdfTextElement = /** @class */ (function (_super) {\n __extends(PdfTextElement, _super);\n function PdfTextElement(arg1, arg2, arg3, arg4, arg5) {\n var _this = _super.call(this) || this;\n // Fields\n /**\n * `Text` data.\n * @private\n */\n _this.content = '';\n /**\n * `Value` of text data.\n * @private\n */\n _this.elementValue = '';\n /**\n * indicate whether the drawText with PointF overload is called or not.\n * @default false\n * @private\n */\n _this.hasPointOverload = false;\n /**\n * indicate whether the PdfGridCell value is `PdfTextElement`\n * @default false\n * @private\n */\n _this.isPdfTextElement = false;\n if (typeof arg1 === 'undefined') {\n //\n }\n else if (typeof arg1 === 'string' && typeof arg2 === 'undefined') {\n _this = _super.call(this) || this;\n _this.content = arg1;\n _this.elementValue = arg1;\n }\n else if (typeof arg1 === 'string' && arg2 instanceof PdfFont && typeof arg3 === 'undefined') {\n _this = _super.call(this) || this;\n _this.content = arg1;\n _this.elementValue = arg1;\n _this.pdfFont = arg2;\n }\n else if (typeof arg1 === 'string' && arg2 instanceof PdfFont && arg3 instanceof PdfPen && typeof arg4 === 'undefined') {\n _this = _super.call(this) || this;\n _this.content = arg1;\n _this.elementValue = arg1;\n _this.pdfFont = arg2;\n _this.pdfPen = arg3;\n }\n else if (typeof arg1 === 'string' && arg2 instanceof PdfFont && arg3 instanceof PdfBrush && typeof arg4 === 'undefined') {\n _this = _super.call(this) || this;\n _this.content = arg1;\n _this.elementValue = arg1;\n _this.pdfFont = arg2;\n _this.pdfBrush = arg3;\n }\n else {\n _this = _super.call(this) || this;\n _this.content = arg1;\n _this.elementValue = arg1;\n _this.pdfFont = arg2;\n _this.pdfPen = arg3;\n _this.pdfBrush = arg4;\n _this.format = arg5;\n }\n return _this;\n }\n Object.defineProperty(PdfTextElement.prototype, \"text\", {\n // Properties\n /**\n * Gets or sets a value indicating the `text` that should be printed.\n * ```typescript\n * // create a new PDF document.\n * let document : PdfDocument = new PdfDocument();\n * // add a page to the document.\n * let page1 : PdfPage = document.pages.add();\n * // create the font\n * let font : PdfFont = new PdfStandardFont(PdfFontFamily.Helvetica, 12);\n * // create the Text Web Link\n * let textLink : PdfTextWebLink = new PdfTextWebLink();\n * // set the hyperlink\n * textLink.url = 'http://www.google.com';\n * //\n * // set the link text\n * textLink.text = 'Google';\n * //\n * // set the font\n * textLink.font = font;\n * // draw the hyperlink in PDF page\n * textLink.draw(page1, new PointF(10, 40));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n return this.content;\n },\n set: function (value) {\n this.elementValue = value;\n this.content = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfTextElement.prototype, \"value\", {\n //get value\n /**\n * Gets or sets a `value` indicating the text that should be printed.\n * @private\n */\n get: function () {\n return this.elementValue;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfTextElement.prototype, \"pen\", {\n //get pen\n /**\n * Gets or sets a `PdfPen` that determines the color, width, and style of the text\n * @private\n */\n get: function () {\n return this.pdfPen;\n },\n //Set pen value\n set: function (value) {\n this.pdfPen = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfTextElement.prototype, \"brush\", {\n //get brush\n /**\n * Gets or sets the `PdfBrush` that will be used to draw the text with color and texture.\n * @private\n */\n get: function () {\n return this.pdfBrush;\n },\n //Set brush value\n set: function (value) {\n this.pdfBrush = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfTextElement.prototype, \"font\", {\n //get font\n /**\n * Gets or sets a `PdfFont` that defines the text format.\n * ```typescript\n * // create a new PDF document.\n * let document : PdfDocument = new PdfDocument();\n * // add a page to the document.\n * let page1 : PdfPage = document.pages.add();\n * // create the font\n * let font : PdfFont = new PdfStandardFont(PdfFontFamily.Helvetica, 12);\n * // create the Text Web Link\n * let textLink : PdfTextWebLink = new PdfTextWebLink();\n * // set the hyperlink\n * textLink.url = 'http://www.google.com';\n * // set the link text\n * textLink.text = 'Google';\n * //\n * // set the font\n * textLink.font = font;\n * //\n * // draw the hyperlink in PDF page\n * textLink.draw(page1, new PointF(10, 40));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n return this.pdfFont;\n },\n set: function (value) {\n this.pdfFont = value;\n if (this.pdfFont instanceof PdfStandardFont && this.content != null) {\n this.elementValue = PdfStandardFont.convert(this.content);\n }\n else {\n this.elementValue = this.content;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfTextElement.prototype, \"stringFormat\", {\n /**\n * Gets or sets the `PdfStringFormat` that will be used to set the string format\n * @private\n */\n get: function () {\n return this.format;\n },\n set: function (value) {\n this.format = value;\n },\n enumerable: true,\n configurable: true\n });\n // Implementation\n /**\n * Gets a `brush` for drawing.\n * @private\n */\n PdfTextElement.prototype.getBrush = function () {\n return (this.pdfBrush == null || typeof this.pdfBrush === 'undefined') ? new PdfSolidBrush(new PdfColor(0, 0, 0)) : this.pdfBrush;\n };\n // /**\n // * `Draws` an element on the Graphics.\n // * @private\n // */\n // public drawInternal(graphics : PdfGraphics) : void {\n // graphics.drawString(this.elementValue, this.pdfFont, this.pdfPen, this.getBrush(), 0, 0, this.stringFormat);\n // }\n /**\n * `Layouts` the element.\n * @private\n */\n PdfTextElement.prototype.layout = function (param) {\n var layouter = new TextLayouter(this);\n var result = layouter.layout(param);\n return result;\n };\n PdfTextElement.prototype.drawText = function (arg2, arg3, arg4, arg5) {\n if (arg3 instanceof PointF && typeof arg3.width === 'undefined' && typeof arg4 === 'undefined') {\n this.hasPointOverload = true;\n return this.drawText(arg2, arg3.x, arg3.y);\n }\n else if (typeof arg3 === 'number' && typeof arg4 === 'number' && typeof arg5 === 'undefined') {\n this.hasPointOverload = true;\n return this.drawText(arg2, arg3, arg4, null);\n }\n else if (arg3 instanceof RectangleF && typeof arg3.width !== 'undefined' && typeof arg4 === 'undefined') {\n return this.drawText(arg2, arg3, null);\n }\n else if (arg3 instanceof PointF && typeof arg3.width === 'undefined' && arg4 instanceof PdfLayoutFormat) {\n this.hasPointOverload = true;\n return this.drawText(arg2, arg3.x, arg3.y, arg4);\n }\n else if (typeof arg3 === 'number' && typeof arg4 === 'number' && (arg5 instanceof PdfLayoutFormat || arg5 == null)) {\n this.hasPointOverload = true;\n var width = (arg2.graphics.clientSize.width - arg3);\n var layoutRectangle = new RectangleF(arg3, arg4, width, 0);\n return this.drawText(arg2, layoutRectangle, arg5);\n }\n else if (arg3 instanceof RectangleF && typeof arg3.width !== 'undefined' && typeof arg4 === 'boolean') {\n return this.drawText(arg2, arg3, null);\n }\n else {\n var layout = new PdfStringLayouter();\n if (this.hasPointOverload) {\n var stringLayoutResult = layout.layout(this.value, this.font, this.stringFormat, new SizeF((arg2.graphics.clientSize.width - arg3.x), 0), true, arg2.graphics.clientSize);\n var layoutResult = void 0;\n var param = new PdfLayoutParams();\n var temparg3 = arg3;\n var temparg4 = arg4;\n param.page = arg2;\n var previousPage = arg2;\n param.bounds = temparg3;\n param.format = (temparg4 != null) ? temparg4 : new PdfLayoutFormat();\n if (stringLayoutResult.lines.length > 1) {\n this.text = stringLayoutResult.layoutLines[0].text;\n if (param.bounds.y <= param.page.graphics.clientSize.height) {\n var previousPosition = new PointF(param.bounds.x, param.bounds.y);\n layoutResult = this.layout(param);\n var bounds = new RectangleF(0, layoutResult.bounds.y + stringLayoutResult.lineHeight, arg2.graphics.clientSize.width, stringLayoutResult.lineHeight);\n var isPaginate = false;\n for (var i = 1; i < stringLayoutResult.lines.length; i++) {\n param.page = layoutResult.page;\n param.bounds = new RectangleF(new PointF(bounds.x, bounds.y), new SizeF(bounds.width, bounds.height));\n this.text = stringLayoutResult.layoutLines[i].text;\n if (bounds.y + stringLayoutResult.lineHeight > layoutResult.page.graphics.clientSize.height) {\n isPaginate = true;\n param.page = param.page.graphics.getNextPage();\n if (previousPosition.y > (layoutResult.page.graphics.clientSize.height - layoutResult.bounds.height)) {\n bounds = new RectangleF(0, layoutResult.bounds.height, layoutResult.page.graphics.clientSize.width, stringLayoutResult.lineHeight);\n }\n else {\n bounds = new RectangleF(0, 0, layoutResult.page.graphics.clientSize.width, stringLayoutResult.lineHeight);\n }\n param.bounds = bounds;\n }\n layoutResult = this.layout(param);\n if (i !== (stringLayoutResult.lines.length - 1)) {\n bounds = new RectangleF(0, layoutResult.bounds.y + stringLayoutResult.lineHeight, layoutResult.page.graphics.clientSize.width, stringLayoutResult.lineHeight);\n }\n else {\n var lineWidth = this.font.measureString(this.text, this.format).width;\n layoutResult = this.calculateResultBounds(layoutResult, lineWidth, layoutResult.page.graphics.clientSize.width, 0);\n }\n }\n }\n return layoutResult;\n }\n else {\n var lineSize = this.font.measureString(this.text, this.format);\n if (param.bounds.y <= param.page.graphics.clientSize.height) {\n layoutResult = this.layout(param);\n layoutResult = this.calculateResultBounds(layoutResult, lineSize.width, layoutResult.page.graphics.clientSize.width, 0);\n }\n return layoutResult;\n }\n }\n else {\n var layoutResult = layout.layout(this.value, this.font, this.stringFormat, new SizeF(arg3.width, 0), false, arg2.graphics.clientSize);\n var result = void 0;\n var param = new PdfLayoutParams();\n var temparg3 = arg3;\n var temparg4 = arg4;\n param.page = arg2;\n param.bounds = temparg3;\n param.format = (temparg4 != null) ? temparg4 : new PdfLayoutFormat();\n if (layoutResult.lines.length > 1) {\n this.text = layoutResult.layoutLines[0].text;\n if (param.bounds.y <= param.page.graphics.clientSize.height) {\n var previousPosition = new PointF(param.bounds.x, param.bounds.y);\n result = this.layout(param);\n var bounds = new RectangleF(temparg3.x, result.bounds.y + layoutResult.lineHeight, temparg3.width, layoutResult.lineHeight);\n var isPaginate = false;\n for (var i = 1; i < layoutResult.lines.length; i++) {\n param.page = result.page;\n param.bounds = new RectangleF(bounds.x, bounds.y, bounds.width, bounds.height);\n this.text = layoutResult.layoutLines[i].text;\n if (bounds.y + layoutResult.lineHeight > result.page.graphics.clientSize.height) {\n isPaginate = true;\n param.page = param.page.graphics.getNextPage();\n if (previousPosition.y > (result.page.graphics.clientSize.height - result.bounds.height)) {\n bounds = new RectangleF(temparg3.x, layoutResult.lineHeight, temparg3.width, layoutResult.lineHeight);\n }\n else {\n bounds = new RectangleF(temparg3.x, 0, temparg3.width, layoutResult.lineHeight);\n }\n param.bounds = bounds;\n }\n result = this.layout(param);\n if (i !== (layoutResult.lines.length - 1)) {\n bounds = new RectangleF(temparg3.x, result.bounds.y + layoutResult.lineHeight, temparg3.width, layoutResult.lineHeight);\n }\n else {\n var lineWidth = this.font.measureString(this.text, this.format).width;\n result = this.calculateResultBounds(result, lineWidth, temparg3.width, temparg3.x);\n }\n }\n }\n return result;\n }\n else {\n var lineSize = this.font.measureString(this.text, this.format);\n if (param.bounds.y <= param.page.graphics.clientSize.height) {\n result = this.layout(param);\n result = this.calculateResultBounds(result, lineSize.width, temparg3.width, temparg3.x);\n }\n return result;\n }\n }\n }\n };\n PdfTextElement.prototype.calculateResultBounds = function (result, lineWidth, maximumWidth, startPosition) {\n var shift = 0;\n if (this.stringFormat != null && typeof this.stringFormat !== 'undefined' && this.stringFormat.alignment === PdfTextAlignment.Center) {\n result.bounds.x = startPosition + (maximumWidth - lineWidth) / 2;\n result.bounds.width = lineWidth;\n }\n else if (this.stringFormat != null && typeof this.stringFormat !== 'undefined' && this.stringFormat.alignment === PdfTextAlignment.Right) {\n result.bounds.x = startPosition + (maximumWidth - lineWidth);\n result.bounds.width = lineWidth;\n }\n else if (this.stringFormat != null && typeof this.stringFormat !== 'undefined' && this.stringFormat.alignment === PdfTextAlignment.Justify) {\n result.bounds.x = startPosition;\n result.bounds.width = maximumWidth;\n }\n else {\n result.bounds.width = startPosition;\n result.bounds.width = lineWidth;\n }\n return result;\n };\n return PdfTextElement;\n}(PdfLayoutElement));\nexport { PdfTextElement };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { PdfActionLinkAnnotation } from './action-link-annotation';\nimport { PdfName } from './../primitives/pdf-name';\nimport { PdfUriAction } from './../actions/uri-action';\n/**\n * `PdfUriAnnotation` class represents the Uri annotation.\n * @private\n */\nvar PdfUriAnnotation = /** @class */ (function (_super) {\n __extends(PdfUriAnnotation, _super);\n function PdfUriAnnotation(rectangle, uri) {\n var _this = _super.call(this, rectangle) || this;\n if (typeof uri !== 'undefined') {\n _this.uri = uri;\n }\n return _this;\n }\n Object.defineProperty(PdfUriAnnotation.prototype, \"uriAction\", {\n /**\n * Get `action` of the annotation.\n * @private\n */\n get: function () {\n if (typeof this.pdfUriAction === 'undefined') {\n this.pdfUriAction = new PdfUriAction();\n }\n return this.pdfUriAction;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfUriAnnotation.prototype, \"uri\", {\n // Properties\n /**\n * Gets or sets the `Uri` address.\n * @private\n */\n get: function () {\n return this.uriAction.uri;\n },\n set: function (value) {\n if (this.uriAction.uri !== value) {\n this.uriAction.uri = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfUriAnnotation.prototype, \"action\", {\n /**\n * Gets or sets the `action`.\n * @private\n */\n get: function () {\n return this.getSetAction();\n },\n set: function (value) {\n this.getSetAction(value);\n this.uriAction.next = value;\n },\n enumerable: true,\n configurable: true\n });\n // Implementation\n /**\n * `Initializes` annotation object.\n * @private\n */\n PdfUriAnnotation.prototype.initialize = function () {\n _super.prototype.initialize.call(this);\n this.dictionary.items.setValue(this.dictionaryProperties.subtype, new PdfName(this.dictionaryProperties.link));\n var tempPrimitive = this.uriAction.element;\n this.dictionary.items.setValue(this.dictionaryProperties.a, this.uriAction.element);\n };\n return PdfUriAnnotation;\n}(PdfActionLinkAnnotation));\nexport { PdfUriAnnotation };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { PdfPage } from './../pages/pdf-page';\nimport { PointF, RectangleF, SizeF } from './../drawing/pdf-drawing';\nimport { PdfTextElement } from './../graphics/figures/text-element';\nimport { PdfUriAnnotation } from './uri-annotation';\nimport { PdfStringLayouter } from './../graphics/fonts/string-layouter';\nimport { PdfFontStyle } from './../graphics/fonts/enum';\nimport { PdfTextAlignment } from './../graphics/enum';\nimport { PdfArray } from './../primitives/pdf-array';\nimport { PdfNumber } from './../primitives/pdf-number';\n/**\n * `PdfTextWebLink` class represents the class for text web link annotation.\n * ```typescript\n * // create a new PDF document.\n * let document : PdfDocument = new PdfDocument();\n * // add a page to the document.\n * let page1 : PdfPage = document.pages.add();\n * // create the font\n * let font : PdfFont = new PdfStandardFont(PdfFontFamily.Helvetica, 12);\n * //\n * // create the Text Web Link\n * let textLink : PdfTextWebLink = new PdfTextWebLink();\n * // set the hyperlink\n * textLink.url = 'http://www.google.com';\n * // set the link text\n * textLink.text = 'Google';\n * // set the font\n * textLink.font = font;\n * // draw the hyperlink in PDF page\n * textLink.draw(page1, new PointF(10, 40));\n * //\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\nvar PdfTextWebLink = /** @class */ (function (_super) {\n __extends(PdfTextWebLink, _super);\n // Constructors\n /**\n * Initializes a new instance of the `PdfTextWebLink` class.\n * @private\n */\n function PdfTextWebLink() {\n var _this = _super.call(this) || this;\n // Fields\n /**\n * Internal variable to store `Url`.\n * @default ''\n * @private\n */\n _this.uniformResourceLocator = '';\n /**\n * Internal variable to store `Uri Annotation` object.\n * @default null\n * @private\n */\n _this.uriAnnotation = null;\n /**\n * Checks whether the drawTextWebLink method with `PointF` overload is called or not.\n * If it set as true, then the start position of each lines excluding firest line is changed as (0, Y).\n * @private\n * @hidden\n */\n _this.recalculateBounds = false;\n _this.defaultBorder = new PdfArray();\n for (var i = 0; i < 3; i++) {\n _this.defaultBorder.add(new PdfNumber(0));\n }\n return _this;\n }\n Object.defineProperty(PdfTextWebLink.prototype, \"url\", {\n // Properties\n /**\n * Gets or sets the `Uri address`.\n * ```typescript\n * // create a new PDF document.\n * let document : PdfDocument = new PdfDocument();\n * // add a page to the document.\n * let page1 : PdfPage = document.pages.add();\n * // create the font\n * let font : PdfFont = new PdfStandardFont(PdfFontFamily.Helvetica, 12);\n * // create the Text Web Link\n * let textLink : PdfTextWebLink = new PdfTextWebLink();\n * //\n * // set the hyperlink\n * textLink.url = 'http://www.google.com';\n * //\n * // set the link text\n * textLink.text = 'Google';\n * // set the font\n * textLink.font = font;\n * // draw the hyperlink in PDF page\n * textLink.draw(page1, new PointF(10, 40));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n return this.uniformResourceLocator;\n },\n set: function (value) {\n if (value.length === 0) {\n throw new Error('ArgumentException : Url - string can not be empty');\n }\n this.uniformResourceLocator = value;\n },\n enumerable: true,\n configurable: true\n });\n PdfTextWebLink.prototype.draw = function (arg1, arg2) {\n if (arg1 instanceof PdfPage) {\n var layout = new PdfStringLayouter();\n var previousFontStyle = this.font.style;\n if (arg2 instanceof PointF) {\n this.recalculateBounds = true;\n this.font.style = PdfFontStyle.Underline;\n var layoutResult = layout.layout(this.value, this.font, this.stringFormat, new SizeF((arg1.graphics.clientSize.width - arg2.x), 0), true, arg1.graphics.clientSize);\n if (layoutResult.lines.length === 1) {\n var textSize = this.font.measureString(this.value);\n var rect = new RectangleF(arg2, textSize);\n rect = this.calculateBounds(rect, textSize.width, arg1.graphics.clientSize.width, arg2.x);\n this.uriAnnotation = new PdfUriAnnotation(rect, this.url);\n this.uriAnnotation.dictionary.items.setValue('Border', this.defaultBorder);\n arg1.annotations.add(this.uriAnnotation);\n var result = this.drawText(arg1, arg2);\n this.font.style = previousFontStyle;\n return result;\n }\n else {\n var result = this.drawMultipleLineWithPoint(layoutResult, arg1, arg2);\n this.font.style = previousFontStyle;\n return result;\n }\n }\n else {\n var layoutResult = layout.layout(this.value, this.font, this.stringFormat, new SizeF(arg2.width, 0), false, new SizeF(0, 0));\n this.font.style = PdfFontStyle.Underline;\n if (layoutResult.lines.length === 1) {\n var textSize = this.font.measureString(this.value);\n var rect = new RectangleF(new PointF(arg2.x, arg2.y), textSize);\n rect = this.calculateBounds(rect, textSize.width, arg2.width, arg2.x);\n this.uriAnnotation = new PdfUriAnnotation(rect, this.url);\n this.uriAnnotation.dictionary.items.setValue('Border', this.defaultBorder);\n arg1.annotations.add(this.uriAnnotation);\n var returnValue = this.drawText(arg1, arg2);\n this.font.style = previousFontStyle;\n return returnValue;\n }\n else {\n var returnValue = this.drawMultipleLineWithBounds(layoutResult, arg1, arg2);\n this.font.style = previousFontStyle;\n return returnValue;\n }\n }\n }\n else {\n var page = new PdfPage();\n page = arg1.page;\n return this.draw(page, arg2);\n }\n };\n /* tslint:enable */\n //Private methods\n /**\n * Helper method `Draw` a Multiple Line Text Web Link on the Graphics with the specified location.\n * @private\n */\n PdfTextWebLink.prototype.drawMultipleLineWithPoint = function (result, page, location) {\n var layoutResult;\n for (var i = 0; i < result.layoutLines.length; i++) {\n var size = this.font.measureString(result.lines[i].text);\n var bounds = new RectangleF(location, size);\n if (i !== 0) {\n bounds.x = 0;\n }\n this.text = result.lines[i].text;\n if (bounds.y + size.height > page.graphics.clientSize.height) {\n if (i !== 0) {\n page = page.graphics.getNextPage();\n bounds = new RectangleF(0, 0, page.graphics.clientSize.width, size.height);\n location.y = 0;\n }\n else {\n break;\n }\n }\n bounds = this.calculateBounds(bounds, size.width, page.graphics.clientSize.width, bounds.x);\n this.uriAnnotation = new PdfUriAnnotation(bounds, this.url);\n this.uriAnnotation.dictionary.items.setValue('Border', this.defaultBorder);\n page.annotations.add(this.uriAnnotation);\n if (i !== 0) {\n layoutResult = this.drawText(page, new PointF(0, bounds.y));\n }\n else {\n layoutResult = this.drawText(page, bounds.x, bounds.y);\n }\n location.y += size.height;\n }\n return layoutResult;\n };\n /**\n * Helper method `Draw` a Multiple Line Text Web Link on the Graphics with the specified bounds.\n * @private\n */\n PdfTextWebLink.prototype.drawMultipleLineWithBounds = function (result, page, bounds) {\n var layoutResult;\n for (var i = 0; i < result.layoutLines.length; i++) {\n var size = this.font.measureString(result.lines[i].text);\n var internalBounds = new RectangleF(new PointF(bounds.x, bounds.y), size);\n internalBounds = this.calculateBounds(internalBounds, size.width, bounds.width, bounds.x);\n this.text = result.lines[i].text;\n if (bounds.y + size.height > page.graphics.clientSize.height) {\n if (i !== 0) {\n page = page.graphics.getNextPage();\n bounds = new RectangleF(bounds.x, 0, bounds.width, size.height);\n internalBounds.y = 0;\n }\n else {\n break;\n }\n }\n this.uriAnnotation = new PdfUriAnnotation(internalBounds, this.url);\n this.uriAnnotation.dictionary.items.setValue('Border', this.defaultBorder);\n page.annotations.add(this.uriAnnotation);\n layoutResult = this.drawText(page, bounds);\n bounds.y += size.height;\n }\n return layoutResult;\n };\n /* tslint:disable */\n PdfTextWebLink.prototype.calculateBounds = function (currentBounds, lineWidth, maximumWidth, startPosition) {\n var shift = 0;\n if (this.stringFormat != null && typeof this.stringFormat !== 'undefined' && this.stringFormat.alignment === PdfTextAlignment.Center) {\n currentBounds.x = startPosition + (maximumWidth - lineWidth) / 2;\n currentBounds.width = lineWidth;\n }\n else if (this.stringFormat != null && typeof this.stringFormat !== 'undefined' && this.stringFormat.alignment === PdfTextAlignment.Right) {\n currentBounds.x = startPosition + (maximumWidth - lineWidth);\n currentBounds.width = lineWidth;\n }\n else if (this.stringFormat != null && typeof this.stringFormat !== 'undefined' && this.stringFormat.alignment === PdfTextAlignment.Justify) {\n currentBounds.x = startPosition;\n currentBounds.width = maximumWidth;\n }\n else {\n currentBounds.width = startPosition;\n currentBounds.width = lineWidth;\n }\n return currentBounds;\n };\n return PdfTextWebLink;\n}(PdfTextElement));\nexport { PdfTextWebLink };\n","/**\n * PdfNumbersConvertor.ts class for EJ2-PDF\n * @private\n */\nimport { PdfNumberStyle } from './../../pages/enum';\n/**\n * `PdfNumbersConvertor` for convert page number into numbers, roman letters, etc.,\n * @private\n */\nvar PdfNumbersConvertor = /** @class */ (function () {\n function PdfNumbersConvertor() {\n }\n // Static methods\n /**\n * Convert string value from page number with correct format.\n * @private\n */\n PdfNumbersConvertor.convert = function (intArabic, numberStyle) {\n var result = '';\n switch (numberStyle) {\n case PdfNumberStyle.None:\n result = '';\n break;\n case PdfNumberStyle.Numeric:\n result = intArabic.toString();\n break;\n case PdfNumberStyle.LowerLatin:\n result = this.arabicToLetter(intArabic).toLowerCase();\n break;\n case PdfNumberStyle.LowerRoman:\n result = this.arabicToRoman(intArabic).toLowerCase();\n break;\n case PdfNumberStyle.UpperLatin:\n result = this.arabicToLetter(intArabic);\n break;\n case PdfNumberStyle.UpperRoman:\n result = this.arabicToRoman(intArabic);\n break;\n }\n return result;\n };\n /**\n * Converts `arabic to roman` letters.\n * @private\n */\n PdfNumbersConvertor.arabicToRoman = function (intArabic) {\n var retval = '';\n retval += this.generateNumber(intArabic, 1000, 'M');\n retval += this.generateNumber(intArabic, 900, 'CM');\n retval += this.generateNumber(intArabic, 500, 'D');\n retval += this.generateNumber(intArabic, 400, 'CD');\n retval += this.generateNumber(intArabic, 100, 'C');\n retval += this.generateNumber(intArabic, 90, 'XC');\n retval += this.generateNumber(intArabic, 50, 'L');\n retval += this.generateNumber(intArabic, 40, 'XL');\n retval += this.generateNumber(intArabic, 10, 'X');\n retval += this.generateNumber(intArabic, 9, 'IX');\n retval += this.generateNumber(intArabic, 5, 'V');\n retval += this.generateNumber(intArabic, 4, 'IV');\n retval += this.generateNumber(intArabic, 1, 'I');\n return retval.toString();\n };\n /**\n * Converts `arabic to normal letters`.\n * @private\n */\n PdfNumbersConvertor.arabicToLetter = function (arabic) {\n var stack = this.convertToLetter(arabic);\n var result = '';\n while (stack.length > 0) {\n var num = stack.pop();\n result = this.appendChar(result, num);\n }\n return result.toString();\n };\n /**\n * Generate a string value of an input number.\n * @private\n */\n PdfNumbersConvertor.generateNumber = function (value, magnitude, letter) {\n var numberstring = '';\n while (value >= magnitude) {\n value -= magnitude;\n numberstring += letter;\n }\n return numberstring.toString();\n };\n /**\n * Convert a input number into letters.\n * @private\n */\n PdfNumbersConvertor.convertToLetter = function (arabic) {\n if (arabic <= 0) {\n throw Error('ArgumentOutOfRangeException-arabic, Value can not be less 0');\n }\n var stack = [];\n while (arabic > this.letterLimit) {\n var remainder = arabic % this.letterLimit;\n if (remainder === 0.0) {\n arabic = arabic / this.letterLimit - 1;\n remainder = this.letterLimit;\n }\n else {\n arabic /= this.letterLimit;\n }\n stack.push(remainder);\n }\n stack.push(arabic);\n return stack;\n };\n /**\n * Convert number to actual string value.\n * @private\n */\n PdfNumbersConvertor.appendChar = function (builder, value) {\n var letter = String.fromCharCode(PdfNumbersConvertor.acsiiStartIndex + value);\n builder += letter;\n return builder;\n };\n // Fields\n /**\n * numbers of letters in english [readonly].\n * @default = 26.0\n * @private\n */\n PdfNumbersConvertor.letterLimit = 26.0;\n /**\n * Resturns `acsii start index` value.\n * @default 64\n * @private\n */\n PdfNumbersConvertor.acsiiStartIndex = (65 - 1);\n return PdfNumbersConvertor;\n}());\nexport { PdfNumbersConvertor };\n","/**\n * Represent class to store information about `template and value pairs`.\n * @private\n */\nvar PdfTemplateValuePair = /** @class */ (function () {\n function PdfTemplateValuePair(template, value) {\n // Fields\n /**\n * Internal variable to store template.\n * @default null\n * @private\n */\n this.pdfTemplate = null;\n /**\n * Intenal variable to store value.\n * @private\n */\n this.content = '';\n if (typeof template === 'undefined') {\n //\n }\n else {\n this.template = template;\n this.value = value;\n }\n }\n Object.defineProperty(PdfTemplateValuePair.prototype, \"template\", {\n // Properties\n /**\n * Gets or sets the template.\n * @private\n */\n get: function () {\n return this.pdfTemplate;\n },\n set: function (value) {\n this.pdfTemplate = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfTemplateValuePair.prototype, \"value\", {\n /**\n * Gets or sets the value.\n * @private\n */\n get: function () {\n return this.content;\n },\n set: function (value) {\n this.content = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfTemplateValuePair;\n}());\nexport { PdfTemplateValuePair };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * PdfAutomaticField.ts class for EJ2-PDF\n */\nimport { PdfAutomaticField } from './automatic-field';\nimport { TemporaryDictionary } from './../../collections/object-object-pair/dictionary';\nimport { PdfTemplateValuePair } from './pdf-template-value-pair';\nimport { SizeF, PointF } from './../../drawing/pdf-drawing';\nimport { PdfTemplate } from './../../graphics/figures/pdf-template';\n/**\n * Represents automatic field which has the same value within the `PdfGraphics`.\n */\nvar PdfMultipleValueField = /** @class */ (function (_super) {\n __extends(PdfMultipleValueField, _super);\n function PdfMultipleValueField() {\n var _this = _super.call(this) || this;\n // Fields\n /**\n * Stores the instance of dictionary values of `graphics and template value pair`.\n * @private\n */\n _this.list = new TemporaryDictionary();\n return _this;\n }\n // Implementation\n /* tslint:disable */\n PdfMultipleValueField.prototype.performDraw = function (graphics, location, scalingX, scalingY) {\n _super.prototype.performDrawHelper.call(this, graphics, location, scalingX, scalingY);\n var value = this.getValue(graphics);\n var template = new PdfTemplate(this.getSize());\n this.list.setValue(graphics, new PdfTemplateValuePair(template, value));\n var g = template.graphics;\n var size = this.getSize();\n template.graphics.drawString(value, this.getFont(), this.pen, this.getBrush(), 0, 0, size.width, size.height, this.stringFormat);\n var drawLocation = new PointF(location.x + this.location.x, location.y + this.location.y);\n graphics.drawPdfTemplate(template, drawLocation, new SizeF(template.width * scalingX, template.height * scalingY));\n };\n return PdfMultipleValueField;\n}(PdfAutomaticField));\nexport { PdfMultipleValueField };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { PdfBrush } from './../../graphics/brushes/pdf-brush';\nimport { PdfNumberStyle } from './../../pages/enum';\nimport { PdfNumbersConvertor } from './pdf-numbers-convertor';\nimport { PdfMultipleValueField } from './multiple-value-field';\n/**\n * Represents PDF document `page number field`.\n * @public\n */\nvar PdfPageNumberField = /** @class */ (function (_super) {\n __extends(PdfPageNumberField, _super);\n function PdfPageNumberField(font, arg2) {\n var _this = _super.call(this) || this;\n // Fields\n /**\n * Stores the number style of the page number field.\n * @private\n */\n _this.internalNumberStyle = PdfNumberStyle.Numeric;\n if (typeof arg2 === 'undefined') {\n _this.font = font;\n }\n else if (arg2 instanceof PdfBrush) {\n _this.font = font;\n _this.brush = arg2;\n }\n else {\n _this.font = font;\n _this.bounds = arg2;\n }\n return _this;\n }\n Object.defineProperty(PdfPageNumberField.prototype, \"numberStyle\", {\n // Properties\n /**\n * Gets and sets the number style of the page number field.\n * @private\n */\n get: function () {\n return this.internalNumberStyle;\n },\n set: function (value) {\n this.internalNumberStyle = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Return the `string` value of page number field.\n * @public\n */\n PdfPageNumberField.prototype.getValue = function (graphics) {\n var result = null;\n var page = this.getPageFromGraphics(graphics);\n result = this.internalGetValue(page);\n return result;\n };\n /**\n * Internal method to `get actual value of page number`.\n * @private\n */\n PdfPageNumberField.prototype.internalGetValue = function (page) {\n var document = page.document;\n var pageIndex = document.pages.indexOf(page) + 1;\n return PdfNumbersConvertor.convert(pageIndex, this.numberStyle);\n };\n return PdfPageNumberField;\n}(PdfMultipleValueField));\nexport { PdfPageNumberField };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * PdfCompositeField.ts class for EJ2-PDF\n */\nimport { PdfMultipleValueField } from './multiple-value-field';\n/**\n * Represents class which can concatenate multiple automatic fields into single string.\n */\nvar PdfCompositeField = /** @class */ (function (_super) {\n __extends(PdfCompositeField, _super);\n // Constructor\n /**\n * Initialize a new instance of `PdfCompositeField` class.\n * @param font Font of the field.\n * @param brush Color of the field.\n * @param text Content of the field.\n * @param list List of the automatic fields in specific order based on the text content.\n */\n function PdfCompositeField(font, brush, text) {\n var list = [];\n for (var _i = 3; _i < arguments.length; _i++) {\n list[_i - 3] = arguments[_i];\n }\n var _this = _super.call(this) || this;\n // Fields\n /**\n * Stores the array of automatic fields.\n * @private\n */\n _this.internalAutomaticFields = null;\n /**\n * Stores the text value of the field.\n * @private\n */\n _this.internalText = '';\n _this.font = font;\n _this.brush = brush;\n _this.text = text;\n _this.automaticFields = list;\n return _this;\n }\n Object.defineProperty(PdfCompositeField.prototype, \"text\", {\n // Properties\n /**\n * Gets and sets the content of the field.\n * @public\n */\n get: function () {\n return this.internalText;\n },\n set: function (value) {\n this.internalText = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfCompositeField.prototype, \"automaticFields\", {\n /**\n * Gets and sets the list of the field to drawn.\n * @public\n */\n get: function () {\n return this.internalAutomaticFields;\n },\n set: function (value) {\n this.internalAutomaticFields = value;\n },\n enumerable: true,\n configurable: true\n });\n // Implementation\n /**\n * Return the actual value generated from the list of automatic fields.\n * @public\n */\n PdfCompositeField.prototype.getValue = function (graphics) {\n var values = [];\n var text = this.text.toString();\n if (typeof this.automaticFields !== 'undefined' && this.automaticFields != null && this.automaticFields.length > 0) {\n for (var i = 0; i < this.automaticFields.length; i++) {\n var automaticField = this.automaticFields[i];\n text = text.replace('{' + i + '}', automaticField.getValue(graphics));\n }\n }\n return text;\n };\n return PdfCompositeField;\n}(PdfMultipleValueField));\nexport { PdfCompositeField };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * PdfSingleValueField.ts class for EJ2-PDF\n */\nimport { PdfAutomaticField } from './automatic-field';\nimport { TemporaryDictionary } from './../../collections/object-object-pair/dictionary';\nimport { PdfTemplateValuePair } from './pdf-template-value-pair';\nimport { PointF, SizeF } from './../../drawing/pdf-drawing';\nimport { PdfTemplate } from './../../graphics/figures/pdf-template';\n/**\n * Represents automatic field which has the same value in the whole document.\n */\nvar PdfSingleValueField = /** @class */ (function (_super) {\n __extends(PdfSingleValueField, _super);\n // Constructors\n function PdfSingleValueField() {\n var _this = _super.call(this) || this;\n // Fields\n /* tslint:disable */\n _this.list = new TemporaryDictionary();\n /* tslint:enable */\n _this.painterGraphics = [];\n return _this;\n }\n PdfSingleValueField.prototype.performDraw = function (graphics, location, scalingX, scalingY) {\n _super.prototype.performDrawHelper.call(this, graphics, location, scalingX, scalingY);\n var page = this.getPageFromGraphics(graphics);\n var document = page.document;\n var textValue = this.getValue(graphics);\n /* tslint:disable */\n if (this.list.containsKey(document)) {\n var pair = this.list.getValue(document);\n var drawLocation = new PointF(location.x + this.location.x, location.y + this.location.y);\n graphics.drawPdfTemplate(pair.template, drawLocation, new SizeF(pair.template.width * scalingX, pair.template.height * scalingY));\n this.painterGraphics.push(graphics);\n }\n else {\n var size = this.getSize();\n var template = new PdfTemplate(size);\n this.list.setValue(document, new PdfTemplateValuePair(template, textValue));\n template.graphics.drawString(textValue, this.getFont(), this.pen, this.getBrush(), 0, 0, size.width, size.height, this.stringFormat);\n var drawLocation = new PointF(location.x + this.location.x, location.y + this.location.y);\n graphics.drawPdfTemplate(template, drawLocation, new SizeF(template.width * scalingX, template.height * scalingY));\n this.painterGraphics.push(graphics);\n }\n /* tslint:enable */\n };\n return PdfSingleValueField;\n}(PdfAutomaticField));\nexport { PdfSingleValueField };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * PdfPageCountField.ts class for EJ2-PDF\n */\nimport { PdfSingleValueField } from './single-value-field';\nimport { PdfNumberStyle } from './../../pages/enum';\nimport { PdfBrush } from './../../graphics/brushes/pdf-brush';\nimport { PdfNumbersConvertor } from './pdf-numbers-convertor';\n/**\n * Represents total PDF document page count automatic field.\n */\nvar PdfPageCountField = /** @class */ (function (_super) {\n __extends(PdfPageCountField, _super);\n function PdfPageCountField(font, arg2) {\n var _this = _super.call(this) || this;\n // Fields\n /**\n * Stores the number style of the field.\n * @private\n */\n _this.internalNumberStyle = PdfNumberStyle.Numeric;\n if (typeof arg2 === 'undefined') {\n _this.font = font;\n }\n else if (arg2 instanceof PdfBrush) {\n _this.font = font;\n _this.brush = arg2;\n }\n else {\n _this.font = font;\n _this.bounds = arg2;\n }\n return _this;\n }\n Object.defineProperty(PdfPageCountField.prototype, \"numberStyle\", {\n // Properties\n /**\n * Gets and sets the number style of the field.\n * @public\n */\n get: function () {\n return this.internalNumberStyle;\n },\n set: function (value) {\n this.internalNumberStyle = value;\n },\n enumerable: true,\n configurable: true\n });\n // Implementation\n /**\n * Return the actual value of the content to drawn.\n * @public\n */\n PdfPageCountField.prototype.getValue = function (graphics) {\n var result = null;\n var page = this.getPageFromGraphics(graphics);\n var document = page.section.parent.document;\n var count = document.pages.count;\n result = PdfNumbersConvertor.convert(count, this.numberStyle);\n return result;\n };\n return PdfPageCountField;\n}(PdfSingleValueField));\nexport { PdfPageCountField };\n","import { PointF, RectangleF } from './../drawing/pdf-drawing';\nimport { PdfArray } from './../primitives/pdf-array';\nimport { PdfPageRotateAngle } from './../pages/enum';\nimport { PdfDestinationMode } from './../general/enum';\nimport { PdfReferenceHolder } from './../primitives/pdf-reference';\nimport { PdfName } from './../primitives/pdf-name';\nimport { PdfNumber } from './../primitives/pdf-number';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\n/**\n * `PdfDestination` class represents an anchor in the document\n * where bookmarks or annotations can direct when clicked.\n */\nvar PdfDestination = /** @class */ (function () {\n function PdfDestination(arg1, arg2) {\n // Fields\n /**\n * Internal variable for accessing fields from `DictionryProperties` class.\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n /**\n * Type of the `destination`.\n * @private\n */\n this.destinationMode = PdfDestinationMode.Location;\n /**\n * `Zoom` factor.\n * @private\n * @default 0\n */\n this.zoomFactor = 0;\n /**\n * `Location` of the destination.\n * @default new PointF() with 0 ,0 as co-ordinates\n * @private\n */\n this.destinationLocation = new PointF(0, 0);\n /**\n * `Bounds` of the destination as RectangleF.\n * @default RectangleF.Empty\n * @private\n */\n this.bounds = new RectangleF();\n /**\n * Pdf primitive representing `this` object.\n * @private\n */\n this.array = new PdfArray();\n if (typeof arg2 === 'undefined') {\n var angle = PdfPageRotateAngle.RotateAngle0;\n this.destinationLocation = new PointF(0, this.destinationLocation.y);\n this.pdfPage = arg1;\n }\n else if (arg2 instanceof PointF) {\n this.constructor(arg1);\n this.destinationLocation = arg2;\n }\n else {\n this.constructor(arg1);\n this.bounds = arg2;\n }\n }\n Object.defineProperty(PdfDestination.prototype, \"zoom\", {\n // Properties\n /**\n * Gets and Sets the `zoom` factor.\n * @private\n */\n get: function () {\n return this.zoomFactor;\n },\n set: function (value) {\n this.zoomFactor = value;\n this.initializePrimitive();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDestination.prototype, \"page\", {\n /**\n * Gets and Sets the `page` object.\n * @private\n */\n get: function () {\n return this.pdfPage;\n },\n set: function (value) {\n this.pdfPage = value;\n this.initializePrimitive();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDestination.prototype, \"mode\", {\n /**\n * Gets and Sets the destination `mode`.\n * @private\n */\n get: function () {\n return this.destinationMode;\n },\n set: function (value) {\n this.destinationMode = value;\n this.initializePrimitive();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDestination.prototype, \"location\", {\n /**\n * Gets and Sets the `location`.\n * @private\n */\n get: function () {\n return this.destinationLocation;\n },\n set: function (value) {\n this.destinationLocation = value;\n this.initializePrimitive();\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Translates` co-ordinates to PDF co-ordinate system (lower/left).\n * @private\n */\n PdfDestination.prototype.pointToNativePdf = function (page, point) {\n var section = page.section;\n return section.pointToNativePdf(page, point);\n };\n /**\n * `In fills` array by correct values.\n * @private\n */\n PdfDestination.prototype.initializePrimitive = function () {\n this.array.clear();\n this.array.add(new PdfReferenceHolder(this.pdfPage));\n switch (this.destinationMode) {\n case PdfDestinationMode.Location:\n var simplePage = this.pdfPage;\n var point = new PointF();\n point = this.pointToNativePdf(simplePage, this.destinationLocation);\n this.array.add(new PdfName(this.dictionaryProperties.xyz));\n this.array.add(new PdfNumber(point.x));\n this.array.add(new PdfNumber(point.y));\n this.array.add(new PdfNumber(this.zoomFactor));\n break;\n case PdfDestinationMode.FitToPage:\n this.array.add(new PdfName(this.dictionaryProperties.fit));\n break;\n }\n };\n Object.defineProperty(PdfDestination.prototype, \"element\", {\n /**\n * Gets the `element` representing this object.\n * @private\n */\n get: function () {\n this.initializePrimitive();\n return this.array;\n },\n enumerable: true,\n configurable: true\n });\n return PdfDestination;\n}());\nexport { PdfDestination };\n","/**\n * public Enum for `PdfBorderOverlapStyle`.\n * @private\n */\nexport var PdfBorderOverlapStyle;\n(function (PdfBorderOverlapStyle) {\n /**\n * Specifies the type of `Overlap`.\n * @private\n */\n PdfBorderOverlapStyle[PdfBorderOverlapStyle[\"Overlap\"] = 0] = \"Overlap\";\n /**\n * Specifies the type of `Inside`.\n * @private\n */\n PdfBorderOverlapStyle[PdfBorderOverlapStyle[\"Inside\"] = 1] = \"Inside\";\n})(PdfBorderOverlapStyle || (PdfBorderOverlapStyle = {}));\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * PdfTrueTypeFont.ts class for EJ2-PDF\n */\nimport { UnicodeTrueTypeFont } from './unicode-true-type-font';\nimport { PdfFont } from './pdf-font';\nimport { PdfFontStyle } from './enum';\nimport { PdfDocument } from './../../document/pdf-document';\n//https://www.giftofspeed.com/base64-encoder/\nvar PdfTrueTypeFont = /** @class */ (function (_super) {\n __extends(PdfTrueTypeFont, _super);\n function PdfTrueTypeFont(base64String, size, style) {\n var _this = _super.call(this, size) || this;\n /**\n * Indicates whether the font is embedded or not.\n * @private\n */\n _this.isEmbedFont = false;\n /**\n * Indicates whether the font is unicoded or not.\n * @private\n */\n _this.isUnicode = true;\n if (style !== undefined) {\n _this.createFontInternal(base64String, style);\n }\n else {\n _this.createFontInternal(base64String, PdfFontStyle.Regular);\n }\n return _this;\n }\n PdfTrueTypeFont.prototype.equalsToFont = function (font) {\n var result = false;\n //let result : boolean = this.fontInternal.equalsToFont(font);\n return result;\n };\n PdfTrueTypeFont.prototype.getLineWidth = function (line, format) {\n var width = 0;\n // width = this.fontInternal.getLineWidth(line);\n // let size : number = metrics.getSize(format);\n // width *= (PdfFont.charSizeMultiplier * size);\n // width = this.applyFormatSettings(line, format, width);\n return width;\n };\n /**\n * Returns width of the char.\n */\n PdfTrueTypeFont.prototype.getCharWidth = function (charCode, format) {\n var codeWidth = this.fontInternal.getCharWidth(charCode);\n var size = this.metrics.getSize(format);\n codeWidth *= (0.001 * size);\n return codeWidth;\n };\n //Implementation\n PdfTrueTypeFont.prototype.createFontInternal = function (base64String, style) {\n this.fontInternal = new UnicodeTrueTypeFont(base64String, this.size);\n this.calculateStyle(style);\n this.initializeInternals();\n };\n PdfTrueTypeFont.prototype.calculateStyle = function (style) {\n var iStyle = this.fontInternal.ttfMetrics.macStyle;\n if ((style & PdfFontStyle.Underline) !== 0) {\n iStyle |= PdfFontStyle.Underline;\n }\n if ((style & PdfFontStyle.Strikeout) !== 0) {\n iStyle |= PdfFontStyle.Strikeout;\n }\n this.setStyle(iStyle);\n };\n PdfTrueTypeFont.prototype.initializeInternals = function () {\n var equalFont = null;\n if (PdfDocument.enableCache) {\n // Search for the similar fonts.\n equalFont = PdfDocument.cache.search(this);\n }\n var internals = null;\n // There is not equal font in the cache.\n if (equalFont !== null && equalFont !== undefined) {\n // Get the settings from the cached font.\n internals = equalFont.getInternals();\n var metrics = equalFont.metrics;\n metrics = metrics.clone();\n metrics.size = this.size;\n this.metrics = metrics;\n this.fontInternal = equalFont.fontInternal;\n }\n else {\n if (equalFont == null) {\n if (this.fontInternal instanceof UnicodeTrueTypeFont) {\n this.fontInternal.isEmbed = this.isEmbedFont;\n }\n this.fontInternal.createInternals();\n internals = this.fontInternal.getInternals();\n this.metrics = this.fontInternal.metrics;\n }\n }\n this.metrics.isUnicodeFont = true;\n this.setInternals(internals);\n //this.ttfReader = (this.fontInternal as UnicodeTrueTypeFont).ttfReader;\n };\n /**\n * Stores used symbols.\n */\n PdfTrueTypeFont.prototype.setSymbols = function (text) {\n var internalFont = this.fontInternal;\n if (internalFont != null) {\n internalFont.setSymbols(text);\n }\n };\n return PdfTrueTypeFont;\n}(PdfFont));\nexport { PdfTrueTypeFont };\n","/**\n * PdfPageTemplateElement.ts class for EJ2-Pdf\n */\nimport { PdfDockStyle, PdfAlignmentStyle, TemplateType } from './enum';\nimport { PointF, SizeF } from './../drawing/pdf-drawing';\nimport { PdfTemplate } from './../graphics/figures/pdf-template';\nimport { PdfPage } from './pdf-page';\nimport { RectangleF } from './../drawing/pdf-drawing';\n/**\n * Describes a `page template` object that can be used as header/footer, watermark or stamp.\n */\nvar PdfPageTemplateElement = /** @class */ (function () {\n /* tslint:disable */\n function PdfPageTemplateElement(arg1, arg2, arg3, arg4, arg5) {\n if (arg1 instanceof RectangleF && typeof arg2 === 'undefined') {\n this.constructor(arg1.x, arg1.y, arg1.width, arg1.height);\n }\n else if (arg1 instanceof RectangleF && arg2 instanceof PdfPage && typeof arg3 === 'undefined') {\n this.constructor(arg1.x, arg1.y, arg1.width, arg1.height, arg2);\n }\n else if (arg1 instanceof PointF && arg2 instanceof SizeF && typeof arg3 === 'undefined') {\n this.constructor(arg1.x, arg1.y, arg2.width, arg2.height);\n }\n else if (arg1 instanceof PointF && arg2 instanceof SizeF && arg3 instanceof PdfPage && typeof arg4 === 'undefined') {\n this.constructor(arg1.x, arg1.y, arg2.width, arg2.height, arg3);\n }\n else if (arg1 instanceof SizeF && typeof arg2 === 'undefined') {\n this.constructor(arg1.width, arg1.height);\n }\n else if (typeof arg1 === 'number' && typeof arg2 === 'number' && typeof arg3 === 'undefined') {\n this.constructor(0, 0, arg1, arg2);\n }\n else if (typeof arg1 === 'number' && typeof arg2 === 'number' && arg3 instanceof PdfPage && typeof arg4 === 'undefined') {\n this.constructor(0, 0, arg1, arg2, arg3);\n }\n else if (typeof arg1 === 'number' && typeof arg2 === 'number' && typeof arg3 === 'number' && typeof arg4 === 'number' && typeof arg5 === 'undefined') {\n this.x = arg1;\n this.y = arg2;\n this.pdfTemplate = new PdfTemplate(arg3, arg4);\n }\n else {\n this.x = arg1;\n this.y = arg2;\n this.pdfTemplate = new PdfTemplate(arg3, arg4);\n // this.graphics.colorSpace = this.page.document.colorSpace;\n }\n /* tslint:enable */\n }\n Object.defineProperty(PdfPageTemplateElement.prototype, \"dock\", {\n // Properties\n /**\n * Gets or sets the `dock style` of the page template element.\n * @private\n */\n get: function () {\n return this.dockStyle;\n },\n set: function (value) {\n // if (this.dockStyle !== value && this.Type === TemplateType.None) {\n this.dockStyle = value;\n // Reset alignment.\n this.resetAlignment();\n // }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"alignment\", {\n /**\n * Gets or sets `alignment` of the page template element.\n * @private\n */\n get: function () {\n return this.alignmentStyle;\n },\n set: function (value) {\n // if (this.alignmentStyle !== value) {\n this.setAlignment(value);\n // }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"foreground\", {\n /**\n * Indicates whether the page template is located `in front of the page layers or behind of it`.\n * @private\n */\n get: function () {\n return this.isForeground;\n },\n set: function (value) {\n // if (this.foreground !== value) {\n this.isForeground = value;\n // }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"background\", {\n /**\n * Indicates whether the page template is located `behind of the page layers or in front of it`.\n * @private\n */\n get: function () {\n return !this.isForeground;\n },\n set: function (value) {\n this.isForeground = !value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"location\", {\n /**\n * Gets or sets `location` of the page template element.\n * @private\n */\n get: function () {\n return this.currentLocation;\n },\n set: function (value) {\n if (this.type === TemplateType.None) {\n this.currentLocation = value;\n }\n else {\n //\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"x\", {\n /**\n * Gets or sets `X` co-ordinate of the template element on the page.\n * @private\n */\n get: function () {\n var value = (typeof this.currentLocation !== 'undefined') ? this.currentLocation.x : 0;\n return value;\n },\n set: function (value) {\n if (this.type === TemplateType.None) {\n this.currentLocation.x = value;\n }\n else {\n //\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"y\", {\n /**\n * Gets or sets `Y` co-ordinate of the template element on the page.\n * @private\n */\n get: function () {\n var value = (typeof this.currentLocation !== 'undefined') ? this.currentLocation.y : 0;\n return value;\n },\n set: function (value) {\n if (this.type === TemplateType.None) {\n this.currentLocation.y = value;\n }\n else {\n //\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"size\", {\n /**\n * Gets or sets `size` of the page template element.\n * @private\n */\n get: function () {\n return this.template.size;\n },\n set: function (value) {\n if (this.type === TemplateType.None) {\n this.template.reset(value);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"width\", {\n /**\n * Gets or sets `width` of the page template element.\n * @private\n */\n get: function () {\n return this.template.width;\n },\n set: function (value) {\n if (this.template.width !== value && this.type === TemplateType.None) {\n var size = this.template.size;\n size.width = value;\n this.template.reset(size);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"height\", {\n /**\n * Gets or sets `height` of the page template element.\n * @private\n */\n get: function () {\n return this.template.height;\n },\n set: function (value) {\n if (this.template.height !== value && this.type === TemplateType.None) {\n var size = this.template.size;\n size.height = value;\n this.template.reset(size);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"graphics\", {\n /**\n * Gets `graphics` context of the page template element.\n * @private\n */\n get: function () {\n return this.template.graphics;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"template\", {\n /**\n * Gets Pdf `template` object.\n * @private\n */\n get: function () {\n // if (typeof this.pdfTemplate === 'undefined' || this.pdfTemplate == null) {\n // this.pdfTemplate = new PdfTemplate(this.size);\n // }\n return this.pdfTemplate;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"type\", {\n /**\n * Gets or sets `type` of the usage of this page template.\n * @private\n */\n get: function () {\n return this.templateType;\n },\n set: function (value) {\n this.updateDocking(value);\n this.templateType = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"bounds\", {\n /**\n * Gets or sets `bounds` of the page template.\n * @public\n */\n get: function () {\n return new RectangleF(new PointF(this.x, this.y), this.size);\n },\n set: function (value) {\n if (this.type === TemplateType.None) {\n this.location = new PointF(value.x, value.y);\n this.size = new SizeF(value.width, value.height);\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Updates Dock` property if template is used as header/footer.\n * @private\n */\n PdfPageTemplateElement.prototype.updateDocking = function (type) {\n if (type !== TemplateType.None) {\n switch (type) {\n case TemplateType.Top:\n this.dock = PdfDockStyle.Top;\n break;\n case TemplateType.Bottom:\n this.dock = PdfDockStyle.Bottom;\n break;\n case TemplateType.Left:\n this.dock = PdfDockStyle.Left;\n break;\n case TemplateType.Right:\n this.dock = PdfDockStyle.Right;\n break;\n }\n this.resetAlignment();\n }\n };\n /**\n * `Resets alignment` of the template.\n * @private\n */\n PdfPageTemplateElement.prototype.resetAlignment = function () {\n this.alignment = PdfAlignmentStyle.None;\n };\n /**\n * `Sets alignment` of the template.\n * @private\n */\n PdfPageTemplateElement.prototype.setAlignment = function (alignment) {\n if (this.dock === PdfDockStyle.None) {\n this.alignmentStyle = alignment;\n }\n else {\n // Template is docked and alignment has been changed.\n var canBeSet = false;\n switch (this.dock) {\n case PdfDockStyle.Left:\n canBeSet = (alignment === PdfAlignmentStyle.TopLeft || alignment === PdfAlignmentStyle.MiddleLeft ||\n alignment === PdfAlignmentStyle.BottomLeft || alignment === PdfAlignmentStyle.None);\n break;\n case PdfDockStyle.Top:\n canBeSet = (alignment === PdfAlignmentStyle.TopLeft || alignment === PdfAlignmentStyle.TopCenter ||\n alignment === PdfAlignmentStyle.TopRight || alignment === PdfAlignmentStyle.None);\n break;\n case PdfDockStyle.Right:\n canBeSet = (alignment === PdfAlignmentStyle.TopRight || alignment === PdfAlignmentStyle.MiddleRight ||\n alignment === PdfAlignmentStyle.BottomRight || alignment === PdfAlignmentStyle.None);\n break;\n case PdfDockStyle.Bottom:\n canBeSet = (alignment === PdfAlignmentStyle.BottomLeft || alignment === PdfAlignmentStyle.BottomCenter\n || alignment === PdfAlignmentStyle.BottomRight || alignment === PdfAlignmentStyle.None);\n break;\n case PdfDockStyle.Fill:\n canBeSet = (alignment === PdfAlignmentStyle.MiddleCenter || alignment === PdfAlignmentStyle.None);\n break;\n }\n if (canBeSet) {\n this.alignmentStyle = alignment;\n }\n }\n };\n /**\n * Draws the template.\n * @private\n */\n PdfPageTemplateElement.prototype.draw = function (layer, document) {\n var page = layer.page;\n var bounds = this.calculateBounds(page, document);\n if (bounds.x === -0) {\n bounds.x = 0;\n }\n layer.graphics.drawPdfTemplate(this.template, new PointF(bounds.x, bounds.y), new SizeF(bounds.width, bounds.height));\n };\n /**\n * Calculates bounds of the page template.\n * @private\n */\n PdfPageTemplateElement.prototype.calculateBounds = function (page, document) {\n var result = this.bounds;\n if (this.alignmentStyle !== PdfAlignmentStyle.None) {\n result = this.getAlignmentBounds(page, document);\n }\n else if (this.dockStyle !== PdfDockStyle.None) {\n result = this.getDockBounds(page, document);\n }\n return result;\n };\n /**\n * Calculates bounds according to the alignment.\n * @private\n */\n PdfPageTemplateElement.prototype.getAlignmentBounds = function (page, document) {\n var result = this.bounds;\n if (this.type === TemplateType.None) {\n result = this.getSimpleAlignmentBounds(page, document);\n }\n else {\n result = this.getTemplateAlignmentBounds(page, document);\n }\n return result;\n };\n /**\n * Calculates bounds according to the alignment.\n * @private\n */\n PdfPageTemplateElement.prototype.getSimpleAlignmentBounds = function (page, document) {\n var bounds = this.bounds;\n var pdfSection = page.section;\n var actualBounds = pdfSection.getActualBounds(document, page, false);\n var x = this.x;\n var y = this.y;\n switch (this.alignmentStyle) {\n case PdfAlignmentStyle.TopLeft:\n x = 0;\n y = 0;\n break;\n case PdfAlignmentStyle.TopCenter:\n x = (actualBounds.width - this.width) / 2;\n y = 0;\n break;\n case PdfAlignmentStyle.TopRight:\n x = actualBounds.width - this.width;\n y = 0;\n break;\n case PdfAlignmentStyle.MiddleLeft:\n x = 0;\n y = (actualBounds.height - this.height) / 2;\n break;\n case PdfAlignmentStyle.MiddleCenter:\n x = (actualBounds.width - this.width) / 2;\n y = (actualBounds.height - this.height) / 2;\n break;\n case PdfAlignmentStyle.MiddleRight:\n x = actualBounds.width - this.width;\n y = (actualBounds.height - this.height) / 2;\n break;\n case PdfAlignmentStyle.BottomLeft:\n x = 0;\n y = actualBounds.height - this.height;\n break;\n case PdfAlignmentStyle.BottomCenter:\n x = (actualBounds.width - this.width) / 2;\n y = actualBounds.height - this.height;\n break;\n case PdfAlignmentStyle.BottomRight:\n x = actualBounds.width - this.width;\n y = actualBounds.height - this.height;\n break;\n }\n bounds.x = x;\n bounds.y = y;\n return bounds;\n };\n /**\n * Calculates bounds according to the alignment.\n * @private\n */\n PdfPageTemplateElement.prototype.getTemplateAlignmentBounds = function (page, document) {\n var result = this.bounds;\n var section = page.section;\n var actualBounds = section.getActualBounds(document, page, false);\n var x = this.x;\n var y = this.y;\n switch (this.alignmentStyle) {\n case PdfAlignmentStyle.TopLeft:\n if (this.type === TemplateType.Left) {\n x = -actualBounds.x;\n y = 0;\n }\n else if (this.type === TemplateType.Top) {\n x = -actualBounds.x;\n y = -actualBounds.y;\n }\n break;\n case PdfAlignmentStyle.TopCenter:\n x = (actualBounds.width - this.width) / 2;\n y = -actualBounds.y;\n break;\n case PdfAlignmentStyle.TopRight:\n if (this.type === TemplateType.Right) {\n x = actualBounds.width + section.getRightIndentWidth(document, page, false) - this.width;\n y = 0;\n }\n else if (this.type === TemplateType.Top) {\n x = actualBounds.width + section.getRightIndentWidth(document, page, false) - this.width;\n y = -actualBounds.y;\n }\n break;\n case PdfAlignmentStyle.MiddleLeft:\n x = -actualBounds.x;\n y = (actualBounds.height - this.height) / 2;\n break;\n case PdfAlignmentStyle.MiddleCenter:\n x = (actualBounds.width - this.width) / 2;\n y = (actualBounds.height - this.height) / 2;\n break;\n case PdfAlignmentStyle.MiddleRight:\n x = actualBounds.width + section.getRightIndentWidth(document, page, false) - this.width;\n y = (actualBounds.height - this.height) / 2;\n break;\n case PdfAlignmentStyle.BottomLeft:\n if (this.type === TemplateType.Left) {\n x = -actualBounds.x;\n y = actualBounds.height - this.height;\n }\n else if (this.type === TemplateType.Bottom) {\n x = -actualBounds.x;\n y = actualBounds.height + section.getBottomIndentHeight(document, page, false) - this.height;\n }\n break;\n case PdfAlignmentStyle.BottomCenter:\n x = (actualBounds.width - this.width) / 2;\n y = actualBounds.height + section.getBottomIndentHeight(document, page, false) - this.height;\n break;\n case PdfAlignmentStyle.BottomRight:\n if (this.type === TemplateType.Right) {\n x = actualBounds.width + section.getRightIndentWidth(document, page, false) - this.width;\n y = actualBounds.height - this.height;\n }\n else if (this.type === TemplateType.Bottom) {\n x = actualBounds.width + section.getRightIndentWidth(document, page, false) - this.width;\n y = actualBounds.height + section.getBottomIndentHeight(document, page, false) - this.height;\n }\n break;\n }\n result.x = x;\n result.y = y;\n return result;\n };\n /**\n * Calculates bounds according to the docking.\n * @private\n */\n PdfPageTemplateElement.prototype.getDockBounds = function (page, document) {\n var result = this.bounds;\n if (this.type === TemplateType.None) {\n result = this.getSimpleDockBounds(page, document);\n }\n else {\n result = this.getTemplateDockBounds(page, document);\n }\n return result;\n };\n /**\n * Calculates bounds according to the docking.\n * @private\n */\n PdfPageTemplateElement.prototype.getSimpleDockBounds = function (page, document) {\n var result = this.bounds;\n var section = page.section;\n var actualBounds = section.getActualBounds(document, page, false);\n var x = this.x;\n var y = this.y;\n var width = this.width;\n var height = this.height;\n switch (this.dockStyle) {\n case PdfDockStyle.Left:\n x = 0;\n y = 0;\n width = this.width;\n height = actualBounds.height;\n break;\n case PdfDockStyle.Top:\n x = 0;\n y = 0;\n width = actualBounds.width;\n height = this.height;\n break;\n case PdfDockStyle.Right:\n x = actualBounds.width - this.width;\n y = 0;\n width = this.width;\n height = actualBounds.height;\n break;\n case PdfDockStyle.Bottom:\n x = 0;\n y = actualBounds.height - this.height;\n width = actualBounds.width;\n height = this.height;\n break;\n case PdfDockStyle.Fill:\n x = 0;\n x = 0;\n width = actualBounds.width;\n height = actualBounds.height;\n break;\n }\n result = new RectangleF(x, y, width, height);\n return result;\n };\n /**\n * Calculates template bounds basing on docking if template is a page template.\n * @private\n */\n PdfPageTemplateElement.prototype.getTemplateDockBounds = function (page, document) {\n var result = this.bounds;\n var section = page.section;\n var actualBounds = section.getActualBounds(document, page, false);\n var actualSize = section.pageSettings.getActualSize();\n var x = this.x;\n var y = this.y;\n var width = this.width;\n var height = this.height;\n switch (this.dockStyle) {\n case PdfDockStyle.Left:\n x = -actualBounds.x;\n y = 0;\n width = this.width;\n height = actualBounds.height;\n break;\n case PdfDockStyle.Top:\n x = -actualBounds.x;\n y = -actualBounds.y;\n width = actualSize.width;\n height = this.height;\n if (actualBounds.height < 0) {\n y = -actualBounds.y + actualSize.height;\n }\n break;\n case PdfDockStyle.Right:\n x = actualBounds.width + section.getRightIndentWidth(document, page, false) - this.width;\n y = 0;\n width = this.width;\n height = actualBounds.height;\n break;\n case PdfDockStyle.Bottom:\n x = -actualBounds.x;\n y = actualBounds.height + section.getBottomIndentHeight(document, page, false) - this.height;\n width = actualSize.width;\n height = this.height;\n if (actualBounds.height < 0) {\n y -= actualSize.height;\n }\n break;\n case PdfDockStyle.Fill:\n x = 0;\n x = 0;\n width = actualBounds.width;\n height = actualBounds.height;\n break;\n }\n result = new RectangleF(x, y, width, height);\n return result;\n };\n return PdfPageTemplateElement;\n}());\nexport { PdfPageTemplateElement };\n","/**\n * PdfBorders.ts class for EJ2-PDF\n */\nimport { PdfPen } from './../../../graphics/pdf-pen';\nimport { PdfDashStyle } from './../../../graphics/enum';\nimport { PdfColor } from './../../../graphics/pdf-color';\n/**\n * `PdfBorders` class used represents the cell border of the PDF grid.\n */\nvar PdfBorders = /** @class */ (function () {\n // Constructor\n /**\n * Create a new instance for `PdfBorders` class.\n * @private\n */\n function PdfBorders() {\n var defaultBorderPenLeft = new PdfPen(new PdfColor(0, 0, 0));\n defaultBorderPenLeft.dashStyle = PdfDashStyle.Solid;\n var defaultBorderPenRight = new PdfPen(new PdfColor(0, 0, 0));\n defaultBorderPenRight.dashStyle = PdfDashStyle.Solid;\n var defaultBorderPenTop = new PdfPen(new PdfColor(0, 0, 0));\n defaultBorderPenTop.dashStyle = PdfDashStyle.Solid;\n var defaultBorderPenBottom = new PdfPen(new PdfColor(0, 0, 0));\n defaultBorderPenBottom.dashStyle = PdfDashStyle.Solid;\n this.leftPen = defaultBorderPenLeft;\n this.rightPen = defaultBorderPenRight;\n this.topPen = defaultBorderPenTop;\n this.bottomPen = defaultBorderPenBottom;\n }\n Object.defineProperty(PdfBorders.prototype, \"left\", {\n // Properties\n /**\n * Gets or sets the `Left`.\n * @private\n */\n get: function () {\n return this.leftPen;\n },\n set: function (value) {\n this.leftPen = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfBorders.prototype, \"right\", {\n /**\n * Gets or sets the `Right`.\n * @private\n */\n get: function () {\n return this.rightPen;\n },\n set: function (value) {\n this.rightPen = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfBorders.prototype, \"top\", {\n /**\n * Gets or sets the `Top`.\n * @private\n */\n get: function () {\n return this.topPen;\n },\n set: function (value) {\n this.topPen = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfBorders.prototype, \"bottom\", {\n /**\n * Gets or sets the `Bottom`.\n * @private\n */\n get: function () {\n return this.bottomPen;\n },\n set: function (value) {\n this.bottomPen = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfBorders.prototype, \"all\", {\n /**\n * sets the `All`.\n * @private\n */\n set: function (value) {\n this.leftPen = this.rightPen = this.topPen = this.bottomPen = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfBorders.prototype, \"isAll\", {\n /**\n * Gets a value indicating whether this instance `is all`.\n * @private\n */\n get: function () {\n return ((this.leftPen === this.rightPen) && (this.leftPen === this.topPen) && (this.leftPen === this.bottomPen));\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfBorders, \"default\", {\n /**\n * Gets the `default`.\n * @private\n */\n get: function () {\n return new PdfBorders();\n },\n enumerable: true,\n configurable: true\n });\n return PdfBorders;\n}());\nexport { PdfBorders };\nvar PdfPaddings = /** @class */ (function () {\n function PdfPaddings(left, right, top, bottom) {\n if (typeof left === 'undefined') {\n //5.76 and 0 are taken from ms-word default table margins.\n this.leftPad = this.rightPad = 5.76;\n //0.5 is set for top and bottom by default.\n this.bottom = this.topPad = 0.5;\n }\n else {\n this.leftPad = left;\n this.rightPad = right;\n this.topPad = top;\n this.bottomPad = bottom;\n }\n }\n Object.defineProperty(PdfPaddings.prototype, \"left\", {\n // Properties\n /**\n * Gets or sets the `left` value of the edge\n * @private\n */\n get: function () {\n return this.leftPad;\n },\n set: function (value) {\n this.leftPad = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPaddings.prototype, \"right\", {\n /**\n * Gets or sets the `right` value of the edge.\n * @private\n */\n get: function () {\n return this.rightPad;\n },\n set: function (value) {\n this.rightPad = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPaddings.prototype, \"top\", {\n /**\n * Gets or sets the `top` value of the edge\n * @private\n */\n get: function () {\n return this.topPad;\n },\n set: function (value) {\n this.topPad = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPaddings.prototype, \"bottom\", {\n /**\n * Gets or sets the `bottom` value of the edge.\n * @private\n */\n get: function () {\n return this.bottomPad;\n },\n set: function (value) {\n this.bottomPad = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPaddings.prototype, \"all\", {\n /**\n * Sets value to all sides `left,right,top and bottom`.s\n * @private\n */\n set: function (value) {\n this.leftPad = this.rightPad = this.topPad = this.bottomPad = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfPaddings;\n}());\nexport { PdfPaddings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { PdfBorders, PdfPaddings } from './pdf-borders';\nimport { PdfBorderOverlapStyle } from './../../tables/light-tables/enum';\n/**\n * Base class for the `grid style`,\n */\nvar PdfGridStyleBase = /** @class */ (function () {\n function PdfGridStyleBase() {\n }\n Object.defineProperty(PdfGridStyleBase.prototype, \"backgroundBrush\", {\n // Properties\n /**\n * Gets or sets the `background brush`.\n * @private\n */\n get: function () {\n return this.gridBackgroundBrush;\n },\n set: function (value) {\n this.gridBackgroundBrush = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridStyleBase.prototype, \"textBrush\", {\n /**\n * Gets or sets the `text brush`.\n * @private\n */\n get: function () {\n return this.gridTextBrush;\n },\n set: function (value) {\n this.gridTextBrush = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridStyleBase.prototype, \"textPen\", {\n /**\n * Gets or sets the `text pen`.\n * @private\n */\n get: function () {\n return this.gridTextPen;\n },\n set: function (value) {\n this.gridTextPen = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridStyleBase.prototype, \"font\", {\n /**\n * Gets or sets the `font`.\n * @private\n */\n get: function () {\n return this.gridFont;\n },\n set: function (value) {\n this.gridFont = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfGridStyleBase;\n}());\nexport { PdfGridStyleBase };\n/**\n * `PdfGridStyle` class provides customization of the appearance for the 'PdfGrid'.\n */\nvar PdfGridStyle = /** @class */ (function (_super) {\n __extends(PdfGridStyle, _super);\n //constructor\n /**\n * Initialize a new instance for `PdfGridStyle` class.\n * @private\n */\n function PdfGridStyle() {\n var _this = _super.call(this) || this;\n _this.gridBorderOverlapStyle = PdfBorderOverlapStyle.Overlap;\n _this.bAllowHorizontalOverflow = false;\n _this.gridHorizontalOverflowType = PdfHorizontalOverflowType.LastPage;\n return _this;\n }\n Object.defineProperty(PdfGridStyle.prototype, \"cellSpacing\", {\n //Properties\n /**\n * Gets or sets the `cell spacing` of the 'PdfGrid'.\n * @private\n */\n get: function () {\n if (typeof this.gridCellSpacing === 'undefined') {\n this.gridCellSpacing = 0;\n }\n return this.gridCellSpacing;\n },\n set: function (value) {\n this.gridCellSpacing = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridStyle.prototype, \"horizontalOverflowType\", {\n /**\n * Gets or sets the type of the `horizontal overflow` of the 'PdfGrid'.\n * @private\n */\n get: function () {\n return this.gridHorizontalOverflowType;\n },\n set: function (value) {\n this.gridHorizontalOverflowType = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridStyle.prototype, \"allowHorizontalOverflow\", {\n /**\n * Gets or sets a value indicating whether to `allow horizontal overflow`.\n * @private\n */\n get: function () {\n return this.bAllowHorizontalOverflow;\n },\n set: function (value) {\n this.bAllowHorizontalOverflow = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridStyle.prototype, \"cellPadding\", {\n /**\n * Gets or sets the `cell padding`.\n * @private\n */\n get: function () {\n if (typeof this.gridCellPadding === 'undefined') {\n this.gridCellPadding = new PdfPaddings();\n }\n return this.gridCellPadding;\n },\n set: function (value) {\n if (typeof this.gridCellPadding === 'undefined') {\n this.gridCellPadding = new PdfPaddings();\n this.gridCellPadding = value;\n }\n else {\n this.gridCellPadding = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridStyle.prototype, \"borderOverlapStyle\", {\n /**\n * Gets or sets the `border overlap style` of the 'PdfGrid'.\n * @private\n */\n get: function () {\n return this.gridBorderOverlapStyle;\n },\n set: function (value) {\n this.gridBorderOverlapStyle = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfGridStyle;\n}(PdfGridStyleBase));\nexport { PdfGridStyle };\n/**\n * `PdfGridCellStyle` class provides customization of the appearance for the 'PdfGridCell'.\n */\nvar PdfGridCellStyle = /** @class */ (function (_super) {\n __extends(PdfGridCellStyle, _super);\n /**\n * Initializes a new instance of the `PdfGridCellStyle` class.\n * @private\n */\n function PdfGridCellStyle() {\n var _this = _super.call(this) || this;\n /**\n * @hidden\n * @private\n */\n _this.gridCellBorders = PdfBorders.default;\n return _this;\n }\n Object.defineProperty(PdfGridCellStyle.prototype, \"stringFormat\", {\n //Properties\n /**\n * Gets the `string format` of the 'PdfGridCell'.\n * @private\n */\n get: function () {\n return this.format;\n },\n set: function (value) {\n this.format = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCellStyle.prototype, \"borders\", {\n /**\n * Gets or sets the `border` of the 'PdfGridCell'.\n * @private\n */\n get: function () {\n return this.gridCellBorders;\n },\n set: function (value) {\n this.gridCellBorders = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCellStyle.prototype, \"cellPadding\", {\n /**\n * Gets or sets the `cell padding`.\n * @private\n */\n get: function () {\n return this.gridCellPadding;\n },\n set: function (value) {\n if (this.gridCellPadding == null || typeof this.gridCellPadding === 'undefined') {\n this.gridCellPadding = new PdfPaddings();\n }\n this.gridCellPadding = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfGridCellStyle;\n}(PdfGridStyleBase));\nexport { PdfGridCellStyle };\n/**\n * `PdfGridRowStyle` class provides customization of the appearance for the `PdfGridRow`.\n */\nvar PdfGridRowStyle = /** @class */ (function () {\n // Constructor\n /**\n * Initializes a new instance of the `PdfGridRowStyle` class.\n * @private\n */\n function PdfGridRowStyle() {\n //\n }\n Object.defineProperty(PdfGridRowStyle.prototype, \"backgroundBrush\", {\n /**\n * Determine the value of the border is changed or not.\n * @private\n */\n // Properties\n /**\n * Gets or sets the `background brush`.\n * @private\n */\n get: function () {\n return this.gridRowBackgroundBrush;\n },\n enumerable: true,\n configurable: true\n });\n PdfGridRowStyle.prototype.setBackgroundBrush = function (value) {\n this.gridRowBackgroundBrush = value;\n if (typeof this.parent !== 'undefined') {\n for (var i = 0; i < this.parent.cells.count; i++) {\n this.parent.cells.getCell(i).style.backgroundBrush = value;\n }\n }\n };\n Object.defineProperty(PdfGridRowStyle.prototype, \"textBrush\", {\n /**\n * Gets or sets the `text brush`.\n * @private\n */\n get: function () {\n return this.gridRowTextBrush;\n },\n enumerable: true,\n configurable: true\n });\n PdfGridRowStyle.prototype.setTextBrush = function (value) {\n this.gridRowTextBrush = value;\n if (typeof this.parent !== 'undefined') {\n for (var i = 0; i < this.parent.cells.count; i++) {\n this.parent.cells.getCell(i).style.textBrush = value;\n }\n }\n };\n Object.defineProperty(PdfGridRowStyle.prototype, \"textPen\", {\n /**\n * Gets or sets the `text pen`.\n * @private\n */\n get: function () {\n return this.gridRowTextPen;\n },\n enumerable: true,\n configurable: true\n });\n PdfGridRowStyle.prototype.setTextPen = function (value) {\n this.gridRowTextPen = value;\n if (typeof this.parent !== 'undefined') {\n for (var i = 0; i < this.parent.cells.count; i++) {\n this.parent.cells.getCell(i).style.textPen = value;\n }\n }\n };\n Object.defineProperty(PdfGridRowStyle.prototype, \"font\", {\n /**\n * Gets or sets the `font`.\n * @private\n */\n get: function () {\n return this.gridRowFont;\n },\n enumerable: true,\n configurable: true\n });\n PdfGridRowStyle.prototype.setFont = function (value) {\n this.gridRowFont = value;\n if (typeof this.parent !== 'undefined') {\n for (var i = 0; i < this.parent.cells.count; i++) {\n this.parent.cells.getCell(i).style.font = value;\n }\n }\n };\n Object.defineProperty(PdfGridRowStyle.prototype, \"border\", {\n /**\n * Gets or sets the `border` of the current row.\n * @private\n */\n get: function () {\n if (typeof this.gridRowBorder === 'undefined') {\n this.setBorder(new PdfBorders());\n }\n return this.gridRowBorder;\n },\n enumerable: true,\n configurable: true\n });\n PdfGridRowStyle.prototype.setBorder = function (value) {\n this.gridRowBorder = value;\n if (typeof this.parent !== 'undefined') {\n for (var i = 0; i < this.parent.cells.count; i++) {\n this.parent.cells.getCell(i).style.borders = value;\n }\n }\n };\n /**\n * sets the `parent row` of the current object.\n * @private\n */\n PdfGridRowStyle.prototype.setParent = function (parent) {\n this.parent = parent;\n };\n return PdfGridRowStyle;\n}());\nexport { PdfGridRowStyle };\n/**\n * public Enum for `PdfHorizontalOverflowType`.\n * @private\n */\nexport var PdfHorizontalOverflowType;\n(function (PdfHorizontalOverflowType) {\n /**\n * Specifies the type of `NextPage`.\n * @private\n */\n PdfHorizontalOverflowType[PdfHorizontalOverflowType[\"NextPage\"] = 0] = \"NextPage\";\n /**\n * Specifies the type of `LastPage`.\n * @private\n */\n PdfHorizontalOverflowType[PdfHorizontalOverflowType[\"LastPage\"] = 1] = \"LastPage\";\n})(PdfHorizontalOverflowType || (PdfHorizontalOverflowType = {}));\n","import { PdfGridCellStyle } from './styles/style';\nimport { PdfStringLayouter } from './../../graphics/fonts/string-layouter';\nimport { PdfDocument } from './../../document/pdf-document';\nimport { PdfStringFormat } from './../../graphics/fonts/pdf-string-format';\nimport { RectangleF, PointF, SizeF } from './../../drawing/pdf-drawing';\nimport { PdfDashStyle, PdfLineCap } from './../../graphics/enum';\nimport { PdfBorderOverlapStyle } from './../tables/light-tables/enum';\nimport { PdfSolidBrush } from './../../graphics/brushes/pdf-solid-brush';\nimport { PdfColor } from './../../graphics/pdf-color';\nimport { PdfImage } from './../../graphics/images/pdf-image';\nimport { PdfBitmap } from './../../graphics/images/pdf-bitmap';\nimport { PdfTextWebLink } from './../../annotations/pdf-text-web-link';\n/**\n * `PdfGridCell` class represents the schema of a cell in a 'PdfGrid'.\n */\nvar PdfGridCell = /** @class */ (function () {\n function PdfGridCell(row) {\n /**\n * `Width` of the cell.\n * @default 0\n * @private\n */\n this.cellWidth = 0;\n /**\n * `Height` of the cell.\n * @default 0\n * @private\n */\n this.cellHeight = 0;\n /**\n * Specifies weather the `cell is drawn`.\n * @default true\n * @private\n */\n this.finsh = true;\n /**\n * The `remaining height` of row span.\n * @default 0\n * @private\n */\n this.rowSpanRemainingHeight = 0;\n if (typeof row === 'undefined') {\n this.gridRowSpan = 1;\n this.colSpan = 1;\n }\n else {\n this.constructor();\n this.gridRow = row;\n }\n }\n Object.defineProperty(PdfGridCell.prototype, \"isCellMergeContinue\", {\n //Properties\n get: function () {\n return this.internalIsCellMergeContinue;\n },\n set: function (value) {\n this.internalIsCellMergeContinue = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"isRowMergeContinue\", {\n get: function () {\n return this.internalIsRowMergeContinue;\n },\n set: function (value) {\n this.internalIsRowMergeContinue = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"isCellMergeStart\", {\n get: function () {\n return this.internalIsCellMergeStart;\n },\n set: function (value) {\n this.internalIsCellMergeStart = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"isRowMergeStart\", {\n get: function () {\n return this.internalIsRowMergeStart;\n },\n set: function (value) {\n this.internalIsRowMergeStart = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"remainingString\", {\n /**\n * Gets or sets the `remaining string` after the row split between pages.\n * @private\n */\n get: function () {\n return this.remaining;\n },\n set: function (value) {\n this.remaining = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"stringFormat\", {\n /**\n * Gets or sets the `string format`.\n * @private\n */\n get: function () {\n if (this.format == null) {\n this.format = new PdfStringFormat();\n }\n return this.format;\n },\n set: function (value) {\n this.format = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"row\", {\n /**\n * Gets or sets the parent `row`.\n * @private\n */\n get: function () {\n return this.gridRow;\n },\n set: function (value) {\n this.gridRow = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"value\", {\n /**\n * Gets or sets the `value` of the cell.\n * @private\n */\n get: function () {\n return this.objectValue;\n },\n set: function (value) {\n this.objectValue = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"rowSpan\", {\n /**\n * Gets or sets a value that indicates the total number of rows that cell `spans` within a PdfGrid.\n * @private\n */\n get: function () {\n return this.gridRowSpan;\n },\n set: function (value) {\n if (value < 1) {\n throw new Error('ArgumentException : Invalid span specified, must be greater than or equal to 1');\n }\n else {\n this.gridRowSpan = value;\n this.row.rowSpanExists = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"style\", {\n /**\n * Gets or sets the cell `style`.\n * @private\n */\n get: function () {\n if (this.cellStyle == null) {\n this.cellStyle = new PdfGridCellStyle();\n }\n return this.cellStyle;\n },\n set: function (value) {\n this.cellStyle = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"height\", {\n /**\n * Gets the `height` of the PdfGrid cell.[Read-Only].\n * @private\n */\n get: function () {\n if (this.cellHeight === 0) {\n this.cellHeight = this.measureHeight();\n }\n return this.cellHeight;\n },\n set: function (value) {\n this.cellHeight = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"columnSpan\", {\n /**\n * Gets or sets a value that indicates the total number of columns that cell `spans` within a PdfGrid.\n * @private\n */\n get: function () {\n return this.colSpan;\n },\n set: function (value) {\n if (value < 1) {\n throw Error('Invalid span specified, must be greater than or equal to 1');\n }\n else {\n this.colSpan = value;\n this.row.columnSpanExists = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"width\", {\n /**\n * Gets the `width` of the PdfGrid cell.[Read-Only].\n * @private\n */\n get: function () {\n if (this.cellWidth === 0 || this.row.grid.isComplete) {\n this.cellWidth = this.measureWidth();\n }\n return this.cellWidth;\n },\n set: function (value) {\n this.cellWidth = value;\n },\n enumerable: true,\n configurable: true\n });\n //Implementation\n /**\n * `Calculates the width`.\n * @private\n */\n PdfGridCell.prototype.measureWidth = function () {\n // .. Calculate the cell text width.\n // .....Add border widths, cell spacings and paddings to the width.\n var width = 0;\n var layouter = new PdfStringLayouter();\n if (typeof this.objectValue === 'string') {\n /* tslint:disable */\n var slr = layouter.layout(this.objectValue, this.getTextFont(), this.stringFormat, new SizeF(0, 0), false, new SizeF(0, 0));\n width += slr.actualSize.width;\n width += (this.style.borders.left.width + this.style.borders.right.width) * 2;\n }\n else if (this.objectValue instanceof PdfImage || this.objectValue instanceof PdfBitmap) {\n width += this.objectValue.width;\n }\n else if (this.objectValue instanceof PdfTextWebLink) {\n var webLink = this.objectValue;\n var result = layouter.layout(webLink.text, webLink.font, webLink.stringFormat, new SizeF(0, 0), false, new SizeF(0, 0));\n /* tslint:enable */\n width += result.actualSize.width;\n width += (this.style.borders.left.width + this.style.borders.right.width) * 2;\n }\n width += (this.row.grid.style.cellPadding.left + this.row.grid.style.cellPadding.right);\n width += this.row.grid.style.cellSpacing;\n return width;\n };\n /**\n * Draw the `cell background`.\n * @private\n */\n PdfGridCell.prototype.drawCellBackground = function (graphics, bounds) {\n var backgroundBrush = this.getBackgroundBrush();\n if (backgroundBrush != null) {\n graphics.drawRectangle(backgroundBrush, bounds.x, bounds.y, bounds.width, bounds.height);\n }\n };\n /**\n * `Adjusts the text layout area`.\n * @private\n */\n /* tslint:disable */\n PdfGridCell.prototype.adjustContentLayoutArea = function (bounds) {\n //Add Padding value to its Cell Bounds\n var returnBounds = new RectangleF(bounds.x, bounds.y, bounds.width, bounds.height);\n if (typeof this.style.cellPadding === 'undefined' || this.style.cellPadding == null) {\n returnBounds.x += this.gridRow.grid.style.cellPadding.left + this.cellStyle.borders.left.width;\n returnBounds.y += this.gridRow.grid.style.cellPadding.top + this.cellStyle.borders.top.width;\n returnBounds.width -= (this.gridRow.grid.style.cellPadding.right + this.gridRow.grid.style.cellPadding.left);\n returnBounds.width -= (this.cellStyle.borders.left.width + this.cellStyle.borders.right.width);\n returnBounds.height -= (this.gridRow.grid.style.cellPadding.bottom + this.gridRow.grid.style.cellPadding.top);\n returnBounds.height -= (this.cellStyle.borders.top.width + this.cellStyle.borders.bottom.width);\n if (this.rowSpan === 1) {\n returnBounds.width -= (this.style.borders.left.width);\n }\n }\n else {\n returnBounds.x += this.style.cellPadding.left + this.cellStyle.borders.left.width;\n returnBounds.y += this.style.cellPadding.top + this.cellStyle.borders.top.width;\n returnBounds.width -= (this.style.cellPadding.right + this.style.cellPadding.left);\n returnBounds.width -= (this.cellStyle.borders.left.width + this.cellStyle.borders.right.width);\n returnBounds.height -= (this.style.cellPadding.bottom + this.style.cellPadding.top);\n returnBounds.height -= (this.cellStyle.borders.top.width + this.cellStyle.borders.bottom.width);\n if (this.rowSpan === 1) {\n returnBounds.width -= (this.style.borders.left.width);\n }\n }\n return returnBounds;\n };\n /**\n * `Draws` the specified graphics.\n * @private\n */\n PdfGridCell.prototype.draw = function (graphics, bounds, cancelSubsequentSpans) {\n var isrowbreak = false;\n var result = null;\n if (this.internalIsCellMergeContinue || this.internalIsRowMergeContinue) {\n if (this.internalIsCellMergeContinue && this.row.grid.style.allowHorizontalOverflow) {\n if ((this.row.rowOverflowIndex > 0 && (this.row.cells.indexOf(this) != this.row.rowOverflowIndex + 1)) || (this.row.rowOverflowIndex == 0 && this.internalIsCellMergeContinue)) {\n return result;\n }\n }\n else {\n return result;\n }\n }\n //Adjust bounds with Row and Column Spacing\n bounds = this.adjustOuterLayoutArea(bounds, graphics);\n var textPen = this.getTextPen();\n var textBrush = this.getTextBrush();\n if (typeof textPen === 'undefined' && typeof textBrush === 'undefined') {\n textBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n }\n var font = this.getTextFont();\n var strFormat = this.getStringFormat();\n var innerLayoutArea = this.adjustContentLayoutArea(bounds);\n this.drawCellBackground(graphics, bounds);\n if (typeof this.objectValue === 'string' || typeof this.remaining === 'string') {\n var temp = void 0;\n temp = this.remaining === '' ? this.remaining : this.objectValue;\n graphics.drawString(temp, font, textPen, textBrush, innerLayoutArea.x, innerLayoutArea.y, innerLayoutArea.width, innerLayoutArea.height, strFormat);\n result = graphics.stringLayoutResult;\n }\n else if (this.objectValue instanceof PdfImage || this.objectValue instanceof PdfBitmap) {\n var imageBounds = void 0;\n if (this.objectValue.width <= innerLayoutArea.width) {\n imageBounds = new RectangleF(innerLayoutArea.x, innerLayoutArea.y, this.objectValue.width, innerLayoutArea.height);\n }\n else {\n imageBounds = innerLayoutArea;\n }\n graphics.drawImage(this.objectValue, imageBounds.x, imageBounds.y, imageBounds.width, imageBounds.height);\n }\n else if (this.objectValue instanceof PdfTextWebLink) {\n this.objectValue.draw(graphics.currentPage, innerLayoutArea);\n }\n if (this.style.borders != null) {\n this.drawCellBorders(graphics, bounds);\n }\n return result;\n };\n /* tslint:enable */\n /**\n * Draws the `cell border` constructed by drawing lines.\n * @private\n */\n PdfGridCell.prototype.drawCellBorders = function (graphics, bounds) {\n if (this.row.grid.style.borderOverlapStyle === PdfBorderOverlapStyle.Inside) {\n bounds.x += this.style.borders.left.width;\n bounds.y += this.style.borders.top.width;\n bounds.width -= this.style.borders.right.width;\n bounds.height -= this.style.borders.bottom.width;\n }\n var p1 = new PointF(bounds.x, bounds.y + bounds.height);\n var p2 = new PointF(bounds.x, bounds.y);\n var pen = this.cellStyle.borders.left;\n if (this.cellStyle.borders.left.dashStyle === PdfDashStyle.Solid) {\n pen.lineCap = PdfLineCap.Square;\n }\n // SetTransparency(ref graphics, pen);\n graphics.drawLine(pen, p1, p2);\n p1 = new PointF(bounds.x + bounds.width, bounds.y);\n p2 = new PointF(bounds.x + bounds.width, bounds.y + bounds.height);\n pen = this.cellStyle.borders.right;\n if ((bounds.x + bounds.width) > (graphics.clientSize.width - (pen.width / 2))) {\n p1 = new PointF(graphics.clientSize.width - (pen.width / 2), bounds.y);\n p2 = new PointF(graphics.clientSize.width - (pen.width / 2), bounds.y + bounds.height);\n }\n if (this.cellStyle.borders.right.dashStyle === PdfDashStyle.Solid) {\n pen.lineCap = PdfLineCap.Square;\n }\n graphics.drawLine(pen, p1, p2);\n p1 = new PointF(bounds.x, bounds.y);\n p2 = new PointF(bounds.x + bounds.width, bounds.y);\n pen = this.cellStyle.borders.top;\n if (this.cellStyle.borders.top.dashStyle === PdfDashStyle.Solid) {\n pen.lineCap = PdfLineCap.Square;\n }\n graphics.drawLine(pen, p1, p2);\n p1 = new PointF(bounds.x + bounds.width, bounds.y + bounds.height);\n p2 = new PointF(bounds.x, bounds.y + bounds.height);\n pen = this.cellStyle.borders.bottom;\n // if ((bounds.y + bounds.height) > (graphics.clientSize.height - (pen.width / 2))) {\n // p1 = new PointF((bounds.x + bounds.width), (graphics.clientSize.height - (pen.width / 2)));\n // p2 = new PointF(bounds.x, (graphics.clientSize.height - (pen.width / 2)));\n // }\n if (this.cellStyle.borders.bottom.dashStyle === PdfDashStyle.Solid) {\n pen.lineCap = PdfLineCap.Square;\n }\n graphics.drawLine(pen, p1, p2);\n };\n /**\n * `Adjusts the outer layout area`.\n * @private\n */\n /* tslint:disable */\n PdfGridCell.prototype.adjustOuterLayoutArea = function (bounds, g) {\n var isHeader = false;\n var cellSpacing = this.row.grid.style.cellSpacing;\n if (cellSpacing > 0) {\n bounds = new RectangleF(bounds.x + cellSpacing, bounds.y + cellSpacing, bounds.width - cellSpacing, bounds.height - cellSpacing);\n }\n var currentColIndex = this.row.cells.indexOf(this);\n if (this.columnSpan > 1) {\n var span = this.columnSpan;\n var totalWidth = 0;\n for (var i = currentColIndex; i < currentColIndex + span; i++) {\n if (this.row.grid.style.allowHorizontalOverflow) {\n var width = void 0;\n var compWidth = this.row.grid.size.width < g.clientSize.width ? this.row.grid.size.width : g.clientSize.width;\n if (this.row.grid.size.width > g.clientSize.width) {\n width = bounds.x + totalWidth + this.row.grid.columns.getColumn(i).width;\n }\n else {\n width = totalWidth + this.row.grid.columns.getColumn(i).width;\n }\n if (width > compWidth) {\n break;\n }\n }\n totalWidth += this.row.grid.columns.getColumn(i).width;\n }\n totalWidth -= this.row.grid.style.cellSpacing;\n bounds.width = totalWidth;\n }\n if (this.rowSpan > 1 || this.row.rowSpanExists) {\n var span = this.rowSpan;\n var currentRowIndex = this.row.grid.rows.rowCollection.indexOf(this.row);\n if (currentRowIndex == -1) {\n currentRowIndex = this.row.grid.headers.indexOf(this.row);\n if (currentRowIndex != -1) {\n isHeader = true;\n }\n }\n var totalHeight = 0;\n var max = 0;\n for (var i = currentRowIndex; i < currentRowIndex + span; i++) {\n totalHeight += (isHeader ? this.row.grid.headers.getHeader(i).height : this.row.grid.rows.getRow(i).height);\n var row = this.row.grid.rows.getRow(i);\n var rowIndex = this.row.grid.rows.rowCollection.indexOf(row);\n }\n var cellIndex = this.row.cells.indexOf(this);\n totalHeight -= this.row.grid.style.cellSpacing;\n // if (this.row.cells.getCell(cellIndex).height > totalHeight && (!this.row.grid.rows.getRow((currentRowIndex + span) - 1).isRowHeightSet)) {\n // this.row.grid.rows.getRow((currentRowIndex + span) - 1).cells.getCell(cellIndex).rowSpanRemainingHeight = this.row.cells.getCell(cellIndex).height - totalHeight;\n // totalHeight = this.row.cells.getCell(cellIndex).height;\n // bounds.height = totalHeight;\n // } else {\n bounds.height = totalHeight;\n // }\n if (!this.row.rowMergeComplete) {\n bounds.height = totalHeight;\n }\n }\n return bounds;\n };\n /* tslint:enable */\n /**\n * Gets the `text font`.\n * @private\n */\n PdfGridCell.prototype.getTextFont = function () {\n if (typeof this.style.font !== 'undefined' && this.style.font != null) {\n return this.style.font;\n }\n else if (typeof this.row.style.font !== 'undefined' && this.row.style.font != null) {\n return this.row.style.font;\n }\n else if (typeof this.row.grid.style.font !== 'undefined' && this.row.grid.style.font != null) {\n return this.row.grid.style.font;\n }\n else {\n return PdfDocument.defaultFont;\n }\n };\n /**\n * Gets the `text brush`.\n * @private\n */\n PdfGridCell.prototype.getTextBrush = function () {\n if (typeof this.style.textBrush !== 'undefined' && this.style.textBrush != null) {\n return this.style.textBrush;\n }\n else if (typeof this.row.style.textBrush !== 'undefined' && this.row.style.textBrush != null) {\n return this.row.style.textBrush;\n }\n else {\n return this.row.grid.style.textBrush;\n }\n };\n /**\n * Gets the `text pen`.\n * @private\n */\n PdfGridCell.prototype.getTextPen = function () {\n if (typeof this.style.textPen !== 'undefined' && this.style.textPen != null) {\n return this.style.textPen;\n }\n else if (typeof this.row.style.textPen !== 'undefined' && this.row.style.textPen != null) {\n return this.row.style.textPen;\n }\n else {\n return this.row.grid.style.textPen;\n }\n };\n /**\n * Gets the `background brush`.\n * @private\n */\n PdfGridCell.prototype.getBackgroundBrush = function () {\n if (typeof this.style.backgroundBrush !== 'undefined' && this.style.backgroundBrush != null) {\n return this.style.backgroundBrush;\n }\n else if (typeof this.row.style.backgroundBrush !== 'undefined' && this.row.style.backgroundBrush != null) {\n return this.row.style.backgroundBrush;\n }\n else {\n return this.row.grid.style.backgroundBrush;\n }\n };\n /**\n * Gets the current `StringFormat`.\n * @private\n */\n PdfGridCell.prototype.getStringFormat = function () {\n if (typeof this.style.stringFormat !== 'undefined' && this.style.stringFormat != null) {\n return this.style.stringFormat;\n }\n else {\n return this.stringFormat;\n }\n };\n /**\n * Calculates the `height`.\n * @private\n */\n PdfGridCell.prototype.measureHeight = function () {\n // .. Calculate the cell text height.\n // .....Add border widths, cell spacings and paddings to the height.\n var width = this.calculateWidth();\n // //check whether the Current PdfGridCell has padding\n if (this.style.cellPadding == null || typeof this.style.cellPadding === 'undefined') {\n width -= (this.gridRow.grid.style.cellPadding.right + this.gridRow.grid.style.cellPadding.left);\n width -= (this.style.borders.left.width + this.style.borders.right.width);\n }\n else {\n width -= (this.style.cellPadding.right + this.style.cellPadding.left);\n width -= (this.style.borders.left.width + this.style.borders.right.width);\n }\n var height = 0;\n var layouter = new PdfStringLayouter();\n if (typeof this.objectValue === 'string' || typeof this.remainingString === 'string') {\n var currentValue = this.objectValue;\n /* tslint:disable */\n var slr = layouter.layout(currentValue, this.getTextFont(), this.stringFormat, new SizeF(width, 0), false, new SizeF(0, 0));\n /* tslint:enable */\n height += slr.actualSize.height;\n }\n else if (this.objectValue instanceof PdfImage || this.objectValue instanceof PdfBitmap) {\n height += this.objectValue.height;\n }\n else if (this.objectValue instanceof PdfTextWebLink) {\n var webLink = this.objectValue;\n /* tslint:disable */\n var slr = layouter.layout(webLink.text, webLink.font, webLink.stringFormat, new SizeF(width, 0), false, new SizeF(0, 0));\n /* tslint:enable */\n height += slr.actualSize.height;\n }\n height += (this.style.borders.top.width + this.style.borders.bottom.width) * 2;\n //Add padding top and bottom value to height\n if (this.style.cellPadding == null || typeof this.style.cellPadding === 'undefined') {\n height += (this.row.grid.style.cellPadding.top + this.row.grid.style.cellPadding.bottom);\n }\n else {\n height += (this.style.cellPadding.top + this.style.cellPadding.bottom);\n }\n height += this.row.grid.style.cellSpacing;\n return height;\n };\n /**\n * return the calculated `width` of the cell.\n * @private\n */\n PdfGridCell.prototype.calculateWidth = function () {\n var cellIndex = this.row.cells.indexOf(this);\n var columnSpan = this.columnSpan;\n var width = 0;\n for (var i = 0; i < columnSpan; i++) {\n width += this.row.grid.columns.getColumn(cellIndex + i).width;\n }\n return width;\n };\n return PdfGridCell;\n}());\nexport { PdfGridCell };\n/**\n * `PdfGridCellCollection` class provides access to an ordered,\n * strongly typed collection of 'PdfGridCell' objects.\n * @private\n */\nvar PdfGridCellCollection = /** @class */ (function () {\n //Constructor\n /**\n * Initializes a new instance of the `PdfGridCellCollection` class with the row.\n * @private\n */\n function PdfGridCellCollection(row) {\n /**\n * @hidden\n * @private\n */\n this.cells = [];\n this.gridRow = row;\n }\n //Properties\n /**\n * Gets the current `cell`.\n * @private\n */\n PdfGridCellCollection.prototype.getCell = function (index) {\n if (index < 0 || index >= this.count) {\n throw new Error('IndexOutOfRangeException');\n }\n return this.cells[index];\n };\n Object.defineProperty(PdfGridCellCollection.prototype, \"count\", {\n /**\n * Gets the cells `count`.[Read-Only].\n * @private\n */\n get: function () {\n return this.cells.length;\n },\n enumerable: true,\n configurable: true\n });\n PdfGridCellCollection.prototype.add = function (cell) {\n if (typeof cell === 'undefined') {\n var tempcell = new PdfGridCell();\n this.add(tempcell);\n return cell;\n }\n else {\n cell.row = this.gridRow;\n this.cells.push(cell);\n }\n };\n /**\n * Returns the `index of` a particular cell in the collection.\n * @private\n */\n PdfGridCellCollection.prototype.indexOf = function (cell) {\n return this.cells.indexOf(cell);\n };\n return PdfGridCellCollection;\n}());\nexport { PdfGridCellCollection };\n","import { PdfGridCell } from './pdf-grid-cell';\nimport { PdfStringFormat } from './../../graphics/fonts/pdf-string-format';\n/**\n * `PdfGridColumn` class represents the schema of a column in a 'PdfGrid'.\n */\nvar PdfGridColumn = /** @class */ (function () {\n //Constructors\n /**\n * Initializes a new instance of the `PdfGridColumn` class with the parent grid.\n * @private\n */\n function PdfGridColumn(grid) {\n /**\n * The `width` of the column.\n * @default 0\n * @private\n */\n this.columnWidth = 0;\n this.grid = grid;\n }\n Object.defineProperty(PdfGridColumn.prototype, \"width\", {\n /**\n * Gets or sets the `width` of the 'PdfGridColumn'.\n * @private\n */\n get: function () {\n return this.columnWidth;\n },\n set: function (value) {\n this.isCustomWidth = true;\n this.columnWidth = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridColumn.prototype, \"format\", {\n /**\n * Gets or sets the information about the text `formatting`.\n * @private\n */\n get: function () {\n if (this.stringFormat == null) {\n this.stringFormat = new PdfStringFormat(); //GetDefaultFormat();\n }\n return this.stringFormat;\n },\n set: function (value) {\n this.stringFormat = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfGridColumn;\n}());\nexport { PdfGridColumn };\n/**\n * `PdfGridColumnCollection` class provides access to an ordered,\n * strongly typed collection of 'PdfGridColumn' objects.\n * @private\n */\nvar PdfGridColumnCollection = /** @class */ (function () {\n //properties\n //Constructors\n /**\n * Initializes a new instance of the `PdfGridColumnCollection` class with the parent grid.\n * @private\n */\n function PdfGridColumnCollection(grid) {\n /**\n * @hidden\n * @private\n */\n this.internalColumns = [];\n /**\n * @hidden\n * @private\n */\n this.columnWidth = 0;\n this.grid = grid;\n this.internalColumns = [];\n }\n //Iplementation\n /**\n * `Add` a new column to the 'PdfGrid'.\n * @private\n */\n PdfGridColumnCollection.prototype.add = function (count) {\n // public add(column : PdfGridColumn) : void\n // public add(arg : number|PdfGridColumn) : void {\n // if (typeof arg === 'number') {\n for (var i = 0; i < count; i++) {\n this.internalColumns.push(new PdfGridColumn(this.grid));\n for (var index = 0; index < this.grid.rows.count; index++) {\n var row = this.grid.rows.getRow(index);\n var cell = new PdfGridCell();\n cell.value = '';\n row.cells.add(cell);\n }\n }\n // } else {\n // let column : PdfGridColumn = new PdfGridColumn(this.grid);\n // this.columns.push(column);\n // return column;\n // }\n };\n Object.defineProperty(PdfGridColumnCollection.prototype, \"count\", {\n /**\n * Gets the `number of columns` in the 'PdfGrid'.[Read-Only].\n * @private\n */\n get: function () {\n return this.internalColumns.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridColumnCollection.prototype, \"width\", {\n /**\n * Gets the `widths`.\n * @private\n */\n get: function () {\n if (this.columnWidth === 0) {\n this.columnWidth = this.measureColumnsWidth();\n }\n if (this.grid.initialWidth !== 0 && this.columnWidth !== this.grid.initialWidth && !this.grid.style.allowHorizontalOverflow) {\n this.columnWidth = this.grid.initialWidth;\n this.grid.isPageWidth = true;\n }\n return this.columnWidth;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridColumnCollection.prototype, \"columns\", {\n /**\n * Gets the `array of PdfGridColumn`.[Read-Only]\n * @private\n */\n get: function () {\n return this.internalColumns;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Gets the `PdfGridColumn` from the specified index.[Read-Only]\n * @private\n */\n PdfGridColumnCollection.prototype.getColumn = function (index) {\n if (index >= 0 && index <= this.columns.length) {\n return this.columns[index];\n }\n else {\n throw Error('can not get the column from the index: ' + index);\n }\n };\n //Implementation\n /**\n * `Calculates the column widths`.\n * @private\n */\n PdfGridColumnCollection.prototype.measureColumnsWidth = function () {\n var totalWidth = 0;\n // this.m_grid.measureColumnsWidth();\n for (var i = 0, count = this.internalColumns.length; i < count; i++) {\n totalWidth += this.internalColumns[i].width;\n }\n return totalWidth;\n };\n /**\n * Gets the `widths of the columns`.\n * @private\n */\n PdfGridColumnCollection.prototype.getDefaultWidths = function (totalWidth) {\n var widths = [];\n var summ = 0.0;\n var subFactor = this.count;\n for (var i = 0; i < this.count; i++) {\n if (this.grid.isPageWidth && totalWidth >= 0 && !this.internalColumns[i].isCustomWidth) {\n this.internalColumns[i].width = 0;\n }\n else {\n widths[i] = this.internalColumns[i].width;\n if (this.internalColumns[i].width > 0 && this.internalColumns[i].isCustomWidth) {\n totalWidth -= this.internalColumns[i].width;\n subFactor--;\n }\n else {\n widths[i] = 0;\n }\n }\n }\n for (var i = 0; i < this.count; i++) {\n var width = totalWidth / subFactor;\n if (widths[i] <= 0) {\n widths[i] = width;\n }\n }\n return widths;\n };\n return PdfGridColumnCollection;\n}());\nexport { PdfGridColumnCollection };\n","import { PdfGridCell, PdfGridCellCollection } from './pdf-grid-cell';\nimport { PdfGridRowStyle } from './styles/style';\n/**\n * `PdfGridRow` class provides customization of the settings for the particular row.\n */\nvar PdfGridRow = /** @class */ (function () {\n //Constructor\n /**\n * Initializes a new instance of the `PdfGridRow` class with the parent grid.\n * @private\n */\n function PdfGridRow(grid) {\n /**\n * Stores the index of the overflowing row.\n * @private\n */\n this.gridRowOverflowIndex = 0;\n /**\n * Check whether the row height `is set explicitly`.\n * @default false\n * @private\n */\n this.isRowHeightSet = false;\n /**\n * Check weather the row merge `is completed` or not.\n * @default true\n * @private\n */\n this.isRowMergeComplete = true;\n this.pdfGrid = grid;\n }\n Object.defineProperty(PdfGridRow.prototype, \"rowSpanExists\", {\n //Properties\n /**\n * Gets or sets a value indicating [`row span exists`].\n * @private\n */\n get: function () {\n return this.bRowSpanExists;\n },\n set: function (value) {\n this.bRowSpanExists = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRow.prototype, \"cells\", {\n /**\n * Gets the `cells` from the selected row.[Read-Only].\n * @private\n */\n get: function () {\n if (this.gridCells == null) {\n this.gridCells = new PdfGridCellCollection(this);\n }\n return this.gridCells;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRow.prototype, \"grid\", {\n /**\n * Gets or sets the parent `grid`.\n * @private\n */\n get: function () {\n return this.pdfGrid;\n },\n set: function (value) {\n this.pdfGrid = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRow.prototype, \"style\", {\n /**\n * Gets or sets the row `style`.\n * @private\n */\n get: function () {\n if (typeof this.rowStyle === 'undefined') {\n this.rowStyle = new PdfGridRowStyle();\n this.rowStyle.setParent(this);\n }\n return this.rowStyle;\n },\n set: function (value) {\n this.rowStyle = value;\n for (var i = 0; i < this.cells.count; i++) {\n this.cells.getCell(i).style.borders = value.border;\n if (typeof value.font !== 'undefined') {\n this.cells.getCell(i).style.font = value.font;\n }\n if (typeof value.backgroundBrush !== 'undefined') {\n this.cells.getCell(i).style.backgroundBrush = value.backgroundBrush;\n }\n if (typeof value.textBrush !== 'undefined') {\n this.cells.getCell(i).style.textBrush = value.textBrush;\n }\n if (typeof value.textPen !== 'undefined') {\n this.cells.getCell(i).style.textPen = value.textPen;\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRow.prototype, \"rowBreakHeight\", {\n /**\n * `Height` of the row yet to be drawn after split.\n * @private\n */\n get: function () {\n if (typeof this.gridRowBreakHeight === 'undefined') {\n this.gridRowBreakHeight = 0;\n }\n return this.gridRowBreakHeight;\n },\n set: function (value) {\n this.gridRowBreakHeight = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRow.prototype, \"rowOverflowIndex\", {\n get: function () {\n return this.gridRowOverflowIndex;\n },\n set: function (value) {\n this.gridRowOverflowIndex = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRow.prototype, \"height\", {\n /**\n * Gets or sets the `height` of the row.\n * @private\n */\n get: function () {\n if (!this.isRowHeightSet) {\n this.rowHeight = this.measureHeight();\n }\n return this.rowHeight;\n },\n set: function (value) {\n this.rowHeight = value;\n this.isRowHeightSet = true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRow.prototype, \"columnSpanExists\", {\n /**\n * Gets or sets a value indicating [`column span exists`].\n * @private\n */\n get: function () {\n return this.bColumnSpanExists;\n },\n set: function (value) {\n this.bColumnSpanExists = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRow.prototype, \"rowMergeComplete\", {\n /**\n * Check whether the Row `has row span or row merge continue`.\n * @private\n */\n get: function () {\n return this.isRowMergeComplete;\n },\n set: function (value) {\n this.isRowMergeComplete = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRow.prototype, \"rowIndex\", {\n /**\n * Returns `index` of the row.\n * @private\n */\n get: function () {\n return this.grid.rows.rowCollection.indexOf(this);\n },\n enumerable: true,\n configurable: true\n });\n //Implementation\n /**\n * `Calculates the height`.\n * @private\n */\n PdfGridRow.prototype.measureHeight = function () {\n var rowSpanRemainingHeight = 0;\n var rowHeight;\n var maxHeight = 0;\n // if(this.cells.getCell(0).RowSpan > 1) {\n // rowHeight=0;\n // } else {\n rowHeight = this.cells.getCell(0).height;\n // }\n for (var i = 0; i < this.cells.count; i++) {\n var cell = this.cells.getCell(i);\n //get the maximum rowspan remaining height.\n if (cell.rowSpanRemainingHeight > rowSpanRemainingHeight) {\n rowSpanRemainingHeight = cell.rowSpanRemainingHeight;\n }\n //skip the cell if row spanned.\n // if (cell.IsRowMergeContinue)\n // continue; \n // if (!cell.IsRowMergeContinue)\n this.rowMergeComplete = false;\n if (cell.rowSpan > 1) {\n if (maxHeight < cell.height) {\n maxHeight = cell.height;\n }\n continue;\n }\n rowHeight = Math.max(rowHeight, cell.height);\n }\n if (rowHeight === 0) {\n rowHeight = maxHeight;\n }\n else if (rowSpanRemainingHeight > 0) {\n rowHeight += rowSpanRemainingHeight;\n }\n return rowHeight;\n };\n return PdfGridRow;\n}());\nexport { PdfGridRow };\n/**\n * `PdfGridRowCollection` class provides access to an ordered, strongly typed collection of 'PdfGridRow' objects.\n * @private\n */\nvar PdfGridRowCollection = /** @class */ (function () {\n // Constructor\n /**\n * Initializes a new instance of the `PdfGridRowCollection` class with the parent grid.\n * @private\n */\n function PdfGridRowCollection(grid) {\n this.rows = [];\n this.grid = grid;\n }\n Object.defineProperty(PdfGridRowCollection.prototype, \"count\", {\n //Properties\n /**\n * Gets the number of header in the `PdfGrid`.[Read-Only].\n * @private\n */\n get: function () {\n return this.rows.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRowCollection.prototype, \"rowCollection\", {\n //Implementation\n /**\n * Return the row collection of the `grid`.\n * @private\n */\n get: function () {\n return this.rows;\n },\n enumerable: true,\n configurable: true\n });\n PdfGridRowCollection.prototype.addRow = function (arg) {\n if (typeof arg === 'undefined') {\n var temprow = new PdfGridRow(this.grid);\n this.addRow(temprow);\n return temprow;\n }\n else {\n arg.style.setBackgroundBrush(this.grid.style.backgroundBrush);\n arg.style.setFont(this.grid.style.font);\n arg.style.setTextBrush(this.grid.style.textBrush);\n arg.style.setTextPen(this.grid.style.textPen);\n if (arg.cells.count === 0) {\n for (var i = 0; i < this.grid.columns.count; i++) {\n arg.cells.add(new PdfGridCell());\n }\n }\n this.rows.push(arg);\n }\n };\n /**\n * Return the row by index.\n * @private\n */\n PdfGridRowCollection.prototype.getRow = function (index) {\n return this.rows[index];\n };\n return PdfGridRowCollection;\n}());\nexport { PdfGridRowCollection };\n/**\n * `PdfGridHeaderCollection` class provides customization of the settings for the header.\n * @private\n */\nvar PdfGridHeaderCollection = /** @class */ (function () {\n //constructor\n /**\n * Initializes a new instance of the `PdfGridHeaderCollection` class with the parent grid.\n * @private\n */\n function PdfGridHeaderCollection(grid) {\n /**\n * The array to store the `rows` of the grid header.\n * @private\n */\n this.rows = [];\n this.grid = grid;\n this.rows = [];\n }\n //Properties\n /**\n * Gets a 'PdfGridRow' object that represents the `header` row in a 'PdfGridHeaderCollection' control.[Read-Only].\n * @private\n */\n PdfGridHeaderCollection.prototype.getHeader = function (index) {\n // if (index < 0 || index >= Count) {\n // throw new IndexOutOfRangeException();\n // }\n return (this.rows[index]);\n };\n Object.defineProperty(PdfGridHeaderCollection.prototype, \"count\", {\n /**\n * Gets the `number of header` in the 'PdfGrid'.[Read-Only]\n * @private\n */\n get: function () {\n return this.rows.length;\n },\n enumerable: true,\n configurable: true\n });\n PdfGridHeaderCollection.prototype.add = function (arg) {\n if (typeof arg === 'number') {\n var row = void 0;\n for (var i = 0; i < arg; i++) {\n row = new PdfGridRow(this.grid);\n for (var j = 0; j < this.grid.columns.count; j++) {\n row.cells.add(new PdfGridCell());\n }\n this.rows.push(row);\n }\n return this.rows;\n }\n else {\n this.rows.push(arg);\n }\n };\n PdfGridHeaderCollection.prototype.indexOf = function (row) {\n return this.rows.indexOf(row);\n };\n return PdfGridHeaderCollection;\n}());\nexport { PdfGridHeaderCollection };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * PdfGrid.ts class for EJ2-PDF\n */\nimport { PdfGridColumnCollection } from './pdf-grid-column';\nimport { PdfGridRowCollection, PdfGridHeaderCollection } from './pdf-grid-row';\nimport { RectangleF, SizeF, PointF } from './../../drawing/pdf-drawing';\nimport { PdfLayoutElement } from './../../graphics/figures/layout-element';\nimport { PdfLayoutResult, PdfLayoutFormat } from './../../graphics/figures/base/element-layouter';\nimport { PdfBorders } from './styles/pdf-borders';\nimport { PdfGridStyle } from './styles/style';\nimport { PdfLayoutType } from './../../graphics/figures/enum';\nimport { PdfHorizontalOverflowType } from './styles/style';\nimport { TemporaryDictionary } from './../../collections/object-object-pair/dictionary';\nimport { PdfStringFormat } from './../../graphics/fonts/pdf-string-format';\n/**\n * `PdfGridLayoutFormat` class represents a flexible grid that consists of columns and rows.\n */\nvar PdfGridLayoutFormat = /** @class */ (function (_super) {\n __extends(PdfGridLayoutFormat, _super);\n /**\n * Initializes a new instance of the `PdfGridLayoutFormat` class.\n * @private\n */\n function PdfGridLayoutFormat(baseFormat) {\n var _this = this;\n if (typeof baseFormat === 'undefined') {\n _this = _super.call(this) || this;\n }\n else {\n _this = _super.call(this, baseFormat) || this;\n }\n return _this;\n }\n return PdfGridLayoutFormat;\n}(PdfLayoutFormat));\nexport { PdfGridLayoutFormat };\nvar PdfGrid = /** @class */ (function (_super) {\n __extends(PdfGrid, _super);\n //constructor\n /**\n * Initialize a new instance for `PdfGrid` class.\n * @private\n */\n function PdfGrid() {\n var _this = _super.call(this) || this;\n /**\n * @hidden\n * @private\n */\n _this.gridSize = new SizeF(0, 0);\n /**\n * @hidden\n * @private\n */\n _this.isRearranged = false;\n /**\n * @hidden\n * @private\n */\n _this.pageBounds = new RectangleF();\n /**\n * @hidden\n * @private\n */\n _this.listOfNavigatePages = [];\n /**\n * @hidden\n * @private\n */\n _this.flag = true;\n /**\n * @hidden\n * @private\n */\n _this.columnRanges = [];\n /**\n * @hidden\n * @private\n */\n _this.currentLocation = new PointF(0, 0);\n /**\n * @hidden\n * @private\n */\n _this.breakRow = true;\n return _this;\n }\n Object.defineProperty(PdfGrid.prototype, \"raiseBeginCellDraw\", {\n //Properties\n /**\n * Gets a value indicating whether the `start cell layout event` should be raised.\n * @private\n */\n get: function () {\n return (typeof this.beginCellDraw !== 'undefined' && typeof this.beginCellDraw !== null);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"raiseEndCellDraw\", {\n /**\n * Gets a value indicating whether the `end cell layout event` should be raised.\n * @private\n */\n get: function () {\n return (typeof this.endCellDraw !== 'undefined' && typeof this.endCellDraw !== null);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"raiseBeginPageLayout\", {\n /**\n * Gets a value indicating whether the `start page layout event` should be raised.\n * @private\n */\n get: function () {\n return (typeof this.beginPageLayout !== 'undefined');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"raiseEndPageLayout\", {\n /**\n * Gets a value indicating whether the `ending page layout event` should be raised.\n * @private\n */\n get: function () {\n return (typeof this.endPageLayout !== 'undefined');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"repeatHeader\", {\n /**\n * Gets or sets a value indicating whether to `repeat header`.\n * @private\n */\n get: function () {\n if (this.bRepeatHeader == null || typeof this.bRepeatHeader === 'undefined') {\n this.bRepeatHeader = false;\n }\n return this.bRepeatHeader;\n },\n set: function (value) {\n this.bRepeatHeader = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"allowRowBreakAcrossPages\", {\n /**\n * Gets or sets a value indicating whether to split or cut rows that `overflow a page`.\n * @private\n */\n get: function () {\n return this.breakRow;\n },\n set: function (value) {\n this.breakRow = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"columns\", {\n /**\n * Gets the `column` collection of the PdfGrid.[Read-Only]\n * @private\n */\n get: function () {\n if (this.gridColumns == null || typeof this.gridColumns === 'undefined') {\n this.gridColumns = new PdfGridColumnCollection(this);\n }\n return this.gridColumns;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"rows\", {\n /**\n * Gets the `row` collection from the PdfGrid.[Read-Only]\n * @private\n */\n get: function () {\n if (this.gridRows == null) {\n this.gridRows = new PdfGridRowCollection(this);\n }\n return this.gridRows;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"headers\", {\n /**\n * Gets the `headers` collection from the PdfGrid.[Read-Only]\n * @private\n */\n get: function () {\n if (this.gridHeaders == null || typeof this.gridHeaders === 'undefined') {\n this.gridHeaders = new PdfGridHeaderCollection(this);\n }\n return this.gridHeaders;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"initialWidth\", {\n /**\n * Indicating `initial width` of the page.\n * @private\n */\n get: function () {\n return this.gridInitialWidth;\n },\n set: function (value) {\n this.gridInitialWidth = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"style\", {\n /**\n * Gets or sets the `grid style`.\n * @private\n */\n get: function () {\n if (this.gridStyle == null) {\n this.gridStyle = new PdfGridStyle();\n }\n return this.gridStyle;\n },\n set: function (value) {\n if (this.gridStyle == null) {\n this.gridStyle = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"isPageWidth\", {\n /**\n * Gets a value indicating whether the grid column width is considered to be `page width`.\n * @private\n */\n get: function () {\n return this.pageWidth;\n },\n set: function (value) {\n this.pageWidth = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"isChildGrid\", {\n /**\n * Gets or set if grid `is nested grid`.\n * @private\n */\n get: function () {\n return this.childGrid;\n },\n set: function (value) {\n this.childGrid = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"size\", {\n /**\n * Gets the `size`.\n * @private\n */\n get: function () {\n if (this.gridSize.width === 0 && this.gridSize.height === 0) {\n this.gridSize = this.measure();\n return this.gridSize;\n }\n else {\n return this.gridSize;\n }\n },\n set: function (value) {\n this.gridSize = value;\n },\n enumerable: true,\n configurable: true\n });\n PdfGrid.prototype.draw = function (arg1, arg2, arg3, arg4) {\n if (arg2 instanceof PointF && typeof arg2.width === 'undefined' && typeof arg3 === 'undefined') {\n return this.drawHelper(arg1, arg2.x, arg2.y);\n }\n else if (typeof arg2 === 'number' && typeof arg3 === 'number' && typeof arg4 === 'undefined') {\n return this.drawHelper(arg1, arg2, arg3, null);\n }\n else if (arg2 instanceof RectangleF && typeof arg2.width !== 'undefined' && typeof arg3 === 'undefined') {\n return this.drawHelper(arg1, arg2, null);\n }\n else if (arg2 instanceof PointF && typeof arg2.width === 'undefined' && arg3 instanceof PdfLayoutFormat) {\n return this.drawHelper(arg1, arg2.x, arg2.y, arg3);\n }\n else if (typeof arg2 === 'number' && typeof arg3 === 'number' && (arg4 instanceof PdfLayoutFormat || arg4 == null)) {\n var width = (arg1.graphics.clientSize.width - arg2);\n var layoutRectangle = new RectangleF(arg2, arg3, width, 0);\n return this.drawHelper(arg1, layoutRectangle, arg4);\n }\n else if (arg2 instanceof RectangleF && typeof arg2.width !== 'undefined' && typeof arg3 === 'boolean') {\n return this.drawHelper(arg1, arg2, null);\n }\n else {\n return this.drawHelper(arg1, arg2, arg3);\n }\n };\n /**\n * `measures` this instance.\n * @private\n */\n PdfGrid.prototype.measure = function () {\n var height = 0;\n var width = this.columns.width;\n for (var i = 0; i < this.headers.count; i++) {\n var row = this.headers.getHeader(i);\n height += row.height;\n }\n for (var i = 0; i < this.rows.count; i++) {\n var row = this.rows.getRow(i);\n height += row.height;\n }\n return new SizeF(width, height);\n };\n PdfGrid.prototype.layout = function (param, isGridLayouter) {\n if (typeof isGridLayouter === 'undefined') {\n this.setSpan();\n this.layoutFormat = param.format;\n this.gridLocation = param.bounds;\n var result = this.layout(param, true);\n return result;\n }\n else {\n return this.layoutInternal(param);\n }\n };\n PdfGrid.prototype.setSpan = function () {\n var colSpan;\n var rowSpan = 1;\n var currentCellIndex;\n var currentRowIndex = 0;\n var rowCount = this.headers.count;\n for (var i = 0; i < rowCount; i++) {\n var row = this.headers.getHeader(i);\n var colCount = row.cells.count;\n for (var j = 0; j < colCount; j++) {\n var cell = row.cells.getCell(j);\n //Skip setting span map for already coverted rows/columns.\n if (!cell.isCellMergeContinue && !cell.isRowMergeContinue && (cell.columnSpan > 1 || cell.rowSpan > 1)) {\n if (cell.columnSpan + j > row.cells.count) {\n throw new Error('Invalid span specified at row ' + j.toString() + ' column ' + i.toString());\n }\n if (cell.rowSpan + i > this.headers.count) {\n throw new Error('Invalid span specified at Header ' + j.toString() + ' column ' + i.toString());\n }\n // if (this.rows.count !== 0 && cell.rowSpan + i > this.rows.count) {\n // throw new Error('Invalid span specified at row ' + j.toString() + ' column ' + i.toString());\n // }\n if (cell.columnSpan > 1 && cell.rowSpan > 1) {\n colSpan = cell.columnSpan;\n rowSpan = cell.rowSpan;\n currentCellIndex = j;\n currentRowIndex = i;\n cell.isCellMergeStart = true;\n cell.isRowMergeStart = true;\n //Set Column merges for first row\n while (colSpan > 1) {\n currentCellIndex++;\n row.cells.getCell(currentCellIndex).isCellMergeContinue = true;\n row.cells.getCell(currentCellIndex).isRowMergeContinue = true;\n row.cells.getCell(currentCellIndex).rowSpan = rowSpan;\n colSpan--;\n }\n currentCellIndex = j;\n colSpan = cell.columnSpan;\n //Set Row Merges and column merges foreach subsequent rows.\n while (rowSpan > 1) {\n currentRowIndex++;\n this.headers.getHeader(currentRowIndex).cells.getCell(j).isRowMergeContinue = true;\n this.headers.getHeader(currentRowIndex).cells.getCell(currentCellIndex).isRowMergeContinue = true;\n rowSpan--;\n while (colSpan > 1) {\n currentCellIndex++;\n this.headers.getHeader(currentRowIndex).cells.getCell(currentCellIndex).isCellMergeContinue = true;\n this.headers.getHeader(currentRowIndex).cells.getCell(currentCellIndex).isRowMergeContinue = true;\n colSpan--;\n }\n colSpan = cell.columnSpan;\n currentCellIndex = j;\n }\n }\n else if (cell.columnSpan > 1 && cell.rowSpan === 1) {\n colSpan = cell.columnSpan;\n currentCellIndex = j;\n cell.isCellMergeStart = true;\n //Set Column merges.\n while (colSpan > 1) {\n currentCellIndex++;\n row.cells.getCell(currentCellIndex).isCellMergeContinue = true;\n colSpan--;\n }\n }\n else if (cell.columnSpan === 1 && cell.rowSpan > 1) {\n rowSpan = cell.rowSpan;\n currentRowIndex = i;\n //Set row Merges.\n while (rowSpan > 1) {\n currentRowIndex++;\n this.headers.getHeader(currentRowIndex).cells.getCell(j).isRowMergeContinue = true;\n rowSpan--;\n }\n }\n }\n }\n }\n };\n /**\n * Gets the `format`.\n * @private\n */\n PdfGrid.prototype.getFormat = function (format) {\n var f = format;\n return f;\n };\n /**\n * `Layouts` the element.\n * @private\n */\n PdfGrid.prototype.layoutInternal = function (param) {\n this.initialWidth = param.bounds.width;\n var format = this.getFormat(param.format);\n this.currentPage = param.page;\n if (this.currentPage !== null) {\n var pageHeight = this.currentPage.getClientSize().height;\n var pageWidth = this.currentPage.getClientSize().width;\n this.currentPageBounds = this.currentPage.getClientSize();\n }\n else {\n throw Error('Can not set page as null');\n }\n this.currentGraphics = this.currentPage.graphics;\n var index = 0;\n index = this.currentGraphics.page.section.indexOf(this.currentGraphics.page);\n this.listOfNavigatePages.push(index);\n this.currentBounds = new RectangleF(new PointF(param.bounds.x, param.bounds.y), this.currentGraphics.clientSize);\n if (this.rows.count !== 0) {\n this.currentBounds.width = (param.bounds.width > 0) ? param.bounds.width :\n (this.currentBounds.width - this.rows.getRow(0).cells.getCell(0).style.borders.left.width / 2);\n }\n else if (this.headers.count !== 0) {\n this.currentBounds.width = param.bounds.width;\n }\n else {\n throw Error('Please add row or header into grid');\n }\n this.startLocation = new PointF(param.bounds.x, param.bounds.y);\n if (param.bounds.height > 0 && !this.isChildGrid) {\n this.currentBounds.height = param.bounds.height;\n }\n this.hType = this.style.horizontalOverflowType;\n if (!this.style.allowHorizontalOverflow) {\n this.measureColumnsWidth(this.currentBounds);\n this.columnRanges.push([0, this.columns.count - 1]);\n }\n else {\n this.measureColumnsWidth();\n this.determineColumnDrawRanges();\n }\n var result = this.layoutOnPage(param);\n return result;\n };\n PdfGrid.prototype.measureColumnsWidth = function (bounds) {\n if (typeof bounds !== 'undefined') {\n var widths = this.columns.getDefaultWidths(bounds.width);\n var tempWidth = this.columns.getColumn(0).width;\n for (var i = 0, count = this.columns.count; i < count; i++) {\n this.columns.getColumn(i).width = widths[i];\n }\n }\n else {\n var widths = [];\n var cellWidth = 0;\n var cellWidths = 0;\n if (this.headers.count > 0) {\n var colCount = this.headers.getHeader(0).cells.count;\n var rowCount = this.headers.count;\n for (var i = 0; i < colCount; i++) {\n cellWidth = 0;\n for (var j = 0; j < rowCount; j++) {\n var rowWidth = Math.min(this.initialWidth, this.headers.getHeader(j).cells.getCell(i).width);\n cellWidth = Math.max(cellWidth, rowWidth);\n }\n widths[i] = cellWidth;\n }\n }\n else {\n var colCount = this.rows.getRow(0).cells.count;\n var rowCount = this.rows.count;\n for (var i = 0; i < colCount; i++) {\n cellWidth = 0;\n for (var j = 0; j < rowCount; j++) {\n var rowWidth = Math.min(this.initialWidth, this.rows.getRow(j).cells.getCell(i).width);\n cellWidth = Math.max(cellWidth, rowWidth);\n }\n widths[i] = cellWidth;\n }\n }\n cellWidth = 0;\n for (var i = 0, colCount = this.columns.count; i < colCount; i++) {\n for (var j = 0, rowCount = this.rows.count; j < rowCount; j++) {\n if (this.rows.getRow(j).cells.getCell(i).columnSpan == 1 || this.rows.getRow(j).cells.getCell(i).value !== null || this.rows.getRow(j).cells.getCell(i).rowSpan >= 1) {\n if (this.rows.getRow(j).cells.getCell(i).value !== null &&\n !this.rows.getRow(j).grid.style.allowHorizontalOverflow) {\n var value = this.rows.getRow(j).grid.style.cellPadding.right +\n this.rows.getRow(j).grid.style.cellPadding.left\n + this.rows.getRow(j).cells.getCell(i).style.borders.left.width / 2\n + this.gridLocation.x;\n this.rows.getRow(j).cells.getCell(i).value.initialWidth = this.initialWidth - value;\n }\n var rowWidth = 0;\n var internalWidth = this.rows.getRow(j).cells.getCell(i).width;\n internalWidth += this.rows.getRow(j).cells.getCell(i).style.borders.left.width;\n internalWidth += this.rows.getRow(j).cells.getCell(i).style.borders.right.width;\n var internalHeight = this.rows.getRow(j).cells.getCell(i).height;\n internalHeight += (this.rows.getRow(j).cells.getCell(i).style.borders.top.width);\n internalHeight += (this.rows.getRow(j).cells.getCell(i).style.borders.bottom.width);\n var isCorrectWidth = (internalWidth + this.gridLocation.x) > this.currentGraphics.clientSize.width;\n var isCorrectHeight = (internalHeight + this.gridLocation.y) > this.currentGraphics.clientSize.height;\n if (isCorrectWidth || isCorrectHeight) {\n throw Error('Image size exceeds client size of the page. Can not insert this image');\n }\n rowWidth = Math.min(this.initialWidth, this.rows.getRow(j).cells.getCell(i).width);\n cellWidth = Math.max(widths[i], Math.max(cellWidth, rowWidth));\n cellWidth = Math.max(this.columns.getColumn(i).width, cellWidth);\n }\n }\n widths[i] = cellWidth;\n cellWidth = 0;\n }\n for (var i = 0, count = this.columns.count; i < count; i++) {\n this.columns.getColumn(i).width = widths[i];\n }\n }\n };\n /* tslint:enable */\n /**\n * `Determines the column draw ranges`.\n * @private\n */\n PdfGrid.prototype.determineColumnDrawRanges = function () {\n var startColumn = 0;\n var endColumn = 0;\n var cellWidths = 0;\n var availableWidth = this.currentGraphics.clientSize.width - this.currentBounds.x;\n for (var i = 0; i < this.columns.count; i++) {\n cellWidths += this.columns.getColumn(i).width;\n if (cellWidths >= availableWidth) {\n var subWidths = 0;\n for (var j = startColumn; j <= i; j++) {\n subWidths += this.columns.getColumn(j).width;\n if (subWidths > availableWidth) {\n break;\n }\n endColumn = j;\n }\n this.columnRanges.push([startColumn, endColumn]);\n startColumn = endColumn + 1;\n endColumn = startColumn;\n cellWidths = (endColumn <= i) ? this.columns.getColumn(i).width : 0;\n }\n }\n // if (startColumn !== this.columns.Count) {\n this.columnRanges.push([startColumn, this.columns.count - 1]);\n // }\n };\n /**\n * `Layouts the on page`.\n * @private\n */\n PdfGrid.prototype.layoutOnPage = function (param) {\n /* tslint:disable */\n this.pageBounds.x = param.bounds.x;\n this.pageBounds.y = param.bounds.y;\n this.pageBounds.height = param.bounds.height;\n var format = this.getFormat(param.format);\n var endArgs = null;\n var result = null;\n var layoutedPages = new TemporaryDictionary();\n var startPage = param.page;\n var isParentCell = false;\n var cellBounds = [];\n for (var index = 0; index < this.columnRanges.length; index++) {\n var range = this.columnRanges[index];\n this.cellStartIndex = range[0];\n this.cellEndIndex = range[1];\n var returnObject = this.raiseBeforePageLayout(this.currentPage, this.currentBounds, this.currentRowIndex);\n this.currentBounds = returnObject.currentBounds;\n this.currentRowIndex = returnObject.currentRowIndex;\n // if (returnObject.returnValue) {\n // result = new PdfGridLayoutResult(this.currentPage, this.currentBounds);\n // break;\n // }\n //Draw Headers.\n var drawHeader = void 0;\n for (var i_1 = 0; i_1 < this.headers.count; i_1++) {\n var row = this.headers.getHeader(i_1);\n var headerHeight = this.currentBounds.y;\n // RowLayoutResult\n var headerResult = this.drawRow(row);\n // if (headerHeight === this.currentBounds.y) {\n // drawHeader = true;\n // if (PdfGrid.repeatRowIndex === -1) {\n // PdfGrid.repeatRowIndex = this.rows.getRow.indexOf(row);\n // }\n // } else {\n drawHeader = false;\n // }\n }\n var i = 0;\n var length_1 = this.rows.count;\n var repeatRow = void 0;\n var startingHeight = 0;\n var flag = true;\n //Here is to draw parent Grid and Cells\n cellBounds = [];\n //Draw row by row with the specified cell range.\n for (var j = 0; j < this.rows.count; j++) {\n var row = this.rows.getRow(j);\n i++;\n this.currentRowIndex = i - 1;\n var originalHeight = this.currentBounds.y;\n startPage = this.currentPage;\n PdfGrid.repeatRowIndex = -1;\n var rowResult = this.drawRow(row);\n cellBounds.push(rowResult.bounds.width);\n //if height remains same, it is understood that row is not drawn in the page\n if (originalHeight === this.currentBounds.y) {\n repeatRow = true;\n PdfGrid.repeatRowIndex = this.rows.rowCollection.indexOf(row);\n }\n else {\n repeatRow = false;\n PdfGrid.repeatRowIndex = -1;\n }\n if (!rowResult.isFinish && startPage !== null && format.layout !== PdfLayoutType.OnePage && repeatRow) {\n // During pagination, cell position is maintained here.\n this.startLocation.x = this.currentBounds.x;\n var isAddNextPage = false;\n this.currentPage = this.getNextPage(format);\n if ((param.format !== null) && !param.format.usePaginateBounds && param.bounds !== null &&\n param.bounds.height > 0 && !this.isChildGrid) {\n this.currentBounds.height = param.bounds.height;\n }\n if ((param.format !== null) && !param.format.usePaginateBounds && param.bounds !== null &&\n param.bounds.y > 0 && !this.isChildGrid) {\n this.currentBounds.y = param.bounds.y;\n }\n this.startLocation.y = this.currentBounds.y;\n if ((format.paginateBounds.x === format.paginateBounds.y) &&\n (format.paginateBounds.y === format.paginateBounds.height) &&\n (format.paginateBounds.height === format.paginateBounds.width) && (format.paginateBounds.width === 0)) {\n this.currentBounds.x += this.startLocation.x;\n }\n if (this.currentBounds.x === PdfBorders.default.left.width / 2) {\n this.currentBounds.y += this.startLocation.x;\n }\n if (this.repeatHeader) {\n for (var i_2 = 0; i_2 < this.headers.count; i_2++) {\n var header = this.headers.getHeader(i_2);\n this.drawRow(header);\n }\n }\n this.drawRow(row);\n if (this.currentPage !== null && !layoutedPages.containsKey(this.currentPage)) {\n layoutedPages.add(this.currentPage, range);\n }\n }\n }\n var isPdfGrid = false;\n var maximumCellBoundsWidth = 0;\n if (cellBounds.length > 0) {\n maximumCellBoundsWidth = cellBounds[0];\n }\n var largeNavigatePage = [[0, 0]];\n if (!isPdfGrid && cellBounds.length > 0) {\n for (var c = 0; c < i - 1; c++) {\n if (maximumCellBoundsWidth < cellBounds[c]) {\n maximumCellBoundsWidth = cellBounds[c];\n }\n }\n this.rowLayoutBoundsWidth = maximumCellBoundsWidth;\n }\n else {\n this.rowLayoutBoundsWidth = largeNavigatePage[0][1];\n }\n if (this.columnRanges.length - 1 !== index && this.columnRanges.length > 1 && format.layout !== PdfLayoutType.OnePage) {\n this.currentPage = this.getNextPage(format);\n if ((format.paginateBounds.x === format.paginateBounds.y) && (format.paginateBounds.y === format.paginateBounds.height)\n && (format.paginateBounds.height === format.paginateBounds.width) && (format.paginateBounds.width === 0)) {\n this.currentBounds.x += this.startLocation.x;\n this.currentBounds.y += this.startLocation.y;\n // this.currentBounds.height = this.pageBounds.height;\n }\n }\n }\n result = this.getLayoutResult();\n if (this.style.allowHorizontalOverflow && this.style.horizontalOverflowType == PdfHorizontalOverflowType.NextPage) {\n this.reArrangePages(layoutedPages);\n }\n this.raisePageLayouted(result);\n return result;\n }; /* tslint:enable */\n /**\n * Gets the `next page`.\n * @private\n */\n PdfGrid.prototype.getNextPage = function (format) {\n var section = this.currentPage.section;\n var nextPage = null;\n var index = section.indexOf(this.currentPage);\n this.flag = false;\n if (index === section.count - 1) {\n nextPage = section.add();\n }\n else {\n nextPage = section.getPages()[index + 1];\n }\n this.currentGraphics = nextPage.graphics;\n var pageindex = this.currentGraphics.page.section.indexOf(this.currentGraphics.page);\n if (!(this.listOfNavigatePages.indexOf(pageindex) !== -1)) {\n this.listOfNavigatePages.push(pageindex);\n }\n this.currentBounds = new RectangleF(new PointF(0, 0), nextPage.getClientSize());\n // if ((format.PaginateBounds.x !== format.PaginateBounds.y) && (format.PaginateBounds.y !== format.PaginateBounds.height)\n // && (format.PaginateBounds.height !== format.PaginateBounds.width) && (format.PaginateBounds.width !== 0)) {\n // this.currentBounds.x = format.PaginateBounds.x;\n // this.currentBounds.y = format.PaginateBounds.y;\n // this.currentBounds.height = format.PaginateBounds.height;\n // }\n return nextPage;\n };\n /**\n * Gets the `layout result`.\n * @private\n */\n PdfGrid.prototype.getLayoutResult = function () {\n var bounds;\n /* tslint:disable */\n bounds = new RectangleF(this.startLocation, new SizeF(this.currentBounds.width, this.currentBounds.y - this.startLocation.y));\n /* tslint:enable */\n return new PdfGridLayoutResult(this.currentPage, bounds);\n };\n /**\n * `Recalculate row height` for the split cell to be drawn.\n * @private\n */\n PdfGrid.prototype.ReCalculateHeight = function (row, height) {\n var newHeight = 0.0;\n // for (let i : number = this.cellStartIndex; i <= this.cellEndIndex; i++) {\n // if (!(row.cells.getCell(i).RemainingString === null || row.cells.getCell(i).RemainingString === '' ||\n // typeof row.cells.getCell(i).RemainingString === 'undefined')) {\n // newHeight = Math.max(newHeight, row.cells.getCell(i).MeasureHeight());\n // }\n // }\n return Math.max(height, newHeight);\n };\n /**\n * `Raises BeforePageLayout event`.\n * @private\n */\n PdfGrid.prototype.raiseBeforePageLayout = function (currentPage, currentBounds, currentRow) {\n var cancel = false;\n if (this.raiseBeginPageLayout) {\n var args = new PdfGridBeginPageLayoutEventArgs(currentBounds, currentPage, currentRow);\n this.beginPageLayout(this, args);\n // if (currentBounds !== args.Bounds) {\n // this.isChanged = true;\n // this.currentLocation = new PointF(args.Bounds.x, args.Bounds.y);\n // this.measureColumnsWidth(new RectangleF(new PointF(args.Bounds.x, args.Bounds.y) ,\n // new SizeF(args.Bounds.width + args.Bounds.x ,\n // args.Bounds.height)));\n // }\n cancel = args.cancel;\n currentBounds = args.bounds;\n currentRow = args.startRowIndex;\n }\n return { returnValue: cancel, currentBounds: currentBounds, currentRowIndex: currentRow };\n };\n /**\n * `Raises PageLayout event` if needed.\n * @private\n */\n PdfGrid.prototype.raisePageLayouted = function (result) {\n var args = new PdfGridEndPageLayoutEventArgs(result);\n if (this.raiseEndPageLayout) {\n this.endPageLayout(this, args);\n }\n return args;\n };\n PdfGrid.prototype.drawRow = function (row, result, height) {\n if (typeof result === 'undefined') {\n //.. Check if required space available.\n //.....If the row conains spans which falls through more than one page, then draw the row to next page.\n var result_1 = new RowLayoutResult();\n var rowHeightWithSpan = 0;\n var location_1 = new PointF(0, 0);\n var size = new SizeF(0, 0);\n var isHeader = false;\n if (row.rowSpanExists) {\n var maxSpan = 0;\n var currRowIndex = this.rows.rowCollection.indexOf(row);\n if (currRowIndex === -1) {\n currRowIndex = this.headers.indexOf(row);\n if (currRowIndex !== -1) {\n isHeader = true;\n }\n }\n for (var i = 0; i < row.cells.count; i++) {\n var cell = row.cells.getCell(i);\n maxSpan = Math.max(maxSpan, cell.rowSpan);\n }\n for (var i = currRowIndex; i < currRowIndex + maxSpan; i++) {\n rowHeightWithSpan += (isHeader ? this.headers.getHeader(i).height : this.rows.getRow(i).height);\n }\n var rowMaxHeight = rowHeightWithSpan;\n for (var i = 0; i < row.cells.count; i++) {\n rowMaxHeight = rowMaxHeight > row.cells.getCell(i).height ? rowMaxHeight : row.cells.getCell(i).height;\n }\n var nextRow = this.headers.getHeader(this.headers.indexOf(row) + 1);\n var flag = true;\n for (var i = 0; i < nextRow.cells.count; i++) {\n if (nextRow.cells.getCell(i).value !== '' && nextRow.cells.getCell(i).value !== undefined) {\n flag = false;\n break;\n }\n }\n if ((rowMaxHeight > rowHeightWithSpan) && flag) {\n row.height += (rowMaxHeight - rowHeightWithSpan);\n }\n }\n var calculatedHeight = row.rowBreakHeight > 0.0 ? row.rowBreakHeight : row.height;\n if (this.currentBounds.y + calculatedHeight > this.currentPageBounds.height ||\n this.currentBounds.y + calculatedHeight > (this.currentBounds.height + this.startLocation.y) ||\n this.currentBounds.y + rowHeightWithSpan > this.currentPageBounds.height) {\n // If a row is repeated and still cannot fit in page, proceed draw.\n // if (PdfGrid.repeatRowIndex > -1 && PdfGrid.repeatRowIndex === row.RowIndex) {\n // if (this.AllowRowBreakAcrossPages) {\n // result.IsFinish = true;\n // // this.DrawRowWithBreak(ref result, row, height);\n // } else {\n // result.IsFinish = false;\n // this.drawRow(row, result, height);\n // }\n // } else {\n result_1.isFinish = false;\n // }\n }\n else {\n result_1.isFinish = true;\n this.drawRow(row, result_1, calculatedHeight);\n }\n return result_1;\n }\n else {\n var skipcell = false;\n var location_2 = new PointF(this.currentBounds.x, this.currentBounds.y);\n result.bounds = new RectangleF(location_2, new SizeF(0, 0));\n height = this.ReCalculateHeight(row, height);\n for (var i = this.cellStartIndex; i <= this.cellEndIndex; i++) {\n var cancelSpans = ((i > this.cellEndIndex + 1) && (row.cells.getCell(i).columnSpan > 1));\n // let cancelSpans : boolean = false;\n if (!cancelSpans) {\n for (var j = 1; j < row.cells.getCell(i).columnSpan; j++) {\n row.cells.getCell(i + j).isCellMergeContinue = true;\n }\n }\n var size = new SizeF(this.columns.getColumn(i).width, height);\n // if (size.width > this.currentGraphics.ClientSize.width) {\n // size.width = this.currentGraphics.ClientSize.width;\n // }\n // if (this.IsChildGrid && this.style.AllowHorizontalOverflow) {\n // if (size.width >= this.currentGraphics.ClientSize.width) {\n // size.width -= 2 * this.currentBounds.x;\n // }\n // }\n /* tslint:disable */\n if (!this.CheckIfDefaultFormat(this.columns.getColumn(i).format) &&\n this.CheckIfDefaultFormat(row.cells.getCell(i).stringFormat)) {\n row.cells.getCell(i).stringFormat = this.columns.getColumn(i).format;\n }\n var cellstyle = row.cells.getCell(i).style;\n var tempValue = ((typeof row.cells.getCell(i).value === 'string' &&\n row.cells.getCell(i).value !== null) ? row.cells.getCell(i).value : '');\n row.cells.getCell(i).style = this.RaiseBeforeCellDraw(this.currentGraphics, this.currentRowIndex, i, new RectangleF(location_2, size), tempValue, cellstyle);\n // if (!skipcell) {\n // let stringResult : PdfStringLayoutResult = row.cells.getCell(i).draw(this.currentGraphics, new RectangleF(location, size), cancelSpans);\n var stringResult = row.cells.getCell(i).draw(this.currentGraphics, new RectangleF(location_2, size), cancelSpans);\n if (row.grid.style.allowHorizontalOverflow && (row.cells.getCell(i).columnSpan > this.cellEndIndex || i + row.cells.getCell(i).columnSpan > this.cellEndIndex + 1) && this.cellEndIndex < row.cells.count - 1) {\n row.rowOverflowIndex = this.cellEndIndex;\n }\n if (row.grid.style.allowHorizontalOverflow && (row.rowOverflowIndex > 0 && (row.cells.getCell(i).columnSpan > this.cellEndIndex || i + row.cells.getCell(i).columnSpan > this.cellEndIndex + 1)) && row.cells.getCell(i).columnSpan - this.cellEndIndex + i - 1 > 0) {\n row.cells.getCell(row.rowOverflowIndex + 1).value = stringResult !== null ? (stringResult.remainder !== undefined) ? stringResult.remainder : '' : '';\n row.cells.getCell(row.rowOverflowIndex + 1).stringFormat = row.cells.getCell(i).stringFormat;\n row.cells.getCell(row.rowOverflowIndex + 1).style = row.cells.getCell(i).style;\n row.cells.getCell(row.rowOverflowIndex + 1).columnSpan = row.cells.getCell(i).columnSpan - this.cellEndIndex + i - 1;\n }\n // }\n /* tslint:enable */\n tempValue = ((typeof row.cells.getCell(i).value === 'string' &&\n row.cells.getCell(i).value !== null) ? row.cells.getCell(i).value : '');\n this.RaiseAfterCellDraw(this.currentGraphics, this.currentRowIndex, i, new RectangleF(location_2, size), tempValue, row.cells.getCell(i).style);\n location_2.x += this.columns.getColumn(i).width;\n }\n // if (!row.RowMergeComplete || row.isRowHeightSet) {\n this.currentBounds.y += height;\n // }\n result.bounds = new RectangleF(new PointF(result.bounds.x, result.bounds.y), new SizeF(location_2.x, location_2.y));\n }\n };\n /**\n * Checks if the given format `is default format` or not.\n * @private\n */\n PdfGrid.prototype.CheckIfDefaultFormat = function (format) {\n var defaultFormat = new PdfStringFormat();\n return (format.alignment === defaultFormat.alignment && format.characterSpacing === defaultFormat.characterSpacing &&\n format.clipPath === defaultFormat.clipPath && format.firstLineIndent === defaultFormat.firstLineIndent &&\n format.horizontalScalingFactor === defaultFormat.horizontalScalingFactor &&\n format.lineAlignment === defaultFormat.lineAlignment\n && format.lineLimit === defaultFormat.lineLimit && format.lineSpacing === defaultFormat.lineSpacing &&\n format.measureTrailingSpaces === defaultFormat.measureTrailingSpaces && format.noClip === defaultFormat.noClip &&\n format.paragraphIndent === defaultFormat.paragraphIndent && format.rightToLeft === defaultFormat.rightToLeft &&\n format.subSuperScript === defaultFormat.subSuperScript && format.wordSpacing === defaultFormat.wordSpacing &&\n format.wordWrap === defaultFormat.wordWrap);\n };\n /**\n * `Raises BeforeCellDraw event`.\n * @private\n */\n PdfGrid.prototype.RaiseBeforeCellDraw = function (graphics, rowIndex, cellIndex, bounds, value, style) {\n var args = null;\n if (this.raiseBeginCellDraw) {\n args = new PdfGridBeginCellDrawEventArgs(graphics, rowIndex, cellIndex, bounds, value, style);\n this.beginCellDraw(this, args);\n style = args.style;\n }\n return style;\n };\n /**\n * `Raises AfterCellDraw event`.\n * @private\n */\n PdfGrid.prototype.RaiseAfterCellDraw = function (graphics, rowIndex, cellIndex, bounds, value, cellstyle) {\n var args = null;\n if (this.raiseEndCellDraw) {\n args = new PdfGridEndCellDrawEventArgs(graphics, rowIndex, cellIndex, bounds, value, cellstyle);\n this.endCellDraw(this, args);\n }\n };\n /**\n * `Rearranges the pages`.\n * @private\n */\n PdfGrid.prototype.reArrangePages = function (layoutedPages) {\n var document = this.currentPage.document;\n var pages = [];\n var keys = layoutedPages.keys();\n var values = layoutedPages.values();\n for (var i = 0; i < keys.length; i++) {\n var page = keys[i];\n page.section = null;\n pages.push(page);\n document.pages.remove(page);\n }\n /* tslint:disable */\n for (var i = 0; i < layoutedPages.size(); i++) {\n var count = 0;\n for (var j = i, count_1 = (layoutedPages.size() / this.columnRanges.length); j < layoutedPages.size(); j += count_1) {\n var page = pages[j];\n if (document.pages.indexOf(page) === -1) {\n document.pages.add(page);\n }\n }\n }\n /* tslint:enable */\n };\n /**\n * @hidden\n * @private\n */\n PdfGrid.repeatRowIndex = -1;\n return PdfGrid;\n}(PdfLayoutElement));\nexport { PdfGrid };\n/**\n * `GridCellEventArgs` class is alternate for grid events.\n */\nvar GridCellEventArgs = /** @class */ (function () {\n // Constructors\n /**\n * Initialize a new instance for `GridCellEventArgs` class.\n * @private\n */\n function GridCellEventArgs(graphics, rowIndex, cellIndex, bounds, value) {\n this.gridRowIndex = rowIndex;\n this.gridCellIndex = cellIndex;\n this.internalValue = value;\n this.gridBounds = bounds;\n this.pdfGraphics = graphics;\n }\n Object.defineProperty(GridCellEventArgs.prototype, \"rowIndex\", {\n // Properties\n /**\n * Gets the value of current `row index`.\n * @private\n */\n get: function () {\n return this.gridRowIndex;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(GridCellEventArgs.prototype, \"cellIndex\", {\n /**\n * Gets the value of current `cell index`.\n * @private\n */\n get: function () {\n return this.gridCellIndex;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(GridCellEventArgs.prototype, \"value\", {\n /**\n * Gets the actual `value` of current cell.\n * @private\n */\n get: function () {\n return this.internalValue;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(GridCellEventArgs.prototype, \"bounds\", {\n /**\n * Gets the `bounds` of current cell.\n * @private\n */\n get: function () {\n return this.gridBounds;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(GridCellEventArgs.prototype, \"graphics\", {\n /**\n * Gets the instance of `current graphics`.\n * @private\n */\n get: function () {\n return this.pdfGraphics;\n },\n enumerable: true,\n configurable: true\n });\n return GridCellEventArgs;\n}());\nexport { GridCellEventArgs };\n/**\n * `PdfGridBeginCellDrawEventArgs` class is alternate for begin cell draw events.\n */\nvar PdfGridBeginCellDrawEventArgs = /** @class */ (function (_super) {\n __extends(PdfGridBeginCellDrawEventArgs, _super);\n // Constructors\n /**\n * Initializes a new instance of the `StartCellLayoutEventArgs` class.\n * @private\n */\n function PdfGridBeginCellDrawEventArgs(graphics, rowIndex, cellIndex, bounds, value, style) {\n var _this = _super.call(this, graphics, rowIndex, cellIndex, bounds, value) || this;\n _this.style = style;\n return _this;\n }\n Object.defineProperty(PdfGridBeginCellDrawEventArgs.prototype, \"skip\", {\n // Properties\n /**\n * Gets or sets a value indicating whether the value of this cell should be `skipped`.\n * @private\n */\n get: function () {\n return this.bSkip;\n },\n set: function (value) {\n this.bSkip = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridBeginCellDrawEventArgs.prototype, \"style\", {\n /**\n * Gets or sets a `style` value of the cell.\n * @private\n */\n get: function () {\n return this.cellStyle;\n },\n set: function (value) {\n this.cellStyle = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfGridBeginCellDrawEventArgs;\n}(GridCellEventArgs));\nexport { PdfGridBeginCellDrawEventArgs };\n/**\n * `PdfGridEndCellDrawEventArgs` class is alternate for end cell draw events.\n */\nvar PdfGridEndCellDrawEventArgs = /** @class */ (function (_super) {\n __extends(PdfGridEndCellDrawEventArgs, _super);\n // Constructors\n /**\n * Initializes a new instance of the `PdfGridEndCellLayoutEventArgs` class.\n * @private\n */\n function PdfGridEndCellDrawEventArgs(graphics, rowIndex, cellIndex, bounds, value, style) {\n var _this = _super.call(this, graphics, rowIndex, cellIndex, bounds, value) || this;\n _this.cellStyle = style;\n return _this;\n }\n Object.defineProperty(PdfGridEndCellDrawEventArgs.prototype, \"style\", {\n // Propertise\n /**\n * Get the `PdfGridCellStyle`.\n * @private\n */\n get: function () {\n return this.cellStyle;\n },\n enumerable: true,\n configurable: true\n });\n return PdfGridEndCellDrawEventArgs;\n}(GridCellEventArgs));\nexport { PdfGridEndCellDrawEventArgs };\n/**\n * `PdfGridCancelEventArgs` class is alternate for cancel events.\n */\nvar PdfCancelEventArgs = /** @class */ (function () {\n function PdfCancelEventArgs() {\n }\n Object.defineProperty(PdfCancelEventArgs.prototype, \"cancel\", {\n // Properties\n /**\n * Gets and Sets the value of `cancel`.\n * @private\n */\n get: function () {\n return this.isCancel;\n },\n set: function (value) {\n this.isCancel = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfCancelEventArgs;\n}());\nexport { PdfCancelEventArgs };\n/**\n * `BeginPageLayoutEventArgs` class is alternate for begin page layout events.\n */\nvar BeginPageLayoutEventArgs = /** @class */ (function (_super) {\n __extends(BeginPageLayoutEventArgs, _super);\n // Constructors\n /**\n * Initializes a new instance of the `BeginPageLayoutEventArgs` class with the specified rectangle and page.\n * @private\n */\n function BeginPageLayoutEventArgs(bounds, page) {\n var _this = _super.call(this) || this;\n _this.bounds = bounds;\n _this.pdfPage = page;\n return _this;\n }\n Object.defineProperty(BeginPageLayoutEventArgs.prototype, \"bounds\", {\n // Properties\n /**\n * Gets or sets value that indicates the lay outing `bounds` on the page.\n * @private\n */\n get: function () {\n return this.cellBounds;\n },\n set: function (value) {\n this.cellBounds = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BeginPageLayoutEventArgs.prototype, \"page\", {\n /**\n * Gets the `page` where the lay outing should start.\n * @private\n */\n get: function () {\n return this.pdfPage;\n },\n enumerable: true,\n configurable: true\n });\n return BeginPageLayoutEventArgs;\n}(PdfCancelEventArgs));\nexport { BeginPageLayoutEventArgs };\n/**\n * `EndPageLayoutEventArgs` class is alternate for end page layout events.\n */\nvar EndPageLayoutEventArgs = /** @class */ (function (_super) {\n __extends(EndPageLayoutEventArgs, _super);\n // Constructors\n /**\n * Initializes a new instance of the `EndPageLayoutEventArgs` class. with the specified 'PdfLayoutResult'.\n * @private\n */\n function EndPageLayoutEventArgs(result) {\n var _this = _super.call(this) || this;\n _this.layoutResult = result;\n return _this;\n }\n Object.defineProperty(EndPageLayoutEventArgs.prototype, \"result\", {\n // Properties\n /**\n * Gets the lay outing `result` of the page.\n * @private\n */\n get: function () {\n return this.layoutResult;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EndPageLayoutEventArgs.prototype, \"nextPage\", {\n /**\n * Gets or sets a value indicating the `next page` where the element should be layout.\n * @private\n */\n get: function () {\n return this.nextPdfPage;\n },\n set: function (value) {\n this.nextPdfPage = value;\n },\n enumerable: true,\n configurable: true\n });\n return EndPageLayoutEventArgs;\n}(PdfCancelEventArgs));\nexport { EndPageLayoutEventArgs };\n/**\n * `PdfGridBeginPageLayoutEventArgs` class is alternate for begin page layout events.\n */\nvar PdfGridBeginPageLayoutEventArgs = /** @class */ (function (_super) {\n __extends(PdfGridBeginPageLayoutEventArgs, _super);\n // Constructors\n /**\n * Initialize a new instance of `PdfGridBeginPageLayoutEventArgs` class.\n * @private\n */\n function PdfGridBeginPageLayoutEventArgs(bounds, page, startRow) {\n var _this = _super.call(this, bounds, page) || this;\n _this.startRow = startRow;\n return _this;\n }\n Object.defineProperty(PdfGridBeginPageLayoutEventArgs.prototype, \"startRowIndex\", {\n // Properties\n /**\n * Gets the `start row index`.\n * @private\n */\n get: function () {\n return this.startRow;\n },\n enumerable: true,\n configurable: true\n });\n return PdfGridBeginPageLayoutEventArgs;\n}(BeginPageLayoutEventArgs));\nexport { PdfGridBeginPageLayoutEventArgs };\n/**\n * `PdfGridEndPageLayoutEventArgs` class is alternate for begin page layout events.\n */\nvar PdfGridEndPageLayoutEventArgs = /** @class */ (function (_super) {\n __extends(PdfGridEndPageLayoutEventArgs, _super);\n // Constructors\n /**\n * Initialize a new instance of `PdfGridEndPageLayoutEventArgs` class.\n * @private\n */\n function PdfGridEndPageLayoutEventArgs(result) {\n return _super.call(this, result) || this;\n }\n return PdfGridEndPageLayoutEventArgs;\n}(EndPageLayoutEventArgs));\nexport { PdfGridEndPageLayoutEventArgs };\n/**\n * `RowLayoutResult` class to store layout result of rows.\n */\nvar RowLayoutResult = /** @class */ (function () {\n //Constructors\n /**\n * Initializes a new instance of the `RowLayoutResult` class.\n * @private\n */\n function RowLayoutResult() {\n this.layoutedBounds = new RectangleF(0, 0, 0, 0);\n }\n Object.defineProperty(RowLayoutResult.prototype, \"isFinish\", {\n /**\n * Gets or sets a value indicating whether this instance `is finish`.\n * @private\n */\n get: function () {\n return this.bIsFinished;\n },\n set: function (value) {\n this.bIsFinished = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(RowLayoutResult.prototype, \"bounds\", {\n /**\n * Gets or sets the `bounds`.\n * @private\n */\n get: function () {\n return this.layoutedBounds;\n },\n set: function (value) {\n this.layoutedBounds = value;\n },\n enumerable: true,\n configurable: true\n });\n return RowLayoutResult;\n}());\nexport { RowLayoutResult };\n/**\n * `PdfGridLayoutResult` class represents the results of the PdfGrid including bounds and resultant page.\n */\nvar PdfGridLayoutResult = /** @class */ (function (_super) {\n __extends(PdfGridLayoutResult, _super);\n // Constructor\n /**\n * Initializes a new instance of the `PdfGridLayoutResult` class with the current page and bounds.\n * @private\n */\n function PdfGridLayoutResult(page, bounds) {\n return _super.call(this, page, bounds) || this;\n }\n return PdfGridLayoutResult;\n}(PdfLayoutResult));\nexport { PdfGridLayoutResult };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { NotifyPropertyChanges, Property, Event, Complex } from '@syncfusion/ej2-base';\nimport { SvgRenderer, extend, compile as templateComplier, Component } from '@syncfusion/ej2-base';\nimport { ChildProperty, createElement, remove, Browser, Animation } from '@syncfusion/ej2-base';\nimport { getTooltipThemeColor } from './interface';\nimport { Size, Rect, Side, measureText, getElement, findDirection, drawSymbol, textElement } from './helper';\nimport { removeElement, TextOption, TooltipLocation, PathOption } from './helper';\n/**\n * Configures the fonts in charts.\n * @private\n */\nvar TextStyle = /** @class */ (function (_super) {\n __extends(TextStyle, _super);\n function TextStyle() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], TextStyle.prototype, \"size\", void 0);\n __decorate([\n Property('')\n ], TextStyle.prototype, \"color\", void 0);\n __decorate([\n Property('Segoe UI')\n ], TextStyle.prototype, \"fontFamily\", void 0);\n __decorate([\n Property('Normal')\n ], TextStyle.prototype, \"fontWeight\", void 0);\n __decorate([\n Property('Normal')\n ], TextStyle.prototype, \"fontStyle\", void 0);\n __decorate([\n Property(1)\n ], TextStyle.prototype, \"opacity\", void 0);\n return TextStyle;\n}(ChildProperty));\nexport { TextStyle };\n/**\n * Configures the borders in the chart.\n * @private\n */\nvar TooltipBorder = /** @class */ (function (_super) {\n __extends(TooltipBorder, _super);\n function TooltipBorder() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], TooltipBorder.prototype, \"color\", void 0);\n __decorate([\n Property(1)\n ], TooltipBorder.prototype, \"width\", void 0);\n return TooltipBorder;\n}(ChildProperty));\nexport { TooltipBorder };\n/**\n * Configures the borders in the chart.\n * @private\n */\nvar AreaBounds = /** @class */ (function (_super) {\n __extends(AreaBounds, _super);\n function AreaBounds() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0)\n ], AreaBounds.prototype, \"x\", void 0);\n __decorate([\n Property(0)\n ], AreaBounds.prototype, \"y\", void 0);\n __decorate([\n Property(0)\n ], AreaBounds.prototype, \"width\", void 0);\n __decorate([\n Property(0)\n ], AreaBounds.prototype, \"height\", void 0);\n return AreaBounds;\n}(ChildProperty));\nexport { AreaBounds };\n/**\n * Configures the borders in the chart.\n * @private\n */\nvar ToolLocation = /** @class */ (function (_super) {\n __extends(ToolLocation, _super);\n function ToolLocation() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0)\n ], ToolLocation.prototype, \"x\", void 0);\n __decorate([\n Property(0)\n ], ToolLocation.prototype, \"y\", void 0);\n return ToolLocation;\n}(ChildProperty));\nexport { ToolLocation };\n/**\n * Represents the Tooltip control.\n * ```html\n *
\n * \n * ```\n * @private\n */\nvar Tooltip = /** @class */ (function (_super) {\n __extends(Tooltip, _super);\n /**\n * Constructor for creating the widget\n * @hidden\n */\n function Tooltip(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Initialize the event handler.\n * @private.\n */\n Tooltip.prototype.preRender = function () {\n this.initPrivateVariable();\n this.removeSVG();\n this.createElement();\n };\n Tooltip.prototype.initPrivateVariable = function () {\n this.renderer = new SvgRenderer(this.element.id);\n this.themeStyle = getTooltipThemeColor(this.theme);\n this.formattedText = [];\n this.padding = 5;\n this.isFirst = true;\n this.markerPoint = [];\n };\n Tooltip.prototype.removeSVG = function () {\n var svgObject = document.getElementById(this.element.id + '_svg');\n var templateObject = document.getElementById(this.element.id + 'parent_template');\n if (svgObject && svgObject.parentNode) {\n remove(svgObject);\n }\n if (templateObject && templateObject.parentNode) {\n remove(templateObject);\n }\n };\n /**\n * To Initialize the control rendering.\n */\n Tooltip.prototype.render = function () {\n this.fadeOuted = false;\n if (!this.template) {\n this.renderText(this.isFirst);\n var argsData = {\n cancel: false, name: 'tooltipRender', tooltip: this\n };\n this.trigger('tooltipRender', argsData);\n var markerSide = this.renderTooltipElement(this.areaBounds, this.location);\n this.drawMarker(markerSide.isBottom, markerSide.isRight, this.markerSize);\n }\n else {\n this.updateTemplateFn();\n this.createTemplate(this.areaBounds, this.location);\n }\n this.trigger('loaded', { tooltip: this });\n };\n Tooltip.prototype.createElement = function () {\n this.textElements = [];\n if (!this.template || this.shared) {\n // SVG element for tooltip\n var svgObject = this.renderer.createSvg({ id: this.element.id + '_svg' });\n this.element.appendChild(svgObject);\n // Group to hold text and path.\n var groupElement = this.renderer.createGroup({ id: this.element.id + '_group' });\n svgObject.appendChild(groupElement);\n var pathElement = this.renderer.drawPath({\n 'id': this.element.id + '_path', 'stroke-width': this.border.width,\n 'fill': this.fill || this.themeStyle.tooltipFill, 'opacity': this.opacity,\n 'stroke': this.border.color\n });\n groupElement.appendChild(pathElement);\n }\n };\n Tooltip.prototype.drawMarker = function (isBottom, isRight, size) {\n if (this.shapes.length <= 0) {\n return null;\n }\n var shapeOption;\n var count = 0;\n var markerGroup = this.renderer.createGroup({ id: this.element.id + '_trackball_group' });\n var groupElement = getElement(this.element.id + '_group');\n var x = (this.marginX * 2) + (size / 2) + (isRight ? this.arrowPadding : 0);\n for (var _i = 0, _a = this.shapes; _i < _a.length; _i++) {\n var shape = _a[_i];\n shapeOption = new PathOption(this.element.id + '_Trackball_' + count, this.palette[count], 1, '#cccccc', 1, null);\n markerGroup.appendChild(drawSymbol(new TooltipLocation(x, this.markerPoint[count] - this.padding + (isBottom ? this.arrowPadding : 0)), shape, new Size(size, size), '', shapeOption, null));\n count++;\n }\n groupElement.appendChild(markerGroup);\n };\n Tooltip.prototype.renderTooltipElement = function (areaBounds, location) {\n var tooltipDiv = getElement(this.element.id);\n var arrowLocation = new TooltipLocation(0, 0);\n var tipLocation = new TooltipLocation(0, 0);\n var textHeights;\n var svgObject = getElement(this.element.id + '_svg');\n var groupElement = getElement(this.element.id + '_group');\n var pathElement = getElement(this.element.id + '_path');\n var rect;\n var isTop = false;\n var isLeft = false;\n var isBottom = false;\n var x = 0;\n var y = 0;\n this.tipRadius = 1;\n if (this.header !== '') {\n this.elementSize.height += this.marginY;\n }\n if (this.content.length > 1) {\n rect = this.sharedTooltipLocation(areaBounds, this.location.x, this.location.y);\n isTop = true;\n }\n else {\n rect = this.tooltipLocation(areaBounds, location, arrowLocation, tipLocation);\n if (!this.inverted) {\n isTop = (rect.y < (location.y + this.clipBounds.y));\n isBottom = !isTop;\n y = (isTop ? 0 : this.arrowPadding);\n }\n else {\n isLeft = (rect.x < (location.x + this.clipBounds.x));\n x = (isLeft ? 0 : this.arrowPadding);\n }\n }\n if (this.header !== '') {\n var headerSize = measureText(this.header, this.textStyle).height + (this.marginY * 2) +\n (isBottom ? this.arrowPadding : 0); //header padding;\n var xLength = (this.marginX * 3) + (!isLeft && !isTop && !isBottom ? this.arrowPadding : 0);\n var direction = 'M ' + xLength + ' ' + headerSize +\n 'L ' + (rect.width + (!isLeft && !isTop && !isBottom ? this.arrowPadding : 0) - (this.marginX * 2)) +\n ' ' + headerSize;\n var pathElement_1 = this.renderer.drawPath({\n 'id': this.element.id + '_header_path', 'stroke-width': 1,\n 'fill': null, 'opacity': 0.8, 'stroke': this.themeStyle.tooltipHeaderLine, 'd': direction\n });\n groupElement.appendChild(pathElement_1);\n }\n var start = this.border.width / 2;\n var pointRect = new Rect(start + x, start + y, rect.width - start, rect.height - start);\n groupElement.setAttribute('opacity', '1');\n if (this.enableAnimation && !this.shared && !this.isFirst) {\n this.animateTooltipDiv(tooltipDiv, rect);\n }\n else {\n this.updateDiv(tooltipDiv, rect.x, rect.y);\n }\n svgObject.setAttribute('height', (rect.height + this.border.width + (!((!this.inverted)) ? 0 : this.arrowPadding)).toString());\n svgObject.setAttribute('width', (rect.width + this.border.width + (((!this.inverted)) ? 0 : this.arrowPadding)).toString());\n svgObject.setAttribute('opacity', '1');\n pathElement.setAttribute('d', findDirection(this.rx, this.ry, pointRect, arrowLocation, this.arrowPadding, isTop, isBottom, isLeft, tipLocation.x, tipLocation.y, this.tipRadius));\n if (this.enableShadow) {\n pathElement.setAttribute('filter', Browser.isIE ? '' : 'url(#chart_shadow_tooltip)');\n var shadow = '';\n shadow += '';\n shadow += '';\n var defElement = this.renderer.createDefs();\n defElement.setAttribute('id', 'SVG_tooltip_definition');\n groupElement.appendChild(defElement);\n defElement.innerHTML = shadow;\n }\n pathElement.setAttribute('stroke', this.border.color);\n this.changeText(new TooltipLocation(x, y), isBottom, !isLeft && !isTop && !isBottom, rect);\n return new Side(isBottom, !isLeft && !isTop && !isBottom);\n };\n Tooltip.prototype.changeText = function (point, isBottom, isRight, rect) {\n var element = document.getElementById(this.element.id + '_text');\n if (isBottom) {\n element.setAttribute('transform', 'translate(0,' + this.arrowPadding + ')');\n }\n if (isRight) {\n element.setAttribute('transform', 'translate(' + this.arrowPadding + ' 0)');\n }\n };\n Tooltip.prototype.findFormattedText = function () {\n this.formattedText = [];\n if (this.header.replace(//g, '').replace(/<\\/b>/g, '').trim() !== '') {\n this.formattedText = this.formattedText.concat(this.header);\n }\n this.formattedText = this.formattedText.concat(this.content);\n };\n Tooltip.prototype.renderText = function (isRender) {\n var height = 0;\n var width = 0; // Padding for text;\n var subWidth = 0;\n var size;\n var lines;\n var key = 'properties';\n var font = extend({}, this.textStyle, null, true)[key];\n var groupElement = getElement(this.element.id + '_group');\n var tspanElement;\n var tspanStyle = '';\n var line;\n var tspanOption;\n this.findFormattedText();\n var headerContent = this.header.replace(//g, '').replace(/<\\/b>/g, '').trim();\n var headerSpace = (headerContent !== '') ? this.marginY : 0;\n var isRow = true;\n var isColumn = true;\n this.markerPoint = [];\n var markerSize = (this.shapes.length > 0) ? 10 : 0;\n var markerPadding = (this.shapes.length > 0) ? 5 : 0;\n var spaceWidth = 4;\n var fontSize = '13px';\n var dy = (22 / parseFloat(fontSize)) * (parseFloat(font.size));\n if (!isRender) {\n removeElement(this.element.id + '_text');\n removeElement(this.element.id + '_header_path');\n removeElement(this.element.id + '_trackball_group');\n removeElement('SVG_tooltip_definition');\n }\n var options = new TextOption(this.element.id + '_text', this.marginX * 2, (this.marginY * 2 + this.padding * 2 + (this.marginY === 2 ? 3 : 0)), 'start', '');\n var parentElement = textElement(options, font, null, groupElement);\n for (var k = 0, pointsLength = this.formattedText.length; k < pointsLength; k++) {\n var textCollection = this.formattedText[k].replace(/<(b|strong)>/g, '')\n .replace(/<\\/(b|strong)>/g, '')\n .split(//g);\n size = measureText(this.formattedText[k], font);\n if ((k !== 0) || (headerContent === '')) {\n this.markerPoint.push((headerContent !== '' ? (this.marginY) : 0) + options.y + height);\n }\n for (var i = 0, len = textCollection.length; i < len; i++) {\n lines = textCollection[i].replace(//g, '
').replace(/<\\/b>/g, '
').split('
');\n subWidth = 0;\n isColumn = true;\n height += dy;\n for (var k_1 = 0, len_1 = lines.length; k_1 < len_1; k_1++) {\n line = lines[k_1];\n if (line.replace(//g, '').replace(/<\\/b>/g, '').trim() !== '') {\n subWidth += spaceWidth;\n if (isColumn && !isRow) {\n tspanOption = { x: (this.marginX * 2) + (markerSize + markerPadding),\n dy: dy + ((isColumn) ? headerSpace : 0), fill: '' };\n headerSpace = null;\n }\n else {\n if (isRow && isColumn) {\n tspanOption = { x: (headerContent === '') ? ((this.marginX * 2) + (markerSize + markerPadding))\n : (this.marginX * 2) };\n }\n else {\n tspanOption = {};\n }\n }\n isColumn = false;\n tspanElement = this.renderer.createTSpan(tspanOption, '');\n parentElement.appendChild(tspanElement);\n if (line.indexOf('') > -1) {\n tspanStyle = 'font-weight:bold';\n font.fontWeight = 'bold';\n (tspanElement).setAttribute('fill', this.textStyle.color || this.themeStyle.tooltipBoldLabel);\n }\n else {\n tspanStyle = '';\n font.fontWeight = 'Normal';\n (tspanElement).setAttribute('fill', this.textStyle.color || this.themeStyle.tooltipLightLabel);\n }\n (tspanElement).textContent = line = line.replace(/<[a-zA-Z\\/](.|\\n)*?>/g, '');\n subWidth += measureText(line, font).width;\n if (tspanStyle !== '') {\n tspanElement.setAttribute('style', tspanStyle);\n }\n isRow = false;\n }\n }\n subWidth -= spaceWidth;\n width = Math.max(width, subWidth);\n }\n }\n this.elementSize = new Size(width + (width > 0 ? (2 * this.marginX) : 0), height);\n this.elementSize.width += (markerSize + markerPadding); // marker size + marker Spacing\n var element = (parentElement.childNodes[0]);\n if (headerContent !== '' && element) {\n font.fontWeight = 'bold';\n var width_1 = (this.elementSize.width + (2 * this.padding)) / 2 - measureText(headerContent, font).width / 2;\n element.setAttribute('x', width_1.toString());\n }\n };\n Tooltip.prototype.createTemplate = function (areaBounds, location) {\n var argsData = { cancel: false, name: 'tooltipRender', tooltip: this };\n this.trigger('tooltipRender', argsData);\n var parent = document.getElementById(this.element.id);\n var firstElement = parent.firstElementChild;\n if (firstElement) {\n firstElement.remove();\n }\n if (!argsData.cancel) {\n var templateElement = this.templateFn(this.data);\n var elem = createElement('div', { id: this.element.id + 'parent_template' });\n while (templateElement && templateElement.length > 0) {\n elem.appendChild(templateElement[0]);\n }\n parent.appendChild(elem);\n var rect = this.element.getBoundingClientRect();\n this.padding = 0;\n this.elementSize = new Size(rect.width, rect.height);\n var tooltipRect = this.tooltipLocation(areaBounds, location, new TooltipLocation(0, 0), new TooltipLocation(0, 0));\n if (this.enableAnimation && !this.shared && !this.isFirst) {\n this.animateTooltipDiv(this.element, tooltipRect);\n }\n else {\n this.updateDiv(this.element, tooltipRect.x, tooltipRect.y);\n }\n }\n else {\n getElement(this.element.id + '_tooltip').remove();\n }\n };\n Tooltip.prototype.sharedTooltipLocation = function (bounds, x, y) {\n var width = this.elementSize.width + (2 * this.marginX);\n var height = this.elementSize.height + (2 * this.marginY);\n var tooltipRect = new Rect(x + 2 * this.padding, y - height - this.padding, width, height);\n if (tooltipRect.y < bounds.y) {\n tooltipRect.y += (tooltipRect.height + 2 * this.padding);\n }\n if (tooltipRect.x + tooltipRect.width > bounds.x + bounds.width) {\n tooltipRect.x -= (tooltipRect.width + 4 * this.padding);\n }\n return tooltipRect;\n };\n Tooltip.prototype.tooltipLocation = function (bounds, symbolLocation, arrowLocation, tipLocation) {\n var location = new TooltipLocation(symbolLocation.x, symbolLocation.y);\n var width = this.elementSize.width + (2 * this.marginX);\n var height = this.elementSize.height + (2 * this.marginY);\n var markerHeight = this.offset;\n var clipX = this.clipBounds.x;\n var clipY = this.clipBounds.y;\n var boundsX = bounds.x;\n var boundsY = bounds.y;\n if (!this.inverted) {\n location = new TooltipLocation(location.x + clipX - this.elementSize.width / 2 - this.padding, location.y + clipY - this.elementSize.height - (2 * this.padding) - this.arrowPadding - markerHeight);\n arrowLocation.x = tipLocation.x = width / 2;\n if (location.y < boundsY || (this.isNegative)) {\n location.y = (symbolLocation.y < 0 ? 0 : symbolLocation.y) + clipY + markerHeight;\n }\n if (location.y + height + this.arrowPadding > boundsY + bounds.height) {\n location.y = (symbolLocation.y > bounds.height ? bounds.height : symbolLocation.y)\n + clipY - this.elementSize.height - (2 * this.padding) - this.arrowPadding - markerHeight;\n }\n tipLocation.x = width / 2;\n if (location.x < boundsX) {\n arrowLocation.x -= (boundsX - location.x);\n tipLocation.x -= (boundsX - location.x);\n location.x = boundsX;\n }\n if (location.x + width > boundsX + bounds.width) {\n arrowLocation.x += ((location.x + width) - (boundsX + bounds.width));\n tipLocation.x += ((location.x + width) - (boundsX + bounds.width));\n location.x -= ((location.x + width) - (boundsX + bounds.width));\n }\n if (arrowLocation.x + this.arrowPadding / 2 > width - this.rx) {\n arrowLocation.x = width - this.rx - this.arrowPadding / 2;\n tipLocation.x = width;\n this.tipRadius = 0;\n }\n if (arrowLocation.x - this.arrowPadding / 2 < this.rx) {\n arrowLocation.x = this.rx + this.arrowPadding / 2;\n tipLocation.x = 0;\n this.tipRadius = 0;\n }\n }\n else {\n location = new TooltipLocation(location.x + clipX + markerHeight, location.y + clipY - this.elementSize.height / 2 - (this.padding));\n arrowLocation.y = tipLocation.y = height / 2;\n if ((location.x + width + this.arrowPadding > boundsX + bounds.width) || (this.isNegative)) {\n location.x = (symbolLocation.x > bounds.width ? bounds.width : symbolLocation.x)\n + clipX - markerHeight - (width + this.arrowPadding);\n }\n if (location.x < boundsX) {\n location.x = (symbolLocation.x < 0 ? 0 : symbolLocation.x) + clipX + markerHeight;\n }\n if (location.y <= boundsY) {\n arrowLocation.y -= (boundsY - location.y);\n tipLocation.y -= (boundsY - location.y);\n location.y = boundsY;\n }\n if (location.y + height >= boundsY + bounds.height) {\n arrowLocation.y += ((location.y + height) - (boundsY + bounds.height));\n tipLocation.y += ((location.y + height) - (boundsY + bounds.height));\n location.y -= ((location.y + height) - (boundsY + bounds.height));\n }\n if (arrowLocation.y + this.arrowPadding / 2 > height - this.ry) {\n arrowLocation.y = height - this.ry - this.arrowPadding / 2;\n tipLocation.y = height;\n this.tipRadius = 0;\n }\n if (arrowLocation.y - this.arrowPadding / 2 < this.ry) {\n arrowLocation.y = this.ry + this.arrowPadding / 2;\n tipLocation.y = 0;\n this.tipRadius = 0;\n }\n }\n return new Rect(location.x, location.y, width, height);\n };\n Tooltip.prototype.animateTooltipDiv = function (tooltipDiv, rect) {\n var _this = this;\n var x = parseFloat(tooltipDiv.style.left);\n var y = parseFloat(tooltipDiv.style.top);\n var currenDiff;\n new Animation({}).animate(tooltipDiv, {\n duration: 300,\n progress: function (args) {\n currenDiff = (args.timeStamp / args.duration);\n tooltipDiv.style.animation = null;\n tooltipDiv.style.left = (x + currenDiff * (rect.x - x)) + 'px';\n tooltipDiv.style.top = (y + currenDiff * (rect.y - y)) + 'px';\n },\n end: function (model) {\n _this.updateDiv(tooltipDiv, rect.x, rect.y);\n _this.trigger('animationComplete', { tooltip: _this });\n }\n });\n };\n Tooltip.prototype.updateDiv = function (tooltipDiv, x, y) {\n tooltipDiv.style.left = x + 'px';\n tooltipDiv.style.top = y + 'px';\n };\n Tooltip.prototype.updateTemplateFn = function () {\n if (this.template) {\n var e = void 0;\n try {\n if (document.querySelectorAll(this.template).length) {\n this.templateFn = templateComplier(document.querySelector(this.template).innerHTML.trim());\n }\n }\n catch (e) {\n this.templateFn = templateComplier(this.template);\n }\n }\n };\n /** @private */\n Tooltip.prototype.fadeOut = function () {\n var _this = this;\n var tooltipElement = getElement(this.element.id);\n if (tooltipElement) {\n var tooltipGroup_1 = tooltipElement.firstChild;\n var opacity_1 = parseFloat(tooltipGroup_1.getAttribute('opacity')) || 1;\n new Animation({}).animate(tooltipGroup_1, {\n duration: 200,\n progress: function (args) {\n // tooltipGroup.removeAttribute('e-animate');\n _this.progressAnimation(tooltipGroup_1, opacity_1, (args.timeStamp / args.duration));\n },\n end: function (model) {\n _this.fadeOuted = true;\n _this.endAnimation(tooltipGroup_1);\n }\n });\n }\n };\n Tooltip.prototype.progressAnimation = function (tooltipGroup, opacity, timeStamp) {\n tooltipGroup.style.animation = '';\n tooltipGroup.setAttribute('opacity', (opacity - timeStamp).toString());\n };\n /*\n * @hidden\n */\n Tooltip.prototype.endAnimation = function (tooltipGroup) {\n tooltipGroup.setAttribute('opacity', '0');\n if (this.template && !this.shared) {\n tooltipGroup.style.display = 'none';\n }\n this.trigger('animationComplete', { tooltip: this });\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @private\n */\n Tooltip.prototype.getPersistData = function () {\n var keyEntity = [];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Get component name\n * @private\n */\n Tooltip.prototype.getModuleName = function () {\n return 'tooltip';\n };\n /**\n * To destroy the accumulationcharts\n * @private\n */\n Tooltip.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n this.element.classList.remove('e-tooltip');\n };\n /**\n * Called internally if any of the property value changed.\n * @return {void}\n * @private\n */\n Tooltip.prototype.onPropertyChanged = function (newProp, oldProp) {\n this.isFirst = false;\n this.render();\n };\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"enable\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"shared\", void 0);\n __decorate([\n Property(true)\n ], Tooltip.prototype, \"enableShadow\", void 0);\n __decorate([\n Property(null)\n ], Tooltip.prototype, \"fill\", void 0);\n __decorate([\n Property('')\n ], Tooltip.prototype, \"header\", void 0);\n __decorate([\n Property(0.75)\n ], Tooltip.prototype, \"opacity\", void 0);\n __decorate([\n Complex({ size: '13px', fontWeight: 'Normal', color: null, fontStyle: 'Normal', fontFamily: 'Segoe UI' }, TextStyle)\n ], Tooltip.prototype, \"textStyle\", void 0);\n __decorate([\n Property(null)\n ], Tooltip.prototype, \"template\", void 0);\n __decorate([\n Property(true)\n ], Tooltip.prototype, \"enableAnimation\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"inverted\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"isNegative\", void 0);\n __decorate([\n Complex({ color: '#cccccc', width: 0.5 }, TooltipBorder)\n ], Tooltip.prototype, \"border\", void 0);\n __decorate([\n Property([])\n ], Tooltip.prototype, \"content\", void 0);\n __decorate([\n Property(10)\n ], Tooltip.prototype, \"markerSize\", void 0);\n __decorate([\n Complex({ x: 0, y: 0 }, ToolLocation)\n ], Tooltip.prototype, \"clipBounds\", void 0);\n __decorate([\n Property([])\n ], Tooltip.prototype, \"palette\", void 0);\n __decorate([\n Property([])\n ], Tooltip.prototype, \"shapes\", void 0);\n __decorate([\n Complex({ x: 0, y: 0 }, ToolLocation)\n ], Tooltip.prototype, \"location\", void 0);\n __decorate([\n Property(0)\n ], Tooltip.prototype, \"offset\", void 0);\n __decorate([\n Property(2)\n ], Tooltip.prototype, \"rx\", void 0);\n __decorate([\n Property(2)\n ], Tooltip.prototype, \"ry\", void 0);\n __decorate([\n Property(5)\n ], Tooltip.prototype, \"marginX\", void 0);\n __decorate([\n Property(5)\n ], Tooltip.prototype, \"marginY\", void 0);\n __decorate([\n Property(12)\n ], Tooltip.prototype, \"arrowPadding\", void 0);\n __decorate([\n Property(null)\n ], Tooltip.prototype, \"data\", void 0);\n __decorate([\n Property('Material')\n ], Tooltip.prototype, \"theme\", void 0);\n __decorate([\n Complex({ x: 0, y: 0, width: 0, height: 0 }, AreaBounds)\n ], Tooltip.prototype, \"areaBounds\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"tooltipRender\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"loaded\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"animationComplete\", void 0);\n Tooltip = __decorate([\n NotifyPropertyChanges\n ], Tooltip);\n return Tooltip;\n}(Component));\nexport { Tooltip };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Touch, Component, EventHandler, selectAll, getUniqueID } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, Property, Browser, detach, createElement as buildTag } from '@syncfusion/ej2-base';\nvar CLS_ROOT = 'e-hscroll';\nvar CLS_RTL = 'e-rtl';\nvar CLS_DISABLE = 'e-overlay';\nvar CLS_HSCROLLBAR = 'e-hscroll-bar';\nvar CLS_HSCROLLCON = 'e-hscroll-content';\nvar CLS_NAVARROW = 'e-nav-arrow';\nvar CLS_NAVRIGHTARROW = 'e-nav-right-arrow';\nvar CLS_NAVLEFTARROW = 'e-nav-left-arrow';\nvar CLS_HSCROLLNAV = 'e-scroll-nav';\nvar CLS_HSCROLLNAVRIGHT = 'e-scroll-right-nav';\nvar CLS_HSCROLLNAVLEFT = 'e-scroll-left-nav';\nvar CLS_DEVICE = 'e-scroll-device';\n/**\n * HScroll module is introduces horizontal scroller when content exceeds the current viewing area.\n * It can be useful for the components like Toolbar, Tab which needs horizontal scrolling alone.\n * Hidden content can be view by touch moving or icon click.\n * ```html\n *
\n * \n * ```\n */\nvar HScroll = /** @class */ (function (_super) {\n __extends(HScroll, _super);\n /**\n * Initializes a new instance of the HScroll class.\n * @param options - Specifies HScroll model properties as options.\n * @param element - Specifies the element for which horizontal scrolling applies.\n */\n function HScroll(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Initialize the event handler\n * @private\n */\n HScroll.prototype.preRender = function () {\n this.browser = Browser.info.name;\n this.browserCheck = this.browser === 'mozilla';\n this.isDevice = Browser.isDevice;\n var element = this.element;\n this.ieCheck = this.browser === 'edge' || this.browser === 'msie';\n this.initialize();\n if (element.id === '') {\n element.id = getUniqueID('hscroll');\n this.uniqueId = true;\n }\n element.style.display = 'block';\n if (this.enableRtl) {\n element.classList.add(CLS_RTL);\n }\n };\n /**\n * To Initialize the control rendering\n * @private\n */\n HScroll.prototype.render = function () {\n this.touchModule = new Touch(this.element, { scroll: this.touchHandler.bind(this) });\n if (!this.isDevice) {\n this.createNavIcon(this.element);\n EventHandler.add(this.scrollEle, 'scroll', this.scrollHandler, this);\n }\n else {\n this.element.classList.add(CLS_DEVICE);\n }\n };\n HScroll.prototype.initialize = function () {\n var scrollEle = buildTag('div', { className: CLS_HSCROLLCON });\n var scrollDiv = buildTag('div', { className: CLS_HSCROLLBAR });\n scrollDiv.setAttribute('tabindex', '-1');\n var ele = this.element;\n var innerEle = [].slice.call(ele.children);\n for (var _i = 0, innerEle_1 = innerEle; _i < innerEle_1.length; _i++) {\n var ele_1 = innerEle_1[_i];\n scrollEle.appendChild(ele_1);\n }\n scrollDiv.appendChild(scrollEle);\n ele.appendChild(scrollDiv);\n scrollDiv.style.overflowX = 'hidden';\n this.scrollEle = scrollDiv;\n this.scrollItems = scrollEle;\n };\n HScroll.prototype.getPersistData = function () {\n var keyEntity = ['scrollStep'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Returns the current module name.\n * @returns string\n * @private\n */\n HScroll.prototype.getModuleName = function () {\n return 'hScroll';\n };\n /**\n * Removes the control from the DOM and also removes all its related events.\n * @returns void\n */\n HScroll.prototype.destroy = function () {\n var ele = this.element;\n ele.style.display = '';\n ele.classList.remove(CLS_ROOT);\n var nav = selectAll('.e-' + ele.id + '_nav.' + CLS_HSCROLLNAV, ele);\n for (var _i = 0, _a = [].slice.call(this.scrollItems.children); _i < _a.length; _i++) {\n var elem = _a[_i];\n ele.appendChild(elem);\n }\n if (this.uniqueId) {\n this.element.removeAttribute('id');\n }\n detach(this.scrollEle);\n if (nav.length > 0) {\n detach(nav[0]);\n detach(nav[1]);\n }\n EventHandler.remove(this.scrollEle, 'scroll', this.scrollHandler);\n this.touchModule.destroy();\n this.touchModule = null;\n _super.prototype.destroy.call(this);\n };\n /**\n * Specifies the value to disable/enable the HScroll component.\n * When set to `true`, the component will be disabled.\n * @param {boolean} value - Based on this Boolean value, HScroll will be enabled (false) or disabled (true).\n * @returns void.\n */\n HScroll.prototype.disable = function (value) {\n var navEles = selectAll('.e-scroll-nav:not(.' + CLS_DISABLE + ')', this.element);\n value ? this.element.classList.add(CLS_DISABLE) : this.element.classList.remove(CLS_DISABLE);\n navEles.forEach(function (el) {\n el.setAttribute('tabindex', !value ? '0' : '-1');\n });\n };\n HScroll.prototype.createNavIcon = function (element) {\n var id = element.id.concat('_nav');\n var clsRight = 'e-' + element.id.concat('_nav ' + CLS_HSCROLLNAV + ' ' + CLS_HSCROLLNAVRIGHT);\n var nav = buildTag('div', { id: id.concat('_right'), className: clsRight });\n nav.setAttribute('aria-disabled', 'false');\n var navItem = buildTag('div', { className: CLS_NAVRIGHTARROW + ' ' + CLS_NAVARROW + ' e-icons' });\n var clsLeft = 'e-' + element.id.concat('_nav ' + CLS_HSCROLLNAV + ' ' + CLS_HSCROLLNAVLEFT);\n var navEle = buildTag('div', { id: id.concat('_left'), className: clsLeft + ' ' + CLS_DISABLE });\n navEle.setAttribute('aria-disabled', 'true');\n var navLeftItem = buildTag('div', { className: CLS_NAVLEFTARROW + ' ' + CLS_NAVARROW + ' e-icons' });\n navEle.appendChild(navLeftItem);\n nav.appendChild(navItem);\n nav.setAttribute('tabindex', '0');\n element.appendChild(nav);\n element.insertBefore(navEle, element.firstChild);\n if (this.ieCheck) {\n nav.classList.add('e-ie-align');\n navEle.classList.add('e-ie-align');\n }\n this.eventBinding([nav, navEle]);\n };\n HScroll.prototype.onKeyPress = function (e) {\n var _this = this;\n if (e.key === 'Enter') {\n var timeoutFun_1 = function () {\n _this.keyTimeout = true;\n _this.eleScrolling(10, e.target);\n };\n this.keyTimer = window.setTimeout(function () {\n timeoutFun_1();\n }, 100);\n }\n };\n HScroll.prototype.onKeyUp = function (e) {\n if (e.key !== 'Enter') {\n return;\n }\n if (this.keyTimeout) {\n this.keyTimeout = false;\n }\n else {\n e.target.click();\n }\n clearTimeout(this.keyTimer);\n };\n HScroll.prototype.eventBinding = function (ele) {\n var _this = this;\n ele.forEach(function (el) {\n new Touch(el, { tapHold: _this.tabHoldHandler.bind(_this), tapHoldThreshold: 500 });\n el.addEventListener('keydown', _this.onKeyPress.bind(_this));\n el.addEventListener('keyup', _this.onKeyUp.bind(_this));\n el.addEventListener('mouseup', _this.repeatScroll.bind(_this));\n el.addEventListener('touchend', _this.repeatScroll.bind(_this));\n el.addEventListener('contextmenu', function (e) {\n e.preventDefault();\n });\n EventHandler.add(el, 'click', _this.clickEventHandler, _this);\n });\n };\n HScroll.prototype.repeatScroll = function () {\n clearInterval(this.timeout);\n };\n HScroll.prototype.tabHoldHandler = function (e) {\n var _this = this;\n var trgt = e.originalEvent.target;\n trgt = this.contains(trgt, CLS_HSCROLLNAV) ? trgt.firstElementChild : trgt;\n var scrollDis = 10;\n var timeoutFun = function () {\n _this.eleScrolling(scrollDis, trgt);\n };\n this.timeout = window.setInterval(function () {\n timeoutFun();\n }, 50);\n };\n HScroll.prototype.contains = function (ele, className) {\n return ele.classList.contains(className);\n };\n HScroll.prototype.eleScrolling = function (scrollDis, trgt) {\n var element = this.scrollEle;\n var rootEle = this.element;\n var classList = trgt.classList;\n if (classList.contains(CLS_HSCROLLNAV)) {\n classList = trgt.querySelector('.' + CLS_NAVARROW).classList;\n }\n if (this.contains(rootEle, CLS_RTL) && this.browserCheck) {\n scrollDis = -scrollDis;\n }\n var scrlLeft = element.scrollLeft;\n if ((!this.contains(rootEle, CLS_RTL) || this.browserCheck) || this.ieCheck) {\n if (classList.contains(CLS_NAVRIGHTARROW)) {\n element.scrollLeft = scrlLeft + scrollDis;\n }\n else {\n element.scrollLeft = scrlLeft - scrollDis;\n }\n }\n else {\n if (classList.contains(CLS_NAVLEFTARROW)) {\n element.scrollLeft = scrlLeft + scrollDis;\n }\n else {\n element.scrollLeft = scrlLeft - scrollDis;\n }\n }\n };\n HScroll.prototype.clickEventHandler = function (e) {\n this.eleScrolling(this.scrollStep, e.target);\n };\n HScroll.prototype.touchHandler = function (e) {\n var ele = this.scrollEle;\n var distance;\n distance = e.distanceX;\n if ((this.ieCheck) && this.contains(this.element, CLS_RTL)) {\n distance = -distance;\n }\n if (e.scrollDirection === 'Left') {\n ele.scrollLeft = ele.scrollLeft + distance;\n }\n else if (e.scrollDirection === 'Right') {\n ele.scrollLeft = ele.scrollLeft - distance;\n }\n };\n HScroll.prototype.arrowDisabling = function (addDisable, removeDisable) {\n addDisable.classList.add(CLS_DISABLE);\n addDisable.setAttribute('aria-disabled', 'true');\n addDisable.removeAttribute('tabindex');\n clearInterval(this.timeout);\n removeDisable.classList.remove(CLS_DISABLE);\n removeDisable.setAttribute('aria-disabled', 'false');\n removeDisable.setAttribute('tabindex', '0');\n this.repeatScroll();\n };\n HScroll.prototype.scrollHandler = function (e) {\n var target = e.target;\n var width = target.offsetWidth;\n var rootEle = this.element;\n var navLeftEle = this.element.querySelector('.' + CLS_HSCROLLNAVLEFT);\n var navRightEle = this.element.querySelector('.' + CLS_HSCROLLNAVRIGHT);\n var scrollLeft = target.scrollLeft;\n if (scrollLeft <= 0) {\n scrollLeft = -scrollLeft;\n }\n if (scrollLeft === 0) {\n if ((!this.contains(rootEle, CLS_RTL) || this.browserCheck) || this.ieCheck) {\n this.arrowDisabling(navLeftEle, navRightEle);\n }\n else {\n this.arrowDisabling(navRightEle, navLeftEle);\n }\n }\n else if (Math.ceil(width + scrollLeft + .1) >= target.scrollWidth) {\n if ((!this.contains(rootEle, CLS_RTL) || this.browserCheck) || this.ieCheck) {\n this.arrowDisabling(navRightEle, navLeftEle);\n }\n else {\n this.arrowDisabling(navLeftEle, navRightEle);\n }\n }\n else {\n var disEle = this.element.querySelector('.' + CLS_HSCROLLNAV + '.' + CLS_DISABLE);\n if (disEle) {\n disEle.classList.remove(CLS_DISABLE);\n disEle.setAttribute('aria-disabled', 'false');\n disEle.setAttribute('tabindex', '0');\n }\n }\n };\n /**\n * Gets called when the model property changes.The data that describes the old and new values of property that changed.\n * @param {HScrollModel} newProp\n * @param {HScrollModel} oldProp\n * @returns void\n * @private\n */\n HScroll.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'scrollStep':\n break;\n case 'enableRtl':\n newProp.enableRtl ? this.element.classList.add(CLS_RTL) : this.element.classList.remove(CLS_RTL);\n break;\n }\n }\n };\n __decorate([\n Property(40)\n ], HScroll.prototype, \"scrollStep\", void 0);\n HScroll = __decorate([\n NotifyPropertyChanges\n ], HScroll);\n return HScroll;\n}(Component));\nexport { HScroll };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, EventHandler, Property, Event } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, isVisible, closest, attributes, detach, classList, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { createElement as buildTag, selectAll, setStyleAttribute as setStyle } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, getUniqueID, formatUnit, Collection, compile as templateCompiler } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, ChildProperty, Browser } from '@syncfusion/ej2-base';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { calculatePosition } from '@syncfusion/ej2-popups';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { HScroll } from '../common/h-scroll';\nvar CLS_ITEMS = 'e-toolbar-items';\nvar CLS_ITEM = 'e-toolbar-item';\nvar CLS_RTL = 'e-rtl';\nvar CLS_SEPARATOR = 'e-separator';\nvar CLS_POPUPICON = 'e-popup-up-icon';\nvar CLS_POPUPDOWN = 'e-popup-down-icon';\nvar CLS_TEMPLATE = 'e-template';\nvar CLS_DISABLE = 'e-overlay';\nvar CLS_POPUPTEXT = 'e-toolbar-text';\nvar CLS_TBARTEXT = 'e-popup-text';\nvar CLS_TBAROVERFLOW = 'e-overflow-show';\nvar CLS_POPOVERFLOW = 'e-overflow-hide';\nvar CLS_TBARBTN = 'e-tbar-btn';\nvar CLS_TBARNAV = 'e-hor-nav';\nvar CLS_TBARSCRLNAV = 'e-scroll-nav';\nvar CLS_TBARRIGHT = 'e-toolbar-right';\nvar CLS_TBARLEFT = 'e-toolbar-left';\nvar CLS_TBARCENTER = 'e-toolbar-center';\nvar CLS_TBARPOS = 'e-tbar-pos';\nvar CLS_TBARSCROLL = 'e-hscroll-content';\nvar CLS_POPUPNAV = 'e-hor-nav';\nvar CLS_POPUPCLASS = 'e-toolbar-pop';\nvar CLS_POPUP = 'e-toolbar-popup';\nvar CLS_TBARBTNTEXT = 'e-tbar-btn-text';\nvar CLS_TBARNAVACT = 'e-nav-active';\nvar CLS_TBARIGNORE = 'e-ignore';\nvar CLS_POPPRI = 'e-popup-alone';\nvar CLS_HIDDEN = 'e-hidden';\nvar CLS_MULTIROW = 'e-toolbar-multirow';\nvar CLS_MULTIROW_SEPARATOR = 'e-multirow-separator';\nvar CLS_EXTENDABLE_ITEM = 'e-extended-item';\nvar CLS_EXTENDABLE_SEPARATOR = 'e-extended-separator';\nvar CLS_EXTEANDABLE_TOOLBAR = 'e-extended-toolbar';\nvar CLS_EXTENDABLECLASS = 'e-toolbar-extended';\nvar CLS_EXTENDPOPUP = 'e-expended-nav';\n/**\n * An item object that is used to configure Toolbar commands.\n */\nvar Item = /** @class */ (function (_super) {\n __extends(Item, _super);\n function Item() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Item.prototype, \"id\", void 0);\n __decorate([\n Property('')\n ], Item.prototype, \"text\", void 0);\n __decorate([\n Property('auto')\n ], Item.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], Item.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], Item.prototype, \"showAlwaysInPopup\", void 0);\n __decorate([\n Property('')\n ], Item.prototype, \"prefixIcon\", void 0);\n __decorate([\n Property('')\n ], Item.prototype, \"suffixIcon\", void 0);\n __decorate([\n Property('None')\n ], Item.prototype, \"overflow\", void 0);\n __decorate([\n Property('')\n ], Item.prototype, \"template\", void 0);\n __decorate([\n Property('Button')\n ], Item.prototype, \"type\", void 0);\n __decorate([\n Property('Both')\n ], Item.prototype, \"showTextOn\", void 0);\n __decorate([\n Property(null)\n ], Item.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property('')\n ], Item.prototype, \"tooltipText\", void 0);\n __decorate([\n Property('Left')\n ], Item.prototype, \"align\", void 0);\n return Item;\n}(ChildProperty));\nexport { Item };\n/**\n * The Toolbar control contains a group of commands that are aligned horizontally.\n * ```html\n *
\n * \n * ```\n */\nvar Toolbar = /** @class */ (function (_super) {\n __extends(Toolbar, _super);\n /**\n * Initializes a new instance of the Toolbar class.\n * @param options - Specifies Toolbar model properties as options.\n * @param element - Specifies the element that is rendered as a Toolbar.\n */\n function Toolbar(options, element) {\n var _this = _super.call(this, options, element) || this;\n /**\n * Contains the keyboard configuration of the Toolbar.\n */\n _this.keyConfigs = {\n moveLeft: 'leftarrow',\n moveRight: 'rightarrow',\n moveUp: 'uparrow',\n moveDown: 'downarrow',\n popupOpen: 'enter',\n popupClose: 'escape',\n tab: 'tab',\n home: 'home',\n end: 'end',\n };\n return _this;\n }\n /**\n * Removes the control from the DOM and also removes all its related events.\n * @returns void.\n */\n Toolbar.prototype.destroy = function () {\n var _this = this;\n var ele = this.element;\n _super.prototype.destroy.call(this);\n this.unwireEvents();\n while (ele.firstChild) {\n ele.removeChild(ele.firstChild);\n }\n if (this.trgtEle) {\n ele.appendChild(this.ctrlTem);\n }\n this.clearProperty();\n this.popObj = null;\n this.tbarAlign = null;\n this.remove(this.element, 'e-toolpop');\n ele.removeAttribute('style');\n ['aria-disabled', 'aria-orientation', 'aria-haspopup', 'role'].forEach(function (attrb) {\n _this.element.removeAttribute(attrb);\n });\n };\n /**\n * Initialize the event handler\n * @private\n */\n Toolbar.prototype.preRender = function () {\n var eventArgs = { enableCollision: true };\n this.trigger('beforeCreate', eventArgs);\n this.enableCollision = eventArgs.enableCollision;\n this.scrollModule = null;\n this.popObj = null;\n this.tbarItemsCol = this.items;\n this.popupPriCount = 0;\n if (this.enableRtl) {\n this.add(this.element, CLS_RTL);\n }\n };\n Toolbar.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'click', this.clickHandler, this);\n window.addEventListener('resize', this.resize.bind(this));\n this.keyModule = new KeyboardEvents(this.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs\n });\n EventHandler.add(this.element, 'keydown', this.docKeyDown, this);\n this.element.setAttribute('tabIndex', '0');\n };\n Toolbar.prototype.docKeyDown = function (e) {\n if (e.target.tagName === 'INPUT') {\n return;\n }\n var popCheck = !isNOU(this.popObj) && isVisible(this.popObj.element) && this.overflowMode !== 'Extended';\n if (e.keyCode === 9 && e.target.classList.contains('e-hor-nav') === true && popCheck) {\n this.popObj.hide({ name: 'FadeOut', duration: 100 });\n }\n var keyCheck = (e.keyCode === 40 || e.keyCode === 38 || e.keyCode === 35 || e.keyCode === 36);\n if (keyCheck) {\n e.preventDefault();\n }\n };\n Toolbar.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, 'click', this.clickHandler);\n this.destroyHScroll();\n this.keyModule.destroy();\n EventHandler.remove(document, 'scroll', this.docEvent);\n EventHandler.remove(this.element, 'keydown', this.docKeyDown);\n EventHandler.remove(document, 'click', this.docEvent);\n };\n Toolbar.prototype.clearProperty = function () {\n this.tbarEle = [];\n this.tbarAlgEle = { lefts: [], centers: [], rights: [] };\n };\n Toolbar.prototype.docEvent = function (e) {\n var popEle = closest(e.target, '.e-popup');\n if (this.popObj && isVisible(this.popObj.element) && !popEle && this.overflowMode === 'Popup') {\n this.popObj.hide({ name: 'FadeOut', duration: 100 });\n }\n };\n Toolbar.prototype.destroyHScroll = function () {\n if (this.scrollModule) {\n if (this.tbarAlign) {\n this.add(this.scrollModule.element, CLS_TBARPOS);\n }\n this.scrollModule.destroy();\n this.scrollModule = null;\n }\n };\n Toolbar.prototype.destroyItems = function () {\n [].slice.call(this.element.querySelectorAll('.' + CLS_ITEM)).forEach(function (el) {\n detach(el);\n });\n var tbarItems = this.element.querySelector('.' + CLS_ITEMS);\n if (this.tbarAlign) {\n [].slice.call(tbarItems.children).forEach(function (el) {\n detach(el);\n });\n this.tbarAlign = false;\n this.remove(tbarItems, CLS_TBARPOS);\n }\n this.clearProperty();\n };\n Toolbar.prototype.destroyMode = function () {\n if (this.scrollModule) {\n this.remove(this.scrollModule.element, CLS_RTL);\n this.destroyHScroll();\n }\n if (this.popObj) {\n this.popupRefresh(this.popObj.element, true);\n }\n };\n Toolbar.prototype.add = function (ele, val) {\n ele.classList.add(val);\n };\n Toolbar.prototype.remove = function (ele, val) {\n ele.classList.remove(val);\n };\n Toolbar.prototype.elementFocus = function (ele) {\n var fChild = ele.firstElementChild;\n if (fChild) {\n fChild.focus();\n this.activeEleSwitch(ele);\n }\n else {\n ele.focus();\n }\n };\n Toolbar.prototype.clstElement = function (tbrNavChk, trgt) {\n var clst;\n if (tbrNavChk && this.popObj && isVisible(this.popObj.element)) {\n clst = this.popObj.element.querySelector('.' + CLS_ITEM);\n }\n else if (this.element === trgt || tbrNavChk) {\n clst = this.element.querySelector('.' + CLS_ITEM + ':not(.' + CLS_DISABLE + ' ):not(.' + CLS_SEPARATOR + ' )');\n }\n else {\n clst = closest(trgt, '.' + CLS_ITEM);\n }\n return clst;\n };\n Toolbar.prototype.keyHandling = function (clst, e, trgt, navChk, scrollChk) {\n var popObj = this.popObj;\n var rootEle = this.element;\n var popAnimate = { name: 'FadeOut', duration: 100 };\n switch (e.action) {\n case 'moveRight':\n if (rootEle === trgt) {\n this.elementFocus(clst);\n }\n else if (!navChk) {\n this.eleFocus(clst, 'next');\n }\n break;\n case 'moveLeft':\n if (!navChk) {\n this.eleFocus(clst, 'previous');\n }\n break;\n case 'home':\n case 'end':\n var ele = void 0;\n var nodes = void 0;\n if (clst) {\n var popupCheck = closest(clst, '.e-popup');\n if (popupCheck) {\n if (isVisible(this.popObj.element)) {\n nodes = popupCheck.children;\n if (e.action === 'home') {\n ele = nodes[0];\n }\n else {\n ele = nodes[nodes.length - 1];\n }\n }\n }\n else {\n nodes = this.element.querySelectorAll('.' + CLS_ITEMS + ' .' + CLS_ITEM);\n if (e.action === 'home') {\n ele = nodes[0];\n }\n else {\n ele = nodes[nodes.length - 1];\n }\n }\n if (ele) {\n this.elementFocus(ele);\n }\n }\n break;\n case 'moveUp':\n case 'moveDown':\n var value = e.action === 'moveUp' ? 'previous' : 'next';\n if (popObj && closest(trgt, '.e-popup')) {\n var popEle = popObj.element;\n var popFrstEle = popEle.firstElementChild;\n if ((value === 'previous' && popFrstEle === clst) || (value === 'next' && popEle.lastElementChild === clst)) {\n return;\n }\n else {\n this.eleFocus(clst, value);\n }\n }\n else if (e.action === 'moveDown' && popObj && isVisible(popObj.element)) {\n this.elementFocus(clst);\n }\n break;\n case 'tab':\n if (!scrollChk && !navChk) {\n var ele_1 = clst.firstElementChild;\n if (rootEle === trgt) {\n if (this.activeEle) {\n this.activeEle.focus();\n }\n else {\n this.activeEleRemove(ele_1);\n ele_1.focus();\n }\n this.element.removeAttribute('tabindex');\n }\n }\n break;\n case 'popupClose':\n if (popObj && this.overflowMode !== 'Extended') {\n popObj.hide(popAnimate);\n }\n break;\n case 'popupOpen':\n if (!navChk) {\n return;\n }\n if (popObj && !isVisible(popObj.element)) {\n popObj.element.style.top = rootEle.offsetHeight + 'px';\n popObj.show({ name: 'FadeIn', duration: 100 });\n }\n else {\n popObj.hide(popAnimate);\n }\n break;\n }\n };\n Toolbar.prototype.keyActionHandler = function (e) {\n var trgt = e.target;\n if (trgt.tagName === 'INPUT' || trgt.tagName === 'TEXTAREA' || this.element.classList.contains(CLS_DISABLE)) {\n return;\n }\n e.preventDefault();\n var clst;\n var tbrNavChk = trgt.classList.contains(CLS_TBARNAV);\n var tbarScrollChk = trgt.classList.contains(CLS_TBARSCRLNAV);\n clst = this.clstElement(tbrNavChk, trgt);\n if (clst || tbarScrollChk) {\n this.keyHandling(clst, e, trgt, tbrNavChk, tbarScrollChk);\n }\n };\n /**\n * Specifies the value to disable/enable the Toolbar component.\n * When set to `true`, the component will be disabled.\n * @param {boolean} value - Based on this Boolean value, Toolbar will be enabled (false) or disabled (true).\n * @returns void.\n */\n Toolbar.prototype.disable = function (value) {\n var rootEle = this.element;\n value ? rootEle.classList.add(CLS_DISABLE) : rootEle.classList.remove(CLS_DISABLE);\n rootEle.setAttribute('tabindex', !value ? '0' : '-1');\n if (this.activeEle) {\n this.activeEle.setAttribute('tabindex', !value ? '0' : '-1');\n }\n if (this.scrollModule) {\n this.scrollModule.disable(value);\n }\n if (this.popObj) {\n if (isVisible(this.popObj.element) && this.overflowMode !== 'Extended') {\n this.popObj.hide();\n }\n rootEle.querySelector('#' + rootEle.id + '_nav').setAttribute('tabindex', !value ? '0' : '-1');\n }\n };\n Toolbar.prototype.eleFocus = function (closest, pos) {\n var sib = Object(closest)[pos + 'ElementSibling'];\n var contains = function (el) {\n return el.classList.contains(CLS_SEPARATOR) || el.classList.contains(CLS_DISABLE);\n };\n if (sib) {\n var skipEle = contains(sib);\n if (skipEle) {\n if (Object(sib)[pos + 'ElementSibling']) {\n sib = Object(sib)[pos + 'ElementSibling'];\n skipEle = contains(sib);\n if (skipEle) {\n this.eleFocus(sib, pos);\n return;\n }\n }\n else {\n return;\n }\n }\n this.elementFocus(sib);\n }\n else if (this.tbarAlign) {\n var elem = Object(closest.parentElement)[pos + 'ElementSibling'];\n if (!isNOU(elem) && elem.children.length === 0) {\n elem = Object(elem)[pos + 'ElementSibling'];\n }\n if (!isNOU(elem) && elem.children.length > 0) {\n if (pos === 'next') {\n var el = elem.querySelector('.' + CLS_ITEM);\n if (contains(el)) {\n this.eleFocus(el, pos);\n }\n else {\n el.firstElementChild.focus();\n this.activeEleSwitch(el);\n }\n }\n else {\n var el = elem.lastElementChild;\n if (contains(el)) {\n this.eleFocus(el, pos);\n }\n else {\n this.elementFocus(el);\n }\n }\n }\n }\n };\n Toolbar.prototype.clickHandler = function (e) {\n var trgt = e.target;\n var clsList = trgt.classList;\n var ele = this.element;\n var isPopupElement = !isNOU(closest(trgt, '.' + CLS_POPUPCLASS));\n var popupNav = closest(trgt, ('.' + CLS_TBARNAV));\n if (!popupNav) {\n popupNav = trgt;\n }\n if (!ele.children[0].classList.contains('e-hscroll') && (clsList.contains(CLS_TBARNAV))) {\n clsList = trgt.querySelector('.e-icons').classList;\n }\n if (clsList.contains(CLS_POPUPICON) || clsList.contains(CLS_POPUPDOWN)) {\n this.popupClickHandler(ele, popupNav, CLS_RTL);\n }\n var itemObj;\n var clst = closest(e.target, '.' + CLS_ITEM);\n if ((isNOU(clst) || clst.classList.contains(CLS_DISABLE)) && !popupNav.classList.contains(CLS_TBARNAV)) {\n return;\n }\n if (clst) {\n itemObj = this.items[this.tbarEle.indexOf(clst)];\n }\n var eventArgs = { originalEvent: e, item: itemObj };\n this.trigger('clicked', eventArgs);\n if (isPopupElement && !eventArgs.cancel && this.overflowMode === 'Popup') {\n this.popObj.hide({ name: 'FadeOut', duration: 100 });\n }\n };\n ;\n Toolbar.prototype.popupClickHandler = function (ele, popupNav, CLS_RTL) {\n var popObj = this.popObj;\n if (isVisible(popObj.element)) {\n popupNav.classList.remove(CLS_TBARNAVACT);\n popObj.hide({ name: 'FadeOut', duration: 100 });\n }\n else {\n if (ele.classList.contains(CLS_RTL)) {\n popObj.enableRtl = true;\n popObj.position = { X: 'left', Y: 'top' };\n }\n if (popObj.offsetX === 0 && !ele.classList.contains(CLS_RTL)) {\n popObj.enableRtl = false;\n popObj.position = { X: 'right', Y: 'top' };\n }\n popObj.dataBind();\n popObj.refreshPosition();\n popObj.element.style.top = this.element.offsetHeight + 'px';\n if (this.overflowMode === 'Extended') {\n popObj.element.style.minHeight = '0px';\n }\n popupNav.classList.add(CLS_TBARNAVACT);\n popObj.show({ name: 'FadeIn', duration: 100 });\n }\n };\n /**\n * To Initialize the control rendering\n * @private\n */\n Toolbar.prototype.render = function () {\n this.initialize();\n this.renderControl();\n this.separator();\n this.wireEvents();\n };\n Toolbar.prototype.initialize = function () {\n var width = formatUnit(this.width);\n var height = formatUnit(this.height);\n if (Browser.info.name !== 'msie' || this.height !== 'auto' || this.overflowMode === 'MultiRow') {\n setStyle(this.element, { 'height': height });\n }\n setStyle(this.element, { 'width': width });\n var ariaAttr = {\n 'role': 'toolbar', 'aria-disabled': 'false', 'aria-haspopup': 'false', 'aria-orientation': 'horizontal',\n };\n attributes(this.element, ariaAttr);\n };\n Toolbar.prototype.renderControl = function () {\n this.trgtEle = (this.element.children.length > 0) ? this.element.querySelector('div') : null;\n this.tbarAlgEle = { lefts: [], centers: [], rights: [] };\n this.renderItems();\n this.renderOverflowMode();\n if (this.tbarAlign) {\n this.itemPositioning();\n }\n if (this.popObj && this.popObj.element.childElementCount > 1 && this.checkPopupRefresh(this.element, this.popObj.element)) {\n this.popupRefresh(this.popObj.element, false);\n }\n };\n Toolbar.prototype.initHScroll = function (element, innerItems) {\n if (!this.scrollModule && this.checkOverflow(element, innerItems[0])) {\n if (this.tbarAlign) {\n this.element.querySelector('.' + CLS_ITEMS + ' .' + CLS_TBARCENTER).removeAttribute('style');\n }\n this.scrollModule = new HScroll({ scrollStep: 50, enableRtl: this.enableRtl }, innerItems[0]);\n this.remove(this.scrollModule.element, CLS_TBARPOS);\n setStyle(this.element, { overflow: 'hidden' });\n }\n };\n Toolbar.prototype.itemWidthCal = function (items) {\n var width = 0;\n var style;\n [].slice.call(selectAll('.' + CLS_ITEM, items)).forEach(function (el) {\n if (isVisible(el)) {\n style = window.getComputedStyle(el);\n width += (el.offsetWidth + parseFloat(style.marginRight) + parseFloat(style.marginLeft));\n }\n });\n return width;\n };\n Toolbar.prototype.checkOverflow = function (element, innerItem) {\n if (isNOU(element) || isNOU(innerItem) || !isVisible(element)) {\n return false;\n }\n var eleWidth = element.offsetWidth;\n var itemWidth = innerItem.offsetWidth;\n if (this.tbarAlign || this.scrollModule || (eleWidth === itemWidth)) {\n itemWidth = this.itemWidthCal(this.scrollModule ? innerItem.querySelector('.e-hscroll-content') : innerItem);\n }\n var popNav = element.querySelector('.' + CLS_TBARNAV);\n var scrollNav = element.querySelector('.' + CLS_TBARSCRLNAV);\n if (itemWidth > eleWidth - (popNav ? popNav.offsetWidth : (scrollNav ? scrollNav.offsetWidth * 2 : 0))) {\n return true;\n }\n else {\n return false;\n }\n };\n /** @hidden */\n Toolbar.prototype.refreshOverflow = function () {\n this.resize();\n };\n Toolbar.prototype.renderOverflowMode = function () {\n var ele = this.element;\n var innerItems = ele.querySelector('.' + CLS_ITEMS);\n var priorityCheck = this.popupPriCount > 0;\n if (ele && ele.children.length > 0) {\n this.offsetWid = ele.offsetWidth;\n this.remove(this.element, 'e-toolpop');\n if (Browser.info.name === 'msie' && this.height === 'auto') {\n ele.style.height = '';\n }\n switch (this.overflowMode) {\n case 'Scrollable':\n this.destroyHScroll();\n this.initHScroll(ele, ele.getElementsByClassName(CLS_ITEMS));\n break;\n case 'Popup':\n this.add(this.element, 'e-toolpop');\n if (this.tbarAlign) {\n this.removePositioning();\n }\n if (this.checkOverflow(ele, innerItems) || priorityCheck) {\n this.createPopupEle(ele, [].slice.call(selectAll('.' + CLS_ITEMS + ' .' + CLS_ITEM, ele)));\n this.element.querySelector('.' + CLS_TBARNAV).setAttribute('tabIndex', '0');\n }\n if (this.tbarAlign) {\n this.add(innerItems, CLS_TBARPOS);\n this.itemPositioning();\n }\n break;\n case 'MultiRow':\n this.add(innerItems, CLS_MULTIROW);\n if (ele.style.overflow === 'hidden') {\n ele.style.overflow = '';\n }\n if (Browser.info.name === 'msie' || ele.style.height !== 'auto') {\n ele.style.height = 'auto';\n }\n break;\n case 'Extended':\n this.add(this.element, CLS_EXTEANDABLE_TOOLBAR);\n if (this.checkOverflow(ele, innerItems) || priorityCheck) {\n this.createPopupEle(ele, [].slice.call(selectAll('.' + CLS_ITEMS + ' .' + CLS_ITEM, ele)));\n this.element.querySelector('.' + CLS_TBARNAV).setAttribute('tabIndex', '0');\n }\n }\n }\n };\n Toolbar.prototype.separator = function () {\n var element = this.element;\n var eleItem = [].slice.call(element.querySelectorAll('.' + CLS_SEPARATOR));\n var eleInlineItem;\n var multiVar = element.querySelector('.' + CLS_MULTIROW_SEPARATOR);\n var extendVar = element.querySelector('.' + CLS_EXTENDABLE_SEPARATOR);\n eleInlineItem = this.overflowMode === 'MultiRow' ? multiVar : extendVar;\n if (eleInlineItem !== null) {\n if (this.overflowMode === 'MultiRow') {\n eleInlineItem.classList.remove(CLS_MULTIROW_SEPARATOR);\n }\n else if (this.overflowMode === 'Extended') {\n eleInlineItem.classList.remove(CLS_EXTENDABLE_SEPARATOR);\n }\n }\n for (var i = 0; i <= eleItem.length - 1; i++) {\n if (eleItem[i].offsetLeft < 30 && eleItem[i].offsetLeft !== 0) {\n if (this.overflowMode === 'MultiRow') {\n eleItem[i].classList.add(CLS_MULTIROW_SEPARATOR);\n }\n else if (this.overflowMode === 'Extended') {\n eleItem[i].classList.add(CLS_EXTENDABLE_SEPARATOR);\n }\n }\n }\n };\n Toolbar.prototype.createPopupEle = function (ele, innerEle) {\n var innerNav = ele.querySelector('.' + CLS_TBARNAV);\n if (!innerNav) {\n this.createPopupIcon(ele);\n }\n innerNav = ele.querySelector('.' + CLS_TBARNAV);\n var eleWidth = (ele.offsetWidth - (innerNav.offsetWidth));\n this.element.classList.remove('e-rtl');\n setStyle(this.element, { direction: 'initial' });\n this.checkPriority(ele, innerEle, eleWidth, true);\n if (this.enableRtl) {\n this.element.classList.add('e-rtl');\n }\n this.element.style.removeProperty('direction');\n this.createPopup();\n };\n Toolbar.prototype.pushingPoppedEle = function (tbarObj, popupPri, ele, eleHeight, sepHeight) {\n var element = tbarObj.element;\n var nodes = selectAll('.' + CLS_TBAROVERFLOW, ele);\n var nodeIndex = 0;\n var poppedEle = [].slice.call(selectAll('.' + CLS_POPUP, element.querySelector('.' + CLS_ITEMS)));\n var nodePri = 0;\n poppedEle.forEach(function (el, index) {\n nodes = selectAll('.' + CLS_TBAROVERFLOW, ele);\n if (el.classList.contains(CLS_TBAROVERFLOW) && nodes.length > 0) {\n if (tbarObj.tbResize && nodes.length > index) {\n ele.insertBefore(el, nodes[index]);\n ++nodePri;\n }\n else {\n ele.insertBefore(el, ele.children[nodes.length]);\n ++nodePri;\n }\n }\n else if (el.classList.contains(CLS_TBAROVERFLOW)) {\n ele.insertBefore(el, ele.firstChild);\n ++nodePri;\n }\n else if (tbarObj.tbResize && el.classList.contains(CLS_POPOVERFLOW) && ele.children.length > 0 && nodes.length === 0) {\n ele.insertBefore(el, ele.firstChild);\n ++nodePri;\n }\n else if (el.classList.contains(CLS_POPOVERFLOW)) {\n popupPri.push(el);\n }\n else if (tbarObj.tbResize) {\n ele.insertBefore(el, ele.childNodes[nodeIndex + nodePri]);\n ++nodeIndex;\n }\n else {\n ele.appendChild(el);\n }\n if (el.classList.contains(CLS_SEPARATOR)) {\n setStyle(el, { display: '', height: sepHeight + 'px' });\n }\n else {\n setStyle(el, { display: '', height: eleHeight + 'px' });\n }\n });\n popupPri.forEach(function (el) {\n ele.appendChild(el);\n });\n var tbarEle = selectAll('.' + CLS_ITEM, element.querySelector('.' + CLS_ITEMS));\n for (var i = tbarEle.length - 1; i >= 0; i--) {\n var tbarElement = tbarEle[i];\n if (tbarElement.classList.contains(CLS_SEPARATOR) && this.overflowMode !== 'Extended') {\n setStyle(tbarElement, { display: 'none' });\n }\n else {\n break;\n }\n }\n };\n Toolbar.prototype.createPopup = function () {\n var element = this.element;\n var eleHeight;\n var eleItem;\n var sepHeight;\n var sepItem;\n if (this.overflowMode === 'Extended') {\n sepItem = element.querySelector('.' + CLS_SEPARATOR + ':not(.' + CLS_POPUP + ' )');\n sepHeight = (element.style.height === 'auto' || element.style.height === '') ? null : sepItem.offsetHeight;\n }\n eleItem = element.querySelector('.' + CLS_ITEM + ':not(.' + CLS_SEPARATOR + ' ):not(.' + CLS_POPUP + ' )');\n eleHeight = (element.style.height === 'auto' || element.style.height === '') ? null : eleItem.offsetHeight;\n var ele;\n var popupPri = [];\n if (element.querySelector('#' + element.id + '_popup.' + CLS_POPUPCLASS)) {\n ele = element.querySelector('#' + element.id + '_popup.' + CLS_POPUPCLASS);\n }\n else {\n var extendEle = buildTag('div', { id: element.id + '_popup', className: CLS_POPUPCLASS + ' ' + CLS_EXTENDABLECLASS });\n var popupEle = buildTag('div', { id: element.id + '_popup', className: CLS_POPUPCLASS });\n ele = this.overflowMode === 'Extended' ? extendEle : popupEle;\n }\n this.pushingPoppedEle(this, popupPri, ele, eleHeight, sepHeight);\n this.popupInit(element, ele);\n };\n Toolbar.prototype.popupInit = function (element, ele) {\n if (!this.popObj) {\n element.appendChild(ele);\n setStyle(this.element, { overflow: '' });\n var popup = new Popup(null, {\n relateTo: this.element,\n offsetY: (element.offsetHeight),\n enableRtl: this.enableRtl,\n open: this.popupOpen.bind(this),\n close: this.popupClose,\n collision: { Y: this.enableCollision ? 'flip' : 'none' },\n position: this.enableRtl ? { X: 'left', Y: 'top' } : { X: 'right', Y: 'top' }\n });\n popup.appendTo(ele);\n EventHandler.add(document, 'scroll', this.docEvent.bind(this));\n EventHandler.add(document, 'click ', this.docEvent.bind(this));\n popup.element.style.maxHeight = popup.element.offsetHeight + 'px';\n popup.hide();\n this.popObj = popup;\n this.element.setAttribute('aria-haspopup', 'true');\n }\n else {\n var popupEle = this.popObj.element;\n setStyle(popupEle, { maxHeight: '', display: 'block' });\n setStyle(popupEle, { maxHeight: popupEle.offsetHeight + 'px', display: '' });\n }\n };\n Toolbar.prototype.popupOpen = function (e) {\n var popObj = this.popObj;\n var popupEle = this.popObj.element;\n var toolEle = this.popObj.element.parentElement;\n var popupNav = toolEle.querySelector('.' + CLS_TBARNAV);\n setStyle(popObj.element, { height: 'auto', maxHeight: '' });\n popObj.element.style.maxHeight = popObj.element.offsetHeight + 'px';\n if (this.overflowMode === 'Extended') {\n popObj.element.style.minHeight = '';\n }\n var popupElePos = popupEle.offsetTop + popupEle.offsetHeight + calculatePosition(toolEle).top;\n var popIcon = popupNav.firstElementChild;\n popupNav.classList.add(CLS_TBARNAVACT);\n classList(popIcon, [CLS_POPUPICON], [CLS_POPUPDOWN]);\n var scrollVal = isNOU(window.scrollY) ? 0 : window.scrollY;\n if (((window.innerHeight + scrollVal) < popupElePos) && (this.element.offsetTop < popupEle.offsetHeight)) {\n var overflowHeight = (popupEle.offsetHeight - ((popupElePos - window.innerHeight - scrollVal) + 5));\n popObj.height = overflowHeight + 'px';\n for (var i = 0; i <= popupEle.childElementCount; i++) {\n var ele = popupEle.children[i];\n if (ele.offsetTop + ele.offsetHeight > overflowHeight) {\n overflowHeight = ele.offsetTop;\n break;\n }\n }\n setStyle(popObj.element, { maxHeight: overflowHeight + 'px' });\n }\n };\n Toolbar.prototype.popupClose = function (e) {\n var element = this.element.parentElement;\n var popupNav = element.querySelector('.' + CLS_TBARNAV);\n var popIcon = popupNav.firstElementChild;\n popupNav.classList.remove(CLS_TBARNAVACT);\n classList(popIcon, [CLS_POPUPDOWN], [CLS_POPUPICON]);\n };\n Toolbar.prototype.checkPriority = function (ele, inEle, eleWidth, pre) {\n var popPriority = this.popupPriCount > 0;\n var len = inEle.length;\n var eleWid = eleWidth;\n var sepCheck = 0;\n var itemCount = 0;\n var itemPopCount = 0;\n var checkClass = function (ele, val) {\n var rVal = false;\n val.forEach(function (cls) {\n if (ele.classList.contains(cls)) {\n rVal = true;\n }\n });\n return rVal;\n };\n for (var i = len - 1; i >= 0; i--) {\n var mrgn = parseFloat((window.getComputedStyle(inEle[i])).marginRight);\n mrgn += parseFloat((window.getComputedStyle(inEle[i])).marginLeft);\n var fstEleCheck = inEle[i] === this.tbarEle[0];\n if (fstEleCheck) {\n this.tbarEleMrgn = mrgn;\n }\n var eleWid_1 = fstEleCheck ? (inEle[i].offsetWidth + mrgn) : inEle[i].offsetWidth;\n if (checkClass(inEle[i], [CLS_POPPRI]) && popPriority) {\n inEle[i].classList.add(CLS_POPUP);\n setStyle(inEle[i], { display: 'none', minWidth: eleWid_1 + 'px' });\n itemPopCount++;\n }\n if ((inEle[i].offsetLeft + inEle[i].offsetWidth + mrgn) > eleWidth) {\n if (inEle[i].classList.contains(CLS_SEPARATOR)) {\n if (this.overflowMode === 'Extended') {\n if (itemCount === itemPopCount) {\n var sepEle = inEle[i];\n if (checkClass(sepEle, [CLS_SEPARATOR, CLS_TBARIGNORE])) {\n inEle[i].classList.add(CLS_POPUP);\n itemPopCount++;\n }\n }\n itemCount++;\n }\n else if (this.overflowMode === 'Popup') {\n if (sepCheck > 0 && itemCount === itemPopCount) {\n var sepEle = inEle[i + itemCount + (sepCheck - 1)];\n if (checkClass(sepEle, [CLS_SEPARATOR, CLS_TBARIGNORE])) {\n setStyle(sepEle, { display: 'none' });\n }\n }\n sepCheck++;\n itemCount = 0;\n itemPopCount = 0;\n }\n }\n else {\n itemCount++;\n }\n if (inEle[i].classList.contains(CLS_TBAROVERFLOW) && pre) {\n eleWidth -= (inEle[i].offsetWidth + (mrgn));\n }\n else if (!checkClass(inEle[i], [CLS_SEPARATOR, CLS_TBARIGNORE])) {\n inEle[i].classList.add(CLS_POPUP);\n setStyle(inEle[i], { display: 'none', minWidth: eleWid_1 + 'px' });\n itemPopCount++;\n }\n else {\n eleWidth -= (inEle[i].offsetWidth + (mrgn));\n }\n }\n }\n if (pre) {\n var popedEle = selectAll('.' + CLS_ITEM + ':not(.' + CLS_POPUP + ')', this.element);\n this.checkPriority(ele, popedEle, eleWid, false);\n }\n };\n Toolbar.prototype.createPopupIcon = function (element) {\n var id = element.id.concat('_nav');\n var className = 'e-' + element.id.concat('_nav ' + CLS_POPUPNAV);\n className = this.overflowMode === 'Extended' ? className + ' ' + CLS_EXTENDPOPUP : className;\n var nav = buildTag('div', { id: id, className: className });\n if (Browser.info.name === 'msie' || Browser.info.name === 'edge') {\n nav.classList.add('e-ie-align');\n }\n var navItem = buildTag('div', { className: CLS_POPUPDOWN + ' e-icons' });\n nav.appendChild(navItem);\n nav.setAttribute('tabindex', '0');\n element.appendChild(nav);\n };\n Toolbar.prototype.tbarPriRef = function (inEle, indx, sepPri, el, des, elWid, wid, ig) {\n var ignoreCount = ig;\n var popEle = this.popObj.element;\n var query = '.' + CLS_ITEM + ':not(.' + CLS_SEPARATOR + '):not(.' + CLS_TBAROVERFLOW + ')';\n var priEleCnt = selectAll('.' + CLS_POPUP + ':not(.' + CLS_TBAROVERFLOW + ')', popEle).length;\n var checkClass = function (ele, val) {\n return ele.classList.contains(val);\n };\n if (selectAll(query, inEle).length === 0) {\n var eleSep = inEle.children[indx - (indx - sepPri) - 1];\n var ignoreCheck = (!isNOU(eleSep) && checkClass(eleSep, CLS_TBARIGNORE));\n if ((!isNOU(eleSep) && checkClass(eleSep, CLS_SEPARATOR) && !isVisible(eleSep)) || ignoreCheck) {\n var sepDisplay = 'none';\n eleSep.style.display = 'inherit';\n var eleSepWidth = eleSep.offsetWidth + (parseFloat(window.getComputedStyle(eleSep).marginRight) * 2);\n var prevSep = eleSep.previousElementSibling;\n if ((elWid + eleSepWidth) < wid || des) {\n inEle.insertBefore(el, inEle.children[(indx + ignoreCount) - (indx - sepPri)]);\n if (!isNOU(prevSep)) {\n prevSep.style.display = '';\n }\n }\n else {\n if (prevSep.classList.contains(CLS_SEPARATOR)) {\n prevSep.style.display = sepDisplay;\n }\n }\n eleSep.style.display = '';\n }\n else {\n inEle.insertBefore(el, inEle.children[(indx + ignoreCount) - (indx - sepPri)]);\n }\n }\n else {\n inEle.insertBefore(el, inEle.children[(indx + ignoreCount) - priEleCnt]);\n }\n };\n Toolbar.prototype.popupRefresh = function (popupEle, destroy) {\n var _this = this;\n var ele = this.element;\n var popNav = ele.querySelector('.' + CLS_TBARNAV);\n var innerEle = ele.querySelector('.' + CLS_ITEMS);\n if (isNOU(popNav)) {\n return;\n }\n innerEle.removeAttribute('style');\n popupEle.style.display = 'block';\n var width = ele.offsetWidth - (popNav.offsetWidth + innerEle.offsetWidth);\n var popupEleWidth = 0;\n [].slice.call(popupEle.children).forEach(function (el) {\n popupEleWidth += _this.popupEleWidth(el);\n setStyle(el, { 'position': '' });\n });\n if ((width + popNav.offsetWidth) > (popupEleWidth) && this.popupPriCount === 0) {\n destroy = true;\n }\n this.popupEleRefresh(width, popupEle, destroy);\n popupEle.style.display = '';\n if (popupEle.children.length === 0 && popNav && this.popObj) {\n detach(popNav);\n popNav = null;\n this.popObj.destroy();\n detach(this.popObj.element);\n this.popObj = null;\n ele.setAttribute('aria-haspopup', 'false');\n ele.classList.remove('e-toolpop');\n }\n };\n Toolbar.prototype.ignoreEleFetch = function (index, innerEle) {\n var ignoreEle = [].slice.call(innerEle.querySelectorAll('.' + CLS_TBARIGNORE));\n var ignoreInx = [];\n var count = 0;\n if (ignoreEle.length > 0) {\n ignoreEle.forEach(function (ele) {\n ignoreInx.push([].slice.call(innerEle.children).indexOf(ele));\n });\n }\n else {\n return 0;\n }\n ignoreInx.forEach(function (val) {\n if (val <= index) {\n count++;\n }\n });\n return count;\n };\n Toolbar.prototype.checkPopupRefresh = function (root, popEle) {\n popEle.style.display = 'block';\n var elWid = this.popupEleWidth(popEle.firstElementChild);\n popEle.firstElementChild.style.removeProperty('Position');\n var tbarWidth = root.offsetWidth - root.querySelector('.' + CLS_TBARNAV).offsetWidth;\n var tbarItemsWid = root.querySelector('.' + CLS_ITEMS).offsetWidth;\n popEle.style.removeProperty('display');\n if (tbarWidth > (elWid + tbarItemsWid)) {\n return true;\n }\n return false;\n };\n Toolbar.prototype.popupEleWidth = function (el) {\n el.style.position = 'absolute';\n var elWidth = el.offsetWidth;\n var btnText = el.querySelector('.' + CLS_TBARBTNTEXT);\n if (el.classList.contains('e-tbtn-align') || el.classList.contains(CLS_TBARTEXT)) {\n var btn = el.children[0];\n if (!isNOU(btnText) && el.classList.contains(CLS_TBARTEXT)) {\n btnText.style.display = 'none';\n }\n else if (!isNOU(btnText) && el.classList.contains(CLS_POPUPTEXT)) {\n btnText.style.display = 'block';\n }\n btn.style.minWidth = '0%';\n elWidth = parseFloat(el.style.minWidth);\n btn.style.minWidth = '';\n if (!isNOU(btnText)) {\n btnText.style.display = '';\n }\n }\n return elWidth;\n };\n Toolbar.prototype.popupEleRefresh = function (width, popupEle, destroy) {\n var popPriority = this.popupPriCount > 0;\n var eleSplice = this.tbarEle;\n var priEleCnt;\n var index;\n var checkOverflow;\n var innerEle = this.element.querySelector('.' + CLS_ITEMS);\n var ignoreCount = 0;\n var _loop_1 = function (el) {\n if (el.classList.contains(CLS_POPPRI) && popPriority && !destroy) {\n return \"continue\";\n }\n var elWidth = this_1.popupEleWidth(el);\n if (el === this_1.tbarEle[0]) {\n elWidth += this_1.tbarEleMrgn;\n }\n el.style.position = '';\n if (elWidth < width || destroy) {\n el.style.minWidth = '';\n if (!el.classList.contains(CLS_POPOVERFLOW)) {\n el.classList.remove(CLS_POPUP);\n }\n index = this_1.tbarEle.indexOf(el);\n if (this_1.tbarAlign) {\n var pos = this_1.items[index].align;\n index = this_1.tbarAlgEle[(pos + 's').toLowerCase()].indexOf(el);\n eleSplice = this_1.tbarAlgEle[(pos + 's').toLowerCase()];\n innerEle = this_1.element.querySelector('.' + CLS_ITEMS + ' .' + 'e-toolbar-' + pos.toLowerCase());\n }\n var sepBeforePri_1 = 0;\n if (this_1.overflowMode !== 'Extended') {\n eleSplice.slice(0, index).forEach(function (el) {\n if (el.classList.contains(CLS_TBAROVERFLOW) || el.classList.contains(CLS_SEPARATOR)) {\n if (el.classList.contains(CLS_SEPARATOR)) {\n el.style.display = '';\n width -= el.offsetWidth;\n }\n sepBeforePri_1++;\n }\n });\n }\n ignoreCount = this_1.ignoreEleFetch(index, innerEle);\n if (el.classList.contains(CLS_TBAROVERFLOW)) {\n this_1.tbarPriRef(innerEle, index, sepBeforePri_1, el, destroy, elWidth, width, ignoreCount);\n width -= el.offsetWidth;\n }\n else if (index === 0) {\n innerEle.insertBefore(el, innerEle.firstChild);\n width -= el.offsetWidth;\n }\n else {\n priEleCnt = selectAll('.' + CLS_TBAROVERFLOW, this_1.popObj.element).length;\n innerEle.insertBefore(el, innerEle.children[(index + ignoreCount) - priEleCnt]);\n width -= el.offsetWidth;\n }\n el.style.height = '';\n }\n else {\n return \"break\";\n }\n };\n var this_1 = this;\n for (var _i = 0, _a = [].slice.call(popupEle.children); _i < _a.length; _i++) {\n var el = _a[_i];\n var state_1 = _loop_1(el);\n if (state_1 === \"break\")\n break;\n }\n checkOverflow = this.checkOverflow(this.element, this.element.getElementsByClassName(CLS_ITEMS)[0]);\n if (checkOverflow && !destroy) {\n this.renderOverflowMode();\n }\n };\n Toolbar.prototype.removePositioning = function () {\n var item = this.element.querySelector('.' + CLS_ITEMS);\n if (isNOU(item) || !item.classList.contains(CLS_TBARPOS)) {\n return;\n }\n this.remove(item, CLS_TBARPOS);\n var innerItem = [].slice.call(item.childNodes);\n innerItem[1].removeAttribute('style');\n innerItem[2].removeAttribute('style');\n };\n Toolbar.prototype.refreshPositioning = function () {\n var item = this.element.querySelector('.' + CLS_ITEMS);\n this.add(item, CLS_TBARPOS);\n this.itemPositioning();\n };\n Toolbar.prototype.itemPositioning = function () {\n var item = this.element.querySelector('.' + CLS_ITEMS);\n if (isNOU(item) || !item.classList.contains(CLS_TBARPOS)) {\n return;\n }\n var popupNav = this.element.querySelector('.' + CLS_TBARNAV);\n var innerItem;\n if (this.scrollModule) {\n innerItem = [].slice.call(item.querySelector('.' + CLS_TBARSCROLL).children);\n }\n else {\n innerItem = [].slice.call(item.childNodes);\n }\n var margin = innerItem[0].offsetWidth + innerItem[2].offsetWidth;\n var tbarWid = this.element.offsetWidth;\n if (popupNav) {\n tbarWid -= popupNav.offsetWidth;\n var popWid = popupNav.offsetWidth + 'px';\n innerItem[2].removeAttribute('style');\n this.enableRtl ? innerItem[2].style.left = popWid : innerItem[2].style.right = popWid;\n }\n if (tbarWid <= margin) {\n return;\n }\n var value = (((tbarWid - margin)) - innerItem[1].offsetWidth) / 2;\n innerItem[1].removeAttribute('style');\n var mrgn = (innerItem[0].offsetWidth + value) + 'px';\n this.enableRtl ? innerItem[1].style.marginRight = mrgn : innerItem[1].style.marginLeft = mrgn;\n };\n Toolbar.prototype.tbarItemAlign = function (item, itemEle, pos) {\n var _this = this;\n if (item.showAlwaysInPopup && item.overflow !== 'Show') {\n return;\n }\n var alignDiv = [];\n alignDiv.push(buildTag('div', { className: CLS_TBARLEFT }));\n alignDiv.push(buildTag('div', { className: CLS_TBARCENTER }));\n alignDiv.push(buildTag('div', { className: CLS_TBARRIGHT }));\n if (pos === 0 && item.align !== 'Left') {\n alignDiv.forEach(function (ele) {\n itemEle.appendChild(ele);\n });\n this.tbarAlign = true;\n this.add(itemEle, CLS_TBARPOS);\n }\n else if (item.align !== 'Left') {\n var alignEle = itemEle.childNodes;\n var leftAlign_1 = alignDiv[0];\n [].slice.call(alignEle).forEach(function (el) {\n _this.tbarAlgEle.lefts.push(el);\n leftAlign_1.appendChild(el);\n });\n itemEle.appendChild(leftAlign_1);\n itemEle.appendChild(alignDiv[1]);\n itemEle.appendChild(alignDiv[2]);\n this.tbarAlign = true;\n this.add(itemEle, CLS_TBARPOS);\n }\n };\n Toolbar.prototype.ctrlTemplate = function () {\n var _this = this;\n this.ctrlTem = this.trgtEle.cloneNode(true);\n this.add(this.trgtEle, CLS_ITEMS);\n this.tbarEle = [];\n var innerEle = [].slice.call(this.trgtEle.children);\n innerEle.forEach(function (ele) {\n if (ele.tagName === 'DIV') {\n _this.tbarEle.push(ele);\n ele.setAttribute('aria-disabled', 'false');\n _this.add(ele, CLS_ITEM);\n }\n });\n };\n Toolbar.prototype.renderItems = function () {\n var ele = this.element;\n var itemEleDom;\n var innerItem;\n var innerPos;\n var items = this.items;\n if (ele && ele.children.length > 0) {\n itemEleDom = ele.querySelector('.' + CLS_ITEMS);\n }\n if (this.trgtEle != null) {\n this.ctrlTemplate();\n }\n else if (ele && items.length > 0) {\n if (!itemEleDom) {\n itemEleDom = buildTag('div', { className: CLS_ITEMS });\n }\n for (var i = 0; i < items.length; i++) {\n innerItem = this.renderSubComponent(items[i]);\n if (this.tbarEle.indexOf(innerItem) === -1) {\n this.tbarEle.push(innerItem);\n }\n if (!this.tbarAlign) {\n this.tbarItemAlign(items[i], itemEleDom, i);\n }\n innerPos = itemEleDom.querySelector('.e-toolbar-' + items[i].align.toLowerCase());\n if (innerPos) {\n if (!(items[i].showAlwaysInPopup && items[i].overflow !== 'Show')) {\n this.tbarAlgEle[(items[i].align + 's').toLowerCase()].push(innerItem);\n }\n innerPos.appendChild(innerItem);\n }\n else {\n itemEleDom.appendChild(innerItem);\n }\n }\n ele.appendChild(itemEleDom);\n }\n };\n Toolbar.prototype.setAttr = function (attr, element) {\n var key = Object.keys(attr);\n var keyVal;\n for (var i = 0; i < key.length; i++) {\n keyVal = key[i];\n keyVal === 'class' ? this.add(element, attr[keyVal]) : element.setAttribute(keyVal, attr[keyVal]);\n }\n };\n /**\n * Enables or disables the specified Toolbar item.\n * @param {HTMLElement|NodeList} items - DOM element or an array of items to be enabled or disabled.\n * @param {boolean} isEnable - Boolean value that determines whether the command should be enabled or disabled.\n * By default, `isEnable` is set to true.\n * @returns void.\n */\n Toolbar.prototype.enableItems = function (items, isEnable) {\n var elements = items;\n var len = elements.length;\n if (isNOU(isEnable)) {\n isEnable = true;\n }\n var enable = function (isEnable, ele) {\n if (isEnable) {\n ele.classList.remove(CLS_DISABLE);\n ele.setAttribute('aria-disabled', 'false');\n }\n else {\n ele.classList.add(CLS_DISABLE);\n ele.setAttribute('aria-disabled', 'true');\n }\n };\n if (len && len > 1) {\n for (var _i = 0, _a = [].slice.call(elements); _i < _a.length; _i++) {\n var ele = _a[_i];\n enable(isEnable, ele);\n }\n isEnable ? removeClass(elements, CLS_DISABLE) : addClass(elements, CLS_DISABLE);\n }\n else {\n var ele = void 0;\n ele = (len && len === 1) ? elements[0] : items;\n enable(isEnable, ele);\n }\n };\n /**\n * Adds new items to the Toolbar that accepts an array as Toolbar items.\n * @param {ItemsModel[]} items - DOM element or an array of items to be added to the Toolbar.\n * @param {number} index - Number value that determines where the command is to be added. By default, index is 0.\n * @returns void.\n */\n Toolbar.prototype.addItems = function (items, index) {\n var innerItems;\n var itemsDiv = this.element.querySelector('.' + CLS_ITEMS);\n var innerEle;\n var itemAgn = 'Left';\n if (isNOU(index)) {\n index = 0;\n }\n items.forEach(function (e) {\n if (!isNOU(e.align) && e.align !== 'Left' && itemAgn === 'Left') {\n itemAgn = e.align;\n }\n });\n for (var _i = 0, items_1 = items; _i < items_1.length; _i++) {\n var item = items_1[_i];\n if (isNOU(item.type)) {\n item.type = 'Button';\n }\n innerItems = selectAll('.' + CLS_ITEM, this.element);\n item.align = itemAgn;\n innerEle = this.renderSubComponent(item);\n if (this.tbarEle.length >= index && innerItems.length >= 0) {\n this.destroyMode();\n var algIndex = item.align[0] === 'L' ? 0 : item.align[0] === 'C' ? 1 : 2;\n var ele = void 0;\n if (!this.tbarAlign && itemAgn !== 'Left') {\n this.tbarItemAlign(item, itemsDiv, 1);\n this.tbarAlign = true;\n ele = closest(innerItems[0], '.' + CLS_ITEMS).children[algIndex];\n ele.appendChild(innerEle);\n this.tbarAlgEle[(item.align + 's').toLowerCase()].push(innerEle);\n this.refreshPositioning();\n }\n else if (this.tbarAlign) {\n ele = closest(innerItems[0], '.' + CLS_ITEMS).children[algIndex];\n ele.insertBefore(innerEle, ele.children[index]);\n this.tbarAlgEle[(item.align + 's').toLowerCase()].splice(index, 0, innerEle);\n this.refreshPositioning();\n }\n else if (innerItems.length === 0) {\n innerItems = selectAll('.' + CLS_ITEMS, this.element);\n innerItems[0].appendChild(innerEle);\n }\n else {\n innerItems[0].parentNode.insertBefore(innerEle, innerItems[index]);\n }\n this.items.splice(index, 0, item);\n this.tbarEle.splice(index, 0, innerEle);\n index++;\n this.offsetWid = itemsDiv.offsetWidth;\n }\n }\n itemsDiv.style.width = '';\n this.renderOverflowMode();\n };\n /**\n * Removes the items from the Toolbar. Acceptable arguments are index of item/HTMLElement/node list.\n * @param {number|HTMLElement|NodeList|HTMLElement[]} args\n * Index or DOM element or an Array of item which is to be removed from the Toolbar.\n * @returns void.\n */\n Toolbar.prototype.removeItems = function (args) {\n var elements = args;\n var index;\n var innerItems = [].slice.call(selectAll('.' + CLS_ITEM, this.element));\n if (typeof (elements) === 'number') {\n index = parseInt(args.toString(), 10);\n this.removeItemByIndex(index, innerItems);\n }\n else {\n if (elements && elements.length > 1) {\n for (var _i = 0, _a = [].slice.call(elements); _i < _a.length; _i++) {\n var ele = _a[_i];\n index = this.tbarEle.indexOf(ele);\n this.removeItemByIndex(index, innerItems);\n innerItems = selectAll('.' + CLS_ITEM, this.element);\n }\n }\n else {\n var ele = (elements && elements.length && elements.length === 1) ? elements[0] : args;\n index = innerItems.indexOf(ele);\n this.removeItemByIndex(index, innerItems);\n }\n }\n this.resize();\n };\n Toolbar.prototype.removeItemByIndex = function (index, innerItems) {\n if (this.tbarEle[index] && innerItems[index]) {\n var eleIdx = this.tbarEle.indexOf(innerItems[index]);\n if (this.tbarAlign) {\n var indexAgn = void 0;\n indexAgn = this.tbarAlgEle[(this.items[eleIdx].align + 's').toLowerCase()].indexOf(this.tbarEle[eleIdx]);\n this.tbarAlgEle[(this.items[eleIdx].align + 's').toLowerCase()].splice(indexAgn, 1);\n }\n detach(innerItems[index]);\n this.items.splice(eleIdx, 1);\n this.tbarEle.splice(eleIdx, 1);\n }\n };\n Toolbar.prototype.templateRender = function (templateProp, innerEle, item) {\n var itemType = item.type;\n var eleObj = templateProp;\n var isComponent;\n if (typeof (templateProp) === 'object') {\n isComponent = typeof (eleObj.appendTo) === 'function';\n }\n if (typeof (templateProp) === 'string' || !isComponent) {\n var templateFn = void 0;\n var val = templateProp;\n val = (typeof (templateProp) === 'string') ? templateProp.trim() : templateProp;\n var e = void 0;\n try {\n if (document.querySelectorAll(val).length) {\n var ele = document.querySelector(val);\n var tempStr = ele.outerHTML.trim();\n templateFn = templateCompiler(tempStr);\n detach(ele);\n item.template = tempStr;\n }\n }\n catch (e) {\n templateFn = templateCompiler(val);\n }\n var tempArray = void 0;\n if (!isNOU(templateFn)) {\n tempArray = templateFn({}, this, 'template');\n }\n if (!isNOU(tempArray) && tempArray.length > 0) {\n [].slice.call(tempArray).forEach(function (ele) {\n if (!isNOU(ele.tagName)) {\n ele.style.display = '';\n }\n innerEle.appendChild(ele);\n });\n }\n }\n else if (itemType === 'Input') {\n var ele = buildTag('input');\n item.id ? (ele.id = item.id) : (ele.id = getUniqueID('tbr-ipt'));\n innerEle.appendChild(ele);\n eleObj.appendTo(ele);\n }\n this.add(innerEle, CLS_TEMPLATE);\n this.tbarEle.push(innerEle);\n };\n Toolbar.prototype.buttonRendering = function (item, innerEle) {\n var dom = buildTag('button', { className: CLS_TBARBTN });\n dom.setAttribute('type', 'button');\n var textStr = item.text;\n var iconCss;\n var iconPos;\n item.id ? (dom.id = item.id) : dom.id = getUniqueID('e-tbr-btn');\n var btnTxt = buildTag('div', { className: 'e-tbar-btn-text' });\n if (textStr) {\n btnTxt.innerHTML = textStr;\n dom.appendChild(btnTxt);\n dom.classList.add('e-tbtn-txt');\n }\n else {\n this.add(innerEle, 'e-tbtn-align');\n }\n if (item.prefixIcon || item.suffixIcon) {\n if ((item.prefixIcon && item.suffixIcon) || item.prefixIcon) {\n iconCss = item.prefixIcon + ' e-icons';\n iconPos = 'Left';\n }\n else {\n iconCss = item.suffixIcon + ' e-icons';\n iconPos = 'Right';\n }\n }\n new Button({ iconCss: iconCss, iconPosition: iconPos }, dom);\n if (item.width) {\n setStyle(dom, { 'width': formatUnit(item.width) });\n }\n return dom;\n };\n Toolbar.prototype.renderSubComponent = function (item) {\n var innerEle;\n var dom;\n innerEle = buildTag('div', { className: CLS_ITEM });\n innerEle.setAttribute('aria-disabled', 'false');\n if (!this.tbarEle) {\n this.tbarEle = [];\n }\n if (item.htmlAttributes) {\n this.setAttr(item.htmlAttributes, innerEle);\n }\n if (item.tooltipText) {\n innerEle.setAttribute('title', item.tooltipText);\n }\n if (item.cssClass) {\n innerEle.className = innerEle.className + ' ' + item.cssClass;\n }\n if (item.template) {\n this.templateRender(item.template, innerEle, item);\n }\n else {\n switch (item.type) {\n case 'Button':\n dom = this.buttonRendering(item, innerEle);\n dom.setAttribute('tabindex', '-1');\n innerEle.appendChild(dom);\n innerEle.addEventListener('click', this.itemClick.bind(this));\n break;\n case 'Separator':\n this.add(innerEle, CLS_SEPARATOR);\n break;\n }\n }\n if (item.showTextOn) {\n var sTxt = item.showTextOn;\n if (sTxt === 'Toolbar') {\n this.add(innerEle, CLS_POPUPTEXT);\n this.add(innerEle, 'e-tbtn-align');\n }\n else if (sTxt === 'Overflow') {\n this.add(innerEle, CLS_TBARTEXT);\n }\n }\n if (item.overflow) {\n var overflow = item.overflow;\n if (overflow === 'Show') {\n this.add(innerEle, CLS_TBAROVERFLOW);\n }\n else if (overflow === 'Hide') {\n if (!innerEle.classList.contains(CLS_SEPARATOR)) {\n this.add(innerEle, CLS_POPOVERFLOW);\n }\n }\n }\n if (item.overflow !== 'Show' && item.showAlwaysInPopup && !innerEle.classList.contains(CLS_SEPARATOR)) {\n this.add(innerEle, CLS_POPPRI);\n this.popupPriCount++;\n }\n return innerEle;\n };\n Toolbar.prototype.itemClick = function (e) {\n this.activeEleSwitch(e.currentTarget);\n };\n Toolbar.prototype.activeEleSwitch = function (ele) {\n this.activeEleRemove(ele.firstElementChild);\n this.activeEle.focus();\n };\n Toolbar.prototype.activeEleRemove = function (curEle) {\n if (!isNOU(this.activeEle)) {\n this.activeEle.setAttribute('tabindex', '-1');\n }\n this.activeEle = curEle;\n if (isNOU(this.trgtEle) && !curEle.parentElement.classList.contains(CLS_TEMPLATE)) {\n curEle.removeAttribute('tabindex');\n }\n else {\n this.activeEle.setAttribute('tabindex', '0');\n }\n };\n Toolbar.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * Returns the current module name.\n * @returns string\n * @private\n */\n Toolbar.prototype.getModuleName = function () {\n return 'toolbar';\n };\n Toolbar.prototype.itemsRerender = function (newProp) {\n this.items = this.tbarItemsCol;\n this.destroyMode();\n this.destroyItems();\n this.items = newProp;\n this.tbarItemsCol = this.items;\n this.renderItems();\n this.renderOverflowMode();\n };\n Toolbar.prototype.resize = function () {\n var ele = this.element;\n this.tbResize = true;\n if (this.tbarAlign) {\n this.itemPositioning();\n }\n if (this.popObj && this.overflowMode === 'Popup') {\n this.popObj.hide();\n }\n var checkOverflow = this.checkOverflow(ele, ele.getElementsByClassName(CLS_ITEMS)[0]);\n if (!checkOverflow) {\n this.destroyHScroll();\n }\n if (checkOverflow && this.scrollModule && (this.offsetWid === ele.offsetWidth)) {\n return;\n }\n if (this.offsetWid > ele.offsetWidth || checkOverflow) {\n this.renderOverflowMode();\n }\n if (this.popObj) {\n if (this.tbarAlign) {\n this.removePositioning();\n }\n this.popupRefresh(this.popObj.element, false);\n if (this.tbarAlign) {\n this.refreshPositioning();\n }\n }\n this.offsetWid = ele.offsetWidth;\n this.tbResize = false;\n this.separator();\n };\n /**\n * Gets called when the model property changes.The data that describes the old and new values of the property that changed.\n * @param {ToolbarModel} newProp\n * @param {ToolbarModel} oldProp\n * @returns void\n * @private\n */\n Toolbar.prototype.onPropertyChanged = function (newProp, oldProp) {\n var tEle = this.element;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'items':\n if (!(newProp.items instanceof Array && oldProp.items instanceof Array)) {\n var changedProb = Object.keys(newProp.items);\n for (var i = 0; i < changedProb.length; i++) {\n var index = parseInt(Object.keys(newProp.items)[i], 10);\n var property = Object.keys(newProp.items[index])[0];\n var oldProperty = Object(oldProp.items[index])[property];\n var newProperty = Object(newProp.items[index])[property];\n if (this.tbarAlign || property === 'align') {\n this.refresh();\n break;\n }\n var popupPriCheck = property === 'showAlwaysInPopup' && !newProperty;\n var booleanCheck = property === 'overflow' && this.popupPriCount !== 0;\n if ((popupPriCheck) || (this.items[index].showAlwaysInPopup) && booleanCheck) {\n --this.popupPriCount;\n }\n this.destroyMode();\n var itemCol = [].slice.call(selectAll('.' + CLS_ITEMS + ' .' + CLS_ITEM, tEle));\n detach(itemCol[index]);\n this.tbarEle.splice(index, 1);\n this.addItems([this.items[index]], index);\n this.items.splice(index, 1);\n if (this.items[index].template) {\n this.tbarEle.splice(this.items.length, 1);\n }\n }\n }\n else {\n this.itemsRerender(newProp.items);\n }\n break;\n case 'width':\n var wid = tEle.offsetWidth;\n setStyle(tEle, { 'width': formatUnit(newProp.width) });\n this.renderOverflowMode();\n if (this.popObj && wid < tEle.offsetWidth) {\n this.popupRefresh(this.popObj.element, false);\n }\n break;\n case 'height':\n setStyle(this.element, { 'height': formatUnit(newProp.height) });\n break;\n case 'overflowMode':\n this.destroyMode();\n this.renderOverflowMode();\n if (this.enableRtl) {\n this.add(tEle, CLS_RTL);\n }\n this.refreshOverflow();\n break;\n case 'enableRtl':\n newProp.enableRtl ? this.add(tEle, CLS_RTL) : this.remove(tEle, CLS_RTL);\n if (!isNOU(this.scrollModule)) {\n newProp.enableRtl ? this.add(this.scrollModule.element, CLS_RTL) : this.remove(this.scrollModule.element, CLS_RTL);\n }\n if (!isNOU(this.popObj)) {\n newProp.enableRtl ? this.add(this.popObj.element, CLS_RTL) : this.remove(this.popObj.element, CLS_RTL);\n }\n if (this.tbarAlign) {\n this.itemPositioning();\n }\n break;\n }\n }\n };\n /**\n * Shows or hides the Toolbar item that is in the specified index.\n * @param {number} index - Index value of target item.\n * @param {boolean} value - Based on this Boolean value, item will be hide (true) or show (false). By default, value is false.\n * @returns void.\n */\n Toolbar.prototype.hideItem = function (index, value) {\n if (this.tbarEle[index]) {\n var innerItems = [].slice.call(selectAll('.' + CLS_ITEM, this.element));\n if (value === true) {\n innerItems[index].classList.add(CLS_HIDDEN);\n }\n else {\n innerItems[index].classList.remove(CLS_HIDDEN);\n }\n this.refreshOverflow();\n }\n };\n __decorate([\n Collection([], Item)\n ], Toolbar.prototype, \"items\", void 0);\n __decorate([\n Property('auto')\n ], Toolbar.prototype, \"width\", void 0);\n __decorate([\n Property('auto')\n ], Toolbar.prototype, \"height\", void 0);\n __decorate([\n Property('Scrollable')\n ], Toolbar.prototype, \"overflowMode\", void 0);\n __decorate([\n Property(false)\n ], Toolbar.prototype, \"enableRtl\", void 0);\n __decorate([\n Event()\n ], Toolbar.prototype, \"clicked\", void 0);\n __decorate([\n Event()\n ], Toolbar.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Toolbar.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], Toolbar.prototype, \"beforeCreate\", void 0);\n Toolbar = __decorate([\n NotifyPropertyChanges\n ], Toolbar);\n return Toolbar;\n}(Component));\nexport { Toolbar };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, EventHandler, Property, Event, KeyboardEvents, rippleEffect } from '@syncfusion/ej2-base';\nimport { getUniqueID, compile as templateCompiler } from '@syncfusion/ej2-base';\nimport { addClass, isVisible, closest, attributes, classList, detach, select } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, ChildProperty, Collection, Animation } from '@syncfusion/ej2-base';\nimport { createElement as buildTag, setStyleAttribute as setStyle, Complex } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, formatUnit, selectAll } from '@syncfusion/ej2-base';\nvar CLS_ACRDN_ROOT = 'e-acrdn-root';\nvar CLS_ROOT = 'e-accordion';\nvar CLS_ITEM = 'e-acrdn-item';\nvar CLS_ITEMFOCUS = 'e-item-focus';\nvar CLS_ITEMHIDE = 'e-hide';\nvar CLS_HEADER = 'e-acrdn-header';\nvar CLS_HEADERICN = 'e-acrdn-header-icon';\nvar CLS_HEADERCTN = 'e-acrdn-header-content';\nvar CLS_CONTENT = 'e-acrdn-panel';\nvar CLS_CTENT = 'e-acrdn-content';\nvar CLS_TOOGLEICN = 'e-toggle-icon';\nvar CLS_COLLAPSEICN = 'e-tgl-collapse-icon e-icons';\nvar CLS_EXPANDICN = 'e-expand-icon';\nvar CLS_RTL = 'e-rtl';\nvar CLS_CTNHIDE = 'e-content-hide';\nvar CLS_SLCT = 'e-select';\nvar CLS_SLCTED = 'e-selected';\nvar CLS_ACTIVE = 'e-active';\nvar CLS_ANIMATE = 'e-animate';\nvar CLS_DISABLE = 'e-overlay';\nvar CLS_TOGANIMATE = 'e-toggle-animation';\nvar CLS_NEST = 'e-nested';\nvar CLS_EXPANDSTATE = 'e-expand-state';\nvar AccordionActionSettings = /** @class */ (function (_super) {\n __extends(AccordionActionSettings, _super);\n function AccordionActionSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('SlideDown')\n ], AccordionActionSettings.prototype, \"effect\", void 0);\n __decorate([\n Property(400)\n ], AccordionActionSettings.prototype, \"duration\", void 0);\n __decorate([\n Property('linear')\n ], AccordionActionSettings.prototype, \"easing\", void 0);\n return AccordionActionSettings;\n}(ChildProperty));\nexport { AccordionActionSettings };\nvar AccordionAnimationSettings = /** @class */ (function (_super) {\n __extends(AccordionAnimationSettings, _super);\n function AccordionAnimationSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({ effect: 'SlideUp', duration: 400, easing: 'linear' }, AccordionActionSettings)\n ], AccordionAnimationSettings.prototype, \"collapse\", void 0);\n __decorate([\n Complex({ effect: 'SlideDown', duration: 400, easing: 'linear' }, AccordionActionSettings)\n ], AccordionAnimationSettings.prototype, \"expand\", void 0);\n return AccordionAnimationSettings;\n}(ChildProperty));\nexport { AccordionAnimationSettings };\n/**\n * An item object that is used to configure Accordion items.\n */\nvar AccordionItem = /** @class */ (function (_super) {\n __extends(AccordionItem, _super);\n function AccordionItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(undefined)\n ], AccordionItem.prototype, \"content\", void 0);\n __decorate([\n Property(undefined)\n ], AccordionItem.prototype, \"header\", void 0);\n __decorate([\n Property(undefined)\n ], AccordionItem.prototype, \"cssClass\", void 0);\n __decorate([\n Property(undefined)\n ], AccordionItem.prototype, \"iconCss\", void 0);\n __decorate([\n Property(false)\n ], AccordionItem.prototype, \"expanded\", void 0);\n return AccordionItem;\n}(ChildProperty));\nexport { AccordionItem };\n/**\n * The Accordion is a vertically collapsible content panel that displays one or more panels at a time within the available space.\n * ```html\n *
\n * \n * ```\n */\nvar Accordion = /** @class */ (function (_super) {\n __extends(Accordion, _super);\n /**\n * Initializes a new instance of the Accordion class.\n * @param options - Specifies Accordion model properties as options.\n * @param element - Specifies the element that is rendered as an Accordion.\n */\n function Accordion(options, element) {\n var _this = _super.call(this, options, element) || this;\n /**\n * Contains the keyboard configuration of the Accordion.\n */\n _this.keyConfigs = {\n moveUp: 'uparrow',\n moveDown: 'downarrow',\n enter: 'enter',\n space: 'space',\n home: 'home',\n end: 'end',\n };\n return _this;\n }\n /**\n * Removes the control from the DOM and also removes all its related events.\n * @returns void\n */\n Accordion.prototype.destroy = function () {\n var _this = this;\n var ele = this.element;\n _super.prototype.destroy.call(this);\n this.unwireEvents();\n this.isDestroy = true;\n this.templateEle.forEach(function (eleStr) {\n document.body.appendChild(_this.element.querySelector(eleStr)).style.display = 'none';\n });\n while (ele.firstChild) {\n ele.removeChild(ele.firstChild);\n }\n if (this.trgtEle) {\n while (this.ctrlTem.firstChild) {\n ele.appendChild(this.ctrlTem.firstChild);\n }\n }\n ele.removeAttribute('style');\n ['aria-disabled', 'aria-multiselectable', 'role'].forEach(function (attrb) {\n _this.element.removeAttribute(attrb);\n });\n };\n Accordion.prototype.preRender = function () {\n var nested = closest(this.element, '.' + CLS_CONTENT);\n this.isNested = false;\n this.templateEle = [];\n if (!this.isDestroy) {\n this.isDestroy = false;\n }\n if (!isNOU(nested)) {\n nested.classList.add(CLS_NEST);\n this.isNested = true;\n }\n else {\n this.element.classList.add(CLS_ACRDN_ROOT);\n }\n if (this.enableRtl) {\n this.add(this.element, CLS_RTL);\n }\n if (!this.enablePersistence || isNOU(this.expandedItems)) {\n this.expandedItems = [];\n }\n };\n Accordion.prototype.add = function (ele, val) {\n ele.classList.add(val);\n };\n Accordion.prototype.remove = function (ele, val) {\n ele.classList.remove(val);\n };\n /**\n * To initialize the control rendering\n * @private\n */\n Accordion.prototype.render = function () {\n this.initialize();\n this.renderControl();\n this.wireEvents();\n };\n Accordion.prototype.initialize = function () {\n var width = formatUnit(this.width);\n var height = formatUnit(this.height);\n setStyle(this.element, { 'width': width, 'height': height });\n var ariaAttr = {\n 'aria-disabled': 'false', 'role': 'presentation', 'aria-multiselectable': 'true'\n };\n if (this.expandedItems.length > 0) {\n this.initExpand = this.expandedItems;\n }\n attributes(this.element, ariaAttr);\n if (this.expandMode === 'Single') {\n this.element.setAttribute('aria-multiselectable', 'false');\n }\n };\n Accordion.prototype.renderControl = function () {\n this.trgtEle = (this.element.children.length > 0) ? select('div', this.element) : null;\n this.renderItems();\n this.initItemExpand();\n };\n Accordion.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, 'click', this.clickHandler);\n if (!isNOU(this.keyModule)) {\n this.keyModule.destroy();\n }\n };\n Accordion.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'click', this.clickHandler, this);\n if (!this.isNested && !this.isDestroy) {\n rippleEffect(this.element, { selector: '.' + CLS_HEADER });\n }\n if (!this.isNested) {\n this.keyModule = new KeyboardEvents(this.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n }\n };\n Accordion.prototype.focusIn = function (e) {\n e.target.parentElement.classList.add(CLS_ITEMFOCUS);\n };\n Accordion.prototype.focusOut = function (e) {\n e.target.parentElement.classList.remove(CLS_ITEMFOCUS);\n };\n Accordion.prototype.ctrlTemplate = function () {\n var _this = this;\n this.ctrlTem = this.element.cloneNode(true);\n var innerEles = this.element.children;\n var content;\n addClass(innerEles, [CLS_ITEM]);\n [].slice.call(innerEles).forEach(function (el) {\n el.id = getUniqueID('acrdn_item');\n if (el.children.length > 0) {\n _this.add(el.children[0], CLS_HEADER);\n var header = el.children[0];\n attributes(header, { 'tabindex': '0', 'role': 'heading', 'aria-level': innerEles.length.toString() });\n header.id = getUniqueID('acrdn_header');\n EventHandler.add(header, 'focus', _this.focusIn, _this);\n EventHandler.add(header, 'blur', _this.focusOut, _this);\n var headerEle = header.firstElementChild;\n if (headerEle) {\n headerEle.classList.add(CLS_HEADERCTN);\n }\n content = el.children[1];\n if (content) {\n content.id = getUniqueID('acrdn_panel');\n header.setAttribute('aria-controls', content.id);\n content.style.display = '';\n el.classList.add(CLS_SLCT);\n el.children[0].appendChild(_this.toggleIconGenerate());\n classList(content, [CLS_CONTENT, CLS_CTNHIDE], []);\n attributes(content, { 'aria-labelledby': header.id, 'aria-hidden': 'true' });\n content = content.firstElementChild;\n if (content) {\n content.classList.add(CLS_CTENT);\n content.style.display = '';\n }\n }\n }\n });\n };\n Accordion.prototype.toggleIconGenerate = function () {\n var tglIcon = buildTag('div', { className: CLS_TOOGLEICN });\n var hdrColIcon = buildTag('span', { className: CLS_COLLAPSEICN });\n tglIcon.appendChild(hdrColIcon);\n return tglIcon;\n };\n Accordion.prototype.initItemExpand = function () {\n var len = this.initExpand.length;\n if (len === 0) {\n return;\n }\n if (this.expandMode === 'Single') {\n this.expandItem(true, this.initExpand[len - 1]);\n }\n else {\n for (var i = 0; i < len; i++) {\n this.expandItem(true, this.initExpand[i]);\n }\n }\n };\n Accordion.prototype.renderItems = function () {\n var _this = this;\n var ele = this.element;\n var innerItem;\n if (isNOU(this.initExpand)) {\n this.initExpand = [];\n }\n var items = this.items;\n if (!isNOU(this.trgtEle)) {\n this.ctrlTemplate();\n }\n else if (ele && items.length > 0) {\n items.forEach(function (item, index) {\n innerItem = _this.renderInnerItem(item, index);\n ele.appendChild(innerItem);\n if (innerItem.childElementCount > 0) {\n EventHandler.add(innerItem.querySelector('.' + CLS_HEADER), 'focus', _this.focusIn, _this);\n EventHandler.add(innerItem.querySelector('.' + CLS_HEADER), 'blur', _this.focusOut, _this);\n }\n });\n }\n };\n Accordion.prototype.clickHandler = function (e) {\n var _this = this;\n var trgt = e.target;\n var eventArgs = {};\n var index;\n var tglIcon;\n var acrdEle = closest(trgt, '.' + CLS_ROOT);\n if (acrdEle !== this.element) {\n return;\n }\n trgt.classList.add('e-target');\n var acrdnItem = closest(trgt, '.' + CLS_ITEM);\n var acrdnHdr = closest(trgt, '.' + CLS_HEADER);\n var acrdnCtn = closest(trgt, '.' + CLS_CONTENT);\n if (acrdnItem && (isNOU(acrdnHdr) || isNOU(acrdnCtn))) {\n acrdnHdr = acrdnItem.children[0];\n acrdnCtn = acrdnItem.children[1];\n }\n if (acrdnHdr) {\n tglIcon = select('.' + CLS_TOOGLEICN, acrdnHdr);\n }\n var acrdnCtnItem;\n if (acrdnCtn) {\n acrdnCtnItem = closest(acrdnCtn, '.' + CLS_ITEM);\n }\n var acrdActive = [];\n index = this.getIndexByItem(acrdnItem);\n if (acrdnCtnItem) {\n eventArgs.item = this.items[this.getIndexByItem(acrdnCtnItem)];\n }\n eventArgs.originalEvent = e;\n var ctnCheck = !isNOU(tglIcon) && isNOU(this.trgtEle) && acrdnItem.childElementCount <= 1;\n if (ctnCheck && (isNOU(acrdnCtn) || !isNOU(select('.' + CLS_HEADER + ' .' + CLS_TOOGLEICN, acrdnCtnItem)))) {\n acrdnItem.appendChild(this.contentRendering(index));\n this.ariaAttrUpdate(acrdnItem);\n }\n this.trigger('clicked', eventArgs);\n var cntclkCheck = (acrdnCtn && !isNOU(select('.e-target', acrdnCtn)));\n cntclkCheck = cntclkCheck && (isNOU(select('.' + CLS_ROOT, acrdnCtn)) || !(closest(trgt, '.' + CLS_ROOT) === this.element));\n trgt.classList.remove('e-target');\n if (trgt.classList.contains(CLS_CONTENT) || trgt.classList.contains(CLS_CTENT) || cntclkCheck) {\n return;\n }\n [].slice.call(this.element.children).forEach(function (el) {\n if (el.classList.contains(CLS_ACTIVE)) {\n acrdActive.push(el);\n }\n });\n var acrdAniEle = [].slice.call(this.element.querySelectorAll('.' + CLS_ITEM + ' [' + CLS_ANIMATE + ']'));\n if (acrdAniEle.length > 0) {\n for (var _i = 0, acrdAniEle_1 = acrdAniEle; _i < acrdAniEle_1.length; _i++) {\n var el = acrdAniEle_1[_i];\n acrdActive.push(el.parentElement);\n }\n }\n var sameContentCheck = acrdActive.indexOf(acrdnCtnItem) !== -1 && acrdnCtn.getAttribute('e-animate') === 'true';\n var sameHeader = false;\n if (!isNOU(acrdnItem) && !isNOU(acrdnHdr)) {\n var acrdnCtn_1 = select('.' + CLS_CONTENT, acrdnItem);\n var acrdnRoot = closest(acrdnItem, '.' + CLS_ACRDN_ROOT);\n var expandState = acrdnRoot.querySelector('.' + CLS_EXPANDSTATE);\n if (isNOU(acrdnCtn_1)) {\n return;\n }\n sameHeader = (expandState === acrdnItem);\n if (isVisible(acrdnCtn_1) && (!sameContentCheck || acrdnCtnItem.classList.contains(CLS_SLCTED))) {\n this.collapse(acrdnCtn_1);\n }\n else {\n if ((acrdActive.length > 0) && this.expandMode === 'Single' && !sameContentCheck) {\n acrdActive.forEach(function (el) {\n _this.collapse(select('.' + CLS_CONTENT, el));\n el.classList.remove(CLS_EXPANDSTATE);\n });\n }\n this.expand(acrdnCtn_1);\n }\n if (!isNOU(expandState) && !sameHeader) {\n expandState.classList.remove(CLS_EXPANDSTATE);\n }\n }\n };\n Accordion.prototype.eleMoveFocus = function (action, root, trgt) {\n var clst;\n var clstItem = closest(trgt, '.' + CLS_ITEM);\n if (trgt === root) {\n clst = ((action === 'moveUp' ? trgt.lastElementChild : trgt).querySelector('.' + CLS_HEADER));\n }\n else if (trgt.classList.contains(CLS_HEADER)) {\n clstItem = (action === 'moveUp' ? clstItem.previousElementSibling : clstItem.nextElementSibling);\n if (clstItem) {\n clst = select('.' + CLS_HEADER, clstItem);\n }\n }\n if (clst) {\n clst.focus();\n }\n };\n Accordion.prototype.keyActionHandler = function (e) {\n var trgt = e.target;\n if (trgt.tagName === 'INPUT' || trgt.tagName === 'TEXTAREA') {\n return;\n }\n e.preventDefault();\n var clst;\n var root = this.element;\n var content;\n switch (e.action) {\n case 'moveUp':\n this.eleMoveFocus(e.action, root, trgt);\n break;\n case 'moveDown':\n this.eleMoveFocus(e.action, root, trgt);\n break;\n case 'space':\n case 'enter':\n content = trgt.nextElementSibling;\n if (!isNOU(content) && content.classList.contains(CLS_CONTENT)) {\n if (content.getAttribute('e-animate') !== 'true') {\n trgt.click();\n }\n }\n else {\n trgt.click();\n }\n break;\n case 'home':\n case 'end':\n clst = e.action === 'home' ? root.firstElementChild.children[0] : root.lastElementChild.children[0];\n clst.focus();\n break;\n }\n };\n Accordion.prototype.headerEleGenerate = function () {\n var header = buildTag('div', { className: CLS_HEADER, id: getUniqueID('acrdn_header') });\n var ariaAttr = {\n 'tabindex': '0', 'role': 'heading', 'aria-expanded': 'false', 'aria-selected': 'false',\n 'aria-disabled': 'false', 'aria-level': this.items.length.toString()\n };\n attributes(header, ariaAttr);\n return header;\n };\n Accordion.prototype.renderInnerItem = function (item, index) {\n var innerEle;\n innerEle = buildTag('div', { className: CLS_ITEM });\n innerEle.id = getUniqueID('acrdn_item');\n if (item.header) {\n var ctnEle = this.headerEleGenerate();\n var hdrEle = buildTag('div', { className: CLS_HEADERCTN });\n ctnEle.appendChild(hdrEle);\n ctnEle.appendChild(this.fetchElement(hdrEle, item.header, index, true));\n innerEle.appendChild(ctnEle);\n }\n var hdr = select('.' + CLS_HEADER, innerEle);\n if (item.expanded && !isNOU(index) && (!this.enablePersistence)) {\n if (this.initExpand.indexOf(index) === -1) {\n this.initExpand.push(index);\n }\n }\n if (item.cssClass) {\n innerEle.classList.add(item.cssClass);\n }\n if (item.iconCss) {\n var hdrIcnEle = buildTag('div', { className: CLS_HEADERICN });\n var icon = buildTag('span', { className: item.iconCss + ' e-icons' });\n hdrIcnEle.appendChild(icon);\n if (isNOU(hdr)) {\n hdr = this.headerEleGenerate();\n hdr.appendChild(hdrIcnEle);\n innerEle.appendChild(hdr);\n }\n else {\n hdr.insertBefore(hdrIcnEle, hdr.childNodes[0]);\n }\n }\n if (item.content) {\n var hdrIcon = this.toggleIconGenerate();\n if (isNOU(hdr)) {\n hdr = this.headerEleGenerate();\n innerEle.appendChild(hdr);\n }\n hdr.appendChild(hdrIcon);\n this.add(innerEle, CLS_SLCT);\n }\n return innerEle;\n };\n Accordion.prototype.fetchElement = function (ele, value, index, isHeader) {\n var templateFn;\n var temString;\n try {\n if (document.querySelectorAll(value).length) {\n var eleVal = document.querySelector(value);\n temString = eleVal.outerHTML.trim();\n ele.appendChild(eleVal);\n eleVal.style.display = '';\n }\n }\n catch (e) {\n templateFn = templateCompiler(value);\n }\n var tempArray;\n if (!isNOU(templateFn)) {\n tempArray = templateFn();\n }\n if (!isNOU(tempArray) && tempArray.length > 0 && !(isNOU(tempArray[0].tagName) && tempArray.length === 1)) {\n [].slice.call(tempArray).forEach(function (el) {\n if (!isNOU(el.tagName)) {\n el.style.display = '';\n }\n ele.appendChild(el);\n });\n }\n else if (ele.childElementCount === 0) {\n ele.innerHTML = value;\n }\n if (!isNOU(temString)) {\n this.templateEle.push(value);\n }\n return ele;\n };\n Accordion.prototype.ariaAttrUpdate = function (itemEle) {\n var header = select('.' + CLS_HEADER, itemEle);\n var content = select('.' + CLS_CONTENT, itemEle);\n header.setAttribute('aria-controls', content.id);\n content.setAttribute('aria-labelledby', header.id);\n };\n Accordion.prototype.contentRendering = function (index) {\n var content = this.items[index].content;\n var itemcnt = buildTag('div', { className: CLS_CONTENT + ' ' + CLS_CTNHIDE, id: getUniqueID('acrdn_panel') });\n attributes(itemcnt, { 'aria-hidden': 'true' });\n var ctn = buildTag('div', { className: CLS_CTENT });\n itemcnt.appendChild(this.fetchElement(ctn, content, index, false));\n return itemcnt;\n };\n Accordion.prototype.expand = function (trgt) {\n var eventArgs;\n var trgtItemEle = closest(trgt, '.' + CLS_ITEM);\n if (isNOU(trgt) || (isVisible(trgt) && trgt.getAttribute('e-animate') !== 'true') || trgtItemEle.classList.contains(CLS_DISABLE)) {\n return;\n }\n var acrdnRoot = closest(trgtItemEle, '.' + CLS_ACRDN_ROOT);\n var expandState = acrdnRoot.querySelector('.' + CLS_EXPANDSTATE);\n var animation = {\n name: this.animation.expand.effect,\n duration: this.animation.expand.duration,\n timingFunction: this.animation.expand.easing\n };\n var icon = select('.' + CLS_TOOGLEICN, trgtItemEle).firstElementChild;\n eventArgs = { element: trgtItemEle,\n item: this.items[this.getIndexByItem(trgtItemEle)],\n isExpanded: true };\n var eff = animation.name;\n this.trigger('expanding', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n icon.classList.add(CLS_TOGANIMATE);\n this.expandedItemsPush(trgtItemEle);\n if (!isNOU(expandState)) {\n expandState.classList.remove(CLS_EXPANDSTATE);\n }\n trgtItemEle.classList.add(CLS_EXPANDSTATE);\n if ((animation.name === 'None')) {\n this.expandProgress('begin', icon, trgt, trgtItemEle, eventArgs);\n this.expandProgress('end', icon, trgt, trgtItemEle, eventArgs);\n return;\n }\n this.expandAnimation(eff, icon, trgt, trgtItemEle, animation, eventArgs);\n };\n Accordion.prototype.expandAnimation = function (ef, icn, trgt, trgtItemEle, animate, args) {\n var _this = this;\n var height;\n var trgtHgt;\n if (ef === 'SlideDown') {\n animate.begin = function () {\n _this.expandProgress('begin', icn, trgt, trgtItemEle, args);\n trgt.style.position = 'absolute';\n height = trgtItemEle.offsetHeight;\n trgtHgt = trgt.offsetHeight;\n trgt.style.maxHeight = (trgt.offsetHeight) + 'px';\n trgtItemEle.style.maxHeight = '';\n };\n animate.progress = function () {\n trgtItemEle.style.minHeight = (height + trgt.offsetHeight) + 'px';\n };\n animate.end = function () {\n setStyle(trgt, { 'position': '', 'maxHeight': '' });\n trgtItemEle.style.minHeight = '';\n _this.expandProgress('end', icn, trgt, trgtItemEle, args);\n };\n }\n else {\n animate.begin = function () {\n _this.expandProgress('begin', icn, trgt, trgtItemEle, args);\n };\n animate.end = function () {\n _this.expandProgress('end', icn, trgt, trgtItemEle, args);\n };\n }\n new Animation(animate).animate(trgt);\n };\n Accordion.prototype.expandProgress = function (progress, icon, trgt, trgtItemEle, eventArgs) {\n this.remove(trgt, CLS_CTNHIDE);\n this.add(trgtItemEle, CLS_SLCTED);\n this.add(icon, CLS_EXPANDICN);\n if (progress === 'end') {\n this.add(trgtItemEle, CLS_ACTIVE);\n trgt.setAttribute('aria-hidden', 'false');\n attributes(trgt.previousElementSibling, { 'aria-selected': 'true', 'aria-expanded': 'true' });\n icon.classList.remove(CLS_TOGANIMATE);\n this.trigger('expanded', eventArgs);\n }\n };\n Accordion.prototype.expandedItemsPush = function (item) {\n var index = this.getIndexByItem(item);\n if (this.expandedItems.indexOf(index) === -1) {\n this.expandedItems.push(index);\n }\n };\n Accordion.prototype.getIndexByItem = function (item) {\n return [].slice.call(this.element.children).indexOf(item);\n };\n Accordion.prototype.expandedItemsPop = function (item) {\n var index = this.getIndexByItem(item);\n this.expandedItems.splice(this.expandedItems.indexOf(index), 1);\n };\n Accordion.prototype.collapse = function (trgt) {\n var eventArgs;\n var trgtItemEle = closest(trgt, '.' + CLS_ITEM);\n if (isNOU(trgt) || !isVisible(trgt) || trgtItemEle.classList.contains(CLS_DISABLE)) {\n return;\n }\n var animation = {\n name: this.animation.collapse.effect,\n duration: this.animation.collapse.duration,\n timingFunction: this.animation.collapse.easing,\n };\n var icon = select('.' + CLS_TOOGLEICN, trgtItemEle).firstElementChild;\n eventArgs = { element: trgtItemEle,\n item: this.items[this.getIndexByItem(trgtItemEle)],\n isExpanded: false };\n var eff = animation.name;\n this.trigger('expanding', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n this.expandedItemsPop(trgtItemEle);\n trgtItemEle.classList.add(CLS_EXPANDSTATE);\n icon.classList.add(CLS_TOGANIMATE);\n if ((animation.name === 'None')) {\n this.collapseProgress('begin', icon, trgt, trgtItemEle, eventArgs);\n this.collapseProgress('end', icon, trgt, trgtItemEle, eventArgs);\n return;\n }\n this.collapseAnimation(eff, trgt, trgtItemEle, icon, animation, eventArgs);\n };\n Accordion.prototype.collapseAnimation = function (ef, trgt, trgtItEl, icn, animate, args) {\n var _this = this;\n var height;\n var trgtHeight;\n var itemHeight;\n var remain;\n if (ef === 'SlideUp') {\n animate.begin = function () {\n itemHeight = trgtItEl.offsetHeight;\n trgtItEl.style.minHeight = itemHeight + 'px';\n trgt.style.position = 'absolute';\n height = trgtItEl.offsetHeight;\n trgtHeight = trgt.offsetHeight;\n trgt.style.maxHeight = trgtHeight + 'px';\n _this.collapseProgress('begin', icn, trgt, trgtItEl, args);\n };\n animate.progress = function () {\n remain = ((height - (trgtHeight - trgt.offsetHeight)));\n if (remain < itemHeight) {\n trgtItEl.style.minHeight = remain + 'px';\n }\n };\n animate.end = function () {\n trgt.style.display = 'none';\n _this.collapseProgress('end', icn, trgt, trgtItEl, args);\n trgtItEl.style.minHeight = '';\n setStyle(trgt, { 'position': '', 'maxHeight': '', 'display': '' });\n };\n }\n else {\n animate.begin = function () {\n _this.collapseProgress('begin', icn, trgt, trgtItEl, args);\n };\n animate.end = function () {\n _this.collapseProgress('end', icn, trgt, trgtItEl, args);\n };\n }\n new Animation(animate).animate(trgt);\n };\n Accordion.prototype.collapseProgress = function (progress, icon, trgt, trgtItemEle, eventArgs) {\n this.remove(icon, CLS_EXPANDICN);\n this.remove(trgtItemEle, CLS_SLCTED);\n if (progress === 'end') {\n this.add(trgt, CLS_CTNHIDE);\n icon.classList.remove(CLS_TOGANIMATE);\n this.remove(trgtItemEle, CLS_ACTIVE);\n trgt.setAttribute('aria-hidden', 'true');\n attributes(trgt.previousElementSibling, { 'aria-selected': 'false', 'aria-expanded': 'false' });\n this.trigger('expanded', eventArgs);\n }\n };\n /**\n * Returns the current module name.\n * @returns string\n * @private\n */\n Accordion.prototype.getModuleName = function () {\n return 'accordion';\n };\n Accordion.prototype.itemAttribUpdate = function () {\n var itemEle = [].slice.call(this.element.children);\n var itemLen = this.items.length;\n itemEle.forEach(function (ele) {\n select('.' + CLS_HEADER, ele).setAttribute('aria-level', '' + itemLen);\n });\n };\n /**\n * Adds new item to the Accordion with the specified index of the Accordion.\n * @param {AccordionItemModel} item - Item array that is to be added to the Accordion.\n * @param {number} index - Number value that determines where the item should be added.\n * By default, item is added at the last index if the index is not specified.\n * @returns void\n */\n Accordion.prototype.addItem = function (item, index) {\n var ele = this.element;\n if (isNOU(index)) {\n index = this.items.length;\n }\n if (ele.childElementCount >= index) {\n this.items.splice(index, 0, item);\n var innerItemEle = this.renderInnerItem(item, index);\n if (ele.childElementCount === index) {\n ele.appendChild(innerItemEle);\n }\n else {\n ele.insertBefore(innerItemEle, ele.children[index]);\n }\n EventHandler.add(innerItemEle.querySelector('.' + CLS_HEADER), 'focus', this.focusIn, this);\n EventHandler.add(innerItemEle.querySelector('.' + CLS_HEADER), 'blur', this.focusOut, this);\n this.itemAttribUpdate();\n }\n this.expandedItems = [];\n this.expandedItemRefresh(ele);\n if (item.expanded) {\n this.expandItem(true, index);\n }\n };\n Accordion.prototype.expandedItemRefresh = function (ele) {\n var _this = this;\n [].slice.call(ele.children).forEach(function (el) {\n if (el.classList.contains(CLS_SLCTED)) {\n _this.expandedItemsPush(el);\n }\n });\n };\n /**\n * Dynamically removes item from Accordion.\n * @param {number} index - Number value that determines which item should be removed.\n * @returns void.\n */\n Accordion.prototype.removeItem = function (index) {\n var ele = this.element.children[index];\n if (isNOU(ele)) {\n return;\n }\n detach(ele);\n this.items.splice(index, 1);\n this.itemAttribUpdate();\n this.expandedItems = [];\n this.expandedItemRefresh(this.element);\n };\n /**\n * Sets focus to the specified index item header in Accordion.\n * @param {number} index - Number value that determines which item should be focused.\n * @returns void.\n */\n Accordion.prototype.select = function (index) {\n var ele = this.element.children[index];\n if (isNOU(ele) || isNOU(select('.' + CLS_HEADER, ele))) {\n return;\n }\n ele.children[0].focus();\n };\n /**\n * Shows or hides the specified item from Accordion.\n * @param {number} index - Number value that determines which item should be hidden/shown.\n * @param {Boolean} isHidden - Boolean value that determines the action either hide (true) or show (false). Default value is false.\n * If the `isHidden` value is false, the item is shown or else item it is hidden.\n * @returns void.\n */\n Accordion.prototype.hideItem = function (index, isHidden) {\n var ele = this.element.children[index];\n if (isNOU(ele)) {\n return;\n }\n if (isNOU(isHidden)) {\n isHidden = true;\n }\n isHidden ? this.add(ele, CLS_ITEMHIDE) : this.remove(ele, CLS_ITEMHIDE);\n };\n /**\n * Enables/Disables the specified Accordion item.\n * @param {number} index - Number value that determines which item should be enabled/disabled.\n * @param {boolean} isEnable - Boolean value that determines the action as enable (true) or disable (false).\n * If the `isEnable` value is true, the item is enabled or else it is disabled.\n * @returns void.\n */\n Accordion.prototype.enableItem = function (index, isEnable) {\n var ele = this.element.children[index];\n if (isNOU(ele)) {\n return;\n }\n var eleHeader = ele.firstElementChild;\n if (isEnable) {\n this.remove(ele, CLS_DISABLE);\n attributes(eleHeader, { 'tabindex': '0', 'aria-disabled': 'false' });\n eleHeader.focus();\n }\n else {\n if (ele.classList.contains(CLS_ACTIVE)) {\n this.expandItem(false, index);\n this.eleMoveFocus('movedown', this.element, eleHeader);\n }\n this.add(ele, CLS_DISABLE);\n eleHeader.setAttribute('aria-disabled', 'true');\n eleHeader.removeAttribute('tabindex');\n }\n };\n /**\n * Expands/Collapses the specified Accordion item.\n * @param {boolean} isExpand - Boolean value that determines the action as expand or collapse.\n * @param {number} index - Number value that determines which item should be expanded/collapsed.`index` is optional parameter.\n * Without Specifying index, based on the `isExpand` value all Accordion item can be expanded or collapsed.\n * @returns void.\n */\n Accordion.prototype.expandItem = function (isExpand, index) {\n var _this = this;\n var root = this.element;\n if (isNOU(index)) {\n if (this.expandMode === 'Single' && isExpand) {\n var ele = root.children[root.childElementCount - 1];\n this.itemExpand(isExpand, ele, this.getIndexByItem(ele));\n }\n else {\n [].slice.call(this.element.children).forEach(function (el) {\n _this.itemExpand(isExpand, el, _this.getIndexByItem(el));\n });\n }\n }\n else {\n var ele = this.element.children[index];\n if (isNOU(ele) || !ele.classList.contains(CLS_SLCT) || (ele.classList.contains(CLS_ACTIVE) && isExpand)) {\n return;\n }\n else {\n if (this.expandMode === 'Single') {\n this.expandItem(false);\n }\n this.itemExpand(isExpand, ele, index);\n }\n }\n };\n Accordion.prototype.itemExpand = function (isExpand, ele, index) {\n var ctn = ele.children[1];\n if (ele.classList.contains(CLS_DISABLE)) {\n return;\n }\n if (isNOU(ctn) && isExpand) {\n ctn = this.contentRendering(index);\n ele.appendChild(ctn);\n this.ariaAttrUpdate(ele);\n }\n else if (isNOU(ctn)) {\n return;\n }\n isExpand ? this.expand(ctn) : this.collapse(ctn);\n };\n Accordion.prototype.destroyItems = function () {\n [].slice.call(this.element.querySelectorAll('.' + CLS_ITEM)).forEach(function (el) { detach(el); });\n };\n Accordion.prototype.updateItem = function (item, index) {\n if (!isNOU(item)) {\n var itemObj = this.items[index];\n this.items.splice(index, 1);\n detach(item);\n this.addItem(itemObj, index);\n }\n };\n Accordion.prototype.getPersistData = function () {\n var keyEntity = ['expandedItems'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Gets called when the model property changes.The data that describes the old and new values of the property that changed.\n * @param {AccordionModel} newProp\n * @param {AccordionModel} oldProp\n * @returns void\n * @private\n */\n Accordion.prototype.onPropertyChanged = function (newProp, oldProp) {\n var acrdn = this.element;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'items':\n if (!(newProp.items instanceof Array && oldProp.items instanceof Array)) {\n var changedProp = Object.keys(newProp.items);\n for (var j = 0; j < changedProp.length; j++) {\n var index = parseInt(Object.keys(newProp.items)[j], 10);\n var property = Object.keys(newProp.items[index])[0];\n var item = selectAll('.' + CLS_ITEM, this.element)[index];\n var oldVal = Object(oldProp.items[index])[property];\n var newVal = Object(newProp.items[index])[property];\n if (property === 'header' || property === 'iconCss' || property === 'expanded') {\n this.updateItem(item, index);\n }\n if (property === 'cssClass' && !isNOU(item)) {\n item.classList.remove(oldVal);\n item.classList.add(newVal);\n }\n if (property === 'content' && !isNOU(item) && item.children.length === 2) {\n if (item.classList.contains(CLS_SLCTED)) {\n this.expandItem(false, index);\n }\n detach(item.querySelector('.' + CLS_CONTENT));\n }\n }\n }\n else {\n this.destroyItems();\n this.renderItems();\n this.initItemExpand();\n }\n break;\n case 'enableRtl':\n newProp.enableRtl ? this.add(acrdn, CLS_RTL) : this.remove(acrdn, CLS_RTL);\n break;\n case 'height':\n setStyle(this.element, { 'height': formatUnit(newProp.height) });\n break;\n case 'width':\n setStyle(this.element, { 'width': formatUnit(newProp.width) });\n break;\n case 'expandMode':\n if (newProp.expandMode === 'Single') {\n this.element.setAttribute('aria-multiselectable', 'false');\n if (this.expandedItems.length > 1) {\n this.expandItem(false);\n }\n }\n else {\n this.element.setAttribute('aria-multiselectable', 'true');\n }\n break;\n }\n }\n };\n __decorate([\n Collection([], AccordionItem)\n ], Accordion.prototype, \"items\", void 0);\n __decorate([\n Property('100%')\n ], Accordion.prototype, \"width\", void 0);\n __decorate([\n Property('auto')\n ], Accordion.prototype, \"height\", void 0);\n __decorate([\n Property('Multiple')\n ], Accordion.prototype, \"expandMode\", void 0);\n __decorate([\n Complex({}, AccordionAnimationSettings)\n ], Accordion.prototype, \"animation\", void 0);\n __decorate([\n Event()\n ], Accordion.prototype, \"clicked\", void 0);\n __decorate([\n Event()\n ], Accordion.prototype, \"expanding\", void 0);\n __decorate([\n Event()\n ], Accordion.prototype, \"expanded\", void 0);\n __decorate([\n Event()\n ], Accordion.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Accordion.prototype, \"destroyed\", void 0);\n Accordion = __decorate([\n NotifyPropertyChanges\n ], Accordion);\n return Accordion;\n}(Component));\nexport { Accordion };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, ChildProperty, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { Event, EventHandler, KeyboardEvents, Touch } from '@syncfusion/ej2-base';\nimport { attributes, Animation } from '@syncfusion/ej2-base';\nimport { Browser, Collection, setValue, getValue, getUniqueID, getInstance } from '@syncfusion/ej2-base';\nimport { select, selectAll, closest, createElement, detach, append, rippleEffect, isVisible } from '@syncfusion/ej2-base';\nimport { ListBase } from '@syncfusion/ej2-lists';\nimport { calculatePosition, isCollide, fit, getScrollableParent, getZindexPartial } from '@syncfusion/ej2-popups';\nvar DOWNARROW = 'downarrow';\nvar ENTER = 'enter';\nvar ESCAPE = 'escape';\nvar FOCUSED = 'e-focused';\nvar HEADER = 'e-menu-header';\nvar LEFTARROW = 'leftarrow';\nvar RIGHTARROW = 'rightarrow';\nvar RTL = 'e-rtl';\nvar SELECTED = 'e-selected';\nvar SEPARATOR = 'e-separator';\nvar UPARROW = 'uparrow';\nvar WRAPPER = 'e-contextmenu-wrapper';\nvar CARET = 'e-caret';\nvar ITEM = 'e-menu-item';\nvar DISABLED = 'e-disabled';\nvar HIDE = 'e-menu-hide';\nvar ICONS = 'e-icons';\n/**\n * Specifies context menu items.\n */\nvar MenuItem = /** @class */ (function (_super) {\n __extends(MenuItem, _super);\n function MenuItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], MenuItem.prototype, \"iconCss\", void 0);\n __decorate([\n Property('')\n ], MenuItem.prototype, \"id\", void 0);\n __decorate([\n Property(false)\n ], MenuItem.prototype, \"separator\", void 0);\n __decorate([\n Collection([], MenuItem)\n ], MenuItem.prototype, \"items\", void 0);\n __decorate([\n Property('')\n ], MenuItem.prototype, \"text\", void 0);\n __decorate([\n Property('')\n ], MenuItem.prototype, \"url\", void 0);\n return MenuItem;\n}(ChildProperty));\nexport { MenuItem };\n/**\n * The ContextMenu is a graphical user interface that appears on the user right click/touch hold operation.\n * ```html\n *
\n *
    \n * ```\n * ```typescript\n * \n * ```\n */\nvar ContextMenu = /** @class */ (function (_super) {\n __extends(ContextMenu, _super);\n /**\n * Constructor for creating the widget.\n * @private\n */\n function ContextMenu(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.animation = new Animation({});\n _this.navIdx = [];\n _this.isTapHold = false;\n return _this;\n }\n /**\n * Initialized animation with parent menu animation settings.\n * @private\n */\n ContextMenu.prototype.preRender = function () {\n if (this.element.tagName === 'EJS-CONTEXTMENU') {\n this.element.style.display = 'none';\n this.element.classList.remove('e-' + this.getModuleName());\n this.element.classList.remove('e-control');\n var ejInst = getValue('ej2_instances', this.element);\n var ul = createElement('ul');\n this.ngElement = this.element;\n this.element = ul;\n this.element.classList.add('e-control');\n this.element.classList.add('e-' + this.getModuleName());\n setValue('ej2_instances', ejInst, this.element);\n if (!this.element.id) {\n this.element.id = getUniqueID(this.getModuleName());\n }\n }\n };\n /**\n * Initialize the control rendering\n * @private\n */\n ContextMenu.prototype.render = function () {\n this.initWrapper();\n this.renderItems();\n this.wireEvents();\n };\n ContextMenu.prototype.initWrapper = function () {\n var wrapper = this.getWrapper();\n if (!wrapper) {\n wrapper = createElement('div', { className: WRAPPER });\n document.body.appendChild(wrapper);\n }\n if (this.cssClass) {\n wrapper.classList.add(this.cssClass);\n }\n if (this.enableRtl) {\n wrapper.classList.add(RTL);\n }\n attributes(this.element, { 'role': 'menu', 'tabindex': '0' });\n wrapper.appendChild(this.element);\n this.element.style.zIndex = getZindexPartial(this.element).toString();\n };\n ContextMenu.prototype.renderItems = function () {\n if (!this.items.length) {\n this.items = ListBase.createJsonFromElement(this.element);\n this.element.innerHTML = '';\n }\n var ul = this.createItems(this.items);\n append(Array.prototype.slice.call(ul.children), this.element);\n this.element.classList.add('e-menu-parent');\n };\n ContextMenu.prototype.wireEvents = function () {\n var wrapper = this.getWrapper();\n if (this.target) {\n var target = void 0;\n var targetElems = selectAll(this.target);\n for (var i = 0, len = targetElems.length; i < len; i++) {\n target = targetElems[i];\n if (Browser.isIos) {\n new Touch(target, { tapHold: this.touchHandler.bind(this) });\n }\n else {\n EventHandler.add(target, 'contextmenu', this.cmenuHandler, this);\n }\n }\n this.targetElement = target;\n for (var _i = 0, _a = getScrollableParent(this.targetElement); _i < _a.length; _i++) {\n var parent_1 = _a[_i];\n EventHandler.add(parent_1, 'scroll', this.scrollHandler, this);\n }\n }\n if (!Browser.isDevice) {\n EventHandler.add(wrapper, 'mouseover', this.moverHandler, this);\n EventHandler.add(document, 'mousedown', this.mouseDownHandler, this);\n }\n this.delegateClickHandler = this.clickHandler.bind(this);\n EventHandler.add(document, 'click', this.delegateClickHandler, this);\n new KeyboardEvents(wrapper, {\n keyAction: this.keyBoardHandler.bind(this),\n keyConfigs: {\n downarrow: DOWNARROW,\n uparrow: UPARROW,\n enter: ENTER,\n leftarrow: LEFTARROW,\n rightarrow: RIGHTARROW,\n escape: ESCAPE\n }\n });\n rippleEffect(wrapper, { selector: '.' + ITEM });\n };\n ContextMenu.prototype.mouseDownHandler = function (e) {\n if (closest(e.target, '.' + WRAPPER) !== this.getWrapper()) {\n this.closeMenu(this.navIdx.length, e);\n }\n };\n ContextMenu.prototype.keyBoardHandler = function (e) {\n e.preventDefault();\n switch (e.action) {\n case DOWNARROW:\n case UPARROW:\n this.upDownKeyHandler(e);\n break;\n case RIGHTARROW:\n this.rightEnterKeyHandler(e);\n break;\n case LEFTARROW:\n this.leftEscKeyHandler(e);\n break;\n case ENTER:\n this.rightEnterKeyHandler(e);\n break;\n case ESCAPE:\n this.leftEscKeyHandler(e);\n break;\n }\n };\n ContextMenu.prototype.upDownKeyHandler = function (e) {\n var wrapper = this.getWrapper();\n var cul = wrapper.children[this.navIdx.length];\n var defaultIdx = e.action === DOWNARROW ? 0 : cul.childElementCount - 1;\n var fliIdx = defaultIdx;\n var fli = this.getLIByClass(cul, FOCUSED);\n if (fli) {\n fliIdx = this.getIdx(cul, fli);\n fli.classList.remove(FOCUSED);\n e.action === DOWNARROW ? fliIdx++ : fliIdx--;\n if (fliIdx === (e.action === DOWNARROW ? cul.childElementCount : -1)) {\n fliIdx = defaultIdx;\n }\n }\n var cli = cul.children[fliIdx];\n fliIdx = this.isValidLI(cli, fliIdx, e.action);\n cul.children[fliIdx].classList.add(FOCUSED);\n cul.children[fliIdx].focus();\n };\n ContextMenu.prototype.isValidLI = function (cli, index, action) {\n var wrapper = this.getWrapper();\n var cul = wrapper.children[this.navIdx.length];\n if (cli.classList.contains(SEPARATOR) || cli.classList.contains(DISABLED) || cli.classList.contains(HIDE)) {\n ((action === DOWNARROW) || (action === RIGHTARROW)) ? index++ : index--;\n }\n cli = cul.children[index];\n if (cli.classList.contains(SEPARATOR) || cli.classList.contains(DISABLED) || cli.classList.contains(HIDE)) {\n index = this.isValidLI(cli, index, action);\n }\n return index;\n };\n ContextMenu.prototype.rightEnterKeyHandler = function (e) {\n var eventArgs;\n var wrapper = this.getWrapper();\n var cul = wrapper.children[this.navIdx.length];\n var fli = this.getLIByClass(cul, FOCUSED);\n if (fli) {\n var fliIdx = this.getIdx(cul, fli);\n var navIdx = this.navIdx.concat(fliIdx);\n var index = void 0;\n var item = this.getItem(navIdx);\n if (item.items.length) {\n this.navIdx.push(fliIdx);\n this.openMenu(fli, item, null, null, e);\n fli.classList.remove(FOCUSED);\n fli.classList.add(SELECTED);\n if (e.action === ENTER) {\n eventArgs = { element: fli, item: item };\n this.trigger('select', eventArgs);\n }\n fli.focus();\n cul = wrapper.children[this.navIdx.length];\n index = this.isValidLI(cul.children[0], 0, e.action);\n cul.children[index].classList.add(FOCUSED);\n cul.children[index].focus();\n }\n else {\n if (e.action === ENTER) {\n fli.classList.remove(FOCUSED);\n fli.classList.add(SELECTED);\n eventArgs = { element: fli, item: item };\n this.trigger('select', eventArgs);\n this.closeMenu(null, e);\n }\n }\n }\n };\n ContextMenu.prototype.leftEscKeyHandler = function (e) {\n if (this.navIdx.length) {\n var wrapper = this.getWrapper();\n this.closeMenu(this.navIdx.length, e);\n var cul = wrapper.children[this.navIdx.length];\n var sli = this.getLIByClass(cul, SELECTED);\n if (sli) {\n sli.setAttribute('aria-expanded', 'false');\n sli.classList.remove(SELECTED);\n sli.classList.add(FOCUSED);\n sli.focus();\n }\n }\n else {\n if (e.action === ESCAPE) {\n this.closeMenu(null, e);\n }\n }\n };\n ContextMenu.prototype.scrollHandler = function (e) {\n this.closeMenu(null, e);\n };\n ContextMenu.prototype.touchHandler = function (e) {\n this.isTapHold = true;\n this.cmenuHandler(e.originalEvent);\n };\n ContextMenu.prototype.cmenuHandler = function (e) {\n e.preventDefault();\n this.closeMenu(null, e);\n if (this.canOpen(e.target)) {\n if (e.changedTouches) {\n this.openMenu(null, null, e.changedTouches[0].pageY + 1, e.changedTouches[0].pageX + 1, e);\n }\n else {\n this.openMenu(null, null, e.pageY + 1, e.pageX + 1, e);\n }\n }\n };\n /**\n * Closes the ContextMenu if it is opened.\n */\n ContextMenu.prototype.close = function () {\n this.closeMenu();\n };\n ContextMenu.prototype.closeMenu = function (ulIndex, e) {\n if (ulIndex === void 0) { ulIndex = 0; }\n if (e === void 0) { e = null; }\n if (this.isMenuVisible()) {\n var ul = void 0;\n var item = void 0;\n var items = void 0;\n var closeArgs = void 0;\n var beforeCloseArgs = void 0;\n var wrapper = this.getWrapper();\n for (var cnt = wrapper.childElementCount; cnt > ulIndex; cnt--) {\n item = this.navIdx.length ? this.getItem(this.navIdx) : null;\n items = item ? item.items : this.items;\n ul = wrapper.children[cnt - 1];\n beforeCloseArgs = { element: ul, parentItem: item, items: items, event: e, cancel: false };\n this.trigger('beforeClose', beforeCloseArgs);\n if (!beforeCloseArgs.cancel) {\n this.toggleAnimation(ul, false);\n this.navIdx.length = ulIndex ? ulIndex - 1 : ulIndex;\n closeArgs = { element: ul, parentItem: item, items: items };\n this.trigger('onClose', closeArgs);\n }\n }\n }\n };\n ContextMenu.prototype.isMenuVisible = function () {\n return (this.navIdx.length > 0 || (this.element.classList.contains('e-contextmenu') && isVisible(this.element).valueOf()));\n };\n ContextMenu.prototype.canOpen = function (target) {\n var canOpen = true;\n if (this.filter) {\n canOpen = false;\n var filter = this.filter.split(' ');\n for (var i = 0, len = target.classList.length; i < len; i++) {\n if (filter.indexOf(target.classList[i]) > -1) {\n canOpen = true;\n break;\n }\n }\n }\n return canOpen;\n };\n /**\n * This method is used to open the ContextMenu in specified position.\n * @param top To specify ContextMenu vertical positioning.\n * @param left To specify ContextMenu horizontal positioning.\n * @returns void\n */\n ContextMenu.prototype.open = function (top, left) {\n this.openMenu(null, null, top, left);\n };\n ContextMenu.prototype.openMenu = function (li, item, top, left, e) {\n if (top === void 0) { top = 0; }\n if (left === void 0) { left = 0; }\n if (e === void 0) { e = null; }\n var ul;\n var navIdx;\n var wrapper = this.getWrapper();\n if (li) {\n ul = this.createItems(item.items);\n if (Browser.isDevice) {\n wrapper.lastChild.style.display = 'none';\n var data = { text: item.text, iconCss: ICONS + ' e-previous' };\n var hdata = new MenuItem(this.items[0], null, data, true);\n var hli = this.createItems([hdata]).children[0];\n hli.classList.add(HEADER);\n ul.insertBefore(hli, ul.children[0]);\n }\n ul.style.zIndex = this.element.style.zIndex;\n wrapper.appendChild(ul);\n }\n else {\n ul = this.element;\n }\n navIdx = this.getIndex(li ? li.id : null, true);\n var items = li ? item.items : this.items;\n var eventArgs = { element: ul, items: items, parentItem: item, event: e, cancel: false };\n this.trigger('beforeOpen', eventArgs);\n if (eventArgs.cancel) {\n this.navIdx.pop();\n }\n else {\n this.setPosition(li, ul, top, left);\n this.toggleAnimation(ul);\n }\n };\n ContextMenu.prototype.setPosition = function (li, ul, top, left) {\n var px = 'px';\n this.toggleVisiblity(ul);\n if (ul === this.element) {\n var collide = isCollide(ul, null, left, top);\n if (collide.indexOf('right') > -1) {\n left = left - ul.offsetWidth;\n }\n if (collide.indexOf('bottom') > -1) {\n var offset = fit(ul, null, { X: false, Y: true }, { top: top, left: left });\n top = offset.top - 20;\n }\n collide = isCollide(ul, null, left, top);\n if (collide.indexOf('left') > -1) {\n var offset = fit(ul, null, { X: true, Y: false }, { top: top, left: left });\n left = offset.left;\n }\n }\n else {\n if (Browser.isDevice) {\n top = Number(this.element.style.top.replace(px, ''));\n left = Number(this.element.style.left.replace(px, ''));\n }\n else {\n var x = this.enableRtl ? 'left' : 'right';\n var offset = calculatePosition(li, x, 'top');\n top = offset.top;\n left = offset.left;\n var collide = isCollide(ul, null, this.enableRtl ? left - ul.offsetWidth : left, top);\n var xCollision = collide.indexOf('left') > -1 || collide.indexOf('right') > -1;\n if (xCollision) {\n offset = calculatePosition(li, this.enableRtl ? 'right' : 'left', 'top');\n left = offset.left;\n }\n if (this.enableRtl || xCollision) {\n left = (this.enableRtl && xCollision) ? left : left - ul.offsetWidth;\n }\n if (collide.indexOf('bottom') > -1) {\n offset = fit(ul, null, { X: false, Y: true }, { top: top, left: left });\n top = offset.top;\n }\n }\n }\n this.toggleVisiblity(ul, false);\n ul.style.top = top + px;\n ul.style.left = left + px;\n };\n ContextMenu.prototype.toggleVisiblity = function (ul, isVisible) {\n if (isVisible === void 0) { isVisible = true; }\n ul.style.visibility = isVisible ? 'hidden' : '';\n ul.style.display = isVisible ? 'block' : 'none';\n };\n ContextMenu.prototype.createItems = function (items) {\n var _this = this;\n var showIcon = this.hasField(items, 'iconCss');\n var listBaseOptions = {\n showIcon: showIcon,\n moduleName: 'menu',\n itemCreating: function (args) {\n if (!args.curData.id) {\n args.curData.id = getUniqueID('menuitem');\n }\n args.curData.htmlAttributes = {\n role: 'menuitem',\n tabindex: '-1'\n };\n },\n itemCreated: function (args) {\n if (args.curData.separator) {\n args.item.classList.add(SEPARATOR);\n args.item.removeAttribute('role');\n }\n if (showIcon && !args.curData.iconCss && !args.curData.separator) {\n args.item.classList.add('e-blankicon');\n }\n if (args.curData.items && args.curData.items.length) {\n var span = createElement('span', { className: ICONS + ' ' + CARET });\n args.item.appendChild(span);\n args.item.setAttribute('aria-haspopup', 'true');\n args.item.setAttribute('aria-expanded', 'false');\n args.item.removeAttribute('role');\n args.item.classList.add('e-menu-caret-icon');\n }\n var eventArgs = { item: args.curData, element: args.item };\n _this.trigger('beforeItemRender', eventArgs);\n }\n };\n var ul = ListBase.createList(this.toRawObject(items.slice()), listBaseOptions, true);\n ul.setAttribute('tabindex', '0');\n return ul;\n };\n ContextMenu.prototype.toRawObject = function (items) {\n var item;\n var menuItems = [];\n for (var i = 0, len = items.length; i < len; i++) {\n item = items[i].properties;\n menuItems.push(item);\n }\n return menuItems;\n };\n ContextMenu.prototype.moverHandler = function (e) {\n var wrapper = this.getWrapper();\n var trgt = e.target;\n var cli = this.getLI(trgt);\n if (cli && closest(cli, '.' + WRAPPER)) {\n var fli = select('.' + FOCUSED, wrapper);\n if (fli) {\n fli.classList.remove(FOCUSED);\n }\n cli.classList.add(FOCUSED);\n if (!this.showItemOnClick) {\n this.clickHandler(e);\n }\n }\n };\n ContextMenu.prototype.hasField = function (items, field) {\n for (var i = 0, len = items.length; i < len; i++) {\n if (items[i][field]) {\n return true;\n }\n }\n return false;\n };\n ContextMenu.prototype.getWrapper = function () {\n return closest(this.element, '.' + WRAPPER);\n };\n ContextMenu.prototype.clickHandler = function (e) {\n if (this.isTapHold) {\n this.isTapHold = false;\n }\n else {\n var wrapper = this.getWrapper();\n var trgt = e.target;\n var cli = this.getLI(trgt);\n var cliWrapper = cli ? closest(cli, '.' + WRAPPER) : null;\n var isInstLI = cli && cliWrapper && wrapper.firstElementChild.id === cliWrapper.firstElementChild.id;\n if (isInstLI && e.type === 'click' && !cli.classList.contains(HEADER)) {\n this.setLISelected(cli);\n var navIdx = this.getIndex(cli.id, true);\n var item = this.getItem(navIdx);\n var eventArgs = { element: cli, item: item };\n this.trigger('select', eventArgs);\n }\n if (isInstLI && (e.type === 'mouseover' || Browser.isDevice || this.showItemOnClick)) {\n var ul = void 0;\n if (cli.classList.contains(HEADER)) {\n ul = wrapper.children[this.navIdx.length - 1];\n this.toggleAnimation(ul);\n var sli = this.getLIByClass(ul, SELECTED);\n if (sli) {\n sli.classList.remove(SELECTED);\n }\n detach(cli.parentNode);\n this.navIdx.pop();\n }\n else {\n if (!cli.classList.contains(SEPARATOR)) {\n var showSubMenu = true;\n var cul = cli.parentNode;\n var cliIdx = this.getIdx(cul, cli);\n if (!Browser.isDevice) {\n var culIdx = this.getIdx(wrapper, cul);\n if (this.navIdx[culIdx] === cliIdx) {\n showSubMenu = false;\n }\n if (culIdx !== this.navIdx.length && (e.type !== 'mouseover' || showSubMenu)) {\n var sli = this.getLIByClass(cul, SELECTED);\n if (sli) {\n sli.classList.remove(SELECTED);\n }\n this.closeMenu(culIdx + 1, e);\n }\n }\n if (showSubMenu) {\n var idx = this.navIdx.concat(cliIdx);\n var item = this.getItem(idx);\n if (item.items.length) {\n if (e.type === 'mouseover') {\n this.setLISelected(cli);\n }\n cli.setAttribute('aria-expanded', 'true');\n this.navIdx.push(cliIdx);\n this.openMenu(cli, item, null, null, e);\n }\n else {\n if (e.type !== 'mouseover') {\n this.closeMenu(null, e);\n }\n }\n }\n }\n }\n }\n else {\n if (trgt.tagName !== 'UL' || trgt.parentElement !== wrapper) {\n if (!cli || !cli.querySelector('.' + CARET)) {\n this.closeMenu(null, e);\n }\n }\n }\n }\n };\n ContextMenu.prototype.setLISelected = function (li) {\n var sli = this.getLIByClass(li.parentElement, SELECTED);\n if (sli) {\n sli.classList.remove(SELECTED);\n }\n li.classList.remove(FOCUSED);\n li.classList.add(SELECTED);\n };\n ContextMenu.prototype.getLIByClass = function (ul, classname) {\n for (var i = 0, len = ul.children.length; i < len; i++) {\n if (ul.children[i].classList.contains(classname)) {\n return ul.children[i];\n }\n }\n return null;\n };\n ContextMenu.prototype.getItem = function (navIdx) {\n navIdx = navIdx.slice();\n var idx = navIdx.pop();\n var items = this.getItems(navIdx);\n return items[idx];\n };\n ContextMenu.prototype.getItems = function (navIdx) {\n var items = this.items;\n for (var i = 0; i < navIdx.length; i++) {\n items = items[navIdx[i]].items;\n }\n return items;\n };\n ContextMenu.prototype.getIdx = function (ul, li, skipHdr) {\n if (skipHdr === void 0) { skipHdr = true; }\n var idx = Array.prototype.indexOf.call(ul.children, li);\n if (skipHdr && ul.children[0].classList.contains(HEADER)) {\n idx--;\n }\n return idx;\n };\n ContextMenu.prototype.getLI = function (elem) {\n if (elem.tagName === 'LI') {\n return elem;\n }\n return closest(elem, 'li');\n };\n /**\n * Called internally if any of the property value changed\n * @private\n * @param {ContextMenuModel} newProp\n * @param {ContextMenuModel} oldProp\n * @returns void\n */\n ContextMenu.prototype.onPropertyChanged = function (newProp, oldProp) {\n var wrapper = this.getWrapper();\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n if (oldProp.cssClass) {\n wrapper.classList.remove(oldProp.cssClass);\n }\n if (newProp.cssClass) {\n wrapper.classList.add(newProp.cssClass);\n }\n break;\n case 'enableRtl':\n wrapper.classList.toggle(RTL);\n break;\n case 'filter':\n this.closeMenu();\n this.filter = newProp.filter;\n break;\n case 'showItemOnClick':\n this.unWireEvents();\n this.showItemOnClick = newProp.showItemOnClick;\n this.wireEvents();\n break;\n case 'target':\n this.unWireEvents();\n this.target = newProp.target;\n this.wireEvents();\n break;\n case 'items':\n var idx = void 0;\n var navIdx = void 0;\n var item = void 0;\n var keys = Object.keys(newProp.items);\n for (var i = 0; i < keys.length; i++) {\n navIdx = this.getChangedItemIndex(newProp, [], Number(keys[i]));\n if (navIdx.length <= this.getWrapper().children.length) {\n idx = navIdx.pop();\n item = this.getItems(navIdx);\n this.insertAfter([item[idx]], item[idx].text);\n this.removeItem(item, navIdx, idx);\n }\n navIdx.length = 0;\n }\n break;\n }\n }\n };\n ContextMenu.prototype.getChangedItemIndex = function (newProp, index, idx) {\n index.push(idx);\n var key = Object.keys(newProp.items[idx]).pop();\n if (key === 'items') {\n var item = newProp.items[idx];\n this.getChangedItemIndex(item, index, Number(Object.keys(item.items).pop()));\n }\n else {\n if (key === 'isParentArray' && index.length > 1) {\n index.pop();\n }\n }\n return index;\n };\n ContextMenu.prototype.removeItem = function (item, navIdx, idx) {\n item.splice(idx, 1);\n var uls = this.getWrapper().children;\n if (navIdx.length < uls.length) {\n detach(uls[navIdx.length].children[idx]);\n }\n };\n /**\n * Used to unwire the bind events.\n * @private\n */\n ContextMenu.prototype.unWireEvents = function () {\n var wrapper = this.getWrapper();\n if (this.target) {\n var target = void 0;\n var touchModule = void 0;\n var targetElems = selectAll(this.target);\n for (var i = 0, len = targetElems.length; i < len; i++) {\n target = targetElems[i];\n if (Browser.isIos) {\n touchModule = getInstance(target, Touch);\n if (touchModule) {\n touchModule.destroy();\n }\n }\n else {\n EventHandler.remove(target, 'contextmenu', this.cmenuHandler);\n }\n }\n for (var _i = 0, _a = getScrollableParent(this.targetElement); _i < _a.length; _i++) {\n var parent_2 = _a[_i];\n EventHandler.remove(parent_2, 'scroll', this.scrollHandler);\n }\n }\n if (!Browser.isDevice) {\n EventHandler.remove(wrapper, 'mouseover', this.moverHandler);\n EventHandler.remove(document, 'mousedown', this.mouseDownHandler);\n }\n EventHandler.remove(document, 'click', this.delegateClickHandler);\n var keyboardModule = getInstance(wrapper, KeyboardEvents);\n if (keyboardModule) {\n keyboardModule.destroy();\n }\n };\n ContextMenu.prototype.toggleAnimation = function (ul, isMenuOpen) {\n var _this = this;\n if (isMenuOpen === void 0) { isMenuOpen = true; }\n if (this.animationSettings.effect === 'None' || !isMenuOpen) {\n this.end(ul, isMenuOpen);\n }\n else {\n this.animation.animate(ul, {\n name: this.animationSettings.effect,\n duration: this.animationSettings.duration,\n timingFunction: this.animationSettings.easing,\n begin: function (options) {\n options.element.style.display = 'block';\n options.element.style.maxHeight = options.element.getBoundingClientRect().height + 'px';\n },\n end: function (options) {\n _this.end(options.element, isMenuOpen);\n }\n });\n }\n };\n ContextMenu.prototype.end = function (ul, isMenuOpen) {\n if (isMenuOpen) {\n ul.style.display = 'block';\n ul.style.maxHeight = '';\n var item = this.navIdx.length ? this.getItem(this.navIdx) : null;\n var eventArgs = { element: ul, parentItem: item, items: item ? item.items : this.items };\n this.trigger('onOpen', eventArgs);\n if (ul.querySelector('.' + FOCUSED)) {\n ul.querySelector('.' + FOCUSED).focus();\n }\n else {\n var ele = void 0;\n ele = this.getWrapper().children[this.getIdx(this.getWrapper(), ul) - 1];\n if (ele) {\n ele.querySelector('.' + SELECTED).focus();\n }\n else {\n this.element.focus();\n }\n }\n }\n else {\n if (ul === this.element) {\n var fli = this.getLIByClass(this.element, FOCUSED);\n if (fli) {\n fli.classList.remove(FOCUSED);\n }\n var sli = this.getLIByClass(this.element, SELECTED);\n if (sli) {\n sli.classList.remove(SELECTED);\n }\n ul.style.display = 'none';\n }\n else {\n detach(ul);\n }\n }\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @returns string\n */\n ContextMenu.prototype.getPersistData = function () {\n return '';\n };\n /**\n * Get component name.\n * @returns string\n * @private\n */\n ContextMenu.prototype.getModuleName = function () {\n return 'contextmenu';\n };\n ContextMenu.prototype.getIndex = function (data, isUniqueId, items, navIdx, isCallBack) {\n if (items === void 0) { items = this.items; }\n if (navIdx === void 0) { navIdx = []; }\n if (isCallBack === void 0) { isCallBack = false; }\n var item;\n for (var i = 0, len = items.length; i < len; i++) {\n item = items[i];\n if ((isUniqueId ? item.id : item.text) === data) {\n navIdx.push(i);\n break;\n }\n else if (item.items.length) {\n navIdx = this.getIndex(data, isUniqueId, item.items, navIdx, true);\n if (navIdx[navIdx.length - 1] === -1) {\n if (i !== len - 1) {\n navIdx.pop();\n }\n }\n else {\n navIdx.unshift(i);\n break;\n }\n }\n else {\n if (i === len - 1) {\n navIdx.push(-1);\n }\n }\n }\n return (!isCallBack && navIdx[0] === -1) ? [] : navIdx;\n };\n /**\n * This method is used to enable or disable the menu items in the ContextMenu based on the items and enable argument.\n * @param items Text items that needs to be enabled/disabled.\n * @param enable Set `true`/`false` to enable/disable the list items.\n * @returns void\n */\n ContextMenu.prototype.enableItems = function (items, enable, isUniqueId) {\n if (enable === void 0) { enable = true; }\n var ul;\n var idx;\n var navIdx;\n var disabled = DISABLED;\n var wrapper = this.getWrapper();\n for (var i = 0; i < items.length; i++) {\n navIdx = this.getIndex(items[i], isUniqueId);\n idx = navIdx.pop();\n ul = wrapper.children[navIdx.length];\n if (ul) {\n if (enable) {\n if (Browser.isDevice && !ul.classList.contains('e-contextmenu')) {\n ul.children[idx + 1].classList.remove(disabled);\n }\n else {\n ul.children[idx].classList.remove(disabled);\n }\n }\n else {\n if (Browser.isDevice && !ul.classList.contains('e-contextmenu')) {\n ul.children[idx + 1].classList.add(disabled);\n }\n else {\n ul.children[idx].classList.add(disabled);\n }\n }\n }\n }\n };\n /**\n * This method is used to show the menu items in the ContextMenu based on the items text.\n * @param items Text items that needs to be shown.\n * @returns void\n */\n ContextMenu.prototype.showItems = function (items, isUniqueId) {\n this.showHideItems(items, false, isUniqueId);\n };\n /**\n * This method is used to hide the menu items in the ContextMenu based on the items text.\n * @param items Text items that needs to be hidden.\n * @returns void\n */\n ContextMenu.prototype.hideItems = function (items, isUniqueId) {\n this.showHideItems(items, true, isUniqueId);\n };\n ContextMenu.prototype.showHideItems = function (items, ishide, isUniqueId) {\n var ul;\n var index;\n var navIdx;\n var wrapper = this.getWrapper();\n for (var i = 0; i < items.length; i++) {\n navIdx = this.getIndex(items[i], isUniqueId);\n index = navIdx.pop();\n ul = wrapper.children[navIdx.length];\n if (ul) {\n if (ishide) {\n if (Browser.isDevice && !ul.classList.contains('e-contextmenu')) {\n ul.children[index + 1].classList.add(HIDE);\n }\n else {\n ul.children[index].classList.add(HIDE);\n }\n }\n else {\n if (Browser.isDevice && !ul.classList.contains('e-contextmenu')) {\n ul.children[index + 1].classList.remove(HIDE);\n }\n else {\n ul.children[index].classList.remove(HIDE);\n }\n }\n }\n }\n };\n /**\n * It is used to remove the menu items from the ContextMenu based on the items text.\n * @param items Text items that needs to be removed.\n * @returns void\n */\n ContextMenu.prototype.removeItems = function (items, isUniqueId) {\n var idx;\n var navIdx;\n var iitems;\n for (var i = 0; i < items.length; i++) {\n navIdx = this.getIndex(items[i], isUniqueId);\n idx = navIdx.pop();\n iitems = this.getItems(navIdx);\n this.removeItem(iitems, navIdx, idx);\n }\n };\n /**\n * It is used to insert the menu items after the specified menu item text.\n * @param items Items that needs to be inserted.\n * @param text Text item after that the element to be inserted.\n * @returns void\n */\n ContextMenu.prototype.insertAfter = function (items, text, isUniqueId) {\n this.insertItems(items, text, isUniqueId);\n };\n /**\n * It is used to insert the menu items before the specified menu item text.\n * @param items Items that needs to be inserted.\n * @param text Text item before that the element to be inserted.\n * @returns void\n */\n ContextMenu.prototype.insertBefore = function (items, text, isUniqueId) {\n this.insertItems(items, text, isUniqueId, false);\n };\n ContextMenu.prototype.insertItems = function (items, text, isUniqueId, isAfter) {\n if (isAfter === void 0) { isAfter = true; }\n var li;\n var idx;\n var navIdx;\n var iitems;\n var menuitem;\n var showIcon;\n for (var i = 0; i < items.length; i++) {\n navIdx = this.getIndex(text, isUniqueId);\n idx = navIdx.pop();\n iitems = this.getItems(navIdx);\n menuitem = new MenuItem(iitems[0], 'items', items[i], true);\n iitems.splice(isAfter ? idx + 1 : idx, 0, menuitem);\n var uls = this.getWrapper().children;\n if (navIdx.length < uls.length) {\n idx = isAfter ? idx + 1 : idx;\n showIcon = this.hasField(iitems, 'iconCss');\n li = this.createItems(iitems).children[idx];\n uls[navIdx.length].insertBefore(li, uls[navIdx.length].children[idx]);\n }\n }\n };\n /**\n * Destroys the widget.\n * @returns void\n */\n ContextMenu.prototype.destroy = function () {\n var _this = this;\n var wrapper = this.getWrapper();\n if (wrapper) {\n _super.prototype.destroy.call(this);\n this.unWireEvents();\n if (this.ngElement) {\n this.ngElement.style.display = 'block';\n }\n else {\n this.closeMenu();\n this.element.innerHTML = '';\n ['top', 'left', 'display', 'z-index'].forEach(function (key) {\n _this.element.style.removeProperty(key);\n });\n ['role', 'tabindex', 'class', 'style'].forEach(function (key) {\n if (['class', 'style'].indexOf(key) === -1 || !_this.element.getAttribute(key)) {\n _this.element.removeAttribute(key);\n }\n });\n wrapper.parentNode.insertBefore(this.element, wrapper);\n }\n detach(wrapper);\n }\n };\n __decorate([\n Property('')\n ], ContextMenu.prototype, \"cssClass\", void 0);\n __decorate([\n Property('')\n ], ContextMenu.prototype, \"filter\", void 0);\n __decorate([\n Property(false)\n ], ContextMenu.prototype, \"showItemOnClick\", void 0);\n __decorate([\n Collection([], MenuItem)\n ], ContextMenu.prototype, \"items\", void 0);\n __decorate([\n Property('')\n ], ContextMenu.prototype, \"target\", void 0);\n __decorate([\n Property({ duration: 400, easing: 'ease', effect: 'SlideDown' })\n ], ContextMenu.prototype, \"animationSettings\", void 0);\n __decorate([\n Event()\n ], ContextMenu.prototype, \"beforeItemRender\", void 0);\n __decorate([\n Event()\n ], ContextMenu.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], ContextMenu.prototype, \"onOpen\", void 0);\n __decorate([\n Event()\n ], ContextMenu.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], ContextMenu.prototype, \"onClose\", void 0);\n __decorate([\n Event()\n ], ContextMenu.prototype, \"select\", void 0);\n ContextMenu = __decorate([\n NotifyPropertyChanges\n ], ContextMenu);\n return ContextMenu;\n}(Component));\nexport { ContextMenu };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, Event, closest, Collection, Complex, attributes, detach } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, ChildProperty, select, isVisible } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, Browser, formatUnit, L10n } from '@syncfusion/ej2-base';\nimport { createElement as buildTag, setStyleAttribute as setStyle, isNullOrUndefined as isNOU, selectAll } from '@syncfusion/ej2-base';\nimport { EventHandler, rippleEffect, Touch, compile, Animation } from '@syncfusion/ej2-base';\nimport { Toolbar } from '../toolbar/toolbar';\nvar CLS_TAB = 'e-tab';\nvar CLS_HEADER = 'e-tab-header';\nvar CLS_CONTENT = 'e-content';\nvar CLS_NEST = 'e-nested';\nvar CLS_ITEMS = 'e-items';\nvar CLS_ITEM = 'e-item';\nvar CLS_TEMPLATE = 'e-template';\nvar CLS_RTL = 'e-rtl';\nvar CLS_ACTIVE = 'e-active';\nvar CLS_DISABLE = 'e-disable';\nvar CLS_HIDDEN = 'e-hidden';\nvar CLS_FOCUS = 'e-focused';\nvar CLS_ICONS = 'e-icons';\nvar CLS_ICON = 'e-icon';\nvar CLS_ICON_CLOSE = 'e-close-icon';\nvar CLS_CLOSE_SHOW = 'e-close-show';\nvar CLS_TEXT = 'e-tab-text';\nvar CLS_INDICATOR = 'e-indicator';\nvar CLS_WRAP = 'e-tab-wrap';\nvar CLS_TEXT_WRAP = 'e-text-wrap';\nvar CLS_TAB_ICON = 'e-tab-icon';\nvar CLS_TB_ITEMS = 'e-toolbar-items';\nvar CLS_TB_ITEM = 'e-toolbar-item';\nvar CLS_TB_POP = 'e-toolbar-pop';\nvar CLS_TB_POPUP = 'e-toolbar-popup';\nvar CLS_POPUP_OPEN = 'e-popup-open';\nvar CLS_POPUP_CLOSE = 'e-popup-close';\nvar CLS_PROGRESS = 'e-progress';\nvar CLS_IGNORE = 'e-ignore';\nvar CLS_OVERLAY = 'e-overlay';\nvar TabActionSettings = /** @class */ (function (_super) {\n __extends(TabActionSettings, _super);\n function TabActionSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('SlideLeftIn')\n ], TabActionSettings.prototype, \"effect\", void 0);\n __decorate([\n Property(600)\n ], TabActionSettings.prototype, \"duration\", void 0);\n __decorate([\n Property('ease')\n ], TabActionSettings.prototype, \"easing\", void 0);\n return TabActionSettings;\n}(ChildProperty));\nexport { TabActionSettings };\nvar TabAnimationSettings = /** @class */ (function (_super) {\n __extends(TabAnimationSettings, _super);\n function TabAnimationSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({ effect: 'SlideLeftIn', duration: 600, easing: 'ease' }, TabActionSettings)\n ], TabAnimationSettings.prototype, \"previous\", void 0);\n __decorate([\n Complex({ effect: 'SlideRightIn', duration: 600, easing: 'ease' }, TabActionSettings)\n ], TabAnimationSettings.prototype, \"next\", void 0);\n return TabAnimationSettings;\n}(ChildProperty));\nexport { TabAnimationSettings };\n/**\n * Objects used for configuring the Tab item header properties.\n */\nvar Header = /** @class */ (function (_super) {\n __extends(Header, _super);\n function Header() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Header.prototype, \"text\", void 0);\n __decorate([\n Property('')\n ], Header.prototype, \"iconCss\", void 0);\n __decorate([\n Property('left')\n ], Header.prototype, \"iconPosition\", void 0);\n return Header;\n}(ChildProperty));\nexport { Header };\n/**\n * An array of object that is used to configure the Tab.\n */\nvar TabItem = /** @class */ (function (_super) {\n __extends(TabItem, _super);\n function TabItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({}, Header)\n ], TabItem.prototype, \"header\", void 0);\n __decorate([\n Property('')\n ], TabItem.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], TabItem.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], TabItem.prototype, \"disabled\", void 0);\n return TabItem;\n}(ChildProperty));\nexport { TabItem };\n/**\n * Tab is a content panel to show multiple contents in a single space, one at a time.\n * Each Tab item has an associated content, that will be displayed based on the active Tab header item.\n * ```html\n *
    \n * \n * ```\n */\nvar Tab = /** @class */ (function (_super) {\n __extends(Tab, _super);\n /**\n * Initializes a new instance of the Tab class.\n * @param options - Specifies Tab model properties as options.\n * @param element - Specifies the element that is rendered as a Tab.\n */\n function Tab(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.prevIndex = 0;\n _this.show = { name: 'SlideDown', duration: 100 };\n _this.hide = { name: 'SlideUp', duration: 100 };\n _this.animateOptions = {};\n _this.animObj = new Animation(_this.animateOptions);\n _this.maxHeight = 0;\n _this.title = 'Close';\n /**\n * Contains the keyboard configuration of the Tab.\n */\n _this.keyConfigs = {\n tab: 'tab',\n home: 'home',\n end: 'end',\n enter: 'enter',\n space: 'space',\n delete: 'delete',\n moveLeft: 'leftarrow',\n moveRight: 'rightarrow',\n moveUp: 'uparrow',\n moveDown: 'downarrow'\n };\n return _this;\n }\n /**\n * Removes the component from the DOM and detaches all its related event handlers, attributes and classes.\n * @returns void\n */\n Tab.prototype.destroy = function () {\n var _this = this;\n if (!isNOU(this.tbObj)) {\n this.tbObj.destroy();\n }\n this.unWireEvents();\n ['role', 'aria-disabled', 'aria-activedescendant', 'tabindex', 'aria-orientation'].forEach(function (val) {\n _this.element.removeAttribute(val);\n });\n this.expTemplateContent();\n if (!this.isTemplate) {\n this.element.innerHTML = '';\n }\n else {\n var cntEle = select('.' + CLS_TAB + ' > .' + CLS_CONTENT, this.element);\n this.element.classList.remove(CLS_TEMPLATE);\n if (!isNOU(cntEle)) {\n cntEle.innerHTML = this.cnt;\n }\n }\n _super.prototype.destroy.call(this);\n this.trigger('destroyed');\n };\n /**\n * Initialize component\n * @private\n */\n Tab.prototype.preRender = function () {\n var nested = closest(this.element, '.' + CLS_CONTENT);\n this.isNested = false;\n this.isPopup = false;\n this.initRender = true;\n this.isSwipeed = false;\n this.templateEle = [];\n if (!isNOU(nested)) {\n nested.parentElement.classList.add(CLS_NEST);\n this.isNested = true;\n }\n var name = Browser.info.name;\n var css = (name === 'msie') ? 'e-ie' : (name === 'edge') ? 'e-edge' : (name === 'safari') ? 'e-safari' : '';\n setStyle(this.element, { 'width': formatUnit(this.width), 'height': formatUnit(this.height) });\n this.setCssClass(this.element, this.cssClass, true);\n attributes(this.element, { role: 'tablist', 'aria-disabled': 'false', 'aria-activedescendant': '' });\n this.setCssClass(this.element, css, true);\n };\n /**\n * Initialize the component rendering\n * @private\n */\n Tab.prototype.render = function () {\n this.renderContainer();\n this.wireEvents();\n this.initRender = false;\n };\n Tab.prototype.renderContainer = function () {\n var ele = this.element;\n if (this.items.length > 0 && ele.children.length === 0) {\n ele.appendChild(buildTag('div', { className: CLS_CONTENT }));\n this.setOrientation(this.headerPlacement, buildTag('div', { className: CLS_HEADER }));\n this.isTemplate = false;\n }\n else if (this.element.children.length > 0) {\n this.isTemplate = true;\n ele.classList.add(CLS_TEMPLATE);\n var header = ele.querySelector('.' + CLS_HEADER);\n if (header && this.headerPlacement === 'Bottom') {\n this.setOrientation(this.headerPlacement, header);\n }\n }\n if (!isNOU(select('.' + CLS_HEADER, this.element)) && !isNOU(select('.' + CLS_CONTENT, this.element))) {\n this.renderHeader();\n this.tbItems = select('.' + CLS_HEADER + ' .' + CLS_TB_ITEMS, this.element);\n if (!isNOU(this.tbItems)) {\n rippleEffect(this.tbItems, { selector: '.e-tab-wrap' });\n }\n this.renderContent();\n if (selectAll('.' + CLS_TB_ITEM, this.element).length > 0) {\n this.tbItems = select('.' + CLS_HEADER + ' .' + CLS_TB_ITEMS, this.element);\n this.bdrLine = buildTag('div', { className: CLS_INDICATOR + ' ' + CLS_HIDDEN + ' ' + CLS_IGNORE });\n var scrCnt = select('.e-hscroll-content', this.tbItems);\n if (!isNOU(scrCnt)) {\n scrCnt.insertBefore(this.bdrLine, scrCnt.firstChild);\n }\n else {\n this.tbItems.insertBefore(this.bdrLine, this.tbItems.firstChild);\n }\n this.setContentHeight(true);\n this.select(this.selectedItem);\n }\n this.setRTL(this.enableRtl);\n }\n };\n Tab.prototype.renderHeader = function () {\n var _this = this;\n var tabItems = [];\n this.hdrEle = select('.' + CLS_HEADER, this.element);\n this.btnCls = buildTag('span', { className: CLS_ICONS + ' ' + CLS_ICON_CLOSE, attrs: { title: this.title } }).outerHTML;\n if (!this.isTemplate) {\n tabItems = this.parseObject(this.items, 0);\n }\n else {\n var count = this.hdrEle.children.length;\n var hdrItems = [];\n for (var i = 0; i < count; i++) {\n hdrItems.push(this.hdrEle.children.item(i).innerHTML);\n }\n if (count > 0) {\n this.hdrEle.innerHTML = '';\n this.hdrEle.appendChild(buildTag('div', { className: CLS_ITEMS }));\n hdrItems.forEach(function (item, index) {\n var attr = {\n className: CLS_ITEM, id: CLS_ITEM + '_' + index,\n attrs: { role: 'tab', 'aria-controls': CLS_CONTENT + '_' + index, 'aria-selected': 'false' }\n };\n var txt = buildTag('span', { className: CLS_TEXT, innerHTML: item, attrs: { 'role': 'presentation' } }).outerHTML;\n var cont = buildTag('div', { className: CLS_TEXT_WRAP, innerHTML: txt + _this.btnCls }).outerHTML;\n var wrap = buildTag('div', { className: CLS_WRAP, innerHTML: cont, attrs: { tabIndex: '-1' } });\n select('.' + CLS_ITEMS, _this.element).appendChild(buildTag('div', attr));\n selectAll('.' + CLS_ITEM, _this.element)[index].appendChild(wrap);\n });\n }\n }\n this.tbObj = new Toolbar({\n width: '100%',\n overflowMode: this.overflowMode,\n items: (tabItems.length !== 0) ? tabItems : [],\n clicked: this.clickHandler.bind(this)\n });\n this.tbObj.appendTo(this.hdrEle);\n attributes(this.element, { 'aria-orientation': 'horizontal' });\n this.setCloseButton(this.showCloseButton);\n this.setProperties({ headerPlacement: (this.element.children.item(0).classList.contains(CLS_HEADER)) ? 'Top' : 'Bottom' }, true);\n };\n Tab.prototype.renderContent = function () {\n this.cntEle = select('.' + CLS_CONTENT, this.element);\n var hdrItem = selectAll('.' + CLS_TB_ITEM, this.element);\n if (this.isTemplate) {\n this.cnt = (this.cntEle.children.length > 0) ? this.cntEle.innerHTML : '';\n var contents = this.cntEle.children;\n for (var i = 0; i < hdrItem.length; i++) {\n if (contents.length - 1 >= i) {\n contents.item(i).className += CLS_ITEM;\n attributes(contents.item(i), { 'role': 'tabpanel', 'aria-labelledby': CLS_ITEM + '_' + i });\n contents.item(i).id = CLS_CONTENT + '_' + i;\n }\n }\n }\n };\n Tab.prototype.parseObject = function (items, index) {\n var _this = this;\n var inHTML = '';\n var tbCount = selectAll('.' + CLS_TB_ITEM, this.element).length;\n var tItems = [];\n items.forEach(function (item, i) {\n var pos = (isNOU(item.header.iconPosition)) ? '' : item.header.iconPosition;\n var css = (isNOU(item.header.iconCss)) ? '' : item.header.iconCss;\n var txt = item.header.text;\n var id = ((tbCount === 0) ? i : (_this.isReplace === true) ? (i + index) : tbCount + i);\n var disabled = (item.disabled) ? ' ' + CLS_DISABLE + ' ' + CLS_OVERLAY : '';\n var tHtml = ((txt instanceof Object) ? txt.outerHTML : txt);\n var txtEmpty = (!isNOU(tHtml) && tHtml !== '');\n var tEle = (txtEmpty) ? buildTag('div', {\n className: CLS_TEXT, innerHTML: tHtml, attrs: { 'role': 'presentation' }\n }).outerHTML : '';\n var icon = buildTag('span', {\n className: CLS_ICONS + ' ' + CLS_TAB_ICON + ' ' + CLS_ICON + '-' + pos + ' ' + css\n }).outerHTML;\n if ((txt === '' || txt === undefined) && css === '') {\n return;\n }\n else {\n if ((txt !== '' && txt !== undefined) && css !== '') {\n inHTML = (pos === 'left' || pos === 'top') ? icon + '' + tEle : tEle + '' + icon;\n }\n else {\n inHTML = (css === '') ? tEle : icon;\n }\n }\n var wrapAttrs = (item.disabled) ? {} : { tabIndex: '-1' };\n var tCont = buildTag('div', { className: CLS_TEXT_WRAP, innerHTML: inHTML + '' + _this.btnCls }).outerHTML;\n var wrap = buildTag('div', { className: CLS_WRAP, innerHTML: tCont, attrs: wrapAttrs });\n var attrObj = {\n id: CLS_ITEM + '_' + id, role: 'tab', 'aria-selected': 'false'\n };\n var tItem = { htmlAttributes: attrObj, template: wrap.outerHTML };\n tItem.cssClass = item.cssClass + ' ' + disabled + ' ' + ((css !== '') ? 'e-i' + pos : '') + ' ' + ((!txtEmpty) ? CLS_ICON : '');\n if (pos === 'top' || pos === 'bottom') {\n _this.element.classList.add('e-vertical-icon');\n }\n tItems.push(tItem);\n });\n return tItems;\n };\n Tab.prototype.removeActiveClass = function (id) {\n var hdrActEle = selectAll(':root .' + CLS_HEADER + ' .' + CLS_TB_ITEM + '.' + CLS_ACTIVE, this.element)[0];\n if (this.headerPlacement === 'Bottom') {\n hdrActEle = selectAll(':root .' + CLS_HEADER + ' .' + CLS_TB_ITEM + '.' + CLS_ACTIVE, this.element.children[1])[0];\n }\n if (!isNOU(hdrActEle)) {\n hdrActEle.classList.remove(CLS_ACTIVE);\n var no = this.extIndex(hdrActEle.id);\n var trg = this.findEle(select('.' + CLS_CONTENT, this.element).children, CLS_CONTENT + '_' + no);\n }\n };\n Tab.prototype.checkPopupOverflow = function (ele) {\n this.tbPop = select('.' + CLS_TB_POP, this.element);\n var popIcon = select('.e-hor-nav', this.element);\n var tbrItems = select('.' + CLS_TB_ITEMS, this.element);\n if ((this.enableRtl && ((popIcon.offsetLeft + popIcon.offsetWidth) > tbrItems.offsetLeft))\n || (!this.enableRtl && popIcon.offsetLeft < tbrItems.offsetWidth)) {\n ele.classList.add(CLS_TB_POPUP);\n this.tbPop.insertBefore(ele.cloneNode(true), selectAll('.' + CLS_TB_POPUP, this.tbPop)[0]);\n ele.outerHTML = '';\n }\n return true;\n };\n Tab.prototype.popupHandler = function (target) {\n var ripEle = target.querySelector('.e-ripple-element');\n if (!isNOU(ripEle)) {\n ripEle.outerHTML = '';\n target.querySelector('.' + CLS_WRAP).classList.remove('e-ripple');\n }\n this.tbItem = selectAll('.' + CLS_TB_ITEMS + ' .' + CLS_TB_ITEM, this.hdrEle);\n var lastChild = this.tbItem[this.tbItem.length - 1];\n if (this.tbItem.length !== 0) {\n target.classList.remove(CLS_TB_POPUP);\n this.tbItems.appendChild(target.cloneNode(true));\n this.actEleId = target.id;\n target.outerHTML = '';\n if (this.checkPopupOverflow(lastChild)) {\n var prevEle = this.tbItems.lastChild.previousElementSibling;\n this.checkPopupOverflow(prevEle);\n }\n this.isPopup = true;\n }\n return selectAll('.' + CLS_TB_ITEM, this.tbItems).length - 1;\n };\n Tab.prototype.setCloseButton = function (val) {\n var trg = select('.' + CLS_HEADER, this.element);\n (val === true) ? trg.classList.add(CLS_CLOSE_SHOW) : trg.classList.remove(CLS_CLOSE_SHOW);\n this.tbObj.refreshOverflow();\n this.refreshActElePosition();\n };\n Tab.prototype.prevCtnAnimation = function (prev, current) {\n var animation;\n var checkRTL = this.enableRtl || this.element.classList.contains(CLS_RTL);\n if (this.isPopup || prev <= current) {\n if (this.animation.previous.effect === 'SlideLeftIn') {\n animation = { name: 'SlideLeftOut',\n duration: this.animation.previous.duration, timingFunction: this.animation.previous.easing };\n }\n else {\n animation = null;\n }\n }\n else {\n if (this.animation.next.effect === 'SlideRightIn') {\n animation = { name: 'SlideRightOut',\n duration: this.animation.next.duration, timingFunction: this.animation.next.easing };\n }\n else {\n animation = null;\n }\n }\n return animation;\n };\n Tab.prototype.triggerPrevAnimation = function (oldCnt, prevIndex) {\n var _this = this;\n var animateObj = this.prevCtnAnimation(prevIndex, this.selectedItem);\n if (!isNOU(animateObj)) {\n animateObj.begin = function () {\n setStyle(oldCnt, { 'position': 'absolute' });\n oldCnt.classList.add(CLS_PROGRESS);\n oldCnt.classList.add('e-view');\n };\n animateObj.end = function () {\n oldCnt.style.display = 'none';\n oldCnt.classList.remove(CLS_ACTIVE);\n oldCnt.classList.remove(CLS_PROGRESS);\n oldCnt.classList.remove('e-view');\n setStyle(oldCnt, { 'display': '', 'position': '' });\n if (oldCnt.childElementCount === 0 && !_this.isTemplate) {\n detach(oldCnt);\n }\n };\n new Animation(animateObj).animate(oldCnt);\n }\n else {\n oldCnt.classList.remove(CLS_ACTIVE);\n }\n };\n Tab.prototype.triggerAnimation = function (id, value) {\n var _this = this;\n var prevIndex = this.prevIndex;\n var itemCollection = [].slice.call(this.element.querySelector('.' + CLS_CONTENT).children);\n var oldCnt;\n itemCollection.forEach(function (item) {\n if (item.id === _this.prevActiveEle) {\n oldCnt = item;\n }\n });\n var prevEle = this.tbItem[prevIndex];\n var no = this.extIndex(this.tbItem[this.selectedItem].id);\n var newCnt = this.getTrgContent(this.cntEle, no);\n if (isNOU(oldCnt) && !isNOU(prevEle)) {\n var idNo = this.extIndex(prevEle.id);\n oldCnt = this.getTrgContent(this.cntEle, idNo);\n }\n if (this.initRender || value === false || this.animation === {} || isNOU(this.animation)) {\n if (oldCnt && oldCnt !== newCnt) {\n oldCnt.classList.remove(CLS_ACTIVE);\n }\n return;\n }\n var cnt = select('.' + CLS_CONTENT, this.element);\n var animateObj;\n if (this.prevIndex > this.selectedItem && !this.isPopup) {\n var openEff = this.animation.previous.effect;\n animateObj = {\n name: ((openEff === 'None') ? '' : ((openEff !== 'SlideLeftIn') ? openEff : 'SlideLeftIn')),\n duration: this.animation.previous.duration,\n timingFunction: this.animation.previous.easing\n };\n }\n else if (this.isPopup || this.prevIndex < this.selectedItem || this.prevIndex === this.selectedItem) {\n var clsEff = this.animation.next.effect;\n animateObj = {\n name: ((clsEff === 'None') ? '' : ((clsEff !== 'SlideRightIn') ? clsEff : 'SlideRightIn')),\n duration: this.animation.next.duration,\n timingFunction: this.animation.next.easing\n };\n }\n animateObj.progress = function () {\n cnt.classList.add(CLS_PROGRESS);\n _this.setActiveBorder();\n };\n animateObj.end = function () {\n cnt.classList.remove(CLS_PROGRESS);\n newCnt.classList.add(CLS_ACTIVE);\n };\n if (!this.initRender) {\n this.triggerPrevAnimation(oldCnt, prevIndex);\n }\n this.prevActiveEle = newCnt.id;\n this.isPopup = false;\n if (animateObj.name === '') {\n newCnt.classList.add(CLS_ACTIVE);\n }\n else {\n new Animation(animateObj).animate(newCnt);\n }\n };\n Tab.prototype.keyPressed = function (trg) {\n var trgParent = closest(trg, '.' + CLS_HEADER + ' .' + CLS_TB_ITEM);\n var trgIndex = this.getEleIndex(trgParent);\n if (!isNOU(this.popEle) && trg.classList.contains('e-hor-nav')) {\n (this.popEle.classList.contains(CLS_POPUP_OPEN)) ? this.popObj.hide(this.hide) : this.popObj.show(this.show);\n }\n else if (trg.classList.contains('e-scroll-nav')) {\n trg.click();\n }\n else {\n if (!isNOU(trgParent) && trgParent.classList.contains(CLS_ACTIVE) === false) {\n this.select(trgIndex);\n if (!isNOU(this.popEle)) {\n this.popObj.hide(this.hide);\n }\n }\n }\n };\n Tab.prototype.getEleIndex = function (item) {\n return Array.prototype.indexOf.call(selectAll('.' + CLS_HEADER + ' .' + CLS_TB_ITEM, this.element), item);\n };\n Tab.prototype.extIndex = function (id) {\n return id.replace(CLS_ITEM + '_', '');\n };\n Tab.prototype.expTemplateContent = function () {\n var _this = this;\n this.templateEle.forEach(function (eleStr) {\n if (!isNOU(_this.element.querySelector(eleStr))) {\n document.body.appendChild(_this.element.querySelector(eleStr)).style.display = 'none';\n }\n });\n };\n Tab.prototype.templateCompile = function (ele, cnt) {\n var tempEle = buildTag('div');\n var templateFn = compile(cnt);\n var templateFUN = templateFn();\n if (!isNOU(templateFn) && templateFUN.length > 0) {\n [].slice.call(templateFUN).forEach(function (el) {\n tempEle.appendChild(el);\n });\n ele.appendChild(tempEle);\n }\n };\n Tab.prototype.getContent = function (ele, index, callType) {\n var eleStr;\n var cnt = this.items[Number(index)].content;\n if (typeof cnt === 'string' || isNOU(cnt.innerHTML)) {\n if (cnt[0] === '.' || cnt[0] === '#') {\n if (document.querySelectorAll(cnt).length) {\n var eleVal = document.querySelector(cnt);\n eleStr = eleVal.outerHTML.trim();\n if (callType === 'clone') {\n ele.appendChild(eleVal.cloneNode(true));\n }\n else {\n ele.appendChild(eleVal);\n eleVal.style.display = '';\n }\n }\n else {\n this.templateCompile(ele, cnt);\n }\n }\n else {\n this.templateCompile(ele, cnt);\n }\n }\n else {\n ele.appendChild(cnt);\n }\n if (!isNOU(eleStr)) {\n if (this.templateEle.indexOf(cnt.toString()) === -1) {\n this.templateEle.push(cnt.toString());\n }\n }\n };\n Tab.prototype.getTrgContent = function (cntEle, no) {\n var ele;\n if (this.element.classList.contains(CLS_NEST)) {\n ele = select('.' + CLS_NEST + '> .' + CLS_CONTENT + ' > #' + CLS_CONTENT + '_' + no, this.element);\n }\n else {\n ele = this.findEle(cntEle.children, CLS_CONTENT + '_' + no);\n }\n return ele;\n };\n Tab.prototype.findEle = function (items, key) {\n var ele;\n for (var i = 0; i < items.length; i++) {\n if (items[i].id === key) {\n ele = items[i];\n break;\n }\n }\n return ele;\n };\n Tab.prototype.setOrientation = function (place, ele) {\n (place === 'Bottom') ? this.element.appendChild(ele) : this.element.insertBefore(ele, select('.' + CLS_CONTENT, this.element));\n };\n Tab.prototype.setCssClass = function (ele, cls, val) {\n if (cls === '') {\n return;\n }\n var list = cls.split(' ');\n for (var i = 0; i < list.length; i++) {\n if (val) {\n ele.classList.add(list[i]);\n }\n else {\n ele.classList.remove(list[i]);\n }\n }\n };\n Tab.prototype.setContentHeight = function (val) {\n if (isNOU(this.cntEle)) {\n return;\n }\n var height;\n var hdrEle = select('.' + CLS_HEADER, this.element);\n if (this.heightAdjustMode === 'None') {\n if (this.height === 'auto') {\n return;\n }\n else {\n setStyle(this.cntEle, { 'height': (this.element.offsetHeight - hdrEle.offsetHeight) + 'px' });\n }\n }\n else if (this.heightAdjustMode === 'Fill') {\n setStyle(this.element, { 'height': '100%' });\n setStyle(this.cntEle, { 'height': 'auto' });\n }\n else if (this.heightAdjustMode === 'Auto') {\n var cnt = selectAll('.' + CLS_CONTENT + ' > .' + CLS_ITEM, this.element);\n if (this.isTemplate === true) {\n for (var i = 0; i < cnt.length; i++) {\n cnt[i].setAttribute('style', 'display:block; visibility: visible');\n this.maxHeight = Math.max(this.maxHeight, this.getHeight(cnt[i]));\n cnt[i].style.removeProperty('display');\n cnt[i].style.removeProperty('visibility');\n }\n }\n else {\n this.cntEle = select('.' + CLS_CONTENT, this.element);\n if (val === true) {\n this.cntEle.appendChild(buildTag('div', {\n id: (CLS_CONTENT + '_' + 0), className: CLS_ITEM + ' ' + CLS_ACTIVE,\n attrs: { 'role': 'tabpanel', 'aria-labelledby': CLS_ITEM + '_' + 0 }\n }));\n }\n var ele = this.cntEle.children.item(0);\n for (var i = 0; i < this.items.length; i++) {\n this.getContent(ele, i, 'clone');\n this.maxHeight = Math.max(this.maxHeight, this.getHeight(ele));\n ele.innerHTML = '';\n }\n this.templateEle = [];\n this.getContent(ele, 0, 'render');\n ele.classList.remove(CLS_ACTIVE);\n }\n setStyle(this.cntEle, { 'height': this.maxHeight + 'px' });\n }\n else {\n setStyle(this.cntEle, { 'height': 'auto' });\n }\n };\n Tab.prototype.getHeight = function (ele) {\n var cs = window.getComputedStyle(ele);\n return ele.offsetHeight + parseFloat(cs.getPropertyValue('padding-top')) + parseFloat(cs.getPropertyValue('padding-bottom')) +\n parseFloat(cs.getPropertyValue('margin-top')) + parseFloat(cs.getPropertyValue('margin-bottom'));\n };\n Tab.prototype.setActiveBorder = function () {\n var trg = select('.' + CLS_TB_ITEM + '.' + CLS_ACTIVE, this.element);\n if (this.headerPlacement === 'Bottom') {\n trg = select('.' + CLS_TB_ITEM + '.' + CLS_ACTIVE, this.element.children[1]);\n }\n if (trg === null) {\n return;\n }\n var root = closest(trg, '.' + CLS_TAB);\n if (this.element !== root) {\n return;\n }\n var hsCnt = select('.' + CLS_HEADER + ' .' + CLS_TB_ITEMS + ' .e-hscroll-content', this.element.children[0]);\n this.tbItems = select('.' + CLS_HEADER + ' .' + CLS_TB_ITEMS, this.element);\n var bar = select('.' + CLS_HEADER + ' .' + CLS_INDICATOR, this.element);\n if (this.headerPlacement === 'Bottom') {\n hsCnt = select('.' + CLS_HEADER + ' .' + CLS_TB_ITEMS + ' .e-hscroll-content', this.element.children[1]);\n }\n var tbWidth = (isNOU(hsCnt)) ? this.tbItems.offsetWidth : hsCnt.offsetWidth;\n if (tbWidth !== 0) {\n setStyle(bar, { 'left': trg.offsetLeft + 'px', 'right': tbWidth - (trg.offsetLeft + trg.offsetWidth) + 'px' });\n }\n else {\n setStyle(bar, { 'left': 'auto', 'right': 'auto' });\n }\n if (!isNOU(this.bdrLine)) {\n this.bdrLine.classList.remove(CLS_HIDDEN);\n }\n };\n Tab.prototype.setActive = function (value) {\n this.tbItem = selectAll('.' + CLS_HEADER + ' .' + CLS_TB_ITEM, this.element);\n var trg = this.tbItem[value];\n if (value >= 0) {\n this.setProperties({ selectedItem: value }, true);\n }\n if (value < 0 || isNaN(value) || this.tbItem.length === 0) {\n return;\n }\n if (trg.classList.contains(CLS_ACTIVE)) {\n this.setActiveBorder();\n return;\n }\n if (!this.isTemplate) {\n var prev = this.tbItem[this.prevIndex];\n if (!isNOU(prev)) {\n prev.removeAttribute('aria-controls');\n }\n attributes(trg, { 'aria-controls': CLS_CONTENT + '_' + value });\n }\n var id = trg.id;\n this.removeActiveClass(id);\n trg.classList.add(CLS_ACTIVE);\n trg.setAttribute('aria-selected', 'true');\n var no = Number(this.extIndex(id));\n attributes(this.element, { 'aria-activedescendant': id });\n if (this.isTemplate) {\n if (select('.' + CLS_CONTENT, this.element).children.length > 0) {\n var trg_1 = this.findEle(select('.' + CLS_CONTENT, this.element).children, CLS_CONTENT + '_' + no);\n if (!isNOU(trg_1)) {\n trg_1.classList.add(CLS_ACTIVE);\n }\n this.triggerAnimation(id, this.enableAnimation);\n }\n }\n else {\n this.cntEle = select('.' + CLS_TAB + ' > .' + CLS_CONTENT, this.element);\n var item = this.getTrgContent(this.cntEle, this.extIndex(id));\n if (isNOU(item)) {\n this.cntEle.appendChild(buildTag('div', {\n id: CLS_CONTENT + '_' + this.extIndex(id), className: CLS_ITEM + ' ' + CLS_ACTIVE,\n attrs: { role: 'tabpanel', 'aria-labelledby': CLS_ITEM + '_' + this.extIndex(id) }\n }));\n var eleTrg = this.getTrgContent(this.cntEle, this.extIndex(id));\n this.getContent(eleTrg, Number(this.extIndex(id)), 'render');\n }\n else {\n item.classList.add(CLS_ACTIVE);\n }\n this.triggerAnimation(id, this.enableAnimation);\n }\n this.setActiveBorder();\n var curActItem = select('.' + CLS_HEADER + ' #' + id, this.element);\n this.refreshItemVisibility(curActItem);\n curActItem.firstChild.focus();\n var eventArg = {\n previousItem: this.prevItem,\n previousIndex: this.prevIndex,\n selectedItem: trg,\n selectedIndex: value,\n isSwiped: this.isSwipeed\n };\n this.trigger('selected', eventArg);\n };\n Tab.prototype.setItems = function (items) {\n this.isReplace = true;\n this.tbItems = select('.' + CLS_HEADER + ' .' + CLS_TB_ITEMS, this.element);\n this.tbObj.items = this.parseObject(items, 0);\n this.tbObj.dataBind();\n this.isReplace = false;\n };\n Tab.prototype.setRTL = function (value) {\n this.tbObj.enableRtl = value;\n this.tbObj.dataBind();\n this.setCssClass(this.element, CLS_RTL, value);\n this.refreshActiveBorder();\n };\n Tab.prototype.refreshActiveBorder = function () {\n if (!isNOU(this.bdrLine)) {\n this.bdrLine.classList.add(CLS_HIDDEN);\n }\n this.setActiveBorder();\n };\n Tab.prototype.wireEvents = function () {\n window.addEventListener('resize', this.refreshActElePosition.bind(this));\n EventHandler.add(this.element, 'mouseover', this.hoverHandler, this);\n EventHandler.add(this.element, 'keydown', this.spaceKeyDown, this);\n if (!isNOU(this.cntEle)) {\n this.touchModule = new Touch(this.cntEle, { swipe: this.swipeHandler.bind(this) });\n }\n this.keyModule = new KeyboardEvents(this.element, { keyAction: this.keyHandler.bind(this), keyConfigs: this.keyConfigs });\n this.tabKeyModule = new KeyboardEvents(this.element, {\n keyAction: this.keyHandler.bind(this),\n keyConfigs: { openPopup: 'shift+f10', tab: 'tab', shiftTab: 'shift+tab' },\n eventName: 'keydown'\n });\n };\n Tab.prototype.unWireEvents = function () {\n this.keyModule.destroy();\n this.tabKeyModule.destroy();\n if (!isNOU(this.cntEle)) {\n this.touchModule.destroy();\n }\n window.removeEventListener('resize', this.refreshActElePosition.bind(this));\n this.element.removeEventListener('mouseover', this.hoverHandler.bind(this));\n };\n Tab.prototype.clickHandler = function (args) {\n this.element.classList.remove(CLS_FOCUS);\n var trg = args.originalEvent.target;\n var trgParent = closest(trg, '.' + CLS_TB_ITEM);\n var trgIndex = this.getEleIndex(trgParent);\n if (trg.classList.contains(CLS_ICON_CLOSE)) {\n this.removeTab(trgIndex);\n }\n else {\n this.isPopup = false;\n if (!isNOU(trgParent) && trgIndex !== this.selectedItem) {\n this.select(trgIndex);\n }\n }\n };\n Tab.prototype.swipeHandler = function (e) {\n if (e.velocity < 3 && isNOU(e.originalEvent.changedTouches)) {\n return;\n }\n this.isSwipeed = true;\n if (e.swipeDirection === 'Right' && this.selectedItem !== 0) {\n for (var k = this.selectedItem - 1; k >= 0; k--) {\n if (!this.tbItem[k].classList.contains('e-hidden')) {\n this.select(k);\n break;\n }\n }\n }\n else if (e.swipeDirection === 'Left' && (this.selectedItem !== selectAll('.' + CLS_TB_ITEM, this.element).length - 1)) {\n for (var i = this.selectedItem + 1; i < this.tbItem.length; i++) {\n if (!this.tbItem[i].classList.contains('e-hidden')) {\n this.select(i);\n break;\n }\n }\n }\n this.isSwipeed = false;\n };\n Tab.prototype.spaceKeyDown = function (e) {\n if ((e.keyCode === 32 && e.which === 32) || (e.keyCode === 35 && e.which === 35)) {\n var clstHead = closest(e.target, '.' + CLS_HEADER);\n if (!isNOU(clstHead)) {\n e.preventDefault();\n }\n }\n };\n Tab.prototype.keyHandler = function (e) {\n if (this.element.classList.contains(CLS_DISABLE)) {\n return;\n }\n this.element.classList.add(CLS_FOCUS);\n var trg = e.target;\n var actEle = select('.' + CLS_HEADER + ' .' + CLS_ACTIVE, this.element);\n var tabItem = selectAll('.' + CLS_TB_ITEM + ':not(.' + CLS_TB_POPUP + ')', this.element);\n this.popEle = select('.' + CLS_TB_POP, this.element);\n if (!isNOU(this.popEle)) {\n this.popObj = this.popEle.ej2_instances[0];\n }\n switch (e.action) {\n case 'space':\n case 'enter':\n if (trg.parentElement.classList.contains(CLS_DISABLE)) {\n return;\n }\n if (e.action === 'enter' && trg.classList.contains('e-hor-nav')) {\n break;\n }\n this.keyPressed(trg);\n break;\n case 'tab':\n case 'shiftTab':\n if (trg.classList.contains(CLS_WRAP)\n && closest(trg, '.' + CLS_TB_ITEM).classList.contains(CLS_ACTIVE) === false) {\n trg.setAttribute('tabindex', '-1');\n }\n if (this.popObj && isVisible(this.popObj.element)) {\n this.popObj.hide(this.hide);\n }\n actEle.children.item(0).setAttribute('tabindex', '0');\n break;\n case 'moveLeft':\n case 'moveRight':\n var item = closest(document.activeElement, '.' + CLS_TB_ITEM);\n if (!isNOU(item)) {\n this.refreshItemVisibility(item);\n }\n break;\n case 'openPopup':\n e.preventDefault();\n if (!isNOU(this.popEle) && this.popEle.classList.contains(CLS_POPUP_CLOSE)) {\n this.popObj.show(this.show);\n }\n break;\n case 'delete':\n var trgParent = closest(trg, '.' + CLS_TB_ITEM);\n if (this.showCloseButton === true && !isNOU(trgParent)) {\n var nxtSib = trgParent.nextSibling;\n if (!isNOU(nxtSib) && nxtSib.classList.contains(CLS_TB_ITEM)) {\n nxtSib.firstChild.focus();\n }\n this.removeTab(this.getEleIndex(trgParent));\n }\n this.setActiveBorder();\n break;\n }\n };\n Tab.prototype.refreshActElePosition = function () {\n var activeEle = select('.' + CLS_TB_ITEM + '.' + CLS_TB_POPUP + '.' + CLS_ACTIVE, this.element);\n if (!isNOU(activeEle)) {\n this.select(this.getEleIndex(activeEle));\n }\n this.refreshActiveBorder();\n };\n Tab.prototype.refreshItemVisibility = function (target) {\n var scrCnt = select('.e-hscroll-content', this.tbItems);\n if (!isNOU(scrCnt)) {\n var scrBar = select('.e-hscroll-bar', this.tbItems);\n var scrStart = scrBar.scrollLeft;\n var scrEnd = scrStart + scrBar.offsetWidth;\n var eleStart = target.offsetLeft;\n var eleWidth = target.offsetWidth;\n var eleEnd = target.offsetLeft + target.offsetWidth;\n if ((scrStart < eleStart) && (scrEnd < eleEnd)) {\n var eleViewRange = scrEnd - eleStart;\n scrBar.scrollLeft = scrStart + (eleWidth - eleViewRange);\n }\n else {\n if ((scrStart > eleStart) && (scrEnd > eleEnd)) {\n var eleViewRange = eleEnd - scrStart;\n scrBar.scrollLeft = scrStart - (eleWidth - eleViewRange);\n }\n }\n }\n else {\n return;\n }\n };\n Tab.prototype.hoverHandler = function (e) {\n var trg = e.target;\n if (!isNOU(trg.classList) && trg.classList.contains(CLS_ICON_CLOSE)) {\n trg.setAttribute('title', new L10n('tab', { closeButtonTitle: this.title }, this.locale).getConstant('closeButtonTitle'));\n }\n };\n /**\n * Enables or disables the specified Tab item. On passing value as `false`, the item will be disabled.\n * @param {number} index - Index value of target Tab item.\n * @param {boolean} value - Boolean value that determines whether the command should be enabled or disabled.\n * By default, isEnable is true.\n * @returns void.\n */\n Tab.prototype.enableTab = function (index, value) {\n var tbItems = selectAll('.' + CLS_TB_ITEM, this.element)[index];\n if (isNOU(tbItems)) {\n return;\n }\n if (value === true) {\n tbItems.classList.remove(CLS_DISABLE, CLS_OVERLAY);\n tbItems.firstChild.setAttribute('tabindex', '-1');\n }\n else {\n tbItems.classList.add(CLS_DISABLE, CLS_OVERLAY);\n tbItems.firstChild.removeAttribute('tabindex');\n if (tbItems.classList.contains(CLS_ACTIVE)) {\n this.select(index + 1);\n }\n }\n tbItems.setAttribute('aria-disabled', (value === true) ? 'false' : 'true');\n };\n /**\n * Adds new items to the Tab that accepts an array as Tab items.\n * @param {TabItemsModel[]} items - An array of item that is added to the Tab.\n * @param {number} index - Number value that determines where the items to be added. By default, index is 0.\n * @returns void.\n */\n Tab.prototype.addTab = function (items, index) {\n var _this = this;\n this.trigger('adding', { addedItems: items });\n if (isNOU(index)) {\n index = selectAll('.' + CLS_TB_ITEM).length - 1;\n }\n if (this.isTemplate === true || selectAll('.' + CLS_TB_ITEM).length < index || index < 0 || isNaN(index)) {\n return;\n }\n this.bdrLine.classList.add(CLS_HIDDEN);\n this.tbItems = select('.' + CLS_HEADER + ' .' + CLS_TB_ITEMS, this.element);\n var tabItems = this.parseObject(items, index);\n items.forEach(function (item, place) {\n if (_this.isReplace === true) {\n var hdrItem = select('.' + CLS_TB_ITEMS + ' #' + CLS_ITEM + '_' + index, _this.element);\n detach(hdrItem);\n _this.items.splice((index + place), 0, item);\n }\n else {\n _this.items.push(item);\n }\n });\n this.tbObj.addItems(tabItems, index);\n this.trigger('added', { addedItems: items });\n if (this.selectedItem === index) {\n this.select(index);\n }\n else {\n this.setActiveBorder();\n }\n };\n /**\n * Removes the items in the Tab from the specified index.\n * @param {number} index - Index of target item that is going to be removed.\n * @returns void.\n */\n Tab.prototype.removeTab = function (index) {\n var trg = selectAll('.' + CLS_TB_ITEM, this.element)[index];\n var removingArgs = { removedItem: trg, removedIndex: index };\n this.trigger('removing', removingArgs);\n if (isNOU(trg)) {\n return;\n }\n this.tbObj.removeItems(index);\n this.refreshActiveBorder();\n var no = this.extIndex(trg.id);\n var cntTrg = this.findEle(select('.' + CLS_CONTENT, this.element).children, CLS_CONTENT + '_' + no);\n if (!isNOU(cntTrg)) {\n cntTrg.outerHTML = '';\n }\n var removedArgs = { removedItem: trg, removedIndex: index };\n this.trigger('removed', removedArgs);\n if (trg.classList.contains(CLS_ACTIVE)) {\n index = (index > selectAll('.' + CLS_TB_ITEM + ':not(.' + CLS_TB_POPUP + ')', this.element).length - 1) ? index - 1 : index;\n this.enableAnimation = false;\n this.selectedItem = index;\n this.select(index);\n }\n if (selectAll('.' + CLS_TB_ITEM, this.element).length === 0) {\n this.hdrEle.style.display = 'none';\n }\n this.enableAnimation = true;\n };\n /**\n * Shows or hides the Tab that is in the specified index.\n * @param {number} index - Index value of target item.\n * @param {boolean} value - Based on this Boolean value, item will be hide (false) or show (true). By default, value is true.\n * @returns void.\n */\n Tab.prototype.hideTab = function (index, value) {\n var item = selectAll('.' + CLS_TB_ITEM, this.element)[index];\n if (isNOU(item)) {\n return;\n }\n if (isNOU(value)) {\n value = true;\n }\n this.bdrLine.classList.add(CLS_HIDDEN);\n if (value === true) {\n item.classList.add(CLS_HIDDEN);\n if (item.classList.contains(CLS_ACTIVE)) {\n if (index !== 0) {\n for (var i = index - 1; i >= 0; i--) {\n if (!this.tbItem[i].classList.contains('e-hidden')) {\n this.select(i);\n break;\n }\n else if (i === 0) {\n for (var k = index + 1; k < this.tbItem.length; k++) {\n if (!this.tbItem[k].classList.contains('e-hidden')) {\n this.select(k);\n break;\n }\n }\n }\n }\n }\n else {\n for (var k = index + 1; k < this.tbItem.length; k++) {\n if (!this.tbItem[k].classList.contains('e-hidden')) {\n this.select(k);\n break;\n }\n }\n }\n }\n }\n else {\n item.classList.remove(CLS_HIDDEN);\n }\n this.setActiveBorder();\n item.setAttribute('aria-hidden', '' + value);\n };\n /**\n * Specifies the index or HTMLElement to select an item from the Tab.\n * @param {number | HTMLElement} args - Index or DOM element is used for selecting an item from the Tab.\n * @returns void.\n */\n Tab.prototype.select = function (args) {\n this.tbItems = select('.' + CLS_HEADER + ' .' + CLS_TB_ITEMS, this.element);\n this.tbItem = selectAll('.' + CLS_HEADER + ' .' + CLS_TB_ITEM, this.element);\n this.prevItem = this.tbItem[this.prevIndex];\n if (!isNOU(this.prevItem) && !this.prevItem.classList.contains(CLS_DISABLE)) {\n this.prevItem.children.item(0).setAttribute('tabindex', '-1');\n }\n var eventArg = {\n previousItem: this.prevItem,\n previousIndex: this.prevIndex,\n selectedItem: this.tbItem[this.selectedItem],\n selectedIndex: this.selectedItem,\n isSwiped: this.isSwipeed\n };\n this.trigger('selecting', eventArg);\n if (eventArg.cancel) {\n return;\n }\n if (typeof args === 'number') {\n if (!isNOU(this.tbItem[args]) && this.tbItem[args].classList.contains(CLS_DISABLE)) {\n for (var i = args + 1; i < this.items.length; i++) {\n if (this.items[i].disabled === false) {\n args = i;\n break;\n }\n else {\n args = 0;\n }\n }\n }\n if (this.tbItem.length > args && args >= 0 && !isNaN(args)) {\n if (!this.tbItem[this.selectedItem].classList.contains('e-hidden')) {\n this.prevIndex = this.selectedItem;\n }\n else {\n for (var i = this.selectedItem; i >= 0; i--) {\n if (!this.tbItem[i].classList.contains('e-hidden')) {\n this.prevIndex = i;\n break;\n }\n }\n }\n if (this.tbItem[args].classList.contains(CLS_TB_POPUP)) {\n this.setActive(this.popupHandler(this.tbItem[args]));\n }\n else {\n this.setActive(args);\n }\n }\n else {\n this.setActive(0);\n }\n }\n else if (args instanceof (HTMLElement)) {\n this.setActive(this.getEleIndex(args));\n }\n };\n /**\n * Specifies the value to disable/enable the Tab component.\n * When set to `true`, the component will be disabled.\n * @param {boolean} value - Based on this Boolean value, Tab will be enabled (false) or disabled (true).\n * @returns void.\n */\n Tab.prototype.disable = function (value) {\n this.setCssClass(this.element, CLS_DISABLE, value);\n this.element.setAttribute('aria-disabled', '' + value);\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @returns string\n */\n Tab.prototype.getPersistData = function () {\n return this.addOnPersist(['selectedItem', 'actEleId']);\n };\n /**\n * Returns the current module name.\n * @returns string\n * @private\n */\n Tab.prototype.getModuleName = function () {\n return 'tab';\n };\n /**\n * Gets called when the model property changes.The data that describes the old and new values of the property that changed.\n * @param {TabModel} newProp\n * @param {TabModel} oldProp\n * @returns void\n * @private\n */\n Tab.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'width':\n setStyle(this.element, { width: formatUnit(newProp.width) });\n break;\n case 'height':\n setStyle(this.element, { height: formatUnit(newProp.height) });\n this.setContentHeight(false);\n break;\n case 'cssClass':\n this.setCssClass(this.element, newProp.cssClass, true);\n break;\n case 'items':\n if (!(newProp.items instanceof Array && oldProp.items instanceof Array)) {\n var changedProp = Object.keys(newProp.items);\n for (var i = 0; i < changedProp.length; i++) {\n var index = parseInt(Object.keys(newProp.items)[i], 10);\n var property = Object.keys(newProp.items[index])[0];\n var oldVal = Object(oldProp.items[index])[property];\n var newVal = Object(newProp.items[index])[property];\n var hdrItem = select('.' + CLS_TB_ITEMS + ' #' + CLS_ITEM + '_' + index, this.element);\n var cntItem = select('.' + CLS_CONTENT + ' #' + CLS_CONTENT + '_' + index, this.element);\n if (property === 'header') {\n var arr = [];\n arr.push(this.items[index]);\n this.items.splice(index, 1);\n this.tbObj.items.splice(index, 1);\n this.isReplace = true;\n this.addTab(arr, index);\n this.isReplace = false;\n }\n if (property === 'content' && !isNOU(cntItem)) {\n var strVal = typeof newVal === 'string' || isNOU(newVal.innerHTML);\n if (strVal && (newVal[0] === '.' || newVal[0] === '#') && newVal.length) {\n var eleVal = document.querySelector(newVal);\n cntItem.appendChild(eleVal);\n eleVal.style.display = '';\n }\n else if (newVal === '' && oldVal[0] === '#') {\n document.body.appendChild(this.element.querySelector(oldVal)).style.display = 'none';\n cntItem.innerHTML = newVal;\n }\n else {\n cntItem.innerHTML = newVal;\n }\n }\n if (property === 'cssClass') {\n if (!isNOU(hdrItem)) {\n hdrItem.classList.remove(oldVal);\n hdrItem.classList.add(newVal);\n }\n if (!isNOU(cntItem)) {\n cntItem.classList.remove(oldVal);\n cntItem.classList.add(newVal);\n }\n }\n if (property === 'disabled') {\n this.enableTab(index, ((newVal === true) ? false : true));\n }\n }\n }\n else {\n if (isNOU(this.tbObj)) {\n this.renderContainer();\n if (!isNOU(this.cntEle)) {\n this.touchModule = new Touch(this.cntEle, { swipe: this.swipeHandler.bind(this) });\n }\n }\n else {\n this.setItems(newProp.items);\n if (this.templateEle.length > 0) {\n this.expTemplateContent();\n }\n this.templateEle = [];\n select('.' + CLS_TAB + ' > .' + CLS_CONTENT, this.element).innerHTML = '';\n this.select(this.selectedItem);\n }\n }\n break;\n case 'showCloseButton':\n this.setCloseButton(newProp.showCloseButton);\n break;\n case 'selectedItem':\n this.selectedItem = oldProp.selectedItem;\n this.select(newProp.selectedItem);\n break;\n case 'headerPlacement':\n var tempHdrEle = select('.' + CLS_HEADER, this.element);\n this.setOrientation(newProp.headerPlacement, tempHdrEle);\n this.select(this.selectedItem);\n break;\n case 'enableRtl':\n this.setRTL(newProp.enableRtl);\n break;\n case 'overflowMode':\n this.tbObj.overflowMode = newProp.overflowMode;\n this.tbObj.dataBind();\n this.refreshActElePosition();\n break;\n case 'heightAdjustMode':\n this.setContentHeight(false);\n this.select(this.selectedItem);\n break;\n }\n }\n };\n __decorate([\n Collection([], TabItem)\n ], Tab.prototype, \"items\", void 0);\n __decorate([\n Property('100%')\n ], Tab.prototype, \"width\", void 0);\n __decorate([\n Property('auto')\n ], Tab.prototype, \"height\", void 0);\n __decorate([\n Property('')\n ], Tab.prototype, \"cssClass\", void 0);\n __decorate([\n Property(0)\n ], Tab.prototype, \"selectedItem\", void 0);\n __decorate([\n Property('Top')\n ], Tab.prototype, \"headerPlacement\", void 0);\n __decorate([\n Property('Content')\n ], Tab.prototype, \"heightAdjustMode\", void 0);\n __decorate([\n Property('Scrollable')\n ], Tab.prototype, \"overflowMode\", void 0);\n __decorate([\n Property(false)\n ], Tab.prototype, \"enableRtl\", void 0);\n __decorate([\n Property(false)\n ], Tab.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(false)\n ], Tab.prototype, \"showCloseButton\", void 0);\n __decorate([\n Complex({}, TabAnimationSettings)\n ], Tab.prototype, \"animation\", void 0);\n __decorate([\n Event()\n ], Tab.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Tab.prototype, \"adding\", void 0);\n __decorate([\n Event()\n ], Tab.prototype, \"added\", void 0);\n __decorate([\n Event()\n ], Tab.prototype, \"selecting\", void 0);\n __decorate([\n Event()\n ], Tab.prototype, \"selected\", void 0);\n __decorate([\n Event()\n ], Tab.prototype, \"removing\", void 0);\n __decorate([\n Event()\n ], Tab.prototype, \"removed\", void 0);\n __decorate([\n Event()\n ], Tab.prototype, \"destroyed\", void 0);\n Tab = __decorate([\n NotifyPropertyChanges\n ], Tab);\n return Tab;\n}(Component));\nexport { Tab };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, isUndefined, Browser, compile } from '@syncfusion/ej2-base';\nimport { Property, NotifyPropertyChanges, ChildProperty, Complex } from '@syncfusion/ej2-base';\nimport { Event, EventHandler, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { rippleEffect, Animation } from '@syncfusion/ej2-base';\nimport { Draggable, Droppable } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, closest, matches, detach, select, selectAll, isVisible, createElement, append } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { isNullOrUndefined as isNOU, Touch, getValue, setValue } from '@syncfusion/ej2-base';\nimport { ListBase } from '@syncfusion/ej2-lists';\nimport { createCheckBox, rippleMouseHandler } from '@syncfusion/ej2-buttons';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nvar ROOT = 'e-treeview';\nvar CONTROL = 'e-control';\nvar COLLAPSIBLE = 'e-icon-collapsible';\nvar EXPANDABLE = 'e-icon-expandable';\nvar LISTITEM = 'e-list-item';\nvar LISTTEXT = 'e-list-text';\nvar PARENTITEM = 'e-list-parent';\nvar HOVER = 'e-hover';\nvar ACTIVE = 'e-active';\nvar LOAD = 'e-icons-spinner';\nvar PROCESS = 'e-process';\nvar ICON = 'e-icons';\nvar TEXTWRAP = 'e-text-content';\nvar INPUT = 'e-input';\nvar INPUTGROUP = 'e-input-group';\nvar TREEINPUT = 'e-tree-input';\nvar EDITING = 'e-editing';\nvar RTL = 'e-rtl';\nvar DRAGITEM = 'e-drag-item';\nvar DROPPABLE = 'e-droppable';\nvar DRAGGING = 'e-dragging';\nvar SIBLING = 'e-sibling';\nvar DROPIN = 'e-drop-in';\nvar DROPNEXT = 'e-drop-next';\nvar DROPOUT = 'e-drop-out';\nvar NODROP = 'e-no-drop';\nvar FULLROWWRAP = 'e-fullrow-wrap';\nvar FULLROW = 'e-fullrow';\nvar SELECTED = 'e-selected';\nvar EXPANDED = 'e-expanded';\nvar NODECOLLAPSED = 'e-node-collapsed';\nvar DISABLE = 'e-disable';\nvar CONTENT = 'e-content';\nvar DOWNTAIL = 'e-downtail';\nvar DROPCOUNT = 'e-drop-count';\nvar CHECK = 'e-check';\nvar INDETERMINATE = 'e-stop';\nvar CHECKBOXWRAP = 'e-checkbox-wrapper';\nvar CHECKBOXFRAME = 'e-frame';\nvar CHECKBOXRIPPLE = 'e-ripple-container';\nvar FOCUS = 'e-node-focus';\nvar IMAGE = 'e-list-img';\nvar BIGGER = 'e-bigger';\nvar SMALL = 'e-small';\nvar treeAriaAttr = {\n treeRole: 'tree',\n itemRole: 'treeitem',\n listRole: 'group',\n itemText: '',\n wrapperRole: '',\n};\n/**\n * Configures the fields to bind to the properties of node in the TreeView component.\n */\nvar FieldsSettings = /** @class */ (function (_super) {\n __extends(FieldsSettings, _super);\n function FieldsSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('child')\n ], FieldsSettings.prototype, \"child\", void 0);\n __decorate([\n Property([])\n ], FieldsSettings.prototype, \"dataSource\", void 0);\n __decorate([\n Property('expanded')\n ], FieldsSettings.prototype, \"expanded\", void 0);\n __decorate([\n Property('hasChildren')\n ], FieldsSettings.prototype, \"hasChildren\", void 0);\n __decorate([\n Property('htmlAttributes')\n ], FieldsSettings.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property('iconCss')\n ], FieldsSettings.prototype, \"iconCss\", void 0);\n __decorate([\n Property('id')\n ], FieldsSettings.prototype, \"id\", void 0);\n __decorate([\n Property('imageUrl')\n ], FieldsSettings.prototype, \"imageUrl\", void 0);\n __decorate([\n Property('isChecked')\n ], FieldsSettings.prototype, \"isChecked\", void 0);\n __decorate([\n Property('parentID')\n ], FieldsSettings.prototype, \"parentID\", void 0);\n __decorate([\n Property(null)\n ], FieldsSettings.prototype, \"query\", void 0);\n __decorate([\n Property('selected')\n ], FieldsSettings.prototype, \"selected\", void 0);\n __decorate([\n Property(null)\n ], FieldsSettings.prototype, \"tableName\", void 0);\n __decorate([\n Property('text')\n ], FieldsSettings.prototype, \"text\", void 0);\n __decorate([\n Property('tooltip')\n ], FieldsSettings.prototype, \"tooltip\", void 0);\n __decorate([\n Property('navigateUrl')\n ], FieldsSettings.prototype, \"navigateUrl\", void 0);\n return FieldsSettings;\n}(ChildProperty));\nexport { FieldsSettings };\n/**\n * Configures animation settings for the TreeView component.\n */\nvar ActionSettings = /** @class */ (function (_super) {\n __extends(ActionSettings, _super);\n function ActionSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('SlideDown')\n ], ActionSettings.prototype, \"effect\", void 0);\n __decorate([\n Property(400)\n ], ActionSettings.prototype, \"duration\", void 0);\n __decorate([\n Property('linear')\n ], ActionSettings.prototype, \"easing\", void 0);\n return ActionSettings;\n}(ChildProperty));\nexport { ActionSettings };\n/**\n * Configures the animation settings for expanding and collapsing nodes in TreeView.\n */\nvar NodeAnimationSettings = /** @class */ (function (_super) {\n __extends(NodeAnimationSettings, _super);\n function NodeAnimationSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({ effect: 'SlideUp', duration: 400, easing: 'linear' }, ActionSettings)\n ], NodeAnimationSettings.prototype, \"collapse\", void 0);\n __decorate([\n Complex({ effect: 'SlideDown', duration: 400, easing: 'linear' }, ActionSettings)\n ], NodeAnimationSettings.prototype, \"expand\", void 0);\n return NodeAnimationSettings;\n}(ChildProperty));\nexport { NodeAnimationSettings };\n/**\n * The TreeView component is used to represent hierarchical data in a tree like structure with advanced\n * functions to perform edit, drag and drop, selection with check-box, and more.\n * ```html\n *
    \n * ```\n * ```typescript\n * let treeObj: TreeView = new TreeView();\n * treeObj.appendTo('#tree');\n * ```\n */\nvar TreeView = /** @class */ (function (_super) {\n __extends(TreeView, _super);\n function TreeView(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.mouseDownStatus = false;\n return _this;\n }\n TreeView_1 = TreeView;\n /**\n * Get component name.\n * @returns string\n * @private\n */\n TreeView.prototype.getModuleName = function () {\n return 'treeview';\n };\n /**\n * Initialize the event handler\n */\n TreeView.prototype.preRender = function () {\n var _this = this;\n this.checkActionNodes = [];\n this.dragStartAction = false;\n this.isAnimate = false;\n this.keyConfigs = {\n escape: 'escape',\n end: 'end',\n enter: 'enter',\n f2: 'f2',\n home: 'home',\n moveDown: 'downarrow',\n moveLeft: 'leftarrow',\n moveRight: 'rightarrow',\n moveUp: 'uparrow',\n ctrlDown: 'ctrl+downarrow',\n ctrlUp: 'ctrl+uparrow',\n ctrlEnter: 'ctrl+enter',\n ctrlHome: 'ctrl+home',\n ctrlEnd: 'ctrl+end',\n ctrlA: 'ctrl+A',\n shiftDown: 'shift+downarrow',\n shiftUp: 'shift+uparrow',\n shiftEnter: 'shift+enter',\n shiftHome: 'shift+home',\n shiftEnd: 'shift+end',\n csDown: 'ctrl+shift+downarrow',\n csUp: 'ctrl+shift+uparrow',\n csEnter: 'ctrl+shift+enter',\n csHome: 'ctrl+shift+home',\n csEnd: 'ctrl+shift+end',\n space: 'space',\n };\n this.listBaseOption = {\n expandCollapse: true,\n showIcon: true,\n expandIconClass: EXPANDABLE,\n ariaAttributes: treeAriaAttr,\n expandIconPosition: 'Left',\n itemCreated: function (e) {\n _this.beforeNodeCreate(e);\n },\n };\n this.updateListProp(this.fields);\n this.aniObj = new Animation({});\n this.treeList = [];\n this.isLoaded = false;\n this.setTouchClass();\n if (isNOU(this.selectedNodes)) {\n this.setProperties({ selectedNodes: [] }, true);\n }\n if (isNOU(this.checkedNodes)) {\n this.setProperties({ checkedNodes: [] }, true);\n }\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @returns string\n * @hidden\n */\n TreeView.prototype.getPersistData = function () {\n var keyEntity = ['selectedNodes', 'checkedNodes'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * To Initialize the control rendering\n * @private\n */\n TreeView.prototype.render = function () {\n this.isAnimate = true;\n this.initialize();\n this.setDataBinding();\n this.setExpandOnType();\n this.setRipple();\n this.wireEditingEvents(this.allowEditing);\n this.setDragAndDrop(this.allowDragAndDrop);\n this.wireEvents();\n };\n TreeView.prototype.initialize = function () {\n this.element.setAttribute('role', 'tree');\n this.element.setAttribute('tabindex', '0');\n this.element.setAttribute('aria-activedescendant', this.element.id + '_active');\n this.setCssClass(null, this.cssClass);\n this.setEnableRtl();\n this.setFullRow(this.fullRowSelect);\n this.nodeTemplateFn = this.templateComplier(this.nodeTemplate);\n };\n TreeView.prototype.setEnableRtl = function () {\n this.enableRtl ? addClass([this.element], RTL) : removeClass([this.element], RTL);\n };\n TreeView.prototype.setRipple = function () {\n var tempStr = '.' + FULLROW + ',.' + TEXTWRAP;\n var rippleModel = {\n selector: tempStr,\n ignore: '.' + TEXTWRAP + ' > .' + ICON + ',.' + INPUTGROUP + ',.' + INPUT + ', .' + CHECKBOXWRAP\n };\n this.rippleFn = rippleEffect(this.element, rippleModel);\n var iconModel = {\n selector: '.' + TEXTWRAP + ' > .' + ICON,\n isCenterRipple: true,\n };\n this.rippleIconFn = rippleEffect(this.element, iconModel);\n };\n TreeView.prototype.setFullRow = function (isEnabled) {\n isEnabled ? addClass([this.element], FULLROWWRAP) : removeClass([this.element], FULLROWWRAP);\n };\n TreeView.prototype.setMultiSelect = function (isEnabled) {\n var firstUl = select('.' + PARENTITEM, this.element);\n if (isEnabled) {\n firstUl.setAttribute('aria-multiselectable', 'true');\n }\n else {\n firstUl.removeAttribute('aria-multiselectable');\n }\n };\n TreeView.prototype.templateComplier = function (template) {\n if (template) {\n var e = void 0;\n try {\n if (document.querySelectorAll(template).length) {\n return compile(document.querySelector(template).innerHTML.trim());\n }\n }\n catch (e) {\n return compile(template);\n }\n }\n return undefined;\n };\n TreeView.prototype.setDataBinding = function () {\n var _this = this;\n this.treeList.push('false');\n if (this.fields.dataSource instanceof DataManager) {\n this.fields.dataSource.executeQuery(this.getQuery(this.fields)).then(function (e) {\n _this.treeList.pop();\n _this.treeData = e.result;\n _this.isNumberTypeId = _this.getType();\n _this.setRootData();\n _this.renderItems(true);\n if (_this.treeList.length === 0 && !_this.isLoaded) {\n _this.finalize();\n }\n });\n }\n else {\n this.treeList.pop();\n if (isNOU(this.fields.dataSource)) {\n this.rootData = this.treeData = [];\n }\n else {\n this.treeData = this.fields.dataSource;\n this.setRootData();\n }\n this.renderItems(false);\n }\n if (this.treeList.length === 0 && !this.isLoaded) {\n this.finalize();\n }\n };\n TreeView.prototype.getQuery = function (mapper, value) {\n if (value === void 0) { value = null; }\n var columns = [];\n var query;\n if (!mapper.query) {\n query = new Query();\n var prop = this.getActualProperties(mapper);\n for (var _i = 0, _a = Object.keys(prop); _i < _a.length; _i++) {\n var col = _a[_i];\n if (col !== 'dataSource' && col !== 'tableName' && col !== 'child' && !!mapper[col]\n && columns.indexOf(mapper[col]) === -1) {\n columns.push(mapper[col]);\n }\n }\n query.select(columns);\n if (prop.hasOwnProperty('tableName')) {\n query.from(mapper.tableName);\n }\n }\n else {\n query = mapper.query.clone();\n }\n ListBase.addSorting(this.sortOrder, mapper.text, query);\n if (!isNOU(value) && !isNOU(mapper.parentID)) {\n query.where(mapper.parentID, 'equal', (this.isNumberTypeId ? parseFloat(value) : value));\n }\n return query;\n };\n TreeView.prototype.getType = function () {\n return this.treeData[0] ? ((typeof getValue(this.fields.id, this.treeData[0]) === 'number') ? true : false) : false;\n };\n TreeView.prototype.setRootData = function () {\n this.dataType = this.getDataType(this.treeData, this.fields);\n if (this.dataType === 1) {\n this.groupedData = this.getGroupedData(this.treeData, this.fields.parentID);\n var rootItems = this.getChildNodes(this.treeData, undefined, true);\n if (isNOU(rootItems)) {\n this.rootData = [];\n }\n else {\n this.rootData = rootItems;\n }\n }\n else {\n this.rootData = this.treeData;\n }\n };\n TreeView.prototype.renderItems = function (isSorted) {\n this.listBaseOption.ariaAttributes.level = 1;\n this.ulElement = ListBase.createList(isSorted ? this.rootData : this.getSortedData(this.rootData), this.listBaseOption);\n this.element.appendChild(this.ulElement);\n this.finalizeNode(this.element);\n };\n TreeView.prototype.beforeNodeCreate = function (e) {\n if (this.showCheckBox) {\n var checkboxEle = createCheckBox(true, { cssClass: this.touchClass });\n var icon = select('div.' + ICON, e.item);\n var id = e.item.getAttribute('data-uid');\n e.item.childNodes[0].insertBefore(checkboxEle, e.item.childNodes[0].childNodes[isNOU(icon) ? 0 : 1]);\n var checkValue = getValue(e.fields.isChecked, e.curData);\n if (this.checkedNodes.indexOf(id) > -1) {\n select('.' + CHECKBOXFRAME, checkboxEle).classList.add(CHECK);\n checkboxEle.setAttribute('aria-checked', 'true');\n this.addCheck(e.item);\n }\n else if (!isNOU(checkValue) && checkValue.toString() === 'true') {\n select('.' + CHECKBOXFRAME, checkboxEle).classList.add(CHECK);\n checkboxEle.setAttribute('aria-checked', 'true');\n this.addCheck(e.item);\n }\n else {\n checkboxEle.setAttribute('aria-checked', 'false');\n }\n var frame = select('.' + CHECKBOXFRAME, checkboxEle);\n EventHandler.add(frame, 'mousedown', this.frameMouseHandler, this);\n EventHandler.add(frame, 'mouseup', this.frameMouseHandler, this);\n }\n if (this.fullRowSelect) {\n this.createFullRow(e.item);\n }\n if (this.allowMultiSelection && !e.item.classList.contains(SELECTED)) {\n e.item.setAttribute('aria-selected', 'false');\n }\n var fields = e.fields;\n this.addActionClass(e, fields.selected, SELECTED);\n this.addActionClass(e, fields.expanded, EXPANDED);\n if (!isNOU(this.nodeTemplateFn)) {\n var textEle = e.item.querySelector('.' + LISTTEXT);\n textEle.innerHTML = '';\n append(this.nodeTemplateFn(e.curData), textEle);\n }\n var eventArgs = {\n node: e.item,\n nodeData: e.curData,\n text: e.text,\n };\n this.trigger('drawNode', eventArgs);\n };\n TreeView.prototype.frameMouseHandler = function (e) {\n var rippleSpan = select('.' + CHECKBOXRIPPLE, e.target.parentElement);\n rippleMouseHandler(e, rippleSpan);\n };\n TreeView.prototype.addActionClass = function (e, action, cssClass) {\n var data = e.curData;\n var actionValue = getValue(action, data);\n if (!isNOU(actionValue) && actionValue.toString() !== 'false') {\n e.item.classList.add(cssClass);\n }\n };\n TreeView.prototype.getDataType = function (ds, mapper) {\n if (this.fields.dataSource instanceof DataManager) {\n for (var i = 0; i < ds.length; i++) {\n if ((typeof mapper.child === 'string') && isNOU(getValue(mapper.child, ds[i]))) {\n return 1;\n }\n }\n return 2;\n }\n for (var i = 0, len = ds.length; i < len; i++) {\n if ((typeof mapper.child === 'string') && !isNOU(getValue(mapper.child, ds[i]))) {\n return 2;\n }\n if (!isNOU(getValue(mapper.parentID, ds[i])) || !isNOU(getValue(mapper.hasChildren, ds[i]))) {\n return 1;\n }\n }\n return 1;\n };\n TreeView.prototype.getGroupedData = function (dataSource, groupBy) {\n var cusQuery = new Query().group(groupBy);\n var ds = ListBase.getDataSource(dataSource, cusQuery);\n var grpItem = [];\n for (var j = 0; j < ds.length; j++) {\n var itemObj = ds[j].items;\n grpItem.push(itemObj);\n }\n return grpItem;\n };\n TreeView.prototype.getSortedData = function (list) {\n if (list && this.sortOrder !== 'None') {\n list = ListBase.getDataSource(list, ListBase.addSorting(this.sortOrder, this.fields.text));\n }\n return list;\n };\n TreeView.prototype.finalizeNode = function (element) {\n var iNodes = selectAll('.' + IMAGE, element);\n for (var k = 0; k < iNodes.length; k++) {\n iNodes[k].setAttribute('alt', IMAGE);\n }\n if (this.isLoaded) {\n var sNodes = selectAll('.' + SELECTED, element);\n for (var i = 0; i < sNodes.length; i++) {\n this.selectNode(sNodes[i], null);\n break;\n }\n removeClass(sNodes, SELECTED);\n }\n var cNodes = selectAll('.' + LISTITEM + ':not(.' + EXPANDED + ')', element);\n for (var j = 0; j < cNodes.length; j++) {\n var icon = select('div.' + ICON, cNodes[j]);\n if (icon && icon.classList.contains(EXPANDABLE)) {\n cNodes[j].setAttribute('aria-expanded', 'false');\n addClass([cNodes[j]], NODECOLLAPSED);\n }\n }\n var eNodes = selectAll('.' + EXPANDED, element);\n for (var i = 0; i < eNodes.length; i++) {\n this.renderChildNodes(eNodes[i]);\n }\n removeClass(eNodes, EXPANDED);\n this.updateList();\n if (this.isLoaded) {\n this.updateCheckedProp();\n }\n };\n TreeView.prototype.updateCheckedProp = function () {\n var _this = this;\n if (this.showCheckBox) {\n var nodes_1 = [].concat([], this.checkedNodes);\n this.checkedNodes.forEach(function (value, index) {\n var checkBox = _this.element.querySelector('[data-uid=\"' + value + '\"]');\n if (isNOU(checkBox)) {\n nodes_1 = nodes_1.filter(function (e) { return e !== value; });\n }\n });\n this.setProperties({ checkedNodes: nodes_1 }, true);\n }\n };\n TreeView.prototype.ensureParentCheckState = function (element) {\n if (!isNOU(element)) {\n if (element.classList.contains(ROOT)) {\n return;\n }\n var ulElement = element;\n if (element.classList.contains(LISTITEM)) {\n ulElement = select('.' + PARENTITEM, element);\n }\n var checkedNodes = selectAll('.' + CHECK, ulElement);\n var nodes = selectAll('.' + LISTITEM, ulElement);\n var checkBoxEle = element.getElementsByClassName(CHECKBOXWRAP)[0];\n if (nodes.length === checkedNodes.length) {\n this.changeState(checkBoxEle, 'check', null, true, true);\n }\n else if (checkedNodes.length > 0) {\n this.changeState(checkBoxEle, 'indeterminate', null, true, true);\n }\n else if (checkedNodes.length === 0) {\n this.changeState(checkBoxEle, 'uncheck', null, true, true);\n }\n var parentUL = closest(element, '.' + PARENTITEM);\n if (!isNOU(parentUL)) {\n var currentParent = closest(parentUL, '.' + LISTITEM);\n this.ensureParentCheckState(currentParent);\n }\n }\n };\n TreeView.prototype.ensureChildCheckState = function (element, e) {\n if (!isNOU(element)) {\n var childElement = select('.' + PARENTITEM, element);\n var checkBoxes = void 0;\n if (!isNOU(childElement)) {\n checkBoxes = selectAll('.' + CHECKBOXWRAP, childElement);\n var isChecked = element.getElementsByClassName(CHECKBOXFRAME)[0].classList.contains(CHECK);\n var checkedState = void 0;\n for (var index = 0; index < checkBoxes.length; index++) {\n if (!isNOU(this.currentLoadData) && !isNOU(getValue(this.fields.isChecked, this.currentLoadData[index]))) {\n checkedState = getValue(this.fields.isChecked, this.currentLoadData[index]) ? 'check' : 'uncheck';\n }\n else {\n var isNodeChecked = checkBoxes[index].getElementsByClassName(CHECKBOXFRAME)[0].classList.contains(CHECK);\n checkedState = (!this.isLoaded && isNodeChecked) ? 'check' : (isChecked ? 'check' : 'uncheck');\n }\n this.changeState(checkBoxes[index], checkedState, e, true, true);\n }\n }\n }\n };\n TreeView.prototype.doCheckBoxAction = function (nodes, doCheck) {\n if (!isNOU(nodes)) {\n for (var i = 0, len = nodes.length; i < len; i++) {\n var liEle = this.getElement(nodes[i]);\n if (isNOU(liEle)) {\n continue;\n }\n var checkBox = select('.' + PARENTITEM + ' .' + CHECKBOXWRAP, liEle);\n this.validateCheckNode(checkBox, !doCheck, liEle, null);\n }\n }\n else {\n var checkBoxes = selectAll('.' + CHECKBOXWRAP, this.element);\n for (var index = 0; index < checkBoxes.length; index++) {\n this.changeState(checkBoxes[index], doCheck ? 'check' : 'uncheck');\n }\n }\n };\n TreeView.prototype.changeState = function (wrapper, state, e, isPrevent, isAdd) {\n var ariaState;\n var eventArgs;\n var currLi = closest(wrapper, '.' + LISTITEM);\n if (!isPrevent) {\n this.checkActionNodes = [];\n eventArgs = this.getCheckEvent(currLi, state, e);\n this.trigger('nodeChecking', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n }\n var frameSpan = wrapper.getElementsByClassName(CHECKBOXFRAME)[0];\n if (state === 'check' && !frameSpan.classList.contains(CHECK)) {\n frameSpan.classList.remove(INDETERMINATE);\n frameSpan.classList.add(CHECK);\n this.addCheck(currLi);\n ariaState = 'true';\n }\n else if (state === 'uncheck' && (frameSpan.classList.contains(CHECK) || frameSpan.classList.contains(INDETERMINATE))) {\n removeClass([frameSpan], [CHECK, INDETERMINATE]);\n this.removeCheck(currLi);\n ariaState = 'false';\n }\n else if (state === 'indeterminate' && !frameSpan.classList.contains(INDETERMINATE)) {\n frameSpan.classList.remove(CHECK);\n frameSpan.classList.add(INDETERMINATE);\n this.removeCheck(currLi);\n ariaState = 'mixed';\n }\n ariaState = state === 'check' ? 'true' : state === 'uncheck' ? 'false' : ariaState;\n if (!isNOU(ariaState)) {\n wrapper.setAttribute('aria-checked', ariaState);\n }\n if (isAdd) {\n var data = [].concat([], this.checkActionNodes);\n eventArgs = this.getCheckEvent(currLi, state, e);\n if (isUndefined(isPrevent)) {\n eventArgs.data = data;\n }\n }\n if (!isPrevent) {\n if (!isNOU(ariaState)) {\n wrapper.setAttribute('aria-checked', ariaState);\n eventArgs.data[0].checked = ariaState;\n this.trigger('nodeChecked', eventArgs);\n this.checkActionNodes = [];\n }\n }\n };\n TreeView.prototype.addCheck = function (liEle) {\n var id = liEle.getAttribute('data-uid');\n if (!isNOU(id) && this.checkedNodes.indexOf(id) === -1) {\n this.checkedNodes.push(id);\n }\n };\n TreeView.prototype.removeCheck = function (liEle) {\n var index = this.checkedNodes.indexOf(liEle.getAttribute('data-uid'));\n if (index > -1) {\n this.checkedNodes.splice(index, 1);\n }\n };\n TreeView.prototype.getCheckEvent = function (currLi, action, e) {\n this.checkActionNodes.push(this.getNodeData(currLi));\n var nodeData = this.checkActionNodes;\n return { action: action, cancel: false, isInteracted: isNOU(e) ? false : true, node: currLi, data: nodeData };\n };\n TreeView.prototype.finalize = function () {\n var firstUl = select('.' + PARENTITEM, this.element);\n firstUl.setAttribute('role', treeAriaAttr.treeRole);\n this.setMultiSelect(this.allowMultiSelection);\n var firstNode = select('.' + LISTITEM, this.element);\n if (firstNode) {\n addClass([firstNode], FOCUS);\n this.updateIdAttr(null, firstNode);\n }\n this.doSelectionAction();\n this.updateCheckedProp();\n this.isLoaded = true;\n this.isAnimate = false;\n var eventArgs = { data: this.treeData };\n this.trigger('dataBound', eventArgs);\n };\n TreeView.prototype.doSelectionAction = function () {\n var sNodes = selectAll('.' + SELECTED, this.element);\n var sUids = this.selectedNodes;\n if (sUids.length > 0) {\n this.setProperties({ selectedNodes: [] }, true);\n for (var i = 0; i < sUids.length; i++) {\n var sNode = select('[data-uid=\"' + sUids[i] + '\"]', this.element);\n this.selectNode(sNode, null, true);\n if (!this.allowMultiSelection) {\n break;\n }\n }\n }\n else {\n this.selectGivenNodes(sNodes);\n }\n removeClass(sNodes, SELECTED);\n };\n TreeView.prototype.selectGivenNodes = function (sNodes) {\n for (var i = 0; i < sNodes.length; i++) {\n if (!sNodes[i].classList.contains('e-disable')) {\n this.selectNode(sNodes[i], null, true);\n }\n if (!this.allowMultiSelection) {\n break;\n }\n }\n };\n TreeView.prototype.clickHandler = function (event) {\n var target = event.originalEvent.target;\n EventHandler.remove(this.element, 'contextmenu', this.preventContextMenu);\n if (!target || this.dragStartAction) {\n return;\n }\n else {\n var classList = target.classList;\n var li = closest(target, '.' + LISTITEM);\n if (!li) {\n return;\n }\n else {\n this.removeHover();\n this.setFocusElement(li);\n if (this.showCheckBox && !li.classList.contains('e-disable')) {\n var checkWrapper = closest(target, '.' + CHECKBOXWRAP);\n if (!isNOU(checkWrapper)) {\n var checkElement = select('.' + CHECKBOXFRAME, checkWrapper);\n this.validateCheckNode(checkWrapper, checkElement.classList.contains(CHECK), li, event.originalEvent);\n this.triggerClickEvent(event.originalEvent, li);\n return;\n }\n }\n if (classList.contains(EXPANDABLE)) {\n this.expandAction(li, target, event);\n }\n else if (classList.contains(COLLAPSIBLE)) {\n this.collapseNode(li, target, event);\n }\n else {\n if (!classList.contains(PARENTITEM) && !classList.contains(LISTITEM)) {\n this.toggleSelect(li, event.originalEvent, false);\n }\n }\n this.triggerClickEvent(event.originalEvent, li);\n }\n }\n };\n TreeView.prototype.nodeCheckingEvent = function (wrapper, isCheck, e) {\n var currLi = closest(wrapper, '.' + LISTITEM);\n this.checkActionNodes = [];\n var ariaState = !isCheck ? 'true' : 'false';\n if (!isNOU(ariaState)) {\n wrapper.setAttribute('aria-checked', ariaState);\n }\n var eventArgs = this.getCheckEvent(currLi, isCheck ? 'uncheck' : 'check', e);\n this.trigger('nodeChecking', eventArgs);\n return eventArgs;\n };\n TreeView.prototype.nodeCheckedEvent = function (wrapper, isCheck, e) {\n var currLi = closest(wrapper, '.' + LISTITEM);\n var eventArgs = this.getCheckEvent(wrapper, isCheck ? 'uncheck' : 'check', e);\n eventArgs.data = eventArgs.data.splice(0, eventArgs.data.length - 1);\n this.trigger('nodeChecked', eventArgs);\n };\n TreeView.prototype.triggerClickEvent = function (e, li) {\n var eventArgs = {\n event: e,\n node: li,\n };\n this.trigger('nodeClicked', eventArgs);\n };\n TreeView.prototype.expandNode = function (currLi, icon) {\n var _this = this;\n if (icon.classList.contains(LOAD)) {\n this.hideSpinner(icon);\n }\n removeClass([icon], EXPANDABLE);\n addClass([icon], COLLAPSIBLE);\n var start = 0;\n var end = 0;\n var proxy = this;\n var ul = select('.' + PARENTITEM, currLi);\n var liEle = currLi;\n this.setHeight(liEle, ul);\n if (!this.isAnimate) {\n this.aniObj.animate(ul, {\n name: this.animation.expand.effect,\n duration: this.animation.expand.duration,\n timingFunction: this.animation.expand.easing,\n begin: function (args) {\n liEle.style.overflow = 'hidden';\n start = liEle.offsetHeight;\n end = select('.' + TEXTWRAP, currLi).offsetHeight;\n },\n progress: function (args) {\n args.element.style.display = 'block';\n proxy.animateHeight(args, start, end);\n },\n end: function (args) {\n args.element.style.display = 'block';\n _this.expandedNode(liEle, ul, icon);\n }\n });\n }\n else {\n this.expandedNode(liEle, ul, icon);\n }\n };\n TreeView.prototype.expandedNode = function (currLi, ul, icon) {\n ul.style.display = 'block';\n currLi.style.display = 'block';\n currLi.style.overflow = '';\n currLi.style.height = '';\n removeClass([icon], PROCESS);\n currLi.setAttribute('aria-expanded', 'true');\n removeClass([currLi], NODECOLLAPSED);\n if (this.isLoaded && this.expandArgs) {\n this.expandArgs = this.getExpandEvent(currLi, null);\n this.trigger('nodeExpanded', this.expandArgs);\n }\n };\n TreeView.prototype.collapseNode = function (currLi, icon, e) {\n var _this = this;\n if (icon.classList.contains(PROCESS)) {\n return;\n }\n else {\n addClass([icon], PROCESS);\n }\n var colArgs;\n if (this.isLoaded) {\n colArgs = this.getExpandEvent(currLi, e);\n this.trigger('nodeCollapsing', colArgs);\n if (colArgs.cancel) {\n removeClass([icon], PROCESS);\n return;\n }\n }\n removeClass([icon], COLLAPSIBLE);\n addClass([icon], EXPANDABLE);\n var start = 0;\n var end = 0;\n var proxy = this;\n var ul = select('.' + PARENTITEM, currLi);\n var liEle = currLi;\n addClass([currLi], NODECOLLAPSED);\n this.aniObj.animate(ul, {\n name: this.animation.collapse.effect,\n duration: this.animation.collapse.duration,\n timingFunction: this.animation.collapse.easing,\n begin: function (args) {\n liEle.style.overflow = 'hidden';\n start = select('.' + TEXTWRAP, currLi).offsetHeight;\n end = liEle.offsetHeight;\n },\n progress: function (args) {\n proxy.animateHeight(args, start, end);\n },\n end: function (args) {\n liEle.style.overflow = '';\n args.element.style.display = 'none';\n liEle.style.height = '';\n removeClass([icon], PROCESS);\n currLi.setAttribute('aria-expanded', 'false');\n if (_this.isLoaded) {\n _this.trigger('nodeCollapsed', colArgs);\n }\n }\n });\n };\n TreeView.prototype.setHeight = function (currLi, ul) {\n ul.style.display = 'block';\n ul.style.visibility = 'hidden';\n currLi.style.height = currLi.offsetHeight + 'px';\n ul.style.display = 'none';\n ul.style.visibility = '';\n };\n TreeView.prototype.animateHeight = function (args, start, end) {\n var remaining = (args.duration - args.timeStamp) / args.duration;\n var currentHeight = (end - start) * remaining + start;\n args.element.parentElement.style.height = currentHeight + 'px';\n };\n TreeView.prototype.renderChildNodes = function (parentLi, expandChild) {\n var _this = this;\n var eicon = select('div.' + ICON, parentLi);\n if (isNOU(eicon)) {\n return;\n }\n this.showSpinner(eicon);\n var childItems;\n if (this.fields.dataSource instanceof DataManager) {\n var level = this.parents(parentLi, '.' + PARENTITEM).length;\n var mapper_1 = this.getChildFields(this.fields, level, 1);\n if (isNOU(mapper_1) || isNOU(mapper_1.dataSource)) {\n detach(eicon);\n parentLi.removeAttribute('aria-expanded');\n return;\n }\n this.treeList.push('false');\n mapper_1.dataSource.executeQuery(this.getQuery(mapper_1, parentLi.getAttribute('data-uid'))).then(function (e) {\n _this.treeList.pop();\n childItems = e.result;\n _this.currentLoadData = childItems;\n if (isNOU(childItems) || childItems.length === 0) {\n detach(eicon);\n parentLi.removeAttribute('aria-expanded');\n }\n else {\n _this.updateListProp(mapper_1);\n var id = parentLi.getAttribute('data-uid');\n var nodeData = _this.getNodeObject(id);\n setValue('child', childItems, nodeData);\n _this.listBaseOption.ariaAttributes.level = parseFloat(parentLi.getAttribute('aria-level')) + 1;\n parentLi.appendChild(ListBase.createList(childItems, _this.listBaseOption));\n _this.expandNode(parentLi, eicon);\n _this.ensureCheckNode(parentLi);\n _this.finalizeNode(parentLi);\n _this.renderSubChild(parentLi, expandChild);\n }\n if (_this.treeList.length === 0 && !_this.isLoaded) {\n _this.finalize();\n }\n });\n }\n else {\n childItems = this.getChildNodes(this.treeData, parentLi.getAttribute('data-uid'));\n this.currentLoadData = childItems;\n if (isNOU(childItems) || childItems.length === 0) {\n detach(eicon);\n parentLi.removeAttribute('aria-expanded');\n return;\n }\n else {\n this.listBaseOption.ariaAttributes.level = parseFloat(parentLi.getAttribute('aria-level')) + 1;\n parentLi.appendChild(ListBase.createList(this.getSortedData(childItems), this.listBaseOption));\n this.expandNode(parentLi, eicon);\n this.ensureCheckNode(parentLi);\n this.finalizeNode(parentLi);\n this.renderSubChild(parentLi, expandChild);\n }\n }\n };\n TreeView.prototype.ensureCheckNode = function (element) {\n if (this.showCheckBox) {\n this.ensureChildCheckState(element);\n this.ensureParentCheckState(element);\n }\n this.currentLoadData = null;\n };\n TreeView.prototype.getFields = function (mapper, nodeLevel, dataLevel) {\n if (nodeLevel === dataLevel) {\n return mapper;\n }\n else {\n return this.getFields(this.getChildMapper(mapper), nodeLevel, dataLevel + 1);\n }\n };\n TreeView.prototype.getChildFields = function (mapper, nodeLevel, dataLevel) {\n var childData;\n if (nodeLevel === dataLevel) {\n return this.getChildMapper(mapper);\n }\n else {\n return this.getChildFields(this.getChildMapper(mapper), nodeLevel, dataLevel + 1);\n }\n };\n TreeView.prototype.getChildMapper = function (mapper) {\n return (typeof mapper.child === 'string' || isNOU(mapper.child)) ? mapper : mapper.child;\n };\n TreeView.prototype.getChildNodes = function (obj, parentId, isRoot) {\n if (isRoot === void 0) { isRoot = false; }\n var childNodes;\n if (isNOU(obj)) {\n return childNodes;\n }\n else if (this.dataType === 1) {\n return this.getChildGroup(this.groupedData, parentId, isRoot);\n }\n else {\n if (typeof this.fields.child === 'string') {\n for (var i = 0, objlen = obj.length; i < objlen; i++) {\n var dataId = getValue(this.fields.id, obj[i]);\n if (dataId && dataId.toString() === parentId) {\n return getValue(this.fields.child, obj[i]);\n }\n else if (!isNOU(getValue(this.fields.child, obj[i]))) {\n childNodes = this.getChildNodes(getValue(this.fields.child, obj[i]), parentId);\n if (childNodes !== undefined) {\n break;\n }\n }\n }\n }\n }\n return childNodes;\n };\n TreeView.prototype.getChildGroup = function (data, parentId, isRoot) {\n var childNodes;\n if (isNOU(data)) {\n return childNodes;\n }\n for (var i = 0, objlen = data.length; i < objlen; i++) {\n if (!isNOU(data[i][0]) && !isNOU(getValue(this.fields.parentID, data[i][0]))) {\n if (getValue(this.fields.parentID, data[i][0]).toString() === parentId) {\n return data[i];\n }\n }\n else if (isRoot) {\n return data[i];\n }\n else {\n return [];\n }\n }\n return childNodes;\n };\n TreeView.prototype.renderSubChild = function (element, expandChild) {\n if (expandChild) {\n var cIcons = selectAll('.' + EXPANDABLE, element);\n for (var i = 0, len = cIcons.length; i < len; i++) {\n var icon = cIcons[i];\n var curLi = closest(icon, '.' + LISTITEM);\n this.expandArgs = this.getExpandEvent(curLi, null);\n this.trigger('nodeExpanding', this.expandArgs);\n this.renderChildNodes(curLi, expandChild);\n }\n }\n };\n TreeView.prototype.toggleSelect = function (li, e, multiSelect) {\n if (!li.classList.contains('e-disable')) {\n if (this.allowMultiSelection && ((e && e.ctrlKey) || multiSelect) && this.isActive(li)) {\n this.unselectNode(li, e);\n }\n else {\n this.selectNode(li, e, multiSelect);\n }\n }\n };\n TreeView.prototype.isActive = function (li) {\n return li.classList.contains(ACTIVE) ? true : false;\n };\n TreeView.prototype.selectNode = function (li, e, multiSelect) {\n if (isNOU(li) || (!this.allowMultiSelection && this.isActive(li) && !isNOU(e))) {\n this.setFocusElement(li);\n return;\n }\n var eventArgs;\n if (this.isLoaded) {\n eventArgs = this.getSelectEvent(li, 'select', e);\n this.trigger('nodeSelecting', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n }\n if (!this.allowMultiSelection || (!multiSelect && (!e || (e && !e.ctrlKey)))) {\n this.removeSelectAll();\n }\n if (this.allowMultiSelection && e && e.shiftKey) {\n if (!this.startNode) {\n this.startNode = li;\n }\n var startIndex = this.liList.indexOf(this.startNode);\n var endIndex = this.liList.indexOf(li);\n if (startIndex > endIndex) {\n var temp = startIndex;\n startIndex = endIndex;\n endIndex = temp;\n }\n for (var i = startIndex; i <= endIndex; i++) {\n var currNode = this.liList[i];\n if (isVisible(currNode) && !currNode.classList.contains('e-disable')) {\n this.addSelect(currNode);\n }\n }\n }\n else {\n this.startNode = li;\n this.addSelect(li);\n }\n this.setFocusElement(li);\n if (this.isLoaded) {\n this.trigger('nodeSelected', eventArgs);\n }\n };\n TreeView.prototype.unselectNode = function (li, e) {\n var eventArgs;\n if (this.isLoaded) {\n eventArgs = this.getSelectEvent(li, 'un-select', e);\n this.trigger('nodeSelecting', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n }\n this.removeSelect(li);\n this.setFocusElement(li);\n if (this.isLoaded) {\n this.trigger('nodeSelected', eventArgs);\n }\n };\n TreeView.prototype.setFocusElement = function (li) {\n if (!isNOU(li)) {\n var focusedNode = this.getFocusedNode();\n if (focusedNode) {\n removeClass([focusedNode], FOCUS);\n }\n addClass([li], FOCUS);\n this.updateIdAttr(focusedNode, li);\n }\n };\n TreeView.prototype.addSelect = function (liEle) {\n liEle.setAttribute('aria-selected', 'true');\n addClass([liEle], ACTIVE);\n var id = liEle.getAttribute('data-uid');\n if (!isNOU(id) && this.selectedNodes.indexOf(id) === -1) {\n this.selectedNodes.push(id);\n }\n };\n TreeView.prototype.removeSelect = function (liEle) {\n if (this.allowMultiSelection) {\n liEle.setAttribute('aria-selected', 'false');\n }\n else {\n liEle.removeAttribute('aria-selected');\n }\n removeClass([liEle], ACTIVE);\n var index = this.selectedNodes.indexOf(liEle.getAttribute('data-uid'));\n if (index > -1) {\n this.selectedNodes.splice(index, 1);\n }\n };\n TreeView.prototype.removeSelectAll = function () {\n var selectedLI = this.element.querySelectorAll('.' + ACTIVE);\n for (var _i = 0, selectedLI_1 = selectedLI; _i < selectedLI_1.length; _i++) {\n var ele = selectedLI_1[_i];\n if (this.allowMultiSelection) {\n ele.setAttribute('aria-selected', 'false');\n }\n else {\n ele.removeAttribute('aria-selected');\n }\n }\n removeClass(selectedLI, ACTIVE);\n this.setProperties({ selectedNodes: [] }, true);\n };\n TreeView.prototype.getSelectEvent = function (currLi, action, e) {\n var nodeData = this.getNodeData(currLi);\n return { action: action, cancel: false, isInteracted: isNOU(e) ? false : true, node: currLi, nodeData: nodeData };\n };\n TreeView.prototype.setExpandOnType = function () {\n this.expandOnType = (this.expandOn === 'Auto') ? (Browser.isDevice ? 'Click' : 'DblClick') : this.expandOn;\n };\n TreeView.prototype.expandHandler = function (e) {\n var target = e.originalEvent.target;\n if (!target || target.classList.contains(INPUT) || target.classList.contains(ROOT) ||\n target.classList.contains(PARENTITEM) || target.classList.contains(LISTITEM) ||\n target.classList.contains(ICON) || this.showCheckBox && closest(target, '.' + CHECKBOXWRAP)) {\n return;\n }\n else {\n this.expandCollapseAction(closest(target, '.' + LISTITEM), e);\n }\n };\n TreeView.prototype.expandCollapseAction = function (currLi, e) {\n var icon = select('div.' + ICON, currLi);\n if (!icon || icon.classList.contains(PROCESS)) {\n return;\n }\n else {\n var classList = icon.classList;\n if (classList.contains(EXPANDABLE)) {\n this.expandAction(currLi, icon, e);\n }\n else {\n this.collapseNode(currLi, icon, e);\n }\n }\n };\n TreeView.prototype.expandAction = function (currLi, icon, e, expandChild) {\n if (icon.classList.contains(PROCESS)) {\n return;\n }\n else {\n addClass([icon], PROCESS);\n }\n if (this.isLoaded) {\n this.expandArgs = this.getExpandEvent(currLi, e);\n this.trigger('nodeExpanding', this.expandArgs);\n if (this.expandArgs.cancel) {\n removeClass([icon], PROCESS);\n return;\n }\n }\n var ul = select('.' + PARENTITEM, currLi);\n if (ul && ul.nodeName === 'UL') {\n this.expandNode(currLi, icon);\n }\n else {\n this.renderChildNodes(currLi, expandChild);\n }\n };\n TreeView.prototype.keyActionHandler = function (e) {\n var target = e.target;\n var focusedNode = this.getFocusedNode();\n if (target && target.classList.contains(INPUT)) {\n var inpEle = target;\n if (e.action === 'enter') {\n inpEle.blur();\n this.element.focus();\n addClass([focusedNode], HOVER);\n }\n else if (e.action === 'escape') {\n inpEle.value = this.oldText;\n inpEle.blur();\n this.element.focus();\n addClass([focusedNode], HOVER);\n }\n return;\n }\n e.preventDefault();\n var eventArgs = {\n cancel: false,\n event: e,\n node: focusedNode,\n };\n this.trigger('keyPress', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n switch (e.action) {\n case 'space':\n if (this.showCheckBox) {\n this.checkNode(e);\n }\n break;\n case 'moveRight':\n this.openNode(this.enableRtl ? false : true, e);\n break;\n case 'moveLeft':\n this.openNode(this.enableRtl ? true : false, e);\n break;\n case 'shiftDown':\n this.shiftKeySelect(true, e);\n break;\n case 'moveDown':\n case 'ctrlDown':\n case 'csDown':\n this.navigateNode(true);\n break;\n case 'shiftUp':\n this.shiftKeySelect(false, e);\n break;\n case 'moveUp':\n case 'ctrlUp':\n case 'csUp':\n this.navigateNode(false);\n break;\n case 'home':\n case 'shiftHome':\n case 'ctrlHome':\n case 'csHome':\n this.navigateRootNode(true);\n break;\n case 'end':\n case 'shiftEnd':\n case 'ctrlEnd':\n case 'csEnd':\n this.navigateRootNode(false);\n break;\n case 'enter':\n case 'ctrlEnter':\n case 'shiftEnter':\n case 'csEnter':\n this.toggleSelect(focusedNode, e);\n break;\n case 'f2':\n if (this.allowEditing && !focusedNode.classList.contains('e-disable')) {\n this.createTextbox(focusedNode, e);\n }\n break;\n case 'ctrlA':\n if (this.allowMultiSelection) {\n var sNodes = selectAll('.' + LISTITEM + ':not(.' + ACTIVE + ')', this.element);\n this.selectGivenNodes(sNodes);\n }\n break;\n }\n };\n TreeView.prototype.navigateToFocus = function (isUp) {\n var focusNode = this.getFocusedNode().querySelector('.' + TEXTWRAP);\n var pos = focusNode.getBoundingClientRect();\n var parent = this.getScrollParent(this.element);\n if (!isNOU(parent)) {\n var parentPos = parent.getBoundingClientRect();\n if (pos.bottom > parentPos.bottom) {\n parent.scrollTop += pos.bottom - parentPos.bottom;\n }\n else if (pos.top < parentPos.top) {\n parent.scrollTop -= parentPos.top - pos.top;\n }\n }\n var isVisible = this.isVisibleInViewport(focusNode);\n if (!isVisible) {\n focusNode.scrollIntoView(isUp);\n }\n };\n TreeView.prototype.isVisibleInViewport = function (txtWrap) {\n var pos = txtWrap.getBoundingClientRect();\n return (pos.top >= 0 && pos.left >= 0 && pos.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n pos.right <= (window.innerWidth || document.documentElement.clientWidth));\n };\n TreeView.prototype.getScrollParent = function (node) {\n if (isNOU(node)) {\n return null;\n }\n return (node.scrollHeight > node.clientHeight) ? node : this.getScrollParent(node.parentElement);\n };\n TreeView.prototype.shiftKeySelect = function (isTowards, e) {\n if (this.allowMultiSelection) {\n var focusedNode = this.getFocusedNode();\n var nextNode = isTowards ? this.getNextNode(focusedNode) : this.getPrevNode(focusedNode);\n this.removeHover();\n this.setFocusElement(nextNode);\n this.toggleSelect(nextNode, e, false);\n this.navigateToFocus(!isTowards);\n }\n else {\n this.navigateNode(isTowards);\n }\n };\n TreeView.prototype.checkNode = function (e) {\n var focusedNode = this.getFocusedNode();\n var checkWrap = select('.' + CHECKBOXWRAP, focusedNode);\n var isChecked = select(' .' + CHECKBOXFRAME, checkWrap).classList.contains(CHECK);\n if (!focusedNode.classList.contains('e-disable')) {\n this.validateCheckNode(checkWrap, isChecked, focusedNode, e);\n }\n };\n TreeView.prototype.validateCheckNode = function (checkWrap, isCheck, li, e) {\n var eventArgs = this.nodeCheckingEvent(checkWrap, isCheck, e);\n if (eventArgs.cancel) {\n return;\n }\n this.changeState(checkWrap, isCheck ? 'uncheck' : 'check', e, true);\n this.ensureChildCheckState(li);\n this.ensureParentCheckState(closest(closest(li, '.' + PARENTITEM), '.' + LISTITEM));\n this.nodeCheckedEvent(checkWrap, isCheck, e);\n };\n TreeView.prototype.openNode = function (toBeOpened, e) {\n var focusedNode = this.getFocusedNode();\n var icon = select('div.' + ICON, focusedNode);\n if (toBeOpened) {\n if (!icon) {\n return;\n }\n else if (icon.classList.contains(EXPANDABLE)) {\n this.expandAction(focusedNode, icon, e);\n }\n else {\n this.focusNextNode(focusedNode, true);\n }\n }\n else {\n if (icon && icon.classList.contains(COLLAPSIBLE)) {\n this.collapseNode(focusedNode, icon, e);\n }\n else {\n var parentLi = closest(closest(focusedNode, '.' + PARENTITEM), '.' + LISTITEM);\n if (!parentLi) {\n return;\n }\n else {\n if (!parentLi.classList.contains('e-disable')) {\n this.setFocus(focusedNode, parentLi);\n this.navigateToFocus(true);\n }\n }\n }\n }\n };\n TreeView.prototype.navigateNode = function (isTowards) {\n var focusedNode = this.getFocusedNode();\n this.focusNextNode(focusedNode, isTowards);\n };\n TreeView.prototype.navigateRootNode = function (isBackwards) {\n var focusedNode = this.getFocusedNode();\n var rootNode = isBackwards ? this.getRootNode() : this.getEndNode();\n if (!rootNode.classList.contains('e-disable')) {\n this.setFocus(focusedNode, rootNode);\n this.navigateToFocus(isBackwards);\n }\n };\n TreeView.prototype.getFocusedNode = function () {\n var fNode = select('.' + LISTITEM + '.' + FOCUS, this.element);\n return isNOU(fNode) ? select('.' + LISTITEM, this.element) : fNode;\n };\n TreeView.prototype.focusNextNode = function (li, isTowards) {\n var nextNode = isTowards ? this.getNextNode(li) : this.getPrevNode(li);\n this.setFocus(li, nextNode);\n this.navigateToFocus(!isTowards);\n if (nextNode.classList.contains('e-disable')) {\n var lastChild = nextNode.lastChild;\n if (nextNode.previousSibling == null && nextNode.classList.contains('e-level-1')) {\n this.focusNextNode(nextNode, true);\n }\n else if (nextNode.nextSibling == null && nextNode.classList.contains('e-node-collapsed')) {\n this.focusNextNode(nextNode, false);\n }\n else if (nextNode.nextSibling == null && lastChild.classList.contains('e-text-content')) {\n this.focusNextNode(nextNode, false);\n }\n else {\n this.focusNextNode(nextNode, isTowards);\n }\n }\n };\n TreeView.prototype.getNextNode = function (li) {\n var index = this.liList.indexOf(li);\n var nextNode;\n do {\n index++;\n nextNode = this.liList[index];\n if (isNOU(nextNode)) {\n return li;\n }\n } while (!isVisible(nextNode));\n return nextNode;\n };\n TreeView.prototype.getPrevNode = function (li) {\n var index = this.liList.indexOf(li);\n var prevNode;\n do {\n index--;\n prevNode = this.liList[index];\n if (isNOU(prevNode)) {\n return li;\n }\n } while (!isVisible(prevNode));\n return prevNode;\n };\n TreeView.prototype.getRootNode = function () {\n var index = 0;\n var rootNode;\n do {\n rootNode = this.liList[index];\n index++;\n } while (!isVisible(rootNode));\n return rootNode;\n };\n TreeView.prototype.getEndNode = function () {\n var index = this.liList.length - 1;\n var endNode;\n do {\n endNode = this.liList[index];\n index--;\n } while (!isVisible(endNode));\n return endNode;\n };\n TreeView.prototype.setFocus = function (preNode, nextNode) {\n removeClass([preNode], [HOVER, FOCUS]);\n if (!nextNode.classList.contains('e-disable')) {\n addClass([nextNode], [HOVER, FOCUS]);\n this.updateIdAttr(preNode, nextNode);\n }\n };\n TreeView.prototype.updateIdAttr = function (preNode, nextNode) {\n this.element.removeAttribute('aria-activedescendant');\n if (preNode) {\n preNode.removeAttribute('id');\n }\n nextNode.setAttribute('id', this.element.id + '_active');\n this.element.setAttribute('aria-activedescendant', this.element.id + '_active');\n };\n TreeView.prototype.focusIn = function () {\n if (!this.mouseDownStatus) {\n addClass([this.getFocusedNode()], HOVER);\n }\n this.mouseDownStatus = false;\n };\n TreeView.prototype.focusOut = function () {\n removeClass([this.getFocusedNode()], HOVER);\n };\n TreeView.prototype.onMouseOver = function (e) {\n var target = e.target;\n var classList = target.classList;\n var currentLi = closest(target, '.' + LISTITEM);\n if (!currentLi || classList.contains(PARENTITEM) || classList.contains(LISTITEM)) {\n this.removeHover();\n return;\n }\n else {\n if (currentLi && !currentLi.classList.contains('e-disable')) {\n this.setHover(currentLi);\n }\n }\n };\n TreeView.prototype.setHover = function (li) {\n if (!li.classList.contains(HOVER)) {\n this.removeHover();\n addClass([li], HOVER);\n }\n };\n ;\n TreeView.prototype.onMouseLeave = function (e) {\n this.removeHover();\n };\n TreeView.prototype.removeHover = function () {\n var hoveredNode = selectAll('.' + HOVER, this.element);\n if (hoveredNode && hoveredNode.length) {\n removeClass(hoveredNode, HOVER);\n }\n };\n ;\n TreeView.prototype.getNodeData = function (currLi, fromDS) {\n if (!isNOU(currLi) && currLi.classList.contains(LISTITEM) && closest(currLi, '.' + CONTROL).classList.contains(ROOT)) {\n var id = currLi.getAttribute('data-uid');\n var text = this.getText(currLi, fromDS);\n var pNode = closest(currLi.parentNode, '.' + LISTITEM);\n var pid = pNode ? pNode.getAttribute('data-uid') : null;\n var selected = currLi.classList.contains(ACTIVE);\n var expanded = (currLi.getAttribute('aria-expanded') === 'true') ? true : false;\n var checked = null;\n if (this.showCheckBox) {\n checked = select('.' + CHECKBOXWRAP, currLi).getAttribute('aria-checked');\n }\n return { id: id, text: text, parentID: pid, selected: selected, expanded: expanded, isChecked: checked };\n }\n return { id: '', text: '', parentID: '', selected: '', expanded: '', isChecked: '' };\n };\n TreeView.prototype.getText = function (currLi, fromDS) {\n if (fromDS) {\n var nodeData = this.getNodeObject(currLi.getAttribute('data-uid'));\n var level = parseFloat(currLi.getAttribute('aria-level'));\n var nodeFields = this.getFields(this.fields, level, 1);\n return getValue(nodeFields.text, nodeData);\n }\n return select('.' + LISTTEXT, currLi).textContent;\n };\n TreeView.prototype.getExpandEvent = function (currLi, e) {\n var nodeData = this.getNodeData(currLi);\n return { cancel: false, isInteracted: isNOU(e) ? false : true, node: currLi, nodeData: nodeData, event: e };\n };\n TreeView.prototype.reRenderNodes = function () {\n this.element.innerHTML = '';\n this.setTouchClass();\n this.setProperties({ selectedNodes: [], checkedNodes: [] }, true);\n this.isLoaded = false;\n this.setDataBinding();\n };\n TreeView.prototype.setCssClass = function (oldClass, newClass) {\n if (!isNOU(oldClass) && oldClass !== '') {\n removeClass([this.element], oldClass.split(' '));\n }\n if (!isNOU(newClass) && newClass !== '') {\n addClass([this.element], newClass.split(' '));\n }\n };\n TreeView.prototype.editingHandler = function (e) {\n var target = e.target;\n if (!target || target.classList.contains(ROOT) || target.classList.contains(PARENTITEM) ||\n target.classList.contains(LISTITEM) || target.classList.contains(ICON) ||\n target.classList.contains(INPUT) || target.classList.contains(INPUTGROUP)) {\n return;\n }\n else {\n var liEle = closest(target, '.' + LISTITEM);\n this.createTextbox(liEle, e);\n }\n };\n TreeView.prototype.createTextbox = function (liEle, e) {\n var oldInpEle = select('.' + TREEINPUT, this.element);\n if (oldInpEle) {\n oldInpEle.blur();\n }\n var textEle = select('.' + LISTTEXT, liEle);\n this.updateOldText(liEle);\n var innerEle = createElement('input', { className: TREEINPUT, attrs: { value: this.oldText } });\n var eventArgs = this.getEditEvent(liEle, null, innerEle.outerHTML);\n this.trigger('nodeEditing', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n var inpWidth = textEle.offsetWidth + 5;\n var style = 'width:' + inpWidth + 'px';\n addClass([liEle], EDITING);\n textEle.innerHTML = eventArgs.innerHtml;\n var inpEle = select('.' + TREEINPUT, textEle);\n this.inputObj = Input.createInput({\n element: inpEle,\n properties: {\n enableRtl: this.enableRtl,\n }\n });\n this.inputObj.container.setAttribute('style', style);\n inpEle.focus();\n var inputEle = inpEle;\n inputEle.setSelectionRange(0, inputEle.value.length);\n this.wireInputEvents(inpEle);\n };\n TreeView.prototype.updateOldText = function (liEle) {\n var id = liEle.getAttribute('data-uid');\n this.editData = this.getNodeObject(id);\n var level = parseFloat(liEle.getAttribute('aria-level'));\n this.editFields = this.getFields(this.fields, level, 1);\n this.oldText = getValue(this.editFields.text, this.editData);\n };\n TreeView.prototype.inputFocusOut = function (e) {\n if (!select('.' + TREEINPUT, this.element)) {\n return;\n }\n var target = e.target;\n var newText = target.value;\n var txtEle = closest(target, '.' + LISTTEXT);\n var liEle = closest(target, '.' + LISTITEM);\n detach(this.inputObj.container);\n this.appendNewText(liEle, txtEle, newText, true);\n };\n TreeView.prototype.appendNewText = function (liEle, txtEle, newText, isInput) {\n var eventArgs = this.getEditEvent(liEle, newText, null);\n this.trigger('nodeEdited', eventArgs);\n newText = eventArgs.cancel ? eventArgs.oldText : eventArgs.newText;\n var newData = setValue(this.editFields.text, newText, this.editData);\n if (!isNOU(this.nodeTemplateFn)) {\n txtEle.innerHTML = '';\n append(this.nodeTemplateFn(newData), txtEle);\n }\n else {\n txtEle.innerHTML = newText;\n }\n if (isInput) {\n removeClass([liEle], EDITING);\n txtEle.focus();\n }\n };\n TreeView.prototype.getElement = function (ele) {\n if (isNOU(ele)) {\n return null;\n }\n else if (typeof ele === 'string') {\n return this.element.querySelector('[data-uid=\"' + ele + '\"]');\n }\n else if (typeof ele === 'object') {\n return ele;\n }\n else {\n return null;\n }\n };\n TreeView.prototype.getEditEvent = function (liEle, newText, inpEle) {\n var data = this.getNodeData(liEle);\n return { cancel: false, newText: newText, node: liEle, nodeData: data, oldText: this.oldText, innerHtml: inpEle };\n };\n TreeView.prototype.getNodeObject = function (id) {\n var childNodes;\n if (isNOU(id)) {\n return childNodes;\n }\n else if (this.dataType === 1) {\n for (var i = 0, objlen = this.treeData.length; i < objlen; i++) {\n var dataId = getValue(this.fields.id, this.treeData[i]);\n if (!isNOU(this.treeData[i]) && !isNOU(dataId) && dataId.toString() === id) {\n return this.treeData[i];\n }\n }\n }\n else {\n return this.getChildNodeObject(this.treeData, this.fields, id);\n }\n return childNodes;\n };\n TreeView.prototype.getChildNodeObject = function (obj, mapper, id) {\n var newList;\n if (isNOU(obj)) {\n return newList;\n }\n for (var i = 0, objlen = obj.length; i < objlen; i++) {\n var dataId = getValue(mapper.id, obj[i]);\n if (obj[i] && dataId && dataId.toString() === id) {\n return obj[i];\n }\n else if (typeof mapper.child === 'string' && !isNOU(getValue(mapper.child, obj[i]))) {\n var childData = getValue(mapper.child, obj[i]);\n newList = this.getChildNodeObject(childData, this.getChildMapper(mapper), id);\n if (newList !== undefined) {\n break;\n }\n }\n else if (this.fields.dataSource instanceof DataManager && !isNOU(getValue('child', obj[i]))) {\n var child = 'child';\n newList = this.getChildNodeObject(getValue(child, obj[i]), this.getChildMapper(mapper), id);\n if (newList !== undefined) {\n break;\n }\n }\n }\n return newList;\n };\n TreeView.prototype.setDragAndDrop = function (toBind) {\n if (toBind) {\n this.initializeDrag();\n }\n else {\n this.destroyDrag();\n }\n };\n TreeView.prototype.initializeDrag = function () {\n var _this = this;\n var virtualEle;\n this.dragObj = new Draggable(this.element, {\n enableTailMode: true,\n enableAutoScroll: true,\n dragTarget: '.' + TEXTWRAP,\n helper: function (e) {\n _this.dragTarget = e.sender.target;\n var dragRoot = closest(_this.dragTarget, '.' + ROOT);\n var dragWrap = closest(_this.dragTarget, '.' + TEXTWRAP);\n _this.dragLi = closest(_this.dragTarget, '.' + LISTITEM);\n if (_this.fullRowSelect && !dragWrap && _this.dragTarget.classList.contains(FULLROW)) {\n dragWrap = _this.dragTarget.nextElementSibling;\n }\n if (!_this.dragTarget || !e.element.isSameNode(dragRoot) || !dragWrap ||\n _this.dragTarget.classList.contains(ROOT) || _this.dragTarget.classList.contains(PARENTITEM) ||\n _this.dragTarget.classList.contains(LISTITEM) || _this.dragLi.classList.contains('e-disable')) {\n return false;\n }\n var cloneEle = (dragWrap.cloneNode(true));\n if (isNOU(select('div.' + ICON, cloneEle))) {\n var icon = createElement('div', { className: ICON + ' ' + EXPANDABLE });\n cloneEle.insertBefore(icon, cloneEle.children[0]);\n }\n var cssClass = DRAGITEM + ' ' + ROOT + ' ' + _this.cssClass + ' ' + (_this.enableRtl ? RTL : '');\n virtualEle = createElement('div', { className: cssClass });\n virtualEle.appendChild(cloneEle);\n var nLen = _this.selectedNodes.length;\n if (nLen > 1 && _this.allowMultiSelection && _this.dragLi.classList.contains(ACTIVE)) {\n var cNode = createElement('span', { className: DROPCOUNT, innerHTML: '' + nLen });\n virtualEle.appendChild(cNode);\n }\n document.body.appendChild(virtualEle);\n document.body.style.cursor = '';\n _this.dragData = _this.getNodeData(_this.dragLi);\n return virtualEle;\n },\n dragStart: function (e) {\n addClass([_this.element], DRAGGING);\n var eventArgs = _this.getDragEvent(e.event, _this, null, e.target);\n if (eventArgs.draggedNode.classList.contains(EDITING)) {\n eventArgs.cancel = true;\n }\n else {\n _this.trigger('nodeDragStart', eventArgs);\n }\n if (eventArgs.cancel) {\n detach(virtualEle);\n removeClass([_this.element], DRAGGING);\n _this.dragStartAction = false;\n }\n else {\n _this.dragStartAction = true;\n }\n },\n drag: function (e) {\n _this.dragObj.setProperties({ cursorAt: { top: (!isNOU(e.event.targetTouches) || Browser.isDevice) ? 60 : -20 } });\n _this.dragAction(e, virtualEle);\n },\n dragStop: function (e) {\n removeClass([_this.element], DRAGGING);\n _this.removeVirtualEle();\n var dropTarget = e.target;\n var dropRoot = (closest(dropTarget, '.' + DROPPABLE));\n if (!dropTarget || !dropRoot || dropTarget.classList.contains(ROOT)) {\n detach(e.helper);\n document.body.style.cursor = '';\n }\n var eventArgs = _this.getDragEvent(e.event, _this, dropTarget, dropTarget);\n _this.trigger('nodeDragStop', eventArgs);\n if (eventArgs.cancel) {\n if (e.helper.parentNode) {\n detach(e.helper);\n }\n document.body.style.cursor = '';\n }\n _this.dragStartAction = false;\n }\n });\n this.dropObj = new Droppable(this.element, {\n out: function (e) {\n if (!isNOU(e) && !e.target.classList.contains(SIBLING)) {\n document.body.style.cursor = 'not-allowed';\n }\n },\n over: function (e) {\n document.body.style.cursor = '';\n },\n drop: function (e) {\n _this.dropAction(e);\n }\n });\n };\n TreeView.prototype.dragAction = function (e, virtualEle) {\n var dropRoot = closest(e.target, '.' + DROPPABLE);\n var dropWrap = closest(e.target, '.' + TEXTWRAP);\n var icon = select('div.' + ICON, virtualEle);\n removeClass([icon], [DROPIN, DROPNEXT, DROPOUT, NODROP]);\n this.removeVirtualEle();\n document.body.style.cursor = '';\n var classList = e.target.classList;\n if (this.fullRowSelect && !dropWrap && !isNOU(classList) && classList.contains(FULLROW)) {\n dropWrap = e.target.nextElementSibling;\n }\n if (dropRoot) {\n var dropLi = closest(e.target, '.' + LISTITEM);\n if (!dropRoot.classList.contains(ROOT) || (dropWrap &&\n (!dropLi.isSameNode(this.dragLi) && !this.isDescendant(this.dragLi, dropLi)))) {\n if (dropLi && e && (e.event.offsetY < 7)) {\n addClass([icon], DROPNEXT);\n var virEle = createElement('div', { className: SIBLING });\n var index = this.fullRowSelect ? (1) : (0);\n dropLi.insertBefore(virEle, dropLi.children[index]);\n }\n else if (dropLi && e && (e.target.offsetHeight > 0 && e.event.offsetY > (e.target.offsetHeight - 10))) {\n addClass([icon], DROPNEXT);\n var virEle = createElement('div', { className: SIBLING });\n var index = this.fullRowSelect ? (2) : (1);\n dropLi.insertBefore(virEle, dropLi.children[index]);\n }\n else {\n addClass([icon], DROPIN);\n }\n }\n else if (e.target.nodeName === 'LI' && (!dropLi.isSameNode(this.dragLi) && !this.isDescendant(this.dragLi, dropLi))) {\n addClass([icon], DROPNEXT);\n this.renderVirtualEle(e);\n }\n else if (e.target.classList.contains(SIBLING)) {\n addClass([icon], DROPNEXT);\n }\n else {\n addClass([icon], DROPOUT);\n }\n }\n else {\n addClass([icon], NODROP);\n document.body.style.cursor = 'not-allowed';\n }\n this.trigger('nodeDragging', this.getDragEvent(e.event, this, e.target, e.target));\n };\n TreeView.prototype.dropAction = function (e) {\n var offsetY = e.event.offsetY;\n var dropTarget = e.target;\n var dragObj;\n var dragInstance = e.dragData.draggable;\n for (var i = 0; i < dragInstance.ej2_instances.length; i++) {\n if (dragInstance.ej2_instances[i] instanceof TreeView_1) {\n dragObj = dragInstance.ej2_instances[i];\n break;\n }\n }\n if (dragObj && dragObj.dragTarget) {\n var dragTarget = dragObj.dragTarget;\n var dragLi = (closest(dragTarget, '.' + LISTITEM));\n var dropLi = (closest(dropTarget, '.' + LISTITEM));\n detach(e.droppedElement);\n document.body.style.cursor = '';\n if (!dropLi || dropLi.isSameNode(dragLi) || this.isDescendant(dragLi, dropLi)) {\n return;\n }\n if (dragObj.allowMultiSelection && (dragLi.classList.contains(ACTIVE) || (offsetY < 7 ||\n (e.target.offsetHeight > 0 && offsetY > (e.target.offsetHeight - 10))))) {\n var sNodes = selectAll('.' + ACTIVE, dragObj.element);\n for (var i = 0; i < sNodes.length; i++) {\n if (dropLi.isSameNode(sNodes[i]) || this.isDescendant(sNodes[i], dropLi)) {\n continue;\n }\n this.appendNode(dropTarget, sNodes[i], dropLi, e, dragObj, offsetY);\n }\n }\n else {\n this.appendNode(dropTarget, dragLi, dropLi, e, dragObj, offsetY);\n }\n }\n this.trigger('nodeDropped', this.getDragEvent(e.event, dragObj, dropTarget, e.target, e.dragData.draggedElement));\n };\n TreeView.prototype.appendNode = function (dropTarget, dragLi, dropLi, e, dragObj, offsetY) {\n if (!dragLi.classList.contains('e-disable') && !dropLi.classList.contains('e-disable')) {\n if (dropTarget.nodeName === 'LI') {\n this.dropAsSiblingNode(dragLi, dropLi, e, dragObj);\n }\n else {\n this.dropAsChildNode(dragLi, dropLi, dragObj, null, e, offsetY);\n }\n }\n };\n TreeView.prototype.dropAsSiblingNode = function (dragLi, dropLi, e, dragObj) {\n var dropUl = closest(dropLi, '.' + PARENTITEM);\n var dragParentUl = closest(dragLi, '.' + PARENTITEM);\n var dragParentLi = closest(dragParentUl, '.' + LISTITEM);\n var pre;\n if (e.target.offsetHeight > 0 && e.event.offsetY > e.target.offsetHeight - 2) {\n pre = false;\n }\n else if (e.event.offsetY < 2) {\n pre = true;\n }\n dropUl.insertBefore(dragLi, pre ? e.target : e.target.nextElementSibling);\n this.updateElement(dragParentUl, dragParentLi);\n this.updateAriaLevel(dragLi);\n if (dragObj.element.id === this.element.id) {\n this.updateList();\n }\n else {\n dragObj.updateInstance();\n this.updateInstance();\n }\n };\n TreeView.prototype.dropAsChildNode = function (dragLi, dropLi, dragObj, index, e, pos) {\n var dragParentUl = closest(dragLi, '.' + PARENTITEM);\n var dragParentLi = closest(dragParentUl, '.' + LISTITEM);\n var dropParentUl = closest(dropLi, '.' + PARENTITEM);\n if (e && (pos < 7)) {\n dropParentUl.insertBefore(dragLi, dropLi);\n }\n else if (e && (e.target.offsetHeight > 0 && pos > (e.target.offsetHeight - 10))) {\n dropParentUl.insertBefore(dragLi, dropLi.nextElementSibling);\n }\n else {\n var dropUl = this.expandParent(dropLi);\n dropUl.insertBefore(dragLi, dropUl.childNodes[index]);\n }\n this.updateElement(dragParentUl, dragParentLi);\n this.updateAriaLevel(dragLi);\n if (dragObj.element.id === this.element.id) {\n this.updateList();\n }\n else {\n dragObj.updateInstance();\n this.updateInstance();\n }\n };\n TreeView.prototype.expandParent = function (dropLi) {\n var dropIcon = select('div.' + ICON, dropLi);\n if (dropIcon && dropIcon.classList.contains(EXPANDABLE)) {\n this.expandAction(dropLi, dropIcon, null);\n }\n var dropUl = select('.' + PARENTITEM, dropLi);\n if (isNOU(dropUl)) {\n this.trigger('nodeExpanding', this.getExpandEvent(dropLi, null));\n if (isNOU(dropIcon)) {\n ListBase.generateIcon(dropLi, COLLAPSIBLE, this.listBaseOption);\n }\n var icon = select('div.' + ICON, dropLi);\n removeClass([icon], EXPANDABLE);\n dropUl = ListBase.generateUL([], null, this.listBaseOption);\n dropLi.appendChild(dropUl);\n dropLi.setAttribute('aria-expanded', 'true');\n removeClass([dropLi], NODECOLLAPSED);\n this.trigger('nodeExpanded', this.getExpandEvent(dropLi, null));\n }\n return dropUl;\n };\n TreeView.prototype.updateElement = function (dragParentUl, dragParentLi) {\n if (dragParentLi && dragParentUl.childElementCount === 0) {\n var dragIcon = select('div.' + ICON, dragParentLi);\n detach(dragParentUl);\n detach(dragIcon);\n dragParentLi.removeAttribute('aria-expanded');\n }\n };\n TreeView.prototype.updateAriaLevel = function (dragLi) {\n var level = this.parents(dragLi, '.' + PARENTITEM).length;\n dragLi.setAttribute('aria-level', '' + level);\n this.updateChildAriaLevel(select('.' + PARENTITEM, dragLi), level + 1);\n };\n TreeView.prototype.updateChildAriaLevel = function (element, level) {\n if (!isNOU(element)) {\n var cNodes = element.childNodes;\n for (var i = 0, len = cNodes.length; i < len; i++) {\n var liEle = cNodes[i];\n liEle.setAttribute('aria-level', '' + level);\n this.updateChildAriaLevel(select('.' + PARENTITEM, liEle), level + 1);\n }\n }\n };\n TreeView.prototype.renderVirtualEle = function (e) {\n var pre;\n if (e.event.offsetY > e.target.offsetHeight - 2) {\n pre = false;\n }\n else if (e.event.offsetY < 2) {\n pre = true;\n }\n var virEle = createElement('div', { className: SIBLING });\n var index = this.fullRowSelect ? (pre ? 1 : 2) : (pre ? 0 : 1);\n e.target.insertBefore(virEle, e.target.children[index]);\n };\n TreeView.prototype.removeVirtualEle = function () {\n var sibEle = select('.' + SIBLING);\n if (sibEle) {\n detach(sibEle);\n }\n };\n TreeView.prototype.destroyDrag = function () {\n if (this.dragObj && this.dropObj) {\n this.dragObj.destroy();\n this.dropObj.destroy();\n }\n };\n TreeView.prototype.getDragEvent = function (event, obj, dropTarget, target, dragNode) {\n var dropLi = dropTarget ? closest(dropTarget, '.' + LISTITEM) : null;\n var dropData = dropLi ? this.getNodeData(dropLi) : null;\n var draggedNode = obj ? obj.dragLi : dragNode;\n var draggedNodeData = obj ? obj.dragData : null;\n return {\n cancel: false,\n event: event,\n draggedNode: draggedNode,\n draggedNodeData: draggedNodeData,\n droppedNode: dropLi,\n droppedNodeData: dropData,\n target: target\n };\n };\n TreeView.prototype.addFullRow = function (toAdd) {\n var len = this.liList.length;\n if (toAdd) {\n for (var i = 0; i < len; i++) {\n this.createFullRow(this.liList[i]);\n }\n }\n else {\n for (var i = 0; i < len; i++) {\n var rowDiv = select('.' + FULLROW, this.liList[i]);\n detach(rowDiv);\n }\n }\n };\n TreeView.prototype.createFullRow = function (item) {\n var rowDiv = createElement('div', { className: FULLROW });\n item.insertBefore(rowDiv, item.childNodes[0]);\n };\n TreeView.prototype.addMultiSelect = function (toAdd) {\n if (toAdd) {\n var liEles = selectAll('.' + LISTITEM + ':not([aria-selected=\"true\"])', this.element);\n for (var _i = 0, liEles_1 = liEles; _i < liEles_1.length; _i++) {\n var ele = liEles_1[_i];\n ele.setAttribute('aria-selected', 'false');\n }\n }\n else {\n var liEles = selectAll('.' + LISTITEM + '[aria-selected=\"false\"]', this.element);\n for (var _a = 0, liEles_2 = liEles; _a < liEles_2.length; _a++) {\n var ele = liEles_2[_a];\n ele.removeAttribute('aria-selected');\n }\n }\n };\n TreeView.prototype.collapseByLevel = function (element, level, excludeHiddenNodes) {\n if (level > 0 && !isNOU(element)) {\n var cNodes = this.getVisibleNodes(excludeHiddenNodes, element.childNodes);\n for (var i = 0, len = cNodes.length; i < len; i++) {\n var liEle = cNodes[i];\n var icon = select('.' + COLLAPSIBLE, select('.' + TEXTWRAP, liEle));\n if (!isNOU(icon)) {\n this.collapseNode(liEle, icon, null);\n }\n this.collapseByLevel(select('.' + PARENTITEM, liEle), level - 1, excludeHiddenNodes);\n }\n }\n };\n TreeView.prototype.collapseAllNodes = function (excludeHiddenNodes) {\n var cIcons = this.getVisibleNodes(excludeHiddenNodes, selectAll('.' + COLLAPSIBLE, this.element));\n for (var i = 0, len = cIcons.length; i < len; i++) {\n var icon = cIcons[i];\n var liEle = closest(icon, '.' + LISTITEM);\n this.collapseNode(liEle, icon, null);\n }\n };\n TreeView.prototype.expandByLevel = function (element, level, excludeHiddenNodes) {\n if (level > 0 && !isNOU(element)) {\n var eNodes = this.getVisibleNodes(excludeHiddenNodes, element.childNodes);\n for (var i = 0, len = eNodes.length; i < len; i++) {\n var liEle = eNodes[i];\n var icon = select('.' + EXPANDABLE, select('.' + TEXTWRAP, liEle));\n if (!isNOU(icon)) {\n this.expandAction(liEle, icon, null);\n }\n this.expandByLevel(select('.' + PARENTITEM, liEle), level - 1, excludeHiddenNodes);\n }\n }\n };\n TreeView.prototype.expandAllNodes = function (excludeHiddenNodes) {\n var eIcons = this.getVisibleNodes(excludeHiddenNodes, selectAll('.' + EXPANDABLE, this.element));\n for (var i = 0, len = eIcons.length; i < len; i++) {\n var icon = eIcons[i];\n var liEle = closest(icon, '.' + LISTITEM);\n this.expandAction(liEle, icon, null, true);\n }\n };\n TreeView.prototype.getVisibleNodes = function (excludeHiddenNodes, nodes) {\n var vNodes = Array.prototype.slice.call(nodes);\n if (excludeHiddenNodes) {\n for (var i = 0; i < vNodes.length; i++) {\n if (!isVisible(vNodes[i])) {\n vNodes.splice(i, 1);\n i--;\n }\n }\n }\n return vNodes;\n };\n TreeView.prototype.removeNode = function (node) {\n var dragParentUl = closest(node, '.' + PARENTITEM);\n var dragParentLi = closest(dragParentUl, '.' + LISTITEM);\n detach(node);\n this.updateElement(dragParentUl, dragParentLi);\n this.updateInstance();\n };\n TreeView.prototype.updateInstance = function () {\n this.updateList();\n this.updateSelectedNodes();\n };\n TreeView.prototype.updateList = function () {\n this.liList = Array.prototype.slice.call(selectAll('.' + LISTITEM, this.element));\n };\n TreeView.prototype.updateSelectedNodes = function () {\n this.setProperties({ selectedNodes: [] }, true);\n var sNodes = selectAll('.' + ACTIVE, this.element);\n this.selectGivenNodes(sNodes);\n };\n TreeView.prototype.doGivenAction = function (nodes, selector, toExpand) {\n for (var i = 0, len = nodes.length; i < len; i++) {\n var liEle = this.getElement(nodes[i]);\n if (isNOU(liEle)) {\n continue;\n }\n var icon = select('.' + selector, select('.' + TEXTWRAP, liEle));\n if (!isNOU(icon)) {\n toExpand ? this.expandAction(liEle, icon, null) : this.collapseNode(liEle, icon, null);\n }\n }\n };\n TreeView.prototype.addGivenNodes = function (nodes, dropLi, index, isRemote) {\n var level = dropLi ? parseFloat(dropLi.getAttribute('aria-level')) + 1 : 1;\n if (isRemote) {\n this.updateMapper(level);\n }\n var li = ListBase.createListItemFromJson(nodes, this.listBaseOption, level);\n var dropUl = dropLi ? this.expandParent(dropLi) : select('.' + PARENTITEM, this.element);\n var refNode = dropUl.childNodes[index];\n for (var i = 0; i < li.length; i++) {\n dropUl.insertBefore(li[i], refNode);\n }\n this.finalizeNode(dropUl);\n };\n TreeView.prototype.updateMapper = function (level) {\n var mapper = (level === 1) ? this.fields : this.getChildFields(this.fields, level - 1, 1);\n this.updateListProp(mapper);\n };\n TreeView.prototype.updateListProp = function (mapper) {\n var prop = this.getActualProperties(mapper);\n this.listBaseOption.fields = prop;\n this.listBaseOption.fields.url = prop.hasOwnProperty('navigateUrl') ? prop.navigateUrl : 'navigateUrl';\n };\n TreeView.prototype.doDisableAction = function (nodes) {\n for (var i = 0, len = nodes.length; i < len; i++) {\n var liEle = this.getElement(nodes[i]);\n if (isNOU(liEle)) {\n continue;\n }\n liEle.setAttribute('aria-disabled', 'true');\n addClass([liEle], DISABLE);\n }\n };\n TreeView.prototype.doEnableAction = function (nodes) {\n for (var i = 0, len = nodes.length; i < len; i++) {\n var liEle = this.getElement(nodes[i]);\n if (isNOU(liEle)) {\n continue;\n }\n liEle.removeAttribute('aria-disabled');\n removeClass([liEle], DISABLE);\n }\n };\n TreeView.prototype.setTouchClass = function () {\n var ele = closest(this.element, '.' + BIGGER);\n this.touchClass = isNOU(ele) ? '' : SMALL;\n };\n TreeView.prototype.wireInputEvents = function (inpEle) {\n EventHandler.add(inpEle, 'blur', this.inputFocusOut, this);\n };\n TreeView.prototype.wireEditingEvents = function (toBind) {\n if (toBind) {\n var proxy_1 = this;\n this.touchEditObj = new Touch(this.element, {\n tap: function (e) {\n if (e.tapCount === 2) {\n e.originalEvent.preventDefault();\n proxy_1.editingHandler(e.originalEvent);\n }\n }\n });\n }\n else {\n if (this.touchEditObj) {\n this.touchEditObj.destroy();\n }\n }\n };\n TreeView.prototype.wireClickEvent = function (toBind) {\n if (toBind) {\n var proxy_2 = this;\n this.touchClickObj = new Touch(this.element, {\n tap: function (e) {\n proxy_2.clickHandler(e);\n }\n });\n }\n else {\n if (this.touchClickObj) {\n this.touchClickObj.destroy();\n }\n }\n };\n TreeView.prototype.wireExpandOnEvent = function (toBind) {\n var _this = this;\n if (toBind) {\n var proxy_3 = this;\n this.touchExpandObj = new Touch(this.element, {\n tap: function (e) {\n if (_this.expandOnType === 'Click' || (_this.expandOnType === 'DblClick' && e.tapCount === 2)) {\n proxy_3.expandHandler(e);\n }\n }\n });\n }\n else {\n if (this.touchExpandObj) {\n this.touchExpandObj.destroy();\n }\n }\n };\n TreeView.prototype.mouseDownHandler = function (e) {\n this.mouseDownStatus = true;\n if (e.shiftKey || e.ctrlKey) {\n e.preventDefault();\n }\n if (e.ctrlKey && this.allowMultiSelection) {\n EventHandler.add(this.element, 'contextmenu', this.preventContextMenu, this);\n }\n };\n ;\n TreeView.prototype.preventContextMenu = function (e) {\n e.preventDefault();\n };\n TreeView.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'mousedown', this.mouseDownHandler, this);\n this.wireClickEvent(true);\n this.wireExpandOnEvent(true);\n EventHandler.add(this.element, 'focus', this.focusIn, this);\n EventHandler.add(this.element, 'blur', this.focusOut, this);\n EventHandler.add(this.element, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.element, 'mouseout', this.onMouseLeave, this);\n this.keyboardModule = new KeyboardEvents(this.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown',\n });\n };\n TreeView.prototype.unWireEvents = function () {\n EventHandler.remove(this.element, 'mousedown', this.mouseDownHandler);\n this.wireClickEvent(false);\n this.wireExpandOnEvent(false);\n EventHandler.remove(this.element, 'focus', this.focusIn);\n EventHandler.remove(this.element, 'blur', this.focusOut);\n EventHandler.remove(this.element, 'mouseover', this.onMouseOver);\n EventHandler.remove(this.element, 'mouseout', this.onMouseLeave);\n this.keyboardModule.destroy();\n };\n TreeView.prototype.parents = function (element, selector) {\n var matched = [];\n var el = element.parentNode;\n while (!isNOU(el)) {\n if (matches(el, selector)) {\n matched.push(el);\n }\n el = el.parentNode;\n }\n return matched;\n };\n TreeView.prototype.isDescendant = function (parent, child) {\n var node = child.parentNode;\n while (!isNOU(node)) {\n if (node === parent) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n };\n TreeView.prototype.showSpinner = function (element) {\n addClass([element], LOAD);\n createSpinner({\n target: element,\n width: Browser.isDevice ? 16 : 14\n });\n showSpinner(element);\n };\n TreeView.prototype.hideSpinner = function (element) {\n hideSpinner(element);\n element.innerHTML = '';\n removeClass([element], LOAD);\n };\n TreeView.prototype.setCheckedNodes = function (nodes) {\n nodes = JSON.parse(JSON.stringify(nodes));\n this.uncheckAll(this.checkedNodes);\n if (nodes.length > 0) {\n this.checkAll(nodes);\n }\n };\n /**\n * Called internally if any of the property value changed.\n * @param {TreeView} newProp\n * @param {TreeView} oldProp\n * @returns void\n * @private\n */\n TreeView.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'allowDragAndDrop':\n this.setDragAndDrop(this.allowDragAndDrop);\n break;\n case 'allowEditing':\n this.wireEditingEvents(this.allowEditing);\n break;\n case 'allowMultiSelection':\n if (this.selectedNodes.length > 1) {\n var sNode = this.getElement(this.selectedNodes[0]);\n this.isLoaded = false;\n this.removeSelectAll();\n this.selectNode(sNode, null);\n this.isLoaded = true;\n }\n this.setMultiSelect(this.allowMultiSelection);\n this.addMultiSelect(this.allowMultiSelection);\n break;\n case 'checkedNodes':\n if (this.showCheckBox) {\n this.checkedNodes = oldProp.checkedNodes;\n this.setCheckedNodes(newProp.checkedNodes);\n }\n break;\n case 'cssClass':\n this.setCssClass(oldProp.cssClass, newProp.cssClass);\n break;\n case 'enableRtl':\n this.setEnableRtl();\n break;\n case 'expandOn':\n this.wireExpandOnEvent(false);\n this.setExpandOnType();\n this.wireExpandOnEvent(true);\n break;\n case 'fields':\n this.updateListProp(this.fields);\n this.reRenderNodes();\n break;\n case 'fullRowSelect':\n this.setFullRow(this.fullRowSelect);\n this.addFullRow(this.fullRowSelect);\n break;\n case 'nodeTemplate':\n this.nodeTemplateFn = this.templateComplier(this.nodeTemplate);\n this.reRenderNodes();\n break;\n case 'selectedNodes':\n this.removeSelectAll();\n this.setProperties({ selectedNodes: newProp.selectedNodes }, true);\n this.doSelectionAction();\n break;\n case 'showCheckBox':\n this.reRenderNodes();\n break;\n case 'sortOrder':\n this.reRenderNodes();\n break;\n }\n }\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers. It also removes the attributes and classes.\n */\n TreeView.prototype.destroy = function () {\n this.element.removeAttribute('aria-activedescendant');\n this.element.removeAttribute('tabindex');\n this.unWireEvents();\n this.wireEditingEvents(false);\n this.rippleFn();\n this.rippleIconFn();\n this.setCssClass(this.cssClass, null);\n this.setDragAndDrop(false);\n this.setFullRow(false);\n this.element.innerHTML = '';\n _super.prototype.destroy.call(this);\n };\n /**\n * Adds the collection of TreeView nodes based on target and index position. If target node is not specified,\n * then the nodes are added as children of the given parentID or in the root level of TreeView.\n * @param { { [key: string]: Object }[] } nodes - Specifies the array of JSON data that has to be added.\n * @param { string | Element } target - Specifies ID of TreeView node/TreeView node as target element.\n * @param { number } index - Specifies the index to place the newly added nodes in the target element.\n */\n TreeView.prototype.addNodes = function (nodes, target, index) {\n if (isNOU(nodes)) {\n return;\n }\n var dropLi = this.getElement(target);\n nodes = this.getSortedData(nodes);\n if (this.fields.dataSource instanceof DataManager) {\n this.addGivenNodes(nodes, dropLi, index, true);\n }\n else if (this.dataType === 2) {\n this.addGivenNodes(nodes, dropLi, index);\n }\n else {\n if (dropLi) {\n this.addGivenNodes(nodes, dropLi, index);\n }\n else {\n for (var i = 0; i < nodes.length; i++) {\n var pid = getValue(this.fields.parentID, nodes[i]);\n dropLi = pid ? this.getElement(pid.toString()) : pid;\n this.addGivenNodes([nodes[i]], dropLi, index);\n }\n }\n }\n };\n /**\n * Instead of clicking on the TreeView node for editing, we can enable it by using\n * `beginEdit` property. On passing the node ID or element through this property, the edit textBox\n * will be created for the particular node thus allowing us to edit it.\n * @param {string | Element} node - Specifies ID of TreeView node/TreeView node.\n */\n TreeView.prototype.beginEdit = function (node) {\n var ele = this.getElement(node);\n if (!isNOU(ele)) {\n this.createTextbox(ele, null);\n }\n };\n /**\n * Checks all the unchecked nodes. You can also check specific nodes by passing array of unchecked nodes\n * as argument to this method.\n * @param {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/array of TreeView node.\n */\n TreeView.prototype.checkAll = function (nodes) {\n if (this.showCheckBox) {\n this.doCheckBoxAction(nodes, true);\n }\n };\n /**\n * Collapses all the expanded TreeView nodes. You can collapse specific nodes by passing array of nodes as argument to this method.\n * You can also collapse all the nodes excluding the hidden nodes by setting **excludeHiddenNodes** to true. If you want to collapse\n * a specific level of nodes, set **level** as argument to collapseAll method.\n * @param {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/ array of TreeView node.\n * @param {number} level - TreeView nodes will collapse up to the given level.\n * @param {boolean} excludeHiddenNodes - Whether or not to exclude hidden nodes of TreeView when collapsing all nodes.\n */\n TreeView.prototype.collapseAll = function (nodes, level, excludeHiddenNodes) {\n if (!isNOU(nodes)) {\n this.doGivenAction(nodes, COLLAPSIBLE, false);\n }\n else {\n if (level > 0) {\n this.collapseByLevel(select('.' + PARENTITEM, this.element), level, excludeHiddenNodes);\n }\n else {\n this.collapseAllNodes(excludeHiddenNodes);\n }\n }\n };\n /**\n * Disables the collection of nodes by passing the ID of nodes or node elements in the array.\n * @param {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/array of TreeView nodes.\n */\n TreeView.prototype.disableNodes = function (nodes) {\n if (!isNOU(nodes)) {\n this.doDisableAction(nodes);\n }\n };\n /**\n * Enables the collection of disabled nodes by passing the ID of nodes or node elements in the array.\n * @param {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/array of TreeView nodes.\n */\n TreeView.prototype.enableNodes = function (nodes) {\n if (!isNOU(nodes)) {\n this.doEnableAction(nodes);\n }\n };\n /**\n * Ensures visibility of the TreeView node by using node ID or node element.\n * When many TreeView nodes are present and we need to find a particular node, `ensureVisible` property\n * helps bring the node to visibility by expanding the TreeView and scrolling to the specific node.\n * @param {string | Element} node - Specifies ID of TreeView node/TreeView nodes.\n */\n TreeView.prototype.ensureVisible = function (node) {\n var liEle = this.getElement(node);\n if (isNOU(liEle)) {\n return;\n }\n var parents = this.parents(liEle, '.' + LISTITEM);\n this.expandAll(parents);\n setTimeout(function () { liEle.scrollIntoView(true); }, 450);\n };\n /**\n * Expands all the collapsed TreeView nodes. You can expand the specific nodes by passing the array of collapsed nodes\n * as argument to this method. You can also expand all the collapsed nodes by excluding the hidden nodes by setting\n * **excludeHiddenNodes** to true to this method. To expand a specific level of nodes, set **level** as argument to expandAll method.\n * @param {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/array of TreeView nodes.\n * @param {number} level - TreeView nodes will expand up to the given level.\n * @param {boolean} excludeHiddenNodes - Whether or not to exclude hidden nodes when expanding all nodes.\n */\n TreeView.prototype.expandAll = function (nodes, level, excludeHiddenNodes) {\n if (!isNOU(nodes)) {\n this.doGivenAction(nodes, EXPANDABLE, true);\n }\n else {\n if (level > 0) {\n this.expandByLevel(select('.' + PARENTITEM, this.element), level, excludeHiddenNodes);\n }\n else {\n this.expandAllNodes(excludeHiddenNodes);\n }\n }\n };\n /**\n * Get the node's data such as id, text, parentID, selected, isChecked, and expanded by passing the node element or it's ID.\n * @param {string | Element} node - Specifies ID of TreeView node/TreeView node.\n */\n TreeView.prototype.getNode = function (node) {\n var ele = this.getElement(node);\n return this.getNodeData(ele, true);\n };\n /**\n * Moves the collection of nodes within the same TreeView based on target or its index position.\n * @param {string[] | Element[]} sourceNodes - Specifies the array of TreeView nodes ID/array of TreeView node.\n * @param {string | Element} target - Specifies ID of TreeView node/TreeView node as target element.\n * @param {number} index - Specifies the index to place the moved nodes in the target element.\n */\n TreeView.prototype.moveNodes = function (sourceNodes, target, index) {\n var dropLi = this.getElement(target);\n if (isNOU(dropLi)) {\n return;\n }\n for (var i = 0; i < sourceNodes.length; i++) {\n var dragLi = this.getElement(sourceNodes[i]);\n if (isNOU(dragLi) || dropLi.isSameNode(dragLi) || this.isDescendant(dragLi, dropLi)) {\n continue;\n }\n this.dropAsChildNode(dragLi, dropLi, this, index);\n }\n };\n /**\n * Removes the collection of TreeView nodes by passing the array of node details as argument to this method.\n * @param {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/array of TreeView node.\n */\n TreeView.prototype.removeNodes = function (nodes) {\n if (!isNOU(nodes)) {\n for (var i = 0, len = nodes.length; i < len; i++) {\n var liEle = this.getElement(nodes[i]);\n if (isNOU(liEle)) {\n continue;\n }\n this.removeNode(liEle);\n }\n }\n };\n /**\n * Replaces the text of the TreeView node with the given text.\n * @param {string | Element} target - Specifies ID of TreeView node/TreeView node as target element.\n * @param {string} newText - Specifies the new text of TreeView node.\n */\n TreeView.prototype.updateNode = function (target, newText) {\n if (isNOU(target) || isNOU(newText) || !this.allowEditing) {\n return;\n }\n var liEle = this.getElement(target);\n if (isNOU(liEle)) {\n return;\n }\n var txtEle = select('.' + LISTTEXT, liEle);\n this.updateOldText(liEle);\n var eventArgs = this.getEditEvent(liEle, null, null);\n this.trigger('nodeEditing', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n this.appendNewText(liEle, txtEle, newText, false);\n };\n /**\n * Unchecks all the checked nodes. You can also uncheck the specific nodes by passing array of checked nodes\n * as argument to this method.\n * @param {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/array of TreeView node.\n */\n TreeView.prototype.uncheckAll = function (nodes) {\n if (this.showCheckBox) {\n this.doCheckBoxAction(nodes, false);\n }\n };\n __decorate([\n Property(false)\n ], TreeView.prototype, \"allowDragAndDrop\", void 0);\n __decorate([\n Property(false)\n ], TreeView.prototype, \"allowEditing\", void 0);\n __decorate([\n Property(false)\n ], TreeView.prototype, \"allowMultiSelection\", void 0);\n __decorate([\n Complex({}, NodeAnimationSettings)\n ], TreeView.prototype, \"animation\", void 0);\n __decorate([\n Property()\n ], TreeView.prototype, \"checkedNodes\", void 0);\n __decorate([\n Property('')\n ], TreeView.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], TreeView.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(false)\n ], TreeView.prototype, \"enableRtl\", void 0);\n __decorate([\n Property('Auto')\n ], TreeView.prototype, \"expandOn\", void 0);\n __decorate([\n Complex({}, FieldsSettings)\n ], TreeView.prototype, \"fields\", void 0);\n __decorate([\n Property(true)\n ], TreeView.prototype, \"fullRowSelect\", void 0);\n __decorate([\n Property()\n ], TreeView.prototype, \"nodeTemplate\", void 0);\n __decorate([\n Property()\n ], TreeView.prototype, \"selectedNodes\", void 0);\n __decorate([\n Property('None')\n ], TreeView.prototype, \"sortOrder\", void 0);\n __decorate([\n Property(false)\n ], TreeView.prototype, \"showCheckBox\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"dataBound\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"drawNode\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"keyPress\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeChecked\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeChecking\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeClicked\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeCollapsed\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeCollapsing\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeDragging\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeDragStart\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeDragStop\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeDropped\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeEdited\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeEditing\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeExpanded\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeExpanding\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeSelected\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeSelecting\", void 0);\n TreeView = TreeView_1 = __decorate([\n NotifyPropertyChanges\n ], TreeView);\n return TreeView;\n var TreeView_1;\n}(Component));\nexport { TreeView };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, formatUnit, EventHandler, Event, isNullOrUndefined, closest } from '@syncfusion/ej2-base';\nimport { Property, NotifyPropertyChanges, Browser } from '@syncfusion/ej2-base';\nimport { setStyleAttribute as setStyle, addClass, removeClass, createElement, Touch } from '@syncfusion/ej2-base';\nvar CONTROL = 'e-control';\nvar ROOT = 'e-sidebar';\nvar DOCKER = 'e-dock';\nvar CLOSE = 'e-close';\nvar OPEN = 'e-open';\nvar TRASITION = 'e-transition';\nvar DEFAULTBACKDROP = 'e-sidebar-overlay';\nvar CONTEXTBACKDROP = 'e-backdrop';\nvar RTL = 'e-rtl';\nvar RIGHT = 'e-right';\nvar LEFT = 'e-left';\nvar OVER = 'e-over';\nvar PUSH = 'e-push';\nvar SLIDE = 'e-slide';\nvar VISIBILITY = 'e-visibility';\nvar MAINCONTENTANIMATION = 'e-content-animation';\nvar DISABLEANIMATION = 'e-disable-animation';\nvar CONTEXT = 'e-sidebar-context';\nvar SIDEBARABSOLUTE = 'e-sidebar-absolute';\n/**\n * Sidebar is an expandable or collapsible\n * component that typically act as a side container to place the primary or secondary content alongside of the main content.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar Sidebar = /** @class */ (function (_super) {\n __extends(Sidebar, _super);\n function Sidebar(options, element) {\n return _super.call(this, options, element) || this;\n }\n Sidebar.prototype.preRender = function () {\n this.setWidth();\n };\n Sidebar.prototype.render = function () {\n this.initialize();\n this.wireEvents();\n };\n Sidebar.prototype.initialize = function () {\n this.setTarget();\n this.addClass();\n this.setZindex();\n if (this.enableDock) {\n this.setDock();\n }\n if (this.isOpen) {\n this.show();\n }\n else {\n this.setMediaQuery();\n }\n this.setType(this.type);\n this.setCloseOnDocumentClick();\n this.setEnableRTL();\n };\n Sidebar.prototype.setEnableRTL = function () {\n this.enableRtl ? (addClass([this.element], RTL)) :\n (removeClass([this.element], RTL));\n };\n Sidebar.prototype.setTarget = function () {\n if (typeof (this.target) === 'string') {\n this.setProperties({ target: document.querySelector(this.target) }, true);\n }\n if (this.target) {\n this.target.insertAdjacentElement('afterbegin', this.element);\n addClass([this.element], SIDEBARABSOLUTE);\n addClass([this.target], CONTEXT);\n }\n };\n Sidebar.prototype.setCloseOnDocumentClick = function () {\n if (this.closeOnDocumentClick) {\n EventHandler.add(document, 'mousedown touchstart', this.documentclickHandler, this);\n }\n else {\n EventHandler.remove(document, 'mousedown touchstart', this.documentclickHandler);\n }\n };\n Sidebar.prototype.setWidth = function () {\n if (this.enableDock && this.position === 'Left') {\n setStyle(this.element, { 'width': this.setDimension(this.dockSize) });\n }\n else if (this.enableDock && this.position === 'Right') {\n setStyle(this.element, { 'width': this.setDimension(this.dockSize) });\n }\n else if (!this.enableDock) {\n setStyle(this.element, { 'width': this.setDimension(this.width) });\n }\n };\n Sidebar.prototype.setDimension = function (width) {\n if (typeof width === 'number') {\n width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n width = (width.match(/px|%|em/)) ? width : formatUnit(width);\n }\n else {\n width = '100%';\n }\n return width;\n };\n Sidebar.prototype.setZindex = function () {\n setStyle(this.element, { 'z-index': '' + this.zIndex });\n };\n Sidebar.prototype.addClass = function () {\n var classELement = document.querySelector('.e-main-content');\n if (!isNullOrUndefined((classELement ||\n this.element.nextElementSibling))) {\n addClass([classELement || this.element.nextElementSibling], [MAINCONTENTANIMATION]);\n }\n if (!this.enableDock && this.type !== 'Auto') {\n addClass([this.element], [VISIBILITY]);\n }\n removeClass([this.element], [OPEN, CLOSE, RIGHT, LEFT, SLIDE, PUSH, OVER]);\n this.element.classList.add(ROOT);\n addClass([this.element], (this.position === 'Right') ? RIGHT : LEFT);\n if (this.type === 'Auto' && !Browser.isDevice && !this.enableDock) {\n addClass([this.element], OPEN);\n }\n else {\n addClass([this.element], CLOSE);\n }\n };\n Sidebar.prototype.destroyBackDrop = function () {\n var sibling = document.querySelector('.e-main-content') ||\n this.element.nextElementSibling;\n if (this.target && this.showBackdrop && sibling) {\n removeClass([sibling], CONTEXTBACKDROP);\n }\n else if (this.showBackdrop && this.modal) {\n this.modal.style.display = 'none';\n this.modal.outerHTML = '';\n this.modal = null;\n }\n };\n /**\n * Hide the Sidebar component.\n * @returns void\n */\n Sidebar.prototype.hide = function () {\n var closeArguments = { model: this, element: this.element, cancel: false };\n this.trigger('close', closeArguments);\n if (!closeArguments.cancel) {\n if (this.element.classList.contains(CLOSE)) {\n return;\n }\n if (this.element.classList.contains(OPEN)) {\n var changeArguments = { name: 'change', element: this.element };\n this.trigger('change', changeArguments);\n }\n addClass([this.element], CLOSE);\n removeClass([this.element], OPEN);\n this.enableDock ? setStyle(this.element, { 'width': formatUnit(this.dockSize) }) :\n setStyle(this.element, { 'width': formatUnit(this.width) });\n this.setDock();\n this.setType(this.type);\n var sibling = document.querySelector('.e-main-content') ||\n this.element.nextElementSibling;\n if (!this.enableDock && sibling) {\n sibling.style.transform = 'translateX(' + 0 + 'px)';\n this.position === 'Left' ? sibling.style.marginLeft = '0px' : sibling.style.marginRight = '0px';\n }\n this.destroyBackDrop();\n this.setCloseOnDocumentClick();\n this.setAnimation();\n if (this.type === 'Slide') {\n document.body.classList.remove('e-sidebar-overflow');\n }\n this.setProperties({ isOpen: false }, true);\n }\n };\n /**\n * Shows the Sidebar component.\n * @returns void\n */\n Sidebar.prototype.show = function () {\n var openArguments = { model: this, element: this.element, cancel: false };\n this.trigger('open', openArguments);\n if (!openArguments.cancel) {\n removeClass([this.element], VISIBILITY);\n if (this.element.classList.contains(OPEN)) {\n return;\n }\n if (this.element.classList.contains(CLOSE)) {\n var changeArguments = { name: 'change', element: this.element };\n this.trigger('change', changeArguments);\n }\n addClass([this.element], [OPEN, TRASITION]);\n setStyle(this.element, { 'transform': '' });\n removeClass([this.element], CLOSE);\n setStyle(this.element, { 'width': formatUnit(this.width) });\n var elementWidth = this.element.getBoundingClientRect().width;\n this.setType(this.type);\n this.createBackDrop();\n this.setCloseOnDocumentClick();\n this.setAnimation();\n if (this.type === 'Slide') {\n document.body.classList.add('e-sidebar-overflow');\n }\n this.setProperties({ isOpen: true }, true);\n }\n };\n Sidebar.prototype.setAnimation = function () {\n if (this.animate) {\n removeClass([this.element], DISABLEANIMATION);\n }\n else {\n addClass([this.element], DISABLEANIMATION);\n }\n };\n Sidebar.prototype.setDock = function () {\n if (this.enableDock && this.position === 'Left' && !this.getState()) {\n setStyle(this.element, { 'transform': 'translateX(' + -100 + '%) translateX(' + this.setDimension(this.dockSize) + ')' });\n }\n else if (this.enableDock && this.position === 'Right' && !this.getState()) {\n setStyle(this.element, { 'transform': 'translateX(' + 100 + '%) translateX(' + '-' + this.setDimension(this.dockSize) + ')' });\n }\n if (this.element.classList.contains(CLOSE) && this.enableDock) {\n setStyle(this.element, { 'width': this.setDimension(this.dockSize) });\n }\n };\n Sidebar.prototype.createBackDrop = function () {\n if (this.target && this.showBackdrop) {\n var sibling = document.querySelector('.e-main-content') ||\n this.element.nextElementSibling;\n addClass([sibling], CONTEXTBACKDROP);\n }\n else if (this.showBackdrop && !this.modal && this.getState()) {\n this.modal = createElement('div');\n this.modal.className = DEFAULTBACKDROP;\n this.modal.style.display = 'block';\n document.body.appendChild(this.modal);\n }\n };\n Sidebar.prototype.getPersistData = function () {\n return this.addOnPersist(['type', 'position', 'isOpen']);\n };\n /**\n * Returns the current module name.\n * @returns string\n * @private\n */\n Sidebar.prototype.getModuleName = function () {\n return 'sidebar';\n };\n /**\n * Shows or hides the Sidebar based on the current state.\n * @returns void\n */\n Sidebar.prototype.toggle = function (e) {\n this.element.classList.contains(OPEN) ? this.hide() : this.show();\n };\n Sidebar.prototype.getState = function () {\n return this.element.classList.contains(OPEN) ? true : false;\n };\n Sidebar.prototype.setMediaQuery = function () {\n if (this.mediaQuery && this.mediaQuery.matches) {\n this.show();\n }\n else if (this.mediaQuery && this.getState()) {\n this.hide();\n }\n };\n Sidebar.prototype.resize = function (e) {\n if (this.type === 'Auto') {\n if (Browser.isDevice) {\n addClass([this.element], OVER);\n }\n else {\n addClass([this.element], PUSH);\n }\n }\n this.setMediaQuery();\n };\n Sidebar.prototype.documentclickHandler = function (e) {\n if (closest(e.target, '.' + CONTROL + '' + '.' + ROOT)) {\n return;\n }\n this.hide();\n };\n Sidebar.prototype.enableGestureHandler = function (args) {\n if (this.position === 'Left' && args.swipeDirection === 'Right' &&\n (args.startX <= 20 && args.distanceX >= 50 && args.velocity >= 0.5)) {\n this.show();\n }\n else if (this.position === 'Left' && args.swipeDirection === 'Left') {\n this.hide();\n }\n else if (this.position === 'Right' && args.swipeDirection === 'Right') {\n this.hide();\n }\n else if (this.position === 'Right' && args.swipeDirection === 'Left'\n && (window.innerWidth - args.startX <= 20 && args.distanceX >= 50 && args.velocity >= 0.5)) {\n this.show();\n }\n };\n Sidebar.prototype.setEnableGestures = function () {\n if (this.enableGestures) {\n this.mainContentEle = new Touch(document.body, { swipe: this.enableGestureHandler.bind(this) });\n this.sidebarEle = new Touch(this.element, { swipe: this.enableGestureHandler.bind(this) });\n }\n else {\n if (this.mainContentEle && this.sidebarEle) {\n this.mainContentEle.destroy();\n this.sidebarEle.destroy();\n }\n }\n };\n Sidebar.prototype.wireEvents = function () {\n this.setEnableGestures();\n window.addEventListener('resize', this.resize.bind(this));\n };\n Sidebar.prototype.unWireEvents = function () {\n window.removeEventListener('resize', this.resize.bind(this));\n EventHandler.remove(document, 'mousedown touchstart', this.documentclickHandler);\n if (this.mainContentEle) {\n this.mainContentEle.destroy();\n }\n if (this.sidebarEle) {\n this.sidebarEle.destroy();\n }\n };\n Sidebar.prototype.onPropertyChanged = function (newProp, oldProp) {\n var sibling = document.querySelector('.e-main-content') ||\n this.element.nextElementSibling;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'isOpen':\n this.isOpen ? this.show() : this.hide();\n break;\n case 'width':\n this.setWidth();\n if (!this.getState()) {\n this.setDock();\n }\n break;\n case 'animate':\n this.setAnimation();\n break;\n case 'type':\n removeClass([this.element], [VISIBILITY]);\n this.addClass();\n this.setType(this.type);\n break;\n case 'position':\n this.element.style.transform = '';\n this.setDock();\n if (sibling) {\n this.position === 'Left' ? sibling.style.marginRight = '0px' : sibling.style.marginLeft = '0px';\n }\n if (this.position === 'Right') {\n removeClass([this.element], LEFT);\n addClass([this.element], RIGHT);\n }\n else {\n removeClass([this.element], RIGHT);\n addClass([this.element], LEFT);\n }\n this.setType(this.type);\n break;\n case 'showBackdrop':\n if (this.showBackdrop) {\n this.createBackDrop();\n }\n else {\n if (this.modal) {\n this.modal.style.display = 'none';\n this.modal.outerHTML = '';\n this.modal = null;\n }\n }\n break;\n case 'target':\n if (typeof (this.target) === 'string') {\n this.setProperties({ target: document.querySelector(this.target) }, true);\n }\n if (isNullOrUndefined(this.target)) {\n removeClass([this.element], SIDEBARABSOLUTE);\n removeClass([oldProp.target], CONTEXT);\n setStyle(sibling, { 'margin-left': 0, 'margin-right': 0 });\n document.body.insertAdjacentElement('afterbegin', this.element);\n }\n else {\n _super.prototype.refresh.call(this);\n }\n break;\n case 'closeOnDocumentClick':\n this.setCloseOnDocumentClick();\n break;\n case 'enableDock':\n if (!this.getState()) {\n this.setDock();\n }\n break;\n case 'zIndex':\n this.setZindex();\n break;\n case 'mediaQuery':\n this.setMediaQuery();\n break;\n case 'enableGestures':\n this.setEnableGestures();\n break;\n case 'enableRtl':\n this.setEnableRTL();\n break;\n }\n }\n };\n Sidebar.prototype.setType = function (type) {\n var elementWidth = this.element.getBoundingClientRect().width;\n this.setZindex();\n if (this.enableDock) {\n addClass([this.element], DOCKER);\n }\n var sibling = document.querySelector('.e-main-content') ||\n this.element.nextElementSibling;\n if (sibling) {\n sibling.style.transform = 'translateX(' + 0 + 'px)';\n if (!Browser.isDevice && this.type !== 'Auto') {\n this.position === 'Left' ? sibling.style.marginLeft = '0px' : sibling.style.marginRight = '0px';\n }\n }\n var margin = this.position === 'Left' ? elementWidth + 'px' : elementWidth + 'px';\n var eleWidth = this.position === 'Left' ? elementWidth : -(elementWidth);\n removeClass([this.element], [PUSH, OVER, SLIDE]);\n switch (type) {\n case 'Push':\n addClass([this.element], [PUSH]);\n if (sibling && (this.enableDock || this.element.classList.contains(OPEN))) {\n this.position === 'Left' ? sibling.style.marginLeft = margin : sibling.style.marginRight = margin;\n }\n break;\n case 'Slide':\n addClass([this.element], [SLIDE]);\n if (sibling && (this.enableDock || this.element.classList.contains(OPEN))) {\n sibling.style.transform = 'translateX(' + eleWidth + 'px)';\n }\n break;\n case 'Over':\n addClass([this.element], [OVER]);\n if (this.enableDock && this.element.classList.contains(CLOSE)) {\n if (sibling) {\n this.position === 'Left' ? sibling.style.marginLeft = margin : sibling.style.marginRight = margin;\n }\n }\n break;\n case 'Auto':\n addClass([this.element], [TRASITION]);\n if (Browser.isDevice) {\n if (sibling && (this.enableDock) && !this.getState()) {\n this.position === 'Left' ? sibling.style.marginLeft = margin : sibling.style.marginRight = margin;\n addClass([this.element], PUSH);\n }\n else {\n addClass([this.element], OVER);\n }\n }\n else {\n addClass([this.element], PUSH);\n if (sibling && (this.enableDock || this.element.classList.contains(OPEN))) {\n this.position === 'Left' ? sibling.style.marginLeft = margin : sibling.style.marginRight = margin;\n }\n this.setProperties({ isOpen: true }, true);\n }\n this.createBackDrop();\n }\n };\n /**\n * Removes the control from the DOM and removes all its related events\n * @returns void\n */\n Sidebar.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n removeClass([this.element], [OPEN, CLOSE, PUSH, SLIDE, OVER, LEFT, RIGHT, TRASITION]);\n if (this.target) {\n removeClass([this.element], SIDEBARABSOLUTE);\n removeClass([this.target], CONTEXT);\n }\n this.destroyBackDrop();\n this.element.style.width = '';\n this.element.style.zIndex = '';\n this.element.style.transform = '';\n var sibling = document.querySelector('.e-main-content')\n || this.element.nextElementSibling;\n if (!isNullOrUndefined(sibling)) {\n sibling.style.margin = '';\n sibling.style.transform = '';\n }\n this.unWireEvents();\n };\n __decorate([\n Property('auto')\n ], Sidebar.prototype, \"dockSize\", void 0);\n __decorate([\n Property(null)\n ], Sidebar.prototype, \"mediaQuery\", void 0);\n __decorate([\n Property(false)\n ], Sidebar.prototype, \"enableDock\", void 0);\n __decorate([\n Property(true)\n ], Sidebar.prototype, \"enableGestures\", void 0);\n __decorate([\n Property(false)\n ], Sidebar.prototype, \"isOpen\", void 0);\n __decorate([\n Property(false)\n ], Sidebar.prototype, \"enableRtl\", void 0);\n __decorate([\n Property(true)\n ], Sidebar.prototype, \"animate\", void 0);\n __decorate([\n Property('auto')\n ], Sidebar.prototype, \"height\", void 0);\n __decorate([\n Property(false)\n ], Sidebar.prototype, \"closeOnDocumentClick\", void 0);\n __decorate([\n Property('Left')\n ], Sidebar.prototype, \"position\", void 0);\n __decorate([\n Property(null)\n ], Sidebar.prototype, \"target\", void 0);\n __decorate([\n Property(false)\n ], Sidebar.prototype, \"showBackdrop\", void 0);\n __decorate([\n Property('Auto')\n ], Sidebar.prototype, \"type\", void 0);\n __decorate([\n Property('auto')\n ], Sidebar.prototype, \"width\", void 0);\n __decorate([\n Property(1000)\n ], Sidebar.prototype, \"zIndex\", void 0);\n __decorate([\n Event()\n ], Sidebar.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Sidebar.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], Sidebar.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], Sidebar.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], Sidebar.prototype, \"destroyed\", void 0);\n Sidebar = __decorate([\n NotifyPropertyChanges\n ], Sidebar);\n return Sidebar;\n}(Component));\nexport { Sidebar };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, Complex } from '@syncfusion/ej2-base';\nimport { Theme } from '../model/theme';\n/**\n * Defines the appearance of the connectors\n */\nvar Connector = /** @class */ (function (_super) {\n __extends(Connector, _super);\n function Connector() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Line')\n ], Connector.prototype, \"type\", void 0);\n __decorate([\n Property(null)\n ], Connector.prototype, \"color\", void 0);\n __decorate([\n Property(1)\n ], Connector.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], Connector.prototype, \"length\", void 0);\n __decorate([\n Property('')\n ], Connector.prototype, \"dashArray\", void 0);\n return Connector;\n}(ChildProperty));\nexport { Connector };\n/**\n * Configures the fonts in charts.\n */\nvar Font = /** @class */ (function (_super) {\n __extends(Font, _super);\n function Font() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('16px')\n ], Font.prototype, \"size\", void 0);\n __decorate([\n Property('')\n ], Font.prototype, \"color\", void 0);\n __decorate([\n Property('Segoe UI')\n ], Font.prototype, \"fontFamily\", void 0);\n __decorate([\n Property('Normal')\n ], Font.prototype, \"fontWeight\", void 0);\n __decorate([\n Property('Normal')\n ], Font.prototype, \"fontStyle\", void 0);\n __decorate([\n Property(1)\n ], Font.prototype, \"opacity\", void 0);\n __decorate([\n Property('Center')\n ], Font.prototype, \"textAlignment\", void 0);\n __decorate([\n Property('Trim')\n ], Font.prototype, \"textOverflow\", void 0);\n return Font;\n}(ChildProperty));\nexport { Font };\n/**\n * Configures the borders in the chart.\n */\nvar Border = /** @class */ (function (_super) {\n __extends(Border, _super);\n function Border() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Border.prototype, \"color\", void 0);\n __decorate([\n Property(1)\n ], Border.prototype, \"width\", void 0);\n return Border;\n}(ChildProperty));\nexport { Border };\n/**\n * Configures the chart area.\n */\nvar ChartArea = /** @class */ (function (_super) {\n __extends(ChartArea, _super);\n function ChartArea() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({}, Border)\n ], ChartArea.prototype, \"border\", void 0);\n __decorate([\n Property('transparent')\n ], ChartArea.prototype, \"background\", void 0);\n __decorate([\n Property(1)\n ], ChartArea.prototype, \"opacity\", void 0);\n return ChartArea;\n}(ChildProperty));\nexport { ChartArea };\n/**\n * Configures the chart margins.\n */\nvar Margin = /** @class */ (function (_super) {\n __extends(Margin, _super);\n function Margin() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(10)\n ], Margin.prototype, \"left\", void 0);\n __decorate([\n Property(10)\n ], Margin.prototype, \"right\", void 0);\n __decorate([\n Property(10)\n ], Margin.prototype, \"top\", void 0);\n __decorate([\n Property(10)\n ], Margin.prototype, \"bottom\", void 0);\n return Margin;\n}(ChildProperty));\nexport { Margin };\n/**\n * Configures the animation behavior for chart series.\n */\nvar Animation = /** @class */ (function (_super) {\n __extends(Animation, _super);\n function Animation() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], Animation.prototype, \"enable\", void 0);\n __decorate([\n Property(1000)\n ], Animation.prototype, \"duration\", void 0);\n __decorate([\n Property(0)\n ], Animation.prototype, \"delay\", void 0);\n return Animation;\n}(ChildProperty));\nexport { Animation };\n/** @private */\nvar Indexes = /** @class */ (function (_super) {\n __extends(Indexes, _super);\n function Indexes() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0)\n ], Indexes.prototype, \"series\", void 0);\n __decorate([\n Property(0)\n ], Indexes.prototype, \"point\", void 0);\n return Indexes;\n}(ChildProperty));\nexport { Indexes };\n/**\n * Column series rounded corner options\n */\nvar CornerRadius = /** @class */ (function (_super) {\n __extends(CornerRadius, _super);\n function CornerRadius() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0)\n ], CornerRadius.prototype, \"topLeft\", void 0);\n __decorate([\n Property(0)\n ], CornerRadius.prototype, \"topRight\", void 0);\n __decorate([\n Property(0)\n ], CornerRadius.prototype, \"bottomLeft\", void 0);\n __decorate([\n Property(0)\n ], CornerRadius.prototype, \"bottomRight\", void 0);\n return CornerRadius;\n}(ChildProperty));\nexport { CornerRadius };\n/**\n * @private\n */\nvar Index = /** @class */ (function () {\n function Index(seriesIndex, pointIndex) {\n this.series = seriesIndex;\n this.point = pointIndex;\n }\n return Index;\n}());\nexport { Index };\n/**\n * Configures the Empty Points of series\n */\nvar EmptyPointSettings = /** @class */ (function (_super) {\n __extends(EmptyPointSettings, _super);\n function EmptyPointSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], EmptyPointSettings.prototype, \"fill\", void 0);\n __decorate([\n Complex({ color: 'transparent', width: 0 }, Border)\n ], EmptyPointSettings.prototype, \"border\", void 0);\n __decorate([\n Property('Gap')\n ], EmptyPointSettings.prototype, \"mode\", void 0);\n return EmptyPointSettings;\n}(ChildProperty));\nexport { EmptyPointSettings };\n/**\n * Configures the ToolTips in the chart.\n */\nvar TooltipSettings = /** @class */ (function (_super) {\n __extends(TooltipSettings, _super);\n function TooltipSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], TooltipSettings.prototype, \"enable\", void 0);\n __decorate([\n Property(false)\n ], TooltipSettings.prototype, \"shared\", void 0);\n __decorate([\n Property(null)\n ], TooltipSettings.prototype, \"fill\", void 0);\n __decorate([\n Property(null)\n ], TooltipSettings.prototype, \"header\", void 0);\n __decorate([\n Property(0.75)\n ], TooltipSettings.prototype, \"opacity\", void 0);\n __decorate([\n Complex(Theme.tooltipLabelFont, Font)\n ], TooltipSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Property(null)\n ], TooltipSettings.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], TooltipSettings.prototype, \"template\", void 0);\n __decorate([\n Property(true)\n ], TooltipSettings.prototype, \"enableAnimation\", void 0);\n __decorate([\n Complex({ color: '#cccccc', width: 0.5 }, Border)\n ], TooltipSettings.prototype, \"border\", void 0);\n return TooltipSettings;\n}(ChildProperty));\nexport { TooltipSettings };\n","/**\n * Numeric Range.\n * @private\n */\nvar DoubleRange = /** @class */ (function () {\n function DoubleRange(start, end) {\n /*\n if (!isNaN(start) && !isNaN(end)) {\n this.mIsEmpty = true;\n } else {\n this.mIsEmpty = false;\n }*/\n if (start < end) {\n this.mStart = start;\n this.mEnd = end;\n }\n else {\n this.mStart = end;\n this.mEnd = start;\n }\n }\n Object.defineProperty(DoubleRange.prototype, \"start\", {\n //private mIsEmpty: boolean;\n /** @private */\n get: function () {\n return this.mStart;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DoubleRange.prototype, \"end\", {\n /** @private */\n get: function () {\n return this.mEnd;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DoubleRange.prototype, \"delta\", {\n /*\n get isEmpty(): boolean {\n return this.mIsEmpty;\n }*/\n /** @private */\n get: function () {\n return (this.mEnd - this.mStart);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DoubleRange.prototype, \"median\", {\n /** @private */\n get: function () {\n return this.mStart + (this.mEnd - this.mStart) / 2;\n },\n enumerable: true,\n configurable: true\n });\n return DoubleRange;\n}());\nexport { DoubleRange };\n","import { getMinPointsDelta, getActualDesiredIntervalsCount, setRange, triggerLabelRender } from '../../common/utils/helper';\nimport { DoubleRange } from '../utils/double-range';\nimport { withIn, logBase } from '../../common/utils/helper';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * Numeric module is used to render numeric axis.\n */\nvar Double = /** @class */ (function () {\n /**\n * Constructor for the dateTime module.\n * @private\n */\n function Double(chart) {\n this.chart = chart;\n }\n /**\n * Numeric Nice Interval for the axis.\n * @private\n */\n Double.prototype.calculateNumericNiceInterval = function (axis, delta, size) {\n var actualDesiredIntervalsCount = getActualDesiredIntervalsCount(size, axis);\n var niceInterval = delta / actualDesiredIntervalsCount;\n if (!isNullOrUndefined(axis.desiredIntervals)) {\n return niceInterval;\n }\n var minInterval = Math.pow(10, Math.floor(logBase(niceInterval, 10)));\n for (var _i = 0, _a = axis.intervalDivs; _i < _a.length; _i++) {\n var interval = _a[_i];\n var currentInterval = minInterval * interval;\n if (actualDesiredIntervalsCount < (delta / currentInterval)) {\n break;\n }\n niceInterval = currentInterval;\n }\n return niceInterval;\n };\n /**\n * Actual Range for the axis.\n * @private\n */\n Double.prototype.getActualRange = function (axis, size) {\n this.initializeDoubleRange(axis);\n axis.actualRange.interval = axis.interval || this.calculateNumericNiceInterval(axis, axis.doubleRange.delta, size);\n axis.actualRange.min = axis.doubleRange.start;\n axis.actualRange.max = axis.doubleRange.end;\n };\n /**\n * Range for the axis.\n * @private\n */\n Double.prototype.initializeDoubleRange = function (axis) {\n //Axis Min\n if (axis.minimum !== null) {\n this.min = axis.minimum;\n }\n else if (this.min === null || this.min === Number.POSITIVE_INFINITY) {\n this.min = 0;\n }\n // Axis Max\n if (axis.maximum !== null) {\n this.max = axis.maximum;\n }\n else if (this.max === null || this.max === Number.NEGATIVE_INFINITY) {\n this.max = 5;\n }\n if (this.min === this.max) {\n this.max = axis.valueType.indexOf('Category') > -1 ? this.max : this.min + 1;\n }\n axis.doubleRange = new DoubleRange(this.min, this.max);\n axis.actualRange = {};\n };\n /**\n * The function to calculate the range and labels for the axis.\n * @return {void}\n * @private\n */\n Double.prototype.calculateRangeAndInterval = function (size, axis) {\n this.calculateRange(axis, size);\n this.getActualRange(axis, size);\n this.applyRangePadding(axis, size);\n this.calculateVisibleLabels(axis, this.chart);\n };\n /**\n * Calculate Range for the axis.\n * @private\n */\n Double.prototype.calculateRange = function (axis, size) {\n /*! Generate axis range */\n var series;\n this.min = null;\n this.max = null;\n if (!setRange(axis)) {\n for (var _i = 0, _a = axis.series; _i < _a.length; _i++) {\n var series_1 = _a[_i];\n if (!series_1.visible) {\n continue;\n }\n this.paddingInterval = 0;\n if (((series_1.type.indexOf('Column') > -1 || series_1.type.indexOf('Histogram') > -1) && axis.orientation === 'Horizontal')\n || (series_1.type.indexOf('Bar') > -1 && axis.orientation === 'Vertical')) {\n if ((series_1.xAxis.valueType === 'Double' || series_1.xAxis.valueType === 'DateTime')\n && series_1.xAxis.rangePadding === 'Auto') {\n this.paddingInterval = getMinPointsDelta(series_1.xAxis, axis.series) / 2;\n }\n }\n //For xRange\n if (axis.orientation === 'Horizontal') {\n if (this.chart.requireInvertedAxis) {\n this.findMinMax(series_1.yMin, series_1.yMax);\n }\n else {\n this.findMinMax(series_1.xMin - this.paddingInterval, series_1.xMax + this.paddingInterval);\n }\n }\n // For yRange\n if (axis.orientation === 'Vertical') {\n if (this.chart.requireInvertedAxis) {\n this.findMinMax(series_1.xMin - this.paddingInterval, series_1.xMax + this.paddingInterval);\n }\n else {\n this.findMinMax(series_1.yMin, series_1.yMax);\n }\n }\n }\n }\n };\n Double.prototype.findMinMax = function (min, max) {\n if (this.min === null || this.min > min) {\n this.min = min;\n }\n if (this.max === null || this.max < max) {\n this.max = max;\n }\n };\n /**\n * Apply padding for the range.\n * @private\n */\n Double.prototype.applyRangePadding = function (axis, size) {\n var range;\n var start = axis.actualRange.min;\n var end = axis.actualRange.max;\n if (!setRange(axis)) {\n var interval = axis.actualRange.interval;\n var padding = axis.getRangePadding(this.chart);\n if (padding === 'Additional' || padding === 'Round') {\n this.findAdditional(axis, start, end, interval);\n }\n else if (padding === 'Normal') {\n this.findNormal(axis, start, end, interval, size);\n }\n else {\n this.updateActualRange(axis, start, end, interval);\n }\n }\n axis.actualRange.delta = axis.actualRange.max - axis.actualRange.min;\n this.calculateVisibleRange(size, axis);\n };\n Double.prototype.updateActualRange = function (axis, minimum, maximum, interval) {\n axis.actualRange.min = axis.minimum != null ? axis.minimum : minimum;\n axis.actualRange.max = axis.maximum != null ? axis.maximum : maximum;\n axis.actualRange.interval = axis.interval != null ? axis.interval : interval;\n };\n Double.prototype.findAdditional = function (axis, start, end, interval) {\n var minimum;\n var maximum;\n minimum = Math.floor(start / interval) * interval;\n maximum = Math.ceil(end / interval) * interval;\n if (axis.rangePadding === 'Additional') {\n minimum -= interval;\n maximum += interval;\n }\n this.updateActualRange(axis, minimum, maximum, interval);\n };\n Double.prototype.findNormal = function (axis, start, end, interval, size) {\n var remaining;\n var minimum;\n var maximum;\n var startValue = start;\n if (start < 0) {\n startValue = 0;\n minimum = start + (start / 20);\n remaining = interval + (minimum % interval);\n if ((0.365 * interval) >= remaining) {\n minimum -= interval;\n }\n if (minimum % interval < 0) {\n minimum = (minimum - interval) - (minimum % interval);\n }\n }\n else {\n minimum = start < ((5.0 / 6.0) * end) ? 0 : (start - (end - start) / 2);\n if (minimum % interval > 0) {\n minimum -= (minimum % interval);\n }\n }\n maximum = (end > 0) ? (end + (end - startValue) / 20) : (end - (end - startValue) / 20);\n remaining = interval - (maximum % interval);\n if ((0.365 * interval) >= remaining) {\n maximum += interval;\n }\n if (maximum % interval > 0) {\n maximum = (maximum + interval) - (maximum % interval);\n }\n axis.doubleRange = new DoubleRange(minimum, maximum);\n if (minimum === 0) {\n interval = this.calculateNumericNiceInterval(axis, axis.doubleRange.delta, size);\n maximum = Math.ceil(maximum / interval) * interval;\n }\n this.updateActualRange(axis, minimum, maximum, interval);\n };\n /**\n * Calculate visible range for axis.\n * @private\n */\n Double.prototype.calculateVisibleRange = function (size, axis) {\n axis.visibleRange = {\n max: axis.actualRange.max, min: axis.actualRange.min,\n delta: axis.actualRange.delta, interval: axis.actualRange.interval\n };\n if (axis.zoomFactor < 1 || axis.zoomPosition > 0) {\n axis.calculateVisibleRange(size);\n axis.visibleRange.interval = (axis.enableAutoIntervalOnZooming && axis.valueType !== 'Category') ?\n this.calculateNumericNiceInterval(axis, axis.doubleRange.delta, size)\n : axis.visibleRange.interval;\n }\n axis.triggerRangeRender(this.chart, axis.visibleRange.min, axis.visibleRange.max, axis.visibleRange.interval);\n };\n /**\n * Calculate label for the axis.\n * @private\n */\n Double.prototype.calculateVisibleLabels = function (axis, chart) {\n /*! Generate axis labels */\n axis.visibleLabels = [];\n var tempInterval = axis.visibleRange.min;\n if (axis.zoomFactor < 1 || axis.zoomPosition > 0 || this.paddingInterval) {\n tempInterval = axis.visibleRange.min - (axis.visibleRange.min % axis.visibleRange.interval);\n }\n var format = this.getFormat(axis);\n var isCustom = format.match('{value}') !== null;\n axis.format = chart.intl.getNumberFormat({\n format: isCustom ? '' : format,\n useGrouping: chart.useGroupingSeparator\n });\n axis.startLabel = axis.format(axis.visibleRange.min);\n axis.endLabel = axis.format(axis.visibleRange.max);\n for (; tempInterval <= axis.visibleRange.max; tempInterval += axis.visibleRange.interval) {\n if (withIn(tempInterval, axis.visibleRange)) {\n triggerLabelRender(chart, tempInterval, this.formatValue(axis, isCustom, format, tempInterval), axis.labelStyle, axis);\n }\n }\n if (axis.getMaxLabelWidth) {\n axis.getMaxLabelWidth(this.chart);\n }\n };\n /**\n * Format of the axis label.\n * @private\n */\n Double.prototype.getFormat = function (axis) {\n if (axis.labelFormat) {\n return axis.labelFormat;\n }\n return axis.isStack100 ? '{value}%' : '';\n };\n /**\n * Formatted the axis label.\n * @private\n */\n Double.prototype.formatValue = function (axis, isCustom, format, tempInterval) {\n return isCustom ? format.replace('{value}', axis.format(tempInterval))\n : axis.format(tempInterval);\n };\n return Double;\n}());\nexport { Double };\n","/**\n * Specifies the chart constant value\n */\n/** @private */\nexport var loaded = 'loaded';\n/** @private */\nexport var load = 'load';\n/** @private */\nexport var animationComplete = 'animationComplete';\n/** @private */\nexport var legendRender = 'legendRender';\n/** @private */\nexport var textRender = 'textRender';\n/** @private */\nexport var pointRender = 'pointRender';\n/** @private */\nexport var seriesRender = 'seriesRender';\n/** @private */\nexport var axisLabelRender = 'axisLabelRender';\n/** @private */\nexport var axisRangeCalculated = 'axisRangeCalculated';\n/** @private */\nexport var axisMultiLabelRender = 'axisMultiLabelRender';\n/** @private */\nexport var tooltipRender = 'tooltipRender';\n/** @private */\nexport var chartMouseMove = 'chartMouseMove';\n/** @private */\nexport var chartMouseClick = 'chartMouseClick';\n/** @private */\nexport var pointClick = 'pointClick';\n/** @private */\nexport var pointMove = 'pointMove';\n/** @private */\nexport var chartMouseLeave = 'chartMouseLeave';\n/** @private */\nexport var chartMouseDown = 'chartMouseDown';\n/** @private */\nexport var chartMouseUp = 'chartMouseUp';\n/** @private */\nexport var zoomComplete = 'zoomComplete';\n/** @private */\nexport var dragComplete = 'dragComplete';\n/** @private */\nexport var resized = 'resized';\n/** @private */\nexport var beforePrint = 'beforePrint';\n/** @private */\nexport var annotationRender = 'annotationRender';\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Property, Complex, Collection } from '@syncfusion/ej2-base';\nimport { Theme } from '../../common/model/theme';\nimport { Font, Border } from '../../common/model/base';\n/**\n * Configures the Annotation for chart.\n */\nvar ChartAnnotationSettings = /** @class */ (function (_super) {\n __extends(ChartAnnotationSettings, _super);\n function ChartAnnotationSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('0')\n ], ChartAnnotationSettings.prototype, \"x\", void 0);\n __decorate([\n Property('0')\n ], ChartAnnotationSettings.prototype, \"y\", void 0);\n __decorate([\n Property(null)\n ], ChartAnnotationSettings.prototype, \"content\", void 0);\n __decorate([\n Property('Center')\n ], ChartAnnotationSettings.prototype, \"horizontalAlignment\", void 0);\n __decorate([\n Property('Pixel')\n ], ChartAnnotationSettings.prototype, \"coordinateUnits\", void 0);\n __decorate([\n Property('Chart')\n ], ChartAnnotationSettings.prototype, \"region\", void 0);\n __decorate([\n Property('Middle')\n ], ChartAnnotationSettings.prototype, \"verticalAlignment\", void 0);\n __decorate([\n Property(null)\n ], ChartAnnotationSettings.prototype, \"xAxisName\", void 0);\n __decorate([\n Property(null)\n ], ChartAnnotationSettings.prototype, \"yAxisName\", void 0);\n __decorate([\n Property(null)\n ], ChartAnnotationSettings.prototype, \"description\", void 0);\n return ChartAnnotationSettings;\n}(ChildProperty));\nexport { ChartAnnotationSettings };\n/**\n * label border properties.\n */\nvar LabelBorder = /** @class */ (function (_super) {\n __extends(LabelBorder, _super);\n function LabelBorder() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], LabelBorder.prototype, \"color\", void 0);\n __decorate([\n Property(1)\n ], LabelBorder.prototype, \"width\", void 0);\n __decorate([\n Property('Rectangle')\n ], LabelBorder.prototype, \"type\", void 0);\n return LabelBorder;\n}(ChildProperty));\nexport { LabelBorder };\n/**\n * categories for multi level labels\n */\nvar MultiLevelCategories = /** @class */ (function (_super) {\n __extends(MultiLevelCategories, _super);\n function MultiLevelCategories() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], MultiLevelCategories.prototype, \"start\", void 0);\n __decorate([\n Property(null)\n ], MultiLevelCategories.prototype, \"end\", void 0);\n __decorate([\n Property('')\n ], MultiLevelCategories.prototype, \"text\", void 0);\n __decorate([\n Property(null)\n ], MultiLevelCategories.prototype, \"maximumTextWidth\", void 0);\n return MultiLevelCategories;\n}(ChildProperty));\nexport { MultiLevelCategories };\n/**\n * Strip line properties\n */\nvar StripLineSettings = /** @class */ (function (_super) {\n __extends(StripLineSettings, _super);\n function StripLineSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], StripLineSettings.prototype, \"visible\", void 0);\n __decorate([\n Property(false)\n ], StripLineSettings.prototype, \"startFromAxis\", void 0);\n __decorate([\n Property(null)\n ], StripLineSettings.prototype, \"start\", void 0);\n __decorate([\n Property(null)\n ], StripLineSettings.prototype, \"end\", void 0);\n __decorate([\n Property(null)\n ], StripLineSettings.prototype, \"size\", void 0);\n __decorate([\n Property('#808080')\n ], StripLineSettings.prototype, \"color\", void 0);\n __decorate([\n Complex({ color: 'transparent', width: 1 }, Border)\n ], StripLineSettings.prototype, \"border\", void 0);\n __decorate([\n Property('')\n ], StripLineSettings.prototype, \"text\", void 0);\n __decorate([\n Property(null)\n ], StripLineSettings.prototype, \"rotation\", void 0);\n __decorate([\n Property('Middle')\n ], StripLineSettings.prototype, \"horizontalAlignment\", void 0);\n __decorate([\n Property('Middle')\n ], StripLineSettings.prototype, \"verticalAlignment\", void 0);\n __decorate([\n Complex(Theme.stripLineLabelFont, Font)\n ], StripLineSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Property('Behind')\n ], StripLineSettings.prototype, \"zIndex\", void 0);\n __decorate([\n Property(1)\n ], StripLineSettings.prototype, \"opacity\", void 0);\n return StripLineSettings;\n}(ChildProperty));\nexport { StripLineSettings };\n/**\n * MultiLevelLabels properties\n */\nvar MultiLevelLabels = /** @class */ (function (_super) {\n __extends(MultiLevelLabels, _super);\n function MultiLevelLabels() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Center')\n ], MultiLevelLabels.prototype, \"alignment\", void 0);\n __decorate([\n Property('Wrap')\n ], MultiLevelLabels.prototype, \"overflow\", void 0);\n __decorate([\n Complex(Theme.axisLabelFont, Font)\n ], MultiLevelLabels.prototype, \"textStyle\", void 0);\n __decorate([\n Complex({ color: null, width: 1, type: 'Rectangle' }, LabelBorder)\n ], MultiLevelLabels.prototype, \"border\", void 0);\n __decorate([\n Collection([], MultiLevelCategories)\n ], MultiLevelLabels.prototype, \"categories\", void 0);\n return MultiLevelLabels;\n}(ChildProperty));\nexport { MultiLevelLabels };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, Complex, ChildProperty, Collection, extend } from '@syncfusion/ej2-base';\nimport { Font, Border } from '../../common/model/base';\nimport { Size, Rect, measureText, rotateTextSize, firstToLowerCase, valueToCoefficient, inside } from '../../common/utils/helper';\nimport { DoubleRange } from '../utils/double-range';\nimport { Double } from '../axis/double-axis';\nimport { Theme } from '../../common/model/theme';\nimport { axisRangeCalculated } from '../../common/model/constants';\nimport { StripLineSettings, MultiLevelLabels, LabelBorder } from '../model/chart-base';\nimport { textWrap } from '../../common/utils/helper';\nvar axisPadding = 10;\n/**\n * Configures the `rows` of the chart.\n */\nvar Row = /** @class */ (function (_super) {\n __extends(Row, _super);\n function Row() {\n /**\n * The height of the row as a string accept input both as '100px' and '100%'.\n * If specified as '100%, row renders to the full height of its chart.\n * @default '100%'\n */\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** @private */\n _this.axes = [];\n /** @private */\n _this.nearSizes = [];\n /** @private */\n _this.farSizes = [];\n return _this;\n }\n /**\n * Measure the row size\n * @return {void}\n * @private\n */\n Row.prototype.computeSize = function (axis, clipRect, scrollBarHeight) {\n var width = 0;\n var innerPadding = 5;\n if (axis.visible) {\n width += (axis.findTickSize(axis.crossInAxis) + scrollBarHeight +\n axis.findLabelSize(axis.crossInAxis, innerPadding) + axis.lineStyle.width / 2);\n }\n if (axis.opposedPosition) {\n this.farSizes.push(width);\n }\n else {\n this.nearSizes.push(width);\n }\n };\n __decorate([\n Property('100%')\n ], Row.prototype, \"height\", void 0);\n __decorate([\n Complex({}, Border)\n ], Row.prototype, \"border\", void 0);\n return Row;\n}(ChildProperty));\nexport { Row };\n/**\n * Configures the `columns` of the chart.\n */\nvar Column = /** @class */ (function (_super) {\n __extends(Column, _super);\n function Column() {\n /**\n * The width of the column as a string accepts input both as like '100px' or '100%'.\n * If specified as '100%, column renders to the full width of its chart.\n * @default '100%'\n */\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** @private */\n _this.axes = [];\n /** @private */\n _this.nearSizes = [];\n /** @private */\n _this.farSizes = [];\n /** @private */\n _this.padding = 0;\n return _this;\n }\n /**\n * Measure the column size\n * @return {void}\n * @private\n */\n Column.prototype.computeSize = function (axis, clipRect, scrollBarHeight) {\n var height = 0;\n var innerPadding = 5;\n if (axis.visible) {\n height += (axis.findTickSize(axis.crossInAxis) + scrollBarHeight +\n axis.findLabelSize(axis.crossInAxis, innerPadding) + axis.lineStyle.width / 2);\n }\n if (axis.opposedPosition) {\n this.farSizes.push(height);\n }\n else {\n this.nearSizes.push(height);\n }\n };\n __decorate([\n Property('100%')\n ], Column.prototype, \"width\", void 0);\n __decorate([\n Complex({}, Border)\n ], Column.prototype, \"border\", void 0);\n return Column;\n}(ChildProperty));\nexport { Column };\n/**\n * Configures the major grid lines in the `axis`.\n */\nvar MajorGridLines = /** @class */ (function (_super) {\n __extends(MajorGridLines, _super);\n function MajorGridLines() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(1)\n ], MajorGridLines.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], MajorGridLines.prototype, \"dashArray\", void 0);\n __decorate([\n Property(null)\n ], MajorGridLines.prototype, \"color\", void 0);\n return MajorGridLines;\n}(ChildProperty));\nexport { MajorGridLines };\n/**\n * Configures the minor grid lines in the `axis`.\n */\nvar MinorGridLines = /** @class */ (function (_super) {\n __extends(MinorGridLines, _super);\n function MinorGridLines() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0.7)\n ], MinorGridLines.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], MinorGridLines.prototype, \"dashArray\", void 0);\n __decorate([\n Property(null)\n ], MinorGridLines.prototype, \"color\", void 0);\n return MinorGridLines;\n}(ChildProperty));\nexport { MinorGridLines };\n/**\n * Configures the axis line of a chart.\n */\nvar AxisLine = /** @class */ (function (_super) {\n __extends(AxisLine, _super);\n function AxisLine() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(1)\n ], AxisLine.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], AxisLine.prototype, \"dashArray\", void 0);\n __decorate([\n Property(null)\n ], AxisLine.prototype, \"color\", void 0);\n return AxisLine;\n}(ChildProperty));\nexport { AxisLine };\n/**\n * Configures the major tick lines.\n */\nvar MajorTickLines = /** @class */ (function (_super) {\n __extends(MajorTickLines, _super);\n function MajorTickLines() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(1)\n ], MajorTickLines.prototype, \"width\", void 0);\n __decorate([\n Property(5)\n ], MajorTickLines.prototype, \"height\", void 0);\n __decorate([\n Property(null)\n ], MajorTickLines.prototype, \"color\", void 0);\n return MajorTickLines;\n}(ChildProperty));\nexport { MajorTickLines };\n/**\n * Configures the minor tick lines.\n */\nvar MinorTickLines = /** @class */ (function (_super) {\n __extends(MinorTickLines, _super);\n function MinorTickLines() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0.7)\n ], MinorTickLines.prototype, \"width\", void 0);\n __decorate([\n Property(5)\n ], MinorTickLines.prototype, \"height\", void 0);\n __decorate([\n Property(null)\n ], MinorTickLines.prototype, \"color\", void 0);\n return MinorTickLines;\n}(ChildProperty));\nexport { MinorTickLines };\n/**\n * Configures the crosshair ToolTip.\n */\nvar CrosshairTooltip = /** @class */ (function (_super) {\n __extends(CrosshairTooltip, _super);\n function CrosshairTooltip() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], CrosshairTooltip.prototype, \"enable\", void 0);\n __decorate([\n Property(null)\n ], CrosshairTooltip.prototype, \"fill\", void 0);\n __decorate([\n Complex(Theme.crosshairLabelFont, Font)\n ], CrosshairTooltip.prototype, \"textStyle\", void 0);\n return CrosshairTooltip;\n}(ChildProperty));\nexport { CrosshairTooltip };\n/**\n * Configures the axes in the chart.\n */\nvar Axis = /** @class */ (function (_super) {\n __extends(Axis, _super);\n function Axis() {\n /**\n * Options to customize the axis label.\n */\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** @private */\n _this.visibleLabels = [];\n /** @private */\n _this.series = [];\n /** @private */\n _this.rect = new Rect(undefined, undefined, 0, 0);\n /** @private */\n _this.axisBottomLine = null;\n /** @private */\n _this.intervalDivs = [10, 5, 2, 1];\n /** @private */\n _this.angle = _this.labelRotation;\n /** @private */\n _this.isStack100 = false;\n /** @private */\n _this.crossAt = null;\n /** @private */\n _this.updatedRect = null;\n /** @private */\n _this.multiLevelLabelHeight = 0;\n /** @private */\n _this.isChart = true;\n return _this;\n }\n /**\n * The function used to find tick size.\n * @return {number}\n * @private\n */\n Axis.prototype.findTickSize = function (crossAxis) {\n if (this.tickPosition === 'Inside') {\n return 0;\n }\n if (crossAxis && (!crossAxis.visibleRange || this.isInside(crossAxis.visibleRange))) {\n return 0;\n }\n return this.majorTickLines.height;\n };\n /**\n * The function used to find axis position.\n * @return {number}\n * @private\n */\n Axis.prototype.isInside = function (range) {\n return (inside(this.crossAt, range) ||\n (!this.opposedPosition && this.crossAt >= range.max) || (this.opposedPosition && this.crossAt <= range.min));\n };\n /**\n * The function used to find label Size.\n * @return {number}\n * @private\n */\n Axis.prototype.findLabelSize = function (crossAxis, innerPadding) {\n var titleSize = 0;\n if (this.title) {\n titleSize = measureText(this.title, this.titleStyle).height + innerPadding;\n }\n if (this.labelPosition === 'Inside') {\n return titleSize + innerPadding;\n }\n var diff;\n var value;\n var labelSize = titleSize + innerPadding + axisPadding +\n ((this.orientation === 'Vertical') ? this.maxLabelSize.width : this.maxLabelSize.height) + this.multiLevelLabelHeight;\n if (crossAxis && this.placeNextToAxisLine) {\n var range = crossAxis.visibleRange;\n var size = (crossAxis.orientation === 'Horizontal') ? crossAxis.rect.width : crossAxis.rect.height;\n if (!range || !size) {\n return 0;\n }\n else if (this.isInside(range)) {\n value = this.findDifference(crossAxis);\n diff = (value) * (size / range.delta);\n diff = (value) * ((size - (diff < labelSize ? (labelSize - diff) : 0)) / range.delta);\n labelSize = (diff < labelSize) ? (labelSize - diff) : 0;\n }\n }\n return labelSize;\n };\n /**\n * The function used to find axis position.\n * @return {number}\n * @private\n */\n Axis.prototype.updateCrossValue = function (chart) {\n var value = this.crossAt;\n if (value === null || !this.isInside(this.crossInAxis.visibleRange)) {\n this.updatedRect = this.rect;\n return null;\n }\n var range = this.crossInAxis.visibleRange;\n if (!this.opposedPosition) {\n if (this.crossAt > range.max) {\n value = range.max;\n }\n }\n else {\n if (this.crossAt < range.min) {\n value = range.min;\n }\n }\n this.updatedRect = extend({}, this.rect, null, true);\n if (this.orientation === 'Horizontal') {\n value = this.crossInAxis.rect.height - (valueToCoefficient(value, this.crossInAxis) * this.crossInAxis.rect.height);\n this.updatedRect.y = this.crossInAxis.rect.y + value;\n }\n else {\n value = valueToCoefficient(value, this.crossInAxis) * this.crossInAxis.rect.width;\n this.updatedRect.x = this.crossInAxis.rect.x + value;\n }\n };\n Axis.prototype.findDifference = function (crossAxis) {\n var value = 0;\n if (this.opposedPosition) {\n value = crossAxis.isInversed ? crossAxis.visibleRange.min : crossAxis.visibleRange.max;\n }\n else {\n value = crossAxis.isInversed ? crossAxis.visibleRange.max : crossAxis.visibleRange.min;\n }\n return Math.abs(this.crossAt - value);\n };\n /**\n * Calculate visible range for axis.\n * @return {void}\n * @private\n */\n Axis.prototype.calculateVisibleRange = function (size) {\n if (this.zoomFactor < 1 || this.zoomPosition > 0) {\n var baseRange = this.actualRange;\n var start = void 0;\n var end = void 0;\n if (!this.isInversed) {\n start = this.actualRange.min + this.zoomPosition * this.actualRange.delta;\n end = start + this.zoomFactor * this.actualRange.delta;\n }\n else {\n start = this.actualRange.max - (this.zoomPosition * this.actualRange.delta);\n end = start - (this.zoomFactor * this.actualRange.delta);\n }\n if (start < baseRange.min) {\n end = end + (baseRange.min - start);\n start = baseRange.min;\n }\n if (end > baseRange.max) {\n start = start - (end - baseRange.max);\n end = baseRange.max;\n }\n this.doubleRange = new DoubleRange(start, end);\n this.visibleRange.min = this.doubleRange.start;\n this.visibleRange.max = this.doubleRange.end;\n this.visibleRange.delta = this.doubleRange.delta;\n }\n };\n /**\n * Triggers the event.\n * @return {void}\n * @private\n */\n Axis.prototype.triggerRangeRender = function (chart, minimum, maximum, interval) {\n var argsData;\n argsData = {\n cancel: false, name: axisRangeCalculated, axis: this,\n minimum: minimum, maximum: maximum, interval: interval\n };\n chart.trigger(axisRangeCalculated, argsData);\n if (!argsData.cancel) {\n this.visibleRange.min = argsData.minimum;\n this.visibleRange.max = argsData.maximum;\n this.visibleRange.interval = argsData.interval;\n this.visibleRange.delta = argsData.maximum - argsData.minimum;\n }\n };\n /**\n * Calculate padding for the axis.\n * @return {string}\n * @private\n */\n Axis.prototype.getRangePadding = function (chart) {\n var padding = this.rangePadding;\n if (padding !== 'Auto') {\n return padding;\n }\n switch (this.orientation) {\n case 'Horizontal':\n if (chart.requireInvertedAxis) {\n padding = (this.isStack100 ? 'Round' : 'Normal');\n }\n else {\n padding = 'None';\n }\n break;\n case 'Vertical':\n if (!chart.requireInvertedAxis) {\n padding = (this.isStack100 ? 'Round' : 'Normal');\n }\n else {\n padding = 'None';\n }\n break;\n }\n return padding;\n };\n /**\n * Calculate maximum label width for the axis.\n * @return {void}\n * @private\n */\n Axis.prototype.getMaxLabelWidth = function (chart) {\n var prevSize = new Size(0, 0);\n var rotatedLabel;\n var pointX;\n var previousEnd = 0;\n var isIntersect = false;\n this.angle = this.labelRotation;\n this.maxLabelSize = new Size(0, 0);\n var action = this.labelIntersectAction;\n var label;\n for (var i = 0; i < this.visibleLabels.length; i++) {\n label = this.visibleLabels[i];\n label.size = measureText(label.text, this.labelStyle);\n if (label.size.width > this.maxLabelSize.width) {\n this.maxLabelSize.width = label.size.width;\n this.rotatedLabel = label.text;\n }\n if (label.size.height > this.maxLabelSize.height) {\n this.maxLabelSize.height = label.size.height;\n }\n if (action === 'None' || action === 'Hide' || action === 'Trim') {\n continue;\n }\n if ((action !== 'None' || this.angle % 360 === 0) && this.orientation === 'Horizontal' &&\n this.rect.width > 0 && !isIntersect) {\n pointX = (valueToCoefficient(label.value, this) * this.rect.width) + this.rect.x;\n pointX -= label.size.width / 2;\n if (this.edgeLabelPlacement === 'Shift') {\n if (i === 0 && pointX < this.rect.x) {\n pointX = this.rect.x;\n }\n if (i === this.visibleLabels.length - 1 && ((pointX + label.size.width) > (this.rect.x + this.rect.width))) {\n pointX = this.rect.x + this.rect.width - label.size.width;\n }\n }\n switch (action) {\n case 'MultipleRows':\n if (i > 0) {\n this.findMultiRows(i, pointX, label);\n }\n break;\n case 'Rotate45':\n case 'Rotate90':\n if (i > 0 && (!this.isInversed ? pointX <= previousEnd : pointX + label.size.width >= previousEnd)) {\n this.angle = (action === 'Rotate45') ? 45 : 90;\n isIntersect = true;\n }\n break;\n default:\n label.text = textWrap(label.text, this.rect.width / this.visibleLabels.length, this.labelStyle);\n var height = (label.size.height * label.text.length);\n if (height > this.maxLabelSize.height) {\n this.maxLabelSize.height = height;\n }\n break;\n }\n previousEnd = this.isInversed ? pointX : pointX + label.size.width;\n }\n }\n if (this.angle !== 0 && this.orientation === 'Horizontal') {\n this.maxLabelSize = rotateTextSize(this.labelStyle, this.rotatedLabel, this.angle, chart);\n }\n if (chart.multiLevelLabelModule && this.multiLevelLabels.length > 0) {\n chart.multiLevelLabelModule.getMultilevelLabelsHeight(this);\n }\n };\n /**\n * Finds the multiple rows for axis.\n * @return {void}\n */\n Axis.prototype.findMultiRows = function (length, currentX, currentLabel) {\n var label;\n var pointX;\n var store = [];\n var isMultiRows;\n for (var i = length - 1; i >= 0; i--) {\n label = this.visibleLabels[i];\n pointX = (valueToCoefficient(label.value, this) * this.rect.width) + this.rect.x;\n isMultiRows = !this.isInversed ? currentX < (pointX + label.size.width / 2) :\n currentX + currentLabel.size.width > (pointX - label.size.width / 2);\n if (isMultiRows) {\n store.push(label.index);\n currentLabel.index = (currentLabel.index > label.index) ? currentLabel.index : label.index + 1;\n }\n else {\n currentLabel.index = store.indexOf(label.index) > -1 ? currentLabel.index : label.index;\n }\n }\n var height = (currentLabel.size.height * currentLabel.index) + (5 * (currentLabel.index - 1));\n if (height > this.maxLabelSize.height) {\n this.maxLabelSize.height = height;\n }\n };\n /**\n * Finds the default module for axis.\n * @return {void}\n * @private\n */\n Axis.prototype.getModule = function (chart) {\n if (this.valueType === 'Double') {\n this.baseModule = new Double(chart);\n }\n else {\n this.baseModule = chart[firstToLowerCase(this.valueType) + 'Module'];\n }\n };\n __decorate([\n Complex(Theme.axisLabelFont, Font)\n ], Axis.prototype, \"labelStyle\", void 0);\n __decorate([\n Complex({}, CrosshairTooltip)\n ], Axis.prototype, \"crosshairTooltip\", void 0);\n __decorate([\n Property('')\n ], Axis.prototype, \"title\", void 0);\n __decorate([\n Complex(Theme.axisTitleFont, Font)\n ], Axis.prototype, \"titleStyle\", void 0);\n __decorate([\n Property('')\n ], Axis.prototype, \"labelFormat\", void 0);\n __decorate([\n Property('')\n ], Axis.prototype, \"skeleton\", void 0);\n __decorate([\n Property('DateTime')\n ], Axis.prototype, \"skeletonType\", void 0);\n __decorate([\n Property(0)\n ], Axis.prototype, \"plotOffset\", void 0);\n __decorate([\n Property(false)\n ], Axis.prototype, \"isIndexed\", void 0);\n __decorate([\n Property(10)\n ], Axis.prototype, \"logBase\", void 0);\n __decorate([\n Property(0)\n ], Axis.prototype, \"columnIndex\", void 0);\n __decorate([\n Property(0)\n ], Axis.prototype, \"rowIndex\", void 0);\n __decorate([\n Property(1)\n ], Axis.prototype, \"span\", void 0);\n __decorate([\n Property(null)\n ], Axis.prototype, \"desiredIntervals\", void 0);\n __decorate([\n Property(3)\n ], Axis.prototype, \"maximumLabels\", void 0);\n __decorate([\n Property(1)\n ], Axis.prototype, \"zoomFactor\", void 0);\n __decorate([\n Property(0)\n ], Axis.prototype, \"zoomPosition\", void 0);\n __decorate([\n Property(false)\n ], Axis.prototype, \"opposedPosition\", void 0);\n __decorate([\n Property(true)\n ], Axis.prototype, \"enableAutoIntervalOnZooming\", void 0);\n __decorate([\n Property('Auto')\n ], Axis.prototype, \"rangePadding\", void 0);\n __decorate([\n Property('Double')\n ], Axis.prototype, \"valueType\", void 0);\n __decorate([\n Property('None')\n ], Axis.prototype, \"edgeLabelPlacement\", void 0);\n __decorate([\n Property('Auto')\n ], Axis.prototype, \"intervalType\", void 0);\n __decorate([\n Property('BetweenTicks')\n ], Axis.prototype, \"labelPlacement\", void 0);\n __decorate([\n Property('Outside')\n ], Axis.prototype, \"tickPosition\", void 0);\n __decorate([\n Property('Outside')\n ], Axis.prototype, \"labelPosition\", void 0);\n __decorate([\n Property('')\n ], Axis.prototype, \"name\", void 0);\n __decorate([\n Property(true)\n ], Axis.prototype, \"visible\", void 0);\n __decorate([\n Property(0)\n ], Axis.prototype, \"minorTicksPerInterval\", void 0);\n __decorate([\n Property(0)\n ], Axis.prototype, \"labelRotation\", void 0);\n __decorate([\n Property(null)\n ], Axis.prototype, \"crossesAt\", void 0);\n __decorate([\n Property(true)\n ], Axis.prototype, \"placeNextToAxisLine\", void 0);\n __decorate([\n Property(null)\n ], Axis.prototype, \"crossesInAxis\", void 0);\n __decorate([\n Property(null)\n ], Axis.prototype, \"minimum\", void 0);\n __decorate([\n Property(null)\n ], Axis.prototype, \"maximum\", void 0);\n __decorate([\n Property(null)\n ], Axis.prototype, \"interval\", void 0);\n __decorate([\n Complex({}, MajorTickLines)\n ], Axis.prototype, \"majorTickLines\", void 0);\n __decorate([\n Complex({}, MinorTickLines)\n ], Axis.prototype, \"minorTickLines\", void 0);\n __decorate([\n Complex({}, MajorGridLines)\n ], Axis.prototype, \"majorGridLines\", void 0);\n __decorate([\n Complex({}, MinorGridLines)\n ], Axis.prototype, \"minorGridLines\", void 0);\n __decorate([\n Complex({}, AxisLine)\n ], Axis.prototype, \"lineStyle\", void 0);\n __decorate([\n Property('Trim')\n ], Axis.prototype, \"labelIntersectAction\", void 0);\n __decorate([\n Property(false)\n ], Axis.prototype, \"isInversed\", void 0);\n __decorate([\n Property(100)\n ], Axis.prototype, \"coefficient\", void 0);\n __decorate([\n Property(0)\n ], Axis.prototype, \"startAngle\", void 0);\n __decorate([\n Property(null)\n ], Axis.prototype, \"description\", void 0);\n __decorate([\n Property(2)\n ], Axis.prototype, \"tabIndex\", void 0);\n __decorate([\n Collection([], StripLineSettings)\n ], Axis.prototype, \"stripLines\", void 0);\n __decorate([\n Collection([], MultiLevelLabels)\n ], Axis.prototype, \"multiLevelLabels\", void 0);\n __decorate([\n Complex({ color: null, width: 0, type: 'Rectangle' }, LabelBorder)\n ], Axis.prototype, \"border\", void 0);\n return Axis;\n}(ChildProperty));\nexport { Axis };\n/** @private */\nvar VisibleLabels = /** @class */ (function () {\n function VisibleLabels(text, value, labelStyle, size, index) {\n if (size === void 0) { size = new Size(0, 0); }\n if (index === void 0) { index = 1; }\n this.text = text;\n this.originalText = text;\n this.value = value;\n this.labelStyle = labelStyle;\n this.size = size;\n this.index = 1;\n }\n return VisibleLabels;\n}());\nexport { VisibleLabels };\n","import { createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DataUtil } from '@syncfusion/ej2-data';\nimport { subtractThickness, valueToCoefficient, sum, subArray, TextOption, inside, measureText } from '../../common/utils/helper';\nimport { Size, Rect, Thickness, PathOption, logBase, createZoomingLabels, getElement, rotateTextSize } from '../../common/utils/helper';\nimport { textElement, textTrim } from '../../common/utils/helper';\n/**\n * Specifies the Cartesian Axis Layout.\n */\nvar axisPadding = 10;\nvar CartesianAxisLayoutPanel = /** @class */ (function () {\n /** @private */\n function CartesianAxisLayoutPanel(chartModule) {\n this.chart = chartModule;\n this.padding = 5;\n }\n /**\n * Measure the axis size.\n * @return {void}\n * @private\n */\n CartesianAxisLayoutPanel.prototype.measureAxis = function (rect) {\n var chart = this.chart;\n this.crossAt(chart);\n this.seriesClipRect = new Rect(rect.x, rect.y, rect.width, rect.height);\n this.initialClipRect = rect;\n this.leftSize = 0;\n this.rightSize = 0;\n this.topSize = 0;\n this.bottomSize = 0;\n //Measure Axis size with initial Rect\n this.measureRowAxis(chart, this.initialClipRect);\n this.initialClipRect = subtractThickness(this.initialClipRect, new Thickness(this.leftSize, this.rightSize, 0, 0));\n this.measureColumnAxis(chart, this.initialClipRect);\n this.initialClipRect = subtractThickness(this.initialClipRect, new Thickness(0, 0, this.topSize, this.bottomSize));\n if (!this.chart.delayRedraw) {\n this.calculateAxisSize(this.initialClipRect);\n }\n this.leftSize = 0;\n this.rightSize = 0;\n this.topSize = 0;\n this.bottomSize = 0;\n //Measure Axis size with series Rect\n this.measureRowAxis(chart, this.initialClipRect);\n this.seriesClipRect = subtractThickness(this.seriesClipRect, new Thickness(this.leftSize, this.rightSize, 0, 0));\n this.measureColumnAxis(chart, this.initialClipRect);\n this.seriesClipRect = subtractThickness(this.seriesClipRect, new Thickness(0, 0, this.topSize, this.bottomSize));\n if (!this.chart.delayRedraw) {\n chart.refreshAxis();\n this.calculateAxisSize(this.seriesClipRect);\n }\n };\n CartesianAxisLayoutPanel.prototype.measureRowAxis = function (chart, rect) {\n var row;\n this.calculateRowSize(rect);\n for (var _i = 0, _a = chart.rows; _i < _a.length; _i++) {\n var item = _a[_i];\n row = item;\n row.nearSizes = [];\n row.farSizes = [];\n this.arrangeAxis(row);\n this.measureDefinition(row, chart, new Size(chart.availableSize.width, row.computedHeight), rect);\n if (this.leftSize < sum(row.nearSizes)) {\n this.leftSize = sum(row.nearSizes);\n }\n if (this.rightSize < sum(row.farSizes)) {\n this.rightSize = sum(row.farSizes);\n }\n }\n };\n CartesianAxisLayoutPanel.prototype.measureColumnAxis = function (chart, rect) {\n var column;\n this.calculateColumnSize(rect);\n for (var _i = 0, _a = chart.columns; _i < _a.length; _i++) {\n var item = _a[_i];\n column = item;\n column.farSizes = [];\n column.nearSizes = [];\n this.arrangeAxis(column);\n this.measureDefinition(column, chart, new Size(column.computedWidth, chart.availableSize.height), rect);\n if (this.bottomSize < sum(column.nearSizes)) {\n this.bottomSize = sum(column.nearSizes);\n }\n if (this.topSize < sum(column.farSizes)) {\n this.topSize = sum(column.farSizes);\n }\n }\n };\n /**\n * Measure the column and row in chart.\n * @return {void}\n * @private\n */\n CartesianAxisLayoutPanel.prototype.measureDefinition = function (definition, chart, size, clipRect) {\n var axis;\n var axisType;\n for (var _i = 0, _a = definition.axes; _i < _a.length; _i++) {\n var axis_1 = _a[_i];\n axis_1.scrollBarHeight = chart.scrollBarModule && chart.zoomSettings.enableScrollbar && chart.zoomModule.isZoomed\n && (axis_1.zoomFactor < 1 || axis_1.zoomPosition > 0) ? 16 : 0;\n axis_1.scrollBarHeight = chart.delayRedraw ? (axis_1.zoomingScrollBar && axis_1.zoomingScrollBar.svgObject &&\n axis_1.zoomingScrollBar.svgObject.childElementCount) ? 16 : 0 : axis_1.scrollBarHeight;\n axis_1.getModule(chart);\n axis_1.baseModule.calculateRangeAndInterval(size, axis_1);\n definition.computeSize(axis_1, clipRect, axis_1.scrollBarHeight);\n }\n if (definition.farSizes.length > 0) {\n definition.farSizes[definition.farSizes.length - 1] -= axisPadding;\n }\n if (definition.nearSizes.length > 0) {\n definition.nearSizes[definition.nearSizes.length - 1] -= axisPadding;\n }\n };\n /**\n * Measure the axis.\n * @return {void}\n * @private\n */\n CartesianAxisLayoutPanel.prototype.calculateAxisSize = function (rect) {\n var chart = this.chart;\n var row;\n var column;\n var definition;\n var axis;\n var nearCount = 0;\n var farCount = 0;\n var size = 0;\n var x;\n var y;\n this.calculateRowSize(rect);\n for (var i = 0, len = chart.rows.length; i < len; i++) {\n row = chart.rows[i];\n nearCount = 0;\n farCount = 0;\n for (var j = 0, len_1 = row.axes.length; j < len_1; j++) {\n axis = row.axes[j];\n if (axis.rect.height === 0) {\n axis.rect.height = row.computedHeight;\n size = 0;\n for (var k = i + 1, len_2 = i + axis.span; k < len_2; k++) {\n definition = chart.rows[k];\n size += definition.computedHeight;\n }\n axis.rect.y = (row.computedTop - size) + axis.plotOffset;\n axis.rect.height = (axis.rect.height + size) - (2 * axis.plotOffset);\n axis.rect.width = 0;\n }\n if (axis.opposedPosition) {\n x = rect.x + rect.width + sum(subArray(row.farSizes, farCount));\n axis.rect.x = axis.rect.x >= x ? axis.rect.x : x;\n farCount++;\n }\n else {\n x = rect.x - sum(subArray(row.nearSizes, nearCount));\n axis.rect.x = axis.rect.x <= x ? axis.rect.x : x;\n nearCount++;\n }\n }\n }\n this.calculateColumnSize(rect);\n for (var i = 0, len = chart.columns.length; i < len; i++) {\n column = chart.columns[i];\n nearCount = 0;\n farCount = 0;\n for (var j = 0, len_3 = column.axes.length; j < len_3; j++) {\n axis = column.axes[j];\n if (axis.rect.width === 0) {\n for (var k = i, len_4 = (i + axis.span); k < len_4; k++) {\n definition = chart.columns[k];\n axis.rect.width += definition.computedWidth;\n }\n axis.rect.x = column.computedLeft + axis.plotOffset;\n axis.rect.width -= (2 * axis.plotOffset);\n axis.rect.height = 0;\n }\n if (axis.opposedPosition) {\n y = rect.y - sum(subArray(column.farSizes, farCount));\n axis.rect.y = axis.rect.y <= y ? axis.rect.y : y;\n farCount++;\n }\n else {\n y = rect.y + rect.height + sum(subArray(column.nearSizes, nearCount));\n axis.rect.y = axis.rect.y >= y ? axis.rect.y : y;\n nearCount++;\n }\n }\n }\n };\n /**\n * Measure the axis.\n * @return {void}\n * @private\n */\n CartesianAxisLayoutPanel.prototype.measure = function () {\n var chart = this.chart;\n var row;\n var column;\n var definition;\n var axis;\n var actualIndex;\n var span;\n var axisLength;\n for (var _i = 0, _a = chart.axisCollections; _i < _a.length; _i++) {\n var axis_2 = _a[_i];\n //definition.Axes = axis;\n if (axis_2.orientation === 'Vertical') {\n chart.verticalAxes.push(axis_2);\n actualIndex = this.getActualRow(axis_2);\n row = chart.rows[actualIndex];\n this.pushAxis(row, axis_2);\n span = ((actualIndex + axis_2.span) > chart.rows.length ? chart.rows.length : (actualIndex + axis_2.span));\n for (var j = actualIndex + 1; j < span; j++) {\n definition = chart.rows[j];\n definition.axes[row.axes.length - 1] = axis_2;\n chart.rows[j] = definition;\n }\n chart.rows[actualIndex] = row;\n }\n else {\n chart.horizontalAxes.push(axis_2);\n actualIndex = this.getActualColumn(axis_2);\n column = chart.columns[actualIndex];\n this.pushAxis(column, axis_2);\n span = ((actualIndex + axis_2.span) > chart.columns.length ? chart.columns.length : (actualIndex + axis_2.span));\n for (var j = actualIndex + 1; j < span; j++) {\n definition = chart.columns[j];\n definition.axes[column.axes.length - 1] = axis_2;\n chart.columns[j] = definition;\n }\n chart.columns[actualIndex] = column;\n }\n }\n };\n CartesianAxisLayoutPanel.prototype.crossAt = function (chart) {\n for (var _i = 0, _a = chart.axisCollections; _i < _a.length; _i++) {\n var axis = _a[_i];\n if (axis.crossesAt === null) {\n continue;\n }\n var isTransposed = chart.isTransposed;\n if (!axis.crossesInAxis) {\n if (chart.requireInvertedAxis) {\n axis.crossInAxis = ((axis.orientation === 'Horizontal')) ? chart.primaryXAxis : chart.primaryYAxis;\n }\n else {\n axis.crossInAxis = ((axis.orientation === 'Horizontal')) ? chart.primaryYAxis : chart.primaryXAxis;\n }\n axis.crossAt = this.updateCrossAt(axis.crossInAxis, axis.crossesAt);\n continue;\n }\n else {\n for (var i = 2, len = chart.axisCollections.length; i < len; i++) {\n if (axis.crossesInAxis === chart.axisCollections[i].name) {\n axis.crossInAxis = chart.axisCollections[i];\n axis.crossAt = this.updateCrossAt(axis.crossInAxis, axis.crossesAt);\n continue;\n }\n }\n }\n }\n };\n CartesianAxisLayoutPanel.prototype.updateCrossAt = function (axis, crossAt) {\n switch (axis.valueType) {\n case 'DateTime':\n var option = {\n skeleton: 'full',\n type: 'dateTime'\n };\n var dateParser = this.chart.intl.getDateParser(option);\n var dateFormatter = this.chart.intl.getDateFormat(option);\n return Date.parse(dateParser(dateFormatter(new Date(DataUtil.parse.parseJson({ val: crossAt }).val))));\n case 'Category':\n return parseFloat(crossAt) ? parseFloat(crossAt) : axis.labels.indexOf(crossAt);\n case 'Logarithmic':\n return logBase(crossAt, axis.logBase);\n default:\n return crossAt;\n }\n };\n CartesianAxisLayoutPanel.prototype.pushAxis = function (definition, axis) {\n for (var i = 0, len = definition.axes.length; i <= len; i++) {\n if (!definition.axes[i]) {\n definition.axes[i] = axis;\n break;\n }\n }\n };\n CartesianAxisLayoutPanel.prototype.arrangeAxis = function (definition) {\n var axisCollection = [];\n for (var i = 0, len = definition.axes.length; i <= len; i++) {\n if (definition.axes[i]) {\n axisCollection.push(definition.axes[i]);\n }\n }\n definition.axes = axisCollection;\n };\n CartesianAxisLayoutPanel.prototype.getActualColumn = function (axis) {\n var actualLength = this.chart.columns.length;\n var pos = axis.columnIndex;\n var result = pos >= actualLength ? actualLength - 1 : (pos < 0 ? 0 : pos);\n return result;\n };\n CartesianAxisLayoutPanel.prototype.getActualRow = function (axis) {\n var actualLength = this.chart.rows.length;\n var pos = axis.rowIndex;\n var result = pos >= actualLength ? actualLength - 1 : (pos < 0 ? 0 : pos);\n return result;\n };\n /**\n * Measure the row size.\n * @return {void}\n */\n CartesianAxisLayoutPanel.prototype.calculateRowSize = function (rect) {\n /*! Calculate row size */\n var chart = this.chart;\n var row;\n var rowTop = rect.y + rect.height;\n var height = 0;\n var remainingHeight = Math.max(0, rect.height);\n for (var i = 0, len = chart.rows.length; i < len; i++) {\n row = chart.rows[i];\n if (row.height.indexOf('%') !== -1) {\n height = Math.min(remainingHeight, (rect.height * parseInt(row.height, 10) / 100));\n }\n else {\n height = Math.min(remainingHeight, parseInt(row.height, 10));\n }\n height = (i !== (len - 1)) ? height : remainingHeight;\n row.computedHeight = height;\n rowTop -= height;\n row.computedTop = rowTop;\n remainingHeight -= height;\n }\n };\n /**\n * Measure the row size.\n * @return {void}\n */\n CartesianAxisLayoutPanel.prototype.calculateColumnSize = function (rect) {\n /*! Calculate column size */\n var chart = this.chart;\n var column;\n var columnLeft = rect.x;\n var width = 0;\n var remainingWidth = Math.max(0, rect.width);\n for (var i = 0, len = chart.columns.length; i < len; i++) {\n column = chart.columns[i];\n if (column.width.indexOf('%') !== -1) {\n width = Math.min(remainingWidth, (rect.width * parseInt(column.width, 10) / 100));\n }\n else {\n width = Math.min(remainingWidth, parseInt(column.width, 10));\n }\n width = (i !== (len - 1)) ? width : remainingWidth;\n column.computedWidth = width;\n column.computedLeft = columnLeft;\n columnLeft += width;\n remainingWidth -= width;\n }\n };\n /**\n * To render the axis element.\n * @return {void}\n * @private\n */\n CartesianAxisLayoutPanel.prototype.renderAxes = function () {\n var chart = this.chart;\n var axis;\n var axisElement = chart.renderer.createGroup({ id: chart.element.id + 'AxisInsideCollection' });\n var axisLineElement = chart.renderer.createGroup({ id: chart.element.id + 'AxisOutsideCollection' });\n var outsideElement;\n var isInside;\n for (var i = 0, len = chart.axisCollections.length; i < len; i++) {\n axis = chart.axisCollections[i];\n this.element = chart.renderer.createGroup({ id: chart.element.id + 'AxisGroup' + i + 'Inside' });\n outsideElement = chart.renderer.createGroup({ id: chart.element.id + 'AxisGroup' + i + 'Outside' });\n isInside = this.findAxisPosition(axis);\n if (axis.orientation === 'Horizontal') {\n axis.updateCrossValue(chart);\n if (axis.visible && axis.lineStyle.width > 0) {\n this.drawAxisLine(axis, i, axis.plotOffset, 0, isInside ? outsideElement : this.element, axis.updatedRect);\n }\n if (axis.majorGridLines.width > 0 || axis.majorTickLines.width > 0) {\n this.drawXAxisGridLine(axis, i, (isInside || axis.tickPosition === 'Inside') ? outsideElement : this.element, axis.updatedRect);\n }\n if (axis.visible) {\n this.drawXAxisLabels(axis, i, (isInside || axis.labelPosition === 'Inside') ? outsideElement : this.element, (axis.placeNextToAxisLine ? axis.updatedRect : axis.rect));\n this.drawXAxisBorder(axis, i, (isInside || axis.labelPosition === 'Inside') ? outsideElement : this.element, (axis.placeNextToAxisLine ? axis.updatedRect : axis.rect));\n this.drawXAxisTitle(axis, i, isInside ? outsideElement : this.element, (axis.placeNextToAxisLine ? axis.updatedRect : axis.rect));\n }\n }\n else {\n axis.updateCrossValue(chart);\n if (axis.visible && axis.lineStyle.width > 0) {\n this.drawAxisLine(axis, i, 0, axis.plotOffset, isInside ? outsideElement : this.element, axis.updatedRect);\n }\n if (axis.majorGridLines.width > 0 || axis.majorTickLines.width > 0) {\n this.drawYAxisGridLine(axis, i, (isInside || axis.tickPosition === 'Inside') ? outsideElement : this.element, axis.updatedRect);\n }\n if (axis.visible) {\n this.drawYAxisLabels(axis, i, (isInside || axis.labelPosition === 'Inside') ? outsideElement : this.element, (axis.placeNextToAxisLine ? axis.updatedRect : axis.rect));\n this.drawYAxisBorder(axis, i, (isInside || axis.labelPosition === 'Inside') ? outsideElement : this.element, (axis.placeNextToAxisLine ? axis.updatedRect : axis.rect));\n this.drawYAxisTitle(axis, i, isInside ? outsideElement : this.element, (axis.placeNextToAxisLine ? axis.updatedRect : axis.rect));\n }\n }\n axisElement.appendChild(this.element);\n if (outsideElement && outsideElement.childNodes.length > 0) {\n axisLineElement.appendChild(outsideElement);\n }\n if (chart.scrollBarModule && chart.zoomSettings.enableScrollbar) {\n this.renderScrollbar(chart, axis);\n }\n }\n this.element = chart.renderer.createGroup({ id: chart.element.id + 'DefinitionLine' });\n for (var j = 0, len = chart.rows.length; j < len; j++) {\n var row = chart.rows[j];\n if (row.border.color) {\n this.drawBottomLine(row, j, true);\n }\n }\n for (var j = 0, len = chart.columns.length; j < len; j++) {\n var column = chart.columns[j];\n if (column.border.color) {\n this.drawBottomLine(column, j, false);\n }\n }\n axisElement.appendChild(this.element);\n chart.svgObject.appendChild(axisElement);\n return axisLineElement;\n };\n /**\n * To render scrollbar\n * @param chart\n * @param axis\n */\n CartesianAxisLayoutPanel.prototype.renderScrollbar = function (chart, axis) {\n if (chart.zoomModule.isZoomed && (axis.zoomFactor < 1 || axis.zoomPosition > 0) && !axis.zoomingScrollBar.isScrollUI) {\n var currentScrollSvg = axis.zoomingScrollBar.svgObject;\n if (currentScrollSvg && currentScrollSvg.childElementCount) {\n chart.scrollElement.replaceChild(axis.zoomingScrollBar.render(), currentScrollSvg);\n }\n else {\n if (!chart.scrollElement) {\n chart.scrollElement = createElement('div', { id: chart.element.id + '_scrollElement' });\n }\n chart.scrollElement.appendChild(axis.zoomingScrollBar.render());\n }\n }\n else if (axis.zoomFactor === 1 && axis.zoomPosition === 0 && axis.zoomingScrollBar.svgObject) {\n axis.zoomingScrollBar.destroy();\n }\n if (axis.zoomingScrollBar.isScrollUI) {\n axis.zoomingScrollBar.isScrollUI = false;\n }\n };\n CartesianAxisLayoutPanel.prototype.findAxisPosition = function (axis) {\n return axis.crossAt !== null && axis.isInside(axis.crossInAxis.visibleRange);\n };\n CartesianAxisLayoutPanel.prototype.drawBottomLine = function (definition, index, isRow) {\n var chart = this.chart;\n var optionsLine = {};\n var x1;\n var x2;\n var y1;\n var y2;\n var definitionName;\n if (isRow) {\n definition = definition;\n y1 = y2 = definition.computedTop + definition.computedHeight;\n x1 = this.seriesClipRect.x;\n x2 = x1 + this.seriesClipRect.width;\n definitionName = 'Row';\n }\n else {\n definition = definition;\n x1 = x2 = definition.computedLeft;\n y1 = this.seriesClipRect.y;\n y2 = y1 + this.seriesClipRect.height;\n definitionName = 'Column';\n }\n optionsLine = {\n 'id': chart.element.id + '_AxisBottom_' + definitionName + index,\n x1: x1,\n y1: y1,\n x2: x2,\n y2: y2,\n 'stroke-width': definition.border.width,\n 'stroke': definition.border.color,\n };\n this.htmlObject = chart.renderer.drawLine(optionsLine);\n this.element.appendChild(this.htmlObject);\n };\n CartesianAxisLayoutPanel.prototype.drawAxisLine = function (axis, index, plotX, plotY, parent, rect) {\n var chart = this.chart;\n var optionsLine = {};\n optionsLine = {\n 'id': chart.element.id + 'AxisLine_' + index,\n x1: rect.x - plotX,\n y1: rect.y - plotY,\n x2: rect.x + rect.width + plotX,\n y2: rect.y + rect.height + plotY,\n 'stroke-dasharray': axis.lineStyle.dashArray,\n 'stroke-width': axis.lineStyle.width,\n 'stroke': axis.lineStyle.color || chart.themeStyle.axisLine\n };\n this.htmlObject = chart.renderer.drawLine(optionsLine);\n parent.appendChild(this.htmlObject);\n };\n CartesianAxisLayoutPanel.prototype.drawYAxisGridLine = function (axis, index, parent, rect) {\n var chart = this.chart;\n var tempInterval;\n var pointY = 0;\n var majorGrid = '';\n var majorTick = '';\n var minorGird = '';\n var minorTick = '';\n var minorDirection;\n var tickSize = axis.opposedPosition ? axis.majorTickLines.height : -axis.majorTickLines.height;\n var axisLineSize = (axis.opposedPosition) ? axis.lineStyle.width / 2 : -axis.lineStyle.width / 2;\n var ticksbwtLabel = (axis.valueType === 'Category' && axis.labelPlacement === 'BetweenTicks') ?\n 0.5 : 0;\n var scrollBarHeight = isNullOrUndefined(axis.crossesAt) ? axis.opposedPosition ? axis.scrollBarHeight :\n -axis.scrollBarHeight : 0;\n var isTickInside = axis.tickPosition === 'Inside';\n var ticks = isTickInside ? (rect.x - tickSize - axisLineSize) : (rect.x + tickSize + axisLineSize + scrollBarHeight);\n var length = axis.visibleLabels.length;\n if (axis.valueType.indexOf('Category') && axis.labelPlacement === 'BetweenTicks' && length > 0) {\n length += 1;\n }\n //Gridlines\n for (var i = 0; i < length; i++) {\n tempInterval = !axis.visibleLabels[i] ? (axis.visibleLabels[i - 1].value + axis.visibleRange.interval) - ticksbwtLabel\n : axis.visibleLabels[i].value - ticksbwtLabel;\n pointY = valueToCoefficient(tempInterval, axis) * rect.height;\n pointY = (pointY * -1) + (rect.y + rect.height);\n if (pointY >= rect.y && (rect.y + rect.height) >= pointY) {\n if ((inside(tempInterval, axis.visibleRange)) || this.isBorder(axis, i, pointY)) {\n majorGrid = majorGrid.concat('M ' + this.seriesClipRect.x + ' ' + (pointY) +\n ' L ' + (this.seriesClipRect.x + this.seriesClipRect.width) + ' ' + pointY + ' ');\n }\n majorTick = majorTick.concat('M ' + (rect.x + axisLineSize + (isTickInside ? scrollBarHeight : 0)) + ' ' + pointY +\n ' L ' + (ticks) + ' ' + pointY + ' ');\n }\n if ((axis.minorGridLines.width > 0 || axis.minorTickLines.width > 0) && axis.minorTicksPerInterval > 0) {\n minorDirection = this.drawAxisMinorLine(axis, tempInterval, minorGird, minorTick, rect, i);\n minorGird = minorDirection[0];\n minorTick = minorDirection[1];\n }\n }\n this.renderGridLine(axis, index, majorGrid, minorGird);\n this.renderTickLine(axis, index, majorTick, minorTick, parent);\n };\n CartesianAxisLayoutPanel.prototype.isBorder = function (axis, index, value) {\n var chart = this.chart;\n var border = chart.chartArea.border;\n var rect = this.seriesClipRect;\n var orientation = axis.orientation;\n var start = (orientation === 'Horizontal') ? rect.x : rect.y;\n var size = (orientation === 'Horizontal') ? rect.width : rect.height;\n var startIndex = (orientation === 'Horizontal') ? 0 : axis.visibleLabels.length - 1;\n var endIndex = (orientation === 'Horizontal') ? axis.visibleLabels.length - 1 : 0;\n if (axis.plotOffset > 0) {\n return true;\n }\n else if ((value === start || value === (start + size)) && (border.width <= 0 || border.color === 'transparent')) {\n return true;\n }\n else if ((value !== start && index === startIndex) || (value !== (start + size) && index === endIndex)) {\n return true;\n }\n return false;\n };\n /**\n * To render the axis label.\n * @return {void}\n * @private\n */\n CartesianAxisLayoutPanel.prototype.drawYAxisLabels = function (axis, index, parent, rect) {\n var chart = this.chart;\n var pointX = 0;\n var pointY = 0;\n var elementSize;\n var options;\n var isLabelInside = axis.labelPosition === 'Inside';\n var isTickInside = axis.tickPosition === 'Inside';\n var isOpposed = axis.opposedPosition;\n var tickSpace = axis.labelPosition === axis.tickPosition ? axis.majorTickLines.height : 0;\n var padding = tickSpace + this.padding + axis.lineStyle.width / 2;\n padding = (axis.opposedPosition) ? padding : -padding;\n var anchor = ((isOpposed && isLabelInside) || (!isOpposed && !isLabelInside)) ? 'end' : 'start';\n var labelElement = chart.renderer.createGroup({ id: chart.element.id + 'AxisLabels' + index });\n var scrollBarHeight = isNullOrUndefined(axis.crossesAt) ? axis.scrollBarHeight * (isOpposed ? 1 : -1) : 0;\n for (var i = 0, len = axis.visibleLabels.length; i < len; i++) {\n pointX = isLabelInside ? (rect.x - padding) : (rect.x + padding + scrollBarHeight);\n elementSize = axis.visibleLabels[i].size;\n pointY = valueToCoefficient(axis.visibleLabels[i].value, axis) * rect.height;\n pointY = Math.floor((pointY * -1) + (rect.y + rect.height));\n options = new TextOption(chart.element.id + index + '_AxisLabel_' + i, pointX, pointY + (elementSize.height / 4), anchor, axis.visibleLabels[i].text);\n if (axis.edgeLabelPlacement) {\n switch (axis.edgeLabelPlacement) {\n case 'None':\n break;\n case 'Hide':\n if (((i === 0 || (axis.isInversed && i === len - 1)) && options.y > rect.y + rect.height) ||\n (((i === len - 1) || (axis.isInversed && i === 0)) && options.y - elementSize.height / 2 < rect.y)) {\n options.text = '';\n }\n break;\n case 'Shift':\n if ((i === 0 || (axis.isInversed && i === len - 1)) && options.y > rect.y + rect.height) {\n options.y = pointY = rect.y + rect.height;\n }\n else if (((i === len - 1) || (axis.isInversed && i === 0)) && (options.y - elementSize.height / 2 < rect.y)) {\n options.y = pointY = rect.y + elementSize.height / 2;\n }\n break;\n }\n }\n textElement(options, axis.labelStyle, axis.labelStyle.color || chart.themeStyle.axisLabel, labelElement);\n }\n if (!chart.delayRedraw) {\n parent.appendChild(labelElement);\n }\n else if (axis.visible) {\n this.createZoomingLabel(this.chart, labelElement, axis, index, rect);\n }\n };\n /**\n * To render the axis label border.\n * @return {void}\n * @private\n */\n CartesianAxisLayoutPanel.prototype.drawYAxisBorder = function (axis, index, parent, rect) {\n if (axis.border.width > 0) {\n var startY = void 0;\n var pointY = void 0;\n var scrollBarHeight = axis.labelPosition === 'Outside' ? axis.scrollBarHeight : 0;\n scrollBarHeight = (axis.opposedPosition ? 1 : -1) * scrollBarHeight;\n var gap = (rect.height / axis.visibleRange.delta) * (axis.valueType === 'DateTime' ? axis.dateTimeInterval\n : axis.visibleRange.interval);\n var endY = void 0;\n var length_1 = axis.maxLabelSize.width + 10 + ((axis.tickPosition === axis.labelPosition) ?\n axis.majorTickLines.height : 0);\n var labelBorder = '';\n var ticksbwtLabel = (axis.valueType === 'Category' && axis.labelPlacement === 'BetweenTicks') ? -0.5 : 0;\n var endX = ((axis.opposedPosition && axis.labelPosition === 'Inside') || (!axis.opposedPosition\n && axis.labelPosition === 'Outside')) ? rect.x - length_1 + scrollBarHeight : rect.x + length_1 + scrollBarHeight;\n for (var i = 0; i < axis.visibleLabels.length; i++) {\n pointY = valueToCoefficient(axis.visibleLabels[i].value + ticksbwtLabel, axis);\n pointY = (axis.isInversed ? (1 - pointY) : pointY) * rect.height;\n if (axis.valueType === 'Category' && axis.labelPlacement === 'BetweenTicks') {\n startY = Math.floor((pointY * -1) + (rect.y + rect.height));\n endY = Math.floor((pointY * -1) - (gap) + (rect.y + rect.height));\n }\n else {\n startY = Math.floor((pointY * -1) + gap / 2 + (rect.y + rect.height));\n endY = Math.floor((pointY * -1) - gap / 2 + (rect.y + rect.height));\n }\n switch (axis.border.type) {\n case 'Rectangle':\n case 'WithoutTopBorder':\n if (startY > (rect.y + rect.height)) {\n labelBorder += ('M' + ' ' + endX + ' ' + (rect.y + rect.height) + ' ' + 'L' + ' ' + endX + ' ' + endY + ' ');\n }\n else if (Math.floor(rect.y) > (endY)) {\n labelBorder += ('M' + ' ' + (rect.x + scrollBarHeight) + ' ' + startY + ' ' + 'L' + ' ' + endX\n + ' ' + startY + ' ' + 'L' + ' ' + endX + ' ' + (rect.y) + ' ');\n }\n else {\n labelBorder += ('M' + ' ' + (rect.x + scrollBarHeight) + ' ' + startY + ' ' + 'L' + ' ' + endX +\n ' ' + startY + ' ' + 'L' + ' ' + endX + ' ' + endY + ' ');\n if (i === axis.visibleLabels.length - 1) {\n labelBorder += ('M' + ' ' + (rect.x + scrollBarHeight) + ' ' + endY + ' ' + 'L' + ' ' +\n endX + ' ' + endY + ' ');\n }\n }\n break;\n case 'WithoutTopandBottomBorder':\n if (!(startY > rect.y + rect.height) && !((endY) < Math.floor(rect.y))) {\n labelBorder += ('M' + ' ' + (rect.x + scrollBarHeight) + ' ' + startY + ' ' + 'L' + ' ' + endX +\n ' ' + startY + ' ' + 'M' + ' ' + endX + ' ' + endY + ' ' +\n 'L' + ' ' + (rect.x + scrollBarHeight) + ' ' + endY);\n }\n break;\n }\n }\n labelBorder += (axis.border.type === 'Rectangle') ? ('M' + ' ' + (rect.x + scrollBarHeight) + ' ' + rect.y + ' ' + 'L' + ' ' +\n (rect.x + scrollBarHeight) + ' ' + (rect.y + rect.height) + ' ') : '';\n if (labelBorder !== '') {\n this.createAxisBorderElement(axis, index, labelBorder, parent);\n }\n }\n if (axis.multiLevelLabels.length > 0 && this.chart.multiLevelLabelModule) {\n this.chart.multiLevelLabelModule.renderYAxisMultiLevelLabels(axis, index, parent, rect);\n }\n };\n CartesianAxisLayoutPanel.prototype.drawYAxisTitle = function (axis, index, parent, rect) {\n var chart = this.chart;\n var labelRotation = (axis.opposedPosition) ? 90 : -90;\n var elementSize = measureText(axis.title, axis.titleStyle);\n var padding = (axis.tickPosition === 'Inside' ? 0 : axis.majorTickLines.height + this.padding) +\n (axis.labelPosition === 'Inside' ? 0 :\n (axis.maxLabelSize.width + axis.multiLevelLabelHeight + this.padding));\n padding = axis.opposedPosition ? padding + axis.scrollBarHeight : -padding - axis.scrollBarHeight;\n var x = rect.x + padding;\n var y = rect.y + rect.height / 2;\n var options = new TextOption(chart.element.id + '_AxisTitle_' + index, x, y - this.padding, 'middle', axis.title, 'rotate(' + labelRotation + ',' + (x) + ',' + (y) + ')');\n var element = textElement(options, axis.titleStyle, axis.titleStyle.color || chart.themeStyle.axisTitle, parent);\n element.setAttribute('aria-label', axis.description || axis.title);\n element.setAttribute('tabindex', axis.tabIndex.toString());\n };\n CartesianAxisLayoutPanel.prototype.drawXAxisGridLine = function (axis, index, parent, rect) {\n var chart = this.chart;\n var tempInterval;\n var pointX = 0;\n var majorGrid = '';\n var majorTick = '';\n var minorGird = '';\n var minorTick = '';\n var minorDirection;\n var tickSize = (axis.opposedPosition) ? -axis.majorTickLines.height : axis.majorTickLines.height;\n var axisLineSize = (axis.opposedPosition) ? -axis.lineStyle.width / 2 : axis.lineStyle.width / 2;\n var scrollBarHeight = isNullOrUndefined(axis.crossesAt) ? axis.opposedPosition ? -axis.scrollBarHeight :\n axis.scrollBarHeight : 0;\n var ticksbwtLabel = (axis.valueType.indexOf('Category') > -1 && axis.labelPlacement === 'BetweenTicks') ?\n 0.5 : 0;\n var length = axis.visibleLabels.length;\n var isTickInside = axis.tickPosition === 'Inside';\n var ticks = isTickInside ? (rect.y - tickSize - axisLineSize) : (rect.y + tickSize + axisLineSize + scrollBarHeight);\n if (axis.valueType.indexOf('Category') > -1 && length > 0 && axis.labelPlacement === 'BetweenTicks') {\n length += 1;\n }\n //Gridlines\n for (var i = 0; i < length; i++) {\n if (axis.valueType !== 'DateTimeCategory') {\n tempInterval = axis.visibleLabels[i] ? axis.visibleLabels[i].value - ticksbwtLabel\n : (axis.visibleLabels[i - 1].value + axis.visibleRange.interval) - ticksbwtLabel;\n }\n else {\n tempInterval = axis.visibleLabels[i] ?\n axis.visibleLabels[i].value - ticksbwtLabel : axis.visibleRange.max;\n }\n pointX = (valueToCoefficient(tempInterval, axis) * rect.width) + rect.x;\n if (pointX >= rect.x && (rect.x + rect.width) >= pointX) {\n if (inside(tempInterval, axis.visibleRange) || this.isBorder(axis, i, pointX)) {\n majorGrid = majorGrid.concat('M ' + pointX + ' ' + (this.seriesClipRect.y + this.seriesClipRect.height) +\n ' L ' + pointX + ' ' + this.seriesClipRect.y + ' ');\n }\n majorTick = majorTick.concat('M ' + (pointX) + ' ' + (rect.y + axisLineSize + (isTickInside ? scrollBarHeight : 0))\n + ' L ' + (pointX) + ' ' + ticks + ' ');\n }\n if (axis.minorTicksPerInterval > 0 && (axis.minorGridLines.width > 0 || axis.minorTickLines.width > 0)) {\n minorDirection = this.drawAxisMinorLine(axis, tempInterval, minorGird, minorTick, rect, i);\n minorGird = minorDirection[0];\n minorTick = minorDirection[1];\n }\n }\n this.renderGridLine(axis, index, majorGrid, minorGird);\n this.renderTickLine(axis, index, majorTick, minorTick, parent);\n };\n CartesianAxisLayoutPanel.prototype.drawAxisMinorLine = function (axis, tempInterval, minorGird, minorTick, rect, labelIndex) {\n var value = tempInterval;\n var coor = 0;\n var position = 0;\n var range = axis.visibleRange;\n var isTickInside = axis.tickPosition === 'Inside';\n var direction = [];\n var tickSize = axis.opposedPosition ? -axis.minorTickLines.height : axis.minorTickLines.height;\n var logStart;\n var logEnd;\n var logInterval = 1;\n var logPosition = 1;\n var ticksX = isTickInside ? (rect.y - tickSize) : (rect.y + tickSize);\n var ticksY = isTickInside ? (rect.x + tickSize) : (rect.x - tickSize);\n if (axis.valueType === 'Logarithmic') {\n logStart = Math.pow(axis.logBase, value - range.interval);\n logEnd = Math.pow(axis.logBase, value);\n logInterval = (logEnd - logStart) / (axis.minorTicksPerInterval + 1);\n logPosition = logStart + logInterval;\n }\n if (axis.orientation === 'Horizontal') {\n for (var j = 0; j < axis.minorTicksPerInterval; j++) {\n value = this.findLogNumeric(axis, logPosition, logInterval, value, labelIndex);\n logPosition += logInterval;\n if (inside(value, range)) {\n position = ((value - range.min) / (range.max - range.min));\n position = Math.ceil((axis.isInversed ? (1 - position) : position) * rect.width);\n coor = (Math.floor(position + rect.x));\n minorGird = minorGird.concat('M' + ' ' + coor + ' ' + (this.seriesClipRect.y)\n + 'L ' + coor + ' ' + (this.seriesClipRect.y + this.seriesClipRect.height));\n coor = (Math.floor(position + rect.x));\n minorTick = minorTick.concat('M' + ' ' + coor + ' ' + (rect.y)\n + 'L ' + coor + ' ' + ticksX);\n }\n }\n }\n else {\n tickSize = axis.opposedPosition ? axis.minorTickLines.height : -axis.minorTickLines.height;\n for (var j = 0; j < axis.minorTicksPerInterval; j++) {\n value = this.findLogNumeric(axis, logPosition, logInterval, value, labelIndex);\n if (inside(value, range)) {\n position = Math.ceil(((value - range.min) / (range.max - range.min)) * rect.height) * -1;\n coor = (Math.floor(position + rect.y + rect.height));\n minorGird = minorGird.concat('M' + ' ' + (this.seriesClipRect.x) + ' ' + coor\n + 'L ' + (this.seriesClipRect.x + this.seriesClipRect.width) + ' ' + coor);\n coor = (Math.floor(position + rect.y + rect.height));\n minorTick = minorTick.concat('M' + ' ' + rect.x + ' ' + coor + 'L ' + ticksY + ' ' + coor);\n }\n logPosition += logInterval;\n }\n }\n direction.push(minorGird);\n direction.push(minorTick);\n return direction;\n };\n CartesianAxisLayoutPanel.prototype.findLogNumeric = function (axis, logPosition, logInterval, value, labelIndex) {\n var range = axis.visibleRange;\n if (axis.valueType === 'Logarithmic') {\n value = logBase(logPosition, axis.logBase);\n }\n else if (axis.valueType === 'DateTime') {\n value += axis.dateTimeInterval / (axis.minorTicksPerInterval + 1);\n }\n else if (axis.valueType === 'DateTimeCategory') {\n var padding = axis.labelPlacement === 'BetweenTicks' ? 0.5 : 0;\n value += ((axis.visibleLabels[labelIndex + 1] ?\n axis.visibleLabels[labelIndex + 1].value - padding : axis.visibleRange.max) -\n (axis.visibleLabels[labelIndex] ?\n axis.visibleLabels[labelIndex].value - padding : axis.visibleRange.min)) /\n (axis.minorTicksPerInterval + 1);\n }\n else {\n value += range.interval / (axis.minorTicksPerInterval + 1);\n }\n return value;\n };\n /**\n * To render the axis label.\n * @return {void}\n * @private\n */\n CartesianAxisLayoutPanel.prototype.drawXAxisLabels = function (axis, index, parent, rect) {\n var chart = this.chart;\n var pointX = 0;\n var pointY = 0;\n var elementSize;\n var labelElement = chart.renderer.createGroup({ id: chart.element.id + 'AxisLabels' + index });\n var labelPosition = axis.labelPosition;\n var islabelInside = axis.labelPosition === 'Inside';\n var isTickInside = axis.tickPosition === 'Inside';\n var isOpposed = axis.opposedPosition;\n var tickSpace = axis.labelPosition === axis.tickPosition ? axis.majorTickLines.height : 0;\n var labelPadding;\n var padding = tickSpace + this.padding + axis.lineStyle.width / 2;\n var rotateSize;\n var diffHeight;\n var angle;\n var anglePadding = ((axis.angle === 90 || axis.angle === -90)) ? -2 : 0;\n var options;\n var yLocation;\n var previousEnd = axis.isInversed ? (rect.x + rect.width) : rect.x;\n var width = 0;\n var length = axis.visibleLabels.length;\n var intervalLength;\n var label;\n var scrollBarHeight = !islabelInside && isNullOrUndefined(axis.crossesAt) && (axis.zoomFactor < 1 || axis.zoomPosition > 0)\n ? axis.scrollBarHeight : 0;\n for (var i = 0, len = length; i < len; i++) {\n label = axis.visibleLabels[i];\n pointX = (valueToCoefficient(label.value, axis) * rect.width) + rect.x;\n elementSize = label.size;\n intervalLength = rect.width / length;\n width = ((axis.labelIntersectAction === 'Trim' || axis.labelIntersectAction === 'Wrap')\n && elementSize.width > intervalLength) ? intervalLength : elementSize.width;\n pointX -= width / 2;\n if (islabelInside && axis.angle) {\n pointY = isOpposed ? (rect.y + padding) : (rect.y - padding);\n }\n else {\n labelPadding = (isOpposed && !islabelInside) || (!isOpposed && islabelInside) ?\n -(padding + scrollBarHeight + (axis.angle ? (3 * (elementSize.height / 4) + (2 * axis.maxLabelSize.height / 5)) :\n (label.index > 1 ? (2 * (elementSize.height / 4)) : 0)))\n : padding + scrollBarHeight + (axis.angle ? (3 * (elementSize.height / 4)) + (2 * axis.maxLabelSize.height / 5)\n : (3 * (elementSize.height / 4)));\n pointY = (rect.y + (labelPadding * label.index));\n }\n options = new TextOption(chart.element.id + index + '_AxisLabel_' + i, pointX, pointY, '');\n if (axis.edgeLabelPlacement) {\n switch (axis.edgeLabelPlacement) {\n case 'None':\n break;\n case 'Hide':\n if (((i === 0 || (axis.isInversed && i === len - 1)) && options.x < rect.x) ||\n ((i === len - 1 || (axis.isInversed && i === 0)) && (options.x + width > rect.x + rect.width))) {\n continue;\n }\n break;\n case 'Shift':\n if ((i === 0 || (axis.isInversed && i === len - 1)) && options.x < rect.x) {\n intervalLength -= (rect.x - options.x);\n options.x = pointX = rect.x;\n }\n else if ((i === len - 1 || (axis.isInversed && i === 0)) && ((options.x + width) > rect.x + rect.width)) {\n if (elementSize.width > intervalLength && axis.labelIntersectAction === 'Trim') {\n intervalLength -= (options.x + width - (rect.x + rect.width));\n }\n else {\n intervalLength = width;\n }\n options.x = pointX = rect.x + rect.width - intervalLength;\n }\n break;\n }\n }\n options.text = this.findAxisLabel(axis, label.text, intervalLength);\n if (axis.angle % 360 === 0 && axis.labelIntersectAction === 'Hide' && i !== 0 &&\n (!axis.isInversed ? options.x <= previousEnd : options.x + width >= previousEnd)) {\n continue;\n }\n previousEnd = axis.isInversed ? options.x : options.x + width;\n if (axis.angle !== 0) {\n angle = (axis.angle > 360) ? axis.angle % 360 : axis.angle;\n rotateSize = rotateTextSize(axis.labelStyle, label.text, angle, chart);\n diffHeight = islabelInside ? rotateSize.height :\n axis.maxLabelSize.height - Math.ceil(rotateSize.height - elementSize.height);\n yLocation = axis.opposedPosition ? diffHeight / 2 : -diffHeight / 2;\n options.transform = 'rotate(' + angle + ',' + (pointX + width / 2 + anglePadding) + ','\n + (pointY + yLocation) + ')';\n options.y += yLocation;\n }\n textElement(options, axis.labelStyle, axis.labelStyle.color || chart.themeStyle.axisLabel, labelElement, (axis.opposedPosition !== (axis.labelPosition === 'Inside'))).setAttribute('style', 'cursor: default');\n }\n if (!chart.delayRedraw) {\n parent.appendChild(labelElement);\n }\n else if (axis.visible) {\n this.createZoomingLabel(this.chart, labelElement, axis, index, rect);\n }\n };\n /**\n * To render the axis label border.\n * @return {void}\n * @private\n */\n CartesianAxisLayoutPanel.prototype.drawXAxisBorder = function (axis, index, parent, axisRect) {\n if (axis.border.width > 0) {\n var scrollBarHeight = axis.labelPosition === 'Outside' ? axis.scrollBarHeight : 0;\n var startX = void 0;\n var startY = axisRect.y + ((axis.opposedPosition ? -1 : 1) * scrollBarHeight);\n var padding = 10;\n var pointX = void 0;\n var gap = (axisRect.width / axis.visibleRange.delta) * (axis.valueType === 'DateTime' ? axis.dateTimeInterval\n : axis.visibleRange.interval);\n var endX = void 0;\n var length_2 = axis.maxLabelSize.height +\n ((axis.tickPosition === axis.labelPosition) ? axis.majorTickLines.height : 0);\n var labelBorder = '';\n var ticksbwtLabel = (axis.valueType === 'Category' && axis.labelPlacement === 'BetweenTicks') ? -0.5 : 0;\n var endY = ((axis.opposedPosition && axis.labelPosition === 'Inside') ||\n (!axis.opposedPosition && axis.labelPosition === 'Outside')) ?\n (axisRect.y + length_2 + padding + scrollBarHeight) : (axisRect.y - length_2 - padding - scrollBarHeight);\n for (var i = 0; i < axis.visibleLabels.length; i++) {\n pointX = valueToCoefficient(axis.visibleLabels[i].value + ticksbwtLabel, axis);\n pointX = (axis.isInversed ? (1 - pointX) : pointX) * axisRect.width;\n if (axis.valueType === 'Category' && axis.labelPlacement === 'BetweenTicks') {\n startX = pointX + axisRect.x;\n endX = pointX + (gap) + axisRect.x;\n }\n else {\n startX = pointX - gap / 2 + axisRect.x;\n endX = pointX + gap / 2 + axisRect.x;\n }\n switch (axis.border.type) {\n case 'Rectangle':\n case 'WithoutTopBorder':\n if (startX < axisRect.x) {\n labelBorder += ('M' + ' ' + axisRect.x + ' ' + endY + ' ' + 'L' + ' ' + endX + ' ' + endY + ' ');\n }\n else if (Math.floor(endX) > axisRect.width + axisRect.x) {\n labelBorder += ('M' + ' ' + startX + ' ' + startY + ' ' + 'L' + ' ' + startX + ' ' + endY + ' ' +\n 'L' + ' ' + (axisRect.width + axisRect.x) + ' ' + endY + ' ');\n }\n else {\n labelBorder += ('M' + ' ' + startX + ' ' + startY + ' ' + 'L' + ' ' + startX + ' ' +\n endY + ' ' + 'L' + ' ' + endX + ' ' + endY + ' ');\n if (i === axis.visibleLabels.length - 1) {\n labelBorder += ('M' + ' ' + endX + ' ' + startY + ' ' + 'L' + ' ' + endX + ' ' + endY + ' ' +\n 'M ' + endX + ' ' + endY + ' L ' + (axisRect.width + axisRect.x) + ' ' + endY);\n }\n }\n break;\n case 'WithoutTopandBottomBorder':\n if (!(startX < axisRect.x) && !(Math.floor(endX) > axisRect.width + axisRect.x)) {\n labelBorder += ('M' + ' ' + startX + ' ' + startY + ' ' + 'L' + ' ' + startX + ' ' + endY + ' ' +\n 'M ' + endX + ' ' + startY + ' L ' + endX + ' ' + endY);\n }\n break;\n }\n }\n labelBorder += (axis.border.type === 'Rectangle' ? ('M ' + ' ' + axisRect.x + ' ' + startY + 'L' + ' ' +\n (axisRect.x + axisRect.width) + ' ' + startY) : '');\n if (labelBorder !== '') {\n this.createAxisBorderElement(axis, index, labelBorder, parent);\n }\n }\n if (this.chart.multiLevelLabelModule && axis.multiLevelLabels.length > 0) {\n this.chart.multiLevelLabelModule.renderXAxisMultiLevelLabels(axis, index, parent, axisRect);\n }\n };\n /**\n * To create border element for axis.\n * @return {void}\n * @private\n */\n CartesianAxisLayoutPanel.prototype.createAxisBorderElement = function (axis, index, labelBorder, parent) {\n var borderElement = this.chart.renderer.drawPath(new PathOption(this.chart.element.id + '_BorderLine_' + index, 'transparent', axis.border.width, axis.border.color || this.chart.themeStyle.axisLine, 1, '', labelBorder));\n borderElement.setAttribute('style', 'pointer-events: none');\n parent.appendChild(borderElement);\n };\n CartesianAxisLayoutPanel.prototype.findAxisLabel = function (axis, label, width) {\n switch (axis.labelIntersectAction) {\n case 'Trim':\n return textTrim(width, label, axis.labelStyle);\n default:\n return label;\n }\n };\n CartesianAxisLayoutPanel.prototype.drawXAxisTitle = function (axis, index, parent, rect) {\n var chart = this.chart;\n var elementSize = measureText(axis.title, axis.titleStyle);\n var scrollBarHeight = isNullOrUndefined(axis.crossesAt) ? axis.scrollBarHeight : 0;\n var padding = (axis.tickPosition === 'Inside' ? 0 : axis.majorTickLines.height + this.padding) +\n (axis.labelPosition === 'Inside' ? 0 :\n axis.maxLabelSize.height + axis.multiLevelLabelHeight + this.padding);\n padding = axis.opposedPosition ? -(padding + elementSize.height / 4 + scrollBarHeight) : (padding + (3 *\n elementSize.height / 4) + scrollBarHeight);\n var options = new TextOption(chart.element.id + '_AxisTitle_' + index, rect.x + rect.width / 2, rect.y + padding, 'middle', axis.title);\n var element = textElement(options, axis.titleStyle, axis.titleStyle.color || chart.themeStyle.axisTitle, parent);\n element.setAttribute('aria-label', axis.description || axis.title);\n element.setAttribute('tabindex', axis.tabIndex.toString());\n };\n CartesianAxisLayoutPanel.prototype.renderTickLine = function (axis, index, majorTick, minorTick, parent) {\n var options;\n var chart = this.chart;\n if (axis.majorTickLines.width > 0 && axis.visible) {\n options = new PathOption(chart.element.id + '_MajorTickLine_' + index, 'transparent', axis.majorTickLines.width, axis.majorTickLines.color || chart.themeStyle.majorTickLine, null, null, majorTick);\n this.htmlObject = chart.renderer.drawPath(options);\n parent.appendChild(this.htmlObject);\n }\n if (axis.minorTickLines.width > 0 && axis.visible) {\n options = new PathOption(chart.element.id + '_MinorTickLine_' + index, 'transparent', axis.minorTickLines.width, axis.minorTickLines.color || chart.themeStyle.minorTickLine, null, null, minorTick);\n this.htmlObject = chart.renderer.drawPath(options);\n parent.appendChild(this.htmlObject);\n }\n };\n CartesianAxisLayoutPanel.prototype.renderGridLine = function (axis, index, majorGrid, minorGird) {\n var chart = this.chart;\n var options;\n if (axis.majorGridLines.width > 0) {\n options = new PathOption(chart.element.id + '_MajorGridLine_' + index, 'transparent', axis.majorGridLines.width, axis.majorGridLines.color || chart.themeStyle.majorGridLine, null, axis.majorGridLines.dashArray, majorGrid);\n this.htmlObject = chart.renderer.drawPath(options);\n this.element.appendChild(this.htmlObject);\n }\n if (axis.minorGridLines.width > 0) {\n options = new PathOption(chart.element.id + '_MinorGridLine_' + index, 'transparent', axis.minorGridLines.width, axis.minorGridLines.color || chart.themeStyle.minorGridLine, null, axis.minorGridLines.dashArray, minorGird);\n this.htmlObject = chart.renderer.drawPath(options);\n this.element.appendChild(this.htmlObject);\n }\n };\n CartesianAxisLayoutPanel.prototype.findParentNode = function (chart, label, axis, index) {\n if (axis.crossAt === null) {\n return document.getElementById(chart.element.id + 'AxisGroup' + index + 'Inside');\n }\n if (document.getElementById(chart.element.id + 'AxisGroup' + index + 'Inside').contains(document.getElementById(label.id))) {\n return document.getElementById(chart.element.id + 'AxisGroup' + index + 'Inside');\n }\n else {\n return document.getElementById(chart.element.id + 'AxisGroup' + index + 'Outside');\n }\n };\n CartesianAxisLayoutPanel.prototype.createZoomingLabel = function (chart, labelElement, axis, index, rect) {\n var parentNode = this.findParentNode(chart, labelElement, axis, index);\n labelElement.setAttribute('opacity', '0.3');\n var zoomElement = chart.renderer.createGroup({\n id: chart.element.id + 'AxisLabels_Zoom' + index\n });\n zoomElement = createZoomingLabels(chart, axis, zoomElement, index, axis.orientation === 'Vertical', rect);\n parentNode.replaceChild(labelElement, document.getElementById(labelElement.id));\n if (getElement(chart.element.id + 'AxisLabels_Zoom' + index)) {\n parentNode.replaceChild(zoomElement, document.getElementById(zoomElement.id));\n }\n else {\n parentNode.appendChild(zoomElement);\n }\n };\n return CartesianAxisLayoutPanel;\n}());\nexport { CartesianAxisLayoutPanel };\n","import { withInBounds, PointData, Rect, getValueXByPoint, getValueYByPoint } from '../../common/utils/helper';\n/**\n * To get the data on mouse move.\n * @private\n */\nvar ChartData = /** @class */ (function () {\n /**\n * Constructor for the data.\n * @private\n */\n function ChartData(chart) {\n /** @private */\n this.currentPoints = [];\n /** @private */\n this.previousPoints = [];\n this.chart = chart;\n this.lierIndex = 0;\n }\n /**\n * Method to get the Data.\n * @private\n */\n ChartData.prototype.getData = function () {\n var chart = this.chart;\n var point = null;\n var series = null;\n var width;\n var height;\n for (var len = chart.visibleSeries.length, i = len - 1; i >= 0; i--) {\n series = chart.visibleSeries[i];\n width = (series.type === 'Scatter' || series.drawType === 'Scatter' || (!series.isRectSeries && series.marker.visible))\n ? (series.marker.height + 5) / 2 : 0;\n height = (series.type === 'Scatter' || series.drawType === 'Scatter' || (!series.isRectSeries && series.marker.visible))\n ? (series.marker.width + 5) / 2 : 0;\n if (series.visible && withInBounds(chart.mouseX, chart.mouseY, series.clipRect, width, height)) {\n point = this.getRectPoint(series, series.clipRect, chart.mouseX, chart.mouseY);\n }\n if (point) {\n return new PointData(point, series);\n }\n }\n return new PointData(point, series);\n };\n ChartData.prototype.isSelected = function (chart) {\n return (chart.selectionMode.indexOf('Drag') > -1 && chart.selectionModule && chart.selectionModule.rectPoints !== null);\n };\n ChartData.prototype.getRectPoint = function (series, rect, x, y) {\n var currentRect;\n var fromCenterX;\n var fromCenterY;\n var clickAngle;\n var arcAngle = 0;\n var startAngle;\n var endAngle;\n var distanceFromCenter;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n if (!point.regionData) {\n if (!point.regions || !point.regions.length) {\n continue;\n }\n }\n if (point.regionData && this.chart.chartAreaType === 'PolarRadar' && series.drawType.indexOf('Column') > -1) {\n fromCenterX = x - (series.clipRect.width / 2 + series.clipRect.x);\n fromCenterY = y - (series.clipRect.height / 2 + series.clipRect.y);\n arcAngle = 2 * Math.PI * (point.regionData.currentXPosition < 0 ? 1 + point.regionData.currentXPosition\n : point.regionData.currentXPosition);\n clickAngle = (Math.atan2(fromCenterY, fromCenterX) + 0.5 * Math.PI - arcAngle) % (2 * Math.PI);\n clickAngle = clickAngle < 0 ? 2 * Math.PI + clickAngle : clickAngle;\n clickAngle = clickAngle + 2 * Math.PI * series.chart.primaryXAxis.startAngle;\n startAngle = point.regionData.startAngle;\n startAngle -= arcAngle;\n startAngle = startAngle < 0 ? 2 * Math.PI + startAngle : startAngle;\n endAngle = point.regionData.endAngle;\n endAngle -= arcAngle;\n endAngle = endAngle < 0 ? 2 * Math.PI + endAngle : endAngle;\n distanceFromCenter = Math.sqrt(Math.pow(Math.abs(fromCenterX), 2) + Math.pow(Math.abs(fromCenterY), 2));\n if (clickAngle >= startAngle && clickAngle <= endAngle &&\n (((distanceFromCenter >= point.regionData.innerRadius && distanceFromCenter <= point.regionData.radius) ||\n (distanceFromCenter <= point.regionData.innerRadius && distanceFromCenter >= point.regionData.radius))\n && distanceFromCenter <= series.chart.radius)) {\n return point;\n }\n }\n else if (this.checkRegionContainsPoint(point.regions, rect, x, y)) {\n return point;\n }\n }\n return null;\n };\n /**\n * Checks whether the region contains a point\n */\n ChartData.prototype.checkRegionContainsPoint = function (regionRect, rect, x, y) {\n var _this = this;\n return regionRect.some(function (region, index) {\n _this.lierIndex = index;\n return withInBounds(x, y, new Rect((_this.chart.chartAreaType === 'Cartesian' ? rect.x : 0) + region.x, (_this.chart.chartAreaType === 'Cartesian' ? rect.y : 0) + region.y, region.width, region.height));\n });\n };\n ChartData.prototype.getClosest = function (series, value) {\n var xData = series.xData;\n var closest;\n if (value >= series.xMin - 0.5 && value <= series.xMax + 0.5) {\n for (var _i = 0, xData_1 = xData; _i < xData_1.length; _i++) {\n var data = xData_1[_i];\n if (closest == null || Math.abs(data - value) < Math.abs(closest - value)) {\n closest = data;\n }\n }\n }\n return closest;\n };\n ChartData.prototype.getClosestX = function (chart, series) {\n var value;\n var rect = series.clipRect;\n if (!chart.requireInvertedAxis) {\n value = getValueXByPoint(chart.mouseX - rect.x, rect.width, series.xAxis);\n }\n else {\n value = getValueYByPoint(chart.mouseY - rect.y, rect.height, series.xAxis);\n }\n var closest = this.getClosest(series, value);\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n if (closest === point.xValue && point.visible) {\n return new PointData(point, series);\n }\n }\n return null;\n };\n return ChartData;\n}());\nexport { ChartData };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, Complex, Collection } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, getValue } from '@syncfusion/ej2-base';\nimport { StackValues, RectOption } from '../../common/utils/helper';\nimport { firstToLowerCase, Rect, CircleOption } from '../../common/utils/helper';\nimport { Border, Font, Margin, Animation, EmptyPointSettings, CornerRadius, Connector } from '../../common/model/base';\nimport { DataUtil } from '@syncfusion/ej2-data';\nimport { seriesRender } from '../../common/model/constants';\n/**\n * Configures the data label in the series.\n */\nvar DataLabelSettings = /** @class */ (function (_super) {\n __extends(DataLabelSettings, _super);\n function DataLabelSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], DataLabelSettings.prototype, \"visible\", void 0);\n __decorate([\n Property(null)\n ], DataLabelSettings.prototype, \"name\", void 0);\n __decorate([\n Property('transparent')\n ], DataLabelSettings.prototype, \"fill\", void 0);\n __decorate([\n Property(1)\n ], DataLabelSettings.prototype, \"opacity\", void 0);\n __decorate([\n Property('Auto')\n ], DataLabelSettings.prototype, \"position\", void 0);\n __decorate([\n Property(5)\n ], DataLabelSettings.prototype, \"rx\", void 0);\n __decorate([\n Property(5)\n ], DataLabelSettings.prototype, \"ry\", void 0);\n __decorate([\n Property('Center')\n ], DataLabelSettings.prototype, \"alignment\", void 0);\n __decorate([\n Complex({ width: null, color: null }, Border)\n ], DataLabelSettings.prototype, \"border\", void 0);\n __decorate([\n Complex({ left: 5, right: 5, top: 5, bottom: 5 }, Margin)\n ], DataLabelSettings.prototype, \"margin\", void 0);\n __decorate([\n Complex({ size: '11px', color: null }, Font)\n ], DataLabelSettings.prototype, \"font\", void 0);\n __decorate([\n Property(null)\n ], DataLabelSettings.prototype, \"template\", void 0);\n return DataLabelSettings;\n}(ChildProperty));\nexport { DataLabelSettings };\n/**\n * Configures the marker in the series.\n */\nvar MarkerSettings = /** @class */ (function (_super) {\n __extends(MarkerSettings, _super);\n function MarkerSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], MarkerSettings.prototype, \"visible\", void 0);\n __decorate([\n Property('Circle')\n ], MarkerSettings.prototype, \"shape\", void 0);\n __decorate([\n Property('')\n ], MarkerSettings.prototype, \"imageUrl\", void 0);\n __decorate([\n Property(5)\n ], MarkerSettings.prototype, \"height\", void 0);\n __decorate([\n Property(5)\n ], MarkerSettings.prototype, \"width\", void 0);\n __decorate([\n Complex({ width: 2, color: null }, Border)\n ], MarkerSettings.prototype, \"border\", void 0);\n __decorate([\n Property(null)\n ], MarkerSettings.prototype, \"fill\", void 0);\n __decorate([\n Property(1)\n ], MarkerSettings.prototype, \"opacity\", void 0);\n __decorate([\n Complex({}, DataLabelSettings)\n ], MarkerSettings.prototype, \"dataLabel\", void 0);\n return MarkerSettings;\n}(ChildProperty));\nexport { MarkerSettings };\n/**\n * Points model for the series.\n * @private\n */\nvar Points = /** @class */ (function () {\n function Points() {\n this.symbolLocations = null;\n this.regions = null;\n this.regionData = null;\n this.marker = {\n visible: true\n };\n }\n return Points;\n}());\nexport { Points };\n/**\n * Defines the behavior of the Trendlines\n */\nvar Trendline = /** @class */ (function (_super) {\n __extends(Trendline, _super);\n function Trendline() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** @private */\n _this.clipRect = new Rect(0, 0, 0, 0);\n return _this;\n }\n /** @private */\n Trendline.prototype.setDataSource = function (series, chart) {\n if (series) {\n this.points = series.points;\n }\n var type = firstToLowerCase(this.type);\n chart.trendLineModule.initDataSource(this, chart);\n chart.visibleSeriesCount++;\n };\n __decorate([\n Property('')\n ], Trendline.prototype, \"name\", void 0);\n __decorate([\n Property('Linear')\n ], Trendline.prototype, \"type\", void 0);\n __decorate([\n Property(2)\n ], Trendline.prototype, \"period\", void 0);\n __decorate([\n Property(2)\n ], Trendline.prototype, \"polynomialOrder\", void 0);\n __decorate([\n Property(0)\n ], Trendline.prototype, \"backwardForecast\", void 0);\n __decorate([\n Property(0)\n ], Trendline.prototype, \"forwardForecast\", void 0);\n __decorate([\n Complex({}, Animation)\n ], Trendline.prototype, \"animation\", void 0);\n __decorate([\n Complex({}, MarkerSettings)\n ], Trendline.prototype, \"marker\", void 0);\n __decorate([\n Property(true)\n ], Trendline.prototype, \"enableTooltip\", void 0);\n __decorate([\n Property(null)\n ], Trendline.prototype, \"intercept\", void 0);\n __decorate([\n Property('')\n ], Trendline.prototype, \"fill\", void 0);\n __decorate([\n Property(1)\n ], Trendline.prototype, \"width\", void 0);\n __decorate([\n Property('SeriesType')\n ], Trendline.prototype, \"legendShape\", void 0);\n return Trendline;\n}(ChildProperty));\nexport { Trendline };\n/**\n * Configures Error bar in series.\n */\nvar ErrorBarCapSettings = /** @class */ (function (_super) {\n __extends(ErrorBarCapSettings, _super);\n function ErrorBarCapSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(1)\n ], ErrorBarCapSettings.prototype, \"width\", void 0);\n __decorate([\n Property(10)\n ], ErrorBarCapSettings.prototype, \"length\", void 0);\n __decorate([\n Property(null)\n ], ErrorBarCapSettings.prototype, \"color\", void 0);\n __decorate([\n Property(1)\n ], ErrorBarCapSettings.prototype, \"opacity\", void 0);\n return ErrorBarCapSettings;\n}(ChildProperty));\nexport { ErrorBarCapSettings };\nvar ChartSegment = /** @class */ (function (_super) {\n __extends(ChartSegment, _super);\n function ChartSegment() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], ChartSegment.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], ChartSegment.prototype, \"color\", void 0);\n __decorate([\n Property('0')\n ], ChartSegment.prototype, \"dashArray\", void 0);\n return ChartSegment;\n}(ChildProperty));\nexport { ChartSegment };\nvar ErrorBarSettings = /** @class */ (function (_super) {\n __extends(ErrorBarSettings, _super);\n function ErrorBarSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], ErrorBarSettings.prototype, \"visible\", void 0);\n __decorate([\n Property('Fixed')\n ], ErrorBarSettings.prototype, \"type\", void 0);\n __decorate([\n Property('Both')\n ], ErrorBarSettings.prototype, \"direction\", void 0);\n __decorate([\n Property('Vertical')\n ], ErrorBarSettings.prototype, \"mode\", void 0);\n __decorate([\n Property(null)\n ], ErrorBarSettings.prototype, \"color\", void 0);\n __decorate([\n Property(1)\n ], ErrorBarSettings.prototype, \"verticalError\", void 0);\n __decorate([\n Property(1)\n ], ErrorBarSettings.prototype, \"width\", void 0);\n __decorate([\n Property(1)\n ], ErrorBarSettings.prototype, \"horizontalError\", void 0);\n __decorate([\n Property(3)\n ], ErrorBarSettings.prototype, \"verticalPositiveError\", void 0);\n __decorate([\n Property(3)\n ], ErrorBarSettings.prototype, \"verticalNegativeError\", void 0);\n __decorate([\n Property(1)\n ], ErrorBarSettings.prototype, \"horizontalPositiveError\", void 0);\n __decorate([\n Property(1)\n ], ErrorBarSettings.prototype, \"horizontalNegativeError\", void 0);\n __decorate([\n Complex(null, ErrorBarCapSettings)\n ], ErrorBarSettings.prototype, \"errorBarCap\", void 0);\n return ErrorBarSettings;\n}(ChildProperty));\nexport { ErrorBarSettings };\n/**\n * Defines the common behavior of Series and Technical Indicators\n */\nvar SeriesBase = /** @class */ (function (_super) {\n __extends(SeriesBase, _super);\n function SeriesBase() {\n /**\n * The DataSource field that contains the x value.\n * It is applicable for series and technical indicators\n * @default ''\n */\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** @private */\n _this.currentViewData = [];\n /** @private */\n _this.clipRect = new Rect(0, 0, 0, 0);\n /** @private */\n _this.seriesType = 'XY';\n return _this;\n }\n /**\n * Process data for the series.\n * @hidden\n */\n SeriesBase.prototype.processJsonData = function () {\n var i = 0;\n var point = new Points();\n var xName = (this instanceof Series && this.type === 'Histogram') ? 'x' : this.xName;\n var textMappingName = this instanceof Series && this.marker.dataLabel.name ?\n this.marker.dataLabel.name : '';\n if (this instanceof Series && (this.type === 'Waterfall' || this.type === 'Histogram')) {\n this.currentViewData = this.chart[firstToLowerCase(this.type) + 'SeriesModule'].\n processInternalData(this.currentViewData, this);\n }\n var len = Object.keys(this.currentViewData).length;\n this.points = [];\n this.xMin = Infinity;\n this.xMax = -Infinity;\n this.yMin = Infinity;\n this.yMax = -Infinity;\n this.sizeMax = -Infinity;\n this.getSeriesType();\n if (this.xAxis.valueType === 'Category') {\n while (i < len) {\n point = this.dataPoint(i, textMappingName, xName);\n this.pushCategoryData(point, i, point.x);\n this.pushData(point, i);\n this.setEmptyPoint(point, i);\n i++;\n }\n }\n else if (this.xAxis.valueType.indexOf('DateTime') > -1) {\n var option = {\n skeleton: 'full',\n type: 'dateTime'\n };\n var dateParser = this.chart.intl.getDateParser(option);\n var dateFormatter = this.chart.intl.getDateFormat(option);\n while (i < len) {\n point = this.dataPoint(i, textMappingName, xName);\n point.x = new Date(DataUtil.parse.parseJson({ val: point.x }).val);\n if (this.xAxis.valueType === 'DateTime') {\n point.xValue = Date.parse(dateParser(dateFormatter(point.x)));\n }\n else {\n this.pushCategoryData(point, i, Date.parse(dateParser(dateFormatter(point.x))).toString());\n }\n this.pushData(point, i);\n this.setEmptyPoint(point, i);\n i++;\n }\n }\n else {\n while (i < len) {\n point = this.dataPoint(i, textMappingName, xName);\n point.xValue = point.x;\n this.pushData(point, i);\n this.setEmptyPoint(point, i);\n i++;\n }\n }\n if (this instanceof Series) {\n if (this.type.indexOf('Spline') > -1 || (this.drawType.indexOf('Spline') > -1 && this.chart.chartAreaType === 'PolarRadar')) {\n var isArea = (this.type.indexOf('Area') > -1 || this.drawType === 'Area');\n this.chart['spline' + (isArea ? 'Area' : '') + 'SeriesModule'].findSplinePoint(this);\n }\n }\n };\n SeriesBase.prototype.pushData = function (point, i) {\n point.index = i;\n point.yValue = point.y;\n // To find the min, max for the axis range.\n this.xMin = Math.min(this.xMin, point.xValue);\n this.xMax = Math.max(this.xMax, point.xValue);\n this.xData.push(point.xValue);\n };\n /** @private */\n SeriesBase.prototype.dataPoint = function (i, textMappingName, xName) {\n var point;\n this.points[i] = new Points();\n point = this.points[i];\n var currentViewData = this.currentViewData;\n point.x = getValue(xName, currentViewData[i]);\n point.high = getValue(this.high, currentViewData[i]);\n point.low = getValue(this.low, currentViewData[i]);\n point.open = getValue(this.open, currentViewData[i]);\n point.close = getValue(this.close, currentViewData[i]);\n point.volume = getValue(this.volume, currentViewData[i]);\n point.interior = getValue(this.pointColorMapping, currentViewData[i]);\n if (this instanceof Series) {\n point.y = getValue(this.yName, currentViewData[i]);\n point.size = getValue(this.size, currentViewData[i]);\n point.text = getValue(textMappingName, currentViewData[i]);\n }\n return point;\n };\n /**\n * To set empty point value based on empty point mode\n * @private\n */\n SeriesBase.prototype.setEmptyPoint = function (point, i) {\n if (!this.findVisibility(point)) {\n point.visible = true;\n return null;\n }\n point.isEmpty = true;\n var mode = this instanceof Series ? this.emptyPointSettings.mode : 'Drop';\n switch (mode) {\n case 'Zero':\n point.visible = true;\n if (this instanceof Series && this.seriesType.indexOf('HighLow') > -1) {\n point.high = point.low = 0;\n if (this.seriesType.indexOf('HighLowOpenClose') > -1) {\n point.open = point.close = 0;\n }\n }\n else {\n point.y = point.yValue = this.yData[i] = 0;\n }\n break;\n case 'Average':\n if (this instanceof Series) {\n if (this.seriesType.indexOf('HighLow') > -1) {\n point.high = (isNullOrUndefined(point.high) || isNaN(+point.high)) ? this.getAverage(this.high, i) : point.high;\n point.low = (isNullOrUndefined(point.low) || isNaN(+point.low)) ? this.getAverage(this.low, i) : point.low;\n if (this.seriesType.indexOf('HighLowOpenClose') > -1) {\n point.open = (isNullOrUndefined(point.open) || isNaN(+point.open)) ? this.getAverage(this.open, i) : point.open;\n point.close = (isNullOrUndefined(point.close) || isNaN(+point.close)) ? this.getAverage(this.close, i) :\n point.close;\n }\n }\n else {\n point.y = point.yValue = this.yData[i] = this.getAverage(this.yName, i);\n }\n }\n point.visible = true;\n break;\n case 'Drop':\n case 'Gap':\n this.yData[i] = null;\n point.visible = false;\n break;\n }\n };\n SeriesBase.prototype.findVisibility = function (point) {\n var type = this instanceof Series ? this.seriesType : 'HighLowOpenClose';\n var yValues;\n switch (type) {\n case 'XY':\n this.setXYMinMax(point.yValue);\n this.yData.push(point.yValue);\n if (this instanceof Series && this.type === 'Bubble') {\n this.sizeMax = Math.max(this.sizeMax, (isNullOrUndefined(point.size) || isNaN(+point.size)) ? this.sizeMax\n : point.size);\n }\n return isNullOrUndefined(point.x) || (isNullOrUndefined(point.y) || isNaN(+point.y));\n case 'HighLow':\n this.setHiloMinMax(point.high, point.low);\n return isNullOrUndefined(point.x) || (isNullOrUndefined(point.low) || isNaN(+point.low)) ||\n (isNullOrUndefined(point.high) || isNaN(+point.high));\n case 'HighLowOpenClose':\n this.setHiloMinMax(point.high, point.low);\n return isNullOrUndefined(point.x) || (isNullOrUndefined(point.low) || isNaN(+point.low)) ||\n (isNullOrUndefined(point.open) || isNaN(+point.open)) || (isNullOrUndefined(point.close) || isNaN(+point.close))\n || (isNullOrUndefined(point.high) || isNaN(+point.high));\n case 'BoxPlot':\n yValues = (point.y || [null]).filter(function (value) {\n return !isNullOrUndefined(value) && !isNaN(value);\n }).sort(function (a, b) {\n return a - b;\n });\n point.y = yValues;\n this.yMin = Math.min(this.yMin, Math.min.apply(Math, yValues));\n this.yMax = Math.max(this.yMax, Math.max.apply(Math, yValues));\n return !yValues.length;\n }\n };\n /**\n * To get Y min max for the provided point seriesType XY\n */\n SeriesBase.prototype.setXYMinMax = function (yValue) {\n this.yMin = Math.min(this.yMin, (isNullOrUndefined(yValue) || isNaN(yValue)) ? this.yMin : yValue);\n this.yMax = Math.max(this.yMax, (isNullOrUndefined(yValue) || isNaN(yValue)) ? this.yMax : yValue);\n };\n /**\n * To get Y min max for the provided point seriesType XY\n */\n SeriesBase.prototype.setHiloMinMax = function (high, low) {\n this.yMin = Math.min(this.yMin, Math.min((isNullOrUndefined(low) || isNaN(low)) ? this.yMin : low, (isNullOrUndefined(high) || isNaN(high)) ? this.yMin : high));\n this.yMax = Math.max(this.yMax, Math.max((isNullOrUndefined(low) || isNaN(low)) ? this.yMax : low, (isNullOrUndefined(high) || isNaN(high)) ? this.yMax : high));\n };\n /**\n * Finds the type of the series\n * @private\n */\n SeriesBase.prototype.getSeriesType = function () {\n var type;\n if (this instanceof Series) {\n var seriesType = this.chart.chartAreaType === 'PolarRadar' ? this.drawType : this.type;\n if (seriesType) {\n switch (seriesType) {\n case 'RangeColumn':\n case 'RangeArea':\n case 'Hilo':\n type = 'HighLow';\n break;\n case 'HiloOpenClose':\n case 'Candle':\n type = 'HighLowOpenClose';\n break;\n case 'BoxAndWhisker':\n type = 'BoxPlot';\n break;\n default:\n type = 'XY';\n }\n }\n }\n this.seriesType = type;\n };\n /** @private */\n SeriesBase.prototype.pushCategoryData = function (point, index, pointX) {\n if (!this.xAxis.isIndexed) {\n if (this.xAxis.labels.indexOf(pointX) < 0) {\n this.xAxis.labels.push(pointX);\n }\n point.xValue = this.xAxis.labels.indexOf(pointX);\n }\n else {\n this.xAxis.labels[index] ? this.xAxis.labels[index] += ', ' + pointX :\n this.xAxis.labels.push(pointX);\n point.xValue = index;\n }\n };\n /**\n * To find average of given property\n */\n SeriesBase.prototype.getAverage = function (member, i, data) {\n if (data === void 0) { data = this.currentViewData; }\n var previous = data[i - 1] ? (data[i - 1][member] || 0) : 0;\n var next = data[i + 1] ? (data[i + 1][member] || 0) : 0;\n return (previous + next) / 2;\n };\n /**\n * To find the control points for spline.\n * @return {void}\n * @private\n */\n SeriesBase.prototype.refreshDataManager = function (chart) {\n var _this = this;\n this.chart = chart;\n if (isNullOrUndefined(this.query) && !isNullOrUndefined(this.dataSource)) {\n this.dataManagerSuccess({ result: this.dataSource, count: this.dataSource.length }, chart, false);\n return;\n }\n var dataManager = this.dataModule.getData(this.dataModule.generateQuery().requiresCount());\n dataManager.then(function (e) { return _this.dataManagerSuccess(e, chart); });\n };\n SeriesBase.prototype.dataManagerSuccess = function (e, chart, isRemoteData) {\n if (isRemoteData === void 0) { isRemoteData = true; }\n this.currentViewData = e.result !== '' ? e.result : [];\n if (this instanceof Series) {\n var argsData = {\n name: seriesRender, series: this, data: this.currentViewData, fill: this.interior\n };\n this.chart.trigger(seriesRender, argsData);\n this.interior = argsData.fill;\n this.currentViewData = argsData.data;\n }\n this.processJsonData();\n this.recordsCount = e.count;\n this.refreshChart(isRemoteData);\n };\n SeriesBase.prototype.refreshChart = function (isRemoteData) {\n var chart = this.chart;\n if (this instanceof Series) {\n chart.visibleSeriesCount += isRemoteData ? 1 : 0;\n }\n chart.refreshTechnicalIndicator(this);\n if (this instanceof Series && this.category !== 'TrendLine') {\n for (var _i = 0, _a = this.trendlines; _i < _a.length; _i++) {\n var trendline = _a[_i];\n trendline.setDataSource(this, chart);\n }\n }\n //if (chart.visibleSeries.length === (chart.visibleSeriesCount - chart.indicators.length)) {\n if (chart.visibleSeries.length === (chart.visibleSeriesCount)) {\n chart.refreshBound();\n chart.trigger('loaded', { chart: chart });\n }\n if (this instanceof Series) {\n chart.visibleSeriesCount += isRemoteData ? 0 : 1;\n }\n };\n __decorate([\n Property('')\n ], SeriesBase.prototype, \"xName\", void 0);\n __decorate([\n Property('')\n ], SeriesBase.prototype, \"high\", void 0);\n __decorate([\n Property('')\n ], SeriesBase.prototype, \"low\", void 0);\n __decorate([\n Property('')\n ], SeriesBase.prototype, \"open\", void 0);\n __decorate([\n Property('')\n ], SeriesBase.prototype, \"close\", void 0);\n __decorate([\n Property('')\n ], SeriesBase.prototype, \"volume\", void 0);\n __decorate([\n Property('')\n ], SeriesBase.prototype, \"pointColorMapping\", void 0);\n __decorate([\n Property(null)\n ], SeriesBase.prototype, \"xAxisName\", void 0);\n __decorate([\n Property(null)\n ], SeriesBase.prototype, \"yAxisName\", void 0);\n __decorate([\n Complex(null, Animation)\n ], SeriesBase.prototype, \"animation\", void 0);\n __decorate([\n Property(null)\n ], SeriesBase.prototype, \"fill\", void 0);\n __decorate([\n Property(1)\n ], SeriesBase.prototype, \"width\", void 0);\n __decorate([\n Property('0')\n ], SeriesBase.prototype, \"dashArray\", void 0);\n __decorate([\n Property('')\n ], SeriesBase.prototype, \"dataSource\", void 0);\n __decorate([\n Property()\n ], SeriesBase.prototype, \"query\", void 0);\n __decorate([\n Collection([], ChartSegment)\n ], SeriesBase.prototype, \"segments\", void 0);\n __decorate([\n Property('X')\n ], SeriesBase.prototype, \"segmentAxis\", void 0);\n return SeriesBase;\n}(ChildProperty));\nexport { SeriesBase };\n/**\n * Configures the series in charts.\n */\nvar Series = /** @class */ (function (_super) {\n __extends(Series, _super);\n // tslint:disable-next-line:no-any\n function Series(parent, propName, defaultValue, isArray) {\n var _this = _super.call(this, parent, propName, defaultValue, isArray) || this;\n _this.visibleSeriesCount = 0;\n /** @private */\n _this.category = 'Series';\n /** @private */\n _this.isRectSeries = false;\n /** @private */\n _this.drawPoints = [];\n /** @private */\n _this.delayedAnimation = false;\n return _this;\n }\n /**\n * Refresh the axis label.\n * @return {boolean}\n * @private\n */\n Series.prototype.refreshAxisLabel = function () {\n if (this.xAxis.valueType !== 'Category') {\n return null;\n }\n this.xAxis.labels = [];\n for (var _i = 0, _a = this.xAxis.series; _i < _a.length; _i++) {\n var item = _a[_i];\n if (item.visible) {\n item.xMin = Infinity;\n item.xMax = -Infinity;\n for (var _b = 0, _c = item.points; _b < _c.length; _b++) {\n var point = _c[_b];\n item.pushCategoryData(point, point.index, point.x);\n item.xMin = Math.min(item.xMin, point.xValue);\n item.xMax = Math.max(item.xMax, point.xValue);\n }\n }\n }\n };\n /**\n * To get the series collection.\n * @return {void}\n * @private\n */\n Series.prototype.findSeriesCollection = function (column, row, isStack) {\n var seriesCollection = [];\n for (var _i = 0, _a = row.axes; _i < _a.length; _i++) {\n var rowAxis = _a[_i];\n for (var _b = 0, _c = rowAxis.series; _b < _c.length; _b++) {\n var rowSeries = _c[_b];\n for (var _d = 0, _e = column.axes; _d < _e.length; _d++) {\n var axis = _e[_d];\n for (var _f = 0, _g = axis.series; _f < _g.length; _f++) {\n var series = _g[_f];\n if (series === rowSeries && series.visible && this.rectSeriesInChart(series, isStack)) {\n seriesCollection.push(series);\n }\n }\n }\n }\n }\n return seriesCollection;\n };\n /**\n * To get the column type series.\n * @return {void}\n * @private\n */\n Series.prototype.rectSeriesInChart = function (series, isStack) {\n var type = (series.type).toLowerCase();\n return (type.indexOf('column') !== -1 || type.indexOf('bar') !== -1 || type.indexOf('histogram') !== -1 ||\n type.indexOf('hiloopenclose') !== -1 || type.indexOf('candle') !== -1 ||\n type.indexOf('hilo') !== -1 || series.drawType.indexOf('Column') !== -1 ||\n type.indexOf('waterfall') !== -1 || type.indexOf('boxandwhisker') !== -1 || isStack);\n };\n /**\n * To calculate the stacked values.\n * @return {void}\n * @private\n */\n Series.prototype.calculateStackedValue = function (isStacking100, chart) {\n var axisSeries;\n for (var _i = 0, _a = chart.columns; _i < _a.length; _i++) {\n var columnItem = _a[_i];\n for (var _b = 0, _c = chart.rows; _b < _c.length; _b++) {\n var item = _c[_b];\n this.calculateStackingValues(this.findSeriesCollection(columnItem, item, true), isStacking100);\n }\n }\n };\n Series.prototype.calculateStackingValues = function (seriesCollection, isStacking100) {\n var startValues;\n var endValues;\n var yValues = [];\n var lastPositive = [];\n var lastNegative = [];\n var stackingGroup;\n var lastValue;\n var value;\n var frequencies = [];\n if (isStacking100) {\n frequencies = this.findFrequencies(seriesCollection);\n }\n for (var _i = 0, seriesCollection_1 = seriesCollection; _i < seriesCollection_1.length; _i++) {\n var series = seriesCollection_1[_i];\n if (series.type.indexOf('Stacking') !== -1 || (series.drawType.indexOf('Stacking') !== -1 &&\n (series.chart.chartAreaType === 'PolarRadar'))) {\n stackingGroup = (series.type.indexOf('StackingArea') !== -1) ? 'StackingArea100' : series.stackingGroup;\n if (!lastPositive[stackingGroup]) {\n lastPositive[stackingGroup] = [];\n lastNegative[stackingGroup] = [];\n }\n yValues = series.yData;\n startValues = [];\n endValues = [];\n for (var j = 0, pointsLength = series.points.length; j < pointsLength; j++) {\n lastValue = 0;\n value = yValues[j];\n if (lastPositive[stackingGroup][series.points[j].xValue] === undefined) {\n lastPositive[stackingGroup][series.points[j].xValue] = 0;\n }\n if (lastNegative[stackingGroup][series.points[j].xValue] === undefined) {\n lastNegative[stackingGroup][series.points[j].xValue] = 0;\n }\n if (isStacking100) {\n value = value / frequencies[stackingGroup][series.points[j].xValue] * 100;\n value = !isNaN(value) ? value : 0;\n series.points[j].percent = value.toFixed(2);\n }\n if (value >= 0) {\n lastValue = lastPositive[stackingGroup][series.points[j].xValue];\n lastPositive[stackingGroup][series.points[j].xValue] += value;\n }\n else {\n lastValue = lastNegative[stackingGroup][series.points[j].xValue];\n lastNegative[stackingGroup][series.points[j].xValue] += value;\n }\n startValues.push(lastValue);\n endValues.push(value + lastValue);\n if (isStacking100 && (endValues[j] > 100)) {\n endValues[j] = 100;\n }\n }\n series.stackedValues = new StackValues(startValues, endValues);\n series.yMin = Math.min.apply(0, startValues);\n series.yMax = Math.max.apply(0, endValues);\n if (series.yMin > Math.min.apply(0, endValues)) {\n series.yMin = (isStacking100) ? -100 : Math.min.apply(0, endValues);\n }\n if (series.yMax < Math.max.apply(0, startValues)) {\n series.yMax = 0;\n }\n }\n }\n };\n Series.prototype.findFrequencies = function (seriesCollection) {\n var frequencies = [];\n var stackingGroup;\n for (var _i = 0, seriesCollection_2 = seriesCollection; _i < seriesCollection_2.length; _i++) {\n var series = seriesCollection_2[_i];\n series.yAxis.isStack100 = series.type.indexOf('100') !== -1 ? true : false;\n if (series.type.indexOf('Stacking') !== -1) {\n stackingGroup = (series.type.indexOf('StackingArea') !== -1) ? 'StackingArea100' : series.stackingGroup;\n if (!frequencies[stackingGroup]) {\n frequencies[stackingGroup] = [];\n }\n for (var j = 0, pointsLength = series.points.length; j < pointsLength; j++) {\n if (frequencies[stackingGroup][series.points[j].xValue] === undefined) {\n frequencies[stackingGroup][series.points[j].xValue] = 0;\n }\n if (series.yData[j] > 0) {\n frequencies[stackingGroup][series.points[j].xValue] += series.yData[j];\n }\n else {\n frequencies[stackingGroup][series.points[j].xValue] -= series.yData[j];\n }\n }\n }\n }\n return frequencies;\n };\n /* private dataManagerFailure(e: { result: Object[] }): void {\n this.currentViewData = [];\n this.refreshChart();\n }*/\n /** @private */\n Series.prototype.renderSeries = function (chart, index) {\n var seriesType = firstToLowerCase(this.type);\n if (seriesType.indexOf('100') !== -1) {\n seriesType = seriesType.replace('100', '');\n }\n if (chart[seriesType + 'SeriesModule']) {\n if (this.category !== 'Indicator' && this.category !== 'TrendLine') {\n this.createSeriesElements(chart);\n }\n chart[seriesType + 'SeriesModule'].render(this, this.xAxis, this.yAxis, chart.requireInvertedAxis);\n if (this.category !== 'Indicator') {\n if (this.errorBar.visible) {\n this.chart.errorBarModule.render(this);\n }\n if (this.marker.dataLabel.visible) {\n chart.dataLabelModule.render(this, this.chart, this.marker.dataLabel);\n }\n this.appendSeriesElement(chart.seriesElements, chart);\n }\n this.performAnimation(chart, seriesType, this.errorBar, this.marker, this.marker.dataLabel);\n }\n };\n /**\n * To create seris element.\n * @return {void}\n * @private\n */\n Series.prototype.createSeriesElements = function (chart) {\n if (this.category !== 'Indicator') {\n var elementId = chart.element.id;\n var xAxisRect = this.xAxis.rect;\n // 8 for extend border value 5 for extend size value\n var explodeValue = this.marker.border.width + 8 + 5;\n var yAxisRect = this.yAxis.rect;\n var marker = this.marker;\n var render = chart.renderer;\n var index = this.index;\n var markerHeight = (this.type === 'Scatter') ? (this.marker.height + explodeValue) / 2 : 0;\n var markerWidth = (this.type === 'Scatter') ? (this.marker.width + explodeValue) / 2 : 0;\n if (chart.chartAreaType === 'PolarRadar') {\n this.clipRectElement = render.drawCircularClipPath(new CircleOption(elementId + '_ChartSeriesClipRect_' + index, 'transparent', { width: 1, color: 'Gray' }, 1, this.clipRect.width / 2 + this.clipRect.x, this.clipRect.height / 2 + this.clipRect.y, chart.radius));\n }\n else {\n this.clipRectElement = render.drawClipPath(new RectOption(elementId + '_ChartSeriesClipRect_' + index, 'transparent', { width: 1, color: 'Gray' }, 1, {\n x: -markerWidth, y: -markerHeight,\n width: this.clipRect.width + markerWidth * 2,\n height: this.clipRect.height + markerHeight * 2\n }));\n }\n var transform = void 0;\n transform = chart.chartAreaType === 'Cartesian' ? 'translate(' + this.clipRect.x + ',' + (this.clipRect.y) + ')' : '';\n this.symbolElement = null;\n this.seriesElement = render.createGroup({\n 'id': elementId + 'SeriesGroup' + index,\n 'transform': transform,\n 'clip-path': 'url(#' + elementId + '_ChartSeriesClipRect_' + index + ')'\n });\n this.seriesElement.appendChild(this.clipRectElement);\n }\n };\n /**\n * To append the series.\n * @return {void}\n * @private\n */\n Series.prototype.appendSeriesElement = function (element, chart) {\n var marker = this.marker;\n var dataLabel = marker.dataLabel;\n if (this.category !== 'TrendLine') {\n chart.seriesElements.appendChild(this.seriesElement);\n var errorBar = this.errorBar;\n if (errorBar.visible) {\n if (chart.chartAreaType === 'PolarRadar') {\n chart.seriesElements.appendChild(this.seriesElement);\n }\n else {\n chart.seriesElements.appendChild(this.errorBarElement);\n }\n }\n if (this.type === 'Scatter' || this.type === 'Bubble') {\n chart.seriesElements.appendChild(this.seriesElement);\n }\n }\n if (marker.visible && ((chart.chartAreaType === 'Cartesian' && (!this.isRectSeries || this.type === 'BoxAndWhisker'))\n || ((this.drawType !== 'Scatter' && !this.isRectSeries) && chart.chartAreaType === 'PolarRadar')) &&\n this.type !== 'Scatter' && this.type !== 'Bubble') {\n chart.seriesElements.appendChild(this.symbolElement);\n }\n if (dataLabel.visible) {\n chart.dataLabelElements.appendChild(this.shapeElement);\n chart.dataLabelElements.appendChild(this.textElement);\n }\n if (chart.dataLabelElements.hasChildNodes()) {\n chart.seriesElements.appendChild(chart.dataLabelElements);\n }\n };\n /**\n * To perform animation for chart series.\n * @return {void}\n * @private\n */\n Series.prototype.performAnimation = function (chart, type, errorBar, marker, dataLabel) {\n if (this.animation.enable && chart.animateSeries) {\n chart[type + 'SeriesModule'].doAnimation(this);\n if (errorBar.visible) {\n chart.errorBarModule.doErrorBarAnimation(this);\n }\n if (marker.visible) {\n chart.markerRender.doMarkerAnimation(this);\n }\n if (dataLabel.visible) {\n chart.dataLabelModule.doDataLabelAnimation(this);\n }\n }\n };\n /**\n * To set border color for empty point\n * @private\n */\n Series.prototype.setPointColor = function (point, color) {\n color = point.interior || color;\n return point.isEmpty ? (this.emptyPointSettings.fill || color) : color;\n };\n /**\n * To set border color for empty point\n * @private\n */\n Series.prototype.setBorderColor = function (point, border) {\n border.width = point.isEmpty ? (this.emptyPointSettings.border.width || border.width) : border.width;\n border.color = point.isEmpty ? (this.emptyPointSettings.border.color || border.color) : border.color;\n return border;\n };\n __decorate([\n Property('')\n ], Series.prototype, \"name\", void 0);\n __decorate([\n Property('')\n ], Series.prototype, \"yName\", void 0);\n __decorate([\n Property('Line')\n ], Series.prototype, \"drawType\", void 0);\n __decorate([\n Property(true)\n ], Series.prototype, \"isClosed\", void 0);\n __decorate([\n Property('#2ecd71')\n ], Series.prototype, \"bearFillColor\", void 0);\n __decorate([\n Property('#e74c3d')\n ], Series.prototype, \"bullFillColor\", void 0);\n __decorate([\n Property(false)\n ], Series.prototype, \"enableSolidCandles\", void 0);\n __decorate([\n Property('')\n ], Series.prototype, \"size\", void 0);\n __decorate([\n Property(null)\n ], Series.prototype, \"binInterval\", void 0);\n __decorate([\n Property(false)\n ], Series.prototype, \"showNormalDistribution\", void 0);\n __decorate([\n Property('')\n ], Series.prototype, \"stackingGroup\", void 0);\n __decorate([\n Property(true)\n ], Series.prototype, \"visible\", void 0);\n __decorate([\n Complex({ color: 'transparent', width: 0 }, Border)\n ], Series.prototype, \"border\", void 0);\n __decorate([\n Property(1)\n ], Series.prototype, \"opacity\", void 0);\n __decorate([\n Property('Line')\n ], Series.prototype, \"type\", void 0);\n __decorate([\n Complex(null, ErrorBarSettings)\n ], Series.prototype, \"errorBar\", void 0);\n __decorate([\n Complex(null, MarkerSettings)\n ], Series.prototype, \"marker\", void 0);\n __decorate([\n Collection([], Trendline)\n ], Series.prototype, \"trendlines\", void 0);\n __decorate([\n Property(true)\n ], Series.prototype, \"enableTooltip\", void 0);\n __decorate([\n Property('SeriesType')\n ], Series.prototype, \"legendShape\", void 0);\n __decorate([\n Property(null)\n ], Series.prototype, \"selectionStyle\", void 0);\n __decorate([\n Property(1)\n ], Series.prototype, \"minRadius\", void 0);\n __decorate([\n Property(3)\n ], Series.prototype, \"maxRadius\", void 0);\n __decorate([\n Property('Natural')\n ], Series.prototype, \"splineType\", void 0);\n __decorate([\n Property(0.5)\n ], Series.prototype, \"cardinalSplineTension\", void 0);\n __decorate([\n Complex(null, EmptyPointSettings)\n ], Series.prototype, \"emptyPointSettings\", void 0);\n __decorate([\n Property(true)\n ], Series.prototype, \"showMean\", void 0);\n __decorate([\n Property('Normal')\n ], Series.prototype, \"boxPlotMode\", void 0);\n __decorate([\n Property(null)\n ], Series.prototype, \"columnWidth\", void 0);\n __decorate([\n Property(0)\n ], Series.prototype, \"columnSpacing\", void 0);\n __decorate([\n Property('#C64E4A')\n ], Series.prototype, \"negativeFillColor\", void 0);\n __decorate([\n Property('#4E81BC')\n ], Series.prototype, \"summaryFillColor\", void 0);\n __decorate([\n Property()\n ], Series.prototype, \"intermediateSumIndexes\", void 0);\n __decorate([\n Property()\n ], Series.prototype, \"sumIndexes\", void 0);\n __decorate([\n Complex({ color: 'black', width: 2 }, Connector)\n ], Series.prototype, \"connector\", void 0);\n __decorate([\n Complex(null, CornerRadius)\n ], Series.prototype, \"cornerRadius\", void 0);\n return Series;\n}(SeriesBase));\nexport { Series };\n","import { Query, DataManager } from '@syncfusion/ej2-data';\n/**\n * data module is used to generate query and dataSource\n */\nvar Data = /** @class */ (function () {\n /**\n * Constructor for data module\n * @private\n */\n function Data(dataSource, query) {\n this.initDataManager(dataSource, query);\n }\n /**\n * The function used to initialize dataManager and query\n * @return {void}\n * @private\n */\n Data.prototype.initDataManager = function (dataSource, query) {\n this.dataManager = dataSource instanceof DataManager ? dataSource : new DataManager(dataSource);\n this.query = query instanceof Query ? query : new Query();\n };\n /**\n * The function used to generate updated Query from chart model\n * @return {void}\n * @private\n */\n Data.prototype.generateQuery = function () {\n var query = this.query.clone();\n return query;\n };\n /**\n * The function used to get dataSource by executing given Query\n * @param {Query} query - A Query that specifies to generate dataSource\n * @return {void}\n * @private\n */\n Data.prototype.getData = function (query) {\n return this.dataManager.executeQuery(query);\n };\n return Data;\n}());\nexport { Data };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { drawSymbol, PathOption, Size } from '../../common/utils/helper';\nimport { Browser, extend, remove } from '@syncfusion/ej2-base';\nimport { ChartData } from '../../chart/utils/get-data';\nimport { withInBounds, PointData, stopTimer } from '../../common/utils/helper';\nimport { colorNameToHex, convertHexToColor } from '../../common/utils/helper';\n/**\n * Marker Module used to render the marker for line type series.\n */\nvar MarkerExplode = /** @class */ (function (_super) {\n __extends(MarkerExplode, _super);\n /**\n * Constructor for the marker module.\n * @private\n */\n function MarkerExplode(chart) {\n var _this = _super.call(this, chart) || this;\n _this.addEventListener();\n _this.elementId = chart.element.id;\n return _this;\n }\n /**\n * @hidden\n */\n MarkerExplode.prototype.addEventListener = function () {\n if (this.chart.isDestroyed) {\n return;\n }\n this.chart.on(Browser.touchMoveEvent, this.mouseMoveHandler, this);\n this.chart.on(Browser.touchEndEvent, this.mouseUpHandler, this);\n };\n /**\n * @hidden\n */\n /* public removeEventListener(): void {\n if (this.chart.isDestroyed) { return; }\n this.chart.off(Browser.touchMoveEvent, this.mouseMoveHandler);\n }*/\n /**\n * @hidden\n */\n MarkerExplode.prototype.mouseUpHandler = function () {\n var chart = this.chart;\n if (chart.isTouch && !chart.crosshair.enable && !this.isSelected(chart)) {\n this.markerMove(true);\n }\n };\n /**\n * @hidden\n */\n MarkerExplode.prototype.mouseMoveHandler = function () {\n var chart = this.chart;\n if ((!chart.crosshair.enable || (chart.tooltip.enable)) && (!chart.isTouch || chart.startMove) && !this.isSelected(chart)) {\n this.markerMove(false);\n }\n };\n MarkerExplode.prototype.markerMove = function (remove) {\n var _this = this;\n var chart = this.chart;\n this.currentPoints = [];\n var data;\n var previous;\n var explodeSeries;\n if (!chart.tooltip.shared || !chart.tooltip.enable) {\n data = this.getData();\n previous = this.previousPoints[0];\n explodeSeries = data.series && (data.series.type === 'BoxAndWhisker' || data.series.type === 'Bubble' || data.series.drawType === 'Scatter'\n || data.series.type === 'Scatter' || (!data.series.isRectSeries && data.series.marker.visible));\n data.lierIndex = this.lierIndex;\n if (data.point && explodeSeries && ((!previous || (previous.point !== data.point)) ||\n (previous && previous.lierIndex > 3 && previous.lierIndex !== this.lierIndex))) {\n this.currentPoints.push(data);\n }\n }\n else {\n if (!withInBounds(chart.mouseX, chart.mouseY, chart.chartAxisLayoutPanel.seriesClipRect)) {\n return null;\n }\n if (chart.tooltip.enable) {\n var pointData = chart.chartAreaType === 'PolarRadar' ? this.getData() : null;\n for (var _i = 0, _a = chart.visibleSeries; _i < _a.length; _i++) {\n var chartSeries = _a[_i];\n if (!chartSeries.enableTooltip || chartSeries.category === 'Indicator') {\n continue;\n }\n if (chart.chartAreaType === 'Cartesian' && chartSeries.visible) {\n data = this.getClosestX(chart, chartSeries);\n }\n else if (chart.chartAreaType === 'PolarRadar' && chartSeries.visible && pointData.point !== null) {\n data = new PointData(chartSeries.points[pointData.point.index], chartSeries);\n }\n if (data) {\n this.currentPoints.push(data);\n data = null;\n }\n }\n }\n }\n var length = this.previousPoints.length;\n if (this.currentPoints.length > 0) {\n if (length === 0 || (length > 0 && this.previousPoints[0].point !== this.currentPoints[0].point)) {\n if (this.previousPoints.length > 0) {\n this.removeHighlightedMarker();\n }\n var _loop_1 = function (data_1) {\n if (data_1 && data_1.point &&\n (!data_1.series.isRectSeries || data_1.series.type === 'BoxAndWhisker')) {\n stopTimer(this_1.markerExplode);\n this_1.isRemove = true;\n data_1.point.symbolLocations.map(function (location, index) {\n if (data_1.point.marker.visible) {\n _this.drawTrackBall(data_1.series, data_1.point, location, index);\n }\n });\n }\n };\n var this_1 = this;\n for (var _b = 0, _c = this.currentPoints; _b < _c.length; _b++) {\n var data_1 = _c[_b];\n _loop_1(data_1);\n }\n this.previousPoints = extend([], this.currentPoints, null, true);\n }\n }\n if (!chart.tooltip.enable && ((this.currentPoints.length === 0 && this.isRemove) || (remove && this.isRemove) ||\n !withInBounds(chart.mouseX, chart.mouseY, chart.chartAxisLayoutPanel.seriesClipRect))) {\n this.isRemove = false;\n this.markerExplode = setTimeout(function () {\n _this.removeHighlightedMarker();\n }, 2000);\n }\n this.currentPoints = [];\n };\n MarkerExplode.prototype.drawTrackBall = function (series, point, location, index) {\n var marker = point.marker;\n var seriesMarker = series.marker;\n var shape = marker.shape || seriesMarker.shape;\n var element = series.symbolElement || series.seriesElement;\n var symbolId = this.elementId + '_Series_' + series.index + '_Point_' + point.index + '_Trackball' +\n (index ? index : '');\n var size = new Size((marker.width || seriesMarker.width) + 5, (marker.height || seriesMarker.height) + 5);\n var border = (marker.border || series.border);\n var explodeSeries = (series.type === 'BoxAndWhisker' || series.type === 'Bubble' || series.type === 'Scatter');\n var borderColor = (border.color && border.color !== 'transparent') ? border.color :\n marker.fill || point.interior || (explodeSeries ? point.color : series.interior);\n var colorValue = convertHexToColor(colorNameToHex(borderColor));\n var borderWidth = marker.border ? marker.border.width : seriesMarker.border.width;\n var markerShadow = series.chart.themeStyle.markerShadow ||\n 'rgba(' + colorValue.r + ',' + colorValue.g + ',' + colorValue.b + ',0.2)';\n for (var i = 0; i < 2; i++) {\n var options = new PathOption(symbolId + '_' + i, i ? (marker.fill || point.color || (explodeSeries ? series.interior : '#ffffff')) : 'transparent', borderWidth + (i ? 0 : 8), i ? borderColor : markerShadow, (marker.opacity || seriesMarker.opacity), null, null);\n var symbol = drawSymbol(location, shape, size, seriesMarker.imageUrl, options, '');\n symbol.setAttribute('style', 'pointer-events:none');\n symbol.setAttribute('class', 'EJ2-Trackball');\n element.appendChild(symbol);\n }\n };\n /**\n * @hidden\n */\n MarkerExplode.prototype.removeHighlightedMarker = function () {\n var elements = document.getElementsByClassName('EJ2-Trackball');\n for (var i = 0, len = elements.length; i < len; i++) {\n remove(elements[0]);\n }\n this.previousPoints = [];\n };\n return MarkerExplode;\n}(ChartData));\nexport { MarkerExplode };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { drawSymbol, PathOption, Size, markerAnimate, CircleOption, RectOption } from '../../common/utils/helper';\nimport { findlElement } from '../../common/utils/helper';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { pointRender } from '../../common/model/constants';\nimport { MarkerExplode } from './marker-explode';\nimport { getSaturationColor } from '../../common/utils/helper';\n/**\n * Marker module used to render the marker for line type series.\n */\nvar Marker = /** @class */ (function (_super) {\n __extends(Marker, _super);\n /**\n * Constructor for the marker module.\n * @private\n */\n function Marker(chart) {\n var _this = _super.call(this, chart) || this;\n _this.addEventListener();\n return _this;\n }\n /**\n * Render the marker for series.\n * @return {void}\n * @private\n */\n Marker.prototype.render = function (series) {\n var _this = this;\n this.createElement(series);\n var _loop_1 = function (point) {\n if (point.visible && point.symbolLocations.length) {\n point.symbolLocations.map(function (location, index) {\n _this.renderMarker(series, point, location, index);\n });\n }\n };\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n _loop_1(point);\n }\n };\n Marker.prototype.renderMarker = function (series, point, location, index) {\n var seriesIndex = series.index;\n var marker = series.marker;\n var border = {\n color: marker.border.color,\n width: marker.border.width\n };\n var borderColor = marker.border.color;\n var symbolId;\n var shapeOption;\n var isBoxPlot = series.type === 'BoxAndWhisker';\n var fill = marker.fill || (isBoxPlot ? point.interior || series.interior : '#ffffff');\n var argsData;\n var parentElement = isBoxPlot ?\n findlElement(series.seriesElement.childNodes, 'Series_' + series.index + '_Point_' + point.index)\n : series.symbolElement;\n border.color = borderColor || series.setPointColor(point, series.interior);\n symbolId = this.elementId + '_Series_' + seriesIndex + '_Point_' + point.index + '_Symbol' +\n (index ? index : '');\n argsData = {\n cancel: false, name: pointRender, series: series, point: point,\n fill: point.isEmpty ? (series.emptyPointSettings.fill || fill) : fill,\n border: {\n color: series.type === 'BoxAndWhisker' ?\n (!isNullOrUndefined(borderColor) && borderColor !== 'transparent') ? borderColor :\n getSaturationColor(fill, -0.6)\n : border.color,\n width: border.width\n },\n height: marker.height,\n width: marker.width,\n shape: marker.shape\n };\n argsData.border = series.setBorderColor(point, { width: argsData.border.width, color: argsData.border.color });\n this.chart.trigger(pointRender, argsData);\n point.color = argsData.fill;\n if (!argsData.cancel) {\n var y = void 0;\n if (series.type === 'RangeArea') {\n y = index ? point.low : point.high;\n }\n else if (isBoxPlot) {\n y = point.outliers[index];\n }\n else {\n y = point.y;\n }\n shapeOption = new PathOption(symbolId, argsData.fill, argsData.border.width, argsData.border.color, marker.opacity, null);\n if (parentElement !== undefined && parentElement !== null) {\n parentElement.appendChild(drawSymbol(location, argsData.shape, new Size(argsData.width, argsData.height), marker.imageUrl, shapeOption, point.x.toString() + ':' + y.toString()));\n }\n point.marker = {\n border: argsData.border,\n fill: argsData.fill,\n height: argsData.height,\n visible: true,\n shape: argsData.shape,\n width: argsData.width\n };\n }\n else {\n location = null;\n point.marker = {\n visible: false\n };\n }\n };\n Marker.prototype.createElement = function (series) {\n var markerClipRect;\n var marker = series.marker;\n // 8 for extend border value 5 for extend size value\n var explodeValue = marker.border.width + 8 + 5;\n var render = series.chart.renderer;\n var transform;\n transform = series.chart.chartAreaType === 'Cartesian' ? 'translate(' + series.clipRect.x + ',' + (series.clipRect.y) + ')' : '';\n if (marker.visible) {\n var markerHeight = (marker.height + explodeValue) / 2;\n var markerWidth = (marker.width + explodeValue) / 2;\n if (series.chart.chartAreaType === 'Cartesian') {\n markerClipRect = render.drawClipPath(new RectOption(this.elementId + '_ChartMarkerClipRect_' + series.index, 'transparent', { width: 1, color: 'Gray' }, 1, {\n x: -markerWidth, y: -markerHeight,\n width: series.clipRect.width + markerWidth * 2,\n height: series.clipRect.height + markerHeight * 2\n }));\n }\n else {\n markerClipRect = render.drawCircularClipPath(new CircleOption(this.elementId + '_ChartMarkerClipRect_' + series.index, 'transparent', { width: 1, color: 'Gray' }, 1, series.clipRect.width / 2 + series.clipRect.x, series.clipRect.height / 2 + series.clipRect.y, series.chart.radius + Math.max(markerHeight, markerWidth)));\n }\n series.symbolElement = render.createGroup({\n 'id': this.elementId + 'SymbolGroup' + series.index,\n 'transform': transform,\n 'clip-path': 'url(#' + this.elementId + '_ChartMarkerClipRect_' + series.index + ')'\n });\n series.symbolElement.appendChild(markerClipRect);\n }\n };\n Marker.prototype.getRangeLowPoint = function (region, series) {\n var x = region.x;\n var y = region.y;\n if (series.chart.requireInvertedAxis) {\n y += region.height / 2;\n x += series.yAxis.isInversed ? region.width : 0;\n }\n else {\n y += series.yAxis.isInversed ? 0 : region.height;\n x += region.width / 2;\n }\n return { x: x, y: y };\n };\n /**\n * Animates the marker.\n * @return {void}.\n * @private\n */\n Marker.prototype.doMarkerAnimation = function (series) {\n if (!(series.isRectSeries || series.type === 'Scatter' || series.type === 'Bubble' ||\n (series.chart.chartAreaType === 'PolarRadar' && (series.drawType === 'Scatter' || series.drawType.indexOf('Column') > -1)))) {\n var markerElements = series.symbolElement.childNodes;\n var delay = series.animation.delay + series.animation.duration;\n var j = 1;\n var incFactor = series.type === 'RangeArea' ? 2 : 1;\n for (var i = 0; i < series.points.length; i++) {\n if (!series.points[i].symbolLocations.length || !markerElements[j]) {\n continue;\n }\n markerAnimate(markerElements[j], delay, 200, series, i, series.points[i].symbolLocations[0], false);\n if (incFactor === 2) {\n var lowPoint = this.getRangeLowPoint(series.points[i].regions[0], series);\n markerAnimate(markerElements[j + 1], delay, 200, series, i, lowPoint, false);\n }\n j += incFactor;\n }\n }\n };\n return Marker;\n}(MarkerExplode));\nexport { Marker };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, Complex, ChildProperty } from '@syncfusion/ej2-base';\nimport { Font, Border } from '../model/base';\nimport { Theme } from '../model/theme';\nimport { Size, Rect, subtractThickness, Thickness, drawSymbol, measureText, ChartLocation, PathOption } from '../utils/helper';\nimport { RectOption, TextOption, textElement, stringToNumber, removeElement, showTooltip, getElement } from '../utils/helper';\n/**\n * Configures the location for the legend.\n */\nvar Location = /** @class */ (function (_super) {\n __extends(Location, _super);\n function Location() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0)\n ], Location.prototype, \"x\", void 0);\n __decorate([\n Property(0)\n ], Location.prototype, \"y\", void 0);\n return Location;\n}(ChildProperty));\nexport { Location };\n/**\n * Configures the legends in charts.\n */\nvar LegendSettings = /** @class */ (function (_super) {\n __extends(LegendSettings, _super);\n function LegendSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], LegendSettings.prototype, \"visible\", void 0);\n __decorate([\n Property(null)\n ], LegendSettings.prototype, \"height\", void 0);\n __decorate([\n Property(null)\n ], LegendSettings.prototype, \"width\", void 0);\n __decorate([\n Complex({ x: 0, y: 0 }, Location)\n ], LegendSettings.prototype, \"location\", void 0);\n __decorate([\n Property('Auto')\n ], LegendSettings.prototype, \"position\", void 0);\n __decorate([\n Property(8)\n ], LegendSettings.prototype, \"padding\", void 0);\n __decorate([\n Property('Center')\n ], LegendSettings.prototype, \"alignment\", void 0);\n __decorate([\n Complex(Theme.legendLabelFont, Font)\n ], LegendSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Property(10)\n ], LegendSettings.prototype, \"shapeHeight\", void 0);\n __decorate([\n Property(10)\n ], LegendSettings.prototype, \"shapeWidth\", void 0);\n __decorate([\n Complex({}, Border)\n ], LegendSettings.prototype, \"border\", void 0);\n __decorate([\n Property(5)\n ], LegendSettings.prototype, \"shapePadding\", void 0);\n __decorate([\n Property('transparent')\n ], LegendSettings.prototype, \"background\", void 0);\n __decorate([\n Property(1)\n ], LegendSettings.prototype, \"opacity\", void 0);\n __decorate([\n Property(true)\n ], LegendSettings.prototype, \"toggleVisibility\", void 0);\n __decorate([\n Property(null)\n ], LegendSettings.prototype, \"description\", void 0);\n __decorate([\n Property(3)\n ], LegendSettings.prototype, \"tabIndex\", void 0);\n return LegendSettings;\n}(ChildProperty));\nexport { LegendSettings };\n/**\n * Legend base class for Chart and Accumulation chart.\n * @private\n */\nvar BaseLegend = /** @class */ (function () {\n /**\n * Constructor for the dateTime module.\n * @private\n */\n function BaseLegend(chart) {\n this.rowCount = 0; // legend row counts per page \n this.columnCount = 0; // legend column counts per page \n this.pageButtonSize = 8;\n this.pageXCollections = []; // pages of x locations\n this.maxColumns = 0;\n this.isTrimmed = false;\n this.maxWidth = 0;\n this.currentPage = 1;\n this.chart = chart;\n this.legend = chart.legendSettings;\n this.legendID = chart.element.id + '_chart_legend';\n this.isChartControl = (chart.getModuleName() === 'chart');\n }\n /**\n * Calculate the bounds for the legends.\n * @return {void}\n * @private\n */\n BaseLegend.prototype.calculateLegendBounds = function (rect, availableSize) {\n var legend = this.legend;\n this.getPosition(legend.position, availableSize);\n this.legendBounds = new Rect(rect.x, rect.y, 0, 0);\n this.isVertical = (this.position === 'Left' || this.position === 'Right');\n if (this.isVertical) {\n this.legendBounds.height = stringToNumber(legend.height, availableSize.height - (rect.y - this.chart.margin.top)) || rect.height;\n this.legendBounds.width = stringToNumber(legend.width || '20%', availableSize.width);\n }\n else {\n this.legendBounds.width = stringToNumber(legend.width, availableSize.width) || rect.width;\n this.legendBounds.height = stringToNumber(legend.height || '20%', availableSize.height);\n }\n this.library.getLegendBounds(availableSize, this.legendBounds, legend);\n this.getLocation(this.position, legend.alignment, this.legendBounds, rect, availableSize);\n };\n /**\n * To find legend position based on available size for chart and accumulation chart\n */\n BaseLegend.prototype.getPosition = function (position, availableSize) {\n if (this.isChartControl) {\n this.position = (position !== 'Auto') ? position : 'Bottom';\n }\n else {\n if (position === 'Auto' && this.chart.visibleSeries &&\n (this.chart.visibleSeries[0].type === 'Funnel' || this.chart.visibleSeries[0].type === 'Pyramid')) {\n position = 'Top';\n }\n this.position = (position !== 'Auto') ? position :\n (availableSize.width > availableSize.height ? 'Right' : 'Bottom');\n }\n };\n /**\n * To set bounds for chart and accumulation chart\n */\n BaseLegend.prototype.setBounds = function (computedWidth, computedHeight, legend, legendBounds) {\n computedWidth = computedWidth < legendBounds.width ? computedWidth : legendBounds.width;\n computedHeight = computedHeight < legendBounds.height ? computedHeight : legendBounds.height;\n legendBounds.width = !legend.width ? computedWidth : legendBounds.width;\n legendBounds.height = !legend.height ? computedHeight : legendBounds.height;\n this.rowCount = Math.max(1, Math.ceil((legendBounds.height - legend.padding) / (this.maxItemHeight + legend.padding)));\n };\n /**\n * To find legend location based on position, alignment for chart and accumulation chart\n */\n BaseLegend.prototype.getLocation = function (position, alignment, legendBounds, rect, availableSize) {\n var padding = this.legend.border.width;\n var legendHeight = legendBounds.height + padding;\n var legendWidth = legendBounds.width + padding;\n var marginBottom = this.chart.margin.bottom;\n if (position === 'Bottom') {\n legendBounds.x = this.alignLegend(legendBounds.x, availableSize.width, legendBounds.width, alignment);\n legendBounds.y = rect.y + (rect.height - legendHeight) + padding;\n subtractThickness(rect, new Thickness(0, 0, 0, legendHeight));\n }\n else if (position === 'Top') {\n legendBounds.x = this.alignLegend(legendBounds.x, availableSize.width, legendBounds.width, alignment);\n legendBounds.y = rect.y + padding;\n subtractThickness(rect, new Thickness(0, 0, legendHeight, 0));\n }\n else if (position === 'Right') {\n legendBounds.x = rect.x + (rect.width - legendBounds.width);\n legendBounds.y = rect.y + this.alignLegend(0, availableSize.height - (rect.y + marginBottom), legendBounds.height, alignment);\n subtractThickness(rect, new Thickness(0, legendWidth, 0, 0));\n }\n else if (position === 'Left') {\n legendBounds.y = rect.y + this.alignLegend(0, availableSize.height - (rect.y + marginBottom), legendBounds.height, alignment);\n subtractThickness(rect, new Thickness(legendWidth, 0, 0, 0));\n }\n else {\n legendBounds.x = this.legend.location.x;\n legendBounds.y = this.legend.location.y;\n subtractThickness(rect, new Thickness(0, 0, 0, 0));\n }\n };\n /**\n * To find legend alignment for chart and accumulation chart\n */\n BaseLegend.prototype.alignLegend = function (start, size, legendSize, alignment) {\n switch (alignment) {\n case 'Far':\n start = (size - legendSize) - start;\n break;\n case 'Center':\n start = ((size - legendSize) / 2);\n break;\n }\n return start;\n };\n /**\n * Renders the legend.\n * @return {void}\n * @private\n */\n BaseLegend.prototype.renderLegend = function (chart, legend, legendBounds) {\n var firstLegend = this.findFirstLegendPosition(this.legendCollections);\n var padding = legend.padding;\n this.maxItemHeight = Math.max(this.legendCollections[0].textSize.height, legend.shapeHeight);\n var legendGroup = chart.renderer.createGroup({ id: this.legendID + '_g' });\n var legendTranslateGroup = this.createLegendElements(chart, legendBounds, legendGroup, legend, this.legendID);\n if (firstLegend !== this.legendCollections.length) {\n var legendSeriesGroup = void 0; // legendItem group for each series group element\n var start = void 0; // starting shape center x,y position && to resolve lint error used new line for declaration\n start = new ChartLocation(legendBounds.x + padding + (legend.shapeWidth / 2), legendBounds.y + padding + this.maxItemHeight / 2);\n var textOptions = new TextOption('', start.x, start.y, 'start');\n // initialization for totalPages legend click totalpage again calculate\n this.totalPages = this.isChartControl ? this.totalPages : 0;\n var textPadding = legend.shapePadding + padding + legend.shapeWidth;\n var count = 0;\n this.pageXCollections = [];\n this.legendCollections[firstLegend].location = start;\n var previousLegend = this.legendCollections[firstLegend];\n for (var _i = 0, _a = this.legendCollections; _i < _a.length; _i++) {\n var legendOption = _a[_i];\n if (legendOption.render && legendOption.text !== '') {\n legendSeriesGroup = chart.renderer.createGroup({\n id: this.legendID + this.generateId(legendOption, '_g_', count)\n });\n legendSeriesGroup.setAttribute('tabindex', legend.tabIndex.toString());\n legendSeriesGroup.setAttribute('aria-label', legend.description || 'Click to show or hide the ' + legendOption.text + ' series');\n this.library.getRenderPoint(legendOption, start, textPadding, previousLegend, legendBounds, count, firstLegend);\n this.renderSymbol(legendOption, legendSeriesGroup, count);\n this.renderText(chart, legendOption, legendSeriesGroup, textOptions, count);\n legendSeriesGroup.setAttribute('style', 'cursor: ' + ((!legend.toggleVisibility && chart.selectionMode === 'None') ? 'auto' : 'pointer'));\n legendTranslateGroup.appendChild(legendSeriesGroup);\n previousLegend = legendOption;\n }\n count++;\n }\n if (this.isPaging) {\n this.renderPagingElements(chart, legendBounds, textOptions, legendGroup);\n }\n }\n chart.svgObject.appendChild(legendGroup);\n };\n /**\n * To find first valid legend text index for chart and accumulation chart\n */\n BaseLegend.prototype.findFirstLegendPosition = function (legendCollection) {\n var count = 0;\n for (var _i = 0, legendCollection_1 = legendCollection; _i < legendCollection_1.length; _i++) {\n var legend = legendCollection_1[_i];\n if (legend.render && legend.text !== '') {\n break;\n }\n count++;\n }\n return count;\n };\n /**\n * To create legend rendering elements for chart and accumulation chart\n */\n BaseLegend.prototype.createLegendElements = function (chart, legendBounds, legendGroup, legend, id) {\n var padding = legend.padding;\n var options = new RectOption(id + '_element', legend.background, legend.border, legend.opacity, legendBounds);\n legendGroup.appendChild(chart.renderer.drawRectangle(options));\n var legendItemsGroup = chart.renderer.createGroup({ id: id + '_collections' });\n legendGroup.appendChild(legendItemsGroup);\n this.legendTranslateGroup = chart.renderer.createGroup({ id: id + '_translate_g' });\n legendItemsGroup.appendChild(this.legendTranslateGroup);\n var clippath = chart.renderer.createClipPath({ id: id + '_clipPath' });\n options.y += padding;\n options.id += '_clipPath_rect';\n options.width = (!this.isChartControl && this.isVertical) ? this.maxWidth - padding : legendBounds.width;\n this.clipRect = chart.renderer.drawRectangle(options);\n clippath.appendChild(this.clipRect);\n chart.svgObject.appendChild(clippath);\n legendItemsGroup.setAttribute('style', 'clip-path:url(#' + clippath.id + ')');\n return this.legendTranslateGroup;\n };\n /**\n * To render legend symbols for chart and accumulation chart\n */\n BaseLegend.prototype.renderSymbol = function (legendOption, group, i) {\n var symbolColor = legendOption.visible ? legendOption.fill : '#D3D3D3';\n var shape = (legendOption.shape === 'SeriesType') ? legendOption.type : legendOption.shape;\n shape = shape === 'Scatter' ? legendOption.markerShape : shape;\n var symbolOption = new PathOption(this.legendID + this.generateId(legendOption, '_shape_', i), symbolColor, 1, symbolColor, 1, '', '');\n group.appendChild(drawSymbol(legendOption.location, shape, new Size(this.legend.shapeWidth, this.legend.shapeHeight), '', symbolOption, 'Click to show or hide the ' + legendOption.text + ' series'));\n if (shape === 'Line' && legendOption.markerVisibility && legendOption.markerShape !== 'Image' ||\n (legendOption.type === 'Doughnut' && this.chart.series[0].legendShape === 'SeriesType')) {\n symbolOption.id = this.legendID + this.generateId(legendOption, '_shape_marker_', i);\n shape = legendOption.type === 'Doughnut' ? 'Circle' : legendOption.markerShape;\n symbolOption.fill = legendOption.type === 'Doughnut' ? '#FFFFFF' : symbolOption.fill;\n group.appendChild(drawSymbol(legendOption.location, shape, new Size(this.legend.shapeWidth / 2, this.legend.shapeHeight / 2), '', symbolOption, 'Click to show or hide the ' + legendOption.text + ' series'));\n }\n };\n /**\n * To render legend text for chart and accumulation chart\n */\n BaseLegend.prototype.renderText = function (chart, legendOption, group, textOptions, i) {\n var legend = chart.legendSettings;\n var hiddenColor = '#D3D3D3';\n textOptions.id = this.legendID + this.generateId(legendOption, '_text_', i);\n var fontcolor = legendOption.visible ? legend.textStyle.color || chart.themeStyle.legendLabel : hiddenColor;\n textOptions.text = legendOption.text;\n textOptions.x = legendOption.location.x + (legend.shapeWidth / 2) + legend.shapePadding;\n textOptions.y = legendOption.location.y + this.maxItemHeight / 4;\n var element = textElement(textOptions, legend.textStyle, fontcolor, group);\n element.setAttribute('aria-label', legend.description || 'Click to show or hide the ' + legendOption.text + ' series');\n };\n /**\n * To render legend paging elements for chart and accumulation chart\n */\n BaseLegend.prototype.renderPagingElements = function (chart, bounds, textOption, legendGroup) {\n var paginggroup = chart.renderer.createGroup({ id: this.legendID + '_navigation' });\n legendGroup.appendChild(paginggroup);\n var grayColor = '#545454';\n var legend = chart.legendSettings; // to solve parameter lint error, legend declaration is here\n var padding = 8; // const padding for paging elements\n if (this.isChartControl || !this.isVertical) {\n this.totalPages = Math.ceil(this.totalPages / Math.max(1, this.rowCount - 1));\n }\n else {\n this.totalPages = Math.ceil(this.totalPages / this.maxColumns);\n }\n var symbolOption = new PathOption(this.legendID + '_pageup', 'transparent', 5, grayColor, 1, '', '');\n var iconSize = this.pageButtonSize;\n paginggroup.setAttribute('style', 'cursor: pointer');\n // Page left arrow drawing calculation started here\n this.clipPathHeight = (this.rowCount - 1) * (this.maxItemHeight + legend.padding);\n this.clipRect.setAttribute('height', this.clipPathHeight.toString());\n var x = bounds.x + iconSize / 2;\n var y = bounds.y + this.clipPathHeight + ((bounds.height - this.clipPathHeight) / 2);\n paginggroup.appendChild(drawSymbol({ x: x, y: y }, 'LeftArrow', new Size(iconSize, iconSize), '', symbolOption, 'LeftArrow'));\n // Page numbering rendering calculation started here\n textOption.x = x + (iconSize / 2) + padding;\n var size = measureText(this.totalPages + '/' + this.totalPages, legend.textStyle);\n textOption.y = y + (size.height / 4);\n textOption.id = this.legendID + '_pagenumber';\n textOption.text = '1/' + this.totalPages;\n var pageTextElement = textElement(textOption, legend.textStyle, legend.textStyle.color, paginggroup);\n // Page right arrow rendering calculation started here\n x = (textOption.x + padding + (iconSize / 2) + size.width);\n symbolOption.id = this.legendID + '_pagedown';\n paginggroup.appendChild(drawSymbol({ x: x, y: y }, 'RightArrow', new Size(iconSize, iconSize), '', symbolOption, 'RightArrow'));\n // placing the navigation buttons and page numbering in legend right corner\n paginggroup.setAttribute('transform', 'translate(' + (bounds.width - (2 * (iconSize + padding) +\n padding + size.width)) + ', ' + 0 + ')');\n this.translatePage(pageTextElement, this.currentPage - 1, this.currentPage);\n };\n /**\n * To translate legend pages for chart and accumulation chart\n */\n BaseLegend.prototype.translatePage = function (pagingText, page, pageNumber) {\n var size = (this.clipPathHeight) * page;\n var translate = 'translate(0,-' + size + ')';\n if (!this.isChartControl && this.isVertical) {\n var pageLength = page * this.maxColumns;\n size = this.pageXCollections[page * this.maxColumns] - this.legendBounds.x;\n size = size < 0 ? 0 : size; // to avoid small pixel variation\n translate = 'translate(-' + size + ',0)';\n }\n this.legendTranslateGroup.setAttribute('transform', translate);\n pagingText.textContent = (pageNumber) + '/' + this.totalPages;\n this.currentPage = pageNumber;\n };\n /**\n * To change legend pages for chart and accumulation chart\n */\n BaseLegend.prototype.changePage = function (event, pageUp) {\n var pageText = document.getElementById(this.legendID + '_pagenumber');\n var page = parseInt(pageText.textContent.split('/')[0], 10);\n if (pageUp && page > 1) {\n this.translatePage(pageText, (page - 2), (page - 1));\n }\n else if (!pageUp && page < this.totalPages) {\n this.translatePage(pageText, page, (page + 1));\n }\n };\n /**\n * To find legend elements id based on chart or accumulation chart\n * @private\n */\n BaseLegend.prototype.generateId = function (option, prefix, count) {\n if (this.isChartControl) {\n return prefix + count;\n }\n else {\n return prefix + option.pointIndex;\n }\n };\n /**\n * To show or hide trimmed text tooltip for legend.\n * @return {void}\n * @private\n */\n BaseLegend.prototype.move = function (event) {\n var _this = this;\n var x = this.chart.mouseX;\n var y = this.chart.mouseY;\n if (event.target.textContent.indexOf('...') > -1) {\n var targetId = event.target.id.split(this.legendID + '_text_');\n if (targetId.length === 2) {\n var index = parseInt(targetId[1], 10);\n var element = this.chart.element;\n if (!isNaN(index)) {\n if (this.chart.isTouch) {\n removeElement(this.chart.element.id + '_EJ2_Legend_Tooltip');\n }\n if (this.isChartControl) {\n showTooltip(this.chart.series[index].name, x, y, element.offsetWidth, element.id + '_EJ2_Legend_Tooltip', getElement(this.chart.element.id + '_Secondary_Element'));\n }\n else {\n showTooltip(this.chart.visibleSeries[0].points[index].x.toString(), x + 10, y + 10, element.offsetWidth, element.id + '_EJ2_Legend_Tooltip', getElement(this.chart.element.id + '_Secondary_Element'));\n }\n }\n }\n }\n else {\n removeElement(this.chart.element.id + '_EJ2_Legend_Tooltip');\n }\n if (this.chart.isTouch) {\n clearTimeout(this.clearTooltip);\n this.clearTooltip = setTimeout(function () { removeElement(_this.chart.element.id + '_EJ2_Legend_Tooltip'); }, 1000);\n }\n };\n return BaseLegend;\n}());\nexport { BaseLegend };\n/**\n * Class for legend options\n * @private\n */\nvar LegendOptions = /** @class */ (function () {\n function LegendOptions(text, fill, shape, visible, type, markerShape, markerVisibility, pointIndex, seriesIndex) {\n this.location = { x: 0, y: 0 };\n this.text = text;\n this.fill = fill;\n this.shape = shape;\n this.visible = visible;\n this.type = type;\n this.markerVisibility = markerVisibility;\n this.markerShape = markerShape;\n this.pointIndex = pointIndex;\n this.seriesIndex = seriesIndex;\n }\n return LegendOptions;\n}());\nexport { LegendOptions };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/// \nimport { Property, Complex } from '@syncfusion/ej2-base';\nimport { Connector } from '../../common/model/base';\nimport { SeriesBase } from '../series/chart-series';\nimport { Rect, firstToLowerCase } from '../../common/utils/helper';\n/**\n * Defines how to represent the market trend using technical indicators\n */\nvar TechnicalIndicator = /** @class */ (function (_super) {\n __extends(TechnicalIndicator, _super);\n function TechnicalIndicator() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** @private */\n _this.clipRect = new Rect(0, 0, 0, 0);\n return _this;\n }\n /** @private */\n TechnicalIndicator.prototype.setDataSource = function (series, chart) {\n if (series) {\n this.xData = series.xData;\n this.yData = series.yData;\n this.points = series.points;\n }\n var type = firstToLowerCase(this.type);\n chart[type + 'IndicatorModule'].initDataSource(this, chart);\n chart.visibleSeriesCount += this.targetSeries.length;\n };\n __decorate([\n Property('Sma')\n ], TechnicalIndicator.prototype, \"type\", void 0);\n __decorate([\n Property(14)\n ], TechnicalIndicator.prototype, \"period\", void 0);\n __decorate([\n Property(14)\n ], TechnicalIndicator.prototype, \"kPeriod\", void 0);\n __decorate([\n Property(3)\n ], TechnicalIndicator.prototype, \"dPeriod\", void 0);\n __decorate([\n Property(80)\n ], TechnicalIndicator.prototype, \"overBought\", void 0);\n __decorate([\n Property(20)\n ], TechnicalIndicator.prototype, \"overSold\", void 0);\n __decorate([\n Property(2)\n ], TechnicalIndicator.prototype, \"standardDeviation\", void 0);\n __decorate([\n Property('Close')\n ], TechnicalIndicator.prototype, \"field\", void 0);\n __decorate([\n Property(12)\n ], TechnicalIndicator.prototype, \"slowPeriod\", void 0);\n __decorate([\n Property(26)\n ], TechnicalIndicator.prototype, \"fastPeriod\", void 0);\n __decorate([\n Property(true)\n ], TechnicalIndicator.prototype, \"showZones\", void 0);\n __decorate([\n Complex({ color: '#ff9933', width: 2 }, Connector)\n ], TechnicalIndicator.prototype, \"macdLine\", void 0);\n __decorate([\n Property('Both')\n ], TechnicalIndicator.prototype, \"macdType\", void 0);\n __decorate([\n Property('#2ecd71')\n ], TechnicalIndicator.prototype, \"macdPositiveColor\", void 0);\n __decorate([\n Property('#e74c3d')\n ], TechnicalIndicator.prototype, \"macdNegativeColor\", void 0);\n __decorate([\n Property('rgba(211,211,211,0.25)')\n ], TechnicalIndicator.prototype, \"bandColor\", void 0);\n __decorate([\n Complex({ color: '#ffb735', width: 1 }, Connector)\n ], TechnicalIndicator.prototype, \"upperLine\", void 0);\n __decorate([\n Complex({ color: '#f2ec2f', width: 1 }, Connector)\n ], TechnicalIndicator.prototype, \"lowerLine\", void 0);\n __decorate([\n Complex({ color: '#f2ec2f', width: 1 }, Connector)\n ], TechnicalIndicator.prototype, \"periodLine\", void 0);\n __decorate([\n Property('')\n ], TechnicalIndicator.prototype, \"seriesName\", void 0);\n return TechnicalIndicator;\n}(SeriesBase));\nexport { TechnicalIndicator };\n","import { print as printWindow, createElement, isNullOrUndefined, Browser, SvgRenderer } from '@syncfusion/ej2-base';\nimport { getElement } from '../utils/helper';\nimport { beforePrint } from '../model/constants';\nimport { PdfPageOrientation, PdfDocument, PdfBitmap } from '@syncfusion/ej2-pdf-export';\nvar ExportUtils = /** @class */ (function () {\n /**\n * Constructor for chart and accumulation annotation\n * @param control\n */\n function ExportUtils(control) {\n this.control = control;\n }\n /**\n * To print the accumulation and chart elements\n * @param elements\n */\n ExportUtils.prototype.print = function (elements) {\n this.printWindow = window.open('', 'print', 'height=' + window.outerHeight + ',width=' + window.outerWidth + ',tabbar=no');\n this.printWindow.moveTo(0, 0);\n this.printWindow.resizeTo(screen.availWidth, screen.availHeight);\n var argsData = {\n cancel: false, htmlContent: this.getHTMLContent(elements), name: beforePrint\n };\n this.control.trigger(beforePrint, argsData);\n if (!argsData.cancel) {\n printWindow(argsData.htmlContent, this.printWindow);\n }\n };\n /**\n * To get the html string of the chart and accumulation\n * @param elements\n * @private\n */\n ExportUtils.prototype.getHTMLContent = function (elements) {\n var div = createElement('div');\n if (elements) {\n if (elements instanceof Array) {\n elements.forEach(function (value) {\n div.appendChild(getElement(value).cloneNode(true));\n });\n }\n else if (elements instanceof Element) {\n div.appendChild(elements.cloneNode(true));\n }\n else {\n div.appendChild(getElement(elements).cloneNode(true));\n }\n }\n else {\n div.appendChild(this.control.element.cloneNode(true));\n }\n return div;\n };\n /**\n * To export the file as image/svg format\n * @param type\n * @param fileName\n */\n ExportUtils.prototype.export = function (type, fileName, orientation, controls, width, height) {\n var _this = this;\n var controlValue = this.getControlsValue(controls);\n width = width ? width : controlValue.width;\n height = height ? height : controlValue.height;\n var element = createElement('canvas', {\n id: 'ej2-canvas',\n attrs: {\n 'width': width.toString(),\n 'height': height.toString()\n }\n });\n var isDownload = !(Browser.userAgent.toString().indexOf('HeadlessChrome') > -1);\n orientation = isNullOrUndefined(orientation) ? PdfPageOrientation.Landscape : orientation;\n var svgData = '' +\n controlValue.svg.outerHTML +\n '';\n var url = window.URL.createObjectURL(new Blob(type === 'SVG' ? [svgData] :\n [(new XMLSerializer()).serializeToString(controlValue.svg)], { type: 'image/svg+xml' }));\n if (type === 'SVG') {\n this.triggerDownload(fileName, type, url, isDownload);\n }\n else {\n var image_1 = new Image();\n var ctx_1 = element.getContext('2d');\n image_1.onload = (function () {\n ctx_1.drawImage(image_1, 0, 0);\n window.URL.revokeObjectURL(url);\n if (type === 'PDF') {\n var document_1 = new PdfDocument();\n var imageString = element.toDataURL('image/jpeg').replace('image/jpeg', 'image/octet-stream');\n document_1.pageSettings.orientation = orientation;\n imageString = imageString.slice(imageString.indexOf(',') + 1);\n document_1.pages.add().graphics.drawImage(new PdfBitmap(imageString), 0, 0, width, height);\n if (isDownload) {\n document_1.save(fileName + '.pdf');\n document_1.destroy();\n }\n }\n else {\n if (window.navigator.msSaveOrOpenBlob) {\n window.navigator.msSaveOrOpenBlob(element.msToBlob(), fileName + '.' + type.toLocaleLowerCase());\n }\n else {\n _this.triggerDownload(fileName, type, element.toDataURL('image/png').replace('image/png', 'image/octet-stream'), isDownload);\n }\n }\n });\n image_1.src = url;\n }\n };\n /**\n * To trigger the download element\n * @param fileName\n * @param type\n * @param url\n */\n ExportUtils.prototype.triggerDownload = function (fileName, type, url, isDownload) {\n createElement('a', {\n attrs: {\n 'download': fileName + '.' + type.toLocaleLowerCase(),\n 'href': url\n }\n }).dispatchEvent(new MouseEvent(isDownload ? 'click' : 'move', {\n view: window,\n bubbles: false,\n cancelable: true\n }));\n };\n /**\n * To get the maximum size value\n * @param controls\n * @param name\n */\n ExportUtils.prototype.getControlsValue = function (controls) {\n var width = 0;\n var height = 0;\n var content = '';\n var svgObject = new SvgRenderer('').createSvg({\n id: 'Svg_Export_Element',\n width: 200, height: 200\n });\n controls.map(function (control) {\n var svg = control.svgObject.cloneNode(true);\n var groupEle = control.renderer.createGroup({\n style: 'transform: translateY(' + height + 'px)'\n });\n groupEle.appendChild(svg);\n width = Math.max(control.availableSize.width, width);\n height += control.availableSize.height;\n content += control.svgObject.outerHTML;\n svgObject.appendChild(groupEle);\n });\n svgObject.setAttribute('width', width + '');\n svgObject.setAttribute('height', height + '');\n return {\n 'width': width,\n 'height': height,\n 'svg': svgObject\n };\n };\n return ExportUtils;\n}());\nexport { ExportUtils };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, NotifyPropertyChanges, Internationalization } from '@syncfusion/ej2-base';\nimport { L10n, createElement } from '@syncfusion/ej2-base';\nimport { ChildProperty } from '@syncfusion/ej2-base';\nimport { remove, extend } from '@syncfusion/ej2-base';\nimport { Browser, Touch } from '@syncfusion/ej2-base';\nimport { Event, EventHandler, Complex, Collection } from '@syncfusion/ej2-base';\nimport { findClipRect, measureText, TextOption, showTooltip, removeElement } from '../common/utils/helper';\nimport { textElement, RectOption, createSvg, firstToLowerCase, titlePositionX } from '../common/utils/helper';\nimport { getSeriesColor, Theme, getThemeColor } from '../common/model/theme';\nimport { Margin, Border, ChartArea, Font, Indexes, TooltipSettings } from '../common/model/base';\nimport { Row, Column, Axis } from './axis/axis';\nimport { CartesianAxisLayoutPanel } from './axis/cartesian-panel';\nimport { Size, Rect } from '../common/utils/helper';\nimport { ChartData } from './utils/get-data';\nimport { Series } from './series/chart-series';\nimport { Data } from '../common/model/data';\nimport { Marker } from './series/marker';\nimport { LegendSettings } from '../common/legend/legend';\nimport { TechnicalIndicator } from './technical-indicators/technical-indicator';\nimport { chartMouseClick, pointClick, pointMove, chartMouseLeave, resized } from '../common/model/constants';\nimport { chartMouseDown, chartMouseMove, chartMouseUp, load } from '../common/model/constants';\nimport { ExportUtils } from '../common/utils/export';\nimport { ChartAnnotationSettings } from './model/chart-base';\nimport { getElement, getTitle } from '../common/utils/helper';\n/**\n * Configures the crosshair in the chart.\n */\nvar CrosshairSettings = /** @class */ (function (_super) {\n __extends(CrosshairSettings, _super);\n function CrosshairSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], CrosshairSettings.prototype, \"enable\", void 0);\n __decorate([\n Complex({ color: null, width: 1 }, Border)\n ], CrosshairSettings.prototype, \"line\", void 0);\n __decorate([\n Property('Both')\n ], CrosshairSettings.prototype, \"lineType\", void 0);\n return CrosshairSettings;\n}(ChildProperty));\nexport { CrosshairSettings };\n/**\n * Configures the zooming behavior for the chart.\n */\nvar ZoomSettings = /** @class */ (function (_super) {\n __extends(ZoomSettings, _super);\n function ZoomSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], ZoomSettings.prototype, \"enableSelectionZooming\", void 0);\n __decorate([\n Property(false)\n ], ZoomSettings.prototype, \"enablePinchZooming\", void 0);\n __decorate([\n Property(false)\n ], ZoomSettings.prototype, \"enableMouseWheelZooming\", void 0);\n __decorate([\n Property(true)\n ], ZoomSettings.prototype, \"enableDeferredZooming\", void 0);\n __decorate([\n Property('XY')\n ], ZoomSettings.prototype, \"mode\", void 0);\n __decorate([\n Property(['Zoom', 'ZoomIn', 'ZoomOut', 'Pan', 'Reset'])\n ], ZoomSettings.prototype, \"toolbarItems\", void 0);\n __decorate([\n Property(false)\n ], ZoomSettings.prototype, \"enablePan\", void 0);\n __decorate([\n Property(false)\n ], ZoomSettings.prototype, \"enableScrollbar\", void 0);\n return ZoomSettings;\n}(ChildProperty));\nexport { ZoomSettings };\n/**\n * Represents the Chart control.\n * ```html\n *
    \n * \n * ```\n */\nvar Chart = /** @class */ (function (_super) {\n __extends(Chart, _super);\n /**\n * Constructor for creating the widget\n * @hidden\n */\n function Chart(options, element) {\n var _this = _super.call(this, options, element) || this;\n /** @private */\n _this.chartAreaType = 'Cartesian';\n _this.chartid = 57723;\n return _this;\n }\n /**\n * Initialize the event handler.\n */\n Chart.prototype.preRender = function () {\n this.unWireEvents();\n this.initPrivateVariable();\n this.setCulture();\n this.wireEvents();\n };\n Chart.prototype.initPrivateVariable = function () {\n this.animateSeries = true;\n this.delayRedraw = false;\n this.horizontalAxes = [];\n this.verticalAxes = [];\n this.refreshAxis();\n this.refreshDefinition(this.rows);\n this.refreshDefinition(this.columns);\n if (this.tooltipModule) {\n this.tooltipModule.previousPoints = [];\n }\n if (this.element.id === '') {\n var collection = document.getElementsByClassName('e-chart').length;\n this.element.id = 'chart_' + this.chartid + '_' + collection;\n }\n };\n /**\n * To Initialize the control rendering.\n */\n Chart.prototype.render = function () {\n this.trigger(load, { chart: this });\n this.createChartSvg();\n this.setTheme();\n this.markerRender = new Marker(this);\n this.calculateAreaType();\n this.calculateVisibleSeries();\n this.initTechnicalIndicators();\n this.initTrendLines();\n this.calculateVisibleAxis();\n this.processData();\n };\n /**\n * Gets the localized label by locale keyword.\n * @param {string} key\n * @return {string}\n */\n Chart.prototype.getLocalizedLabel = function (key) {\n return this.localeObject.getConstant(key);\n };\n /**\n * Refresh the chart bounds.\n * @private\n */\n Chart.prototype.refreshBound = function () {\n if (this.legendModule && this.legendSettings.visible) {\n this.legendModule.getLegendOptions(this.visibleSeries, this);\n }\n var isCalculateStacking = false;\n var series;\n for (var i = 0, len = this.visibleSeries.length; i < len; i++) {\n series = this.visibleSeries[i];\n series.position = series.rectCount = undefined;\n if (((series.type.indexOf('Stacking') !== -1) || (series.drawType.indexOf('Stacking') !== -1\n && this.chartAreaType === 'PolarRadar')) && !isCalculateStacking) {\n series.calculateStackedValue(series.type.indexOf('100') > -1, this);\n isCalculateStacking = true;\n }\n }\n this.calculateBounds();\n this.renderElements();\n };\n Chart.prototype.renderElements = function () {\n this.renderBorder();\n this.renderTitle();\n this.renderAreaBorder();\n var axisElement = this.renderAxes();\n this.renderSeriesElements(axisElement);\n this.renderLegend();\n this.applyZoomkit();\n this.performSelection();\n this.setSecondaryElementPosition();\n this.renderAnnotation();\n };\n /**\n * To render the legend\n */\n Chart.prototype.renderAxes = function () {\n this.yAxisElements = this.renderer.createGroup({ id: this.element.id + 'yAxisCollection' });\n var axisElement;\n if (this.rows.length > 0 && this.columns.length > 0) {\n axisElement = this.chartAxisLayoutPanel.renderAxes();\n }\n if (this.stripLineModule) {\n this.stripLineModule.renderStripLine(this, 'Behind', this.axisCollections);\n }\n return axisElement;\n };\n /**\n * To render the legend\n */\n Chart.prototype.renderLegend = function () {\n if (this.legendModule && this.legendModule.legendCollections.length) {\n this.legendModule.renderLegend(this, this.legendSettings, this.legendModule.legendBounds);\n }\n this.element.appendChild(this.svgObject);\n };\n /**\n * To set the left and top position for data label template for center aligned chart\n */\n Chart.prototype.setSecondaryElementPosition = function () {\n var element = getElement(this.element.id + '_Secondary_Element');\n if (!element) {\n return;\n }\n var rect = this.element.getBoundingClientRect();\n var svgRect = getElement(this.element.id + '_svg').getBoundingClientRect();\n element.style.left = Math.max(svgRect.left - rect.left, 0) + 'px';\n element.style.top = Math.max(svgRect.top - rect.top, 0) + 'px';\n };\n Chart.prototype.initializeModuleElements = function () {\n this.dataLabelCollections = [];\n this.seriesElements = this.renderer.createGroup({ id: this.element.id + 'SeriesCollection' });\n if (this.indicators.length) {\n this.indicatorElements = this.renderer.createGroup({ id: this.element.id + 'IndicatorCollection' });\n }\n if (this.hasTrendlines()) {\n this.trendLineElements = this.renderer.createGroup({ id: this.element.id + 'TrendLineCollection' });\n }\n this.dataLabelElements = this.renderer.createGroup({ id: this.element.id + 'DataLabelCollection' });\n };\n Chart.prototype.hasTrendlines = function () {\n var isTrendline;\n for (var _i = 0, _a = this.series; _i < _a.length; _i++) {\n var series = _a[_i];\n isTrendline = series.trendlines.length ? true : false;\n if (isTrendline) {\n break;\n }\n }\n return isTrendline;\n };\n Chart.prototype.renderSeriesElements = function (axisElement) {\n // Initialize the series elements values\n this.initializeModuleElements();\n var tooltipDiv = document.createElement('div');\n tooltipDiv.id = this.element.id + '_Secondary_Element';\n tooltipDiv.setAttribute('style', 'position: relative');\n this.element.appendChild(tooltipDiv);\n // For userInteraction\n if (this.tooltip.enable) {\n this.svgObject.appendChild(this.renderer.createGroup({ id: this.element.id + '_UserInteraction', style: 'pointer-events:none;' }));\n }\n if (this.rows.length > 0 && this.columns.length > 0) {\n this.initializeIndicator();\n this.initializeTrendLine();\n this.renderSeries();\n this.appendElementsAfterSeries(axisElement);\n }\n };\n Chart.prototype.renderSeries = function () {\n for (var _i = 0, _a = this.visibleSeries; _i < _a.length; _i++) {\n var item = _a[_i];\n if (item.visible) {\n findClipRect(item);\n item.renderSeries(this, item.index);\n }\n }\n var clipRect = this.renderer.drawClipPath({\n 'id': this.element.id + '_ChartAreaClipRect_',\n 'x': this.chartAxisLayoutPanel.seriesClipRect.x,\n 'y': this.chartAxisLayoutPanel.seriesClipRect.y,\n 'width': this.chartAxisLayoutPanel.seriesClipRect.width,\n 'height': this.chartAxisLayoutPanel.seriesClipRect.height,\n 'fill': 'transparent',\n 'stroke-width': 1,\n 'stroke': 'Gray'\n });\n this.seriesElements.appendChild(clipRect);\n this.svgObject.appendChild(this.seriesElements);\n };\n Chart.prototype.initializeIndicator = function () {\n for (var _i = 0, _a = this.indicators; _i < _a.length; _i++) {\n var indicator = _a[_i];\n if (this[firstToLowerCase(indicator.type) + 'IndicatorModule']) {\n this[firstToLowerCase(indicator.type) + 'IndicatorModule'].createIndicatorElements(this, indicator, indicator.index);\n }\n }\n if (this.indicatorElements) {\n this.svgObject.appendChild(this.indicatorElements);\n }\n };\n Chart.prototype.initializeTrendLine = function () {\n for (var _i = 0, _a = this.visibleSeries; _i < _a.length; _i++) {\n var series = _a[_i];\n if (series.trendlines.length) {\n this.trendLineModule.getTrendLineElements(series, this);\n }\n }\n if (this.trendLineElements) {\n this.svgObject.appendChild(this.trendLineElements);\n }\n };\n Chart.prototype.appendElementsAfterSeries = function (axisElement) {\n if (this.chartAreaType === 'PolarRadar') {\n this.svgObject.appendChild(this.yAxisElements);\n }\n this.svgObject.appendChild(axisElement);\n if (this.zoomModule && this.zoomSettings.enableScrollbar && this.scrollElement.childElementCount) {\n getElement(this.element.id + '_Secondary_Element').appendChild(this.scrollElement);\n }\n if (this.stripLineModule) {\n this.stripLineModule.renderStripLine(this, 'Over', this.axisCollections);\n }\n if (!this.tooltip.enable) {\n this.svgObject.appendChild(this.renderer.createGroup({ id: this.element.id + '_UserInteraction', style: 'pointer-events:none;' }));\n }\n };\n Chart.prototype.applyZoomkit = function () {\n if (this.zoomModule && this.zoomModule.isZoomed && (!this.zoomSettings.enablePan || this.zoomModule.performedUI)) {\n this.zoomModule.applyZoomToolkit(this, this.axisCollections);\n }\n };\n Chart.prototype.renderAnnotation = function () {\n if (this.annotationModule) {\n this.annotationModule.renderAnnotations(getElement(this.element.id + '_Secondary_Element'));\n }\n };\n Chart.prototype.performSelection = function () {\n var selectedDataIndexes = [];\n if (this.selectionModule) {\n selectedDataIndexes = extend([], this.selectionModule.selectedDataIndexes, null, true);\n this.selectionModule.invokeSelection(this);\n }\n if (selectedDataIndexes.length > 0) {\n this.selectionModule.selectedDataIndexes = selectedDataIndexes;\n this.selectionModule.redrawSelection(this, this.selectionMode);\n }\n };\n Chart.prototype.processData = function (render) {\n if (render === void 0) { render = true; }\n var series;\n this.visibleSeriesCount = 0;\n var check = true;\n for (var _i = 0, _a = this.visibleSeries; _i < _a.length; _i++) {\n var series_1 = _a[_i];\n if (!series_1.visible && !this.legendSettings.visible) {\n this.visibleSeriesCount++;\n continue;\n }\n if (series_1.category !== 'Indicator' && series_1.category !== 'TrendLine') {\n this.initializeDataModule(series_1);\n }\n }\n for (var _b = 0, _c = this.indicators; _b < _c.length; _b++) {\n var indicator = _c[_b];\n if (indicator.dataSource) {\n var techIndicator = indicator;\n this.initializeDataModule(techIndicator);\n check = false;\n }\n }\n if (render && (!this.visibleSeries.length || this.visibleSeriesCount === this.visibleSeries.length && check)) {\n this.refreshBound();\n this.trigger('loaded', { chart: this });\n }\n };\n Chart.prototype.initializeDataModule = function (series) {\n series.xData = [];\n series.yData = [];\n series.dataModule = new Data(series.dataSource, series.query);\n series.points = [];\n series.refreshDataManager(this);\n };\n Chart.prototype.calculateBounds = function () {\n var margin = this.margin;\n // Title Height;\n var titleHeight = 0;\n var padding = 15;\n var left = margin.left;\n var width = this.availableSize.width - left - margin.right - this.border.width;\n this.titleCollection = [];\n if (this.title) {\n this.titleCollection = getTitle(this.title, this.titleStyle, width);\n titleHeight = (measureText(this.title, this.titleStyle).height * this.titleCollection.length) + padding;\n }\n var top = margin.top + titleHeight + this.chartArea.border.width / 2;\n var height = this.availableSize.height - top - this.border.width - margin.bottom;\n this.initialClipRect = new Rect(left, top, width, height);\n if (this.legendModule) {\n this.legendModule.calculateLegendBounds(this.initialClipRect, this.availableSize);\n }\n this.chartAxisLayoutPanel.measureAxis(this.initialClipRect);\n };\n /**\n * Handles the print method for chart control.\n */\n Chart.prototype.print = function (id) {\n var exportChart = new ExportUtils(this);\n exportChart.print(id);\n };\n /**\n * Handles the export method for chart control.\n * @param type\n * @param fileName\n */\n Chart.prototype.export = function (type, fileName, orientation, controls, width, height) {\n var exportChart = new ExportUtils(this);\n controls = controls ? controls : [this];\n exportChart.export(type, fileName, orientation, controls, width, height);\n };\n /**\n * Defines the trendline initialization\n */\n Chart.prototype.initTrendLines = function () {\n for (var _i = 0, _a = this.visibleSeries; _i < _a.length; _i++) {\n var series = _a[_i];\n var trendIndex = 0;\n for (var _b = 0, _c = series.trendlines; _b < _c.length; _b++) {\n var trendline = _c[_b];\n var trendLine = trendline;\n var type = firstToLowerCase(trendLine.type);\n if (this.trendLineModule) {\n trendLine.index = trendIndex;\n trendLine.sourceIndex = series.index;\n this.trendLineModule.initSeriesCollection(trendLine, this);\n if (trendLine.targetSeries) {\n trendLine.targetSeries.xAxisName = series.xAxisName;\n trendLine.targetSeries.yAxisName = series.yAxisName;\n this.visibleSeries.push(trendLine.targetSeries);\n }\n }\n trendIndex++;\n }\n }\n };\n Chart.prototype.calculateAreaType = function () {\n var series = this.series[0];\n if (series) {\n this.requireInvertedAxis = ((series.type.indexOf('Bar') !== -1) && !this.isTransposed) ||\n ((series.type.indexOf('Bar') === -1) && this.isTransposed && this.chartAreaType !== 'PolarRadar');\n }\n this.chartAxisLayoutPanel = this.chartAreaType === 'PolarRadar' ? (this.polarSeriesModule || this.radarSeriesModule)\n : new CartesianAxisLayoutPanel(this);\n };\n Chart.prototype.calculateVisibleAxis = function () {\n var axis;\n var series;\n var axes = [this.primaryXAxis, this.primaryYAxis];\n axes = this.chartAreaType === 'Cartesian' ? axes.concat(this.axes) : axes;\n this.axisCollections = [];\n if (this.zoomModule) {\n this.zoomModule.isPanning = this.zoomModule.isAxisZoomed(axes) && this.zoomSettings.enablePan;\n this.svgObject.setAttribute('cursor', this.zoomModule.isPanning ? 'pointer' : 'auto');\n if (this.scrollBarModule) {\n this.scrollBarModule.axes = axes;\n }\n }\n for (var i = 0, len = axes.length; i < len; i++) {\n axis = axes[i];\n axis.series = [];\n axis.labels = [];\n for (var _i = 0, _a = this.visibleSeries; _i < _a.length; _i++) {\n var series_2 = _a[_i];\n this.initAxis(series_2, axis, true);\n }\n for (var _b = 0, _c = this.indicators; _b < _c.length; _b++) {\n var indicator = _c[_b];\n this.initAxis(indicator, axis, false);\n }\n if (this.scrollBarModule) {\n this.scrollBarModule.injectTo(axis, this);\n }\n if (axis.orientation != null) {\n this.axisCollections.push(axis);\n }\n }\n if (this.rows.length > 0 && this.columns.length > 0) {\n this.chartAxisLayoutPanel.measure();\n }\n };\n Chart.prototype.initAxis = function (series, axis, isSeries) {\n if (series.xAxisName === axis.name || (series.xAxisName == null && axis.name === 'primaryXAxis')) {\n axis.orientation = this.requireInvertedAxis ? 'Vertical' : 'Horizontal';\n series.xAxis = axis;\n if (isSeries) {\n axis.series.push(series);\n }\n }\n else if (series.yAxisName === axis.name || (series.yAxisName == null && axis.name === 'primaryYAxis')) {\n axis.orientation = this.requireInvertedAxis ? 'Horizontal' : 'Vertical';\n series.yAxis = axis;\n if (isSeries) {\n axis.series.push(series);\n }\n }\n };\n Chart.prototype.initTechnicalIndicators = function () {\n var i = 0;\n for (var _i = 0, _a = this.indicators; _i < _a.length; _i++) {\n var indicator = _a[_i];\n var techIndicator = indicator;\n var type = firstToLowerCase(techIndicator.type);\n if (this[type + 'IndicatorModule']) {\n techIndicator.index = i;\n this[type + 'IndicatorModule'].initSeriesCollection(techIndicator, this);\n for (var _b = 0, _c = techIndicator.targetSeries; _b < _c.length; _b++) {\n var targetSeries = _c[_b];\n if (indicator.seriesName || indicator.dataSource) {\n this.visibleSeries.push(targetSeries);\n }\n }\n }\n i++;\n }\n };\n /** @private */\n Chart.prototype.refreshTechnicalIndicator = function (series) {\n if (this.indicators.length) {\n var targetIndicator = null;\n if (series instanceof Series && series.category !== 'Indicator') {\n for (var _i = 0, _a = this.indicators; _i < _a.length; _i++) {\n var indicator = _a[_i];\n if (indicator.seriesName === series.name && !indicator.dataSource) {\n targetIndicator = indicator;\n targetIndicator.setDataSource(series, this);\n }\n }\n }\n else if (series instanceof TechnicalIndicator) {\n targetIndicator = series;\n targetIndicator.setDataSource(series instanceof Series ? series : null, this);\n }\n }\n };\n Chart.prototype.calculateVisibleSeries = function () {\n var series;\n this.visibleSeries = [];\n var colors = this.palettes.length ? this.palettes : getSeriesColor(this.theme);\n var count = colors.length;\n for (var i = 0, len = this.series.length; i < len; i++) {\n series = this.series[i];\n series.index = i;\n series.interior = series.fill || colors[i % count];\n switch (series.type) {\n case 'Bar':\n case 'StackingBar':\n case 'StackingBar100':\n if (this.series[0].type.indexOf('Bar') === -1) {\n continue;\n }\n break;\n case 'Polar':\n case 'Radar':\n if (this.chartAreaType !== 'PolarRadar') {\n continue;\n }\n if (this.chartAreaType === 'PolarRadar' && ((series.xAxisName === null && series.yAxisName !== null) ||\n (series.xAxisName !== null && series.yAxisName === null) ||\n (series.xAxisName !== null && series.yAxisName !== null))) {\n continue;\n }\n break;\n default:\n if (this.chartAreaType === 'PolarRadar' || this.series[0].type.indexOf('Bar') > -1) {\n continue;\n }\n break;\n }\n this.visibleSeries.push(series);\n this.series[i] = series;\n }\n };\n Chart.prototype.renderTitle = function () {\n if (this.title) {\n var anchor = this.titleStyle.textAlignment === 'Near' ? 'start' :\n this.titleStyle.textAlignment === 'Far' ? 'end' : 'middle';\n this.elementSize = measureText(this.title, this.titleStyle);\n var options = new TextOption(this.element.id + '_ChartTitle', titlePositionX(this.availableSize, this.margin.left, this.margin.right, this.titleStyle), this.margin.top + ((this.elementSize.height) * 3 / 4), anchor, this.titleCollection, '', 'auto');\n var element = textElement(options, this.titleStyle, this.titleStyle.color || this.themeStyle.chartTitle, this.svgObject);\n element.setAttribute('aria-label', this.description || this.title);\n element.setAttribute('tabindex', this.tabIndex.toString());\n }\n };\n Chart.prototype.renderBorder = function () {\n var width = this.border.width;\n var rect = new RectOption(this.element.id + '_ChartBorder', this.background || this.themeStyle.background, this.border, 1, new Rect(width / 2, width / 2, this.availableSize.width - width, this.availableSize.height - width));\n this.htmlObject = this.renderer.drawRectangle(rect);\n this.svgObject.appendChild(this.htmlObject);\n };\n Chart.prototype.renderAreaBorder = function () {\n if (this.chartAreaType === 'PolarRadar') {\n return null;\n }\n else {\n var rect = new RectOption(this.element.id + '_ChartAreaBorder', this.chartArea.background, { width: this.chartArea.border.width, color: this.chartArea.border.color || this.themeStyle.areaBorder }, this.chartArea.opacity, this.chartAxisLayoutPanel.seriesClipRect);\n this.htmlObject = this.renderer.drawRectangle(rect);\n this.svgObject.appendChild(this.htmlObject);\n }\n };\n /**\n * To add series for the chart\n * @param {SeriesModel[]} seriesCollection - Defines the series collection to be added in chart.\n * @return {void}.\n */\n Chart.prototype.addSeries = function (seriesCollection) {\n for (var _i = 0, seriesCollection_1 = seriesCollection; _i < seriesCollection_1.length; _i++) {\n var series = seriesCollection_1[_i];\n series = new Series(this, 'series', series);\n this.series.push(series);\n }\n this.refresh();\n };\n /**\n * To Remove series for the chart\n * @param index - Defines the series index to be remove in chart series\n * @return {void}\n */\n Chart.prototype.removeSeries = function (index) {\n this.series.splice(index, 1);\n this.refresh();\n };\n /**\n * To destroy the widget\n * @method destroy\n * @return {void}.\n * @member of Chart\n */\n Chart.prototype.destroy = function () {\n if (this.scrollBarModule) {\n this.scrollBarModule.destroy();\n }\n this.unWireEvents();\n _super.prototype.destroy.call(this);\n this.element.classList.remove('e-chart');\n };\n /**\n * Get component name\n */\n Chart.prototype.getModuleName = function () {\n return 'chart';\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @private\n */\n Chart.prototype.getPersistData = function () {\n var keyEntity = ['loaded', 'animationComplete'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Method to create SVG element.\n */\n Chart.prototype.createChartSvg = function () {\n this.removeSvg();\n createSvg(this);\n };\n /**\n * Method to bind events for chart\n */\n Chart.prototype.unWireEvents = function () {\n /*! Find the Events type */\n var startEvent = Browser.touchStartEvent;\n var moveEvent = Browser.touchMoveEvent;\n var stopEvent = Browser.touchEndEvent;\n var cancelEvent = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n /*! UnBind the Event handler */\n EventHandler.remove(this.element, startEvent, this.chartOnMouseDown);\n EventHandler.remove(this.element, moveEvent, this.mouseMove);\n EventHandler.remove(this.element, stopEvent, this.mouseEnd);\n EventHandler.remove(this.element, 'click', this.chartOnMouseClick);\n EventHandler.remove(this.element, 'contextmenu', this.chartRightClick);\n EventHandler.remove(this.element, cancelEvent, this.mouseLeave);\n window.removeEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.chartResize);\n };\n Chart.prototype.wireEvents = function () {\n /*! Find the Events type */\n var cancelEvent = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n /*! Bind the Event handler */\n EventHandler.add(this.element, Browser.touchStartEvent, this.chartOnMouseDown, this);\n EventHandler.add(this.element, Browser.touchMoveEvent, this.mouseMove, this);\n EventHandler.add(this.element, Browser.touchEndEvent, this.mouseEnd, this);\n EventHandler.add(this.element, 'click', this.chartOnMouseClick, this);\n EventHandler.add(this.element, 'contextmenu', this.chartRightClick, this);\n EventHandler.add(this.element, cancelEvent, this.mouseLeave, this);\n window.addEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.chartResize.bind(this));\n this.longPress = this.longPress.bind(this);\n new Touch(this.element, { tapHold: this.longPress, tapHoldThreshold: 500 });\n /*! Apply the style for chart */\n this.setStyle(this.element);\n };\n Chart.prototype.chartRightClick = function (event) {\n if (this.crosshair.enable && this.crosshairModule &&\n (event.buttons === 2 || event.which === 0 || event.pointerType === 'touch')) {\n event.preventDefault();\n event.stopPropagation();\n return false;\n }\n return true;\n };\n Chart.prototype.setStyle = function (element) {\n var zooming = this.zoomSettings;\n var disableScroll = zooming.enableSelectionZooming || zooming.enablePinchZooming ||\n this.selectionMode !== 'None' || this.crosshair.enable;\n element.style.touchAction = disableScroll ? 'none' : 'element';\n element.style.msTouchAction = disableScroll ? 'none' : 'element';\n element.style.msContentZooming = 'none';\n element.style.msUserSelect = 'none';\n element.style.webkitUserSelect = 'none';\n element.style.position = 'relative';\n element.style.display = 'block';\n };\n /**\n * Finds the orientation.\n * @return {boolean}\n * @private\n */\n Chart.prototype.isOrientation = function () {\n return ('orientation' in window && 'onorientationchange' in window);\n };\n /**\n * Handles the long press on chart.\n * @return {boolean}\n * @private\n */\n Chart.prototype.longPress = function (e) {\n this.mouseX = (e && e.originalEvent.changedTouches) ? (e.originalEvent.changedTouches[0].clientX) : 0;\n this.mouseY = (e && e.originalEvent.changedTouches) ? (e.originalEvent.changedTouches[0].clientY) : 0;\n this.startMove = true;\n this.setMouseXY(this.mouseX, this.mouseY);\n this.notify('tapHold', e);\n return false;\n };\n /**\n * To find mouse x, y for aligned chart element svg position\n */\n Chart.prototype.setMouseXY = function (pageX, pageY) {\n var svgRect = getElement(this.element.id + '_svg').getBoundingClientRect();\n var rect = this.element.getBoundingClientRect();\n this.mouseY = (pageY - rect.top) - Math.max(svgRect.top - rect.top, 0);\n this.mouseX = (pageX - rect.left) - Math.max(svgRect.left - rect.left, 0);\n };\n /**\n * Handles the chart resize.\n * @return {boolean}\n * @private\n */\n Chart.prototype.chartResize = function (e) {\n var _this = this;\n this.animateSeries = false;\n var arg = {\n chart: this,\n name: resized,\n currentSize: new Size(0, 0),\n previousSize: new Size(this.availableSize.width, this.availableSize.height),\n };\n if (this.resizeTo) {\n clearTimeout(this.resizeTo);\n }\n this.resizeTo = setTimeout(function () {\n if (_this.isDestroyed) {\n clearTimeout(_this.resizeTo);\n return;\n }\n _this.createChartSvg();\n arg.currentSize = _this.availableSize;\n _this.trigger(resized, arg);\n _this.refreshAxis();\n _this.refreshBound();\n _this.trigger('loaded', { chart: _this });\n }, 500);\n return false;\n };\n /**\n * Handles the mouse move.\n * @return {boolean}\n * @private\n */\n Chart.prototype.mouseMove = function (e) {\n var pageX;\n var pageY;\n var touchArg;\n if (e.type === 'touchmove') {\n this.isTouch = true;\n touchArg = e;\n pageX = touchArg.changedTouches[0].clientX;\n pageY = touchArg.changedTouches[0].clientY;\n }\n else {\n this.isTouch = e.pointerType === 'touch' || e.pointerType === '2' || this.isTouch;\n pageX = e.clientX;\n pageY = e.clientY;\n }\n this.setMouseXY(pageX, pageY);\n this.chartOnMouseMove(e);\n return false;\n };\n /**\n * Handles the mouse leave.\n * @return {boolean}\n * @private\n */\n Chart.prototype.mouseLeave = function (e) {\n var pageX;\n var pageY;\n var touchArg;\n if (e.type === 'touchleave') {\n this.isTouch = true;\n touchArg = e;\n pageX = touchArg.changedTouches[0].clientX;\n pageY = touchArg.changedTouches[0].clientY;\n }\n else {\n this.isTouch = e.pointerType === 'touch' || e.pointerType === '2';\n pageX = e.clientX;\n pageY = e.clientY;\n }\n this.setMouseXY(pageX, pageY);\n this.chartOnMouseLeave(e);\n return false;\n };\n /**\n * Handles the mouse leave on chart.\n * @return {boolean}\n * @private\n */\n Chart.prototype.chartOnMouseLeave = function (e) {\n var element = e.target;\n var cancelEvent = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n this.trigger(chartMouseLeave, { target: element.id, x: this.mouseX, y: this.mouseY });\n this.isChartDrag = false;\n this.notify(cancelEvent, e);\n return false;\n };\n /**\n * Handles the mouse click on chart.\n * @return {boolean}\n * @private\n */\n Chart.prototype.chartOnMouseClick = function (e) {\n var element = e.target;\n this.trigger(chartMouseClick, { target: element.id, x: this.mouseX, y: this.mouseY });\n if (this.pointClick) {\n this.triggerPointEvent(pointClick);\n }\n this.notify('click', e);\n return false;\n };\n Chart.prototype.triggerPointEvent = function (event) {\n var data = new ChartData(this);\n var pointData = data.getData();\n if (pointData.series && pointData.point) {\n this.trigger(event, {\n series: pointData.series,\n point: pointData.point,\n seriesIndex: pointData.series.index, pointIndex: pointData.point.index,\n x: this.mouseX, y: this.mouseY\n });\n }\n };\n /**\n * Handles the mouse move on chart.\n * @return {boolean}\n * @private\n */\n Chart.prototype.chartOnMouseMove = function (e) {\n var element = e.target;\n this.trigger(chartMouseMove, { target: element.id, x: this.mouseX, y: this.mouseY });\n if (this.pointMove) {\n this.triggerPointEvent(pointMove);\n }\n // Tooltip for chart series.\n if (!this.isTouch) {\n this.titleTooltip(e, this.mouseX, this.mouseY);\n this.axisTooltip(e, this.mouseX, this.mouseY);\n }\n this.notify(Browser.touchMoveEvent, e);\n this.isTouch = false;\n return false;\n };\n Chart.prototype.titleTooltip = function (event, x, y, isTouch) {\n var targetId = event.target.id;\n if ((targetId === (this.element.id + '_ChartTitle')) && (event.target.textContent.indexOf('...') > -1)) {\n showTooltip(this.title, x, y, this.element.offsetWidth, this.element.id + '_EJ2_Title_Tooltip', getElement(this.element.id + '_Secondary_Element'), isTouch);\n }\n else {\n removeElement(this.element.id + '_EJ2_Title_Tooltip');\n }\n };\n Chart.prototype.axisTooltip = function (event, x, y, isTouch) {\n var targetId = event.target.id;\n if (((targetId.indexOf('AxisLabel') > -1) || targetId.indexOf('Axis_MultiLevelLabel') > -1) &&\n (event.target.textContent.indexOf('...') > -1)) {\n showTooltip(this.findAxisLabel(targetId), x, y, this.element.offsetWidth, this.element.id + '_EJ2_AxisLabel_Tooltip', getElement(this.element.id + '_Secondary_Element'), isTouch);\n }\n else {\n removeElement(this.element.id + '_EJ2_AxisLabel_Tooltip');\n }\n };\n Chart.prototype.findAxisLabel = function (text) {\n var texts;\n if (text.indexOf('AxisLabel') > -1) {\n texts = ((text.replace(this.element.id, '')).replace('AxisLabel_', '')).split('_');\n return this.axisCollections[parseInt(texts[0], 10)].visibleLabels[parseInt(texts[1], 10)].originalText;\n }\n else {\n texts = ((text.replace(this.element.id, '')).replace('Axis_MultiLevelLabel_Level_', '').replace('Text_', '')).split('_');\n return (this.axisCollections[parseInt(texts[0], 10)].multiLevelLabels[parseInt(texts[1], 10)]\n .categories[parseInt(texts[2], 10)].text);\n }\n };\n /**\n * Handles the mouse down on chart.\n * @return {boolean}\n * @private\n */\n Chart.prototype.chartOnMouseDown = function (e) {\n var pageX;\n var pageY;\n var target;\n var touchArg;\n var offset = Browser.isDevice ? 20 : 30;\n var rect = this.element.getBoundingClientRect();\n var element = e.target;\n this.trigger(chartMouseDown, { target: element.id, x: this.mouseX, y: this.mouseY });\n if (e.type === 'touchstart') {\n this.isTouch = true;\n touchArg = e;\n pageX = touchArg.changedTouches[0].clientX;\n pageY = touchArg.changedTouches[0].clientY;\n target = touchArg.target;\n }\n else {\n this.isTouch = e.pointerType === 'touch';\n pageX = e.clientX;\n pageY = e.clientY;\n target = e.target;\n }\n var svgRect = getElement(this.element.id + '_svg').getBoundingClientRect();\n this.mouseDownX = this.previousMouseMoveX = (pageX - rect.left) - Math.max(svgRect.left - rect.left, 0);\n this.mouseDownY = this.previousMouseMoveY = (pageY - rect.top) - Math.max(svgRect.top - rect.top, 0);\n if (this.isTouch) {\n this.isDoubleTap = (new Date().getTime() < this.threshold && target.id.indexOf(this.element.id + '_Zooming_') === -1 &&\n (this.mouseDownX - offset >= this.mouseX || this.mouseDownX + offset >= this.mouseX) &&\n (this.mouseDownY - offset >= this.mouseY || this.mouseDownY + offset >= this.mouseY) &&\n (this.mouseX - offset >= this.mouseDownX || this.mouseX + offset >= this.mouseDownX) &&\n (this.mouseY - offset >= this.mouseDownY || this.mouseY + offset >= this.mouseDownY));\n }\n this.notify(Browser.touchStartEvent, e);\n return false;\n };\n /**\n * Handles the mouse up.\n * @return {boolean}\n * @private\n */\n Chart.prototype.mouseEnd = function (e) {\n var pageY;\n var pageX;\n var touchArg;\n if (e.type === 'touchend') {\n touchArg = e;\n pageX = touchArg.changedTouches[0].clientX;\n this.isTouch = true;\n pageY = touchArg.changedTouches[0].clientY;\n }\n else {\n pageY = e.clientY;\n pageX = e.clientX;\n this.isTouch = e.pointerType === 'touch' || e.pointerType === '2';\n }\n this.setMouseXY(pageX, pageY);\n this.chartOnMouseUp(e);\n return false;\n };\n /**\n * Handles the mouse up.\n * @return {boolean}\n * @private\n */\n Chart.prototype.chartOnMouseUp = function (e) {\n var element = e.target;\n this.trigger(chartMouseUp, { target: element.id, x: this.mouseX, y: this.mouseY });\n this.isChartDrag = false;\n if (this.isTouch) {\n this.titleTooltip(e, this.mouseX, this.mouseY, this.isTouch);\n this.axisTooltip(e, this.mouseX, this.mouseY, this.isTouch);\n this.threshold = new Date().getTime() + 300;\n }\n this.seriesElements.removeAttribute('clip-path');\n this.notify(Browser.touchEndEvent, e);\n return false;\n };\n /**\n * Method to set culture for chart\n */\n Chart.prototype.setCulture = function () {\n this.intl = new Internationalization();\n this.setLocaleConstants();\n this.localeObject = new L10n(this.getModuleName(), this.defaultLocalConstants, this.locale);\n };\n /**\n * Method to set the annotation content dynamically for chart.\n */\n Chart.prototype.setAnnotationValue = function (annotationIndex, content) {\n var parentNode = getElement(this.element.id + '_Annotation_Collections');\n var annotation = this.annotations[annotationIndex];\n var element;\n if (content !== null) {\n annotation.content = content;\n if (parentNode) {\n removeElement(this.element.id + '_Annotation_' + annotationIndex);\n element = createElement('div');\n this.annotationModule.processAnnotation(annotation, annotationIndex, element);\n parentNode.appendChild(element.children[0]);\n }\n else {\n this.annotationModule.renderAnnotations(getElement(this.element.id + '_Secondary_Element'));\n }\n }\n };\n /**\n * Method to set locale constants\n */\n Chart.prototype.setLocaleConstants = function () {\n this.defaultLocalConstants = {\n ZoomIn: 'ZoomIn',\n Zoom: 'Zoom',\n ZoomOut: 'ZoomOut',\n Pan: 'Pan',\n Reset: 'Reset',\n ResetZoom: 'Reset Zoom'\n };\n };\n /**\n * Theming for chart\n */\n Chart.prototype.setTheme = function () {\n /*! Set theme */\n this.themeStyle = getThemeColor(this.theme);\n };\n /**\n * To provide the array of modules needed for control rendering\n * @return {ModuleDeclaration[]}\n * @private\n */\n Chart.prototype.requiredModules = function () {\n var _this = this;\n var modules = [];\n var series = this.series;\n var enableAnnotation = false;\n var moduleName;\n var errorBarVisible = false;\n var dataLabelEnable = false;\n var zooming = this.zoomSettings;\n this.chartAreaType = (series.length > 0 && (series[0].type === 'Polar' || series[0].type === 'Radar')) ? 'PolarRadar' : 'Cartesian';\n if (this.tooltip.enable) {\n modules.push({\n member: 'Tooltip',\n args: [this]\n });\n }\n series.map(function (value) {\n _this.isLegend = (_this.legendSettings.visible && ((value.name !== '') || !!_this.isLegend));\n moduleName = value.type.indexOf('100') !== -1 ? value.type.replace('100', '') + 'Series' : value.type + 'Series';\n errorBarVisible = value.errorBar.visible || errorBarVisible;\n dataLabelEnable = value.marker.dataLabel.visible || dataLabelEnable;\n if (!modules.some(function (currentModule) {\n return currentModule.member === moduleName;\n })) {\n modules.push({\n member: moduleName,\n args: [_this, series]\n });\n }\n if (_this.chartAreaType === 'PolarRadar') {\n modules.push({\n member: value.drawType + 'Series',\n args: [_this, series]\n });\n }\n });\n this.findIndicatorModules(modules);\n this.findTrendLineModules(modules);\n modules = this.findAxisModule(modules);\n enableAnnotation = this.annotations.some(function (value) {\n return (value.content !== null);\n });\n if (errorBarVisible) {\n modules.push({\n member: 'ErrorBar',\n args: [this, series]\n });\n }\n if (this.isLegend) {\n modules.push({\n member: 'Legend',\n args: [this]\n });\n }\n if (this.chartAreaType !== 'PolarRadar' && (zooming.enableSelectionZooming\n || zooming.enableMouseWheelZooming || zooming.enablePinchZooming || zooming.enablePan)) {\n modules.push({\n member: 'Zoom',\n args: [this, this.zoomSettings]\n });\n if (zooming.enableScrollbar) {\n modules.push({\n member: 'ScrollBar',\n args: [this]\n });\n }\n }\n if (this.selectionMode !== 'None' && !(this.chartAreaType === 'PolarRadar' &&\n this.selectionMode.indexOf('Drag') > -1)) {\n modules.push({\n member: 'Selection',\n args: [this]\n });\n }\n if (dataLabelEnable) {\n modules.push({\n member: 'DataLabel',\n args: [this, series]\n });\n }\n if (enableAnnotation) {\n modules.push({\n member: 'Annotation',\n args: [this]\n });\n }\n if (this.chartAreaType !== 'PolarRadar' && this.crosshair.enable) {\n modules.push({\n member: 'Crosshair',\n args: [this]\n });\n }\n return modules;\n };\n Chart.prototype.findAxisModule = function (modules) {\n var axisCollections = [];\n axisCollections.push(this.primaryXAxis);\n axisCollections.push(this.primaryYAxis);\n axisCollections = axisCollections.concat(this.axes);\n var datetimeEnabled = false;\n var categoryEnabled = false;\n var logarithmicEnabled = false;\n var striplineEnabled = false;\n var dateTimeCategoryEnabled = false;\n var multiLevelEnabled = false;\n for (var _i = 0, axisCollections_1 = axisCollections; _i < axisCollections_1.length; _i++) {\n var axis = axisCollections_1[_i];\n datetimeEnabled = axis.valueType === 'DateTime' || datetimeEnabled;\n categoryEnabled = axis.valueType === 'Category' || categoryEnabled;\n logarithmicEnabled = axis.valueType === 'Logarithmic' || logarithmicEnabled;\n dateTimeCategoryEnabled = axis.valueType === 'DateTimeCategory' || dateTimeCategoryEnabled;\n striplineEnabled = this.findStriplineVisibility(axis.stripLines) || striplineEnabled;\n multiLevelEnabled = axis.multiLevelLabels.length > 0 || multiLevelEnabled;\n }\n if (datetimeEnabled) {\n modules.push({\n member: 'DateTime',\n args: [this]\n });\n }\n if (categoryEnabled) {\n modules.push({\n member: 'Category',\n args: [this]\n });\n }\n if (logarithmicEnabled) {\n modules.push({\n member: 'Logarithmic',\n args: [this]\n });\n }\n if (striplineEnabled) {\n modules.push({\n member: 'StripLine',\n args: [this]\n });\n }\n if (multiLevelEnabled) {\n modules.push({\n member: 'MultiLevelLabel',\n args: [this]\n });\n }\n if (dateTimeCategoryEnabled) {\n modules.push({\n member: 'DateTimeCategory',\n args: [this]\n });\n }\n return modules;\n };\n Chart.prototype.findIndicatorModules = function (modules) {\n var macdEnable;\n var bandEnable;\n var indicators = this.indicators;\n if (this.indicators.length) {\n modules.push({\n member: 'LineSeries',\n args: [this]\n });\n indicators.map(function (indicator) {\n macdEnable = macdEnable || indicator.type === 'Macd';\n bandEnable = bandEnable || indicator.type === 'BollingerBands';\n });\n if (macdEnable) {\n modules.push({\n member: 'ColumnSeries',\n args: [this]\n });\n }\n if (bandEnable) {\n modules.push({\n member: 'RangeAreaSeries',\n args: [this]\n });\n }\n for (var _i = 0, _a = this.indicators; _i < _a.length; _i++) {\n var indicator = _a[_i];\n modules.push({\n member: indicator.type + 'Indicator',\n args: [this]\n });\n }\n }\n };\n Chart.prototype.findTrendLineModules = function (modules) {\n var isLine;\n var isSpline;\n var _loop_1 = function (series) {\n var markerEnable;\n series.trendlines.map(function (trendline) {\n markerEnable = markerEnable || trendline.marker.visible;\n isLine = isLine || (trendline.type === 'Linear' || trendline.type === 'MovingAverage') ? true : false;\n isSpline = isSpline || !isLine ? true : false;\n });\n if (markerEnable) {\n modules.push({\n member: 'Marker',\n args: [this_1, series]\n });\n }\n };\n var this_1 = this;\n for (var _i = 0, _a = this.series; _i < _a.length; _i++) {\n var series = _a[_i];\n _loop_1(series);\n }\n if (isLine || isSpline) {\n modules.push({\n member: 'TrendLine',\n args: [this]\n });\n }\n if (isLine) {\n modules.push({\n member: 'LineSeries',\n args: [this]\n });\n }\n if (isSpline) {\n modules.push({\n member: 'SplineSeries',\n args: [this]\n });\n }\n };\n Chart.prototype.findStriplineVisibility = function (striplines) {\n var visible = false;\n for (var _i = 0, striplines_1 = striplines; _i < striplines_1.length; _i++) {\n var stripline = striplines_1[_i];\n if (stripline.visible) {\n visible = true;\n break;\n }\n }\n return visible;\n };\n /**\n * To Remove the SVG.\n * @return {boolean}\n * @private\n */\n Chart.prototype.removeSvg = function () {\n if (document.getElementById(this.element.id + '_Secondary_Element')) {\n remove(document.getElementById(this.element.id + '_Secondary_Element'));\n }\n var removeLength = 0;\n if (this.zoomModule && this.zoomModule.pinchTarget) {\n this.zoomModule.pinchTarget.id = '';\n this.zoomModule.pinchTarget.setAttribute('opacity', '0');\n this.svgObject.appendChild(this.zoomModule.pinchTarget);\n removeLength = 1;\n }\n if (this.svgObject) {\n while (this.svgObject.childNodes.length > removeLength) {\n this.svgObject.removeChild(this.svgObject.firstChild);\n }\n if (!this.svgObject.hasChildNodes() && this.svgObject.parentNode) {\n remove(this.svgObject);\n }\n }\n };\n Chart.prototype.refreshDefinition = function (definitions) {\n for (var _i = 0, definitions_1 = definitions; _i < definitions_1.length; _i++) {\n var item = definitions_1[_i];\n item.axes = [];\n }\n };\n /**\n * Refresh the axis default value.\n * @return {boolean}\n * @private\n */\n Chart.prototype.refreshAxis = function () {\n var axis = this.primaryXAxis;\n axis.rect = new Rect(undefined, undefined, 0, 0);\n axis = this.primaryYAxis;\n axis.isStack100 = false;\n axis.rect = new Rect(undefined, undefined, 0, 0);\n for (var _i = 0, _a = this.axes; _i < _a.length; _i++) {\n var item = _a[_i];\n axis = item;\n axis.rect = new Rect(undefined, undefined, 0, 0);\n axis.isStack100 = false;\n }\n };\n Chart.prototype.axisChange = function (axis) {\n if (!axis.name && !axis.valueType) {\n return false;\n }\n this.refreshDefinition(this.columns);\n this.refreshDefinition(this.rows);\n this.calculateVisibleAxis();\n this.processData();\n return true;\n };\n /**\n * Called internally if any of the property value changed.\n * @private\n */\n // tslint:disable-next-line:max-func-body-length\n Chart.prototype.onPropertyChanged = function (newProp, oldProp) {\n var renderer = false;\n var refreshBounds = false;\n if (Object.keys(newProp).length === 1 && Object.keys(newProp)[0] === 'indicators') {\n //add valid check,it should happen only when property change is triggered for target series\n return;\n }\n this.animateSeries = false;\n if (!this.delayRedraw) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'primaryXAxis':\n refreshBounds = this.axisChange(newProp.primaryXAxis);\n if (newProp.primaryXAxis.edgeLabelPlacement) {\n renderer = true;\n }\n if (!newProp.primaryXAxis.crosshairTooltip) {\n refreshBounds = true;\n }\n break;\n case 'primaryYAxis':\n refreshBounds = this.axisChange(newProp.primaryYAxis);\n if (newProp.primaryYAxis.edgeLabelPlacement) {\n renderer = true;\n }\n if (!newProp.primaryYAxis.crosshairTooltip) {\n refreshBounds = true;\n }\n break;\n case 'axes':\n for (var _b = 0, _c = Object.keys(newProp.axes); _b < _c.length; _b++) {\n var index = _c[_b];\n refreshBounds = refreshBounds || this.axisChange(newProp.axes[index]);\n if (!newProp.axes[index].crosshairTooltip) {\n refreshBounds = true;\n }\n }\n break;\n case 'height':\n case 'width':\n this.createChartSvg();\n refreshBounds = true;\n break;\n case 'title':\n refreshBounds = true;\n break;\n case 'titleStyle':\n if (newProp.titleStyle && (newProp.titleStyle.size || newProp.titleStyle.textOverflow)) {\n refreshBounds = true;\n }\n else {\n renderer = true;\n }\n break;\n case 'border':\n renderer = true;\n break;\n case 'series':\n var len = this.series.length;\n var seriesRefresh = false;\n var series = void 0;\n for (var i = 0; i < len; i++) {\n series = newProp.series[i];\n if (series && (series.dataSource || series.xName || series.yName || series.size ||\n series.high || series.low || series.open || series.close)) {\n seriesRefresh = true;\n }\n }\n if (seriesRefresh) {\n this.processData(false);\n refreshBounds = true;\n }\n break;\n case 'zoomSettings':\n if (newProp.zoomSettings.enableScrollbar || oldProp.zoomSettings.enableScrollbar) {\n refreshBounds = true;\n }\n renderer = true;\n break;\n case 'background':\n renderer = true;\n break;\n case 'chartArea':\n if (newProp.chartArea.border && newProp.chartArea.border.width) {\n refreshBounds = true;\n }\n renderer = true;\n break;\n case 'legendSettings':\n if (!newProp.legendSettings.background || !newProp.legendSettings.opacity) {\n refreshBounds = true;\n }\n renderer = true;\n break;\n case 'palettes':\n this.calculateVisibleSeries();\n renderer = true;\n break;\n case 'selectedDataIndexes':\n case 'selectionMode':\n if (this.selectionModule && newProp.selectionMode && newProp.selectionMode.indexOf('Drag') === -1) {\n this.selectionModule.redrawSelection(this, oldProp.selectionMode);\n }\n break;\n case 'isMultiSelect':\n if (this.selectionModule && !newProp.isMultiSelect && this.selectionModule.selectedDataIndexes.length > 1) {\n this.selectionModule.redrawSelection(this, oldProp.selectionMode);\n }\n break;\n case 'theme':\n this.animateSeries = true;\n break;\n case 'locale':\n case 'currencyCode':\n _super.prototype.refresh.call(this);\n break;\n case 'tooltip':\n this.tooltipModule.previousPoints = [];\n break;\n }\n }\n if (!refreshBounds && renderer) {\n this.removeSvg();\n this.renderElements();\n this.trigger('loaded', { chart: this });\n }\n if (refreshBounds) {\n this.removeSvg();\n this.refreshAxis();\n this.refreshBound();\n this.trigger('loaded', { chart: this });\n }\n }\n };\n __decorate([\n Property(null)\n ], Chart.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], Chart.prototype, \"height\", void 0);\n __decorate([\n Property('')\n ], Chart.prototype, \"title\", void 0);\n __decorate([\n Complex(Theme.chartTitleFont, Font)\n ], Chart.prototype, \"titleStyle\", void 0);\n __decorate([\n Complex({}, Margin)\n ], Chart.prototype, \"margin\", void 0);\n __decorate([\n Complex({ color: '#DDDDDD', width: 0 }, Border)\n ], Chart.prototype, \"border\", void 0);\n __decorate([\n Property(null)\n ], Chart.prototype, \"background\", void 0);\n __decorate([\n Complex({ border: { color: null, width: 0.5 }, background: 'transparent' }, ChartArea)\n ], Chart.prototype, \"chartArea\", void 0);\n __decorate([\n Complex({ name: 'primaryXAxis' }, Axis)\n ], Chart.prototype, \"primaryXAxis\", void 0);\n __decorate([\n Complex({ name: 'primaryYAxis' }, Axis)\n ], Chart.prototype, \"primaryYAxis\", void 0);\n __decorate([\n Collection([{}], Row)\n ], Chart.prototype, \"rows\", void 0);\n __decorate([\n Collection([{}], Column)\n ], Chart.prototype, \"columns\", void 0);\n __decorate([\n Collection([{}], Axis)\n ], Chart.prototype, \"axes\", void 0);\n __decorate([\n Collection([{}], Series)\n ], Chart.prototype, \"series\", void 0);\n __decorate([\n Collection([{}], ChartAnnotationSettings)\n ], Chart.prototype, \"annotations\", void 0);\n __decorate([\n Property([])\n ], Chart.prototype, \"palettes\", void 0);\n __decorate([\n Property('Material')\n ], Chart.prototype, \"theme\", void 0);\n __decorate([\n Complex({}, TooltipSettings)\n ], Chart.prototype, \"tooltip\", void 0);\n __decorate([\n Complex({}, CrosshairSettings)\n ], Chart.prototype, \"crosshair\", void 0);\n __decorate([\n Complex({}, LegendSettings)\n ], Chart.prototype, \"legendSettings\", void 0);\n __decorate([\n Complex({}, ZoomSettings)\n ], Chart.prototype, \"zoomSettings\", void 0);\n __decorate([\n Property('None')\n ], Chart.prototype, \"selectionMode\", void 0);\n __decorate([\n Property(false)\n ], Chart.prototype, \"isMultiSelect\", void 0);\n __decorate([\n Collection([], Indexes)\n ], Chart.prototype, \"selectedDataIndexes\", void 0);\n __decorate([\n Property(false)\n ], Chart.prototype, \"useGroupingSeparator\", void 0);\n __decorate([\n Property(false)\n ], Chart.prototype, \"isTransposed\", void 0);\n __decorate([\n Collection([], TechnicalIndicator)\n ], Chart.prototype, \"indicators\", void 0);\n __decorate([\n Property(null)\n ], Chart.prototype, \"description\", void 0);\n __decorate([\n Property(1)\n ], Chart.prototype, \"tabIndex\", void 0);\n __decorate([\n Property(true)\n ], Chart.prototype, \"enableSideBySidePlacement\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"resized\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"annotationRender\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"beforePrint\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"loaded\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"animationComplete\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"legendRender\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"textRender\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"pointRender\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"seriesRender\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"axisLabelRender\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"axisRangeCalculated\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"axisMultiLabelRender\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"tooltipRender\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"chartMouseMove\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"chartMouseClick\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"pointClick\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"pointMove\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"chartMouseLeave\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"chartMouseDown\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"chartMouseUp\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"dragComplete\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"zoomComplete\", void 0);\n __decorate([\n Property('USD')\n ], Chart.prototype, \"currencyCode\", void 0);\n Chart = __decorate([\n NotifyPropertyChanges\n ], Chart);\n return Chart;\n}(Component));\nexport { Chart };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Double } from '../axis/double-axis';\n/**\n * Common axis classes\n * @private\n */\nvar NiceInterval = /** @class */ (function (_super) {\n __extends(NiceInterval, _super);\n function NiceInterval() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Method to calculate numeric datetime interval\n */\n NiceInterval.prototype.calculateDateTimeNiceInterval = function (axis, size, start, end, isChart) {\n if (isChart === void 0) { isChart = true; }\n var oneDay = 24 * 60 * 60 * 1000;\n var startDate = new Date(start);\n var endDate = new Date(end);\n //var axisInterval ;\n var totalDays = (Math.abs((startDate.getTime() - endDate.getTime()) / (oneDay)));\n var interval;\n axis.actualIntervalType = axis.intervalType;\n var type = axis.intervalType;\n switch (type) {\n case 'Years':\n interval = this.calculateNumericNiceInterval(axis, totalDays / 365, size);\n break;\n case 'Quarter':\n interval = this.calculateNumericNiceInterval(axis, (totalDays / 365) * 4, size);\n break;\n case 'Months':\n interval = this.calculateNumericNiceInterval(axis, totalDays / 30, size);\n break;\n case 'Weeks':\n interval = this.calculateNumericNiceInterval(axis, totalDays / 7, size);\n break;\n case 'Days':\n interval = this.calculateNumericNiceInterval(axis, totalDays, size);\n break;\n case 'Hours':\n interval = this.calculateNumericNiceInterval(axis, totalDays * 24, size);\n break;\n case 'Minutes':\n interval = this.calculateNumericNiceInterval(axis, totalDays * 24 * 60, size);\n break;\n case 'Seconds':\n interval = this.calculateNumericNiceInterval(axis, totalDays * 24 * 60 * 60, size);\n break;\n case 'Auto':\n interval = this.calculateNumericNiceInterval(axis, totalDays / 365, size);\n if (interval >= 1) {\n axis.actualIntervalType = 'Years';\n return interval;\n }\n interval = this.calculateNumericNiceInterval(axis, (totalDays / 365) * 4, size);\n if (interval >= 1 && !isChart) {\n axis.actualIntervalType = 'Quarter';\n return interval;\n }\n interval = this.calculateNumericNiceInterval(axis, totalDays / 30, size);\n if (interval >= 1) {\n axis.actualIntervalType = 'Months';\n return interval;\n }\n interval = this.calculateNumericNiceInterval(axis, totalDays / 7, size);\n if (interval >= 1 && !isChart) {\n axis.actualIntervalType = 'Weeks';\n return interval;\n }\n interval = this.calculateNumericNiceInterval(axis, totalDays, size);\n if (interval >= 1) {\n axis.actualIntervalType = 'Days';\n return interval;\n }\n interval = this.calculateNumericNiceInterval(axis, totalDays * 24, size);\n if (interval >= 1) {\n axis.actualIntervalType = 'Hours';\n return interval;\n }\n interval = this.calculateNumericNiceInterval(axis, totalDays * 24 * 60, size);\n if (interval >= 1) {\n axis.actualIntervalType = 'Minutes';\n return interval;\n }\n interval = this.calculateNumericNiceInterval(axis, totalDays * 24 * 60 * 60, size);\n axis.actualIntervalType = 'Seconds';\n return interval;\n }\n return interval;\n };\n /**\n * To get the skeleton for the DateTime axis.\n * @return {string}\n * @private\n */\n NiceInterval.prototype.getSkeleton = function (axis) {\n var skeleton;\n var intervalType = axis.actualIntervalType;\n if (axis.skeleton) {\n return axis.skeleton;\n }\n if (intervalType === 'Years') {\n skeleton = axis.isChart ? 'yMMM' : 'y';\n }\n else if (intervalType === 'Quarter') {\n skeleton = 'yMMM';\n }\n else if (intervalType === 'Months') {\n skeleton = axis.isChart ? 'MMMd' : 'MMM';\n }\n else if (intervalType === 'Weeks') {\n skeleton = 'MEd';\n }\n else if (intervalType === 'Days') {\n skeleton = axis.isChart ? 'yMd' : 'MMMd';\n }\n else if (intervalType === 'Hours') {\n skeleton = axis.isChart ? 'EHm' : 'h';\n }\n else if (intervalType === 'Minutes') {\n skeleton = axis.isChart ? 'Hms' : 'hm';\n }\n else {\n skeleton = axis.isChart ? 'Hms' : 'hms';\n }\n return skeleton;\n };\n return NiceInterval;\n}(Double));\nexport { NiceInterval };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { setRange, triggerLabelRender } from '../../common/utils/helper';\nimport { DoubleRange } from '../utils/double-range';\nimport { withIn, firstToLowerCase } from '../../common/utils/helper';\nimport { DataUtil } from '@syncfusion/ej2-data';\nimport { NiceInterval } from '../axis/axis-helper';\n/**\n * `DateTime` module is used to render datetime axis.\n */\nvar DateTime = /** @class */ (function (_super) {\n __extends(DateTime, _super);\n /**\n * Constructor for the dateTime module.\n * @private\n */\n function DateTime(chart) {\n return _super.call(this, chart) || this;\n }\n /**\n * The function to calculate the range and labels for the axis.\n * @return {void}\n */\n DateTime.prototype.calculateRangeAndInterval = function (size, axis) {\n this.calculateRange(axis, size);\n this.getActualRange(axis, size);\n this.applyRangePadding(axis, size);\n this.calculateVisibleLabels(axis, this.chart);\n };\n /**\n * Actual Range for the axis.\n * @private\n */\n DateTime.prototype.getActualRange = function (axis, size) {\n var option = {\n skeleton: 'full',\n type: 'dateTime'\n };\n var dateParser = this.chart.intl.getDateParser(option);\n var dateFormatter = this.chart.intl.getDateFormat(option);\n // Axis min\n if ((axis.minimum) !== null) {\n this.min = Date.parse(dateParser(dateFormatter(new Date(DataUtil.parse.parseJson({ val: axis.minimum }).val))));\n }\n else if (this.min === null || this.min === Number.POSITIVE_INFINITY) {\n this.min = Date.parse(dateParser(dateFormatter(new Date(1970, 1, 1))));\n }\n // Axis Max\n if ((axis.maximum) !== null) {\n this.max = Date.parse(dateParser(dateFormatter(new Date(DataUtil.parse.parseJson({ val: axis.maximum }).val))));\n }\n else if (this.max === null || this.max === Number.NEGATIVE_INFINITY) {\n this.max = Date.parse(dateParser(dateFormatter(new Date(1970, 5, 1))));\n }\n if (this.min === this.max) {\n this.max = this.max + 2592000000;\n this.min = this.min - 2592000000;\n }\n axis.actualRange = {};\n axis.doubleRange = new DoubleRange(this.min, this.max);\n var datetimeInterval = this.calculateDateTimeNiceInterval(axis, size, axis.doubleRange.start, axis.doubleRange.end);\n if (!axis.interval) {\n axis.actualRange.interval = datetimeInterval;\n }\n else {\n axis.actualRange.interval = axis.interval;\n }\n axis.actualRange.min = axis.doubleRange.start;\n axis.actualRange.max = axis.doubleRange.end;\n };\n /**\n * Apply padding for the range.\n * @private\n */\n DateTime.prototype.applyRangePadding = function (axis, size) {\n this.min = (axis.actualRange.min);\n this.max = (axis.actualRange.max);\n var minimum;\n var maximum;\n var interval = axis.actualRange.interval;\n if (!setRange(axis)) {\n var rangePadding = axis.getRangePadding(this.chart);\n minimum = new Date(this.min);\n maximum = new Date(this.max);\n var intervalType = axis.actualIntervalType;\n if (rangePadding === 'None') {\n this.min = minimum.getTime();\n this.max = maximum.getTime();\n }\n else if (rangePadding === 'Additional' || rangePadding === 'Round') {\n switch (intervalType) {\n case 'Years':\n this.getYear(minimum, maximum, rangePadding, interval);\n break;\n case 'Months':\n this.getMonth(minimum, maximum, rangePadding, interval);\n break;\n case 'Days':\n this.getDay(minimum, maximum, rangePadding, interval);\n break;\n case 'Hours':\n this.getHour(minimum, maximum, rangePadding, interval);\n break;\n case 'Minutes':\n var minute = (minimum.getMinutes() / interval) * interval;\n var endMinute = maximum.getMinutes() + (minimum.getMinutes() - minute);\n if (rangePadding === 'Round') {\n this.min = (new Date(minimum.getFullYear(), minimum.getMonth(), minimum.getDate(), minimum.getHours(), minute, 0)).getTime();\n this.max = (new Date(maximum.getFullYear(), maximum.getMonth(), maximum.getDate(), maximum.getHours(), endMinute, 59)).getTime();\n }\n else {\n this.min = (new Date(minimum.getFullYear(), maximum.getMonth(), minimum.getDate(), minimum.getHours(), minute + (-interval), 0)).getTime();\n this.max = (new Date(maximum.getFullYear(), maximum.getMonth(), maximum.getDate(), maximum.getHours(), endMinute + (interval), 0)).getTime();\n }\n break;\n case 'Seconds':\n var second = (minimum.getSeconds() / interval) * interval;\n var endSecond = maximum.getSeconds() + (minimum.getSeconds() - second);\n if (rangePadding === 'Round') {\n this.min = (new Date(minimum.getFullYear(), minimum.getMonth(), minimum.getDate(), minimum.getHours(), minimum.getMinutes(), second, 0)).getTime();\n this.max = (new Date(maximum.getFullYear(), maximum.getMonth(), maximum.getDate(), maximum.getHours(), maximum.getMinutes(), endSecond, 0)).getTime();\n }\n else {\n this.min = (new Date(minimum.getFullYear(), minimum.getMonth(), minimum.getDate(), minimum.getHours(), minimum.getMinutes(), second + (-interval), 0)).getTime();\n this.max = (new Date(maximum.getFullYear(), maximum.getMonth(), maximum.getDate(), maximum.getHours(), maximum.getMinutes(), endSecond + (interval), 0)).getTime();\n }\n break;\n }\n }\n }\n axis.actualRange.min = (axis.minimum != null) ? this.min : this.min;\n axis.actualRange.max = (axis.maximum != null) ? this.max : this.max;\n axis.actualRange.delta = (axis.actualRange.max - axis.actualRange.min);\n axis.doubleRange = new DoubleRange(axis.actualRange.min, axis.actualRange.max);\n this.calculateVisibleRange(size, axis);\n };\n DateTime.prototype.getYear = function (minimum, maximum, rangePadding, interval) {\n var startYear = minimum.getFullYear();\n var endYear = maximum.getFullYear();\n if (rangePadding === 'Additional') {\n this.min = (new Date(startYear - interval, 1, 1, 0, 0, 0)).getTime();\n this.max = (new Date(endYear + interval, 1, 1, 0, 0, 0)).getTime();\n }\n else {\n this.min = new Date(startYear, 0, 0, 0, 0, 0).getTime();\n this.max = new Date(endYear, 11, 30, 23, 59, 59).getTime();\n }\n };\n DateTime.prototype.getMonth = function (minimum, maximum, rangePadding, interval) {\n var month = minimum.getMonth();\n var endMonth = maximum.getMonth();\n if (rangePadding === 'Round') {\n this.min = (new Date(minimum.getFullYear(), month, 0, 0, 0, 0)).getTime();\n this.max = (new Date(maximum.getFullYear(), endMonth, new Date(maximum.getFullYear(), maximum.getMonth(), 0).getDate(), 23, 59, 59)).getTime();\n }\n else {\n this.min = (new Date(minimum.getFullYear(), month + (-interval), 1, 0, 0, 0)).getTime();\n this.max = (new Date(maximum.getFullYear(), endMonth + (interval), endMonth === 2 ? 28 : 30, 0, 0, 0)).getTime();\n }\n };\n DateTime.prototype.getDay = function (minimum, maximum, rangePadding, interval) {\n var day = minimum.getDate();\n var endDay = maximum.getDate();\n if (rangePadding === 'Round') {\n this.min = (new Date(minimum.getFullYear(), minimum.getMonth(), day, 0, 0, 0)).getTime();\n this.max = (new Date(maximum.getFullYear(), maximum.getMonth(), endDay, 23, 59, 59)).getTime();\n }\n else {\n this.min = (new Date(minimum.getFullYear(), minimum.getMonth(), day + (-interval), 0, 0, 0)).getTime();\n this.max = (new Date(maximum.getFullYear(), maximum.getMonth(), endDay + (interval), 0, 0, 0)).getTime();\n }\n };\n DateTime.prototype.getHour = function (minimum, maximum, rangePadding, interval) {\n var hour = (minimum.getHours() / interval) * interval;\n var endHour = maximum.getHours() + (minimum.getHours() - hour);\n if (rangePadding === 'Round') {\n this.min = (new Date(minimum.getFullYear(), minimum.getMonth(), minimum.getDate(), hour, 0, 0)).getTime();\n this.max = (new Date(maximum.getFullYear(), maximum.getMonth(), maximum.getDate(), endHour, 59, 59)).getTime();\n }\n else {\n this.min = (new Date(minimum.getFullYear(), minimum.getMonth(), minimum.getDate(), hour + (-interval), 0, 0)).getTime();\n this.max = (new Date(maximum.getFullYear(), maximum.getMonth(), maximum.getDate(), endHour + (interval), 0, 0)).getTime();\n }\n };\n /**\n * Calculate visible range for axis.\n * @private\n */\n DateTime.prototype.calculateVisibleRange = function (size, axis) {\n axis.visibleRange = {\n min: axis.actualRange.min,\n max: axis.actualRange.max,\n interval: axis.actualRange.interval,\n delta: axis.actualRange.delta,\n };\n if (axis.zoomFactor < 1 || axis.zoomPosition > 0) {\n axis.calculateVisibleRange(size);\n axis.visibleRange.interval = (axis.enableAutoIntervalOnZooming) ?\n this.calculateDateTimeNiceInterval(axis, size, axis.visibleRange.min, axis.visibleRange.max)\n : axis.visibleRange.interval;\n }\n axis.dateTimeInterval = this.increaseDateTimeInterval(axis, axis.visibleRange.min, axis.visibleRange.interval).getTime()\n - axis.visibleRange.min;\n axis.triggerRangeRender(this.chart, axis.visibleRange.min, axis.visibleRange.max, axis.visibleRange.interval);\n };\n /**\n * Calculate visible labels for the axis.\n * @private\n */\n DateTime.prototype.calculateVisibleLabels = function (axis, chart) {\n axis.visibleLabels = [];\n var tempInterval = axis.visibleRange.min;\n if (!setRange(axis)) {\n tempInterval = this.alignRangeStart(axis, tempInterval, axis.visibleRange.interval, axis.actualIntervalType).getTime();\n }\n axis.format = chart.intl.getDateFormat({\n format: axis.labelFormat, type: firstToLowerCase(axis.skeletonType), skeleton: this.getSkeleton(axis)\n });\n axis.startLabel = axis.format(new Date(axis.visibleRange.min));\n axis.endLabel = axis.format(new Date(axis.visibleRange.max));\n while (tempInterval <= axis.visibleRange.max) {\n if (withIn(tempInterval, axis.visibleRange)) {\n triggerLabelRender(chart, tempInterval, axis.format(new Date(tempInterval)), axis.labelStyle, axis);\n }\n tempInterval = this.increaseDateTimeInterval(axis, tempInterval, axis.visibleRange.interval).getTime();\n }\n if (axis.getMaxLabelWidth) {\n axis.getMaxLabelWidth(this.chart);\n }\n };\n /** @private */\n DateTime.prototype.increaseDateTimeInterval = function (axis, value, interval) {\n var result = new Date(value);\n interval = Math.ceil(interval);\n var intervalType = axis.actualIntervalType;\n switch (intervalType) {\n case 'Years':\n result.setFullYear(result.getFullYear() + interval);\n return result;\n case 'Quarter':\n result.setMonth(result.getMonth() + (3 * interval));\n return result;\n case 'Months':\n result.setMonth(result.getMonth() + interval);\n return result;\n case 'Weeks':\n result.setDate(result.getDate() + (interval * 7));\n return result;\n case 'Days':\n result.setDate(result.getDate() + interval);\n return result;\n case 'Hours':\n result.setHours(result.getHours() + interval);\n return result;\n case 'Minutes':\n result.setMinutes(result.getMinutes() + interval);\n return result;\n case 'Seconds':\n result.setSeconds(result.getSeconds() + interval);\n return result;\n }\n return result;\n };\n DateTime.prototype.alignRangeStart = function (axis, sDate, intervalSize, intervalType) {\n var sResult = new Date(sDate);\n switch (axis.actualIntervalType) {\n case 'Years':\n var year = Math.floor(Math.floor(sResult.getFullYear() / intervalSize) * intervalSize);\n sResult = new Date(year, sResult.getMonth(), sResult.getDate(), 0, 0, 0);\n return sResult;\n case 'Months':\n var month = Math.floor(Math.floor((sResult.getMonth()) / intervalSize) * intervalSize);\n sResult = new Date(sResult.getFullYear(), month, sResult.getDate(), 0, 0, 0);\n return sResult;\n case 'Days':\n var day = Math.floor(Math.floor((sResult.getDate()) / intervalSize) * intervalSize);\n sResult = new Date(sResult.getFullYear(), sResult.getMonth(), day, 0, 0, 0);\n return sResult;\n case 'Hours':\n var hour = Math.floor(Math.floor((sResult.getHours()) / intervalSize) * intervalSize);\n sResult = new Date(sResult.getFullYear(), sResult.getMonth(), sResult.getDate(), hour, 0, 0);\n return sResult;\n case 'Minutes':\n var minutes = Math.floor(Math.floor((sResult.getMinutes()) / intervalSize) * intervalSize);\n sResult = new Date(sResult.getFullYear(), sResult.getMonth(), sResult.getDate(), sResult.getHours(), minutes, 0, 0);\n return sResult;\n case 'Seconds':\n var seconds = Math.floor(Math.floor((sResult.getSeconds()) / intervalSize) * intervalSize);\n sResult = new Date(sResult.getFullYear(), sResult.getMonth(), sResult.getDate(), sResult.getHours(), sResult.getMinutes(), seconds, 0);\n return sResult;\n }\n return sResult;\n };\n /**\n * Get module name\n */\n DateTime.prototype.getModuleName = function () {\n /**\n * Returns the module name\n */\n return 'DateTime';\n };\n /**\n * To destroy the category axis.\n * @return {void}\n * @private\n */\n DateTime.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return DateTime;\n}(NiceInterval));\nexport { DateTime };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { getActualDesiredIntervalsCount, triggerLabelRender } from '../../common/utils/helper';\nimport { DoubleRange } from '../utils/double-range';\nimport { withIn } from '../../common/utils/helper';\nimport { NiceInterval } from '../axis/axis-helper';\n/**\n * `Category` module is used to render category axis.\n */\nvar Category = /** @class */ (function (_super) {\n __extends(Category, _super);\n /**\n * Constructor for the category module.\n * @private\n */\n function Category(chart) {\n return _super.call(this, chart) || this;\n }\n /**\n * The function to calculate the range and labels for the axis.\n * @return {void}\n */\n Category.prototype.calculateRangeAndInterval = function (size, axis) {\n this.calculateRange(axis, size);\n this.getActualRange(axis, size);\n this.applyRangePadding(axis, size);\n this.calculateVisibleLabels(axis);\n };\n /**\n * Actual Range for the axis.\n * @private\n */\n Category.prototype.getActualRange = function (axis, size) {\n this.initializeDoubleRange(axis);\n // axis.doubleRange = new DoubleRange(this.min, this.max);\n axis.actualRange = {};\n if (!axis.interval) {\n axis.actualRange.interval = Math.max(1, Math.floor(axis.doubleRange.delta / getActualDesiredIntervalsCount(size, axis)));\n }\n else {\n axis.actualRange.interval = Math.ceil(axis.interval);\n }\n axis.actualRange.min = axis.doubleRange.start;\n axis.actualRange.max = axis.doubleRange.end;\n axis.actualRange.delta = axis.doubleRange.delta;\n };\n /**\n * Padding for the axis.\n * @private\n */\n Category.prototype.applyRangePadding = function (axis, size) {\n var ticks = (axis.labelPlacement === 'BetweenTicks' && this.chart.chartAreaType !== 'PolarRadar') ? 0.5 : 0;\n if (ticks > 0) {\n axis.actualRange.min -= ticks;\n axis.actualRange.max += ticks;\n }\n else {\n axis.actualRange.max += axis.actualRange.max ? 0 : 0.5;\n }\n axis.doubleRange = new DoubleRange(axis.actualRange.min, axis.actualRange.max);\n axis.actualRange.delta = axis.doubleRange.delta;\n this.calculateVisibleRange(size, axis);\n };\n /**\n * Calculate label for the axis.\n * @private\n */\n Category.prototype.calculateVisibleLabels = function (axis) {\n /*! Generate axis labels */\n axis.visibleLabels = [];\n var tempInterval = Math.ceil(axis.visibleRange.min);\n if (axis.zoomFactor < 1 || axis.zoomPosition > 0) {\n tempInterval = axis.visibleRange.min - (axis.visibleRange.min % axis.visibleRange.interval);\n }\n var position;\n axis.startLabel = axis.labels[Math.round(axis.visibleRange.min)];\n axis.endLabel = axis.labels[Math.floor(axis.visibleRange.max)];\n for (; tempInterval <= axis.visibleRange.max; tempInterval += axis.visibleRange.interval) {\n if (withIn(tempInterval, axis.visibleRange) && axis.labels.length > 0) {\n position = Math.round(tempInterval);\n triggerLabelRender(this.chart, position, axis.labels[position] ? axis.labels[position] : position.toString(), axis.labelStyle, axis);\n }\n }\n if (axis.getMaxLabelWidth) {\n axis.getMaxLabelWidth(this.chart);\n }\n };\n /**\n * Get module name\n */\n Category.prototype.getModuleName = function () {\n /**\n * Returns the module name\n */\n return 'Category';\n };\n /**\n * To destroy the category axis.\n * @return {void}\n * @private\n */\n Category.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return Category;\n}(NiceInterval));\nexport { Category };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Double } from '../axis/double-axis';\nimport { getActualDesiredIntervalsCount, triggerLabelRender } from '../../common/utils/helper';\nimport { logBase, withIn } from '../../common/utils/helper';\n/**\n * `Logarithmic` module is used to render log axis.\n */\nvar Logarithmic = /** @class */ (function (_super) {\n __extends(Logarithmic, _super);\n /**\n * Constructor for the logerithmic module.\n * @private\n */\n function Logarithmic(chart) {\n return _super.call(this, chart) || this;\n }\n /**\n * The method to calculate the range and labels for the axis.\n * @return {void}\n */\n Logarithmic.prototype.calculateRangeAndInterval = function (size, axis) {\n this.calculateRange(axis, size);\n this.getActualRange(axis, size);\n this.calculateVisibleRange(size, axis);\n this.calculateVisibleLabels(axis, this.chart);\n };\n /**\n * Calculates actual range for the axis.\n * @private\n */\n Logarithmic.prototype.getActualRange = function (axis, size) {\n this.initializeDoubleRange(axis);\n this.min = this.min < 0 ? 0 : this.min;\n var logStart = logBase(this.min, axis.logBase);\n logStart = isFinite(logStart) ? logStart : this.min;\n var logEnd = logBase(this.max, axis.logBase);\n logEnd = isFinite(logStart) ? logEnd : this.max;\n this.min = Math.floor(logStart / 1);\n this.max = Math.ceil(logEnd / 1);\n axis.actualRange.interval = axis.interval || this.calculateLogNiceInterval(this.max - this.min, size, axis);\n axis.actualRange.min = this.min;\n axis.actualRange.max = this.max;\n axis.actualRange.delta = this.max - this.min;\n };\n /**\n * Calculates visible range for the axis.\n * @private\n */\n Logarithmic.prototype.calculateVisibleRange = function (size, axis) {\n axis.visibleRange = {\n interval: axis.actualRange.interval, max: axis.actualRange.max,\n min: axis.actualRange.min, delta: axis.actualRange.delta\n };\n if (axis.zoomFactor < 1 || axis.zoomPosition > 0) {\n axis.calculateVisibleRange(size);\n axis.visibleRange.interval = (axis.enableAutoIntervalOnZooming) ?\n this.calculateLogNiceInterval(axis.doubleRange.delta, size, axis)\n : axis.visibleRange.interval;\n axis.visibleRange.interval = Math.floor(axis.visibleRange.interval) === 0 ? 1 : Math.floor(axis.visibleRange.interval);\n axis.triggerRangeRender(this.chart, axis.visibleRange.min, axis.visibleRange.max, axis.visibleRange.interval);\n }\n };\n /**\n * Calculates log iInteval for the axis.\n * @private\n */\n Logarithmic.prototype.calculateLogNiceInterval = function (delta, size, axis) {\n var actualDesiredIntervalsCount = getActualDesiredIntervalsCount(size, axis);\n var niceInterval = delta;\n var minInterval = Math.pow(10, Math.floor(logBase(niceInterval, 10)));\n for (var j = 0, len = axis.intervalDivs.length; j < len; j++) {\n var currentInterval = minInterval * axis.intervalDivs[j];\n if (actualDesiredIntervalsCount < (delta / currentInterval)) {\n break;\n }\n niceInterval = currentInterval;\n }\n return niceInterval;\n };\n /**\n * Calculates labels for the axis.\n * @private\n */\n Logarithmic.prototype.calculateVisibleLabels = function (axis, chart) {\n /*! Generate axis labels */\n var tempInterval = axis.visibleRange.min;\n axis.visibleLabels = [];\n if (axis.zoomFactor < 1 || axis.zoomPosition > 0) {\n tempInterval = axis.visibleRange.min - (axis.visibleRange.min % axis.visibleRange.interval);\n }\n var axisFormat = this.getFormat(axis);\n var isCustomFormat = axisFormat.match('{value}') !== null;\n axis.format = chart.intl.getNumberFormat({\n format: isCustomFormat ? '' : axisFormat,\n useGrouping: chart.useGroupingSeparator\n });\n axis.startLabel = axis.format(Math.pow(axis.logBase, axis.visibleRange.min));\n axis.endLabel = axis.format(Math.pow(axis.logBase, axis.visibleRange.max));\n for (; tempInterval <= axis.visibleRange.max; tempInterval += axis.visibleRange.interval) {\n if (withIn(tempInterval, axis.visibleRange)) {\n triggerLabelRender(this.chart, tempInterval, this.formatValue(axis, isCustomFormat, axisFormat, Math.pow(axis.logBase, tempInterval)), axis.labelStyle, axis);\n }\n }\n if (axis.getMaxLabelWidth) {\n axis.getMaxLabelWidth(this.chart);\n }\n };\n /**\n * Get module name\n */\n Logarithmic.prototype.getModuleName = function () {\n /**\n * Returns the module name\n */\n return 'Logarithmic';\n };\n /**\n * To destroy the category axis.\n * @return {void}\n * @private\n */\n Logarithmic.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return Logarithmic;\n}(Double));\nexport { Logarithmic };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Category } from '../axis/category-axis';\nimport { triggerLabelRender } from '../../common/utils/helper';\nimport { withIn, firstToLowerCase } from '../../common/utils/helper';\n/**\n * Category module is used to render category axis.\n */\nvar DateTimeCategory = /** @class */ (function (_super) {\n __extends(DateTimeCategory, _super);\n /**\n * Constructor for the category module.\n * @private\n */\n function DateTimeCategory(chart) {\n return _super.call(this, chart) || this;\n }\n /**\n * The function to calculate the range and labels for the axis.\n * @return {void}\n * @private\n */\n DateTimeCategory.prototype.calculateRangeAndInterval = function (size, axis) {\n this.axisSize = size;\n this.calculateRange(axis, size);\n this.getActualRange(axis, size);\n this.applyRangePadding(axis, size);\n this.calculateVisibleLabels(axis);\n };\n /**\n * Calculate label for the axis.\n * @private\n */\n DateTimeCategory.prototype.calculateVisibleLabels = function (axis) {\n /*! Generate axis labels */\n axis.visibleLabels = [];\n var padding = axis.labelPlacement === 'BetweenTicks' ? 0.5 : 0;\n if (axis.intervalType === 'Auto') {\n this.calculateDateTimeNiceInterval(axis, this.axisSize, parseInt(axis.labels[0], 10), parseInt(axis.labels[axis.labels.length - 1], 10));\n }\n else {\n axis.actualIntervalType = axis.intervalType;\n }\n axis.format = this.chart.intl.getDateFormat({\n format: axis.labelFormat, type: firstToLowerCase(axis.skeletonType), skeleton: this.getSkeleton(axis)\n });\n for (var i = 0; i < axis.labels.length; i++) {\n if (!this.sameInterval(axis.labels.map(Number)[i], axis.labels.map(Number)[i - 1], axis.actualIntervalType, i)) {\n if (withIn(i - padding, axis.visibleRange)) {\n triggerLabelRender(this.chart, i, axis.format(new Date(axis.labels.map(Number)[i])), axis.labelStyle, axis);\n }\n }\n }\n if (axis.getMaxLabelWidth) {\n axis.getMaxLabelWidth(this.chart);\n }\n };\n /**\n * get same interval\n */\n DateTimeCategory.prototype.sameInterval = function (currentDate, previousDate, type, index) {\n var sameValue;\n if (index === 0) {\n sameValue = false;\n }\n else {\n switch (type) {\n case 'Years':\n sameValue = new Date(currentDate).getFullYear() === new Date(previousDate).getFullYear();\n break;\n case 'Months':\n sameValue = new Date(currentDate).getFullYear() === new Date(previousDate).getFullYear() &&\n new Date(currentDate).getMonth() === new Date(previousDate).getMonth();\n break;\n case 'Days':\n sameValue = (Math.abs(currentDate - previousDate) < 24 * 60 * 60 * 1000 &&\n new Date(currentDate).getDay() === new Date(previousDate).getDay());\n break;\n case 'Hours':\n sameValue = (Math.abs(currentDate - previousDate) < 60 * 60 * 1000 &&\n new Date(currentDate).getDay() === new Date(previousDate).getDay());\n break;\n case 'Minutes':\n sameValue = (Math.abs(currentDate - previousDate) < 60 * 1000 &&\n new Date(currentDate).getMinutes() === new Date(previousDate).getMinutes());\n break;\n case 'Seconds':\n sameValue = (Math.abs(currentDate - previousDate) < 1000 &&\n new Date(currentDate).getDay() === new Date(previousDate).getDay());\n break;\n }\n }\n return sameValue;\n };\n /**\n * Get module name\n */\n DateTimeCategory.prototype.getModuleName = function () {\n /**\n * Returns the module name\n */\n return 'DateTimeCategory';\n };\n /**\n * To destroy the category axis.\n * @return {void}\n * @private\n */\n DateTimeCategory.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return DateTimeCategory;\n}(Category));\nexport { DateTimeCategory };\n","/**\n * StripLine src\n */\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Rect, TextOption, measureText, valueToCoefficient, textElement, logBase, RectOption } from '../../common/utils/helper';\n/**\n * `StripLine` module is used to render the stripLine in chart.\n */\nvar StripLine = /** @class */ (function () {\n function StripLine() {\n }\n StripLine.prototype.measureStripLine = function (axis, stripline, seriesClipRect) {\n var actualStart;\n var actualEnd;\n if (axis.valueType === 'DateTimeCategory') {\n var start = stripline.start;\n var end = stripline.end;\n actualStart = start ? axis.labels.indexOf(start.getTime().toString()) : null;\n actualEnd = end ? axis.labels.indexOf(end.getTime().toString()) : null;\n }\n else {\n actualStart = stripline.start;\n actualEnd = stripline.end;\n }\n var rect = this.getFromTovalue(actualStart, actualEnd, stripline.size, stripline.startFromAxis, axis);\n var height = (axis.orientation === 'Vertical') ? (rect.to - rect.from) * axis.rect.height : seriesClipRect.height;\n var width = (axis.orientation === 'Horizontal') ? (rect.to - rect.from) * axis.rect.width : seriesClipRect.width;\n var x = (axis.orientation === 'Vertical') ? seriesClipRect.x : ((rect.from * axis.rect.width) + axis.rect.x);\n var y = (axis.orientation === 'Horizontal') ? seriesClipRect.y : (axis.rect.y + axis.rect.height -\n (rect.to * axis.rect.height));\n if (height !== 0 && width !== 0) {\n return new Rect(x, y, width, height);\n }\n return new Rect(0, 0, 0, 0);\n };\n /**\n * To get from to value from start, end, size, start from axis\n */\n StripLine.prototype.getFromTovalue = function (start, end, size, startFromAxis, axis) {\n var from = startFromAxis ? axis.visibleRange.min : this.findValue(Math.min(start, isNullOrUndefined(end) ? start : end), axis);\n var to = this.findValue(this.getToValue(Math.max(start, isNullOrUndefined(end) ? start : end), from, size, axis, end), axis);\n return { from: valueToCoefficient(axis.isInversed ? to : from, axis), to: valueToCoefficient(axis.isInversed ? from : to, axis) };\n };\n StripLine.prototype.getToValue = function (to, from, size, axis, end) {\n if (axis.valueType === 'DateTime') {\n return (isNullOrUndefined(end) ? new Date(new Date(from).getTime() + size) : to);\n }\n else {\n return isNullOrUndefined(end) ? (axis.valueType === 'Logarithmic' ? Math.pow(axis.logBase, from) : from) + size : to;\n }\n };\n StripLine.prototype.findValue = function (value, axis) {\n if (axis.valueType === 'Logarithmic') {\n value = logBase(value, axis.logBase);\n }\n if (value < axis.visibleRange.min) {\n value = axis.visibleRange.min;\n }\n else if (value > axis.visibleRange.max) {\n value = axis.visibleRange.max;\n }\n return value;\n };\n /**\n * To render striplines based start and end.\n * @private\n * @param chart\n * @param position\n * @param axes\n */\n StripLine.prototype.renderStripLine = function (chart, position, axes) {\n var id = chart.element.id + '_stripline_' + position + '_';\n var striplineGroup = chart.renderer.createGroup({ id: id + 'collections' });\n var seriesClipRect = chart.chartAxisLayoutPanel.seriesClipRect;\n var rect;\n var count = 0;\n for (var _i = 0, axes_1 = axes; _i < axes_1.length; _i++) {\n var axis = axes_1[_i];\n for (var _a = 0, _b = axis.stripLines; _a < _b.length; _a++) {\n var stripline = _b[_a];\n if (stripline.visible && stripline.zIndex === position) {\n rect = this.measureStripLine(axis, stripline, seriesClipRect);\n this.renderRectangle(stripline, rect, id + 'rect_' + count, striplineGroup, chart);\n this.renderText(stripline, rect, id + 'text_' + count, striplineGroup, chart, axis);\n count++;\n }\n }\n }\n chart.svgObject.appendChild(striplineGroup);\n };\n StripLine.prototype.renderRectangle = function (stripline, rect, id, parent, chart) {\n parent.appendChild(chart.renderer.drawRectangle(new RectOption(id, stripline.color, stripline.border, stripline.opacity, rect, 0, 0, '', '')));\n };\n StripLine.prototype.renderText = function (stripline, rect, id, parent, chart, axis) {\n var textSize = measureText(stripline.text, stripline.textStyle);\n var textMid = 3 * (textSize.height / 8);\n var ty = rect.y + (rect.height / 2) + textMid;\n var rotation = (stripline.rotation === null) ? ((axis.orientation === 'Vertical') ? 0 : -90) : stripline.rotation;\n var tx = rect.x + (rect.width / 2);\n var alignment;\n var anchor;\n var padding = 5;\n if (axis.orientation === 'Horizontal') {\n tx = this.getTextStart(tx + (textMid * this.factor(stripline.horizontalAlignment)), rect.width, stripline.horizontalAlignment);\n ty = this.getTextStart(ty - textMid, rect.height, stripline.verticalAlignment);\n alignment = this.invertAlignment(stripline.horizontalAlignment);\n }\n else {\n tx = this.getTextStart(tx, rect.width, stripline.horizontalAlignment);\n ty = this.getTextStart(ty + (textMid * this.factor(stripline.verticalAlignment)) - padding, rect.height, stripline.verticalAlignment);\n alignment = stripline.verticalAlignment;\n }\n anchor = alignment;\n textElement(new TextOption(id, tx, ty, anchor, stripline.text, 'rotate(' + rotation + ' ' + tx + ',' + ty + ')', 'middle'), stripline.textStyle, stripline.textStyle.color, parent);\n };\n StripLine.prototype.invertAlignment = function (anchor) {\n switch (anchor) {\n case 'Start':\n anchor = 'Start';\n break;\n case 'End':\n anchor = 'End';\n break;\n }\n return anchor;\n };\n StripLine.prototype.factor = function (anchor) {\n var factor = 0;\n switch (anchor) {\n case 'Start':\n factor = 1;\n break;\n case 'End':\n factor = -1;\n break;\n }\n return factor;\n };\n StripLine.prototype.getTextStart = function (xy, size, textAlignment) {\n var padding = 5;\n switch (textAlignment) {\n case 'Start':\n xy = xy - (size / 2) + padding;\n break;\n case 'End':\n xy = xy + (size / 2) - padding;\n break;\n }\n return xy;\n };\n /**\n * To get the module name for `StripLine`.\n * @private\n */\n StripLine.prototype.getModuleName = function () {\n return 'StripLine';\n };\n /**\n * To destroy the `StripLine` module.\n * @private\n */\n StripLine.prototype.destroy = function () {\n // destroy peform here\n };\n return StripLine;\n}());\nexport { StripLine };\n","import { Rect, getAnimationFunction } from '../../common/utils/helper';\nimport { Animation } from '@syncfusion/ej2-base';\n/**\n * Base for line type series.\n */\nvar LineBase = /** @class */ (function () {\n /** @private */\n function LineBase(chartModule) {\n this.chart = chartModule;\n this.padding = 5;\n }\n /**\n * To improve the chart performance.\n * @return {void}\n * @private\n */\n LineBase.prototype.improveChartPerformance = function (series) {\n var tempPoints = [];\n var xVisibleRange = series.xAxis.visibleRange;\n var yVisibleRange = series.yAxis.visibleRange;\n var seriesPoints = series.points;\n var areaBounds = series.clipRect;\n var xTolerance = Math.abs(xVisibleRange.delta / areaBounds.width);\n var yTolerance = Math.abs(yVisibleRange.delta / areaBounds.height);\n var prevXValue = (seriesPoints[0] && seriesPoints[0].x > xTolerance) ? 0 : xTolerance;\n var prevYValue = (seriesPoints[0] && seriesPoints[0].y > yTolerance) ? 0 : yTolerance;\n var xVal = 0;\n var yVal = 0;\n var currentPoint;\n for (var _i = 0, seriesPoints_1 = seriesPoints; _i < seriesPoints_1.length; _i++) {\n var currentPoint_1 = seriesPoints_1[_i];\n currentPoint_1.symbolLocations = [];\n xVal = currentPoint_1.xValue ? currentPoint_1.xValue : xVisibleRange.min;\n yVal = currentPoint_1.yValue ? currentPoint_1.yValue : yVisibleRange.min;\n if (Math.abs(prevXValue - xVal) >= xTolerance || Math.abs(prevYValue - yVal) >= yTolerance) {\n tempPoints.push(currentPoint_1);\n prevXValue = xVal;\n prevYValue = yVal;\n }\n }\n return tempPoints;\n };\n /**\n * To generate the line path direction\n * @param firstPoint\n * @param secondPoint\n * @param series\n * @param isInverted\n * @param getPointLocation\n * @param startPoint\n */\n LineBase.prototype.getLineDirection = function (firstPoint, secondPoint, series, isInverted, getPointLocation, startPoint) {\n var direction = '';\n if (firstPoint != null) {\n var point1 = getPointLocation(firstPoint.xValue, firstPoint.yValue, series.xAxis, series.yAxis, isInverted, series);\n var point2 = getPointLocation(secondPoint.xValue, secondPoint.yValue, series.xAxis, series.yAxis, isInverted, series);\n direction = startPoint + ' ' + (point1.x) + ' ' + (point1.y) + ' ' +\n 'L' + ' ' + (point2.x) + ' ' + (point2.y) + ' ';\n }\n return direction;\n };\n /**\n * To append the line path.\n * @return {void}\n * @private\n */\n LineBase.prototype.appendLinePath = function (options, series, clipRect) {\n var htmlObject = series.chart.renderer.drawPath(options);\n htmlObject.setAttribute('clip-path', clipRect);\n series.pathElement = htmlObject;\n series.seriesElement.appendChild(htmlObject);\n series.isRectSeries = false;\n };\n /**\n * To render the marker for the series.\n * @return {void}\n * @private\n */\n LineBase.prototype.renderMarker = function (series) {\n if (series.marker && series.marker.visible) {\n series.chart.markerRender.render(series);\n }\n };\n /**\n * To do the progressive animation.\n * @return {void}\n * @private\n */\n LineBase.prototype.doProgressiveAnimation = function (series, option) {\n var animation = new Animation({});\n var path = series.pathElement;\n var strokeDashArray = path.getAttribute('stroke-dasharray');\n var pathLength = series.pathElement.getTotalLength();\n var currentTime;\n path.style.visibility = 'hidden';\n animation.animate(path, {\n duration: option.duration,\n delay: option.delay,\n progress: function (args) {\n if (args.timeStamp >= args.delay) {\n path.style.visibility = 'visible';\n currentTime = Math.abs(Math.round(((args.timeStamp - args.delay) * pathLength) / args.duration));\n path.setAttribute('stroke-dasharray', currentTime + ',' + pathLength);\n }\n },\n end: function (model) {\n path.setAttribute('stroke-dasharray', strokeDashArray);\n series.chart.trigger('animationComplete', { series: series });\n }\n });\n };\n /**\n * To store the symbol location and region\n * @param point\n * @param series\n * @param isInverted\n * @param getLocation\n */\n LineBase.prototype.storePointLocation = function (point, series, isInverted, getLocation) {\n var markerWidth = (series.marker && series.marker.width) ? series.marker.width : 0;\n var markerHeight = (series.marker && series.marker.height) ? series.marker.height : 0;\n point.symbolLocations.push(getLocation(point.xValue, point.yValue, series.xAxis, series.yAxis, isInverted, series));\n point.regions.push(new Rect(point.symbolLocations[0].x - markerWidth, point.symbolLocations[0].y - markerHeight, 2 * markerWidth, 2 * markerHeight));\n };\n /**\n * To do the linear animation.\n * @return {void}\n * @private\n */\n LineBase.prototype.doLinearAnimation = function (series, animation) {\n var clipRect = series.clipRectElement.childNodes[0].childNodes[0];\n var effect = getAnimationFunction('Linear');\n var elementHeight = +clipRect.getAttribute('height');\n var elementWidth = +clipRect.getAttribute('width');\n var xCenter = +clipRect.getAttribute('x');\n var yCenter = series.chart.requireInvertedAxis ? +clipRect.getAttribute('height') + +clipRect.getAttribute('y') :\n +clipRect.getAttribute('y');\n var value;\n clipRect.style.visibility = 'hidden';\n new Animation({}).animate(clipRect, {\n duration: animation.duration,\n delay: animation.delay,\n progress: function (args) {\n if (args.timeStamp >= args.delay) {\n clipRect.style.visibility = 'visible';\n if (series.chart.requireInvertedAxis) {\n value = effect(args.timeStamp - args.delay, 0, elementHeight, args.duration);\n clipRect.setAttribute('transform', 'translate(' + xCenter + ' ' + yCenter +\n ') scale(1,' + (value / elementHeight) + ') translate(' + (-xCenter) + ' ' + (-yCenter) + ')');\n }\n else {\n value = effect(args.timeStamp - args.delay, 0, elementWidth, args.duration);\n clipRect.setAttribute('transform', 'translate(' + xCenter + ' ' + yCenter +\n ') scale(' + (value / elementWidth) + ', 1) translate(' + (-xCenter) + ' ' + (-yCenter) + ')');\n }\n }\n },\n end: function (model) {\n clipRect.setAttribute('transform', 'translate(0,0)');\n series.chart.trigger('animationComplete', { series: series });\n }\n });\n };\n return LineBase;\n}());\nexport { LineBase };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { withInRange, getPoint, PathOption, TransformToVisible } from '../../common/utils/helper';\nimport { LineBase } from './line-base';\n/**\n * `LineSeries` module used to render the line series.\n */\nvar LineSeries = /** @class */ (function (_super) {\n __extends(LineSeries, _super);\n function LineSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render Line Series.\n * @return {void}.\n * @private\n */\n LineSeries.prototype.render = function (series, xAxis, yAxis, isInverted) {\n var point1;\n var point2;\n var direction = '';\n var prevPoint = null;\n var startPoint = 'M';\n var options;\n var isPolar = (series.chart && series.chart.chartAreaType === 'PolarRadar');\n var isDrop = (series.emptyPointSettings && series.emptyPointSettings.mode === 'Drop');\n var getCoordinate = isPolar ? TransformToVisible : getPoint;\n var visiblePoints = this.improveChartPerformance(series);\n for (var _i = 0, visiblePoints_1 = visiblePoints; _i < visiblePoints_1.length; _i++) {\n var point = visiblePoints_1[_i];\n point.regions = [];\n if (point.visible && withInRange(visiblePoints[point.index - 1], point, visiblePoints[point.index + 1], series)) {\n direction += this.getLineDirection(prevPoint, point, series, isInverted, getCoordinate, startPoint);\n startPoint = prevPoint ? 'L' : startPoint;\n prevPoint = point;\n this.storePointLocation(point, series, isInverted, getCoordinate);\n }\n else {\n prevPoint = isDrop ? prevPoint : null;\n startPoint = isDrop ? startPoint : 'M';\n point.symbolLocations = [];\n }\n }\n if (isPolar) {\n if (series.isClosed) {\n point2 = getCoordinate(visiblePoints[visiblePoints.length - 1].xValue, visiblePoints[visiblePoints.length - 1].yValue, xAxis, yAxis, isInverted, series);\n point1 = getCoordinate(visiblePoints[0].xValue, visiblePoints[0].yValue, xAxis, yAxis, isInverted, series);\n direction = direction.concat(startPoint + ' ' + point2.x + ' ' + point2.y + ' ' + 'L' + ' ' + point1.x + ' ' + point1.y);\n }\n }\n var name = series.category === 'Indicator' ? series.chart.element.id + '_Indicator_' + series.index + '_' + series.name :\n series.category === 'TrendLine' ? series.chart.element.id + '_Series_' + series.sourceIndex + '_TrendLine_' + series.index :\n series.chart.element.id + '_Series_' + series.index;\n options = new PathOption(name, 'none', series.width, series.interior, series.opacity, series.dashArray, direction);\n this.appendLinePath(options, series, '');\n this.renderMarker(series);\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n LineSeries.prototype.doAnimation = function (series) {\n var option = series.animation;\n this.doProgressiveAnimation(series, option);\n };\n /**\n * Get module name.\n */\n LineSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'LineSeries';\n };\n /**\n * To destroy the line series.\n * @return {void}\n * @private\n */\n LineSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return LineSeries;\n}(LineBase));\nexport { LineSeries };\n","import { Animation } from '@syncfusion/ej2-base';\nimport { DoubleRange } from '../utils/double-range';\nimport { Rect, valueToCoefficient, getMinPointsDelta, PathOption } from '../../common/utils/helper';\nimport { getAnimationFunction, getPoint } from '../../common/utils/helper';\nimport { pointRender } from '../../common/model/constants';\n/**\n * Column Series Base\n */\nvar ColumnBase = /** @class */ (function () {\n function ColumnBase() {\n }\n /**\n * To get the position of the column series.\n * @return {DoubleRange}\n * @private\n */\n ColumnBase.prototype.getSideBySideInfo = function (series) {\n if (series.chart.enableSideBySidePlacement && !series.position) {\n this.getSideBySidePositions(series);\n }\n var position = !series.chart.enableSideBySidePlacement ? 0 : series.position;\n var rectCount = !series.chart.enableSideBySidePlacement ? 1 : series.rectCount;\n series.isRectSeries = true;\n var visibleSeries = series.chart.visibleSeries;\n var seriesSpacing = series.chart.enableSideBySidePlacement ? series.columnSpacing : 0; // Column Spacing\n var pointSpacing = (series.columnWidth === null) ? ((series.type === 'Histogram') ? 1 : 0.7) :\n series.columnWidth; // Column width\n var minimumPointDelta = getMinPointsDelta(series.xAxis, visibleSeries);\n var width = minimumPointDelta * pointSpacing;\n var radius;\n var location = (position) / rectCount - 0.5;\n var doubleRange = new DoubleRange(location, location + (1 / rectCount));\n if (!(isNaN(doubleRange.start) || isNaN(doubleRange.end))) {\n doubleRange = new DoubleRange(doubleRange.start * width, doubleRange.end * width);\n radius = seriesSpacing * doubleRange.delta;\n doubleRange = new DoubleRange(doubleRange.start + radius / 2, doubleRange.end - radius / 2);\n }\n return doubleRange;\n };\n /**\n * To get the rect values.\n * @return {Rect}\n * @private\n */\n ColumnBase.prototype.getRectangle = function (x1, y1, x2, y2, series) {\n var point1 = getPoint(x1, y1, series.xAxis, series.yAxis, series.chart.requireInvertedAxis);\n var point2 = getPoint(x2, y2, series.xAxis, series.yAxis, series.chart.requireInvertedAxis);\n return new Rect(Math.min(point1.x, point2.x), Math.min(point1.y, point2.y), Math.abs(point2.x - point1.x), Math.abs(point2.y - point1.y));\n };\n /**\n * To get the position of each series.\n * @return {void}\n * @private\n */\n ColumnBase.prototype.getSideBySidePositions = function (series) {\n var chart = series.chart;\n var seriesCollection = [];\n for (var _i = 0, _a = chart.columns; _i < _a.length; _i++) {\n var columnItem = _a[_i];\n for (var _b = 0, _c = chart.rows; _b < _c.length; _b++) {\n var item = _c[_b];\n this.findRectPosition(series.findSeriesCollection(columnItem, item, false));\n }\n }\n };\n ColumnBase.prototype.findRectPosition = function (seriesCollection) {\n var stackingGroup = [];\n var vSeries = { rectCount: 0, position: null };\n seriesCollection.forEach(function (value) {\n if (value.type.indexOf('Stacking') !== -1) {\n if (value.stackingGroup) {\n if (stackingGroup[value.stackingGroup] === undefined) {\n value.position = vSeries.rectCount;\n stackingGroup[value.stackingGroup] = vSeries.rectCount++;\n }\n else {\n value.position = stackingGroup[value.stackingGroup];\n }\n }\n else {\n if (vSeries.position === null) {\n value.position = vSeries.rectCount;\n vSeries.position = vSeries.rectCount++;\n }\n else {\n value.position = vSeries.position;\n }\n }\n }\n else {\n value.position = vSeries.rectCount++;\n }\n });\n seriesCollection.forEach(function (value) {\n value.rectCount = vSeries.rectCount;\n });\n };\n /**\n * Updates the symbollocation for points\n * @return void\n * @private\n */\n ColumnBase.prototype.updateSymbolLocation = function (point, rect, series) {\n if (!series.chart.requireInvertedAxis) {\n this.updateXRegion(point, rect, series);\n }\n else {\n this.updateYRegion(point, rect, series);\n }\n if (series.type === 'Histogram') {\n point.minimum = +point.x - series.histogramValues.binWidth / 2;\n point.maximum = +point.x + series.histogramValues.binWidth / 2;\n }\n };\n /**\n * Update the region for the point.\n * @return {void}\n * @private\n */\n ColumnBase.prototype.updateXRegion = function (point, rect, series) {\n point.regions.push(rect);\n point.symbolLocations.push({\n x: rect.x + (rect.width) / 2,\n y: (series.seriesType === 'BoxPlot' || series.seriesType.indexOf('HighLow') !== -1 ||\n (point.yValue >= 0 === !series.yAxis.isInversed)) ? rect.y : (rect.y + rect.height)\n });\n };\n /**\n * Update the region for the point in bar series.\n * @return {void}\n * @private\n */\n ColumnBase.prototype.updateYRegion = function (point, rect, series) {\n point.regions.push(rect);\n point.symbolLocations.push({\n x: (series.seriesType === 'BoxPlot' || series.seriesType.indexOf('HighLow') !== -1 ||\n (point.yValue >= 0 === !series.yAxis.isInversed)) ? rect.x + rect.width : rect.x,\n y: rect.y + rect.height / 2\n });\n };\n /**\n * To trigger the point rendering event.\n * @return {void}\n * @private\n */\n ColumnBase.prototype.triggerEvent = function (series, point, fill, border) {\n var argsData = {\n cancel: false, name: pointRender, series: series, point: point,\n fill: series.setPointColor(point, fill),\n border: series.setBorderColor(point, border)\n };\n series.chart.trigger(pointRender, argsData);\n point.color = argsData.fill;\n return argsData;\n };\n /**\n * To draw the rectangle for points.\n * @return {void}\n * @private\n */\n ColumnBase.prototype.drawRectangle = function (series, point, rect, argsData) {\n var check = series.chart.requireInvertedAxis ? rect.height : rect.width;\n if (check <= 0) {\n return null;\n }\n var direction = this.calculateRoundedRectPath(rect, series.cornerRadius.topLeft, series.cornerRadius.topRight, series.cornerRadius.bottomLeft, series.cornerRadius.bottomRight);\n var name = series.category === 'Indicator' ? series.chart.element.id + '_Indicator_' + series.index + '_' + series.name +\n '_Point_' + point.index : series.chart.element.id + '_Series_' + series.index + '_Point_' + point.index;\n var options = new PathOption(name, argsData.fill, argsData.border.width, argsData.border.color, series.opacity, series.dashArray, direction);\n var element = series.chart.renderer.drawPath(options);\n switch (series.seriesType) {\n case 'XY':\n element.setAttribute('aria-label', point.x.toString() + ':' + point.yValue.toString());\n break;\n case 'HighLow':\n element.setAttribute('aria-label', point.x.toString() + ':' + point.high.toString() + ':' + point.low.toString());\n break;\n }\n series.seriesElement.appendChild(element);\n };\n /**\n * To animate the series.\n * @return {void}\n * @private\n */\n ColumnBase.prototype.animate = function (series) {\n var rectElements = series.seriesElement.childNodes;\n var count = series.category === 'Indicator' ? 0 : 1;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n if (!point.symbolLocations.length && !(series.type === 'BoxAndWhisker' && point.regions.length)) {\n continue;\n }\n this.animateRect(rectElements[count], series, point);\n count++;\n }\n };\n /**\n * To animate the series.\n * @return {void}\n * @private\n */\n ColumnBase.prototype.animateRect = function (element, series, point) {\n var option = series.animation;\n var effect = getAnimationFunction('Linear');\n var isPlot = point.yValue < 0;\n var x;\n var y;\n var elementHeight = +point.regions[0].height;\n var elementWidth = +point.regions[0].width;\n var centerX;\n var centerY;\n if (!series.chart.requireInvertedAxis) {\n x = +point.regions[0].x;\n if (series.type.indexOf('Stacking') > -1) {\n y = (1 - valueToCoefficient(0, series.yAxis)) * (series.yAxis.rect.height);\n centerX = x;\n centerY = y;\n }\n else {\n y = +point.regions[0].y;\n centerY = (series.seriesType.indexOf('HighLow') !== -1 || series.type.indexOf('Waterfall') !== -1) ? y + elementHeight / 2 :\n (isPlot !== series.yAxis.isInversed) ? y : y + elementHeight;\n centerX = isPlot ? x : x + elementWidth;\n }\n }\n else {\n y = +point.regions[0].y;\n if (series.type.indexOf('Stacking') > -1) {\n x = (valueToCoefficient(0, series.yAxis)) * series.yAxis.rect.width;\n centerX = x;\n centerY = y;\n }\n else {\n x = +point.regions[0].x;\n centerY = isPlot ? y : y + elementHeight;\n centerX = (series.seriesType.indexOf('HighLow') !== -1 || series.type.indexOf('Waterfall') !== -1) ? x + elementWidth / 2 :\n (isPlot !== series.yAxis.isInversed) ? x + elementWidth : x;\n }\n }\n var value;\n element.style.visibility = 'hidden';\n new Animation({}).animate(element, {\n duration: option.duration,\n delay: option.delay,\n progress: function (args) {\n if (args.timeStamp >= args.delay) {\n element.style.visibility = 'visible';\n if (!series.chart.requireInvertedAxis) {\n elementHeight = elementHeight ? elementHeight : 1;\n value = effect(args.timeStamp - args.delay, 0, elementHeight, args.duration);\n element.setAttribute('transform', 'translate(' + centerX + ' ' + centerY +\n ') scale(1,' + (value / elementHeight) + ') translate(' + (-centerX) + ' ' + (-centerY) + ')');\n }\n else {\n elementWidth = elementWidth ? elementWidth : 1;\n value = effect(args.timeStamp - args.delay, 0, elementWidth, args.duration);\n element.setAttribute('transform', 'translate(' + centerX + ' ' + centerY +\n ') scale(' + (value / elementWidth) + ', 1) translate(' + (-centerX) + ' ' + (-centerY) + ')');\n }\n }\n },\n end: function (model) {\n element.setAttribute('transform', 'translate(0,0)');\n var seriesElement = series.seriesElement;\n if (element === seriesElement.lastElementChild || point.index === series.points.length - 1 ||\n (series.type === 'Waterfall' && element === seriesElement.children[seriesElement.childElementCount - 2])) {\n series.chart.trigger('animationComplete', { series: series });\n if (series.type === 'Waterfall') {\n var rectElements = seriesElement.childNodes;\n for (var i = 0; i < rectElements.length; i++) {\n if (rectElements[i].id.indexOf('Connector') !== -1) {\n rectElements[i].style.visibility = 'visible';\n rectElements[i].setAttribute('transform', 'translate(0,0)');\n }\n }\n }\n }\n }\n });\n };\n /**\n * To get rounded rect path direction\n */\n ColumnBase.prototype.calculateRoundedRectPath = function (rect, topLeft, topRight, bottomLeft, bottomRight) {\n return 'M' + ' ' + rect.x + ' ' + (topLeft + rect.y) +\n ' Q ' + rect.x + ' ' + rect.y + ' ' + (rect.x + topLeft) + ' ' +\n rect.y + ' ' + 'L' + ' ' + (rect.x + rect.width - topRight) + ' ' + rect.y +\n ' Q ' + (rect.x + rect.width) + ' ' + rect.y + ' ' +\n (rect.x + rect.width) + ' ' + (rect.y + topRight) + ' ' + 'L ' +\n (rect.x + rect.width) + ' ' + (rect.y + rect.height - bottomRight)\n + ' Q ' + (rect.x + rect.width) + ' ' + (rect.y + rect.height) + ' ' + (rect.x + rect.width - bottomRight) + ' ' +\n (rect.y + rect.height) + ' ' + 'L ' + (rect.x + bottomLeft) + ' ' + (rect.y + rect.height) + ' Q ' + rect.x + ' ' +\n (rect.y + rect.height) + ' ' + rect.x + ' ' + (rect.y + rect.height - bottomLeft) + ' ' + 'L' + ' ' + rect.x + ' ' +\n (topLeft + rect.y) + ' ' + 'Z';\n };\n return ColumnBase;\n}());\nexport { ColumnBase };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { withInRange } from '../../common/utils/helper';\nimport { ColumnBase } from './column-base';\n/**\n * `ColumnSeries` Module used to render the column series.\n */\nvar ColumnSeries = /** @class */ (function (_super) {\n __extends(ColumnSeries, _super);\n function ColumnSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render Column series.\n * @return {void}\n * @private\n */\n ColumnSeries.prototype.render = function (series) {\n var rect;\n var sideBySideInfo = this.getSideBySideInfo(series);\n var origin = Math.max(series.yAxis.visibleRange.min, 0);\n var argsData;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var pointColumn = _a[_i];\n pointColumn.symbolLocations = [];\n pointColumn.regions = [];\n if (pointColumn.visible && withInRange(series.points[pointColumn.index - 1], pointColumn, series.points[pointColumn.index + 1], series)) {\n rect = this.getRectangle(pointColumn.xValue + sideBySideInfo.start, pointColumn.yValue, pointColumn.xValue + sideBySideInfo.end, origin, series);\n var color = series.category === 'Indicator' ? pointColumn.color : series.interior;\n argsData = this.triggerEvent(series, pointColumn, color, { width: series.border.width, color: series.border.color });\n if (!argsData.cancel) {\n this.updateSymbolLocation(pointColumn, rect, series);\n this.drawRectangle(series, pointColumn, rect, argsData);\n }\n }\n }\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n ColumnSeries.prototype.doAnimation = function (series) {\n this.animate(series);\n };\n /**\n * Get module name.\n */\n ColumnSeries.prototype.getModuleName = function () {\n return 'ColumnSeries';\n /**\n * return the module name\n */\n };\n /**\n * To destroy the column series.\n * @return {void}\n * @private\n */\n ColumnSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return ColumnSeries;\n}(ColumnBase));\nexport { ColumnSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { getPoint } from '../../common/utils/helper';\nimport { LineBase } from './line-base';\nimport { RectOption } from '../../common/utils/helper';\nimport { DataUtil } from '@syncfusion/ej2-data';\n/**\n * Base class for multi colored series\n */\nvar MultiColoredSeries = /** @class */ (function (_super) {\n __extends(MultiColoredSeries, _super);\n function MultiColoredSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * To Generate the area path direction\n * @param xValue\n * @param yValue\n * @param series\n * @param isInverted\n * @param getPointLocation\n * @param startPoint\n * @param startPath\n */\n MultiColoredSeries.prototype.getAreaPathDirection = function (xValue, yValue, series, isInverted, getPointLocation, startPoint, startPath) {\n var direction = '';\n var firstPoint;\n if (startPoint === null) {\n firstPoint = getPointLocation(xValue, yValue, series.xAxis, series.yAxis, isInverted, series);\n direction += (startPath + ' ' + (firstPoint.x) + ' ' + (firstPoint.y) + ' ');\n }\n return direction;\n };\n /**\n * To Generate the empty point direction\n * @param firstPoint\n * @param secondPoint\n * @param series\n * @param isInverted\n * @param getPointLocation\n */\n MultiColoredSeries.prototype.getAreaEmptyDirection = function (firstPoint, secondPoint, series, isInverted, getPointLocation) {\n var direction = '';\n direction += this.getAreaPathDirection(firstPoint.x, firstPoint.y, series, isInverted, getPointLocation, null, 'L');\n direction += this.getAreaPathDirection(secondPoint.x, secondPoint.y, series, isInverted, getPointLocation, null, 'L');\n return direction;\n };\n /**\n * To set point color\n * @param points\n */\n MultiColoredSeries.prototype.setPointColor = function (currentPoint, previous, series, isXSegment, segments) {\n if (series.pointColorMapping === '') {\n var segment = void 0;\n var value = void 0;\n for (var i = 0; i < segments.length; i++) {\n segment = segments[i];\n value = isXSegment ? currentPoint.xValue : currentPoint.yValue;\n if (value <= this.getAxisValue(segment.value, isXSegment ? series.xAxis : series.yAxis, series.chart) || !segment.value) {\n currentPoint.interior = segment.color;\n break;\n }\n }\n if (currentPoint.interior == null) {\n currentPoint.interior = series.interior;\n }\n return false;\n }\n else {\n if (previous) {\n return series.setPointColor(currentPoint, series.interior) !== series.setPointColor(previous, series.interior);\n }\n else {\n return false;\n }\n }\n };\n MultiColoredSeries.prototype.sortSegments = function (series, chartSegments) {\n var axis = series.segmentAxis === 'X' ? series.xAxis : series.yAxis;\n var segments = [].concat(chartSegments);\n var access = this;\n return segments.sort(function (a, b) {\n return access.getAxisValue(a.value, axis, series.chart) - access.getAxisValue(b.value, axis, series.chart);\n });\n };\n /**\n * Segment calculation performed here\n * @param series\n * @param options\n * @param chartSegments\n */\n MultiColoredSeries.prototype.applySegmentAxis = function (series, options, segments) {\n var _this = this;\n if (series.pointColorMapping !== '') {\n options.map(function (option) {\n _this.appendLinePath(option, series, '');\n });\n return null;\n }\n var isXSegment = series.segmentAxis === 'X';\n var axis = isXSegment ? series.xAxis : series.yAxis;\n var chart = series.chart;\n var segment;\n this.includeSegment(segments, axis, series, segments.length);\n var length = segments.length;\n var value;\n var clipPath;\n var _loop_1 = function (index) {\n segment = segments[index];\n value = this_1.getAxisValue(segment.value, axis, series.chart);\n clipPath = this_1.createClipRect(index ? this_1.getAxisValue(segments[index - 1].value, axis, series.chart)\n : axis.visibleRange.min, value, series, index, isXSegment);\n if (clipPath) {\n options.map(function (option) {\n series.seriesElement.appendChild(chart.renderer.drawPath({\n 'clip-path': clipPath,\n 'stroke-dasharray': segment.dashArray,\n 'opacity': option.opacity,\n 'stroke': series.type.indexOf('Line') > -1 ? segment.color || series.interior : series.border.color,\n 'stroke-width': option['stroke-width'],\n 'fill': series.type.indexOf('Line') > -1 ? 'none' : segment.color || series.interior,\n 'id': option.id + '_Segment_' + index,\n 'd': option.d\n }));\n });\n }\n };\n var this_1 = this;\n for (var index = 0; index < length; index++) {\n _loop_1(index);\n }\n };\n MultiColoredSeries.prototype.includeSegment = function (segments, axis, series, length) {\n if (length <= 0) {\n segments.push({ value: axis.visibleRange.max, color: series.interior });\n return null;\n }\n if (this.getAxisValue(segments[length - 1].value, axis, series.chart) < axis.visibleRange.max) {\n segments.push({ value: axis.visibleRange.max, color: series.interior });\n }\n };\n /**\n * To create clip rect for segment axis\n * @param startValue\n * @param endValue\n * @param series\n * @param index\n * @param isX\n * @param chart\n */\n MultiColoredSeries.prototype.createClipRect = function (startValue, endValue, series, index, isX) {\n var isRequired = series.chart.requireInvertedAxis;\n var startPointLocation = getPoint(isX ? startValue : series.xAxis.visibleRange.min, isX ? series.yAxis.visibleRange.max : endValue, series.xAxis, series.yAxis, isRequired);\n var endPointLocation = getPoint(isX ? endValue : series.xAxis.visibleRange.max, isX ? series.yAxis.visibleRange.min : startValue, series.xAxis, series.yAxis, isRequired);\n endPointLocation = isRequired ?\n [startPointLocation, startPointLocation = endPointLocation][0] : endPointLocation;\n if ((endPointLocation.x - startPointLocation.x > 0) && (endPointLocation.y - startPointLocation.y > 0)) {\n series.seriesElement.appendChild(series.chart.renderer.drawClipPath(new RectOption(series.chart.element.id + '_ChartSegmentClipRect_' + index, 'transparent', { width: 1, color: 'Gray' }, 1, {\n x: startPointLocation.x,\n y: startPointLocation.y,\n width: endPointLocation.x - startPointLocation.x,\n height: endPointLocation.y - startPointLocation.y\n })));\n return 'url(#' + series.chart.element.id + '_ChartSegmentClipRect_' + index + ')';\n }\n return null;\n };\n /**\n * To get exact value from segment value\n * @param segmentValue\n * @param axis\n * @param chart\n */\n MultiColoredSeries.prototype.getAxisValue = function (segmentValue, axis, chart) {\n if (segmentValue === null) {\n segmentValue = axis.visibleRange.max;\n }\n if (axis.valueType === 'DateTime') {\n var option = { skeleton: 'full', type: 'dateTime' };\n return Date.parse(chart.intl.getDateParser(option)(chart.intl.getDateFormat(option)(new Date(DataUtil.parse.parseJson({ val: segmentValue }).val))));\n }\n else if (axis.valueType.indexOf('Category') > -1) {\n var xValue = axis.valueType === 'DateTimeCategory' ?\n (segmentValue.getTime()).toString() :\n segmentValue;\n return (axis.labels.indexOf(xValue) < 0) ? +segmentValue : axis.labels.indexOf(xValue);\n }\n else {\n return +segmentValue;\n }\n };\n return MultiColoredSeries;\n}(LineBase));\nexport { MultiColoredSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { getPoint, withInRange, ChartLocation, PathOption, TransformToVisible } from '../../common/utils/helper';\nimport { MultiColoredSeries } from './multi-colored-base';\n/**\n * `AreaSeries` module is used to render the area series.\n */\nvar AreaSeries = /** @class */ (function (_super) {\n __extends(AreaSeries, _super);\n function AreaSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render Area series.\n * @return {void}\n * @private\n */\n AreaSeries.prototype.render = function (series, xAxis, yAxis, isInverted) {\n var _this = this;\n var startPoint = null;\n var direction = '';\n var origin = series.chart.chartAreaType === 'PolarRadar' ? series.points[0].yValue :\n Math.max(series.yAxis.visibleRange.min, 0);\n var currentXValue;\n var isDropMode = (series.emptyPointSettings && series.emptyPointSettings.mode === 'Drop');\n var borderWidth = series.border ? series.border.width : 0;\n var borderColor = series.border ? series.border.color : 'transparent';\n var getCoordinate = series.chart.chartAreaType === 'PolarRadar' ? TransformToVisible : getPoint;\n series.points.map(function (point, i, seriesPoints) {\n currentXValue = point.xValue;\n point.symbolLocations = [];\n point.regions = [];\n if (point.visible && withInRange(seriesPoints[i - 1], point, seriesPoints[i + 1], series)) {\n direction += _this.getAreaPathDirection(currentXValue, origin, series, isInverted, getCoordinate, startPoint, 'M');\n startPoint = startPoint || new ChartLocation(currentXValue, origin);\n // First Point to draw the area path\n direction += _this.getAreaPathDirection(currentXValue, point.yValue, series, isInverted, getCoordinate, null, 'L');\n if (seriesPoints[i + 1] && !seriesPoints[i + 1].visible && !isDropMode) {\n direction += _this.getAreaEmptyDirection({ 'x': currentXValue, 'y': origin }, startPoint, series, isInverted, getCoordinate);\n startPoint = null;\n }\n _this.storePointLocation(point, series, isInverted, getCoordinate);\n }\n });\n this.appendLinePath(new PathOption(series.chart.element.id + '_Series_' + series.index, series.interior, borderWidth, borderColor, series.opacity, series.dashArray, (series.points.length > 1 ? (direction + this.getAreaPathDirection(series.points[series.points.length - 1].xValue, series.chart.chartAreaType === 'PolarRadar' ?\n series.points[series.points.length - 1].yValue : origin, series, isInverted, getCoordinate, null, 'L')) : '')), series, '');\n this.renderMarker(series);\n };\n /**\n * To destroy the area series.\n * @return {void}\n * @private\n */\n AreaSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method calling here\n */\n };\n /**\n * Get module name\n */\n AreaSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'AreaSeries';\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n AreaSeries.prototype.doAnimation = function (series) {\n var option = series.animation;\n this.doLinearAnimation(series, option);\n };\n return AreaSeries;\n}(MultiColoredSeries));\nexport { AreaSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { withInRange } from '../../common/utils/helper';\nimport { ColumnBase } from './column-base';\n/**\n * `BarSeries` module is used to render the bar series.\n */\nvar BarSeries = /** @class */ (function (_super) {\n __extends(BarSeries, _super);\n function BarSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render Bar series.\n * @return {void}\n * @private\n */\n BarSeries.prototype.render = function (series) {\n var origin = Math.max(series.yAxis.visibleRange.min, 0);\n var sideBySideInfo = this.getSideBySideInfo(series);\n var rect;\n var argsData;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var pointBar = _a[_i];\n pointBar.symbolLocations = [];\n pointBar.regions = [];\n if (pointBar.visible && withInRange(series.points[pointBar.index - 1], pointBar, series.points[pointBar.index + 1], series)) {\n rect = this.getRectangle(pointBar.xValue + sideBySideInfo.start, pointBar.yValue, pointBar.xValue + sideBySideInfo.end, origin, series);\n argsData = this.triggerEvent(series, pointBar, series.interior, { width: series.border.width, color: series.border.color });\n if (!argsData.cancel) {\n this.updateSymbolLocation(pointBar, rect, series);\n this.drawRectangle(series, pointBar, rect, argsData);\n }\n }\n }\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n BarSeries.prototype.doAnimation = function (series) {\n this.animate(series);\n };\n /**\n * To destroy the bar series.\n * @return {void}\n * @private\n */\n BarSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n /**\n * Get module name\n */\n BarSeries.prototype.getModuleName = function () {\n return 'BarSeries';\n };\n return BarSeries;\n}(ColumnBase));\nexport { BarSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { valueToCoefficient, TextOption, inside, measureText } from '../../common/utils/helper';\nimport { Size, Rect, PathOption, CircleOption } from '../../common/utils/helper';\nimport { LineBase } from '../series/line-base';\nimport { textElement, valueToPolarCoefficient, CoefficientToVector } from '../../common/utils/helper';\n/**\n * Specifies the Polar Axis Layout.\n */\nvar axisPadding = 10;\nvar PolarRadarPanel = /** @class */ (function (_super) {\n __extends(PolarRadarPanel, _super);\n function PolarRadarPanel() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Measure the polar radar axis size.\n * @return {void}\n * @private\n */\n PolarRadarPanel.prototype.measureAxis = function (rect) {\n var chart = this.chart;\n this.initialClipRect = rect;\n this.seriesClipRect = new Rect(rect.x, rect.y, rect.width, rect.height);\n //Measure axis size calculation\n this.measureRowAxis(chart, this.initialClipRect);\n this.measureColumnAxis(chart, this.initialClipRect);\n this.calculateAxisSize();\n };\n PolarRadarPanel.prototype.measureRowAxis = function (chart, rect) {\n this.calculateRowSize(rect);\n var row = chart.rows[0];\n this.measureDefinition(row, chart, new Size(chart.availableSize.width, row.computedHeight), rect);\n };\n PolarRadarPanel.prototype.measureColumnAxis = function (chart, rect) {\n this.calculateColumnSize(rect);\n var column = chart.columns[0];\n this.measureDefinition(column, chart, new Size(column.computedWidth, chart.availableSize.height), rect);\n };\n /**\n * Measure the column and row in chart.\n * @return {void}\n * @private\n */\n PolarRadarPanel.prototype.measureDefinition = function (definition, chart, size, clipRect) {\n for (var _i = 0, _a = definition.axes; _i < _a.length; _i++) {\n var axis = _a[_i];\n axis.getModule(chart);\n axis.baseModule.calculateRangeAndInterval(size, axis);\n }\n };\n /**\n * Measure the axis.\n * @return {void}\n * @private\n */\n PolarRadarPanel.prototype.calculateAxisSize = function () {\n var chart = this.chart;\n var axis;\n var padding = 5;\n this.centerX = this.initialClipRect.width * 0.5 + this.initialClipRect.x;\n this.centerY = this.initialClipRect.height * 0.5 + this.initialClipRect.y;\n chart.radius = Math.min(this.initialClipRect.width, this.initialClipRect.height) / 2 - padding -\n chart.primaryXAxis.majorTickLines.height - chart.primaryXAxis.maxLabelSize.height;\n chart.radius = (chart.primaryXAxis.coefficient * chart.radius) / 100;\n this.seriesClipRect.y = this.centerY - chart.radius;\n this.seriesClipRect.x = this.centerX - chart.radius;\n this.seriesClipRect.height = 2 * chart.radius;\n this.seriesClipRect.width = 2 * chart.radius;\n this.calculateRowSize(this.seriesClipRect);\n axis = chart.primaryYAxis;\n axis.rect = this.seriesClipRect;\n this.calculateColumnSize(this.seriesClipRect);\n axis = chart.primaryXAxis;\n axis.rect = this.seriesClipRect;\n };\n /**\n * Measure the axis.\n * @return {void}\n * @private\n */\n PolarRadarPanel.prototype.measure = function () {\n var chart = this.chart;\n chart.verticalAxes.push(chart.primaryYAxis);\n var row = chart.rows[0];\n row.axes[0] = chart.primaryYAxis;\n chart.rows[0] = row;\n chart.horizontalAxes.push(chart.primaryXAxis);\n var column = chart.columns[0];\n column.axes[0] = chart.primaryXAxis;\n chart.columns[0] = column;\n };\n /**\n * Measure the row size.\n * @return {void}\n */\n PolarRadarPanel.prototype.calculateRowSize = function (rect) {\n /*! Calculate row size */\n var chart = this.chart;\n var row = chart.rows[0];\n row.computedHeight = rect.height / 2;\n row.computedTop = rect.y;\n chart.rows[0] = row;\n };\n /**\n * Measure the row size.\n * @return {void}\n */\n PolarRadarPanel.prototype.calculateColumnSize = function (rect) {\n /*! Calculate column size */\n var chart = this.chart;\n var column = chart.columns[0];\n column.computedLeft = rect.x;\n column.computedWidth = rect.width;\n chart.columns[0] = column;\n };\n /**\n * To render the axis element.\n * @return {void}\n * @private\n */\n PolarRadarPanel.prototype.renderAxes = function () {\n var axis;\n var chart = this.chart;\n this.startAngle = chart.primaryXAxis.startAngle;\n var axisElement = chart.renderer.createGroup({ id: chart.element.id + 'AxisCollection' });\n var axisLineElement = chart.renderer.createGroup({ id: chart.element.id + 'AxisOutsideCollection' });\n for (var i = 0, len = chart.axisCollections.length; i < len; i++) {\n this.element = chart.renderer.createGroup({ id: chart.element.id + 'AxisGroup' + i });\n axis = chart.axisCollections[i];\n if (axis.orientation === 'Horizontal') {\n if (axis.majorGridLines.width > 0 || axis.majorTickLines.width > 0) {\n this.drawXAxisGridLine(axis, i);\n }\n if (axis.visible) {\n this.drawXAxisLabels(axis, i);\n }\n }\n else {\n this.drawYAxisGridLine(axis, i);\n if (axis.lineStyle.width > 0) {\n this.drawYAxisLine(axis, i, axis.plotOffset, 0);\n }\n if (axis.visible) {\n this.drawYAxisLabels(axis, i);\n }\n }\n axisElement.appendChild(this.element);\n }\n axisElement.appendChild(this.element);\n chart.svgObject.appendChild(axisElement);\n return axisLineElement;\n };\n PolarRadarPanel.prototype.drawYAxisLine = function (axis, index, plotX, plotY) {\n var chart = this.chart;\n var optionsLine = {};\n var vector = CoefficientToVector(valueToPolarCoefficient(axis.visibleLabels[0].value, axis), this.startAngle);\n var axisLine = 'M ' + this.centerX + ' ' + this.centerY + 'L ' +\n (this.centerX + chart.radius * vector.x) + ' ' + (this.centerY + chart.radius * vector.y);\n optionsLine = {\n 'id': chart.element.id + 'AxisLine_' + index,\n 'd': axisLine,\n 'stroke-dasharray': axis.lineStyle.dashArray,\n 'stroke-width': axis.lineStyle.width,\n 'stroke': axis.lineStyle.color || chart.themeStyle.axisLine\n };\n chart.yAxisElements.appendChild(chart.renderer.drawPath(optionsLine));\n };\n PolarRadarPanel.prototype.drawYAxisLabels = function (axis, index) {\n var chart = this.chart;\n var elementSize;\n var options;\n var pointX = 0;\n var pointY = 0;\n var vector;\n var angle = this.startAngle < 0 ? this.startAngle + 360 : this.startAngle;\n var anchor = 'middle';\n var radius;\n var padding = 5;\n var labelElement = chart.renderer.createGroup({ id: chart.element.id + 'AxisLabels' + index });\n vector = CoefficientToVector(valueToPolarCoefficient(axis.visibleLabels[0].value, axis), this.startAngle);\n for (var i = 0, len = axis.visibleLabels.length; i < len; i++) {\n radius = chart.radius * valueToCoefficient(axis.visibleLabels[i].value, axis);\n elementSize = axis.visibleLabels[i].size;\n radius = chart.radius * valueToCoefficient(axis.visibleLabels[i].value, axis);\n pointX = (this.centerX + radius * vector.x) + ((axis.majorTickLines.height + elementSize.width / 2 + padding / 2)\n * (Math.cos(angle * Math.PI / 180)) * (axis.labelPosition === 'Inside' ? 1 : -1));\n pointY = (this.centerY + radius * vector.y) + ((axis.majorTickLines.height + elementSize.height / 2)\n * (Math.sin(angle * Math.PI / 180)) * (axis.labelPosition === 'Inside' ? 1 : -1));\n options = new TextOption(chart.element.id + index + '_AxisLabel_' + i, pointX, pointY + (elementSize.height / 4), anchor, axis.visibleLabels[i].text);\n textElement(options, axis.labelStyle, axis.labelStyle.color || chart.themeStyle.axisLabel, labelElement);\n }\n chart.yAxisElements.appendChild(labelElement);\n };\n PolarRadarPanel.prototype.drawYAxisGridLine = function (axis, index) {\n var chart = this.chart;\n var options;\n var radius;\n var majorTick = '';\n var majorGrid = '';\n var vector;\n var vector2;\n var angle = this.startAngle < 0 ? this.startAngle + 360 : this.startAngle;\n var rect = axis.rect;\n var x1;\n var y1;\n var x2;\n var y2;\n var border = {\n color: axis.majorGridLines.color || chart.themeStyle.majorGridLine,\n width: axis.majorGridLines.width\n };\n if (axis.majorGridLines.width > 0) {\n if (chart.visibleSeries[0].type === 'Polar') {\n for (var j = 0; j < axis.visibleLabels.length; j++) {\n radius = chart.radius * valueToCoefficient(axis.visibleLabels[j].value, axis);\n options = new CircleOption(chart.element.id + '_MajorGridLine_' + index, 'transparent', border, axis.majorGridLines.width, this.centerX, this.centerY, radius);\n this.element.appendChild(chart.renderer.drawCircle(options));\n }\n }\n else {\n for (var j = 0; j < axis.visibleLabels.length; j++) {\n radius = chart.radius * valueToCoefficient(axis.visibleLabels[j].value, axis);\n for (var i = 0, len = chart.primaryXAxis.visibleLabels.length; i < len; i++) {\n vector = CoefficientToVector(valueToPolarCoefficient(chart.primaryXAxis.visibleLabels[i].value, chart.primaryXAxis), this.startAngle);\n if (i + 1 < len) {\n vector2 = CoefficientToVector(valueToPolarCoefficient(chart.primaryXAxis.visibleLabels[i + 1].value, chart.primaryXAxis), this.startAngle);\n }\n else {\n vector2 = CoefficientToVector(valueToPolarCoefficient(chart.primaryXAxis.visibleLabels[0].value, chart.primaryXAxis), this.startAngle);\n }\n x1 = this.centerX + radius * vector.x;\n y1 = this.centerY + radius * vector.y;\n x2 = this.centerX + radius * vector2.x;\n y2 = this.centerY + radius * vector2.y;\n majorGrid = majorGrid.concat('M' + ' ' + x1 + ' ' + y1 + ' ' + 'L' + ' ' + x2 + ' ' + y2 + ' ');\n }\n }\n options = new PathOption(chart.element.id + '_MajorGridLine_' + index, 'transparent', axis.majorGridLines.width, axis.majorGridLines.color || chart.themeStyle.majorGridLine, null, null, majorGrid);\n this.element.appendChild(chart.renderer.drawPath(options));\n }\n }\n if (axis.majorTickLines.width > 0) {\n vector = CoefficientToVector(valueToPolarCoefficient(axis.visibleLabels[0].value, axis), this.startAngle);\n for (var i = 0; i < axis.visibleLabels.length; i++) {\n radius = chart.radius * valueToCoefficient(axis.visibleLabels[i].value, axis);\n x1 = this.centerX + radius * vector.x;\n y1 = this.centerY + radius * vector.y;\n x2 = x1 + (axis.majorTickLines.height * (Math.cos(angle * Math.PI / 180)) * (axis.tickPosition === 'Inside' ? 1 : -1));\n y2 = y1 + (axis.majorTickLines.height * (Math.sin(angle * Math.PI / 180)) * (axis.tickPosition === 'Inside' ? 1 : -1));\n majorTick = majorTick.concat('M ' + x1 + ' ' + y1 +\n ' L ' + x2 + ' ' + y2 + ' ');\n }\n }\n this.renderTickLine(axis, index, majorTick, '');\n };\n PolarRadarPanel.prototype.drawXAxisGridLine = function (axis, index) {\n var chart = this.chart;\n var tempInterval;\n var vector;\n var majorGrid = '';\n var majorTick = '';\n var minorGirdLine = '';\n var minorTickLine = '';\n var x1 = this.centerX;\n var x2;\n var y1 = this.centerY;\n var y2;\n var minorDirection;\n var tickSize = axis.majorTickLines.height;\n var rect = axis.rect;\n var length = axis.visibleLabels.length;\n //Gridlines\n for (var i = 0; i < length; i++) {\n tempInterval = axis.visibleLabels[i].value;\n vector = CoefficientToVector(valueToPolarCoefficient(axis.visibleLabels[i].value, axis), this.startAngle);\n x2 = this.centerX + chart.radius * vector.x;\n y2 = this.centerY + chart.radius * vector.y;\n var xLoc = x2 + (axis.majorTickLines.height * vector.x * (axis.tickPosition === 'Inside' ? -1 : 1));\n var yLoc = y2 + (axis.majorTickLines.height * vector.y * (axis.tickPosition === 'Inside' ? -1 : 1));\n majorGrid = majorGrid.concat('M ' + x1 + ' ' + y1 + ' ' + 'L' + x2 + ' ' + y2);\n majorTick = majorTick.concat('M ' + x2 + ' ' + y2 +\n ' L ' + xLoc + ' ' + yLoc + ' ');\n if (axis.minorTicksPerInterval > 0 && (axis.minorGridLines.width > 0 || axis.minorTickLines.width > 0)\n && axis.valueType !== 'Category' && chart.visibleSeries[0].type !== 'Radar') {\n minorDirection = this.drawAxisMinorLine(axis, tempInterval, minorGirdLine, minorTickLine);\n minorGirdLine = minorDirection[0];\n minorTickLine = minorDirection[1];\n }\n }\n this.renderTickLine(axis, index, majorTick, minorTickLine);\n this.renderGridLine(axis, index, majorGrid, minorGirdLine);\n };\n PolarRadarPanel.prototype.drawAxisMinorLine = function (axis, tempInterval, minorGird, minorTick) {\n var value = tempInterval;\n var x;\n var y;\n var vector;\n var range = axis.visibleRange;\n var direction = [];\n var tickSize = axis.minorTickLines.height;\n var rect = axis.rect;\n for (var j = 0; j < axis.minorTicksPerInterval; j++) {\n value += (axis.valueType === 'DateTime' ? axis.dateTimeInterval : axis.visibleRange.interval) /\n (axis.minorTicksPerInterval + 1);\n if (inside(value, range)) {\n vector = CoefficientToVector(valueToPolarCoefficient(value, axis), this.startAngle);\n x = this.centerX + this.chart.radius * vector.x;\n y = this.centerY + this.chart.radius * vector.y;\n var tickXSize = x + (axis.minorTickLines.height * vector.x * (axis.tickPosition === 'Inside' ? -1 : 1));\n var tickYSize = y + (axis.minorTickLines.height * vector.y * (axis.tickPosition === 'Inside' ? -1 : 1));\n minorGird = minorGird.concat('M' + ' ' + this.centerX + ' ' + this.centerY\n + 'L ' + x + ' ' + y);\n minorTick = minorTick.concat('M' + ' ' + x + ' ' + y + 'L' + ' ' + (tickXSize) + ' ' +\n (tickYSize));\n }\n }\n direction.push(minorGird);\n direction.push(minorTick);\n return direction;\n };\n /**\n * To render the axis label.\n * @return {void}\n * @private\n */\n PolarRadarPanel.prototype.drawXAxisLabels = function (axis, index) {\n var chart = this.chart;\n var pointX = 0;\n var elementSize;\n var pointY = 0;\n var labelElement = chart.renderer.createGroup({ id: chart.element.id + 'AxisLabels' + index });\n var options;\n var vector;\n var labelText;\n var firstLabelX;\n var islabelInside = axis.labelPosition === 'Inside';\n var padding = 5;\n var lastLabelX;\n var textAnchor = '';\n var ticksbwtLabel = axis.valueType === 'Category' && axis.labelPlacement === 'BetweenTicks'\n && chart.visibleSeries[0].type !== 'Radar' ? 0.5 : 0;\n var radius = chart.radius + axis.majorTickLines.height;\n radius = (islabelInside) ? -radius : radius;\n for (var i = 0, len = axis.visibleLabels.length; i < len; i++) {\n vector = CoefficientToVector(valueToPolarCoefficient(axis.visibleLabels[i].value + ticksbwtLabel, axis), this.startAngle);\n if (!isNaN(vector.x) && !isNaN(vector.y)) {\n pointX = this.centerX + (radius + axis.majorTickLines.height + padding) * vector.x;\n pointY = this.centerY + (radius + axis.majorTickLines.height + padding) * vector.y;\n textAnchor = parseFloat(pointX.toFixed(1)) === parseFloat(this.centerX.toFixed(1)) ? 'middle' :\n ((pointX < this.centerX && !islabelInside) || (pointX > this.centerX && islabelInside)) ? 'end' : 'start';\n }\n labelText = axis.visibleLabels[i].text;\n if (i === 0) {\n firstLabelX = pointX;\n }\n else if (i === axis.visibleLabels.length - 1 && axis.valueType !== 'Category') {\n lastLabelX = measureText(labelText, axis.labelStyle).height;\n lastLabelX += pointX;\n labelText = (lastLabelX > firstLabelX) ? '' : labelText;\n }\n options = new TextOption(chart.element.id + index + '_AxisLabel_' + i, pointX, pointY, textAnchor, labelText, '', 'central');\n textElement(options, axis.labelStyle, axis.labelStyle.color || chart.themeStyle.axisLabel, labelElement);\n }\n this.element.appendChild(labelElement);\n };\n PolarRadarPanel.prototype.renderTickLine = function (axis, index, majorTickLine, minorTickLine) {\n var tickOptions;\n var chart = this.chart;\n if (axis.majorTickLines.width > 0) {\n tickOptions = new PathOption(chart.element.id + '_MajorTickLine_' + index, 'transparent', axis.majorTickLines.width, axis.majorTickLines.color || chart.themeStyle.majorTickLine, null, null, majorTickLine);\n chart.yAxisElements.appendChild(chart.renderer.drawPath(tickOptions));\n }\n if (axis.minorTickLines.width > 0) {\n tickOptions = new PathOption(chart.element.id + '_MinorTickLine_' + index, 'transparent', axis.minorTickLines.width, axis.minorTickLines.color || chart.themeStyle.minorTickLine, null, null, minorTickLine);\n chart.yAxisElements.appendChild(chart.renderer.drawPath(tickOptions));\n }\n };\n PolarRadarPanel.prototype.renderGridLine = function (axis, index, majorGrid, minorGird) {\n var chart = this.chart;\n var gridOptions;\n if (axis.majorGridLines.width > 0) {\n gridOptions = new PathOption(chart.element.id + '_MajorGridLine_' + index, 'transparent', axis.majorGridLines.width, axis.majorGridLines.color || chart.themeStyle.majorGridLine, null, axis.majorGridLines.dashArray, majorGrid);\n this.element.appendChild(chart.renderer.drawPath(gridOptions));\n }\n if (axis.minorGridLines.width > 0) {\n gridOptions = new PathOption(chart.element.id + '_MinorGridLine_' + index, 'transparent', axis.minorGridLines.width, axis.minorGridLines.color || chart.themeStyle.minorGridLine, null, axis.minorGridLines.dashArray, minorGird);\n this.element.appendChild(chart.renderer.drawPath(gridOptions));\n }\n };\n return PolarRadarPanel;\n}(LineBase));\nexport { PolarRadarPanel };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { withInRange, PathOption, logBase, markerAnimate, PolarArc, valueToCoefficient, firstToLowerCase } from '../../common/utils/helper';\nimport { PolarRadarPanel } from '../axis/polar-radar-panel';\nimport { pointRender } from '../../common/model/constants';\nimport { Animation } from '@syncfusion/ej2-base';\n/**\n * `PolarSeries` module is used to render the polar series.\n */\nvar PolarSeries = /** @class */ (function (_super) {\n __extends(PolarSeries, _super);\n function PolarSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render Polar Series.\n * @return {void}.\n * @private\n */\n PolarSeries.prototype.render = function (series) {\n var seriesType = firstToLowerCase(series.drawType);\n if (series.drawType.indexOf('Column') > -1) {\n this.columnDrawTypeRender(series);\n }\n else {\n series.chart[seriesType + 'SeriesModule'].render(series, series.xAxis, series.yAxis, series.chart.requireInvertedAxis);\n }\n };\n /**\n * Render Column DrawType.\n * @return {void}.\n * @private\n */\n PolarSeries.prototype.columnDrawTypeRender = function (series) {\n var visiblePoints = series.points;\n var rect;\n var options;\n var argsData;\n var startAngle;\n var endAngle;\n var itemCurrentXPos;\n var radius;\n var pointStartAngle;\n var pointEndAngle;\n var x1;\n var x2;\n var y1;\n var y2;\n var startValue;\n var endValue;\n var innerRadius;\n var centerX = (series.clipRect.width / 2) + series.clipRect.x;\n var dStartX;\n var dStartY;\n var centerY = (series.clipRect.height / 2) + series.clipRect.y;\n var dEndX;\n var dEndY;\n var axisInversed = series.xAxis.isInversed ? 1 : 0;\n var direction = '';\n var sumofYValues = 0;\n var interval = (series.points[1] ? series.points[1].xValue : 2 * series.points[0].xValue) - series.points[0].xValue;\n var ticks = series.xAxis.valueType === 'Category' && series.xAxis.labelPlacement === 'BetweenTicks' ? 0 : interval / 2;\n var rangeInterval = series.xAxis.valueType === 'DateTime' ? series.xAxis.dateTimeInterval : 1;\n var min = series.xAxis.actualRange.min;\n var inversedValue;\n this.getSeriesPosition(series);\n var position = series.xAxis.isInversed ? (series.rectCount - 1 - series.position) : series.position;\n var ticksbwtLabel = series.xAxis.valueType === 'Category' && series.xAxis.labelPlacement === 'BetweenTicks' ? 0.5\n : 0.5 - (series.rectCount / 2);\n do {\n sumofYValues += rangeInterval;\n min += rangeInterval;\n } while (min <= series.xAxis.actualRange.max - (series.xAxis.valueType === 'Category' ? 0 : 1));\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n point.symbolLocations = [];\n point.regions = [];\n if (point.visible && withInRange(series.points[point.index - 1], point, series.points[point.index + 1], series)) {\n inversedValue = series.xAxis.isInversed ? (series.xAxis.visibleRange.max - point.xValue) :\n point.xValue - series.xAxis.visibleRange.min;\n itemCurrentXPos = (inversedValue) +\n ((interval / series.rectCount) * position - ticks) + (sumofYValues / 360 * series.xAxis.startAngle);\n itemCurrentXPos = (((itemCurrentXPos) / (sumofYValues)));\n startAngle = 2 * Math.PI * (itemCurrentXPos + series.xAxis.startAngle);\n endAngle = 2 * Math.PI * ((itemCurrentXPos + series.xAxis.startAngle) + (interval / series.rectCount) / (sumofYValues));\n pointStartAngle = startAngle;\n pointEndAngle = endAngle;\n startAngle = (startAngle - 0.5 * Math.PI);\n endAngle = (endAngle - 0.5 * Math.PI) - 0.000001;\n if (series.drawType === 'StackingColumn' || series.drawType === 'RangeColumn') {\n startValue = series.drawType === 'RangeColumn' ? point.low : series.stackedValues.startValues[point.index];\n endValue = series.drawType === 'RangeColumn' ? point.high : series.stackedValues.endValues[point.index];\n endValue = (series.yAxis.valueType === 'Logarithmic' ?\n logBase(endValue === 0 ? 1 : endValue, series.yAxis.logBase) : endValue);\n endValue = endValue > series.yAxis.actualRange.max ? series.yAxis.actualRange.max : endValue;\n radius = startValue === endValue ? 0 : series.chart.radius * valueToCoefficient(endValue, series.yAxis);\n x1 = centerX + radius * Math.cos(startAngle);\n x2 = centerX + radius * Math.cos(endAngle);\n y1 = centerY + radius * Math.sin(startAngle);\n y2 = centerY + radius * Math.sin(endAngle);\n innerRadius = series.chart.radius * valueToCoefficient((startValue === 0 && series.yAxis.visibleRange.min !== 0) ? series.yAxis.visibleRange.min : startValue, series.yAxis);\n dStartX = centerX + innerRadius * Math.cos(startAngle);\n dStartY = centerY + innerRadius * Math.sin(startAngle);\n dEndX = centerX + innerRadius * Math.cos(endAngle);\n dEndY = centerY + innerRadius * Math.sin(endAngle);\n if (series.type === 'Polar') {\n direction = ('M' + ' ' + x1 + ' ' + y1 + ' ' + 'A' + ' ' + radius + ' ' + radius + ' ' + '0' + ' '\n + '0' + ' ' + 1 + ' ' + x2 + ' ' + y2 + ' ' + 'L' + ' ' + dEndX + ' ' + dEndY + ' ' +\n 'A' + ' ' + innerRadius + ' ' + innerRadius + ' ' + '1' + ' ' + '0' + ' ' + '0' + ' '\n + dStartX + ' ' + dStartY + ' ' + 'z');\n }\n else {\n direction = ('M' + ' ' + x1 + ' ' + y1 + ' ' + 'L' + ' ' + x2 + ' ' + y2 + ' ' + 'L'\n + dEndX + ' ' + dEndY + ' ' + 'L' + ' ' + dStartX + ' ' + dStartY + ' ' + 'z');\n }\n point.regionData = new PolarArc(pointStartAngle, pointEndAngle, innerRadius, radius, itemCurrentXPos);\n }\n else {\n endValue = point.yValue > series.yAxis.actualRange.max ? series.yAxis.actualRange.max : point.yValue;\n radius = series.chart.radius * valueToCoefficient((series.yAxis.valueType === 'Logarithmic' ? logBase(endValue, series.yAxis.logBase) : endValue), series.yAxis);\n x1 = centerX + radius * Math.cos(startAngle);\n x2 = centerX + radius * Math.cos(endAngle);\n y1 = centerY + radius * Math.sin(startAngle);\n y2 = centerY + radius * Math.sin(endAngle);\n if (series.type === 'Polar') {\n direction = ('M' + ' ' + x1 + ' ' + y1 + ' ' + 'A' + ' ' + radius + ' ' + radius + ' ' + '0' + ' ' +\n '0' + ' ' + 1 + ' ' + x2 + ' ' + y2 + ' ' + 'L' + ' ' + centerX + ' ' +\n centerY + ' ' + 'z');\n }\n else {\n direction = ('M' + ' ' + x1 + ' ' + y1 + ' ' + 'L' + ' ' + x2 + ' ' + y2 + ' ' + 'L' + ' '\n + centerX + ' ' + centerY + ' ' + 'z');\n }\n point.regionData = new PolarArc(pointStartAngle, pointEndAngle, 0, radius, itemCurrentXPos);\n }\n argsData = this.triggerEvent(series.chart, series, point);\n options = new PathOption(series.chart.element.id + '_Series_' + series.index + '_Point_' + point.index, argsData.fill, argsData.border.width, argsData.border.color, series.opacity, series.dashArray, direction);\n if (!argsData.cancel) {\n this.appendLinePath(options, series, '');\n if (series.type === 'Polar') {\n point.symbolLocations.push({\n x: centerX + radius * Math.cos((startAngle + (endAngle - startAngle) / 2)),\n y: centerY + radius * Math.sin((startAngle + (endAngle - startAngle) / 2))\n });\n }\n else {\n point.symbolLocations.push({ x: (x1 + x2) / 2, y: (y1 + y2) / 2 });\n }\n }\n }\n }\n series.isRectSeries = true;\n };\n /**\n * To trigger the point rendering event.\n * @return {void}\n * @private\n */\n PolarSeries.prototype.triggerEvent = function (chart, series, point) {\n var argsData = {\n cancel: false, name: pointRender, series: series, point: point,\n fill: series.setPointColor(point, series.interior),\n border: series.setBorderColor(point, { width: series.border.width, color: series.border.color })\n };\n chart.trigger(pointRender, argsData);\n point.color = argsData.fill;\n return argsData;\n };\n /** get position for column drawtypes\n * @return {void}.\n * @private\n */\n PolarSeries.prototype.getSeriesPosition = function (series) {\n var chart = series.chart;\n var seriesCollection = [];\n var stackingGroup = [];\n var vSeries = { rectCount: 0, position: null };\n for (var _i = 0, _a = chart.visibleSeries; _i < _a.length; _i++) {\n var series_1 = _a[_i];\n if (series_1.visible && (series_1.type === 'Polar' || series_1.type === 'Radar') && series_1.drawType.indexOf('Column') !== -1) {\n seriesCollection.push(series_1);\n }\n }\n seriesCollection.forEach(function (series) {\n if (series.drawType.indexOf('Stacking') !== -1) {\n if (series.stackingGroup) {\n if (stackingGroup[series.stackingGroup] === undefined) {\n series.position = vSeries.rectCount;\n stackingGroup[series.stackingGroup] = vSeries.rectCount++;\n }\n else {\n series.position = stackingGroup[series.stackingGroup];\n }\n }\n else {\n if (vSeries.position === null) {\n series.position = vSeries.rectCount;\n vSeries.position = vSeries.rectCount++;\n }\n else {\n series.position = vSeries.position;\n }\n }\n }\n else {\n series.position = vSeries.rectCount++;\n }\n });\n seriesCollection.forEach(function (value) {\n value.rectCount = vSeries.rectCount;\n });\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n PolarSeries.prototype.doAnimation = function (series) {\n var option = series.animation;\n var duration = series.animation.duration;\n var delay = series.animation.delay;\n var rectElements = series.seriesElement.childNodes;\n var count = 1;\n if (series.drawType === 'Scatter') {\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n if (!point.symbolLocations.length || !rectElements[count]) {\n continue;\n }\n markerAnimate(rectElements[count], delay, duration, series, point.index, point.symbolLocations[0], false);\n count++;\n }\n }\n else {\n for (count = 1; count < rectElements.length; count++) {\n this.doPolarRadarAnimation(rectElements[count], delay, duration, series);\n }\n }\n };\n /**\n * To do the Polar Radar draw type column animation.\n * @return {void}\n * @private\n */\n PolarSeries.prototype.doPolarRadarAnimation = function (animateElement, delay, duration, series) {\n var chartcenterX = series.clipRect.width / 2 + series.clipRect.x;\n var chartcenterY = series.clipRect.height / 2 + series.clipRect.y;\n var elementHeight = 0;\n animateElement.style.visibility = 'hidden';\n new Animation({}).animate(animateElement, {\n duration: duration,\n delay: delay,\n progress: function (args) {\n if (args.timeStamp > args.delay) {\n args.element.style.visibility = 'visible';\n elementHeight = ((args.timeStamp - args.delay) / args.duration);\n animateElement.setAttribute('transform', 'translate(' + chartcenterX\n + ' ' + chartcenterY + ') scale(' + elementHeight + ') translate(' + (-chartcenterX) + ' ' + (-chartcenterY) + ')');\n }\n },\n end: function (model) {\n animateElement.style.visibility = 'visible';\n animateElement.removeAttribute('transform');\n series.chart.trigger('animationComplete', { series: series });\n }\n });\n };\n /**\n * Get module name.\n */\n PolarSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'PolarSeries';\n };\n /**\n * To destroy the polar series.\n * @return {void}\n * @private\n */\n PolarSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return PolarSeries;\n}(PolarRadarPanel));\nexport { PolarSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { firstToLowerCase } from '../../common/utils/helper';\nimport { PolarSeries } from '../series/polar-series';\n/**\n * `RadarSeries` module is used to render the radar series.\n */\nvar RadarSeries = /** @class */ (function (_super) {\n __extends(RadarSeries, _super);\n function RadarSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render radar Series.\n * @return {void}.\n * @private\n */\n RadarSeries.prototype.render = function (series) {\n var seriesType = firstToLowerCase(series.drawType);\n if (series.drawType.indexOf('Column') === -1) {\n series.chart[seriesType + 'SeriesModule'].render(series, series.xAxis, series.yAxis, series.chart.requireInvertedAxis);\n }\n else {\n this.columnDrawTypeRender(series);\n }\n };\n /**\n * Get module name.\n */\n RadarSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'RadarSeries';\n };\n /**\n * To destroy the radar series.\n * @return {void}\n * @private\n */\n RadarSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return RadarSeries;\n}(PolarSeries));\nexport { RadarSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { withInRange } from '../../common/utils/helper';\nimport { ColumnBase } from './column-base';\n/**\n * `StackingBarSeries` module is used to render the stacking bar series.\n */\nvar StackingBarSeries = /** @class */ (function (_super) {\n __extends(StackingBarSeries, _super);\n function StackingBarSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render the Stacking bar series.\n * @return {void}\n * @private\n */\n StackingBarSeries.prototype.render = function (series) {\n var origin = Math.max(series.yAxis.visibleRange.min, 0);\n var sideBySideInfo = this.getSideBySideInfo(series);\n var stackedValue = series.stackedValues;\n var rect;\n var argsData;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var pointStack = _a[_i];\n pointStack.symbolLocations = [];\n pointStack.regions = [];\n if (pointStack.visible && withInRange(series.points[pointStack.index - 1], pointStack, series.points[pointStack.index + 1], series)) {\n rect = this.getRectangle(pointStack.xValue + sideBySideInfo.start, stackedValue.endValues[pointStack.index], pointStack.xValue + sideBySideInfo.end, stackedValue.startValues[pointStack.index], series);\n argsData = this.triggerEvent(series, pointStack, series.interior, { width: series.border.width, color: series.border.color });\n if (!argsData.cancel) {\n this.drawRectangle(series, pointStack, rect, argsData);\n this.updateSymbolLocation(pointStack, rect, series);\n }\n }\n }\n };\n /**\n * To destroy the stacking bar.\n * @return {void}\n * @private\n */\n StackingBarSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n /**\n * Get module name.\n */\n StackingBarSeries.prototype.getModuleName = function () {\n return 'StackingBarSeries';\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n StackingBarSeries.prototype.doAnimation = function (series) {\n this.animate(series);\n };\n return StackingBarSeries;\n}(ColumnBase));\nexport { StackingBarSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { withInRange, PathOption } from '../../common/utils/helper';\nimport { ColumnBase } from './column-base';\n/**\n * `CandleSeries` module is used to render the candle series.\n */\nvar CandleSeries = /** @class */ (function (_super) {\n __extends(CandleSeries, _super);\n function CandleSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render Candle series.\n * @return {void}\n * @private\n */\n CandleSeries.prototype.render = function (series) {\n var sideBySideInfo = this.getSideBySideInfo(series);\n var argsData;\n var borderWidth = Math.max(series.border.width, 1);\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n var direction = '';\n var centerRegion = void 0;\n var tickRegion = void 0;\n var midPoint = void 0;\n midPoint = (sideBySideInfo.start + sideBySideInfo.end) / 2;\n //initializing after zooming and also normal initialization\n point.regions = [];\n point.symbolLocations = [];\n if (point.visible && withInRange(series.points[point.index - 1], point, series.points[point.index + 1], series)) {\n //region to cover the top and bottom ticks\n tickRegion = this.getRectangle((point.xValue + sideBySideInfo.median), Math.max(point.high, point.low), (point.xValue + sideBySideInfo.median), Math.min(point.high, point.low), series);\n if (!series.chart.requireInvertedAxis) {\n tickRegion.x -= borderWidth / 2;\n tickRegion.width = borderWidth;\n }\n else {\n tickRegion.y -= borderWidth / 2;\n tickRegion.height = borderWidth;\n }\n //get middleRect\n centerRegion = this.getRectangle((point.xValue + sideBySideInfo.start), Math.max(point.open, point.close), (point.xValue + sideBySideInfo.end), Math.min(point.open, point.close), series);\n direction = this.getPathString(tickRegion, centerRegion, series);\n argsData = this.triggerPointRenderEvent(series, point);\n if (!argsData.cancel) {\n this.drawCandle(series, point, centerRegion, argsData, direction);\n this.updateSymbolLocation(point, tickRegion, series);\n this.updateSymbolLocation(point, centerRegion, series);\n }\n }\n }\n };\n /**\n * Trigger point rendering event\n */\n CandleSeries.prototype.triggerPointRenderEvent = function (series, point) {\n var fill;\n fill = this.getCandleColor(point, series);\n var border = { color: series.border.color, width: Math.max(series.border.width, 1) };\n return this.triggerEvent(series, point, fill, border);\n };\n /**\n * Find the color of the candle\n * @param series\n * @private\n */\n CandleSeries.prototype.getCandleColor = function (point, series) {\n var currentPoint = point;\n var previousPoint = series.points[point.index - 1];\n if (series.enableSolidCandles === false) {\n if (!previousPoint) {\n return series.bearFillColor;\n }\n else {\n return previousPoint.close > point.close ? series.bullFillColor :\n series.bearFillColor;\n }\n }\n else {\n return point.open > point.close ? series.bullFillColor :\n series.bearFillColor;\n }\n };\n /**\n * Finds the path of the candle shape\n * @param Series\n * @private\n */\n CandleSeries.prototype.getPathString = function (topRect, midRect, series) {\n var direction = '';\n var width = series.chart.requireInvertedAxis ? topRect.height : topRect.width;\n var center = series.chart.requireInvertedAxis ? topRect.y + topRect.height / 2 :\n topRect.x + topRect.width / 2;\n //tick 1 segment\n direction += !series.chart.requireInvertedAxis ?\n 'M' + ' ' + (center) + ' ' + (topRect.y) + ' ' + 'L' + ' ' + (center) + ' ' + midRect.y :\n 'M' + ' ' + (topRect.x) + ' ' + (center) + ' ' + 'L' + ' ' + (midRect.x) + ' ' + center;\n direction = direction.concat(' M' + ' ' + (midRect.x) + ' ' + (midRect.y) + ' ' +\n 'L' + ' ' + (midRect.x + midRect.width) + ' ' + (midRect.y) + ' ' +\n 'L' + ' ' + (midRect.x + midRect.width) + ' ' +\n (midRect.y + midRect.height) + ' ' +\n 'L' + ' ' + (midRect.x) + ' ' + (midRect.y + midRect.height) +\n ' ' + 'Z');\n direction += !series.chart.requireInvertedAxis ?\n ' M' + ' ' + (center) + ' ' + (midRect.y + midRect.height) + ' ' + 'L' + ' ' + (center) + ' ' + (topRect.y +\n topRect.height) :\n ' M' + ' ' + (midRect.x + midRect.width) + ' ' + (center) + ' ' + 'L' + ' ' +\n (topRect.x + topRect.width) + ' ' + center;\n return direction;\n };\n /**\n * Draws the candle shape\n * @param series\n * @private\n */\n CandleSeries.prototype.drawCandle = function (series, point, rect, argsData, direction) {\n var check = series.chart.requireInvertedAxis ? rect.height : rect.width;\n if (check <= 0) {\n return null;\n }\n var fill = !series.enableSolidCandles ?\n (point.open > point.close ? argsData.fill : 'transparent') : argsData.fill;\n argsData.border.color = argsData.fill;\n var options = new PathOption(series.chart.element.id + '_Series_' + series.index + '_Point_' + point.index, fill, argsData.border.width, argsData.border.color, series.opacity, series.dashArray, direction);\n var candleElement = series.chart.renderer.drawPath(options);\n candleElement.setAttribute('aria-label', point.x.toString() + ':' + point.high.toString()\n + ':' + point.low.toString() + ':' + point.close.toString() + ':' + point.open.toString());\n series.seriesElement.appendChild(candleElement);\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n CandleSeries.prototype.doAnimation = function (series) {\n this.animate(series);\n };\n /**\n * Get module name.\n */\n CandleSeries.prototype.getModuleName = function () {\n return 'CandleSeries';\n /**\n * return the module name\n */\n };\n /**\n * To destroy the candle series.\n * @return {void}\n * @private\n */\n CandleSeries.prototype.destroy = function (chart) {\n /**\n * Destroys the candle series.\n */\n };\n return CandleSeries;\n}(ColumnBase));\nexport { CandleSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { withInRange } from '../../common/utils/helper';\nimport { ColumnBase } from './column-base';\n/**\n * `StackingColumnSeries` module used to render the stacking column series.\n */\nvar StackingColumnSeries = /** @class */ (function (_super) {\n __extends(StackingColumnSeries, _super);\n function StackingColumnSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render the Stacking column series.\n * @return {void}\n * @private\n */\n StackingColumnSeries.prototype.render = function (series) {\n series.isRectSeries = true;\n var origin = Math.max(series.yAxis.visibleRange.min, 0);\n var sideBySideInfo = this.getSideBySideInfo(series);\n var rect;\n var argsData;\n var stackedValue = series.stackedValues;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n point.symbolLocations = [];\n point.regions = [];\n if (point.visible && withInRange(series.points[point.index - 1], point, series.points[point.index + 1], series)) {\n rect = this.getRectangle(point.xValue + sideBySideInfo.start, stackedValue.endValues[point.index], point.xValue + sideBySideInfo.end, stackedValue.startValues[point.index], series);\n argsData = this.triggerEvent(series, point, series.interior, { width: series.border.width, color: series.border.color });\n if (!argsData.cancel) {\n this.drawRectangle(series, point, rect, argsData);\n this.updateSymbolLocation(point, rect, series);\n }\n }\n }\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n StackingColumnSeries.prototype.doAnimation = function (series) {\n this.animate(series);\n };\n /**\n * To destroy the stacking column.\n * @return {void}\n * @private\n */\n StackingColumnSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n /**\n * Get module name.\n */\n StackingColumnSeries.prototype.getModuleName = function () {\n return 'StackingColumnSeries';\n };\n return StackingColumnSeries;\n}(ColumnBase));\nexport { StackingColumnSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { PathOption, getPoint, withInRange } from '../../common/utils/helper';\nimport { LineBase } from './line-base';\n/**\n * `StepLineSeries` module is used to render the step line series.\n */\nvar StepLineSeries = /** @class */ (function (_super) {\n __extends(StepLineSeries, _super);\n function StepLineSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render the Step line series.\n * @return {void}\n * @private\n */\n StepLineSeries.prototype.render = function (series, xAxis, yAxis, isInverted) {\n var direction = '';\n var startPoint = 'M';\n var prevPoint = null;\n var pathOptions;\n var lineLength;\n var point1;\n var point2;\n var visiblePoints = this.improveChartPerformance(series);\n if (xAxis.valueType === 'Category' && xAxis.labelPlacement === 'BetweenTicks') {\n lineLength = 0.5;\n }\n else {\n lineLength = 0;\n }\n for (var _i = 0, visiblePoints_1 = visiblePoints; _i < visiblePoints_1.length; _i++) {\n var point = visiblePoints_1[_i];\n point.symbolLocations = [];\n point.regions = [];\n if (point.visible && withInRange(visiblePoints[point.index - 1], point, visiblePoints[point.index + 1], series)) {\n if (prevPoint != null) {\n point2 = getPoint(point.xValue, point.yValue, xAxis, yAxis, isInverted);\n point1 = getPoint(prevPoint.xValue, prevPoint.yValue, xAxis, yAxis, isInverted);\n direction = direction.concat(startPoint + ' ' + (point1.x) + ' ' + (point1.y) + ' ' + 'L' + ' ' +\n (point2.x) + ' ' + (point1.y) + 'L' + ' ' + (point2.x) + ' ' + (point2.y) + ' ');\n startPoint = 'L';\n }\n else {\n point1 = getPoint(point.xValue - lineLength, point.yValue, xAxis, yAxis, isInverted);\n direction = direction.concat(startPoint + ' ' + (point1.x) + ' ' + (point1.y) + ' ');\n startPoint = 'L';\n }\n this.storePointLocation(point, series, isInverted, getPoint);\n prevPoint = point;\n }\n else {\n prevPoint = series.emptyPointSettings.mode === 'Drop' ? prevPoint : null;\n startPoint = series.emptyPointSettings.mode === 'Drop' ? startPoint : 'M';\n }\n }\n point1 = getPoint(visiblePoints[visiblePoints.length - 1].xValue + lineLength, visiblePoints[visiblePoints.length - 1].yValue, xAxis, yAxis, isInverted);\n direction = direction.concat(startPoint + ' ' + (point1.x) + ' ' + (point1.y) + ' ');\n pathOptions = new PathOption(series.chart.element.id + '_Series_' + series.index, 'transparent', series.width, series.interior, series.opacity, series.dashArray, direction);\n this.appendLinePath(pathOptions, series, '');\n this.renderMarker(series);\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n StepLineSeries.prototype.doAnimation = function (series) {\n var option = series.animation;\n this.doLinearAnimation(series, option);\n };\n /**\n * To destroy the step line series.\n * @return {void}\n * @private\n */\n StepLineSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method calling here\n */\n };\n /**\n * Get module name.\n */\n StepLineSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'StepLineSeries';\n };\n return StepLineSeries;\n}(LineBase));\nexport { StepLineSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { getPoint, withInRange, ChartLocation, PathOption } from '../../common/utils/helper';\nimport { LineBase } from './line-base';\n/**\n * `StepAreaSeries` Module used to render the step area series.\n */\nvar StepAreaSeries = /** @class */ (function (_super) {\n __extends(StepAreaSeries, _super);\n function StepAreaSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render StepArea series.\n * @return {void}\n * @private\n */\n StepAreaSeries.prototype.render = function (series, xAxis, yAxis, isInverted) {\n var currentPoint;\n var secondPoint;\n var start = null;\n var direction = '';\n var pointsLength = series.points.length;\n var origin = Math.max(series.yAxis.visibleRange.min, 0);\n var options;\n var point;\n var xValue;\n var lineLength;\n var prevPoint = null;\n if (xAxis.valueType === 'Category' && xAxis.labelPlacement === 'BetweenTicks') {\n lineLength = 0.5;\n }\n else {\n lineLength = 0;\n }\n for (var i = 0; i < pointsLength; i++) {\n point = series.points[i];\n xValue = point.xValue;\n point.symbolLocations = [];\n point.regions = [];\n if (point.visible && withInRange(series.points[i - 1], point, series.points[i + 1], series)) {\n if (start === null) {\n start = new ChartLocation(xValue, 0);\n // Start point for the current path\n currentPoint = getPoint(xValue - lineLength, origin, xAxis, yAxis, isInverted);\n direction += ('M' + ' ' + (currentPoint.x) + ' ' + (currentPoint.y) + ' ');\n currentPoint = getPoint(xValue - lineLength, point.yValue, xAxis, yAxis, isInverted);\n direction += ('L' + ' ' + (currentPoint.x) + ' ' + (currentPoint.y) + ' ');\n }\n // First Point to draw the Steparea path\n if (prevPoint != null) {\n currentPoint = getPoint(point.xValue, point.yValue, xAxis, yAxis, isInverted);\n secondPoint = getPoint(prevPoint.xValue, prevPoint.yValue, xAxis, yAxis, isInverted);\n direction += ('L' + ' ' +\n (currentPoint.x) + ' ' + (secondPoint.y) + 'L' + ' ' + (currentPoint.x) + ' ' + (currentPoint.y) + ' ');\n }\n else if (series.emptyPointSettings.mode === 'Gap') {\n currentPoint = getPoint(point.xValue, point.yValue, xAxis, yAxis, isInverted);\n direction += 'L' + ' ' + (currentPoint.x) + ' ' + (currentPoint.y) + ' ';\n }\n this.storePointLocation(point, series, isInverted, getPoint);\n prevPoint = point;\n }\n if (series.points[i + 1] && !series.points[i + 1].visible && series.emptyPointSettings.mode !== 'Drop') {\n // current start point\n currentPoint = getPoint(xValue + lineLength, origin, xAxis, yAxis, isInverted);\n direction += ('L' + ' ' + (currentPoint.x) + ' ' + (currentPoint.y));\n start = null;\n prevPoint = null;\n }\n }\n if (pointsLength > 1) {\n start = { 'x': series.points[pointsLength - 1].xValue + lineLength, 'y': series.points[pointsLength - 1].yValue };\n secondPoint = getPoint(start.x, start.y, xAxis, yAxis, isInverted);\n direction += ('L' + ' ' + (secondPoint.x) + ' ' + (secondPoint.y) + ' ');\n start = { 'x': series.points[pointsLength - 1].xValue + lineLength, 'y': origin };\n secondPoint = getPoint(start.x, start.y, xAxis, yAxis, isInverted);\n direction += ('L' + ' ' + (secondPoint.x) + ' ' + (secondPoint.y) + ' ');\n }\n options = new PathOption(series.chart.element.id + '_Series_' + series.index, series.interior, series.border.width, series.border.color, series.opacity, series.dashArray, direction);\n this.appendLinePath(options, series, '');\n this.renderMarker(series);\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n StepAreaSeries.prototype.doAnimation = function (series) {\n var option = series.animation;\n this.doLinearAnimation(series, option);\n };\n /**\n * To destroy the step Area series.\n * @return {void}\n * @private\n */\n StepAreaSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method calling here\n */\n };\n /**\n * Get module name.\n */\n StepAreaSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'StepAreaSeries';\n };\n return StepAreaSeries;\n}(LineBase));\nexport { StepAreaSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { PathOption, getPoint, withInRange, Rect, TransformToVisible } from '../../common/utils/helper';\nimport { LineBase } from './line-base';\n/**\n * `StackingAreaSeries` module used to render the Stacking Area series.\n */\nvar StackingAreaSeries = /** @class */ (function (_super) {\n __extends(StackingAreaSeries, _super);\n function StackingAreaSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render the Stacking area series.\n * @return {void}\n * @private\n */\n StackingAreaSeries.prototype.render = function (series, xAxis, yAxis, isInverted) {\n var polarAreaType = series.chart.chartAreaType === 'PolarRadar';\n var getCoordinate = polarAreaType ? TransformToVisible : getPoint;\n var lineDirection = '';\n var visiblePoints = series.points;\n var pointsLength = visiblePoints.length;\n var stackedvalue = series.stackedValues;\n var origin = polarAreaType ?\n Math.max(series.yAxis.visibleRange.min, stackedvalue.endValues[0]) :\n Math.max(series.yAxis.visibleRange.min, stackedvalue.startValues[0]);\n var border = series.border;\n var options;\n var startPoint = 0;\n var point1 = getCoordinate(visiblePoints[0].xValue, origin, xAxis, yAxis, isInverted, series);\n var point2;\n lineDirection = lineDirection.concat('M' + ' ' + (point1.x) + ' ' + (point1.y) + ' ');\n for (var i = 0; i < pointsLength; i++) {\n visiblePoints[i].symbolLocations = [];\n visiblePoints[i].regions = [];\n if (visiblePoints[i].visible && withInRange(visiblePoints[i - 1], visiblePoints[i], visiblePoints[i + 1], series)) {\n point1 = getCoordinate(visiblePoints[i].xValue, stackedvalue.endValues[i], xAxis, yAxis, isInverted, series);\n lineDirection = lineDirection.concat('L' + ' ' + (point1.x) + ' ' + (point1.y) + ' ');\n visiblePoints[i].symbolLocations.push(getCoordinate(visiblePoints[i].xValue, stackedvalue.endValues[i], xAxis, yAxis, isInverted, series));\n visiblePoints[i].regions.push(new Rect(visiblePoints[i].symbolLocations[0].x - series.marker.width, visiblePoints[i].symbolLocations[0].y - series.marker.height, 2 * series.marker.width, 2 * series.marker.height));\n }\n else {\n if (series.emptyPointSettings.mode !== 'Drop') {\n for (var j = i - 1; j >= startPoint; j--) {\n point2 = getCoordinate(visiblePoints[j].xValue, stackedvalue.startValues[j], xAxis, yAxis, isInverted, series);\n lineDirection = lineDirection.concat('L' + ' ' + (point2.x) + ' ' + (point2.y) + ' ');\n }\n if (visiblePoints[i + 1] && visiblePoints[i + 1].visible) {\n point1 = getCoordinate(visiblePoints[i + 1].xValue, stackedvalue.startValues[i + 1], xAxis, yAxis, isInverted, series);\n lineDirection = lineDirection.concat('M' + ' ' + (point1.x) + ' ' + (point1.y) + ' ');\n }\n startPoint = i + 1;\n }\n }\n }\n if (series.chart.chartAreaType === 'PolarRadar' && visiblePoints.length > 1) {\n point1 = { 'x': series.points[0].xValue, 'y': stackedvalue.endValues[0] };\n point2 = getCoordinate(point1.x, point1.y, xAxis, yAxis, isInverted, series);\n lineDirection += ('L' + ' ' + (point2.x) + ' ' + (point2.y) + ' ');\n }\n for (var j = pointsLength - 1; j >= startPoint; j--) {\n var previousSeries = this.getPreviousSeries(series);\n if (previousSeries.emptyPointSettings.mode !== 'Drop' || !previousSeries.points[j].isEmpty) {\n point2 = getCoordinate(visiblePoints[j].xValue, stackedvalue.startValues[j], xAxis, yAxis, isInverted, series);\n lineDirection = lineDirection.concat(((j === (pointsLength - 1) && polarAreaType) ? 'M' : 'L')\n + ' ' + (point2.x) + ' ' + (point2.y) + ' ');\n }\n }\n options = new PathOption(series.chart.element.id + '_Series_' + series.index, series.interior, series.border.width, series.border.color, series.opacity, series.dashArray, lineDirection);\n this.appendLinePath(options, series, '');\n this.renderMarker(series);\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n StackingAreaSeries.prototype.doAnimation = function (series) {\n var option = series.animation;\n this.doLinearAnimation(series, option);\n };\n /**\n * To destroy the stacking area.\n * @return {void}\n * @private\n */\n StackingAreaSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method calling here\n */\n };\n /**\n * Get module name.\n */\n StackingAreaSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'StackingAreaSeries';\n };\n /**\n * To find previous visible series\n */\n StackingAreaSeries.prototype.getPreviousSeries = function (series) {\n var seriesCollection = series.chart.visibleSeries;\n for (var i = 0, length_1 = seriesCollection.length; i < length_1; i++) {\n if (series.index === seriesCollection[i].index && i !== 0) {\n return seriesCollection[i - 1];\n }\n }\n return seriesCollection[0];\n };\n return StackingAreaSeries;\n}(LineBase));\nexport { StackingAreaSeries };\n","import { withInRange, getPoint, PathOption, drawSymbol, Size, Rect, markerAnimate, TransformToVisible } from '../../common/utils/helper';\nimport { pointRender } from '../../common/model/constants';\n/**\n * `ScatterSeries` module is used to render the scatter series.\n */\nvar ScatterSeries = /** @class */ (function () {\n function ScatterSeries() {\n }\n /**\n * Render the scatter series.\n * @return {void}\n * @private\n */\n ScatterSeries.prototype.render = function (series, xAxis, yAxis, isInverted) {\n var seriesIndex = series.index;\n var marker = series.marker;\n var border = series.border;\n var visiblePoints = series.points;\n var pointIndex;\n var symbolId;\n var shapeOption;\n var argsData;\n var getCoordinate = series.chart.chartAreaType === 'PolarRadar' ? TransformToVisible : getPoint;\n for (var _i = 0, visiblePoints_1 = visiblePoints; _i < visiblePoints_1.length; _i++) {\n var point = visiblePoints_1[_i];\n point.symbolLocations = [];\n point.regions = [];\n if (point.visible && withInRange(visiblePoints[point.index - 1], point, visiblePoints[point.index + 1], series)) {\n symbolId = series.chart.element.id + '_Series_' + seriesIndex + '_Point_' + point.index;\n argsData = {\n cancel: false, name: pointRender, series: series, point: point,\n fill: series.setPointColor(point, series.interior),\n border: series.setBorderColor(point, { width: series.border.width, color: series.border.color }),\n height: marker.height, width: marker.width, shape: marker.shape\n };\n series.chart.trigger(pointRender, argsData);\n if (!argsData.cancel) {\n point.symbolLocations.push(getCoordinate(point.xValue, point.yValue, xAxis, yAxis, isInverted, series));\n point.color = argsData.fill;\n shapeOption = new PathOption(symbolId, argsData.fill, argsData.border.width, argsData.border.color, series.opacity, null);\n series.seriesElement.appendChild(drawSymbol(point.symbolLocations[0], argsData.shape, new Size(argsData.width, argsData.height), marker.imageUrl, shapeOption, point.x.toString() + ':' + point.yValue.toString()));\n point.regions.push(new Rect(point.symbolLocations[0].x - marker.width, point.symbolLocations[0].y - marker.height, 2 * marker.width, 2 * marker.height));\n point.marker = {\n border: argsData.border, fill: argsData.fill,\n height: argsData.height, visible: true,\n width: argsData.width, shape: argsData.shape\n };\n }\n else {\n point.marker = { visible: true };\n }\n }\n }\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n ScatterSeries.prototype.doAnimation = function (series) {\n var duration = series.animation.duration;\n var delay = series.animation.delay;\n var rectElements = series.seriesElement.childNodes;\n var count = 1;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n if (!point.symbolLocations.length || !rectElements[count]) {\n continue;\n }\n markerAnimate(rectElements[count], delay, duration, series, point.index, point.symbolLocations[0], false);\n count++;\n }\n };\n /**\n * Get module name.\n */\n ScatterSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'ScatterSeries';\n };\n /**\n * To destroy the scatter.\n * @return {void}\n */\n ScatterSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method calling here\n */\n };\n return ScatterSeries;\n}());\nexport { ScatterSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { withInRange } from '../../common/utils/helper';\nimport { ColumnBase } from './column-base';\n/**\n * `RangeColumnSeries` module is used to render the range column series.\n */\nvar RangeColumnSeries = /** @class */ (function (_super) {\n __extends(RangeColumnSeries, _super);\n function RangeColumnSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render Range Column series.\n * @return {void}\n * @private\n */\n RangeColumnSeries.prototype.render = function (series) {\n var rect;\n var sideBySideInfo = this.getSideBySideInfo(series);\n //let origin: number = Math.max(series.yAxis.visibleRange.min, 0);\n var argsData;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var rangePoint = _a[_i];\n rangePoint.symbolLocations = [];\n rangePoint.regions = [];\n if (rangePoint.visible && withInRange(series.points[rangePoint.index - 1], rangePoint, series.points[rangePoint.index + 1], series)) {\n rect = this.getRectangle(rangePoint.xValue + sideBySideInfo.start, rangePoint.high, rangePoint.xValue + sideBySideInfo.end, rangePoint.low, series);\n argsData = this.triggerEvent(series, rangePoint, series.interior, { width: series.border.width, color: series.border.color });\n if (!argsData.cancel) {\n this.updateSymbolLocation(rangePoint, rect, series);\n this.drawRectangle(series, rangePoint, rect, argsData);\n }\n }\n }\n };\n /**\n * Get module name.\n */\n RangeColumnSeries.prototype.getModuleName = function () {\n return 'RangeColumnSeries';\n /**\n * return the module name\n */\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n RangeColumnSeries.prototype.doAnimation = function (series) {\n this.animate(series);\n };\n /**\n * To destroy the range column series.\n * @return {void}\n * @private\n */\n RangeColumnSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return RangeColumnSeries;\n}(ColumnBase));\nexport { RangeColumnSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { PathOption, withInRange, subArraySum } from '../../common/utils/helper';\nimport { ColumnBase } from './column-base';\n/**\n * `WaterfallSeries` module is used to render the waterfall series.\n */\nvar WaterfallSeries = /** @class */ (function (_super) {\n __extends(WaterfallSeries, _super);\n function WaterfallSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render waterfall series.\n * @return {void}\n * @private\n */\n WaterfallSeries.prototype.render = function (series) {\n var rect;\n var sideBySideInfo = this.getSideBySideInfo(series);\n var origin = Math.max(series.yAxis.visibleRange.min, 0);\n var argsData;\n var prevEndValue = 0;\n var direction = '';\n var currentEndValue = 0;\n var originValue;\n var prevRegion = null;\n var y;\n var isInversed = series.chart.requireInvertedAxis;\n var intermediateOrigin = 0;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n point.symbolLocations = [];\n point.regions = [];\n if (point.visible && withInRange(series.points[point.index - 1], point, series.points[point.index + 1], series)) {\n //Calcute the current point value to render waterfall series.\n var isSum = this.isIntermediateSum(series, point.index);\n var totalSum = this.isSumIndex(series, point.index);\n currentEndValue += isSum || totalSum === true ? 0 : point.yValue;\n //Calcute the origin value for points\n originValue = (isSum === true ? intermediateOrigin : ((prevEndValue !== null && !totalSum) ? prevEndValue : origin));\n rect = this.getRectangle(point.xValue + sideBySideInfo.start, currentEndValue, point.xValue + sideBySideInfo.end, originValue, series);\n argsData = this.triggerPointRenderEvent(series, point);\n //intermediateOrigin is used only for imtermediate data \n if (isSum) {\n intermediateOrigin = currentEndValue;\n }\n prevEndValue = currentEndValue;\n if (!argsData.cancel) {\n this.updateSymbolLocation(point, rect, series);\n this.drawRectangle(series, point, rect, argsData);\n }\n var currentRegion = point.regions[0];\n if (prevRegion !== null) {\n var prevLeft = isInversed ? prevRegion.x : prevRegion.y;\n var currentLeft = isInversed ? currentRegion.x : currentRegion.y;\n var prevBottom = isInversed ? prevRegion.x + prevRegion.width : prevRegion.y + prevRegion.height;\n var currentBottom = isInversed ?\n currentRegion.x + currentRegion.width : currentRegion.y + currentRegion.height;\n if (Math.round(prevLeft) === Math.round(currentLeft) ||\n Math.round(prevBottom) === Math.round(currentLeft)) {\n y = isInversed ? currentRegion.x : currentRegion.y;\n }\n else {\n y = currentBottom;\n }\n if (isInversed) {\n direction = direction.concat('M' + ' ' + y + ' ' + (prevRegion.y + prevRegion.height) + ' ' +\n 'L' + ' ' + y + ' ' + currentRegion.y + ' ');\n }\n else {\n direction = direction.concat('M' + ' ' + prevRegion.x + ' ' + y + ' ' +\n 'L' + ' ' + (currentRegion.x + currentRegion.width) + ' ' + y + ' ');\n }\n }\n prevRegion = point.regions[0];\n }\n }\n var options = new PathOption(series.chart.element.id + '_Series_' + series.index + '_Connector_', 'none', series.connector.width, series.connector.color, series.opacity, series.connector.dashArray, direction);\n var element = series.chart.renderer.drawPath(options);\n if (series.chart.animateSeries) {\n element.style.visibility = 'hidden';\n }\n series.seriesElement.appendChild(element);\n };\n /**\n * To check intermediateSumIndex in waterfall series.\n * @return boolean\n * @private\n */\n WaterfallSeries.prototype.isIntermediateSum = function (series, index) {\n if (series.intermediateSumIndexes !== undefined && series.intermediateSumIndexes.indexOf(index) !== -1) {\n return true;\n }\n return false;\n };\n /**\n * To check sumIndex in waterfall series.\n * @return boolean\n * @private\n */\n WaterfallSeries.prototype.isSumIndex = function (series, index) {\n if (series.sumIndexes !== undefined && series.sumIndexes.indexOf(index) !== -1) {\n return true;\n }\n return false;\n };\n /**\n * To trigger the point rendering event for waterfall series.\n * @return IPointRenderEventArgs\n * @private\n */\n WaterfallSeries.prototype.triggerPointRenderEvent = function (series, point) {\n var color;\n var isSum = this.isIntermediateSum(series, point.index);\n var totalSum = this.isSumIndex(series, point.index);\n if (isSum || totalSum) {\n color = series.summaryFillColor;\n }\n else if (point.y < 0) {\n color = series.negativeFillColor;\n }\n else {\n color = series.interior;\n }\n return this.triggerEvent(series, point, color, { color: series.border.color, width: series.border.width });\n };\n /**\n * Add sumIndex and intermediateSumIndex data.\n * @return {object[]}\n * @private\n */\n WaterfallSeries.prototype.processInternalData = function (json, series) {\n var data = json;\n var length = json.length;\n var index;\n var intermediateSum = series.intermediateSumIndexes;\n var sumIndex = series.sumIndexes;\n if (intermediateSum !== undefined && intermediateSum.length > 0) {\n for (var i = 0; i < intermediateSum.length; i++) {\n for (var j = 0; j < data.length; j++) {\n if (j === intermediateSum[i]) {\n if (i === 0) {\n index = subArraySum(data, -1, intermediateSum[i], null, series);\n }\n else {\n index = subArraySum(data, intermediateSum[i - 1], intermediateSum[i], null, series);\n }\n data[j][series.yName] = index;\n }\n }\n }\n }\n if (sumIndex !== undefined && sumIndex.length > 0) {\n for (var k = 0; k < sumIndex.length; k++) {\n for (var j = 0; j < data.length; j++) {\n if (j === sumIndex[k]) {\n if (intermediateSum !== undefined) {\n index = subArraySum(data, -1, sumIndex[k], sumIndex, series);\n }\n else {\n index = subArraySum(data, -1, sumIndex[k], null, series);\n }\n data[j][series.yName] = index;\n }\n }\n }\n }\n return data;\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n WaterfallSeries.prototype.doAnimation = function (series) {\n this.animate(series);\n };\n /**\n * Get module name.\n */\n WaterfallSeries.prototype.getModuleName = function () {\n return 'WaterfallSeries';\n /**\n * return the module name\n */\n };\n /**\n * To destroy the waterfall series.\n * @return {void}\n * @private\n */\n WaterfallSeries.prototype.destroy = function (chart) {\n /**\n * Destroys the waterfall series.\n */\n };\n return WaterfallSeries;\n}(ColumnBase));\nexport { WaterfallSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { withInRange } from '../../common/utils/helper';\nimport { ColumnBase } from './column-base';\n/**\n * `HiloSeries` module is used to render the hilo series.\n */\nvar HiloSeries = /** @class */ (function (_super) {\n __extends(HiloSeries, _super);\n function HiloSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render Hiloseries.\n * @return {void}\n * @private\n */\n HiloSeries.prototype.render = function (series) {\n var region;\n var sideBySideInfo = this.getSideBySideInfo(series);\n var argsData;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n point.symbolLocations = [];\n point.regions = [];\n if (point.visible &&\n withInRange(series.points[point.index - 1], point, series.points[point.index + 1], series)) {\n region = this.getRectangle(point.xValue + sideBySideInfo.median, point.high, point.xValue + sideBySideInfo.median, point.low, series);\n argsData = this.triggerPointRenderEvent(series, point);\n if (!argsData.cancel) {\n if (!series.chart.requireInvertedAxis) {\n region.width = argsData.border.width;\n region.x = region.x - (region.width / 2);\n }\n else {\n region.height = argsData.border.width;\n region.y = region.y - (region.height / 2);\n }\n argsData.border.width = 0;\n this.updateSymbolLocation(point, region, series);\n this.drawRectangle(series, point, region, argsData);\n }\n }\n }\n };\n /**\n * To trigger the point rendering event.\n * @return {void}\n * @private\n */\n HiloSeries.prototype.triggerPointRenderEvent = function (series, point) {\n var border = { color: series.fill, width: Math.max(series.border.width, 2) };\n return _super.prototype.triggerEvent.call(this, series, point, series.interior, border);\n };\n /**\n * Get module name.\n */\n HiloSeries.prototype.getModuleName = function () {\n return 'HiloSeries';\n /**\n * return the module name\n */\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n HiloSeries.prototype.doAnimation = function (series) {\n this.animate(series);\n };\n /**\n * To destroy the Hilo series.\n * @return {void}\n * @private\n */\n HiloSeries.prototype.destroy = function (chart) {\n /**\n * Destroys the Hilo Series\n */\n };\n return HiloSeries;\n}(ColumnBase));\nexport { HiloSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { withInRange, PathOption } from '../../common/utils/helper';\nimport { ColumnBase } from './column-base';\n/**\n * `HiloOpenCloseSeries` module is used to render the hiloOpenClose series.\n */\nvar HiloOpenCloseSeries = /** @class */ (function (_super) {\n __extends(HiloOpenCloseSeries, _super);\n function HiloOpenCloseSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render HiloOpenCloseSeries series.\n * @return {void}\n * @private\n */\n HiloOpenCloseSeries.prototype.render = function (series) {\n var highLowRect;\n var open;\n var close;\n var sideBySideInfo = this.getSideBySideInfo(series);\n var argsData;\n var borderWidth = Math.max(series.border.width, 2);\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n point.symbolLocations = [];\n point.regions = [];\n if (point.visible &&\n withInRange(series.points[point.index - 1], point, series.points[point.index + 1], series)) {\n //highlow\n highLowRect = this.getRectangle(point.xValue + sideBySideInfo.start, Math.max(point.high, point.low), point.xValue + sideBySideInfo.end, Math.min(point.high, point.low), series);\n point.regions.push(this.getRectangle(point.xValue + sideBySideInfo.median, Math.max(point.high, point.low), point.xValue + sideBySideInfo.median, Math.min(point.high, point.low), series));\n this.updateTickRegion(!series.chart.requireInvertedAxis, point.regions[0], borderWidth);\n //open\n point.regions.push(this.getRectangle(point.xValue + sideBySideInfo.start, Math.max(point.open, point.close), point.xValue + sideBySideInfo.median, Math.max(point.open, point.close), series));\n //close\n point.regions.push(this.getRectangle(point.xValue + sideBySideInfo.median, Math.min(point.open, point.close), point.xValue + sideBySideInfo.end, Math.min(point.open, point.close), series));\n argsData = this.triggerPointRenderEvent(series, point);\n if (!argsData.cancel) {\n this.updateSymbolLocation(point, point.regions[0], series);\n var open_1 = { x: point.regions[1].x, y: point.regions[1].y };\n var close_1 = { x: point.regions[2].x, y: point.regions[2].y };\n this.drawHiloOpenClosePath(series, point, open_1, close_1, highLowRect, argsData);\n }\n this.updateTickRegion(series.chart.requireInvertedAxis, point.regions[1], borderWidth);\n this.updateTickRegion(series.chart.requireInvertedAxis, point.regions[2], borderWidth);\n }\n }\n };\n /**\n * Updates the tick region\n */\n HiloOpenCloseSeries.prototype.updateTickRegion = function (horizontal, region, borderWidth) {\n if (horizontal) {\n region.x -= borderWidth / 2;\n region.width = borderWidth;\n }\n else {\n region.y -= borderWidth / 2;\n region.height = borderWidth;\n }\n };\n /**\n * Trigger point rendering event\n */\n HiloOpenCloseSeries.prototype.triggerPointRenderEvent = function (series, point) {\n var fill = (point.open <= point.close) ? series.bearFillColor : series.bullFillColor;\n var border = { color: series.border.color, width: Math.max(series.border.width, 1) };\n return this.triggerEvent(series, point, fill, border);\n };\n /**\n * To draw the rectangle for points.\n * @return {void}\n * @private\n */\n HiloOpenCloseSeries.prototype.drawHiloOpenClosePath = function (series, point, open, close, rect, argsData) {\n // region highlow\n var direction;\n var options;\n if (series.chart.requireInvertedAxis) {\n direction = ('M' + ' ' + (rect.x) + ' ' + (rect.y + rect.height / 2) + ' ' +\n 'L' + ' ' + (rect.x + rect.width) + ' ' + (rect.y + rect.height / 2) + ' ');\n direction += ('M' + ' ' + (open.x) + ' ' + (rect.y + rect.height / 2) + ' ' +\n 'L' + ' ' + (open.x) + ' ' + (rect.y + rect.height) + ' ');\n direction += ('M' + ' ' + (close.x) + ' ' + (rect.y + rect.height / 2) + ' ' +\n 'L' + ' ' + (close.x) + ' ' + (rect.y) + ' ');\n }\n else {\n direction = ('M' + ' ' + (rect.x + rect.width / 2) + ' ' + (rect.y + rect.height) + ' ' +\n 'L' + ' ' + (rect.x + rect.width / 2) + ' ' + (rect.y) + ' ');\n //region opentick\n direction += ('M' + ' ' + (rect.x) + ' ' + (open.y) + ' ' +\n 'L' + ' ' + (rect.x + rect.width / 2) + ' ' + (open.y) + ' ');\n //region closetick\n direction += ('M' + ' ' + (rect.x + rect.width / 2) + ' ' + (close.y) + ' ' +\n 'L' + ' ' + (rect.x + rect.width) + ' ' + (close.y) + ' ');\n }\n options = new PathOption(series.chart.element.id + '_Series_' + series.index + '_Point_' + point.index, argsData.fill, argsData.border.width, argsData.fill, series.opacity, series.dashArray, direction);\n var element = series.chart.renderer.drawPath(options);\n element.setAttribute('aria-label', point.x.toString() + ':' + point.high.toString()\n + ':' + point.low.toString() + ':' + point.close.toString() + ':' + point.open.toString());\n series.seriesElement.appendChild(element);\n };\n /**\n * Get module name.\n */\n HiloOpenCloseSeries.prototype.getModuleName = function () {\n return 'HiloOpenCloseSeries';\n /**\n * return the module name\n */\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n HiloOpenCloseSeries.prototype.doAnimation = function (series) {\n this.animate(series);\n };\n /**\n * To destroy the column series.\n * @return {void}\n * @private\n */\n HiloOpenCloseSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return HiloOpenCloseSeries;\n}(ColumnBase));\nexport { HiloOpenCloseSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { withInRange, getPoint, PathOption, Rect } from '../../common/utils/helper';\nimport { LineBase } from './line-base';\n/**\n * `RangeAreaSeries` module is used to render the range area series.\n */\nvar RangeAreaSeries = /** @class */ (function (_super) {\n __extends(RangeAreaSeries, _super);\n function RangeAreaSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render RangeArea Series.\n * @return {void}.\n * @private\n */\n RangeAreaSeries.prototype.render = function (series) {\n var point;\n var direction = '';\n var command = 'M';\n var closed = undefined;\n var visiblePoints = this.improveChartPerformance(series);\n for (var i = 0, length_1 = visiblePoints.length; i < length_1; i++) {\n point = visiblePoints[i];\n point.symbolLocations = [];\n point.regions = [];\n var low = Math.min(point.low, point.high);\n var high = Math.max(point.low, point.high);\n if (series.yAxis.isInversed) {\n var temp = low;\n low = high;\n high = temp;\n }\n var lowPoint = getPoint(point.xValue, low, series.xAxis, series.yAxis, series.chart.requireInvertedAxis);\n var highPoint = getPoint(point.xValue, high, series.xAxis, series.yAxis, series.chart.requireInvertedAxis);\n point.symbolLocations.push(highPoint);\n point.symbolLocations.push(lowPoint);\n var rect = new Rect(Math.min(lowPoint.x, highPoint.x), Math.min(lowPoint.y, highPoint.y), Math.max(Math.abs(highPoint.x - lowPoint.x), series.marker.width), Math.max(Math.abs(highPoint.y - lowPoint.y), series.marker.width));\n if (!series.chart.requireInvertedAxis) {\n rect.x -= series.marker.width / 2;\n }\n else {\n rect.y -= series.marker.width / 2;\n }\n point.regions.push(rect);\n //Path to connect the high points\n if (point.visible && withInRange(visiblePoints[point.index - 1], point, visiblePoints[point.index + 1], series)) {\n direction = direction.concat(command + ' ' + (lowPoint.x) + ' ' + (lowPoint.y) + ' ');\n closed = false;\n if ((i + 1 < visiblePoints.length && !visiblePoints[i + 1].visible)\n || i === visiblePoints.length - 1) {\n // Path to connect the low points\n direction = this.closeRangeAreaPath(visiblePoints, point, series, direction, i);\n command = 'M';\n direction = direction.concat(' ' + 'Z');\n closed = true;\n }\n command = 'L';\n }\n else {\n if (closed === false && i !== 0) {\n direction = this.closeRangeAreaPath(visiblePoints, point, series, direction, i);\n closed = true;\n }\n command = 'M';\n point.symbolLocations = [];\n }\n }\n var name = series.category === 'Indicator' ? series.chart.element.id + '_Indicator_' + series.index + '_' + series.name :\n series.chart.element.id + '_Series_' + series.index;\n var options = new PathOption(name, series.interior, series.border.width, series.border.color, series.opacity, series.dashArray, direction);\n this.appendLinePath(options, series, '');\n this.renderMarker(series);\n };\n /**\n * path for rendering the low points\n * @return {void}.\n * @private\n */\n RangeAreaSeries.prototype.closeRangeAreaPath = function (visiblePoints, point, series, direction, i) {\n for (var j = i; j >= 0; j--) {\n if (visiblePoints[j].visible && visiblePoints[j].symbolLocations[0]) {\n point = visiblePoints[j];\n direction += 'L' + ' ' + (point.symbolLocations[0].x) + ' ' + ((point.symbolLocations[0].y)) + ' ';\n }\n else {\n break;\n }\n }\n return direction;\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n RangeAreaSeries.prototype.doAnimation = function (series) {\n var option = series.animation;\n this.doLinearAnimation(series, option);\n };\n /**\n * Get module name.\n */\n RangeAreaSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'RangeAreaSeries';\n };\n /**\n * To destroy the line series.\n * @return {void}\n * @private\n */\n RangeAreaSeries.prototype.destroy = function (chart) {\n /**\n * Destroys range area series\n */\n };\n return RangeAreaSeries;\n}(LineBase));\nexport { RangeAreaSeries };\n","import { withInRange, getPoint, PathOption, drawSymbol, Size, Rect, markerAnimate } from '../../common/utils/helper';\nimport { pointRender } from '../../common/model/constants';\n/**\n * `BubbleSeries` module is used to render the bubble series.\n */\nvar BubbleSeries = /** @class */ (function () {\n function BubbleSeries() {\n }\n /**\n * Render the Bubble series.\n * @return {void}\n * @private\n */\n BubbleSeries.prototype.render = function (series, xAxis, yAxis, isInverted) {\n var marker = series.marker;\n var visiblePoints = series.points;\n var shapeOption;\n var argsData;\n //let bubbleMode: RadiusMode = bubbleOptions.radiusMode;\n var segmentRadius;\n var radius;\n var value = Math.max(series.chart.initialClipRect.height, series.chart.initialClipRect.width);\n var percentChange = value / 100;\n var maxRadius = series.maxRadius * percentChange;\n var minRadius = series.minRadius * percentChange;\n var maximumSize = null;\n var maxValue = null;\n if ((series.maxRadius === null || series.minRadius === null)) {\n for (var _i = 0, _a = series.chart.visibleSeries; _i < _a.length; _i++) {\n var value_1 = _a[_i];\n if (value_1.type === 'Bubble' && value_1.visible === true && (value_1.maxRadius === null || value_1.minRadius === null)) {\n maximumSize = value_1.sizeMax > maximumSize ? value_1.sizeMax : maximumSize;\n }\n }\n maxValue = (value / 5) / 2;\n minRadius = maxRadius = 1;\n radius = maxValue * maxRadius;\n }\n else {\n maximumSize = series.sizeMax;\n radius = maxRadius - minRadius;\n }\n for (var _b = 0, visiblePoints_1 = visiblePoints; _b < visiblePoints_1.length; _b++) {\n var bubblePoint = visiblePoints_1[_b];\n bubblePoint.symbolLocations = [];\n bubblePoint.regions = [];\n if (bubblePoint.visible &&\n withInRange(visiblePoints[bubblePoint.index - 1], bubblePoint, visiblePoints[bubblePoint.index + 1], series)) {\n if ((series.maxRadius === null || series.minRadius === null)) {\n segmentRadius = radius * Math.abs(+bubblePoint.size / maximumSize);\n }\n else {\n segmentRadius = minRadius + radius * Math.abs(+bubblePoint.size / maximumSize);\n }\n segmentRadius = segmentRadius || minRadius;\n argsData = {\n cancel: false, name: pointRender, series: series, point: bubblePoint,\n fill: series.setPointColor(bubblePoint, series.interior),\n border: series.setBorderColor(bubblePoint, { width: series.border.width, color: series.border.color }),\n height: 2 * segmentRadius, width: 2 * segmentRadius\n };\n series.chart.trigger(pointRender, argsData);\n if (!argsData.cancel) {\n bubblePoint.symbolLocations.push(getPoint(bubblePoint.xValue, bubblePoint.yValue, xAxis, yAxis, isInverted));\n bubblePoint.color = argsData.fill;\n shapeOption = new PathOption(series.chart.element.id + '_Series_' + series.index + '_Point_' + bubblePoint.index, argsData.fill, argsData.border.width, argsData.border.color, series.opacity, null);\n series.seriesElement.appendChild(drawSymbol(bubblePoint.symbolLocations[0], 'Circle', new Size(argsData.width, argsData.height), marker.imageUrl, shapeOption, bubblePoint.x.toString() + ':' + bubblePoint.yValue.toString()));\n bubblePoint.regions.push(new Rect(bubblePoint.symbolLocations[0].x - segmentRadius, bubblePoint.symbolLocations[0].y - segmentRadius, 2 * segmentRadius, 2 * segmentRadius));\n bubblePoint.marker = {\n border: argsData.border, fill: argsData.fill,\n height: argsData.height, visible: true,\n shape: 'Circle', width: argsData.width\n };\n }\n else {\n bubblePoint.marker = { visible: false };\n }\n }\n }\n };\n /**\n * To destroy the Bubble.\n * @return {void}\n * @private\n */\n BubbleSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method calling here\n */\n };\n /**\n * Get module name.\n */\n BubbleSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'BubbleSeries';\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n BubbleSeries.prototype.doAnimation = function (series) {\n var duration = series.animation.duration;\n var delay = series.animation.delay;\n var rectElements = series.seriesElement.childNodes;\n var count = 1;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var bubblePoint = _a[_i];\n if (!bubblePoint.symbolLocations.length) {\n continue;\n }\n markerAnimate(rectElements[count], delay, duration, series, bubblePoint.index, bubblePoint.symbolLocations[0], false);\n count++;\n }\n };\n return BubbleSeries;\n}());\nexport { BubbleSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { ChartLocation, ControlPoints } from '../../common/utils/helper';\nimport { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { LineBase } from './line-base';\n/**\n * render Line series\n */\nvar SplineBase = /** @class */ (function (_super) {\n __extends(SplineBase, _super);\n /** @private */\n function SplineBase(chartModule) {\n var _this = _super.call(this, chartModule) || this;\n _this.splinePoints = [];\n return _this;\n }\n /**\n * To find the control points for spline.\n * @return {void}\n * @private\n */\n SplineBase.prototype.findSplinePoint = function (series) {\n var value;\n var points = this.filterEmptyPoints(series);\n this.splinePoints = this.findSplineCoefficients(points, series);\n if (points.length > 1) {\n series.drawPoints = [];\n for (var _i = 0, points_1 = points; _i < points_1.length; _i++) {\n var point = points_1[_i];\n if (point.index !== 0) {\n var previous = this.getPreviousIndex(points, point.index - 1, series);\n value = this.getControlPoints(points[previous], point, this.splinePoints[previous], this.splinePoints[point.index], series);\n series.drawPoints.push(value);\n if (point.yValue && value.controlPoint1.y && value.controlPoint2.y) {\n series.yMin = Math.floor(Math.min(series.yMin, point.yValue, value.controlPoint1.y, value.controlPoint2.y));\n series.yMax = Math.ceil(Math.max(series.yMax, point.yValue, value.controlPoint1.y, value.controlPoint2.y));\n }\n }\n }\n }\n };\n SplineBase.prototype.getPreviousIndex = function (points, i, series) {\n if (series.emptyPointSettings.mode !== 'Drop') {\n return i;\n }\n while (isNullOrUndefined(points[i]) && i > -1) {\n i = i - 1;\n }\n return i;\n };\n SplineBase.prototype.getNextIndex = function (points, i, series) {\n if (series.emptyPointSettings.mode !== 'Drop') {\n return i;\n }\n while (isNullOrUndefined(points[i]) && i < points.length) {\n i = i + 1;\n }\n return i;\n };\n SplineBase.prototype.filterEmptyPoints = function (series) {\n if (series.emptyPointSettings.mode !== 'Drop') {\n return series.points;\n }\n var points = extend([], series.points, null, true);\n for (var i = 0; i < points.length; i++) {\n points[i].index = i;\n if (points[i].isEmpty) {\n points[i].symbolLocations = [];\n points[i].regions = [];\n points.splice(i, 1);\n i--;\n }\n }\n return points;\n };\n /**\n * To find the natural spline.\n * @return {void}\n * @private\n */\n SplineBase.prototype.findSplineCoefficients = function (points, series) {\n var count = points.length;\n var ySpline = [];\n var ySplineDuplicate = [];\n var coefficient1;\n var coefficient2;\n var coefficient3;\n var dy1;\n var dy2;\n var dx = [];\n var dy = [];\n var slope = [];\n var interPoint;\n var slopeLength;\n var cardinalSplineTension = series.cardinalSplineTension ? series.cardinalSplineTension : 0.5;\n cardinalSplineTension = cardinalSplineTension < 0 ? 0 : cardinalSplineTension > 1 ? 1 : cardinalSplineTension;\n switch (series.splineType) {\n case 'Monotonic':\n for (var i = 0; i < count - 1; i++) {\n dx[i] = points[i + 1].xValue - points[i].xValue;\n dy[i] = points[i + 1].yValue - points[i].yValue;\n slope[i] = dy[i] / dx[i];\n }\n //interpolant points\n slopeLength = slope.length;\n // to find the first and last co-efficient value\n ySpline[0] = slope[0];\n ySpline[count - 1] = slope[slopeLength - 1];\n //to find the other co-efficient values\n for (var j = 0; j < dx.length; j++) {\n if (slopeLength > j + 1) {\n if (slope[j] * slope[j + 1] <= 0) {\n ySpline[j + 1] = 0;\n }\n else {\n interPoint = dx[j] + dx[j + 1];\n ySpline[j + 1] = 3 * interPoint / ((interPoint + dx[j + 1]) / slope[j] + (interPoint + dx[j]) / slope[j + 1]);\n }\n }\n }\n break;\n case 'Cardinal':\n for (var i = 0; i < count; i++) {\n if (i === 0) {\n ySpline[i] = (count > 2) ? (cardinalSplineTension * (points[i + 2].xValue - points[i].xValue)) : 0;\n }\n else if (i === (count - 1)) {\n ySpline[i] = (count > 2) ? (cardinalSplineTension * (points[count - 1].xValue - points[count - 3].xValue)) : 0;\n }\n else {\n ySpline[i] = (cardinalSplineTension * (points[i + 1].xValue - points[i - 1].xValue));\n }\n }\n break;\n default:\n if (series.splineType === 'Clamped') {\n var firstIndex = (points[1].yValue - points[0].yValue) / (points[1].xValue - points[0].xValue);\n var lastIndex = (points[count - 1].xValue - points[count - 2].xValue) /\n (points[count - 1].yValue - points[count - 2].yValue);\n ySpline[0] = (3 * (points[1].yValue - points[0].yValue)) / (points[1].xValue - points[0].xValue) - 3;\n ySplineDuplicate[0] = 0.5;\n ySpline[points.length - 1] = (3 * (points[points.length - 1].yValue - points[points.length - 2].yValue)) /\n (points[points.length - 1].xValue - points[points.length - 2].xValue);\n ySpline[0] = ySplineDuplicate[0] = Math.abs(ySpline[0]) === Infinity ? 0 : ySpline[0];\n ySpline[points.length - 1] = ySplineDuplicate[points.length - 1] = Math.abs(ySpline[points.length - 1]) === Infinity ?\n 0 : ySpline[points.length - 1];\n }\n else {\n // assigning the first and last value as zero\n ySpline[0] = ySplineDuplicate[0] = 0;\n ySpline[points.length - 1] = 0;\n }\n for (var i = 1; i < count - 1; i++) {\n coefficient1 = points[i].xValue - points[i - 1].xValue;\n coefficient2 = points[i + 1].xValue - points[i - 1].xValue;\n coefficient3 = points[i + 1].xValue - points[i].xValue;\n dy1 = points[i + 1].yValue - points[i].yValue || null;\n dy2 = points[i].yValue - points[i - 1].yValue || null;\n if (coefficient1 === 0 || coefficient2 === 0 || coefficient3 === 0) {\n ySpline[i] = 0;\n ySplineDuplicate[i] = 0;\n }\n else {\n var p = 1 / (coefficient1 * ySpline[i - 1] + 2 * coefficient2);\n ySpline[i] = -p * coefficient3;\n ySplineDuplicate[i] = p * (6 * (dy1 / coefficient3 - dy2 / coefficient1) - coefficient1 * ySplineDuplicate[i - 1]);\n }\n }\n for (var k = count - 2; k >= 0; k--) {\n ySpline[k] = ySpline[k] * ySpline[k + 1] + ySplineDuplicate[k];\n }\n break;\n }\n return ySpline;\n };\n /**\n * To find the control points for spline.\n * @return {void}\n * @private\n */\n SplineBase.prototype.getControlPoints = function (point1, point2, ySpline1, ySpline2, series) {\n var controlPoint1;\n var controlPoint2;\n var point;\n var ySplineDuplicate1 = ySpline1;\n var ySplineDuplicate2 = ySpline2;\n switch (series.splineType) {\n case 'Cardinal':\n if (series.xAxis.valueType === 'DateTime') {\n ySplineDuplicate1 = ySpline1 / this.dateTimeInterval(series);\n ySplineDuplicate2 = ySpline2 / this.dateTimeInterval(series);\n }\n controlPoint1 = new ChartLocation(point1.xValue + ySpline1 / 3, point1.yValue + ySplineDuplicate1 / 3);\n controlPoint2 = new ChartLocation(point2.xValue - ySpline2 / 3, point2.yValue - ySplineDuplicate2 / 3);\n point = new ControlPoints(controlPoint1, controlPoint2);\n break;\n case 'Monotonic':\n var value = (point2.xValue - point1.xValue) / 3;\n controlPoint1 = new ChartLocation(point1.xValue + value, point1.yValue + ySpline1 * value);\n controlPoint2 = new ChartLocation(point2.xValue - value, point2.yValue - ySpline2 * value);\n point = new ControlPoints(controlPoint1, controlPoint2);\n break;\n default:\n var one3 = 1 / 3.0;\n var deltaX2 = (point2.xValue - point1.xValue);\n deltaX2 = deltaX2 * deltaX2;\n var y1 = one3 * (((2 * point1.yValue) + point2.yValue) - one3 * deltaX2 * (ySpline1 + 0.5 * ySpline2));\n var y2 = one3 * ((point1.yValue + (2 * point2.yValue)) - one3 * deltaX2 * (0.5 * ySpline1 + ySpline2));\n controlPoint1 = new ChartLocation((2 * (point1.xValue) + (point2.xValue)) * one3, y1);\n controlPoint2 = new ChartLocation(((point1.xValue) + 2 * (point2.xValue)) * one3, y2);\n point = new ControlPoints(controlPoint1, controlPoint2);\n break;\n }\n return point;\n };\n /**\n * calculate datetime interval in hours\n *\n */\n SplineBase.prototype.dateTimeInterval = function (series) {\n var interval = series.xAxis.actualIntervalType;\n var intervalInMilliseconds;\n if (interval === 'Years') {\n intervalInMilliseconds = 365 * 24 * 60 * 60 * 1000;\n }\n else if (interval === 'Months') {\n intervalInMilliseconds = 30 * 24 * 60 * 60 * 1000;\n }\n else if (interval === 'Days') {\n intervalInMilliseconds = 24 * 60 * 60 * 1000;\n }\n else if (interval === 'Hours') {\n intervalInMilliseconds = 60 * 60 * 1000;\n }\n else if (interval === 'Minutes') {\n intervalInMilliseconds = 60 * 1000;\n }\n else if (interval === 'Seconds') {\n intervalInMilliseconds = 1000;\n }\n else {\n intervalInMilliseconds = 30 * 24 * 60 * 60 * 1000;\n }\n return intervalInMilliseconds;\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n SplineBase.prototype.doAnimation = function (series) {\n var option = series.animation;\n this.doLinearAnimation(series, option);\n };\n return SplineBase;\n}(LineBase));\nexport { SplineBase };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { PathOption, getPoint, withInRange, TransformToVisible } from '../../common/utils/helper';\nimport { SplineBase } from './spline-base';\n/**\n * `SplineSeries` module is used to render the spline series.\n */\nvar SplineSeries = /** @class */ (function (_super) {\n __extends(SplineSeries, _super);\n function SplineSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render the spline series.\n * @return {void}\n * @private\n */\n SplineSeries.prototype.render = function (series, xAxis, yAxis, isInverted) {\n var chart = series.chart;\n var marker = series.marker;\n var ySpline;\n var options;\n var firstPoint = null;\n var secondPoint = null;\n var direction = '';\n var pt1;\n var pt2;\n var bpt1;\n var bpt2;\n var data;\n var controlPointCount = 0;\n var controlPoint1;\n var controlPoint2;\n var startPoint = 'M';\n var points = this.filterEmptyPoints(series);\n var previous;\n var getCoordinate = series.chart.chartAreaType === 'PolarRadar' ? TransformToVisible : getPoint;\n for (var _i = 0, points_1 = points; _i < points_1.length; _i++) {\n var point = points_1[_i];\n previous = this.getPreviousIndex(points, point.index - 1, series);\n point.symbolLocations = [];\n point.regions = [];\n if (point.visible && withInRange(points[previous], point, points[this.getNextIndex(points, point.index - 1, series)], series)) {\n if (firstPoint !== null) {\n data = series.drawPoints[previous];\n controlPoint1 = data.controlPoint1;\n controlPoint2 = data.controlPoint2;\n pt1 = getCoordinate(firstPoint.xValue, firstPoint.yValue, xAxis, yAxis, isInverted, series);\n pt2 = getCoordinate(point.xValue, point.yValue, xAxis, yAxis, isInverted, series);\n bpt1 = getCoordinate(controlPoint1.x, controlPoint1.y, xAxis, yAxis, isInverted, series);\n bpt2 = getCoordinate(controlPoint2.x, controlPoint2.y, xAxis, yAxis, isInverted, series);\n direction = direction.concat((startPoint + ' ' + (pt1.x) + ' ' + (pt1.y) + ' ' + 'C' + ' ' + (bpt1.x) + ' '\n + (bpt1.y) + ' ' + (bpt2.x) + ' ' + (bpt2.y) + ' ' + (pt2.x) + ' ' + (pt2.y) + ' '));\n startPoint = 'L';\n }\n firstPoint = point;\n this.storePointLocation(point, series, isInverted, getCoordinate);\n }\n else {\n startPoint = 'M';\n firstPoint = null;\n point.symbolLocations = [];\n }\n }\n var name = series.category === 'TrendLine' ? series.chart.element.id + '_Series_' + series.sourceIndex + '_TrendLine_' + series.index :\n series.chart.element.id + '_Series_' + series.index;\n options = new PathOption(name, 'transparent', series.width, series.interior, series.opacity, series.dashArray, direction);\n this.appendLinePath(options, series, '');\n this.renderMarker(series);\n };\n /**\n * Get module name.\n */\n SplineSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'SplineSeries';\n };\n /**\n * To destroy the spline.\n * @return {void}\n * @private\n */\n SplineSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method calling here\n */\n };\n return SplineSeries;\n}(SplineBase));\nexport { SplineSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { sum, PathOption, getPoint, templateAnimate } from '../../common/utils/helper';\nimport { ColumnSeries } from './column-series';\n/**\n * `HistogramSeries` Module used to render the histogram series.\n */\nvar HistogramSeries = /** @class */ (function (_super) {\n __extends(HistogramSeries, _super);\n function HistogramSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render Histogram series.\n * @return {void}\n * @private\n */\n HistogramSeries.prototype.render = function (series) {\n _super.prototype.render.call(this, series);\n if (series.showNormalDistribution) {\n this.renderNormalDistribution(series);\n }\n };\n /**\n * To calculate bin interval for Histogram series.\n * @return number\n * @private\n */\n HistogramSeries.prototype.calculateBinInterval = function (yValues, series) {\n var mean = sum(yValues) / yValues.length;\n var sumValue = 0;\n for (var _i = 0, yValues_1 = yValues; _i < yValues_1.length; _i++) {\n var value = yValues_1[_i];\n sumValue += (value - mean) * (value - mean);\n }\n series.histogramValues.mean = mean;\n series.histogramValues.sDValue = Math.round(Math.sqrt(sumValue / yValues.length - 1));\n series.histogramValues.binWidth = series.binInterval ||\n Math.round((3.5 * series.histogramValues.sDValue) / Math.pow(yValues.length, 1 / 3));\n };\n /**\n * Add data points for Histogram series.\n * @return {object[]}\n * @private\n */\n HistogramSeries.prototype.processInternalData = function (data, series) {\n var updatedData = [];\n var yValues = [];\n var binWidth;\n Object.keys(data).forEach(function (key) {\n yValues.push(data[key][series.yName]);\n });\n series.histogramValues = {\n yValues: yValues\n };\n var min = Math.min.apply(Math, series.histogramValues.yValues);\n this.calculateBinInterval(series.histogramValues.yValues, series);\n binWidth = series.histogramValues.binWidth;\n var yCount;\n for (var j = 0; j < data.length;) {\n yCount = yValues.filter(function (y) { return y >= min && y < (min + (binWidth)); }).length;\n updatedData.push((_a = {\n 'x': min + binWidth / 2\n },\n _a[series.yName] = yCount,\n _a));\n min = min + binWidth;\n j += yCount;\n }\n return updatedData;\n var _a;\n };\n /**\n * Render Normal Distribution for Histogram series.\n * @return {void}\n * @private\n */\n HistogramSeries.prototype.renderNormalDistribution = function (series) {\n var min = series.xAxis.actualRange.min;\n var max = series.xAxis.actualRange.max;\n var xValue;\n var pointLocation;\n var yValue;\n var direction = '';\n var startPoint = 'M';\n var yValuesCount = series.histogramValues.yValues.length;\n var binWidth = series.histogramValues.binWidth;\n var mean = series.histogramValues.mean;\n var sDValue = series.histogramValues.sDValue;\n var pointsCount = 500;\n var del = (max - min) / (pointsCount - 1);\n var distributionLine;\n for (var i = 0; i < pointsCount; i++) {\n xValue = min + i * del;\n yValue = Math.exp(-(xValue - mean) * (xValue - mean) / (2 * sDValue * sDValue)) /\n (sDValue * Math.sqrt(2 * Math.PI));\n pointLocation = getPoint(xValue, yValue * binWidth * yValuesCount, series.xAxis, series.yAxis, series.chart.requireInvertedAxis, series);\n direction += startPoint + ' ' + (pointLocation.x) + ' ' + (pointLocation.y) + ' ';\n startPoint = 'L';\n }\n distributionLine = series.chart.renderer.drawPath(new PathOption(series.chart.element.id + '_Series_' + series.index + '_NDLine', 'transparent', 2, series.chart.themeStyle.errorBar, series.opacity, series.dashArray, direction));\n distributionLine.style.visibility = (series.animation.enable && series.chart.animateSeries) ?\n 'hidden' : 'visible';\n series.seriesElement.appendChild(distributionLine);\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n HistogramSeries.prototype.doAnimation = function (series) {\n _super.prototype.doAnimation.call(this, series);\n if (series.showNormalDistribution) {\n templateAnimate(series.seriesElement.lastElementChild, series.animation.duration, 500, 'FadeIn');\n }\n };\n /**\n * Get module name.\n */\n HistogramSeries.prototype.getModuleName = function () {\n return 'HistogramSeries';\n /**\n * return the module name\n */\n };\n /**\n * To destroy the histogram series.\n * @return {void}\n * @private\n */\n HistogramSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return HistogramSeries;\n}(ColumnSeries));\nexport { HistogramSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { PathOption, getPoint, withInRange, TransformToVisible } from '../../common/utils/helper';\nimport { SplineBase } from './spline-base';\n/**\n * `SplineAreaSeries` module used to render the spline area series.\n */\nvar SplineAreaSeries = /** @class */ (function (_super) {\n __extends(SplineAreaSeries, _super);\n function SplineAreaSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render the splineArea series.\n * @return {void}\n * @private\n */\n SplineAreaSeries.prototype.render = function (series, xAxis, yAxis, isInverted) {\n var firstPoint = null;\n var direction = '';\n var startPoint = null;\n var startPoint1 = null;\n var pt1;\n var pt2;\n var bpt1;\n var bpt2;\n var controlPt1;\n var controlPt2;\n var points = this.filterEmptyPoints(series);\n var pointsLength = series.points.length;\n var point;\n var previous;\n var getCoordinate = series.chart.chartAreaType === 'PolarRadar' ? TransformToVisible : getPoint;\n var origin = series.chart.chartAreaType === 'PolarRadar' ? series.points[0].yValue :\n Math.max(series.yAxis.visibleRange.min, 0);\n for (var i = 0; i < pointsLength; i++) {\n point = series.points[i];\n point.symbolLocations = [];\n point.regions = [];\n previous = this.getPreviousIndex(points, point.index - 1, series);\n if (point.visible &&\n withInRange(points[previous], point, points[this.getNextIndex(points, point.index - 1, series)], series)) {\n if (firstPoint) {\n controlPt1 = series.drawPoints[previous].controlPoint1;\n controlPt2 = series.drawPoints[previous].controlPoint2;\n pt1 = getCoordinate(firstPoint.xValue, firstPoint.yValue, xAxis, yAxis, isInverted, series);\n pt2 = getCoordinate(point.xValue, point.yValue, xAxis, yAxis, isInverted, series);\n bpt1 = getCoordinate(controlPt1.x, controlPt1.y, xAxis, yAxis, isInverted, series);\n bpt2 = getCoordinate(controlPt2.x, controlPt2.y, xAxis, yAxis, isInverted, series);\n direction = direction.concat(' C' + bpt1.x + ' '\n + bpt1.y + ' ' + bpt2.x + ' ' + bpt2.y + ' ' + pt2.x + ' ' + pt2.y + ' ');\n }\n else {\n // Start point for the current path\n startPoint = getCoordinate(point.xValue, origin, xAxis, yAxis, isInverted, series);\n direction += ('M ' + startPoint.x + ' ' + startPoint.y + ' ');\n // First Point to draw the area path\n startPoint1 = getCoordinate(point.xValue, point.yValue, xAxis, yAxis, isInverted, series);\n direction += ('L ' + startPoint1.x + ' ' + startPoint1.y + ' ');\n }\n this.storePointLocation(point, series, isInverted, getCoordinate);\n firstPoint = point;\n }\n else {\n firstPoint = null;\n point.symbolLocations = [];\n }\n if (((i + 1 < pointsLength && !series.points[i + 1].visible) || i === pointsLength - 1)\n && pt2 && startPoint) {\n startPoint = getCoordinate(point.xValue, origin, xAxis, yAxis, isInverted, series);\n direction = direction.concat('L ' + (startPoint.x) + ' ' + (startPoint.y));\n }\n }\n this.appendLinePath(new PathOption(series.chart.element.id + '_Series_' + series.index, series.interior, series.border.width, series.border.color, series.opacity, series.dashArray, direction), series, '');\n this.renderMarker(series);\n };\n /**\n * Get module name.\n */\n SplineAreaSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'SplineAreaSeries';\n };\n /**\n * To destroy the spline.\n * @return {void}\n * @private\n */\n SplineAreaSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method calling here\n */\n };\n return SplineAreaSeries;\n}(SplineBase));\nexport { SplineAreaSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { LineBase } from '../series/line-base';\nimport { Series, Points } from '../series/chart-series';\nimport { RectOption, Rect } from '../../common/utils/helper';\nimport { findClipRect } from '../../common/utils/helper';\n/**\n * Technical Analysis module helps to predict the market trend\n */\nvar TechnicalAnalysis = /** @class */ (function (_super) {\n __extends(TechnicalAnalysis, _super);\n function TechnicalAnalysis() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Defines the collection of series, that are used to represent the given technical indicator\n * @private\n */\n TechnicalAnalysis.prototype.initSeriesCollection = function (indicator, chart) {\n indicator.targetSeries = [];\n var signalLine = new Series(indicator, 'targetSeries', {}, true);\n this.setSeriesProperties(signalLine, indicator, 'SignalLine', indicator.fill, indicator.width, chart);\n };\n /**\n * Initializes the properties of the given series\n * @private\n */\n TechnicalAnalysis.prototype.setSeriesProperties = function (series, indicator, name, fill, width, chart) {\n series.name = name;\n series.xName = 'x';\n series.yName = 'y';\n series.fill = fill || '#606eff';\n series.dashArray = indicator.dashArray;\n series.width = width;\n series.xAxisName = indicator.xAxisName;\n series.animation = indicator.animation;\n series.yAxisName = indicator.yAxisName;\n series.clipRectElement = indicator.clipRectElement;\n series.points = [];\n series.enableTooltip = true;\n series.interior = series.fill;\n series.category = 'Indicator';\n series.index = indicator.index;\n series.chart = chart;\n series.xMin = Infinity;\n series.xMax = -Infinity;\n series.yMin = Infinity;\n series.yMax = -Infinity;\n series.xData = [];\n series.yData = [];\n series.marker.visible = false;\n indicator.targetSeries.push(series);\n };\n /**\n * Creates the elements of a technical indicator\n * @private\n */\n TechnicalAnalysis.prototype.createIndicatorElements = function (chart, indicator, index) {\n if (indicator.seriesName || indicator.dataSource) {\n findClipRect(indicator.targetSeries[0]);\n }\n var clipRect = new Rect(0, 0, 0, 0);\n if (indicator.seriesName || indicator.dataSource) {\n clipRect = indicator.targetSeries[0].clipRect;\n }\n //defines the clip rect element\n var clipRectElement = chart.renderer.drawClipPath(new RectOption(chart.element.id + '_ChartIndicatorClipRect_' + index, 'transparent', { width: 1, color: 'Gray' }, 1, {\n x: 0, y: 0, width: clipRect.width,\n height: clipRect.height,\n }));\n //creates the group for an indicator\n indicator.indicatorElement = chart.renderer.createGroup({\n 'id': chart.element.id + 'IndicatorGroup' + index,\n 'transform': 'translate(' + clipRect.x + ',' + clipRect.y + ')',\n 'clip-path': 'url(#' + chart.element.id + '_ChartIndicatorClipRect_' + index + ')'\n });\n indicator.indicatorElement.appendChild(clipRectElement);\n //Defines a group for each series in a technical indicator\n for (var _i = 0, _a = indicator.targetSeries; _i < _a.length; _i++) {\n var series = _a[_i];\n series.clipRectElement = clipRectElement;\n var element = series.chart.renderer.createGroup({\n 'id': series.chart.element.id + '_Indicator_' +\n indicator.index + '_' + series.name + '_Group'\n });\n indicator.indicatorElement.appendChild(element);\n series.seriesElement = element;\n }\n chart.indicatorElements.appendChild(indicator.indicatorElement);\n };\n TechnicalAnalysis.prototype.getDataPoint = function (x, y, sourcePoint, series, index, indicator) {\n if (indicator === void 0) { indicator = null; }\n var point = new Points();\n point.x = x;\n point.y = y;\n point.xValue = sourcePoint.xValue;\n point.color = series.fill;\n point.index = index;\n point.yValue = y;\n point.visible = true;\n series.xMin = Math.min(series.xMin, point.xValue);\n series.yMin = Math.min(series.yMin, point.yValue);\n series.xMax = Math.max(series.xMax, point.xValue);\n series.yMax = Math.max(series.yMax, point.yValue);\n series.xData.push(point.xValue);\n if (indicator && indicator.type === 'Macd' && series.type === 'Column') {\n if (point.y >= 0) {\n point.color = indicator.macdPositiveColor;\n }\n else {\n point.color = indicator.macdNegativeColor;\n }\n }\n return point;\n };\n TechnicalAnalysis.prototype.getRangePoint = function (x, high, low, sourcePoint, series, index, indicator) {\n if (indicator === void 0) { indicator = null; }\n var point = new Points();\n point.x = x;\n point.high = high;\n point.low = low;\n point.xValue = sourcePoint.xValue;\n point.color = series.fill;\n point.index = index;\n point.visible = true;\n series.xData.push(point.xValue);\n return point;\n };\n TechnicalAnalysis.prototype.setSeriesRange = function (points, indicator, series) {\n if (series === void 0) { series = null; }\n if (!series) {\n indicator.targetSeries[0].points = points;\n }\n else {\n series.points = points;\n }\n };\n return TechnicalAnalysis;\n}(LineBase));\nexport { TechnicalAnalysis };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { firstToLowerCase } from '../../common/utils/helper';\nimport { TechnicalAnalysis } from './indicator-base';\n/**\n * `SmaIndicator` module is used to render SMA indicator.\n */\nvar SmaIndicator = /** @class */ (function (_super) {\n __extends(SmaIndicator, _super);\n function SmaIndicator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Defines the predictions based on SMA approach\n * @private\n */\n SmaIndicator.prototype.initDataSource = function (indicator, chart) {\n var smaPoints = [];\n var points = indicator.points;\n if (points && points.length) {\n //prepare data\n var validData = points;\n var field = firstToLowerCase(indicator.field);\n var xField = 'x';\n var signalSeries = indicator.targetSeries[0];\n if (validData && validData.length && validData.length >= indicator.period) {\n //find initial average\n var average = 0;\n var sum = 0;\n for (var i = 0; i < indicator.period; i++) {\n sum += validData[i][field];\n }\n average = sum / indicator.period;\n smaPoints.push(this.getDataPoint(validData[indicator.period - 1][xField], average, validData[indicator.period - 1], signalSeries, smaPoints.length));\n var index = indicator.period;\n while (index < validData.length) {\n sum -= validData[index - indicator.period][field];\n sum += validData[index][field];\n average = sum / indicator.period;\n smaPoints.push(this.getDataPoint(validData[index][xField], average, validData[index], signalSeries, smaPoints.length));\n index++;\n }\n }\n this.setSeriesRange(smaPoints, indicator);\n }\n };\n /**\n * To destroy the SMA indicator\n * @return {void}\n * @private\n */\n SmaIndicator.prototype.destroy = function (chart) {\n /**\n * Destroys the SMA indicator\n */\n };\n /**\n * Get module name.\n */\n SmaIndicator.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'SmaIndicator';\n };\n return SmaIndicator;\n}(TechnicalAnalysis));\nexport { SmaIndicator };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { firstToLowerCase } from '../../common/utils/helper';\nimport { TechnicalAnalysis } from './indicator-base';\n/**\n * `EmaIndicator` module is used to render EMA indicator.\n */\nvar EmaIndicator = /** @class */ (function (_super) {\n __extends(EmaIndicator, _super);\n function EmaIndicator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Defines the predictions based on EMA approach\n * @private\n */\n EmaIndicator.prototype.initDataSource = function (indicator, chart) {\n var field = firstToLowerCase(indicator.field);\n var xField = 'x';\n var emaPoints = [];\n var signalSeries = indicator.targetSeries[0];\n //prepare data\n var validData = indicator.points;\n if (validData && validData.length && validData.length >= indicator.period) {\n //find initial average\n var sum = 0;\n var average = 0;\n //smoothing factor\n var k = (2 / (indicator.period + 1));\n for (var i = 0; i < indicator.period; i++) {\n sum += validData[i][field];\n }\n average = sum / indicator.period;\n emaPoints.push(this.getDataPoint(validData[indicator.period - 1][xField], average, validData[indicator.period - 1], signalSeries, emaPoints.length));\n var index = indicator.period;\n while (index < validData.length) {\n //previous average\n var prevAverage = emaPoints[index - indicator.period][signalSeries.yName];\n var yValue = (validData[index][field] - prevAverage) * k + prevAverage;\n emaPoints.push(this.getDataPoint(validData[index][xField], yValue, validData[index], signalSeries, emaPoints.length));\n index++;\n }\n }\n this.setSeriesRange(emaPoints, indicator);\n };\n /**\n * To destroy the EMA Indicator\n * @return {void}\n * @private\n */\n EmaIndicator.prototype.destroy = function (chart) {\n /**\n * Destroys the EMA Indicator\n */\n };\n /**\n * Get module name.\n */\n EmaIndicator.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'EmaIndicator';\n };\n return EmaIndicator;\n}(TechnicalAnalysis));\nexport { EmaIndicator };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { firstToLowerCase } from '../../common/utils/helper';\nimport { TechnicalAnalysis } from './indicator-base';\n/**\n * `TmaIndicator` module is used to render TMA indicator.\n */\nvar TmaIndicator = /** @class */ (function (_super) {\n __extends(TmaIndicator, _super);\n function TmaIndicator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Defines the predictions based on TMA approach\n * @private\n */\n TmaIndicator.prototype.initDataSource = function (indicator, chart) {\n var tmaPoints = [];\n var field = firstToLowerCase(indicator.field);\n var xField = 'x';\n var signalSeries = indicator.targetSeries[0];\n //prepare data\n var validData = indicator.points;\n if (validData && validData.length && validData.length >= indicator.period) {\n var signalSeries_1 = indicator.targetSeries[0];\n //prepare data\n var validData_1 = indicator.points;\n if (validData_1.length && validData_1.length >= indicator.period) {\n //smoothing factor\n var k = (2 / (indicator.period + 1));\n //find initial average\n var average = 0;\n var sum = 0;\n var sumOfSMA = 0;\n var averageSMA = 0;\n var smaValues = [];\n //sma values\n var index = 0;\n var length_1 = validData_1.length;\n var period = indicator.period;\n while (length_1 >= period) {\n sum = 0;\n index = validData_1.length - length_1;\n for (var j = index; j < index + period; j++) {\n sum = sum + validData_1[j][field];\n }\n sum = sum / period;\n smaValues.push(sum);\n length_1--;\n }\n //initial values\n for (var k_1 = 0; k_1 < period - 1; k_1++) {\n sum = 0;\n for (var j = 0; j < k_1 + 1; j++) {\n sum = sum + validData_1[j][field];\n }\n sum = sum / (k_1 + 1);\n smaValues.splice(k_1, 0, sum);\n }\n index = indicator.period;\n while (index <= smaValues.length) {\n sum = 0;\n for (var j = index - indicator.period; j < index; j++) {\n sum = sum + smaValues[j];\n }\n sum = sum / indicator.period;\n tmaPoints.push(this.getDataPoint(validData_1[index - 1][xField], sum, validData_1[index - 1], signalSeries_1, tmaPoints.length));\n index++;\n }\n }\n }\n this.setSeriesRange(tmaPoints, indicator);\n };\n /**\n * To destroy the TMA indicator.\n * @return {void}\n * @private\n */\n TmaIndicator.prototype.destroy = function (chart) {\n /**\n * Destroys the TMA Indicator\n */\n };\n /**\n * Get module name.\n */\n TmaIndicator.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'TmaIndicator';\n };\n return TmaIndicator;\n}(TechnicalAnalysis));\nexport { TmaIndicator };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { TechnicalAnalysis } from './indicator-base';\n/**\n * `AccumulationDistributionIndicator` module is used to render accumulation distribution indicator.\n */\nvar AccumulationDistributionIndicator = /** @class */ (function (_super) {\n __extends(AccumulationDistributionIndicator, _super);\n function AccumulationDistributionIndicator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Defines the predictions using accumulation distribution approach\n * @private\n */\n AccumulationDistributionIndicator.prototype.initDataSource = function (indicator, chart) {\n var sourceSeries = indicator.sourceSeries;\n var adPoints = [];\n var validData = indicator.points;\n if (validData.length > 0 && validData.length > indicator.period) {\n adPoints = this.calculateADPoints(indicator, validData);\n }\n this.setSeriesRange(adPoints, indicator);\n };\n /**\n * Calculates the Accumulation Distribution values\n * @private\n */\n AccumulationDistributionIndicator.prototype.calculateADPoints = function (indicator, validData) {\n var temp = [];\n var sum = 0;\n var i = 0;\n var value = 0;\n var high = 0;\n var low = 0;\n var close = 0;\n var signalSeries = indicator.targetSeries[0];\n for (i = 0; i < validData.length; i++) {\n high = Number(validData[i].high);\n low = Number(validData[i].low);\n close = Number(validData[i].close);\n /**\n * Money Flow Multiplier = [(Close - Low) - (High - Close)] /(High - Low)\n * Money Flow Volume = Money Flow Multiplier x Volume for the Period\n * ADL = Previous ADL + Current Period's Money Flow Volume\n */\n value = ((close - low) - (high - close)) / (high - low);\n /**\n * Sum is to calculate the Y values of the Accumulation distribution indicator\n */\n sum = sum + value * Number(validData[i].volume);\n /**\n * To calculate the x and y values for the Accumulation distribution indicator\n */\n temp[i] = this.getDataPoint(validData[i].x, sum, validData[i], signalSeries, temp.length);\n }\n return temp;\n };\n /**\n * To destroy the Accumulation Distribution Technical Indicator.\n * @return {void}\n * @private\n */\n AccumulationDistributionIndicator.prototype.destroy = function (chart) {\n /**\n * Destroys the Accumulation Distribution Technical indicator\n */\n };\n /**\n * Get module name.\n */\n AccumulationDistributionIndicator.prototype.getModuleName = function () {\n /**\n * Returns the module name of the Indicator\n */\n return 'AccumulationDistributionIndicator';\n };\n return AccumulationDistributionIndicator;\n}(TechnicalAnalysis));\nexport { AccumulationDistributionIndicator };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { TechnicalAnalysis } from './indicator-base';\n/**\n * `AtrIndicator` module is used to render ATR indicator.\n */\nvar AtrIndicator = /** @class */ (function (_super) {\n __extends(AtrIndicator, _super);\n function AtrIndicator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Defines the predictions using Average True Range approach\n * @private\n */\n AtrIndicator.prototype.initDataSource = function (indicator, chart) {\n var sourceSeries = indicator.sourceSeries;\n var atrPoints = [];\n var validData = indicator.points;\n if (validData.length > 0 && validData.length > indicator.period) {\n this.calculateATRPoints(indicator, validData);\n }\n };\n /**\n * To calculate Average True Range indicator points\n * @private\n */\n AtrIndicator.prototype.calculateATRPoints = function (indicator, validData) {\n var average = 0;\n var highLow = 0;\n var highClose = 0;\n var lowClose = 0;\n var trueRange = 0;\n var points = [];\n var temp = [];\n var period = indicator.period;\n var sum = 0;\n var y = 'y';\n var signalSeries = indicator.targetSeries[0];\n for (var i = 0; i < validData.length; i++) {\n /**\n * Current High less the current Low\n * Current High less the previous Close (absolute value)\n * Current Low less the previous Close (absolute value)\n */\n highLow = Number(validData[i].high) - Number(validData[i].low);\n if (i > 0) {\n //\n highClose = Math.abs(Number(validData[i].high) - Number(validData[i - 1].close));\n lowClose = Math.abs(Number(validData[i].low) - Number(validData[i - 1].close));\n }\n /**\n * To find the maximum of highLow, highClose, lowClose\n */\n trueRange = Math.max(highLow, highClose, lowClose);\n sum = sum + trueRange;\n /**\n * Push the x and y values for the Average true range indicator\n */\n if (i >= period) {\n average = (Number(temp[i - 1][y]) * (period - 1) + trueRange) / period;\n points.push(this.getDataPoint(validData[i].x, average, validData[i], signalSeries, points.length));\n }\n else {\n average = sum / period;\n if (i === period - 1) {\n points.push(this.getDataPoint(validData[i].x, average, validData[i], signalSeries, points.length));\n }\n }\n temp[i] = { x: validData[i].x, y: average };\n }\n this.setSeriesRange(points, indicator);\n };\n /**\n * To destroy the Average true range indicator.\n * @return {void}\n * @private\n */\n AtrIndicator.prototype.destroy = function (chart) {\n /**\n * Destroy the Average true range indicator\n */\n };\n /**\n * Get module name.\n */\n AtrIndicator.prototype.getModuleName = function () {\n /**\n * Returns the module name of the Indicator\n */\n return 'AtrIndicator';\n };\n return AtrIndicator;\n}(TechnicalAnalysis));\nexport { AtrIndicator };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Series } from '../series/chart-series';\nimport { TechnicalAnalysis } from './indicator-base';\n/**\n * `MomentumIndicator` module is used to render Momentum indicator.\n */\nvar MomentumIndicator = /** @class */ (function (_super) {\n __extends(MomentumIndicator, _super);\n function MomentumIndicator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Defines the collection of series to represent a momentum indicator\n * @private\n */\n MomentumIndicator.prototype.initSeriesCollection = function (indicator, chart) {\n _super.prototype.initSeriesCollection.call(this, indicator, chart);\n var upperLine = new Series(indicator, 'targetSeries', {}, true);\n _super.prototype.setSeriesProperties.call(this, upperLine, indicator, 'UpperLine', indicator.upperLine.color, indicator.upperLine.width, chart);\n };\n /**\n * Defines the predictions using momentum approach\n * @private\n */\n MomentumIndicator.prototype.initDataSource = function (indicator, chart) {\n var upperCollection = [];\n var signalCollection = [];\n var validData = indicator.points;\n if (validData && validData.length) {\n var upperSeries = indicator.targetSeries[1];\n var signalSeries = indicator.targetSeries[0];\n var length_1 = indicator.period;\n if (validData.length >= indicator.period) {\n for (var i = 0; i < validData.length; i++) {\n upperCollection.push(this.getDataPoint(validData[i].x, 100, validData[i], upperSeries, upperCollection.length));\n if (!(i < length_1)) {\n signalCollection.push(this.getDataPoint(validData[i].x, (Number(validData[i].close) / Number(validData[i - length_1].close) * 100), validData[i], signalSeries, signalCollection.length));\n }\n }\n }\n this.setSeriesRange(signalCollection, indicator, indicator.targetSeries[0]);\n this.setSeriesRange(upperCollection, indicator, indicator.targetSeries[1]);\n }\n };\n /**\n * To destroy the momentum indicator\n * @return {void}\n * @private\n */\n MomentumIndicator.prototype.destroy = function (chart) {\n /**\n * Destroys the momentum indicator\n */\n };\n /**\n * Get module name.\n */\n MomentumIndicator.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'MomentumIndicator';\n };\n return MomentumIndicator;\n}(TechnicalAnalysis));\nexport { MomentumIndicator };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Series } from '../series/chart-series';\nimport { TechnicalAnalysis } from './indicator-base';\n/**\n * `RsiIndicator` module is used to render RSI indicator.\n */\nvar RsiIndicator = /** @class */ (function (_super) {\n __extends(RsiIndicator, _super);\n function RsiIndicator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Initializes the series collection to represent the RSI Indicator\n * @private\n */\n RsiIndicator.prototype.initSeriesCollection = function (indicator, chart) {\n _super.prototype.initSeriesCollection.call(this, indicator, chart);\n if (indicator.showZones) {\n var lowerLine = new Series(indicator, 'targetSeries', {}, true);\n _super.prototype.setSeriesProperties.call(this, lowerLine, indicator, 'LowerLine', indicator.lowerLine.color, indicator.lowerLine.width, chart);\n var upperLine = new Series(indicator, 'targetSeries', {}, true);\n _super.prototype.setSeriesProperties.call(this, upperLine, indicator, 'UpperLine', indicator.upperLine.color, indicator.upperLine.width, chart);\n }\n };\n /**\n * Defines the predictions using RSI approach\n * @private\n */\n RsiIndicator.prototype.initDataSource = function (indicator, chart) {\n var signalCollection = [];\n var lowerCollection = [];\n var upperCollection = [];\n var signalSeries = indicator.targetSeries[0];\n //prepare data\n var validData = indicator.points;\n if (validData.length && validData.length >= indicator.period) {\n //Find upper band and lower band values\n if (indicator.showZones) {\n for (var i = 0; i < validData.length; i++) {\n upperCollection.push(this.getDataPoint(validData[i].x, indicator.overBought, validData[i], indicator.targetSeries[1], upperCollection.length));\n lowerCollection.push(this.getDataPoint(validData[i].x, indicator.overSold, validData[i], indicator.targetSeries[2], lowerCollection.length));\n }\n }\n //Find signal line value\n var prevClose = Number(validData[0].close);\n var gain = 0;\n var loss = 0;\n for (var i = 1; i <= indicator.period; i++) {\n var close_1 = Number(validData[i].close);\n if (close_1 > prevClose) {\n gain += close_1 - prevClose;\n }\n else {\n loss += prevClose - close_1;\n }\n prevClose = close_1;\n }\n gain = gain / indicator.period;\n loss = loss / indicator.period;\n signalCollection.push(this.getDataPoint(validData[indicator.period].x, 100 - (100 / (1 + gain / loss)), validData[indicator.period], signalSeries, signalCollection.length));\n for (var j = indicator.period + 1; j < validData.length; j++) {\n var close_2 = Number(validData[j].close);\n if (close_2 > prevClose) {\n gain = (gain * (indicator.period - 1) + (close_2 - prevClose)) / indicator.period;\n loss = (loss * (indicator.period - 1)) / indicator.period;\n }\n else if (close_2 < prevClose) {\n loss = (loss * (indicator.period - 1) + (prevClose - close_2)) / indicator.period;\n gain = (gain * (indicator.period - 1)) / indicator.period;\n }\n prevClose = close_2;\n signalCollection.push(this.getDataPoint(validData[j].x, 100 - (100 / (1 + gain / loss)), validData[j], signalSeries, signalCollection.length));\n }\n }\n this.setSeriesRange(signalCollection, indicator, indicator.targetSeries[0]);\n if (indicator.showZones) {\n this.setSeriesRange(upperCollection, indicator, indicator.targetSeries[1]);\n this.setSeriesRange(lowerCollection, indicator, indicator.targetSeries[2]);\n }\n };\n /**\n * To destroy the RSI Indicator.\n * @return {void}\n * @private\n */\n RsiIndicator.prototype.destroy = function (chart) {\n /**\n * Destroys the RSI Indicator\n */\n };\n /**\n * Get module name.\n */\n RsiIndicator.prototype.getModuleName = function () {\n /**\n * Returns the module name of the indicator.\n */\n return 'RsiIndicator';\n };\n return RsiIndicator;\n}(TechnicalAnalysis));\nexport { RsiIndicator };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Series } from '../series/chart-series';\nimport { TechnicalAnalysis } from './indicator-base';\n/**\n * `StochasticIndicator` module is used to render stochastic indicator.\n */\nvar StochasticIndicator = /** @class */ (function (_super) {\n __extends(StochasticIndicator, _super);\n function StochasticIndicator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Defines the collection of series that represents the stochastic indicator\n * @private\n */\n StochasticIndicator.prototype.initSeriesCollection = function (indicator, chart) {\n _super.prototype.initSeriesCollection.call(this, indicator, chart);\n var periodLine = new Series(indicator, 'targetSeries', {}, true);\n this.setSeriesProperties(periodLine, indicator, 'PeriodLine', indicator.periodLine.color, indicator.periodLine.width, chart);\n if (indicator.showZones) {\n var upperSeries = new Series(indicator, 'targetSeries', {}, true);\n this.setSeriesProperties(upperSeries, indicator, 'UpperLine', indicator.upperLine.color, indicator.upperLine.width, chart);\n var lowerSeries = new Series(indicator, 'targetSeries', {}, true);\n this.setSeriesProperties(lowerSeries, indicator, 'LowerLine', indicator.lowerLine.color, indicator.lowerLine.width, chart);\n }\n };\n /**\n * Defines the predictions based on stochastic approach\n * @private\n */\n StochasticIndicator.prototype.initDataSource = function (indicator, chart) {\n var signalCollection = [];\n var upperCollection = [];\n var lowerCollection = [];\n var periodCollection = [];\n var source = [];\n var sourceSeries = indicator.sourceSeries;\n var point = {};\n //prepare data\n var validData = indicator.points;\n if (validData.length && validData.length >= indicator.period) {\n if (indicator.showZones) {\n for (var i = 0; i < validData.length; i++) {\n upperCollection.push(this.getDataPoint(validData[i].x, indicator.overBought, validData[i], indicator.targetSeries[2], upperCollection.length));\n lowerCollection.push(this.getDataPoint(validData[i].x, indicator.overSold, validData[i], indicator.targetSeries[3], lowerCollection.length));\n }\n }\n source = this.calculatePeriod(indicator.period, indicator.kPeriod, validData, indicator.targetSeries[1]);\n periodCollection = this.smaCalculation(indicator.period, indicator.kPeriod, source, indicator.targetSeries[1]);\n signalCollection = this.smaCalculation(indicator.period + indicator.kPeriod - 1, indicator.dPeriod, source, indicator.targetSeries[0]);\n }\n this.setSeriesRange(signalCollection, indicator, indicator.targetSeries[0]);\n this.setSeriesRange(periodCollection, indicator, indicator.targetSeries[1]);\n if (indicator.showZones) {\n this.setSeriesRange(upperCollection, indicator, indicator.targetSeries[2]);\n this.setSeriesRange(lowerCollection, indicator, indicator.targetSeries[3]);\n }\n };\n /**\n * Calculates the SMA Values\n * @private\n */\n StochasticIndicator.prototype.smaCalculation = function (period, kPeriod, data, sourceSeries) {\n var pointCollection = [];\n if (data.length >= period + kPeriod) {\n var count = period + (kPeriod - 1);\n var temp = [];\n var values = [];\n for (var i = 0; i < data.length; i++) {\n var value = Number(data[i].y);\n temp.push(value);\n }\n var length_1 = temp.length;\n while (length_1 >= count) {\n var sum = 0;\n for (var i = period - 1; i < (period + kPeriod - 1); i++) {\n sum = sum + temp[i];\n }\n sum = sum / kPeriod;\n values.push(sum.toFixed(2));\n temp.splice(0, 1);\n length_1 = temp.length;\n }\n var len = count - 1;\n for (var i = 0; i < data.length; i++) {\n if (!(i < len)) {\n pointCollection.push(this.getDataPoint(data[i].x, Number(values[i - len]), data[i], sourceSeries, pointCollection.length));\n data[i].y = Number((values[i - len]));\n }\n }\n }\n return pointCollection;\n };\n /**\n * Calculates the period line values.\n * @private\n */\n StochasticIndicator.prototype.calculatePeriod = function (period, kPeriod, data, series) {\n var lowValues = [];\n var highValues = [];\n var closeValues = [];\n var modifiedSource = [];\n for (var j = 0; j < data.length; j++) {\n lowValues[j] = data[j].low;\n highValues[j] = data[j].high;\n closeValues[j] = data[j].close;\n }\n if (data.length > period) {\n var totalPeriod = period + kPeriod;\n var mins = [];\n var maxs = [];\n for (var i = 0; i < period - 1; ++i) {\n maxs.push(0);\n mins.push(0);\n modifiedSource.push(this.getDataPoint(data[i].x, data[i].close, data[i], series, modifiedSource.length));\n }\n for (var i = period - 1; i < data.length; ++i) {\n var min = Number.MAX_VALUE;\n var max = Number.MIN_VALUE;\n for (var j = 0; j < period; ++j) {\n min = Math.min(min, lowValues[i - j]);\n max = Math.max(max, highValues[i - j]);\n }\n maxs.push(max);\n mins.push(min);\n }\n for (var i = period - 1; i < data.length; ++i) {\n var top_1 = 0;\n var bottom = 0;\n top_1 += closeValues[i] - mins[i];\n bottom += maxs[i] - mins[i];\n modifiedSource.push(this.getDataPoint(data[i].x, (top_1 / bottom) * 100, data[i], series, modifiedSource.length));\n }\n }\n return modifiedSource;\n };\n /**\n * To destroy the Stocastic Indicator.\n * @return {void}\n * @private\n */\n StochasticIndicator.prototype.destroy = function (chart) {\n /**\n * Destroys the stochastic indicator\n */\n };\n /**\n * Get module name.\n */\n StochasticIndicator.prototype.getModuleName = function () {\n /**\n * Returns the module name of the indicator.\n */\n return 'StochasticIndicator';\n };\n return StochasticIndicator;\n}(TechnicalAnalysis));\nexport { StochasticIndicator };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Series } from '../series/chart-series';\nimport { TechnicalAnalysis } from './indicator-base';\n/**\n * `BollingerBands` module is used to render bollinger band indicator.\n */\nvar BollingerBands = /** @class */ (function (_super) {\n __extends(BollingerBands, _super);\n function BollingerBands() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Initializes the series collection to represent bollinger band\n */\n BollingerBands.prototype.initSeriesCollection = function (indicator, chart) {\n indicator.targetSeries = [];\n var rangeArea = new Series(indicator, 'targetSeries', {}, true);\n rangeArea.type = 'RangeArea';\n if (indicator.bandColor !== 'transparent' && indicator.bandColor !== 'none') {\n this.setSeriesProperties(rangeArea, indicator, 'BollingerBand', indicator.bandColor, 0, chart);\n }\n var signalLine = new Series(indicator, 'targetSeries', {}, true);\n this.setSeriesProperties(signalLine, indicator, 'SignalLine', indicator.fill, indicator.width, chart);\n var upperLine = new Series(indicator, 'targetSeries', {}, true);\n this.setSeriesProperties(upperLine, indicator, 'UpperLine', indicator.upperLine.color, indicator.upperLine.width, chart);\n var lowerLine = new Series(indicator, 'targetSeries', {}, true);\n this.setSeriesProperties(lowerLine, indicator, 'LowerLine', indicator.lowerLine.color, indicator.lowerLine.width, chart);\n };\n /**\n * Defines the predictions using Bollinger Band Approach\n * @private\n */\n BollingerBands.prototype.initDataSource = function (indicator, chart) {\n var enableBand = indicator.bandColor !== 'transparent' && indicator.bandColor !== 'none';\n var start = enableBand ? 1 : 0;\n var signalCollection = [];\n var upperCollection = [];\n var lowerCollection = [];\n var bandCollection = [];\n var upperSeries = indicator.targetSeries[start + 1];\n var lowerSeries = indicator.targetSeries[start + 2];\n var signalSeries = indicator.targetSeries[start];\n var rangeAreaSeries = enableBand ? indicator.targetSeries[0] : null;\n //prepare data\n var validData = indicator.points;\n if (validData.length && validData.length >= indicator.period) {\n var sum = 0;\n var deviationSum = 0;\n var multiplier = indicator.standardDeviation;\n var limit = validData.length;\n var length_1 = Math.round(indicator.period);\n var smaPoints = [];\n var deviations = [];\n var bollingerPoints = [];\n for (var i_1 = 0; i_1 < length_1; i_1++) {\n sum += Number(validData[i_1].close);\n }\n var sma = sum / indicator.period;\n for (var i_2 = 0; i_2 < limit; i_2++) {\n var y = Number(validData[i_2].close);\n if (i_2 >= length_1 - 1 && i_2 < limit) {\n if (i_2 - indicator.period >= 0) {\n var diff = y - Number(validData[i_2 - length_1].close);\n sum = sum + diff;\n sma = sum / (indicator.period);\n smaPoints[i_2] = sma;\n deviations[i_2] = Math.pow(y - sma, 2);\n deviationSum += deviations[i_2] - deviations[i_2 - length_1];\n }\n else {\n smaPoints[i_2] = sma;\n deviations[i_2] = Math.pow(y - sma, 2);\n deviationSum += deviations[i_2];\n }\n var range = Math.sqrt(deviationSum / (indicator.period));\n var lowerBand = smaPoints[i_2] - (multiplier * range);\n var upperBand = smaPoints[i_2] + (multiplier * range);\n if (i_2 + 1 === length_1) {\n for (var j_1 = 0; j_1 < length_1 - 1; j_1++) {\n bollingerPoints[j_1] = {\n 'X': validData[j_1].x, 'mb': smaPoints[i_2],\n 'lb': lowerBand, 'ub': upperBand, visible: true\n };\n }\n }\n bollingerPoints[i_2] = {\n 'X': validData[i_2].x, 'mb': smaPoints[i_2],\n 'lb': lowerBand, 'ub': upperBand, visible: true\n };\n }\n else {\n if (i_2 < indicator.period - 1) {\n smaPoints[i_2] = sma;\n deviations[i_2] = Math.pow(y - sma, 2);\n deviationSum += deviations[i_2];\n }\n }\n }\n var i = -1;\n var j = -1;\n for (var k = 0; k < limit; k++) {\n if (k >= (length_1 - 1)) {\n var ub = 'ub';\n var lb = 'lb';\n var mb = 'mb';\n upperCollection.push(this.getDataPoint(validData[k].x, bollingerPoints[k][ub], validData[k], upperSeries, upperCollection.length));\n lowerCollection.push(this.getDataPoint(validData[k].x, bollingerPoints[k][lb], validData[k], lowerSeries, lowerCollection.length));\n signalCollection.push(this.getDataPoint(validData[k].x, bollingerPoints[k][mb], validData[k], signalSeries, signalCollection.length));\n if (enableBand) {\n bandCollection.push(this.getRangePoint(validData[k].x, upperCollection[++i].y, lowerCollection[++j].y, validData[k], rangeAreaSeries, bandCollection.length));\n }\n }\n }\n }\n if (enableBand) {\n this.setSeriesRange(bandCollection, indicator, indicator.targetSeries[0]);\n }\n this.setSeriesRange(signalCollection, indicator, indicator.targetSeries[start]);\n this.setSeriesRange(upperCollection, indicator, indicator.targetSeries[start + 1]);\n this.setSeriesRange(lowerCollection, indicator, indicator.targetSeries[start + 2]);\n };\n /**\n * To destroy the Bollinger Band.\n * @return {void}\n * @private\n */\n BollingerBands.prototype.destroy = function (chart) {\n /**\n * Destroys the bollinger band\n */\n };\n /**\n * Get module name.\n */\n BollingerBands.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'BollingerBandsIndicator';\n };\n return BollingerBands;\n}(TechnicalAnalysis));\nexport { BollingerBands };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Series } from '../series/chart-series';\nimport { TechnicalAnalysis } from './indicator-base';\n/**\n * `MacdIndicator` module is used to render MACD indicator.\n */\nvar MacdIndicator = /** @class */ (function (_super) {\n __extends(MacdIndicator, _super);\n function MacdIndicator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Defines the collection of series to represent the MACD indicator\n * @private\n */\n MacdIndicator.prototype.initSeriesCollection = function (indicator, chart) {\n _super.prototype.initSeriesCollection.call(this, indicator, chart);\n if (indicator.macdType === 'Line' || indicator.macdType === 'Both') {\n var macdSeries = new Series(indicator, 'targetSeries', {}, true);\n this.setSeriesProperties(macdSeries, indicator, 'MacdLine', indicator.macdLine.color, indicator.macdLine.width, chart);\n }\n if (indicator.macdType === 'Histogram' || indicator.macdType === 'Both') {\n var histogramSeries = new Series(indicator, 'targetSeries', {}, true);\n histogramSeries.type = 'Column';\n this.setSeriesProperties(histogramSeries, indicator, 'Histogram', indicator.macdPositiveColor, indicator.width, chart);\n }\n };\n /**\n * Defines the predictions using MACD approach\n * @private\n */\n MacdIndicator.prototype.initDataSource = function (indicator, chart) {\n var signalCollection = [];\n var fastPeriod = indicator.fastPeriod;\n var slowPeriod = indicator.slowPeriod;\n var trigger = indicator.period;\n var length = fastPeriod + trigger;\n var macdCollection = [];\n var histogramCollection = [];\n var validData = indicator.points;\n var signalSeries = indicator.targetSeries[0];\n var histogramSeries;\n var macdLineSeries;\n if (indicator.macdType === 'Histogram') {\n histogramSeries = indicator.targetSeries[1];\n }\n else {\n macdLineSeries = indicator.targetSeries[1];\n if (indicator.macdType === 'Both') {\n histogramSeries = indicator.targetSeries[2];\n }\n }\n if (validData && length < validData.length && slowPeriod <= fastPeriod &&\n slowPeriod > 0 && (length - 2) >= 0) {\n var shortEMA = this.calculateEMAValues(slowPeriod, validData, 'close');\n var longEMA = this.calculateEMAValues(fastPeriod, validData, 'close');\n var macdValues = this.getMACDVales(indicator, shortEMA, longEMA);\n macdCollection = this.getMACDPoints(indicator, macdValues, validData, macdLineSeries || signalSeries);\n var signalEMA = this.calculateEMAValues(trigger, macdCollection, 'y');\n signalCollection = this.getSignalPoints(indicator, signalEMA, validData, signalSeries);\n if (histogramSeries) {\n histogramCollection = this.getHistogramPoints(indicator, macdValues, signalEMA, validData, histogramSeries);\n }\n }\n this.setSeriesRange(signalCollection, indicator, indicator.targetSeries[0]);\n if (histogramSeries) {\n this.setSeriesRange(histogramCollection, indicator, histogramSeries);\n }\n if (macdLineSeries) {\n this.setSeriesRange(macdCollection, indicator, macdLineSeries);\n }\n };\n /**\n * Calculates the EMA values for the given period\n */\n MacdIndicator.prototype.calculateEMAValues = function (period, validData, field) {\n var sum = 0;\n var initialEMA = 0;\n var emaValues = [];\n var emaPercent = (2 / (period + 1));\n for (var i = 0; i < period; i++) {\n sum += Number(validData[i][field]);\n }\n initialEMA = (sum / period);\n emaValues.push(initialEMA);\n var emaAvg = initialEMA;\n for (var j = period; j < validData.length; j++) {\n emaAvg = (Number(validData[j][field]) - emaAvg) * emaPercent + emaAvg;\n emaValues.push(emaAvg);\n }\n return emaValues;\n };\n /**\n * Defines the MACD Points\n */\n MacdIndicator.prototype.getMACDPoints = function (indicator, macdPoints, validData, series) {\n var macdCollection = [];\n var dataMACDIndex = indicator.fastPeriod - 1;\n var macdIndex = 0;\n while (dataMACDIndex < validData.length) {\n macdCollection.push(this.getDataPoint(validData[dataMACDIndex].x, macdPoints[macdIndex], validData[dataMACDIndex], series, macdCollection.length));\n dataMACDIndex++;\n macdIndex++;\n }\n return macdCollection;\n };\n /**\n * Calculates the signal points\n */\n MacdIndicator.prototype.getSignalPoints = function (indicator, signalEma, validData, series) {\n var dataSignalIndex = indicator.fastPeriod + indicator.period - 2;\n var signalIndex = 0;\n var signalCollection = [];\n while (dataSignalIndex < validData.length) {\n signalCollection.push(this.getDataPoint(validData[dataSignalIndex].x, signalEma[signalIndex], validData[dataSignalIndex], series, signalCollection.length));\n dataSignalIndex++;\n signalIndex++;\n }\n return signalCollection;\n };\n /**\n * Calculates the MACD values\n */\n MacdIndicator.prototype.getMACDVales = function (indicator, shortEma, longEma) {\n var macdPoints = [];\n var diff = indicator.fastPeriod - indicator.slowPeriod;\n for (var i = 0; i < longEma.length; i++) {\n macdPoints.push((shortEma[i + diff] - longEma[i]));\n }\n return macdPoints;\n };\n /**\n * Calculates the Histogram Points\n */\n MacdIndicator.prototype.getHistogramPoints = function (indicator, macdPoints, signalEma, validData, series) {\n var dataHistogramIndex = indicator.fastPeriod + indicator.period - 2;\n var histogramIndex = 0;\n var histogramCollection = [];\n while (dataHistogramIndex < validData.length) {\n histogramCollection.push(this.getDataPoint(validData[dataHistogramIndex].x, macdPoints[histogramIndex + (indicator.period - 1)] - signalEma[histogramIndex], validData[dataHistogramIndex], series, histogramCollection.length, indicator));\n dataHistogramIndex++;\n histogramIndex++;\n }\n return histogramCollection;\n };\n /**\n * To destroy the MACD Indicator.\n * @return {void}\n * @private\n */\n MacdIndicator.prototype.destroy = function (chart) {\n /**\n * Destroys the MACD indicator\n */\n };\n /**\n * Get module name.\n */\n MacdIndicator.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'MacdIndicator';\n };\n return MacdIndicator;\n}(TechnicalAnalysis));\nexport { MacdIndicator };\n","import { Series, Points } from '../series/chart-series';\nimport { findClipRect, RectOption } from '../../common/utils/helper';\n/**\n * `Trendline` module is used to render 6 types of trendlines in chart.\n */\nvar Trendlines = /** @class */ (function () {\n function Trendlines() {\n }\n /**\n * Defines the collection of series, that are used to represent a trendline\n * @private\n */\n Trendlines.prototype.initSeriesCollection = function (trendline, chart) {\n var trendLineSeries = new Series(trendline, 'targetSeries', {}, true);\n if (trendline.type === 'Linear' || trendline.type === 'MovingAverage') {\n trendLineSeries.type = 'Line';\n }\n else {\n trendLineSeries.type = 'Spline';\n }\n this.setSeriesProperties(trendLineSeries, trendline, trendline.type, trendline.fill, trendline.width, chart);\n };\n /**\n * Initializes the properties of the trendline series\n */\n Trendlines.prototype.setSeriesProperties = function (series, trendline, name, fill, width, chart) {\n series.name = trendline.name;\n series.xName = 'x';\n series.yName = 'y';\n series.fill = fill || 'blue';\n series.width = width;\n series.clipRectElement = trendline.clipRectElement;\n series.points = [];\n series.enableTooltip = trendline.enableTooltip;\n series.index = trendline.index;\n series.sourceIndex = trendline.sourceIndex;\n series.interior = series.fill;\n series.animation = trendline.animation;\n series.legendShape = 'HorizontalLine';\n series.marker = trendline.marker;\n series.category = 'TrendLine';\n series.chart = chart;\n series.xMin = Infinity;\n series.xMax = -Infinity;\n series.yMin = Infinity;\n series.yMax = -Infinity;\n series.xData = [];\n series.yData = [];\n trendline.targetSeries = series;\n };\n /**\n * Creates the elements of a trendline\n */\n Trendlines.prototype.createTrendLineElements = function (chart, trendline, index, element, clipRectElement) {\n trendline.trendLineElement = element;\n trendline.targetSeries.clipRectElement = clipRectElement;\n trendline.targetSeries.seriesElement = element;\n chart.trendLineElements.appendChild(trendline.trendLineElement);\n };\n /**\n * Defines the data point of trendline\n */\n Trendlines.prototype.getDataPoint = function (x, y, sourcePoint, series, index) {\n var trendPoint = new Points();\n trendPoint.x = x;\n trendPoint.y = y;\n trendPoint.xValue = Number(x);\n trendPoint.color = series.fill;\n trendPoint.index = index;\n trendPoint.yValue = Number(y);\n trendPoint.visible = true;\n series.xMin = Math.min(series.xMin, trendPoint.xValue);\n series.yMin = Math.min(series.yMin, trendPoint.yValue);\n series.xMax = Math.max(series.xMax, trendPoint.xValue);\n series.yMax = Math.max(series.yMax, trendPoint.yValue);\n series.xData.push(trendPoint.xValue);\n return trendPoint;\n };\n /**\n * Finds the slope and intercept of trendline\n */\n Trendlines.prototype.findSlopeIntercept = function (xValues, yValues, trendline, points) {\n var xAvg = 0;\n var yAvg = 0;\n var xyAvg = 0;\n var xxAvg = 0;\n var yyAvg = 0;\n var index = 0;\n var slope = 0;\n var intercept = 0;\n while (index < points.length) {\n xAvg += xValues[index];\n yAvg += yValues[index];\n xyAvg += xValues[index] * yValues[index];\n xxAvg += xValues[index] * xValues[index];\n yyAvg += yValues[index] * yValues[index];\n index++;\n }\n var type = trendline.type;\n if (trendline.intercept && (type === 'Linear' || type === 'Exponential')) {\n intercept = trendline.intercept;\n switch (type) {\n case 'Linear':\n slope = ((xyAvg) - (trendline.intercept * xAvg)) / xxAvg;\n break;\n case 'Exponential':\n slope = ((xyAvg) - (Math.log(Math.abs(trendline.intercept)) * xAvg)) / xxAvg;\n break;\n }\n }\n else {\n slope = ((points.length * xyAvg) - (xAvg * yAvg)) / ((points.length * xxAvg) - (xAvg * xAvg));\n if (type === 'Exponential' || type === 'Power') {\n intercept = Math.exp((yAvg - (slope * xAvg)) / points.length);\n }\n else {\n intercept = (yAvg - (slope * xAvg)) / points.length;\n }\n }\n return { slope: slope, intercept: intercept };\n };\n /**\n * Defines the points to draw the trendlines\n */\n Trendlines.prototype.initDataSource = function (trendline, chart) {\n var points = trendline.points;\n if (points && points.length) {\n //prepare data\n var trendlineSeries = trendline.targetSeries;\n switch (trendline.type) {\n case 'Linear':\n this.setLinearRange(points, trendline, trendlineSeries);\n break;\n case 'Exponential':\n this.setExponentialRange(points, trendline, trendlineSeries);\n break;\n case 'MovingAverage':\n this.setMovingAverageRange(points, trendline, trendlineSeries);\n break;\n case 'Polynomial':\n this.setPolynomialRange(points, trendline, trendlineSeries);\n break;\n case 'Power':\n this.setPowerRange(points, trendline, trendlineSeries);\n break;\n case 'Logarithmic':\n this.setLogarithmicRange(points, trendline, trendlineSeries);\n break;\n }\n if (trendline.type !== 'Linear' && trendline.type !== 'MovingAverage') {\n trendlineSeries.chart.splineSeriesModule.findSplinePoint(trendlineSeries);\n }\n }\n };\n /**\n * Calculation of exponential points\n */\n Trendlines.prototype.setExponentialRange = function (points, trendline, series) {\n var xValue = [];\n var yValue = [];\n var index = 0;\n var slopeIntercept;\n while (index < points.length) {\n var point = points[index];\n xValue.push(point.xValue);\n yValue.push(Math.log(point.yValue));\n index++;\n }\n slopeIntercept = this.findSlopeIntercept(xValue, yValue, trendline, points);\n series.points = this.getExponentialPoints(trendline, points, xValue, yValue, series, slopeIntercept);\n };\n /**\n * Calculation of logarithmic points\n */\n Trendlines.prototype.setLogarithmicRange = function (points, trendline, series) {\n var xLogValue = [];\n var yLogValue = [];\n var xPointsLgr = [];\n var slopeIntercept;\n var index = 0;\n while (index < points.length) {\n var point = points[index];\n xPointsLgr.push(point.xValue);\n xLogValue.push(Math.log(point.xValue));\n yLogValue.push(point.yValue);\n index++;\n }\n slopeIntercept = this.findSlopeIntercept(xLogValue, yLogValue, trendline, points);\n series.points = this.getLogarithmicPoints(trendline, points, xPointsLgr, yLogValue, series, slopeIntercept);\n };\n /**\n * Calculation of polynomial points\n */\n Trendlines.prototype.setPolynomialRange = function (points, trendline, series) {\n var xPolyValues = [];\n var yPolyValues = [];\n var index = 0;\n while (index < points.length) {\n var point = points[index];\n xPolyValues.push(point.xValue);\n yPolyValues.push(point.yValue);\n index++;\n }\n series.points = this.getPolynomialPoints(trendline, points, xPolyValues, yPolyValues, series);\n };\n /**\n * Calculation of power points\n */\n Trendlines.prototype.setPowerRange = function (points, trendline, series) {\n var xValues = [];\n var yValues = [];\n var powerPoints = [];\n var slopeIntercept;\n var index = 0;\n while (index < points.length) {\n var point = points[index];\n powerPoints.push(point.xValue);\n xValues.push(Math.log(point.xValue));\n yValues.push(Math.log(point.yValue));\n index++;\n }\n slopeIntercept = this.findSlopeIntercept(xValues, yValues, trendline, points);\n series.points = this.getPowerPoints(trendline, points, powerPoints, yValues, series, slopeIntercept);\n };\n /**\n * Calculation of linear points\n */\n Trendlines.prototype.setLinearRange = function (points, trendline, series) {\n var xValues = [];\n var yValues = [];\n var slopeIntercept;\n var index = 0;\n while (index < points.length) {\n var point = points[index];\n xValues.push(point.xValue);\n yValues.push(point.yValue);\n index++;\n }\n slopeIntercept = this.findSlopeIntercept(xValues, yValues, trendline, points);\n series.points = this.getLinearPoints(trendline, points, xValues, yValues, series, slopeIntercept);\n };\n /**\n * Calculation of moving average points\n */\n Trendlines.prototype.setMovingAverageRange = function (points, trendline, series) {\n var xValues = [];\n var yValues = [];\n var xAvgValues = [];\n var index = 0;\n while (index < points.length) {\n var point = points[index];\n xAvgValues.push(point.xValue);\n xValues.push(index + 1);\n yValues.push(point.yValue);\n index++;\n }\n series.points = this.getMovingAveragePoints(trendline, points, xAvgValues, yValues, series);\n };\n /**\n * Calculation of logarithmic points\n */\n Trendlines.prototype.getLogarithmicPoints = function (trendline, points, xValues, yValues, series, slopeInterceptLog) {\n var midPoint = Math.round((points.length / 2));\n var pts = [];\n var x1Log = xValues[0] - trendline.backwardForecast;\n var y1Log = slopeInterceptLog.intercept + (slopeInterceptLog.slope * Math.log(x1Log));\n var x2Log = xValues[midPoint - 1];\n var y2Log = slopeInterceptLog.intercept + (slopeInterceptLog.slope * Math.log(x2Log));\n var x3Log = xValues[xValues.length - 1] + trendline.forwardForecast;\n var y3Log = slopeInterceptLog.intercept + (slopeInterceptLog.slope * Math.log(x3Log));\n pts.push(this.getDataPoint(x1Log, y1Log, points[0], series, pts.length));\n pts.push(this.getDataPoint(x2Log, y2Log, points[midPoint - 1], series, pts.length));\n pts.push(this.getDataPoint(x3Log, y3Log, points[points.length - 1], series, pts.length));\n return pts;\n };\n /**\n * Defines the points based on data point\n */\n Trendlines.prototype.getPowerPoints = function (trendline, points, xValues, yValues, series, slopeInterceptPower) {\n var midPoint = Math.round((points.length / 2));\n var pts = [];\n var x1 = xValues[0] - trendline.backwardForecast;\n x1 = x1 > -1 ? x1 : 0;\n var y1 = slopeInterceptPower.intercept * Math.pow(x1, slopeInterceptPower.slope);\n var x2 = xValues[midPoint - 1];\n var y2 = slopeInterceptPower.intercept * Math.pow(x2, slopeInterceptPower.slope);\n var x3 = xValues[xValues.length - 1] + trendline.forwardForecast;\n var y3 = slopeInterceptPower.intercept * Math.pow(x3, slopeInterceptPower.slope);\n pts.push(this.getDataPoint(x1, y1, points[0], series, pts.length));\n pts.push(this.getDataPoint(x2, y2, points[midPoint - 1], series, pts.length));\n pts.push(this.getDataPoint(x3, y3, points[points.length - 1], series, pts.length));\n return pts;\n };\n /**\n * Get the polynomial points based on polynomial slopes\n */\n Trendlines.prototype.getPolynomialPoints = function (trendline, points, xValues, yValues, series) {\n var midPoint = Math.round((points.length / 2));\n var pts = [];\n var polynomialOrder = points.length <= trendline.polynomialOrder ? points.length : trendline.polynomialOrder;\n polynomialOrder = Math.max(2, polynomialOrder);\n polynomialOrder = Math.min(6, polynomialOrder);\n trendline.polynomialOrder = polynomialOrder;\n trendline.polynomialSlopes = [];\n trendline.polynomialSlopes.length = trendline.polynomialOrder + 1;\n var index = 0;\n while (index < xValues.length) {\n var xVal = xValues[index];\n var yVal = yValues[index];\n var subIndex = 0;\n while (subIndex <= trendline.polynomialOrder) {\n if (!trendline.polynomialSlopes[subIndex]) {\n trendline.polynomialSlopes[subIndex] = 0;\n }\n trendline.polynomialSlopes[subIndex] += Math.pow(xVal, subIndex) * yVal;\n ++subIndex;\n }\n index++;\n }\n var numArray = [];\n numArray.length = 1 + 2 * trendline.polynomialOrder;\n var matrix = [];\n matrix.length = trendline.polynomialOrder + 1;\n var newIndex = 0;\n while (newIndex < (trendline.polynomialOrder + 1)) {\n matrix[newIndex] = [];\n matrix[newIndex].length = 3;\n newIndex++;\n }\n var nIndex = 0;\n var num1 = 0;\n while (nIndex < xValues.length) {\n var d = xValues[nIndex];\n var num2 = 1.0;\n var nIndex2 = 0;\n while (nIndex2 < numArray.length) {\n if (!numArray[nIndex2]) {\n numArray[nIndex2] = 0;\n }\n numArray[nIndex2] += num2;\n num2 *= d;\n ++num1;\n ++nIndex2;\n }\n ++nIndex;\n }\n var nnIndex = 0;\n while (nnIndex <= trendline.polynomialOrder) {\n var nnIndex2 = 0;\n while (nnIndex2 <= trendline.polynomialOrder) {\n matrix[nnIndex][nnIndex2] = numArray[nnIndex + nnIndex2];\n ++nnIndex2;\n }\n ++nnIndex;\n }\n if (!this.gaussJordanElimination(matrix, trendline.polynomialSlopes)) {\n trendline.polynomialSlopes = null;\n }\n pts = this.getPoints(trendline, points, xValues, yValues, series);\n return pts;\n };\n /**\n * Defines the moving average points\n */\n Trendlines.prototype.getMovingAveragePoints = function (trendline, points, xValues, yValues, series) {\n var pts = [];\n var period = trendline.period >= points.length ? points.length - 1 : trendline.period;\n period = Math.max(2, period);\n var index = 0;\n var y;\n var x;\n var count;\n var nullCount;\n while (index < points.length - 1) {\n y = count = nullCount = 0;\n for (var j = index; count < period; j++) {\n count++;\n if (!yValues[j]) {\n nullCount++;\n }\n y += yValues[j];\n }\n y = period - nullCount <= 0 ? null : y / (period - nullCount);\n if (y && !isNaN(y)) {\n x = xValues[period - 1 + index];\n pts.push(this.getDataPoint(x, y, points[period - 1 + index], series, pts.length));\n }\n index++;\n }\n return pts;\n };\n /**\n * Defines the linear points\n */\n Trendlines.prototype.getLinearPoints = function (trendline, points, xValues, yValues, series, slopeInterceptLinear) {\n var pts = [];\n var x1Linear = xValues[0] - trendline.backwardForecast;\n var y1Linear = slopeInterceptLinear.slope * x1Linear + slopeInterceptLinear.intercept;\n var x2Linear = xValues[xValues.length - 1] + trendline.forwardForecast;\n var y2Linear = slopeInterceptLinear.slope * x2Linear + slopeInterceptLinear.intercept;\n pts.push(this.getDataPoint(x1Linear, y1Linear, points[0], series, pts.length));\n pts.push(this.getDataPoint(x2Linear, y2Linear, points[points.length - 1], series, pts.length));\n return pts;\n };\n /**\n * Defines the exponential points\n */\n Trendlines.prototype.getExponentialPoints = function (trendline, points, xValues, yValues, series, slopeInterceptExp) {\n var midPoint = Math.round((points.length / 2));\n var ptsExp = [];\n var x1 = xValues[0] - trendline.backwardForecast;\n var y1 = slopeInterceptExp.intercept * Math.exp(slopeInterceptExp.slope * x1);\n var x2 = xValues[midPoint - 1];\n var y2 = slopeInterceptExp.intercept * Math.exp(slopeInterceptExp.slope * x2);\n var x3 = xValues[xValues.length - 1] + trendline.forwardForecast;\n var y3 = slopeInterceptExp.intercept * Math.exp(slopeInterceptExp.slope * x3);\n ptsExp.push(this.getDataPoint(x1, y1, points[0], series, ptsExp.length));\n ptsExp.push(this.getDataPoint(x2, y2, points[midPoint - 1], series, ptsExp.length));\n ptsExp.push(this.getDataPoint(x3, y3, points[points.length - 1], series, ptsExp.length));\n return ptsExp;\n };\n /**\n * Defines the points based on data point\n */\n Trendlines.prototype.getPoints = function (trendline, points, xValues, yValues, series) {\n var midPoint = Math.round((points.length / 2));\n var polynomialSlopes = trendline.polynomialSlopes;\n var pts = [];\n var x1 = 1;\n var index = 1;\n var xValue;\n var yValue;\n while (index <= polynomialSlopes.length) {\n if (index === 1) {\n xValue = xValues[0] - trendline.backwardForecast;\n yValue = this.getPolynomialYValue(polynomialSlopes, xValue);\n pts.push(this.getDataPoint(xValue, yValue, points[0], series, pts.length));\n }\n else if (index === polynomialSlopes.length) {\n xValue = xValues[points.length - 1] + trendline.forwardForecast;\n yValue = this.getPolynomialYValue(polynomialSlopes, xValue);\n pts.push(this.getDataPoint(xValue, yValue, points[points.length - 1], series, pts.length));\n }\n else {\n x1 += (points.length + trendline.forwardForecast) / polynomialSlopes.length;\n xValue = xValues[parseInt(x1.toString(), 10) - 1];\n yValue = this.getPolynomialYValue(polynomialSlopes, xValue);\n pts.push(this.getDataPoint(xValue, yValue, points[parseInt(x1.toString(), 10) - 1], series, pts.length));\n }\n index++;\n }\n return pts;\n };\n /**\n * Defines the polynomial value of y\n */\n Trendlines.prototype.getPolynomialYValue = function (slopes, x) {\n var sum = 0;\n var index = 0;\n while (index < slopes.length) {\n sum += slopes[index] * Math.pow(x, index);\n index++;\n }\n return sum;\n };\n /**\n * Defines the gauss jordan elimination\n */\n Trendlines.prototype.gaussJordanElimination = function (matrix, polynomialSlopes) {\n var length = matrix.length;\n var numArray1 = [];\n var numArray2 = [];\n var numArray3 = [];\n numArray1.length = length;\n numArray2.length = length;\n numArray3.length = length;\n var index = 0;\n while (index < length) {\n numArray3[index] = 0;\n ++index;\n }\n var index1 = 0;\n while (index1 < length) {\n var num1 = 0;\n var index2 = 0;\n var index3 = 0;\n var index4 = 0;\n while (index4 < length) {\n if (numArray3[index4] !== 1) {\n var index5 = 0;\n while (index5 < length) {\n if (numArray3[index5] === 0 && Math.abs(matrix[index4][index5]) >= num1) {\n num1 = Math.abs(matrix[index4][index5]);\n index2 = index4;\n index3 = index5;\n }\n ++index5;\n }\n }\n ++index4;\n }\n ++numArray3[index3];\n if (index2 !== index3) {\n var index4_1 = 0;\n while (index4_1 < length) {\n var num2 = matrix[index2][index4_1];\n matrix[index2][index4_1] = matrix[index3][index4_1];\n matrix[index3][index4_1] = num2;\n ++index4_1;\n }\n var num3 = polynomialSlopes[index2];\n polynomialSlopes[index2] = polynomialSlopes[index3];\n polynomialSlopes[index3] = num3;\n }\n numArray2[index1] = index2;\n numArray1[index1] = index3;\n if (matrix[index3][index3] === 0.0) {\n return false;\n }\n var num4 = 1.0 / matrix[index3][index3];\n matrix[index3][index3] = 1.0;\n var iindex4 = 0;\n while (iindex4 < length) {\n matrix[index3][iindex4] *= num4;\n ++iindex4;\n }\n polynomialSlopes[index3] *= num4;\n var iandex4 = 0;\n while (iandex4 < length) {\n if (iandex4 !== index3) {\n var num2 = matrix[iandex4][index3];\n matrix[iandex4][index3] = 0.0;\n var index5 = 0;\n while (index5 < length) {\n matrix[iandex4][index5] -= matrix[index3][index5] * num2;\n ++index5;\n }\n polynomialSlopes[iandex4] -= polynomialSlopes[index3] * num2;\n }\n ++iandex4;\n }\n ++index1;\n }\n var iindex1 = length - 1;\n while (iindex1 >= 0) {\n if (numArray2[iindex1] !== numArray1[iindex1]) {\n var iindex2 = 0;\n while (iindex2 < length) {\n var num = matrix[iindex2][numArray2[iindex1]];\n matrix[iindex2][numArray2[iindex1]] = matrix[iindex2][numArray1[iindex1]];\n matrix[iindex2][numArray1[iindex1]] = num;\n ++iindex2;\n }\n }\n --iindex1;\n }\n return true;\n };\n /**\n * Defines the trendline elements\n */\n Trendlines.prototype.getTrendLineElements = function (series, chart) {\n findClipRect(series);\n var clipRect = series.clipRect;\n var clipRectElement = chart.renderer.drawClipPath(new RectOption(chart.element.id + '_ChartTrendlineClipRect_' + series.index, 'transparent', { width: 1, color: 'Gray' }, 1, {\n x: 0, y: 0, width: clipRect.width,\n height: clipRect.height,\n }));\n var element;\n element = chart.renderer.createGroup({\n 'id': chart.element.id + 'TrendlineSeriesGroup' + series.index,\n 'transform': 'translate(' + clipRect.x + ',' + clipRect.y + ')',\n 'clip-path': 'url(#' + chart.element.id + '_ChartTrendlineClipRect_' + series.index + ')'\n });\n //defines the clip rect element\n element.appendChild(clipRectElement);\n for (var _i = 0, _a = series.trendlines; _i < _a.length; _i++) {\n var trendline = _a[_i];\n this.createTrendLineElements(chart, trendline, trendline.index, element, clipRectElement);\n }\n };\n /**\n * To destroy the trendline\n */\n Trendlines.prototype.destroy = function (chart) {\n /**\n * Destroys the Linear Trendline\n */\n };\n /**\n * Get module name\n */\n Trendlines.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'TrendLine';\n };\n return Trendlines;\n}());\nexport { Trendlines };\n","import { Animation, Browser } from '@syncfusion/ej2-base';\nimport { measureText, findDirection, textElement, getValueXByPoint, stopTimer, getValueYByPoint, TextOption, Rect, ChartLocation, PathOption, withInBounds, removeElement } from '../../common/utils/helper';\n/**\n * `Crosshair` module is used to render the crosshair for chart.\n */\nvar Crosshair = /** @class */ (function () {\n /**\n * Constructor for crosshair module.\n * @private\n */\n function Crosshair(chart) {\n this.arrowLocation = new ChartLocation(0, 0);\n this.rx = 2;\n this.ry = 2;\n this.chart = chart;\n this.elementID = this.chart.element.id;\n this.addEventListener();\n }\n /**\n * @hidden\n */\n Crosshair.prototype.addEventListener = function () {\n if (this.chart.isDestroyed) {\n return;\n }\n var cancelEvent = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n this.chart.on(Browser.touchMoveEvent, this.mouseMoveHandler, this);\n this.chart.on(Browser.touchEndEvent, this.mouseUpHandler, this);\n this.chart.on(cancelEvent, this.mouseLeaveHandler, this);\n this.chart.on('tapHold', this.longPress, this);\n };\n Crosshair.prototype.mouseUpHandler = function () {\n if (this.chart.startMove) {\n this.removeCrosshair(2000);\n }\n };\n Crosshair.prototype.mouseLeaveHandler = function () {\n this.removeCrosshair(1000);\n };\n Crosshair.prototype.mouseMoveHandler = function (event) {\n var chart = this.chart;\n if (event.type === 'touchmove' && (Browser.isIos || Browser.isIos7) && chart.startMove && event.preventDefault) {\n event.preventDefault();\n }\n // Tooltip for chart series.\n if (!chart.disableTrackTooltip) {\n if (withInBounds(chart.mouseX, chart.mouseY, chart.chartAxisLayoutPanel.seriesClipRect)) {\n if (chart.startMove || !chart.isTouch) {\n this.crosshair();\n }\n }\n else {\n this.removeCrosshair(1000);\n }\n }\n };\n /**\n * Handles the long press on chart.\n * @return {boolean}\n * @private\n */\n Crosshair.prototype.longPress = function () {\n var chart = this.chart;\n if (withInBounds(chart.mouseX, chart.mouseY, chart.chartAxisLayoutPanel.seriesClipRect)) {\n this.crosshair();\n }\n return false;\n };\n /**\n * Renders the crosshair.\n * @return {void}\n */\n Crosshair.prototype.crosshair = function () {\n var chart = this.chart;\n var horizontalCross = '';\n var verticalCross = '';\n var options;\n var crosshair = chart.crosshair;\n var chartRect = chart.chartAxisLayoutPanel.seriesClipRect;\n var crossGroup = document.getElementById(this.elementID + '_UserInteraction');\n this.stopAnimation();\n if (chart.tooltip.enable && !withInBounds(chart.tooltipModule.valueX, chart.tooltipModule.valueY, chartRect)) {\n return null;\n }\n this.valueX = chart.tooltip.enable ? chart.tooltipModule.valueX : chart.mouseX;\n this.valueY = chart.tooltip.enable ? chart.tooltipModule.valueY : chart.mouseY;\n crossGroup.setAttribute('opacity', '1');\n if (crosshair.lineType === 'Both' || crosshair.lineType === 'Horizontal') {\n horizontalCross += 'M ' + chartRect.x + ' ' + this.valueY +\n ' L ' + (chartRect.x + chartRect.width) + ' ' + this.valueY;\n }\n if (crosshair.lineType === 'Both' || crosshair.lineType === 'Vertical') {\n verticalCross += 'M ' + this.valueX + ' ' + chartRect.y +\n ' L ' + this.valueX + ' ' + (chartRect.y + chartRect.height);\n }\n if (crossGroup.childNodes.length === 0) {\n var axisTooltipGroup = chart.renderer.createGroup({ 'id': this.elementID + '_crosshair_axis' });\n options = new PathOption(this.elementID + '_HorizontalLine', 'none', crosshair.line.width, crosshair.line.color || chart.themeStyle.crosshairLine, 1, null, horizontalCross);\n this.renderCrosshairLine(options, crossGroup);\n options.d = verticalCross;\n options.id = this.elementID + '_VerticalLine';\n this.renderCrosshairLine(options, crossGroup);\n crossGroup.appendChild(axisTooltipGroup);\n this.renderAxisTooltip(chart, chartRect, crossGroup.lastChild);\n }\n else {\n document.getElementById(this.elementID + '_HorizontalLine').setAttribute('d', horizontalCross);\n document.getElementById(this.elementID + '_VerticalLine').setAttribute('d', verticalCross);\n this.renderAxisTooltip(chart, chartRect, crossGroup.lastChild);\n }\n };\n Crosshair.prototype.renderCrosshairLine = function (options, crossGroup) {\n var htmlObject = this.chart.renderer.drawPath(options);\n crossGroup.appendChild(htmlObject);\n };\n Crosshair.prototype.renderAxisTooltip = function (chart, chartRect, axisGroup) {\n var axis;\n var text;\n var rect;\n var pathElement;\n var textElem;\n var options;\n var padding = 5;\n var direction;\n var axisRect;\n for (var k = 0, length_1 = chart.axisCollections.length; k < length_1; k++) {\n axis = chart.axisCollections[k];\n axisRect = !axis.placeNextToAxisLine ? axis.rect : axis.updatedRect;\n if (axis.crosshairTooltip.enable) {\n if ((this.valueX <= (axisRect.x + axisRect.width) && axisRect.x <= this.valueX) ||\n (this.valueY <= (axisRect.y + axisRect.height) && axisRect.y <= this.valueY)) {\n pathElement = document.getElementById(this.elementID + '_axis_tooltip_' + k);\n textElem = document.getElementById(this.elementID + '_axis_tooltip_text_' + k);\n text = this.getAxisText(axis);\n if (!text) {\n continue;\n }\n rect = this.tooltipLocation(text, axis, chartRect, axisRect);\n if (pathElement === null) {\n pathElement = chart.renderer.drawPath({\n 'id': this.elementID + '_axis_tooltip_' + k,\n 'fill': axis.crosshairTooltip.fill || chart.themeStyle.crosshairFill\n });\n axisGroup.appendChild(pathElement);\n options = new TextOption(this.elementID + '_axis_tooltip_text_' + k, 0, 0, 'start', text);\n textElem = textElement(options, axis.crosshairTooltip.textStyle, axis.crosshairTooltip.textStyle.color || chart.themeStyle.crosshairLabel, axisGroup);\n }\n direction = findDirection(this.rx, this.ry, rect, this.arrowLocation, 10, this.isTop, this.isBottom, this.isLeft, this.valueX, this.valueY);\n pathElement.setAttribute('d', direction);\n textElem.textContent = text;\n textElem.setAttribute('x', (rect.x + padding).toString());\n textElem.setAttribute('y', (rect.y + padding + 3 * this.elementSize.height / 4).toString());\n }\n else {\n removeElement(this.elementID + '_axis_tooltip_' + k);\n removeElement(this.elementID + '_axis_tooltip_text_' + k);\n }\n }\n }\n };\n Crosshair.prototype.getAxisText = function (axis) {\n var value;\n this.isBottom = false;\n this.isTop = false;\n this.isLeft = false;\n this.isRight = false;\n var labelValue = (axis.valueType === 'Category' && axis.labelPlacement === 'BetweenTicks')\n ? 0.5 : 0;\n if (axis.orientation === 'Horizontal') {\n value = getValueXByPoint(Math.abs(this.valueX - axis.rect.x), axis.rect.width, axis) + labelValue;\n this.isBottom = !axis.opposedPosition;\n this.isTop = axis.opposedPosition;\n }\n else {\n value = getValueYByPoint(Math.abs(this.valueY - axis.rect.y), axis.rect.height, axis) + labelValue;\n this.isRight = axis.opposedPosition;\n this.isLeft = !axis.opposedPosition;\n }\n if (axis.valueType === 'DateTime') {\n return axis.format(new Date(value));\n }\n else if (axis.valueType === 'Category') {\n return axis.labels[Math.floor(value)];\n }\n else if (axis.valueType === 'Logarithmic') {\n return value = axis.format(Math.pow(axis.logBase, value));\n }\n else {\n var customLabelFormat = axis.labelFormat && axis.labelFormat.match('{value}') !== null;\n return customLabelFormat ? axis.labelFormat.replace('{value}', axis.format(value)) : axis.format(value);\n }\n };\n Crosshair.prototype.tooltipLocation = function (text, axis, bounds, axisRect) {\n var isBottom = false;\n var isLeft = false;\n var padding = 5;\n var arrowPadding = 10;\n var tooltipRect;\n var boundsX = bounds.x;\n var boundsY = bounds.y;\n var islabelInside = axis.labelPosition === 'Inside';\n var scrollBarHeight = axis.zoomingScrollBar && axis.zoomingScrollBar.svgObject ? axis.scrollBarHeight : 0;\n this.elementSize = measureText(text, axis.crosshairTooltip.textStyle);\n if (axis.orientation === 'Horizontal') {\n var yLocation = islabelInside ? axisRect.y - this.elementSize.height - (padding * 2 + arrowPadding) :\n axisRect.y + scrollBarHeight;\n var height = islabelInside ? axisRect.y - this.elementSize.height - arrowPadding : axisRect.y + arrowPadding;\n this.arrowLocation = new ChartLocation(this.valueX, yLocation);\n tooltipRect = new Rect((this.valueX - (this.elementSize.width / 2) - padding), height + (!islabelInside ? scrollBarHeight : 0), this.elementSize.width + padding * 2, this.elementSize.height + padding * 2);\n if (axis.opposedPosition) {\n tooltipRect.y = islabelInside ? axisRect.y : axisRect.y -\n (this.elementSize.height + padding * 2 + arrowPadding) - scrollBarHeight;\n }\n if (tooltipRect.x < boundsX) {\n tooltipRect.x = boundsX;\n }\n if (tooltipRect.x + tooltipRect.width > boundsX + bounds.width) {\n tooltipRect.x -= ((tooltipRect.x + tooltipRect.width) - (boundsX + bounds.width));\n }\n if (this.arrowLocation.x + arrowPadding / 2 > tooltipRect.x + tooltipRect.width - this.rx) {\n this.arrowLocation.x = tooltipRect.x + tooltipRect.width - this.rx - arrowPadding / 2;\n }\n if (this.arrowLocation.x - arrowPadding / 2 < tooltipRect.x + this.rx) {\n this.arrowLocation.x = tooltipRect.x + this.rx + arrowPadding / 2;\n }\n }\n else {\n scrollBarHeight = scrollBarHeight * (axis.opposedPosition ? 1 : -1);\n this.arrowLocation = new ChartLocation(axisRect.x, this.valueY);\n var width = islabelInside ? axisRect.x - scrollBarHeight :\n axisRect.x - (this.elementSize.width) - (padding * 2 + arrowPadding);\n tooltipRect = new Rect(width + scrollBarHeight, this.valueY - (this.elementSize.height / 2) - padding, this.elementSize.width + (padding * 2), this.elementSize.height + padding * 2);\n if (axis.opposedPosition) {\n tooltipRect.x = islabelInside ? axisRect.x - this.elementSize.width - arrowPadding :\n axisRect.x + arrowPadding + scrollBarHeight;\n if ((tooltipRect.x + tooltipRect.width) > this.chart.availableSize.width) {\n this.arrowLocation.x -= ((tooltipRect.x + tooltipRect.width) - this.chart.availableSize.width);\n tooltipRect.x -= ((tooltipRect.x + tooltipRect.width) - this.chart.availableSize.width);\n }\n }\n else {\n if (tooltipRect.x < 0) {\n this.arrowLocation.x -= tooltipRect.x;\n tooltipRect.x = 0;\n }\n }\n if (tooltipRect.y < boundsY) {\n tooltipRect.y = boundsY;\n }\n if (tooltipRect.y + tooltipRect.height >= boundsY + bounds.height) {\n tooltipRect.y -= ((tooltipRect.y + tooltipRect.height) - (boundsY + bounds.height));\n }\n if (this.arrowLocation.y + arrowPadding / 2 > tooltipRect.y + tooltipRect.height - this.ry) {\n this.arrowLocation.y = tooltipRect.y + tooltipRect.height - this.ry - arrowPadding / 2;\n }\n if (this.arrowLocation.y - arrowPadding / 2 < tooltipRect.y + this.ry) {\n this.arrowLocation.y = tooltipRect.y + this.ry + arrowPadding / 2;\n }\n }\n return tooltipRect;\n };\n Crosshair.prototype.stopAnimation = function () {\n stopTimer(this.crosshairInterval);\n };\n /**\n * Removes the crosshair on mouse leave.\n * @return {void}\n * @private\n */\n Crosshair.prototype.removeCrosshair = function (duration) {\n var chart = this.chart;\n var crosshair = document.getElementById(this.elementID + '_UserInteraction');\n this.stopAnimation();\n if (crosshair && crosshair.getAttribute('opacity') !== '0') {\n this.crosshairInterval = setTimeout(function () {\n new Animation({}).animate(crosshair, {\n duration: 200,\n progress: function (args) {\n // crosshair.removeAttribute('e-animate');\n crosshair.style.animation = '';\n crosshair.setAttribute('opacity', (1 - (args.timeStamp / args.duration)).toString());\n },\n end: function (model) {\n crosshair.setAttribute('opacity', '0');\n chart.startMove = false;\n if (chart.tooltipModule) {\n chart.tooltipModule.valueX = null;\n chart.tooltipModule.valueY = null;\n }\n }\n });\n }, duration);\n }\n };\n /**\n * Get module name.\n */\n Crosshair.prototype.getModuleName = function () {\n /**\n * Returns the module name\n */\n return 'Crosshair';\n };\n /**\n * To destroy the crosshair.\n * @return {void}\n * @private\n */\n Crosshair.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return Crosshair;\n}());\nexport { Crosshair };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { extend } from '@syncfusion/ej2-base';\nimport { ChartLocation } from '../../common/utils/helper';\nimport { stopTimer, removeElement } from '../../common/utils/helper';\nimport { ChartData } from '../../chart/utils/get-data';\nimport { tooltipRender } from '../../common/model/constants';\nimport { Tooltip as SVGTooltip } from '@syncfusion/ej2-svg-base';\n/**\n * Tooltip Module used to render the tooltip for series.\n */\nvar BaseTooltip = /** @class */ (function (_super) {\n __extends(BaseTooltip, _super);\n /**\n * Constructor for tooltip module.\n * @private.\n */\n function BaseTooltip(chart) {\n var _this = _super.call(this, chart) || this;\n _this.element = _this.chart.element;\n _this.textStyle = chart.tooltip.textStyle;\n _this.control = chart;\n return _this;\n }\n BaseTooltip.prototype.getElement = function (id) {\n return document.getElementById(id);\n };\n /**\n * Renders the tooltip.\n * @return {void}\n * @private\n */\n BaseTooltip.prototype.getTooltipElement = function (isTooltip) {\n this.inverted = this.chart.requireInvertedAxis;\n this.header = (this.control.tooltip.header === null) ?\n ((this.control.tooltip.shared) ? '${point.x}' : '${series.name}')\n : (this.control.tooltip.header);\n this.formattedText = [];\n if (!isTooltip) {\n return this.createElement();\n }\n return null;\n };\n BaseTooltip.prototype.createElement = function () {\n var tooltipDiv = document.createElement('div');\n tooltipDiv.id = this.element.id + '_tooltip';\n tooltipDiv.className = 'ejSVGTooltip';\n tooltipDiv.setAttribute('style', 'pointer-events:none; position:absolute;z-index: 1');\n return tooltipDiv;\n };\n BaseTooltip.prototype.pushData = function (data, isFirst, tooltipDiv, isChart) {\n if (data.series.enableTooltip) {\n if (isChart) {\n this.currentPoints.push(data);\n }\n else {\n this.currentPoints.push(data);\n }\n this.stopAnimation();\n if (isFirst) {\n document.getElementById(this.element.id + '_Secondary_Element').appendChild(tooltipDiv);\n }\n return true;\n }\n return false;\n };\n BaseTooltip.prototype.removeHighlight = function (chart) {\n var item;\n var series;\n for (var i = 0, len = this.previousPoints.length; i < len; i++) {\n item = this.previousPoints[i];\n if (item.series.isRectSeries) {\n if (item.series.visible) {\n this.highlightPoint(item.series, item.point.index, false);\n }\n continue;\n }\n series = item.series;\n if (!series.marker.visible && item.series.type !== 'Scatter' && item.series.type !== 'Bubble') {\n this.previousPoints.shift();\n len -= 1;\n }\n }\n };\n BaseTooltip.prototype.highlightPoint = function (series, pointIndex, highlight) {\n var element = this.getElement(this.element.id + '_Series_' + series.index + '_Point_' + pointIndex);\n if (element) {\n element.setAttribute('opacity', (highlight ? series.opacity / 2 : series.opacity).toString());\n }\n };\n BaseTooltip.prototype.highlightPoints = function () {\n for (var _i = 0, _a = this.currentPoints; _i < _a.length; _i++) {\n var item = _a[_i];\n if (item.series.isRectSeries && item.series.category === 'Series') {\n this.highlightPoint(item.series, item.point.index, true);\n }\n }\n };\n BaseTooltip.prototype.createTooltip = function (chart, isFirst, header, location, clipLocation, point, shapes, offset, bounds, extraPoints, templatePoint) {\n if (extraPoints === void 0) { extraPoints = null; }\n if (templatePoint === void 0) { templatePoint = null; }\n var series = this.currentPoints[0].series;\n var module = chart.tooltipModule || chart.accumulationTooltipModule;\n if (isFirst) {\n this.svgTooltip = new SVGTooltip({\n opacity: chart.tooltip.opacity,\n header: header, content: this.text, fill: chart.tooltip.fill, border: chart.tooltip.border,\n enableAnimation: chart.tooltip.enableAnimation, location: location, shared: chart.tooltip.shared,\n shapes: shapes, clipBounds: this.chart.chartAreaType === 'PolarRadar' ? new ChartLocation(0, 0) : clipLocation,\n areaBounds: bounds, palette: this.findPalette(), template: chart.tooltip.template, data: templatePoint,\n theme: chart.theme, offset: offset, textStyle: chart.tooltip.textStyle,\n isNegative: (series.isRectSeries && series.type !== 'Waterfall' && point && point.y < 0),\n inverted: this.chart.requireInvertedAxis && series.isRectSeries,\n arrowPadding: this.text.length > 1 ? 0 : 12,\n tooltipRender: function () {\n module.removeHighlight(module.control);\n module.highlightPoints();\n module.updatePreviousPoint(extraPoints);\n },\n animationComplete: function (args) {\n if (args.tooltip.fadeOuted) {\n module.fadeOut(module.previousPoints, chart);\n }\n }\n }, '#' + this.element.id + '_tooltip');\n }\n else {\n this.svgTooltip.location = location;\n this.svgTooltip.content = this.text;\n this.svgTooltip.header = header;\n this.svgTooltip.offset = offset;\n this.svgTooltip.palette = this.findPalette();\n this.svgTooltip.shapes = shapes;\n this.svgTooltip.data = templatePoint;\n this.svgTooltip.template = chart.tooltip.template;\n this.svgTooltip.textStyle = chart.tooltip.textStyle;\n this.svgTooltip.isNegative = (series.isRectSeries && series.type !== 'Waterfall' && point && point.y < 0);\n this.svgTooltip.clipBounds = this.chart.chartAreaType === 'PolarRadar' ? new ChartLocation(0, 0) : clipLocation;\n this.svgTooltip.arrowPadding = this.text.length > 1 ? 0 : 12;\n this.svgTooltip.dataBind();\n }\n };\n BaseTooltip.prototype.findPalette = function () {\n var colors = [];\n for (var _i = 0, _a = this.currentPoints; _i < _a.length; _i++) {\n var data = _a[_i];\n colors.push(this.findColor(data, data.series));\n }\n return colors;\n };\n BaseTooltip.prototype.findColor = function (data, series) {\n if (series.isRectSeries) {\n return data.point.color;\n }\n else {\n return (data.point.color && data.point.color !== '#ffffff' ? data.point.color\n : data.point.interior) ||\n series.marker.fill || series.interior;\n }\n };\n BaseTooltip.prototype.updatePreviousPoint = function (extraPoints) {\n if (extraPoints) {\n this.currentPoints = this.currentPoints.concat(extraPoints);\n }\n this.previousPoints = extend([], this.currentPoints, null, true);\n };\n BaseTooltip.prototype.fadeOut = function (data, chart) {\n var svgElement = this.getElement(this.element.id + '_tooltip_svg');\n var isTooltip = (svgElement && parseInt(svgElement.getAttribute('opacity'), 10) > 0);\n if (!isTooltip) {\n this.valueX = null;\n this.valueY = null;\n this.currentPoints = [];\n this.removeHighlight(chart);\n this.removeHighlightedMarker(data);\n this.svgTooltip = null;\n this.control.trigger('animationComplete', {});\n }\n };\n /*\n * @hidden\n */\n BaseTooltip.prototype.removeHighlightedMarker = function (data) {\n if (this.chart.markerRender) {\n for (var _i = 0, data_1 = data; _i < data_1.length; _i++) {\n var item = data_1[_i];\n removeElement(this.element.id + '_Series_' + item.series.index +\n '_Point_' + item.point.index + '_Trackball');\n }\n this.chart.markerRender.removeHighlightedMarker();\n }\n this.previousPoints = [];\n };\n BaseTooltip.prototype.triggerEvent = function (point, isFirst, textCollection, firstText) {\n if (firstText === void 0) { firstText = true; }\n var argsData = {\n cancel: false, name: tooltipRender, text: textCollection,\n point: point.point, series: point.series, textStyle: this.textStyle\n };\n this.chart.trigger(tooltipRender, argsData);\n if (!argsData.cancel) {\n if (point.series.type === 'BoxAndWhisker') {\n this.removeText();\n isFirst = true;\n }\n this.formattedText = this.formattedText.concat(argsData.text);\n this.text = this.formattedText;\n }\n return !argsData.cancel;\n };\n BaseTooltip.prototype.removeText = function () {\n this.textElements = [];\n var element = this.getElement(this.element.id + '_tooltip_group');\n if (element && element.childNodes.length > 0) {\n while (element.lastChild && element.childNodes.length !== 1) {\n element.removeChild(element.lastChild);\n }\n }\n };\n BaseTooltip.prototype.stopAnimation = function () {\n stopTimer(this.toolTipInterval);\n };\n /**\n * Removes the tooltip on mouse leave.\n * @return {void}\n * @private\n */\n BaseTooltip.prototype.removeTooltip = function (duration) {\n var _this = this;\n var tooltipElement = this.getElement(this.element.id + '_tooltip');\n this.stopAnimation();\n if (tooltipElement && this.previousPoints.length > 0) {\n this.toolTipInterval = setTimeout(function () {\n if (_this.svgTooltip) {\n _this.svgTooltip.fadeOut();\n }\n }, duration);\n }\n };\n return BaseTooltip;\n}(ChartData));\nexport { BaseTooltip };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { extend, Browser } from '@syncfusion/ej2-base';\nimport { PointData, ChartLocation } from '../../common/utils/helper';\nimport { valueToCoefficient, removeElement, valueToPolarCoefficient, withInBounds } from '../../common/utils/helper';\nimport { BaseTooltip } from '../../common/user-interaction/tooltip';\n/**\n * `Tooltip` module is used to render the tooltip for chart series.\n */\nvar Tooltip = /** @class */ (function (_super) {\n __extends(Tooltip, _super);\n /**\n * Constructor for tooltip module.\n * @private.\n */\n function Tooltip(chart) {\n var _this = _super.call(this, chart) || this;\n _this.addEventListener();\n return _this;\n }\n /**\n * @hidden\n */\n Tooltip.prototype.addEventListener = function () {\n if (this.chart.isDestroyed) {\n return;\n }\n var cancelEvent = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n this.chart.on(cancelEvent, this.mouseLeaveHandler, this);\n this.chart.on('tapHold', this.longPress, this);\n this.chart.on(Browser.touchMoveEvent, this.mouseMoveHandler, this);\n this.chart.on(Browser.touchEndEvent, this.mouseUpHandler, this);\n };\n Tooltip.prototype.mouseUpHandler = function () {\n var chart = this.control;\n if (chart.isTouch && !this.isSelected(chart) &&\n ((withInBounds(chart.mouseX, chart.mouseY, chart.chartAxisLayoutPanel.seriesClipRect) && chart.tooltip.shared)\n || !chart.tooltip.shared)) {\n if (!chart.crosshair.enable) {\n this.tooltip();\n this.removeTooltip(2000);\n }\n else if (chart.startMove) {\n this.removeTooltip(2000);\n }\n }\n };\n Tooltip.prototype.mouseLeaveHandler = function () {\n this.removeTooltip(1000);\n };\n Tooltip.prototype.mouseMoveHandler = function () {\n var chart = this.chart;\n // Tooltip for chart series.\n if (!chart.disableTrackTooltip && !this.isSelected(chart)) {\n if (!chart.tooltip.shared && (!chart.isTouch || (chart.startMove))) {\n this.tooltip();\n }\n if (withInBounds(chart.mouseX, chart.mouseY, chart.chartAxisLayoutPanel.seriesClipRect)) {\n if (chart.tooltip.shared && (!chart.isTouch || (chart.startMove))) {\n this.tooltip();\n }\n }\n else {\n if (chart.tooltip.shared) {\n this.removeTooltip(1000);\n }\n }\n }\n };\n /**\n * Handles the long press on chart.\n * @return {boolean}\n * @private\n */\n Tooltip.prototype.longPress = function () {\n var chart = this.chart;\n if (chart.crosshair.enable && withInBounds(chart.mouseX, chart.mouseY, chart.chartAxisLayoutPanel.seriesClipRect)) {\n this.tooltip();\n }\n return false;\n };\n /**\n * Renders the tooltip.\n * @return {void}\n */\n Tooltip.prototype.tooltip = function () {\n var svgElement = this.getElement(this.element.id + '_tooltip_svg');\n var isTooltip = (svgElement && parseInt(svgElement.getAttribute('opacity'), 10) > 0);\n var tooltipDiv = this.getTooltipElement(isTooltip);\n if (!this.chart.tooltip.shared) {\n this.renderSeriesTooltip(this.chart, !isTooltip, tooltipDiv);\n }\n else {\n this.renderGroupedTooltip(this.chart, !isTooltip, tooltipDiv);\n }\n };\n Tooltip.prototype.findHeader = function (data) {\n if (this.header === '') {\n return '';\n }\n this.header = this.parseTemplate(data.point, data.series, this.header, data.series.xAxis, data.series.yAxis);\n if (this.header.replace(//g, '').replace(/<\\/b>/g, '').trim() !== '') {\n return this.header;\n }\n return '';\n };\n Tooltip.prototype.findShapes = function () {\n var marker = [];\n for (var _i = 0, _a = this.currentPoints; _i < _a.length; _i++) {\n var data = _a[_i];\n marker.push(data.point.marker.shape || data.series.marker.shape);\n }\n return marker;\n };\n Tooltip.prototype.renderSeriesTooltip = function (chart, isFirst, tooltipDiv) {\n var data = this.getData();\n data.lierIndex = this.lierIndex;\n var rect = chart.chartAxisLayoutPanel.seriesClipRect;\n this.currentPoints = [];\n var tool;\n if (this.findData(data, this.previousPoints[0])) {\n if (this.pushData(data, isFirst, tooltipDiv, true)) {\n if (this.triggerEvent(data, isFirst, this.getTooltipText(data))) {\n this.createTooltip(chart, isFirst, this.findHeader(data), this.getSymbolLocation(data), data.series.clipRect, data.point, this.findShapes(), this.findMarkerHeight(this.currentPoints[0]), chart.chartAxisLayoutPanel.seriesClipRect, null, this.getTemplateText(data));\n }\n else {\n this.removeHighlight(this.control);\n this.getElement(this.element.id + '_tooltip').remove();\n }\n this.isRemove = true;\n }\n }\n else {\n if (!data.point && this.isRemove) {\n this.removeTooltip(1000);\n this.isRemove = false;\n }\n else {\n for (var _i = 0, _a = chart.visibleSeries; _i < _a.length; _i++) {\n var series = _a[_i];\n if (series.visible) {\n data = this.getClosestX(chart, series) || data;\n }\n }\n }\n }\n if (data && data.point) {\n this.findMouseValue(data, chart);\n }\n };\n Tooltip.prototype.findMarkerHeight = function (pointData) {\n var markerHeight = 0;\n var series = pointData.series;\n if (!series.isRectSeries) {\n markerHeight = (this.chart.tooltip.shared || series.marker.visible || series.type === 'Scatter'\n || series.drawType === 'Scatter') ? ((series.marker.height + 2) / 2 + (2 * series.marker.border.width)) : 0;\n }\n return markerHeight;\n };\n Tooltip.prototype.findData = function (data, previous) {\n return data.point && ((!previous || (previous.point !== data.point)) ||\n (previous && previous.lierIndex > 3 && previous.lierIndex !== this.lierIndex));\n };\n Tooltip.prototype.getSymbolLocation = function (data) {\n var location;\n if (data.series.type !== 'BoxAndWhisker') {\n if (!data.point.symbolLocations[0]) {\n return null;\n }\n location = new ChartLocation(data.point.symbolLocations[0].x, data.point.symbolLocations[0].y);\n }\n switch (data.series.type) {\n case 'BoxAndWhisker':\n return this.getBoxLocation(data);\n case 'Waterfall':\n return this.getWaterfallRegion(data, location);\n case 'RangeArea':\n return this.getRangeArea(data, location);\n default:\n return location;\n }\n };\n Tooltip.prototype.getRangeArea = function (data, location) {\n if (data.point.regions[0]) {\n if (!this.inverted) {\n location.y = data.point.regions[0].y + data.point.regions[0].height / 2;\n }\n else {\n location.x = data.point.regions[0].x + data.point.regions[0].width / 2;\n }\n }\n return location;\n };\n Tooltip.prototype.getWaterfallRegion = function (data, location) {\n if (!this.inverted) {\n location.y = (data.point.y < 0) ?\n location.y - data.point.regions[0].height : location.y;\n }\n else {\n location.x = (data.point.y < 0) ?\n location.x + data.point.regions[0].width : location.x;\n }\n return location;\n };\n Tooltip.prototype.getTooltipText = function (pointData) {\n var series = pointData.series;\n return this.parseTemplate(pointData.point, series, this.getFormat(this.chart, series), series.xAxis, series.yAxis);\n };\n Tooltip.prototype.getTemplateText = function (data) {\n if (this.chart.tooltip.template) {\n var point = extend({}, data.point);\n point.x = this.formatPointValue(data.point, data.series.xAxis, 'x', true, false);\n if ((data.series.seriesType === 'XY')) {\n point.y = this.formatPointValue(data.point, data.series.yAxis, 'y', false, true);\n }\n else {\n point.low = this.formatPointValue(data.point, data.series.yAxis, 'low', false, true);\n point.high = this.formatPointValue(data.point, data.series.yAxis, 'high', false, true);\n }\n return point;\n }\n else {\n return data.point;\n }\n };\n Tooltip.prototype.findMouseValue = function (data, chart) {\n if (!chart.requireInvertedAxis) {\n if (chart.chartAreaType === 'PolarRadar') {\n this.valueX = valueToPolarCoefficient(data.point.xValue, data.series.xAxis) * data.series.xAxis.rect.width\n + data.series.xAxis.rect.x;\n }\n else {\n this.valueX = valueToCoefficient(data.point.xValue, data.series.xAxis) * data.series.xAxis.rect.width\n + data.series.xAxis.rect.x;\n }\n this.valueY = chart.mouseY;\n }\n else {\n this.valueY = (1 - valueToCoefficient(data.point.xValue, data.series.xAxis)) * data.series.xAxis.rect.height\n + data.series.xAxis.rect.y;\n this.valueX = chart.mouseX;\n }\n };\n Tooltip.prototype.renderGroupedTooltip = function (chart, isFirst, tooltipDiv) {\n var data;\n var height = 0;\n var width = 0;\n var pointData = chart.chartAreaType === 'PolarRadar' ? this.getData() : null;\n this.stopAnimation();\n this.removeHighlight(chart);\n this.currentPoints = [];\n var extraPoints = [];\n var headerContent = '';\n if (isFirst) {\n document.getElementById(this.element.id + '_Secondary_Element').appendChild(tooltipDiv);\n }\n this.removeText();\n for (var _i = 0, _a = chart.visibleSeries; _i < _a.length; _i++) {\n var series = _a[_i];\n if (!series.enableTooltip) {\n continue;\n }\n if (chart.chartAreaType === 'Cartesian' && series.visible) {\n data = this.getClosestX(chart, series);\n }\n else if (chart.chartAreaType === 'PolarRadar' && series.visible && pointData.point !== null) {\n data = new PointData(series.points[pointData.point.index], series);\n }\n if (data && this.header !== '' && this.currentPoints.length === 0) {\n headerContent = this.findHeader(data);\n }\n if (data && this.triggerEvent(data, isFirst, this.getTooltipText(data))) {\n this.findMouseValue(data, chart);\n this.currentPoints.push(data);\n data = null;\n }\n else if (data) {\n extraPoints.push(data);\n }\n }\n if (this.currentPoints.length > 0) {\n this.createTooltip(chart, isFirst, headerContent, this.findSharedLocation(), this.currentPoints.length === 1 ? this.currentPoints[0].series.clipRect : null, null, this.findShapes(), this.findMarkerHeight(this.currentPoints[0]), chart.chartAxisLayoutPanel.seriesClipRect, extraPoints);\n }\n else if (this.getElement(this.element.id + '_tooltip_path')) {\n this.getElement(this.element.id + '_tooltip_path').setAttribute('d', '');\n }\n };\n Tooltip.prototype.findSharedLocation = function () {\n if (this.currentPoints.length > 1) {\n return new ChartLocation(this.valueX, this.valueY);\n }\n else {\n return this.getSymbolLocation(this.currentPoints[0]);\n }\n };\n Tooltip.prototype.getBoxLocation = function (data) {\n var location;\n location = this.lierIndex > 3 ? data.point.symbolLocations[this.lierIndex - 4] :\n {\n x: data.point.regions[0].x + (data.point.regions[0].width / 2),\n y: data.point.regions[0].y + (data.point.regions[0].height / 2)\n };\n return location;\n };\n Tooltip.prototype.parseTemplate = function (point, series, format, xAxis, yAxis) {\n var val;\n var textValue;\n var xFormat;\n var customLabelFormat;\n var chart = this.chart;\n for (var _i = 0, _a = Object.keys(point); _i < _a.length; _i++) {\n var dataValue = _a[_i];\n val = new RegExp('${point' + '.' + dataValue + '}', 'gm');\n format = format.replace(val.source, this.formatPointValue(point, val.source === '${point.x}' ? xAxis : yAxis, dataValue, val.source === '${point.x}', (val.source === '${point.high}' ||\n val.source === '${point.open}' ||\n val.source === '${point.close}' ||\n val.source === '${point.low}' ||\n val.source === '${point.y}' ||\n val.source === '${point.minimum}' ||\n val.source === '${point.maximum}' ||\n val.source === '${point.outliers}' ||\n val.source === '${point.upperQuartile}' ||\n val.source === '${point.lowerQuartile}' ||\n val.source === '${point.median}')));\n }\n for (var _b = 0, _c = Object.keys(Object.getPrototypeOf(series)); _b < _c.length; _b++) {\n var dataValue = _c[_b];\n val = new RegExp('${series' + '.' + dataValue + '}', 'gm');\n textValue = series[dataValue];\n format = format.replace(val.source, textValue);\n }\n return format;\n };\n Tooltip.prototype.formatPointValue = function (point, axis, dataValue, isXPoint, isYPoint) {\n var textValue;\n var customLabelFormat;\n var value;\n if (axis.valueType !== 'Category' && isXPoint) {\n customLabelFormat = axis.labelFormat && axis.labelFormat.match('{value}') !== null;\n textValue = customLabelFormat ? axis.labelFormat.replace('{value}', axis.format(point[dataValue])) :\n axis.format(point[dataValue]);\n }\n else if (isYPoint) {\n customLabelFormat = axis.labelFormat && axis.labelFormat.match('{value}') !== null;\n value = dataValue === 'outliers' ? axis.format(point[dataValue][this.lierIndex - 4]) :\n axis.format(point[dataValue]);\n textValue = customLabelFormat ? axis.labelFormat.replace('{value}', value) : value;\n }\n else {\n textValue = point[dataValue];\n }\n return textValue;\n };\n Tooltip.prototype.getFormat = function (chart, series) {\n if (chart.tooltip.format) {\n if (series.seriesType === 'XY' && series.category === 'Indicator') {\n return this.getIndicatorTooltipFormat(series, chart, chart.tooltip.format);\n }\n return chart.tooltip.format;\n }\n var textX = (series.type === 'Histogram') ? '${point.minimum}' + '-' + '${point.maximum}' : '${point.x}';\n var format = !chart.tooltip.shared ? textX : '${series.name}';\n switch (series.seriesType) {\n case 'XY':\n if (series.category === 'Indicator') {\n this.getIndicatorTooltipFormat(series, chart, chart.tooltip.format);\n }\n return format + ' : ' + ((series.type === 'Bubble') ? '${point.y} Size : ${point.size}'\n : '${point.y}');\n case 'HighLow':\n return format + ('
    High : ${point.high}
    Low : ${point.low}');\n case 'HighLowOpenClose':\n return format + ('
    High : ${point.high}
    Low : ${point.low}
    ' +\n 'Open : ${point.open}
    Close : ${point.close}');\n case 'BoxPlot': {\n return format + '
    ' + (this.lierIndex > 3 ? 'Outliers : ${point.outliers}' :\n 'Maximum : ${point.maximum}
    Q1 : ${point.upperQuartile}
    ' +\n 'Median : ${point.median}
    Q3 : ${point.lowerQuartile}
    Minimum : ${point.minimum}');\n }\n }\n return '';\n };\n Tooltip.prototype.getIndicatorTooltipFormat = function (series, chart, format) {\n var toolTip;\n var points = [];\n if (series.seriesType === 'XY') {\n toolTip = series.name + ' : ${point.y}';\n }\n else {\n toolTip = format;\n }\n return toolTip;\n };\n /*\n * @hidden\n */\n Tooltip.prototype.removeHighlightedMarker = function (data) {\n for (var _i = 0, data_1 = data; _i < data_1.length; _i++) {\n var item = data_1[_i];\n removeElement(this.element.id + '_Series_' + item.series.index +\n '_Point_' + item.point.index + '_Trackball');\n }\n if (this.chart.markerRender) {\n this.chart.markerRender.removeHighlightedMarker();\n }\n this.previousPoints = [];\n };\n /**\n * Get module name.\n */\n Tooltip.prototype.getModuleName = function () {\n /**\n * Returns the module name\n */\n return 'Tooltip';\n };\n /**\n * To destroy the tooltip.\n * @return {void}\n * @private\n */\n Tooltip.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return Tooltip;\n}(BaseTooltip));\nexport { Tooltip };\n","import { EventHandler } from '@syncfusion/ej2-base';\nimport { remove } from '@syncfusion/ej2-base';\nimport { removeElement, measureText, RectOption, Rect, PolygonOption, PathOption, createTooltip, minMax } from '../../common/utils/helper';\nimport { textElement, TextOption } from '../../common/utils/helper';\n/**\n * Zooming Toolkit created here\n * @private\n */\nvar Toolkit = /** @class */ (function () {\n /** @private */\n function Toolkit(chart) {\n this.chart = chart;\n this.elementId = chart.element.id;\n this.selectionColor = '#ff4081';\n this.fillColor = '#737373';\n }\n /**\n * To create the pan button.\n * @return {void}\n * @private\n */\n Toolkit.prototype.createPanButton = function (childElement, parentElement, chart) {\n var render = this.chart.renderer;\n var fillColor = this.chart.zoomModule.isPanning ? this.selectionColor : this.fillColor;\n var direction = 'M5,3h2.3L7.275,5.875h1.4L8.65,3H11L8,0L5,3z M3,11V8.7l2.875,0.025v-1.4L3,7.35V5L0,8L3,';\n direction += '11z M11,13H8.7l0.025-2.875h-1.4L7.35,13H5l3,3L11,13z M13,5v2.3l-2.875-0.025v1.4L13,8.65V11l3-3L13,5z';\n childElement.id = this.elementId + '_Zooming_Pan';\n childElement.setAttribute('aria-label', this.chart.getLocalizedLabel('Pan'));\n this.panElements = childElement;\n childElement.appendChild(render.drawRectangle(new RectOption(this.elementId + '_Zooming_Pan_1', 'transparent', {}, 1, new Rect(0, 0, 16, 16))));\n childElement.appendChild(render.drawPath(new PathOption(this.elementId + '_Zooming_Pan_2', fillColor, null, null, 1, null, direction)));\n parentElement.appendChild(childElement);\n this.wireEvents(childElement, this.pan);\n };\n /**\n * To create the zoom button.\n * @return {void}\n * @private\n */\n Toolkit.prototype.createZoomButton = function (childElement, parentElement, chart) {\n var render = this.chart.renderer;\n var fillColor = this.chart.zoomModule.isPanning ? this.fillColor : this.selectionColor;\n var direction = 'M0.001,14.629L1.372,16l4.571-4.571v-0.685l0.228-0.274c1.051,0.868,2.423,1.417,3.885,1.417c3.291,0,';\n direction += '5.943-2.651,5.943-5.943S13.395,0,10.103,0S4.16,2.651,4.16,5.943c0,1.508,0.503,2.834,1.417,3.885l-0.274,0.228H4.571';\n direction = direction + 'L0.001,14.629L0.001,14.629z M5.943,5.943c0-2.285,1.828-4.114,4.114-4.114s4.114,1.828,4.114,';\n childElement.id = this.elementId + '_Zooming_Zoom';\n childElement.setAttribute('aria-label', this.chart.getLocalizedLabel('Zoom'));\n this.zoomElements = childElement;\n childElement.appendChild(render.drawRectangle(new RectOption(this.elementId + '_Zooming_Zoom_1', 'transparent', {}, 1, new Rect(0, 0, 16, 16))));\n childElement.appendChild(render.drawPath(new PathOption(this.elementId + '_Zooming_Zoom_3', fillColor, null, null, 1, null, direction + '4.114s-1.828,4.114-4.114,4.114S5.943,8.229,5.943,5.943z')));\n parentElement.appendChild(childElement);\n this.wireEvents(childElement, this.zoom);\n };\n /**\n * To create the ZoomIn button.\n * @return {void}\n * @private\n */\n Toolkit.prototype.createZoomInButton = function (childElement, parentElement, chart) {\n var render = this.chart.renderer;\n var fillColor = this.fillColor;\n var direction = 'M10.103,0C6.812,0,4.16,2.651,4.16,5.943c0,1.509,0.503,2.834,1.417,3.885l-0.274,0.229H4.571L0,';\n direction += '14.628l0,0L1.372,16l4.571-4.572v-0.685l0.228-0.275c1.052,0.868,2.423,1.417,3.885,1.417c3.291,0,5.943-2.651,';\n direction += '5.943-5.943C16,2.651,13.395,0,10.103,0z M10.058,10.058c-2.286,0-4.114-1.828-4.114-4.114c0-2.286,1.828-4.114,';\n childElement.id = this.elementId + '_Zooming_ZoomIn';\n childElement.setAttribute('aria-label', this.chart.getLocalizedLabel('ZoomIn'));\n var polygonDirection = '12.749,5.466 10.749,5.466 10.749,3.466 9.749,3.466 9.749,5.466 7.749,5.466 7.749,6.466';\n childElement.appendChild(render.drawRectangle(new RectOption(this.elementId + '_Zooming_ZoomIn_1', 'transparent', {}, 1, new Rect(0, 0, 16, 16))));\n childElement.appendChild(render.drawPath(new PathOption(this.elementId + '_Zooming_ZoomIn_2', fillColor, null, null, 1, null, direction + '4.114-4.114c2.286,0,4.114,1.828,4.114,4.114C14.172,8.229,12.344,10.058,10.058,10.058z')));\n childElement.appendChild(render.drawPolygon(new PolygonOption(this.elementId + '_Zooming_ZoomIn_3', polygonDirection + ' 9.749,6.466 9.749,8.466 10.749,8.466 10.749,6.466 12.749,6.466', fillColor)));\n this.zoomInElements = childElement;\n this.elementOpacity = chart.zoomModule.isPanning ? '0.2' : '1';\n childElement.setAttribute('opacity', this.elementOpacity);\n parentElement.appendChild(childElement);\n this.wireEvents(childElement, this.zoomIn);\n };\n /**\n * To create the ZoomOut button.\n * @return {void}\n * @private\n */\n Toolkit.prototype.createZoomOutButton = function (childElement, parentElement, chart) {\n var render = this.chart.renderer;\n var fillColor = this.fillColor;\n var direction = 'M0,14.622L1.378,16l4.533-4.533v-0.711l0.266-0.266c1.022,0.889,2.4,1.422,3.866,';\n direction += '1.422c3.289,0,5.955-2.666,5.955-5.955S13.333,0,10.044,0S4.089,2.667,4.134,5.911c0,1.466,0.533,2.844,';\n direction += '1.422,3.866l-0.266,0.266H4.578L0,14.622L0,14.622z M5.911,5.911c0-2.311,1.822-4.133,4.133-4.133s4.133,1.822,4.133,';\n childElement.id = this.elementId + '_Zooming_ZoomOut';\n childElement.setAttribute('aria-label', this.chart.getLocalizedLabel('ZoomOut'));\n childElement.appendChild(render.drawRectangle(new RectOption(this.elementId + '_Zooming_ZoomOut_1', 'transparent', {}, 1, new Rect(0, 0, 16, 16))));\n childElement.appendChild(render.drawPath(new PathOption(this.elementId + '_Zooming_ZoomOut_2', fillColor, null, null, 1, null, direction + '4.133s-1.866,4.133-4.133,4.133S5.911,8.222,5.911,5.911z M12.567,6.466h-5v-1h5V6.466z')));\n this.zoomOutElements = childElement;\n this.elementOpacity = chart.zoomModule.isPanning ? '0.2' : '1';\n childElement.setAttribute('opacity', this.elementOpacity);\n parentElement.appendChild(childElement);\n this.wireEvents(childElement, this.zoomOut);\n };\n /**\n * To create the Reset button.\n * @return {void}\n * @private\n */\n Toolkit.prototype.createResetButton = function (childElement, parentElement, chart, isDevice) {\n var render = this.chart.renderer;\n var fillColor = this.fillColor;\n var size;\n var direction = 'M12.364,8h-2.182l2.909,3.25L16,8h-2.182c0-3.575-2.618-6.5-5.818-6.5c-1.128,0-2.218,0.366-3.091,';\n direction += '1.016l1.055,1.178C6.581,3.328,7.272,3.125,8,3.125C10.4,3.125,12.363,5.319,12.364,8L12.364,8z M11.091,';\n direction += '13.484l-1.055-1.178C9.419,12.672,8.728,12.875,8,12.875c-2.4,0-4.364-2.194-4.364-4.875h2.182L2.909,4.75L0,8h2.182c0,';\n childElement.id = this.elementId + '_Zooming_Reset';\n childElement.setAttribute('aria-label', this.chart.getLocalizedLabel('Reset'));\n if (!isDevice) {\n childElement.appendChild(render.drawRectangle(new RectOption(this.elementId + '_Zooming_Reset_1', 'transparent', {}, 1, new Rect(0, 0, 16, 16))));\n childElement.appendChild(render.drawPath(new PathOption(this.elementId + '_Zooming_Reset_2', fillColor, null, null, 1, null, direction + '3.575,2.618,6.5,5.818,6.5C9.128,14.5,10.219,14.134,11.091,13.484L11.091,13.484z')));\n }\n else {\n size = measureText(this.chart.getLocalizedLabel('ResetZoom'), { size: '12px' });\n childElement.appendChild(render.drawRectangle(new RectOption(this.elementId + '_Zooming_Reset_1', 'transparent', {}, 1, new Rect(0, 0, size.width, size.height))));\n textElement(new TextOption(this.elementId + '_Zooming_Reset_2', 0 + size.width / 2, 0 + size.height * 3 / 4, 'middle', this.chart.getLocalizedLabel('ResetZoom'), 'rotate(0,' + (0) + ',' + (0) + ')', 'auto'), { size: '12px' }, 'black', childElement);\n }\n parentElement.appendChild(childElement);\n this.wireEvents(childElement, this.reset);\n };\n /**\n * To bind events.\n * @return {void}\n * @private\n */\n Toolkit.prototype.wireEvents = function (element, process) {\n EventHandler.add(element, 'mousedown touchstart', process, this);\n EventHandler.add(element, 'mouseover', this.showTooltip, this);\n EventHandler.add(element, 'mouseout', this.removeTooltip, this);\n };\n /**\n * To show tooltip.\n * @return {void}\n * @private\n */\n Toolkit.prototype.showTooltip = function (event) {\n var text = event.currentTarget.id.split('_Zooming_')[1];\n var left = (event.pageX - (measureText(text, { size: '10px' }).width + 5));\n if (!this.chart.isTouch) {\n createTooltip('EJ2_Chart_ZoomTip', this.chart.getLocalizedLabel(text), (event.pageY + 10), left, '10px');\n }\n };\n /** @private */\n Toolkit.prototype.removeTooltip = function () {\n removeElement('EJ2_Chart_ZoomTip');\n };\n // Toolkit events function calculation here.\n /** @private */\n Toolkit.prototype.reset = function () {\n var chart = this.chart;\n if (!chart.zoomModule.isDevice) {\n remove(chart.zoomModule.toolkitElements);\n }\n this.removeTooltip();\n chart.svgObject.setAttribute('cursor', 'auto');\n chart.axisCollections.forEach(function (axis) {\n axis.zoomFactor = 1;\n axis.zoomPosition = 0;\n if (axis.zoomingScrollBar) {\n axis.zoomingScrollBar.isScrollUI = false;\n }\n });\n chart.disableTrackTooltip = false;\n chart.zoomModule.isZoomed = chart.zoomModule.isPanning = chart.isChartDrag = chart.delayRedraw = false;\n chart.zoomModule.touchMoveList = chart.zoomModule.touchStartList = [];\n chart.zoomModule.pinchTarget = null;\n chart.removeSvg();\n chart.refreshAxis();\n chart.refreshBound();\n this.elementOpacity = '1';\n return false;\n };\n Toolkit.prototype.zoomIn = function (e) {\n this.zoomInOutCalculation(1, this.chart, this.chart.axisCollections, this.chart.zoomSettings.mode);\n return false;\n };\n Toolkit.prototype.zoomOut = function (e) {\n this.zoomInOutCalculation(-1, this.chart, this.chart.axisCollections, this.chart.zoomSettings.mode);\n return false;\n };\n Toolkit.prototype.zoom = function (e) {\n this.chart.zoomModule.isPanning = false;\n var zoomModule = this.chart.zoomModule;\n this.elementOpacity = '1';\n this.chart.svgObject.setAttribute('cursor', 'auto');\n this.zoomInElements.setAttribute('opacity', this.elementOpacity);\n this.zoomOutElements.setAttribute('opacity', this.elementOpacity);\n this.applySelection(this.zoomElements.childNodes, this.selectionColor);\n this.applySelection(this.panElements.childNodes, '#737373');\n return false;\n };\n /** @private */\n Toolkit.prototype.pan = function () {\n var zoomModule = this.chart.zoomModule;\n var element;\n this.chart.zoomModule.isPanning = true;\n this.chart.svgObject.setAttribute('cursor', 'pointer');\n this.elementOpacity = '0.2';\n element = this.zoomInElements ? this.zoomInElements.setAttribute('opacity', this.elementOpacity) : null;\n element = this.zoomOutElements ? this.zoomOutElements.setAttribute('opacity', this.elementOpacity) : null;\n element = this.panElements ? this.applySelection(this.panElements.childNodes, this.selectionColor) : null;\n element = this.zoomElements ? this.applySelection(this.zoomElements.childNodes, '#737373') : null;\n return false;\n };\n Toolkit.prototype.zoomInOutCalculation = function (scale, chart, axes, mode) {\n if (!chart.zoomModule.isPanning && this.elementOpacity !== '0.2') {\n var zoomFactor_1;\n var zoomPosition_1;\n var cumulative_1;\n chart.disableTrackTooltip = true;\n chart.delayRedraw = true;\n axes.forEach(function (axis) {\n if ((axis.orientation === 'Horizontal' && mode !== 'Y') ||\n (axis.orientation === 'Vertical' && mode !== 'X')) {\n cumulative_1 = Math.max(Math.max(1 / minMax(axis.zoomFactor, 0, 1), 1) + (0.25 * scale), 1);\n zoomFactor_1 = (cumulative_1 === 1) ? 1 : minMax(1 / cumulative_1, 0, 1);\n zoomPosition_1 = (cumulative_1 === 1) ? 0 : axis.zoomPosition + ((axis.zoomFactor - zoomFactor_1) * 0.5);\n if (axis.zoomPosition !== zoomPosition_1 || axis.zoomFactor !== zoomFactor_1) {\n zoomFactor_1 = (zoomPosition_1 + zoomFactor_1) > 1 ? (1 - zoomPosition_1) : zoomFactor_1;\n }\n axis.zoomFactor = zoomFactor_1;\n axis.zoomPosition = zoomPosition_1;\n }\n });\n }\n };\n Toolkit.prototype.applySelection = function (elements, color) {\n for (var i = 1, length_1 = elements.length; i < length_1; i++) {\n elements[i].setAttribute('fill', color);\n }\n };\n return Toolkit;\n}());\nexport { Toolkit };\n","import { EventHandler, Browser, createElement } from '@syncfusion/ej2-base';\nimport { getRectLocation, minMax, getElement, ChartLocation, Rect, RectOption, measureText } from '../../common/utils/helper';\nimport { Toolkit } from './zooming-toolkit';\nimport { zoomComplete } from '../../common/model/constants';\nimport { withInBounds } from '../../common/utils/helper';\n/**\n * `Zooming` module handles the zooming for chart.\n */\nvar Zoom = /** @class */ (function () {\n /**\n * Constructor for Zooming module.\n * @private.\n */\n function Zoom(chart) {\n this.chart = chart;\n this.isPointer = Browser.isPointer;\n this.browserName = Browser.info.name;\n this.wheelEvent = this.browserName === 'mozilla' ? (this.isPointer ? 'mousewheel' : 'DOMMouseScroll') : 'mousewheel';\n this.cancelEvent = this.isPointer ? 'pointerleave' : 'mouseleave';\n this.addEventListener();\n this.isDevice = Browser.isDevice;\n var zooming = chart.zoomSettings;\n this.toolkit = new Toolkit(chart);\n this.zooming = zooming;\n this.elementId = chart.element.id;\n this.zoomingRect = new Rect(0, 0, 0, 0);\n this.zoomAxes = [];\n this.zoomkitOpacity = 0.3;\n this.isIOS = Browser.isIos || Browser.isIos7;\n this.isZoomed = this.performedUI = this.zooming.enablePan && this.zooming.enableSelectionZooming;\n if (zooming.enableScrollbar) {\n chart.scrollElement = createElement('div', { id: chart.element.id + '_scrollElement' });\n }\n }\n /**\n * Function that handles the Rectangular zooming.\n * @return {void}\n */\n Zoom.prototype.renderZooming = function (e, chart, isTouch) {\n this.calculateZoomAxesRange(chart, chart.axisCollections);\n if (this.zooming.enableSelectionZooming && (!isTouch\n || (chart.isDoubleTap && this.touchStartList.length === 1)) && (!this.isPanning || chart.isDoubleTap)) {\n this.isPanning = this.isDevice ? true : this.isPanning;\n this.performedUI = true;\n this.drawZoomingRectangle(chart);\n }\n else if (this.isPanning && chart.isChartDrag) {\n if (!isTouch || (isTouch && this.touchStartList.length === 1)) {\n this.pinchTarget = isTouch ? e.target : null;\n this.doPan(chart, chart.axisCollections);\n }\n }\n };\n // Zooming rectangle drawn here\n Zoom.prototype.drawZoomingRectangle = function (chart) {\n var areaBounds = chart.chartAxisLayoutPanel.seriesClipRect;\n var startLocation = new ChartLocation(chart.previousMouseMoveX, chart.previousMouseMoveY);\n var endLocation = new ChartLocation(chart.mouseX, chart.mouseY);\n var rect = this.zoomingRect = getRectLocation(startLocation, endLocation, areaBounds);\n if (rect.width > 0 && rect.height > 0) {\n this.isZoomed = true;\n chart.disableTrackTooltip = true;\n chart.svgObject.setAttribute('cursor', 'crosshair');\n if (this.zooming.mode === 'X') {\n rect.height = areaBounds.height;\n rect.y = areaBounds.y;\n }\n else if (this.zooming.mode === 'Y') {\n rect.width = areaBounds.width;\n rect.x = areaBounds.x;\n }\n chart.svgObject.appendChild(chart.renderer.drawRectangle(new RectOption(this.elementId + '_ZoomArea', chart.themeStyle.selectionRectFill, { color: chart.themeStyle.selectionRectStroke, width: 1 }, 1, rect, 0, 0, '', '3')));\n }\n };\n // Panning performed here\n Zoom.prototype.doPan = function (chart, axes) {\n if (chart.startMove && chart.crosshair.enable) {\n return null;\n }\n var currentScale;\n var offset;\n this.isZoomed = true;\n var translateX;\n var translateY;\n this.offset = !chart.delayRedraw ? chart.chartAxisLayoutPanel.seriesClipRect : this.offset;\n chart.delayRedraw = true;\n chart.disableTrackTooltip = true;\n axes.forEach(function (axis) {\n currentScale = Math.max(1 / minMax(axis.zoomFactor, 0, 1), 1);\n if (axis.orientation === 'Horizontal') {\n offset = (chart.previousMouseMoveX - chart.mouseX) / axis.rect.width / currentScale;\n axis.zoomPosition = minMax(axis.zoomPosition + offset, 0, (1 - axis.zoomFactor));\n }\n else {\n offset = (chart.previousMouseMoveY - chart.mouseY) / axis.rect.height / currentScale;\n axis.zoomPosition = minMax(axis.zoomPosition - offset, 0, (1 - axis.zoomFactor));\n }\n });\n if (this.zooming.enableDeferredZooming) {\n translateX = chart.mouseX - chart.mouseDownX;\n translateY = chart.mouseY - chart.mouseDownY;\n switch (this.zooming.mode) {\n case 'X':\n translateY = 0;\n break;\n case 'Y':\n translateX = 0;\n break;\n }\n this.setTransform(translateX, translateY, null, null, chart, false);\n this.refreshAxis(chart.chartAxisLayoutPanel, chart, chart.axisCollections);\n }\n else {\n this.performZoomRedraw(chart);\n }\n chart.previousMouseMoveX = chart.mouseX;\n chart.previousMouseMoveY = chart.mouseY;\n };\n /**\n * Redraw the chart on zooming.\n * @return {void}\n * @private\n */\n Zoom.prototype.performZoomRedraw = function (chart) {\n var rect = this.zoomingRect;\n chart.animateSeries = false;\n if (this.isZoomed) {\n if (rect.width > 0 && rect.height > 0) {\n this.performedUI = true;\n chart.svgObject.setAttribute('cursor', 'auto');\n this.doZoom(chart, chart.axisCollections, chart.chartAxisLayoutPanel.seriesClipRect);\n chart.isDoubleTap = false;\n }\n else if (chart.disableTrackTooltip) {\n chart.disableTrackTooltip = false;\n chart.delayRedraw = false;\n chart.removeSvg();\n chart.refreshAxis();\n chart.refreshBound();\n }\n }\n };\n Zoom.prototype.refreshAxis = function (layout, chart, axes) {\n var mode = chart.zoomSettings.mode;\n layout.measureAxis(new Rect(chart.initialClipRect.x, chart.initialClipRect.y, chart.initialClipRect.width, chart.initialClipRect.height));\n axes.map(function (axis, index) {\n if (axis.orientation === 'Horizontal' && mode !== 'Y') {\n layout.drawXAxisLabels(axis, index, null, (axis.placeNextToAxisLine ? axis.updatedRect : axis.rect));\n }\n if (axis.orientation === 'Vertical' && mode !== 'X') {\n layout.drawYAxisLabels(axis, index, null, (axis.placeNextToAxisLine ? axis.updatedRect : axis.rect));\n }\n });\n };\n // Rectangular zoom calculated here performed here\n Zoom.prototype.doZoom = function (chart, axes, bounds) {\n var zoomRect = this.zoomingRect;\n var mode = this.zooming.mode;\n var argsData;\n var previousZF;\n var previousZP;\n var currentZF;\n var currentZP;\n this.isPanning = chart.zoomSettings.enablePan || this.isPanning;\n axes.forEach(function (axis) {\n previousZF = currentZF = axis.zoomFactor;\n previousZP = currentZP = axis.zoomPosition;\n argsData = {\n cancel: false, name: zoomComplete, axis: axis, previousZoomFactor: previousZF, previousZoomPosition: previousZP,\n currentZoomFactor: currentZF, currentZoomPosition: currentZP\n };\n if (axis.orientation === 'Horizontal') {\n if (mode !== 'Y') {\n currentZP += Math.abs((zoomRect.x - bounds.x) / (bounds.width)) * axis.zoomFactor;\n currentZF *= (zoomRect.width / bounds.width);\n argsData.currentZoomPosition = currentZP;\n argsData.currentZoomFactor = currentZF;\n chart.trigger(zoomComplete, argsData);\n }\n }\n else {\n if (mode !== 'X') {\n currentZP += (1 - Math.abs((zoomRect.height + (zoomRect.y - bounds.y)) / (bounds.height))) * axis.zoomFactor;\n currentZF *= (zoomRect.height / bounds.height);\n argsData.currentZoomFactor = currentZF;\n argsData.currentZoomPosition = currentZP;\n chart.trigger(zoomComplete, argsData);\n }\n }\n if (!argsData.cancel) {\n axis.zoomFactor = argsData.currentZoomFactor;\n axis.zoomPosition = argsData.currentZoomPosition;\n }\n });\n this.zoomingRect = new Rect(0, 0, 0, 0);\n this.performZoomRedraw(chart);\n };\n /**\n * Function that handles the Mouse wheel zooming.\n * @return {void}\n * @private\n */\n Zoom.prototype.performMouseWheelZooming = function (e, mouseX, mouseY, chart, axes) {\n var direction = (this.browserName === 'mozilla' && !this.isPointer) ?\n -(e.detail) / 3 > 0 ? 1 : -1 : (e.wheelDelta / 120) > 0 ? 1 : -1;\n var mode = this.zooming.mode;\n var origin = 0.5;\n var cumulative;\n var zoomFactor;\n var zoomPosition;\n this.isZoomed = true;\n this.calculateZoomAxesRange(chart, chart.axisCollections);\n chart.disableTrackTooltip = true;\n this.performedUI = true;\n this.isPanning = chart.zoomSettings.enablePan || this.isPanning;\n axes.forEach(function (axis) {\n if ((axis.orientation === 'Vertical' && mode !== 'X') ||\n (axis.orientation === 'Horizontal' && mode !== 'Y')) {\n cumulative = Math.max(Math.max(1 / minMax(axis.zoomFactor, 0, 1), 1) + (0.25 * direction), 1);\n if (cumulative >= 1) {\n origin = axis.orientation === 'Horizontal' ? mouseX / axis.rect.width : 1 - (mouseY / axis.rect.height);\n origin = origin > 1 ? 1 : origin < 0 ? 0 : origin;\n zoomFactor = (cumulative === 1) ? 1 : minMax(1 / cumulative, 0, 1);\n zoomPosition = (cumulative === 1) ? 0 : axis.zoomPosition + ((axis.zoomFactor - zoomFactor) * origin);\n if (axis.zoomPosition !== zoomPosition || axis.zoomFactor !== zoomFactor) {\n zoomFactor = (zoomPosition + zoomFactor) > 1 ? (1 - zoomPosition) : zoomFactor;\n }\n }\n axis.zoomFactor = zoomFactor;\n axis.zoomPosition = zoomPosition;\n }\n });\n this.performZoomRedraw(chart);\n };\n /**\n * Function that handles the Pinch zooming.\n * @return {void}\n * @private\n */\n Zoom.prototype.performPinchZooming = function (e, chart) {\n if ((this.zoomingRect.width > 0 && this.zoomingRect.height > 0) || (chart.startMove && chart.crosshair.enable)) {\n return false;\n }\n this.calculateZoomAxesRange(chart, chart.axisCollections);\n this.isZoomed = true;\n this.isPanning = true;\n this.performedUI = true;\n this.offset = !chart.delayRedraw ? chart.chartAxisLayoutPanel.seriesClipRect : this.offset;\n chart.delayRedraw = true;\n chart.disableTrackTooltip = true;\n var elementOffset = chart.element.getBoundingClientRect();\n var touchDown = this.touchStartList;\n var touchMove = this.touchMoveList;\n var touch0StartX = touchDown[0].pageX - elementOffset.left;\n var touch0StartY = touchDown[0].pageY - elementOffset.top;\n var touch0EndX = touchMove[0].pageX - elementOffset.left;\n var touch0EndY = touchMove[0].pageY - elementOffset.top;\n var touch1StartX = touchDown[1].pageX - elementOffset.left;\n var touch1StartY = touchDown[1].pageY - elementOffset.top;\n var touch1EndX = touchMove[1].pageX - elementOffset.left;\n var touch1EndY = touchMove[1].pageY - elementOffset.top;\n var scaleX;\n var scaleY;\n var translateXValue;\n var translateYValue;\n var pinchRect;\n var clipX;\n var clipY;\n scaleX = Math.abs(touch0EndX - touch1EndX) / Math.abs(touch0StartX - touch1StartX);\n scaleY = Math.abs(touch0EndY - touch1EndY) / Math.abs(touch0StartY - touch1StartY);\n clipX = ((this.offset.x - touch0EndX) / scaleX) + touch0StartX;\n clipY = ((this.offset.y - touch0EndY) / scaleY) + touch0StartY;\n pinchRect = new Rect(clipX, clipY, this.offset.width / scaleX, this.offset.height / scaleY);\n translateXValue = (touch0EndX - (scaleX * touch0StartX));\n translateYValue = (touch0EndY - (scaleY * touch0StartY));\n if (!isNaN(scaleX - scaleX) && !isNaN(scaleY - scaleY)) {\n switch (this.zooming.mode) {\n case 'XY':\n this.setTransform(translateXValue, translateYValue, scaleX, scaleY, chart, true);\n break;\n case 'X':\n this.setTransform(translateXValue, 0, scaleX, 1, chart, true);\n break;\n case 'Y':\n this.setTransform(0, translateYValue, 1, scaleY, chart, true);\n break;\n }\n }\n this.calculatePinchZoomFactor(chart, pinchRect);\n this.refreshAxis(chart.chartAxisLayoutPanel, chart, chart.axisCollections);\n return true;\n };\n Zoom.prototype.calculatePinchZoomFactor = function (chart, pinchRect) {\n var _this = this;\n var mode = this.zooming.mode;\n var selectionMin;\n var selectionMax;\n var rangeMin;\n var rangeMax;\n var value;\n var axisTrans;\n chart.axisCollections.forEach(function (axis, index) {\n if ((axis.orientation === 'Horizontal' && mode !== 'Y') ||\n (axis.orientation === 'Vertical' && mode !== 'X')) {\n if (axis.orientation === 'Horizontal') {\n value = pinchRect.x - _this.offset.x;\n axisTrans = axis.rect.width / _this.zoomAxes[index].delta;\n rangeMin = value / axisTrans + _this.zoomAxes[index].min;\n value = pinchRect.x + pinchRect.width - _this.offset.x;\n rangeMax = value / axisTrans + _this.zoomAxes[index].min;\n }\n else {\n value = pinchRect.y - _this.offset.y;\n axisTrans = axis.rect.height / _this.zoomAxes[index].delta;\n rangeMin = (value * -1 + axis.rect.height) / axisTrans + _this.zoomAxes[index].min;\n value = pinchRect.y + pinchRect.height - _this.offset.y;\n rangeMax = (value * -1 + axis.rect.height) / axisTrans + _this.zoomAxes[index].min;\n }\n selectionMin = Math.min(rangeMin, rangeMax);\n selectionMax = Math.max(rangeMin, rangeMax);\n axis.zoomPosition = (selectionMin - _this.zoomAxes[index].actualMin) / _this.zoomAxes[index].actualDelta;\n axis.zoomFactor = (selectionMax - selectionMin) / _this.zoomAxes[index].actualDelta;\n axis.zoomPosition = axis.zoomPosition < 0 ? 0 : axis.zoomPosition;\n axis.zoomFactor = axis.zoomFactor > 1 ? 1 : axis.zoomFactor;\n }\n });\n };\n // Series transformation style applied here.\n Zoom.prototype.setTransform = function (transX, transY, scaleX, scaleY, chart, isPinch) {\n chart.seriesElements.setAttribute('clip-path', 'url(#' + this.elementId + '_ChartAreaClipRect_)');\n if (chart.indicatorElements) {\n chart.indicatorElements.setAttribute('clip-path', 'url(#' + this.elementId + '_ChartAreaClipRect_)');\n }\n var translate;\n var xAxisLoc;\n var yAxisLoc;\n var element;\n if (transX !== null && transY !== null) {\n chart.visibleSeries.forEach(function (value) {\n xAxisLoc = chart.requireInvertedAxis ? value.yAxis.rect.x : value.xAxis.rect.x;\n yAxisLoc = chart.requireInvertedAxis ? value.xAxis.rect.y : value.yAxis.rect.y;\n translate = 'translate(' + (transX + (isPinch ? (scaleX * xAxisLoc) : xAxisLoc)) +\n ',' + (transY + (isPinch ? (scaleY * yAxisLoc) : yAxisLoc)) + ')';\n translate = (scaleX || scaleY) ? translate + ' scale(' + scaleX + ' ' + scaleY + ')' : translate;\n if (value.category === 'Indicator') {\n value.seriesElement.parentNode.setAttribute('transform', translate);\n }\n else {\n value.seriesElement.setAttribute('transform', translate);\n }\n element = getElement(chart.element.id + '_Series_' + value.index + '_DataLabelCollections');\n if (value.errorBarElement) {\n value.errorBarElement.setAttribute('transform', translate);\n }\n if (value.symbolElement) {\n value.symbolElement.setAttribute('transform', translate);\n }\n if (value.textElement) {\n value.textElement.setAttribute('visibility', 'hidden');\n value.shapeElement.setAttribute('visibility', 'hidden');\n }\n if (element) {\n element.style.visibility = 'hidden';\n }\n });\n }\n };\n Zoom.prototype.calculateZoomAxesRange = function (chart, axes) {\n var _this = this;\n var range;\n var axisRange;\n chart.axisCollections.forEach(function (axis, index) {\n axisRange = axis.visibleRange;\n if (_this.zoomAxes[index]) {\n if (!chart.delayRedraw) {\n _this.zoomAxes[index].min = axisRange.min;\n _this.zoomAxes[index].delta = axisRange.delta;\n }\n }\n else {\n range = {\n actualMin: axis.actualRange.min,\n actualDelta: axis.actualRange.delta,\n min: axisRange.min,\n delta: axisRange.delta\n };\n _this.zoomAxes[index] = range;\n }\n });\n };\n // Zooming Toolkit created here\n Zoom.prototype.showZoomingToolkit = function (chart) {\n var toolboxItems = this.zooming.toolbarItems;\n var areaBounds = chart.chartAxisLayoutPanel.seriesClipRect;\n var spacing = 5;\n var render = chart.renderer;\n var length = this.isDevice ? 1 : toolboxItems.length;\n var iconSize = this.isDevice ? measureText('Reset Zoom', { size: '12px' }).width : 16;\n var height = this.isDevice ? measureText('Reset Zoom', { size: '12px' }).height : 22;\n var width = (length * iconSize) + ((length + 1) * spacing) + ((length - 1) * spacing);\n var transX = areaBounds.x + areaBounds.width - width - spacing;\n var transY = (areaBounds.y + spacing);\n var xPosition = spacing;\n var outerElement;\n var toolkit = this.toolkit;\n var element;\n var shadowElement = '';\n shadowElement += '';\n shadowElement += '';\n if (length === 0 || getElement(this.elementId + '_Zooming_KitCollection')) {\n return false;\n }\n var defElement = render.createDefs();\n toolboxItems = this.isDevice ? ['Reset'] : toolboxItems;\n defElement.innerHTML = shadowElement;\n this.toolkitElements = render.createGroup({\n id: this.elementId + '_Zooming_KitCollection',\n transform: 'translate(' + transX + ',' + transY + ')'\n });\n this.toolkitElements.appendChild(defElement);\n this.toolkitElements.appendChild(render.drawRectangle(new RectOption(this.elementId + '_Zooming_Rect', '#fafafa', { color: 'transparent', width: 1 }, 1, new Rect(0, 0, width, (height + (spacing * 2))), 0, 0)));\n outerElement = render.drawRectangle(new RectOption(this.elementId + '_Zooming_Rect', '#fafafa', { color: 'transparent', width: 1 }, 0.1, new Rect(0, 0, width, (height + (spacing * 2))), 0, 0));\n outerElement.setAttribute('filter', 'url(#chart_shadow)');\n this.toolkitElements.appendChild(outerElement);\n var currentItem;\n for (var i = 1; i <= length; i++) {\n currentItem = toolboxItems[i - 1];\n element = render.createGroup({\n transform: 'translate(' + xPosition + ',' + (this.isDevice ? spacing : (spacing + 3)) + ')'\n });\n // for desktop toolkit hight is 32 and top padding is 8 icon size 16\n switch (currentItem) {\n case 'Pan':\n toolkit.createPanButton(element, this.toolkitElements, chart);\n break;\n case 'Zoom':\n toolkit.createZoomButton(element, this.toolkitElements, chart);\n break;\n case 'ZoomIn':\n toolkit.createZoomInButton(element, this.toolkitElements, chart);\n break;\n case 'ZoomOut':\n toolkit.createZoomOutButton(element, this.toolkitElements, chart);\n break;\n case 'Reset':\n toolkit.createResetButton(element, this.toolkitElements, chart, this.isDevice);\n break;\n }\n xPosition += iconSize + (spacing * 2);\n }\n this.toolkitElements.setAttribute('opacity', this.isDevice ? '1' : '' + this.zoomkitOpacity);\n this.toolkitElements.setAttribute('cursor', 'auto');\n chart.svgObject.appendChild(this.toolkitElements);\n if (!this.isDevice) {\n EventHandler.add(this.toolkitElements, 'mousemove touchstart', this.zoomToolkitMove, this);\n EventHandler.add(this.toolkitElements, 'mouseleave touchend', this.zoomToolkitLeave, this);\n if (this.isPanning) {\n toolkit.pan();\n }\n }\n return true;\n };\n /**\n * To the show the zooming toolkit.\n * @return {void}\n * @private\n */\n Zoom.prototype.applyZoomToolkit = function (chart, axes) {\n var showToolkit = this.isAxisZoomed(axes);\n if (showToolkit) {\n this.showZoomingToolkit(chart);\n this.isZoomed = true;\n }\n else {\n this.toolkit.removeTooltip();\n this.isPanning = false;\n this.isZoomed = false;\n chart.svgObject.setAttribute('cursor', 'auto');\n }\n };\n /**\n * Return boolean property to show zooming toolkit.\n * @return {void}\n * @private\n */\n Zoom.prototype.isAxisZoomed = function (axes) {\n var showToolkit = false;\n axes.forEach(function (axis) {\n showToolkit = (showToolkit || (axis.zoomFactor !== 1 || axis.zoomPosition !== 0));\n });\n return showToolkit;\n };\n Zoom.prototype.zoomToolkitMove = function (e) {\n var element = this.toolkitElements;\n var opacity = +element.getAttribute('opacity');\n this.zoomkitOpacity = 1;\n element.setAttribute('opacity', '' + this.zoomkitOpacity);\n return false;\n };\n Zoom.prototype.zoomToolkitLeave = function (e) {\n var element = this.toolkitElements;\n this.zoomkitOpacity = 0.3;\n element.setAttribute('opacity', '' + this.zoomkitOpacity);\n return false;\n };\n /**\n * @hidden\n */\n Zoom.prototype.addEventListener = function () {\n if (this.chart.isDestroyed) {\n return;\n }\n EventHandler.add(this.chart.element, this.wheelEvent, this.chartMouseWheel, this);\n this.chart.on(Browser.touchMoveEvent, this.mouseMoveHandler, this);\n this.chart.on(Browser.touchStartEvent, this.mouseDownHandler, this);\n this.chart.on(Browser.touchEndEvent, this.mouseUpHandler, this);\n this.chart.on(this.cancelEvent, this.mouseCancelHandler, this);\n };\n /**\n * @hidden\n */\n Zoom.prototype.removeEventListener = function () {\n if (this.chart.isDestroyed) {\n return;\n }\n EventHandler.remove(this.chart.element, this.wheelEvent, this.chartMouseWheel);\n this.chart.off(Browser.touchMoveEvent, this.mouseMoveHandler);\n this.chart.off(Browser.touchStartEvent, this.mouseDownHandler);\n this.chart.off(Browser.touchEndEvent, this.mouseUpHandler);\n this.chart.off(this.cancelEvent, this.mouseCancelHandler);\n };\n /**\n * Handles the mouse wheel on chart.\n * @return {boolean}\n * @private\n */\n Zoom.prototype.chartMouseWheel = function (e) {\n var chart = this.chart;\n var offset = chart.element.getBoundingClientRect();\n var svgRect = getElement(chart.element.id + '_svg').getBoundingClientRect();\n var mouseX = (e.clientX - offset.left) - Math.max(svgRect.left - offset.left, 0);\n var mouseY = (e.clientY - offset.top) - Math.max(svgRect.top - offset.top, 0);\n if (this.zooming.enableMouseWheelZooming &&\n withInBounds(mouseX, mouseY, chart.chartAxisLayoutPanel.seriesClipRect)) {\n e.preventDefault();\n this.performMouseWheelZooming(e, mouseX, mouseY, chart, chart.axisCollections);\n }\n return false;\n };\n /**\n * @hidden\n */\n Zoom.prototype.mouseMoveHandler = function (e) {\n //Zooming for chart\n var chart = this.chart;\n var touches = null;\n if (e.type === 'touchmove') {\n if (e.preventDefault && this.isIOS &&\n (this.isPanning || (chart.isDoubleTap)\n || (this.zooming.enablePinchZooming && this.touchStartList.length > 1))) {\n e.preventDefault();\n }\n touches = e.touches;\n }\n if (chart.isChartDrag) {\n if (chart.isTouch) {\n this.touchMoveList = this.addTouchPointer(this.touchMoveList, e, touches);\n if (this.zooming.enablePinchZooming && this.touchMoveList.length > 1\n && this.touchStartList.length > 1) {\n this.performPinchZooming(e, chart);\n }\n }\n this.renderZooming(e, chart, chart.isTouch);\n }\n };\n /**\n * @hidden\n */\n Zoom.prototype.mouseDownHandler = function (e) {\n //Zooming for chart\n var chart = this.chart;\n var touches = null;\n var target;\n if (e.type === 'touchstart') {\n touches = e.touches;\n target = e.target;\n }\n else {\n target = e.target;\n }\n if (target.id.indexOf(chart.element.id + '_Zooming_') === -1 &&\n withInBounds(chart.previousMouseMoveX, chart.previousMouseMoveY, chart.chartAxisLayoutPanel.seriesClipRect)) {\n chart.isChartDrag = true;\n }\n if (chart.isTouch) {\n this.touchStartList = this.addTouchPointer(this.touchStartList, e, touches);\n }\n };\n /**\n * @hidden\n */\n Zoom.prototype.mouseUpHandler = function (e) {\n var chart = this.chart;\n var performZoomRedraw = e.target.id.indexOf(chart.element.id + '_ZoomOut_') === -1 ||\n e.target.id.indexOf(chart.element.id + '_ZoomIn_') === -1;\n if (chart.isChartDrag || performZoomRedraw) {\n this.performZoomRedraw(chart);\n }\n if (chart.isTouch) {\n if (chart.isDoubleTap && withInBounds(chart.mouseX, chart.mouseY, chart.chartAxisLayoutPanel.seriesClipRect)\n && this.touchStartList.length === 1 && this.isZoomed) {\n this.toolkit.reset();\n }\n this.touchStartList = [];\n chart.isDoubleTap = false;\n }\n };\n /**\n * @hidden\n */\n Zoom.prototype.mouseCancelHandler = function (e) {\n if (this.isZoomed) {\n this.performZoomRedraw(this.chart);\n }\n this.pinchTarget = null;\n this.touchStartList = [];\n this.touchMoveList = [];\n };\n /**\n * Handles the touch pointer.\n * @return {boolean}\n * @private\n */\n Zoom.prototype.addTouchPointer = function (touchList, e, touches) {\n if (touches) {\n touchList = [];\n for (var i = 0, length_1 = touches.length; i < length_1; i++) {\n touchList.push({ pageX: touches[i].clientX, pageY: touches[i].clientY, pointerId: null });\n }\n }\n else {\n touchList = touchList ? touchList : [];\n if (touchList.length === 0) {\n touchList.push({ pageX: e.clientX, pageY: e.clientY, pointerId: e.pointerId });\n }\n else {\n for (var i = 0, length_2 = touchList.length; i < length_2; i++) {\n if (touchList[i].pointerId === e.pointerId) {\n touchList[i] = { pageX: e.clientX, pageY: e.clientY, pointerId: e.pointerId };\n }\n else {\n touchList.push({ pageX: e.clientX, pageY: e.clientY, pointerId: e.pointerId });\n }\n }\n }\n }\n return touchList;\n };\n /**\n * Get module name.\n */\n Zoom.prototype.getModuleName = function () {\n // Returns te module name\n return 'Zoom';\n };\n /**\n * To destroy the zooming.\n * @return {void}\n * @private\n */\n Zoom.prototype.destroy = function (chart) {\n // Destroy method performed here\n this.removeEventListener();\n };\n return Zoom;\n}());\nexport { Zoom };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * Selection Module handles the selection for chart.\n * @private\n */\nvar BaseSelection = /** @class */ (function () {\n function BaseSelection(control) {\n this.control = control;\n }\n /**\n * To create selection styles for series\n */\n BaseSelection.prototype.seriesStyles = function () {\n var seriesclass;\n var style = document.getElementById(this.styleId);\n if (isNullOrUndefined(style)) {\n style = document.createElement('style');\n style.setAttribute('id', this.styleId);\n for (var _i = 0, _a = this.control.visibleSeries; _i < _a.length; _i++) {\n var series = _a[_i];\n seriesclass = series.selectionStyle || this.styleId + '_series_' + series.index;\n style.innerHTML += series.selectionStyle ? '' : '.' + seriesclass + ' { } ';\n }\n style.innerHTML += '.' + this.unselected + ' { opacity:' + (0.3) + ';} ';\n document.body.appendChild(style);\n }\n };\n /**\n * To concat indexes\n */\n BaseSelection.prototype.concatIndexes = function (userIndexes, localIndexes) {\n return userIndexes.concat(localIndexes);\n };\n /**\n * Selected points series visibility checking on legend click\n */\n BaseSelection.prototype.checkVisibility = function (selectedIndexes) {\n var visible = false;\n var uniqueSeries = [];\n for (var _i = 0, selectedIndexes_1 = selectedIndexes; _i < selectedIndexes_1.length; _i++) {\n var index = selectedIndexes_1[_i];\n if (uniqueSeries.indexOf(index.series) === -1) {\n uniqueSeries.push(index.series);\n }\n }\n for (var _a = 0, uniqueSeries_1 = uniqueSeries; _a < uniqueSeries_1.length; _a++) {\n var index = uniqueSeries_1[_a];\n if (this.control.series[index].visible) {\n visible = true;\n break;\n }\n }\n return visible;\n };\n /**\n * To add svg element style class\n * @private\n */\n BaseSelection.prototype.addSvgClass = function (element, className) {\n var elementClassName = element.getAttribute('class') || '';\n elementClassName += ((elementClassName !== '') ? ' ' : '');\n if (elementClassName.indexOf(className) === -1) {\n element.setAttribute('class', elementClassName + className);\n }\n };\n /**\n * To remove svg element style class\n * @private\n */\n BaseSelection.prototype.removeSvgClass = function (element, className) {\n var elementClassName = element.getAttribute('class') || '';\n if (elementClassName.indexOf(className) > -1) {\n element.setAttribute('class', elementClassName.replace(className, ''));\n }\n };\n /**\n * To get children from parent element\n */\n BaseSelection.prototype.getChildren = function (parent) {\n var children = [];\n for (var i = 0; i < parent.childNodes.length; i++) {\n if (parent.childNodes[i].tagName !== 'defs') {\n children.push(parent.childNodes[i]);\n }\n }\n return children;\n };\n return BaseSelection;\n}());\nexport { BaseSelection };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * Selection src file\n */\nimport { Browser } from '@syncfusion/ej2-base';\nimport { remove } from '@syncfusion/ej2-base';\nimport { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { ChartLocation, Rect, RectOption, CircleOption, withInBounds, getDraggedRectLocation, removeElement, getElement } from '../../common/utils/helper';\nimport { Index } from '../../common/model/base';\nimport { dragComplete } from '../../common/model/constants';\nimport { BaseSelection } from '../../common/user-interaction/selection';\n/**\n * `Selection` module handles the selection for chart.\n * @private\n */\nvar Selection = /** @class */ (function (_super) {\n __extends(Selection, _super);\n /**\n * Constructor for selection module.\n * @private.\n */\n function Selection(chart) {\n var _this = _super.call(this, chart) || this;\n _this.chart = chart;\n _this.renderer = chart.renderer;\n _this.addEventListener();\n return _this;\n }\n /**\n * Binding events for selection module.\n */\n Selection.prototype.addEventListener = function () {\n if (this.chart.isDestroyed) {\n return;\n }\n var cancelEvent = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n this.chart.on(Browser.touchMoveEvent, this.mouseMove, this);\n this.chart.on(cancelEvent, this.completeSelection, this);\n this.chart.on('click', this.calculateSelectedElements, this);\n this.chart.on(Browser.touchStartEvent, this.mousedown, this);\n this.chart.on(Browser.touchEndEvent, this.completeSelection, this);\n };\n /**\n * Chart mouse down\n */\n Selection.prototype.mousedown = function (e) {\n var chart = this.chart;\n if (chart.selectionMode === 'None' || chart.isChartDrag) {\n return;\n }\n if (chart.isDoubleTap || !chart.isTouch || this.rectPoints) {\n this.dragStart(chart, chart.chartAxisLayoutPanel.seriesClipRect, chart.mouseDownX, chart.mouseDownY, e);\n }\n };\n /**\n * UnBinding events for selection module.\n */\n Selection.prototype.removeEventListener = function () {\n if (this.chart.isDestroyed) {\n return;\n }\n this.chart.off(Browser.touchMoveEvent, this.mouseMove);\n this.chart.off('pointerleave' || 'mouseleave', this.completeSelection);\n this.chart.off('click', this.calculateSelectedElements);\n this.chart.off(Browser.touchStartEvent, this.mousedown);\n this.chart.off(Browser.touchEndEvent, this.completeSelection);\n };\n /**\n * To find private variable values\n */\n Selection.prototype.initPrivateVariables = function (chart) {\n this.styleId = chart.element.id + '_ej2_chart_selection';\n this.unselected = chart.element.id + '_ej2_deselected';\n this.closeIconId = chart.element.id + '_ej2_drag_close';\n this.draggedRectGroup = chart.element.id + '_ej2_drag_group';\n this.draggedRect = chart.element.id + '_ej2_drag_rect';\n this.selectedDataIndexes = [];\n this.rectPoints = null;\n this.isSeriesMode = chart.selectionMode === 'Series';\n };\n /**\n * Method to select the point and series.\n * @return {void}\n */\n Selection.prototype.invokeSelection = function (chart) {\n this.initPrivateVariables(chart);\n this.series = extend({}, chart.visibleSeries, null, true);\n this.seriesStyles();\n if (!(chart.selectionMode.indexOf('Drag') > -1)) {\n this.selectDataIndex(chart, this.concatIndexes(chart.selectedDataIndexes, this.selectedDataIndexes));\n }\n };\n Selection.prototype.generateStyle = function (series) {\n if (series) {\n return (series.selectionStyle || this.styleId + '_series_' + series.index);\n }\n return 'undefined';\n };\n Selection.prototype.selectDataIndex = function (chart, indexes) {\n for (var _i = 0, indexes_1 = indexes; _i < indexes_1.length; _i++) {\n var index = indexes_1[_i];\n this.performSelection(index, chart, this.getElementByIndex(chart, index)[0]);\n }\n };\n Selection.prototype.getElementByIndex = function (chart, index, suffix) {\n if (suffix === void 0) { suffix = ''; }\n var elementId = chart.element.id + '_Series_' + index.series + '_Point' + '_' + index.point;\n var series = chart.series[index.series];\n elementId = (!series.isRectSeries && series.type !== 'Scatter' && series.type !== 'Bubble' &&\n series.marker.visible) ? (elementId + '_Symbol' + suffix) : elementId;\n return [getElement(elementId), (series.type === 'RangeArea' && series.marker.visible) ? getElement(elementId + '1') : null];\n };\n Selection.prototype.getClusterElements = function (chart, index) {\n var clusters = [];\n for (var _i = 0, _a = chart.visibleSeries; _i < _a.length; _i++) {\n var series = _a[_i];\n index = new Index(series.index, index.point);\n clusters.push(this.getElementByIndex(chart, index)[0]);\n }\n return clusters;\n };\n Selection.prototype.findElements = function (chart, series, index, suffix) {\n if (suffix === void 0) { suffix = ''; }\n if (this.isSeriesMode) {\n return this.getSeriesElements(series);\n }\n else if (chart.selectionMode === 'Cluster') {\n return this.getClusterElements(chart, index);\n }\n else {\n return this.getElementByIndex(chart, index, suffix);\n }\n };\n /**\n * To find the selected element.\n * @return {void}\n * @private\n */\n Selection.prototype.calculateSelectedElements = function (event) {\n if (this.chart.selectionMode === 'None' || event.target.id.indexOf(this.chart.element.id + '_') === -1) {\n return;\n }\n if (event.target.id.indexOf('_Series_') > -1) {\n this.performSelection(this.indexFinder(event.target.id), this.chart, event.target);\n }\n };\n Selection.prototype.performSelection = function (index, chart, element) {\n this.isSeriesMode = chart.selectionMode === 'Series';\n if (chart.series[index.series].type === 'BoxAndWhisker' &&\n element.id === chart.element.id + '_Series_' + index.series + '_Point_' + index.point + '_BoxPath') {\n element = element.parentElement;\n }\n switch (chart.selectionMode) {\n case 'Series':\n this.selection(chart, index, this.getSeriesElements(chart.series[index.series]));\n this.blurEffect(chart.element.id, chart.visibleSeries);\n break;\n case 'Point':\n if (!isNaN(index.point)) {\n this.selection(chart, index, [element]);\n this.blurEffect(chart.element.id, chart.visibleSeries);\n }\n break;\n case 'Cluster':\n if (!isNaN(index.point)) {\n this.clusterSelection(chart, chart.series, index);\n this.blurEffect(chart.element.id, chart.visibleSeries);\n }\n break;\n }\n };\n Selection.prototype.selection = function (chart, index, selectedElements) {\n if (!chart.isMultiSelect && (chart.selectionMode.indexOf('Drag') === -1)) {\n this.removeMultiSelectEelments(chart, this.selectedDataIndexes, index, chart.series);\n }\n var className = selectedElements[0] && (selectedElements[0].getAttribute('class') || '');\n if (selectedElements[0] && className.indexOf(this.getSelectionClass(selectedElements[0].id)) > -1) {\n this.removeStyles(selectedElements);\n this.addOrRemoveIndex(this.selectedDataIndexes, index);\n }\n else {\n this.applyStyles(selectedElements);\n this.addOrRemoveIndex(this.selectedDataIndexes, index, true);\n }\n };\n Selection.prototype.clusterSelection = function (chart, series, index) {\n this.selection(chart, index, this.getClusterElements(chart, new Index(index.series, index.point)));\n };\n Selection.prototype.removeMultiSelectEelments = function (chart, index, currentIndex, seriesCollection) {\n var series;\n for (var i = 0; i < index.length; i++) {\n series = seriesCollection[index[i].series];\n if ((this.isSeriesMode && !this.toEquals(index[i], currentIndex, this.isSeriesMode)) ||\n (this.control.selectionMode === 'Cluster' && !this.toEquals(index[i], currentIndex, false)) ||\n (!this.isSeriesMode && this.toEquals(index[i], currentIndex, true) && !this.toEquals(index[i], currentIndex, false))) {\n this.removeStyles(this.findElements(chart, series, index[i]));\n index.splice(i, 1);\n i--;\n }\n }\n };\n Selection.prototype.blurEffect = function (chartId, visibleSeries) {\n var visibility = this.checkVisibility(this.selectedDataIndexes); // legend click scenario\n for (var _i = 0, visibleSeries_1 = visibleSeries; _i < visibleSeries_1.length; _i++) {\n var series = visibleSeries_1[_i];\n if (series.visible) {\n this.checkSelectionElements(getElement(chartId + 'SeriesGroup' + series.index), this.generateStyle(series), visibility);\n if (!isNullOrUndefined(getElement(chartId + 'SymbolGroup' + series.index))) {\n this.checkSelectionElements(getElement(chartId + 'SymbolGroup' + series.index), this.generateStyle(series), visibility);\n }\n }\n }\n };\n Selection.prototype.checkSelectionElements = function (element, className, visibility) {\n var children = (this.isSeriesMode ? [element] : element.childNodes);\n var elementClassName;\n var parentClassName;\n var legendShape;\n var selectElement = element;\n for (var i = 0; i < children.length; i++) {\n elementClassName = children[i].getAttribute('class') || '';\n parentClassName = children[i].parentNode.getAttribute('class') || '';\n if (elementClassName.indexOf(className) === -1 &&\n parentClassName.indexOf(className) === -1 && visibility) {\n this.addSvgClass(children[i], this.unselected);\n }\n else {\n selectElement = children[i];\n this.removeSvgClass(children[i], this.unselected);\n }\n }\n if (this.control.legendModule && this.control.legendSettings.visible) {\n legendShape = document.getElementById(this.control.element.id + '_chart_legend_shape_' + className.split('_series_')[1]);\n if (legendShape) {\n elementClassName = selectElement.getAttribute('class') || '';\n parentClassName = selectElement.parentNode.getAttribute('class') || '';\n if (elementClassName.indexOf(className) === -1 && parentClassName.indexOf(className) === -1 && visibility) {\n this.addSvgClass(legendShape, this.unselected);\n }\n else {\n this.removeSvgClass(legendShape, this.unselected);\n }\n }\n }\n };\n Selection.prototype.applyStyles = function (elements) {\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var element = elements_1[_i];\n if (element) {\n this.removeSvgClass(element.parentNode, this.unselected);\n this.removeSvgClass(element, this.unselected);\n this.addSvgClass(element, this.getSelectionClass(element.id));\n }\n }\n };\n Selection.prototype.getSelectionClass = function (id) {\n return this.generateStyle(this.control.series[this.indexFinder(id).series]);\n };\n Selection.prototype.removeStyles = function (elements) {\n for (var _i = 0, elements_2 = elements; _i < elements_2.length; _i++) {\n var element = elements_2[_i];\n if (element) {\n this.removeSvgClass(element, this.getSelectionClass(element.id));\n }\n }\n };\n Selection.prototype.addOrRemoveIndex = function (indexes, index, add) {\n for (var i = 0; i < indexes.length; i++) {\n if (this.toEquals(indexes[i], index, this.isSeriesMode)) {\n indexes.splice(i, 1);\n i--;\n }\n }\n if (add) {\n indexes.push(index);\n }\n };\n Selection.prototype.toEquals = function (first, second, checkSeriesOnly) {\n return ((first.series === second.series || (this.control.selectionMode === 'Cluster' && !checkSeriesOnly))\n && (checkSeriesOnly || (first.point === second.point)));\n };\n /**\n * To redraw the selected points.\n * @return {void}\n * @private\n */\n Selection.prototype.redrawSelection = function (chart, oldMode) {\n this.isSeriesMode = oldMode === 'Series';\n var selectedDataIndexes = extend([], this.selectedDataIndexes, null, true);\n this.removeSelectedElements(chart, this.selectedDataIndexes, chart.series);\n this.blurEffect(chart.element.id, chart.visibleSeries);\n this.selectDataIndex(chart, selectedDataIndexes);\n };\n /** @private */\n Selection.prototype.legendSelection = function (chart, series) {\n var seriesStyle = this.generateStyle(chart.visibleSeries[series]);\n var selectedElements = document.getElementsByClassName(seriesStyle);\n this.isSeriesMode = chart.selectionMode === 'Series';\n var isBlurEffectNeeded = true;\n if (selectedElements.length > 0) {\n var elements = [];\n for (var i = 0; i < selectedElements.length; i++) {\n elements.push(selectedElements[i]);\n }\n this.removeStyles(elements);\n this.isSeriesMode = true;\n this.addOrRemoveIndex(this.selectedDataIndexes, new Index(series, NaN));\n for (var _i = 0, _a = chart.visibleSeries; _i < _a.length; _i++) {\n var series_1 = _a[_i];\n seriesStyle = this.generateStyle(series_1);\n if (document.getElementsByClassName(seriesStyle).length > 0) {\n for (var _b = 0, elements_3 = elements; _b < elements_3.length; _b++) {\n var element = elements_3[_b];\n this.checkSelectionElements(element, seriesStyle, true);\n }\n isBlurEffectNeeded = false;\n break;\n }\n }\n if (isBlurEffectNeeded) {\n this.isSeriesMode = chart.selectionMode === 'Series';\n this.blurEffect(chart.element.id, chart.visibleSeries);\n }\n }\n else {\n var seriesElements = this.getSeriesElements(chart.visibleSeries[series]);\n for (var _c = 0, seriesElements_1 = seriesElements; _c < seriesElements_1.length; _c++) {\n var seriesElement = seriesElements_1[_c];\n this.checkSelectionElements(seriesElement, seriesStyle, false);\n }\n this.isSeriesMode = true;\n this.selection(chart, new Index(series, NaN), seriesElements);\n this.isSeriesMode = chart.selectionMode === 'Series';\n this.blurEffect(chart.element.id, chart.visibleSeries);\n }\n };\n Selection.prototype.getSeriesElements = function (series) {\n var seriesElements = [series.seriesElement];\n if (series.marker.visible && series.type !== 'Scatter' && series.type !== 'Bubble' && !series.isRectSeries) {\n seriesElements.push(series.symbolElement);\n }\n return seriesElements;\n };\n Selection.prototype.indexFinder = function (id) {\n var ids = ['NaN', 'NaN'];\n if (id.indexOf('SeriesGroup') > -1) {\n ids = id.split('SeriesGroup');\n ids[0] = ids[1];\n }\n else if (id.indexOf('SymbolGroup') > -1) {\n ids = id.split('SymbolGroup');\n ids[0] = ids[1];\n }\n else if (id.indexOf('_Point_') > -1) {\n ids = id.split('_Series_')[1].split('_Point_');\n }\n else if (id.indexOf('_Series_') > -1) {\n ids[0] = id.split('_Series_')[1];\n }\n return new Index(parseInt(ids[0], 10), parseInt(ids[1], 10));\n };\n /**\n * Drag selection that returns the selected data.\n * @return {void}\n * @private\n */\n Selection.prototype.calculateDragSelectedElements = function (chart, dragRect) {\n this.removeSelectedElements(chart, this.selectedDataIndexes, chart.series);\n var rect = new Rect(dragRect.x, dragRect.y, dragRect.width, dragRect.height);\n var axisOffset = new ChartLocation(chart.chartAxisLayoutPanel.seriesClipRect.x, chart.chartAxisLayoutPanel.seriesClipRect.y);\n this.removeOffset(rect, axisOffset);\n var points;\n var index;\n var selectedPointValues = [];\n var selectedSeriesValues = [];\n this.isSeriesMode = false;\n var symbolLocation;\n var _loop_1 = function (series) {\n if (series.visible) {\n points = series.points;\n selectedPointValues = [];\n var xAxisOffset_1;\n var yAxisOffset_1;\n if ((chart.isTransposed || series.type.indexOf('Bar') !== -1) &&\n !(chart.isTransposed && series.type.indexOf('Bar') !== -1)) {\n xAxisOffset_1 = series.xAxis.rect.y - axisOffset.y;\n yAxisOffset_1 = series.yAxis.rect.x - axisOffset.x;\n }\n else {\n xAxisOffset_1 = series.xAxis.rect.x - axisOffset.x;\n yAxisOffset_1 = series.yAxis.rect.y - axisOffset.y;\n }\n for (var j = 0; j < points.length; j++) {\n var yValue = series.type !== 'RangeArea' ? points[j].yValue :\n points[j].regions[0].y;\n var isCurrentPoint = void 0;\n if (series.type === 'BoxAndWhisker') {\n isCurrentPoint = points[j].regions.some(function (region) {\n return withInBounds(region.x + xAxisOffset_1, region.y + yAxisOffset_1, rect);\n });\n }\n else {\n isCurrentPoint = points[j].symbolLocations.some(function (location) {\n return location && withInBounds(location.x + xAxisOffset_1, location.y + yAxisOffset_1, rect);\n });\n }\n if (isCurrentPoint && series.category !== 'Indicator') {\n index = new Index(series.index, points[j].index);\n this_1.selection(chart, index, this_1.findElements(chart, series, index));\n selectedPointValues.push({ x: points[j].xValue.toString(), y: yValue });\n }\n if (isCurrentPoint && series.type === 'RangeArea') {\n selectedPointValues.push({ x: points[j].xValue.toString(), y: points[j].regions[0].y });\n }\n }\n selectedSeriesValues.push(selectedPointValues);\n }\n };\n var this_1 = this;\n for (var _i = 0, _a = chart.visibleSeries; _i < _a.length; _i++) {\n var series = _a[_i];\n _loop_1(series);\n }\n this.blurEffect(chart.element.id, chart.visibleSeries);\n this.rectPoints = new Rect(dragRect.x, dragRect.y, dragRect.width, dragRect.height);\n this.createCloseButton((dragRect.x + dragRect.width), dragRect.y);\n var args = {\n name: dragComplete,\n selectedDataValues: selectedSeriesValues,\n cancel: false\n };\n chart.trigger(dragComplete, args);\n };\n Selection.prototype.removeOffset = function (rect, clip) {\n rect.x -= clip.x;\n rect.y -= clip.y;\n };\n /**\n * Method to draw dragging rect.\n * @return {void}\n * @private\n */\n Selection.prototype.drawDraggingRect = function (chart, dragRect) {\n var cartesianLayout = chart.chartAxisLayoutPanel.seriesClipRect;\n switch (chart.selectionMode) {\n case 'DragX':\n dragRect.y = cartesianLayout.y;\n dragRect.height = cartesianLayout.height;\n break;\n case 'DragY':\n dragRect.x = cartesianLayout.x;\n dragRect.width = cartesianLayout.width;\n break;\n }\n if (dragRect.width < 5 || dragRect.height < 5) {\n return null;\n }\n var element = getElement(this.draggedRect);\n if (this.closeIcon) {\n removeElement(this.closeIconId);\n }\n if (element) {\n this.setAttributes(element, dragRect);\n }\n else {\n var dragGroup = chart.renderer.createGroup({ id: this.draggedRectGroup });\n chart.svgObject.appendChild(dragGroup);\n element = chart.renderer.drawRectangle(new RectOption(this.draggedRect, chart.themeStyle.selectionRectFill, { color: chart.themeStyle.selectionRectStroke, width: 1 }, 1, dragRect));\n element.setAttribute('style', 'cursor:move;');\n dragGroup.appendChild(element);\n }\n };\n Selection.prototype.createCloseButton = function (x, y) {\n var closeIcon = this.chart.renderer.createGroup({\n id: this.closeIconId,\n style: 'cursor:pointer; visibility: visible;'\n });\n closeIcon.appendChild(this.chart.renderer.drawCircle(new CircleOption(this.closeIconId + '_circle', '#FFFFFF', { color: this.chart.themeStyle.selectionCircleStroke, width: 1 }, 1, x, y, 10)));\n var direction = 'M ' + (x - 4) + ' ' + (y - 4) + ' L ' + (x + 4) + ' ' + (y + 4) + ' M ' + (x - 4) + ' ' + (y + 4) +\n ' L ' + (x + 4) + ' ' + (y - 4);\n closeIcon.appendChild(this.chart.renderer.drawPath({\n id: this.closeIconId + '_cross', d: direction,\n stroke: this.chart.themeStyle.selectionCircleStroke,\n 'stroke-width': 2, fill: this.chart.themeStyle.selectionCircleStroke\n }));\n this.closeIcon = closeIcon;\n getElement(this.draggedRectGroup).appendChild(closeIcon);\n };\n /**\n * Method to remove dragged element.\n * @return {void}\n * @private\n */\n Selection.prototype.removeDraggedElements = function (chart, event) {\n if ((event.target.id.indexOf(this.closeIconId) > -1) && (event.type.indexOf('move') === -1)) {\n this.removeSelectedElements(chart, this.selectedDataIndexes, chart.series);\n this.blurEffect(chart.element.id, chart.visibleSeries);\n remove(getElement(this.draggedRectGroup));\n this.changeCursorStyle(false, chart.svgObject, 'auto');\n this.rectPoints = null;\n }\n };\n /**\n * Method to resize the drag rect.\n * @return {void}\n * @private\n */\n Selection.prototype.resizingSelectionRect = function (chart, location, tapped) {\n var rect = new Rect(this.rectPoints.x, this.rectPoints.y, this.rectPoints.width, this.rectPoints.height);\n var resize = this.findResizeMode(chart.svgObject, rect, location);\n if (this.resizing) {\n rect = getDraggedRectLocation(rect.x, rect.y, (rect.x + rect.width), (rect.y + rect.height), chart.chartAxisLayoutPanel.seriesClipRect);\n this.drawDraggingRect(chart, rect);\n this.dragRect = rect;\n }\n if (tapped) {\n this.resizing = resize;\n }\n };\n Selection.prototype.findResizeMode = function (chartSvgObject, rect, location) {\n var cursorStyle = 'se-resize';\n var resize = false;\n if (!this.resizing) {\n var resizeEdges = [new Rect(rect.x, (rect.y - 10), rect.width - 5, 20),\n new Rect((rect.x - 10), rect.y, 20, rect.height),\n new Rect(rect.x, (rect.y + rect.height - 10), rect.width - 10, 20),\n new Rect((rect.x + rect.width - 10), rect.y + 5, 20, rect.height - 15),\n new Rect((rect.x + rect.width - 10), (rect.y + rect.height - 10), 20, 20)]; //corner\n for (var i = 0; i < resizeEdges.length; i++) {\n if (withInBounds(location.x, location.y, resizeEdges[i])) {\n cursorStyle = (i === 4) ? cursorStyle : (i % 2 === 0) ? 'ns-resize' : 'ew-resize';\n resize = true;\n this.resizeMode = i;\n break;\n }\n }\n }\n else {\n var x = rect.x;\n var y = rect.y;\n var width = (location.x - x);\n var height = (location.y - y);\n switch (this.resizeMode) {\n case 0:\n height = Math.abs((rect.height + rect.y) - location.y);\n rect.y = Math.min((rect.height + rect.y), location.y);\n rect.height = height;\n break;\n case 1:\n width = Math.abs((rect.width + rect.x) - location.x);\n rect.x = Math.min((rect.width + rect.x), location.x);\n rect.width = width;\n break;\n case 2:\n rect.height = Math.abs(height);\n rect.y = Math.min(location.y, y);\n break;\n case 3:\n rect.width = Math.abs(width);\n rect.x = Math.min(location.x, x);\n break;\n case 4:\n rect.width = Math.abs(width);\n rect.height = Math.abs(height);\n rect.x = Math.min(location.x, x);\n rect.y = Math.min(location.y, y);\n break;\n }\n }\n this.changeCursorStyle(resize, getElement(this.draggedRect), cursorStyle);\n this.changeCursorStyle(resize, chartSvgObject, cursorStyle);\n return resize;\n };\n Selection.prototype.changeCursorStyle = function (isResize, rectelement, cursorStyle) {\n cursorStyle = isResize ? cursorStyle : (this.control.svgObject === rectelement) ? 'auto' : 'move';\n rectelement.setAttribute('style', 'cursor:' + cursorStyle + ';');\n };\n Selection.prototype.removeSelectedElements = function (chart, index, seriesCollection) {\n index.splice(0, index.length);\n var seriesElements;\n for (var _i = 0, seriesCollection_1 = seriesCollection; _i < seriesCollection_1.length; _i++) {\n var series = seriesCollection_1[_i];\n seriesElements = this.getSeriesElements(series);\n this.removeStyles(seriesElements);\n for (var _a = 0, seriesElements_2 = seriesElements; _a < seriesElements_2.length; _a++) {\n var seriesElement = seriesElements_2[_a];\n this.removeStyles(this.getChildren(seriesElement));\n }\n }\n };\n Selection.prototype.setAttributes = function (ele, object) {\n var keys = Object.keys(object);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n ele.setAttribute(key, object[key]);\n }\n };\n /**\n * Method to move the dragged rect.\n * @return {void}\n * @private\n */\n Selection.prototype.draggedRectMoved = function (chart, grabbedPoint, doDrawing) {\n var rect = new Rect(this.rectPoints.x, this.rectPoints.y, this.rectPoints.width, this.rectPoints.height);\n rect.x -= (grabbedPoint.x - chart.mouseX);\n rect.y -= (grabbedPoint.y - chart.mouseY);\n rect = getDraggedRectLocation(rect.x, rect.y, rect.x + rect.width, rect.height + rect.y, chart.chartAxisLayoutPanel.seriesClipRect);\n if (doDrawing) {\n this.drawDraggingRect(chart, rect);\n }\n else {\n this.calculateDragSelectedElements(chart, rect);\n }\n };\n /**\n * To complete the selection.\n * @return {void}\n * @private\n */\n Selection.prototype.completeSelection = function (e) {\n var chart = this.chart;\n if (chart.selectionMode === 'None') {\n return;\n }\n if ((this.dragging || this.resizing) && this.dragRect.width > 5 && this.dragRect.height > 5) {\n this.calculateDragSelectedElements(chart, this.dragRect);\n }\n else if (this.rectGrabbing && this.rectPoints.width && this.rectPoints.height) {\n this.draggedRectMoved(chart, this.dragRect);\n }\n this.dragging = false;\n this.rectGrabbing = false;\n this.resizing = false;\n this.removeDraggedElements(chart, e);\n };\n Selection.prototype.getDragRect = function (chart, seriesClipRect) {\n return getDraggedRectLocation(chart.mouseDownX, chart.mouseDownY, chart.mouseX, chart.mouseY, seriesClipRect);\n };\n /** @private */\n Selection.prototype.dragStart = function (chart, seriesClipRect, mouseDownX, mouseDownY, event) {\n this.dragging = (chart.selectionMode.indexOf('Drag') > -1) && (chart.isDoubleTap || !chart.isTouch) &&\n chart.chartAreaType !== 'PolarRadar';\n if (this.dragging) {\n this.dragRect = new Rect(chart.mouseDownX, chart.mouseDownY, 0, 0);\n if (chart.mouseDownX < seriesClipRect.x || chart.mouseDownX > (seriesClipRect.x + seriesClipRect.width) ||\n chart.mouseDownY < seriesClipRect.y || chart.mouseDownY > (seriesClipRect.y + seriesClipRect.height)) {\n this.dragging = false;\n }\n }\n if (this.rectPoints) {\n this.dragRect = new Rect(chart.mouseDownX, chart.mouseDownY, 0, 0);\n this.resizingSelectionRect(chart, new ChartLocation(mouseDownX, mouseDownY), true);\n this.rectGrabbing = withInBounds(mouseDownX, mouseDownY, this.rectPoints);\n }\n };\n /** @private */\n Selection.prototype.mouseMove = function (event) {\n var chart = this.chart;\n if (chart.selectionMode === 'None') {\n return;\n }\n if (event.type === 'touchmove' && (Browser.isIos || Browser.isIos7) && this.dragging && event.preventDefault) {\n event.preventDefault();\n }\n var insideMoving = withInBounds(chart.mouseX, chart.mouseY, chart.chartAxisLayoutPanel.seriesClipRect);\n if (insideMoving) {\n if (this.rectGrabbing && !this.resizing) {\n this.draggedRectMoved(chart, this.dragRect, true);\n }\n else if (this.dragging && !this.resizing) {\n this.dragRect = this.getDragRect(chart, chart.chartAxisLayoutPanel.seriesClipRect);\n this.drawDraggingRect(chart, this.dragRect);\n }\n if (this.rectPoints) {\n this.resizingSelectionRect(chart, new ChartLocation(chart.mouseX, chart.mouseY));\n }\n }\n else {\n this.completeSelection(event);\n }\n };\n /**\n * Get module name.\n * @private\n */\n Selection.prototype.getModuleName = function () {\n return 'Selection';\n };\n /**\n * To destroy the selection.\n * @return {void}\n * @private\n */\n Selection.prototype.destroy = function (chart) {\n this.removeEventListener();\n // Destroy method performed here\n };\n return Selection;\n}(BaseSelection));\nexport { Selection };\n","import { ChartLocation, Rect, TextOption, RectOption, isCollide, markerAnimate } from '../../common/utils/helper';\nimport { getLabelText, measureText, convertHexToColor, calculateRect, textElement, colorNameToHex } from '../../common/utils/helper';\nimport { textRender } from '../../common/model/constants';\nimport { createTemplate, getFontStyle, getElement, measureElementRect, templateAnimate, withIn } from '../../common/utils/helper';\nimport { createElement } from '@syncfusion/ej2-base';\nimport { getPoint } from '../../common/utils/helper';\n/**\n * `DataLabel` module is used to render data label for the data point.\n */\nvar DataLabel = /** @class */ (function () {\n /**\n * Constructor for the data label module.\n * @private\n */\n function DataLabel(chart) {\n this.errorHeight = 0;\n this.chart = chart;\n }\n DataLabel.prototype.initPrivateVariables = function (series, marker) {\n var transform;\n var render = series.chart.renderer;\n transform = series.chart.chartAreaType === 'Cartesian' ? 'translate(' + series.clipRect.x + ',' + (series.clipRect.y) + ')' : '';\n if (marker.dataLabel.visible) {\n series.shapeElement = render.createGroup({\n 'id': this.chart.element.id + 'ShapeGroup' + series.index,\n 'transform': transform,\n 'clip-path': 'url(#' + this.chart.element.id + '_ChartSeriesClipRect_' + series.index + ')'\n });\n series.textElement = render.createGroup({\n 'id': this.chart.element.id + 'TextGroup' + series.index,\n 'transform': transform,\n 'clip-path': 'url(#' + this.chart.element.id + '_ChartSeriesClipRect_' + series.index + ')'\n });\n }\n this.markerHeight = ((series.type === 'Scatter' || marker.visible) && !this.isRectSeries(series)) ? (marker.height / 2) : 0;\n this.commonId = this.chart.element.id + '_Series_' + series.index + '_Point_';\n this.calculateErrorHeight(series, series.marker.dataLabel.position);\n this.chartBackground = this.chart.chartArea.background === 'trasparent' ?\n this.chart.background || this.chart.themeStyle.background : this.chart.chartArea.background;\n };\n DataLabel.prototype.calculateErrorHeight = function (series, position) {\n if (!series.errorBar.visible) {\n return null;\n }\n else if (series.errorBar.visible && this.chart.chartAreaType !== 'PolarRadar') {\n var direction = series.errorBar.direction;\n var positiveHeight = this.chart.errorBarModule.positiveHeight;\n var negativeHeight = this.chart.errorBarModule.negativeHeight;\n if (this.isRectSeries(series)) {\n if (position === 'Top' || position === 'Auto') {\n if (direction === 'Both' || direction === 'Minus') {\n this.errorHeight = negativeHeight;\n }\n else {\n this.errorHeight = 0;\n }\n }\n if (position === 'Outer' || position === 'Auto') {\n if (direction === 'Both' || direction === 'Plus') {\n this.errorHeight = positiveHeight;\n }\n else {\n this.errorHeight = 0;\n }\n }\n }\n else {\n if (position === 'Top' || position === 'Outer' || position === 'Auto') {\n if ((direction === 'Both' || direction === 'Plus') && (!series.chart.isTransposed)) {\n this.errorHeight = positiveHeight;\n }\n else {\n this.errorHeight = 0;\n }\n }\n if (position === 'Bottom' || position === 'Auto') {\n if (direction === 'Both' || direction === 'Minus') {\n this.errorHeight = negativeHeight;\n }\n else {\n this.errorHeight = 0;\n }\n }\n }\n }\n else {\n this.errorHeight = 0;\n }\n };\n DataLabel.prototype.isRectSeries = function (series) {\n return series.isRectSeries || series.type === 'RangeArea';\n };\n /**\n * Render the data label for series.\n * @return {void}\n */\n DataLabel.prototype.render = function (series, chart, dataLabel) {\n var _this = this;\n // initialize the private variable\n this.initPrivateVariables(series, series.marker);\n var rect;\n var rgbValue;\n var contrast;\n var argsData;\n var border;\n var textSize;\n this.inverted = chart.requireInvertedAxis;\n this.yAxisInversed = series.yAxis.isInversed;\n var element = createElement('div', {\n id: chart.element.id + '_Series_' + series.index + '_DataLabelCollections'\n });\n // Data label point iteration started\n series.points.map(function (point, index) {\n _this.margin = dataLabel.margin;\n var labelText = [];\n var labelLength;\n var clip = series.clipRect;\n border = { width: dataLabel.border.width, color: dataLabel.border.color };\n if ((point.symbolLocations.length && point.symbolLocations[0]) ||\n (series.type === 'BoxAndWhisker' && point.regions.length)) {\n labelText = getLabelText(point, series, chart);\n labelLength = labelText.length;\n for (var i = 0; i < labelLength; i++) {\n argsData = {\n cancel: false, name: textRender, series: series,\n point: point, text: labelText[i], border: border,\n color: dataLabel.fill, template: dataLabel.template\n };\n chart.trigger(textRender, argsData);\n if (!argsData.cancel) {\n _this.fontBackground = argsData.color;\n _this.isDataLabelShape(argsData);\n _this.markerHeight = series.type === 'Bubble' ? (point.regions[0].height / 2) : _this.markerHeight;\n if (argsData.template !== null) {\n _this.createDataLabelTemplate(element, series, dataLabel, point, argsData, i);\n }\n else {\n textSize = measureText(argsData.text, dataLabel.font);\n rect = _this.calculateTextPosition(point, series, textSize, dataLabel, i);\n if (!isCollide(rect, chart.dataLabelCollections, clip)) {\n chart.dataLabelCollections.push(new Rect(rect.x + clip.x, rect.y + clip.y, rect.width, rect.height));\n if (_this.isShape) {\n series.shapeElement.appendChild(chart.renderer.drawRectangle(new RectOption(_this.commonId + index + '_TextShape_' + i, argsData.color, argsData.border, dataLabel.opacity, rect, dataLabel.rx, dataLabel.ry)));\n }\n // Checking the font color\n rgbValue = convertHexToColor(colorNameToHex(_this.fontBackground));\n contrast = Math.round((rgbValue.r * 299 + rgbValue.g * 587 + rgbValue.b * 114) / 1000);\n textElement(new TextOption(_this.commonId + index + '_Text_' + i, rect.x + _this.margin.left + textSize.width / 2, rect.y + _this.margin.top + textSize.height * 3 / 4, 'middle', argsData.text, 'rotate(0,' + (rect.x) + ',' + (rect.y) + ')', 'auto'), dataLabel.font, dataLabel.font.color ||\n ((contrast >= 128 || series.type === 'Hilo') ? 'black' : 'white'), series.textElement);\n }\n }\n }\n }\n }\n });\n if (element.childElementCount) {\n getElement(chart.element.id + '_Secondary_Element').appendChild(element);\n }\n };\n /**\n * Render the data label template.\n * @return {void}\n * @private\n */\n DataLabel.prototype.createDataLabelTemplate = function (parentElement, series, dataLabel, point, data, labelIndex) {\n this.margin = { left: 0, right: 0, bottom: 0, top: 0 };\n var clip = series.clipRect;\n var childElement = createTemplate(createElement('div', {\n id: this.chart.element.id + '_Series_' + series.index + '_DataLabel_'\n + point.index + (labelIndex ? ('_' + labelIndex) : ''),\n styles: 'position: absolute;background-color:' + data.color + ';' +\n getFontStyle(dataLabel.font) + ';border:' + data.border.width + 'px solid ' + data.border.color + ';'\n }), point.index, data.template, this.chart, point, series);\n var elementRect = measureElementRect(childElement);\n var rect = this.calculateTextPosition(point, series, { width: elementRect.width, height: elementRect.height }, dataLabel, labelIndex);\n childElement.style.left = ((this.chart.chartAreaType === 'PolarRadar' ? 0 : series.clipRect.x) + rect.x) + 'px';\n childElement.style.top = ((this.chart.chartAreaType === 'PolarRadar' ? 0 : series.clipRect.y) + rect.y) + 'px';\n var rgbValue = convertHexToColor(colorNameToHex(this.fontBackground));\n var vAxis = series.chart.requireInvertedAxis ? series.xAxis : series.yAxis;\n var hAxis = series.chart.requireInvertedAxis ? series.yAxis : series.xAxis;\n childElement.style.color = dataLabel.font.color ||\n ((Math.round((rgbValue.r * 299 + rgbValue.g * 587 + rgbValue.b * 114) / 1000)) >= 128 ? 'black' : 'white');\n if (childElement.childElementCount && !isCollide(rect, this.chart.dataLabelCollections, clip)\n && (series.seriesType !== 'XY' || point.yValue === undefined || withIn(point.yValue, series.yAxis.visibleRange) ||\n (series.type.indexOf('100') > -1 && withIn(series.stackedValues.endValues[point.index], series.yAxis.visibleRange)))\n && withIn(point.xValue, series.xAxis.visibleRange) && parseFloat(childElement.style.top) >= vAxis.rect.y &&\n parseFloat(childElement.style.left) >= hAxis.rect.x && parseFloat(childElement.style.top) <= vAxis.rect.y + vAxis.rect.height &&\n parseFloat(childElement.style.left) <= hAxis.rect.x + hAxis.rect.width) {\n this.chart.dataLabelCollections.push(new Rect(rect.x + clip.x, rect.y + clip.y, rect.width, rect.height));\n parentElement.appendChild(childElement);\n if (series.animation.enable && this.chart.animateSeries) {\n this.doDataLabelAnimation(series, childElement);\n }\n }\n };\n DataLabel.prototype.calculateTextPosition = function (point, series, textSize, dataLabel, labelIndex) {\n var labelRegion = labelIndex > 1 ? (series.type === 'Candle') ? point.regions[1] : point.regions[0] : point.regions[0];\n if (labelIndex > 1 && series.type === 'HiloOpenClose') {\n labelRegion = (labelIndex === 2) ? point.regions[1] : point.regions[2];\n }\n var location;\n location = this.getLabelLocation(point, series, textSize, labelIndex);\n var padding = 5;\n var clipRect = series.clipRect;\n var rect;\n // calculating alignment\n if (!this.chart.requireInvertedAxis || !this.isRectSeries(series) || series.type === 'BoxAndWhisker') {\n this.locationX = location.x;\n var alignmentValue = textSize.height + (this.borderWidth * 2) + this.markerHeight +\n this.margin.bottom + this.margin.top + padding;\n location.y = (dataLabel.position === 'Auto') ? location.y :\n this.calculateAlignment(alignmentValue, location.y, dataLabel.alignment, this.isRectSeries(series) ? point.yValue < 0 : false);\n // calculating position\n location.y = (!this.isRectSeries(series) || series.type === 'BoxAndWhisker') ?\n this.calculatePathPosition(location.y, dataLabel.position, series, point, textSize, labelIndex) :\n this.calculateRectPosition(location.y, labelRegion, point.yValue < 0 !== this.yAxisInversed, dataLabel.position, series, textSize, labelIndex, point);\n if (this.isRectSeries(series) && this.chart.chartAreaType === 'PolarRadar') {\n location = this.calculatePolarRectPosition(location, dataLabel.position, series, point, textSize, labelIndex);\n }\n }\n else {\n this.locationY = location.y;\n var alignmentValue = textSize.width + this.borderWidth + this.margin.left + this.margin.right - padding;\n location.x = dataLabel.position === 'Auto' ? location.x :\n this.calculateAlignment(alignmentValue, location.x, dataLabel.alignment, point.yValue < 0);\n location.x = this.calculateRectPosition(location.x, labelRegion, point.yValue < 0 !== this.yAxisInversed, dataLabel.position, series, textSize, labelIndex, point);\n }\n rect = calculateRect(location, textSize, this.margin);\n // Checking the condition whether data Label has been exist the clip rect\n if (!((rect.y > clipRect.height) || (rect.x > clipRect.width) ||\n (rect.x + rect.width < 0) || (rect.y + rect.height < 0))) {\n rect.x = rect.x < 0 ? padding : rect.x;\n rect.y = rect.y < 0 ? padding : rect.y;\n rect.x -= (rect.x + rect.width) > clipRect.width ? (rect.x + rect.width) - clipRect.width + padding : 0;\n rect.y -= (rect.y + rect.height) > clipRect.height ? (rect.y + rect.height) - clipRect.height + padding : 0;\n this.fontBackground = this.fontBackground === 'transparent' ? this.chartBackground : this.fontBackground;\n }\n return rect;\n };\n // Calculation label location for polar column draw types\n DataLabel.prototype.calculatePolarRectPosition = function (location, position, series, point, size, labelIndex) {\n var padding = 5;\n var columnRadius;\n var angle = (point.regionData.startAngle - 0.5 * Math.PI) + (point.regionData.endAngle - point.regionData.startAngle) / 2;\n if (labelIndex === 0) {\n columnRadius = point.regionData.radius < point.regionData.innerRadius ? point.regionData.innerRadius\n : point.regionData.radius;\n }\n else {\n columnRadius = point.regionData.radius > point.regionData.innerRadius ? point.regionData.innerRadius\n : point.regionData.radius;\n }\n this.fontBackground = this.fontBackground === 'transparent' ? this.chartBackground : this.fontBackground;\n if (series.drawType.indexOf('Stacking') > -1) {\n position = position === 'Outer' ? 'Top' : position;\n }\n else if (series.drawType.indexOf('Range') > -1) {\n position = (position === 'Outer' || position === 'Top') ? position : 'Auto';\n }\n if (position === 'Outer') {\n columnRadius = labelIndex === 0 ? columnRadius + 2 * padding : columnRadius - 2 * padding;\n }\n else if (position === 'Middle') {\n columnRadius = columnRadius / 2 + padding;\n }\n else if (position === 'Top') {\n columnRadius = labelIndex === 0 ? columnRadius - 2 * padding : columnRadius + 2 * padding;\n }\n else if (position === 'Bottom') {\n columnRadius = padding;\n }\n else {\n if (labelIndex === 0) {\n columnRadius = columnRadius >= series.chart.radius ? columnRadius - padding :\n series.drawType === 'StackingColumn' ? columnRadius - 2 * padding : columnRadius + 2 * padding;\n }\n else {\n columnRadius = columnRadius >= series.chart.radius ? columnRadius + padding : columnRadius - 2 * padding;\n }\n }\n location.x = series.clipRect.width / 2 + series.clipRect.x + columnRadius * Math.cos(angle);\n location.y = series.clipRect.height / 2 + series.clipRect.y + columnRadius * Math.sin(angle);\n return location;\n };\n /**\n * Get the label location\n */\n DataLabel.prototype.getLabelLocation = function (point, series, textSize, labelIndex) {\n var location = new ChartLocation(0, 0);\n var labelRegion = (series.type === 'Candle' && labelIndex > 1) ? point.regions[1] : point.regions[0];\n if (series.type === 'HiloOpenClose') {\n labelRegion = (labelIndex === 2) ? point.regions[1] : point.regions[2];\n }\n var xAxis = series.xAxis;\n var yAxis = series.yAxis;\n var isInverted = series.chart.requireInvertedAxis;\n if (series.type === 'BoxAndWhisker') {\n this.markerHeight = 0;\n switch (labelIndex) {\n case 0:\n location = getPoint(point.xValue, point.median, xAxis, yAxis, isInverted);\n break;\n case 1:\n location = getPoint(point.xValue, point.maximum, xAxis, yAxis, isInverted);\n break;\n case 2:\n location = getPoint(point.xValue, point.minimum, xAxis, yAxis, isInverted);\n break;\n case 3:\n location = getPoint(point.xValue, point.upperQuartile, xAxis, yAxis, isInverted);\n break;\n case 4:\n location = getPoint(point.xValue, point.lowerQuartile, xAxis, yAxis, isInverted);\n break;\n default: {\n location = getPoint(point.xValue, point.outliers[labelIndex - 5], xAxis, yAxis, isInverted);\n this.markerHeight = series.marker.height / 2;\n break;\n }\n }\n location.x = point.regions[0].x + (point.regions[0].width / 2);\n }\n else if (labelIndex === 0 || labelIndex === 1) {\n location = new ChartLocation(point.symbolLocations[0].x, point.symbolLocations[0].y);\n }\n else if ((labelIndex === 2 || labelIndex === 3) && series.type === 'Candle') {\n location = new ChartLocation(point.symbolLocations[1].x, point.symbolLocations[1].y);\n }\n else if (isInverted) {\n location = { x: labelRegion.x + (labelRegion.width) / 2, y: labelRegion.y };\n }\n else {\n location = { x: labelRegion.x + labelRegion.width, y: labelRegion.y + (labelRegion.height) / 2 };\n }\n //Aligning the label at the beginning of the tick, when tick size is less than text size\n if (labelIndex > 1 && series.type === 'HiloOpenClose') {\n if (series.chart.requireInvertedAxis) {\n var height = labelRegion.height;\n location.y = labelRegion.y + height / 2 + 2 * (labelIndex === 2 ? 1 : -1);\n }\n else {\n var width = labelRegion.width;\n location.x = labelRegion.x + width / 2 + 2 * (labelIndex === 2 ? 1 : -1);\n }\n }\n return location;\n };\n DataLabel.prototype.calculateRectPosition = function (labelLocation, rect, isMinus, position, series, textSize, labelIndex, point) {\n if (series.chart.chartAreaType === 'PolarRadar') {\n return null;\n }\n var padding = 5;\n var margin = this.margin;\n var textLength = !this.inverted ? textSize.height : textSize.width;\n var extraSpace = this.borderWidth + textLength / 2 + padding;\n if (series.type.indexOf('Stacking') > -1) {\n position = position === 'Outer' ? 'Top' : position;\n }\n else if (series.type.indexOf('Range') > -1) {\n position = (position === 'Outer' || position === 'Top') ? position : 'Auto';\n }\n else if (series.type === 'Waterfall') {\n position = position === 'Auto' ? 'Middle' : position;\n }\n switch (position) {\n case 'Bottom':\n labelLocation = !this.inverted ?\n isMinus ? (labelLocation - rect.height + extraSpace + margin.top) :\n (labelLocation + rect.height - extraSpace - margin.bottom) :\n isMinus ? (labelLocation + rect.width - extraSpace - margin.left) :\n (labelLocation - rect.width + extraSpace + margin.right);\n break;\n case 'Middle':\n labelLocation = labelLocation = !this.inverted ?\n (isMinus ? labelLocation - (rect.height / 2) : labelLocation + (rect.height / 2)) :\n (isMinus ? labelLocation + (rect.width / 2) : labelLocation - (rect.width / 2));\n break;\n case 'Auto':\n labelLocation = this.calculateRectActualPosition(labelLocation, rect, isMinus, series, textSize, labelIndex, point);\n break;\n default:\n extraSpace += this.errorHeight;\n labelLocation = this.calculateTopAndOuterPosition(labelLocation, rect, position, series, labelIndex, extraSpace, isMinus);\n break;\n }\n var check = !this.inverted ? (labelLocation < rect.y || labelLocation > rect.y + rect.height) :\n (labelLocation < rect.x || labelLocation > rect.x + rect.width);\n this.fontBackground = check ?\n (this.fontBackground === 'transparent' ? this.chartBackground : this.fontBackground)\n : this.fontBackground === 'transparent' ? (point.color || series.interior) : this.fontBackground;\n return labelLocation;\n };\n DataLabel.prototype.calculatePathPosition = function (labelLocation, position, series, point, size, labelIndex) {\n var padding = 5;\n if ((series.type.indexOf('Area') > -1 && series.type !== 'RangeArea')\n && this.yAxisInversed && series.marker.dataLabel.position !== 'Auto') {\n position = position === 'Top' ? 'Bottom' : position === 'Bottom' ? 'Top' : position;\n }\n this.fontBackground = this.fontBackground === 'transparent' ? this.chartBackground : this.fontBackground;\n switch (position) {\n case 'Top':\n case 'Outer':\n labelLocation = labelLocation - this.markerHeight - this.borderWidth - size.height / 2 - this.margin.bottom - padding -\n this.errorHeight;\n break;\n case 'Bottom':\n labelLocation = labelLocation + this.markerHeight + this.borderWidth + size.height / 2 + this.margin.top + padding +\n this.errorHeight;\n break;\n case 'Auto':\n labelLocation = this.calculatePathActualPosition(labelLocation, this.markerHeight, series, point, size, labelIndex);\n break;\n }\n return labelLocation;\n };\n DataLabel.prototype.isDataLabelShape = function (style) {\n this.isShape = (style.color !== 'transparent' || style.border.width > 0);\n this.borderWidth = style.border.width;\n if (!this.isShape) {\n this.margin = { left: 0, right: 0, bottom: 0, top: 0 };\n }\n };\n DataLabel.prototype.calculateRectActualPosition = function (labelLocation, rect, isMinus, series, size, labelIndex, point) {\n var location;\n var labelRect;\n var isOverLap = true;\n var position = 0;\n var collection = this.chart.dataLabelCollections;\n var finalPosition = series.type.indexOf('Range') !== -1 || series.type === 'Hilo' ? 2 : 4;\n while (isOverLap && position < finalPosition) {\n location = this.calculateRectPosition(labelLocation, rect, isMinus, this.getPosition(position), series, size, labelIndex, point);\n if (!this.inverted) {\n labelRect = calculateRect(new ChartLocation(this.locationX, location), size, this.margin);\n isOverLap = labelRect.y < 0 || isCollide(labelRect, collection, series.clipRect) || labelRect.y > series.clipRect.height;\n }\n else {\n labelRect = calculateRect(new ChartLocation(location, this.locationY), size, this.margin);\n isOverLap = labelRect.x < 0 || isCollide(labelRect, collection, series.clipRect) ||\n labelRect.x + labelRect.width > series.clipRect.width;\n }\n position++;\n }\n return location;\n };\n // alignment calculation assigned here\n DataLabel.prototype.calculateAlignment = function (value, labelLocation, alignment, isMinus) {\n switch (alignment) {\n case 'Far':\n labelLocation = !this.inverted ? (isMinus ? labelLocation + value : labelLocation - value) :\n (isMinus ? labelLocation - value : labelLocation + value);\n break;\n case 'Near':\n labelLocation = !this.inverted ? (isMinus ? labelLocation - value : labelLocation + value) :\n (isMinus ? labelLocation + value : labelLocation - value);\n break;\n case 'Center':\n labelLocation = labelLocation;\n break;\n }\n return labelLocation;\n };\n //calculation for top and outer position of datalabel for rect series\n DataLabel.prototype.calculateTopAndOuterPosition = function (location, rect, position, series, index, extraSpace, isMinus) {\n var margin = this.margin;\n var top;\n switch (series.type) {\n case 'RangeColumn':\n case 'RangeArea':\n case 'Hilo':\n top = (index === 0 && !this.yAxisInversed) || (index === 1 && this.yAxisInversed);\n location = this.updateLabelLocation(position, location, extraSpace, margin, rect, top);\n break;\n case 'Candle':\n top = (index === 0 || index === 2) && !this.yAxisInversed\n || (index === 1 || index === 3) && this.yAxisInversed;\n location = this.updateLabelLocation(position, location, extraSpace, margin, rect, top, index > 1);\n break;\n case 'HiloOpenClose':\n if (index <= 1) {\n top = (index === 0 && !this.yAxisInversed) || (index === 1 && this.yAxisInversed);\n location = this.updateLabelLocation(position, location, extraSpace, margin, rect, top);\n }\n else {\n if (this.yAxisInversed) {\n location = !this.inverted ? location + extraSpace + margin.top : location - extraSpace - margin.right;\n }\n else {\n location = !this.inverted ? location - extraSpace - margin.bottom : location + extraSpace + margin.left;\n }\n }\n break;\n default:\n if ((isMinus && position === 'Top') || (!isMinus && position === 'Outer')) {\n location = !this.inverted ? location - extraSpace - margin.bottom : location + extraSpace + margin.left;\n }\n else {\n location = !this.inverted ? location + extraSpace + margin.top : location - extraSpace - margin.right;\n }\n break;\n }\n return location;\n };\n /**\n * Updates the label location\n */\n DataLabel.prototype.updateLabelLocation = function (position, location, extraSpace, margin, rect, top, inside) {\n if (inside === void 0) { inside = false; }\n if (!this.inverted) {\n if (top) {\n location = (position === 'Outer' && !inside) ? location - extraSpace - margin.bottom : location + extraSpace + margin.top;\n }\n else {\n location = (position === 'Outer' && !inside) ? location + rect.height + extraSpace + margin.top :\n location + rect.height - extraSpace - margin.bottom;\n }\n }\n else {\n if (top) {\n location = (position === 'Outer' && !inside) ? location + extraSpace + margin.left : location - extraSpace - margin.right;\n }\n else {\n location = (position === 'Outer' && !inside) ? location - rect.width - extraSpace - margin.right :\n location - rect.width + extraSpace + margin.left;\n }\n }\n return location;\n };\n DataLabel.prototype.calculatePathActualPosition = function (y, markerSize, series, point, size, labelIndex) {\n var points = series.points;\n var index = point.index;\n var yValue = points[index].yValue;\n var position;\n var nextPoint = points.length - 1 > index ? points[index + 1] : null;\n var previousPoint = index > 0 ? points[index - 1] : null;\n var yLocation;\n var isOverLap = true;\n var labelRect;\n var isBottom;\n var positionIndex;\n var collection = this.chart.dataLabelCollections;\n if (series.type === 'Bubble') {\n position = 'Top';\n }\n else if (series.type.indexOf('Step') > -1) {\n position = 'Top';\n if (index) {\n position = (!previousPoint || !previousPoint.visible || (yValue > previousPoint.yValue !== this.yAxisInversed)\n || yValue === previousPoint.yValue) ? 'Top' : 'Bottom';\n }\n }\n else if (series.type === 'BoxAndWhisker') {\n if (labelIndex === 1 || labelIndex === 3 || labelIndex > 4) {\n position = series.yAxis.isInversed ? 'Bottom' : 'Top';\n }\n else if (labelIndex === 2 || labelIndex === 4) {\n position = series.yAxis.isInversed ? 'Top' : 'Bottom';\n }\n else {\n isOverLap = false;\n position = 'Middle';\n yLocation = this.calculatePathPosition(y, position, series, point, size, labelIndex);\n }\n }\n else {\n if (index === 0) {\n position = (!nextPoint || !nextPoint.visible || yValue > nextPoint.yValue ||\n (yValue < nextPoint.yValue && this.yAxisInversed)) ? 'Top' : 'Bottom';\n }\n else if (index === points.length - 1) {\n position = (!previousPoint || !previousPoint.visible || yValue > previousPoint.yValue ||\n (yValue < previousPoint.yValue && this.yAxisInversed)) ? 'Top' : 'Bottom';\n }\n else {\n if (!nextPoint.visible && !(previousPoint && previousPoint.visible)) {\n position = 'Top';\n }\n else if (!nextPoint.visible || !previousPoint) {\n position = (nextPoint.yValue > yValue || (previousPoint && previousPoint.yValue > yValue)) ?\n 'Bottom' : 'Top';\n }\n else {\n var slope = (nextPoint.yValue - previousPoint.yValue) / 2;\n var intersectY = (slope * index) + (nextPoint.yValue - (slope * (index + 1)));\n position = !this.yAxisInversed ? intersectY < yValue ? 'Top' : 'Bottom' :\n intersectY < yValue ? 'Bottom' : 'Top';\n }\n }\n }\n isBottom = position === 'Bottom';\n positionIndex = ['Outer', 'Top', 'Bottom', 'Middle', 'Auto'].indexOf(position);\n while (isOverLap && positionIndex < 4) {\n yLocation = this.calculatePathPosition(y, this.getPosition(positionIndex), series, point, size, labelIndex);\n labelRect = calculateRect(new ChartLocation(this.locationX, yLocation), size, this.margin);\n isOverLap = labelRect.y < 0 || isCollide(labelRect, collection, series.clipRect)\n || (labelRect.y + labelRect.height) > series.clipRect.height;\n positionIndex = isBottom ? positionIndex - 1 : positionIndex + 1;\n isBottom = false;\n }\n return yLocation;\n };\n /**\n * Animates the data label.\n * @param {Series} series - Data label of the series gets animated.\n * @return {void}\n */\n DataLabel.prototype.doDataLabelAnimation = function (series, element) {\n var shapeElements = series.shapeElement.childNodes;\n var textNode = series.textElement.childNodes;\n var delay = series.animation.delay + series.animation.duration;\n var location;\n var length = element ? 1 : textNode.length;\n for (var i = 0; i < length; i++) {\n if (element) {\n element.style.visibility = 'hidden';\n templateAnimate(element, delay, 200, 'ZoomIn');\n }\n else {\n location = new ChartLocation((+textNode[i].getAttribute('x')) + ((+textNode[i].getAttribute('width')) / 2), (+textNode[i].getAttribute('y')) + ((+textNode[i].getAttribute('height')) / 2));\n markerAnimate(textNode[i], delay, 200, series, null, location, true);\n if (shapeElements[i]) {\n location = new ChartLocation((+shapeElements[i].getAttribute('x')) + ((+shapeElements[i].getAttribute('width')) / 2), (+shapeElements[i].getAttribute('y')) + ((+shapeElements[i].getAttribute('height')) / 2));\n markerAnimate(shapeElements[i], delay, 200, series, null, location, true);\n }\n }\n }\n };\n DataLabel.prototype.getPosition = function (index) {\n return (['Outer', 'Top', 'Bottom', 'Middle', 'Auto'][index]);\n };\n /**\n * Get module name.\n */\n DataLabel.prototype.getModuleName = function () {\n // Returns the module name\n return 'DataLabel';\n };\n /**\n * To destroy the dataLabel for series.\n * @return {void}\n * @private\n */\n DataLabel.prototype.destroy = function (chart) {\n // Destroy method performed here\n };\n return DataLabel;\n}());\nexport { DataLabel };\n","import { Mean, RectOption } from '../../common/utils/helper';\nimport { getPoint, PathOption, sum, templateAnimate } from '../../common/utils/helper';\n/**\n * `ErrorBar` module is used to render the error bar for series.\n */\nvar ErrorBar = /** @class */ (function () {\n /**\n * Constructor for the error bar module.\n * @private\n */\n function ErrorBar(chart) {\n this.chart = chart;\n }\n /**\n * Render the error bar for series.\n * @return {void}\n */\n ErrorBar.prototype.render = function (series) {\n if (this.chart.chartAreaType === 'PolarRadar') {\n return null;\n }\n this.createElement(series);\n this.renderErrorBar(series);\n };\n ErrorBar.prototype.renderErrorBar = function (series) {\n var seriesIndex = series.index;\n var point;\n var symbolId;\n var capId;\n var errorbar = series.errorBar;\n var errorBarCap = series.errorBar.errorBarCap;\n var border = series.border;\n var start;\n var mid;\n var end;\n var isInverted;\n var isVert;\n var errorDirection = ['', ''];\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point_1 = _a[_i];\n if (point_1.visible && point_1.symbolLocations[0]) {\n var errorX = 0;\n var errorY = 0;\n switch (errorbar.mode) {\n case 'Vertical':\n errorY = errorbar.verticalError;\n break;\n case 'Horizontal':\n errorX = errorbar.horizontalError;\n break;\n case 'Both':\n errorX = errorbar.horizontalError;\n errorY = errorbar.verticalError;\n break;\n }\n errorDirection = this['calculate' + errorbar.type + 'Value'](point_1, series, this.chart.requireInvertedAxis, errorX, errorY);\n symbolId = this.chart.element.id + '_Series_' + '_ErrorBarGroup_' + seriesIndex + '_Point_' + point_1.index;\n capId = this.chart.element.id + '_Series_' + '_ErrorBarCap_' + seriesIndex + '_Point_' + point_1.index;\n var shapeOption = new PathOption(symbolId, '', errorbar.width, errorbar.color || this.chart.themeStyle.errorBar, null, '', errorDirection[0]);\n var path = this.chart.renderer.drawPath(shapeOption);\n series.errorBarElement.appendChild(path);\n var capOption = new PathOption(capId, '', errorBarCap.width, errorBarCap.color || this.chart.themeStyle.errorBar, null, '', errorDirection[1]);\n var capPath = this.chart.renderer.drawPath(capOption);\n series.errorBarElement.appendChild(capPath);\n }\n }\n };\n // path calculation for error bar\n ErrorBar.prototype.findLocation = function (point, series, isInverted, x1, y1) {\n var errorbar = series.errorBar;\n var direction = errorbar.direction;\n var location = [];\n var stackedValue = series.stackedValues;\n var yValue = series.type.indexOf('Stacking') > -1 ? series.stackedValues.endValues[point.index] :\n (series.seriesType === 'HighLow' || series.seriesType === 'HighLowOpenClose') ? (series.points[point.index].high) :\n point.yValue;\n var startPoint = getPoint(point.xValue + ((direction === 'Plus' || direction === 'Both') ? (errorbar.type === 'Custom' &&\n (errorbar.mode === 'Horizontal' || errorbar.mode === 'Both')) ? x1 = errorbar.horizontalPositiveError : x1 : 0), yValue + ((direction === 'Plus' || direction === 'Both') ? (errorbar.type === 'Custom' &&\n (errorbar.mode === 'Vertical' || errorbar.mode === 'Both')) ? y1 = errorbar.verticalPositiveError : y1 : 0), series.xAxis, series.yAxis, isInverted);\n location.push(startPoint);\n if (series.isRectSeries) {\n var midPoint = point.symbolLocations[0];\n location.push(midPoint);\n }\n else {\n var midPoint = getPoint(point.xValue, point.yValue, series.xAxis, series.yAxis, isInverted);\n location.push(midPoint);\n }\n var endPoint = getPoint(point.xValue - ((direction === 'Minus' || direction === 'Both') ? (errorbar.type === 'Custom' &&\n (errorbar.mode === 'Horizontal' || errorbar.mode === 'Both')) ? x1 = errorbar.horizontalNegativeError : x1 : 0), yValue - ((direction === 'Minus' || direction === 'Both') ? (errorbar.type === 'Custom' &&\n (errorbar.mode === 'Vertical' || errorbar.mode === 'Both')) ? y1 = errorbar.verticalNegativeError : y1 : 0), series.xAxis, series.yAxis, isInverted);\n location.push(endPoint);\n // calculate error height for datalabel position alignment\n point.error = (errorbar.mode === 'Vertical') ? errorbar.verticalError : errorbar.horizontalError;\n this.negativeHeight = (errorbar.mode === 'Vertical' || errorbar.mode === 'Both') ? (isInverted ? (location[1].x - location[2].x) :\n (location[2].y - location[1].y)) : 0;\n this.positiveHeight = (errorbar.mode === 'Vertical' || errorbar.mode === 'Both') ? (isInverted ? (location[0].x - location[1].x) :\n (location[1].y - location[0].y)) : 0;\n return this.getErrorDirection(location[0], location[1], location[2], series, isInverted);\n };\n // calculations for eror bar types\n ErrorBar.prototype.calculateFixedValue = function (point, series, isInverted, errorX, errorY, xAxis, yAxis) {\n var errorbar = series.errorBar;\n return this.findLocation(point, series, isInverted, errorX, errorY);\n };\n ErrorBar.prototype.calculatePercentageValue = function (point, series, isInverted, errorX, errorY, xAxis, yAxis) {\n errorX = (errorX / 100) * point.xValue;\n errorY = (errorY / 100) * point.yValue;\n return this.findLocation(point, series, isInverted, errorX, errorY);\n };\n ErrorBar.prototype.calculateStandardDeviationValue = function (point, series, isInverted, errorX, errorY, xAxis, yAxis) {\n var getMean = this.meanCalculation(series, series.errorBar.mode);\n errorX = errorX * (getMean.horizontalSquareRoot + getMean.horizontalMean);\n errorY = errorY * (getMean.verticalSquareRoot + getMean.verticalMean);\n return this.findLocation(point, series, isInverted, errorX, errorY);\n };\n ErrorBar.prototype.calculateStandardErrorValue = function (point, series, isInverted, errorX, errorY, xAxis, yAxis) {\n var length = series.points.length;\n var getMean = this.meanCalculation(series, series.errorBar.mode);\n errorX = ((errorX * getMean.horizontalSquareRoot) / Math.sqrt(length));\n errorY = ((errorY * getMean.verticalSquareRoot) / Math.sqrt(length));\n return this.findLocation(point, series, isInverted, errorX, errorY);\n };\n ErrorBar.prototype.calculateCustomValue = function (point, series, isInverted, errorX, errorY, xAxis, yAxis) {\n var errorbar = series.errorBar;\n return this.findLocation(point, series, isInverted, errorX, errorY);\n };\n ErrorBar.prototype.getHorizontalDirection = function (start, mid, end, direction, errorMode, capLength) {\n var path = '';\n var capDirection = '';\n path += ' M ' + start.x + ' ' + mid.y + ' L ' + end.x + ' ' + mid.y;\n capDirection += (direction === 'Plus' || direction === 'Both') ? ' M ' + (start.x) + ' ' + (mid.y - capLength) + ' L '\n + (start.x) + ' ' + (mid.y + capLength) : '';\n capDirection += (direction === 'Minus' || direction === 'Both') ? ' M ' + (end.x) + ' ' + (mid.y - capLength) + ' L '\n + (end.x) + ' ' + (mid.y + capLength) : ' ';\n return [path, capDirection];\n };\n ErrorBar.prototype.getVerticalDirection = function (start, mid, end, direction, errorMode, capLength) {\n var path = '';\n var capDirection = '';\n path += ' M ' + mid.x + ' ' + start.y + ' L ' + mid.x + ' ' + end.y;\n capDirection += (direction === 'Plus' || direction === 'Both') ? ' M ' + (mid.x - capLength) + ' ' + start.y + ' L '\n + (mid.x + capLength) + ' ' + start.y : '';\n capDirection += (direction === 'Minus' || direction === 'Both') ? ' M ' + (mid.x - capLength) + ' ' + end.y + ' L '\n + (mid.x + capLength) + ' ' + end.y : '';\n return [path, capDirection];\n };\n ErrorBar.prototype.getBothDirection = function (start, mid, end, direction, errorMode, capLength) {\n var capDirection = '';\n var path = '';\n var pathH = this.getHorizontalDirection(start, mid, end, direction, errorMode, capLength);\n var pathV = this.getVerticalDirection(start, mid, end, direction, errorMode, capLength);\n path = pathH[0].concat(pathV[0]);\n capDirection = pathH[1].concat(pathV[1]);\n return [path, capDirection];\n };\n ErrorBar.prototype.getErrorDirection = function (start, mid, end, series, isInverted) {\n var direction = series.errorBar.direction;\n var mode = series.errorBar.mode;\n var capLength = series.errorBar.errorBarCap.length;\n var path = '';\n var paths;\n var capDirection = '';\n var errorMode = mode;\n switch (mode) {\n case 'Both':\n errorMode = mode;\n break;\n case 'Horizontal':\n errorMode = (isInverted) ? 'Vertical' : mode;\n break;\n case 'Vertical':\n errorMode = (isInverted) ? 'Horizontal' : mode;\n break;\n }\n switch (errorMode) {\n case 'Horizontal':\n paths = this.getHorizontalDirection(start, mid, end, direction, errorMode, capLength);\n break;\n case 'Vertical':\n paths = this.getVerticalDirection(start, mid, end, direction, errorMode, capLength);\n break;\n case 'Both':\n paths = this.getBothDirection(start, mid, end, direction, errorMode, capLength);\n break;\n }\n return [paths[0], paths[1]];\n };\n // mean calculation for standard deviation and standard error\n ErrorBar.prototype.meanCalculation = function (series, mode) {\n var sumOfX = 0;\n var sumOfY = 0;\n var verticalMean = 0;\n var horizontalMean = 0;\n var horSquareDev;\n var verStandardMean;\n var horStandardMean;\n var verSquareTotal;\n var horSquareTotal;\n var verSquareRoot;\n var horSquareRoot;\n var length = series.points.length;\n switch (mode) {\n case 'Vertical':\n sumOfY = sum(series.yData);\n verticalMean = sumOfY / length;\n break;\n case 'Horizontal':\n sumOfX = sum(series.xData);\n horizontalMean = sumOfX / length;\n break;\n case 'Both':\n sumOfY = sum(series.yData);\n verticalMean = sumOfY / length;\n sumOfX = sum(series.xData);\n horizontalMean = sumOfX / length;\n }\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n if (mode === 'Vertical') {\n sumOfY = sumOfY + Math.pow((point.yValue - verticalMean), 2);\n }\n else if (mode === 'Horizontal') {\n sumOfX = sumOfX + Math.pow((point.xValue - horizontalMean), 2);\n }\n else {\n sumOfY = sumOfY + Math.pow((point.yValue - verticalMean), 2);\n sumOfX = sumOfX + Math.pow((point.xValue - horizontalMean), 2);\n }\n }\n verStandardMean = sumOfY / (length - 1);\n verSquareRoot = Math.sqrt(sumOfY / (length - 1));\n horStandardMean = sumOfX / (length - 1);\n horSquareRoot = Math.sqrt(sumOfX / (length - 1));\n return new Mean(verStandardMean, verSquareRoot, horStandardMean, horSquareRoot, verticalMean, horizontalMean);\n };\n ErrorBar.prototype.createElement = function (series) {\n var explodeValue = 5;\n var render = series.chart.renderer;\n var transform;\n transform = series.chart.chartAreaType === 'Cartesian' ? 'translate(' + series.clipRect.x + ',' + (series.clipRect.y) + ')' : '';\n var markerHeight = (series.marker.height + explodeValue) / 2;\n var markerWidth = (series.marker.width + explodeValue) / 2;\n if (series.chart.chartAreaType === 'Cartesian') {\n var errorBarClipRect = render.drawClipPath(new RectOption(this.chart.element.id + '_ChartErrorBarClipRect_' + series.index, 'transparent', { width: 1, color: 'Gray' }, 1, {\n x: -markerWidth, y: -markerHeight,\n width: series.clipRect.width + markerWidth * 2, height: series.clipRect.height + markerHeight * 2\n }));\n series.errorBarElement = render.createGroup({\n 'id': this.chart.element.id + 'ErrorBarGroup' + series.index,\n 'transform': transform,\n 'clip-path': 'url(#' + this.chart.element.id + '_ChartErrorBarClipRect_' + series.index + ')'\n });\n series.errorBarElement.appendChild(errorBarClipRect);\n }\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n ErrorBar.prototype.doErrorBarAnimation = function (series) {\n var errorBarElements = series.errorBarElement.childNodes;\n if (!errorBarElements) {\n return null;\n }\n var delay = series.animation.delay + series.animation.duration;\n var j = 1;\n while (j < errorBarElements.length) {\n for (var i = 0; i < series.points.length; i++) {\n if (!series.points[i].symbolLocations[0]) {\n continue;\n }\n errorBarElements[j].style.visibility = 'hidden';\n templateAnimate(errorBarElements[j], delay, 350, series.chart.requireInvertedAxis ? 'SlideLeftIn' : 'SlideBottomIn', false);\n }\n j++;\n }\n };\n /**\n * Get module name.\n */\n ErrorBar.prototype.getModuleName = function () {\n // Returns the module name\n return 'ErrorBar';\n };\n /**\n * To destroy the errorBar for series.\n * @return {void}\n * @private\n */\n ErrorBar.prototype.destroy = function (chart) {\n // Destroy method performed here\n };\n return ErrorBar;\n}());\nexport { ErrorBar };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * Chart legend\n */\nimport { remove, Browser } from '@syncfusion/ej2-base';\nimport { extend } from '@syncfusion/ej2-base';\nimport { LegendOptions, BaseLegend } from '../../common/legend/legend';\nimport { measureText, textTrim } from '../../common/utils/helper';\nimport { legendRender } from '../../common/model/constants';\n/**\n * `Legend` module is used to render legend for the chart.\n */\nvar Legend = /** @class */ (function (_super) {\n __extends(Legend, _super);\n function Legend(chart) {\n var _this = _super.call(this, chart) || this;\n _this.library = _this;\n _this.addEventListener();\n return _this;\n }\n /**\n * Binding events for legend module.\n */\n Legend.prototype.addEventListener = function () {\n if (this.chart.isDestroyed) {\n return;\n }\n this.chart.on(Browser.touchMoveEvent, this.mouseMove, this);\n this.chart.on('click', this.click, this);\n this.chart.on(Browser.touchEndEvent, this.mouseEnd, this);\n };\n /**\n * UnBinding events for legend module.\n */\n Legend.prototype.removeEventListener = function () {\n if (this.chart.isDestroyed) {\n return;\n }\n this.chart.off(Browser.touchMoveEvent, this.mouseMove);\n this.chart.off('click', this.click);\n this.chart.off(Browser.touchEndEvent, this.mouseEnd);\n };\n /**\n * To handle mosue move for legend module\n */\n Legend.prototype.mouseMove = function (e) {\n if (this.chart.legendSettings.visible && !this.chart.isTouch) {\n this.move(e);\n }\n };\n /**\n * To handle mosue end for legend module\n */\n Legend.prototype.mouseEnd = function (e) {\n if (this.chart.legendSettings.visible && this.chart.isTouch) {\n this.move(e);\n }\n };\n /**\n * Get the legend options.\n * @return {void}\n * @private\n */\n Legend.prototype.getLegendOptions = function (visibleSeriesCollection, chart) {\n this.legendCollections = [];\n var seriesType;\n for (var _i = 0, visibleSeriesCollection_1 = visibleSeriesCollection; _i < visibleSeriesCollection_1.length; _i++) {\n var series = visibleSeriesCollection_1[_i];\n if (series.category !== 'Indicator') {\n seriesType = (chart.chartAreaType === 'PolarRadar') ? series.drawType :\n series.type;\n this.legendCollections.push(new LegendOptions(series.name, series.interior, series.legendShape, series.visible, seriesType, series.marker.shape, series.marker.visible));\n }\n }\n };\n /** @private */\n Legend.prototype.getLegendBounds = function (availableSize, legendBounds, legend) {\n var padding = legend.padding;\n var extraHeight = 0;\n var extraWidth = 0;\n if (!this.isVertical) {\n extraHeight = !legend.height ? ((availableSize.height / 100) * 5) : 0;\n }\n else {\n extraWidth = !legend.width ? ((availableSize.width / 100) * 5) : 0;\n }\n legendBounds.height += extraHeight;\n legendBounds.width += extraWidth;\n var shapeHeight = legend.shapeHeight;\n var shapeWidth = legend.shapeWidth;\n var shapePadding = legend.shapePadding;\n var maximumWidth = 0;\n var rowWidth = 0;\n var legendWidth = 0;\n var columnHeight = 0;\n var rowCount = 0;\n var legendEventArgs;\n this.maxItemHeight = Math.max(measureText('MeasureText', legend.textStyle).height, legend.shapeHeight);\n var render = false;\n for (var _i = 0, _a = this.legendCollections; _i < _a.length; _i++) {\n var legendOption = _a[_i];\n legendEventArgs = {\n fill: legendOption.fill, text: legendOption.text, shape: legendOption.shape,\n markerShape: legendOption.markerShape, name: legendRender, cancel: false\n };\n this.chart.trigger(legendRender, legendEventArgs);\n legendOption.render = !legendEventArgs.cancel;\n legendOption.text = legendEventArgs.text;\n legendOption.fill = legendEventArgs.fill;\n legendOption.shape = legendEventArgs.shape;\n legendOption.markerShape = legendEventArgs.markerShape;\n legendOption.textSize = measureText(legendOption.text, legend.textStyle);\n if (legendOption.render && legendOption.text !== '') {\n render = true;\n legendWidth = shapeWidth + shapePadding + legendOption.textSize.width + padding;\n rowWidth = rowWidth + legendWidth;\n if (legendBounds.width < (padding + rowWidth) || this.isVertical) {\n maximumWidth = Math.max(maximumWidth, (rowWidth + padding - (this.isVertical ? 0 : legendWidth)));\n if (rowCount === 0 && (legendWidth !== rowWidth)) {\n rowCount = 1;\n }\n rowWidth = this.isVertical ? 0 : legendWidth;\n rowCount++;\n columnHeight = (rowCount * (this.maxItemHeight + padding)) + padding;\n }\n }\n }\n columnHeight = Math.max(columnHeight, (this.maxItemHeight + padding) + padding);\n this.isPaging = legendBounds.height < columnHeight;\n this.totalPages = rowCount;\n if (render) {\n this.setBounds(Math.max((rowWidth + padding), maximumWidth), columnHeight, legend, legendBounds);\n }\n else {\n this.setBounds(0, 0, legend, legendBounds);\n }\n };\n /** @private */\n Legend.prototype.getRenderPoint = function (legendOption, start, textPadding, prevLegend, rect, count, firstLegend) {\n var padding = this.legend.padding;\n var previousBound = (prevLegend.location.x + textPadding + prevLegend.textSize.width);\n if ((previousBound + (legendOption.textSize.width + textPadding)) > (rect.x + rect.width + this.legend.shapeWidth / 2) ||\n this.isVertical) {\n legendOption.location.x = start.x;\n legendOption.location.y = (count === firstLegend) ? prevLegend.location.y :\n prevLegend.location.y + this.maxItemHeight + padding;\n }\n else {\n legendOption.location.x = (count === firstLegend) ? prevLegend.location.x : previousBound;\n legendOption.location.y = prevLegend.location.y;\n }\n var availwidth = (this.legendBounds.x + this.legendBounds.width) - (legendOption.location.x +\n textPadding - this.legend.shapeWidth / 2);\n legendOption.text = textTrim(+availwidth.toFixed(4), legendOption.text, this.legend.textStyle);\n };\n /** @private */\n Legend.prototype.LegendClick = function (seriesIndex) {\n var chart = this.chart;\n var series = chart.visibleSeries[seriesIndex];\n var legend = this.legendCollections[seriesIndex];\n var selectedDataIndexes = [];\n if (chart.selectionModule) {\n selectedDataIndexes = extend([], chart.selectionModule.selectedDataIndexes, null, true);\n }\n if (chart.legendSettings.toggleVisibility) {\n if (!series.visible) {\n series.visible = true;\n }\n else {\n series.visible = false;\n }\n legend.visible = (series.visible);\n if (chart.svgObject.childNodes.length > 0) {\n while (chart.svgObject.lastChild) {\n chart.svgObject.removeChild(chart.svgObject.lastChild);\n }\n remove(chart.svgObject);\n }\n chart.animateSeries = false;\n chart.removeSvg();\n chart.refreshAxis();\n series.refreshAxisLabel();\n this.refreshSeries(chart.visibleSeries);\n chart.refreshBound();\n chart.trigger('loaded', { chart: chart });\n if (selectedDataIndexes.length > 0) {\n chart.selectionModule.selectedDataIndexes = selectedDataIndexes;\n chart.selectionModule.redrawSelection(chart, chart.selectionMode);\n }\n }\n else if (chart.selectionModule) {\n chart.selectionModule.legendSelection(chart, seriesIndex);\n }\n };\n Legend.prototype.refreshSeries = function (seriesCollection) {\n for (var _i = 0, seriesCollection_1 = seriesCollection; _i < seriesCollection_1.length; _i++) {\n var series = seriesCollection_1[_i];\n series.position = undefined;\n }\n };\n /**\n * To show the tooltip for the trimmed text in legend.\n * @return {void}\n */\n Legend.prototype.click = function (event) {\n if (!this.chart.legendSettings.visible) {\n return;\n }\n var targetId = event.target.id;\n var legendItemsId = [this.legendID + '_text_', this.legendID + '_shape_marker_',\n this.legendID + '_shape_'];\n var seriesIndex;\n for (var _i = 0, legendItemsId_1 = legendItemsId; _i < legendItemsId_1.length; _i++) {\n var id = legendItemsId_1[_i];\n if (targetId.indexOf(id) > -1) {\n seriesIndex = parseInt(targetId.split(id)[1], 10);\n this.LegendClick(seriesIndex);\n }\n }\n if (targetId.indexOf(this.legendID + '_pageup') > -1) {\n this.changePage(event, true);\n }\n else if (targetId.indexOf(this.legendID + '_pagedown') > -1) {\n this.changePage(event, false);\n }\n };\n /**\n * Get module name\n */\n Legend.prototype.getModuleName = function () {\n return 'Legend';\n };\n /**\n * To destroy the Legend.\n * @return {void}\n * @private\n */\n Legend.prototype.destroy = function (chart) {\n this.removeEventListener();\n };\n return Legend;\n}(BaseLegend));\nexport { Legend };\n","import { createTemplate, measureElementRect, logBase } from '../utils/helper';\nimport { ChartLocation, stringToNumber, appendElement, withIn, Rect } from '../utils/helper';\nimport { getPoint } from '../utils/helper';\nimport { createElement } from '@syncfusion/ej2-base';\nimport { annotationRender } from '../model/constants';\nimport { DataUtil } from '@syncfusion/ej2-data';\n/**\n * Annotation Module handles the Annotation for chart and accumulation series.\n */\nvar AnnotationBase = /** @class */ (function () {\n /**\n * Constructor for chart and accumulation annotation\n * @param control\n */\n function AnnotationBase(control) {\n this.control = control;\n }\n /**\n * Method to render the annotation for chart and accumulation series.\n * @private\n * @param annotation\n * @param index\n */\n AnnotationBase.prototype.render = function (annotation, index) {\n this.isChart = this.control.getModuleName() === 'chart';\n this.annotation = annotation;\n var childElement = createTemplate(createElement('div', {\n id: this.control.element.id + '_Annotation_' + index,\n styles: 'position: absolute;'\n }), index, annotation.content, this.control);\n return childElement;\n };\n /**\n * Method to calculate the location for annotation - coordinate unit as pixel.\n * @private\n * @param location\n */\n AnnotationBase.prototype.setAnnotationPixelValue = function (location) {\n var rect;\n rect = this.annotation.region === 'Chart' ?\n new Rect(0, 0, this.control.availableSize.width, this.control.availableSize.height) :\n this.isChart ?\n this.control.chartAxisLayoutPanel.seriesClipRect :\n this.control.series[0].accumulationBound;\n location.x = ((typeof this.annotation.x !== 'string') ?\n ((typeof this.annotation.x === 'number') ? this.annotation.x : 0) :\n stringToNumber(this.annotation.x, rect.width)) + rect.x;\n location.y = ((typeof this.annotation.y === 'number') ? this.annotation.y :\n stringToNumber(this.annotation.y, rect.height)) + rect.y;\n return true;\n };\n /**\n * Method to calculate the location for annotation - coordinate unit as point.\n * @private\n * @param location\n */\n AnnotationBase.prototype.setAnnotationPointValue = function (location) {\n var symbolLocation = new ChartLocation(0, 0);\n if (this.isChart) {\n var xAxis = void 0;\n var yAxis = void 0;\n var chart = this.control;\n var annotation = this.annotation;\n var xValue = void 0;\n var isLog = false;\n var xAxisName = annotation.xAxisName;\n var yAxisName = annotation.yAxisName;\n var isInverted = chart.requireInvertedAxis;\n for (var _i = 0, _a = chart.axisCollections; _i < _a.length; _i++) {\n var axis = _a[_i];\n if (xAxisName === axis.name || (xAxisName == null && axis.name === 'primaryXAxis')) {\n xAxis = axis;\n if (xAxis.valueType.indexOf('Category') > -1) {\n var xAnnotation = xAxis.valueType === 'DateTimeCategory' ? (annotation.x.getTime()).toString() :\n annotation.x;\n if (xAxis.labels.indexOf(xAnnotation) < 0) {\n return false;\n }\n else {\n xValue = xAxis.labels.indexOf(xAnnotation);\n }\n }\n else if (xAxis.valueType === 'DateTime') {\n var option = { skeleton: 'full', type: 'dateTime' };\n xValue = (typeof this.annotation.x === 'object') ?\n Date.parse(chart.intl.getDateParser(option)(chart.intl.getDateFormat(option)(new Date(DataUtil.parse.parseJson({ val: annotation.x }).val)))) : 0;\n }\n else {\n xValue = +annotation.x;\n }\n }\n else if (yAxisName === axis.name || (yAxisName == null && axis.name === 'primaryYAxis')) {\n yAxis = axis;\n isLog = yAxis.valueType === 'Logarithmic';\n }\n }\n if (xAxis && yAxis && withIn(xAxis.valueType === 'Logarithmic' ? logBase(xValue, xAxis.logBase) : xValue, xAxis.visibleRange)) {\n symbolLocation = getPoint(xValue, withIn((isLog ? logBase(+this.annotation.y, yAxis.logBase) : +this.annotation.y), yAxis.visibleRange) ? +annotation.y :\n isLog ? Math.pow(yAxis.logBase, yAxis.visibleRange.max) :\n +annotation.y > yAxis.visibleRange.max ? yAxis.visibleRange.max : yAxis.visibleRange.min, xAxis, yAxis, isInverted);\n location.x = symbolLocation.x + (isInverted ? yAxis.rect.x : xAxis.rect.x);\n location.y = symbolLocation.y + (isInverted ? xAxis.rect.y : yAxis.rect.y);\n }\n else {\n return false;\n }\n return true;\n }\n else {\n return this.setAccumulationPointValue(location);\n }\n };\n /**\n * To process the annotation for accumulation chart\n * @param annotation\n * @param index\n * @param parentElement\n */\n AnnotationBase.prototype.processAnnotation = function (annotation, index, parentElement) {\n var annotationElement;\n var location;\n location = new ChartLocation(0, 0);\n annotationElement = this.render(annotation, index);\n if (this['setAnnotation' + annotation.coordinateUnits + 'Value'](location)) {\n this.setElementStyle(location, annotationElement, parentElement);\n }\n };\n /**\n * Method to calculate the location for annotation - coordinate unit as point in accumulation chart.\n * @private\n * @param location\n */\n AnnotationBase.prototype.setAccumulationPointValue = function (location) {\n var accumulation = this.control;\n var point;\n for (var _i = 0, _a = accumulation.visibleSeries[0].points; _i < _a.length; _i++) {\n var accPoint = _a[_i];\n if (typeof accPoint.x === 'object') {\n if (Date.parse(accPoint.x) === Date.parse(this.annotation.x) &&\n accPoint.y === this.annotation.y) {\n point = accPoint;\n break;\n }\n }\n else {\n if (accPoint.x === this.annotation.x && accPoint.y === this.annotation.y) {\n point = accPoint;\n break;\n }\n }\n }\n if (point && point.visible) {\n location.x = point.symbolLocation.x;\n location.y = point.symbolLocation.y;\n return true;\n }\n else {\n return false;\n }\n };\n /**\n * Method to set the element style for accumulation / chart annotation.\n * @private\n * @param location\n * @param element\n * @param parentElement\n */\n AnnotationBase.prototype.setElementStyle = function (location, element, parentElement) {\n var elementRect = measureElementRect(element);\n var argsData = {\n cancel: false, name: annotationRender, content: element,\n location: location\n };\n this.control.trigger(annotationRender, argsData);\n if (!argsData.cancel) {\n argsData.content.style.left = this.setAlignmentValue(this.annotation.horizontalAlignment, elementRect.width, argsData.location.x) + 'px';\n argsData.content.style.top = this.setAlignmentValue(this.annotation.verticalAlignment, elementRect.height, argsData.location.y) + 'px';\n argsData.content.setAttribute('aria-label', this.annotation.description || 'Annotation');\n appendElement(argsData.content, parentElement);\n }\n };\n /**\n * Method to calculate the alignment value for annotation.\n * @private\n * @param alignment\n * @param size\n * @param value\n */\n AnnotationBase.prototype.setAlignmentValue = function (alignment, size, value) {\n switch (alignment) {\n case 'Top':\n case 'Near':\n value -= size;\n break;\n case 'Bottom':\n case 'Far':\n value += 0;\n break;\n case 'Middle':\n case 'Center':\n value -= (size / 2);\n break;\n }\n return value;\n };\n return AnnotationBase;\n}());\nexport { AnnotationBase };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { AnnotationBase } from '../../common/annotation/annotation';\nimport { appendElement } from '../../common/utils/helper';\nimport { createElement } from '@syncfusion/ej2-base';\n/**\n * `ChartAnnotation` module handles the annotation for chart.\n */\nvar ChartAnnotation = /** @class */ (function (_super) {\n __extends(ChartAnnotation, _super);\n /**\n * Constructor for chart annotation.\n * @private.\n */\n function ChartAnnotation(control, annotations) {\n var _this = _super.call(this, control) || this;\n _this.chart = control;\n _this.annotations = annotations;\n return _this;\n }\n /**\n * Method to render the annotation for chart\n * @param element\n * @private\n */\n ChartAnnotation.prototype.renderAnnotations = function (element) {\n var _this = this;\n this.annotations = this.chart.annotations;\n this.parentElement = createElement('div', {\n id: this.chart.element.id + '_Annotation_Collections'\n });\n this.annotations.map(function (annotation, index) {\n _this.processAnnotation(annotation, index, _this.parentElement);\n });\n appendElement(this.parentElement, element);\n };\n /**\n * To destroy the annotation.\n * @return {void}\n * @private\n */\n ChartAnnotation.prototype.destroy = function (control) {\n // Destroy method performed here\n };\n /**\n * Get module name.\n */\n ChartAnnotation.prototype.getModuleName = function () {\n // Returns te module name\n return 'Annotation';\n };\n return ChartAnnotation;\n}(AnnotationBase));\nexport { ChartAnnotation };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { withInRange, PathOption, sum } from '../../common/utils/helper';\nimport { Size, getSaturationColor, getPoint } from '../../common/utils/helper';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { ColumnBase } from './column-base';\nimport { getMedian } from '../../common/utils/helper';\n/**\n * `BoxAndWhiskerSeries` module is used to render the box and whisker series.\n */\nvar BoxAndWhiskerSeries = /** @class */ (function (_super) {\n __extends(BoxAndWhiskerSeries, _super);\n function BoxAndWhiskerSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render BoxAndWhisker series.\n * @return {void}\n * @private\n */\n BoxAndWhiskerSeries.prototype.render = function (series, xAxis, yAxis, isInverted) {\n var sideBySideInfo = this.getSideBySideInfo(series);\n var argsData;\n var centerRegion;\n var borderWidth = series.border.width || 1;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n point.symbolLocations = [];\n point.regions = [];\n var centerRegion_1 = void 0;\n if (point.visible && withInRange(series.points[point.index - 1], point, series.points[point.index + 1], series)) {\n this.findBoxPlotValues(point.y, point, series.boxPlotMode);\n //region to cover the top and bottom ticks\n this.updateTipRegion(series, point, sideBySideInfo);\n //get middle rect\n centerRegion_1 = this.getRectangle((point.xValue + sideBySideInfo.start), point.upperQuartile, (point.xValue + sideBySideInfo.end), point.lowerQuartile, series);\n point.regions.push(centerRegion_1);\n argsData = this.triggerEvent(series, point, series.interior, {\n color: (!isNullOrUndefined(series.border.color) && series.border.color !== 'transparent') ? series.border.color :\n getSaturationColor(series.interior, -0.6),\n width: series.border.width ? series.border.width : 1\n });\n if (!argsData.cancel) {\n this.renderBoxAndWhisker(series, point, centerRegion_1, argsData, this.getPathString(point, series, getPoint(point.xValue, point.median, xAxis, yAxis, isInverted), getPoint(point.xValue + sideBySideInfo.median, point.average, xAxis, yAxis, isInverted)), sideBySideInfo.median);\n }\n }\n }\n if (series.marker.visible) {\n series.chart.markerRender.render(series);\n }\n };\n /**\n * update the tip region fo box plot\n * @param series\n * @param point\n * @param sideBySideInfo\n */\n BoxAndWhiskerSeries.prototype.updateTipRegion = function (series, point, sideBySideInfo) {\n var tipRegion = this.getRectangle((point.xValue + sideBySideInfo.median), point.maximum, (point.xValue + sideBySideInfo.median), point.minimum, series);\n this.updateTipSize(series, point, tipRegion, series.chart.requireInvertedAxis);\n };\n /**\n * Update tip size to tip regions\n * @param series\n * @param point\n * @param region\n * @param isInverted\n */\n BoxAndWhiskerSeries.prototype.updateTipSize = function (series, point, region, isInverted) {\n var borderWidth = series.border.width || 1;\n if (!isInverted) {\n region.x -= borderWidth / 2;\n region.width = region.width || borderWidth;\n }\n else {\n region.y -= borderWidth / 2;\n region.height = region.height || borderWidth;\n }\n point.regions.push(region);\n };\n /**\n * Calculation for path direction performed here\n * @param point\n * @param series\n * @param median\n * @param average\n */\n BoxAndWhiskerSeries.prototype.getPathString = function (point, series, median, average) {\n var topRect = point.regions[0];\n var midRect = point.regions[1];\n var direction = '';\n var width = series.chart.requireInvertedAxis ? topRect.height : topRect.width;\n var center = series.chart.requireInvertedAxis ? topRect.y + topRect.height / 2 :\n topRect.x + topRect.width / 2;\n var midWidth = midRect.x + midRect.width;\n var midHeight = midRect.y + midRect.height;\n var topWidth = topRect.x + topRect.width;\n var topHeight = topRect.y + topRect.height;\n if (!series.chart.requireInvertedAxis) {\n this.updateTipSize(series, point, { x: midRect.x, y: topRect.y, width: midWidth - midRect.x, height: 0 }, true);\n this.updateTipSize(series, point, { x: midRect.x, y: topHeight, width: midWidth - midRect.x, height: 0 }, true);\n direction += 'M ' + midRect.x + ' ' + topRect.y + ' ' + ' L ' + midWidth + ' ' + topRect.y;\n direction += ' M ' + center + ' ' + topRect.y + ' ' + ' L ' + center + ' ' + midRect.y;\n direction += ' M ' + midRect.x + ' ' + midRect.y + ' ' + ' L ' + midWidth + ' ' + midRect.y +\n ' L ' + midWidth + ' ' + midHeight + ' L ' + midRect.x + ' ' + midHeight + ' Z';\n direction += ' M ' + center + ' ' + midHeight + ' L ' + center + ' ' + topHeight;\n direction += ' M ' + midRect.x + ' ' + topHeight + ' L ' + midWidth + ' ' + topHeight;\n direction += ' M ' + midRect.x + ' ' + median.y + ' L ' + midWidth + ' ' + median.y;\n direction += series.showMean ?\n ' M ' + (average.x - 5) + ' ' + (average.y - 5) + ' L ' + (average.x + 5) + ' ' + (average.y + 5) +\n ' M ' + (average.x + 5) + ' ' + (average.y - 5) + ' L ' + (average.x - 5) + ' ' + (average.y + 5) : '';\n }\n else {\n this.updateTipSize(series, point, { x: topRect.x, y: midRect.y, width: 0, height: midHeight - midRect.y }, false);\n this.updateTipSize(series, point, { x: topWidth, y: midRect.y, width: 0, height: midHeight - midRect.y }, true);\n direction += 'M ' + topRect.x + ' ' + midRect.y + ' L ' + topRect.x + ' ' + midHeight;\n direction += 'M ' + topRect.x + ' ' + center + ' ' + ' L ' + midRect.x + ' ' + center;\n direction += ' M ' + midRect.x + ' ' + midRect.y + ' ' + ' L ' + midWidth + ' ' + midRect.y +\n ' L ' + midWidth + ' ' + midHeight + ' L ' + midRect.x + ' ' + midHeight + ' Z';\n direction += ' M ' + midWidth + ' ' + center + ' L ' + topWidth + ' ' + center;\n direction += ' M ' + topWidth + ' ' + midRect.y + ' L ' + topWidth + ' ' + midHeight;\n direction += ' M ' + median.x + ' ' + midRect.y + ' ' + ' L ' + median.x + ' ' + midHeight;\n direction += series.showMean ?\n 'M ' + (average.x + 5) + ' ' + (average.y - 5) + ' L ' + (average.x - 5) + ' ' + (average.y + 5) +\n 'M ' + (average.x - 5) + ' ' + (average.y - 5) + ' L ' + (average.x + 5) + ' ' + (average.y + 5) : '';\n }\n return direction;\n };\n /**\n * Rendering for box and whisker append here.\n * @param series\n * @param point\n * @param rect\n * @param argsData\n * @param direction\n */\n BoxAndWhiskerSeries.prototype.renderBoxAndWhisker = function (series, point, rect, argsData, direction, median) {\n var location;\n var size;\n var symbolId = series.chart.element.id + '_Series_' + series.index + '_Point_' + point.index;\n var element = series.chart.renderer.drawPath(new PathOption(symbolId + '_BoxPath', argsData.fill, argsData.border.width, argsData.border.color, series.opacity, series.dashArray, direction));\n element.setAttribute('aria-label', point.x.toString() + ':' + point.maximum.toString()\n + ':' + point.minimum.toString() + ':' + point.lowerQuartile.toString() + ':' + point.upperQuartile.toString());\n var parentElement = series.chart.renderer.createGroup({\n 'id': symbolId\n });\n parentElement.appendChild(element);\n for (var i = 0; i < point.outliers.length; i++) {\n location = getPoint((point.xValue + median), point.outliers[i], series.xAxis, series.yAxis, series.chart.requireInvertedAxis);\n size = new Size(series.marker.width, series.marker.height);\n point.symbolLocations.push(location);\n this.updateTipSize(series, point, {\n x: location.x - (size.width / 2), y: location.y - (size.height / 2),\n width: size.width, height: size.height\n }, true);\n }\n series.seriesElement.appendChild(parentElement);\n };\n /**\n * To find the box plot values\n * @param yValues\n * @param point\n * @param mode\n */\n BoxAndWhiskerSeries.prototype.findBoxPlotValues = function (yValues, point, mode) {\n var yCount = yValues.length;\n var quartile = {\n average: sum(yValues) / yCount,\n lowerQuartile: 0, upperQuartile: 0,\n maximum: 0, minimum: 0,\n median: 0, outliers: []\n };\n if (mode === 'Exclusive') {\n quartile.lowerQuartile = this.getExclusiveQuartileValue(yValues, yCount, 0.25);\n quartile.upperQuartile = this.getExclusiveQuartileValue(yValues, yCount, 0.75);\n quartile.median = this.getExclusiveQuartileValue(yValues, yCount, 0.5);\n }\n else if (mode === 'Inclusive') {\n quartile.lowerQuartile = this.getInclusiveQuartileValue(yValues, yCount, 0.25);\n quartile.upperQuartile = this.getInclusiveQuartileValue(yValues, yCount, 0.75);\n quartile.median = this.getInclusiveQuartileValue(yValues, yCount, 0.5);\n }\n else {\n quartile.median = getMedian(yValues);\n this.getQuartileValues(yValues, yCount, quartile);\n }\n this.getMinMaxOutlier(yValues, yCount, quartile);\n point.minimum = quartile.minimum;\n point.maximum = quartile.maximum;\n point.lowerQuartile = quartile.lowerQuartile;\n point.upperQuartile = quartile.upperQuartile;\n point.median = quartile.median;\n point.outliers = quartile.outliers;\n point.average = quartile.average;\n };\n /**\n * to find the exclusive quartile values\n * @param yValues\n * @param count\n * @param percentile\n */\n BoxAndWhiskerSeries.prototype.getExclusiveQuartileValue = function (yValues, count, percentile) {\n if (count === 0) {\n return 0;\n }\n else if (count === 1) {\n return yValues[0];\n }\n var value = 0;\n var rank = percentile * (count + 1);\n var integerRank = Math.floor(Math.abs(rank));\n var fractionRank = rank - integerRank;\n if (integerRank === 0) {\n value = yValues[0];\n }\n else if (integerRank > count - 1) {\n value = yValues[count - 1];\n }\n else {\n value = fractionRank * (yValues[integerRank] - yValues[integerRank - 1]) + yValues[integerRank - 1];\n }\n return value;\n };\n /**\n * to find the inclusive quartile values\n * @param yValues\n * @param count\n * @param percentile\n */\n BoxAndWhiskerSeries.prototype.getInclusiveQuartileValue = function (yValues, count, percentile) {\n if (count === 0) {\n return 0;\n }\n else if (count === 1) {\n return yValues[0];\n }\n var value = 0;\n var rank = percentile * (count - 1);\n var integerRank = Math.floor(Math.abs(rank));\n var fractionRank = rank - integerRank;\n value = fractionRank * (yValues[integerRank + 1] - yValues[integerRank]) + yValues[integerRank];\n return value;\n };\n /**\n * To find the quartile values\n * @param yValues\n * @param count\n * @param lowerQuartile\n * @param upperQuartile\n */\n BoxAndWhiskerSeries.prototype.getQuartileValues = function (yValues, count, quartile) {\n if (count === 1) {\n quartile.lowerQuartile = yValues[0];\n quartile.upperQuartile = yValues[0];\n return null;\n }\n var isEvenList = count % 2 === 0;\n var halfLength = count / 2;\n var lowerQuartileArray = yValues.slice(0, halfLength);\n var upperQuartileArray = yValues.slice(isEvenList ? halfLength : halfLength + 1, count);\n quartile.lowerQuartile = getMedian(lowerQuartileArray);\n quartile.upperQuartile = getMedian(upperQuartileArray);\n };\n /**\n * To find the min, max and outlier values\n * @param yValues\n * @param lowerQuartile\n * @param upperQuartile\n * @param minimum\n * @param maximum\n * @param outliers\n */\n BoxAndWhiskerSeries.prototype.getMinMaxOutlier = function (yValues, count, quartile) {\n var interquartile = quartile.upperQuartile - quartile.lowerQuartile;\n var rangeIQR = 1.5 * interquartile;\n for (var i = 0; i < count; i++) {\n if (yValues[i] < quartile.lowerQuartile - rangeIQR) {\n quartile.outliers.push(yValues[i]);\n }\n else {\n quartile.minimum = yValues[i];\n break;\n }\n }\n for (var i = count - 1; i >= 0; i--) {\n if (yValues[i] > quartile.upperQuartile + rangeIQR) {\n quartile.outliers.push(yValues[i]);\n }\n else {\n quartile.maximum = yValues[i];\n break;\n }\n }\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n BoxAndWhiskerSeries.prototype.doAnimation = function (series) {\n this.animate(series);\n };\n /**\n * Get module name.\n */\n BoxAndWhiskerSeries.prototype.getModuleName = function () {\n return 'BoxAndWhiskerSeries';\n /**\n * return the module name\n */\n };\n /**\n * To destroy the candle series.\n * @return {void}\n * @private\n */\n BoxAndWhiskerSeries.prototype.destroy = function (chart) {\n /**\n * Destroys the candle series.\n */\n };\n return BoxAndWhiskerSeries;\n}(ColumnBase));\nexport { BoxAndWhiskerSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { getPoint, withInRange, ChartLocation, PathOption } from '../../common/utils/helper';\nimport { MultiColoredSeries } from './multi-colored-base';\n/**\n * `MultiColoredAreaSeries` module used to render the area series with multi color.\n */\nvar MultiColoredAreaSeries = /** @class */ (function (_super) {\n __extends(MultiColoredAreaSeries, _super);\n function MultiColoredAreaSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render Area series.\n * @return {void}\n * @private\n */\n MultiColoredAreaSeries.prototype.render = function (series, xAxis, yAxis, isInverted) {\n var _this = this;\n var firstPoint;\n var startPoint = null;\n var direction = '';\n var origin = Math.max(series.yAxis.visibleRange.min, 0);\n var options = [];\n var startRegion;\n var previous;\n var color;\n var rendered;\n var segments = this.sortSegments(series, series.segments);\n series.points.map(function (point, i, seriesPoints) {\n point.symbolLocations = [];\n point.regions = [];\n rendered = false;\n if (point.visible && withInRange(seriesPoints[i - 1], point, seriesPoints[i + 1], series)) {\n direction += _this.getAreaPathDirection(point.xValue, origin, series, isInverted, getPoint, startPoint, 'M');\n startPoint = startPoint || new ChartLocation(point.xValue, origin);\n firstPoint = getPoint(point.xValue, point.yValue, xAxis, yAxis, isInverted, series);\n if (previous && _this.setPointColor(point, previous, series, series.segmentAxis === 'X', segments)) {\n rendered = true;\n startRegion = getPoint(startPoint.x, origin, xAxis, yAxis, isInverted, series);\n direction += ('L' + ' ' + (firstPoint.x) + ' ' + (firstPoint.y) + ' ');\n direction += ('L' + ' ' + (firstPoint.x) + ' ' + (startRegion.y) + ' ');\n _this.generatePathOption(options, series, previous, direction, '_Point_' + previous.index);\n direction = 'M' + ' ' + (firstPoint.x) + ' ' + (startRegion.y) + ' ' + 'L' + ' ' +\n (firstPoint.x) + ' ' + (firstPoint.y) + ' ';\n }\n else {\n direction += ('L' + ' ' + (firstPoint.x) + ' ' + (firstPoint.y) + ' ');\n _this.setPointColor(point, null, series, series.segmentAxis === 'X', segments);\n }\n if (seriesPoints[i + 1] && !seriesPoints[i + 1].visible && series.emptyPointSettings.mode !== 'Drop') {\n direction += _this.getAreaEmptyDirection({ 'x': point.xValue, 'y': origin }, startPoint, series, isInverted, getPoint);\n startPoint = null;\n }\n previous = point;\n _this.storePointLocation(point, series, isInverted, getPoint);\n }\n });\n if (!rendered) {\n direction = series.points.length > 1 ?\n (direction + this.getAreaPathDirection(previous.xValue, origin, series, isInverted, getPoint, null, 'L')) : '';\n this.generatePathOption(options, series, previous, direction, '');\n }\n this.applySegmentAxis(series, options, segments);\n this.renderMarker(series);\n };\n /**\n * To Store the path directions of the area\n */\n MultiColoredAreaSeries.prototype.generatePathOption = function (options, series, point, direction, id) {\n options.push(new PathOption(series.chart.element.id + '_Series_' + series.index + id, series.setPointColor(point, series.interior), series.border.width, series.border.color, series.opacity, series.dashArray, direction));\n };\n /**\n * To destroy the area series.\n * @return {void}\n * @private\n */\n MultiColoredAreaSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method calling here\n */\n };\n /**\n * Get module name\n */\n MultiColoredAreaSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'MultiColoredAreaSeries';\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n MultiColoredAreaSeries.prototype.doAnimation = function (series) {\n this.doLinearAnimation(series, series.animation);\n };\n return MultiColoredAreaSeries;\n}(MultiColoredSeries));\nexport { MultiColoredAreaSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { withInRange, getPoint, PathOption } from '../../common/utils/helper';\nimport { MultiColoredSeries } from './multi-colored-base';\n/**\n * `MultiColoredLineSeries` used to render the line series with multi color.\n */\nvar MultiColoredLineSeries = /** @class */ (function (_super) {\n __extends(MultiColoredLineSeries, _super);\n function MultiColoredLineSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render Line Series.\n * @return {void}.\n * @private\n */\n MultiColoredLineSeries.prototype.render = function (series, xAxis, yAxis, isInverted) {\n var previous = null;\n var startPoint = 'M';\n var visiblePoints = this.improveChartPerformance(series);\n var options = [];\n var direction = '';\n var segments = this.sortSegments(series, series.segments);\n for (var _i = 0, visiblePoints_1 = visiblePoints; _i < visiblePoints_1.length; _i++) {\n var point = visiblePoints_1[_i];\n point.regions = [];\n if (point.visible && withInRange(visiblePoints[point.index - 1], point, visiblePoints[point.index + 1], series)) {\n direction += this.getLineDirection(previous, point, series, isInverted, getPoint, startPoint);\n if (previous != null) {\n if (this.setPointColor(point, previous, series, series.segmentAxis === 'X', segments)) {\n options.push(new PathOption(series.chart.element.id + '_Series_' + series.index + '_Point_' + previous.index, 'none', series.width, series.setPointColor(previous, series.interior), series.opacity, series.dashArray, direction));\n startPoint = 'M';\n direction = '';\n }\n else {\n startPoint = 'L';\n }\n }\n else {\n this.setPointColor(point, null, series, series.segmentAxis === 'X', segments);\n }\n previous = point;\n this.storePointLocation(point, series, isInverted, getPoint);\n }\n else {\n previous = (series.emptyPointSettings.mode === 'Drop') ? previous : null;\n startPoint = (series.emptyPointSettings.mode === 'Drop') ? startPoint : 'M';\n point.symbolLocations = [];\n }\n }\n if (direction !== '') {\n options.push(new PathOption(series.chart.element.id + '_Series_' + series.index, 'none', series.width, series.setPointColor(visiblePoints[visiblePoints.length - 1], series.interior), series.opacity, series.dashArray, direction));\n }\n this.applySegmentAxis(series, options, segments);\n this.renderMarker(series);\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n MultiColoredLineSeries.prototype.doAnimation = function (series) {\n this.doLinearAnimation(series, series.animation);\n };\n /**\n * Get module name.\n */\n MultiColoredLineSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'MultiColoredLineSeries';\n };\n /**\n * To destroy the line series.\n * @return {void}\n * @private\n */\n MultiColoredLineSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return MultiColoredLineSeries;\n}(MultiColoredSeries));\nexport { MultiColoredLineSeries };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { textWrap, TextOption, PathOption } from '../../common/utils/helper';\nimport { valueToCoefficient, measureText, textTrim, textElement } from '../../common/utils/helper';\nimport { axisMultiLabelRender } from '../../common/model/constants';\n/**\n * `MultiLevelLabel` module is used to render the multi level label in chart.\n */\nvar MultiLevelLabel = /** @class */ (function () {\n /**\n * Constructor for the logerithmic module.\n * @private\n */\n function MultiLevelLabel(chart) {\n /** @private */\n this.xAxisPrevHeight = [];\n /** @private */\n this.xAxisMultiLabelHeight = [];\n /** @private */\n this.yAxisPrevHeight = [];\n /** @private */\n this.yAxisMultiLabelHeight = [];\n this.chart = chart;\n }\n /**\n * Finds multilevel label height\n * @return {void}\n */\n MultiLevelLabel.prototype.getMultilevelLabelsHeight = function (axis) {\n var value = 0;\n var multiLevelLabelsHeight = [];\n var prevHeight = [];\n var isVertical = axis.orientation === 'Vertical';\n var axisValue = isVertical ? axis.rect.height : axis.rect.width;\n var labelSize;\n var height;\n var padding = 10;\n var gap;\n axis.multiLevelLabels.map(function (multiLevel, index) {\n multiLevel.categories.map(function (categoryLabel) {\n if (categoryLabel.text !== '' && categoryLabel.start !== null && categoryLabel.end !== null) {\n labelSize = measureText(categoryLabel.text, multiLevel.textStyle);\n height = isVertical ? labelSize.width : labelSize.height;\n height += 2 * multiLevel.border.width +\n (multiLevel.border.type === 'CurlyBrace' ? padding : 0);\n gap = (categoryLabel.maximumTextWidth !== null) ? categoryLabel.maximumTextWidth :\n (valueToCoefficient(typeof categoryLabel.end === 'string' ? Number(new Date(categoryLabel.end)) :\n categoryLabel.end, axis) * axisValue) -\n (valueToCoefficient(typeof categoryLabel.start === 'string' ? Number(new Date(categoryLabel.start)) :\n categoryLabel.start, axis) * axisValue);\n if ((labelSize.width > gap - padding) && gap > 0 && (multiLevel.overflow === 'Wrap') && !isVertical) {\n height = (height * (textWrap(categoryLabel.text, gap - padding, multiLevel.textStyle).length));\n }\n multiLevelLabelsHeight[index] = !multiLevelLabelsHeight[index] ? height :\n ((multiLevelLabelsHeight[index] < height) ? height : multiLevelLabelsHeight[index]);\n }\n });\n prevHeight[index] = value;\n value += multiLevelLabelsHeight[index] ? (multiLevelLabelsHeight[index] + padding) : 0;\n });\n axis.multiLevelLabelHeight = value + ((axis.title !== '' || (this.chart.legendModule && this.chart.legendSettings.visible))\n ? padding / 2 : 0);\n if (isVertical) {\n this.yAxisMultiLabelHeight = multiLevelLabelsHeight;\n this.yAxisPrevHeight = prevHeight;\n }\n else {\n this.xAxisMultiLabelHeight = multiLevelLabelsHeight;\n this.xAxisPrevHeight = prevHeight;\n }\n };\n /**\n * render x axis multi level labels\n * @private\n * @return {void}\n */\n MultiLevelLabel.prototype.renderXAxisMultiLevelLabels = function (axis, index, parent, axisRect) {\n var _this = this;\n var x;\n var y;\n var padding = 10;\n var startX;\n var startY = (axis.labelPosition === axis.tickPosition ? axis.majorTickLines.height : 0) +\n (axis.maxLabelSize.height) + padding;\n var endX;\n var endY;\n var pathRect = '';\n var start;\n var end;\n var labelSize;\n var clipY;\n var isOutside = axis.labelPosition === 'Outside';\n var gap;\n var anchor;\n var isInversed = axis.isInversed;\n var argsData;\n var labelElement;\n var opposedPosition = axis.opposedPosition;\n var scrollBarHeight = isOutside && isNullOrUndefined(axis.crossesAt) ? axis.scrollBarHeight : 0;\n scrollBarHeight = scrollBarHeight * (opposedPosition ? -1 : 1);\n clipY = ((opposedPosition && !isOutside) || (!opposedPosition && isOutside)) ?\n (axisRect.y + startY - axis.majorTickLines.width) : (axisRect.y - startY - axis.multiLevelLabelHeight);\n this.createClipRect(axisRect.x - axis.majorTickLines.width, clipY + scrollBarHeight, axis.multiLevelLabelHeight + padding, axisRect.width + 2 * axis.majorTickLines.width, this.chart.element.id + '_XAxis_Clippath_' + index, this.chart.element.id + 'XAxisMultiLevelLabel' + index);\n axis.multiLevelLabels.map(function (multiLevel, level) {\n pathRect = '';\n multiLevel.categories.map(function (categoryLabel, i) {\n labelElement = _this.chart.renderer.createGroup({ id: _this.chart.element.id + index + '_MultiLevelLabel' + level });\n start = typeof categoryLabel.start === 'string' ? Number(new Date(categoryLabel.start)) : categoryLabel.start;\n end = typeof categoryLabel.end === 'string' ? Number(new Date(categoryLabel.end)) : categoryLabel.end;\n if (((start >= axis.visibleRange.min && start <= axis.visibleRange.max)\n || (end >= axis.visibleRange.min && end <= axis.visibleRange.max))) {\n argsData = _this.triggerMultiLabelRender(axis, categoryLabel.text, axis.multiLevelLabels[level].textStyle, axis.multiLevelLabels[level].alignment);\n if (!argsData.cancel) {\n startX = valueToCoefficient(start, axis) * axisRect.width;\n endX = valueToCoefficient(end, axis) * axisRect.width;\n endX = isInversed ? [startX, startX = endX][0] : endX;\n labelSize = measureText(argsData.text, argsData.textStyle);\n gap = ((categoryLabel.maximumTextWidth === null) ? endX - startX : categoryLabel.maximumTextWidth) - padding;\n x = startX + axisRect.x + padding;\n y = (((opposedPosition && !isOutside) || (!opposedPosition && isOutside)) ? (startY + axisRect.y +\n labelSize.height / 2 + padding + _this.xAxisPrevHeight[level]) : (axisRect.y - startY + labelSize.height / 2 -\n _this.xAxisMultiLabelHeight[level] - _this.xAxisPrevHeight[level])) + scrollBarHeight;\n if (argsData.alignment === 'Center') {\n x += (endX - startX - padding) / 2;\n anchor = 'middle';\n }\n else if (argsData.alignment === 'Far') {\n x = x + (endX - startX - padding) - multiLevel.border.width / 2;\n anchor = 'end';\n }\n else {\n anchor = 'start';\n x += multiLevel.border.width / 2;\n }\n y = multiLevel.border.type === 'CurlyBrace' ?\n (((!opposedPosition && isOutside) || (opposedPosition && !isOutside)) ? y + padding : y - padding / 2) : y;\n var options = new TextOption(_this.chart.element.id + index + '_Axis_MultiLevelLabel_Level_' + level + '_Text_' + i, x, y, anchor, argsData.text);\n if (multiLevel.overflow !== 'None') {\n options.text = (multiLevel.overflow === 'Wrap') ?\n textWrap(argsData.text, gap, argsData.textStyle) : textTrim(gap, argsData.text, argsData.textStyle);\n options.x = options.x - padding / 2;\n }\n textElement(options, argsData.textStyle, argsData.textStyle.color || _this.chart.themeStyle.axisLabel, labelElement);\n if (multiLevel.border.width > 0 && multiLevel.border.type !== 'WithoutBorder') {\n pathRect = _this.renderXAxisLabelBorder(level, endX - startX - padding, axis, startX, startY, labelSize, options, axisRect, argsData.alignment, pathRect, isOutside, opposedPosition);\n }\n _this.multiElements.appendChild(labelElement);\n }\n }\n });\n if (pathRect !== '') {\n _this.createBorderElement(level, index, axis, pathRect);\n }\n });\n parent.appendChild(this.multiElements);\n };\n /**\n * render x axis multi level labels border\n * @private\n * @return {void}\n */\n MultiLevelLabel.prototype.renderXAxisLabelBorder = function (labelIndex, gap, axis, startX, startY, labelSize, textOptions, axisRect, alignment, path, isOutside, opposedPosition) {\n var padding = 10;\n var padding1;\n var padding2;\n var value;\n var value1;\n var groupLabel = axis.multiLevelLabels[labelIndex];\n var width = gap + padding;\n var height = this.xAxisMultiLabelHeight[labelIndex] + padding;\n var scrollBarHeight = axis.labelPosition === 'Outside' ? axis.scrollBarHeight : 0;\n var x = startX + axisRect.x;\n var y = ((!opposedPosition && isOutside) || (opposedPosition && !isOutside)) ? (startY + axisRect.y +\n this.xAxisPrevHeight[labelIndex] + scrollBarHeight) : (axisRect.y - startY -\n this.xAxisPrevHeight[labelIndex] - scrollBarHeight);\n switch (groupLabel.border.type) {\n case 'WithoutTopandBottomBorder':\n case 'Rectangle':\n case 'WithoutTopBorder':\n height = ((!opposedPosition && isOutside) || (opposedPosition && !isOutside)) ? height : -height;\n path += 'M' + x + ' ' + y + 'L' + x + ' ' + (y + height) +\n 'M' + (x + width) + ' ' + y + 'L' + (x + width) + ' ' + (y + height);\n path += (groupLabel.border.type !== 'WithoutTopandBottomBorder') ? ('L' + ' ' + (x) + ' ' + (y + height) + ' ') : ' ';\n path += groupLabel.border.type === 'Rectangle' ? ('M' + x + ' ' + y + 'L' + (x + width) + ' ' + y) : ' ';\n break;\n case 'Brace':\n if (alignment === 'Near') {\n value = textOptions.x;\n value1 = textOptions.x + labelSize.width + 2;\n }\n else if (alignment === 'Center') {\n value = textOptions.x - labelSize.width / 2 - 2;\n value1 = textOptions.x + labelSize.width / 2 + 2;\n }\n else {\n value = textOptions.x - labelSize.width - 2;\n value1 = textOptions.x;\n }\n height = ((!opposedPosition && isOutside) || (opposedPosition && !isOutside)) ? height : -height;\n path += 'M' + x + ' ' + y + 'L' + x + ' ' + (y + height / 2) +\n 'M' + x + ' ' + (y + height / 2) + 'L' + (value - 2) + ' ' + (y + height / 2) +\n 'M' + (value1) + ' ' + (y + height / 2) + 'L' + (x + width) + ' ' + (y + height / 2) +\n 'M' + (x + width) + ' ' + (y + height / 2) + 'L' + (x + width) + ' ' + (y);\n break;\n case 'CurlyBrace':\n if ((!opposedPosition && isOutside) || (opposedPosition && !isOutside)) {\n padding = 10;\n padding1 = 15;\n padding2 = 5;\n }\n else {\n padding = -10;\n padding1 = -15;\n padding2 = -5;\n }\n if (alignment === 'Center') {\n path += 'M' + x + ' ' + y + ' C ' + x + ' ' + y + ' ' + (x + 5) + ' ' + (y + padding) + ' ' + (x + 10) + ' ' +\n (y + padding) + 'L' + (x + width / 2 - 5) + ' ' + (y + padding) + 'L' + (x + width / 2) + ' ' + (y + padding1) +\n 'L' + (x + width / 2 + 5) + ' ' + (y + padding) + 'L' + (x + width - 10) + ' ' + (y + padding) + ' C ' +\n (x + width - 10) + ' ' + (y + padding) + ' ' + (x + width) + ' ' + (y + padding2) + ' ' + (x + width) + ' ' + (y);\n }\n else if (alignment === 'Near') {\n path += 'M' + x + ' ' + y + ' C ' + x + ' ' + y + ' ' + (x + 5) + ' ' + (y + padding) + ' ' + (x + 10) + ' ' +\n (y + padding) + 'L' + (x + 15) + ' ' + (y + padding1) + 'L' + (x + 20) + ' ' + (y + padding) + 'L' +\n (x + width - 10) + ' ' + (y + padding) + ' C ' + (x + width - 10) + ' ' + (y + padding) + ' ' + (x + width) + ' '\n + (y + padding2) + ' ' + (x + width) + ' ' + (y);\n }\n else {\n path += 'M' + x + ' ' + y + ' C ' + x + ' ' + y + ' ' + (x + 5) + ' ' + (y + padding) + ' ' + (x + 10) + ' ' +\n (y + padding) + 'L' + (x + width - 20) + ' ' + (y + padding) + 'L' + (x + width - 15) + ' ' + (y + padding1) +\n 'L' + (x + width - 10) + ' ' + (y + padding) + 'L' + (x + width - 10) + ' ' + (y + padding) + ' C '\n + (x + width - 10) + ' ' + (y + padding) + ' ' + (x + width) + ' ' + (y + padding2) + ' ' + (x + width) + ' ' + (y);\n }\n break;\n }\n return path;\n };\n /**\n * render y axis multi level labels\n * @private\n * @return {void}\n */\n MultiLevelLabel.prototype.renderYAxisMultiLevelLabels = function (axis, index, parent, rect) {\n var _this = this;\n var labelSize;\n var clipX;\n var isOutside = axis.labelPosition === 'Outside';\n var x;\n var y;\n var padding = 10;\n var startX = (axis.tickPosition === axis.labelPosition ? axis.majorTickLines.height : 0) +\n (axis.maxLabelSize.width) + padding;\n var startY;\n var path = '';\n var labelElement;\n var endY;\n var argsData;\n var isInversed = axis.isInversed;\n var start;\n var end;\n var gap;\n var anchor = 'middle';\n var opposedPosition = axis.opposedPosition;\n var scrollBarHeight = isOutside && isNullOrUndefined(axis.crossesAt) ? axis.scrollBarHeight : 0;\n scrollBarHeight = scrollBarHeight * (opposedPosition ? 1 : -1);\n clipX = ((opposedPosition && !isOutside) || (!opposedPosition && isOutside)) ?\n (rect.x - axis.multiLevelLabelHeight - startX - padding) : (rect.x + startX);\n this.createClipRect(clipX + scrollBarHeight, rect.y - axis.majorTickLines.width, rect.height + 2 * axis.majorTickLines.width, axis.multiLevelLabelHeight + padding, this.chart.element.id + '_YAxis_Clippath_' + index, this.chart.element.id\n + 'YAxisMultiLevelLabel' + index);\n axis.multiLevelLabels.map(function (multiLevel, level) {\n path = '';\n multiLevel.categories.map(function (categoryLabel, i) {\n labelElement = _this.chart.renderer.createGroup({ id: _this.chart.element.id + index + '_MultiLevelLabel' + level });\n end = typeof categoryLabel.end === 'string' ? Number(new Date(categoryLabel.end)) : categoryLabel.end;\n start = typeof categoryLabel.start === 'string' ? Number(new Date(categoryLabel.start)) : categoryLabel.start;\n if (((start >= axis.visibleRange.min && start <= axis.visibleRange.max)\n || (end >= axis.visibleRange.min && end <= axis.visibleRange.max))) {\n startY = valueToCoefficient((start), axis) * (rect.height);\n endY = valueToCoefficient((end), axis) * (rect.height);\n endY = isInversed ? [startY, startY = endY][0] : endY;\n argsData = _this.triggerMultiLabelRender(axis, categoryLabel.text, multiLevel.textStyle, multiLevel.alignment);\n if (!argsData.cancel) {\n labelSize = measureText(argsData.text, argsData.textStyle);\n gap = endY - startY;\n x = rect.x - startX - _this.yAxisPrevHeight[level] -\n (_this.yAxisMultiLabelHeight[level] / 2) - padding / 2;\n y = rect.height + rect.y - startY - (gap / 2);\n if (opposedPosition) {\n x = isOutside ? rect.x + startX + padding / 2 + (_this.yAxisMultiLabelHeight[level] / 2) +\n _this.yAxisPrevHeight[level] + scrollBarHeight : rect.x - startX - (_this.yAxisMultiLabelHeight[level] / 2) -\n _this.yAxisPrevHeight[level] - padding / 2;\n }\n else {\n x = isOutside ? x + scrollBarHeight : rect.x + startX + padding / 2 + (_this.yAxisMultiLabelHeight[level] / 2) +\n _this.yAxisPrevHeight[level];\n }\n if (argsData.alignment === 'Center') {\n y += labelSize.height / 4;\n }\n else if (argsData.alignment === 'Far') {\n y += gap / 2 - labelSize.height / 2;\n }\n else {\n y = y - gap / 2 + labelSize.height;\n }\n x = multiLevel.border.type === 'CurlyBrace' ? (((!opposedPosition && isOutside) ||\n (opposedPosition && !isOutside)) ? x - padding : x + padding) : x;\n var options = new TextOption(_this.chart.element.id + index + '_Axis_MultiLevelLabel_Level_' + level + '_Text_' + i, x, y, anchor, argsData.text);\n options.text = (multiLevel.overflow === 'Trim') ?\n textTrim((categoryLabel.maximumTextWidth === null ? _this.yAxisMultiLabelHeight[level] :\n categoryLabel.maximumTextWidth), argsData.text, argsData.textStyle) : options.text;\n textElement(options, argsData.textStyle, argsData.textStyle.color || _this.chart.themeStyle.axisLabel, labelElement);\n if (multiLevel.border.width > 0 && multiLevel.border.type !== 'WithoutBorder') {\n path = _this.renderYAxisLabelBorder(level, gap, axis, endY, startX, startY, labelSize, options, rect, argsData.alignment, path, isOutside, opposedPosition);\n }\n _this.multiElements.appendChild(labelElement);\n }\n }\n });\n if (path !== '') {\n _this.createBorderElement(level, index, axis, path);\n }\n });\n parent.appendChild(this.multiElements);\n };\n /**\n * render y axis multi level labels border\n * @private\n * @return {void}\n */\n MultiLevelLabel.prototype.renderYAxisLabelBorder = function (labelIndex, gap, axis, endY, startX, startY, labelSize, textOptions, rect, alignment, path, isOutside, opposedPosition) {\n var height = endY - startY;\n var padding = 10;\n var padding1;\n var padding2;\n var groupLabel = axis.multiLevelLabels[labelIndex];\n var y = rect.y + rect.height - endY;\n var scrollBarHeight = isOutside && isNullOrUndefined(axis.crossesAt) ? axis.scrollBarHeight : 0;\n scrollBarHeight = scrollBarHeight * (opposedPosition ? 1 : -1);\n var width = this.yAxisMultiLabelHeight[labelIndex] + padding;\n var x = (((!opposedPosition && isOutside) || (opposedPosition && !isOutside)) ? rect.x - startX -\n this.yAxisPrevHeight[labelIndex] : rect.x + startX + this.yAxisPrevHeight[labelIndex]) + scrollBarHeight;\n switch (groupLabel.border.type) {\n case 'WithoutTopandBottomBorder':\n case 'Rectangle':\n case 'WithoutTopBorder':\n width = ((!opposedPosition && isOutside) || (opposedPosition && !isOutside)) ? -width : width;\n path += 'M' + x + ' ' + y + 'L' + (x + width) + ' ' + y +\n 'M' + x + ' ' + (y + height) + 'L' + (x + width) + ' ' + (y + height);\n path += (groupLabel.border.type !== 'WithoutTopandBottomBorder') ? ('L' + ' ' + (x + width) + ' ' + y + ' ') : ' ';\n path += (groupLabel.border.type === 'Rectangle') ? ('M' + (x) + ' ' + (y + height) + 'L' + ' ' + (x) + ' ' + y + ' ') : ' ';\n break;\n case 'Brace':\n width = ((!opposedPosition && isOutside) || (opposedPosition && !isOutside)) ? width : -width;\n path += 'M ' + (x) + ' ' + y + ' L ' + (x - width / 2) + ' ' + y + ' L ' + (x - width / 2) + ' ' +\n (textOptions.y - labelSize.height / 2 - 4) + ' M ' + (x - width / 2) + ' ' +\n (textOptions.y + labelSize.height / 4 + 2) +\n ' L ' + (x - width / 2) + ' ' + (y + height) + ' L ' + (x) + ' ' + (y + height);\n break;\n case 'CurlyBrace':\n if ((!opposedPosition && isOutside) || (opposedPosition && !isOutside)) {\n padding = -10;\n padding1 = -15;\n padding2 = -5;\n }\n else {\n padding = 10;\n padding1 = 15;\n padding2 = 5;\n }\n if (alignment === 'Center') {\n path += 'M ' + x + ' ' + y + ' C ' + x + ' ' + y + ' ' + (x + padding) + ' ' + y + ' ' + (x + padding) + ' ' + (y + 10)\n + ' L ' + (x + padding) + ' ' + (y + (height - 10) / 2) + ' L ' + (x + padding1) + ' ' + (y + (height - 10) / 2 + 5)\n + ' L ' + (x + padding) + ' ' + (y + (height - 10) / 2 + 10) + ' L ' + (x + padding) + ' ' + (y + (height - 10)) +\n ' C ' + (x + padding) + ' ' + (y + (height - 10)) + ' ' + (x + padding2) + ' ' + (y + height) + ' '\n + x + ' ' + (y + height);\n }\n else if (alignment === 'Far') {\n path += 'M ' + x + ' ' + y + ' C ' + x + ' ' + y + ' ' + (x + padding) + ' ' + y + ' ' + (x + padding) + ' ' + (y + 10)\n + ' L ' + (x + padding) + ' ' + (y + height - 20) + ' ' + ' L ' + (x + padding1) + ' ' + (y + (height - 15)) +\n ' L ' + (x + padding) + ' ' + (y + (height - 10)) + ' L ' + (x + padding) + ' ' + (y + (height - 10)) +\n ' C' + (x + padding) + ' ' + (y + (height - 10)) + ' ' + (x + padding) + ' ' + (y + height) + ' ' + x + ' '\n + (y + height);\n }\n else {\n path += 'M ' + x + ' ' + y + ' C ' + x + ' ' + y + ' ' + (x + padding) + ' ' + y + ' ' + (x + padding) + ' ' + (y + 10)\n + ' L ' + (x + padding1) + ' ' + (y + 15) +\n ' L ' + (x + padding) + ' ' + (y + 20) + ' L ' + (x + padding) + ' ' + (y + (height - 10)) +\n ' C' + (x + padding) + ' ' + (y + (height - 10)) + ' ' + (x + padding2) + ' ' + (y + height) + ' ' + x +\n ' ' + (y + height);\n }\n break;\n }\n return path;\n };\n /**\n * create cliprect\n * @return {void}\n * @private\n */\n MultiLevelLabel.prototype.createClipRect = function (x, y, height, width, clipId, axisId) {\n this.multiElements = this.chart.renderer.createGroup({\n 'id': axisId,\n 'clip-path': 'url(#' + clipId + ')'\n });\n this.multiElements.appendChild(this.chart.renderer.drawClipPath({\n 'id': clipId,\n 'x': x,\n 'y': y,\n 'width': width,\n 'height': height,\n 'fill': 'white',\n 'stroke-width': 1, 'stroke': 'Gray'\n }));\n };\n /**\n * create borer element\n * @return {void}\n * @private\n */\n MultiLevelLabel.prototype.createBorderElement = function (borderIndex, axisIndex, axis, path) {\n var borderElement = this.chart.renderer.drawPath(new PathOption(this.chart.element.id + axisIndex + '_Axis_MultiLevelLabel_Rect_' + borderIndex, 'Transparent', axis.multiLevelLabels[borderIndex].border.width, axis.multiLevelLabels[borderIndex].border.color || this.chart.themeStyle.axisLine, 1, '', path));\n borderElement.setAttribute('style', 'pointer-events: none');\n this.multiElements.appendChild(borderElement);\n };\n /**\n * Triggers the event.\n * @return {void}\n * @private\n */\n MultiLevelLabel.prototype.triggerMultiLabelRender = function (axis, text, textStyle, textAlignment) {\n var argsData;\n argsData = {\n cancel: false, name: axisMultiLabelRender, axis: axis,\n text: text, textStyle: textStyle, alignment: textAlignment\n };\n this.chart.trigger(axisMultiLabelRender, argsData);\n return argsData;\n };\n /**\n * To get the module name for `MultiLevelLabel`.\n * @private\n */\n MultiLevelLabel.prototype.getModuleName = function () {\n return 'MultiLevelLabel';\n };\n /**\n * To destroy the `MultiLevelLabel` module.\n * @private\n */\n MultiLevelLabel.prototype.destroy = function () {\n // destroy peform here\n };\n return MultiLevelLabel;\n}());\nexport { MultiLevelLabel };\n","import { Rect, PathOption, RectOption, CircleOption } from '../utils/helper';\n/**\n * Create scrollbar svg.\n * @return {void}\n */\nexport function createScrollSvg(scrollbar, renderer) {\n var rect = scrollbar.axis.rect;\n var isHorizontalAxis = scrollbar.axis.orientation === 'Horizontal';\n scrollbar.svgObject = renderer.createSvg({\n id: 'scrollBar_svg' + scrollbar.axis.name,\n width: scrollbar.isVertical ? scrollbar.height : scrollbar.width,\n height: scrollbar.isVertical ? scrollbar.width : scrollbar.height,\n style: 'position: absolute;top: ' + ((scrollbar.axis.opposedPosition && isHorizontalAxis ? -16 : 0) + rect.y) + 'px;left: ' +\n (((scrollbar.axis.opposedPosition && !isHorizontalAxis ? 16 : 0) + rect.x) - (scrollbar.isVertical ? scrollbar.height : 0))\n + 'px;cursor:auto;'\n });\n scrollbar.elements.push(scrollbar.svgObject);\n}\n/**\n * Scrollbar elements renderer\n */\nvar ScrollElements = /** @class */ (function () {\n /**\n * Constructor for scroll elements\n * @param scrollObj\n */\n function ScrollElements() {\n // Constructor Called here\n }\n /**\n * Render scrollbar elements.\n * @return {void}\n * @private\n */\n ScrollElements.prototype.renderElements = function (scroll, renderer) {\n var scrollGroup = renderer.createGroup({\n id: 'scrollBar_' + scroll.axis.name,\n transform: 'translate(' + (scroll.isVertical ? scroll.height : '0') +\n ',0) rotate(' + (scroll.isVertical ? '90' : '0') + ')'\n });\n var backRectGroup = renderer.createGroup({\n id: 'scrollBar_backRect_' + scroll.axis.name\n });\n var thumbGroup = renderer.createGroup({\n id: 'scrollBar_thumb_' + scroll.axis.name,\n transform: 'translate(0,0)'\n });\n this.backRect(scroll, renderer, backRectGroup);\n this.thumb(scroll, renderer, thumbGroup);\n this.renderCircle(scroll, renderer, thumbGroup);\n this.arrows(scroll, renderer, thumbGroup);\n this.thumbGrip(scroll, renderer, thumbGroup);\n scrollGroup.appendChild(backRectGroup);\n scrollGroup.appendChild(thumbGroup);\n return scrollGroup;\n };\n /**\n * Method to render back rectangle of scrollbar\n * @param scroll\n */\n ScrollElements.prototype.backRect = function (scroll, renderer, parent) {\n var style = scroll.scrollbarThemeStyle;\n var backRectEle = renderer.drawRectangle(new RectOption('scrollBarBackRect_' + scroll.axis.name, style.backRect, { width: 1, color: style.backRect }, 1, new Rect(0, 0, scroll.width, scroll.height), 0, 0));\n parent.appendChild(backRectEle);\n };\n /**\n * Method to render arrows\n * @param scroll\n */\n ScrollElements.prototype.arrows = function (scroll, renderer, parent) {\n var style = scroll.scrollbarThemeStyle;\n var option = new PathOption('scrollBar_leftArrow_' + scroll.axis.name, style.arrow, 1, style.arrow, 1, '', '');\n this.leftArrowEle = renderer.drawPath(option);\n option.id = 'scrollBar_rightArrow_' + scroll.axis.name;\n this.rightArrowEle = renderer.drawPath(option);\n this.setArrowDirection(this.thumbRectX, this.thumbRectWidth, scroll.height);\n parent.appendChild(this.leftArrowEle);\n parent.appendChild(this.rightArrowEle);\n };\n /**\n * Methods to set the arrow width\n * @param thumbRectX\n * @param thumbRectWidth\n * @param height\n */\n ScrollElements.prototype.setArrowDirection = function (thumbRectX, thumbRectWidth, height) {\n var circleRadius = 8;\n var leftDirection = 'M ' + ((thumbRectX - circleRadius / 2) + 1) + ' ' + (height / 2) + ' ' + 'L ' +\n (thumbRectX - circleRadius / 2 + 6) + ' ' + 11 + ' ' + 'L ' + (thumbRectX - circleRadius / 2 + 6) + ' ' + 5 + ' Z';\n var rightDirection = 'M ' + ((thumbRectX + thumbRectWidth + circleRadius / 2) - 0.5) + ' ' + (height / 2)\n + ' ' + 'L ' + (thumbRectX + thumbRectWidth + circleRadius / 2 - 6) + ' ' + 11.5 + ' ' + 'L ' + (thumbRectX +\n thumbRectWidth + circleRadius / 2 - 6) + ' ' + 4.5 + ' Z';\n this.leftArrowEle.setAttribute('d', leftDirection);\n this.rightArrowEle.setAttribute('d', rightDirection);\n };\n /**\n * Method to render thumb\n * @param scroll\n * @param renderer\n * @param parent\n */\n ScrollElements.prototype.thumb = function (scroll, renderer, parent) {\n scroll.startX = this.thumbRectX;\n var style = scroll.scrollbarThemeStyle;\n this.slider = renderer.drawRectangle(new RectOption('scrollBarThumb_' + scroll.axis.name, style.thumb, { width: 1, color: '' }, 1, new Rect(this.thumbRectX, 0, this.thumbRectWidth, scroll.height)));\n parent.appendChild(this.slider);\n };\n /**\n * Method to render circles\n * @param scroll\n * @param renderer\n * @param parent\n */\n ScrollElements.prototype.renderCircle = function (scroll, renderer, parent) {\n var style = scroll.scrollbarThemeStyle;\n var option = new CircleOption('scrollBar_leftCircle_' + scroll.axis.name, style.circle, { width: 1, color: style.circle }, 1, this.thumbRectX, scroll.height / 2, 8);\n var scrollShadowEle = '' +\n '' +\n '' +\n '' +\n '';\n var defElement = renderer.createDefs();\n defElement.innerHTML = scrollShadowEle;\n var shadowGroup = renderer.createGroup({\n id: scroll.axis.name + '_thumb_shadow'\n });\n shadowGroup.innerHTML = '';\n this.leftCircleEle = renderer.drawCircle(option);\n option.id = 'scrollBar_rightCircle_' + scroll.axis.name;\n option.cx = this.thumbRectX + this.thumbRectWidth;\n this.rightCircleEle = renderer.drawCircle(option);\n parent.appendChild(defElement);\n parent.appendChild(this.leftCircleEle);\n parent.appendChild(this.rightCircleEle);\n parent.appendChild(shadowGroup);\n };\n /**\n * Method to render grip elements\n * @param scroll\n * @param renderer\n * @param parent\n */\n ScrollElements.prototype.thumbGrip = function (scroll, renderer, parent) {\n var sidePadding = 0;\n var topPadding = 0;\n var gripWidth = 14;\n var gripCircleDiameter = 2;\n var padding = gripWidth / 2 - gripCircleDiameter;\n var style = scroll.scrollbarThemeStyle;\n var option = new CircleOption('scrollBar_gripCircle0' + '_' + scroll.axis.name, style.grip, { width: 1, color: style.grip }, 1, 0, 0, 1);\n this.gripCircle = renderer.createGroup({\n id: 'scrollBar_gripCircle_' + scroll.axis.name,\n transform: 'translate(' + ((this.thumbRectX + this.thumbRectWidth / 2) + ((scroll.isVertical ? 1 : -1) * padding)) +\n ',' + (scroll.isVertical ? '10' : '5') + ') rotate(' + (scroll.isVertical ? '180' : '0') + ')'\n });\n for (var i = 1; i <= 6; i++) {\n option.id = 'scrollBar_gripCircle' + i + '_' + scroll.axis.name;\n option.cx = sidePadding;\n option.cy = topPadding;\n this.gripCircle.appendChild(renderer.drawCircle(option));\n sidePadding = i === 3 ? 0 : (sidePadding + 5);\n topPadding = i >= 3 ? 5 : 0;\n }\n parent.appendChild(this.gripCircle);\n };\n return ScrollElements;\n}());\nexport { ScrollElements };\n","import { EventHandler, Browser, remove } from '@syncfusion/ej2-base';\nimport { Animation, createElement } from '@syncfusion/ej2-base';\nimport { ScrollElements, createScrollSvg } from './scrollbar-elements';\nimport { getElement, minMax } from '../utils/helper';\nimport { linear } from '../../chart/index';\nimport { getScrollbarThemeColor } from '../model/theme';\n/**\n * Scrollbar Base\n */\nvar ScrollBar = /** @class */ (function () {\n /**\n * Constructor for creating scrollbar\n * @param component\n * @param axis\n */\n function ScrollBar(component, axis) {\n this.component = component;\n this.elements = [];\n this.scrollElements = new ScrollElements();\n this.axis = axis;\n this.mouseMoveListener = this.scrollMouseMove.bind(this);\n this.mouseUpListener = this.scrollMouseUp.bind(this);\n this.animateDuration = 500;\n this.isPointer = Browser.isPointer;\n this.browserName = Browser.info.name;\n }\n /**\n * To Mouse x and y position\n * @param e\n */\n ScrollBar.prototype.getMouseXY = function (e) {\n var pageX;\n var pageY;\n var touchArg;\n if (e.type.indexOf('touch') > -1) {\n touchArg = e;\n pageX = touchArg.changedTouches[0].clientX;\n pageY = touchArg.changedTouches[0].clientY;\n }\n else {\n pageX = e.clientX;\n pageY = e.clientY;\n }\n var svgRect = getElement('scrollBar_svg' + this.axis.name).getBoundingClientRect();\n this.mouseX = pageX - Math.max(svgRect.left, 0);\n this.mouseY = pageY - Math.max(svgRect.top, 0);\n };\n /**\n * Method to bind events for scrollbar svg object\n * @param element\n */\n ScrollBar.prototype.wireEvents = function (element) {\n EventHandler.add(element, Browser.touchStartEvent, this.scrollMouseDown, this);\n EventHandler.add(element, Browser.touchMoveEvent, this.scrollMouseMove, this);\n EventHandler.add(element, Browser.touchEndEvent, this.scrollMouseUp, this);\n EventHandler.add(element, 'mousewheel', this.scrollMouseWheel, this);\n window.addEventListener('mousemove', this.mouseMoveListener, false);\n window.addEventListener('mouseup', this.mouseUpListener, false);\n };\n /**\n * Method to remove events for srcollbar svg object\n * @param element\n */\n ScrollBar.prototype.unWireEvents = function (element) {\n EventHandler.remove(element, Browser.touchStartEvent, this.scrollMouseDown);\n EventHandler.remove(element, Browser.touchMoveEvent, this.scrollMouseMove);\n EventHandler.remove(element, Browser.touchEndEvent, this.scrollMouseUp);\n EventHandler.remove(element, 'mousewheel', this.scrollMouseWheel);\n window.removeEventListener('mousemove', this.mouseMoveListener, false);\n window.removeEventListener('mouseup', this.mouseUpListener, false);\n };\n /**\n * Handles the mouse down on scrollbar\n * @param e\n */\n ScrollBar.prototype.scrollMouseDown = function (e) {\n var id = e.target.id;\n var elem = this.scrollElements;\n this.getMouseXY(e);\n this.isResizeLeft = this.isExist(id, '_leftCircle_') || this.isExist(id, '_leftArrow_');\n this.isResizeRight = this.isExist(id, '_rightCircle_') || this.isExist(id, '_rightArrow_');\n this.previousXY = this.isVertical ? this.mouseY : this.mouseX;\n this.previousWidth = elem.thumbRectWidth;\n this.previousRectX = elem.thumbRectX;\n if (this.isExist(id, 'scrollBarThumb_')) {\n this.isThumbDrag = true;\n this.svgObject.style.cursor = '-webkit-grabbing';\n }\n else if (this.isExist(id, 'scrollBarBackRect_')) {\n var currentX = this.moveLength(this.previousXY, this.previousRectX, 8);\n if (this.animateDuration) {\n currentX = this.isWithIn(currentX) ? currentX : elem.thumbRectX;\n this.performAnimation(elem.thumbRectX, currentX);\n }\n else {\n elem.thumbRectX = this.isWithIn(currentX) ? currentX : elem.thumbRectX;\n this.positionThumb(elem.thumbRectX, elem.thumbRectWidth);\n this.setZoomFactorPosition(elem.thumbRectX, elem.thumbRectWidth);\n }\n }\n };\n /**\n * To check the matched string\n * @param id\n * @param match\n */\n ScrollBar.prototype.isExist = function (id, match) {\n return id.indexOf(match) > -1;\n };\n /**\n * To check current poisition is within scrollbar region\n * @param currentX\n */\n ScrollBar.prototype.isWithIn = function (currentX) {\n var circleRadius = 8;\n return (currentX - circleRadius >= 0 &&\n currentX + this.scrollElements.thumbRectWidth + circleRadius <= this.width);\n };\n /**\n * Method to find move length of thumb\n * @param mouseXY\n * @param thumbX\n * @param circleRadius\n */\n ScrollBar.prototype.moveLength = function (mouseXY, thumbX, circleRadius) {\n var moveLength = (10 / 100) * (this.width - circleRadius * 2);\n if (mouseXY < thumbX) {\n moveLength = thumbX - (thumbX - moveLength > circleRadius ? moveLength : circleRadius);\n }\n else {\n moveLength = thumbX + (thumbX + this.scrollElements.thumbRectWidth + moveLength < this.width - circleRadius ?\n moveLength : circleRadius);\n }\n return moveLength;\n };\n /**\n * Method to calculate zoom factor and position\n * @param currentX\n * @param currentWidth\n */\n ScrollBar.prototype.setZoomFactorPosition = function (currentX, currentWidth) {\n var axis = this.axis;\n this.isScrollUI = true;\n var circleRadius = 8;\n var circleWidth = 1;\n var currentScrollWidth = currentX + currentWidth + circleRadius + circleWidth;\n var currentZPWidth = circleRadius + (circleWidth / 2);\n this.zoomPosition = (currentX - (currentX - currentZPWidth <= 0 ? currentZPWidth : 0)) / (this.isVertical\n ? axis.rect.height : this.width);\n this.zoomFactor = (currentWidth + (currentScrollWidth === this.width ? circleRadius + circleWidth : 0)) / (this.isVertical\n ? axis.rect.height : this.width);\n axis.zoomPosition = this.zoomPosition;\n axis.zoomFactor = this.zoomFactor;\n };\n /**\n * Handles the mouse move on scrollbar\n * @param e\n */\n ScrollBar.prototype.scrollMouseMove = function (e) {\n var target = e.target;\n var elem = this.scrollElements;\n this.getMouseXY(e);\n this.setCursor(target);\n this.setTheme(target);\n var style = this.scrollbarThemeStyle;\n var mouseXY = this.isVertical ? this.mouseY : this.mouseX;\n if (this.isThumbDrag) {\n this.svgObject.style.cursor = '-webkit-grabbing';\n var currentX = elem.thumbRectX + (mouseXY - this.previousXY);\n if (mouseXY >= 0 && mouseXY <= currentX + elem.thumbRectWidth) {\n elem.thumbRectX = this.isWithIn(currentX) ? currentX : elem.thumbRectX;\n this.positionThumb(elem.thumbRectX, elem.thumbRectWidth);\n this.previousXY = mouseXY;\n this.setZoomFactorPosition(currentX, elem.thumbRectWidth);\n }\n }\n else if (this.isResizeLeft || this.isResizeRight) {\n this.resizeThumb(e);\n }\n };\n /**\n * Handles the mouse wheel on scrollbar\n * @param e\n */\n ScrollBar.prototype.scrollMouseWheel = function (e) {\n var svgRect = getElement('scrollBar_svg' + this.axis.name).getBoundingClientRect();\n this.mouseX = e.clientX - Math.max(svgRect.left, 0);\n this.mouseY = e.clientY - Math.max(svgRect.top, 0);\n var origin = 0.5;\n var elem = this.scrollElements;\n var axis = this.axis;\n var direction = (this.browserName === 'mozilla' && !this.isPointer) ?\n -(e.detail) / 3 > 0 ? 1 : -1 : (e.wheelDelta / 120) > 0 ? 1 : -1;\n var cumulative;\n cumulative = Math.max(Math.max(1 / minMax(axis.zoomFactor, 0, 1), 1) + (0.25 * direction), 1);\n if (cumulative >= 1) {\n origin = axis.orientation === 'Horizontal' ? this.mouseX / axis.rect.width : 1 - (this.mouseY / axis.rect.height);\n origin = origin > 1 ? 1 : origin < 0 ? 0 : origin;\n this.zoomFactor = (cumulative === 1) ? 1 : minMax(1 / cumulative, 0, 1);\n this.zoomPosition = (cumulative === 1) ? 0 : axis.zoomPosition + ((axis.zoomFactor - this.zoomFactor) * origin);\n }\n elem.thumbRectX = this.isWithIn(this.zoomPosition * this.width) ? this.zoomPosition * this.width : elem.thumbRectX;\n this.isScrollUI = true;\n this.positionThumb(elem.thumbRectX, elem.thumbRectWidth);\n axis.zoomFactor = this.zoomFactor;\n axis.zoomPosition = this.zoomPosition;\n };\n /**\n * Handles the mouse up on scrollbar\n * @param e\n */\n ScrollBar.prototype.scrollMouseUp = function (e) {\n var circleRadius = 8;\n var circleWidth = 1;\n this.startX = this.scrollElements.thumbRectX;\n var currentScrollWidth = this.startX + this.scrollElements.thumbRectWidth + circleRadius + circleWidth;\n var currentZPWidth = circleRadius + (circleWidth / 2);\n if (this.isResizeLeft || this.isResizeRight) {\n this.axis.zoomFactor = (currentScrollWidth >= this.width - 1 && (this.startX - currentZPWidth) <= 0) ? 1 : this.zoomFactor;\n }\n this.isThumbDrag = false;\n this.isResizeLeft = false;\n this.isResizeRight = false;\n };\n /**\n * To render scroll bar\n * @private\n */\n ScrollBar.prototype.render = function () {\n this.getDefaults();\n this.getTheme();\n this.removeScrollSvg();\n createScrollSvg(this, this.component.renderer);\n this.wireEvents(this.svgObject);\n this.svgObject.appendChild(this.scrollElements.renderElements(this, this.component.renderer));\n return this.svgObject;\n };\n /**\n * Theming for scrollabr\n */\n ScrollBar.prototype.getTheme = function () {\n this.scrollbarThemeStyle = getScrollbarThemeColor(this.component.theme);\n };\n /**\n * Method to remove existing scrollbar\n */\n ScrollBar.prototype.removeScrollSvg = function () {\n if (document.getElementById('scrollBar_svg' + this.axis.name)) {\n remove(document.getElementById('scrollBar_svg' + this.axis.name));\n }\n };\n /**\n * Method to set cursor fpr scrollbar\n * @param target\n */\n ScrollBar.prototype.setCursor = function (target) {\n var id = target.id;\n this.svgObject.style.cursor = id.indexOf('scrollBarThumb_') > -1 || id.indexOf('_gripCircle') > -1 ?\n '-webkit-grab' : (id.indexOf('Circle_') > -1 || id.indexOf('Arrow_') > -1) ? this.isVertical ? 'ns-resize' :\n 'ew-resize' : 'auto';\n };\n /**\n * Method to set theme for sollbar\n * @param target\n */\n ScrollBar.prototype.setTheme = function (target) {\n var id = target.id;\n var isLeftHover = id.indexOf('_leftCircle_') > -1 || id.indexOf('_leftArrow_') > -1;\n var isRightHover = id.indexOf('_rightCircle_') > -1 || id.indexOf('_rightArrow_') > -1;\n var style = this.scrollbarThemeStyle;\n var leftArrowEle = this.scrollElements.leftArrowEle;\n var rightArrowEle = this.scrollElements.rightArrowEle;\n var leftCircleEle = this.scrollElements.leftCircleEle;\n var rightCircleEle = this.scrollElements.rightCircleEle;\n var isAxis = this.isCurrentAxis(target, leftArrowEle);\n leftCircleEle.style.fill = isLeftHover && isAxis ? style.circleHover : style.circle;\n rightCircleEle.style.fill = isRightHover && isAxis ? style.circleHover : style.circle;\n leftCircleEle.style.stroke = isLeftHover && isAxis ? style.circleHover : style.circle;\n rightCircleEle.style.stroke = isRightHover && isAxis ? style.circleHover : style.circle;\n if (this.component.theme === 'Highcontrast') {\n leftArrowEle.style.fill = isLeftHover && isAxis ? style.arrowHover : style.arrow;\n leftArrowEle.style.stroke = isLeftHover && isAxis ? style.arrowHover : style.arrow;\n rightArrowEle.style.fill = isRightHover && isAxis ? style.arrowHover : style.arrow;\n rightArrowEle.style.stroke = isRightHover && isAxis ? style.arrowHover : style.arrow;\n leftCircleEle.style.stroke = isLeftHover && isAxis ? style.circleHover : style.circle;\n rightCircleEle.style.stroke = isRightHover && isAxis ? style.circleHover : style.circle;\n }\n };\n /**\n * To check current axis\n * @param target\n * @param ele\n */\n ScrollBar.prototype.isCurrentAxis = function (target, ele) {\n return (target.id.split('_')[2] === ele.id.split('_')[2]);\n };\n /**\n * Method to resize thumb\n * @param e\n */\n ScrollBar.prototype.resizeThumb = function (e) {\n var currentWidth;\n var circleRadius = 8;\n var padding = 5;\n var gripWidth = 14;\n var elem = this.scrollElements;\n var minThumbWidth = circleRadius * 2 + padding * 2 + gripWidth;\n var thumbX = this.previousRectX;\n var mouseXY = this.isVertical ? this.mouseY : this.mouseX;\n var diff = Math.abs(this.previousXY - mouseXY);\n if (this.isResizeLeft && mouseXY >= 0) {\n var currentX = thumbX + (mouseXY > this.previousXY ? diff : -diff);\n currentWidth = currentX - circleRadius >= 0 ? this.previousWidth + (mouseXY > this.previousXY ? -diff : diff) :\n this.previousWidth;\n currentX = currentX - circleRadius >= 0 ? currentX : thumbX;\n if (currentWidth >= minThumbWidth && mouseXY < currentX + currentWidth) {\n this.scrollElements.thumbRectX = this.previousRectX = currentX;\n this.scrollElements.thumbRectWidth = this.previousWidth = currentWidth;\n this.previousXY = mouseXY;\n this.positionThumb(currentX, currentWidth);\n this.setZoomFactorPosition(currentX, currentWidth);\n }\n }\n else if (this.isResizeRight) {\n currentWidth = mouseXY >= minThumbWidth + this.scrollElements.thumbRectX && mouseXY <= this.width - circleRadius ?\n mouseXY - this.scrollElements.thumbRectX : this.previousWidth;\n this.scrollElements.thumbRectWidth = this.previousWidth = currentWidth;\n this.previousXY = mouseXY;\n this.positionThumb(this.startX, currentWidth);\n this.setZoomFactorPosition(this.startX, currentWidth);\n }\n };\n /**\n * Method to position the scrollbar thumb\n * @param currentX\n * @param currentWidth\n */\n ScrollBar.prototype.positionThumb = function (currentX, currentWidth) {\n var circlePadding = 3;\n var elem = this.scrollElements;\n var gripWidth = 14;\n var gripCircleDiameter = 2;\n var padding = gripWidth / 2 - gripCircleDiameter;\n elem.slider.setAttribute('x', currentX.toString());\n elem.slider.setAttribute('width', currentWidth.toString());\n elem.leftCircleEle.setAttribute('cx', currentX.toString());\n elem.rightCircleEle.setAttribute('cx', (currentX + currentWidth).toString());\n elem.setArrowDirection(currentX, currentWidth, this.height);\n elem.gripCircle.setAttribute('transform', 'translate(' + (currentX + currentWidth / 2 + ((this.isVertical ? 1 : -1) * padding)) +\n ',' + (this.isVertical ? '10' : '5') + ') rotate(' + (this.isVertical ? '180' : '0') + ')');\n };\n /**\n * Method to get default values\n */\n ScrollBar.prototype.getDefaults = function () {\n var circleRadius = 8;\n var padding = 5;\n var gripWidth = 14;\n var minThumbWidth = circleRadius * 2 + padding * 2 + gripWidth;\n var axis = this.axis;\n this.isVertical = axis.orientation === 'Vertical';\n var currentWidth = axis.zoomFactor * (this.isVertical ? axis.rect.height : axis.rect.width);\n currentWidth = currentWidth > minThumbWidth ? currentWidth : minThumbWidth;\n this.scrollX = axis.rect.x;\n this.scrollY = axis.rect.y;\n this.width = this.isVertical ? axis.rect.height : axis.rect.width;\n this.height = 16;\n var currentX = axis.zoomPosition * (this.isVertical ? axis.rect.height : this.width);\n this.scrollElements.thumbRectX = currentX > circleRadius ? currentX : circleRadius;\n this.scrollElements.thumbRectWidth = ((currentWidth + this.scrollElements.thumbRectX) < this.width - (circleRadius * 2))\n ? currentWidth : this.width - this.scrollElements.thumbRectX - circleRadius;\n };\n /**\n * Method for injecting scrollbar module\n * @param axis\n * @param component\n */\n ScrollBar.prototype.injectTo = function (axis, component) {\n axis.zoomingScrollBar = new ScrollBar(component, axis);\n };\n /**\n * Animation Calculation for scrollbar\n * @param previous\n * @param current\n */\n ScrollBar.prototype.performAnimation = function (previous, current) {\n var _this = this;\n var currentX;\n var width = this.scrollElements.thumbRectWidth;\n new Animation({}).animate(createElement('div'), {\n duration: this.animateDuration,\n progress: function (args) {\n currentX = linear(args.timeStamp, 0, current - previous, args.duration) + previous;\n _this.positionThumb(currentX, width);\n _this.setZoomFactorPosition(currentX, width);\n },\n end: function (model) {\n _this.scrollElements.thumbRectX = current;\n _this.startX = current;\n _this.positionThumb(current, width);\n _this.setZoomFactorPosition(current, width);\n }\n });\n };\n /**\n * Method to destroy scrollbar\n */\n ScrollBar.prototype.destroy = function () {\n var _this = this;\n if (this.axes) {\n this.axes.map(function (axis) {\n axis.zoomingScrollBar.destroy();\n });\n }\n else {\n this.elements.map(function (element) {\n _this.unWireEvents(element);\n remove(element.firstChild);\n });\n this.elements = [];\n }\n };\n /**\n * Method to get scrollbar module name\n */\n ScrollBar.prototype.getModuleName = function () {\n return 'ScrollBar';\n };\n return ScrollBar;\n}());\nexport { ScrollBar };\n","/**\n * Defines the common functionalities of accumulation series\n */\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { degreeToLocation, getElement, indexFinder } from '../../common/utils/helper';\nimport { pointByIndex } from '../model/acc-base';\n/**\n * Accumulation Base used to do some base calculation for accumulation chart.\n */\nvar AccumulationBase = /** @class */ (function () {\n /** @private */\n function AccumulationBase(accumulation) {\n this.accumulation = accumulation;\n }\n Object.defineProperty(AccumulationBase.prototype, \"center\", {\n /**\n * Gets the center of the pie\n * @private\n */\n get: function () {\n return this.pieCenter || (this.accumulation.visibleSeries[0].type === 'Pie' ?\n this.accumulation.pieSeriesModule.center : null);\n },\n /**\n * Sets the center of the pie\n * @private\n */\n set: function (value) {\n this.pieCenter = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AccumulationBase.prototype, \"radius\", {\n /**\n * Gets the radius of the pie\n * @private\n */\n get: function () {\n return this.pieRadius !== undefined ? this.pieRadius :\n this.accumulation.pieSeriesModule.radius;\n },\n /**\n * Sets the radius of the pie\n * @private\n */\n set: function (value) {\n this.pieRadius = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AccumulationBase.prototype, \"labelRadius\", {\n /**\n * Gets the label radius of the pie\n * @private\n */\n get: function () {\n return this.pieLabelRadius !== undefined ? this.pieLabelRadius :\n this.accumulation.pieSeriesModule.labelRadius;\n },\n /**\n * Sets the label radius of the pie\n * @private\n */\n set: function (value) {\n this.pieLabelRadius = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Checks whether the series is circular or not\n * @private\n */\n AccumulationBase.prototype.isCircular = function () {\n return this.accumulation.type === 'Pie';\n };\n /**\n * To process the explode on accumulation chart loading\n * @private\n */\n AccumulationBase.prototype.processExplode = function (event) {\n if (event.target.id.indexOf('_Series_') > -1 || event.target.id.indexOf('_datalabel_') > -1) {\n var pointIndex = indexFinder(event.target.id).point;\n if (isNaN(pointIndex) || (event.target.id.indexOf('_datalabel_') > -1 &&\n this.accumulation.visibleSeries[0].points[pointIndex].labelPosition === 'Outside')) {\n return null;\n }\n this.explodePoints(pointIndex, this.accumulation);\n this.deExplodeAll(pointIndex);\n }\n };\n /**\n * To invoke the explode on accumulation chart loading\n * @private\n */\n AccumulationBase.prototype.invokeExplode = function () {\n if (this.accumulation.visibleSeries[0].explodeAll) {\n for (var _i = 0, _a = this.accumulation.visibleSeries[0].points; _i < _a.length; _i++) {\n var point = _a[_i];\n this.explodePoints(point.index, this.accumulation);\n }\n }\n else if (!isNullOrUndefined(this.accumulation.visibleSeries[0].explodeIndex)) {\n this.explodePoints(this.accumulation.visibleSeries[0].explodeIndex, this.accumulation);\n }\n if (this.accumulation.accumulationSelectionModule && this.accumulation.selectionMode !== 'None' &&\n this.accumulation.accumulationSelectionModule.selectedDataIndexes.length) {\n for (var _b = 0, _c = this.accumulation.accumulationSelectionModule.selectedDataIndexes; _b < _c.length; _b++) {\n var index = _c[_b];\n this.explodePoints(index.point, this.accumulation, true);\n this.deExplodeAll(index.point);\n }\n }\n };\n /**\n * To deExplode all points in the series\n */\n AccumulationBase.prototype.deExplodeAll = function (index) {\n var pointId = this.accumulation.element.id + '_Series_0_Point_';\n var points = this.accumulation.visibleSeries[0].points;\n for (var _i = 0, points_1 = points; _i < points_1.length; _i++) {\n var currentPoint = points_1[_i];\n if (index !== currentPoint.index) {\n this.deExplodeSlice(currentPoint.index, pointId, this.center);\n }\n }\n };\n /**\n * To explode point by index\n * @private\n */\n AccumulationBase.prototype.explodePoints = function (index, chart, explode) {\n if (explode === void 0) { explode = false; }\n var pointId = this.accumulation.element.id + '_Series_0_Point_';\n var translate;\n var points = this.accumulation.visibleSeries[0].points;\n var point = pointByIndex(index, this.accumulation.visibleSeries[0].points);\n if (isNullOrUndefined(point)) {\n return null;\n }\n if (!this.isCircular()) {\n translate = { x: chart.explodeDistance, y: 0 };\n }\n else {\n translate = degreeToLocation(point.midAngle, chart.explodeDistance, this.center);\n }\n if (this.isExplode(pointId + index) || explode) {\n this.explodeSlice(index, translate, pointId, this.center || { x: 0, y: 0 });\n }\n else {\n this.deExplodeSlice(index, pointId, this.center);\n }\n };\n /**\n * To check point is exploded by id\n */\n AccumulationBase.prototype.isExplode = function (id) {\n var element = getElement(id);\n if (element && (element.getAttribute('transform') === 'translate(0, 0)' || element.getAttribute('transform') === null ||\n element.getAttribute('transform') === 'translate(0)')) {\n return true;\n }\n else {\n return false;\n }\n };\n /**\n * To deExplode the point by index\n */\n AccumulationBase.prototype.deExplodeSlice = function (index, sliceId, center) {\n var position = 'translate(0, 0)';\n this.setTranslate(index, sliceId, position);\n };\n /**\n * To translate the point elements by index and position\n */\n AccumulationBase.prototype.setTranslate = function (index, sliceId, position) {\n this.setElementTransform(sliceId + index, position);\n if (this.accumulation.visibleSeries[0].dataLabel.visible) {\n sliceId = this.accumulation.element.id + '_datalabel_Series_0_';\n this.setElementTransform(sliceId + 'shape_' + index, position);\n this.setElementTransform(sliceId + 'text_' + index, position);\n this.setElementTransform(sliceId + 'connector_' + index, position);\n }\n };\n /**\n * To translate the point element by id and position\n */\n AccumulationBase.prototype.setElementTransform = function (id, position) {\n var element = getElement(id);\n if (element) {\n element.setAttribute('transform', position);\n }\n };\n /**\n * To translate the point elements by index position\n */\n AccumulationBase.prototype.explodeSlice = function (index, translate, sliceId, center) {\n var position = 'translate(' + (translate.x - center.x) + ', ' + (translate.y - center.y) + ')';\n this.setTranslate(index, sliceId, position);\n };\n return AccumulationBase;\n}());\nexport { AccumulationBase };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * Accumulation charts base file\n */\nimport { Animation } from '@syncfusion/ej2-base';\nimport { stringToNumber, ChartLocation, degreeToLocation, Rect, getAnimationFunction, getElement } from '../../common/utils/helper';\nimport { animationComplete } from '../../common/model/constants';\nimport { AccumulationBase } from './accumulation-base';\n/**\n * PieBase class used to do pie base calculations.\n */\nvar PieBase = /** @class */ (function (_super) {\n __extends(PieBase, _super);\n function PieBase() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * To initialize the property values.\n * @private\n */\n PieBase.prototype.initProperties = function (chart, series) {\n this.accumulation = chart;\n var size = Math.min(chart.initialClipRect.width, chart.initialClipRect.height);\n this.initAngles(series);\n this.radius = stringToNumber(series.radius, size / 2);\n this.innerRadius = stringToNumber(series.innerRadius, this.radius);\n this.labelRadius = series.dataLabel.position === 'Inside' ? (((this.radius - this.innerRadius) / 2) + this.innerRadius) :\n (this.radius + stringToNumber(series.dataLabel.connectorStyle.length || '4%', size / 2));\n chart.explodeDistance = series.explode ? stringToNumber(series.explodeOffset, this.radius) : 0;\n this.findCenter(chart, series);\n this.defaultLabelBound(series, series.dataLabel.visible, series.dataLabel.position);\n this.totalAngle -= 0.001;\n };\n /**\n * To find the center of the accumulation.\n * @private\n */\n PieBase.prototype.findCenter = function (accumulation, series) {\n this.accumulation = accumulation;\n this.center = {\n x: stringToNumber('50%', accumulation.initialClipRect.width) + (accumulation.initialClipRect.x),\n y: stringToNumber('50%', accumulation.initialClipRect.height) + (accumulation.initialClipRect.y)\n };\n var accumulationRect = this.getSeriesBound(series);\n var accumulationRectCenter = new ChartLocation(accumulationRect.x + accumulationRect.width / 2, accumulationRect.y + accumulationRect.height / 2);\n this.center.x += (this.center.x - accumulationRectCenter.x);\n this.center.y += (this.center.y - accumulationRectCenter.y);\n this.accumulation.center = this.center;\n };\n /**\n * To find angles from series.\n */\n PieBase.prototype.initAngles = function (series) {\n this.totalAngle = (series.endAngle - series.startAngle) % 360;\n this.startAngle = series.startAngle - 90;\n this.totalAngle = this.totalAngle <= 0 ? (360 + this.totalAngle) : this.totalAngle;\n this.startAngle = (this.startAngle < 0 ? (this.startAngle + 360) : this.startAngle) % 360;\n };\n /**\n * To calculate data-label bound\n * @private\n */\n PieBase.prototype.defaultLabelBound = function (series, visible, position) {\n var accumulationBound = this.getSeriesBound(series);\n series.accumulationBound = accumulationBound;\n series.labelBound = new Rect(accumulationBound.x, accumulationBound.y, accumulationBound.width + accumulationBound.x, accumulationBound.height + accumulationBound.y);\n if (visible && position === 'Outside') {\n series.labelBound = new Rect(Infinity, Infinity, -Infinity, -Infinity);\n }\n };\n /**\n * To calculate series bound\n * @private\n */\n PieBase.prototype.getSeriesBound = function (series) {\n var rect = new Rect(Infinity, Infinity, -Infinity, -Infinity);\n this.initAngles(series);\n var start = this.startAngle;\n var total = this.totalAngle;\n var end = (this.startAngle + total) % 360;\n end = (end === 0) ? 360 : end;\n series.findMaxBounds(rect, this.getRectFromAngle(start));\n series.findMaxBounds(rect, this.getRectFromAngle(end));\n series.findMaxBounds(rect, new Rect(this.center.x, this.center.y, 0, 0));\n var nextQuandrant = (Math.floor(start / 90) * 90 + 90) % 360;\n var lastQuadrant = (Math.floor(end / 90) * 90) % 360;\n lastQuadrant = (lastQuadrant === 0) ? 360 : lastQuadrant;\n if (total >= 90 || lastQuadrant === nextQuandrant) {\n series.findMaxBounds(rect, this.getRectFromAngle(nextQuandrant));\n series.findMaxBounds(rect, this.getRectFromAngle(lastQuadrant));\n }\n if (start === 0 || (start + total >= 360)) {\n series.findMaxBounds(rect, this.getRectFromAngle(0));\n }\n var length = nextQuandrant === lastQuadrant ? 0 : Math.floor(total / 90);\n for (var i = 1; i < length; i++) {\n nextQuandrant = nextQuandrant + 90;\n if ((nextQuandrant < lastQuadrant || end < start) || total === 360) {\n series.findMaxBounds(rect, this.getRectFromAngle(nextQuandrant));\n }\n }\n rect.width -= rect.x;\n rect.height -= rect.y;\n return rect;\n };\n /**\n * To get rect location size from angle\n */\n PieBase.prototype.getRectFromAngle = function (angle) {\n var location = degreeToLocation(angle, this.radius, this.center);\n return new Rect(location.x, location.y, 0, 0);\n };\n /**\n * To get path arc direction\n */\n PieBase.prototype.getPathArc = function (center, start, end, radius, innerRadius) {\n var degree = end - start;\n degree = degree < 0 ? (degree + 360) : degree;\n var flag = (degree < 180) ? 0 : 1;\n if (!innerRadius && innerRadius === 0) {\n return this.getPiePath(center, degreeToLocation(start, radius, center), degreeToLocation(end, radius, center), radius, flag);\n }\n else {\n return this.getDoughnutPath(center, degreeToLocation(start, radius, center), degreeToLocation(end, radius, center), radius, degreeToLocation(start, innerRadius, center), degreeToLocation(end, innerRadius, center), innerRadius, flag);\n }\n };\n /**\n * To get pie direction\n */\n PieBase.prototype.getPiePath = function (center, start, end, radius, clockWise) {\n return 'M ' + center.x + ' ' + center.y + ' L ' + start.x + ' ' + start.y + ' A ' + radius + ' ' +\n radius + ' 0 ' + clockWise + ' 1 ' + end.x + ' ' + end.y + ' Z';\n };\n /**\n * To get doughnut direction\n */\n PieBase.prototype.getDoughnutPath = function (center, start, end, radius, innerStart, innerEnd, innerRadius, clockWise) {\n return 'M ' + start.x + ' ' + start.y + ' A ' + radius + ' ' + radius + ' 0 ' + clockWise +\n ' 1 ' + end.x + ' ' + end.y + ' L ' + innerEnd.x + ' ' + innerEnd.y + ' A ' + innerRadius +\n ' ' + innerRadius + ' 0 ' + clockWise + ',0 ' + innerStart.x + ' ' + innerStart.y + ' Z';\n };\n /**\n * Method to start animation for pie series.\n */\n PieBase.prototype.doAnimation = function (slice, series) {\n var _this = this;\n var startAngle = series.startAngle - 85;\n var value;\n var radius = Math.max(this.accumulation.availableSize.height, this.accumulation.availableSize.width) * 0.75;\n radius += radius * (0.414); // formula r + r / 2 * (1.414 -1)\n var effect = getAnimationFunction('Linear'); // need to check animation type\n new Animation({}).animate(slice, {\n duration: series.animation.duration,\n delay: series.animation.delay,\n progress: function (args) {\n value = effect(args.timeStamp, startAngle, _this.totalAngle, args.duration);\n slice.setAttribute('d', _this.getPathArc(_this.center, startAngle, value, radius, 0));\n },\n end: function (args) {\n slice.setAttribute('d', _this.getPathArc(_this.center, 0, 359.99999, radius, 0));\n _this.accumulation.trigger(animationComplete, { series: series, accumulation: _this.accumulation });\n var datalabelGroup = getElement(_this.accumulation.element.id + '_datalabel_Series_' + series.index);\n datalabelGroup.style.visibility = _this.accumulation.isDestroyed ? 'hidden' : 'visible';\n }\n });\n };\n return PieBase;\n}(AccumulationBase));\nexport { PieBase };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { PathOption, degreeToLocation } from '../../common/utils/helper';\nimport { PieBase } from '../renderer/pie-base';\n/**\n * PieSeries module used to render `Pie` Series.\n */\nvar PieSeries = /** @class */ (function (_super) {\n __extends(PieSeries, _super);\n function PieSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * To get path option, degree, symbolLocation from the point.\n * @private\n */\n PieSeries.prototype.renderPoint = function (point, series, chart, option) {\n var sum = series.sumOfPoints;\n var degree = (sum) ? ((Math.abs(point.y) / sum) * (this.totalAngle)) : null;\n option.d = this.getPathOption(point, degree);\n point.midAngle = (this.startAngle - (degree / 2)) % 360;\n point.endAngle = this.startAngle % 360;\n point.symbolLocation = degreeToLocation(point.midAngle, (this.radius + this.innerRadius) / 2, this.center);\n return option;\n };\n /**\n * To get path option from the point.\n */\n PieSeries.prototype.getPathOption = function (point, degree) {\n if (degree === null || !point.y) {\n return '';\n }\n var path = this.getPathArc(this.center, this.startAngle % 360, (this.startAngle + degree) % 360, this.radius, this.innerRadius);\n this.startAngle += degree;\n return path;\n };\n /**\n * To animate the pie series.\n * @private\n */\n PieSeries.prototype.animateSeries = function (accumulation, option, series, slice) {\n var groupId = accumulation.element.id + 'SeriesGroup' + series.index;\n if (series.animation.enable && accumulation.animateSeries) {\n var clippath = accumulation.renderer.createClipPath({ id: groupId + '_clipPath' });\n var path = new PathOption(groupId + '_slice', 'transparent', 1, 'transparent', 1, '', '');\n var clipslice = accumulation.renderer.drawPath(path);\n clippath.appendChild(clipslice);\n accumulation.svgObject.appendChild(clippath);\n slice.setAttribute('style', 'clip-path:url(#' + clippath.id + ')');\n this.doAnimation(clipslice, series);\n }\n };\n /**\n * To get the module name of the Pie series.\n */\n PieSeries.prototype.getModuleName = function () {\n return 'PieSeries';\n };\n /**\n * To destroy the pie series.\n * @return {void}\n * @private\n */\n PieSeries.prototype.destroy = function (accumulation) {\n /**\n * Destroy method calling here\n */\n };\n return PieSeries;\n}(PieBase));\nexport { PieSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/**\n * AccumulationChart file\n */\nimport { Property, Component, Complex, Collection, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { Internationalization, Event, Browser, EventHandler, Touch } from '@syncfusion/ej2-base';\nimport { remove, extend, isNullOrUndefined, createElement } from '@syncfusion/ej2-base';\nimport { Font, Margin, Border, TooltipSettings, Indexes } from '../common/model/base';\nimport { AccumulationSeries } from './model/acc-base';\nimport { Theme, getThemeColor } from '../common/model/theme';\nimport { load, pointClick } from '../common/model/constants';\nimport { pointMove, chartMouseClick, chartMouseDown } from '../common/model/constants';\nimport { chartMouseLeave, chartMouseMove, chartMouseUp, resized } from '../common/model/constants';\nimport { LegendSettings } from '../common/legend/legend';\nimport { Rect, Size, subtractRect, indexFinder } from '../common/utils/helper';\nimport { measureText, RectOption, showTooltip } from '../common/utils/helper';\nimport { textElement, TextOption, createSvg, calculateSize, removeElement, firstToLowerCase } from '../common/utils/helper';\nimport { getElement, titlePositionX } from '../common/utils/helper';\nimport { Data } from '../common/model/data';\nimport { AccumulationBase } from './renderer/accumulation-base';\nimport { PieSeries } from './renderer/pie-series';\nimport { AccumulationAnnotationSettings } from './model/acc-base';\nimport { ExportUtils } from '../common/utils/export';\nimport { getTitle } from '../common/utils/helper';\n/**\n * Represents the AccumulationChart control.\n * ```html\n *
    \n * \n * ```\n */\nvar AccumulationChart = /** @class */ (function (_super) {\n __extends(AccumulationChart, _super);\n /**\n * Constructor for creating the AccumulationChart widget\n * @private\n */\n function AccumulationChart(options, element) {\n var _this = _super.call(this, options, element) || this;\n /** @private explode radius internal property */\n _this.explodeDistance = 0;\n _this.chartid = 57724;\n return _this;\n }\n Object.defineProperty(AccumulationChart.prototype, \"type\", {\n /** @private */\n get: function () {\n if (this.series && this.series.length) {\n return this.series[0].type;\n }\n return 'Pie';\n },\n enumerable: true,\n configurable: true\n });\n // accumulation chart methods\n /**\n * To create svg object, renderer and binding events for the container.\n */\n AccumulationChart.prototype.preRender = function () {\n this.unWireEvents();\n this.setCulture();\n this.animateSeries = true;\n if (this.element.id === '') {\n var collection = document.getElementsByClassName('e-accumulationchart').length;\n this.element.id = 'acc_chart_' + this.chartid + '_' + collection;\n }\n calculateSize(this);\n this.wireEvents();\n };\n /**\n * Themeing for chart goes here\n */\n AccumulationChart.prototype.setTheme = function () {\n /*! Set theme for accumulation chart */\n this.themeStyle = getThemeColor(this.theme);\n };\n /**\n * To render the accumulation chart elements\n */\n AccumulationChart.prototype.render = function () {\n this.trigger(load, { accumulation: this });\n this.setTheme();\n this.accBaseModule = new AccumulationBase(this);\n this.pieSeriesModule = new PieSeries(this);\n this.calculateVisibleSeries();\n this.processData();\n };\n /**\n * Method to unbind events for accumulation chart\n */\n AccumulationChart.prototype.unWireEvents = function () {\n /*! Find the Events type */\n var isIE11Pointer = Browser.isPointer;\n var start = Browser.touchStartEvent;\n var move = Browser.touchMoveEvent;\n var stop = Browser.touchEndEvent;\n var cancel = isIE11Pointer ? 'pointerleave' : 'mouseleave';\n /*! UnBind the Event handler */\n EventHandler.remove(this.element, move, this.accumulationMouseMove);\n EventHandler.remove(this.element, stop, this.accumulationMouseEnd);\n EventHandler.remove(this.element, start, this.accumulationMouseStart);\n EventHandler.remove(this.element, 'click', this.accumulationOnMouseClick);\n EventHandler.remove(this.element, 'contextmenu', this.accumulationRightClick);\n EventHandler.remove(this.element, cancel, this.accumulationMouseLeave);\n window.removeEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.accumulationResize);\n };\n /**\n * Method to bind events for the accumulation chart\n */\n AccumulationChart.prototype.wireEvents = function () {\n /*! Find the Events type */\n var isIE11Pointer = Browser.isPointer;\n var start = Browser.touchStartEvent;\n var stop = Browser.touchEndEvent;\n var move = Browser.touchMoveEvent;\n var cancel = isIE11Pointer ? 'pointerleave' : 'mouseleave';\n /*! Bind the Event handler */\n EventHandler.add(this.element, move, this.accumulationMouseMove, this);\n EventHandler.add(this.element, stop, this.accumulationMouseEnd, this);\n EventHandler.add(this.element, start, this.accumulationMouseStart, this);\n EventHandler.add(this.element, 'click', this.accumulationOnMouseClick, this);\n EventHandler.add(this.element, 'contextmenu', this.accumulationRightClick, this);\n EventHandler.add(this.element, cancel, this.accumulationMouseLeave, this);\n window.addEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.accumulationResize.bind(this));\n new Touch(this.element); // To avoid geasture blocking for browser\n /*! Apply the style for chart */\n this.setStyle(this.element);\n };\n /**\n * Method to set mouse x, y from events\n */\n AccumulationChart.prototype.setMouseXY = function (e) {\n var pageX;\n var pageY;\n var svgRect = getElement(this.element.id + '_svg').getBoundingClientRect();\n var rect = this.element.getBoundingClientRect();\n if (e.type.indexOf('touch') > -1) {\n this.isTouch = true;\n var touchArg = e;\n pageY = touchArg.changedTouches[0].clientY;\n pageX = touchArg.changedTouches[0].clientX;\n }\n else {\n this.isTouch = e.pointerType === 'touch' || e.pointerType === '2';\n pageX = e.clientX;\n pageY = e.clientY;\n }\n this.mouseY = (pageY - rect.top) - Math.max(svgRect.top - rect.top, 0);\n this.mouseX = (pageX - rect.left) - Math.max(svgRect.left - rect.left, 0);\n };\n /**\n * Handles the mouse end.\n * @return {boolean}\n * @private\n */\n AccumulationChart.prototype.accumulationMouseEnd = function (e) {\n this.setMouseXY(e);\n this.trigger(chartMouseUp, { target: e.target.id, x: this.mouseX, y: this.mouseY });\n if (this.isTouch) {\n this.titleTooltip(e, this.mouseX, this.mouseY, this.isTouch);\n if (this.accumulationDataLabelModule && this.visibleSeries[0].dataLabel.visible) {\n this.accumulationDataLabelModule.move(e, this.mouseX, this.mouseY, this.isTouch);\n }\n if (this.accumulationLegendModule && this.legendSettings.visible) {\n this.accumulationLegendModule.move(e);\n }\n }\n this.notify(Browser.touchEndEvent, e);\n return false;\n };\n /*public removeSvgOffset(x: number, y: number): ChartLocation {\n let rect: ClientRect = this.element.getBoundingClientRect();\n let svgRect: ClientRect = getElement(this.element.id + '_svg').getBoundingClientRect();\n return { x: (x - rect.left) - Math.max(svgRect.left - rect.left, 0), y: (y - rect.top) - Math.max(svgRect.top - rect.top, 0)};\n }*/\n /**\n * Handles the mouse start.\n * @return {boolean}\n * @private\n */\n AccumulationChart.prototype.accumulationMouseStart = function (e) {\n this.setMouseXY(e);\n this.trigger(chartMouseDown, { target: e.target.id, x: this.mouseX, y: this.mouseY });\n return false;\n };\n /**\n * Handles the accumulation chart resize.\n * @return {boolean}\n * @private\n */\n AccumulationChart.prototype.accumulationResize = function (e) {\n var _this = this;\n this.animateSeries = false;\n var args = {\n accumulation: this,\n previousSize: new Size(this.availableSize.width, this.availableSize.height),\n name: resized,\n currentSize: new Size(0, 0)\n };\n if (this.resizeTo) {\n clearTimeout(this.resizeTo);\n }\n this.resizeTo = setTimeout(function () {\n if (_this.isDestroyed) {\n clearTimeout(_this.resizeTo);\n return;\n }\n calculateSize(_this);\n args.currentSize = _this.availableSize;\n _this.trigger(resized, args);\n _this.refreshSeries();\n _this.refreshChart();\n }, 500);\n return false;\n };\n /**\n * Handles the export method for accumulation control.\n */\n AccumulationChart.prototype.export = function (type, fileName, orientation, controls, width, height) {\n var exportChart = new ExportUtils(this);\n exportChart.export(type, fileName, orientation, (controls ? controls : [this]), width, height);\n };\n /**\n * Handles the print method for accumulation chart control.\n */\n AccumulationChart.prototype.print = function (id) {\n var exportChart = new ExportUtils(this);\n exportChart.print(id);\n };\n /**\n * Applying styles for accumulation chart element\n */\n AccumulationChart.prototype.setStyle = function (element) {\n element.style.touchAction = 'element';\n element.style.msTouchAction = 'element';\n element.style.msContentZooming = 'none';\n element.style.msUserSelect = 'none';\n element.style.webkitUserSelect = 'none';\n element.style.position = 'relative';\n };\n /**\n * Method to set the annotation content dynamically for accumulation.\n */\n AccumulationChart.prototype.setAnnotationValue = function (annotationIndex, content) {\n var annotation = this.annotations[annotationIndex];\n var element;\n var parentNode = getElement(this.element.id + '_Annotation_Collections');\n if (content) {\n annotation.content = content;\n if (parentNode) {\n element = createElement('div');\n removeElement(this.element.id + '_Annotation_' + annotationIndex);\n this.annotationModule.processAnnotation(annotation, annotationIndex, element);\n parentNode.appendChild(element.children[0]);\n }\n else {\n this.annotationModule.renderAnnotations(getElement(this.element.id + '_Secondary_Element'));\n }\n }\n };\n /**\n * Handles the mouse move on accumulation chart.\n * @return {boolean}\n * @private\n */\n AccumulationChart.prototype.accumulationMouseMove = function (e) {\n this.setMouseXY(e);\n this.trigger(chartMouseMove, { target: e.target.id, x: this.mouseX, y: this.mouseY });\n if (this.pointMove) {\n this.triggerPointEvent(pointMove, e.target);\n }\n if (this.accumulationLegendModule && this.legendSettings.visible) {\n this.accumulationLegendModule.move(e);\n }\n if (this.accumulationDataLabelModule && this.visibleSeries[0] && this.visibleSeries[0].dataLabel.visible) {\n this.accumulationDataLabelModule.move(e, this.mouseX, this.mouseY);\n }\n if (!this.isTouch) {\n this.titleTooltip(e, this.mouseX, this.mouseY);\n }\n this.notify(Browser.touchMoveEvent, e);\n return false;\n };\n AccumulationChart.prototype.titleTooltip = function (event, x, y, isTouch) {\n var targetId = event.target.id;\n if ((event.target.textContent.indexOf('...') > -1) && (targetId === (this.element.id + '_title'))) {\n showTooltip(this.title, x, y, this.element.offsetWidth, this.element.id + '_EJ2_Title_Tooltip', getElement(this.element.id + '_Secondary_Element'), isTouch);\n }\n else {\n removeElement(this.element.id + '_EJ2_Title_Tooltip');\n }\n };\n /**\n * Handles the mouse click on accumulation chart.\n * @return {boolean}\n * @private\n */\n AccumulationChart.prototype.accumulationOnMouseClick = function (e) {\n this.setMouseXY(e);\n if (this.accumulationLegendModule && this.legendSettings.visible) {\n this.accumulationLegendModule.click(e);\n }\n if (this.selectionMode !== 'None' && this.accumulationSelectionModule) {\n this.accumulationSelectionModule.calculateSelectedElements(this, e);\n }\n if (this.visibleSeries[0].explode) {\n this.accBaseModule.processExplode(e);\n }\n this.trigger(chartMouseClick, { target: e.target.id, x: this.mouseX, y: this.mouseY });\n if (this.pointClick) {\n this.triggerPointEvent(pointClick, e.target);\n }\n return false;\n };\n AccumulationChart.prototype.triggerPointEvent = function (event, element) {\n var indexes = indexFinder(element.id, true);\n if (indexes.series >= 0 && indexes.point >= 0) {\n this.trigger(event, { series: this.series[indexes.series],\n point: this.series[indexes.series].points[indexes.point],\n seriesIndex: indexes.series, pointIndex: indexes.point,\n x: this.mouseX, y: this.mouseY });\n }\n };\n /**\n * Handles the mouse right click on accumulation chart.\n * @return {boolean}\n * @private\n */\n AccumulationChart.prototype.accumulationRightClick = function (event) {\n if (event.buttons === 2 || event.pointerType === 'touch') {\n event.preventDefault();\n event.stopPropagation();\n return false;\n }\n return true;\n };\n /**\n * Handles the mouse leave on accumulation chart.\n * @return {boolean}\n * @private\n */\n AccumulationChart.prototype.accumulationMouseLeave = function (e) {\n this.setMouseXY(e);\n this.trigger(chartMouseLeave, { target: e.target.id, x: this.mouseX, y: this.mouseY });\n this.notify(Browser.isPointer ? 'pointerleave' : 'mouseleave', e);\n return false;\n };\n /**\n * Method to set culture for chart\n */\n AccumulationChart.prototype.setCulture = function () {\n this.intl = new Internationalization();\n };\n /**\n * Method to create SVG element for accumulation chart.\n */\n AccumulationChart.prototype.createPieSvg = function () {\n this.removeSvg();\n createSvg(this);\n };\n /**\n * To Remove the SVG from accumulation chart.\n * @return {boolean}\n * @private\n */\n AccumulationChart.prototype.removeSvg = function () {\n removeElement(this.element.id + '_Secondary_Element');\n if (this.svgObject) {\n while (this.svgObject.childNodes.length > 0) {\n this.svgObject.removeChild(this.svgObject.firstChild);\n }\n if (!this.svgObject.hasChildNodes() && this.svgObject.parentNode) {\n remove(this.svgObject);\n }\n }\n removeElement('EJ2_legend_tooltip');\n removeElement('EJ2_datalabel_tooltip');\n };\n /**\n * Method to create the secondary element for tooltip, datalabel and annotaitons.\n */\n AccumulationChart.prototype.createSecondaryElement = function () {\n this.element.appendChild(createElement('div', {\n id: this.element.id + '_Secondary_Element',\n styles: 'position: relative'\n }));\n };\n /**\n * Method to find visible series based on series types\n */\n AccumulationChart.prototype.calculateVisibleSeries = function () {\n this.visibleSeries = [];\n for (var i = 0, length_1 = this.series.length; i < length_1; i++) {\n this.series[i].index = i;\n if (this.series[i].type === this.type && this.visibleSeries.length === 0) {\n this.visibleSeries.push(this.series[i]);\n break;\n }\n }\n };\n /**\n * To find points from dataSource\n */\n AccumulationChart.prototype.processData = function (render) {\n if (render === void 0) { render = true; }\n this.seriesCounts = 0;\n for (var _i = 0, _a = this.visibleSeries; _i < _a.length; _i++) {\n var series = _a[_i];\n series.dataModule = new Data(series.dataSource, series.query);\n series.refreshDataManager(this, render);\n }\n };\n /**\n * To refresh the accumulation chart\n * @private\n */\n AccumulationChart.prototype.refreshChart = function () {\n this.doGrouppingProcess();\n this.createPieSvg();\n this.calculateBounds();\n this.renderElements();\n };\n /**\n * Method to find groupped points\n */\n AccumulationChart.prototype.doGrouppingProcess = function () {\n var series = this.visibleSeries[0];\n if (!isNullOrUndefined(series.resultData) && ((!isNullOrUndefined(series.lastGroupTo) &&\n series.lastGroupTo !== series.groupTo))) {\n series.getPoints(series.resultData, this);\n }\n };\n /**\n * Method to calculate bounds for accumulation chart\n */\n AccumulationChart.prototype.calculateBounds = function () {\n this.initialClipRect = new Rect(this.margin.left, this.margin.top, this.availableSize.width, this.availableSize.height);\n this.titleCollection = [];\n this.titleCollection = getTitle(this.title, this.titleStyle, this.initialClipRect.width);\n subtractRect(this.initialClipRect, new Rect(0, (measureText(this.title, this.titleStyle).height * this.titleCollection.length), this.margin.right + this.margin.left, this.margin.bottom + this.margin.top));\n this.calculateLegendBounds();\n };\n /*\n * Method to calculate legend bounds for accumulation chart\n */\n AccumulationChart.prototype.calculateLegendBounds = function () {\n if (!this.accumulationLegendModule || !this.legendSettings.visible) {\n return null;\n }\n this.accumulationLegendModule.getLegendOptions(this, this.visibleSeries);\n this.accumulationLegendModule.calculateLegendBounds(this.initialClipRect, this.availableSize);\n };\n /**\n * To render elements for accumulation chart\n * @private\n */\n AccumulationChart.prototype.renderElements = function () {\n this.renderBorder();\n this.renderTitle();\n this.createSecondaryElement();\n this.renderSeries();\n this.renderLegend();\n this.element.appendChild(this.svgObject);\n this.processSelection();\n this.processExplode();\n this.renderAnnotation();\n this.setSecondaryElementPosition();\n this.trigger('loaded', { accumulation: this });\n this.animateSeries = false;\n };\n /**\n * To set the left and top position for data label template for center aligned chart\n */\n AccumulationChart.prototype.setSecondaryElementPosition = function () {\n var tooltipParent = getElement(this.element.id + '_Secondary_Element');\n if (!tooltipParent) {\n return;\n }\n var rect = this.element.getBoundingClientRect();\n var svgRect = getElement(this.element.id + '_svg').getBoundingClientRect();\n tooltipParent.style.left = Math.max(svgRect.left - rect.left, 0) + 'px';\n tooltipParent.style.top = Math.max(svgRect.top - rect.top, 0) + 'px';\n };\n /**\n * To render the annotaitions for accumulation series.\n */\n AccumulationChart.prototype.renderAnnotation = function () {\n if (this.annotationModule) {\n this.annotationModule.renderAnnotations(getElement(this.element.id + '_Secondary_Element'));\n }\n };\n /**\n * Method to process the explode in accumulation chart\n */\n AccumulationChart.prototype.processExplode = function () {\n if (!this.visibleSeries[0].explode) {\n return null;\n }\n this.accBaseModule.invokeExplode();\n };\n /**\n * Method to render series for accumulation chart\n */\n AccumulationChart.prototype.renderSeries = function () {\n this.svgObject.appendChild(this.renderer.createGroup({ id: this.element.id + '_SeriesCollection' }));\n for (var _i = 0, _a = this.visibleSeries; _i < _a.length; _i++) {\n var series = _a[_i];\n if (series.visible && this[(firstToLowerCase(series.type) + 'SeriesModule')]) {\n this[(firstToLowerCase(series.type) + 'SeriesModule')].initProperties(this, series);\n series.renderSeries(this);\n }\n }\n };\n /**\n * Method to render border for accumulation chart\n */\n AccumulationChart.prototype.renderBorder = function () {\n var padding = this.border.width;\n this.svgObject.appendChild(this.renderer.drawRectangle(new RectOption(this.element.id + '_border', this.background || this.themeStyle.background, this.border, 1, new Rect(padding / 2, padding / 2, this.availableSize.width - padding, this.availableSize.height - padding))));\n };\n /**\n * Method to render legend for accumulation chart\n */\n AccumulationChart.prototype.renderLegend = function () {\n if (!this.accumulationLegendModule || !this.legendSettings.visible) {\n return null;\n }\n if (this.accumulationLegendModule.legendCollections.length) {\n if (this.visibleSeries[0].type === 'Pie') {\n this.accumulationLegendModule.getSmartLegendLocation(this.visibleSeries[0].labelBound, this.accumulationLegendModule.legendBounds, this.margin);\n }\n this.accumulationLegendModule.renderLegend(this, this.legendSettings, this.accumulationLegendModule.legendBounds);\n }\n };\n /**\n * To process the selection in accumulation chart\n */\n AccumulationChart.prototype.processSelection = function () {\n if (!this.accumulationSelectionModule || this.selectionMode === 'None') {\n return null;\n }\n var selectedDataIndexes = extend([], this.accumulationSelectionModule.selectedDataIndexes, null, true);\n this.accumulationSelectionModule.invokeSelection(this);\n if (selectedDataIndexes.length > 0) {\n this.accumulationSelectionModule.selectedDataIndexes = selectedDataIndexes;\n this.accumulationSelectionModule.redrawSelection(this, this.selectionMode);\n }\n };\n /**\n * To render title for accumulation chart\n */\n AccumulationChart.prototype.renderTitle = function () {\n if (!this.title) {\n return null;\n }\n var titleSize = measureText(this.title, this.titleStyle);\n var anchor = this.titleStyle.textAlignment === 'Near' ? 'start' :\n this.titleStyle.textAlignment === 'Far' ? 'end' : 'middle';\n textElement(new TextOption(this.element.id + '_title', titlePositionX(this.availableSize, this.margin.left, this.margin.left, this.titleStyle), this.margin.top + (titleSize.height * 3 / 4), anchor, this.titleCollection, '', 'auto'), this.titleStyle, this.titleStyle.color || this.themeStyle.chartTitle, this.svgObject);\n };\n /**\n * To get the series parent element\n * @private\n */\n AccumulationChart.prototype.getSeriesElement = function () {\n return this.svgObject.getElementsByTagName('g')[0];\n };\n /**\n * To refresh the all visible series points\n * @private\n */\n AccumulationChart.prototype.refreshSeries = function () {\n for (var _i = 0, _a = this.visibleSeries; _i < _a.length; _i++) {\n var series = _a[_i];\n this.refreshPoints(series.points);\n }\n };\n /**\n * To refresh points label region and visible\n * @private\n */\n AccumulationChart.prototype.refreshPoints = function (points) {\n for (var _i = 0, points_1 = points; _i < points_1.length; _i++) {\n var point = points_1[_i];\n point.labelPosition = null;\n point.labelRegion = null;\n point.labelVisible = true;\n }\n };\n /**\n * To get Module name\n * @private\n */\n AccumulationChart.prototype.getModuleName = function () {\n return 'accumulationchart';\n };\n /**\n * To destroy the accumulationcharts\n * @private\n */\n AccumulationChart.prototype.destroy = function () {\n this.unWireEvents();\n _super.prototype.destroy.call(this);\n this.element.classList.remove('e-accumulationchart');\n };\n /**\n * To provide the array of modules needed for control rendering\n * @return {ModuleDeclaration[]}\n * @private\n */\n AccumulationChart.prototype.requiredModules = function () {\n var modules = [];\n var enableAnnotation = false;\n modules.push({\n member: this.type + 'Series',\n args: [this]\n });\n if (this.legendSettings.visible) {\n modules.push({\n member: 'AccumulationLegend',\n args: [this]\n });\n }\n if (this.findDatalabelVisibility()) {\n modules.push({\n member: 'AccumulationDataLabel',\n args: [this]\n });\n }\n if (this.tooltip.enable) {\n modules.push({\n member: 'AccumulationTooltip',\n args: [this]\n });\n }\n if (this.selectionMode !== 'None') {\n modules.push({\n member: 'AccumulationSelection',\n args: [this]\n });\n }\n enableAnnotation = this.annotations.some(function (value) {\n return (value.content !== null);\n });\n if (enableAnnotation) {\n modules.push({\n member: 'Annotation',\n args: [this]\n });\n }\n return modules;\n };\n /**\n * To find datalabel visibility in series\n */\n AccumulationChart.prototype.findDatalabelVisibility = function () {\n for (var _i = 0, _a = this.series; _i < _a.length; _i++) {\n var series = _a[_i];\n if (series.dataLabel.visible) {\n return true;\n }\n }\n return false;\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @private\n */\n AccumulationChart.prototype.getPersistData = function () {\n return '';\n };\n /**\n * Called internally if any of the property value changed.\n * @private\n */\n AccumulationChart.prototype.onPropertyChanged = function (newProp, oldProp) {\n var update = {\n refreshElements: false, refreshBounds: false\n };\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'theme':\n this.animateSeries = true;\n break;\n case 'title':\n case 'height':\n case 'width':\n case 'margin':\n update.refreshBounds = true;\n break;\n case 'titleStyle':\n if (newProp.titleStyle && (newProp.titleStyle.size || newProp.titleStyle.textOverflow)) {\n update.refreshBounds = true;\n }\n else {\n update.refreshElements = true;\n }\n break;\n case 'legendSettings':\n update.refreshBounds = true;\n update.refreshElements = true;\n break;\n case 'series':\n var len = this.series.length;\n var seriesRefresh = false;\n for (var i = 0; i < len; i++) {\n if (newProp.series[i] && (newProp.series[i].dataSource || newProp.series[i].yName || newProp.series[i].xName)) {\n seriesRefresh = true;\n }\n }\n if (seriesRefresh) {\n this.processData(false);\n update.refreshBounds = true;\n }\n break;\n case 'locale':\n case 'currencyCode':\n _super.prototype.refresh.call(this);\n break;\n case 'background':\n case 'border':\n case 'annotations':\n case 'enableSmartLabels':\n update.refreshElements = true;\n break;\n case 'isMultiSelect':\n case 'selectedDataIndexes':\n case 'selectionMode':\n if (this.accumulationSelectionModule) {\n if (isNullOrUndefined(this.accumulationSelectionModule.selectedDataIndexes)) {\n this.accumulationSelectionModule.invokeSelection(this);\n }\n else {\n this.accumulationSelectionModule.redrawSelection(this, oldProp.selectionMode);\n }\n }\n break;\n }\n }\n if (!update.refreshBounds && update.refreshElements) {\n this.createPieSvg();\n this.renderElements();\n }\n else if (update.refreshBounds) {\n this.refreshSeries();\n this.createPieSvg();\n this.calculateBounds();\n this.renderElements();\n }\n };\n __decorate([\n Property(null)\n ], AccumulationChart.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], AccumulationChart.prototype, \"height\", void 0);\n __decorate([\n Property(null)\n ], AccumulationChart.prototype, \"title\", void 0);\n __decorate([\n Complex(Theme.chartTitleFont, Font)\n ], AccumulationChart.prototype, \"titleStyle\", void 0);\n __decorate([\n Complex({}, LegendSettings)\n ], AccumulationChart.prototype, \"legendSettings\", void 0);\n __decorate([\n Complex({}, TooltipSettings)\n ], AccumulationChart.prototype, \"tooltip\", void 0);\n __decorate([\n Property('None')\n ], AccumulationChart.prototype, \"selectionMode\", void 0);\n __decorate([\n Property(false)\n ], AccumulationChart.prototype, \"isMultiSelect\", void 0);\n __decorate([\n Collection([], Indexes)\n ], AccumulationChart.prototype, \"selectedDataIndexes\", void 0);\n __decorate([\n Complex({}, Margin)\n ], AccumulationChart.prototype, \"margin\", void 0);\n __decorate([\n Property(true)\n ], AccumulationChart.prototype, \"enableSmartLabels\", void 0);\n __decorate([\n Complex({ color: '#DDDDDD', width: 0 }, Border)\n ], AccumulationChart.prototype, \"border\", void 0);\n __decorate([\n Property(null)\n ], AccumulationChart.prototype, \"background\", void 0);\n __decorate([\n Collection([{}], AccumulationSeries)\n ], AccumulationChart.prototype, \"series\", void 0);\n __decorate([\n Collection([{}], AccumulationAnnotationSettings)\n ], AccumulationChart.prototype, \"annotations\", void 0);\n __decorate([\n Property('Material')\n ], AccumulationChart.prototype, \"theme\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"loaded\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"seriesRender\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"legendRender\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"textRender\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"tooltipRender\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"pointRender\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"annotationRender\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"beforePrint\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"chartMouseMove\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"chartMouseClick\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"pointClick\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"pointMove\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"animationComplete\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"chartMouseDown\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"chartMouseLeave\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"chartMouseUp\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"resized\", void 0);\n __decorate([\n Property('USD')\n ], AccumulationChart.prototype, \"currencyCode\", void 0);\n AccumulationChart = __decorate([\n NotifyPropertyChanges\n ], AccumulationChart);\n return AccumulationChart;\n}(Component));\nexport { AccumulationChart };\n","/**\n * Defines the common behavior of funnel and pyramid series\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Size, stringToNumber, Rect } from '../../common/utils/helper';\nimport { AccumulationBase } from './accumulation-base';\n/**\n * TriangularBase is used to calculate base functions for funnel/pyramid series.\n */\nvar TriangularBase = /** @class */ (function (_super) {\n __extends(TriangularBase, _super);\n function TriangularBase() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Initializes the properties of funnel/pyramid series\n * @private\n */\n TriangularBase.prototype.initProperties = function (chart, series) {\n var actualChartArea = chart.initialClipRect;\n series.triangleSize = new Size(stringToNumber(series.width, actualChartArea.width), stringToNumber(series.height, actualChartArea.height));\n series.neckSize = new Size(stringToNumber(series.neckWidth, actualChartArea.width), stringToNumber(series.neckHeight, actualChartArea.height));\n this.defaultLabelBound(series, series.dataLabel.visible, series.dataLabel.position, chart);\n if (series.explodeOffset === '30%') {\n series.explodeOffset = '25px';\n }\n chart.explodeDistance = stringToNumber(series.explodeOffset, actualChartArea.width);\n var points = series.points;\n this.initializeSizeRatio(points, series);\n };\n /**\n * Initializes the size of the pyramid/funnel segments\n * @private\n */\n TriangularBase.prototype.initializeSizeRatio = function (points, series, reverse) {\n if (reverse === void 0) { reverse = false; }\n var sumOfPoints = series.sumOfPoints;\n //Limiting the ratio within the range of 0 to 1\n var gapRatio = Math.min(Math.max(series.gapRatio, 0), 1);\n //% equivalence of a value 1\n var coEff = 1 / (sumOfPoints * (1 + gapRatio / (1 - gapRatio)));\n var spacing = gapRatio / (points.length - 1);\n var y = 0;\n //starting from bottom\n for (var i = points.length - 1; i >= 0; i--) {\n var index = reverse ? points.length - 1 - i : i;\n if (points[index].visible) {\n var height = coEff * points[index].y;\n points[index].yRatio = y;\n points[index].heightRatio = height;\n y += height + spacing;\n }\n }\n };\n /**\n * Marks the label location from the set of points that forms a pyramid/funnel segment\n * @private\n */\n TriangularBase.prototype.setLabelLocation = function (series, point, points) {\n var last = points.length - 1;\n var bottom = series.type === 'Funnel' ? points.length - 2 : points.length - 1;\n var x = (points[0].x + points[bottom].x) / 2;\n var right = (points[1].x + points[bottom - 1].x) / 2;\n point.region = new Rect(x, points[0].y, right - x, points[bottom].y - points[0].y);\n point.symbolLocation = {\n x: point.region.x + point.region.width / 2,\n y: point.region.y + point.region.height / 2\n };\n point.labelOffset = {\n x: point.symbolLocation.x - (points[0].x + points[last].x) / 2,\n y: point.symbolLocation.y - (points[0].y + points[last].y) / 2\n };\n };\n /**\n * Finds the path to connect the list of points\n * @private\n */\n TriangularBase.prototype.findPath = function (locations) {\n var path = 'M';\n for (var i = 0; i < locations.length; i++) {\n path += locations[i].x + ' ' + locations[i].y;\n if (i !== locations.length - 1) {\n path += ' L';\n }\n }\n return path;\n };\n /**\n * To calculate data-label bounds\n * @private\n */\n TriangularBase.prototype.defaultLabelBound = function (series, visible, position, chart) {\n var x = (chart.initialClipRect.width - series.triangleSize.width) / 2;\n var y = (chart.initialClipRect.height - series.triangleSize.height) / 2;\n var accumulationBound = new Rect(x, y, series.triangleSize.width, series.triangleSize.height);\n series.labelBound = new Rect(accumulationBound.x, accumulationBound.y, accumulationBound.width + accumulationBound.x, accumulationBound.height + accumulationBound.y);\n series.accumulationBound = accumulationBound;\n if (visible && position === 'Outside') {\n series.labelBound = new Rect(Infinity, Infinity, -Infinity, -Infinity);\n }\n };\n return TriangularBase;\n}(AccumulationBase));\nexport { TriangularBase };\n","/**\n * Defines the behavior of a funnel series\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { TriangularBase } from './triangular-base';\n/**\n * FunnelSeries module used to render `Funnel` Series.\n */\nvar FunnelSeries = /** @class */ (function (_super) {\n __extends(FunnelSeries, _super);\n function FunnelSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Defines the path of a funnel segment\n */\n FunnelSeries.prototype.getSegmentData = function (point, series, chart) {\n var lineWidth;\n var topRadius;\n var bottomRadius;\n var endTop;\n var endBottom;\n var minRadius;\n var endMin;\n var bottomY;\n var area = series.triangleSize;\n var offset = 0;\n var extraSpace = (chart.initialClipRect.width - series.triangleSize.width) / 2;\n var emptySpaceAtLeft = extraSpace + chart.initialClipRect.x;\n var seriesTop = chart.initialClipRect.y + (chart.initialClipRect.height - area.height) / 2;\n //defines the top and bottom of a segment\n var top = point.yRatio * area.height;\n var bottom = top + point.heightRatio * area.height;\n var neckSize = series.neckSize;\n lineWidth = neckSize.width + (area.width - neckSize.width) * ((area.height - neckSize.height - top) /\n (area.height - neckSize.height));\n topRadius = (area.width / 2) - lineWidth / 2;\n //Calculating the middle slope change and bottom\n endTop = topRadius + lineWidth;\n if (bottom > area.height - neckSize.height || area.height === neckSize.height) {\n lineWidth = neckSize.width;\n }\n else {\n lineWidth = neckSize.width + (area.width - neckSize.width) *\n ((area.height - neckSize.height - bottom) / (area.height - neckSize.height));\n }\n bottomRadius = (area.width / 2) - (lineWidth / 2);\n endBottom = bottomRadius + lineWidth;\n if (top >= area.height - neckSize.height) {\n topRadius = bottomRadius = minRadius = (area.width / 2) - neckSize.width / 2;\n endTop = endBottom = endMin = (area.width / 2) + neckSize.width / 2;\n }\n else if (bottom > (area.height - neckSize.height)) {\n minRadius = bottomRadius = (area.width / 2) - lineWidth / 2;\n endMin = endBottom = minRadius + lineWidth;\n bottomY = area.height - neckSize.height;\n }\n var points = [];\n top += seriesTop;\n bottom += seriesTop;\n bottomY += seriesTop;\n var line1 = { x: emptySpaceAtLeft + offset + topRadius, y: top };\n var line2 = { x: emptySpaceAtLeft + offset + endTop, y: top };\n var line4 = { x: emptySpaceAtLeft + offset + endBottom, y: bottom };\n var line5 = { x: emptySpaceAtLeft + offset + bottomRadius, y: bottom };\n var line3 = { x: emptySpaceAtLeft + offset + endBottom, y: bottom };\n var line6 = { x: emptySpaceAtLeft + offset + bottomRadius, y: bottom };\n if (bottomY) {\n line3 = { x: emptySpaceAtLeft + offset + endMin, y: bottomY };\n line6 = { x: emptySpaceAtLeft + offset + minRadius, y: bottomY };\n }\n var polygon = [line1, line2, line3, line4, line5, line6];\n this.setLabelLocation(series, point, polygon);\n var direction = this.findPath(polygon);\n return direction;\n };\n /**\n * Renders a funnel segment\n * @private\n */\n FunnelSeries.prototype.renderPoint = function (point, series, chart, options) {\n var direction = this.getSegmentData(point, series, chart);\n point.midAngle = 0;\n options.d = direction;\n };\n /**\n * To get the module name of the funnel series.\n */\n FunnelSeries.prototype.getModuleName = function () {\n return 'FunnelSeries';\n };\n /**\n * To destroy the funnel series.\n * @return {void}\n * @private\n */\n FunnelSeries.prototype.destroy = function (accumulation) {\n /**\n * Destroys the funnel series\n */\n };\n return FunnelSeries;\n}(TriangularBase));\nexport { FunnelSeries };\n","/**\n * Defines the behavior of a pyramid series\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { TriangularBase } from './triangular-base';\n/**\n * PyramidSeries module used to render `Pyramid` Series.\n */\nvar PyramidSeries = /** @class */ (function (_super) {\n __extends(PyramidSeries, _super);\n function PyramidSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Defines the path of a pyramid segment\n */\n PyramidSeries.prototype.getSegmentData = function (point, series, chart) {\n var area = series.triangleSize;\n //top of th series\n var seriesTop = chart.initialClipRect.y + (chart.initialClipRect.height - area.height) / 2;\n var points = [];\n //consider, if the point is exploded\n var offset = 0;\n var extraSpace = (chart.initialClipRect.width - series.triangleSize.width) / 2;\n var emptySpaceAtLeft = extraSpace + chart.initialClipRect.x;\n //top and bottom\n var top = point.yRatio;\n var bottom = point.yRatio + point.heightRatio;\n //width of the top and bottom edge\n var topRadius = 0.5 * (1 - point.yRatio);\n var bottomRadius = 0.5 * (1 - bottom);\n top += seriesTop / area.height;\n bottom += seriesTop / area.height;\n var line1 = {\n x: emptySpaceAtLeft + offset + topRadius * area.width,\n y: top * area.height\n };\n var line2 = {\n x: emptySpaceAtLeft + offset + (1 - topRadius) * area.width,\n y: top * area.height\n };\n var line3 = {\n x: emptySpaceAtLeft + offset + (1 - bottomRadius) * area.width,\n y: bottom * area.height\n };\n var line4 = {\n x: emptySpaceAtLeft + offset + bottomRadius * area.width,\n y: bottom * area.height\n };\n var polygon = [line1, line2, line3, line4];\n this.setLabelLocation(series, point, polygon);\n var direction = this.findPath(polygon);\n return direction;\n };\n /**\n * Initializes the size of the pyramid segments\n * @private\n */\n PyramidSeries.prototype.initializeSizeRatio = function (points, series) {\n if (series.pyramidMode === 'Linear') {\n _super.prototype.initializeSizeRatio.call(this, points, series, true);\n }\n else {\n this.calculateSurfaceSegments(series);\n }\n };\n /**\n * Defines the size of the pyramid segments, the surface of that will reflect the values\n */\n PyramidSeries.prototype.calculateSurfaceSegments = function (series) {\n var count = series.points.length;\n var sumOfValues = series.sumOfPoints;\n var yRatio = 0;\n var y = [];\n var height = [];\n var gapRatio = Math.min(0, Math.max(series.gapRatio, 1));\n var gapHeight = gapRatio / (count - 1);\n var preSum = this.getSurfaceHeight(0, sumOfValues);\n var currY = 0;\n for (var i = 0; i < count; i++) {\n if (series.points[i].visible) {\n y[i] = currY;\n height[i] = this.getSurfaceHeight(currY, Math.abs(series.points[i].y));\n currY += height[i] + gapHeight * preSum;\n }\n }\n var coef = 1 / (currY - gapHeight * preSum);\n for (var i = 0; i < count; i++) {\n if (series.points[i].visible) {\n series.points[i].yRatio = coef * y[i];\n series.points[i].heightRatio = coef * height[i];\n }\n }\n };\n /**\n * Finds the height of pyramid segment\n */\n PyramidSeries.prototype.getSurfaceHeight = function (y, surface) {\n var result = this.solveQuadraticEquation(1, 2 * y, -surface);\n return result;\n };\n /**\n * Solves quadratic equation\n */\n PyramidSeries.prototype.solveQuadraticEquation = function (a, b, c) {\n var root1;\n var root2;\n var d = b * b - 4 * a * c;\n if (d >= 0) {\n var sd = Math.sqrt(d);\n root1 = (-b - sd) / (2 * a);\n root2 = (-b + sd) / (2 * a);\n return Math.max(root1, root2);\n }\n return 0;\n };\n /**\n * Renders a pyramid segment\n */\n PyramidSeries.prototype.renderPoint = function (point, series, chart, options) {\n var direction = this.getSegmentData(point, series, chart);\n point.midAngle = 0;\n options.d = direction;\n };\n /**\n * To get the module name of the Pyramid series.\n */\n PyramidSeries.prototype.getModuleName = function () {\n return 'PyramidSeries';\n };\n /**\n * To destroy the pyramid series\n * @return {void}\n * @private\n */\n PyramidSeries.prototype.destroy = function (accumulation) {\n /**\n * Destroys the pyramid series\n */\n };\n return PyramidSeries;\n}(TriangularBase));\nexport { PyramidSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * AccumulationChart legend\n */\nimport { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { pointByIndex } from '../model/acc-base';\nimport { BaseLegend, LegendOptions } from '../../common/legend/legend';\nimport { Rect, measureText, textTrim } from '../../common/utils/helper';\n/**\n * AccumulationLegend module used to render `Legend` for Accumulation chart.\n */\nvar AccumulationLegend = /** @class */ (function (_super) {\n __extends(AccumulationLegend, _super);\n /**\n * Constructor for Accumulation Legend.\n * @param chart\n */\n function AccumulationLegend(chart) {\n var _this = _super.call(this, chart) || this;\n _this.library = _this;\n _this.titleRect = new Rect(0, chart.margin.top, 0, 0);\n return _this;\n }\n /**\n * Get the legend options.\n * @return {void}\n * @private\n */\n AccumulationLegend.prototype.getLegendOptions = function (chart, series) {\n this.legendCollections = [];\n for (var i = 0; i < 1; i++) {\n var seriesType = series[i].type;\n if (seriesType === 'Pie' || seriesType === 'Doughnut') {\n seriesType = (series[i].innerRadius !== '0' && series[i].innerRadius !== '0%') ?\n 'Doughnut' : 'Pie';\n }\n for (var _i = 0, _a = series[i].points; _i < _a.length; _i++) {\n var point = _a[_i];\n if (!isNullOrUndefined(point.x) && !isNullOrUndefined(point.y)) {\n this.legendCollections.push(new LegendOptions(point.x.toString(), point.color, series[i].legendShape, point.visible, seriesType, null, null, point.index, series[i].index));\n }\n }\n }\n };\n /**\n * To find legend bounds for accumulation chart.\n * @private\n */\n AccumulationLegend.prototype.getLegendBounds = function (availableSize, legendBounds, legend) {\n var extraWidth = 0;\n var extraHeight = 0;\n var padding = legend.padding;\n if (!this.isVertical) {\n extraHeight = !legend.height ? ((availableSize.height / 100) * 5) : 0;\n }\n else {\n extraWidth = !legend.width ? ((availableSize.width / 100) * 5) : 0;\n }\n legendBounds.width += extraWidth;\n legendBounds.height += extraHeight;\n var shapePadding = legend.shapePadding;\n var maximumWidth = 0;\n var shapeWidth = legend.shapeWidth;\n var rowWidth = 0;\n var rowCount = 0;\n var columnWidth = [];\n var columnHeight = 0;\n var legendWidth = 0;\n this.maxItemHeight = Math.max(measureText('MeasureText', legend.textStyle).height, legend.shapeHeight);\n var legendEventArgs;\n var render = false;\n for (var _i = 0, _a = this.legendCollections; _i < _a.length; _i++) {\n var legendOption = _a[_i];\n legendEventArgs = { fill: legendOption.fill, text: legendOption.text, shape: legendOption.shape,\n name: 'legendRender', cancel: false };\n this.chart.trigger('legendRender', legendEventArgs);\n legendOption.render = !legendEventArgs.cancel;\n legendOption.text = legendEventArgs.text;\n legendOption.fill = legendEventArgs.fill;\n legendOption.shape = legendEventArgs.shape;\n legendOption.textSize = measureText(legendOption.text, legend.textStyle);\n if (legendOption.render && legendOption.text !== '') {\n render = true;\n legendWidth = shapeWidth + shapePadding + legendOption.textSize.width + padding;\n if (this.isVertical) {\n ++rowCount;\n columnHeight = (rowCount * (this.maxItemHeight + padding)) + padding;\n if ((rowCount * (this.maxItemHeight + padding)) + padding > legendBounds.height) {\n columnHeight = Math.max(columnHeight, (rowCount * (this.maxItemHeight + padding)) + padding);\n rowWidth = rowWidth + maximumWidth;\n columnWidth.push(maximumWidth);\n this.totalPages = Math.max(rowCount, this.totalPages || 1);\n maximumWidth = 0;\n rowCount = 1;\n }\n maximumWidth = Math.max(legendWidth, maximumWidth);\n }\n else {\n rowWidth = rowWidth + legendWidth;\n if (legendBounds.width < (padding + rowWidth)) {\n maximumWidth = Math.max(maximumWidth, (rowWidth + padding - legendWidth));\n if (rowCount === 0 && (legendWidth !== rowWidth)) {\n rowCount = 1;\n }\n rowWidth = legendWidth;\n rowCount++;\n columnHeight = (rowCount * (this.maxItemHeight + padding)) + padding;\n }\n }\n }\n }\n if (this.isVertical) {\n rowWidth = rowWidth + maximumWidth;\n this.isPaging = legendBounds.width < (rowWidth + padding);\n columnHeight = Math.max(columnHeight, ((this.totalPages || 1) * (this.maxItemHeight + padding)) + padding);\n this.isPaging = this.isPaging && (this.totalPages > 1);\n if (columnWidth[columnWidth.length - 1] !== maximumWidth) {\n columnWidth.push(maximumWidth);\n }\n }\n else {\n this.isPaging = legendBounds.height < columnHeight;\n this.totalPages = this.totalRowCount = rowCount;\n columnHeight = Math.max(columnHeight, (this.maxItemHeight + padding) + padding);\n }\n this.maxColumns = 0; // initialization for max columns\n var width = this.isVertical ? this.getMaxColumn(columnWidth, legendBounds.width, padding, rowWidth + padding) :\n Math.max(rowWidth + padding, maximumWidth);\n if (render) {\n this.setBounds(width, columnHeight, legend, legendBounds);\n }\n else {\n this.setBounds(0, 0, legend, legendBounds);\n }\n };\n /**\n * To find maximum column size for legend\n */\n AccumulationLegend.prototype.getMaxColumn = function (columns, width, padding, rowWidth) {\n var maxPageColumn = padding;\n this.maxColumnWidth = Math.max.apply(null, columns);\n for (var _i = 0, columns_1 = columns; _i < columns_1.length; _i++) {\n var column = columns_1[_i];\n maxPageColumn += this.maxColumnWidth;\n this.maxColumns++;\n if (maxPageColumn + padding > width) {\n maxPageColumn -= this.maxColumnWidth;\n this.maxColumns--;\n break;\n }\n }\n this.isPaging = (maxPageColumn < rowWidth) && (this.totalPages > 1);\n if (maxPageColumn === padding) {\n maxPageColumn = width;\n }\n this.maxColumns = Math.max(1, this.maxColumns);\n this.maxWidth = maxPageColumn;\n return maxPageColumn;\n };\n /**\n * To find available width from legend x position.\n */\n AccumulationLegend.prototype.getAvailWidth = function (tx, width, legendX) {\n if (this.isVertical) {\n width = this.maxWidth;\n }\n return width - ((this.legend.padding * 2) + this.legend.shapeWidth + this.legend.shapePadding);\n };\n /**\n * To find legend rendering locations from legend options.\n * @private\n */\n AccumulationLegend.prototype.getRenderPoint = function (legendOption, start, textPadding, prevLegend, rect, count, firstLegend) {\n var padding = this.legend.padding;\n if (this.isVertical) {\n if (count === firstLegend || (prevLegend.location.y + (this.maxItemHeight * 1.5) + (padding * 2) > rect.y + rect.height)) {\n legendOption.location.x = prevLegend.location.x + ((count === firstLegend) ? 0 : this.maxColumnWidth);\n legendOption.location.y = start.y;\n this.pageXCollections.push(legendOption.location.x - (this.legend.shapeWidth / 2) - padding);\n this.totalPages++;\n }\n else {\n legendOption.location.x = prevLegend.location.x;\n legendOption.location.y = prevLegend.location.y + this.maxItemHeight + padding;\n }\n }\n else {\n var previousBound = (prevLegend.location.x + textPadding + prevLegend.textSize.width);\n if ((previousBound + (legendOption.textSize.width + textPadding)) > (rect.x + rect.width + this.legend.shapeWidth / 2)) {\n legendOption.location.y = (count === firstLegend) ? prevLegend.location.y :\n prevLegend.location.y + this.maxItemHeight + padding;\n legendOption.location.x = start.x;\n }\n else {\n legendOption.location.y = prevLegend.location.y;\n legendOption.location.x = (count === firstLegend) ? prevLegend.location.x : previousBound;\n }\n this.totalPages = this.totalRowCount;\n }\n var availablewidth = this.getAvailWidth(legendOption.location.x, this.legendBounds.width, this.legendBounds.x);\n legendOption.text = textTrim(+availablewidth.toFixed(4), legendOption.text, this.legend.textStyle);\n };\n /**\n * finding the smart legend place according to positions.\n * @return {void}\n * @private\n */\n AccumulationLegend.prototype.getSmartLegendLocation = function (labelBound, legendBound, margin) {\n var space;\n switch (this.position) {\n case 'Left':\n space = ((labelBound.x - legendBound.width) - margin.left) / 2;\n legendBound.x = (labelBound.x - legendBound.width) < margin.left ? legendBound.x :\n (labelBound.x - legendBound.width) - space;\n break;\n case 'Right':\n space = ((this.chart.availableSize.width - margin.right) - (labelBound.x + labelBound.width + legendBound.width)) / 2;\n legendBound.x = (labelBound.x + labelBound.width + legendBound.width) > (this.chart.availableSize.width - margin.right) ?\n legendBound.x : (labelBound.x + labelBound.width + space);\n break;\n case 'Top':\n this.getTitleRect(this.chart);\n space = ((labelBound.y - legendBound.height) - (this.titleRect.y + this.titleRect.height)) / 2;\n legendBound.y = (labelBound.y - legendBound.height) < margin.top ? legendBound.y :\n (labelBound.y - legendBound.height) - space;\n break;\n case 'Bottom':\n space = ((this.chart.availableSize.height - margin.bottom) - (labelBound.y + labelBound.height + legendBound.height)) / 2;\n legendBound.y = labelBound.y + labelBound.height + legendBound.height > (this.chart.availableSize.height - margin.bottom) ?\n legendBound.y : (labelBound.y + labelBound.height) + space;\n break;\n }\n };\n /**\n * To get title rect.\n */\n AccumulationLegend.prototype.getTitleRect = function (accumulation) {\n if (!accumulation.title) {\n return null;\n }\n var titleSize = measureText(accumulation.title, accumulation.titleStyle);\n this.titleRect = new Rect(accumulation.availableSize.width / 2 - titleSize.width / 2, accumulation.margin.top, titleSize.width, titleSize.height);\n };\n /**\n * To get legend by index\n */\n AccumulationLegend.prototype.legendByIndex = function (index, legendCollections) {\n for (var _i = 0, legendCollections_1 = legendCollections; _i < legendCollections_1.length; _i++) {\n var legend = legendCollections_1[_i];\n if (legend.pointIndex === index) {\n return legend;\n }\n }\n return null;\n };\n /**\n * To show or hide the legend on clicking the legend.\n * @return {void}\n */\n AccumulationLegend.prototype.click = function (event) {\n var targetId = event.target.id;\n var legendItemsId = [this.legendID + '_text_', this.legendID + '_shape_',\n this.legendID + '_shape_marker_'];\n var selectedDataIndexes = [];\n if (this.chart.accumulationSelectionModule) {\n selectedDataIndexes = extend([], this.chart.accumulationSelectionModule.selectedDataIndexes, null, true);\n }\n for (var _i = 0, legendItemsId_1 = legendItemsId; _i < legendItemsId_1.length; _i++) {\n var id = legendItemsId_1[_i];\n if (targetId.indexOf(id) > -1) {\n var pointIndex = parseInt(targetId.split(id)[1], 10);\n var currentSeries = this.chart.visibleSeries[0];\n var point = pointByIndex(pointIndex, currentSeries.points);\n var legendOption = this.legendByIndex(pointIndex, this.legendCollections);\n if (this.chart.legendSettings.toggleVisibility) {\n point.visible = !point.visible;\n legendOption.visible = point.visible;\n this.chart.removeSvg();\n if (point.visible) {\n currentSeries.sumOfPoints += point.y;\n }\n else {\n currentSeries.sumOfPoints -= point.y;\n }\n this.chart.refreshPoints(currentSeries.points);\n this.chart.renderElements();\n }\n else if (this.chart.accumulationSelectionModule) {\n this.chart.accumulationSelectionModule.legendSelection(this.chart, 0, pointIndex);\n }\n }\n }\n if (targetId.indexOf(this.legendID + '_pageup') > -1) {\n this.changePage(event, true);\n }\n else if (targetId.indexOf(this.legendID + '_pagedown') > -1) {\n this.changePage(event, false);\n }\n };\n /**\n * Get module name\n */\n AccumulationLegend.prototype.getModuleName = function () {\n return 'AccumulationLegend';\n };\n /**\n * To destroy the Legend.\n * @return {void}\n * @private\n */\n AccumulationLegend.prototype.destroy = function (chart) {\n /**\n * Destroy method calling here\n */\n };\n return AccumulationLegend;\n}(BaseLegend));\nexport { AccumulationLegend };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * AccumulationChart DataLabel module file\n */\nimport { extend, createElement } from '@syncfusion/ej2-base';\nimport { ChartLocation, degreeToLocation, Rect, isOverlap, stringToNumber, getAngle, TextOption } from '../../common/utils/helper';\nimport { textTrim, subtractThickness, Thickness, getElement } from '../../common/utils/helper';\nimport { removeElement, measureText, RectOption, textElement, showTooltip } from '../../common/utils/helper';\nimport { PathOption, colorNameToHex, convertHexToColor, containsRect } from '../../common/utils/helper';\nimport { getSeriesFromIndex } from '../model/acc-base';\nimport { textRender } from '../../common/model/constants';\nimport { getFontStyle, createTemplate, measureElementRect, templateAnimate } from '../../common/utils/helper';\nimport { AccumulationBase } from './accumulation-base';\n/**\n * AccumulationDataLabel module used to render `dataLabel`.\n */\nvar AccumulationDataLabel = /** @class */ (function (_super) {\n __extends(AccumulationDataLabel, _super);\n function AccumulationDataLabel(accumulation) {\n var _this = _super.call(this, accumulation) || this;\n _this.id = accumulation.element.id + '_datalabel_Series_';\n if (accumulation.title) {\n var titleSize = measureText(accumulation.title, accumulation.titleStyle);\n _this.titleRect = new Rect(accumulation.availableSize.width / 2 - titleSize.width / 2, accumulation.margin.top, titleSize.width, titleSize.height);\n }\n return _this;\n }\n /**\n * Method to get datalabel text location.\n * @private\n */\n AccumulationDataLabel.prototype.getDataLabelPosition = function (point, dataLabel, textSize, points, parent, id) {\n var radius = this.isCircular() ? this.labelRadius : this.getLabelDistance(point, dataLabel);\n this.getLabelRegion(point, dataLabel.position, textSize, radius, this.marginValue);\n point.labelAngle = point.midAngle;\n point.labelPosition = dataLabel.position;\n if (this.accumulation.enableSmartLabels) {\n this.getSmartLabel(point, dataLabel, textSize, points, parent, id);\n }\n };\n /**\n * Method to get datalabel bound.\n */\n AccumulationDataLabel.prototype.getLabelRegion = function (point, position, textSize, labelRadius, margin, endAngle) {\n if (endAngle === void 0) { endAngle = 0; }\n var labelAngle = endAngle || point.midAngle;\n var space = 10;\n var location = degreeToLocation(labelAngle, labelRadius, this.isCircular() ? this.center :\n this.getLabelLocation(point, position));\n location.y = (position === 'Inside') ? (location.y - textSize.height / 2) : location.y;\n location.x = (position === 'Inside') ? (location.x - textSize.width / 2) : location.x;\n point.labelRegion = new Rect(location.x, location.y, textSize.width + (margin * 2), textSize.height + (margin * 2));\n if (position === 'Outside') {\n point.labelRegion.y -= point.labelRegion.height / 2;\n if (labelAngle >= 90 && labelAngle <= 270) {\n point.labelRegion.x -= (point.labelRegion.width + space);\n }\n else {\n point.labelRegion.x += space;\n }\n }\n };\n /**\n * Method to get datalabel smart position.\n */\n AccumulationDataLabel.prototype.getSmartLabel = function (point, dataLabel, textSize, points, parent, id) {\n var circular = this.isCircular();\n var labelRadius = circular ? this.radius : this.getLabelDistance(point, dataLabel);\n var connectorLength = circular ? (dataLabel.connectorStyle.length || '4%') :\n '0px';\n labelRadius += stringToNumber(connectorLength, labelRadius);\n var previousPoint = this.findPreviousPoint(points, point.index, point.labelPosition);\n if (dataLabel.position === 'Inside') {\n if (previousPoint && previousPoint.labelRegion && (isOverlap(point.labelRegion, previousPoint.labelRegion)\n || this.isOverlapping(point, points)) || !circular && !containsRect(point.region, point.labelRegion)) {\n point.labelPosition = 'Outside';\n if (!circular) {\n labelRadius = this.getLabelDistance(point, dataLabel);\n }\n this.getLabelRegion(point, point.labelPosition, textSize, labelRadius, this.marginValue);\n previousPoint = this.findPreviousPoint(points, point.index, point.labelPosition);\n if (previousPoint && (isOverlap(point.labelRegion, previousPoint.labelRegion) ||\n this.isConnectorLineOverlapping(point, previousPoint))) {\n this.setOuterSmartLabel(previousPoint, point, dataLabel.border.width, labelRadius, textSize, this.marginValue);\n }\n }\n }\n else {\n if (previousPoint && previousPoint.labelRegion && (isOverlap(point.labelRegion, previousPoint.labelRegion)\n || this.isOverlapping(point, points) || this.isConnectorLineOverlapping(point, previousPoint))) {\n this.setOuterSmartLabel(previousPoint, point, dataLabel.border.width, labelRadius, textSize, this.marginValue);\n }\n }\n if (this.isOverlapping(point, points) || (this.titleRect && point.labelRegion && isOverlap(point.labelRegion, this.titleRect))) {\n this.setPointVisibileFalse(point);\n }\n if (this.accumulation.accumulationLegendModule && point.labelVisible && point.labelRegion) {\n var rect = this.accumulation.accumulationLegendModule.legendBounds;\n var padding = this.accumulation.legendSettings.border.width / 2;\n this.textTrimming(point, new Rect(rect.x - padding, rect.y - padding, rect.width + (2 * padding), rect.height + (2 * padding)), dataLabel.font, this.accumulation.accumulationLegendModule.position);\n }\n if (point.labelVisible && point.labelRegion) {\n var position = this.isCircular() ? (point.labelRegion.x >= this.center.x) ? 'InsideRight' : 'InsideLeft' :\n 'InsideRight';\n this.textTrimming(point, this.areaRect, dataLabel.font, position);\n }\n if (point.labelVisible && point.labelRegion && ((point.labelRegion.y + point.labelRegion.height >\n this.areaRect.y + this.areaRect.height || point.labelRegion.y < this.areaRect.y) || (point.labelRegion.x < this.areaRect.x ||\n point.labelRegion.x + point.labelRegion.width > this.areaRect.x + this.areaRect.width))) {\n this.setPointVisibileFalse(point);\n }\n };\n /**\n * To find trimmed datalabel tooltip needed.\n * @return {void}\n * @private\n */\n AccumulationDataLabel.prototype.move = function (e, x, y, isTouch) {\n var _this = this;\n if (e.target.textContent.indexOf('...') > -1) {\n var targetId = e.target.id.split(this.id);\n if (targetId.length === 2) {\n var seriesIndex = parseInt(targetId[1].split('_text_')[0], 10);\n var pointIndex = parseInt(targetId[1].split('_text_')[1], 10);\n if (!isNaN(seriesIndex) && !isNaN(pointIndex)) {\n if (isTouch) {\n removeElement(this.accumulation.element.id + '_EJ2_Datalabel_Tooltip');\n }\n var point = getSeriesFromIndex(seriesIndex, (this.accumulation).visibleSeries).points[pointIndex];\n showTooltip(point.text || point.y.toString(), x, y, this.areaRect.width, this.accumulation.element.id + '_EJ2_Datalabel_Tooltip', getElement(this.accumulation.element.id + '_Secondary_Element'));\n }\n }\n }\n else {\n removeElement(this.accumulation.element.id + '_EJ2_Datalabel_Tooltip');\n }\n if (isTouch) {\n clearTimeout(this.clearTooltip);\n this.clearTooltip = setTimeout(function () { removeElement(_this.accumulation.element.id + '_EJ2_Datalabel_Tooltip'); }, 1000);\n }\n };\n /**\n * To find previous valid label point\n */\n AccumulationDataLabel.prototype.findPreviousPoint = function (points, index, position) {\n var point = points[0];\n for (var i = index - 1; i >= 0; i--) {\n point = points[i];\n if (point.visible && point.labelVisible && point.labelRegion && point.labelPosition === position) {\n return point;\n }\n }\n return null;\n };\n /**\n * To find current point datalabel is overlapping with other points\n */\n AccumulationDataLabel.prototype.isOverlapping = function (currentPoint, points) {\n for (var i = currentPoint.index - 1; i >= 0; i--) {\n if (points[i].visible && points[i].labelVisible && points[i].labelRegion && currentPoint.labelRegion &&\n currentPoint.labelVisible && isOverlap(currentPoint.labelRegion, points[i].labelRegion)) {\n return true;\n }\n }\n return false;\n };\n /**\n * To get text trimmed while exceeds the accumulation chart area.\n */\n AccumulationDataLabel.prototype.textTrimming = function (point, rect, font, position) {\n if (isOverlap(point.labelRegion, rect)) {\n var size = point.labelRegion.width;\n if (position === 'Right') {\n size = rect.x - point.labelRegion.x;\n }\n else if (position === 'Left') {\n size = point.labelRegion.x - (rect.x + rect.width);\n if (size < 0) {\n size += point.labelRegion.width;\n point.labelRegion.x = rect.x + rect.width;\n }\n }\n else if (position === 'InsideRight') {\n size = (rect.x + rect.width) - point.labelRegion.x;\n }\n else if (position === 'InsideLeft') {\n size = (point.labelRegion.x + point.labelRegion.width) - rect.x;\n if (size < point.labelRegion.width) {\n point.labelRegion.x = rect.x;\n }\n }\n else {\n this.setPointVisibileFalse(point);\n }\n if (point.labelVisible && point.labelRegion) {\n if (size < point.labelRegion.width) {\n point.label = textTrim(size - (this.marginValue * 2), point.label, font);\n point.labelRegion.width = size;\n }\n if (point.label.length === 3 && point.label.indexOf('...') > -1) {\n this.setPointVisibileFalse(point);\n }\n }\n }\n };\n /**\n * To set point label visible and region to disable.\n */\n AccumulationDataLabel.prototype.setPointVisibileFalse = function (point) {\n point.labelVisible = false;\n point.labelRegion = null;\n };\n /**\n * To set datalabel angle position for outside labels\n */\n AccumulationDataLabel.prototype.setOuterSmartLabel = function (previousPoint, point, border, labelRadius, textsize, margin) {\n if (!this.isCircular()) {\n this.setSmartLabelForSegments(point, previousPoint, labelRadius, textsize, margin);\n }\n else {\n var labelAngle = this.getOverlappedAngle(previousPoint.labelRegion, point.labelRegion, point.midAngle, border * 2);\n this.getLabelRegion(point, 'Outside', textsize, labelRadius, margin, labelAngle);\n if (labelAngle > point.endAngle) {\n this.setPointVisibileFalse(point);\n }\n point.labelAngle = labelAngle;\n while (point.labelVisible && (isOverlap(previousPoint.labelRegion, point.labelRegion) || labelAngle <= previousPoint.labelAngle\n || this.isConnectorLineOverlapping(point, previousPoint))) {\n if (labelAngle > point.endAngle) {\n this.setPointVisibileFalse(point);\n break;\n }\n point.labelAngle = labelAngle;\n this.getLabelRegion(point, 'Outside', textsize, labelRadius, margin, labelAngle);\n labelAngle += 0.1;\n }\n }\n };\n /**\n * Sets smart label positions for funnel and pyramid series\n */\n AccumulationDataLabel.prototype.setSmartLabelForSegments = function (point, prevPoint, distance, textSize, margin) {\n var textRegion = point.labelRegion;\n //let overlapWidth: number = prevPoint.labelRegion.x + prevPoint.labelRegion.width - textRegion.x;\n var overlapHeight = this.accumulation.type === 'Funnel' ?\n prevPoint.labelRegion.y - (textRegion.y + textRegion.height) :\n point.labelRegion.y - (prevPoint.labelRegion.y + prevPoint.labelRegion.height);\n if (overlapHeight < 0) {\n point.labelRegion.y += this.accumulation.type === 'Funnel' ? overlapHeight : -overlapHeight;\n }\n };\n /**\n * To find connector line overlapping.\n */\n AccumulationDataLabel.prototype.isConnectorLineOverlapping = function (point, previous) {\n var start = this.getLabelLocation(point);\n var end = new ChartLocation(0, 0);\n this.getEdgeOfLabel(point.labelRegion, point.labelAngle, end);\n var previousstart = this.getLabelLocation(previous);\n var previousend = new ChartLocation(0, 0);\n this.getEdgeOfLabel(previous.labelRegion, previous.labelAngle, previousend);\n return this.isLineRectangleIntersect(start, end, point.labelRegion) ||\n this.isLineRectangleIntersect(start, end, previous.labelRegion) ||\n this.isLineRectangleIntersect(previousstart, previousend, point.labelRegion);\n };\n /**\n * To find two rectangle intersect\n */\n AccumulationDataLabel.prototype.isLineRectangleIntersect = function (line1, line2, rect) {\n var rectPoints = [\n new ChartLocation(Math.round(rect.x), Math.round(rect.y)),\n new ChartLocation(Math.round((rect.x + rect.width)), Math.round(rect.y)),\n new ChartLocation(Math.round((rect.x + rect.width)), Math.round((rect.y + rect.height))),\n new ChartLocation(Math.round(rect.x), Math.round((rect.y + rect.height)))\n ];\n line1.x = Math.round(line1.x);\n line1.y = Math.round(line1.y);\n line2.x = Math.round(line2.x);\n line2.y = Math.round(line2.y);\n for (var i = 0; i < rectPoints.length; i++) {\n if (this.isLinesIntersect(line1, line2, rectPoints[i], rectPoints[(i + 1) % rectPoints.length])) {\n return true;\n }\n }\n return false;\n };\n /**\n * To find two line intersect\n */\n AccumulationDataLabel.prototype.isLinesIntersect = function (point1, point2, point11, point12) {\n var a1 = point2.y - point1.y;\n var b1 = point1.x - point2.x;\n var c1 = a1 * point1.x + b1 * point1.y;\n var a2 = point12.y - point11.y;\n var b2 = point11.x - point12.x;\n var c2 = a2 * point11.x + b2 * point11.y;\n var delta = a1 * b2 - a2 * b1;\n if (delta !== 0) {\n var x = (b2 * c1 - b1 * c2) / delta;\n var y = (a1 * c2 - a2 * c1) / delta;\n var lies = Math.min(point1.x, point2.x) <= x && x <= Math.max(point1.x, point2.x);\n lies = lies && Math.min(point1.y, point2.y) <= y && y <= Math.max(point1.y, point2.y);\n lies = lies && Math.min(point11.x, point12.x) <= x && x <= Math.max(point11.x, point12.x);\n lies = lies && Math.min(point11.y, point12.y) <= y && y <= Math.max(point11.y, point12.y);\n return lies;\n }\n return false;\n };\n /**\n * To get two rectangle overlapping angles.\n */\n AccumulationDataLabel.prototype.getOverlappedAngle = function (first, second, angle, padding) {\n var x = first.x;\n if (angle >= 90 && angle <= 270) {\n second.y = first.y - (padding + second.height / 2);\n x = first.x + first.width;\n }\n else {\n second.y = first.y + first.height + padding;\n }\n return getAngle(this.center, new ChartLocation(x, second.y));\n };\n /**\n * To get connector line path\n */\n AccumulationDataLabel.prototype.getConnectorPath = function (label, point, dataLabel, end) {\n if (end === void 0) { end = 0; }\n var connector = dataLabel.connectorStyle;\n var labelRadius = this.isCircular() ? this.labelRadius : this.getLabelDistance(point, dataLabel);\n var start = this.getConnectorStartPoint(point, connector);\n var labelAngle = end || point.midAngle;\n var middle = new ChartLocation(0, 0);\n var endPoint = this.getEdgeOfLabel(label, labelAngle, middle, connector.width);\n if (connector.type === 'Curve') {\n if (this.isCircular()) {\n var r = labelRadius - this.radius;\n middle = degreeToLocation(labelAngle, labelRadius - (r / 2), this.center);\n return 'M ' + start.x + ' ' + start.y + ' Q' + middle.x + ',' + middle.y + ' ' + endPoint.x + ',' + endPoint.y;\n }\n else {\n return this.getPolyLinePath(start, endPoint);\n }\n }\n else {\n return 'M ' + start.x + ' ' + start.y + ' L ' + middle.x + ' ' + middle.y + ' L ' + endPoint.x + ' ' + endPoint.y;\n }\n };\n /**\n * Finds the curved path for funnel/pyramid data label connectors\n */\n AccumulationDataLabel.prototype.getPolyLinePath = function (start, end) {\n var controlPoints = [start, end];\n if (start.y === end.y) {\n return 'M ' + start.x + ' ' + start.y + ' L ' + end.x + ' ' + end.y;\n }\n var path = 'M';\n for (var i = 0; i <= 16; i++) {\n var t = i / 16;\n var points = this.getBezierPoint(t, controlPoints, 0, 2);\n path += points.x + ',' + points.y;\n if (i !== 16) {\n path += ' L';\n }\n }\n return path;\n };\n /**\n * Finds the bezier point for funnel/pyramid data label connectors\n */\n AccumulationDataLabel.prototype.getBezierPoint = function (t, controlPoints, index, count) {\n if (count === 1) {\n return controlPoints[index];\n }\n var p0 = this.getBezierPoint(t, controlPoints, index, count - 1);\n var p1 = this.getBezierPoint(t, controlPoints, index + 1, count - 1);\n var x = (p0.x) ? p0.x : p0.x;\n var y = (p0.y) ? p0.y : p0.y;\n var x1 = (p1.x) ? p1.x : p1.x;\n var y1 = (p1.y) ? p1.y : p1.y;\n var x2 = (1 - t) * x + t * x1;\n var y2 = (1 - t) * y + t * y1;\n if (p0.x) {\n return { x: x2, y: y2 };\n }\n else {\n return { x: x2, y: y2 };\n }\n };\n /**\n * To get label edges based on the center and label rect position.\n */\n AccumulationDataLabel.prototype.getEdgeOfLabel = function (labelshape, angle, middle, border) {\n if (border === void 0) { border = 1; }\n var edge = new ChartLocation(labelshape.x, labelshape.y);\n if (angle >= 90 && angle <= 270) {\n edge.x += labelshape.width + border / 2;\n edge.y += labelshape.height / 2;\n middle.x = edge.x + 10;\n middle.y = edge.y;\n }\n else {\n edge.x -= border / 2;\n edge.y += labelshape.height / 2;\n middle.x = edge.x - 10;\n middle.y = edge.y;\n }\n return edge;\n };\n /**\n * Finds the distance between the label position and the edge/center of the funnel/pyramid\n */\n AccumulationDataLabel.prototype.getLabelDistance = function (point, dataLabel) {\n if (point.labelPosition && dataLabel.position !== point.labelPosition || dataLabel.connectorStyle.length) {\n var length_1 = stringToNumber(dataLabel.connectorStyle.length || '70px', this.accumulation.initialClipRect.width);\n if (length_1 < this.accumulation.initialClipRect.width) {\n return length_1;\n }\n }\n var position = point.labelPosition || dataLabel.position;\n var series = this.accumulation.visibleSeries[0];\n var extraSpace = (this.accumulation.initialClipRect.width - series.triangleSize.width) / 2;\n var labelLocation;\n switch (position) {\n case 'Inside':\n return 0;\n case 'Outside':\n labelLocation = point.symbolLocation.x + point.labelOffset.x;\n return this.accumulation.initialClipRect.width - labelLocation - extraSpace;\n }\n };\n /**\n * Finds the label position / beginning of the connector(ouside funnel labels)\n */\n AccumulationDataLabel.prototype.getLabelLocation = function (point, position) {\n if (position === void 0) { position = 'Outside'; }\n if (this.accumulation.type !== 'Pie') {\n position = point.labelPosition || position;\n var location_1 = {\n x: point.symbolLocation.x,\n y: point.symbolLocation.y - point.labelOffset.y\n };\n switch (position) {\n case 'Inside':\n location_1.y = point.region.y + point.region.height / 2;\n break;\n case 'Outside':\n location_1.x += point.labelOffset.x;\n }\n return location_1;\n }\n else {\n return degreeToLocation(point.midAngle, this.radius, this.center);\n }\n };\n /**\n * Finds the beginning of connector line\n */\n AccumulationDataLabel.prototype.getConnectorStartPoint = function (point, connector) {\n return this.isCircular() ? degreeToLocation(point.midAngle, this.radius - connector.width, this.center) :\n this.getLabelLocation(point);\n };\n /**\n * To find area rect based on margin, available size.\n * @private\n */\n AccumulationDataLabel.prototype.findAreaRect = function () {\n this.areaRect = new Rect(0, 0, this.accumulation.availableSize.width, this.accumulation.availableSize.height);\n var margin = this.accumulation.margin;\n subtractThickness(this.areaRect, new Thickness(margin.left, margin.right, margin.top, margin.bottom));\n };\n /**\n * To render the data labels from series points.\n */\n AccumulationDataLabel.prototype.renderDataLabel = function (point, dataLabel, parent, points, series, templateElement) {\n var id = this.accumulation.element.id + '_datalabel_Series_' + series + '_';\n var datalabelGroup = this.accumulation.renderer.createGroup({ id: id + 'g_' + point.index });\n point.label = point.originalText || point.y.toString();\n var border = { width: dataLabel.border.width, color: dataLabel.border.color };\n var argsData = {\n cancel: false, name: textRender, series: this.accumulation.visibleSeries[0], point: point,\n text: point.label, border: border, color: dataLabel.fill, template: dataLabel.template\n };\n this.accumulation.trigger(textRender, argsData);\n var isTemplate = argsData.template !== null;\n point.labelVisible = !argsData.cancel;\n point.text = point.label = argsData.text;\n this.marginValue = argsData.border.width ? (5 + argsData.border.width) : 1;\n // Template element\n var childElement = createElement('div', {\n id: this.accumulation.element.id + '_Series_' + 0 + '_DataLabel_' + point.index,\n styles: 'position: absolute;background-color:' + argsData.color + ';' +\n getFontStyle(dataLabel.font) + ';border:' + argsData.border.width + 'px solid ' + argsData.border.color + ';'\n });\n var textSize = isTemplate ? this.getTemplateSize(childElement, point, argsData) :\n measureText(point.label, dataLabel.font);\n textSize.height += 4; // 4 for calculation with padding for smart label shape\n textSize.width += 4;\n this.getDataLabelPosition(point, dataLabel, textSize, points, datalabelGroup, id);\n if (point.labelVisible) {\n this.correctLabelRegion(point.labelRegion, textSize);\n if (isTemplate) {\n this.setTemplateStyle(childElement, point, templateElement, dataLabel.font.color, argsData.color);\n }\n else {\n datalabelGroup.appendChild(this.accumulation.renderer.drawRectangle(new RectOption(id + 'shape_' + point.index, argsData.color, argsData.border, 1, point.labelRegion, dataLabel.rx, dataLabel.ry)));\n textElement(new TextOption(id + 'text_' + point.index, point.labelRegion.x + this.marginValue, point.labelRegion.y + (textSize.height * 3 / 4) + this.marginValue, 'start', point.label, '', 'auto'), dataLabel.font, dataLabel.font.color || this.getSaturatedColor(point, argsData.color), datalabelGroup);\n }\n if (this.accumulation.accumulationLegendModule && (dataLabel.position === 'Outside' || this.accumulation.enableSmartLabels)) {\n this.accumulation.visibleSeries[0].findMaxBounds(this.accumulation.visibleSeries[0].labelBound, point.labelRegion);\n }\n if (point.labelPosition === 'Outside') {\n var path = this.getConnectorPath(extend({}, point.labelRegion, null, true), point, dataLabel, point.labelAngle);\n var pathElement = this.accumulation.renderer.drawPath(new PathOption(id + 'connector_' + point.index, 'transparent', dataLabel.connectorStyle.width, dataLabel.connectorStyle.color || point.color, 1, '', path));\n datalabelGroup.appendChild(pathElement);\n }\n parent.appendChild(datalabelGroup);\n }\n };\n /**\n * To find the template element size\n * @param element\n * @param point\n * @param argsData\n */\n AccumulationDataLabel.prototype.getTemplateSize = function (element, point, argsData) {\n var clientRect;\n element = createTemplate(element, point.index, argsData.template, this.accumulation, point, this.accumulation.visibleSeries[0]);\n clientRect = measureElementRect(element);\n return { width: clientRect.width, height: clientRect.height };\n };\n /**\n * To set the template element style\n * @param childElement\n * @param point\n * @param parent\n * @param labelColor\n * @param fill\n */\n AccumulationDataLabel.prototype.setTemplateStyle = function (childElement, point, parent, labelColor, fill) {\n childElement.style.left = (point.labelRegion.x) + 'px';\n childElement.style.top = (point.labelRegion.y) + 'px';\n childElement.style.color = labelColor ||\n this.getSaturatedColor(point, fill);\n if (childElement.childElementCount) {\n parent.appendChild(childElement);\n this.doTemplateAnimation(this.accumulation, childElement);\n }\n };\n /**\n * To find saturated color for datalabel\n */\n AccumulationDataLabel.prototype.getSaturatedColor = function (point, color) {\n var saturatedColor;\n if (this.marginValue >= 1) {\n saturatedColor = color === 'transparent' ? this.getLabelBackground(point) : color;\n }\n else {\n saturatedColor = this.getLabelBackground(point);\n }\n saturatedColor = (saturatedColor === 'transparent') ? window.getComputedStyle(document.body, null).backgroundColor : saturatedColor;\n var rgbValue = convertHexToColor(colorNameToHex(saturatedColor));\n var contrast = Math.round((rgbValue.r * 299 + rgbValue.g * 587 + rgbValue.b * 114) / 1000);\n return contrast >= 128 ? 'black' : 'white';\n };\n /**\n * Animates the data label template.\n * @return {void}.\n * @private\n */\n AccumulationDataLabel.prototype.doTemplateAnimation = function (accumulation, element) {\n var series = accumulation.visibleSeries[0];\n var delay = series.animation.delay + series.animation.duration;\n if (series.animation.enable && accumulation.animateSeries) {\n element.style.visibility = 'hidden';\n templateAnimate(element, delay, 200, 'ZoomIn');\n }\n };\n /**\n * To find background color for the datalabel\n */\n AccumulationDataLabel.prototype.getLabelBackground = function (point) {\n return point.labelPosition === 'Outside' ?\n this.accumulation.background || this.accumulation.themeStyle.background : point.color;\n };\n /**\n * To correct the padding between datalabel regions.\n */\n AccumulationDataLabel.prototype.correctLabelRegion = function (labelRegion, textSize, padding) {\n if (padding === void 0) { padding = 4; }\n labelRegion.height -= padding;\n labelRegion.width -= padding;\n labelRegion.x += padding / 2;\n labelRegion.y += padding / 2;\n textSize.height -= padding;\n textSize.width -= padding;\n };\n /**\n * To get the dataLabel module name\n */\n AccumulationDataLabel.prototype.getModuleName = function () {\n return 'AccumulationDataLabel';\n };\n /**\n * To destroy the data label.\n * @return {void}\n * @private\n */\n AccumulationDataLabel.prototype.destroy = function (accumulation) {\n /**\n * Destroy method performed here\n */\n };\n return AccumulationDataLabel;\n}(AccumulationBase));\nexport { AccumulationDataLabel };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * AccumulationChart Tooltip file\n */\nimport { Browser } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { AccPointData, withInBounds, indexFinder } from '../../common/utils/helper';\nimport { BaseTooltip } from '../../common/user-interaction/tooltip';\n/**\n * `AccumulationTooltip` module is used to render tooltip for accumulation chart.\n */\nvar AccumulationTooltip = /** @class */ (function (_super) {\n __extends(AccumulationTooltip, _super);\n function AccumulationTooltip(accumulation) {\n var _this = _super.call(this, accumulation) || this;\n _this.accumulation = accumulation;\n _this.addEventListener();\n return _this;\n }\n /**\n * @hidden\n */\n AccumulationTooltip.prototype.addEventListener = function () {\n if (this.accumulation.isDestroyed) {\n return;\n }\n this.accumulation.on(Browser.isPointer ? 'pointerleave' : 'mouseleave', this.mouseLeaveHandler, this);\n this.accumulation.on(Browser.touchMoveEvent, this.mouseMoveHandler, this);\n this.accumulation.on(Browser.touchEndEvent, this.mouseUpHandler, this);\n };\n AccumulationTooltip.prototype.mouseLeaveHandler = function (e) {\n this.removeTooltip(1000);\n };\n AccumulationTooltip.prototype.mouseUpHandler = function (e) {\n var control = this.accumulation;\n if (control.tooltip.enable && control.isTouch && withInBounds(control.mouseX, control.mouseY, control.initialClipRect)) {\n this.tooltip(e);\n this.removeTooltip(2000);\n }\n };\n AccumulationTooltip.prototype.mouseMoveHandler = function (e) {\n var control = this.accumulation;\n // Tooltip for chart series. \n if (control.tooltip.enable && withInBounds(control.mouseX, control.mouseY, control.initialClipRect)) {\n this.tooltip(e);\n }\n };\n /**\n * Renders the tooltip.\n * @param {PointerEvent} event - Mouse move event.\n * @return {void}\n */\n AccumulationTooltip.prototype.tooltip = function (event) {\n var svgElement = this.getElement(this.element.id + '_tooltip_svg');\n var isTooltip = svgElement && parseInt(svgElement.getAttribute('opacity'), 10) > 0;\n var tooltipDiv = this.getTooltipElement(isTooltip);\n this.renderSeriesTooltip(event, this.accumulation, !isTooltip, tooltipDiv);\n };\n AccumulationTooltip.prototype.renderSeriesTooltip = function (e, chart, isFirst, tooltipDiv) {\n var data = this.getPieData(e, chart, chart.mouseX, chart.mouseY);\n var rect = chart.initialClipRect;\n this.currentPoints = [];\n if (data.point && (!this.previousPoints[0] || (this.previousPoints[0].point !== data.point))) {\n if (this.pushData(data, isFirst, tooltipDiv, false)) {\n if (this.triggerEvent(data, isFirst, this.getTooltipText(data, chart.tooltip))) {\n this.createTooltip(chart, isFirst, this.findHeader(data), data.point.symbolLocation, data.series.clipRect, data.point, ['Circle'], 0, rect, null, data.point);\n }\n else {\n this.removeHighlight(this.control);\n this.getElement(this.element.id + '_tooltip').remove();\n }\n this.isRemove = true;\n }\n }\n else {\n if (!data.point && this.isRemove) {\n this.removeTooltip(1000);\n this.isRemove = false;\n }\n }\n };\n AccumulationTooltip.prototype.getPieData = function (e, chart, x, y) {\n var target = e.target;\n var id = indexFinder(target.id, true);\n if (!isNaN(id.series)) {\n var seriesIndex = id.series;\n var pointIndex = id.point;\n if (!isNullOrUndefined(seriesIndex) && !isNaN(seriesIndex) && !isNullOrUndefined(pointIndex) && !isNaN(pointIndex)) {\n var series = this.getSeriesFromIndex(seriesIndex, chart.visibleSeries);\n if (series.enableTooltip) {\n return new AccPointData(series.points[pointIndex], series);\n }\n }\n }\n return new AccPointData(null, null);\n };\n /**\n * To get series from index\n */\n AccumulationTooltip.prototype.getSeriesFromIndex = function (index, visibleSeries) {\n return visibleSeries[0];\n };\n AccumulationTooltip.prototype.getTooltipText = function (data, tooltip) {\n var series = data.series;\n var format = tooltip.format ? tooltip.format : '${point.x} : ${point.y}';\n return this.parseTemplate(data.point, series, format);\n };\n AccumulationTooltip.prototype.findHeader = function (data) {\n if (this.header === '') {\n return '';\n }\n this.header = this.parseTemplate(data.point, data.series, this.header);\n if (this.header.replace(//g, '').replace(/<\\/b>/g, '').trim() !== '') {\n return this.header;\n }\n return '';\n };\n AccumulationTooltip.prototype.parseTemplate = function (point, series, format) {\n var value;\n var textValue;\n for (var _i = 0, _a = Object.keys(point); _i < _a.length; _i++) {\n var dataValue = _a[_i];\n value = new RegExp('${point' + '.' + dataValue + '}', 'gm');\n format = format.replace(value.source, point[dataValue]);\n }\n for (var _b = 0, _c = Object.keys(Object.getPrototypeOf(series)); _b < _c.length; _b++) {\n var dataValue = _c[_b];\n value = new RegExp('${series' + '.' + dataValue + '}', 'gm');\n textValue = series[dataValue];\n format = format.replace(value.source, textValue);\n }\n return format;\n };\n /**\n * Get module name\n */\n AccumulationTooltip.prototype.getModuleName = function () {\n return 'AccumulationTooltip';\n };\n /**\n * To destroy the Tooltip.\n * @return {void}\n * @private\n */\n AccumulationTooltip.prototype.destroy = function (chart) {\n /**\n * Destroy method calling here\n */\n };\n return AccumulationTooltip;\n}(BaseTooltip));\nexport { AccumulationTooltip };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { extend } from '@syncfusion/ej2-base';\nimport { indexFinder } from '../../common/utils/helper';\nimport { pointByIndex } from '../model/acc-base';\nimport { Index } from '../../common/model/base';\nimport { BaseSelection } from '../../common/user-interaction/selection';\n/**\n * `AccumulationSelection` module handles the selection for accumulation chart.\n * @private\n */\nvar AccumulationSelection = /** @class */ (function (_super) {\n __extends(AccumulationSelection, _super);\n function AccumulationSelection(accumulation) {\n var _this = _super.call(this, accumulation) || this;\n _this.renderer = accumulation.renderer;\n return _this;\n }\n /**\n * To initialize the private variables\n */\n AccumulationSelection.prototype.initPrivateVariables = function (accumulation) {\n this.styleId = accumulation.element.id + '_ej2_chart_selection';\n this.unselected = accumulation.element.id + '_ej2_deselected';\n this.selectedDataIndexes = [];\n this.rectPoints = null;\n };\n /**\n * Invoke selection for rendered chart.\n * @param {AccumulationChart} chart - Define the chart to invoke the selection.\n * @return {void}\n */\n AccumulationSelection.prototype.invokeSelection = function (accumulation) {\n this.initPrivateVariables(accumulation);\n this.series = extend({}, accumulation.visibleSeries, null, true);\n this.seriesStyles();\n this.selectDataIndex(this.concatIndexes(accumulation.selectedDataIndexes, this.selectedDataIndexes), accumulation);\n };\n /**\n * To get series selection style by series.\n */\n AccumulationSelection.prototype.generateStyle = function (series) {\n return (series.selectionStyle || this.styleId + '_series_' + series.index);\n };\n /**\n * To get elements by index, series\n */\n AccumulationSelection.prototype.findElements = function (accumulation, series, index) {\n return [this.getElementByIndex(index)];\n };\n /**\n * To get series point element by index\n */\n AccumulationSelection.prototype.getElementByIndex = function (index) {\n var elementId = this.control.element.id + '_Series_' + index.series + '_Point_' + index.point;\n return document.getElementById(elementId);\n };\n /**\n * To calculate selected elements on mouse click or touch\n * @private\n */\n AccumulationSelection.prototype.calculateSelectedElements = function (accumulation, event) {\n if (event.target.id.indexOf(accumulation.element.id + '_') === -1) {\n return;\n }\n if (event.target.id.indexOf('_Series_') > -1 || event.target.id.indexOf('_datalabel_') > -1) {\n this.performSelection(indexFinder(event.target.id), accumulation, event.target);\n }\n };\n /**\n * To perform the selection process based on index and element.\n */\n AccumulationSelection.prototype.performSelection = function (index, accumulation, element) {\n element = element.id.indexOf('datalabel') > -1 ?\n accumulation.getSeriesElement().childNodes[index.series].childNodes[index.point]\n : element;\n switch (accumulation.selectionMode) {\n case 'Point':\n if (!isNaN(index.point)) {\n this.selection(accumulation, index, [element]);\n this.blurEffect(accumulation.element.id, accumulation.visibleSeries);\n }\n break;\n }\n };\n /**\n * To select the element by index. Adding or removing selection style class name.\n */\n AccumulationSelection.prototype.selection = function (accumulation, index, selectedElements) {\n if (!accumulation.isMultiSelect) {\n this.removeMultiSelectEelments(accumulation, this.selectedDataIndexes, index, accumulation.series);\n }\n var className = selectedElements[0] && (selectedElements[0].getAttribute('class') || '');\n if (selectedElements[0] && className.indexOf(this.getSelectionClass(selectedElements[0].id)) > -1) {\n this.removeStyles(selectedElements, index);\n this.addOrRemoveIndex(this.selectedDataIndexes, index);\n }\n else {\n this.applyStyles(selectedElements, index);\n this.addOrRemoveIndex(this.selectedDataIndexes, index, true);\n }\n };\n /**\n * To redraw the selection process on accumulation chart refresh.\n * @private\n */\n AccumulationSelection.prototype.redrawSelection = function (accumulation, oldMode) {\n var selectedDataIndexes = extend([], this.selectedDataIndexes, null, true);\n this.removeSelectedElements(accumulation, this.selectedDataIndexes);\n this.blurEffect(accumulation.element.id, accumulation.visibleSeries);\n this.selectDataIndex(selectedDataIndexes, accumulation);\n };\n /**\n * To remove the selected elements style classes by indexes.\n */\n AccumulationSelection.prototype.removeSelectedElements = function (accumulation, indexes) {\n var seriesgroup = accumulation.getSeriesElement();\n for (var _i = 0, indexes_1 = indexes; _i < indexes_1.length; _i++) {\n var index = indexes_1[_i];\n this.removeStyles([this.getElementByIndex(index)], index);\n }\n };\n /**\n * To perform the selection for legend elements.\n * @private\n */\n AccumulationSelection.prototype.legendSelection = function (accumulation, series, pointIndex) {\n var element = accumulation.getSeriesElement().childNodes[series].childNodes[pointIndex];\n var seriesStyle = this.generateStyle(accumulation.visibleSeries[series]);\n var seriesElements = accumulation.getSeriesElement().childNodes[series].childNodes[pointIndex];\n this.selection(accumulation, new Index(series, pointIndex), [seriesElements]);\n this.blurEffect(accumulation.element.id, accumulation.visibleSeries);\n };\n /**\n * To select the element by selected data indexes.\n */\n AccumulationSelection.prototype.selectDataIndex = function (indexes, accumulation) {\n var element;\n for (var _i = 0, indexes_2 = indexes; _i < indexes_2.length; _i++) {\n var index = indexes_2[_i];\n element = this.getElementByIndex(index);\n if (element) {\n this.performSelection(index, accumulation, element);\n }\n }\n };\n /**\n * To remove the selection styles for multi selection process.\n */\n AccumulationSelection.prototype.removeMultiSelectEelments = function (accumulation, index, currentIndex, seriesCollection) {\n var series;\n for (var i = 0; i < index.length; i++) {\n series = seriesCollection[index[i].series];\n if (!this.checkEquals(index[i], currentIndex)) {\n this.removeStyles(this.findElements(accumulation, series, index[i]), index[i]);\n index.splice(i, 1);\n i--;\n }\n }\n };\n /**\n * To apply the opacity effect for accumulation chart series elements.\n */\n AccumulationSelection.prototype.blurEffect = function (pieId, visibleSeries) {\n var visibility = this.checkPointVisibility(this.selectedDataIndexes); // legend click scenario\n for (var _i = 0, visibleSeries_1 = visibleSeries; _i < visibleSeries_1.length; _i++) {\n var series = visibleSeries_1[_i];\n if (series.visible) {\n this.checkSelectionElements(document.getElementById(pieId + '_SeriesCollection'), this.generateStyle(series), visibility);\n }\n }\n };\n /**\n * To check selection elements by style class name.\n */\n AccumulationSelection.prototype.checkSelectionElements = function (element, className, visibility) {\n var children = (element.childNodes[0].childNodes);\n var legendShape;\n var elementClass;\n var parentClass;\n for (var i = 0; i < children.length; i++) {\n elementClass = children[i].getAttribute('class') || '';\n parentClass = children[i].parentNode.getAttribute('class') || '';\n if (elementClass.indexOf(className) === -1 && parentClass.indexOf(className) === -1 && visibility) {\n this.addSvgClass(children[i], this.unselected);\n }\n else {\n this.removeSvgClass(children[i], this.unselected);\n }\n if (this.control.accumulationLegendModule && this.control.legendSettings.visible) {\n legendShape = document.getElementById(this.control.element.id + '_chart_legend_shape_' + i);\n if (legendShape) {\n if (elementClass.indexOf(className) === -1 && parentClass.indexOf(className) === -1 && visibility) {\n this.addSvgClass(legendShape, this.unselected);\n }\n else {\n this.removeSvgClass(legendShape, this.unselected);\n }\n }\n }\n }\n };\n /**\n * To apply selection style for elements.\n */\n AccumulationSelection.prototype.applyStyles = function (elements, index) {\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var element = elements_1[_i];\n var legendShape = void 0;\n if (element) {\n if (this.control.accumulationLegendModule && this.control.legendSettings.visible) {\n legendShape = document.getElementById(this.control.element.id + '_chart_legend_shape_' + index.point);\n this.removeSvgClass(legendShape, this.unselected);\n this.addSvgClass(legendShape, this.getSelectionClass(legendShape.id));\n }\n this.removeSvgClass(element.parentNode, this.unselected);\n this.removeSvgClass(element, this.unselected);\n this.addSvgClass(element, this.getSelectionClass(element.id));\n }\n }\n };\n /**\n * To get selection style class name by id\n */\n AccumulationSelection.prototype.getSelectionClass = function (id) {\n return this.generateStyle(this.control.series[indexFinder(id).series]);\n };\n /**\n * To remove selection style for elements.\n */\n AccumulationSelection.prototype.removeStyles = function (elements, index) {\n var legendShape;\n for (var _i = 0, elements_2 = elements; _i < elements_2.length; _i++) {\n var element = elements_2[_i];\n if (element) {\n if (this.control.accumulationLegendModule && this.control.legendSettings.visible) {\n legendShape = document.getElementById(this.control.element.id + '_chart_legend_shape_' + index.point);\n this.removeSvgClass(legendShape, this.getSelectionClass(legendShape.id));\n }\n this.removeSvgClass(element, this.getSelectionClass(element.id));\n }\n }\n };\n /**\n * To apply or remove selected elements index.\n */\n AccumulationSelection.prototype.addOrRemoveIndex = function (indexes, index, add) {\n for (var i = 0; i < indexes.length; i++) {\n if (this.checkEquals(indexes[i], index)) {\n indexes.splice(i, 1);\n i--;\n }\n }\n if (add) {\n indexes.push(index);\n }\n };\n /**\n * To check two index, point and series are equal\n */\n AccumulationSelection.prototype.checkEquals = function (first, second) {\n return ((first.point === second.point) && (first.series === second.series));\n };\n /**\n * To check selected points are visibility\n */\n AccumulationSelection.prototype.checkPointVisibility = function (selectedDataIndexes) {\n var visible = false;\n for (var _i = 0, selectedDataIndexes_1 = selectedDataIndexes; _i < selectedDataIndexes_1.length; _i++) {\n var data = selectedDataIndexes_1[_i];\n if (pointByIndex(data.point, this.control.visibleSeries[0].points).visible) {\n visible = true;\n break;\n }\n }\n return visible;\n };\n /**\n * Get module name.\n */\n AccumulationSelection.prototype.getModuleName = function () {\n return 'AccumulationSelection';\n };\n /**\n * To destroy the selection.\n * @return {void}\n * @private\n */\n AccumulationSelection.prototype.destroy = function (accumulation) {\n // Destroy method performed here\n };\n return AccumulationSelection;\n}(BaseSelection));\nexport { AccumulationSelection };\n","/**\n * AccumulationChart annotation properties\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { AnnotationBase } from '../../common/annotation/annotation';\nimport { appendElement } from '../../common/utils/helper';\nimport { createElement } from '@syncfusion/ej2-base';\n/**\n * `AccumulationAnnotation` module handles the annotation for accumulation chart.\n */\nvar AccumulationAnnotation = /** @class */ (function (_super) {\n __extends(AccumulationAnnotation, _super);\n /**\n * Constructor for accumulation chart annotation.\n * @private.\n */\n function AccumulationAnnotation(control) {\n var _this = _super.call(this, control) || this;\n _this.pie = control;\n return _this;\n }\n /**\n * Method to render the annotation for accumulation chart\n * @param element\n */\n AccumulationAnnotation.prototype.renderAnnotations = function (element) {\n var _this = this;\n this.annotations = this.pie.annotations;\n this.parentElement = createElement('div', {\n id: this.pie.element.id + '_Annotation_Collections'\n });\n this.annotations.map(function (annotation, index) {\n _this.processAnnotation(annotation, index, _this.parentElement);\n });\n appendElement(this.parentElement, element);\n };\n /**\n * Get module name.\n */\n AccumulationAnnotation.prototype.getModuleName = function () {\n // Returns te module name\n return 'Annotation';\n };\n /**\n * To destroy the annotation.\n * @return {void}\n * @private\n */\n AccumulationAnnotation.prototype.destroy = function (control) {\n // Destroy method performed here\n };\n return AccumulationAnnotation;\n}(AnnotationBase));\nexport { AccumulationAnnotation };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { firstToLowerCase, RectOption, Rect, measureText } from '../../chart/index';\nimport { DataPoint } from '../utils/helper';\nimport { getValue, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { getSeriesColor } from '../../common/model/theme';\nimport { NiceInterval, Size, PathOption } from '../../chart/index';\nimport { Data } from '../../common/model/data';\n/**\n * To render Chart series\n */\nvar RangeSeries = /** @class */ (function (_super) {\n __extends(RangeSeries, _super);\n function RangeSeries(range) {\n var _this = _super.call(this) || this;\n _this.dataSource = range.dataSource;\n _this.xName = range.xName;\n _this.yName = range.yName;\n _this.query = range.query;\n _this.xMin = Infinity;\n _this.xMax = -Infinity;\n _this.yMin = Infinity;\n _this.yMax = -Infinity;\n return _this;\n }\n /**\n * To render light weight and data manager process\n * @param control\n */\n RangeSeries.prototype.renderChart = function (control) {\n var _this = this;\n var dataSource;\n var query;\n this.seriesLength = 0;\n control.rangeSlider.points = [];\n if (control.series.length) {\n control.series.map(function (series) {\n dataSource = series.dataSource || control.dataSource;\n query = series.query || control.query;\n series.points = [];\n _this.processDataSource(dataSource, query, control, series);\n });\n }\n else {\n this.processDataSource(control.dataSource, control.query, control);\n }\n };\n RangeSeries.prototype.processDataSource = function (dataSource, query, control, series) {\n var _this = this;\n if (isNullOrUndefined(query) && !isNullOrUndefined(dataSource)) {\n this.dataManagerSuccess({ result: dataSource, count: dataSource.length }, control, series);\n return;\n }\n control.dataModule = new Data(dataSource, query);\n var dataManager = control.dataModule.getData(control.dataModule.generateQuery().requiresCount());\n dataManager.then(function (e) { return _this.dataManagerSuccess(e, control, series); });\n };\n /**\n * data manager process calculated here\n * @param e\n */\n RangeSeries.prototype.dataManagerSuccess = function (e, control, series) {\n var viewData = e.result !== '' ? e.result : [];\n this.processJsonData(viewData, control, Object.keys(viewData).length, series);\n this.seriesLength += series ? 1 : this.seriesLength;\n if (!series || this.seriesLength === control.series.length) {\n this.processXAxis(control);\n this.calculateGroupingBounds(control);\n this.processYAxis(control);\n control.renderChart();\n }\n };\n /**\n * Process JSON data from data source\n * @param control\n * @param len\n */\n RangeSeries.prototype.processJsonData = function (viewData, control, len, series) {\n var i = 0;\n var point;\n var xName = (series && series.xName) || control.xName;\n var yName = (series && series.yName) || control.yName;\n while (i < len) {\n point = new DataPoint(getValue(xName, viewData[i]), getValue(yName, viewData[i]));\n point.xValue = +point.x;\n point.yValue = +point.y;\n if (series) {\n series.points.push(point);\n }\n this.xMin = Math.min(this.xMin, point.xValue);\n this.yMin = Math.min(this.yMin, point.yValue);\n this.xMax = Math.max(this.xMax, point.xValue);\n this.yMax = Math.max(this.yMax, point.yValue);\n control.rangeSlider.points.push(point);\n i++;\n }\n };\n RangeSeries.prototype.processXAxis = function (control) {\n var axisModule;\n var axis = {\n minimum: control.minimum, maximum: control.maximum,\n interval: control.interval, valueType: control.valueType,\n isInversed: control.enableRtl, labelFormat: control.labelFormat,\n logBase: control.logBase, skeleton: control.skeleton, skeletonType: control.skeletonType\n };\n this.xAxis = axis;\n this.xAxis.intervalType = control.intervalType;\n this.xAxis.maximumLabels = 3;\n this.xAxis.skeleton = control.skeleton;\n this.xAxis.intervalDivs = [10, 5, 2, 1];\n this.xAxis.rect = control.bounds;\n this.xAxis.visibleLabels = [];\n this.xAxis.orientation = 'Horizontal';\n axisModule = control[firstToLowerCase(control.valueType) + 'Module'];\n axisModule.min = this.xMin;\n axisModule.max = this.xMax;\n axisModule.getActualRange(this.xAxis, control.bounds);\n if (this.xAxis.valueType !== 'Logarithmic') {\n axisModule.updateActualRange(this.xAxis, this.xAxis.actualRange.min, this.xAxis.actualRange.max, this.xAxis.actualRange.interval);\n }\n this.xAxis.actualRange.delta = this.xAxis.actualRange.max - this.xAxis.actualRange.min;\n this.xAxis.visibleRange = this.xAxis.actualRange;\n axisModule.calculateVisibleLabels(this.xAxis, control);\n };\n /**\n * Process yAxis for range navigator\n * @param control\n */\n RangeSeries.prototype.processYAxis = function (control) {\n var axis = {\n majorGridLines: { width: 0 }, rangePadding: 'None',\n majorTickLines: { width: 0 }, labelStyle: { size: '0' },\n visible: false, valueType: 'Double', minimum: null, maximum: null,\n interval: null\n };\n this.yAxis = axis;\n this.yAxis.rect = control.bounds;\n this.yAxis.maximumLabels = 3;\n this.yAxis.intervalDivs = [10, 5, 2, 1];\n this.yAxis.orientation = 'Vertical';\n control.doubleModule.min = this.yMin;\n control.doubleModule.max = this.yMax;\n control.doubleModule.getActualRange(this.yAxis, control.bounds);\n control.doubleModule.updateActualRange(this.yAxis, this.yAxis.actualRange.min, this.yAxis.actualRange.max, this.yAxis.actualRange.interval);\n this.yAxis.actualRange.delta = this.yAxis.actualRange.max - this.yAxis.actualRange.min;\n this.yAxis.visibleRange = this.yAxis.actualRange;\n };\n /**\n * Process Light weight control\n * @param control\n * @private\n */\n RangeSeries.prototype.renderSeries = function (control) {\n var _this = this;\n var chartGroup = control.renderer.createGroup({ id: control.element.id + '_chart' });\n var colors = getSeriesColor(control.theme);\n control.series.map(function (series, index) {\n series.xAxis = _this.xAxis;\n series.yAxis = _this.yAxis;\n series.chart = control;\n series.index = index;\n series.xAxis.isInversed = control.enableRtl;\n series.interior = series.fill || colors[index % colors.length];\n _this.createSeriesElement(control, series, index);\n control[firstToLowerCase(series.type) + 'SeriesModule'].render(series, _this.xAxis, _this.yAxis, false);\n chartGroup.appendChild(series.seriesElement);\n if (series.animation.enable && control.animateSeries) {\n control[firstToLowerCase(series.type) + 'SeriesModule'].doAnimation(series);\n }\n });\n control.svgObject.appendChild(chartGroup);\n if (control.series.length) {\n this.drawSeriesBorder(control, chartGroup);\n }\n };\n RangeSeries.prototype.createSeriesElement = function (control, series, index) {\n var elementId = control.element.id;\n series.clipRect = new Rect(this.xAxis.rect.x, this.yAxis.rect.y, this.xAxis.rect.width, this.yAxis.rect.height);\n series.clipRectElement = control.renderer.drawClipPath(new RectOption(elementId + '_RangeSeriesClipRect_' + index, 'transparent', { width: 1, color: 'Gray' }, 1, {\n x: 0, y: 0,\n width: series.clipRect.width,\n height: series.clipRect.height\n }));\n series.seriesElement = control.renderer.createGroup({\n 'id': elementId + 'SeriesGroup' + index,\n 'transform': 'translate(' + series.clipRect.x + ',' + (series.clipRect.y) + ')',\n 'clip-path': 'url(#' + elementId + '_RangeSeriesClipRect_' + index + ')'\n });\n series.seriesElement.appendChild(series.clipRectElement);\n };\n RangeSeries.prototype.calculateGroupingBounds = function (control) {\n var padding = control.margin.bottom;\n var labelHeight = measureText('string', control.labelStyle).height;\n this.calculateDateTimeNiceInterval(this.xAxis, new Size(control.bounds.width, control.bounds.height), this.xMin, this.xMax, false);\n if (control.enableGrouping && control.valueType === 'DateTime'\n && (this.xAxis.actualIntervalType !== 'Years' || !control.series.length)) {\n control.bounds.height -= (control.labelPosition === 'Outside' || control.series.length === 0) ? padding + labelHeight :\n (labelHeight + 2 * padding);\n }\n if (!control.series.length) {\n control.bounds.y += control.bounds.height / 4;\n control.bounds.height = control.bounds.height / 2;\n }\n };\n RangeSeries.prototype.drawSeriesBorder = function (control, chartElement) {\n var options = new PathOption(control.element.id + '_SeriesBorder', 'transparent', control.navigatorBorder.width, control.navigatorBorder.color, 1, '', ('M ' + (control.bounds.x) + ' ' + (control.bounds.y) +\n ' L ' + (control.bounds.x + control.bounds.width) + ' ' + control.bounds.y +\n ' L ' + (control.bounds.x + control.bounds.width) + ' ' + (control.bounds.y + control.bounds.height) +\n ' L ' + (control.bounds.x) + ' ' + (control.bounds.y + control.bounds.height) + 'Z'));\n var htmlObject = control.renderer.drawPath(options);\n control.svgObject.appendChild(htmlObject);\n };\n return RangeSeries;\n}(NiceInterval));\nexport { RangeSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { measureText, TextOption, Rect, valueToCoefficient, textElement, PathOption, firstToLowerCase, } from '../../common/utils/helper';\nimport { DateTime } from '../../chart/index';\nimport { VisibleLabels } from '../../chart/index';\n/**\n * class for axis\n */\nvar RangeNavigatorAxis = /** @class */ (function (_super) {\n __extends(RangeNavigatorAxis, _super);\n function RangeNavigatorAxis(range) {\n var _this = _super.call(this) || this;\n _this.firstLevelLabels = [];\n _this.secondLevelLabels = [];\n _this.rangeNavigator = range;\n return _this;\n }\n /**\n * To render grid lines of axis\n */\n RangeNavigatorAxis.prototype.renderGridLines = function () {\n var pointX = 0;\n var control = this.rangeNavigator;\n var majorGridLines = control.majorGridLines;\n var majorTickLines = control.majorTickLines;\n var majorGrid = '';\n var majorTick = '';\n var rect = control.bounds;\n var chartAxis = control.chartSeries.xAxis;\n var labelLength;\n var range = chartAxis.visibleRange;\n var disabledColor = (control.disableRangeSelector) ? 'transparent' : null;\n this.gridLines = control.renderer.createGroup({ id: control.element.id + '_GridLines' });\n var tick = (control.tickPosition === 'Outside' || control.series.length === 0) ?\n rect.y + rect.height + majorTickLines.height : rect.y + rect.height - majorTickLines.height;\n //Gridlines\n this.firstLevelLabels = [];\n chartAxis.labelStyle = control.labelStyle;\n chartAxis.skeleton = control.skeleton;\n chartAxis.skeletonType = control.skeletonType;\n chartAxis.isChart = false;\n if (control.valueType === 'DateTime') {\n this.calculateDateTimeNiceInterval(chartAxis, rect, chartAxis.doubleRange.start, chartAxis.doubleRange.end, chartAxis.isChart);\n this.actualIntervalType = chartAxis.actualIntervalType;\n this.findAxisLabels(chartAxis);\n }\n this.firstLevelLabels = chartAxis.visibleLabels;\n this.lowerValues = [];\n labelLength = chartAxis.visibleLabels.length;\n for (var i = 0; i < labelLength; i++) {\n this.lowerValues.push(this.firstLevelLabels[i].value);\n pointX = (valueToCoefficient(this.firstLevelLabels[i].value, chartAxis) * rect.width) + rect.x;\n if (pointX >= rect.x && (rect.x + rect.width) >= pointX) {\n majorGrid = majorGrid.concat('M ' + pointX + ' ' + (control.bounds.y + control.bounds.height) +\n ' L ' + pointX + ' ' + control.bounds.y + ' ');\n majorTick = majorTick.concat('M ' + (pointX) + ' ' + (rect.y + rect.height) +\n ' L ' + (pointX) + ' ' + tick + ' ');\n }\n }\n var options = new PathOption(control.element.id + '_MajorGridLine', 'transparent', majorGridLines.width, control.series.length ? disabledColor || majorGridLines.color || control.themeStyle.gridLineColor : 'transparent', 1, majorGridLines.dashArray, majorGrid);\n this.gridLines.appendChild(control.renderer.drawPath(options));\n options = new PathOption(control.element.id + '_MajorTickLine', 'transparent', majorTickLines.width, disabledColor || majorTickLines.color || control.themeStyle.gridLineColor, 1, majorGridLines.dashArray, majorTick);\n this.gridLines.appendChild(control.renderer.drawPath(options));\n };\n /**\n * To render of axis labels\n */\n RangeNavigatorAxis.prototype.renderAxisLabels = function () {\n var axis = this.rangeNavigator.chartSeries.xAxis;\n var control = this.rangeNavigator;\n var pointY;\n var rect = control.bounds;\n var labelElement = control.renderer.createGroup({ id: control.element.id + '_AxisLabels' });\n var firstLevelElement = control.renderer.createGroup({ id: control.element.id + '_FirstLevelAxisLabels' });\n var secondLevelElement = control.renderer.createGroup({ id: control.element.id + '_SecondLevelAxisLabels' });\n var secondaryAxis = axis;\n pointY = this.findLabelY(control, false);\n this.placeAxisLabels(axis, pointY, '_AxisLabel_', control, firstLevelElement);\n secondaryAxis.intervalType = secondaryAxis.actualIntervalType = (control.groupBy ||\n this.getSecondaryLabelType(axis.actualIntervalType));\n if (control.enableGrouping && control.valueType === 'DateTime' && this.actualIntervalType !== 'Years') {\n secondaryAxis.visibleRange.interval = 1;\n secondaryAxis.visibleLabels = [];\n this.findAxisLabels(secondaryAxis);\n this.secondLevelLabels = secondaryAxis.visibleLabels;\n pointY = this.findLabelY(control, true);\n var border = this.placeAxisLabels(secondaryAxis, pointY, '_SecondaryLabel_', control, secondLevelElement);\n var path = new PathOption(control.element.id + '_SecondaryMajorLines', 'transparent', control.majorTickLines.width, control.majorTickLines.color || control.themeStyle.gridLineColor, 1, control.majorGridLines.dashArray, border);\n this.gridLines.appendChild(control.renderer.drawPath(path));\n }\n control.chartSeries.xAxis.visibleLabels = control.chartSeries.xAxis.visibleLabels.concat(secondaryAxis.visibleLabels);\n labelElement.appendChild(firstLevelElement);\n labelElement.appendChild(secondLevelElement);\n //gridlines and axis label append to element\n control.svgObject.appendChild(this.gridLines);\n control.svgObject.appendChild(labelElement);\n };\n /**\n * To find secondary level label type\n * @param type\n */\n RangeNavigatorAxis.prototype.getSecondaryLabelType = function (type) {\n var types = ['Years', 'Quarter', 'Months', 'Weeks', 'Days', 'Hours', 'Minutes', 'Seconds'];\n return (type === 'Years' ? 'Years' : types[types.indexOf(type) - 1]);\n };\n /**\n * To find labels for date time axis\n * @param axis\n */\n RangeNavigatorAxis.prototype.findAxisLabels = function (axis) {\n axis.visibleLabels = [];\n var start = new Date(axis.visibleRange.min);\n var nextInterval;\n var interval = this.rangeNavigator.interval ? this.rangeNavigator.interval : 1;\n switch (axis.actualIntervalType) {\n case 'Years':\n start = new Date(start.getFullYear().toString());\n break;\n case 'Quarter':\n if (start.getMonth() <= 2) {\n start = new Date(start.getFullYear(), 0, 1);\n }\n else if (start.getMonth() <= 5) {\n start = new Date(start.getFullYear(), 3, 1);\n }\n else if (start.getMonth() <= 8) {\n start = new Date(start.getFullYear(), 6, 1);\n }\n else {\n start = new Date(start.getFullYear(), 9, 1);\n }\n break;\n case 'Months':\n start = new Date(start.getFullYear(), start.getMonth());\n break;\n case 'Weeks':\n start = new Date(start.getFullYear(), start.getMonth(), start.getDate() - start.getDay());\n break;\n case 'Days':\n start = new Date(start.getFullYear(), start.getMonth(), start.getDate());\n break;\n case 'Hours':\n start = new Date(start.getFullYear(), start.getMonth(), start.getDate(), start.getHours());\n break;\n case 'Minutes':\n start = new Date(start.getFullYear(), start.getMonth(), start.getDate(), start.getHours(), start.getMinutes());\n break;\n case 'Seconds':\n start = new Date(start.getFullYear(), start.getMonth(), start.getDate(), start.getHours(), start.getMinutes(), start.getSeconds());\n break;\n }\n nextInterval = start.getTime();\n this.rangeNavigator.format = this.rangeNavigator.intl.getDateFormat({\n format: axis.labelFormat, type: firstToLowerCase(axis.skeletonType), skeleton: this.getSkeleton(axis)\n });\n while (nextInterval < axis.visibleRange.max) {\n axis.visibleLabels.push(new VisibleLabels(this.dateFormats(this.rangeNavigator.format(new Date(nextInterval)), axis, axis.visibleLabels.length), nextInterval, this.rangeNavigator.labelStyle));\n nextInterval = this.increaseDateTimeInterval(axis, nextInterval, interval).getTime();\n }\n };\n /**\n * To find date time formats for Quarter and week interval type\n * @param text\n * @param axis\n * @param index\n */\n RangeNavigatorAxis.prototype.dateFormats = function (text, axis, index) {\n var changedText = text;\n var isFirstLevel = this.rangeNavigator.enableGrouping && this.firstLevelLabels.length === 0;\n switch (axis.actualIntervalType) {\n case 'Quarter':\n if (text.indexOf('Jan') > -1) {\n changedText = !isFirstLevel ? text.replace('Jan', 'Quarter1') : 'Quarter1';\n }\n else if (text.indexOf('Apr') > -1) {\n changedText = !isFirstLevel ? text.replace('Apr', 'Quarter2') : 'Quarter2';\n }\n else if (text.indexOf('Jul') > -1) {\n changedText = !isFirstLevel ? text.replace('Jul', 'Quarter3') : 'Quarter3';\n }\n else if (text.indexOf('Oct') > -1) {\n changedText = !isFirstLevel ? text.replace('Oct', 'Quarter4') : 'Quarter4';\n }\n break;\n case 'Weeks':\n changedText = 'Week' + ++index;\n break;\n default:\n changedText = text;\n break;\n }\n return changedText;\n };\n /**\n * To find the y co-ordinate for axis labels\n * @param control - rangeNavigator\n * @param isSecondary sets true if the axis is secondary axis\n */\n RangeNavigatorAxis.prototype.findLabelY = function (control, isSecondary) {\n var pointY;\n var reference = control.bounds.y + control.bounds.height;\n var tickHeight = control.majorTickLines.height;\n var textHeight = measureText('Quarter1 2011', control.labelStyle).height;\n var padding = 8;\n if ((control.labelPosition === 'Outside' && control.tickPosition === 'Outside') || control.series.length === 0) {\n pointY = reference + tickHeight + padding + textHeight * 0.75;\n }\n else if (control.labelPosition === 'Inside' && control.tickPosition === 'Inside') {\n pointY = reference - tickHeight - padding;\n }\n else if (control.labelPosition === 'Inside' && control.tickPosition === 'Outside') {\n pointY = reference - padding;\n }\n else {\n pointY = reference + padding + (textHeight * 0.75);\n }\n if (isSecondary) {\n padding = 15;\n if (control.labelPosition === 'Outside' || control.series.length === 0) {\n pointY += padding + textHeight * 0.75;\n }\n else {\n pointY = (control.tickPosition === 'Outside' || control.series.length === 0) ?\n reference + tickHeight + padding + textHeight * 0.75 : reference + padding + textHeight * 0.75;\n }\n }\n return pointY;\n };\n /**\n * It places the axis labels and returns border for secondary axis labels\n * @param axis axis for the lables placed\n * @param pointY y co-ordinate for axis labels\n * @param id id for the axis elements\n * @param control range navigator\n * @param labelElement parent element in which axis labels appended\n */\n RangeNavigatorAxis.prototype.placeAxisLabels = function (axis, pointY, id, control, labelElement) {\n var maxLabels = axis.visibleLabels.length;\n var label;\n var prevLabel;\n var pointX;\n var rect = control.bounds;\n var border = '';\n var pointXGrid;\n var disabledColor = (control.disableRangeSelector) ? 'transparent' : null;\n var prevX = control.enableRtl ? (rect.x + rect.width) : rect.x;\n var intervalType = axis.actualIntervalType;\n var intervalInTime = control.valueType === 'DateTime' ?\n maxLabels > 1 ? (axis.visibleLabels[1].value - axis.visibleLabels[0].value) :\n (axis.visibleRange.max - axis.visibleLabels[0].value) / 2 : 0;\n if (control.valueType === 'DateTime' && (intervalType === 'Quarter' || intervalType === 'Weeks')) {\n this.findSuitableFormat(axis, control);\n }\n for (var i = 0, len = maxLabels; i < len; i++) {\n label = axis.visibleLabels[i];\n label.size = measureText(label.text, axis.labelStyle);\n if (control.secondaryLabelAlignment === 'Middle') {\n pointX = (valueToCoefficient((label.value + intervalInTime / 2), axis) * rect.width) + rect.x;\n }\n else if ((id.indexOf('Secondary') > -1)) {\n pointX = this.findAlignment(axis, i);\n }\n pointXGrid = (valueToCoefficient((label.value), axis) * rect.width) + rect.x;\n //edgelabelPlacements\n if ((i === 0 || (i === axis.visibleLabels.length - 1 && control.enableRtl)) && pointX < rect.x) {\n pointX = rect.x + label.size.width / 2;\n }\n if ((i === axis.visibleLabels.length - 1 || (i === 0 && control.enableRtl)) &&\n ((pointX + label.size.width) > (rect.x + rect.width))) {\n pointX = rect.x + rect.width - label.size.width / 2;\n }\n //secondary axis grid lines\n if (id.indexOf('_SecondaryLabel_') > -1) {\n if (pointX >= rect.x && (rect.x + rect.width) >= pointX) {\n border = border.concat('M ' + pointXGrid + ' ' + pointY +\n ' L ' + pointXGrid + ' ' + (pointY - label.size.height));\n }\n }\n //smart axis label position,\n if (control.labelIntersectAction === 'Hide' &&\n i !== 0 && this.isIntersect(axis, pointX, label.size.width, prevX, prevLabel.size.width)) {\n continue;\n }\n //labelrender event\n var argsData = void 0;\n var labelStyle = control.labelStyle;\n var style = {\n size: labelStyle.size, color: disabledColor || labelStyle.color || control.themeStyle.labelFontColor,\n fontFamily: labelStyle.fontFamily,\n fontStyle: labelStyle.fontStyle || control.labelStyle.fontStyle,\n fontWeight: labelStyle.fontWeight || control.labelStyle.fontWeight,\n opacity: labelStyle.opacity || control.labelStyle.opacity,\n textAlignment: labelStyle.textAlignment || control.labelStyle.textAlignment,\n textOverflow: labelStyle.textOverflow || control.labelStyle.textOverflow\n };\n argsData = {\n cancel: false, name: 'labelRender',\n text: label.text, value: label.value, labelStyle: style,\n region: new Rect(pointX, pointY, label.size.width, label.size.height)\n };\n control.trigger('labelRender', argsData);\n if (!argsData.cancel) {\n control.labels.push(argsData);\n }\n else {\n continue;\n }\n textElement(new TextOption(this.rangeNavigator.element.id + id + i, pointX, pointY, 'middle', argsData.text), argsData.labelStyle, argsData.labelStyle.color || control.themeStyle.labelFontColor, labelElement).setAttribute('style', axis.valueType === 'DateTime' ? 'cursor: pointer' : 'cursor: default');\n prevX = pointX;\n prevLabel = label;\n }\n return border;\n };\n /**\n * To check label is intersected with successive label or not\n */\n RangeNavigatorAxis.prototype.isIntersect = function (axis, currentX, currentWidth, prevX, prevWidth) {\n return (axis.isInversed) ? (currentX + currentWidth / 2 > prevX - prevWidth / 2) :\n (currentX - currentWidth / 2 < prevX + prevWidth / 2);\n };\n /**\n * To find suitable label format for Quarter and week Interval types\n * @param axis\n * @param control\n */\n RangeNavigatorAxis.prototype.findSuitableFormat = function (axis, control) {\n var labels = axis.visibleLabels;\n var labelLength = labels.length;\n var bounds = control.bounds;\n var prevX;\n var currentX;\n var interval = control.valueType === 'DateTime' ?\n labelLength > 1 ? (labels[1].value - labels[0].value) : axis.visibleRange.interval\n : 0;\n for (var i = 0; i < labelLength; i++) {\n currentX = (valueToCoefficient((labels[i].value + interval / 2), axis) * bounds.width) + bounds.x;\n labels[i].size = measureText(labels[i].text, axis.labelStyle);\n //edgelabelPlacements\n if (i === 0 && currentX < bounds.x) {\n currentX = bounds.x + labels[i].size.width / 2;\n }\n if (axis.actualIntervalType === 'Quarter') {\n if (i !== 0) {\n if ((labels[i].text.indexOf('Quarter') > -1) &&\n (this.isIntersect(axis, currentX, labels[i].size.width, prevX, labels[i - 1].size.width))) {\n labels.every(function (label) {\n label.text = label.text.toString().replace('Quarter', 'QTR');\n return true;\n });\n axis.visibleLabels = labels;\n this.findSuitableFormat(axis, control);\n }\n else {\n if (this.isIntersect(axis, currentX, labels[i].size.width, prevX, labels[i - 1].size.width)) {\n labels.every(function (label) {\n label.text = label.text.toString().replace('QTR', 'Q');\n return true;\n });\n axis.visibleLabels = labels;\n }\n }\n }\n }\n else if (axis.actualIntervalType === 'Weeks') {\n if ((i !== 0) && ((labels[i].text.indexOf('Week') > -1) &&\n (this.isIntersect(axis, currentX, labels[i].size.width, prevX, labels[i - 1].size.width)))) {\n labels.every(function (label) {\n label.text = label.text.toString().replace('Week', 'W');\n return true;\n });\n axis.visibleLabels = labels;\n }\n }\n prevX = currentX;\n }\n };\n /**\n * Alignment position for secondary level labels in date time axis\n * @param axis\n * @param index\n */\n RangeNavigatorAxis.prototype.findAlignment = function (axis, index) {\n var label = axis.visibleLabels[index];\n var nextLabel = axis.visibleLabels[index + 1];\n var bounds = this.rangeNavigator.bounds;\n return (this.rangeNavigator.secondaryLabelAlignment === 'Near' ?\n (valueToCoefficient((label.value), axis) * bounds.width) + bounds.x + label.size.width / 2 :\n (valueToCoefficient((nextLabel ? nextLabel.value : axis.visibleRange.max), axis) * bounds.width) + bounds.x - label.size.width);\n };\n return RangeNavigatorAxis;\n}(DateTime));\nexport { RangeNavigatorAxis };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Property, Complex, Collection } from '@syncfusion/ej2-base';\nimport { Border, Animation, Font } from '../../common/model/base';\nimport { Rect } from '../../index';\nimport { RangeNavigatorTheme } from '../utils/theme';\n/**\n * Series class for the range navigator\n */\nvar RangeNavigatorSeries = /** @class */ (function (_super) {\n __extends(RangeNavigatorSeries, _super);\n function RangeNavigatorSeries() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** @private */\n _this.clipRect = new Rect(0, 0, 0, 0);\n return _this;\n }\n __decorate([\n Property(null)\n ], RangeNavigatorSeries.prototype, \"dataSource\", void 0);\n __decorate([\n Property(null)\n ], RangeNavigatorSeries.prototype, \"xName\", void 0);\n __decorate([\n Property(null)\n ], RangeNavigatorSeries.prototype, \"yName\", void 0);\n __decorate([\n Property(null)\n ], RangeNavigatorSeries.prototype, \"query\", void 0);\n __decorate([\n Property('Line')\n ], RangeNavigatorSeries.prototype, \"type\", void 0);\n __decorate([\n Complex({ enable: false }, Animation)\n ], RangeNavigatorSeries.prototype, \"animation\", void 0);\n __decorate([\n Complex({ color: 'transparent', width: 2 }, Border)\n ], RangeNavigatorSeries.prototype, \"border\", void 0);\n __decorate([\n Property(null)\n ], RangeNavigatorSeries.prototype, \"fill\", void 0);\n __decorate([\n Property(1)\n ], RangeNavigatorSeries.prototype, \"width\", void 0);\n __decorate([\n Property('0')\n ], RangeNavigatorSeries.prototype, \"dashArray\", void 0);\n return RangeNavigatorSeries;\n}(ChildProperty));\nexport { RangeNavigatorSeries };\n/**\n * Thumb settings\n */\nvar ThumbSettings = /** @class */ (function (_super) {\n __extends(ThumbSettings, _super);\n function ThumbSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], ThumbSettings.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], ThumbSettings.prototype, \"height\", void 0);\n __decorate([\n Complex({ width: 1, color: null }, Border)\n ], ThumbSettings.prototype, \"border\", void 0);\n __decorate([\n Property(null)\n ], ThumbSettings.prototype, \"fill\", void 0);\n __decorate([\n Property('Circle')\n ], ThumbSettings.prototype, \"type\", void 0);\n return ThumbSettings;\n}(ChildProperty));\nexport { ThumbSettings };\n/**\n * Style settings\n */\nvar StyleSettings = /** @class */ (function (_super) {\n __extends(StyleSettings, _super);\n function StyleSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({}, ThumbSettings)\n ], StyleSettings.prototype, \"thumb\", void 0);\n __decorate([\n Property(null)\n ], StyleSettings.prototype, \"selectedRegionColor\", void 0);\n __decorate([\n Property(null)\n ], StyleSettings.prototype, \"unselectedRegionColor\", void 0);\n return StyleSettings;\n}(ChildProperty));\nexport { StyleSettings };\n/**\n * button settings in period selector\n */\nvar Periods = /** @class */ (function (_super) {\n __extends(Periods, _super);\n function Periods() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Years')\n ], Periods.prototype, \"intervalType\", void 0);\n __decorate([\n Property(1)\n ], Periods.prototype, \"interval\", void 0);\n __decorate([\n Property(null)\n ], Periods.prototype, \"text\", void 0);\n __decorate([\n Property(false)\n ], Periods.prototype, \"selected\", void 0);\n return Periods;\n}(ChildProperty));\nexport { Periods };\n/**\n * Period Selector Settings\n */\nvar PeriodSelectorSettings = /** @class */ (function (_super) {\n __extends(PeriodSelectorSettings, _super);\n function PeriodSelectorSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(43)\n ], PeriodSelectorSettings.prototype, \"height\", void 0);\n __decorate([\n Property('Bottom')\n ], PeriodSelectorSettings.prototype, \"position\", void 0);\n __decorate([\n Collection([], Periods)\n ], PeriodSelectorSettings.prototype, \"periods\", void 0);\n return PeriodSelectorSettings;\n}(ChildProperty));\nexport { PeriodSelectorSettings };\n/*\n * Configures the ToolTips in the chart.\n */\nvar RangeTooltipSettings = /** @class */ (function (_super) {\n __extends(RangeTooltipSettings, _super);\n function RangeTooltipSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], RangeTooltipSettings.prototype, \"enable\", void 0);\n __decorate([\n Property(0.85)\n ], RangeTooltipSettings.prototype, \"opacity\", void 0);\n __decorate([\n Property(null)\n ], RangeTooltipSettings.prototype, \"fill\", void 0);\n __decorate([\n Property(null)\n ], RangeTooltipSettings.prototype, \"format\", void 0);\n __decorate([\n Complex(RangeNavigatorTheme.tooltipLabelFont, Font)\n ], RangeTooltipSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Property(null)\n ], RangeTooltipSettings.prototype, \"template\", void 0);\n __decorate([\n Complex({ color: '#cccccc', width: 0.5 }, Border)\n ], RangeTooltipSettings.prototype, \"border\", void 0);\n __decorate([\n Property('OnDemand')\n ], RangeTooltipSettings.prototype, \"displayMode\", void 0);\n return RangeTooltipSettings;\n}(ChildProperty));\nexport { RangeTooltipSettings };\n","export var Theme;\n(function (Theme) {\n /** @private */\n Theme.axisLabelFont = {\n size: '12px',\n fontWeight: 'Normal',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Roboto, Segoe UI, Noto, Sans-serif'\n };\n /** @private */\n Theme.smithchartTitleFont = {\n size: '15px',\n fontWeight: 'Normal',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Roboto, Segoe UI, Noto, Sans-serif'\n };\n /** @private */\n Theme.smithchartSubtitleFont = {\n size: '13px',\n fontWeight: 'Normal',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Roboto, Segoe UI, Noto, Sans-serif'\n };\n /** @private */\n Theme.dataLabelFont = {\n size: '12px',\n fontWeight: 'Normal',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Roboto, Segoe UI, Noto, Sans-serif'\n };\n /** @private */\n Theme.legendLabelFont = {\n size: '13px',\n fontWeight: 'Normal',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Roboto, Segoe UI, Noto, Sans-serif'\n };\n})(Theme || (Theme = {}));\n/** @private */\nexport function getSeriesColor(theme) {\n var palette;\n switch (theme) {\n case 'Highcontrast':\n palette = ['#79ECE4', '#E98272', '#DFE6B6', '#C6E773', '#BA98FF',\n '#FA83C3', '#00C27A', '#43ACEF', '#D681EF', '#D8BC6E'];\n break;\n case 'Fabric':\n palette = ['#4472c4', '#ed7d31', '#ffc000', '#70ad47', '#5b9bd5',\n '#c1c1c1', '#6f6fe2', '#e269ae', '#9e480e', '#997300'];\n break;\n case 'Bootstrap':\n palette = ['#a16ee5', '#f7ce69', '#55a5c2', '#7ddf1e', '#ff6ea6',\n '#7953ac', '#b99b4f', '#407c92', '#5ea716', '#b91c52'];\n break;\n default:\n palette = ['#00bdae', '#404041', '#357cd2', '#e56590', '#f8b883',\n '#70ad47', '#dd8abd', '#7f84e8', '#7bb4eb', '#ea7a57'];\n break;\n }\n return palette;\n}\n/** @private */\nexport function getThemeColor(theme) {\n var style;\n switch (theme) {\n case 'Highcontrast':\n style = {\n axisLabel: '#ffffff',\n axisLine: '#ffffff',\n majorGridLine: '#BFBFBF',\n minorGridLine: '#969696',\n chartTitle: '#ffffff',\n legendLabel: '#ffffff',\n background: '#000000',\n areaBorder: '#ffffff',\n tooltipFill: '#ffffff',\n dataLabel: '#ffffff',\n tooltipBoldLabel: '#000000',\n tooltipLightLabel: '#000000',\n tooltipHeaderLine: '#969696',\n };\n break;\n default:\n style = {\n axisLabel: '#686868',\n axisLine: '#b5b5b5',\n majorGridLine: '#dbdbdb',\n minorGridLine: '#eaeaea',\n chartTitle: '#424242',\n legendLabel: '#353535',\n background: '#FFFFFF',\n areaBorder: 'Gray',\n tooltipFill: 'rgba(0, 8, 22, 0.75)',\n dataLabel: '#424242',\n tooltipBoldLabel: '#ffffff',\n tooltipLightLabel: '#dbdbdb',\n tooltipHeaderLine: '#ffffff'\n };\n break;\n }\n return style;\n}\n","import { Browser, createElement } from '@syncfusion/ej2-base';\nimport { RectOption } from '../../common/utils/helper';\nimport { getXLocation, getExactData, getRangeValueXByPoint, getNearestValue } from '../utils/helper';\nimport { drawSymbol, PathOption, linear } from '../../chart/index';\nimport { Animation } from '@syncfusion/ej2-base';\n/**\n * Class for slider\n */\nvar RangeSlider = /** @class */ (function () {\n function RangeSlider(range) {\n this.control = range;\n this.points = [];\n this.isIOS = Browser.isIos || Browser.isIos7;\n var thumb = range.navigatorStyleSettings.thumb;\n this.thumbVisible = (range.themeStyle.thumbWidth !== 0 && range.themeStyle.thumbHeight !== 0);\n this.elementId = range.element.id;\n this.thumpPadding = range.themeStyle.thumbWidth / 2;\n this.addEventListener();\n this.thumbColor = range.disableRangeSelector ? 'transparent' :\n (thumb.fill || range.themeStyle.thumbBackground);\n }\n /**\n * Render Slider elements for range navigator\n * @param range\n */\n RangeSlider.prototype.render = function (range) {\n var renderer = range.renderer;\n var style = range.navigatorStyleSettings;\n var disabledColor = (range.disableRangeSelector) ? 'transparent' : null;\n var sliderGroup = renderer.createGroup({\n 'id': this.elementId + '_sliders',\n style: (range.disableRangeSelector) ? 'pointer-events:none;' : ''\n });\n var option = new RectOption(this.elementId + '_leftUnSelectedArea', disabledColor || style.unselectedRegionColor || range.themeStyle.unselectedRectColor, { width: 0 }, 1, {\n x: range.bounds.x, y: range.bounds.y,\n width: range.bounds.width / 3,\n height: range.bounds.height\n });\n this.leftUnSelectedElement = renderer.drawRectangle(option);\n option.id = this.elementId + '_rightUnSelectedArea';\n this.rightUnSelectedElement = renderer.drawRectangle(option);\n option.id = this.elementId + '_SelectedArea';\n option.fill = disabledColor || style.selectedRegionColor || range.themeStyle.selectedRegionColor;\n this.selectedElement = renderer.drawRectangle(option);\n this.selectedElement.setAttribute('style', 'cursor: -webkit-grab');\n this.leftSlider = renderer.createGroup({\n 'id': this.elementId + '_LeftSlider', 'style': 'cursor: ew-resize'\n });\n this.rightSlider = renderer.createGroup({\n 'id': this.elementId + '_RightSlider', 'style': 'cursor: ew-resize'\n });\n this.createThump(renderer, range.bounds, this.leftSlider, this.elementId + '_LeftSlider', sliderGroup);\n this.createThump(renderer, range.bounds, this.rightSlider, this.elementId + '_RightSlider');\n sliderGroup.appendChild(this.leftUnSelectedElement);\n sliderGroup.appendChild(this.rightUnSelectedElement);\n sliderGroup.appendChild(this.selectedElement);\n sliderGroup.appendChild(this.leftSlider);\n sliderGroup.appendChild(this.rightSlider);\n range.svgObject.appendChild(sliderGroup);\n };\n /**\n * Thumb creation performed\n * @param render\n * @param bounds\n * @param parent\n * @param id\n */\n RangeSlider.prototype.createThump = function (render, bounds, parent, id, sliderGroup) {\n var control = this.control;\n var thump = control.navigatorStyleSettings.thumb;\n var style = control.themeStyle;\n var y = bounds.y + bounds.height / 2;\n var x = this.thumpPadding;\n var tickLength = (control.themeStyle.thumbHeight / 2) - 5;\n var disabledColor = control.disableRangeSelector ? 'transparent' : null;\n var lineColor = disabledColor || thump.border.color || style.thumpLineColor;\n var shadowElement;\n parent.appendChild(render.drawPath(new PathOption(id + '_ThumpLine', 'transparent', thump.border.width, control.series.length ? lineColor : 'transparent', 1, null, 'M' + ' ' + (x) + ' ' + (bounds.y) + ' ' + 'L' + ' ' + (x) + ' ' + (bounds.y + bounds.height) + ' ')));\n this.thumpY = y - (control.themeStyle.thumbHeight / 2);\n this.sliderY = bounds.y > this.thumpY ? this.thumpY : bounds.y;\n if (sliderGroup && !control.disableRangeSelector) {\n shadowElement = render.createDefs();\n shadowElement.innerHTML = '' +\n '' +\n '' +\n '' +\n '';\n sliderGroup.appendChild(shadowElement);\n }\n parent.innerHTML += '';\n if (thump.type === 'Circle') {\n parent.appendChild(drawSymbol({ x: x, y: y }, 'Circle', { width: control.themeStyle.thumbWidth, height: control.themeStyle.thumbHeight }, '', new PathOption(id + '_ThumpSymbol', disabledColor || this.thumbColor, thump.border.width, lineColor, 1, null), 'Thumb'));\n }\n else {\n parent.appendChild(render.drawRectangle(new RectOption(id + '_ThumpSymbol', disabledColor || this.thumbColor, { width: thump.border.width, color: lineColor }, 1, {\n x: x - (control.themeStyle.thumbWidth / 2), y: y - (control.themeStyle.thumbHeight / 2),\n width: control.themeStyle.thumbWidth,\n height: control.themeStyle.thumbHeight\n }, 2, 2)));\n }\n if (this.thumbVisible) {\n parent.appendChild(render.drawPath(new PathOption(id + '_ThumpGrip', 'transparent', 1, disabledColor || control.themeStyle.gripColor, 1, null, 'M' + ' ' + (x + 2) + ' ' + (y + tickLength) + ' ' + 'L' + ' ' + (x + 2) + ' ' + (y - tickLength) + ' ' +\n 'M' + ' ' + (x) + ' ' + (y + tickLength) + ' ' + 'L' + ' ' + (x) + ' ' + (y - tickLength) + ' ' +\n 'M' + ' ' + (x - 2) + ' ' + (y + tickLength) + ' ' + 'L' + ' ' + (x - 2) + ' ' + (y - tickLength) + ' ')));\n }\n };\n /**\n * Set slider value for range navigator\n * @param start\n * @param end\n */\n RangeSlider.prototype.setSlider = function (start, end, trigger, showTooltip) {\n var range = this.control;\n var padding = range.bounds.x;\n var axisRange = range.chartSeries.xAxis.actualRange;\n var isLeightWeight = range.series.length === 0;\n if (!(end >= start)) {\n start = [end, end = start][0];\n }\n start = end >= start ? start : [end, end = start][0];\n start = Math.max(start, axisRange.min);\n end = Math.min(end, axisRange.max);\n this.startX = padding + getXLocation(start, axisRange, range.bounds.width, range.enableRtl);\n this.endX = padding + getXLocation(end, axisRange, range.bounds.width, range.enableRtl);\n var selectedX = range.enableRtl ? this.endX : this.startX;\n var rightPadding = range.enableRtl ? this.startX : this.endX;\n this.sliderWidth = Math.abs(this.endX - this.startX);\n this.selectedElement.setAttribute('x', (selectedX) + '');\n this.selectedElement.setAttribute('width', this.sliderWidth + '');\n this.leftUnSelectedElement.setAttribute('width', (selectedX - padding) + '');\n this.rightUnSelectedElement.setAttribute('x', rightPadding + '');\n this.rightUnSelectedElement.setAttribute('width', (range.bounds.width - (rightPadding - padding)) + '');\n this.leftSlider.setAttribute('transform', 'translate(' + (this.startX - this.thumpPadding) + ', 0)');\n this.rightSlider.setAttribute('transform', 'translate(' + (this.endX - this.thumpPadding) + ', 0)');\n var left = this.control.svgObject.getBoundingClientRect().left -\n this.control.element.getBoundingClientRect().left;\n var leftX = this.control.enableRtl ? this.endX : this.startX;\n var rightX = this.control.enableRtl ? this.startX : this.endX;\n this.leftRect = {\n x: isLeightWeight ? left + padding : padding,\n y: isLeightWeight ? 0 : range.bounds.y,\n width: isLeightWeight ? leftX - padding : leftX,\n height: isLeightWeight ? this.thumpY : range.bounds.height\n };\n this.rightRect = {\n x: isLeightWeight ? left + rightX : rightX,\n y: isLeightWeight ? 0 : range.bounds.y,\n width: (range.bounds.width - (rightPadding - padding)),\n height: isLeightWeight ? this.thumpY : range.bounds.height\n };\n this.midRect = {\n x: isLeightWeight ? leftX + left : 0,\n y: isLeightWeight ? 0 : range.bounds.y,\n width: isLeightWeight ? Math.abs(this.endX - this.startX) : rightX,\n height: isLeightWeight ? this.thumpY : range.bounds.height\n };\n this.currentStart = start;\n this.currentEnd = end;\n if (showTooltip) {\n this.control.rangeTooltipModule.renderLeftTooltip(this);\n this.control.rangeTooltipModule.renderRightTooltip(this);\n }\n if (trigger) {\n this.triggerEvent(axisRange);\n }\n };\n /**\n * Trigger changed event\n * @param range\n */\n RangeSlider.prototype.triggerEvent = function (range) {\n var argsData;\n var xAxis = this.control.chartSeries.xAxis;\n var valueType = xAxis.valueType;\n argsData = {\n cancel: false,\n start: valueType === 'DateTime' ? new Date(this.currentStart) :\n (valueType === 'Logarithmic' ? Math.pow(xAxis.logBase, this.currentStart) : this.currentStart),\n end: valueType === 'DateTime' ? new Date(this.currentEnd) :\n (valueType === 'Logarithmic' ? Math.pow(xAxis.logBase, this.currentEnd) : this.currentEnd),\n name: 'changed',\n selectedData: getExactData(this.points, this.currentStart, this.currentEnd),\n zoomPosition: (this.control.enableRtl ? range.max - this.currentEnd :\n this.currentStart - range.min) / range.delta,\n zoomFactor: (this.currentEnd - this.currentStart) / range.delta\n };\n this.control.trigger('changed', argsData);\n };\n /**\n * @hidden\n */\n RangeSlider.prototype.addEventListener = function () {\n if (this.control.isDestroyed) {\n return;\n }\n this.control.on(Browser.touchMoveEvent, this.mouseMoveHandler, this);\n this.control.on(Browser.touchStartEvent, this.mouseDownHandler, this);\n this.control.on(Browser.touchEndEvent, this.mouseUpHandler, this);\n this.control.on(Browser.isPointer ? 'pointerleave' : 'mouseleave', this.mouseCancelHandler, this);\n };\n /**\n * @hidden\n */\n RangeSlider.prototype.removeEventListener = function () {\n if (this.control.isDestroyed) {\n return;\n }\n this.control.off(Browser.touchMoveEvent, this.mouseMoveHandler);\n this.control.off(Browser.touchStartEvent, this.mouseDownHandler);\n this.control.off(Browser.touchEndEvent, this.mouseUpHandler);\n this.control.off(Browser.isPointer ? 'pointerleave' : 'mouseleave', this.mouseCancelHandler);\n };\n /**\n * Move move handler perfomed here\n * @hidden\n * @param e\n */\n RangeSlider.prototype.mouseMoveHandler = function (e) {\n var control = this.control;\n var axisRange = control.chartSeries.xAxis.actualRange;\n var bounds = control.bounds;\n var start;\n var end;\n this.getCurrentSlider(e.target.id);\n if (this.isDrag && control.mouseX >= bounds.x) {\n switch (this.currentSlider) {\n case 'Left':\n control.startValue = this.getRangeValue(Math.abs(control.mouseX - bounds.x));\n break;\n case 'Right':\n control.endValue = this.getRangeValue(Math.abs(control.mouseX - bounds.x));\n break;\n case 'Middle':\n start = Math.max(this.getRangeValue(Math.abs(this.startX - (this.previousMoveX - control.mouseX) - bounds.x)), axisRange.min);\n end = Math.min(this.getRangeValue(Math.abs(this.endX - (this.previousMoveX - control.mouseX) - bounds.x)), axisRange.max);\n var currentWidth = Math.floor(Math.abs(getXLocation(end, axisRange, control.bounds.width, control.enableRtl) -\n getXLocation(start, axisRange, control.bounds.width, control.enableRtl)));\n if (currentWidth === Math.floor(this.sliderWidth)) {\n control.startValue = start;\n control.endValue = end;\n }\n break;\n }\n if (e.preventDefault && this.isIOS) {\n e.preventDefault();\n }\n this.setSlider(control.startValue, control.endValue, !control.enableDeferredUpdate, (control.rangeTooltipModule && control.tooltip.enable));\n this.previousMoveX = control.mouseX;\n }\n };\n /**\n * To get the range value\n * @param x\n */\n RangeSlider.prototype.getRangeValue = function (x) {\n var control = this.control;\n var axisRange = control.chartSeries.xAxis.actualRange;\n var bounds = control.bounds;\n return getRangeValueXByPoint(x, bounds.width, axisRange, control.enableRtl);\n };\n /**\n * Moused down handler for slider perform here\n * @param e\n */\n RangeSlider.prototype.mouseDownHandler = function (e) {\n this.currentSlider = this.getCurrentSlider(e.target.id);\n this.selectedElement.setAttribute('style', 'cursor: -webkit-grabbing');\n this.isDrag = !(this.currentSlider === 'UnSelectedArea' || !this.currentSlider);\n this.previousMoveX = this.control.mouseDownX;\n };\n /**\n * To get the current slider element\n * @param id\n */\n RangeSlider.prototype.getCurrentSlider = function (id) {\n var hoverColor = this.control.themeStyle.thumbHoverColor;\n if (id.indexOf(this.elementId + '_LeftSlider') > -1) {\n this.leftSlider.childNodes[2].setAttribute('fill', hoverColor);\n return 'Left';\n }\n else if (id.indexOf(this.elementId + '_RightSlider') > -1) {\n this.rightSlider.childNodes[2].setAttribute('fill', hoverColor);\n return 'Right';\n }\n else if (id.indexOf(this.elementId + '_SelectedArea') > -1) {\n return 'Middle';\n }\n else if (id.indexOf('UnSelectedArea') > -1) {\n this.leftSlider.childNodes[2].setAttribute('fill', this.thumbColor);\n this.rightSlider.childNodes[2].setAttribute('fill', this.thumbColor);\n return 'UnSelectedArea';\n }\n else if (id.indexOf(this.elementId + '_AxisLabel_') > -1 && this.control.valueType === 'DateTime') {\n this.labelIndex = +id.split('_')[2];\n return 'firstLevelLabels';\n }\n else if (id.indexOf(this.elementId + '_SecondaryLabel') > -1 && this.control.valueType === 'DateTime') {\n this.labelIndex = +id.split('_')[2];\n return 'secondLevelLabels';\n }\n else {\n this.leftSlider.childNodes[2].setAttribute('fill', this.thumbColor);\n this.rightSlider.childNodes[2].setAttribute('fill', this.thumbColor);\n if (this.control.periodSelectorModule) {\n this.control.periodSelectorModule.triggerChange = true;\n }\n return null;\n }\n };\n /**\n * Mouse up handler performed here\n * @param e\n */\n RangeSlider.prototype.mouseUpHandler = function (e) {\n var control = this.control;\n var range = control.chartSeries.xAxis.actualRange;\n var trigger = control.enableDeferredUpdate;\n var endbledTooltip = control.tooltip.enable;\n if (this.currentSlider === 'UnSelectedArea') {\n var value = void 0;\n var start = void 0;\n var end = void 0;\n var isRtl = control.enableRtl;\n var difference = control.endValue - control.startValue;\n if (control.mouseDownX < this.startX) {\n value = Math.max(this.getRangeValue((control.mouseDownX - (this.sliderWidth / 2) - control.bounds.x)), range.min);\n end = isRtl ? value : (value + difference);\n start = isRtl ? (value - difference) : value;\n }\n else {\n value = Math.min(this.getRangeValue((control.mouseDownX + (this.sliderWidth / 2) - control.bounds.x)), range.max);\n start = isRtl ? value : (value - difference);\n end = isRtl ? (value + difference) : value;\n }\n this.performAnimation(start, end, control);\n trigger = false;\n }\n else if (this.currentSlider === 'firstLevelLabels' || this.currentSlider === 'secondLevelLabels') {\n var secondLabel = control.rangeAxis[this.currentSlider][this.labelIndex + 1];\n this.performAnimation(control.rangeAxis[this.currentSlider][this.labelIndex].value, (secondLabel ? secondLabel.value : range.max), control);\n trigger = false;\n }\n if (this.isDrag && control.allowSnapping) {\n this.setAllowSnapping(control, this.currentStart, this.currentEnd, trigger, endbledTooltip);\n trigger = false;\n }\n if (trigger) {\n this.setSlider(this.currentStart, this.currentEnd, true, endbledTooltip);\n }\n if (this.currentSlider !== null) {\n if (this.control.periodSelectorSettings.periods.length > 0) {\n this.control.periodSelectorModule.triggerChange = false;\n this.control.periodSelectorModule.datePicker.startDate = new Date(this.currentStart);\n this.control.periodSelectorModule.datePicker.endDate = new Date(this.currentEnd);\n }\n }\n this.selectedElement.setAttribute('style', 'cursor: -webkit-grab');\n control.startValue = this.currentStart;\n control.endValue = this.currentEnd;\n this.isDrag = false;\n this.labelIndex = null;\n this.currentSlider = null;\n };\n /**\n * Allow Snapping perfomed here\n * @param control\n * @param start\n * @param end\n */\n RangeSlider.prototype.setAllowSnapping = function (control, start, end, trigger, tooltip) {\n var values = control.rangeAxis.lowerValues;\n values.push(control.chartSeries.xAxis.actualRange.max);\n this.setSlider(getNearestValue(values, start), getNearestValue(values, end), trigger, tooltip);\n control.startValue = this.currentStart;\n control.endValue = this.currentEnd;\n };\n /**\n * Animation Calculation for slider navigation\n * @param start\n * @param end\n */\n RangeSlider.prototype.performAnimation = function (start, end, control) {\n var _this = this;\n var currentStart = this.currentStart;\n var currentEnd = this.currentEnd;\n var isDeffered = control.enableDeferredUpdate;\n var enableTooltip = control.tooltip.enable;\n new Animation({}).animate(createElement('div'), {\n duration: this.control.animationDuration,\n progress: function (args) {\n _this.setSlider(linear(args.timeStamp, 0, start - currentStart, args.duration) + currentStart, linear(args.timeStamp, 0, end - currentEnd, args.duration) + currentEnd, !isDeffered, enableTooltip);\n },\n end: function (model) {\n if (control.allowSnapping) {\n _this.setAllowSnapping(control, start, end, true, enableTooltip);\n }\n else {\n _this.setSlider(start, end, true, enableTooltip);\n }\n _this.control.startValue = _this.currentStart;\n _this.control.endValue = _this.currentEnd;\n if (_this.control.periodSelectorSettings.periods.length > 0) {\n _this.control.periodSelectorModule.triggerChange = false;\n _this.control.periodSelectorModule.datePicker.startDate = new Date(_this.currentStart);\n _this.control.periodSelectorModule.datePicker.endDate = new Date(_this.currentEnd);\n }\n }\n });\n };\n /**\n * Mouse Cancel Handler\n */\n RangeSlider.prototype.mouseCancelHandler = function () {\n this.isDrag = false;\n this.currentSlider = null;\n this.control.startValue = this.currentStart;\n this.control.endValue = this.currentEnd;\n };\n /**\n * Destroy Method Calling here\n */\n RangeSlider.prototype.destroy = function () {\n this.removeEventListener();\n };\n return RangeSlider;\n}());\nexport { RangeSlider };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, NotifyPropertyChanges, Complex, Collection, Browser } from '@syncfusion/ej2-base';\nimport { EventHandler, remove, Internationalization } from '@syncfusion/ej2-base';\nimport { Event } from '@syncfusion/ej2-base';\nimport { createSvg, Size, Rect, measureText } from '../common/utils/helper';\nimport { Border, Margin } from '../common/model/base';\nimport { RangeSeries } from './renderer/chart-render';\nimport { RangeNavigatorAxis } from './renderer/range-axis';\nimport { RangeNavigatorSeries, StyleSettings, RangeTooltipSettings, PeriodSelectorSettings } from './model/range-base';\nimport { RangeSlider } from './renderer/slider';\nimport { RectOption } from '../chart/index';\nimport { getElement, LineSeries } from '../chart/index';\nimport { getRangeThemeColor } from './utils/theme';\nimport { Font } from '../common/model/base';\nimport { MajorGridLines, MajorTickLines } from '../chart/axis/axis';\nimport { RangeNavigatorTheme } from './utils/theme';\nimport { Double } from '../chart/axis/double-axis';\nimport { ExportUtils } from '../common/utils/export';\n/**\n * Range Navigator\n */\nvar RangeNavigator = /** @class */ (function (_super) {\n __extends(RangeNavigator, _super);\n /**\n * Constructor for creating the widget\n * @hidden\n */\n function RangeNavigator(options, element) {\n var _this = _super.call(this, options, element) || this;\n /** @private */\n _this.animateSeries = true;\n _this.chartid = 57725;\n return _this;\n }\n /**\n * Starting point of the control initialization\n */\n RangeNavigator.prototype.preRender = function () {\n this.unWireEvents();\n this.setCulture();\n if (this.element.id === '') {\n var collection = document.getElementsByClassName('e-rangenavigator').length;\n this.element.id = 'rangenavigator_' + this.chartid + '_' + collection;\n }\n this.wireEvents();\n };\n /**\n * To initialize the private variables\n */\n RangeNavigator.prototype.initPrivateVariables = function () {\n this.doubleModule = new Double();\n this.labels = [];\n this.rangeSlider = new RangeSlider(this);\n this.chartSeries = new RangeSeries(this);\n this.lineSeriesModule = new LineSeries();\n this.rangeAxis = new RangeNavigatorAxis(this);\n };\n /**\n * Method to set culture for chart\n */\n RangeNavigator.prototype.setCulture = function () {\n this.intl = new Internationalization();\n };\n /**\n * to initialize the slider\n */\n RangeNavigator.prototype.setSliderValue = function () {\n var isDateTime = this.valueType === 'DateTime';\n var range = this.chartSeries.xAxis.actualRange;\n this.startValue = this.startValue ? this.startValue : (!this.value[0] ? range.min :\n (isDateTime ? this.value[0].getTime() : +this.value[0]));\n this.endValue = this.endValue ? this.endValue : (!this.value[1] ? range.max :\n (isDateTime ? this.value[1].getTime() : +this.value[1]));\n };\n /**\n * To render the range navigator\n */\n RangeNavigator.prototype.render = function () {\n this.trigger('load', { rangeNavigator: this });\n this.setTheme();\n this.initPrivateVariables();\n this.createRangeSvg();\n this.calculateBounds();\n this.chartSeries.renderChart(this);\n };\n /**\n * Theming for rangeNavigator\n */\n RangeNavigator.prototype.setTheme = function () {\n /*! Set theme */\n this.themeStyle = getRangeThemeColor(this.theme, this);\n };\n /**\n * Method to create SVG for Range Navigator\n */\n RangeNavigator.prototype.createRangeSvg = function () {\n this.removeSvg();\n createSvg(this);\n this.renderChartBackground();\n };\n /**\n * Bounds calculation for widget performed.\n */\n RangeNavigator.prototype.calculateBounds = function () {\n var labelPadding = this.enableGrouping ? 15 : 8;\n var thumb = this.navigatorStyleSettings.thumb;\n var labelSize = measureText('tempString', this.labelStyle).height;\n var margin = this.margin;\n var isLeightWeight = !this.series.length;\n var tooltipSpace = (!this.disableRangeSelector) &&\n isLeightWeight && this.tooltip.enable ? 35 : 0;\n var selector = this.periodSelectorModule;\n if (this.periodSelectorModule && this.periodSelectorSettings.periods.length > 0) {\n selector.periodSelectorSize = { x: 0, y: 0, height: 0, width: 0 };\n selector.periodSelectorSize.width = this.availableSize.width;\n selector.periodSelectorSize.height = this.periodSelectorSettings.height;\n selector.periodSelectorSize.y = this.periodSelectorSettings.position === 'Bottom' ?\n this.availableSize.height - selector.periodSelectorSize.height : 0;\n }\n var periodSelectorY = this.periodSelectorSettings.position === 'Top' && selector ?\n selector.periodSelectorSize.y + selector.periodSelectorSize.height : 0;\n this.bounds = new Rect((this.themeStyle.thumbWidth / 2 + thumb.border.width + margin.left), margin.top + tooltipSpace + periodSelectorY, this.availableSize.width - this.themeStyle.thumbWidth - (thumb.border.width * 2) - margin.left - margin.right, this.availableSize.height - margin.top - margin.bottom - tooltipSpace - (selector ? selector.periodSelectorSize.height : 0));\n var deductHeight = ((this.labelPosition === 'Outside' || isLeightWeight) ?\n (labelSize + labelPadding) : 0) + ((this.tickPosition === 'Outside' || isLeightWeight) ?\n (this.majorTickLines.height) : 0);\n this.bounds.height -= deductHeight;\n if (isLeightWeight) {\n var height = this.enableGrouping ? this.bounds.height - ((labelSize) + labelPadding) : this.bounds.height;\n this.bounds.y += (this.themeStyle.thumbHeight > height ? (this.themeStyle.thumbHeight - height) / 2 : 0);\n }\n if (this.disableRangeSelector) {\n this.bounds.y = 0;\n this.bounds.height = this.periodSelectorSettings.height;\n }\n };\n /**\n * Creating Chart for range navigator\n */\n RangeNavigator.prototype.renderChart = function () {\n this.chartSeries.renderSeries(this);\n this.rangeAxis.renderGridLines();\n this.rangeAxis.renderAxisLabels();\n this.createSecondaryElement();\n this.setSliderValue();\n this.renderPeriodSelector();\n this.renderSlider();\n this.element.appendChild(this.svgObject);\n this.trigger('loaded', { rangeNavigator: this });\n this.rangeSlider.setSlider(this.startValue, this.endValue, false, this.tooltip.enable && this.tooltip.displayMode === 'Always');\n };\n /**\n * To render period selector value\n */\n RangeNavigator.prototype.renderPeriodSelector = function () {\n if (this.periodSelectorModule) {\n this.periodSelectorModule.renderSelectorElement(this);\n this.periodSelectorModule.renderSelector();\n }\n };\n /**\n * Creating secondary range navigator\n */\n RangeNavigator.prototype.createSecondaryElement = function () {\n // For userInteraction\n if (this.tooltip.enable) {\n var tooltipDiv = document.createElement('div');\n tooltipDiv.id = this.element.id + '_Secondary_Element';\n tooltipDiv.setAttribute('style', 'position: relative');\n this.element.appendChild(tooltipDiv);\n }\n };\n /**\n * Slider Calculation ane rendering performed here\n */\n RangeNavigator.prototype.renderSlider = function () {\n this.rangeSlider.render(this);\n this.rangeSlider.setSlider(this.startValue, this.endValue, true, this.tooltip.enable && this.tooltip.displayMode === 'Always');\n };\n /**\n * To Remove the SVG.\n * @return {boolean}\n * @private\n */\n RangeNavigator.prototype.removeSvg = function () {\n if (getElement(this.element.id + '_Secondary_Element')) {\n remove(getElement(this.element.id + '_Secondary_Element'));\n }\n var removeLength = 0;\n if (this.svgObject) {\n while (this.svgObject.childNodes.length > removeLength) {\n this.svgObject.removeChild(this.svgObject.firstChild);\n }\n if (!this.svgObject.hasChildNodes() && this.svgObject.parentNode) {\n remove(this.svgObject);\n }\n }\n };\n /** Wire, UnWire and Event releated calculation Started here */\n /**\n * Method to un-bind events for range navigator\n */\n RangeNavigator.prototype.unWireEvents = function () {\n /*! Find the Events type */\n var startEvent = Browser.touchStartEvent;\n var moveEvent = Browser.touchMoveEvent;\n var stopEvent = Browser.touchEndEvent;\n var cancelEvent = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n /*! UnBind the Event handler */\n EventHandler.remove(this.element, startEvent, this.rangeOnMouseDown);\n EventHandler.remove(this.element, moveEvent, this.mouseMove);\n EventHandler.remove(this.element, stopEvent, this.mouseEnd);\n EventHandler.remove(this.element, 'click', this.rangeOnMouseClick);\n //EventHandler.remove(this.element, 'contextmenu', this.rangeRightClick);\n EventHandler.remove(this.element, cancelEvent, this.mouseLeave);\n window.removeEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.rangeResize);\n };\n /**\n * Method to bind events for range navigator\n */\n RangeNavigator.prototype.wireEvents = function () {\n /*! Find the Events type */\n var cancelEvent = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n /*! Bind the Event handler */\n EventHandler.add(this.element, Browser.touchStartEvent, this.rangeOnMouseDown, this);\n EventHandler.add(this.element, Browser.touchMoveEvent, this.mouseMove, this);\n EventHandler.add(this.element, Browser.touchEndEvent, this.mouseEnd, this);\n EventHandler.add(this.element, 'click', this.rangeOnMouseClick, this);\n //EventHandler.add(this.element, 'contextmenu', this.rangeRightClick, this);\n EventHandler.add(this.element, cancelEvent, this.mouseLeave, this);\n window.addEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.rangeResize.bind(this));\n var element = this.element;\n element.style.touchAction = 'none';\n element.style.msTouchAction = 'none';\n element.style.msContentZooming = 'none';\n element.style.msUserSelect = 'none';\n element.style.webkitUserSelect = 'none';\n element.style.position = 'relative';\n element.style.display = 'block';\n };\n /**\n * Handles the widget resize.\n * @return {boolean}\n * @private\n */\n RangeNavigator.prototype.rangeResize = function (e) {\n var _this = this;\n this.animateSeries = false;\n if (this.resizeTo) {\n clearTimeout(this.resizeTo);\n }\n var arg = {\n rangeNavigator: this,\n name: 'resized',\n currentSize: new Size(0, 0),\n previousSize: new Size(this.availableSize.width, this.availableSize.height),\n };\n this.resizeTo = setTimeout(function () {\n if (_this.isDestroyed) {\n clearTimeout(_this.resizeTo);\n return;\n }\n _this.createRangeSvg();\n arg.currentSize = _this.availableSize;\n _this.trigger('resized', arg);\n _this.calculateBounds();\n _this.chartSeries.renderChart(_this);\n }, 500);\n return false;\n };\n /**\n * Handles the mouse move.\n * @return {boolean}\n * @private\n */\n RangeNavigator.prototype.mouseMove = function (e) {\n this.mouseX = this.setMouseX(e);\n this.notify(Browser.touchMoveEvent, e);\n return false;\n };\n /**\n * Handles the mouse leave.\n * @return {boolean}\n * @private\n */\n RangeNavigator.prototype.mouseLeave = function (e) {\n var cancelEvent = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n this.mouseX = this.setMouseX(e);\n this.notify(cancelEvent, e);\n return false;\n };\n /**\n * Handles the mouse click on range navigator.\n * @return {boolean}\n * @private\n */\n RangeNavigator.prototype.rangeOnMouseClick = function (e) {\n this.notify('click', e);\n return false;\n };\n /**\n * Handles the print method for range navigator control.\n */\n RangeNavigator.prototype.print = function (id) {\n new ExportUtils(this).print(id);\n };\n /**\n * Handles the export method for range navigator control.\n * @param type\n * @param fileName\n */\n RangeNavigator.prototype.export = function (type, fileName, orientation, controls, width, height) {\n controls = controls ? controls : [this];\n new ExportUtils(this).export(type, fileName, orientation, controls, width, height);\n };\n /**\n * Creating a background element to the svg object\n */\n RangeNavigator.prototype.renderChartBackground = function () {\n var rect = new RectOption(this.element.id + '_ChartBorder', this.themeStyle.background, { width: 0, color: 'transparent' }, 1, new Rect(0, 0, this.availableSize.width, this.availableSize.height));\n this.svgObject.appendChild(this.renderer.drawRectangle(rect));\n };\n /**\n * Handles the mouse down on range navigator.\n * @return {boolean}\n * @private\n */\n RangeNavigator.prototype.rangeOnMouseDown = function (e) {\n this.mouseDownX = this.setMouseX(e);\n this.notify(Browser.touchStartEvent, e);\n return false;\n };\n /**\n * Handles the mouse up.\n * @return {boolean}\n * @private\n */\n RangeNavigator.prototype.mouseEnd = function (e) {\n this.mouseX = this.setMouseX(e);\n this.notify(Browser.touchEndEvent, e);\n return false;\n };\n // private rangeRightClick(event: MouseEvent | PointerEvent): boolean {\n // if (event.buttons === 2 || event.which === 0 || (event).pointerType === 'touch') {\n // event.preventDefault();\n // event.stopPropagation();\n // return false;\n // }\n // return true;\n // }\n /**\n * To find mouse x, y for aligned range navigator element svg position\n */\n RangeNavigator.prototype.setMouseX = function (e) {\n var pageX = e.type.indexOf('touch') > -1 ?\n e.changedTouches[0].clientX : e.clientX;\n var rect = this.element.getBoundingClientRect();\n var svgRect = getElement(this.element.id + '_svg').getBoundingClientRect();\n return (pageX - rect.left) - Math.max(svgRect.left - rect.left, 0);\n };\n /** Wire, UnWire and Event releated calculation End here */\n /**\n * Get the properties to be maintained in the persisted state.\n * @private\n */\n RangeNavigator.prototype.getPersistData = function () {\n var keyEntity = ['loaded'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * OnProperty change method calling here\n * @param newProp\n * @param oldProp\n */\n RangeNavigator.prototype.onPropertyChanged = function (newProp, oldProp) {\n var renderer = false;\n var refreshBounds = false;\n var refreshRange = false;\n this.animateSeries = false;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'width':\n case 'height':\n case 'navigatorBorder':\n case 'enableGrouping':\n case 'labelPosition':\n case 'tickPosition':\n case 'labelStyle':\n refreshBounds = true;\n break;\n case 'series':\n case 'enableRtl':\n case 'dataSource':\n case 'xName':\n case 'yName':\n case 'query':\n case 'minimum':\n case 'maximum':\n case 'interval':\n case 'intervalType':\n case 'logBase':\n case 'valueType':\n case 'majorGridLines':\n case 'minorGridLines':\n case 'navigatorStyleSettings':\n case 'labelFormat':\n case 'skeleton':\n case 'skeletonType':\n case 'secondaryLabelAlignment':\n renderer = true;\n break;\n case 'theme':\n this.animateSeries = true;\n break;\n case 'locale':\n _super.prototype.refresh.call(this);\n break;\n case 'value':\n refreshRange = true;\n break;\n }\n }\n if (!refreshBounds && renderer) {\n this.removeSvg();\n this.chartSeries.renderChart(this);\n }\n if (refreshBounds) {\n this.removeSvg();\n this.calculateBounds();\n this.chartSeries.renderChart(this);\n }\n if (!refreshBounds && !renderer && refreshRange) {\n this.setSliderValue();\n this.rangeSlider.setSlider(this.startValue, this.endValue, true, this.tooltip.enable && this.tooltip.displayMode === 'Always');\n }\n };\n /**\n * To provide the array of modules needed for control rendering\n * @return {ModuleDeclaration[]}\n * @private\n */\n RangeNavigator.prototype.requiredModules = function () {\n var _this = this;\n var modules = [];\n this.series.map(function (series) {\n modules.push({\n member: series.type + 'Series',\n args: [_this]\n });\n });\n if (this.periodSelectorSettings.periods.length > 0) {\n modules.push({\n member: 'PeriodSelector',\n args: [this]\n });\n }\n if (this.valueType !== 'Double') {\n modules.push({\n member: this.valueType,\n args: [this]\n });\n }\n if (this.tooltip.enable) {\n modules.push({\n member: 'RangeTooltip',\n args: [this]\n });\n }\n return modules;\n };\n /**\n * To get the module name of the widget\n */\n RangeNavigator.prototype.getModuleName = function () {\n return 'rangeNavigator';\n };\n /**\n * To destroy the widget\n * @method destroy\n * @return {void}.\n * @member of rangeNavigator\n */\n RangeNavigator.prototype.destroy = function () {\n this.unWireEvents();\n this.rangeSlider.destroy();\n _super.prototype.destroy.call(this);\n this.element.classList.remove('e-rangenavigator');\n };\n __decorate([\n Property(null)\n ], RangeNavigator.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], RangeNavigator.prototype, \"height\", void 0);\n __decorate([\n Property(null)\n ], RangeNavigator.prototype, \"dataSource\", void 0);\n __decorate([\n Property(null)\n ], RangeNavigator.prototype, \"xName\", void 0);\n __decorate([\n Property(null)\n ], RangeNavigator.prototype, \"yName\", void 0);\n __decorate([\n Property(null)\n ], RangeNavigator.prototype, \"query\", void 0);\n __decorate([\n Collection([], RangeNavigatorSeries)\n ], RangeNavigator.prototype, \"series\", void 0);\n __decorate([\n Complex({}, RangeTooltipSettings)\n ], RangeNavigator.prototype, \"tooltip\", void 0);\n __decorate([\n Property(null)\n ], RangeNavigator.prototype, \"minimum\", void 0);\n __decorate([\n Property(null)\n ], RangeNavigator.prototype, \"maximum\", void 0);\n __decorate([\n Property(null)\n ], RangeNavigator.prototype, \"interval\", void 0);\n __decorate([\n Property('Auto')\n ], RangeNavigator.prototype, \"intervalType\", void 0);\n __decorate([\n Property('Hide')\n ], RangeNavigator.prototype, \"labelIntersectAction\", void 0);\n __decorate([\n Property(10)\n ], RangeNavigator.prototype, \"logBase\", void 0);\n __decorate([\n Property('Double')\n ], RangeNavigator.prototype, \"valueType\", void 0);\n __decorate([\n Property('Outside')\n ], RangeNavigator.prototype, \"labelPosition\", void 0);\n __decorate([\n Property(500)\n ], RangeNavigator.prototype, \"animationDuration\", void 0);\n __decorate([\n Property(false)\n ], RangeNavigator.prototype, \"enableGrouping\", void 0);\n __decorate([\n Property(false)\n ], RangeNavigator.prototype, \"enableDeferredUpdate\", void 0);\n __decorate([\n Property(false)\n ], RangeNavigator.prototype, \"disableRangeSelector\", void 0);\n __decorate([\n Property(false)\n ], RangeNavigator.prototype, \"allowSnapping\", void 0);\n __decorate([\n Property(false)\n ], RangeNavigator.prototype, \"useGroupingSeparator\", void 0);\n __decorate([\n Property()\n ], RangeNavigator.prototype, \"groupBy\", void 0);\n __decorate([\n Property('Outside')\n ], RangeNavigator.prototype, \"tickPosition\", void 0);\n __decorate([\n Complex(RangeNavigatorTheme.axisLabelFont, Font)\n ], RangeNavigator.prototype, \"labelStyle\", void 0);\n __decorate([\n Complex({}, MajorGridLines)\n ], RangeNavigator.prototype, \"majorGridLines\", void 0);\n __decorate([\n Complex({}, MajorTickLines)\n ], RangeNavigator.prototype, \"majorTickLines\", void 0);\n __decorate([\n Complex({}, StyleSettings)\n ], RangeNavigator.prototype, \"navigatorStyleSettings\", void 0);\n __decorate([\n Complex({}, PeriodSelectorSettings)\n ], RangeNavigator.prototype, \"periodSelectorSettings\", void 0);\n __decorate([\n Complex({ color: '#DDDDDD', width: 1 }, Border)\n ], RangeNavigator.prototype, \"navigatorBorder\", void 0);\n __decorate([\n Property('Material')\n ], RangeNavigator.prototype, \"theme\", void 0);\n __decorate([\n Property([])\n ], RangeNavigator.prototype, \"value\", void 0);\n __decorate([\n Property('')\n ], RangeNavigator.prototype, \"labelFormat\", void 0);\n __decorate([\n Property('')\n ], RangeNavigator.prototype, \"skeleton\", void 0);\n __decorate([\n Property('DateTime')\n ], RangeNavigator.prototype, \"skeletonType\", void 0);\n __decorate([\n Property('Middle')\n ], RangeNavigator.prototype, \"secondaryLabelAlignment\", void 0);\n __decorate([\n Complex({ top: 5, bottom: 5, right: 5, left: 5 }, Margin)\n ], RangeNavigator.prototype, \"margin\", void 0);\n __decorate([\n Event()\n ], RangeNavigator.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], RangeNavigator.prototype, \"loaded\", void 0);\n __decorate([\n Event()\n ], RangeNavigator.prototype, \"resized\", void 0);\n __decorate([\n Event()\n ], RangeNavigator.prototype, \"labelRender\", void 0);\n __decorate([\n Event()\n ], RangeNavigator.prototype, \"changed\", void 0);\n __decorate([\n Event()\n ], RangeNavigator.prototype, \"tooltipRender\", void 0);\n __decorate([\n Event()\n ], RangeNavigator.prototype, \"selectorRender\", void 0);\n __decorate([\n Event()\n ], RangeNavigator.prototype, \"beforePrint\", void 0);\n RangeNavigator = __decorate([\n NotifyPropertyChanges\n ], RangeNavigator);\n return RangeNavigator;\n}(Component));\nexport { RangeNavigator };\n","import { createElement, isNullOrUndefined, Browser } from '@syncfusion/ej2-base';\nimport { Toolbar } from '@syncfusion/ej2-navigations';\nimport { DateRangePicker } from '@syncfusion/ej2-calendars';\nimport { getElement } from '../../common/utils/helper';\n/**\n * Period selector class\n */\nvar PeriodSelector = /** @class */ (function () {\n //constructor for period selector\n function PeriodSelector(rangeNavigator) {\n this.control = rangeNavigator;\n }\n /**\n * renderSelector div\n * @param control\n */\n PeriodSelector.prototype.renderSelectorElement = function (control) {\n //render border\n var periodSelectorSize = this.periodSelectorSize;\n var thumbSize = control.themeStyle.thumbWidth;\n this.periodSelectorDiv = createElement('div', {\n id: control.element.id + '_Secondary_Element',\n styles: 'width: ' + (this.periodSelectorSize.width - thumbSize) + 'px;height: ' +\n this.periodSelectorSize.height + 'px;top:' +\n this.periodSelectorSize.y + 'px;left:' +\n (this.periodSelectorSize.x + thumbSize / 2) + 'px; position: absolute'\n });\n this.control.element.appendChild(this.periodSelectorDiv);\n };\n /**\n * renderSelector elements\n */\n PeriodSelector.prototype.renderSelector = function () {\n var _this = this;\n var selectorElement = createElement('div', { id: this.control.element.id + '_selector' });\n this.periodSelectorDiv.appendChild(selectorElement);\n //render toolbar\n var selector = [];\n var buttons = this.control.periodSelectorSettings.periods;\n for (var i = 0; i < buttons.length; i++) {\n selector.push({ align: 'Left', text: buttons[i].text });\n }\n this.calendarId = this.control.element.id + '_calendar';\n selector.push({ template: '
    ', align: 'Right' });\n var selctorArgs = {\n selector: selector,\n name: 'RangeSelector',\n cancel: false,\n enableCustomFormat: false,\n content: ''\n };\n this.control.trigger('selectorRender', selctorArgs);\n this.toolbar = new Toolbar({\n items: selctorArgs.selector, height: this.periodSelectorSize.height,\n clicked: function (args) {\n _this.buttonClick(args, _this.control);\n }, created: function () {\n _this.nodes = _this.toolbar.element.querySelectorAll('.e-toolbar-left')[0];\n if (isNullOrUndefined(_this.selectedIndex)) {\n buttons.map(function (period, index) {\n if (period.selected) {\n _this.control.startValue = _this.changedRange(period.intervalType, _this.control.endValue, period.interval).getTime();\n _this.selectedIndex = (_this.nodes.childNodes.length - buttons.length) + index;\n }\n });\n }\n _this.setSelectedStyle(_this.selectedIndex);\n }\n });\n this.toolbar.appendTo(selectorElement);\n this.triggerChange = true;\n //render calendar\n this.datePicker = new DateRangePicker({\n min: new Date(this.control.chartSeries.xMin),\n max: new Date(this.control.chartSeries.xMax),\n format: 'dd\\'\\/\\'MM\\'\\/\\'yyyy',\n placeholder: 'Select a range',\n showClearButton: false,\n startDate: new Date(this.control.startValue),\n endDate: new Date(this.control.endValue),\n created: function (args) {\n if (selctorArgs.enableCustomFormat) {\n var datePickerElement = document.getElementsByClassName('e-date-range-wrapper')[0];\n datePickerElement.style.display = 'none';\n datePickerElement.insertAdjacentElement('afterend', createElement('div', { id: 'customRange',\n innerHTML: selctorArgs.content, className: 'e-btn e-small' }));\n getElement('customRange').insertAdjacentElement('afterbegin', (createElement('span', { id: 'dateIcon',\n className: 'e-input-group-icon e-range-icon e-icons', styles: 'margin-right: 10px' })));\n document.getElementById('customRange').onclick = function () {\n _this.datePicker.show(getElement('customRange'));\n };\n }\n },\n change: function (args) {\n if (_this.triggerChange) {\n _this.control.rangeSlider.performAnimation(args.startDate.getTime(), args.endDate.getTime(), _this.control);\n }\n }\n });\n this.datePicker.appendTo('#' + this.calendarId);\n };\n /**\n * To set and deselect the acrive style\n * @param buttons\n */\n PeriodSelector.prototype.setSelectedStyle = function (selectedIndex) {\n if (this.control.disableRangeSelector) {\n for (var i = 0, length_1 = this.nodes.childNodes.length; i < length_1; i++) {\n this.nodes.childNodes[i].childNodes[0].classList.remove('e-active');\n this.nodes.childNodes[i].childNodes[0].classList.remove('e-active');\n }\n this.nodes.childNodes[selectedIndex].childNodes[0].classList.add('e-flat');\n this.nodes.childNodes[selectedIndex].childNodes[0].classList.add('e-active');\n }\n };\n /**\n * Button click handling\n */\n PeriodSelector.prototype.buttonClick = function (args, control) {\n var _this = this;\n var toolBarItems = this.toolbar.items;\n var clickedEle = args.item;\n var slider = control.rangeSlider;\n var updatedStart;\n var updatedEnd;\n var buttons = control.periodSelectorSettings.periods;\n var button = buttons.filter(function (btn) { return (btn.text === clickedEle.text); });\n buttons.map(function (period, index) {\n if (period.text === args.item.text) {\n _this.selectedIndex = (_this.nodes.childNodes.length - buttons.length) + index;\n }\n });\n this.setSelectedStyle(this.selectedIndex);\n if (clickedEle.text.toLowerCase() === 'all') {\n updatedStart = control.chartSeries.xMin;\n updatedEnd = control.chartSeries.xMax;\n slider.performAnimation(updatedStart, updatedEnd, control);\n }\n else if (clickedEle.text.toLowerCase() === 'ytd') {\n updatedStart = new Date(new Date(slider.currentEnd).getFullYear().toString()).getTime();\n updatedEnd = slider.currentEnd;\n slider.performAnimation(updatedStart, updatedEnd, control);\n }\n else if (clickedEle.text.toLowerCase() !== '') {\n updatedStart = this.changedRange(button[0].intervalType, slider.currentEnd, button[0].interval).getTime();\n updatedEnd = slider.currentEnd;\n slider.performAnimation(updatedStart, updatedEnd, control);\n }\n if (getElement(this.calendarId + '_popup') && !Browser.isDevice) {\n var element = getElement(this.calendarId + '_popup');\n element.querySelectorAll('.e-range-header')[0].style.display = 'none';\n }\n };\n /**\n *\n * @param type updatedRange for selector\n * @param end\n * @param interval\n */\n PeriodSelector.prototype.changedRange = function (type, end, interval) {\n var result = new Date(end);\n switch (type) {\n case 'Quarter':\n result.setMonth(result.getMonth() - (3 * interval));\n break;\n case 'Months':\n result.setMonth(result.getMonth() - interval);\n break;\n case 'Weeks':\n result.setDate(result.getDate() - (interval * 7));\n break;\n case 'Days':\n result.setDate(result.getDate() - interval);\n break;\n case 'Hours':\n result.setHours(result.getHours() - interval);\n break;\n case 'Minutes':\n result.setMinutes(result.getMinutes() - interval);\n break;\n case 'Seconds':\n result.setSeconds(result.getSeconds() - interval);\n break;\n default:\n result.setFullYear(result.getFullYear() - interval);\n break;\n }\n return result;\n };\n ;\n /**\n * Get module name\n */\n PeriodSelector.prototype.getModuleName = function () {\n return 'PeriodSelector';\n };\n /**\n * To destroy the period selector.\n * @return {void}\n * @private\n */\n PeriodSelector.prototype.destroy = function () {\n /**\n * destroy method\n */\n };\n return PeriodSelector;\n}());\nexport { PeriodSelector };\n","import { Tooltip as SVGTooltip } from '@syncfusion/ej2-svg-base';\nimport { getElement } from '../../common/utils/helper';\nimport { stopTimer } from '../../common/utils/helper';\nimport { firstToLowerCase } from '../../index';\nimport { measureText, createTemplate } from '../../index';\nimport { createElement } from '@syncfusion/ej2-base';\n/**\n * `Tooltip` module is used to render the tooltip for chart series.\n */\nvar RangeTooltip = /** @class */ (function () {\n /**\n * Constructor for tooltip module.\n * @private.\n */\n function RangeTooltip(range) {\n this.control = range;\n this.elementId = range.element.id;\n }\n /**\n * Left tooltip method called here\n * @param rangeSlider\n */\n RangeTooltip.prototype.renderLeftTooltip = function (rangeSlider) {\n this.fadeOutTooltip();\n var content = this.getTooltipContent(rangeSlider.currentStart);\n var contentWidth = this.getContentSize(content);\n var rect = this.control.enableRtl ? rangeSlider.rightRect : rangeSlider.leftRect;\n if (contentWidth > rect.width) {\n rect = rangeSlider.midRect;\n }\n this.leftTooltip = this.renderTooltip(rect, this.createElement('_leftTooltip'), rangeSlider.startX, content);\n };\n /**\n * get the content size\n * @param value\n */\n RangeTooltip.prototype.getContentSize = function (value) {\n var width;\n var font = this.control.tooltip.textStyle;\n if (this.control.tooltip.template) {\n width = createTemplate(createElement('div', {\n id: 'measureElement',\n styles: 'position: absolute;'\n }), 0, this.control.tooltip.template, this.control).getBoundingClientRect().width;\n }\n else {\n // 20 for tooltip padding\n width = measureText(value[0], font).width + 20;\n }\n return width;\n };\n /**\n * Right tooltip method called here\n * @param rangeSlider\n */\n RangeTooltip.prototype.renderRightTooltip = function (rangeSlider) {\n this.fadeOutTooltip();\n var content = this.getTooltipContent(rangeSlider.currentEnd);\n var contentWidth = this.getContentSize(content);\n var rect = this.control.enableRtl ? rangeSlider.leftRect : rangeSlider.rightRect;\n if (contentWidth > rect.width) {\n rect = rangeSlider.midRect;\n rect.x = !this.control.series.length ? rect.x : 0;\n }\n this.rightTooltip = this.renderTooltip(rect, this.createElement('_rightTooltip'), rangeSlider.endX, content);\n };\n /**\n * Tooltip element creation\n * @param id\n */\n RangeTooltip.prototype.createElement = function (id) {\n if (getElement(this.elementId + id)) {\n return getElement(this.elementId + id);\n }\n else {\n var element = document.createElement('div');\n element.id = this.elementId + id;\n element.className = 'ejSVGTooltip';\n element.setAttribute('style', 'pointer-events:none; position:absolute;z-index: 1');\n getElement(this.elementId + '_Secondary_Element').appendChild(element);\n return element;\n }\n };\n /**\n * Tooltip render called here\n * @param bounds\n * @param parent\n * @param pointX\n * @param value\n */\n RangeTooltip.prototype.renderTooltip = function (bounds, parent, pointX, content) {\n var control = this.control;\n var tooltip = control.tooltip;\n var argsData = {\n cancel: false, name: 'tooltipRender', text: content,\n textStyle: tooltip.textStyle\n };\n this.control.trigger('tooltipRender', argsData);\n var left = control.svgObject.getBoundingClientRect().left -\n control.element.getBoundingClientRect().left;\n if (!argsData.cancel) {\n return new SVGTooltip({\n location: { x: pointX, y: control.rangeSlider.sliderY },\n content: argsData.text, marginX: 2,\n enableShadow: false,\n marginY: 2, arrowPadding: 8, rx: 0, ry: 0,\n inverted: control.series.length > 0,\n areaBounds: bounds, fill: tooltip.fill,\n theme: this.control.theme,\n //enableShadow: false,\n clipBounds: { x: left },\n border: tooltip.border, opacity: tooltip.opacity,\n template: tooltip.template,\n textStyle: argsData.textStyle,\n data: {\n 'start': this.getTooltipContent(this.control.startValue)[0],\n 'end': this.getTooltipContent(this.control.endValue)[0],\n 'value': content[0]\n }\n }, parent);\n }\n else {\n return null;\n }\n };\n /**\n * Tooltip content processed here\n * @param value\n */\n RangeTooltip.prototype.getTooltipContent = function (value) {\n var control = this.control;\n var tooltip = control.tooltip;\n var xAxis = control.chartSeries.xAxis;\n var text;\n var format = tooltip.format || xAxis.labelFormat;\n var isCustom = format.match('{value}') !== null;\n var valueType = xAxis.valueType;\n if (valueType === 'DateTime') {\n text = (control.intl.getDateFormat({\n format: format || 'MM/dd/yyyy',\n type: firstToLowerCase(control.skeletonType),\n skeleton: control.dateTimeModule.getSkeleton(xAxis)\n }))(new Date(value));\n }\n else {\n xAxis.format = control.intl.getNumberFormat({\n format: isCustom ? '' : format,\n useGrouping: control.useGroupingSeparator\n });\n text = control.doubleModule.formatValue(xAxis, isCustom, format, valueType === 'Logarithmic' ? Math.pow(xAxis.logBase, value) : value);\n }\n return [text];\n };\n /**\n * Fadeout animation performed here\n */\n RangeTooltip.prototype.fadeOutTooltip = function () {\n var _this = this;\n var tooltip = this.control.tooltip;\n if (tooltip.displayMode === 'OnDemand') {\n stopTimer(this.toolTipInterval);\n if (this.rightTooltip) {\n this.toolTipInterval = setTimeout(function () {\n _this.leftTooltip.fadeOut();\n _this.rightTooltip.fadeOut();\n }, 1000);\n }\n }\n };\n /**\n * Get module name.\n */\n RangeTooltip.prototype.getModuleName = function () {\n return 'RangeTooltip';\n };\n /**\n * To destroy the tooltip.\n * @return {void}\n * @private\n */\n RangeTooltip.prototype.destroy = function (chart) {\n // Destroy method called here\n };\n return RangeTooltip;\n}());\nexport { RangeTooltip };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\nvar SmithchartFont = /** @class */ (function (_super) {\n __extends(SmithchartFont, _super);\n function SmithchartFont() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Segoe UI')\n ], SmithchartFont.prototype, \"fontFamily\", void 0);\n __decorate([\n Property('Normal')\n ], SmithchartFont.prototype, \"fontStyle\", void 0);\n __decorate([\n Property('Regular')\n ], SmithchartFont.prototype, \"fontWeight\", void 0);\n __decorate([\n Property('12px')\n ], SmithchartFont.prototype, \"size\", void 0);\n __decorate([\n Property(1)\n ], SmithchartFont.prototype, \"opacity\", void 0);\n return SmithchartFont;\n}(ChildProperty));\nexport { SmithchartFont };\nvar SmithchartMargin = /** @class */ (function (_super) {\n __extends(SmithchartMargin, _super);\n function SmithchartMargin() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(10)\n ], SmithchartMargin.prototype, \"top\", void 0);\n __decorate([\n Property(10)\n ], SmithchartMargin.prototype, \"bottom\", void 0);\n __decorate([\n Property(10)\n ], SmithchartMargin.prototype, \"right\", void 0);\n __decorate([\n Property(10)\n ], SmithchartMargin.prototype, \"left\", void 0);\n return SmithchartMargin;\n}(ChildProperty));\nexport { SmithchartMargin };\nvar SmithchartBorder = /** @class */ (function (_super) {\n __extends(SmithchartBorder, _super);\n function SmithchartBorder() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0)\n ], SmithchartBorder.prototype, \"width\", void 0);\n __decorate([\n Property(1)\n ], SmithchartBorder.prototype, \"opacity\", void 0);\n __decorate([\n Property('transparent')\n ], SmithchartBorder.prototype, \"color\", void 0);\n return SmithchartBorder;\n}(ChildProperty));\nexport { SmithchartBorder };\n/**\n * Internal use of type rect\n * @private\n */\nvar SmithchartRect = /** @class */ (function () {\n function SmithchartRect(x, y, width, height) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n return SmithchartRect;\n}());\nexport { SmithchartRect };\nvar LabelCollection = /** @class */ (function () {\n function LabelCollection() {\n }\n return LabelCollection;\n}());\nexport { LabelCollection };\nvar LegendSeries = /** @class */ (function () {\n function LegendSeries() {\n }\n return LegendSeries;\n}());\nexport { LegendSeries };\nvar LabelRegion = /** @class */ (function () {\n function LabelRegion() {\n }\n return LabelRegion;\n}());\nexport { LabelRegion };\nvar HorizontalLabelCollection = /** @class */ (function (_super) {\n __extends(HorizontalLabelCollection, _super);\n function HorizontalLabelCollection() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return HorizontalLabelCollection;\n}(LabelCollection));\nexport { HorizontalLabelCollection };\nvar RadialLabelCollections = /** @class */ (function (_super) {\n __extends(RadialLabelCollections, _super);\n function RadialLabelCollections() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return RadialLabelCollections;\n}(HorizontalLabelCollection));\nexport { RadialLabelCollections };\nvar LineSegment = /** @class */ (function () {\n function LineSegment() {\n }\n return LineSegment;\n}());\nexport { LineSegment };\nvar PointRegion = /** @class */ (function () {\n function PointRegion() {\n }\n return PointRegion;\n}());\nexport { PointRegion };\n/**\n * Smithchart internal class for point\n */\nvar Point = /** @class */ (function () {\n function Point() {\n }\n return Point;\n}());\nexport { Point };\nvar ClosestPoint = /** @class */ (function () {\n function ClosestPoint() {\n }\n return ClosestPoint;\n}());\nexport { ClosestPoint };\nvar MarkerOptions = /** @class */ (function () {\n function MarkerOptions(id, fill, borderColor, borderWidth, opacity) {\n this.id = id;\n this.fill = fill;\n this.borderColor = borderColor;\n this.borderWidth = borderWidth;\n this.opacity = opacity;\n }\n return MarkerOptions;\n}());\nexport { MarkerOptions };\nvar SmithchartLabelPosition = /** @class */ (function () {\n function SmithchartLabelPosition() {\n }\n return SmithchartLabelPosition;\n}());\nexport { SmithchartLabelPosition };\nvar Direction = /** @class */ (function () {\n function Direction() {\n this.counterclockwise = 0;\n this.clockwise = 1;\n }\n return Direction;\n}());\nexport { Direction };\nvar DataLabelTextOptions = /** @class */ (function () {\n function DataLabelTextOptions() {\n }\n return DataLabelTextOptions;\n}());\nexport { DataLabelTextOptions };\nvar LabelOption = /** @class */ (function () {\n function LabelOption() {\n }\n return LabelOption;\n}());\nexport { LabelOption };\n/** @private */\nvar SmithchartSize = /** @class */ (function () {\n function SmithchartSize(width, height) {\n this.width = width;\n this.height = height;\n }\n return SmithchartSize;\n}());\nexport { SmithchartSize };\nvar GridArcPoints = /** @class */ (function () {\n function GridArcPoints() {\n }\n return GridArcPoints;\n}());\nexport { GridArcPoints };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, Complex, ChildProperty } from '@syncfusion/ej2-base';\nimport { SmithchartFont } from '../utils/utils';\nimport { Theme } from '../model/theme';\nvar LegendTitle = /** @class */ (function (_super) {\n __extends(LegendTitle, _super);\n function LegendTitle() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], LegendTitle.prototype, \"visible\", void 0);\n __decorate([\n Property('')\n ], LegendTitle.prototype, \"text\", void 0);\n __decorate([\n Property('')\n ], LegendTitle.prototype, \"description\", void 0);\n __decorate([\n Property('Center')\n ], LegendTitle.prototype, \"textAlignment\", void 0);\n __decorate([\n Complex(Theme.legendLabelFont, SmithchartFont)\n ], LegendTitle.prototype, \"textStyle\", void 0);\n return LegendTitle;\n}(ChildProperty));\nexport { LegendTitle };\nvar LegendLocation = /** @class */ (function (_super) {\n __extends(LegendLocation, _super);\n function LegendLocation() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0)\n ], LegendLocation.prototype, \"x\", void 0);\n __decorate([\n Property(0)\n ], LegendLocation.prototype, \"y\", void 0);\n return LegendLocation;\n}(ChildProperty));\nexport { LegendLocation };\nvar LegendItemStyleBorder = /** @class */ (function (_super) {\n __extends(LegendItemStyleBorder, _super);\n function LegendItemStyleBorder() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(1)\n ], LegendItemStyleBorder.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], LegendItemStyleBorder.prototype, \"color\", void 0);\n return LegendItemStyleBorder;\n}(ChildProperty));\nexport { LegendItemStyleBorder };\nvar LegendItemStyle = /** @class */ (function (_super) {\n __extends(LegendItemStyle, _super);\n function LegendItemStyle() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(10)\n ], LegendItemStyle.prototype, \"width\", void 0);\n __decorate([\n Property(10)\n ], LegendItemStyle.prototype, \"height\", void 0);\n __decorate([\n Complex({}, LegendItemStyleBorder)\n ], LegendItemStyle.prototype, \"border\", void 0);\n return LegendItemStyle;\n}(ChildProperty));\nexport { LegendItemStyle };\nvar LegendBorder = /** @class */ (function (_super) {\n __extends(LegendBorder, _super);\n function LegendBorder() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(1)\n ], LegendBorder.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], LegendBorder.prototype, \"color\", void 0);\n return LegendBorder;\n}(ChildProperty));\nexport { LegendBorder };\nvar SmithchartLegendSettings = /** @class */ (function (_super) {\n __extends(SmithchartLegendSettings, _super);\n function SmithchartLegendSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], SmithchartLegendSettings.prototype, \"visible\", void 0);\n __decorate([\n Property('bottom')\n ], SmithchartLegendSettings.prototype, \"position\", void 0);\n __decorate([\n Property('Center')\n ], SmithchartLegendSettings.prototype, \"alignment\", void 0);\n __decorate([\n Property(null)\n ], SmithchartLegendSettings.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], SmithchartLegendSettings.prototype, \"height\", void 0);\n __decorate([\n Property('circle')\n ], SmithchartLegendSettings.prototype, \"shape\", void 0);\n __decorate([\n Property(null)\n ], SmithchartLegendSettings.prototype, \"rowCount\", void 0);\n __decorate([\n Property(null)\n ], SmithchartLegendSettings.prototype, \"columnCount\", void 0);\n __decorate([\n Property(8)\n ], SmithchartLegendSettings.prototype, \"itemPadding\", void 0);\n __decorate([\n Property(5)\n ], SmithchartLegendSettings.prototype, \"shapePadding\", void 0);\n __decorate([\n Property('')\n ], SmithchartLegendSettings.prototype, \"description\", void 0);\n __decorate([\n Property(true)\n ], SmithchartLegendSettings.prototype, \"toggleVisibility\", void 0);\n __decorate([\n Complex({}, LegendTitle)\n ], SmithchartLegendSettings.prototype, \"title\", void 0);\n __decorate([\n Complex({}, LegendLocation)\n ], SmithchartLegendSettings.prototype, \"location\", void 0);\n __decorate([\n Complex({}, LegendItemStyle)\n ], SmithchartLegendSettings.prototype, \"itemStyle\", void 0);\n __decorate([\n Complex({}, LegendBorder)\n ], SmithchartLegendSettings.prototype, \"border\", void 0);\n __decorate([\n Complex(Theme.legendLabelFont, SmithchartFont)\n ], SmithchartLegendSettings.prototype, \"textStyle\", void 0);\n return SmithchartLegendSettings;\n}(ChildProperty));\nexport { SmithchartLegendSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, Complex, ChildProperty } from '@syncfusion/ej2-base';\nimport { SmithchartFont } from '../utils/utils';\nimport { Theme } from '../model/theme';\n/**\n * Configures the major Grid lines in the `axis`.\n */\nvar SmithchartMajorGridLines = /** @class */ (function (_super) {\n __extends(SmithchartMajorGridLines, _super);\n function SmithchartMajorGridLines() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(1)\n ], SmithchartMajorGridLines.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], SmithchartMajorGridLines.prototype, \"dashArray\", void 0);\n __decorate([\n Property(true)\n ], SmithchartMajorGridLines.prototype, \"visible\", void 0);\n __decorate([\n Property(1)\n ], SmithchartMajorGridLines.prototype, \"opacity\", void 0);\n return SmithchartMajorGridLines;\n}(ChildProperty));\nexport { SmithchartMajorGridLines };\n/**\n * Configures the major grid lines in the `axis`.\n */\nvar SmithchartMinorGridLines = /** @class */ (function (_super) {\n __extends(SmithchartMinorGridLines, _super);\n function SmithchartMinorGridLines() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(1)\n ], SmithchartMinorGridLines.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], SmithchartMinorGridLines.prototype, \"dashArray\", void 0);\n __decorate([\n Property(false)\n ], SmithchartMinorGridLines.prototype, \"visible\", void 0);\n __decorate([\n Property(8)\n ], SmithchartMinorGridLines.prototype, \"count\", void 0);\n return SmithchartMinorGridLines;\n}(ChildProperty));\nexport { SmithchartMinorGridLines };\n/**\n * Configures the axis lines in the `axis`.\n */\nvar SmithchartAxisLine = /** @class */ (function (_super) {\n __extends(SmithchartAxisLine, _super);\n function SmithchartAxisLine() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], SmithchartAxisLine.prototype, \"visible\", void 0);\n __decorate([\n Property(1)\n ], SmithchartAxisLine.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], SmithchartAxisLine.prototype, \"dashArray\", void 0);\n return SmithchartAxisLine;\n}(ChildProperty));\nexport { SmithchartAxisLine };\nvar SmithchartAxis = /** @class */ (function (_super) {\n __extends(SmithchartAxis, _super);\n function SmithchartAxis() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], SmithchartAxis.prototype, \"visible\", void 0);\n __decorate([\n Property('Outside')\n ], SmithchartAxis.prototype, \"labelPosition\", void 0);\n __decorate([\n Property('Hide')\n ], SmithchartAxis.prototype, \"labelIntersectAction\", void 0);\n __decorate([\n Complex({}, SmithchartMajorGridLines)\n ], SmithchartAxis.prototype, \"majorGridLines\", void 0);\n __decorate([\n Complex({}, SmithchartMinorGridLines)\n ], SmithchartAxis.prototype, \"minorGridLines\", void 0);\n __decorate([\n Complex({}, SmithchartAxisLine)\n ], SmithchartAxis.prototype, \"axisLine\", void 0);\n __decorate([\n Complex(Theme.axisLabelFont, SmithchartFont)\n ], SmithchartAxis.prototype, \"labelStyle\", void 0);\n return SmithchartAxis;\n}(ChildProperty));\nexport { SmithchartAxis };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, Complex, ChildProperty } from '@syncfusion/ej2-base';\nimport { SmithchartFont } from '../utils/utils';\nimport { Theme } from '../model/theme';\nvar Subtitle = /** @class */ (function (_super) {\n __extends(Subtitle, _super);\n function Subtitle() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], Subtitle.prototype, \"visible\", void 0);\n __decorate([\n Property('')\n ], Subtitle.prototype, \"text\", void 0);\n __decorate([\n Property('')\n ], Subtitle.prototype, \"description\", void 0);\n __decorate([\n Property('Far')\n ], Subtitle.prototype, \"textAlignment\", void 0);\n __decorate([\n Property(true)\n ], Subtitle.prototype, \"enableTrim\", void 0);\n __decorate([\n Property(null)\n ], Subtitle.prototype, \"maximumWidth\", void 0);\n __decorate([\n Complex(Theme.smithchartSubtitleFont, SmithchartFont)\n ], Subtitle.prototype, \"textStyle\", void 0);\n return Subtitle;\n}(ChildProperty));\nexport { Subtitle };\nvar Title = /** @class */ (function (_super) {\n __extends(Title, _super);\n function Title() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], Title.prototype, \"visible\", void 0);\n __decorate([\n Property('')\n ], Title.prototype, \"text\", void 0);\n __decorate([\n Property('')\n ], Title.prototype, \"description\", void 0);\n __decorate([\n Property('Center')\n ], Title.prototype, \"textAlignment\", void 0);\n __decorate([\n Property(true)\n ], Title.prototype, \"enableTrim\", void 0);\n __decorate([\n Property(null)\n ], Title.prototype, \"maximumWidth\", void 0);\n __decorate([\n Complex({}, Subtitle)\n ], Title.prototype, \"subtitle\", void 0);\n __decorate([\n Complex(Theme.smithchartTitleFont, SmithchartFont)\n ], Title.prototype, \"font\", void 0);\n __decorate([\n Complex(Theme.smithchartTitleFont, SmithchartFont)\n ], Title.prototype, \"textStyle\", void 0);\n return Title;\n}(ChildProperty));\nexport { Title };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, Complex, ChildProperty } from '@syncfusion/ej2-base';\nimport { SmithchartFont } from '../utils/utils';\nimport { Theme } from '../model/theme';\nvar SeriesTooltipBorder = /** @class */ (function (_super) {\n __extends(SeriesTooltipBorder, _super);\n function SeriesTooltipBorder() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(1)\n ], SeriesTooltipBorder.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], SeriesTooltipBorder.prototype, \"color\", void 0);\n return SeriesTooltipBorder;\n}(ChildProperty));\nexport { SeriesTooltipBorder };\nvar SeriesTooltip = /** @class */ (function (_super) {\n __extends(SeriesTooltip, _super);\n function SeriesTooltip() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], SeriesTooltip.prototype, \"visible\", void 0);\n __decorate([\n Property(null)\n ], SeriesTooltip.prototype, \"fill\", void 0);\n __decorate([\n Property(0.95)\n ], SeriesTooltip.prototype, \"opacity\", void 0);\n __decorate([\n Property('')\n ], SeriesTooltip.prototype, \"template\", void 0);\n __decorate([\n Complex({}, SeriesTooltipBorder)\n ], SeriesTooltip.prototype, \"border\", void 0);\n return SeriesTooltip;\n}(ChildProperty));\nexport { SeriesTooltip };\nvar SeriesMarkerBorder = /** @class */ (function (_super) {\n __extends(SeriesMarkerBorder, _super);\n function SeriesMarkerBorder() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(3)\n ], SeriesMarkerBorder.prototype, \"width\", void 0);\n __decorate([\n Property('white')\n ], SeriesMarkerBorder.prototype, \"color\", void 0);\n return SeriesMarkerBorder;\n}(ChildProperty));\nexport { SeriesMarkerBorder };\nvar SeriesMarkerDataLabelBorder = /** @class */ (function (_super) {\n __extends(SeriesMarkerDataLabelBorder, _super);\n function SeriesMarkerDataLabelBorder() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0.1)\n ], SeriesMarkerDataLabelBorder.prototype, \"width\", void 0);\n __decorate([\n Property('white')\n ], SeriesMarkerDataLabelBorder.prototype, \"color\", void 0);\n return SeriesMarkerDataLabelBorder;\n}(ChildProperty));\nexport { SeriesMarkerDataLabelBorder };\nvar SeriesMarkerDataLabelConnectorLine = /** @class */ (function (_super) {\n __extends(SeriesMarkerDataLabelConnectorLine, _super);\n function SeriesMarkerDataLabelConnectorLine() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(1)\n ], SeriesMarkerDataLabelConnectorLine.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], SeriesMarkerDataLabelConnectorLine.prototype, \"color\", void 0);\n return SeriesMarkerDataLabelConnectorLine;\n}(ChildProperty));\nexport { SeriesMarkerDataLabelConnectorLine };\nvar SeriesMarkerDataLabel = /** @class */ (function (_super) {\n __extends(SeriesMarkerDataLabel, _super);\n function SeriesMarkerDataLabel() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], SeriesMarkerDataLabel.prototype, \"visible\", void 0);\n __decorate([\n Property('')\n ], SeriesMarkerDataLabel.prototype, \"template\", void 0);\n __decorate([\n Property(null)\n ], SeriesMarkerDataLabel.prototype, \"fill\", void 0);\n __decorate([\n Property(1)\n ], SeriesMarkerDataLabel.prototype, \"opacity\", void 0);\n __decorate([\n Complex({}, SeriesMarkerDataLabelBorder)\n ], SeriesMarkerDataLabel.prototype, \"border\", void 0);\n __decorate([\n Complex({}, SeriesMarkerDataLabelConnectorLine)\n ], SeriesMarkerDataLabel.prototype, \"connectorLine\", void 0);\n __decorate([\n Complex(Theme.dataLabelFont, SmithchartFont)\n ], SeriesMarkerDataLabel.prototype, \"textStyle\", void 0);\n return SeriesMarkerDataLabel;\n}(ChildProperty));\nexport { SeriesMarkerDataLabel };\nvar SeriesMarker = /** @class */ (function (_super) {\n __extends(SeriesMarker, _super);\n function SeriesMarker() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], SeriesMarker.prototype, \"visible\", void 0);\n __decorate([\n Property('circle')\n ], SeriesMarker.prototype, \"shape\", void 0);\n __decorate([\n Property(6)\n ], SeriesMarker.prototype, \"width\", void 0);\n __decorate([\n Property(6)\n ], SeriesMarker.prototype, \"height\", void 0);\n __decorate([\n Property('')\n ], SeriesMarker.prototype, \"imageUrl\", void 0);\n __decorate([\n Property('')\n ], SeriesMarker.prototype, \"fill\", void 0);\n __decorate([\n Property(1)\n ], SeriesMarker.prototype, \"opacity\", void 0);\n __decorate([\n Complex({}, SeriesMarkerBorder)\n ], SeriesMarker.prototype, \"border\", void 0);\n __decorate([\n Complex({}, SeriesMarkerDataLabel)\n ], SeriesMarker.prototype, \"dataLabel\", void 0);\n return SeriesMarker;\n}(ChildProperty));\nexport { SeriesMarker };\nvar SmithchartSeries = /** @class */ (function (_super) {\n __extends(SmithchartSeries, _super);\n function SmithchartSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('visible')\n ], SmithchartSeries.prototype, \"visibility\", void 0);\n __decorate([\n Property([])\n ], SmithchartSeries.prototype, \"points\", void 0);\n __decorate([\n Property('')\n ], SmithchartSeries.prototype, \"resistance\", void 0);\n __decorate([\n Property('')\n ], SmithchartSeries.prototype, \"reactance\", void 0);\n __decorate([\n Property(null)\n ], SmithchartSeries.prototype, \"dataSource\", void 0);\n __decorate([\n Property('')\n ], SmithchartSeries.prototype, \"name\", void 0);\n __decorate([\n Property(null)\n ], SmithchartSeries.prototype, \"fill\", void 0);\n __decorate([\n Property(false)\n ], SmithchartSeries.prototype, \"enableAnimation\", void 0);\n __decorate([\n Property('2000ms')\n ], SmithchartSeries.prototype, \"animationDuration\", void 0);\n __decorate([\n Property(false)\n ], SmithchartSeries.prototype, \"enableSmartLabels\", void 0);\n __decorate([\n Property(1)\n ], SmithchartSeries.prototype, \"width\", void 0);\n __decorate([\n Property(1)\n ], SmithchartSeries.prototype, \"opacity\", void 0);\n __decorate([\n Complex({}, SeriesMarker)\n ], SmithchartSeries.prototype, \"marker\", void 0);\n __decorate([\n Complex({}, SeriesTooltip)\n ], SmithchartSeries.prototype, \"tooltip\", void 0);\n return SmithchartSeries;\n}(ChildProperty));\nexport { SmithchartSeries };\n","import { measureText } from '../../smithchart/utils/helper';\n/* tslint:disable:no-string-literal */\nvar AreaBounds = /** @class */ (function () {\n function AreaBounds() {\n }\n AreaBounds.prototype.calculateAreaBounds = function (smithchart, title, bounds) {\n var x;\n var y;\n var width;\n var height;\n var rightSpace;\n var margin = smithchart.margin;\n var border = smithchart.border;\n var spaceValue = this.getLegendSpace(smithchart, bounds);\n x = spaceValue['leftLegendWidth'] + margin.left + border.width;\n rightSpace = spaceValue['rightLegendWidth'] + margin.left + margin.right + (2 * border.width);\n width = smithchart.availableSize['width'] - (x + rightSpace);\n y = margin['top'] + (2 * smithchart.elementSpacing) + spaceValue['modelTitleHeight'] +\n spaceValue['modelsubTitleHeight'] + spaceValue['topLegendHeight'] + border.width;\n height = smithchart.availableSize['height'] - (spaceValue['modelTitleHeight'] +\n (2 * smithchart.elementSpacing) + spaceValue['modelsubTitleHeight'] + margin['top'] +\n spaceValue['topLegendHeight'] + spaceValue['bottomLegendHeight']);\n return { x: x, y: y, width: width, height: height };\n };\n AreaBounds.prototype.getLegendSpace = function (smithchart, bounds) {\n var title = smithchart.title;\n var legend = smithchart.legendSettings;\n var position = legend.position.toLowerCase();\n var subtitleHeight = 0;\n var modelsubTitleHeight = 0;\n var titleHeight = 0;\n var font = smithchart.font;\n var modelTitleHeight = 0;\n var itemPadding = 10;\n var legendBorder = legend.border.width;\n var leftLegendWidth = 0;\n var rightLegendWidth = 0;\n var topLegendHeight = 0;\n var bottomLegendHeight = 0;\n var ltheight = 0;\n var space;\n if (legend['visible']) {\n space = (bounds.width + (itemPadding / 2) + smithchart.elementSpacing + (2 * legendBorder));\n leftLegendWidth = position === 'left' ? space : 0;\n rightLegendWidth = position === 'right' ? space : 0;\n ltheight = legend['title'].visible ? measureText(legend['title'].text, font)['height'] : 0;\n topLegendHeight = position === 'top' ? smithchart.elementSpacing + bounds.height + ltheight : 0;\n bottomLegendHeight = position === 'bottom' ? smithchart.elementSpacing + bounds.height + ltheight : 0;\n }\n subtitleHeight = measureText(title.subtitle.text, font)['height'];\n modelTitleHeight = (title.text === '' || !title['visible']) ? 0 : (titleHeight);\n modelsubTitleHeight = (title['subtitle'].text === '' || !title['subtitle'].visible) ? 0 : (subtitleHeight);\n return {\n leftLegendWidth: leftLegendWidth, rightLegendWidth: rightLegendWidth,\n topLegendHeight: topLegendHeight, bottomLegendHeight: bottomLegendHeight,\n modelTitleHeight: modelTitleHeight, modelsubTitleHeight: modelsubTitleHeight\n };\n };\n return AreaBounds;\n}());\nexport { AreaBounds };\n","import { measureText } from '../../smithchart/utils/helper';\nimport { HorizontalLabelCollection, LabelRegion, Point, Direction } from '../../smithchart/utils/utils';\nimport { GridArcPoints, RadialLabelCollections } from '../../smithchart/utils/utils';\nimport { PathOption, TextOption, renderTextElement, _getEpsilonValue } from '../../smithchart/utils/helper';\n/* tslint:disable:no-string-literal */\nvar AxisRender = /** @class */ (function () {\n function AxisRender() {\n this.radialLabels = [-50, -20, -10, -5, -4, -3, -2, -1.5, -1, -0.8, -0.6, -0.4, -0.2,\n 0, 0.2, 0.4, 0.6, 0.8, 1, 1.5, 2, 3, 4, 5, 10, 20, 50];\n this.radialLabelCollections = [];\n this.horizontalLabelCollections = [];\n this.labelCollections = [];\n this.direction = new Direction();\n }\n AxisRender.prototype.renderArea = function (smithchart, bounds) {\n this.calculateChartArea(smithchart, bounds);\n this.calculateCircleMargin(smithchart, bounds);\n this.calculateXAxisRange(smithchart);\n this.calculateRAxisRange(smithchart);\n this.measureHorizontalAxis(smithchart);\n this.measureRadialAxis(smithchart);\n if (smithchart.horizontalAxis.visible) {\n this.updateHAxis(smithchart);\n }\n if (smithchart.radialAxis.visible) {\n this.updateRAxis(smithchart);\n }\n if (smithchart.horizontalAxis.visible) {\n this.drawHAxisLabels(smithchart);\n }\n if (smithchart.radialAxis.visible) {\n this.drawRAxisLabels(smithchart);\n }\n };\n AxisRender.prototype.updateHAxis = function (smithchart) {\n var majorGridLines = smithchart.horizontalAxis.majorGridLines;\n var minorGridLines = smithchart.horizontalAxis.minorGridLines;\n var axisLine = smithchart.horizontalAxis.axisLine;\n if (majorGridLines.visible) {\n this.updateHMajorGridLines(smithchart);\n }\n if (minorGridLines.visible) {\n this.updateHMinorGridLines(smithchart);\n }\n if (axisLine.visible) {\n this.updateHAxisLine(smithchart);\n }\n };\n AxisRender.prototype.updateRAxis = function (smithchart) {\n var majorGridLines = smithchart.radialAxis.majorGridLines;\n var minorGridLines = smithchart.radialAxis.minorGridLines;\n var axisLine = smithchart.radialAxis.axisLine;\n if (majorGridLines.visible) {\n this.updateRMajorGridLines(smithchart);\n }\n if (minorGridLines.visible) {\n this.updateRMinorGridLines(smithchart);\n }\n if (axisLine.visible) {\n this.updateRAxisLine(smithchart);\n }\n };\n AxisRender.prototype.measureHorizontalAxis = function (smithchart) {\n var majorGridLines = smithchart.horizontalAxis.majorGridLines;\n var minorGridLines = smithchart.horizontalAxis.minorGridLines;\n this.measureHMajorGridLines(smithchart);\n if (minorGridLines.visible) {\n this.measureHMinorGridLines(smithchart);\n }\n };\n AxisRender.prototype.measureRadialAxis = function (smithchart) {\n var majorGridLines = smithchart.radialAxis.majorGridLines;\n var minorGridLines = smithchart.radialAxis.minorGridLines;\n this.measureRMajorGridLines(smithchart);\n if (minorGridLines.visible) {\n this.measureRMinorGridLines(smithchart);\n }\n };\n AxisRender.prototype.calculateChartArea = function (smithchart, bounds) {\n var chartAreaWidth;\n var chartAreaHeight;\n var width = smithchart.availableSize.width;\n var height = smithchart.availableSize.height;\n var x;\n var y;\n width = bounds.width;\n height = bounds.height;\n chartAreaWidth = Math.min(width, height);\n chartAreaHeight = Math.min(width, height);\n x = bounds.x + (bounds.width / 2 - chartAreaWidth / 2);\n y = bounds.y + ((height - chartAreaHeight) / 2 > 0 ? (height - chartAreaHeight) / 2 : 0);\n smithchart.chartArea = { x: x, y: y, width: chartAreaWidth, height: chartAreaHeight };\n };\n AxisRender.prototype.calculateCircleMargin = function (smithchart, bounds) {\n var padding = 10;\n var maxLabelWidth = 0;\n var width = smithchart.chartArea.width;\n var radius = smithchart.radius;\n maxLabelWidth = this.maximumLabelLength(smithchart);\n var labelMargin = (smithchart.radialAxis.labelPosition === 'Outside') ? (maxLabelWidth + padding) : padding;\n var diameter = width - labelMargin * 2 > 0 ? width - labelMargin * 2 : 0;\n var actualRadius = diameter / 2;\n var circleCoefficient = radius > 1 ? 1 : (radius < 0.1 ? 0.1 : radius);\n this.areaRadius = actualRadius * circleCoefficient;\n this.circleLeftX = smithchart.chartArea.x + labelMargin + (actualRadius * (1 - circleCoefficient));\n this.circleTopY = smithchart.chartArea.y + labelMargin + (actualRadius * (1 - circleCoefficient));\n this.circleCenterX = this.circleLeftX + this.areaRadius;\n this.circleCenterY = bounds.y + bounds.height / 2;\n };\n AxisRender.prototype.maximumLabelLength = function (smithchart) {\n var maximumLabelLength = 0;\n var font = smithchart.horizontalAxis.labelStyle;\n var label;\n var textSize;\n for (var i = 0; i < this.radialLabels.length; i++) {\n label = this.radialLabels[i].toString();\n textSize = measureText(label, font);\n if (maximumLabelLength < textSize.width) {\n maximumLabelLength = textSize.width;\n }\n }\n return maximumLabelLength;\n };\n AxisRender.prototype.calculateAxisLabels = function () {\n var spacingBetweenGridLines = 30;\n var previousR = 0;\n var j = 0;\n var labels = [];\n var diameter = this.areaRadius * 2;\n for (var i = 0; i < 2; i = i + 0.1) {\n i = Math.round(i * 10) / 10;\n var coeff = 1 / (i + 1);\n var isOverlap1 = false;\n var isOverlap2 = false;\n var radius = ((diameter * coeff) / 2) * 2;\n if (previousR === 0.0 || i === 1) {\n previousR = radius;\n labels[j] = i;\n j++;\n continue;\n }\n if (i < 1) {\n isOverlap1 = this.isOverlap(1, diameter, radius, spacingBetweenGridLines);\n }\n if (i > 1) {\n isOverlap2 = this.isOverlap(2, diameter, radius, spacingBetweenGridLines);\n }\n if (isOverlap1 || isOverlap2) {\n continue;\n }\n if (previousR - radius >= spacingBetweenGridLines) {\n labels[j] = i;\n j++;\n previousR = radius;\n }\n }\n var staticlabels = [2, 3, 4, 5, 10, 20, 50];\n for (var k = 0; k < staticlabels.length; k++) {\n labels[j] = staticlabels[k];\n j++;\n }\n return labels;\n };\n AxisRender.prototype.isOverlap = function (x, d, previousR, spacingBetweenGridLines) {\n var coeff;\n var radius;\n coeff = 1 / (x + 1); // (1 / 1+r) find the radius for the x value\n radius = ((d * coeff) / 2) * 2;\n return previousR - radius < spacingBetweenGridLines;\n };\n AxisRender.prototype.calculateXAxisRange = function (smithchart) {\n var previousR = 0;\n var x;\n var coeff;\n var radius;\n var cx;\n var diameter = this.areaRadius * 2;\n var horizontalAxisLabels = this.calculateAxisLabels();\n var cy = this.circleCenterY;\n var circleStartX = this.circleLeftX;\n var leftX = this.circleLeftX;\n for (var i = 0; i < horizontalAxisLabels.length; i++) {\n x = horizontalAxisLabels[i];\n coeff = 1 / (x + 1);\n radius = (diameter * coeff) / 2;\n if (smithchart.renderType === 'Impedance') {\n leftX = circleStartX + diameter - (radius * 2);\n }\n cx = leftX + radius;\n this.horizontalLabelCollections.push({\n centerX: cx, centerY: cy, radius: radius, value: x, region: null\n });\n }\n };\n AxisRender.prototype.calculateRAxisRange = function (smithchart) {\n var arcCy;\n var arcRadius;\n var diameter = this.areaRadius * 2;\n var y;\n var point = new Point();\n if (smithchart.renderType === 'Impedance') {\n point.x = this.circleLeftX + diameter;\n point.y = this.circleTopY + this.areaRadius;\n }\n else {\n point.x = this.circleLeftX;\n point.y = this.circleTopY + this.areaRadius;\n }\n for (var i = 0; i < this.radialLabels.length; i++) {\n y = this.radialLabels[i];\n arcRadius = Math.abs(((1 / y) * diameter) / 2);\n if (smithchart.renderType === 'Impedance') {\n arcCy = y > 0 ? point.y - arcRadius : point.y + arcRadius;\n }\n else {\n arcCy = y < 0 ? point.y - arcRadius : point.y + arcRadius;\n }\n this.radialLabelCollections.push({\n centerX: point.x, centerY: arcCy, radius: arcRadius, value: y\n });\n }\n };\n AxisRender.prototype.measureHMajorGridLines = function (smithchart) {\n var arcPoints = [];\n var startPoint;\n var endPoint;\n var radialPoint1;\n var radialPoint2;\n var size;\n this.majorHGridArcPoints = [];\n for (var i = 0; i < this.horizontalLabelCollections.length; i++) {\n var circlePoint = new HorizontalLabelCollection();\n circlePoint = this.horizontalLabelCollections[i];\n arcPoints = this.calculateHMajorArcStartEndPoints(circlePoint.value);\n if (smithchart.renderType === 'Impedance') {\n radialPoint1 = arcPoints[0];\n radialPoint2 = arcPoints[1];\n }\n else {\n radialPoint1 = arcPoints[1];\n radialPoint2 = arcPoints[0];\n }\n size = { width: circlePoint.radius, height: circlePoint.radius };\n if (circlePoint.value !== 0.0 && circlePoint.value !== 50.0) {\n startPoint = this.intersectingCirclePoints(radialPoint1[0].centerX, radialPoint1[0].centerY, radialPoint1[0].radius, circlePoint.centerX, circlePoint.centerY, circlePoint.radius, smithchart.renderType);\n endPoint = this.intersectingCirclePoints(radialPoint2[0].centerX, radialPoint2[0].centerY, radialPoint2[0].radius, circlePoint.centerX, circlePoint.centerY, circlePoint.radius, smithchart.renderType);\n this.majorHGridArcPoints.push({\n startPoint: startPoint,\n endPoint: endPoint,\n rotationAngle: 2 * Math.PI,\n sweepDirection: (smithchart.renderType === 'Impedance') ?\n this.direction['counterclockwise'] : this.direction['clockwise'],\n isLargeArc: true,\n size: size\n });\n }\n else {\n startPoint = { x: circlePoint.centerX + circlePoint.radius, y: circlePoint.centerY };\n endPoint = { x: circlePoint.centerX + circlePoint.radius, y: circlePoint.centerY - 0.05 };\n this.majorHGridArcPoints.push({\n startPoint: startPoint,\n endPoint: endPoint,\n rotationAngle: 2 * Math.PI,\n sweepDirection: this.direction['clockwise'],\n isLargeArc: true,\n size: size\n });\n }\n }\n };\n AxisRender.prototype.measureRMajorGridLines = function (smithchart) {\n var epsilon;\n var radialPoint;\n var y;\n var arcPoints = [];\n var innerInterSectPoint;\n var outerInterSectPoint;\n var outterInterSectRadian;\n var outterInterSectAngle;\n var startPoint;\n var endPoint;\n var size;\n var sweepDirection;\n this.majorRGridArcPoints = [];\n this.labelCollections = [];\n epsilon = _getEpsilonValue();\n for (var i = 0; i < this.radialLabelCollections.length; i++) {\n radialPoint = this.radialLabelCollections[i];\n if (radialPoint.radius <= epsilon) {\n continue;\n }\n y = radialPoint.value;\n arcPoints = this.calculateMajorArcStartEndPoints(radialPoint, Math.abs(y), smithchart);\n innerInterSectPoint = arcPoints[0];\n outerInterSectPoint = arcPoints[1];\n outterInterSectRadian = this.circleXYRadianValue(this.circleCenterX, this.circleCenterY, outerInterSectPoint.x, outerInterSectPoint.y);\n outterInterSectAngle = outterInterSectRadian * (180 / Math.PI);\n if (y !== 0.0) {\n startPoint = { x: innerInterSectPoint.x, y: innerInterSectPoint.y };\n endPoint = { x: outerInterSectPoint.x, y: outerInterSectPoint.y };\n size = { width: radialPoint.radius, height: radialPoint.radius };\n sweepDirection = y > 0 ? this.direction['clockwise'] : this.direction['counterclockwise'];\n this.majorRGridArcPoints.push({\n startPoint: startPoint,\n endPoint: endPoint,\n size: size,\n rotationAngle: 2 * Math.PI,\n isLargeArc: false,\n sweepDirection: sweepDirection\n });\n this.labelCollections.push({\n centerX: outerInterSectPoint.x,\n centerY: outerInterSectPoint.y,\n angle: outterInterSectAngle,\n value: y,\n radius: this.areaRadius,\n region: null\n });\n }\n else {\n startPoint = { x: this.circleLeftX, y: this.circleCenterY };\n endPoint = { x: this.circleCenterX + this.areaRadius, y: this.circleCenterY };\n this.majorRGridArcPoints.push({\n startPoint: startPoint,\n endPoint: endPoint,\n size: null,\n rotationAngle: null,\n isLargeArc: null,\n sweepDirection: null\n });\n this.labelCollections.push({\n centerX: (smithchart.renderType === 'Impedance') ?\n (this.circleCenterX - this.areaRadius) : (this.circleCenterX + this.areaRadius),\n centerY: this.circleCenterY,\n angle: (smithchart.renderType === 'Impedance') ?\n 180 : 360,\n value: y,\n radius: this.areaRadius,\n region: null\n });\n }\n }\n };\n AxisRender.prototype.circleXYRadianValue = function (centerX, centerY, outterX, outterY) {\n var radian;\n radian = Math.atan2(outterY - centerY, outterX - centerX);\n radian = radian < 0 ? (radian + (360 * Math.PI / 180)) : radian;\n return radian;\n };\n AxisRender.prototype.calculateMajorArcStartEndPoints = function (radialPoint, value, smithchart) {\n var arcPoints = [];\n var circlePoint = [];\n var cx;\n var cy;\n cx = this.circleCenterX;\n cy = this.circleCenterY;\n if (value >= 10) {\n arcPoints[0] = (smithchart.renderType === 'Impedance') ?\n { x: cx + this.areaRadius, y: cy } : { x: cx - this.areaRadius, y: cy };\n }\n else if (value >= 3) {\n circlePoint = this.horizontalLabelCollections.filter(function (c) { return c.value === 10; });\n }\n else if (value >= 1) {\n circlePoint = this.horizontalLabelCollections.filter(function (c) { return c.value === 5; });\n }\n else {\n circlePoint = this.horizontalLabelCollections.filter(function (c) { return c.value === 3; });\n }\n if (circlePoint.length > 0) {\n arcPoints[0] = this.intersectingCirclePoints(radialPoint.centerX, radialPoint.centerY, radialPoint.radius, circlePoint[0].centerX, circlePoint[0].centerY, circlePoint[0].radius, smithchart.renderType);\n }\n arcPoints[1] = this.intersectingCirclePoints(radialPoint.centerX, radialPoint.centerY, radialPoint.radius, cx, cy, this.areaRadius, smithchart.renderType);\n return arcPoints;\n };\n AxisRender.prototype.calculateHMajorArcStartEndPoints = function (value) {\n var arcHPoints = [];\n var calValue1;\n var calValue2;\n if (value <= 0.3) {\n calValue1 = 2.0;\n calValue2 = -2.0;\n }\n else if (value <= 1.0) {\n calValue1 = 3.0;\n calValue2 = -3.0;\n }\n else if (value <= 2.0) {\n calValue1 = 5.0;\n calValue2 = -5.0;\n }\n else if (value <= 5.0) {\n calValue1 = 10.0;\n calValue2 = -10.0;\n }\n else {\n calValue1 = 50.0;\n calValue2 = -50.0;\n }\n arcHPoints[0] = this.radialLabelCollections.filter(function (c) { return c.value === calValue1; });\n arcHPoints[1] = this.radialLabelCollections.filter(function (c) { return c.value === calValue2; });\n return arcHPoints;\n };\n AxisRender.prototype.calculateMinorArcStartEndPoints = function (value) {\n var calValue1;\n var calValue2;\n var marcHPoints = [];\n if (value <= 0.1) {\n calValue1 = 1.0;\n calValue2 = -1.0;\n }\n else if (value <= 0.2) {\n calValue1 = 0.8;\n calValue2 = -0.8;\n }\n else if (value <= 0.3) {\n calValue1 = 0.4;\n calValue2 = -0.4;\n }\n else if (value <= 0.6) {\n calValue1 = 1.0;\n calValue2 = -1.0;\n }\n else if (value <= 1.0) {\n calValue1 = 1.5;\n calValue2 = -1.5;\n }\n else if (value <= 1.5) {\n calValue1 = 2.0;\n calValue2 = -2.0;\n }\n else if (value <= 2.0) {\n calValue1 = 1.0;\n calValue2 = -1.0;\n }\n else if (value <= 5.0) {\n calValue1 = 3.0;\n calValue2 = -3.0;\n }\n else {\n calValue1 = 10.0;\n calValue2 = -10.0;\n }\n marcHPoints[0] = this.radialLabelCollections.filter(function (c) { return c['value'] === calValue1; });\n marcHPoints[1] = this.radialLabelCollections.filter(function (c) { return c['value'] === calValue2; });\n return marcHPoints;\n };\n AxisRender.prototype.intersectingCirclePoints = function (x1, y1, r1, x2, y2, r2, renderType) {\n var cx;\n var cy;\n var midRadius;\n var radiusSquare;\n var a;\n var radiusSquare2;\n var c;\n var fx;\n var gx;\n var ix1;\n var ix2;\n var fy;\n var gy;\n var iy1;\n var iy2;\n var point = { x: 0, y: 0 };\n cx = x1 - x2;\n cy = y1 - y2;\n midRadius = Math.sqrt(cx * cx + cy * cy);\n radiusSquare = midRadius * midRadius;\n a = (r1 * r1 - r2 * r2) / (2 * radiusSquare);\n radiusSquare2 = (r1 * r1 - r2 * r2);\n c = Math.sqrt(2 * (r1 * r1 + r2 * r2) / radiusSquare - (radiusSquare2 * radiusSquare2) / (radiusSquare * radiusSquare) - 1);\n fx = (x1 + x2) / 2 + a * (x2 - x1);\n gx = c * (y2 - y1) / 2;\n ix1 = fx + gx;\n ix2 = fx - gx;\n fy = (y1 + y2) / 2 + a * (y2 - y1);\n gy = c * (x1 - x2) / 2;\n iy1 = fy + gy;\n iy2 = fy - gy;\n if (renderType === 'Impedance') {\n if (ix2 < ix1) {\n point.x = ix2;\n point.y = iy2;\n }\n else {\n point.x = ix1;\n point.y = iy1;\n }\n }\n else {\n if (ix1 > ix2) {\n point.x = ix1;\n point.y = iy1;\n }\n else {\n point.x = ix2;\n point.y = iy2;\n }\n }\n return { x: point.x, y: point.y };\n };\n AxisRender.prototype.updateHMajorGridLines = function (smithchart) {\n var majorGridLine = smithchart.horizontalAxis.majorGridLines;\n var groupElement;\n var element;\n var path;\n groupElement = smithchart.renderer.createGroup({ 'id': smithchart.element.id + '_svg' + '_horizontalAxisMajorGridLines' });\n path = this.calculateGridLinesPath(this.majorHGridArcPoints);\n var haxismgoptions = new PathOption(smithchart.element.id + '_horizontalAxisMajorGridLines', 'none', majorGridLine['width'], smithchart.themeStyle.majorGridLine, majorGridLine['opacity'], majorGridLine['dashArray'], path);\n element = smithchart.renderer.drawPath(haxismgoptions);\n groupElement.appendChild(element);\n smithchart.svgObject.appendChild(groupElement);\n };\n AxisRender.prototype.updateRMajorGridLines = function (smithchart) {\n var majorGridLine = smithchart.radialAxis.majorGridLines;\n var groupElement;\n var element;\n var path;\n groupElement = smithchart.renderer.createGroup({ 'id': smithchart.element.id + '_svg' + '_radialAxisMajorGridLines' });\n path = this.calculateGridLinesPath(this.majorRGridArcPoints);\n var raxismgoptions = new PathOption(smithchart.element.id + '_radialAxisMajorGridLines', 'none', majorGridLine['width'], smithchart.themeStyle.majorGridLine, majorGridLine['opacity'], majorGridLine['dashArray'], path);\n element = smithchart.renderer.drawPath(raxismgoptions);\n groupElement.appendChild(element);\n smithchart.svgObject.appendChild(groupElement);\n };\n AxisRender.prototype.updateHAxisLine = function (smithchart) {\n var radius = this.areaRadius;\n var point1;\n var point2;\n var size;\n var sweep;\n var isLargeArc;\n var angle;\n var axisLine = smithchart.horizontalAxis.axisLine;\n var direction;\n var groupElement = smithchart.renderer.createGroup({ 'id': smithchart.element.id + '_svg' + '_hAxisLine' });\n point1 = { x: this.circleCenterX + radius, y: this.circleCenterY };\n point2 = { x: this.circleCenterX + radius, y: (this.circleCenterY - 0.05) };\n size = { width: radius, height: radius };\n sweep = this.direction['clockwise'];\n isLargeArc = 1;\n angle = Math.PI * 2;\n direction = 'M' + '' + point1.x + ' ' + point1.y + ' ' + 'A' + ' ' + size.width +\n ' ' + size.height + ' ' + angle + ' ' + isLargeArc + ' ' + sweep + ' ' + point2.x + ' ' + point2.y + '';\n var options = new PathOption(smithchart.element.id + '_horizontalAxisLine', 'none', axisLine.width, smithchart.themeStyle.axisLine, 1, axisLine.dashArray, direction);\n var element = smithchart.renderer.drawPath(options);\n groupElement.appendChild(element);\n smithchart.svgObject.appendChild(groupElement);\n };\n AxisRender.prototype.updateRAxisLine = function (smithchart) {\n var radius = this.areaRadius;\n var point1;\n var point2;\n var size;\n var sweep;\n var isLargeArc;\n var angle;\n var axisLine = smithchart.radialAxis.axisLine;\n var direction;\n point1 = { x: this.circleCenterX - radius, y: this.circleCenterY };\n point2 = { x: this.circleCenterX + radius, y: this.circleCenterY };\n size = { width: 0, height: 0 };\n sweep = this.direction['counterclockwise'];\n isLargeArc = 0;\n angle = 0;\n direction = 'M' + ' ' + point1.x + ' ' + point1.y + ' ' + 'A' + ' ' +\n size.width + ' ' + size.height + ' ' + angle + ' ' + isLargeArc + ' ' + sweep + ' ' +\n point2.x + ' ' + point2.y + '';\n var options = new PathOption(smithchart.element.id + '_radialAxisLine', 'none', axisLine.width, smithchart.themeStyle.axisLine, 1, axisLine.dashArray, direction);\n var groupElement = smithchart.renderer.createGroup({ 'id': smithchart.element.id + '_svg' + '_rAxisLine' });\n var element = smithchart.renderer.drawPath(options);\n groupElement.appendChild(element);\n smithchart.svgObject.appendChild(groupElement);\n };\n AxisRender.prototype.drawHAxisLabels = function (smithchart) {\n var hAxis = smithchart.horizontalAxis;\n var font = smithchart.horizontalAxis.labelStyle;\n var circleAxis;\n var label;\n var x;\n var y;\n var textSize;\n var curLabel;\n var curLabelBounds;\n var curWidth;\n var curX;\n var preLabel;\n var preLabelBounds;\n var preWidth;\n var preX;\n var groupEle = smithchart.renderer.createGroup({ id: smithchart.element.id + '_HAxisLabels' });\n for (var i = 0; i < this.horizontalLabelCollections.length; i++) {\n circleAxis = this.horizontalLabelCollections[i];\n label = this.horizontalLabelCollections[i].value.toString();\n if (circleAxis.value !== 0.0) {\n x = (smithchart.renderType === 'Impedance') ?\n circleAxis.centerX - circleAxis.radius : circleAxis.centerX + circleAxis.radius;\n y = circleAxis.centerY;\n textSize = measureText(label, font);\n x = (smithchart.renderType === 'Impedance') ? x - textSize.width : x;\n if (hAxis.labelPosition === 'Outside') {\n y -= textSize.height / 4;\n }\n else {\n y += textSize.height;\n }\n this.horizontalLabelCollections[i].region = this.calculateRegion(label, textSize, x, y);\n if (hAxis.labelIntersectAction === 'Hide') {\n curLabel = this.horizontalLabelCollections[i];\n curLabelBounds = curLabel.region.bounds;\n curWidth = curLabelBounds.width;\n curX = curLabelBounds.x;\n for (var j = 1; j < i; j++) {\n preLabel = this.horizontalLabelCollections[j];\n preLabelBounds = preLabel.region.bounds;\n preWidth = preLabelBounds.width;\n preX = preLabelBounds.x;\n if ((smithchart.renderType === 'Impedance') &&\n (preX + preWidth) > (curX)) {\n label = '';\n }\n if ((smithchart.renderType === 'Admittance') &&\n (preX) < curX + curWidth) {\n label = '';\n }\n }\n }\n var axisLabelRenderEventArgs = { text: label.toString(), x: x, y: y,\n name: 'axisLabelRender', cancel: false };\n smithchart.trigger('axisLabelRender', axisLabelRenderEventArgs);\n var options = new TextOption(smithchart.element.id + '_HLabel_' + i, axisLabelRenderEventArgs.x, axisLabelRenderEventArgs.y, 'none', axisLabelRenderEventArgs.text);\n var element = renderTextElement(options, font, smithchart.themeStyle.axisLabel, groupEle);\n groupEle.appendChild(element);\n }\n }\n smithchart.svgObject.appendChild(groupEle);\n };\n AxisRender.prototype.drawRAxisLabels = function (smithchart) {\n var paddingRadius = 2;\n var font = smithchart.radialAxis.labelStyle;\n var interSectPoint = new RadialLabelCollections();\n var label;\n var textSize;\n var angle;\n var position;\n var textPosition;\n var curX;\n var curY;\n var curWidth;\n var curHeight;\n var curLabel;\n var curLabelBounds;\n var preX;\n var preY;\n var preWidth;\n var preHeight;\n var preLabel;\n var preLabelBounds;\n var rAxis = smithchart.radialAxis;\n var groupEle = smithchart.renderer.createGroup({ id: smithchart.element.id + '_RAxisLabels' });\n for (var i = 0; i < this.labelCollections.length; i++) {\n interSectPoint = this.labelCollections[i];\n label = interSectPoint.value.toString();\n textSize = measureText(label, font);\n angle = Math.round(interSectPoint.angle * 100) / 100;\n if (rAxis.labelPosition === 'Outside') {\n position = this.circlePointPosition(this.circleCenterX, this.circleCenterY, interSectPoint['angle'], this.areaRadius + paddingRadius);\n textPosition = this.setLabelsOutsidePosition(angle, position.x, position.y, textSize);\n }\n else {\n position = this.circlePointPosition(this.circleCenterX, this.circleCenterY, interSectPoint['angle'], this.areaRadius - paddingRadius);\n textPosition = this.setLabelsInsidePosition(angle, position.x, position.y, textSize);\n }\n this.labelCollections[i]['region'] = this.calculateRegion(label, textSize, textPosition.x, textPosition.y);\n if (rAxis.labelIntersectAction === 'Hide') {\n curLabel = this.labelCollections[i];\n curLabelBounds = curLabel['region']['bounds'];\n curWidth = curLabelBounds['width'];\n curHeight = curLabelBounds['height'];\n curX = curLabelBounds['x'];\n curY = curLabelBounds['y'];\n for (var j = 0; j < i; j++) {\n preLabel = this.labelCollections[j];\n preLabelBounds = preLabel['region']['bounds'];\n preWidth = preLabelBounds['width'];\n preHeight = preLabelBounds['height'];\n preX = preLabelBounds['x'];\n preY = preLabelBounds['y'];\n if ((preX <= curX + curWidth) && (curX <= preX + preWidth) && (preY <= curY + curHeight)\n && (curY <= preY + preHeight)) {\n label = ' ';\n }\n }\n }\n var axisLabelRenderEventArgs = { text: label.toString(), x: textPosition.x,\n y: textPosition.y, name: 'axisLabelRender', cancel: false };\n smithchart.trigger('axisLabelRender', axisLabelRenderEventArgs);\n var options = new TextOption(smithchart.element.id + '_RLabel_' + i, axisLabelRenderEventArgs.x, axisLabelRenderEventArgs.y, 'none', axisLabelRenderEventArgs.text);\n var element = renderTextElement(options, font, smithchart.themeStyle.axisLabel, groupEle);\n groupEle.appendChild(element);\n }\n smithchart.svgObject.appendChild(groupEle);\n };\n AxisRender.prototype.calculateRegion = function (label, textSize, textPositionX, textPositionY) {\n var xAxisLabelRegions = new LabelRegion();\n var bounds = { x: textPositionX, y: textPositionY, width: textSize.width, height: textSize.height };\n xAxisLabelRegions = { bounds: bounds, labelText: label };\n return xAxisLabelRegions;\n };\n AxisRender.prototype.updateHMinorGridLines = function (smithchart) {\n var minorGridLine = smithchart.horizontalAxis.minorGridLines;\n var groupElement;\n var element;\n var path;\n groupElement = smithchart.renderer.createGroup({ 'id': smithchart.element.id + '_svg' + '_horizontalAxisMinorGridLines' });\n path = this.calculateGridLinesPath(this.minorHGridArcPoints);\n var haxismioptions = new PathOption(smithchart.element.id + '_horizontalAxisMinorGridLines', 'none', minorGridLine['width'], smithchart.themeStyle.minorGridLine, minorGridLine['opacity'], minorGridLine['dashArray'], path);\n element = smithchart.renderer.drawPath(haxismioptions);\n groupElement.appendChild(element);\n smithchart.svgObject.appendChild(groupElement);\n };\n AxisRender.prototype.updateRMinorGridLines = function (smithchart) {\n var minorGridLine = smithchart.radialAxis.minorGridLines;\n var groupElement;\n var element;\n var path;\n groupElement = smithchart.renderer.createGroup({ 'id': smithchart.element.id + '_svg' + '_radialAxisMinorGridLines' });\n path = this.calculateGridLinesPath(this.minorGridArcPoints);\n var raxismioptions = new PathOption(smithchart.element.id + '_radialAxisMinorGridLines', 'none', minorGridLine['width'], smithchart.themeStyle.minorGridLine, minorGridLine['opacity'], minorGridLine['dashArray'], path);\n element = smithchart.renderer.drawPath(raxismioptions);\n groupElement.appendChild(element);\n smithchart.svgObject.appendChild(groupElement);\n };\n AxisRender.prototype.calculateGridLinesPath = function (points) {\n var x1;\n var y1;\n var x2;\n var y2;\n var r1;\n var r2;\n var pathSegment = new GridArcPoints();\n var angle;\n var isLargeArc;\n var sweep;\n var sb = '';\n var path;\n for (var i = 0; i < points.length; i++) {\n pathSegment = points[i];\n x1 = pathSegment.startPoint.x;\n y1 = pathSegment.startPoint.y;\n x2 = pathSegment.endPoint.x;\n y2 = pathSegment.endPoint.y;\n r1 = pathSegment.size ? pathSegment.size.width : 0;\n r2 = pathSegment.size ? pathSegment.size.height : 0;\n angle = pathSegment.rotationAngle ? pathSegment.rotationAngle : 0;\n isLargeArc = pathSegment.isLargeArc ? 1 : 0;\n sweep = pathSegment.sweepDirection ? pathSegment.sweepDirection : 0;\n sb = sb + ('M' + ' ' + x1 + ' ' + y1 + ' ' + 'A' + ' ' + r1 + ' ' + r2 + ' ' +\n angle + ' ' + isLargeArc + ' ' + sweep + ' ' + x2 + ' ' + y2 + ' ');\n }\n path = sb.toString();\n return path;\n };\n AxisRender.prototype.measureHMinorGridLines = function (smithchart) {\n var radialPoint1;\n var radialPoint2;\n var k = 0;\n var arcPoints = [];\n var isLargeArc;\n var startPoint;\n var endPoint;\n var size;\n var cx;\n var maxCount = smithchart.horizontalAxis.minorGridLines.count;\n var diameter;\n var previous;\n var next;\n var space;\n var count;\n var interval;\n var radius;\n var leftX;\n this.minorHGridArcPoints = [];\n diameter = this.areaRadius * 2;\n for (var i = 0; i < this.horizontalLabelCollections.length - 3; i++) {\n previous = this.horizontalLabelCollections[i];\n next = this.horizontalLabelCollections[i + 1];\n space = (previous['radius'] - next['radius']) * 2;\n count = Math.floor((maxCount / 100) * space);\n interval = space / count;\n for (var j = 0; j < count; j++) {\n radius = next['radius'] + (j * interval) / 2;\n leftX = (smithchart.renderType === 'Impedance') ?\n (this.circleLeftX + diameter) - (radius * 2) : this.circleLeftX;\n cx = leftX + radius;\n isLargeArc = next['value'] > 5;\n arcPoints = this.calculateMinorArcStartEndPoints(next['value']);\n if (smithchart.renderType === 'Impedance') {\n radialPoint1 = arcPoints[0];\n radialPoint2 = arcPoints[1];\n }\n else {\n radialPoint1 = arcPoints[1];\n radialPoint2 = arcPoints[0];\n }\n startPoint = this.intersectingCirclePoints(radialPoint1[0].centerX, radialPoint1[0].centerY, radialPoint1[0].radius, cx, previous['centerY'], radius, smithchart.renderType);\n endPoint = this.intersectingCirclePoints(radialPoint2[0].centerX, radialPoint2[0].centerY, radialPoint2[0].radius, cx, previous['centerY'], radius, smithchart.renderType);\n size = { width: radius, height: radius };\n this.minorHGridArcPoints.push({\n startPoint: startPoint,\n endPoint: endPoint,\n rotationAngle: 2 * Math.PI,\n sweepDirection: (smithchart.renderType === 'Impedance') ?\n this.direction['counterclockwise'] : this.direction['clockwise'],\n isLargeArc: isLargeArc,\n size: size\n });\n k++;\n }\n }\n };\n AxisRender.prototype.measureRMinorGridLines = function (smithchart) {\n var maxCount = smithchart.radialAxis.minorGridLines.count;\n var arcCx;\n var nextAngle;\n var k = 0;\n var betweenAngle;\n var circlePoint;\n var circumference;\n var arcStartX;\n var arcStartY;\n var arcStartPoint;\n var previous;\n var next;\n var size;\n var distance;\n var count;\n var interval;\n var centerValue;\n circumference = Math.PI * (this.areaRadius * 2);\n arcStartX = arcCx = (smithchart.renderType === 'Impedance') ?\n this.circleCenterX + this.areaRadius : this.circleCenterX - this.areaRadius;\n arcStartY = this.circleCenterY;\n this.minorGridArcPoints = [];\n arcStartPoint = { x: arcStartX, y: arcStartY };\n for (var i = 2; i < this.labelCollections.length - 3; i++) {\n previous = this.labelCollections[i];\n next = this.labelCollections[i + 1];\n if (smithchart.renderType === 'Impedance') {\n nextAngle = next['angle'] === 360 ? 0 : next['angle'];\n betweenAngle = Math.abs(nextAngle - previous['angle']);\n }\n else {\n nextAngle = previous['angle'] === 360 ? 0 : previous['angle'];\n betweenAngle = Math.abs(nextAngle - next['angle']);\n }\n distance = (circumference / 360) * betweenAngle;\n count = Math.floor((maxCount / 100) * distance);\n interval = betweenAngle / count;\n centerValue = next['value'] > 0 ? next['value'] : previous['value'];\n circlePoint = this.minorGridLineArcIntersectCircle(Math.abs(centerValue));\n for (var j = 1; j < count; j++) {\n var outterInterSectAngle = (interval * j) + (previous['angle'] === 360 ? nextAngle : previous['angle']);\n var outerInterSectPoint = this.circlePointPosition(this.circleCenterX, this.circleCenterY, outterInterSectAngle, this.areaRadius);\n var radius = this.arcRadius(arcStartPoint, outerInterSectPoint, outterInterSectAngle);\n var arcCy = outterInterSectAngle > 180 ? this.circleCenterY - radius : this.circleCenterY + radius;\n var innerInterSectPoint = this.intersectingCirclePoints(arcCx, arcCy, radius, circlePoint[0].centerX, circlePoint[0].centerY, circlePoint[0].radius, smithchart.renderType);\n var startPoint = { x: innerInterSectPoint.x, y: innerInterSectPoint.y };\n var endPoint = { x: outerInterSectPoint.x, y: outerInterSectPoint.y };\n size = { width: radius, height: radius };\n var sweepDirection = previous['value'] >= 0 ? this.direction['clockwise'] : this.direction['counterclockwise'];\n this.minorGridArcPoints.push({\n startPoint: startPoint,\n endPoint: endPoint,\n rotationAngle: 2 * Math.PI,\n sweepDirection: sweepDirection,\n isLargeArc: false,\n size: size\n });\n k++;\n }\n }\n };\n AxisRender.prototype.minorGridLineArcIntersectCircle = function (centerValue) {\n var circlePoint;\n var calValue;\n if (centerValue >= 3) {\n calValue = 20;\n }\n else if (centerValue >= 1.5) {\n calValue = 10;\n }\n else if (centerValue >= 0.6) {\n calValue = 3;\n }\n else {\n calValue = 2;\n }\n circlePoint = this.horizontalLabelCollections.filter(function (c) { return c['value'] === calValue; });\n return circlePoint;\n };\n AxisRender.prototype.circlePointPosition = function (cx, cy, angle, r) {\n var pointX;\n var pointY;\n var radian;\n radian = angle * (Math.PI / 180);\n pointX = cx + r * Math.cos(radian);\n pointY = cy + r * Math.sin(radian);\n return { x: pointX, y: pointY };\n };\n AxisRender.prototype.setLabelsInsidePosition = function (angle, px, py, textSize) {\n var x = px;\n var y = py;\n if (angle === 0 || angle === 360) {\n x -= textSize.width;\n y -= textSize.height / 2;\n }\n else if (angle === 90) {\n x -= textSize.width;\n y += textSize.height / 8;\n }\n else if (angle === 180) {\n y += textSize.height;\n }\n else if (angle === 270) {\n y += textSize.height / 2;\n }\n else if (angle > 0 && angle <= 20) {\n x -= (textSize.width);\n }\n else if (angle > 20 && angle <= 60) {\n x -= (textSize.width + textSize.width / 2);\n y += textSize.height / 2;\n }\n else if (angle > 60 && angle < 90) {\n x -= (textSize.width + textSize.width / 4);\n y += textSize.height / 4;\n }\n else if (angle > 90 && angle <= 135) {\n x -= (textSize.width / 2);\n y += (textSize.height) / 16;\n }\n else if (angle > 135 && angle <= 150) {\n x += (textSize.width / 2);\n y += (textSize.height / 2);\n }\n else if (angle > 150 && angle < 180) {\n x += (textSize.width / 2);\n y += (textSize.height);\n }\n else if (angle > 180 && angle <= 210) {\n x += (textSize.width / 6);\n y += (textSize.height / 6);\n }\n else if (angle > 210 && angle < 240) {\n y += (textSize.height / 4);\n }\n else if (angle > 225 && angle < 270) {\n y += (textSize.height / 3);\n }\n else if (angle > 270 && angle <= 300) {\n x -= (textSize.width + textSize.width / 4);\n y += (textSize.height / 4);\n }\n else if (angle > 300 && angle <= 330) {\n x -= (textSize.width + textSize.width / 3);\n y += (textSize.height / 4);\n }\n else if (angle > 330 && angle <= 340) {\n x -= (textSize.width + textSize.width / 2);\n y += textSize.height / 4;\n }\n else if (angle > 340) {\n x -= textSize.width;\n y += textSize.height / 8;\n }\n return { x: x, y: y };\n };\n AxisRender.prototype.setLabelsOutsidePosition = function (angle, px, py, textSize) {\n var x = px;\n var y = py;\n if (angle === 90) {\n x -= textSize.width / 2;\n y += textSize.height;\n }\n else if (angle === 180) {\n x -= (textSize.width + 5);\n y -= textSize.height / 4;\n }\n else if (angle === 270) {\n x -= textSize.width / 2;\n y -= textSize.height / 4;\n }\n else if (angle === 360) {\n x += 5;\n y -= textSize.height / 2;\n }\n else if (angle > 0 && angle <= 30) {\n x += textSize.width / 4;\n y += textSize.height / 8;\n }\n else if (angle > 30 && angle <= 60) {\n x += textSize.width / 2;\n y += textSize.height / 4;\n }\n else if (angle > 60 && angle <= 90) {\n x -= textSize.width / 2;\n y += textSize.height;\n }\n else if (angle > 90 && angle <= 135) {\n x -= textSize.width;\n y += textSize.height;\n }\n else if (angle > 135 && angle <= 180) {\n x -= (textSize.width + textSize.width / 4);\n y += textSize.height / 4;\n }\n else if (angle > 180 && angle <= 210) {\n x -= textSize.width + textSize.width / 4;\n y -= textSize.height / 4;\n }\n else if (angle > 210 && angle <= 270) {\n x -= textSize.width;\n y -= textSize.height / 4;\n }\n else if (angle > 270 && angle <= 340) {\n y -= textSize.height / 4;\n }\n else if (angle > 340) {\n y += textSize.height / 4;\n x += textSize.width / 6;\n }\n return { x: x, y: y };\n };\n AxisRender.prototype.arcRadius = function (startPoint, endPoint, angle) {\n var mx;\n var my;\n var u;\n var t;\n var cy;\n var radius;\n var radian;\n radian = angle > 180 ? (90 * Math.PI / 180) : (270 * Math.PI / 180); // Angle 90 and 270 used for calculating upper and lower circle\n mx = (endPoint.x - startPoint.x) / 2;\n my = (endPoint.y - startPoint.y) / 2;\n u = (Math.cos(radian) * my - Math.sin(radian) * mx) / (Math.cos(radian) * mx + Math.sin(radian) * my);\n t = (my - mx * u) / Math.sin(radian);\n cy = startPoint.y + Math.sin(radian) * t;\n radius = Math.abs(startPoint.y - cy);\n return radius;\n };\n return AxisRender;\n}());\nexport { AxisRender };\n","import { CircleOption, PathOption } from '../../smithchart/utils/helper';\nimport { SmithchartSize, MarkerOptions } from '../../smithchart/utils/utils';\n/* tslint:disable:no-string-literal */\nvar Marker = /** @class */ (function () {\n function Marker() {\n }\n Marker.prototype.drawMarker = function (smithchart, seriesindex, groupElement, pointsRegion) {\n if (smithchart.series[seriesindex].marker.visible) {\n var marker = smithchart.series[seriesindex].marker;\n var count = smithchart.series[seriesindex].points.length - 1;\n var width = marker.width;\n var height = marker.height;\n var symbolName = marker.shape;\n var gmEle = smithchart.renderer.createGroup({ 'id': smithchart.element.id + '_svg' +\n '_series' + seriesindex + '_Marker' });\n groupElement.appendChild(gmEle);\n var borderWidth = marker.border.width;\n var borderColor = marker.border.color;\n var opacity = marker.opacity;\n var fill = marker.fill ? marker.fill : (smithchart.series[seriesindex].fill ||\n smithchart.seriesColors[seriesindex % smithchart.seriesColors.length]);\n for (var i = 0; i < count + 1; i++) {\n var location_1 = pointsRegion[i]['point'];\n var pointIndex = i;\n var options = new MarkerOptions(smithchart.element.id + '_Series' + seriesindex + '_Points' + pointIndex + '_Marker' + pointIndex, fill, borderColor, borderWidth, opacity);\n gmEle.appendChild(this.drawSymbol(symbolName, marker.imageUrl, location_1, new SmithchartSize(width, height), options, smithchart));\n }\n }\n };\n Marker.prototype.drawSymbol = function (symbolName, url, location, size, options, smithchart) {\n var markerEle;\n var shape = symbolName.toLowerCase();\n var circleOptions;\n var pathOptions;\n var path;\n var border = { color: options['borderColor'], width: options['borderWidth'] };\n var opacity = options.opacity;\n var startX = location.x;\n var startY = location.y;\n var radius = Math.sqrt(size.height * size.height + size.width * size.width) / 2;\n switch (shape) {\n case 'circle':\n circleOptions = new CircleOption(options['id'], options['fill'], border, opacity, location.x, location.y, radius, null);\n markerEle = smithchart.renderer.drawCircle(circleOptions);\n break;\n case 'rectangle':\n path = 'M' + ' ' + (startX + (-size.width / 2)) + ' ' + (startY + (-size.height / 2)) +\n ' ' + 'L' + ' ' + (startX + (size.width / 2)) + ' ' + (startY + (-size.height / 2)) + ' ' +\n 'L' + ' ' + (startX + (size.width / 2)) + ' ' + (startY + (size.height / 2)) +\n ' ' + 'L' + ' ' + (startX + (-size.width / 2)) +\n ' ' + (startY + (size.height / 2)) + ' ' + 'L' + ' ' +\n (startX + (-size.width / 2)) + ' ' + (startY + (-size.height / 2)) + 'z';\n pathOptions = new PathOption(options['id'], options['fill'], border.width, border.color, opacity, '', path);\n markerEle = smithchart.renderer.drawPath(pathOptions);\n break;\n case 'triangle':\n path = 'M' + ' ' + (startX + (-size.width / 2)) + ' ' + (startY + (size.height / 2)) + ' ' + 'L' + ' ' + (startX) + ' ' +\n (startY + (-size.height / 2)) + ' ' + 'L' + ' ' + (startX + (size.width / 2)) + ' ' +\n (startY + (size.height / 2)) + ' ' + 'L' + ' ' +\n (startX + (-size.width / 2)) + ' ' + (startY + (size.height / 2)) + 'z';\n pathOptions = new PathOption(options['id'], options['fill'], border.width, border.color, opacity, '', path);\n markerEle = smithchart.renderer.drawPath(pathOptions);\n break;\n case 'diamond':\n path = 'M' + ' ' + (startX + (-size.width / 2)) + ' ' + (startY) + ' ' + 'L' + ' ' +\n (startX) + ' ' + (startY + (-size.height / 2)) + ' ' + 'L' + ' ' + (startX + (size.width / 2)) + ' ' +\n (startY) + ' ' + 'L' + ' ' + (startX) + ' ' + (startY + (size.height / 2)) + ' ' + 'L' + ' ' +\n (startX + (-size.width / 2)) + ' ' + (startY) + 'z';\n pathOptions = new PathOption(options['id'], options['fill'], border.width, border.color, opacity, '', path);\n markerEle = smithchart.renderer.drawPath(pathOptions);\n break;\n case 'pentagon':\n var eq = 72;\n for (var i = 0; i <= 5; i++) {\n var xValue = radius * Math.cos((Math.PI / 180) * (i * eq));\n var yValue = radius * Math.sin((Math.PI / 180) * (i * eq));\n if (i === 0) {\n path = 'M' + ' ' + (startX + xValue) + ' ' + (startY + yValue) + ' ';\n }\n else {\n path = path.concat('L' + ' ' + (startX + xValue) + ' ' + (startY + yValue) + ' ');\n }\n }\n path = path.concat('Z');\n pathOptions = new PathOption(options['id'], options['fill'], border.width, border.color, opacity, '', path);\n markerEle = smithchart.renderer.drawPath(pathOptions);\n break;\n }\n return markerEle;\n };\n return Marker;\n}());\nexport { Marker };\n","/**\n *\n */\nimport { createElement } from '@syncfusion/ej2-base';\nimport { measureText } from '../../smithchart/utils/helper';\nimport { getTemplateFunction, convertElementFromLabel, PathOption } from '../../smithchart/utils/helper';\nimport { SmithchartLabelPosition } from '../../smithchart/utils/utils';\nimport { LabelOption } from '../../smithchart/utils/utils';\n/* tslint:disable:no-string-literal */\nvar DataLabel = /** @class */ (function () {\n function DataLabel() {\n this.textOptions = [];\n this.labelOptions = [];\n this.allPoints = [];\n }\n DataLabel.prototype.drawDataLabel = function (smithchart, seriesindex, groupElement, pointsRegion, bounds) {\n this.textOptions = [];\n this.allPoints = [];\n var margin = smithchart.margin;\n var pointIndex;\n var marker = smithchart.series[seriesindex].marker;\n var region;\n var labelPosition;\n var labelText;\n var textSize;\n var dataLabel = marker.dataLabel;\n var font = dataLabel.textStyle;\n var count = pointsRegion.length;\n for (var i = 0; i < count; i++) {\n labelText = smithchart.series[seriesindex].points[i].reactance.toString();\n textSize = measureText(labelText, font);\n region = pointsRegion[i]['point'];\n var xPos = region.x - textSize.width / 2;\n var yPos = region.y - (textSize.height + marker['height'] + (margin.top));\n var width = textSize.width + (margin.left / 2) + (margin.right / 2);\n var height = textSize.height + (margin.top / 2) + (margin.bottom / 2);\n pointIndex = i;\n labelPosition = new SmithchartLabelPosition();\n labelPosition = { textX: xPos + (margin.left / 2), textY: yPos + (height / 2) + margin.top / 2, x: xPos, y: yPos };\n this.textOptions[i] = {\n id: smithchart.element.id + '_Series' + seriesindex + '_Points' + pointIndex + '_dataLabel' + '_displayText' + i,\n x: labelPosition['textX'],\n y: labelPosition['textY'],\n fill: 'black',\n text: labelText,\n font: font,\n xPosition: xPos,\n yPosition: yPos,\n width: width,\n height: height,\n location: region,\n labelOptions: labelPosition,\n visible: true,\n connectorFlag: null\n };\n }\n var labelOption = new LabelOption();\n labelOption.textOptions = this.textOptions;\n this.labelOptions.push(labelOption);\n this.drawDatalabelSymbol(smithchart, seriesindex, dataLabel, groupElement, bounds, pointsRegion);\n };\n DataLabel.prototype.calculateSmartLabels = function (points, seriesIndex) {\n var length = points['textOptions'].length;\n var count = 0;\n for (var k = 0; k < length; k++) {\n this.allPoints[this.allPoints.length] = points['textOptions'][k];\n this.connectorFlag = false;\n this.compareDataLabels(k, points, count, seriesIndex);\n this.labelOptions[seriesIndex]['textOptions'][k] = points['textOptions'][k];\n this.labelOptions[seriesIndex]['textOptions'][k].connectorFlag = this.connectorFlag;\n }\n };\n DataLabel.prototype.compareDataLabels = function (i, points, count, m) {\n var length = this.allPoints.length;\n var padding = 10;\n var collide;\n var currentLabel;\n var prevLabel;\n for (var j = 0; j < length; j++) {\n prevLabel = this.allPoints[j];\n currentLabel = this.allPoints[length - 1];\n collide = this.isCollide(prevLabel, currentLabel);\n if (collide) {\n this.connectorFlag = true;\n switch (count) {\n case 0:\n // Right\n this.resetValues(currentLabel);\n this.prevLabel = prevLabel;\n currentLabel['xPosition'] = this.prevLabel['xPosition'] + (this.prevLabel['width'] / 2 +\n currentLabel['width'] / 2 + padding);\n currentLabel['x'] = currentLabel['xPosition'] + padding / 2;\n count += 1;\n this.compareDataLabels(i, points, count, m);\n break;\n case 1:\n // Right Bottom\n this.resetValues(currentLabel);\n currentLabel['xPosition'] = this.prevLabel['xPosition'] + this.prevLabel['width'] / 2 +\n currentLabel['width'] / 2 + padding;\n currentLabel['x'] = currentLabel['xPosition'] + padding / 2;\n currentLabel['yPosition'] = currentLabel['location'].y + currentLabel['height'] / 2 + padding / 2;\n currentLabel['y'] = currentLabel['yPosition'] + ((currentLabel['height'] / 2)) + padding / 2;\n count += 1;\n this.compareDataLabels(i, points, count, m);\n break;\n case 2:\n // Bottom\n this.resetValues(currentLabel);\n currentLabel['yPosition'] = currentLabel['location'].y + currentLabel['height'] / 2 + padding / 2;\n currentLabel['y'] = currentLabel['yPosition'] + (currentLabel['height'] / 2) + padding / 2;\n count += 1;\n this.compareDataLabels(i, points, count, m);\n break;\n case 3:\n // Left Bottom\n this.resetValues(currentLabel);\n currentLabel['xPosition'] = this.prevLabel['xPosition'] - this.prevLabel['width'] / 2\n - currentLabel['width'] / 2 - padding;\n currentLabel['x'] = currentLabel['xPosition'] + padding / 2;\n currentLabel['yPosition'] = currentLabel['height'] / 2 + currentLabel['location'].y + padding / 2;\n currentLabel['y'] = currentLabel['yPosition'] + ((currentLabel['height'] / 2)) + padding / 2;\n count += 1;\n this.compareDataLabels(i, points, count, m);\n break;\n case 4:\n // Left\n this.resetValues(currentLabel);\n currentLabel['xPosition'] = (this.prevLabel['xPosition'] - this.prevLabel['width'] / 2 -\n currentLabel['width'] / 2 - padding);\n currentLabel['x'] = currentLabel['xPosition'] + padding / 2;\n count += 1;\n this.compareDataLabels(i, points, count, m);\n break;\n case 5:\n //Left Top\n this.resetValues(currentLabel);\n currentLabel['xPosition'] = this.prevLabel['xPosition'] - this.prevLabel['width'] / 2 -\n currentLabel['width'] / 2 - padding;\n currentLabel['x'] = currentLabel['xPosition'] + padding / 2;\n currentLabel['yPosition'] = this.prevLabel['yPosition'] - currentLabel['height'] - padding;\n currentLabel['y'] = currentLabel['yPosition'] + currentLabel['height'] / 2 + padding / 2;\n count += 1;\n this.compareDataLabels(i, points, count, m);\n break;\n case 6:\n // Top\n this.resetValues(currentLabel);\n currentLabel['yPosition'] = (this.prevLabel['yPosition']) - (currentLabel['height'] + padding);\n currentLabel['y'] = currentLabel['yPosition'] + (currentLabel['height'] / 2) + padding / 2;\n count += 1;\n this.compareDataLabels(i, points, count, m);\n break;\n case 7:\n // Right Top\n this.resetValues(currentLabel);\n currentLabel['xPosition'] = this.prevLabel['xPosition'] + this.prevLabel['width'] / 2 +\n currentLabel['width'] / 2 + padding;\n currentLabel['x'] = currentLabel['xPosition'] + padding / 2;\n currentLabel['yPosition'] = this.prevLabel['yPosition'] - currentLabel['height'] - padding;\n currentLabel['y'] = currentLabel['yPosition'] + (currentLabel['height'] / 2) + padding / 2;\n count += 1;\n this.compareDataLabels(i, points, count, m);\n break;\n case 8:\n count = 0;\n this.compareDataLabels(i, points, count, m);\n break;\n }\n }\n }\n };\n DataLabel.prototype.isCollide = function (dataLabel1, dataLabel2) {\n var state = false;\n if (dataLabel1 !== dataLabel2) {\n state = !(((dataLabel1['y'] + dataLabel1['height']) < (dataLabel2['y'])) ||\n (dataLabel1['y'] > (dataLabel2['y'] + dataLabel2['height'])) ||\n ((dataLabel1['x'] + dataLabel1['width'] / 2) < dataLabel2['x'] - dataLabel2['width'] / 2) ||\n (dataLabel1['x'] - dataLabel1['width'] / 2 > (dataLabel2['x'] + dataLabel2['width'] / 2)));\n }\n return state;\n };\n DataLabel.prototype.resetValues = function (currentPoint) {\n currentPoint['xPosition'] = currentPoint['labelOptions']['x'];\n currentPoint['yPosition'] = currentPoint['labelOptions']['y'];\n currentPoint['x'] = currentPoint['labelOptions']['textX'];\n currentPoint['y'] = currentPoint['labelOptions']['textY'];\n };\n DataLabel.prototype.drawConnectorLines = function (smithchart, seriesIndex, index, currentPoint, groupElement) {\n var xPos = currentPoint['xPosition'];\n var yPos = currentPoint['yPosition'];\n var location = currentPoint['location'];\n var endY;\n if (location.y > currentPoint['y']) {\n endY = (currentPoint['y']);\n }\n else {\n endY = (currentPoint['y'] - currentPoint['height'] / 2); // bottom\n }\n var connectorDirection = 'M' + ' ' + (location.x) + ' ' + (location.y) + ' ' + 'L' + ' ' +\n (currentPoint['x']) + ' ' + (endY);\n var connectorLineValues = smithchart.series[seriesIndex].marker.dataLabel.connectorLine;\n var stroke = connectorLineValues.color ? connectorLineValues.color :\n (smithchart.series[seriesIndex].fill ||\n smithchart.seriesColors[seriesIndex % smithchart.seriesColors.length]);\n var options = new PathOption(smithchart.element.id + '_dataLabelConnectorLine' + '_series' + seriesIndex + '_point' + index, 'none', connectorLineValues.width, stroke, 1, 'none', connectorDirection);\n var element = smithchart.renderer.drawPath(options);\n groupElement.appendChild(element);\n };\n DataLabel.prototype.drawDatalabelSymbol = function (smithchart, seriesindex, dataLabel, groupElement, bounds, pointsRegion) {\n for (var i = 0; i < smithchart.series[seriesindex].points.length; i++) {\n if (dataLabel.template) {\n var labelTemplateElement = createElement('div', {\n id: smithchart.element.id + '_seriesIndex_' + seriesindex + '_Label_Template_Group',\n className: 'template',\n styles: 'position: absolute;'\n /* 'top:' + bounds['x'] + 'px;' +\n 'left:' + bounds['y'] + 'px;' +\n 'height:' + smithchart.availableSize.height + 'px;' +\n 'width:' + smithchart.availableSize.width + 'px;'*/\n });\n document.getElementById(smithchart.element.id + '_Secondary_Element').appendChild(labelTemplateElement);\n var templateFn = void 0;\n var labelElement = void 0;\n var id = dataLabel.template + '_seriesIndex' + seriesindex + '_pointIndex' + i + smithchart.element.id;\n var data = { point: smithchart.series[seriesindex].points[i].reactance };\n templateFn = getTemplateFunction(dataLabel.template);\n var templateElement = templateFn(smithchart);\n labelElement = convertElementFromLabel(templateElement, id, data, seriesindex, smithchart);\n labelTemplateElement.appendChild(labelElement);\n labelElement.style.left = pointsRegion[i].point.x - labelElement.offsetWidth / 2 + 'px';\n labelElement.style.top = pointsRegion[i].point.y - labelElement.offsetHeight -\n smithchart.series[seriesindex].marker.height / 2 + 'px';\n var left = parseInt(labelElement.style.left, 10);\n var top_1 = parseInt(labelElement.style.top, 10);\n var width = labelElement.offsetWidth;\n var height = labelElement.offsetHeight;\n var region = pointsRegion[i]['point'];\n var labelPosition = { textX: left, textY: top_1,\n x: left, y: top_1 };\n this.labelOptions[seriesindex]['textOptions'][i] = {\n id: id,\n x: left,\n y: top_1,\n fill: 'black',\n text: '',\n font: dataLabel.textStyle,\n xPosition: left,\n yPosition: top_1,\n width: width,\n height: height,\n location: region,\n labelOptions: labelPosition,\n visible: true,\n connectorFlag: null\n };\n }\n }\n };\n return DataLabel;\n}());\nexport { DataLabel };\n","import { Marker } from './marker';\nimport { TextOption, renderTextElement } from '../../smithchart/utils/helper';\nimport { SmithchartRect, LineSegment, PointRegion, DataLabelTextOptions } from '../../smithchart/utils/utils';\nimport { _getEpsilonValue, PathOption, RectOption, getAnimationFunction, templateAnimate } from '../../smithchart/utils/helper';\nimport { animationComplete } from '../../smithchart/model/constant';\nimport { DataLabel } from '../../smithchart/series/datalabel';\nimport { Animation } from '@syncfusion/ej2-base';\n/* tslint:disable:no-string-literal */\nvar SeriesRender = /** @class */ (function () {\n function SeriesRender() {\n this.xValues = [];\n this.yValues = [];\n this.pointsRegion = [];\n this.lineSegments = [];\n this.location = [];\n this.dataLabel = new DataLabel();\n }\n SeriesRender.prototype.processData = function (series) {\n var dataArray = series.dataSource;\n var resistance = series.resistance;\n var reactance = series.reactance;\n series.points = [];\n for (var i = 0; i < dataArray.length; i++) {\n series.points.push({ resistance: dataArray[i][resistance],\n reactance: dataArray[i][reactance] });\n }\n };\n // tslint:disable:max-func-body-length\n SeriesRender.prototype.draw = function (smithchart, axisRender, bounds) {\n var groupElement = smithchart.renderer.createGroup({ 'id': smithchart.element.id + '_svg' + '_seriesCollections' });\n var resistantCx;\n var reactanceCy;\n var series = smithchart.series;\n var seriesLength = series.length;\n var chartAreaRadius = axisRender.areaRadius;\n var interSectPoint;\n var index;\n for (var m = 0; m < seriesLength; m++) {\n var seriesIndex = m;\n if (series[m].dataSource && series[m].resistance && series[m].reactance) {\n this.processData(series[m]);\n }\n this.pointsRegion[m] = [];\n this.location[m] = [];\n for (var j = 0; j < series[m].points.length; j++) {\n this.xValues[j] = series[m].points[j]['resistance'];\n this.yValues[j] = series[m].points[j]['reactance'];\n }\n var chartAreaCx = axisRender.circleCenterX;\n var chartAreaCy = axisRender.circleCenterY;\n var diameter = axisRender.areaRadius * 2;\n var reactanceStartPoint = { x: chartAreaCx + ((smithchart.renderType === 'Impedance') ?\n chartAreaRadius : -chartAreaRadius), y: chartAreaCy };\n var resistantCy = chartAreaCy;\n var reactanceCx = reactanceStartPoint.x;\n for (var k = 0; k < series[m].points.length; k++) {\n var resistance = this.xValues[k];\n var resistantR = (diameter * (1 / (resistance + 1))) / 2;\n var reactance = this.yValues[k];\n var reactanceR = Math.abs(((1 / reactance) * diameter) / 2);\n if (smithchart.renderType === 'Impedance') {\n reactanceCy = reactance > 0 ? chartAreaCy - reactanceR : chartAreaCy + reactanceR;\n resistantCx = (axisRender.circleLeftX + diameter - resistantR);\n }\n else {\n reactanceCy = reactance < 0 ? chartAreaCy - reactanceR : chartAreaCy + reactanceR;\n resistantCx = (axisRender.circleLeftX + resistantR);\n }\n interSectPoint = axisRender.intersectingCirclePoints(reactanceCx, reactanceCy, reactanceR, resistantCx, resistantCy, resistantR, smithchart.renderType);\n var epsilon = _getEpsilonValue();\n if (Math.abs(reactance) < epsilon) {\n interSectPoint.x = (smithchart.renderType === 'Impedance') ?\n resistantCx - resistantR : resistantCx + resistantR;\n interSectPoint.y = chartAreaCy;\n }\n this.pointsRegion[m][k] = new PointRegion();\n this.pointsRegion[m][k] = { point: interSectPoint, x: resistance, y: reactance };\n this.location[m][k] = { x: interSectPoint.x, y: interSectPoint.y };\n }\n for (var i = 0; i < series[m].points.length - 1; i++) {\n index = i + 1;\n this.lineSegments[i] = new LineSegment();\n this.lineSegments[i] = { x1: this.xValues[i], y1: this.yValues[i], x2: this.xValues[index], y2: this.yValues[index] };\n }\n smithchart.svgObject.appendChild(groupElement);\n this.drawSeries(smithchart, seriesIndex, groupElement, bounds);\n }\n for (var j = 0; j < smithchart.series.length; j++) {\n if (smithchart.series[j].enableSmartLabels && smithchart.series[j].marker.dataLabel.visible) {\n var gdlcEle = smithchart.renderer.createGroup({ 'id': smithchart.element.id + '_svg'\n + '_series' + j + '_Datalabel' + '_connectorLines' });\n var element = document.getElementById(smithchart.element.id + '_svg' + '_seriesCollection' + j);\n if (element) {\n element.appendChild(gdlcEle);\n }\n this.dataLabel.calculateSmartLabels(this.dataLabel.labelOptions[j], j);\n for (var k = 0; k < smithchart.series[j].points.length; k++) {\n var currentPoint = this.dataLabel.labelOptions[j]['textOptions'][k];\n if ((currentPoint.xPosition + currentPoint.width) > (smithchart.chartArea.x + smithchart.chartArea.width)\n || currentPoint.xPosition < smithchart.chartArea.x || currentPoint.yPosition < smithchart.chartArea.y ||\n currentPoint.yPosition + currentPoint.height > smithchart.chartArea.y + smithchart.chartArea.height) {\n this.dataLabel.labelOptions[j].textOptions[k].connectorFlag = false;\n this.dataLabel.labelOptions[j].textOptions[k].visible = false;\n }\n if (currentPoint['connectorFlag']) {\n this.dataLabel.drawConnectorLines(smithchart, j, k, currentPoint, gdlcEle);\n }\n }\n }\n }\n for (var j = 0; j < smithchart.series.length; j++) {\n var dataLabel = smithchart.series[j].marker.dataLabel;\n if (smithchart.series[j].marker.dataLabel.visible) {\n var element = document.getElementById(smithchart.element.id + '_svg' + '_seriesCollection' + j);\n var gdEle = smithchart.renderer.createGroup({ 'id': smithchart.element.id + '_svg'\n + '_series' + j + '_Datalabel' });\n if (element) {\n element.appendChild(gdEle);\n }\n for (var k = 0; k < smithchart.series[j].points.length; k++) {\n var currentPoint = this.dataLabel.labelOptions[j]['textOptions'][k];\n if (!dataLabel.template && currentPoint.visible) {\n var options = new DataLabelTextOptions();\n options = this.dataLabel.labelOptions[j]['textOptions'][k];\n var font = smithchart.font;\n var x = options['xPosition'];\n var y = options['yPosition'];\n var id = smithchart.element.id + '_Series' + j + '_Points' + k + '_dataLabel' + '_symbol' + k;\n var fill = dataLabel['fill'] ? dataLabel['fill'] : (smithchart.series[j].fill ||\n smithchart.seriesColors[j % smithchart.seriesColors.length]);\n var border = smithchart.series[j].marker.dataLabel.border;\n var rectOptions = new RectOption(id, fill, border, options['opacity'], new SmithchartRect(x, y, options['width'], options['height']));\n var dataEle = smithchart.renderer.drawRectangle(rectOptions);\n gdEle.appendChild(dataEle);\n var textRenderEventArgs = { text: options['text'], x: options['x'], y: options['y'], seriesIndex: j,\n pointIndex: k, name: 'textRender', cancel: false };\n smithchart.trigger('textRender', textRenderEventArgs);\n var textoptions = new TextOption(options['id'], textRenderEventArgs.x, textRenderEventArgs.y, 'start', textRenderEventArgs.text);\n var element_1 = renderTextElement(textoptions, font, smithchart.themeStyle.dataLabel, gdEle);\n gdEle.appendChild(element_1);\n }\n else if (dataLabel.template) {\n var element_2 = document.getElementById(dataLabel.template + '_seriesIndex' + j + '_pointIndex' +\n k + smithchart.element.id);\n element_2.style.left = this.dataLabel.labelOptions[j]['textOptions'][k].xPosition + 'px';\n element_2.style.top = this.dataLabel.labelOptions[j]['textOptions'][k].yPosition + 'px';\n }\n }\n }\n }\n for (var i = 0; i < smithchart.series.length; i++) {\n if (smithchart.series[i].enableAnimation && smithchart.animateSeries) {\n if (smithchart.series[i].marker.dataLabel.template) {\n this.animateDataLabelTemplate(i, smithchart);\n }\n var element = document.getElementById(smithchart.element.id + '_svg' + '_seriesCollection' + i);\n this.performAnimation(smithchart, element, i);\n }\n }\n };\n SeriesRender.prototype.drawSeries = function (smithchart, seriesindex, groupElement, bounds) {\n var gsEle = smithchart.renderer.createGroup({ 'id': smithchart.element.id + '_svg' + '_seriesCollection' + seriesindex,\n 'clip-path': 'url(#' + smithchart.element.id + '_ChartSeriesClipRect_' +\n seriesindex + ')' });\n gsEle.setAttribute('visibility', smithchart.series[seriesindex].visibility);\n groupElement.appendChild(gsEle);\n var sb = '';\n var path;\n var marker = smithchart.series[seriesindex].marker;\n var element;\n var count = smithchart.series[seriesindex].points.length - 1;\n for (var i = 0; i < count; i++) {\n var point1 = this.pointsRegion[seriesindex][i]['point'];\n var point2 = this.pointsRegion[seriesindex][i + 1]['point'];\n sb = sb + ('M' + ' ' + (point1.x) + ' ' + (point1.y) + ' ' + 'L' +\n ' ' + (point2.x) + ' ' + (point2.y) + ' ');\n }\n path = sb.toString();\n var fill = smithchart.series[seriesindex].fill || smithchart.seriesColors[seriesindex % smithchart.seriesColors.length];\n var seriesEventArgs = { text: smithchart.series[seriesindex].name, fill: fill,\n name: 'seriesRender', cancel: false };\n smithchart.trigger('seriesRender', seriesEventArgs);\n var options = new PathOption(smithchart.element.id + '_series' + seriesindex + '_points', 'none', smithchart.series[seriesindex].width, seriesEventArgs.fill, smithchart.series[seriesindex].opacity, 'none', path);\n this.clipRectElement = smithchart.renderer.drawClipPath(new RectOption(smithchart.element.id + '_ChartSeriesClipRect_' + seriesindex, 'transparent', { width: 1, color: 'Gray' }, 1, {\n x: bounds.x, y: bounds.y,\n width: smithchart.availableSize.width,\n height: smithchart.availableSize.height\n }));\n gsEle.appendChild(this.clipRectElement);\n var gspEle = smithchart.renderer.createGroup({ 'id': smithchart.element.id + '_svg' + seriesindex });\n element = smithchart.renderer.drawPath(options);\n gspEle.appendChild(element);\n gsEle.appendChild(gspEle);\n var markerrender = new Marker();\n markerrender.drawMarker(smithchart, seriesindex, gsEle, this.pointsRegion[seriesindex]);\n this.dataLabel.drawDataLabel(smithchart, seriesindex, gsEle, this.pointsRegion[seriesindex], bounds);\n };\n SeriesRender.prototype.animateDataLabelTemplate = function (seriesindex, smithchart) {\n var length = smithchart.series[seriesindex].points.length;\n var opacity = 0;\n var delay = 0;\n var duration = parseFloat(smithchart.series[seriesindex].animationDuration);\n for (var i = 0; i < length; i++) {\n var element = document.getElementById(smithchart.series[seriesindex].marker.dataLabel.template +\n '_seriesIndex' + seriesindex + '_pointIndex' + i + smithchart.element.id);\n element.style.visibility = 'hidden';\n templateAnimate(smithchart, element, delay, duration, 'FadeIn');\n // this.fadein(element);\n }\n };\n /*private fadein(element: HTMLElement): void {\n let op: number = 0.1;\n element.style.display = 'block';\n let timer: number = setInterval( (): void => {\n if (op >= 1) {\n clearInterval(timer);\n }\n element.style.opacity = op.toString();\n element.style.filter = 'alpha(opacity=' + op * 100 + ')';\n op += op * 0.1;\n }, 50);\n \n }*/\n SeriesRender.prototype.performAnimation = function (smithchart, gsEle, seriesIndex) {\n var animation = new Animation({});\n var element = document.getElementById('container_svg_seriesCollections');\n var clipRect = gsEle.childNodes[0].childNodes[0].childNodes[0];\n var effect = getAnimationFunction('Linear');\n var reveffect = getAnimationFunction('Reverse');\n var width = +clipRect.getAttribute('width');\n var x = +clipRect.getAttribute('x');\n var value;\n animation.animate(clipRect, {\n duration: parseFloat(smithchart.series[seriesIndex].animationDuration),\n progress: function (args) {\n if (smithchart.renderType === 'Impedance') {\n value = effect(args.timeStamp - args.delay, 0, width, args.duration);\n clipRect.setAttribute('width', value.toString());\n }\n else {\n value = reveffect(args.timeStamp - args.delay, width, 0, args.duration);\n clipRect.setAttribute('x', value.toString());\n }\n },\n end: function (model) {\n if (smithchart.renderType === 'Impedance') {\n clipRect.setAttribute('width', width.toString());\n }\n else {\n clipRect.setAttribute('x', x.toString());\n }\n var event = {\n cancel: false, name: animationComplete, smithchart: smithchart\n };\n smithchart.trigger(animationComplete, event);\n }\n });\n };\n SeriesRender.prototype.getLocation = function (seriesindex, pointIndex) {\n var x;\n var y;\n x = this.location[seriesindex][pointIndex].x;\n y = this.location[seriesindex][pointIndex].y;\n return { x: x, y: y };\n };\n return SeriesRender;\n}());\nexport { SeriesRender };\n","/**\n * Specifies smithchart animationComplete event name.\n * @private\n */\nexport var animationComplete = 'animationComplete';\n/**\n * Specifies smithchart legendRender event name.\n * @private\n */\nexport var legendRender = 'legendRender';\n/**\n * Specifies smithchart titleRender event name.\n * @private\n */\nexport var titleRender = 'titleRender';\n/**\n * Specifies smithchart subtitleRender event name.\n * @private\n */\nexport var subtitleRender = 'subtitleRender';\n/**\n * Specifies smithchart textRender event name.\n * @private\n */\nexport var textRender = 'textRender';\n","import { print as smithchartPrint, createElement, isNullOrUndefined, Browser } from '@syncfusion/ej2-base';\nimport { getElement } from '../utils/helper';\nimport { smithchartBeforePrint } from '../utils/enum';\nimport { PdfPageOrientation, PdfDocument, PdfBitmap } from '@syncfusion/ej2-pdf-export';\n/**\n * Annotation Module handles the Annotation for Maps\n */\nvar ExportUtils = /** @class */ (function () {\n /**\n * Constructor for Maps\n * @param control\n */\n function ExportUtils(control) {\n this.control = control;\n }\n /**\n * To print the Maps\n * @param elements\n */\n ExportUtils.prototype.print = function (elements) {\n this.smithchartPrint = window.open('', 'print', 'height=' + window.outerHeight + ',width=' + window.outerWidth + ',tabbar=no');\n this.smithchartPrint.moveTo(0, 0);\n this.smithchartPrint.resizeTo(screen.availWidth, screen.availHeight);\n var argsData = {\n cancel: false, htmlContent: this.getHTMLContent(elements), name: smithchartBeforePrint\n };\n this.control.trigger(smithchartBeforePrint, argsData);\n if (!argsData.cancel) {\n smithchartPrint(argsData.htmlContent, this.smithchartPrint);\n }\n };\n /**\n * To get the html string of the Maps\n * @param svgElements\n * @private\n */\n ExportUtils.prototype.getHTMLContent = function (svgElements) {\n var div = createElement('div');\n if (svgElements) {\n if (svgElements instanceof Array) {\n svgElements.forEach(function (value) {\n div.appendChild(getElement(value).cloneNode(true));\n });\n }\n else if (svgElements instanceof Element) {\n div.appendChild(svgElements.cloneNode(true));\n }\n else {\n div.appendChild(getElement(svgElements).cloneNode(true));\n }\n }\n else {\n div.appendChild(this.control.element.cloneNode(true));\n }\n return div;\n };\n /**\n * To export the file as image/svg format\n * @param type\n * @param fileName\n */\n ExportUtils.prototype.export = function (exportType, fileName, orientation) {\n var _this = this;\n var canvas = createElement('canvas', {\n id: 'ej2-canvas',\n attrs: {\n 'width': this.control.availableSize.width.toString(),\n 'height': this.control.availableSize.height.toString()\n }\n });\n var isDownload = !(Browser.userAgent.toString().indexOf('HeadlessChrome') > -1);\n orientation = isNullOrUndefined(orientation) ? PdfPageOrientation.Landscape : orientation;\n var svgData = '' +\n this.control.svgObject.outerHTML +\n '';\n var url = window.URL.createObjectURL(new Blob(exportType === 'SVG' ? [svgData] :\n [(new XMLSerializer()).serializeToString(this.control.svgObject)], { type: 'image/svg+xml' }));\n if (exportType === 'SVG') {\n this.triggerDownload(fileName, exportType, url, isDownload);\n }\n else {\n var image_1 = new Image();\n var ctx_1 = canvas.getContext('2d');\n image_1.onload = (function () {\n ctx_1.drawImage(image_1, 0, 0);\n window.URL.revokeObjectURL(url);\n if (exportType === 'PDF') {\n var document_1 = new PdfDocument();\n var imageString = canvas.toDataURL('image/jpeg').replace('image/jpeg', 'image/octet-stream');\n document_1.pageSettings.orientation = orientation;\n imageString = imageString.slice(imageString.indexOf(',') + 1);\n document_1.pages.add().graphics.drawImage(new PdfBitmap(imageString), 0, 0, (_this.control.availableSize.width - 60), _this.control.availableSize.height);\n if (isDownload) {\n document_1.save(fileName + '.pdf');\n document_1.destroy();\n }\n }\n else {\n _this.triggerDownload(fileName, exportType, canvas.toDataURL('image/png').replace('image/png', 'image/octet-stream'), isDownload);\n }\n });\n image_1.src = url;\n }\n };\n /**\n * To trigger the download element\n * @param fileName\n * @param type\n * @param url\n */\n ExportUtils.prototype.triggerDownload = function (fileName, exportType, url, isDownload) {\n createElement('a', {\n attrs: {\n 'download': fileName + '.' + exportType.toLocaleLowerCase(),\n 'href': url\n }\n }).dispatchEvent(new MouseEvent(isDownload ? 'click' : 'move', {\n view: window,\n bubbles: false,\n cancelable: true\n }));\n };\n return ExportUtils;\n}());\nexport { ExportUtils };\n","/**\n * Specifies TreeMap beforePrint event name.\n * @private\n */\nexport var smithchartBeforePrint = 'beforePrint';\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Complex, NotifyPropertyChanges, Property } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, Browser } from '@syncfusion/ej2-base';\nimport { createElement, remove, Event, EventHandler } from '@syncfusion/ej2-base';\nimport { createSvg, RectOption, measureText, TextOption, renderTextElement } from '../smithchart/utils/helper';\nimport { removeElement, textTrim } from '../smithchart/utils/helper';\nimport { SmithchartRect } from '../smithchart/utils/utils';\nimport { SmithchartMargin, SmithchartBorder, SmithchartFont } from '../smithchart/utils/utils';\nimport { getThemeColor } from '../smithchart/model/theme';\nimport { SmithchartLegendSettings } from '../smithchart/legend/legend';\nimport { SmithchartAxis } from '../smithchart/axis/axis';\nimport { Title } from '../smithchart/title/title';\nimport { SmithchartSeries } from '../smithchart/series/series';\nimport { AreaBounds } from '../smithchart/utils/area';\nimport { AxisRender } from '../smithchart/axis/axisrender';\nimport { SeriesRender } from '../smithchart/series/seriesrender';\nimport { Collection } from '@syncfusion/ej2-base';\nimport { getSeriesColor } from '../smithchart/model/theme';\nimport { ExportUtils } from '../smithchart/utils/export';\nimport { titleRender, subtitleRender } from '../smithchart/model/constant';\n/* tslint:disable:no-string-literal */\n/**\n * Represents the Smithchart control.\n * ```html\n *
    \n * \n * ```\n */\nvar Smithchart = /** @class */ (function (_super) {\n __extends(Smithchart, _super);\n /**\n * Constructor for creating the Smithchart widget\n */\n function Smithchart(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Get component name\n */\n Smithchart.prototype.getModuleName = function () {\n return 'smithchart';\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @private\n */\n Smithchart.prototype.getPersistData = function () {\n return '';\n };\n /**\n * Method to create SVG element.\n */\n Smithchart.prototype.createChartSvg = function () {\n this.removeSvg();\n createSvg(this);\n };\n Smithchart.prototype.renderTitle = function (title, type, groupEle) {\n var font = title.font ? title.font : title.textStyle;\n var textSize = measureText(title.text, font);\n var x;\n var y;\n var textAlignment = title.textAlignment;\n var titleText = title.text;\n var maxTitleWidth = (isNullOrUndefined(title.maximumWidth)) ?\n Math.abs(this.margin.left + this.margin.right - (this.availableSize.width)) :\n title.maximumWidth;\n var titleWidthEnable = textSize.width > maxTitleWidth ? true : false;\n if (textSize.width > this.availableSize.width) {\n x = this.margin.left + this.border.width;\n }\n else {\n x = textAlignment === 'Center' ? (this.availableSize.width / 2 - textSize['width'] / 2) :\n (textAlignment === 'Near' ? (this.margin.left + this.elementSpacing + this.border.width) : (this.availableSize.width\n - textSize['width'] - (this.margin.right + this.elementSpacing + this.border.width)));\n }\n y = this.margin.top + textSize['height'] / 2 + this.elementSpacing;\n if (title.enableTrim && titleWidthEnable) {\n titleText = textTrim(maxTitleWidth, title.text, font);\n textSize = measureText(titleText, font);\n }\n groupEle = this.renderer.createGroup({ id: this.element.id + '_Title_Group' });\n var titleEventArgs = { text: titleText, x: x, y: y, name: 'titleRender', cancel: false };\n this.trigger(titleRender, titleEventArgs);\n var options = new TextOption(this.element.id + '_Smithchart_' + type, titleEventArgs.x, titleEventArgs.y, 'start', titleEventArgs.text);\n var element = renderTextElement(options, font, this.themeStyle.chartTitle, groupEle);\n element.setAttribute('aria-label', title.description || title.text);\n var titleLocation = { x: x, y: y, textSize: textSize };\n this.svgObject.appendChild(groupEle);\n if (title.subtitle.text !== '' && title.subtitle.visible) {\n this.renderSubtitle(title, type, textSize, this.availableSize, titleLocation, groupEle);\n }\n };\n Smithchart.prototype.renderSubtitle = function (title, type, textSize, size, titleLocation, groupEle) {\n var x;\n var y;\n var font = title.subtitle.textStyle;\n var subTitle = title.subtitle;\n var subTitleSize = measureText(subTitle.text, font);\n var textAnchor;\n var subTitleText = subTitle.text;\n var maxSubTitleWidth = isNullOrUndefined(subTitle.maximumWidth) ?\n (this.bounds.width * 0.75) : subTitle.maximumWidth;\n if (subTitle.enableTrim && subTitleSize.width > maxSubTitleWidth) {\n subTitleText = textTrim(maxSubTitleWidth, subTitle.text, font);\n }\n x = title['subtitle'].textAlignment === 'Far' ? (titleLocation.x + (titleLocation.textSize.width)) :\n (title['subtitle'].textAlignment === 'Near') ? titleLocation.x :\n (titleLocation.x + (titleLocation.textSize.width / 2));\n y = titleLocation.y + (2 * this.elementSpacing);\n textAnchor = title['subtitle'].textAlignment === 'Far' ? 'end' :\n (title['subtitle'].textAlignment === 'Near') ? 'start' : 'middle';\n var subtitleEventArgs = { text: subTitleText, x: x, y: y, name: 'subtitleRender', cancel: false };\n this.trigger(subtitleRender, subtitleEventArgs);\n var options = new TextOption(this.element.id + '_Smithchart_' + type, subtitleEventArgs.x, subtitleEventArgs.y, textAnchor, subtitleEventArgs.text);\n var element = renderTextElement(options, font, this.themeStyle.chartTitle, groupEle);\n element.setAttribute('aria-label', subTitle.description || subTitle.text);\n groupEle.appendChild(element);\n };\n /**\n * @private\n * Render the smithchart border\n */\n Smithchart.prototype.renderBorder = function () {\n var border = this.border;\n var color = this.theme === 'Highcontrast' ? '#000000' : '#FFFFFF';\n this.background = this.background ? this.background : color;\n var borderRect = new RectOption(this.element.id + '_SmithchartBorder', this.background, border, 1, new SmithchartRect(border.width / 2, border.width / 2, this.availableSize.width - border.width, this.availableSize.height - border.width));\n this.svgObject.appendChild(this.renderer.drawRectangle(borderRect));\n };\n /**\n * Called internally if any of the property value changed.\n * @private\n */\n Smithchart.prototype.onPropertyChanged = function (newProp, oldProp) {\n this.animateSeries = false;\n var renderer = false;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'background':\n renderer = true;\n break;\n case 'size':\n this.createChartSvg();\n renderer = true;\n break;\n case 'theme':\n this.animateSeries = true;\n renderer = true;\n break;\n case 'border':\n renderer = true;\n break;\n }\n }\n if (renderer) {\n this.render();\n }\n };\n /**\n * Initialize the event handler.\n */\n Smithchart.prototype.preRender = function () {\n this.trigger('load', { smithchart: this });\n this.unWireEVents();\n this.initPrivateVariable();\n this.wireEVents();\n };\n Smithchart.prototype.initPrivateVariable = function () {\n this.animateSeries = true;\n };\n /**\n * To Initialize the control rendering.\n */\n Smithchart.prototype.setTheme = function () {\n /*! Set theme */\n this.themeStyle = getThemeColor(this.theme);\n this.seriesColors = getSeriesColor(this.theme);\n // let count: number = colors.length;\n // for (let i: number = 0; i < this.series.length; i++) {\n // this.series[i].fill = this.series[i].fill ? this.series[i].fill : colors[i % count];\n // }\n };\n Smithchart.prototype.render = function () {\n this.createChartSvg();\n this.element.appendChild(this.svgObject);\n this.setTheme();\n this.createSecondaryElement();\n this.renderBorder();\n if (this.smithchartLegendModule && this.legendSettings.visible) {\n this.legendBounds = this.smithchartLegendModule.renderLegend(this);\n }\n this.legendBounds = this.legendBounds ? this.legendBounds : { x: 0, y: 0, width: 0, height: 0 };\n var areaBounds = new AreaBounds();\n this.bounds = areaBounds.calculateAreaBounds(this, this.title, this.legendBounds);\n if (this.title.text !== '' && this.title.visible) {\n this.renderTitle(this.title, 'title', null);\n }\n var axisRender = new AxisRender();\n axisRender.renderArea(this, this.bounds);\n this.seriesrender = new SeriesRender();\n this.seriesrender.draw(this, axisRender, this.bounds);\n this.trigger('loaded', { smithchart: this });\n };\n Smithchart.prototype.createSecondaryElement = function () {\n if (isNullOrUndefined(document.getElementById(this.element.id + '_Secondary_Element'))) {\n var secondaryElement = createElement('div', {\n id: this.element.id + '_Secondary_Element',\n styles: 'position: absolute;z-index:1;'\n });\n this.element.appendChild(secondaryElement);\n var rect = this.element.getBoundingClientRect();\n var svgRect = document.getElementById(this.element.id + '_svg');\n if (svgRect) {\n var svgClientRect = svgRect.getBoundingClientRect();\n secondaryElement.style.left = Math.max(svgClientRect.left - rect.left, 0) + 'px';\n secondaryElement.style.top = Math.max(svgClientRect.top - rect.top, 0) + 'px';\n }\n }\n else {\n removeElement(this.element.id + '_Secondary_Element');\n }\n };\n /**\n * To destroy the widget\n * @method destroy\n * @return {void}.\n * @member of smithChart\n */\n Smithchart.prototype.destroy = function () {\n this.unWireEVents();\n _super.prototype.destroy.call(this);\n this.element.classList.remove('e-smithchart');\n };\n /**\n * To bind event handlers for smithchart.\n */\n Smithchart.prototype.wireEVents = function () {\n EventHandler.add(this.element, 'click', this.smithchartOnClick, this);\n EventHandler.add(this.element, Browser.touchMoveEvent, this.mouseMove, this);\n EventHandler.add(this.element, Browser.touchEndEvent, this.mouseEnd, this);\n window.addEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.smithchartOnResize.bind(this));\n };\n Smithchart.prototype.mouseMove = function (e) {\n if (e.type === 'touchmove') {\n this.isTouch = true;\n }\n else {\n this.isTouch = e.pointerType === 'touch' || e.pointerType === '2' || this.isTouch;\n }\n if (this.tooltipRenderModule && !this.isTouch) {\n this.tooltipRenderModule.smithchartMouseMove(this, e);\n }\n };\n Smithchart.prototype.mouseEnd = function (e) {\n if (e.type === 'touchend') {\n this.isTouch = true;\n }\n else {\n this.isTouch = e.pointerType === 'touch' || e.pointerType === '2';\n }\n if (this.tooltipRenderModule && this.isTouch) {\n var tooltipElement_1 = this.tooltipRenderModule.smithchartMouseMove(this, e);\n if (tooltipElement_1) {\n this.fadeoutTo = setTimeout(function () {\n tooltipElement_1.fadeOut();\n }, 2000);\n }\n }\n };\n /**\n * To handle the click event for the smithchart.\n */\n /* tslint:disable:no-string-literal */\n Smithchart.prototype.smithchartOnClick = function (e) {\n var targetEle = e.target;\n var targetId = targetEle.id;\n var parentElement = document.getElementById(targetId).parentElement;\n var grpElement = document.getElementById(parentElement.id).parentElement;\n if (grpElement.id === 'containerlegendItem_Group' && this.legendSettings.toggleVisibility) {\n var childElement = parentElement.childNodes[1];\n var circleElement = parentElement.childNodes[0];\n var legendText = childElement.textContent;\n var seriesIndex = void 0;\n var fill = void 0;\n for (var i = 0; i < this.smithchartLegendModule.legendSeries.length; i++) {\n if (legendText === this.smithchartLegendModule.legendSeries[i]['text']) {\n seriesIndex = this.smithchartLegendModule.legendSeries[i].seriesIndex;\n fill = this.smithchartLegendModule.legendSeries[i].fill;\n }\n }\n var seriesElement = document.getElementById(this.element.id + '_svg' + '_seriesCollection' + seriesIndex);\n if (seriesElement.getAttribute('visibility') === 'visible') {\n circleElement.setAttribute('fill', 'gray');\n seriesElement.setAttribute('visibility', 'hidden');\n this.series[seriesIndex].visibility = 'hidden';\n }\n else {\n circleElement.setAttribute('fill', fill);\n seriesElement.setAttribute('visibility', 'visible');\n this.series[seriesIndex].visibility = 'visible';\n }\n }\n };\n /**\n * To unbind event handlers from smithchart.\n */\n Smithchart.prototype.unWireEVents = function () {\n EventHandler.remove(this.element, 'click', this.smithchartOnClick);\n EventHandler.remove(this.element, Browser.touchMoveEvent, this.mouseMove);\n EventHandler.remove(this.element, Browser.touchEndEvent, this.mouseEnd);\n window.removeEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.smithchartOnResize);\n };\n Smithchart.prototype.print = function (id) {\n var exportChart = new ExportUtils(this);\n exportChart.print(id);\n };\n /**\n * Handles the export method for chart control.\n * @param type\n * @param fileName\n */\n Smithchart.prototype.export = function (type, fileName, orientation) {\n var exportMap = new ExportUtils(this);\n exportMap.export(type, fileName, orientation);\n };\n /**\n * To handle the window resize event on smithchart.\n */\n Smithchart.prototype.smithchartOnResize = function (e) {\n var _this = this;\n this.animateSeries = false;\n if (this.resizeTo) {\n clearTimeout(this.resizeTo);\n }\n this.resizeTo = setTimeout(function () {\n _this.render();\n }, 500);\n return false;\n };\n /**\n * To provide the array of modules needed for smithchart rendering\n * @return {ModuleDeclaration[]}\n * @private\n */\n Smithchart.prototype.requiredModules = function () {\n var modules = [];\n if (this.legendSettings.visible) {\n modules.push({\n member: 'SmithchartLegend',\n args: [this]\n });\n }\n for (var i = 0; i < this.series.length; i++) {\n if (this.series[i].tooltip.visible) {\n modules.push({\n member: 'TooltipRender',\n args: [this]\n });\n break;\n }\n }\n return modules;\n };\n /**\n * To Remove the SVG.\n * @return {boolean}\n * @private\n */\n Smithchart.prototype.removeSvg = function () {\n removeElement(this.element.id + '_Secondary_Element');\n var removeLength = 0;\n if (this.svgObject) {\n while (this.svgObject.childNodes.length > removeLength) {\n this.svgObject.removeChild(this.svgObject.firstChild);\n }\n if (!this.svgObject.hasChildNodes() && this.svgObject.parentNode) {\n remove(this.svgObject);\n }\n }\n };\n __decorate([\n Property('Impedance')\n ], Smithchart.prototype, \"renderType\", void 0);\n __decorate([\n Property('')\n ], Smithchart.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], Smithchart.prototype, \"height\", void 0);\n __decorate([\n Property(false)\n ], Smithchart.prototype, \"isResponsive\", void 0);\n __decorate([\n Property('Material')\n ], Smithchart.prototype, \"theme\", void 0);\n __decorate([\n Complex({}, SmithchartMargin)\n ], Smithchart.prototype, \"margin\", void 0);\n __decorate([\n Complex({}, SmithchartFont)\n ], Smithchart.prototype, \"font\", void 0);\n __decorate([\n Complex({}, SmithchartBorder)\n ], Smithchart.prototype, \"border\", void 0);\n __decorate([\n Complex({}, Title)\n ], Smithchart.prototype, \"title\", void 0);\n __decorate([\n Collection([{}], SmithchartSeries)\n ], Smithchart.prototype, \"series\", void 0);\n __decorate([\n Complex({}, SmithchartLegendSettings)\n ], Smithchart.prototype, \"legendSettings\", void 0);\n __decorate([\n Complex({}, SmithchartAxis)\n ], Smithchart.prototype, \"horizontalAxis\", void 0);\n __decorate([\n Complex({}, SmithchartAxis)\n ], Smithchart.prototype, \"radialAxis\", void 0);\n __decorate([\n Property(null)\n ], Smithchart.prototype, \"background\", void 0);\n __decorate([\n Property(10)\n ], Smithchart.prototype, \"elementSpacing\", void 0);\n __decorate([\n Property(1)\n ], Smithchart.prototype, \"radius\", void 0);\n __decorate([\n Event()\n ], Smithchart.prototype, \"beforePrint\", void 0);\n __decorate([\n Event()\n ], Smithchart.prototype, \"animationComplete\", void 0);\n __decorate([\n Event()\n ], Smithchart.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], Smithchart.prototype, \"loaded\", void 0);\n __decorate([\n Event()\n ], Smithchart.prototype, \"legendRender\", void 0);\n __decorate([\n Event()\n ], Smithchart.prototype, \"titleRender\", void 0);\n __decorate([\n Event()\n ], Smithchart.prototype, \"subtitleRender\", void 0);\n __decorate([\n Event()\n ], Smithchart.prototype, \"textRender\", void 0);\n __decorate([\n Event()\n ], Smithchart.prototype, \"axisLabelRender\", void 0);\n __decorate([\n Event()\n ], Smithchart.prototype, \"seriesRender\", void 0);\n Smithchart = __decorate([\n NotifyPropertyChanges\n ], Smithchart);\n return Smithchart;\n}(Component));\nexport { Smithchart };\n","import { ClosestPoint, SmithchartRect } from '../../smithchart/utils/utils';\nimport { Tooltip } from '@syncfusion/ej2-svg-base';\nimport { isNullOrUndefined, createElement } from '@syncfusion/ej2-base';\nvar TooltipRender = /** @class */ (function () {\n function TooltipRender() {\n }\n TooltipRender.prototype.smithchartMouseMove = function (smithchart, e) {\n var touchArg;\n var pageX;\n var pageY;\n if (e.type === 'touchend' || e.type === 'touchmove') {\n touchArg = e;\n pageX = touchArg.changedTouches[0].clientX;\n pageY = touchArg.changedTouches[0].clientY;\n this.tooltipElement = undefined;\n }\n else {\n pageY = e.clientY;\n pageX = e.clientX;\n }\n this.setMouseXY(smithchart, pageX, pageY);\n for (var i = 0; i < smithchart.series.length; i++) {\n var series = smithchart.series[i];\n var seriesIndex = i;\n var closestPoint = new ClosestPoint();\n closestPoint = this.closestPointXY(smithchart, this.mouseX, this.mouseY, series, seriesIndex);\n if (closestPoint.location && series.tooltip.visible && series.visibility === 'visible') {\n this.createTooltip(smithchart, e, closestPoint.index, seriesIndex, series);\n break;\n }\n else if (this.tooltipElement && this.tooltipElement.enable && !series.tooltip.template) {\n this.tooltipElement.fadeOut();\n this.tooltipElement.enable = false;\n }\n else if (series.tooltip.template) {\n this.tooltipElement.fadeOut();\n }\n }\n return this.tooltipElement;\n };\n TooltipRender.prototype.setMouseXY = function (smithchart, pageX, pageY) {\n var rect = smithchart.element.getBoundingClientRect();\n var svgRect = document.getElementById(smithchart.element.id + '_svg').getBoundingClientRect();\n this.mouseX = (pageX - rect.left) - Math.max(svgRect.left - rect.left, 0);\n this.mouseY = (pageY - rect.top) - Math.max(svgRect.top - rect.top, 0);\n };\n TooltipRender.prototype.createTooltip = function (smithchart, e, pointindex, seriesindex, series) {\n var pointX = series.points[pointindex].resistance;\n var pointY = series.points[pointindex].reactance;\n var tooltipText = [pointX + ' ' + ':' + ' ' + '' + pointY + ''];\n var markerHeight = smithchart.series[seriesindex].marker.height / 2;\n var div = document.getElementById(smithchart.element.id + '_smithchart_tooltip_div');\n if (isNullOrUndefined(div)) {\n div = createElement('div', { id: smithchart.element.id + '_smithchart_tooltip_div',\n styles: 'pointer-events: none; position: absolute;z-index:1;' });\n document.getElementById(smithchart.element.id + '_Secondary_Element').appendChild(div);\n }\n this.tooltipElement = new Tooltip({\n enable: true,\n header: '' + series.name + '',\n content: tooltipText,\n border: series.tooltip.border,\n fill: smithchart.themeStyle.tooltipFill,\n data: { reactance: pointY },\n template: series.tooltip.template,\n location: { x: this.locationX + smithchart.element.offsetLeft,\n y: this.locationY - markerHeight + smithchart.element.offsetTop },\n shared: false,\n areaBounds: new SmithchartRect(smithchart.bounds.x, smithchart.bounds.y, smithchart.bounds.width, smithchart.bounds.height),\n palette: [series.fill || smithchart.seriesColors[seriesindex % smithchart.seriesColors.length]],\n shapes: ['Circle'],\n theme: smithchart.theme\n });\n this.tooltipElement.textStyle.fontFamily = 'Roboto, Segoe UI, Noto, Sans-serif';\n this.tooltipElement.appendTo(div);\n };\n TooltipRender.prototype.closestPointXY = function (smithchart, x, y, series, seriesindex) {\n var pointIndex;\n var chartPoint;\n var closePoint;\n for (var j = 0; j < series.points.length; j++) {\n chartPoint = smithchart.seriesrender.getLocation(seriesindex, j);\n this.locationX = chartPoint.x;\n this.locationY = chartPoint.y;\n pointIndex = j;\n var a = x - chartPoint.x;\n var b = y - chartPoint.y;\n var distance = Math.abs(Math.sqrt((a * a) + (b * b)));\n if (distance < series.marker.width) {\n closePoint = chartPoint;\n pointIndex = j;\n break;\n }\n }\n return { location: closePoint, index: pointIndex };\n };\n /**\n * Get module name.\n */\n TooltipRender.prototype.getModuleName = function () {\n return 'TooltipRender';\n };\n /**\n * To destroy the legend.\n * @return {void}\n * @private\n */\n TooltipRender.prototype.destroy = function (smithchart) {\n /**\n * Destroy method performed here\n */\n };\n return TooltipRender;\n}());\nexport { TooltipRender };\n","import { measureText, TextOption, renderTextElement, CircleOption, PathOption, RectOption } from '../../smithchart/utils/helper';\nimport { SmithchartRect, LegendSeries } from '../../smithchart/utils/utils';\n/* tslint:disable:no-string-literal */\nvar SmithchartLegend = /** @class */ (function () {\n function SmithchartLegend() {\n this.legendSeries = [];\n }\n SmithchartLegend.prototype.renderLegend = function (smithchart) {\n this.calculateLegendBounds(smithchart);\n this._drawLegend(smithchart);\n return this.legendActualBounds;\n };\n SmithchartLegend.prototype.calculateLegendBounds = function (smithchart) {\n var legendSeries = new LegendSeries();\n this.legendSeries = [];\n var padding = 10;\n var legend = smithchart.legendSettings;\n var legendSizeHeight = legend.height;\n var legendSizeWidth = legend.width;\n var itemPadding = legend.itemPadding > 0 ? legend.itemPadding : 0;\n var position = legend.position.toLowerCase();\n var font = legend.title.textStyle;\n var width = 0;\n var height = 0;\n var legendItemWidth = 0;\n var legendItemHeight = 0;\n var legendHeight = 0;\n var svgObjectWidth = smithchart.availableSize.width - ((smithchart.elementSpacing * 4) - (legend.border.width * 2)\n + (smithchart.border.width * 2));\n var svgObjectHeight = smithchart.availableSize.height - ((smithchart.elementSpacing * 4) - (legend.border.width * 2)\n + (smithchart.border.width * 2));\n var rowCount = legend.rowCount;\n var columnCount = legend.columnCount;\n var titleSize = measureText(smithchart.legendSettings['title']['text'], font);\n var maxRowWidth = 0;\n var totalRowHeight = 0;\n var curRowWidth = 0;\n var curRowHeight = 0;\n var allowItems;\n var itemsCountRow = 0;\n var length = smithchart.series.length;\n var legendBounds;\n if (smithchart.legendSettings.visible && length !== 0) {\n if (position === 'bottom' || position === 'top' || position === 'custom') {\n if ((rowCount && columnCount) && (rowCount <= columnCount)) {\n rowCount = length / columnCount;\n }\n else if (rowCount == null && columnCount != null) {\n rowCount = length / columnCount;\n }\n else if (rowCount == null && columnCount == null) {\n rowCount = 1;\n }\n if (rowCount) {\n allowItems = Math.ceil(length / rowCount);\n }\n }\n else {\n if ((rowCount && columnCount) && (rowCount <= columnCount)) {\n columnCount = length / rowCount;\n }\n else if (rowCount != null && columnCount == null) {\n columnCount = length / rowCount;\n }\n else if (rowCount == null && columnCount == null) {\n columnCount = 1;\n }\n if (columnCount) {\n allowItems = columnCount;\n }\n }\n for (var i = 0; i < length; i++) {\n this.legendSeries.push({\n text: smithchart.series[i]['name'] ? smithchart.series[i]['name'] : 'series' + i,\n seriesIndex: i,\n shape: smithchart.legendSettings.shape,\n fill: smithchart.series[i].fill || smithchart.seriesColors[i % smithchart.seriesColors.length],\n bounds: null\n });\n var legendsize = this._getLegendSize(smithchart, this.legendSeries[i]);\n legendItemWidth = Math.max(legendsize['width'], legendItemWidth);\n legendItemHeight = Math.max(legendsize['height'], legendItemHeight);\n this.legendSeries[i]['bounds'] = { width: legendItemWidth, height: legendItemHeight };\n itemsCountRow = itemsCountRow + 1;\n curRowWidth = curRowWidth + legendItemWidth + itemPadding;\n curRowHeight = Math.max(legendItemHeight, curRowHeight);\n if (position === 'top' || position === 'bottom' || position === 'custom') {\n if (curRowWidth > svgObjectWidth) {\n curRowWidth -= legendsize.width + itemPadding;\n maxRowWidth = Math.max(maxRowWidth, curRowWidth);\n curRowWidth = legendsize.width + itemPadding;\n totalRowHeight = totalRowHeight + curRowHeight + itemPadding;\n }\n }\n if (itemsCountRow === allowItems || i === length - 1) {\n maxRowWidth = Math.max(maxRowWidth, curRowWidth);\n totalRowHeight = totalRowHeight + curRowHeight + itemPadding;\n legendHeight = totalRowHeight;\n itemsCountRow = 0;\n curRowHeight = 0;\n curRowWidth = 0;\n }\n }\n width = (titleSize.width) > maxRowWidth - itemPadding ? (titleSize.width + padding * 2 + itemPadding) :\n maxRowWidth + padding * 2 - (smithchart.border.width * 2);\n height = legendHeight + smithchart.elementSpacing;\n legendBounds = { x: 0, y: 0, width: width, height: height };\n }\n this.legendActualBounds = legendBounds;\n if (legendSizeWidth != null) {\n this.legendActualBounds.width = legendSizeWidth;\n }\n if (legendSizeHeight != null) {\n this.legendActualBounds.height = legendSizeHeight;\n }\n };\n SmithchartLegend.prototype._getLegendSize = function (smithchart, series) {\n var legend = smithchart.legendSettings;\n var symbolWidth = legend.itemStyle.width;\n var symbolHeight = legend.itemStyle.height;\n var textSize = measureText(series.text, legend.textStyle);\n var width = symbolWidth + textSize.width + legend.shapePadding;\n var height = Math.max(symbolHeight, textSize.height);\n return { width: width, height: height };\n };\n // tslint:disable:max-func-body-length\n SmithchartLegend.prototype._drawLegend = function (smithchart) {\n var legend = smithchart.legendSettings;\n var legendPosition = legend.position.toLowerCase();\n var alignment = legend.alignment;\n var legendBounds = this.legendActualBounds;\n var maxWidth = 0;\n var startX;\n var startY;\n var titleFont = smithchart.title.font ? smithchart.title.font : smithchart.title.textStyle;\n var smithchartTitleHeight = measureText(smithchart.title.text, titleFont).height;\n var smithchartSubtitleHeight = measureText(smithchart.title.subtitle.text, smithchart.title.subtitle.textStyle).height;\n var elementSpacing = smithchart.elementSpacing;\n var offset = smithchartTitleHeight + smithchartSubtitleHeight + elementSpacing + smithchart.margin.top;\n var itemPadding = legend.itemPadding > 0 ? legend.itemPadding : 0;\n var svgObjectWidth = smithchart.availableSize.width;\n var svgObjectHeight = smithchart.availableSize.height;\n var legendBorder = legend.border.width;\n var legendWidth = 0;\n var titleSize = measureText(legend['title']['text'], legend.title.textStyle);\n var legendTitleHeight = titleSize.height;\n var borderSize = smithchart.border.width;\n var svgWidth = svgObjectWidth - ((borderSize * 2));\n var svgHeight = svgObjectHeight - ((borderSize * 2));\n legendBounds.height += legendTitleHeight;\n if (legendPosition !== 'custom') {\n switch (legendPosition) {\n case 'bottom':\n legendBounds.y = svgHeight - (legendBounds.height + (legendBorder) + elementSpacing);\n break;\n case 'top':\n legendBounds.y = borderSize + offset;\n break;\n case 'right':\n legendBounds.x = svgWidth - legendBounds.width - (elementSpacing * 2);\n break;\n case 'left':\n legendBounds.x = borderSize + (elementSpacing * 2);\n break;\n }\n if (legendPosition === 'left' || legendPosition === 'right') {\n switch (alignment) {\n case 'Center':\n legendBounds.y = (svgHeight / 2) - ((legendBounds.height + legendBorder * 2) / 2) + (elementSpacing / 2);\n break;\n case 'Near':\n legendBounds.y = borderSize + (elementSpacing * 2) + offset;\n break;\n case 'Far':\n legendBounds.y = svgHeight - (legendBounds.height + (legendBorder)) - (elementSpacing * 2);\n break;\n }\n }\n else {\n switch (alignment) {\n case 'Center':\n legendBounds.x = (svgWidth / 2) - ((legendBounds.width + legendBorder * 2) / 2) + (elementSpacing / 2);\n break;\n case 'Near':\n legendBounds.x = borderSize + (elementSpacing * 2);\n break;\n case 'Far':\n legendBounds.x = svgWidth - (legendBounds.width + (legendBorder)) - (elementSpacing * 2);\n break;\n }\n }\n }\n else {\n legendBounds.y = (legend.location.y < svgHeight) ? legend.location.y : 0;\n legendBounds.x = (legend.location.x < svgWidth) ? legend.location.x : 0;\n }\n if (legendPosition === 'bottom' || legendPosition === 'top') {\n for (var i = 0; i < this.legendSeries.length; i++) {\n legendWidth += this.legendSeries[i].bounds.width + itemPadding;\n if (legendWidth > svgWidth) {\n legendBounds.x = (svgWidth / 2) - ((legendBounds.width + legendBorder * 2) / 2) + (elementSpacing / 2);\n break;\n }\n }\n }\n var gLegendEle = smithchart.renderer.createGroup({ 'id': smithchart.element.id + '_legend_group' });\n smithchart.svgObject.appendChild(gLegendEle);\n this.legendItemGroup = smithchart.renderer.createGroup({ 'id': smithchart.element.id + 'legendItem_Group' });\n var currentX = startX = elementSpacing;\n var currentY = startY = elementSpacing;\n if (legend.title.text !== '' && legend.title.visible) {\n gLegendEle.appendChild(this.drawLegendTitle(smithchart, legend, legendBounds, gLegendEle));\n currentY = startY = elementSpacing + legendTitleHeight;\n }\n for (var k = 0; k < this.legendSeries.length; k++) {\n if ((legend.rowCount < legend.columnCount || legend.rowCount === legend.columnCount) &&\n (legendPosition === 'top' || legendPosition === 'bottom' || legendPosition === 'custom')) {\n if ((currentX + this.legendSeries[k]['bounds'].width) > legendBounds.width + startX) {\n currentX = elementSpacing;\n currentY += this.legendSeries[k]['bounds'].height + itemPadding;\n }\n this.legendGroup = this.drawLegendItem(smithchart, legend, this.legendSeries[k], k, currentX, (currentY), legendBounds);\n gLegendEle.appendChild(this.legendGroup);\n currentX += this.legendSeries[k]['bounds'].width + itemPadding;\n }\n else {\n if (((currentY + this.legendSeries[k]['bounds'].height + itemPadding) +\n legendTitleHeight + borderSize > legendBounds.height + startY)) {\n currentY = startY;\n currentX += maxWidth + (itemPadding);\n }\n this.legendGroup = this.drawLegendItem(smithchart, legend, this.legendSeries[k], k, (currentX), (currentY), legendBounds);\n gLegendEle.appendChild(this.legendGroup);\n currentY += this.legendSeries[k]['bounds'].height + itemPadding;\n maxWidth = Math.max(maxWidth, this.legendSeries[k]['bounds'].width);\n }\n }\n gLegendEle.setAttribute('transform', 'translate(' + legendBounds.x.toString() + ',' + legendBounds.y.toString() + ')');\n this.drawLegendBorder(gLegendEle, smithchart, legend, legendBounds);\n };\n SmithchartLegend.prototype.drawLegendBorder = function (gLegendEle, smithchart, legend, legendBounds) {\n var borderRect = new RectOption(smithchart.element.id + '_svg' + '_legendRect', 'none', legend.border, 1, new SmithchartRect(0, 0, legendBounds.width, legendBounds.height));\n gLegendEle.appendChild(smithchart.renderer.drawRectangle(borderRect));\n };\n SmithchartLegend.prototype.drawLegendTitle = function (smithchart, legend, legendBounds, gLegendEle) {\n var elementSpacing = smithchart.elementSpacing;\n var titleSize = measureText(legend.title.text, legend.title.textStyle);\n var titleWidth = titleSize.width;\n var titleHeight = titleSize.height;\n var textAlignment = legend.title.textAlignment;\n var startX = 0;\n var legendBoundsWidth = legendBounds.width;\n var startY = elementSpacing + (titleHeight / 2);\n switch (textAlignment) {\n case 'Far':\n startX = legendBoundsWidth - titleWidth - startX;\n break;\n case 'Center':\n startX = legendBoundsWidth / 2 - (titleWidth) / 2;\n break;\n }\n if (startX < 0) {\n startX = 0;\n legendBoundsWidth = titleWidth;\n }\n if (legendBoundsWidth < titleWidth + startX) {\n legendBoundsWidth = titleWidth + startX;\n }\n var options = new TextOption(smithchart.element.id + '_LegendTitleText', startX, startY, 'start', legend.title.text);\n var element = renderTextElement(options, legend.title.textStyle, smithchart.themeStyle.legendLabel, gLegendEle);\n element.setAttribute('aria-label', legend.title.description || legend.title.text);\n return element;\n };\n SmithchartLegend.prototype.drawLegendItem = function (smithchart, legend, legendSeries, k, x, y, legendBounds) {\n var location;\n var radius;\n var symbol = legend.itemStyle;\n var itemPadding = legend.itemPadding;\n var textHeight;\n radius = Math.sqrt(symbol['width'] * symbol['width'] + symbol['height'] * symbol['height']) / 2;\n textHeight = measureText(legendSeries['text'], legend.textStyle).height;\n location = {\n x: x + symbol['width'] / 2,\n y: (y + (textHeight > symbol['height'] ? textHeight : symbol['height']) / 2)\n };\n var legendGroup = smithchart.renderer.createGroup({ id: smithchart.element.id + '_svg' + '_Legend' + k.toString() });\n legendGroup['style']['cursor'] = legend.toggleVisibility ? 'pointer' : 'default';\n var legendEventArgs = { text: legendSeries['text'], fill: legendSeries['fill'],\n shape: legendSeries['shape'], name: 'legendRender', cancel: false };\n smithchart.trigger('legendRender', legendEventArgs);\n var shape = this.drawLegendShape(smithchart, legendSeries, location.x, location.y, k, legend, legendEventArgs);\n legendGroup.appendChild(shape);\n var options = new TextOption(smithchart.element.id + '_LegendItemText' + k.toString(), location.x + symbol['width'] / 2 + legend.shapePadding, location.y + textHeight / 4, 'start', legendEventArgs.text);\n var element = renderTextElement(options, legend.textStyle, smithchart.themeStyle.legendLabel, legendGroup);\n element.setAttribute('aria-label', legend.description || 'Click to show or hide the ' + options.text + ' series');\n legendGroup.appendChild(element);\n this.legendItemGroup.appendChild(legendGroup);\n return this.legendItemGroup;\n };\n SmithchartLegend.prototype.drawLegendShape = function (smithchart, legendSeries, locX, locY, index, legend, legendEventArgs) {\n var element;\n var circleOptions;\n var pathOptions;\n var path;\n var symbol = legend.itemStyle;\n var width = symbol['width'];\n var height = symbol['height'];\n var x = locX + (-width / 2);\n var y = locY + (-height / 2);\n var border = { color: symbol.border.color, width: symbol.border.width };\n var opacity = 1;\n var fill = (smithchart.series[index].visibility === 'visible') ? legendEventArgs.fill : 'grey';\n var shape = legendEventArgs.shape.toLowerCase();\n var radius = Math.sqrt(height * height + width * width) / 2;\n switch (shape) {\n case 'circle':\n circleOptions = new CircleOption(smithchart.element.id + '_svg' + '_LegendItemShape' + index.toString(), fill, border, opacity, locX, locY, radius, null);\n element = smithchart.renderer.drawCircle(circleOptions);\n break;\n case 'rectangle':\n path = 'M' + ' ' + x + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + ((width / 2) + locX) + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (locY + (-height / 2)) + ' z';\n pathOptions = new PathOption(smithchart.element.id + '_svg' + '_LegendItemShape' + index.toString(), fill, border.width, border.color, 1, '', path);\n element = smithchart.renderer.drawPath(pathOptions);\n break;\n case 'diamond':\n path = 'M' + ' ' + x + ' ' + locY + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + ((width / 2) + locX) + ' ' + locY + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + locY + ' z';\n pathOptions = new PathOption(smithchart.element.id + '_svg' + '_LegendItemShape' + index.toString(), fill, border.width, border.color, 1, '', path);\n element = smithchart.renderer.drawPath(pathOptions);\n break;\n case 'pentagon':\n var eq = 72;\n for (var j = 0; j <= 5; j++) {\n var xValue = radius * Math.cos((Math.PI / 180) * (j * eq));\n var yValue = radius * Math.sin((Math.PI / 180) * (j * eq));\n if (j === 0) {\n path = 'M' + ' ' + (xValue + locX) + ' ' + (locY + yValue) + ' ';\n }\n else {\n path = path.concat('L' + ' ' + (locX + xValue) + ' ' + (locY + yValue) + ' ');\n }\n }\n path = path.concat('Z');\n pathOptions = new PathOption(smithchart.element.id + '_svg' + '_LegendItemShape' + index.toString(), fill, border.width, border.color, 1, '', path);\n element = smithchart.renderer.drawPath(pathOptions);\n break;\n case 'triangle':\n path = 'M' + ' ' + x + ' ' + ((height / 2) + locY) + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (locY + (height / 2)) + ' Z';\n pathOptions = new PathOption(smithchart.element.id + '_svg' + '_LegendItemShape' + index.toString(), fill, border.width, border.color, 1, '', path);\n element = smithchart.renderer.drawPath(pathOptions);\n break;\n }\n return element;\n };\n /**\n * Get module name.\n */\n SmithchartLegend.prototype.getModuleName = function () {\n return 'SmithchartLegend';\n };\n /**\n * To destroy the legend.\n * @return {void}\n * @private\n */\n SmithchartLegend.prototype.destroy = function (smithchart) {\n /**\n * Destroy method performed here\n */\n };\n return SmithchartLegend;\n}());\nexport { SmithchartLegend };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/**\n * Sparkline base API Class declarations.\n */\nimport { Property, ChildProperty, Complex } from '@syncfusion/ej2-base';\n/**\n * Configures the borders in the Sparkline.\n */\nvar SparklineBorder = /** @class */ (function (_super) {\n __extends(SparklineBorder, _super);\n function SparklineBorder() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], SparklineBorder.prototype, \"color\", void 0);\n __decorate([\n Property(0)\n ], SparklineBorder.prototype, \"width\", void 0);\n return SparklineBorder;\n}(ChildProperty));\nexport { SparklineBorder };\n/**\n * Configures the fonts in sparklines.\n */\nvar SparklineFont = /** @class */ (function (_super) {\n __extends(SparklineFont, _super);\n function SparklineFont() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], SparklineFont.prototype, \"size\", void 0);\n __decorate([\n Property(null)\n ], SparklineFont.prototype, \"color\", void 0);\n __decorate([\n Property('Roboto, Segoe UI, Noto, Sans-serif')\n ], SparklineFont.prototype, \"fontFamily\", void 0);\n __decorate([\n Property(null)\n ], SparklineFont.prototype, \"fontWeight\", void 0);\n __decorate([\n Property(null)\n ], SparklineFont.prototype, \"fontStyle\", void 0);\n __decorate([\n Property(1)\n ], SparklineFont.prototype, \"opacity\", void 0);\n return SparklineFont;\n}(ChildProperty));\nexport { SparklineFont };\n/**\n * To configure the tracker line settings.\n */\nvar TrackLineSettings = /** @class */ (function (_super) {\n __extends(TrackLineSettings, _super);\n function TrackLineSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], TrackLineSettings.prototype, \"visible\", void 0);\n __decorate([\n Property(null)\n ], TrackLineSettings.prototype, \"color\", void 0);\n __decorate([\n Property(1)\n ], TrackLineSettings.prototype, \"width\", void 0);\n return TrackLineSettings;\n}(ChildProperty));\nexport { TrackLineSettings };\n/**\n * To configure the tooltip settings for sparkline.\n */\nvar SparklineTooltipSettings = /** @class */ (function (_super) {\n __extends(SparklineTooltipSettings, _super);\n function SparklineTooltipSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], SparklineTooltipSettings.prototype, \"visible\", void 0);\n __decorate([\n Property('')\n ], SparklineTooltipSettings.prototype, \"fill\", void 0);\n __decorate([\n Property('')\n ], SparklineTooltipSettings.prototype, \"template\", void 0);\n __decorate([\n Property('')\n ], SparklineTooltipSettings.prototype, \"format\", void 0);\n __decorate([\n Complex({ color: '#cccccc', width: 0.5 }, SparklineBorder)\n ], SparklineTooltipSettings.prototype, \"border\", void 0);\n __decorate([\n Complex({ size: '13px', fontWeight: 'Normal', fontStyle: 'Normal', fontFamily: 'Roboto, Segoe UI, Noto, Sans-serif' }, SparklineFont)\n ], SparklineTooltipSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Complex({}, TrackLineSettings)\n ], SparklineTooltipSettings.prototype, \"trackLineSettings\", void 0);\n return SparklineTooltipSettings;\n}(ChildProperty));\nexport { SparklineTooltipSettings };\n/**\n * To configure the sparkline container area customization\n */\nvar ContainerArea = /** @class */ (function (_super) {\n __extends(ContainerArea, _super);\n function ContainerArea() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('transparent')\n ], ContainerArea.prototype, \"background\", void 0);\n __decorate([\n Complex({}, SparklineBorder)\n ], ContainerArea.prototype, \"border\", void 0);\n return ContainerArea;\n}(ChildProperty));\nexport { ContainerArea };\n/**\n * To configure axis line settings\n */\nvar LineSettings = /** @class */ (function (_super) {\n __extends(LineSettings, _super);\n function LineSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], LineSettings.prototype, \"visible\", void 0);\n __decorate([\n Property(null)\n ], LineSettings.prototype, \"color\", void 0);\n __decorate([\n Property('')\n ], LineSettings.prototype, \"dashArray\", void 0);\n __decorate([\n Property(1)\n ], LineSettings.prototype, \"width\", void 0);\n __decorate([\n Property(1)\n ], LineSettings.prototype, \"opacity\", void 0);\n return LineSettings;\n}(ChildProperty));\nexport { LineSettings };\n/**\n * To configure the sparkline rangeband\n */\nvar RangeBandSettings = /** @class */ (function (_super) {\n __extends(RangeBandSettings, _super);\n function RangeBandSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], RangeBandSettings.prototype, \"startRange\", void 0);\n __decorate([\n Property(null)\n ], RangeBandSettings.prototype, \"endRange\", void 0);\n __decorate([\n Property(null)\n ], RangeBandSettings.prototype, \"color\", void 0);\n __decorate([\n Property(null)\n ], RangeBandSettings.prototype, \"opacity\", void 0);\n return RangeBandSettings;\n}(ChildProperty));\nexport { RangeBandSettings };\n/**\n * To configure the sparkline axis\n */\nvar AxisSettings = /** @class */ (function (_super) {\n __extends(AxisSettings, _super);\n function AxisSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], AxisSettings.prototype, \"minX\", void 0);\n __decorate([\n Property(null)\n ], AxisSettings.prototype, \"maxX\", void 0);\n __decorate([\n Property(null)\n ], AxisSettings.prototype, \"minY\", void 0);\n __decorate([\n Property(null)\n ], AxisSettings.prototype, \"maxY\", void 0);\n __decorate([\n Property(0)\n ], AxisSettings.prototype, \"value\", void 0);\n __decorate([\n Complex({}, LineSettings)\n ], AxisSettings.prototype, \"lineSettings\", void 0);\n return AxisSettings;\n}(ChildProperty));\nexport { AxisSettings };\n/**\n * To configure the sparkline padding.\n */\nvar Padding = /** @class */ (function (_super) {\n __extends(Padding, _super);\n function Padding() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(5)\n ], Padding.prototype, \"left\", void 0);\n __decorate([\n Property(5)\n ], Padding.prototype, \"right\", void 0);\n __decorate([\n Property(5)\n ], Padding.prototype, \"bottom\", void 0);\n __decorate([\n Property(5)\n ], Padding.prototype, \"top\", void 0);\n return Padding;\n}(ChildProperty));\nexport { Padding };\n/**\n * To configure the sparkline marker options.\n */\nvar SparklineMarkerSettings = /** @class */ (function (_super) {\n __extends(SparklineMarkerSettings, _super);\n function SparklineMarkerSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property([])\n ], SparklineMarkerSettings.prototype, \"visible\", void 0);\n __decorate([\n Property(1)\n ], SparklineMarkerSettings.prototype, \"opacity\", void 0);\n __decorate([\n Property(5)\n ], SparklineMarkerSettings.prototype, \"size\", void 0);\n __decorate([\n Property('#00bdae')\n ], SparklineMarkerSettings.prototype, \"fill\", void 0);\n __decorate([\n Complex({ width: 1 }, SparklineBorder)\n ], SparklineMarkerSettings.prototype, \"border\", void 0);\n return SparklineMarkerSettings;\n}(ChildProperty));\nexport { SparklineMarkerSettings };\n/**\n * To configure the datalabel offset\n */\nvar LabelOffset = /** @class */ (function (_super) {\n __extends(LabelOffset, _super);\n function LabelOffset() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0)\n ], LabelOffset.prototype, \"x\", void 0);\n __decorate([\n Property(0)\n ], LabelOffset.prototype, \"y\", void 0);\n return LabelOffset;\n}(ChildProperty));\nexport { LabelOffset };\n/**\n * To configure the sparkline dataLabel options.\n */\nvar SparklineDataLabelSettings = /** @class */ (function (_super) {\n __extends(SparklineDataLabelSettings, _super);\n function SparklineDataLabelSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property([])\n ], SparklineDataLabelSettings.prototype, \"visible\", void 0);\n __decorate([\n Property(1)\n ], SparklineDataLabelSettings.prototype, \"opacity\", void 0);\n __decorate([\n Property('transparent')\n ], SparklineDataLabelSettings.prototype, \"fill\", void 0);\n __decorate([\n Property('')\n ], SparklineDataLabelSettings.prototype, \"format\", void 0);\n __decorate([\n Complex({ color: 'transparent', width: 0 }, SparklineBorder)\n ], SparklineDataLabelSettings.prototype, \"border\", void 0);\n __decorate([\n Complex({ size: '14px', fontWeight: 'Medium', fontStyle: 'Medium', fontFamily: 'Roboto, Segoe UI, Noto, Sans-serif' }, SparklineFont)\n ], SparklineDataLabelSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Complex({}, LabelOffset)\n ], SparklineDataLabelSettings.prototype, \"offset\", void 0);\n return SparklineDataLabelSettings;\n}(ChildProperty));\nexport { SparklineDataLabelSettings };\n","import { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { PathOption, drawPath, drawRectangle, RectOption, Rect, CircleOption, drawCircle } from '../utils/helper';\nimport { measureText, renderTextElement, TextOption } from '../utils/helper';\n/**\n * Sparkline rendering calculation file\n */\nvar SparklineRenderer = /** @class */ (function () {\n /**\n * Sparkline data calculations\n * @param sparkline\n */\n function SparklineRenderer(sparkline) {\n this.sparkline = sparkline;\n }\n /**\n * To process the sparkline data\n */\n SparklineRenderer.prototype.processData = function (data) {\n if (data === void 0) { data = this.sparkline.dataSource; }\n if (!this.sparkline.dataSource.length) {\n return;\n }\n else if (!isNaN(data[0]) || this.sparkline.valueType === 'Numeric') {\n this.sparkline.sparklineData = data; // extend([], data) as Object[];\n }\n else {\n this['process' + this.sparkline.valueType]();\n }\n this.axisCalculation();\n };\n /**\n * To process sparkline category data.\n */\n SparklineRenderer.prototype.processCategory = function (data, x, y) {\n var _this = this;\n if (data === void 0) { data = this.sparkline.dataSource; }\n if (x === void 0) { x = this.sparkline.xName; }\n if (y === void 0) { y = this.sparkline.yName; }\n var temp = [];\n var xValues = [];\n data.forEach(function (value, index) {\n if (xValues.indexOf(value[x]) === -1) {\n xValues.push(value[x]);\n }\n var currentData = {};\n currentData[_this.sparkline.xName] = xValues.indexOf(value[x]);\n currentData[_this.sparkline.yName] = value[y];\n temp.push(currentData);\n });\n this.sparkline.sparklineData = temp;\n };\n /**\n * To process sparkline DateTime data.\n */\n SparklineRenderer.prototype.processDateTime = function (data, x, y) {\n if (data === void 0) { data = this.sparkline.dataSource; }\n if (x === void 0) { x = this.sparkline.xName; }\n if (y === void 0) { y = this.sparkline.yName; }\n var temp = [];\n data.forEach(function (value, index) {\n var currentData = {};\n currentData[x] = value[x].getTime();\n currentData[y] = value[y];\n temp.push(currentData);\n });\n this.sparkline.sparklineData = temp;\n };\n /**\n * To render sparkline series.\n * @private\n */\n SparklineRenderer.prototype.renderSeries = function () {\n var spark = this.sparkline;\n this.clipId = spark.element.id + '_sparkline_clip_path';\n this.drawAxis();\n var args = {\n name: 'seriesRendering', cancel: false, lineWidth: spark.lineWidth, border: spark.border, fill: spark.fill, sparkline: spark\n };\n spark.trigger(args.name, args);\n if (!this.visiblePoints || args.cancel) {\n return;\n }\n if (spark.type !== 'Pie' && spark.type !== 'WinLoss' && spark.rangeBandSettings.length) {\n var group = this.sparkline.renderer.createGroup({ id: this.sparkline.element.id + '_sparkline_rangeband_g' });\n for (var i = 0; i < spark.rangeBandSettings.length; i++) {\n if ((spark.axisSettings.minY <= spark.rangeBandSettings[i].startRange) ||\n (spark.axisSettings.maxY >= spark.rangeBandSettings[i].endRange)) {\n this.rangeBand(spark.rangeBandSettings[i], group, i);\n }\n }\n this.sparkline.svgObject.appendChild(group);\n }\n this['render' + spark.type](this.visiblePoints, args);\n this.renderMarker(this.visiblePoints);\n this.renderLabel(this.visiblePoints);\n };\n /**\n * To render a range band\n */\n SparklineRenderer.prototype.rangeBand = function (rangeBandSettings, group, index) {\n var model = this.sparkline;\n var height = (model.availableSize.height) - model.padding.top * 2;\n var width = (model.availableSize.width) - model.padding.left * 2;\n var stValue = rangeBandSettings.startRange;\n var edValue = rangeBandSettings.endRange;\n var stHeight = (height - ((height / this.unitY) * (stValue - this.min))) + model.padding.top;\n var edHeight = (height - ((height / this.unitY) * (edValue - this.min))) + model.padding.top;\n if (edHeight > (height + model.padding.top)) {\n edHeight = (height + model.padding.top);\n }\n else if (edHeight < (0 + model.padding.top)) {\n edHeight = (0 + model.padding.top);\n }\n if (stHeight > (height + model.padding.top)) {\n stHeight = (height + model.padding.top);\n }\n else if (stHeight < (0 + model.padding.top)) {\n stHeight = (0 + model.padding.top);\n }\n var path = 'M ' + (model.padding.left) + ' ' + stHeight + ' L ' + (width + (model.padding.left)) + ' ' + stHeight +\n ' L ' + (width + (model.padding.left)) + ' ' + edHeight + ' L ' + (model.padding.left) + ' ' + edHeight + ' Z ';\n var pathOption = {\n 'id': model.element.id + '_rangeBand_' + index,\n 'fill': rangeBandSettings.color,\n 'opacity': rangeBandSettings.opacity,\n 'stroke': 'transparent',\n 'stroke-width': model.lineWidth,\n 'd': path,\n 'stroke-dasharray': ''\n };\n drawPath(this.sparkline, pathOption, group);\n };\n /**\n * To render line series\n */\n SparklineRenderer.prototype.renderLine = function (points, args) {\n var spark = this.sparkline;\n var g = this.sparkline.renderer.createGroup({ id: spark.element.id + '_sparkline_g',\n 'clip-path': 'url(#' + this.clipId + ')' });\n var pathOption = new PathOption(spark.element.id + '_sparkline_line', 'transparent', args.lineWidth, args.fill, spark.opacity);\n var d = '';\n for (var i = 0, len = points.length; i < len; i++) {\n if (i === 0) {\n d = 'M ' + points[0].x + ' ' + points[i].y + ' ';\n }\n d += 'L ' + points[i].x + ' ' + points[i].y + ' ';\n }\n pathOption.d = d;\n drawPath(this.sparkline, pathOption, g);\n this.sparkline.svgObject.appendChild(g);\n };\n /**\n * To render pie series\n */\n /* tslint:disable:no-string-literal */\n SparklineRenderer.prototype.renderPie = function (points, args) {\n var spark = this.sparkline;\n var height = spark.availableSize.height - (spark.padding.top + spark.padding.bottom);\n var width = spark.availableSize.width - (spark.padding.left + spark.padding.right);\n var area = (height <= width) ? height / 2 : width / 2;\n var X = spark.availableSize.width / 2; // center position of x\n var Y = spark.availableSize.height / 2; // center position of y\n var deg = 0;\n var stRad;\n var edRad;\n var stroke = args.border.color;\n var opacity = spark.opacity;\n var strokeWidth = args.border.width;\n var colors = (spark.palette.length) ? spark.palette : ['#00bdae', '#404041', '#357cd2', '#e56590', '#f8b883',\n '#70ad47', '#dd8abd', '#7f84e8', '#7bb4eb', '#ea7a57'];\n var group = this.sparkline.renderer.createGroup({ id: spark.element.id + '_sparkline_g' });\n var low;\n var high;\n var locations = extend([], [], points);\n if (spark.highPointColor || spark.lowPointColor) {\n var pointsYvalues = locations.map(function (a) { return a.yVal; });\n low = Math.min.apply(null, pointsYvalues);\n high = Math.max.apply(null, pointsYvalues);\n }\n this.negativePointIndexes = [];\n for (var i = 0, stDeg = 90, edDeg = void 0, flag = void 0; i < points.length; i++) {\n stDeg += deg;\n deg = points[i]['degree'];\n edDeg = stDeg + deg;\n stRad = (stDeg - 90) * Math.PI / 180.0;\n edRad = (edDeg - 90) * Math.PI / 180.0;\n points[i]['stAng'] = stRad;\n points[i]['endAng'] = edRad;\n flag = (deg < 180) ? '0' : '1';\n var temp = points[i]['coordinates'] = {\n sX: X + (area * Math.cos(stRad)), sY: Y +\n (area * Math.sin(stRad)), eX: X + (area * Math.cos(edRad)), eY: Y + (area * Math.sin(edRad))\n };\n var pathArc = 'M ' + X + ' ' + Y + ' L ' + temp['eX'] + ' ' + temp['eY'] + ' A ' + area + ' ' +\n area + ' 0 ' + flag + ',0 ' + temp['sX'] + ' ' + temp['sY'] + ' Z';\n var pathOption = {\n 'id': spark.element.id + '_sparkline_pie_' + i,\n 'opacity': opacity,\n 'fill': colors[i % colors.length],\n 'stroke': stroke,\n 'stroke-width': strokeWidth,\n 'd': pathArc,\n 'stroke-dasharray': ''\n };\n this.getPieSpecialPoint(points[i], spark, pathOption, i, high, low, points.length);\n var pointArgs = this.triggerPointRender('pointRendering', i, pathOption.fill, { color: stroke, width: strokeWidth });\n pathOption.fill = pointArgs.fill;\n pathOption.stroke = pointArgs.border.color;\n pathOption['stroke-width'] = pointArgs.border.width;\n if (!pointArgs.cancel) {\n var element = drawPath(this.sparkline, pathOption, group);\n element.setAttribute('aria-label', spark.dataSource[i][spark.xName] + ' : ' + points[i].yVal);\n }\n var diffRadian = edRad - stRad;\n var mid = {\n x: X + ((area / 2) * Math.cos(stRad + (diffRadian / 2))),\n y: Y + ((area / 2) * Math.sin(stRad + (diffRadian / 2)))\n };\n points[i].location.x = mid.x;\n points[i].location.y = mid.y;\n }\n this.sparkline.svgObject.appendChild(group);\n };\n /**\n * To get special point color and option for Pie series.\n */\n SparklineRenderer.prototype.getPieSpecialPoint = function (temp, spark, option, i, high, low, length) {\n if (temp.yVal < 0 && spark.negativePointColor) {\n option.fill = spark.negativePointColor;\n this.negativePointIndexes.push(i);\n }\n if (i === 0 && spark.startPointColor) {\n option.fill = spark.startPointColor;\n this.startPointIndex = i;\n }\n else if ((i === (length - 1)) && spark.endPointColor) {\n option.fill = spark.endPointColor;\n this.endPointIndex = i;\n }\n if (temp.yVal === high && spark.highPointColor) {\n option.fill = spark.highPointColor;\n this.highPointIndex = i;\n }\n else if (temp.yVal === low && spark.lowPointColor) {\n option.fill = spark.lowPointColor;\n this.lowPointIndex = i;\n }\n };\n /**\n * To render area series\n */\n SparklineRenderer.prototype.renderArea = function (points, args) {\n var spark = this.sparkline;\n var group = this.sparkline.renderer.createGroup({ id: spark.element.id + '_sparkline_g',\n 'clip-path': 'url(#' + this.clipId + ')' });\n var pathOption = new PathOption(spark.element.id + '_sparkline_area', args.fill, 0, 'transparent', spark.opacity);\n var d = '';\n var str = '';\n for (var i = 0, len = points.length; i < len; i++) {\n if (i !== 0) {\n str += 'L ' + points[i].x + ' ' + points[i].y + ' ';\n }\n else {\n d = 'M ' + points[i].x + ' ' + this.axisHeight + ' ';\n str = 'M ' + points[i].x + ' ' + points[i].y + ' ';\n }\n d += 'L ' + points[i].x + ' ' + points[i].y + ' ';\n if (i === (len - 1)) {\n d += 'L ' + points[i].x + ' ' + this.axisHeight + ' Z';\n }\n }\n pathOption.d = d;\n drawPath(this.sparkline, pathOption, group);\n pathOption = new PathOption(spark.element.id + '_sparkline_area_str', 'transparent', args.border.width, args.border.color, spark.opacity, '', str);\n drawPath(this.sparkline, pathOption, group);\n this.sparkline.svgObject.appendChild(group);\n };\n /**\n * To render column series\n */\n SparklineRenderer.prototype.renderColumn = function (points, args) {\n var spark = this.sparkline;\n var locations = extend([], [], points);\n var group = this.sparkline.renderer.createGroup({ id: spark.element.id + '_sparkline_g',\n 'clip-path': 'url(#' + this.clipId + ')' });\n var lowPos;\n var highPos;\n if (this.sparkline.highPointColor || this.sparkline.lowPointColor) {\n var pointsYPos = locations.map(function (a) { return a.markerPosition; });\n highPos = Math.min.apply(null, pointsYPos);\n lowPos = Math.max.apply(null, pointsYPos);\n }\n var id = spark.element.id + '_sparkline_column_';\n var rectOptions = new RectOption(id, '', args.border, spark.opacity, null);\n var paletteLength = spark.palette.length;\n var temp;\n var len = points.length;\n this.negativePointIndexes = [];\n for (var i = 0; i < len; i++) {\n temp = points[i];\n rectOptions.id = id + i;\n rectOptions.fill = (paletteLength) ? spark.palette[i % paletteLength] : args.fill;\n rectOptions.rect = new Rect(temp.x, temp.y, temp.width, temp.height);\n this.getSpecialPoint(true, temp, spark, rectOptions, i, highPos, lowPos, len);\n temp.location.y = (temp.markerPosition <= this.axisHeight) ? temp.y : (temp.y + temp.height);\n temp.location.x = temp.x + (temp.width / 2);\n rectOptions.stroke = args.border.color ? (args.border.color) : rectOptions.fill;\n var pointArgs = this.triggerPointRender('pointRendering', i, rectOptions.fill, { color: rectOptions.stroke, width: args.border.width });\n rectOptions.fill = pointArgs.fill;\n rectOptions.stroke = pointArgs.border.color;\n rectOptions['stroke-width'] = pointArgs.border.width;\n if (!pointArgs.cancel) {\n var element = drawRectangle(spark, rectOptions, group);\n element.setAttribute('aria-label', spark.dataSource[i][spark.xName] + ' : ' + points[i].yVal);\n }\n }\n this.sparkline.svgObject.appendChild(group);\n };\n /**\n * To render WinLoss series\n */\n SparklineRenderer.prototype.renderWinLoss = function (points, args) {\n var spark = this.sparkline;\n var group = this.sparkline.renderer.createGroup({ id: spark.element.id + '_sparkline_g',\n 'clip-path': 'url(#' + this.clipId + ')' });\n var id = spark.element.id + '_sparkline_winloss_';\n var options = new RectOption(id, '', args.border, spark.opacity, null);\n var temp;\n var len = points.length;\n var paletteLength = spark.palette.length;\n for (var i = 0; i < len; i++) {\n temp = points[i];\n options.id = id + i;\n options.fill = (paletteLength) ? spark.palette[i % paletteLength] : ((temp.yVal === this.axisValue) ?\n (this.sparkline.tiePointColor || '#a216f3') : ((temp.yVal > this.axisValue) ? args.fill :\n (spark.negativePointColor || '#e20f07')));\n options.stroke = (args.border.color) ? (args.border.color) : options.fill;\n options.rect = new Rect(temp.x, temp.y, temp.width, temp.height);\n temp.location.x = temp.x + (temp.width / 2);\n temp.location.y = (temp.yVal >= this.axisValue) ? (temp.y) : (temp.y + temp.height);\n var pointArgs = this.triggerPointRender('pointRendering', i, options.fill, { color: options.stroke, width: args.border.width });\n options.fill = pointArgs.fill;\n options.stroke = pointArgs.border.color;\n options['stroke-width'] = pointArgs.border.width;\n if (!pointArgs.cancel) {\n var element = drawRectangle(spark, options, group);\n element.setAttribute('aria-label', spark.dataSource[i][spark.xName] + ' : ' + points[i].yVal);\n }\n }\n this.sparkline.svgObject.appendChild(group);\n };\n SparklineRenderer.prototype.renderMarker = function (points) {\n var spark = this.sparkline;\n var marker = spark.markerSettings;\n if ((spark.type === 'Pie' || spark.type === 'WinLoss' || !marker.visible.length)) {\n return;\n }\n var locations = extend([], [], points);\n var group = this.sparkline.renderer.createGroup({\n id: spark.element.id + '_sparkline_marker_g',\n 'clip-path': 'url(#' + this.clipId + ')'\n });\n var temp;\n var id = spark.element.id + '_sparkline_marker_';\n var option = new CircleOption('', marker.fill, marker.border, marker.opacity, 0, 0, marker.size / 2, '');\n var highPos;\n var lowPos;\n var visible = marker.visible.join();\n if ((visible.toLowerCase().indexOf('high') > -1) || (visible.toLowerCase().indexOf('low') > -1)) {\n var pointsYPos = locations.map(function (a) { return a.markerPosition; });\n highPos = Math.min.apply(null, pointsYPos);\n lowPos = Math.max.apply(null, pointsYPos);\n }\n this.negativePointIndexes = [];\n for (var i = 0, length_1 = points.length; i < length_1; i++) {\n temp = points[i];\n option.id = id + i;\n option.cx = temp.location.x;\n option.cy = temp.location.y;\n option.fill = marker.fill;\n var render = (visible.toLowerCase().indexOf('all') > -1);\n render = this.getSpecialPoint(render, temp, spark, option, i, highPos, lowPos, length_1, visible.toLowerCase());\n option.stroke = marker.border.color || option.fill;\n var markerArgs = {\n name: 'markerRendering', cancel: false, border: { color: option.stroke, width: marker.border.width }, fill: option.fill,\n pointIndex: i, sparkline: this.sparkline, x: option.cx, y: option.cy, size: marker.size\n };\n this.sparkline.trigger(markerArgs.name, markerArgs);\n if (render && !markerArgs.cancel) {\n option.fill = markerArgs.fill;\n option.stroke = markerArgs.border.color;\n option['stroke-width'] = markerArgs.border.width;\n option.r = markerArgs.size / 2;\n var element = drawCircle(spark, option, group);\n element.setAttribute('aria-label', spark.dataSource[i][spark.xName] + ' : ' + points[i].yVal);\n }\n }\n this.sparkline.svgObject.appendChild(group);\n };\n /**\n * To get special point color and option.\n */\n SparklineRenderer.prototype.getSpecialPoint = function (render, temp, spark, option, i, highPos, lowPos, length, visible) {\n if (visible === void 0) { visible = ''; }\n if (temp.markerPosition > this.axisHeight) {\n option.fill = spark.negativePointColor || option.fill;\n this.negativePointIndexes.push(i);\n render = render || (visible.indexOf('negative') > -1);\n }\n if (i === 0) {\n option.fill = spark.startPointColor || option.fill;\n this.startPointIndex = i;\n render = render || (visible.indexOf('start') > -1);\n }\n else if ((i === (length - 1))) {\n option.fill = spark.endPointColor || option.fill;\n this.endPointIndex = i;\n render = render || (visible.indexOf('end') > -1);\n }\n if (temp.markerPosition === highPos) {\n option.fill = spark.highPointColor || option.fill;\n this.highPointIndex = i;\n render = render || (visible.indexOf('high') > -1);\n }\n else if (temp.markerPosition === lowPos) {\n option.fill = spark.lowPointColor || option.fill;\n this.lowPointIndex = i;\n render = render || (visible.indexOf('low') > -1);\n }\n return render;\n };\n /**\n * To render data label for sparkline.\n */\n SparklineRenderer.prototype.renderLabel = function (points) {\n var spark = this.sparkline;\n var dataLabel = spark.dataLabelSettings;\n var color = (spark.theme === 'Highcontrast') ? '#FFFFFF' : '#424242';\n color = (dataLabel.textStyle.color) ? dataLabel.textStyle.color : color;\n if ((spark.type === 'WinLoss' || !dataLabel.visible.length)) {\n return;\n }\n var locations = extend([], [], points);\n var id = spark.element.id + '_sparkline_label_';\n var group = this.sparkline.renderer.createGroup({ id: spark.element.id + '_sparkline_label_g',\n style: 'pointer-events: none;', 'clip-path': 'url(#' + this.clipId + ')' });\n var g;\n var temp;\n var textId = id + 'text_';\n var rectId = id + 'rect_';\n var option = new TextOption('', 0, 0, 'middle', '', 'middle');\n var labelStyle = dataLabel.textStyle;\n var pointsYPos = locations.map(function (a) { return a.markerPosition; });\n var highPos = Math.min.apply(null, pointsYPos);\n var lowPos = Math.max.apply(null, pointsYPos);\n var space = 1;\n var padding = (dataLabel.fill !== 'transparent' || dataLabel.border.width) ? 2 : 0;\n var size = measureText('sparkline_measure_text', labelStyle);\n var rectOptions = new RectOption('', dataLabel.fill, dataLabel.border, dataLabel.opacity, null);\n for (var i = 0, length_2 = points.length; i < length_2; i++) {\n temp = points[i];\n option.id = textId + i;\n option.x = temp.location.x + dataLabel.offset.x;\n option.y = ((spark.type === 'Pie') ? temp.location.y : ((temp.markerPosition > this.axisHeight) ? (temp.location.y +\n (size.height / 2) + space + padding) : (temp.location.y - (size.height / 2) - space - padding))) + dataLabel.offset.y;\n option.text = (dataLabel.format !== '') ? this.formatter(dataLabel.format, this.sparkline.dataSource[i]) :\n temp.yVal.toString();\n var labelArgs = {\n name: 'dataLabelRendering', cancel: false, border: dataLabel.border, fill: dataLabel.fill, pointIndex: i,\n sparkline: this.sparkline, x: option.x, y: option.y, text: option.text, color: color\n };\n this.sparkline.trigger(labelArgs.name, labelArgs);\n size = measureText(labelArgs.text, labelStyle);\n option.text = labelArgs.text;\n var render = (dataLabel.visible.join().toLowerCase().indexOf('all') > -1);\n render = this.getLabelVisible(render, temp, i, dataLabel, length_2, highPos, lowPos);\n if (render && !labelArgs.cancel) {\n rectOptions.id = rectId + i;\n rectOptions.fill = labelArgs.fill;\n rectOptions.stroke = labelArgs.border.color;\n rectOptions['stroke-width'] = labelArgs.border.width;\n option.x = labelArgs.x;\n option.y = labelArgs.y;\n rectOptions.rect = new Rect(option.x - ((size.width / 2) + padding), (option.y - padding - (size.height / 1.75)), size.width + (padding * 2), size.height + (padding * 2));\n g = this.sparkline.renderer.createGroup({ id: id + 'g' + i });\n drawRectangle(spark, rectOptions, g);\n renderTextElement(option, labelStyle, labelArgs.color, g);\n group.appendChild(g);\n }\n }\n this.sparkline.svgObject.appendChild(group);\n };\n /**\n * To get special point color and option.\n */\n SparklineRenderer.prototype.getLabelVisible = function (render, temp, i, label, length, highPos, lowPos) {\n var labelVisible = label.visible.join().toLowerCase();\n if (temp.markerPosition > this.axisHeight) {\n render = render || (labelVisible.indexOf('negative') > -1);\n }\n if (i === 0) {\n render = render || (labelVisible.indexOf('start') > -1);\n }\n else if ((i === (length - 1))) {\n render = render || (labelVisible.indexOf('end') > -1);\n }\n if (temp.markerPosition === highPos) {\n render = render || (labelVisible.indexOf('high') > -1);\n }\n else if (temp.markerPosition === lowPos) {\n render = render || (labelVisible.indexOf('low') > -1);\n }\n return render;\n };\n /**\n * To format text\n */\n SparklineRenderer.prototype.formatter = function (format, data) {\n if (isNullOrUndefined(format)) {\n return null;\n }\n var keys = Object.keys(data);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n format = format.split('${' + key + '}').join(data[key]);\n }\n return format;\n };\n /**\n * To calculate min max for x and y axis\n */\n SparklineRenderer.prototype.axisCalculation = function () {\n this.findRanges(this.sparkline.sparklineData);\n };\n /**\n * To find x axis interval.\n */\n SparklineRenderer.prototype.getInterval = function (data, x, type) {\n var interval = 1;\n var x1 = data[0][x];\n var x2 = isNullOrUndefined(data[1]) ? undefined : data[1][x];\n if (!isNullOrUndefined(x1) && !isNullOrUndefined(x2)) {\n var temp = extend([], data);\n var validData_1 = [];\n temp.forEach(function (value) {\n if (!isNullOrUndefined(value[x])) {\n validData_1.push(value);\n }\n });\n validData_1.sort(function (a, b) {\n if (isNullOrUndefined(a[x]) || isNullOrUndefined(b[x])) {\n return 0;\n }\n return a[x] - b[x];\n });\n interval = validData_1[1][x] - validData_1[0][x];\n }\n return interval;\n };\n /**\n * To calculate axis ranges internally.\n */\n // tslint:disable-next-line:max-func-body-length\n SparklineRenderer.prototype.findRanges = function (data) {\n var model = this.sparkline;\n var max;\n var min;\n var minX;\n var maxX;\n var maxPointsLength = data.length;\n var temp;\n var sumofValues = 0;\n var isNumericArray = Array.isArray(data) && typeof data[0] !== 'object';\n if (isNumericArray) {\n if (model.type === 'Pie') {\n for (var i = 0; i < maxPointsLength; i++) {\n sumofValues += Math.abs(data[i]);\n }\n }\n else {\n max = Math.max.apply(null, data);\n min = Math.min.apply(null, data);\n minX = 0;\n maxX = maxPointsLength - 1;\n }\n }\n else {\n if (model.type === 'Pie') {\n for (var i = 0; i < maxPointsLength; i++) {\n sumofValues += Math.abs(data[i][model.yName]);\n }\n }\n else {\n if (isNullOrUndefined(data[0][model.xName])) {\n var x_1 = data.map(function (z) { return z[model.yName]; });\n max = Math.max.apply(null, x_1);\n min = Math.min.apply(null, x_1);\n }\n else {\n temp = extend([], data);\n temp = temp.sort(function (a, b) { return a[model.yName] - b[model.yName]; });\n max = temp[temp.length - 1][model.yName];\n min = temp[0][model.yName];\n }\n if (!isNullOrUndefined(data[0][model.xName])) {\n temp = temp.sort(function (a, b) { return a[model.xName] - b[model.xName]; });\n maxX = temp[temp.length - 1][model.xName];\n minX = temp[0][model.xName];\n }\n else {\n minX = 0;\n maxX = maxPointsLength - 1;\n }\n }\n }\n var y2;\n var height;\n var width;\n var x1 = 0;\n var y1;\n var padding = model.padding;\n var point;\n var axis = model.axisSettings;\n var value = axis.value;\n if (model.type !== 'Pie') {\n this.maxLength = maxPointsLength;\n height = model.availableSize.height - (padding.bottom + padding.top);\n width = model.availableSize.width - (padding.left + padding.right);\n maxX = isNullOrUndefined(axis.maxX) ? maxX : axis.maxX;\n minX = isNullOrUndefined(axis.minX) ? minX : axis.minX;\n max = isNullOrUndefined(axis.maxY) ? max : axis.maxY;\n min = isNullOrUndefined(axis.minY) ? min : axis.minY;\n var color = (model.theme === 'Highcontrast') ? '#FFFFFF' : '#000000';\n color = (axis.lineSettings.color) ? axis.lineSettings.color : color;\n var eventArgs = {\n name: 'axisRendering', cancel: false, sparkline: model, maxX: maxX, minX: minX, maxY: max, minY: min,\n value: axis.value, lineColor: color, lineWidth: axis.lineSettings.width\n };\n model.trigger('axisRendering', eventArgs);\n if (eventArgs.cancel) {\n this.visiblePoints = [];\n return;\n }\n maxX = eventArgs.maxX;\n minX = eventArgs.minX;\n max = eventArgs.maxY;\n min = eventArgs.minY;\n value = this.axisValue = eventArgs.value;\n this.axisColor = eventArgs.lineColor;\n this.axisWidth = eventArgs.lineWidth;\n var unitX = maxX - minX;\n var unitY = max - min;\n unitX = (unitX === 0) ? 1 : unitX;\n unitY = (unitY === 0) ? 1 : unitY;\n this.unitX = unitX;\n this.unitY = unitY;\n this.min = min;\n x1 = 0;\n y1 = height - ((height / unitY) * (-min));\n y1 = (min < 0 && max <= 0) ? 0 : (min < 0 && max > 0) ? y1 : height;\n if (value >= min && value <= max) {\n y1 = height - Math.round(height * ((value - min) / this.unitY));\n }\n this.axisHeight = y1 + padding.top;\n }\n var percent;\n var x;\n var y;\n var visiblePoints = [];\n var interval = this.getInterval(data, model.xName, model.valueType);\n for (var i = 0; i < maxPointsLength; i++) {\n if (isNullOrUndefined(data[i][model.xName]) && isNullOrUndefined(data[i][model.yName]) && ((data[i][model.yName]) !== 0)\n && isNumericArray) {\n x = i;\n y = data[i];\n }\n else if (isNullOrUndefined(data[i][model.xName])) {\n x = i;\n y = data[i][model.yName];\n }\n else {\n x = data[i][model.xName];\n y = data[i][model.yName];\n }\n if (isNullOrUndefined(x) || isNullOrUndefined(y)) {\n continue;\n }\n if (model.type === 'Line' || model.type === 'Area') {\n y2 = (min !== max && maxPointsLength !== 1) ? height - Math.round(height * ((y - min) / this.unitY)) : padding.top;\n point = { x: (minX !== maxX) ? Math.round(width * ((x - minX) / this.unitX)) : width / 2, y: y2, markerPosition: y2 };\n }\n else if (model.type === 'Column' || model.type === 'WinLoss') {\n var colWidth = width / (((maxX - minX) / interval) + 1);\n var calSpace = 0.5;\n var space = (calSpace * 2); //calspace is default space for column and winloss\n colWidth -= (space);\n x1 = (((x - minX) / interval) * (colWidth + space)) + (space / 2);\n if (model.type === 'WinLoss') {\n // win or gain column height half of the height , draw(zero) height factor\n var winLossFactor = 0.5;\n var drawHeightFactor = 40;\n y2 = (y > value) ? (height / 4) : (y < value) ? (height * winLossFactor) :\n ((height * winLossFactor) - (height / drawHeightFactor));\n point = { x: x1, y: y2, height: (y !== value) ? (height / 4) : height / 20, width: colWidth,\n markerPosition: (y2 > y1) ? (y1 + Math.abs(y2 - y1)) : y2 };\n }\n else {\n var z = ((height / this.unitY) * (y - min));\n var z1 = (y === min && y > value) ? ((maxPointsLength !== 1 && this.unitY !== 1) ?\n (height / this.unitY) * (min / 2) : (z | 1)) :\n (y === max && y < value && maxPointsLength !== 1 && this.unitY !== 1) ? (height / this.unitY) * (-max / 2) : z;\n y2 = Math.abs(height - z1);\n point = {\n x: x1, y: (y2 > y1) ? y1 : y2, height: Math.abs(y2 - y1),\n width: colWidth, markerPosition: (y2 > y1) ? (y1 + Math.abs(y2 - y1)) : y2\n };\n }\n }\n else if (model.type === 'Pie') {\n percent = (Math.abs(y) / sumofValues) * 100;\n point = {\n percent: percent, degree: ((Math.abs(y) / sumofValues) * 360)\n };\n }\n if (model.type !== 'Pie') {\n point.x += padding.left;\n point.y += padding.top;\n }\n if (model.type !== 'WinLoss') {\n point.markerPosition += padding.top;\n }\n point.location = { x: point.x, y: point.y };\n point.xVal = x;\n point.yVal = y;\n visiblePoints.push(point);\n }\n visiblePoints.sort(function (a, b) {\n return a.x - b.x;\n });\n this.visiblePoints = visiblePoints;\n };\n /**\n * To render the sparkline axis\n */\n SparklineRenderer.prototype.drawAxis = function () {\n var spark = this.sparkline;\n var height = this.axisHeight;\n if ((spark.type !== 'WinLoss') && (spark.type !== 'Pie') && spark.axisSettings.lineSettings.visible) {\n var xAxis = {\n 'id': spark.element.id + '_Sparkline_XAxis',\n 'x1': spark.padding.left, 'y1': height,\n 'x2': spark.availableSize.width - spark.padding.right, 'y2': height,\n 'stroke': this.axisColor,\n 'opacity': spark.axisSettings.lineSettings.opacity,\n 'stroke-dasharray': spark.axisSettings.lineSettings.dashArray,\n 'stroke-width': this.axisWidth,\n 'clip-path': 'url(#' + this.clipId + ')'\n };\n spark.svgObject.appendChild(spark.renderer.drawLine(xAxis));\n }\n };\n /**\n * To trigger point render event\n */\n SparklineRenderer.prototype.triggerPointRender = function (name, i, fill, border) {\n var args = {\n name: name, cancel: false, border: border, fill: fill, sparkline: this.sparkline, pointIndex: i\n };\n this.sparkline.trigger(name, args);\n return args;\n };\n return SparklineRenderer;\n}());\nexport { SparklineRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, NotifyPropertyChanges, Property, Complex } from '@syncfusion/ej2-base';\nimport { remove, L10n, Internationalization, Event, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Browser, EventHandler, Touch, Collection } from '@syncfusion/ej2-base';\nimport { SparklineBorder, SparklineTooltipSettings, ContainerArea, AxisSettings, Padding, SparklineMarkerSettings } from './model/base';\nimport { SparklineDataLabelSettings, RangeBandSettings } from './model/base';\nimport { Size, createSvg, RectOption, Rect, drawRectangle, getIdElement, withInBounds, removeElement } from './utils/helper';\nimport { SparklineRenderer } from './rendering/sparkline-renderer';\n//tslint:disable: no-duplicate-lines\n/**\n * Represents the Sparkline control.\n * ```html\n *
    \n * \n * ```\n */\nvar Sparkline = /** @class */ (function (_super) {\n __extends(Sparkline, _super);\n // Sparkline rendering starts from here.\n /**\n * Constructor for creating the Sparkline widget\n */\n function Sparkline(options, element) {\n var _this = _super.call(this, options, element) || this;\n /** @private */\n _this.isDevice = Browser.isDevice;\n return _this;\n }\n /**\n * Initializing pre-required values for sparkline.\n */\n Sparkline.prototype.preRender = function () {\n this.unWireEvents();\n this.trigger('load', { sparkline: this });\n this.sparklineRenderer = new SparklineRenderer(this);\n this.createSVG();\n this.wireEvents();\n this.setCulture();\n };\n /**\n * Sparkline Elements rendering starting.\n */\n Sparkline.prototype.render = function () {\n // Sparkline rendering splitted into rendering and calculations\n this.sparklineRenderer.processData();\n this.renderSparkline();\n this.element.appendChild(this.svgObject);\n this.setSecondaryElementPosition();\n this.trigger('loaded', { sparkline: this });\n };\n /**\n * To render sparkline elements\n */\n Sparkline.prototype.renderSparkline = function () {\n // To render the sparkline elements\n this.renderBorder();\n this.createDiv();\n this.sparklineRenderer.renderSeries();\n };\n /**\n * Create secondary element for the tooltip\n */\n Sparkline.prototype.createDiv = function () {\n var tooltipDiv = document.createElement('div');\n tooltipDiv.id = this.element.id + '_Secondary_Element';\n tooltipDiv.setAttribute('style', 'position: relative');\n this.element.appendChild(tooltipDiv);\n this.element.style.display = 'block';\n this.element.style.position = 'relative';\n };\n /**\n * To set the left and top position for data label template for sparkline\n */\n Sparkline.prototype.setSecondaryElementPosition = function () {\n var element = getIdElement(this.element.id + '_Secondary_Element');\n if (!element) {\n return;\n }\n var rect = this.element.getBoundingClientRect();\n var svgRect = getIdElement(this.element.id + '_svg').getBoundingClientRect();\n element.style.left = Math.max(svgRect.left - rect.left, 0) + 'px';\n element.style.top = Math.max(svgRect.top - rect.top, 0) + 'px';\n };\n /**\n * @private\n * Render the sparkline border\n */\n Sparkline.prototype.renderBorder = function () {\n var width = this.containerArea.border.width;\n var borderRect;\n if (width > 0 || this.containerArea.background !== 'transparent') {\n borderRect = new RectOption(this.element.id + '_SparklineBorder', this.containerArea.background, this.containerArea.border, 1, new Rect(width / 2, width / 2, this.availableSize.width - width, this.availableSize.height - width));\n this.svgObject.appendChild(drawRectangle(this, borderRect));\n }\n // Used to create clip path sparkline\n var padding = this.padding;\n borderRect = new RectOption(this.element.id + '_sparkline_clip_rect', 'transparent', { color: 'transparent', width: 0 }, 1, new Rect(padding.left, padding.top, this.availableSize.width - (padding.left + padding.right), this.availableSize.height - (padding.top + padding.bottom)));\n var clipPath = this.renderer.createClipPath({ id: this.element.id + '_sparkline_clip_path' });\n drawRectangle(this, borderRect, clipPath);\n this.svgObject.appendChild(clipPath);\n };\n /**\n * To create svg element for sparkline\n */\n Sparkline.prototype.createSVG = function () {\n this.removeSvg();\n createSvg(this);\n };\n /**\n * To Remove the Sparkline SVG object\n */\n Sparkline.prototype.removeSvg = function () {\n if (this.svgObject) {\n while (this.svgObject.childNodes.length > 0) {\n this.svgObject.removeChild(this.svgObject.firstChild);\n }\n if (!this.svgObject.hasChildNodes() && this.svgObject.parentNode) {\n remove(this.svgObject);\n }\n }\n removeElement(this.element.id + '_Secondary_Element');\n if (this.sparklineTooltipModule) {\n this.sparklineTooltipModule.removeTooltipElements();\n }\n };\n /**\n * Method to set culture for sparkline\n */\n Sparkline.prototype.setCulture = function () {\n this.intl = new Internationalization();\n this.localeObject = new L10n(this.getModuleName(), this.defaultLocalConstants, this.locale);\n };\n /**\n * To provide the array of modules needed for sparkline rendering\n * @return {ModuleDeclaration[]}\n * @private\n */\n Sparkline.prototype.requiredModules = function () {\n var modules = [];\n if (this.tooltipSettings.visible || this.tooltipSettings.trackLineSettings.visible) {\n modules.push({\n member: 'SparklineTooltip',\n args: [this]\n });\n }\n return modules;\n };\n /**\n * Method to unbind events for sparkline chart\n */\n Sparkline.prototype.unWireEvents = function () {\n var move = Browser.touchMoveEvent;\n var cancel = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n /*! UnBind the Event handler */\n EventHandler.remove(this.element, Browser.touchMoveEvent, this.sparklineMove);\n EventHandler.remove(this.element, cancel, this.sparklineMouseLeave);\n EventHandler.remove(this.element, Browser.touchEndEvent, this.sparklineMouseEnd);\n window.removeEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.sparklineResize);\n };\n /**\n * Method to bind events for the sparkline\n */\n Sparkline.prototype.wireEvents = function () {\n var cancel = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n /*! Bind the Event handler */\n EventHandler.add(this.element, Browser.touchMoveEvent, this.sparklineMove, this);\n EventHandler.add(this.element, 'click', this.sparklineClick, this);\n EventHandler.add(this.element, cancel, this.sparklineMouseLeave, this);\n EventHandler.add(this.element, Browser.touchEndEvent, this.sparklineMouseEnd, this);\n window.addEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.sparklineResize.bind(this));\n new Touch(this.element);\n };\n /**\n * Sparkline resize event.\n * @private\n */\n Sparkline.prototype.sparklineResize = function (e) {\n var _this = this;\n var args = {\n name: 'resize',\n previousSize: this.availableSize,\n sparkline: this,\n currentSize: new Size(0, 0)\n };\n if (this.resizeTo) {\n clearTimeout(this.resizeTo);\n }\n this.resizeTo = setTimeout(function () {\n if (_this.isDestroyed) {\n clearTimeout(_this.resizeTo);\n return;\n }\n _this.unWireEvents();\n _this.createSVG();\n _this.refreshing = true;\n _this.wireEvents();\n args.currentSize = _this.availableSize;\n _this.trigger('resize', args);\n _this.render();\n }, 500);\n return false;\n };\n /**\n * Handles the mouse move on sparkline.\n * @return {boolean}\n * @private\n */\n Sparkline.prototype.sparklineMove = function (e) {\n this.setSparklineMouseXY(e);\n this.notify(Browser.touchMoveEvent, e);\n var args = {\n name: 'sparklineMouseMove', cancel: false, sparkline: this, event: e\n };\n this.trigger(args.name, args);\n var pointClick = this.isPointRegion(e);\n if (pointClick.isPointRegion) {\n var pointArgs = {\n name: 'pointRegionMouseMove', cancel: false, event: e, sparkline: this, pointIndex: pointClick.pointIndex\n };\n this.trigger(pointArgs.name, pointArgs);\n }\n return false;\n };\n /**\n * Handles the mouse click on sparkline.\n * @return {boolean}\n * @private\n */\n Sparkline.prototype.sparklineClick = function (e) {\n this.setSparklineMouseXY(e);\n var args = {\n name: 'sparklineMouseClick', cancel: false, sparkline: this, event: e\n };\n this.trigger(args.name, args);\n var pointClick = this.isPointRegion(e);\n if (pointClick.isPointRegion) {\n var pointArgs = {\n name: 'pointRegionMouseClick', cancel: false, event: e, sparkline: this, pointIndex: pointClick.pointIndex\n };\n this.trigger(pointArgs.name, pointArgs);\n }\n return false;\n };\n /**\n * To check mouse event target is point region or not.\n */\n Sparkline.prototype.isPointRegion = function (e) {\n var _this = this;\n var startId = this.element.id + '_';\n var id = e.target.id.replace(startId, '').split('_');\n if (id[1] === this.type.toLowerCase()) {\n var index_1 = parseInt(id[2], 10);\n if ((isNullOrUndefined(index_1) || isNaN(index_1)) && (this.type === 'Line' || this.type === 'Area')) {\n this.sparklineRenderer.visiblePoints.forEach(function (point, i) {\n if (withInBounds(_this.mouseX, _this.mouseY, new Rect(point.x - 5, point.y - 5, 10, 10))) {\n index_1 = i;\n return;\n }\n });\n }\n return { isPointRegion: true, pointIndex: index_1 };\n }\n return { isPointRegion: false, pointIndex: null };\n };\n /**\n * Handles the mouse end.\n * @return {boolean}\n * @private\n */\n Sparkline.prototype.sparklineMouseEnd = function (e) {\n this.setSparklineMouseXY(e);\n this.notify(Browser.touchEndEvent, e);\n return false;\n };\n /**\n * Handles the mouse leave on sparkline.\n * @return {boolean}\n * @private\n */\n Sparkline.prototype.sparklineMouseLeave = function (e) {\n this.setSparklineMouseXY(e);\n this.notify(Browser.isPointer ? 'pointerleave' : 'mouseleave', e);\n return false;\n };\n /**\n * Method to set mouse x, y from events\n */\n Sparkline.prototype.setSparklineMouseXY = function (e) {\n var pageY;\n var pageX;\n if (e.type.indexOf('touch') > -1) {\n this.isTouch = true;\n var touchArg = e;\n pageX = touchArg.changedTouches[0].clientX;\n pageY = touchArg.changedTouches[0].clientY;\n }\n else {\n this.isTouch = e.pointerType === 'touch' || e.pointerType === '2';\n pageY = e.clientY;\n pageX = e.clientX;\n }\n var rect = this.element.getBoundingClientRect();\n var svgRect = getIdElement(this.element.id + '_svg').getBoundingClientRect();\n this.mouseY = (pageY - rect.top) - Math.max(svgRect.top - rect.top, 0);\n this.mouseX = (pageX - rect.left) - Math.max(svgRect.left - rect.left, 0);\n };\n /**\n * To change rendering while property value modified.\n * @private\n */\n Sparkline.prototype.onPropertyChanged = function (newProp, oldProp) {\n var render = false;\n var refresh = false;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'xName':\n case 'yName':\n case 'dataSource':\n case 'axisSettings':\n case 'type':\n case 'valueType':\n refresh = true;\n break;\n case 'border':\n case 'markerSettings':\n case 'dataLabelSettings':\n case 'tooltipSettings':\n case 'startPointColor':\n case 'highPointColor':\n case 'lowPointColor':\n case 'endPointColor':\n case 'negativePointColor':\n case 'theme':\n render = true;\n break;\n }\n }\n if (refresh) {\n this.createSVG();\n this.sparklineRenderer.processData();\n this.refreshSparkline();\n }\n else if (render) {\n this.createSVG();\n this.refreshSparkline();\n }\n };\n /**\n * To render sparkline series and appending.\n */\n Sparkline.prototype.refreshSparkline = function () {\n // Issue fix. React had native render method. So OnProperty change used render method won't wrok. \n this.renderSparkline();\n this.element.appendChild(this.svgObject);\n this.setSecondaryElementPosition();\n };\n /**\n * Get component name\n */\n Sparkline.prototype.getModuleName = function () {\n return 'sparkline';\n };\n /**\n * Destroy the component\n */\n Sparkline.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @private\n */\n Sparkline.prototype.getPersistData = function () {\n return '';\n };\n __decorate([\n Property(null)\n ], Sparkline.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], Sparkline.prototype, \"height\", void 0);\n __decorate([\n Complex({}, SparklineBorder)\n ], Sparkline.prototype, \"border\", void 0);\n __decorate([\n Property('Line')\n ], Sparkline.prototype, \"type\", void 0);\n __decorate([\n Property([])\n ], Sparkline.prototype, \"dataSource\", void 0);\n __decorate([\n Property('Numeric')\n ], Sparkline.prototype, \"valueType\", void 0);\n __decorate([\n Property(null)\n ], Sparkline.prototype, \"xName\", void 0);\n __decorate([\n Property(null)\n ], Sparkline.prototype, \"yName\", void 0);\n __decorate([\n Property('#00bdae')\n ], Sparkline.prototype, \"fill\", void 0);\n __decorate([\n Property('')\n ], Sparkline.prototype, \"highPointColor\", void 0);\n __decorate([\n Property('')\n ], Sparkline.prototype, \"lowPointColor\", void 0);\n __decorate([\n Property('')\n ], Sparkline.prototype, \"startPointColor\", void 0);\n __decorate([\n Property('')\n ], Sparkline.prototype, \"endPointColor\", void 0);\n __decorate([\n Property('')\n ], Sparkline.prototype, \"negativePointColor\", void 0);\n __decorate([\n Property('')\n ], Sparkline.prototype, \"tiePointColor\", void 0);\n __decorate([\n Property([])\n ], Sparkline.prototype, \"palette\", void 0);\n __decorate([\n Property(1)\n ], Sparkline.prototype, \"lineWidth\", void 0);\n __decorate([\n Property(1)\n ], Sparkline.prototype, \"opacity\", void 0);\n __decorate([\n Property(null)\n ], Sparkline.prototype, \"format\", void 0);\n __decorate([\n Property(false)\n ], Sparkline.prototype, \"useGroupingSeparator\", void 0);\n __decorate([\n Complex({}, SparklineTooltipSettings)\n ], Sparkline.prototype, \"tooltipSettings\", void 0);\n __decorate([\n Complex({}, ContainerArea)\n ], Sparkline.prototype, \"containerArea\", void 0);\n __decorate([\n Collection([], RangeBandSettings)\n ], Sparkline.prototype, \"rangeBandSettings\", void 0);\n __decorate([\n Complex({}, AxisSettings)\n ], Sparkline.prototype, \"axisSettings\", void 0);\n __decorate([\n Complex({}, SparklineMarkerSettings)\n ], Sparkline.prototype, \"markerSettings\", void 0);\n __decorate([\n Complex({}, SparklineDataLabelSettings)\n ], Sparkline.prototype, \"dataLabelSettings\", void 0);\n __decorate([\n Complex({}, Padding)\n ], Sparkline.prototype, \"padding\", void 0);\n __decorate([\n Property('Material')\n ], Sparkline.prototype, \"theme\", void 0);\n __decorate([\n Event()\n ], Sparkline.prototype, \"loaded\", void 0);\n __decorate([\n Event()\n ], Sparkline.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], Sparkline.prototype, \"tooltipInitialize\", void 0);\n __decorate([\n Event()\n ], Sparkline.prototype, \"seriesRendering\", void 0);\n __decorate([\n Event()\n ], Sparkline.prototype, \"axisRendering\", void 0);\n __decorate([\n Event()\n ], Sparkline.prototype, \"pointRendering\", void 0);\n __decorate([\n Event()\n ], Sparkline.prototype, \"pointRegionMouseMove\", void 0);\n __decorate([\n Event()\n ], Sparkline.prototype, \"pointRegionMouseClick\", void 0);\n __decorate([\n Event()\n ], Sparkline.prototype, \"sparklineMouseMove\", void 0);\n __decorate([\n Event()\n ], Sparkline.prototype, \"sparklineMouseClick\", void 0);\n __decorate([\n Event()\n ], Sparkline.prototype, \"dataLabelRendering\", void 0);\n __decorate([\n Event()\n ], Sparkline.prototype, \"markerRendering\", void 0);\n __decorate([\n Event()\n ], Sparkline.prototype, \"resize\", void 0);\n Sparkline = __decorate([\n NotifyPropertyChanges\n ], Sparkline);\n return Sparkline;\n}(Component));\nexport { Sparkline };\n","import { PathOption, drawPath, getIdElement, Rect, withInBounds } from '../utils/helper';\nimport { Browser, extend, isNullOrUndefined, remove, createElement } from '@syncfusion/ej2-base';\nimport { Tooltip } from '@syncfusion/ej2-svg-base';\n/**\n * Sparkline Tooltip Module\n */\nvar SparklineTooltip = /** @class */ (function () {\n function SparklineTooltip(sparkline) {\n this.sparkline = sparkline;\n this.addEventListener();\n }\n /**\n * @hidden\n */\n SparklineTooltip.prototype.addEventListener = function () {\n if (this.sparkline.isDestroyed) {\n return;\n }\n // this.sparkline.on('mouseleave', this.mouseLeaveHandler, this);\n this.sparkline.on(Browser.isPointer ? 'pointerleave' : 'mouseleave', this.mouseLeaveHandler, this);\n this.sparkline.on(Browser.touchMoveEvent, this.mouseMoveHandler, this);\n this.sparkline.on(Browser.touchEndEvent, this.mouseUpHandler, this);\n };\n SparklineTooltip.prototype.mouseLeaveHandler = function (e) {\n this.removeTooltipElements();\n };\n SparklineTooltip.prototype.mouseUpHandler = function (e) {\n if (!this.sparkline.isTouch) {\n return;\n }\n this.processTooltip(e);\n this.fadeOut();\n };\n SparklineTooltip.prototype.fadeOut = function () {\n clearTimeout(this.clearTooltip);\n this.clearTooltip = setTimeout(this.removeTooltipElements.bind(this), 5000);\n };\n /**\n * To remove tooltip and tracker elements.\n * @private\n */\n SparklineTooltip.prototype.removeTooltipElements = function () {\n this.removeTooltip();\n this.removeTracker();\n };\n SparklineTooltip.prototype.mouseMoveHandler = function (e) {\n this.processTooltip(e);\n };\n SparklineTooltip.prototype.processTooltip = function (e) {\n var pointIndex;\n var spark = this.sparkline;\n var visiblePoints = spark.sparklineRenderer.visiblePoints;\n var mouseX = spark.mouseX;\n var mouseY = spark.mouseY;\n if (spark.type !== 'Pie') {\n var locations = extend([], [], visiblePoints);\n var trackerPositions = locations.map(function (point) { return point.location.x; });\n var temp = Infinity;\n var mousePosition = void 0;\n for (var i = 0, diff = void 0, len = trackerPositions.length; i < len; i++) {\n diff = Math.abs(mouseX - trackerPositions[i]);\n if (temp > diff) {\n temp = diff;\n mousePosition = trackerPositions[i];\n pointIndex = i;\n }\n }\n }\n else {\n var target = e.target.id;\n pointIndex = parseInt(target.split('_pie_')[1], 10);\n }\n if (isNaN(pointIndex) || !withInBounds(mouseX, mouseY, new Rect(0, 0, spark.availableSize.width, spark.availableSize.height))) {\n this.removeTracker();\n this.removeTooltip();\n return;\n }\n if (this.pointIndex === pointIndex) {\n return;\n }\n this.pointIndex = pointIndex;\n this.renderTrackerLine(visiblePoints[pointIndex]);\n this.renderTooltip(visiblePoints[pointIndex]);\n };\n /**\n * To render tracker line\n */\n SparklineTooltip.prototype.renderTrackerLine = function (points) {\n var spark = this.sparkline;\n var tracker = spark.tooltipSettings.trackLineSettings;\n var color = (spark.theme === 'Highcontrast') ? '#FFFFFF' : '#000000';\n color = (tracker.color) ? tracker.color : color;\n if (!tracker.visible || spark.type === 'Pie') {\n return;\n }\n var group = getIdElement(spark.element.id + '_sparkline_tracker_g');\n if (isNullOrUndefined(group)) {\n group = spark.renderer.createGroup({ id: spark.element.id + '_sparkline_tracker_g' });\n spark.svgObject.appendChild(group);\n }\n var pathEle = getIdElement(spark.element.id + '_sparkline_tracker');\n var d = 'M ' + points.location.x + ' ' + spark.padding.top + ' L ' + points.location.x + ' ' +\n (spark.availableSize.height - spark.padding.bottom);\n if (isNullOrUndefined(pathEle)) {\n var pathOption = new PathOption(spark.element.id + '_sparkline_tracker', 'transparent', tracker.width, color, 1);\n pathOption.d = d;\n drawPath(spark, pathOption, group);\n }\n else {\n pathEle.setAttribute('d', d);\n pathEle.setAttribute('stroke-width', tracker.width.toString());\n pathEle.setAttribute('stroke', color);\n }\n };\n /**\n * To render line series\n */\n SparklineTooltip.prototype.renderTooltip = function (points) {\n var spark = this.sparkline;\n var tooltip = spark.tooltipSettings;\n if (!tooltip.visible) {\n return;\n }\n var div = getIdElement(spark.element.id + '_sparkline_tooltip_div');\n if (isNullOrUndefined(div)) {\n div = createElement('div', { id: spark.element.id + '_sparkline_tooltip_div',\n styles: 'pointer-events: none; position: absolute;z-index:1;' });\n getIdElement(spark.element.id + '_Secondary_Element').appendChild(div);\n }\n var size = (spark.markerSettings.visible.length) ? spark.markerSettings.size : 0;\n var x = points.xVal.toString();\n if (spark.valueType === 'Category') {\n x = spark.dataSource[points.xVal][spark.xName];\n }\n else if (spark.valueType === 'DateTime') {\n x = new Date(points.xVal).toDateString();\n }\n var y = points.yVal.toString();\n var text = this.getFormat(spark.tooltipSettings.format, spark, x, this.formatValue(points.yVal, spark).toString());\n var location = { x: points.location.x, y: points.location.y };\n location = spark.type === 'Pie' ? { x: points.location.x, y: points.location.y } : location;\n var tooltipEvent = {\n name: 'tooltipInitialize', cancel: false, text: text,\n textStyle: {\n size: tooltip.textStyle.size,\n opacity: tooltip.textStyle.opacity,\n fontWeight: tooltip.textStyle.fontWeight,\n fontStyle: tooltip.textStyle.fontStyle,\n fontFamily: tooltip.textStyle.fontFamily,\n color: tooltip.textStyle.color,\n }\n };\n spark.trigger(tooltipEvent.name, tooltipEvent);\n if (tooltipEvent.cancel) {\n return;\n }\n var element = new Tooltip({\n content: tooltipEvent.text,\n border: tooltip.border,\n template: tooltip.template,\n data: spark.dataSource[this.pointIndex],\n fill: tooltip.fill,\n textStyle: tooltipEvent.textStyle,\n enableAnimation: false,\n location: { x: location.x, y: location.y },\n shared: false,\n areaBounds: new Rect(0, 0, spark.availableSize.width, spark.availableSize.height),\n theme: spark.theme\n });\n element.appendTo(div);\n };\n /**\n * To get tooltip format.\n */\n SparklineTooltip.prototype.getFormat = function (format, spark, x, y) {\n if (isNullOrUndefined(format) || format === '') {\n return [y];\n }\n var text = format;\n text = text.split('${' + spark.xName + '}').join(x).split('${' + spark.yName + '}').join(y);\n return [text];\n };\n SparklineTooltip.prototype.formatValue = function (value, sparkline) {\n var formatValue;\n var formatFunction;\n if (sparkline.format && !isNaN(Number(value))) {\n formatFunction = sparkline.intl.getNumberFormat({ format: sparkline.format, useGrouping: sparkline.useGroupingSeparator });\n formatValue = formatFunction(value);\n }\n else {\n formatValue = value;\n }\n return formatValue;\n };\n /**\n * To remove tracker line.\n */\n SparklineTooltip.prototype.removeTracker = function () {\n var tracker = this.sparkline.element.querySelector('#' + this.sparkline.element.id + '_sparkline_tracker_g');\n return tracker ? remove(tracker) : null;\n };\n /**\n * To remove tooltip element.\n */\n SparklineTooltip.prototype.removeTooltip = function () {\n this.pointIndex = null;\n var tooltip = this.sparkline.element.querySelector('#' + this.sparkline.element.id + '_sparkline_tooltip_div');\n return tooltip ? remove(tooltip) : null;\n };\n /**\n * Get module name.\n */\n SparklineTooltip.prototype.getModuleName = function () {\n return 'SparklineTooltip';\n };\n /**\n * To destroy the tooltip.\n */\n SparklineTooltip.prototype.destroy = function (sparkline) {\n // To remove tooltip module\n };\n return SparklineTooltip;\n}());\nexport { SparklineTooltip };\n","import * as index from '@syncfusion/ej2-charts';\nindex.Chart.Inject( index.LineSeries,index.ScatterSeries,index.ColumnSeries,index.SplineSeries,index.SplineAreaSeries,index.StripLine,index.AreaSeries,index.ScrollBar,index.StepLineSeries,index.StepAreaSeries,index.StackingColumnSeries,index.StackingAreaSeries,index.BarSeries,index.StackingBarSeries,index.RangeColumnSeries,index.BubbleSeries,index.Tooltip,index.Crosshair,index.Category,index.DateTime,index.Logarithmic,index.Legend,index.Zoom,index.DataLabel,index.Selection,index.ChartAnnotation,index.HiloSeries,index.HiloOpenCloseSeries,index.WaterfallSeries,index.RangeAreaSeries,index.CandleSeries,index.PolarSeries,index.RadarSeries,index.SmaIndicator,index.TmaIndicator,index.EmaIndicator,index.AccumulationDistributionIndicator,index.MacdIndicator,index.AtrIndicator,index.RsiIndicator,index.MomentumIndicator,index.StochasticIndicator,index.BollingerBands,index.BoxAndWhiskerSeries,index.HistogramSeries,index.ErrorBar,index.Trendlines,index.DateTimeCategory,index.MultiColoredLineSeries,index.MultiColoredAreaSeries,index.MultiLevelLabel);\nindex.AccumulationChart.Inject( index.PieSeries,index.FunnelSeries,index.PyramidSeries,index.AccumulationTooltip,index.AccumulationLegend,index.AccumulationSelection,index.AccumulationDataLabel,index.AccumulationAnnotation);\nindex.RangeNavigator.Inject( index.RangeTooltip,index.PeriodSelector,index.AreaSeries,index.StepLineSeries,index.DateTime,index.Logarithmic);\nindex.Sparkline.Inject( index.SparklineTooltip);\nindex.Smithchart.Inject( index.SmithchartLegend,index.TooltipRender);\nexport * from '@syncfusion/ej2-charts';\n","/**\n * Specifies gauge Themes\n */\nexport var Theme;\n(function (Theme) {\n /** @private */\n Theme.axisLabelFont = {\n size: '12px',\n fontWeight: 'Normal',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Segoe UI'\n };\n /** @private */\n Theme.axisLineColor = null;\n /** @private */\n Theme.tickLineColor = null;\n /** @private */\n Theme.pointerColor = null;\n})(Theme || (Theme = {}));\n/** @private */\nexport function getRangePalette(theme) {\n var palette = ['#50c917', '#27d5ff', '#fcde0b', '#ffb133', '#ff5985'];\n // switch (theme) {\n // case 'Material':\n // palette = ['#50c917', '#27d5ff', '#fcde0b', '#ffb133', '#ff5985'];\n // break;\n // case 'Fabric':\n // palette = ['#50c917', '#27d5ff', '#fcde0b', '#ffb133', '#ff5985'];\n // break;\n // }\n return palette;\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, Complex } from '@syncfusion/ej2-base';\n/**\n * Configures the borders in circular gauge.\n */\nvar Border = /** @class */ (function (_super) {\n __extends(Border, _super);\n function Border() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Border.prototype, \"color\", void 0);\n __decorate([\n Property(1)\n ], Border.prototype, \"width\", void 0);\n return Border;\n}(ChildProperty));\nexport { Border };\n/**\n * Configures the fonts in circular gauge.\n */\nvar Font = /** @class */ (function (_super) {\n __extends(Font, _super);\n function Font() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('16px')\n ], Font.prototype, \"size\", void 0);\n __decorate([\n Property('')\n ], Font.prototype, \"color\", void 0);\n __decorate([\n Property('segoe UI')\n ], Font.prototype, \"fontFamily\", void 0);\n __decorate([\n Property('Normal')\n ], Font.prototype, \"fontWeight\", void 0);\n __decorate([\n Property('Normal')\n ], Font.prototype, \"fontStyle\", void 0);\n __decorate([\n Property(1)\n ], Font.prototype, \"opacity\", void 0);\n return Font;\n}(ChildProperty));\nexport { Font };\n/**\n * Configures the margin of circular gauge.\n */\nvar Margin = /** @class */ (function (_super) {\n __extends(Margin, _super);\n function Margin() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(10)\n ], Margin.prototype, \"left\", void 0);\n __decorate([\n Property(10)\n ], Margin.prototype, \"right\", void 0);\n __decorate([\n Property(10)\n ], Margin.prototype, \"top\", void 0);\n __decorate([\n Property(10)\n ], Margin.prototype, \"bottom\", void 0);\n return Margin;\n}(ChildProperty));\nexport { Margin };\n/**\n * Configures the tooltip in circular gauge.\n */\nvar TooltipSettings = /** @class */ (function (_super) {\n __extends(TooltipSettings, _super);\n function TooltipSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], TooltipSettings.prototype, \"enable\", void 0);\n __decorate([\n Property('#ffffff')\n ], TooltipSettings.prototype, \"fill\", void 0);\n __decorate([\n Complex({ color: '#686868', size: '13px' }, Font)\n ], TooltipSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Property(null)\n ], TooltipSettings.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], TooltipSettings.prototype, \"template\", void 0);\n __decorate([\n Property(true)\n ], TooltipSettings.prototype, \"enableAnimation\", void 0);\n __decorate([\n Complex({}, Border)\n ], TooltipSettings.prototype, \"border\", void 0);\n return TooltipSettings;\n}(ChildProperty));\nexport { TooltipSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, Complex, ChildProperty, Collection } from '@syncfusion/ej2-base';\nimport { Font, Border } from '../model/base';\nimport { Theme } from '../model/theme';\n/**\n * Configures the axis line.\n */\nvar Line = /** @class */ (function (_super) {\n __extends(Line, _super);\n function Line() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(2)\n ], Line.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], Line.prototype, \"dashArray\", void 0);\n __decorate([\n Property(Theme.axisLineColor)\n ], Line.prototype, \"color\", void 0);\n return Line;\n}(ChildProperty));\nexport { Line };\n/**\n * Configures the axis label.\n */\nvar Label = /** @class */ (function (_super) {\n __extends(Label, _super);\n function Label() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex(Theme.axisLabelFont, Font)\n ], Label.prototype, \"font\", void 0);\n __decorate([\n Property('')\n ], Label.prototype, \"format\", void 0);\n __decorate([\n Property('Inside')\n ], Label.prototype, \"position\", void 0);\n __decorate([\n Property('None')\n ], Label.prototype, \"hiddenLabel\", void 0);\n __decorate([\n Property(false)\n ], Label.prototype, \"autoAngle\", void 0);\n __decorate([\n Property(false)\n ], Label.prototype, \"useRangeColor\", void 0);\n __decorate([\n Property(0)\n ], Label.prototype, \"offset\", void 0);\n return Label;\n}(ChildProperty));\nexport { Label };\n/**\n * Configures the ranges of an axis.\n */\nvar Range = /** @class */ (function (_super) {\n __extends(Range, _super);\n function Range() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Range.prototype, \"start\", void 0);\n __decorate([\n Property(null)\n ], Range.prototype, \"end\", void 0);\n __decorate([\n Property(null)\n ], Range.prototype, \"radius\", void 0);\n __decorate([\n Property(10)\n ], Range.prototype, \"startWidth\", void 0);\n __decorate([\n Property(10)\n ], Range.prototype, \"endWidth\", void 0);\n __decorate([\n Property(null)\n ], Range.prototype, \"color\", void 0);\n return Range;\n}(ChildProperty));\nexport { Range };\n/**\n * Configures the major and minor tick lines of an axis.\n */\nvar Tick = /** @class */ (function (_super) {\n __extends(Tick, _super);\n function Tick() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Tick.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], Tick.prototype, \"height\", void 0);\n __decorate([\n Property(null)\n ], Tick.prototype, \"interval\", void 0);\n __decorate([\n Property(0)\n ], Tick.prototype, \"offset\", void 0);\n __decorate([\n Property(Theme.tickLineColor)\n ], Tick.prototype, \"color\", void 0);\n __decorate([\n Property('Inside')\n ], Tick.prototype, \"position\", void 0);\n __decorate([\n Property(false)\n ], Tick.prototype, \"useRangeColor\", void 0);\n return Tick;\n}(ChildProperty));\nexport { Tick };\n/**\n * Configures the needle cap in pointer.\n */\nvar Cap = /** @class */ (function (_super) {\n __extends(Cap, _super);\n function Cap() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('#ffffff')\n ], Cap.prototype, \"color\", void 0);\n __decorate([\n Complex({ color: Theme.pointerColor, width: 8 }, Border)\n ], Cap.prototype, \"border\", void 0);\n __decorate([\n Property(8)\n ], Cap.prototype, \"radius\", void 0);\n return Cap;\n}(ChildProperty));\nexport { Cap };\n/**\n * Configures the back needle in pointers.\n */\nvar NeedleTail = /** @class */ (function (_super) {\n __extends(NeedleTail, _super);\n function NeedleTail() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(Theme.pointerColor)\n ], NeedleTail.prototype, \"color\", void 0);\n __decorate([\n Complex({ color: Theme.pointerColor, width: 0 }, Border)\n ], NeedleTail.prototype, \"border\", void 0);\n __decorate([\n Property('0%')\n ], NeedleTail.prototype, \"length\", void 0);\n return NeedleTail;\n}(ChildProperty));\nexport { NeedleTail };\n/**\n * Configures the animation of pointers.\n */\nvar Animation = /** @class */ (function (_super) {\n __extends(Animation, _super);\n function Animation() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], Animation.prototype, \"enable\", void 0);\n __decorate([\n Property(1000)\n ], Animation.prototype, \"duration\", void 0);\n return Animation;\n}(ChildProperty));\nexport { Animation };\n/**\n * ‘Annotation’ module is used to handle annotation action for an axis.\n */\nvar Annotation = /** @class */ (function (_super) {\n __extends(Annotation, _super);\n function Annotation() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Annotation.prototype, \"content\", void 0);\n __decorate([\n Property(90)\n ], Annotation.prototype, \"angle\", void 0);\n __decorate([\n Property('50%')\n ], Annotation.prototype, \"radius\", void 0);\n __decorate([\n Property('-1')\n ], Annotation.prototype, \"zIndex\", void 0);\n __decorate([\n Property(false)\n ], Annotation.prototype, \"autoAngle\", void 0);\n __decorate([\n Complex({ size: '12px', color: '#686868' }, Font)\n ], Annotation.prototype, \"textStyle\", void 0);\n __decorate([\n Property(null)\n ], Annotation.prototype, \"description\", void 0);\n return Annotation;\n}(ChildProperty));\nexport { Annotation };\n/**\n * Configures the pointers of an axis.\n */\nvar Pointer = /** @class */ (function (_super) {\n __extends(Pointer, _super);\n function Pointer() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Pointer.prototype, \"value\", void 0);\n __decorate([\n Property('Needle')\n ], Pointer.prototype, \"type\", void 0);\n __decorate([\n Property(null)\n ], Pointer.prototype, \"imageUrl\", void 0);\n __decorate([\n Property(null)\n ], Pointer.prototype, \"radius\", void 0);\n __decorate([\n Property(20)\n ], Pointer.prototype, \"pointerWidth\", void 0);\n __decorate([\n Complex({}, Cap)\n ], Pointer.prototype, \"cap\", void 0);\n __decorate([\n Complex({}, NeedleTail)\n ], Pointer.prototype, \"needleTail\", void 0);\n __decorate([\n Property(Theme.pointerColor)\n ], Pointer.prototype, \"color\", void 0);\n __decorate([\n Complex({ color: '#DDDDDD', width: 0 }, Border)\n ], Pointer.prototype, \"border\", void 0);\n __decorate([\n Complex(null, Animation)\n ], Pointer.prototype, \"animation\", void 0);\n __decorate([\n Property('Circle')\n ], Pointer.prototype, \"markerShape\", void 0);\n __decorate([\n Property(5)\n ], Pointer.prototype, \"markerHeight\", void 0);\n __decorate([\n Property(null)\n ], Pointer.prototype, \"description\", void 0);\n __decorate([\n Property(5)\n ], Pointer.prototype, \"markerWidth\", void 0);\n return Pointer;\n}(ChildProperty));\nexport { Pointer };\n/**\n * Configures an axis in a gauge.\n */\nvar Axis = /** @class */ (function (_super) {\n __extends(Axis, _super);\n function Axis() {\n /**\n * Specifies the minimum value of an axis.\n * @aspDefaultValueIgnore\n * @default null\n */\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** @private */\n _this.visibleLabels = [];\n return _this;\n }\n __decorate([\n Property(null)\n ], Axis.prototype, \"minimum\", void 0);\n __decorate([\n Property(null)\n ], Axis.prototype, \"maximum\", void 0);\n __decorate([\n Property(null)\n ], Axis.prototype, \"radius\", void 0);\n __decorate([\n Complex({}, Line)\n ], Axis.prototype, \"lineStyle\", void 0);\n __decorate([\n Collection([{}], Range)\n ], Axis.prototype, \"ranges\", void 0);\n __decorate([\n Collection([{}], Pointer)\n ], Axis.prototype, \"pointers\", void 0);\n __decorate([\n Collection([{}], Annotation)\n ], Axis.prototype, \"annotations\", void 0);\n __decorate([\n Complex({ width: 2, height: 10 }, Tick)\n ], Axis.prototype, \"majorTicks\", void 0);\n __decorate([\n Complex({ width: 2, height: 5 }, Tick)\n ], Axis.prototype, \"minorTicks\", void 0);\n __decorate([\n Property(200)\n ], Axis.prototype, \"startAngle\", void 0);\n __decorate([\n Property(160)\n ], Axis.prototype, \"endAngle\", void 0);\n __decorate([\n Property('ClockWise')\n ], Axis.prototype, \"direction\", void 0);\n __decorate([\n Property(null)\n ], Axis.prototype, \"background\", void 0);\n __decorate([\n Complex({}, Label)\n ], Axis.prototype, \"labelStyle\", void 0);\n return Axis;\n}(ChildProperty));\nexport { Axis };\n","import { stringToNumber, getLocationFromAngle, getFontStyle } from '../utils/helper';\nimport { getElement, getTemplateFunction, measureElementRect } from '../utils/helper';\nimport { annotationRender } from '../model/constants';\nimport { createElement } from '@syncfusion/ej2-base';\n/**\n * Annotation Module handles the Annotation of the axis.\n */\nvar Annotations = /** @class */ (function () {\n /**\n * Constructor for Annotation module.\n * @private.\n */\n function Annotations(gauge) {\n this.gauge = gauge;\n this.elementId = gauge.element.id;\n }\n /**\n * Method to render the annotation for circular gauge.\n */\n Annotations.prototype.renderAnnotation = function (axis, index) {\n var _this = this;\n var element = createElement('div', {\n id: this.elementId + '_Annotations_' + index\n });\n var parentElement = getElement(this.elementId + '_Secondary_Element');\n axis.annotations.map(function (annotation, annotationIndex) {\n if (annotation.content !== null) {\n _this.createTemplate(element, annotationIndex, index);\n }\n });\n if (parentElement && element.childElementCount) {\n parentElement.appendChild(element);\n }\n };\n /**\n * Method to create annotation template for circular gauge.\n */\n Annotations.prototype.createTemplate = function (element, annotationIndex, axisIndex) {\n var axis = this.gauge.axes[axisIndex];\n var annotation = axis.annotations[annotationIndex];\n var childElement = createElement('div', {\n id: this.elementId + '_Axis_' + axisIndex + '_Annotation_' + annotationIndex,\n styles: 'position: absolute; z-index:' + annotation.zIndex + ';transform:' +\n (annotation.autoAngle ? 'rotate(' + (annotation.angle - 90) + 'deg)' : 'rotate(0deg)') + ';'\n });\n var argsData = {\n cancel: false, name: annotationRender, content: annotation.content,\n axis: axis, annotation: annotation, textStyle: annotation.textStyle\n };\n this.gauge.trigger(annotationRender, argsData);\n var templateFn;\n var templateElement;\n if (!argsData.cancel) {\n templateFn = getTemplateFunction(argsData.content);\n if (templateFn && templateFn(axis).length) {\n templateElement = templateFn(axis);\n while (templateElement.length > 0) {\n childElement.appendChild(templateElement[0]);\n }\n }\n else {\n childElement.appendChild(createElement('div', {\n innerHTML: argsData.content,\n styles: getFontStyle(argsData.textStyle)\n }));\n }\n this.updateLocation(childElement, axis, annotation);\n element.appendChild(childElement);\n }\n };\n /**\n * Method to update the annotation location for circular gauge.\n */\n Annotations.prototype.updateLocation = function (element, axis, annotation) {\n var location = getLocationFromAngle(annotation.angle - 90, stringToNumber(annotation.radius, axis.currentRadius), this.gauge.midPoint);\n var elementRect = measureElementRect(element);\n element.style.left = (location.x - (elementRect.width / 2)) + 'px';\n element.style.top = (location.y - (elementRect.height / 2)) + 'px';\n element.setAttribute('aria-label', annotation.description || 'Annotation');\n };\n /**\n * Get module name.\n */\n Annotations.prototype.getModuleName = function () {\n // Returns te module name\n return 'Annotations';\n };\n /**\n * To destroy the annotation.\n * @return {void}\n * @private\n */\n Annotations.prototype.destroy = function (gauge) {\n // Destroy method performed here\n };\n return Annotations;\n}());\nexport { Annotations };\n","/**\n * Specifies the gauge constant value\n */\n/** @private */\nexport var loaded = 'loaded';\n/** @private */\nexport var load = 'load';\n/** @private */\nexport var animationComplete = 'animationComplete';\n/** @private */\nexport var axisLabelRender = 'axisLabelRender';\n/** @private */\nexport var tooltipRender = 'tooltipRender';\n/** @private */\nexport var annotationRender = 'annotationRender';\n/** @private */\nexport var gaugeMouseMove = 'gaugeMouseMove';\n/** @private */\nexport var gaugeMouseLeave = 'gaugeMouseLeave';\n/** @private */\nexport var gaugeMouseDown = 'gaugeMouseDown';\n/** @private */\nexport var gaugeMouseUp = 'gaugeMouseUp';\n/** @private */\nexport var dragStart = 'dragStart';\n/** @private */\nexport var dragMove = 'dragMove';\n/** @private */\nexport var dragEnd = 'dragEnd';\n/** @private */\nexport var resized = 'resized';\n","import { createElement, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { Tooltip } from '@syncfusion/ej2-popups';\nimport { getPointer, getTemplateFunction } from '../utils/helper';\nimport { getAngleFromValue, getLabelFormat, getElement, getLocationFromAngle } from '../utils/helper';\nimport { tooltipRender } from '../model/constants';\n/**\n * Tooltip Module handles the tooltip of the circular gauge\n */\nvar GaugeTooltip = /** @class */ (function () {\n /**\n * Constructor for Tooltip module.\n * @private.\n */\n function GaugeTooltip(gauge) {\n this.gauge = gauge;\n this.element = gauge.element;\n this.tooltip = gauge.tooltip;\n this.textStyle = this.tooltip.textStyle;\n this.borderStyle = this.tooltip.border;\n this.ejTooltip = new Tooltip({\n opensOn: 'custom',\n beforeRender: this.onBeforeRender.bind(this),\n beforeOpen: this.tooltipCustomization.bind(this),\n openDelay: 0, closeDelay: 1000\n });\n this.ejTooltip.appendTo(this.element);\n }\n /**\n * Method to render the tooltip for circular gauge.\n */\n GaugeTooltip.prototype.renderTooltip = function (target) {\n var currentPointer = getPointer(target.id, this.gauge);\n var element;\n var angle;\n this.currentAxis = this.gauge.axes[currentPointer.axisIndex];\n this.currentPointer = (this.currentAxis.pointers)[currentPointer.pointerIndex];\n angle = getAngleFromValue(this.currentPointer.currentValue, this.currentAxis.visibleRange.max, this.currentAxis.visibleRange.min, this.currentAxis.startAngle, this.currentAxis.endAngle, this.currentAxis.direction === 'ClockWise') % 360;\n element = this.appendTargetElement(angle);\n if (element.getAttribute('data-tooltip-id') === null) {\n this.findPosition(angle);\n this.ejTooltip.open(element);\n }\n };\n /**\n * Method to append the target element for tooltip\n */\n GaugeTooltip.prototype.appendTargetElement = function (angle) {\n var location = getLocationFromAngle(angle, this.currentAxis.currentRadius, this.gauge.midPoint);\n var element = getElement(this.element.id + '_GaugeTooltip');\n if (element) {\n element.style.left = location.x + 'px';\n element.style.top = location.y + 'px';\n }\n else {\n element = createElement('div', {\n id: this.element.id + '_GaugeTooltip',\n styles: 'position:absolute;left:' + location.x + 'px;top:' + location.y +\n 'px;width:2px;height:2px;background:transparent'\n });\n getElement(this.element.id + '_Secondary_Element').appendChild(element);\n }\n return element;\n };\n /**\n * Method to find the position of the tooltip anchor for circular gauge.\n */\n GaugeTooltip.prototype.findPosition = function (angle) {\n switch (true) {\n case (angle >= 0 && angle <= 45):\n this.ejTooltip.position = 'RightBottom';\n break;\n case (angle >= 45 && angle < 90):\n this.ejTooltip.position = 'BottomRight';\n break;\n case (angle >= 90 && angle < 135):\n this.ejTooltip.position = 'BottomLeft';\n break;\n case (angle >= 135 && angle < 180):\n this.ejTooltip.position = 'LeftBottom';\n break;\n case (angle >= 180 && angle < 225):\n this.ejTooltip.position = 'LeftTop';\n break;\n case (angle >= 225 && angle < 270):\n this.ejTooltip.position = 'TopLeft';\n break;\n case (angle >= 270 && angle < 315):\n this.ejTooltip.position = 'TopRight';\n break;\n default:\n this.ejTooltip.position = 'RightTop';\n break;\n }\n this.ejTooltip.dataBind();\n };\n /**\n * Method to perform the tooltip for circular gauge.\n */\n GaugeTooltip.prototype.onBeforeRender = function (args) {\n var tooltipFormat = this.gauge.tooltip.format || this.currentAxis.labelStyle.format;\n var customLabelFormat = tooltipFormat && tooltipFormat.match('{value}') !== null;\n var format = this.gauge.intl.getNumberFormat({\n format: getLabelFormat(tooltipFormat), useGrouping: this.gauge.useGroupingSeparator\n });\n var content = customLabelFormat ?\n tooltipFormat.replace(new RegExp('{value}', 'g'), format(this.currentPointer.currentValue)) :\n format(this.currentPointer.currentValue);\n content = this.tooltip.template ?\n getTemplateFunction(this.tooltip.template)(this.currentAxis)[0] : content;\n var argsData = {\n cancel: false, name: tooltipRender,\n content: content,\n border: this.borderStyle,\n axis: this.currentAxis, pointer: this.currentPointer,\n textStyle: this.textStyle\n };\n this.gauge.trigger(tooltipRender, argsData);\n this.borderStyle = argsData.border;\n args.cancel = argsData.cancel;\n this.ejTooltip.content = argsData.content;\n this.textStyle = argsData.textStyle;\n this.ejTooltip.dataBind();\n };\n /**\n * Method to customize the tooltip elements for circular gauge.\n */\n GaugeTooltip.prototype.tooltipCustomization = function (args) {\n var font = this.textStyle;\n var borderColor = this.borderStyle.color;\n var border = this.borderStyle.width;\n var pointerSize = 5;\n var arrowWidth = (pointerSize - border) + 'px';\n var outerWidth;\n var innerWidth;\n args.element.classList.remove('e-popup-close');\n args.element.classList.add('e-popup-open');\n var arrowEle = args.element.querySelector('.e-arrow-tip');\n setStyleAttribute(args.element, {\n 'backgroundColor': this.tooltip.fill, 'borderColor': borderColor || '#212121',\n 'borderWidth': border + 'px'\n });\n setStyleAttribute(args.element.querySelector('.e-tip-content'), {\n 'color': font.color, 'fontFamily': font.fontFamily, 'fontSize': font.size,\n 'fontWeight': font.fontWeight, 'opacity': font.opacity.toString(), 'fontStyle': font.fontStyle\n });\n setStyleAttribute(args.element.querySelector('.e-arrow-tip'), {\n 'width': 2 * (pointerSize + border) + 'px', 'height': pointerSize + border + 'px'\n });\n if (arrowEle.classList.contains('e-tip-top')) {\n pointerSize = args.element.querySelector('.e-arrow-tip').offsetHeight;\n outerWidth = pointerSize + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-outer'), {\n 'borderRightColor': 'transparent', 'borderLeftColor': 'transparent', 'borderBottomColor': borderColor,\n 'borderLeftWidth': outerWidth, 'borderRightWidth': outerWidth, 'borderBottomWidth': outerWidth,\n });\n innerWidth = (pointerSize - border) + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-inner'), {\n 'borderRightColor': 'transparent', 'borderLeftColor': 'transparent', 'borderBottomColor': this.tooltip.fill,\n 'borderLeftWidth': innerWidth, 'borderRightWidth': innerWidth, 'borderBottomWidth': innerWidth,\n 'left': border + 'px', 'top': border + 'px', 'display': 'none'\n });\n }\n else if (arrowEle.classList.contains('e-tip-bottom')) {\n pointerSize = args.element.querySelector('.e-arrow-tip').offsetHeight;\n outerWidth = pointerSize + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-outer'), {\n 'borderRightColor': 'transparent', 'borderLeftColor': 'transparent', 'borderTopColor': borderColor,\n 'borderLeftWidth': outerWidth, 'borderRightWidth': outerWidth, 'borderTopWidth': outerWidth,\n });\n innerWidth = (pointerSize - border) + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-inner'), {\n 'borderRightColor': 'transparent', 'borderLeftColor': 'transparent', 'borderTopColor': this.tooltip.fill,\n 'borderLeftWidth': innerWidth, 'borderRightWidth': innerWidth, 'borderTopWidth': innerWidth,\n 'left': border + 'px', 'top': '0', 'display': 'none'\n });\n }\n else if (arrowEle.classList.contains('e-tip-left')) {\n setStyleAttribute(args.element.querySelector('.e-arrow-tip'), {\n 'width': pointerSize + border + 'px', 'height': 2 * (pointerSize + border) + 'px'\n });\n pointerSize = args.element.querySelector('.e-arrow-tip').offsetWidth;\n outerWidth = pointerSize + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-outer'), {\n 'borderTopColor': 'transparent', 'borderBottomColor': 'transparent', 'borderRightColor': borderColor,\n 'borderTopWidth': outerWidth, 'borderBottomWidth': outerWidth, 'borderRightWidth': outerWidth\n });\n innerWidth = (pointerSize - border) + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-inner'), {\n 'borderTopColor': 'transparent', 'borderBottomColor': 'transparent', 'borderRightColor': this.tooltip.fill,\n 'borderTopWidth': innerWidth, 'borderBottomWidth': innerWidth, 'borderRightWidth': innerWidth,\n 'left': border + 'px', 'top': border + 'px', 'display': 'none'\n });\n }\n else {\n setStyleAttribute(args.element.querySelector('.e-arrow-tip'), {\n 'width': (pointerSize + border) + 'px', 'height': 2 * (pointerSize + border) + 'px'\n });\n pointerSize = args.element.querySelector('.e-arrow-tip').offsetWidth;\n outerWidth = pointerSize + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-outer'), {\n 'borderTopColor': 'transparent', 'borderBottomColor': 'transparent', 'borderLeftColor': borderColor,\n 'borderTopWidth': outerWidth, 'borderBottomWidth': outerWidth, 'borderLeftWidth': outerWidth\n });\n innerWidth = (pointerSize - border) + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-inner'), {\n 'borderTopColor': 'transparent', 'borderBottomColor': 'transparent', 'borderLeftColor': this.tooltip.fill,\n 'borderTopWidth': innerWidth, 'borderBottomWidth': innerWidth, 'borderLeftWidth': innerWidth,\n 'left': (border <= 1 ? 0 : -1) + 'px', 'top': border + 'px', 'display': 'none'\n });\n }\n this.ejTooltip.refresh(args.target);\n setStyleAttribute(args.element, {\n 'display': 'block', 'transitionProperty': 'left,top',\n 'transitionDuration': this.tooltip.enableAnimation ? '1000ms' : '0ms'\n });\n };\n /**\n * Get module name.\n */\n GaugeTooltip.prototype.getModuleName = function () {\n // Returns te module name\n return 'Tooltip';\n };\n /**\n * To destroy the tooltip.\n * @return {void}\n * @private\n */\n GaugeTooltip.prototype.destroy = function (gauge) {\n // Destroy method performed here\n };\n return GaugeTooltip;\n}());\nexport { GaugeTooltip };\n","import { getLocationFromAngle, PathOption, stringToNumber, TextOption, textElement, appendPath, toPixel } from '../utils/helper';\nimport { getAngleFromValue, isCompleteAngle, getPathArc, getRangeColor } from '../utils/helper';\nimport { getRangePalette } from '../model/theme';\n/**\n * Specifies the Axis rendering for circular gauge\n */\nvar AxisRenderer = /** @class */ (function () {\n /**\n * Constructor for axis renderer.\n * @private.\n */\n function AxisRenderer(gauge) {\n this.gauge = gauge;\n }\n /**\n * Method to render the axis element of the circular gauge.\n * @return {void}\n * @private\n */\n AxisRenderer.prototype.drawAxisOuterLine = function (axis, index, element, gauge) {\n var background = axis.background;\n this.setRangeColor(axis);\n if (background !== null) {\n appendPath(new PathOption(gauge.element.id + '_AxisOuterLine_' + index, background, 0, 'transparent', null, '0', getPathArc(gauge.midPoint, 0, 360, (Math.min(axis.rect.width, axis.rect.height) / 2)), '', 'pointer-events:none;'), element, gauge);\n }\n };\n /**\n * Method to render the axis line of the circular gauge.\n * @return {void}\n * @private\n */\n AxisRenderer.prototype.drawAxisLine = function (axis, index, element, gauge) {\n var startAngle = axis.startAngle;\n var endAngle = axis.endAngle;\n if (axis.lineStyle.width > 0) {\n startAngle = !isCompleteAngle(startAngle, endAngle) ? startAngle : [0, endAngle = 360][0];\n appendPath(new PathOption(gauge.element.id + '_AxisLine_' + index, 'transparent', axis.lineStyle.width, axis.lineStyle.color, null, axis.lineStyle.dashArray, getPathArc(gauge.midPoint, startAngle - 90, endAngle - 90, axis.currentRadius), '', 'pointer-events:none;'), element, gauge);\n }\n };\n /**\n * Method to render the axis labels of the circular gauge.\n * @return {void}\n * @private\n */\n AxisRenderer.prototype.drawAxisLabels = function (axis, index, element, gauge) {\n var labelElement = gauge.renderer.createGroup({\n id: gauge.element.id + '_Axis_Labels_' + index\n });\n var min = axis.visibleRange.min;\n var max = axis.visibleRange.max;\n var labelCollection = axis.visibleLabels;\n var location;\n var style = axis.labelStyle;\n var anchor;\n var angle;\n var label;\n var radius = axis.currentRadius;\n var labelPadding = 10;\n if (style.position === 'Outside') {\n radius += (axis.nearSize - (axis.maxLabelSize.height + axis.lineStyle.width / 2)) +\n (labelPadding / 2);\n }\n else {\n radius -= (axis.farSize - (axis.maxLabelSize.height + axis.lineStyle.width / 2) +\n (style.autoAngle ? labelPadding : 0));\n }\n for (var i = 0, length_1 = labelCollection.length; i < length_1; i++) {\n if ((i === 0 && style.hiddenLabel === 'First') ||\n (i === (length_1 - 1) && style.hiddenLabel === 'Last')) {\n continue;\n }\n label = labelCollection[i];\n angle = Math.round(getAngleFromValue(label.value, max, min, axis.startAngle, axis.endAngle, axis.direction === 'ClockWise'));\n location = getLocationFromAngle(angle, radius, gauge.midPoint);\n anchor = this.findAnchor(location, style, angle, label);\n textElement(new TextOption(gauge.element.id + '_Axis_' + index + '_Label_' + i, location.x, location.y, anchor, label.text, style.autoAngle ? 'rotate(' + (angle + 90) + ',' + (location.x) + ',' + location.y + ')' : '', 'auto'), style.font, style.useRangeColor ? getRangeColor(label.value, axis.ranges, style.font.color) : style.font.color, labelElement, 'pointer-events:none;');\n }\n element.appendChild(labelElement);\n };\n /**\n * Method to find the anchor of the axis label.\n * @private\n */\n AxisRenderer.prototype.findAnchor = function (location, style, angle, label) {\n if (style.autoAngle) {\n return 'middle';\n }\n var anchor = style.position === 'Inside' ?\n ((angle > 120 && angle < 240) ? 'start' : ((300 < angle || angle < 60) ? 'end' : 'middle')) :\n ((angle > 120 && angle < 240) ? 'end' : ((300 < angle || angle < 60) ? 'start' : 'middle'));\n location.y += style.position === 'Inside' ?\n ((angle >= 240 && angle <= 300) ? (label.size.height / 2) :\n (angle >= 60 && angle <= 120) ? 0 : label.size.height / 4) :\n ((angle >= 240 && angle <= 300) ? 0 :\n (angle >= 60 && angle <= 120) ? label.size.height / 2 : label.size.height / 4);\n return anchor;\n };\n /**\n * Method to render the axis minor tick lines of the circular gauge.\n * @return {void}\n * @private\n */\n AxisRenderer.prototype.drawMinorTickLines = function (axis, index, element, gauge) {\n var minorTickElements = gauge.renderer.createGroup({\n id: gauge.element.id + '_Axis_MinorTickLines_' + index\n });\n var minorLineStyle = axis.minorTicks;\n var minorInterval = minorLineStyle.interval !== null ?\n minorLineStyle.interval : (axis.visibleRange.interval / 2);\n var isRangeColor = minorLineStyle.useRangeColor;\n if (minorLineStyle.width && minorLineStyle.height && minorInterval) {\n for (var i = axis.visibleRange.min, max = axis.visibleRange.max; i <= max; i += minorInterval) {\n if (this.majorValues.indexOf(+i.toFixed(3)) < 0) {\n appendPath(new PathOption(gauge.element.id + '_Axis_Minor_TickLine_' + index + '_' + i, 'transparent', minorLineStyle.width, isRangeColor ? getRangeColor(i, axis.ranges, minorLineStyle.color) : minorLineStyle.color, null, '0', this.calculateTicks(i, minorLineStyle, axis), '', 'pointer-events:none;'), minorTickElements, gauge);\n }\n }\n element.appendChild(minorTickElements);\n }\n };\n /**\n * Method to render the axis major tick lines of the circular gauge.\n * @return {void}\n * @private\n */\n AxisRenderer.prototype.drawMajorTickLines = function (axis, index, element, gauge) {\n var majorTickElements = gauge.renderer.createGroup({\n id: gauge.element.id + '_Axis_MajorTickLines_' + index\n });\n var majorLineStyle = axis.majorTicks;\n var isRangeColor = majorLineStyle.useRangeColor;\n this.majorValues = [];\n if (majorLineStyle.width && majorLineStyle.height && axis.visibleRange.interval) {\n for (var i = axis.visibleRange.min, max = axis.visibleRange.max, interval = axis.visibleRange.interval; i <= max; i += interval) {\n this.majorValues.push(+i.toFixed(3));\n appendPath(new PathOption(gauge.element.id + '_Axis_Major_TickLine_' + index + '_' + i, 'transparent', majorLineStyle.width, isRangeColor ? getRangeColor(i, axis.ranges, majorLineStyle.color) : majorLineStyle.color, null, '0', this.calculateTicks(i, majorLineStyle, axis), '', 'pointer-events:none;'), majorTickElements, gauge);\n }\n element.appendChild(majorTickElements);\n }\n };\n /**\n * Method to calcualte the tick elements for the circular gauge.\n * @return {void}\n * @private\n */\n AxisRenderer.prototype.calculateTicks = function (value, options, axis) {\n var axisLineWidth = (axis.lineStyle.width / 2) + options.offset;\n var isOutside = options.position === 'Outside';\n var angle = getAngleFromValue(value, axis.visibleRange.max, axis.visibleRange.min, axis.startAngle, axis.endAngle, axis.direction === 'ClockWise');\n var start = getLocationFromAngle(angle, axis.currentRadius +\n (isOutside ? axisLineWidth : -axisLineWidth), this.gauge.midPoint);\n var end = getLocationFromAngle(angle, axis.currentRadius +\n (isOutside ? axisLineWidth : -axisLineWidth) +\n (isOutside ? options.height : -options.height), this.gauge.midPoint);\n return 'M ' + start.x + ' ' + start.y + ' L ' + end.x + ' ' + end.y + ' ';\n };\n /**\n * Method to render the axis range of the circular gauge.\n * @return {void}\n * @private\n */\n AxisRenderer.prototype.drawAxisRange = function (axis, index, element, gauge) {\n var _this = this;\n var rangeElement = gauge.renderer.createGroup({\n id: gauge.element.id + '_Axis_Ranges_' + index\n });\n var startAngle;\n var endAngle;\n var isClockWise = axis.direction === 'ClockWise';\n var startValue;\n var endValue;\n var min = axis.visibleRange.min;\n var max = axis.visibleRange.max;\n var startWidth;\n var endWidth;\n axis.ranges.map(function (range, rangeIndex) {\n _this.calculateRangeRadius(axis, range);\n startValue = Math.min(Math.max(range.start, min), range.end);\n endValue = Math.min(Math.max(range.start, range.end), max);\n if (startValue !== endValue) {\n startAngle = getAngleFromValue(startValue, max, min, axis.startAngle, axis.endAngle, isClockWise);\n endAngle = getAngleFromValue(endValue, max, min, axis.startAngle, axis.endAngle, isClockWise);\n if (range.startWidth.length > 0) {\n startWidth = toPixel(range.startWidth, range.currentRadius);\n }\n else {\n startWidth = range.startWidth;\n }\n if (range.endWidth.length > 0) {\n endWidth = toPixel(range.endWidth, range.currentRadius);\n }\n else {\n endWidth = range.endWidth;\n }\n endAngle = isClockWise ? endAngle : [startAngle, startAngle = endAngle][0];\n endWidth = isClockWise ? endWidth : [startWidth, startWidth = endWidth][0];\n appendPath(new PathOption(gauge.element.id + '_Axis_' + index + '_Range_' + rangeIndex, range.rangeColor, 0, range.rangeColor, 1, '0', getPathArc(gauge.midPoint, Math.floor(startAngle), Math.ceil(endAngle), range.currentRadius, startWidth, endWidth), '', 'pointer-events:none;'), rangeElement, gauge);\n }\n });\n element.appendChild(rangeElement);\n };\n /**\n * Method to calculate the radius of the axis range.\n * @return {void}\n */\n AxisRenderer.prototype.calculateRangeRadius = function (axis, range) {\n var radius = range.radius !== null ? range.radius : '100%';\n range.currentRadius = stringToNumber(radius, axis.currentRadius);\n };\n /**\n * Method to get the range color of the circular gauge.\n * @return {void}\n * @private\n */\n AxisRenderer.prototype.setRangeColor = function (axis) {\n var rangeColors = getRangePalette(this.gauge.theme);\n axis.ranges.map(function (range, index) {\n range.rangeColor = range.color ? range.color : rangeColors[index % rangeColors.length];\n });\n };\n return AxisRenderer;\n}());\nexport { AxisRenderer };\n","import { stringToNumber, Size, calculateShapes, appendPath } from '../utils/helper';\nimport { getLocationFromAngle, PathOption } from '../utils/helper';\nimport { linear, getAngleFromValue, getCompleteArc } from '../utils/helper';\nimport { Animation } from '@syncfusion/ej2-base';\nimport { animationComplete } from '../model/constants';\n/**\n * Specifies the Axis rendering for circular gauge\n */\nvar PointerRenderer = /** @class */ (function () {\n /**\n * Constructor for pointer renderer.\n * @private.\n */\n function PointerRenderer(gauge) {\n this.gauge = gauge;\n }\n /**\n * Method to render the axis pointers of the circular gauge.\n * @return {void}\n * @private\n */\n PointerRenderer.prototype.drawPointers = function (axis, axisIndex, element, gauge, animate) {\n var _this = this;\n if (animate === void 0) { animate = true; }\n var pointerElement = gauge.renderer.createGroup({\n id: gauge.element.id + '_Axis_Pointers_' + axisIndex\n });\n var childElement;\n var range;\n axis.pointers.map(function (pointer, pointerIndex) {\n range = axis.visibleRange;\n pointer.pathElement = [];\n _this.calculatePointerRadius(axis, pointer);\n childElement = gauge.renderer.createGroup({\n id: gauge.element.id + '_Axis_' + axisIndex + '_Pointer_' + pointerIndex\n });\n _this['draw' + pointer.type + 'Pointer'](axis, axisIndex, pointerIndex, childElement, gauge);\n _this.setPointerValue(axis, pointer, pointer.currentValue);\n pointerElement.appendChild(childElement);\n if (animate) {\n _this.doPointerAnimation(pointer, axis);\n }\n });\n element.appendChild(pointerElement);\n };\n /**\n * Measure the pointer length of the circular gauge.\n * @return {void}\n */\n PointerRenderer.prototype.calculatePointerRadius = function (axis, pointer) {\n var padding = 5;\n pointer.currentRadius = pointer.radius === null ?\n (axis.currentRadius - (axis.farSize + padding)) :\n stringToNumber(pointer.radius, axis.currentRadius);\n };\n /**\n * Method to render the needle pointer of the ciruclar gauge.\n * @return {void}\n */\n PointerRenderer.prototype.drawNeedlePointer = function (axis, axisIndex, index, parentElement, gauge) {\n var pointer = axis.pointers[index];\n var pointerRadius;\n var location;\n var direction;\n var mid = gauge.midPoint;\n var width = pointer.pointerWidth / 2;\n var rectDirection;\n // To render the needle\n location = getLocationFromAngle(0, pointer.currentRadius, mid);\n direction = 'M ' + mid.x + ' ' + (mid.y - width) + ' L ' + (location.x) + ' ' + mid.y +\n ' L ' + (mid.x) + ' ' + (mid.y + width) + ' Z';\n pointer.pathElement.push(appendPath(new PathOption(gauge.element.id + '_Axis_' + axisIndex + '_Pointer_Needle_' + index, pointer.color, pointer.border.width, pointer.border.color, null, '0', direction), parentElement, gauge));\n pointerRadius = stringToNumber(pointer.needleTail.length, pointer.currentRadius);\n // To render the rect element for touch\n rectDirection = 'M ' + mid.x + ' ' + (mid.y - width) + ' L ' + (location.x) + ' ' + (mid.y - width) +\n ' L ' + location.x + ' ' + (mid.y + width) + ' L ' + mid.x + ' ' + (mid.y + width);\n // To render the needle tail\n if (pointerRadius) {\n location = getLocationFromAngle(180, pointerRadius, gauge.midPoint);\n direction = 'M ' + mid.x + ' ' + (mid.y - width) +\n ' L ' + (location.x) + ' ' + (mid.y - width) +\n ' L ' + (location.x) + ' ' + (mid.y + width) +\n ' L ' + (mid.x) + ' ' + (mid.y + width) + ' Z';\n pointer.pathElement.push(appendPath(new PathOption(gauge.element.id + '_Axis_' + axisIndex + '_Pointer_NeedleTail_' + index, pointer.needleTail.color, pointer.needleTail.border.width, pointer.needleTail.border.color, null, '0', direction), parentElement, gauge));\n rectDirection += ' L ' + location.x + ' ' + (mid.y + width) + ' L ' + location.x + ' ' + (mid.y - width);\n }\n // To render the cap\n if (pointer.cap.radius) {\n pointer.pathElement.push(appendPath(calculateShapes(mid, 'Circle', new Size(pointer.cap.radius * 2, pointer.cap.radius * 2), '', new PathOption(gauge.element.id + '_Axis_' + axisIndex + '_Pointer_NeedleCap_' + index, pointer.cap.color, pointer.cap.border.width, pointer.cap.border.color, null, '0', '', '')), parentElement, gauge, 'Ellipse'));\n }\n pointer.pathElement.push(appendPath(new PathOption(gauge.element.id + '_Axis_' + axisIndex + '_Pointer_NeedleRect_' + index, 'transparent', 0, 'transpanret', null, '0', rectDirection + ' Z'), parentElement, gauge));\n };\n /**\n * Method to set the pointer value of the circular gauge.\n * @return {void}\n * @private\n */\n PointerRenderer.prototype.setPointerValue = function (axis, pointer, value) {\n var location = this.gauge.midPoint;\n var isClockWise = axis.direction === 'ClockWise';\n var startAngle = getAngleFromValue(axis.visibleRange.min, axis.visibleRange.max, axis.visibleRange.min, axis.startAngle, axis.endAngle, isClockWise);\n var endAngle = getAngleFromValue(value, axis.visibleRange.max, axis.visibleRange.min, axis.startAngle, axis.endAngle, isClockWise);\n endAngle = isClockWise ? endAngle : [startAngle, startAngle = endAngle][0];\n pointer.pathElement.map(function (element) {\n if (pointer.type === 'RangeBar') {\n element.setAttribute('d', getCompleteArc(location, startAngle, endAngle, pointer.currentRadius, (pointer.currentRadius - pointer.pointerWidth)));\n }\n else {\n element.setAttribute('transform', 'rotate(' + getAngleFromValue(value, axis.visibleRange.max, axis.visibleRange.min, axis.startAngle, axis.endAngle, isClockWise) + ',' + location.x + ',' + location.y + ')');\n }\n element.setAttribute('aria-label', pointer.description || 'Pointer:' + value.toString());\n });\n };\n /**\n * Method to render the marker pointer of the ciruclar gauge.\n * @return {void}\n */\n PointerRenderer.prototype.drawMarkerPointer = function (axis, axisIndex, index, parentElement, gauge) {\n var pointer = axis.pointers[index];\n var location = getLocationFromAngle(0, pointer.currentRadius, gauge.midPoint);\n pointer.pathElement.push(appendPath(calculateShapes(location, pointer.markerShape, new Size(pointer.markerWidth, pointer.markerHeight), pointer.imageUrl, new PathOption(gauge.element.id + '_Axis_' + axisIndex + '_Pointer_Marker_' + index, pointer.color, pointer.border.width, pointer.border.color, null, '0', '', '')), parentElement, gauge, pointer.markerShape === 'Circle' ? 'Ellipse' : (pointer.markerShape === 'Image' ? 'Image' : 'Path')));\n };\n /**\n * Method to render the range bar pointer of the ciruclar gauge.\n * @return {void}\n */\n PointerRenderer.prototype.drawRangeBarPointer = function (axis, axisIndex, index, parentElement, gauge) {\n var pointer = axis.pointers[index];\n pointer.pathElement.push(appendPath(new PathOption(gauge.element.id + '_Axis_' + axisIndex + '_Pointer_RangeBar_' + index, pointer.color, pointer.border.width, pointer.border.color, 1, '0', ''), parentElement, gauge));\n };\n /**\n * Method to perform the animation of the pointer in circular gauge.\n * @return {void}\n */\n PointerRenderer.prototype.doPointerAnimation = function (pointer, axis) {\n var _this = this;\n var startValue = axis.visibleRange.min;\n var endValue = pointer.currentValue;\n if (pointer.animation.enable && startValue !== endValue && this.gauge.animatePointer) {\n pointer.pathElement.map(function (element) {\n if (pointer.type === 'RangeBar') {\n _this.performRangeBarAnimation(element, startValue, endValue, axis, pointer, pointer.currentRadius, (pointer.currentRadius - pointer.pointerWidth));\n }\n else {\n _this.performNeedleAnimation(element, startValue, endValue, axis, pointer, pointer.currentRadius, (pointer.currentRadius - pointer.pointerWidth));\n }\n });\n }\n };\n /**\n * Perform the needle and marker pointer animation for circular gauge.\n * @return {void}\n * @private\n */\n PointerRenderer.prototype.performNeedleAnimation = function (element, start, end, axis, pointer, radius, innerRadius) {\n var _this = this;\n var isClockWise = axis.direction === 'ClockWise';\n var startAngle = getAngleFromValue(start, axis.visibleRange.max, axis.visibleRange.min, axis.startAngle, axis.endAngle, isClockWise);\n var pointAngle = getAngleFromValue(end, axis.visibleRange.max, axis.visibleRange.min, axis.startAngle, axis.endAngle, isClockWise);\n var endAngle = startAngle > pointAngle ? (pointAngle + 360) : pointAngle;\n var sweepAngle;\n new Animation({}).animate(element, {\n duration: pointer.animation.duration,\n progress: function (args) {\n sweepAngle = (start < end || Math.round(startAngle) === Math.round(endAngle)) ?\n isClockWise ? (endAngle - startAngle) : (endAngle - startAngle - 360) :\n isClockWise ? (endAngle - startAngle - 360) : (endAngle - startAngle);\n element.style.animation = 'None';\n element.setAttribute('transform', 'rotate(' + linear(args.timeStamp, startAngle, sweepAngle, args.duration) + ',' +\n _this.gauge.midPoint.x.toString() + ',' + _this.gauge.midPoint.y.toString() + ')');\n },\n end: function (model) {\n _this.setPointerValue(axis, pointer, end);\n if (pointer.type === 'Marker' || (element.id.indexOf('_Pointer_NeedleCap') >= 0)) {\n _this.gauge.trigger(animationComplete, { axis: axis, pointer: pointer });\n }\n }\n });\n };\n /**\n * Perform the range bar pointer animation for circular gauge.\n * @return {void}\n * @private\n */\n PointerRenderer.prototype.performRangeBarAnimation = function (element, start, end, axis, pointer, radius, innerRadius) {\n var _this = this;\n var isClockWise = axis.direction === 'ClockWise';\n var startAngle = getAngleFromValue(start, axis.visibleRange.max, axis.visibleRange.min, axis.startAngle, axis.endAngle, isClockWise);\n var minAngle = getAngleFromValue(axis.visibleRange.min, axis.visibleRange.max, axis.visibleRange.min, axis.startAngle, axis.endAngle, isClockWise);\n var pointAngle = getAngleFromValue(end, axis.visibleRange.max, axis.visibleRange.min, axis.startAngle, axis.endAngle, isClockWise);\n var sweepAngle;\n var endAngle = startAngle > pointAngle ? (pointAngle + 360) : pointAngle;\n new Animation({}).animate(element, {\n duration: pointer.animation.duration,\n progress: function (arg) {\n element.style.animation = 'None';\n sweepAngle = (start < end || Math.round(startAngle) === Math.round(endAngle)) ?\n isClockWise ? (endAngle - startAngle) : (endAngle - startAngle - 360) :\n isClockWise ? (endAngle - startAngle - 360) : (endAngle - startAngle);\n if (isClockWise) {\n element.setAttribute('d', getCompleteArc(_this.gauge.midPoint, minAngle, linear(arg.timeStamp, startAngle, sweepAngle, arg.duration) + 0.0001, radius, innerRadius));\n }\n else {\n element.setAttribute('d', getCompleteArc(_this.gauge.midPoint, linear(arg.timeStamp, startAngle, sweepAngle, arg.duration), minAngle + 0.0001, radius, innerRadius));\n }\n },\n end: function (model) {\n _this.setPointerValue(axis, pointer, end);\n _this.gauge.trigger(animationComplete, { axis: axis, pointer: pointer });\n }\n });\n };\n return PointerRenderer;\n}());\nexport { PointerRenderer };\n","import { createElement } from '@syncfusion/ej2-base';\nimport { calculateSum, VisibleLabels, measureText } from '../utils/helper';\nimport { Size, Rect, stringToNumber, getLabelFormat } from '../utils/helper';\nimport { axisLabelRender } from '../model/constants';\nimport { AxisRenderer } from './axis-renderer';\nimport { PointerRenderer } from './pointer-renderer';\n/**\n * Specifies the CircularGauge Axis Layout\n */\nvar labelPadding = 10;\nvar AxisLayoutPanel = /** @class */ (function () {\n function AxisLayoutPanel(gauge) {\n this.gauge = gauge;\n this.axisRenderer = new AxisRenderer(gauge);\n this.pointerRenderer = new PointerRenderer(gauge);\n }\n /**\n * Measure the calculate the axis size and radius.\n * @return {void}\n * @private\n */\n AxisLayoutPanel.prototype.measureAxis = function (rect) {\n this.measureAxisSize(this.gauge, rect);\n this.calculateAxesRadius();\n };\n /**\n * Measure to calculate the axis radius of the circular gauge.\n * @return {void}\n * @private\n */\n AxisLayoutPanel.prototype.calculateAxesRadius = function () {\n var totalRadius;\n var currentRadius;\n var rangeMaximumRadius = 0;\n for (var _i = 0, _a = this.gauge.axes; _i < _a.length; _i++) {\n var axis = _a[_i];\n totalRadius = (Math.min(axis.rect.width, axis.rect.height) / 2);\n currentRadius = axis.radius != null ? stringToNumber(axis.radius, totalRadius) : totalRadius;\n rangeMaximumRadius = Math.max.apply(Math, axis.ranges.map(function (value) {\n return value.radius ?\n (value.radius.indexOf('%') < 0 ? 100 : parseInt(value.radius, 10)) : 0;\n }));\n currentRadius = (rangeMaximumRadius > 100 && axis.radius == null) ?\n (currentRadius * 100) / rangeMaximumRadius : currentRadius;\n axis.currentRadius = currentRadius - axis.nearSize;\n axis.visibleRange.interval = this.calculateNumericInterval(axis, axis.rect);\n this.calculateVisibleLabels(axis);\n }\n };\n /**\n * Measure to calculate the axis size.\n * @return {void}\n * @private\n */\n AxisLayoutPanel.prototype.measureAxisSize = function (gauge, rect) {\n var _this = this;\n var sum;\n this.computeSize(gauge.axes, rect);\n gauge.axes.map(function (axis, index) {\n sum = calculateSum(index, _this.farSizes.length - 1, _this.farSizes);\n axis.rect = new Rect(rect.x + sum, rect.y + sum, rect.width - (sum * 2), rect.height - (sum * 2));\n });\n };\n /**\n * Calculate the axis values of the circular gauge.\n * @return {void}\n * @private\n */\n AxisLayoutPanel.prototype.calculateAxisValues = function (rect) {\n for (var _i = 0, _a = this.gauge.axes; _i < _a.length; _i++) {\n var axis = _a[_i];\n this.calculateVisibleRange(axis, rect);\n this.calculateVisibleLabels(axis);\n }\n };\n /**\n * Calculate the visible range of an axis.\n * @return {void}\n * @private\n */\n AxisLayoutPanel.prototype.calculateVisibleRange = function (axis, rect) {\n var interval = axis.majorTicks.interval;\n var minimumValue = Math.min(axis.minimum === null ? 0 : axis.minimum, axis.maximum);\n var maximumValue = Math.max(axis.minimum, axis.maximum === null ? 100 : axis.maximum);\n axis.pointers.map(function (pointer) {\n pointer.currentValue = pointer.value !== null ?\n pointer.value < minimumValue ? minimumValue : pointer.value > maximumValue ? maximumValue : pointer.value\n : minimumValue;\n minimumValue = axis.minimum === null ? Math.min(pointer.currentValue, minimumValue) : minimumValue;\n maximumValue = axis.maximum === null ? Math.max(pointer.currentValue, maximumValue) : maximumValue;\n });\n minimumValue = (minimumValue === maximumValue) ?\n (interval !== null ? minimumValue - interval : minimumValue - 1) : minimumValue;\n axis.visibleRange = { min: minimumValue, max: maximumValue, interval: interval };\n axis.visibleRange.interval = this.calculateNumericInterval(axis, rect);\n };\n /**\n * Calculate the numeric intervals of an axis range.\n * @return {void}\n * @private\n */\n AxisLayoutPanel.prototype.calculateNumericInterval = function (axis, rect) {\n if (axis.majorTicks.interval !== null) {\n return axis.majorTicks.interval;\n }\n var totalAngle = axis.endAngle - axis.startAngle;\n totalAngle = totalAngle <= 0 ? (totalAngle + 360) : totalAngle;\n return this.calculateNiceInterval(axis.visibleRange.max, axis.visibleRange.min, axis.currentRadius ? axis.currentRadius : (rect.width / 2), totalAngle);\n };\n /**\n * Calculate the nice interval of an axis range.\n * @return {void}\n * @private\n */\n AxisLayoutPanel.prototype.calculateNiceInterval = function (maxValue, minValue, radius, degree) {\n var delta = maxValue - minValue;\n var circumference = 2 * Math.PI * radius * (degree / 360);\n var desiredIntervalsCount = Math.max((circumference * ((0.533 * 3) / 100)), 1);\n var niceInterval = delta / desiredIntervalsCount;\n var minInterval = Math.pow(10, Math.floor(Math.log(niceInterval) / Math.log(10)));\n for (var _i = 0, _a = [10, 5, 2, 1]; _i < _a.length; _i++) {\n var interval = _a[_i];\n var currentInterval = minInterval * interval;\n if (desiredIntervalsCount < (delta / currentInterval)) {\n break;\n }\n niceInterval = currentInterval;\n }\n return niceInterval;\n };\n /**\n * Calculate the visible labels of an axis.\n * @return {void}\n * @private\n */\n AxisLayoutPanel.prototype.calculateVisibleLabels = function (axis) {\n var style = axis.labelStyle;\n var customLabelFormat = style.format && style.format.match('{value}') !== null;\n var format = this.gauge.intl.getNumberFormat({\n format: getLabelFormat(style.format), useGrouping: this.gauge.useGroupingSeparator\n });\n var argsData;\n axis.visibleLabels = [];\n for (var i = axis.visibleRange.min, interval = axis.visibleRange.interval, max = axis.visibleRange.max; (i <= max && interval); i += interval) {\n argsData = {\n cancel: false, name: axisLabelRender, axis: axis,\n text: customLabelFormat ? style.format.replace(new RegExp('{value}', 'g'), format(i)) :\n format(i),\n value: i\n };\n this.gauge.trigger(axisLabelRender, argsData);\n if (!argsData.cancel) {\n axis.visibleLabels.push(new VisibleLabels(argsData.text, i));\n }\n }\n this.getMaxLabelWidth(this.gauge, axis);\n };\n /**\n * Measure the axes available size.\n * @return {void}\n * @private\n */\n AxisLayoutPanel.prototype.computeSize = function (axes, rect) {\n var lineSize;\n var outerHeight;\n var innerHeight;\n var isMajorTickOutside;\n var isMinorTickOutside;\n var isLabelOutside;\n var axisPadding = 5;\n var majorTickOffset = 0;\n var minorTickOffset = 0;\n var labelOffset = 0;\n this.farSizes = [];\n this.calculateAxisValues(rect);\n for (var _i = 0, axes_1 = axes; _i < axes_1.length; _i++) {\n var axis = axes_1[_i];\n lineSize = (axis.lineStyle.width / 2);\n outerHeight = 0;\n innerHeight = 0;\n isMajorTickOutside = axis.majorTicks.position === 'Outside';\n majorTickOffset = axis.majorTicks.offset;\n isMinorTickOutside = axis.minorTicks.position === 'Outside';\n minorTickOffset = axis.minorTicks.offset;\n isLabelOutside = axis.labelStyle.position === 'Outside';\n labelOffset = axis.labelStyle.offset;\n // Calculating the outer space of the axis\n outerHeight += !(isMajorTickOutside && isMinorTickOutside && isLabelOutside) ? axisPadding : 0;\n outerHeight += (isMajorTickOutside ? (axis.majorTicks.height + lineSize) : 0) +\n (isLabelOutside ? (axis.maxLabelSize.height + labelPadding + labelOffset) : 0) +\n ((isMinorTickOutside && !isMajorTickOutside) ? (axis.minorTicks.height + lineSize) : 0) + lineSize;\n outerHeight += (isMajorTickOutside && isMinorTickOutside) ? Math.max(majorTickOffset, minorTickOffset) :\n (isMajorTickOutside ? majorTickOffset : isMinorTickOutside ? minorTickOffset : 0);\n // Calculating the inner space of the axis\n innerHeight += (!isMajorTickOutside ? (axis.majorTicks.height + lineSize) : 0) +\n (!isLabelOutside ? (axis.maxLabelSize.height + labelPadding + labelOffset) : 0) +\n ((!isMinorTickOutside && isMajorTickOutside) ? (axis.minorTicks.height + lineSize) : 0) + lineSize;\n innerHeight += (!isMajorTickOutside && !isMinorTickOutside) ? Math.max(majorTickOffset, minorTickOffset) :\n (!isMajorTickOutside ? majorTickOffset : !isMinorTickOutside ? minorTickOffset : 0);\n if (this.farSizes[this.farSizes.length - 1]) {\n this.farSizes[this.farSizes.length - 1] += (innerHeight + outerHeight);\n }\n axis.nearSize = outerHeight - axisPadding;\n axis.farSize = innerHeight;\n outerHeight = (this.gauge.axes.length === (this.farSizes.length + 1)) ? 0 : outerHeight;\n this.farSizes.push(outerHeight);\n }\n };\n /**\n * To render the Axis element of the circular gauge.\n * @return {void}\n * @private\n */\n AxisLayoutPanel.prototype.renderAxes = function (animate) {\n var _this = this;\n if (animate === void 0) { animate = true; }\n var gauge = this.gauge;\n var renderer = this.axisRenderer;\n var element;\n var axesElements = gauge.renderer.createGroup({\n 'id': gauge.element.id + '_AxesCollection',\n 'clip-path': 'url(#' + gauge.element.id + '_GaugeAreaClipRect_' + ')'\n });\n // To append the secondary element for annotation and tooltip\n gauge.element.appendChild(createElement('div', {\n id: gauge.element.id + '_Secondary_Element',\n styles: 'position: relative'\n }));\n gauge.axes.map(function (axis, index) {\n element = gauge.renderer.createGroup({\n id: gauge.element.id + '_Axis_Group_' + index\n });\n renderer.drawAxisOuterLine(axis, index, element, gauge);\n renderer.drawAxisRange(axis, index, element, gauge);\n renderer.drawAxisLine(axis, index, element, gauge);\n renderer.drawMajorTickLines(axis, index, element, gauge);\n renderer.drawMinorTickLines(axis, index, element, gauge);\n renderer.drawAxisLabels(axis, index, element, gauge);\n _this.pointerRenderer.drawPointers(axis, index, element, gauge, animate);\n if (gauge.annotationsModule) {\n gauge.annotationsModule.renderAnnotation(axis, index);\n }\n axesElements.appendChild(element);\n });\n // For append clip rect for axes\n gauge.svgObject.appendChild(gauge.renderer.drawClipPath({\n 'id': gauge.element.id + '_GaugeAreaClipRect_',\n 'x': 0, 'y': 0,\n 'width': gauge.availableSize.width,\n 'height': gauge.availableSize.height,\n 'fill': 'transparent', 'stroke': 'transparent'\n }));\n gauge.svgObject.appendChild(axesElements);\n };\n /**\n * Calculate maximum label width for the axis.\n * @return {void}\n */\n AxisLayoutPanel.prototype.getMaxLabelWidth = function (gauge, axis) {\n axis.maxLabelSize = new Size(0, 0);\n for (var _i = 0, _a = axis.visibleLabels; _i < _a.length; _i++) {\n var label = _a[_i];\n label.size = measureText(label.text, axis.labelStyle.font);\n axis.maxLabelSize.width = label.size.width > axis.maxLabelSize.width ?\n label.size.width : axis.maxLabelSize.width;\n axis.maxLabelSize.height = label.size.height > axis.maxLabelSize.height ?\n label.size.height : axis.maxLabelSize.height;\n }\n };\n return AxisLayoutPanel;\n}());\nexport { AxisLayoutPanel };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/**\n * Circular Gauge\n */\nimport { Property, NotifyPropertyChanges, Component, Complex, Browser } from '@syncfusion/ej2-base';\nimport { Event, SvgRenderer, EventHandler, Collection, Internationalization } from '@syncfusion/ej2-base';\nimport { remove, createElement } from '@syncfusion/ej2-base';\nimport { TextOption, textElement, RectOption, getAngleFromLocation, getValueFromAngle, removeElement } from './utils/helper';\nimport { Size, stringToNumber, measureText, Rect, GaugeLocation, getElement, getPointer, setStyles, toPixel } from './utils/helper';\nimport { getAngleFromValue, getPathArc } from './utils/helper';\nimport { Border, Margin, Font, TooltipSettings } from './model/base';\nimport { Axis } from './axes/axis';\nimport { Annotations } from './annotations/annotations';\nimport { GaugeTooltip } from './user-interaction/tooltip';\nimport { load, loaded, gaugeMouseMove, gaugeMouseLeave, gaugeMouseDown } from './model/constants';\nimport { gaugeMouseUp, dragEnd, dragMove, dragStart, resized } from './model/constants';\nimport { AxisLayoutPanel } from './axes/axis-panel';\n/**\n * Represents the Circular gauge control.\n * ```html\n *
    \n * \n * ```\n */\nvar CircularGauge = /** @class */ (function (_super) {\n __extends(CircularGauge, _super);\n /**\n * Constructor for creating the widget\n * @hidden\n */\n function CircularGauge(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * To create svg object, renderer and binding events for the container.\n */\n CircularGauge.prototype.preRender = function () {\n this.unWireEvents();\n this.trigger(load, { gauge: this });\n this.themeEffect();\n this.initPrivateVariable();\n this.setCulture();\n this.createSvg();\n this.wireEvents();\n };\n CircularGauge.prototype.themeEffect = function () {\n if (this.theme === 'Highcontrast') {\n this.titleStyle.color = this.titleStyle.color || '#FFFFFF';\n this.setThemeColors('#FFFFFF', '#FFFFFF');\n }\n else {\n this.titleStyle.color = this.titleStyle.color || '#424242';\n this.setThemeColors('#212121', '#757575');\n }\n };\n CircularGauge.prototype.setThemeColors = function (labelcolor, others) {\n for (var _i = 0, _a = this.axes; _i < _a.length; _i++) {\n var axis = _a[_i];\n axis.lineStyle.color = axis.lineStyle.color || others;\n axis.labelStyle.font.color = axis.labelStyle.font.color || labelcolor;\n axis.majorTicks.color = axis.majorTicks.color || others;\n axis.minorTicks.color = axis.minorTicks.color || others;\n for (var _b = 0, _c = axis.pointers; _b < _c.length; _b++) {\n var pointer = _c[_b];\n pointer.color = pointer.color || others;\n pointer.needleTail.color = pointer.needleTail.color || others;\n pointer.needleTail.border.color = pointer.needleTail.border.color || others;\n pointer.cap.color = pointer.cap.color || others;\n pointer.cap.border.color = pointer.cap.border.color || others;\n }\n }\n };\n /**\n * To render the circular gauge elements\n */\n CircularGauge.prototype.render = function () {\n this.calculateBounds();\n this.renderElements();\n };\n /**\n * Method to unbind events for circular gauge\n */\n CircularGauge.prototype.unWireEvents = function () {\n EventHandler.remove(this.element, Browser.touchStartEvent, this.gaugeOnMouseDown);\n EventHandler.remove(this.element, Browser.touchMoveEvent, this.mouseMove);\n EventHandler.remove(this.element, Browser.touchEndEvent, this.mouseEnd);\n EventHandler.remove(this.element, 'contextmenu', this.gaugeRightClick);\n EventHandler.remove(this.element, (Browser.isPointer ? 'pointerleave' : 'mouseleave'), this.mouseLeave);\n window.removeEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.gaugeResize);\n };\n /**\n * Method to bind events for circular gauge\n */\n CircularGauge.prototype.wireEvents = function () {\n /*! Bind the Event handler */\n EventHandler.add(this.element, Browser.touchStartEvent, this.gaugeOnMouseDown, this);\n EventHandler.add(this.element, Browser.touchMoveEvent, this.mouseMove, this);\n EventHandler.add(this.element, Browser.touchEndEvent, this.mouseEnd, this);\n EventHandler.add(this.element, 'contextmenu', this.gaugeRightClick, this);\n EventHandler.add(this.element, (Browser.isPointer ? 'pointerleave' : 'mouseleave'), this.mouseLeave, this);\n window.addEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.gaugeResize.bind(this));\n /*! Apply the style for circular gauge */\n this.setGaugeStyle(this.element);\n };\n /**\n * Handles the mouse move.\n * @return {boolean}\n * @private\n */\n CircularGauge.prototype.mouseMove = function (e) {\n var args = this.getMouseArgs(e, 'touchmove', gaugeMouseMove);\n this.trigger(gaugeMouseMove, args);\n var dragArgs;\n var tooltip = this.tooltipModule;\n if (!args.cancel) {\n if (this.tooltip.enable && tooltip) {\n if (args.target.id.indexOf('_Pointer_') >= 0 && !this.activePointer) {\n tooltip.renderTooltip(args.target);\n }\n else {\n tooltip.ejTooltip.close();\n }\n }\n if (this.enablePointerDrag && this.activePointer) {\n dragArgs = {\n axis: this.activeAxis,\n pointer: this.activePointer,\n previousValue: this.activePointer.currentValue,\n name: dragMove,\n currentValue: null\n };\n this.pointerDrag(new GaugeLocation(args.x, args.y));\n dragArgs.currentValue = this.activePointer.currentValue;\n this.trigger(dragMove, dragArgs);\n }\n }\n return false;\n };\n /**\n * Handles the mouse leave.\n * @return {boolean}\n * @private\n */\n CircularGauge.prototype.mouseLeave = function (e) {\n this.activeAxis = null;\n this.activePointer = null;\n this.svgObject.setAttribute('cursor', 'auto');\n var args = this.getMouseArgs(e, 'touchmove', gaugeMouseLeave);\n this.trigger(gaugeMouseLeave, args);\n if (this.tooltip.enable && this.tooltipModule) {\n this.tooltipModule.ejTooltip.close();\n }\n return false;\n };\n /**\n * Handles the mouse right click.\n * @return {boolean}\n * @private\n */\n CircularGauge.prototype.gaugeRightClick = function (event) {\n if (event.buttons === 2 || event.pointerType === 'touch') {\n event.preventDefault();\n event.stopPropagation();\n return false;\n }\n return true;\n };\n /**\n * Handles the pointer draf while mouse move on gauge.\n * @private\n */\n CircularGauge.prototype.pointerDrag = function (location) {\n var axis = this.activeAxis;\n var range = axis.visibleRange;\n var value = getValueFromAngle(getAngleFromLocation(this.midPoint, location), range.max, range.min, axis.startAngle, axis.endAngle, axis.direction === 'ClockWise');\n if (value >= range.min && value <= range.max) {\n this.activePointer.currentValue = value;\n this.activePointer.value = value;\n this.gaugeAxisLayoutPanel.pointerRenderer.setPointerValue(axis, this.activePointer, value);\n }\n };\n /**\n * Handles the mouse down on gauge.\n * @return {boolean}\n * @private\n */\n CircularGauge.prototype.gaugeOnMouseDown = function (e) {\n var currentPointer;\n var args = this.getMouseArgs(e, 'touchstart', gaugeMouseDown);\n this.trigger(gaugeMouseDown, args);\n if (!args.cancel && args.target.id.indexOf('_Pointer_') >= 0 &&\n args.target.id.indexOf(this.element.id + '_Axis_') >= 0) {\n currentPointer = getPointer(args.target.id, this);\n this.activeAxis = this.axes[currentPointer.axisIndex];\n this.activePointer = this.activeAxis.pointers[currentPointer.pointerIndex];\n this.trigger(dragStart, {\n axis: this.activeAxis,\n name: dragStart,\n pointer: this.activePointer,\n currentValue: this.activePointer.currentValue\n });\n this.svgObject.setAttribute('cursor', 'pointer');\n }\n return false;\n };\n /**\n * Handles the mouse end.\n * @return {boolean}\n * @private\n */\n CircularGauge.prototype.mouseEnd = function (e) {\n var args = this.getMouseArgs(e, 'touchend', gaugeMouseUp);\n var isTouch = e.pointerType === 'touch' || e.pointerType === '2' || e.type === 'touchend';\n var tooltipInterval;\n var tooltip = this.tooltipModule;\n this.trigger(gaugeMouseUp, args);\n if (this.activeAxis && this.activePointer) {\n this.trigger(dragEnd, {\n name: dragEnd,\n axis: this.activeAxis,\n pointer: this.activePointer,\n currentValue: this.activePointer.currentValue\n });\n if (!args.cancel && isTouch && this.tooltip.enable && tooltip) {\n if (args.target.id.indexOf('_Pointer_') >= 0) {\n tooltip.renderTooltip(args.target);\n tooltipInterval = window.setTimeout(function () {\n tooltip.ejTooltip.close();\n }, 2000);\n }\n }\n this.activeAxis = null;\n this.activePointer = null;\n }\n this.svgObject.setAttribute('cursor', 'auto');\n return false;\n };\n /**\n * Handles the mouse event arguments.\n * @return {IMouseEventArgs}\n * @private\n */\n CircularGauge.prototype.getMouseArgs = function (e, type, name) {\n var rect = this.element.getBoundingClientRect();\n var location = new GaugeLocation(-rect.left, -rect.top);\n var isTouch = (e.type === type);\n location.x += isTouch ? e.changedTouches[0].clientX : e.clientX;\n location.y += isTouch ? e.changedTouches[0].clientY : e.clientY;\n return {\n cancel: false, name: name,\n x: location.x, y: location.y,\n target: isTouch ? e.target : e.target\n };\n };\n /**\n * Handles the gauge resize.\n * @return {boolean}\n * @private\n */\n CircularGauge.prototype.gaugeResize = function (e) {\n var _this = this;\n var args = {\n gauge: this,\n previousSize: new Size(this.availableSize.width, this.availableSize.height),\n name: resized,\n currentSize: new Size(0, 0)\n };\n this.animatePointer = false;\n if (this.resizeTo) {\n clearTimeout(this.resizeTo);\n }\n if (this.element.classList.contains('e-circulargauge')) {\n this.resizeTo = window.setTimeout(function () {\n _this.createSvg();\n _this.calculateBounds();\n _this.renderElements();\n args.currentSize = _this.availableSize;\n _this.trigger(resized, args);\n }, 500);\n }\n return false;\n };\n /**\n * Applying styles for circular gauge elements\n */\n CircularGauge.prototype.setGaugeStyle = function (element) {\n element.style.touchAction = this.enablePointerDrag ? 'none' : 'element';\n element.style.msTouchAction = this.enablePointerDrag ? 'none' : 'element';\n element.style.msContentZooming = 'none';\n element.style.msUserSelect = 'none';\n element.style.webkitUserSelect = 'none';\n element.style.position = 'relative';\n };\n /**\n * Method to set culture for gauge\n */\n CircularGauge.prototype.setCulture = function () {\n this.intl = new Internationalization();\n };\n /**\n * Methods to create svg element for circular gauge.\n */\n CircularGauge.prototype.createSvg = function () {\n this.removeSvg();\n this.calculateSvgSize();\n this.svgObject = this.renderer.createSvg({\n id: this.element.id + '_svg',\n width: this.availableSize.width,\n height: this.availableSize.height\n });\n };\n /**\n * To Remove the SVG from circular gauge.\n * @return {boolean}\n * @private\n */\n CircularGauge.prototype.removeSvg = function () {\n removeElement(this.element.id + '_Secondary_Element');\n if (this.svgObject) {\n while (this.svgObject.childNodes.length > 0) {\n this.svgObject.removeChild(this.svgObject.firstChild);\n }\n if (!this.svgObject.hasChildNodes() && this.svgObject.parentNode) {\n remove(this.svgObject);\n }\n }\n };\n /**\n * To initialize the circular gauge private variable.\n * @private\n */\n CircularGauge.prototype.initPrivateVariable = function () {\n this.renderer = new SvgRenderer(this.element.id);\n this.gaugeAxisLayoutPanel = new AxisLayoutPanel(this);\n this.animatePointer = true;\n };\n /**\n * To calculate the size of the circular gauge element.\n */\n CircularGauge.prototype.calculateSvgSize = function () {\n var containerWidth = this.element.offsetWidth;\n var containerHeight = this.element.offsetHeight;\n var width = stringToNumber(this.width, containerWidth) || containerWidth || 600;\n var height = stringToNumber(this.height, containerHeight) || containerHeight || 450;\n this.availableSize = new Size(width, height);\n };\n /**\n * Method to calculate the availble size for circular gauge.\n */\n CircularGauge.prototype.calculateBounds = function () {\n var padding = 5;\n var margin = this.margin;\n // Title Height;\n var titleHeight = 0;\n if (this.title) {\n titleHeight = measureText(this.title, this.titleStyle).height + padding;\n }\n var top = margin.top + titleHeight + this.border.width;\n var left = margin.left + this.border.width;\n var width = this.availableSize.width - left - margin.right - this.border.width;\n var height = this.availableSize.height - top - this.border.width - margin.bottom;\n var radius = Math.min(width, height) / 2;\n var rect = new Rect((left + (width / 2) - radius), (top + (height / 2) - radius), radius * 2, radius * 2);\n var centerX = this.centerX !== null ?\n stringToNumber(this.centerX, this.availableSize.width) : rect.x + (rect.width / 2);\n var centerY = this.centerY !== null ?\n stringToNumber(this.centerY, this.availableSize.height) : rect.y + (rect.height / 2);\n this.midPoint = new GaugeLocation(centerX, centerY);\n this.gaugeAxisLayoutPanel.measureAxis(rect);\n };\n /**\n * To render elements for circular gauge\n */\n CircularGauge.prototype.renderElements = function (animate) {\n if (animate === void 0) { animate = true; }\n this.renderBorder();\n this.renderTitle();\n this.gaugeAxisLayoutPanel.renderAxes(animate);\n this.element.appendChild(this.svgObject);\n this.trigger(loaded, { gauge: this });\n };\n /**\n * Method to render the title for circular gauge.\n */\n CircularGauge.prototype.renderTitle = function () {\n if (this.title) {\n var size = measureText(this.title, this.titleStyle);\n var options = new TextOption(this.element.id + '_CircularGaugeTitle', this.availableSize.width / 2, this.margin.top + 3 * (size.height / 4), 'middle', this.title);\n var element = textElement(options, this.titleStyle, this.titleStyle.color, this.svgObject, '');\n element.setAttribute('aria-label', this.description || this.title);\n element.setAttribute('tabindex', this.tabIndex.toString());\n }\n };\n /**\n * Method to render the border for circular gauge.\n */\n CircularGauge.prototype.renderBorder = function () {\n var borderWidth = this.border.width;\n if (borderWidth > 0 || (this.background !== null && this.background !== 'transparent')) {\n this.svgObject.appendChild(this.renderer.drawRectangle(new RectOption(this.element.id + '_CircularGaugeBorder', this.background, this.border, null, new Rect(borderWidth / 2, borderWidth / 2, this.availableSize.width - borderWidth, this.availableSize.height - borderWidth))));\n }\n };\n /**\n * Method to set the pointer value dynamically for circular gauge.\n */\n CircularGauge.prototype.setPointerValue = function (axisIndex, pointerIndex, value) {\n var _this = this;\n var axis = this.axes[axisIndex];\n var pointer = axis.pointers[pointerIndex];\n var pointerRadius = pointer.currentRadius;\n var enableAnimation = pointer.animation.enable;\n value = value < axis.visibleRange.min ? axis.visibleRange.min : value;\n value = value > axis.visibleRange.max ? axis.visibleRange.max : value;\n pointer.pathElement.map(function (element) {\n if (pointer.type === 'RangeBar') {\n setStyles(element, pointer.color, pointer.border);\n if (enableAnimation) {\n _this.gaugeAxisLayoutPanel.pointerRenderer.performRangeBarAnimation(element, pointer.currentValue, value, axis, pointer, pointerRadius, (pointerRadius - pointer.pointerWidth));\n }\n else {\n _this.gaugeAxisLayoutPanel.pointerRenderer.setPointerValue(axis, pointer, value);\n }\n }\n else {\n if (element.id.indexOf('_Pointer_NeedleCap_') >= 0) {\n setStyles(element, pointer.cap.color, pointer.cap.border);\n }\n else if (element.id.indexOf('_Pointer_NeedleTail_') >= 0) {\n setStyles(element, pointer.needleTail.color, pointer.needleTail.border);\n }\n else if (element.id.indexOf('_Pointer_NeedleRect_') >= 0) {\n setStyles(element, 'transparent', { color: 'transparent', width: 0 });\n }\n else {\n setStyles(element, pointer.color, pointer.border);\n }\n if (enableAnimation) {\n _this.gaugeAxisLayoutPanel.pointerRenderer.performNeedleAnimation(element, pointer.currentValue, value, axis, pointer, pointerRadius, (pointerRadius - pointer.pointerWidth));\n }\n else {\n _this.gaugeAxisLayoutPanel.pointerRenderer.setPointerValue(axis, pointer, value);\n }\n }\n });\n pointer.currentValue = value;\n pointer.value = value;\n };\n /**\n * Method to set the annotation content dynamically for circular gauge.\n */\n CircularGauge.prototype.setAnnotationValue = function (axisIndex, annotationIndex, content) {\n var isElementExist = getElement(this.element.id + '_Annotations_' + axisIndex) !== null;\n var element = getElement(this.element.id + '_Annotations_' + axisIndex) ||\n createElement('div', {\n id: this.element.id + '_Annotations_' + axisIndex\n });\n var annotation = this.axes[axisIndex].annotations[annotationIndex];\n if (content !== null) {\n removeElement(this.element.id + '_Axis_' + axisIndex + '_Annotation_' + annotationIndex);\n annotation.content = content;\n this.annotationsModule.createTemplate(element, annotationIndex, axisIndex);\n if (!isElementExist) {\n getElement(this.element.id + '_Secondary_Element').appendChild(element);\n }\n }\n };\n /**\n * Method to set the range values dynamically for circular gauge.\n */\n CircularGauge.prototype.setRangeValue = function (axisIndex, rangeIndex, start, end) {\n var element = getElement(this.element.id + '_Axis_' + axisIndex + '_Range_' + rangeIndex);\n var axis = this.axes[axisIndex];\n var range = axis.ranges[rangeIndex];\n var axisRange = axis.visibleRange;\n var isClockWise = axis.direction === 'ClockWise';\n var startValue = Math.min(Math.max(start, axisRange.min), end);\n var endValue = Math.min(Math.max(start, end), axisRange.max);\n var startAngle = getAngleFromValue(startValue, axisRange.max, axisRange.min, axis.startAngle, axis.endAngle, isClockWise);\n var endAngle = getAngleFromValue(endValue, axisRange.max, axisRange.min, axis.startAngle, axis.endAngle, isClockWise);\n var startWidth;\n if (range.startWidth.length > 0) {\n startWidth = toPixel(range.startWidth, range.currentRadius);\n }\n else {\n startWidth = range.startWidth;\n }\n var endWidth;\n if (range.endWidth.length > 0) {\n endWidth = toPixel(range.endWidth, range.currentRadius);\n }\n else {\n endWidth = range.endWidth;\n }\n endAngle = isClockWise ? endAngle : [startAngle, startAngle = endAngle][0];\n endWidth = isClockWise ? endWidth : [startWidth, startWidth = endWidth][0];\n element.setAttribute('d', getPathArc(this.midPoint, Math.round(startAngle), Math.round(endAngle), range.currentRadius, startWidth, endWidth));\n setStyles(element, (range.color ? range.color : range.rangeColor), {\n color: (range.color ? range.color : range.rangeColor),\n width: 0\n });\n };\n /**\n * To destroy the widget\n * @method destroy\n * @return {void}\n * @member of Circular-Gauge\n */\n CircularGauge.prototype.destroy = function () {\n this.unWireEvents();\n this.removeSvg();\n _super.prototype.destroy.call(this);\n };\n /**\n * To provide the array of modules needed for control rendering\n * @return {ModuleDeclaration[]}\n * @private\n */\n CircularGauge.prototype.requiredModules = function () {\n var modules = [];\n var annotationEnable = false;\n var axes = this.axes;\n axes.map(function (axis) {\n axis.annotations.map(function (annotation) {\n annotationEnable = annotationEnable || annotation.content !== null;\n });\n });\n if (annotationEnable) {\n modules.push({\n member: 'Annotations',\n args: [this, Annotations]\n });\n }\n if (this.tooltip.enable) {\n modules.push({\n member: 'Tooltip',\n args: [this, GaugeTooltip]\n });\n }\n return modules;\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @private\n */\n CircularGauge.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * Called internally if any of the property value changed.\n * @private\n */\n CircularGauge.prototype.onPropertyChanged = function (newProp, oldProp) {\n // property method calculated\n var renderer = false;\n var refreshBounds = false;\n var refreshWithoutAnimation = false;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'height':\n case 'width':\n case 'centerX':\n case 'centerY':\n case 'margin':\n this.createSvg();\n refreshBounds = true;\n break;\n case 'title':\n refreshBounds = (newProp.title === '' || oldProp.title === '');\n renderer = !(newProp.title === '' || oldProp.title === '');\n break;\n case 'titleStyle':\n if (newProp.titleStyle && newProp.titleStyle.size) {\n refreshBounds = true;\n }\n else {\n renderer = true;\n }\n break;\n case 'border':\n renderer = true;\n break;\n case 'background':\n renderer = true;\n break;\n case 'axes':\n refreshWithoutAnimation = true;\n break;\n }\n }\n if (!refreshBounds && renderer) {\n this.removeSvg();\n this.renderElements();\n }\n if (refreshBounds) {\n this.removeSvg();\n this.calculateBounds();\n this.renderElements();\n }\n if (refreshWithoutAnimation && !renderer && !refreshBounds) {\n this.removeSvg();\n this.calculateBounds();\n this.renderElements(false);\n }\n };\n /**\n * Get component name for circular gauge\n * @private\n */\n CircularGauge.prototype.getModuleName = function () {\n return 'circulargauge';\n };\n __decorate([\n Property(null)\n ], CircularGauge.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], CircularGauge.prototype, \"height\", void 0);\n __decorate([\n Complex({ color: 'transparent', width: 0 }, Border)\n ], CircularGauge.prototype, \"border\", void 0);\n __decorate([\n Property('transparent')\n ], CircularGauge.prototype, \"background\", void 0);\n __decorate([\n Property('')\n ], CircularGauge.prototype, \"title\", void 0);\n __decorate([\n Complex({ size: '15px', color: null }, Font)\n ], CircularGauge.prototype, \"titleStyle\", void 0);\n __decorate([\n Complex({}, Margin)\n ], CircularGauge.prototype, \"margin\", void 0);\n __decorate([\n Collection([{}], Axis)\n ], CircularGauge.prototype, \"axes\", void 0);\n __decorate([\n Complex({}, TooltipSettings)\n ], CircularGauge.prototype, \"tooltip\", void 0);\n __decorate([\n Property(false)\n ], CircularGauge.prototype, \"enablePointerDrag\", void 0);\n __decorate([\n Property(null)\n ], CircularGauge.prototype, \"centerX\", void 0);\n __decorate([\n Property(null)\n ], CircularGauge.prototype, \"centerY\", void 0);\n __decorate([\n Property('Material')\n ], CircularGauge.prototype, \"theme\", void 0);\n __decorate([\n Property(false)\n ], CircularGauge.prototype, \"useGroupingSeparator\", void 0);\n __decorate([\n Property(null)\n ], CircularGauge.prototype, \"description\", void 0);\n __decorate([\n Property(1)\n ], CircularGauge.prototype, \"tabIndex\", void 0);\n __decorate([\n Event()\n ], CircularGauge.prototype, \"loaded\", void 0);\n __decorate([\n Event()\n ], CircularGauge.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], CircularGauge.prototype, \"animationComplete\", void 0);\n __decorate([\n Event()\n ], CircularGauge.prototype, \"axisLabelRender\", void 0);\n __decorate([\n Event()\n ], CircularGauge.prototype, \"annotationRender\", void 0);\n __decorate([\n Event()\n ], CircularGauge.prototype, \"tooltipRender\", void 0);\n __decorate([\n Event()\n ], CircularGauge.prototype, \"dragStart\", void 0);\n __decorate([\n Event()\n ], CircularGauge.prototype, \"dragMove\", void 0);\n __decorate([\n Event()\n ], CircularGauge.prototype, \"dragEnd\", void 0);\n __decorate([\n Event()\n ], CircularGauge.prototype, \"gaugeMouseMove\", void 0);\n __decorate([\n Event()\n ], CircularGauge.prototype, \"gaugeMouseLeave\", void 0);\n __decorate([\n Event()\n ], CircularGauge.prototype, \"gaugeMouseDown\", void 0);\n __decorate([\n Event()\n ], CircularGauge.prototype, \"gaugeMouseUp\", void 0);\n __decorate([\n Event()\n ], CircularGauge.prototype, \"resized\", void 0);\n CircularGauge = __decorate([\n NotifyPropertyChanges\n ], CircularGauge);\n return CircularGauge;\n}(Component));\nexport { CircularGauge };\n","import * as index from '@syncfusion/ej2-circulargauge';\nindex.CircularGauge.Inject( index.GaugeTooltip,index.Annotations);\nexport * from '@syncfusion/ej2-circulargauge';\n","/**\n * Size defines and processes the size(width/height) of the objects\n */\nvar Size = /** @class */ (function () {\n function Size(width, height) {\n this.width = width;\n this.height = height;\n }\n Size.prototype.isEmpty = function () {\n return this.height === 0 && this.width === 0;\n };\n // public static get empty(): Size {\n // return new Size();\n // }\n // public get isEmpty(): boolean {\n // return this.equals(Size.empty);\n // }\n // public equals(size2: Size): boolean {\n // return this.width === size2.width && this.height === size2.height;\n // }\n // public union(size: Size): void {\n // size.width = Math.max(size.width, this.width);\n // size.height = Math.max(size.height, this.height);\n // }\n Size.prototype.clone = function () {\n return new Size(this.width, this.height);\n };\n return Size;\n}());\nexport { Size };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Defines and processes coordinates\n */\nvar Point = /** @class */ (function (_super) {\n __extends(Point, _super);\n function Point() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Point.equals = function (point1, point2) {\n if (point1 === point2) {\n return true;\n }\n if (!point1 || !point2) {\n return false;\n }\n return !point1 || !point2 || point1.x === point2.x && point1.y === point2.y;\n };\n /**\n * check whether the points are given\n */\n Point.isEmptyPoint = function (point) {\n if (point.x && point.y) {\n return false;\n }\n return true;\n };\n // public add(point1: PointModel, point2: PointModel): PointModel {\n // return { x: point1.x + point2.x, y: point1.y + point2.y };\n // }\n // public subtract(point1: PointModel, point2: PointModel): PointModel {\n // return { x: point1.x - point2.x, y: point1.y - point2.y };\n // }\n // public multiply(point1: PointModel, point2: PointModel): PointModel {\n // return {\n // x: point1.x * point2.x, y: point1.y * point2.y\n // };\n // }\n // public crossProduct(point1: PointModel, point2: PointModel): PointModel {\n // return {\n // x: point1.x * point2.y, y: point2.x * point1.y\n // };\n // }\n // public offset(offsetX: number, offsetY: number): void {\n // this.x += offsetX;\n // this.y += offsetY;\n // }\n // public rotate(angle: number): PointModel {\n // let c: number = Math.cos(angle);\n // let s: number = Math.sin(angle);\n // return {\n // x: c * this.x - s * this.y, y: s * this.x + c * this.y\n // };\n // }\n // public distance(point2: PointModel): number {\n // return Math.sqrt(Math.pow(this.x - point2.x, 2) + Math.pow(this.y - point2.y, 2));\n // }\n Point.transform = function (point, angle, length) {\n var pt = { x: 0, y: 0 };\n pt.x = Math.round((point.x + length * Math.cos(angle * Math.PI / 180)) * 100) / 100;\n pt.y = Math.round((point.y + length * Math.sin(angle * Math.PI / 180)) * 100) / 100;\n return pt;\n };\n Point.findLength = function (s, e) {\n var length = Math.sqrt(Math.pow((s.x - e.x), 2) + Math.pow((s.y - e.y), 2));\n return length;\n };\n Point.findAngle = function (point1, point2) {\n var angle = Math.atan2(point2.y - point1.y, point2.x - point1.x);\n angle = (180 * angle / Math.PI);\n angle %= 360;\n if (angle < 0) {\n angle += 360;\n }\n return angle;\n };\n Point.distancePoints = function (pt1, pt2) {\n return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n };\n Point.adjustPoint = function (source, target, isStart, length) {\n var pt = isStart ? { x: source.x, y: source.y } : { x: target.x, y: target.y };\n var angle;\n if (source.x === target.x) {\n if (source.y < target.y && isStart || source.y > target.y && !isStart) {\n pt.y += length;\n }\n else {\n pt.y -= length;\n }\n }\n else if (source.y === target.y) {\n if (source.x < target.x && isStart || source.x > target.x && !isStart) {\n pt.x += length;\n }\n else {\n pt.x -= length;\n }\n }\n else {\n if (isStart) {\n angle = this.findAngle(source, target);\n pt = this.transform(source, angle, length);\n }\n else {\n angle = this.findAngle(target, source);\n pt = this.transform(target, angle, length);\n }\n }\n return pt;\n };\n Point.direction = function (pt1, pt2) {\n if (Math.abs(pt2.x - pt1.x) > Math.abs(pt2.y - pt1.y)) {\n return pt1.x < pt2.x ? 'Right' : 'Left';\n }\n else {\n return pt1.y < pt2.y ? 'Bottom' : 'Top';\n }\n };\n __decorate([\n Property(0)\n ], Point.prototype, \"x\", void 0);\n __decorate([\n Property(0)\n ], Point.prototype, \"y\", void 0);\n return Point;\n}(ChildProperty));\nexport { Point };\n","/**\n * Rect defines and processes rectangular regions\n */\nvar Rect = /** @class */ (function () {\n function Rect(x, y, width, height) {\n /**\n * Sets the x-coordinate of the starting point of a rectangular region\n * @default 0\n */\n this.x = Number.MAX_VALUE;\n /**\n * Sets the y-coordinate of the starting point of a rectangular region\n * @default 0\n */\n this.y = Number.MAX_VALUE;\n /**\n * Sets the width of a rectangular region\n * @default 0\n */\n this.width = 0;\n /**\n * Sets the height of a rectangular region\n * @default 0\n */\n this.height = 0;\n if (x === undefined || y === undefined) {\n x = y = Number.MAX_VALUE;\n width = height = 0;\n }\n else {\n if (width === undefined) {\n width = 0;\n }\n if (height === undefined) {\n height = 0;\n }\n }\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n Object.defineProperty(Rect.prototype, \"left\", {\n get: function () {\n return this.x;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rect.prototype, \"right\", {\n get: function () {\n return this.x + this.width;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rect.prototype, \"top\", {\n get: function () {\n return this.y;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rect.prototype, \"bottom\", {\n get: function () {\n return this.y + this.height;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rect.prototype, \"topLeft\", {\n get: function () {\n return { x: this.left, y: this.top };\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rect.prototype, \"topRight\", {\n get: function () {\n return { x: this.right, y: this.top };\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rect.prototype, \"bottomLeft\", {\n get: function () {\n return { x: this.left, y: this.bottom };\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rect.prototype, \"bottomRight\", {\n get: function () {\n return { x: this.right, y: this.bottom };\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rect.prototype, \"middleLeft\", {\n get: function () {\n return { x: this.left, y: this.y + this.height / 2 };\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rect.prototype, \"middleRight\", {\n get: function () {\n return { x: this.right, y: this.y + this.height / 2 };\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rect.prototype, \"topCenter\", {\n get: function () {\n return { x: this.x + this.width / 2, y: this.top };\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rect.prototype, \"bottomCenter\", {\n get: function () {\n return { x: this.x + this.width / 2, y: this.bottom };\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rect.prototype, \"center\", {\n get: function () {\n return { x: this.x + this.width / 2, y: this.y + this.height / 2 };\n },\n enumerable: true,\n configurable: true\n });\n Rect.prototype.equals = function (rect1, rect2) {\n return rect1.x === rect2.x && rect1.y === rect2.y && rect1.width === rect2.width && rect1.height === rect2.height;\n };\n Rect.prototype.uniteRect = function (rect) {\n var right = Math.max(Number.NaN === this.right || this.x === Number.MAX_VALUE ? rect.right : this.right, rect.right);\n var bottom = Math.max(Number.NaN === this.bottom || this.y === Number.MAX_VALUE ? rect.bottom : this.bottom, rect.bottom);\n this.x = Math.min(this.left, rect.left);\n this.y = Math.min(this.top, rect.top);\n this.width = right - this.x;\n this.height = bottom - this.y;\n return this;\n };\n Rect.prototype.unitePoint = function (point) {\n if (this.x === Number.MAX_VALUE) {\n this.x = point.x;\n this.y = point.y;\n return;\n }\n var x = Math.min(this.left, point.x);\n var y = Math.min(this.top, point.y);\n var right = Math.max(this.right, point.x);\n var bottom = Math.max(this.bottom, point.y);\n this.x = x;\n this.y = y;\n this.width = right - this.x;\n this.height = bottom - this.y;\n };\n // public intersection(rect: Rect): Rect {\n // if (this.intersects(rect)) {\n // let left: number = Math.max(this.left, rect.left);\n // let top: number = Math.max(this.top, rect.top);\n // let right: number = Math.min(this.right, rect.right);\n // let bottom: number = Math.min(this.bottom, rect.bottom);\n // return new Rect(left, top, right - left, bottom - top);\n // }\n // return Rect.empty;\n // }\n Rect.prototype.Inflate = function (padding) {\n this.x -= padding;\n this.y -= padding;\n this.width += padding * 2;\n this.height += padding * 2;\n return this;\n };\n //public Inflate(size: Size): Rect {\n // this.x -= size.Width;\n // this.y -= size.Height;\n // this.width += size.Width * 2;\n // this.height += size.Height * 2;\n // return this;\n //}\n // public inflate(width: number, height: number): void {\n // this.x -= width;\n // this.y -= height;\n // this.width += width * 2;\n // this.height += height * 2;\n // }\n Rect.prototype.intersects = function (rect) {\n if (this.right < rect.left || this.left > rect.right || this.top > rect.bottom || this.bottom < rect.top) {\n return false;\n }\n return true;\n };\n Rect.prototype.containsRect = function (rect) {\n return this.left <= rect.left && this.right >= rect.right && this.top <= rect.top && this.bottom >= rect.bottom;\n };\n Rect.prototype.containsPoint = function (point, padding) {\n if (padding === void 0) { padding = 0; }\n return this.left - padding <= point.x && this.right + padding >= point.x\n && this.top - padding <= point.y && this.bottom + padding >= point.y;\n };\n // public toPoints(): PointModel[] {\n // let points: PointModel[] = [];\n // points.push(this.topLeft);\n // points.push(this.topRight);\n // points.push(this.bottomLeft);\n // points.push(this.bottomRight);\n // return points;\n // }\n Rect.toBounds = function (points) {\n var rect = new Rect();\n for (var _i = 0, points_1 = points; _i < points_1.length; _i++) {\n var pt = points_1[_i];\n rect.unitePoint(pt);\n }\n return rect;\n };\n Rect.empty = new Rect(Number.MAX_VALUE, Number.MIN_VALUE, 0, 0);\n return Rect;\n}());\nexport { Rect };\n","/**\n * enum module defines the public enumerations\n */\n/**\n * Constraints to define when a port has to be visible\n * Visible - Always shows the port\n * Hidden - Always hides the port\n * Hover - Shows the port when the mouse hovers over a node\n * Connect - Shows the port when a connection end point is dragged over a node\n * Default - By default the ports will be visible when a node is hovered and being tried to connect\n * @aspNumberEnum\n */\nexport var PortVisibility;\n(function (PortVisibility) {\n /** Always shows the port */\n PortVisibility[PortVisibility[\"Visible\"] = 1] = \"Visible\";\n /** Always hides the port */\n PortVisibility[PortVisibility[\"Hidden\"] = 2] = \"Hidden\";\n /** Shows the port when the mouse hovers over a node */\n PortVisibility[PortVisibility[\"Hover\"] = 4] = \"Hover\";\n /** Shows the port when a connection end point is dragged over a node */\n PortVisibility[PortVisibility[\"Connect\"] = 8] = \"Connect\";\n})(PortVisibility || (PortVisibility = {}));\n/**\n * Defines the constraints to Enables / Disables some features of Snapping.\n * None - Snapping does not happen\n * ShowHorizontalLines - Displays only the horizontal gridlines in diagram.\n * ShowVerticalLines - Displays only the Vertical gridlines in diagram.\n * ShowLines - Display both Horizontal and Vertical gridlines.\n * SnapToHorizontalLines - Enables the object to snap only with horizontal gridlines.\n * SnapToVerticalLines - Enables the object to snap only with horizontal gridlines.\n * SnapToLines - Enables the object to snap with both horizontal and Vertical gridlines.\n * snapToObject - Enables the object to snap with the other objects in the diagram.\n * @IgnoreSingular\n * @aspNumberEnum\n */\nexport var SnapConstraints;\n(function (SnapConstraints) {\n /** None - Snapping does not happen */\n SnapConstraints[SnapConstraints[\"None\"] = 0] = \"None\";\n /** ShowHorizontalLines - Displays only the horizontal gridlines in diagram. */\n SnapConstraints[SnapConstraints[\"ShowHorizontalLines\"] = 1] = \"ShowHorizontalLines\";\n /** ShowVerticalLines - Displays only the Vertical gridlines in diagram */\n SnapConstraints[SnapConstraints[\"ShowVerticalLines\"] = 2] = \"ShowVerticalLines\";\n /** ShowLines - Display both Horizontal and Vertical gridlines */\n SnapConstraints[SnapConstraints[\"ShowLines\"] = 3] = \"ShowLines\";\n /** SnapToHorizontalLines - Enables the object to snap only with horizontal gridlines */\n SnapConstraints[SnapConstraints[\"SnapToHorizontalLines\"] = 4] = \"SnapToHorizontalLines\";\n /** SnapToVerticalLines - Enables the object to snap only with horizontal gridlines */\n SnapConstraints[SnapConstraints[\"SnapToVerticalLines\"] = 8] = \"SnapToVerticalLines\";\n /** SnapToLines - Enables the object to snap with both horizontal and Vertical gridlines */\n SnapConstraints[SnapConstraints[\"SnapToLines\"] = 12] = \"SnapToLines\";\n /** SnapToObject - Enables the object to snap with the other objects in the diagram. */\n SnapConstraints[SnapConstraints[\"SnapToObject\"] = 16] = \"SnapToObject\";\n /** Shows gridlines and enables snapping */\n SnapConstraints[SnapConstraints[\"All\"] = 31] = \"All\";\n})(SnapConstraints || (SnapConstraints = {}));\n/**\n * Defines the visibility of the selector handles\n * None - Hides all the selector elements\n * ConnectorSourceThumb - Shows/hides the source thumb of the connector\n * ConnectorTargetThumb - Shows/hides the target thumb of the connector\n * ResizeSouthEast - Shows/hides the bottom right resize handle of the selector\n * ResizeSouthWest - Shows/hides the bottom left resize handle of the selector\n * ResizeNorthEast - Shows/hides the top right resize handle of the selector\n * ResizeNorthWest - Shows/hides the top left resize handle of the selector\n * ResizeEast - Shows/hides the middle right resize handle of the selector\n * ResizeWest - Shows/hides the middle left resize handle of the selector\n * ResizeSouth - Shows/hides the bottom center resize handle of the selector\n * ResizeNorth - Shows/hides the top center resize handle of the selector\n * Rotate - Shows/hides the rotate handle of the selector\n * UserHandles - Shows/hides the user handles of the selector\n * Resize - Shows/hides all resize handles of the selector\n * @aspNumberEnum\n * @IgnoreSingular\n */\nexport var SelectorConstraints;\n(function (SelectorConstraints) {\n /** Hides all the selector elements */\n SelectorConstraints[SelectorConstraints[\"None\"] = 1] = \"None\";\n /** Shows/hides the source thumb of the connector */\n SelectorConstraints[SelectorConstraints[\"ConnectorSourceThumb\"] = 2] = \"ConnectorSourceThumb\";\n /** Shows/hides the target thumb of the connector */\n SelectorConstraints[SelectorConstraints[\"ConnectorTargetThumb\"] = 4] = \"ConnectorTargetThumb\";\n /** Shows/hides the bottom right resize handle of the selector */\n SelectorConstraints[SelectorConstraints[\"ResizeSouthEast\"] = 8] = \"ResizeSouthEast\";\n /** Shows/hides the bottom left resize handle of the selector */\n SelectorConstraints[SelectorConstraints[\"ResizeSouthWest\"] = 16] = \"ResizeSouthWest\";\n /** Shows/hides the top right resize handle of the selector */\n SelectorConstraints[SelectorConstraints[\"ResizeNorthEast\"] = 32] = \"ResizeNorthEast\";\n /** Shows/hides the top left resize handle of the selector */\n SelectorConstraints[SelectorConstraints[\"ResizeNorthWest\"] = 64] = \"ResizeNorthWest\";\n /** Shows/hides the middle right resize handle of the selector */\n SelectorConstraints[SelectorConstraints[\"ResizeEast\"] = 128] = \"ResizeEast\";\n /** Shows/hides the middle left resize handle of the selector */\n SelectorConstraints[SelectorConstraints[\"ResizeWest\"] = 256] = \"ResizeWest\";\n /** Shows/hides the bottom center resize handle of the selector */\n SelectorConstraints[SelectorConstraints[\"ResizeSouth\"] = 512] = \"ResizeSouth\";\n /** Shows/hides the top center resize handle of the selector */\n SelectorConstraints[SelectorConstraints[\"ResizeNorth\"] = 1024] = \"ResizeNorth\";\n /** Shows/hides the rotate handle of the selector */\n SelectorConstraints[SelectorConstraints[\"Rotate\"] = 2048] = \"Rotate\";\n /** Shows/hides the user handles of the selector */\n SelectorConstraints[SelectorConstraints[\"UserHandle\"] = 4096] = \"UserHandle\";\n /** Shows/hides the default tooltip of nodes and connectors */\n SelectorConstraints[SelectorConstraints[\"ToolTip\"] = 8192] = \"ToolTip\";\n /** Shows/hides all resize handles of the selector */\n SelectorConstraints[SelectorConstraints[\"ResizeAll\"] = 2046] = \"ResizeAll\";\n /** Shows all handles of the selector */\n SelectorConstraints[SelectorConstraints[\"All\"] = 16382] = \"All\";\n})(SelectorConstraints || (SelectorConstraints = {}));\n/**\n * Defines the constraints to enable/disable certain features of connector.\n * * None - Interaction of the connectors cannot be done.\n * * Select - Selects the connector.\n * * Delete - Delete the connector.\n * * Drag - Drag the connector.\n * * DragSourceEnd - Drag the source end of the connector.\n * * DragTargetEnd - Drag the target end of the connector.\n * * DragSegmentThump - Drag the segment thumb of the connector.\n * * AllowDrop - Allow to drop a node.\n * * Bridging - Creates bridge on intersection of two connectors.\n * * BridgeObstacle -\n * * InheritBridging - Creates bridge on intersection of two connectors.\n * * PointerEvents - Sets the pointer events.\n * * Tooltip - Displays a tooltip for the connectors.\n * * InheritToolTip - Displays a tooltip for the connectors.\n * * Interaction - Features of the connector used for interaction.\n * * ReadOnly - Enables ReadOnly\n * * Default - Default features of the connector.\n * @aspNumberEnum\n * @IgnoreSingular\n */\nexport var ConnectorConstraints;\n(function (ConnectorConstraints) {\n /** Disable all connector Constraints. */\n ConnectorConstraints[ConnectorConstraints[\"None\"] = 1] = \"None\";\n /** Enables connector to be selected. */\n ConnectorConstraints[ConnectorConstraints[\"Select\"] = 2] = \"Select\";\n /** Enables connector to be Deleted. */\n ConnectorConstraints[ConnectorConstraints[\"Delete\"] = 4] = \"Delete\";\n /** Enables connector to be Dragged. */\n ConnectorConstraints[ConnectorConstraints[\"Drag\"] = 8] = \"Drag\";\n /** Enables connectors source end to be selected. */\n ConnectorConstraints[ConnectorConstraints[\"DragSourceEnd\"] = 16] = \"DragSourceEnd\";\n /** Enables connectors target end to be selected. */\n ConnectorConstraints[ConnectorConstraints[\"DragTargetEnd\"] = 32] = \"DragTargetEnd\";\n /** Enables control point and end point of every segment in a connector for editing. */\n ConnectorConstraints[ConnectorConstraints[\"DragSegmentThumb\"] = 64] = \"DragSegmentThumb\";\n /** Enables AllowDrop constraints to the connector. */\n ConnectorConstraints[ConnectorConstraints[\"AllowDrop\"] = 128] = \"AllowDrop\";\n /** Enables bridging to the connector. */\n ConnectorConstraints[ConnectorConstraints[\"Bridging\"] = 256] = \"Bridging\";\n /** Enables or Disables Bridge Obstacles with overlapping of connectors. */\n ConnectorConstraints[ConnectorConstraints[\"BridgeObstacle\"] = 512] = \"BridgeObstacle\";\n /** Enables bridging to the connector. */\n ConnectorConstraints[ConnectorConstraints[\"InheritBridging\"] = 1024] = \"InheritBridging\";\n /** Used to set the pointer events. */\n ConnectorConstraints[ConnectorConstraints[\"PointerEvents\"] = 2048] = \"PointerEvents\";\n /** Enables or disables tool tip for the connectors */\n ConnectorConstraints[ConnectorConstraints[\"Tooltip\"] = 4096] = \"Tooltip\";\n /** Enables or disables tool tip for the connectors */\n ConnectorConstraints[ConnectorConstraints[\"InheritTooltip\"] = 8192] = \"InheritTooltip\";\n /** Enables Interaction. */\n ConnectorConstraints[ConnectorConstraints[\"Interaction\"] = 4218] = \"Interaction\";\n /** Enables ReadOnly */\n ConnectorConstraints[ConnectorConstraints[\"ReadOnly\"] = 16384] = \"ReadOnly\";\n /** Enables all constraints. */\n ConnectorConstraints[ConnectorConstraints[\"Default\"] = 11838] = \"Default\";\n})(ConnectorConstraints || (ConnectorConstraints = {}));\n/**\n * Enables/Disables the annotation constraints\n * ReadOnly - Enables/Disables the ReadOnly Constraints\n * InheritReadOnly - Enables/Disables the InheritReadOnly Constraints\n * Default - Enables/Disables Default constraints\n * @aspNumberEnum\n * @IgnoreSingular\n */\nexport var AnnotationConstraints;\n(function (AnnotationConstraints) {\n /** Enables/Disables the ReadOnly Constraints */\n AnnotationConstraints[AnnotationConstraints[\"ReadOnly\"] = 2] = \"ReadOnly\";\n /** Enables/Disables the InheritReadOnly Constraints */\n AnnotationConstraints[AnnotationConstraints[\"InheritReadOnly\"] = 4] = \"InheritReadOnly\";\n})(AnnotationConstraints || (AnnotationConstraints = {}));\n/**\n * Enables/Disables certain features of node\n * None - Disable all node Constraints\n * Select - Enables node to be selected\n * Drag - Enables node to be Dragged\n * Rotate - Enables node to be Rotate\n * Shadow - Enables node to display shadow\n * PointerEvents - Enables node to provide pointer option\n * Delete - Enables node to delete\n * InConnect - Enables node to provide in connect option\n * OutConnect - Enables node to provide out connect option\n * Individual - Enables node to provide individual resize option\n * Expandable - Enables node to provide Expandable option\n * AllowDrop - Enables node to provide allow to drop option\n * Inherit - Enables node to inherit the interaction option\n * ResizeNorthEast - Enable ResizeNorthEast of the node\n * ResizeEast - Enable ResizeEast of the node\n * ResizeSouthEast - Enable ResizeSouthEast of the node\n * ResizeSouth - Enable ResizeSouthWest of the node\n * ResizeSouthWest - Enable ResizeSouthWest of the node\n * ResizeSouth - Enable ResizeSouth of the node\n * ResizeSouthWest - Enable ResizeSouthWest of the node\n * ResizeWest - Enable ResizeWest of the node\n * ResizeNorth - Enable ResizeNorth of the node\n * Resize - Enables the Aspect ratio fo the node\n * AspectRatio - Enables the Aspect ratio fo the node\n * Tooltip - Enables or disables tool tip for the Nodes\n * InheritTooltip - Enables or disables tool tip for the Nodes\n * ReadOnly - Enables the ReadOnly support for Annotation\n * Default - Enables all constraints\n * @aspNumberEnum\n * @IgnoreSingular\n */\nexport var NodeConstraints;\n(function (NodeConstraints) {\n /** Disable all node Constraints. */\n NodeConstraints[NodeConstraints[\"None\"] = 0] = \"None\";\n /** Enables node to be selected. */\n NodeConstraints[NodeConstraints[\"Select\"] = 2] = \"Select\";\n /** Enables node to be Dragged. */\n NodeConstraints[NodeConstraints[\"Drag\"] = 4] = \"Drag\";\n /** Enables node to be Rotate. */\n NodeConstraints[NodeConstraints[\"Rotate\"] = 8] = \"Rotate\";\n /** Enables node to display shadow. */\n NodeConstraints[NodeConstraints[\"Shadow\"] = 16] = \"Shadow\";\n /** Enables node to provide pointer option */\n NodeConstraints[NodeConstraints[\"PointerEvents\"] = 32] = \"PointerEvents\";\n /** Enables node to delete */\n NodeConstraints[NodeConstraints[\"Delete\"] = 64] = \"Delete\";\n /** Enables node to provide in connect option */\n NodeConstraints[NodeConstraints[\"InConnect\"] = 128] = \"InConnect\";\n /** Enables node to provide out connect option */\n NodeConstraints[NodeConstraints[\"OutConnect\"] = 256] = \"OutConnect\";\n /** Enables node to provide individual resize option */\n NodeConstraints[NodeConstraints[\"Individual\"] = 512] = \"Individual\";\n /** Enables node to provide Expandable option */\n NodeConstraints[NodeConstraints[\"Expandable\"] = 1024] = \"Expandable\";\n /** Enables node to provide allow to drop option */\n NodeConstraints[NodeConstraints[\"AllowDrop\"] = 2048] = \"AllowDrop\";\n /** Enables node to inherit the interaction option */\n NodeConstraints[NodeConstraints[\"Inherit\"] = 78] = \"Inherit\";\n /** Enable ResizeNorthEast of the node */\n NodeConstraints[NodeConstraints[\"ResizeNorthEast\"] = 4096] = \"ResizeNorthEast\";\n /** Enable ResizeEast of the node */\n NodeConstraints[NodeConstraints[\"ResizeEast\"] = 8192] = \"ResizeEast\";\n /** Enable ResizeSouthEast of the node */\n NodeConstraints[NodeConstraints[\"ResizeSouthEast\"] = 16384] = \"ResizeSouthEast\";\n /** Enable ResizeSouth of the node */\n NodeConstraints[NodeConstraints[\"ResizeSouth\"] = 32768] = \"ResizeSouth\";\n /** Enable ResizeSouthWest of the node */\n NodeConstraints[NodeConstraints[\"ResizeSouthWest\"] = 65536] = \"ResizeSouthWest\";\n /** Enable ResizeWest of the node */\n NodeConstraints[NodeConstraints[\"ResizeWest\"] = 131072] = \"ResizeWest\";\n /** Enable ResizeNorthWest of the node */\n NodeConstraints[NodeConstraints[\"ResizeNorthWest\"] = 262144] = \"ResizeNorthWest\";\n /** Enable ResizeNorth of the node */\n NodeConstraints[NodeConstraints[\"ResizeNorth\"] = 524288] = \"ResizeNorth\";\n /** Enable Resize of the node */\n NodeConstraints[NodeConstraints[\"Resize\"] = 1044480] = \"Resize\";\n /** Enables the Aspect ratio fo the node */\n NodeConstraints[NodeConstraints[\"AspectRatio\"] = 1048576] = \"AspectRatio\";\n /** Enables or disables tool tip for the Nodes */\n NodeConstraints[NodeConstraints[\"Tooltip\"] = 2097152] = \"Tooltip\";\n /** Enables or disables tool tip for the Nodes */\n NodeConstraints[NodeConstraints[\"InheritTooltip\"] = 4194304] = \"InheritTooltip\";\n /** Enables the ReadOnly support for Annotation */\n NodeConstraints[NodeConstraints[\"ReadOnly\"] = 8388608] = \"ReadOnly\";\n /** Enables all constraints */\n NodeConstraints[NodeConstraints[\"Default\"] = 5240814] = \"Default\";\n})(NodeConstraints || (NodeConstraints = {}));\n/** Enables/Disables the handles of the selector\n * Rotate - Enable Rotate Thumb\n * ConnectorSource - Enable Connector source point\n * ConnectorTarget - Enable Connector target point\n * ResizeNorthEast - Enable ResizeNorthEast Resize\n * ResizeEast - Enable ResizeEast Resize\n * ResizeSouthEast - Enable ResizeSouthEast Resize\n * ResizeSouth - Enable ResizeSouth Resize\n * ResizeSouthWest - Enable ResizeSouthWest Resize\n * ResizeWest - Enable ResizeWest Resize\n * ResizeNorthWest - Enable ResizeNorthWest Resize\n * ResizeNorth - Enable ResizeNorth Resize\n * Default - Enables all constraints\n * @private\n */\nexport var ThumbsConstraints;\n(function (ThumbsConstraints) {\n /** Enable Rotate Thumb */\n ThumbsConstraints[ThumbsConstraints[\"Rotate\"] = 2] = \"Rotate\";\n /** Enable Connector source point */\n ThumbsConstraints[ThumbsConstraints[\"ConnectorSource\"] = 4] = \"ConnectorSource\";\n /** Enable Connector target point */\n ThumbsConstraints[ThumbsConstraints[\"ConnectorTarget\"] = 8] = \"ConnectorTarget\";\n /** Enable ResizeNorthEast Resize */\n ThumbsConstraints[ThumbsConstraints[\"ResizeNorthEast\"] = 16] = \"ResizeNorthEast\";\n /** Enable ResizeEast Resize */\n ThumbsConstraints[ThumbsConstraints[\"ResizeEast\"] = 32] = \"ResizeEast\";\n /** Enable ResizeSouthEast Resize */\n ThumbsConstraints[ThumbsConstraints[\"ResizeSouthEast\"] = 64] = \"ResizeSouthEast\";\n /** Enable ResizeSouth Resize */\n ThumbsConstraints[ThumbsConstraints[\"ResizeSouth\"] = 128] = \"ResizeSouth\";\n /** Enable ResizeSouthWest Resize */\n ThumbsConstraints[ThumbsConstraints[\"ResizeSouthWest\"] = 256] = \"ResizeSouthWest\";\n /** Enable ResizeWest Resize */\n ThumbsConstraints[ThumbsConstraints[\"ResizeWest\"] = 512] = \"ResizeWest\";\n /** Enable ResizeNorthWest Resize */\n ThumbsConstraints[ThumbsConstraints[\"ResizeNorthWest\"] = 1024] = \"ResizeNorthWest\";\n /** Enable ResizeNorth Resize */\n ThumbsConstraints[ThumbsConstraints[\"ResizeNorth\"] = 2048] = \"ResizeNorth\";\n /** Enables all constraints */\n ThumbsConstraints[ThumbsConstraints[\"Default\"] = 4094] = \"Default\";\n})(ThumbsConstraints || (ThumbsConstraints = {}));\n/**\n * Enables/Disables certain features of diagram\n * None - Disable DiagramConstraints constraints\n * Bridging - Enables/Disable Bridging support for connector\n * UndoRedo - Enables/Disable the Undo/Redo support\n * Tooltip - Enables/Disable Tooltip support\n * UserInteraction - Enables/Disable UserInteraction support for the diagram\n * ApiUpdate - Enables/Disable ApiUpdate support for the diagram\n * PageEditable - Enables/Disable PageEditable support for the diagram\n * Zoom - Enables/Disable Zoom support for the diagram\n * PanX - Enables/Disable PanX support for the diagram\n * PanY - Enables/Disable PanY support for the diagram\n * Pan - Enables/Disable Pan support the diagram\n * Default - Enables/Disable all constraints\n * @aspNumberEnum\n * @IgnoreSingular\n */\nexport var DiagramConstraints;\n(function (DiagramConstraints) {\n /** Disable DiagramConstraints constraints */\n DiagramConstraints[DiagramConstraints[\"None\"] = 1] = \"None\";\n /** Enables/Disable Bridging support for connector */\n DiagramConstraints[DiagramConstraints[\"Bridging\"] = 2] = \"Bridging\";\n /** Enables/Disable the Undo/Redo support */\n DiagramConstraints[DiagramConstraints[\"UndoRedo\"] = 4] = \"UndoRedo\";\n /** Enables/Disable Tooltip support */\n DiagramConstraints[DiagramConstraints[\"Tooltip\"] = 8] = \"Tooltip\";\n /** Enables/Disable UserInteraction support for the diagram */\n DiagramConstraints[DiagramConstraints[\"UserInteraction\"] = 16] = \"UserInteraction\";\n /** Enables/Disable ApiUpdate support for the diagram */\n DiagramConstraints[DiagramConstraints[\"ApiUpdate\"] = 32] = \"ApiUpdate\";\n /** Enables/Disable PageEditable support for the diagram */\n DiagramConstraints[DiagramConstraints[\"PageEditable\"] = 48] = \"PageEditable\";\n /** Enables/Disable Zoom support for the diagram */\n DiagramConstraints[DiagramConstraints[\"Zoom\"] = 64] = \"Zoom\";\n /** Enables/Disable PanX support for the diagram */\n DiagramConstraints[DiagramConstraints[\"PanX\"] = 128] = \"PanX\";\n /** Enables/Disable PanY support for the diagram */\n DiagramConstraints[DiagramConstraints[\"PanY\"] = 256] = \"PanY\";\n /** Enables/Disable Pan support the diagram */\n DiagramConstraints[DiagramConstraints[\"Pan\"] = 384] = \"Pan\";\n /** Enables/Disable all constraints */\n DiagramConstraints[DiagramConstraints[\"Default\"] = 500] = \"Default\";\n})(DiagramConstraints || (DiagramConstraints = {}));\n/**\n * Activates the diagram tools\n * None - Enables/Disable single select support for the diagram\n * SingleSelect - Enables/Disable single select support for the diagram\n * MultipleSelect - Enables/Disable MultipleSelect select support for the diagram\n * ZoomPan - Enables/Disable ZoomPan support for the diagram\n * DrawOnce - Enables/Disable continuousDraw support for the diagram\n * continuousDraw - Enables/Disable continuousDraw support for the diagram\n * Default - Enables/Disable all constraints\n * @aspNumberEnum\n * @IgnoreSingular\n */\nexport var DiagramTools;\n(function (DiagramTools) {\n /** Disable all constraints */\n DiagramTools[DiagramTools[\"None\"] = 0] = \"None\";\n /** Enables/Disable single select support for the diagram */\n DiagramTools[DiagramTools[\"SingleSelect\"] = 1] = \"SingleSelect\";\n /** Enables/Disable MultipleSelect select support for the diagram */\n DiagramTools[DiagramTools[\"MultipleSelect\"] = 2] = \"MultipleSelect\";\n /** Enables/Disable ZoomPan support for the diagram */\n DiagramTools[DiagramTools[\"ZoomPan\"] = 4] = \"ZoomPan\";\n /** Enables/Disable DrawOnce support for the diagram */\n DiagramTools[DiagramTools[\"DrawOnce\"] = 8] = \"DrawOnce\";\n /** Enables/Disable continuousDraw support for the diagram */\n DiagramTools[DiagramTools[\"ContinuousDraw\"] = 16] = \"ContinuousDraw\";\n /** Enables/Disable all constraints */\n DiagramTools[DiagramTools[\"Default\"] = 3] = \"Default\";\n})(DiagramTools || (DiagramTools = {}));\n/**\n * Defines the container/canvas transform\n * Self - Sets the transform type as Self\n * Parent - Sets the transform type as Parent\n */\nexport var Transform;\n(function (Transform) {\n /** Self - Sets the transform type as Self */\n Transform[Transform[\"Self\"] = 1] = \"Self\";\n /** Parent - Sets the transform type as Parent */\n Transform[Transform[\"Parent\"] = 2] = \"Parent\";\n})(Transform || (Transform = {}));\n/**\n * Defines the rendering mode for diagram\n * Canvas - Sets the rendering mode type as Canvas\n * Svg - Sets the rendering mode type as Svg\n */\nexport var RenderMode;\n(function (RenderMode) {\n /** Canvas - Sets the rendering mode type as Canvas */\n RenderMode[RenderMode[\"Canvas\"] = 0] = \"Canvas\";\n /** Svg - Sets the rendering mode type as Svg */\n RenderMode[RenderMode[\"Svg\"] = 1] = \"Svg\";\n})(RenderMode || (RenderMode = {}));\n/**\n * Sets a combination of key modifiers, on recognition of which the command will be executed.They are\n * * None - no modifiers are pressed\n * * Control - ctrl key\n * * Meta - meta key im mac\n * * Alt - alt key\n * * Shift - shift key\n * @aspNumberEnum\n * @IgnoreSingular\n */\nexport var KeyModifiers;\n(function (KeyModifiers) {\n /** No modifiers are pressed */\n KeyModifiers[KeyModifiers[\"None\"] = 0] = \"None\";\n /** The CTRL key */\n KeyModifiers[KeyModifiers[\"Control\"] = 1] = \"Control\";\n /** The Meta key pressed in Mac */\n KeyModifiers[KeyModifiers[\"Meta\"] = 1] = \"Meta\";\n /** The ALT key */\n KeyModifiers[KeyModifiers[\"Alt\"] = 2] = \"Alt\";\n /** The Shift key */\n KeyModifiers[KeyModifiers[\"Shift\"] = 4] = \"Shift\";\n})(KeyModifiers || (KeyModifiers = {}));\n/**\n * Sets the key value, on recognition of which the command will be executed. They are\n * * none - no key\n * * Number0 = The 0 key\n * * Number1 = The 1 key\n * * Number2 = The 2 key\n * * Number3 = The 3 key\n * * Number4 = The 4 key\n * * Number5 = The 5 key\n * * Number6 = The 6 key\n * * Number7 = The 7 key\n * * Number8 = The 8 key\n * * Number9 = The 9 key\n * * Number0 = The 0 key\n * * BackSpace = The BackSpace key\n * * F1 = The f1 key\n * * F2 = The f2 key\n * * F3 = The f3 key\n * * F4 = The f4 key\n * * F5 = The f5 key\n * * F6 = The f6 key\n * * F7 = The f7 key\n * * F8 = The f8 key\n * * F9 = The f9 key\n * * F10 = The f10 key\n * * F11 = The f11 key\n * * F12 = The f12 key\n * * A = The a key\n * * B = The b key\n * * C = The c key\n * * D = The d key\n * * E = The e key\n * * F = The f key\n * * G = The g key\n * * H = The h key\n * * I = The i key\n * * J = The j key\n * * K = The k key\n * * L = The l key\n * * M = The m key\n * * N = The n key\n * * O = The o key\n * * P = The p key\n * * Q = The q key\n * * R = The r key\n * * S = The s key\n * * T = The t key\n * * U = The u key\n * * V = The v key\n * * W = The w key\n * * X = The x key\n * * Y = The y key\n * * Z = The z key\n * * Left = The left key\n * * Right = The right key\n * * Top = The top key\n * * Bottom = The bottom key\n * * Escape = The Escape key\n * * Tab = The tab key\n * * Delete = The delete key\n * * Enter = The enter key\n * * The Space key\n * * The page up key\n * * The page down key\n * * The end key\n * * The home key\n * * The Minus\n * * The Plus\n * * The Star\n * @aspNumberEnum\n * @IgnoreSingular\n */\nexport var Keys;\n(function (Keys) {\n /** No key pressed */\n Keys[Keys[\"None\"] = null] = \"None\";\n /** The 0 key */\n Keys[Keys[\"Number0\"] = 0] = \"Number0\";\n /** The 1 key */\n Keys[Keys[\"Number1\"] = 1] = \"Number1\";\n /** The 2 key */\n Keys[Keys[\"Number2\"] = 2] = \"Number2\";\n /** The 3 key */\n Keys[Keys[\"Number3\"] = 3] = \"Number3\";\n /** The 4 key */\n Keys[Keys[\"Number4\"] = 4] = \"Number4\";\n /** The 5 key */\n Keys[Keys[\"Number5\"] = 5] = \"Number5\";\n /** The 6 key */\n Keys[Keys[\"Number6\"] = 6] = \"Number6\";\n /** The 7 key */\n Keys[Keys[\"Number7\"] = 7] = \"Number7\";\n /** The 8 key */\n Keys[Keys[\"Number8\"] = 8] = \"Number8\";\n /** The 9 key */\n Keys[Keys[\"Number9\"] = 9] = \"Number9\";\n /** The A key */\n Keys[Keys[\"A\"] = 65] = \"A\";\n /** The B key */\n Keys[Keys[\"B\"] = 66] = \"B\";\n /** The C key */\n Keys[Keys[\"C\"] = 67] = \"C\";\n /** The D key */\n Keys[Keys[\"D\"] = 68] = \"D\";\n /** The E key */\n Keys[Keys[\"E\"] = 69] = \"E\";\n /** The F key */\n Keys[Keys[\"F\"] = 70] = \"F\";\n /** The G key */\n Keys[Keys[\"G\"] = 71] = \"G\";\n /** The H key */\n Keys[Keys[\"H\"] = 72] = \"H\";\n /** The I key */\n Keys[Keys[\"I\"] = 73] = \"I\";\n /** The J key */\n Keys[Keys[\"J\"] = 74] = \"J\";\n /** The K key */\n Keys[Keys[\"K\"] = 75] = \"K\";\n /** The L key */\n Keys[Keys[\"L\"] = 76] = \"L\";\n /** The M key */\n Keys[Keys[\"M\"] = 77] = \"M\";\n /** The N key */\n Keys[Keys[\"N\"] = 78] = \"N\";\n /** The O key */\n Keys[Keys[\"O\"] = 79] = \"O\";\n /** The P key */\n Keys[Keys[\"P\"] = 80] = \"P\";\n /** The Q key */\n Keys[Keys[\"Q\"] = 81] = \"Q\";\n /** The R key */\n Keys[Keys[\"R\"] = 82] = \"R\";\n /** The S key */\n Keys[Keys[\"S\"] = 83] = \"S\";\n /** The T key */\n Keys[Keys[\"T\"] = 84] = \"T\";\n /** The U key */\n Keys[Keys[\"U\"] = 85] = \"U\";\n /** The V key */\n Keys[Keys[\"V\"] = 86] = \"V\";\n /** The W key */\n Keys[Keys[\"W\"] = 87] = \"W\";\n /** The X key */\n Keys[Keys[\"X\"] = 88] = \"X\";\n /** The Y key */\n Keys[Keys[\"Y\"] = 89] = \"Y\";\n /** The Z key */\n Keys[Keys[\"Z\"] = 90] = \"Z\";\n /** The left arrow key */\n Keys[Keys[\"Left\"] = 37] = \"Left\";\n /** The up arrow key */\n Keys[Keys[\"Up\"] = 38] = \"Up\";\n /** The right arrow key */\n Keys[Keys[\"Right\"] = 39] = \"Right\";\n /** The down arrow key */\n Keys[Keys[\"Down\"] = 40] = \"Down\";\n /** The Escape key */\n Keys[Keys[\"Escape\"] = 27] = \"Escape\";\n /** The Space key */\n Keys[Keys[\"Space\"] = 32] = \"Space\";\n /** The page up key */\n Keys[Keys[\"PageUp\"] = 33] = \"PageUp\";\n /** The Space key */\n Keys[Keys[\"PageDown\"] = 34] = \"PageDown\";\n /** The Space key */\n Keys[Keys[\"End\"] = 35] = \"End\";\n /** The Space key */\n Keys[Keys[\"Home\"] = 36] = \"Home\";\n /** The delete key */\n Keys[Keys[\"Delete\"] = 46] = \"Delete\";\n /** The tab key */\n Keys[Keys[\"Tab\"] = 9] = \"Tab\";\n /** The enter key */\n Keys[Keys[\"Enter\"] = 13] = \"Enter\";\n /** The BackSpace key */\n Keys[Keys[\"BackSpace\"] = 8] = \"BackSpace\";\n /** The F1 key */\n Keys[Keys[\"F1\"] = 112] = \"F1\";\n /** The F2 key */\n Keys[Keys[\"F2\"] = 113] = \"F2\";\n /** The F3 key */\n Keys[Keys[\"F3\"] = 114] = \"F3\";\n /** The F4 key */\n Keys[Keys[\"F4\"] = 115] = \"F4\";\n /** The F5 key */\n Keys[Keys[\"F5\"] = 116] = \"F5\";\n /** The F6 key */\n Keys[Keys[\"F6\"] = 117] = \"F6\";\n /** The F7 key */\n Keys[Keys[\"F7\"] = 118] = \"F7\";\n /** The F8 key */\n Keys[Keys[\"F8\"] = 119] = \"F8\";\n /** The F9 key */\n Keys[Keys[\"F9\"] = 120] = \"F9\";\n /** The F10 key */\n Keys[Keys[\"F10\"] = 121] = \"F10\";\n /** The F111 key */\n Keys[Keys[\"F11\"] = 122] = \"F11\";\n /** The F12 key */\n Keys[Keys[\"F12\"] = 123] = \"F12\";\n /** The Star */\n Keys[Keys[\"Star\"] = 56] = \"Star\";\n /** The Plus */\n Keys[Keys[\"Plus\"] = 187] = \"Plus\";\n /** The Minus */\n Keys[Keys[\"Minus\"] = 189] = \"Minus\";\n})(Keys || (Keys = {}));\n/**\n * Enables/Disables certain actions of diagram\n * @private\n */\nexport var DiagramAction;\n(function (DiagramAction) {\n DiagramAction[DiagramAction[\"Render\"] = 2] = \"Render\";\n DiagramAction[DiagramAction[\"PublicMethod\"] = 4] = \"PublicMethod\";\n DiagramAction[DiagramAction[\"ToolAction\"] = 8] = \"ToolAction\";\n DiagramAction[DiagramAction[\"UndoRedo\"] = 16] = \"UndoRedo\";\n DiagramAction[DiagramAction[\"TextEdit\"] = 32] = \"TextEdit\";\n DiagramAction[DiagramAction[\"Group\"] = 64] = \"Group\";\n DiagramAction[DiagramAction[\"Clear\"] = 128] = \"Clear\";\n})(DiagramAction || (DiagramAction = {}));\n/** @private */\nexport var NoOfSegments;\n(function (NoOfSegments) {\n NoOfSegments[NoOfSegments[\"Zero\"] = 0] = \"Zero\";\n NoOfSegments[NoOfSegments[\"One\"] = 1] = \"One\";\n NoOfSegments[NoOfSegments[\"Two\"] = 2] = \"Two\";\n NoOfSegments[NoOfSegments[\"Three\"] = 3] = \"Three\";\n NoOfSegments[NoOfSegments[\"Four\"] = 4] = \"Four\";\n NoOfSegments[NoOfSegments[\"Five\"] = 5] = \"Five\";\n})(NoOfSegments || (NoOfSegments = {}));\n/**\n * events of diagram\n * @private\n */\nexport var DiagramEvent;\n(function (DiagramEvent) {\n DiagramEvent[DiagramEvent[\"collectionChange\"] = 0] = \"collectionChange\";\n DiagramEvent[DiagramEvent[\"rotateChange\"] = 1] = \"rotateChange\";\n DiagramEvent[DiagramEvent[\"positionChange\"] = 2] = \"positionChange\";\n DiagramEvent[DiagramEvent[\"propertyChange\"] = 3] = \"propertyChange\";\n DiagramEvent[DiagramEvent[\"selectionChange\"] = 4] = \"selectionChange\";\n DiagramEvent[DiagramEvent[\"sizeChange\"] = 5] = \"sizeChange\";\n DiagramEvent[DiagramEvent[\"drop\"] = 6] = \"drop\";\n DiagramEvent[DiagramEvent[\"sourcePointChange\"] = 7] = \"sourcePointChange\";\n DiagramEvent[DiagramEvent[\"targetPointChange\"] = 8] = \"targetPointChange\";\n DiagramEvent[DiagramEvent[\"connectionChange\"] = 9] = \"connectionChange\";\n DiagramEvent[DiagramEvent[\"animationComplete\"] = 10] = \"animationComplete\";\n DiagramEvent[DiagramEvent[\"click\"] = 11] = \"click\";\n DiagramEvent[DiagramEvent[\"doubleClick\"] = 12] = \"doubleClick\";\n DiagramEvent[DiagramEvent[\"scrollChange\"] = 13] = \"scrollChange\";\n DiagramEvent[DiagramEvent[\"dragEnter\"] = 14] = \"dragEnter\";\n DiagramEvent[DiagramEvent[\"dragLeave\"] = 15] = \"dragLeave\";\n DiagramEvent[DiagramEvent[\"dragOver\"] = 16] = \"dragOver\";\n DiagramEvent[DiagramEvent[\"textEdit\"] = 17] = \"textEdit\";\n DiagramEvent[DiagramEvent[\"paletteSelectionChange\"] = 18] = \"paletteSelectionChange\";\n DiagramEvent[DiagramEvent[\"historyChange\"] = 19] = \"historyChange\";\n})(DiagramEvent || (DiagramEvent = {}));\n/** Enables/Disables certain features of port connection\n * @aspNumberEnum\n * @IgnoreSingular\n */\nexport var PortConstraints;\n(function (PortConstraints) {\n /** Disable all constraints */\n PortConstraints[PortConstraints[\"None\"] = 1] = \"None\";\n /** Enables connections with connector */\n PortConstraints[PortConstraints[\"Drag\"] = 2] = \"Drag\";\n /** Enables to create the connection when mouse hover on the port */\n PortConstraints[PortConstraints[\"Draw\"] = 4] = \"Draw\";\n})(PortConstraints || (PortConstraints = {}));\n/**\n * Defines the context menu click\n * contextMenuClick - Sets the context menu click as contextMenuClick\n */\nexport var contextMenuClick = \n/** contextMenuClick - Sets the context menu click as contextMenuClick */\n'contextMenuClick';\n/**\n * Defines the context menu open\n * contextMenuOpen - Sets the context menu open as contextMenuOpen\n */\nexport var contextMenuOpen = \n/** contextMenuOpen - Sets the context menu open as contextMenuOpen */\n'contextMenuOpen';\n","import { Size } from './../primitives/size';\nimport { Point } from './../primitives/point';\nimport { processPathData, pathSegmentCollection, getRectanglePath } from './../utility/path-util';\nimport { overFlow } from './../utility/base-util';\n/**\n * Canvas Renderer\n */\n/** @private */\nvar CanvasRenderer = /** @class */ (function () {\n function CanvasRenderer() {\n }\n CanvasRenderer.getContext = function (canvas) {\n return canvas.getContext('2d');\n };\n CanvasRenderer.setCanvasSize = function (canvas, width, height) {\n if (canvas) {\n canvas.setAttribute('width', width.toString());\n canvas.setAttribute('height', height.toString());\n }\n };\n ;\n CanvasRenderer.prototype.renderGradient = function (options, ctx, x, y) {\n var max;\n var min;\n var grd;\n if (options.gradient.type !== 'None') {\n for (var i = 0; i < options.gradient.stops.length; i++) {\n max = max !== undefined ? options.gradient.stops[i].offset : Math.max(max, options.gradient.stops[i].offset);\n min = min !== undefined ? options.gradient.stops[i].offset : Math.min(min, options.gradient.stops[i].offset);\n }\n if (options.gradient.type === 'Linear') {\n var linear = options.gradient;\n grd = ctx.createLinearGradient(x + linear.x1, y + linear.y1, x + linear.x2, y + linear.y2);\n }\n else {\n var radial = options.gradient;\n grd = ctx.createRadialGradient(x + radial.fx, y + radial.fy, 0, x + radial.cx, y + radial.cy, radial.r);\n }\n for (var i = 0; i < options.gradient.stops.length; i++) {\n var stop_1 = options.gradient.stops[i];\n var offset = min < 0 ? (max + stop_1.offset) / (2 * max) : stop_1.offset / max;\n grd.addColorStop(offset, stop_1.color);\n }\n ctx.fillStyle = grd;\n }\n return ctx;\n };\n CanvasRenderer.prototype.renderShadow = function (options, canvas, collection) {\n if (collection === void 0) { collection = null; }\n var ctx = CanvasRenderer.getContext(canvas);\n ctx.save();\n ctx.beginPath();\n ctx.strokeStyle = ctx.fillStyle = options.shadow.color;\n ctx.globalAlpha = options.shadow.opacity;\n var ptModel = { x: 0, y: 0 };\n var point = Point.transform(ptModel, options.shadow.angle, options.shadow.distance);\n var transX = options.x + point.x;\n var transY = options.y + point.y;\n var pivotX = transX + options.width * options.pivotX;\n var pivotY = transY + options.height * options.pivotY;\n this.rotateContext(canvas, options.angle, pivotX, pivotY);\n if (collection) {\n ctx.translate(transX, transY);\n this.renderPath(canvas, options, collection);\n ctx.translate(-transX, -transY);\n }\n else {\n ctx.rect(transX, transY, options.width, options.height);\n ctx.fillRect(transX, transY, options.width, options.height);\n }\n ctx.fill();\n ctx.stroke();\n ctx.closePath();\n ctx.restore();\n };\n CanvasRenderer.createCanvas = function (id, width, height) {\n var canvasObj = document.createElement('canvas');\n canvasObj.setAttribute('id', id);\n this.setCanvasSize(canvasObj, width, height);\n return canvasObj;\n };\n ;\n CanvasRenderer.prototype.setStyle = function (canvas, style) {\n var ctx = CanvasRenderer.getContext(canvas);\n if (style.fill === 'none') {\n style.fill = 'transparent';\n }\n if (style.stroke === 'none') {\n style.stroke = 'transparent';\n }\n ctx.strokeStyle = style.stroke;\n ctx.lineWidth = style.strokeWidth;\n if (style.strokeWidth === 0) {\n ctx.strokeStyle = 'transparent';\n }\n ctx.globalAlpha = style.opacity;\n var dashArray = [];\n if (style.dashArray) {\n dashArray = this.parseDashArray(style.dashArray);\n }\n ctx.setLineDash(dashArray);\n if (style.gradient && style.gradient.type !== 'None') {\n this.renderGradient(style, ctx, 0, 0);\n }\n else {\n ctx.fillStyle = style.fill;\n }\n };\n CanvasRenderer.prototype.rotateContext = function (canvas, angle, x, y) {\n var ctx = CanvasRenderer.getContext(canvas);\n ctx.translate(x, y);\n ctx.rotate(angle * Math.PI / 180);\n ctx.translate(-x, -y);\n };\n CanvasRenderer.prototype.setFontStyle = function (canvas, text) {\n var ctx = CanvasRenderer.getContext(canvas);\n var font = '';\n if (text.italic) {\n font += 'italic ';\n }\n if (text.bold) {\n font += 'bold ';\n }\n font += (text.fontSize) + 'px ';\n font += text.fontFamily;\n ctx.font = font;\n };\n CanvasRenderer.prototype.parseDashArray = function (dashArray) {\n var dashes = [];\n var separator = dashArray.indexOf(' ') !== -1 ? ' ' : ',';\n var splittedDashes = dashArray.split(separator);\n for (var _i = 0, splittedDashes_1 = splittedDashes; _i < splittedDashes_1.length; _i++) {\n var i = splittedDashes_1[_i];\n dashes.push(Number(i));\n }\n return dashes;\n };\n //Rendering Part\n CanvasRenderer.prototype.drawRectangle = function (canvas, options) {\n if (options.visible === true) {\n if (options.cornerRadius) {\n options.data = getRectanglePath(options.cornerRadius, options.height, options.width);\n this.drawPath(canvas, options);\n }\n else {\n var ctx = CanvasRenderer.getContext(canvas);\n if (options.shadow) {\n this.renderShadow(options, canvas);\n }\n ctx.save();\n ctx.beginPath();\n var cornerRadius = options.cornerRadius;\n var pivotX = options.x + options.width * options.pivotX;\n var pivotY = options.y + options.height * options.pivotY;\n this.rotateContext(canvas, options.angle, pivotX, pivotY);\n this.setStyle(canvas, options);\n ctx.rect(options.x, options.y, options.width, options.height);\n ctx.fillRect(options.x, options.y, options.width, options.height);\n ctx.fill();\n ctx.stroke();\n ctx.closePath();\n ctx.restore();\n }\n }\n };\n // public updateSelectionRegion(canvas: HTMLCanvasElement, options: RectAttributes): void {\n // this.drawRectangle(canvas, options);\n // }\n // public drawLine(canvas: HTMLCanvasElement, options: LineAttributes): void {\n // let ctx: CanvasRenderingContext2D = CanvasRenderer.getContext(canvas);\n // ctx.save();\n // ctx.beginPath();\n // let pivotX: number = options.x + options.width * options.pivotX;\n // let pivotY: number = options.y + options.height * options.pivotY;\n // this.rotateContext(canvas, options.angle, pivotX, pivotY);\n // this.setStyle(canvas, options as StyleAttributes);\n // ctx.translate(options.x, options.y);\n // ctx.moveTo(options.startPoint.x, options.startPoint.y);\n // ctx.lineTo(options.endPoint.x, options.endPoint.y);\n // ctx.translate(-options.x, -options.y);\n // ctx.stroke();\n // ctx.closePath();\n // ctx.restore();\n // }\n // public drawCircle(canvas: HTMLCanvasElement, options: CircleAttributes): void {\n // let ctx: CanvasRenderingContext2D = CanvasRenderer.getContext(canvas);\n // ctx.save();\n // ctx.beginPath();\n // let pivotY: number = options.y + options.height * options.pivotY;\n // let pivotX: number = options.x + options.width * options.pivotX;\n // this.setStyle(canvas, options as StyleAttributes);\n // this.rotateContext(canvas, options.angle, pivotX, pivotY);\n // ctx.arc(options.centerX, options.centerY, options.radius, 0, 2 * Math.PI);\n // ctx.fill();\n // ctx.stroke();\n // ctx.closePath();\n // ctx.restore();\n // }\n CanvasRenderer.prototype.drawPath = function (canvas, options) {\n var collection = [];\n collection = processPathData(options.data);\n collection = pathSegmentCollection(collection);\n if (options.shadow) {\n this.renderShadow(options, canvas, collection);\n }\n var ctx = CanvasRenderer.getContext(canvas);\n ctx.save();\n ctx.beginPath();\n var pivotY = options.y + options.height * options.pivotY;\n var pivotX = options.x + options.width * options.pivotX;\n this.rotateContext(canvas, options.angle, pivotX, pivotY);\n this.setStyle(canvas, options);\n ctx.translate(options.x, options.y);\n this.renderPath(canvas, options, collection);\n ctx.fill();\n ctx.translate(-options.x, -options.y);\n ctx.stroke();\n ctx.restore();\n };\n CanvasRenderer.prototype.renderPath = function (canvas, options, collection) {\n if (options.visible === true) {\n var ctx = CanvasRenderer.getContext(canvas);\n var x0 = void 0;\n var y0 = void 0;\n var x1 = void 0;\n var y1 = void 0;\n var x2 = void 0;\n var y2 = void 0;\n var x = void 0;\n var y = void 0;\n var length_1;\n var i = void 0;\n var newSeg = void 0;\n var segs = collection;\n for (x = 0, y = 0, i = 0, length_1 = segs.length; i < length_1; ++i) {\n var obj = segs[i];\n var seg = obj;\n var char = seg.command;\n if ('x1' in seg) {\n x1 = seg.x1;\n }\n if ('x2' in seg) {\n x2 = seg.x2;\n }\n if ('y1' in seg) {\n y1 = seg.y1;\n }\n if ('y2' in seg) {\n y2 = seg.y2;\n }\n if ('x' in seg) {\n x = seg.x;\n }\n if ('y' in seg) {\n y = seg.y;\n }\n switch (char) {\n case 'M':\n ctx.moveTo(x, y);\n seg.x = x;\n seg.y = y;\n break;\n case 'L':\n ctx.lineTo(x, y);\n seg.x = x;\n seg.y = y;\n break;\n case 'C':\n ctx.bezierCurveTo(x1, y1, x2, y2, x, y);\n seg.x = x;\n seg.y = y;\n seg.x1 = x1;\n seg.y1 = y1;\n seg.x2 = x2;\n seg.y2 = y2;\n break;\n case 'Q':\n ctx.quadraticCurveTo(x1, y1, x, y);\n seg.x = x;\n seg.y = y;\n seg.x1 = x1;\n seg.y1 = y1;\n break;\n case 'A':\n var curr = { x: x0, y: y0 };\n var rx = seg.r1;\n var ry = seg.r2;\n var xAxisRotation = seg.angle * (Math.PI / 180.0);\n var largeArc = seg.largeArc;\n var sweep = seg.sweep;\n var cp = { x: x, y: y };\n var currp = {\n x: Math.cos(xAxisRotation) * (curr.x - cp.x) / 2.0 + Math.sin(xAxisRotation) * (curr.y - cp.y) / 2.0,\n y: -Math.sin(xAxisRotation) * (curr.x - cp.x) / 2.0 + Math.cos(xAxisRotation) * (curr.y - cp.y) / 2.0\n };\n var l = Math.pow(currp.x, 2) / Math.pow(rx, 2) + Math.pow(currp.y, 2) / Math.pow(ry, 2);\n if (l > 1) {\n rx *= Math.sqrt(l);\n ry *= Math.sqrt(l);\n }\n var k = (Math.pow(ry, 2) * Math.pow(currp.x, 2));\n var s = (largeArc === sweep ? -1 : 1) * Math.sqrt(((Math.pow(rx, 2) * Math.pow(ry, 2)) - (Math.pow(rx, 2) * Math.pow(currp.y, 2)) - k) /\n (Math.pow(rx, 2) * Math.pow(currp.y, 2) + Math.pow(ry, 2) * Math.pow(currp.x, 2)));\n if (isNaN(s)) {\n s = 0;\n }\n var cpp = { x: s * rx * currp.y / ry, y: s * -ry * currp.x / rx };\n var centp = {\n x: (curr.x + cp.x) / 2.0 + Math.cos(xAxisRotation) * cpp.x - Math.sin(xAxisRotation) * cpp.y,\n y: (curr.y + cp.y) / 2.0 + Math.sin(xAxisRotation) * cpp.x + Math.cos(xAxisRotation) * cpp.y\n };\n var a1 = this.a([1, 0], [(currp.x - cpp.x) / rx, (currp.y - cpp.y) / ry]);\n var u = [(currp.x - cpp.x) / rx, (currp.y - cpp.y) / ry];\n var v = [(-currp.x - cpp.x) / rx, (-currp.y - cpp.y) / ry];\n var ad = this.a(u, v);\n if (this.r(u, v) <= -1) {\n ad = Math.PI;\n }\n if (this.r(u, v) >= 1) {\n ad = 0;\n }\n var dir = !sweep ? -1.0 : 1.0;\n var ah = a1 + dir * (ad / 2.0);\n var halfWay = {\n x: centp.x + rx * Math.cos(ah),\n y: centp.y + ry * Math.sin(ah)\n };\n seg.centp = centp;\n seg.xAxisRotation = xAxisRotation;\n seg.rx = rx;\n seg.ry = ry;\n seg.a1 = a1;\n seg.ad = ad;\n seg.sweep = sweep;\n if (ctx != null) {\n var ra = rx > ry ? rx : ry;\n var sx = rx > ry ? 1 : rx / ry;\n var sy = rx > ry ? ry / rx : 1;\n ctx.save();\n ctx.translate(centp.x, centp.y);\n ctx.rotate(xAxisRotation);\n ctx.scale(sx, sy);\n ctx.arc(0, 0, ra, a1, a1 + ad, !sweep);\n ctx.scale(1 / sx, 1 / sy);\n ctx.rotate(-xAxisRotation);\n ctx.translate(-centp.x, -centp.y);\n ctx.restore();\n }\n break;\n case 'Z':\n case 'z':\n ctx.closePath();\n x = x0;\n y = y0;\n break;\n }\n x0 = x;\n y0 = y;\n }\n }\n };\n CanvasRenderer.prototype.drawText = function (canvas, options) {\n if (options.content && options.visible === true) {\n var ctx = CanvasRenderer.getContext(canvas);\n ctx.save();\n this.setStyle(canvas, options);\n var pivotX = options.x + options.width * options.pivotX;\n var pivotY = options.y + options.height * options.pivotY;\n this.rotateContext(canvas, options.angle, pivotX, pivotY);\n this.setFontStyle(canvas, options);\n var i = 0;\n var childNodes = [];\n childNodes = options.childNodes;\n var wrapBounds = options.wrapBounds;\n ctx.fillStyle = options.color;\n if (wrapBounds) {\n var position = this.labelAlign(options, wrapBounds, childNodes);\n for (i = 0; i < childNodes.length; i++) {\n var child = childNodes[i];\n var offsetX = position.x + child.x - wrapBounds.x;\n var offsetY = position.y + child.dy * i + ((options.fontSize) * 0.8);\n if (wrapBounds.width > options.width && options.textOverflow !== 'Wrap') {\n child.text = overFlow(child.text, options);\n }\n ctx.fillText(child.text, offsetX, offsetY);\n if (options.textDecoration === 'Underline'\n || options.textDecoration === 'Overline'\n || options.textDecoration === 'LineThrough') {\n var startPointX = offsetX;\n var startPointY = void 0;\n var textlength = ctx.measureText(child.text).width;\n var endPointX = offsetX + textlength;\n var endPointY = void 0;\n switch (options.textDecoration) {\n case 'Underline':\n startPointY = offsetY + 2;\n endPointY = offsetY + 2;\n break;\n case 'Overline':\n startPointY = (position.y + child.dy * i);\n endPointY = (position.y + child.dy * i);\n break;\n case 'LineThrough':\n startPointY = ((offsetY + position.y + child.dy * i) / 2) + 2;\n endPointY = ((offsetY + position.y + child.dy * i) / 2) + 2;\n }\n ctx.beginPath();\n ctx.moveTo(startPointX, startPointY);\n ctx.lineTo(endPointX, endPointY);\n ctx.strokeStyle = options.color;\n ctx.lineWidth = options.fontSize * .08;\n ctx.globalAlpha = options.opacity;\n ctx.stroke();\n }\n }\n }\n ctx.restore();\n }\n };\n CanvasRenderer.prototype.drawImage = function (canvas, obj) {\n if (obj.visible) {\n var ctx = CanvasRenderer.getContext(canvas);\n ctx.save();\n var pivotX = obj.x + obj.width * obj.pivotX;\n var pivotY = obj.y + obj.height * obj.pivotY;\n var imageObj = new Image();\n imageObj.src = obj.source;\n /**\n * Since Clipping portion for node with slice option is not calculated properly\n * if (obj.sourceX !== undefined && obj.sourceY !== undefined && obj.sourceWidth !== undefined\n * && obj.sourceHeight !== undefined) {\n * ctx.drawImage(imageObj, obj.sourceX, obj.sourceY, obj.sourceWidth, obj.sourceHeight, obj.x, obj.y, obj.width, obj.height);\n * } else {\n * ctx.drawImage(imageObj, obj.x, obj.y, obj.width, obj.height);\n * }\n */\n // imageObj.onload = () => {\n ctx.translate(pivotX, pivotY);\n ctx.rotate(obj.angle * Math.PI / 180);\n var image = new Image();\n image.src = obj.source;\n this.image(ctx, image, -obj.width / 2, -obj.height / 2, obj.width, obj.height, obj);\n ctx.rotate(-(obj.angle * Math.PI / 180));\n ctx.translate(-pivotX, -pivotY);\n // };\n ctx.restore();\n }\n };\n CanvasRenderer.prototype.image = function (ctx, image, x, y, width, height, alignOptions) {\n ctx.beginPath();\n var srcWidth = image.width;\n var srcHeight = image.height;\n var destinationW = width;\n var destinationH = height;\n var resultWidth = 0;\n var resultHeight = 0;\n if (alignOptions && alignOptions.alignment !== 'None') {\n var xalign = alignOptions.alignment.toLowerCase().substr(1, 3);\n var yalign = alignOptions.alignment.toLowerCase().substr(5, 3);\n if (alignOptions.scale === 'Slice') {\n var a = function () {\n resultWidth = destinationW;\n resultHeight = srcHeight * destinationW / srcWidth;\n };\n var b = function () {\n resultWidth = srcWidth * destinationH / srcHeight;\n resultHeight = destinationH;\n };\n if (destinationW > destinationH) {\n a();\n if (destinationH > resultHeight) {\n b();\n }\n }\n else if (destinationW === destinationH) {\n if (srcWidth > srcHeight) {\n b();\n }\n else {\n a();\n }\n }\n else {\n b();\n if (destinationW > resultWidth) {\n a();\n }\n }\n var x1 = this.getSliceOffset(xalign, resultWidth, destinationW, srcWidth);\n var y1 = this.getSliceOffset(yalign, resultHeight, destinationH, srcHeight);\n var sWidth = srcWidth - x1;\n var sHeight = srcHeight - y1;\n var dWidth = resultWidth - (x1 * (resultWidth / srcWidth));\n var dHeight = resultHeight - (y1 * (resultHeight / srcHeight));\n var canvas1 = document.createElement('canvas');\n canvas1.setAttribute('width', width.toString());\n canvas1.setAttribute('height', height.toString());\n var ctx1 = canvas1.getContext('2d');\n ctx1.drawImage(image, x1, y1, sWidth, sHeight, 0, 0, dWidth, dHeight);\n ctx.drawImage(canvas1, x, y, width, height);\n }\n else if (alignOptions.scale === 'Meet') {\n var srcRatio = (srcHeight / srcWidth);\n var destRatio = (destinationH / destinationW);\n resultWidth = destRatio > srcRatio ? destinationW : destinationH / srcRatio;\n resultHeight = destRatio > srcRatio ? destinationW * srcRatio : destinationH;\n x += this.getMeetOffset(xalign, resultWidth, destinationW);\n y += this.getMeetOffset(yalign, resultHeight, destinationH);\n ctx.drawImage(image, 0, 0, srcWidth, srcHeight, x, y, resultWidth, resultHeight);\n }\n else {\n ctx.drawImage(image, x, y, width, height);\n }\n }\n else {\n ctx.drawImage(image, x, y, width, height);\n }\n ctx.closePath();\n };\n CanvasRenderer.prototype.getSliceOffset = function (arg, res, dest, src) {\n switch (arg) {\n case 'min': return 0;\n case 'mid': return (res - dest) / 2 * src / res;\n case 'max': return (res - dest) * src / res;\n default: return 0;\n }\n };\n CanvasRenderer.prototype.getMeetOffset = function (arg, res, dest) {\n var max = Math.max(res, dest);\n var min = Math.min(res, dest);\n switch (arg) {\n case 'min': return 0;\n case 'mid': return (max - min) / 2;\n case 'max': return max - min;\n default: return 0;\n }\n };\n //end region\n // vector magnitude\n CanvasRenderer.prototype.m = function (v) { return Math.sqrt(Math.pow(v[0], 2) + Math.pow(v[1], 2)); };\n // ratio between two vectors\n CanvasRenderer.prototype.r = function (u, v) { return (u[0] * v[0] + u[1] * v[1]) / (this.m(u) * this.m(v)); };\n // angle between two vectors\n CanvasRenderer.prototype.a = function (u, v) { return (u[0] * v[1] < u[1] * v[0] ? -1 : 1) * Math.acos(this.r(u, v)); };\n // text utility\n CanvasRenderer.prototype.labelAlign = function (text, wrapBounds, childNodes) {\n var bounds = new Size(wrapBounds.width, childNodes.length * (text.fontSize));\n var position = { x: 0, y: 0 };\n var labelX = text.x;\n var labelY = text.y;\n var offsetx = text.width * 0.5;\n var offsety = text.height * 0.5;\n var pointx = offsetx;\n var pointy = offsety;\n if (text.textAlign === 'left') {\n pointx = 0;\n }\n else if (text.textAlign === 'center') {\n if (wrapBounds.width > text.width && (text.textOverflow === 'Ellipsis' || text.textOverflow === 'Clip')) {\n pointx = 0;\n }\n else {\n pointx = text.width * 0.5;\n }\n }\n else if (text.textAlign === 'right') {\n pointx = (text.width * 1);\n }\n position.x = labelX + pointx + (wrapBounds ? wrapBounds.x : 0);\n position.y = labelY + pointy - bounds.height / 2;\n return position;\n };\n return CanvasRenderer;\n}());\nexport { CanvasRenderer };\n","import { Point } from './../primitives/point';\nimport { Size } from './../primitives/size';\nimport { pathSegmentCollection, processPathData } from './../utility/path-util';\nimport { setAttributeSvg } from './../utility/dom-util';\nimport { overFlow, wordBreakToString } from './../utility/base-util';\nimport { CanvasRenderer } from './../rendering/canvas-renderer';\nimport { createSvgElement, createHtmlElement, getBackgroundLayerSvg } from '../utility/dom-util';\n/**\n * SVG Renderer\n */\n/** @private */\nvar SvgRenderer = /** @class */ (function () {\n function SvgRenderer() {\n }\n SvgRenderer.prototype.renderShadow = function (options, canvas, collection, parentSvg) {\n if (collection === void 0) { collection = null; }\n var pointModel = { x: 0, y: 0 };\n var point = Point.transform(pointModel, options.shadow.angle, options.shadow.distance);\n var tX = options.x + point.x;\n var tY = options.y + point.y;\n var pivotX = tX + options.width * options.pivotX;\n var pivotY = tY + options.height * options.pivotY;\n var type;\n var shadowElement;\n if (parentSvg) {\n shadowElement = parentSvg.getElementById(canvas.id + '_shadow');\n }\n if (!shadowElement) {\n type = collection ? 'path' : 'rect';\n shadowElement = document.createElementNS('http://www.w3.org/2000/svg', type);\n canvas.appendChild(shadowElement);\n }\n var attr = {\n 'id': canvas.id + '_shadow', 'fill': options.shadow.color, 'stroke': options.shadow.color,\n 'opacity': options.shadow.opacity.toString(),\n 'transform': 'rotate(' + options.angle + ',' + (options.x + options.width * options.pivotX) + ','\n + (options.y + options.height * options.pivotY) + ')' +\n 'translate(' + (options.x + point.x) + ',' + (options.y + point.y) + ')'\n };\n if (parentSvg) {\n var svgContainer = parentSvg.getElementById(canvas.id);\n if (svgContainer) {\n svgContainer.insertBefore(shadowElement, svgContainer.firstChild);\n }\n }\n setAttributeSvg(shadowElement, attr);\n if (!collection) {\n setAttributeSvg(shadowElement, { 'width': options.width, 'height': options.height });\n }\n else if (collection) {\n this.renderPath(shadowElement, options, collection);\n }\n };\n SvgRenderer.prototype.parseDashArray = function (dashArray) {\n var dashes = [];\n return dashes;\n };\n SvgRenderer.prototype.drawRectangle = function (svg, options, diagramId, onlyRect, isSelector, parentSvg, ariaLabel) {\n if (options.shadow && !onlyRect) {\n this.renderShadow(options, svg, undefined, parentSvg);\n }\n var id;\n if (options.id === svg.id) {\n id = options.id + '_container';\n }\n else {\n id = options.id;\n }\n var rect;\n if (parentSvg) {\n rect = parentSvg.getElementById(id);\n }\n if (!rect || isSelector) {\n rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect');\n svg.appendChild(rect);\n }\n var shadowElement;\n if (parentSvg && !options.shadow) {\n shadowElement = parentSvg.getElementById(options.id + '_groupElement_shadow');\n if (shadowElement) {\n shadowElement.parentNode.removeChild(shadowElement);\n }\n }\n var attr = {\n 'id': id, 'x': options.x.toString(), 'y': options.y.toString(), 'width': options.width.toString(),\n 'height': options.height.toString(), 'visibility': options.visible ? 'visible' : 'hidden',\n 'transform': 'rotate(' + options.angle + ','\n + (options.x + options.width * options.pivotX) + ',' + (options.y + options.height * options.pivotY) + ')',\n 'rx': options.cornerRadius || 0, 'ry': options.cornerRadius || 0, 'opacity': options.opacity,\n 'aria-label': ariaLabel ? ariaLabel : ''\n };\n if (options.class) {\n attr['class'] = options.class;\n }\n var poiterEvents = 'pointer-events';\n if (!ariaLabel) {\n attr[poiterEvents] = 'none';\n }\n setAttributeSvg(rect, attr);\n this.setSvgStyle(rect, options, diagramId);\n };\n SvgRenderer.prototype.updateSelectionRegion = function (gElement, options) {\n var rect;\n rect = gElement.parentNode.getElementById(options.id);\n var attr;\n attr = {\n 'id': options.id, 'x': options.x.toString(), 'y': options.y.toString(), 'width': options.width.toString(),\n 'height': options.height.toString(), 'transform': 'rotate(' + options.angle + ','\n + (options.x + options.width * options.pivotX) + ',' + (options.y + options.height * options.pivotY) + ')',\n class: 'e-diagram-selected-region'\n };\n if (!rect) {\n rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect');\n gElement.appendChild(rect);\n }\n this.setSvgStyle(rect, options);\n setAttributeSvg(rect, attr);\n };\n SvgRenderer.prototype.createGElement = function (elementType, attribute) {\n var gElement = createSvgElement(elementType, attribute);\n return gElement;\n };\n /** @private */\n SvgRenderer.prototype.drawLine = function (gElement, options) {\n var line = document.createElementNS('http://www.w3.org/2000/svg', 'line');\n this.setSvgStyle(line, options);\n var pivotX = options.x + options.width * options.pivotX;\n var pivotY = options.y + options.height * options.pivotY;\n var kk = '';\n var attr = {\n 'id': options.id,\n 'x1': options.startPoint.x + options.x,\n 'y1': options.startPoint.y + options.y,\n 'x2': options.endPoint.x + options.x,\n 'y2': options.endPoint.y + options.y,\n 'stroke': options.stroke,\n 'stroke-width': options.strokeWidth.toString(), 'opacity': options.opacity.toString(),\n 'transform': 'rotate(' + options.angle + ' ' + pivotX + ' ' + pivotY + ')',\n 'visibility': options.visible ? 'visible' : 'hidden',\n };\n if (options.class) {\n attr['class'] = options.class;\n }\n setAttributeSvg(line, attr);\n gElement.appendChild(line);\n };\n /** @private */\n SvgRenderer.prototype.drawCircle = function (gElement, options, enableSelector, ariaLabel) {\n var circle = document.createElementNS('http://www.w3.org/2000/svg', 'circle');\n this.setSvgStyle(circle, options);\n var classval = options.class || '';\n if (!enableSelector) {\n classval += ' e-disabled';\n }\n var attr = {\n 'id': options.id,\n 'cx': options.centerX,\n 'cy': options.centerY,\n 'r': options.radius,\n 'visibility': options.visible ? 'visible' : 'hidden',\n 'class': classval,\n 'aria-label': ariaLabel ? ariaLabel['aria-label'] : ''\n };\n circle.style.display = options.visible ? 'block' : 'none';\n setAttributeSvg(circle, attr);\n gElement.appendChild(circle);\n };\n SvgRenderer.prototype.drawPath = function (svg, options, diagramId, isSelector, parentSvg, ariaLabel) {\n var id;\n var x = Math.floor((Math.random() * 10) + 1);\n id = svg.id + '_shape' + x.toString();\n var collection = [];\n collection = processPathData(options.data);\n collection = pathSegmentCollection(collection);\n if (options.shadow) {\n this.renderShadow(options, svg, collection, parentSvg);\n }\n var shadowElement;\n if (parentSvg && !options.shadow) {\n shadowElement = parentSvg.getElementById(options.id + '_groupElement_shadow');\n if (shadowElement) {\n shadowElement.parentNode.removeChild(shadowElement);\n }\n }\n var path;\n if (parentSvg) {\n path = parentSvg.getElementById(options.id);\n }\n if (!path || isSelector) {\n path = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n svg.appendChild(path);\n }\n this.renderPath(path, options, collection);\n var attr = {\n 'id': options.id, 'transform': 'rotate(' + options.angle + ',' + (options.x + options.width * options.pivotX) + ','\n + (options.y + options.height * options.pivotY) + ')' + 'translate(' + (options.x) + ',' + (options.y) + ')',\n 'visibility': options.visible ? 'visible' : 'hidden', 'opacity': options.opacity,\n 'aria-label': ariaLabel ? ariaLabel : ''\n };\n if (options.class) {\n attr['class'] = options.class;\n }\n setAttributeSvg(path, attr);\n this.setSvgStyle(path, options, diagramId);\n };\n SvgRenderer.prototype.renderPath = function (svg, options, collection) {\n var x1;\n var y1;\n var x2;\n var y2;\n var x;\n var y;\n var length;\n var i;\n var segments = collection;\n var d = '';\n for (x = 0, y = 0, i = 0, length = segments.length; i < length; ++i) {\n var obj = segments[i];\n var segment = obj;\n var char = segment.command;\n if ('x1' in segment) {\n x1 = segment.x1;\n }\n if ('x2' in segment) {\n x2 = segment.x2;\n }\n if ('y1' in segment) {\n y1 = segment.y1;\n }\n if ('y2' in segment) {\n y2 = segment.y2;\n }\n if ('x' in segment) {\n x = segment.x;\n }\n if ('y' in segment) {\n y = segment.y;\n }\n switch (char) {\n case 'M':\n d = d + 'M' + x.toString() + ',' + y.toString() + ' ';\n break;\n case 'L':\n d = d + 'L' + x.toString() + ',' + y.toString() + ' ';\n break;\n case 'C':\n d = d + 'C' + x1.toString() + ',' + y1.toString() + ',' + x2.toString() + ',' + y2.toString() + ',';\n d += x.toString() + ',' + y.toString() + ' ';\n break;\n case 'Q':\n d = d + 'Q' + x1.toString() + ',' + y1.toString() + ',' + x.toString() + ',' + y.toString() + ' ';\n break;\n case 'A':\n d = d + 'A' + segment.r1.toString() + ',' + segment.r2.toString() + ',' + segment.angle.toString() + ',';\n d += segment.largeArc.toString() + ',' + segment.sweep + ',' + x.toString() + ',' + y.toString() + ' ';\n break;\n case 'Z':\n case 'z':\n d = d + 'Z' + ' ';\n break;\n }\n }\n svg.setAttribute('d', d);\n };\n SvgRenderer.prototype.setSvgFontStyle = function (text, options) {\n text.style.fontStyle = options.italic ? 'italic' : 'normal';\n text.style.fontWeight = options.bold ? 'bold' : 'normal';\n text.style.fontSize = options.fontSize.toString() + 'px';\n text.style.fontFamily = options.fontFamily;\n };\n SvgRenderer.prototype.drawText = function (canvas, options, parentSvg, ariaLabel, diagramId) {\n if (options.content !== undefined) {\n var textNode = void 0;\n var childNodes = void 0;\n var wrapBounds = void 0;\n var position = void 0;\n var child = void 0;\n var tspanElement = void 0;\n var offsetX = 0;\n var offsetY = 0;\n var i = 0;\n var text = void 0;\n if (parentSvg) {\n text = parentSvg.getElementById(options.id + '_text');\n }\n if (text) {\n if (options.doWrap) {\n while (text.firstChild) {\n text.removeChild(text.firstChild);\n }\n }\n }\n else {\n options.doWrap = true;\n text = document.createElementNS('http://www.w3.org/2000/svg', 'text');\n if (options.whiteSpace === 'pre-wrap') {\n text.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');\n }\n canvas.appendChild(text);\n }\n var pivotX = options.x + options.width * options.pivotX;\n var pivotY = options.y + options.height * options.pivotY;\n if (options.doWrap) {\n this.setSvgStyle(text, options, diagramId);\n this.setSvgFontStyle(text, options);\n textNode = document.createTextNode(options.content);\n childNodes = options.childNodes;\n wrapBounds = options.wrapBounds;\n position = this.svgLabelAlign(options, wrapBounds, childNodes);\n if (wrapBounds.width > options.width && options.textOverflow !== 'Wrap') {\n childNodes[0].text = overFlow(options.content, options);\n }\n for (i = 0; i < childNodes.length; i++) {\n tspanElement = document.createElementNS('http://www.w3.org/2000/svg', 'tspan');\n textNode = document.createTextNode(childNodes[i].text);\n child = childNodes[i];\n offsetX = position.x + child.x - wrapBounds.x;\n offsetY = position.y + child.dy * (i) + ((options.fontSize) * 0.8);\n setAttributeSvg(tspanElement, { 'x': offsetX.toString(), 'y': offsetY.toString() });\n text.setAttribute('fill', child.text);\n tspanElement.appendChild(textNode);\n text.appendChild(tspanElement);\n }\n }\n if (options.textDecoration && options.textDecoration === 'LineThrough') {\n options.textDecoration = wordBreakToString(options.textDecoration);\n }\n var attr = {\n 'id': options.id + '_text', 'fill': options.color, 'visibility': options.visible ? 'visible' : 'hidden',\n 'text-decoration': options.textDecoration, 'transform': 'rotate(' + options.angle + ','\n + (pivotX) + ',' + (pivotY) + ')'\n + 'translate(' + (options.x) + ',' + (options.y) + ')', 'opacity': options.opacity,\n 'aria-label': ariaLabel ? ariaLabel : ''\n };\n setAttributeSvg(text, attr);\n }\n };\n SvgRenderer.prototype.drawImage = function (canvas, obj, parentSvg) {\n var id = obj.id + '_image';\n var image;\n if (parentSvg) {\n image = parentSvg.getElementById(obj.id + 'image');\n }\n if (!image) {\n image = document.createElementNS('http://www.w3.org/2000/svg', 'image');\n canvas.appendChild(image);\n }\n var imageObj = new Image();\n imageObj.src = obj.source;\n var scale = obj.scale !== 'None' ? obj.scale : '';\n var imgAlign = obj.alignment;\n var aspectRatio = imgAlign.charAt(0).toLowerCase() + imgAlign.slice(1);\n if (scale) {\n aspectRatio += ' ' + scale.charAt(0).toLowerCase() + scale.slice(1);\n }\n var attr = {\n 'id': obj.id + 'image', 'x': obj.x.toString(), 'y': obj.y.toString(), 'transform': 'rotate(' + obj.angle + ','\n + (obj.x + obj.width * obj.pivotX) + ',' + (obj.y + obj.height * obj.pivotY) + ')',\n 'width': obj.width.toString(), 'visibility': obj.visible ? 'visible' : 'hidden',\n 'height': obj.height.toString(), 'preserveAspectRatio': aspectRatio\n };\n setAttributeSvg(image, attr);\n image.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', imageObj.src.toString());\n };\n /** @private */\n SvgRenderer.prototype.drawHTMLContent = function (element, canvas, transform) {\n var htmlElement;\n if (canvas) {\n var i = void 0;\n for (i = 0; i < canvas.childNodes.length; i++) {\n if (canvas.childNodes[i].id === element.id + '_html_element') {\n htmlElement = canvas.childNodes[i];\n }\n }\n }\n if (!htmlElement) {\n var attr = {\n 'id': element.id + '_html_element',\n 'class': 'foreign-object'\n };\n htmlElement = createHtmlElement('div', attr);\n htmlElement.appendChild(element.template.cloneNode(true));\n canvas.appendChild(htmlElement);\n }\n htmlElement.setAttribute('style', 'height:' + (element.actualSize.height) + 'px; width:' + (element.actualSize.width) +\n 'px;left:' + (element.corners.x) + 'px; top:' + ((element.corners.y)) + 'px;' +\n 'position:absolute;transform:rotate(' + element.parentTransform + 'deg);' +\n 'pointer-events:all;visibility:' + ((element.visible) ? 'visible' : 'hidden') + ';');\n };\n /** @private */\n SvgRenderer.prototype.drawNativeContent = function (element, canvas, height, width, parentSvg) {\n var nativeElement;\n var clipPath;\n if (parentSvg) {\n nativeElement = parentSvg.getElementById(element.id + '_native_element');\n clipPath = parentSvg.getElementById(element.id + '_clip');\n }\n if (!nativeElement) {\n nativeElement = document.createElementNS('http://www.w3.org/2000/svg', 'g');\n nativeElement.setAttribute('id', element.id + '_native_element');\n nativeElement.appendChild(element.template.cloneNode(true));\n canvas.appendChild(nativeElement);\n }\n if (clipPath) {\n nativeElement.removeChild(clipPath);\n }\n nativeElement.setAttribute('style', 'visibility:' + ((element.visible) ? 'visible' : 'hidden') + ';');\n this.setNativTransform(element, nativeElement, height, width);\n if (element.scale === 'Slice') {\n this.drawClipPath(element, nativeElement, height, width, parentSvg);\n }\n setAttributeSvg(nativeElement, element.description ? { 'aria-label': element.description } : {});\n };\n SvgRenderer.prototype.setNativTransform = function (element, nativeElement, height, width) {\n var contentWidth = element.contentSize.width !== 0 ? element.contentSize.width : 1;\n var contentHeight = element.contentSize.height !== 0 ? element.contentSize.height : 1;\n var x = element.templatePosition.x * width / contentWidth;\n var y = element.templatePosition.y * height / contentHeight;\n nativeElement.setAttribute('transform', 'rotate(' + element.parentTransform + ',' + element.offsetX + ',' + element.offsetY +\n ') translate(' + (element.offsetX - x - width * element.pivot.x) + ',' + (element.offsetY - y - height * element.pivot.y) +\n ') scale(' + (width / contentWidth) + ',' + (height / contentHeight) + ')');\n };\n /**\n * used to crop the given native element into a rectangle of the given size\n * @private\n * @param node\n * @param group\n * @param height\n * @param width\n * @param parentSvg\n */\n SvgRenderer.prototype.drawClipPath = function (node, group, height, width, parentSvg) {\n var contentWidth = node.contentSize.width;\n var contentHeight = node.contentSize.height;\n var actualWidth = node.actualSize.width;\n var actualHeight = node.actualSize.height;\n var clipWidth = node.width / (width / contentWidth);\n var clipHeight = node.height / (height / contentHeight);\n var x = node.templatePosition.x + (node.width >= node.height ? 0 : (contentWidth - clipWidth) / 2);\n var y = node.templatePosition.y + (node.height >= node.width ? 0 : (contentHeight - clipHeight) / 2);\n var clipPath = parentSvg.getElementById(node.id + '_clip');\n clipPath = document.createElementNS('http://www.w3.org/2000/svg', 'clipPath');\n clipPath.setAttribute('id', node.id + '_clip');\n group.appendChild(clipPath);\n var rect = parentSvg.getElementById(node.id + '_clip_rect');\n rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect');\n clipPath.appendChild(rect);\n var attr = {\n 'id': node.id + '_clip_rect', 'width': clipWidth.toString(), 'height': clipHeight.toString(),\n 'x': x.toString(), 'y': y.toString()\n };\n setAttributeSvg(rect, attr);\n group.setAttribute('clip-path', 'url(#' + node.id + '_clip)');\n return group;\n };\n SvgRenderer.prototype.renderGradient = function (options, svg, diagramId) {\n var max;\n var min;\n var grd;\n var svgContainer = getBackgroundLayerSvg(diagramId);\n var defs = svgContainer.getElementById(diagramId + 'gradient_pattern');\n if (!defs) {\n defs = createSvgElement('defs', { id: diagramId + 'gradient_pattern' });\n svgContainer.insertBefore(defs, svgContainer.firstChild);\n }\n var radial;\n var linear;\n var stop;\n var offset;\n if (options.gradient.type !== 'None') {\n for (var i = 0; i < options.gradient.stops.length; i++) {\n max = !max ? options.gradient.stops[i].offset : Math.max(max, options.gradient.stops[i].offset);\n min = !min ? options.gradient.stops[i].offset : Math.min(min, options.gradient.stops[i].offset);\n }\n if (options.gradient.type === 'Linear') {\n linear = options.gradient;\n linear.id = svg.id + '_linear';\n grd = svgContainer.getElementById(svg.id + '_linear');\n if (grd) {\n grd.parentNode.removeChild(grd);\n }\n grd = this.createLinearGradient(linear);\n defs.appendChild(grd);\n }\n else {\n radial = options.gradient;\n radial.id = svg.id + '_radial';\n grd = svgContainer.getElementById(svg.id + '_radial');\n grd = svgContainer.getElementById(svg.id + '_linear');\n if (grd) {\n grd.parentNode.removeChild(grd);\n }\n grd = this.createRadialGradient(radial);\n defs.appendChild(grd);\n }\n for (var i = 0; i < options.gradient.stops.length; i++) {\n var stop_1 = options.gradient.stops[i];\n var offset_1 = min < 0 ? (max + stop_1.offset) / (2 * max) : stop_1.offset / max;\n var stopElement = document.createElementNS('http://www.w3.org/2000/svg', 'stop');\n setAttributeSvg(stopElement, { 'offset': offset_1.toString(), 'style': 'stop-color:' + stop_1.color });\n grd.appendChild(stopElement);\n }\n }\n return grd;\n };\n SvgRenderer.prototype.createLinearGradient = function (linear) {\n var lineargradient = document.createElementNS('http://www.w3.org/2000/svg', 'linearGradient');\n var attr = {\n 'id': linear.id, 'x1': linear.x1 + '%', 'y1': linear.y1 + '%', 'x2': linear.x2 + '%', 'y2': linear.y2 + '%'\n };\n setAttributeSvg(lineargradient, attr);\n return lineargradient;\n };\n SvgRenderer.prototype.createRadialGradient = function (radial) {\n var radialgradient = document.createElementNS('http://www.w3.org/2000/svg', 'radialGradient');\n var attr = {\n 'id': radial.id, 'cx': radial.cx + '%', 'cy': radial.cy + '%', 'r': radial.r + '%', 'fx': radial.fx + '%', 'fy': radial.fy + '%'\n };\n setAttributeSvg(radialgradient, attr);\n return radialgradient;\n };\n SvgRenderer.prototype.setSvgStyle = function (svg, style, diagramId) {\n if (style.fill === 'none') {\n style.fill = 'transparent';\n }\n if (style.stroke === 'none') {\n style.stroke = 'transparent';\n }\n var dashArray = [];\n var fill;\n if (style.dashArray !== undefined) {\n var canvasRenderer = new CanvasRenderer();\n dashArray = canvasRenderer.parseDashArray(style.dashArray);\n }\n if (style.gradient && style.gradient.type !== 'None') {\n var grd = this.renderGradient(style, svg, diagramId);\n fill = 'url(#' + grd.id + ')';\n }\n else {\n fill = style.fill;\n }\n if (style.stroke) {\n svg.setAttribute('stroke', style.stroke);\n }\n if (style.strokeWidth !== undefined) {\n svg.setAttribute('stroke-width', style.strokeWidth.toString());\n }\n if (dashArray) {\n svg.setAttribute('stroke-dasharray', dashArray.toString());\n }\n if (fill) {\n svg.setAttribute('fill', fill);\n }\n };\n //end region\n // text utility\n SvgRenderer.prototype.svgLabelAlign = function (text, wrapBound, childNodes) {\n var bounds = new Size(wrapBound.width, childNodes.length * (text.fontSize));\n var pos = { x: 0, y: 0 };\n var x = 0;\n var y = 0;\n var offsetX = text.width * 0.5;\n var offsety = text.height * 0.5;\n var pointX = offsetX;\n var pointY = offsety;\n if (text.textAlign === 'left') {\n pointX = 0;\n }\n else if (text.textAlign === 'center') {\n if (wrapBound.width > text.width && (text.textOverflow === 'Ellipsis' || text.textOverflow === 'Clip')) {\n pointX = 0;\n }\n else {\n pointX = text.width * 0.5;\n }\n }\n else if (text.textAlign === 'right') {\n pointX = (text.width * 1);\n }\n pos.x = x + pointX + (wrapBound ? wrapBound.x : 0);\n pos.y = y + pointY - bounds.height / 2;\n return pos;\n };\n return SvgRenderer;\n}());\nexport { SvgRenderer };\n","import { Transform } from '../../enum/enum';\nimport { Size } from '../../primitives/size';\nimport { Rect } from '../../primitives/rect';\nimport { getBounds, randomId } from '../../utility/base-util';\n/**\n * DiagramElement module defines the basic unit of diagram\n */\nvar DiagramElement = /** @class */ (function () {\n function DiagramElement() {\n /**\n * Sets/Gets the reference point of the element\n */\n this.pivot = { x: 0.5, y: 0.5 };\n /**\n * Sets or gets whether the content of the element needs to be measured\n */\n this.isDirt = true;\n /**\n * Sets or gets whether the content of the element to be visible\n */\n this.visible = true;\n /**\n * Sets/Gets the x-coordinate of the element\n */\n this.offsetX = 0;\n /**\n * Sets/Gets the y-coordinate of the element\n */\n this.offsetY = 0;\n /**\n * Set the corner of the element\n */\n this.cornerRadius = 0;\n /**\n * Sets/Gets the minimum height of the element\n */\n this.minHeight = undefined;\n /**\n * Sets/Gets the minimum width of the element\n */\n this.minWidth = undefined;\n /**\n * Sets/Gets the maximum width of the element\n */\n this.maxWidth = undefined;\n /**\n * Sets/Gets the maximum height of the element\n */\n this.maxHeight = undefined;\n /**\n * Sets/Gets the width of the element\n */\n this.width = undefined;\n /**\n * Sets/Gets the height of the element\n */\n this.height = undefined;\n /**\n * Sets/Gets the rotate angle of the element\n */\n this.rotateAngle = 0;\n /**\n * Sets/Gets the margin of the element\n */\n this.margin = { left: 0, right: 0, top: 0, bottom: 0 };\n /**\n * Sets/Gets how the element has to be horizontally arranged with respect to its immediate parent\n */\n this.horizontalAlignment = 'Auto';\n /**\n * Sets/Gets how the element has to be vertically arranged with respect to its immediate parent\n */\n this.verticalAlignment = 'Auto';\n /**\n * Sets whether the element has to be aligned with respect to a point/with respect to its immediate parent\n */\n this.relativeMode = 'Point';\n /**\n * Sets whether the element has to be transformed based on its parent or not\n */\n this.transform = Transform.Self | Transform.Parent;\n /**\n * Sets the style of the element\n */\n this.style = { fill: 'white', strokeColor: 'black', opacity: 1, strokeWidth: 1 };\n /**\n * Gets the minimum size that is required by the element\n */\n this.desiredSize = new Size();\n /**\n * Gets the size that the element will be rendered\n */\n this.actualSize = new Size();\n /**\n * Gets the rotate angle that is set to the immediate parent of the element\n */\n this.parentTransform = 0;\n this.isSvgRender = false;\n /**\n * Gets/Sets the boundary of the element\n */\n this.bounds = new Rect(0, 0, 0, 0);\n /**\n * Gets/Sets the corners of the rectangular bounds\n */\n this.corners = new Rect(0, 0, 0, 0);\n /**\n * Defines the appearance of the shadow of the element\n */\n this.shadow = null;\n /**\n * Defines the description of the diagram element\n */\n this.description = '';\n /**\n * Defines whether the element has to be measured or not\n */\n this.staticSize = false;\n this.isRectElement = false;\n //private variables\n this.position = undefined;\n this.unitMode = undefined;\n this.float = false;\n this.floatingBounds = undefined;\n this.id = randomId();\n }\n /**\n * Sets the offset of the element with respect to its parent\n * @param x\n * @param y\n * @param mode\n */\n DiagramElement.prototype.setOffsetWithRespectToBounds = function (x, y, mode) {\n this.unitMode = mode;\n this.position = { x: x, y: y };\n };\n /**\n * Gets the position of the element with respect to its parent\n * @param size\n */\n DiagramElement.prototype.getAbsolutePosition = function (size) {\n if (this.position !== undefined) {\n if (this.unitMode === 'Absolute') {\n return this.position;\n }\n else {\n return {\n x: this.position.x * size.width, y: this.position.y * size.height\n };\n }\n }\n return undefined;\n };\n Object.defineProperty(DiagramElement.prototype, \"outerBounds\", {\n get: function () {\n return this.floatingBounds || this.bounds;\n },\n set: function (bounds) {\n this.floatingBounds = bounds;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Measures the minimum space that the element requires\n * @param availableSize\n */\n DiagramElement.prototype.measure = function (availableSize) {\n var width = this.width !== undefined ? this.width : (availableSize.width || 0) - this.margin.left - this.margin.right;\n var height = this.height !== undefined ? this.height : (availableSize.height || 0) - this.margin.top - this.margin.bottom;\n this.desiredSize = new Size(width, height);\n this.desiredSize = this.validateDesiredSize(this.desiredSize, availableSize);\n return this.desiredSize;\n };\n /**\n * Arranges the element\n * @param desiredSize\n */\n DiagramElement.prototype.arrange = function (desiredSize) {\n this.actualSize = desiredSize;\n this.updateBounds();\n return this.actualSize;\n };\n /**\n * Updates the bounds of the element\n */\n DiagramElement.prototype.updateBounds = function () {\n this.bounds = getBounds(this);\n };\n /**\n * Validates the size of the element with respect to its minimum and maximum size\n * @param desiredSize\n * @param availableSize\n */\n DiagramElement.prototype.validateDesiredSize = function (desiredSize, availableSize) {\n //Empty canvas\n if (this.isRectElement && !this.width && !this.minWidth && !this.maxWidth) {\n desiredSize.width = 50;\n }\n if (this.isRectElement && !this.height && !this.minHeight && !this.maxHeight) {\n desiredSize.height = 50;\n }\n if (desiredSize === undefined || this.width !== undefined &&\n this.height !== undefined) {\n desiredSize = desiredSize || new Size();\n desiredSize.width = this.width === undefined ? (availableSize.width || 0)\n - this.margin.left - this.margin.right : this.width;\n desiredSize.height = this.height === undefined ? (availableSize.height || 0)\n - this.margin.top - this.margin.bottom : this.height;\n }\n //Considering min values\n if (this.minWidth !== undefined) {\n desiredSize.width = Math.max(desiredSize.width, this.minWidth);\n }\n if (this.minHeight !== undefined) {\n desiredSize.height = Math.max(desiredSize.height, this.minHeight);\n }\n //Considering max values\n if (this.maxWidth !== undefined) {\n desiredSize.width = Math.min(desiredSize.width, this.maxWidth);\n }\n if (this.maxHeight !== undefined) {\n desiredSize.height = Math.min(desiredSize.height, this.maxHeight);\n }\n return desiredSize;\n };\n return DiagramElement;\n}());\nexport { DiagramElement };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Size } from '../../primitives/size';\nimport { DiagramElement } from './diagram-element';\nimport { Rect } from '../../primitives/rect';\nimport { measurePath, findSegmentPoints, translatePoints } from './../../utility/dom-util';\nimport { processPathData, splitArrayCollection, transformPath, getPathString } from '../../utility/path-util';\n/**\n * PathElement takes care of how to align the path based on offsetX and offsetY\n */\nvar PathElement = /** @class */ (function (_super) {\n __extends(PathElement, _super);\n /**\n * set the id for each element\n */\n function PathElement() {\n var _this = _super.call(this) || this;\n /**\n * Gets or sets the geometry of the path element\n */\n _this.pathData = '';\n /**\n * Gets/Sets whether the path has to be transformed to fit the given x,y, width, height\n */\n _this.transformPath = true;\n /**\n * Gets/Sets the equivalent path, that will have the origin as 0,0\n */\n _this.absolutePath = '';\n //Private variables\n _this.absoluteBounds = new Rect();\n return _this;\n }\n Object.defineProperty(PathElement.prototype, \"data\", {\n get: function () {\n return this.pathData;\n },\n set: function (value) {\n if (this.pathData !== value) {\n this.pathData = value;\n this.isDirt = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n /** @private */\n PathElement.prototype.getPoints = function () {\n var _this = this;\n if (!this.pointTimer) {\n this.pointTimer = setTimeout(function () {\n _this.points = null;\n _this.pointTimer = null;\n }, 200);\n }\n this.points = this.points || findSegmentPoints(this);\n return translatePoints(this, this.points);\n };\n /**\n * Measures the minimum space that is required to render the element\n * @param availableSize\n */\n PathElement.prototype.measure = function (availableSize) {\n //Performance issue - Avoiding measuring the connector path\n if (this.staticSize && this.width !== undefined && this.height !== undefined) {\n this.absoluteBounds = new Rect(this.offsetX - this.width * this.pivot.x, this.offsetY - this.height * this.pivot.y, this.width, this.height);\n }\n else if (this.isDirt && (this.transformPath || (this.width === undefined || this.height === undefined))) {\n //Measure the element only whent the path data is changed/ size is not specified\n this.absoluteBounds = measurePath(this.data ? this.data : '');\n }\n if (this.width === undefined) {\n this.desiredSize = new Size(this.absoluteBounds.width, this.height || this.absoluteBounds.height);\n }\n else if (this.height === undefined) {\n this.desiredSize = new Size(this.width || this.absoluteBounds.width, this.absoluteBounds.height);\n }\n else {\n this.desiredSize = new Size(this.width, this.height);\n }\n this.desiredSize = this.validateDesiredSize(this.desiredSize, availableSize);\n return this.desiredSize;\n };\n /**\n * Arranges the path element\n * @param desiredSize\n */\n PathElement.prototype.arrange = function (desiredSize) {\n if (this.isDirt || this.actualSize.width !== desiredSize.width || this.actualSize.height !== desiredSize.height) {\n this.isDirt = true;\n this.absolutePath = this.updatePath(this.data, this.absoluteBounds, desiredSize);\n if (!this.staticSize) {\n this.points = null;\n }\n }\n this.actualSize = this.desiredSize;\n this.updateBounds();\n this.isDirt = false;\n return this.actualSize;\n };\n /**\n * Translates the path to 0,0 and scales the path based on the actual size\n * @param pathData\n * @param bounds\n * @param actualSize\n */\n PathElement.prototype.updatePath = function (pathData, bounds, actualSize) {\n var isScale = false;\n var newPathString = '';\n var scaleX = -bounds.x;\n var scaleY = -bounds.y;\n var arrayCollection = [];\n if (actualSize.width !== bounds.width || actualSize.height !== bounds.height) {\n scaleX = actualSize.width / Number(bounds.width ? bounds.width : 1);\n scaleY = actualSize.height / Number(bounds.height ? bounds.height : 1);\n isScale = true;\n }\n arrayCollection = processPathData(pathData);\n arrayCollection = splitArrayCollection(arrayCollection);\n if ((isScale || this.isDirt) && this.transformPath) {\n newPathString = transformPath(arrayCollection, scaleX, scaleY, isScale, bounds.x, bounds.y, 0, 0);\n }\n else {\n newPathString = getPathString(arrayCollection);\n }\n isScale = false;\n return newPathString;\n };\n return PathElement;\n}(DiagramElement));\nexport { PathElement };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Size } from '../../primitives/size';\nimport { DiagramElement } from './diagram-element';\nimport { measureImage } from './../../utility/dom-util';\n/**\n * ImageElement defines a basic image elements\n */\nvar ImageElement = /** @class */ (function (_super) {\n __extends(ImageElement, _super);\n /**\n * set the id for each element\n */\n function ImageElement() {\n var _this = _super.call(this) || this;\n /**\n * sets or gets the image source\n */\n _this.imageSource = '';\n /**\n * sets scaling factor of the image\n */\n _this.imageScale = 'None';\n /**\n * sets the alignment of the image\n */\n _this.imageAlign = 'None';\n /**\n * Sets how to stretch the image\n */\n _this.stretch = 'Stretch';\n return _this;\n }\n Object.defineProperty(ImageElement.prototype, \"source\", {\n get: function () {\n return this.imageSource;\n },\n set: function (value) {\n this.imageSource = value;\n this.isDirt = true;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Measures minimum space that is required to render the image\n * @param availableSize\n */\n ImageElement.prototype.measure = function (availableSize) {\n if (this.isDirt && (this.stretch !== 'Stretch' || this.width === undefined && this.height === undefined)) {\n this.contentSize = measureImage(this.source, this.contentSize);\n this.isDirt = false;\n }\n if (this.width !== undefined && this.height !== undefined) {\n this.desiredSize = new Size(this.width, this.height);\n this.contentSize = this.desiredSize;\n }\n else {\n this.desiredSize = this.contentSize;\n }\n this.desiredSize = this.validateDesiredSize(this.desiredSize, availableSize);\n return this.desiredSize;\n };\n /**\n * Arranges the image\n * @param desiredSize\n */\n ImageElement.prototype.arrange = function (desiredSize) {\n this.actualSize = new Size(this.desiredSize.width, this.desiredSize.height);\n this.updateBounds();\n return this.actualSize;\n };\n return ImageElement;\n}(DiagramElement));\nexport { ImageElement };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Size } from '../../primitives/size';\nimport { DiagramElement } from './diagram-element';\nimport { measureText } from './../../utility/dom-util';\n/**\n * TextElement is used to display text/annotations\n */\nvar TextElement = /** @class */ (function (_super) {\n __extends(TextElement, _super);\n /**\n * set the id for each element\n */\n function TextElement() {\n var _this = _super.call(this) || this;\n /**\n * sets or gets the image source\n */\n _this.textContent = '';\n _this.hyperlink = {\n color: 'blue'\n };\n /** @private */\n _this.doWrap = true;\n _this.textNodes = [];\n /**\n * Defines the appearance of the text element\n */\n _this.style = {\n color: 'black', fill: 'white', strokeColor: 'black',\n strokeWidth: 1, fontFamily: 'Arial', fontSize: 12, whiteSpace: 'CollapseSpace',\n textWrapping: 'WrapWithOverflow', textAlign: 'Center', italic: false, bold: false,\n textDecoration: 'None', strokeDashArray: '', opacity: 5, gradient: null,\n textOverflow: 'Wrap'\n };\n return _this;\n }\n Object.defineProperty(TextElement.prototype, \"content\", {\n get: function () {\n return this.textContent;\n },\n set: function (value) {\n if (this.textContent !== value) {\n this.textContent = value;\n this.isDirt = true;\n this.doWrap = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextElement.prototype, \"childNodes\", {\n get: function () {\n return this.textNodes;\n },\n set: function (value) {\n this.textNodes = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextElement.prototype, \"wrapBounds\", {\n get: function () {\n return this.textWrapBounds;\n },\n set: function (value) {\n this.textWrapBounds = value;\n },\n enumerable: true,\n configurable: true\n });\n /** @private */\n TextElement.prototype.refreshTextElement = function () {\n this.isDirt = true;\n };\n /**\n * Measures the minimum size that is required for the text element\n * @param availableSize\n */\n TextElement.prototype.measure = function (availableSize) {\n var size;\n if (this.isDirt) {\n size = measureText(this, this.style, this.content, this.width);\n }\n else {\n size = this.desiredSize;\n }\n if (this.width === undefined || this.height === undefined) {\n this.desiredSize = new Size(size.width, size.height);\n }\n else {\n this.desiredSize = new Size(this.width, this.height);\n }\n this.desiredSize = this.validateDesiredSize(this.desiredSize, availableSize);\n return this.desiredSize;\n };\n /**\n * Arranges the text element\n * @param desiredSize\n */\n TextElement.prototype.arrange = function (desiredSize) {\n if (desiredSize.width !== this.actualSize.width || desiredSize.height !== this.actualSize.height || this.isDirt) {\n this.doWrap = true;\n }\n this.actualSize = desiredSize;\n this.updateBounds();\n this.isDirt = false;\n return this.actualSize;\n };\n return TextElement;\n}(DiagramElement));\nexport { TextElement };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, Collection, ComplexFactory } from '@syncfusion/ej2-base';\nvar getGradientType = function (obj) {\n switch (obj.type) {\n case 'Linear':\n return LinearGradient;\n case 'Radial':\n return RadialGradient;\n default:\n return LinearGradient;\n }\n};\n/**\n * Layout Model module defines the styles and types to arrange objects in containers\n */\nvar Thickness = /** @class */ (function () {\n function Thickness(left, right, top, bottom) {\n this.left = left;\n this.right = right;\n this.top = top;\n this.bottom = bottom;\n }\n return Thickness;\n}());\nexport { Thickness };\n/**\n * Defines the space to be left between an object and its immediate parent\n */\nvar Margin = /** @class */ (function (_super) {\n __extends(Margin, _super);\n function Margin() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0)\n ], Margin.prototype, \"left\", void 0);\n __decorate([\n Property(0)\n ], Margin.prototype, \"right\", void 0);\n __decorate([\n Property(0)\n ], Margin.prototype, \"top\", void 0);\n __decorate([\n Property(0)\n ], Margin.prototype, \"bottom\", void 0);\n return Margin;\n}(ChildProperty));\nexport { Margin };\n/**\n * Defines the Shadow appearance of the objects\n */\nvar Shadow = /** @class */ (function (_super) {\n __extends(Shadow, _super);\n function Shadow() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(45)\n ], Shadow.prototype, \"angle\", void 0);\n __decorate([\n Property(5)\n ], Shadow.prototype, \"distance\", void 0);\n __decorate([\n Property(0.7)\n ], Shadow.prototype, \"opacity\", void 0);\n __decorate([\n Property('lightgrey')\n ], Shadow.prototype, \"color\", void 0);\n return Shadow;\n}(ChildProperty));\nexport { Shadow };\n/**\n * Defines the stop of gradient\n */\nvar Stop = /** @class */ (function (_super) {\n __extends(Stop, _super);\n function Stop() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Stop.prototype, \"color\", void 0);\n __decorate([\n Property(0)\n ], Stop.prototype, \"offset\", void 0);\n __decorate([\n Property(1)\n ], Stop.prototype, \"opacity\", void 0);\n return Stop;\n}(ChildProperty));\nexport { Stop };\n/**\n * Defines the gradient of styles\n */\nvar Gradient = /** @class */ (function (_super) {\n __extends(Gradient, _super);\n function Gradient() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Collection([], Stop)\n ], Gradient.prototype, \"stops\", void 0);\n __decorate([\n Property('None')\n ], Gradient.prototype, \"type\", void 0);\n __decorate([\n Property('')\n ], Gradient.prototype, \"id\", void 0);\n return Gradient;\n}(ChildProperty));\nexport { Gradient };\n/**\n * Defines the linear gradient of styles\n */\nvar LinearGradient = /** @class */ (function (_super) {\n __extends(LinearGradient, _super);\n function LinearGradient() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0)\n ], LinearGradient.prototype, \"x1\", void 0);\n __decorate([\n Property(0)\n ], LinearGradient.prototype, \"x2\", void 0);\n __decorate([\n Property(0)\n ], LinearGradient.prototype, \"y1\", void 0);\n __decorate([\n Property(0)\n ], LinearGradient.prototype, \"y2\", void 0);\n return LinearGradient;\n}(Gradient));\nexport { LinearGradient };\n/**\n * Defines the radial gradient of styles\n */\nvar RadialGradient = /** @class */ (function (_super) {\n __extends(RadialGradient, _super);\n function RadialGradient() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0)\n ], RadialGradient.prototype, \"cx\", void 0);\n __decorate([\n Property(0)\n ], RadialGradient.prototype, \"cy\", void 0);\n __decorate([\n Property(0)\n ], RadialGradient.prototype, \"fx\", void 0);\n __decorate([\n Property(0)\n ], RadialGradient.prototype, \"fy\", void 0);\n __decorate([\n Property(50)\n ], RadialGradient.prototype, \"r\", void 0);\n return RadialGradient;\n}(Gradient));\nexport { RadialGradient };\n/**\n * Defines the style of shape/path\n */\nvar ShapeStyle = /** @class */ (function (_super) {\n __extends(ShapeStyle, _super);\n function ShapeStyle() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('white')\n ], ShapeStyle.prototype, \"fill\", void 0);\n __decorate([\n Property('black')\n ], ShapeStyle.prototype, \"strokeColor\", void 0);\n __decorate([\n Property('')\n ], ShapeStyle.prototype, \"strokeDashArray\", void 0);\n __decorate([\n Property(1)\n ], ShapeStyle.prototype, \"strokeWidth\", void 0);\n __decorate([\n Property(1)\n ], ShapeStyle.prototype, \"opacity\", void 0);\n __decorate([\n ComplexFactory(getGradientType)\n ], ShapeStyle.prototype, \"gradient\", void 0);\n return ShapeStyle;\n}(ChildProperty));\nexport { ShapeStyle };\n/**\n * Defines the stroke style of a path\n */\nvar StrokeStyle = /** @class */ (function (_super) {\n __extends(StrokeStyle, _super);\n function StrokeStyle() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('transparent')\n ], StrokeStyle.prototype, \"fill\", void 0);\n return StrokeStyle;\n}(ShapeStyle));\nexport { StrokeStyle };\n/**\n * Defines the appearance of text\n */\nvar TextStyle = /** @class */ (function (_super) {\n __extends(TextStyle, _super);\n function TextStyle() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('black')\n ], TextStyle.prototype, \"color\", void 0);\n __decorate([\n Property('Arial')\n ], TextStyle.prototype, \"fontFamily\", void 0);\n __decorate([\n Property(12)\n ], TextStyle.prototype, \"fontSize\", void 0);\n __decorate([\n Property(false)\n ], TextStyle.prototype, \"italic\", void 0);\n __decorate([\n Property(false)\n ], TextStyle.prototype, \"bold\", void 0);\n __decorate([\n Property('CollapseSpace')\n ], TextStyle.prototype, \"whiteSpace\", void 0);\n __decorate([\n Property('WrapWithOverflow')\n ], TextStyle.prototype, \"textWrapping\", void 0);\n __decorate([\n Property('Center')\n ], TextStyle.prototype, \"textAlign\", void 0);\n __decorate([\n Property('None')\n ], TextStyle.prototype, \"textDecoration\", void 0);\n __decorate([\n Property('Wrap')\n ], TextStyle.prototype, \"textOverflow\", void 0);\n return TextStyle;\n}(ShapeStyle));\nexport { TextStyle };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { DiagramElement } from '../elements/diagram-element';\nimport { Thickness } from '../appearance';\nimport { Size } from '../../primitives/size';\nimport { Rect } from '../../primitives/rect';\nimport { rotatePoint, getOffset } from '../../utility/base-util';\n/**\n * Container module is used to group related objects\n */\nvar Container = /** @class */ (function (_super) {\n __extends(Container, _super);\n function Container() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\n * Gets/Sets the space between the container and its immediate children\n */\n _this.padding = new Thickness(0, 0, 0, 0);\n //private members \n _this.desiredBounds = undefined;\n /** @private */\n _this.measureChildren = true;\n _this.prevRotateAngle = 0;\n return _this;\n }\n /**\n * returns whether the container has child elements or not\n */\n Container.prototype.hasChildren = function () {\n if (this.children !== undefined && this.children.length > 0) {\n return true;\n }\n return false;\n };\n /**\n * Measures the minimum space that the container requires\n *\n * @param availableSize\n */\n Container.prototype.measure = function (availableSize) {\n // measure the element and find the desired size\n this.desiredBounds = undefined;\n var desired = undefined;\n var child;\n var center = { x: 0, y: 0 };\n var y;\n var x;\n var childBounds;\n if (this.hasChildren()) {\n //Measuring the children\n for (var i = 0; i < this.children.length; i++) {\n child = this.children[i];\n var force = child.horizontalAlignment === 'Stretch' || child.verticalAlignment === 'Stretch';\n if (this.measureChildren || force || (child instanceof Container && child.measureChildren !== undefined)) {\n child.measure(availableSize);\n }\n childBounds = this.GetChildrenBounds(child);\n if (child.horizontalAlignment !== 'Stretch' && child.verticalAlignment !== 'Stretch') {\n if (this.desiredBounds === undefined) {\n this.desiredBounds = childBounds;\n }\n else {\n this.desiredBounds.uniteRect(childBounds);\n }\n }\n }\n if (this.desiredBounds !== undefined && this.rotateAngle !== 0) {\n var offsetPt = {\n x: this.desiredBounds.x + this.desiredBounds.width * this.pivot.x,\n y: this.desiredBounds.y + this.desiredBounds.height * this.pivot.y\n };\n var newPoint = rotatePoint(this.rotateAngle, undefined, undefined, offsetPt);\n this.desiredBounds.x = newPoint.x - this.desiredBounds.width * this.pivot.x;\n this.desiredBounds.y = newPoint.y - this.desiredBounds.height * this.pivot.y;\n }\n if (this.desiredBounds) {\n desired = new Size(this.desiredBounds.width, this.desiredBounds.height);\n }\n }\n desired = this.validateDesiredSize(desired, availableSize);\n this.stretchChildren(desired);\n this.desiredSize = desired;\n return desired;\n };\n /**\n * Arranges the container and its children\n * @param desiredSize\n */\n Container.prototype.arrange = function (desiredSize) {\n var child;\n var bounds;\n var childBounds = this.desiredBounds;\n if (childBounds) {\n var x = this.offsetX;\n var y = this.offsetY;\n this.offsetX = childBounds.x + childBounds.width * this.pivot.x;\n this.offsetY = childBounds.y + childBounds.height * this.pivot.y;\n // container has rotateAngle\n if (this.hasChildren()) {\n //Measuring the children\n for (var i = 0; i < this.children.length; i++) {\n child = this.children[i];\n var arrange = false;\n if (child.horizontalAlignment === 'Stretch') {\n child.offsetX = this.offsetX;\n child.parentTransform = this.parentTransform + this.rotateAngle;\n arrange = true;\n }\n if (child.verticalAlignment === 'Stretch') {\n child.offsetY = this.offsetY;\n child.parentTransform = this.parentTransform + this.rotateAngle;\n arrange = true;\n }\n if (arrange || this.measureChildren || (child instanceof Container && child.measureChildren !== undefined)) {\n child.arrange(child.desiredSize);\n }\n }\n }\n }\n this.actualSize = desiredSize;\n this.updateBounds();\n this.prevRotateAngle = this.rotateAngle;\n return desiredSize;\n };\n //protected methods\n /**\n * Stretches the child elements based on the size of the container\n * @param size\n */\n Container.prototype.stretchChildren = function (size) {\n if (this.hasChildren()) {\n for (var _i = 0, _a = this.children; _i < _a.length; _i++) {\n var child = _a[_i];\n if (child.horizontalAlignment === 'Stretch' || child.desiredSize.width === undefined) {\n child.desiredSize.width = size.width - child.margin.left - child.margin.right;\n }\n if (child.verticalAlignment === 'Stretch' || child.desiredSize.height === undefined) {\n child.desiredSize.height = size.height - child.margin.top - child.margin.bottom;\n }\n if (child instanceof Container) {\n child.stretchChildren(child.desiredSize);\n }\n }\n }\n };\n /**\n * Considers the padding of the element when measuring its desired size\n * @param size\n */\n Container.prototype.applyPadding = function (size) {\n size.width += this.padding.left + this.padding.right;\n size.height += this.padding.top + this.padding.bottom;\n };\n /**\n * Finds the offset of the child element with respect to the container\n * @param child\n * @param center\n */\n Container.prototype.findChildOffsetFromCenter = function (child, center) {\n var topLeft = { x: center.x - child.desiredSize.width / 2, y: center.y - child.desiredSize.height / 2 };\n var offset = getOffset(topLeft, child);\n //Rotate based on child rotate angle\n offset = rotatePoint(child.rotateAngle, center.x, center.y, offset);\n //Rotate based on parent pivot\n offset = rotatePoint(this.rotateAngle + this.parentTransform, this.offsetX, this.offsetY, offset);\n child.offsetX = offset.x;\n child.offsetY = offset.y;\n };\n //private methods - check its need\n Container.prototype.GetChildrenBounds = function (child) {\n var childBounds;\n var childSize;\n childSize = child.desiredSize.clone();\n var diffAngle = child.rotateAngle - this.rotateAngle;\n var refPoint = { x: child.offsetX, y: child.offsetY };\n var left = refPoint.x - childSize.width * child.pivot.x;\n var top = refPoint.y - childSize.height * child.pivot.y;\n var right = left + childSize.width;\n var bottom = top + childSize.height;\n var topLeft = { x: left, y: top };\n var topRight = { x: right, y: top };\n var bottomLeft = { x: left, y: bottom };\n var bottomRight = { x: right, y: bottom };\n topLeft = rotatePoint(child.rotateAngle, child.offsetX, child.offsetY, topLeft);\n topRight = rotatePoint(child.rotateAngle, child.offsetX, child.offsetY, topRight);\n bottomLeft = rotatePoint(child.rotateAngle, child.offsetX, child.offsetY, bottomLeft);\n bottomRight = rotatePoint(child.rotateAngle, child.offsetX, child.offsetY, bottomRight);\n if (this.rotateAngle !== 0) {\n topLeft = rotatePoint(-this.rotateAngle, undefined, undefined, topLeft);\n topRight = rotatePoint(-this.rotateAngle, undefined, undefined, topRight);\n bottomLeft = rotatePoint(-this.rotateAngle, undefined, undefined, bottomLeft);\n bottomRight = rotatePoint(-this.rotateAngle, undefined, undefined, bottomRight);\n }\n return Rect.toBounds([topLeft, topRight, bottomLeft, bottomRight]);\n };\n return Container;\n}(DiagramElement));\nexport { Container };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Size } from '../../primitives/size';\nimport { DiagramElement } from './diagram-element';\nimport { measureNativeContent, getContent, measureNativeSvg } from './../../utility/dom-util';\n/**\n * NativeElement defines the basic native elements\n */\nvar DiagramNativeElement = /** @class */ (function (_super) {\n __extends(DiagramNativeElement, _super);\n /**\n * set the id for each element\n */\n function DiagramNativeElement() {\n var _this = _super.call(this) || this;\n _this.data = '';\n /**\n * sets scaling factor of the Native Element\n */\n _this.scale = 'Stretch';\n return _this;\n }\n Object.defineProperty(DiagramNativeElement.prototype, \"content\", {\n /**\n * Gets or sets the geometry of the native element\n */\n get: function () {\n return this.data;\n },\n set: function (value) {\n this.data = value;\n this.template = getContent(this, false);\n this.isDirt = true;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Measures minimum space that is required to render the Native Element\n * @param availableSize\n */\n DiagramNativeElement.prototype.measure = function (availableSize) {\n if (this.isDirt) {\n var rect = measureNativeContent(this.template);\n this.contentSize = new Size();\n this.contentSize.width = rect.width;\n this.contentSize.height = rect.height;\n var x = rect.x;\n var y = rect.y;\n this.templatePosition = { x: x, y: y };\n this.isDirt = false;\n }\n if (this.width === undefined || this.height === undefined) {\n var getAvailableSize = measureNativeSvg(this.template);\n this.desiredSize = new Size(getAvailableSize.width, getAvailableSize.height);\n }\n else {\n this.desiredSize = new Size(this.width, this.height);\n }\n this.desiredSize = this.validateDesiredSize(this.desiredSize, availableSize);\n return this.desiredSize;\n };\n /**\n * Arranges the Native Element\n * @param desiredSize\n */\n DiagramNativeElement.prototype.arrange = function (desiredSize) {\n this.actualSize = new Size(this.desiredSize.width, this.desiredSize.height);\n this.updateBounds();\n return this.actualSize;\n };\n return DiagramNativeElement;\n}(DiagramElement));\nexport { DiagramNativeElement };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Container } from './container';\nimport { rotateSize } from '../../utility/base-util';\nimport { Transform } from '../../enum/enum';\nimport { Size } from '../../primitives/size';\nimport { Rect } from '../../primitives/rect';\n/**\n * Canvas module is used to define a plane(canvas) and to arrange the children based on margin\n */\nvar Canvas = /** @class */ (function (_super) {\n __extends(Canvas, _super);\n function Canvas() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\n * Not applicable for canvas\n * @private\n */\n _this.measureChildren = undefined;\n return _this;\n }\n /**\n * Measures the minimum space that the canvas requires\n * @param availableSize\n */\n Canvas.prototype.measure = function (availableSize) {\n var desired = undefined;\n var desiredBounds = undefined;\n if (this.hasChildren()) {\n //Measuring the children\n for (var _i = 0, _a = this.children; _i < _a.length; _i++) {\n var child = _a[_i];\n child.measure(availableSize);\n var childSize = child.desiredSize.clone();\n if (child.rotateAngle !== 0) {\n childSize = rotateSize(childSize, child.rotateAngle);\n }\n var right = childSize.width + child.margin.right;\n var bottom = childSize.height + child.margin.bottom;\n var childBounds = new Rect(child.margin.left, child.margin.top, right, bottom);\n if (child.float) {\n var position = child.getAbsolutePosition(childSize);\n if (position !== undefined) {\n continue;\n }\n }\n if (desiredBounds === undefined) {\n desiredBounds = childBounds;\n }\n else {\n desiredBounds.uniteRect(childBounds);\n }\n }\n if (desiredBounds) {\n var leftMargin = 0;\n var topMargin = 0;\n leftMargin = Math.max(desiredBounds.left, 0);\n topMargin = Math.max(desiredBounds.top, 0);\n desired = new Size(desiredBounds.width + leftMargin, desiredBounds.height + topMargin);\n }\n }\n desired = _super.prototype.validateDesiredSize.call(this, desired, availableSize);\n _super.prototype.stretchChildren.call(this, desired);\n //Considering padding values\n desired.width += this.padding.left + this.padding.right;\n desired.height += this.padding.top + this.padding.bottom;\n this.desiredSize = desired;\n return desired;\n };\n /**\n * Arranges the child elements of the canvas\n */\n Canvas.prototype.arrange = function (desiredSize) {\n this.outerBounds = new Rect();\n if (this.hasChildren()) {\n var y = void 0;\n var x = void 0;\n y = this.offsetY - desiredSize.height * this.pivot.y + this.padding.top;\n x = this.offsetX - desiredSize.width * this.pivot.x + this.padding.left;\n for (var _i = 0, _a = this.children; _i < _a.length; _i++) {\n var child = _a[_i];\n if ((child.transform & Transform.Parent) !== 0) {\n child.parentTransform = this.parentTransform + this.rotateAngle;\n var childSize = child.desiredSize.clone();\n if (child.rotateAngle !== 0) {\n childSize = rotateSize(childSize, child.rotateAngle);\n }\n var topLeft = void 0;\n var center = { x: 0, y: 0 };\n var childX = x;\n var childY = y;\n if (child.relativeMode === 'Point') {\n var position = child.getAbsolutePosition(desiredSize);\n if (position !== undefined) {\n childX += position.x;\n childY += position.y;\n }\n }\n if (child.relativeMode === 'Object') {\n topLeft = this.alignChildBasedOnParent(child, childSize, desiredSize, childX, childY);\n }\n else {\n topLeft = this.alignChildBasedOnaPoint(child, childX, childY);\n }\n center = { x: topLeft.x + childSize.width / 2, y: topLeft.y + childSize.height / 2 };\n _super.prototype.findChildOffsetFromCenter.call(this, child, center);\n }\n child.arrange(child.desiredSize);\n this.outerBounds.uniteRect(child.outerBounds);\n }\n }\n this.actualSize = desiredSize;\n this.updateBounds();\n this.outerBounds.uniteRect(this.bounds);\n return desiredSize;\n };\n /**\n * Aligns the child element based on its parent\n * @param child\n * @param childSize\n * @param parentSize\n * @param x\n * @param y\n */\n Canvas.prototype.alignChildBasedOnParent = function (child, childSize, parentSize, x, y) {\n switch (child.horizontalAlignment) {\n case 'Auto':\n case 'Left':\n x += child.margin.left;\n break;\n case 'Right':\n x += parentSize.width - childSize.width - child.margin.right;\n break;\n case 'Stretch':\n case 'Center':\n x += parentSize.width / 2 - childSize.width / 2;\n break;\n }\n switch (child.verticalAlignment) {\n case 'Auto':\n case 'Top':\n y += child.margin.top;\n break;\n case 'Bottom':\n y += parentSize.height - childSize.height - child.margin.bottom;\n break;\n case 'Stretch':\n case 'Center':\n y += parentSize.height / 2 - childSize.height / 2;\n break;\n }\n return { x: x, y: y };\n };\n /**\n * Aligns the child elements based on a point\n * @param child\n * @param x\n * @param y\n */\n Canvas.prototype.alignChildBasedOnaPoint = function (child, x, y) {\n switch (child.horizontalAlignment) {\n case 'Auto':\n case 'Left':\n x += child.margin.left;\n break;\n case 'Stretch':\n case 'Center':\n x -= child.desiredSize.width * child.pivot.x;\n break;\n case 'Right':\n x -= child.desiredSize.width + child.margin.right;\n break;\n }\n switch (child.verticalAlignment) {\n case 'Auto':\n case 'Top':\n y += child.margin.top;\n break;\n case 'Stretch':\n case 'Center':\n y -= child.desiredSize.height * child.pivot.y;\n break;\n case 'Bottom':\n y -= child.desiredSize.height + child.margin.bottom;\n break;\n }\n return { x: x, y: y };\n };\n return Canvas;\n}(Container));\nexport { Canvas };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, Complex, ChildProperty } from '@syncfusion/ej2-base';\nimport { ShapeStyle, Margin } from '../core/appearance';\nimport { Point } from '../primitives/point';\nimport { PortConstraints, PortVisibility } from '../enum/enum';\n/**\n * Defines the behavior of connection ports\n */\nvar Port = /** @class */ (function (_super) {\n __extends(Port, _super);\n function Port() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Port.prototype, \"id\", void 0);\n __decorate([\n Property('Center')\n ], Port.prototype, \"horizontalAlignment\", void 0);\n __decorate([\n Property('Center')\n ], Port.prototype, \"verticalAlignment\", void 0);\n __decorate([\n Complex({}, Margin)\n ], Port.prototype, \"margin\", void 0);\n __decorate([\n Property(12)\n ], Port.prototype, \"width\", void 0);\n __decorate([\n Property(12)\n ], Port.prototype, \"height\", void 0);\n __decorate([\n Complex({}, ShapeStyle)\n ], Port.prototype, \"style\", void 0);\n __decorate([\n Property('Square')\n ], Port.prototype, \"shape\", void 0);\n __decorate([\n Property(PortVisibility.Connect)\n ], Port.prototype, \"visibility\", void 0);\n __decorate([\n Property('')\n ], Port.prototype, \"pathData\", void 0);\n __decorate([\n Property(PortConstraints.None)\n ], Port.prototype, \"constraints\", void 0);\n __decorate([\n Property()\n ], Port.prototype, \"addInfo\", void 0);\n return Port;\n}(ChildProperty));\nexport { Port };\n/**\n * Defines the behavior of a port, that sticks to a point\n */\nvar PointPort = /** @class */ (function (_super) {\n __extends(PointPort, _super);\n // tslint:disable-next-line:no-any\n function PointPort(parent, propName, defaultValue, isArray) {\n return _super.call(this, parent, propName, defaultValue, isArray) || this;\n }\n __decorate([\n Complex({ x: 0.5, y: 0.5 }, Point)\n ], PointPort.prototype, \"offset\", void 0);\n return PointPort;\n}(Port));\nexport { PointPort };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, Complex, ChildProperty } from '@syncfusion/ej2-base';\nimport { TextStyle, Margin } from '../core/appearance';\nimport { Point } from '../primitives/point';\nimport { AnnotationConstraints } from '../enum/enum';\n/**\n * Defines the hyperlink for the annotation\n */\nvar Hyperlink = /** @class */ (function (_super) {\n __extends(Hyperlink, _super);\n function Hyperlink() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('blue')\n ], Hyperlink.prototype, \"color\", void 0);\n __decorate([\n Property('')\n ], Hyperlink.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], Hyperlink.prototype, \"link\", void 0);\n __decorate([\n Property('None')\n ], Hyperlink.prototype, \"textDecoration\", void 0);\n return Hyperlink;\n}(ChildProperty));\nexport { Hyperlink };\n/**\n * Defines the textual description of nodes/connectors\n */\nvar Annotation = /** @class */ (function (_super) {\n __extends(Annotation, _super);\n function Annotation() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Annotation.prototype, \"content\", void 0);\n __decorate([\n Property(true)\n ], Annotation.prototype, \"visibility\", void 0);\n __decorate([\n Property(AnnotationConstraints.InheritReadOnly)\n ], Annotation.prototype, \"constraints\", void 0);\n __decorate([\n Complex(undefined, Hyperlink)\n ], Annotation.prototype, \"hyperlink\", void 0);\n __decorate([\n Property('')\n ], Annotation.prototype, \"id\", void 0);\n __decorate([\n Property()\n ], Annotation.prototype, \"width\", void 0);\n __decorate([\n Property()\n ], Annotation.prototype, \"height\", void 0);\n __decorate([\n Complex({ strokeWidth: 0, strokeColor: 'transparent', fill: 'transparent' }, TextStyle)\n ], Annotation.prototype, \"style\", void 0);\n __decorate([\n Property('Center')\n ], Annotation.prototype, \"horizontalAlignment\", void 0);\n __decorate([\n Property('Center')\n ], Annotation.prototype, \"verticalAlignment\", void 0);\n __decorate([\n Complex({}, Margin)\n ], Annotation.prototype, \"margin\", void 0);\n __decorate([\n Property('Shape')\n ], Annotation.prototype, \"type\", void 0);\n __decorate([\n Property()\n ], Annotation.prototype, \"addInfo\", void 0);\n return Annotation;\n}(ChildProperty));\nexport { Annotation };\n/**\n * Defines the textual description of nodes/connectors with respect to bounds\n */\nvar ShapeAnnotation = /** @class */ (function (_super) {\n __extends(ShapeAnnotation, _super);\n // tslint:disable-next-line:no-any\n function ShapeAnnotation(parent, propName, defaultValue, isArray) {\n return _super.call(this, parent, propName, defaultValue, isArray) || this;\n }\n __decorate([\n Complex({ x: 0.5, y: 0.5 }, Point)\n ], ShapeAnnotation.prototype, \"offset\", void 0);\n return ShapeAnnotation;\n}(Annotation));\nexport { ShapeAnnotation };\n/**\n * Defines the connector annotation\n */\nvar PathAnnotation = /** @class */ (function (_super) {\n __extends(PathAnnotation, _super);\n // tslint:disable-next-line:no-any\n function PathAnnotation(parent, propName, defaultValue, isArray) {\n return _super.call(this, parent, propName, defaultValue, isArray) || this;\n }\n __decorate([\n Property(0.5)\n ], PathAnnotation.prototype, \"offset\", void 0);\n __decorate([\n Complex({ x: 0, y: 0 }, Point)\n ], PathAnnotation.prototype, \"displacement\", void 0);\n __decorate([\n Property('Center')\n ], PathAnnotation.prototype, \"alignment\", void 0);\n return PathAnnotation;\n}(Annotation));\nexport { PathAnnotation };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, Complex, ChildProperty } from '@syncfusion/ej2-base';\nimport { Margin } from '../core/appearance';\nimport { Point } from '../primitives/point';\n/**\n * Defines the behavior of default IconShape\n */\nvar IconShape = /** @class */ (function (_super) {\n __extends(IconShape, _super);\n function IconShape() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('None')\n ], IconShape.prototype, \"shape\", void 0);\n __decorate([\n Property('white')\n ], IconShape.prototype, \"fill\", void 0);\n __decorate([\n Property('Auto')\n ], IconShape.prototype, \"horizontalAlignment\", void 0);\n __decorate([\n Property('Auto')\n ], IconShape.prototype, \"verticalAlignment\", void 0);\n __decorate([\n Property(10)\n ], IconShape.prototype, \"width\", void 0);\n __decorate([\n Property(10)\n ], IconShape.prototype, \"height\", void 0);\n __decorate([\n Complex({ x: 0.5, y: 1 }, Point)\n ], IconShape.prototype, \"offset\", void 0);\n __decorate([\n Property('#1a1a1a')\n ], IconShape.prototype, \"borderColor\", void 0);\n __decorate([\n Property(1)\n ], IconShape.prototype, \"borderWidth\", void 0);\n __decorate([\n Complex({}, Margin)\n ], IconShape.prototype, \"margin\", void 0);\n __decorate([\n Property('')\n ], IconShape.prototype, \"pathData\", void 0);\n __decorate([\n Property('')\n ], IconShape.prototype, \"content\", void 0);\n __decorate([\n Property(0)\n ], IconShape.prototype, \"cornerRadius\", void 0);\n __decorate([\n Complex({ left: 2, right: 2, top: 2, bottom: 2 }, Margin)\n ], IconShape.prototype, \"padding\", void 0);\n return IconShape;\n}(ChildProperty));\nexport { IconShape };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, Complex, ChildProperty, Collection } from '@syncfusion/ej2-base';\nimport { Margin } from '../core/appearance';\nimport { IconShape } from './icon';\nimport { DiagramTooltip } from './tooltip';\nimport { PointPort } from './port';\n/**\n * Defines the common behavior of nodes, connectors and groups\n */\nvar NodeBase = /** @class */ (function (_super) {\n __extends(NodeBase, _super);\n function NodeBase() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], NodeBase.prototype, \"id\", void 0);\n __decorate([\n Property(-1)\n ], NodeBase.prototype, \"zIndex\", void 0);\n __decorate([\n Complex({}, Margin)\n ], NodeBase.prototype, \"margin\", void 0);\n __decorate([\n Property(true)\n ], NodeBase.prototype, \"visible\", void 0);\n __decorate([\n Collection([], PointPort)\n ], NodeBase.prototype, \"ports\", void 0);\n __decorate([\n Property(true)\n ], NodeBase.prototype, \"isExpanded\", void 0);\n __decorate([\n Complex({}, DiagramTooltip)\n ], NodeBase.prototype, \"tooltip\", void 0);\n __decorate([\n Complex({}, IconShape)\n ], NodeBase.prototype, \"expandIcon\", void 0);\n __decorate([\n Complex({}, IconShape)\n ], NodeBase.prototype, \"collapseIcon\", void 0);\n __decorate([\n Property(false)\n ], NodeBase.prototype, \"excludeFromLayout\", void 0);\n __decorate([\n Property()\n ], NodeBase.prototype, \"addInfo\", void 0);\n return NodeBase;\n}(ChildProperty));\nexport { NodeBase };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, Collection, Complex } from '@syncfusion/ej2-base';\nimport { Container } from '../core/containers/container';\nimport { Node } from '../objects/node';\nimport { Connector } from '../objects/connector';\nimport { Point } from '../primitives/point';\nimport { Size } from '../primitives/size';\nimport { SelectorConstraints } from '../enum/enum';\nimport { Margin } from '../core/appearance';\n/**\n * Defines the behavior of selector\n */\nvar UserHandle = /** @class */ (function (_super) {\n __extends(UserHandle, _super);\n function UserHandle() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], UserHandle.prototype, \"name\", void 0);\n __decorate([\n Property('')\n ], UserHandle.prototype, \"pathData\", void 0);\n __decorate([\n Property('#000000')\n ], UserHandle.prototype, \"backgroundColor\", void 0);\n __decorate([\n Property('top')\n ], UserHandle.prototype, \"side\", void 0);\n __decorate([\n Property('')\n ], UserHandle.prototype, \"borderColor\", void 0);\n __decorate([\n Property(0.5)\n ], UserHandle.prototype, \"borderWidth\", void 0);\n __decorate([\n Property(25)\n ], UserHandle.prototype, \"size\", void 0);\n __decorate([\n Property('white')\n ], UserHandle.prototype, \"pathColor\", void 0);\n __decorate([\n Property(10)\n ], UserHandle.prototype, \"displacement\", void 0);\n __decorate([\n Property(true)\n ], UserHandle.prototype, \"visible\", void 0);\n __decorate([\n Property(0)\n ], UserHandle.prototype, \"offset\", void 0);\n __decorate([\n Complex({}, Margin)\n ], UserHandle.prototype, \"margin\", void 0);\n __decorate([\n Property('Center')\n ], UserHandle.prototype, \"horizontalAlignment\", void 0);\n __decorate([\n Property('Center')\n ], UserHandle.prototype, \"verticalAlignment\", void 0);\n return UserHandle;\n}(ChildProperty));\nexport { UserHandle };\n/**\n * Defines the behavior of the selected objects\n */\nvar Selector = /** @class */ (function (_super) {\n __extends(Selector, _super);\n function Selector() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Initializes the UI of the container\n */\n Selector.prototype.init = function (diagram) {\n var container = new Container();\n container.measureChildren = false;\n var consize = new Size();\n container.children = [];\n if (this.nodes || this.connectors) {\n for (var i = 0; i < this.nodes.length; i++) {\n var node = diagram.nameTable[this.nodes[i].id];\n var wrapper = node.wrapper;\n // this.width = wrapper.actualSize.width; \n // this.height = wrapper.actualSize.height;\n // this.rotateAngle = wrapper.rotateAngle;\n // this.offsetX = wrapper.offsetX;\n // this.offsetY = wrapper.offsetY;\n container.children.push(wrapper);\n }\n for (var j = 0; j < this.connectors.length; j++) {\n var connector = diagram.nameTable[this.connectors[j].id];\n var wrapper = connector.wrapper;\n // this.width = wrapper.actualSize.width; this.height = wrapper.actualSize.height;\n // this.rotateAngle = wrapper.rotateAngle; this.offsetX = wrapper.offsetX;\n // this.offsetY = wrapper.offsetY;\n container.children.push(wrapper);\n }\n }\n this.wrapper = container;\n return container;\n };\n __decorate([\n Property(null)\n ], Selector.prototype, \"wrapper\", void 0);\n __decorate([\n Collection([], Node)\n ], Selector.prototype, \"nodes\", void 0);\n __decorate([\n Collection([], Connector)\n ], Selector.prototype, \"connectors\", void 0);\n __decorate([\n Property()\n ], Selector.prototype, \"width\", void 0);\n __decorate([\n Property()\n ], Selector.prototype, \"height\", void 0);\n __decorate([\n Property(0)\n ], Selector.prototype, \"rotateAngle\", void 0);\n __decorate([\n Property(0)\n ], Selector.prototype, \"offsetX\", void 0);\n __decorate([\n Property(0)\n ], Selector.prototype, \"offsetY\", void 0);\n __decorate([\n Complex({ x: 0.5, y: 0.5 }, Point)\n ], Selector.prototype, \"pivot\", void 0);\n __decorate([\n Property('CompleteIntersect')\n ], Selector.prototype, \"rubberBandSelectionMode\", void 0);\n __decorate([\n Collection([], UserHandle)\n ], Selector.prototype, \"userHandles\", void 0);\n __decorate([\n Property(SelectorConstraints.All)\n ], Selector.prototype, \"constraints\", void 0);\n return Selector;\n}(ChildProperty));\nexport { Selector };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { DiagramElement } from './diagram-element';\nimport { getContent } from '../../utility/dom-util';\n/**\n * HTMLElement defines the basic html elements\n */\nvar DiagramHtmlElement = /** @class */ (function (_super) {\n __extends(DiagramHtmlElement, _super);\n /**\n * set the id for each element\n */\n function DiagramHtmlElement() {\n var _this = _super.call(this) || this;\n _this.data = '';\n return _this;\n }\n Object.defineProperty(DiagramHtmlElement.prototype, \"content\", {\n /**\n * Gets or sets the geometry of the html element\n */\n get: function () {\n return this.data;\n },\n set: function (value) {\n this.data = value;\n this.template = getContent(this, true);\n this.isDirt = true;\n },\n enumerable: true,\n configurable: true\n });\n return DiagramHtmlElement;\n}(DiagramElement));\nexport { DiagramHtmlElement };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/// \nimport { Property, Complex, Collection, ChildProperty, ComplexFactory } from '@syncfusion/ej2-base';\nimport { Margin, TextStyle, Shadow } from '../core/appearance';\nimport { Point } from '../primitives/point';\nimport { Size } from '../primitives/size';\nimport { Container } from '../core/containers/container';\nimport { Canvas } from '../core/containers/canvas';\nimport { getBasicShape } from './dictionary/basic-shapes';\nimport { DiagramElement } from '../core/elements/diagram-element';\nimport { PathElement } from '../core/elements/path-element';\nimport { TextElement } from '../core/elements/text-element';\nimport { ImageElement } from '../core/elements/image-element';\nimport { DiagramNativeElement } from '../core/elements/native-element';\nimport { PointPort } from './port';\nimport { ShapeAnnotation } from './annotation';\nimport { getPortShape, getIconShape } from './dictionary/common';\nimport { getFlowShape } from './dictionary/flow-shapes';\nimport { NodeConstraints } from '../enum/enum';\nimport { checkPortRestriction } from './../utility/diagram-util';\nimport { randomId, getFunction } from './../utility/base-util';\nimport { NodeBase } from './node-base';\nimport { canShadow } from './../utility/constraints-util';\nimport { PortVisibility } from '../enum/enum';\nimport { measurePath } from './../utility/dom-util';\nimport { getPolygonPath } from './../utility/path-util';\nimport { DiagramHtmlElement } from '../core/elements/html-element';\nvar getShapeType = function (obj) {\n switch (obj.type) {\n case 'Basic':\n return BasicShape;\n case 'Flow':\n return FlowShape;\n case 'Path':\n return Path;\n case 'Image':\n return Image;\n case 'Text':\n return Text;\n case 'Bpmn':\n return BpmnShape;\n case 'Native':\n return Native;\n case 'HTML':\n return Html;\n default:\n return BasicShape;\n }\n};\n/**\n * Defines the behavior of default shape\n */\nvar Shape = /** @class */ (function (_super) {\n __extends(Shape, _super);\n function Shape() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Basic')\n ], Shape.prototype, \"type\", void 0);\n return Shape;\n}(ChildProperty));\nexport { Shape };\n/**\n * Defines the behavior of path shape\n */\nvar Path = /** @class */ (function (_super) {\n __extends(Path, _super);\n function Path() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Path')\n ], Path.prototype, \"type\", void 0);\n __decorate([\n Property('')\n ], Path.prototype, \"data\", void 0);\n return Path;\n}(Shape));\nexport { Path };\n/**\n * Defines the behavior of Native shape\n */\nvar Native = /** @class */ (function (_super) {\n __extends(Native, _super);\n function Native() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Native')\n ], Native.prototype, \"type\", void 0);\n __decorate([\n Property('')\n ], Native.prototype, \"content\", void 0);\n __decorate([\n Property('Stretch')\n ], Native.prototype, \"scale\", void 0);\n return Native;\n}(Shape));\nexport { Native };\n/**\n * Defines the behavior of html shape\n */\nvar Html = /** @class */ (function (_super) {\n __extends(Html, _super);\n function Html() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('HTML')\n ], Html.prototype, \"type\", void 0);\n __decorate([\n Property('')\n ], Html.prototype, \"content\", void 0);\n return Html;\n}(Shape));\nexport { Html };\n/**\n * Defines the behavior of image shape\n */\nvar Image = /** @class */ (function (_super) {\n __extends(Image, _super);\n function Image() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Image')\n ], Image.prototype, \"type\", void 0);\n __decorate([\n Property('')\n ], Image.prototype, \"source\", void 0);\n __decorate([\n Property('')\n ], Image.prototype, \"scale\", void 0);\n __decorate([\n Property('None')\n ], Image.prototype, \"align\", void 0);\n return Image;\n}(Shape));\nexport { Image };\n/**\n * Defines the behavior of the text shape\n */\nvar Text = /** @class */ (function (_super) {\n __extends(Text, _super);\n function Text() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Text')\n ], Text.prototype, \"type\", void 0);\n __decorate([\n Property('')\n ], Text.prototype, \"content\", void 0);\n __decorate([\n Complex({}, Margin)\n ], Text.prototype, \"margin\", void 0);\n return Text;\n}(Shape));\nexport { Text };\n/**\n * Defines the behavior of the basic shape\n */\nvar BasicShape = /** @class */ (function (_super) {\n __extends(BasicShape, _super);\n function BasicShape() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Basic')\n ], BasicShape.prototype, \"type\", void 0);\n __decorate([\n Property('Rectangle')\n ], BasicShape.prototype, \"shape\", void 0);\n __decorate([\n Property(0)\n ], BasicShape.prototype, \"cornerRadius\", void 0);\n __decorate([\n Collection([], Point)\n ], BasicShape.prototype, \"points\", void 0);\n return BasicShape;\n}(Shape));\nexport { BasicShape };\n/**\n * Defines the behavior of the flow shape\n */\nvar FlowShape = /** @class */ (function (_super) {\n __extends(FlowShape, _super);\n function FlowShape() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Flow')\n ], FlowShape.prototype, \"type\", void 0);\n __decorate([\n Property('Terminator')\n ], FlowShape.prototype, \"shape\", void 0);\n return FlowShape;\n}(Shape));\nexport { FlowShape };\n/**\n * Defines the behavior of the bpmn gateway shape\n */\nvar BpmnGateway = /** @class */ (function (_super) {\n __extends(BpmnGateway, _super);\n function BpmnGateway() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('None')\n ], BpmnGateway.prototype, \"type\", void 0);\n return BpmnGateway;\n}(ChildProperty));\nexport { BpmnGateway };\n/**\n * Defines the behavior of the bpmn data object\n */\nvar BpmnDataObject = /** @class */ (function (_super) {\n __extends(BpmnDataObject, _super);\n function BpmnDataObject() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('None')\n ], BpmnDataObject.prototype, \"type\", void 0);\n __decorate([\n Property(false)\n ], BpmnDataObject.prototype, \"collection\", void 0);\n return BpmnDataObject;\n}(ChildProperty));\nexport { BpmnDataObject };\n/**\n * Defines the behavior of the bpmn task shape\n */\nvar BpmnTask = /** @class */ (function (_super) {\n __extends(BpmnTask, _super);\n function BpmnTask() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('None')\n ], BpmnTask.prototype, \"type\", void 0);\n __decorate([\n Property('None')\n ], BpmnTask.prototype, \"loop\", void 0);\n __decorate([\n Property(false)\n ], BpmnTask.prototype, \"call\", void 0);\n __decorate([\n Property(false)\n ], BpmnTask.prototype, \"compensation\", void 0);\n return BpmnTask;\n}(ChildProperty));\nexport { BpmnTask };\n/**\n * Defines the behavior of the bpmn Event shape\n */\nvar BpmnEvent = /** @class */ (function (_super) {\n __extends(BpmnEvent, _super);\n function BpmnEvent() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Start')\n ], BpmnEvent.prototype, \"event\", void 0);\n __decorate([\n Property('None')\n ], BpmnEvent.prototype, \"trigger\", void 0);\n return BpmnEvent;\n}(ChildProperty));\nexport { BpmnEvent };\n/**\n * Defines the behavior of the bpmn sub event\n */\nvar BpmnSubEvent = /** @class */ (function (_super) {\n __extends(BpmnSubEvent, _super);\n function BpmnSubEvent() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('None')\n ], BpmnSubEvent.prototype, \"trigger\", void 0);\n __decorate([\n Property('Start')\n ], BpmnSubEvent.prototype, \"event\", void 0);\n __decorate([\n Property('')\n ], BpmnSubEvent.prototype, \"id\", void 0);\n __decorate([\n Complex({}, Point)\n ], BpmnSubEvent.prototype, \"offset\", void 0);\n __decorate([\n Collection([], ShapeAnnotation)\n ], BpmnSubEvent.prototype, \"annotations\", void 0);\n __decorate([\n Collection([], PointPort)\n ], BpmnSubEvent.prototype, \"ports\", void 0);\n __decorate([\n Property()\n ], BpmnSubEvent.prototype, \"width\", void 0);\n __decorate([\n Property()\n ], BpmnSubEvent.prototype, \"height\", void 0);\n __decorate([\n Complex({}, Margin)\n ], BpmnSubEvent.prototype, \"margin\", void 0);\n __decorate([\n Property('Center')\n ], BpmnSubEvent.prototype, \"horizontalAlignment\", void 0);\n __decorate([\n Property('Center')\n ], BpmnSubEvent.prototype, \"verticalAlignment\", void 0);\n __decorate([\n Property(true)\n ], BpmnSubEvent.prototype, \"visible\", void 0);\n return BpmnSubEvent;\n}(ChildProperty));\nexport { BpmnSubEvent };\nvar BpmnTransactionSubProcess = /** @class */ (function (_super) {\n __extends(BpmnTransactionSubProcess, _super);\n function BpmnTransactionSubProcess() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({ id: 'success', event: 'End', offset: { x: 1, y: 0.5 } }, BpmnSubEvent)\n ], BpmnTransactionSubProcess.prototype, \"success\", void 0);\n __decorate([\n Complex({ id: 'failure', event: 'Intermediate', trigger: 'Error', offset: { x: 0.25, y: 1 } }, BpmnSubEvent)\n ], BpmnTransactionSubProcess.prototype, \"failure\", void 0);\n __decorate([\n Complex({ id: 'cancel', event: 'Intermediate', trigger: 'Cancel', offset: { x: 0.75, y: 1 } }, BpmnSubEvent)\n ], BpmnTransactionSubProcess.prototype, \"cancel\", void 0);\n return BpmnTransactionSubProcess;\n}(ChildProperty));\nexport { BpmnTransactionSubProcess };\n/**\n * Defines the behavior of the BPMNSubProcess\n */\nvar BpmnSubProcess = /** @class */ (function (_super) {\n __extends(BpmnSubProcess, _super);\n function BpmnSubProcess() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('None')\n ], BpmnSubProcess.prototype, \"type\", void 0);\n __decorate([\n Property(false)\n ], BpmnSubProcess.prototype, \"adhoc\", void 0);\n __decorate([\n Property('Default')\n ], BpmnSubProcess.prototype, \"boundary\", void 0);\n __decorate([\n Property(false)\n ], BpmnSubProcess.prototype, \"compensation\", void 0);\n __decorate([\n Property('None')\n ], BpmnSubProcess.prototype, \"loop\", void 0);\n __decorate([\n Property(true)\n ], BpmnSubProcess.prototype, \"collapsed\", void 0);\n __decorate([\n Collection([], BpmnSubEvent)\n ], BpmnSubProcess.prototype, \"events\", void 0);\n __decorate([\n Complex({}, BpmnTransactionSubProcess)\n ], BpmnSubProcess.prototype, \"transaction\", void 0);\n __decorate([\n Property(undefined)\n ], BpmnSubProcess.prototype, \"processes\", void 0);\n return BpmnSubProcess;\n}(ChildProperty));\nexport { BpmnSubProcess };\n/**\n * Defines the behavior of the bpmn activity shape\n */\nvar BpmnActivity = /** @class */ (function (_super) {\n __extends(BpmnActivity, _super);\n function BpmnActivity() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Task')\n ], BpmnActivity.prototype, \"activity\", void 0);\n __decorate([\n Complex({}, BpmnTask)\n ], BpmnActivity.prototype, \"task\", void 0);\n __decorate([\n Complex({}, BpmnSubProcess)\n ], BpmnActivity.prototype, \"subProcess\", void 0);\n return BpmnActivity;\n}(ChildProperty));\nexport { BpmnActivity };\n/**\n * Defines the behavior of the bpmn annotation\n */\nvar BpmnAnnotation = /** @class */ (function (_super) {\n __extends(BpmnAnnotation, _super);\n // tslint:disable-next-line:no-any\n function BpmnAnnotation(parent, propName, defaultValue, isArray) {\n return _super.call(this, parent, propName, defaultValue, isArray) || this;\n }\n __decorate([\n Property('')\n ], BpmnAnnotation.prototype, \"text\", void 0);\n __decorate([\n Property('')\n ], BpmnAnnotation.prototype, \"id\", void 0);\n __decorate([\n Property()\n ], BpmnAnnotation.prototype, \"angle\", void 0);\n __decorate([\n Property()\n ], BpmnAnnotation.prototype, \"height\", void 0);\n __decorate([\n Property()\n ], BpmnAnnotation.prototype, \"width\", void 0);\n __decorate([\n Property()\n ], BpmnAnnotation.prototype, \"length\", void 0);\n return BpmnAnnotation;\n}(ChildProperty));\nexport { BpmnAnnotation };\n/**\n * Defines the behavior of the bpmn shape\n */\nvar BpmnShape = /** @class */ (function (_super) {\n __extends(BpmnShape, _super);\n function BpmnShape() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Bpmn')\n ], BpmnShape.prototype, \"type\", void 0);\n __decorate([\n Property('Event')\n ], BpmnShape.prototype, \"shape\", void 0);\n __decorate([\n Complex({}, BpmnEvent)\n ], BpmnShape.prototype, \"event\", void 0);\n __decorate([\n Complex({}, BpmnGateway)\n ], BpmnShape.prototype, \"gateway\", void 0);\n __decorate([\n Complex({}, BpmnDataObject)\n ], BpmnShape.prototype, \"dataObject\", void 0);\n __decorate([\n Complex({}, BpmnActivity)\n ], BpmnShape.prototype, \"activity\", void 0);\n __decorate([\n Collection([], BpmnAnnotation)\n ], BpmnShape.prototype, \"annotations\", void 0);\n return BpmnShape;\n}(Shape));\nexport { BpmnShape };\n/**\n * Defines the behavior of nodes\n */\nvar Node = /** @class */ (function (_super) {\n __extends(Node, _super);\n // tslint:disable-next-line:no-any\n function Node(parent, propName, defaultValue, isArray) {\n var _this = _super.call(this, parent, propName, defaultValue, isArray) || this;\n /** @private */\n _this.parentId = '';\n /** @private */\n _this.processId = '';\n /** @private */\n _this.outEdges = [];\n /** @private */\n _this.inEdges = [];\n return _this;\n }\n Object.defineProperty(Node.prototype, \"actualSize\", {\n /** @private */\n get: function () {\n if (this.wrapper !== null) {\n return this.wrapper.actualSize;\n }\n else {\n return new Size(this.width || 0, this.height || 0);\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Allows to initialize the UI of a node\n */\n /** @private */\n /* tslint:disable */\n Node.prototype.init = function (diagram) {\n var content = new DiagramElement();\n var textStyle;\n var changedProperties = 'changedProperties';\n var oldProperties = 'oldProperties';\n this.shape[changedProperties] = {};\n this.shape[oldProperties] = {};\n switch (this.shape.type) {\n case 'Path':\n var pathContent = new PathElement();\n pathContent.data = this.shape.data;\n content = pathContent;\n break;\n case 'Image':\n var imageContent = new ImageElement();\n imageContent.source = this.shape.source;\n imageContent.imageAlign = this.shape.align;\n imageContent.imageScale = this.shape.scale;\n content = imageContent;\n break;\n case 'Text':\n var textContent = new TextElement();\n textContent.content = this.shape.content;\n content = textContent;\n textStyle = this.style;\n content.style = textStyle;\n break;\n case 'Basic':\n if (this.shape.shape === 'Rectangle') {\n var basicshape = new DiagramElement();\n content = basicshape;\n content.cornerRadius = this.shape.cornerRadius;\n }\n else if (this.shape.shape === 'Polygon') {\n var path = new PathElement();\n path.data = getPolygonPath(this.shape.points);\n content = path;\n }\n else {\n var basicshape = new PathElement();\n var basicshapedata = getBasicShape(this.shape.shape);\n basicshape.data = basicshapedata;\n content = basicshape;\n }\n break;\n case 'Flow':\n var flowshape = new PathElement();\n var flowshapedata = getFlowShape(this.shape.shape);\n flowshape.data = flowshapedata;\n content = flowshape;\n break;\n case 'Bpmn':\n if (diagram.bpmnModule) {\n content = diagram.bpmnModule.initBPMNContent(content, this, diagram);\n var subProcess = this.shape.activity.subProcess;\n if (subProcess.processes && subProcess.processes.length) {\n var children = this.shape.activity.subProcess.processes;\n for (var _i = 0, children_1 = children; _i < children_1.length; _i++) {\n var i = children_1[_i];\n if (diagram.nameTable[i] && (!diagram.nameTable[i].processId || diagram.nameTable[i].processId === this.id)) {\n diagram.nameTable[i].processId = this.id;\n if (subProcess.collapsed) {\n diagram.updateElementVisibility(diagram.nameTable[i].wrapper, diagram.nameTable[i], !subProcess.collapsed);\n }\n content.children.push(diagram.nameTable[i].wrapper);\n }\n }\n }\n }\n break;\n case 'Native':\n var nativeContent = new DiagramNativeElement();\n nativeContent.content = this.shape.content;\n nativeContent.scale = this.shape.scale;\n content = nativeContent;\n break;\n case 'HTML':\n var htmlContent = new DiagramHtmlElement();\n htmlContent.content = this.shape.content;\n content = htmlContent;\n break;\n }\n content.id = this.id + '_content';\n content.relativeMode = 'Object';\n if (this.width !== undefined) {\n content.width = this.width;\n }\n content.horizontalAlignment = 'Stretch';\n if (this.height !== undefined) {\n content.height = this.height;\n }\n if (this.minHeight !== undefined) {\n content.minHeight = this.minHeight;\n }\n if (this.maxHeight !== undefined) {\n content.maxHeight = this.maxHeight;\n }\n if (this.minWidth !== undefined) {\n content.minWidth = this.minWidth;\n }\n if (this.maxWidth !== undefined) {\n content.maxWidth = this.maxWidth;\n }\n if (this.shape.shape === 'Rectangle' && !this.shape.cornerRadius) {\n content.isRectElement = true;\n }\n content.verticalAlignment = 'Stretch';\n if (this.shape instanceof Text) {\n content.margin = this.shape.margin;\n }\n if (canShadow(this)) {\n if ((this.constraints & NodeConstraints.Shadow) !== 0) {\n content.shadow = this.shadow;\n }\n }\n if (this.shape.type !== 'Bpmn' || this.shape.shape === 'Message' ||\n this.shape.shape === 'DataSource') {\n if (this.shape.type !== 'Text') {\n content.style = this.style;\n }\n }\n return content;\n };\n /* tslint:enable */\n /** @private */\n Node.prototype.initContainer = function () {\n if (!this.id) {\n this.id = randomId();\n }\n // Creates canvas element\n var canvas = this.children ? new Container() : new Canvas();\n canvas.id = this.id;\n canvas.offsetX = this.offsetX;\n canvas.offsetY = this.offsetY;\n canvas.visible = this.visible;\n canvas.style.fill = this.backgroundColor;\n canvas.style.strokeColor = this.borderColor;\n canvas.style.strokeWidth = this.borderWidth;\n canvas.rotateAngle = this.rotateAngle;\n canvas.minHeight = this.minHeight;\n canvas.minWidth = this.minWidth;\n canvas.maxHeight = this.maxHeight;\n canvas.maxWidth = this.maxWidth;\n canvas.pivot = this.pivot;\n canvas.margin = this.margin;\n this.wrapper = canvas;\n return canvas;\n };\n /** @private */\n Node.prototype.initPorts = function (accessibilityContent, container) {\n var canvas = this.wrapper;\n var port;\n for (var i = 0; this.ports !== undefined, i < this.ports.length; i++) {\n port = this.initPortWrapper(this.ports[i]);\n // tslint:disable-next-line:no-any\n var wrapperContent = void 0;\n var contentAccessibility = getFunction(accessibilityContent);\n if (contentAccessibility) {\n wrapperContent = contentAccessibility(port, this);\n }\n port.description = wrapperContent ? wrapperContent : port.id;\n container.children.push(port);\n }\n };\n Node.prototype.getIconOffet = function (layout, icon) {\n var x;\n var y;\n if (layout.orientation === 'BottomToTop') {\n x = icon.offset.x;\n y = 1 - icon.offset.y;\n }\n else if (layout.orientation === 'LeftToRight') {\n x = icon.offset.y;\n y = icon.offset.x;\n }\n else if (layout.orientation === 'RightToLeft') {\n x = 1 - icon.offset.y;\n y = icon.offset.x;\n }\n else {\n x = icon.offset.x;\n y = icon.offset.y;\n }\n return { x: x, y: y };\n };\n /** @private */\n Node.prototype.initIcons = function (accessibilityContent, layout, container) {\n var canvas = this.wrapper;\n var offset;\n var icon = this.isExpanded ? this.expandIcon : this.collapseIcon;\n if (icon.shape !== 'None') {\n var iconContainer = new Canvas();\n iconContainer.float = true;\n var children = [];\n iconContainer.id = this.id + '_icon_content';\n iconContainer.children = children;\n iconContainer.height = icon.height;\n iconContainer.width = icon.width;\n iconContainer.style.strokeColor = 'transparent';\n iconContainer.margin = icon.margin;\n iconContainer.horizontalAlignment = 'Center';\n iconContainer.verticalAlignment = 'Center';\n iconContainer.visible = this.visible;\n offset = this.getIconOffet(layout, icon);\n iconContainer.setOffsetWithRespectToBounds(offset.x, offset.y, 'Fraction');\n iconContainer.relativeMode = 'Point';\n this.initIconSymbol(icon, iconContainer, accessibilityContent);\n // tslint:disable-next-line:no-any\n var wrapperContent = void 0;\n var contentAccessibility = getFunction(accessibilityContent);\n if (contentAccessibility) {\n wrapperContent = contentAccessibility(icon, this);\n }\n iconContainer.description = wrapperContent ? wrapperContent : iconContainer.id;\n container.children.push(iconContainer);\n }\n };\n /** @private */\n Node.prototype.initAnnotations = function (accessibilityContent, container) {\n var annotation;\n for (var i = 0; this.annotations !== undefined, i < this.annotations.length; i++) {\n annotation = this.initAnnotationWrapper(this.annotations[i]);\n // tslint:disable-next-line:no-any\n var wrapperContent = void 0;\n var contentAccessibility = getFunction(accessibilityContent);\n if (contentAccessibility) {\n wrapperContent = contentAccessibility(annotation, this);\n }\n annotation.description = wrapperContent ? wrapperContent : annotation.id;\n container.children.push(annotation);\n }\n };\n /** @private */\n Node.prototype.initPortWrapper = function (ports) {\n ports.id = ports.id || randomId();\n // Creates port element\n var portContent = new PathElement();\n portContent.height = ports.height;\n portContent.width = ports.width;\n var pathdata = (ports.shape === 'Custom') ? ports.pathData : getPortShape(ports.shape);\n portContent.id = this.id + '_' + (ports.id);\n portContent.margin = ports.margin;\n portContent.data = pathdata;\n var style = ports.style;\n portContent.style = {\n fill: style.fill, strokeColor: style.strokeColor, gradient: null,\n opacity: style.opacity, strokeDashArray: style.strokeDashArray, strokeWidth: style.strokeWidth\n };\n portContent.horizontalAlignment = ports.horizontalAlignment;\n portContent.verticalAlignment = ports.verticalAlignment;\n portContent.setOffsetWithRespectToBounds(ports.offset.x, ports.offset.y, 'Fraction');\n if (this.width !== undefined || this.height !== undefined) {\n portContent.float = true;\n }\n portContent.relativeMode = 'Point';\n portContent.visible = checkPortRestriction(ports, PortVisibility.Visible) &&\n !checkPortRestriction(ports, PortVisibility.Hover) && !checkPortRestriction(ports, PortVisibility.Connect) ? true : false;\n return portContent;\n };\n /** @private */\n Node.prototype.initAnnotationWrapper = function (annotation) {\n annotation.id = annotation.id || randomId();\n var label = annotation;\n var annotationcontent = new TextElement();\n annotationcontent.constraints = annotation.constraints;\n annotationcontent.height = annotation.height;\n annotationcontent.width = annotation.width;\n annotationcontent.visible = annotation.visibility;\n annotationcontent.id = this.id + '_' + annotation.id;\n var style = annotation.style;\n var link = annotation.hyperlink.link ? annotation.hyperlink : undefined;\n annotationcontent.style = {\n fill: style.fill, strokeColor: style.strokeColor, strokeWidth: style.strokeWidth,\n bold: style.bold, textWrapping: style.textWrapping,\n color: link ? link.color || annotationcontent.hyperlink.color : style.color, whiteSpace: style.whiteSpace,\n fontFamily: style.fontFamily, fontSize: style.fontSize, italic: style.italic, gradient: null, opacity: style.opacity,\n strokeDashArray: style.strokeDashArray, textAlign: style.textAlign, textOverflow: annotation.style.textOverflow,\n textDecoration: link ? link.textDecoration || annotationcontent.hyperlink.textDecoration : style.textDecoration,\n };\n annotationcontent.hyperlink.link = annotation.hyperlink.link || undefined;\n annotationcontent.hyperlink.content = annotation.hyperlink.content || undefined;\n annotationcontent.hyperlink.textDecoration = annotation.hyperlink.textDecoration || undefined;\n annotationcontent.content = link ? link.content || annotationcontent.hyperlink.link : annotation.content;\n if (this.width !== undefined) {\n annotationcontent.width = this.width - annotation.margin.left - annotation.margin.right;\n }\n annotationcontent.margin = annotation.margin;\n annotationcontent.horizontalAlignment = annotation.horizontalAlignment;\n annotationcontent.verticalAlignment = annotation.verticalAlignment;\n annotationcontent.setOffsetWithRespectToBounds(label.offset.x, label.offset.y, 'Fraction');\n if (this.width !== undefined || this.height !== undefined) {\n annotationcontent.float = true;\n }\n annotationcontent.relativeMode = 'Point';\n return annotationcontent;\n };\n Node.prototype.initIconContainer = function (options, iconContainer) {\n var rect = new DiagramElement();\n rect.id = iconContainer.id + '_rect';\n rect.height = options.height;\n rect.width = options.width;\n rect.visible = iconContainer.visible;\n rect.margin = options.margin;\n rect.cornerRadius = options.cornerRadius;\n rect.style = {\n fill: options.fill, strokeColor: options.borderColor,\n strokeWidth: options.borderWidth\n };\n rect.setOffsetWithRespectToBounds(0.5, 0.5, 'Fraction');\n rect.horizontalAlignment = 'Center';\n rect.verticalAlignment = 'Center';\n rect.relativeMode = 'Object';\n rect.description = rect.description || 'Click here to expand or collapse';\n return rect;\n };\n Node.prototype.initIconSymbol = function (options, iconContainer, accessibilityContent) {\n var iconContent;\n iconContainer.children.push(this.initIconContainer(options, iconContainer));\n if (options.shape === 'Template') {\n iconContent = new DiagramNativeElement();\n iconContent.content = options.content;\n iconContent.height = 10;\n iconContent.width = 10;\n }\n else {\n iconContent = new PathElement();\n iconContent.data = getIconShape(options);\n var iconContentBounds = measurePath(iconContent.data);\n iconContent.height =\n iconContentBounds.height < 10 ? iconContentBounds.height : 10 - (options.padding.bottom + options.padding.top);\n iconContent.width =\n iconContentBounds.width < 10 ? iconContentBounds.width : 10 - (options.padding.left + options.padding.right);\n }\n iconContent.id = iconContainer.id + '_shape';\n iconContent.horizontalAlignment = 'Center';\n iconContent.verticalAlignment = 'Center';\n iconContent.visible = iconContainer.visible;\n iconContent.visible = iconContainer.visible;\n iconContent.style = {\n fill: 'black', strokeColor: options.borderColor,\n strokeWidth: options.borderWidth\n };\n iconContent.setOffsetWithRespectToBounds(0.5, 0.5, 'Fraction');\n iconContent.relativeMode = 'Object';\n iconContent.description = iconContainer.description || 'Click here to expand or collapse';\n iconContainer.children.push(iconContent);\n };\n __decorate([\n Collection([], ShapeAnnotation)\n ], Node.prototype, \"annotations\", void 0);\n __decorate([\n Property(0)\n ], Node.prototype, \"offsetX\", void 0);\n __decorate([\n Property(0)\n ], Node.prototype, \"offsetY\", void 0);\n __decorate([\n Complex({ x: 0.5, y: 0.5 }, Point)\n ], Node.prototype, \"pivot\", void 0);\n __decorate([\n Property()\n ], Node.prototype, \"width\", void 0);\n __decorate([\n Property()\n ], Node.prototype, \"height\", void 0);\n __decorate([\n Property()\n ], Node.prototype, \"minWidth\", void 0);\n __decorate([\n Property()\n ], Node.prototype, \"minHeight\", void 0);\n __decorate([\n Property()\n ], Node.prototype, \"maxWidth\", void 0);\n __decorate([\n Property()\n ], Node.prototype, \"maxHeight\", void 0);\n __decorate([\n Property(0)\n ], Node.prototype, \"rotateAngle\", void 0);\n __decorate([\n Complex({}, TextStyle)\n ], Node.prototype, \"style\", void 0);\n __decorate([\n Property('transparent')\n ], Node.prototype, \"backgroundColor\", void 0);\n __decorate([\n Property('none')\n ], Node.prototype, \"borderColor\", void 0);\n __decorate([\n Property(0)\n ], Node.prototype, \"borderWidth\", void 0);\n __decorate([\n Property()\n ], Node.prototype, \"data\", void 0);\n __decorate([\n ComplexFactory(getShapeType)\n ], Node.prototype, \"shape\", void 0);\n __decorate([\n Property(null)\n ], Node.prototype, \"wrapper\", void 0);\n __decorate([\n Property(NodeConstraints.Default)\n ], Node.prototype, \"constraints\", void 0);\n __decorate([\n Complex({}, Shadow)\n ], Node.prototype, \"shadow\", void 0);\n __decorate([\n Property()\n ], Node.prototype, \"children\", void 0);\n return Node;\n}(NodeBase));\nexport { Node };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property } from '@syncfusion/ej2-base';\nimport { createSvgElement, setAttributeSvg } from '../diagram/utility/dom-util';\nimport { Size } from '../diagram/primitives/size';\nimport { getFunction } from '../diagram/utility/base-util';\n/**\n * Represents the Ruler component that measures the Diagram objects, indicate positions, and align Diagram elements.\n * ```html\n *
    Show Ruler
    \n * ```\n * ```typescript\n * \n * ```\n */\nvar Ruler = /** @class */ (function (_super) {\n __extends(Ruler, _super);\n /**\n * Constructor for creating the Ruler Component\n */\n function Ruler(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.offset = 0;\n _this.scale = 1;\n return _this;\n }\n /**\n * Initializes the values of private members.\n * @private\n */\n Ruler.prototype.preRender = function () {\n this.unWireEvents();\n this.wireEvents();\n };\n /**\n * Renders the rulers.\n * @private\n */\n Ruler.prototype.render = function () {\n this.updateRulerGeometry();\n };\n /**\n * Core method to return the component name.\n * @private\n */\n Ruler.prototype.getModuleName = function () {\n return 'Ruler';\n };\n /**\n * To destroy the ruler\n * @return {void}\n */\n Ruler.prototype.destroy = function () {\n this.unWireEvents();\n this.notify('destroy', {});\n _super.prototype.destroy.call(this);\n this.element.classList.remove('e-ruler');\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @return {string}\n */\n Ruler.prototype.getPersistData = function () {\n var keyEntity = ['loaded'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Refreshes the ruler when the Ruler properties are updated\n * @param options\n */\n Ruler.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'length':\n case 'interval':\n case 'segmentWidth':\n case 'tickAlignment':\n case 'markerColor':\n case 'thickness':\n this.updateRuler();\n break;\n }\n }\n };\n Ruler.prototype.updateRulerGeometry = function () {\n this.element.style.textAlign = 'left';\n this.renderRulerSpace();\n this.updateRuler();\n };\n Ruler.prototype.renderRulerSpace = function () {\n var rulerGeometry = this.getRulerGeometry();\n var div = document.getElementById(this.element.id + '_ruler_space');\n if (!div) {\n div = document.createElement('div');\n div.setAttribute('id', this.element.id + '_ruler_space');\n div.style.height = rulerGeometry.height + 'px';\n div.style.width = rulerGeometry.width + 'px';\n div.style.cssFloat = 'left';\n this.element.appendChild(div);\n }\n return div;\n };\n Ruler.prototype.updateRuler = function () {\n var rulerSize = this.getRulerSize();\n var rulerGeometry = this.getRulerGeometry();\n var length = 0;\n var offset = 0;\n var availableSize = new Size();\n var svg = this.getRulerSVG(rulerGeometry);\n if (svg) {\n length = this.length;\n availableSize.height = rulerSize;\n offset = this.offset;\n if (length && length !== Infinity) {\n var unitLength = length + this.segmentWidth;\n var unitOffset = offset;\n this.updateSegments(unitOffset, (unitLength + Math.abs(unitOffset)), svg, rulerSize);\n }\n }\n };\n Ruler.prototype.updateSegments = function (start, end, svg, rulerSize) {\n var run = start;\n var trans = { trans: 0 };\n while (run < end) {\n var rulerSegment = this.getNewSegment(run, svg);\n if (rulerSegment) {\n svg.appendChild(rulerSegment.segment);\n run = this.updateSegment(start, end, rulerSegment, run, trans, rulerSize);\n }\n }\n };\n Ruler.prototype.updateSegment = function (start, end, rulerSegment, run, trans, rulerSize) {\n var segWidth = this.updateSegmentWidth(this.scale);\n if (run === start) {\n this.startValue = Math.floor(start / segWidth) * segWidth / this.scale;\n this.startValue = (this.startValue % 1) !== 0 ? Number((this.startValue).toFixed(1)) : this.startValue;\n rulerSegment.label.textContent = this.startValue.toString();\n this.defStartValue = run = this.startValue * this.scale;\n if (this.orientation === 'Horizontal') {\n this.hRulerOffset = start - run;\n }\n else {\n this.vRulerOffset = start - run;\n }\n }\n else {\n this.startValue = (run / this.scale);\n this.startValue = (this.startValue % 1) !== 0 ? Number((this.startValue).toFixed(1)) : this.startValue;\n rulerSegment.label.textContent = this.startValue.toString();\n }\n this.updateTickLabel(rulerSegment, rulerSize);\n var translate = (this.orientation === 'Horizontal') ? ((trans.trans + 0.5) + ',0.5') : ('0.5,' + (trans.trans + 0.5));\n rulerSegment.segment.setAttribute('transform', 'translate(' + translate + ')');\n trans.trans += segWidth;\n run += segWidth;\n return run;\n };\n Ruler.prototype.updateTickLabel = function (rulerSegment, rulerSize) {\n var bBox = rulerSegment.segment.lastChild.getBBox();\n var isHorizontal = (this.orientation === 'Horizontal') ? true : false;\n var isRightOrBottom = (this.tickAlignment === 'RightOrBottom') ? true : false;\n var x = isHorizontal ? 2 : 0;\n var y = isHorizontal ? (isRightOrBottom ? (rulerSize / 2 + (11 / 2) - (11 / 2)) :\n (rulerSize / 2 + (11 / 2))) : bBox.height;\n var translate = isRightOrBottom ? (-(bBox.width + 2) + ',' + ((rulerSize / 2) - bBox.height)) :\n (-(bBox.width + 2) + ',' + ((rulerSize / 2) - bBox.height / 2));\n var attr = isHorizontal ? { 'x': x, 'y': y } :\n { 'x': x, 'y': y, 'transform': 'rotate(270)' + 'translate(' + translate + ')' };\n setAttributeSvg(rulerSegment.segment.lastChild, attr);\n };\n Ruler.prototype.getNewSegment = function (run, svg) {\n var segment = this.createNewTicks(run, svg);\n var label = this.createTickLabel(svg, segment);\n return { segment: segment, label: label };\n };\n Ruler.prototype.createNewTicks = function (run, svg) {\n var tick;\n var tickInterval;\n var segmentWidth = this.updateSegmentWidth(this.scale);\n var g;\n var attr = { 'class': 'e-ruler-segment' };\n g = createSvgElement('g', attr);\n for (var i = 0; i < this.interval; i++) {\n tickInterval = segmentWidth / this.interval;\n tick = this.createTick(svg, tickInterval, i + 1, run);\n g.appendChild(tick);\n }\n return g;\n };\n Ruler.prototype.getLinePoint = function (svg, tickInterval, length) {\n var segmentWidth = this.updateSegmentWidth(this.scale);\n var rulerSize = this.getRulerSize();\n tickInterval = tickInterval * (length - 1);\n length = ((tickInterval % segmentWidth) === 0) ? rulerSize : rulerSize * 0.3;\n return length;\n };\n Ruler.prototype.createTick = function (svg, tickInterval, length, run) {\n var ruler;\n var line;\n var linePoint = this.getLinePoint(svg, tickInterval, length);\n var rulerSize = this.getRulerSize();\n var args;\n var attr;\n var isHorizontal = (this.orientation === 'Horizontal') ? true : false;\n var isRightOrBottom = (this.tickAlignment === 'RightOrBottom') ? true : false;\n var arrangeTick = getFunction(this.arrangeTick);\n args = { ruler: ruler, tickLength: linePoint, tickInterval: ((this.segmentWidth / this.interval) * (length - 1)) };\n if (arrangeTick) {\n arrangeTick(args);\n }\n linePoint = args.tickLength;\n var point = tickInterval * (length - 1);\n var x1 = isHorizontal ? point : (isRightOrBottom ? rulerSize : 0);\n var x2 = isHorizontal ? point : (isRightOrBottom ? (rulerSize - linePoint) : (rulerSize - (rulerSize - linePoint)));\n var y1 = isHorizontal ? (isRightOrBottom ? rulerSize : (rulerSize - (rulerSize - linePoint))) : point;\n var y2 = isHorizontal ? (isRightOrBottom ? (rulerSize - linePoint) : 0) : point;\n attr = { 'x1': x1, 'y1': y1, 'x2': x2, 'y2': y2, 'stroke-width': '1', 'stroke': 'black' };\n line = createSvgElement('line', attr);\n line.setAttribute('class', 'e-ruler-tick');\n return line;\n };\n Ruler.prototype.createTickLabel = function (svg, segment) {\n var text;\n if (segment) {\n var attr = { 'class': 'e-ruler-tick-label' };\n text = createSvgElement('text', attr);\n segment.appendChild(text);\n }\n return text;\n };\n /**\n * @private\n * @param scale\n */\n Ruler.prototype.updateSegmentWidth = function (scale) {\n if (this.segmentWidth !== 100) {\n return this.segmentWidth;\n }\n var five = 25;\n var multiples = 1;\n var div;\n var scaleRound;\n var fifty = 100;\n scaleRound = Math.pow(2, Math.round(Math.log(scale) / Math.log(2)));\n div = fifty;\n div = (fifty / scaleRound);\n while (div > 100) {\n multiples /= 10;\n div /= 10;\n }\n while (div < 25) {\n multiples *= 10;\n div *= 10;\n }\n if (div >= five && div % five !== 0) {\n div = Math.round(div / five) * five;\n }\n return div * scale / multiples;\n };\n Ruler.prototype.createMarkerLine = function (rulerSvg, rulerObj, attr) {\n var line;\n if (rulerObj) {\n line = rulerSvg.getElementById(rulerObj.id + '_marker');\n if (line) {\n line.parentNode.removeChild(line);\n }\n line = createSvgElement('line', attr);\n }\n return line;\n };\n /**\n * @private\n * @param rulerObj\n * @param currentPoint\n */\n Ruler.prototype.drawRulerMarker = function (rulerObj, currentPoint, offset) {\n var rulerSvg;\n var rulerSize;\n var scale;\n var diff;\n var i;\n var attr;\n var line;\n var isHorizontal = this.orientation === 'Horizontal' ? true : false;\n var rulerSvgElements = rulerObj.getElementsByTagName('svg');\n for (i = 0; i < rulerSvgElements.length; i++) {\n if (rulerSvgElements[i]) {\n rulerSvg = rulerSvgElements[i];\n }\n break;\n }\n if (rulerSvg) {\n rulerSize = this.getRulerSize();\n attr = {\n 'id': rulerObj.id + '_marker', 'x1': 0, 'y1': 0, 'x2': (isHorizontal ? 0 : rulerSize),\n 'y2': (isHorizontal ? rulerSize : 0), 'stroke': this.markerColor, 'stroke-width': 1.5,\n 'class': 'e-d-ruler-marker'\n };\n line = this.createMarkerLine(rulerSvg, rulerObj, attr);\n scale = this.scale;\n diff = this.offset - this.defStartValue;\n var point = isHorizontal ? currentPoint.x : currentPoint.y;\n var move = (point * scale) + offset + diff;\n line.setAttribute('transform', 'translate(' + (isHorizontal ? ((move + 0.5) + ' 0.5') : ('0.5 ' + (move + 0.5))) + ')');\n rulerSvg.appendChild(line);\n }\n };\n Ruler.prototype.getRulerGeometry = function () {\n return new Size(this.element ? this.element.getBoundingClientRect().width : 0, this.element ? this.element.getBoundingClientRect().height : 0);\n };\n Ruler.prototype.getRulerSize = function () {\n return this.thickness;\n };\n Ruler.prototype.getRulerSVG = function (rulerGeometry) {\n var rulerSpace;\n var rulerSize = this.getRulerSize();\n var svg;\n if (this.element) {\n rulerSpace = document.getElementById(this.element.id + '_ruler_space');\n if (rulerSpace) {\n var attr = {\n 'id': this.element.id + '_Ruler_svg',\n width: this.orientation === 'Horizontal' ? (rulerGeometry.width + 200) : rulerSize + 'px',\n height: this.orientation === 'Horizontal' ? rulerSize : (rulerGeometry.height + 200) + 'px',\n style: 'position:inherit;'\n };\n svg = createSvgElement('svg', attr);\n if (rulerSpace.childNodes.length > 0) {\n for (var i = rulerSpace.childNodes.length - 1; i >= 0; i--) {\n rulerSpace.childNodes[i].parentNode.removeChild(rulerSpace.childNodes[i]);\n }\n }\n rulerSpace.appendChild(svg);\n }\n }\n return svg;\n };\n /**\n * Method to bind events for the ruler\n */\n Ruler.prototype.wireEvents = function () {\n //wire Events\n };\n /**\n * Method to unbind events for the ruler\n */\n Ruler.prototype.unWireEvents = function () {\n //unWire Events\n };\n __decorate([\n Property(5)\n ], Ruler.prototype, \"interval\", void 0);\n __decorate([\n Property(100)\n ], Ruler.prototype, \"segmentWidth\", void 0);\n __decorate([\n Property('Horizontal')\n ], Ruler.prototype, \"orientation\", void 0);\n __decorate([\n Property('RightOrBottom')\n ], Ruler.prototype, \"tickAlignment\", void 0);\n __decorate([\n Property('red')\n ], Ruler.prototype, \"markerColor\", void 0);\n __decorate([\n Property(25)\n ], Ruler.prototype, \"thickness\", void 0);\n __decorate([\n Property(null)\n ], Ruler.prototype, \"arrangeTick\", void 0);\n __decorate([\n Property(400)\n ], Ruler.prototype, \"length\", void 0);\n return Ruler;\n}(Component));\nexport { Ruler };\n","import { PathElement } from '../core/elements/path-element';\nimport { ImageElement } from '../core/elements/image-element';\nimport { TextElement } from '../core/elements/text-element';\nimport { Container } from '../core/containers/container';\nimport { rotateMatrix, identityMatrix, transformPointByMatrix } from '../primitives/matrix';\nimport { Size } from '../primitives/size';\nimport { wordBreakToString, whiteSpaceToString, textAlignToString } from '../utility/base-util';\nimport { getUserHandlePosition, canShowCorner } from '../utility/diagram-util';\nimport { getDiagramElement, getAdornerLayer, getGridLayer, getHTMLLayer } from '../utility/dom-util';\nimport { measurePath, getBackgroundLayerSvg, getBackgroundImageLayer, setAttributeSvg } from '../utility/dom-util';\nimport { getDiagramLayer, getExpandCollapseLayer, getPortsLayer, getNativeLayer } from '../utility/dom-util';\nimport { SnapConstraints } from '../enum/enum';\nimport { ThumbsConstraints, SelectorConstraints } from '../enum/enum';\nimport { SvgRenderer } from './svg-renderer';\nimport { CanvasRenderer } from './canvas-renderer';\nimport { processPathData, splitArrayCollection, transformPath } from '../utility/path-util';\nimport { DiagramNativeElement } from '../core/elements/native-element';\nimport { DiagramHtmlElement } from '../core/elements/html-element';\nimport { Point } from '../primitives/point';\n/**\n * Renderer module is used to render basic diagram elements\n */\n/** @private */\nvar DiagramRenderer = /** @class */ (function () {\n function DiagramRenderer(name, svgRender, isSvgMode) {\n this.renderer = null;\n this.isSvgMode = true;\n this.diagramId = name;\n this.element = getDiagramElement(this.diagramId);\n this.svgRenderer = svgRender;\n this.isSvgMode = isSvgMode;\n this.renderer = isSvgMode ? new SvgRenderer() : new CanvasRenderer();\n }\n DiagramRenderer.prototype.setCursor = function (canvas, cursor) {\n canvas.style.cursor = cursor;\n };\n /** @private */\n DiagramRenderer.prototype.setLayers = function () {\n this.iconSvgLayer = this.element.getElementsByClassName('e-ports-expand-layer')[0];\n this.adornerSvgLayer = this.element.getElementsByClassName('e-adorner-layer')[0];\n this.nativeSvgLayer = this.element.getElementsByClassName('e-native-layer')[0];\n this.diagramSvgLayer = this.element.getElementsByClassName('e-diagram-layer')[0];\n };\n DiagramRenderer.prototype.getAdornerLayer = function () {\n var adornerLayer = getAdornerLayer(this.diagramId);\n return adornerLayer;\n };\n DiagramRenderer.prototype.getParentSvg = function (element, targetElement, canvas) {\n if (this.diagramId && element && element.id) {\n if (element.id.split('_icon_content').length > 1 || element.id.split('_nodeport').length > 1) {\n return this.iconSvgLayer;\n }\n if (targetElement && targetElement === 'selector') {\n return this.adornerSvgLayer;\n }\n else if (element instanceof DiagramNativeElement) {\n return this.nativeSvgLayer;\n }\n else {\n return this.diagramSvgLayer;\n }\n }\n return canvas;\n };\n DiagramRenderer.prototype.getParentElement = function (element, defaultParent, svgElement) {\n var layerGElement = defaultParent;\n if (svgElement && this.diagramId && element && element.id) {\n if (element.id.split('_icon_content').length > 1) {\n layerGElement = svgElement.getElementById(this.diagramId + '_diagramExpander');\n defaultParent = null;\n }\n else if (element.id.split('_nodeport').length > 1) {\n layerGElement = svgElement.getElementById(this.diagramId + '_diagramPorts');\n }\n else if (element instanceof DiagramNativeElement) {\n layerGElement = svgElement.getElementById(this.diagramId + '_nativeLayer');\n defaultParent = null;\n }\n else {\n layerGElement = svgElement.getElementById(this.diagramId + '_diagramLayer');\n }\n var groupElement = this.getGroupElement(element, defaultParent || layerGElement);\n layerGElement = groupElement.g;\n if (groupElement.svg) {\n svgElement = groupElement.svg;\n }\n }\n return { g: layerGElement, svg: svgElement };\n };\n DiagramRenderer.prototype.getGroupElement = function (element, canvas) {\n var gElement;\n var parentSvg = this.getParentSvg(element);\n var svgElement;\n if (canvas && parentSvg) {\n if (parentSvg) {\n gElement = parentSvg.getElementById(element.id + '_groupElement');\n if (!gElement && parentSvg !== this.nativeSvgLayer) {\n var nativeSvg = this.nativeSvgLayer;\n gElement = nativeSvg.getElementById(element.id + '_groupElement');\n svgElement = nativeSvg;\n }\n }\n if (!gElement) {\n gElement = this.svgRenderer.createGElement('g', { id: element.id + '_groupElement' });\n canvas.appendChild(gElement);\n }\n }\n return { g: gElement, svg: svgElement };\n };\n DiagramRenderer.prototype.renderElement = function (element, canvas, htmlLayer, transform, parentSvg, createParent) {\n if (element instanceof Container) {\n this.renderContainer(element, canvas, htmlLayer, transform, parentSvg, createParent);\n }\n else if (element instanceof ImageElement) {\n this.renderImageElement(element, canvas, transform, parentSvg);\n }\n else if (element instanceof PathElement) {\n this.renderPathElement(element, canvas, transform, parentSvg);\n }\n else if (element instanceof TextElement) {\n this.renderTextElement(element, canvas, transform, parentSvg);\n }\n else if (element instanceof DiagramNativeElement) {\n this.renderNativeElement(element, canvas, transform, parentSvg);\n }\n else if (element instanceof DiagramHtmlElement) {\n this.renderHTMLElement(element, canvas, htmlLayer, transform, parentSvg);\n }\n else {\n this.renderRect(element, canvas, transform, parentSvg);\n }\n };\n DiagramRenderer.prototype.drawSelectionRectangle = function (x, y, w, h, canvas, t) {\n x = (x + t.tx) * t.scale;\n y = (y + t.ty) * t.scale;\n var options = {\n width: w * t.scale, height: h * t.scale,\n x: x + 0.5, y: y + 0.5, fill: 'transparent', stroke: 'gray', angle: 0,\n pivotX: 0.5, pivotY: 0.5, strokeWidth: 1,\n dashArray: '6 3', opacity: 1,\n visible: true, id: canvas.id + '_selected_region'\n };\n var adornerLayer = this.getAdornerLayer();\n this.svgRenderer.updateSelectionRegion(adornerLayer, options);\n };\n /**\n * @private\n */\n DiagramRenderer.prototype.renderHighlighter = function (element, canvas, transform) {\n var width = element.actualSize.width || 2;\n var height = element.actualSize.height || 2;\n var x = element.offsetX - width * element.pivot.x;\n var y = element.offsetY - height * element.pivot.y;\n x = (x + transform.tx) * transform.scale;\n y = (y + transform.ty) * transform.scale;\n var options = {\n width: width * transform.scale, height: height * transform.scale,\n x: x, y: y, fill: 'transparent', stroke: '#8CC63F', angle: element.rotateAngle,\n pivotX: element.pivot.x, pivotY: element.pivot.y, strokeWidth: 4,\n dashArray: '', opacity: 1, cornerRadius: 0,\n visible: true, id: canvas.id + '_highlighter', class: 'e-diagram-highlighter'\n };\n this.svgRenderer.drawRectangle(canvas, options, this.diagramId);\n };\n DiagramRenderer.prototype.drawLine = function (canvas, options) {\n this.svgRenderer.drawLine(canvas, options);\n };\n DiagramRenderer.prototype.drawPath = function (canvas, options) {\n this.svgRenderer.drawPath(canvas, options, this.diagramId);\n };\n DiagramRenderer.prototype.renderResizeHandle = function (element, canvas, constraints, currentZoom, selectorConstraints, transform, canMask, enableNode) {\n var left = element.offsetX - element.actualSize.width * element.pivot.x;\n var top = element.offsetY - element.actualSize.height * element.pivot.y;\n var height = element.actualSize.height;\n var width = element.actualSize.width;\n if (constraints & ThumbsConstraints.Rotate) {\n this.renderPivotLine(element, canvas, transform, selectorConstraints, canMask);\n this.renderRotateThumb(element, canvas, transform, selectorConstraints, canMask);\n }\n this.renderBorder(element, canvas, transform, enableNode);\n var nodeWidth = element.actualSize.width * currentZoom;\n var nodeHeight = element.actualSize.height * currentZoom;\n if (nodeWidth >= 40 && nodeHeight >= 40) {\n //Hide corners when the size is less than 40\n if (selectorConstraints & SelectorConstraints.ResizeNorthWest) {\n this.renderCircularHandle('resizeNorthWest', element, left, top, canvas, canShowCorner(selectorConstraints, 'ResizeNorthWest'), constraints & ThumbsConstraints.ResizeNorthWest, transform, undefined, canMask, { 'aria-label': 'Thumb to resize the selected object on top left side direction' }, undefined, 'e-diagram-resize-handle e-northwest');\n }\n if (selectorConstraints & SelectorConstraints.ResizeNorthEast) {\n this.renderCircularHandle('resizeNorthEast', element, left + width, top, canvas, canShowCorner(selectorConstraints, 'ResizeNorthEast'), constraints & ThumbsConstraints.ResizeNorthEast, transform, undefined, canMask, { 'aria-label': 'Thumb to resize the selected object on top right side direction' }, undefined, 'e-diagram-resize-handle e-northeast');\n }\n if (selectorConstraints & SelectorConstraints.ResizeSouthWest) {\n this.renderCircularHandle('resizeSouthWest', element, left, top + height, canvas, canShowCorner(selectorConstraints, 'ResizeSouthWest'), constraints & ThumbsConstraints.ResizeSouthWest, transform, undefined, canMask, { 'aria-label': 'Thumb to resize the selected object on bottom left side direction' }, undefined, 'e-diagram-resize-handle e-southwest');\n }\n if (selectorConstraints & SelectorConstraints.ResizeSouthEast) {\n this.renderCircularHandle('resizeSouthEast', element, left + width, top + height, canvas, canShowCorner(selectorConstraints, 'ResizeSouthEast'), constraints & ThumbsConstraints.ResizeSouthEast, transform, undefined, canMask, { 'aria-label': 'Thumb to resize the selected object on bottom right side direction' }, undefined, 'e-diagram-resize-handle e-southeast');\n }\n }\n if (selectorConstraints & SelectorConstraints.ResizeNorth) {\n this.renderCircularHandle('resizeNorth', element, left + width / 2, top, canvas, canShowCorner(selectorConstraints, 'ResizeNorth'), constraints & ThumbsConstraints.ResizeNorth, transform, undefined, canMask, { 'aria-label': 'Thumb to resize the selected object on top side direction' }, undefined, 'e-diagram-resize-handle e-north');\n }\n if (selectorConstraints & SelectorConstraints.ResizeSouth) {\n this.renderCircularHandle('resizeSouth', element, left + width / 2, top + height, canvas, canShowCorner(selectorConstraints, 'ResizeSouth'), constraints & ThumbsConstraints.ResizeSouth, transform, undefined, canMask, { 'aria-label': 'Thumb to resize the selected object on bottom side direction' }, undefined, 'e-diagram-resize-handle e-south');\n }\n if (selectorConstraints & SelectorConstraints.ResizeWest) {\n this.renderCircularHandle('resizeWest', element, left, top + height / 2, canvas, canShowCorner(selectorConstraints, 'ResizeWest'), constraints & ThumbsConstraints.ResizeWest, transform, undefined, canMask, { 'aria-label': 'Thumb to resize the selected object on left side direction' }, undefined, 'e-diagram-resize-handle e-west');\n }\n if (selectorConstraints & SelectorConstraints.ResizeEast) {\n this.renderCircularHandle('resizeEast', element, left + width, top + height / 2, canvas, canShowCorner(selectorConstraints, 'ResizeEast'), constraints & ThumbsConstraints.ResizeEast, transform, undefined, canMask, { 'aria-label': 'Thumb to resize the selected object on right side direction' }, undefined, 'e-diagram-resize-handle e-east');\n }\n };\n DiagramRenderer.prototype.renderEndPointHandle = function (selector, canvas, constraints, selectorConstraints, transform, connectedSource, connectedTarget, isSegmentEditing) {\n var sourcePoint = selector.sourcePoint;\n var targetPoint = selector.targetPoint;\n var wrapper = selector.wrapper;\n var i;\n var segment;\n this.renderCircularHandle('connectorSourceThumb', wrapper, sourcePoint.x, sourcePoint.y, canvas, canShowCorner(selectorConstraints, 'ConnectorSourceThumb'), constraints & ThumbsConstraints.ConnectorSource, transform, connectedSource, undefined, { 'aria-label': 'Thumb to move the source point of the connector' }, undefined, 'e-diagram-endpoint-handle e-targetend');\n this.renderCircularHandle('connectorTargetThumb', wrapper, targetPoint.x, targetPoint.y, canvas, canShowCorner(selectorConstraints, 'ConnectorTargetThumb'), constraints & ThumbsConstraints.ConnectorTarget, transform, connectedTarget, undefined, { 'aria-label': 'Thumb to move the target point of the connector' }, undefined, 'e-diagram-endpoint-handle e-targetend');\n if (isSegmentEditing) {\n if ((selector.type === 'Straight' || selector.type === 'Bezier') && selector.segments.length > 0) {\n for (i = 0; i < selector.segments.length - 1; i++) {\n segment = selector.segments[i];\n this.renderCircularHandle(('segementThumb_' + (i + 1)), wrapper, segment.point.x, segment.point.y, canvas, true, constraints & ThumbsConstraints.ConnectorSource, transform, connectedSource, null, null, i);\n }\n }\n else {\n for (i = 0; i < selector.segments.length; i++) {\n var seg = selector.segments[i];\n this.renderOrthogonalThumbs('orthoThumb_' + (i + 1), wrapper, seg, canvas, canShowCorner(selectorConstraints, 'ConnectorSourceThumb'), transform);\n }\n }\n }\n if (selector.type === 'Bezier') {\n for (i = 0; i < selector.segments.length; i++) {\n var segment_1 = selector.segments[i];\n var bezierPoint = !Point.isEmptyPoint(segment_1.point1) ? segment_1.point1\n : segment_1.bezierPoint1;\n this.renderCircularHandle('bezierPoint_' + (i + 1) + '_1', wrapper, bezierPoint.x, bezierPoint.y, canvas, canShowCorner(selectorConstraints, 'ConnectorSourceThumb'), constraints & ThumbsConstraints.ConnectorSource, transform, undefined, undefined, { 'aria-label': 'Thumb to move the source point of the connector' }, undefined, 'e-diagram-bezier-handle e-source');\n if (canShowCorner(selectorConstraints, 'ConnectorSourceThumb')) {\n this.renderBezierLine('bezierLine_' + (i + 1) + '_1', wrapper, canvas, segment_1.points[0], !Point.isEmptyPoint(segment_1.point1) ? segment_1.point1 : segment_1.bezierPoint1, transform);\n }\n bezierPoint = !Point.isEmptyPoint(segment_1.point2) ? segment_1.point2 : segment_1.bezierPoint2;\n this.renderCircularHandle('bezierPoint_' + (i + 1) + '_2', wrapper, bezierPoint.x, bezierPoint.y, canvas, canShowCorner(selectorConstraints, 'ConnectorTargetThumb'), constraints & ThumbsConstraints.ConnectorTarget, transform, undefined, undefined, { 'aria-label': 'Thumb to move the target point of the connector' }, undefined, 'e-diagram-bezier-handle e-target');\n if (canShowCorner(selectorConstraints, 'ConnectorTargetThumb')) {\n this.renderBezierLine('bezierLine_' + (i + 1) + '_2', wrapper, canvas, segment_1.points[1], !Point.isEmptyPoint(segment_1.point2) ? segment_1.point2 : segment_1.bezierPoint2, transform);\n }\n }\n }\n };\n DiagramRenderer.prototype.renderOrthogonalThumbs = function (id, selector, segment, canvas, visibility, t) {\n var orientation;\n var visible;\n var length;\n var j = 0;\n for (j = 0; j < segment.points.length - 1; j++) {\n length = Point.distancePoints(segment.points[j], segment.points[j + 1]);\n orientation = (segment.points[j].y.toFixed(2) === segment.points[j + 1].y.toFixed(2)) ? 'horizontal' : 'vertical';\n visible = (length >= 50) ? true : false;\n this.renderOrthogonalThumb((id + '_' + (j + 1)), selector, (((segment.points[j].x + segment.points[j + 1].x) / 2)), (((segment.points[j].y + segment.points[j + 1].y) / 2)), canvas, visible, orientation, t);\n }\n };\n DiagramRenderer.prototype.renderOrthogonalThumb = function (id, selector, x, y, canvas, visible, orientation, t) {\n var path;\n var h;\n var v;\n if (orientation === 'horizontal') {\n path = 'M0,7 L15,0 L30,7 L15,14 z';\n h = -15;\n v = -7;\n }\n else {\n path = 'M7,0 L0,15 L7,30 L14,15 z';\n h = -7;\n v = -15;\n }\n var options = {\n x: ((x + t.tx) * t.scale) + h, y: ((y + t.ty) * t.scale) + v, angle: 0,\n fill: '#e2e2e2', stroke: 'black', strokeWidth: 1, dashArray: '', data: path,\n width: 20, height: 20, pivotX: 0, pivotY: 0, opacity: 1, visible: visible, id: id\n };\n this.svgRenderer.drawPath(canvas, options, this.diagramId);\n };\n DiagramRenderer.prototype.renderPivotLine = function (element, canvas, transform, selectorConstraints, canMask) {\n var wrapper = element;\n var dashArray = '2,3';\n var visible = (selectorConstraints & SelectorConstraints.Rotate) ? true : false;\n if (canMask) {\n visible = false;\n }\n var options = this.getBaseAttributes(wrapper, transform);\n options.fill = 'None';\n options.stroke = 'black';\n options.strokeWidth = 1;\n options.dashArray = dashArray;\n options.visible = visible;\n var scale = transform.scale;\n options.x *= scale;\n options.y *= scale;\n options.width *= scale;\n options.height *= scale;\n options.id = 'pivotLine';\n options.class = 'e-diagram-pivot-line';\n var startPoint = { x: wrapper.actualSize.width * wrapper.pivot.x * scale, y: -20 };\n var endPoint = { x: wrapper.actualSize.width * wrapper.pivot.x * scale, y: 0 };\n options.startPoint = startPoint;\n options.endPoint = endPoint;\n this.svgRenderer.drawLine(canvas, options);\n };\n DiagramRenderer.prototype.renderBezierLine = function (id, wrapper, canvas, start, end, transform) {\n var dashArray = '3,3';\n var options = this.getBaseAttributes(wrapper, transform);\n options.id = id;\n options.stroke = 'black';\n options.strokeWidth = 1;\n options.dashArray = dashArray;\n options.fill = 'None';\n options.class = 'e-diagram-bezier-line';\n options.x = 0;\n options.y = 0;\n var scale = transform.scale;\n var x1 = (start.x + transform.tx) * scale;\n var y1 = (start.y + transform.ty) * scale;\n var x2 = (end.x + transform.tx) * scale;\n var y2 = (end.y + transform.ty) * scale;\n var startPoint = { x: x1, y: y1 };\n var endPoint = { x: x2, y: y2 };\n options.startPoint = startPoint;\n options.endPoint = endPoint;\n this.svgRenderer.drawLine(canvas, options);\n };\n DiagramRenderer.prototype.renderCircularHandle = function (id, selector, cx, cy, canvas, visible, enableSelector, t, connected, canMask, ariaLabel, count, className) {\n var wrapper = selector;\n var radius = 7;\n var newPoint = { x: cx, y: cy };\n if (wrapper.rotateAngle !== 0 || wrapper.parentTransform !== 0) {\n var matrix = identityMatrix();\n rotateMatrix(matrix, wrapper.rotateAngle + wrapper.parentTransform, wrapper.offsetX, wrapper.offsetY);\n newPoint = transformPointByMatrix(matrix, newPoint);\n }\n var options = this.getBaseAttributes(wrapper);\n options.stroke = 'black';\n options.strokeWidth = 1;\n if (count !== undefined) {\n radius = 5;\n options.id = 'segmentEnd_' + count;\n options.fill = '#e2e2e2';\n }\n else {\n radius = 7;\n options.fill = connected ? '#8CC63F' : 'white';\n }\n options.centerX = (newPoint.x + t.tx) * t.scale;\n options.centerY = (newPoint.y + t.ty) * t.scale;\n options.radius = radius;\n options.angle = 0;\n options.id = id;\n options.visible = visible;\n options.class = className;\n if (connected) {\n options.class += ' e-connected';\n }\n if (canMask) {\n options.visible = false;\n }\n this.svgRenderer.drawCircle(canvas, options, enableSelector, ariaLabel);\n };\n DiagramRenderer.prototype.renderBorder = function (selector, canvas, transform, enableNode) {\n var wrapper = selector;\n var options = this.getBaseAttributes(wrapper, transform);\n options.x *= transform.scale;\n options.y *= transform.scale;\n options.width *= transform.scale;\n options.height *= transform.scale;\n options.fill = 'transparent';\n options.stroke = '#097F7F';\n options.strokeWidth = 0.6;\n options.dashArray = '6,3';\n options.class = 'e-diagram-border';\n options.id = 'borderRect';\n if (!enableNode) {\n options.class += ' e-disabled';\n }\n options.cornerRadius = 0;\n var parentSvg = this.getParentSvg(selector, 'selector');\n this.svgRenderer.drawRectangle(canvas, options, this.diagramId, undefined, true, parentSvg);\n };\n DiagramRenderer.prototype.renderUserHandler = function (selectorItem, canvas, transform) {\n var wrapper = selectorItem.wrapper;\n for (var _i = 0, _a = selectorItem.userHandles; _i < _a.length; _i++) {\n var obj = _a[_i];\n var element = new PathElement();\n var newPoint = void 0;\n var data = obj.pathData;\n newPoint = getUserHandlePosition(selectorItem, obj, transform);\n newPoint.x = (newPoint.x + transform.tx) * transform.scale;\n newPoint.y = (newPoint.y + transform.ty) * transform.scale;\n if (obj.visible) {\n obj.visible = (selectorItem.constraints & SelectorConstraints.UserHandle) ? true : false;\n }\n var option = this.getBaseAttributes(wrapper);\n option.id = obj.name + '_userhandle';\n option.fill = obj.backgroundColor;\n option.stroke = obj.borderColor;\n option.strokeWidth = obj.borderWidth;\n option.centerX = newPoint.x;\n option.centerY = newPoint.y;\n option.radius = obj.size * 0.5;\n option.class = 'e-diagram-userhandle-circle';\n option.angle = 0;\n option.visible = obj.visible;\n option.opacity = 1;\n this.svgRenderer.drawCircle(canvas, option, 1, { 'aria-label': obj.name + 'user handle' });\n var pathPading = 5;\n var arrayCollection = [];\n arrayCollection = processPathData(data);\n arrayCollection = splitArrayCollection(arrayCollection);\n var pathSize = measurePath(data);\n //requiredSize/contentSize\n var scaleX = (obj.size - 0.45 * obj.size) / pathSize.width;\n var scaleY = (obj.size - 0.45 * obj.size) / pathSize.height;\n var newData = transformPath(arrayCollection, scaleX, scaleY, true, pathSize.x, pathSize.y, 0, 0);\n pathSize = measurePath(newData);\n var options = {\n x: newPoint.x - pathSize.width / 2,\n y: newPoint.y - pathSize.height / 2,\n angle: 0, id: '',\n class: 'e-diagram-userhandle-path',\n fill: obj.pathColor, stroke: obj.backgroundColor, strokeWidth: 0.5, dashArray: '', data: newData,\n width: obj.size - pathPading, height: obj.size - pathPading, pivotX: 0, pivotY: 0, opacity: 1, visible: obj.visible\n };\n this.svgRenderer.drawPath(canvas, options, this.diagramId, undefined, undefined, { 'aria-label': obj.name + 'user handle' });\n }\n };\n DiagramRenderer.prototype.renderRotateThumb = function (wrapper, canvas, transform, selectorConstraints, canMask) {\n var element = new PathElement();\n var newPoint;\n var size = new Size();\n size.width = 18;\n size.height = 16;\n var top = wrapper.offsetY - wrapper.actualSize.height * wrapper.pivot.y;\n var left = wrapper.offsetX - wrapper.actualSize.width * wrapper.pivot.x;\n var visible = (selectorConstraints & SelectorConstraints.Rotate) ? true : false;\n if (canMask) {\n visible = false;\n }\n var data = 'M 16.856144362449648 10.238890446662904 L 18.000144362449646 3.437890446662903' +\n 'L 15.811144362449646 4.254890446662903 C 14.837144362449646 2.5608904466629028 13.329144362449647 ' +\n ' 1.2598904466629026 11.485144362449645 0.5588904466629026 C 9.375144362449646 - 0.24510955333709716 7.071144362449646 ' +\n ' - 0.18010955333709716 5.010144362449646 0.7438904466629028 C 2.942144362449646 1.6678904466629028 1.365144362449646' +\n ' 3.341890446662903 0.558144362449646 5.452890446662903 C - 0.244855637550354 7.567890446662903 - 0.17985563755035394' +\n ' 9.866890446662904 0.7431443624496461 11.930890446662904 C 1.6681443624496461 13.994890446662904 3.343144362449646' +\n ' 15.575890446662903 5.457144362449647 16.380890446662903 C 6.426144362449647 16.7518904466629 7.450144362449647' +\n ' 16.9348904466629 8.470144362449647 16.9348904466629 C 9.815144362449647 16.9348904466629 11.155144362449647 ' +\n '16.6178904466629 12.367144362449647 15.986890446662901 L 11.351144362449647 14.024890446662901 C 9.767144362449647' +\n ' 14.8468904466629 7.906144362449647 14.953890446662902 6.237144362449647 14.3178904466629 C 4.677144362449647' +\n ' 13.7218904466629 3.444144362449647 12.5558904466629 2.758144362449647 11.028890446662901 C 2.078144362449646 ' +\n '9.501890446662903 2.031144362449646 7.802890446662903 2.622144362449646 6.243890446662903 C 3.216144362449646' +\n ' 4.6798904466629025 4.387144362449646 3.442890446662903 5.914144362449646 2.760890446662903 C 7.437144362449646 ' +\n '2.078890446662903 9.137144362449646 2.0298904466629026 10.700144362449645 2.6258904466629027 C 11.946144362449646 ' +\n '3.100890446662903 12.971144362449646 3.9538904466629026 13.686144362449646 5.049890446662903 L 11.540144362449645 ' +\n '5.850890446662903 L 16.856144362449648 10.238890446662904 Z';\n var pivotX = left + wrapper.pivot.x * wrapper.actualSize.width;\n var pivotY = top;\n pivotX = (pivotX + transform.tx) * transform.scale;\n pivotY = (pivotY + transform.ty) * transform.scale;\n newPoint = { x: pivotX - size.width * 0.5, y: pivotY - 30 - size.height * 0.5 };\n if (wrapper.rotateAngle !== 0 || wrapper.parentTransform !== 0) {\n var matrix = identityMatrix();\n rotateMatrix(matrix, wrapper.rotateAngle + wrapper.parentTransform, (transform.tx + wrapper.offsetX) * transform.scale, (transform.ty + wrapper.offsetY) * transform.scale);\n newPoint = transformPointByMatrix(matrix, newPoint);\n }\n var options = {\n x: newPoint.x,\n y: newPoint.y,\n angle: wrapper.rotateAngle,\n fill: '#231f20', stroke: 'black', strokeWidth: 0.5, dashArray: '', data: data,\n width: 20, height: 20, pivotX: 0, pivotY: 0, opacity: 1, visible: visible, id: wrapper.id, class: 'e-diagram-rotate-handle'\n };\n options.id = 'rotateThumb';\n this.svgRenderer.drawPath(canvas, options, this.diagramId, true, undefined, { 'aria-label': 'Thumb to rotate the selected object' });\n };\n DiagramRenderer.prototype.renderPathElement = function (element, canvas, transform, parentSvg) {\n var options = this.getBaseAttributes(element, transform);\n options.data = element.absolutePath;\n options.data = element.absolutePath;\n var ariaLabel = element.description ? element.description : element.id;\n this.renderer.drawPath(canvas, options, this.diagramId, undefined, parentSvg, ariaLabel);\n };\n DiagramRenderer.prototype.renderSvgGridlines = function (snapSettings, gridSvg, t, rulerSettings, hRuler, vRuler) {\n //render gridlines\n var pattern = document.createElementNS('http://www.w3.org/2000/svg', 'pattern');\n var defs = document.createElementNS('http://www.w3.org/2000/svg', 'defs');\n defs.setAttribute('id', this.diagramId + '_grid_pattern_defn');\n if (snapSettings.constraints & SnapConstraints.ShowHorizontalLines ||\n snapSettings.constraints & SnapConstraints.ShowVerticalLines) {\n pattern.setAttribute('id', this.diagramId + '_pattern');\n }\n var hWidth = 0;\n var hHeight = 0;\n var hSegmentwidth = 0;\n var vSegmentwidth = 0;\n var scale = 1;\n var isRulerGrid = false;\n if (rulerSettings.showRulers && rulerSettings.dynamicGrid && hRuler && vRuler) {\n hSegmentwidth = vRuler.updateSegmentWidth(t.scale);\n vSegmentwidth = hRuler.updateSegmentWidth(t.scale);\n snapSettings.horizontalGridlines.scaledIntervals = [hSegmentwidth / hRuler.interval];\n snapSettings.verticalGridlines.scaledIntervals = [vSegmentwidth / vRuler.interval];\n isRulerGrid = true;\n }\n else {\n for (var _i = 0, _a = snapSettings.verticalGridlines.lineIntervals; _i < _a.length; _i++) {\n var entry = _a[_i];\n hWidth += entry;\n }\n for (var _b = 0, _c = snapSettings.horizontalGridlines.lineIntervals; _b < _c.length; _b++) {\n var entry = _c[_b];\n hHeight += entry;\n }\n scale = this.scaleSnapInterval(snapSettings, t.scale);\n }\n hWidth = isRulerGrid ? vSegmentwidth : hWidth * scale;\n hHeight = isRulerGrid ? hSegmentwidth : hHeight * scale;\n var attr = {\n id: this.diagramId + '_pattern', x: 0, y: 0, width: hWidth,\n height: hHeight, patternUnits: 'userSpaceOnUse'\n };\n setAttributeSvg(pattern, attr);\n this.horizontalSvgGridlines(pattern, hWidth, hHeight, scale, snapSettings, rulerSettings, vRuler, isRulerGrid);\n this.verticalSvgGridlines(pattern, hWidth, hHeight, scale, snapSettings, rulerSettings, hRuler, isRulerGrid);\n defs.appendChild(pattern);\n gridSvg.appendChild(defs);\n };\n DiagramRenderer.prototype.horizontalSvgGridlines = function (pattern, hWidth, hHeight, scale, snapSettings, rulerSettings, vRuler, isRulerGrid) {\n var space = 0;\n var dashArray = [];\n var hLine;\n if (snapSettings.constraints & SnapConstraints.ShowHorizontalLines) {\n var intervals = snapSettings.horizontalGridlines.lineIntervals;\n var strokestyle = snapSettings.horizontalGridlines.lineColor;\n if (snapSettings.horizontalGridlines.lineDashArray) {\n dashArray = this.renderer.parseDashArray(snapSettings.horizontalGridlines.lineDashArray);\n }\n if (rulerSettings.showRulers && rulerSettings.dynamicGrid && vRuler) {\n intervals = this.updateLineIntervals(intervals, rulerSettings, vRuler, hHeight);\n }\n for (var i = 0; i < intervals.length; i = i + 2) {\n hLine = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n var d = space + intervals[i] / 2;\n d = isRulerGrid ? d : d * scale;\n var attr = {\n 'stroke-width': intervals[i], 'stroke': snapSettings.horizontalGridlines.lineColor,\n 'd': 'M0,' + (d) + ' L' + hWidth + ',' + (d) + ' Z',\n 'dashArray': dashArray.toString(),\n 'class': intervals[i] === 1.25 ? 'e-diagram-thick-grid' : 'e-diagram-thin-grid'\n };\n setAttributeSvg(hLine, attr);\n pattern.appendChild(hLine);\n space += intervals[i + 1] + intervals[i];\n }\n }\n };\n DiagramRenderer.prototype.verticalSvgGridlines = function (pattern, hWidth, hHeight, scale, snapSettings, rulerSettings, hRuler, isRulerGrid) {\n var space = 0;\n var dashArray = [];\n var vLine;\n if (snapSettings.constraints & SnapConstraints.ShowVerticalLines) {\n var intervals = snapSettings.verticalGridlines.lineIntervals;\n var strokestyle = snapSettings.verticalGridlines.lineColor;\n if (snapSettings.verticalGridlines.lineDashArray) {\n dashArray = this.renderer.parseDashArray(snapSettings.verticalGridlines.lineDashArray);\n }\n if (rulerSettings.showRulers && rulerSettings.dynamicGrid && hRuler) {\n intervals = this.updateLineIntervals(intervals, rulerSettings, hRuler, hWidth);\n }\n for (var i = 0; i < intervals.length; i = i + 2) {\n vLine = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n var d = space + intervals[i] / 2;\n d = isRulerGrid ? d : d * scale;\n var attr = {\n 'stroke-width': intervals[i], 'stroke': snapSettings.verticalGridlines.lineColor,\n 'd': 'M' + (d) + ',0 L' + (d) + ',' + hHeight + ' Z',\n 'dashArray': dashArray.toString(),\n 'class': intervals[i] === 1.25 ? 'e-diagram-thick-grid' : 'e-diagram-thin-grid'\n };\n setAttributeSvg(vLine, attr);\n pattern.appendChild(vLine);\n space += intervals[i + 1] + intervals[i];\n }\n }\n };\n DiagramRenderer.prototype.updateGrid = function (snapSettings, svgGrid, transform, rulerSettings, hRuler, vRuler) {\n var grid = svgGrid.getElementById(this.diagramId + '_grid_rect');\n var i;\n var isRulerGrid = false;\n if (grid) {\n var pattern = svgGrid.getElementById(this.diagramId + '_pattern');\n if (pattern) {\n pattern.parentNode.removeChild(pattern);\n }\n var hSegmentwidth = 0;\n var vSegmentwidth = 0;\n var scale = 1;\n if (rulerSettings.showRulers && rulerSettings.dynamicGrid && vRuler && hRuler) {\n hSegmentwidth = vRuler.updateSegmentWidth(transform.scale);\n vSegmentwidth = hRuler.updateSegmentWidth(transform.scale);\n isRulerGrid = true;\n snapSettings.horizontalGridlines.scaledIntervals = [hSegmentwidth / hRuler.interval];\n snapSettings.verticalGridlines.scaledIntervals = [vSegmentwidth / vRuler.interval];\n }\n else {\n scale = this.scaleSnapInterval(snapSettings, transform.scale);\n }\n var height = 0;\n for (i = 0; i < snapSettings.horizontalGridlines.lineIntervals.length; i++) {\n height += snapSettings.horizontalGridlines.lineIntervals[i];\n }\n var width = 0;\n for (i = 0; i < snapSettings.verticalGridlines.lineIntervals.length; i++) {\n width += snapSettings.verticalGridlines.lineIntervals[i];\n }\n var attr = {\n x: -transform.tx * transform.scale,\n y: -transform.ty * transform.scale\n };\n setAttributeSvg(grid, attr);\n width = isRulerGrid ? vSegmentwidth : width * scale;\n height = isRulerGrid ? hSegmentwidth : height * scale;\n attr = {\n id: this.diagramId + '_pattern', x: 0, y: 0, width: width,\n height: height, patternUnits: 'userSpaceOnUse'\n };\n pattern = document.createElementNS('http://www.w3.org/2000/svg', 'pattern');\n setAttributeSvg(pattern, attr);\n this.horizontalSvgGridlines(pattern, width, height, scale, snapSettings, rulerSettings, vRuler, isRulerGrid);\n this.verticalSvgGridlines(pattern, width, height, scale, snapSettings, rulerSettings, hRuler, isRulerGrid);\n var defs = svgGrid.getElementById(this.diagramId + '_grid_pattern_defn');\n defs.appendChild(pattern);\n }\n };\n DiagramRenderer.prototype.updateLineIntervals = function (intervals, rulerSettings, ruler, segmentWidth) {\n var newInterval = [];\n var tickInterval = segmentWidth / ruler.interval;\n for (var i = 0; i < ruler.interval * 2; i++) {\n if (i % 2 === 0) {\n newInterval[i] = (i === 0) ? 1.25 : 0.25;\n }\n else {\n newInterval[i] = tickInterval - newInterval[i - 1];\n }\n }\n return newInterval;\n };\n DiagramRenderer.prototype.scaleSnapInterval = function (snapSettings, scale) {\n if (scale >= 2) {\n while (scale >= 2) {\n scale /= 2;\n }\n }\n else if (scale <= 0.5) {\n while (scale <= 0.5) {\n scale *= 2;\n }\n }\n var i;\n snapSettings.horizontalGridlines.scaledIntervals = snapSettings.horizontalGridlines.snapIntervals;\n snapSettings.verticalGridlines.scaledIntervals = snapSettings.verticalGridlines.snapIntervals;\n if (scale !== 1) {\n var gridlines = snapSettings.horizontalGridlines;\n gridlines.scaledIntervals = [];\n for (i = 0; i < gridlines.snapIntervals.length; i++) {\n gridlines.scaledIntervals[i] = gridlines.snapIntervals[i] * scale;\n }\n gridlines = snapSettings.verticalGridlines;\n gridlines.scaledIntervals = [];\n for (i = 0; i < gridlines.snapIntervals.length; i++) {\n gridlines.scaledIntervals[i] = gridlines.snapIntervals[i] * scale;\n }\n }\n return scale;\n };\n DiagramRenderer.prototype.renderTextElement = function (element, canvas, transform, parentSvg) {\n var options = this.getBaseAttributes(element, transform);\n options.cornerRadius = 0;\n this.renderer.drawRectangle(canvas, options, this.diagramId, undefined, undefined, parentSvg);\n options.whiteSpace = whiteSpaceToString(element.style.whiteSpace, element.style.textWrapping);\n options.content = element.content;\n options.breakWord = wordBreakToString(element.style.textWrapping);\n options.textAlign = textAlignToString(element.style.textAlign);\n options.color = element.style.color;\n options.italic = element.style.italic;\n options.bold = element.style.bold;\n options.fontSize = element.style.fontSize;\n options.fontFamily = element.style.fontFamily;\n options.textOverflow = element.style.textOverflow;\n options.textDecoration = element.style.textDecoration;\n options.doWrap = element.doWrap;\n options.wrapBounds = element.wrapBounds;\n options.childNodes = element.childNodes;\n options.dashArray = '';\n options.strokeWidth = 0;\n options.fill = '';\n var ariaLabel = element.description ? element.description : element.content ? element.content : element.id;\n this.renderer.drawText(canvas, options, parentSvg, ariaLabel, this.diagramId);\n if (this.isSvgMode) {\n element.doWrap = false;\n }\n };\n DiagramRenderer.prototype.renderNativeElement = function (element, canvas, transform, parentSvg) {\n var templateWidth;\n var templateHeight;\n var nativeSvg = this.getParentSvg(element, undefined, canvas) || parentSvg;\n var nativeLayer = this.getParentElement(element, canvas, nativeSvg).g || canvas;\n var options = this.getBaseAttributes(element, transform);\n options.fill = 'transparent';\n options.cornerRadius = element.cornerRadius;\n options.stroke = 'transparent';\n this.renderer.drawRectangle(canvas, options, this.diagramId, undefined, undefined, parentSvg);\n switch (element.scale) {\n case 'None':\n templateWidth = element.contentSize.width;\n templateHeight = element.contentSize.height;\n break;\n case 'Stretch':\n templateWidth = element.actualSize.width;\n templateHeight = element.actualSize.height;\n break;\n case 'Meet':\n if (element.actualSize.width <= element.actualSize.height) {\n templateWidth = templateHeight = element.actualSize.width;\n }\n else {\n templateWidth = templateHeight = element.actualSize.height;\n }\n break;\n case 'Slice':\n if (element.actualSize.width >= element.actualSize.height) {\n templateWidth = templateHeight = element.actualSize.width;\n }\n else {\n templateWidth = templateHeight = element.actualSize.height;\n }\n break;\n }\n if (this.svgRenderer) {\n this.svgRenderer.drawNativeContent(element, nativeLayer, templateHeight, templateWidth, nativeSvg);\n }\n };\n DiagramRenderer.prototype.renderHTMLElement = function (element, canvas, htmlLayer, transform, parentSvg) {\n var options = this.getBaseAttributes(element, transform);\n options.fill = 'transparent';\n options.cornerRadius = element.cornerRadius;\n options.stroke = 'transparent';\n this.renderer.drawRectangle(canvas, options, this.diagramId, undefined, undefined, parentSvg);\n if (this.svgRenderer) {\n this.svgRenderer.drawHTMLContent(element, htmlLayer.children[0], transform);\n }\n };\n DiagramRenderer.prototype.renderImageElement = function (element, canvas, transform, parentSvg) {\n var options = this.getBaseAttributes(element, transform);\n options.cornerRadius = 0;\n this.renderer.drawRectangle(canvas, options, this.diagramId, undefined, undefined, parentSvg);\n // let sx: number; let sy: number;\n var imageWidth;\n var imageHeight;\n var sourceWidth;\n var sourceHeight;\n if (element.stretch === 'Stretch') {\n imageWidth = element.actualSize.width;\n imageHeight = element.actualSize.height;\n }\n else {\n var contentWidth = element.contentSize.width;\n var contentHeight = element.contentSize.height;\n var widthRatio = options.width / contentWidth;\n var heightRatio = options.height / contentHeight;\n var ratio = void 0;\n switch (element.stretch) {\n case 'Meet':\n ratio = Math.min(widthRatio, heightRatio);\n imageWidth = contentWidth * ratio;\n imageHeight = contentHeight * ratio;\n options.x += Math.abs(options.width - imageWidth) / 2;\n options.y += Math.abs(options.height - imageHeight) / 2;\n break;\n case 'Slice':\n widthRatio = options.width / contentWidth;\n heightRatio = options.height / contentHeight;\n ratio = Math.max(widthRatio, heightRatio);\n imageWidth = contentWidth * ratio;\n imageHeight = contentHeight * ratio;\n sourceWidth = options.width / imageWidth * contentWidth;\n sourceHeight = options.height / imageHeight * contentHeight;\n break;\n case 'None':\n imageWidth = contentWidth;\n imageHeight = contentHeight;\n break;\n }\n }\n options.width = imageWidth;\n options.height = imageHeight;\n //Commented for code coverage\n //(options as ImageAttributes).sourceX = sx;\n //(options as ImageAttributes).sourceY = sy;\n options.sourceWidth = sourceWidth;\n options.sourceHeight = sourceHeight;\n options.source = element.source;\n options.alignment = element.imageAlign;\n options.scale = element.imageScale;\n options.description = element.description ? element.description : element.id;\n this.renderer.drawImage(canvas, options, parentSvg);\n };\n DiagramRenderer.prototype.renderContainer = function (group, canvas, htmlLayer, transform, parentSvg, createParent) {\n var svgParent = { svg: parentSvg, g: canvas };\n if (this.diagramId) {\n parentSvg = this.getParentSvg(group) || parentSvg;\n if (this.isSvgMode) {\n var groupElement = void 0;\n groupElement = this.getParentElement(group, canvas, parentSvg).g || canvas;\n parentSvg = this.getParentSvg(this.hasNativeParent(group.children)) || parentSvg;\n var svgNativeParent = this.getParentElement(this.hasNativeParent(group.children), groupElement, parentSvg);\n svgParent.svg = svgNativeParent.svg || parentSvg;\n svgParent.g = svgNativeParent.g || groupElement;\n if (createParent) {\n if (parentSvg) {\n if (!parentSvg.getElementById(svgParent.g.id)) {\n canvas.appendChild(svgParent.g);\n }\n }\n canvas = svgParent.g;\n }\n else {\n canvas = svgParent.g;\n }\n }\n }\n this.renderRect(group, canvas, transform, parentSvg);\n if (group.hasChildren()) {\n var parentG = void 0;\n var svgParent_1;\n for (var _i = 0, _a = group.children; _i < _a.length; _i++) {\n var child = _a[_i];\n parentSvg = this.getParentSvg(this.hasNativeParent(group.children) || child) || parentSvg;\n if (this.isSvgMode) {\n svgParent_1 = this.getParentElement(this.hasNativeParent(group.children) || child, canvas, parentSvg);\n parentG = svgParent_1.g || canvas;\n if (svgParent_1.svg) {\n parentSvg = svgParent_1.svg;\n }\n }\n this.renderElement(child, parentG || canvas, htmlLayer, transform, parentSvg, true);\n }\n }\n };\n DiagramRenderer.prototype.hasNativeParent = function (children, count) {\n if (children && children.length > 0 && (count || 0 < 3)) {\n var child = children[0];\n if (child instanceof DiagramNativeElement) {\n return child;\n }\n else if (child.children && child.children.length) {\n this.hasNativeParent(child.children, count++ || 0);\n }\n }\n return undefined;\n };\n DiagramRenderer.prototype.renderRect = function (element, canvas, transform, parentSvg) {\n var options = this.getBaseAttributes(element, transform);\n options.cornerRadius = element.cornerRadius || 0;\n var ariaLabel = element.description ? element.description : element.id;\n this.renderer.drawRectangle(canvas, options, this.diagramId, undefined, undefined, parentSvg, ariaLabel);\n };\n DiagramRenderer.prototype.drawRect = function (canvas, options) {\n options.cornerRadius = 0;\n this.svgRenderer.drawRectangle(canvas, options, this.diagramId);\n };\n DiagramRenderer.prototype.getBaseAttributes = function (element, transform) {\n var options = {\n width: element.actualSize.width, height: element.actualSize.height,\n x: element.offsetX - element.actualSize.width * element.pivot.x + 0.5,\n y: element.offsetY - element.actualSize.height * element.pivot.y + 0.5,\n fill: element.style.fill, stroke: element.style.strokeColor, angle: element.rotateAngle + element.parentTransform,\n pivotX: element.pivot.x, pivotY: element.pivot.y, strokeWidth: element.style.strokeWidth,\n dashArray: element.style.strokeDashArray || '', opacity: element.style.opacity, shadow: element.shadow,\n gradient: element.style.gradient, visible: element.visible, id: element.id, description: element.description,\n };\n if (transform) {\n options.x += transform.tx;\n options.y += transform.ty;\n }\n return options;\n };\n DiagramRenderer.renderSvgBackGroundImage = function (background, diagramElement, x, y, width, height) {\n var container = document.getElementById(diagramElement.id);\n var backgroundLayer = getBackgroundLayerSvg(diagramElement.id);\n var target = backgroundLayer.getElementById(diagramElement.id + '_image');\n if (!target && background.source) {\n var bgimageLayer = getBackgroundImageLayer(diagramElement.id);\n target = document.createElementNS('http://www.w3.org/2000/svg', 'image');\n target.setAttribute('id', diagramElement.id + '_image');\n bgimageLayer.appendChild(target);\n target.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', background.source);\n }\n if (target) {\n var scale = background.scale !== 'None' ? background.scale : '';\n var imgAlign = background.align;\n var aspectRatio = imgAlign.charAt(0).toLowerCase() + imgAlign.slice(1) + ' '\n + scale.charAt(0).toLowerCase() + scale.slice(1);\n var container_1 = document.getElementById(diagramElement.id);\n var attr = {\n 'id': diagramElement.id + '_image', 'x': x, 'y': y,\n 'width': width, 'height': height,\n 'preserveAspectRatio': aspectRatio\n };\n setAttributeSvg(target, attr);\n }\n };\n DiagramRenderer.prototype.transformLayers = function (transform, svgMode) {\n //diagram layer\n if (svgMode) {\n var diagramLayer = getDiagramLayer(this.diagramId);\n diagramLayer.setAttribute('transform', 'translate('\n + (transform.tx * transform.scale) + ',' + (transform.ty * transform.scale) + '),scale('\n + transform.scale + ')');\n }\n //background\n //gridline\n var gridLayer = getGridLayer(this.diagramId);\n gridLayer.setAttribute('transform', 'translate(' + (transform.tx * transform.scale) + ','\n + (transform.ty * transform.scale) + ')');\n //portslayer \n var portsLayer = getPortsLayer(this.diagramId);\n portsLayer.setAttribute('transform', 'translate('\n + (transform.tx * transform.scale) + ',' + (transform.ty * transform.scale) + '),scale('\n + transform.scale + ')');\n //expandlayer\n var expandLayer = getExpandCollapseLayer(this.diagramId);\n expandLayer.setAttribute('transform', 'translate('\n + (transform.tx * transform.scale) + ',' + (transform.ty * transform.scale) + '),scale('\n + transform.scale + ')');\n //nativelayer\n var nativeLayer = getNativeLayer(this.diagramId);\n nativeLayer.setAttribute('transform', 'translate('\n + (transform.tx * transform.scale) + ',' + (transform.ty * transform.scale) + '),scale('\n + transform.scale + ')');\n //htmlLayer\n var htmlLayer = getHTMLLayer(this.diagramId).children[0];\n htmlLayer.style.transform = 'translate('\n + (transform.tx * transform.scale) + 'px,' + (transform.ty * transform.scale) + 'px)scale('\n + transform.scale + ')';\n };\n /** @private */\n DiagramRenderer.prototype.updateNode = function (element, diagramElementsLayer, htmlLayer, transform) {\n this.renderElement(element, diagramElementsLayer, htmlLayer, transform, this.getParentSvg(element));\n };\n return DiagramRenderer;\n}());\nexport { DiagramRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, Complex, ChildProperty } from '@syncfusion/ej2-base';\nimport { Margin } from '../core/appearance';\n/**\n * Defines the BackgroundImage of diagram\n */\nvar Background = /** @class */ (function (_super) {\n __extends(Background, _super);\n function Background() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Background.prototype, \"source\", void 0);\n __decorate([\n Property('transparent')\n ], Background.prototype, \"color\", void 0);\n __decorate([\n Property('None')\n ], Background.prototype, \"scale\", void 0);\n __decorate([\n Property('None')\n ], Background.prototype, \"align\", void 0);\n return Background;\n}(ChildProperty));\nexport { Background };\n/**\n * Defines PageSettings\n */\nvar PageSettings = /** @class */ (function (_super) {\n __extends(PageSettings, _super);\n function PageSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], PageSettings.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], PageSettings.prototype, \"height\", void 0);\n __decorate([\n Complex({}, Margin)\n ], PageSettings.prototype, \"margin\", void 0);\n __decorate([\n Property('Landscape')\n ], PageSettings.prototype, \"orientation\", void 0);\n __decorate([\n Property('Infinity')\n ], PageSettings.prototype, \"boundaryConstraints\", void 0);\n __decorate([\n Complex({}, Background)\n ], PageSettings.prototype, \"background\", void 0);\n __decorate([\n Property(false)\n ], PageSettings.prototype, \"multiplePage\", void 0);\n __decorate([\n Property(false)\n ], PageSettings.prototype, \"showPageBreaks\", void 0);\n return PageSettings;\n}(ChildProperty));\nexport { PageSettings };\n/**\n * Diagram ScrollSettings module handles the scroller properties of the diagram\n */\nvar ScrollSettings = /** @class */ (function (_super) {\n __extends(ScrollSettings, _super);\n function ScrollSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0)\n ], ScrollSettings.prototype, \"horizontalOffset\", void 0);\n __decorate([\n Property(0)\n ], ScrollSettings.prototype, \"verticalOffset\", void 0);\n __decorate([\n Property(1)\n ], ScrollSettings.prototype, \"currentZoom\", void 0);\n __decorate([\n Property(0)\n ], ScrollSettings.prototype, \"viewPortWidth\", void 0);\n __decorate([\n Property(0)\n ], ScrollSettings.prototype, \"viewPortHeight\", void 0);\n __decorate([\n Property(0.2)\n ], ScrollSettings.prototype, \"minZoom\", void 0);\n __decorate([\n Property(30)\n ], ScrollSettings.prototype, \"maxZoom\", void 0);\n __decorate([\n Property('Diagram')\n ], ScrollSettings.prototype, \"scrollLimit\", void 0);\n __decorate([\n Property()\n ], ScrollSettings.prototype, \"scrollableArea\", void 0);\n __decorate([\n Property(false)\n ], ScrollSettings.prototype, \"canAutoScroll\", void 0);\n __decorate([\n Complex({ left: 15, right: 15, top: 15, bottom: 15 }, Margin)\n ], ScrollSettings.prototype, \"autoScrollBorder\", void 0);\n return ScrollSettings;\n}(ChildProperty));\nexport { ScrollSettings };\n","/**\n * ServiceLocator\n * @hidden\n */\nvar ServiceLocator = /** @class */ (function () {\n function ServiceLocator() {\n this.services = {};\n }\n ServiceLocator.prototype.register = function (name, type) {\n this.services[name] = type;\n };\n ServiceLocator.prototype.getService = function (name) {\n return this.services[name];\n };\n return ServiceLocator;\n}());\nexport { ServiceLocator };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, Complex, ChildProperty } from '@syncfusion/ej2-base';\nimport { SnapConstraints } from '../enum/enum';\n/**\n * Defines gridlines\n */\nvar Gridlines = /** @class */ (function (_super) {\n __extends(Gridlines, _super);\n function Gridlines() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('lightgray')\n ], Gridlines.prototype, \"lineColor\", void 0);\n __decorate([\n Property('')\n ], Gridlines.prototype, \"lineDashArray\", void 0);\n __decorate([\n Property([1.25, 18.75, 0.25, 19.75, 0.25, 19.75, 0.25, 19.75, 0.25, 19.75])\n ], Gridlines.prototype, \"lineIntervals\", void 0);\n __decorate([\n Property([20])\n ], Gridlines.prototype, \"snapIntervals\", void 0);\n return Gridlines;\n}(ChildProperty));\nexport { Gridlines };\n/**\n * Defines the public properties of diagram\n */\nvar SnapSettings = /** @class */ (function (_super) {\n __extends(SnapSettings, _super);\n function SnapSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({}, Gridlines)\n ], SnapSettings.prototype, \"horizontalGridlines\", void 0);\n __decorate([\n Complex({}, Gridlines)\n ], SnapSettings.prototype, \"verticalGridlines\", void 0);\n __decorate([\n Property(SnapConstraints.All)\n ], SnapSettings.prototype, \"constraints\", void 0);\n __decorate([\n Property(5)\n ], SnapSettings.prototype, \"snapAngle\", void 0);\n __decorate([\n Property(5)\n ], SnapSettings.prototype, \"snapObjectDistance\", void 0);\n return SnapSettings;\n}(ChildProperty));\nexport { SnapSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, Complex } from '@syncfusion/ej2-base';\n/**\n * defines the Properties for the Diagram Ruler\n */\nvar DiagramRuler = /** @class */ (function (_super) {\n __extends(DiagramRuler, _super);\n function DiagramRuler() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(5)\n ], DiagramRuler.prototype, \"interval\", void 0);\n __decorate([\n Property(100)\n ], DiagramRuler.prototype, \"segmentWidth\", void 0);\n __decorate([\n Property('Horizontal')\n ], DiagramRuler.prototype, \"orientation\", void 0);\n __decorate([\n Property('RightOrBottom')\n ], DiagramRuler.prototype, \"tickAlignment\", void 0);\n __decorate([\n Property('red')\n ], DiagramRuler.prototype, \"markerColor\", void 0);\n __decorate([\n Property(25)\n ], DiagramRuler.prototype, \"thickness\", void 0);\n __decorate([\n Property(null)\n ], DiagramRuler.prototype, \"arrangeTick\", void 0);\n return DiagramRuler;\n}(ChildProperty));\nexport { DiagramRuler };\n/**\n * Defines rulers\n */\nvar RulerSettings = /** @class */ (function (_super) {\n __extends(RulerSettings, _super);\n function RulerSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], RulerSettings.prototype, \"showRulers\", void 0);\n __decorate([\n Property(true)\n ], RulerSettings.prototype, \"dynamicGrid\", void 0);\n __decorate([\n Complex({ orientation: 'Horizontal' }, DiagramRuler)\n ], RulerSettings.prototype, \"horizontalRuler\", void 0);\n __decorate([\n Complex({ orientation: 'Vertical' }, DiagramRuler)\n ], RulerSettings.prototype, \"verticalRuler\", void 0);\n return RulerSettings;\n}(ChildProperty));\nexport { RulerSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * data source defines the basic unit of diagram\n */\nvar DataSource = /** @class */ (function (_super) {\n __extends(DataSource, _super);\n function DataSource() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], DataSource.prototype, \"id\", void 0);\n __decorate([\n Property(null)\n ], DataSource.prototype, \"dataManager\", void 0);\n __decorate([\n Property('')\n ], DataSource.prototype, \"root\", void 0);\n __decorate([\n Property('')\n ], DataSource.prototype, \"parentId\", void 0);\n __decorate([\n Property()\n ], DataSource.prototype, \"data\", void 0);\n __decorate([\n Property()\n ], DataSource.prototype, \"doBinding\", void 0);\n return DataSource;\n}(ChildProperty));\nexport { DataSource };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Margin } from '../core/appearance';\nimport { Property, Complex, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Defines the behavior of the automatic layouts\n */\nvar Layout = /** @class */ (function (_super) {\n __extends(Layout, _super);\n function Layout() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Layout.prototype, \"fixedNode\", void 0);\n __decorate([\n Property(30)\n ], Layout.prototype, \"horizontalSpacing\", void 0);\n __decorate([\n Property(30)\n ], Layout.prototype, \"verticalSpacing\", void 0);\n __decorate([\n Property(30)\n ], Layout.prototype, \"maxIteration\", void 0);\n __decorate([\n Property(40)\n ], Layout.prototype, \"springFactor\", void 0);\n __decorate([\n Property(50)\n ], Layout.prototype, \"springLength\", void 0);\n __decorate([\n Complex({ left: 50, top: 50, right: 0, bottom: 0 }, Margin)\n ], Layout.prototype, \"margin\", void 0);\n __decorate([\n Property('Auto')\n ], Layout.prototype, \"horizontalAlignment\", void 0);\n __decorate([\n Property('Auto')\n ], Layout.prototype, \"verticalAlignment\", void 0);\n __decorate([\n Property('TopToBottom')\n ], Layout.prototype, \"orientation\", void 0);\n __decorate([\n Property('Auto')\n ], Layout.prototype, \"connectionDirection\", void 0);\n __decorate([\n Property('Default')\n ], Layout.prototype, \"connectorSegments\", void 0);\n __decorate([\n Property('None')\n ], Layout.prototype, \"type\", void 0);\n __decorate([\n Property()\n ], Layout.prototype, \"getLayoutInfo\", void 0);\n __decorate([\n Property()\n ], Layout.prototype, \"getBranch\", void 0);\n __decorate([\n Property()\n ], Layout.prototype, \"bounds\", void 0);\n __decorate([\n Property(true)\n ], Layout.prototype, \"enableAnimation\", void 0);\n __decorate([\n Property('')\n ], Layout.prototype, \"root\", void 0);\n return Layout;\n}(ChildProperty));\nexport { Layout };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Node } from '../objects/node';\nimport { Connector } from '../objects/connector';\nimport { Point } from '../primitives/point';\nimport { BpmnSubEvent } from '../objects/node';\nimport { PointPort } from '../objects/port';\nimport { rotatePoint, cloneObject } from '../utility/base-util';\nimport { Rect } from '../primitives/rect';\nimport { getPolygonPath } from '../utility/path-util';\nimport { canOutConnect, canInConnect, canAllowDrop } from '../utility/constraints-util';\nimport { transformPointByMatrix, rotateMatrix, identityMatrix } from '../primitives/matrix';\nimport { NodeConstraints, DiagramEvent } from './../enum/enum';\nimport { contains } from './actions';\n/**\n * Defines the interactive tools\n */\nvar ToolBase = /** @class */ (function () {\n /**\n * Initializes the tool\n * @param command Command that is corresponding to the current action\n */\n function ToolBase(command, protectChange) {\n if (protectChange === void 0) { protectChange = false; }\n /**\n * Command that is corresponding to the current action\n */\n this.commandHandler = null;\n /**\n * Sets/Gets whether the interaction is being done\n */\n this.inAction = false;\n /**\n * Sets/Gets the protect change\n */\n this.isProtectChange = false;\n /**\n * Sets/Gets the current element that is under mouse\n */\n this.currentElement = null;\n this.blocked = false;\n this.isTooltipVisible = false;\n /** @private */\n this.childTable = {};\n /**\n * Sets/Gets the previous object when mouse down\n */\n this.undoElement = { nodes: [], connectors: [] };\n this.undoParentElement = { nodes: [], connectors: [] };\n this.commandHandler = command;\n this.isProtectChange = protectChange;\n }\n ToolBase.prototype.startAction = function (currentElement) {\n this.currentElement = currentElement;\n this.inAction = true;\n };\n ToolBase.prototype.mouseDown = function (args) {\n this.currentElement = args.source;\n this.startPosition = this.currentPosition = this.prevPosition = args.position;\n this.isTooltipVisible = true;\n this.startAction(args.source);\n this.commandHandler.startTransaction(this.isProtectChange);\n };\n ToolBase.prototype.mouseMove = function (args) {\n this.currentPosition = args.position;\n //this.currentElement = currentElement;\n return !this.blocked;\n };\n ToolBase.prototype.mouseUp = function (args) {\n this.currentPosition = args.position;\n // this.currentElement = currentElement;\n this.isTooltipVisible = false;\n this.commandHandler.endTransaction(this.isProtectChange);\n //At the end\n this.endAction();\n };\n ToolBase.prototype.endAction = function () {\n if (!this.isTooltipVisible) {\n this.commandHandler.closeTooltip();\n }\n this.commandHandler = null;\n this.currentElement = null;\n this.currentPosition = null;\n this.inAction = false;\n this.blocked = false;\n };\n ToolBase.prototype.mouseWheel = function (args) {\n this.currentPosition = args.position;\n };\n ToolBase.prototype.mouseLeave = function (args) {\n this.mouseUp(args);\n };\n return ToolBase;\n}());\nexport { ToolBase };\n/**\n * Helps to select the objects\n */\nvar SelectTool = /** @class */ (function (_super) {\n __extends(SelectTool, _super);\n function SelectTool() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n SelectTool.prototype.mouseDown = function (args) {\n this.inAction = true;\n _super.prototype.mouseDown.call(this, args);\n };\n SelectTool.prototype.mouseMove = function (args) {\n _super.prototype.mouseMove.call(this, args);\n //draw selected region\n if (this.inAction && Point.equals(this.currentPosition, this.prevPosition) === false) {\n var rect = Rect.toBounds([this.prevPosition, this.currentPosition]);\n this.commandHandler.drawSelectionRectangle(rect.x, rect.y, rect.width, rect.height);\n }\n return !this.blocked;\n };\n SelectTool.prototype.mouseUp = function (args) {\n //rubber band selection\n if (Point.equals(this.currentPosition, this.prevPosition) === false && this.inAction) {\n var region = Rect.toBounds([this.prevPosition, this.currentPosition]);\n this.commandHandler.doRubberBandSelection(region);\n }\n else {\n //single selection\n var arrayNodes = this.commandHandler.getSelectedObject();\n if (!this.commandHandler.hasSelection() || !args.info || !args.info.ctrlKey) {\n this.commandHandler.clearSelection(args.source === null ? true : false);\n if (args.source) {\n this.commandHandler.selectObjects([args.source], false, arrayNodes);\n }\n }\n else {\n //handling multiple selection\n if (args && args.source) {\n if (!this.commandHandler.isSelected(args.source)) {\n this.commandHandler.selectObjects([args.source], true);\n }\n else {\n if (args.clickCount === 1) {\n this.commandHandler.unSelect(args.source);\n }\n }\n }\n }\n }\n this.inAction = false;\n _super.prototype.mouseUp.call(this, args);\n };\n SelectTool.prototype.mouseLeave = function (args) {\n if (this.inAction) {\n this.mouseUp(args);\n }\n };\n return SelectTool;\n}(ToolBase));\nexport { SelectTool };\n/**\n * Helps to edit the selected connectors\n */\nvar ConnectTool = /** @class */ (function (_super) {\n __extends(ConnectTool, _super);\n function ConnectTool(commandHandler, endPoint) {\n var _this = _super.call(this, commandHandler, true) || this;\n _this.endPoint = endPoint;\n return _this;\n }\n ConnectTool.prototype.mouseDown = function (args) {\n this.inAction = true;\n this.undoElement = undefined;\n if (!(this instanceof ConnectorDrawingTool)) {\n this.undoElement = cloneObject(args.source);\n }\n _super.prototype.mouseDown.call(this, args);\n var oldValue;\n var connectors;\n if (args.source && args.source.connectors) {\n oldValue = { x: this.prevPosition.x, y: this.prevPosition.y };\n connectors = args.source.connectors[0];\n }\n // Sets the selected segment \n if (this.endPoint === 'BezierSourceThumb' || this.endPoint === 'BezierTargetThumb') {\n for (var i = 0; i < connectors.segments.length; i++) {\n var segment = connectors.segments[i];\n var segmentpoint1 = !Point.isEmptyPoint(segment.point1) ? segment.point1 : segment.bezierPoint1;\n var segmentpoint2 = !Point.isEmptyPoint(segment.point2) ? segment.point2 : segment.bezierPoint2;\n if (contains(this.currentPosition, segmentpoint1, connectors.hitPadding) ||\n contains(this.currentPosition, segmentpoint2, connectors.hitPadding)) {\n this.selectedSegment = segment;\n }\n }\n }\n this.currentPosition = args.position;\n };\n ConnectTool.prototype.mouseUp = function (args) {\n this.commandHandler.updateSelector();\n this.commandHandler.removeSnap();\n if ((!(this instanceof ConnectorDrawingTool)) && ((this.endPoint === 'ConnectorSourceEnd' &&\n ((!Point.equals(args.source.connectors[0].sourcePoint, this.undoElement.connectors[0].sourcePoint) ||\n (args.source.connectors[0].sourceID !== this.undoElement.connectors[0].sourceID)))) ||\n (this.endPoint === 'ConnectorTargetEnd' &&\n ((!Point.equals(args.source.connectors[0].targetPoint, this.undoElement.connectors[0].targetPoint))\n || (args.source.connectors[0].targetID !== this.undoElement.connectors[0].targetID))))) {\n var oldValues = void 0;\n var connector = void 0;\n if (args.source && args.source.connectors) {\n oldValues = {\n x: this.prevPosition.x, y: this.prevPosition.y\n };\n connector = args.source.connectors[0];\n }\n var targetPortName = void 0;\n var targetNodeNode = void 0;\n if (args.target) {\n var target = this.commandHandler.findTarget(args.targetWrapper, args.target, this.endPoint === 'ConnectorSourceEnd');\n (target instanceof PointPort) ? targetPortName = target.id : targetNodeNode = target.id;\n }\n var arg = {\n connector: connector, state: 'Completed', targetNode: targetNodeNode,\n oldValue: oldValues, newValue: oldValues, cancel: false, targetPort: targetPortName\n };\n var trigger = this.endPoint === 'ConnectorSourceEnd' ? DiagramEvent.sourcePointChange : DiagramEvent.targetPointChange;\n this.commandHandler.triggerEvent(trigger, arg);\n this.commandHandler.removeTerminalSegment(connector, true);\n if (this.undoElement && args.source) {\n var obj = void 0;\n obj = cloneObject(args.source);\n var entry = {\n type: 'ConnectionChanged', redoObject: cloneObject(obj), undoObject: cloneObject(this.undoElement),\n category: 'Internal'\n };\n this.commandHandler.addHistoryEntry(entry);\n }\n }\n else if (!(this instanceof ConnectorDrawingTool) &&\n (this.endPoint === 'BezierTargetThumb' || this.endPoint === 'BezierSourceThumb')) {\n if (this.undoElement && args.source) {\n var obj = void 0;\n obj = cloneObject(args.source);\n var entry = {\n type: 'SegmentChanged', redoObject: obj, undoObject: this.undoElement, category: 'Internal'\n };\n this.commandHandler.addHistoryEntry(entry);\n }\n }\n _super.prototype.mouseUp.call(this, args);\n };\n ConnectTool.prototype.mouseMove = function (args) {\n _super.prototype.mouseMove.call(this, args);\n if ((!(this instanceof ConnectorDrawingTool)) && ((this.endPoint === 'ConnectorSourceEnd' &&\n Point.equals(args.source.connectors[0].sourcePoint, this.undoElement.connectors[0].sourcePoint)) ||\n (this.endPoint === 'ConnectorTargetEnd' &&\n Point.equals(args.source.connectors[0].targetPoint, this.undoElement.connectors[0].targetPoint)))) {\n var oldValue = void 0;\n var connectors = void 0;\n if (args.source && args.source.connectors) {\n oldValue = { x: this.prevPosition.x, y: this.prevPosition.y };\n connectors = args.source.connectors[0];\n }\n var targetPort = void 0;\n var targetNode = void 0;\n if (args.target) {\n targetNode = args.target.id;\n var target = this.commandHandler.findTarget(args.targetWrapper, args.target, this.endPoint === 'ConnectorSourceEnd');\n (target instanceof PointPort || target instanceof BpmnSubEvent) ? targetPort = target.id : targetNode = target.id;\n }\n var arg = {\n connector: connectors, state: 'Start', targetNode: targetNode,\n oldValue: oldValue, newValue: oldValue, cancel: false, targetPort: targetPort\n };\n var trigger = this.endPoint === 'ConnectorSourceEnd' ?\n DiagramEvent.sourcePointChange : DiagramEvent.targetPointChange;\n this.commandHandler.triggerEvent(trigger, arg);\n }\n this.currentPosition = args.position;\n if (this.currentPosition && this.prevPosition) {\n var diffX = this.currentPosition.x - this.prevPosition.x;\n var diffY = this.currentPosition.y - this.prevPosition.y;\n var newValue = void 0;\n var oldValue = void 0;\n this.currentPosition = this.commandHandler.snapConnectorEnd(this.currentPosition);\n var connector = void 0;\n if (args.source && args.source.connectors) {\n newValue = {\n x: this.currentPosition.x, y: this.currentPosition.y,\n };\n oldValue = {\n x: this.prevPosition.x, y: this.prevPosition.y\n };\n connector = args.source.connectors[0];\n }\n var targetPortId = void 0;\n var targetNodeId = void 0;\n if (args.target) {\n var target = this.commandHandler.findTarget(args.targetWrapper, args.target, this.endPoint === 'ConnectorSourceEnd');\n (target instanceof PointPort) ? targetPortId = target.id : targetNodeId = target.id;\n }\n var arg = {\n connector: connector, state: 'Progress', targetNode: targetNodeId,\n oldValue: oldValue, newValue: newValue, cancel: false, targetPort: targetPortId\n };\n if (!(this instanceof ConnectorDrawingTool)) {\n var trigger = this.endPoint === 'ConnectorSourceEnd' ?\n DiagramEvent.sourcePointChange : DiagramEvent.targetPointChange;\n this.commandHandler.triggerEvent(trigger, arg);\n }\n if (!arg.cancel && this.inAction && this.endPoint !== undefined && diffX !== 0 || diffY !== 0) {\n this.blocked = !this.commandHandler.dragConnectorEnds(this.endPoint, args.source, this.currentPosition, this.selectedSegment, args.target, targetPortId);\n this.commandHandler.updateSelector();\n if (args.target && ((this.endPoint === 'ConnectorSourceEnd' && canOutConnect(args.target))\n || (this.endPoint === 'ConnectorTargetEnd' && canInConnect(args.target)))) {\n if (this.commandHandler.canDisconnect(this.endPoint, args, targetPortId, targetNodeId)) {\n this.commandHandler.disConnect(args.source, this.endPoint);\n }\n this.commandHandler.connect(this.endPoint, args);\n }\n else if (this.endPoint.indexOf('Bezier') === -1) {\n this.commandHandler.disConnect(args.source, this.endPoint);\n this.commandHandler.updateSelector();\n }\n }\n if (this.commandHandler.canEnableDefaultTooltip()) {\n var content = this.getTooltipContent(args.position);\n this.commandHandler.showTooltip(args.source, args.position, content, 'ConnectTool', this.isTooltipVisible);\n this.isTooltipVisible = false;\n }\n }\n this.prevPosition = this.currentPosition;\n return !this.blocked;\n };\n ConnectTool.prototype.mouseLeave = function (args) {\n this.mouseUp(args);\n };\n ConnectTool.prototype.getTooltipContent = function (position) {\n return 'X:' + Math.round(position.x) + ' ' + 'Y:' + Math.round(position.y);\n };\n ConnectTool.prototype.endAction = function () {\n _super.prototype.endAction.call(this);\n this.prevPosition = null;\n this.endPoint = null;\n };\n return ConnectTool;\n}(ToolBase));\nexport { ConnectTool };\n/**\n * Drags the selected objects\n */\nvar MoveTool = /** @class */ (function (_super) {\n __extends(MoveTool, _super);\n function MoveTool(commandHandler, objType) {\n var _this = _super.call(this, commandHandler, true) || this;\n _this.currentTarget = null;\n _this.objectType = objType;\n return _this;\n }\n MoveTool.prototype.mouseDown = function (args) {\n if (args.source instanceof Node || args.source instanceof Connector) {\n this.commandHandler.selectObjects([args.source], args.info && args.info.ctrlKey);\n var selectedObject = { nodes: [], connectors: [] };\n if (args.source instanceof Node) {\n selectedObject.nodes.push(cloneObject(args.source));\n }\n else {\n selectedObject.connectors.push(cloneObject(args.source));\n }\n this.undoElement = cloneObject(selectedObject);\n }\n else {\n this.undoElement = cloneObject(args.source);\n }\n this.undoParentElement = this.commandHandler.getSubProcess(args.source);\n _super.prototype.mouseDown.call(this, args);\n this.initialOffset = { x: 0, y: 0 };\n };\n MoveTool.prototype.mouseUp = function (args) {\n var obj;\n var historyAdded = false;\n if (this.objectType !== 'Port') {\n if (args.source instanceof Node || args.source instanceof Connector) {\n var redoObject = { nodes: [], connectors: [] };\n if (args.source instanceof Node) {\n redoObject.nodes.push(cloneObject(args.source));\n }\n else {\n redoObject.connectors.push(cloneObject(args.source));\n }\n obj = cloneObject(redoObject);\n var wrapper = args.source.wrapper;\n obj.offsetX = wrapper.offsetX;\n obj.offsetY = wrapper.offsetY;\n }\n else {\n obj = cloneObject(args.source);\n }\n if (obj.offsetX !== this.undoElement.offsetX || obj.offsetY !== this.undoElement.offsetY) {\n var oldValues = void 0;\n var newValues = void 0;\n if (args.source) {\n newValues = { offsetX: args.source.wrapper.offsetX, offsetY: args.source.wrapper.offsetY };\n oldValues = { offsetX: args.source.wrapper.offsetX, offsetY: args.source.wrapper.offsetY };\n }\n var arg = {\n source: args.source, state: 'Completed', oldValue: oldValues, newValue: newValues,\n target: this.currentTarget, targetPosition: this.currentPosition, allowDrop: true, cancel: false\n };\n this.commandHandler.triggerEvent(DiagramEvent.positionChange, arg);\n this.commandHandler.startGroupAction();\n historyAdded = true;\n var entry = {\n type: 'PositionChanged',\n redoObject: cloneObject(obj), undoObject: cloneObject(this.undoElement), category: 'Internal'\n };\n if (obj.nodes[0] && obj.nodes[0].processId) {\n var entry_1 = {\n type: 'SizeChanged', category: 'Internal',\n undoObject: this.undoParentElement, redoObject: this.commandHandler.getSubProcess(args.source)\n };\n this.commandHandler.addHistoryEntry(entry_1);\n }\n this.commandHandler.addHistoryEntry(entry);\n }\n var snappedPoint = this.commandHandler.snapPoint(this.prevPosition, this.currentPosition, 0, 0);\n this.commandHandler.removeSnap();\n this.commandHandler.removeHighlighter();\n if (args.source && this.currentTarget && canAllowDrop(this.currentTarget) &&\n this.commandHandler.isDroppable(args.source, this.currentTarget)) {\n this.commandHandler.drop(this.currentElement, this.currentTarget, this.currentPosition);\n var arg = {\n element: args.source, target: this.currentTarget, position: this.currentPosition, cancel: false\n };\n this.commandHandler.triggerEvent(DiagramEvent.drop, arg);\n }\n this.commandHandler.updateSelector();\n if (historyAdded) {\n this.commandHandler.endGroupAction();\n }\n }\n _super.prototype.mouseUp.call(this, args);\n };\n MoveTool.prototype.mouseMove = function (args) {\n _super.prototype.mouseMove.call(this, args);\n var isSame = false;\n if (args.source instanceof Node || args.source instanceof Connector) {\n if (args.source instanceof Node) {\n if (args.source.offsetX === this.undoElement.nodes[0].offsetX &&\n args.source.offsetY === this.undoElement.nodes[0].offsetY) {\n isSame = true;\n }\n }\n else {\n if (Point.equals(args.source.sourcePoint, this.undoElement.connectors[0].sourcePoint) &&\n Point.equals(args.source.targetPoint, this.undoElement.connectors[0].targetPoint)) {\n isSame = true;\n }\n }\n }\n else {\n if (args.source.wrapper.offsetX === this.undoElement.wrapper.offsetX &&\n args.source.wrapper.offsetY === this.undoElement.wrapper.offsetY) {\n isSame = true;\n }\n }\n var oldValues;\n if (args.source) {\n oldValues = { offsetX: args.source.wrapper.offsetX, offsetY: args.source.wrapper.offsetY };\n }\n var arg = {\n source: args.source, state: 'Start', oldValue: oldValues, newValue: oldValues,\n target: args.target, targetPosition: args.position, allowDrop: true, cancel: false\n };\n if (isSame) {\n this.commandHandler.triggerEvent(DiagramEvent.positionChange, arg);\n }\n this.currentPosition = args.position;\n if (this.objectType !== 'Port') {\n var x = this.currentPosition.x - this.prevPosition.x;\n var y = this.currentPosition.y - this.prevPosition.y;\n var diffX = this.initialOffset.x + (this.currentPosition.x - this.prevPosition.x);\n var diffY = this.initialOffset.y + (this.currentPosition.y - this.prevPosition.y);\n this.commandHandler.dragOverElement(args, this.currentPosition);\n this.commandHandler.disConnect(args.source);\n this.commandHandler.removeSnap();\n var oldValues_1;\n var newValues = void 0;\n var snappedPoint = this.commandHandler.snapPoint(this.prevPosition, this.currentPosition, diffX, diffY);\n this.initialOffset.x = diffX - snappedPoint.x;\n this.initialOffset.y = diffY - snappedPoint.y;\n if (args.source) {\n oldValues_1 = { offsetX: args.source.wrapper.offsetX, offsetY: args.source.wrapper.offsetY };\n newValues = {\n offsetX: args.source.wrapper.offsetX + snappedPoint.x,\n offsetY: args.source.wrapper.offsetY + snappedPoint.y\n };\n }\n if (this.currentTarget && args.target !== this.currentTarget) {\n this.commandHandler.removeChildFromBPmn(args.source, args.target, this.currentTarget);\n }\n this.currentTarget = args.target;\n var arg_1 = {\n source: args.source, state: 'Progress', oldValue: oldValues_1, newValue: newValues,\n target: args.target, targetPosition: args.position, allowDrop: true, cancel: false\n };\n this.commandHandler.triggerEvent(DiagramEvent.positionChange, arg_1);\n if (!arg_1.cancel) {\n this.blocked = !this.commandHandler.dragSelectedObjects(snappedPoint.x, snappedPoint.y);\n var blocked = !(this.commandHandler.mouseOver(this.currentElement, this.currentTarget, this.currentPosition));\n this.blocked = this.blocked || blocked;\n }\n if (this.currentTarget && (args.source !== this.currentTarget) &&\n this.commandHandler.isDroppable(args.source, this.currentTarget)) {\n this.commandHandler.drawHighlighter(this.currentTarget);\n }\n else {\n this.commandHandler.removeHighlighter();\n }\n if (this.commandHandler.canEnableDefaultTooltip()) {\n var content = this.getTooltipContent(args.source);\n this.commandHandler.showTooltip(args.source, args.position, content, 'MoveTool', this.isTooltipVisible);\n this.isTooltipVisible = false;\n }\n }\n else {\n this.commandHandler.portDrag(args.source, args.sourceWrapper, args.position.x - this.prevPosition.x, args.position.y - this.prevPosition.y);\n }\n this.prevPosition = this.currentPosition;\n return !this.blocked;\n };\n MoveTool.prototype.getTooltipContent = function (node) {\n return 'X:' + Math.round(node.wrapper.bounds.x) + ' ' + 'Y:' + Math.round(node.wrapper.bounds.y);\n };\n MoveTool.prototype.mouseLeave = function (args) {\n this.mouseUp(args);\n };\n MoveTool.prototype.endAction = function () {\n _super.prototype.endAction.call(this);\n this.currentTarget = null;\n this.prevPosition = null;\n };\n return MoveTool;\n}(ToolBase));\nexport { MoveTool };\n/**\n * Rotates the selected objects\n */\nvar RotateTool = /** @class */ (function (_super) {\n __extends(RotateTool, _super);\n function RotateTool(commandHandler) {\n return _super.call(this, commandHandler, true) || this;\n }\n RotateTool.prototype.mouseDown = function (args) {\n this.undoElement = cloneObject(args.source);\n if (this.undoElement.nodes[0] && this.undoElement.nodes[0].children) {\n var objects = [];\n var nodes = this.commandHandler.getAllDescendants(this.undoElement.nodes[0], objects);\n for (var i = 0; i < nodes.length; i++) {\n var node = this.commandHandler.cloneChild(nodes[i].id);\n this.childTable[nodes[i].id] = cloneObject(node);\n }\n }\n _super.prototype.mouseDown.call(this, args);\n };\n RotateTool.prototype.mouseUp = function (args) {\n if (this.undoElement.rotateAngle !== args.source.wrapper.rotateAngle) {\n var oldValue = { rotateAngle: args.source.wrapper.rotateAngle };\n var arg = {\n source: args.source, state: 'Completed', oldValue: oldValue,\n newValue: oldValue, cancel: false\n };\n this.commandHandler.triggerEvent(DiagramEvent.rotateChange, arg);\n var obj = void 0;\n obj = cloneObject(args.source);\n var entry = {\n type: 'RotationChanged', redoObject: cloneObject(obj), undoObject: cloneObject(this.undoElement), category: 'Internal',\n childTable: this.childTable\n };\n this.commandHandler.addHistoryEntry(entry);\n this.commandHandler.updateSelector();\n }\n _super.prototype.mouseUp.call(this, args);\n };\n RotateTool.prototype.mouseMove = function (args) {\n _super.prototype.mouseMove.call(this, args);\n if (this.undoElement.rotateAngle === args.source.wrapper.rotateAngle) {\n var oldValue_1 = { rotateAngle: args.source.wrapper.rotateAngle };\n var arg_2 = {\n source: args.source, state: 'Start', oldValue: oldValue_1, newValue: oldValue_1, cancel: false\n };\n this.commandHandler.triggerEvent(DiagramEvent.rotateChange, arg_2);\n }\n this.currentPosition = args.position;\n var refPoint = { x: this.currentElement.wrapper.offsetX, y: this.currentElement.wrapper.offsetY };\n var angle = Point.findAngle(refPoint, this.currentPosition) + 90;\n var snapAngle = this.commandHandler.snapAngle(angle);\n angle = snapAngle !== 0 ? snapAngle : angle;\n angle = (angle + 360) % 360;\n var oldValue = { rotateAngle: args.source.wrapper.rotateAngle };\n var newValue = { rotateAngle: angle };\n var arg = {\n source: args.source, state: 'Progress', oldValue: oldValue,\n newValue: newValue, cancel: false\n };\n this.commandHandler.triggerEvent(DiagramEvent.rotateChange, arg);\n if (!arg.cancel) {\n this.blocked = !(this.commandHandler.rotateSelectedItems(angle - this.currentElement.wrapper.rotateAngle));\n }\n if (this.commandHandler.canEnableDefaultTooltip()) {\n var content = this.getTooltipContent(args.source);\n this.commandHandler.showTooltip(args.source, args.position, content, 'RotateTool', this.isTooltipVisible);\n this.isTooltipVisible = false;\n }\n return !this.blocked;\n };\n RotateTool.prototype.getTooltipContent = function (node) {\n return Math.round((node.rotateAngle % 360)).toString() + '\\xB0';\n };\n RotateTool.prototype.mouseLeave = function (args) {\n this.mouseUp(args);\n };\n RotateTool.prototype.endAction = function () {\n _super.prototype.endAction.call(this);\n };\n return RotateTool;\n}(ToolBase));\nexport { RotateTool };\n/**\n * Scales the selected objects\n */\nvar ResizeTool = /** @class */ (function (_super) {\n __extends(ResizeTool, _super);\n function ResizeTool(commandHandler, corner) {\n var _this = _super.call(this, commandHandler, true) || this;\n _this.initialBounds = new Rect();\n _this.corner = corner;\n return _this;\n }\n ResizeTool.prototype.mouseDown = function (args) {\n this.undoElement = cloneObject(args.source);\n this.undoParentElement = this.commandHandler.getSubProcess(args.source);\n _super.prototype.mouseDown.call(this, args);\n if (this.undoElement.nodes[0] && this.undoElement.nodes[0].children) {\n var elements = [];\n var nodes = this.commandHandler.getAllDescendants(this.undoElement.nodes[0], elements);\n for (var i = 0; i < nodes.length; i++) {\n var node = this.commandHandler.cloneChild(nodes[i].id);\n this.childTable[nodes[i].id] = cloneObject(node);\n }\n }\n _super.prototype.mouseDown.call(this, args);\n this.initialBounds.x = args.source.wrapper.offsetX;\n this.initialBounds.y = args.source.wrapper.offsetY;\n this.initialBounds.height = args.source.wrapper.actualSize.height;\n this.initialBounds.width = args.source.wrapper.actualSize.width;\n };\n ResizeTool.prototype.mouseUp = function (args) {\n this.commandHandler.removeSnap();\n if (this.undoElement.offsetX !== args.source.wrapper.offsetX || this.undoElement.offsetY !== args.source.wrapper.offsetY) {\n this.blocked = this.updateSize(args.source, this.currentPosition, this.prevPosition, this.corner);\n var oldValue = {\n offsetX: args.source.wrapper.offsetX, offsetY: args.source.wrapper.offsetY,\n width: args.source.wrapper.actualSize.width, height: args.source.wrapper.actualSize.height\n };\n var arg = {\n source: args.source, state: 'Completed',\n oldValue: oldValue, newValue: oldValue, cancel: false\n };\n this.commandHandler.triggerEvent(DiagramEvent.sizeChange, arg);\n var obj = cloneObject(args.source);\n var entry = {\n type: 'SizeChanged', redoObject: cloneObject(obj), undoObject: cloneObject(this.undoElement), category: 'Internal',\n childTable: this.childTable\n };\n this.commandHandler.startGroupAction();\n this.commandHandler.addHistoryEntry(entry);\n if (obj.nodes[0] && obj.nodes[0].processId) {\n var entry_2 = {\n type: 'SizeChanged', redoObject: this.commandHandler.getSubProcess(args.source),\n undoObject: this.undoParentElement, category: 'Internal'\n };\n this.commandHandler.addHistoryEntry(entry_2);\n }\n this.commandHandler.endGroupAction();\n }\n _super.prototype.mouseUp.call(this, args);\n return !this.blocked;\n };\n ResizeTool.prototype.mouseMove = function (args) {\n _super.prototype.mouseMove.call(this, args);\n if (this.undoElement.offsetX === args.source.wrapper.offsetX && this.undoElement.offsetY === args.source.wrapper.offsetY) {\n var oldValue = {\n offsetX: args.source.wrapper.offsetX, offsetY: args.source.wrapper.offsetY,\n width: args.source.wrapper.actualSize.width, height: args.source.wrapper.actualSize.height\n };\n var arg = {\n source: args.source, state: 'Start', oldValue: oldValue, newValue: this.currentElement, cancel: false\n };\n this.commandHandler.triggerEvent(DiagramEvent.sizeChange, arg);\n }\n this.currentPosition = args.position;\n var x = this.currentPosition.x - this.startPosition.x;\n var y = this.currentPosition.y - this.startPosition.y;\n var changes = { x: x, y: y };\n changes = rotatePoint(-this.currentElement.wrapper.rotateAngle, undefined, undefined, changes);\n var sx = (this.currentElement.wrapper.actualSize.width + changes.x) / this.currentElement.wrapper.actualSize.width;\n var sy = (this.currentElement.wrapper.actualSize.height + changes.y) / this.currentElement.wrapper.actualSize.height;\n changes = this.getChanges(changes);\n this.commandHandler.removeSnap();\n this.blocked = !(this.updateSize(args.source, this.startPosition, this.currentPosition, this.corner));\n if (this.commandHandler.canEnableDefaultTooltip()) {\n var content = this.getTooltipContent(args.source);\n this.commandHandler.showTooltip(args.source, args.position, content, 'ResizeTool', this.isTooltipVisible);\n this.isTooltipVisible = false;\n }\n this.prevPosition = this.currentPosition;\n return !this.blocked;\n };\n ResizeTool.prototype.mouseLeave = function (args) {\n this.mouseUp(args);\n };\n ResizeTool.prototype.getTooltipContent = function (node) {\n return 'W:' + Math.round(node.wrapper.bounds.width) + ' ' + 'H:' + Math.round(node.wrapper.bounds.height);\n };\n ResizeTool.prototype.getPivot = function () {\n switch (this.corner) {\n case 'ResizeWest':\n return { x: 1, y: 0.5 };\n case 'ResizeEast':\n return { x: 0, y: 0.5 };\n case 'ResizeNorth':\n return { x: 0.5, y: 1 };\n case 'ResizeSouth':\n return { x: 0.5, y: 0 };\n case 'ResizeNorthEast':\n return { x: 0, y: 1 };\n case 'ResizeNorthWest':\n return { x: 1, y: 1 };\n case 'ResizeSouthEast':\n return { x: 0, y: 0 };\n case 'ResizeSouthWest':\n return { x: 1, y: 0 };\n }\n return { x: 0.5, y: 0.5 };\n };\n ResizeTool.prototype.getChanges = function (change) {\n switch (this.corner) {\n case 'ResizeEast':\n return { x: change.x, y: 0 };\n case 'ResizeSouthEast':\n return change;\n case 'ResizeSouth':\n return { x: 0, y: change.y };\n case 'ResizeNorth':\n return { x: 0, y: -change.y };\n case 'ResizeNorthEast':\n return { x: change.x, y: -change.y };\n case 'ResizeNorthWest':\n return { x: -change.x, y: -change.y };\n case 'ResizeWest':\n return { x: -change.x, y: 0 };\n case 'ResizeSouthWest':\n return { x: -change.x, y: change.y };\n }\n return change;\n };\n /**\n * Updates the size with delta width and delta height using scaling.\n */\n ResizeTool.prototype.updateSize = function (shape, startPoint, endPoint, corner) {\n var horizontalsnap = { snapped: false, offset: 0, left: false, right: false };\n var verticalsnap = { snapped: false, offset: 0, top: false, bottom: false };\n var difx = this.currentPosition.x - this.startPosition.x;\n var dify = this.currentPosition.y - this.startPosition.y;\n var snapEnabled = this.commandHandler.snappingModule\n && this.commandHandler.snappingModule.canSnap();\n var snapLine = snapEnabled ? this.commandHandler.snappingModule.getLayer() : null;\n var matrix;\n matrix = identityMatrix();\n rotateMatrix(matrix, -shape.rotateAngle, 0, 0);\n var x = shape.offsetX;\n var y = shape.offsetY;\n var w = shape.width;\n var h = shape.height;\n x = x - w * shape.pivot.x;\n y = y - h * shape.pivot.y;\n var deltaWidth = 0;\n var deltaHeight = 0;\n var initialBounds = this.initialBounds;\n var diff;\n switch (corner) {\n case 'ResizeWest':\n diff = transformPointByMatrix(matrix, ({ x: difx, y: dify }));\n difx = diff.x;\n dify = diff.y;\n deltaHeight = 1;\n difx = snapEnabled ? this.commandHandler.snappingModule.snapLeft(horizontalsnap, verticalsnap, snapLine, difx, dify, shape, endPoint === startPoint, this.initialBounds) : difx;\n dify = 0;\n deltaWidth = (initialBounds.width - difx) / shape.width;\n break;\n case 'ResizeEast':\n diff = transformPointByMatrix(matrix, ({ x: difx, y: dify }));\n difx = diff.x;\n dify = diff.y;\n difx = snapEnabled ? this.commandHandler.snappingModule.snapRight(horizontalsnap, verticalsnap, snapLine, difx, dify, shape, endPoint === startPoint, this.initialBounds) :\n difx;\n dify = 0;\n deltaWidth = (initialBounds.width + difx) / shape.width;\n deltaHeight = 1;\n break;\n case 'ResizeNorth':\n deltaWidth = 1;\n diff = transformPointByMatrix(matrix, ({ x: difx, y: dify }));\n difx = diff.x;\n dify = diff.y;\n dify = snapEnabled ? this.commandHandler.snappingModule.snapTop(horizontalsnap, verticalsnap, snapLine, difx, dify, shape, endPoint === startPoint, this.initialBounds) :\n dify;\n deltaHeight = (initialBounds.height - dify) / shape.height;\n break;\n case 'ResizeSouth':\n deltaWidth = 1;\n diff = transformPointByMatrix(matrix, ({ x: difx, y: dify }));\n difx = diff.x;\n dify = diff.y;\n dify = snapEnabled ? this.commandHandler.snappingModule.snapBottom(horizontalsnap, verticalsnap, snapLine, diff.x, diff.y, shape, endPoint === startPoint, this.initialBounds) :\n dify;\n deltaHeight = (initialBounds.height + dify) / shape.height;\n break;\n case 'ResizeNorthEast':\n diff = transformPointByMatrix(matrix, ({ x: difx, y: dify }));\n difx = diff.x;\n dify = diff.y;\n difx = snapEnabled ? this.commandHandler.snappingModule.snapRight(horizontalsnap, verticalsnap, snapLine, difx, dify, shape, endPoint === startPoint, this.initialBounds) :\n difx;\n dify = snapEnabled ? this.commandHandler.snappingModule.snapTop(horizontalsnap, verticalsnap, snapLine, difx, dify, shape, endPoint === startPoint, this.initialBounds) :\n dify;\n deltaWidth = (initialBounds.width + difx) / shape.width;\n deltaHeight = (initialBounds.height - dify) / shape.height;\n break;\n case 'ResizeNorthWest':\n diff = transformPointByMatrix(matrix, ({ x: difx, y: dify }));\n difx = diff.x;\n dify = diff.y;\n dify = snapEnabled ? this.commandHandler.snappingModule.snapTop(horizontalsnap, verticalsnap, snapLine, difx, dify, shape, endPoint === startPoint, this.initialBounds) :\n dify;\n difx = snapEnabled ? this.commandHandler.snappingModule.snapLeft(horizontalsnap, verticalsnap, snapLine, difx, dify, shape, endPoint === startPoint, this.initialBounds) :\n difx;\n deltaWidth = (initialBounds.width - difx) / shape.width;\n deltaHeight = (initialBounds.height - dify) / shape.height;\n break;\n case 'ResizeSouthEast':\n diff = transformPointByMatrix(matrix, ({ x: difx, y: dify }));\n difx = diff.x;\n dify = diff.y;\n dify = snapEnabled ? this.commandHandler.snappingModule.snapBottom(horizontalsnap, verticalsnap, snapLine, difx, dify, shape, endPoint === startPoint, this.initialBounds) :\n dify;\n difx = snapEnabled ? this.commandHandler.snappingModule.snapRight(horizontalsnap, verticalsnap, snapLine, difx, dify, shape, endPoint === startPoint, this.initialBounds) :\n difx;\n deltaHeight = (initialBounds.height + dify) / shape.height;\n deltaWidth = (initialBounds.width + difx) / shape.width;\n break;\n case 'ResizeSouthWest':\n diff = transformPointByMatrix(matrix, ({ x: difx, y: dify }));\n difx = diff.x;\n dify = diff.y;\n dify = snapEnabled ? this.commandHandler.snappingModule.snapBottom(horizontalsnap, verticalsnap, snapLine, difx, dify, shape, endPoint === startPoint, initialBounds) : dify;\n difx = snapEnabled ? this.commandHandler.snappingModule.snapLeft(horizontalsnap, verticalsnap, snapLine, difx, dify, shape, endPoint === startPoint, initialBounds) : difx;\n deltaWidth = (initialBounds.width - difx) / shape.width;\n deltaHeight = (initialBounds.height + dify) / shape.height;\n break;\n }\n return this.scaleObjects(matrix, deltaWidth, deltaHeight, corner, startPoint, endPoint, shape);\n };\n /**\n * Aspect ratio used to resize the width or height based on resizing the height or width\n */\n ResizeTool.prototype.scaleObjects = function (matrix, deltaWidth, deltaHeight, corner, startPoint, endPoint, source) {\n if (source.nodes.length === 1 && source.nodes[0].constraints & NodeConstraints.AspectRatio) {\n if (corner === 'ResizeWest' || corner === 'ResizeEast' || corner === 'ResizeNorth' || corner === 'ResizeSouth') {\n if (!(deltaHeight === 1 && deltaWidth === 1)) {\n deltaHeight = deltaWidth = Math.max(deltaHeight === 1 ? 0 : deltaHeight, deltaWidth === 1 ? 0 : deltaWidth);\n }\n }\n else if (startPoint !== endPoint) {\n deltaHeight = deltaWidth = Math.max(deltaHeight, deltaWidth);\n }\n else {\n deltaHeight = deltaWidth = 0;\n }\n }\n var oldValue = {\n offsetX: source.offsetX, offsetY: source.offsetY,\n width: source.width, height: source.height\n };\n this.blocked = this.commandHandler.scaleSelectedItems(deltaWidth, deltaHeight, this.getPivot());\n var newValue = {\n offsetX: source.offsetX, offsetY: source.offsetY,\n width: source.width, height: source.height\n };\n var arg = { source: source, state: 'Progress', oldValue: oldValue, newValue: newValue, cancel: false };\n this.commandHandler.triggerEvent(DiagramEvent.sizeChange, arg);\n if (arg.cancel) {\n this.commandHandler.scaleSelectedItems(1 / deltaWidth, 1 / deltaHeight, this.getPivot());\n }\n return this.blocked;\n };\n return ResizeTool;\n}(ToolBase));\nexport { ResizeTool };\n/**\n * Draws a node that is defined by the user\n */\nvar NodeDrawingTool = /** @class */ (function (_super) {\n __extends(NodeDrawingTool, _super);\n function NodeDrawingTool(commandHandler, sourceObject) {\n var _this = _super.call(this, commandHandler, true) || this;\n _this.sourceObject = sourceObject;\n return _this;\n }\n NodeDrawingTool.prototype.mouseDown = function (args) {\n _super.prototype.mouseDown.call(this, args);\n this.inAction = true;\n };\n NodeDrawingTool.prototype.mouseMove = function (args) {\n _super.prototype.mouseMove.call(this, args);\n var checkBoundaryConstraints;\n var node = {\n offsetX: this.currentPosition.x, width: 3, height: 3,\n offsetY: this.currentPosition.y\n };\n if (!this.drawingObject) {\n this.drawingObject = this.commandHandler.drawObject(node);\n }\n if (this.inAction && Point.equals(this.currentPosition, this.prevPosition) === false) {\n var rect = Rect.toBounds([this.prevPosition, this.currentPosition]);\n checkBoundaryConstraints = this.commandHandler.checkBoundaryConstraints(undefined, undefined, rect);\n if (checkBoundaryConstraints) {\n this.commandHandler.updateNodeDimension(this.drawingObject, rect);\n }\n }\n return checkBoundaryConstraints;\n };\n NodeDrawingTool.prototype.mouseUp = function (args) {\n var checkBoundaryConstraints;\n var rect = Rect.toBounds([this.prevPosition, this.currentPosition]);\n checkBoundaryConstraints = this.commandHandler.checkBoundaryConstraints(undefined, undefined, rect);\n if (this.drawingObject && this.drawingObject instanceof Node) {\n this.commandHandler.addObjectToDiagram(this.drawingObject);\n this.drawingObject = null;\n }\n _super.prototype.mouseUp.call(this, args);\n this.inAction = false;\n };\n NodeDrawingTool.prototype.endAction = function () {\n _super.prototype.endAction.call(this);\n };\n NodeDrawingTool.prototype.mouseLeave = function (args) {\n if (this.inAction) {\n this.mouseUp(args);\n }\n };\n return NodeDrawingTool;\n}(ToolBase));\nexport { NodeDrawingTool };\n/**\n * Draws a connector that is defined by the user\n */\nvar ConnectorDrawingTool = /** @class */ (function (_super) {\n __extends(ConnectorDrawingTool, _super);\n function ConnectorDrawingTool(commandHandler, endPoint, sourceObject) {\n var _this = _super.call(this, commandHandler, endPoint) || this;\n _this.sourceObject = sourceObject;\n return _this;\n }\n ConnectorDrawingTool.prototype.mouseDown = function (args) {\n _super.prototype.mouseDown.call(this, args);\n this.inAction = true;\n };\n ConnectorDrawingTool.prototype.mouseMove = function (args) {\n if (this.inAction) {\n var connector = {\n sourcePoint: this.currentPosition, targetPoint: this.currentPosition,\n };\n if (!this.drawingObject) {\n this.drawingObject = this.commandHandler.drawObject(connector);\n }\n args.source = this.drawingObject;\n if (args.target) {\n this.commandHandler.connect(this.endPoint, args);\n }\n this.endPoint = 'ConnectorTargetEnd';\n }\n if (!this.inAction) {\n this.commandHandler.updateSelector();\n if (args.source && args.sourceWrapper) {\n this.commandHandler.renderHighlighter(args, true);\n }\n }\n _super.prototype.mouseMove.call(this, args);\n return !this.blocked;\n };\n ConnectorDrawingTool.prototype.mouseUp = function (args) {\n if (this.drawingObject && this.drawingObject instanceof Connector) {\n this.commandHandler.addObjectToDiagram(this.drawingObject);\n this.drawingObject = null;\n }\n this.inAction = false;\n _super.prototype.mouseUp.call(this, args);\n };\n ConnectorDrawingTool.prototype.endAction = function () {\n _super.prototype.endAction.call(this);\n };\n ConnectorDrawingTool.prototype.mouseLeave = function (args) {\n if (this.inAction) {\n this.mouseUp(args);\n }\n };\n return ConnectorDrawingTool;\n}(ConnectTool));\nexport { ConnectorDrawingTool };\nvar TextDrawingTool = /** @class */ (function (_super) {\n __extends(TextDrawingTool, _super);\n function TextDrawingTool(commandHandler) {\n return _super.call(this, commandHandler, true) || this;\n }\n TextDrawingTool.prototype.mouseDown = function (args) {\n _super.prototype.mouseDown.call(this, args);\n this.commandHandler.clearSelection();\n var node = {\n shape: { type: 'Text' },\n offsetX: this.currentPosition.x, width: 50, height: 20,\n offsetY: this.currentPosition.y\n };\n if (!args.source) {\n this.drawingNode = this.commandHandler.drawObject(node);\n }\n };\n TextDrawingTool.prototype.mouseMove = function (args) {\n _super.prototype.mouseMove.call(this, args);\n if (!this.drawingNode) {\n var node = {\n shape: { type: 'Text' }, offsetX: this.currentPosition.x, width: 30, height: 30,\n style: { strokeDashArray: '2 2', fill: 'transparent' }, offsetY: this.currentPosition.y\n };\n this.drawingNode = this.commandHandler.drawObject(node);\n }\n else {\n this.drawingNode.style.strokeColor = 'black';\n this.drawingNode.style.strokeDashArray = '2 2';\n this.drawingNode.style.fill = 'transparent';\n }\n if (this.inAction && Point.equals(this.currentPosition, this.prevPosition) === false) {\n var rect = Rect.toBounds([this.prevPosition, this.currentPosition]);\n this.commandHandler.updateNodeDimension(this.drawingNode, rect);\n }\n return !this.blocked;\n };\n TextDrawingTool.prototype.mouseUp = function (args) {\n if (this.drawingNode) {\n this.drawingNode.style.strokeColor = 'none';\n this.drawingNode.style.fill = 'none';\n }\n else {\n this.drawingNode = args.source;\n }\n if (this.drawingNode && (this.drawingNode instanceof Node || this.drawingNode instanceof Connector)) {\n this.commandHandler.addText(this.drawingNode, this.currentPosition);\n }\n _super.prototype.mouseUp.call(this, args);\n this.inAction = false;\n };\n TextDrawingTool.prototype.endAction = function () {\n _super.prototype.endAction.call(this);\n };\n return TextDrawingTool;\n}(ToolBase));\nexport { TextDrawingTool };\n/**\n * Pans the diagram control on drag\n */\nvar ZoomPanTool = /** @class */ (function (_super) {\n __extends(ZoomPanTool, _super);\n function ZoomPanTool(commandHandler, zoom) {\n var _this = _super.call(this, commandHandler) || this;\n _this.zooming = zoom;\n return _this;\n }\n ZoomPanTool.prototype.mouseDown = function (args) {\n _super.prototype.mouseDown.call(this, args);\n this.inAction = true;\n };\n ZoomPanTool.prototype.mouseMove = function (args) {\n _super.prototype.mouseMove.call(this, args);\n if (this.inAction) {\n if (!this.zooming && Point.equals(this.currentPosition, this.prevPosition) === false) {\n var difX = this.currentPosition.x - this.prevPosition.x;\n var difY = this.currentPosition.y - this.prevPosition.y;\n this.commandHandler.scroll(difX, difY, this.currentPosition);\n }\n else if (args.moveTouches.length >= 2) {\n var startTouch0 = args.startTouches[0];\n var startTouch1 = args.startTouches[1];\n var moveTouch0 = args.moveTouches[0];\n var moveTouch1 = args.moveTouches[1];\n var scale = this.getDistance(moveTouch0, moveTouch1) / this.getDistance(startTouch0, startTouch1);\n var focusPoint = args.position;\n this.commandHandler.zoom(scale, 0, 0, focusPoint);\n this.updateTouch(startTouch0, moveTouch0);\n this.updateTouch(startTouch1, moveTouch1);\n }\n }\n return !this.blocked;\n };\n ZoomPanTool.prototype.mouseUp = function (args) {\n _super.prototype.mouseUp.call(this, args);\n this.inAction = false;\n };\n ZoomPanTool.prototype.endAction = function () {\n _super.prototype.endAction.call(this);\n };\n ZoomPanTool.prototype.getDistance = function (touch1, touch2) {\n var x = touch2.pageX - touch1.pageX;\n var y = touch2.pageY - touch1.pageY;\n return Math.sqrt((x * x) + (y * y));\n };\n ZoomPanTool.prototype.updateTouch = function (startTouch, moveTouch) {\n startTouch.pageX = moveTouch.pageX;\n startTouch.pageY = moveTouch.pageY;\n };\n return ZoomPanTool;\n}(ToolBase));\nexport { ZoomPanTool };\n/**\n * Animate the layout during expand and collapse\n */\nvar ExpandTool = /** @class */ (function (_super) {\n __extends(ExpandTool, _super);\n function ExpandTool(commandHandler) {\n return _super.call(this, commandHandler, true) || this;\n }\n ExpandTool.prototype.mouseUp = function (args) {\n this.commandHandler.initExpand(args);\n _super.prototype.mouseUp.call(this, args);\n };\n return ExpandTool;\n}(ToolBase));\nexport { ExpandTool };\n/**\n * Opens the annotation hypeLink at mouse up\n */\nvar LabelTool = /** @class */ (function (_super) {\n __extends(LabelTool, _super);\n function LabelTool(commandHandler) {\n return _super.call(this, commandHandler, true) || this;\n }\n LabelTool.prototype.mouseUp = function (args) {\n var win = window.open(args.sourceWrapper.hyperlink.link, '_blank');\n win.focus();\n _super.prototype.mouseUp.call(this, args);\n };\n return LabelTool;\n}(ToolBase));\nexport { LabelTool };\n/**\n * Draws a Polygon shape node dynamically using polygon Tool\n */\nvar PolygonDrawingTool = /** @class */ (function (_super) {\n __extends(PolygonDrawingTool, _super);\n function PolygonDrawingTool(commandHandler) {\n return _super.call(this, commandHandler, true) || this;\n }\n PolygonDrawingTool.prototype.mouseDown = function (args) {\n _super.prototype.mouseDown.call(this, args);\n this.inAction = true;\n if (!this.drawingObject) {\n this.startPoint = { x: this.startPosition.x, y: this.startPosition.y };\n var node = {\n offsetX: this.currentPosition.x,\n offsetY: this.currentPosition.y,\n width: 5, height: 5,\n style: { strokeColor: 'black', strokeWidth: 1 },\n shape: {\n type: 'Basic',\n shape: 'Polygon',\n points: [{ x: this.startPoint.x, y: this.startPoint.y }, { x: this.currentPosition.x, y: this.currentPosition.y }]\n }\n };\n this.drawingObject = this.commandHandler.drawObject(node);\n }\n else {\n var pt = void 0;\n var obj = this.drawingObject.shape;\n pt = obj.points[obj.points.length - 1];\n pt = { x: pt.x, y: pt.y };\n this.drawingObject.shape.points.push(pt);\n }\n };\n PolygonDrawingTool.prototype.mouseMove = function (args) {\n _super.prototype.mouseMove.call(this, args);\n if (this.inAction) {\n var obj = this.drawingObject.shape;\n if (this.drawingObject && this.currentPosition) {\n obj.points[obj.points.length - 1].x = this.currentPosition.x;\n obj.points[obj.points.length - 1].y = this.currentPosition.y;\n this.drawingObject.wrapper.children[0].data = getPolygonPath(this.drawingObject.shape.points);\n if (this.inAction && Point.equals(this.currentPosition, this.prevPosition) === false) {\n var region = Rect.toBounds(this.drawingObject.shape.points);\n this.commandHandler.updateNodeDimension(this.drawingObject, region);\n }\n }\n }\n return true;\n };\n PolygonDrawingTool.prototype.mouseUp = function (args, dblClickArgs) {\n _super.prototype.mouseMove.call(this, args);\n if (this.inAction) {\n this.inAction = false;\n if (this.drawingObject) {\n this.commandHandler.addObjectToDiagram(this.drawingObject);\n }\n }\n this.endAction();\n };\n PolygonDrawingTool.prototype.mouseWheel = function (args) {\n _super.prototype.mouseWheel.call(this, args);\n this.mouseMove(args);\n };\n PolygonDrawingTool.prototype.endAction = function () {\n this.inAction = false;\n this.drawingObject = null;\n };\n return PolygonDrawingTool;\n}(ToolBase));\nexport { PolygonDrawingTool };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Point } from '../primitives/point';\nimport { Rect } from '../primitives/rect';\nimport { intersect3 } from '../utility/diagram-util';\nimport { cloneObject } from '../utility/base-util';\nimport { contains } from './actions';\nimport { getOppositeDirection } from '../utility/connector';\nimport { StraightSegment, OrthogonalSegment } from '../objects/connector';\nimport { ToolBase } from './tool';\n/**\n * Multiple segments editing for Connector\n */\nvar ConnectorEditing = /** @class */ (function (_super) {\n __extends(ConnectorEditing, _super);\n function ConnectorEditing(commandHandler, endPoint) {\n var _this = _super.call(this, commandHandler, true) || this;\n _this.endPoint = endPoint;\n return _this;\n }\n ConnectorEditing.prototype.mouseDown = function (args) {\n this.inAction = true;\n this.undoElement = cloneObject(args.source);\n _super.prototype.mouseDown.call(this, args);\n var connectors;\n if (args.source && args.source.connectors) {\n connectors = args.source.connectors[0];\n }\n // Sets the selected segment \n for (var i = 0; i < connectors.segments.length; i++) {\n var segment = connectors.segments[i];\n if (this.endPoint === 'OrthoThumb') {\n for (var j = 0; j < segment.points.length - 1; j++) {\n var segPoint = { x: 0, y: 0 };\n segPoint.x = ((segment.points[j].x + segment.points[j + 1].x) / 2);\n segPoint.y = ((segment.points[j].y + segment.points[j + 1].y) / 2);\n if (contains(this.currentPosition, segPoint, 30)) {\n this.selectedSegment = segment;\n this.segmentIndex = j;\n }\n }\n }\n else {\n if (contains(this.currentPosition, segment.point, 10)) {\n this.selectedSegment = segment;\n }\n }\n }\n };\n ConnectorEditing.prototype.mouseMove = function (args) {\n _super.prototype.mouseMove.call(this, args);\n this.currentPosition = args.position;\n if (this.currentPosition && this.prevPosition) {\n var diffY = this.currentPosition.y - this.prevPosition.y;\n var diffX = this.currentPosition.x - this.prevPosition.x;\n this.currentPosition = this.commandHandler.snapConnectorEnd(this.currentPosition);\n var connector = void 0;\n if (args.source && args.source.connectors) {\n connector = args.source.connectors[0];\n }\n if (this.inAction && this.endPoint !== undefined && diffX !== 0 || diffY !== 0) {\n if (this.endPoint === 'OrthoThumb') {\n this.blocked = !this.dragOrthogonalSegment(connector, this.selectedSegment, this.currentPosition, this.segmentIndex);\n }\n else {\n var tx = this.currentPosition.x - this.selectedSegment.point.x;\n var ty = this.currentPosition.y - this.selectedSegment.point.y;\n var index = connector.segments.indexOf(this.selectedSegment);\n this.blocked = !this.commandHandler.dragControlPoint(connector, tx, ty, false, index);\n }\n this.commandHandler.updateSelector();\n }\n }\n this.prevPosition = this.currentPosition;\n return !this.blocked;\n };\n ConnectorEditing.prototype.mouseUp = function (args) {\n var connector;\n if (args.source && args.source.connectors) {\n connector = args.source.connectors[0];\n }\n if (args && args.source && args.info && args.info.ctrlKey && args.info.shiftKey && connector.type === 'Straight') {\n this.addOrRemoveSegment(connector, this.currentPosition);\n }\n else {\n if (this.endPoint === 'OrthoThumb' && this.selectedSegment) {\n var index = connector.segments.indexOf(this.selectedSegment);\n var prev = connector.segments[index - 1];\n var next = connector.segments[index + 1];\n if (index === connector.segments.length - 2\n && this.updateLastSegment(connector, this.selectedSegment)) {\n connector.segments.splice(connector.segments.length - 2, 1);\n }\n else {\n if (prev && Math.abs(prev.length) < 5) {\n if (index !== 1) {\n this.removePrevSegment(connector, index);\n }\n }\n else if (next) {\n var len = Point.distancePoints(next.points[0], next.points[1]);\n var length_1 = ((next.length || next.length === 0) ? next.length : len);\n if ((Math.abs(length_1) <= 5)) {\n this.removeNextSegment(connector, index);\n }\n }\n }\n this.commandHandler.updateEndPoint(connector);\n }\n }\n if (this.undoElement) {\n var obj = void 0;\n obj = cloneObject(args.source);\n var entry = {\n type: 'SegmentChanged', redoObject: obj, undoObject: this.undoElement, category: 'Internal'\n };\n this.commandHandler.addHistoryEntry(entry);\n }\n _super.prototype.mouseUp.call(this, args);\n };\n ConnectorEditing.prototype.removePrevSegment = function (connector, index) {\n var first = connector.segments[index - 2];\n var next = connector.segments[index + 1];\n var length = (next.length || next.length === 0) ? next.length : Point.distancePoints(next.points[0], next.points[1]);\n if (!(length <= 5)) {\n var last = connector.segments[index + 1];\n connector.segments.splice(index - 1, 2);\n var segment = this.selectedSegment;\n if (segment.direction === 'Left' || segment.direction === 'Right') {\n first.points[first.points.length - 1].x = last.points[0].x;\n last.points[0].y = first.points[first.points.length - 1].y;\n }\n else {\n first.points[first.points.length - 1].y = last.points[0].y;\n last.points[0].x = first.points[first.points.length - 1].x;\n }\n if (segment.length || segment.length === 0) {\n this.findSegmentDirection(first);\n }\n this.findSegmentDirection(last);\n }\n };\n ConnectorEditing.prototype.findSegmentDirection = function (segment) {\n if (segment.direction && (segment.length || segment.length === 0)) {\n segment.length = Point.distancePoints(segment.points[0], segment.points[segment.points.length - 1]);\n segment.direction = Point.direction(segment.points[0], segment.points[segment.points.length - 1]);\n }\n };\n ConnectorEditing.prototype.removeNextSegment = function (connector, index) {\n var segment = this.selectedSegment;\n var first = connector.segments[index - 1];\n var last = connector.segments[index + 2];\n var next = connector.segments[index + 1];\n if (next.length || next.length === 0) {\n connector.segments.splice(index, 2);\n if (segment.direction === 'Top' || segment.direction === 'Bottom') {\n last.points[0].y = segment.points[0].y;\n first.points[first.points.length - 1].x = last.points[0].x;\n }\n else {\n last.points[0].x = segment.points[0].x;\n first.points[first.points.length - 1].y = last.points[0].y;\n }\n }\n else {\n connector.segments.splice(index + 1, 1);\n if (segment.direction === 'Top' || segment.direction === 'Bottom') {\n first.points[first.points.length - 1].x = next.points[next.points.length - 1].x;\n }\n else {\n first.points[first.points.length - 1].y = next.points[next.points.length - 1].y;\n }\n this.findSegmentDirection(first);\n segment.length = segment.direction = null;\n }\n if (first && last) {\n first.length = Point.distancePoints(first.points[0], last.points[0]);\n first.direction = Point.direction(first.points[0], last.points[0]);\n if (last.length || last.length === 0) {\n last.length = Point.distancePoints(first.points[first.points.length - 1], last.points[last.points.length - 1]);\n var point1 = first.points;\n var point2 = last.points;\n last.direction = Point.direction(point1[point1.length - 1], point2[point2.length - 1]);\n }\n }\n };\n ConnectorEditing.prototype.addOrRemoveSegment = function (connector, point) {\n var updateSeg;\n var segmentIndex;\n for (var i = 0; i < connector.segments.length; i++) {\n var segment = (connector.segments)[i];\n if (contains(point, segment.point, connector.hitPadding)) {\n segmentIndex = i;\n updateSeg = true;\n }\n }\n if (updateSeg && segmentIndex !== undefined) {\n if (connector.segments && connector.segments[segmentIndex] && connector.segments[segmentIndex].type === 'Straight') {\n var segment = connector.segments[segmentIndex];\n var previous = connector.segments[segmentIndex + 1];\n if (previous) {\n connector.segments.splice(segmentIndex, 1);\n previous.points[0] = segment.points[0];\n }\n }\n }\n else {\n var index = this.findIndex(connector, point);\n if (connector.segments && connector.segments[index] && connector.segments[index].type === 'Straight') {\n var segment = connector.segments[index];\n var newseg = new StraightSegment(connector, 'segments', { type: 'Straight', point: point }, true);\n newseg.points[0] = segment.points[0];\n newseg.points[1] = point;\n segment.points[0] = point;\n connector.segments.splice(index, 0, newseg);\n updateSeg = true;\n }\n }\n if (updateSeg) {\n this.commandHandler.updateEndPoint(connector);\n }\n };\n ConnectorEditing.prototype.findIndex = function (connector, point) {\n var intersectingSegs = [];\n for (var i = 0; i < connector.segments.length; i++) {\n var segment = connector.segments[i];\n var rect = Rect.toBounds([segment.points[0], segment.points[1]]);\n rect.Inflate(connector.hitPadding);\n if (rect.containsPoint(point)) {\n intersectingSegs.push(segment);\n }\n }\n if (intersectingSegs.length === 1) {\n return connector.segments.indexOf(intersectingSegs[0]);\n }\n else {\n var ratio = void 0;\n var min = void 0;\n var index = void 0;\n var seg = void 0;\n var v = void 0;\n var h = void 0;\n for (var i = 0; i < intersectingSegs.length; i++) {\n seg = intersectingSegs[i];\n v = (point.y - seg.points[0].y) / (seg.points[1].y - point.y);\n h = (point.x - seg.points[0].x) / (seg.points[1].x - point.x);\n ratio = Math.abs(v - h);\n if (i === 0) {\n min = ratio;\n index = 0;\n }\n if (ratio < min) {\n min = ratio;\n index = i;\n }\n }\n return connector.segments.indexOf(intersectingSegs[index]);\n }\n };\n ConnectorEditing.prototype.dragOrthogonalSegment = function (obj, segment, point, segmentIndex) {\n var segmentPoint = { x: 0, y: 0 };\n segmentPoint.x = ((segment.points[segmentIndex].x + segment.points[segmentIndex + 1].x) / 2);\n segmentPoint.y = ((segment.points[segmentIndex].y + segment.points[segmentIndex + 1].y) / 2);\n var ty = point.y - segmentPoint.y;\n var tx = point.x - segmentPoint.x;\n var index = obj.segments.indexOf(segment);\n var update = false;\n var orientation = (segment.points[0].y.toFixed(2) === segment.points[1].y.toFixed(2)) ? 'horizontal' : 'vertical';\n var prevSegment;\n var nextSegment;\n if (index !== -1) {\n if (index === 0 && obj.segments.length === 1 && segment.points.length === 2) {\n index = this.addSegments(obj, segment, tx, ty, index);\n update = true;\n }\n else if (index === obj.segments.length - 1 && (segment.direction === null || segment.length === null)) {\n index = this.addTerminalSegment(obj, segment, tx, ty, segmentIndex);\n update = true;\n }\n else if (index === 0) {\n index = this.insertFirstSegment(obj, segment, tx, ty, index);\n update = true;\n }\n if (update) {\n this.selectedSegment = segment = obj.segments[index];\n this.segmentIndex = 0;\n }\n this.updateAdjacentSegments(obj, index, tx, ty);\n this.commandHandler.updateEndPoint(obj);\n }\n return true;\n };\n ConnectorEditing.prototype.addSegments = function (obj, segment, tx, ty, coll) {\n var index;\n var direction;\n var segments = [];\n var len;\n var length = Point.distancePoints(segment.points[0], segment.points[1]);\n var segmentDirection = Point.direction(segment.points[0], segment.points[1]);\n segments.push(new OrthogonalSegment(obj, 'segments', { type: 'Orthogonal', direction: segmentDirection, length: length / 4 }, true));\n direction = (segment.points[0].y === segment.points[1].y) ? ((ty > 0) ? 'Bottom' : 'Top') : ((tx > 0) ? 'Right' : 'Left');\n len = (segment.points[0].x === segment.points[1].x) ? ty : tx;\n segments.push(new OrthogonalSegment(obj, 'segments', { type: 'Orthogonal', direction: direction, length: len }, true));\n segments.push(new OrthogonalSegment(obj, 'segments', { type: 'Orthogonal', direction: segmentDirection, length: length / 2 }, true));\n obj.segments = segments.concat(obj.segments);\n index = coll + 2;\n return index;\n };\n ConnectorEditing.prototype.insertFirstSegment = function (obj, segment, tx, ty, coll) {\n var direction;\n var length;\n var segments = [];\n var segValues;\n var index;\n var insertseg;\n if (obj.sourcePortID && segment.length && obj.segments[0].points.length > 2) {\n obj.segments.splice(0, 1);\n var prev = void 0;\n for (var i = 0; i < segment.points.length - 1; i++) {\n var len = Point.distancePoints(segment.points[i], segment.points[i + 1]);\n var dir = Point.direction(segment.points[i], segment.points[i + 1]);\n insertseg = new OrthogonalSegment(obj, 'segments', { type: 'Orthogonal', direction: dir, length: len }, true);\n if (insertseg.length === 0) {\n if (prev && (prev.direction === 'Top' || prev.direction === 'Bottom')) {\n insertseg.direction = tx > 0 ? 'Right' : 'Left';\n }\n else {\n insertseg.direction = ty > 0 ? 'Bottom' : 'Top';\n }\n }\n prev = insertseg;\n segments.push(insertseg);\n }\n obj.segments = segments.concat(obj.segments);\n index = 1;\n }\n else {\n segValues = { type: 'Orthogonal', direction: segment.direction, length: segment.length / 3 };\n segments.push(new OrthogonalSegment(obj, 'segments', segValues, true));\n if (segment.direction === 'Bottom' || segment.direction === 'Top') {\n length = Math.abs(tx);\n direction = tx > 0 ? 'Right' : 'Left';\n }\n else {\n length = Math.abs(ty);\n direction = ty > 0 ? 'Bottom' : 'Top';\n }\n insertseg = new OrthogonalSegment(obj, 'segments', { type: 'Orthogonal', direction: direction, length: length }, true);\n segments.push(insertseg);\n var nextseg = obj.segments[1];\n if (nextseg && nextseg.length) {\n nextseg.length = (direction !== nextseg.direction) ? nextseg.length + length : nextseg.length - length;\n }\n index = 2;\n segment.length = 2 * segment.length / 3;\n obj.segments = segments.concat(obj.segments);\n }\n return index;\n };\n ConnectorEditing.prototype.updateAdjacentSegments = function (obj, index, tx, ty) {\n var current = obj.segments[index];\n var endPoint = current.points[current.points.length - 1];\n var startPoint = current.points[0];\n var isNextUpdate = true;\n if (current.type === 'Orthogonal') {\n current.points[0] = startPoint;\n current.points[current.points.length - 1] = endPoint;\n var prev = obj.segments[index - 1];\n if (prev) {\n isNextUpdate = this.updatePreviousSegment(tx, ty, obj, index);\n }\n if (obj.segments.length - 1 > index && isNextUpdate) {\n var nextSegment = obj.segments[index + 1];\n this.updateNextSegment(obj, current, nextSegment, tx, ty);\n }\n }\n };\n ConnectorEditing.prototype.addTerminalSegment = function (connector, segment, tx, ty, segmentIndex) {\n var index = connector.segments.indexOf(segment);\n var first;\n var insertseg;\n var len;\n var dir;\n connector.segments.pop();\n var last = connector.segments[connector.segments.length - 1];\n first = (last && last.type === 'Orthogonal') ? last : null;\n for (var i = 0; i < segment.points.length - 2; i++) {\n len = Point.distancePoints(segment.points[i], segment.points[i + 1]);\n dir = Point.direction(segment.points[i], segment.points[i + 1]);\n insertseg = new OrthogonalSegment(connector, 'segments', { type: 'Orthogonal', length: len, direction: dir }, true);\n connector.segments.push(insertseg);\n first = insertseg;\n }\n var sec = segmentIndex;\n if (segment.points.length === 2 || sec === segment.points.length - 2) {\n if (first) {\n first.length += 5;\n }\n if (sec !== undefined) {\n var newseg = void 0;\n len = 2 * Point.distancePoints(segment.points[segment.points.length - 2], segment.points[segment.points.length - 1]) / 3;\n dir = Point.direction(segment.points[segment.points.length - 2], segment.points[segment.points.length - 1]);\n newseg = new OrthogonalSegment(connector, 'segments', { type: 'Orthogonal', length: len, direction: dir });\n connector.segments.push(newseg);\n }\n }\n var lastseg = new OrthogonalSegment(connector, 'segments', { type: 'Orthogonal' }, true);\n connector.segments.push(lastseg);\n this.commandHandler.updateEndPoint(connector);\n index = index + segmentIndex;\n return index;\n };\n ConnectorEditing.prototype.updatePortSegment = function (prev, connector, index, tx, ty) {\n if (index === 1 && prev.points.length === 2 && prev.length < 0) {\n var source = connector.sourceWrapper.corners;\n var current = connector.segments[index];\n var next = connector.segments[index + 1];\n var newseg = void 0;\n var segment = [];\n newseg = new OrthogonalSegment(connector, 'segments', { type: 'Orthogonal', length: 13, direction: prev.direction });\n segment.push(newseg);\n var len = void 0;\n if (current.direction === 'Left') {\n len = (current.points[0].x - (source.middleLeft.x - 20));\n }\n else if (current.direction === 'Right') {\n len = ((source.middleRight.x + 20) - current.points[0].x);\n }\n else if (current.direction === 'Bottom') {\n len = ((source.bottomCenter.y + 20) - current.points[0].y);\n }\n else {\n len = (current.points[0].y - (source.topCenter.y - 20));\n }\n var dir = current.direction;\n newseg = new OrthogonalSegment(connector, 'segments', { type: 'Orthogonal', length: len, direction: current.direction });\n segment.push(newseg);\n current.length = current.length - len;\n if (next && next.length && next.direction) {\n if (next.direction === prev.direction) {\n next.length -= 13;\n }\n else if (next.direction === getOppositeDirection(prev.direction)) {\n next.length += 13;\n }\n }\n connector.segments = segment.concat(connector.segments);\n this.selectedSegment = connector.segments[3];\n }\n };\n ConnectorEditing.prototype.updatePreviousSegment = function (tx, ty, connector, index) {\n var current = connector.segments[index];\n var prev = connector.segments[index - 1];\n var firstSegment = (index === 1) ? true : false;\n prev.points[prev.points.length - 1] = current.points[0];\n var isSourceNode = (connector.sourceID && connector.sourcePortID === '') ? false : true;\n var isNextUpdate = true;\n if (prev.type === 'Orthogonal') {\n if (prev.direction === 'Bottom') {\n prev.length += ty;\n }\n else if (prev.direction === 'Top') {\n prev.length -= ty;\n }\n else if (prev.direction === 'Right') {\n prev.length += tx;\n }\n else {\n prev.length -= tx;\n }\n if (connector.sourcePortID !== '' && prev.length < 0) {\n this.updatePortSegment(prev, connector, index, tx, ty);\n }\n else if (connector.sourceID && connector.sourcePortID === '' && prev.length < 0 && index === 1) {\n isNextUpdate = false;\n this.updateFirstSegment(connector, current);\n }\n if (isSourceNode) {\n this.changeSegmentDirection(prev);\n }\n }\n return isNextUpdate;\n };\n ConnectorEditing.prototype.changeSegmentDirection = function (segment) {\n if (segment.length < 0) {\n segment.direction = getOppositeDirection(segment.direction);\n segment.length *= -1;\n }\n };\n ConnectorEditing.prototype.updateNextSegment = function (obj, current, next, tx, ty) {\n var pt = current.points[current.points.length - 1];\n next.points[0] = current.points[current.points.length - 1];\n if (next && next.type === 'Orthogonal') {\n if (next.length || next.length === 0) {\n if (next.direction === 'Left' || next.direction === 'Right') {\n if (tx !== 0) {\n next.length = (next.direction === 'Right') ? next.length - tx : next.length + tx;\n if (next.length || next.length === 0) {\n this.changeSegmentDirection(next);\n }\n }\n }\n else {\n if (ty !== 0) {\n next.length = (next.direction === 'Bottom') ? next.length - ty : next.length + ty;\n if (next.length || next.length === 0) {\n this.changeSegmentDirection(next);\n }\n }\n }\n }\n }\n };\n ConnectorEditing.prototype.updateFirstSegment = function (connector, selectedSegment) {\n var index = connector.segments.indexOf(selectedSegment);\n var insertfirst = false;\n var current = connector.segments[index];\n var prev = connector.segments[index - 1];\n var con = connector;\n var sourcePoint;\n if (prev.length < 0 && connector.sourceID) {\n var sourceNode = connector.sourceWrapper.corners;\n var segments = [];\n var segValues = void 0;\n var removeCurrentPrev = false;\n this.changeSegmentDirection(current);\n var next = connector.segments[index + 1];\n var nextNext = connector.segments[index + 2];\n if (next) {\n this.changeSegmentDirection(next);\n }\n if (nextNext) {\n this.changeSegmentDirection(nextNext);\n }\n switch (prev.direction) {\n case 'Top':\n case 'Bottom':\n sourcePoint = (current.length > 0 && current.direction === 'Left') ? sourceNode.middleLeft : sourceNode.middleRight;\n if (current.length > sourceNode.width / 2) {\n if (Math.abs(prev.length) < sourceNode.height / 2) {\n prev.length = Point.distancePoints(sourceNode.center, prev.points[prev.points.length - 1]);\n current.points[0].x = sourcePoint.x;\n current.length = Point.distancePoints(current.points[0], current.points[current.points.length - 1]);\n current.length -= 20;\n insertfirst = true;\n }\n }\n else {\n if (next && next.direction && next.length) {\n next.points[0].y = sourcePoint.y;\n next.points[0].x = next.points[next.points.length - 1].x = (current.direction === 'Right') ?\n sourcePoint.x + 20 : sourcePoint.x - 20;\n }\n insertfirst = true;\n removeCurrentPrev = true;\n }\n break;\n case 'Left':\n case 'Right':\n sourcePoint = (current.length > 0 && current.direction === 'Top') ? sourceNode.topCenter : sourceNode.bottomCenter;\n if (current.length > sourceNode.height / 2) {\n if (Math.abs(prev.length) < sourceNode.width / 2) {\n prev.length = Point.distancePoints(sourceNode.center, prev.points[prev.points.length - 1]);\n current.points[0].y = sourcePoint.y;\n current.length = Point.distancePoints(current.points[0], current.points[current.points.length - 1]);\n current.length -= 20;\n insertfirst = true;\n }\n }\n else {\n if (next && next.direction && next.length) {\n next.points[0].x = sourcePoint.x;\n next.points[0].y = next.points[next.points.length - 1].y = (current.direction === 'Bottom') ?\n sourcePoint.y + 20 : sourcePoint.y - 20;\n }\n insertfirst = true;\n removeCurrentPrev = true;\n }\n break;\n }\n this.changeSegmentDirection(prev);\n this.changeSegmentDirection(current);\n if (insertfirst) {\n segValues = { type: 'Orthogonal', direction: current.direction, length: 20 };\n segments.push(new OrthogonalSegment(connector, 'segments', segValues, true));\n if (removeCurrentPrev) {\n if (next && next.direction && next.length) {\n next.length = Point.distancePoints(next.points[0], next.points[next.points.length - 1]);\n }\n if (nextNext && nextNext.direction && nextNext.length) {\n nextNext.length = Point.distancePoints(next.points[next.points.length - 1], nextNext.points[nextNext.points.length - 1]);\n }\n connector.segments.splice(index - 1, 2);\n }\n connector.segments = segments.concat(connector.segments);\n }\n this.selectedSegment = ((removeCurrentPrev) ? connector.segments[index - 1] :\n connector.segments[index + 1]);\n this.commandHandler.updateEndPoint(connector);\n }\n };\n ConnectorEditing.prototype.updateLastSegment = function (connector, selectedSegment) {\n if (connector.targetID && connector.targetPortID === '') {\n var line1Start = void 0;\n var line1End = void 0;\n var line2Start = void 0;\n var line2End = void 0;\n var corners = connector.targetWrapper.corners;\n var firstSegPoint = selectedSegment.points[0];\n var lastSegPoint = selectedSegment.points[selectedSegment.points.length - 1];\n if (selectedSegment.direction === 'Right' || selectedSegment.direction === 'Left') {\n line1Start = { x: firstSegPoint.x, y: firstSegPoint.y };\n line1End = {\n x: (selectedSegment.direction === 'Left') ? lastSegPoint.x - corners.width / 2 : lastSegPoint.x + corners.width / 2,\n y: lastSegPoint.y\n };\n line2Start = { x: corners.center.x, y: corners.center.y - corners.height };\n line2End = { x: corners.center.x, y: corners.center.y + corners.height };\n }\n else {\n line1Start = { x: firstSegPoint.x, y: firstSegPoint.y };\n line1End = {\n x: lastSegPoint.x,\n y: (selectedSegment.direction === 'Bottom') ? lastSegPoint.y + corners.height / 2 : lastSegPoint.y - corners.height / 2\n };\n line2Start = { x: corners.center.x - corners.width, y: corners.center.y };\n line2End = { x: corners.center.x + corners.width, y: corners.center.y };\n }\n var line1 = { X1: line1Start.x, Y1: line1Start.y, X2: line1End.x, Y2: line1End.y };\n var line2 = { X1: line2Start.x, Y1: line2Start.y, X2: line2End.x, Y2: line2End.y };\n return (intersect3(line1, line2).enabled);\n }\n return false;\n };\n /**\n * To destroy the connector editing module\n * @return {void}\n * @private\n */\n ConnectorEditing.prototype.destroy = function () {\n /**\n * Destroys the connector editing module\n */\n };\n /**\n * Get module name.\n */\n ConnectorEditing.prototype.getModuleName = function () {\n /**\n * Returns the module name\n */\n return 'ConnectorEditingTool';\n };\n return ConnectorEditing;\n}(ToolBase));\nexport { ConnectorEditing };\n","import { Point } from '../primitives/point';\nimport { Container } from '../core/containers/container';\nimport { Connector } from '../objects/connector';\nimport { NodeDrawingTool, ConnectorDrawingTool, TextDrawingTool, PolygonDrawingTool } from './tool';\nimport { Node } from '../objects/node';\nimport { SelectTool, MoveTool, ResizeTool, RotateTool, ConnectTool, ExpandTool, LabelTool, ZoomPanTool } from './tool';\nimport { ConnectorEditing } from './connector-editing';\nimport { Selector } from './selector';\nimport { findToolToActivate, isSelected, getCursor, contains } from './actions';\nimport { DiagramAction, KeyModifiers, Keys, DiagramEvent, DiagramTools } from '../enum/enum';\nimport { isPointOverConnector, findObjectType, insertObject, getObjectFromCollection, getTooltipOffset } from '../utility/diagram-util';\nimport { getObjectType } from '../utility/diagram-util';\nimport { canZoomPan, canDraw, canDrag } from './../utility/constraints-util';\nimport { canMove, canEnablePointerEvents, canSelect, canEnableToolTip } from './../utility/constraints-util';\nimport { canOutConnect, canInConnect, canAllowDrop, canUserInteract, defaultTool } from './../utility/constraints-util';\nimport { updateTooltip } from '../objects/tooltip';\nimport { PortVisibility, NodeConstraints, ConnectorConstraints } from '../enum/enum';\nimport { addTouchPointer, measureHtmlText } from '../utility/dom-util';\nimport { TextElement } from '../core/elements/text-element';\nimport { Size } from '../primitives/size';\nimport { Rect } from '../primitives/rect';\nimport { identityMatrix, rotateMatrix, transformPointByMatrix } from './../primitives/matrix';\nimport { removeRulerMarkers, drawRulerMarkers, getRulerSize, updateRuler } from '../ruler/ruler';\nimport { canContinuousDraw, canDrawOnce } from '../utility/constraints-util';\nimport { getFunction } from '../utility/base-util';\n/**\n * This module handles the mouse and touch events\n */\nvar DiagramEventHandler = /** @class */ (function () {\n /** @private */\n function DiagramEventHandler(diagram, commandHandler) {\n this.currentAction = 'None';\n this.focus = false;\n this.isBlocked = false;\n this.isMouseDown = false;\n this.inAction = false;\n this.doingAutoScroll = false;\n this.diagram = null;\n this.objectFinder = null;\n this.tool = null;\n this.eventArgs = null;\n this.diagram = diagram;\n this.objectFinder = new ObjectFinder();\n this.commandHandler = commandHandler;\n }\n Object.defineProperty(DiagramEventHandler.prototype, \"action\", {\n get: function () {\n return this.currentAction;\n },\n set: function (action) {\n if (action !== this.currentAction) {\n if (this.currentAction === 'PortDraw') {\n this.diagram.tool &= ~DiagramTools.DrawOnce;\n if (this.tool) {\n this.tool.mouseUp({ position: this.currentPosition });\n }\n this.tool = null;\n }\n this.currentAction = action;\n if (this.currentAction !== 'None' && this.currentAction !== 'Select' &&\n !(this.diagram.diagramActions & DiagramAction.TextEdit)) {\n this.diagram.diagramActions = this.diagram.diagramActions | DiagramAction.ToolAction;\n }\n else {\n this.diagram.diagramActions = this.diagram.diagramActions & ~DiagramAction.ToolAction;\n }\n this.diagram.setCursor(this.diagram.getCursor(action, this.inAction));\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DiagramEventHandler.prototype, \"blocked\", {\n get: function () {\n return this.isBlocked;\n },\n set: function (blocked) {\n this.isBlocked = blocked;\n if (this.blocked) {\n this.diagram.setCursor('not-allowed');\n }\n else {\n this.diagram.setCursor(this.diagram.getCursor(this.action, this.inAction));\n }\n },\n enumerable: true,\n configurable: true\n });\n /** @private */\n DiagramEventHandler.prototype.getMousePosition = function (e) {\n var touchArg;\n var offsetX;\n var offsetY;\n if (e.type.indexOf('touch') !== -1) {\n touchArg = e;\n offsetX = touchArg.changedTouches[0].clientX;\n offsetY = touchArg.changedTouches[0].clientY;\n }\n else {\n offsetX = e.clientX;\n offsetY = e.clientY;\n }\n var position = new Size();\n position = getRulerSize(this.diagram);\n var boundingRect = this.diagram.element.getBoundingClientRect();\n offsetX = offsetX + this.diagram.diagramCanvas.scrollLeft - boundingRect.left - position.width;\n offsetY = offsetY + this.diagram.diagramCanvas.scrollTop - boundingRect.top - position.height;\n offsetX /= this.diagram.scroller.transform.scale;\n offsetY /= this.diagram.scroller.transform.scale;\n offsetX -= this.diagram.scroller.transform.tx;\n offsetY -= this.diagram.scroller.transform.ty;\n return { x: offsetX, y: offsetY };\n };\n /**\n * @private\n */\n DiagramEventHandler.prototype.windowResize = function (evt) {\n var _this = this;\n if (this.resizeTo) {\n clearTimeout(this.resizeTo);\n }\n this.resizeTo = setTimeout(function () {\n _this.updateViewPortSize(_this.diagram.element);\n }, 300);\n return false;\n };\n /**\n * @private\n */\n DiagramEventHandler.prototype.updateViewPortSize = function (element) {\n var container = document.getElementById(element.id);\n if (container) {\n var bounds = container.getBoundingClientRect();\n this.diagram.scroller.setViewPortSize(bounds.width, bounds.height);\n var position = new Size();\n position = getRulerSize(this.diagram);\n var width = this.diagram.getSizeValue(this.diagram.width, position.width);\n var height = this.diagram.getSizeValue(this.diagram.height, position.height);\n this.diagram.diagramCanvas.style.width = width;\n this.diagram.diagramCanvas.style.height = height;\n this.diagram.scroller.setSize();\n if (this.diagram.rulerSettings.showRulers) {\n updateRuler(this.diagram);\n }\n }\n };\n /** @private */\n DiagramEventHandler.prototype.canHideResizers = function () {\n return ((this.tool instanceof MoveTool || this.tool instanceof RotateTool) && this.isMouseDown);\n };\n /** @private */\n DiagramEventHandler.prototype.updateCursor = function () {\n if ((this.diagram.selectedItems.nodes.length === 1 || this.diagram.selectedItems.connectors.length === 1)) {\n var list = [];\n list = list.concat(this.diagram.selectedItems.nodes, this.diagram.selectedItems.connectors);\n this.blocked = (this.isMouseDown && list.length === 1 && this.tool instanceof SelectTool && !canMove(list[0]));\n }\n };\n DiagramEventHandler.prototype.isForeignObject = function (target, isTextBox) {\n var foreignobject = target;\n if (foreignobject) {\n while (foreignobject.parentNode != null) {\n if (typeof foreignobject.className === 'string' &&\n ((!isTextBox && foreignobject.className.indexOf('foreign-object') !== -1) ||\n (isTextBox && foreignobject.className.indexOf('e-diagram-text-edit') !== -1))) {\n return foreignobject;\n }\n else {\n foreignobject = foreignobject.parentNode;\n }\n }\n }\n return null;\n };\n DiagramEventHandler.prototype.isMetaKey = function (evt) {\n return navigator.platform.match('Mac') ? evt.metaKey : evt.ctrlKey;\n };\n DiagramEventHandler.prototype.isDeleteKey = function (key, value) {\n return (navigator.platform.match('Mac') && key === 'Backspace' && value === 'delete');\n };\n DiagramEventHandler.prototype.mouseDown = function (evt) {\n this.focus = true;\n var touches;\n touches = evt.touches;\n if (!this.checkEditBoxAsTarget(evt) && (canUserInteract(this.diagram)) ||\n (canZoomPan(this.diagram) && !defaultTool(this.diagram))) {\n if (this.action === 'Select' || this.action === 'Drag') {\n this.diagram.updatePortVisibility(this.hoverElement, PortVisibility.Hover, true);\n }\n if (this.tool instanceof PolygonDrawingTool && (evt.button === 2 || evt.buttons === 2)) {\n var arg = {\n element: this.diagram, position: this.currentPosition, count: evt.buttons\n };\n this.inAction = false;\n this.tool.mouseUp(this.eventArgs, arg);\n }\n else if ((this.inAction === true) && this.isMouseDown === true && this.tool instanceof PolygonDrawingTool) {\n this.isMouseDown = true;\n this.eventArgs = {};\n this.getMouseEventArgs(this.currentPosition, this.eventArgs);\n this.eventArgs.position = this.currentPosition;\n this.tool.mouseDown(this.eventArgs);\n }\n else {\n this.isMouseDown = true;\n this.currentPosition = this.prevPosition = this.getMousePosition(evt);\n this.eventArgs = {};\n this.diagram.endEdit();\n var target = void 0;\n var objects = this.objectFinder.findObjectsUnderMouse(this.currentPosition, this.diagram, null, this.action);\n var obj = this.objectFinder.findObjectUnderMouse(this.diagram, objects, this.action, this.inAction, evt);\n var sourceElement = null;\n if (obj !== null) {\n sourceElement = this.diagram.findElementUnderMouse(obj, this.currentPosition);\n if (sourceElement) {\n target = this.commandHandler.findTarget(sourceElement, obj);\n }\n }\n this.action = this.diagram.findActionToBeDone(obj, sourceElement, this.currentPosition, target);\n //work around - correct it\n var ctrlKey = this.isMetaKey(evt);\n if (ctrlKey && evt.shiftKey && this.diagram.connectorEditingToolModule) {\n this.action = 'SegmentEnd';\n }\n else if ((ctrlKey || evt.shiftKey) && (!canZoomPan(this.diagram))) {\n this.action = 'Select';\n }\n this.tool = this.diagram.getTool(this.action);\n if (!this.tool) {\n this.action = 'Select';\n this.tool = this.diagram.getTool(this.action);\n }\n this.getMouseEventArgs(this.currentPosition, this.eventArgs);\n if (ctrlKey || evt.shiftKey) {\n var info = (ctrlKey && evt.shiftKey) ? { ctrlKey: ctrlKey, shiftKey: evt.shiftKey } : { ctrlKey: true };\n this.eventArgs.info = info;\n }\n this.eventArgs.position = this.currentPosition;\n this.tool.mouseDown(this.eventArgs);\n this.initialEventArgs = { source: this.eventArgs.source, sourceWrapper: this.eventArgs.sourceWrapper };\n this.initialEventArgs.position = this.currentPosition;\n this.initialEventArgs.info = this.eventArgs.info;\n this.inAction = false;\n if (evt.type === 'touchstart') {\n if (touches && touches.length >= 2) {\n this.touchStartList = addTouchPointer(this.touchStartList, evt, touches);\n }\n if (!touches) {\n evt.preventDefault();\n }\n }\n }\n }\n if (!this.isForeignObject(evt.target) && !this.isForeignObject(evt.target, true) && (!touches)) {\n evt.preventDefault();\n }\n };\n DiagramEventHandler.prototype.mouseMoveExtend = function (e, obj) {\n if (this.tool instanceof PolygonDrawingTool) {\n this.tool.mouseMove(this.eventArgs);\n }\n if (this.diagram.scrollSettings.canAutoScroll) {\n this.checkAutoScroll(e);\n }\n else {\n if (!this.blocked) {\n (this.tool.mouseMove(this.eventArgs));\n }\n }\n if (this.eventArgs.target) {\n this.hoverElement = this.eventArgs.target;\n }\n var isNode = this.eventArgs.target instanceof Node && obj instanceof Node ? false : true;\n if (this.tool instanceof ConnectTool) {\n this.diagram.updatePortVisibility(this.hoverElement instanceof Node ? this.hoverElement : this.hoverNode, PortVisibility.Connect | PortVisibility.Hover, isNode);\n }\n if (this.hoverElement instanceof Node\n && this.hoverNode instanceof Node && this.hoverNode && this.hoverNode.id !== this.hoverElement.id) {\n this.diagram.updatePortVisibility(this.hoverNode, PortVisibility.Connect | PortVisibility.Hover, true);\n }\n this.hoverElement = isNode ? null : obj;\n this.hoverNode = isNode ? null : obj;\n };\n /** @private */\n DiagramEventHandler.prototype.mouseMove = function (e, touches) {\n this.focus = true;\n if (canUserInteract(this.diagram) || (canZoomPan(this.diagram) && !defaultTool(this.diagram))) {\n this.currentPosition = this.getMousePosition(e);\n var objects = this.diagram.findObjectsUnderMouse(this.currentPosition);\n var obj = this.diagram.findObjectUnderMouse(objects, this.action, this.inAction);\n drawRulerMarkers(this.diagram, this.currentPosition);\n var force = false;\n var target = void 0;\n if (e.type === 'touchmove') {\n touches = e.touches;\n if (touches && touches.length > 1) {\n this.touchMoveList = addTouchPointer(this.touchMoveList, e, touches);\n if (this.action !== 'PinchZoom') {\n force = true;\n }\n }\n }\n if (Point.equals(this.currentPosition, this.prevPosition) === false || this.inAction) {\n if (this.isMouseDown === false || force) {\n this.eventArgs = {};\n var sourceElement = null;\n if (obj !== null) {\n sourceElement = this.diagram.findElementUnderMouse(obj, this.currentPosition);\n if (obj !== this.hoverElement) {\n if (this.hoverElement) {\n this.elementLeave();\n this.diagram.updatePortVisibility(this.hoverElement, PortVisibility.Hover, true);\n }\n if (obj instanceof Node) {\n this.hoverNode = obj;\n }\n this.hoverElement = obj;\n this.elementEnter(this.currentPosition, false);\n }\n else if (!this.hoverElement && this.hoverElement === obj) {\n this.elementEnter(this.currentPosition, true);\n }\n if (sourceElement) {\n target = this.commandHandler.findTarget(sourceElement, obj);\n }\n }\n this.action = this.diagram.findActionToBeDone(obj, sourceElement, this.currentPosition, target);\n this.getMouseEventArgs(this.currentPosition, this.eventArgs);\n this.tool = this.getTool(this.action);\n if (this.tool instanceof ConnectorDrawingTool) {\n this.tool.mouseMove(this.eventArgs);\n }\n else if (this.tool instanceof PolygonDrawingTool) {\n this.tool.mouseMove(this.eventArgs);\n }\n else if (touches && this.tool instanceof ZoomPanTool) {\n this.tool.mouseDown(this.eventArgs);\n }\n this.updateCursor();\n var isNode = false;\n if (!(this.hoverElement && (!(this.tool instanceof ZoomPanTool)) && obj instanceof Node &&\n (this.diagram.selectedItems.nodes.length === 0 || !isSelected(this.diagram, this.hoverElement)))) {\n isNode = true;\n }\n this.diagram.updatePortVisibility(this.hoverElement, PortVisibility.Hover, isNode);\n if (obj === null && this.hoverElement) {\n this.hoverElement = null;\n this.elementLeave();\n }\n force = false;\n }\n else {\n this.eventArgs.position = this.currentPosition;\n if (this.action === 'Drag' && !isSelected(this.diagram, this.eventArgs.source, false) &&\n this.eventArgs.source instanceof Selector) {\n this.getMouseEventArgs(this.currentPosition, this.eventArgs);\n }\n if (e.ctrlKey || e.shiftKey) {\n var info = (e.ctrlKey && e.shiftKey) ? { ctrlKey: e.ctrlKey, shiftKey: e.shiftKey } : { ctrlKey: true };\n this.eventArgs.info = info;\n }\n if (canMove(obj) && canSelect(obj) && this.initialEventArgs &&\n this.initialEventArgs.source && this.action === 'Select') {\n if (!isSelected(this.diagram, this.eventArgs.source, false) &&\n this.eventArgs.source instanceof Selector) {\n this.getMouseEventArgs(this.currentPosition, this.eventArgs);\n }\n if (!(obj instanceof Connector) || (obj instanceof Connector &&\n !(contains(this.currentPosition, obj.sourcePoint, obj.hitPadding) ||\n contains(this.currentPosition, obj.targetPoint, obj.hitPadding)))) {\n this.action = 'Drag';\n }\n this.tool = this.getTool(this.action);\n this.tool.mouseDown(this.initialEventArgs);\n }\n this.getMouseEventArgs(this.currentPosition, this.eventArgs, this.eventArgs.source);\n this.updateCursor();\n this.inAction = true;\n this.initialEventArgs = null;\n this.mouseMoveExtend(e, obj);\n }\n this.prevPosition = this.currentPosition;\n if (!this.isForeignObject(e.target, true)) {\n e.preventDefault();\n }\n }\n }\n };\n DiagramEventHandler.prototype.checkAutoScroll = function (e) {\n var autoScrollPosition = this.startAutoScroll(e);\n if (!autoScrollPosition && this.doingAutoScroll) {\n this.doingAutoScroll = false;\n clearInterval(this.timeOutValue);\n }\n else if (autoScrollPosition) {\n if ((this.tool instanceof MoveTool || this.tool instanceof ResizeTool\n || this.tool instanceof SelectTool) && this.inAction) {\n var diagram_1 = this;\n var delay_1 = 100;\n if (this.diagram.scrollSettings.canAutoScroll && autoScrollPosition && !this.doingAutoScroll) {\n this.doingAutoScroll = true;\n this.timeOutValue = setInterval(function (args) {\n diagram_1.doAutoScroll(autoScrollPosition, e, delay_1);\n }, delay_1);\n }\n }\n }\n else {\n this.blocked = !(this.tool.mouseMove(this.eventArgs));\n }\n };\n /** @private */\n DiagramEventHandler.prototype.mouseUp = function (evt) {\n var touches;\n touches = evt.touches;\n if (!this.checkEditBoxAsTarget(evt) && (canUserInteract(this.diagram))\n || (canZoomPan(this.diagram) && !defaultTool(this.diagram))) {\n if (this.tool && (!(this.tool instanceof PolygonDrawingTool) ||\n ((this.tool instanceof PolygonDrawingTool) && evt.detail === 2))) {\n this.diagram.endEdit();\n document.getElementById(this.diagram.element.id + 'content').focus();\n if (!this.inAction && evt.which !== 3) {\n if (this.action === 'Drag') {\n this.action = 'Select';\n var objects = this.diagram.findObjectsUnderMouse(this.currentPosition);\n var obj = this.diagram.findObjectUnderMouse(objects, this.action, this.inAction);\n var isMultipleSelect = true;\n if ((!evt.ctrlKey && this.isMouseDown\n && (this.diagram.selectedItems.nodes.length + this.diagram.selectedItems.connectors.length) > 1)\n && evt.which === 1) {\n isMultipleSelect = false;\n this.commandHandler.clearSelection();\n }\n if (!isSelected(this.diagram, obj) || (!isMultipleSelect)) {\n this.commandHandler.selectObjects([obj]);\n }\n }\n }\n this.inAction = false;\n this.isMouseDown = false;\n this.currentPosition = this.getMousePosition(evt);\n if (this.tool && (this.tool.prevPosition || this.tool instanceof LabelTool)) {\n this.eventArgs.position = this.currentPosition;\n this.getMouseEventArgs(this.currentPosition, this.eventArgs, this.eventArgs.source);\n var ctrlKey = this.isMetaKey(evt);\n if (ctrlKey || evt.shiftKey) {\n var info = (ctrlKey && evt.shiftKey) ? { ctrlKey: ctrlKey, shiftKey: evt.shiftKey } :\n { ctrlKey: true };\n this.eventArgs.info = info;\n }\n this.eventArgs.clickCount = evt.detail;\n this.tool.mouseUp(this.eventArgs);\n }\n this.blocked = false;\n if (this.hoverElement) {\n var portVisibility = PortVisibility.Connect;\n if (isSelected(this.diagram, this.hoverElement)) {\n portVisibility |= PortVisibility.Hover;\n }\n this.diagram.updatePortVisibility(this.hoverElement, portVisibility, true);\n this.hoverElement = null;\n }\n this.touchStartList = null;\n this.touchMoveList = null;\n if (!(this.tool instanceof TextDrawingTool)) {\n this.tool = null;\n }\n }\n this.eventArgs = {};\n if (!touches) {\n evt.preventDefault();\n }\n this.diagram.currentDrawingObject = undefined;\n var selector = this.diagram.selectedItems;\n if (!this.inAction && selector.wrapper && selector.userHandles.length > 0) {\n this.diagram.renderSelector(true);\n }\n if (!this.inAction && !this.diagram.currentSymbol) {\n var arg = {\n element: this.eventArgs.source || this.diagram, position: this.eventArgs.position, count: evt.detail\n };\n this.diagram.triggerEvent(DiagramEvent.click, arg);\n }\n }\n //end the corresponding tool\n };\n /** @private */\n DiagramEventHandler.prototype.mouseLeave = function (evt) {\n //Define what has to happen on mouse leave\n if (this.tool && this.inAction) {\n this.tool.mouseLeave(this.eventArgs);\n }\n if (this.eventArgs && this.eventArgs.source) {\n this.diagram.updatePortVisibility(this.eventArgs.source, PortVisibility.Hover, true);\n this.hoverElement = null;\n }\n if (this.tool instanceof ConnectTool && this.eventArgs && this.eventArgs.target && this.eventArgs.target instanceof Node) {\n this.diagram.updatePortVisibility(this.eventArgs.target, PortVisibility.Hover | PortVisibility.Connect, true);\n this.hoverElement = null;\n }\n var selector = this.diagram.selectedItems;\n if (selector && selector.wrapper) {\n this.diagram.renderSelector(true);\n }\n this.isMouseDown = false;\n this.focus = false;\n this.touchStartList = null;\n this.touchMoveList = null;\n this.commandHandler.removeSnap();\n this.inAction = false;\n this.eventArgs = {};\n this.tool = null;\n removeRulerMarkers();\n evt.preventDefault();\n };\n /** @private */\n DiagramEventHandler.prototype.mouseWheel = function (evt) {\n var up = (evt.wheelDelta > 0 || -40 * evt.detail > 0) ? true : false;\n var mousePosition = this.getMousePosition(evt);\n this.diagram.endEdit();\n this.diagram.tooltipObject.close();\n var ctrlKey = this.isMetaKey(evt);\n if (ctrlKey) {\n this.diagram.zoom(up ? (1.2) : 1 / (1.2), mousePosition);\n evt.preventDefault();\n }\n else {\n var horizontalOffset = this.diagram.scroller.horizontalOffset;\n var verticalOffset = this.diagram.scroller.verticalOffset;\n var change = up ? 20 : -20;\n if (this.tool && this.tool instanceof PolygonDrawingTool) {\n this.eventArgs = {};\n this.getMouseEventArgs(mousePosition, this.eventArgs);\n this.eventArgs.position = mousePosition;\n this.tool.mouseWheel(this.eventArgs);\n }\n if (evt.shiftKey) {\n this.diagram.scroller.zoom(1, change, 0, mousePosition);\n }\n else {\n this.diagram.scroller.zoom(1, 0, change, mousePosition);\n }\n if (horizontalOffset !== this.diagram.scroller.horizontalOffset\n || verticalOffset !== this.diagram.scroller.verticalOffset) {\n evt.preventDefault();\n }\n }\n };\n /** @private */\n DiagramEventHandler.prototype.keyDown = function (evt) {\n if (!(this.diagram.diagramActions & DiagramAction.TextEdit) &&\n !(this.checkEditBoxAsTarget(evt)) || (evt.key === 'Escape' || evt.keyCode === 27)) {\n var i = void 0;\n var command = void 0;\n var keycode = evt.keyCode ? evt.keyCode : evt.which;\n var key = evt.key;\n var ctrlKey = this.isMetaKey(evt);\n if (this.diagram.commandManager && this.diagram.commands) {\n var commands = this.diagram.commands;\n for (var _i = 0, _a = Object.keys(commands); _i < _a.length; _i++) {\n var i_1 = _a[_i];\n command = this.diagram.commands[i_1];\n if (command && (command.gesture.keyModifiers || command.gesture.key)) {\n if ((keycode === command.gesture.key || (key === Keys[command.gesture.key])\n || this.isDeleteKey(key, i_1))\n && (((!command.gesture.keyModifiers) && (!evt.altKey) && (!evt.shiftKey) && (!ctrlKey)) ||\n (command.gesture.keyModifiers && (ctrlKey || evt.altKey || evt.shiftKey) &&\n (this.altKeyPressed(command.gesture.keyModifiers) && evt.altKey) ||\n (this.shiftKeyPressed(command.gesture.keyModifiers) && evt.shiftKey) ||\n (this.ctrlKeyPressed(command.gesture.keyModifiers) && ctrlKey)))) {\n var canExecute = getFunction(command.canExecute);\n if (canExecute && canExecute({\n 'keyDownEventArgs': KeyboardEvent,\n parameter: command.parameter\n })) {\n evt.preventDefault();\n if (evt.key === 'Escape' && (this.checkEditBoxAsTarget(evt))) {\n document.getElementById(this.diagram.diagramCanvas.id).focus();\n }\n if (command.execute) {\n // if (i === 'nudgeUp' || i === \"nudgeRight\" || i === \"nudgeDown\" || i === 'nudgeLeft') {\n // command.execute()\n // } else {\n var execute = getFunction(command.execute);\n execute({ 'keyDownEventArgs': KeyboardEvent, parameter: command.parameter });\n // }\n }\n break;\n }\n }\n }\n }\n }\n }\n };\n DiagramEventHandler.prototype.startAutoScroll = function (e) {\n var position = this.getMousePosition(e);\n position.x *= this.diagram.scroller.currentZoom;\n position.y *= this.diagram.scroller.currentZoom;\n var movingPosition;\n var autoScrollBorder = this.diagram.scrollSettings.autoScrollBorder;\n if (this.diagram.scrollSettings.canAutoScroll) {\n if (position.x + this.diagram.scroller.horizontalOffset + autoScrollBorder.right > this.diagram.scroller.viewPortWidth - 18) {\n movingPosition = 'right';\n }\n else if (position.x + this.diagram.scroller.horizontalOffset < autoScrollBorder.left) {\n movingPosition = 'left';\n }\n else if (position.y + this.diagram.scroller.verticalOffset + autoScrollBorder.bottom >\n this.diagram.scroller.viewPortHeight - 18) {\n movingPosition = 'bottom';\n }\n else if (position.y + this.diagram.scroller.verticalOffset < autoScrollBorder.top) {\n movingPosition = 'top';\n }\n }\n return movingPosition;\n };\n DiagramEventHandler.prototype.doAutoScroll = function (option, e, delay, autoScroll) {\n var position = option;\n if ((this.tool instanceof MoveTool || this.tool instanceof ResizeTool\n || this.tool instanceof SelectTool) && this.inAction) {\n var diagram = this;\n this.eventArgs.position = { x: this.tool.prevPosition.x, y: this.tool.prevPosition.y };\n var pos = this.getMousePosition(e);\n var autoScrollBorder = this.diagram.scrollSettings.autoScrollBorder;\n var newDelay = delay ? delay : 100;\n var left = 0;\n var top_1 = 0;\n switch (position) {\n case 'right':\n this.eventArgs.position.x += 10;\n left = 10;\n break;\n case 'left':\n this.eventArgs.position.x -= 10;\n left = -10;\n break;\n case 'bottom':\n this.eventArgs.position.y += 10;\n top_1 = 10;\n break;\n case 'top':\n this.eventArgs.position.y -= 10;\n top_1 = -10;\n break;\n }\n this.tool.mouseMove(this.eventArgs);\n this.diagram.scroller.zoom(1, -left, -top_1, pos);\n }\n };\n DiagramEventHandler.prototype.elementEnter = function (mousePosition, elementOver) {\n if (!elementOver) {\n var isPrivateTooltip = ((this.hoverElement instanceof Node) &&\n this.hoverElement.constraints & NodeConstraints.Tooltip) ||\n ((this.hoverElement instanceof Connector) && this.hoverElement.constraints & ConnectorConstraints.Tooltip);\n updateTooltip(this.diagram, isPrivateTooltip ? this.hoverElement : undefined);\n var offset = getTooltipOffset(this.diagram, mousePosition, this.hoverElement);\n this.diagram.tooltipObject.close();\n this.diagram.tooltipObject.offsetX = offset.x;\n this.diagram.tooltipObject.offsetY = offset.y;\n this.diagram.tooltipObject.dataBind();\n if (canEnableToolTip(this.hoverElement, this.diagram)) {\n this.diagram.tooltipObject.open(this.diagram.element);\n }\n }\n };\n DiagramEventHandler.prototype.elementLeave = function () {\n this.diagram.tooltipObject.close();\n };\n DiagramEventHandler.prototype.altKeyPressed = function (keyModifier) {\n if (keyModifier & KeyModifiers.Alt) {\n return true;\n }\n return false;\n };\n DiagramEventHandler.prototype.ctrlKeyPressed = function (keyModifier) {\n if (keyModifier & KeyModifiers.Control) {\n return true;\n }\n return false;\n };\n DiagramEventHandler.prototype.shiftKeyPressed = function (keyModifier) {\n if (keyModifier & KeyModifiers.Shift) {\n return true;\n }\n return false;\n };\n /** @private */\n DiagramEventHandler.prototype.scrolled = function (evt) {\n this.diagram.updateScrollOffset();\n };\n /** @private */\n DiagramEventHandler.prototype.doubleClick = function (evt) {\n if (canUserInteract(this.diagram)) {\n var annotation = void 0;\n var objects = this.diagram.findObjectsUnderMouse(this.currentPosition);\n var obj = this.diagram.findObjectUnderMouse(objects, this.action, this.inAction);\n if (obj !== null && canUserInteract(this.diagram)) {\n var node = obj;\n annotation = this.diagram.findElementUnderMouse(obj, this.currentPosition);\n if (this.tool && this.tool instanceof PolygonDrawingTool) {\n var arg_1 = {\n source: obj || this.diagram, position: this.currentPosition, count: evt.detail\n };\n this.tool.mouseUp(this.eventArgs, arg_1);\n this.isMouseDown = false;\n this.eventArgs = {};\n this.tool = null;\n evt.preventDefault();\n }\n else {\n var layer = this.diagram.commandHandler.getObjectLayer(obj.id);\n if (layer && !layer.lock && layer.visible) {\n if (!(this.diagram.diagramActions & DiagramAction.TextEdit)) {\n var id = '';\n if (obj.shape.shape === 'TextAnnotation') {\n id = obj.id.split('_textannotation_')[1];\n }\n this.diagram.startTextEdit(obj, id || (annotation instanceof TextElement ?\n (annotation.id).split(obj.id + '_')[1] : undefined));\n }\n }\n }\n }\n var arg = {\n source: obj || this.diagram, position: this.currentPosition, count: evt.detail\n };\n this.diagram.triggerEvent(DiagramEvent.doubleClick, arg);\n }\n };\n /**\n * @private\n */\n DiagramEventHandler.prototype.inputChange = function (evt) {\n var minWidth = 90;\n var maxWidth;\n var minHeight = 12;\n var fontsize;\n var textWrapper;\n var node;\n var height;\n var width;\n var textBounds;\n var textBoxWidth;\n var transforms;\n var editTextBox = document.getElementById(this.diagram.element.id + '_editBox');\n var editTextBoxDiv = document.getElementById(this.diagram.element.id + '_editTextBoxDiv');\n var text = (editTextBox.value);\n var line = text.split('\\n');\n node = (this.diagram.selectedItems.nodes[0]) ? this.diagram.selectedItems.nodes[0] : this.diagram.selectedItems.connectors[0];\n if (!node && this.tool instanceof TextDrawingTool) {\n node = this.diagram.nameTable[this.diagram.activeLabel.parentId];\n }\n if (node && ((node.shape.type !== 'Text' && node.annotations.length > 0) || (node.shape.type === 'Text'))) {\n textWrapper = this.diagram.getWrapper(node.wrapper, this.diagram.activeLabel.id);\n maxWidth = node.wrapper.bounds.width > textWrapper.bounds.width ? node.wrapper.bounds.width : textWrapper.bounds.width;\n maxWidth = maxWidth > minWidth ? maxWidth : minWidth;\n textBounds = measureHtmlText(textWrapper.style, text, undefined, undefined, maxWidth);\n fontsize = Number((editTextBox.style.fontSize).split('px')[0]);\n if (line.length > 1 && line[line.length - 1] === '') {\n textBounds.height = textBounds.height + fontsize;\n }\n width = textBounds.width;\n width = (minWidth > width) ? minWidth : width;\n height = (minHeight > textBounds.height) ? minHeight : textBounds.height;\n transforms = this.diagram.scroller.transform;\n editTextBoxDiv.style.left = ((((textWrapper.bounds.center.x + transforms.tx) * transforms.scale) - width / 2) - 2.5) + 'px';\n editTextBoxDiv.style.top = ((((textWrapper.bounds.center.y + transforms.ty) * transforms.scale) - height / 2) - 3) + 'px';\n editTextBoxDiv.style.width = width + 'px';\n editTextBoxDiv.style.height = height + 'px';\n editTextBox.style.minHeight = minHeight + 'px';\n editTextBox.style.minWidth = minWidth + 'px';\n editTextBox.style.width = width + 'px';\n editTextBox.style.height = height + 'px';\n }\n };\n /**\n * @private\n */\n DiagramEventHandler.prototype.isAddTextNode = function (node, focusOut) {\n if (this.tool instanceof TextDrawingTool || focusOut) {\n this.tool = null;\n if (node && (!(canContinuousDraw(this.diagram)))) {\n this.diagram.drawingObject = undefined;\n this.diagram.currentDrawingObject = undefined;\n }\n if (getObjectFromCollection(this.diagram.nodes, node.id) || getObjectFromCollection(this.diagram.connectors, node.id)) {\n return false;\n }\n return true;\n }\n return false;\n };\n DiagramEventHandler.prototype.checkEditBoxAsTarget = function (evt) {\n if ((evt.target && evt.target.id === this.diagram.element.id + '_editBox')) {\n return true;\n }\n return false;\n };\n DiagramEventHandler.prototype.getMouseEventArgs = function (position, args, source) {\n args.position = position;\n var obj;\n var objects;\n if (!source) {\n if (this.action === 'Drag' || this.action === 'ConnectorSourceEnd' || this.action === 'SegmentEnd' ||\n this.action === 'OrthoThumb' || this.action === 'BezierSourceThumb' || this.action === 'BezierTargetThumb' ||\n this.action === 'ConnectorTargetEnd' || this.action === 'Rotate' || this.action.indexOf('Resize') !== -1) {\n obj = this.diagram.selectedItems;\n }\n else {\n objects = this.diagram.findObjectsUnderMouse(this.currentPosition);\n obj = this.diagram.findObjectUnderMouse(objects, this.action, this.inAction);\n }\n }\n else {\n objects = this.diagram.findObjectsUnderMouse(this.currentPosition, source);\n obj = this.diagram.findTargetObjectUnderMouse(objects, this.action, this.inAction, args.position, source);\n }\n var wrapper;\n if (obj) {\n wrapper = this.diagram.findElementUnderMouse(obj, this.currentPosition);\n }\n if (!source) {\n args.source = obj;\n args.sourceWrapper = wrapper;\n }\n else {\n args.target = obj;\n args.targetWrapper = wrapper;\n }\n args.startTouches = this.touchStartList;\n args.moveTouches = this.touchMoveList;\n return args;\n };\n /** @private */\n DiagramEventHandler.prototype.resetTool = function () {\n this.action = 'Select';\n this.hoverElement = null;\n this.hoverNode = null;\n this.tool = this.diagram.getTool(this.action);\n this.updateCursor();\n };\n /** @private */\n DiagramEventHandler.prototype.getTool = function (action) {\n switch (action) {\n case 'Select':\n return new SelectTool(this.commandHandler, true);\n case 'Drag':\n return new MoveTool(this.commandHandler);\n case 'Rotate':\n return new RotateTool(this.commandHandler);\n case 'LayoutAnimation':\n return new ExpandTool(this.commandHandler);\n case 'Hyperlink':\n return new LabelTool(this.commandHandler);\n case 'ResizeSouthEast':\n case 'ResizeSouthWest':\n case 'ResizeNorthEast':\n case 'ResizeNorthWest':\n case 'ResizeSouth':\n case 'ResizeNorth':\n case 'ResizeWest':\n case 'ResizeEast':\n return new ResizeTool(this.commandHandler, action);\n case 'ConnectorSourceEnd':\n case 'ConnectorTargetEnd':\n case 'BezierSourceThumb':\n case 'BezierTargetThumb':\n return new ConnectTool(this.commandHandler, action);\n case 'SegmentEnd':\n case 'OrthoThumb':\n return new ConnectorEditing(this.commandHandler, action);\n case 'Draw':\n var shape = 'shape';\n var type = findObjectType(this.diagram.drawingObject);\n if (type === 'Node' && this.diagram.drawingObject.shape.type === 'Text') {\n return new TextDrawingTool(this.commandHandler);\n }\n else if (type === 'Node' && this.diagram.drawingObject.shape[shape] === 'Polygon' &&\n !(this.diagram.drawingObject.shape.points)) {\n return new PolygonDrawingTool(this.commandHandler);\n }\n else if (type === 'Node' ||\n (type === 'Node' && this.diagram.drawingObject.shape[shape] === 'Polygon' &&\n (this.diagram.drawingObject.shape.points))) {\n return new NodeDrawingTool(this.commandHandler, this.diagram.drawingObject);\n }\n else if (type === 'Connector') {\n return new ConnectorDrawingTool(this.commandHandler, 'ConnectorSourceEnd', this.diagram.drawingObject);\n }\n break;\n case 'Pan':\n return new ZoomPanTool(this.commandHandler, false);\n case 'PinchZoom':\n return new ZoomPanTool(this.commandHandler, true);\n case 'PortDrag':\n return new MoveTool(this.commandHandler, 'Port');\n case 'PortDraw':\n return new ConnectorDrawingTool(this.commandHandler, 'ConnectorSourceEnd', this.diagram.drawingObject);\n }\n return null;\n };\n /** @private */\n DiagramEventHandler.prototype.getCursor = function (action) {\n return getCursor(action, this.diagram.selectedItems.rotateAngle);\n };\n //start region - interface betweend diagram and interaction\n /** @private */\n DiagramEventHandler.prototype.findElementUnderMouse = function (obj, position) {\n return this.objectFinder.findElementUnderSelectedItem(obj, position);\n };\n /** @private */\n DiagramEventHandler.prototype.findObjectsUnderMouse = function (position, source) {\n return this.objectFinder.findObjectsUnderMouse(position, this.diagram, source);\n };\n /** @private */\n DiagramEventHandler.prototype.findObjectUnderMouse = function (objects, action, inAction) {\n return this.objectFinder.findObjectUnderMouse(this.diagram, objects, action, inAction, this.currentPosition);\n };\n /** @private */\n DiagramEventHandler.prototype.findTargetUnderMouse = function (objects, action, inAction, position, source) {\n return this.objectFinder.findObjectUnderMouse(this.diagram, objects, action, inAction, position, source);\n };\n /** @private */\n DiagramEventHandler.prototype.findActionToBeDone = function (obj, wrapper, position, target) {\n return findToolToActivate(obj, wrapper, this.currentPosition, this.diagram, this.touchStartList, this.touchMoveList, target);\n };\n return DiagramEventHandler;\n}());\nexport { DiagramEventHandler };\n/** @private */\nvar ObjectFinder = /** @class */ (function () {\n function ObjectFinder() {\n }\n /** @private */\n ObjectFinder.prototype.findObjectsUnderMouse = function (pt, diagram, source, actions) {\n // finds the collection of the object that is under the mouse;\n var actualTarget = [];\n if (source && source instanceof Selector) {\n if (source.nodes.length + source.connectors.length === 1) {\n source = (source.nodes[0] || source.connectors[0]);\n }\n }\n var container;\n var bounds;\n var child;\n var matrix;\n var objArray = diagram.spatialSearch.findObjects(new Rect(pt.x - 50, pt.y - 50, 100, 100));\n var layerObjTable = {};\n var layerTarger;\n for (var _i = 0, objArray_1 = objArray; _i < objArray_1.length; _i++) {\n var obj = objArray_1[_i];\n var point = pt;\n bounds = obj.wrapper.outerBounds;\n if ((obj !== source || diagram.currentDrawingObject instanceof Connector) &&\n (obj instanceof Connector) ? obj !== diagram.currentDrawingObject : true && obj.wrapper.visible) {\n var layer = diagram.commandHandler.getObjectLayer(obj.id);\n if (layer && !layer.lock && layer.visible) {\n layerTarger = layerObjTable[layer.zIndex] = layerObjTable[layer.zIndex] || [];\n if (obj.rotateAngle) {\n container = obj.wrapper;\n matrix = identityMatrix();\n rotateMatrix(matrix, -(container.rotateAngle + container.parentTransform), obj.offsetX, obj.offsetY);\n point = transformPointByMatrix(matrix, pt);\n bounds = container.corners;\n for (var _a = 0, _b = container.children; _a < _b.length; _a++) {\n child = _b[_a];\n bounds.uniteRect(child.corners);\n }\n }\n if (!source || (isSelected(diagram, obj) === false)) {\n if (canEnablePointerEvents(obj, diagram)) {\n if ((obj instanceof Connector) ? isPointOverConnector(obj, pt) : bounds.containsPoint(point)) {\n var padding = (obj instanceof Connector) ? obj.hitPadding || 0 : 0;\n var element = void 0;\n element = this.findElementUnderMouse(obj, pt, padding);\n if (element) {\n if (obj instanceof Connector && diagram.bpmnModule) {\n obj = diagram.bpmnModule.findInteractableObject(obj, diagram);\n }\n insertObject(obj, 'zIndex', layerTarger);\n }\n }\n }\n }\n }\n }\n }\n for (var _c = 0, _d = diagram.layers; _c < _d.length; _c++) {\n var layer = _d[_c];\n actualTarget = actualTarget.concat(layerObjTable[layer.zIndex] || []);\n for (var _e = 0, actualTarget_1 = actualTarget; _e < actualTarget_1.length; _e++) {\n var obj = actualTarget_1[_e];\n var eventHandler = 'eventHandler';\n if (obj.shape.type === 'Bpmn' && obj.processId && (!(diagram[eventHandler].tool instanceof MoveTool) ||\n (diagram[eventHandler].tool instanceof MoveTool) && canAllowDrop(obj))) {\n var index = actualTarget.indexOf(diagram.nameTable[obj.processId]);\n if (index > -1) {\n actualTarget.splice(index, 1);\n }\n }\n }\n }\n for (var i = 0; i < actualTarget.length; i++) {\n var parentObj = diagram.nameTable[actualTarget[i].parentId];\n if (parentObj) {\n var portElement = this.findElementUnderMouse(parentObj, pt);\n for (var j = 0; j < parentObj.ports.length; j++) {\n if (portElement.id.match('_' + parentObj.ports[j].id + '$')) {\n var port = parentObj.ports[j];\n if (canDrag(port, diagram) || canDraw(port, diagram)) {\n return actualTarget;\n }\n }\n }\n }\n while (parentObj) {\n var index = actualTarget.indexOf(parentObj);\n if (index !== -1) {\n actualTarget.splice(index, 1);\n }\n else {\n break;\n }\n parentObj = diagram.nameTable[parentObj.parentId];\n }\n }\n return actualTarget;\n };\n /** @private */\n ObjectFinder.prototype.isTarget = function (actualTarget, diagram, action) {\n var connector = diagram.selectedItems.connectors[0];\n var node;\n node = action === 'ConnectorSourceEnd' ? diagram.nameTable[connector.targetID] :\n node = diagram.nameTable[connector.sourceID];\n if (node && (!node.processId && !actualTarget.processId || node.processId !== actualTarget.processId)) {\n if (node.processId !== actualTarget.processId) {\n actualTarget = null;\n }\n }\n return actualTarget;\n };\n /* tslint:disable */\n /** @private */\n ObjectFinder.prototype.findObjectUnderMouse = function (diagram, objects, action, inAction, position, source) {\n //we will get the wrapper object here\n //we have to choose the object to be interacted with from the given wrapper\n //Find the object that is under mouse\n var eventHandler = 'eventHandler';\n var actualTarget = null;\n if (objects.length !== 0) {\n if (source && source instanceof Selector) {\n if (source.nodes.length + source.connectors.length === 1) {\n source = (source.nodes[0] || source.connectors[0]);\n }\n }\n if ((action === 'ConnectorSourceEnd' && source || action === 'PortDraw') ||\n ((canDrawOnce(diagram) || canContinuousDraw(diagram)) && getObjectType(diagram.drawingObject) === Connector)) {\n var connector = diagram.selectedItems.connectors[0];\n for (var i = objects.length - 1; i >= 0; i--) {\n if (objects[i] instanceof Node && canOutConnect(objects[i])) {\n actualTarget = objects[i];\n if (connector) {\n actualTarget = this.isTarget(actualTarget, diagram, action);\n }\n return actualTarget;\n }\n }\n }\n else if (action === 'ConnectorTargetEnd' && source) {\n for (var i = objects.length - 1; i >= 0; i--) {\n if (objects[i] instanceof Node && canInConnect(objects[i])) {\n actualTarget = objects[i];\n actualTarget = this.isTarget(actualTarget, diagram, action);\n return actualTarget;\n }\n }\n }\n else if (source && (action === 'Drag' || (diagram[eventHandler].tool instanceof MoveTool))) {\n var index = 0;\n for (var i = 0; i < objects.length; i++) {\n var temp = objects[i];\n if (source !== temp && (temp instanceof Connector ||\n !position || temp.wrapper.bounds.containsPoint(position))) {\n if (canAllowDrop(temp)) {\n if (!actualTarget) {\n actualTarget = temp;\n index = actualTarget.zIndex;\n }\n else {\n actualTarget = index >= temp.zIndex ? actualTarget : temp;\n index = Math.max(index, temp.zIndex);\n }\n }\n }\n }\n if (actualTarget && actualTarget.shape.type === 'Bpmn') {\n if (diagram.selectedItems.nodes.length > 0 && diagram.selectedItems.nodes[0].shape.type === 'Bpmn') {\n actualTarget = actualTarget;\n }\n else {\n actualTarget = null;\n }\n }\n return actualTarget;\n }\n else if (action === 'Select' && diagram[eventHandler].tool) {\n for (var i = objects.length - 1; i >= 0; i--) {\n if (objects[i] instanceof Connector) {\n if (objects[i - 1] instanceof Node && objects[i - 1].ports) {\n var portElement = this.findTargetElement(objects[i - 1].wrapper, position, undefined);\n if ((portElement && (portElement.id.match('_icon_content_shape$') || portElement.id.match('_icon_content_rect$')))) {\n return objects[i - 1];\n }\n for (var j = 0; j < objects[i - 1].ports.length; j++) {\n if (portElement && portElement.id.match('_' + objects[i - 1].ports[j].id + '$')) {\n if (canDraw(objects[i - 1].ports[j], diagram)) {\n return objects[i - 1];\n }\n }\n }\n }\n }\n }\n actualTarget = objects[objects.length - 1];\n if (actualTarget.parentId) {\n var obj = actualTarget;\n var selected = isSelected(diagram, obj);\n while (obj) {\n if (isSelected(diagram, obj) && !selected) {\n break;\n }\n actualTarget = obj;\n obj = diagram.nameTable[obj.parentId];\n }\n }\n }\n else if (action === 'Pan' || action === 'LayoutAnimation') {\n for (var i = objects.length - 1; i >= 0; i--) {\n if (objects[i] instanceof Node) {\n var portElement = this.findTargetElement(objects[i].wrapper, position, undefined);\n if ((action === 'LayoutAnimation' || action === 'Pan') || ((portElement && (portElement.id.match('_icon_content_shape$') || portElement.id.match('_icon_content_rect$'))))) {\n return objects[i];\n }\n }\n }\n }\n else {\n actualTarget = objects[objects.length - 1];\n }\n }\n return actualTarget;\n };\n /* tslint:enable */\n /** @private */\n ObjectFinder.prototype.findElementUnderSelectedItem = function (obj, position) {\n //rewrite this for multiple selection\n if (obj instanceof Selector) {\n if (obj.nodes.length === 1 && (!obj.connectors || !obj.connectors.length)) {\n return this.findElementUnderMouse(obj.nodes[0], position);\n }\n else if ((!obj.nodes || obj.nodes.length) && obj.connectors.length === 1) {\n return this.findElementUnderMouse(obj.connectors[0], position);\n }\n }\n else {\n return this.findElementUnderMouse(obj, position);\n }\n return null;\n };\n ObjectFinder.prototype.findElementUnderMouse = function (obj, position, padding) {\n return this.findTargetElement(obj.wrapper, position, padding);\n };\n /** @private */\n ObjectFinder.prototype.findTargetElement = function (container, position, padding) {\n for (var i = container.children.length - 1; i >= 0; i--) {\n var element = container.children[i];\n if (element && element.outerBounds.containsPoint(position)) {\n if (element instanceof Container) {\n var target = this.findTargetElement(element, position);\n if (target) {\n return target;\n }\n }\n if (element.bounds.containsPoint(position)) {\n return element;\n }\n }\n }\n if (container.bounds.containsPoint(position, padding) && container.style.fill !== 'none') {\n return container;\n }\n return null;\n };\n return ObjectFinder;\n}());\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Defines the BackgroundImage of diagram\n */\nvar Layer = /** @class */ (function (_super) {\n __extends(Layer, _super);\n // tslint:disable-next-line:no-any\n function Layer(parent, propName, defaultValue, isArray) {\n var _this = _super.call(this, parent, propName, defaultValue, isArray) || this;\n /** @private */\n _this.objectZIndex = -1;\n /** @private */\n _this.zIndexTable = {};\n _this.objects = [];\n return _this;\n }\n __decorate([\n Property('')\n ], Layer.prototype, \"id\", void 0);\n __decorate([\n Property(true)\n ], Layer.prototype, \"visible\", void 0);\n __decorate([\n Property(false)\n ], Layer.prototype, \"lock\", void 0);\n __decorate([\n Property()\n ], Layer.prototype, \"objects\", void 0);\n __decorate([\n Property()\n ], Layer.prototype, \"addInfo\", void 0);\n __decorate([\n Property(-1)\n ], Layer.prototype, \"zIndex\", void 0);\n return Layer;\n}(ChildProperty));\nexport { Layer };\n","import { Connector, getBezierPoints, isEmptyVector } from '../objects/connector';\nimport { Node, BpmnSubEvent } from '../objects/node';\nimport { PathElement } from '../core/elements/path-element';\nimport { TextElement } from '../core/elements/text-element';\nimport { OrthogonalSegment } from '../objects/connector';\nimport { Rect } from '../primitives/rect';\nimport { identityMatrix, rotateMatrix, transformPointByMatrix, scaleMatrix } from './../primitives/matrix';\nimport { cloneObject as clone, cloneObject, getBounds, rotatePoint } from './../utility/base-util';\nimport { completeRegion, getTooltipOffset, sort, findPortIndex } from './../utility/diagram-util';\nimport { randomId } from './../utility/base-util';\nimport { Selector } from './selector';\nimport { hasSelection, isSelected, hasSingleConnection } from './actions';\nimport { DiagramEvent } from '../enum/enum';\nimport { canSelect, canMove, canRotate, canDragSourceEnd, canDragTargetEnd, canSingleSelect, canDrag } from './../utility/constraints-util';\nimport { canMultiSelect, canContinuousDraw } from './../utility/constraints-util';\nimport { canPanX, canPanY, canPageEditable } from './../utility/constraints-util';\nimport { SnapConstraints, DiagramTools, DiagramAction } from '../enum/enum';\nimport { getDiagramElement, getAdornerLayerSvg, getHTMLLayer, getAdornerLayer } from '../utility/dom-util';\nimport { Point } from '../primitives/point';\nimport { Size } from '../primitives/size';\nimport { getObjectType } from './../utility/diagram-util';\nimport { Layer } from '../diagram/layer';\nimport { SelectorConstraints } from '../enum/enum';\nimport { remove } from '@syncfusion/ej2-base';\nimport { getOppositeDirection, getPortDirection } from './../utility/connector';\n/**\n * Defines the behavior of commands\n */\nvar CommandHandler = /** @class */ (function () {\n function CommandHandler(diagram) {\n this.clipboardData = {};\n this.connectorsTable = [];\n this.processTable = {};\n this.childTable = {};\n this.parentTable = {};\n this.diagram = diagram;\n }\n Object.defineProperty(CommandHandler.prototype, \"snappingModule\", {\n get: function () {\n return this.diagram.snappingModule;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CommandHandler.prototype, \"layoutAnimateModule\", {\n get: function () {\n return this.diagram.layoutAnimateModule;\n },\n enumerable: true,\n configurable: true\n });\n /** @private */\n CommandHandler.prototype.startTransaction = function (protectChange) {\n this.state = { element: this.diagram.selectedItems, backup: null };\n if (protectChange) {\n this.diagram.protectPropertyChange(true);\n }\n getAdornerLayer(this.diagram.element.id).style.pointerEvents = 'none';\n };\n /** @private */\n CommandHandler.prototype.endTransaction = function (protectChange) {\n this.state = null;\n if (protectChange) {\n this.diagram.protectPropertyChange(false);\n }\n getAdornerLayer(this.diagram.element.id).style.pointerEvents = 'all';\n };\n /**\n * @private\n */\n CommandHandler.prototype.showTooltip = function (node, position, content, toolName, isTooltipVisible) {\n var _this = this;\n if (isTooltipVisible) {\n this.diagram.tooltipObject.position = 'BottomCenter';\n this.diagram.tooltipObject.animation = { open: { delay: 0, duration: 0 } };\n this.diagram.tooltip.relativeMode = toolName === 'ConnectTool' ? 'Mouse' : 'Object';\n this.diagram.tooltipObject.openDelay = 0;\n this.diagram.tooltipObject.closeDelay = 0;\n }\n this.diagram.tooltipObject.content = content;\n var tooltipOffset = getTooltipOffset(this.diagram, { x: position.x, y: position.y }, node);\n this.diagram.tooltipObject.offsetX = tooltipOffset.x + (toolName === 'ConnectTool' ? 10 : 0);\n this.diagram.tooltipObject.offsetY = tooltipOffset.y + 10;\n this.diagram.tooltipObject.dataBind();\n if (isTooltipVisible) {\n setTimeout(function () {\n _this.diagram.tooltipObject.open(_this.diagram.element);\n }, 1);\n }\n };\n /**\n * @private\n */\n CommandHandler.prototype.closeTooltip = function () {\n this.diagram.tooltipObject.close();\n };\n /**\n * @private\n */\n CommandHandler.prototype.canEnableDefaultTooltip = function () {\n if (this.diagram.selectedItems.constraints & SelectorConstraints.ToolTip) {\n return true;\n }\n else {\n return false;\n }\n };\n /**\n * @private\n */\n CommandHandler.prototype.updateSelector = function () {\n this.diagram.updateSelector();\n };\n /**\n * @private\n */\n CommandHandler.prototype.triggerEvent = function (event, args) {\n if (event === DiagramEvent.drop || event === DiagramEvent.positionChange ||\n event === DiagramEvent.connectionChange) {\n if (this.diagram.currentSymbol) {\n return;\n }\n if (event === DiagramEvent.drop) {\n args.source = this.diagram;\n }\n if (this.diagram.currentDrawingObject) {\n return;\n }\n }\n this.diagram.triggerEvent(event, args);\n };\n /**\n * @private\n */\n CommandHandler.prototype.dragOverElement = function (args, currentPosition) {\n if (this.diagram.currentSymbol) {\n var dragOverArg = {\n element: args.source, target: args.target, mousePosition: currentPosition, diagram: this.diagram\n };\n this.triggerEvent(DiagramEvent.dragOver, dragOverArg);\n }\n };\n /**\n * @private\n */\n CommandHandler.prototype.disConnect = function (obj, endPoint) {\n var oldChanges = {};\n var newChanges = {};\n var selectorModel;\n var connector;\n if (obj instanceof Selector) {\n selectorModel = obj;\n connector = selectorModel.connectors[0];\n }\n else if (obj instanceof Connector && this.diagram.currentDrawingObject) {\n connector = this.diagram.currentDrawingObject;\n }\n if (obj && connector && (hasSingleConnection(this.diagram) || this.diagram.currentDrawingObject)) {\n if (endPoint && (endPoint === 'ConnectorSourceEnd' || endPoint === 'ConnectorTargetEnd')) {\n var nodeEndId = endPoint === 'ConnectorSourceEnd' ? 'sourceID' : 'targetID';\n var portEndId = endPoint === 'ConnectorSourceEnd' ? 'sourcePortID' : 'targetPortID';\n if (connector[nodeEndId]) {\n oldChanges[nodeEndId] = connector[nodeEndId];\n connector[nodeEndId] = '';\n newChanges[nodeEndId] = connector[nodeEndId];\n if (connector.sourcePortID || connector.targetPortID) {\n oldChanges[portEndId] = connector[portEndId];\n connector[portEndId] = '';\n newChanges[portEndId] = connector[portEndId];\n }\n this.connectionEventChange(connector, oldChanges, newChanges, endPoint);\n }\n }\n else if ((endPoint !== 'OrthoThumb' && endPoint !== 'SegmentEnd') && (connector.sourceID || connector.targetID)) {\n oldChanges = {\n sourceID: connector.sourceID, sourcePortID: connector.sourcePortID,\n targetID: connector.targetID, targetPortID: connector.targetPortID\n };\n connector.sourceID = '';\n connector.sourcePortID = '';\n connector.targetID = '';\n connector.targetPortID = '';\n newChanges = {\n sourceID: connector.sourceID, sourcePortID: connector.sourcePortID,\n targetID: connector.targetID, targetPortID: connector.targetPortID\n };\n var arg = {\n connector: connector, oldValue: oldChanges,\n newValue: newChanges, cancel: false, state: 'Changing', connectorEnd: endPoint\n };\n this.triggerEvent(DiagramEvent.connectionChange, arg);\n if (arg.cancel) {\n connector.sourceID = oldChanges.sourceID;\n connector.sourcePortID = oldChanges.sourcePortID;\n connector.targetID = oldChanges.targetID;\n connector.targetPortID = oldChanges.targetPortID;\n }\n else {\n this.diagram.connectorPropertyChange(connector, oldChanges, newChanges);\n this.diagram.updateDiagramObject(connector);\n arg = {\n connector: connector, oldValue: oldChanges,\n newValue: newChanges, cancel: false, state: 'Changed', connectorEnd: endPoint\n };\n this.triggerEvent(DiagramEvent.connectionChange, arg);\n }\n }\n }\n };\n CommandHandler.prototype.connectionEventChange = function (connector, oldChanges, newChanges, endPoint) {\n var nodeEndId = endPoint === 'ConnectorSourceEnd' ? 'sourceID' : 'targetID';\n var portEndId = endPoint === 'ConnectorSourceEnd' ? 'sourcePortID' : 'targetPortID';\n var arg = {\n connector: connector, oldValue: { nodeId: oldChanges[nodeEndId], portId: oldChanges[portEndId] },\n newValue: { nodeId: newChanges[nodeEndId], portId: newChanges[portEndId] },\n cancel: false, state: 'Changing', connectorEnd: endPoint\n };\n this.triggerEvent(DiagramEvent.connectionChange, arg);\n if (arg.cancel) {\n connector[nodeEndId] = oldChanges[nodeEndId];\n connector[portEndId] = oldChanges[portEndId];\n newChanges = oldChanges;\n }\n else {\n this.diagram.connectorPropertyChange(connector, oldChanges, newChanges);\n this.diagram.updateDiagramObject(connector);\n arg = {\n connector: connector, oldValue: { nodeId: oldChanges[nodeEndId], portId: oldChanges[portEndId] },\n newValue: { nodeId: newChanges[nodeEndId], portId: newChanges[portEndId] },\n cancel: false, state: 'Changed', connectorEnd: endPoint\n };\n this.triggerEvent(DiagramEvent.connectionChange, arg);\n }\n };\n /**\n * @private\n */\n CommandHandler.prototype.findTarget = function (element, argsTarget, source) {\n var target;\n if (argsTarget instanceof Node) {\n if (element && element.id === argsTarget.id + '_content') {\n return argsTarget;\n }\n if (source && argsTarget.shape.type === 'Bpmn' && argsTarget.shape.shape === 'Activity') {\n if (argsTarget.shape.activity.subProcess.type === 'Transaction') {\n var transaction = argsTarget.shape.activity.subProcess.transaction;\n if (transaction.success.visible && element.id.indexOf(argsTarget.id + '_success') === 0) {\n return transaction.success;\n }\n if (transaction.cancel.visible && element.id.indexOf(argsTarget.id + '_cancel') === 0) {\n return transaction.cancel;\n }\n if (transaction.failure.visible && element.id.indexOf(argsTarget.id + '_failure') === 0) {\n return transaction.failure;\n }\n }\n }\n if (element instanceof PathElement) {\n for (var i = 0; i < argsTarget.ports.length; i++) {\n var port = argsTarget.ports[i];\n if (element.id === argsTarget.id + '_' + port.id) {\n return port;\n }\n }\n }\n }\n return argsTarget;\n };\n /**\n * @private\n */\n CommandHandler.prototype.canDisconnect = function (endPoint, args, targetPortId, targetNodeId) {\n var selector;\n var connect;\n if (args.source instanceof Selector) {\n selector = args.source;\n connect = selector.connectors[0];\n }\n else if (args.source instanceof Connector && this.diagram.currentDrawingObject) {\n connect = this.diagram.currentDrawingObject;\n }\n var targetObject = this.findTarget(args.targetWrapper, args.target, endPoint === 'ConnectorSourceEnd');\n var nodeEnd = endPoint === 'ConnectorSourceEnd' ? 'sourceID' : 'targetID';\n var portEnd = endPoint === 'ConnectorSourceEnd' ? 'sourcePortID' : 'targetPortID';\n if (connect[nodeEnd] !== targetNodeId || connect[portEnd] !== targetPortId) {\n return true;\n }\n return false;\n };\n /**\n * @private\n */\n CommandHandler.prototype.connect = function (endPoint, args) {\n var newChanges = {};\n var oldChanges = {};\n var oldNodeId;\n var oldPortId;\n var selectorModel;\n var connector;\n if (args.source instanceof Selector) {\n selectorModel = args.source;\n connector = selectorModel.connectors[0];\n }\n else if (args.source instanceof Connector && this.diagram.currentDrawingObject) {\n connector = this.diagram.currentDrawingObject;\n }\n var target = this.findTarget(args.targetWrapper, args.target, endPoint === 'ConnectorSourceEnd');\n var nodeEndId = endPoint === 'ConnectorSourceEnd' ? 'sourceID' : 'targetID';\n var portEndId = endPoint === 'ConnectorSourceEnd' ? 'sourcePortID' : 'targetPortID';\n if (target instanceof Node) {\n oldChanges[nodeEndId] = connector[nodeEndId];\n connector[nodeEndId] = target.id;\n newChanges[nodeEndId] = connector[nodeEndId];\n oldChanges[portEndId] = connector[portEndId];\n this.connectionEventChange(connector, oldChanges, newChanges, endPoint);\n }\n else {\n oldNodeId = connector[nodeEndId];\n oldPortId = connector[portEndId];\n connector[portEndId] = target.id;\n connector[nodeEndId] = args.target.id;\n newChanges[nodeEndId] = connector[nodeEndId];\n newChanges[portEndId] = connector[portEndId];\n var arg = {\n connector: connector, oldValue: { nodeId: oldNodeId, portId: oldPortId },\n newValue: { nodeId: newChanges[nodeEndId], portId: newChanges[portEndId] },\n cancel: false, state: 'Changing', connectorEnd: endPoint\n };\n this.triggerEvent(DiagramEvent.connectionChange, arg);\n if (arg.cancel) {\n connector[nodeEndId] = oldNodeId;\n connector[portEndId] = oldPortId;\n newChanges[nodeEndId] = oldNodeId;\n newChanges[portEndId] = oldPortId;\n }\n else {\n this.diagram.connectorPropertyChange(connector, {}, newChanges);\n this.diagram.updateDiagramObject(connector);\n arg = {\n connector: connector, oldValue: { nodeId: oldNodeId, portId: oldPortId },\n newValue: { nodeId: newChanges[nodeEndId], portId: newChanges[portEndId] }, cancel: false,\n state: 'Changed', connectorEnd: endPoint\n };\n this.triggerEvent(DiagramEvent.connectionChange, arg);\n }\n }\n this.renderHighlighter(args, undefined, endPoint === 'ConnectorSourceEnd');\n };\n /** @private */\n CommandHandler.prototype.cut = function () {\n var index;\n this.clipboardData.pasteIndex = 0;\n if (this.diagram.undoRedoModule) {\n this.diagram.historyList.startGroupAction();\n }\n this.clipboardData.clipObject = this.copyObjects();\n if (this.diagram.undoRedoModule) {\n this.diagram.historyList.endGroupAction();\n }\n if (this.diagram.mode !== 'SVG') {\n this.diagram.refreshDiagramLayer();\n }\n };\n /** @private */\n CommandHandler.prototype.addLayer = function (layer, objects) {\n layer.id = layer.id || randomId();\n layer.zIndex = this.diagram.layers.length;\n layer = new Layer(this.diagram, 'layers', layer, true);\n layer.objectZIndex = -1;\n layer.zIndexTable = {};\n this.diagram.layers.push(layer);\n this.diagram.layerZIndexTable[layer.zIndex] = layer.id;\n this.diagram.activeLayer = layer;\n var layers = layer.objects;\n if (objects) {\n for (var i = 0; i < objects.length; i++) {\n this.diagram.add(objects[i]);\n }\n }\n };\n /** @private */\n CommandHandler.prototype.getObjectLayer = function (objectName) {\n var layers = this.diagram.layers;\n for (var i = 0; i < layers.length; i++) {\n var objIndex = layers[i].objects.indexOf(objectName);\n if (objIndex > -1) {\n return layers[i];\n }\n }\n return this.diagram.activeLayer;\n };\n /** @private */\n CommandHandler.prototype.getLayer = function (layerName) {\n var layers = this.diagram.layers;\n for (var i = 0; i < layers.length; i++) {\n if (layers[i].id === layerName) {\n return layers[i];\n }\n }\n return undefined;\n };\n /** @private */\n CommandHandler.prototype.removeLayer = function (layerId) {\n var layers = this.getLayer(layerId);\n if (layers) {\n var index = this.diagram.layers.indexOf(layers);\n var layerObject = layers.objects;\n for (var i = layerObject.length - 1; i >= 0; i--) {\n this.diagram.unSelect(this.diagram.nameTable[layerObject[i]]);\n this.diagram.remove(this.diagram.nameTable[layerObject[i]]);\n if (layers.id !== 'default_layer') {\n if (this.diagram.activeLayer.id === layerId) {\n this.diagram.activeLayer = this.diagram.layers[this.diagram.layers.length - 1];\n }\n }\n }\n delete this.diagram.layerZIndexTable[layers.zIndex];\n this.diagram.layers.splice(index, 1);\n if (this.diagram.mode !== 'SVG') {\n this.diagram.refreshDiagramLayer();\n }\n }\n };\n /** @private */\n CommandHandler.prototype.moveObjects = function (objects, targetLayer) {\n var layer = this.getLayer(targetLayer) || this.diagram.activeLayer;\n this.diagram.setActiveLayer(layer.id);\n var targerNodes;\n for (var _i = 0, objects_1 = objects; _i < objects_1.length; _i++) {\n var i = objects_1[_i];\n var layer_1 = this.getObjectLayer(i);\n var index = layer_1.objects.indexOf(i);\n if (index > -1) {\n targerNodes = this.diagram.nameTable[i];\n this.diagram.unSelect(targerNodes);\n this.diagram.remove(this.diagram.nameTable[i]);\n this.diagram.add(targerNodes);\n }\n }\n };\n /** @private */\n CommandHandler.prototype.cloneLayer = function (layerName) {\n var layers = this.diagram.layers;\n var layer = this.getLayer(layerName);\n if (layer) {\n var cloneObject_1 = [];\n var newlayer = {\n id: layerName + '_' + randomId(), objects: [], visible: true, lock: false\n };\n this.addLayer(newlayer);\n newlayer.zIndex = this.diagram.layers.length - 1;\n var multiSelect = cloneObject_1.length !== 1;\n for (var _i = 0, _a = layer.objects; _i < _a.length; _i++) {\n var obj = _a[_i];\n cloneObject_1.push(this.diagram.nameTable[obj]);\n }\n this.paste(cloneObject_1);\n }\n };\n /** @private */\n CommandHandler.prototype.copy = function () {\n this.clipboardData.pasteIndex = 1;\n this.clipboardData.clipObject = this.copyObjects();\n return this.clipboardData.clipObject;\n };\n /** @private */\n CommandHandler.prototype.copyObjects = function () {\n var selectedItems = [];\n var obj = [];\n this.clipboardData.childTable = {};\n if (this.diagram.selectedItems.connectors.length > 0) {\n selectedItems = this.diagram.selectedItems.connectors;\n for (var j = 0; j < selectedItems.length; j++) {\n var element = clone((selectedItems[j]));\n obj.push(element);\n }\n }\n if (this.diagram.selectedItems.nodes.length > 0) {\n selectedItems = selectedItems.concat(this.diagram.selectedItems.nodes);\n for (var j = 0; j < this.diagram.selectedItems.nodes.length; j++) {\n var node = clone(this.diagram.selectedItems.nodes[j]);\n var processTable = {};\n this.copyProcesses(node);\n obj.push(clone(node));\n var matrix = identityMatrix();\n rotateMatrix(matrix, -node.rotateAngle, node.offsetX, node.offsetY);\n if (node.children) {\n var childTable = this.clipboardData.childTable;\n var tempNode = void 0;\n var elements = [];\n var nodes = this.getAllDescendants(node, elements, true);\n for (var i = 0; i < nodes.length; i++) {\n tempNode = this.diagram.nameTable[nodes[i].id];\n var clonedObject = childTable[tempNode.id] = clone(tempNode);\n var newOffset = transformPointByMatrix(matrix, { x: clonedObject.wrapper.offsetX, y: clonedObject.wrapper.offsetY });\n if (tempNode instanceof Node) {\n clonedObject.offsetX = newOffset.x;\n clonedObject.offsetY = newOffset.y;\n clonedObject.rotateAngle -= node.rotateAngle;\n }\n }\n this.clipboardData.childTable = childTable;\n }\n }\n }\n if (this.clipboardData.pasteIndex === 0) {\n this.startGroupAction();\n for (var _i = 0, selectedItems_1 = selectedItems; _i < selectedItems_1.length; _i++) {\n var item = selectedItems_1[_i];\n if (this.diagram.nameTable[item.id]) {\n this.diagram.remove(item);\n }\n }\n this.endGroupAction();\n }\n this.sortByZIndex(obj, 'zIndex');\n return obj;\n };\n CommandHandler.prototype.copyProcesses = function (node) {\n if (node.shape.type === 'Bpmn' && node.shape.activity &&\n node.shape.activity.subProcess.processes &&\n node.shape.activity.subProcess.processes.length > 0) {\n var processes = node.shape.activity.subProcess.processes;\n for (var _i = 0, processes_1 = processes; _i < processes_1.length; _i++) {\n var i = processes_1[_i];\n this.processTable[i] = (clone(this.diagram.nameTable[i]));\n if (this.processTable[i].shape.activity.subProcess.processes &&\n this.processTable[i].shape.activity.subProcess.processes.length > 0) {\n this.copyProcesses(this.processTable[i]);\n }\n }\n this.clipboardData.processTable = this.processTable;\n }\n };\n /** @private */\n CommandHandler.prototype.group = function () {\n var propName = 'isProtectedOnChange';\n var protectedChange = this.diagram[propName];\n this.diagram.protectPropertyChange(true);\n this.diagram.diagramActions = this.diagram.diagramActions | DiagramAction.Group;\n var selectedItems = [];\n var obj = {};\n obj.id = 'group' + randomId();\n obj = new Node(this.diagram, 'nodes', obj, true);\n obj.children = [];\n selectedItems = this.diagram.selectedItems.nodes;\n selectedItems = selectedItems.concat(this.diagram.selectedItems.connectors);\n for (var i = 0; i < selectedItems.length; i++) {\n if (!selectedItems[i].parentId) {\n obj.children.push(selectedItems[i].id);\n }\n }\n this.diagram.add(obj);\n var entry = { type: 'Group', undoObject: obj, redoObject: obj, category: 'Internal' };\n this.addHistoryEntry(entry);\n this.diagram.diagramActions = this.diagram.diagramActions & ~DiagramAction.Group;\n this.diagram.protectPropertyChange(protectedChange);\n };\n /** @private */\n CommandHandler.prototype.unGroup = function (obj) {\n var propName = 'isProtectedOnChange';\n var protectedChange = this.diagram[propName];\n this.diagram.protectPropertyChange(true);\n this.diagram.diagramActions = this.diagram.diagramActions | DiagramAction.Group;\n var selectedItems = [];\n if (obj) {\n selectedItems.push(obj);\n }\n else {\n selectedItems = this.diagram.selectedItems.nodes;\n }\n for (var i = 0; i < selectedItems.length; i++) {\n var node = selectedItems[i];\n var entry = {\n type: 'UnGroup', undoObject: cloneObject(node),\n redoObject: cloneObject(node), category: 'Internal'\n };\n if (!(this.diagram.diagramActions & DiagramAction.UndoRedo)) {\n this.addHistoryEntry(entry);\n }\n if (node.children) {\n var parentNode = this.diagram.nameTable[node.parentId];\n for (var j = node.children.length - 1; j >= 0; j--) {\n (this.diagram.nameTable[node.children[0]]).parentId = '';\n this.diagram.deleteChild(this.diagram.nameTable[node.children[0]], node);\n if (node.parentId && node.children[0]) {\n this.diagram.addChild(parentNode, node.children[0]);\n }\n }\n if (node.parentId) {\n this.diagram.deleteChild(node, parentNode);\n }\n }\n this.diagram.removeNode(node);\n this.clearSelection();\n }\n this.diagram.diagramActions = this.diagram.diagramActions & ~DiagramAction.Group;\n this.diagram.protectPropertyChange(protectedChange);\n };\n /** @private */\n CommandHandler.prototype.paste = function (obj) {\n if (obj || this.clipboardData.clipObject) {\n this.diagram.protectPropertyChange(true);\n var copiedItems = obj ? this.getNewObject(obj) :\n this.clipboardData.clipObject;\n if (copiedItems) {\n var multiSelect = copiedItems.length !== 1;\n var groupAction = false;\n var objectTable = {};\n var keyTable = {};\n if (this.clipboardData.pasteIndex !== 0) {\n this.clearSelection();\n }\n if (this.diagram.undoRedoModule) {\n groupAction = true;\n this.diagram.historyList.startGroupAction();\n }\n for (var _i = 0, copiedItems_1 = copiedItems; _i < copiedItems_1.length; _i++) {\n var copy = copiedItems_1[_i];\n objectTable[copy.id] = copy;\n }\n for (var j = 0; j < copiedItems.length; j++) {\n var copy = copiedItems[j];\n if (getObjectType(copy) === Connector) {\n var clonedObj = clone(copy);\n var nodeId = clonedObj.sourceID;\n clonedObj.sourceID = '';\n if (objectTable[nodeId] && keyTable[nodeId]) {\n clonedObj.sourceID = keyTable[nodeId];\n }\n nodeId = clonedObj.targetID;\n clonedObj.targetID = '';\n if (objectTable[nodeId] && keyTable[nodeId]) {\n clonedObj.targetID = keyTable[nodeId];\n }\n var newObj = this.cloneConnector(clonedObj, multiSelect);\n keyTable[copy.id] = newObj.id;\n }\n else {\n var newNode = this.cloneNode(copy, multiSelect);\n //bpmn text annotations will not be pasted\n if (newNode) {\n keyTable[copy.id] = newNode.id;\n var edges = copy.inEdges;\n if (edges) {\n for (var _a = 0, edges_1 = edges; _a < edges_1.length; _a++) {\n var edge = edges_1[_a];\n if (objectTable[edge] && keyTable[edge]) {\n var newConnector = this.diagram.nameTable[keyTable[edge]];\n newConnector.targetID = keyTable[copy.id];\n this.diagram.connectorPropertyChange(newConnector, { targetID: '' }, { targetID: newConnector.targetID });\n }\n }\n }\n edges = copy.outEdges;\n if (edges) {\n for (var _b = 0, edges_2 = edges; _b < edges_2.length; _b++) {\n var edge = edges_2[_b];\n if (objectTable[edge] && keyTable[edge]) {\n var newConnector = this.diagram.nameTable[keyTable[edge]];\n newConnector.sourceID = keyTable[copy.id];\n this.diagram.connectorPropertyChange(newConnector, { sourceID: '' }, { sourceID: newConnector.sourceID });\n }\n }\n }\n }\n }\n }\n if (groupAction === true) {\n this.diagram.historyList.endGroupAction();\n groupAction = false;\n }\n if (this.diagram.mode !== 'SVG') {\n this.diagram.refreshDiagramLayer();\n }\n this.clipboardData.pasteIndex++;\n this.diagram.protectPropertyChange(false);\n }\n }\n };\n CommandHandler.prototype.getNewObject = function (obj) {\n var newObj;\n var newobjs = [];\n this.clipboardData.pasteIndex = 1;\n for (var i = 0; i < obj.length; i++) {\n newObj = cloneObject(obj[i]);\n newobjs.push(newObj);\n }\n return newobjs;\n };\n CommandHandler.prototype.cloneConnector = function (connector, multiSelect) {\n var newConnector;\n var cloneObject = clone(connector);\n this.translateObject(cloneObject);\n cloneObject.zIndex = -1;\n newConnector = this.diagram.add(cloneObject);\n this.selectObjects([newConnector], multiSelect);\n return newConnector;\n };\n CommandHandler.prototype.cloneNode = function (node, multiSelect, children) {\n var newNode;\n var connectorsTable = {};\n var cloneObject = clone(node);\n var process;\n if (node.shape && node.shape.type === 'Bpmn' && node.shape.activity &&\n node.shape.activity.subProcess.processes\n && node.shape.activity.subProcess.processes.length) {\n process = cloneObject.shape.activity.subProcess.processes;\n cloneObject.zIndex = -1;\n cloneObject.shape.activity.subProcess.processes = [];\n }\n if (node.children && node.children.length && (!children || !children.length)) {\n newNode = this.cloneGroup(node, multiSelect);\n }\n else {\n this.translateObject(cloneObject);\n cloneObject.zIndex = -1;\n if (children) {\n cloneObject.children = children;\n }\n newNode = this.diagram.add(cloneObject);\n }\n for (var _i = 0, _a = Object.keys(connectorsTable); _i < _a.length; _i++) {\n var i = _a[_i];\n this.diagram.add(connectorsTable[i]);\n }\n if (process && process.length) {\n newNode.shape.activity.subProcess.processes = process;\n this.cloneSubProcesses(newNode);\n }\n if (newNode) {\n this.selectObjects([newNode], multiSelect);\n }\n return newNode;\n };\n CommandHandler.prototype.cloneSubProcesses = function (node) {\n var connector = [];\n var temp = {};\n if (node.shape.type === 'Bpmn' && node.shape.activity &&\n node.shape.activity.subProcess.processes\n && node.shape.activity.subProcess.processes.length) {\n var process = node.shape.activity.subProcess.processes;\n for (var g = 0; g < process.length; g++) {\n var child = this.diagram.nameTable[process[g]] || this.clipboardData.processTable[process[g]];\n for (var _i = 0, _a = child.outEdges; _i < _a.length; _i++) {\n var j = _a[_i];\n if (connector.indexOf(j) < 0) {\n connector.push(j);\n }\n }\n for (var _b = 0, _c = child.inEdges; _b < _c.length; _b++) {\n var j = _c[_b];\n if (connector.indexOf(j) < 0) {\n connector.push(j);\n }\n }\n var innerChild = cloneObject(this.clipboardData.processTable[process[g]]);\n innerChild.processId = node.id;\n var newNode = this.cloneNode(innerChild, false);\n temp[process[g]] = newNode.id;\n process[g] = newNode.id;\n this.diagram.addProcess(newNode, node.id);\n for (var _d = 0, connector_1 = connector; _d < connector_1.length; _d++) {\n var i = connector_1[_d];\n var node_1 = this.diagram.nameTable[i] || this.diagram.connectorTable[i];\n var clonedNode = cloneObject(node_1);\n if (temp[clonedNode.sourceID] && temp[clonedNode.targetID]) {\n clonedNode.zIndex = -1;\n clonedNode.id += randomId();\n clonedNode.sourceID = temp[clonedNode.sourceID];\n clonedNode.targetID = temp[clonedNode.targetID];\n connector.splice(connector.indexOf(i), 1);\n this.diagram.add(clonedNode);\n }\n }\n }\n }\n };\n CommandHandler.prototype.cloneGroup = function (obj, multiSelect) {\n var value;\n var newChildren = [];\n var children = [];\n children = children.concat(obj.children);\n if (this.clipboardData.childTable) {\n for (var i = 0; i < children.length; i++) {\n var childObj = this.clipboardData.childTable[children[i]];\n if (childObj) {\n var newObj = void 0;\n if (getObjectType(childObj) === Connector) {\n newObj = this.cloneConnector(childObj, multiSelect);\n }\n else {\n newObj = this.cloneNode(childObj, multiSelect);\n }\n newChildren.push(newObj.id);\n }\n }\n }\n var parentObj = this.cloneNode(obj, multiSelect, newChildren);\n return parentObj;\n };\n /** @private */\n CommandHandler.prototype.translateObject = function (obj) {\n obj.id += randomId();\n var diff = this.clipboardData.pasteIndex * 10;\n if (getObjectType(obj) === Connector) {\n obj.sourcePoint = {\n x: obj.sourcePoint.x + diff, y: obj.sourcePoint.y + diff\n };\n obj.targetPoint = {\n x: obj.targetPoint.x + diff, y: obj.targetPoint.y + diff\n };\n if (obj.type === 'Bezier') {\n var segments = obj.segments;\n for (var i = 0; i < segments.length; i++) {\n if (!Point.isEmptyPoint(segments[i].point1)) {\n segments[i].point1 = {\n x: segments[i].point1.x + diff, y: segments[i].point1.y + diff\n };\n }\n if (!Point.isEmptyPoint(segments[i].point2)) {\n segments[i].point2 = {\n x: segments[i].point2.x + diff, y: segments[i].point2.y + diff\n };\n }\n }\n }\n if (obj.type === 'Straight' || obj.type === 'Bezier') {\n if (obj.segments && obj.segments.length > 0) {\n var segments = obj.segments;\n for (var i = 0; i < segments.length - 1; i++) {\n segments[i].point.x += diff;\n segments[i].point.y += diff;\n }\n }\n }\n }\n else {\n obj.offsetX += diff;\n obj.offsetY += diff;\n }\n };\n /**\n * @private\n */\n CommandHandler.prototype.drawObject = function (obj) {\n var newObj;\n var cloneObject;\n cloneObject = clone(this.diagram.drawingObject);\n for (var _i = 0, _a = Object.keys(obj); _i < _a.length; _i++) {\n var prop = _a[_i];\n cloneObject[prop] = obj[prop];\n }\n if (getObjectType(this.diagram.drawingObject) === Node) {\n newObj = new Node(this.diagram, 'nodes', cloneObject, true);\n newObj.id = (this.diagram.drawingObject.id || 'node') + randomId();\n this.diagram.initObject(newObj);\n }\n else {\n newObj = new Connector(this.diagram, 'connectors', cloneObject, true);\n newObj.id = (this.diagram.drawingObject.id || 'connector') + randomId();\n this.diagram.initObject(newObj);\n }\n this.diagram.updateDiagramObject(newObj);\n this.diagram.currentDrawingObject = newObj;\n return newObj;\n };\n /**\n * @private\n */\n CommandHandler.prototype.addObjectToDiagram = function (obj) {\n var newObj;\n this.diagram.removeFromAQuad(obj);\n this.diagram.removeObjectsFromLayer(this.diagram.nameTable[obj.id]);\n delete this.diagram.nameTable[obj.id];\n newObj = this.diagram.add(obj);\n if (this.diagram.mode !== 'SVG') {\n this.diagram.refreshDiagramLayer();\n }\n this.selectObjects([newObj]);\n if (obj && (!(canContinuousDraw(this.diagram)))) {\n this.diagram.tool &= ~DiagramTools.DrawOnce;\n this.diagram.currentDrawingObject = undefined;\n }\n };\n /**\n * @private\n */\n CommandHandler.prototype.addText = function (obj, currentPosition) {\n var annotation = this.diagram.findElementUnderMouse(obj, currentPosition);\n this.diagram.startTextEdit(obj, annotation instanceof TextElement ? (annotation.id).split('_')[1] : undefined);\n };\n /** @private */\n CommandHandler.prototype.selectObjects = function (obj, multipleSelection, oldValue) {\n var arg = {\n oldValue: oldValue ? oldValue : [], newValue: obj, cause: this.diagram.diagramActions,\n state: 'Changing', type: 'Addition', cancel: false\n };\n var select = true;\n this.diagram.triggerEvent(DiagramEvent.selectionChange, arg);\n var canDoMultipleSelection = canMultiSelect(this.diagram);\n var canDoSingleSelection = canSingleSelect(this.diagram);\n if (canDoSingleSelection || canDoMultipleSelection) {\n if (!canDoMultipleSelection && ((obj.length > 1) || (multipleSelection && obj.length === 1))) {\n if (obj.length === 1) {\n this.clearSelection();\n }\n else {\n return;\n }\n }\n if (!canDoSingleSelection && obj.length === 1 && (!multipleSelection || !hasSelection(this.diagram))) {\n this.clearSelection();\n return;\n }\n }\n if (!arg.cancel) {\n for (var i = 0; i < obj.length; i++) {\n var newObj = obj[i];\n select = true;\n if (!hasSelection(this.diagram)) {\n this.select(newObj, i > 0 || multipleSelection, true);\n }\n else {\n if ((i > 0 || multipleSelection) && newObj.children && !newObj.parentId) {\n for (var i_1 = 0; i_1 < this.diagram.selectedItems.nodes.length; i_1++) {\n var parentNode = this.diagram.nameTable[this.diagram.selectedItems.nodes[i_1].parentId];\n if (parentNode) {\n parentNode = this.findParent(parentNode);\n if (parentNode) {\n if (newObj.id === parentNode.id) {\n this.selectGroup(newObj);\n }\n }\n }\n }\n }\n this.selectProcesses(newObj);\n select = this.selectBpmnSubProcesses(newObj);\n if (select) {\n this.select(newObj, i > 0 || multipleSelection, true);\n }\n }\n }\n arg = {\n oldValue: oldValue ? oldValue : [], newValue: obj, cause: this.diagram.diagramActions,\n state: 'Changed', type: 'Addition', cancel: false\n };\n this.diagram.triggerEvent(DiagramEvent.selectionChange, arg);\n this.diagram.renderSelector(multipleSelection || (obj && obj.length > 1));\n }\n };\n /**\n * @private\n */\n CommandHandler.prototype.findParent = function (node) {\n if (node.parentId) {\n node = this.diagram.nameTable[node.parentId];\n this.findParent(node);\n }\n return node;\n };\n CommandHandler.prototype.selectProcesses = function (newObj) {\n if (this.hasProcesses(newObj)) {\n var processes = (newObj).shape.activity.subProcess.processes;\n for (var i = 0; i < processes.length; i++) {\n var innerChild = this.diagram.nameTable[processes[i]];\n if (this.hasProcesses(innerChild)) {\n this.selectObjects([innerChild], true);\n }\n this.unSelect(innerChild);\n }\n }\n };\n CommandHandler.prototype.selectGroup = function (newObj) {\n for (var j = 0; j < newObj.children.length; j++) {\n var innerChild = this.diagram.nameTable[newObj.children[j]];\n if (innerChild.children) {\n this.selectGroup(innerChild);\n }\n this.unSelect(this.diagram.nameTable[newObj.children[j]]);\n }\n };\n /**\n * @private\n */\n CommandHandler.prototype.selectBpmnSubProcesses = function (node) {\n var select = true;\n var parent;\n if (node.processId) {\n if (isSelected(this.diagram, this.diagram.nameTable[node.processId])) {\n select = false;\n }\n else {\n select = this.selectBpmnSubProcesses(this.diagram.nameTable[node.processId]);\n }\n }\n else if (node instanceof Connector) {\n if (node.sourceID && this.diagram.nameTable[node.sourceID] &&\n this.diagram.nameTable[node.sourceID].processId) {\n parent = this.diagram.nameTable[node.sourceID].processId;\n }\n if (node.targetID && this.diagram.nameTable[node.targetID] &&\n this.diagram.nameTable[node.targetID].processId) {\n parent = this.diagram.nameTable[node.targetID].processId;\n }\n if (parent) {\n if (isSelected(this.diagram, this.diagram.nameTable[parent])) {\n return false;\n }\n else {\n select = this.selectBpmnSubProcesses(this.diagram.nameTable[parent]);\n }\n }\n }\n return select;\n };\n /**\n * @private\n */\n CommandHandler.prototype.hasProcesses = function (node) {\n if (node) {\n if ((node.shape.type === 'Bpmn') && node.shape.activity &&\n node.shape.activity.subProcess.processes &&\n node.shape.activity.subProcess.processes.length > 0) {\n return true;\n }\n }\n return false;\n };\n /** @private */\n CommandHandler.prototype.select = function (obj, multipleSelection, preventUpdate) {\n var hasLayer = this.getObjectLayer(obj.id);\n if ((canSelect(obj) && !(obj instanceof Selector) && !isSelected(this.diagram, obj))\n && (hasLayer && !hasLayer.lock && hasLayer.visible) && obj.wrapper.visible) {\n multipleSelection = hasSelection(this.diagram) ? multipleSelection : false;\n if (!multipleSelection) {\n this.clearSelection();\n }\n var selectorModel = this.diagram.selectedItems;\n var convert = obj;\n if (convert instanceof Node) {\n selectorModel.nodes.push(obj);\n }\n else {\n selectorModel.connectors.push(obj);\n }\n if (!multipleSelection) {\n selectorModel.init(this.diagram);\n if (selectorModel.nodes.length === 1 && selectorModel.connectors.length === 0) {\n selectorModel.rotateAngle = selectorModel.nodes[0].rotateAngle;\n selectorModel.wrapper.rotateAngle = selectorModel.nodes[0].rotateAngle;\n selectorModel.wrapper.pivot = selectorModel.nodes[0].pivot;\n }\n }\n else {\n selectorModel.wrapper.rotateAngle = selectorModel.rotateAngle = 0;\n selectorModel.wrapper.children.push(obj.wrapper);\n }\n if (!preventUpdate) {\n this.diagram.renderSelector(multipleSelection);\n }\n }\n };\n /** @private */\n CommandHandler.prototype.unSelect = function (obj) {\n var objArray = [];\n objArray.push(obj);\n var arg = {\n oldValue: objArray, newValue: [], cause: this.diagram.diagramActions,\n state: 'Changing', type: 'Removal', cancel: false\n };\n if (!this.diagram.currentSymbol) {\n this.diagram.triggerEvent(DiagramEvent.selectionChange, arg);\n }\n if (isSelected(this.diagram, obj)) {\n var selectormodel = this.diagram.selectedItems;\n var index = void 0;\n if (obj instanceof Node) {\n index = selectormodel.nodes.indexOf(obj, 0);\n selectormodel.nodes.splice(index, 1);\n }\n else {\n index = selectormodel.connectors.indexOf(obj, 0);\n selectormodel.connectors.splice(index, 1);\n }\n arg = {\n oldValue: objArray, newValue: [], cause: this.diagram.diagramActions,\n state: 'Changed', type: 'Removal', cancel: false\n };\n if (!arg.cancel) {\n index = selectormodel.wrapper.children.indexOf(obj.wrapper, 0);\n selectormodel.wrapper.children.splice(index, 1);\n this.diagram.updateSelector();\n if (!this.diagram.currentSymbol) {\n this.diagram.triggerEvent(DiagramEvent.selectionChange, arg);\n }\n }\n }\n };\n /** @private */\n CommandHandler.prototype.getChildElements = function (child) {\n var children = [];\n for (var i = 0; i < child.length; i++) {\n var childNode = child[i];\n if (childNode.children && childNode.children.length > 0) {\n children.concat(this.getChildElements(childNode.children));\n }\n else {\n children.push(childNode.id);\n if (childNode instanceof TextElement) {\n children.push(childNode.id + '_text');\n }\n }\n }\n return children;\n };\n CommandHandler.prototype.moveSvgNode = function (nodeId, targetID) {\n var diagramDiv = getDiagramElement(targetID + '_groupElement');\n var backNode = getDiagramElement(nodeId + '_groupElement');\n diagramDiv.parentNode.insertBefore(backNode, diagramDiv);\n };\n /** @private */\n CommandHandler.prototype.sendLayerBackward = function (layerName) {\n var layer = this.getLayer(layerName);\n if (layer && layer.zIndex !== 0) {\n var index = layer.zIndex;\n if (this.diagram.mode === 'SVG') {\n var currentLayerObject = layer.objects;\n var targetObject = this.getLayer(this.diagram.layerZIndexTable[index - 1]).objects[0];\n if (targetObject) {\n for (var _i = 0, currentLayerObject_1 = currentLayerObject; _i < currentLayerObject_1.length; _i++) {\n var obj = currentLayerObject_1[_i];\n this.moveSvgNode(obj, targetObject);\n }\n }\n }\n var targetLayer = this.getLayer(this.diagram.layerZIndexTable[index - 1]);\n targetLayer.zIndex = targetLayer.zIndex + 1;\n layer.zIndex = layer.zIndex - 1;\n var temp = this.diagram.layerZIndexTable[index];\n this.diagram.layerZIndexTable[index] = this.diagram.layerZIndexTable[index - 1];\n this.diagram.layerZIndexTable[index - 1] = temp;\n if (this.diagram.mode === 'Canvas') {\n this.diagram.refreshDiagramLayer();\n }\n }\n };\n /** @private */\n CommandHandler.prototype.bringLayerForward = function (layerName) {\n var layer = this.getLayer(layerName);\n if (layer && layer.zIndex < this.diagram.layers.length - 1) {\n var index = layer.zIndex;\n if (this.diagram.mode === 'SVG') {\n var targetObject = this.getLayer(this.diagram.layerZIndexTable[index + 1]).objects[0];\n var currentLayerObject = layer.objects;\n for (var _i = 0, currentLayerObject_2 = currentLayerObject; _i < currentLayerObject_2.length; _i++) {\n var obj = currentLayerObject_2[_i];\n if (targetObject) {\n this.moveSvgNode(targetObject, obj);\n }\n }\n }\n var targetLayer = this.getLayer(this.diagram.layerZIndexTable[index + 1]);\n targetLayer.zIndex = targetLayer.zIndex - 1;\n layer.zIndex = layer.zIndex + 1;\n var temp = this.diagram.layerZIndexTable[index];\n this.diagram.layerZIndexTable[index] = this.diagram.layerZIndexTable[index + 1];\n this.diagram.layerZIndexTable[index + 1] = temp;\n if (this.diagram.mode === 'Canvas') {\n this.diagram.refreshDiagramLayer();\n }\n }\n };\n /** @private */\n CommandHandler.prototype.sendToBack = function () {\n if (hasSelection(this.diagram)) {\n var objectId = this.diagram.selectedItems.nodes.length ? this.diagram.selectedItems.nodes[0].id\n : this.diagram.selectedItems.connectors[0].id;\n var index = this.diagram.nameTable[objectId].zIndex;\n var layerNum = this.diagram.layers.indexOf(this.getObjectLayer(objectId));\n var zIndexTable = this.diagram.layers[layerNum].zIndexTable;\n for (var i = index; i > 0; i--) {\n if (zIndexTable[i]) {\n //When there are empty records in the zindex table\n if (!zIndexTable[i - 1]) {\n zIndexTable[i - 1] = zIndexTable[i];\n this.diagram.nameTable[zIndexTable[i - 1]].zIndex = i;\n delete zIndexTable[i];\n }\n else {\n //bringing the objects forward\n zIndexTable[i] = zIndexTable[i - 1];\n this.diagram.nameTable[zIndexTable[i]].zIndex = i;\n }\n }\n }\n zIndexTable[0] = this.diagram.nameTable[objectId].id;\n this.diagram.nameTable[objectId].zIndex = 0;\n if (this.diagram.mode === 'SVG') {\n var i = 1;\n var target = zIndexTable[i];\n while (!target && i < index) {\n target = zIndexTable[++i];\n }\n this.moveSvgNode(objectId, target);\n }\n else {\n this.diagram.refreshCanvasLayers();\n }\n }\n };\n /** @private */\n CommandHandler.prototype.bringToFront = function () {\n if (hasSelection(this.diagram)) {\n var objectName = this.diagram.selectedItems.nodes.length ? this.diagram.selectedItems.nodes[0].id\n : this.diagram.selectedItems.connectors[0].id;\n var layerNum = this.diagram.layers.indexOf(this.getObjectLayer(objectName));\n var zIndexTable = this.diagram.layers[layerNum].zIndexTable;\n //find the maximum zIndex of the tabel\n var tabelLength = Number(Object.keys(zIndexTable).sort(function (a, b) { return Number(a) - Number(b); }).reverse()[0]);\n var index = this.diagram.nameTable[objectName].zIndex;\n for (var i = index; i < tabelLength; i++) {\n //When there are empty records in the zindex table\n if (zIndexTable[i]) {\n if (!zIndexTable[i + 1]) {\n zIndexTable[i + 1] = zIndexTable[i];\n this.diagram.nameTable[zIndexTable[i + 1]].zIndex = i;\n delete zIndexTable[i];\n }\n else {\n //bringing the objects backward\n zIndexTable[i] = zIndexTable[i + 1];\n this.diagram.nameTable[zIndexTable[i]].zIndex = i;\n }\n }\n }\n zIndexTable[tabelLength] = this.diagram.nameTable[objectName].id;\n this.diagram.nameTable[objectName].zIndex = tabelLength;\n if (this.diagram.mode === 'SVG') {\n var diagramLayer = this.diagram.diagramLayer;\n var child = this.getChildElements(this.diagram.nameTable[objectName].wrapper.children);\n var targerNodes = [];\n var element = getDiagramElement(objectName + '_groupElement');\n element.parentNode.removeChild(element);\n var htmlLayer = getHTMLLayer(this.diagram.element.id);\n this.diagram.diagramRenderer.renderElement(this.diagram.nameTable[objectName].wrapper, diagramLayer, htmlLayer);\n }\n else {\n this.diagram.refreshCanvasLayers();\n }\n }\n };\n /** @private */\n CommandHandler.prototype.sortByZIndex = function (nodeArray, sortID) {\n var id = sortID ? sortID : 'zIndex';\n nodeArray = nodeArray.sort(function (a, b) {\n return a[id] - b[id];\n });\n return nodeArray;\n };\n /** @private */\n CommandHandler.prototype.sendForward = function () {\n if (hasSelection(this.diagram)) {\n var nodeId = this.diagram.selectedItems.nodes.length ? this.diagram.selectedItems.nodes[0].id\n : this.diagram.selectedItems.connectors[0].id;\n var layerIndex = this.diagram.layers.indexOf(this.getObjectLayer(nodeId));\n var zIndexTable = this.diagram.layers[layerIndex].zIndexTable;\n var tabelLength = Object.keys(zIndexTable).length;\n var index = this.diagram.nameTable[nodeId];\n var intersectArray = [];\n var temp = this.diagram.spatialSearch.findObjects(index.wrapper.bounds);\n if (temp.length > 2) {\n temp = this.sortByZIndex(temp);\n }\n for (var _i = 0, temp_1 = temp; _i < temp_1.length; _i++) {\n var i = temp_1[_i];\n if (index.id !== i.id) {\n var currentLayer = this.getObjectLayer(i.id).zIndex;\n if (layerIndex === currentLayer && (Number(this.diagram.nameTable[nodeId].zIndex) < Number(i.zIndex)) &&\n index.wrapper.bounds.intersects(i.wrapper.bounds)) {\n intersectArray.push(i);\n break;\n }\n }\n }\n if (intersectArray.length > 0) {\n var overlapObject = intersectArray[0].zIndex;\n var currentObject = index.zIndex;\n var temp_2 = zIndexTable[overlapObject];\n //swap the nodes\n this.diagram.layers[0].zIndexTable[overlapObject] = index.id;\n this.diagram.nameTable[zIndexTable[overlapObject]].zIndex = overlapObject;\n this.diagram.layers[0].zIndexTable[currentObject] = intersectArray[0].id;\n this.diagram.nameTable[zIndexTable[currentObject]].zIndex = currentObject;\n if (this.diagram.mode === 'SVG') {\n this.moveSvgNode(zIndexTable[Number(intersectArray[0].zIndex)], nodeId);\n }\n else {\n this.diagram.refreshCanvasLayers();\n }\n }\n }\n };\n /** @private */\n CommandHandler.prototype.sendBackward = function () {\n if (hasSelection(this.diagram)) {\n var objectId = this.diagram.selectedItems.nodes.length ? this.diagram.selectedItems.nodes[0].id\n : this.diagram.selectedItems.connectors[0].id;\n var layerNum = this.diagram.layers.indexOf(this.getObjectLayer(objectId));\n var zIndexTable = this.diagram.layers[layerNum].zIndexTable;\n var tabelLength = Object.keys(zIndexTable).length;\n var node = this.diagram.nameTable[objectId];\n var intersectArray = [];\n var temp = this.diagram.spatialSearch.findObjects(node.wrapper.bounds);\n if (temp.length > 2) {\n temp = this.sortByZIndex(temp);\n }\n for (var _i = 0, temp_3 = temp; _i < temp_3.length; _i++) {\n var i = temp_3[_i];\n if (node.id !== i.id) {\n var currentLayer = this.getObjectLayer(i.id).zIndex;\n if (layerNum === currentLayer && (Number(this.diagram.nameTable[objectId].zIndex) > Number(i.zIndex)) &&\n node.wrapper.bounds.intersects(i.wrapper.bounds)) {\n intersectArray.push(i);\n }\n }\n }\n if (intersectArray.length > 0) {\n var overlapObject = intersectArray[intersectArray.length - 1].zIndex;\n var currentObject = node.zIndex;\n var temp_4 = zIndexTable[overlapObject];\n //swap the nodes\n zIndexTable[overlapObject] = node.id;\n this.diagram.nameTable[zIndexTable[overlapObject]].zIndex = overlapObject;\n zIndexTable[currentObject] = intersectArray[intersectArray.length - 1].id;\n this.diagram.nameTable[zIndexTable[currentObject]].zIndex = currentObject;\n if (this.diagram.mode === 'SVG') {\n this.moveSvgNode(objectId, zIndexTable[intersectArray[intersectArray.length - 1].zIndex]);\n }\n else {\n this.diagram.refreshCanvasLayers();\n }\n }\n }\n };\n CommandHandler.prototype.initSelectorWrapper = function () {\n var selectorModel = this.diagram.selectedItems;\n selectorModel.init(this.diagram);\n if (selectorModel.nodes.length === 1 && selectorModel.connectors.length === 0) {\n selectorModel.rotateAngle = selectorModel.nodes[0].rotateAngle;\n selectorModel.wrapper.rotateAngle = selectorModel.nodes[0].rotateAngle;\n selectorModel.wrapper.pivot = selectorModel.nodes[0].pivot;\n }\n };\n /** @private */\n CommandHandler.prototype.doRubberBandSelection = function (region) {\n this.clearSelectionRectangle();\n this.clearSelection();\n var selArray = [];\n var rubberArray = [];\n selArray = this.diagram.getNodesConnectors(selArray);\n if (this.diagram.selectedItems.rubberBandSelectionMode === 'CompleteIntersect') {\n rubberArray = completeRegion(region, selArray);\n }\n else {\n rubberArray = this.diagram.spatialSearch.findObjects(region);\n }\n if (rubberArray.length) {\n this.selectObjects(rubberArray, true);\n }\n };\n CommandHandler.prototype.clearSelectionRectangle = function () {\n var adornerSvg = getAdornerLayerSvg(this.diagram.element.id);\n var element = adornerSvg.getElementById(this.diagram.element.id + '_diagramAdorner_selected_region');\n if (element) {\n remove(element);\n }\n };\n /** @private */\n CommandHandler.prototype.dragConnectorEnds = function (endPoint, obj, point, segment, target, targetPortId) {\n var selectorModel;\n var connector;\n var node;\n var tx;\n var segmentPoint;\n var ty;\n var index;\n var checkBezierThumb = false;\n if (obj instanceof Selector) {\n selectorModel = obj;\n connector = selectorModel.connectors[0];\n }\n else if (obj instanceof Connector && this.diagram.currentDrawingObject) {\n this.clearSelection();\n connector = this.diagram.currentDrawingObject;\n }\n if (endPoint === 'BezierSourceThumb' || endPoint === 'BezierTargetThumb') {\n checkBezierThumb = true;\n }\n if (endPoint === 'ConnectorSourceEnd' || endPoint === 'BezierSourceThumb') {\n tx = point.x - (checkBezierThumb ? segment.bezierPoint1.x : connector.sourcePoint.x);\n ty = point.y - (checkBezierThumb ? segment.bezierPoint1.y : connector.sourcePoint.y);\n return this.dragSourceEnd(connector, tx, ty, null, point, endPoint, undefined, target, targetPortId, undefined, segment);\n }\n else {\n tx = point.x - (checkBezierThumb ? segment.bezierPoint2.x : connector.targetPoint.x);\n ty = point.y - (checkBezierThumb ? segment.bezierPoint2.y : connector.targetPoint.y);\n return this.dragTargetEnd(connector, tx, ty, null, point, endPoint, undefined, segment);\n }\n };\n CommandHandler.prototype.getSelectedObject = function () {\n var selectormodel = this.diagram.selectedItems;\n return (selectormodel.nodes).concat(selectormodel.connectors);\n };\n /** @private */\n CommandHandler.prototype.clearSelection = function (triggerAction) {\n if (hasSelection(this.diagram)) {\n var selectormodel = this.diagram.selectedItems;\n var arrayNodes = this.getSelectedObject();\n var arg = {\n oldValue: arrayNodes, newValue: [], cause: this.diagram.diagramActions,\n state: 'Changing', type: 'Removal', cancel: false\n };\n if (triggerAction) {\n this.diagram.triggerEvent(DiagramEvent.selectionChange, arg);\n }\n if (!arg.cancel) {\n selectormodel.offsetX = 0;\n selectormodel.offsetY = 0;\n selectormodel.width = 0;\n selectormodel.height = 0;\n selectormodel.rotateAngle = 0;\n selectormodel.nodes = [];\n selectormodel.connectors = [];\n selectormodel.wrapper = null;\n this.diagram.clearSelectorLayer();\n if (triggerAction) {\n arg = {\n oldValue: arrayNodes, newValue: [], cause: this.diagram.diagramActions,\n state: 'Changed', type: 'Removal', cancel: false\n };\n this.diagram.triggerEvent(DiagramEvent.selectionChange, arg);\n }\n }\n }\n };\n /** @private */\n CommandHandler.prototype.drag = function (obj, tx, ty) {\n var tempNode;\n var elements = [];\n if (canMove(obj) && this.checkBoundaryConstraints(tx, ty, obj.wrapper.bounds) && canPageEditable(this.diagram)) {\n if (obj instanceof Node) {\n var oldValues = { offsetX: obj.offsetX, offsetY: obj.offsetY };\n obj.offsetX += tx;\n obj.offsetY += ty;\n if (obj.children) {\n var nodes = this.getAllDescendants(obj, elements);\n for (var i = 0; i < nodes.length; i++) {\n tempNode = (this.diagram.nameTable[nodes[i].id]);\n this.drag(tempNode, tx, ty);\n }\n }\n this.diagram.nodePropertyChange(obj, oldValues, { offsetX: obj.offsetX, offsetY: obj.offsetY });\n }\n else {\n var connector = obj;\n var update = connector.type === 'Bezier' ? true : false;\n var hasEnds = false;\n if (!connector.sourceWrapper) {\n this.dragSourceEnd(connector, tx, ty, true, null, '', update);\n }\n else {\n hasEnds = true;\n }\n if (!connector.targetWrapper) {\n this.dragTargetEnd(connector, tx, ty, true, null, '', update);\n }\n else {\n hasEnds = true;\n }\n if (!hasEnds) {\n this.dragControlPoint(connector, tx, ty, true);\n var conn = { sourcePoint: connector.sourcePoint, targetPoint: connector.targetPoint };\n this.diagram.connectorPropertyChange(connector, {}, conn);\n }\n }\n }\n };\n /** @private */\n CommandHandler.prototype.updateEndPoint = function (connector) {\n var conn = {\n sourcePoint: connector.sourcePoint, targetPoint: connector.targetPoint,\n sourceID: connector.sourceID ? connector.sourceID : undefined,\n targetID: connector.targetID ? connector.targetID : undefined,\n sourcePortID: connector.sourcePortID ? connector.sourcePortID : undefined,\n targetPortID: connector.targetPortID ? connector.targetPortID : undefined,\n segments: connector.segments ? connector.segments : undefined\n };\n this.diagram.connectorPropertyChange(connector, {}, conn);\n // this.diagram.refreshDiagramLayer();\n this.diagram.updateSelector();\n };\n /** @private */\n CommandHandler.prototype.dragSourceEnd = function (obj, tx, ty, preventUpdate, point, endPoint, update, target, targetPortId, isDragSource, segment) {\n var connector = this.diagram.nameTable[obj.id];\n var checkBoundaryConstraints = this.checkBoundaryConstraints(tx, ty, connector.wrapper.bounds);\n if (canDragSourceEnd(connector) && checkBoundaryConstraints\n && (endPoint !== 'BezierSourceThumb') && canPageEditable(this.diagram)) {\n connector.sourcePoint.x += tx;\n connector.sourcePoint.y += ty;\n if (endPoint === 'ConnectorSourceEnd' && connector.type === 'Orthogonal') {\n this.changeSegmentLength(connector, target, targetPortId, isDragSource);\n }\n }\n if (connector.type === 'Bezier') {\n if (segment) {\n this.translateBezierPoints(obj, (endPoint === '') ? 'ConnectorSourceEnd' : endPoint, tx, ty, segment, point, !update);\n }\n else {\n for (var i = 0; i < obj.segments.length; i++) {\n this.translateBezierPoints(obj, (endPoint === '') ? 'ConnectorSourceEnd' : endPoint, tx, ty, obj.segments[i], point, !update);\n }\n }\n }\n if (!preventUpdate) {\n this.updateEndPoint(connector);\n }\n return checkBoundaryConstraints;\n };\n /**\n * Upadte the connector segments when change the source node\n */\n CommandHandler.prototype.changeSegmentLength = function (connector, target, targetPortId, isDragSource) {\n if (connector.segments && connector.segments[0].direction !== null\n && ((!target && connector.sourceID === '') || isDragSource)) {\n var first = connector.segments[0];\n var second = connector.segments[1];\n var node = this.diagram.nameTable[connector.sourceID];\n var secPoint = void 0;\n first.points[0] = connector.sourcePoint;\n if (first.direction === 'Top' || first.direction === 'Bottom') {\n first.points[first.points.length - 1].x = connector.sourcePoint.x;\n second.points[0].y = first.points[first.points.length - 1].y;\n }\n else {\n first.points[first.points.length - 1].y = connector.sourcePoint.y;\n second.points[0].x = first.points[first.points.length - 1].x;\n }\n if (first.direction && (first.length || first.length === 0)) {\n first.length = Point.distancePoints(first.points[0], first.points[first.points.length - 1]);\n }\n if (second.direction && (second.length || second.length === 0)) {\n second.length = Point.distancePoints(first.points[first.points.length - 1], second.points[second.points.length - 1]);\n second.direction = Point.direction(first.points[first.points.length - 1], second.points[second.points.length - 1]);\n }\n if (connector.sourcePortID !== '' && first.length < 10) {\n if (connector.segments.length > 2) {\n var next = connector.segments[2];\n var nextDirection = Point.direction(next.points[0], next.points[1]);\n if (first.direction === getOppositeDirection(nextDirection)) {\n if (first.direction === 'Right') {\n next.points[0].x = first.points[first.points.length - 1].x = node.wrapper.corners.middleRight.x + 20;\n }\n else if (first.direction === 'Left') {\n next.points[0].x = first.points[first.points.length - 1].x = node.wrapper.corners.middleLeft.x - 20;\n }\n else if (first.direction === 'Top') {\n next.points[0].y = first.points[first.points.length - 1].y = node.wrapper.corners.topCenter.y - 20;\n }\n else {\n next.points[0].y = first.points[first.points.length - 1].y = node.wrapper.corners.bottomCenter.y + 20;\n }\n if (next.direction && next.length) {\n next.length = Point.distancePoints(next.points[0], next.points[next.points.length - 1]);\n }\n first.length = Point.distancePoints(first.points[0], first.points[first.points.length - 1]);\n }\n else if (first.direction === nextDirection && next.direction && next.length) {\n if (first.direction === 'Top' || first.direction === 'Bottom') {\n next.points[0] = first.points[0];\n next.points[next.points.length - 1].x = next.points[0].x;\n }\n else {\n next.points[0] = first.points[0];\n next.points[next.points.length - 1].y = next.points[0].y;\n }\n next.length = Point.distancePoints(next.points[0], next.points[next.points.length - 1]);\n connector.segments.splice(0, 2);\n }\n else {\n first.length = 20;\n }\n }\n else {\n first.length = 20;\n }\n }\n else if (first.length < 1) {\n if (connector.sourceID !== '') {\n if (second.direction === 'Right') {\n secPoint = node.wrapper.corners.middleRight;\n second.points[second.points.length - 1].y = secPoint.y;\n }\n else if (second.direction === 'Left') {\n secPoint = node.wrapper.corners.middleLeft;\n second.points[second.points.length - 1].y = secPoint.y;\n }\n else if (second.direction === 'Top') {\n secPoint = node.wrapper.corners.topCenter;\n second.points[second.points.length - 1].x = secPoint.x;\n }\n else {\n secPoint = node.wrapper.corners.bottomCenter;\n second.points[second.points.length - 1].x = secPoint.x;\n }\n second.length = Point.distancePoints(secPoint, second.points[second.points.length - 1]);\n if (connector.segments.length > 2) {\n var next = connector.segments[2];\n if (next.direction && next.length) {\n next.length = Point.distancePoints(second.points[second.points.length - 1], next.points[next.points.length - 1]);\n }\n }\n connector.segments.splice(0, 1);\n }\n else {\n connector.segments.splice(0, 1);\n }\n }\n }\n else {\n if (target && targetPortId && connector.sourcePortID !== targetPortId &&\n connector.segments && connector.segments[0].direction !== null && target && target instanceof Node) {\n this.changeSourceEndToPort(connector, target, targetPortId);\n }\n else if (target && (connector.sourceID !== target.id || connector.sourcePortID === '') &&\n connector.segments && connector.segments[0].direction !== null && target && target instanceof Node) {\n this.changeSourceEndToNode(connector, target);\n }\n }\n };\n /**\n * Change the connector endPoint to port\n */\n CommandHandler.prototype.changeSourceEndToPort = function (connector, target, targetPortId) {\n var port = this.diagram.getWrapper(target.wrapper, targetPortId);\n var point = { x: port.offsetX, y: port.offsetY };\n var direction = getPortDirection(point, target.wrapper.corners, target.wrapper.bounds, false);\n var firstSegment = connector.segments[0];\n var secondSegment = connector.segments[1];\n if (firstSegment.direction !== direction) {\n var segments = [];\n var segValues = {};\n if (firstSegment.direction === getOppositeDirection(direction)) {\n segValues = {};\n var segValues1 = void 0;\n if (direction === 'Top' || direction === 'Bottom') {\n segValues1 = (direction === 'Top') ? {\n type: 'Orthogonal', isTerminal: true, direction: direction,\n length: Math.abs(firstSegment.points[0].y - point.y)\n } :\n {\n type: 'Orthogonal', isTerminal: true, direction: direction,\n length: Math.abs(point.y - firstSegment.points[0].y)\n };\n segValues = (firstSegment.points[0].x > point.x) ?\n { type: 'Orthogonal', isTerminal: true, direction: 'Right', length: (firstSegment.points[0].x - point.x) } :\n { type: 'Orthogonal', isTerminal: true, direction: 'Left', length: (point.x - firstSegment.points[0].x) };\n }\n else {\n segValues1 = (direction === 'Right') ? {\n type: 'Orthogonal', isTerminal: true, direction: direction,\n length: Math.abs(firstSegment.points[0].x - point.x)\n } :\n {\n type: 'Orthogonal', isTerminal: true, direction: direction,\n length: Math.abs(point.x - firstSegment.points[0].x)\n };\n segValues = (firstSegment.points[0].y > point.y) ?\n { type: 'Orthogonal', direction: 'Top', isTerminal: true, length: (firstSegment.points[0].y - point.y) } :\n { type: 'Orthogonal', direction: 'Bottom', isTerminal: true, length: (point.y - firstSegment.points[0].y) };\n }\n segments.push(new OrthogonalSegment(connector, 'segments', segValues1, true));\n segments.push(new OrthogonalSegment(connector, 'segments', segValues, true));\n }\n else {\n segValues = { type: 'Orthogonal', direction: direction, length: 20, isTerminal: true };\n segments.push(new OrthogonalSegment(connector, 'segments', segValues, true));\n }\n if (firstSegment.direction !== getOppositeDirection(direction)) {\n if (direction === 'Top' || direction === 'Bottom') {\n firstSegment.points[0].x = point.x;\n firstSegment.points[0].y = firstSegment.points[firstSegment.points.length - 1].y = (direction === 'Top') ?\n point.y - 20 : point.y + 20;\n }\n else {\n firstSegment.points[0].y = point.y;\n firstSegment.points[0].x = firstSegment.points[firstSegment.points.length - 1].x = (direction === 'Right') ?\n point.x + 20 : point.x - 20;\n }\n firstSegment.length = Point.distancePoints(firstSegment.points[0], firstSegment.points[firstSegment.points.length - 1]);\n secondSegment.length = Point.distancePoints(firstSegment.points[firstSegment.points.length - 1], secondSegment.points[secondSegment.points.length - 1]);\n }\n connector.segments = segments.concat(connector.segments);\n }\n else {\n firstSegment.points[0] = point;\n if (direction === 'Top' || direction === 'Bottom') {\n firstSegment.points[firstSegment.points.length - 1].x = point.x;\n }\n else {\n firstSegment.points[firstSegment.points.length - 1].y = point.y;\n }\n firstSegment.length = Point.distancePoints(firstSegment.points[0], firstSegment.points[firstSegment.points.length - 1]);\n secondSegment.length = Point.distancePoints(firstSegment.points[firstSegment.points.length - 1], secondSegment.points[secondSegment.points.length - 1]);\n }\n };\n /**\n * @private\n * Remove terinal segment in initial\n */\n CommandHandler.prototype.removeTerminalSegment = function (connector, changeTerminal) {\n for (var i = 0; i < connector.segments.length - 2; i++) {\n var segment = connector.segments[0];\n if (segment.isTerminal) {\n if (changeTerminal) {\n segment.isTerminal = false;\n }\n else {\n connector.segments.splice(i, 1);\n i--;\n }\n }\n }\n };\n /**\n * Change the connector endPoint from point to node\n */\n CommandHandler.prototype.changeSourceEndToNode = function (connector, target) {\n this.removeTerminalSegment(connector);\n var sourceWrapper = target.wrapper.children[0].corners;\n var sourcePoint;\n var sourcePoint2;\n var firstSegment = connector.segments[0];\n var nextSegment = connector.segments[1];\n var segments = [];\n if (firstSegment.direction === 'Right' || firstSegment.direction === 'Left') {\n sourcePoint = (firstSegment.direction === 'Left') ? sourceWrapper.middleLeft : sourceWrapper.middleRight;\n if (firstSegment.length > sourceWrapper.width || ((firstSegment.direction === 'Left' &&\n sourcePoint.x >= firstSegment.points[0].x) || (firstSegment.direction === 'Right' &&\n sourcePoint.x <= firstSegment.points[0].x))) {\n firstSegment.points[0].y = firstSegment.points[firstSegment.points.length - 1].y = sourcePoint.y;\n firstSegment.points[0].x = sourcePoint.x;\n firstSegment.length = Point.distancePoints(firstSegment.points[0], firstSegment.points[firstSegment.points.length - 1]);\n nextSegment.length = Point.distancePoints(firstSegment.points[firstSegment.points.length - 1], nextSegment.points[nextSegment.points.length - 1]);\n }\n else {\n var direction = void 0;\n if (nextSegment.direction) {\n direction = nextSegment.direction;\n }\n else {\n direction = Point.direction(nextSegment.points[0], nextSegment.points[nextSegment.points.length - 1]);\n }\n sourcePoint2 = (direction === 'Bottom') ? sourceWrapper.bottomCenter : sourceWrapper.topCenter;\n if (nextSegment.length && nextSegment.direction) {\n nextSegment.length =\n (direction === 'Top') ? firstSegment.points[firstSegment.points.length - 1].y - (sourcePoint2.y + 20) :\n (sourcePoint2.y + 20) - firstSegment.points[firstSegment.points.length - 1].y;\n }\n firstSegment.length = firstSegment.points[firstSegment.points.length - 1].x - sourcePoint2.x;\n firstSegment.direction = (firstSegment.length > 0) ? 'Right' : 'Left';\n var segValues = { type: 'Orthogonal', direction: direction, length: 20 };\n segments.push(new OrthogonalSegment(connector, 'segments', segValues, true));\n connector.segments = segments.concat(connector.segments);\n }\n }\n else {\n sourcePoint = (firstSegment.direction === 'Bottom') ? sourceWrapper.bottomCenter : sourceWrapper.topCenter;\n if (firstSegment.length > sourceWrapper.height || ((firstSegment.direction === 'Top' &&\n sourcePoint.y >= firstSegment.points[0].y) ||\n (firstSegment.direction === 'Bottom' && sourcePoint.y <= firstSegment.points[0].y))) {\n firstSegment.points[0].x = firstSegment.points[firstSegment.points.length - 1].x = sourcePoint.x;\n firstSegment.points[0].y = sourcePoint.y;\n firstSegment.length = Point.distancePoints(firstSegment.points[0], firstSegment.points[firstSegment.points.length - 1]);\n nextSegment.length = Point.distancePoints(firstSegment.points[firstSegment.points.length - 1], nextSegment.points[nextSegment.points.length - 1]);\n }\n else {\n sourcePoint2 = (nextSegment.direction === 'Left') ? sourceWrapper.middleLeft : sourceWrapper.middleRight;\n var direction = void 0;\n if (nextSegment.direction) {\n direction = nextSegment.direction;\n }\n else {\n direction = Point.direction(nextSegment.points[0], nextSegment.points[nextSegment.points.length - 1]);\n }\n if (nextSegment.length && nextSegment.direction) {\n nextSegment.length =\n (direction === 'Left') ? firstSegment.points[firstSegment.points.length - 1].x - (sourcePoint2.x + 20) :\n (sourcePoint2.x + 20) - firstSegment.points[firstSegment.points.length - 1].x;\n }\n firstSegment.length = firstSegment.points[firstSegment.points.length - 1].y - sourcePoint2.y;\n firstSegment.direction = (firstSegment.length > 0) ? 'Bottom' : 'Top';\n var segValues = { type: 'Orthogonal', direction: direction, length: 20 };\n segments.push(new OrthogonalSegment(connector, 'segments', segValues, true));\n connector.segments = segments.concat(connector.segments);\n }\n }\n };\n /**\n * Translate the bezier points during the interaction\n */\n CommandHandler.prototype.translateBezierPoints = function (connector, value, tx, ty, seg, point, update) {\n var index = (connector.segments.indexOf(seg));\n var segment = connector.segments[index];\n if (segment) {\n if (value === 'BezierSourceThumb' && (segment.vector1.angle || segment.vector1.distance)) {\n segment.vector1 = {\n distance: connector.distance(connector.sourcePoint, point),\n angle: Point.findAngle(connector.sourcePoint, point),\n };\n }\n else if (value === 'BezierTargetThumb' && (segment.vector2.angle || segment.vector2.distance)) {\n segment.vector2 = {\n distance: connector.distance(connector.targetPoint, point),\n angle: Point.findAngle(connector.targetPoint, point),\n };\n }\n else if ((value === 'ConnectorSourceEnd' && !connector.sourceID || value === 'ConnectorTargetEnd' && !connector.targetID)\n && update && isEmptyVector(segment.vector1) && isEmptyVector(segment.vector2)) {\n if (Point.isEmptyPoint(segment.point1)) {\n segment.bezierPoint1 = getBezierPoints(connector.sourcePoint, connector.targetPoint);\n }\n if (Point.isEmptyPoint(segment.point2)) {\n segment.bezierPoint2 = getBezierPoints(connector.targetPoint, connector.sourcePoint);\n }\n }\n else if (value === 'BezierSourceThumb' || (value === 'ConnectorSourceEnd' && !update && isEmptyVector(segment.vector1))) {\n segment.bezierPoint1.x += tx;\n segment.bezierPoint1.y += ty;\n if ((!Point.isEmptyPoint(segment.point1)) || (update)) {\n segment.point1 = { x: segment.bezierPoint1.x, y: segment.bezierPoint1.y };\n }\n }\n else if (value === 'BezierTargetThumb' || (value === 'ConnectorTargetEnd' && !update && isEmptyVector(segment.vector2))) {\n segment.bezierPoint2.x += tx;\n segment.bezierPoint2.y += ty;\n if ((!Point.isEmptyPoint(segment.point2)) || (update)) {\n segment.point2 = { x: segment.bezierPoint2.x, y: segment.bezierPoint2.y };\n }\n }\n }\n };\n /** @private */\n CommandHandler.prototype.dragTargetEnd = function (obj, tx, ty, preventUpdate, point, endPoint, update, segment) {\n var connector = this.diagram.nameTable[obj.id];\n var boundaryConstraints = this.checkBoundaryConstraints(tx, ty, connector.wrapper.bounds);\n if (canDragTargetEnd(connector) && endPoint !== 'BezierTargetThumb'\n && boundaryConstraints && canPageEditable(this.diagram)) {\n connector.targetPoint.x += tx;\n connector.targetPoint.y += ty;\n if (endPoint === 'ConnectorTargetEnd' && connector.type === 'Orthogonal' &&\n connector.segments && connector.segments.length > 0) {\n var prev = connector.segments[connector.segments.length - 2];\n if (prev && connector.segments[connector.segments.length - 1].points.length === 2) {\n if (prev.direction === 'Left' || prev.direction === 'Right') {\n prev.points[prev.points.length - 1].x = connector.targetPoint.x;\n }\n else {\n prev.points[prev.points.length - 1].y = connector.targetPoint.y;\n }\n prev.length = Point.distancePoints(prev.points[0], prev.points[prev.points.length - 1]);\n prev.direction = Point.direction(prev.points[0], prev.points[prev.points.length - 1]);\n }\n }\n }\n if (connector.type === 'Bezier') {\n if (segment) {\n this.translateBezierPoints(obj, (endPoint === '') ? 'ConnectorTargetEnd' : endPoint, tx, ty, segment, point, !update);\n }\n else {\n for (var i = 0; i < obj.segments.length; i++) {\n this.translateBezierPoints(obj, (endPoint === '') ? 'ConnectorTargetEnd' : endPoint, tx, ty, obj.segments[i], point, !update);\n }\n }\n }\n if (!preventUpdate) {\n this.updateEndPoint(connector);\n }\n return boundaryConstraints;\n };\n /** @private */\n CommandHandler.prototype.dragControlPoint = function (obj, tx, ty, preventUpdate, segmentNumber) {\n var connector = this.diagram.nameTable[obj.id];\n if ((connector.type === 'Straight' || connector.type === 'Bezier') && connector.segments.length > 0) {\n if (segmentNumber !== undefined && connector.segments[segmentNumber]) {\n connector.segments[segmentNumber].point.x += tx;\n connector.segments[segmentNumber].point.y += ty;\n }\n else {\n for (var i = 0; i < connector.segments.length - 1; i++) {\n connector.segments[i].point.x += tx;\n connector.segments[i].point.y += ty;\n }\n }\n if (!preventUpdate) {\n this.updateEndPoint(connector);\n }\n }\n return true;\n };\n /** @private */\n CommandHandler.prototype.rotateObjects = function (parent, objects, angle, pivot, includeParent) {\n pivot = pivot || {};\n var matrix = identityMatrix();\n rotateMatrix(matrix, angle, pivot.x, pivot.y);\n for (var _i = 0, objects_2 = objects; _i < objects_2.length; _i++) {\n var obj = objects_2[_i];\n if (obj instanceof Node) {\n if (canRotate(obj) && canPageEditable(this.diagram)) {\n if (includeParent !== false || parent !== obj) {\n obj.rotateAngle += angle;\n obj.rotateAngle = (obj.rotateAngle + 360) % 360;\n var newOffset = transformPointByMatrix(matrix, { x: obj.offsetX, y: obj.offsetY });\n obj.offsetX = newOffset.x;\n obj.offsetY = newOffset.y;\n this.diagram.nodePropertyChange(obj, {}, { offsetX: obj.offsetX, offsetY: obj.offsetY, rotateAngle: obj.rotateAngle });\n }\n if (obj.processId) {\n var parent_1 = this.diagram.nameTable[obj.processId];\n var bound = this.diagram.bpmnModule.getChildrenBound(parent_1, obj.id, this.diagram);\n this.diagram.bpmnModule.updateSubProcessess(bound, obj, this.diagram);\n }\n if (obj.children && obj.children.length) {\n this.getChildren(obj, objects);\n }\n }\n }\n else {\n this.rotatePoints(obj, angle, pivot || { x: obj.wrapper.offsetX, y: obj.wrapper.offsetY });\n }\n this.diagram.updateDiagramObject(obj);\n }\n this.diagram.updateSelector();\n };\n /** @private */\n CommandHandler.prototype.snapConnectorEnd = function (currentPosition) {\n if ((this.diagram.snapSettings.constraints & SnapConstraints.SnapToLines)\n && this.snappingModule) {\n this.diagram.snappingModule.snapConnectorEnd(currentPosition);\n }\n return currentPosition;\n };\n CommandHandler.prototype.snapAngle = function (angle) {\n if ((this.diagram.snapSettings.constraints & SnapConstraints.SnapToLines)\n && this.snappingModule) {\n return this.snappingModule.snapAngle(this.diagram, angle);\n }\n else {\n return 0;\n }\n };\n CommandHandler.prototype.rotatePoints = function (conn, angle, pivot) {\n if (!conn.sourceWrapper || !conn.targetWrapper) {\n var matrix = identityMatrix();\n rotateMatrix(matrix, angle, pivot.x, pivot.y);\n conn.sourcePoint = transformPointByMatrix(matrix, conn.sourcePoint);\n conn.targetPoint = transformPointByMatrix(matrix, conn.targetPoint);\n var newProp = { sourcePoint: conn.sourcePoint, targetPoint: conn.targetPoint };\n this.diagram.connectorPropertyChange(conn, {}, newProp);\n }\n };\n /** @private */\n CommandHandler.prototype.scale = function (obj, sw, sh, pivot, refObject) {\n var node = this.diagram.nameTable[obj.id];\n var tempNode = node;\n var elements = [];\n var element = node.wrapper;\n if (element.actualSize.width !== undefined && element.actualSize.height !== undefined && canPageEditable(this.diagram)) {\n if (tempNode.children) {\n var nodes = this.getAllDescendants(tempNode, elements);\n for (var _i = 0, nodes_1 = nodes; _i < nodes_1.length; _i++) {\n var temp = nodes_1[_i];\n this.scaleObject(sw, sh, pivot, temp, element, refObject);\n }\n obj.wrapper.measure(new Size());\n obj.wrapper.arrange(obj.wrapper.desiredSize);\n this.diagram.updateGroupOffset(node);\n }\n else {\n this.scaleObject(sw, sh, pivot, node, element, refObject);\n }\n var bounds = getBounds(obj.wrapper);\n var checkBoundaryConstraints = this.checkBoundaryConstraints(undefined, undefined, bounds);\n if (!checkBoundaryConstraints) {\n this.scale(obj, 1 / sw, 1 / sh, pivot);\n return false;\n }\n this.diagram.updateDiagramObject(obj);\n }\n return true;\n };\n /** @private */\n CommandHandler.prototype.getAllDescendants = function (node, nodes, includeParent) {\n var temp = node;\n for (var i = 0; i < temp.children.length; i++) {\n node = (this.diagram.nameTable[temp.children[i]]);\n if (!node.children) {\n nodes.push(node);\n }\n else {\n if (includeParent) {\n nodes.push(node);\n }\n nodes = this.getAllDescendants(node, nodes);\n }\n }\n return nodes;\n };\n CommandHandler.prototype.getChildren = function (node, nodes) {\n var temp = node;\n if (node.children) {\n for (var i = 0; i < temp.children.length; i++) {\n node = (this.diagram.nameTable[temp.children[i]]);\n nodes.push(node);\n }\n }\n return nodes;\n };\n /** @private */\n CommandHandler.prototype.cloneChild = function (id) {\n var node = this.diagram.nameTable[id];\n return node;\n };\n /** @private */\n CommandHandler.prototype.scaleObject = function (sw, sh, pivot, obj, element, refObject) {\n sw = sw < 0 ? 1 : sw;\n sh = sh < 0 ? 1 : sh;\n var process;\n var oldValues = {\n offsetX: obj.wrapper.offsetX, offsetY: obj.wrapper.offsetY,\n width: obj.wrapper.actualSize.width, height: obj.wrapper.actualSize.height\n };\n if (sw !== 1 || sh !== 1) {\n var width = void 0;\n var height = void 0;\n if (obj instanceof Node) {\n var node = obj;\n var isResize = void 0;\n var bound = void 0;\n if (node.shape.type === 'Bpmn' && node.shape.activity.subProcess.processes\n && node.shape.activity.subProcess.processes.length > 0) {\n bound = this.diagram.bpmnModule.getChildrenBound(node, node.id, this.diagram);\n isResize = node.wrapper.bounds.containsRect(bound);\n }\n width = node.wrapper.actualSize.width * sw;\n height = node.wrapper.actualSize.height * sh;\n if (node.maxWidth !== undefined && node.maxWidth !== 0) {\n width = Math.min(node.maxWidth, width);\n }\n if (node.minWidth !== undefined && node.minWidth !== 0) {\n width = Math.max(node.minWidth, width);\n }\n if (node.maxHeight !== undefined && node.maxHeight !== 0) {\n height = Math.min(node.maxHeight, height);\n }\n if (node.minHeight !== undefined && node.minHeight !== 0) {\n height = Math.max(node.minHeight, height);\n }\n if (isResize) {\n width = Math.max(width, (bound.right - node.wrapper.bounds.x));\n height = Math.max(height, (bound.bottom - node.wrapper.bounds.y));\n }\n sw = width / node.actualSize.width;\n sh = height / node.actualSize.height;\n }\n var matrix = identityMatrix();\n var refWrapper = void 0;\n if (!refObject) {\n refObject = obj;\n }\n refWrapper = refObject.wrapper;\n var x = refWrapper.offsetX - refWrapper.actualSize.width * refWrapper.pivot.x;\n var y = refWrapper.offsetY - refWrapper.actualSize.height * refWrapper.pivot.y;\n var refPoint = { x: x + refWrapper.actualSize.width * pivot.x, y: y + refWrapper.actualSize.height * pivot.y };\n refPoint = rotatePoint(refWrapper.rotateAngle, refWrapper.offsetX, refWrapper.offsetY, refPoint);\n rotateMatrix(matrix, -refWrapper.rotateAngle, refPoint.x, refPoint.y);\n scaleMatrix(matrix, sw, sh, refPoint.x, refPoint.y);\n rotateMatrix(matrix, refWrapper.rotateAngle, refPoint.x, refPoint.y);\n if (obj instanceof Node) {\n var node = obj;\n var left = void 0;\n var top_1;\n var newPosition = transformPointByMatrix(matrix, { x: node.wrapper.offsetX, y: node.wrapper.offsetY });\n var oldleft = node.wrapper.offsetX - node.wrapper.actualSize.width * node.pivot.x;\n var oldtop = node.wrapper.offsetY - node.wrapper.actualSize.height * node.pivot.y;\n if (width > 0) {\n if (node.processId) {\n var parent_2 = this.diagram.nameTable[node.processId];\n if (!parent_2.maxWidth || ((node.margin.left + width) < parent_2.maxWidth)) {\n node.width = width;\n node.offsetX = newPosition.x;\n }\n }\n else {\n node.width = width;\n node.offsetX = newPosition.x;\n }\n }\n if (height > 0) {\n if (node.processId) {\n var parent_3 = this.diagram.nameTable[node.processId];\n if (!parent_3.maxHeight || ((node.margin.top + height) < parent_3.maxHeight)) {\n node.height = height;\n node.offsetY = newPosition.y;\n }\n }\n else {\n node.height = height;\n node.offsetY = newPosition.y;\n }\n }\n left = node.wrapper.offsetX - node.wrapper.actualSize.width * node.pivot.x;\n top_1 = node.wrapper.offsetY - node.wrapper.actualSize.height * node.pivot.y;\n var parent_4 = this.diagram.nameTable[node.processId];\n if (parent_4 && ((node.margin.top + (top_1 - oldtop)) <= 0 ||\n (node.margin.left + (left - oldleft) <= 0))) {\n this.diagram.nodePropertyChange(obj, {}, {\n margin: { top: node.margin.top, left: node.margin.left }\n });\n }\n else {\n this.diagram.nodePropertyChange(obj, {}, {\n width: node.width, height: node.height, offsetX: node.offsetX,\n offsetY: node.offsetY, margin: { top: node.margin.top + (top_1 - oldtop), left: node.margin.left + (left - oldleft) }\n });\n }\n }\n else {\n var connector = obj;\n if (!connector.sourceWrapper || !connector.targetWrapper) {\n connector.sourcePoint = transformPointByMatrix(matrix, connector.sourcePoint);\n connector.targetPoint = transformPointByMatrix(matrix, connector.targetPoint);\n var newProp = { sourcePoint: connector.sourcePoint, targetPoint: connector.targetPoint };\n this.diagram.connectorPropertyChange(connector, {}, newProp);\n }\n }\n var parentNode = this.diagram.nameTable[obj.processId];\n if (parentNode) {\n var parent_5 = parentNode.wrapper.bounds;\n var child = obj.wrapper.bounds;\n var bound = this.diagram.bpmnModule.getChildrenBound(parentNode, obj.id, this.diagram);\n this.diagram.bpmnModule.updateSubProcessess(bound, obj, this.diagram);\n }\n }\n };\n /** @private */\n CommandHandler.prototype.portDrag = function (obj, portElement, tx, ty) {\n var oldValues;\n var changedvalues;\n var port = this.findTarget(portElement, obj);\n var bounds = getBounds(obj.wrapper);\n var index = findPortIndex(obj, port.id);\n var ports = {};\n ports[index] = { offset: { x: port.offset.x, y: port.offset.y } };\n if (port && canDrag(port, this.diagram)) {\n oldValues = { ports: ports };\n port.offset.x += (tx / bounds.width);\n port.offset.y += (ty / bounds.height);\n ports = {};\n ports[index] = { offset: { x: port.offset.x, y: port.offset.y } };\n changedvalues = { ports: ports };\n this.diagram.nodePropertyChange(obj, oldValues, changedvalues);\n this.diagram.updateDiagramObject(obj);\n }\n };\n /** @private */\n CommandHandler.prototype.getSubProcess = function (source) {\n var selector = { nodes: [], connectors: [] };\n var process;\n if (source instanceof Node) {\n process = source.processId;\n }\n else if (source && source.nodes && (source.nodes.length)\n && source.nodes[0].processId) {\n process = source.nodes[0].processId;\n }\n if (process) {\n selector.nodes.push(clone(this.diagram.nameTable[process]));\n return selector;\n }\n return selector;\n };\n CommandHandler.prototype.checkBoundaryConstraints = function (tx, ty, nodeBounds) {\n var pageSettings = this.diagram.pageSettings;\n var boundaryConstraints = this.diagram.pageSettings.boundaryConstraints;\n var scroller = this.diagram.scroller;\n if (boundaryConstraints === 'Page' || boundaryConstraints === 'Diagram') {\n var selectorBounds = !nodeBounds ? this.diagram.selectedItems.wrapper.bounds : undefined;\n var width = boundaryConstraints === 'Page' ? pageSettings.width : scroller.viewPortWidth;\n var height = boundaryConstraints === 'Page' ? pageSettings.height : scroller.viewPortHeight;\n var bounds = nodeBounds;\n var right = (nodeBounds ? bounds.right : selectorBounds.right) + (tx || 0);\n var left = (nodeBounds ? bounds.left : selectorBounds.left) + (tx || 0);\n var top_2 = (nodeBounds ? bounds.top : selectorBounds.top) + (ty || 0);\n var bottom = (nodeBounds ? bounds.bottom : selectorBounds.bottom) + (ty || 0);\n if (right <= width && left >= 0\n && bottom <= height && top_2 >= 0) {\n return true;\n }\n return false;\n }\n return true;\n };\n //interfaces\n /** @private */\n CommandHandler.prototype.dragSelectedObjects = function (tx, ty) {\n var obj = this.diagram.selectedItems;\n if (this.state && !this.state.backup) {\n this.state.backup = {};\n this.state.backup.offsetX = obj.offsetX;\n this.state.backup.offsetY = obj.offsetY;\n }\n if (this.checkBoundaryConstraints(tx, ty)) {\n this.diagram.drag(obj, tx, ty);\n return true;\n }\n return false;\n };\n /** @private */\n CommandHandler.prototype.scaleSelectedItems = function (sx, sy, pivot) {\n var obj = this.diagram.selectedItems;\n if (this.state && !this.state.backup) {\n this.state.backup = {};\n this.state.backup.offsetX = obj.offsetX;\n this.state.backup.offsetY = obj.offsetY;\n this.state.backup.width = obj.width;\n this.state.backup.height = obj.height;\n this.state.backup.pivot = pivot;\n }\n return this.diagram.scale(obj, sx, sy, pivot);\n };\n /** @private */\n CommandHandler.prototype.rotateSelectedItems = function (angle) {\n var obj = this.diagram.selectedItems;\n if (this.state && !this.state.backup) {\n this.state.backup = {};\n this.state.backup.angle = obj.rotateAngle;\n }\n return this.diagram.rotate(obj, angle);\n };\n /** @private */\n CommandHandler.prototype.hasSelection = function () {\n return hasSelection(this.diagram);\n };\n /** @private */\n CommandHandler.prototype.isSelected = function (element) {\n return isSelected(this.diagram, element);\n };\n /**\n * initExpand is used for layout expand and collapse interaction\n */\n CommandHandler.prototype.initExpand = function (args) {\n var node = (args.target || args.source);\n this.expandNode(node, false, this.diagram);\n };\n /** @private */\n CommandHandler.prototype.expandNode = function (node, propChange, diagram) {\n var animation;\n var objects;\n var expand = propChange ? node.isExpanded : !node.isExpanded;\n this.expandCollapse(node, expand, this.diagram);\n node.isExpanded = expand;\n this.diagram.layout.fixedNode = node.id;\n if (!propChange) {\n this.diagram.updateIcon(node);\n }\n if (this.diagram.layoutAnimateModule && this.diagram.layout.enableAnimation) {\n this.diagram.organizationalChartModule.isAnimation = true;\n }\n objects = this.diagram.doLayout();\n if (this.diagram.layoutAnimateModule && this.diagram.layout.enableAnimation) {\n this.layoutAnimateModule.expand(this.diagram.organizationalChartModule.isAnimation, objects, node, this.diagram);\n }\n return objects;\n };\n /**\n * Setinterval and Clear interval for layout animation\n */\n /** @private */\n CommandHandler.prototype.expandCollapse = function (source, visibility, diagram) {\n for (var i = 0; i < source.outEdges.length; i++) {\n var connector = diagram.nameTable[source.outEdges[i]];\n var target = diagram.nameTable[connector.targetID];\n connector.visible = visibility;\n if (target.isExpanded) {\n this.expandCollapse(target, visibility, diagram);\n }\n var oldValues = {\n visible: target.visible\n };\n target.visible = visibility;\n var newValues = {\n visible: target.visible\n };\n diagram.nodePropertyChange(target, oldValues, newValues);\n diagram.connectorPropertyChange(connector, oldValues, newValues);\n }\n };\n /**\n * @private\n */\n CommandHandler.prototype.updateNodeDimension = function (obj, rect) {\n if (obj instanceof Node) {\n obj.offsetX = rect.x + rect.width / 2;\n obj.offsetY = rect.y + rect.height / 2;\n obj.width = rect.width;\n obj.height = rect.height;\n this.diagram.nodePropertyChange(obj, {}, {\n width: rect.width, height: rect.height, offsetX: obj.offsetX,\n offsetY: obj.offsetY\n });\n if (this.diagram.mode !== 'SVG') {\n this.diagram.refreshDiagramLayer();\n }\n }\n };\n /** @private */\n CommandHandler.prototype.drawSelectionRectangle = function (x, y, width, height) {\n this.diagram.drawSelectionRectangle(x, y, width, height);\n };\n /** @private */\n CommandHandler.prototype.startGroupAction = function () {\n this.diagram.startGroupAction();\n };\n /** @private */\n CommandHandler.prototype.endGroupAction = function () {\n this.diagram.endGroupAction();\n };\n /** @private */\n CommandHandler.prototype.removeChildFromBPmn = function (child, newTarget, oldTarget) {\n var obj = this.diagram.nameTable[child.id] || child.nodes[0];\n if (oldTarget) {\n if ((obj) && obj.processId && obj.processId === oldTarget.wrapper.id) {\n var node = clone(obj);\n node.processId = obj.processId;\n this.diagram.startGroupAction();\n var edges = [];\n edges = edges.concat(obj.outEdges, obj.inEdges);\n for (var i = edges.length - 1; i >= 0; i--) {\n var connector = this.diagram.nameTable[edges[i]];\n if (connector) {\n this.diagram.remove(connector);\n }\n }\n var nodeCollection = void 0;\n nodeCollection = (this.diagram.nameTable[obj.processId].shape.activity.subProcess.processes) || [];\n nodeCollection.splice(nodeCollection.indexOf((obj).id), 1);\n this.diagram.bpmnModule.removeChildFromBPMN(this.diagram.nameTable[obj.processId].wrapper, (obj).id);\n this.diagram.nameTable[(obj).id].processId = '';\n obj.offsetX = obj.wrapper.offsetX;\n obj.offsetY = obj.wrapper.offsetY;\n var undoElement = clone(obj);\n var entry = {\n type: 'PositionChanged', redoObject: { nodes: [undoElement] }, undoObject: { nodes: [node] }, category: 'Internal'\n };\n this.addHistoryEntry(entry);\n this.diagram.endGroupAction();\n }\n }\n };\n /** @private */\n CommandHandler.prototype.isDroppable = function (source, targetNodes) {\n var node = this.diagram.nameTable[source.id] || source.nodes[0];\n if (node && node.shape.type === 'Bpmn') {\n if ((node.processId === targetNodes.id) || (node.id === targetNodes.processId) ||\n targetNodes.shape.activity.subProcess.collapsed) {\n return false;\n }\n }\n return true;\n };\n /**\n * @private\n */\n CommandHandler.prototype.renderHighlighter = function (args, connectHighlighter, source) {\n var bounds = new Rect();\n if (args.target instanceof Node || (connectHighlighter && args.source instanceof Node)) {\n var tgt = connectHighlighter ? args.source : args.target;\n var tgtWrap = connectHighlighter ? args.sourceWrapper : args.targetWrapper;\n var target = this.findTarget(tgtWrap, tgt, source);\n var element = void 0;\n if (target instanceof BpmnSubEvent) {\n var portId = target.id;\n var node = args.target;\n var parent_6 = node.wrapper.children[0].children[0].children[2];\n for (var _i = 0, _a = parent_6.children; _i < _a.length; _i++) {\n var child = _a[_i];\n if (child.id === node.id + '_' + portId) {\n element = child.children[0];\n break;\n }\n }\n }\n else {\n element = target instanceof Node ?\n target.wrapper : connectHighlighter ? args.sourceWrapper : args.targetWrapper;\n }\n this.diagram.renderHighlighter(element);\n }\n };\n //additional events\n /** @private */\n CommandHandler.prototype.mouseOver = function (source, target, position) {\n //mouse over\n //returns whether the source can move over the target or not\n return true;\n };\n /**\n * @private\n */\n CommandHandler.prototype.snapPoint = function (startPoint, endPoint, tx, ty) {\n var obj = this.diagram.selectedItems;\n var point;\n var towardsLeft = endPoint.x < startPoint.x;\n var towardsTop = endPoint.y < startPoint.y;\n point = { x: tx, y: ty };\n var snappedPoint = point;\n if (this.snappingModule) {\n snappedPoint = this.diagram.snappingModule.snapPoint(this.diagram, obj, towardsLeft, towardsTop, point, startPoint, endPoint);\n }\n return snappedPoint;\n };\n /**\n * @private\n */\n CommandHandler.prototype.removeSnap = function () {\n if ((this.diagram.snapSettings.constraints & SnapConstraints.SnapToObject) && this.snappingModule) {\n this.snappingModule.removeGuidelines(this.diagram);\n }\n };\n /** @private */\n CommandHandler.prototype.drop = function (source, target, position) {\n //drop\n if (this.diagram.bpmnModule) {\n this.diagram.bpmnModule.dropBPMNchild(target, (source instanceof Node) ? source : source.nodes[0], this.diagram);\n this.diagram.refreshDiagramLayer();\n }\n };\n /** @private */\n CommandHandler.prototype.addHistoryEntry = function (entry) {\n this.diagram.addHistoryEntry(entry);\n };\n /** @private */\n CommandHandler.prototype.align = function (objects, option) {\n if (objects.length > 0) {\n var i = 0;\n var j = 0;\n var bounds = getBounds(objects[0].wrapper);\n var undoObj = { nodes: [], connectors: [] };\n var redoObj = { nodes: [], connectors: [] };\n for (i = 1; i < objects.length; i++) {\n var tx = 0;\n var ty = 0;\n if (option === 'Left') {\n if (objects[i] instanceof Node) {\n tx = bounds.topLeft.x +\n objects[i].width / 2 - objects[i].offsetX;\n }\n else {\n tx = bounds.topLeft.x - objects[i].sourcePoint.x;\n }\n }\n else if (option === 'Right') {\n if (objects[i] instanceof Node) {\n tx = bounds.topRight.x -\n objects[i].width / 2 - objects[i].offsetX;\n }\n else {\n tx = bounds.topRight.x - objects[i].wrapper.bounds.width -\n objects[i].sourcePoint.x;\n }\n }\n else if (option === 'Top') {\n if (objects[i] instanceof Node) {\n ty = bounds.top + objects[i].height / 2 - objects[i].offsetY;\n }\n else {\n ty = bounds.top - objects[i].sourcePoint.y;\n }\n }\n else if (option === 'Bottom') {\n if (objects[i] instanceof Node) {\n ty = bounds.bottom - objects[i].height / 2 - objects[i].offsetY;\n }\n else {\n ty = bounds.bottom - objects[i].sourcePoint.y;\n }\n }\n else if (option === 'Center') {\n if (objects[i] instanceof Node) {\n tx = bounds.center.x - objects[i].offsetX;\n }\n else {\n j = Math.abs(bounds.width -\n objects[i].wrapper.bounds.width);\n tx = bounds.bottomLeft.x - j / 2 - objects[i].sourcePoint.x;\n }\n }\n else if (option === 'Middle') {\n if (objects[i] instanceof Node) {\n ty = bounds.center.y - objects[i].offsetY;\n }\n else {\n ty = bounds.center.y - objects[i].sourcePoint.y;\n }\n }\n undoObj = this.storeObject(undoObj, objects[i]);\n this.drag(objects[i], tx, ty);\n this.diagram.updateSelector();\n redoObj = this.storeObject(redoObj, objects[i]);\n }\n undoObj = clone(undoObj);\n redoObj = clone(redoObj);\n var entry = {\n type: 'Align', category: 'Internal',\n undoObject: cloneObject(undoObj), redoObject: cloneObject(redoObj)\n };\n this.addHistoryEntry(entry);\n }\n };\n /** @private */\n CommandHandler.prototype.distribute = function (objects, option) {\n if (objects.length > 0) {\n var i = 0;\n var j = 0;\n var rect = new Rect();\n var b = [];\n var temp = void 0;\n var right = 0;\n var left = 0;\n var top_3 = 0;\n var bottom = 0;\n var center = 0;\n var middle = 0;\n var btt = 0;\n var sum = 0;\n var undoSelectorObj = { nodes: [], connectors: [] };\n var redoSelectorObj = { nodes: [], connectors: [] };\n objects = sort(objects);\n for (i = 1; i < objects.length; i++) {\n right = right + objects[i].wrapper.bounds.topRight.x - objects[i - 1].wrapper.bounds.topRight.x;\n left = left + objects[i].wrapper.bounds.topLeft.x - objects[i - 1].wrapper.bounds.topLeft.x;\n top_3 = top_3 + objects[i].wrapper.bounds.topRight.y - objects[i - 1].wrapper.bounds.topRight.y;\n bottom = bottom + objects[i].wrapper.bounds.bottomRight.y - objects[i - 1].wrapper.bounds.bottomRight.y;\n center = center + objects[i].wrapper.bounds.center.x - objects[i - 1].wrapper.bounds.center.x;\n middle = middle + objects[i].wrapper.bounds.center.y - objects[i - 1].wrapper.bounds.center.y;\n btt = btt + objects[i].wrapper.bounds.topRight.y - objects[i - 1].wrapper.bounds.bottomRight.y;\n }\n for (i = 1; i < objects.length - 1; i++) {\n var tx = 0;\n var ty = 0;\n var prev = getBounds(objects[i - 1].wrapper);\n var current = getBounds(objects[i].wrapper);\n if (option === 'RightToLeft' || option === 'Center') {\n tx = prev.center.x - current.center.x + (center / (objects.length - 1));\n }\n else if (option === 'Right') {\n tx = prev.topRight.x - current.topRight.x + (right / (objects.length - 1));\n }\n else if (option === 'Left') {\n tx = prev.topLeft.x - current.topLeft.x + (left / (objects.length - 1));\n }\n else if (option === 'Middle') {\n ty = prev.center.y - current.center.y + (middle / (objects.length - 1));\n }\n else if (option === 'Top') {\n ty = prev.topRight.y - current.topRight.y + (top_3 / (objects.length - 1));\n }\n else if (option === 'Bottom') {\n ty = prev.bottomRight.y - current.bottomRight.y + (bottom / (objects.length - 1));\n }\n else if (option === 'BottomToTop') {\n ty = prev.bottomRight.y - current.topRight.y + (btt / (objects.length - 1));\n }\n undoSelectorObj = this.storeObject(undoSelectorObj, objects[i]);\n this.drag(objects[i], tx, ty);\n this.diagram.updateSelector();\n redoSelectorObj = this.storeObject(redoSelectorObj, objects[i]);\n }\n undoSelectorObj = clone(undoSelectorObj);\n redoSelectorObj = clone(redoSelectorObj);\n var entry = {\n type: 'Distribute', category: 'Internal',\n undoObject: cloneObject(undoSelectorObj), redoObject: cloneObject(redoSelectorObj)\n };\n this.addHistoryEntry(entry);\n }\n };\n /** @private */\n CommandHandler.prototype.sameSize = function (objects, option) {\n if (objects.length > 0) {\n var i = 0;\n var pivot = void 0;\n pivot = { x: 0.5, y: 0.5 };\n var bounds = getBounds(objects[0].wrapper);\n var undoObject = { nodes: [], connectors: [] };\n var redoObject = { nodes: [], connectors: [] };\n for (i = 1; i < objects.length; i++) {\n var rect = getBounds(objects[i].wrapper);\n var sw = 1;\n var sh = 1;\n if (option === 'Width') {\n sw = bounds.width / rect.width;\n }\n else if (option === 'Height') {\n sh = bounds.height / rect.height;\n }\n else if (option === 'Size') {\n sw = bounds.width / rect.width;\n sh = bounds.height / rect.height;\n }\n undoObject = this.storeObject(undoObject, objects[i]);\n this.scale(objects[i], sw, sh, pivot);\n redoObject = this.storeObject(redoObject, objects[i]);\n }\n this.diagram.updateSelector();\n undoObject = clone(undoObject);\n redoObject = clone(redoObject);\n var entry = {\n type: 'Sizing', category: 'Internal',\n undoObject: cloneObject(undoObject), redoObject: cloneObject(redoObject)\n };\n this.addHistoryEntry(entry);\n }\n };\n CommandHandler.prototype.storeObject = function (selectorObject, obj) {\n if (obj instanceof Node) {\n selectorObject.nodes.push(clone(obj));\n }\n else {\n selectorObject.connectors.push(clone(obj));\n }\n return selectorObject;\n };\n /** @private */\n CommandHandler.prototype.scroll = function (scrollX, scrollY, focusPoint) {\n var panx = canPanX(this.diagram);\n var pany = canPanY(this.diagram);\n this.diagram.pan((scrollX = panx ? scrollX : 0) * this.diagram.scroller.currentZoom, (scrollY = pany ? scrollY : 0) * this.diagram.scroller.currentZoom, focusPoint);\n };\n /**\n * @private\n */\n CommandHandler.prototype.drawHighlighter = function (element) {\n this.diagram.renderHighlighter(element.wrapper);\n };\n /**\n * @private\n */\n CommandHandler.prototype.removeHighlighter = function () {\n this.diagram.clearHighlighter();\n };\n /** @private */\n CommandHandler.prototype.zoom = function (scale, scrollX, scrollY, focusPoint) {\n this.diagram.scroller.zoom(scale, scrollX * this.diagram.scroller.currentZoom, scrollY * this.diagram.scroller.currentZoom, focusPoint);\n };\n return CommandHandler;\n}());\nexport { CommandHandler };\n","import { Rect } from '../primitives/rect';\nimport { identityMatrix, scaleMatrix, translateMatrix, transformPointByMatrix, multiplyMatrix } from '../primitives/matrix';\nimport { updateRuler } from '../ruler/ruler';\nimport { canZoom, canPan } from './../utility/constraints-util';\n/**\n */\nvar DiagramScroller = /** @class */ (function () {\n function DiagramScroller(diagram) {\n /** @private */\n this.transform = { tx: 0, ty: 0, scale: 1 };\n this.vPortWidth = 0;\n this.vPortHeight = 0;\n this.currentZoomFActor = 1;\n this.hOffset = 0;\n this.vOffset = 0;\n this.scrolled = false;\n this.hScrollSize = 0;\n this.vScrollSize = 0;\n this.diagram = diagram;\n this.objects = [];\n }\n Object.defineProperty(DiagramScroller.prototype, \"viewPortHeight\", {\n /** @private */\n get: function () {\n return this.vPortHeight;\n },\n /** @private */\n set: function (offset) {\n this.vPortHeight = offset;\n this.diagram.scrollSettings.viewPortHeight = offset;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DiagramScroller.prototype, \"currentZoom\", {\n /** @private */\n get: function () {\n return this.currentZoomFActor;\n },\n /** @private */\n set: function (offset) {\n this.currentZoomFActor = offset;\n this.diagram.scrollSettings.currentZoom = offset;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DiagramScroller.prototype, \"viewPortWidth\", {\n /** @private */\n get: function () {\n return this.vPortWidth;\n },\n /** @private */\n set: function (offset) {\n this.vPortWidth = offset;\n this.diagram.scrollSettings.viewPortWidth = offset;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DiagramScroller.prototype, \"horizontalOffset\", {\n /** @private */\n get: function () {\n return this.hOffset;\n },\n /** @private */\n set: function (offset) {\n this.hOffset = offset;\n if (Math.abs(this.hOffset - this.diagram.scrollSettings.horizontalOffset) > 1) {\n this.scrolled = true;\n }\n this.diagram.scrollSettings.horizontalOffset = offset;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DiagramScroller.prototype, \"verticalOffset\", {\n /** @private */\n get: function () {\n return this.vOffset;\n },\n /** @private */\n set: function (offset) {\n this.vOffset = offset;\n if (Math.abs(this.vOffset - this.diagram.scrollSettings.verticalOffset) > 1) {\n this.scrolled = true;\n }\n this.diagram.scrollSettings.verticalOffset = offset;\n },\n enumerable: true,\n configurable: true\n });\n /** @private */\n DiagramScroller.prototype.updateScrollOffsets = function (hOffset, vOffset) {\n var offsetX = 0;\n var offsetY = 0;\n var pageBounds = this.getPageBounds();\n pageBounds.x *= this.currentZoom;\n pageBounds.y *= this.currentZoom;\n pageBounds.width *= this.currentZoom;\n pageBounds.height *= this.currentZoom;\n offsetX = Math.max(0, hOffset - pageBounds.left);\n offsetY = Math.max(0, vOffset - pageBounds.top);\n if (hOffset !== undefined && vOffset !== undefined) {\n this.horizontalOffset = offsetX;\n this.verticalOffset = offsetY;\n this.diagram.setOffset(offsetX, offsetY);\n }\n else {\n this.diagram.setOffset(-this.horizontalOffset - pageBounds.x, -this.verticalOffset - pageBounds.y);\n }\n this.transform = {\n tx: Math.max(this.horizontalOffset, -pageBounds.left) / this.currentZoom, ty: Math.max(this.verticalOffset, -pageBounds.top) / this.currentZoom,\n scale: this.currentZoom\n };\n };\n /** @private */\n DiagramScroller.prototype.setScrollOffset = function (hOffset, vOffset) {\n this.scrolled = false;\n var pageBounds = this.getPageBounds();\n pageBounds.x *= this.currentZoom;\n pageBounds.y *= this.currentZoom;\n pageBounds.width *= this.currentZoom;\n pageBounds.height *= this.currentZoom;\n var x = -pageBounds.left;\n var y = -pageBounds.top;\n var set = false;\n var viewWidth = this.viewPortWidth * this.currentZoom;\n var viewHeight = this.viewPortHeight * this.currentZoom;\n var newX = x - hOffset;\n if (newX !== this.horizontalOffset) {\n if (x < this.horizontalOffset) {\n if (this.horizontalOffset > newX) {\n this.horizontalOffset -= hOffset;\n }\n else {\n this.horizontalOffset = newX;\n }\n set = true;\n }\n var right = Math.max(pageBounds.right + this.vScrollSize, viewWidth);\n if (!set && right < -newX + this.viewPortWidth) {\n var actualRight = -newX + viewWidth - this.vScrollSize;\n var currentRight = -this.horizontalOffset + viewWidth - this.vScrollSize;\n if (actualRight < currentRight) {\n //define\n this.horizontalOffset = newX;\n }\n else {\n if (actualRight - pageBounds.right > actualRight - currentRight) {\n this.horizontalOffset = newX;\n }\n else {\n this.horizontalOffset = -(pageBounds.right + this.vScrollSize - viewWidth);\n }\n }\n set = true;\n }\n if (!set) {\n this.horizontalOffset = x - hOffset;\n }\n }\n set = false;\n //vertical offset\n var newY = y - vOffset;\n if (newY !== this.verticalOffset) {\n if (y < this.verticalOffset) {\n if (this.verticalOffset > newY) {\n this.verticalOffset -= vOffset;\n }\n else {\n this.verticalOffset = newY;\n }\n set = true;\n }\n var bottom = Math.max(pageBounds.bottom + this.hScrollSize, viewHeight);\n if (!set && bottom < -newY + viewHeight) {\n var actualBottom = -newY + viewHeight - this.hScrollSize;\n var currentBottom = -this.verticalOffset + viewHeight - this.hScrollSize;\n if (actualBottom < currentBottom) {\n //define\n this.verticalOffset = newY;\n }\n else {\n if (actualBottom - pageBounds.bottom > actualBottom - currentBottom) {\n this.verticalOffset = newY;\n }\n else {\n this.verticalOffset = -(pageBounds.bottom + this.hScrollSize - viewHeight);\n }\n }\n set = true;\n }\n if (!set) {\n this.verticalOffset = y - vOffset;\n }\n }\n this.transform = {\n tx: Math.max(this.horizontalOffset, -pageBounds.left) / this.currentZoom, ty: Math.max(this.verticalOffset, -pageBounds.top) / this.currentZoom,\n scale: this.currentZoom\n };\n this.setSize();\n if (this.scrolled) {\n this.diagram.endEdit();\n }\n };\n /** @private */\n DiagramScroller.prototype.setSize = function () {\n var pageBounds = this.getPageBounds();\n pageBounds.x *= this.currentZoom;\n pageBounds.y *= this.currentZoom;\n pageBounds.width *= this.currentZoom;\n pageBounds.height *= this.currentZoom;\n var x = Math.min(pageBounds.x, -this.horizontalOffset);\n var y = Math.min(pageBounds.y, -this.verticalOffset);\n var difX = -this.horizontalOffset + this.viewPortWidth - pageBounds.right;\n var difY = -this.verticalOffset + this.viewPortHeight - pageBounds.bottom;\n var hScrollSize = this.scrollerWidth;\n var vScrollSize = this.scrollerWidth;\n if (-this.verticalOffset <= pageBounds.y && -this.verticalOffset + this.viewPortHeight >= pageBounds.bottom) {\n vScrollSize = 0;\n }\n if (-this.horizontalOffset <= pageBounds.x && -this.horizontalOffset + this.viewPortWidth >= pageBounds.right) {\n hScrollSize = 0;\n }\n this.hScrollSize = hScrollSize;\n this.vScrollSize = vScrollSize;\n this.diagramWidth = Math.max(pageBounds.right, -this.horizontalOffset + this.viewPortWidth - vScrollSize) - x;\n this.diagramHeight = Math.max(pageBounds.bottom, -this.verticalOffset + this.viewPortHeight - hScrollSize) - y;\n this.diagram.setSize(this.diagramWidth, this.diagramHeight);\n this.diagram.element.style.overflow = 'hidden';\n };\n /** @private */\n DiagramScroller.prototype.setViewPortSize = function (width, height) {\n this.viewPortWidth = width;\n this.viewPortHeight = height;\n };\n /**\n * To get page pageBounds\n * @private\n */\n DiagramScroller.prototype.getPageBounds = function (boundingRect, region) {\n var rect = new Rect();\n var temp = 0;\n if (region !== 'Content' && this.diagram.pageSettings.width !== null && this.diagram.pageSettings.height !== null) {\n var width = this.diagram.pageSettings.width;\n var height = this.diagram.pageSettings.height;\n var negwidth = 0;\n var negheight = 0;\n if (this.diagram.pageSettings.multiplePage) {\n rect = this.diagram.spatialSearch.getPageBounds(0, 0);\n if (rect.right > width) {\n var x = Math.ceil(rect.right / width);\n width = width * x;\n }\n if (rect.bottom > height) {\n var x = Math.ceil(rect.bottom / height);\n height = height * x;\n }\n if (rect.left < 0 && Math.abs(rect.left) > negwidth) {\n var x = Math.ceil(Math.abs(rect.left) / this.diagram.pageSettings.width);\n negwidth = this.diagram.pageSettings.width * x;\n }\n if (rect.top < 0 && Math.abs(rect.top) > negheight) {\n var x = Math.ceil(Math.abs(rect.top) / this.diagram.pageSettings.height);\n negheight = this.diagram.pageSettings.height * x;\n }\n }\n return new Rect((-negwidth), (-negheight), width + negwidth, height + negheight);\n }\n else {\n var origin = boundingRect ? undefined : 0;\n return this.diagram.spatialSearch.getPageBounds(origin, origin);\n }\n };\n /**\n * To get page break when PageBreak is set as true\n * @private\n */\n DiagramScroller.prototype.getPageBreak = function (pageBounds) {\n var i = 0;\n var j = 0;\n var v = -1;\n var collection = [];\n var x1 = 0;\n var x2 = 0;\n var y1 = 0;\n var y2 = 0;\n var left = this.diagram.pageSettings.margin.left;\n var right = this.diagram.pageSettings.margin.right;\n var top = this.diagram.pageSettings.margin.top;\n var bottom = this.diagram.pageSettings.margin.bottom;\n var widthCount = 1;\n var heightCount = 1;\n var segment = { x1: x1, y1: y1, x2: x2, y2: y2 };\n while (pageBounds.width > i) {\n i = i + (this.diagram.pageSettings.width ? this.diagram.pageSettings.width : pageBounds.width);\n if (i === this.diagram.pageSettings.width) {\n segment = {\n x1: pageBounds.left + left, y1: pageBounds.top + top,\n x2: pageBounds.left + left, y2: pageBounds.bottom - bottom\n };\n collection[++v] = segment;\n }\n if (i < pageBounds.width) {\n x1 = pageBounds.topLeft.x + this.diagram.pageSettings.width * widthCount;\n y1 = pageBounds.topLeft.y + top;\n x2 = pageBounds.bottomLeft.x + this.diagram.pageSettings.width * widthCount;\n y2 = pageBounds.bottomLeft.y - bottom;\n segment = { x1: x1, y1: y1, x2: x2, y2: y2 };\n collection[++v] = segment;\n widthCount++;\n }\n if (pageBounds.width === i) {\n segment = {\n x1: pageBounds.right - right, y1: pageBounds.top + top,\n x2: pageBounds.right - right, y2: pageBounds.bottom - bottom\n };\n collection[++v] = segment;\n }\n }\n while (pageBounds.height > j) {\n j = j + (this.diagram.pageSettings.height ? this.diagram.pageSettings.height : pageBounds.height);\n if (j === this.diagram.pageSettings.height) {\n segment = {\n x1: pageBounds.left + left, y1: pageBounds.top + top,\n x2: pageBounds.right - right, y2: pageBounds.top + top\n };\n collection[++v] = segment;\n }\n if (j < pageBounds.height) {\n x1 = pageBounds.topLeft.x + left;\n y1 = pageBounds.topLeft.y + this.diagram.pageSettings.height * heightCount;\n x2 = pageBounds.topRight.x - right;\n y2 = pageBounds.topRight.y + this.diagram.pageSettings.height * heightCount;\n segment = { x1: x1, y1: y1, x2: x2, y2: y2 };\n collection[++v] = segment;\n heightCount++;\n }\n if (pageBounds.height === j) {\n segment = {\n x1: pageBounds.left + left, y1: pageBounds.bottom - bottom,\n x2: pageBounds.right - right, y2: pageBounds.bottom - bottom\n };\n collection[++v] = segment;\n }\n }\n return collection;\n };\n /** @private */\n DiagramScroller.prototype.zoom = function (factor, deltaX, deltaY, focusPoint) {\n if (canZoom(this.diagram) && factor !== 1 || (canPan(this.diagram) && factor === 1)) {\n var matrix = identityMatrix();\n scaleMatrix(matrix, this.currentZoom, this.currentZoom);\n translateMatrix(matrix, this.horizontalOffset, this.verticalOffset);\n focusPoint = focusPoint || { x: this.viewPortWidth / 2, y: this.viewPortHeight / 2 };\n focusPoint = transformPointByMatrix(matrix, focusPoint);\n if ((this.currentZoom * factor) >= this.diagram.scrollSettings.minZoom &&\n (this.currentZoom * factor) <= this.diagram.scrollSettings.maxZoom) {\n this.currentZoom *= factor;\n var pageBounds = this.getPageBounds();\n pageBounds.x *= this.currentZoom;\n pageBounds.y *= this.currentZoom;\n //target Matrix\n var targetMatrix = identityMatrix();\n scaleMatrix(targetMatrix, factor, factor, focusPoint.x, focusPoint.y);\n translateMatrix(targetMatrix, deltaX || 0, deltaY || 0);\n multiplyMatrix(matrix, targetMatrix);\n var newOffset = transformPointByMatrix(matrix, { x: 0, y: 0 });\n if (factor === 1) {\n newOffset = this.applyScrollLimit(newOffset.x, newOffset.y);\n }\n this.transform = {\n tx: Math.max(newOffset.x, -pageBounds.left) / this.currentZoom,\n ty: Math.max(newOffset.y, -pageBounds.top) / this.currentZoom,\n scale: this.currentZoom\n };\n this.horizontalOffset = newOffset.x;\n this.verticalOffset = newOffset.y;\n this.setSize();\n if (this.diagram.mode !== 'SVG') {\n this.diagram.refreshDiagramLayer();\n }\n this.diagram.setOffset(-this.horizontalOffset - pageBounds.x, -this.verticalOffset - pageBounds.y);\n updateRuler(this.diagram);\n }\n }\n };\n /** @private */\n DiagramScroller.prototype.fitToPage = function (options) {\n options = options || {};\n var mode = options.mode;\n var region = options.region;\n var margin = options.margin || {};\n var canZoomIn = options.canZoomIn;\n var customBounds = options.customBounds;\n margin.bottom = margin.bottom || 25;\n margin.top = margin.top || 25;\n margin.left = margin.left || 25;\n margin.right = margin.right || 25;\n var bounds = customBounds;\n var factor;\n var deltaX = -this.horizontalOffset;\n var deltaY = -this.verticalOffset;\n region = region ? region : 'PageSettings';\n //fit mode\n if ((region === 'PageSettings' && this.diagram.pageSettings.width && this.diagram.pageSettings.height)\n || (this.diagram.nodes.length > 0 || this.diagram.connectors.length > 0)) {\n mode = mode ? mode : 'Page';\n if (region !== 'CustomBounds') {\n bounds = this.getPageBounds(true, region);\n }\n var scale = { x: 0, y: 0 };\n scale.x = (this.viewPortWidth - (margin.left + margin.right)) / (bounds.width);\n scale.y = (this.viewPortHeight - (margin.top + margin.bottom)) / (bounds.height);\n if (!canZoomIn && ((bounds.width - this.horizontalOffset) < this.viewPortWidth) &&\n (bounds.height - this.verticalOffset) < this.viewPortHeight) {\n scale.x = Math.min(1, scale.x);\n scale.y = Math.min(1, scale.y);\n }\n var zoomFactor = void 0;\n var centerX = void 0;\n var centerY = void 0;\n switch (mode) {\n case 'Width':\n zoomFactor = scale.x;\n factor = zoomFactor / this.currentZoom;\n centerX = (this.viewPortWidth - (bounds.width) * zoomFactor) / 2 - bounds.x * zoomFactor;\n deltaX += centerX + (margin.left - margin.right) / 2 * zoomFactor;\n deltaY -= -this.verticalOffset * factor;\n deltaY = region !== 'CustomBounds' ? deltaY : deltaY - this.verticalOffset * factor;\n break;\n case 'Height':\n zoomFactor = scale.y;\n factor = (zoomFactor / this.currentZoom);\n centerX = ((this.viewPortWidth - (bounds.width) * zoomFactor) / 2) - bounds.x * zoomFactor;\n centerY = ((this.viewPortHeight - (bounds.height) * zoomFactor) / 2) - bounds.y * zoomFactor;\n deltaX += centerX + (margin.left - margin.right) / 2 * zoomFactor;\n deltaY += centerY + (margin.top - margin.bottom) / 2 * zoomFactor;\n break;\n case 'Page':\n zoomFactor = Math.min(scale.x, scale.y);\n factor = (zoomFactor / this.currentZoom);\n centerX = (this.viewPortWidth - (bounds.width) * zoomFactor) / 2 - bounds.x * zoomFactor;\n centerY = (this.viewPortHeight - (bounds.height) * zoomFactor) / 2 - bounds.y * zoomFactor;\n deltaX += centerX + (margin.left - margin.right) / 2 * zoomFactor;\n deltaY += centerY + (margin.top - margin.bottom) / 2 * zoomFactor;\n break;\n }\n this.zoom(factor, deltaX, deltaY, { x: 0, y: 0 });\n }\n else {\n factor = 1 / this.currentZoom;\n this.zoom(factor, deltaX, deltaY, { x: 0, y: 0 });\n }\n };\n /** @private */\n DiagramScroller.prototype.bringIntoView = function (rect) {\n var x = 0;\n var y = 0;\n var scale = this.currentZoom;\n var bounds = rect;\n var hoffset = -this.horizontalOffset;\n var voffset = -this.verticalOffset;\n bounds = new Rect(bounds.x * scale, bounds.y * scale, bounds.width * scale, bounds.height * scale);\n var view = new Rect(hoffset, voffset, this.viewPortWidth, this.viewPortHeight);\n if (!(view.containsRect(bounds))) {\n if (bounds.right > (-hoffset + this.viewPortWidth)) {\n x = bounds.right - this.viewPortWidth;\n }\n if (bounds.x < -hoffset) {\n x = bounds.x;\n }\n if (bounds.bottom > (-voffset + this.viewPortHeight)) {\n y = bounds.bottom - this.viewPortHeight;\n }\n if (bounds.y < -voffset) {\n y = bounds.y;\n }\n this.zoom(1, -this.horizontalOffset - x, -this.verticalOffset - y, null);\n }\n };\n /** @private */\n DiagramScroller.prototype.bringToCenter = function (bounds) {\n var scale = this.currentZoom;\n var actualbounds = new Rect(bounds.x * scale, bounds.y * scale, bounds.width * scale, bounds.height * scale);\n var hoffset = actualbounds.x + actualbounds.width / 2 - this.viewPortWidth / 2;\n var voffset = actualbounds.y + actualbounds.height / 2 - this.viewPortHeight / 2;\n this.zoom(1, -this.horizontalOffset - hoffset, -this.verticalOffset - voffset, null);\n };\n DiagramScroller.prototype.applyScrollLimit = function (hOffset, vOffset) {\n if (this.diagram.scrollSettings.scrollLimit !== 'Infinity') {\n var bounds = void 0;\n if (this.diagram.scrollSettings.scrollLimit === 'Limited') {\n bounds = this.diagram.scrollSettings.scrollableArea;\n }\n bounds = bounds || this.getPageBounds(true);\n bounds.x *= this.currentZoom;\n bounds.y *= this.currentZoom;\n bounds.width *= this.currentZoom;\n bounds.height *= this.currentZoom;\n hOffset *= -1;\n vOffset *= -1;\n var allowedRight = Math.max(bounds.right, this.viewPortWidth);\n if (!(hOffset <= bounds.x && (hOffset + this.viewPortWidth >= bounds.right ||\n hOffset >= bounds.right - this.viewPortWidth)\n || hOffset >= bounds.x && (hOffset + this.viewPortWidth <= allowedRight))) {\n //not allowed case\n if (hOffset >= bounds.x) {\n hOffset = Math.max(bounds.x, Math.min(hOffset, hOffset - (hOffset + this.viewPortWidth - this.vScrollSize - allowedRight)));\n }\n else {\n var allowed = bounds.right - this.viewPortWidth;\n hOffset = Math.min(allowed, bounds.x);\n }\n }\n var allowedBottom = Math.max(bounds.bottom, this.viewPortHeight);\n if (!(vOffset <= bounds.y && vOffset + this.viewPortHeight >= bounds.bottom\n || vOffset >= bounds.y && vOffset + this.viewPortHeight <= allowedBottom)) {\n //not allowed case\n if (vOffset >= bounds.y) {\n vOffset = Math.max(bounds.y, Math.min(vOffset, vOffset - (vOffset + this.viewPortHeight - this.hScrollSize - allowedBottom)));\n }\n else {\n var allowed = bounds.bottom - this.viewPortHeight;\n vOffset = Math.min(bounds.y, allowed);\n }\n }\n hOffset *= -1;\n vOffset *= -1;\n }\n return { x: hOffset, y: vOffset };\n };\n return DiagramScroller;\n}());\nexport { DiagramScroller };\n","/**\n * Quad helps to maintain a set of objects that are contained within the particular region\n */\n/** @private */\nvar Quad = /** @class */ (function () {\n /** @private */\n function Quad(left, top, width, height, spatialSearching) {\n this.objects = [];\n this.left = left;\n this.top = top;\n this.width = width;\n this.height = height;\n this.spatialSearch = spatialSearching;\n }\n /** @private */\n Quad.prototype.findQuads = function (currentViewPort, quads) {\n if (this.first != null && this.first.isIntersect(currentViewPort)) {\n this.first.findQuads(currentViewPort, quads);\n }\n if (this.second != null && this.second.isIntersect(currentViewPort)) {\n this.second.findQuads(currentViewPort, quads);\n }\n if (this.third != null && this.third.isIntersect(currentViewPort)) {\n this.third.findQuads(currentViewPort, quads);\n }\n if (this.fourth != null && this.fourth.isIntersect(currentViewPort)) {\n this.fourth.findQuads(currentViewPort, quads);\n }\n if (this.objects.length > 0) {\n quads.push(this);\n }\n };\n Quad.prototype.isIntersect = function (t) {\n if (this.left + this.width < t.left || this.top + this.height < t.top || this.left > t.right || this.top > t.bottom) {\n return false;\n }\n return true;\n };\n /** @private */\n Quad.prototype.selectQuad = function () {\n var target = null;\n var current = this;\n var quadSet;\n while (current != null) {\n quadSet = current.getQuad(target);\n current = quadSet.source;\n target = quadSet.target || target;\n }\n return target;\n };\n Quad.prototype.getQuad = function (target) {\n target = null;\n var halfWidth = this.width / 2;\n var halfHeight = this.height / 2;\n if (halfWidth >= 1000 && halfHeight >= 1000) {\n var xCenter = this.left + halfWidth;\n var yCenter = this.top + halfHeight;\n if (this.spatialSearch.childRight <= xCenter) {\n if (this.spatialSearch.childBottom <= yCenter) {\n if (!this.first) {\n var newQuad = new Quad(this.left, this.top, halfWidth, halfHeight, this.spatialSearch);\n newQuad.parent = this;\n this.first = newQuad;\n }\n return { source: this.first };\n }\n if (this.spatialSearch.childTop >= yCenter) {\n if (!this.third) {\n var newQuad = new Quad(this.left, yCenter, halfWidth, halfHeight, this.spatialSearch);\n newQuad.parent = this;\n this.third = newQuad;\n }\n return { source: this.third };\n }\n }\n else if (this.spatialSearch.childLeft >= xCenter) {\n if (this.spatialSearch.childBottom <= yCenter) {\n if (!this.second) {\n var newQuad = new Quad(xCenter, this.top, halfWidth, halfHeight, this.spatialSearch);\n newQuad.parent = this;\n this.second = newQuad;\n }\n return { source: this.second };\n }\n if (this.spatialSearch.childTop >= yCenter) {\n if (!this.fourth) {\n var newQuad = new Quad(xCenter, yCenter, halfWidth, halfHeight, this.spatialSearch);\n newQuad.parent = this;\n this.fourth = newQuad;\n }\n return { source: this.fourth };\n }\n }\n }\n target = this;\n this.objects.push(this.spatialSearch.childNode);\n return { target: this };\n };\n /** @private */\n Quad.prototype.isContained = function () {\n if (this.spatialSearch.childLeft >= this.left && this.spatialSearch.childRight <= this.left + this.width &&\n this.spatialSearch.childTop >= this.top && this.spatialSearch.childBottom <= this.top + this.height) {\n return true;\n }\n return false;\n };\n /** @private */\n Quad.prototype.addIntoAQuad = function (node) {\n var quadAddition = {};\n this.spatialSearch.setCurrentNode(node);\n var quad = null;\n while (!quadAddition.isAdded) {\n quadAddition = this.spatialSearch.parentQuad.add(quad);\n quad = quadAddition.quad;\n }\n return quad;\n };\n Quad.prototype.add = function (quad) {\n quad = null;\n if (this.isContained()) {\n quad = this.selectQuad();\n return { isAdded: true, quad: quad };\n }\n else {\n var newParent = void 0;\n var isempty = this.objects.length === 0 && !this.first && !this.second && !this.third &&\n !this.fourth;\n var newWidth = this.width * 2;\n var newHeight = this.height * 2;\n if (this.spatialSearch.childLeft < this.left) {\n if (this.spatialSearch.childTop < this.top) {\n newParent = new Quad(this.left - this.width, this.top - this.height, newWidth, newHeight, this.spatialSearch);\n if (!isempty) {\n newParent.fourth = this;\n }\n }\n else {\n newParent = new Quad(this.left - this.width, this.top, newWidth, newHeight, this.spatialSearch);\n if (!isempty) {\n newParent.second = this;\n }\n }\n }\n else if (this.spatialSearch.childTop < this.top) {\n newParent = new Quad(this.left, this.top - this.height, newWidth, newHeight, this.spatialSearch);\n if (!isempty) {\n newParent.third = this;\n }\n }\n else {\n newParent = new Quad(this.left, this.top, newWidth, newHeight, this.spatialSearch);\n if (!isempty) {\n newParent.first = this;\n }\n }\n this.parent = newParent;\n this.spatialSearch.parentQuad = newParent;\n return { isAdded: false, quad: quad };\n //newParent.AddIntoaQuad(node);\n }\n };\n return Quad;\n}());\nexport { Quad };\n","import { Rect } from '../../primitives/rect';\nimport { Quad } from './quad';\n/**\n * Spatial search module helps to effectively find the objects over diagram\n */\nvar SpatialSearch = /** @class */ (function () {\n /** @private */\n function SpatialSearch(objectTable) {\n this.quadSize = 500;\n this.objectTable = objectTable;\n this.parentQuad = new Quad(0, 0, this.quadSize * 2, this.quadSize * 2, this);\n this.pageLeft = Number.MAX_VALUE;\n this.pageRight = -Number.MAX_VALUE;\n this.pageTop = Number.MAX_VALUE;\n this.pageBottom = -Number.MAX_VALUE;\n this.quadTable = {};\n }\n /** @private */\n SpatialSearch.prototype.removeFromAQuad = function (node) {\n if (this.quadTable[node.id]) {\n var quad = this.quadTable[node.id];\n var index = quad.objects.indexOf(node);\n if (index !== -1) {\n quad.objects.splice(index, 1);\n this.update(quad);\n delete this.quadTable[node.id];\n }\n }\n };\n SpatialSearch.prototype.update = function (quad) {\n if (quad.parent && quad.objects.length === 0 && quad.first && quad.second && quad.third && quad.fourth) {\n var parent_1 = quad.parent;\n if (parent_1.first === quad) {\n parent_1.first = null;\n }\n else if (parent_1.second === quad) {\n parent_1.second = null;\n }\n else if (parent_1.third === quad) {\n parent_1.third = null;\n }\n else if (parent_1.fourth === quad) {\n parent_1.fourth = null;\n }\n this.update(quad.parent);\n }\n else {\n if (quad === this.parentQuad && !quad.first && !quad.second && !quad.third && !quad.fourth) {\n quad.left = 0;\n quad.width = 1000;\n quad.top = 0;\n quad.height = 1000;\n }\n return;\n }\n };\n SpatialSearch.prototype.addIntoAQuad = function (node) {\n var quad = this.parentQuad.addIntoAQuad(node);\n this.quadTable[node.id] = quad;\n };\n SpatialSearch.prototype.updateQuad = function (node) {\n this.setCurrentNode(node);\n var nodBounds = node.outerBounds;\n if (!(!isNaN(nodBounds.x) && !isNaN(nodBounds.y) &&\n !isNaN(nodBounds.width) && !isNaN(nodBounds.height))) {\n return false;\n }\n //nodBounds = new Rect(nodBounds.X.Valid(), nodBounds.Y.Valid(), nodBounds.Width.Valid(), nodBounds.Height.Valid());\n if (this.quadTable[node.id]) {\n var quad = this.quadTable[node.id];\n if (!quad.isContained()) {\n this.removeFromAQuad(node);\n this.addIntoAQuad(node);\n }\n }\n else {\n this.addIntoAQuad(node);\n }\n if (this.isWithinPageBounds(nodBounds) &&\n this.leftElement !== node &&\n this.topElement !== node &&\n this.rightElement !== node &&\n this.bottomElement !== node) {\n //contained - no change\n }\n else {\n var modified = false;\n if (this.pageLeft !== this.childLeft || node !== this.leftElement) {\n if (this.pageLeft >= this.childLeft) {\n this.pageLeft = this.childLeft;\n this.leftElement = node;\n modified = true;\n }\n else if (node === this.leftElement) {\n this.pageLeft = Number.MAX_VALUE;\n this.findLeft(this.parentQuad);\n modified = true;\n }\n }\n if (this.pageTop !== this.childTop || node !== this.topElement) {\n if (this.pageTop >= this.childTop) {\n this.pageTop = this.childTop;\n this.topElement = node;\n modified = true;\n }\n else if (node === this.topElement) {\n this.pageTop = Number.MAX_VALUE;\n this.findTop(this.parentQuad);\n modified = true;\n }\n }\n if (this.pageBottom !== this.childBottom || node !== this.bottomElement) {\n if (this.pageBottom <= this.childBottom) {\n modified = true;\n this.pageBottom = this.childBottom;\n this.bottomElement = node;\n }\n else if (node === this.bottomElement) {\n this.pageBottom = -Number.MAX_VALUE;\n this.findBottom(this.parentQuad);\n modified = true;\n }\n }\n if (this.pageRight !== this.childRight || node !== this.rightElement) {\n if (this.pageRight <= this.childRight) {\n this.pageRight = this.childRight;\n this.rightElement = node;\n modified = true;\n }\n else if (node === this.rightElement) {\n this.pageRight = -Number.MAX_VALUE;\n this.findRight(this.parentQuad);\n modified = true;\n }\n }\n return modified;\n }\n this.setCurrentNode(null);\n return false;\n };\n SpatialSearch.prototype.isWithinPageBounds = function (node) {\n if (node.left >= this.pageLeft && node.right <= this.pageRight && node.top >= this.pageTop\n && node.bottom <= this.pageBottom) {\n return true;\n }\n else {\n return false;\n }\n };\n /** @private */\n SpatialSearch.prototype.findQuads = function (region) {\n var quads = [];\n this.parentQuad.findQuads(region, quads);\n return quads;\n };\n /** @private */\n SpatialSearch.prototype.findObjects = function (region) {\n var quads = this.findQuads(region);\n var objects = [];\n for (var _i = 0, quads_1 = quads; _i < quads_1.length; _i++) {\n var quad = quads_1[_i];\n for (var _a = 0, _b = quad.objects; _a < _b.length; _a++) {\n var obj = _b[_a];\n if (obj.outerBounds.intersects(region)) {\n objects.push(this.objectTable[obj.id]);\n }\n }\n }\n return objects;\n };\n /** @private */\n SpatialSearch.prototype.updateBounds = function (node) {\n var modified = false;\n if (node === this.topElement) {\n this.pageTop = Number.MAX_VALUE;\n this.topElement = null;\n this.findTop(this.parentQuad);\n modified = true;\n }\n if (node === this.leftElement) {\n this.pageLeft = Number.MAX_VALUE;\n this.leftElement = null;\n this.findLeft(this.parentQuad);\n modified = true;\n }\n if (node === this.rightElement) {\n this.pageRight = -Number.MAX_VALUE;\n this.rightElement = null;\n this.findRight(this.parentQuad);\n modified = true;\n }\n if (node === this.bottomElement) {\n this.pageBottom = -Number.MAX_VALUE;\n this.bottomElement = null;\n this.findBottom(this.parentQuad);\n modified = true;\n }\n return modified;\n };\n SpatialSearch.prototype.findBottom = function (quad) {\n //if (quad.Quads.Count === 4)\n {\n if (quad.third || quad.fourth) {\n if (quad.third) {\n this.findBottom(quad.third);\n }\n if (quad.fourth) {\n this.findBottom(quad.fourth);\n }\n }\n else {\n if (quad.second) {\n this.findBottom(quad.second);\n }\n if (quad.first) {\n this.findBottom(quad.first);\n }\n }\n }\n for (var _i = 0, _a = quad.objects; _i < _a.length; _i++) {\n var node = _a[_i];\n if (this.pageBottom <= node.outerBounds.bottom) {\n this.pageBottom = node.outerBounds.bottom;\n this.bottomElement = node;\n }\n }\n };\n SpatialSearch.prototype.findRight = function (quad) {\n //if (quad.Quads.Count === 4)\n {\n if (quad.second || quad.fourth) {\n if (quad.second) {\n this.findRight(quad.second);\n }\n if (quad.fourth) {\n this.findRight(quad.fourth);\n }\n }\n else {\n if (quad.first) {\n this.findRight(quad.first);\n }\n if (quad.third) {\n this.findRight(quad.third);\n }\n }\n }\n for (var _i = 0, _a = quad.objects; _i < _a.length; _i++) {\n var node = _a[_i];\n if (this.pageRight <= node.outerBounds.right) {\n this.pageRight = node.outerBounds.right;\n this.rightElement = node;\n }\n }\n };\n SpatialSearch.prototype.findLeft = function (quad) {\n //if (quad.Quads.Count === 4)\n {\n if (quad.first || quad.third) {\n if (quad.first) {\n this.findLeft(quad.first);\n }\n if (quad.third) {\n this.findLeft(quad.third);\n }\n }\n else {\n if (quad.second) {\n this.findLeft(quad.second);\n }\n if (quad.fourth) {\n this.findLeft(quad.fourth);\n }\n }\n }\n for (var _i = 0, _a = quad.objects; _i < _a.length; _i++) {\n var node = _a[_i];\n if (this.pageLeft >= node.outerBounds.left) {\n this.pageLeft = node.outerBounds.left;\n this.leftElement = node;\n }\n }\n };\n SpatialSearch.prototype.findTop = function (quad) {\n //if (quad.Quads.Count === 4)\n {\n if (quad.first || quad.second) {\n if (quad.first) {\n this.findTop(quad.first);\n }\n if (quad.second) {\n this.findTop(quad.second);\n }\n }\n else {\n if (quad.third) {\n this.findTop(quad.third);\n }\n if (quad.fourth) {\n this.findTop(quad.fourth);\n }\n }\n }\n for (var _i = 0, _a = quad.objects; _i < _a.length; _i++) {\n var node = _a[_i];\n if (this.pageTop >= node.outerBounds.top) {\n this.pageTop = node.outerBounds.top;\n this.topElement = node;\n }\n }\n };\n /** @private */\n SpatialSearch.prototype.setCurrentNode = function (node) {\n this.childNode = node;\n if (node) {\n var r = node.outerBounds;\n this.childLeft = Number(r.left);\n this.childTop = Number(r.top);\n this.childRight = Number(r.right);\n this.childBottom = Number(r.bottom);\n }\n else {\n this.childLeft = Number.MAX_VALUE;\n this.childTop = Number.MAX_VALUE;\n this.childRight = -Number.MAX_VALUE;\n this.childBottom = -Number.MAX_VALUE;\n }\n };\n /** @private */\n SpatialSearch.prototype.getPageBounds = function (originX, originY) {\n if (this.pageLeft === Number.MAX_VALUE) {\n return new Rect(0, 0, 0, 0);\n }\n var left = originX !== undefined ? Math.min(this.pageLeft, 0) : this.pageLeft;\n var top = originY !== undefined ? Math.min(this.pageTop, 0) : this.pageTop;\n return new Rect(Math.round(left), Math.round(top), Math.round(this.pageRight - left), Math.round(this.pageBottom - top));\n };\n /** @private */\n SpatialSearch.prototype.getQuad = function (node) {\n return this.quadTable[node.id];\n };\n return SpatialSearch;\n}());\nexport { SpatialSearch };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, Complex, ChildProperty, Collection } from '@syncfusion/ej2-base';\n/**\n * Defines keyboard commands\n */\nvar KeyGesture = /** @class */ (function (_super) {\n __extends(KeyGesture, _super);\n function KeyGesture() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], KeyGesture.prototype, \"key\", void 0);\n __decorate([\n Property()\n ], KeyGesture.prototype, \"keyModifiers\", void 0);\n return KeyGesture;\n}(ChildProperty));\nexport { KeyGesture };\nvar Command = /** @class */ (function (_super) {\n __extends(Command, _super);\n function Command() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Command.prototype, \"name\", void 0);\n __decorate([\n Property()\n ], Command.prototype, \"canExecute\", void 0);\n __decorate([\n Property()\n ], Command.prototype, \"execute\", void 0);\n __decorate([\n Complex({}, KeyGesture)\n ], Command.prototype, \"gesture\", void 0);\n __decorate([\n Property('')\n ], Command.prototype, \"parameter\", void 0);\n return Command;\n}(ChildProperty));\nexport { Command };\nvar CommandManager = /** @class */ (function (_super) {\n __extends(CommandManager, _super);\n function CommandManager() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Collection([], Command)\n ], CommandManager.prototype, \"commands\", void 0);\n return CommandManager;\n}(ChildProperty));\nexport { CommandManager };\n/**\n * Defines the behavior of the context menu items\n */\nvar ContextMenuSettings = /** @class */ (function (_super) {\n __extends(ContextMenuSettings, _super);\n function ContextMenuSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], ContextMenuSettings.prototype, \"show\", void 0);\n __decorate([\n Property()\n ], ContextMenuSettings.prototype, \"showCustomMenuOnly\", void 0);\n __decorate([\n Property()\n ], ContextMenuSettings.prototype, \"items\", void 0);\n return ContextMenuSettings;\n}(ChildProperty));\nexport { ContextMenuSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, Complex, Collection, EventHandler, L10n, Droppable, remove } from '@syncfusion/ej2-base';\nimport { Browser, Event } from '@syncfusion/ej2-base';\nimport { CanvasRenderer } from './rendering/canvas-renderer';\nimport { SvgRenderer } from './rendering/svg-renderer';\nimport { DiagramRenderer } from './rendering/renderer';\nimport { PageSettings, ScrollSettings } from './diagram/page-settings';\nimport { ServiceLocator } from './objects/service';\nimport { Container } from './core/containers/container';\nimport { Node, BpmnShape } from './objects/node';\nimport { Connector } from './objects/connector';\nimport { SnapSettings } from './diagram/grid-lines';\nimport { RulerSettings } from './diagram/ruler-settings';\nimport { removeRulerElements, updateRuler, getRulerSize } from './ruler/ruler';\nimport { renderRuler, renderOverlapElement } from './ruler/ruler';\nimport { Size } from './primitives/size';\nimport { Keys, KeyModifiers, DiagramTools } from './enum/enum';\nimport { DiagramConstraints, SelectorConstraints, PortVisibility, DiagramEvent } from './enum/enum';\nimport { DiagramAction, ThumbsConstraints } from './enum/enum';\nimport { PathElement } from './core/elements/path-element';\nimport { TextElement } from './core/elements/text-element';\nimport { updateStyle, removeItem, updateConnector, updateShape } from './utility/diagram-util';\nimport { checkPortRestriction, serialize, deserialize, updateHyperlink, getObjectType } from './utility/diagram-util';\nimport { Rect } from './primitives/rect';\nimport { getPortShape } from './objects/dictionary/common';\nimport { ShapeAnnotation, PathAnnotation } from './objects/annotation';\nimport { Canvas } from './core/containers/canvas';\nimport { DataSource } from './diagram/data-source';\nimport { Layout } from './layout/layout-base';\nimport { Selector } from './interaction/selector';\nimport { DiagramEventHandler } from './interaction/event-handlers';\nimport { CommandHandler } from './interaction/command-manager';\nimport { DiagramScroller } from './interaction/scroller';\nimport { isSelected } from './interaction/actions';\nimport { SpatialSearch } from './interaction/spatial-search/spatial-search';\nimport { setAttributeSvg, setAttributeHtml, measureHtmlText, removeElement, createMeasureElements } from './utility/dom-util';\nimport { getDiagramElement, getScrollerWidth, getHTMLLayer } from './utility/dom-util';\nimport { getBackgroundLayer, createHtmlElement, createSvgElement, getNativeLayerSvg } from './utility/dom-util';\nimport { getPortLayerSvg, getDiagramLayerSvg } from './utility/dom-util';\nimport { getAdornerLayerSvg, getSelectorElement, getGridLayerSvg, getBackgroundLayerSvg } from './utility/dom-util';\nimport { CommandManager, ContextMenuSettings } from './diagram/keyboard-commands';\nimport { canDelete, canInConnect, canOutConnect, canRotate, canResize, canSingleSelect, canZoomPan } from './utility/constraints-util';\nimport { canDragSourceEnd, canDragTargetEnd, canDragSegmentThumb, enableReadOnly, canMove } from './utility/constraints-util';\nimport { findAnnotation } from './utility/diagram-util';\nimport { randomId, cloneObject, extendObject, getFunction, getBounds } from './utility/base-util';\nimport { DiagramTooltip, initTooltip } from './objects/tooltip';\nimport { PointPort } from './objects/port';\nimport { canShadow } from './utility/constraints-util';\nimport { Layer } from './diagram/layer';\nimport { DiagramNativeElement } from './core/elements/native-element';\nimport { DiagramHtmlElement } from './core/elements/html-element';\n/**\n * Diagram control\n * ```\n *
    \n * \n * ```\n */\nvar Diagram = /** @class */ (function (_super) {\n __extends(Diagram, _super);\n /**\n * Constructor for creating the widget\n */\n function Diagram(options, element) {\n var _this = _super.call(this, options, element) || this;\n /** @private */\n _this.connectorTable = {};\n /** @private */\n _this.groupTable = {};\n /** @private */\n _this.activeLabel = { id: '', parentId: '', isGroup: false };\n _this.renderTimer = null;\n return _this;\n }\n Diagram.prototype.clearCollection = function (isConnector) {\n var collection = [];\n var obj;\n for (var _i = 0, _a = Object.keys(this.nameTable); _i < _a.length; _i++) {\n var key = _a[_i];\n obj = this.nameTable[key];\n if (obj && ((isConnector && obj instanceof Connector) || (!isConnector && obj instanceof Node))) {\n collection.push(obj);\n }\n }\n this.clearObjects(collection);\n };\n /**\n * Updates the diagram control when the objects are changed\n * @param newProp Lists the new values of the changed properties\n * @param oldProp Lists the old values of the changed properties\n */\n /* tslint:disable */\n Diagram.prototype.onPropertyChanged = function (newProp, oldProp) {\n // Model Changed\n var objectArray = [];\n var refreshLayout = false;\n var refereshColelction = false;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'width':\n case 'height':\n this.element.style.width = this.getSizeValue(this.width);\n this.element.style.height = this.getSizeValue(this.height);\n this.eventHandler.updateViewPortSize(this.element);\n for (var _b = 0, _c = this.views; _b < _c.length; _b++) {\n var view = _c[_b];\n var temp = this.views[view];\n if (!(temp instanceof Diagram)) {\n temp.updateView(temp);\n }\n }\n break;\n case 'nodes':\n if (newProp.nodes.length > 0 && oldProp.nodes.length === 0) {\n this.clearCollection();\n refereshColelction = true;\n }\n else {\n for (var _d = 0, _e = Object.keys(newProp.nodes); _d < _e.length; _d++) {\n var key = _e[_d];\n var index = Number(key);\n var actualObject = this.nodes[index];\n var changedProp = newProp.nodes[index];\n refreshLayout = refreshLayout || changedProp.excludeFromLayout !== undefined;\n this.nodePropertyChange(actualObject, oldProp.nodes[index], changedProp);\n objectArray.push(actualObject);\n }\n if (this.mode === 'Canvas') {\n this.refreshDiagramLayer();\n }\n }\n break;\n case 'connectors':\n var oldObject = void 0;\n if (newProp.connectors.length > 0 && oldProp.connectors.length === 0) {\n this.clearCollection(true);\n refereshColelction = true;\n }\n else {\n for (var _f = 0, _g = Object.keys(newProp.connectors); _f < _g.length; _f++) {\n var key = _g[_f];\n var index = Number(key);\n var actualObject = this.connectors[index];\n var changedProp = newProp.connectors[index];\n this.connectorPropertyChange(actualObject, oldProp.connectors[index], changedProp, true);\n objectArray.push(actualObject);\n }\n this.updateBridging();\n if (this.mode === 'Canvas') {\n this.refreshDiagramLayer();\n }\n }\n break;\n case 'bridgeDirection':\n this.updateBridging();\n if (this.mode === 'Canvas') {\n this.refreshDiagramLayer();\n }\n break;\n case 'backgroundColor':\n this.intOffPageBackground();\n break;\n case 'pageSettings':\n this.validatePageSize();\n this.updatePage();\n break;\n case 'selectedItems':\n if (newProp.selectedItems.userHandles && this.selectedItems.wrapper && this.selectedItems.userHandles) {\n if (this.selectedItems.userHandles.length > 0) {\n this.renderSelector(true);\n break;\n }\n }\n if (newProp.selectedItems.constraints) {\n this.renderSelector(true);\n break;\n }\n break;\n case 'snapSettings':\n this.updateSnapSettings(newProp);\n break;\n case 'commandManager':\n this.initCommands();\n break;\n case 'layout':\n refreshLayout = true;\n break;\n case 'dataSourceSettings':\n this.clear();\n this.initObjects();\n refreshLayout = true;\n break;\n case 'tooltip':\n initTooltip(this);\n break;\n case 'rulerSettings':\n this.updateRulerSettings(newProp);\n break;\n case 'layers':\n this.updateLayer(newProp);\n break;\n case 'scrollSettings':\n this.updateScrollSettings(newProp);\n break;\n }\n }\n if (refreshLayout) {\n this.doLayout();\n }\n var args = { element: objectArray, cause: this.diagramActions, oldValue: oldProp, newValue: newProp };\n this.triggerEvent(DiagramEvent.propertyChange, args);\n if (!refereshColelction && (this.canLogChange()) && (this.modelChanged(newProp, oldProp))) {\n var entry = { type: 'PropertyChanged', undoObject: oldProp, redoObject: newProp, category: 'Internal' };\n this.addHistoryEntry(entry);\n }\n this.resetDiagramActions();\n if (refereshColelction) {\n this.initObjects(true);\n this.refreshDiagramLayer();\n }\n };\n /* tslint:enable */\n Diagram.prototype.updateSnapSettings = function (newProp) {\n if (newProp.snapSettings.constraints || newProp.snapSettings.horizontalGridlines ||\n newProp.snapSettings.verticalGridlines) {\n this.diagramRenderer.updateGrid(this.snapSettings, getGridLayerSvg(this.element.id), this.scroller.transform, this.rulerSettings, this.hRuler, this.vRuler);\n }\n };\n Diagram.prototype.updateRulerSettings = function (newProp) {\n if (newProp.rulerSettings.dynamicGrid !== undefined) {\n this.diagramRenderer.updateGrid(this.snapSettings, getGridLayerSvg(this.element.id), this.scroller.transform, this.rulerSettings, this.hRuler, this.vRuler);\n }\n if (newProp.rulerSettings.showRulers !== undefined) {\n this.intOffPageBackground();\n this.scroller.setSize();\n this.renderRulers();\n }\n else if (newProp.rulerSettings.horizontalRuler !== undefined ||\n newProp.rulerSettings.verticalRuler !== undefined) {\n if (newProp.rulerSettings.horizontalRuler.thickness !== undefined ||\n newProp.rulerSettings.verticalRuler.thickness !== undefined) {\n removeRulerElements(this);\n this.intOffPageBackground();\n this.scroller.setSize();\n this.renderRulers();\n }\n else {\n updateRuler(this);\n }\n }\n this.diagramRenderer.updateGrid(this.snapSettings, getGridLayerSvg(this.element.id), this.scroller.transform, this.rulerSettings, this.hRuler, this.vRuler);\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @return {string}\n */\n Diagram.prototype.getPersistData = function () {\n var keyEntity = ['loaded'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Initialize nodes, connectors and renderer\n */\n Diagram.prototype.preRender = function () {\n this.initializePrivateVariables();\n this.isProtectedOnChange = true;\n this.serviceLocator = new ServiceLocator;\n this.initializeServices();\n this.initDiagram();\n this.initViews();\n this.unWireEvents();\n this.wireEvents();\n this.element.classList.add('e-diagram');\n };\n Diagram.prototype.initializePrivateVariables = function () {\n this.defaultLocale = {\n Copy: 'Copy',\n Cut: 'Cut',\n Paste: 'Paste',\n Undo: 'Undo',\n Redo: 'Redo',\n SelectAll: 'Select All',\n Grouping: 'Grouping',\n Group: 'Group',\n UnGroup: 'Un Group',\n Order: 'Order',\n BringToFront: 'Bring To Front',\n MoveForward: 'Move Forward',\n SendToBack: 'Send To Back',\n SendBackward: 'Send Backward'\n };\n this.layerZIndex = -1;\n this.layerZIndexTable = {};\n this.nameTable = {};\n this.groupTable = {};\n this.commands = {};\n if (!this.isLoading) {\n this.views = [];\n }\n this.commandHandler = new CommandHandler(this);\n this.eventHandler = new DiagramEventHandler(this, this.commandHandler);\n this.spatialSearch = new SpatialSearch(this.nameTable);\n this.scroller = new DiagramScroller(this);\n };\n Diagram.prototype.initializeServices = function () {\n this.serviceLocator.register('localization', this.localeObj = new L10n(this.getModuleName(), this.defaultLocale, this.locale));\n };\n /**\n * Renders the diagram control with nodes and connectors\n */\n Diagram.prototype.render = function () {\n this.initHistory();\n this.diagramRenderer = new DiagramRenderer(this.element.id, new SvgRenderer(), this.mode === 'SVG');\n this.initLayers();\n this.initializeDiagramLayers();\n this.diagramRenderer.setLayers();\n this.initObjects(true);\n this.doLayout();\n this.validatePageSize();\n this.renderPageBreaks();\n this.diagramRenderer.renderSvgGridlines(this.snapSettings, getGridLayerSvg(this.element.id), this.scroller.transform, this.rulerSettings, this.hRuler, this.vRuler);\n this.commandHandler.initSelectorWrapper();\n /**\n * Used to render context menu\n */\n this.notify('initial-load', {});\n /**\n * Used to load context menu\n */\n this.trigger('load');\n this.scroller.setSize();\n this.scroller.updateScrollOffsets();\n this.refreshDiagramLayer();\n /**\n * Used to end the context menu rendering\n */\n this.notify('initial-end', {});\n this.isProtectedOnChange = false;\n this.tooltipObject = initTooltip(this);\n this.diagramActions = DiagramAction.Render;\n this.initCommands();\n this.isLoading = false;\n };\n /**\n * Returns the module name of the diagram\n */\n Diagram.prototype.getModuleName = function () {\n return 'diagram';\n };\n /**\n * To provide the array of modules needed for control rendering\n * @return {ModuleDeclaration[]}\n * @private\n */\n Diagram.prototype.requiredModules = function () {\n var modules = [];\n modules.push({\n member: 'Bpmn',\n args: []\n });\n modules.push({\n member: 'Bridging',\n args: []\n });\n modules.push({\n member: 'ConnectorEditingTool',\n args: []\n });\n if (this.constraints & DiagramConstraints.UndoRedo) {\n modules.push({\n member: 'UndoRedo',\n args: []\n });\n }\n if (this.layout.type === 'OrganizationalChart' || this.layout.type === 'HierarchicalTree' ||\n this.layout.enableAnimation) {\n modules.push({\n member: 'LayoutAnimate',\n args: []\n });\n }\n if (this.snapSettings.constraints) {\n modules.push({\n member: 'Snapping',\n args: [this]\n });\n }\n modules.push({\n member: 'PrintandExport',\n args: [this]\n });\n if (this.contextMenuSettings.show) {\n modules.push({\n member: 'contextMenu',\n args: [this, this.serviceLocator]\n });\n }\n if (this.layout.type === 'OrganizationalChart' || this.layout.type === 'HierarchicalTree') {\n modules.push({\n member: 'OrganizationalChart',\n args: []\n });\n }\n if (this.layout.type === 'ComplexHierarchicalTree') {\n modules.push({\n member: 'ComplexHierarchicalTree',\n args: []\n });\n }\n if (this.layout.type === 'MindMap') {\n modules.push({\n member: 'MindMapChart',\n args: []\n });\n }\n if (this.layout.type === 'RadialTree') {\n modules.push({\n member: 'RadialTree',\n args: []\n });\n }\n if (this.layout.type === 'SymmetricalLayout') {\n modules.push({\n member: 'SymmetricalLayout',\n args: []\n });\n }\n if (this.dataSourceSettings.dataManager || this.dataSourceSettings.data) {\n modules.push({\n member: 'DataBinding',\n args: []\n });\n }\n return modules;\n };\n /**\n * Destroys the diagram control\n */\n Diagram.prototype.destroy = function () {\n clearInterval(this.renderTimer);\n this.renderTimer = null;\n if (this.hRuler && this.vRuler) {\n this.hRuler.destroy();\n this.vRuler.destroy();\n }\n this.tooltipObject.destroy();\n this.droppable.destroy();\n this.unWireEvents();\n this.notify('destroy', {});\n _super.prototype.destroy.call(this);\n if (document.getElementById(this.element.id)) {\n this.element.classList.remove('e-diagram');\n var tooltipelement = document.getElementsByClassName('e-tooltip-wrap');\n while (tooltipelement.length > 0) {\n tooltipelement[0].parentNode.removeChild(tooltipelement[0]);\n }\n var content = document.getElementById(this.element.id + 'content');\n if (content) {\n this.element.removeChild(content);\n }\n var measureElement = 'measureElement';\n if (window[measureElement]) {\n window[measureElement].usageCount -= 1;\n if (window[measureElement].usageCount === 0) {\n window[measureElement].parentNode.removeChild(window[measureElement]);\n window[measureElement] = null;\n }\n }\n }\n };\n /**\n * Wires the mouse events with diagram control\n */\n Diagram.prototype.wireEvents = function () {\n var startEvent = Browser.touchStartEvent;\n var stopEvent = Browser.touchEndEvent;\n var moveEvent = Browser.touchMoveEvent;\n var cancelEvent = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n var isIE11Pointer = Browser.isPointer;\n var wheelEvent = Browser.info.name === 'mozilla' ?\n (isIE11Pointer ? 'mousewheel' : 'DOMMouseScroll') : 'mousewheel';\n EventHandler.add(this.diagramCanvas, startEvent, this.eventHandler.mouseDown, this.eventHandler);\n EventHandler.add(this.diagramCanvas, moveEvent, this.eventHandler.mouseMove, this.eventHandler);\n EventHandler.add(this.diagramCanvas, stopEvent, this.eventHandler.mouseUp, this.eventHandler);\n EventHandler.add(this.diagramCanvas, cancelEvent, this.eventHandler.mouseLeave, this.eventHandler);\n EventHandler.add(this.diagramCanvas, 'keydown', this.eventHandler.keyDown, this.eventHandler);\n EventHandler.add(this.diagramCanvas, 'dblclick', this.eventHandler.doubleClick, this.eventHandler);\n EventHandler.add(this.diagramCanvas, 'scroll', this.eventHandler.scrolled, this.eventHandler);\n EventHandler.add(this.diagramCanvas, wheelEvent, this.eventHandler.mouseWheel, this.eventHandler);\n EventHandler.add(window, 'resize', this.eventHandler.windowResize, this.eventHandler);\n this.initDroppables();\n };\n /**\n * Unwires the mouse events from diagram control\n */\n Diagram.prototype.unWireEvents = function () {\n var startEvent = Browser.touchStartEvent;\n var moveEvent = Browser.touchMoveEvent;\n var cancelEvent = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n var isIE11Pointer = Browser.isPointer;\n var wheelEvent = Browser.info.name === 'mozilla' ?\n (isIE11Pointer ? 'mousewheel' : 'DOMMouseScroll') : 'mousewheel';\n var stopEvent = Browser.touchEndEvent;\n EventHandler.remove(this.diagramCanvas, startEvent, this.eventHandler.mouseDown);\n EventHandler.remove(this.diagramCanvas, moveEvent, this.eventHandler.mouseMove);\n EventHandler.remove(this.diagramCanvas, stopEvent, this.eventHandler.mouseUp);\n EventHandler.remove(this.diagramCanvas, cancelEvent, this.eventHandler.mouseLeave);\n EventHandler.remove(this.diagramCanvas, 'keydown', this.eventHandler.keyDown);\n EventHandler.remove(this.diagramCanvas, 'dblclick', this.eventHandler.doubleClick);\n EventHandler.remove(this.diagramCanvas, 'scroll', this.eventHandler.scrolled);\n EventHandler.remove(this.diagramCanvas, wheelEvent, this.eventHandler.mouseWheel);\n EventHandler.remove(window, 'resize', this.eventHandler.windowResize);\n };\n //public methods - start region\n /**\n * Selects the given collection of objects\n * @param objects Defines the collection of nodes and connectors to be selected\n * @param multipleSelection Defines whether the existing selection has to be cleared or not\n */\n Diagram.prototype.select = function (objects, multipleSelection) {\n if (objects != null) {\n this.commandHandler.selectObjects(objects, multipleSelection);\n }\n };\n /**\n * Selects the all the objects.\n */\n Diagram.prototype.selectAll = function () {\n var selectedItems = [];\n selectedItems = this.getObjectsOfLayer(this.activeLayer.objects);\n this.select(selectedItems);\n };\n /**\n * Removes the given object from selection list\n * @param obj Defines the object to be unselected\n */\n Diagram.prototype.unSelect = function (obj) {\n if (obj && isSelected(this, obj)) {\n this.commandHandler.unSelect(obj);\n }\n };\n /**\n * Removes all elements from the selection list\n */\n Diagram.prototype.clearSelection = function () {\n this.commandHandler.clearSelection(true);\n };\n /**\n * Update the diagram clipboard dimension\n */\n Diagram.prototype.updateViewPort = function () {\n this.eventHandler.updateViewPortSize(this.element);\n };\n Diagram.prototype.cutCommand = function () {\n this.cut();\n };\n /**\n * Removes the selected nodes and connectors from diagram and moves them to diagram clipboard\n */\n Diagram.prototype.cut = function () {\n this.commandHandler.cut();\n };\n /**\n * Add a process into the sub-process\n */\n Diagram.prototype.addProcess = function (process, parentId) {\n if (this.bpmnModule) {\n this.bpmnModule.addProcess(process, parentId, this);\n }\n };\n /**\n * Remove a process from the sub-process\n */\n Diagram.prototype.removeProcess = function (id) {\n if (this.bpmnModule) {\n this.bpmnModule.removeProcess(id, this);\n }\n };\n Diagram.prototype.pasteCommand = function () {\n this.paste();\n };\n /**\n * Adds the given objects/ the objects in the diagram clipboard to diagram control\n * @param obj Defines the objects to be added to diagram\n */\n Diagram.prototype.paste = function (obj) {\n this.commandHandler.paste(obj);\n };\n /**\n * fit the diagram to the page with respect to mode and region\n */\n Diagram.prototype.fitToPage = function (options) {\n this.scroller.fitToPage(options);\n };\n /**\n * bring the specified bounds into the viewport\n */\n Diagram.prototype.bringIntoView = function (bound) {\n this.scroller.bringIntoView(bound);\n };\n /**\n * bring the specified bounds to the center of the viewport\n */\n Diagram.prototype.bringToCenter = function (bound) {\n this.scroller.bringToCenter(bound);\n };\n Diagram.prototype.copyCommand = function () {\n this.copy();\n };\n /**\n * Copies the selected nodes and connectors to diagram clipboard\n */\n Diagram.prototype.copy = function () {\n var obj = this.commandHandler.copy();\n return obj;\n };\n /**\n * Group the selected nodes and connectors in diagram\n */\n Diagram.prototype.group = function () {\n this.commandHandler.group();\n };\n /**\n * UnGroup the selected nodes and connectors in diagram\n */\n Diagram.prototype.unGroup = function () {\n this.commandHandler.unGroup();\n };\n /**\n * send the selected nodes or connectors back\n */\n Diagram.prototype.sendToBack = function () {\n this.commandHandler.sendToBack();\n };\n /**\n * set the active layer\n * @param layerName defines the name of the layer which is to be active layer\n */\n Diagram.prototype.setActiveLayer = function (layerName) {\n var layer = this.commandHandler.getLayer(layerName);\n this.activeLayer = layer;\n };\n /**\n * add the layer into diagram\n * @param layer defines the layer model which is to be added\n * @param layerObject defines the object of the layer\n */\n Diagram.prototype.addLayer = function (layer, layerObject) {\n this.commandHandler.addLayer(layer, layerObject);\n };\n /**\n * remove the layer from diagram\n * @param layerId define the id of the layer\n */\n Diagram.prototype.removeLayer = function (layerId) {\n this.commandHandler.removeLayer(layerId);\n };\n /**\n * move objects from the layer to another layer from diagram\n * @param objects define the objects id of string array\n */\n Diagram.prototype.moveObjects = function (objects, targetLayer) {\n this.commandHandler.moveObjects(objects, targetLayer);\n };\n /**\n * move the layer backward\n * @param layerName define the name of the layer\n */\n Diagram.prototype.sendLayerBackward = function (layerName) {\n this.commandHandler.sendLayerBackward(layerName);\n };\n /**\n * move the layer forward\n * @param layerName define the name of the layer\n */\n Diagram.prototype.bringLayerForward = function (layerName) {\n this.commandHandler.bringLayerForward(layerName);\n };\n /**\n * clone a layer with its object\n * @param layerName define the name of the layer\n */\n Diagram.prototype.cloneLayer = function (layerName) {\n this.commandHandler.cloneLayer(layerName);\n };\n /**\n * bring the selected nodes or connectors to front\n */\n Diagram.prototype.bringToFront = function () {\n this.commandHandler.bringToFront();\n };\n /**\n * send the selected nodes or connectors forward\n */\n Diagram.prototype.moveForward = function () {\n this.commandHandler.sendForward();\n };\n /**\n * send the selected nodes or connectors back\n */\n Diagram.prototype.sendBackward = function () {\n this.commandHandler.sendBackward();\n };\n /**\n * gets the node or connector having the given name\n */\n Diagram.prototype.getObject = function (name) {\n return this.nameTable[name];\n };\n /**\n * gets the active layer back\n */\n Diagram.prototype.getActiveLayer = function () {\n return this.activeLayer;\n };\n Diagram.prototype.nudgeCommand = function (direction, x, y) {\n if (typeof direction !== 'object') {\n this.nudge(direction);\n }\n };\n /**\n * Moves the selected objects towards the given direction\n * @param direction Defines the direction by which the objects have to be moved\n * @param x Defines the distance by which the selected objects have to be horizontally moved\n * @param y Defines the distance by which the selected objects have to be vertically moved\n */\n Diagram.prototype.nudge = function (direction, x, y) {\n var tx = 0;\n var ty = 0;\n var negativeDirection;\n if (direction === 'Left' || direction === 'Right') {\n negativeDirection = (direction === 'Left');\n tx = (negativeDirection ? -1 : 1) * (x ? x : 1);\n }\n else {\n negativeDirection = (direction === 'Up');\n ty = (negativeDirection ? -1 : 1) * (y ? y : 1);\n }\n var obj = this.selectedItems;\n this.drag(obj, tx, ty);\n };\n /**\n * Drags the given object by the specified pixels\n * @param obj Defines the nodes/connectors to be dragged\n * @param tx Defines the distance by which the given objects have to be horizontally moved\n * @param ty Defines the distance by which the given objects have to be vertically moved\n */\n Diagram.prototype.drag = function (obj, tx, ty) {\n if (this.bpmnModule && (obj instanceof Node)) {\n var updated = this.bpmnModule.updateAnnotationDrag(obj, this, tx, ty);\n if (updated) {\n return;\n }\n }\n if (obj instanceof Selector) {\n if (obj.nodes && obj.nodes.length) {\n for (var _i = 0, _a = obj.nodes; _i < _a.length; _i++) {\n var node = _a[_i];\n this.drag(node, tx, ty);\n }\n }\n if (obj.connectors && obj.connectors.length) {\n for (var _b = 0, _c = obj.connectors; _b < _c.length; _b++) {\n var conn = _c[_b];\n this.drag(conn, tx, ty);\n }\n }\n this.updateSelector();\n }\n else {\n if (obj instanceof Node) {\n if (this.bpmnModule) {\n this.bpmnModule.updateAnnotationDrag(obj, this, tx, ty);\n }\n }\n this.commandHandler.drag(obj, tx, ty);\n }\n };\n /**\n * Scales the given objects by the given ratio\n * @param obj Defines the objects to be resized\n * @param sx Defines the ratio by which the objects have to be horizontally scaled\n * @param sy Defines the ratio by which the objects have to be vertically scaled\n * @param pivot Defines the reference point with respect to which the objects will be resized\n */\n Diagram.prototype.scale = function (obj, sx, sy, pivot) {\n var checkBoundaryConstraints = true;\n if (obj instanceof Selector) {\n if (obj.nodes && obj.nodes.length) {\n for (var _i = 0, _a = obj.nodes; _i < _a.length; _i++) {\n var node = _a[_i];\n checkBoundaryConstraints = this.commandHandler.scale(node, sx, sy, pivot, obj);\n }\n }\n if (obj.connectors && obj.connectors.length) {\n for (var _b = 0, _c = obj.connectors; _b < _c.length; _b++) {\n var conn = _c[_b];\n this.commandHandler.scale(conn, sx, sy, pivot, obj);\n }\n }\n this.updateSelector();\n }\n else {\n this.commandHandler.scale(obj, sx, sy, pivot);\n }\n return checkBoundaryConstraints;\n };\n /**\n * Rotates the given nodes/connectors by the given angle\n * @param obj Defines the objects to be rotated\n * @param angle Defines the angle by which the objects have to be rotated\n * @param pivot Defines the reference point with reference to which the objects have to be rotated\n */\n Diagram.prototype.rotate = function (obj, angle, pivot) {\n var checkBoundaryConstraints;\n if (obj) {\n pivot = pivot || { x: obj.wrapper.offsetX, y: obj.wrapper.offsetY };\n if (obj instanceof Selector) {\n obj.rotateAngle += angle;\n obj.wrapper.rotateAngle += angle;\n var bounds = getBounds(obj.wrapper);\n checkBoundaryConstraints = this.commandHandler.checkBoundaryConstraints(undefined, undefined, bounds);\n if (!checkBoundaryConstraints) {\n obj.rotateAngle -= angle;\n obj.wrapper.rotateAngle -= angle;\n return checkBoundaryConstraints;\n }\n var objects = [];\n objects = objects.concat(obj.nodes);\n objects = objects.concat(obj.connectors);\n this.commandHandler.rotateObjects(obj, objects, angle, pivot);\n }\n else {\n this.commandHandler.rotateObjects(obj, [obj], angle, pivot);\n }\n }\n return checkBoundaryConstraints;\n };\n /**\n * Moves the source point of the given connector\n * @param obj Defines the connector, the end points of which has to be moved\n * @param tx Defines the distance by which the end point has to be horizontally moved\n * @param ty Defines the distance by which the end point has to be vertically moved\n */\n Diagram.prototype.dragSourceEnd = function (obj, tx, ty) {\n this.commandHandler.dragSourceEnd(obj, tx, ty);\n };\n /**\n * Moves the target point of the given connector\n * @param obj Defines the connector, the end points of which has to be moved\n * @param tx Defines the distance by which the end point has to be horizontally moved\n * @param ty Defines the distance by which the end point has to be vertically moved\n */\n Diagram.prototype.dragTargetEnd = function (obj, tx, ty) {\n this.commandHandler.dragTargetEnd(obj, tx, ty);\n };\n /**\n * Finds all the objects that is under the given mouse position\n * @param position Defines the position, the objects under which has to be found\n * @param source Defines the object, the objects under which has to be found\n */\n Diagram.prototype.findObjectsUnderMouse = function (position, source) {\n return this.eventHandler.findObjectsUnderMouse(position, source);\n };\n /**\n * Finds the object that is under the given mouse position\n * @param objects Defines the collection of objects, from which the object has to be found.\n * @param action Defines the action, using which the relevant object has to be found.\n * @param inAction Defines the active state of the action.\n */\n Diagram.prototype.findObjectUnderMouse = function (objects, action, inAction) {\n return this.eventHandler.findObjectUnderMouse(objects, action, inAction);\n };\n /**\n * Finds the object that is under the given active object (Source)\n * @param objects Defines the collection of objects, from which the object has to be found.\n * @param action Defines the action, using which the relevant object has to be found.\n * @param inAction Defines the active state of the action.\n */\n Diagram.prototype.findTargetObjectUnderMouse = function (objects, action, inAction, position, source) {\n return this.eventHandler.findTargetUnderMouse(objects, action, inAction, position, source);\n };\n /**\n * Finds the child element of the given object at the given position\n * @param obj Defines the object, the child element of which has to be found\n * @param position Defines the position, the child element under which has to be found\n */\n Diagram.prototype.findElementUnderMouse = function (obj, position) {\n return this.eventHandler.findElementUnderMouse(obj, position);\n };\n /**\n * Defines the action to be done, when the mouse hovers the given element of the given object\n * @param obj Defines the object under mouse\n * @param wrapper Defines the target element of the object under mouse\n * @param position Defines the current mouse position\n */\n Diagram.prototype.findActionToBeDone = function (obj, wrapper, position, target) {\n return this.eventHandler.findActionToBeDone(obj, wrapper, position, target);\n };\n /**\n * Returns the tool that handles the given action\n * @param action Defines the action that is going to be performed\n */\n Diagram.prototype.getTool = function (action) {\n var tool;\n var getCustomTool = getFunction(this.getCustomTool);\n if (getCustomTool) {\n tool = getCustomTool(action);\n if (tool) {\n return tool;\n }\n }\n return this.eventHandler.getTool(action);\n };\n /**\n * Defines the cursor that corresponds to the given action\n * @param action Defines the action that is going to be performed\n */\n Diagram.prototype.getCursor = function (action, active) {\n var cursor;\n var getCustomCursor = getFunction(this.getCustomCursor);\n if (getCustomCursor) {\n cursor = getCustomCursor(action, active);\n if (cursor) {\n return cursor;\n }\n }\n return this.eventHandler.getCursor(action);\n };\n /**\n * Initializes the undo redo actions\n * @private\n */\n Diagram.prototype.initHistory = function () {\n if (this.undoRedoModule) {\n this.undoRedoModule.initHistory(this);\n }\n };\n /**\n * Adds the given change in the diagram control to the track\n * @param entry Defines the entry/information about a change in diagram\n */\n Diagram.prototype.addHistoryEntry = function (entry) {\n if (this.undoRedoModule && (this.constraints & DiagramConstraints.UndoRedo) && !this.currentSymbol) {\n this.undoRedoModule.addHistoryEntry(entry, this);\n if (entry.type !== 'StartGroup' && entry.type !== 'EndGroup') {\n this.historyChangeTrigger(entry);\n }\n }\n };\n /** @private */\n Diagram.prototype.historyChangeTrigger = function (entry) {\n var change = {};\n var oldValue = 'oldValue';\n var newValue = 'newValue';\n var type = 'type';\n var source = [];\n if (entry && entry.redoObject && ((entry.redoObject.nodes) instanceof Array) &&\n ((entry.redoObject.connectors) instanceof Array)) {\n source = entry.redoObject.nodes.concat(entry.redoObject.connectors);\n }\n else {\n if (entry.redoObject) {\n source.push(entry.redoObject);\n }\n }\n change[type] = entry.type;\n switch (entry.type) {\n case 'PositionChanged':\n change[oldValue] = { offsetX: entry.undoObject.offsetX, offsetY: entry.undoObject.offsetY };\n change[newValue] = { offsetX: entry.redoObject.offsetX, offsetY: entry.redoObject.offsetY };\n break;\n case 'RotationChanged':\n change[oldValue] = { rotateAngle: entry.undoObject.rotateAngle };\n change[newValue] = { rotateAngle: entry.redoObject.rotateAngle };\n break;\n case 'SizeChanged':\n change[oldValue] = {\n offsetX: entry.undoObject.offsetX, offsetY: entry.undoObject.offsetY,\n width: entry.undoObject.width, height: entry.undoObject.height\n };\n change[newValue] = {\n offsetX: entry.redoObject.offsetX, offsetY: entry.redoObject.offsetY,\n width: entry.redoObject.width, height: entry.redoObject.height\n };\n break;\n case 'CollectionChanged':\n change[entry.changeType] = source;\n break;\n case 'ConnectionChanged':\n change[oldValue] = { offsetX: entry.undoObject.offsetX, offsetY: entry.undoObject.offsetY };\n change[newValue] = { offsetX: entry.redoObject.offsetX, offsetY: entry.redoObject.offsetY };\n break;\n }\n var arg = {\n cause: entry.category, source: source, change: change\n };\n if (source.length) {\n this.triggerEvent(DiagramEvent.historyChange, arg);\n }\n };\n /**\n * Starts grouping the actions that will be undone/restored as a whole\n */\n Diagram.prototype.startGroupAction = function () {\n var entry = { type: 'StartGroup', category: 'Internal' };\n this.addHistoryEntry(entry);\n };\n /**\n * Closes grouping the actions that will be undone/restored as a whole\n */\n Diagram.prototype.endGroupAction = function () {\n var entry = { type: 'EndGroup', category: 'Internal' };\n this.addHistoryEntry(entry);\n };\n /**\n * Restores the last action that is performed\n */\n Diagram.prototype.undo = function () {\n if (this.undoRedoModule && (this.constraints & DiagramConstraints.UndoRedo)) {\n this.undoRedoModule.undo(this);\n }\n };\n /**\n * Restores the last undone action\n */\n Diagram.prototype.redo = function () {\n if (this.undoRedoModule && (this.constraints & DiagramConstraints.UndoRedo)) {\n this.undoRedoModule.redo(this);\n }\n };\n /**\n * Aligns the group of objects to with reference to the first object in the group\n * @param objects Defines the objects that have to be aligned\n * @param option Defines the factor, by which the objects have to be aligned\n */\n Diagram.prototype.align = function (option, objects) {\n if (!objects) {\n objects = [];\n objects = objects.concat(this.selectedItems.nodes, this.selectedItems.connectors);\n }\n this.diagramActions = this.diagramActions | DiagramAction.PublicMethod;\n this.commandHandler.align(objects, option);\n };\n /**\n * Arranges the group of objects with equal intervals, but within the group of objects\n * @param objects Defines the objects that have to be equally spaced\n * @param option Defines the factor to distribute the shapes\n */\n Diagram.prototype.distribute = function (option, objects) {\n if (!objects) {\n objects = [];\n objects = objects.concat(this.selectedItems.nodes, this.selectedItems.connectors);\n }\n this.diagramActions = this.diagramActions | DiagramAction.PublicMethod;\n this.commandHandler.distribute(objects, option);\n };\n /**\n * Scales the given objects to the size of the first object in the group\n * @param objects Defines the collection of objects that have to be scaled\n * @param option Defines whether the node has to be horizontally scaled, vertically scaled or both\n */\n Diagram.prototype.sameSize = function (option, objects) {\n if (!objects) {\n objects = [];\n objects = objects.concat(this.selectedItems.nodes, this.selectedItems.connectors);\n }\n this.diagramActions = this.diagramActions | DiagramAction.PublicMethod;\n this.commandHandler.sameSize(objects, option);\n };\n /**\n * Scales the diagram control by the given factor\n * @param factor Defines the factor by which the diagram is zoomed\n * @param focusedPoint Defines the point with respect to which the diagram has to be zoomed\n */\n Diagram.prototype.zoom = function (factor, focusedPoint) {\n this.scroller.zoom(factor, 0, 0, focusedPoint);\n };\n /**\n * Scales the diagram control by the given factor\n * @param options used to define the zoom factor, focus point and zoom type.\n *\n */\n Diagram.prototype.zoomTo = function (options) {\n var factor = options.zoomFactor ? options.zoomFactor : 0.2;\n factor = options.type === 'ZoomOut' ? 1 / (1 + factor) : (1 + factor);\n this.scroller.zoom(factor, 0, 0, options.focusPoint);\n };\n /**\n * Pans the diagram control to the given horizontal and vertical offsets\n * @param horizontalOffset Defines the horizontal distance to which the diagram has to be scrolled\n * @param verticalOffset Defines the vertical distance to which the diagram has to be scrolled\n */\n Diagram.prototype.pan = function (horizontalOffset, verticalOffset, focusedPoint) {\n this.scroller.zoom(1, horizontalOffset, verticalOffset, focusedPoint);\n };\n /**\n * Resets the zoom and scroller offsets to default values\n */\n Diagram.prototype.reset = function () {\n this.scroller.zoom(1 / this.scroller.currentZoom, -this.scroller.horizontalOffset, -this.scroller.verticalOffset, { x: 0, y: 0 });\n };\n /** @private */\n Diagram.prototype.triggerEvent = function (eventName, args) {\n this.trigger(DiagramEvent[eventName], args);\n };\n /**\n * Adds the given object to diagram control\n * @param obj Defines the object that has to be added to diagram\n */\n Diagram.prototype.add = function (obj) {\n var newObj;\n if (obj) {\n obj = cloneObject(obj);\n if (this.bpmnModule) {\n if (!this.bpmnModule.canAdd(obj)) {\n return null;\n }\n }\n var args = {\n element: obj, cause: this.diagramActions, state: 'Changing', type: 'Addition', cancel: false\n };\n this.triggerEvent(DiagramEvent.collectionChange, args);\n var activeLayer = void 0;\n obj.id = obj.id || randomId();\n var layers = this.activeLayer;\n if (!args.cancel && !layers.lock) {\n if (layers.objects.indexOf(obj.id) < 0 && !layers.lock) {\n if (!layers.visible) {\n layers.visible = true;\n this.dataBind();\n }\n layers.objects.push(obj.id);\n }\n if (getObjectType(obj) === Connector) {\n newObj = new Connector(this, 'connectors', obj, true);\n this.connectors.push(newObj);\n this.initObject(newObj);\n if (obj.visible === false) {\n this.updateElementVisibility(newObj.wrapper, newObj, obj.visible);\n }\n this.updateEdges(newObj);\n }\n else {\n newObj = new Node(this, 'nodes', obj, true);\n // newObj.processId = (obj as Node).processId;\n this.nodes.push(newObj);\n this.initObject(newObj, layers);\n if (this.bpmnModule) {\n if (newObj.shape.annotations && newObj.shape.annotations.length !== 0) {\n for (var _i = 0, _a = this.bpmnModule.getTextAnnotationConn(newObj); _i < _a.length; _i++) {\n var obj_1 = _a[_i];\n this.initConnectors(obj_1, layers, false);\n }\n }\n if (newObj.shape.activity && newObj.shape.activity.subProcess.processes &&\n newObj.shape.activity.subProcess.processes.length) {\n this.bpmnModule.updateDocks(newObj, this);\n }\n }\n }\n args = {\n element: newObj, cause: this.diagramActions, state: 'Changed', type: 'Addition', cancel: false\n };\n this.triggerEvent(DiagramEvent.collectionChange, args);\n if (!(this.diagramActions & DiagramAction.UndoRedo) && !(this.diagramActions & DiagramAction.Group)) {\n var entry = {\n type: 'CollectionChanged', changeType: 'Insert', undoObject: cloneObject(obj),\n redoObject: cloneObject(obj), category: 'Internal'\n };\n this.addHistoryEntry(entry);\n }\n this.diagramActions = this.diagramActions | DiagramAction.PublicMethod;\n if (this.mode === 'SVG') {\n this.updateSvgNodes(newObj);\n this.updateDiagramObject(newObj);\n if (newObj.shape.activity && newObj.shape.activity.subProcess.processes &&\n newObj.shape.activity.subProcess.processes.length) {\n this.updateProcesses(newObj);\n }\n }\n }\n }\n this.resetDiagramActions(DiagramAction.PublicMethod);\n return newObj;\n };\n Diagram.prototype.updateSvgNodes = function (node) {\n if (node.children) {\n for (var _i = 0, _a = node.children; _i < _a.length; _i++) {\n var j = _a[_i];\n if (this.nameTable[j] && this.nameTable[j].parentId) {\n var child = getDiagramElement(j + '_groupElement');\n child.parentNode.removeChild(child);\n }\n }\n }\n };\n /** @private */\n Diagram.prototype.updateProcesses = function (node) {\n if (this.bpmnModule && node && node.shape && node.shape.activity &&\n node.shape.activity.subProcess.processes &&\n node.shape.activity.subProcess.processes.length) {\n var processes = node.shape.activity.subProcess.processes;\n this.moveSvgNode(node.id);\n for (var _i = 0, processes_1 = processes; _i < processes_1.length; _i++) {\n var j = processes_1[_i];\n this.moveSvgNode(j);\n var edges = [];\n edges = edges.concat(this.nameTable[j].outEdges, this.nameTable[j].inEdges);\n for (var i = edges.length - 1; i >= 0; i--) {\n this.moveSvgNode(edges[i]);\n }\n }\n for (var _a = 0, processes_2 = processes; _a < processes_2.length; _a++) {\n var j = processes_2[_a];\n if (this.nameTable[j].shape.activity.subProcess.processes &&\n this.nameTable[j].shape.activity.subProcess.processes.length) {\n this.updateProcesses(this.nameTable[j]);\n }\n }\n }\n else {\n this.moveSvgNode(node.id);\n }\n };\n /** @private */\n Diagram.prototype.moveSvgNode = function (nodeId) {\n var child = getDiagramElement(nodeId + '_groupElement');\n var parent = child.parentElement;\n child.parentNode.removeChild(child);\n parent.appendChild(child);\n };\n /**\n * Adds the given annotation to the given node\n * @param annotation Defines the annotation to be added\n * @param node Defines the node to which the annotation has to be added\n */\n Diagram.prototype.addTextAnnotation = function (annotation, node) {\n if (this.bpmnModule) {\n var connector = this.bpmnModule.addAnnotation(node, annotation, this);\n this.initConnectors(connector, this.commandHandler.getObjectLayer(node.id), false);\n this.updateDiagramObject(node);\n }\n };\n /**\n * Splice the InEdge and OutEdge of the for the node with respect to corresponding connectors that is deleting\n */\n Diagram.prototype.spliceConnectorEdges = function (connector, isSource) {\n var node;\n var edges = [];\n node = isSource ? this.nameTable[connector.sourceID] : this.nameTable[connector.targetID];\n if (node) {\n edges = isSource ? node.outEdges : node.inEdges;\n for (var i = edges.length - 1; i >= 0; i--) {\n if (edges[i] === connector.id) {\n edges.splice(i, 1);\n }\n }\n }\n };\n /**\n * Remove the dependent connectors if the node is deleted\n * @private\n */\n Diagram.prototype.removeDependentConnector = function (node) {\n var connector;\n var edges = [];\n edges = edges.concat(node.outEdges, node.inEdges);\n for (var i = edges.length - 1; i >= 0; i--) {\n connector = this.nameTable[edges[i]];\n if (connector) {\n this.connectorTable[connector.id] = cloneObject(connector);\n this.remove(connector);\n }\n }\n };\n Diagram.prototype.removeObjectsFromLayer = function (obj) {\n var layer = this.layers.indexOf(this.commandHandler.getObjectLayer(obj.id));\n var objects = this.layers[layer].objects;\n var objIndex = objects.indexOf(obj.id);\n if (objIndex > -1) {\n if (isSelected(this, obj)) {\n this.unSelect(obj);\n }\n this.layers[layer].objects.splice(objIndex, 1);\n delete this.layers[layer].zIndexTable[this.nameTable[obj.id].zIndex];\n }\n };\n Diagram.prototype.removeElements = function (currentObj) {\n if (this.mode === 'SVG' || (this.mode === 'Canvas' && currentObj.shape.type === 'Native')) {\n var removeElement_1 = getDiagramElement(currentObj.id + '_groupElement');\n if (removeElement_1) {\n removeElement_1.parentNode.removeChild(removeElement_1);\n }\n }\n this.refreshCanvasLayers();\n var children = currentObj.wrapper.children;\n var element;\n var view;\n for (var i = 0; i < children.length; i++) {\n if (children[i] instanceof DiagramNativeElement || ((children[i].id) && (children[i].id).indexOf('icon_content') > 0)) {\n if ((children[i].id).indexOf('icon_content') > 0) {\n element = getDiagramElement(children[i].id + '_shape_groupElement');\n element.parentNode.removeChild(element);\n element = getDiagramElement(children[i].id + '_rect_groupElement');\n element.parentNode.removeChild(element);\n }\n for (var _i = 0, _a = this.views; _i < _a.length; _i++) {\n var elementId = _a[_i];\n removeElement(children[i].id + '_groupElement', elementId);\n }\n }\n else if (children[i] instanceof DiagramHtmlElement) {\n for (var _b = 0, _c = this.views; _b < _c.length; _b++) {\n var elementId = _c[_b];\n removeElement(children[i].id + '_html_element', elementId);\n }\n }\n }\n };\n Diagram.prototype.removeCommand = function () {\n this.remove();\n };\n /**\n * Removes the given object from diagram\n * @param obj Defines the object that has to be removed from diagram\n */\n /* tslint:disable */\n Diagram.prototype.remove = function (obj) {\n var selectedItems = [];\n selectedItems = selectedItems.concat(this.selectedItems.nodes, this.selectedItems.connectors);\n var args;\n var groupAction = false;\n if (obj) {\n obj = this.nameTable[obj.id];\n if (obj && (canDelete(obj) || (this.diagramActions & DiagramAction.Clear))) {\n if (this.bpmnModule) {\n if (this.bpmnModule.checkAndRemoveAnnotations(obj, this)) {\n this.refreshCanvasLayers();\n return;\n }\n }\n args = {\n element: obj, cause: this.diagramActions,\n state: 'Changing', type: 'Removal', cancel: false\n };\n if (!(this.diagramActions & DiagramAction.Clear)) {\n this.triggerEvent(DiagramEvent.collectionChange, args);\n }\n if (!args.cancel) {\n if ((!(this.diagramActions & DiagramAction.UndoRedo)) &&\n (obj instanceof Node || obj instanceof Connector)) {\n var entry = {\n type: 'CollectionChanged', changeType: 'Remove', undoObject: cloneObject(obj),\n redoObject: cloneObject(obj), category: 'Internal'\n };\n if (!(this.diagramActions & DiagramAction.Clear)) {\n if (selectedItems.length > 0 && this.undoRedoModule && !this.layout.type) {\n this.historyList.startGroupAction();\n groupAction = true;\n }\n }\n if (obj instanceof Node) {\n this.removeDependentConnector(obj);\n }\n if (!(this.diagramActions & DiagramAction.Clear)) {\n this.addHistoryEntry(entry);\n }\n }\n if (obj.children) {\n this.deleteGroup(obj);\n }\n if (obj.parentId) {\n this.deleteChild(obj);\n }\n var index = void 0;\n this.diagramActions = this.diagramActions | DiagramAction.PublicMethod;\n var currentObj = this.nameTable[obj.id];\n if (currentObj instanceof Node) {\n if (currentObj.shape.type === 'Bpmn' && this.bpmnModule) {\n this.bpmnModule.removeBpmnProcesses(currentObj, this);\n }\n index = this.nodes.indexOf(currentObj);\n if (index !== -1) {\n this.nodes.splice(index, 1);\n this.updateNodeEdges(currentObj);\n }\n }\n else {\n index = this.connectors.indexOf(currentObj);\n if (index !== -1) {\n this.connectors.splice(index, 1);\n }\n this.updateEdges(currentObj);\n this.spliceConnectorEdges(obj, true);\n this.spliceConnectorEdges(obj, false);\n }\n if (groupAction) {\n this.historyList.endGroupAction();\n }\n if (isSelected(this, currentObj)) {\n this.unSelect(currentObj);\n }\n this.removeObjectsFromLayer(obj);\n if (this.currentDrawingObject) {\n this.currentDrawingObject.wrapper = undefined;\n }\n delete this.nameTable[obj.id];\n this.removeElements(currentObj);\n if (this.mode !== 'SVG') {\n this.refreshDiagramLayer();\n }\n if (!(this.diagramActions & DiagramAction.Clear)) {\n this.removeFromAQuad(currentObj);\n args = {\n element: obj, cause: this.diagramActions,\n state: 'Changed', type: 'Removal', cancel: false\n };\n this.triggerEvent(DiagramEvent.collectionChange, args);\n this.resetTool();\n }\n }\n }\n }\n else if (selectedItems.length > 0) {\n if (this.undoRedoModule) {\n this.historyList.startGroupAction();\n groupAction = true;\n }\n for (var i = 0; i < selectedItems.length; i++) {\n var node = selectedItems[i];\n if (this.nameTable[selectedItems[i].id]) {\n this.remove(selectedItems[i]);\n }\n }\n if (groupAction) {\n this.historyList.endGroupAction();\n }\n this.clearSelection();\n }\n };\n /* tslint:enable */\n /** @private */\n Diagram.prototype.deleteChild = function (node, parentNode) {\n var id;\n parentNode = parentNode ? this.nameTable[parentNode.id] : this.nameTable[node.parentId];\n if (typeof node === 'string') {\n id = node;\n }\n else {\n id = node.id;\n }\n if (parentNode && parentNode.children) {\n for (var i = 0; i < parentNode.children.length; i++) {\n if (parentNode.children[i] === id) {\n parentNode.children.splice(i, 1);\n parentNode.wrapper.children.splice(i, 1);\n }\n }\n parentNode.wrapper.measure(new Size());\n parentNode.wrapper.arrange(parentNode.wrapper.desiredSize);\n }\n };\n /** @private */\n Diagram.prototype.addChild = function (node, child) {\n var id;\n var parentNode = this.nameTable[node.id];\n if (parentNode.children) {\n if (typeof child === 'string') {\n if (this.nameTable[child]) {\n id = child;\n }\n }\n else {\n id = child.id = child.id || randomId();\n this.add(child);\n }\n if (id) {\n var childNode = this.nameTable[id];\n childNode.parentId = parentNode.id;\n parentNode.children.push(id);\n parentNode.wrapper.children.push(this.nameTable[id].wrapper);\n parentNode.wrapper.measure(new Size());\n parentNode.wrapper.arrange(parentNode.wrapper.desiredSize);\n }\n }\n };\n /**\n * Clears all nodes and objects in the diagram\n */\n Diagram.prototype.clear = function () {\n this.clearObjects();\n };\n Diagram.prototype.clearObjects = function (collection) {\n var objects = [];\n if (!collection) {\n objects = objects.concat(this.nodes);\n objects = objects.concat(this.connectors);\n }\n else {\n objects = collection;\n }\n this.diagramActions = this.diagramActions | DiagramAction.Clear;\n for (var _i = 0, objects_1 = objects; _i < objects_1.length; _i++) {\n var obj = objects_1[_i];\n if (this.nameTable[obj.id]) {\n this.remove(obj);\n }\n }\n this.diagramActions = this.diagramActions & ~DiagramAction.Clear;\n this.spatialSearch = new SpatialSearch(this.nameTable);\n this.initHistory();\n };\n Diagram.prototype.startEditCommad = function () {\n this.startTextEdit();\n };\n /**\n * Specified annotation to edit mode\n * @param node Defines node/connector that contains the annotation to be edited\n * @param id Defines annotation id to be edited in the node\n */\n Diagram.prototype.startTextEdit = function (node, id) {\n if (!canZoomPan(this) || canSingleSelect(this)) {\n var minWidth = 90;\n var text = void 0;\n var bounds = void 0;\n var attributes = void 0;\n var x = void 0;\n var y = void 0;\n var textWrapper = void 0;\n var transform = this.scroller.transform;\n if (!node) {\n node = (this.selectedItems.nodes[0]) ? this.selectedItems.nodes[0] : this.selectedItems.connectors[0];\n }\n if (node) {\n var bpmnAnnotation = false;\n if (this.bpmnModule) {\n textWrapper = this.bpmnModule.getTextAnnotationWrapper(node, id);\n if (textWrapper) {\n node = this.nameTable[node.id.split('_textannotation_')[0]];\n }\n }\n if (!textWrapper) {\n if (node.shape.type !== 'Text' && node.annotations.length === 0) {\n this.activeLabel.isGroup = true;\n this.startGroupAction();\n this.addLabels(node, [{ id: randomId(), content: '' }]);\n }\n if (!id && ((node.shape.type !== 'Text' && node.annotations.length > 0) || (node.shape.type === 'Text'))) {\n id = (node.shape.type === 'Text') ? (node.wrapper.children[0].id).split('_')[1] : node.annotations[0].id;\n }\n if (id) {\n textWrapper = this.getWrapper(node.wrapper, id);\n }\n }\n else {\n bpmnAnnotation = true;\n }\n if (node && textWrapper &&\n (!enableReadOnly(textWrapper, node) || bpmnAnnotation)) {\n var style = (textWrapper.style);\n var maxWidth = void 0;\n maxWidth = textWrapper.bounds.width < node.wrapper.bounds.width ? textWrapper.bounds.width : node.wrapper.bounds.width;\n maxWidth = minWidth > maxWidth ? minWidth : maxWidth;\n var textEditing = document.createElement('div');\n var textarea = document.createElement('textarea');\n textEditing.appendChild(textarea);\n text = textWrapper.content;\n bounds = measureHtmlText(textWrapper.style, text, undefined, undefined, maxWidth);\n if (bounds.isEmpty()) {\n if (node.shape.type !== 'Text') {\n bounds = new Size(findAnnotation(node, (textWrapper.id).split(node.id + '_')[1]).width || 50, textWrapper.style.fontSize);\n }\n else {\n bounds = new Size((node.width > 50) ? 50 : node.width, textWrapper.style.fontSize);\n }\n }\n bounds.width = Math.max(bounds.width, 50);\n x = ((((textWrapper.bounds.center.x + transform.tx) * transform.scale) - bounds.width / 2) - 2.5);\n y = ((((textWrapper.bounds.center.y + transform.ty) * transform.scale) - bounds.height / 2) - 3);\n attributes = {\n 'id': this.element.id + '_editTextBoxDiv',\n 'style': 'position: absolute' + ';left:' + x + 'px;top:' + y + 'px;width:' + (bounds.width + 1) +\n 'px;height:' + bounds.height + 'px; containerName:' + node.id + ';'\n };\n setAttributeHtml(textEditing, attributes);\n attributes = {\n 'id': this.element.id + '_editBox',\n 'style': 'width:' + (bounds.width + 1) + 'px;height:' + bounds.height +\n 'px;resize: none;outline: none;overflow: hidden;' +\n 'font-family:' + style.fontFamily + ';font-size:' + style.fontSize + 'px;text-align:' +\n (textWrapper.style.textAlign.toLocaleLowerCase()) + ';',\n 'class': 'e-diagram-text-edit'\n };\n setAttributeHtml(textarea, attributes);\n textarea.style.fontWeight = (style.bold) ? 'bold' : '';\n textarea.style.fontStyle = (style.italic) ? 'italic' : '';\n textarea.style.textDecoration = (style.textDecoration) ? style.textDecoration : '';\n textarea.appendChild(document.createTextNode(text));\n this.activeLabel.parentId = node.id;\n this.activeLabel.id = id;\n textWrapper.visible = false;\n this.updateDiagramObject(node);\n this.diagramActions = this.diagramActions | DiagramAction.TextEdit;\n this.diagramCanvas.appendChild(textEditing);\n EventHandler.add(textarea, 'input', this.eventHandler.inputChange, this.eventHandler);\n EventHandler.add(textarea, 'focusout', this.focusOutEdit, this);\n textarea.focus();\n textarea.select();\n }\n }\n }\n };\n /**\n * Automatically updates the diagram objects based on the type of the layout\n */\n Diagram.prototype.doLayout = function () {\n var update = false;\n var layout;\n var propChange = this.isProtectedOnChange;\n this.protectPropertyChange(true);\n var viewPort = { x: this.scroller.viewPortWidth, y: this.scroller.viewPortHeight };\n if (this.organizationalChartModule) {\n layout = this.organizationalChartModule.updateLayout(this.nodes, this.nameTable, this.layout, viewPort, this.dataSourceSettings.id);\n update = true;\n }\n else if (this.mindMapChartModule) {\n this.mindMapChartModule.updateLayout(this.nodes, this.nameTable, this.layout, viewPort, this.dataSourceSettings.id, this.dataSourceSettings.root);\n update = true;\n }\n else if (this.radialTreeModule) {\n this.radialTreeModule.updateLayout(this.nodes, this.nameTable, this.layout, viewPort);\n update = true;\n }\n else if (this.symmetricalLayoutModule) {\n this.symmetricalLayoutModule.maxIteration = this.layout.maxIteration;\n this.symmetricalLayoutModule.springLength = this.layout.springLength;\n this.symmetricalLayoutModule.springFactor = this.layout.springFactor;\n this.symmetricalLayoutModule.updateLayout(this.nodes, this.connectors, this.symmetricalLayoutModule, this.nameTable, this.layout, viewPort);\n update = true;\n }\n else if (this.complexHierarchicalTreeModule) {\n this.complexHierarchicalTreeModule.doLayout(this.nodes, this.nameTable, this.layout, viewPort);\n update = true;\n }\n if (update) {\n this.preventUpdate = true;\n var connectors = {};\n for (var _i = 0, _a = this.nodes; _i < _a.length; _i++) {\n var obj = _a[_i];\n var node = obj;\n this.updateIcon(node);\n this.updateDefaultLayoutIcons(node);\n this.nodePropertyChange(node, {}, { offsetX: node.offsetX, offsetY: node.offsetY }, true);\n node.wrapper.measure(new Size(node.wrapper.width, node.wrapper.height));\n node.wrapper.arrange(node.wrapper.desiredSize);\n if (node.inEdges.length > 0) {\n for (var j = 0; j < node.inEdges.length; j++) {\n var connector = this.nameTable[node.inEdges[j]];\n connectors[connector.id] = connector;\n }\n }\n if (node.outEdges.length > 0) {\n for (var k = 0; k < node.outEdges.length; k++) {\n var connection = this.nameTable[node.outEdges[k]];\n connectors[connection.id] = connection;\n }\n }\n }\n for (var _b = 0, _c = Object.keys(connectors); _b < _c.length; _b++) {\n var conn = _c[_b];\n var connector = connectors[conn];\n var points = this.getPoints(connector);\n updateConnector(connector, points);\n connector.wrapper.measure(new Size(undefined, undefined));\n connector.wrapper.arrange(connector.wrapper.desiredSize);\n this.updateQuad(connector);\n }\n this.preventUpdate = false;\n this.updatePage();\n this.refreshDiagramLayer();\n }\n if (!propChange) {\n this.protectPropertyChange(propChange);\n }\n return layout;\n };\n /**\n * Serializes the diagram control as a string\n */\n Diagram.prototype.saveDiagram = function () {\n return serialize(this);\n };\n /**\n * Converts the given string as a Diagram Control\n * @param data Defines the behavior of the diagram to be loaded\n */\n Diagram.prototype.loadDiagram = function (data) {\n return deserialize(data, this);\n };\n /**\n * To export Diagram\n * @param options defines the how the image to be exported.\n */\n Diagram.prototype.exportDiagram = function (options) {\n if (this.printandExportModule) {\n var data = this.printandExportModule.exportDiagram(options);\n return data;\n }\n return '';\n };\n /**\n * To print Diagram\n * @param optons defines how the image to be printed.\n */\n Diagram.prototype.print = function (options) {\n if (this.printandExportModule) {\n this.printandExportModule.print(options);\n }\n };\n /**\n * Add ports at the run time\n */\n Diagram.prototype.addPorts = function (obj, ports) {\n var newObj;\n if (ports.length > 1) {\n this.startGroupAction();\n }\n for (var i = 0; i < ports.length; i++) {\n newObj = new PointPort(obj, 'ports', ports[i], true);\n obj.ports.push(newObj);\n var canvas = obj.wrapper;\n canvas.children.push(obj.initPortWrapper(obj.ports[obj.ports.length - 1]));\n if (!(this.diagramActions & DiagramAction.UndoRedo) && !(this.diagramActions & DiagramAction.Group)) {\n var entry = {\n type: 'PortCollectionChanged', changeType: 'Insert', undoObject: cloneObject(newObj),\n redoObject: cloneObject(obj), category: 'Internal'\n };\n this.addHistoryEntry(entry);\n }\n }\n if (ports.length > 1) {\n this.endGroupAction();\n }\n obj.wrapper.measure(new Size(obj.width, obj.height));\n obj.wrapper.arrange(obj.wrapper.desiredSize);\n this.updateDiagramObject(obj);\n };\n /**\n * Add Labels at the run time\n */\n Diagram.prototype.addLabels = function (obj, labels) {\n var canvas = obj.wrapper;\n var newObj;\n if (labels.length > 1) {\n this.startGroupAction();\n }\n for (var i = 0; i < labels.length; i++) {\n if (obj instanceof Node) {\n newObj = new ShapeAnnotation(obj, 'annotations', labels[i], true);\n obj.annotations.push(newObj);\n if (obj.children) {\n var node = obj;\n for (var i_1 = 0; i_1 < node.wrapper.children.length; i_1++) {\n if (node.wrapper.children[i_1].id === 'group_container') {\n var container = node.wrapper.children[i_1];\n container.children.push(obj.initAnnotationWrapper(obj.annotations[obj.annotations.length - 1]));\n }\n }\n }\n else {\n canvas.children.push(obj.initAnnotationWrapper(obj.annotations[obj.annotations.length - 1]));\n }\n }\n else if (obj instanceof Connector) {\n newObj = new PathAnnotation(obj, 'annotations', labels[i], true);\n obj.annotations.push(newObj);\n var segment = canvas.children[0];\n var bounds = new Rect(segment.offsetX - segment.width / 2, segment.offsetY - segment.height / 2, segment.width, segment.height);\n canvas.children.push(obj.getAnnotationElement(obj.annotations[obj.annotations.length - 1], obj.intermediatePoints, bounds, this.getDescription));\n }\n if (!(this.diagramActions & DiagramAction.UndoRedo) && !(this.diagramActions & DiagramAction.Group)) {\n var entry = {\n type: 'LabelCollectionChanged', changeType: 'Insert', undoObject: cloneObject(newObj),\n redoObject: cloneObject(obj), category: 'Internal'\n };\n this.addHistoryEntry(entry);\n }\n }\n if (labels.length > 1) {\n this.endGroupAction();\n }\n obj.wrapper.measure(new Size(canvas.width, canvas.height));\n obj.wrapper.arrange(canvas.desiredSize);\n this.updateDiagramObject(obj);\n };\n /**\n * Remove Labels at the run time\n */\n Diagram.prototype.removeLabels = function (obj, labels) {\n if (labels.length > 1) {\n this.startGroupAction();\n }\n for (var j = labels.length - 1; j >= 0; j--) {\n for (var i = 0; i < obj.wrapper.children.length; i++) {\n var canvas = obj.wrapper.children[i];\n if (canvas instanceof TextElement) {\n if (canvas.id.match('_' + labels[j].id + '$')) {\n for (var k = 0; k < obj.annotations.length; k++) {\n if (canvas.id.match('_' + obj.annotations[k].id + '$')) {\n if (!(this.diagramActions & DiagramAction.UndoRedo)) {\n var entry = {\n type: 'LabelCollectionChanged', changeType: 'Remove', undoObject: cloneObject(obj.annotations[k]),\n redoObject: cloneObject(obj), category: 'Internal'\n };\n this.addHistoryEntry(entry);\n }\n obj.annotations.splice(k, 1);\n }\n }\n obj.wrapper.children.splice(i, 1);\n if (this.mode === 'SVG') {\n var element = getDiagramElement(canvas.id);\n if (element) {\n var element_1 = getDiagramElement(canvas.id);\n element_1.parentNode.removeChild(element_1);\n }\n var textElement = getDiagramElement(canvas.id + '_text');\n if (textElement) {\n element = getDiagramElement(canvas.id + '_text');\n element.parentNode.removeChild(element);\n }\n }\n else {\n this.refreshCanvasLayers();\n }\n }\n }\n }\n }\n if (labels.length > 1) {\n this.endGroupAction();\n }\n };\n /**\n * Remove Ports at the run time\n */\n Diagram.prototype.removePorts = function (obj, ports) {\n if (ports.length > 1) {\n this.startGroupAction();\n }\n for (var j = 0; j < ports.length; j++) {\n for (var i = 0; i < obj.wrapper.children.length; i++) {\n var canvas = obj.wrapper.children[i];\n if (canvas instanceof PathElement) {\n if (canvas.id.match('_' + ports[j].id + '$')) {\n for (var k = 0; k < obj.ports.length; k++) {\n if (canvas.id.match('_' + obj.ports[k].id + '$')) {\n if (!(this.diagramActions & DiagramAction.UndoRedo)) {\n var entry = {\n type: 'PortCollectionChanged', changeType: 'Remove', undoObject: cloneObject(obj.ports[k]),\n redoObject: cloneObject(obj), category: 'Internal'\n };\n this.addHistoryEntry(entry);\n }\n obj.ports.splice(k, 1);\n }\n }\n obj.wrapper.children.splice(i, 1);\n if (this.mode === 'SVG') {\n var element = getDiagramElement(canvas.id);\n element.parentNode.removeChild(element);\n }\n else {\n this.refreshCanvasLayers();\n }\n }\n }\n }\n }\n if (ports.length > 1) {\n this.endGroupAction();\n }\n };\n //public methods - end region\n //helper methods - start region\n /**\n * @private\n * @param real\n * @param rulerSize\n */\n Diagram.prototype.getSizeValue = function (real, rulerSize) {\n var value;\n if (real.toString().indexOf('px') > 0) {\n value = real.toString();\n }\n else if (real.toString().indexOf('%') > 0) {\n value = rulerSize !== undefined ? '100%' : real.toString();\n }\n else {\n value = real.toString() + 'px';\n }\n if (rulerSize) {\n var position = getRulerSize(this);\n value = 'calc(' + value + ' - ' + rulerSize + 'px)';\n }\n return value;\n };\n Diagram.prototype.renderRulers = function () {\n if (this.rulerSettings.showRulers) {\n renderOverlapElement(this);\n renderRuler(this, true);\n renderRuler(this, false);\n }\n else {\n removeRulerElements(this);\n }\n };\n Diagram.prototype.intOffPageBackground = function () {\n var position = new Size();\n position = getRulerSize(this);\n var element = document.getElementById(this.element.id + 'content');\n var width = this.getSizeValue(this.width, position.width);\n var height = this.getSizeValue(this.height, position.height);\n var style = this.rulerSettings.showRulers ?\n 'width:' + width + '; height:' + height + ';' +\n 'top:' + position.height + 'px;left:' + position.width + 'px;' +\n 'overflow: scroll;position:absolute;overflow:auto;' :\n 'width:' + width + '; height:' + height + ';position:absolute;' +\n ' left:0px; top:0px;overflow: auto;';\n var attr = {\n 'id': this.element.id + 'content',\n 'tabindex': '0',\n 'style': style\n };\n if (!element) {\n this.diagramCanvas = createHtmlElement('div', attr);\n this.element.appendChild(this.diagramCanvas);\n }\n else {\n this.diagramCanvas = element;\n this.diagramCanvas.setAttribute('style', style);\n }\n this.diagramCanvas.style.background = this.backgroundColor;\n };\n Diagram.prototype.initDiagram = function () {\n this.intOffPageBackground();\n setAttributeHtml(this.element, {\n style: 'width:' + this.getSizeValue(this.width) + '; height:'\n + this.getSizeValue(this.height) + ';position:relative;overflow:hidden;'\n });\n };\n ;\n Diagram.prototype.renderBackgroundLayer = function (bounds, commonStyle) {\n var bgLayer = this.createSvg(this.element.id + '_backgroundLayer_svg', bounds.width, bounds.height);\n bgLayer.setAttribute('style', commonStyle);\n var backgroundImage = createSvgElement('g', {\n 'id': this.element.id + '_backgroundImageLayer',\n 'class': 'e-background-image-layer'\n });\n bgLayer.appendChild(backgroundImage);\n var attr = { 'id': this.element.id + '_backgroundLayer', 'class': 'e-background-layer' };\n var background = createSvgElement('g', attr);\n bgLayer.appendChild(background);\n this.diagramCanvas.appendChild(bgLayer);\n };\n Diagram.prototype.renderGridLayer = function (bounds, commonStyle) {\n var svgGridSvg = this.createSvg(this.element.id + '_gridline_svg', bounds.width, bounds.height);\n svgGridSvg.setAttribute('class', 'e-grid-layer');\n var svgGrid = createSvgElement('g', { 'id': this.element.id + '_gridline', 'width': '100%', 'height': '100%' });\n var rect = createSvgElement('rect', {\n 'id': this.element.id + '_grid_rect', 'x': '0', 'y': '0', 'width': '100%', 'height': '100%',\n 'fill': 'url(#' + this.element.id + '_pattern)'\n });\n svgGrid.appendChild(rect);\n svgGridSvg.appendChild(svgGrid);\n this.diagramCanvas.appendChild(svgGridSvg);\n setAttributeSvg(svgGridSvg, { 'style': commonStyle });\n };\n Diagram.prototype.renderDiagramLayer = function (bounds, commonStyle) {\n var attributes;\n this.diagramLayerDiv = document.createElement('div');\n attributes = {\n 'id': this.element.id + '_diagramLayer_div',\n 'style': 'width:' + bounds.width + 'px; height:' + bounds.height + 'px;' + commonStyle\n };\n setAttributeHtml(this.diagramLayerDiv, attributes);\n if (this.mode === 'SVG') {\n var diagramSvg = this.createSvg(this.element.id + '_diagramLayer_svg', bounds.width, bounds.height);\n diagramSvg.setAttribute('style', ' pointer-events: none; ');\n diagramSvg.setAttribute('class', 'e-diagram-layer');\n var diagramLayer = createSvgElement('g', { 'id': this.element.id + '_diagramLayer' });\n var transformationLayer = createSvgElement('g', {});\n this.diagramLayer = diagramLayer;\n diagramLayer.setAttribute('style', 'pointer-events: all;');\n transformationLayer.appendChild(diagramLayer);\n diagramSvg.appendChild(transformationLayer);\n this.diagramLayerDiv.appendChild(diagramSvg);\n }\n else {\n this.diagramLayer = CanvasRenderer.createCanvas(this.element.id + '_diagram', bounds.width, bounds.height);\n this.diagramLayer.setAttribute('style', 'position:absolute;left:0px;top:0px;');\n this.diagramLayerDiv.appendChild(this.diagramLayer);\n }\n this.diagramCanvas.appendChild(this.diagramLayerDiv);\n };\n Diagram.prototype.initLayers = function () {\n var commonStyle = 'position:absolute;top:0px;left:0px;overflow:hidden;pointer-events:none;';\n var container = document.getElementById(this.element.id);\n var bounds = container.getBoundingClientRect();\n var scrollerSize = getScrollerWidth();\n this.scroller.scrollerWidth = scrollerSize;\n this.scroller.setViewPortSize(bounds.width, bounds.height);\n this.renderRulers();\n createMeasureElements();\n // this.renderBackgroundImageLayer(bounds, commonStyle);\n this.renderBackgroundLayer(bounds, commonStyle);\n this.renderGridLayer(bounds, commonStyle);\n this.renderDiagramLayer(bounds, commonStyle);\n this.renderHTMLLayer(bounds, commonStyle);\n this.renderPortsExpandLayer(bounds, commonStyle);\n this.renderNativeLayer(bounds, commonStyle);\n this.renderAdornerLayer(bounds, commonStyle);\n };\n Diagram.prototype.renderAdornerLayer = function (bounds, commonStyle) {\n var divElement = createHtmlElement('div', {\n 'id': this.element.id + '_diagramAdornerLayer',\n 'style': 'width:' + bounds.width + 'px;height:' + bounds.height + 'px;' + commonStyle\n });\n var svgAdornerSvg = this.createSvg(this.element.id + '_diagramAdorner_svg', bounds.width, bounds.height);\n svgAdornerSvg.setAttribute('class', 'e-adorner-layer');\n svgAdornerSvg.setAttribute('style', 'pointer-events:none;');\n this.adornerLayer = createSvgElement('g', { 'id': this.element.id + '_diagramAdorner' });\n this.adornerLayer.setAttribute('style', ' pointer-events: all; ');\n svgAdornerSvg.appendChild(this.adornerLayer);\n divElement.appendChild(svgAdornerSvg);\n this.diagramCanvas.appendChild(divElement);\n var svgSelector = createSvgElement('g', { 'id': this.element.id + '_SelectorElement' });\n this.adornerLayer.appendChild(svgSelector);\n setAttributeSvg(svgAdornerSvg, { style: 'pointer-events:none;' });\n };\n Diagram.prototype.renderPortsExpandLayer = function (bounds, commonStyle) {\n var svgPortsSvg = this.createSvg(this.element.id + '_diagramPorts_svg', bounds.width, bounds.height);\n svgPortsSvg.setAttribute('class', 'e-ports-expand-layer');\n var svgPortsLayer = createSvgElement('g', {\n 'id': this.element.id + '_diagramPorts',\n 'class': 'e-ports-layer',\n 'style': 'pointer-events: all;'\n });\n svgPortsSvg.appendChild(svgPortsLayer);\n var svgExpandLayer = createSvgElement('g', {\n 'id': this.element.id + '_diagramExpander',\n 'class': 'e-expand-layer',\n 'style': 'pointer-events: all;'\n });\n svgPortsSvg.appendChild(svgExpandLayer);\n this.diagramCanvas.appendChild(svgPortsSvg);\n setAttributeSvg(svgPortsSvg, { 'style': commonStyle });\n };\n Diagram.prototype.renderHTMLLayer = function (bounds, commonStyle) {\n this.htmlLayer = createHtmlElement('div', {\n 'id': this.element.id + '_htmlLayer',\n 'style': 'width:' + bounds.width + 'px; height:' + bounds.height + 'px;position:absolute;top:0px;' +\n 'left:0px;overflow:hidden;pointer-events:none;',\n 'class': 'e-html-layer'\n });\n var htmlLayerDiv = createHtmlElement('div', {\n 'id': this.element.id + '_htmlLayer_div',\n 'style': 'position:absolute;top:0px;left:0px;pointer-events:all;'\n });\n this.htmlLayer.appendChild(htmlLayerDiv);\n this.diagramCanvas.appendChild(this.htmlLayer);\n };\n Diagram.prototype.renderNativeLayer = function (bounds, commonStyle) {\n var nativeLayerSvg = this.createSvg(this.element.id + '_nativeLayer_svg', bounds.width, bounds.height);\n var nativeLayer = createSvgElement('g', { 'id': this.element.id + '_nativeLayer', 'style': 'pointer-events:all;' });\n nativeLayerSvg.appendChild(nativeLayer);\n this.diagramLayerDiv.appendChild(nativeLayerSvg);\n setAttributeSvg(nativeLayerSvg, { 'class': 'e-native-layer', 'style': commonStyle });\n };\n Diagram.prototype.createSvg = function (id, width, height) {\n var svgObj = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n setAttributeSvg(svgObj, { 'id': id, 'width': width, 'height': height });\n return svgObj;\n };\n Diagram.prototype.initObjects = function (isLoad) {\n if (!this.isLoading) {\n this.initData();\n }\n this.initLayerObjects();\n this.updateBridging(isLoad);\n };\n Diagram.prototype.initLayerObjects = function () {\n var hasLayers = this.layers.length > 1;\n var set = false;\n var connectors = [];\n var tempTabel = {};\n var bpmnTable = {};\n var tempNode = [];\n var groups = [];\n var i = 0;\n for (var _i = 0, _a = this.nodes; _i < _a.length; _i++) {\n var obj = _a[_i];\n obj.id = obj.id || randomId();\n this.addToLayer(obj, hasLayers);\n tempTabel[obj.id] = obj;\n }\n for (var _b = 0, _c = this.connectors; _b < _c.length; _b++) {\n var obj = _c[_b];\n obj.id = obj.id || randomId();\n this.addToLayer(obj, hasLayers);\n tempTabel[obj.id] = obj;\n }\n for (var _d = 0, _e = this.layers; _d < _e.length; _d++) {\n var layer = _e[_d];\n for (var _f = 0, _g = layer.objects; _f < _g.length; _f++) {\n var obj = _g[_f];\n if (tempTabel[obj]) {\n if (!(tempTabel[obj] instanceof Connector)) {\n if (tempTabel[obj].children) {\n groups.push(obj);\n }\n else if ((tempTabel[obj].shape instanceof BpmnShape) &&\n tempTabel[obj].shape.activity.subProcess.processes &&\n tempTabel[obj].shape.activity.subProcess.processes.length > 0) {\n bpmnTable[tempTabel[obj].id] = obj;\n }\n else {\n this.initNodes(tempTabel[obj], layer);\n }\n }\n else {\n var connector = tempTabel[obj];\n if (connector.sourceID && connector.targetID) {\n var sourceNode = tempTabel[connector.sourceID];\n var targetNode = tempTabel[connector.targetID];\n if (sourceNode && sourceNode.wrapper && targetNode && targetNode.wrapper) {\n this.initConnectors(tempTabel[obj], layer);\n }\n else {\n connectors.push(tempTabel[obj]);\n }\n }\n else {\n this.initConnectors(tempTabel[obj], layer);\n }\n }\n }\n }\n if (this.bpmnModule) {\n for (var _h = 0, _j = this.bpmnModule.textAnnotationConnectors; _h < _j.length; _h++) {\n var obj = _j[_h];\n this.initConnectors(obj, layer, false);\n }\n }\n }\n for (var _k = 0, _l = Object.keys(bpmnTable); _k < _l.length; _k++) {\n var obj = _l[_k];\n this.initObject(tempTabel[obj]);\n this.bpmnModule.updateDocks(tempTabel[obj], this);\n }\n for (var _m = 0, groups_1 = groups; _m < groups_1.length; _m++) {\n var obj = groups_1[_m];\n var layer = this.commandHandler.getObjectLayer(obj);\n this.initNodes(tempTabel[obj], layer);\n }\n for (var _o = 0, connectors_1 = connectors; _o < connectors_1.length; _o++) {\n var connector = connectors_1[_o];\n var layer = this.commandHandler.getObjectLayer(connector.id);\n this.initConnectors(connector, layer);\n }\n };\n Diagram.prototype.addToLayer = function (obj, hasLayers) {\n var layer;\n if (hasLayers) {\n layer = this.commandHandler.getObjectLayer(obj.id);\n }\n if (!hasLayers || !layer) {\n if (this.activeLayer.objects.indexOf(obj.id) === -1) {\n this.activeLayer.objects.push(obj.id);\n }\n }\n this.setZIndex(layer || this.activeLayer, obj);\n };\n Diagram.prototype.updateLayer = function (newProp) {\n for (var _i = 0, _a = Object.keys(newProp.layers); _i < _a.length; _i++) {\n var key = _a[_i];\n var layerObject = this.layers[key].objects;\n for (var _b = 0, layerObject_1 = layerObject; _b < layerObject_1.length; _b++) {\n var obj = layerObject_1[_b];\n var node = this.nameTable[obj];\n if (newProp.layers[key].visible !== undefined) {\n this.updateElementVisibility(node.wrapper, node, newProp.layers[key].visible);\n }\n else if (newProp.layers[key].lock === true) {\n this.unSelect(node);\n }\n }\n if (newProp.layers[key].lock !== undefined) {\n this.layers[key].lock = newProp.layers[key].lock;\n }\n }\n if (this.mode !== 'SVG') {\n this.refreshDiagramLayer();\n }\n };\n Diagram.prototype.updateScrollSettings = function (newProp) {\n var hPan = (-this.scroller.horizontalOffset + newProp.scrollSettings.horizontalOffset || 0);\n var vPan = (this.scroller.verticalOffset - newProp.scrollSettings.verticalOffset || 0);\n var oldValue = {\n VerticalOffset: this.scrollSettings.verticalOffset, HorizontalOffset: this.scrollSettings.horizontalOffset,\n ViewportHeight: this.scrollSettings.viewPortHeight, ViewportWidth: this.scrollSettings.viewPortWidth,\n CurrentZoom: this.scroller.currentZoom\n };\n if (hPan !== 0 || vPan !== 0) {\n this.pan(hPan, vPan);\n }\n var newValue = {\n VerticalOffset: this.scrollSettings.verticalOffset, HorizontalOffset: this.scrollSettings.horizontalOffset,\n ViewportHeight: this.scrollSettings.viewPortHeight, ViewportWidth: this.scrollSettings.viewPortWidth,\n CurrentZoom: this.scroller.currentZoom\n };\n var arg = {\n oldValue: oldValue, newValue: newValue, source: this\n };\n this.triggerEvent(DiagramEvent.scrollChange, arg);\n };\n Diagram.prototype.initData = function () {\n if (this.dataBindingModule) {\n if (this.dataSourceSettings.dataManager && this.dataSourceSettings.dataManager.dataSource &&\n this.dataSourceSettings.dataManager.dataSource.url !== undefined) {\n this.dataBindingModule.initSource(this.dataSourceSettings, this);\n }\n else {\n this.dataBindingModule.initData(this.dataSourceSettings, this);\n }\n }\n };\n Diagram.prototype.initNodes = function (obj, layer) {\n this.preventUpdate = true;\n this.initObject(obj, layer);\n this.preventUpdate = false;\n };\n Diagram.prototype.initConnectors = function (obj, layer, independentObj) {\n this.preventUpdate = true;\n this.initObject(obj, layer, independentObj);\n this.updateEdges(obj);\n this.preventUpdate = false;\n };\n Diagram.prototype.setZIndex = function (layer, obj) {\n //should be changed\n var currentLayer = layer;\n if ((obj).zIndex === -1) {\n while (currentLayer.zIndexTable[currentLayer.objectZIndex + 1]) {\n layer.objectZIndex++;\n }\n obj.zIndex = ++currentLayer.objectZIndex;\n }\n else {\n var index = obj.zIndex;\n if (currentLayer.zIndexTable[index]) {\n var tabelLength = Object.keys(currentLayer.zIndexTable).length;\n var j = 0;\n for (var i = 0; i < tabelLength; i++) {\n if (i === index) {\n for (var j_1 = tabelLength; j_1 > index; j_1--) {\n currentLayer.zIndexTable[j_1] = currentLayer.zIndexTable[j_1 - 1];\n if (this.nameTable[currentLayer.zIndexTable[j_1]]) {\n this.nameTable[currentLayer.zIndexTable[j_1]].zIndex = j_1;\n }\n }\n currentLayer.zIndexTable[i] = obj.id;\n }\n j++;\n }\n }\n }\n };\n Diagram.prototype.initializeDiagramLayers = function () {\n for (var _i = 0, _a = this.layers; _i < _a.length; _i++) {\n var layer = _a[_i];\n layer.zIndex = this.layers.indexOf(layer);\n this.layerZIndexTable[layer.zIndex] = layer.id;\n }\n if (this.layers.length === 0) {\n var defaultLayer = {\n id: 'default_layer', visible: true, lock: false, objects: [], zIndex: 0,\n objectZIndex: -1, zIndexTable: {}\n };\n this.commandHandler.addLayer(defaultLayer);\n }\n this.setActiveLayer(this.layers[this.layers.length - 1].id);\n };\n /** @private */\n Diagram.prototype.resetTool = function () {\n this.eventHandler.resetTool();\n };\n /** @private */\n Diagram.prototype.initObject = function (obj, layer, independentObj) {\n if (independentObj === void 0) { independentObj = true; }\n if (obj !== undefined) {\n if (independentObj) {\n if (!layer) {\n this.addToLayer(obj, false);\n layer = this.activeLayer;\n }\n //Move the common properties like zindex and id to an abstract class\n if (obj instanceof Node || obj instanceof Connector) {\n this.setZIndex(layer, obj);\n }\n }\n if (obj instanceof Node) {\n if (independentObj) {\n var getDefaults = getFunction(this.getNodeDefaults);\n if (getDefaults) {\n var defaults = getDefaults(obj, this);\n if (defaults && defaults !== obj) {\n extendObject(defaults, obj);\n }\n }\n this.initNode(obj);\n }\n }\n else if (obj instanceof Connector) {\n var getDefaults = getFunction(this.getConnectorDefaults);\n if (getDefaults) {\n var defaults = getDefaults(obj, this);\n if (defaults && defaults !== obj) {\n extendObject(defaults, obj);\n }\n if (obj.segments.length) {\n if (obj.type !== obj.segments[0].type) {\n obj.segments = [];\n }\n }\n }\n var sourceNode = this.nameTable[obj.sourceID];\n var targetNode = this.nameTable[obj.targetID];\n if (sourceNode !== undefined && canOutConnect(sourceNode)) {\n obj.sourceWrapper = this.getEndNodeWrapper(sourceNode, obj, true);\n if (obj.sourcePortID) {\n obj.sourcePortWrapper = this.getWrapper(sourceNode.wrapper, obj.sourcePortID);\n }\n }\n if (targetNode !== undefined && canInConnect(targetNode)) {\n obj.targetWrapper = this.getEndNodeWrapper(targetNode, obj, false);\n if (obj.targetPortID) {\n obj.targetPortWrapper = this.getWrapper(targetNode.wrapper, obj.targetPortID);\n }\n }\n if (!independentObj) {\n var points = obj.getConnectorPoints(obj.type);\n updateConnector(obj, points);\n }\n if (independentObj) {\n obj.init(this);\n }\n obj.wrapper.measure(new Size(undefined, undefined));\n obj.wrapper.arrange(obj.wrapper.desiredSize);\n }\n if (this.bpmnModule && obj instanceof Node\n && obj.shape.type === 'Bpmn' && obj.shape.annotations.length > 0) {\n this.bpmnModule.updateQuad(obj, this);\n }\n if (independentObj) {\n var checkBoundaryConstraints = this.commandHandler.checkBoundaryConstraints(undefined, undefined, obj.wrapper.bounds);\n if (!checkBoundaryConstraints) {\n var node = obj instanceof Node ? this.nodes : this.connectors;\n for (var i = 0; i <= node.length; i++) {\n if (node[i] && obj.id === node[i].id) {\n node.splice(i, 1);\n }\n }\n }\n layer.zIndexTable[obj.zIndex] = obj.id;\n }\n this.nameTable[obj.id] = obj;\n if (obj instanceof Node && obj.children) {\n this.updateGroupOffset(obj);\n this.groupTable[obj.id] = obj.children;\n for (var i = 0; i < obj.children.length; i++) {\n var node = (this.nameTable[obj.children[i]]);\n node.parentId = obj.id;\n }\n if (!this.isLoading && obj.rotateAngle) {\n this.commandHandler.rotateObjects(obj, [obj], obj.rotateAngle, { x: obj.offsetX, y: obj.offsetY }, false);\n }\n }\n this.updateQuad(obj);\n }\n if (obj.visible === false) {\n this.updateElementVisibility(obj.wrapper, obj, false);\n }\n };\n Diagram.prototype.updateDefaultLayoutIcons = function (node) {\n if (this.layout.type === 'OrganizationalChart' || this.layout.type === 'HierarchicalTree' ||\n this.layout.type === 'ComplexHierarchicalTree') {\n {\n this.updateDefaultLayoutIcon(node, node.expandIcon);\n this.updateDefaultLayoutIcon(node, node.collapseIcon);\n }\n }\n };\n Diagram.prototype.updateDefaultLayoutIcon = function (node, icon) {\n if (icon.shape !== 'None') {\n if (icon.horizontalAlignment === 'Auto' && icon.verticalAlignment === 'Auto' &&\n icon.offset.x === .5 && icon.offset.y === 1) {\n var iconWrapper = this.getWrapper(node.wrapper, 'icon_content');\n var offsetX = void 0;\n var offsetY = void 0;\n if (this.layout.orientation === 'TopToBottom' || this.layout.orientation === 'BottomToTop') {\n offsetX = .5;\n offsetY = this.layout.orientation === 'TopToBottom' ? 1 : 0;\n }\n else if (this.layout.orientation === 'RightToLeft' || this.layout.orientation === 'LeftToRight') {\n offsetX = this.layout.orientation === 'LeftToRight' ? 1 : 0;\n offsetY = .5;\n }\n iconWrapper.setOffsetWithRespectToBounds(offsetX, offsetY, 'Fraction');\n iconWrapper.horizontalAlignment = 'Center';\n iconWrapper.verticalAlignment = 'Center';\n node.wrapper.measure(new Size(node.wrapper.width, node.wrapper.height));\n node.wrapper.arrange(node.wrapper.desiredSize);\n }\n }\n };\n /**\n * @private\n */\n Diagram.prototype.updateGroupOffset = function (node) {\n if ((node.children && node.children.length > 0) || (node.processId)) {\n this.nameTable[node.id].offsetX = node.wrapper.offsetX;\n this.nameTable[node.id].offsetY = node.wrapper.offsetY;\n if ((node.children && node.children.length > 0)) {\n this.nameTable[node.id].width = node.wrapper.actualSize.width;\n this.nameTable[node.id].height = node.wrapper.actualSize.height;\n }\n }\n };\n Diagram.prototype.initNode = function (obj) {\n var canvas = obj.initContainer();\n var portContainer = new Canvas();\n var content;\n if (!canvas.children) {\n canvas.children = [];\n }\n if (obj.children) {\n canvas.measureChildren = false;\n for (var i = 0; i < obj.children.length; i++) {\n if (this.nameTable[obj.children[i]]) {\n canvas.children.push(this.nameTable[obj.children[i]].wrapper);\n }\n }\n portContainer.id = 'group_container';\n portContainer.style.fill = 'none';\n portContainer.style.strokeColor = 'none';\n portContainer.horizontalAlignment = 'Stretch';\n portContainer.verticalAlignment = 'Stretch';\n portContainer.children = [];\n canvas.children.push(portContainer);\n }\n else {\n var setNodeTemplate = getFunction(this.setNodeTemplate);\n if (setNodeTemplate) {\n content = setNodeTemplate(obj, this);\n }\n if (!content) {\n content = obj.init(this);\n }\n canvas.children.push(content);\n }\n // tslint:disable-next-line:no-any\n var wrapperContent;\n wrapperContent = getFunction(this.getDescription);\n if (wrapperContent) {\n (obj.children ? canvas : content).description = wrapperContent;\n }\n else {\n (obj.children ? canvas : content).description = obj.annotations.length ? obj.annotations[0].content : obj.id;\n }\n var container = obj.children ? portContainer : canvas;\n obj.initAnnotations(this.getDescription, container);\n obj.initPorts(this.getDescription, container);\n obj.initIcons(this.getDescription, this.layout, container);\n canvas.measure(new Size(obj.width, obj.height));\n canvas.arrange(canvas.desiredSize);\n };\n Diagram.prototype.canExecute = function () {\n return true;\n };\n Diagram.prototype.initViews = function () {\n if (!this.isLoading) {\n this.views.push(this.element.id);\n this.views[this.element.id] = this;\n }\n };\n Diagram.prototype.initCommands = function () {\n var i;\n var newCommands = this.commandManager.commands;\n var commands = {\n 'copy': {\n execute: this.copyCommand.bind(this), canExecute: this.canExecute.bind(this),\n gesture: { key: Keys.C, keyModifiers: KeyModifiers.Control }\n },\n 'paste': {\n execute: this.pasteCommand.bind(this), canExecute: this.canExecute.bind(this),\n gesture: { key: Keys.V, keyModifiers: KeyModifiers.Control }\n },\n 'cut': {\n execute: this.cutCommand.bind(this), canExecute: this.canExecute.bind(this),\n gesture: { key: Keys.X, keyModifiers: KeyModifiers.Control }\n },\n 'delete': {\n execute: this.removeCommand.bind(this), canExecute: this.canExecute.bind(this),\n gesture: { key: Keys.Delete }\n },\n 'selectAll': {\n execute: this.selectAll.bind(this), canExecute: this.canExecute.bind(this),\n gesture: { key: Keys.A, keyModifiers: KeyModifiers.Control }\n },\n 'undo': {\n execute: this.undo.bind(this), canExecute: this.canExecute.bind(this),\n gesture: { key: Keys.Z, keyModifiers: KeyModifiers.Control }\n },\n 'redo': {\n execute: this.redo.bind(this), canExecute: this.canExecute.bind(this),\n gesture: { key: Keys.Y, keyModifiers: KeyModifiers.Control }\n },\n 'nudgeUp': {\n execute: this.nudgeCommand.bind(this, 'Up'),\n canExecute: this.canExecute.bind(this), gesture: { key: Keys.Up },\n parameter: 'up'\n },\n 'nudgeRight': {\n execute: this.nudgeCommand.bind(this, 'Right'),\n canExecute: this.canExecute.bind(this), gesture: { key: Keys.Right },\n parameter: 'right'\n },\n 'nudgeDown': {\n execute: this.nudgeCommand.bind(this, 'Down'),\n canExecute: this.canExecute.bind(this), gesture: { key: Keys.Down },\n parameter: 'down'\n },\n 'nudgeLeft': {\n execute: this.nudgeCommand.bind(this, 'Left'),\n canExecute: this.canExecute.bind(this), gesture: { key: Keys.Left },\n parameter: 'left'\n },\n 'startEdit': {\n execute: this.startEditCommad.bind(this),\n canExecute: this.canExecute.bind(this), gesture: { key: Keys.F2 }\n },\n 'endEdit': {\n execute: this.endEditCommand.bind(this),\n canExecute: this.canExecute.bind(this), gesture: { key: Keys.Escape }\n },\n 'focusToNextItem': {\n // execute: this.focusToItem.bind(this),\n canExecute: this.canExecute.bind(this), gesture: { key: Keys.Tab }\n },\n 'focusToPreviousItem': {\n // execute: this.focusToItem.bind(this),\n canExecute: this.canExecute.bind(this), gesture: { key: Keys.Tab, keyModifiers: KeyModifiers.Control }\n },\n 'selectFocusedItem': {\n execute: this.startEditCommad.bind(this),\n canExecute: this.canExecute.bind(this), gesture: { key: Keys.Enter }\n },\n };\n this.initCommandManager(newCommands, commands);\n };\n Diagram.prototype.overrideCommands = function (newCommand, commands) {\n var command;\n for (var _i = 0, _a = Object.keys(commands); _i < _a.length; _i++) {\n var key = _a[_i];\n command = commands[key];\n if (newCommand.gesture.key === command.gesture.key && newCommand.gesture.keyModifiers === command.gesture.keyModifiers) {\n delete commands[key];\n break;\n }\n }\n };\n Diagram.prototype.initCommandManager = function (newCommands, commands) {\n var i = 0;\n if (newCommands) {\n for (i = 0; i < newCommands.length; i++) {\n if (commands[newCommands[i].name] && newCommands[i]) {\n if (newCommands[i].canExecute) {\n commands[newCommands[i].name].canExecute = newCommands[i].canExecute;\n }\n if (newCommands[i].execute) {\n commands[newCommands[i].name].execute = newCommands[i].execute;\n }\n if (newCommands[i].gesture.key || newCommands[i].gesture.keyModifiers) {\n commands[newCommands[i].name].gesture = newCommands[i].gesture;\n }\n if (newCommands[i].parameter !== '') {\n commands[newCommands[i].name].parameter = newCommands[i].parameter;\n }\n }\n else {\n this.overrideCommands(newCommands[i], commands);\n commands[newCommands[i].name] = {\n execute: newCommands[i].execute, canExecute: newCommands[i].canExecute, gesture: newCommands[i].gesture,\n parameter: newCommands[i].parameter\n };\n }\n }\n }\n this.commands = commands;\n };\n /** @private */\n Diagram.prototype.updateNodeEdges = function (node) {\n for (var _i = 0, _a = node.inEdges; _i < _a.length; _i++) {\n var edge = _a[_i];\n if (this.nameTable[edge]) {\n this.nameTable[edge].targetID = '';\n }\n }\n for (var _b = 0, _c = node.outEdges; _b < _c.length; _b++) {\n var edge = _c[_b];\n if (this.nameTable[edge]) {\n this.nameTable[edge].sourceID = '';\n }\n }\n node.inEdges = [];\n node.outEdges = [];\n };\n /** @private */\n Diagram.prototype.updateIconVisibility = function (node, visibility) {\n for (var i = 0; i < node.wrapper.children.length; i++) {\n var child = node.wrapper.children[i];\n var id = child.id.split(node.id)[1];\n if (child.id && id && id.match('^_icon')) {\n child.visible = visibility;\n this.updateDiagramContainerVisibility(child, visibility);\n }\n }\n };\n /** @private */\n Diagram.prototype.updateEdges = function (obj) {\n if (obj.sourceID !== undefined && obj.sourceID !== '') {\n var node = this.nameTable[obj.sourceID];\n if (node && node.outEdges && node.outEdges.length === 0) {\n node.outEdges = [];\n }\n if (node && node.outEdges && node.outEdges.indexOf(obj.id) === -1) {\n node.outEdges.push(obj.id);\n }\n }\n if (obj.targetID !== undefined && obj.targetID !== '') {\n var node = this.nameTable[obj.targetID];\n if (node && node.inEdges && node.inEdges.length === 0) {\n node.inEdges = [];\n }\n if (node && node.inEdges && node.inEdges.indexOf(obj.id) === -1) {\n node.inEdges.push(obj.id);\n }\n if (node && node.visible && node.outEdges) {\n var value = node.outEdges.length === 0 ? false : true;\n this.updateIconVisibility(node, value);\n }\n }\n };\n /** @private */\n Diagram.prototype.refreshDiagram = function () {\n this.initLayerObjects();\n this.doLayout();\n this.updateBridging();\n this.scroller.setSize();\n };\n /** @private */\n Diagram.prototype.updateDiagramObject = function (obj) {\n var view;\n for (var _i = 0, _a = this.views; _i < _a.length; _i++) {\n var temp = _a[_i];\n view = this.views[temp];\n if (view.mode === 'SVG' && this.diagramActions) {\n var htmlLayer = getHTMLLayer(this.element.id);\n var diagramElementsLayer = document.getElementById(view.element.id + '_diagramLayer');\n this.diagramRenderer.updateNode(obj.wrapper, diagramElementsLayer, htmlLayer, undefined);\n }\n else {\n this.refreshCanvasDiagramLayer(view);\n }\n }\n };\n /** @private */\n Diagram.prototype.getObjectsOfLayer = function (objectArray) {\n var nodeArray = [];\n for (var _i = 0, objectArray_1 = objectArray; _i < objectArray_1.length; _i++) {\n var obj = objectArray_1[_i];\n if (this.nameTable[obj]) {\n nodeArray.push(this.nameTable[obj]);\n }\n }\n return nodeArray;\n };\n /** @private */\n Diagram.prototype.refreshDiagramLayer = function () {\n var view;\n for (var _i = 0, _a = this.views; _i < _a.length; _i++) {\n var temp = _a[_i];\n view = this.views[temp];\n switch (view.mode) {\n case 'SVG':\n this.refreshSvgDiagramLayer(view);\n break;\n case 'Canvas':\n this.refreshCanvasLayers();\n break;\n }\n }\n };\n /** @private */\n Diagram.prototype.refreshCanvasLayers = function () {\n for (var _i = 0, _a = this.views; _i < _a.length; _i++) {\n var temp = _a[_i];\n var view = this.views[temp];\n this.refreshCanvasDiagramLayer(view);\n }\n };\n Diagram.prototype.renderBasicElement = function (view) {\n var htmlLayer = getHTMLLayer(view.element.id);\n for (var i = 0; i < this.basicElements.length; i++) {\n var element = this.basicElements[i];\n if (element instanceof Container) {\n element.prevRotateAngle = 0;\n }\n element.measure(new Size(element.width, element.height));\n element.arrange(element.desiredSize);\n view.diagramRenderer.renderElement(element, view.diagramLayer, htmlLayer);\n }\n };\n Diagram.prototype.refreshElements = function (view) {\n if (!this.isDestroyed) {\n this.clearCanvas(view);\n if (view instanceof Diagram) {\n view.diagramLayer.getContext('2d').setTransform(view.scroller.currentZoom, 0, 0, view.scroller.currentZoom, 0, 0);\n view.diagramLayer.getContext('2d').scale(1.5, 1.5);\n }\n var htmlLayer = getHTMLLayer(view.element.id);\n var bounds = this.spatialSearch.getPageBounds();\n this.renderDiagramElements(view.diagramLayer, view.diagramRenderer, htmlLayer);\n if (view instanceof Diagram) {\n view.diagramLayer.style.transform = 'scale(' + (2 / 3) + ')';\n view.diagramLayer.style.transformOrigin = '0 0';\n }\n this.renderTimer = null;\n }\n };\n /** @private */\n Diagram.prototype.refreshCanvasDiagramLayer = function (view) {\n var _this = this;\n if (view.mode !== 'SVG' && !this.isDestroyed) {\n if (this.basicElements.length > 0) {\n this.renderBasicElement(view);\n }\n if (!this.diagramActions || (this.diagramActions & DiagramAction.Render) === 0) {\n this.refreshElements(view);\n }\n else if (!this.renderTimer) {\n this.renderTimer = setTimeout(function () {\n _this.refreshElements(view);\n }, 40);\n }\n }\n };\n /** @private */\n Diagram.prototype.updatePortVisibility = function (node, portVisibility, inverse) {\n var portElement;\n var drawingObject = !(this.drawingObject && this.drawingObject.shape) ? true : false;\n if (node instanceof Node && drawingObject && canMove(node)) {\n var ports = node.ports;\n var changed = false;\n for (var i = 0; i < ports.length; i++) {\n portElement = this.getWrapper(node.wrapper, ports[i].id);\n if (portVisibility & PortVisibility.Hover || portVisibility & PortVisibility.Connect) {\n if (checkPortRestriction(ports[i], portVisibility)) {\n portElement.visible = !inverse;\n changed = true;\n }\n }\n }\n if (changed) {\n this.updateDiagramObject(node);\n }\n }\n };\n /** @private */\n Diagram.prototype.refreshSvgDiagramLayer = function (view) {\n var container = document.getElementById(view.element.id);\n var bounds = container.getBoundingClientRect();\n var node;\n var element;\n var connector;\n var diagramElementsLayer = document.getElementById(view.element.id + '_diagramLayer');\n var htmlLayer = getHTMLLayer(view.element.id);\n for (var i = 0; i < this.basicElements.length; i++) {\n element = this.basicElements[i];\n element.measure(new Size(element.width, element.height));\n element.arrange(element.desiredSize);\n this.diagramRenderer.renderElement(element, diagramElementsLayer, htmlLayer);\n }\n this.renderDiagramElements(diagramElementsLayer, this.diagramRenderer, htmlLayer);\n };\n /** @private */\n Diagram.prototype.renderDiagramElements = function (canvas, renderer, htmlLayer, transform) {\n if (transform === void 0) { transform = true; }\n for (var _i = 0, _a = Object.keys(this.layerZIndexTable); _i < _a.length; _i++) {\n var layerId = _a[_i];\n var layer = this.commandHandler.getLayer(this.layerZIndexTable[layerId]);\n for (var _b = 0, _c = Object.keys(layer.zIndexTable); _b < _c.length; _b++) {\n var node = _c[_b];\n var element = this.nameTable[layer.zIndexTable[node]].wrapper;\n if (!(this.nameTable[layer.zIndexTable[node]].parentId)\n && !(this.nameTable[layer.zIndexTable[node]].processId)) {\n renderer.renderElement(element, canvas, htmlLayer, (!renderer.isSvgMode && transform) ? this.scroller.transform : undefined);\n }\n }\n }\n };\n /** @private */\n Diagram.prototype.updateBridging = function (isLoad) {\n if (this.bridgingModule) {\n for (var i = 0; i < this.connectors.length; i++) {\n var connector = this.connectors[i];\n this.bridgingModule.updateBridging(connector, this);\n var canvas = this.connectors[i].wrapper;\n var pathSegment = canvas.children[0];\n var data = pathSegment.data;\n connector.getSegmentElement(connector, pathSegment);\n if (pathSegment.data !== data) {\n canvas.measure(new Size());\n canvas.arrange(canvas.desiredSize);\n if (this.mode === 'SVG' && !isLoad) {\n this.updateDiagramObject(connector);\n }\n }\n }\n }\n };\n /** @private */\n Diagram.prototype.setCursor = function (cursor) {\n this.diagramRenderer.setCursor(this.diagramCanvas, cursor);\n };\n /** @private */\n Diagram.prototype.clearCanvas = function (view) {\n var width;\n var height;\n width = view.contentWidth || view.diagramLayer.width;\n height = view.contentHeight || view.diagramLayer.height;\n if (view.mode !== 'SVG') {\n var ctx = CanvasRenderer.getContext(view.diagramLayer);\n ctx.clearRect(0, 0, width, height);\n }\n };\n /** @private */\n Diagram.prototype.updateScrollOffset = function () {\n this.scroller.setScrollOffset(this.diagramCanvas.scrollLeft, this.diagramCanvas.scrollTop);\n updateRuler(this);\n };\n /** @private */\n Diagram.prototype.setOffset = function (offsetX, offsetY) {\n var container = document.getElementById(this.element.id + 'content');\n if (container) {\n container.scrollLeft = offsetX;\n container.scrollTop = offsetY;\n }\n };\n /** @private */\n Diagram.prototype.setSize = function (width, height) {\n if (this.diagramLayer && !this.preventUpdate) {\n var position = getRulerSize(this);\n width -= position.width;\n height -= position.height;\n var bounds = this.spatialSearch.getPageBounds();\n bounds.x *= this.scroller.currentZoom;\n bounds.y *= this.scroller.currentZoom;\n bounds.width *= this.scroller.currentZoom;\n bounds.height *= this.scroller.currentZoom;\n var factor = this.mode === 'SVG' ? 1 : 1.5;\n var diagramLayer = this.mode === 'SVG' ?\n getDiagramLayerSvg(this.element.id) : this.diagramLayer;\n diagramLayer.setAttribute('width', (factor * width).toString());\n diagramLayer.setAttribute('height', (factor * height).toString());\n var attr = { 'width': width.toString(), 'height': height.toString() };\n this.diagramLayerDiv.style.width = width + 'px';\n this.diagramLayerDiv.style.height = height + 'px';\n setAttributeSvg(getNativeLayerSvg(this.element.id), attr);\n setAttributeSvg(getPortLayerSvg(this.element.id), attr);\n var adornerSVG = getAdornerLayerSvg(this.element.id);\n setAttributeSvg(adornerSVG, attr);\n adornerSVG.parentNode.style.width = width + 'px';\n adornerSVG.parentNode.style.height = height + 'px';\n var gridLayer = getGridLayerSvg(this.element.id);\n setAttributeSvg(gridLayer, attr);\n this.diagramRenderer.updateGrid(this.snapSettings, gridLayer, this.scroller.transform, this.rulerSettings, this.hRuler, this.vRuler);\n setAttributeSvg(getBackgroundLayerSvg(this.element.id), attr);\n this.htmlLayer.style.width = width + 'px';\n this.htmlLayer.style.height = height + 'px';\n this.diagramRenderer.transformLayers(this.scroller.transform, this.mode === 'SVG');\n if (this.mode !== 'SVG') {\n this.refreshDiagramLayer();\n }\n this.updateSelector();\n this.renderPageBreaks(bounds);\n }\n };\n /**\n * Defines how to remove the Page breaks\n * @private\n */\n Diagram.prototype.removePageBreaks = function () {\n if (this.diagramLayer) {\n var line = getBackgroundLayer(this.element.id);\n if (line && line.childNodes) {\n var length_1 = line.childNodes.length;\n for (var i = 0; i < length_1; i++) {\n line.removeChild(line.childNodes[0]);\n }\n }\n }\n };\n /**\n * Defines how the page breaks has been rendered\n * @private\n */\n Diagram.prototype.renderPageBreaks = function (bounds) {\n this.removePageBreaks();\n var backgroundLayer = getBackgroundLayer(this.element.id);\n if (backgroundLayer) {\n var i = 0;\n bounds = this.scroller.getPageBounds(true);\n var x = (this.scroller.transform.tx + bounds.x) * this.scroller.currentZoom;\n var y = (this.scroller.transform.ty + bounds.y) * this.scroller.currentZoom;\n var height = bounds.height * this.scroller.currentZoom;\n var width = bounds.width * this.scroller.currentZoom;\n DiagramRenderer.renderSvgBackGroundImage(this.pageSettings.background, this.element, x, y, width, height);\n var options = {\n id: backgroundLayer.id + 'rect', x: x,\n y: y,\n height: height,\n width: width, angle: 0, stroke: '', strokeWidth: 1,\n fill: this.pageSettings.background.color, opacity: 1,\n pivotX: 0, pivotY: 0, visible: true, dashArray: '0',\n };\n this.diagramRenderer.drawRect(backgroundLayer, options);\n if (this.pageSettings.showPageBreaks) {\n var collection = this.scroller.getPageBreak(bounds);\n for (i = 0; i < collection.length; i++) {\n this.diagramRenderer.drawLine(backgroundLayer, {\n class: 'e-diagram-page-break',\n fill: 'none', stroke: '#aaaaaa', strokeWidth: 1, dashArray: '10 10',\n opacity: 2, x: 0, y: 0, width: 0, height: 0, angle: 0, pivotX: 0, pivotY: 0, visible: true,\n startPoint: {\n x: (collection[i].x1 + this.scroller.transform.tx) * this.scroller.currentZoom,\n y: (collection[i].y1 + this.scroller.transform.ty) * this.scroller.currentZoom\n },\n endPoint: {\n x: (collection[i].x2 + this.scroller.transform.tx) * this.scroller.currentZoom,\n y: (collection[i].y2 + this.scroller.transform.ty) * this.scroller.currentZoom\n }, id: collection[i].y1 === collection[i].y2 ? 'HorizontalLines' : 'VerticalLines'\n });\n }\n }\n }\n };\n Diagram.prototype.validatePageSize = function () {\n var temp = 0;\n if (this.pageSettings.orientation === 'Portrait') {\n if (this.pageSettings.width > this.pageSettings.height) {\n temp = this.pageSettings.height;\n this.pageSettings.height = this.pageSettings.width;\n this.pageSettings.width = temp;\n }\n }\n else {\n if (this.pageSettings.height > this.pageSettings.width) {\n temp = this.pageSettings.width;\n this.pageSettings.width = this.pageSettings.height;\n this.pageSettings.height = temp;\n }\n }\n };\n /**\n * @private\n */\n Diagram.prototype.setOverview = function (overview, id) {\n if (overview) {\n if (overview) {\n this.views.push(overview.id);\n this.views[overview.id] = overview;\n overview.renderDocument(overview);\n overview.diagramRenderer.setLayers();\n overview.updateView(overview);\n this.renderNodes(overview);\n }\n }\n else {\n for (var i = 0; i < this.views.length; i++) {\n if (this.views[i] === id) {\n overview = (this.views[id]);\n }\n }\n this.views[id] = undefined;\n var index = this.views.indexOf(id);\n this.views.splice(index, 1);\n }\n };\n Diagram.prototype.renderNodes = function (overview) {\n if (overview) {\n var renderer = new DiagramRenderer(overview.id, new SvgRenderer(), false);\n var g = document.getElementById(overview.element.id + '_diagramLayer');\n var htmlLayer = getHTMLLayer(overview.element.id);\n this.renderDiagramElements(g, overview.diagramRenderer || renderer, htmlLayer);\n }\n };\n Diagram.prototype.updateThumbConstraints = function (node, selectorModel) {\n var state = 0;\n var length = node.length;\n for (var i = 0; i < length; i++) {\n var obj = node[i];\n var hideRotate = false;\n var hideResize = false;\n var thumbConstraints = selectorModel.thumbsConstraints;\n if (obj instanceof Node) {\n hideRotate = (obj.shape.type === 'Bpmn' && (obj.shape.shape === 'Activity' &&\n (obj.shape.activity.subProcess.collapsed === false)) ||\n obj.shape.shape === 'TextAnnotation');\n hideResize = (obj.shape.type === 'Bpmn' && obj.shape.shape === 'TextAnnotation');\n if (!canRotate(obj) || !(thumbConstraints & ThumbsConstraints.Rotate) || hideRotate) {\n thumbConstraints = thumbConstraints & ~ThumbsConstraints.Rotate;\n }\n if (!canResize(obj, 'SouthEast') || !(thumbConstraints & ThumbsConstraints.ResizeSouthEast) || hideResize) {\n thumbConstraints = thumbConstraints & ~ThumbsConstraints.ResizeSouthEast;\n }\n if (!canResize(obj, 'NorthWest') || !(thumbConstraints & ThumbsConstraints.ResizeNorthWest) || hideResize) {\n thumbConstraints = thumbConstraints & ~ThumbsConstraints.ResizeNorthWest;\n }\n if (!canResize(obj, 'East') || !(thumbConstraints & ThumbsConstraints.ResizeEast) || hideResize) {\n thumbConstraints = thumbConstraints & ~ThumbsConstraints.ResizeEast;\n }\n if (!canResize(obj, 'West') || !(thumbConstraints & ThumbsConstraints.ResizeWest) || hideResize) {\n thumbConstraints = thumbConstraints & ~ThumbsConstraints.ResizeWest;\n }\n if (!canResize(obj, 'North') || !(thumbConstraints & ThumbsConstraints.ResizeNorth) || hideResize) {\n thumbConstraints = thumbConstraints & ~ThumbsConstraints.ResizeNorth;\n }\n if (!canResize(obj, 'South') || !(thumbConstraints & ThumbsConstraints.ResizeSouth) || hideResize) {\n thumbConstraints = thumbConstraints & ~ThumbsConstraints.ResizeSouth;\n }\n if (!canResize(obj, 'NorthEast') || !(thumbConstraints & ThumbsConstraints.ResizeNorthEast) || hideResize) {\n thumbConstraints = thumbConstraints & ~ThumbsConstraints.ResizeNorthEast;\n }\n if (!canResize(obj, 'SouthWest') || !(thumbConstraints & ThumbsConstraints.ResizeSouthWest) || hideResize) {\n thumbConstraints = thumbConstraints & ~ThumbsConstraints.ResizeSouthWest;\n }\n }\n else {\n thumbConstraints = thumbConstraints | ThumbsConstraints.Default;\n if (canDragSourceEnd(obj)) {\n thumbConstraints = thumbConstraints | ThumbsConstraints.ConnectorSource;\n }\n else {\n thumbConstraints = thumbConstraints & ~ThumbsConstraints.ConnectorSource;\n }\n if (canDragTargetEnd(obj)) {\n thumbConstraints = thumbConstraints | ThumbsConstraints.ConnectorTarget;\n }\n else {\n thumbConstraints = thumbConstraints & ~ThumbsConstraints.ConnectorTarget;\n }\n }\n selectorModel.thumbsConstraints = thumbConstraints;\n }\n };\n /** @private */\n Diagram.prototype.renderSelector = function (multipleSelection) {\n var size = new Size();\n var selectorModel = this.selectedItems;\n var selectorConstraints = selectorModel.constraints;\n this.clearSelectorLayer();\n if (this.commandHandler.hasSelection()) {\n if (selectorModel.nodes.length === 1 && selectorModel.connectors.length === 0) {\n selectorModel.rotateAngle = selectorModel.nodes[0].rotateAngle;\n selectorModel.pivot = selectorModel.nodes[0].pivot;\n }\n selectorModel.wrapper.measure(size);\n selectorModel.wrapper.arrange(selectorModel.wrapper.desiredSize);\n selectorModel.width = selectorModel.wrapper.actualSize.width;\n selectorModel.height = selectorModel.wrapper.actualSize.height;\n selectorModel.offsetX = selectorModel.wrapper.offsetX;\n selectorModel.offsetY = selectorModel.wrapper.offsetY;\n if (selectorModel.rotateAngle !== 0) {\n for (var _i = 0, _a = selectorModel.nodes; _i < _a.length; _i++) {\n var obj = _a[_i];\n obj.offsetX = obj.wrapper.offsetX;\n obj.offsetY = obj.wrapper.offsetY;\n }\n for (var _b = 0, _c = selectorModel.connectors; _b < _c.length; _b++) {\n var conn = _c[_b];\n //update connections\n }\n }\n var bounds = this.spatialSearch.getPageBounds();\n var selectorElement = void 0;\n selectorElement = getSelectorElement(this.element.id);\n selectorModel.thumbsConstraints = ThumbsConstraints.Default;\n this.updateThumbConstraints(selectorModel.nodes, selectorModel);\n this.updateThumbConstraints(selectorModel.connectors, selectorModel);\n if (selectorModel.nodes.length + selectorModel.connectors.length === 1) {\n if (selectorModel.nodes[0] instanceof Node) {\n this.diagramRenderer.renderResizeHandle(selectorModel.nodes[0].wrapper, selectorElement, selectorModel.thumbsConstraints, this.scroller.currentZoom, selectorModel.constraints, this.scroller.transform, undefined, canMove(selectorModel.nodes[0]));\n }\n else if (selectorModel.connectors[0] instanceof Connector) {\n var connector = selectorModel.connectors[0];\n this.diagramRenderer.renderEndPointHandle(connector, selectorElement, selectorModel.thumbsConstraints, selectorModel.constraints, this.scroller.transform, connector.sourceWrapper !== undefined, connector.targetWrapper !== undefined, (this.connectorEditingToolModule && canDragSegmentThumb(connector)) ? true : false);\n }\n }\n else {\n this.diagramRenderer.renderResizeHandle(selectorModel.wrapper, selectorElement, selectorModel.thumbsConstraints, this.scroller.currentZoom, selectorModel.constraints, this.scroller.transform, undefined, canMove(selectorModel));\n }\n this.diagramRenderer.renderUserHandler(selectorModel, selectorElement, this.scroller.transform);\n }\n };\n /** @private */\n Diagram.prototype.updateSelector = function () {\n var bounds = this.spatialSearch.getPageBounds();\n var size = new Size();\n var selectorModel = this.selectedItems;\n var selectorConstraints = selectorModel.constraints;\n if (!(this.diagramActions & DiagramAction.ToolAction) && this.selectedItems.nodes.length === 1) {\n this.selectedItems.rotateAngle = this.selectedItems.nodes[0].rotateAngle;\n this.selectedItems.wrapper.rotateAngle = this.selectedItems.nodes[0].rotateAngle;\n }\n if (this.selectedItems !== undefined) {\n this.clearSelectorLayer();\n if (selectorModel.wrapper !== null && selectorModel.wrapper.children.length) {\n selectorModel.wrapper.measure(size);\n selectorModel.wrapper.arrange(selectorModel.wrapper.desiredSize);\n if (selectorModel.rotateAngle !== 0 || selectorModel.rotateAngle !== selectorModel.wrapper.prevRotateAngle) {\n for (var _i = 0, _a = selectorModel.nodes; _i < _a.length; _i++) {\n var obj = _a[_i];\n obj.offsetX = obj.wrapper.offsetX;\n obj.offsetY = obj.wrapper.offsetY;\n }\n }\n selectorModel.width = selectorModel.wrapper.actualSize.width;\n selectorModel.height = selectorModel.wrapper.actualSize.height;\n selectorModel.offsetX = selectorModel.wrapper.offsetX;\n selectorModel.offsetY = selectorModel.wrapper.offsetY;\n var selectorElement = void 0;\n selectorElement = getSelectorElement(this.element.id);\n var canHideResizers = this.eventHandler.canHideResizers();\n selectorModel.thumbsConstraints = ThumbsConstraints.Default;\n this.updateThumbConstraints(selectorModel.nodes, selectorModel);\n this.updateThumbConstraints(selectorModel.connectors, selectorModel);\n if (this.selectedItems.constraints & SelectorConstraints.UserHandle) {\n this.diagramRenderer.renderUserHandler(selectorModel, selectorElement, this.scroller.transform);\n }\n if (selectorModel.nodes.length + selectorModel.connectors.length === 1) {\n if (selectorModel.connectors[0] instanceof Connector) {\n var connector = selectorModel.connectors[0];\n this.diagramRenderer.renderEndPointHandle(connector, selectorElement, selectorModel.thumbsConstraints, selectorConstraints, this.scroller.transform, connector.sourceWrapper !== undefined, connector.targetWrapper !== undefined, (this.connectorEditingToolModule && canDragSegmentThumb(connector)) ? true : false);\n }\n else if (selectorModel.nodes[0] instanceof Node) {\n this.diagramRenderer.renderResizeHandle(selectorModel.nodes[0].wrapper, selectorElement, selectorModel.thumbsConstraints, this.scroller.currentZoom, selectorModel.constraints, this.scroller.transform, canHideResizers, canMove(selectorModel.nodes[0]));\n }\n }\n else {\n this.diagramRenderer.renderResizeHandle(selectorModel.wrapper, selectorElement, selectorModel.thumbsConstraints, this.scroller.currentZoom, selectorModel.constraints, this.scroller.transform, canHideResizers, canMove(selectorModel));\n }\n }\n }\n };\n /** @private */\n Diagram.prototype.drawSelectionRectangle = function (x, y, width, height) {\n this.clearSelectorLayer();\n this.diagramRenderer.drawSelectionRectangle(x, y, width, height, this.adornerLayer, this.scroller.transform);\n };\n /**\n * @private\n */\n Diagram.prototype.renderHighlighter = function (element) {\n var adornerSvg = getAdornerLayerSvg(this.element.id);\n this.diagramRenderer.renderHighlighter(element, adornerSvg, this.scroller.transform);\n };\n /**\n * @private\n */\n Diagram.prototype.clearHighlighter = function () {\n var adornerSvg = getAdornerLayerSvg(this.element.id);\n var highlighter = adornerSvg.getElementById(adornerSvg.id + '_highlighter');\n if (highlighter) {\n highlighter.parentNode.removeChild(highlighter);\n }\n };\n /** @private */\n Diagram.prototype.getNodesConnectors = function (selectedItems) {\n for (var i = 0; i < this.nodes.length; i++) {\n var node = this.nodes[i];\n selectedItems.push(node);\n }\n for (var i = 0; i < this.connectors.length; i++) {\n var conn = this.connectors[i];\n selectedItems.push(conn);\n }\n return selectedItems;\n };\n /** @private */\n Diagram.prototype.clearSelectorLayer = function () {\n var adornerSvg = getAdornerLayerSvg(this.element.id);\n var highlighter = adornerSvg.getElementById(adornerSvg.id + '_highlighter');\n var selectionRect = adornerSvg.getElementById(this.adornerLayer.id + '_selected_region');\n if (selectionRect) {\n selectionRect.parentNode.removeChild(selectionRect);\n }\n this.clearHighlighter();\n var childNodes = getSelectorElement(this.element.id).childNodes;\n var child;\n for (var i = childNodes.length; i > 0; i--) {\n child = childNodes[i - 1];\n child.parentNode.removeChild(child);\n }\n };\n /** @private */\n Diagram.prototype.getWrapper = function (nodes, id) {\n var wrapper;\n id = nodes.id + '_' + id;\n var container = nodes instanceof Canvas ? nodes : this.getPortContainer(this.nameTable[nodes.id]);\n for (var i = 0; i < container.children.length; i++) {\n if (id === container.children[i].id) {\n wrapper = container.children[i];\n }\n }\n return wrapper;\n };\n Diagram.prototype.getEndNodeWrapper = function (node, connector, source) {\n if (node.shape.type === 'Bpmn' && node.wrapper.children[0] instanceof Canvas) {\n if (node.shape.shape === 'Activity') {\n if (source && node.shape.activity.subProcess.type === 'Transaction'\n && connector.sourcePortID) {\n var portId = connector.sourcePortID;\n var parent_1 = node.wrapper.children[0].children[0].children[2];\n if (parent_1.children) {\n for (var _i = 0, _a = parent_1.children; _i < _a.length; _i++) {\n var child = _a[_i];\n if (child.visible && child.id === node.id + '_' + portId) {\n return child.children[0];\n }\n }\n }\n }\n return node.wrapper.children[0].children[0].children[0];\n }\n return node.wrapper.children[0].children[0];\n }\n if (!this.containsMargin(node.wrapper.children[0])) {\n if (!node.children) {\n return node.wrapper.children[0];\n }\n }\n return node.wrapper;\n };\n Diagram.prototype.containsMargin = function (node) {\n return node.margin && (node.margin.left !== 0 || node.margin.top !== 0 || node.margin.right !== 0 || node.margin.bottom !== 0);\n };\n Diagram.prototype.focusOutEdit = function () {\n this.endEdit(true);\n };\n Diagram.prototype.endEditCommand = function () {\n this.endEdit();\n };\n /**\n * @private\n */\n Diagram.prototype.endEdit = function (focusOut) {\n if (this.diagramActions & DiagramAction.TextEdit) {\n var textarea = document.getElementById(this.element.id + '_editBox');\n var text = textarea.value;\n EventHandler.remove(textarea, 'input', this.eventHandler.inputChange);\n EventHandler.remove(textarea, 'focusout', this.focusOutEdit);\n var element = document.getElementById(this.element.id + '_editTextBoxDiv');\n var args = { oldValue: element.textContent, newValue: text, cancel: false };\n var bpmnAnnotation = false;\n var node = void 0;\n element.parentNode.removeChild(element);\n var textWrapper = void 0;\n if (this.bpmnModule) {\n node = this.bpmnModule.isBpmnTextAnnotation(this.activeLabel, this);\n textWrapper = this.bpmnModule.getTextAnnotationWrapper(node, this.activeLabel.id);\n bpmnAnnotation = node ? true : false;\n if (bpmnAnnotation) {\n if (element.textContent !== text) {\n this.triggerEvent(DiagramEvent.textEdit, args);\n if (!args.cancel) {\n this.bpmnModule.updateTextAnnotationContent(node, this.activeLabel, text, this);\n }\n }\n }\n }\n if (!bpmnAnnotation) {\n node = this.nameTable[this.activeLabel.parentId];\n var deleteNode = this.eventHandler.isAddTextNode(node, true);\n if (!deleteNode && element.textContent !== text) {\n this.triggerEvent(DiagramEvent.textEdit, args);\n }\n if (!textWrapper) {\n textWrapper = this.getWrapper(node.wrapper, this.activeLabel.id);\n }\n var annotation = findAnnotation(node, this.activeLabel.id);\n if (annotation.content !== text && !args.cancel) {\n annotation.content = text;\n this.dataBind();\n this.updateSelector();\n }\n if (deleteNode) {\n this.removeObjectsFromLayer(node);\n this.removeFromAQuad(node);\n delete this.nameTable[this.activeLabel.parentId];\n if (text !== '') {\n this.clearSelection();\n var clonedObject = cloneObject(node);\n node = this.add(clonedObject);\n this.updateDiagramObject(node);\n this.commandHandler.select(this.nameTable[node.id]);\n }\n }\n }\n textWrapper.visible = true;\n this.updateDiagramObject(node);\n this.diagramActions = this.diagramActions & ~DiagramAction.TextEdit;\n if (this.activeLabel.isGroup) {\n this.endGroupAction();\n }\n this.activeLabel = { id: '', parentId: '', isGroup: false };\n }\n };\n /** @private */\n Diagram.prototype.canLogChange = function () {\n if ((this.diagramActions & DiagramAction.Render) && (!(this.diagramActions & DiagramAction.ToolAction)) &&\n (!(this.diagramActions & DiagramAction.UndoRedo)) && (!(this.diagramActions & DiagramAction.PublicMethod))) {\n return true;\n }\n else {\n return false;\n }\n };\n Diagram.prototype.modelChanged = function (newProp, oldProp) {\n if (newProp.connectors || oldProp.connectors || newProp.nodes || oldProp.connectors\n || newProp.pageSettings || oldProp.pageSettings || newProp.bridgeDirection || oldProp.bridgeDirection) {\n return true;\n }\n return false;\n };\n Diagram.prototype.resetDiagramActions = function (action) {\n var isAction = action ? true : false;\n if (this.diagramActions & DiagramAction.UndoRedo && (!isAction || (action === DiagramAction.UndoRedo))) {\n this.diagramActions = this.diagramActions & ~DiagramAction.UndoRedo;\n }\n if (this.diagramActions & DiagramAction.PublicMethod && (!isAction || action === DiagramAction.PublicMethod)) {\n this.diagramActions = this.diagramActions & ~DiagramAction.PublicMethod;\n }\n };\n /** @private */\n Diagram.prototype.removeNode = function (node) {\n this.removeObjectsFromLayer(node);\n this.removeFromAQuad(this.nameTable[node.id]);\n delete this.nameTable[node.id];\n if (node.children) {\n delete this.groupTable[node.id];\n }\n this.nodes.splice(this.nodes.indexOf(node), 1);\n };\n /** @private */\n Diagram.prototype.deleteGroup = function (node) {\n var elements = [];\n var tempNode = [];\n if (node.children) {\n tempNode = this.commandHandler.getChildren(node, elements);\n }\n for (var _i = 0, tempNode_1 = tempNode; _i < tempNode_1.length; _i++) {\n var nodes = tempNode_1[_i];\n if (this.nameTable[nodes.id]) {\n this.remove(nodes);\n }\n }\n };\n //helper methods - end region\n //property changes - start region\n /** @private */\n Diagram.prototype.updateObject = function (actualObject, oldObject, changedProp) {\n if (!(this.diagramActions & DiagramAction.ToolAction)) {\n var bound = actualObject.wrapper.children[0].bounds;\n var checkBoundaryConstraints = this.commandHandler.checkBoundaryConstraints(undefined, undefined, bound);\n if (!checkBoundaryConstraints) {\n if (actualObject instanceof Node) {\n var oldNode = oldObject;\n for (var _i = 0, _a = Object.keys(changedProp); _i < _a.length; _i++) {\n var key = _a[_i];\n switch (key) {\n case 'width':\n actualObject.width = oldNode.width;\n break;\n case 'height':\n actualObject.height = oldNode.height;\n break;\n case 'offsetX':\n actualObject.offsetX = oldNode.offsetX;\n break;\n case 'offsetY':\n actualObject.offsetY = oldNode.offsetY;\n break;\n case 'rotateAngle':\n actualObject.rotateAngle = oldNode.rotateAngle;\n break;\n }\n }\n this.nodePropertyChange(actualObject, changedProp, oldObject);\n }\n else {\n for (var _b = 0, _c = Object.keys(changedProp); _b < _c.length; _b++) {\n var key = _c[_b];\n var oldConnector = oldObject;\n var actualSourcePoint = actualObject.sourcePoint;\n var actualTargetPoint = actualObject.targetPoint;\n switch (key) {\n case 'sourcePoint':\n actualSourcePoint.x = oldConnector.sourcePoint.x || actualSourcePoint.x;\n actualSourcePoint.y = oldConnector.sourcePoint.y || actualSourcePoint.y;\n break;\n case 'targetPoint':\n actualTargetPoint.x = oldConnector.targetPoint.x || actualTargetPoint.x;\n actualTargetPoint.y = oldConnector.targetPoint.y || actualTargetPoint.y;\n }\n }\n this.connectorPropertyChange(actualObject, changedProp, oldObject);\n }\n }\n }\n };\n Diagram.prototype.nodePropertyChangeExtend = function (actualObject, oldObject, node, update) {\n if (node.style !== undefined && actualObject.shape.type !== 'Bpmn') {\n updateStyle(node.style, actualObject.wrapper.children[0]);\n update = true;\n }\n if (node.constraints !== undefined) {\n this.updateThumbConstraints(this.selectedItems.nodes, this.selectedItems);\n this.updateSelector();\n update = true;\n }\n return update;\n };\n Diagram.prototype.connectorSegmentChange = function (actualObject, existingInnerBounds) {\n var tx;\n var ty;\n var segmentChange = true;\n if (existingInnerBounds.equals(existingInnerBounds, actualObject.wrapper.bounds) === false) {\n if (actualObject.outEdges.length > 0) {\n for (var k = 0; k < actualObject.outEdges.length; k++) {\n var connector = this.nameTable[actualObject.outEdges[k]];\n if (connector.targetID !== '') {\n segmentChange = this.commandHandler.isSelected(this.nameTable[connector.targetID]) ? false : true;\n }\n else {\n segmentChange = this.commandHandler.isSelected(this.nameTable[connector.id]) ? false : true;\n }\n if (connector.type === 'Orthogonal' && connector.segments && connector.segments.length > 1 && segmentChange) {\n switch (connector.segments[0].direction) {\n case 'Bottom':\n tx = actualObject.wrapper.bounds.bottomCenter.x - existingInnerBounds.bottomCenter.x;\n ty = actualObject.wrapper.bounds.bottomCenter.y - existingInnerBounds.bottomCenter.y;\n break;\n case 'Top':\n tx = actualObject.wrapper.bounds.topCenter.x - existingInnerBounds.topCenter.x;\n ty = actualObject.wrapper.bounds.topCenter.y - existingInnerBounds.topCenter.y;\n break;\n case 'Left':\n tx = actualObject.wrapper.bounds.middleLeft.x - existingInnerBounds.middleLeft.x;\n ty = actualObject.wrapper.bounds.middleLeft.y - existingInnerBounds.middleLeft.y;\n break;\n case 'Right':\n tx = actualObject.wrapper.bounds.middleRight.x - existingInnerBounds.middleRight.x;\n ty = actualObject.wrapper.bounds.middleRight.y - existingInnerBounds.middleRight.y;\n break;\n }\n this.commandHandler.dragSourceEnd(connector, tx, ty, true, null, 'ConnectorSourceEnd', undefined, undefined, undefined, true);\n }\n }\n }\n }\n };\n /* tslint:disable */\n /** @private */\n Diagram.prototype.nodePropertyChange = function (actualObject, oldObject, node, isLayout) {\n var existingBounds = actualObject.wrapper.outerBounds;\n var existingInnerBounds = actualObject.wrapper.bounds;\n var updateConnector = false;\n var i;\n var j;\n var offsetX;\n var offsetY;\n var update;\n var tx;\n var ty;\n if (node.width !== undefined && !actualObject.children) {\n actualObject.wrapper.children[0].width = node.width;\n update = true;\n updateConnector = true;\n }\n if (node.height !== undefined && !actualObject.children) {\n actualObject.wrapper.children[0].height = node.height;\n update = true;\n updateConnector = true;\n }\n update = this.nodePropertyChangeExtend(actualObject, oldObject, node, update);\n if (node.constraints !== undefined && canShadow(oldObject) !== canShadow(node)) {\n actualObject.wrapper.children[0].shadow = canShadow(actualObject) ? actualObject.shadow : null;\n }\n if (node.offsetX !== undefined) {\n actualObject.wrapper.offsetX = node.offsetX;\n update = true;\n updateConnector = true;\n }\n if (node.offsetY !== undefined) {\n actualObject.wrapper.offsetY = node.offsetY;\n update = true;\n updateConnector = true;\n }\n if (node.pivot !== undefined) {\n actualObject.wrapper.pivot = node.pivot;\n update = true;\n }\n if (node.minWidth !== undefined) {\n actualObject.wrapper.minWidth = node.minWidth;\n update = true;\n updateConnector = true;\n }\n if (node.minHeight !== undefined) {\n actualObject.wrapper.minHeight = node.minHeight;\n update = true;\n updateConnector = true;\n }\n if (node.maxWidth !== undefined) {\n actualObject.wrapper.maxWidth = node.maxWidth;\n update = true;\n updateConnector = true;\n }\n if (node.maxHeight !== undefined) {\n actualObject.wrapper.maxHeight = node.maxHeight;\n update = true;\n updateConnector = true;\n }\n if (node.rotateAngle !== undefined) {\n actualObject.wrapper.rotateAngle = node.rotateAngle;\n update = true;\n updateConnector = true;\n }\n if (node.backgroundColor !== undefined) {\n actualObject.wrapper.style.fill = node.backgroundColor;\n }\n if (node.visible !== undefined) {\n this.updateElementVisibility(actualObject.wrapper, actualObject, actualObject.visible);\n }\n if (node.shape !== undefined && actualObject.shape.type !== 'Bpmn') {\n update = true;\n updateShape(node, actualObject, oldObject, this);\n updateConnector = true;\n }\n if (node.margin) {\n update = true;\n this.updateMargin(actualObject, node);\n updateConnector = true;\n }\n if (((node.shape !== undefined && node.shape.type === undefined) || node.width !== undefined\n || node.height !== undefined || node.style !== undefined) && actualObject.shape.type === 'Bpmn' && this.bpmnModule) {\n update = true;\n updateConnector = true;\n this.bpmnModule.updateBPMN(node, oldObject, actualObject, this);\n }\n if (node.ports !== undefined) {\n for (var _i = 0, _a = Object.keys(node.ports); _i < _a.length; _i++) {\n var key = _a[_i];\n var index = Number(key);\n update = true;\n var changedObject = node.ports[key];\n var actualPort = actualObject.ports[index];\n this.updatePort(changedObject, actualPort, actualObject.wrapper);\n }\n }\n if (node.annotations !== undefined || node.width !== undefined) {\n for (var _b = 0, _c = Object.keys(node.annotations || actualObject.annotations); _b < _c.length; _b++) {\n var key = _c[_b];\n var index = Number(key);\n update = true;\n var changedObject = node.annotations ? node.annotations[key] : actualObject.annotations;\n var actualAnnotation = actualObject.annotations[index];\n if (actualAnnotation) {\n var updateSize = actualObject.width ? true : false;\n this.updateAnnotation(changedObject, actualAnnotation, actualObject.wrapper, actualObject, updateSize);\n }\n }\n }\n if (node.expandIcon !== undefined || node.collapseIcon !== undefined || node.isExpanded !== undefined) {\n this.updateIcon(actualObject);\n this.updateDefaultLayoutIcons(actualObject);\n if (node.isExpanded !== undefined) {\n this.commandHandler.expandNode(actualObject, true, this);\n }\n update = true;\n }\n if (node.tooltip !== undefined) {\n this.updateTooltip(actualObject, node);\n }\n if (update) {\n if (!(this.diagramActions & DiagramAction.ToolAction)) {\n if (this.checkSelectedItem(actualObject)) {\n this.updateSelector();\n }\n }\n if (this.bpmnModule !== undefined) {\n this.bpmnModule.updateTextAnnotationProp(actualObject, { offsetX: (oldObject.offsetX || actualObject.offsetX), offsetY: (oldObject.offsetY || actualObject.offsetY) }, this);\n }\n actualObject.wrapper.measure(new Size(actualObject.wrapper.bounds.width, actualObject.wrapper.bounds.height));\n actualObject.wrapper.arrange(actualObject.wrapper.desiredSize);\n this.updateObject(actualObject, oldObject, node);\n if (!isLayout) {\n this.connectorSegmentChange(actualObject, existingInnerBounds);\n if (updateConnector) {\n this.updateConnectorEdges(actualObject);\n }\n }\n else {\n if (actualObject && actualObject.visible && actualObject.outEdges) {\n this.updateIconVisibility(actualObject, (actualObject.outEdges.length === 0 ? false : true));\n }\n }\n if (this.bpmnModule !== undefined) {\n this.bpmnModule.updateDocks(actualObject, this);\n }\n this.updateGroupOffset(actualObject);\n if (existingBounds.equals(existingBounds, actualObject.wrapper.outerBounds) === false) {\n this.updateQuad(actualObject);\n }\n if (existingInnerBounds.equals(existingInnerBounds, actualObject.wrapper.bounds) === false) {\n this.updateGroupSize(actualObject);\n if (actualObject.children) {\n this.updateGroupOffset(actualObject);\n }\n }\n if (this.mode === 'SVG') {\n this.updateDiagramObject(actualObject);\n }\n }\n };\n Diagram.prototype.updateConnectorEdges = function (actualObject) {\n if (actualObject.inEdges.length > 0) {\n for (var j = 0; j < actualObject.inEdges.length; j++) {\n var connector = this.nameTable[actualObject.inEdges[j]];\n var conn = {\n sourcePoint: connector.sourcePoint, targetPoint: connector.targetPoint, sourceID: connector.sourceID,\n targetID: connector.targetID, sourcePortID: connector.sourcePortID, targetPortID: connector.targetPortID\n };\n this.connectorPropertyChange(connector, {}, conn);\n }\n }\n if (actualObject.outEdges.length > 0) {\n for (var k = 0; k < actualObject.outEdges.length; k++) {\n var connection = this.nameTable[actualObject.outEdges[k]];\n var conn = {\n sourcePoint: connection.sourcePoint, targetPoint: connection.targetPoint, sourceID: connection.sourceID,\n targetID: connection.targetID, sourcePortID: connection.sourcePortID, targetPortID: connection.targetPortID\n };\n this.connectorPropertyChange(connection, {}, conn);\n }\n }\n if (actualObject.parentId) {\n this.updateConnectorEdges(this.nameTable[actualObject.parentId]);\n }\n };\n /* tslint:enable */\n Diagram.prototype.connectorProprtyChangeExtend = function (actualObject, oldProp, newProp, updateSelector) {\n if (newProp.type !== undefined && newProp.type !== oldProp.type) {\n if (actualObject.segments.length > 0 && newProp.segments === undefined) {\n actualObject.segments = [];\n }\n }\n if ((newProp.shape !== undefined) && actualObject.shape !== undefined &&\n actualObject.shape && actualObject.shape.type === 'Bpmn' && this.bpmnModule) {\n this.bpmnModule.updateBPMNConnector(actualObject, oldProp, newProp, this);\n }\n if (actualObject.constraints !== undefined) {\n this.updateThumbConstraints(this.selectedItems.connectors, this.selectedItems);\n return updateSelector = true;\n }\n return updateSelector;\n };\n /** @private */\n Diagram.prototype.connectorPropertyChange = function (actualObject, oldProp, newProp, disableBridging) {\n var existingBounds = actualObject.wrapper.bounds;\n var updateSelector = false;\n var points = [];\n updateSelector = this.connectorProprtyChangeExtend(actualObject, oldProp, newProp, updateSelector);\n if (newProp.visible !== undefined) {\n this.updateElementVisibility(actualObject.wrapper, newProp, actualObject.visible);\n }\n if (newProp.sourcePoint !== undefined || newProp.targetPoint !== undefined\n || newProp.sourceID !== undefined || newProp.targetID !== undefined ||\n newProp.sourcePortID !== undefined || newProp.targetPortID !== undefined ||\n newProp.type !== undefined || newProp.segments !== undefined) {\n if ((newProp.sourceID !== undefined && newProp.sourceID !== oldProp.sourceID) || newProp.sourcePortID) {\n var sourceNode = this.nameTable[actualObject.sourceID];\n if (!sourceNode || canOutConnect(sourceNode)) {\n actualObject.sourceWrapper = sourceNode ? this.getEndNodeWrapper(sourceNode, actualObject, true) : undefined;\n }\n if (newProp.sourceID !== undefined && oldProp.sourceID !== undefined && oldProp.sourceID !== '') {\n var oldSource = this.nameTable[oldProp.sourceID];\n if (oldSource !== undefined && oldSource.outEdges && oldSource.outEdges.indexOf(actualObject.id) !== -1) {\n removeItem(oldSource.outEdges, actualObject.id);\n }\n }\n this.updateEdges(actualObject);\n }\n if (newProp.targetID !== undefined && newProp.targetID !== oldProp.targetID) {\n var targetNode = this.nameTable[newProp.targetID];\n if (!targetNode || canInConnect(targetNode)) {\n actualObject.targetWrapper = targetNode ? this.getEndNodeWrapper(targetNode, actualObject, false) : undefined;\n }\n if (oldProp !== undefined && oldProp.targetID !== undefined && oldProp.targetID !== '') {\n var oldTarget = this.nameTable[oldProp.targetID];\n if (oldTarget !== undefined && oldTarget.inEdges && oldTarget.inEdges.indexOf(actualObject.id) !== -1) {\n removeItem(oldTarget.inEdges, actualObject.id);\n }\n }\n this.updateEdges(actualObject);\n }\n if (newProp.sourcePortID !== undefined && newProp.sourcePortID !== oldProp.sourcePortID) {\n var source = void 0;\n if (actualObject.sourceID && this.nameTable[actualObject.sourceID]) {\n source = this.nameTable[actualObject.sourceID].wrapper;\n }\n actualObject.sourcePortWrapper = source ?\n this.getWrapper(source, newProp.sourcePortID) : undefined;\n }\n if (newProp.targetPortID !== undefined && newProp.targetPortID !== oldProp.targetPortID) {\n var target = void 0;\n if (actualObject.targetID && this.nameTable[actualObject.targetID]) {\n target = this.nameTable[actualObject.targetID].wrapper;\n }\n actualObject.targetPortWrapper = target ?\n this.getWrapper(target, newProp.targetPortID) : undefined;\n }\n points = this.getPoints(actualObject);\n }\n //Add prop change for zindex, alignments and margin\n if (newProp.style !== undefined) {\n updateStyle(newProp.style, actualObject.wrapper.children[0]);\n }\n if (points.length > 0 || newProp.sourceDecorator !== undefined || newProp.targetDecorator !== undefined ||\n newProp.cornerRadius !== undefined) {\n updateConnector(actualObject, points.length > 0 ? points : actualObject.intermediatePoints);\n if (newProp.type !== undefined) {\n updateSelector = true;\n }\n if (points.length > 0) {\n actualObject.wrapper.measure(new Size(actualObject.wrapper.width, actualObject.wrapper.height));\n actualObject.wrapper.arrange(actualObject.wrapper.desiredSize);\n if (actualObject.annotations.length) {\n for (var _i = 0, _a = actualObject.annotations; _i < _a.length; _i++) {\n var annotation = _a[_i];\n var annotationWrapper = void 0;\n annotationWrapper = this.getWrapper(actualObject.wrapper, annotation.id);\n actualObject.updateAnnotation(annotation, actualObject.intermediatePoints, actualObject.wrapper.bounds, annotationWrapper);\n }\n }\n actualObject.wrapper.measure(new Size(actualObject.wrapper.width, actualObject.wrapper.height));\n actualObject.wrapper.arrange(actualObject.wrapper.desiredSize);\n this.updateObject(actualObject, oldProp, newProp);\n } //work-around to update intersected connector bridging\n }\n if ((newProp.sourcePoint || newProp.targetPoint || newProp.segments)\n && this.diagramActions === DiagramAction.Render) {\n updateSelector = true;\n }\n if (!disableBridging) {\n this.updateBridging();\n }\n this.updateAnnotations(newProp, actualObject);\n actualObject.wrapper.measure(new Size(actualObject.wrapper.width, actualObject.wrapper.height));\n actualObject.wrapper.arrange(actualObject.wrapper.desiredSize);\n if (existingBounds.equals(existingBounds, actualObject.wrapper.bounds) === false) {\n this.updateQuad(actualObject);\n this.updateGroupSize(actualObject);\n }\n if (updateSelector === true && this.checkSelectedItem(actualObject)) {\n this.updateSelector();\n }\n if (this.mode === 'SVG') {\n this.updateDiagramObject(actualObject);\n }\n };\n Diagram.prototype.getPoints = function (actualObject, points) {\n var pts;\n pts = actualObject.getConnectorPoints(actualObject.type, points, this.layout.type === 'ComplexHierarchicalTree' || this.layout.type === 'HierarchicalTree' ?\n this.layout.orientation : undefined);\n return pts;\n };\n /**\n * update the opacity and visibility for the node once the layout animation starts\n */\n /** @private */\n Diagram.prototype.updateNodeProperty = function (element, visible, opacity) {\n if (visible === undefined) {\n this.updateElementVisibility(element, this.nameTable[element.id], visible);\n }\n else {\n element.style.opacity = opacity;\n for (var i = 0; i < element.children.length; i++) {\n if (element.children[i] instanceof Container) {\n this.updateNodeProperty(element.children[i], undefined, opacity);\n }\n element.children[i].style.opacity = opacity;\n }\n }\n };\n /**\n * checkSelected Item for Connector\n * @private\n */\n Diagram.prototype.checkSelectedItem = function (actualObject) {\n var selectorModel = this.selectedItems;\n var isSelected = false;\n var selItems = [];\n selItems = selItems.concat(selectorModel.nodes, selectorModel.connectors);\n if (selItems.length > 0) {\n if (actualObject.id === selItems[selItems.length - 1].id) {\n isSelected = true;\n }\n }\n return isSelected;\n };\n /**\n * Updates the visibility of the diagram container\n * @private\n */\n Diagram.prototype.updateDiagramContainerVisibility = function (element, visible) {\n if (element instanceof Container) {\n for (var i = 0; i < element.children.length; i++) {\n this.updateDiagramContainerVisibility(element.children[i], visible);\n }\n }\n element.visible = visible;\n };\n /**\n * Updates the visibility of the node/connector\n * @private\n */\n Diagram.prototype.updateElementVisibility = function (element, obj, visible) {\n if (visible !== undefined) {\n element.visible = visible;\n if (obj instanceof Node) {\n //content\n if (!obj.children) {\n element.children[0].visible = visible;\n this.updateDiagramContainerVisibility(element.children[0], visible);\n if (obj.shape.type === 'Bpmn' && this.bpmnModule) {\n this.bpmnModule.updateElementVisibility(obj, visible, this);\n }\n }\n else {\n for (var _i = 0, _a = obj.children; _i < _a.length; _i++) {\n var child = _a[_i];\n this.updateElementVisibility(this.nameTable[child].wrapper, this.nameTable[child], visible);\n }\n }\n //ports\n if (obj.ports) {\n for (var _b = 0, _c = obj.ports; _b < _c.length; _b++) {\n var port = _c[_b];\n if (port.visibility & PortVisibility.Visible) {\n var wrapper = this.getWrapper(element, port.id);\n wrapper.visible = visible;\n }\n }\n }\n if (obj.annotations) {\n for (var _d = 0, _e = obj.annotations; _d < _e.length; _d++) {\n var annotation = _e[_d];\n var wrapper = this.getWrapper(element, annotation.id);\n wrapper.visible = visible;\n }\n }\n }\n else {\n //path and decorators\n for (var i = 0; i < 3; i++) {\n element.children[i].visible = visible;\n }\n }\n if (obj.annotations) {\n //annotations\n for (var _f = 0, _g = obj.annotations; _f < _g.length; _f++) {\n var annotation = _g[_f];\n var wrapper = this.getWrapper(element, annotation.id);\n wrapper.visible = visible;\n }\n }\n if (obj.expandIcon || obj.collapseIcon) {\n var wrapper = this.getWrapper(element, 'icon_content');\n if (wrapper) {\n for (var i = 0; i < wrapper.children.length; i++) {\n wrapper.children[i].visible = visible;\n }\n wrapper.visible = visible;\n }\n }\n if (visible === false) {\n this.unSelect(this.nameTable[element.id]);\n }\n this.updateDiagramObject(this.nameTable[element.id]);\n }\n };\n Diagram.prototype.updateAnnotations = function (newProp, actualObject) {\n if (newProp.annotations !== undefined) {\n for (var _i = 0, _a = Object.keys(newProp.annotations); _i < _a.length; _i++) {\n var key = _a[_i];\n var index = Number(key);\n var changedObject = newProp.annotations[key];\n var actualAnnotation = actualObject.annotations[index];\n this.updateAnnotation(changedObject, actualAnnotation, actualObject.wrapper, actualObject);\n }\n }\n };\n /** @private */\n Diagram.prototype.updateAnnotation = function (changedObject, actualAnnotation, nodes, actualObject, canUpdateSize) {\n var annotationWrapper;\n var isMeasure = false;\n annotationWrapper = this.getWrapper(nodes, actualAnnotation.id);\n if (annotationWrapper !== undefined) {\n if (changedObject.width !== undefined && changedObject.height !== undefined) {\n annotationWrapper.width = changedObject.width;\n annotationWrapper.height = changedObject.height;\n isMeasure = true;\n }\n if (canUpdateSize) {\n annotationWrapper.refreshTextElement();\n }\n if (actualAnnotation instanceof ShapeAnnotation &&\n changedObject.offset !== undefined) {\n var offset = changedObject.offset;\n isMeasure = true;\n var offsetX = offset.x !== undefined ? offset.x :\n actualAnnotation.offset.x;\n var offsetY = offset.y !== undefined ? offset.y :\n actualAnnotation.offset.y;\n annotationWrapper.setOffsetWithRespectToBounds(offsetX, offsetY, 'Fraction');\n annotationWrapper.relativeMode = 'Point';\n }\n else if (actualAnnotation instanceof PathAnnotation &&\n changedObject.offset !== undefined) {\n actualObject.updateAnnotation(actualAnnotation, actualObject.intermediatePoints, actualObject.wrapper.bounds, annotationWrapper);\n }\n if ((actualAnnotation instanceof PathAnnotation) && changedObject.displacement) {\n if (changedObject.displacement.x !== undefined ||\n changedObject.displacement.y !== undefined) {\n isMeasure = true;\n }\n }\n if (changedObject.margin !== undefined) {\n isMeasure = true;\n if (changedObject.margin.bottom !== undefined) {\n annotationWrapper.margin.bottom = changedObject.margin.bottom;\n }\n if (changedObject.margin.top !== undefined) {\n annotationWrapper.margin.top = changedObject.margin.top;\n }\n if (changedObject.margin.left !== undefined) {\n annotationWrapper.margin.left = changedObject.margin.left;\n }\n if (changedObject.margin.right !== undefined) {\n annotationWrapper.margin.right = changedObject.margin.right;\n }\n }\n if (isMeasure || canUpdateSize) {\n annotationWrapper.width = (actualAnnotation.width || actualObject.width)\n - annotationWrapper.margin.left - annotationWrapper.margin.right;\n }\n if (changedObject.horizontalAlignment !== undefined) {\n annotationWrapper.horizontalAlignment = changedObject.horizontalAlignment;\n isMeasure = true;\n }\n if (changedObject.verticalAlignment !== undefined) {\n annotationWrapper.verticalAlignment = changedObject.verticalAlignment;\n isMeasure = true;\n }\n if (changedObject.visibility !== undefined) {\n annotationWrapper.visible = (nodes.visible && changedObject.visibility) ? true : false;\n }\n if (changedObject.constraints !== undefined) {\n annotationWrapper.constraints = changedObject.constraints;\n }\n if (changedObject.style !== undefined) {\n updateStyle(changedObject.style, annotationWrapper);\n }\n if (changedObject.hyperlink !== undefined) {\n updateHyperlink(changedObject.hyperlink, annotationWrapper, actualAnnotation);\n }\n if (changedObject.content !== undefined) {\n if (annotationWrapper) {\n isMeasure = true;\n annotationWrapper.content = changedObject.content;\n }\n }\n if (isMeasure === true) {\n annotationWrapper.measure(new Size(annotationWrapper.width, annotationWrapper.height));\n annotationWrapper.arrange(annotationWrapper.desiredSize);\n }\n annotationWrapper.refreshTextElement();\n // this.refresh(); this.refreshDiagramLayer();\n }\n };\n /** @private */\n Diagram.prototype.updatePort = function (changedObject, actualPort, nodes) {\n var portWrapper;\n var isMeasure = false;\n portWrapper = this.getWrapper(nodes, actualPort.id);\n if (portWrapper !== undefined) {\n if (changedObject.offset !== undefined) {\n isMeasure = true;\n var offsetX = changedObject.offset.x !== undefined ? changedObject.offset.x :\n actualPort.offset.x;\n var offsetY = changedObject.offset.y !== undefined ? changedObject.offset.y :\n actualPort.offset.y;\n portWrapper.setOffsetWithRespectToBounds(offsetX, offsetY, 'Fraction');\n portWrapper.relativeMode = 'Point';\n }\n if (changedObject.width !== undefined) {\n isMeasure = true;\n portWrapper.width = changedObject.width;\n }\n if (changedObject.height !== undefined) {\n isMeasure = true;\n portWrapper.height = changedObject.height;\n }\n if (changedObject.visibility !== undefined) {\n portWrapper.visible = (nodes.visible && checkPortRestriction(actualPort, PortVisibility.Visible)) ? true : false;\n }\n if (changedObject.margin !== undefined) {\n isMeasure = true;\n if (changedObject.margin.bottom !== undefined) {\n portWrapper.margin.bottom = changedObject.margin.bottom;\n }\n if (changedObject.margin.top !== undefined) {\n portWrapper.margin.top = changedObject.margin.top;\n }\n if (changedObject.margin.right !== undefined) {\n portWrapper.margin.right = changedObject.margin.right;\n }\n if (changedObject.margin.right !== undefined) {\n portWrapper.margin.left = changedObject.margin.left;\n }\n }\n if (changedObject.horizontalAlignment !== undefined) {\n isMeasure = true;\n portWrapper.horizontalAlignment = changedObject.horizontalAlignment;\n }\n if (changedObject.verticalAlignment !== undefined) {\n isMeasure = true;\n portWrapper.verticalAlignment = changedObject.verticalAlignment;\n }\n if (changedObject.style !== undefined) {\n if (changedObject.style.fill !== undefined) {\n portWrapper.style.fill = changedObject.style.fill;\n }\n if (changedObject.style.opacity !== undefined) {\n portWrapper.style.opacity = changedObject.style.opacity;\n }\n if (changedObject.style.strokeColor !== undefined) {\n portWrapper.style.strokeColor = changedObject.style.strokeColor;\n }\n if (changedObject.style.strokeWidth !== undefined) {\n portWrapper.style.strokeWidth = changedObject.style.strokeWidth;\n }\n if (changedObject.style.strokeDashArray !== undefined) {\n portWrapper.style.strokeDashArray = changedObject.style.strokeDashArray;\n }\n }\n if (changedObject.shape !== undefined) {\n if (portWrapper) {\n if (changedObject.shape === 'Custom' && changedObject.pathData) {\n portWrapper.data = String(changedObject.pathData);\n isMeasure = true;\n }\n else {\n var pathdata = getPortShape(changedObject.shape);\n portWrapper.data = pathdata;\n }\n }\n }\n if (isMeasure === true) {\n portWrapper.measure(new Size(portWrapper.width, portWrapper.height));\n portWrapper.arrange(portWrapper.desiredSize);\n }\n //this.refresh(); this.refreshDiagramLayer();\n }\n };\n /** @private */\n Diagram.prototype.updateIcon = function (actualObject) {\n var iconContainer = this.getWrapper(actualObject.wrapper, 'icon_content');\n if (iconContainer) {\n if (this.mode === 'SVG') {\n var icon = getDiagramElement(actualObject.wrapper.id + '_icon_content');\n if (icon) {\n var iconRect = getDiagramElement(icon.id + '_rect');\n var iconShape = getDiagramElement(icon.id + '_shape');\n var nativeContent = getDiagramElement(iconShape.id + '_native_element');\n if (nativeContent) {\n nativeContent.parentNode.removeChild(nativeContent);\n }\n iconShape.parentNode.removeChild(iconShape);\n iconRect.parentNode.removeChild(iconRect);\n icon.parentNode.removeChild(icon);\n }\n }\n var index = actualObject.wrapper.children.indexOf(iconContainer);\n actualObject.wrapper.children.splice(index, 1);\n }\n var portContainer = this.getPortContainer(actualObject);\n actualObject.initIcons(this.getDescription, this.layout, portContainer);\n };\n Diagram.prototype.getPortContainer = function (actualObject) {\n if (actualObject.children) {\n for (var i = 0; i < actualObject.wrapper.children.length; i++) {\n if (actualObject.wrapper.children[i].id === 'group_container') {\n return actualObject.wrapper.children[i];\n }\n }\n }\n return actualObject.wrapper;\n };\n Diagram.prototype.updateTooltip = function (actualObject, node) {\n if (node.tooltip.content !== undefined) {\n actualObject.tooltip.content = node.tooltip.content;\n }\n if (node.tooltip.position !== undefined) {\n actualObject.tooltip.position = node.tooltip.position;\n }\n if (node.tooltip.height !== undefined) {\n actualObject.tooltip.height = node.tooltip.height;\n }\n if (node.tooltip.width !== undefined) {\n actualObject.tooltip.width = node.tooltip.width;\n }\n if (node.tooltip.showTipPointer !== undefined) {\n actualObject.tooltip.showTipPointer = node.tooltip.showTipPointer;\n }\n };\n /** @private */\n Diagram.prototype.updateQuad = function (obj) {\n var modified = this.spatialSearch.updateQuad(obj.wrapper);\n if (modified && !this.preventUpdate) {\n this.updatePage();\n }\n };\n /** @private */\n Diagram.prototype.removeFromAQuad = function (obj) {\n this.spatialSearch.removeFromAQuad(obj.wrapper);\n var modified = this.spatialSearch.updateBounds(obj.wrapper);\n if (modified && !this.preventUpdate) {\n this.updatePage();\n }\n };\n /** @private */\n Diagram.prototype.updateGroupSize = function (node) {\n var tempNode;\n if (node.parentId) {\n tempNode = this.nameTable[node.parentId];\n if (tempNode.parentId) {\n this.updateGroupSize(tempNode);\n }\n else {\n tempNode.wrapper.measure(new Size());\n tempNode.wrapper.arrange(tempNode.wrapper.desiredSize);\n this.updateGroupOffset(tempNode);\n this.updateDiagramObject(tempNode);\n }\n }\n };\n Diagram.prototype.updatePage = function () {\n if (this.diagramActions & DiagramAction.Render) {\n this.scroller.setSize();\n this.scroller.updateScrollOffsets();\n //updating overview\n for (var _i = 0, _a = this.views; _i < _a.length; _i++) {\n var temp = _a[_i];\n var view = this.views[temp];\n if (!(view instanceof Diagram)) {\n view.updateView(view);\n }\n }\n }\n };\n /** @private */\n Diagram.prototype.protectPropertyChange = function (enable) {\n this.isProtectedOnChange = enable;\n };\n /** @private */\n Diagram.prototype.updateMargin = function (node, changes) {\n if (changes.margin.top !== undefined) {\n node.margin.top = changes.margin.top;\n }\n if (changes.margin.bottom !== undefined) {\n node.margin.bottom = changes.margin.bottom;\n }\n if (changes.margin.left !== undefined) {\n node.margin.left = changes.margin.left;\n }\n if (changes.margin.right !== undefined) {\n node.margin.right = changes.margin.right;\n }\n };\n //property changes - end region\n /* tslint:disable */\n Diagram.prototype.initDroppables = function () {\n var _this = this;\n // initiates droppable event\n this.droppable = new Droppable(this.element);\n this.droppable.accept = '.e-dragclone';\n // tslint:disable-next-line:no-any\n this.droppable.over = function (args) {\n if (!_this.currentSymbol) {\n if (args.dragData) {\n var newObj = void 0;\n var position = _this.eventHandler.getMousePosition(args.event);\n var clonedObject = void 0;\n var selectedSymbol = args.dragData.helper;\n var paletteId = selectedSymbol.getAttribute('paletteId');\n if (paletteId) {\n var sourceElement = document.getElementById(paletteId).ej2_instances[0];\n var source = 'sourceElement';\n _this.droppable[source] = sourceElement;\n var selectedSymbols = 'selectedSymbols';\n if (sourceElement) {\n var obj = sourceElement[selectedSymbols];\n clonedObject = cloneObject(sourceElement[selectedSymbols]);\n var wrapper = obj.wrapper.children[0].children[0];\n if (sourceElement[selectedSymbols] instanceof Node) {\n clonedObject.offsetX = position.x + 5 + (clonedObject.width || wrapper.actualSize.width) / 2;\n clonedObject.offsetY = position.y + (clonedObject.height || wrapper.actualSize.height) / 2;\n var newNode = new Node(_this, 'nodes', clonedObject, true);\n if (newNode.shape.type === 'Bpmn' && newNode.shape.activity.subProcess.processes\n && newNode.shape.activity.subProcess.processes.length) {\n newNode.shape.activity.subProcess.processes = [];\n }\n newObj = newNode;\n }\n else if (sourceElement[selectedSymbols] instanceof Connector) {\n newObj = new Connector(_this, 'connectors', clonedObject, true);\n var bounds = Rect.toBounds([newObj.sourcePoint, newObj.targetPoint]);\n var tx = position.x - bounds.center.x;\n var ty = position.y - bounds.center.y;\n newObj.sourcePoint.x += tx;\n newObj.sourcePoint.y += ty;\n newObj.targetPoint.x += tx;\n newObj.targetPoint.y += ty;\n }\n newObj.id += randomId();\n var arg = {\n source: sourceElement, element: newObj, cancel: false,\n diagram: _this\n };\n _this.triggerEvent(DiagramEvent.dragEnter, arg);\n if (!_this.activeLayer.lock && !arg.cancel) {\n _this.preventUpdate = true;\n _this.initObject(newObj);\n _this.currentSymbol = newObj;\n if (_this.mode !== 'SVG') {\n _this.refreshDiagramLayer();\n }\n _this.commandHandler.select(newObj);\n _this.eventHandler.mouseDown(args.event);\n _this.eventHandler.mouseMove(args.event, args);\n _this.preventUpdate = false;\n _this.updatePage();\n selectedSymbol.style.opacity = '0';\n }\n }\n _this.droppable[selectedSymbols] = selectedSymbol;\n }\n }\n }\n else {\n if (args.event.touches && args.event.touches.length) {\n _this.eventHandler.mouseMove(args.event, args.event.touches);\n }\n }\n };\n // tslint:disable-next-line:no-any\n this.droppable.drop = function (args) {\n if (_this.currentSymbol) {\n if (args.event.touches) {\n _this.eventHandler.mouseUp(args.event);\n }\n var newObj = void 0;\n var node = void 0;\n var conn = void 0;\n var source = 'sourceElement';\n var arg = {\n source: _this.droppable[source],\n element: _this.currentSymbol, target: _this, cancel: false,\n position: { x: _this.currentSymbol.wrapper.offsetX, y: _this.currentSymbol.wrapper.offsetY }\n };\n _this.triggerEvent(DiagramEvent.drop, arg);\n var clonedObject = void 0;\n var id = 'id';\n clonedObject = cloneObject(_this.currentSymbol);\n _this.removeFromAQuad(_this.currentSymbol);\n _this.removeObjectsFromLayer(_this.nameTable[_this.currentSymbol.id]);\n delete _this.nameTable[_this.currentSymbol.id];\n _this.currentSymbol = null;\n _this.protectPropertyChange(true);\n if (!arg.cancel) {\n _this.startGroupAction();\n _this.add(clonedObject);\n if (canSingleSelect(_this)) {\n _this.select([_this.nameTable[clonedObject[id]]]);\n }\n }\n _this.protectPropertyChange(false);\n newObj = _this.nameTable[clonedObject[id]];\n if (_this.bpmnModule && newObj instanceof Node && clonedObject.processId) {\n newObj.processId = clonedObject.processId;\n _this.bpmnModule.dropBPMNchild(_this.nameTable[newObj.processId], newObj, _this);\n }\n _this.endGroupAction();\n if (_this.mode !== 'SVG') {\n _this.refreshDiagramLayer();\n }\n delete _this.droppable[source];\n }\n var selectedSymbols = 'selectedSymbols';\n remove(_this.droppable[selectedSymbols]);\n };\n this.droppable.out = function (args) {\n if (_this.currentSymbol && !_this.eventHandler.focus) {\n _this.unSelect(_this.currentSymbol);\n _this.removeFromAQuad(_this.currentSymbol);\n if (_this.mode !== 'SVG' && _this.currentSymbol.shape.type === 'Native') {\n _this.removeElements(_this.currentSymbol);\n }\n _this.removeObjectsFromLayer(_this.nameTable[_this.currentSymbol.id]);\n delete _this.nameTable[_this.currentSymbol.id];\n _this.triggerEvent(DiagramEvent.dragLeave, { element: _this.currentSymbol, diagram: _this });\n if (_this.mode !== 'SVG') {\n _this.refreshDiagramLayer();\n }\n else {\n _this.removeElements(_this.currentSymbol);\n }\n _this.currentSymbol = null;\n var selectedSymbols = 'selectedSymbols';\n _this.droppable[selectedSymbols].style.opacity = '1';\n var source = 'sourceElement';\n delete _this.droppable[source];\n }\n };\n };\n __decorate([\n Property('100%')\n ], Diagram.prototype, \"width\", void 0);\n __decorate([\n Property('SVG')\n ], Diagram.prototype, \"mode\", void 0);\n __decorate([\n Property('100%')\n ], Diagram.prototype, \"height\", void 0);\n __decorate([\n Complex({}, ContextMenuSettings)\n ], Diagram.prototype, \"contextMenuSettings\", void 0);\n __decorate([\n Property(DiagramConstraints.Default)\n ], Diagram.prototype, \"constraints\", void 0);\n __decorate([\n Property(DiagramTools.Default)\n ], Diagram.prototype, \"tool\", void 0);\n __decorate([\n Property('Top')\n ], Diagram.prototype, \"bridgeDirection\", void 0);\n __decorate([\n Property('transparent')\n ], Diagram.prototype, \"backgroundColor\", void 0);\n __decorate([\n Complex({}, SnapSettings)\n ], Diagram.prototype, \"snapSettings\", void 0);\n __decorate([\n Complex({}, RulerSettings)\n ], Diagram.prototype, \"rulerSettings\", void 0);\n __decorate([\n Complex({}, PageSettings)\n ], Diagram.prototype, \"pageSettings\", void 0);\n __decorate([\n Collection([], Node)\n ], Diagram.prototype, \"nodes\", void 0);\n __decorate([\n Property()\n ], Diagram.prototype, \"drawingObject\", void 0);\n __decorate([\n Collection([], Connector)\n ], Diagram.prototype, \"connectors\", void 0);\n __decorate([\n Property([])\n ], Diagram.prototype, \"basicElements\", void 0);\n __decorate([\n Complex({}, DiagramTooltip)\n ], Diagram.prototype, \"tooltip\", void 0);\n __decorate([\n Complex({}, DataSource)\n ], Diagram.prototype, \"dataSourceSettings\", void 0);\n __decorate([\n Property()\n ], Diagram.prototype, \"addInfo\", void 0);\n __decorate([\n Property()\n ], Diagram.prototype, \"getNodeDefaults\", void 0);\n __decorate([\n Property()\n ], Diagram.prototype, \"getConnectorDefaults\", void 0);\n __decorate([\n Property()\n ], Diagram.prototype, \"setNodeTemplate\", void 0);\n __decorate([\n Property()\n ], Diagram.prototype, \"getDescription\", void 0);\n __decorate([\n Property()\n ], Diagram.prototype, \"getCustomProperty\", void 0);\n __decorate([\n Property()\n ], Diagram.prototype, \"getCustomTool\", void 0);\n __decorate([\n Property()\n ], Diagram.prototype, \"getCustomCursor\", void 0);\n __decorate([\n Complex({}, Selector)\n ], Diagram.prototype, \"selectedItems\", void 0);\n __decorate([\n Complex({}, ScrollSettings)\n ], Diagram.prototype, \"scrollSettings\", void 0);\n __decorate([\n Complex({}, Layout)\n ], Diagram.prototype, \"layout\", void 0);\n __decorate([\n Complex({}, CommandManager)\n ], Diagram.prototype, \"commandManager\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"dataLoaded\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"dragEnter\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"dragLeave\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"dragOver\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"click\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"historyChange\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"doubleClick\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"textEdit\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"scrollChange\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"selectionChange\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"sizeChange\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"connectionChange\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"sourcePointChange\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"targetPointChange\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"propertyChange\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"positionChange\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"animationComplete\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"rotateChange\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"collectionChange\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"contextMenuOpen\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"contextMenuClick\", void 0);\n __decorate([\n Collection([], Layer)\n ], Diagram.prototype, \"layers\", void 0);\n __decorate([\n Event()\n ], Diagram.prototype, \"drop\", void 0);\n return Diagram;\n}(Component));\nexport { Diagram };\n","import { Browser } from '@syncfusion/ej2-base';\nimport { CanvasRenderer } from './rendering/canvas-renderer';\nimport { DiagramRenderer } from './rendering/renderer';\nimport { Size } from './primitives/size';\nimport { setAttributeHtml, setAttributeSvg } from './utility/dom-util';\nimport { Rect } from './primitives/rect';\nimport { createSvgElement, getHTMLLayer } from './utility/dom-util';\nimport { getDiagramLayerSvg } from './utility/dom-util';\nimport { DiagramHtmlElement } from './core/elements/html-element';\nimport { DiagramNativeElement } from './core/elements/native-element';\n/**\n * Print and Export Settings\n */\nvar PrintAndExport = /** @class */ (function () {\n function PrintAndExport(diagram) {\n this.diagram = diagram;\n }\n /**\n * To Export the diagram\n * @private\n */\n PrintAndExport.prototype.exportDiagram = function (options) {\n var fileType;\n var customBounds;\n var content;\n var content1 = '';\n var data = 'data';\n var mode;\n var buffers = [];\n var margin = options.margin || {};\n var region = options && options.region ? options.region : 'Content';\n mode = options && options.mode ? options.mode : 'Download';\n var bounds = this.getDiagramBounds(region, options);\n if (options.bounds) {\n customBounds = true;\n bounds.x = options.bounds.x ? options.bounds.x : bounds.x;\n bounds.y = options.bounds.y ? options.bounds.y : bounds.y;\n bounds.width = options.bounds.width || bounds.width;\n bounds.height = options.bounds.height || bounds.height;\n }\n margin = {\n top: margin.top !== undefined ? margin.top : 25,\n bottom: margin.bottom !== undefined ? margin.bottom : 25,\n right: margin.right !== undefined ? margin.right : 25,\n left: margin.left !== undefined ? margin.left : 25\n };\n var nodes = this.diagram.nodes;\n if (region !== 'PageSettings') {\n bounds.x -= margin.left;\n bounds.y -= margin.top;\n bounds.width += margin.left + margin.right;\n bounds.height += margin.top + margin.bottom;\n }\n var fileName = options.fileName || 'diagram';\n if (options.format !== 'SVG') {\n data = this.setCanvas(options, bounds, margin, mode, customBounds, region, fileName);\n if (data !== null) {\n return data;\n }\n }\n else {\n fileType = options.format;\n options.bounds = bounds;\n options.margin = margin;\n var svg = content = this.diagramAsSvg(options, margin);\n if (mode === 'Data') {\n return content;\n }\n var buffer = new XMLSerializer().serializeToString(svg);\n buffers.push(buffer);\n }\n if (mode === 'Download' && data !== null) {\n var browserInfo = void 0;\n // Ensure this for Safari\n // if (Browser.info.name === 'msie' && Number(Browser.info.version) < 10 || Browser.info.name === 'webkit') {\n // let info: string = Browser.info.name === 'webkit' ? 'Safari' : 'IE-9';\n // alert('Downloading option is not supported in ' + info + ', Please use the returned data');\n // return content;\n // } else {\n for (var b = 0; b < buffers.length; b++) {\n var blob = new Blob([buffers[b]], { type: 'application/octet-stream' });\n if (Browser.info.name === 'msie') {\n window.navigator.msSaveOrOpenBlob(blob, fileName + '.' + fileType);\n }\n else {\n var pom = document.createElement('a');\n var url = URL.createObjectURL(blob);\n pom.href = url;\n pom.setAttribute('download', fileName + '.' + fileType);\n var e = document.createEvent('MouseEvents');\n e.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);\n pom.dispatchEvent(e);\n }\n }\n }\n return null;\n };\n PrintAndExport.prototype.setCanvas = function (options, bounds, margin, mode, customBounds, region, fileName) {\n var _this = this;\n var fileType;\n var content;\n options.bounds = bounds;\n options.region = region;\n var scaleX = 'scaleX';\n var scaleY = 'scaleY';\n var images = [];\n this.setScaleValueforCanvas(options, bounds);\n var canvas = this.diagramAsCanvas({\n bounds: bounds, margin: margin, region: region, scaleX: options[scaleX],\n scaleY: options[scaleY]\n }, customBounds);\n fileType = options.format || 'JPG';\n var image = content = canvas.toDataURL();\n if (mode === 'Data') {\n return content;\n }\n if (options.multiplePage) {\n options.pageHeight = options.pageHeight ? options.pageHeight : this.diagram.pageSettings.height;\n options.pageWidth = options.pageWidth ? options.pageWidth : this.diagram.pageSettings.width;\n options.pageHeight = options.pageHeight ? options.pageHeight : canvas.width;\n options.pageWidth = options.pageWidth ? options.pageWidth : canvas.height;\n margin = options.margin || {};\n if (options.pageOrientation) {\n if ((options.pageOrientation === 'Landscape' && options.pageHeight > options.pageWidth) ||\n options.pageOrientation === 'Portrait' && options.pageWidth > options.pageHeight) {\n var temp = options.pageWidth;\n options.pageWidth = options.pageHeight;\n options.pageHeight = temp;\n }\n }\n options.margin = {\n top: !isNaN(margin.top) ? margin.top : 0,\n bottom: !isNaN(margin.bottom) ? margin.bottom : 0,\n left: !isNaN(margin.left) ? margin.left : 0,\n right: !isNaN(margin.right) ? margin.right : 0\n };\n var img_1 = document.createElement('img');\n var attr = {\n 'id': this.diagram.element.id + '_printImage',\n 'src': image,\n };\n img_1.setAttribute('id', this.diagram.element.id + '_printImage');\n setAttributeHtml(img_1, attr);\n img_1.onload = function () {\n images = _this.getMultipleImage(img_1, options, true);\n _this.exportImage(images, fileName, fileType, image);\n };\n }\n else {\n images = [image];\n this.exportImage(images, fileName, fileType, image);\n }\n return null;\n };\n PrintAndExport.prototype.exportImage = function (images, fileName, fileType, image) {\n var buffers = [];\n var length = (!(images instanceof HTMLElement)) ? images.length : 0;\n for (var g = 0; g < length; g++) {\n image = images[g];\n image = image.replace(/^data:[a-z]*;,/, '');\n var image1 = image.split(',');\n var byteString = atob(image1[1]);\n var buffer = new ArrayBuffer(byteString.length);\n var intArray = new Uint8Array(buffer);\n for (var i = 0; i < byteString.length; i++) {\n intArray[i] = byteString.charCodeAt(i);\n }\n buffers.push(buffer);\n }\n var _loop_1 = function (j) {\n var b = new Blob([buffers[j]], { type: 'application/octet-stream' });\n if (Browser.info.name === 'msie') {\n window.navigator.msSaveOrOpenBlob(b, fileName + '.' + fileType);\n }\n else {\n var htmlElement_1 = document.createElement('a');\n var urlLink = URL.createObjectURL(b);\n htmlElement_1.href = urlLink;\n htmlElement_1.setAttribute('download', fileName + '.' + fileType);\n var mouseEvent_1 = document.createEvent('MouseEvents');\n mouseEvent_1.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);\n setTimeout(function () {\n htmlElement_1.dispatchEvent(mouseEvent_1);\n }, ((j + 1) * 5));\n }\n };\n // Ensure this for safari\n // if (Browser.info.name === 'msie' && Number(Browser.info.version) < 10 || Browser.info.name === 'webkit') {\n // let browserInfo: string = Browser.info.name === 'webkit' ? 'Safari' : 'IE-9';\n // alert('Downloading option is not supported in ' + browserInfo + ', Please use the returned data');\n // return content;\n // } else {\n for (var j = 0; j < buffers.length; j++) {\n _loop_1(j);\n }\n };\n PrintAndExport.prototype.getObjectsBound = function (options) {\n var nodes = this.diagram.nodes;\n var nodebounds;\n for (var _i = 0, nodes_1 = nodes; _i < nodes_1.length; _i++) {\n var node = nodes_1[_i];\n if (node.visible) {\n if (((options.format !== 'SVG' && !(node instanceof DiagramNativeElement) && !(node instanceof DiagramHtmlElement))\n || (options.format === 'SVG' && !(node instanceof DiagramHtmlElement)))) {\n if (!nodebounds) {\n nodebounds = node.wrapper.outerBounds;\n }\n else {\n nodebounds = nodebounds.uniteRect(node.wrapper.outerBounds);\n }\n }\n }\n }\n var connectors = this.diagram.connectors;\n for (var _a = 0, connectors_1 = connectors; _a < connectors_1.length; _a++) {\n var connector = connectors_1[_a];\n if (connector.visible) {\n if (!nodebounds) {\n nodebounds = connector.wrapper.outerBounds;\n }\n else {\n nodebounds = nodebounds.uniteRect(connector.wrapper.outerBounds);\n }\n }\n }\n return nodebounds || new Rect(0, 0, 0, 0);\n };\n PrintAndExport.prototype.getDiagramBounds = function (mode, options) {\n var rect = this.getObjectsBound(options);\n var left = rect.left;\n var top = rect.top;\n var right = rect.right - rect.left;\n var bottom = rect.bottom - rect.top;\n if (mode !== 'Content') {\n if (this.diagram.pageSettings && this.diagram.pageSettings.multiplePage) {\n left = rect.left;\n top = rect.top;\n if (this.diagram.pageSettings.width) {\n left = Math.floor(left / this.diagram.pageSettings.width) * this.diagram.pageSettings.width;\n right = Math.ceil(rect.right / this.diagram.pageSettings.width) * this.diagram.pageSettings.width - left;\n }\n if (this.diagram.pageSettings.height) {\n top = Math.floor(top / this.diagram.pageSettings.height) * this.diagram.pageSettings.height;\n bottom = Math.ceil(rect.bottom / this.diagram.pageSettings.height) * this.diagram.pageSettings.height - top;\n }\n if ((rect.width === 0) && this.diagram.pageSettings.width !== null) {\n right = this.diagram.pageSettings.width;\n }\n if ((rect.height === 0) && this.diagram.pageSettings.height !== null) {\n bottom = this.diagram.pageSettings.height;\n }\n }\n else {\n if (this.diagram.pageSettings.width) {\n left = 0;\n right = this.diagram.pageSettings.width;\n }\n if (this.diagram.pageSettings.height) {\n top = 0;\n bottom = this.diagram.pageSettings.height;\n }\n }\n }\n var svgBounds = new Rect();\n svgBounds.x = left;\n svgBounds.y = top;\n svgBounds.width = right;\n svgBounds.height = bottom;\n return svgBounds;\n };\n PrintAndExport.prototype.setScaleValueforCanvas = function (options, bounds) {\n var scaleX = 'scaleX';\n var scaleY = 'scaleY';\n options[scaleX] = 1;\n options[scaleY] = 1;\n options.pageHeight = options.pageHeight || this.diagram.pageSettings.height;\n options.pageWidth = options.pageWidth || this.diagram.pageSettings.width;\n var height = options.pageHeight || bounds.height;\n var width = options.pageWidth || bounds.width;\n if (options.stretch === 'Stretch' || options.stretch === 'Meet' || options.stretch === 'Slice') {\n options[scaleX] = width / bounds.width;\n options[scaleY] = height / bounds.height;\n if (options.stretch === 'Meet') {\n options[scaleX] = options[scaleY] = Math.min(options[scaleX], options[scaleY]);\n }\n else if (options.stretch === 'Slice') {\n options[scaleX] = options[scaleY] = Math.max(options[scaleX], options[scaleY]);\n }\n bounds.width = width;\n bounds.height = height;\n }\n bounds.x *= options[scaleX];\n bounds.y *= options[scaleY];\n };\n PrintAndExport.prototype.diagramAsSvg = function (options, margin) {\n var svg = this.diagram.createSvg(this.diagram.element.id + '_diagram_svg', options.bounds.width, options.bounds.height);\n document.body.appendChild(svg);\n var g = createSvgElement('g', { 'id': this.diagram.element.id + '_pageBackground' });\n var region = options && options.region ? options.region : 'Content';\n var bounds = this.getDiagramBounds(region, options);\n var left = bounds.x;\n var top = bounds.y;\n var width = bounds.width;\n var height = bounds.height;\n svg.appendChild(g);\n var attr = {\n 'transform': 'translate(' + (-options.bounds.x + margin.left) + ', ' + (-options.bounds.y + margin.top) + ')',\n 'x': String(left),\n 'y': String(top), 'width': String(width), 'height': String(height)\n };\n setAttributeSvg(g, attr);\n var backRect = document.getElementById(this.diagram.element.id + '_backgroundLayerrect').cloneNode(true);\n attr = {\n 'x': 0,\n 'y': 0, 'width': String(width + margin.left + margin.right), 'height': String(height + margin.top + margin.bottom)\n };\n setAttributeSvg(backRect, attr);\n svg.appendChild(backRect);\n if (this.diagram.mode === 'SVG') {\n var diagramLayerSVG = getDiagramLayerSvg(this.diagram.element.id);\n svg.appendChild(diagramLayerSVG.getElementById(this.diagram.diagramLayer.id).cloneNode(true));\n for (var i = 0; i < svg.childNodes.length; i++) {\n var element = svg.childNodes[i];\n if (element.id === 'diagram_diagramLayer') {\n element.setAttribute('transform', 'translate(' + (-bounds.x + margin.left) + ', ' +\n (-bounds.y + margin.top) + ')');\n }\n }\n }\n else {\n g = createSvgElement('g', { 'id': this.diagram.element.id + '_diagramLayer' });\n svg.appendChild(g);\n g.setAttribute('transform', 'translate(' + (-options.bounds.x + margin.left) + ', ' +\n (-options.bounds.y + margin.top) + ')');\n var nodes = this.diagram.nodes;\n //renderLabels\n var renderer = new DiagramRenderer('', null, true);\n var htmlLayer = getHTMLLayer(this.diagram.element.id);\n this.diagram.renderDiagramElements(svg, renderer, htmlLayer, false);\n }\n document.body.removeChild(svg);\n return svg;\n };\n PrintAndExport.prototype.diagramAsCanvas = function (options, customBounds) {\n var scaleX = 'scaleX';\n var scaleY = 'scaleY';\n var element;\n var elements = [];\n var region = options.bounds;\n var margin = options.margin;\n var mode = options && options.region ? options.region : 'Content';\n var pageBounds = this.getDiagramBounds(mode, options);\n var bgColor = this.diagram.pageSettings.background.color;\n var canvas = CanvasRenderer.createCanvas(this.diagram.element.id + '_diagram', options.bounds.width, options.bounds.height);\n //canvas.setAttribute('style', 'position:absolute;top:135px;left:160px;');\n var context = canvas.getContext('2d');\n context.translate(-region.x, -region.y);\n context.save();\n context.fillStyle = this.diagram.pageSettings.background.color;\n region = mode === 'Content' ? pageBounds : region;\n context.fillRect(region.x, region.y, region.width, region.height);\n var bgImg = this.diagram.pageSettings.background;\n if (bgImg && bgImg.source) {\n pageBounds = this.getDiagramBounds(mode, options);\n var image = new Image();\n image.src = bgImg.source;\n var proportionX = pageBounds.width / image.width;\n var proportionY = pageBounds.height / image.height;\n var x = pageBounds.x;\n var y = pageBounds.y;\n var width = pageBounds.width;\n var height = pageBounds.height;\n var exportable = this.isImageExportable(bgImg);\n if (bgImg.scale !== 'None' && bgImg.align !== 'None') {\n var proportion = bgImg.scale === 'Meet' ? Math.min(proportionX, proportionY) : Math.max(proportionX, proportionY);\n width = proportion * image.width;\n height = proportion * image.height;\n if (bgImg.align.indexOf('xmid') > -1) {\n x += (pageBounds.width - width) / 2;\n }\n else if (bgImg.align.indexOf('xmax') > -1) {\n x = x + pageBounds.width - width;\n }\n if (bgImg.align.indexOf('ymid') > -1) {\n y += (pageBounds.height - height) / 2;\n }\n else if (bgImg.align.indexOf('ymax') > -1) {\n y = y + pageBounds.height - height;\n }\n if (this.diagram.pageSettings.background.color === 'none' || this.diagram.pageSettings.background.color === 'transparent') {\n context.fillStyle = 'white';\n context.fillRect(pageBounds.x * options[scaleX], pageBounds.y * options[scaleY], pageBounds.width * options[scaleX], pageBounds.height * options[scaleY]);\n }\n if (exportable) {\n context.drawImage(image, x, y, proportion * image.width, proportion * image.height);\n }\n }\n else if (exportable) {\n context.drawImage(image, x, y, pageBounds.width, pageBounds.height);\n }\n }\n else {\n context.fillStyle = bgColor === 'transparent' ? 'white' : bgColor;\n context.fillRect((pageBounds.x * options[scaleX]) - margin.left, (pageBounds.y * options[scaleY]) - margin.top, (pageBounds.width * options[scaleX]) + margin.left + margin.right, (options[scaleY] * pageBounds.height) + margin.top + margin.bottom);\n }\n var brColor = this.diagram.pageSettings.background.color;\n var brWidth = this.diagram.pageSettings.width;\n if (brWidth) {\n context.strokeStyle = brColor === 'none' ? 'transparent' : brColor;\n context.lineWidth = brWidth;\n context.strokeRect(pageBounds.x * options[scaleX], pageBounds.y * options[scaleY], pageBounds.width * options[scaleX], pageBounds.height * options[scaleY]);\n }\n context.restore();\n var htmlLayer = getHTMLLayer(this.diagram.element.id);\n var renderer = new DiagramRenderer('', null, false);\n this.diagram.renderDiagramElements(canvas, renderer, htmlLayer, false);\n return canvas;\n };\n PrintAndExport.prototype.isImageExportable = function (backgroundImage) {\n var state = true;\n var content;\n var canvas;\n if (backgroundImage.source) {\n try {\n canvas = CanvasRenderer.createCanvas(this.diagram.element.id + 'temp_canvas', 100, 100);\n var ctx = canvas.getContext('2d');\n ctx.save();\n var image = new Image();\n image.src = backgroundImage.source;\n ctx.drawImage(image, 0, 0, 100, 100);\n ctx.restore();\n content = canvas.toDataURL();\n }\n catch (e) {\n state = false;\n }\n }\n return state;\n };\n PrintAndExport.prototype.getPrintCanvasStyle = function (img, options) {\n var width = 0;\n var height = 0;\n var size = new Size();\n width = img.width;\n height = img.height;\n if (options.pageHeight || options.pageWidth) {\n height = options.pageHeight ? options.pageHeight : height;\n width = options.pageWidth ? options.pageWidth : width;\n }\n if (options.pageOrientation) {\n if ((options.pageOrientation === 'Landscape' && height > width) || options.pageOrientation === 'Portrait' && width > height) {\n var temp = width;\n width = height;\n height = temp;\n }\n }\n size.height = height;\n size.width = width;\n return size;\n };\n PrintAndExport.prototype.getMultipleImage = function (img, options, isExport) {\n var imageArray = [];\n var div = document.createElement('div');\n var pageSize = this.getPrintCanvasStyle(img, options);\n var pageWidth;\n var pageHeight;\n var margin = options.margin;\n var mLeft = margin.left;\n var mTop = margin.top;\n var mRight = margin.right;\n var mBottom = margin.bottom;\n var x = 0;\n var y = 0;\n pageWidth = pageSize.width + x;\n pageHeight = pageSize.height + y;\n var drawnX = 0;\n var drawnY = 0;\n if (options && options.multiplePage && !(options.region === 'Content')) {\n div.style.height = 'auto';\n div.style.width = 'auto';\n var imgHeight = img.height;\n var imgWidth = img.width;\n //if (img) {\n var i = 0;\n var j = 0;\n var url = void 0;\n var clipWidth = 0;\n var clipHeight = 0;\n var ctx = void 0;\n var canvas = void 0;\n do {\n do {\n clipWidth = pageSize.width;\n clipHeight = pageSize.height;\n if ((drawnX + pageSize.width) >= imgWidth) {\n clipWidth = (imgWidth - drawnX);\n }\n if ((drawnY + pageSize.height) >= imgHeight) {\n clipHeight = (imgHeight - drawnY);\n }\n canvas = CanvasRenderer.createCanvas(this.diagram.element.id + '_multiplePrint', pageSize.width, pageSize.height);\n ctx = canvas.getContext('2d');\n ctx.drawImage(img, x + drawnX + mLeft, y + drawnY + mTop, clipWidth - mRight - mLeft, clipHeight - mBottom - mTop, 0 + mLeft, 0 + mTop, clipWidth - mRight - mLeft, clipHeight - mBottom - mTop);\n if ((drawnX + pageSize.width) >= imgWidth) {\n drawnX -= (drawnX - imgWidth);\n }\n url = canvas.toDataURL();\n ctx.restore();\n drawnX += pageWidth;\n if (isExport) {\n imageArray.push(url);\n }\n else {\n this.printImage(div, url, i + '' + j, pageWidth + 'px;', pageHeight + 'px;');\n }\n i++;\n } while (drawnX < imgWidth);\n j++;\n i = x = drawnX = 0;\n if ((drawnY + pageSize.height) >= imgHeight) {\n drawnY -= (drawnY - imgHeight);\n }\n drawnY += pageHeight;\n } while (drawnY < imgHeight);\n //}\n }\n else {\n var x_1 = 0;\n var y_1 = 0;\n var pageSize_1 = this.getPrintCanvasStyle(img, options);\n var pageWidth_1;\n var pageHeight_1;\n pageWidth_1 = pageSize_1.width;\n pageHeight_1 = pageSize_1.height;\n var ctx = void 0;\n var canvas = void 0;\n var url = void 0;\n canvas = CanvasRenderer.createCanvas(this.diagram.element.id + '_diagram', pageWidth_1, pageHeight_1);\n ctx = canvas.getContext('2d');\n ctx.drawImage(img, x_1 + mLeft, y_1 + mTop, img.width - (mRight + mLeft), img.height - (mTop + mBottom), 0 + mLeft, 0 + mTop, pageWidth_1 - (mRight + mLeft), pageHeight_1 - (mTop + mBottom));\n url = canvas.toDataURL();\n ctx.restore();\n this.printImage(div, url, 0);\n }\n if (isExport) {\n return imageArray;\n }\n else {\n return div;\n }\n };\n PrintAndExport.prototype.printImage = function (div, url, i, pageWidth, pageHeight) {\n var img = document.createElement('img');\n var attr;\n var innerDiv = document.createElement('div');\n attr = { 'class': 'e-diagram-print-page', 'style': 'width:' + pageWidth + 'height:' + pageHeight };\n setAttributeHtml(img, attr);\n setAttributeHtml(innerDiv, attr);\n attr = { 'id': this.diagram.element.id + '_multiplePrint_img' + i, 'style': 'float:left', 'src': url };\n setAttributeHtml(img, attr);\n innerDiv.appendChild(img);\n div.appendChild(innerDiv);\n };\n /**\n * To print the image\n * @private\n */\n PrintAndExport.prototype.print = function (options) {\n var _this = this;\n options.mode = 'Data';\n options.margin = { top: 0, bottom: 0, right: 0, left: 0 };\n var url = this.exportDiagram(options);\n var img = document.createElement('img');\n var attr = {\n 'id': this.diagram.element.id + '_printImage',\n 'src': url,\n };\n setAttributeHtml(img, attr);\n img.onload = function () {\n var div = _this.getMultipleImage(img, options);\n // specify window parameters\n var printWind = window.open('');\n if (printWind != null) {\n if ((div instanceof HTMLElement)) {\n printWind.document.write('');\n printWind.document.write('');\n printWind.document.write('
    ' + div.innerHTML + '
    ');\n printWind.document.close();\n }\n }\n };\n };\n /**\n * To destroy the Print and Export module\n * @return {void}\n * @private\n */\n PrintAndExport.prototype.destroy = function () {\n /**\n * Destroys the Print and Export module\n */\n };\n /**\n * Get module name.\n */\n PrintAndExport.prototype.getModuleName = function () {\n /**\n * Returns the module name\n */\n return 'PrintandExport';\n };\n return PrintAndExport;\n}());\nexport { PrintAndExport };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Container } from './container';\nimport { rotateSize } from '../../utility/base-util';\n/**\n * StackPanel module is used to arrange its children in a line\n */\nvar StackPanel = /** @class */ (function (_super) {\n __extends(StackPanel, _super);\n function StackPanel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\n * Gets/Sets the orientation of the stack panel\n */\n _this.orientation = 'Vertical';\n /**\n * Not applicable for canvas\n * @private\n */\n _this.measureChildren = undefined;\n return _this;\n }\n /**\n * Measures the minimum space that the panel needs\n * @param availableSize\n */\n StackPanel.prototype.measure = function (availableSize) {\n var updateSize = this.orientation === 'Horizontal' ? this.updateHorizontalStack : this.updateVerticalStack;\n this.desiredSize = this.measureStackPanel(availableSize, updateSize);\n return this.desiredSize;\n };\n /**\n * Arranges the child elements of the stack panel\n * @param desiredSize\n */\n StackPanel.prototype.arrange = function (desiredSize) {\n var updateSize = this.orientation === 'Horizontal' ? this.arrangeHorizontalStack : this.arrangeVerticalStack;\n this.actualSize = this.arrangeStackPanel(desiredSize, updateSize);\n this.updateBounds();\n return this.actualSize;\n };\n /**\n * Measures the minimum space that the panel needs\n * @param availableSize\n */\n StackPanel.prototype.measureStackPanel = function (availableSize, updateSize) {\n var desired = undefined;\n if (this.children !== undefined && this.children.length > 0) {\n for (var _i = 0, _a = this.children; _i < _a.length; _i++) {\n var child = _a[_i];\n child.parentTransform = this.rotateAngle + this.parentTransform;\n //Measure children\n child.measure(availableSize);\n var childSize = child.desiredSize.clone();\n //Consider Child's margin\n this.applyChildMargin(child, childSize);\n //Consider children's rotation\n if (child.rotateAngle !== 0) {\n childSize = rotateSize(childSize, child.rotateAngle);\n }\n //Measure stack panel\n if (desired === undefined) {\n desired = childSize;\n }\n else {\n updateSize(childSize, desired);\n }\n }\n }\n desired = _super.prototype.validateDesiredSize.call(this, desired, availableSize);\n this.stretchChildren(desired);\n //Considering padding values\n this.applyPadding(desired);\n return desired;\n };\n StackPanel.prototype.arrangeStackPanel = function (desiredSize, updatePosition) {\n if (this.children !== undefined && this.children.length > 0) {\n var x = void 0;\n var y = void 0;\n x = this.offsetX - desiredSize.width * this.pivot.x + this.padding.left;\n y = this.offsetY - desiredSize.height * this.pivot.y + this.padding.top;\n for (var _i = 0, _a = this.children; _i < _a.length; _i++) {\n var child = _a[_i];\n var childSize = child.desiredSize.clone();\n var rotatedSize = childSize;\n if (this.orientation === 'Vertical') {\n y += child.margin.top;\n }\n else {\n x += child.margin.left;\n }\n if (child.rotateAngle !== 0) {\n rotatedSize = rotateSize(childSize, child.rotateAngle);\n }\n var center = updatePosition(x, y, child, this, desiredSize, rotatedSize);\n _super.prototype.findChildOffsetFromCenter.call(this, child, center);\n child.arrange(childSize);\n if (this.orientation === 'Vertical') {\n y += rotatedSize.height + child.margin.bottom;\n }\n else {\n x += rotatedSize.width + child.margin.right;\n }\n }\n }\n return desiredSize;\n };\n StackPanel.prototype.updateHorizontalStack = function (child, parent) {\n parent.height = Math.max(child.height, parent.height);\n parent.width += child.width;\n };\n StackPanel.prototype.updateVerticalStack = function (child, parent) {\n parent.width = Math.max(child.width, parent.width);\n parent.height += child.height;\n };\n StackPanel.prototype.arrangeHorizontalStack = function (x, y, child, parent, parenBounds, childBounds) {\n var centerY = 0;\n if (child.verticalAlignment === 'Top') {\n centerY = y + child.margin.top + childBounds.height / 2;\n }\n else if (child.verticalAlignment === 'Bottom') {\n var parentBottom = parent.offsetY + parenBounds.height * (1 - parent.pivot.y);\n centerY = parentBottom - parent.padding.bottom - child.margin.bottom - childBounds.height / 2;\n }\n else {\n centerY = parent.offsetY - parenBounds.height * parent.pivot.y + parenBounds.height / 2;\n }\n return { x: x + childBounds.width / 2, y: centerY };\n };\n StackPanel.prototype.arrangeVerticalStack = function (x, y, child, parent, parentSize, childSize) {\n var centerX = 0;\n if (child.horizontalAlignment === 'Left') {\n centerX = x + child.margin.left + childSize.width / 2;\n }\n else if (child.horizontalAlignment === 'Right') {\n var parentRight = parent.offsetX + parentSize.width * (1 - parent.pivot.x);\n centerX = parentRight - parent.padding.right - child.margin.right - childSize.width / 2;\n }\n else {\n centerX = parent.offsetX - parentSize.width * parent.pivot.x + parentSize.width / 2;\n }\n return { x: centerX, y: y + childSize.height / 2 };\n };\n StackPanel.prototype.stretchChildren = function (size) {\n if (this.children !== undefined && this.children.length > 0) {\n for (var _i = 0, _a = this.children; _i < _a.length; _i++) {\n var child = _a[_i];\n if (this.orientation === 'Vertical') {\n if (child.horizontalAlignment === 'Stretch') {\n child.desiredSize.width = size.width;\n }\n }\n else {\n if (child.verticalAlignment === 'Stretch') {\n child.desiredSize.height = size.height;\n }\n }\n }\n }\n };\n StackPanel.prototype.applyChildMargin = function (child, size) {\n size.height += child.margin.top + child.margin.bottom;\n size.width += child.margin.left + child.margin.right;\n };\n return StackPanel;\n}(Container));\nexport { StackPanel };\n","import { Node } from '../objects/node';\nimport { Connector } from '../objects/connector';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { randomId, getFunction } from '../utility/base-util';\n/**\n * data source defines the basic unit of diagram\n */\nvar DataBinding = /** @class */ (function () {\n /**\n * Constructor for the data binding module.\n * @private\n */\n function DataBinding() {\n this.dataTable = {};\n //constructs the data binding module\n }\n /**\n * To destroy the data binding module\n * @return {void}\n * @private\n */\n DataBinding.prototype.destroy = function () {\n /**\n * Destroy method performed here\n */\n };\n /**\n * Get module name.\n */\n DataBinding.prototype.getModuleName = function () {\n /**\n * Returns the module name\n */\n return 'DataBinding';\n };\n /**\n * Initialize nodes and connectors when we have a data as JSON\n * @param data\n * @param diagram\n * @private\n */\n DataBinding.prototype.initData = function (data, diagram) {\n var dataSource;\n var dataProp = 'data';\n var jsonProp = 'json';\n var dataManager = data.dataManager || {};\n dataSource = data.data || dataManager[dataProp] || dataManager[jsonProp] ||\n (dataManager.dataSource ? dataManager.dataSource.json : undefined);\n if (dataSource && dataSource.length) {\n this.applyDataSource(data, dataSource, diagram);\n }\n };\n /**\n * Initialize nodes and connector when we have a data as remote url\n * @param data\n * @param diagram\n * @private\n */\n DataBinding.prototype.initSource = function (data, diagram) {\n var _this = this;\n var dataSource = data;\n var result;\n var mapper = data;\n if (dataSource.dataManager instanceof DataManager) {\n var query = mapper.dataManager.defaultQuery;\n data.dataManager.executeQuery(query).then(function (e) {\n var prop = 'result';\n result = e[prop];\n if (!diagram.isDestroyed) {\n _this.applyDataSource(data, result, diagram);\n diagram.refreshDiagram();\n diagram.trigger('dataLoaded', { diagram: diagram });\n }\n });\n }\n };\n DataBinding.prototype.applyDataSource = function (mapper, data, diagram) {\n this.dataTable = {};\n var obj;\n var firstNode;\n var rootNodes = [];\n var firstLevel = [];\n var item;\n var nextLevel;\n if (data !== undefined) {\n for (var r = 0; r < data.length; r++) {\n obj = data[r];\n if (obj[mapper.parentId] === undefined || obj[mapper.parentId] === null ||\n typeof obj[mapper.parentId] !== 'object') {\n if (rootNodes[obj[mapper.parentId]] !== undefined) {\n rootNodes[obj[mapper.parentId]].items.push(obj);\n }\n else {\n rootNodes[obj[mapper.parentId]] = { items: [obj] };\n }\n }\n else {\n rootNodes = this.updateMultipleRootNodes(obj, rootNodes, mapper, data);\n }\n if (mapper.root === obj[mapper.id]) {\n firstNode = { items: [obj] };\n }\n }\n if (firstNode) {\n firstLevel.push(firstNode);\n }\n else {\n for (var _i = 0, _a = Object.keys(rootNodes); _i < _a.length; _i++) {\n var n = _a[_i];\n if (!n || n === 'undefined' || n === '\\'\\'' || n === 'null') {\n firstLevel.push(rootNodes[n]);\n }\n }\n }\n for (var i = 0; i < firstLevel.length; i++) {\n for (var j = 0; j < firstLevel[i].items.length; j++) {\n item = firstLevel[i].items[j];\n var node = this.applyNodeTemplate(mapper, item, diagram);\n diagram.nodes.push(node);\n this.dataTable[item[mapper.id]] = node;\n nextLevel = rootNodes[node.data[mapper.id]];\n if (nextLevel !== undefined) {\n this.renderChildNodes(mapper, nextLevel, node.id, rootNodes, diagram);\n }\n }\n }\n }\n this.dataTable = null;\n };\n /**\n * updateMultipleRootNodes method is used to update the multiple Root Nodes\n * @param object\n * @param rootnodes\n * @param mapper\n * @param data\n */\n DataBinding.prototype.updateMultipleRootNodes = function (obj, rootNodes, mapper, data) {\n var parents = obj[mapper.parentId];\n var parent;\n for (var i = 0; i < parents.length; i++) {\n parent = parents[i];\n if (rootNodes[parent]) {\n rootNodes[parent].items.push(obj);\n }\n else {\n rootNodes[parent] = { items: [obj] };\n }\n }\n return rootNodes;\n };\n /**\n * Get the node values\n * @param mapper\n * @param item\n * @param diagram\n */\n DataBinding.prototype.applyNodeTemplate = function (mapper, item, diagram) {\n var root = item;\n var id = randomId();\n var nodeModel = { id: id, data: item };\n var doBinding = getFunction(mapper.doBinding);\n if (doBinding) {\n doBinding(nodeModel, item, diagram);\n }\n var obj = new Node(diagram, 'nodes', nodeModel, true);\n if (!this.collectionContains(obj, diagram, mapper.id, mapper.parentId)) {\n return obj;\n }\n else {\n return this.dataTable[item[mapper.id]];\n }\n };\n DataBinding.prototype.renderChildNodes = function (mapper, parent, value, rtNodes, diagram) {\n var child;\n var nextLevel;\n var node;\n for (var j = 0; j < parent.items.length; j++) {\n child = parent.items[j];\n node = this.applyNodeTemplate(mapper, child, diagram);\n var canBreak = false;\n if (!this.collectionContains(node, diagram, mapper.id, mapper.parentId)) {\n this.dataTable[child[mapper.id]] = node;\n diagram.nodes.push(node);\n }\n else {\n canBreak = true;\n }\n if (!this.containsConnector(diagram, value, node.id)) {\n diagram.connectors.push(this.applyConnectorTemplate(value, node.id, diagram));\n }\n if (!canBreak) {\n nextLevel = rtNodes[node.data[mapper.id]];\n if (nextLevel !== undefined) {\n this.renderChildNodes(mapper, nextLevel, node.id, rtNodes, diagram);\n }\n }\n }\n };\n DataBinding.prototype.containsConnector = function (diagram, sourceNode, targetNode) {\n if (sourceNode !== '' && targetNode !== '') {\n for (var i = 0; i < diagram.connectors.length; i++) {\n var connector = diagram.connectors[i];\n if (connector !== undefined && (connector.sourceID === sourceNode && connector.targetID === targetNode)) {\n return true;\n }\n }\n }\n return false;\n };\n /**\n * collectionContains method is used to check wthear the node is already present in collection or not\n * @param node\n * @param diagram\n * @param id\n * @param parentId\n */\n DataBinding.prototype.collectionContains = function (node, diagram, id, parentId) {\n var obj = this.dataTable[node.data[id]];\n if (obj !== undefined && obj.data[id] === node.data[id] && obj.data[parentId] === node.data[parentId]) {\n return true;\n }\n else {\n return false;\n }\n };\n /**\n * Get the Connector values\n * @param sourceNode\n * @param targetNode\n * @param diagram\n */\n DataBinding.prototype.applyConnectorTemplate = function (sNode, tNode, diagram) {\n var connModel = {\n id: randomId(), sourceID: sNode, targetID: tNode\n };\n var obj = new Connector(diagram, 'connectors', connModel, true);\n return obj;\n };\n return DataBinding;\n}());\nexport { DataBinding };\n","import { createElement, remove } from '@syncfusion/ej2-base';\nimport { ContextMenu as Menu } from '@syncfusion/ej2-navigations';\nimport { contextMenuClick, contextMenuOpen } from '../enum/enum';\n/**\n * @private\n */\nexport var menuClass = {\n content: '.e-diagramcontent',\n copy: 'e-copy',\n paste: 'e-paste',\n undo: 'e-undo',\n redo: 'e-redo',\n cut: 'e-cut',\n selectAll: 'e-selectall',\n grouping: 'e-grouping',\n group: 'e-group',\n unGroup: 'e-ungroup',\n bringToFront: 'e-bringfront',\n sendToBack: 'e-sendback',\n moveForward: 'e-bringforward',\n sendBackward: 'e-sendbackward',\n order: 'e-order'\n};\n/**\n * 'ContextMenu module used to handle context menu actions.'\n * @private\n */\nvar DiagramContextMenu = /** @class */ (function () {\n function DiagramContextMenu(parent, service) {\n this.defaultItems = {};\n /**\n * @private\n */\n this.disableItems = [];\n /**\n * @private\n */\n this.hiddenItems = [];\n this.localeText = this.setLocaleKey();\n this.parent = parent;\n this.serviceLocator = service;\n this.addEventListener();\n }\n /**\n * @hidden\n * @private\n */\n DiagramContextMenu.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on('initial-load', this.render, this);\n };\n /**\n * @hidden\n * @private\n */\n DiagramContextMenu.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('initial-load', this.render);\n };\n DiagramContextMenu.prototype.render = function () {\n this.l10n = this.serviceLocator.getService('localization');\n this.element = createElement('ul', { id: this.parent.element.id + '_contextMenu' });\n this.parent.element.appendChild(this.element);\n var target = '#' + this.parent.element.id;\n this.contextMenu = new Menu({\n items: this.getMenuItems(),\n enableRtl: this.parent.enableRtl,\n enablePersistence: this.parent.enablePersistence,\n locale: this.parent.locale,\n target: target,\n select: this.contextMenuItemClick.bind(this),\n beforeOpen: this.contextMenuBeforeOpen.bind(this),\n onOpen: this.contextMenuOpen.bind(this),\n onClose: this.contextMenuOnClose.bind(this),\n cssClass: 'e-diagram-menu'\n });\n this.contextMenu.appendTo(this.element);\n };\n DiagramContextMenu.prototype.getMenuItems = function () {\n var menuItems = [];\n var orderItems = [];\n var groupItems = [];\n if (!this.parent.contextMenuSettings.showCustomMenuOnly) {\n for (var _i = 0, _a = this.getDefaultItems(); _i < _a.length; _i++) {\n var item = _a[_i];\n if (item.toLocaleLowerCase().indexOf('group') !== -1) {\n if (item.toLocaleLowerCase() !== 'grouping') {\n groupItems.push(this.buildDefaultItems(item));\n }\n }\n else if (item.toLocaleLowerCase().indexOf('order') !== -1) {\n if (item.toLocaleLowerCase() !== 'order') {\n orderItems.push(this.buildDefaultItems(item));\n }\n }\n else {\n menuItems.push(this.buildDefaultItems(item));\n }\n }\n if (groupItems.length > 0) {\n var orderGroup = this.buildDefaultItems('grouping');\n orderGroup.items = groupItems;\n menuItems.push(orderGroup);\n }\n if (orderItems.length > 0) {\n var orderGroup = this.buildDefaultItems('order');\n orderGroup.items = orderItems;\n menuItems.push(orderGroup);\n }\n }\n if (this.parent.contextMenuSettings.items) {\n for (var _b = 0, _c = this.parent.contextMenuSettings.items; _b < _c.length; _b++) {\n var customItem = _c[_b];\n menuItems.push(customItem);\n }\n }\n return menuItems;\n };\n DiagramContextMenu.prototype.contextMenuOpen = function () {\n this.isOpen = true;\n };\n DiagramContextMenu.prototype.contextMenuItemClick = function (args) {\n var item = this.getKeyFromId(args.item.id);\n switch (item) {\n case 'cut':\n this.parent.cut();\n break;\n case 'copy':\n this.parent.copy();\n break;\n case 'undo':\n this.parent.undo();\n break;\n case 'redo':\n this.parent.redo();\n break;\n case 'paste':\n this.parent.paste();\n break;\n case 'selectAll':\n this.parent.selectAll();\n break;\n case 'group':\n this.parent.group();\n break;\n case 'unGroup':\n this.parent.unGroup();\n break;\n case 'bringToFrontOrder':\n this.parent.bringToFront();\n break;\n case 'moveForwardOrder':\n this.parent.moveForward();\n break;\n case 'sendToBackOrder':\n this.parent.sendToBack();\n break;\n case 'sendBackwardOrder':\n this.parent.sendBackward();\n break;\n }\n document.getElementById(this.parent.element.id + 'content').focus();\n this.parent.trigger(contextMenuClick, args);\n };\n DiagramContextMenu.prototype.contextMenuOnClose = function (args) {\n var parent = 'parentObj';\n if (args.items.length > 0 && args.items[0][parent] instanceof Menu) {\n this.updateItemStatus();\n }\n };\n DiagramContextMenu.prototype.getLocaleText = function (item) {\n return this.l10n.getConstant(this.localeText[item]);\n };\n DiagramContextMenu.prototype.updateItemStatus = function () {\n this.contextMenu.showItems(this.hiddenItems, true);\n this.contextMenu.enableItems(this.disableItems, false, true);\n this.hiddenItems = [];\n this.disableItems = [];\n this.isOpen = false;\n };\n DiagramContextMenu.prototype.ensureItems = function (item, event) {\n var key = this.getKeyFromId(item.id);\n var dItem = this.defaultItems[key];\n if (this.getDefaultItems().indexOf(key) !== -1) {\n if (item.target && event &&\n !this.ensureTarget(item)) {\n this.hiddenItems.push(item.id);\n }\n }\n };\n DiagramContextMenu.prototype.contextMenuBeforeOpen = function (args) {\n var diagramArgs = args;\n diagramArgs.hiddenItems = [];\n for (var _i = 0, _a = args.items; _i < _a.length; _i++) {\n var item = _a[_i];\n this.ensureItems(item, args.event);\n if (item.items.length) {\n for (var _b = 0, _c = item.items; _b < _c.length; _b++) {\n var newItem = _c[_b];\n this.ensureItems(newItem, args.event);\n }\n }\n }\n this.eventArgs = args.event;\n this.parent.trigger(contextMenuOpen, diagramArgs);\n if (diagramArgs.items.length === diagramArgs.hiddenItems.length) {\n diagramArgs.cancel = true;\n diagramArgs.hiddenItems = [];\n }\n else {\n this.hiddenItems = this.hiddenItems.concat(diagramArgs.hiddenItems);\n this.contextMenu.enableItems(this.disableItems, false, true);\n this.contextMenu.hideItems(this.hiddenItems, true);\n }\n };\n DiagramContextMenu.prototype.ensureTarget = function (item) {\n var selectedLength = this.parent.selectedItems.nodes.length +\n this.parent.selectedItems.connectors.length;\n var itemText = this.getKeyFromId(item.id);\n var target = false;\n switch (itemText) {\n case 'undo':\n target = this.parent.historyList && this.parent.historyList.canUndo ? true : false;\n break;\n case 'redo':\n target = this.parent.historyList && this.parent.historyList.canRedo ? true : false;\n break;\n case 'paste':\n target = this.parent.commandHandler.clipboardData.clipObject ? true : false;\n break;\n case 'selectAll':\n target = this.parent.nodes.length + this.parent.connectors.length ? true : false;\n break;\n case 'grouping':\n target = ((selectedLength > 1) || (this.parent.selectedItems.nodes[0] && this.parent.selectedItems.nodes[0].children\n && this.parent.selectedItems.nodes[0].children.length > 1)) ? true : false;\n break;\n case 'group':\n target = selectedLength > 1;\n break;\n case 'unGroup':\n target = ((this.parent.selectedItems.nodes[0] && this.parent.selectedItems.nodes[0].children\n && this.parent.selectedItems.nodes[0].children.length > 1)) ? true : false;\n break;\n case 'cut':\n case 'copy':\n case 'order':\n case 'bringToFrontOrder':\n case 'moveForwardOrder':\n case 'sendToBackOrder':\n case 'sendBackwardOrder':\n target = selectedLength ? true : false;\n break;\n }\n return target;\n };\n /**\n * To destroy the Context menu.\n * @method destroy\n * @return {void}\n * @private\n */\n DiagramContextMenu.prototype.destroy = function () {\n this.contextMenu.destroy();\n remove(this.element);\n this.removeEventListener();\n };\n DiagramContextMenu.prototype.getModuleName = function () {\n return 'contextMenu';\n };\n DiagramContextMenu.prototype.generateID = function (item) {\n return this.parent.element.id + '_contextMenu_' + item;\n };\n DiagramContextMenu.prototype.getKeyFromId = function (id) {\n return id.replace(this.parent.element.id + '_contextMenu_', '');\n };\n DiagramContextMenu.prototype.buildDefaultItems = function (item) {\n var menuItem;\n switch (item) {\n case 'copy':\n menuItem = { target: menuClass.content, iconCss: menuClass.copy };\n break;\n case 'cut':\n menuItem = { target: menuClass.content, iconCss: menuClass.cut };\n break;\n case 'paste':\n menuItem = { target: menuClass.content, iconCss: menuClass.paste };\n break;\n case 'undo':\n menuItem = { target: menuClass.content, iconCss: menuClass.undo };\n break;\n case 'redo':\n menuItem = { target: menuClass.content, iconCss: menuClass.redo };\n break;\n case 'grouping':\n menuItem = { target: menuClass.content };\n break;\n case 'group':\n menuItem = { target: menuClass.content, iconCss: menuClass.group };\n break;\n case 'unGroup':\n menuItem = { target: menuClass.content, iconCss: menuClass.unGroup };\n break;\n case 'order':\n menuItem = { target: menuClass.content, iconCss: menuClass.order };\n break;\n case 'bringToFrontOrder':\n menuItem = { target: menuClass.content, iconCss: menuClass.bringToFront };\n break;\n case 'moveForwardOrder':\n menuItem = { target: menuClass.content, iconCss: menuClass.moveForward };\n break;\n case 'sendToBackOrder':\n menuItem = { target: menuClass.content, iconCss: menuClass.sendToBack };\n break;\n case 'sendBackwardOrder':\n menuItem = { target: menuClass.content, iconCss: menuClass.sendBackward };\n break;\n case 'selectAll':\n menuItem = { target: menuClass.content };\n break;\n }\n this.defaultItems[item] = {\n text: this.getLocaleText(item), id: this.generateID(item),\n target: menuItem.target, iconCss: menuItem.iconCss ? 'e-icons ' + menuItem.iconCss : ''\n };\n return this.defaultItems[item];\n };\n DiagramContextMenu.prototype.getDefaultItems = function () {\n return [\n 'copy',\n 'cut', 'paste', 'undo', 'redo', 'selectAll', 'grouping', 'group', 'unGroup', 'order',\n 'bringToFrontOrder', 'moveForwardOrder', 'sendToBackOrder', 'sendBackwardOrder'\n ];\n };\n DiagramContextMenu.prototype.setLocaleKey = function () {\n return {\n 'copy': 'Copy',\n 'cut': 'Cut',\n 'paste': 'Paste',\n 'undo': 'Undo',\n 'redo': 'Redo',\n 'selectAll': 'SelectAll',\n 'grouping': 'Grouping',\n 'group': 'Group',\n 'unGroup': 'UnGroup',\n 'order': 'Order',\n 'bringToFrontOrder': 'BringToFront',\n 'moveForwardOrder': 'MoveForward',\n 'sendToBackOrder': 'SendToBack',\n 'sendBackwardOrder': 'SendBackward'\n };\n };\n return DiagramContextMenu;\n}());\nexport { DiagramContextMenu };\n","import { Point } from '../primitives/point';\nimport { Rect } from '../primitives/rect';\nimport { intersect3 } from '../utility/diagram-util';\nimport { canBridge } from '../utility/constraints-util';\n/**\n * ConnectorBridging defines the bridging behavior\n */\n/** @private */\nvar ConnectorBridging = /** @class */ (function () {\n /**\n * Constructor for the bridging module\n * @private\n */\n function ConnectorBridging() {\n //constructs the bridging module\n }\n /** @private */\n ConnectorBridging.prototype.updateBridging = function (conn, diagram) {\n var lastBridge = [];\n var bounds;\n conn.bridges = [];\n if (canBridge(conn, diagram)) {\n // if (this.canBridge(conn, diagram)) {\n var points1 = this.getPoints(conn);\n bounds = Rect.toBounds(points1);\n var bridgeSpacing = conn.bridgeSpace;\n var bgedir = diagram.bridgeDirection;\n var count = -1;\n var quads = diagram.connectors;\n for (var q = 0; q < quads.length; q++) {\n var connector1 = quads[q];\n if (conn && connector1 && conn.id !== connector1.id) {\n var points2 = this.getPoints(connector1);\n var bounds1 = Rect.toBounds(points2);\n if (this.intersectsRect(bounds, bounds1)) {\n var intersectPts = this.intersect(points1, points2, false, bgedir, true);\n if (intersectPts.length > 0) {\n for (var i = 0; i < intersectPts.length; i++) {\n var fullLength = 0;\n var length_1 = 0;\n var segmentIndex = 0;\n var pointIndex = 0;\n var obj = this.getLengthAtFractionPoint(conn, intersectPts[i]);\n if (obj.pointIndex !== -1) {\n length_1 = obj.lengthFractionIndex;\n fullLength = obj.fullLength;\n segmentIndex = obj.segmentIndex;\n pointIndex = obj.pointIndex;\n var stBridge = this.getPointAtLength((length_1 - (bridgeSpacing / 2)), points1);\n var enBridge = this.getPointAtLength((length_1 + (bridgeSpacing / 2)), points1);\n var fractLength = (length_1 - (bridgeSpacing / 2)) / fullLength;\n fractLength = (length_1 + (bridgeSpacing / 2)) / fullLength;\n if (this.isEmptyPoint(enBridge)) {\n enBridge = stBridge;\n }\n var start = void 0;\n var end = void 0;\n start = conn.sourcePoint;\n if (conn.type === 'Straight') {\n end = conn.targetPoint;\n }\n else {\n end = conn.intermediatePoints[pointIndex];\n }\n var angle = this.angleCalculation(start, end);\n if (lastBridge.length) {\n var fixedPoint = void 0;\n fixedPoint = conn.sourcePoint;\n var fix = Math.abs(this.lengthCalculation(fixedPoint, enBridge));\n var var1 = 0;\n var insertAt = -1;\n count = -1;\n for (var k = 0; k < lastBridge[segmentIndex].bridges.length; k++) {\n count++;\n var arcSeg = lastBridge[segmentIndex].bridges[k];\n var1 = Math.abs(this.lengthCalculation(fixedPoint, arcSeg.endPoint));\n if (fix < var1) {\n insertAt = count;\n break;\n }\n }\n if (insertAt >= 0) {\n var paths = void 0;\n paths = this.createSegment(stBridge, enBridge, angle, bgedir, pointIndex, conn, diagram);\n paths.target = connector1.id;\n lastBridge[segmentIndex].bridges.splice(insertAt, 0, paths);\n lastBridge[segmentIndex].bridges.join();\n lastBridge[segmentIndex].bridgeStartPoint.splice(insertAt, 0, stBridge);\n lastBridge[segmentIndex].bridgeStartPoint.join();\n lastBridge[segmentIndex].segmentIndex = segmentIndex;\n }\n else {\n var paths = void 0;\n paths = this.createSegment(stBridge, enBridge, angle, bgedir, pointIndex, conn, diagram);\n paths.target = connector1.id;\n lastBridge[segmentIndex].bridges.push(paths);\n lastBridge[segmentIndex].bridgeStartPoint.push(stBridge);\n lastBridge[segmentIndex].segmentIndex = segmentIndex;\n }\n }\n else {\n if (!isNaN(stBridge.x) && !isNaN(stBridge.y) && !this.isEmptyPoint(enBridge)) {\n var arcs = void 0;\n var bges = [];\n var bgept = [];\n arcs = this.createSegment(stBridge, enBridge, angle, bgedir, pointIndex, conn, diagram);\n var bgseg = {\n bridges: bges, bridgeStartPoint: bgept, segmentIndex: segmentIndex\n };\n arcs.target = connector1.id;\n var stPoints = [];\n var edPoints = [];\n stPoints.push(stBridge);\n edPoints.push(enBridge);\n lastBridge[segmentIndex] = bgseg;\n lastBridge[segmentIndex].bridges.push(arcs);\n lastBridge[segmentIndex].bridgeStartPoint = stPoints;\n lastBridge[segmentIndex].segmentIndex = segmentIndex;\n }\n }\n }\n }\n }\n }\n }\n }\n if (lastBridge.length !== 0) {\n this.firstBridge(lastBridge, conn, bridgeSpacing);\n }\n }\n };\n /** @private */\n ConnectorBridging.prototype.firstBridge = function (bridgeList, connector, bridgeSpacing) {\n for (var i = 0; i < bridgeList.length; i++) {\n var bridge = bridgeList[i];\n for (var k = 1; k < bridge.bridges.length; k++) {\n if (Point.findLength(bridge.bridges[k].endPoint, bridge.bridges[k - 1].endPoint) < bridgeSpacing) {\n bridge.bridges[k - 1].endPoint = bridge.bridges[k].endPoint;\n var subBridge = bridge.bridges[k - 1];\n var arc = this.createBridgeSegment(subBridge.startPoint, subBridge.endPoint, subBridge.angle, bridgeSpacing, subBridge.sweep);\n bridge.bridges[k - 1].path = arc;\n bridge.bridges.splice(k, 1);\n bridge.bridgeStartPoint.splice(k, 1);\n k--;\n }\n }\n var pre = connector.sourcePoint;\n for (var j = 0; j < bridge.bridges.length; j++) {\n var subBridge = bridge.bridges[j];\n var preventChecking = true;\n pre = subBridge.endPoint;\n connector.bridges.push(subBridge);\n }\n }\n };\n /** @private */\n ConnectorBridging.prototype.createSegment = function (st, end, angle, direction, index, conn, diagram) {\n var arc;\n var sweep;\n var path = {\n angle: 0, endPoint: { x: 0, y: 0 }, target: '', path: '',\n segmentPointIndex: -1, startPoint: { x: 0, y: 0 }, sweep: 1, rendered: false\n };\n sweep = this.sweepDirection(angle, direction, conn, diagram);\n arc = this.createBridgeSegment(st, end, angle, conn.bridgeSpace, sweep);\n path.path = arc;\n path.startPoint = st;\n path.endPoint = end;\n path.angle = angle;\n path.segmentPointIndex = index;\n path.sweep = sweep;\n return path;\n };\n /** @private */\n ConnectorBridging.prototype.createBridgeSegment = function (startPt, endPt, angle, bridgeSpace, sweep) {\n var path = 'A ' + bridgeSpace / 2 + ' ' + bridgeSpace / 2 + ' ' + angle + ' , 1 ' + sweep + ' ' + endPt.x + ',' + endPt.y;\n return path;\n };\n /** @private */\n ConnectorBridging.prototype.sweepDirection = function (angle, bridgeDirection, connector, diagram) {\n var angle1 = Math.abs(angle);\n var sweep;\n switch (bridgeDirection) {\n case 'Top':\n case 'Bottom':\n sweep = 1;\n if (angle1 >= 0 && angle1 <= 90) {\n sweep = 0;\n }\n break;\n case 'Left':\n case 'Right':\n sweep = 1;\n if (angle < 0 && angle >= -180) {\n sweep = 0;\n }\n break;\n }\n if (bridgeDirection === 'Right' || bridgeDirection === 'Bottom') {\n if (sweep === 0) {\n sweep = 1;\n }\n else {\n sweep = 0;\n }\n }\n return sweep;\n };\n /** @private */\n ConnectorBridging.prototype.getPointAtLength = function (length, pts) {\n var run = 0;\n var pre;\n var found = { x: 0, y: 0 };\n for (var i = 0; i < pts.length; i++) {\n var pt = pts[i];\n if (!pre) {\n pre = pt;\n continue;\n }\n else {\n var l = this.lengthCalculation(pre, pt);\n if (run + l > length) {\n var r = length - run;\n var deg = Point.findAngle(pre, pt);\n var x = r * Math.cos(deg * Math.PI / 180);\n var y = r * Math.sin(deg * Math.PI / 180);\n found = { x: pre.x + x, y: pre.y + y };\n break;\n }\n else {\n run += l;\n }\n }\n pre = pt;\n }\n return found;\n };\n /** @private */\n ConnectorBridging.prototype.getPoints = function (connector) {\n var points = [];\n if (connector.intermediatePoints && (connector.type === 'Straight' || connector.type === 'Orthogonal')) {\n for (var j = 0; j < connector.intermediatePoints.length; j++) {\n points.push(connector.intermediatePoints[j]);\n }\n }\n return points;\n };\n ConnectorBridging.prototype.intersectsRect = function (rect1, rect2) {\n return ((((rect2.x < (rect1.x + rect1.width)) && (rect1.x < (rect2.x + rect2.width)))\n && (rect2.y < (rect1.y + rect1.height))) && (rect1.y < (rect2.y + rect2.height)));\n };\n /** @private */\n ConnectorBridging.prototype.intersect = function (points1, points2, self, bridgeDirection, zOrder) {\n if (self && points2.length >= 2) {\n points2.splice(0, 1);\n points2.splice(0, 1);\n }\n var points = [];\n for (var i = 0; i < points1.length - 1; i++) {\n var pt = this.inter1(points1[i], points1[i + 1], points2, zOrder, bridgeDirection);\n if (pt.length > 0) {\n for (var k = 0; k < pt.length; k++) {\n points.push(pt[k]);\n }\n }\n if (self && points2.length >= 1) {\n points2.splice(0, 1);\n }\n }\n return points;\n };\n /** @private */\n ConnectorBridging.prototype.inter1 = function (startPt, endPt, pts, zOrder, bridgeDirection) {\n var points1 = [];\n for (var i = 0; i < pts.length - 1; i++) {\n var point = this.intersect2(startPt, endPt, pts[i], pts[i + 1]);\n if (!this.isEmptyPoint(point)) {\n var angle = this.angleCalculation(startPt, endPt);\n var angle1 = this.angleCalculation(pts[i], pts[i + 1]);\n angle = this.checkForHorizontalLine(angle);\n angle1 = this.checkForHorizontalLine(angle1);\n switch (bridgeDirection) {\n case 'Left':\n case 'Right':\n if (angle > angle1) {\n points1.push(point);\n }\n break;\n case 'Top':\n case 'Bottom':\n if (angle < angle1) {\n points1.push(point);\n }\n break;\n }\n if (angle === angle1 && zOrder) {\n points1.push(point);\n }\n }\n }\n return points1;\n };\n ConnectorBridging.prototype.checkForHorizontalLine = function (angle) {\n var temp = 0;\n var roundedAngle = Math.abs(angle);\n if (roundedAngle > 90) {\n temp = 180 - roundedAngle;\n }\n else {\n temp = roundedAngle;\n }\n return temp;\n };\n ConnectorBridging.prototype.intersect2 = function (start1, end1, start2, end2) {\n var point = { x: 0, y: 0 };\n var lineUtil1 = this.getLineSegment(start1.x, start1.y, end1.x, end1.y);\n var lineUtil2 = this.getLineSegment(start2.x, start2.y, end2.x, end2.y);\n var line3 = intersect3(lineUtil1, lineUtil2);\n if (line3.enabled) {\n return line3.intersectPt;\n }\n else {\n return point;\n }\n };\n /** @private */\n ConnectorBridging.prototype.getLineSegment = function (x1, y1, x2, y2) {\n return { 'X1': Number(x1) || 0, 'Y1': Number(y1) || 0, 'X2': Number(x2) || 0, 'Y2': Number(y2) || 0 };\n };\n ConnectorBridging.prototype.isEmptyPoint = function (point) {\n return point.x === 0 && point.y === 0;\n };\n ConnectorBridging.prototype.getLengthAtFractionPoint = function (connector, pointAt) {\n var lengthFraction;\n var confirm = 100;\n var pointIndex = -1;\n var fullLength = 0;\n var segmentIndex = -1;\n var count = 0;\n var lengthAtFractionPt = 0;\n var pt1 = connector.sourcePoint;\n var previouspt2 = pt1;\n var points = [];\n for (var i = 0; i < connector.intermediatePoints.length; i++) {\n var point2 = connector.intermediatePoints[i];\n points.push(point2);\n }\n for (var j = 0; j < points.length; j++) {\n var pt2 = points[j];\n var suspect = this.getSlope(pt2, pt1, pointAt, connector);\n if (suspect < confirm) {\n confirm = suspect;\n lengthAtFractionPt = fullLength + this.lengthCalculation(pointAt, previouspt2);\n segmentIndex = count;\n pointIndex = j;\n }\n fullLength += Point.findLength(pt2, pt1);\n pt1 = pt2;\n previouspt2 = pt2;\n }\n count++;\n lengthFraction = {\n lengthFractionIndex: lengthAtFractionPt, fullLength: fullLength,\n segmentIndex: segmentIndex, pointIndex: pointIndex\n };\n return lengthFraction;\n };\n ConnectorBridging.prototype.getSlope = function (startPt, endPt, point, connector) {\n var three = 3.0;\n var delX = Math.abs(startPt.x - endPt.x);\n var delY = Math.abs(startPt.y - endPt.y);\n var lhs = ((point.y - startPt.y) / (endPt.y - startPt.y));\n var rhs = ((point.x - startPt.x) / (endPt.x - startPt.x));\n if (!isFinite(lhs) || !isFinite(rhs) || isNaN(lhs) || isNaN(rhs)) {\n if (startPt.x === endPt.x) {\n if (startPt.y === endPt.y) {\n return 10000;\n }\n else if (((startPt.y > point.y) && (point.y > endPt.y)) || ((startPt.y < point.y) && (point.y < endPt.y))) {\n return Math.abs(startPt.x - point.x);\n }\n }\n else if (startPt.y === endPt.y) {\n if (((startPt.x > point.x) && (point.x > endPt.x)) || ((startPt.x < point.x) && (point.x < endPt.x))) {\n return Math.abs(startPt.y - point.y);\n }\n }\n }\n else {\n if ((startPt.x >= point.x && point.x >= endPt.x) || (startPt.x <= point.x && point.x <= endPt.x) || delX < three) {\n if ((startPt.y >= point.y && point.y >= endPt.y) || (startPt.y <= point.y && point.y <= endPt.y) || delY < three) {\n return Math.abs(lhs - rhs);\n }\n }\n }\n return 10000;\n };\n /** @private */\n ConnectorBridging.prototype.angleCalculation = function (startPt, endPt) {\n var xDiff = startPt.x - endPt.x;\n var yDiff = startPt.y - endPt.y;\n return Math.atan2(yDiff, xDiff) * (180 / Math.PI);\n };\n ConnectorBridging.prototype.lengthCalculation = function (startPt, endPt) {\n //removed a try catch from here\n var len = Math.sqrt(((startPt.x - endPt.x) * (startPt.x - endPt.x)) + ((startPt.y - endPt.y) * (startPt.y - endPt.y)));\n return len;\n };\n /**\n * To destroy the bridging module\n * @return {void}\n * @private\n */\n ConnectorBridging.prototype.destroy = function () {\n /**\n * Destroys the bridging module\n */\n };\n /**\n * Get module name.\n */\n ConnectorBridging.prototype.getModuleName = function () {\n /**\n * Returns the module name\n */\n return 'Bridging';\n };\n return ConnectorBridging;\n}());\nexport { ConnectorBridging };\n","import { Rect } from '../primitives/rect';\nimport { PathElement } from '../core/elements/path-element';\nimport { SnapConstraints } from '../enum/enum';\nimport { Connector } from './connector';\nimport { Selector } from '../interaction/selector';\nimport { getBounds } from './../utility/base-util';\nimport { randomId } from './../utility/base-util';\nimport { getAdornerLayerSvg } from './../utility/dom-util';\nimport { isSelected } from '../interaction/actions';\n/**\n * Snapping\n */\nvar Snapping = /** @class */ (function () {\n function Snapping(diagram) {\n this.line = [];\n this.diagram = diagram;\n }\n /** @private */\n Snapping.prototype.canSnap = function () {\n return (this.diagram.snapSettings.constraints\n & (SnapConstraints.SnapToObject | SnapConstraints.SnapToLines)) !== 0;\n };\n /**\n * Snap to object\n * @private\n */\n Snapping.prototype.snapPoint = function (diagram, selectedObject, towardsLeft, towardsTop, delta, startPoint, endPoint) {\n var snapSettings = this.diagram.snapSettings;\n var zoomFactor = 1;\n var offset = { x: 0, y: 0 };\n var bounds = getBounds(selectedObject.wrapper);\n var horizontallysnapped = { snapped: false, offset: 0 };\n var verticallysnapped = { snapped: false, offset: 0 };\n if (this.diagram.snapSettings.constraints & SnapConstraints.SnapToObject) {\n var snapLine = void 0;\n snapLine = document.createElementNS('http://www.w3.org/2000/svg', 'g');\n snapLine.setAttribute('id', '_SnappingLines');\n snapLine.setAttribute('shapeRendering', 'crispEdges');\n getAdornerLayerSvg(this.diagram.element.id).appendChild(snapLine);\n this.snapObject(diagram, selectedObject, snapLine, horizontallysnapped, verticallysnapped, delta, startPoint === endPoint);\n }\n //original position\n var left = bounds.x + delta.x;\n var top = bounds.y + delta.y;\n var right = bounds.x + bounds.width + delta.x;\n var bottom = bounds.y + bounds.height + delta.y;\n var scaledIntervals = snapSettings.verticalGridlines.scaledIntervals;\n //snapped positions\n var roundedRight = this.round(right, scaledIntervals, zoomFactor);\n var roundedLeft = this.round(left, scaledIntervals, zoomFactor);\n scaledIntervals = snapSettings.horizontalGridlines.scaledIntervals;\n var roundedTop = this.round(top, scaledIntervals, zoomFactor);\n var roundedBottom = this.round(bottom, scaledIntervals, zoomFactor);\n //currentposition\n var currentright = bounds.x + bounds.width;\n var currentbottom = bounds.y + bounds.height;\n if (!horizontallysnapped.snapped) {\n if (this.diagram.snapSettings.constraints & SnapConstraints.SnapToVerticalLines) {\n if (Math.abs(delta.x) >= 1) {\n if (towardsLeft) {\n if (Math.abs(roundedRight - currentright) > Math.abs(roundedLeft - bounds.x)) {\n offset.x += roundedLeft - bounds.x;\n }\n else {\n offset.x += roundedRight - currentright;\n }\n }\n else {\n if (Math.abs(roundedRight - currentright) < Math.abs(roundedLeft - bounds.x)) {\n offset.x += roundedRight - currentright;\n }\n else {\n offset.x += roundedLeft - bounds.x;\n }\n }\n }\n }\n else {\n offset.x = endPoint.x - startPoint.x;\n }\n }\n else {\n if (this.diagram.snapSettings.constraints & SnapConstraints.SnapToObject) {\n offset.x = horizontallysnapped.offset;\n }\n else {\n offset.x = endPoint.x - startPoint.x;\n }\n }\n if (!verticallysnapped.snapped) {\n if (this.diagram.snapSettings.constraints & SnapConstraints.SnapToHorizontalLines) {\n if (Math.abs(delta.y) >= 1) {\n if (towardsTop) {\n if (Math.abs(roundedBottom - currentbottom) > Math.abs(roundedTop - bounds.y)) {\n offset.y += roundedTop - bounds.y;\n }\n else {\n offset.y += roundedBottom - currentbottom;\n }\n }\n else {\n if (Math.abs(roundedBottom - currentbottom) < Math.abs(roundedTop - bounds.y)) {\n offset.y += roundedBottom - currentbottom;\n }\n else {\n offset.y += roundedTop - bounds.y;\n }\n }\n }\n }\n else {\n offset.y = endPoint.y - startPoint.y;\n }\n }\n else {\n offset.y = verticallysnapped.offset;\n }\n return offset;\n };\n /**\n * @private\n */\n Snapping.prototype.round = function (value, snapIntervals, scale) {\n if (scale > 1) {\n scale = Math.pow(2, Math.floor(Math.log(scale) / Math.log(2)));\n }\n else {\n scale = Math.pow(2, Math.ceil(Math.log(scale) / Math.log(2)));\n }\n var cutoff = 0;\n var i = 0;\n for (i = 0; i < snapIntervals.length; i++) {\n cutoff += snapIntervals[i];\n }\n cutoff /= scale;\n var quotient = Math.floor(Math.abs(value) / cutoff);\n var bal = value % cutoff;\n var prev = quotient * cutoff;\n if (prev !== value) {\n if (value >= 0) {\n for (i = 0; i < snapIntervals.length; i++) {\n if (bal <= snapIntervals[i] / scale) {\n return prev + (bal < (snapIntervals[i] / (2 * scale)) ? 0 : snapIntervals[i] / scale);\n }\n else {\n prev += snapIntervals[i] / scale;\n bal -= snapIntervals[i] / scale;\n }\n }\n }\n else {\n prev = prev * -1;\n for (i = snapIntervals.length - 1; i >= 0; i--) {\n if (Math.abs(bal) <= snapIntervals[i] / scale) {\n return prev - (Math.abs(bal) < (snapIntervals[i] / (2 * scale)) ? 0 : snapIntervals[i] / scale);\n }\n else {\n prev -= snapIntervals[i] / scale;\n bal += snapIntervals[i] / scale;\n }\n }\n }\n }\n return value;\n };\n /**\n * Snap to Object\n */\n Snapping.prototype.snapObject = function (diagram, selectedObject, g, horizontalSnap, verticalSnap, delta, ended) {\n var lengthX = null;\n var lengthY;\n var hTarget;\n var vTarget;\n var scroller = this.diagram.scroller;\n var snapSettings = this.diagram.snapSettings;\n var objectsAtLeft = [];\n var objectsAtRight = [];\n var objectsAtTop = [];\n var objectsAtBottom = [];\n var bounds = getBounds(selectedObject.wrapper);\n var scale = diagram.scroller.currentZoom;\n var hoffset = -scroller.horizontalOffset;\n var voffset = -scroller.verticalOffset;\n var snapObjDistance = snapSettings.snapObjectDistance / scale;\n var viewPort = new Rect(0, 0, scroller.viewPortWidth, scroller.viewPortHeight);\n var hIntersectRect = new Rect(hoffset / scale, (bounds.y - snapObjDistance - 5), viewPort.width / scale, (bounds.height + 2 * snapObjDistance + 10));\n var vIntersectRect = new Rect((bounds.x - snapObjDistance - 5), voffset / scale, (bounds.width + 2 * snapObjDistance + 10), viewPort.height / scale);\n viewPort = new Rect(hoffset / scale, voffset / scale, viewPort.width / scale, viewPort.height / scale);\n var nodes = this.findNodes(diagram.spatialSearch, selectedObject, vIntersectRect, viewPort);\n var i;\n var target;\n var targetBounds;\n var nameTable = diagram.nameTable;\n for (i = 0; i < nodes.length; i++) {\n target = nodes[i];\n if (this.canBeTarget(diagram, target)) {\n if (!(this.diagram.nameTable[target.id] instanceof Connector) && this.canConsider(nameTable, selectedObject, target)) {\n targetBounds = target.bounds;\n if (targetBounds.height + targetBounds.y < delta.y + bounds.y) {\n objectsAtTop.push({\n obj: target, distance: Math.abs(bounds.y + delta.y - targetBounds.y - targetBounds.height)\n });\n }\n else if (targetBounds.y > bounds.y + delta.y + bounds.height) {\n objectsAtBottom.push({ obj: target, distance: Math.abs(bounds.y + delta.y + bounds.height - targetBounds.y) });\n }\n if (lengthX == null || lengthX > Math.abs(targetBounds.y - bounds.y - delta.y)) {\n if (Math.abs(targetBounds.x + targetBounds.width / 2 - (bounds.x + bounds.width / 2 + delta.x)) <=\n snapObjDistance) {\n hTarget = this.createSnapObject(targetBounds, bounds, 'centerX');\n lengthX = Math.abs(targetBounds.y - bounds.y);\n }\n else if (Math.abs(targetBounds.x + targetBounds.width - (bounds.x + bounds.width + delta.x)) <= snapObjDistance) {\n hTarget = this.createSnapObject(targetBounds, bounds, 'right');\n lengthX = Math.abs(targetBounds.y - bounds.y);\n }\n else if (Math.abs(targetBounds.x - (bounds.x + delta.x)) <= snapObjDistance) {\n hTarget = this.createSnapObject(targetBounds, bounds, 'left');\n lengthX = Math.abs(targetBounds.y - bounds.y);\n }\n else if (Math.abs(targetBounds.x - (bounds.x + bounds.width + delta.x)) <= snapObjDistance) {\n hTarget = this.createSnapObject(targetBounds, bounds, 'rightLeft');\n lengthX = Math.abs(targetBounds.y - bounds.y);\n }\n else if (Math.abs(targetBounds.x + targetBounds.width - (bounds.x + delta.x)) <= snapObjDistance) {\n hTarget = this.createSnapObject(targetBounds, bounds, 'leftRight');\n lengthX = Math.abs(targetBounds.y - bounds.y);\n }\n }\n }\n }\n }\n nodes = this.findNodes(diagram.spatialSearch, selectedObject, hIntersectRect, viewPort);\n for (var j = 0; j < nodes.length; j++) {\n target = nodes[j];\n if (this.canBeTarget(diagram, target)) {\n if (!(this.diagram.nameTable[target.id] instanceof Connector) && this.canConsider(nameTable, selectedObject, target)) {\n targetBounds = target.bounds;\n if (targetBounds.x + targetBounds.width < bounds.x + delta.x) {\n objectsAtLeft[objectsAtLeft.length] = {\n obj: target, distance: Math.abs((bounds.x + delta.x) - targetBounds.x - targetBounds.width)\n };\n }\n if (targetBounds.x > bounds.x + delta.x + bounds.width) {\n objectsAtRight[objectsAtRight.length] = {\n obj: target, distance: Math.abs(bounds.x + delta.x + bounds.width - targetBounds.x)\n };\n }\n if (lengthY == null || lengthY > Math.abs(targetBounds.x - bounds.x - delta.x)) {\n if (Math.abs(targetBounds.y + targetBounds.height / 2 - (bounds.y + bounds.height / 2 + delta.y))\n <= snapObjDistance) {\n vTarget = this.createSnapObject(targetBounds, bounds, 'centerY');\n lengthY = Math.abs(targetBounds.x - bounds.x);\n }\n else if (Math.abs(targetBounds.y - bounds.y - delta.y) <= snapObjDistance) {\n vTarget = this.createSnapObject(targetBounds, bounds, 'top');\n lengthY = Math.abs(targetBounds.x - bounds.x);\n }\n else if (Math.abs(targetBounds.y + targetBounds.height - (bounds.y + bounds.height + delta.y)) <=\n snapObjDistance) {\n vTarget = this.createSnapObject(targetBounds, bounds, 'bottom');\n lengthY = Math.abs(targetBounds.x - bounds.x);\n }\n else if (Math.abs(targetBounds.y + targetBounds.height - bounds.y - delta.y) <= snapObjDistance) {\n vTarget = this.createSnapObject(targetBounds, bounds, 'topBottom');\n lengthY = Math.abs(targetBounds.x - bounds.x);\n }\n else if (Math.abs(targetBounds.y - (bounds.y + bounds.height + delta.y)) <= snapObjDistance) {\n vTarget = this.createSnapObject(targetBounds, bounds, 'bottomTop');\n lengthY = Math.abs(targetBounds.x - bounds.x);\n }\n }\n }\n }\n }\n this.createGuidelines(diagram, hTarget, vTarget, g, horizontalSnap, verticalSnap, ended);\n if (!horizontalSnap.snapped) {\n this.createHSpacingLines(diagram, g, selectedObject, objectsAtLeft, objectsAtRight, horizontalSnap, verticalSnap, ended, delta, snapObjDistance);\n }\n if (!verticalSnap.snapped) {\n this.createVSpacingLines(diagram, g, selectedObject, objectsAtTop, objectsAtBottom, horizontalSnap, verticalSnap, ended, delta, snapObjDistance);\n }\n };\n /**\n * @private\n */\n Snapping.prototype.snapConnectorEnd = function (point) {\n var snapSettings = this.diagram.snapSettings;\n var zoomFactor = 1;\n if (snapSettings.constraints & SnapConstraints.SnapToLines) {\n point.x = this.round(point.x, snapSettings.verticalGridlines.scaledIntervals, zoomFactor);\n point.y = this.round(point.y, snapSettings.horizontalGridlines.scaledIntervals, zoomFactor);\n }\n return point;\n };\n Snapping.prototype.canBeTarget = function (diagram, node) {\n node = this.diagram.nameTable[node.id];\n return !(isSelected(this.diagram, node, false));\n };\n Snapping.prototype.snapSize = function (diagram, horizontalSnap, verticalSnap, snapLine, deltaX, deltaY, selectedObject, ended) {\n var lengthX;\n var lengthY;\n var snapSettings = this.diagram.snapSettings;\n var scroller = this.diagram.scroller;\n var hTarget;\n var vTarget;\n var bounds = getBounds(selectedObject.wrapper);\n var nameTable = diagram.nameTable;\n var sameWidth = [];\n var sameHeight = [];\n var scale = diagram.scroller.currentZoom;\n var hoffset = -scroller.horizontalOffset;\n var voffset = -scroller.verticalOffset;\n var snapObjDistance = snapSettings.snapObjectDistance / scale;\n var viewPort = new Rect(0, 0, scroller.viewPortWidth, scroller.viewPortHeight);\n var hintersectedrect = new Rect(hoffset / scale, (bounds.y - 5) / scale, viewPort.width / scale, (bounds.height + 10) / scale);\n var vintersectedrect = new Rect((bounds.x - 5) / scale, voffset / scale, (bounds.width + 10) / scale, viewPort.height / scale);\n viewPort = new Rect(hoffset / scale, voffset / scale, viewPort.width / scale, viewPort.height / scale);\n var nodesInView = [];\n var nodes = this.findNodes(diagram.spatialSearch, selectedObject, vintersectedrect, viewPort, nodesInView);\n var i;\n var target;\n var targetBounds;\n for (i = 0; i < nodes.length; i++) {\n target = nodes[i];\n if (this.canConsider(nameTable, selectedObject, target) && !(this.diagram.nameTable[target.id] instanceof Connector)) {\n targetBounds = target.bounds;\n if (lengthX == null || lengthX > Math.abs(targetBounds.y - bounds.y)) {\n if (horizontalSnap.left) {\n if (Math.abs(bounds.x + deltaX - targetBounds.x) <= snapObjDistance) {\n hTarget = this.createSnapObject(targetBounds, bounds, 'left');\n lengthX = Math.abs(targetBounds.y - bounds.y);\n }\n else if (Math.abs(bounds.x + deltaX - targetBounds.x - targetBounds.width) <= snapObjDistance) {\n hTarget = this.createSnapObject(targetBounds, bounds, 'leftRight');\n lengthX = Math.abs(targetBounds.y - bounds.y);\n }\n }\n else if (horizontalSnap.right) {\n if (Math.abs(bounds.x + deltaX + bounds.width - targetBounds.x - targetBounds.width) <= snapObjDistance) {\n hTarget = this.createSnapObject(targetBounds, bounds, 'right');\n lengthX = Math.abs(targetBounds.y - bounds.y);\n }\n else if (Math.abs(bounds.x + deltaX + bounds.width - targetBounds.x) <= snapObjDistance) {\n hTarget = this.createSnapObject(targetBounds, bounds, 'rightLeft');\n lengthX = Math.abs(targetBounds.y - bounds.y);\n }\n }\n }\n }\n }\n nodes = this.findNodes(diagram.spatialSearch, selectedObject, hintersectedrect, viewPort);\n for (var i_1 = 0; i_1 < nodes.length; i_1++) {\n var target_1 = nodes[i_1];\n if (this.canConsider(nameTable, selectedObject, target_1) && !(this.diagram.nameTable[target_1.id] instanceof Connector)) {\n var targetBounds_1 = target_1.bounds;\n if (lengthY == null || lengthY > Math.abs(targetBounds_1.x - bounds.x)) {\n if (verticalSnap.top) {\n if (Math.abs(bounds.y + deltaY - targetBounds_1.y) <= snapObjDistance) {\n vTarget = this.createSnapObject(targetBounds_1, bounds, 'top');\n lengthY = Math.abs(targetBounds_1.x - bounds.x);\n }\n else if (Math.abs(bounds.y + deltaY - targetBounds_1.y - targetBounds_1.height) <= snapObjDistance) {\n vTarget = this.createSnapObject(targetBounds_1, bounds, 'topBottom');\n lengthY = Math.abs(targetBounds_1.x - bounds.x);\n }\n }\n else if (verticalSnap.bottom) {\n if (Math.abs(bounds.y + bounds.height + deltaY - targetBounds_1.y - targetBounds_1.height) <= snapObjDistance) {\n vTarget = this.createSnapObject(targetBounds_1, bounds, 'bottom');\n lengthY = Math.abs(targetBounds_1.x - bounds.x);\n }\n else if (Math.abs(bounds.y + bounds.height + deltaY - targetBounds_1.y) <= snapObjDistance) {\n vTarget = this.createSnapObject(targetBounds_1, bounds, 'bottomTop');\n lengthY = Math.abs(targetBounds_1.x - bounds.x);\n }\n }\n }\n }\n }\n for (i = 0; i < nodesInView.length; i++) {\n target = nodesInView[i];\n if (this.canConsider(nameTable, selectedObject, target)) {\n var targetBounds_2 = target.bounds;\n var delta = horizontalSnap.left ? -deltaX : deltaX;\n var difference = Math.abs(bounds.width + delta - targetBounds_2.width);\n var actualDiff = void 0;\n if (difference <= snapObjDistance) {\n actualDiff = horizontalSnap.left ? -targetBounds_2.width + bounds.width : targetBounds_2.width - bounds.width;\n sameWidth[sameWidth.length] = { source: target, difference: difference, offset: actualDiff };\n }\n delta = verticalSnap.top ? -deltaY : deltaY;\n var dify = Math.abs(bounds.height + delta - targetBounds_2.height);\n if (dify <= snapObjDistance) {\n actualDiff = verticalSnap.top ? -targetBounds_2.height + bounds.height : targetBounds_2.height - bounds.height;\n sameHeight[sameHeight.length] = { source: target, difference: dify, offset: actualDiff };\n }\n }\n }\n var g;\n if (!diagram.getTool) {\n var g_1 = this.createGuidelines(diagram, hTarget, vTarget, snapLine, horizontalSnap, verticalSnap, ended);\n }\n if (!horizontalSnap.snapped && sameWidth.length > 0 && (horizontalSnap.left || horizontalSnap.right)) {\n this.addSameWidthLines(diagram, snapLine, sameWidth, horizontalSnap, ended, selectedObject);\n }\n if (!verticalSnap.snapped && sameHeight.length > 0 && (verticalSnap.top || verticalSnap.bottom)) {\n this.addSameHeightLines(diagram, snapLine, sameHeight, verticalSnap, ended, selectedObject);\n }\n };\n /**\n * Snap to object on top\n * @private\n */\n Snapping.prototype.snapTop = function (horizontalSnap, verticalSnap, snapLine, deltaX, deltaY, shape, ended, initialBoundsT) {\n var dify = deltaY;\n verticalSnap.top = true;\n var y;\n horizontalSnap.left = horizontalSnap.right = false;\n var zoomFactor = 1;\n //let initialBoundsT: Rect = new Rect(shape.offsetX, shape.offsetY, shape.width, shape.height);\n if (this.diagram.snapSettings.constraints & SnapConstraints.SnapToObject && !shape.rotateAngle) {\n //(!this.selectedObject.isLane && !this.selectedObject.isSwimlane)) {\n y = initialBoundsT.y - initialBoundsT.height * shape.pivot.y + deltaY - (shape.offsetY - shape.height * shape.pivot.y);\n this.snapSize(this.diagram, horizontalSnap, verticalSnap, snapLine, deltaX, y, this.diagram.selectedItems, ended);\n }\n if (!verticalSnap.snapped) {\n if (this.diagram.snapSettings.constraints & SnapConstraints.SnapToHorizontalLines) {\n var top_1 = initialBoundsT.y - initialBoundsT.height * shape.pivot.y;\n var actualTop = top_1 + deltaY;\n var roundedTop = this.round(actualTop, this.diagram.snapSettings.horizontalGridlines.scaledIntervals, zoomFactor);\n dify = roundedTop - top_1;\n }\n }\n else {\n dify = (deltaY - y) + verticalSnap.offset;\n }\n return dify;\n };\n /**\n * Snap to object on right\n * @private\n */\n Snapping.prototype.snapRight = function (horizontalSnap, verticalSnap, snapLine, deltaX, deltaY, shape, ended, initialBound) {\n var difx = deltaX;\n var x;\n horizontalSnap.right = true;\n verticalSnap.top = verticalSnap.bottom = false;\n var zoomFactor = 1;\n //let initialBound: Rect = new Rect(shape.offsetX, shape.offsetY, shape.width, shape.height);\n if (this.diagram.snapSettings.constraints & SnapConstraints.SnapToObject && !shape.rotateAngle) {\n //(!this.selectedObject.isLane && !this.selectedObject.isSwimlane)) {\n x = initialBound.x + initialBound.width * (1 - shape.pivot.x) + deltaX - (shape.offsetX + shape.width * (1 - shape.pivot.x));\n this.snapSize(this.diagram, horizontalSnap, verticalSnap, snapLine, x, deltaY, this.diagram.selectedItems, ended);\n }\n if (!horizontalSnap.snapped) {\n if (this.diagram.snapSettings.constraints & SnapConstraints.SnapToVerticalLines) {\n var right = initialBound.x + initialBound.width * (1 - shape.pivot.x);\n var actualRight = right + deltaX;\n var roundedRight = this.round(actualRight, this.diagram.snapSettings.verticalGridlines.scaledIntervals, zoomFactor);\n difx = roundedRight - right;\n }\n }\n else {\n difx = (deltaX - x) + horizontalSnap.offset;\n }\n return difx;\n };\n /**\n * Snap to object on left\n * @private\n */\n Snapping.prototype.snapLeft = function (horizontalSnap, verticalSnap, snapLine, deltaX, deltaY, shape, ended, initialBoundsB) {\n var difx = deltaX;\n var x = 0;\n horizontalSnap.left = true;\n verticalSnap.top = verticalSnap.bottom = false;\n var zoomFactor = 1;\n //let initialBoundsB: Rect = new Rect(shape.offsetX, shape.offsetY, shape.width, shape.height);\n if (this.diagram.snapSettings.constraints & SnapConstraints.SnapToObject && !shape.rotateAngle) {\n //(!this.selectedObject.isLane && !this.selectedObject.isSwimlane)) {\n x = initialBoundsB.x - initialBoundsB.width * shape.pivot.x + deltaX - (shape.offsetX - shape.width * shape.pivot.x);\n this.snapSize(this.diagram, horizontalSnap, verticalSnap, snapLine, x, deltaY, this.diagram.selectedItems, ended);\n }\n if (!horizontalSnap.snapped) {\n if (this.diagram.snapSettings.constraints & SnapConstraints.SnapToVerticalLines) {\n var left = initialBoundsB.x - initialBoundsB.width * shape.pivot.x;\n var actualLeft = left + deltaX;\n var roundedLeft = this.round(actualLeft, this.diagram.snapSettings.horizontalGridlines.scaledIntervals, zoomFactor);\n difx = roundedLeft - left;\n }\n }\n else {\n difx = (deltaX - x) + horizontalSnap.offset;\n }\n return difx;\n };\n /**\n * Snap to object on bottom\n * @private\n */\n Snapping.prototype.snapBottom = function (horizontalSnap, verticalSnap, snapLine, deltaX, deltaY, shape, ended, initialRect) {\n var dify = deltaY;\n verticalSnap.bottom = true;\n horizontalSnap.left = horizontalSnap.right = false;\n var zoomFactor = 1;\n var y = 0;\n //let initialRect: Rect = new Rect(shape.offsetX, shape.offsetY, shape.width, shape.height);\n if (this.diagram.snapSettings.constraints & SnapConstraints.SnapToObject && !shape.rotateAngle) {\n //(!this.selectedObject.isLane && !this.selectedObject.isSwimlane)) {\n y = initialRect.y + initialRect.height * (1 - shape.pivot.y) + deltaY - (shape.offsetY + shape.height * (1 - shape.pivot.y));\n this.snapSize(this.diagram, horizontalSnap, verticalSnap, snapLine, deltaX, y, this.diagram.selectedItems, ended);\n }\n var bounds = getBounds(shape.wrapper);\n if (!verticalSnap.snapped) {\n if (this.diagram.snapSettings.constraints & SnapConstraints.SnapToHorizontalLines) {\n var bottom = initialRect.y + initialRect.height * (1 - shape.pivot.y);\n var actualBottom = bottom + deltaY;\n var roundedBottom = this.round(actualBottom, this.diagram.snapSettings.horizontalGridlines.scaledIntervals, zoomFactor);\n dify = roundedBottom - bottom;\n }\n }\n else {\n dify = (deltaY - y) + verticalSnap.offset;\n }\n return dify;\n };\n /**\n * To create the same width and same size lines\n */\n Snapping.prototype.createGuidelines = function (diagram, hTarget, vTarget, snapLine, horizontalSnap, verticalSnap, ended) {\n if (hTarget) {\n horizontalSnap.offset = hTarget.offsetX;\n horizontalSnap.snapped = true;\n if (!ended) {\n if (hTarget.type === 'sideAlign') {\n this.renderAlignmentLines(hTarget.start, hTarget.end, snapLine, diagram.scroller.transform);\n }\n else {\n this.renderAlignmentLines(hTarget.start, hTarget.end, snapLine, diagram.scroller.transform);\n }\n }\n }\n if (vTarget) {\n verticalSnap.offset = vTarget.offsetY;\n verticalSnap.snapped = true;\n if (!ended) {\n if (vTarget.type === 'sideAlign') {\n this.renderAlignmentLines(vTarget.start, vTarget.end, snapLine, diagram.scroller.transform);\n }\n else {\n this.renderAlignmentLines(vTarget.start, vTarget.end, snapLine, diagram.scroller.transform);\n }\n }\n }\n return snapLine;\n };\n /**\n * To create the alignment lines\n */\n Snapping.prototype.renderAlignmentLines = function (start, end, svg, transform) {\n start = {\n x: (start.x + transform.tx) * transform.scale,\n y: (start.y + transform.ty) * transform.scale\n };\n end = {\n x: (end.x + transform.tx) * transform.scale,\n y: (end.y + transform.ty) * transform.scale\n };\n var line1 = {\n stroke: '#07EDE1', strokeWidth: 1, startPoint: { x: start.x, y: start.y },\n endPoint: { x: end.x, y: end.y }, fill: '#07EDE1', dashArray: '', width: 1,\n x: 0, y: 0, height: 0, angle: 0, pivotX: 0,\n pivotY: 0, visible: true, opacity: 1, id: randomId()\n };\n var i = 0;\n this.line.push(line1);\n for (i = 0; i < this.line.length; i++) {\n this.diagram.diagramRenderer.drawLine(svg, this.line.pop());\n }\n };\n /**\n * To create Horizontal spacing lines\n */\n Snapping.prototype.createHSpacingLines = function (diagram, g, shape, objectsAtLeft, objectsAtRight, horizontalSnap, verticalSnap, ended, delta, snapObjDistance) {\n var top = 0;\n this.sortByDistance(objectsAtLeft, 'distance', true);\n this.sortByDistance(objectsAtRight, 'distance', true);\n var equallySpaced = [];\n var bounds = getBounds(shape.wrapper);\n var nearestleft;\n var nearestright;\n var targetBounds;\n var equaldistance;\n if (objectsAtLeft.length > 0) {\n equallySpaced[equallySpaced.length] = objectsAtLeft[0];\n nearestleft = ((objectsAtLeft[0].obj).bounds);\n top = nearestleft.y;\n if (objectsAtLeft.length > 1) {\n targetBounds = ((objectsAtLeft[1].obj).bounds);\n equaldistance = nearestleft.x - targetBounds.x - targetBounds.width;\n if (Math.abs(equaldistance - objectsAtLeft[0].distance) <= snapObjDistance) {\n top = this.findEquallySpacedNodesAtLeft(objectsAtLeft, equaldistance, top, equallySpaced);\n }\n else {\n equaldistance = objectsAtLeft[0].distance;\n }\n }\n else {\n equaldistance = objectsAtLeft[0].distance;\n }\n }\n this.sortByDistance(equallySpaced, 'distance');\n equallySpaced[equallySpaced.length] = { obj: shape, distance: 0 };\n top = bounds.y < top || !top ? bounds.y : top;\n if (objectsAtRight.length > 0) {\n var dist = void 0;\n nearestright = ((objectsAtRight[0].obj).bounds);\n top = nearestright.y < top ? nearestright.y : top;\n if (objectsAtRight.length > 1) {\n targetBounds = ((objectsAtRight[1].obj).bounds);\n dist = targetBounds.x - nearestright.x - nearestright.width;\n }\n if (objectsAtLeft.length > 0) {\n if (Math.abs(objectsAtRight[0].distance - objectsAtLeft[0].distance) <= snapObjDistance) {\n var adjustablevalue = Math.abs(objectsAtRight[0].distance - objectsAtLeft[0].distance) / 2;\n (objectsAtRight[0].distance < objectsAtLeft[0].distance) ?\n equaldistance -= adjustablevalue : equaldistance += adjustablevalue;\n equallySpaced[equallySpaced.length] = objectsAtRight[0];\n }\n else if (objectsAtLeft.length === 1) {\n nearestleft = undefined;\n equallySpaced.splice(0, 1);\n equallySpaced[equallySpaced.length] = objectsAtRight[0];\n equaldistance = dist;\n }\n }\n else {\n equaldistance = dist;\n equallySpaced[equallySpaced.length] = objectsAtRight[0];\n }\n if (objectsAtRight.length > 1 && nearestright.x + nearestright.width < targetBounds.x) {\n top = this.findEquallySpacedNodesAtRight(objectsAtRight, dist, top, equallySpaced, snapObjDistance);\n }\n }\n if (equallySpaced.length > 2) {\n this.addHSpacingLines(diagram, g, equallySpaced, ended, top);\n var deltaHorizontal = 0;\n if (ended) {\n deltaHorizontal = delta.x;\n }\n if (nearestleft) {\n horizontalSnap.offset = equaldistance - Math.abs(bounds.x + deltaHorizontal - nearestleft.x - nearestleft.width)\n + deltaHorizontal;\n }\n else if (nearestright) {\n horizontalSnap.offset = Math.abs(bounds.x + bounds.width + deltaHorizontal - nearestright.x)\n - equaldistance + deltaHorizontal;\n }\n horizontalSnap.snapped = true;\n }\n };\n /**\n * To create vertical spacing lines\n */\n Snapping.prototype.createVSpacingLines = function (diagram, g, shape, objectsAtTop, objectsAtBottom, horizontalSnap, verticalSnap, ended, delta, snapObjDistance) {\n var right = 0;\n this.sortByDistance(objectsAtTop, 'distance', true);\n this.sortByDistance(objectsAtBottom, 'distance', true);\n var equallySpaced = [];\n var bounds = getBounds(shape.wrapper);\n var nearesttop;\n var nearestbottom;\n var targetBounds;\n var equaldistance;\n if (objectsAtTop.length > 0) {\n equallySpaced[equallySpaced.length] = objectsAtTop[0];\n nearesttop = ((objectsAtTop[0].obj).bounds);\n right = nearesttop.x + nearesttop.width;\n if (objectsAtTop.length > 1) {\n targetBounds = ((objectsAtTop[1].obj).bounds);\n equaldistance = nearesttop.y - targetBounds.y - targetBounds.height;\n if (Math.abs(equaldistance - objectsAtTop[0].distance) <= snapObjDistance) {\n right = this.findEquallySpacedNodesAtTop(objectsAtTop, equaldistance, right, equallySpaced);\n }\n else {\n equaldistance = objectsAtTop[0].distance;\n }\n }\n else {\n equaldistance = objectsAtTop[0].distance;\n }\n }\n this.sortByDistance(equallySpaced, 'distance');\n equallySpaced[equallySpaced.length] = { obj: shape, distance: 0 };\n right = bounds.x + bounds.width > right || !right ? bounds.x + bounds.width : right;\n var dist;\n if (objectsAtBottom.length > 0) {\n nearestbottom = ((objectsAtBottom[0].obj).bounds);\n right = nearestbottom.x + nearestbottom.width > right ? nearestbottom.x + nearestbottom.width : right;\n if (objectsAtBottom.length > 1) {\n targetBounds = ((objectsAtBottom[1].obj).bounds);\n dist = targetBounds.y - nearestbottom.y - nearestbottom.height;\n }\n if (objectsAtTop.length > 0) {\n if (Math.abs(objectsAtBottom[0].distance - objectsAtTop[0].distance) <= snapObjDistance) {\n var adjustablevalue = Math.abs(objectsAtBottom[0].distance - objectsAtTop[0].distance) / 2;\n (objectsAtBottom[0].distance < objectsAtTop[0].distance) ?\n equaldistance -= adjustablevalue : equaldistance += adjustablevalue;\n equallySpaced[equallySpaced.length] = objectsAtBottom[0];\n }\n else if (objectsAtTop.length === 1) {\n nearesttop = undefined;\n equallySpaced.splice(0, 1);\n equallySpaced[equallySpaced.length] = objectsAtBottom[0];\n equaldistance = dist;\n }\n }\n else {\n equaldistance = dist;\n equallySpaced[equallySpaced.length] = objectsAtBottom[0];\n }\n if (objectsAtBottom.length > 1 && targetBounds.y > nearestbottom.y + nearestbottom.height) {\n right = this.findEquallySpacedNodesAtBottom(objectsAtBottom, dist, right, equallySpaced, snapObjDistance);\n }\n }\n if (equallySpaced.length > 2) {\n this.addVSpacingLines(diagram, g, equallySpaced, ended, right);\n var deltaVertical = 0;\n if (ended) {\n deltaVertical = delta.y;\n }\n if (nearesttop) {\n verticalSnap.offset = equaldistance - Math.abs(bounds.y + deltaVertical - nearesttop.y - nearesttop.height) + deltaVertical;\n }\n else if (nearestbottom) {\n verticalSnap.offset = Math.abs(bounds.y + bounds.height + deltaVertical - nearestbottom.y) - equaldistance + deltaVertical;\n }\n verticalSnap.snapped = true;\n }\n };\n /**\n * Add the Horizontal spacing lines\n */\n Snapping.prototype.addHSpacingLines = function (diagram, g, equallySpaced, ended, top) {\n var i;\n var start;\n var end;\n if (!ended) {\n for (i = 0; i < equallySpaced.length - 1; i++) {\n var crnt = equallySpaced[i].obj instanceof Selector ?\n getBounds((equallySpaced[i].obj).wrapper) : ((equallySpaced[i].obj).bounds);\n var next = equallySpaced[i + 1].obj instanceof Selector ?\n getBounds((equallySpaced[i + 1].obj).wrapper) : ((equallySpaced[i + 1].obj).bounds);\n start = { x: crnt.x + crnt.width, y: top - 15 };\n end = { x: next.x, y: top - 15 };\n this.renderSpacingLines(start, end, g, getAdornerLayerSvg(this.diagram.element.id), diagram.scroller.transform);\n }\n }\n };\n /**\n * Add the vertical spacing lines\n */\n Snapping.prototype.addVSpacingLines = function (diagram, g, equallySpacedObjects, ended, right) {\n var start;\n var end;\n if (!ended) {\n for (var i = 0; i < equallySpacedObjects.length - 1; i++) {\n var crnt = equallySpacedObjects[i].obj instanceof Selector ?\n getBounds((equallySpacedObjects[i].obj).wrapper) : ((equallySpacedObjects[i].obj).bounds);\n var next = equallySpacedObjects[i + 1].obj instanceof Selector ?\n getBounds((equallySpacedObjects[i + 1].obj).wrapper) :\n ((equallySpacedObjects[i + 1].obj).bounds);\n start = { x: right + 15, y: crnt.y + crnt.height };\n end = { x: right + 15, y: next.y };\n this.renderSpacingLines(start, end, g, getAdornerLayerSvg(this.diagram.element.id), diagram.scroller.transform);\n }\n }\n };\n /**\n * To add same width lines\n */\n Snapping.prototype.addSameWidthLines = function (diagram, snapLine, sameWidths, horizontalSnap, ended, shape) {\n this.sortByDistance(sameWidths, 'offset');\n var bounds = getBounds(shape.wrapper);\n var target = sameWidths[0];\n var startPt;\n var endPt;\n var targetBounds = (target.source).bounds;\n var sameSizes = [];\n sameSizes.push(sameWidths[0]);\n var i;\n var crntbounds;\n for (i = 1; i < sameWidths.length; i++) {\n crntbounds = (sameWidths[i].source).bounds;\n if (crntbounds.width === targetBounds.width) {\n sameSizes.push(sameWidths[i]);\n }\n }\n if (!ended) {\n startPt = { x: bounds.x + target.offset, y: bounds.y - 15 };\n endPt = { x: bounds.x + bounds.width + target.offset, y: bounds.y - 15 };\n this.renderSpacingLines(startPt, endPt, snapLine, getAdornerLayerSvg(this.diagram.element.id), diagram.scroller.transform);\n for (i = 0; i < sameSizes.length; i++) {\n bounds = (sameSizes[i].source).bounds;\n startPt = { x: bounds.x, y: bounds.y - 15 };\n endPt = { x: bounds.x + bounds.width, y: bounds.y - 15 };\n this.renderSpacingLines(startPt, endPt, snapLine, getAdornerLayerSvg(this.diagram.element.id), diagram.scroller.transform);\n }\n }\n horizontalSnap.offset = target.offset;\n horizontalSnap.snapped = true;\n };\n /**\n * To add same height lines\n */\n Snapping.prototype.addSameHeightLines = function (diagram, snapLine, sameHeights, verticalSnap, ended, shape) {\n this.sortByDistance(sameHeights, 'offset');\n var bounds = getBounds(shape.wrapper);\n var target = sameHeights[0];\n var targetBounds = (target.source).bounds;\n var start;\n var end;\n var sameSizes = [];\n sameSizes.push(sameHeights[0]);\n var i;\n var crntbounds;\n for (i = 0; i < sameHeights.length; i++) {\n crntbounds = (sameHeights[i].source).bounds;\n if (crntbounds.height === targetBounds.height) {\n sameSizes.push(sameHeights[i]);\n }\n }\n if (!ended) {\n start = { x: bounds.x + bounds.width + 15, y: bounds.y + target.offset };\n end = { x: bounds.x + bounds.width + 15, y: bounds.y + target.offset + bounds.height };\n this.renderSpacingLines(start, end, snapLine, getAdornerLayerSvg(this.diagram.element.id), diagram.scroller.transform);\n for (i = 0; i < sameSizes.length; i++) {\n bounds = (sameSizes[i].source).bounds;\n start = { x: bounds.x + bounds.width + 15, y: bounds.y };\n end = { x: bounds.x + bounds.width + 15, y: bounds.y + bounds.height };\n this.renderSpacingLines(start, end, snapLine, getAdornerLayerSvg(this.diagram.element.id), diagram.scroller.transform);\n }\n }\n verticalSnap.offset = target.offset;\n verticalSnap.snapped = true;\n };\n /**\n * Render spacing lines\n */\n Snapping.prototype.renderSpacingLines = function (start, end, snapLine, svg, transform) {\n var d;\n var d1;\n var line1;\n var element = new PathElement();\n var options = {};\n start = {\n x: (start.x + transform.tx) * transform.scale,\n y: (start.y + transform.ty) * transform.scale\n };\n end = {\n x: (end.x + transform.tx) * transform.scale,\n y: (end.y + transform.ty) * transform.scale\n };\n if (start.x === end.x) {\n d = 'M' + (start.x - 5) + ' ' + (start.y + 5) + 'L' + start.x + ' ' + start.y +\n 'L' + (start.x + 5) + ' ' + (start.y + 5) + 'z' + 'M' + (end.x - 5) + ' ' +\n (end.y - 5) + ' L' + end.x + ' ' + end.y + ' L' +\n (end.x + 5) + ' ' + (end.y - 5) + 'z';\n line1 = {\n startPoint: { x: start.x - 8, y: start.y - 1 },\n endPoint: { x: start.x + 8, y: start.y - 1 },\n stroke: '#07EDE1',\n strokeWidth: 1, fill: '#07EDE1', dashArray: '', width: 1, x: 0, y: 0, height: 0, angle: 0, pivotX: 0,\n pivotY: 0, visible: true, opacity: 1, id: randomId()\n };\n element.data = d;\n options.data = element.data;\n options.angle = 0;\n options.pivotX = 0;\n options.pivotY = 0;\n options.x = 0;\n options.y = 0;\n options.height = 0;\n options.width = 1;\n options.id = randomId();\n this.diagram.diagramRenderer.drawPath(snapLine, options);\n this.line.push(line1);\n this.diagram.diagramRenderer.drawLine(snapLine, this.line.pop());\n line1 = {\n startPoint: { x: end.x - 8, y: end.y + 1 },\n endPoint: { x: end.x + 8, y: end.y + 1 },\n stroke: '#07EDE1',\n strokeWidth: 1, fill: '#07EDE1', dashArray: '', width: 1, x: 0, y: 0, height: 0, angle: 0, pivotX: 0,\n pivotY: 0, visible: true, opacity: 1, id: getAdornerLayerSvg(this.diagram.element.id).id + 'spacing'\n };\n this.line.push(line1);\n this.diagram.diagramRenderer.drawLine(snapLine, this.line.pop());\n }\n else {\n d = 'M' + (start.x + 5) + ' ' + (start.y + 5) + ' L' + start.x + ' ' + start.y +\n ' L' + (start.x + 5) + ' ' + (start.y - 5) + 'z' + 'M' + (end.x - 5) + ' ' +\n (end.y - 5) + ' L' + end.x + ' ' + end.y +\n ' L' + (end.x - 5) + ' ' + (end.y + 5) + 'z';\n element.data = d;\n options.data = d;\n options.angle = 0;\n options.pivotX = 0;\n options.pivotY = 0;\n options.x = 0;\n options.y = 0;\n options.height = 0;\n options.width = 1;\n options.id = randomId();\n this.diagram.diagramRenderer.drawPath(snapLine, options);\n line1 = {\n visible: true, opacity: 1, id: randomId(),\n startPoint: { x: start.x - 1, y: start.y - 8 },\n endPoint: { x: start.x - 1, y: start.y + 8 },\n stroke: '#07EDE1',\n strokeWidth: 1, fill: '#07EDE1', dashArray: '0', width: 1, x: 0, y: 0, height: 0, angle: 0, pivotX: 0,\n pivotY: 0\n };\n this.line.push(line1);\n this.diagram.diagramRenderer.drawLine(snapLine, this.line.pop());\n line1 = {\n width: 1, x: 0, y: 0, height: 0, angle: 0, pivotX: 0,\n pivotY: 0, visible: true, opacity: 1, id: randomId(),\n startPoint: { x: end.x + 1, y: end.y - 8 },\n endPoint: { x: end.x + 1, y: end.y + 8 },\n stroke: '#07EDE1',\n strokeWidth: 1, fill: '#07EDE1', dashArray: '0'\n };\n this.line.push(line1);\n this.diagram.diagramRenderer.drawLine(snapLine, this.line.pop());\n }\n line1 = {\n startPoint: { x: start.x, y: start.y },\n endPoint: { x: end.x, y: end.y }, stroke: '#07EDE1', strokeWidth: 1, fill: '#07EDE1',\n dashArray: '0', width: 1, x: 0, y: 0, height: 0, angle: 0, pivotX: 0,\n pivotY: 0, visible: true, opacity: 1, id: randomId()\n };\n this.line.push(line1);\n this.diagram.diagramRenderer.drawLine(snapLine, this.line.pop());\n };\n /**\n * To Create Snap object with position, initial bounds, and final bounds\n * @private\n */\n Snapping.prototype.createSnapObject = function (targetBounds, bounds, snap) {\n var snapObject;\n switch (snap) {\n case 'left':\n snapObject = {\n start: { x: (targetBounds.x), y: Math.min(targetBounds.y, bounds.y) },\n end: { x: (targetBounds.x), y: Math.max(targetBounds.y + targetBounds.height, bounds.y + bounds.height) },\n offsetX: targetBounds.x - bounds.x, offsetY: 0, type: 'sideAlign'\n };\n break;\n case 'right':\n snapObject = {\n type: 'sideAlign',\n start: { x: (targetBounds.x + targetBounds.width), y: Math.min(targetBounds.y, bounds.y) },\n offsetX: targetBounds.x + targetBounds.width - bounds.x - bounds.width,\n offsetY: 0,\n end: {\n x: (targetBounds.x + targetBounds.width),\n y: Math.max(targetBounds.y + targetBounds.height, bounds.y + bounds.height)\n },\n };\n break;\n case 'top':\n snapObject = {\n offsetY: targetBounds.y - bounds.y, offsetX: 0, type: 'sideAlign',\n start: { x: (Math.min(targetBounds.x, bounds.x)), y: targetBounds.y },\n end: { x: (Math.max(targetBounds.x + targetBounds.width, bounds.x + bounds.width)), y: targetBounds.y },\n };\n break;\n case 'bottom':\n snapObject = {\n type: 'sideAlign', offsetY: targetBounds.y + targetBounds.height - bounds.y - bounds.height, offsetX: 0,\n end: {\n x: (Math.max(targetBounds.x + targetBounds.width, bounds.x + bounds.width)),\n y: targetBounds.y + targetBounds.height\n },\n start: { x: (Math.min(targetBounds.x, bounds.x)), y: targetBounds.y + targetBounds.height },\n };\n break;\n case 'topBottom':\n snapObject = {\n start: { x: (Math.min(targetBounds.x, bounds.x)), y: targetBounds.y + targetBounds.height },\n end: {\n x: (Math.max(targetBounds.x + targetBounds.width, bounds.x + bounds.width)),\n y: targetBounds.y + targetBounds.height\n },\n offsetY: targetBounds.y + targetBounds.height - bounds.y, offsetX: 0, type: 'sideAlign'\n };\n break;\n case 'bottomTop':\n snapObject = {\n start: { x: (Math.min(targetBounds.x, bounds.x)), y: targetBounds.y },\n end: { x: (Math.max(targetBounds.x + targetBounds.width, bounds.x + bounds.width)), y: targetBounds.y },\n offsetY: targetBounds.y - bounds.y - bounds.height, offsetX: 0, type: 'sideAlign'\n };\n break;\n case 'leftRight':\n snapObject = {\n start: { x: (targetBounds.x + targetBounds.width), y: Math.min(targetBounds.y, bounds.y) },\n end: {\n x: (targetBounds.x + targetBounds.width),\n y: Math.max(targetBounds.y + targetBounds.height, bounds.y + bounds.height)\n },\n offsetX: targetBounds.x + targetBounds.width - bounds.x, offsetY: 0, type: 'sideAlign'\n };\n break;\n case 'rightLeft':\n snapObject = {\n start: { x: (targetBounds.x), y: (Math.min(targetBounds.y, bounds.y)) },\n end: { x: (targetBounds.x), y: Math.max(targetBounds.y + targetBounds.height, bounds.y + bounds.height) },\n offsetX: targetBounds.x - bounds.x - bounds.width, offsetY: 0, type: 'sideAlign'\n };\n break;\n case 'centerX':\n snapObject = {\n start: { x: (targetBounds.x + targetBounds.width / 2), y: (Math.min(targetBounds.y, bounds.y)) },\n end: {\n x: (targetBounds.x + targetBounds.width / 2),\n y: Math.max(targetBounds.y + targetBounds.height, bounds.y + bounds.height)\n },\n offsetX: targetBounds.x + targetBounds.width / 2 - (bounds.x + bounds.width / 2), offsetY: 0, type: 'centerAlign'\n };\n break;\n case 'centerY':\n snapObject = {\n start: { x: (Math.min(targetBounds.x, bounds.x)), y: targetBounds.y + targetBounds.height / 2 },\n end: {\n x: (Math.max(targetBounds.x + targetBounds.width, bounds.x + bounds.width)),\n y: targetBounds.y + targetBounds.height / 2\n },\n offsetY: targetBounds.y + targetBounds.height / 2 - (bounds.y + bounds.height / 2), offsetX: 0, type: 'centerAlign'\n };\n break;\n }\n return snapObject;\n };\n /**\n * Calculate the snap angle\n * @private\n */\n Snapping.prototype.snapAngle = function (diagram, angle) {\n var snapSettings = this.diagram.snapSettings;\n var snapAngle = snapSettings.snapAngle;\n var width = angle % (snapAngle || 0);\n if (width >= (snapAngle / 2)) {\n return angle + snapAngle - width;\n }\n else {\n return angle - width;\n }\n };\n /**\n * Check whether the node to be snapped or not.\n */\n Snapping.prototype.canConsider = function (nameTable, selectedObject, target) {\n var consider = false;\n if (this.diagram.selectedItems.nodes.length && this.diagram.selectedItems.nodes[0].id === target.id) {\n return false;\n }\n else {\n return true;\n }\n };\n /**\n * Find the total number of nodes in diagram using SpatialSearch\n */\n Snapping.prototype.findNodes = function (spatialSearch, node, child, viewPort, nodesInView) {\n var nodes = [];\n var nd;\n var bounds;\n var quads = spatialSearch.findQuads(nodesInView ? viewPort : child);\n for (var i = 0; i < quads.length; i++) {\n var quad = quads[i];\n if (quad.objects.length > 0) {\n for (var j = 0; j < quad.objects.length; j++) {\n nd = quad.objects[j];\n if (!(this.diagram.nameTable[nd.id] instanceof Connector) && nd.visible) {\n bounds = getBounds(nd);\n if (nodes.indexOf(nd) === -1 && this.intersectsRect(child, bounds)) {\n nodes.push(nd);\n }\n if (nodesInView && nodesInView.indexOf(nd) && this.intersectsRect(viewPort, bounds)) {\n nodesInView.push(nd);\n }\n }\n }\n }\n }\n return nodes;\n };\n Snapping.prototype.intersectsRect = function (child, bounds) {\n return ((((bounds.x < (child.x + child.width)) && (child.x < (bounds.x + bounds.width)))\n && (bounds.y < (child.y + child.height))) && (child.y < (bounds.y + bounds.height)));\n };\n /**\n * To remove grid lines on mouse move and mouse up\n * @private\n */\n Snapping.prototype.removeGuidelines = function (diagram) {\n var selectionRect = getAdornerLayerSvg(this.diagram.element.id).getElementById('_SnappingLines');\n var line = getAdornerLayerSvg(this.diagram.element.id).getElementById('pivotLine');\n if (selectionRect) {\n selectionRect.parentNode.removeChild(selectionRect);\n }\n if (line) {\n line.parentNode.removeChild(line);\n }\n };\n /**\n * Sort the objects by its distance\n */\n Snapping.prototype.sortByDistance = function (obj, value, ascending) {\n var i;\n var j;\n var temp;\n if (ascending) {\n for (i = 0; i < obj.length; i++) {\n for (j = i + 1; j < obj.length; j++) {\n if (obj[i][value] > obj[j][value]) {\n temp = obj[i];\n obj[i] = obj[j];\n obj[j] = temp;\n }\n }\n }\n }\n else {\n for (i = 0; i < obj.length; i++) {\n for (j = i + 1; j < obj.length; j++) {\n if (obj[i][value] < obj[j][value]) {\n temp = obj[i];\n obj[i] = obj[j];\n obj[j] = temp;\n }\n }\n }\n }\n };\n /**\n * To find nodes that are equally placed at left of the selected node\n */\n Snapping.prototype.findEquallySpacedNodesAtLeft = function (objectsAtLeft, equalDistance, top, equallySpaced) {\n var prevBounds;\n var targetBounds;\n var dist;\n var i;\n for (i = 1; i < objectsAtLeft.length; i++) {\n prevBounds = ((objectsAtLeft[i - 1].obj).bounds);\n targetBounds = ((objectsAtLeft[i].obj).bounds);\n dist = prevBounds.x - targetBounds.x - targetBounds.width;\n if (Math.abs(dist - equalDistance) <= 1) {\n equallySpaced[equallySpaced.length] = objectsAtLeft[i];\n if (targetBounds.y < top) {\n top = targetBounds.y;\n }\n }\n else {\n break;\n }\n }\n return top;\n };\n /**\n * To find nodes that are equally placed at right of the selected node\n */\n Snapping.prototype.findEquallySpacedNodesAtRight = function (objectsAtRight, equalDistance, top, equallySpaced, snapObjDistance) {\n var actualDistance = objectsAtRight[0].distance;\n var target;\n var targetBounds;\n var prevBounds;\n var dist;\n if (Math.abs(equalDistance - actualDistance) <= snapObjDistance) {\n for (var i = 0; i < objectsAtRight.length - 1; i++) {\n target = objectsAtRight[i].obj;\n targetBounds = ((objectsAtRight[i + 1].obj).bounds);\n prevBounds = (target.bounds);\n dist = targetBounds.x - prevBounds.x - prevBounds.width;\n if (Math.abs(dist - equalDistance) <= 1) {\n equallySpaced[equallySpaced.length] = objectsAtRight[i + 1];\n if (prevBounds.y < top) {\n top = prevBounds.y;\n }\n }\n else {\n break;\n }\n }\n }\n return top;\n };\n Snapping.prototype.findEquallySpacedNodesAtTop = function (objectsAtTop, equalDistance, right, equallySpaced) {\n var prevBounds;\n var targetBounds;\n var dist;\n for (var i = 1; i < objectsAtTop.length; i++) {\n prevBounds = ((objectsAtTop[i - 1].obj).bounds);\n targetBounds = ((objectsAtTop[i].obj).bounds);\n dist = prevBounds.y - targetBounds.y - targetBounds.height;\n if (Math.abs(dist - equalDistance) <= 1) {\n equallySpaced[equallySpaced.length] = objectsAtTop[i];\n if (targetBounds.x + targetBounds.width > right) {\n right = targetBounds.x + targetBounds.width;\n }\n }\n else {\n break;\n }\n }\n return right;\n };\n /**\n * To find nodes that are equally placed at bottom of the selected node\n */\n Snapping.prototype.findEquallySpacedNodesAtBottom = function (objectsAtBottom, equalDistance, right, equallySpaced, snapObjDistance) {\n var actualDistance = objectsAtBottom[0].distance;\n var target;\n var targetBounds;\n var prevBounds;\n var dist;\n if (Math.abs(equalDistance - actualDistance) <= snapObjDistance) {\n for (var i = 0; i < objectsAtBottom.length - 1; i++) {\n target = objectsAtBottom[i].obj;\n targetBounds = ((objectsAtBottom[i + 1].obj).bounds);\n prevBounds = (target.bounds);\n dist = targetBounds.y - prevBounds.y - prevBounds.height;\n if (Math.abs(dist - equalDistance) <= 1) {\n equallySpaced[equallySpaced.length] = objectsAtBottom[i + 1];\n if (prevBounds.x + prevBounds.width > right) {\n right = prevBounds.x + prevBounds.width;\n }\n }\n else {\n break;\n }\n }\n }\n return right;\n };\n /**\n * To get Adoner layer to draw snapLine\n * @private\n */\n Snapping.prototype.getLayer = function () {\n var snapLine;\n if (this.diagram.snapSettings.constraints & SnapConstraints.SnapToObject) {\n snapLine = document.createElementNS('http://www.w3.org/2000/svg', 'g');\n snapLine.setAttribute('id', '_SnappingLines');\n snapLine.setAttribute('shapeRendering', 'crispEdges');\n getAdornerLayerSvg(this.diagram.element.id).appendChild(snapLine);\n }\n return snapLine;\n };\n /**\n * Constructor for the snapping module\n * @private\n */\n // constructor() {\n // //constructs the snapping module\n // }\n /**\n * To destroy the snapping module\n * @return {void}\n * @private\n */\n Snapping.prototype.destroy = function () {\n /**\n * Destroys the snapping module\n */\n };\n /**\n * Get module name.\n */\n Snapping.prototype.getModuleName = function () {\n /**\n * Returns the module name\n */\n return 'Snapping';\n };\n return Snapping;\n}());\nexport { Snapping };\n","import { Node } from './node';\nimport { DiagramAction } from '../enum/enum';\nimport { removeItem, getObjectType } from '../utility/diagram-util';\nimport { cloneObject } from '../utility/base-util';\n/**\n * Undo redo function used for revert and restore the changes\n */\nvar UndoRedo = /** @class */ (function () {\n /**\n * Constructor for the undo redo module\n * @private\n */\n function UndoRedo() {\n this.groupUndo = false;\n this.childTable = [];\n //constructs the undo redo module\n }\n /** @private */\n UndoRedo.prototype.initHistory = function (diagram) {\n diagram.historyList = {\n canRedo: false, canUndo: false, currentEntry: null,\n push: diagram.addHistoryEntry.bind(diagram), undo: Function, redo: Function,\n startGroupAction: diagram.startGroupAction.bind(diagram), endGroupAction: diagram.endGroupAction.bind(diagram),\n canLog: null, undoStack: [], redoStack: []\n };\n };\n /** @private */\n UndoRedo.prototype.addHistoryEntry = function (entry, diagram) {\n var entryObject = null;\n var nextEntry = null;\n if (diagram.historyList.canLog) {\n var hEntry = diagram.historyList.canLog(entry);\n if (hEntry.cancel === true) {\n return;\n }\n }\n if (diagram.historyList && diagram.historyList.canUndo && diagram.historyList.currentEntry) {\n entryObject = diagram.historyList.currentEntry;\n if (entryObject.next) {\n if (entryObject.previous) {\n nextEntry = entryObject.next;\n nextEntry.previous = null;\n entryObject.next = entry;\n entry.previous = entryObject;\n }\n }\n else {\n entryObject.next = entry;\n entry.previous = entryObject;\n }\n }\n diagram.historyList.currentEntry = entry;\n this.getHistoryList(diagram);\n diagram.historyList.canUndo = true;\n diagram.historyList.canRedo = false;\n };\n /** @private */\n UndoRedo.prototype.undo = function (diagram) {\n var entry = this.getUndoEntry(diagram);\n var endGroupActionCount = 0;\n if (entry) {\n if (entry.category === 'Internal') {\n if (entry.type === 'EndGroup') {\n endGroupActionCount++;\n this.groupUndo = true;\n }\n else {\n this.undoEntry(entry, diagram);\n }\n if (this.groupUndo) {\n this.undoGroupAction(entry, diagram, endGroupActionCount);\n this.groupUndo = false;\n }\n }\n else {\n diagram.historyList.undo(entry);\n }\n }\n };\n UndoRedo.prototype.getHistoryList = function (diagram) {\n var undoStack = [];\n var redoStack = [];\n var currEntry = diagram.historyList.currentEntry;\n var undoObj;\n var redoObj;\n currEntry = diagram.historyList.currentEntry;\n if (diagram.historyList.canUndo || diagram.historyList.undoStack.length === 0) {\n this.getHistroyObject(undoStack, currEntry);\n }\n else {\n this.getHistroyObject(redoStack, currEntry);\n }\n while (currEntry && currEntry.previous) {\n undoObj = currEntry.previous;\n this.getHistroyObject(undoStack, undoObj);\n currEntry = currEntry.previous;\n }\n currEntry = diagram.historyList.currentEntry;\n while (currEntry && currEntry.next) {\n redoObj = currEntry.next;\n this.getHistroyObject(redoStack, redoObj);\n currEntry = currEntry.next;\n }\n diagram.historyList.undoStack = undoStack;\n diagram.historyList.redoStack = redoStack;\n };\n UndoRedo.prototype.getHistroyObject = function (list, obj) {\n if (obj && obj.type !== 'StartGroup' && obj.type !== 'EndGroup') {\n list.push({\n redoObject: obj.redoObject ? obj.redoObject : null,\n undoObject: obj.undoObject ? obj.undoObject : null,\n type: obj.type ? obj.type : null,\n category: obj.category ? obj.category : null\n });\n }\n };\n UndoRedo.prototype.undoGroupAction = function (entry, diagram, endGroupActionCount) {\n while (endGroupActionCount !== 0) {\n this.undoEntry(entry, diagram);\n entry = this.getUndoEntry(diagram);\n if (entry.type === 'StartGroup') {\n endGroupActionCount--;\n }\n else if (entry.type === 'EndGroup') {\n endGroupActionCount++;\n }\n }\n endGroupActionCount = 0;\n };\n UndoRedo.prototype.undoEntry = function (entry, diagram) {\n var obj;\n if (entry.type !== 'PropertyChanged' && entry.type !== 'CollectionChanged' && entry.type !== 'LabelCollectionChanged') {\n obj = (entry.undoObject);\n }\n if (entry.type !== 'StartGroup' && entry.type !== 'EndGroup') {\n if (diagram.historyList.undoStack.length > 0) {\n var addObject = diagram.historyList.undoStack.splice(0, 1);\n diagram.historyList.redoStack.splice(0, 0, addObject[0]);\n }\n }\n diagram.protectPropertyChange(true);\n diagram.diagramActions |= DiagramAction.UndoRedo;\n switch (entry.type) {\n case 'PositionChanged':\n case 'Align':\n case 'Distribute':\n this.recordPositionChanged(obj, diagram);\n break;\n case 'SizeChanged':\n case 'Sizing':\n this.recordSizeChanged(obj, diagram, entry);\n break;\n case 'RotationChanged':\n this.recordRotationChanged(obj, diagram, entry);\n break;\n case 'ConnectionChanged':\n this.recordConnectionChanged(obj, diagram);\n break;\n case 'PropertyChanged':\n this.recordPropertyChanged(entry, diagram, false);\n break;\n case 'CollectionChanged':\n entry.isUndo = true;\n this.recordCollectionChanged(entry, diagram);\n entry.isUndo = false;\n break;\n case 'LabelCollectionChanged':\n entry.isUndo = true;\n this.recordLabelCollectionChanged(entry, diagram);\n entry.isUndo = false;\n break;\n case 'PortCollectionChanged':\n entry.isUndo = true;\n this.recordPortCollectionChanged(entry, diagram);\n entry.isUndo = false;\n break;\n case 'Group':\n this.unGroup(entry, diagram);\n break;\n case 'UnGroup':\n this.group(entry, diagram);\n break;\n case 'SegmentChanged':\n this.recordSegmentChanged(obj, diagram);\n break;\n }\n diagram.diagramActions &= ~DiagramAction.UndoRedo;\n diagram.protectPropertyChange(false);\n diagram.historyChangeTrigger(entry);\n };\n UndoRedo.prototype.group = function (historyEntry, diagram) {\n diagram.add(historyEntry.undoObject);\n };\n UndoRedo.prototype.unGroup = function (entry, diagram) {\n var i = 0;\n entry.redoObject = cloneObject(entry.undoObject);\n var node = entry.undoObject;\n diagram.commandHandler.unGroup(node);\n };\n UndoRedo.prototype.ignoreProperty = function (key) {\n if (key === 'zIndex' || key === 'wrapper') {\n return true;\n }\n return false;\n };\n UndoRedo.prototype.getProperty = function (collection, property) {\n for (var _i = 0, _a = Object.keys(property); _i < _a.length; _i++) {\n var key = _a[_i];\n if (!this.ignoreProperty(key)) {\n if (property[key] instanceof Object) {\n this.getProperty(collection[key], property[key]);\n }\n else {\n collection[key] = property[key];\n }\n }\n }\n };\n UndoRedo.prototype.recordPropertyChanged = function (entry, diagram, isRedo) {\n var redoObject = entry.redoObject;\n var undoObject = entry.undoObject;\n this.getProperty(diagram, (isRedo ? redoObject : undoObject));\n isRedo ? diagram.onPropertyChanged(redoObject, undoObject) : diagram.onPropertyChanged(undoObject, redoObject);\n diagram.diagramActions = diagram.diagramActions | DiagramAction.UndoRedo;\n };\n UndoRedo.prototype.recordSegmentChanged = function (obj, diagram) {\n var i = 0;\n var node;\n var connector;\n if (obj.connectors && obj.connectors.length > 0) {\n for (i = 0; i < obj.connectors.length; i++) {\n connector = obj.connectors[i];\n this.segmentChanged(connector, diagram);\n }\n }\n };\n UndoRedo.prototype.segmentChanged = function (connector, diagram) {\n var conn = diagram.nameTable[connector.id];\n conn.segments = connector.segments;\n diagram.commandHandler.updateEndPoint(conn);\n };\n UndoRedo.prototype.recordPositionChanged = function (obj, diagram) {\n var i = 0;\n var node;\n var connector;\n if (obj.nodes && obj.nodes.length > 0) {\n for (i = 0; i < obj.nodes.length; i++) {\n node = obj.nodes[i];\n this.positionChanged(node, diagram);\n }\n }\n if (obj.connectors && obj.connectors.length > 0) {\n for (i = 0; i < obj.connectors.length; i++) {\n connector = obj.connectors[i];\n this.connectionChanged(connector, diagram);\n }\n }\n };\n UndoRedo.prototype.positionChanged = function (obj, diagram, entry) {\n var node = diagram.nameTable[obj.id];\n if (obj.processId && !node.processId) {\n diagram.addProcess(obj, obj.processId);\n }\n if (!obj.processId && node.processId) {\n diagram.removeProcess(obj.id);\n }\n if (node.processId) {\n var tx = obj.margin.left - node.margin.left;\n var ty = obj.margin.top - node.margin.top;\n diagram.drag(node, tx, ty);\n }\n else {\n var tx = obj.offsetX - node.wrapper.offsetX;\n var ty = obj.offsetY - node.wrapper.offsetY;\n diagram.drag(node, tx, ty);\n }\n if (diagram.bpmnModule) {\n diagram.bpmnModule.updateDocks(node, diagram);\n }\n };\n UndoRedo.prototype.recordSizeChanged = function (obj, diagram, entry) {\n var i = 0;\n var connector;\n var node;\n if (obj && obj.nodes && obj.nodes.length > 0) {\n for (i = 0; i < obj.nodes.length; i++) {\n node = obj.nodes[i];\n if (node.children) {\n var elements = [];\n var nodes = diagram.commandHandler.getAllDescendants(node, elements);\n for (var i_1 = 0; i_1 < nodes.length; i_1++) {\n var tempNode = entry.childTable[nodes[i_1].id];\n if ((getObjectType(tempNode) === Node)) {\n this.sizeChanged(tempNode, diagram, entry);\n this.positionChanged(tempNode, diagram, entry);\n }\n else {\n this.connectionChanged(tempNode, diagram, entry);\n }\n }\n }\n else {\n this.sizeChanged(node, diagram);\n this.positionChanged(node, diagram);\n }\n }\n }\n if (obj && obj.connectors && obj.connectors.length > 0) {\n var connectors = obj.connectors;\n for (i = 0; i < connectors.length; i++) {\n connector = connectors[i];\n this.connectionChanged(connector, diagram);\n }\n }\n };\n UndoRedo.prototype.sizeChanged = function (obj, diagram, entry) {\n var node = diagram.nameTable[obj.id];\n var scaleWidth = obj.wrapper.actualSize.width / node.wrapper.actualSize.width;\n var scaleHeight = obj.wrapper.actualSize.height / node.wrapper.actualSize.height;\n if (entry && entry.childTable) {\n entry.childTable[obj.id] = cloneObject(node);\n }\n diagram.scale(node, scaleWidth, scaleHeight, {\n x: obj.wrapper.offsetX / node.wrapper.offsetX,\n y: obj.wrapper.offsetY / node.wrapper.offsetY\n });\n };\n UndoRedo.prototype.recordRotationChanged = function (obj, diagram, entry) {\n var i = 0;\n var node;\n var connector;\n var selectorObj = diagram.selectedItems;\n selectorObj.rotateAngle = obj.rotateAngle;\n if (selectorObj && selectorObj.wrapper) {\n selectorObj.wrapper.rotateAngle = obj.rotateAngle;\n }\n if (obj && obj.nodes && obj.nodes.length > 0) {\n for (i = 0; i < obj.nodes.length; i++) {\n node = obj.nodes[i];\n this.rotationChanged(node, diagram);\n this.positionChanged(node, diagram);\n }\n }\n if (obj && obj.connectors && obj.connectors.length > 0) {\n for (i = 0; i < obj.connectors.length; i++) {\n connector = obj.connectors[i];\n this.connectionChanged(connector, diagram);\n }\n }\n };\n UndoRedo.prototype.rotationChanged = function (obj, diagram) {\n var node = diagram.nameTable[obj.id];\n diagram.rotate(node, obj.rotateAngle - node.rotateAngle);\n };\n UndoRedo.prototype.recordConnectionChanged = function (obj, diagram) {\n var connector = obj.connectors[0];\n this.connectionChanged(connector, diagram);\n };\n UndoRedo.prototype.connectionChanged = function (obj, diagram, entry) {\n var connector = diagram.nameTable[obj.id];\n var node;\n if (obj.sourcePortID !== connector.sourcePortID) {\n connector.sourcePortID = obj.sourcePortID;\n diagram.connectorPropertyChange(connector, {}, { sourcePortID: obj.sourcePortID });\n }\n if (obj.targetPortID !== connector.targetPortID) {\n connector.targetPortID = obj.targetPortID;\n diagram.connectorPropertyChange(connector, {}, { targetPortID: obj.targetPortID });\n }\n if (obj.sourceID !== connector.sourceID) {\n if (obj.sourceID === '') {\n node = diagram.nameTable[connector.sourceID];\n removeItem(node.outEdges, obj.id);\n }\n else {\n node = diagram.nameTable[obj.sourceID];\n node.outEdges.push(obj.id);\n }\n connector.sourceID = obj.sourceID;\n diagram.connectorPropertyChange(connector, {}, { sourceID: obj.sourceID });\n }\n if (obj.targetID !== connector.targetID) {\n if (obj.targetID === '') {\n node = diagram.nameTable[connector.targetID];\n removeItem(node.inEdges, obj.id);\n }\n else {\n node = diagram.nameTable[obj.targetID];\n node.inEdges.push(obj.id);\n }\n connector.targetID = obj.targetID;\n diagram.connectorPropertyChange(connector, {}, { targetID: obj.targetID });\n }\n if (entry && entry.childTable) {\n entry.childTable[obj.id] = cloneObject(connector);\n }\n var sx = obj.sourcePoint.x - connector.sourcePoint.x;\n var sy = obj.sourcePoint.y - connector.sourcePoint.y;\n if (sx !== 0 || sy !== 0) {\n diagram.dragSourceEnd(connector, sx, sy);\n }\n var tx = obj.targetPoint.x - connector.targetPoint.x;\n var ty = obj.targetPoint.y - connector.targetPoint.y;\n if (tx !== 0 || ty !== 0) {\n diagram.dragTargetEnd(connector, tx, ty);\n }\n diagram.updateSelector();\n if (diagram.mode !== 'SVG') {\n diagram.refreshDiagramLayer();\n }\n };\n UndoRedo.prototype.recordCollectionChanged = function (entry, diagram) {\n var obj = entry.undoObject;\n if (entry && entry.changeType) {\n var changeType = void 0;\n if (entry.isUndo) {\n if (entry.changeType === 'Insert') {\n changeType = 'Remove';\n }\n else {\n changeType = 'Insert';\n }\n }\n else {\n changeType = entry.changeType;\n }\n if (changeType === 'Remove') {\n diagram.remove(obj);\n diagram.clearSelectorLayer();\n }\n else {\n diagram.clearSelectorLayer();\n if (obj.parentId) {\n var parentNode = diagram.nameTable[obj.parentId];\n if (parentNode) {\n diagram.addChild(parentNode, obj);\n }\n else {\n diagram.add(obj);\n }\n }\n else {\n diagram.add(obj);\n }\n if (obj.processId && diagram.nameTable[obj.processId]) {\n diagram.addProcess(obj, obj.processId);\n }\n }\n if (diagram.mode !== 'SVG') {\n diagram.refreshDiagramLayer();\n }\n }\n };\n UndoRedo.prototype.recordLabelCollectionChanged = function (entry, diagram) {\n var label = entry.undoObject;\n var obj = entry.redoObject;\n var node = diagram.nameTable[obj.id];\n if (entry && entry.changeType) {\n var changeType = void 0;\n if (entry.isUndo) {\n changeType = (entry.changeType === 'Insert') ? 'Remove' : 'Insert';\n }\n else {\n changeType = entry.changeType;\n }\n if (changeType === 'Remove') {\n diagram.removeLabels(node, [label]);\n diagram.clearSelectorLayer();\n }\n else {\n diagram.clearSelectorLayer();\n diagram.addLabels(node, [label]);\n }\n if (diagram.mode !== 'SVG') {\n diagram.refreshDiagramLayer();\n }\n }\n };\n UndoRedo.prototype.recordPortCollectionChanged = function (entry, diagram) {\n var port = entry.undoObject;\n var obj = entry.redoObject;\n var node = diagram.nameTable[obj.id];\n if (entry && entry.changeType) {\n var changeType = void 0;\n if (entry.isUndo) {\n changeType = (entry.changeType === 'Insert') ? 'Remove' : 'Insert';\n }\n else {\n changeType = entry.changeType;\n }\n if (changeType === 'Remove') {\n diagram.removePorts(node, [port]);\n diagram.clearSelectorLayer();\n }\n else {\n diagram.clearSelectorLayer();\n diagram.addPorts(node, [port]);\n }\n if (diagram.mode !== 'SVG') {\n diagram.refreshDiagramLayer();\n }\n }\n };\n /** @private */\n UndoRedo.prototype.redo = function (diagram) {\n var entry = this.getRedoEntry(diagram);\n var startGroupActionCount = 0;\n if (entry) {\n if (entry.category === 'Internal') {\n if (entry.type === 'StartGroup') {\n startGroupActionCount++;\n this.groupUndo = true;\n }\n else {\n this.redoEntry(entry, diagram);\n }\n if (this.groupUndo) {\n this.redoGroupAction(entry, diagram, startGroupActionCount);\n this.groupUndo = false;\n }\n }\n else {\n diagram.historyList.redo(entry);\n }\n }\n };\n UndoRedo.prototype.redoGroupAction = function (entry, diagram, startGroupActionCount) {\n while (startGroupActionCount !== 0) {\n this.redoEntry(entry, diagram);\n entry = this.getRedoEntry(diagram);\n if (entry.type === 'EndGroup') {\n startGroupActionCount--;\n }\n else if (entry.type === 'StartGroup') {\n startGroupActionCount++;\n }\n }\n startGroupActionCount = 0;\n };\n UndoRedo.prototype.redoEntry = function (historyEntry, diagram) {\n var redoObject;\n if (historyEntry.type !== 'PropertyChanged' && historyEntry.type !== 'CollectionChanged') {\n redoObject = (historyEntry.redoObject);\n }\n diagram.diagramActions |= DiagramAction.UndoRedo;\n if (historyEntry.type !== 'StartGroup' && historyEntry.type !== 'EndGroup') {\n if (diagram.historyList.redoStack.length > 0) {\n var addObject = diagram.historyList.redoStack.splice(0, 1);\n diagram.historyList.undoStack.splice(0, 0, addObject[0]);\n }\n }\n diagram.protectPropertyChange(true);\n switch (historyEntry.type) {\n case 'PositionChanged':\n case 'Align':\n case 'Distribute':\n this.recordPositionChanged(redoObject, diagram);\n break;\n case 'SizeChanged':\n case 'Sizing':\n this.recordSizeChanged(redoObject, diagram, historyEntry);\n break;\n case 'RotationChanged':\n this.recordRotationChanged(redoObject, diagram, historyEntry);\n break;\n case 'ConnectionChanged':\n this.recordConnectionChanged(redoObject, diagram);\n break;\n case 'PropertyChanged':\n this.recordPropertyChanged(historyEntry, diagram, true);\n break;\n case 'CollectionChanged':\n this.recordCollectionChanged(historyEntry, diagram);\n break;\n case 'LabelCollectionChanged':\n this.recordLabelCollectionChanged(historyEntry, diagram);\n break;\n case 'PortCollectionChanged':\n this.recordPortCollectionChanged(historyEntry, diagram);\n break;\n case 'Group':\n this.group(historyEntry, diagram);\n break;\n case 'UnGroup':\n this.unGroup(historyEntry, diagram);\n break;\n case 'SegmentChanged':\n this.recordSegmentChanged(redoObject, diagram);\n break;\n }\n diagram.protectPropertyChange(false);\n diagram.diagramActions &= ~DiagramAction.UndoRedo;\n diagram.historyChangeTrigger(historyEntry);\n };\n UndoRedo.prototype.getUndoEntry = function (diagram) {\n var undoEntry = null;\n var currentObject;\n var hList = diagram.historyList;\n if (hList.canUndo) {\n undoEntry = hList.currentEntry;\n currentObject = hList.currentEntry.previous;\n if (currentObject) {\n hList.currentEntry = currentObject;\n if (!hList.canRedo) {\n hList.canRedo = true;\n }\n }\n else {\n hList.canRedo = true;\n hList.canUndo = false;\n }\n }\n return undoEntry;\n };\n UndoRedo.prototype.getRedoEntry = function (diagram) {\n var redoEntry = null;\n var entryCurrent;\n var hList = diagram.historyList;\n if (hList.canRedo) {\n if (!hList.currentEntry.previous && !hList.canUndo) {\n entryCurrent = hList.currentEntry;\n }\n else {\n entryCurrent = hList.currentEntry.next;\n }\n if (entryCurrent) {\n hList.currentEntry = entryCurrent;\n if (!hList.canUndo) {\n hList.canUndo = true;\n }\n if (!entryCurrent.next) {\n hList.canRedo = false;\n hList.canUndo = true;\n }\n }\n redoEntry = hList.currentEntry;\n }\n return redoEntry;\n };\n /**\n * To destroy the undo redo module\n * @return {void}\n * @private\n */\n UndoRedo.prototype.destroy = function () {\n /**\n * Destroys the undo redo module\n */\n };\n /**\n * Get module name.\n */\n UndoRedo.prototype.getModuleName = function () {\n /**\n * Returns the module name\n */\n return 'UndoRedo';\n };\n return UndoRedo;\n}());\nexport { UndoRedo };\n","import { Container } from '../core/containers/container';\nimport { DiagramEvent } from '../enum/enum';\n/**\n * Layout Animation function to enable or disable layout animation\n */\nvar LayoutAnimation = /** @class */ (function () {\n function LayoutAnimation() {\n this.protectChange = false;\n }\n /**\n * Layout expand function for animation of expand and collapse\n */\n LayoutAnimation.prototype.expand = function (animation, objects, node, diagram) {\n var _this = this;\n var setIntervalObject = {};\n var i = 0;\n var j = 0;\n setIntervalObject[i] = setInterval(function () {\n j++;\n return _this.layoutAnimation(objects, setIntervalObject, j === 6, diagram);\n }, 20);\n if (node.isExpanded) {\n var opacity_1 = .2;\n var protect = 'isProtectedOnChange';\n this.protectChange = diagram[protect];\n diagram.protectPropertyChange(false);\n //let objects: ILayout = diagram.doLayout();\n var setIntervalObjects_1 = {};\n var x = 0;\n this.updateOpacity(node, opacity_1, diagram);\n var current = this;\n setIntervalObjects_1[x] = setInterval(function () {\n opacity_1 <= 1 ? _this.updateOpacity(node, opacity_1, diagram) : clearInterval(setIntervalObjects_1[0]);\n opacity_1 += .2;\n }, 20);\n }\n };\n /**\n * Setinterval and Clear interval for layout animation\n */\n /** @private */\n LayoutAnimation.prototype.layoutAnimation = function (objValue, layoutTimer, stop, diagram) {\n if (!stop) {\n for (var k = 0; k < objValue.objects.length; k++) {\n var node = diagram.nameTable[objValue.objects[k].id];\n node.offsetX += objValue.objects[k].differenceX / 5;\n node.offsetY += objValue.objects[k].differenceY / 5;\n }\n }\n if (stop) {\n clearInterval(layoutTimer[0]);\n diagram.protectPropertyChange(this.protectChange);\n diagram.triggerEvent(DiagramEvent.animationComplete, undefined);\n this.protectChange = false;\n diagram.organizationalChartModule.isAnimation = false;\n diagram.layout.fixedNode = '';\n diagram.protectPropertyChange(this.protectChange);\n }\n };\n /**\n * update the node opacity for the node and connector once the layout animation starts\n */\n LayoutAnimation.prototype.updateOpacity = function (source, value, diagram) {\n for (var i = 0; i < source.outEdges.length; i++) {\n var connector = diagram.nameTable[source.outEdges[i]];\n var target = diagram.nameTable[connector.targetID];\n connector.style.opacity = value;\n diagram.updateDiagramObject(source);\n for (var j = 0; j < connector.wrapper.children.length; j++) {\n connector.wrapper.children[j].style.opacity = value;\n target.style.opacity = value;\n if (target.wrapper instanceof Container) {\n diagram.updateNodeProperty(target.wrapper, undefined, value);\n }\n }\n this.updateOpacity(target, value, diagram);\n }\n };\n /**\n * To destroy the LayoutAnimate module\n * @return {void}\n * @private\n */\n LayoutAnimation.prototype.destroy = function () {\n /**\n * Destroys the LayoutAnimate module\n */\n };\n /**\n * Get module name.\n */\n LayoutAnimation.prototype.getModuleName = function () {\n /**\n * Returns the module name\n */\n return 'LayoutAnimate';\n };\n return LayoutAnimation;\n}());\nexport { LayoutAnimation };\n","import { Rect } from '../primitives/rect';\nimport { OrthogonalSegment } from '../objects/connector';\nimport { getFunction } from '../utility/base-util';\nimport { Point } from '../primitives/point';\n/**\n * Hierarchical Tree and Organizational Chart\n */\nvar HierarchicalTree = /** @class */ (function () {\n /**\n * Constructor for the organizational chart module.\n * @private\n */\n function HierarchicalTree() {\n /**\n * Defines the layout animation\n *\n */\n this.isAnimation = false;\n //constructs the layout module\n }\n /**\n * To destroy the organizational chart\n * @return {void}\n * @private\n */\n HierarchicalTree.prototype.destroy = function () {\n /**\n * Destroy method performed here\n */\n };\n /**\n * Get module name.\n */\n HierarchicalTree.prototype.getModuleName = function () {\n /**\n * Returns the module name of the layout\n */\n return 'OrganizationalChart';\n };\n HierarchicalTree.prototype.updateLayout = function (nodes, nameTable, layoutProp, viewport, uniqueId) {\n var layout = {\n type: layoutProp.type,\n nameTable: nameTable, anchorX: 0, anchorY: 0,\n firstLevelNodes: [], centerNode: null, levels: [], maxLevel: 0, graphNodes: {},\n orientation: layoutProp.orientation,\n horizontalSpacing: layoutProp.horizontalSpacing, verticalSpacing: layoutProp.verticalSpacing,\n verticalAlignment: layoutProp.verticalAlignment, horizontalAlignment: layoutProp.horizontalAlignment,\n fixedNode: layoutProp.fixedNode, getLayoutInfo: getFunction(layoutProp.getLayoutInfo), margin: layoutProp.margin,\n bounds: layoutProp.bounds, objects: [], root: layoutProp.root\n };\n this.doLayout(layout, nodes, viewport, uniqueId);\n return layout;\n };\n HierarchicalTree.prototype.doLayout = function (layout, nodes, viewport, uniqueId) {\n var node;\n var i;\n var layoutInfo = {};\n var shape;\n var rootNodes = [];\n if (layout.nameTable[layout.root]) {\n layout.firstLevelNodes.push(layout.nameTable[layout.root]);\n }\n for (i = 0; i < nodes.length; i++) {\n node = nodes[i];\n if (!node.excludeFromLayout) {\n layoutInfo = layout.graphNodes[node.id] = this.setUpLayoutInfo(layout, node);\n layoutInfo.tree.hasSubTree = false;\n if (!layout.nameTable[layout.root]) {\n if (!node.inEdges || !node.inEdges.length) {\n rootNodes.push(node);\n if (node.data && String(node.data[uniqueId]) === layout.root) {\n layout.firstLevelNodes.push(node);\n }\n }\n }\n }\n }\n if (layout.firstLevelNodes.length === 0) {\n layout.firstLevelNodes = rootNodes;\n }\n //Update relationship(parent and children)\n for (i = 0; i < layout.firstLevelNodes.length; i++) {\n node = layout.firstLevelNodes[i];\n this.updateEdges(layout, node, 1);\n }\n if (layout.firstLevelNodes.length > 0) {\n layout.rootNode = layout.firstLevelNodes[0];\n var x = 0;\n var y = 0;\n var minX = void 0;\n var maxY = void 0;\n var maxX = void 0;\n var minY = void 0;\n var j = void 0;\n var bounds = void 0;\n for (i = 0; i < layout.firstLevelNodes.length; i++) {\n bounds = this.updateTree(layout, x, y, layout.firstLevelNodes[i], 0, layout.firstLevelNodes[i - 1]);\n var rootInfo = layout.graphNodes[layout.firstLevelNodes[i].id];\n bounds.y = Math.min(bounds.y, rootInfo.y);\n bounds.x = Math.min(bounds.x, rootInfo.x);\n if (layout.orientation.indexOf('Left') !== -1) {\n y = bounds.right + layout.horizontalSpacing;\n }\n else {\n x = bounds.right + layout.horizontalSpacing;\n }\n if (i === 0) {\n minX = bounds.x;\n minY = bounds.y;\n maxX = bounds.right;\n maxY = bounds.bottom;\n }\n else {\n minX = Math.min(minX, bounds.x);\n minY = Math.min(minY, bounds.y);\n maxX = Math.max(maxX, bounds.right);\n maxY = Math.max(maxY, bounds.bottom);\n }\n }\n this.updateAnchor(layout, { x: minX, y: minY, right: maxX, bottom: maxY }, viewport);\n for (i = 0; i < layout.firstLevelNodes.length; i++) {\n this.updateNodes(layout, layout.firstLevelNodes[i], 0);\n }\n for (i = 0; i < layout.firstLevelNodes.length; i++) {\n this.updateConnectors(layout, layout.firstLevelNodes[i], 1);\n }\n }\n };\n HierarchicalTree.prototype.getBounds = function (node) {\n var x = node.offsetX - node.actualSize.width * node.pivot.x;\n var y = node.offsetY - node.actualSize.height * node.pivot.y;\n return new Rect(x, y, node.actualSize.width, node.actualSize.height);\n };\n HierarchicalTree.prototype.updateTree = function (layout, x, y, shape, level, prev, dontupdate) {\n var dimensions;\n var info = {};\n var lev;\n var obj;\n var hasChild;\n dimensions = this.getDimensions(layout, shape, x, y, level);\n info = layout.graphNodes[shape.id];\n var firstChild;\n //Set maximum level of layout\n layout.maxLevel = Math.max(layout.maxLevel, level);\n lev = level;\n hasChild = this.hasChild(layout, shape);\n if (!hasChild && !info.tree.assistants.length) {\n //update leaf nodes\n shape.treeBounds = this.updateLeafNode(layout, shape, prev, dimensions, level, dontupdate);\n return shape.treeBounds;\n }\n else {\n var treeBounds = void 0;\n var shapeBounds = void 0;\n var levelBounds = void 0;\n var d = void 0;\n var asstBounds = void 0;\n var space = void 0;\n var bottom = void 0;\n bottom = dimensions.y + dimensions.height + layout.verticalSpacing;\n if (info.tree.assistants.length) {\n //Vertically place assistants\n obj = this.setDepthSpaceForAssitants(layout, shape, bottom, dimensions.height, level, layout.verticalSpacing);\n lev = obj.level;\n bottom = obj.bottom;\n }\n if (!info.tree.assistants.length && info.tree.orientation !== 'Horizontal') {\n bottom = dimensions.y + dimensions.height + layout.verticalSpacing / 2;\n }\n if (info.tree.children.length) {\n if (info.tree.orientation === 'Horizontal' && (info.tree.type !== 'Balanced' || info.tree.children.length === 1)) {\n treeBounds = this.updateHorizontalTree(layout, shape, prev, dimensions.x, bottom, lev);\n }\n else if (info.tree.type === 'Balanced') {\n treeBounds = this.updateHorizontalTreeWithMultipleRows(layout, shape, prev, dimensions.x, bottom, lev);\n }\n else {\n treeBounds = this.updateVerticalTree(layout, shape, dimensions.x, bottom, lev, dontupdate);\n }\n }\n if (!(info.y && info.y > dimensions.y)) {\n info.y = dimensions.y;\n }\n if (!(x && x > info.mid)) {\n x = info.mid;\n }\n if (info.tree.assistants.length) {\n //Set breadth space for assistants\n space = x !== undefined ? x : dimensions.x;\n asstBounds = this.setBreadthSpaceForAssistants(layout, shape, dimensions, space, bottom, level);\n if (!hasChild) {\n levelBounds = treeBounds = asstBounds;\n x = (levelBounds.x + levelBounds.right) / 2 - dimensions.width / 2;\n treeBounds = levelBounds;\n }\n d = asstBounds ? asstBounds.canMoveBy : undefined;\n }\n info.x = x;\n if (!info.translate) {\n info.treeWidth = treeBounds.right - treeBounds.x;\n }\n {\n shapeBounds = { x: x, y: dimensions.y, right: x + dimensions.width, bottom: dimensions.y + dimensions.height };\n }\n var translateInfo = {\n layout: layout, shape: shape, shapeBounds: shapeBounds, treeBounds: treeBounds,\n dim: dimensions, level: level\n };\n this.translateSubTree(translateInfo, d, prev !== undefined, dontupdate);\n if (info.firstChild && typeof info.firstChild !== 'string') {\n info.firstChild.x += info.subTreeTranslation;\n }\n shape.treeBounds = treeBounds;\n return treeBounds;\n }\n };\n HierarchicalTree.prototype.updateLeafNode = function (layout, shape, prev, dimensions, level, dontupdate) {\n var bounds;\n var info = layout.graphNodes[shape.id];\n info.x = dimensions.x;\n if (!(info.y && info.y > dimensions.y)) {\n info.y = dimensions.y;\n info.maxLevel = Math.max(level, info.maxLevel || 0);\n }\n bounds = { x: dimensions.x, y: dimensions.y, right: dimensions.x + dimensions.width, bottom: dimensions.y + dimensions.height };\n info.maxLevel = Math.max(info.maxLevel || 0, level);\n var translateInfo = {\n layout: layout, shape: shape, shapeBounds: bounds, treeBounds: bounds,\n dim: dimensions, level: level\n };\n this.translateSubTree(translateInfo, undefined, prev !== undefined, dontupdate);\n return { x: info.x, y: info.y, right: info.x + dimensions.width, bottom: info.y + dimensions.height };\n };\n HierarchicalTree.prototype.setUpLayoutInfo = function (layout, item) {\n var info = {};\n info.subTreeTranslation = 0;\n if (layout.type === 'OrganizationalChart') {\n info.tree = { orientation: 'Vertical', type: 'Alternate', offset: 20, enableRouting: true };\n }\n else {\n info.tree = { orientation: 'Horizontal', type: 'Center', enableRouting: true };\n }\n info.tree.children = [];\n info.tree.assistants = [];\n info.tree.level = 0;\n info.translate = true;\n return info;\n };\n HierarchicalTree.prototype.translateSubTree = function (translateInfo, asstDif, translate, dontupdate) {\n var layout = translateInfo.layout;\n var shape = translateInfo.shape;\n var shapeBounds = translateInfo.shapeBounds;\n var treeBounds = translateInfo.treeBounds;\n var level = translateInfo.level;\n var dim = translateInfo.dim;\n var info = layout.graphNodes[shape.id];\n var firstChild = layout.nameTable[info.firstChild ? info.firstChild.child : info.tree.children[0]];\n var firstChildInfo = firstChild ? layout.graphNodes[firstChild.id] : null;\n var hasChild = this.hasChild(layout, shape);\n var intersect = this.findIntersectingLevels(layout, shapeBounds, level, info.actualLevel);\n var treeIntersect = this.findIntersectingLevels(layout, treeBounds, level, info.actualLevel);\n var levelBounds = [];\n var diff;\n if (intersect.length && info.translate) {\n info.intersect = intersect;\n this.spaceLeftFromPrevSubTree(layout, shape, shapeBounds);\n info.canMoveBy = info.diff;\n if (asstDif !== undefined) {\n info.canMoveBy = Math.min(asstDif, info.canMoveBy);\n }\n if (firstChild && firstChildInfo.canMoveBy !== undefined) {\n if (firstChildInfo.canMoveBy >= info.canMoveBy) {\n info.translated = true;\n }\n info.canMoveBy = Math.min(info.canMoveBy, firstChildInfo.canMoveBy);\n }\n if (translate) {\n info.x -= info.canMoveBy;\n info.subTreeTranslation -= info.canMoveBy;\n if (hasChild) {\n this.shiftSubordinates(layout, treeIntersect, info.canMoveBy);\n treeBounds.x = Math.min(treeBounds.x, info.x);\n treeBounds.right = Math.max(treeBounds.right, info.x + dim.width);\n treeBounds.bottom = Math.max(treeBounds.bottom, info.y + dim.height);\n treeBounds.x -= info.canMoveBy;\n treeBounds.right -= info.canMoveBy;\n }\n if (firstChild && firstChildInfo.canMoveBy > info.canMoveBy) {\n info.canMoveBy = firstChildInfo.canMoveBy - info.canMoveBy;\n }\n else if (firstChild && info.canMoveBy !== undefined) {\n info.canMoveBy = 0;\n }\n }\n }\n else {\n if (hasChild) {\n treeBounds.x = Math.min(treeBounds.x, shapeBounds.x);\n treeBounds.right = Math.max(treeBounds.right, shapeBounds.x + dim.width);\n treeBounds.bottom = Math.max(treeBounds.bottom, info.y + dim.height);\n }\n if (!info.translate) {\n info.canMoveBy = 0;\n info.subTreeTranslation = 0;\n }\n }\n if (!dontupdate) {\n shapeBounds = { x: info.x, y: dim.y, right: info.x + dim.width, bottom: dim.y + dim.height };\n levelBounds.push({ rBounds: shapeBounds });\n this.updateRearBounds(layout, shape, levelBounds, level);\n }\n };\n HierarchicalTree.prototype.updateRearBounds = function (layout, shape, levelBounds, level, intersect) {\n var bnds;\n var index;\n var isLastLeaf = true;\n var i;\n var info = {};\n var firstLevel;\n var lastLevel;\n var bottom;\n if (shape) {\n info = layout.graphNodes[shape.id];\n intersect = info.intersect;\n isLastLeaf = !info.tree.children.length && !info.tree.assistants.length;\n }\n firstLevel = levelBounds[0].rBounds;\n lastLevel = levelBounds[levelBounds.length - 1].rBounds;\n if (intersect && intersect.length) {\n bnds = layout.levels[intersect[0]].rBounds;\n bottom = bnds.bottom;\n if (bnds.y < firstLevel.y) {\n bnds.bottom = firstLevel.y;\n levelBounds.splice(0, 0, { rBounds: bnds });\n }\n if (bottom > lastLevel.bottom) {\n levelBounds.push({ rBounds: { x: bnds.x, right: bnds.right, y: firstLevel.bottom, bottom: bottom } });\n }\n else {\n bnds = layout.levels[intersect[intersect.length - 1]].rBounds;\n if (isLastLeaf && bnds.bottom > lastLevel.bottom) {\n bnds.y = lastLevel.bottom;\n levelBounds.push({ rBounds: bnds });\n }\n }\n index = intersect[0];\n for (i = levelBounds.length - 1; i >= 0; i--) {\n layout.levels.splice(index, 0, levelBounds[i]);\n }\n index += levelBounds.length;\n layout.levels.splice(index, intersect.length);\n }\n else {\n index = this.findLevel(layout, levelBounds[levelBounds.length - 1].rBounds, level);\n for (i = levelBounds.length - 1; i >= 0; i--) {\n layout.levels.splice(index, 0, levelBounds[i]);\n }\n }\n };\n HierarchicalTree.prototype.shiftSubordinates = function (layout, intersect, diff) {\n var i;\n //Shift the sublevels by the distance diff\n if (diff !== 0) {\n for (i = 0; i < intersect.length; i++) {\n if (layout.levels[intersect[i]].rBounds) {\n layout.levels[intersect[i]].rBounds.x -= diff;\n layout.levels[intersect[i]].rBounds.right -= diff;\n }\n }\n }\n };\n HierarchicalTree.prototype.setDepthSpaceForAssitants = function (layout, shape, bottom, height, lev, vSpace) {\n var info = layout.graphNodes[shape.id];\n var asst = {};\n var asstHeight;\n var i;\n var asstElement;\n var max;\n max = bottom;\n //Vertically place the assistants as alternate layout(alternatively at both right and left sides of parent)\n for (i = 0; i < info.tree.assistants.length; i++) {\n asst = layout.graphNodes[info.tree.assistants[i]];\n if (asst) {\n asst.tree.children = asst.tree.assistants = [];\n asst.y = bottom;\n asstElement = layout.nameTable[info.tree.assistants[i]];\n asstHeight = asstElement.actualSize.height;\n if (layout.orientation.indexOf('Left') !== -1) {\n asstHeight = asstElement.actualSize.width;\n }\n max = bottom + asstHeight + vSpace / 2;\n layout.maxLevel = lev + 1;\n if (i % 2 === 1 && i !== info.tree.assistants.length - 1) {\n bottom = max;\n lev++;\n }\n }\n }\n return { level: layout.maxLevel, bottom: bottom + asstHeight + vSpace };\n };\n HierarchicalTree.prototype.setBreadthSpaceForAssistants = function (layout, shape, dim, space, bottom, level) {\n var asst = {};\n var asstWidth;\n var prevBounds;\n var bounds;\n var asstElement;\n var i;\n var info = layout.graphNodes[shape.id];\n var max = bottom;\n var lev = level;\n var left;\n var diff;\n var intersect;\n var levelBounds;\n for (i = 0; i < info.tree.assistants.length; i++) {\n asst = layout.graphNodes[info.tree.assistants[i]];\n //Arrange assistants at both left and right sides of parent(like alternate layout)\n //Check - By default, distance to be left between parent and child nodes is assumed as 20.\n //It can be modified/customized later.\n if (asst) {\n asstElement = layout.nameTable[info.tree.assistants[i]];\n asstWidth = asstElement.actualSize.width;\n if (layout.orientation.indexOf('Left') !== -1) {\n asstWidth = asstElement.actualSize.height;\n }\n if (i % 2 === 0) {\n left = space + dim.width / 2 - 20 - asstWidth;\n }\n else {\n left = space + dim.width / 2 + 20;\n }\n //Check - What will happen if update leaf node is called? Since assistants don't have children\n bounds = this.updateTree(layout, left, asst.y, layout.nameTable[info.tree.assistants[i]], lev + 1);\n if (!this.hasChild(layout, shape)) {\n if (i === 0) {\n levelBounds = bounds;\n }\n else {\n this.uniteRects(levelBounds, bounds);\n }\n }\n if (i % 2 === 0 && asst.prevBounds) {\n if (diff === undefined) {\n diff = asst.canMoveBy;\n }\n else {\n diff = Math.min(diff, asst.canMoveBy);\n }\n }\n if (i % 2 === 1 || i === info.tree.assistants.length - 1) {\n intersect = this.findIntersectingLevels(layout, bounds, lev + 1);\n //Update rightmost positions of known layout levels\n this.updateRearBounds(layout, null, [{ rBounds: bounds }], lev + 1, intersect);\n lev++;\n }\n }\n }\n if (levelBounds) {\n levelBounds.canMoveBy = diff;\n }\n return levelBounds;\n };\n HierarchicalTree.prototype.getDimensions = function (layout, shape, x, y, level) {\n var width;\n width = shape.actualSize.width;\n var height;\n height = shape.actualSize.height;\n if (layout.orientation.indexOf('Left') !== -1) {\n if (!level) {\n var temp = void 0;\n temp = x;\n x = y;\n y = temp;\n }\n height = shape.actualSize.width;\n width = shape.actualSize.height;\n }\n return { x: x, y: y, width: width, height: height };\n };\n HierarchicalTree.prototype.hasChild = function (layout, shape) {\n //Check whether the node has children \n var shape1 = layout.graphNodes[shape.id];\n return shape1.tree.children && shape1.tree.children.length;\n };\n HierarchicalTree.prototype.updateHorizontalTree = function (layout, shape, prev, x, y, level) {\n //Get dimensions with respect to layout orientations \n var dimensions;\n dimensions = this.getDimensions(layout, shape, x, y, level);\n var info = {};\n info = layout.graphNodes[shape.id];\n var side = info.tree.type;\n var lev;\n lev = level;\n var right = 0;\n right = x;\n var bottom;\n bottom = y;\n var width;\n var height;\n var child;\n var childBounds;\n var childWidth;\n var childHeight;\n var prevBounds;\n var bounds;\n var actBounds;\n var maxLevel;\n var translateSibilingsBy;\n var canMoveBy;\n var oldActBounds;\n var i;\n var childInfo;\n var prevLayoutLevels;\n var firstChildInfo;\n prevLayoutLevels = layout.levels.slice(0, layout.levels.length);\n if (this.hasChild(layout, shape)) {\n var h = void 0;\n h = layout.orientation.indexOf('Left') !== -1 ? true : false;\n for (i = 0; i < info.tree.children.length; i++) {\n child = layout.nameTable[info.tree.children[i]];\n width = child.actualSize.width;\n height = child.actualSize.height;\n childWidth = h ? height : width;\n childHeight = h ? width : height;\n prevBounds = layout.levels[lev + 1] ? layout.levels[lev + 1].rBounds : null;\n //Update sub tree\n childBounds = this.updateTree(layout, right, bottom, child, lev + 1, layout.nameTable[info.tree.children[i - 1]]);\n childInfo = layout.graphNodes[child.id];\n info.maxLevel = Math.max(info.maxLevel || 0, childInfo.maxLevel || 0);\n actBounds = { x: childInfo.x, y: childInfo.y, right: childInfo.x + childWidth, bottom: childInfo.y + childHeight };\n if (i === 0) {\n //Compare with previous(right most) subtree\n bounds = {\n x: Math.min(childInfo.x, childBounds.x), y: Math.min(childInfo.y, childBounds.y),\n right: childBounds.right, bottom: childBounds.bottom\n };\n firstChildInfo = childInfo;\n }\n if (!oldActBounds) {\n oldActBounds = actBounds;\n }\n else {\n oldActBounds.x = actBounds.x;\n oldActBounds.y = actBounds.y;\n if (actBounds.right > oldActBounds.right) {\n oldActBounds.right = actBounds.right;\n }\n oldActBounds.bottom = actBounds.bottom;\n //oldActBounds = actBounds;\n }\n //Compare with previous subtree if level of the child is greater than the level of previous sub tree\n //Check - what will happen if level of second child is greater than current child\n if (i === 0) {\n info.firstChild = { x: childInfo.x, canMoveBy: childInfo.canMoveBy, child: child.id };\n }\n if (this.hasChild(layout, child)) {\n if (!info.firstChild || info.firstChild.x >= childInfo.firstChild.x) {\n if (childInfo.firstChild && info.firstChild.canMoveBy < childInfo.canMoveBy) {\n info.firstChild.canMoveBy = canMoveBy;\n childInfo.canMoveBy = canMoveBy;\n canMoveBy = info.firstChild.canMoveBy;\n layout.graphNodes[info.firstChild.child].canMoveBy = canMoveBy;\n }\n var canMoveValue = canMoveBy !== undefined ? canMoveBy : childInfo.canMoveBy;\n info.firstChild = { x: childInfo.firstChild.x, canMoveBy: canMoveValue, child: child.id };\n }\n else if (childInfo.firstChild && childInfo.translated && info.firstChild.canMoveBy > childInfo.canMoveBy) {\n info.firstChild.canMoveBy = layout.graphNodes[info.firstChild.child].canMoveBy = childInfo.canMoveBy;\n }\n }\n maxLevel = maxLevel ? Math.max(childInfo.maxLevel, maxLevel) : childInfo.maxLevel;\n this.uniteRects(bounds, childBounds);\n if (i !== 0 && !this.hasChild(layout, child) && childInfo.subTreeTranslation < 0) {\n right = childBounds.right - childInfo.subTreeTranslation + layout.horizontalSpacing;\n }\n else {\n right = childBounds.right + layout.horizontalSpacing;\n }\n }\n if (!isNaN(translateSibilingsBy)) {\n firstChildInfo.canMoveBy = translateSibilingsBy;\n }\n info.mid = (firstChildInfo.x + oldActBounds.right) / 2 - dimensions.width / 2;\n //Set parent based on the chart type\n if (side === 'Left') {\n info.mid = actBounds.right - dimensions.width;\n }\n else if (side === 'Right') {\n info.mid = x;\n }\n }\n return bounds;\n };\n HierarchicalTree.prototype.updateHorizontalTreeWithMultipleRows = function (layout, shape, prev, x, y, level) {\n //declarations\n var child;\n var childInfo;\n var childBounds;\n var childWidth;\n var childHeight;\n var firstChildInfo;\n var maxLevel;\n var bounds;\n var rowBounds;\n var width;\n var height;\n var diff;\n var translateSibilingsBy;\n var fchild;\n var maxRowWidth;\n var j;\n var i;\n var k;\n var max;\n var leftCenter;\n var rightCenter;\n //Get dimensions with respect to layout orientations\n var dimensions = this.getDimensions(layout, shape, x, y, level);\n var info = layout.graphNodes[shape.id];\n var side = info.tree.type;\n var lev = level;\n var right = x;\n var bottom = y;\n var prevLayoutLevels = layout.levels.slice(0, layout.levels.length);\n var minTranslation = 0;\n if (this.hasChild(layout, shape)) {\n var h = layout.orientation.indexOf('Left') !== -1 ? true : false;\n var align = void 0;\n var rows = this.splitChildrenInRows(layout, shape);\n var unique = info.tree.children.length === 5 && rows[0].length === 3;\n var leftTree = [];\n var rightTree = [];\n if (!unique) {\n this.splitRows(rows, leftTree, rightTree);\n }\n else {\n rightTree = rows;\n }\n var treeInfo = { leftTree: leftTree, rows: rows, rightTree: rightTree, dimensions: dimensions };\n var rightMost = this.updateLeftTree(layout, treeInfo, shape, x, bottom, lev);\n bounds = treeInfo.bounds;\n var rightX = void 0;\n var center = (rightMost || 0) + (rightMost !== undefined ? (layout.horizontalSpacing / 2) : 0);\n if (rightMost !== undefined) {\n info.mid = center - dimensions.width / 2;\n rightX = rightMost + layout.horizontalSpacing;\n }\n bottom = y;\n var rightBounds = void 0;\n rightBounds = [];\n for (i = 0; i < rightTree.length; i++) {\n if (rows[i].length % 2 === 1 && i === rightTree.length - 1 || unique) {\n right = x;\n }\n else {\n right = rightX || x;\n }\n if (i !== 0) {\n bottom = rightBounds[i - 1].bottom + layout.verticalSpacing;\n }\n for (j = 0; j < rightTree[i].length; j++) {\n child = layout.nameTable[rightTree[i][j]];\n width = child.actualSize.width;\n height = child.actualSize.height;\n childWidth = h ? height : width;\n childHeight = h ? width : height;\n //Update sub tree\n childInfo = layout.graphNodes[child.id];\n childInfo.actualLevel = lev + 1 + i;\n if (j === 0 && leftTree[i] && leftTree[i].length) {\n childInfo.translate = false;\n }\n if (unique && i === 1) {\n if (j === 0 && leftCenter + childWidth + layout.horizontalSpacing <= rightCenter) {\n align = true;\n right = leftCenter - childWidth / 2;\n }\n if (align && j === 1) {\n right = rightCenter - childWidth / 2;\n }\n }\n childBounds = this.updateTree(layout, right, bottom, child, lev + 1, layout.nameTable[rightTree[i][j - 1]]);\n if (unique && j <= 2 && i === 0) {\n if (j === 1) {\n leftCenter = childBounds.x - layout.horizontalSpacing / 2;\n rightCenter = childBounds.x + childWidth + layout.horizontalSpacing / 2;\n }\n }\n if (j === 0) {\n rightBounds[i] = { x: childBounds.x, y: childBounds.y, right: childBounds.right, bottom: childBounds.bottom };\n }\n else {\n this.uniteRects(rightBounds[i], childBounds);\n }\n if (!bounds) {\n bounds = {\n x: rightBounds[i].x, y: rightBounds[i].y, right: rightBounds[i].right,\n bottom: rightBounds[i].bottom\n };\n }\n this.uniteRects(bounds, rightBounds[i]);\n right = childBounds.right + layout.horizontalSpacing;\n if (!info.firstChild || ((i === rightTree.length - 1 && rows[i].length % 2 === 1) || unique)\n && j === 0 && childInfo.canMoveBy !== undefined && minTranslation > childInfo.canMoveBy) {\n minTranslation = Math.min(minTranslation, childInfo.canMoveBy || 0);\n info.firstChild = { x: childInfo.x, child: child.id, canMoveBy: childInfo.canMoveBy };\n }\n treeInfo.leftCenter = leftCenter;\n treeInfo.rightCenter = rightCenter;\n treeInfo.align = align;\n treeInfo.level = lev;\n treeInfo.rightBounds = rightBounds;\n this.alignRowsToCenter(layout, i, shape, treeInfo, rightX);\n }\n }\n }\n return bounds;\n };\n HierarchicalTree.prototype.updateLeftTree = function (layout, treeInfo, shape, x, bottom, lev) {\n var leftTree = treeInfo.leftTree;\n var info = layout.graphNodes[shape.id];\n var right;\n var leftBounds = [];\n var minTranslation;\n var rightMost;\n var childBounds;\n var bounds;\n var h = layout.orientation.indexOf('Left') !== -1 ? true : false;\n //Arrange left side\n for (var i = 0; i < leftTree.length && leftTree[i].length; i++) {\n right = x;\n if (leftBounds[i - 1]) {\n bottom = leftBounds[i - 1].bottom + layout.verticalSpacing;\n }\n for (var j = 0; j < leftTree[i].length; j++) {\n var child = layout.nameTable[leftTree[i][j]];\n var childWidth = h ? child.actualSize.height : child.actualSize.width;\n var childHeight = h ? child.actualSize.width : child.actualSize.height;\n //Update sub tree\n var childInfo = layout.graphNodes[child.id];\n childInfo.actualLevel = lev + 1 + i;\n childBounds = this.updateTree(layout, right, bottom, child, lev + 1, layout.nameTable[leftTree[i][j - 1]]);\n if (j === 0) {\n leftBounds[i] = { x: childBounds.x, y: childBounds.y, right: childBounds.right, bottom: childBounds.bottom };\n }\n else {\n this.uniteRects(leftBounds[i], childBounds);\n }\n if (i === 0 && j === 0) {\n minTranslation = childInfo.canMoveBy;\n info.firstChild = { x: childInfo.x, child: child.id, canMoveBy: childInfo.canMoveBy };\n }\n else if (j === 0 && childInfo.canMoveBy !== undefined && minTranslation > childInfo.canMoveBy) {\n minTranslation = Math.min(minTranslation, childInfo.canMoveBy || 0);\n info.firstChild = { x: childInfo.x, child: child.id, canMoveBy: childInfo.canMoveBy };\n }\n right = childBounds.right + layout.horizontalSpacing;\n }\n if (i === 0) {\n rightMost = leftBounds[i].right;\n }\n else {\n rightMost = Math.max(rightMost, leftBounds[i].right);\n }\n }\n //Translate to same positions\n for (var i = 0; i < leftTree.length && leftTree[i].length; i++) {\n if (rightMost !== leftBounds[i].right) {\n var diff = rightMost - leftBounds[i].right;\n for (var j = 0; j < leftTree[i].length; j++) {\n var element = layout.nameTable[leftTree[i][j]];\n var elementInfo = layout.graphNodes[leftTree[i][j]];\n elementInfo.x += diff;\n }\n //leftBounds[i].x += diff;\n //leftBounds[i].right += diff;\n }\n if (i === 0) {\n bounds = { x: leftBounds[0].x, y: leftBounds[0].y, right: leftBounds[0].right, bottom: leftBounds[0].bottom };\n }\n else {\n this.uniteRects(bounds, leftBounds[i]);\n }\n }\n treeInfo.bounds = bounds;\n return rightMost;\n };\n HierarchicalTree.prototype.alignRowsToCenter = function (layout, i, shape, treeInfo, rightX) {\n var max;\n var centered;\n var diff;\n var info = layout.graphNodes[shape.id];\n var rows = treeInfo.rows;\n var rightTree = treeInfo.rightTree;\n var leftCenter = treeInfo.leftCenter;\n var rightCenter = treeInfo.rightCenter;\n var align = treeInfo.align;\n var rightBounds = treeInfo.rightBounds;\n var dimensions = treeInfo.dimensions;\n var lev = treeInfo.level;\n var unique = info.tree.children.length === 5 && rows[0].length === 3;\n if (unique && i === 1) {\n max = (rightBounds[0].right - rightBounds[0].x) >= (rightBounds[1].right - rightBounds[1].x) ? 0 : 1;\n }\n if (i === rows.length - 1) {\n if (rows[i].length % 2 === 1 || unique && i === 1) {\n centered = rightTree[i][Math.floor(rightTree[i].length / 2)];\n var centerObjct = void 0;\n centerObjct = layout.nameTable[centered];\n var childDimension = void 0;\n var centeredX = layout.graphNodes[centered].x;\n var centeredY = layout.graphNodes[centered].y;\n childDimension = this.getDimensions(layout, centerObjct, centeredX, centeredY, lev + 1);\n diff = undefined;\n if (!align && unique) {\n if (max === 1) {\n i = 0;\n }\n diff = (rightBounds[max].x + rightBounds[max].right) / 2 - (rightBounds[i].x + rightBounds[i].right) / 2;\n if (i === 0) {\n info.mid += diff;\n }\n }\n else if (!unique && rightX !== undefined) {\n diff = rightX - layout.horizontalSpacing / 2 - (centeredX + childDimension.width / 2);\n }\n if (diff !== undefined) {\n this.updateRearBoundsOfTree(layout, rightTree[i], diff, dimensions);\n }\n if (unique) {\n info.mid = (rightCenter + leftCenter) / 2 + (i === 0 ? diff : 0) - dimensions.width / 2;\n }\n if (info.mid === undefined && layout.graphNodes[centered]) {\n info.mid = centeredX;\n }\n align = false;\n i++;\n }\n }\n };\n HierarchicalTree.prototype.updateRearBoundsOfTree = function (layout, rightTree, diff, dimensions) {\n for (var j = 0; j < rightTree.length; j++) {\n var childInfo = layout.graphNodes[rightTree[j]];\n var child = layout.nameTable[rightTree[j]];\n childInfo.x += diff;\n childInfo.canMoveBy += diff;\n if (j === rightTree.length - 1) {\n //removed child dimensions call calculation, since that is not used\n var childBnds = {\n x: childInfo.x, y: childInfo.y, right: childInfo.x +\n dimensions.width, bottom: childInfo.y + dimensions.height\n };\n var intersect = this.findIntersectingLevels(layout, childBnds, childInfo.actualLevel);\n this.updateRearBounds(layout, null, [{ rBounds: childBnds }], childInfo.actualLevel, intersect);\n }\n }\n };\n HierarchicalTree.prototype.splitRows = function (rows, leftTree, rightTree) {\n for (var i = 0; i < rows.length; i++) {\n leftTree[i] = [];\n rightTree[i] = [];\n var half = void 0;\n half = rows[i].length;\n if (rows[i].length % 2 !== 1) {\n half = Math.ceil(rows[i].length / 2);\n for (var k = 0; k < half; k++) {\n leftTree[i].push(rows[i][k]);\n }\n }\n for (var j = leftTree[i].length; j < rows[i].length; j++) {\n rightTree[i].push(rows[i][j]);\n }\n }\n };\n HierarchicalTree.prototype.updateVerticalTree = function (layout, shape, x, y, level, dontUpdate) {\n //declarations\n var child;\n var childInfo;\n var childBounds;\n var childWidth;\n var childHeight;\n var prevBounds;\n var bounds;\n var actBounds;\n var oddBounds;\n var evenBounds;\n var dimensions = this.getDimensions(layout, shape, x, y, level);\n var info = layout.graphNodes[shape.id];\n var firstChild = layout.nameTable[info.tree.children[0]];\n var h = layout.orientation.indexOf('Left') !== -1 ? true : false;\n var factor = info.tree.type === 'Left' ? -1 : 0;\n var right = x;\n var bottom = y;\n var lev;\n lev = level;\n var i;\n var intersect;\n var type;\n var levels = [];\n var oddLevels = [];\n var canMoveBy;\n var diff;\n for (i = 0; i < info.tree.children.length; i++) {\n if (info.tree.type === 'Alternate') {\n //arrange at both left and right\n type = (i % 2 === 0 && info.tree.children.length > 2) ? 'Left' : 'Right';\n factor = (i % 2 === 0 && info.tree.children.length > 2) ? -1 : 0;\n }\n right = x + this.findOffset(layout, shape, info, type);\n child = layout.nameTable[info.tree.children[i]];\n childWidth = h ? child.actualSize.height : child.actualSize.width;\n childHeight = h ? child.actualSize.width : child.actualSize.height;\n //Update sub tree\n childBounds = this.updateTree(layout, right + factor * childWidth, bottom, child, level + 1, undefined, true);\n childInfo = layout.graphNodes[child.id];\n actBounds = { x: childInfo.x, y: childInfo.y, right: childInfo.x + childWidth, bottom: childInfo.y + childHeight };\n if (i === 0) {\n this.uniteRects(childBounds, actBounds);\n bounds = childBounds;\n }\n else {\n this.uniteRects(bounds, childBounds);\n }\n //Check and adjust the space left from previous subtree/sibling\n if (childInfo.prevBounds && !(info.tree.type === 'Alternate' && i % 2 === 1 && info.tree.children.length > 2)) {\n canMoveBy = canMoveBy !== undefined ? Math.min(childInfo.canMoveBy, canMoveBy) : childInfo.canMoveBy;\n }\n //Max level of the subtree node\n info.maxLevel = Math.max(info.maxLevel || 0, childInfo.maxLevel || 0);\n if (!(info.tree.type === 'Alternate' && info.tree.children.length > 2 && i % 2 === 0)) {\n if (info.tree.type === 'Alternate' && info.tree.children.length > 2) {\n //alternate - arrange children with even index(0,2,4,6,..) at the next level\n bottom = Math.max(childBounds.bottom, prevBounds.bottom) + layout.verticalSpacing / 2;\n }\n else {\n // left/right - arrange next child at the nect level(bottom)\n bottom = childBounds.bottom + layout.verticalSpacing / 2;\n }\n level = info.maxLevel;\n levels.push({ rBounds: actBounds });\n if (!evenBounds) {\n evenBounds = {\n x: childInfo.x, y: childInfo.y, right: childInfo.x + childWidth,\n bottom: childInfo.y + childHeight\n };\n }\n else {\n this.uniteRects(evenBounds, actBounds);\n }\n if (childInfo.levelBounds) {\n levels = levels.concat(childInfo.levelBounds);\n }\n }\n else {\n if (i !== 0) {\n bottom = prevBounds.bottom + layout.verticalSpacing / 2;\n }\n oddLevels.push({ rBounds: actBounds });\n if (childInfo.levelBounds) {\n oddLevels = oddLevels.concat(childInfo.levelBounds);\n }\n }\n if (i === 0) {\n info.firstChild = { x: childInfo.x, canMoveBy: childInfo.canMoveBy, child: child.id };\n }\n if (this.hasChild(layout, child)) {\n if (!info.firstChild || info.firstChild.x >= childInfo.firstChild.x) {\n if (childInfo.firstChild && info.firstChild.canMoveBy < childInfo.canMoveBy) {\n var canMoveBy_1 = info.firstChild.canMoveBy;\n childInfo.canMoveBy = canMoveBy_1;\n layout.graphNodes[info.firstChild.child].canMoveBy = canMoveBy_1;\n info.firstChild.canMoveBy = canMoveBy_1;\n }\n info.firstChild = {\n x: childInfo.firstChild.x, canMoveBy: canMoveBy !== undefined ? canMoveBy : childInfo.canMoveBy,\n child: child.id\n };\n }\n else if (childInfo.firstChild && childInfo.translated && info.firstChild.canMoveBy > childInfo.canMoveBy) {\n info.firstChild.canMoveBy = layout.graphNodes[info.firstChild.child].canMoveBy = childInfo.canMoveBy;\n }\n }\n prevBounds = actBounds;\n }\n //To set level bounds(right most position of levels)\n if (!dontUpdate) {\n if (info.tree.type === 'Alternate' && info.tree.children.length > 2) {\n oddBounds = {\n x: oddLevels[0].rBounds.x, y: oddLevels[0].rBounds.y,\n right: oddLevels[oddLevels.length - 1].rBounds.right, bottom: oddLevels[oddLevels.length - 1].rBounds.bottom\n };\n intersect = this.findIntersectingLevels(layout, oddBounds, lev + 1);\n this.updateRearBounds(layout, null, oddLevels, lev + 1, intersect);\n }\n intersect = this.findIntersectingLevels(layout, evenBounds || bounds, lev + 1);\n this.updateRearBounds(layout, null, evenBounds ? levels : [{ rBounds: bounds }], lev + 1, intersect);\n }\n else {\n info.levelBounds = levels;\n }\n if (!isNaN(canMoveBy)) {\n layout.graphNodes[firstChild.id].canMoveBy = canMoveBy;\n }\n info.childBounds = bounds;\n info.mid = x;\n return bounds;\n };\n HierarchicalTree.prototype.splitChildrenInRows = function (layout, shape) {\n var info;\n info = layout.graphNodes[shape.id];\n var column;\n column = 4;\n var rows = [];\n var childNodes;\n childNodes = info.tree.children.length;\n var children = this.extend(info.tree.children);\n if (info.tree.rows) {\n var count = void 0;\n count = info.tree.children.length;\n var columns = void 0;\n columns = Math.ceil(count / info.tree.rows);\n if (columns % 2 === 0) {\n column = columns;\n }\n else {\n column = columns + 1;\n }\n }\n else if (info.tree.children.length === 3 || info.tree.children.length === 4) {\n column = 2;\n }\n else if (info.tree.children.length === 5) {\n column = 3;\n }\n while (childNodes > 0) {\n rows[rows.length] = children.splice(0, column);\n childNodes -= column;\n if (childNodes < column) {\n column = childNodes;\n }\n }\n return rows;\n };\n HierarchicalTree.prototype.extend = function (temp) {\n var i;\n var dummy = [];\n for (i = 0; i < temp.length; i++) {\n dummy[i] = temp[i];\n }\n return dummy;\n };\n HierarchicalTree.prototype.findOffset = function (layout, shape, info, type) {\n var offset = 0;\n var space = (layout.orientation.indexOf('Left') !== -1) ? shape.actualSize.height :\n shape.actualSize.width;\n var treeType = type ? type : info.tree.type;\n offset = info.tree.offset || 20;\n if (info.tree.type === 'Alternate') {\n if (offset >= layout.horizontalSpacing) {\n offset = layout.horizontalSpacing / 2;\n }\n }\n switch (treeType) {\n case 'Left':\n offset = space / 2 - offset;\n break;\n case 'Right':\n offset = offset + space / 2;\n break;\n }\n return offset;\n };\n HierarchicalTree.prototype.uniteRects = function (rect1, rect2) {\n //Unite two rects\n rect1.x = Math.min(rect1.x, rect2.x);\n rect1.right = Math.max(rect1.right, rect2.right);\n rect1.bottom = Math.max(rect1.bottom, rect2.bottom);\n };\n HierarchicalTree.prototype.spaceLeftFromPrevSubTree = function (layout, shape, bounds) {\n var info;\n info = layout.graphNodes[shape.id];\n var dif;\n var prevBounds;\n var intersect;\n var k;\n var space;\n space = layout.horizontalSpacing;\n //Find the minimum distance to move towards previous sub tree\n for (k = 0; k < info.intersect.length; k++) {\n prevBounds = layout.levels[info.intersect[k]].rBounds;\n dif = bounds.x - (prevBounds.right + space);\n if (info.diff === undefined || dif < info.diff) {\n info.diff = dif;\n info.prevBounds = layout.levels[info.intersect[k]].rBounds;\n }\n }\n };\n HierarchicalTree.prototype.findIntersectingLevels = function (layout, bounds, level, actualLevel) {\n //intersecting with exact Level\n var bnds;\n bnds = { x: bounds.x, y: bounds.y, right: bounds.right, bottom: bounds.bottom };\n bnds.y -= layout.verticalSpacing / 2;\n bnds.bottom += layout.verticalSpacing / 2;\n var intersectingLevels;\n intersectingLevels = [];\n var rBounds;\n var l;\n l = actualLevel !== undefined ? actualLevel : level;\n rBounds = layout.levels[l] ? layout.levels[l].rBounds : null;\n //Performance - We can consider only the intersecting levels\n do {\n if (rBounds && ((bnds.y < rBounds.y && bnds.bottom > rBounds.y)\n || (bnds.y < rBounds.bottom && rBounds.bottom < bnds.bottom) ||\n bnds.y >= rBounds.y &&\n bnds.bottom <= rBounds.bottom || bnds.y < rBounds.y && bnds.bottom > rBounds.bottom)) {\n var index = 0;\n intersectingLevels.splice(index, 0, l);\n }\n else if (rBounds && rBounds.bottom < bnds.y) {\n break;\n }\n l--;\n rBounds = layout.levels[l] ? layout.levels[l].rBounds : null;\n } while (l >= 0);\n l = (actualLevel !== undefined ? actualLevel : level) + 1;\n rBounds = layout.levels[l] ? layout.levels[l].rBounds : null;\n do {\n if (rBounds && ((bnds.y < rBounds.y && bnds.bottom > rBounds.y) ||\n (bnds.y < rBounds.bottom && rBounds.bottom < bnds.bottom) ||\n bnds.y >= rBounds.y && bnds.bottom <= rBounds.bottom || bnds.y < rBounds.y && bnds.bottom > rBounds.bottom)) {\n intersectingLevels.push(l);\n }\n else if (rBounds && rBounds.y > bnds.bottom) {\n break;\n }\n l++;\n rBounds = layout.levels[l] ? layout.levels[l].rBounds : null;\n } while (l <= layout.levels.length);\n return intersectingLevels;\n };\n HierarchicalTree.prototype.findLevel = function (layout, bounds, level) {\n var bnds;\n bnds = bounds;\n var l;\n l = 0;\n var rBounds;\n rBounds = layout.levels[l] ? layout.levels[l].rBounds : null;\n while (l < layout.levels.length) {\n if (rBounds && bnds.bottom < rBounds.y) {\n return l;\n }\n else {\n l++;\n }\n rBounds = layout.levels[l] ? layout.levels[l].rBounds : null;\n }\n return l;\n };\n HierarchicalTree.prototype.getParentNode = function (layout, node) {\n //Return the first parent node\n return layout.nameTable[layout.nameTable[node.inEdges[0]].sourceID];\n };\n HierarchicalTree.prototype.updateEdges = function (layout, node, depth) {\n var layoutInfo;\n layoutInfo = layout.graphNodes[node.id];\n var j;\n if (node.outEdges && node.outEdges.length && node.isExpanded) {\n for (j = 0; j < node.outEdges.length; j++) {\n var edge = void 0;\n edge = layout.nameTable[layout.nameTable[node.outEdges[j]].targetID];\n if (!edge.excludeFromLayout) {\n if (layoutInfo.tree.children.indexOf(edge.id) === -1) {\n layoutInfo.tree.children.push(edge.id);\n }\n if (edge.outEdges && edge.outEdges.length && edge.isExpanded) {\n layoutInfo.tree.hasSubTree = true;\n }\n this.updateEdges(layout, edge, depth + 1);\n }\n }\n }\n //set level info\n layoutInfo.tree.level = depth;\n //By default, orientation is horizontal for nested trees\n if (layoutInfo.tree.hasSubTree) {\n layoutInfo.tree.orientation = 'Horizontal';\n layoutInfo.tree.type = 'Center';\n }\n //Customizing assistants and children collection\n //Performance-Instead of reading the method everytime, we can set once and can reuse that\n if (layout.getLayoutInfo && layout.type === 'OrganizationalChart') {\n layout.getLayoutInfo(node, layoutInfo.tree);\n if (layoutInfo.tree.type === 'Balanced' && layoutInfo.tree.hasSubTree) {\n layoutInfo.tree.type = 'Center';\n layoutInfo.tree.orientation = 'Horizontal';\n }\n }\n if (layout.level && layoutInfo.tree.type !== 'Alternate' && depth >= layout.level) {\n layoutInfo.tree.hasSubTree = false;\n }\n };\n HierarchicalTree.prototype.updateAnchor = function (layout, bounds, viewPort) {\n var node;\n var fixedNode;\n var width = 0;\n var height = 0;\n var mod = 0;\n var viewPortBounds = new Rect(0, 0, viewPort.x, viewPort.y);\n var layoutBounds;\n layoutBounds = layout.bounds ? layout.bounds : viewPortBounds;\n var orientation = layout.orientation;\n //Anchor based on fixed nodes\n if (layout.fixedNode) {\n fixedNode = layout.nameTable[layout.fixedNode];\n width = fixedNode.actualSize.width;\n height = fixedNode.actualSize.height;\n layout.anchorX = fixedNode.offsetX;\n layout.anchorY = fixedNode.offsetY;\n var pivot = fixedNode.pivot;\n layout.anchorX += layout.orientation === 'RightToLeft' ? width * pivot.x : -width * pivot.x;\n layout.anchorY += layout.orientation === 'BottomToTop' ? height * pivot.y : -height * pivot.y;\n node = fixedNode;\n mod = 0;\n while (node.inEdges.length) {\n node = this.getParentNode(layout, node);\n mod += layout.graphNodes[node.id].subTreeTranslation || 0;\n }\n if (layout.orientation.indexOf('Left') !== -1) {\n layout.anchorX -= layout.graphNodes[fixedNode.id].y;\n layout.anchorY -= layout.graphNodes[fixedNode.id].x + mod;\n }\n else {\n layout.anchorX -= layout.graphNodes[fixedNode.id].x + mod;\n layout.anchorY -= layout.graphNodes[fixedNode.id].y;\n }\n }\n else {\n if (orientation === 'TopToBottom' || orientation === 'BottomToTop') {\n switch (layout.horizontalAlignment) {\n case 'Left':\n layout.anchorX = (layoutBounds.x - bounds.x) + layout.margin.left;\n break;\n case 'Right':\n layout.anchorX = layoutBounds.x + layoutBounds.width - layout.margin.right - bounds.right;\n break;\n case 'Auto':\n case 'Center':\n layout.anchorX = layoutBounds.x + layoutBounds.width / 2 - (bounds.x + bounds.right) / 2;\n break;\n }\n switch (layout.verticalAlignment) {\n case 'Auto':\n case 'Top':\n var top_1;\n top_1 = layoutBounds.y + layout.margin.top;\n layout.anchorY = orientation === 'TopToBottom' ? top_1 : bounds.bottom + top_1;\n break;\n case 'Bottom':\n var bottom = void 0;\n bottom = layoutBounds.y + layoutBounds.height - layout.margin.bottom;\n layout.anchorY = orientation === 'TopToBottom' ? bottom - bounds.bottom : bottom;\n break;\n case 'Center':\n var center = void 0;\n center = layoutBounds.y + layoutBounds.height / 2;\n layout.anchorY = layout.orientation === 'TopToBottom' ?\n center - (bounds.y + bounds.bottom) / 2 : center + (bounds.y + bounds.bottom) / 2;\n break;\n }\n }\n else {\n switch (layout.horizontalAlignment) {\n case 'Auto':\n case 'Left':\n var left = void 0;\n left = layoutBounds.x + layout.margin.left;\n layout.anchorX = orientation === 'LeftToRight' ? left : bounds.bottom + left;\n break;\n case 'Right':\n var right = void 0;\n right = layoutBounds.x + layoutBounds.width - layout.margin.right;\n layout.anchorX = orientation === 'LeftToRight' ? right - bounds.bottom : right;\n break;\n case 'Center':\n var center = void 0;\n center = layoutBounds.width / 2 + layoutBounds.x;\n layout.anchorX = layout.orientation === 'LeftToRight' ?\n center - (bounds.y + bounds.bottom) / 2 : center + (bounds.y + bounds.bottom) / 2;\n break;\n }\n switch (layout.verticalAlignment) {\n case 'Top':\n layout.anchorY = layoutBounds.y + layout.margin.top - bounds.x;\n break;\n case 'Auto':\n case 'Center':\n layout.anchorY = layoutBounds.y + layoutBounds.height / 2 - (bounds.right + bounds.x) / 2;\n break;\n case 'Bottom':\n layout.anchorY = layoutBounds.y + layoutBounds.height - layout.margin.bottom - bounds.right;\n break;\n }\n }\n }\n };\n HierarchicalTree.prototype.updateConnectors = function (layout, node, level) {\n var i;\n var info;\n var nodeWidth;\n var nodeHeight;\n var targetWidth;\n var targetHeight;\n var length;\n var offsetLen;\n var points;\n var segments;\n var target;\n var conn;\n var relative;\n var center;\n var layoutProp;\n //Route out edges\n info = layout.graphNodes[node.id];\n var direction;\n if (node.outEdges.length) {\n for (i = 0; i < node.outEdges.length; i++) {\n conn = layout.nameTable[node.outEdges[i]];\n conn.points = [];\n target = layout.nameTable[conn.targetID];\n if (conn.visible) {\n conn.visited = true;\n if (layout.getConnectorSegments) {\n segments = layout.getConnectorSegments(conn);\n }\n else {\n if (info && info.tree.children.indexOf(conn.targetID) !== -1) {\n conn.segments = [];\n if (layout.type === 'OrganizationalChart' && conn.type === 'Orthogonal') {\n this.updateSegments(layout, conn, node, target, i);\n }\n }\n }\n if (target && (target.isExpanded || this.hasChild(layout, target))) {\n this.updateConnectors(layout, target, level + 1);\n }\n }\n }\n }\n if (info && info.tree.assistants.length) {\n //In-Edge routing of assistant nodes\n for (i = 0; i < info.tree.assistants.length; i++) {\n target = layout.nameTable[info.tree.assistants[i]];\n conn = layout.nameTable[target.inEdges[0]];\n this.get3Points(layout, node, target, conn);\n if (target.isExpanded || this.hasChild(layout, target)) {\n this.updateConnectors(layout, target, level + 1);\n }\n }\n }\n };\n HierarchicalTree.prototype.updateSegments = function (layout, conn, node, target, i) {\n var info = layout.graphNodes[node.id];\n //Connector routing - Horizontal layout orientation\n if (info.tree.assistants.length) {\n //Route in-edge of child node, if the parent has assistant\n this.updateSegmentsForHorizontalOrientation(layout, node, target, conn);\n }\n else {\n //Route in-edge of child node\n if (info.tree.orientation === 'Horizontal' && info.tree.type === 'Balanced') {\n this.updateSegmentsForBalancedTree(layout, conn, node, target, i);\n }\n else {\n if (info.tree.orientation === 'Horizontal') {\n this.updateSegmentsForHorizontalOrientation(layout, node, target, conn);\n }\n else {\n if (info.tree.offset < 5) {\n this.get5Points(layout, node, target, conn);\n }\n else {\n this.get3Points(layout, node, target, conn);\n }\n }\n }\n }\n };\n HierarchicalTree.prototype.updateSegmentsForBalancedTree = function (layout, connector, node, target, i) {\n var info = layout.graphNodes[node.id];\n var center;\n var relative;\n if (info.tree.children.length === 5 && i > 2) {\n relative = info.tree.children[1];\n if (isNaN(layout.graphNodes[relative].treeWidth)) {\n layout.graphNodes[relative].treeWidth = layout.nameTable[relative].actualSize.width;\n }\n var factor = i !== 3 ? 1 : -1;\n if (layout.orientation.indexOf('Left') !== -1) {\n center = layout.nameTable[relative].offsetY - layout.graphNodes[relative].treeWidth / 2 -\n (layout.verticalSpacing * factor / 2);\n }\n else {\n center = layout.nameTable[relative].offsetX +\n layout.graphNodes[relative].treeWidth / 2 + (layout.horizontalSpacing * factor) / 2;\n }\n this.getSegmentsForMultipleRows(layout, node, target, connector);\n }\n else {\n if (info.tree.children.length > 5) {\n if (i < 4) {\n this.getSegmentsForMultipleRows(layout, node, target, connector);\n }\n else {\n this.updateSegmentsForHorizontalOrientation(layout, node, target, connector);\n }\n }\n else if (info.tree.children.length === 4) {\n if (i < 2) {\n this.getSegmentsForMultipleRows(layout, node, target, connector);\n }\n else {\n this.updateSegmentsForHorizontalOrientation(layout, node, target, connector);\n }\n }\n else {\n this.getSegmentsForMultipleRows(layout, node, target, connector);\n }\n }\n };\n HierarchicalTree.prototype.get3Points = function (layout, node, target, connector) {\n var points = [];\n var nodeBounds = this.getBounds(node);\n var targetBounds = this.getBounds(target);\n if (layout.orientation.indexOf('Top') !== -1) {\n var startingPoint = layout.orientation.indexOf('Top') === 0 ? nodeBounds.bottomCenter :\n nodeBounds.topCenter;\n var endPoint = node.offsetX > target.offsetX ? targetBounds.middleRight : targetBounds.middleLeft;\n points.push(startingPoint, { x: nodeBounds.bottomCenter.x, y: endPoint.y }, endPoint);\n }\n else {\n var startingPoint = layout.orientation.indexOf('Left') === 0 ? nodeBounds.middleRight :\n nodeBounds.middleLeft;\n var endPoint = node.offsetY > target.offsetY ? targetBounds.bottomCenter : targetBounds.topCenter;\n points.push(startingPoint, { x: targetBounds.bottomCenter.x, y: nodeBounds.middleRight.y }, endPoint);\n }\n this.getSegmentsFromPoints(points, connector);\n };\n HierarchicalTree.prototype.get5Points = function (layout, node, target, connector) {\n var points = [];\n var layoutprop;\n var nodeBounds = this.getBounds(node);\n var targetBounds = this.getBounds(target);\n var info = layout.graphNodes[node.id];\n if (node.offsetX > target.offsetX) {\n points.push(nodeBounds.bottomCenter, { x: nodeBounds.bottomCenter.x, y: (nodeBounds.bottomCenter.y + layout.verticalSpacing / 4) }, {\n x: (targetBounds.middleRight.x + layout.horizontalSpacing / 2),\n y: (nodeBounds.bottomCenter.y + layout.verticalSpacing / 4)\n }, { x: (targetBounds.middleRight.x + layout.horizontalSpacing / 2), y: targetBounds.middleRight.y }, targetBounds.middleRight);\n }\n else {\n points.push(nodeBounds.bottomCenter, { x: nodeBounds.bottomCenter.x, y: (nodeBounds.bottomCenter.y + layout.verticalSpacing / 4) }, {\n x: (targetBounds.middleLeft.x - layout.horizontalSpacing / 2),\n y: (nodeBounds.bottomCenter.y + layout.verticalSpacing / 4)\n }, { x: (targetBounds.middleLeft.x - layout.horizontalSpacing / 2), y: targetBounds.middleLeft.y }, targetBounds.middleLeft);\n }\n this.getSegmentsFromPoints(points, connector);\n };\n HierarchicalTree.prototype.getSegmentsFromPoints = function (points, connector) {\n var segments = [];\n var segment;\n for (var i = 0; i < points.length - 2; i++) {\n segment = new OrthogonalSegment(connector, 'segments', { type: 'Orthogonal' }, true);\n segment.direction = Point.direction(points[i], points[i + 1]);\n segment.length = Point.distancePoints(points[i], points[i + 1]);\n segments.push(segment);\n }\n connector.segments = segments;\n };\n HierarchicalTree.prototype.getSegmentsForMultipleRows = function (layout, node, target, connector) {\n var points = [];\n var segments = [];\n var point;\n var segment;\n var targetBounds = this.getBounds(target);\n var nodeBounds = this.getBounds(node);\n switch (layout.orientation) {\n case 'TopToBottom':\n point = { x: nodeBounds.bottomCenter.x, y: (nodeBounds.bottomCenter.y + layout.verticalSpacing / 4) };\n segment = new OrthogonalSegment(connector, 'segments', { type: 'Orthogonal' }, true);\n segment.direction = Point.direction(nodeBounds.bottomCenter, point);\n segment.length = Point.distancePoints(nodeBounds.bottomCenter, point);\n segments.push(segment);\n break;\n case 'BottomToTop':\n point = { x: nodeBounds.bottomCenter.x, y: (nodeBounds.topCenter.y - layout.verticalSpacing / 4) };\n segment = new OrthogonalSegment(connector, 'segments', { type: 'Orthogonal' }, true);\n segment.direction = Point.direction(nodeBounds.topCenter, point);\n segment.length = Point.distancePoints(nodeBounds.topCenter, point);\n segments.push(segment);\n break;\n case 'LeftToRight':\n point = { x: (nodeBounds.middleRight.x + layout.verticalSpacing / 4), y: nodeBounds.middleRight.y, };\n segment = new OrthogonalSegment(connector, 'segments', { type: 'Orthogonal' }, true);\n segment.direction = Point.direction(nodeBounds.middleRight, point);\n segment.length = Point.distancePoints(nodeBounds.middleRight, point);\n segments.push(segment);\n if (targetBounds.center.y !== nodeBounds.center.y) {\n var point3 = { x: (nodeBounds.middleRight.x + layout.verticalSpacing / 4), y: targetBounds.middleLeft.y };\n segment = new OrthogonalSegment(connector, 'segments', { type: 'Orthogonal' }, true);\n segment.direction = Point.direction(point, point3);\n segment.length = Point.distancePoints(point, point3);\n segments.push(segment);\n }\n break;\n case 'RightToLeft':\n point = { x: (nodeBounds.middleLeft.x - layout.verticalSpacing / 4), y: nodeBounds.middleRight.y };\n segment = new OrthogonalSegment(connector, 'segments', { type: 'Orthogonal' }, true);\n segment.direction = Point.direction(nodeBounds.middleLeft, point);\n segment.length = Point.distancePoints(nodeBounds.middleLeft, point);\n segments.push(segment);\n if (targetBounds.center.y !== nodeBounds.center.y) {\n var point_1 = { x: (nodeBounds.middleLeft.x - layout.verticalSpacing / 4), y: targetBounds.middleLeft.y };\n segment = new OrthogonalSegment(connector, 'segments', { type: 'Orthogonal' }, true);\n segment.direction = Point.direction(point_1, point_1);\n segment.length = Point.distancePoints(point_1, point_1);\n segments.push(segment);\n }\n break;\n }\n connector.segments = segments;\n };\n HierarchicalTree.prototype.updateSegmentsForHorizontalOrientation = function (layout, node, target, connector) {\n var points = [];\n var point2;\n var segment;\n var segments = [];\n var nodeBounds = this.getBounds(node);\n var targetBounds = this.getBounds(target);\n switch (layout.orientation) {\n case 'TopToBottom':\n point2 = { x: nodeBounds.bottomCenter.x, y: (targetBounds.topCenter.y - layout.verticalSpacing / 2) };\n segment = new OrthogonalSegment(connector, 'segments', { type: 'Orthogonal' }, true);\n segment.direction = Point.direction(nodeBounds.bottomCenter, point2);\n segment.length = Point.distancePoints(nodeBounds.bottomCenter, point2);\n segments.push(segment);\n break;\n case 'BottomToTop':\n point2 = { x: nodeBounds.topCenter.x, y: (targetBounds.bottomCenter.y + layout.verticalSpacing / 2) };\n segment = new OrthogonalSegment(connector, 'segments', { type: 'Orthogonal' }, true);\n segment.direction = Point.direction(nodeBounds.topCenter, point2);\n segment.length = Point.distancePoints(nodeBounds.topCenter, point2);\n segments.push(segment);\n break;\n case 'LeftToRight':\n point2 = { x: (targetBounds.middleLeft.x - layout.verticalSpacing / 2), y: nodeBounds.middleRight.y };\n segment = new OrthogonalSegment(connector, 'segments', { type: 'Orthogonal' }, true);\n segment.direction = Point.direction(nodeBounds.middleRight, point2);\n segment.length = Point.distancePoints(nodeBounds.middleRight, point2);\n segments.push(segment);\n if (targetBounds.center.y !== nodeBounds.center.y) {\n var point3 = { x: (targetBounds.middleLeft.x - layout.verticalSpacing / 2), y: targetBounds.middleLeft.y };\n segment = new OrthogonalSegment(connector, 'segments', { type: 'Orthogonal' }, true);\n segment.direction = Point.direction(point2, point3);\n segment.length = Point.distancePoints(point2, point3);\n segments.push(segment);\n }\n break;\n case 'RightToLeft':\n point2 = { x: (targetBounds.middleRight.x + layout.verticalSpacing / 2), y: nodeBounds.middleRight.y };\n segment = new OrthogonalSegment(connector, 'segments', { type: 'Orthogonal' }, true);\n segment.direction = Point.direction(nodeBounds.middleLeft, point2);\n segment.length = Point.distancePoints(nodeBounds.middleLeft, point2);\n segments.push(segment);\n if (targetBounds.center.y !== nodeBounds.center.y) {\n var point = { x: (targetBounds.middleRight.x + layout.verticalSpacing / 2), y: targetBounds.middleLeft.y };\n segment = new OrthogonalSegment(connector, 'segments', { type: 'Orthogonal' }, true);\n segment.direction = Point.direction(point2, point);\n segment.length = Point.distancePoints(point2, point);\n segments.push(segment);\n }\n break;\n }\n connector.segments = segments;\n return points;\n };\n HierarchicalTree.prototype.updateNodes = function (layout, node, mod, update, dx, dy) {\n var i;\n var child;\n var width;\n var height;\n var offsetX;\n var offsetY;\n width = node.actualSize.width;\n height = node.actualSize.height;\n if (!node.excludeFromLayout) {\n offsetX = layout.anchorX;\n offsetY = layout.anchorY;\n /*Performance - instead of checking conditions for every node, we can make the layout related\n conditions once and we can reuse them*/\n if (layout.orientation === 'LeftToRight') {\n offsetX += layout.graphNodes[node.id].y + width / 2;\n offsetY += layout.graphNodes[node.id].x + mod + height / 2;\n }\n else if (layout.orientation === 'RightToLeft') {\n offsetX -= layout.graphNodes[node.id].y + width / 2;\n offsetY += layout.graphNodes[node.id].x + mod + height / 2;\n }\n else if (layout.orientation === 'TopToBottom') {\n offsetX += layout.graphNodes[node.id].x + mod + width / 2;\n offsetY += layout.graphNodes[node.id].y + height / 2;\n }\n else {\n offsetX += layout.graphNodes[node.id].x + mod + width / 2;\n offsetY -= layout.graphNodes[node.id].y + height / 2;\n }\n if (layout.graphNodes) {\n dx = dx ? dx : 0;\n dy = dy ? dy : 0;\n offsetX += dx;\n offsetY += dy;\n if (!this.isAnimation) {\n node.offsetX = offsetX;\n node.offsetY = offsetY;\n }\n }\n var objects = { id: node.id, differenceX: offsetX - node.offsetX, differenceY: offsetY - node.offsetY };\n layout.objects.push(objects);\n var list = void 0;\n list = [];\n if (this.hasChild(layout, node)) {\n for (i = 0; i < layout.graphNodes[node.id].tree.children.length; i++) {\n child = layout.nameTable[layout.graphNodes[node.id].tree.children[i]];\n this.updateNodes(layout, child, mod + (layout.graphNodes[node.id].subTreeTranslation || 0), update, dx, dy);\n list.push(child);\n }\n }\n if (layout.graphNodes[node.id].tree.assistants.length) {\n for (i = 0; i < layout.graphNodes[node.id].tree.assistants.length; i++) {\n child = layout.nameTable[layout.graphNodes[node.id].tree.assistants[i]];\n this.updateNodes(layout, child, mod + (layout.graphNodes[node.id].subTreeTranslation || 0), null, dx, dy);\n }\n }\n }\n };\n return HierarchicalTree;\n}());\nexport { HierarchicalTree };\n","import { Rect } from '../primitives/rect';\nimport { getFunction } from '../utility/base-util';\nimport { HierarchicalTree } from './hierarchical-tree';\n/**\n * Layout for mind-map tree\n */\nvar MindMap = /** @class */ (function () {\n /**\n * Constructor for the organizational chart module.\n * @private\n */\n function MindMap() {\n /**\n * Defines the layout animation\n *\n */\n this.isAnimation = false;\n //constructs the layout module\n }\n /**\n * To destroy the organizational chart\n * @return {void}\n * @private\n */\n MindMap.prototype.destroy = function () {\n /**\n * Destroy method performed here\n */\n };\n /**\n * Get module name.\n */\n MindMap.prototype.getModuleName = function () {\n /**\n * Returns the module name of the layout\n */\n return 'MindMapChart';\n };\n MindMap.prototype.updateLayout = function (nodes, nameTable, layoutProp, viewPort, uniqueId, root) {\n var isRoot;\n isRoot = this.checkRoot(nodes, layoutProp, uniqueId, root, nameTable);\n if (isRoot) {\n layoutProp.fixedNode = isRoot;\n }\n else {\n for (var _i = 0, nodes_1 = nodes; _i < nodes_1.length; _i++) {\n var node = nodes_1[_i];\n if (!node.excludeFromLayout) {\n if (!node.inEdges || !node.inEdges.length) {\n layoutProp.fixedNode = node.id;\n break;\n }\n }\n }\n }\n var rootNode = nameTable[layoutProp.fixedNode];\n var fistLevelNodes = this.findFirstLevelNodes(rootNode, layoutProp, nameTable);\n var leftNodes = [];\n var rightNodes = [];\n var getMindmapBranch = getFunction(layoutProp.getBranch);\n getMindmapBranch = getMindmapBranch || getFunction(this.getBranch);\n for (var _a = 0, fistLevelNodes_1 = fistLevelNodes; _a < fistLevelNodes_1.length; _a++) {\n var node = fistLevelNodes_1[_a];\n var align = getMindmapBranch(node, fistLevelNodes);\n (align === 'Left') ? leftNodes.push(node) : rightNodes.push(node);\n }\n var viewPortBounds = new Rect(0, 0, viewPort.x, viewPort.y);\n nameTable[layoutProp.fixedNode].offsetX = viewPortBounds.x + viewPortBounds.width / 2;\n nameTable[layoutProp.fixedNode].offsetY = viewPortBounds.y + viewPortBounds.height / 2;\n if (leftNodes.length) {\n this.updateMindMapBranch(nodes, rightNodes, nameTable, layoutProp, viewPort, uniqueId, 'Left');\n }\n if (rightNodes.length) {\n this.updateMindMapBranch(nodes, leftNodes, nameTable, layoutProp, viewPort, uniqueId, 'Right');\n }\n };\n MindMap.prototype.checkRoot = function (nodes, layoutProp, uniqueId, root, nameTable) {\n for (var _i = 0, nodes_2 = nodes; _i < nodes_2.length; _i++) {\n var node = nodes_2[_i];\n if (!node.excludeFromLayout) {\n if (node.data && (node.data[uniqueId].toString() === root || node.data[uniqueId].toString()\n === layoutProp.root)) {\n return node.id;\n }\n else if (!node.data && node.id === layoutProp.root) {\n return node.id;\n }\n }\n }\n return '';\n };\n MindMap.prototype.updateMindMapBranch = function (nodes, excludeNodes, nameTable, layoutProp, viewPort, uniqueId, side) {\n var layout;\n layout = {\n type: 'HierarchicalTree',\n horizontalSpacing: layoutProp.verticalSpacing, verticalSpacing: layoutProp.horizontalSpacing,\n verticalAlignment: layoutProp.verticalAlignment, horizontalAlignment: layoutProp.horizontalAlignment,\n fixedNode: layoutProp.fixedNode, getLayoutInfo: getFunction(layoutProp.getLayoutInfo), margin: layoutProp.margin,\n root: layoutProp.fixedNode\n };\n layout.orientation = (side === 'Left') ? 'LeftToRight' : 'RightToLeft';\n this.excludeFromLayout(excludeNodes, nameTable, true);\n var mapLayout = new HierarchicalTree();\n mapLayout.updateLayout(nodes, nameTable, layout, viewPort, uniqueId);\n this.excludeFromLayout(excludeNodes, nameTable, false);\n };\n MindMap.prototype.getBranch = function (obj, firstLevelNodes) {\n var side;\n var i = firstLevelNodes.indexOf(obj);\n if (i % 2 === 0) {\n side = 'Left';\n }\n else {\n side = 'Right';\n }\n return side;\n };\n MindMap.prototype.excludeFromLayout = function (newCollection, nameTable, exclude) {\n for (var _i = 0, newCollection_1 = newCollection; _i < newCollection_1.length; _i++) {\n var newcol = newCollection_1[_i];\n var node = nameTable[newcol.id];\n node.excludeFromLayout = exclude;\n }\n };\n MindMap.prototype.findFirstLevelNodes = function (node, layout, nameTable) {\n var parentNode;\n var fistLevelNodes = [];\n if (node && node.outEdges.length) {\n for (var _i = 0, _a = node.outEdges; _i < _a.length; _i++) {\n var outEdge = _a[_i];\n fistLevelNodes.push(nameTable[nameTable[outEdge].targetID]);\n }\n }\n return fistLevelNodes;\n };\n return MindMap;\n}());\nexport { MindMap };\n","/**\n * Radial Tree\n */\nvar RadialTree = /** @class */ (function () {\n /**\n * Constructor for the organizational chart module.\n * @private\n */\n function RadialTree() {\n //constructs the layout module\n }\n /**\n * To destroy the organizational chart\n * @return {void}\n * @private\n */\n RadialTree.prototype.destroy = function () {\n /**\n * Destroy method performed here\n */\n };\n /**\n * Get module name.\n */\n RadialTree.prototype.getModuleName = function () {\n /**\n * Returns the module name of the layout\n */\n return 'RadialTree';\n };\n RadialTree.prototype.updateLayout = function (nodes, nameTable, layoutProp, viewport) {\n var layout = {\n type: layoutProp.type,\n nameTable: nameTable, anchorX: 0, anchorY: 0,\n firstLevelNodes: [], centerNode: null, levels: [], maxLevel: 0, graphNodes: {}, layoutNodes: [],\n orientation: layoutProp.orientation,\n horizontalSpacing: layoutProp.horizontalSpacing, verticalSpacing: layoutProp.verticalSpacing,\n verticalAlignment: layoutProp.verticalAlignment, horizontalAlignment: layoutProp.horizontalAlignment,\n fixedNode: layoutProp.fixedNode, margin: layoutProp.margin,\n bounds: layoutProp.bounds, objects: [], root: layoutProp.root\n };\n this.doLayout(layout, nodes, nameTable, viewport);\n };\n RadialTree.prototype.doLayout = function (layout, nodes, nameTable, viewport) {\n var node;\n for (var i = 0; i < nodes.length; i++) {\n node = nodes[i];\n if (!node.excludeFromLayout) {\n layout.graphNodes[node.id] = this.setUpLayoutInfo(layout, node);\n if (!node.inEdges || !node.inEdges.length) {\n layout.firstLevelNodes.push(node);\n }\n }\n }\n if (layout.root && nameTable[layout.root]) {\n layout.centerNode = nameTable[layout.root];\n }\n else if (layout.firstLevelNodes.length) {\n layout.centerNode = layout.firstLevelNodes[0];\n layout.root = layout.centerNode.id;\n }\n if (layout.centerNode) {\n this.updateEdges(layout, layout.centerNode, 0, nameTable);\n this.depthFirstAllignment(layout, layout.centerNode, 0, 0);\n this.populateLevels(layout);\n this.transformToCircleLayout(layout);\n this.updateAnchor(layout, viewport);\n this.updateNodes(layout, layout.centerNode, nameTable);\n }\n };\n RadialTree.prototype.updateEdges = function (layout, node, depth, nameTable) {\n var nodeInfo = layout.graphNodes[node.id];\n layout.layoutNodes.push(nodeInfo);\n nodeInfo.level = depth;\n nodeInfo.visited = true;\n layout.maxLevel = Math.max(layout.maxLevel, depth);\n for (var j = 0; j < node.outEdges.length; j++) {\n var edge = nameTable[nameTable[node.outEdges[j]].targetID];\n if (!edge.excludeFromLayout && !edge.visited) {\n nodeInfo.children.push(edge);\n this.updateEdges(layout, edge, depth + 1, nameTable);\n }\n }\n };\n RadialTree.prototype.depthFirstAllignment = function (layout, node, x, y) {\n var newValue;\n var nodeInfo = layout.graphNodes[node.id];\n if (nodeInfo.children.length) {\n y += 300;\n for (var i = 0; i < nodeInfo.children.length; i++) {\n newValue = this.depthFirstAllignment(layout, nodeInfo.children[i], x, y);\n x = newValue.x;\n y = newValue.y;\n }\n nodeInfo.children = nodeInfo.children.sort(function (obj1, obj2) {\n return layout.graphNodes[obj1.id].x - layout.graphNodes[obj2.id].x;\n });\n var min = layout.graphNodes[nodeInfo.children[0].id].min;\n var max = layout.graphNodes[nodeInfo.children[nodeInfo.children.length - 1].id].max;\n nodeInfo.x = min + (max - min) / 2;\n x = max + layout.horizontalSpacing;\n nodeInfo.segmentOffset = max + layout.horizontalSpacing;\n nodeInfo.x -= nodeInfo.width / 2;\n nodeInfo.y -= nodeInfo.height / 2;\n nodeInfo.min = min;\n nodeInfo.max = max;\n if (nodeInfo.x < min && nodeInfo.visited) {\n nodeInfo.x = min;\n x = nodeInfo.x + nodeInfo.width / 2 - (max - min) / 2;\n nodeInfo.visited = false;\n for (var i = 0; i < nodeInfo.children.length; i++) {\n newValue = this.depthFirstAllignment(layout, nodeInfo.children[i], x, y);\n }\n nodeInfo.visited = true;\n x = nodeInfo.x + nodeInfo.width + layout.horizontalSpacing;\n }\n max = layout.graphNodes[nodeInfo.children[nodeInfo.children.length - 1].id].segmentOffset;\n x = x < max ? max : x;\n y -= 300;\n nodeInfo.y = y;\n }\n else {\n nodeInfo.x = x;\n nodeInfo.y = y;\n nodeInfo.min = x;\n nodeInfo.max = x + nodeInfo.width;\n x += nodeInfo.width + layout.horizontalSpacing;\n }\n return { x: x, y: y };\n };\n RadialTree.prototype.populateLevels = function (layout) {\n var stages = [];\n var min = Math.min.apply(Math, layout.layoutNodes.map(function (nodeInfo) { return nodeInfo.x; }));\n var max = Math.max.apply(Math, layout.layoutNodes.map(function (nodeInfo) {\n return nodeInfo.x + nodeInfo.width + layout.horizontalSpacing;\n }));\n var full = max - min;\n layout.levels = [];\n var _loop_1 = function (i) {\n stages = layout.layoutNodes.filter(function (nodeInfo) {\n if (nodeInfo.level === i) {\n return nodeInfo;\n }\n else {\n return null;\n }\n });\n var newlevel = {};\n stages = stages.sort(function (nodeInfo1, nodeInfo2) { return nodeInfo1.x - nodeInfo2.x; });\n newlevel.min = stages[0].x;\n newlevel.max = stages[stages.length - 1].x + stages[stages.length - 1].width + layout.horizontalSpacing;\n newlevel.actualCircumference = 0;\n newlevel.height = 0;\n for (var k = 0; k < stages.length; k++) {\n if (stages[k].height > newlevel.height) {\n newlevel.height = stages[k].height;\n }\n newlevel.actualCircumference += Math.max(stages[k].width, stages[k].height);\n if (k !== stages.length - 1) {\n newlevel.actualCircumference += layout.horizontalSpacing;\n }\n }\n newlevel.circumference = newlevel.max - newlevel.min;\n if (newlevel.actualCircumference < newlevel.circumference) {\n newlevel.circumference = (newlevel.circumference + newlevel.actualCircumference) / 2;\n }\n newlevel.radius = newlevel.circumference / (2 * Math.PI) + newlevel.height;\n newlevel.nodes = [];\n if (i > 1) {\n if (layout.levels[i - 1].radius + layout.levels[i - 1].height >= newlevel.radius) {\n newlevel.radius = layout.levels[i - 1].radius + layout.levels[i - 1].height;\n }\n }\n for (var j = 0; j < stages.length; j++) {\n stages[j].ratio = Math.abs(stages[j].x + stages[j].width / 2 - min) / full;\n newlevel.nodes.push(stages[j]);\n }\n layout.levels.push(newlevel);\n };\n for (var i = 0; i <= layout.maxLevel; i++) {\n _loop_1(i);\n }\n };\n RadialTree.prototype.transformToCircleLayout = function (layout) {\n var root = layout.graphNodes[layout.centerNode.id];\n root.x = 0;\n root.y = 0;\n for (var i = 1; i < layout.levels.length; i++) {\n for (var j = 0; j < layout.levels[i].nodes.length; j++) {\n var nodeInfo = layout.levels[i].nodes[j];\n nodeInfo.x = Math.cos(nodeInfo.ratio * 360 * Math.PI / 180) * (layout.levels[i].radius + layout.verticalSpacing * i);\n nodeInfo.y = Math.sin(nodeInfo.ratio * 360 * Math.PI / 180) * (layout.levels[i].radius + layout.verticalSpacing * i);\n layout.anchorX = Math.min(layout.anchorX, nodeInfo.x);\n layout.anchorY = Math.min(layout.anchorY, nodeInfo.y);\n }\n }\n };\n RadialTree.prototype.updateAnchor = function (layout, viewPort) {\n layout.anchorX = layout.centerNode.offsetX || viewPort.x / 2;\n layout.anchorY = layout.centerNode.offsetY || viewPort.y / 2;\n };\n RadialTree.prototype.updateNodes = function (layout, node, nameTable) {\n var nodeInfo = layout.graphNodes[node.id];\n var offsetX = nodeInfo.x + layout.anchorX;\n var offsetY = nodeInfo.y + layout.anchorY;\n node.offsetX += offsetX;\n node.offsetY += offsetY;\n for (var i = 0; i < nodeInfo.children.length; i++) {\n var childInfo = nodeInfo.children[i];\n this.updateNodes(layout, nameTable[childInfo.id], nameTable);\n }\n };\n RadialTree.prototype.setUpLayoutInfo = function (layout, item) {\n var info = {};\n info.name = item.id;\n info.x = 0;\n info.y = 0;\n info.min = 0;\n info.max = 0;\n info.width = item.actualSize.width;\n info.height = item.actualSize.height;\n info.children = [];\n info.level = 0;\n info.ratio = 0;\n info.visited = false;\n return info;\n };\n return RadialTree;\n}());\nexport { RadialTree };\n","/**\n * Connects diagram objects with layout algorithm\n */\nvar ComplexHierarchicalTree = /** @class */ (function () {\n /**\n * Constructor for the hierarchical tree layout module\n * @private\n */\n function ComplexHierarchicalTree() {\n //constructs the layout module\n }\n /**\n * To destroy the hierarchical tree module\n * @return {void}\n * @private\n */\n ComplexHierarchicalTree.prototype.destroy = function () {\n /**\n * Destroy method performed here\n */\n };\n /**\n * Get module name.\n */\n ComplexHierarchicalTree.prototype.getModuleName = function () {\n /**\n * Returns the module name of the layout\n */\n return 'ComplexHierarchicalTree';\n };\n ComplexHierarchicalTree.prototype.doLayout = function (nodes, nameTable, layout, viewPort) {\n new HierarchicalLayoutUtil().doLayout(nodes, nameTable, layout, viewPort);\n };\n return ComplexHierarchicalTree;\n}());\nexport { ComplexHierarchicalTree };\n/**\n * Utility that arranges the nodes in hierarchical structure\n */\nvar HierarchicalLayoutUtil = /** @class */ (function () {\n function HierarchicalLayoutUtil() {\n this.nameTable = {};\n this.crossReduction = new CrossReduction();\n }\n /**\n * Defines a vertex that is equivalent to a node object\n */\n HierarchicalLayoutUtil.prototype.createVertex = function (node, value, x, y, width, height) {\n var geometry = { x: x, y: y, width: width, height: height };\n var vertex = {\n value: value, geometry: geometry, name: value, vertex: true,\n inEdges: node.inEdges.slice(), outEdges: node.outEdges.slice()\n };\n return vertex;\n };\n /**\n * Initializes the edges collection of the vertices\n * @private\n */\n HierarchicalLayoutUtil.prototype.getEdges = function (node) {\n var edges = [];\n if (node) {\n for (var i = 0; node.inEdges.length > 0 && i < node.inEdges.length; i++) {\n edges.push(this.nameTable[node.inEdges[i]]);\n }\n for (var i = 0; node.outEdges.length > 0 && i < node.outEdges.length; i++) {\n edges.push(this.nameTable[node.outEdges[i]]);\n }\n }\n return edges;\n };\n /**\n * Finds the root nodes of the layout\n */\n HierarchicalLayoutUtil.prototype.findRoots = function (vertices) {\n var roots = [];\n var best = null;\n var maxDiff = -100000;\n for (var _i = 0, _a = Object.keys(vertices); _i < _a.length; _i++) {\n var i = _a[_i];\n var cell = vertices[i];\n var conns = this.getEdges(cell);\n var outEdges = 0;\n var inEdges = 0;\n for (var k = 0; k < conns.length; k++) {\n var src = this.getVisibleTerminal(conns[k], true);\n if (src.name === cell.name) {\n outEdges++;\n }\n else {\n inEdges++;\n }\n }\n if (inEdges === 0 && outEdges > 0) {\n roots.push(cell);\n }\n var diff = outEdges - inEdges;\n if (diff > maxDiff) {\n maxDiff = diff;\n best = cell;\n }\n }\n if (roots.length === 0 && best != null) {\n roots.push(best);\n }\n return roots;\n };\n /**\n * Returns the source/target vertex of the given connector\n * @private\n */\n HierarchicalLayoutUtil.prototype.getVisibleTerminal = function (edge, source) {\n var terminalCache = this.nameTable[edge.targetID];\n if (source) {\n terminalCache = this.nameTable[edge.sourceID];\n }\n for (var i = 0; i < this.vertices.length; i++) {\n if (this.vertices[i].name === terminalCache.id) {\n return this.vertices[i];\n }\n }\n return null;\n };\n /**\n * Traverses each sub tree, ensures there is no cycle in traversing\n * @private\n */\n HierarchicalLayoutUtil.prototype.traverse = function (vertex, directed, edge, currentComp, hierarchyVertices, filledVertices) {\n if (vertex != null) {\n var vertexID = vertex.name;\n if ((filledVertices == null ? true : filledVertices[vertexID] != null)) {\n if (currentComp[vertexID] == null) {\n currentComp[vertexID] = vertex;\n }\n if (filledVertices != null) {\n delete filledVertices[vertexID];\n }\n var edges = this.getEdges(vertex);\n var edgeIsSource = [];\n for (var i = 0; i < edges.length; i++) {\n edgeIsSource[i] = this.getVisibleTerminal(edges[i], true) === vertex;\n }\n for (var i = 0; i < edges.length; i++) {\n if (!directed || edgeIsSource[i]) {\n var next = this.getVisibleTerminal(edges[i], !edgeIsSource[i]);\n var netCount = 1;\n for (var j = 0; j < edges.length; j++) {\n if (j === i) {\n continue;\n }\n else {\n var isSource2 = edgeIsSource[j];\n var otherTerm = this.getVisibleTerminal(edges[j], !isSource2);\n if (otherTerm === next) {\n if (isSource2) {\n netCount++;\n }\n else {\n netCount--;\n }\n }\n }\n }\n if (netCount >= 0) {\n currentComp = this.traverse(next, directed, edges[i], currentComp, hierarchyVertices, filledVertices);\n }\n }\n }\n }\n else {\n if (currentComp[vertexID] == null) {\n // We've seen this vertex before, but not in the current component This component and the one it's in need to be merged\n for (var i = 0; i < hierarchyVertices.length; i++) {\n var comp = hierarchyVertices[i];\n if (comp[vertexID] != null) {\n for (var _i = 0, _a = Object.keys(comp); _i < _a.length; _i++) {\n var key = _a[_i];\n currentComp[key] = comp[key];\n }\n // Remove the current component from the hierarchy set\n hierarchyVertices.splice(i, 1);\n return currentComp;\n }\n }\n }\n }\n }\n return currentComp;\n };\n /**\n * Returns the bounds of the given vertices\n */\n HierarchicalLayoutUtil.prototype.getModelBounds = function (nodes) {\n nodes = nodes.slice();\n var rect = null;\n var rect1 = null;\n for (var i = 0; i < nodes.length; i++) {\n rect = nodes[i].geometry;\n if (rect1) {\n var right = Math.max(rect1.x + rect1.width, rect.x + rect.width);\n var bottom = Math.max(rect1.y + rect1.height, rect.y + rect.height);\n rect1.x = Math.min(rect1.x, rect.x);\n rect1.y = Math.min(rect1.y, rect.y);\n rect1.width = right - rect1.x;\n rect1.height = bottom - rect1.y;\n }\n else {\n rect1 = { x: rect.x, y: rect.y, width: rect.width, height: rect.height };\n }\n }\n return rect1;\n };\n /**\n * Initializes the layouting process\n * @private\n */\n HierarchicalLayoutUtil.prototype.doLayout = function (nodes, nameTable, layoutProp, viewPort) {\n this.nameTable = nameTable;\n var layout = {\n horizontalSpacing: layoutProp.horizontalSpacing, verticalSpacing: layoutProp.verticalSpacing,\n orientation: layoutProp.orientation, marginX: layoutProp.margin.left, marginY: layoutProp.margin.top\n };\n if (layout.orientation === 'BottomToTop') {\n layout.marginY = -layoutProp.margin.top;\n }\n else if (layout.orientation === 'RightToLeft') {\n layout.marginX = -layoutProp.margin.left;\n }\n this.vertices = [];\n var filledVertexSet = {};\n for (var i = 0; i < nodes.length; i++) {\n var node = this.createVertex(nodes[i], nodes[i].id, 0, 0, nodes[i].actualSize.width, nodes[i].actualSize.height);\n this.vertices.push(node);\n filledVertexSet[node.name] = node;\n }\n var hierarchyVertices = [];\n var candidateRoots;\n candidateRoots = this.findRoots(filledVertexSet);\n for (var i = 0; i < candidateRoots.length; i++) {\n var vertexSet = {};\n hierarchyVertices.push(vertexSet);\n this.traverse(candidateRoots[i], true, null, vertexSet, hierarchyVertices, filledVertexSet);\n }\n var limit = { marginX: 0, marginY: 0 };\n for (var i = 0; i < hierarchyVertices.length; i++) {\n var vertexSet = hierarchyVertices[i];\n var tmp = [];\n for (var _i = 0, _a = Object.keys(vertexSet); _i < _a.length; _i++) {\n var key = _a[_i];\n tmp.push(vertexSet[key]);\n }\n var model = new MultiParentModel(this, tmp, candidateRoots, layout);\n this.cycleStage(model);\n this.layeringStage(model);\n this.crossingStage(model);\n limit = this.placementStage(model, limit.marginX, limit.marginY);\n }\n var modelBounds = this.getModelBounds(this.vertices);\n var trnsX = (viewPort.x - modelBounds.width) / 2;\n for (var i = 0; i < this.vertices.length; i++) {\n var clnode = this.vertices[i];\n if (clnode) {\n var dnode = this.nameTable[clnode.name];\n dnode.offsetX = 0;\n dnode.offsetY = 0;\n //initialize layout\n var dx = (clnode.geometry.x - (dnode.offsetX - (dnode.actualSize.width / 2))) + layout.marginX;\n var dy = (clnode.geometry.y - (dnode.offsetY - (dnode.actualSize.height / 2))) + layout.marginY;\n var x = dx;\n var y = dy;\n if (layout.orientation === 'BottomToTop') {\n y = modelBounds.height - dy;\n }\n else if (layout.orientation === 'RightToLeft') {\n x = modelBounds.width - dx;\n }\n x += trnsX;\n dnode.offsetX += x - dnode.offsetX;\n dnode.offsetY += y - dnode.offsetY;\n }\n }\n };\n /**\n * Handles positioning the nodes\n */\n HierarchicalLayoutUtil.prototype.placementStage = function (model, marginX, marginY) {\n var placementStage = this.coordinateAssignment(marginX, marginY, parent, model);\n placementStage.model = model;\n placementStage.widestRankValue = null;\n this.placementStageExecute(placementStage);\n return {\n marginX: placementStage.marginX + model.layout.horizontalSpacing,\n marginY: placementStage.marginY + model.layout.verticalSpacing\n };\n };\n /**\n * Initializes the layout properties for positioning\n */\n HierarchicalLayoutUtil.prototype.coordinateAssignment = function (marginX, marginY, parent, model) {\n var plalementChange = {};\n if (model.layout.orientation === 'TopToBottom' || model.layout.orientation === 'BottomToTop') {\n plalementChange.horizontalSpacing = model.layout.horizontalSpacing;\n plalementChange.verticalSpacing = model.layout.verticalSpacing;\n }\n else {\n plalementChange.horizontalSpacing = model.layout.verticalSpacing;\n plalementChange.verticalSpacing = model.layout.horizontalSpacing;\n }\n plalementChange.orientation = 'north';\n //Removed the conditions here. So check here in case of any issue\n plalementChange.marginX = plalementChange.marginX = marginX;\n plalementChange.marginY = plalementChange.marginY = marginY;\n return plalementChange;\n };\n /**\n * Calculate the largest size of the node either height or width depends upon the layoutorientation\n */\n HierarchicalLayoutUtil.prototype.calculateWidestRank = function (plalementChange, graph, model) {\n var isHorizontal = false;\n if (plalementChange.model.layout.orientation === 'LeftToRight' || plalementChange.model.layout.orientation === 'RightToLeft') {\n isHorizontal = true;\n }\n var offset = -plalementChange.verticalSpacing;\n var lastRankMaxCellSize = 0.0;\n plalementChange.rankSizes = [];\n plalementChange.rankOffset = [];\n for (var rankValue = model.maxRank; rankValue >= 0; rankValue--) {\n var maxCellSize = 0.0;\n var rank = model.ranks[rankValue];\n var localOffset = isHorizontal ? plalementChange.marginY : plalementChange.marginX;\n for (var i = 0; i < rank.length; i++) {\n var node = rank[i];\n if (this.crossReduction.isVertex(node)) {\n var vertex = node;\n if (vertex.cell && (vertex.cell.inEdges || vertex.cell.outEdges)) {\n var obj = this.nameTable[vertex.cell.name];\n vertex.width = obj.actualSize.width;\n vertex.height = obj.actualSize.height;\n maxCellSize = Math.max(maxCellSize, (isHorizontal ? vertex.width : vertex.height));\n }\n }\n else {\n if (node) {\n var edge = node;\n var numEdges = 1;\n if (edge.edges != null) {\n numEdges = edge.edges.length;\n }\n node.width = (numEdges - 1) * 10;\n }\n }\n if (isHorizontal) {\n if (!node.height) {\n node.height = 0;\n }\n }\n // Set the initial x-value as being the best result so far\n localOffset += (isHorizontal ? node.height : node.width) / 2.0;\n this.setXY(node, rankValue, localOffset, isHorizontal ? true : false);\n this.setTempVariable(node, rankValue, localOffset);\n localOffset += ((isHorizontal ? node.height : node.width) / 2.0) + plalementChange.horizontalSpacing;\n if (localOffset > plalementChange.widestRankValue) {\n plalementChange.widestRankValue = localOffset;\n plalementChange.widestRank = rankValue;\n }\n plalementChange.rankSizes[rankValue] = localOffset;\n }\n plalementChange.rankOffset[rankValue] = offset;\n var distanceToNextRank = maxCellSize / 2.0 + lastRankMaxCellSize / 2.0 + plalementChange.verticalSpacing;\n lastRankMaxCellSize = maxCellSize;\n if (plalementChange.orientation === 'north' || plalementChange.orientation === 'west') {\n offset += distanceToNextRank;\n }\n else {\n offset -= distanceToNextRank;\n }\n for (var i = 0; i < rank.length; i++) {\n var cell = rank[i];\n this.setXY(cell, rankValue, offset, isHorizontal ? false : true);\n }\n }\n };\n /**\n * Sets the temp position of the node on the layer\n * @private\n */\n HierarchicalLayoutUtil.prototype.setTempVariable = function (node, layer, value) {\n if (this.crossReduction.isVertex(node)) {\n node.temp[0] = value;\n }\n else {\n node.temp[layer - node.minRank - 1] = value;\n }\n };\n /**\n * Sets the position of the vertex\n * @private\n */\n HierarchicalLayoutUtil.prototype.setXY = function (node, layer, value, isY) {\n if (node && node.cell) {\n if (node.cell.inEdges || node.cell.outEdges) {\n if (isY) {\n node.y[0] = value;\n }\n else {\n node.x[0] = value;\n }\n }\n else {\n if (isY) {\n node.y[layer - node.minRank - 1] = value;\n }\n else {\n node.x[layer - node.minRank - 1] = value;\n }\n }\n }\n };\n /**\n * Sets geometry position of the layout node on the layout model\n */\n HierarchicalLayoutUtil.prototype.rankCoordinates = function (stage, rankValue, graph, model) {\n var isHorizontal = false;\n if (stage.model.layout.orientation === 'LeftToRight' || stage.model.layout.orientation === 'RightToLeft') {\n isHorizontal = true;\n }\n var rank = model.ranks[rankValue];\n var maxOffset = 0.0;\n var localOffset = (isHorizontal ? stage.marginY : stage.marginX) + (stage.widestRankValue - stage.rankSizes[rankValue]) / 2;\n for (var i = 0; i < rank.length; i++) {\n var node = rank[i];\n if (this.crossReduction.isVertex(node)) {\n var obj = this.nameTable[node.cell.name];\n node.width = obj.actualSize.width;\n node.height = obj.actualSize.height;\n maxOffset = Math.max(maxOffset, node.height);\n }\n else {\n var edge = node;\n var numEdges = 1;\n if (edge.edges != null) {\n numEdges = edge.edges.length;\n }\n if (isHorizontal) {\n node.height = (numEdges - 1) * 10;\n }\n else {\n node.width = (numEdges - 1) * 10;\n }\n }\n var size = (isHorizontal ? node.height : node.width) / 2.0;\n localOffset += size;\n this.setXY(node, rankValue, localOffset, isHorizontal ? true : false);\n this.setTempVariable(node, rankValue, localOffset);\n localOffset += (size + stage.horizontalSpacing);\n }\n };\n /**\n * sets the layout in an initial positioning.it will arange all the ranks as much as possible\n */\n HierarchicalLayoutUtil.prototype.initialCoords = function (plalementChange, facade, model) {\n this.calculateWidestRank(plalementChange, facade, model);\n // Reverse sweep direction each time from widest rank \n for (var i = plalementChange.widestRank; i >= 0; i--) {\n if (i < model.maxRank) {\n this.rankCoordinates(plalementChange, i, facade, model);\n }\n }\n for (var i = plalementChange.widestRank + 1; i <= model.maxRank; i++) {\n if (i > 0) {\n this.rankCoordinates(plalementChange, i, facade, model);\n }\n }\n };\n /**\n * Checks whether the given node is an ancestor\n * @private\n */\n HierarchicalLayoutUtil.prototype.isAncestor = function (node, otherNode) {\n // Firstly, the hash code of this node needs to be shorter than the other node\n if (otherNode != null && node.hashCode != null && otherNode.hashCode != null\n && node.hashCode.length < otherNode.hashCode.length) {\n if (node.hashCode === otherNode.hashCode) {\n return true;\n }\n if (node.hashCode == null || node.hashCode == null) {\n return false;\n }\n for (var i = 0; i < node.hashCode.length; i++) {\n if (node.hashCode[i] !== otherNode.hashCode[i]) {\n return false;\n }\n }\n return true;\n }\n return false;\n };\n /**\n * initializes the sorter object\n */\n HierarchicalLayoutUtil.prototype.weightedCellSorter = function (cell, weightedValue) {\n var weightedCellSorter = {};\n weightedCellSorter.cell = cell ? cell : null;\n weightedCellSorter.weightedValue = weightedValue ? weightedValue : 0;\n weightedCellSorter.visited = false;\n weightedCellSorter.rankIndex = null;\n return weightedCellSorter;\n };\n /**\n * Performs one node positioning in both directions\n */\n HierarchicalLayoutUtil.prototype.minNode = function (plalementChange, model) {\n var nodeList = [];\n var map = { map: {} };\n var rank = [];\n for (var i = 0; i <= model.maxRank; i++) {\n rank[i] = model.ranks[i];\n for (var j = 0; j < rank[i].length; j++) {\n var node = rank[i][j];\n var nodeWrapper = this.weightedCellSorter(node, i);\n nodeWrapper.rankIndex = j;\n nodeWrapper.visited = true;\n nodeList.push(nodeWrapper);\n model.setDictionaryForSorter(map, node, nodeWrapper, true);\n }\n }\n var maxTries = nodeList.length * 10;\n var count = 0;\n var tolerance = 1;\n while (nodeList.length > 0 && count <= maxTries) {\n var cellWrapper = nodeList.shift();\n var cell = cellWrapper.cell;\n var rankValue = cellWrapper.weightedValue;\n var rankIndex = cellWrapper.rankIndex;\n var nextLayerConnectedCells = this.crossReduction.getConnectedCellsOnLayer(cell, rankValue);\n var previousLayerConnectedCells = this.crossReduction.getConnectedCellsOnLayer(cell, rankValue, true);\n var nextConnectedCount = nextLayerConnectedCells.length;\n var prevConnectedCount = previousLayerConnectedCells.length;\n var medianNextLevel = this.medianXValue(plalementChange, nextLayerConnectedCells, rankValue + 1);\n var medianPreviousLevel = this.medianXValue(plalementChange, previousLayerConnectedCells, rankValue - 1);\n var numConnectedNeighbours = nextConnectedCount + prevConnectedCount;\n var currentPosition = this.crossReduction.getTempVariable(cell, rankValue);\n var cellMedian = currentPosition;\n if (numConnectedNeighbours > 0) {\n cellMedian = (medianNextLevel * nextConnectedCount + medianPreviousLevel * prevConnectedCount) / numConnectedNeighbours;\n }\n var positionChanged = false;\n var tempValue = undefined;\n if (cellMedian < currentPosition - tolerance) {\n if (rankIndex === 0) {\n tempValue = cellMedian;\n positionChanged = true;\n }\n else {\n var leftCell = rank[rankValue][rankIndex - 1];\n var leftLimit = this.crossReduction.getTempVariable(leftCell, rankValue);\n leftLimit = leftLimit + leftCell.width / 2 + plalementChange.intraCellSpacing + cell.width / 2;\n if (leftLimit < cellMedian) {\n tempValue = cellMedian;\n positionChanged = true;\n }\n else if (leftLimit < this.crossReduction.getTempVariable(cell, rankValue) - tolerance) {\n tempValue = leftLimit;\n positionChanged = true;\n }\n }\n }\n else if (cellMedian > currentPosition + tolerance) {\n var rankSize = rank[rankValue].length;\n if (rankIndex === rankSize - 1) {\n tempValue = cellMedian;\n positionChanged = true;\n }\n else {\n var rightCell = rank[rankValue][rankIndex + 1];\n var rightLimit = this.crossReduction.getTempVariable(rightCell, rankValue);\n rightLimit = rightLimit - rightCell.width / 2 - plalementChange.intraCellSpacing - cell.width / 2;\n if (rightLimit > cellMedian) {\n tempValue = cellMedian;\n positionChanged = true;\n }\n else if (rightLimit > this.crossReduction.getTempVariable(cell, rankValue) + tolerance) {\n tempValue = rightLimit;\n positionChanged = true;\n }\n }\n }\n if (positionChanged) {\n this.setTempVariable(cell, rankValue, tempValue);\n // Add connected nodes to map and list\n this.updateNodeList(nodeList, map, nextLayerConnectedCells, model);\n this.updateNodeList(nodeList, map, previousLayerConnectedCells, model);\n }\n if (this.crossReduction.isVertex(cellWrapper.cell)) {\n cellWrapper.visited = false;\n }\n count++;\n }\n };\n /**\n * Updates the ndoes collection\n */\n HierarchicalLayoutUtil.prototype.updateNodeList = function (nodeList, map, collection, model) {\n for (var i = 0; i < collection.length; i++) {\n var connectedCell = collection[i];\n var connectedCellWrapper = model.getDictionaryForSorter(map, connectedCell);\n if (connectedCellWrapper != null) {\n if (connectedCellWrapper.visited === false) {\n connectedCellWrapper.visited = true;\n nodeList.push(connectedCellWrapper);\n }\n }\n }\n };\n /**\n * Calculates the node position of the connected cell on the specified rank\n */\n HierarchicalLayoutUtil.prototype.medianXValue = function (plalementChange, connectedCells, rankValue) {\n if (connectedCells.length === 0) {\n return 0;\n }\n var medianValues = [];\n for (var i = 0; i < connectedCells.length; i++) {\n medianValues[i] = this.crossReduction.getTempVariable(connectedCells[i], rankValue);\n }\n medianValues.sort(function (a, b) {\n return a - b;\n });\n if (connectedCells.length % 2 === 1) {\n return medianValues[Math.floor(connectedCells.length / 2)];\n }\n else {\n var medianPoint = connectedCells.length / 2;\n var leftMedian = medianValues[medianPoint - 1];\n var rightMedian = medianValues[medianPoint];\n return ((leftMedian + rightMedian) / 2);\n }\n };\n /**\n * Updates the geometry of the vertices\n */\n HierarchicalLayoutUtil.prototype.placementStageExecute = function (plalementChange) {\n var isHorizontal = false;\n if (plalementChange.model.layout.orientation === 'LeftToRight' || plalementChange.model.layout.orientation === 'RightToLeft') {\n isHorizontal = true;\n }\n plalementChange.jettyPositions = {};\n var model = plalementChange.model;\n isHorizontal ? plalementChange.currentYDelta = 0.0 : plalementChange.currentXDelta = 0.0;\n this.initialCoords(plalementChange, { model: model }, model);\n this.minNode(plalementChange, model);\n var bestOffsetDelta = 100000000.0;\n if (!plalementChange.maxIterations) {\n plalementChange.maxIterations = 8;\n }\n for (var i = 0; i < plalementChange.maxIterations; i++) {\n // if the total offset is less for the current positioning, \n //there are less heavily angled edges and so the current positioning is used\n if ((isHorizontal ? plalementChange.currentYDelta : plalementChange.currentXDelta) < bestOffsetDelta) {\n for (var j = 0; j < model.ranks.length; j++) {\n var rank = model.ranks[j];\n for (var k = 0; k < rank.length; k++) {\n var cell = rank[k];\n this.setXY(cell, j, this.crossReduction.getTempVariable(cell, j), isHorizontal ? true : false);\n }\n }\n bestOffsetDelta = isHorizontal ? plalementChange.currentYDelta : plalementChange.currentXDelta;\n }\n isHorizontal ? plalementChange.currentYDelta = 0 : plalementChange.currentXDelta = 0;\n }\n this.setCellLocations(plalementChange, model);\n };\n /**\n * sets the cell position in the after the layout operation\n */\n HierarchicalLayoutUtil.prototype.setCellLocations = function (plalementChange, model) {\n var vertices = this.getValues(model.vertexMapper);\n for (var i = 0; i < vertices.length; i++) {\n this.setVertexLocation(plalementChange, vertices[i]);\n }\n };\n /**\n * used to specify the geometrical position of the layout model cell\n */\n HierarchicalLayoutUtil.prototype.garphModelsetVertexLocation = function (plalementChange, cell, x, y) {\n var model = plalementChange.model;\n var geometry = cell.geometry;\n var result = null;\n if (geometry != null) {\n result = { x: x, y: y, width: geometry.width, height: geometry.height };\n if (geometry.x !== x || geometry.y !== y) {\n cell.geometry = result;\n }\n }\n return result;\n };\n /**\n * set the position of the specified node\n */\n HierarchicalLayoutUtil.prototype.setVertexLocation = function (plalementChange, cell) {\n var isHorizontal = false;\n if (plalementChange.model.layout.orientation === 'LeftToRight' || plalementChange.model.layout.orientation === 'RightToLeft') {\n isHorizontal = true;\n }\n var realCell = cell.cell;\n var positionX = cell.x[0] - cell.width / 2;\n var positionY = cell.y[0] - cell.height / 2;\n this.garphModelsetVertexLocation(plalementChange, realCell, positionX, positionY);\n if (isHorizontal) {\n if (!plalementChange.marginY) {\n plalementChange.marginY = 0;\n }\n plalementChange.marginY = Math.max(plalementChange.marginY, positionY + cell.height);\n }\n else {\n if (!plalementChange.marginX) {\n plalementChange.marginX = 0;\n }\n plalementChange.marginX = Math.max(plalementChange.marginX, positionX + cell.width);\n }\n };\n /**\n * get the specific value from the key value pair\n */\n HierarchicalLayoutUtil.prototype.getValues = function (mapper) {\n var list = [];\n if (mapper.map) {\n for (var _i = 0, _a = Object.keys(mapper.map); _i < _a.length; _i++) {\n var key = _a[_i];\n list.push(mapper.map[key]);\n }\n }\n return list;\n };\n /**\n * Checks and reduces the crosses in between line segments\n */\n HierarchicalLayoutUtil.prototype.crossingStage = function (model) {\n this.crossReduction.execute(model);\n };\n /**\n * Initializes the ranks of the vertices\n */\n HierarchicalLayoutUtil.prototype.layeringStage = function (model) {\n this.initialRank(model);\n this.fixRanks(model);\n };\n /**\n * determine the initial rank for the each vertex on the relevent direction\n */\n HierarchicalLayoutUtil.prototype.initialRank = function (model) {\n var startNodes = model.startNodes;\n var internalNodes = model.getDictionaryValues(model.vertexMapper);\n var startNodesCopy = startNodes.slice();\n while (startNodes.length > 0) {\n var internalNode = startNodes[0];\n var layerDeterminingEdges = internalNode.connectsAsTarget;\n var edgesToBeMarked = internalNode.connectsAsSource;\n var allEdgesScanned = true;\n var minimumLayer = 100000000;\n for (var i = 0; i < layerDeterminingEdges.length; i++) {\n var internalEdge = layerDeterminingEdges[i];\n if (internalEdge.temp[0] === 5270620) {\n // This edge has been scanned, get the layer of the node on the other end\n var otherNode = internalEdge.source;\n minimumLayer = Math.min(minimumLayer, otherNode.temp[0] - 1);\n }\n else {\n allEdgesScanned = false;\n break;\n }\n }\n // If all edge have been scanned, assign the layer, mark all edges in the other direction and remove from the nodes list\n if (allEdgesScanned) {\n internalNode.temp[0] = minimumLayer;\n if (!model.maxRank) {\n model.maxRank = 100000000;\n }\n model.maxRank = Math.min(model.maxRank, minimumLayer);\n if (edgesToBeMarked != null) {\n for (var i = 0; i < edgesToBeMarked.length; i++) {\n var internalEdge = edgesToBeMarked[i];\n internalEdge.temp[0] = 5270620;\n // Add node on other end of edge to LinkedList of nodes to be analysed\n var otherNode = internalEdge.target;\n // Only add node if it hasn't been assigned a layer\n if (otherNode.temp[0] === -1) {\n startNodes.push(otherNode);\n // Mark this other node as neither being unassigned nor assigned \n //so it isn't added to this list again, but it's layer isn't used in any calculation.\n otherNode.temp[0] = -2;\n }\n }\n }\n startNodes.shift();\n }\n else {\n // Not all the edges have been scanned, get to the back of the class and put the dunces cap on\n var removedCell = startNodes.shift();\n startNodes.push(internalNode);\n if (removedCell === internalNode && startNodes.length === 1) {\n // This is an error condition, we can't get out of this loop. \n //It could happen for more than one node but that's a lot harder to detect. Log the error\n break;\n }\n }\n }\n for (var i = 0; i < internalNodes.length; i++) {\n internalNodes[i].temp[0] -= model.maxRank;\n }\n for (var i = 0; i < startNodesCopy.length; i++) {\n var internalNode = startNodesCopy[i];\n var currentMaxLayer = 0;\n var layerDeterminingEdges = internalNode.connectsAsSource;\n for (var j = 0; j < layerDeterminingEdges.length; j++) {\n var internalEdge = layerDeterminingEdges[j];\n var otherNode = internalEdge.target;\n internalNode.temp[0] = Math.max(currentMaxLayer, otherNode.temp[0] + 1);\n currentMaxLayer = internalNode.temp[0];\n }\n }\n model.maxRank = 100000000 - model.maxRank;\n };\n /**\n * used to set the optimum value of each vertex on the layout\n */\n HierarchicalLayoutUtil.prototype.fixRanks = function (model) {\n model.fixRanks();\n };\n /**\n * used to determine any cyclic stage have been created on the layout model\n */\n HierarchicalLayoutUtil.prototype.cycleStage = function (model) {\n var seenNodes = {};\n model.startNodes = [];\n var unseenNodesArray = model.getDictionaryValues(model.vertexMapper);\n var unseenNodes = [];\n for (var i = 0; i < unseenNodesArray.length; i++) {\n unseenNodesArray[i].temp[0] = -1;\n unseenNodes[unseenNodesArray[i].id] = unseenNodesArray[i];\n }\n var rootsArray = null;\n if (model.roots != null) {\n var modelRoots = model.roots;\n rootsArray = [];\n for (var i = 0; i < modelRoots.length; i++) {\n rootsArray[i] = model.getDictionary(model.vertexMapper, modelRoots[i]);\n if (rootsArray[i] != null) {\n model.startNodes.push(rootsArray[i]);\n }\n }\n }\n model.visit('removeParentConnection', rootsArray, true, null, { seenNodes: seenNodes, unseenNodes: unseenNodes });\n var seenNodesCopy = model.clone(seenNodes, null, true);\n model.visit('removeNodeConnection', unseenNodes, true, seenNodesCopy, { seenNodes: seenNodes, unseenNodes: unseenNodes });\n };\n /**\n * removes the edge from the given collection\n * @private\n */\n HierarchicalLayoutUtil.prototype.remove = function (obj, array) {\n var index = array.indexOf(obj);\n if (index !== -1) {\n array.splice(index, 1);\n }\n return obj;\n };\n /**\n * Inverts the source and target of an edge\n * @private\n */\n HierarchicalLayoutUtil.prototype.invert = function (connectingEdge, layer) {\n var temp = connectingEdge.source;\n connectingEdge.source = connectingEdge.target;\n connectingEdge.target = temp;\n connectingEdge.isReversed = !connectingEdge.isReversed;\n };\n /**\n * used to get the edges between the given source and target\n * @private\n */\n HierarchicalLayoutUtil.prototype.getEdgesBetween = function (source, target, directed) {\n directed = (directed != null) ? directed : false;\n var edges = this.getEdges(source);\n var result = [];\n for (var i = 0; i < edges.length; i++) {\n var src = this.getVisibleTerminal(edges[i], true);\n var trg = this.getVisibleTerminal(edges[i], false);\n if ((src === source && trg === target) || (!directed && src === target && trg === source)) {\n result.push(edges[i]);\n }\n }\n return result;\n };\n return HierarchicalLayoutUtil;\n}());\n/**\n * Handles position the objects in a hierarchical tree structure\n */\nvar MultiParentModel = /** @class */ (function () {\n function MultiParentModel(layout, vertices, roots, dlayout) {\n this.multiObjectIdentityCounter = 0;\n //used to count the no of times the parent have been used\n this.dfsCount = 0;\n this.hierarchicalUtil = new HierarchicalLayoutUtil();\n this.roots = roots;\n this.vertexMapper = { map: {} };\n var internalVertices = [];\n this.layout = dlayout;\n this.maxRank = 100000000;\n this.hierarchicalLayout = layout;\n this.createInternalCells(layout, vertices, internalVertices);\n for (var i = 0; i < vertices.length; i++) {\n var edges = internalVertices[i].connectsAsSource;\n for (var j = 0; j < edges.length; j++) {\n var internalEdge = edges[j];\n var realEdges = internalEdge.edges;\n if (realEdges != null && realEdges.length > 0) {\n var realEdge = realEdges[0];\n var targetCell = layout.getVisibleTerminal(realEdge, false);\n var internalTargetCell = this.getDictionary(this.vertexMapper, targetCell);\n if (internalVertices[i] === internalTargetCell) {\n targetCell = layout.getVisibleTerminal(realEdge, true);\n internalTargetCell = this.getDictionary(this.vertexMapper, targetCell);\n }\n if (internalTargetCell != null && internalVertices[i] !== internalTargetCell) {\n internalEdge.target = internalTargetCell;\n if (internalTargetCell.connectsAsTarget.length === 0) {\n internalTargetCell.connectsAsTarget = [];\n }\n if (internalTargetCell.connectsAsTarget.indexOf(internalEdge) < 0) {\n internalTargetCell.connectsAsTarget.push(internalEdge);\n }\n }\n }\n }\n internalVertices[i].temp[0] = 1;\n }\n }\n /**\n * used to create the duplicate of the edges on the layout model\n */\n MultiParentModel.prototype.createInternalCells = function (layout, vertices, internalVertices) {\n for (var i = 0; i < vertices.length; i++) {\n internalVertices[i] = {\n x: [], y: [], temp: [], cell: vertices[i],\n id: vertices[i].name, connectsAsTarget: [], connectsAsSource: []\n };\n this.setDictionary(this.vertexMapper, vertices[i], internalVertices[i]);\n var conns = layout.getEdges(vertices[i]);\n internalVertices[i].connectsAsSource = [];\n for (var j = 0; j < conns.length; j++) {\n var cell = layout.getVisibleTerminal(conns[j], false);\n if (cell !== vertices[i]) {\n var undirectedEdges = layout.getEdgesBetween(vertices[i], cell, false);\n var directedEdges = layout.getEdgesBetween(vertices[i], cell, true);\n if (undirectedEdges != null && undirectedEdges.length > 0 && directedEdges.length * 2 >= undirectedEdges.length) {\n var internalEdge = { x: [], y: [], temp: [], edges: undirectedEdges, ids: [] };\n for (var m = 0; m < undirectedEdges.length; m++) {\n internalEdge.ids.push(undirectedEdges[m].id);\n }\n internalEdge.source = internalVertices[i];\n if (!internalVertices[i].connectsAsSource) {\n internalVertices[i].connectsAsSource = [];\n }\n if (internalVertices[i].connectsAsSource.indexOf(internalEdge) < 0) {\n internalVertices[i].connectsAsSource.push(internalEdge);\n }\n }\n }\n }\n internalVertices[i].temp[0] = 0;\n }\n };\n /**\n * used to set the optimum value of each vertex on the layout\n * @private\n */\n MultiParentModel.prototype.fixRanks = function () {\n var rankList = [];\n this.ranks = [];\n for (var i = 0; i < this.maxRank + 1; i++) {\n rankList[i] = [];\n this.ranks[i] = rankList[i];\n }\n var rootsArray = null;\n if (this.roots != null) {\n var oldRootsArray = this.roots;\n rootsArray = [];\n for (var i = 0; i < oldRootsArray.length; i++) {\n var cell = oldRootsArray[i];\n var internalNode = this.getDictionary(this.vertexMapper, cell);\n rootsArray[i] = internalNode;\n }\n }\n this.visit('updateMinMaxRank', rootsArray, false, null, { seenNodes: null, unseenNodes: null, rankList: rankList });\n };\n /**\n * Updates the min/max rank of the layer\n */\n MultiParentModel.prototype.updateMinMaxRank = function (layer, seen, data) {\n var seenNodes = data.seenNodes;\n var unseenNodes = data.unseenNodes;\n var parent = data.parent;\n var node = data.root;\n var edge = data.edge;\n var rankList = data.rankList;\n if (!node.maxRank && node.maxRank !== 0) {\n node.maxRank = -1;\n }\n if (!node.minRank && node.minRank !== 0) {\n node.minRank = -1;\n }\n if (seen === 0 && node.maxRank < 0 && node.minRank < 0) {\n rankList[node.temp[0]].push(node);\n node.maxRank = node.temp[0];\n node.minRank = node.temp[0];\n node.temp[0] = rankList[node.maxRank].length - 1;\n }\n if (parent != null && edge != null) {\n var parentToCellRankDifference = parent.maxRank - node.maxRank;\n if (parentToCellRankDifference > 1) {\n edge.maxRank = parent.maxRank;\n edge.minRank = node.maxRank;\n edge.temp = [];\n edge.x = [];\n edge.y = [];\n for (var i = edge.minRank + 1; i < edge.maxRank; i++) {\n rankList[i].push(edge);\n this.hierarchicalUtil.setTempVariable(edge, i, rankList[i].length - 1);\n }\n }\n }\n };\n /**\n * used to store the value of th given key on the object\n */\n MultiParentModel.prototype.setDictionary = function (dic, key, value) {\n var id = key.name;\n if (!id) {\n // id = this._getDictionary(dic, key);\n }\n var previous = dic.map[id];\n dic.map[id] = value;\n return previous;\n };\n /**\n * used to store the value of th given key on the object\n * @private\n */\n MultiParentModel.prototype.setDictionaryForSorter = function (dic, key, value, flag) {\n var id = key.id;\n if (!id) {\n //id = this._getDictionaryForSorter(dic, key);\n }\n var previous = dic.map[id];\n dic.map[id] = value;\n return previous;\n };\n /**\n * used to get the value of the given key\n * @private\n */\n MultiParentModel.prototype.getDictionary = function (dic, key) {\n if (!this.multiObjectIdentityCounter && this.multiObjectIdentityCounter !== 0) {\n this.multiObjectIdentityCounter = 0;\n }\n var id = key.name;\n if (!id) {\n if (!key.layoutObjectId) {\n key.layoutObjectId = 'graphHierarchyNode#' + this.multiObjectIdentityCounter++;\n return key.layoutObjectId;\n }\n else {\n return dic.map[key.layoutObjectId];\n }\n }\n return dic.map[id];\n };\n /**\n * used to get the value of the given key\n * @private\n */\n MultiParentModel.prototype.getDictionaryForSorter = function (dic, key) {\n if (!this.multiObjectIdentityCounter && this.multiObjectIdentityCounter !== 0) {\n this.multiObjectIdentityCounter = 0;\n }\n var id = key.id;\n if (!id) {\n if (!key.layoutObjectId) {\n key.layoutObjectId = 'graphHierarchyNode#' + this.multiObjectIdentityCounter++;\n return key.layoutObjectId;\n }\n else {\n return dic.map[key.layoutObjectId];\n }\n }\n return dic.map[id];\n };\n /**\n * used to get all the values of the dictionary object\n * @private\n */\n MultiParentModel.prototype.getDictionaryValues = function (dic) {\n var result = [];\n for (var _i = 0, _a = Object.keys(dic.map); _i < _a.length; _i++) {\n var key = _a[_i];\n result.push(dic.map[key]);\n }\n return result;\n };\n /**\n * used to visit all the entries on the given dictionary with given function\n * @private\n */\n MultiParentModel.prototype.visit = function (visitor, dfsRoots, trackAncestors, seenNodes, data) {\n var seenNodes1 = data.seenNodes;\n var unseenNodes1 = data.unseenNodes;\n var rankList = data.rankList;\n // Run depth first search through on all roots\n if (dfsRoots != null) {\n for (var i = 0; i < dfsRoots.length; i++) {\n var internalNode = dfsRoots[i];\n if (internalNode != null) {\n if (seenNodes == null) {\n seenNodes = new Object();\n }\n data.parent = null;\n data.root = internalNode;\n data.edge = null;\n if (trackAncestors) {\n // Set up hash code for root\n internalNode.hashCode = [];\n internalNode.hashCode[0] = this.dfsCount;\n internalNode.hashCode[1] = i;\n this.extendedDfs(visitor, seenNodes, i, 0, data);\n }\n else {\n this.depthFirstSearch(visitor, seenNodes, 0, data);\n }\n }\n }\n this.dfsCount++;\n }\n };\n /**\n * used to perform the depth fisrt search on the layout model\n */\n MultiParentModel.prototype.depthFirstSearch = function (visitor, seen, layer, data) {\n var seenNodes1 = data.seenNodes;\n var unseenNodes1 = data.unseenNodes;\n var rankList = data.rankList;\n var parent = data.parent;\n var root = data.root;\n var edge = data.edge;\n if (root != null) {\n var rootId = root.id;\n if (seen[rootId] == null) {\n seen[rootId] = root;\n this.updateConnectionRank(visitor, layer, 0, data);\n // Copy the connects as source list so that visitors can change the original for edge direction inversions\n var outgoingEdges = root.connectsAsSource.slice();\n for (var i = 0; i < outgoingEdges.length; i++) {\n var internalEdge = outgoingEdges[i];\n var targetNode = internalEdge.target;\n // Root check is O(|roots|)\n data.parent = root;\n data.root = targetNode;\n data.edge = internalEdge;\n this.depthFirstSearch(visitor, seen, layer + 1, data);\n }\n }\n else {\n this.updateConnectionRank(visitor, layer, 1, data);\n }\n }\n };\n /**\n * Updates the rank of the connection\n */\n MultiParentModel.prototype.updateConnectionRank = function (visitor, layer, seen, traversedList) {\n var parent = traversedList.parent;\n var root = traversedList.root;\n var edge = traversedList.edge;\n if (visitor === 'removeParentConnection' || visitor === 'removeNodeConnection') {\n var remove = visitor === 'removeNodeConnection' ? true : false;\n this.removeConnectionEdge(parent, root, edge, layer, traversedList, remove);\n }\n if (visitor === 'updateMinMaxRank') {\n this.updateMinMaxRank(layer, seen, traversedList);\n }\n };\n /**\n * Removes the edge from the collection\n */\n MultiParentModel.prototype.removeConnectionEdge = function (parent, node, edge, layer, data, remove) {\n var seenNodes = data.seenNodes;\n var unseenNodes = data.unseenNodes;\n var rankList = data.rankList;\n if (this.hierarchicalUtil.isAncestor(node, parent)) {\n this.hierarchicalUtil.invert(edge, 0);\n this.hierarchicalUtil.remove(edge, parent.connectsAsSource);\n if (remove) {\n node.connectsAsSource.push(edge);\n parent.connectsAsTarget.push(edge);\n this.hierarchicalUtil.remove(edge, node.connectsAsTarget);\n }\n else {\n parent.connectsAsTarget.push(edge);\n this.hierarchicalUtil.remove(edge, node.connectsAsTarget);\n node.connectsAsSource.push(edge);\n }\n }\n seenNodes[node.id] = node;\n delete unseenNodes[node.id];\n };\n /**\n * the dfs extends the default version by keeping track of cells ancestors, but it should be only used when necessary\n */\n MultiParentModel.prototype.extendedDfs = function (visitor, seen, cHash, layer, data) {\n var seenNodes = data.seenNodes;\n var unseenNodes = data.unseenNodes;\n var rankList = data.rankList;\n var parent = data.parent;\n var root = data.root;\n var edge = data.edge;\n if (root != null) {\n if (parent != null) {\n if (root.hashCode == null ||\n root.hashCode[0] !== parent.hashCode[0]) {\n var hashCodeLength = parent.hashCode.length + 1;\n root.hashCode = parent.hashCode.slice();\n root.hashCode[hashCodeLength - 1] = cHash;\n }\n }\n var rootId = root.id;\n if (seen[rootId] == null) {\n seen[rootId] = root;\n this.updateConnectionRank(visitor, layer, 0, data);\n var outgoingEdges = root.connectsAsSource.slice();\n for (var i = 0; i < outgoingEdges.length; i++) {\n var internalEdge = outgoingEdges[i];\n var targetNode = internalEdge.target;\n data.parent = root;\n data.root = targetNode;\n data.edge = internalEdge;\n this.extendedDfs(visitor, seen, i, layer + 1, data);\n }\n }\n else {\n this.updateConnectionRank(visitor, layer, 1, data);\n }\n }\n };\n /**\n * used to clone the specified object ignoring all fieldnames in the given array of transient fields\n * @private\n */\n MultiParentModel.prototype.clone = function (obj, transients, shallow) {\n shallow = (shallow != null) ? shallow : false;\n if (obj != null && typeof (obj.constructor) === 'function') {\n var clonedObj = obj.constructor();\n for (var _i = 0, _a = Object.keys(obj); _i < _a.length; _i++) {\n var i = _a[_i];\n if (i !== 'layoutObjectId' && (transients == null || transients.indexOf(i) < 0)) {\n if (!shallow && typeof (obj[i]) === 'object') {\n //not used\n // _clone[i] = $.extend(true, {}, obj[i]);\n }\n else {\n clonedObj[i] = obj[i];\n }\n }\n }\n return clonedObj;\n }\n return null;\n };\n return MultiParentModel;\n}());\n/**\n * Defines how to reduce the crosses in between the line segments\n */\nvar CrossReduction = /** @class */ (function () {\n function CrossReduction() {\n }\n /**\n * used to calculate the number of edges crossing the layout model\n * @param model\n */\n CrossReduction.prototype.calculateCrossings = function (model) {\n var numRanks = model.ranks.length;\n var totalCrossings = 0;\n for (var i = 1; i < numRanks; i++) {\n totalCrossings += this.calculateRankCrossing(i, model);\n }\n return totalCrossings;\n };\n /**\n * used to get the temp value specified for the node or connector\n * @private\n */\n CrossReduction.prototype.getTempVariable = function (node, layer) {\n if (node) {\n if (this.isVertex(node)) {\n return node.temp[0];\n }\n else {\n return node.temp[layer - node.minRank - 1];\n }\n }\n return 0;\n };\n /**\n * used to specify the number of conenctors crossing between the specified rank and its below rank\n */\n CrossReduction.prototype.calculateRankCrossing = function (i, model) {\n var totalCrossings = 0;\n var rank = model.ranks[i];\n var previousRank = model.ranks[i - 1];\n var tmpIndices = [];\n // Iterate over the top rank and fill in the connection information\n for (var j = 0; j < rank.length; j++) {\n var node = rank[j];\n var rankPosition = this.getTempVariable(node, i);\n var connectedCells = this.getConnectedCellsOnLayer(node, i, true);\n ///#### \n var nodeIndices = [];\n for (var k = 0; k < connectedCells.length; k++) {\n var connectedNode = connectedCells[k];\n var otherCellRankPosition = this.getTempVariable(connectedNode, i - 1);\n nodeIndices.push(otherCellRankPosition);\n }\n nodeIndices.sort(function (x, y) { return x - y; });\n tmpIndices[rankPosition] = nodeIndices;\n }\n var indices = [];\n for (var j = 0; j < tmpIndices.length; j++) {\n indices = indices.concat(tmpIndices[j]);\n }\n var firstIndex = 1;\n while (firstIndex < previousRank.length) {\n firstIndex <<= 1;\n }\n var treeSize = 2 * firstIndex - 1;\n firstIndex -= 1;\n var tree = [];\n for (var j = 0; j < treeSize; ++j) {\n tree[j] = 0;\n }\n for (var j = 0; j < indices.length; j++) {\n var index = indices[j];\n var treeIndex = index + firstIndex;\n ++tree[treeIndex];\n while (treeIndex > 0) {\n if (treeIndex % 2) {\n totalCrossings += tree[treeIndex + 1];\n }\n treeIndex = (treeIndex - 1) >> 1;\n ++tree[treeIndex];\n }\n }\n return totalCrossings;\n };\n /**\n * Calculates and reduces the crosses between line segments\n * @private\n */\n CrossReduction.prototype.execute = function (model) {\n // Stores initial ordering \n this.nestedBestRanks = [];\n for (var i = 0; i < model.ranks.length; i++) {\n this.nestedBestRanks[i] = model.ranks[i].slice();\n }\n var iterationsWithoutImprovement = 0;\n var currentBestCrossings = this.calculateCrossings(model);\n for (var i = 0; i < 24 && iterationsWithoutImprovement < 2; i++) {\n this.weightedMedian(i, model);\n var candidateCrossings = this.calculateCrossings(model);\n if (candidateCrossings < currentBestCrossings) {\n currentBestCrossings = candidateCrossings;\n iterationsWithoutImprovement = 0;\n for (var j = 0; j < this.nestedBestRanks.length; j++) {\n var rank = model.ranks[j];\n for (var k = 0; k < rank.length; k++) {\n var cell = rank[k];\n this.nestedBestRanks[j][cell.temp[0]] = cell;\n }\n }\n }\n else {\n // Increase count of iterations \n iterationsWithoutImprovement++;\n // Restore the best values to the cells\n for (var j = 0; j < this.nestedBestRanks.length; j++) {\n var rank = model.ranks[j];\n for (var k = 0; k < rank.length; k++) {\n var cell = rank[k];\n this.setTempVariable(cell, j, k);\n }\n }\n }\n if (currentBestCrossings === 0) {\n break;\n }\n }\n // Store the best rankings but in the model\n var ranks = [];\n var rankList = [];\n for (var i = 0; i < model.maxRank + 1; i++) {\n rankList[i] = [];\n ranks[i] = rankList[i];\n }\n for (var i = 0; i < this.nestedBestRanks.length; i++) {\n for (var j = 0; j < this.nestedBestRanks[i].length; j++) {\n rankList[i].push(this.nestedBestRanks[i][j]);\n }\n }\n model.ranks = ranks;\n };\n /**\n * check whether the object is vertext or edge on the layout model.\n * @private\n */\n CrossReduction.prototype.isVertex = function (node) {\n if (node && node.cell && (node.cell.inEdges || node.cell.outEdges)) {\n return true;\n }\n return false;\n };\n /**\n * used to move up or move down the node position on the adjacent ranks\n */\n CrossReduction.prototype.weightedMedian = function (iteration, model) {\n // Reverse sweep direction each time through this method\n var downwardSweep = (iteration % 2 === 0);\n if (downwardSweep) {\n for (var j = model.maxRank - 1; j >= 0; j--) {\n this.medianRank(j, downwardSweep);\n }\n }\n else {\n for (var j = 1; j < model.maxRank; j++) {\n this.medianRank(j, downwardSweep);\n }\n }\n };\n /**\n * used to get the node next(up) connected to the specified node or connector\n * @private\n */\n CrossReduction.prototype.getConnectedCellsOnLayer = function (cell, layer, isPrevious) {\n if (isPrevious === void 0) { isPrevious = false; }\n var connectedlayer = 'nextLayerConnectedCells';\n var connectedAs = 'connectsAsTarget';\n if (isPrevious) {\n connectedlayer = 'previousLayerConnectedCells';\n connectedAs = 'connectsAsSource';\n }\n if (cell) {\n if (this.isVertex(cell)) {\n if (cell[connectedlayer] == null) {\n cell[connectedlayer] = [];\n cell[connectedlayer][0] = [];\n for (var i = 0; i < cell[connectedAs].length; i++) {\n var edge = cell[connectedAs][i];\n if (edge.maxRank === undefined) {\n edge.maxRank = -1;\n }\n if (edge.maxRank === -1 || (isPrevious ? (edge.minRank === layer - 1) : (edge.maxRank === layer + 1))) {\n // Either edge is not in any rank or no dummy nodes in edge, add node of other side of edge\n cell[connectedlayer][0].push(isPrevious ? edge.target : edge.source);\n }\n else {\n // Edge spans at least two layers, add edge\n cell[connectedlayer][0].push(edge);\n }\n }\n }\n return cell[connectedlayer][0];\n }\n else {\n if (cell[connectedlayer] == null) {\n cell[connectedlayer] = [];\n for (var i = 0; i < cell.temp.length; i++) {\n cell[connectedlayer][i] = [];\n if (i === (isPrevious ? 0 : (cell.temp.length - 1))) {\n cell[connectedlayer][i].push(isPrevious ? cell.target : cell.source);\n }\n else {\n cell[connectedlayer][i].push(cell);\n }\n }\n }\n return cell[connectedlayer][layer - cell.minRank - 1];\n }\n }\n return null;\n };\n /**\n * calculates the rank elements on the specified rank\n * @private\n */\n CrossReduction.prototype.medianValue = function (connectedCells, rankValue) {\n var medianValues = [];\n var arrayCount = 0;\n for (var i = 0; i < connectedCells.length; i++) {\n var cell = connectedCells[i];\n medianValues[arrayCount++] = this.getTempVariable(cell, rankValue);\n }\n // sorts numerical order sort\n medianValues.sort(function (a, b) { return a - b; });\n if (arrayCount % 2 === 1) {\n // For odd numbers of adjacent vertices return the median\n return medianValues[Math.floor(arrayCount / 2)];\n }\n else if (arrayCount === 2) {\n return ((medianValues[0] + medianValues[1]) / 2.0);\n }\n else {\n var medianPoint = arrayCount / 2;\n var leftMedian = medianValues[medianPoint - 1] - medianValues[0];\n var rightMedian = medianValues[arrayCount - 1]\n - medianValues[medianPoint];\n return (medianValues[medianPoint - 1] * rightMedian + medianValues[medianPoint] * leftMedian) / (leftMedian + rightMedian);\n }\n };\n /**\n * get the temp value of the specified layer\n * @private\n */\n CrossReduction.prototype.setTempVariable = function (cell, layer, value) {\n if (cell) {\n cell.temp[0] = value;\n }\n };\n /**\n * used to minimize the node position on this rank and one of its adjacent ranks\n */\n CrossReduction.prototype.medianRank = function (rankValue, downwardSweep) {\n var numCellsForRank = this.nestedBestRanks[rankValue].length;\n var medianValues = [];\n var reservedPositions = [];\n for (var i = 0; i < numCellsForRank; i++) {\n var cell = this.nestedBestRanks[rankValue][i];\n var sorterEntry = { medianValue: 0 };\n sorterEntry.cell = cell;\n // Flip whether or not equal medians are flipped on up and down sweeps \n //TODO re-implement some kind of nudge medianValues[i].nudge = !downwardSweep;\n var nextLevelConnectedCells = void 0;\n if (downwardSweep) {\n nextLevelConnectedCells = this.getConnectedCellsOnLayer(cell, rankValue);\n }\n else {\n nextLevelConnectedCells = this.getConnectedCellsOnLayer(cell, rankValue, true);\n }\n var nextRankValue = void 0;\n downwardSweep ? nextRankValue = rankValue + 1 : nextRankValue = rankValue - 1;\n if (nextLevelConnectedCells != null && nextLevelConnectedCells.length !== 0) {\n sorterEntry.medianValue = this.medianValue(nextLevelConnectedCells, nextRankValue);\n medianValues.push(sorterEntry);\n }\n else {\n // Nodes with no adjacent vertices are flagged in the reserved array to \n //indicate they should be left in their current position.\n reservedPositions[this.getTempVariable(cell, rankValue)] = true;\n }\n }\n medianValues.sort(this.compare);\n // Set the new position of each node within the rank using its temp variable\n for (var i = 0; i < numCellsForRank; i++) {\n if (reservedPositions[i] == null) {\n var cell = medianValues.shift().cell;\n this.setTempVariable(cell, rankValue, i);\n }\n }\n };\n /**\n * compares two values, it sends the values to the compare function,\n * and sorts the values according to the returned (negative, zero, positive) value\n */\n CrossReduction.prototype.compare = function (a, b) {\n if (a != null && b != null) {\n if (b.medianValue > a.medianValue) {\n return -1;\n }\n else if (b.medianValue < a.medianValue) {\n return 1;\n }\n }\n return 0;\n };\n return CrossReduction;\n}());\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, Complex, CollectionFactory, ChildProperty, Event } from '@syncfusion/ej2-base';\nimport { Browser, EventHandler, Draggable, Collection } from '@syncfusion/ej2-base';\nimport { remove, createElement } from '@syncfusion/ej2-base';\nimport { Accordion } from '@syncfusion/ej2-navigations';\nimport { Node, Connector, Shape, Size, Transform } from '../diagram/index';\nimport { DiagramRenderer, StackPanel, Margin } from '../diagram/index';\nimport { TextElement, Canvas, BpmnShape } from '../diagram/index';\nimport { SvgRenderer } from '../diagram/rendering/svg-renderer';\nimport { parentsUntil, createSvgElement, createHtmlElement, createMeasureElements } from '../diagram/utility/dom-util';\nimport { scaleElement } from '../diagram/utility/diagram-util';\nimport { getFunction } from '../diagram/utility/base-util';\nimport { getOuterBounds } from '../diagram/utility/connector';\nimport { Point } from '../diagram/primitives/point';\nimport { CanvasRenderer } from '../diagram/rendering/canvas-renderer';\nvar getObjectType = function (obj) {\n var conn = obj;\n if (conn.sourcePoint || conn.targetPoint || conn.sourceID || conn.targetID\n || conn.sourcePortID || conn.targetPortID || conn.sourceDecorator || conn.targetDecorator) {\n return Connector;\n }\n if (obj.shape && (obj.shape instanceof Shape || obj.shape.type)) {\n return Node;\n }\n return Node;\n};\n/**\n * Defines the behavior of a palette\n */\nvar Palette = /** @class */ (function (_super) {\n __extends(Palette, _super);\n function Palette() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Palette.prototype, \"id\", void 0);\n __decorate([\n Property()\n ], Palette.prototype, \"height\", void 0);\n __decorate([\n Property(true)\n ], Palette.prototype, \"expanded\", void 0);\n __decorate([\n Property('')\n ], Palette.prototype, \"iconCss\", void 0);\n __decorate([\n Property('')\n ], Palette.prototype, \"title\", void 0);\n __decorate([\n CollectionFactory(getObjectType)\n ], Palette.prototype, \"symbols\", void 0);\n return Palette;\n}(ChildProperty));\nexport { Palette };\n/**\n * Defines the size and position of the symbol palette\n */\nvar SymbolPreview = /** @class */ (function (_super) {\n __extends(SymbolPreview, _super);\n function SymbolPreview() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], SymbolPreview.prototype, \"width\", void 0);\n __decorate([\n Property()\n ], SymbolPreview.prototype, \"height\", void 0);\n __decorate([\n Complex({}, Point)\n ], SymbolPreview.prototype, \"offset\", void 0);\n return SymbolPreview;\n}(ChildProperty));\nexport { SymbolPreview };\n/**\n * Represents the Symbol Palette Component.\n * ```html\n *
    \n * \n * ```\n */\nvar SymbolPalette = /** @class */ (function (_super) {\n __extends(SymbolPalette, _super);\n //region - protected methods \n /**\n * Constructor for creating the component\n * @hidden\n */\n function SymbolPalette(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.symbolTable = {};\n _this.info = 'info';\n /**\n * helper method for draggable\n * @return {void}\n * @private\n */\n _this.helper = function (e) {\n var clonedElement;\n var id = e.sender.target.id.split('_container')[0];\n var symbol = _this.symbolTable[id];\n if (symbol && _this.selectedSymbol) {\n _this.selectedSymbols = _this.selectedSymbol.id === symbol.id ? symbol : _this.selectedSymbol;\n var position = _this.getMousePosition(e.sender);\n clonedElement = _this.getSymbolPreview(_this.selectedSymbols, e.sender, _this.element);\n clonedElement.setAttribute('paletteId', _this.element.id);\n }\n return clonedElement;\n };\n return _this;\n }\n /**\n * Refreshes the panel when the symbol palette properties are updated\n * @param newProp Defines the new values of the changed properties\n * @param oldProp Defines the old values of the changed properties\n */\n SymbolPalette.prototype.onPropertyChanged = function (newProp, oldProp) {\n var refresh = false;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'width':\n this.element.style.width = this.width.toString();\n break;\n case 'height':\n this.element.style.height = this.height.toString();\n break;\n case 'symbolPreview':\n break;\n case 'symbolWidth':\n case 'symbolHeight':\n case 'getSymbolInfo':\n refresh = true;\n break;\n case 'enableSearch':\n if (newProp.enableSearch) {\n this.createTextbox();\n }\n else {\n var divElement = document.getElementById(this.element.id + '_search');\n if (divElement) {\n divElement.parentNode.removeChild(divElement);\n }\n }\n break;\n case 'palettes':\n for (var _b = 0, _c = Object.keys(newProp.palettes); _b < _c.length; _b++) {\n var i = _c[_b];\n var index = Number(i);\n if (newProp.palettes[index].iconCss !== undefined) {\n this.accordionElement.items[index].iconCss = newProp.palettes[index].iconCss;\n refresh = true;\n }\n if (newProp.palettes[index].expanded !== undefined) {\n if (!this.palettes[index].isInteraction) {\n this.accordionElement.items[index].expanded = newProp.palettes[index].expanded;\n refresh = true;\n }\n else {\n this.palettes[index].isInteraction = false;\n }\n }\n }\n break;\n case 'enableAnimation':\n if (!this.enableAnimation) {\n this.accordionElement.animation = { expand: { duration: 0 }, collapse: { duration: 0 } };\n }\n else {\n this.accordionElement.animation = { expand: { duration: 400 }, collapse: { duration: 400 } };\n }\n break;\n case 'expandMode':\n this.accordionElement.expandMode = this.expandMode;\n refresh = true;\n break;\n }\n }\n if (refresh) {\n this.refreshPalettes();\n }\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @return {string}\n */\n SymbolPalette.prototype.getPersistData = function () {\n var keyEntity = ['loaded'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Initialize nodes, connectors and renderer\n */\n SymbolPalette.prototype.preRender = function () {\n var _this = this;\n this.element.style.overflow = 'auto';\n this.element.style.height = this.height.toString();\n this.element.style.width = this.width.toString();\n if (this.enableSearch) {\n this.createTextbox();\n }\n //create accordion element\n var accordionDiv = createElement('div', { id: this.element.id + '_container' });\n this.accordionElement = new Accordion({\n expandMode: this.expandMode\n });\n if (!this.enableAnimation) {\n this.accordionElement.animation = { expand: { duration: 0 }, collapse: { duration: 0 } };\n }\n this.accordionElement.expanded = function (args) {\n var index = _this.accordionElement.items.indexOf(args.item);\n _this.palettes[index].expanded = args.isExpanded;\n _this.palettes[index].isInteraction = true;\n };\n this.element.appendChild(accordionDiv);\n createMeasureElements();\n this.unWireEvents();\n this.wireEvents();\n };\n /**\n * Renders nodes and connectors in the symbol palette\n */\n SymbolPalette.prototype.render = function () {\n this.diagramRenderer = new DiagramRenderer(this.element.id, new SvgRenderer(), false);\n this.svgRenderer = new DiagramRenderer(this.element.id, new SvgRenderer(), true);\n this.updatePalettes();\n this.accordionElement.appendTo('#' + this.element.id + '_container');\n };\n /**\n * To get Module name\n * @private\n */\n SymbolPalette.prototype.getModuleName = function () {\n return 'SymbolPalette';\n };\n /**\n * To provide the array of modules needed for control rendering\n * @return {ModuleDeclaration[]}\n * @private\n */\n SymbolPalette.prototype.requiredModules = function () {\n var modules = [];\n modules.push({\n member: 'Bpmn',\n args: []\n });\n return modules;\n };\n /**\n * To destroy the symbol palette\n * @return {void}\n */\n SymbolPalette.prototype.destroy = function () {\n if (this.allowDrag) {\n this.draggable.destroy();\n this.unWireEvents();\n this.notify('destroy', {});\n _super.prototype.destroy.call(this);\n var content = document.getElementById(this.element.id + '_container');\n if (content) {\n this.element.removeChild(content);\n var measureElemnt = 'measureElement';\n if (window[measureElemnt]) {\n window[measureElemnt].usageCount -= 1;\n if (window[measureElemnt].usageCount === 0) {\n window[measureElemnt].parentNode.removeChild(window[measureElemnt]);\n window[measureElemnt] = null;\n }\n }\n }\n this.element.classList.remove('e-symbolpalette');\n }\n };\n //end region - protected methods\n //region - private methods to render symbols\n /**\n * Method to initialize the items in the symbols\n */\n SymbolPalette.prototype.initSymbols = function (symbolGroup) {\n for (var _i = 0, _a = symbolGroup.symbols; _i < _a.length; _i++) {\n var symbol = _a[_i];\n if (symbol instanceof Node) {\n var getNodeDefaults = getFunction(this.getNodeDefaults);\n if (getNodeDefaults) {\n getNodeDefaults(symbol, this);\n }\n }\n else if (symbol instanceof Connector) {\n var getConnectorDefaults = getFunction(this.getConnectorDefaults);\n if (getConnectorDefaults) {\n getConnectorDefaults(symbol, this);\n }\n }\n this.prepareSymbol(symbol);\n this.symbolTable[symbol.id] = symbol;\n }\n };\n /**\n * Method to create the palette\n */\n SymbolPalette.prototype.renderPalette = function (symbolGroup) {\n var paletteDiv = document.createElement('div');\n paletteDiv.setAttribute('id', symbolGroup.id);\n var style = 'display:none;overflow:auto;';\n if (symbolGroup.height) {\n style += 'height:' + symbolGroup.height + 'px';\n }\n paletteDiv.setAttribute('style', style);\n this.element.appendChild(paletteDiv);\n var item = {\n header: symbolGroup.title, expanded: symbolGroup.expanded,\n content: '#' + symbolGroup.id, iconCss: symbolGroup.iconCss\n };\n this.accordionElement.items.push(item);\n this.renderSymbols(symbolGroup, paletteDiv);\n };\n /**\n * Used to add the palette item as nodes or connectors in palettes\n */\n SymbolPalette.prototype.addPaletteItem = function (paletteName, paletteSymbol) {\n var refresh;\n for (var i = 0; i < this.palettes.length; i++) {\n var symbolPaletteGroup = this.palettes[i];\n if (symbolPaletteGroup.id.indexOf(paletteName) !== -1) {\n // tslint:disable-next-line:no-any \n var param = [undefined, symbolPaletteGroup, 'symbols', {}, true];\n // tslint:disable-next-line:no-any \n var obj = new (Function.prototype.bind.apply(getObjectType(paletteSymbol), param));\n for (var i_1 = 0; i_1 < Object.keys(paletteSymbol).length; i_1++) {\n obj[Object.keys(paletteSymbol)[i_1]] = paletteSymbol[Object.keys(paletteSymbol)[i_1]];\n }\n symbolPaletteGroup.symbols.push(obj);\n this.prepareSymbol(obj);\n this.symbolTable[obj.id] = obj;\n var paletteDiv = document.getElementById(symbolPaletteGroup.id);\n paletteDiv.appendChild(this.getSymbolContainer(obj, paletteDiv));\n break;\n }\n }\n };\n /**\n * Used to remove the palette item as nodes or connectors in palettes\n */\n SymbolPalette.prototype.removePaletteItem = function (paletteName, symbolId) {\n var refresh;\n for (var i = 0; i < this.palettes.length; i++) {\n var symbolPaletteGroup = this.palettes[i];\n if (symbolPaletteGroup.id.indexOf(paletteName) !== -1) {\n for (var _i = 0, _a = symbolPaletteGroup.symbols; _i < _a.length; _i++) {\n var symbol = _a[_i];\n if (symbol.id.indexOf(symbolId) !== -1) {\n var index = symbolPaletteGroup.symbols.indexOf(symbol);\n symbolPaletteGroup.symbols.splice(index, 1);\n delete this.symbolTable[symbol.id];\n var element = document.getElementById(symbol.id + '_container');\n element.parentNode.removeChild(element);\n refresh = true;\n break;\n }\n }\n }\n if (refresh) {\n break;\n }\n }\n };\n /**\n * Method to create the symbols in canvas\n */\n SymbolPalette.prototype.prepareSymbol = function (symbol) {\n var width;\n var sw;\n var height;\n var sh;\n var stackPanel = new StackPanel();\n var obj = symbol;\n var content;\n var symbolContainer = new Canvas();\n //preparing objects\n var getSymbolTemplate = getFunction(this.getSymbolTemplate);\n if (getSymbolTemplate) {\n content = getSymbolTemplate(symbol);\n }\n if (!content) {\n content = symbol.init(this);\n }\n var symbolInfo = { width: this.symbolWidth, height: this.symbolHeight };\n var getSymbolInfo = getFunction(this.getSymbolInfo);\n if (getSymbolInfo) {\n symbolInfo = getSymbolInfo(symbol);\n }\n symbolInfo = symbolInfo || {};\n //defining custom templates\n content.relativeMode = 'Object';\n content.horizontalAlignment = content.verticalAlignment = 'Center';\n symbolContainer.style.strokeColor = symbolContainer.style.fill = 'none';\n symbolContainer.children = [content];\n content.measure(new Size());\n content.arrange(content.desiredSize);\n width = symbolInfo.width = symbolInfo.width ||\n (obj.width !== undefined ? content.actualSize.width : undefined) || this.symbolWidth;\n height = symbolInfo.height = symbolInfo.height ||\n (obj.height !== undefined ? content.actualSize.height : undefined) || this.symbolHeight;\n if (width !== undefined && height !== undefined) {\n var actualWidth = width;\n var actualHeight = height;\n if (this.symbolWidth !== undefined) {\n actualWidth = this.symbolWidth - this.symbolMargin.left - this.symbolMargin.right;\n }\n else {\n width += obj.style.strokeWidth;\n }\n if (this.symbolHeight !== undefined) {\n actualHeight = this.symbolHeight - this.symbolMargin.top - this.symbolMargin.bottom;\n }\n else {\n height += obj.style.strokeWidth;\n }\n if (symbolInfo.description && symbolInfo.description.text !== '') {\n actualHeight -= 20; // default height of the text have been reduced from the container.\n }\n sw = actualWidth / (content.width || width);\n sh = actualHeight / (content.height || height);\n if (symbolInfo.fit) {\n sw = actualWidth / symbolInfo.width;\n sh = actualHeight / symbolInfo.height;\n }\n width = actualWidth;\n height = actualHeight;\n sw = sh = Math.min(sw, sh);\n symbolContainer.width = width;\n symbolContainer.height = height;\n content.width = symbolInfo.width;\n content.height = symbolInfo.height;\n this.scaleSymbol(symbol, symbolContainer, sw, sh, width, height);\n }\n else {\n var outerBounds = void 0;\n if (symbol instanceof Connector) {\n outerBounds = getOuterBounds(symbol);\n }\n content.width = symbol.width || (outerBounds) ? outerBounds.width : content.actualSize.width;\n content.height = symbol.height || (outerBounds) ? outerBounds.height : content.actualSize.height;\n }\n symbol.wrapper = stackPanel;\n stackPanel.children = [symbolContainer];\n content.pivot = stackPanel.pivot = { x: 0, y: 0 };\n stackPanel.id = content.id + '_symbol';\n stackPanel.style.fill = stackPanel.style.strokeColor = 'transparent';\n stackPanel.offsetX = symbol.style.strokeWidth / 2;\n stackPanel.offsetY = symbol.style.strokeWidth / 2;\n //symbol description-textElement\n this.getSymbolDescription(symbolInfo, width, stackPanel);\n stackPanel.measure(new Size());\n stackPanel.arrange(stackPanel.desiredSize);\n symbolInfo.width = symbolInfo.width || content.actualSize.width;\n symbolInfo.height = symbolInfo.height || content.actualSize.height;\n symbol[this.info] = symbolInfo;\n };\n /**\n * Method to get the symbol text description\n * @return {void}\n * @private\n */\n SymbolPalette.prototype.getSymbolDescription = function (symbolInfo, width, parent) {\n if (symbolInfo && symbolInfo.description && symbolInfo.description.text) {\n var textElement = new TextElement();\n //symbol description-textElement\n symbolInfo.description.overflow = symbolInfo.description.overflow || 'Ellipsis';\n symbolInfo.description.wrap = symbolInfo.description.wrap || 'WrapWithOverflow';\n textElement.content = symbolInfo.description.text;\n textElement.width = width;\n textElement.height = 20;\n textElement.style.strokeColor = 'transparent';\n textElement.style.fill = 'transparent';\n textElement.style.strokeWidth = 0;\n textElement.style.textWrapping = symbolInfo.description.wrap;\n textElement.style.textOverflow = symbolInfo.description.overflow;\n textElement.margin = { left: 0, right: 0, top: 0, bottom: 5 };\n parent.children.push(textElement);\n }\n };\n /**\n * Method to renders the symbols\n * @return {void}\n * @private\n */\n SymbolPalette.prototype.renderSymbols = function (symbolGroup, parentDiv) {\n for (var _i = 0, _a = symbolGroup.symbols; _i < _a.length; _i++) {\n var symbol = _a[_i];\n this.getSymbolContainer(symbol, parentDiv);\n }\n };\n /**\n * Method to clone the symbol for previewing the symbols\n * @return {void}\n * @private\n */\n SymbolPalette.prototype.getSymbolPreview = function (symbol, evt, parentDiv) {\n var canvas;\n var sw;\n var sh;\n var symbolPreviewWidth = symbol.wrapper.children[0].desiredSize.width + symbol.style.strokeWidth;\n var symbolPreviewHeight = symbol.wrapper.children[0].desiredSize.height + symbol.style.strokeWidth;\n var content = symbol.wrapper.children[0].children[0];\n if (this.symbolPreview.width !== undefined || this.symbolPreview.height !== undefined) {\n symbolPreviewWidth = (this.symbolPreview.width || symbolPreviewWidth) - symbol.style.strokeWidth;\n symbolPreviewHeight = (this.symbolPreview.height || symbolPreviewHeight) - symbol.style.strokeWidth;\n sw = symbolPreviewWidth / content.actualSize.width;\n sh = symbolPreviewHeight / content.actualSize.height;\n sw = sh = Math.min(sw, sh);\n var symbolWidth = content.actualSize.width * sw;\n var symbolHeight = content.actualSize.height * sh;\n symbol.wrapper.children[0].width = symbolPreviewWidth;\n symbol.wrapper.children[0].height = symbolPreviewHeight;\n this.measureAndArrangeSymbol(content);\n this.scaleSymbol(symbol, symbol.wrapper.children[0], sw, sh, symbolWidth, symbolHeight);\n symbolPreviewWidth = symbolWidth;\n symbolPreviewHeight = symbolHeight;\n }\n var prevPosition = { x: content.offsetX, y: content.offsetY };\n content.offsetX = content.offsetY = symbol.style.strokeWidth / 2;\n content.pivot = { x: 0, y: 0 };\n this.measureAndArrangeSymbol(content);\n var previewContainer = createElement('div');\n var div;\n previewContainer.setAttribute('draggable', 'true');\n previewContainer.setAttribute('class', 'e-dragclone');\n previewContainer.style.pointerEvents = 'none';\n document.body.appendChild(previewContainer);\n var style = 'margin:5px;';\n if (symbol.shape.type === 'Native') {\n canvas = createSvgElement('svg', {\n id: symbol.id + '_preview',\n width: Math.ceil(symbolPreviewWidth) + 1,\n height: Math.ceil(symbolPreviewHeight) + 1\n });\n var gElement = createSvgElement('g', { id: symbol.id + '_g' });\n canvas.appendChild(gElement);\n previewContainer.appendChild(canvas);\n this.svgRenderer.renderElement(content, gElement, undefined, undefined, canvas);\n }\n else if (symbol.shape.type === 'HTML') {\n div = this.getHtmlSymbol(symbol, canvas, previewContainer, symbolPreviewHeight, symbolPreviewWidth, true);\n }\n else {\n canvas = CanvasRenderer.createCanvas(symbol.id + '_preview', (Math.ceil(symbolPreviewWidth) + symbol.style.strokeWidth + 1) * 2, (Math.ceil(symbolPreviewHeight) + symbol.style.strokeWidth + 1) * 2);\n previewContainer.appendChild(canvas);\n style += 'transform:scale(0.5);';\n canvas.setAttribute('transform-origin', '0 0');\n canvas.getContext('2d').setTransform(2, 0, 0, 2, 0, 0);\n this.diagramRenderer.renderElement(content, canvas, undefined);\n }\n ((div && symbol.shape.type === 'HTML') ? div : canvas).setAttribute('style', style);\n content.offsetX = prevPosition.x;\n content.offsetY = prevPosition.y;\n return previewContainer;\n };\n SymbolPalette.prototype.measureAndArrangeSymbol = function (content) {\n if (content.children) {\n content.children[0].transform = Transform.Self;\n }\n content.measure(new Size());\n content.arrange(content.desiredSize);\n if (content.children) {\n content.children[0].transform = Transform.Parent;\n }\n };\n SymbolPalette.prototype.updateSymbolSize = function (symbol, width, height) {\n var element = symbol.wrapper.children[0].children[0];\n var strokeWidth = symbol.style.strokeWidth;\n element.width = (width || element.width) - (strokeWidth + 1);\n element.height = (height || element.height) - (strokeWidth + 1);\n symbol.wrapper.measure(new Size());\n symbol.wrapper.arrange(symbol.wrapper.desiredSize);\n };\n /**\n * Method to create canvas and render the symbol\n * @return {void}\n * @private\n */\n SymbolPalette.prototype.getSymbolContainer = function (symbol, parentDiv, preview) {\n var symbolInfo = this.symbolTable[symbol.id][this.info];\n var size = this.getSymbolSize(symbol, symbolInfo);\n var width = size.width + 1;\n var height = size.height + 1;\n var container = createElement('div', {\n id: symbol.id + '_container',\n styles: 'width:' + width + 'px;height:' + height + 'px;float:left;overflow:hidden'\n });\n container.setAttribute('title', symbolInfo.description ? symbolInfo.description.text : symbol.id);\n parentDiv.appendChild(container);\n var canvas;\n var gElement;\n var div;\n if (symbol.shape.type === 'Native') {\n canvas = createSvgElement('svg', {\n id: symbol.id,\n width: Math.ceil(symbol.wrapper.actualSize.width) + 1,\n height: Math.ceil(symbol.wrapper.actualSize.height) + 1\n });\n gElement = createSvgElement('g', { id: symbol.id + '_g' });\n canvas.appendChild(gElement);\n container.appendChild(canvas);\n this.updateSymbolSize(symbol);\n this.svgRenderer.renderElement(symbol.wrapper, gElement, undefined, undefined, canvas);\n }\n else if (symbol.shape.type === 'HTML') {\n div = this.getHtmlSymbol(symbol, canvas, container, symbol.wrapper.actualSize.height, symbol.wrapper.actualSize.width, false);\n }\n else {\n canvas = CanvasRenderer.createCanvas(symbol.id, Math.ceil((symbol.wrapper.actualSize.width + symbol.style.strokeWidth) * 2) + 1, Math.ceil((symbol.wrapper.actualSize.height + symbol.style.strokeWidth) * 2) + 1);\n container.appendChild(canvas);\n canvas.getContext('2d').setTransform(2, 0, 0, 2, 0, 0);\n this.diagramRenderer.renderElement(symbol.wrapper, gElement || canvas, undefined);\n }\n if (!preview) {\n var actualWidth = symbol.wrapper.actualSize.width + symbol.style.strokeWidth;\n var actualHeight = symbol.wrapper.actualSize.height + symbol.style.strokeWidth;\n var style = 'margin-left:' +\n Math.max(this.symbolMargin.left, ((width - actualWidth) / 2))\n + 'px;margin-top:' + Math.max(this.symbolMargin.top, ((height - actualHeight) / 2))\n + 'px;pointer-events:none;transform-origin:0 0;overflow:hidden;';\n if (canvas instanceof HTMLCanvasElement) {\n style += 'transform:scale(.5,.5);';\n }\n ((div && symbol.shape.type === 'HTML') ? div : canvas).setAttribute('style', style);\n container.classList.add('e-symbol-draggable');\n return container;\n }\n return canvas;\n };\n SymbolPalette.prototype.getHtmlSymbol = function (symbol, canvas, container, height, width, isPreview) {\n var div = createHtmlElement('div', {\n 'id': symbol.id + (isPreview ? '_html_div_preview' : '_html_div')\n });\n var htmlLayer = createHtmlElement('div', {\n 'id': symbol.id + (isPreview ? '_htmlLayer_preview' : '_htmlLayer'),\n 'style': 'width:' + Math.ceil(width + 1) + 'px;' +\n 'height:' + Math.ceil(height + 1) + 'px;position:absolute',\n 'class': 'e-html-layer'\n });\n var htmlLayerDiv = createHtmlElement('div', {\n 'id': symbol.id + (isPreview ? '_htmlLayer_div_preview' : '_htmlLayer_div'),\n 'style': 'width:' + Math.ceil(width + 1) + 'px;' +\n 'height:' + Math.ceil(height + 1) + 'px;position:absolute',\n });\n htmlLayer.appendChild(htmlLayerDiv);\n div.appendChild(htmlLayer);\n canvas = CanvasRenderer.createCanvas((isPreview ? (symbol.id + '_preview') : symbol.id), Math.ceil(width) + 1, Math.ceil(height) + 1);\n div.appendChild(canvas);\n container.appendChild(div);\n this.diagramRenderer.renderElement(symbol.wrapper.children[0].children[0], canvas, htmlLayer);\n return div;\n };\n SymbolPalette.prototype.getSymbolSize = function (symbol, symbolInfo) {\n var width = symbol.wrapper.actualSize.width;\n var height = symbol.wrapper.actualSize.height;\n if (!this.symbolWidth && !this.symbolHeight) {\n width += this.symbolMargin.left + this.symbolMargin.right + symbol.style.strokeWidth;\n height += this.symbolMargin.top + this.symbolMargin.bottom + symbol.style.strokeWidth;\n }\n else {\n width = this.symbolWidth;\n height = Math.max(this.symbolHeight, height);\n }\n return new Size(width, height);\n };\n //end region - rendering symbols\n //region event handlers\n SymbolPalette.prototype.getMousePosition = function (e) {\n var offsetY;\n var offsetX;\n var touchArg;\n if (e.type.indexOf('touch') !== -1) {\n touchArg = e;\n var pageY = touchArg.changedTouches[0].clientY;\n var pageX = touchArg.changedTouches[0].clientX;\n offsetY = pageY - this.element.offsetTop;\n offsetX = pageX - this.element.offsetLeft;\n }\n else {\n offsetY = e.clientY - this.element.offsetTop;\n offsetX = e.clientX - this.element.offsetLeft;\n }\n return { x: offsetX, y: offsetY };\n };\n SymbolPalette.prototype.mouseMove = function (e, touches) {\n if (this.highlightedSymbol && (!this.selectedSymbol\n || this.selectedSymbol.id + '_container' !== this.highlightedSymbol.id)) {\n this.highlightedSymbol.classList.remove('e-symbol-hover');\n this.highlightedSymbol.style.backgroundColor = '';\n this.highlightedSymbol = null;\n }\n var id = e.target.id.split('_container')[0];\n if (this.symbolTable[id]) {\n var container = document.getElementById(id + '_container');\n container.classList.add('e-symbol-hover');\n this.highlightedSymbol = container;\n }\n e.preventDefault();\n };\n SymbolPalette.prototype.mouseUp = function (evt) {\n if (evt && evt.target) {\n if (evt.srcElement.id === 'iconSearch') {\n var element = document.getElementById('iconSearch');\n if (element.classList.contains('e-clear-searchtext')) {\n element.className = 'e-input-group-icon e-search e-icons';\n document.getElementById('textEnter').value = '';\n this.searchPalette('');\n }\n }\n else {\n evt.preventDefault();\n }\n }\n };\n SymbolPalette.prototype.keyUp = function (evt) {\n var _this = this;\n if (this.enableSearch) {\n var palette_1 = this;\n var element = document.getElementById('iconSearch');\n element.className = 'e-input-group-icon e-clear-searchtext e-icons';\n if (evt && (evt.key === 'Enter' || evt.keyCode === 13)) {\n if (evt.target instanceof HTMLInputElement) {\n this.searchPalette(evt.target.value);\n }\n }\n else {\n if (this.timer) {\n clearTimeout(this.timer);\n }\n this.timer = setTimeout(function () {\n if (evt.target instanceof HTMLInputElement) {\n palette_1.searchPalette(evt.target.value);\n _this.timer = null;\n }\n }, 500);\n }\n }\n };\n SymbolPalette.prototype.mouseDown = function (evt) {\n var id = evt.target.id.split('_container')[0];\n if (this.selectedSymbol) {\n if (id !== this.selectedSymbol.id) {\n var oldSymbol = document.getElementById(this.selectedSymbol.id + '_container');\n oldSymbol.classList.remove('e-symbol-selected');\n var args = { oldValue: this.selectedSymbol.id, newValue: id };\n var event_1 = 'paletteSelectionChange';\n this.trigger(event_1, args);\n }\n var container = document.getElementById(this.selectedSymbol.id + '_container');\n container.style.backgroundColor = '';\n this.selectedSymbol = null;\n }\n if (this.symbolTable[id]) {\n var container = document.getElementById(id + '_container');\n container.classList.add('e-symbol-selected');\n this.selectedSymbol = this.symbolTable[id];\n evt.preventDefault();\n }\n };\n //end region - event handlers\n // region - draggable\n SymbolPalette.prototype.initDraggable = function () {\n if (this.allowDrag) {\n var drag = void 0;\n this.draggable = new Draggable(this.element, {\n dragTarget: '.e-symbol-draggable',\n helper: this.helper,\n dragStart: this.dragStart,\n dragStop: this.dragStop,\n drag: function (args) {\n var target = 'target';\n var parent = parentsUntil(args[target], 'e-droppable');\n if (parent && parent.classList.contains('e-diagram')) {\n var e2eInstance = 'ej2_instances';\n parent[e2eInstance][0].droppable.over(args);\n }\n },\n cursorAt: { left: this.symbolPreview.offset.x, top: this.symbolPreview.offset.y }\n });\n }\n };\n SymbolPalette.prototype.dragStart = function (e) {\n var element = this.helper[0];\n if (element) {\n element.setAttribute('paletteId', this.element.id);\n }\n };\n SymbolPalette.prototype.dragStop = function (e) {\n if (!parentsUntil(e.target, 'e-diagram')) {\n remove(e.helper);\n }\n };\n //end region - draggable \n //region - helper methods\n SymbolPalette.prototype.scaleSymbol = function (symbol, symbolContainer, sw, sh, width, height) {\n if (symbol instanceof Connector) {\n var wrapper = symbol.wrapper;\n symbol.wrapper = symbolContainer.children[0];\n var point = symbol.scale(sw, sh, width, height, symbolContainer.children[0]);\n var difX = width / 2 - symbolContainer.children[0].children[0].offsetX + point.x / 2;\n var difY = height / 2 - symbolContainer.children[0].children[0].offsetY + point.y / 2;\n for (var _i = 0, _a = symbolContainer.children[0].children; _i < _a.length; _i++) {\n var child = _a[_i];\n child.offsetX += difX;\n child.offsetY += difY;\n child.staticSize = false;\n }\n symbol.wrapper = wrapper;\n }\n else if (symbol.shape instanceof BpmnShape && this.bpmnModule) {\n var wrapper = symbol.wrapper;\n symbol.wrapper = symbolContainer;\n symbolContainer.children[0].width = width;\n symbolContainer.children[0].height = height;\n this.bpmnModule.updateBPMN({ width: width, height: height }, symbol, symbol, null);\n symbol.wrapper = wrapper;\n }\n else {\n scaleElement(symbolContainer.children[0], sw, sh, symbolContainer);\n }\n };\n SymbolPalette.prototype.refreshPalettes = function () {\n this.accordionElement.items = [];\n this.updatePalettes();\n this.accordionElement.dataBind();\n };\n SymbolPalette.prototype.updatePalettes = function () {\n for (var i = 0; i < this.palettes.length; i++) {\n var symGroup = this.palettes[i];\n this.initSymbols(symGroup);\n this.renderPalette(symGroup);\n }\n };\n SymbolPalette.prototype.createTextbox = function () {\n var searchDiv = createElement('div', { id: this.element.id + '_search' });\n searchDiv.setAttribute('style', 'backgroundColor:white;height:30px');\n searchDiv.className = 'e-input-group';\n this.element.appendChild(searchDiv);\n var textBox = document.createElement('input');\n textBox.placeholder = 'Search Shapes';\n textBox.id = 'textEnter';\n textBox.setAttribute('style', 'width:100%;height:auto');\n textBox.className = 'e-input';\n searchDiv.appendChild(textBox);\n var span = createElement('span', { id: 'iconSearch', className: 'e-input-group-icon e-search e-icons' });\n searchDiv.appendChild(span);\n };\n SymbolPalette.prototype.searchPalette = function (value) {\n var symbolGroup = [];\n var element = document.getElementById('SearchPalette');\n var paletteDiv;\n //remove the existing child in palette\n if (element) {\n for (var k = element.children.length - 1; k >= 0; k--) {\n element.removeChild(element.children[k]);\n }\n }\n //add the searched item in array collection\n for (var i = 0; i < this.palettes.length; i++) {\n var symbolPaletteGroup = this.palettes[i];\n for (var j = 0; j < symbolPaletteGroup.symbols.length; j++) {\n var item = symbolPaletteGroup.symbols[j];\n if (value !== '' && item.id.toLowerCase().indexOf(value.toLowerCase()) !== -1) {\n symbolGroup.push(item);\n }\n }\n }\n var filterSymbols = getFunction(this.filterSymbols);\n if (filterSymbols) {\n symbolGroup = filterSymbols(symbolGroup) || [];\n }\n //create a palette collection\n if (!element) {\n paletteDiv = this.createSearchPalette(paletteDiv);\n element = paletteDiv;\n }\n //add the symbols into search palette\n if (symbolGroup.length > 0) {\n for (var _i = 0, symbolGroup_1 = symbolGroup; _i < symbolGroup_1.length; _i++) {\n var symbol = symbolGroup_1[_i];\n this.getSymbolContainer(symbol, element);\n }\n }\n else if (value !== '') {\n var emptyDiv = document.createElement('div');\n emptyDiv.setAttribute('id', 'EmptyDiv');\n emptyDiv.innerHTML = 'No Items To Display';\n emptyDiv.setAttribute('style', 'textAlign:center;fontStyle:italic');\n element.appendChild(emptyDiv);\n }\n else {\n var element_1 = document.getElementById('iconSearch');\n element_1.className = 'e-input-group-icon e-search e-icons';\n this.accordionElement.removeItem(0);\n }\n };\n SymbolPalette.prototype.createSearchPalette = function (paletteDiv) {\n paletteDiv = document.createElement('div');\n paletteDiv.setAttribute('id', 'SearchPalette');\n paletteDiv.setAttribute('style', 'display:none;overflow:auto;');\n this.element.appendChild(paletteDiv);\n var paletteCollection = {\n header: 'Search Results', expanded: true,\n content: '#SearchPalette',\n };\n this.accordionElement.addItem(paletteCollection, 0);\n return paletteDiv;\n };\n /**\n * Method to bind events for the symbol palette\n */\n SymbolPalette.prototype.wireEvents = function () {\n var startEvent = Browser.touchStartEvent;\n var stopEvent = Browser.touchEndEvent;\n var moveEvent = Browser.touchMoveEvent;\n var cancelEvent = 'mouseleave';\n var keyEvent = 'keyup';\n EventHandler.add(this.element, startEvent, this.mouseDown, this);\n EventHandler.add(this.element, moveEvent, this.mouseMove, this);\n EventHandler.add(this.element, stopEvent, this.mouseUp, this);\n EventHandler.add(this.element, keyEvent, this.keyUp, this);\n // initialize the draggable component\n this.initDraggable();\n };\n /**\n * Method to unbind events for the symbol palette\n */\n SymbolPalette.prototype.unWireEvents = function () {\n var startEvent = Browser.touchStartEvent;\n var stopEvent = Browser.touchEndEvent;\n var moveEvent = Browser.touchMoveEvent;\n var cancelEvent = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n var keyEvent = 'keyup';\n EventHandler.remove(this.element, startEvent, this.mouseDown);\n EventHandler.remove(this.element, moveEvent, this.mouseMove);\n EventHandler.remove(this.element, stopEvent, this.mouseUp);\n EventHandler.remove(this.element, keyEvent, this.keyUp);\n };\n __decorate([\n Property('S')\n ], SymbolPalette.prototype, \"accessKey\", void 0);\n __decorate([\n Property('100%')\n ], SymbolPalette.prototype, \"width\", void 0);\n __decorate([\n Property('100%')\n ], SymbolPalette.prototype, \"height\", void 0);\n __decorate([\n Collection([], Palette)\n ], SymbolPalette.prototype, \"palettes\", void 0);\n __decorate([\n Property()\n ], SymbolPalette.prototype, \"getSymbolInfo\", void 0);\n __decorate([\n Property()\n ], SymbolPalette.prototype, \"filterSymbols\", void 0);\n __decorate([\n Property()\n ], SymbolPalette.prototype, \"getSymbolTemplate\", void 0);\n __decorate([\n Property()\n ], SymbolPalette.prototype, \"symbolWidth\", void 0);\n __decorate([\n Property()\n ], SymbolPalette.prototype, \"symbolHeight\", void 0);\n __decorate([\n Complex({ left: 10, right: 10, top: 10, bottom: 10 }, Margin)\n ], SymbolPalette.prototype, \"symbolMargin\", void 0);\n __decorate([\n Property(true)\n ], SymbolPalette.prototype, \"allowDrag\", void 0);\n __decorate([\n Complex({}, SymbolPreview)\n ], SymbolPalette.prototype, \"symbolPreview\", void 0);\n __decorate([\n Property(false)\n ], SymbolPalette.prototype, \"enableSearch\", void 0);\n __decorate([\n Property(true)\n ], SymbolPalette.prototype, \"enableAnimation\", void 0);\n __decorate([\n Property('Multiple')\n ], SymbolPalette.prototype, \"expandMode\", void 0);\n __decorate([\n Event()\n ], SymbolPalette.prototype, \"paletteSelectionChange\", void 0);\n __decorate([\n Property()\n ], SymbolPalette.prototype, \"getNodeDefaults\", void 0);\n __decorate([\n Property()\n ], SymbolPalette.prototype, \"getConnectorDefaults\", void 0);\n return SymbolPalette;\n}(Component));\nexport { SymbolPalette };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { DiagramRenderer } from '../diagram/rendering/renderer';\nimport { CanvasRenderer } from '../diagram/rendering/canvas-renderer';\nimport { Component, Property, Browser, EventHandler, Event } from '@syncfusion/ej2-base';\nimport { setAttributeHtml, setAttributeSvg } from '../diagram/utility/dom-util';\nimport { createSvgElement, getNativeLayer, hasClass } from '../diagram/utility/dom-util';\nimport { Rect } from '../diagram/primitives/rect';\nimport { Size } from '../diagram/primitives/size';\nimport { SvgRenderer } from '../diagram/rendering/svg-renderer';\n/**\n * Overview control\n * ```\n *
    \n * \n * ```\n */\nvar Overview = /** @class */ (function (_super) {\n __extends(Overview, _super);\n function Overview(options, element) {\n var _this = _super.call(this, options, element) || this;\n /** @private */\n _this.mode = 'Canvas';\n /** @private */\n _this.id = 'overview';\n _this.actionName = '';\n _this.startPoint = null;\n _this.currentPoint = null;\n _this.prevPoint = null;\n _this.scale = null;\n _this.inAction = false;\n _this.viewPortRatio = 1;\n _this.horizontalOffset = 0;\n _this.verticalOffset = 0;\n _this.model = {};\n _this.event = true;\n _this.model = { width: _this.width, height: _this.height };\n return _this;\n }\n /**\n * Updates the overview control when the objects are changed\n * @param newProp Lists the new values of the changed properties\n * @param oldProp Lists the old values of the changed properties\n */\n Overview.prototype.onPropertyChanged = function (newProp, oldProp) {\n var objectArray = [];\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'sourceID':\n this.setParent(newProp.sourceID);\n break;\n case 'width':\n case 'height':\n this.renderCanvas();\n this.setParent(this.sourceID);\n break;\n }\n }\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @return {string}\n */\n Overview.prototype.getPersistData = function () {\n var keyEntity = ['loaded'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Initialize nodes, connectors and renderer\n */\n Overview.prototype.preRender = function () {\n this.element.style.background = 'transparent';\n this.unWireEvents();\n this.wireEvents();\n };\n Overview.prototype.render = function () {\n this.diagramRenderer = new DiagramRenderer(this.element.id, new SvgRenderer(), false);\n this.renderCanvas();\n this.setParent(this.sourceID);\n };\n Overview.prototype.getSizeValue = function (real) {\n var text;\n if (real.toString().indexOf('px') > 0 || real.toString().indexOf('%') > 0) {\n text = real.toString();\n }\n else {\n text = real.toString() + 'px';\n }\n return text;\n };\n Overview.prototype.renderCanvas = function (options) {\n var canvas = document.getElementById(this.element.id + '_canvas');\n if (!canvas) {\n canvas = document.createElement('div');\n this.element.appendChild(canvas);\n }\n var attribute = {\n 'id': this.element.id + '_canvas', 'class': 'drawing',\n 'style': 'position:relative; height:' + this.getSizeValue(this.model.height) + '; width:' +\n this.getSizeValue(this.model.width) +\n ';style:-ms-touch-action: none;touch-action: none;'\n };\n setAttributeHtml(canvas, attribute);\n this.element.setAttribute('tabindex', String(0));\n this.element.style.overflow = 'hidden';\n this.element.style.height = String(this.model.height);\n this.element.style.width = String(this.model.width);\n this.canvas = canvas;\n };\n Overview.prototype.setParent = function (id) {\n var element = document.getElementById(id);\n var instance = 'ej2_instances';\n if (this.parent) {\n var oldparent = this.parent;\n this.parent = null;\n oldparent.setOverview(null, this.id);\n this.removeDocument(this);\n }\n this.parent = this.getDiagram(element, instance);\n if (this.parent) {\n this.parent.setOverview(this);\n }\n };\n Overview.prototype.getDiagram = function (element, instance) {\n var diagram;\n var n = element[instance].length;\n for (var i = 0; i < n; i++) {\n if (hasClass(element[instance][i].element, 'e-diagram')) {\n diagram = element[instance][i];\n break;\n }\n }\n return diagram;\n };\n Overview.prototype.unWireEvents = function () {\n var start = Browser.touchStartEvent;\n var move = Browser.touchMoveEvent;\n var evnt;\n var cancel = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n var isIE11Pointer = Browser.isPointer;\n var wheelEvent = Browser.info.name === 'mozilla' ?\n (isIE11Pointer ? 'mousewheel' : 'DOMMouseScroll') : 'mousewheel';\n var stop = Browser.touchEndEvent;\n EventHandler.remove(this.element, start, this.mouseDown);\n EventHandler.remove(this.element, move, this.mouseMove);\n EventHandler.remove(this.element, stop, this.mouseUp);\n EventHandler.remove(this.element, cancel, this.documentMouseUp);\n EventHandler.remove(window, 'resize', this.windowResize);\n var container = document.getElementById(this.sourceID + 'content');\n if (container) {\n EventHandler.remove(container, 'scroll', this.scrolled);\n }\n };\n Overview.prototype.wireEvents = function () {\n var start = Browser.touchStartEvent;\n var stop = Browser.touchEndEvent;\n var move = Browser.touchMoveEvent;\n var cancel = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n var isIE11Pointer = Browser.isPointer;\n var wheelEvent = Browser.info.name === 'mozilla' ?\n (isIE11Pointer ? 'mousewheel' : 'DOMMouseScroll') : 'mousewheel';\n EventHandler.add(this.element, start, this.mouseDown, this);\n EventHandler.add(this.element, move, this.mouseMove, this);\n EventHandler.add(this.element, stop, this.mouseUp, this);\n EventHandler.add(this.element, cancel, this.documentMouseUp, this);\n EventHandler.add(window, 'resize', this.windowResize, this);\n var container = document.getElementById(this.sourceID + 'content');\n if (container) {\n EventHandler.add(container, 'scroll', this.scrolled, this);\n }\n };\n /**\n * @private\n */\n /**\n * @private\n */\n Overview.prototype.renderDocument = function (view) {\n view.canvas = this.canvas;\n var g = document.getElementById(this.canvas.id + '_svg');\n if (g) {\n g.parentNode.removeChild(g);\n }\n var attr = {\n id: this.canvas.id + '_svg',\n version: '1.1',\n xlink: 'http://www.w3.org/1999/xlink',\n 'class': 'overview_svg'\n };\n var svg = createSvgElement('svg', attr);\n this.svg = svg;\n view.svg = svg;\n view.canvas.appendChild(svg);\n var ovw = document.getElementById(this.element.id);\n var element = ovw;\n var eWidth = element.clientWidth;\n var eHeight = element.clientHeight;\n var bRect = element.getBoundingClientRect();\n // Check for the window resize\n var screenX = (window.screenX < 0) ? window.screenX * -1 : window.screenX;\n var screenY = (window.screenY < 0) ? window.screenY * -1 : window.screenY;\n if (eWidth === 0) {\n eWidth = Math.floor(((window.innerWidth - screenX) - Math.floor(bRect.left)));\n }\n if (eHeight === 0) {\n eHeight = Math.floor(((window.innerHeight - screenY) - Math.floor(bRect.top)));\n }\n svg.setAttribute('width', String(eWidth));\n svg.setAttribute('height', String(eHeight));\n this.model.width = eWidth;\n this.model.height = eHeight;\n var attributes;\n if (!view.diagramLayerDiv) {\n view.diagramLayerDiv = document.createElement('div');\n var container = document.getElementById(this.element.id);\n view.diagramLayer = CanvasRenderer.createCanvas(this.element.id + '_diagramLayer', this.model.width, this.model.height);\n view.diagramLayer.setAttribute('style', 'position:absolute; left:0px; top:0px ');\n view.diagramLayerDiv.appendChild(view.diagramLayer);\n view.canvas.appendChild(view.diagramLayerDiv);\n }\n attributes = {\n 'id': this.element.id + '_diagramLayer_div',\n 'style': 'width:' + this.model.width + 'px; height:' + this.model.height + 'px;position:absolute;top:0px;left:0px'\n };\n setAttributeHtml(view.diagramLayerDiv, attributes);\n this.renderHtmlLayer(view.canvas);\n this.renderNativeLayer(view.canvas, view);\n this.addOverviewRectPanel(view);\n };\n /** @private */\n Overview.prototype.removeDocument = function (view) {\n var svg = document.getElementById(this.canvas.id + '_svg');\n this.canvas.removeChild(svg);\n var htmlLayer = document.getElementById(this.element.id + '_htmlLayer');\n this.canvas.removeChild(htmlLayer);\n var diagramLayer = document.getElementById(this.id + '_diagramLayer_div');\n this.canvas.removeChild(diagramLayer);\n view.diagramLayerDiv = null;\n view.diagramLayer = null;\n };\n Overview.prototype.renderHtmlLayer = function (canvas) {\n var div = document.createElement('div');\n var attr = { 'id': this.element.id + '_htmlLayer', 'class': 'e-html-layer' };\n setAttributeHtml(div, attr);\n var htmlLayer = div;\n div.style.pointerEvents = 'none';\n div.style.position = 'absolute';\n div.style.left = '0px';\n div.style.top = '0px';\n var htmlDiv = document.createElement('div');\n var options = {\n 'id': this.element.id + '_htmlLayer_div',\n 'style': 'position:absolute;top:0px;left:0px;'\n };\n setAttributeHtml(htmlDiv, options);\n htmlLayer.appendChild(htmlDiv);\n canvas.appendChild(htmlLayer);\n return htmlLayer;\n };\n Overview.prototype.renderNativeLayer = function (canvas, view) {\n var nativeLayerSvg = this.parent.createSvg(this.element.id + '_nativeLayer_svg', this.model.width, this.model.height);\n var nativeLayer = createSvgElement('g', { 'id': this.element.id + '_nativeLayer' });\n nativeLayerSvg.appendChild(nativeLayer);\n view.diagramLayerDiv.appendChild(nativeLayerSvg);\n setAttributeSvg(nativeLayerSvg, { 'class': 'e-native-layer' });\n };\n Overview.prototype.addOverviewRectPanel = function (view) {\n var svg = document.getElementById(this.canvas.id + '_overviewsvg');\n if (svg) {\n svg.parentNode.removeChild(svg);\n }\n var attr = ({\n id: this.canvas.id + '_overviewsvg',\n version: '1.1',\n xlink: 'http://www.w3.org/1999/xlink',\n 'style': 'position:absolute;left:0px;top:0px; aria-label:Specifies overview',\n width: this.model.width,\n height: this.model.height\n });\n svg = createSvgElement('svg', attr);\n view.canvas.appendChild(svg);\n var ovw = createSvgElement('g', { 'id': this.id + '_overviewlayer', 'style': 'pointer-events:none' });\n svg.appendChild(ovw);\n var rect = createSvgElement('rect', {\n 'fill': 'transparent', 'width': '100%', 'height': '100%', 'class': 'overviewbackrect',\n 'id': this.canvas.id + 'overviewbackrect'\n });\n rect.setAttribute('style', ' pointer-events: none; ');\n ovw.appendChild(rect);\n var svgDocument = (ovw);\n var g = createSvgElement('g', { 'id': this.canvas.id + 'overviewhandle', 'style': 'pointer-events:all' });\n ovw.appendChild(g);\n var innerrect = createSvgElement('rect', { 'id': this.canvas.id + 'overviewrect', 'fill': 'transparent' });\n g.appendChild(innerrect);\n this.renderOverviewCorner('left', g);\n this.renderOverviewCorner('right', g);\n this.renderOverviewCorner('top', g);\n this.renderOverviewCorner('bottom', g);\n this.renderOverviewCorner('topleft', g);\n this.renderOverviewCorner('topright', g);\n this.renderOverviewCorner('bottomleft', g);\n this.renderOverviewCorner('bottomright', g);\n };\n Overview.prototype.renderOverviewCorner = function (name, parent) {\n var svg = this.svg;\n var shape;\n if (name === 'top' || name === 'bottom' || name === 'right' || name === 'left') {\n shape = 'rect';\n }\n else {\n shape = 'circle';\n }\n var innerrect = createSvgElement(shape, { 'id': this.canvas.id + 'visible' + name });\n parent.appendChild(innerrect);\n var transrect = createSvgElement(shape, {\n 'id': this.canvas.id + name, 'class': 'overviewresizer', 'fill': 'transparent'\n });\n parent.appendChild(transrect);\n };\n Overview.prototype.updateOverviewRectangle = function () {\n var difx = this.currentPoint.x - this.prevPoint.x;\n var dify = this.currentPoint.y - this.prevPoint.y;\n var size = new Size();\n size.width = 0;\n size.height = 0;\n var x = 0;\n var y = 0;\n var w;\n var h;\n switch (this.resizeDirection) {\n case 'left':\n size.width -= difx;\n size.height -= difx / this.viewPortRatio;\n x = difx;\n y = difx / this.viewPortRatio;\n y /= 2;\n break;\n case 'right':\n size.width += difx;\n size.height += difx / this.viewPortRatio;\n y = difx / this.viewPortRatio;\n y /= -2;\n break;\n case 'top':\n size.height -= dify;\n size.width -= dify * this.viewPortRatio;\n y = dify;\n x = dify * this.viewPortRatio;\n x /= 2;\n break;\n case 'bottom':\n size.height += dify;\n size.width += dify * this.viewPortRatio;\n x = dify * this.viewPortRatio;\n x /= -2;\n break;\n case 'topleft':\n if (Math.abs(dify) > Math.abs(difx)) {\n difx = dify * this.viewPortRatio;\n }\n else {\n dify = difx / this.viewPortRatio;\n }\n size.width -= difx;\n size.height -= dify;\n x = difx;\n y = dify;\n break;\n case 'topright':\n if (Math.abs(dify) > Math.abs(difx)) {\n difx = -dify * this.viewPortRatio;\n }\n else {\n dify = -(difx / this.viewPortRatio);\n }\n y = dify;\n size.width += difx;\n size.height -= dify;\n break;\n case 'bottomleft':\n if (Math.abs(dify) > Math.abs(difx)) {\n difx = -dify * this.viewPortRatio;\n }\n else {\n dify = -difx / this.viewPortRatio;\n }\n x = difx;\n size.width -= difx;\n size.height += dify;\n break;\n case 'bottomright':\n if (Math.abs(dify) > Math.abs(difx)) {\n difx = dify * this.viewPortRatio;\n }\n else {\n dify = difx / this.viewPortRatio;\n }\n size.width += difx;\n size.height += dify;\n break;\n }\n this.updateHelper(x, y, size, w, h);\n };\n Overview.prototype.updateHelper = function (difx, dify, size, width, height) {\n var x;\n var y;\n var bounds;\n var svg = this.element.getElementsByTagName('svg')[2];\n var rect = svg.getElementById('helper');\n if (size) {\n bounds = rect.getBBox();\n x = bounds.x + difx;\n y = bounds.y + dify;\n width = bounds.width + size.width;\n height = bounds.height + size.height;\n }\n else {\n var difx_1;\n if (this.currentPoint.x > this.startPoint.x) {\n difx_1 = this.currentPoint.x - this.prevPoint.x;\n }\n else {\n difx_1 = this.prevPoint.x - this.currentPoint.x;\n }\n var dify_1;\n if (this.currentPoint.y > this.startPoint.y) {\n dify_1 = this.currentPoint.y - this.prevPoint.y;\n }\n else {\n dify_1 = this.prevPoint.y - this.currentPoint.y;\n }\n var w = void 0;\n var h = void 0;\n if (Math.abs(dify_1) > Math.abs(difx_1)) {\n difx_1 = this.viewPortRatio * dify_1;\n h = true;\n w = false;\n }\n else {\n dify_1 = difx_1 / this.viewPortRatio;\n w = true;\n h = false;\n }\n bounds = rect.getBBox();\n x = ((this.startPoint.x > this.currentPoint.x) ?\n bounds.x - difx_1 : bounds.x);\n y = ((this.startPoint.y > this.currentPoint.y) ? bounds.y - dify_1 : bounds.y);\n width = bounds.width + difx_1;\n height = bounds.height + dify_1;\n }\n setAttributeSvg(this.helper, {\n 'id': this.helper.id, 'x': x, 'y': y,\n 'width': Math.max(0, width), 'height': Math.max(0, height)\n });\n };\n Overview.prototype.updateOverviewrect = function (x, y, width, height) {\n var rect = document.getElementById(this.canvas.id + 'overviewrect');\n var attr = { x: x, y: y, width: Math.max(1, width), height: Math.max(1, height) };\n setAttributeHtml(rect, attr);\n this.updateOverviewCorner('top', x + 8, y - 2, Math.max(0, width - 16), 2);\n this.updateOverviewCorner('bottom', x + 8, y + height, Math.max(0, width - 16), 2);\n this.updateOverviewCorner('left', x - 2, y + 8, 2, Math.max(0, height - 16));\n this.updateOverviewCorner('right', x + width, y + 8, 2, Math.max(0, height - 16));\n this.updateOverviewCorner('topleft', x, y, 5, 5);\n this.updateOverviewCorner('topright', x + width, y, 5, 5);\n this.updateOverviewCorner('bottomleft', x, y + height, 5, 5);\n this.updateOverviewCorner('bottomright', x + width, y + height, 5, 5);\n };\n Overview.prototype.updateOverviewCorner = function (name, x, y, width, height) {\n var attr;\n var transattr;\n var rectname = 'visible' + name;\n var rect = document.getElementById(this.canvas.id + rectname);\n if (name === 'top' || name === 'bottom' || name === 'right' || name === 'left') {\n attr = { x: x, y: y, width: width, height: height, fill: '#ED1C24' };\n transattr = { x: x - 2, y: y - 2, width: width === 2 ? 4 : width, height: height === 2 ? 4 : height };\n }\n else {\n attr = { cx: x, cy: y, 'r': 4, fill: '#ED1C24' };\n transattr = { cx: x, cy: y, 'r': 6, fill: 'transparent' };\n }\n setAttributeHtml(rect, attr);\n var transrect = document.getElementById(this.canvas.id + name);\n setAttributeHtml(transrect, transattr);\n };\n Overview.prototype.translateOverviewRectangle = function () {\n var offwidth = Number(this.model.width);\n var offheight = Number(this.model.height);\n var difx = this.currentPoint.x - this.prevPoint.x;\n var dify = this.currentPoint.y - this.prevPoint.y;\n var viewPort;\n var zoom = Math.min(this.parent.scroller.viewPortWidth / offwidth, this.parent.scroller.viewPortHeight / offheight);\n var svg = this.element.getElementsByTagName('svg')[2];\n var panel = svg.getElementById(this.canvas.id\n + 'overviewrect');\n var bounds = panel.getBBox();\n var x = bounds.x + difx;\n var y = bounds.y + dify;\n var width = bounds.width;\n var height = bounds.height;\n this.updateOverviewrect(x, y, width, height);\n this.updateParentView(this.parent.scroller.currentZoom, x, y, width, height, null);\n };\n Overview.prototype.renderOverviewRect = function (x, y, width, height) {\n var offwidth = Number(this.model.width);\n var offheight = Number(this.model.height);\n var viewPort;\n var viewwidth = (width / offwidth) * this.contentWidth;\n var viewheight = (height / offheight) * this.contentHeight;\n var zoom = Math.max(this.parent.scroller.viewPortWidth / viewwidth, this.parent.scroller.viewPortHeight / viewheight);\n if (zoom >= 0.25 && zoom <= 30) {\n var point = { x: 0, y: 0 };\n this.updateParentView(zoom, x, y, width, height, point);\n var bounds = this.scrollOverviewRect(this.parent.scroller.horizontalOffset, this.parent.scroller.verticalOffset, this.parent.scroller.currentZoom, true);\n if (this.helper) {\n var panel = this.element.getElementsByTagName('rect')[10];\n var svgRect = panel.getBBox();\n bounds.x = svgRect.x;\n bounds.y = svgRect.y;\n }\n this.updateOverviewrect(bounds.x, bounds.y, bounds.width, bounds.height);\n }\n };\n Overview.prototype.scrollOverviewRect = function (hoffset, voffset, currentZoom, scaled) {\n if (!(this.actionName) || scaled) {\n var offwidth = Number(this.model.width);\n var offheight = Number(this.model.height);\n var scale = Math.min(this.contentWidth / offwidth, this.contentHeight / offheight);\n var bounds = new Rect();\n var x = bounds.x = (hoffset / currentZoom) / scale;\n var y = bounds.y = (voffset / currentZoom) / scale;\n var viewPort = void 0;\n var width = bounds.width = (this.parent.scroller.viewPortWidth / currentZoom) / scale;\n var height = bounds.height = (this.parent.scroller.viewPortHeight / currentZoom) / scale;\n var ratio = this.parent.scroller.viewPortWidth / this.parent.scroller.viewPortHeight;\n if (scaled) {\n var rect = new Rect();\n rect.x = x;\n rect.y = y;\n rect.width = width;\n rect.height = height;\n return rect;\n }\n this.updateOverviewrect(-x, -y, width, height);\n }\n return null;\n };\n Overview.prototype.updateParentView = function (zoom, x, y, width, height, focusPoint) {\n var offwidth = Number(this.model.width);\n var offheight = Number(this.model.height);\n var scalex = this.contentWidth / offwidth;\n var scaley = this.contentHeight / offheight;\n var hoffset = x * scalex * zoom;\n var voffset = y * scaley * zoom;\n var delx;\n var dely;\n var bounds = this.parent.scroller.getPageBounds();\n if (zoom !== 1 || this.actionName === 'pan') {\n delx = -hoffset - this.parent.scroller.horizontalOffset;\n dely = -voffset - this.parent.scroller.verticalOffset;\n }\n if (this.actionName === 'scale' || this.actionName === 'draw') {\n this.parent.scroller.zoom(zoom / this.parent.scroller.currentZoom, delx, dely, focusPoint);\n }\n else {\n this.parent.pan(delx, dely, focusPoint);\n }\n };\n /** @private */\n Overview.prototype.updateView = function (view) {\n var width;\n var height;\n var bounds = this.parent.scroller.getPageBounds();\n width = bounds.width;\n height = bounds.height;\n var offwidth = Number(this.model.width);\n var offheight = Number(this.model.height);\n var scale;\n var w = Math.max(width, this.parent.scroller.viewPortWidth);\n var h = Math.max(height, this.parent.scroller.viewPortHeight);\n this.contentWidth = w = Math.max(w, (offwidth / offheight) * h);\n this.contentHeight = h = Math.max(h, (offheight / offwidth) * w);\n scale = Math.min(offwidth / w, offheight / h);\n var htmlLayer = document.getElementById(this.element.id + '_htmlLayer');\n htmlLayer.style.webkitTransform = 'scale(' + scale + ') translate(' + -bounds.x + 'px,' + (-bounds.y) + 'px)';\n htmlLayer.style.transform = 'scale(' + scale + ') translate(' + -bounds.x + 'px,' + (-bounds.y) + 'px)';\n var ovw = document.getElementById(this.id + '_overviewlayer');\n ovw.setAttribute('transform', 'translate(' + (-bounds.x * scale) + ',' + (-bounds.y * scale) + ')');\n this.horizontalOffset = bounds.x * scale;\n this.verticalOffset = bounds.y * scale;\n var canvas = document.getElementById('overview_diagramLayer');\n var nativeLayer = getNativeLayer(this.element.id);\n var context = canvas.getContext('2d');\n var widthratio = (Number(this.model.width) / this.contentWidth);\n var heightratio = (Number(this.model.height) / this.contentHeight);\n widthratio = Math.min(widthratio, heightratio);\n nativeLayer.setAttribute('transform', 'translate('\n + (0) + ',' + (0) + '),scale('\n + widthratio + ')');\n context.setTransform(widthratio, 0, 0, widthratio, 0, 0);\n context.fillStyle = 'red';\n this.scrollOverviewRect(this.parent.scroller.horizontalOffset, this.parent.scroller.verticalOffset, this.parent.scroller.currentZoom);\n };\n // region - Event Handlers\n Overview.prototype.scrolled = function (evt) {\n if (this.event) {\n var bounds = this.scrollOverviewRect(this.parent.scroller.horizontalOffset, this.parent.scroller.verticalOffset, this.parent.scroller.currentZoom, true);\n this.updateOverviewrect(-bounds.x, -bounds.y, bounds.width, bounds.height);\n }\n };\n Overview.prototype.updateCursor = function (evt) {\n if (hasClass(evt.target, ('overviewresizer'))) {\n switch (evt.target.id) {\n case this.canvas.id + 'left':\n this.canvas.style.cursor = 'w-resize';\n break;\n case this.canvas.id + 'right':\n this.canvas.style.cursor = 'e-resize';\n break;\n case this.canvas.id + 'top':\n this.canvas.style.cursor = 'n-resize';\n break;\n case this.canvas.id + 'bottom':\n this.canvas.style.cursor = 's-resize';\n break;\n case this.canvas.id + 'topleft':\n this.canvas.style.cursor = 'nw-resize';\n break;\n case this.canvas.id + 'topright':\n this.canvas.style.cursor = 'ne-resize';\n break;\n case this.canvas.id + 'bottomleft':\n this.canvas.style.cursor = 'sw-resize';\n break;\n case this.canvas.id + 'bottomright':\n this.canvas.style.cursor = 'se-resize';\n break;\n }\n }\n else {\n this.canvas.style.cursor = 'default';\n }\n };\n Overview.prototype.mouseMove = function (evt) {\n this.event = false;\n this.updateCursor(evt);\n this.currentPoint = this.mousePosition(evt);\n if (this.actionName) {\n switch (this.actionName) {\n case 'draw':\n if (!this.inAction && (this.startPoint.x !== this.currentPoint.x || this.startPoint.y !== this.currentPoint.y)) {\n this.initHelper();\n this.inAction = true;\n }\n if (this.inAction) {\n this.updateHelper();\n }\n break;\n case 'scale':\n if (!this.inAction) {\n this.initHelper();\n this.inAction = true;\n }\n this.updateOverviewRectangle();\n break;\n case 'pan':\n if ((this.startPoint.x !== this.currentPoint.x || this.startPoint.y === this.currentPoint.y) || this.inAction) {\n this.inAction = true;\n this.translateOverviewRectangle();\n }\n break;\n }\n }\n this.prevPoint = this.currentPoint;\n };\n Overview.prototype.documentMouseUp = function (evt) {\n this.inAction = false;\n this.actionName = '';\n if (this.helper) {\n this.helper.parentNode.removeChild(this.helper);\n this.helper = null;\n }\n this.event = true;\n document.getElementById(this.canvas.id + 'overviewhandle').style.pointerEvents = 'all';\n };\n Overview.prototype.windowResize = function (evt) {\n var _this = this;\n if (this.resizeTo) {\n clearTimeout(this.resizeTo);\n }\n this.resizeTo = setTimeout(function () {\n var element = document.getElementById(_this.element.id);\n var bRect = element.getBoundingClientRect();\n _this.model.width = bRect.width;\n _this.model.height = bRect.height;\n _this.renderCanvas();\n _this.setParent(_this.sourceID);\n }, 10);\n return false;\n };\n /** @private */\n Overview.prototype.mouseDown = function (evt) {\n if (evt.target.id === this.canvas.id + '_overviewsvg') {\n this.actionName = 'draw';\n }\n if (evt.target.id === this.canvas.id + 'overviewrect') {\n this.actionName = 'pan';\n }\n if (hasClass(evt.target, 'overviewresizer')) {\n this.actionName = 'scale';\n switch (evt.target.id) {\n case this.canvas.id + 'left':\n this.resizeDirection = 'left';\n break;\n case this.canvas.id + 'right':\n this.resizeDirection = 'right';\n break;\n case this.canvas.id + 'top':\n this.resizeDirection = 'top';\n break;\n case this.canvas.id + 'bottom':\n this.resizeDirection = 'bottom';\n break;\n case this.canvas.id + 'topleft':\n this.resizeDirection = 'topleft';\n break;\n case this.canvas.id + 'topright':\n this.resizeDirection = 'topright';\n break;\n case this.canvas.id + 'bottomleft':\n this.resizeDirection = 'bottomleft';\n break;\n case this.canvas.id + 'bottomright':\n this.resizeDirection = 'bottomright';\n break;\n }\n }\n this.startPoint = this.prevPoint = this.mousePosition(evt);\n this.viewPortRatio = this.parent.scroller.viewPortWidth / this.parent.scroller.viewPortHeight;\n var overViewHandle = document.getElementById(this.canvas.id + 'overviewhandle');\n overViewHandle.style.pointerEvents = 'none';\n };\n Overview.prototype.mouseUp = function (evt) {\n this.currentPoint = this.mousePosition(evt);\n var offwidth = Number(this.model.width);\n var offheight = Number(this.model.height);\n if (this.actionName) {\n if ((this.startPoint.x !== this.currentPoint.x || this.startPoint.y !== this.currentPoint.y)) {\n if (this.actionName === 'pan') {\n var i = 0;\n }\n else {\n if (this.helper) {\n var bounds = (this.element.getElementsByTagName('rect')[10]).getBBox();\n this.resizeDirection = this.resizeDirection || '';\n var x = bounds.x;\n var y = bounds.y;\n var width = bounds.width;\n var height = bounds.height;\n var adjust = this.resizeDirection === 'topleft' || this.resizeDirection === 'topright' ||\n this.resizeDirection === 'bottomleft' || this.resizeDirection === 'bottomright';\n this.renderOverviewRect(x, y, width, height);\n }\n }\n }\n else {\n if (evt.target.id === this.canvas.id + '_overviewsvg' || evt.target.id === 'helper') {\n var svg = this.element.getElementsByTagName('svg')[2];\n var g = svg.getElementById(this.canvas.id\n + 'overviewrect');\n var bounds = g.getBBox();\n var width = bounds.width;\n var height = bounds.height;\n this.inAction = true;\n this.actionName = 'pan';\n this.renderOverviewRect(this.currentPoint.x - width / 2, this.currentPoint.y - height / 2, width, height);\n this.inAction = false;\n }\n }\n }\n if (this.helper) {\n this.helper.parentNode.removeChild(this.helper);\n this.helper = null;\n }\n this.actionName = '';\n this.startPoint = null;\n this.currentPoint = null;\n this.prevPoint = null;\n this.helper = null;\n this.viewPortRatio = 1;\n this.resizeDirection = '';\n this.inAction = false;\n this.event = true;\n document.getElementById(this.canvas.id + 'overviewhandle').style.pointerEvents = 'all';\n };\n Overview.prototype.initHelper = function () {\n var g = this.element.getElementsByTagName('svg')[2];\n var scale = this.parent.scroller.currentZoom;\n var x = this.startPoint.x;\n var y = this.startPoint.y;\n var width = 1;\n var height = 1;\n if (this.actionName === 'scale') {\n var rect = g.\n getElementById(this.canvas.id + 'overviewrect');\n var bounds = rect.getBBox();\n x = bounds.x;\n y = bounds.y;\n width = bounds.width;\n height = bounds.height;\n }\n var selectionRect = createSvgElement('rect', {\n 'id': 'helper', x: x, y: y, width: width, height: height,\n 'fill': 'transparent', 'stroke': 'gray', 'stroke-dasharray': '2 2', 'shape-rendering': 'crispEdges'\n });\n var overviewLayer = g.getElementById(this.id + '_overviewlayer');\n overviewLayer.appendChild(selectionRect);\n this.helper = selectionRect;\n };\n Overview.prototype.mousePosition = function (evt) {\n var touchArg;\n var offsetX;\n var offsetY;\n if (evt.type.indexOf('touch') !== -1) {\n touchArg = evt;\n var pageX = touchArg.changedTouches[0].clientX;\n var pageY = touchArg.changedTouches[0].clientY;\n offsetX = pageX - this.element.offsetLeft;\n offsetY = pageY - this.element.offsetTop;\n }\n else {\n offsetX = evt.clientX;\n offsetY = evt.clientY;\n }\n var boundingRect = this.element.getBoundingClientRect();\n offsetX = offsetX - boundingRect.left;\n offsetY = offsetY - boundingRect.top;\n return { x: offsetX + this.horizontalOffset, y: offsetY + this.verticalOffset };\n };\n // end region - Event handlers\n /**\n * To destroy the Overview\n * @return {void}\n * @private\n */\n Overview.prototype.destroy = function () {\n this.unWireEvents();\n this.notify('destroy', {});\n _super.prototype.destroy.call(this);\n if (document.getElementById(this.element.id)) {\n this.element.classList.remove('e-overview');\n var content = document.getElementById(this.element.id + '_canvas');\n if (content) {\n this.element.removeChild(content);\n }\n }\n this.parent.views.splice(this.parent.views.indexOf(this.id), 1);\n this.diagramLayerDiv = null;\n this.canvas = null;\n this.parent = null;\n };\n /**\n * Get module name.\n */\n Overview.prototype.getModuleName = function () {\n /**\n * Returns the module name\n */\n return 'Overview';\n };\n __decorate([\n Property('100%')\n ], Overview.prototype, \"width\", void 0);\n __decorate([\n Property('100%')\n ], Overview.prototype, \"height\", void 0);\n __decorate([\n Property('')\n ], Overview.prototype, \"sourceID\", void 0);\n __decorate([\n Event()\n ], Overview.prototype, \"created\", void 0);\n return Overview;\n}(Component));\nexport { Overview };\n","import * as index from '@syncfusion/ej2-diagrams';\nindex.Diagram.Inject( index.HierarchicalTree,index.MindMap,index.RadialTree,index.ComplexHierarchicalTree,index.DataBinding,index.Snapping,index.PrintAndExport,index.BpmnDiagrams,index.SymmetricLayout,index.ConnectorBridging,index.UndoRedo,index.LayoutAnimation,index.DiagramContextMenu,index.ConnectorEditing);\nexport * from '@syncfusion/ej2-diagrams';\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, EventHandler, addClass, append, Property, Event, L10n, compile } from '@syncfusion/ej2-base';\nimport { setStyleAttribute, extend, removeClass, createElement, prepend, isNullOrUndefined, detach, getValue } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, rippleEffect, ChildProperty, Complex } from '@syncfusion/ej2-base';\nimport { DataManager, Query, DataUtil } from '@syncfusion/ej2-data';\nimport { ListBase, cssClass as ListBaseClasses } from '@syncfusion/ej2-lists';\nvar FieldSettings = /** @class */ (function (_super) {\n __extends(FieldSettings, _super);\n function FieldSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], FieldSettings.prototype, \"text\", void 0);\n __decorate([\n Property()\n ], FieldSettings.prototype, \"value\", void 0);\n __decorate([\n Property()\n ], FieldSettings.prototype, \"iconCss\", void 0);\n __decorate([\n Property()\n ], FieldSettings.prototype, \"groupBy\", void 0);\n __decorate([\n Property()\n ], FieldSettings.prototype, \"htmlAttributes\", void 0);\n return FieldSettings;\n}(ChildProperty));\nexport { FieldSettings };\nexport var dropDownBaseClasses = {\n root: 'e-dropdownbase',\n rtl: 'e-rtl',\n content: 'e-content',\n selected: 'e-active',\n hover: 'e-hover',\n noData: 'e-nodata',\n fixedHead: 'e-fixed-head',\n focus: 'e-item-focus',\n li: ListBaseClasses.li,\n group: ListBaseClasses.group,\n disabled: ListBaseClasses.disabled,\n grouping: 'e-dd-group'\n};\n/**\n * DropDownBase component will generate the list items based on given data and act as base class to drop-down related components\n */\nvar DropDownBase = /** @class */ (function (_super) {\n __extends(DropDownBase, _super);\n /**\n * * Constructor for DropDownBase class\n */\n function DropDownBase(options, element) {\n return _super.call(this, options, element) || this;\n }\n ;\n DropDownBase.prototype.getPropObject = function (prop, newProp, oldProp) {\n var newProperty = new Object();\n var oldProperty = new Object();\n // tslint:disable-next-line:no-function-constructor-with-string-args\n var propName = new Function('prop', 'return prop');\n newProperty[propName(prop)] = newProp[propName(prop)];\n oldProperty[propName(prop)] = oldProp[propName(prop)];\n var data = new Object();\n data.newProperty = newProperty;\n data.oldProperty = oldProperty;\n return data;\n };\n DropDownBase.prototype.getValueByText = function (text, ignoreCase, ignoreAccent) {\n var value = null;\n if (!isNullOrUndefined(this.listData)) {\n if (ignoreCase) {\n value = this.checkValueCase(text, true, ignoreAccent);\n }\n else {\n value = this.checkValueCase(text, false, ignoreAccent);\n }\n }\n return value;\n };\n ;\n DropDownBase.prototype.checkValueCase = function (text, ignoreCase, ignoreAccent, isTextByValue) {\n var _this = this;\n var value = null;\n if (isTextByValue) {\n value = text;\n }\n var dataSource = this.listData;\n var fields = this.fields;\n var type = this.typeOfData(dataSource).typeof;\n if (type === 'string' || type === 'number' || type === 'boolean') {\n for (var _i = 0, dataSource_1 = dataSource; _i < dataSource_1.length; _i++) {\n var item = dataSource_1[_i];\n if (!isNullOrUndefined(item)) {\n if (ignoreAccent) {\n value = this.checkingAccent(String(item), text, ignoreCase);\n }\n else {\n if (ignoreCase) {\n if (this.checkIgnoreCase(String(item), text)) {\n value = this.getItemValue(String(item), text, ignoreCase);\n }\n }\n else {\n if (this.checkNonIgnoreCase(String(item), text)) {\n value = this.getItemValue(String(item), text, ignoreCase, isTextByValue);\n }\n }\n }\n }\n }\n }\n else {\n if (ignoreCase) {\n dataSource.filter(function (item) {\n if (_this.checkIgnoreCase(getValue(fields.text, item).toString(), text)) {\n value = getValue(fields.value, item);\n }\n });\n }\n else {\n if (isTextByValue) {\n dataSource.filter(function (item) {\n var itemValue = getValue(fields.value, item);\n if (!isNullOrUndefined(itemValue) && _this.stringTrim(itemValue) === value.toString()) {\n value = getValue(fields.text, item);\n }\n });\n }\n else {\n dataSource.filter(function (item) {\n if (_this.checkNonIgnoreCase(getValue(fields.text, item), text)) {\n value = getValue(fields.value, item);\n }\n });\n }\n }\n }\n return value;\n };\n DropDownBase.prototype.checkingAccent = function (item, text, ignoreCase) {\n var dataItem = DataUtil.ignoreDiacritics(String(item));\n var textItem = DataUtil.ignoreDiacritics(text.toString());\n var value = null;\n if (ignoreCase) {\n if (this.checkIgnoreCase(dataItem, textItem)) {\n value = this.getItemValue(String(item), text, ignoreCase);\n }\n }\n else {\n if (this.checkNonIgnoreCase(String(item), text)) {\n value = this.getItemValue(String(item), text, ignoreCase);\n }\n }\n return value;\n };\n DropDownBase.prototype.checkIgnoreCase = function (item, text) {\n return String(item).toLowerCase() === text.toString().toLowerCase() ? true : false;\n };\n DropDownBase.prototype.checkNonIgnoreCase = function (item, text) {\n return String(item) === text.toString() ? true : false;\n };\n DropDownBase.prototype.getItemValue = function (dataItem, typedText, ignoreCase, isTextByValue) {\n var value = null;\n var dataSource = this.listData;\n var type = this.typeOfData(dataSource).typeof;\n if (isTextByValue) {\n value = dataItem.toString();\n }\n else {\n if (ignoreCase) {\n value = type === 'string' ? String(dataItem) : this.getFormattedValue(String(dataItem));\n }\n else {\n value = type === 'string' ? typedText : this.getFormattedValue(typedText);\n }\n }\n return value;\n };\n DropDownBase.prototype.l10nUpdate = function (actionFailure) {\n if (this.noRecordsTemplate !== 'No Records Found' || this.actionFailureTemplate !== 'The Request Failed') {\n var template = actionFailure ? this.actionFailureTemplate : this.noRecordsTemplate;\n var compiledString = void 0;\n this.list.innerHTML = '';\n compiledString = compile(template);\n for (var _i = 0, _a = compiledString({}); _i < _a.length; _i++) {\n var item = _a[_i];\n this.list.appendChild(item);\n }\n }\n else {\n var l10nLocale = { noRecordsTemplate: 'No Records Found', actionFailureTemplate: 'The Request Failed' };\n this.l10n = new L10n('dropdowns', l10nLocale, this.locale);\n this.list.innerHTML = actionFailure ?\n this.l10n.getConstant('actionFailureTemplate') : this.l10n.getConstant('noRecordsTemplate');\n }\n };\n DropDownBase.prototype.getTextByValue = function (value) {\n var text;\n text = this.checkValueCase(value, false, false, true);\n return text;\n };\n DropDownBase.prototype.stringTrim = function (item) {\n if (!isNullOrUndefined(item)) {\n var itemValue = item.toString();\n return itemValue.trim();\n }\n return item.toString();\n };\n DropDownBase.prototype.getFormattedValue = function (value) {\n if (this.listData && this.listData.length) {\n var item = this.typeOfData(this.listData);\n if (typeof getValue((this.fields.value ? this.fields.value : 'value'), item.item) === 'number'\n || item.typeof === 'number') {\n return parseInt(value, 10);\n }\n if (typeof getValue((this.fields.value ? this.fields.value : 'value'), item.item) === 'boolean'\n || item.typeof === 'boolean') {\n return (value === 'true');\n }\n }\n return value;\n };\n /**\n * Sets RTL to dropdownbase wrapper\n */\n DropDownBase.prototype.setEnableRtl = function () {\n if (this.list) {\n this.enableRtlElements.push(this.list);\n }\n this.enableRtl ? addClass(this.enableRtlElements, dropDownBaseClasses.rtl) :\n removeClass(this.enableRtlElements, dropDownBaseClasses.rtl);\n };\n ;\n /**\n * Initialize the Component.\n */\n DropDownBase.prototype.initialize = function () {\n this.bindEvent = true;\n if (this.element.tagName === 'UL') {\n var jsonElement = ListBase.createJsonFromElement(this.element);\n this.setProperties({ fields: { text: 'text', value: 'text' } }, true);\n this.resetList(jsonElement, this.fields);\n }\n else if (this.element.tagName === 'SELECT') {\n var dataSource = this.dataSource instanceof Array ? (this.dataSource.length > 0 ? true : false)\n : !isNullOrUndefined(this.dataSource) ? true : false;\n if (!dataSource) {\n this.renderItemsBySelect();\n }\n }\n else {\n this.setListData(this.dataSource, this.fields, this.query);\n }\n };\n ;\n /**\n * Get the properties to be maintained in persisted state.\n */\n DropDownBase.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n ;\n /**\n * Sets the enabled state to DropDownBase.\n */\n DropDownBase.prototype.setEnabled = function () {\n if (this.enabled) {\n this.element.setAttribute('aria-disabled', 'false');\n }\n else {\n this.element.setAttribute('aria-disabled', 'true');\n }\n };\n ;\n DropDownBase.prototype.renderItemsBySelect = function () {\n var element = this.element;\n var fields = { value: 'value', text: 'text' };\n var jsonElement = [];\n var group = element.querySelectorAll('select>optgroup');\n var option = element.querySelectorAll('select>option');\n this.getJSONfromOption(jsonElement, option, fields);\n if (group.length) {\n for (var i = 0; i < group.length; i++) {\n var item = group[i];\n var optionGroup = {};\n optionGroup[fields.text] = item.label;\n optionGroup.isHeader = true;\n var child = item.querySelectorAll('option');\n jsonElement.push(optionGroup);\n this.getJSONfromOption(jsonElement, child, fields);\n }\n var items = element.querySelectorAll('select>option');\n }\n this.fields.text = fields.text;\n this.fields.value = fields.value;\n this.resetList(jsonElement, fields);\n };\n DropDownBase.prototype.getJSONfromOption = function (items, options, fields) {\n for (var _i = 0, options_1 = options; _i < options_1.length; _i++) {\n var option = options_1[_i];\n var json = {};\n json[fields.text] = option.innerText;\n json[fields.value] = option.getAttribute(fields.value) ? option.getAttribute(fields.value) : option.innerText;\n items.push(json);\n }\n };\n /**\n * Execute before render the list items\n * @private\n */\n DropDownBase.prototype.preRender = function () {\n // there is no event handler\n this.scrollTimer = -1;\n this.enableRtlElements = [];\n this.isRequested = false;\n };\n /**\n * Creates the list items of DropDownBase component.\n */\n DropDownBase.prototype.setListData = function (dataSource, fields, query) {\n var _this = this;\n fields = fields ? fields : this.fields;\n var ulElement;\n this.isActive = true;\n if (dataSource instanceof DataManager) {\n var eventArgs = { cancel: false, data: dataSource, query: query };\n this.trigger('actionBegin', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n this.showSpinner();\n this.isRequested = true;\n eventArgs.data.executeQuery(this.getQuery(eventArgs.query)).then(function (e) {\n _this.trigger('actionComplete', e);\n if (e.cancel) {\n return;\n }\n var listItems = e.result;\n ulElement = _this.renderItems(listItems, fields);\n _this.onActionComplete(ulElement, listItems, e);\n _this.isRequested = false;\n _this.hideSpinner();\n _this.trigger('dataBound', { items: listItems, e: e });\n }).catch(function (e) {\n _this.isRequested = false;\n _this.onActionFailure(e);\n _this.hideSpinner();\n });\n }\n else {\n this.showSpinner();\n var dataManager = new DataManager(dataSource);\n var listItems = (this.getQuery(query)).executeLocal(dataManager);\n ulElement = this.renderItems(listItems, fields);\n this.onActionComplete(ulElement, listItems);\n this.hideSpinner();\n this.trigger('dataBound', { items: listItems });\n }\n };\n DropDownBase.prototype.showSpinner = function () {\n // Used this method in component side.\n };\n DropDownBase.prototype.hideSpinner = function () {\n // Used this method in component side.\n };\n DropDownBase.prototype.onActionFailure = function (e) {\n this.liCollections = [];\n this.trigger('actionFailure', e);\n this.l10nUpdate(true);\n addClass([this.list], dropDownBaseClasses.noData);\n };\n DropDownBase.prototype.onActionComplete = function (ulElement, list, e) {\n this.listData = list;\n this.list.innerHTML = '';\n this.list.appendChild(ulElement);\n this.liCollections = this.list.querySelectorAll('.' + dropDownBaseClasses.li);\n this.ulElement = this.list.querySelector('ul');\n this.postRender(this.list, list, this.bindEvent);\n };\n DropDownBase.prototype.postRender = function (listElement, list, bindEvent) {\n var focusItem = listElement.querySelector('.' + dropDownBaseClasses.li);\n var selectedItem = listElement.querySelector('.' + dropDownBaseClasses.selected);\n if (focusItem && !selectedItem) {\n addClass([focusItem], dropDownBaseClasses.focus);\n }\n if (list.length <= 0) {\n this.l10nUpdate();\n addClass([listElement], dropDownBaseClasses.noData);\n }\n else {\n listElement.classList.remove(dropDownBaseClasses.noData);\n }\n if (this.groupTemplate) {\n this.renderGroupTemplate(listElement);\n }\n };\n /**\n * Get the query to do the data operation before list item generation.\n */\n DropDownBase.prototype.getQuery = function (query) {\n return query ? query : this.query ? this.query : new Query();\n };\n /**\n * To render the template content for group header element.\n */\n DropDownBase.prototype.renderGroupTemplate = function (listEle) {\n if (this.fields.groupBy !== null && this.dataSource || this.element.querySelector('.' + dropDownBaseClasses.group)) {\n var dataSource = this.dataSource;\n var headerItems = listEle.querySelectorAll('.' + dropDownBaseClasses.group);\n var tempHeaders = ListBase.renderGroupTemplate(this.groupTemplate, dataSource, this.fields.properties, headerItems);\n }\n };\n /**\n * To create the ul li list items\n */\n DropDownBase.prototype.createListItems = function (dataSource, fields) {\n if (dataSource && fields.groupBy || this.element.querySelector('optgroup')) {\n if (fields.groupBy) {\n if (this.sortOrder !== 'None') {\n dataSource = this.getSortedDataSource(dataSource);\n }\n dataSource = ListBase.groupDataSource(dataSource, fields.properties, this.sortOrder);\n }\n addClass([this.list], dropDownBaseClasses.grouping);\n }\n else {\n dataSource = this.getSortedDataSource(dataSource);\n }\n var options = this.listOption(dataSource, fields);\n return ListBase.createList(dataSource, options, true);\n };\n ;\n DropDownBase.prototype.listOption = function (dataSource, fields) {\n var iconCss = isNullOrUndefined(fields.iconCss) ? false : true;\n var options = (fields.text !== null || fields.value !== null) ? {\n fields: fields.properties,\n showIcon: iconCss, ariaAttributes: { groupItemRole: 'presentation' }\n } : { fields: { value: 'text' } };\n return extend({}, options, fields, true);\n };\n ;\n DropDownBase.prototype.setFloatingHeader = function (e) {\n if (isNullOrUndefined(this.fixedHeaderElement)) {\n this.fixedHeaderElement = createElement('div', { className: dropDownBaseClasses.fixedHead });\n if (!this.list.querySelector('li').classList.contains(dropDownBaseClasses.group)) {\n this.fixedHeaderElement.style.display = 'none';\n }\n prepend([this.fixedHeaderElement], this.list);\n this.setFixedHeader();\n }\n if (!isNullOrUndefined(this.fixedHeaderElement) && this.fixedHeaderElement.style.zIndex === '0') {\n this.setFixedHeader();\n }\n this.scrollStop(e);\n };\n DropDownBase.prototype.scrollStop = function (e) {\n var target = e.target;\n var liHeight = parseInt(getComputedStyle(this.liCollections[0], null).getPropertyValue('height'), 10);\n var topIndex = Math.round(target.scrollTop / liHeight);\n var liCollections = this.ulElement.querySelectorAll('li');\n for (var i = topIndex; i > -1; i--) {\n if (!isNullOrUndefined(liCollections[i]) && liCollections[i].classList.contains(dropDownBaseClasses.group)) {\n var currentLi = liCollections[i];\n this.fixedHeaderElement.innerHTML = currentLi.innerHTML;\n this.fixedHeaderElement.style.top = e.target.scrollTop + 'px';\n this.fixedHeaderElement.style.display = 'block';\n break;\n }\n else {\n this.fixedHeaderElement.style.display = 'none';\n this.fixedHeaderElement.style.top = 'none';\n }\n }\n };\n /**\n * To render the list items\n */\n DropDownBase.prototype.renderItems = function (listData, fields) {\n var ulElement;\n if (this.itemTemplate && listData) {\n var dataSource = listData;\n if (dataSource && fields.groupBy) {\n if (this.sortOrder !== 'None') {\n dataSource = this.getSortedDataSource(dataSource);\n }\n dataSource = ListBase.groupDataSource(dataSource, fields.properties, this.sortOrder);\n }\n else {\n dataSource = this.getSortedDataSource(dataSource);\n }\n ulElement = this.templateListItem(dataSource, fields);\n }\n else {\n ulElement = this.createListItems(listData, fields);\n }\n return ulElement;\n };\n ;\n DropDownBase.prototype.templateListItem = function (dataSource, fields) {\n var option = this.listOption(dataSource, fields);\n return ListBase.renderContentTemplate(this.itemTemplate, dataSource, fields.properties, option);\n };\n DropDownBase.prototype.typeOfData = function (items) {\n var item = { typeof: null, item: null };\n for (var i = 0; (!isNullOrUndefined(items) && i < items.length); i++) {\n if (!isNullOrUndefined(items[i])) {\n return item = { typeof: typeof items[i], item: items[i] };\n }\n }\n return item;\n };\n DropDownBase.prototype.setFixedHeader = function () {\n this.list.parentElement.style.display = 'block';\n var liWidth = this.liCollections[0].offsetWidth;\n this.fixedHeaderElement.style.width = liWidth.toString() + 'px';\n setStyleAttribute(this.fixedHeaderElement, { zIndex: 10 });\n var firstLi = this.ulElement.querySelector('.' + dropDownBaseClasses.group);\n this.fixedHeaderElement.innerHTML = firstLi.innerHTML;\n };\n DropDownBase.prototype.getSortedDataSource = function (dataSource) {\n if (dataSource && this.sortOrder !== 'None') {\n var textField = this.fields.text ? this.fields.text : 'text';\n dataSource = ListBase.getDataSource(dataSource, ListBase.addSorting(this.sortOrder, textField));\n }\n return dataSource;\n };\n /**\n * Return the index of item which matched with given value in data source\n */\n DropDownBase.prototype.getIndexByValue = function (value) {\n var index;\n var listItems = this.getItems();\n for (var i = 0; i < listItems.length; i++) {\n if (!isNullOrUndefined(value) && listItems[i].getAttribute('data-value') === value.toString()) {\n index = i;\n break;\n }\n }\n return index;\n };\n ;\n /**\n * To dispatch the event manually\n */\n DropDownBase.prototype.dispatchEvent = function (element, type) {\n var evt = document.createEvent('HTMLEvents');\n evt.initEvent(type, false, true);\n element.dispatchEvent(evt);\n };\n /**\n * To set the current fields\n */\n DropDownBase.prototype.setFields = function () {\n var fields = this.fields;\n if (this.fields.value && !this.fields.text) {\n this.fields.text = this.fields.value;\n }\n else if (!fields.value && fields.text) {\n this.fields.value = this.fields.text;\n }\n else if (!this.fields.value && !this.fields.text) {\n this.fields.value = this.fields.text = 'text';\n }\n };\n /**\n * reset the items list.\n */\n DropDownBase.prototype.resetList = function (dataSource, fields, query) {\n if (this.list) {\n this.setListData(dataSource, fields, query);\n }\n };\n DropDownBase.prototype.updateSelection = function () {\n // This is for after added the item, need to update the selected index values.\n };\n DropDownBase.prototype.renderList = function () {\n // This is for render the list items.\n this.render();\n };\n DropDownBase.prototype.updateDataSource = function (prop) {\n this.resetList(this.dataSource);\n };\n DropDownBase.prototype.setUpdateInitial = function (props, newProp) {\n if (!isNullOrUndefined(newProp.fields)) {\n this.setFields();\n }\n for (var j = 0; props.length > j; j++) {\n if (newProp[props[j]]) {\n this.updateDataSource(props[j]);\n }\n }\n };\n /**\n * When property value changes happened, then onPropertyChanged method will execute the respective changes in this component.\n * @private\n */\n DropDownBase.prototype.onPropertyChanged = function (newProp, oldProp) {\n this.setUpdateInitial(['query', 'sortOrder', 'dataSource', 'itemTemplate'], newProp);\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'query':\n case 'sortOrder':\n case 'dataSource':\n case 'itemTemplate':\n break;\n case 'enableRtl':\n this.setEnableRtl();\n break;\n case 'enabled':\n this.setEnabled();\n break;\n case 'groupTemplate':\n this.renderGroupTemplate(this.list);\n if (this.ulElement && this.fixedHeaderElement) {\n var firstLi = this.ulElement.querySelector('.' + dropDownBaseClasses.group);\n this.fixedHeaderElement.innerHTML = firstLi.innerHTML;\n }\n break;\n case 'locale':\n if (this.list && (!isNullOrUndefined(this.liCollections) && this.liCollections.length === 0)) {\n this.l10nUpdate();\n }\n break;\n case 'zIndex':\n this.setProperties({ zIndex: newProp.zIndex }, true);\n this.setZIndex();\n break;\n }\n }\n };\n ;\n /**\n * Build and render the component\n * @private\n */\n DropDownBase.prototype.render = function (isEmptyData) {\n this.list = createElement('div', { className: dropDownBaseClasses.content, attrs: { 'tabindex': '0' } });\n this.list.classList.add(dropDownBaseClasses.root);\n this.setFields();\n var rippleModel = { duration: 300, selector: '.' + dropDownBaseClasses.li };\n this.rippleFun = rippleEffect(this.list, rippleModel);\n var group = this.element.querySelector('select>optgroup');\n if (this.fields.groupBy || !isNullOrUndefined(group)) {\n EventHandler.add(this.list, 'scroll', this.setFloatingHeader, this);\n }\n if (this.getModuleName() === 'dropdownbase') {\n if (this.element.getAttribute('tabindex')) {\n this.list.setAttribute('tabindex', this.element.getAttribute('tabindex'));\n }\n removeClass([this.element], dropDownBaseClasses.root);\n this.element.style.display = 'none';\n var wrapperElement = document.createElement('div');\n this.element.parentElement.insertBefore(wrapperElement, this.element);\n wrapperElement.appendChild(this.element);\n wrapperElement.appendChild(this.list);\n }\n this.setEnableRtl();\n this.setEnabled();\n if (!isEmptyData) {\n this.initialize();\n }\n };\n ;\n /**\n * Return the module name of this component.\n * @private\n */\n DropDownBase.prototype.getModuleName = function () {\n return 'dropdownbase';\n };\n ;\n /**\n * Gets all the list items bound on this component.\n * @returns Element[].\n */\n DropDownBase.prototype.getItems = function () {\n return this.ulElement.querySelectorAll('.' + dropDownBaseClasses.li);\n };\n ;\n /**\n * Adds a new item to the popup list. By default, new item appends to the list as the last item,\n * but you can insert based on the index parameter.\n * @param { Object[] } items - Specifies an array of JSON data or a JSON data.\n * @param { number } itemIndex - Specifies the index to place the newly added item in the popup list.\n * @return {void}.\n */\n DropDownBase.prototype.addItem = function (items, itemIndex) {\n if (!this.list || this.list.textContent === this.noRecordsTemplate) {\n this.renderList();\n }\n var itemsCount = this.getItems().length;\n var selectedItemValue = this.list.querySelector('.' + dropDownBaseClasses.selected);\n items = (items instanceof Array ? items : [items]);\n var index;\n index = (isNullOrUndefined(itemIndex) || itemIndex < 0 || itemIndex > itemsCount - 1) ? itemsCount : itemIndex;\n var fields = this.fields;\n var liCollections = [];\n for (var i = 0; i < items.length; i++) {\n var item = items[i];\n var li = createElement('li', { className: dropDownBaseClasses.li, id: 'option-add-' + i });\n li.setAttribute('data-value', getValue(fields.value, item));\n li.setAttribute('role', 'option');\n li.appendChild(document.createTextNode(getValue(fields.text, item)));\n liCollections.push(li);\n this.listData.push(item);\n this.updateActionCompleteData(li, item);\n }\n if (itemsCount === 0 && isNullOrUndefined(this.list.querySelector('ul'))) {\n this.list.innerHTML = '';\n this.list.appendChild(this.ulElement);\n append(liCollections, this.ulElement);\n }\n else {\n for (var i = 0; i < items.length; i++) {\n if (this.liCollections[index]) {\n this.liCollections[index].parentNode.insertBefore(liCollections[i], this.liCollections[index]);\n }\n else {\n this.ulElement.appendChild(liCollections[i]);\n }\n var tempLi = [].slice.call(this.liCollections);\n tempLi.splice(index, 0, liCollections[i]);\n this.liCollections = tempLi;\n index += 1;\n }\n }\n if (selectedItemValue || itemIndex === 0) {\n this.updateSelection();\n }\n };\n DropDownBase.prototype.validationAttribute = function (target, hidden) {\n var name = target.getAttribute('name') ? target.getAttribute('name') : target.getAttribute('id');\n hidden.setAttribute('name', name);\n target.removeAttribute('name');\n var attributes = ['required', 'aria-required', 'form'];\n for (var i = 0; i < attributes.length; i++) {\n if (!target.getAttribute(attributes[i])) {\n continue;\n }\n var attr = target.getAttribute(attributes[i]);\n hidden.setAttribute(attributes[i], attr);\n target.removeAttribute(attributes[i]);\n }\n };\n DropDownBase.prototype.setZIndex = function () {\n // this is for component wise\n };\n DropDownBase.prototype.updateActionCompleteData = function (li, item) {\n // this is for ComboBox custom value\n };\n /**\n * Gets the data Object that matches the given value.\n * @param { string | number } value - Specifies the value of the list item.\n * @returns Object.\n */\n DropDownBase.prototype.getDataByValue = function (value) {\n if (!isNullOrUndefined(this.listData)) {\n var type = this.typeOfData(this.listData).typeof;\n if (type === 'string' || type === 'number' || type === 'boolean') {\n for (var _i = 0, _a = this.listData; _i < _a.length; _i++) {\n var item = _a[_i];\n if (!isNullOrUndefined(item) && item === value) {\n return item;\n }\n }\n }\n else {\n for (var _b = 0, _c = this.listData; _b < _c.length; _b++) {\n var item = _c[_b];\n if (!isNullOrUndefined(item) && getValue((this.fields.value ? this.fields.value : 'value'), item) === value) {\n return item;\n }\n }\n }\n }\n return null;\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers. It also removes the attributes and classes.\n * @method destroy\n * @return {void}.\n */\n DropDownBase.prototype.destroy = function () {\n if (document.body.contains(this.list)) {\n EventHandler.remove(this.list, 'scroll', this.setFloatingHeader);\n if (!isNullOrUndefined(this.rippleFun)) {\n this.rippleFun();\n }\n detach(this.list);\n }\n _super.prototype.destroy.call(this);\n };\n ;\n __decorate([\n Complex({ text: null, value: null, iconCss: null, groupBy: null }, FieldSettings)\n ], DropDownBase.prototype, \"fields\", void 0);\n __decorate([\n Property(false)\n ], DropDownBase.prototype, \"enableRtl\", void 0);\n __decorate([\n Property(false)\n ], DropDownBase.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(null)\n ], DropDownBase.prototype, \"itemTemplate\", void 0);\n __decorate([\n Property(null)\n ], DropDownBase.prototype, \"groupTemplate\", void 0);\n __decorate([\n Property('No Records Found')\n ], DropDownBase.prototype, \"noRecordsTemplate\", void 0);\n __decorate([\n Property('The Request Failed')\n ], DropDownBase.prototype, \"actionFailureTemplate\", void 0);\n __decorate([\n Property('None')\n ], DropDownBase.prototype, \"sortOrder\", void 0);\n __decorate([\n Property(true)\n ], DropDownBase.prototype, \"enabled\", void 0);\n __decorate([\n Property([])\n ], DropDownBase.prototype, \"dataSource\", void 0);\n __decorate([\n Property(null)\n ], DropDownBase.prototype, \"query\", void 0);\n __decorate([\n Property(1000)\n ], DropDownBase.prototype, \"zIndex\", void 0);\n __decorate([\n Property(false)\n ], DropDownBase.prototype, \"ignoreAccent\", void 0);\n __decorate([\n Event()\n ], DropDownBase.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], DropDownBase.prototype, \"actionComplete\", void 0);\n __decorate([\n Event()\n ], DropDownBase.prototype, \"actionFailure\", void 0);\n __decorate([\n Event()\n ], DropDownBase.prototype, \"select\", void 0);\n __decorate([\n Event()\n ], DropDownBase.prototype, \"dataBound\", void 0);\n __decorate([\n Event()\n ], DropDownBase.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], DropDownBase.prototype, \"destroyed\", void 0);\n DropDownBase = __decorate([\n NotifyPropertyChanges\n ], DropDownBase);\n return DropDownBase;\n}(Component));\nexport { DropDownBase };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/// \nimport { EventHandler, Property, Event, compile, KeyboardEvents, createElement, append } from '@syncfusion/ej2-base';\nimport { attributes, isNullOrUndefined, getUniqueID, formatUnit, isUndefined, getValue } from '@syncfusion/ej2-base';\nimport { Animation, Browser, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, setStyleAttribute, closest, prepend, detach, classList } from '@syncfusion/ej2-base';\nimport { Popup, isCollide, createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { incrementalSearch } from '../common/incremental-search';\nimport { DropDownBase, dropDownBaseClasses } from '../drop-down-base/drop-down-base';\n/* tslint:disable */\nimport { DataManager, Query } from '@syncfusion/ej2-data';\n// don't use space in classnames \nexport var dropDownListClasses = {\n root: 'e-dropdownlist',\n hover: dropDownBaseClasses.hover,\n selected: dropDownBaseClasses.selected,\n rtl: dropDownBaseClasses.rtl,\n li: dropDownBaseClasses.li,\n disable: dropDownBaseClasses.disabled,\n base: dropDownBaseClasses.root,\n focus: dropDownBaseClasses.focus,\n input: 'e-input-group',\n inputFocus: 'e-input-focus',\n icon: 'e-input-group-icon e-ddl-icon',\n iconAnimation: 'e-icon-anim',\n value: 'e-input-value',\n device: 'e-ddl-device',\n backIcon: 'e-input-group-icon e-back-icon e-icons',\n filterBarClearIcon: 'e-input-group-icon e-clear-icon e-icons',\n filterInput: 'e-input-filter',\n filterParent: 'e-filter-parent',\n mobileFilter: 'e-ddl-device-filter',\n footer: 'e-ddl-footer',\n header: 'e-ddl-header',\n clearIcon: 'e-clear-icon',\n clearIconHide: 'e-clear-icon-hide',\n popupFullScreen: 'e-popup-full-page',\n disableIcon: 'e-ddl-disable-icon',\n hiddenElement: 'e-ddl-hidden'\n};\nvar inputObject = {\n container: null,\n buttons: []\n};\n/**\n * The DropDownList component contains a list of predefined values from which you can\n * choose a single value.\n * ```html\n * \n * ```\n * ```typescript\n * let dropDownListObj:DropDownList = new DropDownList();\n * dropDownListObj.appendTo(\"#list\");\n * ```\n */\nvar DropDownList = /** @class */ (function (_super) {\n __extends(DropDownList, _super);\n /**\n * * Constructor for creating the DropDownList component.\n */\n function DropDownList(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.previousValue = null;\n return _this;\n }\n ;\n /**\n * Initialize the event handler.\n * @private\n */\n DropDownList.prototype.preRender = function () {\n this.element.style.opacity = '0';\n this.initializeData();\n _super.prototype.preRender.call(this);\n this.activeIndex = this.index;\n this.queryString = '';\n };\n DropDownList.prototype.initializeData = function () {\n this.isPopupOpen = false;\n this.isDocumentClick = false;\n this.isInteracted = false;\n this.isFilterFocus = false;\n this.beforePopupOpen = false;\n this.initial = true;\n this.initRemoteRender = false;\n this.isNotSearchList = false;\n this.isTyped = false;\n this.isSelected = false;\n this.preventFocus = false;\n this.preventAutoFill = false;\n this.isValidKey = false;\n this.typedString = '';\n this.isEscapeKey = false;\n this.isPreventBlur = false;\n this.isTabKey = false;\n this.actionCompleteData = { isUpdated: false };\n this.prevSelectPoints = {};\n this.isSelectCustom = false;\n this.isDropDownClick = false;\n this.preventAltUp = false;\n this.isCustomFilter = false;\n this.isSecondClick = false;\n this.keyConfigure = {\n tab: 'tab',\n enter: '13',\n escape: '27',\n end: '35',\n home: '36',\n down: '40',\n up: '38',\n pageUp: '33',\n pageDown: '34',\n open: 'alt+40',\n close: 'shift+tab',\n hide: 'alt+38',\n space: '32'\n };\n };\n DropDownList.prototype.setZIndex = function () {\n if (this.popupObj) {\n this.popupObj.setProperties({ 'zIndex': this.zIndex });\n }\n };\n DropDownList.prototype.renderList = function (isEmptyData) {\n _super.prototype.render.call(this, isEmptyData);\n this.wireListEvents();\n };\n DropDownList.prototype.floatLabelChange = function () {\n if (this.getModuleName() === 'dropdownlist' && this.floatLabelType === 'Auto') {\n var floatElement = this.inputWrapper.container.querySelector('.e-float-text');\n if (this.inputElement.value !== '' || this.isInteracted) {\n classList(floatElement, ['e-label-top'], ['e-label-bottom']);\n }\n else {\n classList(floatElement, ['e-label-bottom'], ['e-label-top']);\n }\n }\n };\n DropDownList.prototype.resetHandler = function (e) {\n e.preventDefault();\n this.clear(e);\n this.onChangeEvent(e);\n };\n DropDownList.prototype.resetFocusElement = function () {\n this.removeHover();\n this.removeSelection();\n this.removeFocus();\n this.list.scrollTop = 0;\n if (this.getModuleName() !== 'autocomplete') {\n var li = this.ulElement.querySelector('.' + dropDownListClasses.li);\n if (li) {\n li.classList.add(dropDownListClasses.focus);\n }\n }\n };\n DropDownList.prototype.clear = function (e, property) {\n if (property !== 'dataSource') {\n this.resetSelection();\n }\n var dataItem = this.getItemData();\n if (this.previousValue === dataItem.value) {\n return;\n }\n if (!isNullOrUndefined(this.selectedLI) && (!isNullOrUndefined(this.activeIndex) && this.activeIndex >= 0)) {\n this.onChangeEvent(e);\n }\n };\n DropDownList.prototype.resetSelection = function () {\n if (this.list) {\n if (this.allowFiltering && this.getModuleName() !== 'autocomplete'\n && !isNullOrUndefined(this.actionCompleteData.ulElement) && !isNullOrUndefined(this.actionCompleteData.list)) {\n this.onActionComplete(this.actionCompleteData.ulElement.cloneNode(true), this.actionCompleteData.list);\n }\n this.resetFocusElement();\n }\n this.hiddenElement.innerHTML = '';\n this.inputElement.value = '';\n this.value = null;\n this.itemData = null;\n this.text = null;\n this.index = null;\n this.activeIndex = null;\n this.item = null;\n this.queryString = '';\n if (this.valueTempElement) {\n detach(this.valueTempElement);\n this.inputElement.style.display = 'block';\n this.valueTempElement = null;\n }\n this.setSelection(null, null);\n this.isSelectCustom = false;\n this.updateIconState();\n };\n DropDownList.prototype.setHTMLAttributes = function () {\n if (Object.keys(this.htmlAttributes).length) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var htmlAttr = _a[_i];\n if (htmlAttr === 'class') {\n this.inputWrapper.container.classList.add(this.htmlAttributes[htmlAttr]);\n }\n else if (htmlAttr === 'disabled' && this.htmlAttributes[htmlAttr] === 'disabled') {\n this.enabled = false;\n this.setEnable();\n }\n else if (htmlAttr === 'readonly' && this.htmlAttributes[htmlAttr] === 'readonly') {\n this.readonly = true;\n this.dataBind();\n }\n else if (htmlAttr === 'style') {\n this.inputWrapper.container.setAttribute('style', this.htmlAttributes[htmlAttr]);\n }\n else {\n var defaultAttr = ['title', 'id', 'placeholder'];\n var validateAttr = ['name', 'required'];\n if (validateAttr.indexOf(htmlAttr) > -1) {\n this.hiddenElement.setAttribute(htmlAttr, this.htmlAttributes[htmlAttr]);\n }\n else if (defaultAttr.indexOf(htmlAttr) > -1) {\n htmlAttr === 'placeholder' ? Input.setPlaceholder(this.htmlAttributes[htmlAttr], this.inputElement) :\n this.element.setAttribute(htmlAttr, this.htmlAttributes[htmlAttr]);\n }\n else {\n this.inputWrapper.container.setAttribute(htmlAttr, this.htmlAttributes[htmlAttr]);\n }\n }\n }\n }\n };\n DropDownList.prototype.getAriaAttributes = function () {\n return {\n 'aria-disabled': 'false',\n 'aria-owns': this.element.id + '_options',\n 'role': 'listbox',\n 'aria-haspopup': 'true',\n 'aria-expanded': 'false',\n 'aria-activedescendant': 'null',\n 'aria-labelledby': this.hiddenElement.id\n };\n };\n DropDownList.prototype.setEnableRtl = function () {\n Input.setEnableRtl(this.enableRtl, [this.inputElement.parentElement]);\n if (this.popupObj) {\n this.popupObj.enableRtl = this.enableRtl;\n this.popupObj.dataBind();\n }\n };\n DropDownList.prototype.setEnable = function () {\n Input.setEnabled(this.enabled, this.inputElement);\n if (this.enabled) {\n removeClass([this.inputWrapper.container], dropDownListClasses.disable);\n this.inputElement.setAttribute('aria-disabled', 'false');\n this.targetElement().setAttribute('tabindex', this.tabIndex);\n }\n else {\n this.hidePopup();\n addClass([this.inputWrapper.container], dropDownListClasses.disable);\n this.inputElement.setAttribute('aria-disabled', 'true');\n this.targetElement().tabIndex = -1;\n }\n };\n /**\n * Get the properties to be maintained in the persisted state.\n */\n DropDownList.prototype.getPersistData = function () {\n return this.addOnPersist(['value']);\n };\n ;\n DropDownList.prototype.preventTabIndex = function (element) {\n if (this.getModuleName() === 'dropdownlist') {\n element.tabIndex = -1;\n }\n };\n DropDownList.prototype.targetElement = function () {\n return this.inputWrapper.container;\n };\n DropDownList.prototype.getNgDirective = function () {\n return 'EJS-DROPDOWNLIST';\n };\n DropDownList.prototype.getElementByText = function (text) {\n return this.getElementByValue(this.getValueByText(text));\n };\n DropDownList.prototype.getElementByValue = function (value) {\n var item;\n var listItems = this.getItems();\n for (var _i = 0, listItems_1 = listItems; _i < listItems_1.length; _i++) {\n var liItem = listItems_1[_i];\n if (this.getFormattedValue(liItem.getAttribute('data-value')) === value) {\n item = liItem;\n break;\n }\n }\n return item;\n };\n ;\n DropDownList.prototype.initValue = function () {\n this.renderList();\n if (this.dataSource instanceof DataManager) {\n this.initRemoteRender = true;\n }\n else {\n this.updateValues();\n }\n };\n DropDownList.prototype.updateValues = function () {\n if (!isNullOrUndefined(this.value)) {\n this.setSelection(this.getElementByValue(this.value), null);\n }\n else if (this.text && isNullOrUndefined(this.value)) {\n var element = this.getElementByText(this.text);\n if (isNullOrUndefined(element)) {\n this.setProperties({ text: null });\n return;\n }\n else {\n this.setSelection(element, null);\n }\n }\n else {\n this.setSelection(this.liCollections[this.activeIndex], null);\n }\n this.setHiddenValue();\n Input.setValue(this.text, this.inputElement, this.floatLabelType, this.showClearButton);\n };\n DropDownList.prototype.onBlur = function (e) {\n if (!this.enabled) {\n return;\n }\n var target = e.relatedTarget;\n var currentTarget = e.target;\n var isPreventBlur = this.isPreventBlur;\n this.isPreventBlur = false;\n //IE 11 - issue\n if (isPreventBlur && !this.isDocumentClick && this.isPopupOpen && (!isNullOrUndefined(currentTarget) ||\n !this.isFilterLayout() && isNullOrUndefined(target))) {\n if (this.getModuleName() === 'dropdownlist' && this.allowFiltering && this.isPopupOpen) {\n this.filterInput.focus();\n }\n else {\n this.targetElement().focus();\n }\n return;\n }\n if (this.isDocumentClick || (!isNullOrUndefined(this.popupObj)\n && document.body.contains(this.popupObj.element) &&\n this.popupObj.element.classList.contains(dropDownListClasses.mobileFilter))) {\n if (!this.beforePopupOpen) {\n this.isDocumentClick = false;\n }\n return;\n }\n if (((this.getModuleName() === 'dropdownlist' && !this.isFilterFocus && target !== this.inputElement)\n && (document.activeElement !== target || (document.activeElement === target &&\n currentTarget.classList.contains(dropDownListClasses.inputFocus)))) ||\n (isNullOrUndefined(target) && this.getModuleName() === 'dropdownlist' && this.allowFiltering &&\n currentTarget !== this.inputWrapper.container) || this.getModuleName() !== 'dropdownlist' &&\n !this.inputWrapper.container.contains(target) || this.isTabKey) {\n this.isDocumentClick = this.isPopupOpen ? true : false;\n this.focusOutAction();\n this.isTabKey = false;\n }\n if (this.isRequested && !this.isPopupOpen && !this.isPreventBlur) {\n this.isActive = false;\n this.beforePopupOpen = false;\n }\n };\n DropDownList.prototype.focusOutAction = function () {\n this.isInteracted = false;\n this.focusOut();\n this.onFocusOut();\n };\n DropDownList.prototype.onFocusOut = function () {\n if (!this.enabled) {\n return;\n }\n if (this.isSelected) {\n this.isSelectCustom = false;\n this.onChangeEvent(null);\n }\n this.floatLabelChange();\n this.dispatchEvent(this.hiddenElement, 'change');\n if (this.getModuleName() === 'dropdownlist' && this.element.tagName !== 'INPUT') {\n this.dispatchEvent(this.inputElement, 'blur');\n }\n if (this.inputWrapper.clearButton) {\n addClass([this.inputWrapper.clearButton], dropDownListClasses.clearIconHide);\n }\n this.trigger('blur');\n };\n DropDownList.prototype.onFocus = function () {\n if (!this.isInteracted) {\n this.isInteracted = true;\n this.trigger('focus');\n }\n this.updateIconState();\n };\n DropDownList.prototype.resetValueHandler = function () {\n this.value = null;\n };\n DropDownList.prototype.wireEvent = function () {\n EventHandler.add(this.inputWrapper.container, 'mousedown', this.dropDownClick, this);\n EventHandler.add(this.inputWrapper.container, 'focus', this.focusIn, this);\n EventHandler.add(this.inputWrapper.container, 'keypress', this.onSearch, this);\n var formElement = closest(this.inputElement, 'form');\n if (formElement) {\n EventHandler.add(formElement, 'reset', this.resetValueHandler, this);\n }\n this.bindCommonEvent();\n };\n DropDownList.prototype.bindCommonEvent = function () {\n EventHandler.add(this.targetElement(), 'blur', this.onBlur, this);\n if (!Browser.isDevice) {\n this.keyboardModule = new KeyboardEvents(this.targetElement(), {\n keyAction: this.keyActionHandler.bind(this), keyConfigs: this.keyConfigure, eventName: 'keydown'\n });\n }\n this.bindClearEvent();\n };\n DropDownList.prototype.bindClearEvent = function () {\n if (this.showClearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown', this.resetHandler, this);\n }\n };\n DropDownList.prototype.unBindCommonEvent = function () {\n EventHandler.remove(this.targetElement(), 'blur', this.onBlur);\n if (!Browser.isDevice) {\n this.keyboardModule.destroy();\n }\n if (this.showClearButton) {\n EventHandler.remove(this.inputWrapper.clearButton, 'mousedown', this.resetHandler);\n }\n };\n DropDownList.prototype.updateIconState = function () {\n if (this.showClearButton) {\n if (this.inputElement.value !== '') {\n removeClass([this.inputWrapper.clearButton], dropDownListClasses.clearIconHide);\n }\n else {\n addClass([this.inputWrapper.clearButton], dropDownListClasses.clearIconHide);\n }\n }\n };\n /**\n * Event binding for list\n */\n DropDownList.prototype.wireListEvents = function () {\n EventHandler.add(this.list, 'click', this.onMouseClick, this);\n EventHandler.add(this.list, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.list, 'mouseout', this.onMouseLeave, this);\n };\n ;\n DropDownList.prototype.onSearch = function (e) {\n if (e.charCode !== 32 && e.charCode !== 13) {\n if (this.list === undefined) {\n this.renderList();\n }\n this.searchKeyEvent = e;\n if (!this.isRequested && !isNullOrUndefined(this.list.querySelector('li'))) {\n this.incrementalSearch(e);\n }\n }\n };\n DropDownList.prototype.onMouseClick = function (e) {\n var target = e.target;\n var classList = target.classList;\n var li = closest(target, '.' + dropDownBaseClasses.li);\n if (!this.isValidLI(li)) {\n return;\n }\n this.setSelection(li, e);\n if (Browser.isDevice && this.isFilterLayout()) {\n history.back();\n }\n else {\n var delay = 100;\n this.closePopup(delay);\n }\n };\n DropDownList.prototype.onMouseOver = function (e) {\n var currentLi = closest(e.target, '.' + dropDownBaseClasses.li);\n this.setHover(currentLi);\n };\n ;\n DropDownList.prototype.setHover = function (li) {\n if (this.enabled && this.isValidLI(li) && !li.classList.contains(dropDownBaseClasses.hover)) {\n this.removeHover();\n addClass([li], dropDownBaseClasses.hover);\n }\n };\n ;\n DropDownList.prototype.onMouseLeave = function (e) {\n this.removeHover();\n };\n ;\n DropDownList.prototype.removeHover = function () {\n var hoveredItem = this.list.querySelectorAll('.' + dropDownBaseClasses.hover);\n if (hoveredItem && hoveredItem.length) {\n removeClass(hoveredItem, dropDownBaseClasses.hover);\n }\n };\n ;\n DropDownList.prototype.isValidLI = function (li) {\n return (li && li.hasAttribute('role') && li.getAttribute('role') === 'option');\n };\n ;\n DropDownList.prototype.incrementalSearch = function (e) {\n if (this.liCollections.length > 0) {\n var li = incrementalSearch(e.charCode, this.liCollections, this.activeIndex, true);\n if (!isNullOrUndefined(li)) {\n this.setSelection(li, e);\n this.setScrollPosition();\n }\n }\n };\n ;\n DropDownList.prototype.hideSpinner = function () {\n if (!isNullOrUndefined(this.spinnerElement)) {\n hideSpinner(this.spinnerElement);\n removeClass([this.spinnerElement], dropDownListClasses.disableIcon);\n this.spinnerElement.innerHTML = '';\n this.spinnerElement = null;\n }\n };\n DropDownList.prototype.showSpinner = function () {\n if (isNullOrUndefined(this.spinnerElement)) {\n this.spinnerElement = Browser.isDevice && !isNullOrUndefined(this.filterInputObj) && this.filterInputObj.buttons[1] ||\n !isNullOrUndefined(this.filterInputObj) && this.filterInputObj.buttons[0] || this.inputWrapper.buttons[0];\n addClass([this.spinnerElement], dropDownListClasses.disableIcon);\n createSpinner({\n target: this.spinnerElement,\n width: Browser.isDevice ? '16px' : '14px'\n });\n showSpinner(this.spinnerElement);\n }\n };\n DropDownList.prototype.keyActionHandler = function (e) {\n var preventAction = e.action === 'pageUp' || e.action === 'pageDown';\n var preventHomeEnd = this.getModuleName() !== 'dropdownlist' && (e.action === 'home' || e.action === 'end');\n this.isEscapeKey = e.action === 'escape';\n this.isTabKey = !this.isPopupOpen && e.action === 'tab';\n var isNavigation = (e.action === 'down' || e.action === 'up' || e.action === 'pageUp' || e.action === 'pageDown'\n || e.action === 'home' || e.action === 'end');\n if ((this.isEditTextBox() || preventAction || preventHomeEnd) && !this.isPopupOpen) {\n return;\n }\n if (!this.readonly) {\n var isTabAction = e.action === 'tab' || e.action === 'close';\n if (this.list === undefined && !this.isRequested && !isTabAction && e.action !== 'escape') {\n this.searchKeyEvent = e;\n this.renderList();\n }\n if (isNullOrUndefined(this.list) || (!isNullOrUndefined(this.liCollections) &&\n isNavigation && this.liCollections.length === 0) || this.isRequested) {\n return;\n }\n if (isTabAction && this.isPopupOpen || e.action === 'escape') {\n e.preventDefault();\n }\n this.isSelected = e.action === 'escape' ? false : this.isSelected;\n this.isTyped = (isNavigation || e.action === 'escape') ? false : this.isTyped;\n switch (e.action) {\n case 'down':\n case 'up':\n var focusEle = this.list.querySelector('.' + dropDownListClasses.focus);\n if (this.isSelectFocusItem(focusEle)) {\n this.setSelection(focusEle, e);\n }\n else {\n var nextItem = void 0;\n var index = e.action === 'down' ? this.activeIndex + 1 : this.activeIndex - 1;\n var startIndex = 0;\n if (this.getModuleName() === 'autocomplete') {\n startIndex = e.action === 'down' && isNullOrUndefined(this.activeIndex) ? 0 : this.liCollections.length - 1;\n index = index < 0 ? this.liCollections.length - 1 : index === this.liCollections.length ? 0 : index;\n }\n nextItem = isNullOrUndefined(this.activeIndex) ? this.liCollections[startIndex] : this.liCollections[index];\n this.setSelection(nextItem, e);\n }\n e.preventDefault();\n break;\n case 'pageUp':\n this.pageUpSelection(this.activeIndex - this.getPageCount(), e);\n e.preventDefault();\n break;\n case 'pageDown':\n this.pageDownSelection(this.activeIndex + this.getPageCount(), e);\n e.preventDefault();\n break;\n case 'home':\n if (this.getModuleName() === 'dropdownlist') {\n e.preventDefault();\n if (this.activeIndex === 0) {\n return;\n }\n this.setSelection(this.liCollections[0], e);\n }\n break;\n case 'end':\n if (this.getModuleName() === 'dropdownlist') {\n e.preventDefault();\n var lastLi = this.getItems().length - 1;\n if (this.activeIndex === lastLi) {\n return;\n }\n this.setSelection(this.liCollections[lastLi], e);\n }\n break;\n case 'space':\n if (this.getModuleName() === 'dropdownlist') {\n if (!this.beforePopupOpen) {\n this.showPopup();\n }\n }\n break;\n case 'open':\n this.showPopup();\n break;\n case 'hide':\n this.preventAltUp = this.isPopupOpen;\n this.hidePopup();\n this.focusDropDown(e);\n break;\n case 'enter':\n this.selectCurrentItem(e);\n break;\n case 'escape':\n case 'tab':\n case 'close':\n if (this.isPopupOpen) {\n this.hidePopup();\n this.focusDropDown(e);\n }\n break;\n }\n }\n };\n DropDownList.prototype.selectCurrentItem = function (e) {\n if (this.isPopupOpen) {\n var li = this.list.querySelector('.' + dropDownListClasses.focus);\n if (li) {\n this.setSelection(li, e);\n this.isTyped = false;\n }\n if (this.isSelected) {\n this.isSelectCustom = false;\n this.onChangeEvent(e);\n }\n this.hidePopup();\n this.focusDropDown(e);\n }\n else {\n this.showPopup();\n }\n };\n DropDownList.prototype.isSelectFocusItem = function (element) {\n return !isNullOrUndefined(element);\n };\n DropDownList.prototype.getPageCount = function () {\n var liHeight = this.list.classList.contains(dropDownBaseClasses.noData) ? null :\n getComputedStyle(this.getItems()[0], null).getPropertyValue('height');\n return Math.round(this.list.getBoundingClientRect().height / parseInt(liHeight, 10));\n };\n DropDownList.prototype.pageUpSelection = function (steps, event) {\n var previousItem = steps >= 0 ? this.liCollections[steps + 1] : this.liCollections[0];\n this.setSelection(previousItem, event);\n };\n ;\n DropDownList.prototype.pageDownSelection = function (steps, event) {\n var list = this.getItems();\n var previousItem = steps <= list.length ? this.liCollections[steps - 1] : this.liCollections[list.length - 1];\n this.setSelection(previousItem, event);\n };\n ;\n DropDownList.prototype.unWireEvent = function () {\n EventHandler.remove(this.inputWrapper.container, 'mousedown', this.dropDownClick);\n EventHandler.remove(this.inputWrapper.container, 'keypress', this.onSearch);\n EventHandler.remove(this.inputWrapper.container, 'focus', this.focusIn);\n var formElement = closest(this.inputElement, 'form');\n if (formElement) {\n EventHandler.remove(formElement, 'reset', this.resetValueHandler);\n }\n this.unBindCommonEvent();\n };\n /**\n * Event un binding for list items.\n */\n DropDownList.prototype.unWireListEvents = function () {\n EventHandler.remove(this.list, 'click', this.onMouseClick);\n EventHandler.remove(this.list, 'mouseover', this.onMouseOver);\n EventHandler.remove(this.list, 'mouseout', this.onMouseLeave);\n };\n ;\n DropDownList.prototype.onDocumentClick = function (e) {\n var target = e.target;\n if (!(!isNullOrUndefined(this.popupObj) && closest(target, '#' + this.popupObj.element.id)) &&\n !this.inputWrapper.container.contains(e.target)) {\n if (this.inputWrapper.container.classList.contains(dropDownListClasses.inputFocus) || this.isPopupOpen) {\n this.isDocumentClick = true;\n var isActive = this.isRequested;\n this.isInteracted = false;\n this.hidePopup();\n if (!isActive) {\n this.onFocusOut();\n this.inputWrapper.container.classList.remove(dropDownListClasses.inputFocus);\n }\n }\n }\n else if (target !== this.inputElement && !(this.allowFiltering && target === this.filterInput)\n && !(this.getModuleName() === 'combobox' &&\n !this.allowFiltering && Browser.isDevice && target === this.inputWrapper.buttons[0])) {\n this.isPreventBlur = (Browser.isIE || Browser.info.name === 'edge') && (document.activeElement === this.targetElement() ||\n document.activeElement === this.filterInput);\n e.preventDefault();\n }\n };\n DropDownList.prototype.activeStateChange = function () {\n if (this.isDocumentClick) {\n this.hidePopup();\n this.onFocusOut();\n this.inputWrapper.container.classList.remove(dropDownListClasses.inputFocus);\n }\n };\n DropDownList.prototype.focusDropDown = function (e) {\n if (!this.initial && this.isFilterLayout()) {\n this.focusIn();\n }\n };\n DropDownList.prototype.dropDownClick = function (e) {\n if (e.which === 3 || e.button === 2) {\n return;\n }\n if (this.targetElement().classList.contains(dropDownListClasses.disable) || this.inputWrapper.clearButton === e.target) {\n return;\n }\n var target = e.target;\n if (target !== this.inputElement && !(this.allowFiltering && target === this.filterInput) && this.getModuleName() !== 'combobox') {\n e.preventDefault();\n }\n if (!this.readonly) {\n if (this.isPopupOpen) {\n this.hidePopup();\n if (this.isFilterLayout()) {\n this.focusDropDown(e);\n }\n }\n else {\n this.focusIn();\n this.floatLabelChange();\n this.queryString = this.inputElement.value.trim() === '' ? null : this.inputElement.value;\n this.isDropDownClick = true;\n this.showPopup();\n }\n var proxy_1 = this;\n if (!this.isSecondClick) {\n setTimeout(function () { proxy_1.cloneElements(); }, 100);\n }\n }\n else {\n this.focusIn();\n }\n };\n DropDownList.prototype.cloneElements = function () {\n if (this.list) {\n var ulElement = this.list.querySelector('ul');\n if (ulElement) {\n ulElement = ulElement.cloneNode ? ulElement.cloneNode(true) : ulElement;\n this.actionCompleteData.ulElement = ulElement;\n this.isSecondClick = true;\n }\n }\n };\n DropDownList.prototype.updateSelectedItem = function (li, e, preventSelect) {\n this.removeSelection();\n li.classList.add(dropDownBaseClasses.selected);\n this.removeHover();\n var value = this.getFormattedValue(li.getAttribute('data-value'));\n this.item = li;\n this.itemData = this.getDataByValue(value);\n if (!this.initial && !preventSelect) {\n var items = this.detachChanges();\n this.isSelected = true;\n var eventArgs = {\n e: e,\n item: this.item,\n itemData: items,\n isInteracted: e ? true : false,\n cancel: false\n };\n this.trigger('select', eventArgs);\n if (eventArgs.cancel) {\n return true;\n }\n }\n var focusedItem = this.list.querySelector('.' + dropDownBaseClasses.focus);\n if (focusedItem) {\n removeClass([focusedItem], dropDownBaseClasses.focus);\n }\n li.setAttribute('aria-selected', 'true');\n this.activeIndex = this.getIndexByValue(value);\n return false;\n };\n DropDownList.prototype.activeItem = function (li) {\n if (this.isValidLI(li) && !li.classList.contains(dropDownBaseClasses.selected)) {\n this.removeSelection();\n li.classList.add(dropDownBaseClasses.selected);\n this.removeHover();\n li.setAttribute('aria-selected', 'true');\n }\n };\n DropDownList.prototype.setValue = function (e) {\n var dataItem = this.getItemData();\n if (dataItem.value === null) {\n Input.setValue(null, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n else {\n Input.setValue(dataItem.text, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n if (this.previousValue === dataItem.value) {\n this.isSelected = false;\n return true;\n }\n else {\n this.isSelected = !this.initial ? true : false;\n this.isSelectCustom = false;\n if (this.getModuleName() === 'dropdownlist') {\n this.updateIconState();\n }\n return false;\n }\n };\n DropDownList.prototype.setSelection = function (li, e) {\n if (this.isValidLI(li) && !li.classList.contains(dropDownBaseClasses.selected)) {\n this.previousItemData = (!isNullOrUndefined(this.itemData)) ? this.itemData : null;\n var argsCancel = this.updateSelectedItem(li, e, false);\n if (argsCancel) {\n return;\n }\n }\n if (this.list) {\n this.removeHover();\n }\n this.previousSelectedLI = (!isNullOrUndefined(this.selectedLI)) ? this.selectedLI : null;\n this.selectedLI = li;\n if (this.setValue(e)) {\n return;\n }\n if (this.valueTemplate && this.itemData !== null) {\n this.setValueTemplate();\n }\n else if (this.inputElement.previousSibling === this.valueTempElement) {\n detach(this.valueTempElement);\n this.inputElement.style.display = 'block';\n }\n if (this.isPopupOpen) {\n attributes(this.targetElement(), { 'aria-activedescendant': this.selectedLI ? this.selectedLI.id : null });\n if (this.isFilterLayout()) {\n attributes(this.filterInput, { 'aria-activedescendant': this.selectedLI ? this.selectedLI.id : null });\n }\n }\n if ((!this.isPopupOpen && !isNullOrUndefined(li)) || (this.isPopupOpen && !isNullOrUndefined(e) &&\n (e.type !== 'keydown' || e.type === 'keydown' && e.action === 'enter'))) {\n this.isSelectCustom = false;\n this.onChangeEvent(e);\n }\n if (this.isPopupOpen && !isNullOrUndefined(this.selectedLI) && this.itemData !== null && (!e || e.type !== 'click')) {\n this.setScrollPosition(e);\n }\n };\n DropDownList.prototype.setValueTemplate = function () {\n var compiledString;\n if (!this.valueTempElement) {\n this.valueTempElement = createElement('span', { className: dropDownListClasses.value });\n this.inputElement.parentElement.insertBefore(this.valueTempElement, this.inputElement);\n this.inputElement.style.display = 'none';\n }\n this.valueTempElement.innerHTML = '';\n compiledString = compile(this.valueTemplate);\n for (var _i = 0, _a = compiledString(this.itemData); _i < _a.length; _i++) {\n var item = _a[_i];\n this.valueTempElement.appendChild(item);\n }\n };\n DropDownList.prototype.removeSelection = function () {\n var selectedItems = this.list.querySelectorAll('.' + dropDownBaseClasses.selected);\n if (selectedItems.length) {\n removeClass(selectedItems, dropDownBaseClasses.selected);\n selectedItems[0].removeAttribute('aria-selected');\n }\n };\n ;\n DropDownList.prototype.getItemData = function () {\n var fields = this.fields;\n var dataItem = null;\n dataItem = this.itemData;\n var dataValue;\n var dataText;\n if (!isNullOrUndefined(dataItem)) {\n dataValue = getValue(fields.value, dataItem);\n dataText = getValue(fields.text, dataItem);\n }\n var value = (!isNullOrUndefined(dataItem) &&\n !isUndefined(dataValue) ? dataValue : dataItem);\n var text = (!isNullOrUndefined(dataItem) &&\n !isUndefined(dataValue) ? dataText : dataItem);\n return { value: value, text: text };\n };\n /**\n * To trigger the change event for list.\n */\n DropDownList.prototype.onChangeEvent = function (eve) {\n var dataItem = this.getItemData();\n var index = this.isSelectCustom ? null : this.activeIndex;\n this.setProperties({ 'value': dataItem.value, 'index': index, 'text': dataItem.text }, true);\n this.detachChangeEvent(eve);\n };\n ;\n DropDownList.prototype.detachChanges = function () {\n var items;\n if (typeof this.itemData === 'string' ||\n typeof this.itemData === 'boolean' ||\n typeof this.itemData === 'number') {\n items = Object.defineProperties({}, {\n value: {\n value: this.itemData,\n enumerable: true\n },\n text: {\n value: this.itemData,\n enumerable: true\n }\n });\n }\n else {\n items = this.itemData;\n }\n return items;\n };\n DropDownList.prototype.detachChangeEvent = function (eve) {\n this.isSelected = false;\n this.previousValue = this.value;\n this.activeIndex = this.index;\n this.typedString = !isNullOrUndefined(this.text) ? this.text : '';\n if (!this.initial) {\n var items = this.detachChanges();\n var preItems = void 0;\n if (typeof this.previousItemData === 'string' ||\n typeof this.previousItemData === 'boolean' ||\n typeof this.previousItemData === 'number') {\n preItems = Object.defineProperties({}, {\n value: {\n value: this.previousItemData,\n enumerable: true\n },\n text: {\n value: this.previousItemData,\n enumerable: true\n }\n });\n }\n else {\n preItems = this.previousItemData;\n }\n this.setHiddenValue();\n var eventArgs = {\n e: eve,\n item: this.item,\n itemData: items,\n previousItem: this.previousSelectedLI,\n previousItemData: preItems,\n isInteracted: eve ? true : false,\n value: this.value,\n element: this.element\n };\n this.trigger('change', eventArgs);\n }\n };\n DropDownList.prototype.setHiddenValue = function () {\n if (!isNullOrUndefined(this.value)) {\n this.hiddenElement.innerHTML = '';\n var selectedElement = this.hiddenElement.querySelector('option');\n selectedElement.setAttribute('value', this.value.toString());\n }\n else {\n this.hiddenElement.innerHTML = '';\n }\n };\n /**\n * Filter bar implementation\n */\n DropDownList.prototype.onFilterUp = function (e) {\n this.isValidKey = e.keyCode === 40 || e.keyCode === 38 || this.isValidKey;\n if (this.isValidKey) {\n this.isValidKey = false;\n switch (e.keyCode) {\n case 38: //up arrow \n case 40://down arrow \n if (this.getModuleName() === 'autocomplete' && !this.isPopupOpen && !this.preventAltUp && !this.isRequested) {\n this.preventAutoFill = true;\n this.searchLists(e);\n }\n else {\n this.preventAutoFill = false;\n }\n this.preventAltUp = false;\n e.preventDefault();\n break;\n case 46: //delete\n case 8://backspace\n this.typedString = this.filterInput.value;\n if (!this.isPopupOpen && this.typedString !== '' || this.isPopupOpen && this.queryString.length > 0) {\n this.preventAutoFill = true;\n this.searchLists(e);\n }\n else if (this.typedString === '') {\n this.resetFocusElement();\n this.activeIndex = null;\n if (this.getModuleName() === 'autocomplete') {\n this.hidePopup();\n }\n }\n e.preventDefault();\n break;\n default:\n this.typedString = this.filterInput.value;\n this.preventAutoFill = false;\n this.searchLists(e);\n break;\n }\n }\n };\n DropDownList.prototype.onFilterDown = function (e) {\n switch (e.keyCode) {\n case 13://enter\n break;\n case 40: //down arrow \n case 38://up arrow \n this.queryString = this.filterInput.value;\n e.preventDefault();\n break;\n case 9://tab \n if (this.isPopupOpen) {\n e.preventDefault();\n }\n break;\n default:\n this.prevSelectPoints = this.getSelectionPoints();\n this.queryString = this.filterInput.value;\n break;\n }\n };\n DropDownList.prototype.removeFillSelection = function () {\n if (this.isInteracted) {\n var selection = this.getSelectionPoints();\n this.inputElement.setSelectionRange(selection.end, selection.end);\n }\n };\n DropDownList.prototype.getSelectionPoints = function () {\n var input = this.inputElement;\n return { start: Math.abs(input.selectionStart), end: Math.abs(input.selectionEnd) };\n };\n DropDownList.prototype.searchLists = function (e) {\n var _this = this;\n this.isTyped = true;\n this.activeIndex = null;\n if (this.filterInput.parentElement.querySelector('.' + dropDownListClasses.clearIcon)) {\n var clearElement = this.filterInput.parentElement.querySelector('.' + dropDownListClasses.clearIcon);\n clearElement.style.visibility = this.filterInput.value === '' ? 'hidden' : 'visible';\n }\n if (this.isFiltering()) {\n var eventArgs_1 = {\n preventDefaultAction: false,\n text: this.filterInput.value,\n updateData: function (dataSource, query, fields) {\n if (eventArgs_1.cancel) {\n return;\n }\n _this.isCustomFilter = true;\n _this.filteringAction(dataSource, query, fields);\n },\n baseEventArgs: e,\n cancel: false\n };\n this.trigger('filtering', eventArgs_1);\n if (eventArgs_1.cancel) {\n return;\n }\n if (!this.isCustomFilter && !eventArgs_1.preventDefaultAction) {\n var filterQuery = this.query ? this.query.clone() : new Query();\n var dataType = this.typeOfData(this.dataSource).typeof;\n if (!(this.dataSource instanceof DataManager) && dataType === 'string' || dataType === 'number') {\n filterQuery.where('', 'startswith', this.filterInput.value, true, this.ignoreAccent);\n }\n else {\n var fields = this.fields;\n filterQuery.where(!isNullOrUndefined(fields.text) ? fields.text : '', 'startswith', this.filterInput.value, true, this.ignoreAccent);\n }\n this.filteringAction(this.dataSource, filterQuery, this.fields);\n }\n }\n };\n DropDownList.prototype.filteringAction = function (dataSource, query, fields) {\n if (!isNullOrUndefined(this.filterInput)) {\n this.beforePopupOpen = true;\n if (this.filterInput.value.trim() === '') {\n this.actionCompleteData.isUpdated = false;\n this.isTyped = false;\n if (!isNullOrUndefined(this.actionCompleteData.ulElement) && !isNullOrUndefined(this.actionCompleteData.list)) {\n this.onActionComplete(this.actionCompleteData.ulElement, this.actionCompleteData.list);\n }\n this.isTyped = true;\n if (!isNullOrUndefined(this.itemData) && this.getModuleName() === 'dropdownlist') {\n this.focusIndexItem();\n this.setScrollPosition();\n }\n this.isNotSearchList = true;\n }\n else {\n this.isNotSearchList = false;\n this.resetList(dataSource, fields, query);\n }\n }\n };\n DropDownList.prototype.setSearchBox = function (popupElement) {\n if (this.isFiltering()) {\n var parentElement = createElement('span', {\n className: dropDownListClasses.filterParent\n });\n this.filterInput = createElement('input', {\n attrs: { type: 'text' },\n className: dropDownListClasses.filterInput\n });\n this.element.parentNode.insertBefore(this.filterInput, this.element);\n var backIcon = false;\n if (Browser.isDevice) {\n backIcon = true;\n }\n this.filterInputObj = Input.createInput({\n element: this.filterInput,\n buttons: backIcon ?\n [dropDownListClasses.backIcon, dropDownListClasses.filterBarClearIcon] : [dropDownListClasses.filterBarClearIcon],\n properties: { placeholder: this.filterBarPlaceholder }\n });\n append([this.filterInputObj.container], parentElement);\n prepend([parentElement], popupElement);\n attributes(this.filterInput, {\n 'aria-disabled': 'false',\n 'aria-owns': this.element.id + '_options',\n 'role': 'listbox',\n 'aria-activedescendant': this.selectedLI ? this.selectedLI.id : null,\n 'autocomplete': 'off',\n 'autocorrect': 'off',\n 'autocapitalize': 'off',\n 'spellcheck': 'false'\n });\n this.clearIconElement = this.filterInput.parentElement.querySelector('.' + dropDownListClasses.clearIcon);\n if (!Browser.isDevice && this.clearIconElement) {\n EventHandler.add(this.clearIconElement, 'click', this.clearText, this);\n this.clearIconElement.style.visibility = 'hidden';\n }\n if (!Browser.isDevice) {\n this.searchKeyModule = new KeyboardEvents(this.filterInput, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigure,\n eventName: 'keydown'\n });\n }\n EventHandler.add(this.filterInput, 'input', this.onInput, this);\n EventHandler.add(this.filterInput, 'keyup', this.onFilterUp, this);\n EventHandler.add(this.filterInput, 'keydown', this.onFilterDown, this);\n EventHandler.add(this.filterInput, 'blur', this.onBlur, this);\n return this.filterInputObj;\n }\n else {\n return inputObject;\n }\n };\n ;\n DropDownList.prototype.onInput = function () {\n this.isValidKey = true;\n };\n DropDownList.prototype.onActionFailure = function (e) {\n _super.prototype.onActionFailure.call(this, e);\n if (this.beforePopupOpen) {\n this.renderPopup();\n }\n };\n DropDownList.prototype.onActionComplete = function (ulElement, list, e, isUpdated) {\n if (this.isNotSearchList) {\n this.isNotSearchList = false;\n return;\n }\n if (this.isActive) {\n var selectedItem = this.selectedLI ? this.selectedLI.cloneNode(true) : null;\n _super.prototype.onActionComplete.call(this, ulElement, list, e);\n if (this.isRequested && !isNullOrUndefined(this.searchKeyEvent) && this.searchKeyEvent.type === 'keydown') {\n this.isRequested = false;\n this.keyActionHandler(this.searchKeyEvent);\n this.searchKeyEvent = null;\n }\n if (this.isRequested && !isNullOrUndefined(this.searchKeyEvent)) {\n this.incrementalSearch(this.searchKeyEvent);\n this.searchKeyEvent = null;\n }\n this.list.scrollTop = 0;\n if (!isNullOrUndefined(ulElement)) {\n attributes(ulElement, { 'id': this.element.id + '_options', 'role': 'listbox', 'aria-hidden': 'false' });\n }\n if (this.initRemoteRender) {\n this.initial = true;\n this.activeIndex = this.index;\n this.updateValues();\n this.initRemoteRender = false;\n this.initial = false;\n }\n if (this.getModuleName() !== 'autocomplete' && this.isFiltering() && !this.isTyped) {\n if (!this.actionCompleteData.isUpdated || ((!this.isCustomFilter\n && !this.isFilterFocus)\n && ((this.dataSource instanceof DataManager)\n || (!isNullOrUndefined(this.dataSource.length) && this.dataSource.length !== 0)))) {\n this.actionCompleteData = { ulElement: ulElement.cloneNode(true), list: list, isUpdated: true };\n }\n this.addNewItem(list, selectedItem);\n if (!isNullOrUndefined(this.itemData)) {\n this.focusIndexItem();\n }\n }\n if (this.beforePopupOpen) {\n this.renderPopup();\n }\n }\n };\n DropDownList.prototype.addNewItem = function (listData, newElement) {\n var _this = this;\n if (!isNullOrUndefined(this.itemData) && !isNullOrUndefined(newElement)) {\n var value_1 = this.getItemData().value;\n var isExist = listData.some(function (data) {\n return (((typeof data === 'string' || typeof data === 'number') && data === value_1) ||\n (getValue(_this.fields.value, data) === value_1));\n });\n if (!isExist) {\n this.addItem(this.itemData);\n }\n }\n };\n DropDownList.prototype.updateActionCompleteData = function (li, item) {\n if (this.getModuleName() !== 'autocomplete' && this.actionCompleteData.ulElement) {\n this.actionCompleteData.ulElement.appendChild(li.cloneNode(true));\n if (this.isFiltering()) {\n this.actionCompleteData.list.push(item);\n }\n }\n };\n DropDownList.prototype.focusIndexItem = function () {\n var value = this.getItemData().value;\n this.activeIndex = this.getIndexByValue(value);\n var element = this.list.querySelector('[data-value=\"' + value + '\"]');\n this.selectedLI = element;\n this.activeItem(element);\n this.removeFocus();\n };\n DropDownList.prototype.updateSelection = function () {\n var selectedItem = this.list.querySelector('.' + dropDownBaseClasses.selected);\n if (selectedItem) {\n this.setProperties({ 'index': this.getIndexByValue(selectedItem.getAttribute('data-value')) });\n this.activeIndex = this.index;\n }\n else {\n this.removeFocus();\n this.list.querySelector('.' + dropDownBaseClasses.li).classList.add(dropDownListClasses.focus);\n }\n };\n DropDownList.prototype.removeFocus = function () {\n var highlightedItem = this.list.querySelectorAll('.' + dropDownListClasses.focus);\n if (highlightedItem && highlightedItem.length) {\n removeClass(highlightedItem, dropDownListClasses.focus);\n }\n };\n ;\n DropDownList.prototype.renderPopup = function () {\n if (this.popupObj && document.body.contains(this.popupObj.element)) {\n this.refreshPopup();\n return;\n }\n var args = { cancel: false };\n this.trigger('beforeOpen', args);\n if (args.cancel) {\n return;\n }\n var popupEle = createElement('div', {\n id: this.element.id + '_popup', className: 'e-ddl e-popup ' + (this.cssClass != null ? this.cssClass : '')\n });\n var searchBox = this.setSearchBox(popupEle);\n this.listHeight = formatUnit(this.popupHeight);\n if (this.headerTemplate) {\n this.setHeaderTemplate(popupEle);\n }\n append([this.list], popupEle);\n if (this.footerTemplate) {\n this.setFooterTemplate(popupEle);\n }\n document.body.appendChild(popupEle);\n popupEle.style.visibility = 'hidden';\n if (this.popupHeight !== 'auto') {\n this.searchBoxHeight = 0;\n if (!isNullOrUndefined(searchBox.container)) {\n this.searchBoxHeight = (searchBox.container.parentElement).getBoundingClientRect().height;\n this.listHeight = (parseInt(this.listHeight, 10) - (this.searchBoxHeight)).toString() + 'px';\n }\n if (this.headerTemplate) {\n var height = Math.round(this.header.getBoundingClientRect().height);\n this.listHeight = (parseInt(this.listHeight, 10) - (height + this.searchBoxHeight)).toString() + 'px';\n }\n if (this.footerTemplate) {\n var height = Math.round(this.footer.getBoundingClientRect().height);\n this.listHeight = (parseInt(this.listHeight, 10) - (height + this.searchBoxHeight)).toString() + 'px';\n }\n this.list.style.maxHeight = (parseInt(this.listHeight, 10) - 2).toString() + 'px'; // due to box-sizing property\n popupEle.style.maxHeight = formatUnit(this.popupHeight);\n }\n else {\n popupEle.style.height = 'auto';\n }\n var offsetValue = 0;\n var left;\n if (!isNullOrUndefined(this.selectedLI) && (!isNullOrUndefined(this.activeIndex) && this.activeIndex >= 0)) {\n this.setScrollPosition();\n }\n else {\n this.list.scrollTop = 0;\n }\n if (Browser.isDevice && (!this.allowFiltering && (this.getModuleName() === 'dropdownlist' ||\n (this.isDropDownClick && this.getModuleName() === 'combobox')))) {\n offsetValue = this.getOffsetValue(popupEle);\n var firstItem = this.isEmptyList() ? this.list : this.liCollections[0];\n left = -(parseInt(getComputedStyle(firstItem).textIndent, 10) -\n parseInt(getComputedStyle(this.inputElement).paddingLeft, 10) +\n parseInt(getComputedStyle(this.inputElement.parentElement).borderLeftWidth, 10));\n }\n this.getFocusElement();\n this.createPopup(popupEle, offsetValue, left);\n this.checkCollision(popupEle);\n if (Browser.isDevice) {\n this.popupObj.element.classList.add(dropDownListClasses.device);\n if (this.getModuleName() === 'dropdownlist' || (this.getModuleName() === 'combobox'\n && !this.allowFiltering && this.isDropDownClick)) {\n this.popupObj.collision = { X: 'fit', Y: 'fit' };\n }\n if (this.isFilterLayout()) {\n this.popupObj.element.classList.add(dropDownListClasses.mobileFilter);\n this.popupObj.position = { X: 0, Y: 0 };\n this.popupObj.dataBind();\n attributes(this.popupObj.element, { style: 'left:0px;right:0px;top:0px;bottom:0px;' });\n addClass([document.body, this.popupObj.element], dropDownListClasses.popupFullScreen);\n this.setSearchBoxPosition();\n this.backIconElement = searchBox.container.querySelector('.e-back-icon');\n this.clearIconElement = searchBox.container.querySelector('.' + dropDownListClasses.clearIcon);\n EventHandler.add(this.backIconElement, 'click', this.clickOnBackIcon, this);\n EventHandler.add(this.clearIconElement, 'click', this.clearText, this);\n }\n }\n popupEle.style.visibility = 'visible';\n addClass([popupEle], 'e-popup-close');\n var scrollParentElements = this.popupObj.getScrollableParent(this.inputWrapper.container);\n for (var _i = 0, scrollParentElements_1 = scrollParentElements; _i < scrollParentElements_1.length; _i++) {\n var element = scrollParentElements_1[_i];\n EventHandler.add(element, 'scroll', this.scrollHandler, this);\n }\n if (Browser.isDevice && this.isFilterLayout()) {\n EventHandler.add(this.list, 'scroll', this.listScroll, this);\n }\n attributes(this.targetElement(), { 'aria-expanded': 'true' });\n var inputParent = this.isFiltering() ? this.filterInput.parentElement : this.inputWrapper.container;\n addClass([inputParent], [dropDownListClasses.inputFocus]);\n var animModel = { name: 'FadeIn', duration: 100 };\n this.beforePopupOpen = true;\n var eventArgs = { popup: this.popupObj, cancel: false };\n this.trigger('open', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n addClass([this.inputWrapper.container], [dropDownListClasses.iconAnimation]);\n this.popupObj.show(new Animation(animModel));\n };\n DropDownList.prototype.checkCollision = function (popupEle) {\n if (!Browser.isDevice || (Browser.isDevice && !(this.getModuleName() === 'dropdownlist' || this.isDropDownClick))) {\n var collision = isCollide(popupEle);\n if (collision.length > 0) {\n popupEle.style.marginTop = -parseInt(getComputedStyle(popupEle).marginTop, 10) + 'px';\n }\n }\n };\n DropDownList.prototype.getOffsetValue = function (popupEle) {\n var popupStyles = getComputedStyle(popupEle);\n var borderTop = parseInt(popupStyles.borderTop, 10);\n var borderBottom = parseInt(popupStyles.borderBottom, 10);\n return this.setPopupPosition(borderTop + borderBottom);\n };\n DropDownList.prototype.createPopup = function (element, offsetValue, left) {\n var _this = this;\n this.popupObj = new Popup(element, {\n width: this.setWidth(), targetType: 'relative',\n relateTo: this.inputWrapper.container, collision: { X: 'flip', Y: 'flip' }, offsetY: offsetValue,\n enableRtl: this.enableRtl, offsetX: left, position: { X: 'left', Y: 'bottom' },\n zIndex: this.zIndex,\n close: function () {\n if (!_this.isDocumentClick) {\n _this.focusDropDown();\n }\n _this.isDocumentClick = false;\n _this.destroyPopup();\n },\n open: function () {\n EventHandler.add(document, 'mousedown', _this.onDocumentClick, _this);\n _this.isPopupOpen = true;\n if (_this.isFilterLayout()) {\n removeClass([_this.inputWrapper.container], [dropDownListClasses.inputFocus]);\n _this.isFilterFocus = true;\n _this.filterInput.focus();\n if (_this.inputWrapper.clearButton) {\n addClass([_this.inputWrapper.clearButton], dropDownListClasses.clearIconHide);\n }\n }\n _this.activeStateChange();\n }\n });\n };\n DropDownList.prototype.isEmptyList = function () {\n return !isNullOrUndefined(this.liCollections) && this.liCollections.length === 0;\n };\n DropDownList.prototype.getFocusElement = function () {\n // combo-box used this method\n };\n DropDownList.prototype.isFilterLayout = function () {\n return this.getModuleName() === 'dropdownlist' && this.allowFiltering;\n };\n DropDownList.prototype.scrollHandler = function () {\n if (Browser.isDevice && ((this.getModuleName() === 'dropdownlist' &&\n !this.isFilterLayout()) || (this.getModuleName() === 'combobox' && !this.allowFiltering && this.isDropDownClick))) {\n this.hidePopup();\n }\n if (this.fields.groupBy && !isNullOrUndefined(this.fixedHeaderElement)) {\n this.fixedHeaderElement.style.zIndex = '0';\n this.fixedHeaderElement.style.display = 'none';\n }\n };\n DropDownList.prototype.setSearchBoxPosition = function () {\n var searchBoxHeight = this.filterInput.parentElement.getBoundingClientRect().height;\n this.popupObj.element.style.maxHeight = '100%';\n this.popupObj.element.style.width = '100%';\n this.list.style.maxHeight = (window.innerHeight - searchBoxHeight) + 'px';\n this.list.style.height = (window.innerHeight - searchBoxHeight) + 'px';\n var clearElement = this.filterInput.parentElement.querySelector('.' + dropDownListClasses.clearIcon);\n detach(this.filterInput);\n clearElement.parentElement.insertBefore(this.filterInput, clearElement);\n };\n DropDownList.prototype.setPopupPosition = function (border) {\n var offsetValue;\n var popupOffset = border;\n var selectedLI = this.list.querySelector('.' + dropDownListClasses.focus) || this.selectedLI;\n var firstItem = this.isEmptyList() ? this.list : this.liCollections[0];\n var lastItem = this.isEmptyList() ? this.list : this.liCollections[this.getItems().length - 1];\n var liHeight = firstItem.getBoundingClientRect().height;\n var listHeight = this.list.offsetHeight / 2;\n var height = isNullOrUndefined(selectedLI) ? firstItem.offsetTop : selectedLI.offsetTop;\n var lastItemOffsetValue = lastItem.offsetTop;\n if (lastItemOffsetValue - listHeight < height && !isNullOrUndefined(this.liCollections) &&\n this.liCollections.length > 0 && !isNullOrUndefined(selectedLI)) {\n var count = this.list.offsetHeight / liHeight;\n var paddingBottom = parseInt(getComputedStyle(this.list).paddingBottom, 10);\n offsetValue = (count - (this.liCollections.length - this.activeIndex)) * liHeight - popupOffset + paddingBottom;\n this.list.scrollTop = selectedLI.offsetTop;\n }\n else if (height > listHeight) {\n offsetValue = listHeight - liHeight / 2;\n this.list.scrollTop = height - listHeight + liHeight / 2;\n }\n else {\n offsetValue = height;\n }\n var inputHeight = this.inputWrapper.container.offsetHeight;\n offsetValue = offsetValue + liHeight + popupOffset - ((liHeight - inputHeight) / 2);\n return -offsetValue;\n };\n DropDownList.prototype.setWidth = function () {\n var width = formatUnit(this.popupWidth);\n if (width.indexOf('%') > -1) {\n var inputWidth = this.inputWrapper.container.offsetWidth * parseFloat(width) / 100;\n width = inputWidth.toString() + 'px';\n }\n if (Browser.isDevice && (!this.allowFiltering && (this.getModuleName() === 'dropdownlist' ||\n (this.isDropDownClick && this.getModuleName() === 'combobox')))) {\n var firstItem = this.isEmptyList() ? this.list : this.liCollections[0];\n width = (parseInt(width, 10) + (parseInt(getComputedStyle(firstItem).textIndent, 10) -\n parseInt(getComputedStyle(this.inputElement).paddingLeft, 10) +\n parseInt(getComputedStyle(this.inputElement.parentElement).borderLeftWidth, 10)) * 2) + 'px';\n }\n return width;\n };\n DropDownList.prototype.scrollBottom = function (isInitial) {\n var currentOffset = this.list.offsetHeight;\n var nextBottom = this.selectedLI.offsetTop + this.selectedLI.offsetHeight - this.list.scrollTop;\n var nextOffset = this.list.scrollTop + nextBottom - currentOffset;\n nextOffset = isInitial ? nextOffset + parseInt(getComputedStyle(this.list).paddingTop, 10) * 2 : nextOffset;\n var boxRange = this.selectedLI.offsetTop + this.selectedLI.offsetHeight - this.list.scrollTop;\n boxRange = this.fields.groupBy && !isNullOrUndefined(this.fixedHeaderElement) ?\n boxRange - this.fixedHeaderElement.offsetHeight : boxRange;\n if (this.activeIndex === 0) {\n this.list.scrollTop = 0;\n }\n else if (nextBottom > currentOffset || !(boxRange > 0 && this.list.offsetHeight > boxRange)) {\n this.list.scrollTop = nextOffset;\n }\n };\n DropDownList.prototype.scrollTop = function () {\n var nextOffset = this.selectedLI.offsetTop - this.list.scrollTop;\n var nextBottom = this.selectedLI.offsetTop + this.selectedLI.offsetHeight - this.list.scrollTop;\n nextOffset = this.fields.groupBy && !isNullOrUndefined(this.fixedHeaderElement) ?\n nextOffset - this.fixedHeaderElement.offsetHeight : nextOffset;\n var boxRange = (this.selectedLI.offsetTop + this.selectedLI.offsetHeight - this.list.scrollTop);\n if (this.activeIndex === 0) {\n this.list.scrollTop = 0;\n }\n else if (nextOffset < 0) {\n this.list.scrollTop = this.list.scrollTop + nextOffset;\n }\n else if (!(boxRange > 0 && this.list.offsetHeight > boxRange)) {\n this.list.scrollTop = this.selectedLI.offsetTop - (this.fields.groupBy && !isNullOrUndefined(this.fixedHeaderElement) ?\n this.fixedHeaderElement.offsetHeight : 0);\n }\n };\n DropDownList.prototype.isEditTextBox = function () {\n return false;\n };\n DropDownList.prototype.isFiltering = function () {\n return this.allowFiltering;\n };\n DropDownList.prototype.isPopupButton = function () {\n return true;\n };\n DropDownList.prototype.setScrollPosition = function (e) {\n if (!isNullOrUndefined(e)) {\n switch (e.action) {\n case 'pageDown':\n case 'down':\n case 'end':\n this.scrollBottom();\n break;\n default:\n this.scrollTop();\n break;\n }\n }\n else {\n this.scrollBottom(true);\n }\n };\n DropDownList.prototype.clearText = function () {\n this.filterInput.value = '';\n this.searchLists(null);\n };\n DropDownList.prototype.listScroll = function () {\n this.filterInput.blur();\n };\n DropDownList.prototype.closePopup = function (delay) {\n this.isTyped = false;\n if (!(this.popupObj && document.body.contains(this.popupObj.element) && this.beforePopupOpen)) {\n return;\n }\n EventHandler.remove(document, 'mousedown', this.onDocumentClick);\n this.isActive = false;\n this.filterInputObj = null;\n this.isDropDownClick = false;\n this.preventAutoFill = false;\n var scrollableParentElements = this.popupObj.getScrollableParent(this.inputWrapper.container);\n for (var _i = 0, scrollableParentElements_1 = scrollableParentElements; _i < scrollableParentElements_1.length; _i++) {\n var element = scrollableParentElements_1[_i];\n EventHandler.remove(element, 'scroll', this.scrollHandler);\n }\n if (Browser.isDevice && this.isFilterLayout()) {\n removeClass([document.body, this.popupObj.element], dropDownListClasses.popupFullScreen);\n EventHandler.remove(this.list, 'scroll', this.listScroll);\n }\n if (this.isFilterLayout()) {\n if (!Browser.isDevice) {\n this.searchKeyModule.destroy();\n if (this.clearIconElement) {\n EventHandler.remove(this.clearIconElement, 'click', this.clearText);\n }\n }\n if (this.backIconElement) {\n EventHandler.remove(this.backIconElement, 'click', this.clickOnBackIcon);\n EventHandler.remove(this.clearIconElement, 'click', this.clearText);\n }\n EventHandler.remove(this.filterInput, 'input', this.onInput);\n EventHandler.remove(this.filterInput, 'keyup', this.onFilterUp);\n EventHandler.remove(this.filterInput, 'keydown', this.onFilterDown);\n EventHandler.remove(this.filterInput, 'blur', this.onBlur);\n this.filterInput = null;\n }\n attributes(this.targetElement(), { 'aria-expanded': 'false', 'aria-activedescendant': null });\n this.inputWrapper.container.classList.remove(dropDownListClasses.iconAnimation);\n if (this.isFiltering()) {\n this.actionCompleteData.isUpdated = false;\n }\n this.beforePopupOpen = false;\n var eventArgs = { popup: this.popupObj, cancel: false };\n this.trigger('close', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n var animModel = {\n name: 'FadeOut',\n duration: 100,\n delay: delay ? delay : 0\n };\n if (this.getModuleName() === 'autocomplete') {\n this.rippleFun();\n }\n if (this.isPopupOpen) {\n this.popupObj.hide(new Animation(animModel));\n }\n else {\n this.destroyPopup();\n }\n };\n DropDownList.prototype.destroyPopup = function () {\n this.isPopupOpen = false;\n this.isFilterFocus = false;\n this.popupObj.destroy();\n detach(this.popupObj.element);\n };\n DropDownList.prototype.clickOnBackIcon = function () {\n this.hidePopup();\n this.focusIn();\n };\n /**\n * To Initialize the control rendering\n * @private\n */\n DropDownList.prototype.render = function () {\n if (this.element.tagName === 'INPUT') {\n this.inputElement = this.element;\n }\n else {\n this.inputElement = createElement('input');\n if (this.element.tagName !== this.getNgDirective()) {\n this.element.style.display = 'none';\n }\n this.element.parentElement.insertBefore(this.inputElement, this.element);\n this.preventTabIndex(this.inputElement);\n }\n this.inputWrapper = Input.createInput({\n element: this.inputElement,\n buttons: this.isPopupButton() ? [dropDownListClasses.icon] : null,\n floatLabelType: this.floatLabelType,\n properties: {\n readonly: this.getModuleName() === 'dropdownlist' ? true : this.readonly,\n placeholder: this.placeholder,\n cssClass: this.cssClass,\n enabled: this.enabled,\n enableRtl: this.enableRtl,\n showClearButton: this.showClearButton\n },\n });\n if (this.element.tagName === this.getNgDirective()) {\n this.element.appendChild(this.inputWrapper.container);\n }\n else {\n this.inputElement.parentElement.insertBefore(this.element, this.inputElement);\n }\n this.hiddenElement = createElement('select', {\n attrs: { 'aria-hidden': 'true', 'tabindex': '-1', 'class': dropDownListClasses.hiddenElement }\n });\n prepend([this.hiddenElement], this.inputWrapper.container);\n this.validationAttribute(this.element, this.hiddenElement);\n this.setFields();\n this.inputWrapper.container.style.width = formatUnit(this.width);\n this.inputWrapper.container.classList.add('e-ddl');\n this.wireEvent();\n this.tabIndex = this.element.hasAttribute('tabindex') ? this.element.getAttribute('tabindex') : '0';\n this.element.removeAttribute('tabindex');\n var id = this.element.getAttribute('id') ? this.element.getAttribute('id') : getUniqueID('ej2_dropdownlist');\n this.element.id = id;\n this.hiddenElement.id = id + '_hidden';\n this.targetElement().setAttribute('tabindex', this.tabIndex);\n attributes(this.targetElement(), this.getAriaAttributes());\n this.setHTMLAttributes();\n if (this.value !== null || this.activeIndex !== null || this.text !== null) {\n this.initValue();\n }\n else if (this.element.tagName === 'SELECT' && this.element.options[0]) {\n var selectElement = this.element;\n this.value = selectElement.options[selectElement.selectedIndex].value;\n this.text = isNullOrUndefined(this.value) ? null : selectElement.options[selectElement.selectedIndex].textContent;\n this.initValue();\n }\n this.preventTabIndex(this.element);\n if (!this.enabled) {\n this.targetElement().tabIndex = -1;\n }\n this.initial = false;\n this.element.style.opacity = '';\n this.inputElement.onselect = function (e) { e.stopImmediatePropagation(); };\n this.inputElement.onchange = function (e) { e.stopImmediatePropagation(); };\n if (this.element.hasAttribute('autofocus')) {\n this.focusIn();\n }\n };\n ;\n DropDownList.prototype.setFooterTemplate = function (popupEle) {\n var compiledString;\n if (this.footer) {\n this.footer.innerHTML = '';\n }\n else {\n this.footer = document.createElement('div');\n addClass([this.footer], dropDownListClasses.footer);\n }\n compiledString = compile(this.footerTemplate);\n for (var _i = 0, _a = compiledString({}); _i < _a.length; _i++) {\n var item = _a[_i];\n this.footer.appendChild(item);\n }\n append([this.footer], popupEle);\n };\n DropDownList.prototype.setHeaderTemplate = function (popupEle) {\n var compiledString;\n if (this.header) {\n this.header.innerHTML = '';\n }\n else {\n this.header = document.createElement('div');\n addClass([this.header], dropDownListClasses.header);\n }\n compiledString = compile(this.headerTemplate);\n for (var _i = 0, _a = compiledString({}); _i < _a.length; _i++) {\n var item = _a[_i];\n this.header.appendChild(item);\n }\n var contentEle = popupEle.querySelector('div.e-content');\n popupEle.insertBefore(this.header, contentEle);\n };\n DropDownList.prototype.setOldText = function (text) {\n this.text = text;\n };\n DropDownList.prototype.setOldValue = function (value) {\n this.value = value;\n };\n DropDownList.prototype.refreshPopup = function () {\n if (!isNullOrUndefined(this.popupObj) && document.body.contains(this.popupObj.element) &&\n ((this.allowFiltering && !(Browser.isDevice && this.isFilterLayout())) || this.getModuleName() === 'autocomplete')) {\n this.popupObj.refreshPosition(this.inputWrapper.container);\n }\n };\n DropDownList.prototype.updateDataSource = function (prop) {\n this.clear(null, prop);\n this.resetList(this.dataSource);\n if (!this.isCustomFilter && !this.isFilterFocus && document.activeElement !== this.filterInput) {\n this.itemData = this.getDataByValue(this.value);\n var dataItem = this.getItemData();\n this.setProperties({ 'value': dataItem.value, 'text': dataItem.text });\n }\n };\n /**\n * Dynamically change the value of properties.\n * @private\n */\n DropDownList.prototype.onPropertyChanged = function (newProp, oldProp) {\n this.setUpdateInitial(['query', 'dataSource'], newProp);\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'query':\n case 'dataSource':\n break;\n case 'htmlAttributes':\n this.setHTMLAttributes();\n break;\n case 'width':\n setStyleAttribute(this.inputWrapper.container, { 'width': formatUnit(newProp.width) });\n break;\n case 'placeholder':\n Input.setPlaceholder(newProp.placeholder, this.inputElement);\n break;\n case 'filterBarPlaceholder':\n if (this.filterInput) {\n Input.setPlaceholder(newProp.filterBarPlaceholder, this.filterInput);\n }\n break;\n case 'readonly':\n if (this.getModuleName() !== 'dropdownlist') {\n Input.setReadonly(newProp.readonly, this.inputElement);\n }\n break;\n case 'cssClass':\n Input.setCssClass(newProp.cssClass, [this.inputWrapper.container]);\n if (this.popupObj) {\n this.popupObj.element.classList.add(newProp.cssClass);\n }\n break;\n case 'enableRtl':\n this.setEnableRtl();\n break;\n case 'enabled':\n this.setEnable();\n break;\n case 'text':\n if (newProp.text === null) {\n this.clear();\n break;\n }\n if (!this.list) {\n if (this.dataSource instanceof DataManager) {\n this.initRemoteRender = true;\n }\n this.renderList();\n }\n if (!this.initRemoteRender) {\n var li = this.getElementByText(newProp.text);\n if (this.isValidLI(li)) {\n this.setSelection(li, null);\n }\n else {\n this.setOldText(oldProp.text);\n }\n }\n break;\n case 'value':\n if (newProp.value === null) {\n this.clear();\n break;\n }\n this.notify('beforeValueChange', { newProp: newProp }); // gird component value type change\n if (!this.list) {\n if (this.dataSource instanceof DataManager) {\n this.initRemoteRender = true;\n }\n this.renderList();\n }\n if (!this.initRemoteRender) {\n var item = this.getElementByValue(newProp.value);\n if (this.isValidLI(item)) {\n this.setSelection(item, null);\n }\n else {\n this.setOldValue(oldProp.value);\n }\n }\n break;\n case 'index':\n if (newProp.index === null) {\n this.clear();\n break;\n }\n if (!this.list) {\n if (this.dataSource instanceof DataManager) {\n this.initRemoteRender = true;\n }\n this.renderList();\n }\n if (!this.initRemoteRender) {\n var element = this.liCollections[newProp.index];\n if (this.isValidLI(element)) {\n this.setSelection(element, null);\n }\n else {\n this.index = oldProp.index;\n }\n }\n break;\n case 'footerTemplate':\n if (this.popupObj) {\n this.setFooterTemplate(this.popupObj.element);\n }\n break;\n case 'headerTemplate':\n if (this.popupObj) {\n this.setHeaderTemplate(this.popupObj.element);\n }\n break;\n case 'valueTemplate':\n if (!isNullOrUndefined(this.itemData) && this.valueTemplate != null) {\n this.setValueTemplate();\n }\n break;\n case 'floatLabelType':\n Input.removeFloating(this.inputWrapper);\n Input.addFloating(this.inputElement, newProp.floatLabelType, this.placeholder);\n break;\n case 'showClearButton':\n Input.setClearButton(newProp.showClearButton, this.inputElement, this.inputWrapper);\n this.bindClearEvent();\n break;\n default:\n var ddlProps = void 0;\n ddlProps = this.getPropObject(prop, newProp, oldProp);\n _super.prototype.onPropertyChanged.call(this, ddlProps.newProperty, ddlProps.oldProperty);\n break;\n }\n }\n };\n /**\n * Return the module name.\n * @private\n */\n DropDownList.prototype.getModuleName = function () {\n return 'dropdownlist';\n };\n /**\n * Opens the popup that displays the list of items.\n * @returns void.\n */\n DropDownList.prototype.showPopup = function () {\n if (!this.enabled) {\n return;\n }\n if (this.beforePopupOpen) {\n this.refreshPopup();\n return;\n }\n this.beforePopupOpen = true;\n if (this.isFiltering() && !this.isActive && this.actionCompleteData.list && this.actionCompleteData.list[0]) {\n this.isActive = true;\n this.onActionComplete(this.actionCompleteData.ulElement, this.actionCompleteData.list, null, true);\n }\n else if (isNullOrUndefined(this.list) || !isUndefined(this.list) && this.list.classList.contains(dropDownBaseClasses.noData)) {\n this.renderList();\n }\n if (Browser.isDevice && this.isFilterLayout()) {\n var proxy_2 = this;\n window.onpopstate = function () {\n proxy_2.hidePopup();\n };\n history.pushState({}, '');\n }\n if (!isNullOrUndefined(this.list.children[0]) || this.list.classList.contains(dropDownBaseClasses.noData)) {\n this.renderPopup();\n }\n attributes(this.targetElement(), { 'aria-activedescendant': this.selectedLI ? this.selectedLI.id : null });\n };\n /**\n * Hides the popup if it is in an open state.\n * @returns void.\n */\n DropDownList.prototype.hidePopup = function () {\n if (this.isEscapeKey && this.getModuleName() === 'dropdownlist') {\n Input.setValue(this.text, this.inputElement, this.floatLabelType, this.showClearButton);\n this.isEscapeKey = false;\n if (!isNullOrUndefined(this.index)) {\n this.selectedLI = this.liCollections[this.index];\n this.updateSelectedItem(this.selectedLI, null, true);\n if (this.valueTemplate && this.itemData !== null) {\n this.setValueTemplate();\n }\n }\n else {\n this.resetSelection();\n }\n }\n this.closePopup();\n var dataItem = this.getItemData();\n if (this.inputElement.value.trim() === '' && !this.isInteracted && (this.isSelectCustom ||\n !isNullOrUndefined(this.selectedLI) && this.inputElement.value !== dataItem.text)) {\n this.isSelectCustom = false;\n this.clear();\n }\n };\n /**\n * Sets the focus on the component for interaction.\n * @returns void.\n */\n DropDownList.prototype.focusIn = function () {\n if (!this.enabled) {\n return;\n }\n if (this.targetElement().classList.contains(dropDownListClasses.disable)) {\n return;\n }\n var isFocused = false;\n if (this.preventFocus && Browser.isDevice) {\n this.inputWrapper.container.tabIndex = 1;\n this.inputWrapper.container.focus();\n this.preventFocus = false;\n isFocused = true;\n }\n if (!isFocused) {\n this.targetElement().focus();\n }\n addClass([this.inputWrapper.container], [dropDownListClasses.inputFocus]);\n this.onFocus();\n };\n /**\n * Moves the focus from the component if the component is already focused.\n * @returns void.\n */\n DropDownList.prototype.focusOut = function () {\n if (!this.enabled) {\n return;\n }\n this.isTyped = true;\n this.hidePopup();\n this.targetElement().blur();\n removeClass([this.inputWrapper.container], [dropDownListClasses.inputFocus]);\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers. Also it removes the attributes and classes.\n * @method destroy\n * @return {void}.\n */\n DropDownList.prototype.destroy = function () {\n var _this = this;\n this.isActive = false;\n this.hidePopup();\n this.unWireEvent();\n if (this.list) {\n this.unWireListEvents();\n }\n if (this.element && !this.element.classList.contains('e-' + this.getModuleName())) {\n return;\n }\n var attrArray = ['readonly', 'aria-disabled', 'aria-placeholder',\n 'placeholder', 'aria-owns', 'aria-labelledby', 'aria-haspopup', 'aria-expanded',\n 'aria-activedescendant', 'autocomplete', 'aria-readonly', 'autocorrect',\n 'autocapitalize', 'spellcheck', 'aria-autocomplete'];\n attrArray.forEach(function (value) {\n _this.inputElement.removeAttribute(value);\n });\n this.inputElement.setAttribute('tabindex', this.tabIndex);\n this.inputElement.classList.remove('e-input');\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n this.element.style.display = 'block';\n if (this.inputWrapper.container.parentElement.tagName === this.getNgDirective()) {\n detach(this.inputWrapper.container);\n }\n else {\n this.inputWrapper.container.parentElement.insertBefore(this.element, this.inputWrapper.container);\n detach(this.inputWrapper.container);\n }\n _super.prototype.destroy.call(this);\n };\n ;\n /**\n * Gets all the list items bound on this component.\n * @returns Element[].\n */\n DropDownList.prototype.getItems = function () {\n if (!this.list) {\n if (this.dataSource instanceof DataManager) {\n this.initRemoteRender = true;\n }\n this.renderList();\n }\n return this.ulElement ? _super.prototype.getItems.call(this) : null;\n };\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"cssClass\", void 0);\n __decorate([\n Property('100%')\n ], DropDownList.prototype, \"width\", void 0);\n __decorate([\n Property('300px')\n ], DropDownList.prototype, \"popupHeight\", void 0);\n __decorate([\n Property('100%')\n ], DropDownList.prototype, \"popupWidth\", void 0);\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"placeholder\", void 0);\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"filterBarPlaceholder\", void 0);\n __decorate([\n Property({})\n ], DropDownList.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"query\", void 0);\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"valueTemplate\", void 0);\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"footerTemplate\", void 0);\n __decorate([\n Property(false)\n ], DropDownList.prototype, \"allowFiltering\", void 0);\n __decorate([\n Property(false)\n ], DropDownList.prototype, \"readonly\", void 0);\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"text\", void 0);\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"index\", void 0);\n __decorate([\n Property('Never')\n ], DropDownList.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property(false)\n ], DropDownList.prototype, \"showClearButton\", void 0);\n __decorate([\n Event()\n ], DropDownList.prototype, \"filtering\", void 0);\n __decorate([\n Event()\n ], DropDownList.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], DropDownList.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], DropDownList.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], DropDownList.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], DropDownList.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], DropDownList.prototype, \"focus\", void 0);\n DropDownList = __decorate([\n NotifyPropertyChanges\n ], DropDownList);\n return DropDownList;\n}(DropDownBase));\nexport { DropDownList };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/// \nimport { EventHandler, Property, Event, addClass, Browser, removeClass } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, NotifyPropertyChanges, getValue, setValue } from '@syncfusion/ej2-base';\nimport { DropDownList, dropDownListClasses } from '../drop-down-list/drop-down-list';\nimport { Search } from '../common/incremental-search';\nimport { createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\n/* tslint:disable */\nimport { Input } from '@syncfusion/ej2-inputs';\n/* tslint:enable */\ndropDownListClasses.root = 'e-combobox';\nvar inputObject = {\n container: null,\n buttons: []\n};\n/**\n * The ComboBox component allows the user to type a value or choose an option from the list of predefined options.\n * ```html\n * \n * ```\n * ```typescript\n * let games:ComboBox = new ComboBox();\n * games.appendTo(\"#list\");\n * ```\n */\nvar ComboBox = /** @class */ (function (_super) {\n __extends(ComboBox, _super);\n /**\n * *Constructor for creating the component\n */\n function ComboBox(options, element) {\n return _super.call(this, options, element) || this;\n }\n ;\n /**\n * Initialize the event handler\n * @private\n */\n ComboBox.prototype.preRender = function () {\n _super.prototype.preRender.call(this);\n };\n ComboBox.prototype.wireEvent = function () {\n if (this.getModuleName() === 'combobox') {\n EventHandler.add(this.inputWrapper.buttons[0], 'mousedown', this.preventBlur, this);\n EventHandler.add(this.inputWrapper.container, 'blur', this.onBlur, this);\n }\n if (!isNullOrUndefined(this.inputWrapper.buttons[0])) {\n EventHandler.add(this.inputWrapper.buttons[0], 'mousedown', this.dropDownClick, this);\n }\n EventHandler.add(this.inputElement, 'focus', this.targetFocus, this);\n if (!this.readonly) {\n EventHandler.add(this.inputElement, 'input', this.onInput, this);\n EventHandler.add(this.inputElement, 'keyup', this.onFilterUp, this);\n EventHandler.add(this.inputElement, 'keydown', this.onFilterDown, this);\n }\n this.bindCommonEvent();\n };\n ComboBox.prototype.preventBlur = function (e) {\n if ((!this.allowFiltering && document.activeElement !== this.inputElement &&\n !document.activeElement.classList.contains(dropDownListClasses.input) && Browser.isDevice || !Browser.isDevice)) {\n e.preventDefault();\n }\n };\n ComboBox.prototype.targetElement = function () {\n return this.inputElement;\n };\n ComboBox.prototype.setOldText = function (text) {\n Input.setValue(this.text, this.inputElement, this.floatLabelType, this.showClearButton);\n this.customValue();\n this.removeSelection();\n };\n ComboBox.prototype.setOldValue = function (value) {\n if (this.allowCustom) {\n this.valueMuteChange(this.value);\n }\n else {\n this.valueMuteChange(null);\n }\n this.removeSelection();\n this.setHiddenValue();\n };\n ComboBox.prototype.valueMuteChange = function (value) {\n var inputValue = isNullOrUndefined(value) ? null : value.toString();\n Input.setValue(inputValue, this.inputElement, this.floatLabelType, this.showClearButton);\n this.setProperties({ value: value, text: value, index: null }, true);\n this.activeIndex = this.index;\n var fields = this.fields;\n var dataItem = {};\n dataItem[fields.text] = isNullOrUndefined(value) ? null : value.toString();\n dataItem[fields.value] = isNullOrUndefined(value) ? null : value.toString();\n this.itemData = dataItem;\n this.item = null;\n if (this.previousValue !== this.value) {\n this.detachChangeEvent(null);\n }\n };\n ComboBox.prototype.updateValues = function () {\n if (!isNullOrUndefined(this.value)) {\n var li = this.getElementByValue(this.value);\n if (li) {\n this.setSelection(li, null);\n }\n else if (this.allowCustom) {\n this.valueMuteChange(this.value);\n }\n else {\n this.valueMuteChange(null);\n }\n }\n else if (this.text && isNullOrUndefined(this.value)) {\n var li = this.getElementByText(this.text);\n if (li) {\n this.setSelection(li, null);\n }\n else {\n Input.setValue(this.text, this.inputElement, this.floatLabelType, this.showClearButton);\n this.customValue();\n }\n }\n else {\n this.setSelection(this.liCollections[this.activeIndex], null);\n }\n this.setHiddenValue();\n Input.setValue(this.text, this.inputElement, this.floatLabelType, this.showClearButton);\n };\n ComboBox.prototype.getAriaAttributes = function () {\n var ariaAttributes = {\n 'aria-owns': this.element.id + '_options',\n 'role': 'combobox',\n 'aria-autocomplete': 'both',\n 'aria-labelledby': this.hiddenElement.id,\n 'aria-hasPopup': 'true',\n 'aria-expanded': 'false',\n 'aria-readonly': this.readonly.toString(),\n 'autocomplete': 'off',\n 'autocorrect': 'off',\n 'autocapitalize': 'off',\n 'spellcheck': 'false'\n };\n return ariaAttributes;\n };\n ComboBox.prototype.searchLists = function (e) {\n this.isTyped = true;\n if (this.isFiltering()) {\n _super.prototype.searchLists.call(this, e);\n if (this.filterInput.value.trim() === '') {\n this.setHoverList(this.ulElement.querySelector('.' + dropDownListClasses.li));\n }\n }\n else {\n if (this.ulElement && this.inputElement.value === '' && this.preventAutoFill) {\n this.setHoverList(this.ulElement.querySelector('.' + dropDownListClasses.li));\n }\n this.incrementalSearch(e);\n }\n };\n ComboBox.prototype.getNgDirective = function () {\n return 'EJS-COMBOBOX';\n };\n ComboBox.prototype.setSearchBox = function () {\n this.filterInput = this.inputElement;\n return (this.isFiltering() ? this.inputWrapper : inputObject);\n };\n ComboBox.prototype.onActionComplete = function (ulElement, list, e, isUpdated) {\n _super.prototype.onActionComplete.call(this, ulElement, list, e);\n if (this.isSelectCustom) {\n this.removeSelection();\n }\n if (!this.preventAutoFill && this.getModuleName() === 'combobox' && this.isTyped) {\n this.inlineSearch();\n }\n };\n ComboBox.prototype.getFocusElement = function () {\n var dataItem = this.isSelectCustom ? { text: '' } : this.getItemData();\n var selected = this.list.querySelector('.' + dropDownListClasses.selected);\n var isSelected = dataItem.text === this.inputElement.value && !isNullOrUndefined(selected);\n if (isSelected) {\n return selected;\n }\n if ((Browser.isDevice && !this.isDropDownClick || !Browser.isDevice) &&\n !isNullOrUndefined(this.liCollections) && this.liCollections.length > 0) {\n var inputValue = this.inputElement.value;\n var activeItem = Search(inputValue, this.liCollections, 'StartsWith', true);\n var activeElement = activeItem.item;\n if (!isNullOrUndefined(activeElement)) {\n var count = this.getIndexByValue(activeElement.getAttribute('data-value')) - 1;\n var height = parseInt(getComputedStyle(this.liCollections[0], null).getPropertyValue('height'), 10);\n if (!isNaN(height) && this.getModuleName() !== 'autocomplete') {\n this.removeFocus();\n var fixedHead = this.fields.groupBy ? this.liCollections[0].offsetHeight : 0;\n this.list.scrollTop = count * height + fixedHead;\n addClass([activeElement], dropDownListClasses.focus);\n }\n }\n else {\n if (this.isSelectCustom && this.inputElement.value.trim() !== '') {\n this.removeFocus();\n this.list.scrollTop = 0;\n }\n }\n return activeElement;\n }\n else {\n return null;\n }\n };\n ComboBox.prototype.setValue = function (e) {\n if (e && e.type === 'keydown' && e.action === 'enter') {\n this.removeFillSelection();\n }\n if (this.autofill && this.getModuleName() === 'combobox' && e && e.type === 'keydown' && e.action !== 'enter') {\n this.preventAutoFill = false;\n this.inlineSearch(e);\n return false;\n }\n else {\n return _super.prototype.setValue.call(this, e);\n }\n };\n ComboBox.prototype.showSpinner = function () {\n if (isNullOrUndefined(this.spinnerElement)) {\n this.spinnerElement = this.inputWrapper.buttons[0] || this.inputWrapper.clearButton;\n addClass([this.spinnerElement], dropDownListClasses.disableIcon);\n createSpinner({\n target: this.spinnerElement,\n width: Browser.isDevice ? '16px' : '14px'\n });\n showSpinner(this.spinnerElement);\n }\n };\n ComboBox.prototype.hideSpinner = function () {\n if (!isNullOrUndefined(this.spinnerElement)) {\n hideSpinner(this.spinnerElement);\n this.spinnerElement.innerHTML = '';\n removeClass([this.spinnerElement], dropDownListClasses.disableIcon);\n this.spinnerElement = null;\n }\n };\n ComboBox.prototype.setAutoFill = function (activeElement, isHover) {\n if (!isHover) {\n this.setHoverList(activeElement);\n }\n if (this.autofill && !this.preventAutoFill) {\n var currentValue = this.getTextByValue(activeElement.getAttribute('data-value')).toString();\n var currentFillValue = this.getFormattedValue(activeElement.getAttribute('data-value'));\n if (this.getModuleName() === 'combobox') {\n if (!this.isSelected && this.previousValue !== currentFillValue) {\n this.updateSelectedItem(activeElement, null);\n this.isSelected = true;\n this.previousValue = this.getFormattedValue(activeElement.getAttribute('data-value'));\n }\n else {\n this.updateSelectedItem(activeElement, null, true);\n }\n }\n if (!this.isAndroidAutoFill(currentValue)) {\n this.setAutoFillSelection(currentValue);\n }\n }\n };\n ComboBox.prototype.isAndroidAutoFill = function (value) {\n if (Browser.isAndroid) {\n var currentPoints = this.getSelectionPoints();\n var prevEnd = this.prevSelectPoints.end;\n var curEnd = currentPoints.end;\n var prevStart = this.prevSelectPoints.start;\n var curStart = currentPoints.start;\n if (prevEnd !== 0 && ((prevEnd === value.length && prevStart === value.length) ||\n (prevStart > curStart && prevEnd > curEnd) || (prevEnd === curEnd && prevStart === curStart))) {\n return true;\n }\n else {\n return false;\n }\n }\n else {\n return false;\n }\n };\n ComboBox.prototype.clear = function (e, property) {\n if (isNullOrUndefined(property) || property !== 'dataSource') {\n _super.prototype.clear.call(this, e);\n }\n };\n ComboBox.prototype.isSelectFocusItem = function (element) {\n return !isNullOrUndefined(element);\n };\n ComboBox.prototype.inlineSearch = function (e) {\n var isKeyNavigate = (e && (e.action === 'down' || e.action === 'up' ||\n e.action === 'home' || e.action === 'end' || e.action === 'pageUp' || e.action === 'pageDown'));\n var activeElement = isKeyNavigate ? this.liCollections[this.activeIndex] : this.getFocusElement();\n if (!isNullOrUndefined(activeElement)) {\n if (!isKeyNavigate) {\n var value = this.getFormattedValue(activeElement.getAttribute('data-value'));\n this.activeIndex = this.getIndexByValue(value);\n this.activeIndex = !isNullOrUndefined(this.activeIndex) ? this.activeIndex : null;\n }\n this.preventAutoFill = this.inputElement.value === '' ? false : this.preventAutoFill;\n this.setAutoFill(activeElement, isKeyNavigate);\n }\n else if (this.inputElement.value === '') {\n this.activeIndex = null;\n this.list.scrollTop = 0;\n var focusItem = this.list.querySelector('.' + dropDownListClasses.li);\n this.setHoverList(focusItem);\n }\n else {\n this.activeIndex = null;\n this.removeSelection();\n this.removeFocus();\n }\n };\n ComboBox.prototype.incrementalSearch = function (e) {\n this.showPopup();\n if (!isNullOrUndefined(this.listData)) {\n this.inlineSearch(e);\n e.preventDefault();\n }\n };\n ;\n ComboBox.prototype.setAutoFillSelection = function (currentValue) {\n var selection = this.getSelectionPoints();\n var value = this.inputElement.value.substr(0, selection.start);\n if (value && (value.toLowerCase() === currentValue.substr(0, selection.start).toLowerCase())) {\n var inputValue = value + currentValue.substr(value.length, currentValue.length);\n Input.setValue(inputValue, this.inputElement, this.floatLabelType, this.showClearButton);\n this.inputElement.setSelectionRange(selection.start, this.inputElement.value.length);\n }\n else {\n Input.setValue(currentValue, this.inputElement, this.floatLabelType, this.showClearButton);\n this.inputElement.setSelectionRange(0, this.inputElement.value.length);\n }\n };\n ;\n ComboBox.prototype.getValueByText = function (text) {\n return _super.prototype.getValueByText.call(this, text, true, this.ignoreAccent);\n };\n ComboBox.prototype.unWireEvent = function () {\n if (this.getModuleName() === 'combobox') {\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown', this.preventBlur);\n EventHandler.remove(this.inputWrapper.container, 'blur', this.onBlur);\n }\n if (!isNullOrUndefined(this.inputWrapper.buttons[0])) {\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown', this.dropDownClick);\n }\n EventHandler.remove(this.inputElement, 'focus', this.targetFocus);\n if (!this.readonly) {\n EventHandler.remove(this.inputElement, 'input', this.onInput);\n EventHandler.remove(this.inputElement, 'keyup', this.onFilterUp);\n EventHandler.remove(this.inputElement, 'keydown', this.onFilterDown);\n }\n this.unBindCommonEvent();\n };\n ComboBox.prototype.setSelection = function (li, e) {\n _super.prototype.setSelection.call(this, li, e);\n if (!isNullOrUndefined(li) && !this.autofill && !this.isDropDownClick) {\n this.removeFocus();\n }\n };\n ComboBox.prototype.selectCurrentItem = function (e) {\n var li;\n if (this.isPopupOpen) {\n li = this.list.querySelector('.' + dropDownListClasses.focus);\n if (li) {\n this.setSelection(li, e);\n this.isTyped = false;\n }\n if (this.isSelected) {\n this.isSelectCustom = false;\n this.onChangeEvent(e);\n }\n }\n if (e.action === 'enter' && this.inputElement.value.trim() === '') {\n this.clear(e);\n }\n else if (this.isTyped && !this.isSelected && isNullOrUndefined(li)) {\n this.customValue();\n }\n this.hidePopup();\n };\n ComboBox.prototype.setHoverList = function (li) {\n this.removeSelection();\n if (this.isValidLI(li) && !li.classList.contains(dropDownListClasses.selected)) {\n this.removeFocus();\n li.classList.add(dropDownListClasses.focus);\n }\n };\n ;\n ComboBox.prototype.targetFocus = function (e) {\n if (Browser.isDevice && !this.allowFiltering) {\n this.preventFocus = false;\n }\n this.onFocus();\n };\n ComboBox.prototype.dropDownClick = function (e) {\n e.preventDefault();\n if (Browser.isDevice && !this.allowFiltering) {\n this.preventFocus = true;\n }\n _super.prototype.dropDownClick.call(this, e);\n };\n ComboBox.prototype.customValue = function () {\n var value = this.getValueByText(this.inputElement.value);\n if (!this.allowCustom && this.inputElement.value !== '') {\n this.setProperties({ value: value });\n if (isNullOrUndefined(this.value)) {\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n }\n }\n else if (this.inputElement.value.trim() !== '') {\n var previousValue = this.value;\n if (isNullOrUndefined(value)) {\n var value_1 = this.inputElement.value === '' ? null : this.inputElement.value;\n var fields = this.fields;\n var eventArgs = void 0;\n eventArgs = { text: value_1, item: {} };\n if (!this.initial) {\n this.trigger('customValueSpecifier', eventArgs);\n }\n var item = eventArgs.item;\n var dataItem = {};\n if (item && getValue(fields.text, item) && getValue(fields.value, item)) {\n dataItem = item;\n }\n else {\n setValue(fields.text, value_1, dataItem);\n setValue(fields.value, value_1, dataItem);\n }\n this.itemData = dataItem;\n var changeData = {\n text: getValue(fields.text, this.itemData),\n value: getValue(fields.value, this.itemData),\n index: null\n };\n this.setProperties(changeData, true);\n this.setSelection(null, null);\n this.isSelectCustom = true;\n }\n else {\n this.isSelectCustom = false;\n this.setProperties({ value: value });\n }\n if (previousValue !== this.value) {\n this.onChangeEvent(null);\n }\n }\n else if (this.allowCustom) {\n this.isSelectCustom = true;\n }\n };\n /**\n * Dynamically change the value of properties.\n * @private\n */\n ComboBox.prototype.onPropertyChanged = function (newProp, oldProp) {\n this.setUpdateInitial(['query', 'dataSource'], newProp);\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'readonly':\n Input.setReadonly(this.readonly, this.inputElement);\n if (this.readonly) {\n EventHandler.remove(this.inputElement, 'keyup', this.onFilterUp);\n EventHandler.remove(this.inputElement, 'keydown', this.onFilterDown);\n }\n else {\n EventHandler.add(this.inputElement, 'keyup', this.onFilterUp, this);\n EventHandler.add(this.inputElement, 'keydown', this.onFilterDown, this);\n }\n break;\n case 'allowFiltering':\n this.setSearchBox();\n if (this.isFiltering() && this.getModuleName() === 'combobox' && isNullOrUndefined(this.list)) {\n _super.prototype.renderList.call(this);\n }\n break;\n case 'allowCustom':\n break;\n default:\n var comboProps = void 0;\n comboProps = this.getPropObject(prop, newProp, oldProp);\n _super.prototype.onPropertyChanged.call(this, comboProps.newProperty, comboProps.oldProperty);\n break;\n }\n }\n };\n /**\n * To initialize the control rendering.\n * @private\n */\n ComboBox.prototype.render = function () {\n _super.prototype.render.call(this);\n this.setSearchBox();\n if (this.isFiltering() && this.getModuleName() === 'combobox' && isNullOrUndefined(this.list)) {\n _super.prototype.renderList.call(this);\n }\n };\n ;\n /**\n * Return the module name of this component.\n * @private\n */\n ComboBox.prototype.getModuleName = function () {\n return 'combobox';\n };\n /**\n * Hides the popup if it is in open state.\n * @returns void.\n */\n ComboBox.prototype.hidePopup = function () {\n var inputValue = this.inputElement.value === '' ? null : this.inputElement.value;\n if (!isNullOrUndefined(this.listData)) {\n var isEscape = this.isEscapeKey;\n if (this.isEscapeKey) {\n Input.setValue(this.typedString, this.inputElement, this.floatLabelType, this.showClearButton);\n this.isEscapeKey = false;\n }\n if (this.autofill) {\n this.removeFillSelection();\n }\n var dataItem = this.isSelectCustom ? { text: '' } : this.getItemData();\n var selected = this.list.querySelector('.' + dropDownListClasses.selected);\n if (dataItem.text === this.inputElement.value && !isNullOrUndefined(selected)) {\n if (this.isSelected) {\n this.onChangeEvent(null);\n this.isSelectCustom = false;\n }\n _super.prototype.hidePopup.call(this);\n return;\n }\n if (this.getModuleName() === 'combobox' && this.inputElement.value.trim() !== '') {\n var searchItem = Search(this.inputElement.value, this.liCollections, 'Equal', true);\n this.selectedLI = searchItem.item;\n if (isNullOrUndefined(searchItem.index)) {\n searchItem.index = Search(this.inputElement.value, this.liCollections, 'StartsWith', true).index;\n }\n this.activeIndex = searchItem.index;\n if (!isNullOrUndefined(this.selectedLI)) {\n this.updateSelectedItem(this.selectedLI, null, true);\n }\n else if (isEscape) {\n this.isSelectCustom = true;\n this.removeSelection();\n }\n }\n if (!this.isEscapeKey && this.isTyped && !this.isInteracted) {\n this.customValue();\n }\n }\n if (isNullOrUndefined(this.listData) && this.allowCustom && !isNullOrUndefined(inputValue) && inputValue !== this.value) {\n this.customValue();\n }\n _super.prototype.hidePopup.call(this);\n };\n /**\n * Sets the focus to the component for interaction.\n * @returns void.\n */\n ComboBox.prototype.focusIn = function () {\n if (!this.enabled) {\n return;\n }\n if (Browser.isDevice && !this.allowFiltering) {\n this.preventFocus = true;\n }\n _super.prototype.focusIn.call(this);\n };\n __decorate([\n Property(false)\n ], ComboBox.prototype, \"autofill\", void 0);\n __decorate([\n Property(true)\n ], ComboBox.prototype, \"allowCustom\", void 0);\n __decorate([\n Property({})\n ], ComboBox.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(false)\n ], ComboBox.prototype, \"allowFiltering\", void 0);\n __decorate([\n Property(null)\n ], ComboBox.prototype, \"query\", void 0);\n __decorate([\n Property(null)\n ], ComboBox.prototype, \"index\", void 0);\n __decorate([\n Property(true)\n ], ComboBox.prototype, \"showClearButton\", void 0);\n __decorate([\n Event()\n ], ComboBox.prototype, \"customValueSpecifier\", void 0);\n __decorate([\n Event()\n ], ComboBox.prototype, \"filtering\", void 0);\n __decorate([\n Property(null)\n ], ComboBox.prototype, \"valueTemplate\", void 0);\n __decorate([\n Property('Never')\n ], ComboBox.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property(null)\n ], ComboBox.prototype, \"filterBarPlaceholder\", void 0);\n ComboBox = __decorate([\n NotifyPropertyChanges\n ], ComboBox);\n return ComboBox;\n}(DropDownList));\nexport { ComboBox };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/// \nimport { Property, addClass, EventHandler, isNullOrUndefined, detach } from '@syncfusion/ej2-base';\nimport { Event, Complex } from '@syncfusion/ej2-base';\nimport { removeClass, attributes, NotifyPropertyChanges, Browser } from '@syncfusion/ej2-base';\nimport { dropDownListClasses } from '../drop-down-list/drop-down-list';\nimport { ComboBox } from '../combo-box/combo-box';\nimport { highlightSearch } from '../common/highlight-search';\nimport { Search } from '../common/incremental-search';\nimport { FieldSettings } from '../drop-down-base/drop-down-base';\nimport { createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\n/* tslint:disable */\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\n/* tslint:enable */\nvar SPINNER_CLASS = 'e-atc-spinner-icon';\ndropDownListClasses.root = 'e-autocomplete';\ndropDownListClasses.icon = 'e-input-group-icon e-ddl-icon e-search-icon';\n/**\n * The AutoComplete component provides the matched suggestion list when type into the input,\n * from which the user can select one.\n * ```html\n * \n * ```\n * ```typescript\n * let atcObj:AutoComplete = new AutoComplete();\n * atcObj.appendTo(\"#list\");\n * ```\n */\nvar AutoComplete = /** @class */ (function (_super) {\n __extends(AutoComplete, _super);\n /**\n * * Constructor for creating the widget\n */\n function AutoComplete(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isFiltered = false;\n return _this;\n }\n ;\n /**\n * Initialize the event handler\n * @private\n */\n AutoComplete.prototype.preRender = function () {\n _super.prototype.preRender.call(this);\n };\n AutoComplete.prototype.getNgDirective = function () {\n return 'EJS-AUTOCOMPLETE';\n };\n AutoComplete.prototype.getQuery = function (query) {\n var filterQuery = query ? query.clone() : this.query ? this.query.clone() : new Query();\n var filterType = (this.queryString === '' && !isNullOrUndefined(this.value)) ? 'equal' : this.filterType;\n var queryString = (this.queryString === '' && !isNullOrUndefined(this.value)) ? this.value : this.queryString;\n if (this.isFiltered) {\n return filterQuery;\n }\n if (this.queryString !== null) {\n var dataType = this.typeOfData(this.dataSource).typeof;\n if (!(this.dataSource instanceof DataManager) && dataType === 'string' || dataType === 'number') {\n filterQuery.where('', filterType, queryString, this.ignoreCase, this.ignoreAccent);\n }\n else {\n var mapping = !isNullOrUndefined(this.fields.value) ? this.fields.value : '';\n filterQuery.where(mapping, filterType, queryString, this.ignoreCase, this.ignoreAccent);\n }\n }\n if (!isNullOrUndefined(this.suggestionCount)) {\n filterQuery.take(this.suggestionCount);\n }\n return filterQuery;\n };\n AutoComplete.prototype.searchLists = function (e) {\n var _this = this;\n this.isTyped = true;\n this.isSelectCustom = false;\n if (isNullOrUndefined(this.list)) {\n _super.prototype.renderList.call(this, true);\n }\n var isDownUpKey = e.keyCode === 40 || e.keyCode === 38;\n this.queryString = this.filterInput.value;\n if (isDownUpKey) {\n this.queryString = this.queryString === '' ? null : this.queryString;\n this.beforePopupOpen = true;\n this.resetList(this.dataSource, this.fields);\n return;\n }\n this.isSelected = false;\n this.activeIndex = null;\n var eventArgs = {\n preventDefaultAction: false,\n text: this.filterInput.value,\n updateData: function (dataSource, query, fields) {\n if (eventArgs.cancel) {\n return;\n }\n _this.isFiltered = true;\n _this.filterAction(dataSource, query, fields);\n },\n cancel: false\n };\n this.trigger('filtering', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n if (!this.isFiltered && !eventArgs.preventDefaultAction) {\n this.filterAction(this.dataSource, null, this.fields);\n }\n };\n AutoComplete.prototype.filterAction = function (dataSource, query, fields) {\n this.beforePopupOpen = true;\n if (this.queryString !== '' && (this.queryString.length >= this.minLength || this.isFiltered)) {\n this.resetList(dataSource, fields, query);\n }\n else {\n this.hidePopup();\n }\n };\n AutoComplete.prototype.clear = function (e, property) {\n if (isNullOrUndefined(property) || property !== 'dataSource') {\n _super.prototype.clear.call(this, e);\n }\n if (this.beforePopupOpen) {\n this.hidePopup();\n }\n };\n AutoComplete.prototype.onActionComplete = function (ulElement, list, e, isUpdated) {\n this.fixedHeaderElement = null;\n _super.prototype.onActionComplete.call(this, ulElement, list, e);\n var item = this.list.querySelector('.' + dropDownListClasses.li);\n if (!isNullOrUndefined(item)) {\n removeClass([item], dropDownListClasses.focus);\n }\n this.postBackAction();\n };\n AutoComplete.prototype.postBackAction = function () {\n if (this.autofill && !isNullOrUndefined(this.liCollections[0])) {\n var items = [this.liCollections[0]];\n var searchItem = Search(this.inputElement.value, items, 'StartsWith', this.ignoreCase);\n if (!isNullOrUndefined(searchItem.item)) {\n _super.prototype.setAutoFill.call(this, this.liCollections[0], true);\n }\n }\n };\n AutoComplete.prototype.setSelection = function (li, e) {\n if (!this.isValidLI(li)) {\n return;\n }\n if (!isNullOrUndefined(e) && e.type === 'keydown' && e.action !== 'enter' && this.isValidLI(li)) {\n var value = this.getFormattedValue(li.getAttribute('data-value'));\n this.activeIndex = this.getIndexByValue(value);\n this.setHoverList(li);\n this.selectedLI = li;\n this.setScrollPosition(e);\n if (this.autofill) {\n this.preventAutoFill = false;\n _super.prototype.setAutoFill.call(this, li);\n }\n attributes(this.inputElement, { 'aria-activedescendant': this.selectedLI ? this.selectedLI.id : null });\n }\n else {\n _super.prototype.setSelection.call(this, li, e);\n }\n };\n AutoComplete.prototype.listOption = function (dataSource, fieldsSettings) {\n var _this = this;\n var fields = _super.prototype.listOption.call(this, dataSource, fieldsSettings);\n if (isNullOrUndefined(fields.itemCreated)) {\n fields.itemCreated = function (e) {\n if (_this.highlight) {\n highlightSearch(e.item, _this.queryString, _this.ignoreCase, _this.filterType);\n }\n };\n }\n else {\n var itemCreated_1 = fields.itemCreated;\n fields.itemCreated = function (e) {\n if (_this.highlight) {\n highlightSearch(e.item, _this.queryString, _this.ignoreCase, _this.filterType);\n }\n itemCreated_1.apply(_this, [e]);\n };\n }\n return fields;\n };\n ;\n AutoComplete.prototype.showSpinner = function () {\n if (isNullOrUndefined(this.spinnerElement)) {\n this.spinnerElement = this.inputWrapper.buttons[0] || this.inputWrapper.clearButton ||\n Input.appendSpan('e-input-group-icon ' + SPINNER_CLASS, this.inputWrapper.container);\n addClass([this.spinnerElement], dropDownListClasses.disableIcon);\n createSpinner({\n target: this.spinnerElement,\n width: Browser.isDevice ? '16px' : '14px'\n });\n showSpinner(this.spinnerElement);\n }\n };\n AutoComplete.prototype.hideSpinner = function () {\n if (!isNullOrUndefined(this.spinnerElement)) {\n hideSpinner(this.spinnerElement);\n removeClass([this.spinnerElement], dropDownListClasses.disableIcon);\n if (this.spinnerElement.classList.contains(SPINNER_CLASS)) {\n detach(this.spinnerElement);\n }\n else {\n this.spinnerElement.innerHTML = '';\n }\n this.spinnerElement = null;\n }\n };\n AutoComplete.prototype.isFiltering = function () {\n return true;\n };\n AutoComplete.prototype.renderPopup = function () {\n this.list.scrollTop = 0;\n _super.prototype.renderPopup.call(this);\n };\n AutoComplete.prototype.isEditTextBox = function () {\n return true && this.inputElement.value.trim() !== '';\n };\n AutoComplete.prototype.isPopupButton = function () {\n return this.showPopupButton;\n };\n AutoComplete.prototype.isSelectFocusItem = function (element) {\n return false;\n };\n /**\n * Search the entered text and show it in the suggestion list if available.\n * @returns void.\n */\n AutoComplete.prototype.showPopup = function () {\n if (!this.enabled) {\n return;\n }\n if (this.beforePopupOpen) {\n this.refreshPopup();\n return;\n }\n this.beforePopupOpen = true;\n this.preventAutoFill = true;\n if (isNullOrUndefined(this.list)) {\n this.renderList();\n }\n else {\n this.resetList(this.dataSource, this.fields);\n }\n };\n /**\n * Hides the popup if it is in open state.\n * @returns void.\n */\n AutoComplete.prototype.hidePopup = function () {\n _super.prototype.hidePopup.call(this);\n this.activeIndex = -1;\n };\n /**\n * Dynamically change the value of properties.\n * @private\n */\n AutoComplete.prototype.onPropertyChanged = function (newProp, oldProp) {\n this.setUpdateInitial(['query', 'dataSource'], newProp);\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'showPopupButton':\n if (this.showPopupButton) {\n var button = Input.appendSpan(dropDownListClasses.icon, this.inputWrapper.container);\n this.inputWrapper.buttons[0] = button;\n EventHandler.add(this.inputWrapper.buttons[0], 'click', this.dropDownClick, this);\n }\n else {\n detach(this.inputWrapper.buttons[0]);\n this.inputWrapper.buttons[0] = null;\n }\n break;\n default:\n var atcProps = void 0;\n atcProps = this.getPropObject(prop, newProp, oldProp);\n _super.prototype.onPropertyChanged.call(this, atcProps.newProperty, atcProps.oldProperty);\n break;\n }\n }\n };\n /**\n * Return the module name of this component.\n * @private\n */\n AutoComplete.prototype.getModuleName = function () {\n return 'autocomplete';\n };\n /**\n * To initialize the control rendering\n * @private\n */\n AutoComplete.prototype.render = function () {\n _super.prototype.render.call(this);\n };\n ;\n __decorate([\n Complex({ value: null, iconCss: null, groupBy: null }, FieldSettings)\n ], AutoComplete.prototype, \"fields\", void 0);\n __decorate([\n Property(true)\n ], AutoComplete.prototype, \"ignoreCase\", void 0);\n __decorate([\n Property(false)\n ], AutoComplete.prototype, \"showPopupButton\", void 0);\n __decorate([\n Property(false)\n ], AutoComplete.prototype, \"highlight\", void 0);\n __decorate([\n Property(20)\n ], AutoComplete.prototype, \"suggestionCount\", void 0);\n __decorate([\n Property({})\n ], AutoComplete.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(null)\n ], AutoComplete.prototype, \"query\", void 0);\n __decorate([\n Property(1)\n ], AutoComplete.prototype, \"minLength\", void 0);\n __decorate([\n Property('Contains')\n ], AutoComplete.prototype, \"filterType\", void 0);\n __decorate([\n Event()\n ], AutoComplete.prototype, \"filtering\", void 0);\n __decorate([\n Property(null)\n ], AutoComplete.prototype, \"index\", void 0);\n __decorate([\n Property('Never')\n ], AutoComplete.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property(null)\n ], AutoComplete.prototype, \"valueTemplate\", void 0);\n __decorate([\n Property(null)\n ], AutoComplete.prototype, \"filterBarPlaceholder\", void 0);\n __decorate([\n Property(false)\n ], AutoComplete.prototype, \"allowFiltering\", void 0);\n __decorate([\n Property(null)\n ], AutoComplete.prototype, \"text\", void 0);\n AutoComplete = __decorate([\n NotifyPropertyChanges\n ], AutoComplete);\n return AutoComplete;\n}(ComboBox));\nexport { AutoComplete };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/// \nimport { DropDownBase, dropDownBaseClasses } from '../drop-down-base/drop-down-base';\nimport { Popup, createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { attributes, setValue } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, extend } from '@syncfusion/ej2-base';\nimport { EventHandler, Property, Event, compile, L10n } from '@syncfusion/ej2-base';\nimport { Animation, Browser, prepend } from '@syncfusion/ej2-base';\nimport { Search } from '../common/incremental-search';\nimport { createElement, append, addClass, removeClass, setStyleAttribute, closest, detach, remove } from '@syncfusion/ej2-base';\nimport { getUniqueID, formatUnit, isNullOrUndefined, isUndefined } from '@syncfusion/ej2-base';\n/* tslint:disable */\nimport { DataManager, Query, Predicate } from '@syncfusion/ej2-data';\nimport { createFloatLabel, removeFloating, floatLabelFocus, floatLabelBlur } from './float-label';\n/* tslint:enable */\nvar FOCUS = 'e-input-focus';\nvar DISABLED = 'e-disabled';\nvar OVER_ALL_WRAPPER = 'e-multiselect e-input-group';\nvar ELEMENT_WRAPPER = 'e-multi-select-wrapper';\nvar ELEMENT_MOBILE_WRAPPER = 'e-mob-wrapper';\nvar HIDE_LIST = 'e-hide-listitem';\nvar DELIMITER_VIEW = 'e-delim-view';\nvar CHIP_WRAPPER = 'e-chips-collection';\nvar CHIP = 'e-chips';\nvar CHIP_CONTENT = 'e-chipcontent';\nvar CHIP_CLOSE = 'e-chips-close';\nvar CHIP_SELECTED = 'e-chip-selected';\nvar SEARCHBOX_WRAPPER = 'e-searcher';\nvar DELIMITER_VIEW_WRAPPER = 'e-delimiter';\nvar ZERO_SIZE = 'e-zero-size';\nvar REMAIN_WRAPPER = 'e-remain';\nvar CLOSEICON_CLASS = 'e-chips-close e-close-hooker';\nvar DELIMITER_WRAPPER = 'e-delim-values';\nvar POPUP_WRAPPER = 'e-ddl e-popup e-multi-select-list-wrapper';\nvar INPUT_ELEMENT = 'e-dropdownbase';\nvar RTL_CLASS = 'e-rtl';\nvar CLOSE_ICON_HIDE = 'e-close-icon-hide';\nvar MOBILE_CHIP = 'e-mob-chip';\nvar FOOTER = 'e-ddl-footer';\nvar HEADER = 'e-ddl-header';\nvar DISABLE_ICON = 'e-ddl-disable-icon';\nvar SPINNER_CLASS = 'e-ms-spinner-icon';\nvar HIDDEN_ELEMENT = 'e-multi-hidden';\nvar destroy = 'destroy';\nvar dropdownIcon = 'e-input-group-icon e-ddl-icon';\nvar iconAnimation = 'e-icon-anim';\n/**\n * The Multiselect allows the user to pick a more than one value from list of predefined values.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar MultiSelect = /** @class */ (function (_super) {\n __extends(MultiSelect, _super);\n /**\n * Constructor for creating the DropDownList widget.\n */\n function MultiSelect(option, element) {\n var _this = _super.call(this, option, element) || this;\n _this.isValidKey = false;\n _this.scrollFocusStatus = false;\n _this.keyDownStatus = false;\n return _this;\n }\n ;\n MultiSelect.prototype.enableRTL = function (state) {\n if (state) {\n this.overAllWrapper.classList.add(RTL_CLASS);\n }\n else {\n this.overAllWrapper.classList.remove(RTL_CLASS);\n }\n if (this.popupObj) {\n this.popupObj.enableRtl = state;\n this.popupObj.dataBind();\n }\n };\n MultiSelect.prototype.requiredModules = function () {\n var modules = [];\n if (this.mode === 'CheckBox') {\n this.allowCustomValue = false;\n this.hideSelectedItem = false;\n this.closePopupOnSelect = false;\n this.allowFiltering = true;\n modules.push({\n member: 'CheckBoxSelection',\n args: [this]\n });\n }\n return modules;\n };\n MultiSelect.prototype.updateHTMLAttribute = function () {\n if (Object.keys(this.htmlAttributes).length) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var htmlAttr = _a[_i];\n switch (htmlAttr) {\n case 'class':\n this.overAllWrapper.classList.add(this.htmlAttributes[htmlAttr]);\n this.popupWrapper.classList.add(this.htmlAttributes[htmlAttr]);\n break;\n case 'disabled':\n this.enable(false);\n break;\n case 'placeholder':\n this.inputElement.setAttribute(htmlAttr, this.htmlAttributes[htmlAttr]);\n break;\n default:\n var defaultAttr = ['id'];\n var validateAttr = ['name', 'required', 'aria-required', 'form'];\n var containerAttr = ['title', 'role', 'style', 'class'];\n if (defaultAttr.indexOf(htmlAttr) > -1) {\n this.element.setAttribute(htmlAttr, this.htmlAttributes[htmlAttr]);\n }\n else if (validateAttr.indexOf(htmlAttr) > -1) {\n this.hiddenElement.setAttribute(htmlAttr, this.htmlAttributes[htmlAttr]);\n }\n else if (containerAttr.indexOf(htmlAttr) > -1) {\n this.overAllWrapper.setAttribute(htmlAttr, this.htmlAttributes[htmlAttr]);\n }\n else {\n this.inputElement.setAttribute(htmlAttr, this.htmlAttributes[htmlAttr]);\n }\n break;\n }\n }\n }\n };\n MultiSelect.prototype.updateReadonly = function (state) {\n if (state || this.mode === 'CheckBox') {\n this.inputElement.setAttribute('readonly', 'true');\n }\n else {\n this.inputElement.removeAttribute('readonly');\n }\n };\n MultiSelect.prototype.updateClearButton = function (state) {\n if (state) {\n if (this.overAllClear.parentNode) {\n this.overAllClear.style.display = '';\n }\n else {\n this.componentWrapper.appendChild(this.overAllClear);\n }\n this.componentWrapper.classList.remove(CLOSE_ICON_HIDE);\n }\n else {\n this.overAllClear.style.display = 'none';\n this.componentWrapper.classList.add(CLOSE_ICON_HIDE);\n }\n };\n MultiSelect.prototype.updateCssClass = function () {\n if (this.cssClass) {\n this.popupWrapper.classList.add(this.cssClass);\n this.overAllWrapper.classList.add(this.cssClass);\n }\n };\n MultiSelect.prototype.onPopupShown = function () {\n if (Browser.isDevice && (this.mode === 'CheckBox' && this.allowFiltering)) {\n var proxy_1 = this;\n window.onpopstate = function () {\n proxy_1.hidePopup();\n };\n history.pushState({}, '');\n }\n var eventArgs = { popup: this.popupObj, cancel: false };\n this.trigger('open', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n var animModel = { name: 'FadeIn', duration: 100 };\n this.focusAtFirstListItem();\n document.body.appendChild(this.popupObj.element);\n this.refreshPopup();\n if (this.mode === 'CheckBox') {\n addClass([this.overAllWrapper], [iconAnimation]);\n }\n this.popupObj.show(animModel);\n attributes(this.inputElement, { 'aria-expanded': 'true' });\n if (!this.isFirstClick) {\n var ulElement = this.list.querySelector('ul');\n if (ulElement) {\n this.mainList = ulElement.cloneNode ? ulElement.cloneNode(true) : ulElement;\n }\n this.isFirstClick = true;\n }\n this.refreshListItems(null);\n this.notify('reOrder', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', e: this });\n };\n MultiSelect.prototype.focusAtFirstListItem = function () {\n if (this.ulElement && this.ulElement.querySelector('li.'\n + dropDownBaseClasses.li)) {\n var element = void 0;\n if (this.mode === 'CheckBox') {\n element = this.list.querySelector('li.'\n + dropDownBaseClasses.li + ':not(.'\n + HIDE_LIST + ')');\n }\n else {\n element = this.ulElement.querySelector('li.'\n + dropDownBaseClasses.li + ':not(.'\n + HIDE_LIST + ')');\n }\n if (element !== null) {\n this.removeFocus();\n this.addListFocus(element);\n }\n }\n };\n MultiSelect.prototype.focusAtLastListItem = function (data) {\n var activeElement;\n if (data) {\n activeElement = Search(data, this.liCollections, 'StartsWith', this.ignoreCase);\n }\n else {\n if (this.value && this.value.length) {\n Search(this.value[this.value.length - 1], this.liCollections, 'StartsWith', this.ignoreCase);\n }\n else {\n activeElement = null;\n }\n }\n if (activeElement && activeElement.item !== null) {\n this.addListFocus(activeElement.item);\n this.scrollBottom(activeElement.item, activeElement.index);\n }\n };\n MultiSelect.prototype.getAriaAttributes = function () {\n var ariaAttributes = {\n 'aria-disabled': 'false',\n 'aria-owns': this.element.id + '_options',\n 'role': 'listbox',\n 'aria-multiselectable': 'true',\n 'aria-activedescendant': 'null',\n 'aria-haspopup': 'true',\n 'aria-expanded': 'false'\n };\n return ariaAttributes;\n };\n MultiSelect.prototype.updateListARIA = function () {\n attributes(this.ulElement, { 'id': this.element.id + '_options', 'role': 'listbox', 'aria-hidden': 'false' });\n var disableStatus = (this.inputElement.disabled) ? true : false;\n attributes(this.inputElement, this.getAriaAttributes());\n if (disableStatus) {\n attributes(this.inputElement, { 'aria-disabled': 'true' });\n }\n var li;\n li = this.list.querySelectorAll('li.' + dropDownBaseClasses.li);\n var temp = li.length;\n if (li && li.length) {\n while (temp > 0) {\n if (li[temp - 1].getAttribute('aria-selected') !== 'true') {\n li[temp - 1].setAttribute('aria-selected', 'false');\n }\n temp--;\n }\n }\n };\n MultiSelect.prototype.removelastSelection = function (e) {\n var elements;\n elements = this.chipCollectionWrapper.querySelectorAll('span.' + CHIP);\n var value = elements[elements.length - 1].getAttribute('data-value');\n if (!isNullOrUndefined(this.value)) {\n this.tempValues = this.value.slice();\n }\n this.removeValue(value, e);\n this.removeChipSelection();\n this.updateDelimeter(this.delimiterChar);\n this.makeTextBoxEmpty();\n if (this.mainList && this.listData) {\n var list = this.mainList.cloneNode ? this.mainList.cloneNode(true) : this.mainList;\n this.onActionComplete(list, this.mainData);\n this.refreshSelection();\n }\n //this.focusAtLastListItem(value);\n };\n MultiSelect.prototype.onActionFailure = function (e) {\n _super.prototype.onActionFailure.call(this, e);\n this.renderPopup();\n this.onPopupShown();\n };\n MultiSelect.prototype.targetElement = function () {\n this.targetInputElement = this.inputElement;\n if (this.mode === 'CheckBox') {\n this.notify('targetElement', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox' });\n }\n return this.targetInputElement.value;\n };\n MultiSelect.prototype.onActionComplete = function (ulElement, list, e, isUpdated) {\n _super.prototype.onActionComplete.call(this, ulElement, list, e);\n if (this.mode === 'CheckBox' && this.showSelectAll) {\n this.notify('selectAll', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox' });\n }\n if (!this.mainList && !this.mainData) {\n this.mainList = ulElement.cloneNode ? ulElement.cloneNode(true) : ulElement;\n this.mainData = list;\n this.mainListCollection = this.liCollections;\n }\n else if (!isNullOrUndefined(this.mainData) && this.mainData.length === 0) {\n this.mainData = list;\n }\n if ((this.remoteCustomValue || list.length <= 0) && this.allowCustomValue && this.inputFocus && this.allowFiltering) {\n this.checkForCustomValue(this.tempQuery, this.fields);\n return;\n }\n if (this.value && this.value.length) {\n this.refreshSelection();\n }\n this.updateListARIA();\n this.unwireListEvents();\n this.wireListEvents();\n if (!isNullOrUndefined(this.setInitialValue)) {\n this.setInitialValue();\n }\n if (!isNullOrUndefined(this.selectAllAction)) {\n this.selectAllAction();\n }\n if (this.setDynValue) {\n this.initialValueUpdate();\n this.initialUpdate();\n this.refreshPlaceHolder();\n this.updateValueState(null, this.value, null);\n }\n this.renderPopup();\n this.refreshPopup();\n if (this.beforePopupOpen) {\n this.beforePopupOpen = false;\n this.onPopupShown();\n }\n };\n MultiSelect.prototype.refreshSelection = function () {\n var value;\n var element;\n var className = this.hideSelectedItem ?\n HIDE_LIST :\n dropDownBaseClasses.selected;\n if (!isNullOrUndefined(this.value)) {\n for (var index = 0; !isNullOrUndefined(this.value[index]); index++) {\n value = this.value[index];\n element = this.ulElement.querySelector('li[data-value=\"' + value + '\"]');\n if (element) {\n addClass([element], className);\n if (this.hideSelectedItem && element.previousSibling\n && element.previousElementSibling.classList.contains(dropDownBaseClasses.group)\n && (!element.nextElementSibling ||\n element.nextElementSibling.classList.contains(dropDownBaseClasses.group))) {\n addClass([element.previousElementSibling], className);\n }\n if (this.hideSelectedItem && this.fields.groupBy && !element.previousElementSibling.classList.contains(HIDE_LIST)) {\n this.hideGroupItem(value);\n }\n if (this.hideSelectedItem && element.classList.contains(dropDownBaseClasses.focus)) {\n removeClass([element], dropDownBaseClasses.focus);\n var listEle = element.parentElement.querySelectorAll('.' +\n dropDownBaseClasses.li + ':not(.' + HIDE_LIST + ')');\n if (listEle.length > 0) {\n addClass([listEle[0]], dropDownBaseClasses.focus);\n }\n else {\n this.l10nUpdate();\n addClass([this.list], dropDownBaseClasses.noData);\n }\n }\n element.setAttribute('aria-selected', 'true');\n if (this.mode === 'CheckBox' && element.classList.contains('e-active')) {\n var ariaValue = element.firstElementChild.getAttribute('aria-checked');\n if (isNullOrUndefined(ariaValue) || ariaValue === 'false') {\n var args = {\n module: 'CheckBoxSelection',\n enable: this.mode === 'CheckBox',\n li: element,\n e: null\n };\n this.notify('updatelist', args);\n }\n }\n }\n }\n }\n this.checkSelectAll();\n this.checkMaxSelection();\n };\n MultiSelect.prototype.hideGroupItem = function (value) {\n var element;\n var element1;\n var className = this.hideSelectedItem ?\n HIDE_LIST :\n dropDownBaseClasses.selected;\n element1 = element = this.ulElement.querySelector('li[data-value=\"' + value + '\"]');\n var i = 0;\n var j = 0;\n var temp = true;\n var temp1 = true;\n do {\n if (element && element.previousElementSibling\n && (!element.previousElementSibling.classList.contains(HIDE_LIST) &&\n element.previousElementSibling.classList.contains(dropDownBaseClasses.li))) {\n temp = false;\n }\n if (!temp || !element || (element.previousElementSibling\n && element.previousElementSibling.classList.contains(dropDownBaseClasses.group))) {\n i = 10;\n }\n else {\n element = element.previousElementSibling;\n }\n if (element1 && element1.nextElementSibling\n && (!element1.nextElementSibling.classList.contains(HIDE_LIST) &&\n element1.nextElementSibling.classList.contains(dropDownBaseClasses.li))) {\n temp1 = false;\n }\n if (!temp1 || !element1 || (element1.nextElementSibling\n && element1.nextElementSibling.classList.contains(dropDownBaseClasses.group))) {\n j = 10;\n }\n else {\n element1 = element1.nextElementSibling;\n }\n } while (i < 10 || j < 10);\n if (temp && temp1 && !element.previousElementSibling.classList.contains(HIDE_LIST)) {\n addClass([element.previousElementSibling], className);\n }\n else if (temp && temp1 && element.previousElementSibling.classList.contains(HIDE_LIST)) {\n removeClass([element.previousElementSibling], className);\n }\n };\n MultiSelect.prototype.checkSelectAll = function () {\n var searchCount = this.list.querySelectorAll('li.' + dropDownBaseClasses.li).length;\n var searchActiveCount = this.list.querySelectorAll('li.' + dropDownBaseClasses.selected).length;\n if ((searchCount === searchActiveCount) && (this.mode === 'CheckBox' && this.showSelectAll)) {\n this.notify('checkSelectAll', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', value: 'check' });\n }\n if ((searchCount !== searchActiveCount) && (this.mode === 'CheckBox' && this.showSelectAll)) {\n this.notify('checkSelectAll', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', value: 'uncheck' });\n }\n };\n MultiSelect.prototype.openClick = function (e) {\n if (!this.openOnClick && this.mode !== 'CheckBox') {\n if (this.targetElement() !== '') {\n this.showPopup();\n }\n else {\n this.hidePopup();\n }\n }\n else if (!this.openOnClick && this.mode === 'CheckBox' && !this.isPopupOpen()) {\n this.showPopup();\n }\n };\n MultiSelect.prototype.KeyUp = function (e) {\n var _this = this;\n if (this.mode === 'CheckBox' && !this.openOnClick) {\n var char = String.fromCharCode(e.keyCode);\n var isWordCharacter = char.match(/\\w/);\n if (!isNullOrUndefined(isWordCharacter)) {\n this.isValidKey = true;\n }\n }\n this.isValidKey = (this.isPopupOpen() && e.keyCode === 8) || this.isValidKey;\n if (this.isValidKey) {\n this.isValidKey = false;\n this.expandTextbox();\n this.showOverAllClear();\n switch (e.keyCode) {\n default:\n if (!this.isPopupOpen() && this.openOnClick) {\n this.showPopup();\n }\n this.openClick(e);\n if (this.checkTextLength() && !this.allowFiltering && (e.keyCode !== 8)) {\n this.focusAtFirstListItem();\n }\n else {\n var text = this.targetElement();\n this.keyCode = e.keyCode;\n if (this.allowFiltering) {\n var eventArgs_1 = {\n preventDefaultAction: false,\n text: this.targetElement(),\n updateData: function (dataSource, query, fields) {\n if (eventArgs_1.cancel) {\n return;\n }\n _this.isFiltered = true;\n _this.remoteFilterAction = true;\n _this.dataUpdater(dataSource, query, fields);\n },\n event: e,\n cancel: false\n };\n this.trigger('filtering', eventArgs_1);\n if (eventArgs_1.cancel) {\n return;\n }\n if (!this.isFiltered && !eventArgs_1.preventDefaultAction) {\n this.filterAction = true;\n this.dataUpdater(this.dataSource, null, this.fields);\n }\n }\n else if (this.allowCustomValue) {\n var query = new Query();\n query = (text !== '') ? query.where(this.fields.text, 'startswith', text, this.ignoreCase, this.ignoreAccent) : query;\n this.dataUpdater(this.mainData, query, this.fields);\n break;\n }\n else {\n var liCollections = void 0;\n liCollections = this.list.querySelectorAll('li.' + dropDownBaseClasses.li + ':not(.e-hide-listitem)');\n var activeElement = Search(this.targetElement(), liCollections, 'StartsWith', this.ignoreCase);\n if (activeElement && activeElement.item !== null) {\n this.addListFocus(activeElement.item);\n this.list.scrollTop =\n activeElement.item.getBoundingClientRect().height * activeElement.index;\n }\n else if (this.targetElement() !== '') {\n this.removeFocus();\n }\n else {\n this.focusAtFirstListItem();\n }\n }\n }\n }\n }\n };\n MultiSelect.prototype.getQuery = function (query) {\n var filterQuery = query ? query.clone() : this.query ? this.query.clone() : new Query();\n if (this.filterAction) {\n if (this.targetElement() !== null) {\n var dataType = this.typeOfData(this.dataSource).typeof;\n if (!(this.dataSource instanceof DataManager) && dataType === 'string' || dataType === 'number') {\n filterQuery.where('', 'startswith', this.targetElement(), this.ignoreCase, this.ignoreAccent);\n }\n else {\n var fields = this.fields;\n filterQuery.where(!isNullOrUndefined(fields.text) ? fields.text : '', 'startswith', this.targetElement(), this.ignoreCase, this.ignoreAccent);\n }\n }\n return filterQuery;\n }\n else {\n if (this.dataSource instanceof DataManager && !isNullOrUndefined(this.value) && !this.remoteFilterAction) {\n var predicate = void 0;\n var field = isNullOrUndefined(this.fields.value) ? this.fields.text : this.fields.value;\n for (var i = 0; i < this.value.length; i++) {\n if (i === 0) {\n predicate = new Predicate(field, 'equal', this.value[i]);\n }\n else {\n predicate = predicate.or(field, 'equal', this.value[i]);\n }\n }\n return new Query().where(predicate);\n }\n else {\n return query ? query : this.query ? this.query : new Query();\n }\n }\n };\n MultiSelect.prototype.dataUpdater = function (dataSource, query, fields) {\n if (this.targetElement().trim() === '') {\n var list = this.mainList.cloneNode ? this.mainList.cloneNode(true) : this.mainList;\n if (this.backCommand) {\n this.remoteCustomValue = false;\n this.onActionComplete(list, this.mainData);\n if (this.value && this.value.length) {\n this.refreshSelection();\n }\n if (this.keyCode !== 8) {\n this.focusAtFirstListItem();\n }\n this.notify('reOrder', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', e: this });\n }\n }\n else {\n this.resetList(dataSource, fields, query);\n if (this.allowCustomValue) {\n if (!(dataSource instanceof DataManager)) {\n this.checkForCustomValue(query, fields);\n }\n else {\n this.remoteCustomValue = true;\n this.tempQuery = query;\n }\n }\n }\n this.refreshPopup();\n };\n MultiSelect.prototype.checkForCustomValue = function (query, fields) {\n var dataChecks = !this.getValueByText(this.inputElement.value, this.ignoreCase);\n if (this.allowCustomValue && dataChecks) {\n var value = this.inputElement.value;\n var customData = (!isNullOrUndefined(this.mainData) && this.mainData.length > 0) ?\n this.mainData[0] : this.mainData;\n if (typeof (customData) !== 'string') {\n var dataItem = {};\n setValue(fields.text, value, dataItem);\n setValue(fields.value, value, dataItem);\n var tempData = JSON.parse(JSON.stringify(this.listData));\n tempData.splice(0, 0, dataItem);\n this.resetList(tempData, fields ? fields : this.fields, query);\n }\n else {\n var tempData = [this.inputElement.value];\n this.resetList(tempData, fields ? fields : this.fields);\n }\n }\n if (this.value && this.value.length) {\n this.refreshSelection();\n }\n };\n MultiSelect.prototype.getNgDirective = function () {\n return 'EJS-MULTISELECT';\n };\n MultiSelect.prototype.wrapperClick = function (e) {\n this.setDynValue = false;\n if (this.readonly || !this.enabled) {\n return;\n }\n if (e.target === this.overAllClear) {\n e.preventDefault();\n return;\n }\n if (!this.inputFocus && this.mode !== 'CheckBox') {\n this.inputElement.focus();\n }\n if (this.mode === 'CheckBox') {\n this.focusIn();\n }\n if (e.target && e.target.classList.toString().indexOf(CHIP_CLOSE) !== -1) {\n if (this.isPopupOpen()) {\n this.refreshPopup();\n }\n return;\n }\n if (!this.isPopupOpen() && this.openOnClick) {\n this.showPopup();\n }\n else {\n this.hidePopup();\n if (this.mode === 'CheckBox') {\n this.focusIn();\n }\n }\n e.preventDefault();\n };\n MultiSelect.prototype.enable = function (state) {\n if (state) {\n this.overAllWrapper.classList.remove(DISABLED);\n this.inputElement.removeAttribute('disabled');\n attributes(this.inputElement, { 'aria-disabled': 'false' });\n }\n else {\n this.overAllWrapper.classList.add(DISABLED);\n this.inputElement.setAttribute('disabled', 'true');\n attributes(this.inputElement, { 'aria-disabled': 'true' });\n }\n if (this.enabled !== state) {\n this.enabled = state;\n }\n this.hidePopup();\n };\n MultiSelect.prototype.onBlur = function (eve) {\n var target;\n if (!isNullOrUndefined(eve)) {\n target = eve.relatedTarget;\n }\n if (this.popupObj && document.body.contains(this.popupObj.element) && this.popupObj.element.contains(target)) {\n if (this.mode !== 'CheckBox') {\n this.inputElement.focus();\n }\n return;\n }\n if (this.mode === 'CheckBox' && Browser.isIE && !isNullOrUndefined(eve)) {\n this.inputFocus = false;\n this.overAllWrapper.classList.remove(FOCUS);\n return;\n }\n if (this.scrollFocusStatus) {\n eve.preventDefault();\n this.inputElement.focus();\n this.scrollFocusStatus = false;\n return;\n }\n this.inputFocus = false;\n this.overAllWrapper.classList.remove(FOCUS);\n if (this.mode !== 'Box' && this.mode !== 'CheckBox') {\n this.refreshListItems(null);\n this.updateDelimView();\n }\n this.updateValueState(eve, this.value, this.tempValues);\n this.dispatchEvent(this.hiddenElement, 'change');\n this.overAllClear.style.display = 'none';\n if (this.isPopupOpen()) {\n this.hidePopup();\n }\n this.makeTextBoxEmpty();\n this.trigger('blur');\n this.focused = true;\n if (Browser.isDevice && this.mode !== 'Delimiter' && this.mode !== 'CheckBox') {\n this.removeChipFocus();\n }\n this.removeChipSelection();\n this.refreshInputHight();\n floatLabelBlur(this.overAllWrapper, this.componentWrapper, this.value, this.floatLabelType, this.placeholder);\n this.refreshPlaceHolder();\n };\n MultiSelect.prototype.refreshInputHight = function () {\n if (!this.value || !this.value.length) {\n this.searchWrapper.classList.remove(ZERO_SIZE);\n }\n else {\n this.searchWrapper.classList.add(ZERO_SIZE);\n }\n };\n MultiSelect.prototype.validateValues = function (newValue, oldValue) {\n return JSON.stringify(newValue.slice().sort()) !== JSON.stringify(oldValue.slice().sort());\n };\n MultiSelect.prototype.updateValueState = function (event, newVal, oldVal) {\n var newValue = newVal ? newVal : [];\n var oldValue = oldVal ? oldVal : [];\n if (this.initStatus && this.validateValues(newValue, oldValue)) {\n var eventArgs = {\n e: event,\n oldValue: oldVal,\n value: newVal,\n isInteracted: event ? true : false,\n element: this.element\n };\n this.trigger('change', eventArgs);\n }\n };\n MultiSelect.prototype.getPagingCount = function () {\n var height = this.list.classList.contains(dropDownBaseClasses.noData) ? null :\n getComputedStyle(this.getItems()[0], null).getPropertyValue('height');\n return Math.round(this.list.getBoundingClientRect().height / parseInt(height, 10));\n };\n MultiSelect.prototype.pageUpSelection = function (steps) {\n var collection = this.list.querySelectorAll('li.'\n + dropDownBaseClasses.li + ':not(.' + HIDE_LIST + ')' + ':not(.e-reorder-hide)');\n var previousItem;\n previousItem = steps >= 0 ? collection[steps + 1] : collection[0];\n this.addListFocus(previousItem);\n this.scrollBottom(previousItem, this.getIndexByValue(previousItem.getAttribute('data-value')));\n };\n ;\n MultiSelect.prototype.pageDownSelection = function (steps) {\n var list = this.getItems();\n var collection = this.list.querySelectorAll('li.'\n + dropDownBaseClasses.li + ':not(.' + HIDE_LIST + ')' + ':not(.e-reorder-hide)');\n var previousItem;\n previousItem = steps <= collection.length ? collection[steps - 1] : collection[collection.length - 1];\n this.addListFocus(previousItem);\n this.scrollBottom(previousItem, this.getIndexByValue(previousItem.getAttribute('data-value')));\n };\n MultiSelect.prototype.getItems = function () {\n if (!this.list) {\n _super.prototype.render.call(this);\n }\n return this.ulElement ? this.ulElement.querySelectorAll('.' + dropDownBaseClasses.li\n + ':not(.' + HIDE_LIST + ')') : null;\n };\n MultiSelect.prototype.focusIn = function () {\n if (this.enabled && !this.readonly) {\n this.showOverAllClear();\n this.inputFocus = true;\n if (!this.value) {\n this.tempValues = this.value;\n }\n else {\n this.tempValues = this.value.slice();\n }\n if (this.value && this.value.length) {\n if (this.mode !== 'Delimiter' && this.mode !== 'CheckBox') {\n this.chipCollectionWrapper.style.display = '';\n }\n else {\n this.showDelimWrapper();\n }\n if (this.mode !== 'CheckBox') {\n this.viewWrapper.style.display = 'none';\n }\n }\n if (this.mode !== 'CheckBox') {\n this.searchWrapper.classList.remove(ZERO_SIZE);\n }\n if (this.focused) {\n this.inputElement.focus();\n this.trigger('focus');\n this.focused = false;\n }\n if (!this.overAllWrapper.classList.contains(FOCUS)) {\n this.overAllWrapper.classList.add(FOCUS);\n }\n floatLabelFocus(this.overAllWrapper, this.componentWrapper);\n if (this.isPopupOpen()) {\n this.refreshPopup();\n }\n return true;\n }\n else {\n return false;\n }\n };\n MultiSelect.prototype.showDelimWrapper = function () {\n if (this.mode === 'CheckBox') {\n this.viewWrapper.style.display = '';\n }\n else {\n this.delimiterWrapper.style.display = '';\n }\n this.componentWrapper.classList.add(DELIMITER_VIEW_WRAPPER);\n };\n MultiSelect.prototype.hideDelimWrapper = function () {\n this.delimiterWrapper.style.display = 'none';\n this.componentWrapper.classList.remove(DELIMITER_VIEW_WRAPPER);\n };\n MultiSelect.prototype.expandTextbox = function () {\n var size = 5;\n if (this.placeholder) {\n size = size > this.inputElement.placeholder.length ? size : this.inputElement.placeholder.length;\n }\n if (this.inputElement.value.length > size) {\n this.inputElement.size = this.inputElement.value.length;\n }\n else {\n this.inputElement.size = size;\n }\n };\n MultiSelect.prototype.isPopupOpen = function () {\n return ((this.popupWrapper !== null) && (this.popupWrapper.parentElement !== null));\n };\n MultiSelect.prototype.refreshPopup = function () {\n if (this.popupObj && this.mobFilter) {\n this.popupObj.setProperties({ width: this.calcPopupWidth() });\n this.popupObj.refreshPosition(this.overAllWrapper);\n }\n };\n MultiSelect.prototype.checkTextLength = function () {\n return this.targetElement().length < 1;\n };\n MultiSelect.prototype.popupKeyActions = function (keyCode) {\n switch (keyCode) {\n case 38:\n this.hidePopup();\n if (this.mode === 'CheckBox') {\n this.inputElement.focus();\n }\n break;\n case 40:\n if (!this.isPopupOpen()) {\n this.showPopup();\n }\n break;\n }\n };\n MultiSelect.prototype.updateAriaAttribute = function () {\n var focusedItem = this.list.querySelector('.' + dropDownBaseClasses.focus);\n if (!isNullOrUndefined(focusedItem)) {\n this.inputElement.setAttribute('aria-activedescendant', focusedItem.id);\n }\n };\n MultiSelect.prototype.onKeyDown = function (e) {\n if (this.readonly || !this.enabled && this.mode !== 'CheckBox') {\n return;\n }\n this.keyDownStatus = true;\n if (e.keyCode > 111 && e.keyCode < 124) {\n return;\n }\n if (e.altKey) {\n this.popupKeyActions(e.keyCode);\n e.preventDefault();\n return;\n }\n else if (this.isPopupOpen()) {\n var focusedItem = this.list.querySelector('.' + dropDownBaseClasses.focus);\n var activeIndex = void 0;\n switch (e.keyCode) {\n case 36:\n case 35: break;\n case 33:\n e.preventDefault();\n if (focusedItem) {\n this.getIndexByValue(focusedItem.getAttribute('data-value'));\n this.pageUpSelection(activeIndex - this.getPagingCount());\n this.updateAriaAttribute();\n }\n return;\n case 34:\n e.preventDefault();\n if (focusedItem) {\n this.getIndexByValue(focusedItem.getAttribute('data-value'));\n this.pageDownSelection(activeIndex + this.getPagingCount());\n this.updateAriaAttribute();\n }\n return;\n case 38:\n e.preventDefault();\n this.moveByList(-1);\n this.updateAriaAttribute();\n break;\n case 40:\n e.preventDefault();\n this.moveByList(1);\n this.updateAriaAttribute();\n break;\n case 27:\n e.preventDefault();\n this.hidePopup();\n if (this.mode === 'CheckBox') {\n this.inputElement.focus();\n }\n return;\n case 13:\n e.preventDefault();\n if (this.mode !== 'CheckBox') {\n this.selectByKey(e);\n }\n return;\n case 32:\n if (this.mode === 'CheckBox') {\n e.preventDefault();\n this.selectByKey(e);\n }\n return;\n case 9:\n e.preventDefault();\n this.hidePopup();\n this.inputElement.focus();\n this.overAllWrapper.classList.add(FOCUS);\n }\n }\n else {\n switch (e.keyCode) {\n case 13:\n case 9:\n case 16:\n case 17:\n case 20:\n return;\n case 40:\n if (this.openOnClick) {\n this.showPopup();\n }\n break;\n case 27:\n e.preventDefault();\n this.escapeAction();\n return;\n }\n }\n if (this.checkTextLength()) {\n this.keyNavigation(e);\n }\n if (this.mode === 'CheckBox' && this.enableSelectionOrder) {\n this.checkBackCommand(e);\n }\n this.expandTextbox();\n this.refreshPopup();\n };\n MultiSelect.prototype.checkBackCommand = function (e) {\n if (e.keyCode === 8 && this.targetElement() === '') {\n this.backCommand = false;\n }\n else {\n this.backCommand = true;\n }\n };\n MultiSelect.prototype.keyNavigation = function (e) {\n if ((this.mode !== 'Delimiter' && this.mode !== 'CheckBox') && this.value && this.value.length) {\n switch (e.keyCode) {\n case 37://left arrow \n e.preventDefault();\n this.moveBy(-1, e);\n break;\n case 39://right arrow \n e.preventDefault();\n this.moveBy(1, e);\n break;\n case 8:\n this.removelastSelection(e);\n break;\n case 46://del\n this.removeSelectedChip(e);\n break;\n }\n }\n else if (e.keyCode === 8 && this.mode === 'Delimiter') {\n if (this.value && this.value.length) {\n e.preventDefault();\n var temp = this.value[this.value.length - 1];\n this.removeValue(temp, e);\n this.updateDelimeter(this.delimiterChar);\n this.focusAtLastListItem(temp);\n }\n }\n };\n MultiSelect.prototype.selectByKey = function (e) {\n this.removeChipSelection();\n this.selectListByKey(e);\n if (this.hideSelectedItem) {\n this.focusAtFirstListItem();\n }\n };\n MultiSelect.prototype.escapeAction = function () {\n var temp = this.tempValues ? this.tempValues.slice() : [];\n if (this.value && this.validateValues(this.value, temp)) {\n this.value = temp;\n this.initialValueUpdate();\n if (this.mode !== 'Delimiter' && this.mode !== 'CheckBox') {\n this.chipCollectionWrapper.style.display = '';\n }\n else {\n this.showDelimWrapper();\n }\n this.refreshPlaceHolder();\n if (this.value.length) {\n this.showOverAllClear();\n }\n else {\n this.hideOverAllClear();\n }\n }\n this.makeTextBoxEmpty();\n };\n MultiSelect.prototype.scrollBottom = function (selectedLI, activeIndex) {\n var currentOffset = this.list.getBoundingClientRect().height;\n var nextBottom = selectedLI.offsetTop + selectedLI.getBoundingClientRect().height - this.list.scrollTop;\n var nextOffset = this.list.scrollTop + nextBottom - currentOffset;\n var boxRange = (selectedLI.offsetTop + selectedLI.getBoundingClientRect().height - this.list.scrollTop);\n boxRange = this.fields.groupBy && !isUndefined(this.fixedHeaderElement) ?\n boxRange - this.fixedHeaderElement.getBoundingClientRect().height : boxRange;\n if (activeIndex === 0) {\n this.list.scrollTop = 0;\n }\n else if (nextBottom > currentOffset) {\n this.list.scrollTop = nextOffset;\n }\n else if (!(boxRange > 0 && this.list.getBoundingClientRect().height > boxRange)) {\n this.list.scrollTop = nextOffset;\n }\n };\n MultiSelect.prototype.scrollTop = function (selectedLI, activeIndex) {\n var nextOffset = selectedLI.offsetTop - this.list.scrollTop;\n var nextBottom = selectedLI.offsetTop + selectedLI.getBoundingClientRect().height - this.list.scrollTop;\n nextOffset = this.fields.groupBy && !isUndefined(this.fixedHeaderElement) ?\n nextOffset - this.fixedHeaderElement.getBoundingClientRect().height : nextOffset;\n var boxRange = (selectedLI.offsetTop + selectedLI.getBoundingClientRect().height - this.list.scrollTop);\n if (activeIndex === 0) {\n this.list.scrollTop = 0;\n }\n else if (nextOffset < 0) {\n this.list.scrollTop = this.list.scrollTop + nextOffset;\n }\n else if (!(boxRange > 0 && this.list.getBoundingClientRect().height > boxRange)) {\n this.list.scrollTop = selectedLI.offsetTop - (this.fields.groupBy && !isUndefined(this.fixedHeaderElement) ?\n this.fixedHeaderElement.getBoundingClientRect().height : 0);\n }\n };\n MultiSelect.prototype.selectListByKey = function (e) {\n var li = this.list.querySelector('li.' + dropDownBaseClasses.focus);\n var limit = this.value && this.value.length ? this.value.length : 0;\n if (li !== null) {\n if (li.classList.contains('e-active')) {\n limit = limit - 1;\n }\n if (this.isValidLI(li) && limit < this.maximumSelectionLength) {\n this.updateListSelection(li, e);\n this.addListFocus(li);\n if (this.mode === 'CheckBox') {\n this.updateDelimView();\n this.refreshInputHight();\n this.updateDelimeter(this.delimiterChar);\n }\n else {\n this.updateDelimeter(this.delimiterChar);\n }\n this.makeTextBoxEmpty();\n if (this.mode !== 'CheckBox') {\n this.refreshListItems(li.textContent);\n }\n this.refreshPopup();\n if (this.value && this.value.length) {\n this.removeListSelection();\n this.refreshSelection();\n }\n }\n if (this.closePopupOnSelect) {\n this.hidePopup();\n }\n }\n this.refreshPlaceHolder();\n };\n MultiSelect.prototype.refreshListItems = function (data) {\n if ((this.allowFiltering || this.allowCustomValue) && this.mainList && this.listData) {\n var list = void 0;\n if (this.sortOrder === 'Descending' || this.sortOrder === 'Ascending') {\n list = this.ulElement.cloneNode ? this.ulElement.cloneNode(true) : this.ulElement;\n }\n else {\n list = this.mainList.cloneNode ? this.mainList.cloneNode(true) : this.mainList;\n }\n this.onActionComplete(list, this.mainData);\n this.focusAtLastListItem(data);\n if (this.value && this.value.length) {\n this.refreshSelection();\n }\n }\n };\n MultiSelect.prototype.removeSelectedChip = function (e) {\n var selectedElem = this.chipCollectionWrapper.querySelector('span.' + CHIP_SELECTED);\n var temp;\n if (selectedElem !== null) {\n if (!isNullOrUndefined(this.value)) {\n this.tempValues = this.value.slice();\n }\n temp = selectedElem.nextElementSibling;\n if (temp !== null) {\n this.removeChipSelection();\n this.addChipSelection(temp, e);\n }\n this.removeValue(selectedElem.getAttribute('data-value'), e);\n this.makeTextBoxEmpty();\n }\n if (this.closePopupOnSelect) {\n this.hidePopup();\n }\n };\n MultiSelect.prototype.moveByTop = function (state) {\n var elements = this.list.querySelectorAll('li.' + dropDownBaseClasses.li);\n var index;\n if (elements.length > 1) {\n this.removeFocus();\n index = state ? 0 : (elements.length - 1);\n this.addListFocus(elements[index]);\n this.scrollBottom(elements[index], index);\n }\n this.updateAriaAttribute();\n };\n MultiSelect.prototype.moveByList = function (position) {\n if (this.list) {\n var elements = this.list.querySelectorAll('li.'\n + dropDownBaseClasses.li\n + ':not(.' + HIDE_LIST + ')' + ':not(.e-reorder-hide)');\n var selectedElem = this.list.querySelector('li.' + dropDownBaseClasses.focus);\n var temp = -1;\n if (elements.length) {\n for (var index = 0; index < elements.length; index++) {\n if (elements[index] === selectedElem) {\n temp = index;\n break;\n }\n }\n if (position > 0) {\n if (temp < (elements.length - 1)) {\n this.removeFocus();\n this.addListFocus(elements[++temp]);\n this.scrollBottom(elements[temp], temp);\n }\n }\n else {\n if (temp > 0) {\n this.removeFocus();\n this.addListFocus(elements[--temp]);\n this.scrollTop(elements[temp], temp);\n }\n }\n }\n }\n };\n MultiSelect.prototype.moveBy = function (position, e) {\n var elements;\n var selectedElem;\n var temp;\n elements = this.chipCollectionWrapper.querySelectorAll('span.' + CHIP);\n selectedElem = this.chipCollectionWrapper.querySelector('span.' + CHIP_SELECTED);\n if (selectedElem === null) {\n if (position < 0) {\n this.addChipSelection(elements[elements.length - 1], e);\n }\n }\n else {\n if (position < 0) {\n temp = selectedElem.previousElementSibling;\n if (temp !== null) {\n this.removeChipSelection();\n this.addChipSelection(temp, e);\n }\n }\n else {\n temp = selectedElem.nextElementSibling;\n this.removeChipSelection();\n if (temp !== null) {\n this.addChipSelection(temp, e);\n }\n }\n }\n };\n MultiSelect.prototype.chipClick = function (e) {\n if (this.enabled) {\n var elem = closest(e.target, '.' + CHIP);\n this.removeChipSelection();\n this.addChipSelection(elem, e);\n }\n };\n MultiSelect.prototype.removeChipSelection = function () {\n if (this.chipCollectionWrapper) {\n this.removeChipFocus();\n }\n };\n MultiSelect.prototype.addChipSelection = function (element, e) {\n addClass([element], CHIP_SELECTED);\n this.trigger('chipSelection', e);\n };\n MultiSelect.prototype.onChipRemove = function (e) {\n if (e.which === 3 || e.button === 2) {\n return;\n }\n if (this.enabled && !this.readonly) {\n var element = e.target.parentElement;\n var value = this.getFormattedValue(element.getAttribute('data-value'));\n if (this.isPopupOpen() && this.mode !== 'CheckBox') {\n this.hidePopup();\n }\n if (!this.inputFocus) {\n this.inputElement.focus();\n }\n this.removeValue(value, e);\n if (isNullOrUndefined(this.list.querySelector('li[data-value=\"' + value + '\"]')) && this.mainList && this.listData) {\n var list = this.mainList.cloneNode ? this.mainList.cloneNode(true) : this.mainList;\n this.onActionComplete(list, this.mainData);\n }\n this.updateDelimeter(this.delimiterChar);\n this.makeTextBoxEmpty();\n e.preventDefault();\n }\n };\n MultiSelect.prototype.makeTextBoxEmpty = function () {\n this.inputElement.value = '';\n this.refreshPlaceHolder();\n };\n MultiSelect.prototype.refreshPlaceHolder = function () {\n if (this.placeholder && this.floatLabelType === 'Never') {\n if (this.value && this.value.length) {\n this.inputElement.placeholder = '';\n }\n else {\n this.inputElement.placeholder = this.placeholder;\n }\n }\n else {\n this.setFloatLabelType();\n }\n this.expandTextbox();\n };\n MultiSelect.prototype.removeValue = function (value, eve) {\n var index = this.value.indexOf(this.getFormattedValue(value));\n var className = this.hideSelectedItem ?\n HIDE_LIST :\n dropDownBaseClasses.selected;\n if (index !== -1) {\n var element = this.list.querySelector('li[data-value=\"' + value + '\"]');\n var eventArgs = {\n e: eve,\n item: element,\n itemData: this.getDataByValue(value),\n isInteracted: eve ? true : false,\n cancel: false\n };\n this.trigger('removing', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n this.value.splice(index, 1);\n this.setProperties({ value: [].concat([], this.value) }, true);\n if (element !== null) {\n element.setAttribute('aria-selected', 'false');\n removeClass([element], className);\n this.notify('activeList', {\n module: 'CheckBoxSelection',\n enable: this.mode === 'CheckBox', li: element,\n e: this, index: index\n });\n this.notify('updatelist', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', li: element, e: eve });\n attributes(this.inputElement, { 'aria-activedescendant': element.id });\n if ((this.value.length !== this.mainData.length) && (this.mode === 'CheckBox' && this.showSelectAll)) {\n this.notify('checkSelectAll', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', value: 'uncheck' });\n }\n }\n if (this.hideSelectedItem && this.fields.groupBy) {\n this.hideGroupItem(value);\n }\n this.updateMainList(true, value);\n this.removeChip(value);\n this.updateChipStatus();\n var limit = this.value && this.value.length ? this.value.length : 0;\n if (limit < this.maximumSelectionLength) {\n var collection = this.list.querySelectorAll('li.'\n + dropDownBaseClasses.li + ':not(.e-active)');\n removeClass(collection, 'e-disable');\n }\n this.trigger('removed', eventArgs);\n }\n };\n MultiSelect.prototype.updateMainList = function (state, value) {\n if (this.allowFiltering) {\n var element2 = this.mainList.querySelector('li[data-value=\"' + value + '\"]');\n if (element2) {\n if (state) {\n element2.setAttribute('aria-selected', 'false');\n removeClass([element2], this.hideSelectedItem ?\n HIDE_LIST :\n dropDownBaseClasses.selected);\n if (this.mode === 'CheckBox') {\n element2.firstElementChild.setAttribute('aria-checked', 'false');\n removeClass([element2.firstElementChild.lastElementChild], 'e-check');\n }\n }\n else {\n element2.setAttribute('aria-selected', 'true');\n addClass([element2], this.hideSelectedItem ?\n HIDE_LIST :\n dropDownBaseClasses.selected);\n if (this.mode === 'CheckBox') {\n element2.firstElementChild.setAttribute('aria-checked', 'true');\n addClass([element2.firstElementChild.lastElementChild], 'e-check');\n }\n }\n }\n }\n };\n MultiSelect.prototype.removeChip = function (value) {\n if (this.chipCollectionWrapper) {\n var element = this.chipCollectionWrapper.querySelector('span[data-value=\"' + value + '\"]');\n if (element) {\n remove(element);\n }\n }\n };\n MultiSelect.prototype.updateChipStatus = function () {\n if (this.value.length) {\n if (!isNullOrUndefined(this.chipCollectionWrapper)) {\n (this.chipCollectionWrapper.style.display = '');\n }\n if (this.mode === 'Delimiter' || this.mode === 'CheckBox') {\n this.showDelimWrapper();\n }\n this.showOverAllClear();\n }\n else {\n if (!isNullOrUndefined(this.chipCollectionWrapper)) {\n this.chipCollectionWrapper.style.display = 'none';\n }\n if (!isNullOrUndefined(this.delimiterWrapper)) {\n (this.delimiterWrapper.style.display = 'none');\n }\n this.hideOverAllClear();\n }\n };\n MultiSelect.prototype.addValue = function (value, text, eve) {\n if (!this.value) {\n this.value = [];\n }\n this.setProperties({ value: [].concat([], this.value, [value]) }, true);\n var element = this.list.querySelector('li[data-value=\"' + value + '\"]');\n this.removeFocus();\n if (element) {\n this.addListFocus(element);\n this.addListSelection(element);\n }\n if (this.mode !== 'Delimiter' && this.mode !== 'CheckBox') {\n this.addChip(text, value, eve);\n }\n if (this.hideSelectedItem && this.fields.groupBy) {\n this.hideGroupItem(value);\n }\n this.updateChipStatus();\n this.checkMaxSelection();\n };\n MultiSelect.prototype.checkMaxSelection = function () {\n var limit = this.value && this.value.length ? this.value.length : 0;\n if (limit === this.maximumSelectionLength) {\n var collection = this.list.querySelectorAll('li.'\n + dropDownBaseClasses.li + ':not(.e-active)');\n addClass(collection, 'e-disable');\n }\n };\n MultiSelect.prototype.dispatchSelect = function (value, eve, element, isNotTrigger) {\n if (this.initStatus && !isNotTrigger) {\n var eventArgs = {\n e: eve,\n item: element,\n itemData: this.getDataByValue(value),\n isInteracted: eve ? true : false,\n cancel: false\n };\n this.trigger('select', eventArgs);\n if (eventArgs.cancel) {\n return true;\n }\n }\n return false;\n };\n MultiSelect.prototype.addChip = function (text, value, e) {\n if (this.chipCollectionWrapper) {\n var item = this.getChip(text, value, e);\n if (item.cancel) {\n return;\n }\n this.chipCollectionWrapper.appendChild(item.element);\n }\n };\n MultiSelect.prototype.removeChipFocus = function () {\n var elements;\n var closeElements;\n elements = this.chipCollectionWrapper.querySelectorAll('span.' + CHIP);\n closeElements = this.chipCollectionWrapper.querySelectorAll('span.' + CHIP_CLOSE.split(' ')[0]);\n removeClass(elements, CHIP_SELECTED);\n if (Browser.isDevice) {\n for (var index = 0; index < closeElements.length; index++) {\n closeElements[index].style.display = 'none';\n }\n }\n };\n MultiSelect.prototype.onMobileChipInteraction = function (e) {\n var chipElem = closest(e.target, '.' + CHIP);\n var chipClose = chipElem.querySelector('span.' + CHIP_CLOSE.split(' ')[0]);\n if (this.enabled && !this.readonly) {\n if (!chipElem.classList.contains(CHIP_SELECTED)) {\n this.removeChipFocus();\n chipClose.style.display = '';\n chipElem.classList.add(CHIP_SELECTED);\n }\n this.refreshPopup();\n e.preventDefault();\n }\n };\n MultiSelect.prototype.getChip = function (data, value, e) {\n var itemData = { text: value, value: value };\n var chip = createElement('span', {\n className: CHIP,\n attrs: { 'data-value': value, 'title': data }\n });\n var chipContent = createElement('span', { className: CHIP_CONTENT });\n var chipClose = createElement('span', { className: CHIP_CLOSE });\n if (this.mainData) {\n itemData = this.getDataByValue(value);\n }\n if (this.valueTemplate && !isNullOrUndefined(itemData)) {\n var compiledString = compile(this.valueTemplate);\n for (var _i = 0, _a = compiledString(itemData); _i < _a.length; _i++) {\n var item = _a[_i];\n chipContent.appendChild(item);\n }\n }\n else {\n chipContent.innerHTML = data;\n }\n chip.appendChild(chipContent);\n var eventArgs = {\n isInteracted: e ? true : false,\n itemData: itemData,\n e: e,\n setClass: function (classes) {\n addClass([chip], classes);\n },\n cancel: false\n };\n this.trigger('tagging', eventArgs);\n if (eventArgs.cancel) {\n return { cancel: true, element: chip };\n }\n if (Browser.isDevice) {\n chip.classList.add(MOBILE_CHIP);\n append([chipClose], chip);\n chipClose.style.display = 'none';\n EventHandler.add(chip, 'click', this.onMobileChipInteraction, this);\n }\n else {\n EventHandler.add(chip, 'mousedown', this.chipClick, this);\n if (this.showClearButton) {\n chip.appendChild(chipClose);\n }\n }\n EventHandler.add(chipClose, 'mousedown', this.onChipRemove, this);\n return { cancel: false, element: chip };\n };\n MultiSelect.prototype.calcPopupWidth = function () {\n var width = formatUnit(this.popupWidth);\n if (width.indexOf('%') > -1) {\n var inputWidth = (this.componentWrapper.getBoundingClientRect().width) * parseFloat(width) / 100;\n width = inputWidth.toString() + 'px';\n }\n return width;\n };\n MultiSelect.prototype.mouseIn = function () {\n if (this.enabled && !this.readonly) {\n this.showOverAllClear();\n }\n };\n MultiSelect.prototype.mouseOut = function () {\n if (!this.inputFocus) {\n this.overAllClear.style.display = 'none';\n }\n };\n MultiSelect.prototype.listOption = function (dataSource, fields) {\n var iconCss = isNullOrUndefined(fields.iconCss) ? false : true;\n var fieldProperty = fields.properties;\n this.listCurrentOptions = (fields.text !== null || fields.value !== null) ? {\n fields: fieldProperty, showIcon: iconCss, ariaAttributes: { groupItemRole: 'presentation' }\n } : { fields: { value: 'text' } };\n extend(this.listCurrentOptions, this.listCurrentOptions, fields, true);\n if (this.mode === 'CheckBox') {\n this.notify('listoption', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', dataSource: dataSource, fieldProperty: fieldProperty });\n }\n return this.listCurrentOptions;\n };\n MultiSelect.prototype.renderPopup = function () {\n var _this = this;\n if (!this.list) {\n _super.prototype.render.call(this);\n }\n if (!this.popupObj) {\n var args = { cancel: false };\n this.trigger('beforeOpen', args);\n if (args.cancel) {\n return;\n }\n document.body.appendChild(this.popupWrapper);\n var overAllHeight = parseInt(this.popupHeight, 10);\n this.popupWrapper.style.visibility = 'hidden';\n if (this.headerTemplate) {\n this.setHeaderTemplate();\n overAllHeight -= this.header.getBoundingClientRect().height;\n }\n append([this.list], this.popupWrapper);\n if (this.footerTemplate) {\n this.setFooterTemplate();\n overAllHeight -= this.footer.getBoundingClientRect().height;\n }\n if (this.mode === 'CheckBox' && this.showSelectAll) {\n this.notify('selectAll', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox' });\n overAllHeight -= this.selectAllHeight;\n }\n else if (this.mode === 'CheckBox' && !this.showSelectAll && (!this.headerTemplate || !this.footerTemplate)) {\n this.notify('selectAll', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox' });\n overAllHeight = parseInt(this.popupHeight, 10);\n }\n else if (this.mode === 'CheckBox' && !this.showSelectAll) {\n this.notify('selectAll', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox' });\n overAllHeight = parseInt(this.popupHeight, 10);\n if (this.headerTemplate && this.header) {\n overAllHeight -= this.header.getBoundingClientRect().height;\n }\n if (this.footerTemplate && this.footer) {\n overAllHeight -= this.footer.getBoundingClientRect().height;\n }\n }\n if (this.mode === 'CheckBox') {\n var args_1 = {\n module: 'CheckBoxSelection',\n enable: this.mode === 'CheckBox',\n popupElement: this.popupWrapper\n };\n this.notify('searchBox', args_1);\n overAllHeight -= this.searchBoxHeight;\n addClass([this.popupWrapper], 'e-checkbox');\n }\n if (this.popupHeight !== 'auto') {\n this.list.style.maxHeight = formatUnit(overAllHeight);\n this.popupWrapper.style.maxHeight = formatUnit(this.popupHeight);\n }\n else {\n this.list.style.maxHeight = formatUnit(this.popupHeight);\n }\n this.popupObj = new Popup(this.popupWrapper, {\n width: this.calcPopupWidth(), targetType: 'relative', position: { X: 'left', Y: 'bottom' },\n relateTo: this.overAllWrapper, collision: { X: 'flip', Y: 'flip' }, offsetY: 1,\n enableRtl: this.enableRtl,\n zIndex: this.zIndex,\n close: function () {\n if (_this.popupObj.element.parentElement) {\n detach(_this.popupObj.element);\n }\n },\n open: function () {\n _this.notify('inputFocus', { module: 'CheckBoxSelection', enable: _this.mode === 'CheckBox', value: 'focus' });\n }\n });\n this.popupObj.close();\n this.popupWrapper.style.visibility = '';\n if (this.mode === 'CheckBox' && Browser.isDevice) {\n this.notify('deviceSearchBox', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox' });\n }\n }\n };\n MultiSelect.prototype.setHeaderTemplate = function () {\n var compiledString;\n if (this.header) {\n this.header.remove();\n }\n this.header = document.createElement('div');\n addClass([this.header], HEADER);\n compiledString = compile(this.headerTemplate);\n var elements = compiledString({});\n for (var temp = 0; temp < elements.length; temp++) {\n this.header.appendChild(elements[temp]);\n }\n if (this.mode === 'CheckBox' && this.showSelectAll) {\n prepend([this.header], this.popupWrapper);\n }\n else {\n append([this.header], this.popupWrapper);\n }\n EventHandler.add(this.header, 'mousedown', this.onListMouseDown, this);\n };\n MultiSelect.prototype.setFooterTemplate = function () {\n var compiledString;\n if (this.footer) {\n this.footer.remove();\n }\n this.footer = document.createElement('div');\n addClass([this.footer], FOOTER);\n compiledString = compile(this.footerTemplate);\n var elements = compiledString({});\n for (var temp = 0; temp < elements.length; temp++) {\n this.footer.appendChild(elements[temp]);\n }\n append([this.footer], this.popupWrapper);\n EventHandler.add(this.footer, 'mousedown', this.onListMouseDown, this);\n };\n MultiSelect.prototype.ClearAll = function (e) {\n if (this.enabled && !this.readonly) {\n var temp = void 0;\n var tempValues = this.value ? this.value.slice() : [];\n for (temp = this.value[0]; this.value.length !== 0; temp = this.value[0]) {\n this.removeValue(temp, e);\n }\n if (this.mainList && this.listData) {\n var list = this.mainList.cloneNode ? this.mainList.cloneNode(true) : this.mainList;\n this.onActionComplete(list, this.mainData);\n }\n this.focusAtFirstListItem();\n this.updateDelimeter(this.delimiterChar);\n if (this.mode !== 'Box') {\n this.updateDelimView();\n }\n this.makeTextBoxEmpty();\n if (this.isPopupOpen()) {\n this.refreshPopup();\n }\n if (!this.inputFocus) {\n this.updateValueState(e, this.value, tempValues);\n if (this.mode !== 'CheckBox') {\n this.inputElement.focus();\n }\n }\n if (this.mode === 'CheckBox') {\n this.refreshPlaceHolder();\n this.refreshInputHight();\n }\n e.preventDefault();\n }\n };\n MultiSelect.prototype.windowResize = function () {\n this.refreshPopup();\n if (!this.inputFocus && this.viewWrapper && this.viewWrapper.parentElement) {\n this.updateDelimView();\n }\n };\n MultiSelect.prototype.resetValueHandler = function () {\n this.value = null;\n };\n MultiSelect.prototype.wireEvent = function () {\n EventHandler.add(this.componentWrapper, 'mousedown', this.wrapperClick, this);\n EventHandler.add(window, 'resize', this.windowResize, this);\n EventHandler.add(this.inputElement, 'focus', this.focusIn, this);\n EventHandler.add(this.inputElement, 'keydown', this.onKeyDown, this);\n EventHandler.add(this.inputElement, 'keyup', this.KeyUp, this);\n if (this.mode !== 'CheckBox') {\n EventHandler.add(this.inputElement, 'input', this.onInput, this);\n }\n EventHandler.add(this.inputElement, 'blur', this.onBlur, this);\n EventHandler.add(this.componentWrapper, 'mousemove', this.mouseIn, this);\n var formElement = closest(this.inputElement, 'form');\n if (formElement) {\n EventHandler.add(formElement, 'reset', this.resetValueHandler, this);\n }\n EventHandler.add(this.componentWrapper, 'mouseout', this.mouseOut, this);\n EventHandler.add(this.overAllClear, 'mouseup', this.ClearAll, this);\n };\n MultiSelect.prototype.onInput = function () {\n if (this.keyDownStatus) {\n this.isValidKey = true;\n }\n else {\n this.isValidKey = false;\n }\n this.keyDownStatus = false;\n };\n MultiSelect.prototype.preRender = function () {\n this.initializeData();\n _super.prototype.preRender.call(this);\n };\n MultiSelect.prototype.initializeData = function () {\n this.mainListCollection = [];\n this.beforePopupOpen = false;\n this.filterAction = false;\n this.remoteFilterAction = false;\n this.isFirstClick = false;\n this.mobFilter = true;\n this.isFiltered = false;\n this.focused = true;\n this.initial = true;\n this.backCommand = true;\n };\n MultiSelect.prototype.updateData = function (delimiterChar) {\n var data = '';\n var delim = this.mode === 'Delimiter' || this.mode === 'CheckBox';\n var text = [];\n var temp;\n var tempData = this.listData;\n this.listData = this.mainData;\n this.hiddenElement.innerHTML = '';\n if (!isNullOrUndefined(this.value)) {\n for (var index = 0; !isNullOrUndefined(this.value[index]); index++) {\n if (this.listData) {\n temp = this.getTextByValue(this.value[index]);\n }\n else {\n temp = this.value[index];\n }\n data += temp + delimiterChar + ' ';\n text.push(temp);\n this.hiddenElement.innerHTML += '';\n }\n }\n this.text = text.toString();\n if (delim) {\n this.delimiterWrapper.innerHTML = data;\n }\n this.listData = tempData;\n };\n MultiSelect.prototype.initialValueUpdate = function () {\n if (this.list) {\n var text = void 0;\n var textField = void 0;\n var valueField = void 0;\n var element = void 0;\n var value = void 0;\n if (this.chipCollectionWrapper) {\n this.chipCollectionWrapper.innerHTML = '';\n }\n this.removeListSelection();\n if (!isNullOrUndefined(this.value)) {\n for (var index = 0; !isNullOrUndefined(this.value[index]); index++) {\n value = this.value[index];\n element = this.hideSelectedItem ? this.ulElement.querySelector('li[data-value=\"' + value + '\"]')\n : this.list.querySelector('li[data-value=\"' + value + '\"]');\n text = this.getTextByValue(value);\n if ((element && (element.getAttribute('aria-selected') !== 'true')) ||\n (element && (element.getAttribute('aria-selected') === 'true' && this.hideSelectedItem) &&\n (this.mode === 'Box' || this.mode === 'Default'))) {\n text = this.getTextByValue(value);\n this.addChip(text, value);\n this.addListSelection(element);\n }\n else if (value && this.allowCustomValue) {\n var indexItem = this.listData.length;\n var newValue = {};\n setValue(this.fields.text, value, newValue);\n setValue(this.fields.value, value, newValue);\n this.addItem(newValue, indexItem);\n text = this.getTextByValue(value);\n this.addChip(text, value);\n this.addListSelection(element);\n }\n }\n }\n if (this.mode === 'CheckBox') {\n this.updateDelimView();\n this.updateValueState(null, this.value, this.tempValues);\n this.refreshInputHight();\n this.updateDelimeter(this.delimiterChar);\n }\n else {\n this.updateDelimeter(this.delimiterChar);\n }\n if (this.mode === 'CheckBox' && this.showSelectAll && isNullOrUndefined(this.value)) {\n this.notify('checkSelectAll', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', value: 'uncheck' });\n }\n if (!this.inputFocus) {\n if (this.mode === 'Box') {\n this.chipCollectionWrapper.style.display = '';\n }\n else if (this.mode === 'Delimiter' || this.mode === 'CheckBox') {\n this.showDelimWrapper();\n }\n }\n }\n };\n MultiSelect.prototype.isValidLI = function (li) {\n return (li && !li.classList.contains(dropDownBaseClasses.disabled) && !li.classList.contains(dropDownBaseClasses.group) &&\n li.classList.contains(dropDownBaseClasses.li));\n };\n ;\n MultiSelect.prototype.updateListSelection = function (li, e) {\n var value = this.getFormattedValue(li.getAttribute('data-value'));\n var text = this.getTextByValue(value);\n this.removeHover();\n if (!this.value || this.value.indexOf(value) === -1) {\n var argsCancel = this.dispatchSelect(value, e, li, (li.getAttribute('aria-selected') === 'true'));\n if (argsCancel) {\n return;\n }\n if ((this.allowCustomValue || this.allowFiltering) && !this.mainList.querySelector('li[data-value=\"' + value + '\"]')) {\n var temp = li.cloneNode(true);\n var data = this.getDataByValue(value);\n append([temp], this.mainList);\n this.mainData.push(this.getDataByValue(value));\n var eventArgs = {\n newData: data,\n cancel: false\n };\n this.trigger('customValueSelection', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n }\n this.remoteCustomValue = false;\n this.addValue(value, text, e);\n }\n else {\n this.removeValue(value, e);\n }\n };\n MultiSelect.prototype.removeListSelection = function () {\n var className = this.hideSelectedItem ?\n HIDE_LIST :\n dropDownBaseClasses.selected;\n var selectedItems = this.list.querySelectorAll('.' + className);\n var temp = selectedItems.length;\n if (selectedItems && selectedItems.length) {\n removeClass(selectedItems, className);\n while (temp > 0) {\n selectedItems[temp - 1].setAttribute('aria-selected', 'false');\n temp--;\n }\n }\n if (!isNullOrUndefined(this.mainList)) {\n var selectItems = this.mainList.querySelectorAll('.' + className);\n var temp1 = selectItems.length;\n if (selectItems && selectItems.length) {\n removeClass(selectItems, className);\n while (temp1 > 0) {\n selectItems[temp1 - 1].setAttribute('aria-selected', 'false');\n if (this.mode === 'CheckBox') {\n selectItems[temp1 - 1].firstElementChild.setAttribute('aria-checked', 'false');\n removeClass([selectItems[temp1 - 1].firstElementChild.lastElementChild], 'e-check');\n }\n temp1--;\n }\n }\n }\n };\n ;\n MultiSelect.prototype.removeHover = function () {\n var hoveredItem = this.list.querySelectorAll('.' + dropDownBaseClasses.hover);\n if (hoveredItem && hoveredItem.length) {\n removeClass(hoveredItem, dropDownBaseClasses.hover);\n }\n };\n ;\n MultiSelect.prototype.removeFocus = function () {\n if (this.list) {\n var hoveredItem = this.list.querySelectorAll('.' + dropDownBaseClasses.focus);\n var mainlist = this.mainList.querySelectorAll('.' + dropDownBaseClasses.focus);\n if (hoveredItem && hoveredItem.length) {\n removeClass(hoveredItem, dropDownBaseClasses.focus);\n removeClass(mainlist, dropDownBaseClasses.focus);\n }\n }\n };\n ;\n MultiSelect.prototype.addListHover = function (li) {\n if (this.enabled && this.isValidLI(li)) {\n this.removeHover();\n addClass([li], dropDownBaseClasses.hover);\n }\n };\n ;\n MultiSelect.prototype.addListFocus = function (element) {\n if (this.enabled && this.isValidLI(element)) {\n this.removeFocus();\n addClass([element], dropDownBaseClasses.focus);\n }\n };\n MultiSelect.prototype.addListSelection = function (element) {\n var className = this.hideSelectedItem ?\n HIDE_LIST :\n dropDownBaseClasses.selected;\n if (this.isValidLI(element) && !element.classList.contains(dropDownBaseClasses.hover)) {\n addClass([element], className);\n this.updateMainList(false, element.getAttribute('data-value'));\n element.setAttribute('aria-selected', 'true');\n if (this.mode === 'CheckBox') {\n var ariaCheck = element.firstElementChild.getAttribute('aria-checked');\n if (ariaCheck === 'false' || isNullOrUndefined(ariaCheck)) {\n this.notify('updatelist', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', li: element, e: this });\n }\n }\n this.notify('activeList', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', li: element, e: this });\n if (this.chipCollectionWrapper !== null) {\n this.removeChipSelection();\n }\n attributes(this.inputElement, { 'aria-activedescendant': element.id });\n }\n };\n MultiSelect.prototype.updateDelimeter = function (delimChar) {\n this.updateData(delimChar);\n };\n MultiSelect.prototype.onMouseClick = function (e) {\n this.scrollFocusStatus = false;\n var target = e.target;\n var li = closest(target, '.' + dropDownBaseClasses.li);\n if (this.isValidLI(li)) {\n var limit = this.value && this.value.length ? this.value.length : 0;\n if (li.classList.contains('e-active')) {\n limit = limit - 1;\n }\n if (limit < this.maximumSelectionLength) {\n this.updateListSelection(li, e);\n this.addListFocus(li);\n if ((this.allowCustomValue || this.allowFiltering) && this.mainList && this.listData) {\n if (this.mode !== 'CheckBox') {\n this.focusAtLastListItem(li.getAttribute('data-value'));\n }\n this.refreshSelection();\n }\n else {\n this.makeTextBoxEmpty();\n }\n }\n if (this.mode === 'CheckBox') {\n this.updateDelimView();\n this.refreshInputHight();\n this.updateDelimeter(this.delimiterChar);\n }\n else {\n this.updateDelimeter(this.delimiterChar);\n }\n this.checkSelectAll();\n this.refreshPopup();\n if (this.hideSelectedItem) {\n this.focusAtFirstListItem();\n }\n if (this.closePopupOnSelect) {\n this.hidePopup();\n }\n else {\n e.preventDefault();\n }\n this.makeTextBoxEmpty();\n }\n else {\n e.preventDefault();\n }\n if (this.mode !== 'CheckBox') {\n this.refreshListItems(isNullOrUndefined(li) ? null : li.textContent);\n }\n this.refreshPlaceHolder();\n };\n MultiSelect.prototype.onMouseOver = function (e) {\n var currentLi = closest(e.target, '.' + dropDownBaseClasses.li);\n this.addListHover(currentLi);\n };\n MultiSelect.prototype.onMouseLeave = function (e) {\n this.removeHover();\n };\n MultiSelect.prototype.onListMouseDown = function (e) {\n e.preventDefault();\n this.scrollFocusStatus = true;\n };\n MultiSelect.prototype.onDocumentClick = function (e) {\n if (this.mode !== 'CheckBox') {\n var target = e.target;\n if (!(!isNullOrUndefined(this.popupObj) && closest(target, '#' + this.popupObj.element.id)) &&\n !this.overAllWrapper.contains(e.target)) {\n this.scrollFocusStatus = false;\n }\n else {\n this.scrollFocusStatus = (Browser.isIE || Browser.info.name === 'edge') && (document.activeElement === this.inputElement);\n }\n }\n };\n MultiSelect.prototype.wireListEvents = function () {\n EventHandler.add(document, 'mousedown', this.onDocumentClick, this);\n EventHandler.add(this.list, 'mousedown', this.onListMouseDown, this);\n EventHandler.add(this.list, 'mouseup', this.onMouseClick, this);\n EventHandler.add(this.list, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.list, 'mouseout', this.onMouseLeave, this);\n };\n ;\n MultiSelect.prototype.unwireListEvents = function () {\n EventHandler.remove(document, 'mousedown', this.onDocumentClick);\n if (this.list) {\n EventHandler.remove(this.list, 'mousedown', this.onListMouseDown);\n EventHandler.remove(this.list, 'mouseup', this.onMouseClick);\n EventHandler.remove(this.list, 'mouseover', this.onMouseOver);\n EventHandler.remove(this.list, 'mouseout', this.onMouseLeave);\n }\n };\n ;\n MultiSelect.prototype.hideOverAllClear = function () {\n if (!this.value || !this.value.length || this.inputElement.value === '') {\n this.overAllClear.style.display = 'none';\n }\n };\n MultiSelect.prototype.showOverAllClear = function () {\n if ((this.value && this.value.length) || this.inputElement.value !== '') {\n this.overAllClear.style.display = '';\n }\n else {\n this.overAllClear.style.display = 'none';\n }\n };\n MultiSelect.prototype.showSpinner = function () {\n if (isNullOrUndefined(this.spinnerElement)) {\n if (this.overAllClear.style.display !== 'none') {\n this.spinnerElement = this.overAllClear;\n }\n else {\n this.spinnerElement = createElement('span', { className: CLOSEICON_CLASS + ' ' + SPINNER_CLASS });\n this.componentWrapper.appendChild(this.spinnerElement);\n }\n addClass([this.spinnerElement], DISABLE_ICON);\n createSpinner({\n target: this.spinnerElement,\n width: Browser.isDevice ? '16px' : '14px'\n });\n showSpinner(this.spinnerElement);\n }\n };\n MultiSelect.prototype.hideSpinner = function () {\n if (!isNullOrUndefined(this.spinnerElement)) {\n hideSpinner(this.spinnerElement);\n removeClass([this.spinnerElement], DISABLE_ICON);\n if (this.spinnerElement.classList.contains(SPINNER_CLASS)) {\n detach(this.spinnerElement);\n }\n else {\n this.spinnerElement.innerHTML = '';\n }\n this.spinnerElement = null;\n }\n };\n MultiSelect.prototype.updateDelimView = function () {\n if (this.delimiterWrapper) {\n this.hideDelimWrapper();\n }\n if (this.chipCollectionWrapper) {\n this.chipCollectionWrapper.style.display = 'none';\n }\n this.viewWrapper.style.display = '';\n if (this.value && this.value.length) {\n var data = '';\n var temp = void 0;\n var tempData = void 0;\n var tempIndex = 1;\n var wrapperleng = void 0;\n var remaining = void 0;\n this.viewWrapper.innerHTML = '';\n var l10nLocale = {\n noRecordsTemplate: 'No Records Found',\n actionFailureTemplate: 'The Request Failed',\n overflowCountTemplate: '+${count} more..'\n };\n var l10n = new L10n('dropdowns', l10nLocale, this.locale);\n var remainContent = l10n.getConstant('overflowCountTemplate');\n var raminElement = createElement('span', {\n className: REMAIN_WRAPPER\n });\n var compiledString = compile(remainContent);\n raminElement.appendChild(compiledString({ 'count': this.value.length })[0]);\n this.viewWrapper.appendChild(raminElement);\n var remainSize = raminElement.getBoundingClientRect().width;\n remove(raminElement);\n this.viewWrapper.innerHTML = '';\n var inputleng = this.searchWrapper.getBoundingClientRect().width;\n var overAllContainer = parseInt(window.getComputedStyle(this.componentWrapper).width, 10) -\n parseInt(window.getComputedStyle(this.componentWrapper).paddingLeft, 10) -\n parseInt(window.getComputedStyle(this.componentWrapper).paddingRight, 10);\n var remainValue = void 0;\n if (!isNullOrUndefined(this.value)) {\n for (var index = 0; !isNullOrUndefined(this.value[index]); index++) {\n data += (index === 0) ? '' : this.delimiterChar + ' ';\n if (this.mainData && this.mainData.length) {\n if (this.mode === 'CheckBox') {\n remainValue = 110;\n var newTemp = this.listData;\n this.listData = this.mainData;\n temp = this.getTextByValue(this.value[index]);\n this.listData = newTemp;\n }\n else {\n remainValue = 0;\n temp = this.getTextByValue(this.value[index]);\n }\n }\n else {\n temp = this.value[index];\n }\n data += temp;\n temp = this.viewWrapper.innerHTML;\n this.viewWrapper.innerHTML = data;\n wrapperleng = this.viewWrapper.getBoundingClientRect().width;\n if ((wrapperleng) > overAllContainer - remainValue) {\n if (tempData !== undefined) {\n temp = tempData;\n index = tempIndex + 1;\n }\n this.viewWrapper.innerHTML = temp;\n remaining = this.value.length - index;\n break;\n }\n else if ((wrapperleng + remainSize) <= overAllContainer) {\n tempData = data;\n tempIndex = index;\n }\n else if (index === 0) {\n tempData = '';\n tempIndex = -1;\n }\n }\n }\n if (remaining > 0) {\n raminElement.innerHTML = '';\n raminElement.appendChild(compiledString({ 'count': remaining })[0]);\n this.viewWrapper.appendChild(raminElement);\n }\n }\n else {\n this.viewWrapper.innerHTML = '';\n this.viewWrapper.style.display = 'none';\n }\n };\n MultiSelect.prototype.unWireEvent = function () {\n EventHandler.remove(this.componentWrapper, 'mousedown', this.wrapperClick);\n EventHandler.remove(window, 'resize', this.windowResize);\n EventHandler.remove(this.inputElement, 'focus', this.focusIn);\n EventHandler.remove(this.inputElement, 'keydown', this.onKeyDown);\n if (this.mode !== 'CheckBox') {\n EventHandler.remove(this.inputElement, 'input', this.onInput);\n }\n EventHandler.remove(this.inputElement, 'keyup', this.KeyUp);\n var formElement = closest(this.inputElement, 'form');\n if (formElement) {\n EventHandler.remove(formElement, 'reset', this.resetValueHandler);\n }\n EventHandler.remove(this.inputElement, 'blur', this.onBlur);\n EventHandler.remove(this.componentWrapper, 'mousemove', this.mouseIn);\n EventHandler.remove(this.componentWrapper, 'mouseout', this.mouseOut);\n EventHandler.remove(this.overAllClear, 'mousedown', this.ClearAll);\n };\n MultiSelect.prototype.selectAllItem = function (state) {\n var li;\n li = this.list.querySelectorAll(state ?\n 'li[aria-selected=\"false\"]:not(.e-reorder-hide)' :\n 'li[aria-selected=\"true\"]:not(.e-reorder-hide)');\n var length = li.length;\n if (li && li.length) {\n while (length > 0) {\n this.updateListSelection(li[length - 1], null);\n length--;\n }\n }\n if (this.mode !== 'Box' && !this.isPopupOpen()) {\n this.updateDelimView();\n }\n else {\n this.searchWrapper.classList.remove(ZERO_SIZE);\n }\n if (this.mode === 'CheckBox') {\n this.updateDelimView();\n this.refreshInputHight();\n this.updateDelimeter(this.delimiterChar);\n }\n else {\n this.updateDelimeter(this.delimiterChar);\n }\n this.refreshPlaceHolder();\n };\n MultiSelect.prototype.setZIndex = function () {\n if (this.popupObj) {\n this.popupObj.setProperties({ 'zIndex': this.zIndex });\n }\n };\n MultiSelect.prototype.updateDataSource = function (prop) {\n if (isNullOrUndefined(this.list)) {\n this.renderPopup();\n }\n else {\n this.resetList(this.dataSource);\n }\n if (this.value && this.value.length) {\n this.refreshSelection();\n }\n };\n MultiSelect.prototype.onLoadSelect = function () {\n this.setDynValue = true;\n this.renderPopup();\n };\n /**\n * Get the properties to be maintained in the persisted state.\n */\n MultiSelect.prototype.getPersistData = function () {\n return this.addOnPersist(['value']);\n };\n ;\n /**\n * Dynamically change the value of properties.\n * @private\n */\n MultiSelect.prototype.onPropertyChanged = function (newProp, oldProp) {\n if (newProp.dataSource && !isNullOrUndefined(Object.keys(newProp.dataSource))) {\n this.mainList = null;\n this.mainData = null;\n }\n this.setUpdateInitial(['query', 'dataSource'], newProp);\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'query':\n case 'dataSource':\n if (this.mode === 'CheckBox' && this.showSelectAll) {\n if (!isNullOrUndefined(this.popupObj)) {\n this.popupObj.destroy();\n this.popupObj = null;\n }\n this.renderPopup();\n }\n break;\n case 'htmlAttributes':\n this.updateHTMLAttribute();\n break;\n case 'showClearButton':\n this.updateClearButton(newProp.showClearButton);\n break;\n case 'value':\n if (!this.list) {\n this.onLoadSelect();\n }\n else if (!this.inputFocus) {\n this.initialValueUpdate();\n if (this.mode !== 'Box') {\n this.updateDelimView();\n }\n this.refreshInputHight();\n this.refreshPlaceHolder();\n this.updateValueState(null, this.value, oldProp.value);\n }\n break;\n case 'width':\n setStyleAttribute(this.overAllWrapper, { 'width': formatUnit(newProp.width) });\n this.popupObj.setProperties({ width: this.calcPopupWidth() });\n break;\n case 'placeholder':\n this.refreshPlaceHolder();\n break;\n case 'filterBarPlaceholder':\n this.notify('filterBarPlaceholder', { filterBarPlaceholder: newProp.filterBarPlaceholder });\n break;\n case 'delimiterChar':\n if (this.mode !== 'Box') {\n this.updateDelimView();\n }\n this.updateData(newProp.delimiterChar);\n break;\n case 'cssClass':\n this.popupWrapper.classList.remove(oldProp.cssClass);\n this.overAllWrapper.classList.remove(oldProp.cssClass);\n this.updateCssClass();\n break;\n case 'enableRtl':\n this.enableRTL(newProp.enableRtl);\n _super.prototype.onPropertyChanged.call(this, newProp, oldProp);\n break;\n case 'readonly':\n this.updateReadonly(newProp.readonly);\n this.hidePopup();\n break;\n case 'enabled':\n this.hidePopup();\n this.enable(newProp.enabled);\n break;\n case 'showSelectAll':\n if (this.popupObj) {\n this.popupObj.destroy();\n this.popupObj = null;\n }\n this.renderPopup();\n break;\n case 'showDropDownIcon':\n this.dropDownIcon();\n break;\n case 'floatLabelType':\n this.setFloatLabelType();\n break;\n case 'enableSelectionOrder':\n break;\n case 'selectAllText':\n this.notify('selectAllText', false);\n break;\n case 'popupHeight':\n case 'headerTemplate':\n case 'footerTemplate':\n if (this.popupObj) {\n this.popupObj.destroy();\n this.popupObj = null;\n }\n this.renderPopup();\n break;\n default:\n var msProps = void 0;\n msProps = this.getPropObject(prop, newProp, oldProp);\n _super.prototype.onPropertyChanged.call(this, msProps.newProperty, msProps.oldProperty);\n break;\n }\n }\n };\n /**\n * Hides the popup, if the popup in a open state.\n * @returns void\n */\n MultiSelect.prototype.hidePopup = function () {\n var delay = 100;\n if (this.isPopupOpen()) {\n var eventArgs = { popup: this.popupObj, cancel: false };\n this.trigger('close', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n var animModel = {\n name: 'FadeOut',\n duration: 100,\n delay: delay ? delay : 0\n };\n this.beforePopupOpen = false;\n this.overAllWrapper.classList.remove(iconAnimation);\n this.popupObj.hide(new Animation(animModel));\n attributes(this.inputElement, { 'aria-expanded': 'false' });\n this.notify('inputFocus', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', value: 'clear' });\n this.popupObj.hide();\n removeClass([document.body, this.popupObj.element], 'e-popup-full-page');\n }\n };\n /**\n * Shows the popup, if the popup in a closed state.\n * @returns void\n */\n MultiSelect.prototype.showPopup = function () {\n if (!this.enabled) {\n return;\n }\n if (!this.ulElement) {\n this.beforePopupOpen = true;\n _super.prototype.render.call(this);\n return;\n }\n var mainLiLength = this.ulElement.querySelectorAll('li.' + 'e-list-item').length;\n var liLength = this.ulElement.querySelectorAll('li.'\n + dropDownBaseClasses.li + '.' + HIDE_LIST).length;\n if (mainLiLength > 0 && (mainLiLength === liLength)) {\n this.beforePopupOpen = false;\n return;\n }\n this.onPopupShown();\n };\n /**\n * Based on the state parameter, entire list item will be selected/deselected.\n * parameter\n * `true` - Selects entire list items.\n * `false` - Un Selects entire list items.\n * @returns void\n */\n MultiSelect.prototype.selectAll = function (state) {\n var _this = this;\n if (isNullOrUndefined(this.list)) {\n this.selectAllAction = function () {\n if (_this.mode === 'CheckBox' && _this.showSelectAll) {\n var args = {\n module: 'CheckBoxSelection',\n enable: _this.mode === 'CheckBox',\n value: state ? 'check' : 'uncheck'\n };\n _this.notify('checkSelectAll', args);\n }\n _this.selectAllItem(state);\n _this.selectAllAction = null;\n };\n _super.prototype.render.call(this);\n }\n else {\n this.selectAllAction = null;\n if (this.mode === 'CheckBox' && this.showSelectAll) {\n var args = {\n module: 'CheckBoxSelection',\n enable: this.mode === 'CheckBox',\n value: state ? 'check' : 'uncheck'\n };\n this.notify('checkSelectAll', args);\n }\n this.selectAllItem(state);\n }\n };\n MultiSelect.prototype.getModuleName = function () {\n return 'multiselect';\n };\n ;\n /**\n * To Initialize the control rendering\n * @private\n */\n MultiSelect.prototype.render = function () {\n var _this = this;\n this.initStatus = false;\n this.setDynValue = false;\n this.searchWrapper = createElement('span', { className: SEARCHBOX_WRAPPER });\n this.viewWrapper = createElement('span', { className: DELIMITER_VIEW + ' ' + DELIMITER_WRAPPER, styles: 'display:none;' });\n var iconClass;\n this.overAllClear = createElement('span', {\n className: CLOSEICON_CLASS, styles: 'display:none;'\n });\n this.componentWrapper = createElement('div', { className: ELEMENT_WRAPPER });\n this.overAllWrapper = createElement('div', { className: OVER_ALL_WRAPPER });\n if (this.mode === 'CheckBox') {\n addClass([this.overAllWrapper], 'e-checkbox');\n }\n if (Browser.isDevice) {\n this.componentWrapper.classList.add(ELEMENT_MOBILE_WRAPPER);\n }\n this.overAllWrapper.style.width = formatUnit(this.width);\n this.overAllWrapper.appendChild(this.componentWrapper);\n this.popupWrapper = createElement('div', { id: this.element.id + '_popup', className: POPUP_WRAPPER });\n if (this.mode === 'Delimiter' || this.mode === 'CheckBox') {\n this.delimiterWrapper = createElement('span', { className: DELIMITER_WRAPPER, styles: 'display:none' });\n this.componentWrapper.appendChild(this.delimiterWrapper);\n }\n else {\n this.chipCollectionWrapper = createElement('span', {\n className: CHIP_WRAPPER,\n styles: 'display:none'\n });\n this.componentWrapper.appendChild(this.chipCollectionWrapper);\n }\n if (this.mode !== 'Box') {\n this.componentWrapper.appendChild(this.viewWrapper);\n }\n this.componentWrapper.appendChild(this.searchWrapper);\n if (this.showClearButton && !Browser.isDevice) {\n this.componentWrapper.appendChild(this.overAllClear);\n }\n else {\n this.componentWrapper.classList.add(CLOSE_ICON_HIDE);\n }\n this.dropDownIcon();\n this.inputElement = createElement('input', {\n className: INPUT_ELEMENT,\n attrs: {\n spellcheck: 'false',\n type: 'text',\n autocomplete: 'off',\n tabindex: '0'\n }\n });\n if (this.element.tagName !== this.getNgDirective()) {\n this.element.style.display = 'none';\n }\n if (this.element.tagName === this.getNgDirective()) {\n this.element.appendChild(this.overAllWrapper);\n this.searchWrapper.appendChild(this.inputElement);\n }\n else {\n this.element.parentElement.insertBefore(this.overAllWrapper, this.element);\n this.searchWrapper.appendChild(this.inputElement);\n this.searchWrapper.appendChild(this.element);\n this.element.removeAttribute('tabindex');\n }\n if (this.floatLabelType !== 'Never') {\n createFloatLabel(this.overAllWrapper, this.searchWrapper, this.element, this.inputElement, this.value, this.floatLabelType, this.placeholder);\n }\n else if (this.floatLabelType === 'Never') {\n this.refreshPlaceHolder();\n }\n this.element.style.opacity = '';\n var id = this.element.getAttribute('id') ? this.element.getAttribute('id') : getUniqueID('ej2_dropdownlist');\n this.element.id = id;\n this.hiddenElement = createElement('select', {\n attrs: { 'aria-hidden': 'true', 'class': HIDDEN_ELEMENT, 'tabindex': '-1', 'multiple': 'true' }\n });\n this.componentWrapper.appendChild(this.hiddenElement);\n this.validationAttribute(this.element, this.hiddenElement);\n if (this.mode !== 'CheckBox') {\n this.hideOverAllClear();\n }\n this.wireEvent();\n this.enable(this.enabled);\n this.enableRTL(this.enableRtl);\n if (this.value && this.value.length) {\n this.renderPopup();\n if (!(this.dataSource instanceof DataManager)) {\n this.initialValueUpdate();\n this.initialUpdate();\n }\n else {\n this.setInitialValue = function () {\n _this.initStatus = false;\n _this.initialValueUpdate();\n _this.initialUpdate();\n _this.setInitialValue = null;\n _this.initStatus = true;\n };\n }\n }\n else {\n this.initialUpdate();\n }\n this.initStatus = true;\n this.checkAutoFocus();\n };\n MultiSelect.prototype.checkAutoFocus = function () {\n if (this.element.hasAttribute('autofocus')) {\n this.focusIn();\n }\n };\n MultiSelect.prototype.setFloatLabelType = function () {\n removeFloating(this.overAllWrapper, this.componentWrapper, this.searchWrapper, this.inputElement, this.value, this.floatLabelType, this.placeholder);\n if (this.floatLabelType !== 'Never') {\n createFloatLabel(this.overAllWrapper, this.searchWrapper, this.element, this.inputElement, this.value, this.floatLabelType, this.placeholder);\n }\n };\n MultiSelect.prototype.dropDownIcon = function () {\n if (this.mode === 'CheckBox' && this.showDropDownIcon) {\n this.dropIcon = createElement('span', { className: dropdownIcon });\n this.componentWrapper.appendChild(this.dropIcon);\n addClass([this.componentWrapper], ['e-down-icon']);\n }\n else {\n if (!isNullOrUndefined(this.dropIcon)) {\n this.dropIcon.parentElement.removeChild(this.dropIcon);\n removeClass([this.componentWrapper], ['e-down-icon']);\n }\n }\n };\n MultiSelect.prototype.initialUpdate = function () {\n if (this.mode !== 'Box') {\n this.updateDelimView();\n }\n this.updateCssClass();\n this.updateHTMLAttribute();\n this.updateReadonly(this.readonly);\n this.refreshInputHight();\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers. Also it removes the attributes and classes.\n * @method destroy\n * @return {void}\n */\n MultiSelect.prototype.destroy = function () {\n if (this.popupObj) {\n this.popupObj.hide();\n }\n this.notify(destroy, {});\n this.unwireListEvents();\n this.unWireEvent();\n this.list = null;\n this.popupObj = null;\n this.mainList = null;\n this.mainData = null;\n _super.prototype.destroy.call(this);\n var temp = ['readonly', 'aria-disabled', 'aria-placeholder', 'placeholder'];\n var length = temp.length;\n while (length > 0) {\n this.inputElement.removeAttribute(temp[length - 1]);\n length--;\n }\n this.element.style.display = 'block';\n if (this.overAllWrapper.parentElement) {\n if (this.overAllWrapper.parentElement.tagName === this.getNgDirective()) {\n remove(this.overAllWrapper);\n }\n else {\n this.overAllWrapper.parentElement.insertBefore(this.element, this.overAllWrapper);\n remove(this.overAllWrapper);\n }\n }\n };\n ;\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"cssClass\", void 0);\n __decorate([\n Property('100%')\n ], MultiSelect.prototype, \"width\", void 0);\n __decorate([\n Property('300px')\n ], MultiSelect.prototype, \"popupHeight\", void 0);\n __decorate([\n Property('100%')\n ], MultiSelect.prototype, \"popupWidth\", void 0);\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"placeholder\", void 0);\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"filterBarPlaceholder\", void 0);\n __decorate([\n Property({})\n ], MultiSelect.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"valueTemplate\", void 0);\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"footerTemplate\", void 0);\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"itemTemplate\", void 0);\n __decorate([\n Property(false)\n ], MultiSelect.prototype, \"allowFiltering\", void 0);\n __decorate([\n Property(false)\n ], MultiSelect.prototype, \"allowCustomValue\", void 0);\n __decorate([\n Property(true)\n ], MultiSelect.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(1000)\n ], MultiSelect.prototype, \"maximumSelectionLength\", void 0);\n __decorate([\n Property(false)\n ], MultiSelect.prototype, \"readonly\", void 0);\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"text\", void 0);\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"value\", void 0);\n __decorate([\n Property(true)\n ], MultiSelect.prototype, \"hideSelectedItem\", void 0);\n __decorate([\n Property(true)\n ], MultiSelect.prototype, \"closePopupOnSelect\", void 0);\n __decorate([\n Property('Default')\n ], MultiSelect.prototype, \"mode\", void 0);\n __decorate([\n Property(',')\n ], MultiSelect.prototype, \"delimiterChar\", void 0);\n __decorate([\n Property(true)\n ], MultiSelect.prototype, \"ignoreCase\", void 0);\n __decorate([\n Property(false)\n ], MultiSelect.prototype, \"showDropDownIcon\", void 0);\n __decorate([\n Property('Never')\n ], MultiSelect.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property(false)\n ], MultiSelect.prototype, \"showSelectAll\", void 0);\n __decorate([\n Property('Select All')\n ], MultiSelect.prototype, \"selectAllText\", void 0);\n __decorate([\n Property('Unselect All')\n ], MultiSelect.prototype, \"unSelectAllText\", void 0);\n __decorate([\n Property(true)\n ], MultiSelect.prototype, \"enableSelectionOrder\", void 0);\n __decorate([\n Property(true)\n ], MultiSelect.prototype, \"openOnClick\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"removing\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"removed\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"chipSelection\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"filtering\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"tagging\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"customValueSelection\", void 0);\n MultiSelect = __decorate([\n NotifyPropertyChanges\n ], MultiSelect);\n return MultiSelect;\n}(DropDownBase));\nexport { MultiSelect };\n","import { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { EventHandler, select, removeClass, addClass, detach, compile, L10n } from '@syncfusion/ej2-base';\nimport { Browser, attributes, isNullOrUndefined, append, closest, createElement, prepend } from '@syncfusion/ej2-base';\nimport { dropDownBaseClasses } from '../drop-down-base/drop-down-base';\nvar ICON = 'e-icons';\nvar CHECKBOXFRAME = 'e-frame';\nvar CHECK = 'e-check';\nvar CHECKBOXWRAP = 'e-checkbox-wrapper';\nvar CHECKBOXRIPPLE = 'e-ripple-container';\nvar INDETERMINATE = 'e-stop';\nvar checkAllParent = 'e-selectall-parent';\nvar searchBackIcon = 'e-input-group-icon e-back-icon e-icons';\nvar filterBarClearIcon = 'e-input-group-icon e-clear-icon e-icons';\nvar filterInput = 'e-input-filter';\nvar filterParent = 'e-filter-parent';\nvar mobileFilter = 'e-ddl-device-filter';\nvar clearIcon = 'e-clear-icon';\nvar popupFullScreen = 'e-popup-full-page';\nvar device = 'e-ddl-device';\nvar FOCUS = 'e-input-focus';\n/**\n * The Multiselect enable CheckBoxSelection call this inject module.\n */\nvar CheckBoxSelection = /** @class */ (function () {\n function CheckBoxSelection(parent) {\n this.activeLi = [];\n this.activeEle = [];\n this.parent = parent;\n this.addEventListener();\n }\n CheckBoxSelection.prototype.getModuleName = function () {\n return 'CheckBoxSelection';\n };\n CheckBoxSelection.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on('updatelist', this.listSelection, this);\n this.parent.on('listoption', this.listOption, this);\n this.parent.on('selectAll', this.setSelectAll, this);\n this.parent.on('checkSelectAll', this.checkSelectAll, this);\n this.parent.on('searchBox', this.setSearchBox, this);\n this.parent.on('blur', this.onBlur, this);\n this.parent.on('targetElement', this.targetElement, this);\n this.parent.on('deviceSearchBox', this.setDeviceSearchBox, this);\n this.parent.on('inputFocus', this.getFocus, this);\n this.parent.on('reOrder', this.setReorder, this);\n this.parent.on('activeList', this.getActiveList, this);\n this.parent.on('selectAllText', this.setLocale, this);\n this.parent.on('filterBarPlaceholder', this.setPlaceholder, this);\n EventHandler.add(document, 'mousedown', this.onDocumentClick, this);\n };\n CheckBoxSelection.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('updatelist', this.listSelection);\n this.parent.off('listoption', this.listOption);\n this.parent.off('selectAll', this.setSelectAll);\n this.parent.off('checkSelectAll', this.checkSelectAll);\n this.parent.off('searchBox', this.setSearchBox);\n this.parent.off('blur', this.onBlur);\n this.parent.off('targetElement', this.targetElement);\n this.parent.off('deviceSearchBox', this.setDeviceSearchBox);\n this.parent.off('inputFocus', this.getFocus);\n this.parent.off('reOrder', this.setReorder);\n this.parent.off('activeList', this.getActiveList);\n this.parent.off('selectAllText', this.setLocale);\n this.parent.off('filterBarPlaceholder', this.setPlaceholder);\n EventHandler.remove(document, 'mousedown', this.onDocumentClick);\n };\n CheckBoxSelection.prototype.listOption = function (args) {\n var _this = this;\n if (isNullOrUndefined(this.parent.listCurrentOptions.itemCreated)) {\n this.parent.listCurrentOptions.itemCreated = function (e) {\n _this.checboxCreate(e);\n };\n }\n else {\n var itemCreated_1 = this.parent.listCurrentOptions.itemCreated;\n this.parent.listCurrentOptions.itemCreated = function (e) {\n _this.checboxCreate(e);\n itemCreated_1.apply(_this, [e]);\n };\n }\n };\n ;\n CheckBoxSelection.prototype.setPlaceholder = function (props) {\n Input.setPlaceholder(props.filterBarPlaceholder, this.filterInput);\n };\n CheckBoxSelection.prototype.checboxCreate = function (e) {\n var item;\n if (!isNullOrUndefined(e.item)) {\n item = e.item;\n }\n else {\n item = e;\n }\n if (item.className !== 'e-list-group-item ' && item.className !== 'e-list-group-item') {\n var checkboxEle = createCheckBox(true);\n var icon = select('div.' + ICON, item);\n var id = item.getAttribute('data-uid');\n item.insertBefore(checkboxEle, item.childNodes[isNullOrUndefined(icon) ? 0 : 1]);\n select('.' + CHECKBOXFRAME, checkboxEle);\n var frame = select('.' + CHECKBOXFRAME, checkboxEle);\n return item;\n }\n else {\n return item;\n }\n };\n CheckBoxSelection.prototype.setSelectAll = function () {\n if (this.parent.showSelectAll) {\n if (isNullOrUndefined(this.checkAllParent)) {\n this.checkAllParent = createElement('div', {\n className: checkAllParent\n });\n this.selectAllSpan = createElement('span', {\n className: 'e-all-text'\n });\n this.selectAllSpan.textContent = '';\n this.checkAllParent.appendChild(this.selectAllSpan);\n this.setLocale();\n this.checboxCreate(this.checkAllParent);\n if (this.parent.headerTemplate) {\n if (!isNullOrUndefined(this.filterParent)) {\n append([this.checkAllParent], this.filterParent);\n }\n else {\n append([this.checkAllParent], this.parent.popupWrapper);\n }\n }\n if (!this.parent.headerTemplate) {\n if (!isNullOrUndefined(this.filterParent)) {\n append([this.checkAllParent], this.filterParent);\n }\n else {\n prepend([this.checkAllParent], this.parent.popupWrapper);\n }\n }\n EventHandler.add(this.checkAllParent, 'mousedown', this.clickHandler, this);\n }\n if (this.parent.list.classList.contains('e-nodata')) {\n this.checkAllParent.style.display = 'none';\n }\n else {\n this.checkAllParent.style.display = 'block';\n }\n this.parent.selectAllHeight = this.checkAllParent.getBoundingClientRect().height;\n }\n else if (!isNullOrUndefined(this.checkAllParent)) {\n this.checkAllParent.parentElement.removeChild(this.checkAllParent);\n this.checkAllParent = null;\n }\n };\n CheckBoxSelection.prototype.destroy = function () {\n this.removeEventListener();\n };\n CheckBoxSelection.prototype.listSelection = function (args) {\n var target;\n if (!isNullOrUndefined(args.e)) {\n target = !isNullOrUndefined(args.e.target) ?\n args.e.target.classList.contains('e-frame') ?\n args.e.target : args.li.querySelector('.e-checkbox-wrapper').childNodes[1]\n : args.li.querySelector('.e-checkbox-wrapper').childNodes[1];\n }\n else {\n target = args.li.lastElementChild.childNodes[1];\n }\n if (this.parent.itemTemplate) {\n target = args.li.firstElementChild.childNodes[1];\n }\n this.checkWrapper = closest(target, '.' + CHECKBOXWRAP);\n if (!isNullOrUndefined(this.checkWrapper)) {\n var checkElement = select('.' + CHECKBOXFRAME, this.checkWrapper);\n var selectAll = false;\n this.validateCheckNode(this.checkWrapper, checkElement.classList.contains(CHECK), args.li, args.e, selectAll);\n }\n };\n CheckBoxSelection.prototype.validateCheckNode = function (checkWrap, isCheck, li, e, selectAll) {\n this.changeState(checkWrap, isCheck ? 'uncheck' : 'check', e, true, selectAll);\n };\n CheckBoxSelection.prototype.clickHandler = function (e) {\n var target;\n if (e.currentTarget.classList.contains(this.checkAllParent.className)) {\n target = e.currentTarget.firstElementChild.lastElementChild;\n }\n else {\n target = e.currentTarget;\n }\n this.checkWrapper = closest(target, '.' + CHECKBOXWRAP);\n var selectAll = true;\n if (!isNullOrUndefined(this.checkWrapper)) {\n var checkElement = select('.' + CHECKBOXFRAME, this.checkWrapper);\n this.validateCheckNode(this.checkWrapper, checkElement.classList.contains(CHECK), null, e, selectAll);\n }\n e.preventDefault();\n };\n CheckBoxSelection.prototype.changeState = function (wrapper, state, e, isPrevent, selectAll) {\n var ariaState;\n var frameSpan = wrapper.getElementsByClassName(CHECKBOXFRAME)[0];\n if (state === 'check' && !frameSpan.classList.contains(CHECK)) {\n frameSpan.classList.remove(INDETERMINATE);\n frameSpan.classList.add(CHECK);\n ariaState = 'true';\n if (selectAll) {\n this.parent.selectAll(true);\n this.setLocale(true);\n }\n }\n else if (state === 'uncheck' && (frameSpan.classList.contains(CHECK) || frameSpan.classList.contains(INDETERMINATE))) {\n removeClass([frameSpan], [CHECK, INDETERMINATE]);\n ariaState = 'false';\n if (selectAll) {\n this.parent.selectAll(false);\n this.setLocale();\n }\n }\n ariaState = state === 'check' ? 'true' : state === 'uncheck' ? 'false' : ariaState;\n if (!isNullOrUndefined(ariaState)) {\n wrapper.setAttribute('aria-checked', ariaState);\n }\n };\n CheckBoxSelection.prototype.setSearchBox = function (args) {\n if (isNullOrUndefined(this.filterParent)) {\n this.filterParent = createElement('span', {\n className: filterParent\n });\n this.filterInput = createElement('input', {\n attrs: { type: 'text' },\n className: filterInput\n });\n this.parent.element.parentNode.insertBefore(this.filterInput, this.parent.element);\n var backIcon = false;\n if (Browser.isDevice) {\n backIcon = true;\n this.parent.mobFilter = false;\n }\n this.filterInputObj = Input.createInput({\n element: this.filterInput,\n buttons: backIcon ? [searchBackIcon, filterBarClearIcon] : [filterBarClearIcon],\n properties: { placeholder: this.parent.filterBarPlaceholder }\n });\n append([this.filterInputObj.container], this.filterParent);\n prepend([this.filterParent], args.popupElement);\n attributes(this.filterInput, {\n 'aria-disabled': 'false',\n 'aria-owns': this.parent.element.id + '_options',\n 'role': 'listbox',\n 'aria-activedescendant': null,\n 'autocomplete': 'off',\n 'autocorrect': 'off',\n 'autocapitalize': 'off',\n 'spellcheck': 'false'\n });\n this.clearIconElement = this.filterInput.parentElement.querySelector('.' + clearIcon);\n if (!Browser.isDevice && this.clearIconElement) {\n EventHandler.add(this.clearIconElement, 'mousedown', this.clearText, this);\n this.clearIconElement.style.visibility = 'hidden';\n }\n EventHandler.add(this.filterInput, 'input', this.parent.onInput, this.parent);\n EventHandler.add(this.filterInput, 'keyup', this.parent.KeyUp, this.parent);\n EventHandler.add(this.filterInput, 'keydown', this.parent.onKeyDown, this.parent);\n EventHandler.add(this.filterInput, 'blur', this.onBlur, this);\n this.parent.searchBoxHeight = (this.filterInputObj.container.parentElement).getBoundingClientRect().height;\n return this.filterInputObj;\n }\n };\n ;\n CheckBoxSelection.prototype.clickOnBackIcon = function (e) {\n this.parent.hidePopup();\n removeClass([document.body, this.parent.popupObj.element], popupFullScreen);\n };\n CheckBoxSelection.prototype.clearText = function (e) {\n this.parent.targetInputElement.value = '';\n this.parent.refreshPopup();\n this.parent.refreshListItems(null);\n this.clearIconElement.style.visibility = 'hidden';\n this.filterInput.focus();\n this.setReorder(e);\n e.preventDefault();\n };\n CheckBoxSelection.prototype.setDeviceSearchBox = function () {\n this.parent.popupObj.element.classList.add(device);\n this.parent.popupObj.element.classList.add(mobileFilter);\n this.parent.popupObj.position = { X: 0, Y: 0 };\n this.parent.popupObj.dataBind();\n attributes(this.parent.popupObj.element, { style: 'left:0px;right:0px;top:0px;bottom:0px;' });\n addClass([document.body, this.parent.popupObj.element], popupFullScreen);\n this.setSearchBoxPosition();\n this.backIconElement = this.filterInputObj.container.querySelector('.e-back-icon');\n this.clearIconElement = this.filterInputObj.container.querySelector('.' + clearIcon);\n this.clearIconElement.style.visibility = 'hidden';\n EventHandler.add(this.backIconElement, 'click', this.clickOnBackIcon, this);\n EventHandler.add(this.clearIconElement, 'click', this.clearText, this);\n };\n CheckBoxSelection.prototype.setSearchBoxPosition = function () {\n var searchBoxHeight = this.filterInput.parentElement.getBoundingClientRect().height;\n this.parent.popupObj.element.style.maxHeight = '100%';\n this.parent.popupObj.element.style.width = '100%';\n this.parent.list.style.maxHeight = (window.innerHeight - searchBoxHeight) + 'px';\n this.parent.list.style.height = (window.innerHeight - searchBoxHeight) + 'px';\n var clearElement = this.filterInput.parentElement.querySelector('.' + clearIcon);\n detach(this.filterInput);\n clearElement.parentElement.insertBefore(this.filterInput, clearElement);\n };\n CheckBoxSelection.prototype.targetElement = function () {\n this.parent.targetInputElement = this.filterInput;\n this.clearIconElement.style.visibility = this.parent.targetInputElement.value === '' ? 'hidden' : 'visible';\n return this.parent.targetInputElement.value;\n };\n CheckBoxSelection.prototype.onBlur = function (e) {\n var target;\n if (Browser.isIE) {\n target = !isNullOrUndefined(e) && e.target;\n }\n if (!Browser.isIE) {\n target = !isNullOrUndefined(e) && e.relatedTarget;\n }\n if (document.body.contains(this.parent.popupObj.element) && this.parent.popupObj.element.contains(target) && !Browser.isIE) {\n this.filterInput.focus();\n return;\n }\n if (this.parent.scrollFocusStatus) {\n e.preventDefault();\n this.filterInput.focus();\n this.parent.scrollFocusStatus = false;\n return;\n }\n if (document.body.contains(this.parent.popupObj.element) && !this.parent.popupObj.element.classList.contains('e-popup-close')) {\n this.parent.inputFocus = false;\n this.parent.updateValueState(e, this.parent.value, this.parent.tempValues);\n this.parent.dispatchEvent(this.parent.hiddenElement, 'change');\n }\n if (document.body.contains(this.parent.popupObj.element) &&\n !this.parent.popupObj.element.classList.contains('e-popup-close')) {\n this.parent.inputFocus = false;\n this.parent.overAllWrapper.classList.remove(FOCUS);\n this.parent.trigger('blur');\n this.parent.focused = true;\n }\n if (document.body.contains(this.parent.popupObj.element) &&\n !this.parent.popupObj.element.classList.contains('e-popup-close') && !Browser.isDevice) {\n this.parent.hidePopup();\n }\n };\n CheckBoxSelection.prototype.onDocumentClick = function (e) {\n var target = e.target;\n if (!isNullOrUndefined(this.parent.popupObj) && closest(target, '#' + this.parent.popupObj.element.id)) {\n e.preventDefault();\n }\n if (!(!isNullOrUndefined(this.parent.popupObj) && closest(target, '#' + this.parent.popupObj.element.id)) &&\n !this.parent.overAllWrapper.contains(e.target)) {\n if (this.parent.overAllWrapper.classList.contains(dropDownBaseClasses.focus) || this.parent.isPopupOpen()) {\n this.parent.inputFocus = false;\n this.parent.hidePopup();\n this.parent.onBlur();\n this.parent.focused = true;\n }\n }\n else {\n this.parent.scrollFocusStatus = (Browser.isIE || Browser.info.name === 'edge') && (document.activeElement === this.filterInput);\n }\n if (!this.parent.overAllWrapper.contains(e.target) && this.parent.overAllWrapper.classList.contains('e-input-focus') &&\n !this.parent.isPopupOpen()) {\n this.parent.onBlur(e);\n }\n };\n CheckBoxSelection.prototype.getFocus = function (e) {\n this.parent.overAllWrapper.classList.remove(FOCUS);\n if (e.value === 'focus') {\n this.filterInput.focus();\n }\n if (e.value === 'clear') {\n this.filterInput.value = '';\n this.clearIconElement.style.visibility = 'hidden';\n }\n };\n CheckBoxSelection.prototype.checkSelectAll = function (e) {\n if (e.value === 'check' && this.checkAllParent.getAttribute('aria-checked') !== 'true') {\n this.changeState(this.checkAllParent, e.value, null, null, false);\n this.setLocale(true);\n }\n if (e.value === 'uncheck') {\n this.changeState(this.checkAllParent, e.value, null, null, false);\n this.setLocale();\n }\n };\n CheckBoxSelection.prototype.setLocale = function (unSelect) {\n if (this.parent.selectAllText !== 'Select All' || this.parent.unSelectAllText !== 'Unselect All') {\n var template = unSelect ? this.parent.unSelectAllText : this.parent.selectAllText;\n var compiledString = void 0;\n this.selectAllSpan.textContent = '';\n compiledString = compile(template);\n for (var _i = 0, _a = compiledString({}); _i < _a.length; _i++) {\n var item = _a[_i];\n this.selectAllSpan.textContent = item.textContent;\n }\n }\n else {\n var l10nLocale = { selectAllText: 'Select All', unSelectAllText: 'Unselect All' };\n var l10n = new L10n('dropdowns', l10nLocale, this.parent.locale);\n this.selectAllSpan.textContent = unSelect ? l10n.getConstant('unSelectAllText') : l10n.getConstant('selectAllText');\n }\n };\n CheckBoxSelection.prototype.getActiveList = function (args) {\n if (args.li.classList.contains('e-active')) {\n this.activeLi.push(args.li.cloneNode(true));\n }\n else {\n this.activeLi.splice(args.index, 1);\n }\n };\n CheckBoxSelection.prototype.setReorder = function (args) {\n if (this.parent.enableSelectionOrder && !isNullOrUndefined(this.parent.value)) {\n var activeLiCount = this.parent.ulElement.querySelectorAll('li.e-active').length;\n var remLi = void 0;\n var ulEle = createElement('ul', {\n className: 'e-list-parent e-ul e-reorder'\n });\n var removeEle = createElement('div');\n if (activeLiCount > 0) {\n append(this.parent.ulElement.querySelectorAll('li.e-active'), ulEle);\n remLi = this.parent.ulElement.querySelectorAll('li.e-active');\n addClass(remLi, 'e-reorder-hide');\n prepend([ulEle], this.parent.list);\n }\n this.parent.focusAtFirstListItem();\n }\n };\n return CheckBoxSelection;\n}());\nexport { CheckBoxSelection };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar Dictionary = /** @class */ (function () {\n function Dictionary() {\n this.keysInternal = [];\n this.valuesInternal = [];\n this.item = [];\n }\n Object.defineProperty(Dictionary.prototype, \"length\", {\n /**\n * @private\n */\n get: function () {\n return this.keysInternal.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Dictionary.prototype, \"keys\", {\n /**\n * @private\n */\n get: function () {\n return this.getItem();\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n Dictionary.prototype.getItem = function () {\n this.item = [];\n for (var i = 0; i < this.keysInternal.length; i++) {\n this.item.push(this.keysInternal[i]);\n }\n return this.item;\n };\n /**\n * @private\n */\n Dictionary.prototype.add = function (key, value) {\n if (isNullOrUndefined(key)) {\n throw new ReferenceError('Provided key or value is not valid.');\n }\n var index = this.keysInternal.indexOf(key);\n // if (index < 0 || index > this.keysInternal.length - 1) {\n if (index < 0) {\n this.keysInternal.push(key);\n this.valuesInternal.push(value);\n }\n return 1;\n // else {\n // throw new RangeError('An item with the same key has already been added.');\n // }\n };\n /**\n * @private\n */\n Dictionary.prototype.get = function (key) {\n if (isNullOrUndefined(key)) {\n throw new ReferenceError('Provided key is not valid.');\n }\n var index = this.keysInternal.indexOf(key);\n if (index < 0 || index > this.keysInternal.length - 1) {\n throw new RangeError('No item with the specified key has been added.');\n }\n else {\n return this.valuesInternal[index];\n }\n };\n /**\n * @private\n */\n Dictionary.prototype.set = function (key, value) {\n if (isNullOrUndefined(key)) {\n throw new ReferenceError('Provided key is not valid.');\n }\n var index = this.keysInternal.indexOf(key);\n if (index < 0 || index > this.keysInternal.length - 1) {\n throw new RangeError('No item with the specified key has been added.');\n }\n else {\n this.valuesInternal[index] = value;\n }\n };\n /**\n * @private\n */\n Dictionary.prototype.remove = function (key) {\n if (isNullOrUndefined(key)) {\n throw new ReferenceError('Provided key is not valid.');\n }\n var index = this.keysInternal.indexOf(key);\n if (index < 0 || index > this.keysInternal.length - 1) {\n throw new RangeError('No item with the specified key has been added.');\n }\n else {\n this.keysInternal.splice(index, 1);\n this.valuesInternal.splice(index, 1);\n return true;\n }\n };\n /**\n * @private\n */\n Dictionary.prototype.containsKey = function (key) {\n if (isNullOrUndefined(key)) {\n throw new ReferenceError('Provided key is not valid.');\n }\n var index = this.keysInternal.indexOf(key);\n if (index < 0 || index > this.keysInternal.length - 1) {\n return false;\n }\n return true;\n };\n /**\n * @private\n */\n Dictionary.prototype.clear = function () {\n this.keysInternal = [];\n this.valuesInternal = [];\n };\n /**\n * @private\n */\n Dictionary.prototype.destroy = function () {\n this.clear();\n this.keysInternal = undefined;\n this.valuesInternal = undefined;\n };\n return Dictionary;\n}());\nexport { Dictionary };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Dictionary } from './dictionary';\n/**\n * @private\n */\nvar WUniqueFormat = /** @class */ (function () {\n function WUniqueFormat(type) {\n this.referenceCount = 0;\n this.uniqueFormatType = type;\n this.propertiesHash = new Dictionary();\n }\n /**\n * @private\n */\n WUniqueFormat.prototype.isEqual = function (source, property, modifiedValue) {\n var isEqual = false;\n switch (this.uniqueFormatType) {\n case 1:\n isEqual = this.isBorderEqual(source, property, modifiedValue);\n break;\n case 2:\n isEqual = this.isCharacterFormatEqual(source, property, modifiedValue);\n break;\n case 3:\n isEqual = this.isParagraphFormatEqual(source, property, modifiedValue);\n break;\n case 4:\n isEqual = this.isCellFormatEqual(source, property, modifiedValue);\n break;\n case 5:\n isEqual = this.isShadingEqual(source, property, modifiedValue);\n break;\n case 6:\n isEqual = this.isRowFormatEqual(source, property, modifiedValue);\n break;\n case 7:\n isEqual = this.isListFormatEqual(source, property, modifiedValue);\n break;\n case 8:\n isEqual = this.isTableFormatEqual(source, property, modifiedValue);\n break;\n case 9:\n isEqual = this.isListLevelEqual(source, property, modifiedValue);\n break;\n case 10:\n isEqual = this.isSectionFormatEqual(source, property, modifiedValue);\n break;\n default:\n break;\n }\n return isEqual;\n };\n // tslint:disable-next-line:max-line-length\n WUniqueFormat.prototype.isNotEqual = function (property, source, modifiedProperty, modifiedValue, uniqueFormatType) {\n var targetValue = undefined;\n var propertyType = WUniqueFormat.getPropertyType(uniqueFormatType, property);\n if (this.propertiesHash.containsKey(propertyType)) {\n targetValue = this.propertiesHash.get(propertyType);\n }\n var sourceValue = undefined;\n if (property === modifiedProperty) {\n sourceValue = modifiedValue;\n }\n else if (source.containsKey(propertyType)) {\n sourceValue = source.get(propertyType);\n }\n // tslint:disable-next-line:max-line-length\n if (!(targetValue === sourceValue || (!isNullOrUndefined(targetValue) && !isNullOrUndefined(sourceValue) && targetValue === sourceValue))) {\n return true;\n }\n return false;\n };\n /**\n * @private\n */\n WUniqueFormat.getPropertyType = function (uniqueFormatType, property) {\n var type = 0;\n switch (uniqueFormatType) {\n case 1:\n type = this.getBorderPropertyType(property);\n break;\n case 2:\n type = this.getCharacterFormatPropertyType(property);\n break;\n case 3:\n type = this.getParaFormatPropertyType(property);\n break;\n case 4:\n type = this.getCellFormatPropertyType(property);\n break;\n case 5:\n type = this.getShadingPropertyType(property);\n break;\n case 6:\n type = this.getRowFormatType(property);\n break;\n case 7:\n type = this.getListFormatType(property);\n break;\n case 8:\n type = this.getTableFormatType(property);\n break;\n case 9:\n type = this.getListLevelType(property);\n break;\n case 10:\n type = this.getSectionFormatType(property);\n break;\n default:\n break;\n }\n return type;\n };\n WUniqueFormat.getRowFormatType = function (property) {\n if (property === 'allowBreakAcrossPages') {\n return 1;\n }\n if (property === 'isHeader') {\n return 2;\n }\n if (property === 'height') {\n return 3;\n }\n if (property === 'heightType') {\n return 4;\n }\n if (property === 'gridBefore') {\n return 5;\n }\n if (property === 'gridBeforeWidth') {\n return 6;\n }\n if (property === 'gridBeforeWidthType') {\n return 7;\n }\n if (property === 'gridAfter') {\n return 8;\n }\n if (property === 'gridAfterWidth') {\n return 9;\n }\n if (property === 'gridAfterWidthType') {\n return 10;\n }\n return 0;\n };\n WUniqueFormat.getListFormatType = function (property) {\n if (property === 'listId') {\n return 1;\n }\n if (property === 'listLevelNumber') {\n return 2;\n }\n return 0;\n };\n WUniqueFormat.getTableFormatType = function (property) {\n if (property === 'leftMargin') {\n return 1;\n }\n if (property === 'rightMargin') {\n return 2;\n }\n if (property === 'topMargin') {\n return 3;\n }\n if (property === 'bottomMargin') {\n return 4;\n }\n if (property === 'cellSpacing') {\n return 5;\n }\n if (property === 'leftIndent') {\n return 6;\n }\n if (property === 'tableAlignment') {\n return 7;\n }\n if (property === 'preferredWidth') {\n return 8;\n }\n if (property === 'preferredWidthType') {\n return 9;\n }\n return 0;\n };\n WUniqueFormat.getListLevelType = function (property) {\n if (property === 'listLevelPattern') {\n return 1;\n }\n if (property === 'startAt') {\n return 2;\n }\n if (property === 'followCharacter') {\n return 3;\n }\n if (property === 'numberFormat') {\n return 4;\n }\n if (property === 'restartLevel') {\n return 5;\n }\n return 0;\n };\n WUniqueFormat.getShadingPropertyType = function (property) {\n if (property === 'backgroundColor') {\n return 1;\n }\n if (property === 'foregroundColor') {\n return 2;\n }\n if (property === 'textureStyle') {\n return 3;\n }\n return 0;\n };\n WUniqueFormat.getCellFormatPropertyType = function (property) {\n if (property === 'leftMargin') {\n return 1;\n }\n if (property === 'rightMargin') {\n return 2;\n }\n if (property === 'topMargin') {\n return 3;\n }\n if (property === 'bottomMargin') {\n return 4;\n }\n if (property === 'columnSpan') {\n return 5;\n }\n if (property === 'rowSpan') {\n return 6;\n }\n if (property === 'verticalAlignment') {\n return 7;\n }\n if (property === 'preferredWidthType') {\n return 8;\n }\n if (property === 'preferredWidth') {\n return 9;\n }\n if (property === 'cellWidth') {\n return 10;\n }\n return 0;\n };\n WUniqueFormat.getBorderPropertyType = function (property) {\n if (property === 'color') {\n return 1;\n }\n if (property === 'lineStyle') {\n return 2;\n }\n if (property === 'lineWidth') {\n return 3;\n }\n if (property === 'shadow') {\n return 4;\n }\n if (property === 'space') {\n return 5;\n }\n if (property === 'hasNoneStyle') {\n return 6;\n }\n return 0;\n };\n WUniqueFormat.getCharacterFormatPropertyType = function (property) {\n if (property === 'fontColor') {\n return 1;\n }\n if (property === 'fontFamily') {\n return 2;\n }\n if (property === 'fontSize') {\n return 3;\n }\n if (property === 'bold') {\n return 4;\n }\n if (property === 'italic') {\n return 5;\n }\n if (property === 'underline') {\n return 6;\n }\n if (property === 'strikethrough') {\n return 7;\n }\n if (property === 'baselineAlignment') {\n return 8;\n }\n if (property === 'highlightColor') {\n return 9;\n }\n return 0;\n };\n WUniqueFormat.getParaFormatPropertyType = function (property) {\n if (property === 'leftIndent') {\n return 1;\n }\n if (property === 'rightIndent') {\n return 2;\n }\n if (property === 'firstLineIndent') {\n return 3;\n }\n if (property === 'textAlignment') {\n return 4;\n }\n if (property === 'beforeSpacing') {\n return 5;\n }\n if (property === 'afterSpacing') {\n return 6;\n }\n if (property === 'lineSpacing') {\n return 7;\n }\n if (property === 'lineSpacingType') {\n return 8;\n }\n if (property === 'outlineLevel') {\n return 9;\n }\n return 0;\n };\n WUniqueFormat.getSectionFormatType = function (property) {\n if (property === 'headerDistance') {\n return 1;\n }\n if (property === 'footerDistance') {\n return 2;\n }\n if (property === 'differentFirstPage') {\n return 3;\n }\n if (property === 'differentOddAndEvenPages') {\n return 4;\n }\n if (property === 'pageWidth') {\n return 5;\n }\n if (property === 'pageHeight') {\n return 6;\n }\n if (property === 'leftMargin') {\n return 7;\n }\n if (property === 'topMargin') {\n return 8;\n }\n if (property === 'rightMargin') {\n return 9;\n }\n if (property === 'bottomMargin') {\n return 10;\n }\n return 0;\n };\n /**\n * @private\n */\n WUniqueFormat.prototype.isBorderEqual = function (source, modifiedProperty, modifiedValue) {\n if (this.isNotEqual('color', source, modifiedProperty, modifiedValue, 1)) {\n return false;\n }\n if (this.isNotEqual('lineStyle', source, modifiedProperty, modifiedValue, 1)) {\n return false;\n }\n if (this.isNotEqual('lineWidth', source, modifiedProperty, modifiedValue, 1)) {\n return false;\n }\n if (this.isNotEqual('shadow', source, modifiedProperty, modifiedValue, 1)) {\n return false;\n }\n if (this.isNotEqual('space', source, modifiedProperty, modifiedValue, 1)) {\n return false;\n }\n if (this.isNotEqual('hasNoneStyle', source, modifiedProperty, modifiedValue, 1)) {\n return false;\n }\n return true;\n };\n /**\n * @private\n */\n WUniqueFormat.prototype.isCharacterFormatEqual = function (source, modifiedProperty, modifiedValue) {\n if (this.isNotEqual('fontColor', source, modifiedProperty, modifiedValue, 2)) {\n return false;\n }\n if (this.isNotEqual('fontFamily', source, modifiedProperty, modifiedValue, 2)) {\n return false;\n }\n if (this.isNotEqual('fontSize', source, modifiedProperty, modifiedValue, 2)) {\n return false;\n }\n if (this.isNotEqual('bold', source, modifiedProperty, modifiedValue, 2)) {\n return false;\n }\n if (this.isNotEqual('italic', source, modifiedProperty, modifiedValue, 2)) {\n return false;\n }\n if (this.isNotEqual('underline', source, modifiedProperty, modifiedValue, 2)) {\n return false;\n }\n if (this.isNotEqual('strikethrough', source, modifiedProperty, modifiedValue, 2)) {\n return false;\n }\n if (this.isNotEqual('baselineAlignment', source, modifiedProperty, modifiedValue, 2)) {\n return false;\n }\n if (this.isNotEqual('highlightColor', source, modifiedProperty, modifiedValue, 2)) {\n return false;\n }\n return true;\n };\n WUniqueFormat.prototype.isParagraphFormatEqual = function (source, modifiedProperty, modifiedValue) {\n if (this.isNotEqual('leftIndent', source, modifiedProperty, modifiedValue, 3)) {\n return false;\n }\n if (this.isNotEqual('rightIndent', source, modifiedProperty, modifiedValue, 3)) {\n return false;\n }\n if (this.isNotEqual('firstLineIndent', source, modifiedProperty, modifiedValue, 3)) {\n return false;\n }\n if (this.isNotEqual('textAlignment', source, modifiedProperty, modifiedValue, 3)) {\n return false;\n }\n if (this.isNotEqual('beforeSpacing', source, modifiedProperty, modifiedValue, 3)) {\n return false;\n }\n if (this.isNotEqual('afterSpacing', source, modifiedProperty, modifiedValue, 3)) {\n return false;\n }\n if (this.isNotEqual('lineSpacing', source, modifiedProperty, modifiedValue, 3)) {\n return false;\n }\n if (this.isNotEqual('lineSpacingType', source, modifiedProperty, modifiedValue, 3)) {\n return false;\n }\n if (this.isNotEqual('outlineLevel', source, modifiedProperty, modifiedValue, 3)) {\n return false;\n }\n return true;\n };\n /**\n * @private\n */\n WUniqueFormat.prototype.isCellFormatEqual = function (source, modifiedProperty, modifiedValue) {\n if (this.isNotEqual('leftMargin', source, modifiedProperty, modifiedValue, 4)) {\n return false;\n }\n if (this.isNotEqual('rightMargin', source, modifiedProperty, modifiedValue, 4)) {\n return false;\n }\n if (this.isNotEqual('topMargin', source, modifiedProperty, modifiedValue, 4)) {\n return false;\n }\n if (this.isNotEqual('bottomMargin', source, modifiedProperty, modifiedValue, 4)) {\n return false;\n }\n if (this.isNotEqual('columnSpan', source, modifiedProperty, modifiedValue, 4)) {\n return false;\n }\n if (this.isNotEqual('rowSpan', source, modifiedProperty, modifiedValue, 4)) {\n return false;\n }\n if (this.isNotEqual('verticalAlignment', source, modifiedProperty, modifiedValue, 4)) {\n return false;\n }\n if (this.isNotEqual('preferredWidthType', source, modifiedProperty, modifiedValue, 4)) {\n return false;\n }\n if (this.isNotEqual('preferredWidth', source, modifiedProperty, modifiedValue, 4)) {\n return false;\n }\n if (this.isNotEqual('cellWidth', source, modifiedProperty, modifiedValue, 4)) {\n return false;\n }\n return true;\n };\n /**\n * @private\n */\n WUniqueFormat.prototype.isShadingEqual = function (source, modifiedProperty, modifiedValue) {\n if (this.isNotEqual('backgroundColor', source, modifiedProperty, modifiedValue, 5)) {\n return false;\n }\n if (this.isNotEqual('foregroundColor', source, modifiedProperty, modifiedValue, 5)) {\n return false;\n }\n if (this.isNotEqual('textureStyle', source, modifiedProperty, modifiedValue, 5)) {\n return false;\n }\n return true;\n };\n /**\n * @private\n */\n WUniqueFormat.prototype.isRowFormatEqual = function (source, modifiedProperty, modifiedValue) {\n if (this.isNotEqual('allowBreakAcrossPages', source, modifiedProperty, modifiedValue, 6)) {\n return false;\n }\n if (this.isNotEqual('isHeader', source, modifiedProperty, modifiedValue, 6)) {\n return false;\n }\n if (this.isNotEqual('height', source, modifiedProperty, modifiedValue, 6)) {\n return false;\n }\n if (this.isNotEqual('heightType', source, modifiedProperty, modifiedValue, 6)) {\n return false;\n }\n if (this.isNotEqual('gridBefore', source, modifiedProperty, modifiedValue, 6)) {\n return false;\n }\n if (this.isNotEqual('gridBeforeWidth', source, modifiedProperty, modifiedValue, 6)) {\n return false;\n }\n if (this.isNotEqual('gridBeforeWidthType', source, modifiedProperty, modifiedValue, 6)) {\n return false;\n }\n if (this.isNotEqual('gridAfter', source, modifiedProperty, modifiedValue, 6)) {\n return false;\n }\n if (this.isNotEqual('gridAfterWidth', source, modifiedProperty, modifiedValue, 6)) {\n return false;\n }\n if (this.isNotEqual('gridAfterWidthType', source, modifiedProperty, modifiedValue, 6)) {\n return false;\n }\n return true;\n };\n /**\n * @private\n */\n WUniqueFormat.prototype.isListFormatEqual = function (source, modifiedProperty, modifiedValue) {\n if (this.isNotEqual('listId', source, modifiedProperty, modifiedValue, 7)) {\n return false;\n }\n if (this.isNotEqual('listLevelNumber', source, modifiedProperty, modifiedValue, 7)) {\n return false;\n }\n return true;\n };\n /**\n * @private\n */\n WUniqueFormat.prototype.isTableFormatEqual = function (source, modifiedProperty, modifiedValue) {\n if (this.isNotEqual('leftMargin', source, modifiedProperty, modifiedValue, 8)) {\n return false;\n }\n if (this.isNotEqual('rightMargin', source, modifiedProperty, modifiedValue, 8)) {\n return false;\n }\n if (this.isNotEqual('topMargin', source, modifiedProperty, modifiedValue, 8)) {\n return false;\n }\n if (this.isNotEqual('bottomMargin', source, modifiedProperty, modifiedValue, 8)) {\n return false;\n }\n if (this.isNotEqual('cellSpacing', source, modifiedProperty, modifiedValue, 8)) {\n return false;\n }\n if (this.isNotEqual('leftIndent', source, modifiedProperty, modifiedValue, 8)) {\n return false;\n }\n if (this.isNotEqual('tableAlignment', source, modifiedProperty, modifiedValue, 8)) {\n return false;\n }\n if (this.isNotEqual('preferredWidth', source, modifiedProperty, modifiedValue, 8)) {\n return false;\n }\n if (this.isNotEqual('preferredWidthType', source, modifiedProperty, modifiedValue, 8)) {\n return false;\n }\n return true;\n };\n /**\n * @private\n */\n WUniqueFormat.prototype.isListLevelEqual = function (source, modifiedProperty, modifiedValue) {\n if (this.isNotEqual('listLevelPattern', source, modifiedProperty, modifiedValue, 9)) {\n return false;\n }\n if (this.isNotEqual('startAt', source, modifiedProperty, modifiedValue, 9)) {\n return false;\n }\n if (this.isNotEqual('followCharacter', source, modifiedProperty, modifiedValue, 9)) {\n return false;\n }\n if (this.isNotEqual('numberFormat', source, modifiedProperty, modifiedValue, 9)) {\n return false;\n }\n if (this.isNotEqual('restartLevel', source, modifiedProperty, modifiedValue, 9)) {\n return false;\n }\n return true;\n };\n /**\n * @private\n */\n WUniqueFormat.prototype.isSectionFormatEqual = function (source, modifiedProperty, modifiedValue) {\n if (this.isNotEqual('headerDistance', source, modifiedProperty, modifiedValue, 10)) {\n return false;\n }\n if (this.isNotEqual('footerDistance', source, modifiedProperty, modifiedValue, 10)) {\n return false;\n }\n if (this.isNotEqual('differentFirstPage', source, modifiedProperty, modifiedValue, 10)) {\n return false;\n }\n if (this.isNotEqual('differentOddAndEvenPages', source, modifiedProperty, modifiedValue, 10)) {\n return false;\n }\n if (this.isNotEqual('pageWidth', source, modifiedProperty, modifiedValue, 10)) {\n return false;\n }\n if (this.isNotEqual('pageHeight', source, modifiedProperty, modifiedValue, 10)) {\n return false;\n }\n if (this.isNotEqual('leftMargin', source, modifiedProperty, modifiedValue, 10)) {\n return false;\n }\n if (this.isNotEqual('topMargin', source, modifiedProperty, modifiedValue, 10)) {\n return false;\n }\n if (this.isNotEqual('rightMargin', source, modifiedProperty, modifiedValue, 10)) {\n return false;\n }\n if (this.isNotEqual('bottomMargin', source, modifiedProperty, modifiedValue, 10)) {\n return false;\n }\n return true;\n };\n /**\n * @private\n */\n WUniqueFormat.prototype.cloneItems = function (format, property, value, uniqueFormatType) {\n var propertyType = WUniqueFormat.getPropertyType(uniqueFormatType, property);\n var keys = format.propertiesHash.getItem();\n for (var i = 0; i < keys.length; i++) {\n if (keys[i] === propertyType) {\n this.propertiesHash.add(propertyType, value);\n }\n else {\n this.propertiesHash.add(keys[i], format.propertiesHash.get(keys[i]));\n }\n }\n if (!format.propertiesHash.containsKey(propertyType)) {\n this.propertiesHash.add(propertyType, value);\n }\n };\n /**\n * @private\n */\n WUniqueFormat.prototype.mergeProperties = function (format) {\n var hash = format.cloneProperties();\n var keys = this.propertiesHash.keys;\n for (var i = 0; i < keys.length; i++) {\n if (!hash.containsKey(keys[i])) {\n hash.add(keys[i], this.propertiesHash.get(keys[i]));\n }\n }\n return hash;\n };\n /**\n * @private\n */\n WUniqueFormat.prototype.cloneProperties = function () {\n var hash = new Dictionary();\n var keys = this.propertiesHash.keys;\n for (var i = 0; i < keys.length; i++) {\n hash.add(keys[i], this.propertiesHash.get(keys[i]));\n }\n return hash;\n };\n // public cloneItemsInternal(format: WUniqueFormat): void {\n // let keys: number[] = format.propertiesHash.getItem();\n // for (let i: number = 0; i < keys.length; i++) {\n // this.propertiesHash.add(keys[i], format.propertiesHash.get(keys[i]));\n // }\n // this.referenceCount = format.referenceCount;\n // }\n /**\n * @private\n */\n WUniqueFormat.prototype.destroy = function () {\n if (!isNullOrUndefined(this.propertiesHash)) {\n this.propertiesHash.destroy();\n }\n this.propertiesHash = undefined;\n this.referenceCount = undefined;\n this.uniqueFormatType = undefined;\n };\n return WUniqueFormat;\n}());\nexport { WUniqueFormat };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { WUniqueFormat } from './unique-format';\n/**\n * @private\n */\nvar WUniqueFormats = /** @class */ (function () {\n function WUniqueFormats() {\n this.items = [];\n }\n /**\n * @private\n */\n WUniqueFormats.prototype.addUniqueFormat = function (format, type) {\n var matchedFormat = undefined;\n for (var i = 0; i < this.items.length; i++) {\n if (this.items[i].isEqual(format, undefined, undefined)) {\n matchedFormat = this.items[i];\n break;\n }\n }\n if (isNullOrUndefined(matchedFormat)) {\n matchedFormat = new WUniqueFormat(type);\n matchedFormat.propertiesHash = format;\n matchedFormat.referenceCount = 1;\n this.items.push(matchedFormat);\n }\n else {\n matchedFormat.referenceCount++;\n }\n return matchedFormat;\n };\n /**\n * @private\n */\n WUniqueFormats.prototype.updateUniqueFormat = function (uniqueFormat, property, value) {\n var matchedFormat = undefined;\n for (var i = 0; i < this.items.length; i++) {\n if (this.items[i].isEqual(uniqueFormat.propertiesHash, property, value)) {\n matchedFormat = this.items[i];\n break;\n }\n }\n if (isNullOrUndefined(matchedFormat)) {\n matchedFormat = new WUniqueFormat(uniqueFormat.uniqueFormatType);\n matchedFormat.cloneItems(uniqueFormat, property, value, uniqueFormat.uniqueFormatType);\n matchedFormat.referenceCount = 1;\n this.items.push(matchedFormat);\n }\n else {\n matchedFormat.referenceCount++;\n }\n this.remove(uniqueFormat);\n uniqueFormat = undefined;\n return matchedFormat;\n };\n /**\n * @private\n */\n WUniqueFormats.prototype.remove = function (uniqueFormat) {\n uniqueFormat.referenceCount--;\n if (uniqueFormat.referenceCount <= 0) {\n this.items.splice(this.items.indexOf(uniqueFormat), 1);\n uniqueFormat.destroy();\n uniqueFormat = undefined;\n }\n };\n /**\n * @private\n */\n WUniqueFormats.prototype.clear = function () {\n if (isNullOrUndefined(this.items)) {\n for (var i = 0; i < this.items.length; i++) {\n this.items[i].destroy();\n }\n }\n this.items = [];\n };\n /**\n * @private\n */\n WUniqueFormats.prototype.destroy = function () {\n this.clear();\n this.items = undefined;\n };\n return WUniqueFormats;\n}());\nexport { WUniqueFormats };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, NotifyPropertyChanges, Event } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, L10n, setCulture, Browser } from '@syncfusion/ej2-base';\nimport { Save } from '@syncfusion/ej2-file-utils';\nimport { LayoutViewer, PageLayoutViewer, BulletsAndNumberingDialog } from './index';\nimport { Print } from './index';\nimport { BodyWidget, ParagraphWidget } from './index';\nimport { WSectionFormat, WParagraphFormat, WCharacterFormat } from './index';\nimport { SfdtReader } from './index';\nimport { Selection } from './index';\nimport { Editor, EditorHistory } from './index';\nimport { WStyles } from './index';\nimport { Search } from './index';\nimport { OptionsPane } from './index';\nimport { WordExport } from './index';\nimport { TextExport } from './index';\nimport { ContextMenu } from './index';\nimport { ImageResizer } from './index';\nimport { SfdtExport } from './index';\nimport { HyperlinkDialog, TableDialog, BookmarkDialog, StylesDialog, TableOfContentsDialog } from './index';\nimport { PageSetupDialog, ParagraphDialog, ListDialog, StyleDialog, FontDialog } from './index';\nimport { TablePropertiesDialog, BordersAndShadingDialog, CellOptionsDialog, TableOptionsDialog } from './index';\n/**\n * The Document editor component is used to draft, save or print rich text contents as page by page.\n */\nvar DocumentEditor = /** @class */ (function (_super) {\n __extends(DocumentEditor, _super);\n /**\n * Initialize the constructor of DocumentEditor\n */\n function DocumentEditor(options, element) {\n var _this = _super.call(this, options, element) || this;\n //Internal Variable\n _this.enableHeaderFooterIn = false;\n /**\n * @private\n */\n _this.isShiftingEnabled = false;\n /**\n * @private\n */\n _this.isLayoutEnabled = true;\n /**\n * @private\n */\n _this.isPastingContent = false;\n /**\n * @private\n */\n _this.parser = undefined;\n _this.disableHistoryIn = false;\n /**\n * @private\n */\n _this.findResultsList = undefined;\n /**\n * Gets or sets the name of the document.\n */\n _this.documentName = '';\n /**\n * @private\n */\n _this.tablePropertiesDialogModule = undefined;\n /**\n * @private\n */\n _this.bordersAndShadingDialogModule = undefined;\n /**\n * @private\n */\n _this.cellOptionsDialogModule = undefined;\n /**\n * @private\n */\n _this.tableOptionsDialogModule = undefined;\n /**\n * @private\n */\n _this.paragraphDialogModule = undefined;\n /**\n * @private\n */\n _this.imageResizerModule = undefined;\n /**\n * Gets or Sets a value indicating whether holding Ctrl key is required to follow hyperlink on click. The default value is true.\n */\n _this.useCtrlClickToFollowHyperlink = true;\n /**\n * Gets or sets the page outline color.\n */\n _this.pageOutline = '#000000';\n /**\n * Gets or sets a value indicating whether to enable cursor in document editor on read only state or not. The default value is false.\n */\n _this.enableCursorOnReadOnly = false;\n /**\n * Gets or sets a value indicating whether local paste needs to be enabled or not.\n */\n _this.enableLocalPaste = false;\n /**\n * @private\n */\n _this.defaultLocale = {\n 'Table': 'Table',\n 'Row': 'Row',\n 'Cell': 'Cell',\n 'Ok': 'Ok',\n 'Cancel': 'Cancel',\n 'Size': 'Size',\n 'Preferred Width': 'Preferred width',\n 'Point': 'Points',\n 'Percent': 'Percent',\n 'Measure in': 'Measure in',\n 'Alignment': 'Alignment',\n 'Left': 'Left',\n 'Center': 'Center',\n 'Right': 'Right',\n 'Justify': 'Justify',\n 'Indent from Left': 'Indent from left',\n 'Borders and Shading': 'Borders and Shading',\n 'Options': 'Options',\n 'Specify height': 'Specify height',\n 'At least': 'At least',\n 'Exactly': 'Exactly',\n 'Row height is': 'Row height is',\n 'Allow row to break across pages': 'Allow row to break across pages',\n 'Repeat as header row at the top of each page': 'Repeat as header row at the top of each page',\n 'Vertical alignment': 'Vertical alignment',\n 'Top': 'Top',\n 'Bottom': 'Bottom',\n 'Default Cell Margins': 'Default cell margins',\n 'Default Cell Spacing': 'Default cell spacing',\n 'Allow Spacing Between Cells': 'Allow spacing between cells',\n 'Cell Margins': 'Cell margins',\n 'Same as the whole table': 'Same as the whole table',\n 'Borders': 'Borders',\n 'None': 'None',\n 'Single': 'Single',\n 'Dot': 'Dot',\n 'DashSmallGap': 'DashSmallGap',\n 'DashLargeGap': 'DashLargeGap',\n 'DashDot': 'DashDot',\n 'DashDotDot': 'DashDotDot',\n 'Double': 'Double',\n 'Triple': 'Triple',\n 'ThinThickSmallGap': 'ThinThickSmallGap',\n 'ThickThinSmallGap': 'ThickThinSmallGap',\n 'ThinThickThinSmallGap': 'ThinThickThinSmallGap',\n 'ThinThickMediumGap': 'ThinThickMediumGap',\n 'ThickThinMediumGap': 'ThickThinMediumGap',\n 'ThinThickThinMediumGap': 'ThinThickThinMediumGap',\n 'ThinThickLargeGap': 'ThinThickLargeGap',\n 'ThickThinLargeGap': 'ThickThinLargeGap',\n 'ThinThickThinLargeGap': 'ThinThickThinLargeGap',\n 'SingleWavy': 'SingleWavy',\n 'DoubleWavy': 'DoubleWavy',\n 'DashDotStroked': 'DashDotStroked',\n 'Emboss3D': 'Emboss3D',\n 'Engrave3D': 'Engrave3D',\n 'Outset': 'Outset',\n 'Inset': 'Inset',\n 'Thick': 'Thick',\n 'Style': 'Style',\n 'Width': 'Width',\n 'Height': 'Height',\n 'Letter': 'Letter',\n 'Tabloid': 'Tabloid',\n 'Legal': 'Legal',\n 'Statement': 'Statement',\n 'Executive': 'Executive',\n 'A3': 'A3',\n 'A4': 'A4',\n 'A5': 'A5',\n 'B4': 'B4',\n 'B5': 'B5',\n 'Custom Size': 'Custom size',\n 'Different odd and even': 'Different odd and even',\n 'Different first page': 'Different first page',\n 'From edge': 'From edge',\n 'Header': 'Header',\n 'Footer': 'Footer',\n 'Margin': 'Margins',\n 'Paper': 'Paper',\n 'Layout': 'Layout',\n 'Orientation': 'Orientation',\n 'Landscape': 'Landscape',\n 'Portrait': 'Portrait',\n 'Table Of Contents': 'Table Of Contents',\n 'Show page numbers': 'Show page numbers',\n 'Right align page numbers': 'Right align page numbers',\n '(none)': '(none)',\n 'Nothing': 'Nothing',\n '....................': '....................',\n '-------------------': '-------------------',\n '____________': '____________',\n 'Tab leader:': 'Tab leader:',\n 'Show levels:': 'Show levels:',\n 'Use hyperlinks instead of page numbers': 'Use hyperlinks instead of page numbers',\n 'Build table of contents from:': 'Build table of contents from:',\n 'Styles': 'Styles',\n 'Available Styles:': 'Available styles',\n 'TOC level:': 'TOC level:',\n 'Heading 1': 'Heading 1',\n 'Heading 2': 'Heading 2',\n 'Heading 3': 'Heading 3',\n 'Heading 4': 'Heading 4',\n 'Heading 5': 'Heading 5',\n 'Heading 6': 'Heading 6',\n 'Heading 7': 'Heading 7',\n 'Heading 8': 'Heading 8',\n 'Heading 9': 'Heading 9',\n 'List Paragraph': 'List Paragraph',\n 'Normal': 'Normal',\n 'Outline levels': 'Outline levels',\n 'Table entry fields': 'Table entry fields',\n 'Styles:': 'Styles:',\n 'Modify': 'Modify',\n 'Color': 'Color',\n 'Setting': 'Setting',\n 'Box': 'Box',\n 'All': 'All',\n 'Custom': 'Custom',\n 'Preview': 'Preview',\n 'Shading': 'Shading',\n 'Fill': 'Fill',\n 'Apply To': 'Apply to',\n 'Table Properties': 'Table Properties',\n 'Cell Options': 'Cell Options',\n 'Table Options': 'Table Options',\n 'Insert Table': 'Insert Table',\n 'Column Size': 'Number of columns',\n 'Row Size': 'Number of rows',\n 'Text to display': 'Text to display',\n 'Address': 'Address',\n 'Insert Hyperlink': 'Insert Hyperlink',\n 'Edit Hyperlink': 'Edit Hyperlink',\n 'Insert': 'Insert',\n 'General': 'General',\n 'Indentation': 'Indentation',\n 'Before Text': 'Before text',\n 'Special': 'Special',\n 'First Line': 'First line',\n 'Hanging': 'Hanging',\n 'After Text': 'After text',\n 'By': 'By',\n 'Before': 'Before',\n 'Line Spacing': 'Line spacing',\n 'After': 'After',\n 'At': 'At',\n 'Multiple': 'Multiple',\n 'Spacing': 'Spacing',\n 'List': 'Define new Multilevel list',\n 'List Level': 'List level',\n 'Choose Level to Modify': 'Choose level to modify',\n 'Level 1': 'Level 1',\n 'Level 2': 'Level 2',\n 'Level 3': 'Level 3',\n 'Level 4': 'Level 4',\n 'Level 5': 'Level 5',\n 'Level 6': 'Level 6',\n 'Level 7': 'Level 7',\n 'Level 8': 'Level 8',\n 'Level 9': 'Level 9',\n 'Number Format': 'Number format',\n 'Number Style for this level': 'Number style for this level',\n 'Formatting for number': 'Enter formatting for number',\n 'Start at': 'Start at',\n 'Restart by': 'Restart list after',\n 'Indents': 'Position',\n 'Text indent at': 'Text indent at',\n 'Aligned at': 'Aligned at',\n 'Follow number with': 'Follow number with',\n 'Tab': 'Tab character',\n 'Space': 'Space',\n 'Arabic': 'Arabic',\n 'UpRoman': 'UpRoman',\n 'LowRoman': 'LowRoman',\n 'UpLetter': 'UpLetter',\n 'LowLetter': 'LowLetter',\n 'Number': 'Number',\n 'Leading zero': 'Leading zero',\n 'Bullet': 'Bullet',\n 'Ordinal': 'Ordinal',\n 'Ordinal Text': 'Ordinal Text',\n 'For East': 'For East',\n 'No Restart': 'No Restart',\n 'Font': 'Font',\n 'Font Style': 'Font style',\n 'Underline': 'Underline style',\n 'Font Color': 'Font color',\n 'Effects': 'Effects',\n 'Strikethrough': 'Strikethrough',\n 'Superscript': 'Superscript',\n 'Subscript': 'Subscript',\n 'Double Strikethrough': 'Double strikethrough',\n 'Regular': 'Regular',\n 'Bold': 'Bold',\n 'Italic': 'Italic',\n 'BoldItalic': 'BoldItalic',\n 'Cut': 'Cut',\n 'Copy': 'Copy',\n 'Paste': 'Paste',\n 'Hyperlink': 'Hyperlink',\n 'Open Hyperlink': 'Open Hyperlink',\n 'Copy Hyperlink': 'Copy Hyperlink',\n 'Edit Hyperlink...': 'Edit Hyperlink...',\n 'Remove Hyperlink': 'Remove Hyperlink',\n 'Paragraph': 'Paragraph',\n 'Merge Cells': 'Merge Cells',\n 'Insert Above': 'Insert Above',\n 'Insert Below': 'Insert Below',\n 'Insert Left': 'Insert Left',\n 'Insert Right': 'Insert Right',\n 'Delete': 'Delete',\n 'Delete Table': 'Delete Table',\n 'Delete Row': 'Delete Row',\n 'Delete Column': 'Delete Column',\n 'File Name': 'File Name',\n 'Format Type': 'Format Type',\n 'Save': 'Save',\n 'Navigation': 'Navigation',\n 'Results': 'Results',\n 'Replace': 'Replace',\n 'Replace All': 'Replace All',\n 'We replaced all ': 'We replaced all ',\n 'Find': 'Find',\n 'No matches': 'No matches',\n 'All Done!': 'All Done!',\n 'Result ': 'Result ',\n ' of ': ' of ',\n ' instances of \"': ' instances of \"',\n '\" with \"': '\" with \"',\n 'Click to follow link': 'Click to follow link',\n 'Continue Numbering': 'Continue Numbering',\n 'Bookmark name:': 'Bookmark name:',\n 'Close': 'Close',\n 'Restart At': 'Restart At 1',\n 'Properties': 'Properties',\n 'Name': 'Name',\n 'Style type': 'Style type',\n 'Style based on': 'Style based on',\n 'Style for following paragraph': 'Style for following paragraph',\n 'Formatting': 'Formatting',\n 'Numbering and Bullets': 'Numbering and Bullets',\n 'Numbering': 'Numbering',\n 'Update Field': 'Update Field',\n 'Edit Field': 'Edit Field',\n 'Bookmark': 'Bookmark',\n 'Page Setup': 'Page Setup',\n 'No bookmarks found': 'No bookmarks found',\n 'listInfo': 'Single-level number format:
    [PREFIX]%[LEVELNUMBER][SUFFIX]
    '\n + 'For example, \"Chapter %1.\" will display numbering like
    Chapter 1. Item
    Chapter 2. Item
    …'\n + '
    Chapter N. Item
    '\n + '
    Multilevel number format:
    [PREFIX]%[LEVELNUMBER][SUFFIX]+[PREFIX]%[LEVELNUMBER][SUFFIX]'\n + '
    For example, \"%1.%2.\" will display numbering like
    1.1. Item
    1.2. Item

    1.N. Item',\n 'Format': 'Format',\n 'Font..': 'Font..',\n 'Paragraph..': 'Paragraph..',\n 'Numbering..': 'Numbering..',\n 'Create New Style': 'Create New Style',\n 'Modify Style': 'Modify Style',\n 'New': 'New',\n 'Bullets': 'Bullets',\n 'Use bookmarks': 'Use bookmarks',\n 'Table of Contents': 'Table of Contents'\n };\n _this.viewer = new PageLayoutViewer(_this);\n _this.parser = new SfdtReader(_this.viewer);\n return _this;\n }\n DocumentEditor_1 = DocumentEditor;\n Object.defineProperty(DocumentEditor.prototype, \"enableHeaderAndFooter\", {\n /**\n * @private\n */\n get: function () {\n return this.enableHeaderFooterIn;\n },\n set: function (value) {\n this.enableHeaderFooterIn = value;\n this.viewer.updateScrollBars();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"pageCount\", {\n /**\n * Gets the total number of pages.\n */\n get: function () {\n if (!this.isDocumentLoaded || isNullOrUndefined(this.viewer)) {\n return 1;\n }\n return this.viewer.pages.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"selection\", {\n /**\n * Gets the selection object of the document editor.\n * @returns Selection\n * @default undefined\n */\n get: function () {\n return this.selectionModule;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"editor\", {\n /**\n * Gets the editor object of the document editor.\n * @returns Editor\n * @default undefined\n */\n get: function () {\n return this.editorModule;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"editorHistory\", {\n /**\n * Gets the editor history object of the document editor.\n * @returns EditorHistory\n */\n get: function () {\n return this.editorHistoryModule;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"contextMenu\", {\n /**\n * Gets the context menu object of the document editor.\n * @returns ContextMenu\n */\n get: function () {\n return this.contextMenuModule;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"containerId\", {\n /**\n * @private\n */\n get: function () {\n return this.element.id;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"isDocumentLoaded\", {\n /**\n * @private\n */\n get: function () {\n return this.isDocumentLoadedIn;\n },\n set: function (value) {\n this.isDocumentLoadedIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"enableHistoryMode\", {\n /**\n * Determines whether history needs to be enabled or not.\n * @default - false\n * @private\n */\n get: function () {\n return this.enableEditorHistory && !isNullOrUndefined(this.editorHistoryModule);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"documentStart\", {\n /**\n * Gets the start text position in the document.\n * @default undefined\n * @private\n */\n get: function () {\n if (!isNullOrUndefined(this.selectionModule)) {\n return this.selection.getDocumentStart();\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"documentEnd\", {\n /**\n * Gets the end text position in the document.\n * @default undefined\n * @private\n */\n get: function () {\n if (!isNullOrUndefined(this.selectionModule)) {\n return this.selection.getDocumentEnd();\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"isReadOnlyMode\", {\n /**\n * @private\n */\n get: function () {\n return this.isReadOnly || isNullOrUndefined(this.editorModule) || isNullOrUndefined(this.selectionModule);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"enableImageResizerMode\", {\n /**\n * Specifies to enable image resizer option\n * default - false\n * @private\n */\n get: function () {\n return this.enableImageResizer && !isNullOrUndefined(this.imageResizerModule);\n },\n enumerable: true,\n configurable: true\n });\n DocumentEditor.prototype.preRender = function () {\n this.findResultsList = [];\n //pre render section\n };\n DocumentEditor.prototype.render = function () {\n this.viewer.initializeComponents();\n this.openBlank();\n if (!isNullOrUndefined(this.element)) {\n var container = this.element;\n container.style.minHeight = '200px';\n container.style.minWidth = '200px';\n }\n };\n /**\n * Get component name\n * @private\n */\n DocumentEditor.prototype.getModuleName = function () {\n return 'DocumentEditor';\n };\n /**\n * Called internally if any of the property value changed.\n * @private\n */\n DocumentEditor.prototype.onPropertyChanged = function (model, oldProp) {\n for (var _i = 0, _a = Object.keys(model); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'zoomFactor':\n if (this.viewer) {\n this.viewer.zoomFactor = model.zoomFactor;\n }\n break;\n case 'locale':\n this.localizeDialogs();\n break;\n case 'isReadOnly':\n if (!isNullOrUndefined(this.optionsPaneModule) && this.optionsPaneModule.isOptionsPaneShow) {\n this.optionsPaneModule.showHideOptionsPane(false);\n }\n break;\n }\n }\n };\n DocumentEditor.prototype.localizeDialogs = function () {\n if (this.locale !== '') {\n var l10n = new L10n('documenteditor', this.defaultLocale);\n l10n.setLocale(this.locale);\n setCulture(this.locale);\n if (this.optionsPaneModule) {\n this.optionsPaneModule.initOptionsPane(l10n);\n }\n if (this.paragraphDialogModule) {\n this.paragraphDialogModule.initParagraphDialog(l10n);\n }\n if (this.pageSetupDialogModule) {\n this.pageSetupDialogModule.initPageSetupDialog(l10n);\n }\n if (this.fontDialogModule) {\n this.fontDialogModule.initFontDialog(l10n);\n }\n if (this.hyperlinkDialogModule) {\n this.hyperlinkDialogModule.initHyperlinkDialog(l10n);\n }\n if (this.contextMenuModule) {\n this.contextMenuModule.initContextMenu(l10n);\n }\n if (this.listDialogModule) {\n this.listDialogModule.initListDialog(l10n);\n }\n if (this.tablePropertiesDialogModule) {\n this.tablePropertiesDialogModule.initTablePropertyDialog(l10n);\n }\n if (this.bordersAndShadingDialogModule) {\n this.bordersAndShadingDialogModule.initBordersAndShadingsDialog(l10n);\n }\n if (this.cellOptionsDialogModule) {\n this.cellOptionsDialogModule.initCellMarginsDialog(l10n);\n }\n if (this.tableOptionsDialogModule) {\n this.tableOptionsDialogModule.initTableOptionsDialog(l10n);\n }\n if (this.tableDialogModule) {\n this.tableDialogModule.initTableDialog(l10n);\n }\n if (this.styleDialogModule) {\n this.styleDialogModule.initStyleDialog(l10n);\n }\n if (this.tableOfContentsDialogModule) {\n this.tableOfContentsDialogModule.initTableOfContentDialog(l10n);\n }\n }\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @private\n */\n DocumentEditor.prototype.getPersistData = function () {\n return 'documenteditor';\n };\n DocumentEditor.prototype.clearPreservedCollectionsInViewer = function () {\n if (this.viewer instanceof LayoutViewer) {\n this.viewer.clearDocumentItems();\n }\n };\n /**\n * @private\n */\n DocumentEditor.prototype.getDocumentEditorElement = function () {\n return this.element;\n };\n /**\n * @private\n */\n DocumentEditor.prototype.fireContentChange = function () {\n this.trigger('contentChange');\n };\n /**\n * @private\n */\n DocumentEditor.prototype.fireDocumentChange = function () {\n this.trigger('documentChange');\n };\n /**\n * @private\n */\n DocumentEditor.prototype.fireSelectionChange = function () {\n if (!this.viewer.isCompositionStart && Browser.isDevice && this.editorModule) {\n this.editorModule.predictText();\n }\n this.trigger('selectionChange');\n };\n /**\n * @private\n */\n DocumentEditor.prototype.fireZoomFactorChange = function () {\n this.trigger('zoomFactorChange');\n };\n /**\n * @private\n */\n DocumentEditor.prototype.fireViewChange = function () {\n if (this.viewer && this.viewer.pages.length > 0) {\n if (this.viewer.visiblePages.length > 0) {\n var pages = this.viewer.visiblePages;\n var eventArgs = {\n startPage: pages[0].index + 1,\n endPage: pages[pages.length - 1].index + 1\n };\n this.trigger('viewChange', eventArgs);\n }\n }\n };\n /**\n * Shows the Paragraph dialog\n * @private\n */\n DocumentEditor.prototype.showParagraphDialog = function (paragraphFormat) {\n if (this.paragraphDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.paragraphDialogModule.show(paragraphFormat);\n }\n };\n /**\n * Shows the margin dialog\n * @private\n */\n DocumentEditor.prototype.showPageSetupDialog = function () {\n if (this.pageSetupDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.pageSetupDialogModule.show();\n }\n };\n /**\n * Shows the font dialog\n * @private\n */\n DocumentEditor.prototype.showFontDialog = function (characterFormat) {\n if (this.fontDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.fontDialogModule.showFontDialog(characterFormat);\n }\n };\n /**\n * Shows the cell option dialog\n * @private\n */\n DocumentEditor.prototype.showCellOptionsDialog = function () {\n if (this.cellOptionsDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.cellOptionsDialogModule.show();\n }\n };\n /**\n * Shows the table options dialog.\n * @private\n */\n DocumentEditor.prototype.showTableOptionsDialog = function () {\n if (this.tableOptionsDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.tableOptionsDialogModule.show();\n }\n };\n /**\n * Shows insert table dialog\n * @private\n */\n DocumentEditor.prototype.showTableDialog = function () {\n if (this.tableDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.tableDialogModule.show();\n }\n };\n /**\n * Shows the table of content dialog\n * @private\n */\n DocumentEditor.prototype.showTableOfContentsDialog = function () {\n if (this.tableOfContentsDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.tableOfContentsDialogModule.show();\n }\n };\n /* tslint:enable:no-any */\n /**\n * Shows the style dialog\n * @private\n */\n DocumentEditor.prototype.showStyleDialog = function () {\n if (this.styleDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.styleDialogModule.show();\n }\n };\n /**\n * Shows the hyperlink dialog\n * @private\n */\n DocumentEditor.prototype.showHyperlinkDialog = function () {\n if (this.hyperlinkDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.hyperlinkDialogModule.show();\n }\n };\n /**\n * Shows the bookmark dialog.\n * @private\n */\n DocumentEditor.prototype.showBookmarkDialog = function () {\n if (this.bookmarkDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.bookmarkDialogModule.show();\n }\n };\n /**\n * Shows the styles dialog.\n * @private\n */\n DocumentEditor.prototype.showStylesDialog = function () {\n if (this.stylesDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.stylesDialogModule.show();\n }\n };\n /**\n * Shows the List dialog\n * @private\n */\n DocumentEditor.prototype.showListDialog = function () {\n if (this.listDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.listDialogModule.showListDialog();\n }\n };\n /**\n * Shows the table properties dialog\n * @private\n */\n DocumentEditor.prototype.showTablePropertiesDialog = function () {\n if (this.tablePropertiesDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.tablePropertiesDialogModule.show();\n }\n };\n /**\n * Shows the borders and shading dialog\n * @private\n */\n DocumentEditor.prototype.showBordersAndShadingDialog = function () {\n if (this.bordersAndShadingDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.bordersAndShadingDialogModule.show();\n }\n };\n //tslint:disable: max-func-body-length\n DocumentEditor.prototype.requiredModules = function () {\n var modules = [];\n if (this.enablePrint) {\n modules.push({\n member: 'Print', args: []\n });\n }\n if (this.enableSfdtExport || this.enableWordExport || this.enableTextExport || this.enableSelection || this.enableEditor) {\n modules.push({\n member: 'SfdtExport', args: [this.viewer]\n });\n }\n if (this.enableWordExport) {\n modules.push({\n member: 'WordExport', args: []\n });\n }\n if (this.enableTextExport) {\n modules.push({\n member: 'TextExport', args: []\n });\n }\n if (this.enableSelection || this.enableSearch || this.enableEditor) {\n modules.push({\n member: 'Selection', args: [this]\n });\n if (this.enableContextMenu) {\n modules.push({\n member: 'ContextMenu', args: [this.viewer]\n });\n }\n }\n if (this.enableSearch) {\n modules.push({\n member: 'Search', args: [this]\n });\n if (this.enableOptionsPane) {\n modules.push({\n member: 'OptionsPane', args: [this.viewer]\n });\n }\n }\n if (this.enableEditor) {\n modules.push({\n member: 'Editor', args: [this.viewer]\n });\n if (this.enableImageResizer) {\n modules.push({\n member: 'ImageResizer', args: [this, this.viewer]\n });\n }\n if (this.enableEditorHistory) {\n modules.push({\n member: 'EditorHistory', args: [this]\n });\n }\n if (this.enableHyperlinkDialog) {\n modules.push({\n member: 'HyperlinkDialog', args: [this.viewer]\n });\n }\n if (this.enableTableDialog) {\n modules.push({\n member: 'TableDialog', args: [this.viewer]\n });\n }\n if (this.enableBookmarkDialog) {\n modules.push({\n member: 'BookmarkDialog', args: [this.viewer]\n });\n }\n if (this.enableTableOfContentsDialog) {\n modules.push({\n member: 'TableOfContentsDialog', args: [this.viewer]\n });\n }\n if (this.enablePageSetupDialog) {\n modules.push({\n member: 'PageSetupDialog', args: [this.viewer]\n });\n }\n if (this.enableStyleDialog) {\n modules.push({\n member: 'StylesDialog', args: [this.viewer]\n });\n modules.push({\n member: 'StyleDialog', args: [this.viewer]\n });\n modules.push({\n member: 'BulletsAndNumberingDialog', args: [this.viewer]\n });\n }\n if (this.enableListDialog) {\n modules.push({\n member: 'ListDialog', args: [this.viewer]\n });\n }\n if (this.enableParagraphDialog) {\n modules.push({\n member: 'ParagraphDialog', args: [this.viewer]\n });\n }\n if (this.enableFontDialog) {\n modules.push({\n member: 'FontDialog', args: [this.viewer]\n });\n }\n if (this.enableTablePropertiesDialog) {\n modules.push({\n member: 'TablePropertiesDialog', args: [this.viewer]\n });\n modules.push({\n member: 'CellOptionsDialog', args: [this.viewer]\n });\n }\n if (this.enableBordersAndShadingDialog) {\n modules.push({\n member: 'BordersAndShadingDialog', args: [this.viewer]\n });\n }\n if (this.enableTableOptionsDialog) {\n modules.push({\n member: 'TableOptionsDialog', args: [this.viewer]\n });\n }\n }\n return modules;\n };\n // Public Implementation Starts\n /**\n * Opens the given Sfdt text.\n * @param {string} sfdtText.\n */\n DocumentEditor.prototype.open = function (sfdtText) {\n if (!isNullOrUndefined(this.viewer)) {\n this.clearPreservedCollectionsInViewer();\n this.viewer.lists = [];\n this.viewer.abstractLists = [];\n this.viewer.styles = new WStyles();\n if (!isNullOrUndefined(sfdtText) && this.viewer) {\n this.viewer.onDocumentChanged(this.parser.convertJsonToDocument(sfdtText));\n if (this.editorModule) {\n this.editorModule.intializeDefaultStyles();\n }\n }\n }\n };\n /**\n * Scrolls view to start of the given page number if exists.\n * @param {number} pageNumber.\n * @returns void\n */\n DocumentEditor.prototype.scrollToPage = function (pageNumber) {\n if (isNullOrUndefined(this.viewer) || pageNumber < 1 || pageNumber > this.viewer.pages.length) {\n return false;\n }\n this.viewer.scrollToPage(pageNumber - 1);\n return true;\n };\n /**\n * Enables all the modules.\n * @returns void\n */\n DocumentEditor.prototype.enableAllModules = function () {\n this.enablePrint = this.enableSfdtExport = this.enableWordExport = this.enableTextExport\n = this.enableSelection = this.enableContextMenu = this.enableSearch = this.enableOptionsPane\n = this.enableEditor = this.enableImageResizer = this.enableEditorHistory\n = this.enableHyperlinkDialog = this.enableTableDialog = this.enableBookmarkDialog\n = this.enableTableOfContentsDialog = this.enablePageSetupDialog = this.enableStyleDialog\n = this.enableListDialog = this.enableParagraphDialog = this.enableFontDialog\n = this.enableTablePropertiesDialog = this.enableBordersAndShadingDialog\n = this.enableTableOptionsDialog = true;\n // tslint:disable-next-line:max-line-length\n DocumentEditor_1.Inject(Print, SfdtExport, WordExport, TextExport, Selection, Search, Editor, ImageResizer, EditorHistory, ContextMenu, OptionsPane, HyperlinkDialog, TableDialog, BookmarkDialog, TableOfContentsDialog, PageSetupDialog, StyleDialog, ListDialog, ParagraphDialog, BulletsAndNumberingDialog, FontDialog, TablePropertiesDialog, BordersAndShadingDialog, TableOptionsDialog, CellOptionsDialog, StylesDialog);\n };\n /**\n * Resizes the component and its sub elements based on given size or container size.\n * @param width\n * @param height\n */\n DocumentEditor.prototype.resize = function (width, height) {\n if (this.element) {\n if (!isNullOrUndefined(width) && width > 200) {\n this.element.style.width = width + 'px';\n }\n if (!isNullOrUndefined(height) && height > 200) {\n this.element.style.height = height + 'px';\n }\n if (this.viewer) {\n this.viewer.updateViewerSize();\n }\n }\n };\n /**\n * Shifts the focus to the document.\n */\n DocumentEditor.prototype.focusIn = function () {\n if (this.viewer) {\n this.viewer.updateFocus();\n }\n };\n /**\n * Fits the page based on given fit type.\n * @param {PageFitType} pageFitType? - Default value of ‘pageFitType’ parameter is 'None'\n * @returns void\n */\n DocumentEditor.prototype.fitPage = function (pageFitType) {\n if (isNullOrUndefined(pageFitType)) {\n pageFitType = 'None';\n }\n if (this.viewer) {\n this.viewer.pageFitType = pageFitType;\n }\n };\n /**\n * Prints the document.\n * @param {Window} printWindow? - Default value of 'printWindow' parameter is undefined.\n */\n DocumentEditor.prototype.print = function (printWindow) {\n if (isNullOrUndefined(this.viewer)) {\n throw new Error('Invalid operation.');\n }\n if (this.printModule) {\n this.printModule.print(this.viewer, printWindow);\n }\n else {\n throw new Error('Invalid operation. Print is not enabled.');\n }\n };\n /**\n * Serialize the data to JSON string.\n */\n DocumentEditor.prototype.serialize = function () {\n var json = '';\n if (this.enableSfdtExport && this.sfdtExportModule instanceof SfdtExport) {\n json = this.sfdtExportModule.serialize();\n }\n else {\n throw new Error('Invalid operation. Sfdt export is not enabled.');\n }\n return json;\n };\n /**\n * Saves the document.\n * @param {string} fileName\n * @param {FormatType} formatType\n */\n DocumentEditor.prototype.save = function (fileName, formatType) {\n fileName = fileName || 'Untitled';\n if (isNullOrUndefined(this.viewer)) {\n throw new Error('Invalid operation.');\n }\n if (formatType === 'Docx' && this.wordExportModule) {\n if (this.wordExportModule) {\n this.wordExportModule.save(this.viewer, fileName);\n }\n }\n else if (formatType === 'Txt' && this.textExportModule) {\n this.textExportModule.save(this.viewer, fileName);\n }\n else if (formatType === 'Sfdt' && this.enableSfdtExport && this.sfdtExportModule) {\n var jsonString = this.serialize();\n var blob = new Blob([jsonString], {\n type: 'application/json'\n });\n Save.save(fileName + '.sfdt', blob);\n }\n else {\n throw new Error('Invalid operation. Specified export is not enabled.');\n }\n };\n /**\n * Saves the document as blob.\n * @param {FormatType} formatType\n */\n DocumentEditor.prototype.saveAsBlob = function (formatType) {\n var _this = this;\n if (isNullOrUndefined(this.viewer)) {\n throw new Error('Invalid operation');\n }\n return new Promise(function (resolve, reject) {\n if (formatType === 'Docx' && _this.wordExportModule) {\n resolve(_this.wordExportModule.saveAsBlob(_this.viewer));\n }\n else if (formatType === 'Txt' && _this.textExportModule) {\n resolve(_this.textExportModule.saveAsBlob(_this.viewer));\n }\n else if (formatType === 'Sfdt' && _this.enableSfdtExport && _this.sfdtExportModule) {\n resolve(_this.sfdtExportModule.saveAsBlob(_this.viewer));\n }\n });\n };\n /**\n * Opens a blank document.\n */\n DocumentEditor.prototype.openBlank = function () {\n var section = new BodyWidget();\n section.index = 0;\n section.sectionFormat = new WSectionFormat(section);\n var paragraph = new ParagraphWidget();\n paragraph.index = 0;\n paragraph.paragraphFormat = new WParagraphFormat(paragraph);\n paragraph.characterFormat = new WCharacterFormat(paragraph);\n section.childWidgets.push(paragraph);\n paragraph.containerWidget = section;\n var sections = [];\n sections.push(section);\n // tslint:disable-next-line:max-line-length\n var hfs = this.parser.parseHeaderFooter({ header: {}, footer: {}, evenHeader: {}, evenFooter: {}, firstPageHeader: {}, firstPageFooter: {} }, undefined);\n if (this.viewer) {\n this.clearPreservedCollectionsInViewer();\n this.viewer.headersFooters.push(hfs);\n this.viewer.onDocumentChanged(sections);\n if (this.editorModule) {\n this.editorModule.intializeDefaultStyles();\n var style = this.viewer.styles.findByName('Normal');\n paragraph.paragraphFormat.baseStyle = style;\n paragraph.paragraphFormat.listFormat.baseStyle = style;\n }\n }\n };\n /**\n * Gets the style names based on given style type.\n * @param styleType\n */\n DocumentEditor.prototype.getStyleNames = function (styleType) {\n if (this.viewer) {\n return this.viewer.styles.getStyleNames(styleType);\n }\n return [];\n };\n /**\n * Gets the style objects on given style type.\n * @param styleType\n */\n DocumentEditor.prototype.getStyles = function (styleType) {\n if (this.viewer) {\n return this.viewer.styles.getStyles(styleType);\n }\n return [];\n };\n /**\n * Shows the dialog.\n * @param {DialogType} dialogType\n * @returns void\n */\n DocumentEditor.prototype.showDialog = function (dialogType) {\n switch (dialogType) {\n case 'Hyperlink':\n this.showHyperlinkDialog();\n break;\n case 'Table':\n this.showTableDialog();\n break;\n case 'Bookmark':\n this.showBookmarkDialog();\n break;\n case 'TableOfContents':\n this.showTableOfContentsDialog();\n break;\n case 'PageSetup':\n this.showPageSetupDialog();\n break;\n case 'List':\n this.showListDialog();\n break;\n case 'Styles':\n this.showStylesDialog();\n break;\n case 'Style':\n this.showStyleDialog();\n break;\n case 'Paragraph':\n this.showParagraphDialog();\n break;\n case 'Font':\n this.showFontDialog();\n break;\n case 'TableProperties':\n this.showTablePropertiesDialog();\n break;\n case 'BordersAndShading':\n this.showBordersAndShadingDialog();\n break;\n case 'TableOptions':\n this.showTableOptionsDialog();\n break;\n }\n };\n /**\n * Shows the options pane.\n */\n DocumentEditor.prototype.showOptionsPane = function () {\n if (!isNullOrUndefined(this.optionsPaneModule) && !isNullOrUndefined(this.viewer)) {\n this.optionsPaneModule.showHideOptionsPane(true);\n }\n };\n /**\n * Destroys all managed resources used by this object.\n */\n DocumentEditor.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n this.destroyDependentModules();\n if (!isNullOrUndefined(this.viewer)) {\n this.viewer.destroy();\n }\n this.viewer = undefined;\n if (!isNullOrUndefined(this.element)) {\n this.element.classList.remove('e-documenteditor');\n this.element.innerHTML = '';\n }\n this.element = undefined;\n this.findResultsList = [];\n this.findResultsList = undefined;\n };\n DocumentEditor.prototype.destroyDependentModules = function () {\n if (this.printModule) {\n this.printModule.destroy();\n this.printModule = undefined;\n }\n if (this.sfdtExportModule) {\n this.sfdtExportModule.destroy();\n this.sfdtExportModule = undefined;\n }\n if (this.optionsPaneModule) {\n this.optionsPaneModule.destroy();\n this.optionsPaneModule = undefined;\n }\n if (!isNullOrUndefined(this.hyperlinkDialogModule)) {\n this.hyperlinkDialogModule.destroy();\n this.hyperlinkDialogModule = undefined;\n }\n if (this.searchModule) {\n this.searchModule.destroy();\n this.searchModule = undefined;\n }\n if (this.contextMenuModule) {\n this.contextMenuModule.destroy();\n this.contextMenuModule = undefined;\n }\n if (this.editorModule) {\n this.editorModule.destroy();\n this.editorModule = undefined;\n }\n if (this.selectionModule) {\n this.selectionModule.destroy();\n this.selectionModule = undefined;\n }\n if (this.editorHistoryModule) {\n this.editorHistoryModule.destroy();\n this.editorHistoryModule = undefined;\n }\n if (!isNullOrUndefined(this.paragraphDialogModule)) {\n this.paragraphDialogModule.destroy();\n this.paragraphDialogModule = undefined;\n }\n if (this.pageSetupDialogModule) {\n this.pageSetupDialogModule.destroy();\n this.pageSetupDialogModule = undefined;\n }\n if (this.fontDialogModule) {\n this.fontDialogModule.destroy();\n this.fontDialogModule = undefined;\n }\n if (this.listDialogModule) {\n this.listDialogModule.destroy();\n this.listDialogModule = undefined;\n }\n if (this.imageResizerModule) {\n this.imageResizerModule.destroy();\n this.imageResizerModule = undefined;\n }\n if (this.tablePropertiesDialogModule) {\n this.tablePropertiesDialogModule.destroy();\n this.tablePropertiesDialogModule = undefined;\n }\n if (this.bordersAndShadingDialogModule) {\n this.bordersAndShadingDialogModule.destroy();\n this.bordersAndShadingDialogModule = undefined;\n }\n if (this.cellOptionsDialogModule) {\n this.cellOptionsDialogModule.destroy();\n this.cellOptionsDialogModule = undefined;\n }\n if (this.tableOptionsDialogModule) {\n this.tableOptionsDialogModule.destroy();\n this.tableOptionsDialogModule = undefined;\n }\n if (this.tableDialogModule) {\n this.tableDialogModule.destroy();\n this.tableDialogModule = undefined;\n }\n if (this.styleDialogModule) {\n this.styleDialogModule = undefined;\n }\n if (this.bookmarkDialogModule) {\n this.bookmarkDialogModule.destroy();\n this.bookmarkDialogModule = undefined;\n }\n if (this.styleDialogModule) {\n this.styleDialogModule.destroy();\n this.styleDialogModule = undefined;\n }\n if (this.textExportModule) {\n this.textExportModule.destroy();\n this.textExportModule = undefined;\n }\n if (this.wordExportModule) {\n this.wordExportModule.destroy();\n this.wordExportModule = undefined;\n }\n if (this.tableOfContentsDialogModule) {\n this.tableOfContentsDialogModule.destroy();\n this.tableOfContentsDialogModule = undefined;\n }\n };\n __decorate([\n Property(1)\n ], DocumentEditor.prototype, \"zoomFactor\", void 0);\n __decorate([\n Property(true)\n ], DocumentEditor.prototype, \"isReadOnly\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enablePrint\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableSelection\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableEditor\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableEditorHistory\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableSfdtExport\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableWordExport\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableTextExport\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableOptionsPane\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableContextMenu\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableHyperlinkDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableBookmarkDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableTableOfContentsDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableSearch\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableParagraphDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableListDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableTablePropertiesDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableBordersAndShadingDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enablePageSetupDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableStyleDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableFontDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableTableOptionsDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableTableDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableImageResizer\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"documentChange\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"viewChange\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"zoomFactorChange\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"selectionChange\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"requestNavigate\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"contentChange\", void 0);\n DocumentEditor = DocumentEditor_1 = __decorate([\n NotifyPropertyChanges\n ], DocumentEditor);\n return DocumentEditor;\n var DocumentEditor_1;\n}(Component));\nexport { DocumentEditor };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * Print class\n */\nvar Print = /** @class */ (function () {\n function Print() {\n }\n /**\n * Gets module name.\n */\n Print.prototype.getModuleName = function () {\n return 'Print';\n };\n /**\n * Prints the current viewer\n * @param viewer\n * @param printWindow\n * @private\n */\n Print.prototype.print = function (viewer, printWindow) {\n this.printWindow(viewer, navigator.userAgent, printWindow);\n };\n /**\n * Opens print window and displays current page to print.\n * @private\n */\n Print.prototype.printWindow = function (viewer, browserUserAgent, printWindow) {\n var height = this.getPageHeight(viewer.pages);\n var width = this.getPageWidth(viewer.pages);\n var printElement = document.createElement('div');\n printElement.style.width = '100%';\n printElement.style.height = '100%';\n printElement.style.overflow = 'scroll';\n // Rendering canvas to print\n this.generatePrintContent(viewer, printElement);\n if (isNullOrUndefined(printWindow)) {\n printWindow = window.open('', 'print', 'height=452,width=1024,tabbar=no');\n }\n if ((browserUserAgent.indexOf('Chrome') !== -1) || (browserUserAgent.indexOf('Firefox')) !== -1) {\n // Chrome and Firefox\n printWindow.document.write('');\n // tslint:disable-next-line:max-line-length\n printWindow.document.write('
    ');\n }\n else {\n // Internet Explorer and Edge\n // tslint:disable-next-line:max-line-length\n printWindow.document.write('
    ');\n }\n // tslint:disable-next-line:max-line-length\n printWindow.document.write(printElement.innerHTML + '
    ');\n printElement = undefined;\n printWindow.document.close();\n printWindow.focus();\n var interval = setInterval(function () {\n if (printWindow.ready) {\n printWindow.print();\n printWindow.close();\n clearInterval(interval);\n }\n }, 500);\n };\n /**\n * Generates print content.\n * @private\n */\n Print.prototype.generatePrintContent = function (viewer, element) {\n // Rendering canvas to print\n var htmlString = '';\n for (var i = 0; i < viewer.pages.length; i++) {\n var page = viewer.pages[i];\n var pageHeight = page.boundingRectangle.height;\n var pageWidth = page.boundingRectangle.width;\n viewer.render.isPrinting = true;\n viewer.render.renderWidgets(page, 0, 0, 0, 0);\n var canvasURL = viewer.render.pageCanvas.toDataURL();\n viewer.render.isPrinting = false;\n // tslint:disable-next-line:max-line-length\n htmlString += '

    ';\n }\n element.innerHTML = htmlString;\n };\n /**\n * Gets page width.\n * @param pages\n * @private\n */\n Print.prototype.getPageWidth = function (pages) {\n var width = 0;\n for (var i = 0; i < pages.length; i++) {\n if (width < pages[i].boundingRectangle.width) {\n width = pages[i].boundingRectangle.width;\n }\n }\n return width;\n };\n /**\n * Gets page height.\n * @private\n */\n Print.prototype.getPageHeight = function (pages) {\n var height = 0;\n for (var i = 0; i < pages.length; i++) {\n if (height < pages[i].boundingRectangle.height) {\n height = pages[i].boundingRectangle.height;\n }\n }\n return height;\n };\n /**\n * @private\n */\n Print.prototype.destroy = function () {\n return;\n };\n return Print;\n}());\nexport { Print };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Dictionary } from '../../base/dictionary';\nimport { WUniqueFormat } from '../../base/unique-format';\nimport { WUniqueFormats } from '../../base/unique-formats';\n/**\n * @private\n */\nvar WSectionFormat = /** @class */ (function () {\n function WSectionFormat(node) {\n this.uniqueSectionFormat = undefined;\n this.ownerBase = node;\n }\n Object.defineProperty(WSectionFormat.prototype, \"headerDistance\", {\n get: function () {\n return this.getPropertyValue('headerDistance');\n },\n set: function (value) {\n this.setPropertyValue('headerDistance', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"footerDistance\", {\n get: function () {\n return this.getPropertyValue('footerDistance');\n },\n set: function (value) {\n this.setPropertyValue('footerDistance', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"differentFirstPage\", {\n get: function () {\n return this.getPropertyValue('differentFirstPage');\n },\n set: function (value) {\n this.setPropertyValue('differentFirstPage', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"differentOddAndEvenPages\", {\n get: function () {\n return this.getPropertyValue('differentOddAndEvenPages');\n },\n set: function (value) {\n this.setPropertyValue('differentOddAndEvenPages', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"pageHeight\", {\n get: function () {\n return this.getPropertyValue('pageHeight');\n },\n set: function (value) {\n this.setPropertyValue('pageHeight', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"rightMargin\", {\n get: function () {\n return this.getPropertyValue('rightMargin');\n },\n set: function (value) {\n this.setPropertyValue('rightMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"pageWidth\", {\n get: function () {\n return this.getPropertyValue('pageWidth');\n },\n set: function (value) {\n this.setPropertyValue('pageWidth', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"leftMargin\", {\n get: function () {\n return this.getPropertyValue('leftMargin');\n },\n set: function (value) {\n this.setPropertyValue('leftMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"bottomMargin\", {\n get: function () {\n return this.getPropertyValue('bottomMargin');\n },\n set: function (value) {\n this.setPropertyValue('bottomMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"topMargin\", {\n get: function () {\n return this.getPropertyValue('topMargin');\n },\n set: function (value) {\n this.setPropertyValue('topMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n WSectionFormat.prototype.destroy = function () {\n if (!isNullOrUndefined(this.uniqueSectionFormat)) {\n WSectionFormat.uniqueSectionFormats.remove(this.uniqueSectionFormat);\n }\n this.uniqueSectionFormat = undefined;\n };\n WSectionFormat.prototype.hasValue = function (property) {\n if (!isNullOrUndefined(this.uniqueSectionFormat)) {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueSectionFormat.uniqueFormatType, property);\n return this.uniqueSectionFormat.propertiesHash.containsKey(propertyType);\n }\n return false;\n };\n WSectionFormat.getPropertyDefaultValue = function (property) {\n var value = undefined;\n switch (property) {\n case 'headerDistance':\n value = 36;\n break;\n case 'footerDistance':\n value = 36;\n break;\n case 'differentFirstPage':\n value = false;\n break;\n case 'differentOddAndEvenPages':\n value = false;\n break;\n case 'pageWidth':\n value = 612;\n break;\n case 'pageHeight':\n value = 792;\n break;\n case 'leftMargin':\n value = 72;\n break;\n case 'topMargin':\n value = 72;\n break;\n case 'rightMargin':\n value = 72;\n break;\n case 'bottomMargin':\n value = 72;\n break;\n }\n return value;\n };\n WSectionFormat.prototype.getPropertyValue = function (property) {\n var hasValue = this.hasValue(property);\n if (hasValue) {\n var propertyType = WUniqueFormat.getPropertyType(WSectionFormat.uniqueFormatType, property);\n if (!isNullOrUndefined(this.uniqueSectionFormat) && this.uniqueSectionFormat.propertiesHash.containsKey(propertyType)) {\n return this.uniqueSectionFormat.propertiesHash.get(propertyType);\n }\n }\n return WSectionFormat.getPropertyDefaultValue(property);\n };\n WSectionFormat.prototype.setPropertyValue = function (property, value) {\n if (isNullOrUndefined(value) || value === '') {\n value = WSectionFormat.getPropertyDefaultValue(property);\n }\n if (isNullOrUndefined(this.uniqueSectionFormat)) {\n this.initializeUniqueSectionFormat(property, value);\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueSectionFormat.uniqueFormatType, property);\n if (this.uniqueSectionFormat.propertiesHash.containsKey(propertyType) &&\n this.uniqueSectionFormat.propertiesHash.get(propertyType) === value) {\n //Do nothing, since no change in property value and return\n return;\n }\n // tslint:disable-next-line:max-line-length\n this.uniqueSectionFormat = WSectionFormat.uniqueSectionFormats.updateUniqueFormat(this.uniqueSectionFormat, property, value);\n }\n };\n WSectionFormat.prototype.initializeUniqueSectionFormat = function (property, propValue) {\n var uniqueSectionFormatTemp = new Dictionary();\n this.addUniqueSectionFormat('headerDistance', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('footerDistance', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('differentFirstPage', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('differentOddAndEvenPages', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('pageWidth', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('pageHeight', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('leftMargin', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('topMargin', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('rightMargin', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('bottomMargin', property, propValue, uniqueSectionFormatTemp);\n // tslint:disable-next-line:max-line-length\n this.uniqueSectionFormat = WSectionFormat.uniqueSectionFormats.addUniqueFormat(uniqueSectionFormatTemp, WSectionFormat.uniqueFormatType);\n };\n // tslint:disable-next-line:max-line-length\n WSectionFormat.prototype.addUniqueSectionFormat = function (property, modifiedProperty, propValue, uniqueSectionFormatTemp) {\n var propertyType;\n propertyType = WUniqueFormat.getPropertyType(WSectionFormat.uniqueFormatType, property);\n if (property === modifiedProperty) {\n uniqueSectionFormatTemp.add(propertyType, propValue);\n }\n else {\n uniqueSectionFormatTemp.add(propertyType, WSectionFormat.getPropertyDefaultValue(property));\n }\n };\n WSectionFormat.prototype.copyFormat = function (format, history) {\n if (history && (history.isUndoing || history.isRedoing)) {\n this.uniqueSectionFormat = format.uniqueSectionFormat;\n }\n else {\n if (!isNullOrUndefined(format)) {\n if (!isNullOrUndefined(format.uniqueSectionFormat) && format.uniqueSectionFormat.propertiesHash) {\n this.updateUniqueSectionFormat(format);\n }\n }\n }\n };\n WSectionFormat.prototype.updateUniqueSectionFormat = function (format) {\n var hash = undefined;\n if (this.uniqueSectionFormat) {\n hash = this.uniqueSectionFormat.mergeProperties(format.uniqueSectionFormat);\n if (this.uniqueSectionFormat.referenceCount === 0) {\n WSectionFormat.uniqueSectionFormats.remove(this.uniqueSectionFormat);\n this.uniqueSectionFormat = undefined;\n }\n }\n this.uniqueSectionFormat = new WUniqueFormat(WSectionFormat.uniqueFormatType);\n if (isNullOrUndefined(hash)) {\n hash = this.uniqueSectionFormat.mergeProperties(format.uniqueSectionFormat);\n }\n this.uniqueSectionFormat = WSectionFormat.uniqueSectionFormats.addUniqueFormat(hash, WSectionFormat.uniqueFormatType);\n };\n WSectionFormat.prototype.cloneFormat = function () {\n var format = new WSectionFormat();\n format.uniqueSectionFormat = this.uniqueSectionFormat;\n return format;\n };\n WSectionFormat.clear = function () {\n this.uniqueSectionFormats.clear();\n };\n WSectionFormat.uniqueSectionFormats = new WUniqueFormats();\n WSectionFormat.uniqueFormatType = 10;\n return WSectionFormat;\n}());\nexport { WSectionFormat };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar WLevelOverride = /** @class */ (function () {\n function WLevelOverride() {\n }\n WLevelOverride.prototype.destroy = function () {\n if (!isNullOrUndefined(this.overrideListLevel)) {\n this.overrideListLevel.destroy();\n }\n this.levelNumber = undefined;\n this.startAt = undefined;\n this.overrideListLevel = undefined;\n };\n return WLevelOverride;\n}());\nexport { WLevelOverride };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { WLevelOverride } from './level-override';\n/**\n * @private\n */\nvar WList = /** @class */ (function () {\n function WList() {\n this.listId = -1;\n this.sourceListId = -1;\n this.abstractListId = -1;\n this.abstractList = undefined;\n this.levelOverrides = [];\n }\n WList.prototype.getListLevel = function (levelNumber) {\n var listLevel = undefined;\n var levelOverride = this.getLevelOverride(levelNumber);\n if (!isNullOrUndefined(levelOverride) && !isNullOrUndefined(levelOverride.overrideListLevel)) {\n listLevel = levelOverride.overrideListLevel;\n }\n else {\n listLevel = this.abstractList.levels[levelNumber];\n }\n return listLevel;\n };\n WList.prototype.getLevelOverride = function (levelNumber) {\n for (var i = 0; i < this.levelOverrides.length; i++) {\n if (this.levelOverrides[i] instanceof WLevelOverride) {\n var levelOverride = this.levelOverrides[i];\n if (levelOverride.levelNumber === levelNumber) {\n return levelOverride;\n }\n }\n }\n return undefined;\n };\n WList.prototype.destroy = function () {\n if (!isNullOrUndefined(this.levelOverrides)) {\n this.levelOverrides = [];\n }\n this.abstractListId = undefined;\n this.listId = undefined;\n this.sourceListId = undefined;\n this.levelOverrides = undefined;\n };\n WList.prototype.mergeList = function (list) {\n if (!isNullOrUndefined(this.abstractListId) && this.abstractListId !== -1) {\n this.abstractListId = list.abstractListId;\n }\n if (!isNullOrUndefined(this.listId) && this.listId !== -1) {\n this.listId = list.listId;\n }\n if (!isNullOrUndefined(this.sourceListId) && this.sourceListId !== -1) {\n this.sourceListId = list.sourceListId;\n }\n if (!isNullOrUndefined(this.levelOverrides) && this.levelOverrides.length !== 0) {\n this.levelOverrides = list.levelOverrides;\n }\n };\n return WList;\n}());\nexport { WList };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Dictionary } from '../../base/dictionary';\nimport { WUniqueFormat } from '../../base/unique-format';\nimport { WUniqueFormats } from '../../base/unique-formats';\nimport { WParagraphStyle } from './style';\nimport { WList } from '../list/list';\n/**\n * @private\n */\nvar WListFormat = /** @class */ (function () {\n function WListFormat(node) {\n this.uniqueListFormat = undefined;\n this.ownerBase = undefined;\n this.baseStyle = undefined;\n this.list = undefined;\n this.ownerBase = node;\n }\n Object.defineProperty(WListFormat.prototype, \"listId\", {\n get: function () {\n return this.getPropertyValue('listId');\n },\n set: function (listId) {\n this.setPropertyValue('listId', listId);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WListFormat.prototype, \"listLevelNumber\", {\n get: function () {\n return this.getPropertyValue('listLevelNumber');\n },\n set: function (value) {\n this.setPropertyValue('listLevelNumber', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WListFormat.prototype, \"listLevel\", {\n get: function () {\n var list = undefined;\n if (!isNullOrUndefined(this.list)) {\n list = this.list;\n }\n else {\n /* tslint:disable-next-line:no-any */\n var baseListStyle = this.baseStyle;\n while (!isNullOrUndefined(baseListStyle)) {\n if (baseListStyle.paragraphFormat.listFormat.list) {\n list = baseListStyle.paragraphFormat.listFormat.list;\n break;\n }\n else {\n baseListStyle = baseListStyle.basedOn;\n }\n }\n }\n if (!isNullOrUndefined(list)) {\n return list.getListLevel(this.listLevelNumber);\n }\n else {\n return undefined;\n }\n },\n enumerable: true,\n configurable: true\n });\n WListFormat.prototype.getPropertyValue = function (property) {\n if (!this.hasValue(property)) {\n if (this.baseStyle instanceof WParagraphStyle) {\n /* tslint:disable-next-line:no-any */\n var baseStyle = this.baseStyle;\n while (!isNullOrUndefined(baseStyle)) {\n if (baseStyle.paragraphFormat.listFormat.hasValue(property)) {\n break;\n }\n else {\n baseStyle = baseStyle.basedOn;\n }\n }\n if (!isNullOrUndefined(baseStyle)) {\n var propertyType = WUniqueFormat.getPropertyType(WListFormat.uniqueFormatType, property);\n return baseStyle.paragraphFormat.listFormat.uniqueListFormat.propertiesHash.get(propertyType);\n }\n }\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(WListFormat.uniqueFormatType, property);\n if (!isNullOrUndefined(this.uniqueListFormat) && this.uniqueListFormat.propertiesHash.containsKey(propertyType)) {\n return this.uniqueListFormat.propertiesHash.get(propertyType);\n }\n }\n return WListFormat.getPropertyDefaultValue(property);\n };\n WListFormat.prototype.setPropertyValue = function (property, value) {\n if (isNullOrUndefined(value) || value === '') {\n value = WListFormat.getPropertyDefaultValue(property);\n }\n if (isNullOrUndefined(this.uniqueListFormat)) {\n this.initializeUniqueListFormat(property, value);\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueListFormat.uniqueFormatType, property);\n if (this.uniqueListFormat.propertiesHash.containsKey(propertyType) &&\n this.uniqueListFormat.propertiesHash.get(propertyType) === value) {\n //Do nothing, since no change in property value and return\n return;\n }\n this.uniqueListFormat = WListFormat.uniqueListFormats.updateUniqueFormat(this.uniqueListFormat, property, value);\n }\n };\n WListFormat.prototype.initializeUniqueListFormat = function (property, propValue) {\n var uniqueListFormatTemp = new Dictionary();\n this.addUniqueListFormat('listId', property, propValue, uniqueListFormatTemp);\n this.addUniqueListFormat('listLevelNumber', property, propValue, uniqueListFormatTemp);\n this.uniqueListFormat = WListFormat.uniqueListFormats.addUniqueFormat(uniqueListFormatTemp, WListFormat.uniqueFormatType);\n };\n // tslint:disable-next-line:max-line-length\n WListFormat.prototype.addUniqueListFormat = function (property, modifiedProperty, propValue, uniqueListFormatTemp) {\n var propertyType;\n propertyType = WUniqueFormat.getPropertyType(WListFormat.uniqueFormatType, property);\n if (property === modifiedProperty) {\n uniqueListFormatTemp.add(propertyType, propValue);\n }\n };\n WListFormat.getPropertyDefaultValue = function (property) {\n var value = undefined;\n switch (property) {\n case 'listId':\n value = -1;\n break;\n case 'listLevelNumber':\n value = 0;\n break;\n }\n return value;\n };\n WListFormat.prototype.copyFormat = function (format) {\n if (!isNullOrUndefined(format)) {\n if (!isNullOrUndefined(format.uniqueListFormat)) {\n this.listId = format.listId;\n this.listLevelNumber = format.listLevelNumber;\n }\n if (!isNullOrUndefined(format.list)) {\n this.list = format.list;\n }\n }\n };\n WListFormat.prototype.hasValue = function (property) {\n if (!isNullOrUndefined(this.uniqueListFormat)) {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueListFormat.uniqueFormatType, property);\n return this.uniqueListFormat.propertiesHash.containsKey(propertyType);\n }\n return false;\n };\n WListFormat.prototype.clearFormat = function () {\n if (!isNullOrUndefined(this.uniqueListFormat) && this.uniqueListFormat.referenceCount === 0) {\n WListFormat.uniqueListFormats.remove(this.uniqueListFormat);\n }\n this.uniqueListFormat = undefined;\n this.list = undefined;\n };\n WListFormat.prototype.destroy = function () {\n this.clearFormat();\n };\n WListFormat.clear = function () {\n this.uniqueListFormats.clear();\n };\n WListFormat.prototype.ApplyStyle = function (baseStyle) {\n this.baseStyle = baseStyle;\n };\n /**\n * For internal use\n * @private\n */\n WListFormat.prototype.getValue = function (property) {\n return this.hasValue(property) ? this.getPropertyValue(property) : undefined;\n };\n /**\n * For internal use\n * @private\n */\n WListFormat.prototype.mergeFormat = function (format) {\n if (isNullOrUndefined(this.getValue('listId'))) {\n this.listId = format.getValue('listId');\n }\n if (isNullOrUndefined(this.getValue('listLevelNumber'))) {\n this.listLevelNumber = format.getValue('listLevelNumber');\n }\n if (!isNullOrUndefined(format.list)) {\n if (isNullOrUndefined(this.list)) {\n this.list = new WList();\n }\n this.list.mergeList(format.list);\n }\n };\n WListFormat.uniqueListFormats = new WUniqueFormats();\n WListFormat.uniqueFormatType = 7;\n return WListFormat;\n}());\nexport { WListFormat };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Dictionary } from '../../base/dictionary';\nimport { WUniqueFormat } from '../../base/unique-format';\nimport { WUniqueFormats } from '../../base/unique-formats';\nimport { WListFormat } from './list-format';\nimport { WParagraphStyle } from './style';\n/**\n * @private\n */\nvar WTabStop = /** @class */ (function () {\n function WTabStop() {\n }\n Object.defineProperty(WTabStop.prototype, \"position\", {\n get: function () {\n return this.positionIn;\n },\n set: function (value) {\n this.positionIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTabStop.prototype, \"deletePosition\", {\n get: function () {\n return this.deletePositionIn;\n },\n set: function (value) {\n this.deletePositionIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTabStop.prototype, \"tabJustification\", {\n get: function () {\n return this.justification;\n },\n set: function (value) {\n this.justification = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTabStop.prototype, \"tabLeader\", {\n get: function () {\n return this.leader;\n },\n set: function (value) {\n this.leader = value;\n },\n enumerable: true,\n configurable: true\n });\n WTabStop.prototype.destroy = function () {\n this.position = undefined;\n this.deletePosition = undefined;\n this.tabJustification = undefined;\n this.leader = undefined;\n };\n return WTabStop;\n}());\nexport { WTabStop };\n/**\n * @private\n */\nvar WParagraphFormat = /** @class */ (function () {\n function WParagraphFormat(node) {\n this.uniqueParagraphFormat = undefined;\n this.ownerBase = undefined;\n this.baseStyle = undefined;\n this.tabs = undefined;\n this.ownerBase = node;\n this.listFormat = new WListFormat(this);\n this.tabs = [];\n }\n WParagraphFormat.prototype.getUpdatedTabs = function () {\n var inTabs = [];\n if (!isNullOrUndefined(this.baseStyle)) {\n /* tslint:disable-next-line:no-any */\n var baseStyle = this.baseStyle;\n var tabStops = new Dictionary();\n while (!isNullOrUndefined(baseStyle)) {\n for (var _i = 0, _a = baseStyle.paragraphFormat.tabs; _i < _a.length; _i++) {\n var tab = _a[_i];\n if (!tabStops.containsKey(tab.position)) {\n tabStops.add(tab.position, tab);\n }\n }\n baseStyle = baseStyle.basedOn;\n }\n for (var _b = 0, _c = tabStops.keys; _b < _c.length; _b++) {\n var key = _c[_b];\n if (!this.hasTabStop(key)) {\n inTabs.push(tabStops.get(key));\n }\n }\n inTabs = inTabs.concat(this.tabs.filter(function (a) { return (a.position !== 0 && a.deletePosition === 0); }));\n inTabs = inTabs.sort(function (a, b) { return a.position - b.position; });\n }\n return inTabs;\n };\n WParagraphFormat.prototype.hasTabStop = function (position) {\n for (var i = 0; i < this.tabs.length; i++) {\n if (this.tabs[i].deletePosition === position) {\n return true;\n }\n }\n return false;\n };\n Object.defineProperty(WParagraphFormat.prototype, \"leftIndent\", {\n get: function () {\n return this.getPropertyValue('leftIndent');\n },\n set: function (value) {\n this.setPropertyValue('leftIndent', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"rightIndent\", {\n get: function () {\n return this.getPropertyValue('rightIndent');\n },\n set: function (value) {\n this.setPropertyValue('rightIndent', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"firstLineIndent\", {\n get: function () {\n return this.getPropertyValue('firstLineIndent');\n },\n set: function (value) {\n this.setPropertyValue('firstLineIndent', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"beforeSpacing\", {\n get: function () {\n return this.getPropertyValue('beforeSpacing');\n },\n set: function (value) {\n this.setPropertyValue('beforeSpacing', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"afterSpacing\", {\n get: function () {\n return this.getPropertyValue('afterSpacing');\n },\n set: function (value) {\n this.setPropertyValue('afterSpacing', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"lineSpacing\", {\n get: function () {\n return this.getPropertyValue('lineSpacing');\n },\n set: function (value) {\n this.setPropertyValue('lineSpacing', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"lineSpacingType\", {\n get: function () {\n return this.getPropertyValue('lineSpacingType');\n },\n set: function (value) {\n this.setPropertyValue('lineSpacingType', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"textAlignment\", {\n get: function () {\n return this.getPropertyValue('textAlignment');\n },\n set: function (value) {\n this.setPropertyValue('textAlignment', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"outlineLevel\", {\n get: function () {\n return this.getPropertyValue('outlineLevel');\n },\n set: function (value) {\n this.setPropertyValue('outlineLevel', value);\n },\n enumerable: true,\n configurable: true\n });\n WParagraphFormat.prototype.getListFormatParagraphFormat = function (property) {\n if (this.listFormat.listId > 0 && this.listFormat.listLevelNumber > -1) {\n var level = this.listFormat.listLevel;\n var propertyType = WUniqueFormat.getPropertyType(WParagraphFormat.uniqueFormatType, property);\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(level) && !isNullOrUndefined(level.paragraphFormat.uniqueParagraphFormat) && level.paragraphFormat.uniqueParagraphFormat.propertiesHash.containsKey(propertyType)) {\n return level.paragraphFormat.uniqueParagraphFormat.propertiesHash.get(propertyType);\n }\n else {\n return undefined;\n }\n }\n return undefined;\n };\n WParagraphFormat.prototype.getPropertyValue = function (property) {\n if (!this.hasValue(property)) {\n var ifListFormat = this.getListFormatParagraphFormat(property);\n if (!isNullOrUndefined(ifListFormat)) {\n return ifListFormat;\n }\n else {\n if (this.baseStyle instanceof WParagraphStyle) {\n /* tslint:disable-next-line:no-any */\n var baseStyle = this.baseStyle;\n while (!isNullOrUndefined(baseStyle)) {\n if (baseStyle.paragraphFormat.hasValue(property)) {\n break;\n }\n else {\n baseStyle = baseStyle.basedOn;\n }\n }\n if (!isNullOrUndefined(baseStyle)) {\n var propertyType = WUniqueFormat.getPropertyType(WParagraphFormat.uniqueFormatType, property);\n return baseStyle.paragraphFormat.uniqueParagraphFormat.propertiesHash.get(propertyType);\n }\n }\n }\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(WParagraphFormat.uniqueFormatType, property);\n if (!isNullOrUndefined(this.uniqueParagraphFormat) && this.uniqueParagraphFormat.propertiesHash.containsKey(propertyType)) {\n return this.uniqueParagraphFormat.propertiesHash.get(propertyType);\n }\n }\n return this.getDefaultValue(property);\n };\n WParagraphFormat.prototype.getDefaultValue = function (property) {\n var propertyType = WUniqueFormat.getPropertyType(WParagraphFormat.uniqueFormatType, property);\n var docParagraphFormat = this.documentParagraphFormat();\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(docParagraphFormat) && !isNullOrUndefined(docParagraphFormat.uniqueParagraphFormat) && docParagraphFormat.uniqueParagraphFormat.propertiesHash.containsKey(propertyType)) {\n return docParagraphFormat.uniqueParagraphFormat.propertiesHash.get(propertyType);\n }\n else {\n return WParagraphFormat.getPropertyDefaultValue(property);\n }\n };\n WParagraphFormat.prototype.documentParagraphFormat = function () {\n var docParagraphFormat;\n if (!isNullOrUndefined(this.ownerBase)) {\n if (!isNullOrUndefined(this.ownerBase.bodyWidget)) {\n docParagraphFormat = this.ownerBase.bodyWidget.page.viewer.paragraphFormat;\n }\n }\n return docParagraphFormat;\n };\n WParagraphFormat.prototype.setPropertyValue = function (property, value) {\n if (isNullOrUndefined(value) || value === '') {\n value = WParagraphFormat.getPropertyDefaultValue(property);\n }\n if (isNullOrUndefined(this.uniqueParagraphFormat)) {\n this.initializeUniqueParagraphFormat(property, value);\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueParagraphFormat.uniqueFormatType, property);\n if (this.uniqueParagraphFormat.propertiesHash.containsKey(propertyType) &&\n this.uniqueParagraphFormat.propertiesHash.get(propertyType) === value) {\n //Do nothing, since no change in property value and return\n return;\n }\n // tslint:disable-next-line:max-line-length\n this.uniqueParagraphFormat = WParagraphFormat.uniqueParagraphFormats.updateUniqueFormat(this.uniqueParagraphFormat, property, value);\n }\n };\n WParagraphFormat.prototype.initializeUniqueParagraphFormat = function (property, propValue) {\n var uniqueParaFormatTemp = new Dictionary();\n this.addUniqueParaFormat('leftIndent', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('rightIndent', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('firstLineIndent', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('textAlignment', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('beforeSpacing', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('afterSpacing', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('lineSpacing', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('lineSpacingType', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('outlineLevel', property, propValue, uniqueParaFormatTemp);\n // tslint:disable-next-line:max-line-length\n this.uniqueParagraphFormat = WParagraphFormat.uniqueParagraphFormats.addUniqueFormat(uniqueParaFormatTemp, WParagraphFormat.uniqueFormatType);\n };\n // tslint:disable-next-line:max-line-length\n WParagraphFormat.prototype.addUniqueParaFormat = function (property, modifiedProperty, propValue, uniqueParaFormatTemp) {\n var propertyType;\n propertyType = WUniqueFormat.getPropertyType(WParagraphFormat.uniqueFormatType, property);\n if (property === modifiedProperty) {\n uniqueParaFormatTemp.add(propertyType, propValue);\n }\n };\n WParagraphFormat.getPropertyDefaultValue = function (property) {\n var value = undefined;\n switch (property) {\n case 'leftIndent':\n value = 0;\n break;\n case 'rightIndent':\n value = 0;\n break;\n case 'firstLineIndent':\n value = 0;\n break;\n case 'textAlignment':\n value = 'Left';\n break;\n case 'beforeSpacing':\n value = 0;\n break;\n case 'afterSpacing':\n value = 0;\n break;\n case 'lineSpacing':\n value = 1;\n break;\n case 'lineSpacingType':\n value = 'Multiple';\n break;\n case 'styleName':\n value = 'Normal';\n break;\n case 'outlineLevel':\n value = 'BodyText';\n break;\n }\n return value;\n };\n WParagraphFormat.prototype.clearFormat = function () {\n if (!isNullOrUndefined(this.listFormat)) {\n this.listFormat.clearFormat();\n }\n if (!isNullOrUndefined(this.uniqueParagraphFormat) && this.uniqueParagraphFormat.referenceCount === 0) {\n WParagraphFormat.uniqueParagraphFormats.remove(this.uniqueParagraphFormat);\n }\n this.uniqueParagraphFormat = undefined;\n this.baseStyle = undefined;\n };\n WParagraphFormat.prototype.destroy = function () {\n this.clearFormat();\n if (!isNullOrUndefined(this.listFormat)) {\n this.listFormat.destroy();\n }\n this.listFormat = undefined;\n if (this.tabs !== undefined) {\n for (var i = 0; i < this.tabs.length; i++) {\n this.tabs[i].destroy();\n }\n this.tabs = undefined;\n }\n };\n WParagraphFormat.prototype.copyFormat = function (format) {\n if (!isNullOrUndefined(format)) {\n if (!isNullOrUndefined(format.uniqueParagraphFormat)) {\n this.updateUniqueParagraphFormat(format);\n }\n if (!isNullOrUndefined(format.listFormat)) {\n this.listFormat.copyFormat(format.listFormat);\n }\n if (!isNullOrUndefined(format.baseStyle)) {\n this.baseStyle = format.baseStyle;\n }\n if (!isNullOrUndefined(format.tabs)) {\n for (var i = 0; i < format.tabs.length; i++) {\n this.tabs[i] = format.tabs[i];\n }\n }\n }\n };\n WParagraphFormat.prototype.updateUniqueParagraphFormat = function (format) {\n var hash = undefined;\n if (this.uniqueParagraphFormat) {\n hash = this.uniqueParagraphFormat.mergeProperties(format.uniqueParagraphFormat);\n if (this.uniqueParagraphFormat.referenceCount === 0) {\n WParagraphFormat.uniqueParagraphFormats.remove(this.uniqueParagraphFormat);\n this.uniqueParagraphFormat = undefined;\n }\n }\n this.uniqueParagraphFormat = new WUniqueFormat(WParagraphFormat.uniqueFormatType);\n if (isNullOrUndefined(hash)) {\n hash = this.uniqueParagraphFormat.mergeProperties(format.uniqueParagraphFormat);\n }\n this.uniqueParagraphFormat = WParagraphFormat.uniqueParagraphFormats.addUniqueFormat(hash, WParagraphFormat.uniqueFormatType);\n };\n WParagraphFormat.prototype.cloneFormat = function () {\n var format = new WParagraphFormat(undefined);\n format.uniqueParagraphFormat = this.uniqueParagraphFormat;\n format.baseStyle = this.baseStyle;\n if (isNullOrUndefined(this.listFormat)) {\n format.listFormat = undefined;\n }\n else {\n format.listFormat = new WListFormat();\n format.listFormat.listId = this.listFormat.listId;\n format.listFormat.listLevelNumber = this.listFormat.listLevelNumber;\n }\n return format;\n };\n WParagraphFormat.prototype.hasValue = function (property) {\n if (!isNullOrUndefined(this.uniqueParagraphFormat) && !isNullOrUndefined(this.uniqueParagraphFormat.propertiesHash)) {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueParagraphFormat.uniqueFormatType, property);\n return this.uniqueParagraphFormat.propertiesHash.containsKey(propertyType);\n }\n return false;\n };\n WParagraphFormat.clear = function () {\n this.uniqueParagraphFormats.clear();\n };\n WParagraphFormat.prototype.ApplyStyle = function (baseStyle) {\n this.baseStyle = baseStyle;\n this.listFormat.ApplyStyle(this.baseStyle);\n };\n /**\n * For internal use\n * @private\n */\n WParagraphFormat.prototype.getValue = function (property) {\n return this.hasValue(property) ? this.getPropertyValue(property) : undefined;\n };\n /**\n * For internal use\n * @private\n */\n WParagraphFormat.prototype.mergeFormat = function (format) {\n if (isNullOrUndefined(this.getValue('leftIndent'))) {\n this.leftIndent = format.getValue('leftIndent');\n }\n if (isNullOrUndefined(this.getValue('rightIndent'))) {\n this.rightIndent = format.getValue('rightIndent');\n }\n if (isNullOrUndefined(this.getValue('firstLineIndent'))) {\n this.firstLineIndent = format.getValue('firstLineIndent');\n }\n if (isNullOrUndefined(this.getValue('beforeSpacing'))) {\n this.beforeSpacing = format.getValue('beforeSpacing');\n }\n if (isNullOrUndefined(this.getValue('afterSpacing'))) {\n this.afterSpacing = format.getValue('afterSpacing');\n }\n if (isNullOrUndefined(this.getValue('lineSpacing'))) {\n this.lineSpacing = format.getValue('lineSpacing');\n }\n if (isNullOrUndefined(this.getValue('lineSpacingType'))) {\n this.lineSpacingType = format.getValue('lineSpacingType');\n }\n if (isNullOrUndefined(this.getValue('textAlignment'))) {\n this.textAlignment = format.getValue('textAlignment');\n }\n if (isNullOrUndefined(this.getValue('outlineLevel'))) {\n this.outlineLevel = format.getValue('outlineLevel');\n }\n if (isNullOrUndefined(this.listFormat)) {\n this.listFormat.mergeFormat(format.listFormat);\n }\n };\n WParagraphFormat.uniqueParagraphFormats = new WUniqueFormats();\n WParagraphFormat.uniqueFormatType = 3;\n return WParagraphFormat;\n}());\nexport { WParagraphFormat };\n","import { ParagraphWidget } from '../viewer/page';\nimport { Dictionary } from '../../base/dictionary';\nimport { WUniqueFormat } from '../../base/unique-format';\nimport { WUniqueFormats } from '../../base/unique-formats';\nimport { WParagraphStyle } from './style';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar WCharacterFormat = /** @class */ (function () {\n function WCharacterFormat(node) {\n this.uniqueCharacterFormat = undefined;\n this.ownerBase = undefined;\n this.baseCharStyle = undefined;\n this.ownerBase = node;\n }\n Object.defineProperty(WCharacterFormat.prototype, \"bold\", {\n get: function () {\n return this.getPropertyValue('bold');\n },\n set: function (value) {\n this.setPropertyValue('bold', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"italic\", {\n get: function () {\n return this.getPropertyValue('italic');\n },\n set: function (value) {\n this.setPropertyValue('italic', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"fontSize\", {\n get: function () {\n return this.getPropertyValue('fontSize');\n },\n set: function (value) {\n this.setPropertyValue('fontSize', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"fontFamily\", {\n get: function () {\n return this.getPropertyValue('fontFamily');\n },\n set: function (value) {\n this.setPropertyValue('fontFamily', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"underline\", {\n get: function () {\n return this.getPropertyValue('underline');\n },\n set: function (value) {\n this.setPropertyValue('underline', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"strikethrough\", {\n get: function () {\n return this.getPropertyValue('strikethrough');\n },\n set: function (value) {\n this.setPropertyValue('strikethrough', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"baselineAlignment\", {\n get: function () {\n return this.getPropertyValue('baselineAlignment');\n },\n set: function (value) {\n this.setPropertyValue('baselineAlignment', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"highlightColor\", {\n get: function () {\n return this.getPropertyValue('highlightColor');\n },\n set: function (value) {\n this.setPropertyValue('highlightColor', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"fontColor\", {\n get: function () {\n return this.getPropertyValue('fontColor');\n },\n set: function (value) {\n this.setPropertyValue('fontColor', value);\n },\n enumerable: true,\n configurable: true\n });\n WCharacterFormat.prototype.getPropertyValue = function (property) {\n if (!this.hasValue(property)) {\n var charStyleValue = this.checkCharacterStyle(property);\n if (!isNullOrUndefined(charStyleValue)) {\n return charStyleValue;\n }\n else {\n var baseStyleValue = this.checkBaseStyle(property);\n if (!isNullOrUndefined(baseStyleValue)) {\n return baseStyleValue;\n }\n }\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(WCharacterFormat.uniqueFormatType, property);\n if (!isNullOrUndefined(this.uniqueCharacterFormat) && this.uniqueCharacterFormat.propertiesHash.containsKey(propertyType)) {\n return this.uniqueCharacterFormat.propertiesHash.get(propertyType);\n }\n }\n return this.getDefaultValue(property);\n };\n WCharacterFormat.prototype.getDefaultValue = function (property) {\n var propertyType = WUniqueFormat.getPropertyType(WCharacterFormat.uniqueFormatType, property);\n var docCharacterFormat = this.documentCharacterFormat();\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(docCharacterFormat) && !isNullOrUndefined(docCharacterFormat.uniqueCharacterFormat) && docCharacterFormat.uniqueCharacterFormat.propertiesHash.containsKey(propertyType)) {\n return docCharacterFormat.uniqueCharacterFormat.propertiesHash.get(propertyType);\n }\n else {\n return WCharacterFormat.getPropertyDefaultValue(property);\n }\n };\n WCharacterFormat.prototype.documentCharacterFormat = function () {\n var docCharacterFormat;\n if (!isNullOrUndefined(this.ownerBase)) {\n if (!isNullOrUndefined(this.ownerBase.paragraph)) {\n docCharacterFormat = this.ownerBase.paragraph.bodyWidget.page.viewer.characterFormat;\n }\n else {\n if (!isNullOrUndefined(this.ownerBase.bodyWidget)) {\n docCharacterFormat = this.ownerBase.bodyWidget.page.viewer.characterFormat;\n }\n }\n }\n return docCharacterFormat;\n };\n WCharacterFormat.prototype.checkBaseStyle = function (property) {\n /* tslint:disable-next-line:no-any */\n var baseStyle;\n if (!isNullOrUndefined(this.ownerBase)) {\n if (!isNullOrUndefined(this.ownerBase.paragraph)) {\n baseStyle = this.ownerBase.paragraph.paragraphFormat.baseStyle;\n }\n else {\n // tslint:disable-next-line:max-line-length\n if ((this.ownerBase instanceof ParagraphWidget) && !isNullOrUndefined(this.ownerBase.paragraphFormat)) {\n baseStyle = this.ownerBase.paragraphFormat.baseStyle;\n }\n else {\n if (!isNullOrUndefined(this.ownerBase instanceof WParagraphStyle)) {\n baseStyle = this.ownerBase.basedOn;\n }\n }\n }\n }\n while (!isNullOrUndefined(baseStyle)) {\n if (baseStyle.characterFormat.hasValue(property)) {\n break;\n }\n else {\n baseStyle = baseStyle.basedOn;\n }\n }\n if (!isNullOrUndefined(baseStyle)) {\n var propertyType = WUniqueFormat.getPropertyType(WCharacterFormat.uniqueFormatType, property);\n return baseStyle.characterFormat.uniqueCharacterFormat.propertiesHash.get(propertyType);\n }\n return undefined;\n };\n WCharacterFormat.prototype.checkCharacterStyle = function (property) {\n /* tslint:disable-next-line:no-any */\n var baseStyle = this.baseCharStyle;\n if (!isNullOrUndefined(baseStyle)) {\n while (!isNullOrUndefined(baseStyle) && baseStyle.name !== 'Default Paragraph Font') {\n var hasKey = baseStyle.characterFormat.hasValue(property);\n if (hasKey) {\n var returnPropertyType = WUniqueFormat.getPropertyType(WCharacterFormat.uniqueFormatType, property);\n return baseStyle.characterFormat.uniqueCharacterFormat.propertiesHash.get(returnPropertyType);\n }\n else {\n baseStyle = baseStyle.basedOn;\n }\n }\n }\n return undefined;\n };\n WCharacterFormat.prototype.setPropertyValue = function (property, value) {\n if (isNullOrUndefined(value) || value === '') {\n value = WCharacterFormat.getPropertyDefaultValue(property);\n }\n if (isNullOrUndefined(this.uniqueCharacterFormat)) {\n this.initializeUniqueCharacterFormat(property, value);\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueCharacterFormat.uniqueFormatType, property);\n if (this.uniqueCharacterFormat.propertiesHash.containsKey(propertyType) &&\n // tslint:disable-next-line:max-line-length\n this.uniqueCharacterFormat.propertiesHash.get(propertyType) === value) {\n return;\n }\n // tslint:disable-next-line:max-line-length\n this.uniqueCharacterFormat = WCharacterFormat.uniqueCharacterFormats.updateUniqueFormat(this.uniqueCharacterFormat, property, value);\n }\n };\n WCharacterFormat.prototype.initializeUniqueCharacterFormat = function (property, propValue) {\n var uniqueCharFormatTemp = new Dictionary();\n this.addUniqueCharacterFormat('fontColor', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('fontFamily', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('fontSize', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('bold', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('italic', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('underline', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('strikethrough', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('baselineAlignment', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('highlightColor', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('styleName', property, propValue, uniqueCharFormatTemp);\n // tslint:disable-next-line:max-line-length\n this.uniqueCharacterFormat = WCharacterFormat.uniqueCharacterFormats.addUniqueFormat(uniqueCharFormatTemp, WCharacterFormat.uniqueFormatType);\n };\n // tslint:disable-next-line:max-line-length\n WCharacterFormat.prototype.addUniqueCharacterFormat = function (property, modifiedProperty, propValue, uniqueCharFormatTemp) {\n var propertyType;\n propertyType = WUniqueFormat.getPropertyType(WCharacterFormat.uniqueFormatType, property);\n if (property === modifiedProperty) {\n uniqueCharFormatTemp.add(propertyType, propValue);\n }\n };\n WCharacterFormat.getPropertyDefaultValue = function (property) {\n var value = undefined;\n switch (property) {\n case 'bold':\n value = false;\n break;\n case 'italic':\n value = false;\n break;\n case 'fontSize':\n value = 11;\n break;\n case 'underline':\n value = 'None';\n break;\n case 'strikethrough':\n value = 'None';\n break;\n case 'baselineAlignment':\n value = 'Normal';\n break;\n case 'highlightColor':\n value = 'NoColor';\n break;\n case 'fontColor':\n value = '#000000';\n break;\n case 'fontFamily':\n value = 'Calibri';\n break;\n case 'styleName':\n value = 'Default Paragraph Font';\n break;\n }\n return value;\n };\n WCharacterFormat.prototype.isEqualFormat = function (format) {\n return (this.fontSize === format.fontSize\n && this.fontFamily === format.fontFamily\n && this.bold === format.bold\n && this.italic === format.italic\n && this.baselineAlignment === format.baselineAlignment\n && this.underline === format.underline\n && this.fontColor === format.fontColor\n && this.strikethrough === format.strikethrough\n && this.highlightColor === format.highlightColor);\n };\n WCharacterFormat.prototype.isSameFormat = function (format) {\n return this.baseCharStyle === format.baseCharStyle &&\n this.uniqueCharacterFormat === format.uniqueCharacterFormat;\n };\n WCharacterFormat.prototype.cloneFormat = function () {\n var format = new WCharacterFormat(undefined);\n format.uniqueCharacterFormat = this.uniqueCharacterFormat;\n format.baseCharStyle = this.baseCharStyle;\n return format;\n };\n WCharacterFormat.prototype.hasValue = function (property) {\n if (!isNullOrUndefined(this.uniqueCharacterFormat) && !isNullOrUndefined(this.uniqueCharacterFormat.propertiesHash)) {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueCharacterFormat.uniqueFormatType, property);\n return this.uniqueCharacterFormat.propertiesHash.containsKey(propertyType);\n }\n return false;\n };\n WCharacterFormat.prototype.clearFormat = function () {\n if (!isNullOrUndefined(this.uniqueCharacterFormat) && this.uniqueCharacterFormat.referenceCount === 0) {\n WCharacterFormat.uniqueCharacterFormats.remove(this.uniqueCharacterFormat);\n }\n this.uniqueCharacterFormat = undefined;\n this.baseCharStyle = undefined;\n };\n WCharacterFormat.prototype.destroy = function () {\n this.clearFormat();\n };\n WCharacterFormat.prototype.copyFormat = function (format) {\n if (!isNullOrUndefined(format)) {\n if (!isNullOrUndefined(format.uniqueCharacterFormat) && format.uniqueCharacterFormat.propertiesHash) {\n this.updateUniqueCharacterFormat(format);\n }\n if (!isNullOrUndefined(format.baseCharStyle)) {\n this.baseCharStyle = format.baseCharStyle;\n }\n }\n };\n WCharacterFormat.prototype.updateUniqueCharacterFormat = function (format) {\n var hash = undefined;\n if (this.uniqueCharacterFormat) {\n hash = this.uniqueCharacterFormat.mergeProperties(format.uniqueCharacterFormat);\n if (this.uniqueCharacterFormat.referenceCount === 0) {\n WCharacterFormat.uniqueCharacterFormats.remove(this.uniqueCharacterFormat);\n this.uniqueCharacterFormat = undefined;\n }\n }\n this.uniqueCharacterFormat = new WUniqueFormat(WCharacterFormat.uniqueFormatType);\n if (isNullOrUndefined(hash)) {\n hash = this.uniqueCharacterFormat.mergeProperties(format.uniqueCharacterFormat);\n }\n this.uniqueCharacterFormat = WCharacterFormat.uniqueCharacterFormats.addUniqueFormat(hash, WCharacterFormat.uniqueFormatType);\n };\n WCharacterFormat.clear = function () {\n this.uniqueCharacterFormats.clear();\n };\n WCharacterFormat.prototype.ApplyStyle = function (baseCharStyle) {\n this.baseCharStyle = baseCharStyle;\n };\n /**\n * For internal use\n * @private\n */\n WCharacterFormat.prototype.getValue = function (property) {\n return this.hasValue(property) ? this.getPropertyValue(property) : undefined;\n };\n /**\n * For internal use\n * @private\n */\n WCharacterFormat.prototype.mergeFormat = function (format) {\n if (isNullOrUndefined(this.getValue('bold'))) {\n this.bold = format.getValue('bold');\n }\n if (isNullOrUndefined(this.getValue('italic'))) {\n this.italic = format.getValue('italic');\n }\n if (isNullOrUndefined(this.getValue('fontSize'))) {\n this.fontSize = format.getValue('fontSize');\n }\n if (isNullOrUndefined(this.getValue('fontFamily'))) {\n this.fontFamily = format.getValue('fontFamily');\n }\n if (isNullOrUndefined(this.getValue('underline'))) {\n this.underline = format.getValue('underline');\n }\n if (isNullOrUndefined(this.getValue('strikethrough'))) {\n this.strikethrough = format.getValue('strikethrough');\n }\n if (isNullOrUndefined(this.getValue('baselineAlignment'))) {\n this.baselineAlignment = format.getValue('baselineAlignment');\n }\n if (isNullOrUndefined(this.getValue('highlightColor'))) {\n this.highlightColor = format.getValue('highlightColor');\n }\n if (isNullOrUndefined(this.getValue('fontColor'))) {\n this.fontColor = format.getValue('fontColor');\n }\n };\n WCharacterFormat.uniqueCharacterFormats = new WUniqueFormats();\n WCharacterFormat.uniqueFormatType = 2;\n return WCharacterFormat;\n}());\nexport { WCharacterFormat };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { FieldElementBox } from '../viewer/page';\n/**\n * @private\n */\nvar HelperMethods = /** @class */ (function () {\n function HelperMethods() {\n }\n /**\n * Inserts text at specified index in string.\n * @param {string} spanText\n * @param {number} index\n * @param {string} text\n * @private\n */\n HelperMethods.insert = function (spanText, index, text) {\n if (index >= 0) {\n return [spanText.slice(0, index) + text + spanText.slice(index)].join('');\n }\n else {\n return text + this;\n }\n };\n /**\n * Removes text from specified index in string.\n * @param {string} text\n * @param {number} index\n * @param {number} length\n * @private\n */\n HelperMethods.remove = function (text, index, length) {\n if (index === 0) {\n return text.substring(index + 1, text.length);\n }\n else {\n return text.substring(0, index) + text.substring(index + 1, text.length);\n }\n };\n /**\n * Returns the index of word split character in a string.\n * @param {string} text\n * @param {string[]} wordSplitCharacter\n * @private\n */\n /* tslint:disable:no-any */\n HelperMethods.indexOfAny = function (text, wordSplitCharacter) {\n var index = undefined;\n for (var j = 0; j < wordSplitCharacter.length; j++) {\n var temp = text.indexOf(wordSplitCharacter[j]);\n if (temp !== -1 && isNullOrUndefined(index)) {\n index = temp;\n }\n else if (temp !== -1 && temp < index) {\n index = temp;\n }\n }\n return isNullOrUndefined(index) ? -1 : index;\n };\n /**\n * Returns the last index of word split character in a string.\n * @param {string} text\n * @param {string[]} wordSplitCharacter\n * @private\n */\n HelperMethods.lastIndexOfAny = function (text, wordSplitCharacter) {\n for (var i = text.length - 1; i >= 0; i--) {\n for (var j = 0; j <= wordSplitCharacter.length - 1; j++) {\n if (text[i] === wordSplitCharacter[j]) {\n return i;\n }\n }\n }\n return -1;\n };\n /**\n * Adds css styles to document header.\n * @param {string} css\n * @private\n */\n HelperMethods.addCssStyle = function (css) {\n var style = document.createElement('style');\n if (style.style.cssText) {\n style.style.cssText = css;\n }\n else {\n style.appendChild(document.createTextNode(css));\n }\n document.getElementsByTagName('head')[0].appendChild(style);\n };\n /**\n * Gets highlight color code.\n * @param {HighlightColor} highlightColor\n * @private\n */\n HelperMethods.getHighlightColorCode = function (highlightColor) {\n var color = '#ffffff';\n switch (highlightColor) {\n case 'Yellow':\n color = '#ffff00';\n break;\n case 'BrightGreen':\n color = '#00ff00';\n break;\n case 'Turquoise':\n color = '#00ffff';\n break;\n case 'Pink':\n color = '#ff00ff';\n break;\n case 'Blue':\n color = '#0000ff';\n break;\n case 'Red':\n color = '#ff0000';\n break;\n case 'DarkBlue':\n color = '#000080';\n break;\n case 'Teal':\n color = '#008080';\n break;\n case 'Green':\n color = '#008000';\n break;\n case 'Violet':\n color = '#800080';\n break;\n case 'DarkRed':\n color = '#800000';\n break;\n case 'DarkYellow':\n color = '#808000';\n break;\n case 'Gray50':\n color = '#808080';\n break;\n case 'Gray25':\n color = '#c0c0c0';\n break;\n case 'Black':\n color = '#000000';\n break;\n }\n return color;\n };\n /**\n * Converts point to pixel.\n * @param {number} point\n * @private\n */\n HelperMethods.convertPointToPixel = function (point) {\n var pixel = HelperMethods.round((point * 96 / 72), 5);\n return pixel;\n };\n /**\n * Converts pixel to point.\n * @param {number} pixel\n * @private\n */\n HelperMethods.convertPixelToPoint = function (pixel) {\n var point = HelperMethods.round((pixel * 72 / 96), 5);\n return point;\n };\n /**\n * Return true if field linked\n * @private\n */\n HelperMethods.isLinkedFieldCharacter = function (inline) {\n if (inline instanceof FieldElementBox && inline.fieldType === 0) {\n return !isNullOrUndefined(inline.fieldEnd);\n }\n else if (inline instanceof FieldElementBox && inline.fieldType === 2) {\n return !isNullOrUndefined(inline.fieldBegin) && !isNullOrUndefined(inline.fieldEnd);\n }\n else {\n return !isNullOrUndefined(inline.fieldBegin);\n }\n };\n /**\n * Removes white space in a string.\n * @param {string} text\n * @private\n */\n HelperMethods.removeSpace = function (text) {\n if (!isNullOrUndefined(text) && text.length !== 0) {\n for (var i = 0; i < text.length; i++) {\n if (text.charAt(i) === ' ') {\n //replace the space by empty string in string\n text = text.replace(' ', '');\n }\n }\n }\n return text;\n };\n /**\n * Trims white space at start of the string.\n * @param {string} text\n * @private\n */\n HelperMethods.trimStart = function (text) {\n var i = 0;\n for (i; i < text.length; i++) {\n if (text[i] !== ' ') {\n break;\n }\n }\n return text.substring(i, text.length);\n };\n /**\n * Trims white space at end of the string.\n * @param {string} text\n * @private\n */\n HelperMethods.trimEnd = function (text) {\n var i = text.length - 1;\n for (i; i >= 0; i--) {\n if (text[i] !== ' ') {\n break;\n }\n }\n return text.substring(0, i + 1);\n };\n /**\n * Checks whether string ends with whitespace.\n * @param {string} text\n * @private\n */\n HelperMethods.endsWith = function (text) {\n if (!isNullOrUndefined(text) && text.length !== 0) {\n return text[text.length - 1] === ' ';\n }\n return false;\n };\n /**\n * @private\n * Write Characterformat\n * @param {any} characterFormat\n * @param {boolean} isInline\n * @param {WCharacterFormat} format\n */\n HelperMethods.writeCharacterFormat = function (characterFormat, isInline, format) {\n characterFormat.bold = isInline ? format.bold : format.getValue('bold');\n characterFormat.italic = isInline ? format.italic : format.getValue('italic');\n characterFormat.fontSize = isInline ? format.fontSize : format.getValue('fontSize');\n characterFormat.fontFamily = isInline ? format.fontFamily : format.getValue('fontFamily');\n characterFormat.underline = isInline ? format.underline : format.getValue('underline');\n characterFormat.strikethrough = isInline ? format.strikethrough : format.getValue('strikethrough');\n characterFormat.baselineAlignment = isInline ? format.baselineAlignment : format.getValue('baselineAlignment');\n characterFormat.highlightColor = isInline ? format.highlightColor : format.getValue('highlightColor');\n characterFormat.fontColor = isInline ? format.fontColor : format.getValue('fontColor');\n characterFormat.styleName = !isNullOrUndefined(format.baseCharStyle) ? format.baseCharStyle.name : undefined;\n };\n /* tslint:enable:no-any */\n /**\n * Rounds the values with specified decimal digits.\n * @param {number} value\n * @param {number} decimalDigits\n * @private\n */\n HelperMethods.round = function (value, decimalDigits) {\n var temp = value;\n for (var i = 0; i < decimalDigits; i++) {\n temp = temp * 10;\n }\n temp = Math.round(temp);\n for (var i = 0; i < decimalDigits; i++) {\n temp = temp / 10;\n }\n return temp;\n };\n /**\n * @private\n */\n HelperMethods.wordBefore = '\\\\b';\n /**\n * @private\n */\n HelperMethods.wordAfter = '\\\\b';\n /**\n * @private\n */\n HelperMethods.wordSplitCharacters = [' ', ',', '.', ':', ';', '<', '>', '=',\n '+', '-', '_', '{', '}', '[', ']', '`', '~', '!', '@', '#', '$', '%', '^', '&',\n '*', '(', ')', '\"', '?', '/', '|', '\\\\', '”'];\n return HelperMethods;\n}());\nexport { HelperMethods };\n/**\n * @private\n */\nvar Point = /** @class */ (function () {\n function Point(xPosition, yPosition) {\n this.xIn = 0;\n this.yIn = 0;\n this.xIn = xPosition;\n this.yIn = yPosition;\n }\n Object.defineProperty(Point.prototype, \"x\", {\n /**\n * Gets or sets x value.\n * @private\n */\n get: function () {\n return this.xIn;\n },\n set: function (value) {\n this.xIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Point.prototype, \"y\", {\n /**\n * Gets or sets y value.\n * @private\n */\n get: function () {\n return this.yIn;\n },\n set: function (value) {\n this.yIn = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n Point.prototype.copy = function (point) {\n this.xIn = point.xIn;\n this.yIn = point.yIn;\n };\n /**\n * Destroys the internal objects maintained.\n * @returns void\n */\n Point.prototype.destroy = function () {\n this.xIn = undefined;\n this.yIn = undefined;\n };\n return Point;\n}());\nexport { Point };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { WParagraphFormat } from './paragraph-format';\nimport { WCharacterFormat } from './character-format';\nimport { HelperMethods } from '../editor/editor-helper';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar WStyle = /** @class */ (function () {\n function WStyle() {\n }\n return WStyle;\n}());\nexport { WStyle };\n/**\n * @private\n */\nvar WParagraphStyle = /** @class */ (function (_super) {\n __extends(WParagraphStyle, _super);\n function WParagraphStyle(node) {\n var _this = _super.call(this) || this;\n _this.ownerBase = node;\n _this.paragraphFormat = new WParagraphFormat(_this);\n _this.characterFormat = new WCharacterFormat(_this);\n return _this;\n }\n WParagraphStyle.prototype.destroy = function () {\n this.characterFormat.destroy();\n this.paragraphFormat.destroy();\n };\n WParagraphStyle.prototype.copyStyle = function (paraStyle) {\n this.name = paraStyle.name;\n this.ownerBase = paraStyle.ownerBase;\n this.type = paraStyle.type;\n this.next = paraStyle.next;\n this.basedOn = paraStyle.basedOn;\n this.link = paraStyle.link;\n this.characterFormat.copyFormat(paraStyle.characterFormat);\n this.paragraphFormat.copyFormat(paraStyle.paragraphFormat);\n };\n return WParagraphStyle;\n}(WStyle));\nexport { WParagraphStyle };\n/**\n * @private\n */\nvar WCharacterStyle = /** @class */ (function (_super) {\n __extends(WCharacterStyle, _super);\n function WCharacterStyle(node) {\n var _this = _super.call(this) || this;\n _this.ownerBase = node;\n _this.characterFormat = new WCharacterFormat(_this);\n return _this;\n }\n WCharacterStyle.prototype.destroy = function () {\n this.characterFormat.destroy();\n };\n WCharacterStyle.prototype.copyStyle = function (charStyle) {\n this.name = charStyle.name;\n this.ownerBase = charStyle.ownerBase;\n this.type = charStyle.type;\n this.next = charStyle.next;\n this.basedOn = charStyle.basedOn;\n this.characterFormat.copyFormat(charStyle.characterFormat);\n };\n return WCharacterStyle;\n}(WStyle));\nexport { WCharacterStyle };\n/**\n * @private\n */\nvar WStyles = /** @class */ (function () {\n function WStyles() {\n this.collection = [];\n /* tslint:enable:no-any */\n }\n Object.defineProperty(WStyles.prototype, \"length\", {\n get: function () {\n return this.collection.length;\n },\n enumerable: true,\n configurable: true\n });\n WStyles.prototype.remove = function (item) {\n this.collection = this.collection.filter(function (a) { return (a.name !== item.name); });\n };\n WStyles.prototype.push = function (item) {\n if (item != null && item !== undefined) {\n this.collection.push(item);\n }\n return 1;\n };\n WStyles.prototype.getItem = function (index) {\n if (this.collection.length > index) {\n return this.collection[index];\n }\n return null;\n };\n WStyles.prototype.indexOf = function (item) {\n return this.collection.indexOf(item);\n };\n WStyles.prototype.contains = function (item) {\n var index = this.collection.indexOf(item);\n return index > -1 && index < this.collection.length;\n };\n WStyles.prototype.clear = function () {\n while (this.collection.length > 0) {\n this.collection.pop();\n }\n };\n WStyles.prototype.findByName = function (name, type) {\n var returnStyle;\n for (var _i = 0, _a = this.collection; _i < _a.length; _i++) {\n var value = _a[_i];\n if (value.name === name) {\n returnStyle = value;\n if (!isNullOrUndefined(type) && value.type === type) {\n returnStyle = value;\n }\n }\n }\n return returnStyle;\n };\n WStyles.prototype.getStyleNames = function (type) {\n return this.collection.filter(function (a) { return (a.type === type); }).map(function (a) { return a.name; });\n };\n /* tslint:disable:no-any */\n WStyles.prototype.getStyles = function (type) {\n var styles = this.collection.filter(function (a) { return (a.type === type); }).map(function (a) { return a; });\n var styleObjects = [];\n for (var _i = 0, styles_1 = styles; _i < styles_1.length; _i++) {\n var style = styles_1[_i];\n var returnStyle = {};\n var returnStyleObject = {};\n returnStyleObject.characterFormat = {};\n HelperMethods.writeCharacterFormat(returnStyleObject.characterFormat, true, style.characterFormat);\n returnStyle.name = style.name;\n returnStyle.style = JSON.stringify(returnStyleObject);\n styleObjects.push(returnStyle);\n }\n return styleObjects;\n };\n return WStyles;\n}());\nexport { WStyles };\n","import { Dictionary } from '../../base/dictionary';\nimport { WUniqueFormat } from '../../base/unique-format';\nimport { WUniqueFormats } from '../../base/unique-formats';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar WBorder = /** @class */ (function () {\n function WBorder(node) {\n this.uniqueBorderFormat = undefined;\n this.ownerBase = undefined;\n this.ownerBase = node;\n }\n Object.defineProperty(WBorder.prototype, \"color\", {\n get: function () {\n return this.getPropertyValue('color');\n },\n set: function (value) {\n this.setPropertyValue('color', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorder.prototype, \"lineStyle\", {\n get: function () {\n return this.getPropertyValue('lineStyle');\n },\n set: function (value) {\n this.setPropertyValue('lineStyle', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorder.prototype, \"lineWidth\", {\n get: function () {\n return this.getPropertyValue('lineWidth');\n },\n set: function (value) {\n this.setPropertyValue('lineWidth', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorder.prototype, \"shadow\", {\n get: function () {\n return this.getPropertyValue('shadow');\n },\n set: function (value) {\n this.setPropertyValue('shadow', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorder.prototype, \"space\", {\n get: function () {\n return this.getPropertyValue('space');\n },\n set: function (value) {\n this.setPropertyValue('space', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorder.prototype, \"hasNoneStyle\", {\n get: function () {\n return this.getPropertyValue('hasNoneStyle');\n },\n set: function (value) {\n this.setPropertyValue('hasNoneStyle', value);\n },\n enumerable: true,\n configurable: true\n });\n WBorder.prototype.getPropertyValue = function (property) {\n var hasValue = this.hasValue(property);\n if (hasValue) {\n var propertyType = WUniqueFormat.getPropertyType(WBorder.uniqueFormatType, property);\n if (!isNullOrUndefined(this.uniqueBorderFormat) && this.uniqueBorderFormat.propertiesHash.containsKey(propertyType)) {\n return this.uniqueBorderFormat.propertiesHash.get(propertyType);\n }\n }\n return WBorder.getPropertyDefaultValue(property);\n };\n WBorder.prototype.setPropertyValue = function (property, value) {\n if (isNullOrUndefined(value) || value === '') {\n value = WBorder.getPropertyDefaultValue(property);\n }\n if (isNullOrUndefined(this.uniqueBorderFormat)) {\n this.initializeUniqueBorder(property, value);\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueBorderFormat.uniqueFormatType, property);\n if (this.uniqueBorderFormat.propertiesHash.containsKey(propertyType) &&\n this.uniqueBorderFormat.propertiesHash.get(propertyType) === value) {\n //Do nothing, since no change in property value and return\n return;\n }\n this.uniqueBorderFormat = WBorder.uniqueBorderFormats.updateUniqueFormat(this.uniqueBorderFormat, property, value);\n }\n };\n WBorder.prototype.initializeUniqueBorder = function (property, propValue) {\n var uniqueBorderFormatTemp = new Dictionary();\n this.addUniqueBorderFormat('color', property, propValue, uniqueBorderFormatTemp);\n this.addUniqueBorderFormat('lineStyle', property, propValue, uniqueBorderFormatTemp);\n this.addUniqueBorderFormat('lineWidth', property, propValue, uniqueBorderFormatTemp);\n this.addUniqueBorderFormat('shadow', property, propValue, uniqueBorderFormatTemp);\n this.addUniqueBorderFormat('space', property, propValue, uniqueBorderFormatTemp);\n this.addUniqueBorderFormat('hasNoneStyle', property, propValue, uniqueBorderFormatTemp);\n this.uniqueBorderFormat = WBorder.uniqueBorderFormats.addUniqueFormat(uniqueBorderFormatTemp, WBorder.uniqueFormatType);\n };\n // tslint:disable-next-line:max-line-length\n WBorder.prototype.addUniqueBorderFormat = function (property, modifiedProperty, propValue, uniqueBorderFormatTemp) {\n var propertyType;\n propertyType = WUniqueFormat.getPropertyType(WBorder.uniqueFormatType, property);\n if (property === modifiedProperty) {\n uniqueBorderFormatTemp.add(propertyType, propValue);\n }\n else {\n uniqueBorderFormatTemp.add(propertyType, WBorder.getPropertyDefaultValue(property));\n }\n };\n WBorder.getPropertyDefaultValue = function (property) {\n var value = undefined;\n switch (property) {\n case 'color':\n value = '#000000';\n break;\n case 'lineStyle':\n value = 'None';\n break;\n case 'lineWidth':\n value = 0;\n break;\n case 'shadow':\n value = false;\n break;\n case 'space':\n value = 0;\n break;\n case 'hasNoneStyle':\n value = false;\n break;\n }\n return value;\n };\n WBorder.prototype.getLineWidth = function () {\n /* tslint:disable */\n switch (this.lineStyle) {\n case 'None':\n case 'Cleared':\n return 0;\n case 'Triple':\n case 'Double':\n case 'ThinThickSmallGap':\n case 'ThickThinSmallGap':\n case 'ThinThickThinSmallGap':\n case 'ThinThickMediumGap':\n case 'ThickThinMediumGap':\n case 'ThinThickThinMediumGap':\n case 'ThinThickLargeGap':\n case 'ThickThinLargeGap':\n case 'ThinThickThinLargeGap':\n case 'Emboss3D':\n case 'Engrave3D':\n {\n var lineArray = this.getBorderLineWidthArray(this.lineStyle, this.lineWidth);\n var width = 0;\n for (var i = 0; i < lineArray.length; i++) {\n width += lineArray[i];\n }\n return width;\n }\n case 'Single':\n case 'DashLargeGap':\n case 'DashSmallGap':\n case 'Dot':\n case 'DashDot':\n case 'DashDotDot':\n case 'Thick':\n return this.lineWidth;\n case 'SingleWavy':\n return (this.lineWidth === 1.5 ? 3 : 2.5); //Double wave border only draw with the fixed width\n case 'DoubleWavy':\n return (6.75); //Double wave border only draw with the fixed width\n case 'DashDotStroked':\n case 'Outset':\n return this.lineWidth;\n }\n return this.lineWidth;\n /* tslint:enable */\n };\n WBorder.prototype.getBorderLineWidthArray = function (lineStyle, lineWidth) {\n var borderLineArray = [lineWidth];\n switch (lineStyle) {\n case 'Double':\n borderLineArray = [1, 1, 1];\n break;\n case 'ThinThickSmallGap':\n borderLineArray = [1, -0.75, -0.75];\n break;\n case 'ThickThinSmallGap':\n borderLineArray = [-0.75, -0.75, 1];\n break;\n case 'ThinThickMediumGap':\n borderLineArray = [1, 0.5, 0.5];\n break;\n case 'ThickThinMediumGap':\n borderLineArray = [0.5, 0.5, 1];\n break;\n case 'ThinThickLargeGap':\n borderLineArray = [-1.5, 1, -0.75];\n break;\n case 'ThickThinLargeGap':\n borderLineArray = [-0.75, 1, -1.5];\n break;\n case 'Triple':\n borderLineArray = [1, 1, 1, 1, 1];\n break;\n case 'ThinThickThinSmallGap':\n borderLineArray = [-0.75, -0.75, 1, -0.75, -0.75];\n break;\n case 'ThinThickThinMediumGap':\n borderLineArray = [0.5, 0.5, 1, 0.5, 0.5];\n break;\n case 'ThinThickThinLargeGap':\n borderLineArray = [-0.75, 1, -1.5, 1, -0.75];\n break;\n case 'Emboss3D':\n case 'Engrave3D':\n borderLineArray = [0.25, 0, 1, 0, 0.25];\n break;\n }\n if (borderLineArray.length === 1) {\n return [lineWidth];\n }\n for (var i = 0; i < borderLineArray.length; i++) {\n if (borderLineArray[i] >= 0) {\n borderLineArray[i] = borderLineArray[i] * lineWidth;\n }\n else {\n borderLineArray[i] = Math.abs(borderLineArray[i]);\n }\n }\n return borderLineArray;\n };\n WBorder.prototype.getBorderWeight = function () {\n var weight = 0;\n var numberOfLines = this.getNumberOfLines();\n var borderNumber = this.getBorderNumber();\n switch (this.lineStyle) {\n case 'Single':\n case 'DashSmallGap':\n case 'DashDot':\n case 'DashDotDot':\n case 'Double':\n case 'Triple':\n case 'ThinThickSmallGap':\n case 'ThickThinSmallGap':\n case 'ThinThickThinSmallGap':\n case 'ThinThickMediumGap':\n case 'ThickThinMediumGap':\n case 'ThinThickThinMediumGap':\n case 'ThinThickLargeGap':\n case 'ThickThinLargeGap':\n case 'ThinThickThinLargeGap':\n case 'SingleWavy':\n case 'DoubleWavy':\n case 'DashDotStroked':\n case 'Emboss3D':\n case 'Engrave3D':\n case 'Outset':\n case 'Inset':\n case 'Thick':\n weight = numberOfLines * borderNumber;\n break;\n case 'Dot':\n case 'DashLargeGap':\n weight = 1;\n break;\n }\n return weight;\n };\n WBorder.prototype.getBorderNumber = function () {\n var borderNumber = 0;\n switch (this.lineStyle) {\n case 'Single':\n borderNumber = 1;\n break;\n case 'Thick':\n borderNumber = 2;\n break;\n case 'Double':\n borderNumber = 3;\n break;\n case 'Dot':\n borderNumber = 4;\n break;\n case 'DashLargeGap'://dashed.\n borderNumber = 5;\n break;\n case 'DashDot':\n borderNumber = 6;\n break;\n case 'DashDotDot':\n borderNumber = 7;\n break;\n case 'Triple':\n borderNumber = 8;\n break;\n case 'ThinThickSmallGap':\n borderNumber = 9;\n break;\n case 'ThickThinSmallGap':\n borderNumber = 10;\n break;\n case 'ThinThickThinSmallGap':\n borderNumber = 11;\n break;\n case 'ThinThickMediumGap':\n borderNumber = 12;\n break;\n case 'ThickThinMediumGap':\n borderNumber = 13;\n break;\n case 'ThinThickThinMediumGap':\n borderNumber = 14;\n break;\n case 'ThinThickLargeGap':\n borderNumber = 15;\n break;\n case 'ThickThinLargeGap':\n borderNumber = 16;\n break;\n case 'ThinThickThinLargeGap':\n borderNumber = 17;\n break;\n case 'SingleWavy'://wave.\n borderNumber = 18;\n break;\n case 'DoubleWavy':\n borderNumber = 19;\n break;\n case 'DashSmallGap':\n borderNumber = 20;\n break;\n case 'DashDotStroked':\n borderNumber = 21;\n break;\n case 'Emboss3D':\n borderNumber = 22;\n break;\n case 'Engrave3D':\n borderNumber = 23;\n break;\n case 'Outset':\n borderNumber = 24;\n break;\n case 'Inset':\n borderNumber = 25;\n break;\n }\n return borderNumber;\n };\n WBorder.prototype.getNumberOfLines = function () {\n //ToDo: Need to analyze more on this.\n var value = 0;\n switch (this.lineStyle) {\n case 'Single':\n case 'Dot':\n case 'DashSmallGap':\n case 'DashLargeGap':\n case 'DashDot':\n case 'DashDotDot':\n value = 1;\n break;\n case 'Double':\n value = 3;\n break;\n case 'Triple':\n value = 5;\n break;\n case 'ThinThickSmallGap':\n value = 3;\n break;\n case 'ThickThinSmallGap':\n value = 3;\n break;\n case 'ThinThickThinSmallGap':\n value = 5;\n break;\n case 'ThinThickMediumGap':\n value = 3;\n break;\n case 'ThickThinMediumGap':\n value = 3;\n break;\n case 'ThinThickThinMediumGap':\n value = 5;\n break;\n case 'ThinThickLargeGap':\n value = 3;\n break;\n case 'ThickThinLargeGap':\n value = 3;\n break;\n case 'ThinThickThinLargeGap':\n value = 5;\n break;\n case 'SingleWavy':\n value = 1;\n break;\n case 'DoubleWavy':\n value = 2;\n break;\n case 'DashDotStroked':\n value = 1;\n break;\n case 'Emboss3D':\n case 'Engrave3D':\n value = 3;\n break;\n case 'Outset':\n case 'Inset':\n case 'Thick':\n value = 1;\n break;\n }\n return value;\n };\n WBorder.prototype.getPrecedence = function () {\n var value = 0;\n switch (this.lineStyle) {\n case 'Single':\n value = 1;\n break;\n case 'Thick':\n value = 2;\n break;\n case 'Double':\n value = 3;\n break;\n case 'Dot':\n value = 4;\n break;\n case 'DashLargeGap'://dashed.\n value = 5;\n break;\n case 'DashDot':\n value = 6;\n break;\n case 'DashDotDot':\n value = 7;\n break;\n case 'Triple':\n value = 8;\n break;\n case 'ThinThickSmallGap':\n value = 9;\n break;\n case 'ThickThinSmallGap':\n value = 10;\n break;\n case 'ThinThickThinSmallGap':\n value = 11;\n break;\n case 'ThinThickMediumGap':\n value = 12;\n break;\n case 'ThickThinMediumGap':\n value = 13;\n break;\n case 'ThinThickThinMediumGap':\n value = 14;\n break;\n case 'ThinThickLargeGap':\n value = 15;\n break;\n case 'ThickThinLargeGap':\n value = 16;\n break;\n case 'ThinThickThinLargeGap':\n value = 17;\n break;\n case 'SingleWavy'://wave.\n value = 18;\n break;\n case 'DoubleWavy':\n value = 19;\n break;\n case 'DashSmallGap':\n value = 20;\n break;\n case 'DashDotStroked':\n value = 21;\n break;\n case 'Emboss3D':\n value = 22;\n break;\n case 'Engrave3D':\n value = 23;\n break;\n case 'Outset':\n value = 24;\n break;\n case 'Inset':\n value = 25;\n break;\n }\n return value;\n };\n WBorder.prototype.hasValue = function (property) {\n if (!isNullOrUndefined(this.uniqueBorderFormat)) {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueBorderFormat.uniqueFormatType, property);\n return this.uniqueBorderFormat.propertiesHash.containsKey(propertyType);\n }\n return false;\n };\n WBorder.prototype.cloneFormat = function () {\n var border = new WBorder(undefined);\n border.color = this.color;\n border.lineStyle = this.lineStyle;\n border.lineWidth = this.lineWidth;\n border.shadow = this.shadow;\n border.space = this.space;\n return border;\n };\n WBorder.prototype.destroy = function () {\n if (!isNullOrUndefined(this.uniqueBorderFormat)) {\n WBorder.uniqueBorderFormats.remove(this.uniqueBorderFormat);\n }\n this.uniqueBorderFormat = undefined;\n };\n WBorder.prototype.copyFormat = function (border) {\n if (!isNullOrUndefined(border) && !isNullOrUndefined(border.uniqueBorderFormat)) {\n this.color = border.color;\n this.lineStyle = border.lineStyle;\n this.lineWidth = border.lineWidth;\n this.shadow = border.shadow;\n this.space = border.space;\n }\n };\n WBorder.clear = function () {\n this.uniqueBorderFormats.clear();\n };\n WBorder.uniqueBorderFormats = new WUniqueFormats();\n WBorder.uniqueFormatType = 1;\n return WBorder;\n}());\nexport { WBorder };\n","import { WBorder } from './border';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar WBorders = /** @class */ (function () {\n function WBorders(node) {\n this.leftIn = new WBorder(this);\n this.rightIn = new WBorder(this);\n this.topIn = new WBorder(this);\n this.bottomIn = new WBorder(this);\n this.horizontalIn = new WBorder(this);\n this.verticalIn = new WBorder(this);\n this.diagonalUpIn = new WBorder(this);\n this.diagonalDownIn = new WBorder(this);\n this.lineWidthIn = 0;\n this.ownerBase = node;\n }\n Object.defineProperty(WBorders.prototype, \"left\", {\n get: function () {\n return this.leftIn;\n },\n set: function (value) {\n this.leftIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorders.prototype, \"right\", {\n get: function () {\n return this.rightIn;\n },\n set: function (value) {\n this.rightIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorders.prototype, \"top\", {\n get: function () {\n return this.topIn;\n },\n set: function (value) {\n this.topIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorders.prototype, \"bottom\", {\n get: function () {\n return this.bottomIn;\n },\n set: function (value) {\n this.bottomIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorders.prototype, \"horizontal\", {\n get: function () {\n return this.horizontalIn;\n },\n set: function (value) {\n this.horizontalIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorders.prototype, \"vertical\", {\n get: function () {\n return this.verticalIn;\n },\n set: function (value) {\n this.verticalIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorders.prototype, \"diagonalUp\", {\n get: function () {\n return this.diagonalUpIn;\n },\n set: function (value) {\n this.diagonalUpIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorders.prototype, \"diagonalDown\", {\n get: function () {\n return this.diagonalDownIn;\n },\n set: function (value) {\n this.diagonalDownIn = value;\n },\n enumerable: true,\n configurable: true\n });\n WBorders.prototype.destroy = function () {\n if (!isNullOrUndefined(this.left)) {\n this.left.destroy();\n }\n if (!isNullOrUndefined(this.top)) {\n this.top.destroy();\n }\n if (!isNullOrUndefined(this.bottom)) {\n this.bottom.destroy();\n }\n if (!isNullOrUndefined(this.right)) {\n this.right.destroy();\n }\n if (!isNullOrUndefined(this.horizontal)) {\n this.horizontal.destroy();\n }\n if (!isNullOrUndefined(this.vertical)) {\n this.vertical.destroy();\n }\n if (!isNullOrUndefined(this.diagonalDown)) {\n this.diagonalDown.destroy();\n }\n if (!isNullOrUndefined(this.diagonalUp)) {\n this.diagonalUp.destroy();\n }\n this.topIn = undefined;\n this.bottomIn = undefined;\n this.leftIn = undefined;\n this.rightIn = undefined;\n this.horizontalIn = undefined;\n this.verticalIn = undefined;\n this.diagonalDownIn = undefined;\n this.diagonalUpIn = undefined;\n this.lineWidthIn = undefined;\n this.valueIn = undefined;\n };\n WBorders.prototype.cloneFormat = function () {\n var borders = new WBorders(undefined);\n borders.top = isNullOrUndefined(this.top) ? undefined : this.top.cloneFormat();\n borders.bottom = isNullOrUndefined(this.bottom) ? undefined : this.bottom.cloneFormat();\n borders.left = isNullOrUndefined(this.left) ? undefined : this.left.cloneFormat();\n borders.right = isNullOrUndefined(this.right) ? undefined : this.right.cloneFormat();\n borders.horizontal = isNullOrUndefined(this.horizontal) ? undefined : this.horizontal.cloneFormat();\n borders.vertical = isNullOrUndefined(this.vertical) ? undefined : this.vertical.cloneFormat();\n borders.diagonalUp = isNullOrUndefined(this.diagonalUp) ? undefined : this.diagonalUp.cloneFormat();\n borders.diagonalDown = isNullOrUndefined(this.diagonalDown) ? undefined : this.diagonalDown.cloneFormat();\n return borders;\n };\n WBorders.prototype.copyFormat = function (borders) {\n if (!isNullOrUndefined(borders.left) && borders.left instanceof WBorder) {\n this.left = new WBorder(this);\n this.left.copyFormat(borders.left);\n }\n if (!isNullOrUndefined(borders.right) && borders.right instanceof WBorder) {\n this.right = new WBorder(this);\n this.right.copyFormat(borders.right);\n }\n if (!isNullOrUndefined(borders.top) && borders.top instanceof WBorder) {\n this.top = new WBorder(this);\n this.top.copyFormat(borders.top);\n }\n if (!isNullOrUndefined(borders.bottom) && borders.bottom instanceof WBorder) {\n this.bottom = new WBorder(this);\n this.bottom.copyFormat(borders.bottom);\n }\n if (!isNullOrUndefined(borders.horizontal) && borders.horizontal instanceof WBorder) {\n this.horizontal = new WBorder(this);\n this.horizontal.copyFormat(borders.horizontal);\n }\n if (!isNullOrUndefined(borders.vertical) && borders.vertical instanceof WBorder) {\n this.vertical = new WBorder(this);\n this.vertical.copyFormat(borders.vertical);\n }\n if (!isNullOrUndefined(borders.diagonalDown) && borders.diagonalDown instanceof WBorder) {\n this.diagonalDown = new WBorder(this);\n this.diagonalDown.copyFormat(borders.diagonalDown);\n }\n if (!isNullOrUndefined(borders.diagonalUp) && borders.diagonalUp instanceof WBorder) {\n this.diagonalUp = new WBorder(this);\n this.diagonalUp.copyFormat(borders.diagonalUp);\n }\n };\n return WBorders;\n}());\nexport { WBorders };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { WUniqueFormat } from '../../base/unique-format';\nimport { WUniqueFormats } from '../../base/unique-formats';\nimport { Dictionary } from '../../base/dictionary';\n/**\n * @private\n */\nvar WShading = /** @class */ (function () {\n function WShading(node) {\n this.uniqueShadingFormat = undefined;\n this.ownerBase = undefined;\n this.ownerBase = node;\n }\n Object.defineProperty(WShading.prototype, \"backgroundColor\", {\n get: function () {\n return this.getPropertyValue('backgroundColor');\n },\n set: function (value) {\n this.setPropertyValue('backgroundColor', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WShading.prototype, \"foregroundColor\", {\n get: function () {\n return this.getPropertyValue('foregroundColor');\n },\n set: function (value) {\n this.setPropertyValue('foregroundColor', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WShading.prototype, \"textureStyle\", {\n get: function () {\n return this.getPropertyValue('textureStyle');\n },\n set: function (value) {\n this.setPropertyValue('textureStyle', value);\n },\n enumerable: true,\n configurable: true\n });\n WShading.prototype.getPropertyValue = function (property) {\n var hasValue = this.hasValue(property);\n if (hasValue) {\n var propertyType = WUniqueFormat.getPropertyType(WShading.uniqueFormatType, property);\n if (!isNullOrUndefined(this.uniqueShadingFormat) && this.uniqueShadingFormat.propertiesHash.containsKey(propertyType)) {\n return this.uniqueShadingFormat.propertiesHash.get(propertyType);\n }\n }\n return WShading.getPropertyDefaultValue(property);\n };\n WShading.prototype.setPropertyValue = function (property, value) {\n if (isNullOrUndefined(value) || value === '') {\n value = WShading.getPropertyDefaultValue(property);\n }\n if (isNullOrUndefined(this.uniqueShadingFormat)) {\n this.initializeUniqueShading(property, value);\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueShadingFormat.uniqueFormatType, property);\n if (this.uniqueShadingFormat.propertiesHash.containsKey(propertyType) &&\n this.uniqueShadingFormat.propertiesHash.get(propertyType) === value) {\n //Do nothing, since no change in property value and return\n return;\n }\n this.uniqueShadingFormat = WShading.uniqueShadingFormats.updateUniqueFormat(this.uniqueShadingFormat, property, value);\n }\n };\n WShading.getPropertyDefaultValue = function (property) {\n var value = undefined;\n switch (property) {\n case 'backgroundColor':\n value = '#ffffff';\n break;\n case 'foregroundColor':\n value = 'empty';\n break;\n case 'textureStyle':\n value = 'TextureNone';\n break;\n }\n return value;\n };\n WShading.prototype.initializeUniqueShading = function (property, propValue) {\n var uniqueShadingTemp = new Dictionary();\n this.addUniqueShading('backgroundColor', property, propValue, uniqueShadingTemp);\n this.addUniqueShading('foregroundColor', property, propValue, uniqueShadingTemp);\n this.addUniqueShading('textureStyle', property, propValue, uniqueShadingTemp);\n // tslint:disable-next-line:max-line-length \n this.uniqueShadingFormat = WShading.uniqueShadingFormats.addUniqueFormat(uniqueShadingTemp, WShading.uniqueFormatType);\n };\n // tslint:disable-next-line:max-line-length\n WShading.prototype.addUniqueShading = function (property, modifiedProperty, propValue, uniqueShadingTemp) {\n var propertyType;\n propertyType = WUniqueFormat.getPropertyType(WShading.uniqueFormatType, property);\n if (property === modifiedProperty) {\n uniqueShadingTemp.add(propertyType, propValue);\n }\n else {\n uniqueShadingTemp.add(propertyType, WShading.getPropertyDefaultValue(property));\n }\n };\n WShading.prototype.destroy = function () {\n if (!isNullOrUndefined(this.uniqueShadingFormat)) {\n WShading.uniqueShadingFormats.remove(this.uniqueShadingFormat);\n }\n this.uniqueShadingFormat = undefined;\n };\n WShading.prototype.cloneFormat = function () {\n var shading = new WShading(undefined);\n shading.backgroundColor = this.backgroundColor;\n shading.foregroundColor = this.foregroundColor;\n shading.textureStyle = this.textureStyle;\n return shading;\n };\n WShading.prototype.copyFormat = function (shading) {\n if (!isNullOrUndefined(shading) && !isNullOrUndefined(shading.uniqueShadingFormat)) {\n this.backgroundColor = shading.backgroundColor;\n this.foregroundColor = shading.foregroundColor;\n this.textureStyle = shading.textureStyle;\n }\n };\n WShading.prototype.hasValue = function (property) {\n if (!isNullOrUndefined(this.uniqueShadingFormat)) {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueShadingFormat.uniqueFormatType, property);\n return this.uniqueShadingFormat.propertiesHash.containsKey(propertyType);\n }\n return false;\n };\n WShading.clear = function () {\n this.uniqueShadingFormats.clear();\n };\n WShading.uniqueShadingFormats = new WUniqueFormats();\n WShading.uniqueFormatType = 5;\n return WShading;\n}());\nexport { WShading };\n","import { Dictionary } from '../../base/dictionary';\nimport { WUniqueFormat } from '../../base/unique-format';\nimport { WUniqueFormats } from '../../base/unique-formats';\nimport { WBorders } from './borders';\nimport { WShading } from './shading';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar WTableFormat = /** @class */ (function () {\n function WTableFormat(owner) {\n this.uniqueTableFormat = undefined;\n this.borders = new WBorders(this);\n this.shading = new WShading(this);\n this.ownerBase = undefined;\n this.ownerBase = owner;\n this.assignTableMarginValue(5.4, 0, 5.4, 0);\n }\n Object.defineProperty(WTableFormat.prototype, \"cellSpacing\", {\n get: function () {\n return this.getPropertyValue('cellSpacing');\n },\n set: function (value) {\n if (value < 0 || value > 264.6) {\n throw new RangeError('The measurement must be between 0 px and 264.6 px.');\n }\n this.setPropertyValue('cellSpacing', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"leftMargin\", {\n get: function () {\n return this.getPropertyValue('leftMargin');\n },\n set: function (value) {\n this.setPropertyValue('leftMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"topMargin\", {\n get: function () {\n return this.getPropertyValue('topMargin');\n },\n set: function (value) {\n this.setPropertyValue('topMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"rightMargin\", {\n get: function () {\n return this.getPropertyValue('rightMargin');\n },\n set: function (value) {\n this.setPropertyValue('rightMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"bottomMargin\", {\n get: function () {\n return this.getPropertyValue('bottomMargin');\n },\n set: function (value) {\n this.setPropertyValue('bottomMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"leftIndent\", {\n get: function () {\n return this.getPropertyValue('leftIndent');\n },\n set: function (value) {\n if (value < -1440 || value > 1440) {\n throw new RangeError('The measurement must be between -1440 px and 1440 px.');\n }\n this.setPropertyValue('leftIndent', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"tableAlignment\", {\n get: function () {\n return this.getPropertyValue('tableAlignment');\n },\n set: function (value) {\n this.setPropertyValue('tableAlignment', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"preferredWidth\", {\n get: function () {\n return this.getPropertyValue('preferredWidth');\n },\n set: function (value) {\n this.setPropertyValue('preferredWidth', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"preferredWidthType\", {\n get: function () {\n return this.getPropertyValue('preferredWidthType');\n },\n set: function (value) {\n this.setPropertyValue('preferredWidthType', value);\n },\n enumerable: true,\n configurable: true\n });\n WTableFormat.prototype.getPropertyValue = function (property) {\n var hasValue = this.hasValue(property);\n if (hasValue) {\n var propertyType = WUniqueFormat.getPropertyType(WTableFormat.uniqueFormatType, property);\n if (!isNullOrUndefined(this.uniqueTableFormat) && this.uniqueTableFormat.propertiesHash.containsKey(propertyType)) {\n return this.uniqueTableFormat.propertiesHash.get(propertyType);\n }\n }\n return WTableFormat.getPropertyDefaultValue(property);\n };\n WTableFormat.prototype.setPropertyValue = function (property, value) {\n if (isNullOrUndefined(value) || value === '') {\n value = WTableFormat.getPropertyDefaultValue(property);\n }\n if (isNullOrUndefined(this.uniqueTableFormat)) {\n this.initializeUniqueTableFormat(property, value);\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueTableFormat.uniqueFormatType, property);\n if (this.uniqueTableFormat.propertiesHash.containsKey(propertyType) &&\n this.uniqueTableFormat.propertiesHash.get(propertyType) === value) {\n //Do nothing, since no change in property value and return\n return;\n }\n this.uniqueTableFormat = WTableFormat.uniqueTableFormats.updateUniqueFormat(this.uniqueTableFormat, property, value);\n }\n };\n WTableFormat.prototype.initializeUniqueTableFormat = function (property, propValue) {\n var uniqueTableFormatTemp = new Dictionary();\n this.addUniqueTableFormat('cellSpacing', property, propValue, uniqueTableFormatTemp);\n this.addUniqueTableFormat('leftMargin', property, propValue, uniqueTableFormatTemp);\n this.addUniqueTableFormat('topMargin', property, propValue, uniqueTableFormatTemp);\n this.addUniqueTableFormat('bottomMargin', property, propValue, uniqueTableFormatTemp);\n this.addUniqueTableFormat('rightMargin', property, propValue, uniqueTableFormatTemp);\n this.addUniqueTableFormat('leftIndent', property, propValue, uniqueTableFormatTemp);\n this.addUniqueTableFormat('tableAlignment', property, propValue, uniqueTableFormatTemp);\n this.addUniqueTableFormat('preferredWidth', property, propValue, uniqueTableFormatTemp);\n this.addUniqueTableFormat('preferredWidthType', property, propValue, uniqueTableFormatTemp);\n this.uniqueTableFormat = WTableFormat.uniqueTableFormats.addUniqueFormat(uniqueTableFormatTemp, WTableFormat.uniqueFormatType);\n };\n // tslint:disable-next-line:max-line-length\n WTableFormat.prototype.addUniqueTableFormat = function (property, modifiedProperty, propValue, uniqueTableFormatTemp) {\n var propertyType;\n propertyType = WUniqueFormat.getPropertyType(WTableFormat.uniqueFormatType, property);\n if (property === modifiedProperty) {\n uniqueTableFormatTemp.add(propertyType, propValue);\n }\n };\n WTableFormat.getPropertyDefaultValue = function (property) {\n var value = undefined;\n switch (property) {\n case 'cellSpacing':\n value = 0;\n break;\n case 'leftMargin':\n value = 5.4;\n break;\n case 'topMargin':\n value = 0;\n break;\n case 'bottomMargin':\n value = 0;\n break;\n case 'rightMargin':\n value = 5.4;\n break;\n case 'leftIndent':\n value = 0;\n break;\n case 'tableAlignment':\n value = 'Left';\n break;\n case 'preferredWidth':\n value = 0;\n break;\n case 'preferredWidthType':\n value = 'Point';\n break;\n }\n return value;\n };\n WTableFormat.prototype.assignTableMarginValue = function (left, top, right, bottom) {\n this.leftMargin = left;\n this.topMargin = top;\n this.rightMargin = right;\n this.bottomMargin = bottom;\n };\n WTableFormat.prototype.initializeTableBorders = function () {\n this.borders.left.lineStyle = 'Single';\n this.borders.left.lineWidth = 0.5;\n this.borders.right.lineStyle = 'Single';\n this.borders.right.lineWidth = 0.5;\n this.borders.top.lineStyle = 'Single';\n this.borders.top.lineWidth = 0.5;\n this.borders.bottom.lineStyle = 'Single';\n this.borders.bottom.lineWidth = 0.5;\n this.borders.horizontal.lineStyle = 'Single';\n this.borders.horizontal.lineWidth = 0.5;\n this.borders.vertical.lineStyle = 'Single';\n this.borders.vertical.lineWidth = 0.5;\n };\n WTableFormat.prototype.destroy = function () {\n if (!isNullOrUndefined(this.borders)) {\n this.borders.destroy();\n }\n if (!isNullOrUndefined(this.shading)) {\n this.shading.destroy();\n }\n if (!isNullOrUndefined(this.uniqueTableFormat)) {\n WTableFormat.uniqueTableFormats.remove(this.uniqueTableFormat);\n }\n this.uniqueTableFormat = undefined;\n this.borders = undefined;\n this.shading = undefined;\n };\n WTableFormat.prototype.cloneFormat = function () {\n var tableFormat = new WTableFormat(undefined);\n tableFormat.leftIndent = this.leftIndent;\n tableFormat.tableAlignment = this.tableAlignment;\n tableFormat.cellSpacing = this.cellSpacing;\n tableFormat.leftMargin = this.leftMargin;\n tableFormat.rightMargin = this.rightMargin;\n tableFormat.topMargin = this.topMargin;\n tableFormat.bottomMargin = this.bottomMargin;\n tableFormat.preferredWidth = this.preferredWidth;\n tableFormat.preferredWidthType = this.preferredWidthType;\n tableFormat.borders = isNullOrUndefined(this.borders) ? undefined : this.borders.cloneFormat();\n tableFormat.shading = isNullOrUndefined(this.shading) ? undefined : this.shading.cloneFormat();\n return tableFormat;\n };\n WTableFormat.prototype.hasValue = function (property) {\n if (!isNullOrUndefined(this.uniqueTableFormat)) {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueTableFormat.uniqueFormatType, property);\n return this.uniqueTableFormat.propertiesHash.containsKey(propertyType);\n }\n return false;\n };\n WTableFormat.prototype.copyFormat = function (format) {\n if (!isNullOrUndefined(format)) {\n if (!isNullOrUndefined(format.uniqueTableFormat)) {\n this.cellSpacing = format.cellSpacing;\n this.leftMargin = format.leftMargin;\n this.topMargin = format.topMargin;\n this.rightMargin = format.rightMargin;\n this.bottomMargin = format.bottomMargin;\n this.leftIndent = format.leftIndent;\n this.tableAlignment = format.tableAlignment;\n this.preferredWidth = format.preferredWidth;\n this.preferredWidthType = format.preferredWidthType;\n }\n if (!isNullOrUndefined(format.borders)) {\n this.borders = new WBorders(this);\n this.borders.copyFormat(format.borders);\n }\n if (!isNullOrUndefined(format.shading)) {\n this.shading = new WShading(this);\n this.shading.copyFormat(format.shading);\n }\n }\n };\n WTableFormat.clear = function () {\n this.uniqueTableFormats.clear();\n };\n WTableFormat.uniqueTableFormats = new WUniqueFormats();\n WTableFormat.uniqueFormatType = 8;\n return WTableFormat;\n}());\nexport { WTableFormat };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Dictionary } from '../../base/dictionary';\nimport { WUniqueFormat } from '../../base/unique-format';\nimport { WUniqueFormats } from '../../base/unique-formats';\nimport { WBorders } from './borders';\n/**\n * @private\n */\nvar WRowFormat = /** @class */ (function () {\n function WRowFormat(node) {\n this.uniqueRowFormat = undefined;\n /**\n * @private\n */\n this.borders = new WBorders(this);\n /**\n * @private\n */\n this.ownerBase = undefined;\n /**\n * @private\n */\n this.beforeWidth = 0;\n /**\n * @private\n */\n this.afterWidth = 0;\n this.ownerBase = node;\n }\n Object.defineProperty(WRowFormat.prototype, \"gridBefore\", {\n get: function () {\n return this.getPropertyValue('gridBefore');\n },\n set: function (value) {\n this.setPropertyValue('gridBefore', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"gridBeforeWidth\", {\n get: function () {\n return this.getPropertyValue('gridBeforeWidth');\n },\n set: function (value) {\n this.setPropertyValue('gridBeforeWidth', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"gridBeforeWidthType\", {\n get: function () {\n return this.getPropertyValue('gridBeforeWidthType');\n },\n set: function (value) {\n this.setPropertyValue('gridBeforeWidthType', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"gridAfter\", {\n get: function () {\n return this.getPropertyValue('gridAfter');\n },\n set: function (value) {\n this.setPropertyValue('gridAfter', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"gridAfterWidth\", {\n get: function () {\n return this.getPropertyValue('gridAfterWidth');\n },\n set: function (value) {\n this.setPropertyValue('gridAfterWidth', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"gridAfterWidthType\", {\n get: function () {\n return this.getPropertyValue('gridAfterWidthType');\n },\n set: function (value) {\n this.setPropertyValue('gridAfterWidthType', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"allowBreakAcrossPages\", {\n get: function () {\n return this.getPropertyValue('allowBreakAcrossPages');\n },\n set: function (value) {\n this.setPropertyValue('allowBreakAcrossPages', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"isHeader\", {\n get: function () {\n return this.getPropertyValue('isHeader');\n },\n set: function (value) {\n this.setPropertyValue('isHeader', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"height\", {\n get: function () {\n return this.getPropertyValue('height');\n },\n set: function (value) {\n if (value === 0 && (this.heightType === 'AtLeast' || this.heightType === 'Exactly')) {\n value = 1;\n }\n else if (this.heightType === 'Auto') {\n value = 0;\n }\n this.setPropertyValue('height', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"heightType\", {\n get: function () {\n return this.getPropertyValue('heightType');\n },\n set: function (value) {\n if (value === 'AtLeast' || value === 'Exactly') {\n this.height = 1;\n }\n else {\n this.height = 0;\n }\n this.setPropertyValue('heightType', value);\n },\n enumerable: true,\n configurable: true\n });\n WRowFormat.prototype.getPropertyValue = function (property) {\n var hasValue = this.hasValue(property);\n if (hasValue) {\n var propertyType = WUniqueFormat.getPropertyType(WRowFormat.uniqueFormatType, property);\n if (!isNullOrUndefined(this.uniqueRowFormat) && this.uniqueRowFormat.propertiesHash.containsKey(propertyType)) {\n return this.uniqueRowFormat.propertiesHash.get(propertyType);\n }\n }\n return WRowFormat.getPropertyDefaultValue(property);\n };\n WRowFormat.prototype.setPropertyValue = function (property, value) {\n if (isNullOrUndefined(value) || value === '') {\n value = WRowFormat.getPropertyDefaultValue(property);\n }\n if (isNullOrUndefined(this.uniqueRowFormat)) {\n this.initializeUniqueRowFormat(property, value);\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueRowFormat.uniqueFormatType, property);\n if (this.uniqueRowFormat.propertiesHash.containsKey(propertyType) &&\n this.uniqueRowFormat.propertiesHash.get(propertyType) === value) {\n //Do nothing, since no change in property value and return\n return;\n }\n this.uniqueRowFormat = WRowFormat.uniqueRowFormats.updateUniqueFormat(this.uniqueRowFormat, property, value);\n }\n };\n WRowFormat.prototype.initializeUniqueRowFormat = function (property, propValue) {\n var uniqueRowFormatTemp = new Dictionary();\n this.addUniqueRowFormat('allowBreakAcrossPages', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('isHeader', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('height', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('heightType', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('gridBefore', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('gridBeforeWidth', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('gridBeforeWidthType', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('gridAfter', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('gridAfterWidth', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('gridgridAfterWidth', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('gridBeforeWidthType', property, propValue, uniqueRowFormatTemp);\n this.uniqueRowFormat = WRowFormat.uniqueRowFormats.addUniqueFormat(uniqueRowFormatTemp, WRowFormat.uniqueFormatType);\n };\n // tslint:disable-next-line:max-line-length\n WRowFormat.prototype.addUniqueRowFormat = function (property, modifiedProperty, propValue, uniqueRowFormatTemp) {\n var propertyType;\n propertyType = WUniqueFormat.getPropertyType(WRowFormat.uniqueFormatType, property);\n if (property === modifiedProperty) {\n uniqueRowFormatTemp.add(propertyType, propValue);\n }\n };\n WRowFormat.getPropertyDefaultValue = function (property) {\n var value = undefined;\n switch (property) {\n case 'allowBreakAcrossPages':\n value = true;\n break;\n case 'isHeader':\n value = false;\n break;\n case 'height':\n value = 0;\n break;\n case 'heightType':\n value = 'Auto';\n break;\n case 'gridBefore':\n value = 0;\n break;\n case 'gridBeforeWidth':\n value = 0;\n break;\n case 'gridBeforeWidthType':\n value = 'Point';\n break;\n case 'gridAfter':\n value = 0;\n break;\n case 'gridAfterWidth':\n value = 0;\n break;\n case 'gridAfterWidthType':\n value = 'Point';\n break;\n }\n return value;\n };\n WRowFormat.prototype.cloneFormat = function () {\n var format = new WRowFormat();\n format.allowBreakAcrossPages = this.allowBreakAcrossPages;\n format.heightType = this.heightType;\n format.height = this.height;\n format.isHeader = this.isHeader;\n format.gridBefore = this.gridBefore;\n format.gridBeforeWidth = this.gridBeforeWidth;\n format.gridBeforeWidthType = this.gridBeforeWidthType;\n format.gridAfter = this.gridAfter;\n format.gridAfterWidth = this.gridAfterWidth;\n format.gridAfterWidthType = this.gridAfterWidthType;\n return format;\n };\n WRowFormat.prototype.hasValue = function (property) {\n if (!isNullOrUndefined(this.uniqueRowFormat)) {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueRowFormat.uniqueFormatType, property);\n return this.uniqueRowFormat.propertiesHash.containsKey(propertyType);\n }\n return false;\n };\n WRowFormat.prototype.copyFormat = function (format) {\n if (!isNullOrUndefined(format)) {\n if (!isNullOrUndefined(format.uniqueRowFormat)) {\n this.allowBreakAcrossPages = format.allowBreakAcrossPages;\n this.isHeader = format.isHeader;\n this.heightType = format.heightType;\n this.height = format.height;\n this.gridBefore = format.gridBefore;\n this.gridBeforeWidth = format.gridBeforeWidth;\n this.gridBeforeWidthType = format.gridBeforeWidthType;\n this.gridAfter = format.gridAfter;\n this.gridAfterWidth = format.gridAfterWidth;\n this.gridAfterWidthType = format.gridAfterWidthType;\n }\n if (!isNullOrUndefined(format.borders)) {\n this.borders = new WBorders(this);\n this.borders.ownerBase = format;\n this.borders.copyFormat(format.borders);\n }\n }\n };\n WRowFormat.prototype.destroy = function () {\n if (!isNullOrUndefined(this.borders)) {\n this.borders.destroy();\n }\n if (!isNullOrUndefined(this.uniqueRowFormat)) {\n WRowFormat.uniqueRowFormats.remove(this.uniqueRowFormat);\n }\n this.beforeWidth = undefined;\n this.afterWidth = undefined;\n this.borders = undefined;\n this.uniqueRowFormat = undefined;\n };\n WRowFormat.clear = function () {\n this.uniqueRowFormats.clear();\n };\n WRowFormat.uniqueRowFormats = new WUniqueFormats();\n WRowFormat.uniqueFormatType = 6;\n return WRowFormat;\n}());\nexport { WRowFormat };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Dictionary } from '../../base/dictionary';\nimport { WUniqueFormat } from '../../base/unique-format';\nimport { WUniqueFormats } from '../../base/unique-formats';\nimport { WBorders } from './borders';\nimport { WShading } from './shading';\n/**\n * @private\n */\nvar WCellFormat = /** @class */ (function () {\n function WCellFormat(node) {\n this.uniqueCellFormat = undefined;\n this.borders = new WBorders(this);\n this.shading = new WShading(this);\n this.ownerBase = node;\n this.borders = new WBorders(this);\n this.shading = new WShading(this);\n }\n Object.defineProperty(WCellFormat.prototype, \"leftMargin\", {\n get: function () {\n return this.getPropertyValue('leftMargin');\n },\n set: function (value) {\n this.setPropertyValue('leftMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCellFormat.prototype, \"rightMargin\", {\n get: function () {\n return this.getPropertyValue('rightMargin');\n },\n set: function (value) {\n this.setPropertyValue('rightMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCellFormat.prototype, \"topMargin\", {\n get: function () {\n return this.getPropertyValue('topMargin');\n },\n set: function (value) {\n this.setPropertyValue('topMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCellFormat.prototype, \"bottomMargin\", {\n get: function () {\n return this.getPropertyValue('bottomMargin');\n },\n set: function (value) {\n this.setPropertyValue('bottomMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCellFormat.prototype, \"cellWidth\", {\n get: function () {\n return this.getPropertyValue('cellWidth');\n },\n set: function (value) {\n this.setPropertyValue('cellWidth', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCellFormat.prototype, \"columnSpan\", {\n get: function () {\n return this.getPropertyValue('columnSpan');\n },\n set: function (value) {\n this.setPropertyValue('columnSpan', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCellFormat.prototype, \"rowSpan\", {\n get: function () {\n return this.getPropertyValue('rowSpan');\n },\n set: function (value) {\n this.setPropertyValue('rowSpan', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCellFormat.prototype, \"preferredWidth\", {\n get: function () {\n return this.getPropertyValue('preferredWidth');\n },\n set: function (value) {\n this.setPropertyValue('preferredWidth', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCellFormat.prototype, \"verticalAlignment\", {\n get: function () {\n return this.getPropertyValue('verticalAlignment');\n },\n set: function (value) {\n this.setPropertyValue('verticalAlignment', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCellFormat.prototype, \"preferredWidthType\", {\n get: function () {\n return this.getPropertyValue('preferredWidthType');\n },\n set: function (value) {\n this.setPropertyValue('preferredWidthType', value);\n },\n enumerable: true,\n configurable: true\n });\n WCellFormat.prototype.getPropertyValue = function (property) {\n var hasValue = this.hasValue(property);\n if (hasValue) {\n var propertyType = WUniqueFormat.getPropertyType(WCellFormat.uniqueFormatType, property);\n if (!isNullOrUndefined(this.uniqueCellFormat) && this.uniqueCellFormat.propertiesHash.containsKey(propertyType)) {\n return this.uniqueCellFormat.propertiesHash.get(propertyType);\n }\n }\n return WCellFormat.getPropertyDefaultValue(property);\n };\n WCellFormat.prototype.setPropertyValue = function (property, value) {\n if (isNullOrUndefined(value) || value === '') {\n value = WCellFormat.getPropertyDefaultValue(property);\n }\n if (isNullOrUndefined(this.uniqueCellFormat)) {\n this.initializeUniqueCellFormat(property, value);\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueCellFormat.uniqueFormatType, property);\n if (this.uniqueCellFormat.propertiesHash.containsKey(propertyType) &&\n this.uniqueCellFormat.propertiesHash.get(propertyType) === value) {\n //Do nothing, since no change in property value and return\n return;\n }\n this.uniqueCellFormat = WCellFormat.uniqueCellFormats.updateUniqueFormat(this.uniqueCellFormat, property, value);\n }\n };\n WCellFormat.prototype.initializeUniqueCellFormat = function (property, propValue) {\n var uniqueCellFormatTemp = new Dictionary();\n this.addUniqueCellFormat('leftMargin', property, propValue, uniqueCellFormatTemp);\n this.addUniqueCellFormat('topMargin', property, propValue, uniqueCellFormatTemp);\n this.addUniqueCellFormat('bottomMargin', property, propValue, uniqueCellFormatTemp);\n this.addUniqueCellFormat('rightMargin', property, propValue, uniqueCellFormatTemp);\n this.addUniqueCellFormat('cellWidth', property, propValue, uniqueCellFormatTemp);\n this.addUniqueCellFormat('columnSpan', property, propValue, uniqueCellFormatTemp);\n this.addUniqueCellFormat('rowSpan', property, propValue, uniqueCellFormatTemp);\n this.addUniqueCellFormat('preferredWidth', property, propValue, uniqueCellFormatTemp);\n this.addUniqueCellFormat('verticalAlignment', property, propValue, uniqueCellFormatTemp);\n this.addUniqueCellFormat('preferredWidthType', property, propValue, uniqueCellFormatTemp);\n this.uniqueCellFormat = WCellFormat.uniqueCellFormats.addUniqueFormat(uniqueCellFormatTemp, WCellFormat.uniqueFormatType);\n };\n // tslint:disable-next-line:max-line-length\n WCellFormat.prototype.addUniqueCellFormat = function (property, modifiedProperty, propValue, uniqueCellFormatTemp) {\n var propertyType;\n propertyType = WUniqueFormat.getPropertyType(WCellFormat.uniqueFormatType, property);\n if (property === modifiedProperty) {\n uniqueCellFormatTemp.add(propertyType, propValue);\n }\n };\n WCellFormat.getPropertyDefaultValue = function (property) {\n var value = undefined;\n switch (property) {\n case 'leftMargin':\n value = undefined;\n break;\n case 'topMargin':\n value = undefined;\n break;\n case 'bottomMargin':\n value = undefined;\n break;\n case 'rightMargin':\n value = undefined;\n break;\n case 'cellWidth':\n value = 0;\n break;\n case 'columnSpan':\n value = 1;\n break;\n case 'rowSpan':\n value = 1;\n break;\n case 'preferredWidth':\n value = 0;\n break;\n case 'verticalAlignment':\n value = 'Top';\n break;\n case 'preferredWidthType':\n value = 'Point';\n break;\n }\n return value;\n };\n WCellFormat.prototype.containsMargins = function () {\n return (!isNullOrUndefined(this.leftMargin)\n || !isNullOrUndefined(this.rightMargin)\n || !isNullOrUndefined(this.bottomMargin)\n || !isNullOrUndefined(this.topMargin));\n };\n WCellFormat.prototype.destroy = function () {\n if (!isNullOrUndefined(this.borders)) {\n this.borders.destroy();\n }\n if (!isNullOrUndefined(this.shading)) {\n this.shading.destroy();\n }\n if (!isNullOrUndefined(this.uniqueCellFormat)) {\n WCellFormat.uniqueCellFormats.remove(this.uniqueCellFormat);\n }\n this.uniqueCellFormat = undefined;\n this.borders = undefined;\n this.shading = undefined;\n };\n WCellFormat.prototype.cloneFormat = function () {\n var format = new WCellFormat(undefined);\n format.verticalAlignment = this.verticalAlignment;\n format.leftMargin = this.leftMargin;\n format.rightMargin = this.rightMargin;\n format.topMargin = this.topMargin;\n format.bottomMargin = this.bottomMargin;\n format.preferredWidth = this.preferredWidth;\n format.preferredWidthType = this.preferredWidthType;\n format.cellWidth = this.cellWidth;\n format.borders = isNullOrUndefined(this.borders) ? undefined : this.borders.cloneFormat();\n format.shading = isNullOrUndefined(this.shading) ? undefined : this.shading.cloneFormat();\n return format;\n };\n WCellFormat.prototype.hasValue = function (property) {\n if (!isNullOrUndefined(this.uniqueCellFormat)) {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueCellFormat.uniqueFormatType, property);\n return this.uniqueCellFormat.propertiesHash.containsKey(propertyType);\n }\n return false;\n };\n WCellFormat.prototype.copyFormat = function (format) {\n if (!isNullOrUndefined(format)) {\n if (!isNullOrUndefined(format.uniqueCellFormat)) {\n this.cellWidth = format.cellWidth;\n this.leftMargin = format.leftMargin;\n this.topMargin = format.topMargin;\n this.rightMargin = format.rightMargin;\n this.bottomMargin = format.bottomMargin;\n this.preferredWidth = format.preferredWidth;\n this.columnSpan = format.columnSpan;\n this.rowSpan = format.rowSpan;\n this.preferredWidthType = format.preferredWidthType;\n this.verticalAlignment = format.verticalAlignment;\n }\n if (!isNullOrUndefined(format.shading)) {\n this.shading = new WShading(this);\n this.shading.copyFormat(format.shading);\n }\n if (!isNullOrUndefined(format.borders)) {\n this.borders = new WBorders(this);\n this.borders.copyFormat(format.borders);\n }\n }\n };\n WCellFormat.clear = function () {\n this.uniqueCellFormats.clear();\n };\n WCellFormat.uniqueCellFormats = new WUniqueFormats();\n WCellFormat.uniqueFormatType = 4;\n return WCellFormat;\n}());\nexport { WCellFormat };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { WTableFormat, WRowFormat, WCellFormat } from '../format/index';\nimport { WParagraphFormat, WCharacterFormat, WBorder, WBorders } from '../format/index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Dictionary } from '../../base/dictionary';\nimport { HelperMethods } from '../editor/editor-helper';\n/**\n * @private\n */\nvar Rect = /** @class */ (function () {\n function Rect(x, y, width, height) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n Object.defineProperty(Rect.prototype, \"right\", {\n /**\n * @private\n */\n get: function () {\n return this.x + this.width;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rect.prototype, \"bottom\", {\n /**\n * @private\n */\n get: function () {\n return this.y + this.height;\n },\n enumerable: true,\n configurable: true\n });\n return Rect;\n}());\nexport { Rect };\n/**\n * @private\n */\nvar Margin = /** @class */ (function () {\n function Margin(leftMargin, topMargin, rightMargin, bottomMargin) {\n this.left = leftMargin;\n this.top = topMargin;\n this.right = rightMargin;\n this.bottom = bottomMargin;\n }\n /**\n * @private\n */\n Margin.prototype.clone = function () {\n return new Margin(this.left, this.top, this.right, this.bottom);\n };\n /**\n * @private\n */\n Margin.prototype.destroy = function () {\n this.left = undefined;\n this.right = undefined;\n this.top = undefined;\n this.bottom = undefined;\n };\n return Margin;\n}());\nexport { Margin };\n/**\n * @private\n */\nvar Widget = /** @class */ (function () {\n function Widget() {\n /**\n * @private\n */\n this.childWidgets = [];\n /**\n * @private\n */\n this.x = 0;\n /**\n * @private\n */\n this.y = 0;\n /**\n * @private\n */\n this.width = 0;\n /**\n * @private\n */\n this.height = 0;\n /**\n * @private\n */\n this.index = 0;\n }\n Object.defineProperty(Widget.prototype, \"indexInOwner\", {\n /**\n * @private\n */\n get: function () {\n if (this instanceof BodyWidget && this.page) {\n return this.page.bodyWidgets.indexOf(this);\n }\n else if (this.containerWidget && this.containerWidget.childWidgets) {\n return this.containerWidget.childWidgets.indexOf(this);\n }\n return -1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Widget.prototype, \"firstChild\", {\n /**\n * @private\n */\n get: function () {\n return this.childWidgets.length > 0 ? this.childWidgets[0] : undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Widget.prototype, \"lastChild\", {\n /**\n * @private\n */\n get: function () {\n return this.childWidgets.length > 0 ?\n this.childWidgets[this.childWidgets.length - 1] : undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Widget.prototype, \"previousWidget\", {\n /**\n * @private\n */\n get: function () {\n var widget = this;\n var index = this.indexInOwner;\n if (widget instanceof BodyWidget) {\n widget = index > 0 ? widget.page.bodyWidgets[index - 1] : undefined;\n }\n else {\n widget = index > 0 ? widget.containerWidget.childWidgets[index - 1] : undefined;\n }\n return widget;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Widget.prototype, \"nextWidget\", {\n /**\n * @private\n */\n get: function () {\n var widget = this;\n var index = this.indexInOwner;\n if (index === -1) {\n return undefined;\n }\n if (widget instanceof BodyWidget) {\n widget = index < widget.page.bodyWidgets.length - 1 ?\n widget.page.bodyWidgets[index + 1] : undefined;\n }\n else {\n widget = index < widget.containerWidget.childWidgets.length - 1 ?\n widget.containerWidget.childWidgets[index + 1] : undefined;\n }\n return widget;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Widget.prototype, \"previousRenderedWidget\", {\n /**\n * @private\n */\n get: function () {\n var widget = this;\n var index = this.indexInOwner;\n if (index < 0) {\n return undefined;\n }\n if (widget instanceof BodyWidget) {\n if (index > 0) {\n widget = widget.page.bodyWidgets[index - 1];\n }\n else {\n var page = widget.page.previousPage;\n widget = page && page.bodyWidgets.length > 0 ? page.bodyWidgets[page.bodyWidgets.length - 1] : undefined;\n }\n }\n else {\n if (index > 0) {\n widget = widget.containerWidget.childWidgets[index - 1];\n }\n else {\n var previousContainer = undefined;\n if (widget.containerWidget instanceof TableCellWidget) {\n previousContainer = widget.containerWidget.getPreviousSplitWidget();\n }\n else if (!(widget.containerWidget instanceof TableRowWidget\n || widget.containerWidget instanceof HeaderFooterWidget)) {\n // Since cells are lay outed left to right, we should not navigate to previous row.\n previousContainer = widget.containerWidget.previousRenderedWidget;\n }\n while (previousContainer && previousContainer.childWidgets.length === 0) {\n previousContainer = previousContainer.previousRenderedWidget;\n if (isNullOrUndefined(previousContainer)) {\n break;\n }\n }\n widget = previousContainer && previousContainer.constructor === widget.containerWidget.constructor ?\n previousContainer.lastChild : undefined;\n }\n }\n return widget;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Widget.prototype, \"nextRenderedWidget\", {\n /**\n * @private\n */\n get: function () {\n var widget = this;\n var index = this.indexInOwner;\n if (index < 0) {\n return undefined;\n }\n if (widget instanceof BodyWidget) {\n if (index < widget.page.bodyWidgets.length - 1) {\n widget = widget.page.bodyWidgets[index + 1];\n }\n else {\n var page = widget.page.nextPage;\n widget = page && page.bodyWidgets.length > 0 ? page.bodyWidgets[0] : undefined;\n }\n }\n else {\n if (index < widget.containerWidget.childWidgets.length - 1) {\n widget = widget.containerWidget.childWidgets[index + 1];\n }\n else {\n var nextContainer = undefined;\n if (widget.containerWidget instanceof TableCellWidget) {\n nextContainer = widget.containerWidget.getNextSplitWidget();\n }\n else if (!(widget.containerWidget instanceof TableRowWidget\n || widget.containerWidget instanceof HeaderFooterWidget)) {\n // Since cells are lay outed left to right, we should not navigate to next row.\n nextContainer = widget.containerWidget.nextRenderedWidget;\n }\n while (nextContainer && nextContainer.childWidgets.length === 0) {\n nextContainer = nextContainer.nextRenderedWidget;\n if (isNullOrUndefined(nextContainer)) {\n break;\n }\n }\n widget = nextContainer && nextContainer.constructor === widget.containerWidget.constructor ?\n nextContainer.firstChild : undefined;\n }\n }\n return widget;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Widget.prototype, \"previousSplitWidget\", {\n /**\n * @private\n */\n get: function () {\n var widget = this;\n if (widget instanceof TableCellWidget) {\n return widget.getPreviousSplitWidget();\n }\n else {\n var previous = widget.previousRenderedWidget;\n if (previous instanceof BlockWidget && widget.index === previous.index) {\n return previous;\n }\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Widget.prototype, \"nextSplitWidget\", {\n /**\n * @private\n */\n get: function () {\n var widget = this;\n if (widget instanceof TableCellWidget) {\n return widget.getNextSplitWidget();\n }\n else {\n var next = widget.nextRenderedWidget;\n if (next instanceof BlockWidget && widget.index === next.index) {\n return next;\n }\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n Widget.prototype.getPreviousSplitWidgets = function () {\n var widgets = [];\n var widget = this.previousSplitWidget;\n while (widget) {\n widgets.unshift(widget);\n widget = widget.previousSplitWidget;\n }\n return widgets;\n };\n /**\n * @private\n */\n Widget.prototype.getSplitWidgets = function () {\n var widgets = this.getPreviousSplitWidgets();\n var widget = this;\n while (widget) {\n widgets.push(widget);\n widget = widget.nextSplitWidget;\n }\n return widgets;\n };\n /**\n * @private\n */\n Widget.prototype.combineWidget = function (viewer) {\n var root = this;\n var widgets = this.getSplitWidgets();\n if (widgets.length > 1) {\n root = widgets.shift();\n while (widgets.length > 0) {\n var splitWidget = widgets.shift();\n root.combine(splitWidget, viewer);\n }\n }\n if (root instanceof TableWidget) {\n root.combineRows(viewer);\n }\n return root;\n };\n Widget.prototype.combine = function (widget, viewer) {\n if (widget.childWidgets.length > 0) {\n var lastChild = this.lastChild;\n if (lastChild instanceof TableWidget) {\n lastChild.combineWidget(viewer);\n }\n else {\n var firstChild = widget.firstChild;\n if (!(widget instanceof TableWidget) && lastChild instanceof Widget && firstChild instanceof Widget &&\n lastChild.index === firstChild.index) {\n lastChild.combine(widget.childWidgets.shift(), viewer);\n }\n }\n this.addWidgets(widget.childWidgets);\n widget.childWidgets = [];\n }\n widget.destroyInternal(viewer);\n };\n /**\n * @private\n */\n Widget.prototype.addWidgets = function (childWidgets) {\n while (childWidgets.length > 0) {\n var widget = childWidgets.shift();\n if (widget instanceof LineWidget && this instanceof ParagraphWidget) {\n widget.paragraph = this;\n this.height += widget.height;\n }\n else if (widget instanceof Widget) {\n var lastChild = this.lastChild;\n widget.containerWidget = this;\n widget.y = lastChild instanceof Widget ? lastChild.y + lastChild.height : this.y;\n this.height += widget.height;\n }\n this.childWidgets.push(widget);\n }\n };\n /**\n * @private\n */\n Widget.prototype.removeChild = function (index) {\n if (index > -1 && index < this.childWidgets.length) {\n this.childWidgets.splice(index, 1);\n }\n };\n /**\n * @private\n */\n Widget.prototype.destroy = function () {\n if (this.childWidgets) {\n while (this.childWidgets.length > 0) {\n var child = this.childWidgets.pop();\n if (child instanceof LineWidget || child instanceof Widget) {\n child.destroy();\n }\n }\n }\n this.childWidgets = undefined;\n if (this.containerWidget) {\n this.containerWidget.removeChild(this.indexInOwner);\n }\n this.containerWidget = undefined;\n // if (this.margin) {\n // this.margin.destroy();\n // }\n this.margin = undefined;\n this.x = undefined;\n this.y = undefined;\n this.width = undefined;\n this.height = undefined;\n this.index = undefined;\n };\n return Widget;\n}());\nexport { Widget };\n/**\n * @private\n */\nvar BlockContainer = /** @class */ (function (_super) {\n __extends(BlockContainer, _super);\n function BlockContainer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\n * @private\n */\n _this.sectionFormatIn = undefined;\n return _this;\n }\n Object.defineProperty(BlockContainer.prototype, \"sectionFormat\", {\n /**\n * @private\n */\n get: function () {\n var container = this;\n if (container instanceof BodyWidget) {\n return container.sectionFormatIn;\n }\n else if (container.page) {\n return container.page.bodyWidgets[0].sectionFormat;\n }\n return undefined;\n },\n /**\n * @private\n */\n set: function (value) {\n if (this instanceof BodyWidget) {\n this.sectionFormatIn = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n BlockContainer.prototype.getHierarchicalIndex = function (hierarchicalIndex) {\n var viewer = undefined;\n var node = this;\n if (node instanceof BodyWidget) {\n hierarchicalIndex = node.index + ';' + hierarchicalIndex;\n }\n else {\n if (node.headerFooterType.indexOf('Header') !== -1) {\n hierarchicalIndex = 'H' + ';' + hierarchicalIndex;\n }\n else {\n hierarchicalIndex = 'F' + ';' + hierarchicalIndex;\n }\n }\n if (!isNullOrUndefined(node.page)) {\n viewer = this.page.viewer;\n var pageIndex = viewer.pages.indexOf(this.page);\n return pageIndex + ';' + hierarchicalIndex;\n }\n return hierarchicalIndex;\n };\n return BlockContainer;\n}(Widget));\nexport { BlockContainer };\n/**\n * @private\n */\nvar BodyWidget = /** @class */ (function (_super) {\n __extends(BodyWidget, _super);\n /**\n * Initialize the constructor of BodyWidget\n */\n function BodyWidget() {\n return _super.call(this) || this;\n }\n /**\n * @private\n */\n BodyWidget.prototype.equals = function (widget) {\n return widget instanceof BodyWidget && widget.sectionFormat === this.sectionFormat;\n };\n /**\n * @private\n */\n BodyWidget.prototype.getHierarchicalIndex = function (hierarchicalIndex) {\n var viewer = undefined;\n var node = this;\n hierarchicalIndex = node.index + ';' + hierarchicalIndex;\n if (!isNullOrUndefined(node.page)) {\n viewer = this.page.viewer;\n var pageIndex = viewer.pages.indexOf(this.page);\n return pageIndex + ';' + hierarchicalIndex;\n }\n return hierarchicalIndex;\n };\n /**\n * @private\n */\n BodyWidget.prototype.getTableCellWidget = function (touchPoint) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n if (this.childWidgets[i].y <= touchPoint.y\n && (this.childWidgets[i].y + this.childWidgets[i].height) >= touchPoint.y) {\n return this.childWidgets[i].getTableCellWidget(touchPoint);\n }\n }\n var tableCellWidget = undefined;\n if (this.childWidgets.length > 0) {\n if (this.childWidgets[0].y <= touchPoint.y) {\n tableCellWidget = this.childWidgets[this.childWidgets.length - 1].getTableCellWidget(touchPoint);\n }\n else {\n tableCellWidget = this.childWidgets[0].getTableCellWidget(touchPoint);\n }\n }\n return tableCellWidget;\n };\n /**\n * @private\n */\n BodyWidget.prototype.destroyInternal = function (viewer) {\n var height = this.height;\n if (!isNullOrUndefined(this.childWidgets)) {\n for (var n = 0; n < this.childWidgets.length; n++) {\n var chilgWidget = this.childWidgets[n];\n if (chilgWidget instanceof ParagraphWidget) {\n chilgWidget.destroyInternal(viewer);\n }\n else {\n chilgWidget.destroyInternal(viewer);\n }\n if (isNullOrUndefined(this.childWidgets)) {\n break;\n }\n n--;\n }\n this.childWidgets = undefined;\n }\n // if (this instanceof HeaderFooterWidget && ((this as HeaderFooterWidget).currentNode ))) {\n // if (((this as HeaderFooterWidget).currentNode as WHeaderFooter).layoutedWidgets )) {\n // let index: number = ((this as HeaderFooterWidget).currentNode as WHeaderFooter).layoutedWidgets.indexOf(this);\n // ((this as HeaderFooterWidget).currentNode as WHeaderFooter).layoutedWidgets.splice(index, 1);\n // }\n // this.currentNode = undefined;\n /* tslint:disable: one-line */\n if (!isNullOrUndefined(this.page)) {\n var index = this.indexInOwner;\n if (this.indexInOwner > -1) {\n this.page.bodyWidgets.splice(index, 1);\n if (this.page.bodyWidgets.length === 0) {\n this.page.destroy();\n // }\n }\n else if ((this instanceof HeaderFooterWidget)\n && this.page.headerWidget === this) {\n this.page.headerWidget = undefined;\n }\n else if ((this instanceof HeaderFooterWidget)\n && this.page.footerWidget === this) {\n this.page.footerWidget = undefined;\n }\n this.page = undefined;\n }\n }\n this.destroy();\n };\n /**\n * @private\n */\n BodyWidget.prototype.destroy = function () {\n // if (this.sectionFormat) {\n // this.sectionFormat.destroy();\n // }\n this.sectionFormat = undefined;\n this.page = undefined;\n _super.prototype.destroy.call(this);\n };\n return BodyWidget;\n}(BlockContainer));\nexport { BodyWidget };\n/**\n * @private\n */\nvar HeaderFooterWidget = /** @class */ (function (_super) {\n __extends(HeaderFooterWidget, _super);\n function HeaderFooterWidget(type) {\n var _this = _super.call(this) || this;\n _this.headerFooterType = type;\n return _this;\n }\n /**\n * @private\n */\n HeaderFooterWidget.prototype.getTableCellWidget = function (point) {\n return undefined;\n };\n /**\n * @private\n */\n HeaderFooterWidget.prototype.equals = function (widget) {\n // Todo: Need to work\n return widget instanceof HeaderFooterWidget\n && widget.containerWidget === this.containerWidget;\n };\n /**\n * @private\n */\n HeaderFooterWidget.prototype.clone = function () {\n var headerFooter = new HeaderFooterWidget(this.headerFooterType);\n for (var i = 0; i < this.childWidgets.length; i++) {\n var block = this.childWidgets[i].clone();\n headerFooter.childWidgets.push(block);\n block.index = i;\n block.containerWidget = headerFooter;\n }\n headerFooter.x = this.x;\n headerFooter.y = this.y;\n headerFooter.height = 0;\n headerFooter.width = 0;\n return headerFooter;\n };\n /**\n * @private\n */\n HeaderFooterWidget.prototype.destroyInternal = function (viewer) {\n this.page = undefined;\n _super.prototype.destroy.call(this);\n };\n return HeaderFooterWidget;\n}(BlockContainer));\nexport { HeaderFooterWidget };\n/**\n * @private\n */\nvar BlockWidget = /** @class */ (function (_super) {\n __extends(BlockWidget, _super);\n function BlockWidget() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(BlockWidget.prototype, \"bodyWidget\", {\n /**\n * @private\n */\n get: function () {\n var widget = this;\n while (widget.containerWidget) {\n if (widget.containerWidget instanceof BlockContainer) {\n return widget.containerWidget;\n }\n widget = widget.containerWidget;\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BlockWidget.prototype, \"leftIndent\", {\n /**\n * @private\n */\n get: function () {\n var blockAdv = this;\n if (blockAdv instanceof ParagraphWidget && blockAdv.paragraphFormat instanceof WParagraphFormat) {\n return blockAdv.paragraphFormat.leftIndent;\n }\n else if (blockAdv instanceof TableWidget && blockAdv.tableFormat instanceof WTableFormat) {\n return blockAdv.tableFormat.leftIndent;\n }\n return 0;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BlockWidget.prototype, \"rightIndent\", {\n /**\n * @private\n */\n get: function () {\n var blockAdv = this;\n if (blockAdv instanceof ParagraphWidget && blockAdv.paragraphFormat instanceof WParagraphFormat) {\n return blockAdv.paragraphFormat.rightIndent;\n }\n return 0;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BlockWidget.prototype, \"isInsideTable\", {\n /**\n * @private\n */\n get: function () {\n return this.containerWidget instanceof TableCellWidget;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BlockWidget.prototype, \"isInHeaderFooter\", {\n /**\n * @private\n */\n get: function () {\n return this.bodyWidget instanceof HeaderFooterWidget;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BlockWidget.prototype, \"associatedCell\", {\n /**\n * @private\n */\n get: function () {\n if (this.containerWidget instanceof TableCellWidget) {\n return this.containerWidget;\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n BlockWidget.prototype.getHierarchicalIndex = function (hierarchicalIndex) {\n var node = this;\n hierarchicalIndex = node.containerWidget.childWidgets.indexOf(node) + ';' + hierarchicalIndex;\n if (!isNullOrUndefined(node.containerWidget)) {\n if (node.containerWidget instanceof BlockWidget) {\n return node.containerWidget.getHierarchicalIndex(hierarchicalIndex);\n }\n else if (node.containerWidget instanceof BlockContainer) {\n hierarchicalIndex = node.containerWidget.getHierarchicalIndex(hierarchicalIndex);\n }\n }\n return hierarchicalIndex;\n };\n /**\n * @private\n */\n BlockWidget.prototype.getIndex = function () {\n if (this instanceof ParagraphWidget || this instanceof TableWidget) {\n return this.containerWidget.childWidgets.indexOf(this);\n }\n else if (this instanceof TableRowWidget) {\n return this.ownerTable.childWidgets.indexOf(this);\n }\n else if (this instanceof TableCellWidget) {\n return this.ownerRow.childWidgets.indexOf(this);\n }\n return 0;\n };\n /**\n * @private\n */\n BlockWidget.prototype.getContainerWidth = function () {\n if (this.isInsideTable) {\n return this.associatedCell.cellFormat.cellWidth - (this.associatedCell.margin.left + this.associatedCell.margin.right);\n }\n else {\n var bodyWidget = this.bodyWidget;\n var sectionFormat = bodyWidget.sectionFormat;\n return sectionFormat.pageWidth - (sectionFormat.leftMargin + sectionFormat.rightMargin);\n }\n };\n return BlockWidget;\n}(Widget));\nexport { BlockWidget };\n/**\n * @private\n */\nvar ParagraphWidget = /** @class */ (function (_super) {\n __extends(ParagraphWidget, _super);\n /**\n * Initialize the constructor of ParagraphWidget\n */\n function ParagraphWidget() {\n var _this = _super.call(this) || this;\n _this.paragraphFormat = new WParagraphFormat(_this);\n _this.characterFormat = new WCharacterFormat(_this);\n return _this;\n }\n /**\n * @private\n */\n ParagraphWidget.prototype.equals = function (widget) {\n return widget instanceof ParagraphWidget && widget.paragraphFormat === this.paragraphFormat;\n };\n /**\n * @private\n */\n ParagraphWidget.prototype.isEmpty = function () {\n if (isNullOrUndefined(this.childWidgets) || this.childWidgets.length === 0) {\n return true;\n }\n for (var j = 0; j < this.childWidgets.length; j++) {\n var inlineElement = this.childWidgets[j];\n for (var i = 0; i < inlineElement.children.length; i++) {\n var inline = inlineElement.children[i];\n if (inline.length === 0) {\n continue;\n }\n if (inline instanceof TextElementBox || inline instanceof ImageElementBox || inline instanceof BookmarkElementBox\n || (inline instanceof FieldElementBox && HelperMethods.isLinkedFieldCharacter(inline))) {\n return false;\n }\n }\n }\n return true;\n };\n /**\n * @private\n */\n ParagraphWidget.prototype.getInline = function (offset, indexInInline) {\n var inline = undefined;\n var count = 0;\n var isStarted = false;\n var splittedWidget = this.getSplitWidgets();\n for (var k = 0; k < splittedWidget.length; k++) {\n var widget = splittedWidget[k];\n for (var j = 0; j < widget.childWidgets.length; j++) {\n var line = widget.childWidgets[j];\n for (var i = 0; i < line.children.length; i++) {\n inline = line.children[i];\n if (inline instanceof ListTextElementBox) {\n continue;\n }\n if (!isStarted && (inline instanceof TextElementBox || inline instanceof ImageElementBox\n || inline instanceof BookmarkElementBox || inline instanceof FieldElementBox\n && HelperMethods.isLinkedFieldCharacter(inline))) {\n isStarted = true;\n }\n if (isStarted && offset <= count + inline.length) {\n indexInInline = (offset - count);\n return { 'element': inline, 'index': indexInInline };\n }\n count += inline.length;\n }\n }\n }\n if (offset > count) {\n indexInInline = isNullOrUndefined(inline) ? offset : inline.length;\n }\n return { 'element': inline, 'index': indexInInline };\n };\n /**\n * @private\n */\n ParagraphWidget.prototype.getLength = function () {\n var length = 0;\n for (var j = 0; j < this.childWidgets.length; j++) {\n var line = this.childWidgets[j];\n for (var i = 0; i < line.children.length; i++) {\n var element = line.children[i];\n if (element instanceof ListTextElementBox) {\n continue;\n }\n length += element.length;\n }\n }\n return length;\n };\n /**\n * @private\n */\n ParagraphWidget.prototype.getTableCellWidget = function (point) {\n return undefined;\n };\n /**\n * @private\n */\n ParagraphWidget.prototype.clone = function () {\n var paragraph = new ParagraphWidget();\n paragraph.paragraphFormat.copyFormat(this.paragraphFormat);\n paragraph.characterFormat.copyFormat(this.characterFormat);\n for (var i = 0; i < this.childWidgets.length; i++) {\n var line = this.childWidgets[i];\n var cloneLine = line.clone();\n paragraph.childWidgets.push(cloneLine);\n cloneLine.paragraph = paragraph;\n }\n paragraph.x = this.x;\n paragraph.y = this.y;\n paragraph.height = this.height;\n paragraph.width = this.width;\n return paragraph;\n };\n /**\n * @private\n */\n ParagraphWidget.prototype.destroyInternal = function (viewer) {\n var height = this.height;\n if (!isNullOrUndefined(this.childWidgets)) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n var widget = this.childWidgets[i];\n widget.destroy();\n if (this.childWidgets.length === 1 && isNullOrUndefined(this.childWidgets[0].children)) {\n this.childWidgets = undefined;\n }\n if (isNullOrUndefined(this.childWidgets)) {\n break;\n }\n i--;\n }\n this.childWidgets = undefined;\n }\n if (!isNullOrUndefined(this.containerWidget) && !isNullOrUndefined(this.containerWidget.childWidgets)\n && this.containerWidget.childWidgets.indexOf(this) !== -1) {\n this.containerWidget.childWidgets.splice(this.containerWidget.childWidgets.indexOf(this), 1);\n this.containerWidget.height -= height;\n if ((isNullOrUndefined(this.containerWidget.childWidgets) || this.containerWidget.childWidgets.length === 0)\n && this.containerWidget instanceof BodyWidget) {\n this.containerWidget.destroyInternal(viewer);\n }\n this.containerWidget = undefined;\n }\n this.destroy();\n };\n /**\n * @private\n */\n ParagraphWidget.prototype.destroy = function () {\n // if (this.paragraphFormat) {\n // this.paragraphFormat.destroy();\n // }\n this.paragraphFormat = undefined;\n // if (this.characterFormat) {\n // this.characterFormat.destroy();\n // }\n this.characterFormat = undefined;\n _super.prototype.destroy.call(this);\n };\n return ParagraphWidget;\n}(BlockWidget));\nexport { ParagraphWidget };\n/**\n * @private\n */\nvar TableWidget = /** @class */ (function (_super) {\n __extends(TableWidget, _super);\n function TableWidget() {\n var _this = _super.call(this) || this;\n _this.flags = 0;\n /**\n * @private\n */\n _this.leftMargin = 0;\n /**\n * @private\n */\n _this.topMargin = 0;\n /**\n * @private\n */\n _this.rightMargin = 0;\n /**\n * @private\n */\n _this.bottomMargin = 0;\n _this.margin = new Margin(_this.leftMargin, _this.topMargin, _this.rightMargin, _this.bottomMargin);\n _this.leftBorderWidth = 0;\n _this.rightBorderWidth = 0;\n _this.topBorderWidth = 0;\n _this.bottomBorderWidth = 0;\n _this.tableFormat = new WTableFormat(_this);\n _this.tableHolder = new WTableHolder();\n _this.spannedRowCollection = new Dictionary();\n return _this;\n }\n Object.defineProperty(TableWidget.prototype, \"isGridUpdated\", {\n /**\n * @private\n */\n get: function () {\n return ((this.flags & 0x4) >> 2) !== 0;\n },\n /**\n * @private\n */\n set: function (value) {\n this.flags = ((this.flags & 0xFB) | ((value ? 1 : 0) << 2));\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableWidget.prototype, \"continueHeader\", {\n /**\n * @private\n */\n get: function () {\n return ((this.flags & 0x2) >> 1) !== 0;\n },\n /**\n * @private\n */\n set: function (value) {\n this.flags = ((this.flags & 0xFD) | ((value ? 1 : 0) << 1));\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableWidget.prototype, \"header\", {\n /**\n * @private\n */\n get: function () {\n return (this.flags & 0x1) !== 0;\n },\n /**\n * @private\n */\n set: function (value) {\n this.flags = ((this.flags & 0xFE) | (value ? 1 : 0));\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n TableWidget.prototype.equals = function (widget) {\n return widget instanceof TableWidget && widget.tableFormat === this.tableFormat;\n };\n /**\n * @private\n */\n TableWidget.prototype.combineRows = function (viewer) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i];\n if (row.childWidgets.length === 0) {\n row.destroy();\n i--;\n }\n else {\n row.combineCells(viewer);\n }\n }\n };\n /**\n * @private\n */\n TableWidget.prototype.contains = function (tableCell) {\n if (this.equals(tableCell.ownerTable)) {\n return true;\n }\n while (tableCell.ownerTable.isInsideTable) {\n if (this.equals(tableCell.ownerTable)) {\n return true;\n }\n tableCell = tableCell.ownerTable.associatedCell;\n }\n return this.equals(tableCell.ownerTable);\n };\n /**\n * @private\n */\n TableWidget.prototype.getOwnerWidth = function (isBasedOnViewer) {\n var width = this.getContainerWidth();\n // Left and right indents should be neglected.\n width = width - this.leftIndent - this.rightIndent;\n return width >= 0 ? width : 0;\n };\n TableWidget.prototype.getTableWidth = function () {\n var width = 0;\n for (var i = 0; i < this.childWidgets.length; i++) {\n var rowWidth = 0;\n var row = this.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n rowWidth += row.childWidgets[j].cellFormat.cellWidth;\n }\n if (width < rowWidth) {\n width = rowWidth;\n }\n }\n return width;\n };\n /**\n * @private\n */\n TableWidget.prototype.getTableClientWidth = function (clientWidth) {\n var tableWidth = clientWidth;\n if (this.tableFormat.preferredWidthType === 'Point'\n && this.tableFormat.preferredWidth > 0) {\n tableWidth = this.tableFormat.preferredWidth;\n }\n else {\n if (this.tableFormat.preferredWidthType === 'Percent'\n && this.tableFormat.preferredWidth > 0) {\n tableWidth = tableWidth * this.tableFormat.preferredWidth / 100;\n }\n else {\n //By default, if Table preferred widthType is auto , width is set based on ClientWidth and type is set as 'Point'\n this.tableFormat.preferredWidthType = 'Point';\n this.tableFormat.preferredWidth = tableWidth;\n }\n }\n return tableWidth;\n };\n /**\n * @private\n */\n TableWidget.prototype.getCellWidth = function (preferredWidth, preferredWidthType, containerWidth, cell) {\n var cellWidth = preferredWidth;\n if (preferredWidthType === 'Percent') {\n cellWidth = (preferredWidth * containerWidth) / 100;\n }\n else if (preferredWidthType === 'Point') {\n cellWidth = preferredWidth;\n }\n else if (!isNullOrUndefined(cell)) {\n cellWidth = cell.getMinimumPreferredWidth();\n }\n return cellWidth;\n };\n /**\n * @private\n */\n TableWidget.prototype.fitCellsToClientArea = function (clientWidth) {\n var tableWidth = this.getTableWidth();\n var factor = clientWidth / tableWidth;\n for (var i = 0; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i];\n row.rowFormat.gridAfterWidth *= factor;\n row.rowFormat.gridBeforeWidth *= factor;\n for (var j = 0; j < row.childWidgets.length; j++) {\n row.childWidgets[j].cellFormat.cellWidth *= factor;\n }\n }\n };\n /**\n * @private\n */\n TableWidget.prototype.getTableCellWidget = function (point) {\n var tableCellWidget = undefined;\n for (var i = 0; i < this.childWidgets.length; i++) {\n if (this.childWidgets[i].y <= point.y\n && (this.childWidgets[i].y + this.childWidgets[i].height) >= point.y) {\n tableCellWidget = this.childWidgets[i].getTableCellWidget(point);\n break;\n }\n }\n return tableCellWidget;\n };\n /**\n * @private\n */\n TableWidget.prototype.calculateGrid = function () {\n var tempGrid = [];\n var spannedCells = [];\n var containerWidth = this.getOwnerWidth(true);\n var tableWidth = this.getTableClientWidth(containerWidth);\n for (var i = 0; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i];\n var rowFormat = row.rowFormat;\n var cellWidth = 0;\n var columnSpan = row.rowFormat.gridBefore;\n var currOffset = 0;\n if (tempGrid.indexOf(currOffset) < 0) {\n tempGrid.push(currOffset);\n }\n //Converts the row grid before width from point to twips point by 15 factor.\n cellWidth = this.getCellWidth(rowFormat.gridBeforeWidth, rowFormat.gridBeforeWidthType, tableWidth, null);\n currOffset += cellWidth;\n var startOffset = Math.round(currOffset);\n if (tempGrid.indexOf(startOffset) < 0) {\n tempGrid.push(startOffset);\n }\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n for (var k = 0; k < spannedCells.length; k++) {\n if (spannedCells[k].columnIndex < columnSpan) {\n continue;\n }\n var rowSpan = spannedCells[k].cellFormat.rowSpan;\n var removeSpannedCell = true;\n if (spannedCells[k].columnIndex > columnSpan) {\n {\n removeSpannedCell = false;\n // If the cell is the last cell in the row and the row has grid after value..\n if (j === row.childWidgets.length - 1 && row.rowFormat.gridAfter > 0) {\n // tslint:disable-next-line:max-line-length\n cellWidth = this.getCellWidth(spannedCells[k].cellFormat.preferredWidth, spannedCells[k].cellFormat.preferredWidthType, tableWidth, null);\n currOffset += cellWidth;\n }\n }\n }\n else {\n // If the table gird alone calculted then column index of the rowspanned cell will be directly taken. \n // If the gird calculation is done from the UI level opearations such as resizing then table holder \n // will have the columns at that time we can get the column index from the table holder.\n //Converts the cell width from point to twips point by 15 factor.\n // tslint:disable-next-line:max-line-length\n cellWidth = this.getCellWidth(spannedCells[k].cellFormat.preferredWidth, spannedCells[k].cellFormat.preferredWidthType, tableWidth, null);\n currOffset += cellWidth;\n }\n if (!removeSpannedCell && j === row.childWidgets.length - 1) {\n removeSpannedCell = true;\n }\n if (removeSpannedCell && i - spannedCells[k].ownerRow.rowIndex === rowSpan - 1) {\n spannedCells.splice(k, 1);\n k--;\n }\n }\n // At the start of each row, we will process the row spanned cells to get the start column index.\n // To calculate grid properly, we need the items in the spanned cells collection in the order of their column index\n if (cell.cellFormat.rowSpan > 1) {\n if (spannedCells.length === 0 || spannedCells[spannedCells.length - 1].columnIndex <= columnSpan) {\n spannedCells.push(cell);\n }\n else {\n for (var m = spannedCells.length; m > 0; m--) {\n if (spannedCells[m - 1].columnIndex > columnSpan) {\n spannedCells.splice(m - 1, 0, cell);\n }\n }\n }\n }\n columnSpan += cell.cellFormat.columnSpan;\n //Converts the cell width from pixel to twips point by 15 factor.\n cellWidth = this.getCellWidth(cell.cellFormat.preferredWidth, cell.cellFormat.preferredWidthType, tableWidth, null);\n currOffset += cellWidth;\n var offset = Math.round(currOffset);\n if (tempGrid.indexOf(offset) < 0) {\n tempGrid.push(offset);\n }\n if (j === row.childWidgets.length - 1 && rowFormat.gridAfter > 0) {\n cellWidth = this.getCellWidth(rowFormat.gridAfterWidth, 'Point', tableWidth, null);\n currOffset += cellWidth;\n if (tempGrid.indexOf(Math.round(currOffset)) < 0) {\n tempGrid.push(Math.round(currOffset));\n }\n columnSpan += rowFormat.gridAfter;\n }\n }\n }\n tempGrid.sort(function (a, b) { return a - b; });\n if (tempGrid.length - 1 !== this.tableHolder.columns.length) {\n this.updateColumnSpans(tempGrid, tableWidth);\n }\n };\n TableWidget.prototype.updateColumnSpans = function (tempGrid, containerWidth) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i];\n if (row.rowFormat.gridBeforeWidth >= 0) {\n row.rowFormat.gridBefore = row.getGridCount(tempGrid, -1, containerWidth);\n }\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n var columnSpan = row.getGridCount(tempGrid, cell.getIndex(), containerWidth);\n if (columnSpan > 0 && cell.cellFormat.columnSpan !== columnSpan) {\n cell.cellFormat.columnSpan = columnSpan;\n }\n }\n if (row.rowFormat.gridAfterWidth >= 0) {\n row.rowFormat.gridAfter = row.getGridCount(tempGrid, row.childWidgets.length, containerWidth);\n }\n }\n };\n /**\n * @private\n */\n TableWidget.prototype.buildTableColumns = function () {\n if (this.isGridUpdated) {\n return;\n }\n // Clear existing columns in order to start creating columns freshly.\n this.tableHolder.resetColumns();\n var containerWidth = 0;\n var tableWidth = 0;\n var rowSpannedCells = [];\n var isAutoWidth = this.tableFormat.preferredWidthType === 'Auto';\n // For continuous layout, window width should be considered. \n // If preferred width exceeds this limit, it can take upto maximum of 2112 pixels (1584 points will be assigned by Microsoft Word).\n containerWidth = this.getOwnerWidth(true);\n tableWidth = this.getTableClientWidth(containerWidth);\n for (var i = 0; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i];\n var rowFormat = row.rowFormat;\n var columnSpan = 0;\n var cellWidth = 0;\n var offset = 0;\n if (rowFormat.gridBefore > 0) {\n cellWidth = this.getCellWidth(rowFormat.gridBeforeWidth, row.rowFormat.gridAfterWidthType, tableWidth, null);\n this.tableHolder.addColumns(columnSpan, columnSpan = rowFormat.gridBefore, cellWidth, cellWidth, offset = cellWidth);\n }\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n if (rowSpannedCells.length === 0) {\n cell.columnIndex = columnSpan;\n }\n for (var k = 0; k < rowSpannedCells.length; k++) {\n var rowSpannedCell = rowSpannedCells[k];\n if (rowSpannedCell.columnIndex < columnSpan) {\n cell.columnIndex = columnSpan;\n continue;\n }\n var rowSpan = 1;\n var removeSpannedCell = true;\n rowSpan = rowSpannedCell.cellFormat.rowSpan;\n if (rowSpannedCell.columnIndex > columnSpan) {\n cell.columnIndex = columnSpan;\n removeSpannedCell = false;\n }\n else {\n // tslint:disable-next-line:max-line-length\n cellWidth = this.getCellWidth(rowSpannedCell.cellFormat.preferredWidth, rowSpannedCell.cellFormat.preferredWidthType, tableWidth, rowSpannedCell);\n var minWidth_1 = rowSpannedCell.getMinimumPreferredWidth();\n // If the table gird alone calculted then column index of the rowspanned cell will be directly taken. \n // tslint:disable-next-line:max-line-length\n // If the gird calculation is done from the UI level opearations such as resizing then table holder will have the columns at that time we can get the column index from the table holder.\n // tslint:disable-next-line:max-line-length\n if (this.tableHolder.columns.length > 0) {\n this.tableHolder.addColumns(columnSpan, columnSpan = this.tableHolder.columns.indexOf(rowSpannedCell.ownerColumn) + rowSpannedCell.cellFormat.columnSpan, cellWidth, minWidth_1, offset += cellWidth);\n cell.columnIndex = columnSpan;\n }\n else {\n // tslint:disable-next-line:max-line-length\n this.tableHolder.addColumns(columnSpan, columnSpan = rowSpannedCell.columnIndex + rowSpannedCell.cellFormat.columnSpan, cellWidth, minWidth_1, offset += cellWidth);\n cell.columnIndex = columnSpan;\n }\n }\n if (!removeSpannedCell && j === row.childWidgets.length - 1) {\n removeSpannedCell = true;\n }\n if (removeSpannedCell && i - rowSpannedCell.ownerRow.rowIndex === rowSpan - 1) {\n rowSpannedCells.splice(k, 1);\n k--;\n }\n }\n // At the start of each row, we will process the row spanned cells to get the start column index.\n // To calculate grid properly, we need the items in the spanned cells collection in the order of their column index\n if (cell.cellFormat.rowSpan > 1) {\n if (rowSpannedCells.length === 0 || rowSpannedCells[rowSpannedCells.length - 1].columnIndex <= columnSpan) {\n rowSpannedCells.push(cell);\n }\n else {\n for (var m = rowSpannedCells.length; m > 0; m--) {\n if (rowSpannedCells[m - 1].columnIndex > columnSpan) {\n rowSpannedCells.splice(m - 1, 0, cell);\n }\n }\n }\n }\n cellWidth = this.getCellWidth(cell.cellFormat.preferredWidth, cell.cellFormat.preferredWidthType, tableWidth, cell);\n var minWidth = cell.getMinimumPreferredWidth();\n this.tableHolder.addColumns(columnSpan, columnSpan += cell.cellFormat.columnSpan, cellWidth, minWidth, offset += cellWidth);\n if (j === row.childWidgets.length - 1 && rowFormat.gridAfterWidth > 0) {\n cellWidth = this.getCellWidth(rowFormat.gridAfterWidth, 'Point', tableWidth, null);\n this.tableHolder.addColumns(columnSpan, columnSpan += rowFormat.gridAfter, cellWidth, cellWidth, offset += cellWidth);\n }\n }\n }\n this.tableHolder.validateColumnWidths();\n // Fits the column width based on preferred width. i.e. Fixed layout.\n this.tableHolder.fitColumns(containerWidth, tableWidth, isAutoWidth);\n //Sets the width to cells\n this.setWidthToCells(tableWidth, isAutoWidth);\n };\n /**\n * @private\n */\n TableWidget.prototype.setWidthToCells = function (tableWidth, isAutoWidth) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n var rw = this.childWidgets[i];\n var rowFormat = rw.rowFormat;\n if (rowFormat.gridBefore > 0) {\n rowFormat.beforeWidth = this.tableHolder.getCellWidth(0, rowFormat.gridBefore, tableWidth, isAutoWidth);\n }\n for (var j = 0; j < rw.childWidgets.length; j++) {\n var cell = rw.childWidgets[j];\n // tslint:disable-next-line:max-line-length\n cell.cellFormat.cellWidth = this.tableHolder.getCellWidth(cell.columnIndex, cell.cellFormat.columnSpan, tableWidth, isAutoWidth);\n //By default, if cell preferred widthType is auto , width set based on table width and type is changed to 'Point'\n if (cell.cellFormat.preferredWidthType !== 'Percent') {\n cell.cellFormat.preferredWidth = cell.cellFormat.cellWidth;\n cell.cellFormat.preferredWidthType = 'Point';\n }\n }\n if (rowFormat.gridAfter > 0) {\n rowFormat.afterWidth = this.tableHolder.getCellWidth(0, rowFormat.gridAfter, tableWidth, isAutoWidth);\n }\n }\n };\n /**\n * @private\n */\n TableWidget.prototype.getMaxRowWidth = function (clientWidth) {\n var width = 0;\n for (var i = 0; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i];\n var rowWidth = 0;\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n rowWidth += this.getCellWidth(cell.cellFormat.preferredWidth, cell.cellFormat.preferredWidthType, clientWidth, cell);\n }\n if (width < rowWidth) {\n width = rowWidth;\n }\n }\n return width;\n };\n /**\n * @private\n */\n TableWidget.prototype.updateWidth = function (dragValue) {\n var totalPreferredWidth = this.tableHolder.getTotalWidth();\n var containerWidth = this.getTableClientWidth(this.getOwnerWidth(true));\n if (containerWidth <= totalPreferredWidth) {\n if (this.tableFormat.preferredWidthType === 'Auto') {\n this.tableFormat.preferredWidthType = 'Point';\n }\n }\n if (this.tableFormat.preferredWidthType !== 'Auto') {\n if (this.tableFormat.preferredWidthType === 'Point') {\n this.tableFormat.preferredWidth = this.getMaxRowWidth(containerWidth);\n }\n // else\n // { //ToDo:Need to anzlyze more the Percentage calculation for table width.\n // let value:number = ConvertPixelToPercent(GetMaxRowWidth(containerWidth));\n // this.tableFormat.preferredWidth = value;\n // }\n }\n };\n /**\n * @private\n */\n TableWidget.prototype.convertPointToPercent = function (tablePreferredWidth, ownerWidth) {\n var value = 0;\n value = (tablePreferredWidth / ownerWidth) * 100;\n value = Math.round(value);\n return value < 100 ? value : 100; // The value should be lesser than or equal to 100%;\n };\n /**\n * @private\n */\n TableWidget.prototype.clone = function () {\n var table = new TableWidget();\n table.tableHolder = this.tableHolder.clone();\n table.tableFormat.copyFormat(this.tableFormat);\n for (var i = 0; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i].clone();\n table.childWidgets.push(row);\n row.containerWidget = table;\n row.index = i;\n }\n table.x = this.x;\n table.y = this.y;\n table.height = this.height;\n table.width = this.width;\n table.containerWidget = this.containerWidget;\n return table;\n };\n /**\n * @private\n */\n TableWidget.getTableOf = function (node) {\n if (node instanceof WBorders) {\n var row = TableRowWidget.getRowOf(node);\n if (!isNullOrUndefined(row)) {\n return row.ownerTable;\n }\n else if (node.ownerBase instanceof WTableFormat && node.ownerBase.ownerBase instanceof TableWidget) {\n return node.ownerBase.ownerBase;\n }\n else {\n return undefined;\n }\n }\n return undefined;\n };\n /**\n * @private\n */\n TableWidget.prototype.fitChildToClientArea = function () {\n var clientWidth = this.getContainerWidth();\n if (Math.round(clientWidth) < Math.round(this.getTableWidth())) {\n this.fitCellsToClientArea(clientWidth);\n }\n for (var i = 0; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n for (var k = 0; k < cell.childWidgets.length; k++) {\n if (cell.childWidgets[k] instanceof TableWidget) {\n cell.childWidgets[k].fitChildToClientArea();\n }\n }\n }\n }\n };\n /**\n * @private\n */\n TableWidget.prototype.getColumnCellsForSelection = function (startCell, endCell) {\n var cells = [];\n var start = startCell.columnIndex;\n var end = endCell.columnIndex + endCell.cellFormat.columnSpan;\n for (var i = 0; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n var columnIndex = cell.columnIndex;\n var columnSpan = cell.cellFormat.columnSpan;\n if ((columnIndex + columnSpan > start && columnIndex + columnSpan < end) || (columnIndex > start && columnIndex < end)) {\n if (cells.indexOf(cell) < 0) {\n cells.push(cell);\n }\n }\n else if ((columnIndex > start && columnIndex < end && columnIndex + columnSpan < end)\n || (columnIndex < start && columnIndex + columnSpan > end)) {\n if (cells.indexOf(cell) < 0) {\n cells.push(cell);\n }\n }\n else if (columnIndex === start || columnIndex + columnSpan === end) {\n if (cells.indexOf(cell) < 0) {\n cells.push(cell);\n }\n }\n }\n }\n return cells;\n };\n /**\n * Splits width equally for all the cells.\n * @param tableClientWidth\n * @private\n */\n TableWidget.prototype.splitWidthToTableCells = function (tableClientWidth) {\n for (var row = 0; row < this.childWidgets.length; row++) {\n this.childWidgets[row].splitWidthToRowCells(tableClientWidth);\n }\n };\n /**\n * @private\n */\n TableWidget.prototype.insertTableRowsInternal = function (tableRows, startIndex) {\n for (var i = 0; i < tableRows.length; i++) {\n var row = tableRows[i];\n row.containerWidget = this;\n this.childWidgets.splice(startIndex, 0, tableRows[i]);\n }\n this.updateRowIndex(startIndex);\n this.isGridUpdated = false;\n this.buildTableColumns();\n this.isGridUpdated = true;\n };\n /**\n * @private\n */\n TableWidget.prototype.updateRowIndex = function (startIndex) {\n for (var i = startIndex; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i];\n row.index = i;\n for (var j = 0; j < row.childWidgets.length; j++) {\n row.childWidgets[j].index = j;\n row.childWidgets[j].rowIndex = row.rowIndex;\n }\n startIndex++;\n }\n };\n /**\n * @private\n */\n TableWidget.prototype.destroyInternal = function (viewer) {\n var height = this.height;\n if (!isNullOrUndefined(this.childWidgets)) {\n for (var j = 0; j < this.childWidgets.length; j++) {\n var widget = undefined;\n var childWidget = this.childWidgets[j];\n widget = childWidget;\n if (!isNullOrUndefined(widget)) {\n widget.destroyInternal(viewer);\n }\n if (isNullOrUndefined(this.childWidgets)) {\n break;\n }\n j--;\n }\n this.childWidgets = undefined;\n }\n if (!isNullOrUndefined(this.containerWidget)) {\n if (!isNullOrUndefined(this.containerWidget.childWidgets)) {\n if (this.containerWidget.childWidgets.indexOf(this) !== -1) {\n this.containerWidget.childWidgets.splice(this.containerWidget.childWidgets.indexOf(this), 1);\n }\n this.containerWidget.height -= height;\n if ((isNullOrUndefined(this.containerWidget.childWidgets) || this.containerWidget.childWidgets.length === 0)\n && this.containerWidget instanceof BodyWidget) {\n this.containerWidget.destroyInternal(viewer);\n }\n }\n this.containerWidget = undefined;\n }\n this.destroy();\n };\n /**\n * @private\n */\n TableWidget.prototype.destroy = function () {\n // if (this.tableFormat) {\n // this.tableFormat.destroy();\n // }\n this.tableFormat = undefined;\n // if (this.spannedRowCollection) {\n // this.spannedRowCollection.destroy();\n // }\n this.spannedRowCollection = undefined;\n this.tableGrids = [];\n this.tableGrids = undefined;\n // if (this.tableHolder) {\n // this.tableHolder.destroy();\n // }\n this.tableHolder = undefined;\n this.flags = undefined;\n this.leftMargin = undefined;\n this.topMargin = undefined;\n this.rightMargin = undefined;\n this.bottomMargin = undefined;\n this.headerHeight = undefined;\n this.description = undefined;\n this.title = undefined;\n _super.prototype.destroy.call(this);\n };\n return TableWidget;\n}(BlockWidget));\nexport { TableWidget };\n/**\n * @private\n */\nvar TableRowWidget = /** @class */ (function (_super) {\n __extends(TableRowWidget, _super);\n function TableRowWidget() {\n var _this = _super.call(this) || this;\n /**\n * @private\n */\n _this.spannedRowCollection = [];\n _this.topBorderWidth = 0;\n _this.bottomBorderWidth = 0;\n _this.rowFormat = new WRowFormat(_this);\n return _this;\n }\n Object.defineProperty(TableRowWidget.prototype, \"rowIndex\", {\n /**\n * @private\n */\n get: function () {\n if (this.containerWidget) {\n return this.containerWidget.childWidgets.indexOf(this);\n }\n return -1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableRowWidget.prototype, \"ownerTable\", {\n /**\n * @private\n */\n get: function () {\n if (this.containerWidget instanceof TableWidget) {\n return this.containerWidget;\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableRowWidget.prototype, \"nextRow\", {\n /**\n * @private\n */\n get: function () {\n var index = this.indexInOwner;\n if (index > -1 && index < this.ownerTable.childWidgets.length - 1) {\n return this.ownerTable.childWidgets[index + 1];\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n TableRowWidget.prototype.equals = function (widget) {\n return widget instanceof TableRowWidget && widget.rowFormat === this.rowFormat;\n };\n /**\n * @private\n */\n TableRowWidget.prototype.combineCells = function (viewer) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n var cell = this.childWidgets[i];\n cell.combineWidget(viewer);\n if (cell.cellFormat.rowSpan === 1) {\n var cellHeight = cell.height + cell.margin.top + cell.margin.bottom;\n if ((this.height - this.ownerTable.tableFormat.cellSpacing) < cell.height) {\n this.height = this.ownerTable.tableFormat.cellSpacing + cell.height;\n }\n }\n }\n };\n /**\n * @private\n */\n TableRowWidget.getRowOf = function (node) {\n if (node instanceof WBorders) {\n var cell = TableCellWidget.getCellOf(node);\n if (!isNullOrUndefined(cell)) {\n return cell.ownerRow;\n }\n else if (node.ownerBase instanceof WRowFormat && node.ownerBase.ownerBase instanceof TableRowWidget) {\n return node.ownerBase.ownerBase;\n }\n else {\n return undefined;\n }\n }\n return undefined;\n };\n /**\n * @private\n */\n TableRowWidget.prototype.getCell = function (rowIndex, cellIndex) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n var cell = this.childWidgets[i];\n if (cell.rowIndex === rowIndex && cell.index === cellIndex) {\n return cell;\n }\n }\n return undefined;\n };\n /**\n * @private\n */\n TableRowWidget.prototype.splitWidthToRowCells = function (tableClientWidth) {\n var cells = this.childWidgets;\n var cellWidth = tableClientWidth / cells.length;\n for (var cell = 0; cell < cells.length; cell++) {\n cells[cell].cellFormat.preferredWidth = cellWidth;\n }\n };\n /**\n * @private\n */\n TableRowWidget.prototype.getGridCount = function (tableGrid, index, containerWidth) {\n var prevOffset = 0;\n var width = 0;\n var ownerTable = this.ownerTable;\n var rowFormat = this.rowFormat;\n if (index === -1) {\n width = ownerTable.getCellWidth(rowFormat.gridBeforeWidth, rowFormat.gridBeforeWidthType, containerWidth, null);\n }\n else {\n prevOffset += ownerTable.getCellWidth(rowFormat.gridBeforeWidth, rowFormat.gridBeforeWidthType, containerWidth, null);\n if (index > 0) {\n prevOffset += this.getCellOffset(index, containerWidth);\n }\n if (index < this.childWidgets.length) {\n var cell = this.childWidgets[index];\n width = ownerTable.getCellWidth(cell.cellFormat.preferredWidth, cell.cellFormat.preferredWidthType, containerWidth, null);\n }\n else {\n width = ownerTable.getCellWidth(rowFormat.gridAfterWidth, rowFormat.gridAfterWidthType, containerWidth, null);\n }\n }\n var gridStartIndex = this.getOffsetIndex(tableGrid, prevOffset);\n var gridEndIndex = this.getOffsetIndex(tableGrid, prevOffset + width);\n return gridEndIndex - gridStartIndex;\n };\n TableRowWidget.prototype.getOffsetIndex = function (tableGrid, offset) {\n offset = Math.round(offset);\n var index = 0;\n if (tableGrid.indexOf(offset) >= 0) {\n index = tableGrid.indexOf(offset);\n }\n else {\n for (var i = 0; i < tableGrid.length; i++) {\n if (tableGrid[i] > offset) {\n return i;\n }\n }\n index = tableGrid.length - 1;\n }\n return index;\n };\n TableRowWidget.prototype.getCellOffset = function (index, containerWidth) {\n var prevOffset = 0;\n var ownerTable = this.ownerTable;\n for (var i = 0; i < this.childWidgets.length; i++) {\n var cellFormat = this.childWidgets[i].cellFormat;\n if (i === index) {\n break;\n }\n prevOffset += ownerTable.getCellWidth(cellFormat.preferredWidth, cellFormat.preferredWidthType, containerWidth, null);\n }\n return prevOffset;\n };\n /**\n * @private\n */\n TableRowWidget.prototype.updateRowBySpannedCells = function () {\n var rowSpannedCells = this.getPreviousRowSpannedCells();\n var currentRowIndex = this.rowIndex;\n for (var i = 0; i < rowSpannedCells.length; i++) {\n var spannedCell = rowSpannedCells[i];\n var rowSpanEnd = spannedCell.ownerRow.rowIndex + spannedCell.cellFormat.rowSpan - 1;\n // If current row is row span end or includes spanned cells. then, decrease the rowspan\n if (rowSpanEnd >= currentRowIndex) {\n spannedCell.cellFormat.rowSpan -= 1;\n }\n }\n };\n /**\n * @private\n */\n TableRowWidget.prototype.getPreviousRowSpannedCells = function (include) {\n var rowSpannedCells = [];\n var row = include ? this : this.previousWidget;\n while (!isNullOrUndefined(row)) {\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cell = row.childWidgets[i];\n if (cell.cellFormat.rowSpan > 1) {\n rowSpannedCells.splice(0, 0, cell);\n }\n }\n row = row.previousWidget;\n }\n return rowSpannedCells;\n };\n /**\n * @private\n */\n TableRowWidget.prototype.getTableCellWidget = function (point) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n var x = Math.round(this.childWidgets[i].x);\n if (x - this.childWidgets[i].margin.left - 1 <= point.x\n && (x + this.childWidgets[i].width) >= point.x) {\n return this.childWidgets[i];\n }\n else if (i === this.childWidgets.length - 1\n && (this.childWidgets[i].x + this.childWidgets[i].width) + 1 <= point.x) {\n return this.childWidgets[i];\n }\n }\n var cellWidget = undefined;\n if (this.childWidgets.length > 0) {\n if (this.childWidgets[0].x <= point.x) {\n cellWidget = this.childWidgets[this.childWidgets.length - 1].getTableCellWidget(point);\n }\n else {\n cellWidget = this.childWidgets[0].getTableCellWidget(point);\n }\n }\n return cellWidget;\n };\n /**\n * @private\n */\n TableRowWidget.prototype.destroyInternal = function (viewer) {\n var height = this.height;\n if (!isNullOrUndefined(this.childWidgets)) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n var widget = this.childWidgets[i];\n widget.destroyInternal(viewer);\n if (isNullOrUndefined(this.childWidgets)) {\n break;\n }\n i--;\n }\n this.childWidgets = undefined;\n }\n if (!isNullOrUndefined(this.containerWidget)) {\n if (!isNullOrUndefined(this.containerWidget.childWidgets)) {\n this.containerWidget.childWidgets.splice(this.containerWidget.childWidgets.indexOf(this), 1);\n if ((isNullOrUndefined(this.containerWidget.childWidgets) || this.containerWidget.childWidgets.length === 0)\n && this.containerWidget instanceof TableWidget) {\n this.containerWidget.destroyInternal(viewer);\n }\n else if (this.containerWidget.containerWidget instanceof BodyWidget) {\n this.containerWidget.containerWidget.height -= height;\n }\n this.containerWidget.height -= height;\n }\n }\n this.destroy();\n };\n /**\n * @private\n */\n TableRowWidget.prototype.clone = function () {\n var row = new TableRowWidget();\n row.rowFormat.copyFormat(this.rowFormat);\n row.topBorderWidth = this.topBorderWidth;\n row.bottomBorderWidth = this.bottomBorderWidth;\n for (var i = 0; i < this.childWidgets.length; i++) {\n var cell = this.childWidgets[i].clone();\n row.childWidgets.push(cell);\n cell.containerWidget = row;\n cell.index = i;\n cell.rowIndex = this.rowIndex;\n }\n row.x = this.x;\n row.y = this.y;\n row.height = this.height;\n row.width = this.width;\n return row;\n };\n /**\n * @private\n */\n TableRowWidget.prototype.destroy = function () {\n // if (this.rowFormat) {\n // this.rowFormat.destroy();\n // }\n this.rowFormat = undefined;\n this.rowFormat = undefined;\n this.spannedRowCollection = [];\n this.spannedRowCollection = undefined;\n this.topBorderWidth = undefined;\n this.bottomBorderWidth = undefined;\n _super.prototype.destroy.call(this);\n };\n return TableRowWidget;\n}(BlockWidget));\nexport { TableRowWidget };\n/**\n * @private\n */\nvar TableCellWidget = /** @class */ (function (_super) {\n __extends(TableCellWidget, _super);\n function TableCellWidget() {\n var _this = _super.call(this) || this;\n /**\n * @private\n */\n _this.rowIndex = -1;\n _this.margin = new Margin(_this.leftMargin, _this.topMargin, _this.rightMargin, _this.bottomMargin);\n _this.leftBorderWidth = 0;\n _this.rightBorderWidth = 0;\n _this.cellFormat = new WCellFormat(_this);\n return _this;\n }\n Object.defineProperty(TableCellWidget.prototype, \"ownerColumn\", {\n /**\n * @private\n */\n get: function () {\n return this.ownerTable.tableHolder.columns[this.columnIndex];\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableCellWidget.prototype, \"leftMargin\", {\n /**\n * @private\n */\n get: function () {\n if (this.cellFormat && this.cellFormat.containsMargins()) {\n return this.cellFormat.leftMargin;\n }\n else if (!isNullOrUndefined(this.ownerTable) && !isNullOrUndefined(this.ownerTable.tableFormat)) {\n return this.ownerTable.tableFormat.leftMargin;\n }\n else {\n return 0;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableCellWidget.prototype, \"topMargin\", {\n /**\n * @private\n */\n get: function () {\n if (this.cellFormat && this.cellFormat.containsMargins()) {\n return this.cellFormat.topMargin;\n }\n else if (!isNullOrUndefined(this.ownerTable) && !isNullOrUndefined(this.ownerTable.tableFormat)) {\n return this.ownerTable.tableFormat.topMargin;\n }\n else {\n return 0;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableCellWidget.prototype, \"rightMargin\", {\n /**\n * @private\n */\n get: function () {\n if (this.cellFormat && this.cellFormat.containsMargins()) {\n return this.cellFormat.rightMargin;\n }\n else if (!isNullOrUndefined(this.ownerTable) && !isNullOrUndefined(this.ownerTable.tableFormat)) {\n return this.ownerTable.tableFormat.rightMargin;\n }\n else {\n return 0;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableCellWidget.prototype, \"bottomMargin\", {\n /**\n * @private\n */\n get: function () {\n if (this.cellFormat && this.cellFormat.containsMargins()) {\n return this.cellFormat.bottomMargin;\n }\n else if (!isNullOrUndefined(this.ownerTable) && !isNullOrUndefined(this.ownerTable.tableFormat)) {\n return this.ownerTable.tableFormat.bottomMargin;\n }\n else {\n return 0;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableCellWidget.prototype, \"cellIndex\", {\n /**\n * @private\n */\n get: function () {\n if (this.ownerRow) {\n return this.ownerRow.childWidgets.indexOf(this);\n }\n return -1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableCellWidget.prototype, \"ownerTable\", {\n /**\n * @private\n */\n get: function () {\n if (this.containerWidget instanceof TableRowWidget) {\n return this.containerWidget.ownerTable;\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableCellWidget.prototype, \"ownerRow\", {\n /**\n * @private\n */\n get: function () {\n return this.containerWidget;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n TableCellWidget.prototype.equals = function (widget) {\n return widget instanceof TableCellWidget && widget.cellFormat === this.cellFormat;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getContainerTable = function () {\n var table = this.ownerTable;\n while (table instanceof TableWidget && table.associatedCell instanceof TableCellWidget) {\n table = table.associatedCell.getContainerTable();\n }\n return table;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getPreviousSplitWidget = function () {\n if (this.containerWidget instanceof TableRowWidget) {\n var row = this.containerWidget;\n do {\n row = row.previousRenderedWidget;\n if (isNullOrUndefined(row) || row.index < this.rowIndex) {\n break;\n }\n var previousCell = row.getCell(this.rowIndex, this.index);\n if (previousCell) {\n return previousCell;\n }\n } while (row);\n }\n return undefined;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getNextSplitWidget = function () {\n var rowSpan = this.cellFormat.rowSpan;\n if (this.containerWidget instanceof TableRowWidget) {\n var row = this.containerWidget;\n do {\n row = row.nextRenderedWidget;\n if (isNullOrUndefined(row) || row.index > this.rowIndex + rowSpan) {\n break;\n }\n var nextCell = row.getCell(this.rowIndex, this.index);\n if (nextCell) {\n return nextCell;\n }\n } while (row);\n }\n return undefined;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getTableCellWidget = function (point) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n if (this.childWidgets[i].y <= point.y\n && (this.childWidgets[i].y + this.childWidgets[i].height) >= point.y) {\n return this.childWidgets[i].getTableCellWidget(point);\n }\n }\n var tableCellWidget = undefined;\n if (this.childWidgets.length > 0) {\n if (this.childWidgets[0].y <= point.y) {\n tableCellWidget = this.childWidgets[this.childWidgets.length - 1].getTableCellWidget(point);\n }\n else {\n tableCellWidget = this.childWidgets[0].getTableCellWidget(point);\n }\n }\n return tableCellWidget;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.updateWidth = function (preferredWidth) {\n if (this.cellFormat.preferredWidthType === 'Auto') {\n this.cellFormat.preferredWidth = preferredWidth;\n this.cellFormat.preferredWidthType = 'Point';\n }\n else if (this.cellFormat.preferredWidthType === 'Point') {\n this.cellFormat.preferredWidth = preferredWidth;\n }\n else if (this.cellFormat.preferredWidthType === 'Percent') {\n this.cellFormat.preferredWidth = this.convertPointToPercent(preferredWidth);\n }\n this.cellFormat.cellWidth = preferredWidth;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.convertPointToPercent = function (cellPreferredWidth) {\n var value = 0;\n var clientWidth = this.ownerTable.getOwnerWidth(true);\n var tableWidth = this.ownerTable.getTableClientWidth(clientWidth);\n value = (cellPreferredWidth / tableWidth) * 100;\n value = Math.round(value);\n return value < 100 ? value : 100; // The value should be lesser than or equal to 100%;\n };\n /**\n * @private\n */\n TableCellWidget.getCellLeftBorder = function (tableCell) {\n var leftBorder = undefined;\n var cellBorder = tableCell.cellFormat.borders;\n var rowBorders = !isNullOrUndefined(tableCell.ownerRow) ? tableCell.ownerRow.rowFormat.borders : undefined;\n var tableBorders = !isNullOrUndefined(tableCell.ownerTable) ? tableCell.ownerTable.tableFormat.borders : undefined;\n if (!isNullOrUndefined(cellBorder.left)) {\n leftBorder = cellBorder.left;\n }\n if (isNullOrUndefined(leftBorder)) {\n leftBorder = tableCell.getLeftBorderToRenderByHierarchy(leftBorder, rowBorders, tableBorders);\n }\n if (tableCell.ownerTable.tableFormat.cellSpacing > 0) {\n leftBorder = tableCell.getLeftBorderToRenderByHierarchy(leftBorder, rowBorders, tableBorders);\n }\n else {\n var prevCell = undefined;\n if (!isNullOrUndefined(tableCell.previousWidget)) {\n // if the border is shared then choose the border based on Conflict Resolution algorithm.\n prevCell = tableCell.previousWidget;\n }\n else if ((tableCell.cellFormat.columnSpan > 1 || tableCell.columnIndex > 1) && tableCell.ownerRow.rowIndex > 0) {\n var previousRow = tableCell.ownerRow.previousWidget;\n while (!isNullOrUndefined(previousRow) && previousRow.childWidgets.length > 0) {\n for (var i = 0; i < previousRow.childWidgets.length; i++) {\n var prevRowCell = previousRow.childWidgets[i];\n if (prevRowCell.columnIndex + prevRowCell.cellFormat.columnSpan === tableCell.columnIndex) {\n prevCell = previousRow.childWidgets[i];\n break;\n }\n }\n if (!isNullOrUndefined(prevCell)) {\n break;\n }\n previousRow = previousRow.previousWidget;\n }\n }\n leftBorder = tableCell.getPreviousCellLeftBorder(leftBorder, prevCell);\n }\n if (isNullOrUndefined(leftBorder)) {\n leftBorder = new WBorder(tableCell.cellFormat.borders);\n }\n return leftBorder;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getLeftBorderWidth = function () {\n var borderWidth = 0;\n //let ownerTable = this.ownerTable;\n //Added null condition check for asynchronous loading.\n // if (this.cellFormat !== null && this.cellFormat.borders !== null) {\n // update the margins values respect to layouting of borders.\n //For normal table cells only left border is rendred. for last cell left and right border is rendred.\n // this border widths are not included in margins.\n // boderWidth = this.cellFormat.borders.GetRightBorderToRender(this).GetLineWidth();\n //need to render rightBorder specifically for all the cells when the cellSpacing is greater than zero or for last cell of each row.\n // }\n return borderWidth;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getRightBorderWidth = function () {\n var borderWidth = 0;\n var ownerTable = this.ownerTable;\n //Added null condition check for asynchronous loading.\n // if (this.cellFormat !== null && this.cellFormat.borders !== null) {\n ///need to render right border specifically for all the cells when the cell spacing is \n //greater than zero or for last cell of each row.\n // let isLastCell: boolean = false;\n // isLastCell = this.cellIndex === 0;\n // if (ownerTable.tableFormat.cellSpacing > 0 || isLastCell) {\n // boderWidth = this.cellFormat.borders.getLeftBorderToRender(this).GetLineWidth();\n // }\n // }\n return borderWidth;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getCellSpacing = function () {\n var actualCellSpacing = this.ownerTable && this.ownerTable.tableFormat ? this.ownerTable.tableFormat.cellSpacing : 0;\n var cellSpacingToLayout = actualCellSpacing;\n // Considers the left, right margins and border widths(only available for Layouted table) for Minimum width.\n if (this.ownerRow.childWidgets.length === 1) {\n cellSpacingToLayout = actualCellSpacing * 2;\n }\n else if (this.cellIndex === 0 || this.cellIndex === this.ownerRow.childWidgets.length - 1) {\n cellSpacingToLayout = actualCellSpacing + (actualCellSpacing / 2);\n }\n else {\n cellSpacingToLayout = actualCellSpacing;\n }\n return cellSpacingToLayout;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getMinimumPreferredWidth = function () {\n var defaultWidth = 0;\n defaultWidth = this.leftMargin + this.rightMargin + this.getLeftBorderWidth() + this.getRightBorderWidth() + this.getCellSpacing();\n return defaultWidth;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getPreviousCellLeftBorder = function (leftBorder, previousCell) {\n // tslint:disable-next-line:max-line-length\n if ((isNullOrUndefined(previousCell) || (!isNullOrUndefined(leftBorder) && (leftBorder.lineStyle === 'None' && !leftBorder.hasNoneStyle)))) {\n if (!isNullOrUndefined(leftBorder) && !(leftBorder.ownerBase.ownerBase instanceof WTableFormat)) {\n // tslint:disable-next-line:max-line-length\n return this.getLeftBorderToRenderByHierarchy(leftBorder, TableRowWidget.getRowOf(leftBorder.ownerBase).rowFormat.borders, TableWidget.getTableOf(leftBorder.ownerBase).tableFormat.borders);\n }\n }\n else {\n var borderToRender = void 0;\n var prevCellRightBorder = undefined;\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(previousCell.cellFormat.borders) && !isNullOrUndefined(previousCell.cellFormat.borders.right) && previousCell.cellFormat.borders.right.lineStyle !== 'None') {\n prevCellRightBorder = previousCell.cellFormat.borders.right;\n }\n if (!isNullOrUndefined(prevCellRightBorder) && prevCellRightBorder.lineStyle !== 'None') {\n borderToRender = this.getBorderBasedOnPriority(prevCellRightBorder, leftBorder);\n }\n else if (!isNullOrUndefined(leftBorder) && !(leftBorder.ownerBase.ownerBase instanceof WTableFormat)) {\n // tslint:disable-next-line:max-line-length\n return this.getLeftBorderToRenderByHierarchy(leftBorder, TableRowWidget.getRowOf(leftBorder.ownerBase).rowFormat.borders, TableWidget.getTableOf(leftBorder.ownerBase).tableFormat.borders);\n }\n }\n return leftBorder;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getBorderBasedOnPriority = function (border, adjacentBorder) {\n // If the cell and its adjacent cell defined different borders then based on this algorithm the border choose to render.\n // Reference link :https://msdn.microsoft.com/en-us/library/office/documentformat.openxml.wordprocessing.tablecellborders.aspx\n if (isNullOrUndefined(border)) {\n return adjacentBorder;\n }\n else if (isNullOrUndefined(adjacentBorder)) {\n return border;\n }\n var borderWeight = border.getBorderWeight();\n var adjacentBorderWeight = adjacentBorder.getBorderWeight();\n //the border with higher wight shall be displayed.\n if (borderWeight === adjacentBorderWeight) {\n //if the border is equal weight the based on the priority the border will be choosen to render.\n var borderPriority = border.getPrecedence();\n var adjacentBorderPriority = adjacentBorder.getPrecedence();\n if (borderPriority === adjacentBorderPriority) {\n //The color with the smaller brightness value shall be displayed.\n var borderColInRGB = this.convertHexToRGB(border.color);\n var R1 = borderColInRGB.r;\n var G1 = borderColInRGB.g;\n var B1 = borderColInRGB.b;\n var adjacentBorderColInRGB = this.convertHexToRGB(adjacentBorder.color);\n var R2 = adjacentBorderColInRGB.r;\n var G2 = adjacentBorderColInRGB.g;\n var B2 = adjacentBorderColInRGB.b;\n var borderBrightness = (R1 + B1 + (2 * G1));\n var adjacentBorderBrightness = (R2 + B2 + (2 * G2));\n if (borderBrightness === adjacentBorderBrightness) {\n borderBrightness = (B1 + (2 * G1));\n adjacentBorderBrightness = (B2 + (2 * G2));\n if (borderBrightness === adjacentBorderBrightness) {\n if (G1 === G2) {\n return border;\n }\n else if (G1 > G2) {\n return adjacentBorder;\n }\n else {\n return border;\n }\n }\n else if (borderBrightness > adjacentBorderBrightness) {\n return adjacentBorder;\n }\n else {\n return border;\n }\n }\n else if (borderBrightness > adjacentBorderBrightness) {\n return adjacentBorder;\n }\n else {\n return border;\n }\n }\n else if (borderPriority > adjacentBorderPriority) {\n return border;\n }\n else {\n return adjacentBorder;\n }\n }\n else if (borderWeight > adjacentBorderWeight) {\n return border;\n }\n else {\n return adjacentBorder;\n }\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getLeftBorderToRenderByHierarchy = function (leftBorder, rowBorders, tableBorders) {\n if (!isNullOrUndefined(leftBorder) && (leftBorder.lineStyle !== 'None' || (leftBorder.hasNoneStyle &&\n //If border defined with default values then border drawn based on hierarchy. \n !(leftBorder.lineStyle === 'None' && leftBorder.lineWidth === 0 && leftBorder.color === '#000000')))) {\n return leftBorder;\n // tslint:disable-next-line:max-line-length\n }\n else if (!isNullOrUndefined(leftBorder) && (leftBorder.ownerBase instanceof WBorders) && TableCellWidget.getCellOf(leftBorder.ownerBase).columnIndex === 0) {\n if (!isNullOrUndefined(tableBorders) && !isNullOrUndefined(tableBorders.left)) {\n leftBorder = tableBorders.left;\n }\n return leftBorder;\n }\n else if (!isNullOrUndefined(rowBorders)\n && !isNullOrUndefined(rowBorders.vertical) && rowBorders.vertical.lineStyle !== 'None') {\n return leftBorder = rowBorders.vertical;\n }\n else if (!isNullOrUndefined(tableBorders)\n && !isNullOrUndefined(tableBorders.vertical) && tableBorders.vertical.lineStyle !== 'None') {\n return leftBorder = tableBorders.vertical;\n }\n else {\n return leftBorder;\n }\n };\n /**\n * @private\n */\n TableCellWidget.getCellRightBorder = function (tableCell) {\n var rightBorder = undefined;\n var cellBorder = tableCell.cellFormat.borders;\n var rowBorders = !isNullOrUndefined(tableCell.ownerRow) ? tableCell.ownerRow.rowFormat.borders : undefined;\n var tableBorders = !isNullOrUndefined(tableCell.ownerTable) ? tableCell.ownerTable.tableFormat.borders : undefined;\n if (!isNullOrUndefined(cellBorder.right)) {\n rightBorder = cellBorder.right;\n }\n if (isNullOrUndefined(rightBorder)) {\n rightBorder = tableCell.getRightBorderToRenderByHierarchy(rightBorder, rowBorders, tableBorders);\n }\n if (tableCell.ownerTable.tableFormat.cellSpacing > 0) {\n rightBorder = tableCell.getRightBorderToRenderByHierarchy(rightBorder, rowBorders, tableBorders);\n }\n else {\n var nextCell = undefined;\n if (!isNullOrUndefined(tableCell.nextWidget)) {\n nextCell = tableCell.nextWidget;\n }\n // if the border is shared then choose the border based on Conflict Resolution algorithm.\n rightBorder = tableCell.getAdjacentCellRightBorder(rightBorder, nextCell);\n }\n if (isNullOrUndefined(rightBorder)) {\n rightBorder = new WBorder(tableCell.cellFormat.borders);\n }\n return rightBorder;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getAdjacentCellRightBorder = function (rightBorder, nextCell) {\n // tslint:disable-next-line:max-line-length\n if (isNullOrUndefined(nextCell) || (!isNullOrUndefined(rightBorder) && (rightBorder.lineStyle === 'None' && !rightBorder.hasNoneStyle))) {\n if (!isNullOrUndefined(rightBorder) && !(rightBorder.ownerBase.ownerBase instanceof WTableFormat)) {\n // tslint:disable-next-line:max-line-length\n return this.getRightBorderToRenderByHierarchy(rightBorder, TableRowWidget.getRowOf(rightBorder.ownerBase).rowFormat.borders, TableWidget.getTableOf(rightBorder.ownerBase).tableFormat.borders);\n }\n }\n else {\n var nextCellLeftBorder = undefined;\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(nextCell.cellFormat.borders) && !isNullOrUndefined(nextCell.cellFormat.borders.left) && nextCell.cellFormat.borders.left.lineStyle !== 'None') {\n nextCellLeftBorder = nextCell.cellFormat.borders.left;\n }\n if (!isNullOrUndefined(nextCellLeftBorder) && nextCellLeftBorder.lineStyle !== 'None') {\n return this.getBorderBasedOnPriority(rightBorder, nextCellLeftBorder);\n }\n else if (!isNullOrUndefined(rightBorder) && !(rightBorder.ownerBase.ownerBase instanceof WTableFormat)) {\n // tslint:disable-next-line:max-line-length\n return this.getRightBorderToRenderByHierarchy(rightBorder, TableRowWidget.getRowOf(rightBorder.ownerBase).rowFormat.borders, TableWidget.getTableOf(rightBorder.ownerBase).tableFormat.borders);\n }\n }\n return rightBorder;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getRightBorderToRenderByHierarchy = function (rightBorder, rowBorders, tableBorders) {\n if (!isNullOrUndefined(rightBorder) && (rightBorder.lineStyle !== 'None' || (rightBorder.hasNoneStyle &&\n //If border defined with default values then border drawn based on hierarchy. \n !(rightBorder.lineStyle === 'None' && rightBorder.lineWidth === 0 && rightBorder.color === '#000000')))) {\n return rightBorder;\n // tslint:disable-next-line:max-line-length\n }\n else if (!isNullOrUndefined(rightBorder) && (rightBorder.ownerBase instanceof WBorders) && TableCellWidget.getCellOf(rightBorder.ownerBase).columnIndex === TableCellWidget.getCellOf(rightBorder.ownerBase).ownerRow.childWidgets.length - 1) {\n if (!isNullOrUndefined(tableBorders) && !isNullOrUndefined(tableBorders.right)) {\n rightBorder = tableBorders.right;\n }\n return rightBorder;\n }\n else if (!isNullOrUndefined(rowBorders)\n && !isNullOrUndefined(rowBorders.vertical) && rowBorders.vertical.lineStyle !== 'None') {\n return rightBorder = rowBorders.vertical;\n }\n else if (!isNullOrUndefined(tableBorders)\n && !isNullOrUndefined(tableBorders.vertical) && tableBorders.vertical.lineStyle !== 'None') {\n return rightBorder = tableBorders.vertical;\n }\n else {\n return rightBorder;\n }\n };\n /**\n * @private\n */\n TableCellWidget.getCellTopBorder = function (tableCell) {\n var topBorder = undefined;\n var cellBorder = tableCell.cellFormat.borders;\n var rowBorders = !isNullOrUndefined(tableCell.ownerRow) ? tableCell.ownerRow.rowFormat.borders : undefined;\n var tableBorders = !isNullOrUndefined(tableCell.ownerTable) ? tableCell.ownerTable.tableFormat.borders : undefined;\n if (!isNullOrUndefined(cellBorder.top)) {\n topBorder = cellBorder.top;\n }\n if (isNullOrUndefined(topBorder)) {\n topBorder = tableCell.getTopBorderToRenderByHierarchy(topBorder, rowBorders, tableBorders);\n }\n if (tableCell.ownerTable.tableFormat.cellSpacing > 0) {\n topBorder = tableCell.getTopBorderToRenderByHierarchy(topBorder, rowBorders, tableBorders);\n }\n else {\n var prevTopCell = undefined;\n //ToDo: Need to analyze more to get the previous cell.\n var prevRow = tableCell.ownerRow.previousWidget;\n while (!isNullOrUndefined(prevRow) && prevRow.childWidgets.length > 0) {\n for (var i = 0; i < prevRow.childWidgets.length; i++) {\n var prevRowCell = prevRow.childWidgets[i];\n if (prevRowCell.columnIndex + prevRowCell.cellFormat.columnSpan - 1 >= tableCell.columnIndex) {\n prevTopCell = prevRow.childWidgets[i];\n break;\n }\n }\n if (!isNullOrUndefined(prevTopCell)) {\n break;\n }\n prevRow = prevRow.previousWidget;\n //If all the previous rows checked and the previous top cell is null\n // then TableCell previus row matched column index cell is taken for border calculation.\n if (isNullOrUndefined(prevRow) && isNullOrUndefined(prevTopCell)) {\n prevRow = tableCell.ownerRow.previousWidget;\n if (tableCell.columnIndex < prevRow.childWidgets.length) {\n for (var i = 0; i < prevRow.childWidgets.length; i++) {\n var prevRowCell = prevRow.childWidgets[i];\n if (prevRowCell.columnIndex === tableCell.columnIndex) {\n prevTopCell = prevRow.childWidgets[i];\n break;\n }\n }\n //If table cell Column index is greater than previous row cells count then last cell is taken as previous top cell.\n }\n else {\n // tslint:disable-next-line:max-line-length\n prevTopCell = tableCell.ownerRow.previousWidget.childWidgets[tableCell.ownerRow.previousWidget.childWidgets.length - 1];\n }\n }\n }\n //If the border is shared then choose the border based on Conflict Resolution algorithm.\n topBorder = tableCell.getPreviousCellTopBorder(topBorder, prevTopCell);\n }\n if (isNullOrUndefined(topBorder)) {\n topBorder = new WBorder(tableCell.cellFormat.borders);\n }\n return topBorder;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getPreviousCellTopBorder = function (topBorder, previousTopCell) {\n // tslint:disable-next-line:max-line-length\n if (isNullOrUndefined(previousTopCell) || (!isNullOrUndefined(topBorder) && (topBorder.lineStyle === 'None' && !topBorder.hasNoneStyle))) {\n if (!isNullOrUndefined(topBorder) && !(topBorder.ownerBase.ownerBase instanceof WTableFormat)) {\n // tslint:disable-next-line:max-line-length\n return this.getTopBorderToRenderByHierarchy(topBorder, TableRowWidget.getRowOf(topBorder.ownerBase).rowFormat.borders, TableWidget.getTableOf(topBorder.ownerBase).tableFormat.borders);\n }\n }\n else {\n var prevTopCellBottomBorder = undefined;\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(previousTopCell.cellFormat.borders) && !isNullOrUndefined(previousTopCell.cellFormat.borders.bottom) && previousTopCell.cellFormat.borders.bottom.lineStyle !== 'None') {\n prevTopCellBottomBorder = previousTopCell.cellFormat.borders.left;\n }\n if (!isNullOrUndefined(prevTopCellBottomBorder) && prevTopCellBottomBorder.lineStyle !== 'None') {\n return this.getBorderBasedOnPriority(topBorder, prevTopCellBottomBorder);\n }\n else if (!isNullOrUndefined(topBorder) && !(topBorder.ownerBase.ownerBase instanceof WTableFormat)) {\n // tslint:disable-next-line:max-line-length\n return this.getTopBorderToRenderByHierarchy(topBorder, TableRowWidget.getRowOf(topBorder.ownerBase).rowFormat.borders, TableWidget.getTableOf(topBorder.ownerBase).tableFormat.borders);\n }\n }\n return topBorder;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getTopBorderToRenderByHierarchy = function (topBorder, rowBorders, tableBorders) {\n if (!isNullOrUndefined(topBorder) && (topBorder.lineStyle !== 'None' || (topBorder.hasNoneStyle &&\n //If border defined with default values then border drawn based on hierarchy. \n !(topBorder.lineStyle === 'None' && topBorder.lineWidth === 0 && topBorder.color === '#000000')))) {\n return topBorder;\n // tslint:disable-next-line:max-line-length\n }\n else if (!isNullOrUndefined(topBorder) && (topBorder.ownerBase instanceof WBorders) && TableCellWidget.getCellOf(topBorder.ownerBase).ownerRow.rowIndex === 0) {\n if (!isNullOrUndefined(tableBorders) && !isNullOrUndefined(tableBorders.top)) {\n topBorder = tableBorders.top;\n }\n return topBorder;\n }\n else if (!isNullOrUndefined(rowBorders)\n && !isNullOrUndefined(rowBorders.horizontal) && rowBorders.horizontal.lineStyle !== 'None') {\n return topBorder = rowBorders.horizontal;\n }\n else if (!isNullOrUndefined(tableBorders)\n && !isNullOrUndefined(tableBorders.horizontal) && tableBorders.horizontal.lineStyle !== 'None') {\n return topBorder = tableBorders.horizontal;\n }\n else {\n return topBorder;\n }\n };\n /**\n * @private\n */\n TableCellWidget.getCellBottomBorder = function (tableCell) {\n var bottomBorder = undefined;\n var cellBorder = tableCell.cellFormat.borders;\n var rowBorders = !isNullOrUndefined(tableCell.ownerRow) ? tableCell.ownerRow.rowFormat.borders : undefined;\n var tableBorders = !isNullOrUndefined(tableCell.ownerTable) ? tableCell.ownerTable.tableFormat.borders : undefined;\n if (!isNullOrUndefined(cellBorder.bottom)) {\n bottomBorder = cellBorder.bottom;\n }\n if (isNullOrUndefined(bottomBorder)) {\n // tslint:disable-next-line:max-line-length\n bottomBorder = tableCell.getBottomBorderToRenderByHierarchy(bottomBorder, rowBorders, tableBorders); // select the left border based on heirarchy.\n }\n if (tableCell.ownerTable.tableFormat.cellSpacing > 0) {\n bottomBorder = tableCell.getBottomBorderToRenderByHierarchy(bottomBorder, rowBorders, tableBorders);\n }\n else {\n var nextBottomCell = undefined;\n var nextRow = tableCell.ownerRow.nextWidget;\n if (!isNullOrUndefined(nextRow) && tableCell.columnIndex < nextRow.childWidgets.length) {\n nextBottomCell = nextRow.childWidgets[tableCell.columnIndex];\n }\n //If the border is shared then choose the border based on Conflict Resolution algorithm.\n bottomBorder = tableCell.getAdjacentCellBottomBorder(bottomBorder, nextBottomCell);\n }\n if (isNullOrUndefined(bottomBorder)) {\n bottomBorder = new WBorder(tableCell.cellFormat.borders);\n }\n return bottomBorder;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getAdjacentCellBottomBorder = function (bottomBorder, nextBottomCell) {\n // tslint:disable-next-line:max-line-length\n if (isNullOrUndefined(nextBottomCell) || (!isNullOrUndefined(bottomBorder) && (bottomBorder.lineStyle === 'None' && !bottomBorder.hasNoneStyle))) {\n if (!isNullOrUndefined(bottomBorder) && !(bottomBorder.ownerBase.ownerBase instanceof WTableFormat)) {\n // tslint:disable-next-line:max-line-length\n return this.getBottomBorderToRenderByHierarchy(bottomBorder, TableRowWidget.getRowOf(bottomBorder.ownerBase).rowFormat.borders, TableWidget.getTableOf(bottomBorder.ownerBase).tableFormat.borders);\n }\n }\n else {\n var prevBottomCellTopBorder = undefined;\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(nextBottomCell.cellFormat.borders) && !isNullOrUndefined(nextBottomCell.cellFormat.borders.top) && nextBottomCell.cellFormat.borders.top.lineStyle !== 'None') {\n prevBottomCellTopBorder = nextBottomCell.cellFormat.borders.top;\n }\n if (!isNullOrUndefined(prevBottomCellTopBorder) && prevBottomCellTopBorder.lineStyle !== 'None') {\n return this.getBorderBasedOnPriority(bottomBorder, prevBottomCellTopBorder);\n }\n else if (!isNullOrUndefined(bottomBorder) && !(bottomBorder.ownerBase.ownerBase instanceof WTableFormat)) {\n // tslint:disable-next-line:max-line-length\n return this.getBottomBorderToRenderByHierarchy(bottomBorder, TableRowWidget.getRowOf(bottomBorder.ownerBase).rowFormat.borders, TableWidget.getTableOf(bottomBorder.ownerBase).tableFormat.borders);\n }\n }\n return bottomBorder;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getBottomBorderToRenderByHierarchy = function (bottomBorder, rowBorders, tableBorders) {\n if (!isNullOrUndefined(bottomBorder) && (bottomBorder.lineStyle !== 'None' || (bottomBorder.hasNoneStyle &&\n //If border defined with default values then border drawn based on hierarchy. \n !(bottomBorder.lineStyle === 'None' && bottomBorder.lineWidth === 0 && bottomBorder.color === '#000000')))) {\n return bottomBorder;\n // tslint:disable-next-line:max-line-length\n }\n else if (!isNullOrUndefined(bottomBorder) && (bottomBorder.ownerBase instanceof WBorders) && TableCellWidget.getCellOf(bottomBorder.ownerBase).ownerRow.rowIndex + TableCellWidget.getCellOf(bottomBorder.ownerBase).cellFormat.rowSpan === TableCellWidget.getCellOf(bottomBorder.ownerBase).ownerTable.childWidgets.length) {\n if (!isNullOrUndefined(tableBorders) && !isNullOrUndefined(tableBorders.bottom)) {\n bottomBorder = tableBorders.bottom;\n }\n return bottomBorder;\n }\n else if (!isNullOrUndefined(rowBorders)\n && !isNullOrUndefined(rowBorders.horizontal) && rowBorders.horizontal.lineStyle !== 'None') {\n return bottomBorder = rowBorders.horizontal;\n }\n else if (!isNullOrUndefined(tableBorders)\n && !isNullOrUndefined(tableBorders.horizontal) && tableBorders.horizontal.lineStyle !== 'None') {\n return bottomBorder = tableBorders.horizontal;\n }\n else {\n return bottomBorder;\n }\n };\n TableCellWidget.prototype.convertHexToRGB = function (colorCode) {\n if (colorCode) {\n colorCode = colorCode.replace(/[^0-9A-‌​F]/gi, ''); // To remove # from color code string.\n var colCodeNo = parseInt(colorCode, 16);\n var r = (colCodeNo >> 16) & 255;\n var g = (colCodeNo >> 8) & 255;\n var b = colCodeNo & 255;\n return { 'r': r, 'g': g, 'b': b };\n }\n return undefined;\n };\n /**\n * @private\n */\n TableCellWidget.getCellOf = function (node) {\n if (node instanceof WBorders) {\n if (node.ownerBase instanceof WCellFormat && node.ownerBase.ownerBase instanceof TableCellWidget) {\n return node.ownerBase.ownerBase;\n }\n else {\n return undefined;\n }\n }\n return undefined;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.destroyInternal = function (viewer) {\n // let viewer: LayoutViewer = undefined;\n // let page: Page = this.getPage();\n // if (!isNullOrUndefined(page ))\n // viewer = page.viewer;\n if (!isNullOrUndefined(this.childWidgets)) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n var widget = this.childWidgets[i];\n if (widget instanceof ParagraphWidget) {\n widget.destroyInternal(viewer);\n }\n else {\n widget.destroyInternal(viewer);\n }\n i--;\n }\n this.childWidgets = undefined;\n }\n this.destroy();\n };\n /**\n * @private\n */\n TableCellWidget.prototype.clone = function () {\n var cell = new TableCellWidget();\n cell.cellFormat.copyFormat(this.cellFormat);\n for (var i = 0; i < this.childWidgets.length; i++) {\n var block = this.childWidgets[i].clone();\n cell.childWidgets.push(block);\n block.containerWidget = cell;\n block.index = i;\n }\n cell.leftBorderWidth = this.leftBorderWidth;\n cell.rightBorderWidth = this.rightBorderWidth;\n if (this.margin) {\n cell.margin = this.margin.clone();\n }\n cell.columnIndex = this.columnIndex;\n cell.x = this.x;\n cell.y = this.y;\n cell.height = this.height;\n cell.width = this.width;\n return cell;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.destroy = function () {\n // if (this.cellFormat) {\n // this.cellFormat.destroy();\n // }\n this.cellFormat = undefined;\n this.rowIndex = undefined;\n this.columnIndex = undefined;\n _super.prototype.destroy.call(this);\n };\n return TableCellWidget;\n}(BlockWidget));\nexport { TableCellWidget };\n/**\n * @private\n */\nvar LineWidget = /** @class */ (function () {\n /**\n * Initialize the constructor of LineWidget\n */\n function LineWidget(paragraphWidget) {\n /**\n * @private\n */\n this.children = [];\n /**\n * @private\n */\n this.x = 0;\n /**\n * @private\n */\n this.y = 0;\n /**\n * @private\n */\n this.width = 0;\n /**\n * @private\n */\n this.height = 0;\n this.paragraph = paragraphWidget;\n }\n Object.defineProperty(LineWidget.prototype, \"indexInOwner\", {\n /**\n * @private\n */\n get: function () {\n if (this.paragraph && this.paragraph.childWidgets) {\n return this.paragraph.childWidgets.indexOf(this);\n }\n return -1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LineWidget.prototype, \"nextLine\", {\n /**\n * @private\n */\n get: function () {\n var paragraph = this.paragraph;\n var lineIndex = this.indexInOwner;\n if (lineIndex <= paragraph.childWidgets.length - 2) {\n return paragraph.childWidgets[lineIndex + 1];\n }\n else if (paragraph.nextSplitWidget) {\n var line = paragraph.nextSplitWidget.firstChild;\n if (line instanceof LineWidget && line.paragraph.equals(this.paragraph)) {\n return line;\n }\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LineWidget.prototype, \"previousLine\", {\n /**\n * @private\n */\n get: function () {\n var paragraph = this.paragraph;\n var lineIndex = this.indexInOwner;\n var splitParagraph = paragraph.previousSplitWidget;\n if (lineIndex > 0) {\n return paragraph.childWidgets[lineIndex - 1];\n }\n else if (splitParagraph instanceof ParagraphWidget) {\n var line = splitParagraph.lastChild;\n if (line instanceof LineWidget && line.paragraph.equals(this.paragraph)) {\n return line;\n }\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n LineWidget.prototype.isFirstLine = function () {\n var index = this.indexInOwner;\n if (index > -1 && this.paragraph.previousSplitWidget === undefined) {\n return index === 0;\n }\n return false;\n };\n /**\n * @private\n */\n LineWidget.prototype.isLastLine = function () {\n var index = this.indexInOwner;\n if (index > -1 && this.paragraph.nextSplitWidget === undefined) {\n return index === this.paragraph.childWidgets.length - 1;\n }\n return false;\n };\n /**\n * @private\n */\n LineWidget.prototype.getOffset = function (inline, index) {\n if (isNullOrUndefined(inline)) {\n return index;\n }\n var textIndex = index;\n var line = inline.line;\n var lineIndex = inline.line.paragraph.childWidgets.indexOf(inline.line);\n for (var i = 0; i < line.children.length; i++) {\n var inlineElement = line.children[i];\n if (inline === inlineElement) {\n break;\n }\n if (inlineElement instanceof ListTextElementBox) {\n continue;\n }\n textIndex += inlineElement.length;\n }\n return textIndex;\n };\n /**\n * @private\n */\n LineWidget.prototype.getEndOffset = function () {\n var startOffset = 0;\n var count = 0;\n for (var i = 0; i < this.children.length; i++) {\n var inlineElement = this.children[i];\n if (inlineElement.length === 0) {\n continue;\n }\n if (inlineElement instanceof ListTextElementBox) {\n continue;\n }\n if (inlineElement instanceof TextElementBox || inlineElement instanceof ImageElementBox\n || inlineElement instanceof BookmarkElementBox || (inlineElement instanceof FieldElementBox\n && HelperMethods.isLinkedFieldCharacter(inlineElement))) {\n startOffset = count + inlineElement.length;\n }\n count += inlineElement.length;\n }\n return startOffset;\n };\n /**\n * @private\n */\n LineWidget.prototype.getInline = function (offset, indexInInline) {\n var inlineElement = undefined;\n var count = 0;\n var isStarted = false;\n if (this.children.length === 0) {\n if (this.previousLine) {\n var elementBox = this.previousLine.children[this.previousLine.children.length - 1];\n if (elementBox instanceof TextElementBox && elementBox.text === '\\v') {\n inlineElement = this.previousLine.children[this.previousLine.children.length - 1];\n indexInInline = 1;\n return { 'element': inlineElement, 'index': indexInInline };\n }\n }\n }\n for (var i = 0; i < this.children.length; i++) {\n inlineElement = this.children[i];\n if (inlineElement instanceof ListTextElementBox) {\n continue;\n }\n if (!isStarted && (inlineElement instanceof TextElementBox || inlineElement instanceof ImageElementBox\n || inlineElement instanceof BookmarkElementBox\n || inlineElement instanceof FieldElementBox && HelperMethods.isLinkedFieldCharacter(inlineElement))) {\n isStarted = true;\n }\n if (isStarted && offset <= count + inlineElement.length) {\n indexInInline = (offset - count);\n return { 'element': inlineElement, 'index': indexInInline };\n }\n count += inlineElement.length;\n }\n if (offset > count) {\n indexInInline = isNullOrUndefined(inlineElement) ? offset : inlineElement.length;\n }\n return { 'element': inlineElement, 'index': indexInInline };\n };\n /**\n * @private\n */\n LineWidget.prototype.getHierarchicalIndex = function (hierarchicalIndex) {\n var node = this;\n hierarchicalIndex = node.paragraph.childWidgets.indexOf(node) + ';' + hierarchicalIndex;\n if (node.paragraph instanceof BlockWidget) {\n return node.paragraph.getHierarchicalIndex(hierarchicalIndex);\n }\n return hierarchicalIndex;\n };\n /**\n * @private\n */\n LineWidget.prototype.clone = function () {\n var line = new LineWidget(undefined);\n for (var j = 0; j < this.children.length; j++) {\n var element = this.children[j];\n var clone = element.clone();\n line.children.push(clone);\n clone.line = line;\n }\n line.width = this.width;\n line.height = this.height;\n return line;\n };\n /**\n * @private\n */\n LineWidget.prototype.destroy = function () {\n if (!isNullOrUndefined(this.children)) {\n for (var i = 0; i < this.children.length; i++) {\n this.children[i].destroy();\n }\n this.children = [];\n }\n this.children = undefined;\n if (this.paragraph) {\n this.paragraph.removeChild(this.indexInOwner);\n }\n this.paragraph = undefined;\n this.x = undefined;\n this.y = undefined;\n this.width = undefined;\n this.height = undefined;\n };\n return LineWidget;\n}());\nexport { LineWidget };\n/**\n * @private\n */\nvar ElementBox = /** @class */ (function () {\n /**\n * Initialize the constructor of ElementBox\n */\n function ElementBox() {\n /**\n * @private\n */\n this.x = 0;\n /**\n * @private\n */\n this.y = 0;\n /**\n * @private\n */\n this.width = 0;\n /**\n * @private\n */\n this.height = 0;\n /**\n * @private\n */\n this.margin = new Margin(0, 0, 0, 0);\n /**\n * @private\n */\n this.characterFormat = undefined;\n this.characterFormat = new WCharacterFormat(this);\n this.margin = new Margin(0, 0, 0, 0);\n }\n /**\n * @private\n */\n ElementBox.prototype.linkFieldCharacter = function (viewer) {\n if (!(this instanceof FieldElementBox)) {\n return;\n }\n if (this.fieldType === 0) {\n var fieldBegin = this;\n if (isNullOrUndefined(fieldBegin.fieldEnd)) {\n this.linkFieldTraversingForward(this.line, fieldBegin, fieldBegin);\n if (viewer.fields.indexOf(fieldBegin) === -1) {\n viewer.fields.push(fieldBegin);\n }\n }\n }\n else if (this.fieldType === 2) {\n var fieldSeparator = this;\n //Links the field begin for the current separator.\n if (isNullOrUndefined(fieldSeparator.fieldBegin)) {\n this.linkFieldTraversingBackwardSeparator(this.line, fieldSeparator, fieldSeparator);\n }\n fieldSeparator.fieldBegin.fieldSeparator = fieldSeparator;\n if (!isNullOrUndefined(fieldSeparator.fieldBegin)) {\n //Links to field end traversing from field separator.\n var isFieldEnd = this.linkFieldTraversingForward(this.line, fieldSeparator.fieldBegin, fieldSeparator);\n if (isNullOrUndefined(fieldSeparator.fieldEnd) && isFieldEnd) {\n fieldSeparator.fieldEnd = fieldSeparator.fieldBegin.fieldEnd;\n }\n if (fieldSeparator.fieldEnd) {\n fieldSeparator.fieldEnd.fieldSeparator = fieldSeparator;\n }\n }\n }\n else {\n var fieldEnd = this;\n //Links the field begin and separator for the current end.\n if (isNullOrUndefined(fieldEnd.fieldBegin)) {\n this.linkFieldTraversingBackward(this.line, fieldEnd, fieldEnd);\n }\n }\n };\n /**\n * @private\n */\n ElementBox.prototype.linkFieldTraversingBackward = function (line, fieldEnd, previousNode) {\n var k = line.children.length - 1;\n if (line.children.indexOf(previousNode) > -1) {\n k = line.children.indexOf(previousNode) - 1;\n }\n for (var j = k; j >= 0; j--) {\n var childNode = line.children[j];\n if (childNode instanceof FieldElementBox) {\n if (childNode.fieldType === 0) {\n if (isNullOrUndefined(childNode.fieldEnd)) {\n fieldEnd.fieldBegin = childNode;\n if (isNullOrUndefined(childNode.fieldEnd)) {\n childNode.fieldEnd = fieldEnd;\n }\n if (fieldEnd.fieldSeparator && isNullOrUndefined(fieldEnd.fieldSeparator.fieldBegin)) {\n fieldEnd.fieldSeparator.fieldBegin = childNode;\n if (isNullOrUndefined(childNode.fieldSeparator)) {\n childNode.fieldSeparator = fieldEnd.fieldSeparator;\n }\n }\n }\n return !isNullOrUndefined(fieldEnd.fieldBegin);\n }\n else if (childNode.fieldType === 2 && isNullOrUndefined(childNode.fieldEnd)) {\n fieldEnd.fieldSeparator = childNode;\n childNode.fieldEnd = fieldEnd;\n if (!isNullOrUndefined(childNode.fieldBegin)) {\n fieldEnd.fieldBegin = childNode.fieldBegin;\n }\n }\n }\n }\n if (line.previousLine) {\n this.linkFieldTraversingBackward(line.previousLine, fieldEnd, this);\n }\n else if (line.paragraph.previousRenderedWidget instanceof ParagraphWidget) {\n var prevParagraph = line.paragraph.previousRenderedWidget;\n // tslint:disable-next-line:max-line-length\n this.linkFieldTraversingBackward(prevParagraph.childWidgets[prevParagraph.childWidgets.length - 1], fieldEnd, this);\n }\n return true;\n };\n /**\n * @private\n */\n ElementBox.prototype.linkFieldTraversingForward = function (line, fieldBegin, previousNode) {\n var i = 0;\n if (line.children.indexOf(previousNode) > -1) {\n i = line.children.indexOf(previousNode) + 1;\n }\n for (var j = i; j < line.children.length; j++) {\n var node = line.children[j];\n if (node instanceof FieldElementBox) {\n if (node.fieldType === 1) {\n if (isNullOrUndefined(node.fieldBegin)) {\n fieldBegin.fieldEnd = node;\n }\n if (fieldBegin.fieldEnd && isNullOrUndefined(fieldBegin.fieldEnd.fieldBegin)) {\n fieldBegin.fieldEnd.fieldBegin = fieldBegin;\n }\n return true;\n }\n else if (isNullOrUndefined(fieldBegin.fieldSeparator)) {\n if (node.fieldType === 2 && isNullOrUndefined(node.fieldBegin)) {\n fieldBegin.fieldSeparator = node;\n if (!isNullOrUndefined(node.fieldEnd)) {\n fieldBegin.fieldEnd = node.fieldEnd;\n return true;\n }\n }\n else {\n return false;\n }\n }\n }\n }\n if (line.nextLine) {\n this.linkFieldTraversingForward(line.nextLine, fieldBegin, this);\n }\n else if (line.paragraph.nextRenderedWidget instanceof ParagraphWidget) {\n this.linkFieldTraversingForward(line.paragraph.nextRenderedWidget.childWidgets[0], fieldBegin, this);\n }\n return true;\n };\n /**\n * @private\n */\n ElementBox.prototype.linkFieldTraversingBackwardSeparator = function (line, fieldSeparator, previousNode) {\n var index = line.children.length - 1;\n if (line.children.indexOf(previousNode) > -1) {\n index = line.children.indexOf(previousNode) - 1;\n }\n for (var i = index; i >= 0; i--) {\n var childElement = line.children[i];\n if (childElement instanceof FieldElementBox) {\n if (childElement instanceof FieldElementBox && childElement.fieldType === 0) {\n if (isNullOrUndefined(childElement.fieldSeparator)) {\n fieldSeparator.fieldBegin = childElement;\n }\n return !isNullOrUndefined(fieldSeparator.fieldBegin);\n }\n }\n }\n if (line.previousLine) {\n this.linkFieldTraversingBackwardSeparator(line.previousLine, fieldSeparator, this);\n }\n else if (line.paragraph.nextRenderedWidget instanceof ParagraphWidget) {\n // tslint:disable-next-line:max-line-length\n line = line.paragraph.previousRenderedWidget.childWidgets[line.paragraph.previousRenderedWidget.childWidgets.length - 1];\n this.linkFieldTraversingBackwardSeparator(line, fieldSeparator, this);\n }\n else {\n return true;\n }\n return true;\n };\n Object.defineProperty(ElementBox.prototype, \"length\", {\n /**\n * @private\n */\n get: function () {\n return this.getLength();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ElementBox.prototype, \"indexInOwner\", {\n /**\n * @private\n */\n get: function () {\n return this.line instanceof LineWidget && this.line.children ? this.line.children.indexOf(this) : -1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ElementBox.prototype, \"previousElement\", {\n /**\n * @private\n */\n get: function () {\n var index = this.indexInOwner;\n if (index > 0 && index < this.line.children.length) {\n return this.line.children[index - 1];\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ElementBox.prototype, \"nextElement\", {\n /**\n * @private\n */\n get: function () {\n var index = this.indexInOwner;\n if (index > -1 && index < this.line.children.length - 1) {\n return this.line.children[index + 1];\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ElementBox.prototype, \"nextNode\", {\n /**\n * @private\n */\n get: function () {\n var index = this.line.children.indexOf(this);\n var lineIndex = this.line.paragraph.childWidgets.indexOf(this.line);\n if (index < this.line.children.length - 1) {\n return this.line.children[index + 1];\n }\n else if (lineIndex < this.line.paragraph.childWidgets.length - 1) {\n return this.line.paragraph.childWidgets[lineIndex + 1].children[0];\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ElementBox.prototype, \"previousNode\", {\n /**\n * @private\n */\n get: function () {\n var index = this.line.children.indexOf(this);\n var lineIndex = this.line.paragraph.childWidgets.indexOf(this.line);\n if (index > 0) {\n return this.line.children[index - 1];\n }\n else if (lineIndex > 0) {\n var lineWidget = this.line.paragraph.childWidgets[lineIndex - 1];\n return lineWidget.children[lineWidget.children.length - 1];\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ElementBox.prototype, \"paragraph\", {\n /**\n * @private\n */\n get: function () {\n if (this.line) {\n return this.line.paragraph;\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ElementBox.prototype.destroy = function () {\n if (!isNullOrUndefined(this.line) && this.line.children && this.line.children.indexOf(this) > -1) {\n var index = this.line.children.indexOf(this);\n this.line.children.splice(index, 1);\n }\n this.line = undefined;\n if (this.characterFormat) {\n this.characterFormat.destroy();\n }\n this.characterFormat = undefined;\n if (this.margin) {\n this.margin.destroy();\n }\n this.margin = undefined;\n this.x = undefined;\n this.y = undefined;\n this.width = undefined;\n this.height = undefined;\n };\n /**\n * @private\n */\n ElementBox.objectCharacter = String.fromCharCode(65532);\n return ElementBox;\n}());\nexport { ElementBox };\n/**\n * @private\n */\nvar FieldElementBox = /** @class */ (function (_super) {\n __extends(FieldElementBox, _super);\n function FieldElementBox(type) {\n var _this = _super.call(this) || this;\n /**\n * @private\n */\n _this.fieldType = 0;\n /**\n * @private\n */\n _this.hasFieldEnd = false;\n _this.fieldBeginInternal = undefined;\n _this.fieldSeparatorInternal = undefined;\n _this.fieldEndInternal = undefined;\n _this.fieldType = type;\n return _this;\n }\n Object.defineProperty(FieldElementBox.prototype, \"fieldBegin\", {\n get: function () {\n return this.fieldBeginInternal;\n },\n set: function (field) {\n this.fieldBeginInternal = field;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FieldElementBox.prototype, \"fieldSeparator\", {\n get: function () {\n return this.fieldSeparatorInternal;\n },\n set: function (field) {\n this.fieldSeparatorInternal = field;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FieldElementBox.prototype, \"fieldEnd\", {\n get: function () {\n return this.fieldEndInternal;\n },\n set: function (field) {\n this.fieldEndInternal = field;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n FieldElementBox.prototype.getLength = function () {\n return 1;\n };\n /**\n * @private\n */\n FieldElementBox.prototype.clone = function () {\n var field = new FieldElementBox(this.fieldType);\n field.characterFormat.copyFormat(this.characterFormat);\n if (this.margin) {\n field.margin = this.margin.clone();\n }\n field.width = this.width;\n field.height = this.height;\n return field;\n };\n /**\n * @private\n */\n FieldElementBox.prototype.destroy = function () {\n this.fieldType = undefined;\n this.hasFieldEnd = undefined;\n this.fieldBeginInternal = undefined;\n this.fieldEndInternal = undefined;\n this.fieldSeparatorInternal = undefined;\n _super.prototype.destroy.call(this);\n };\n return FieldElementBox;\n}(ElementBox));\nexport { FieldElementBox };\n/**\n * @private\n */\nvar TextElementBox = /** @class */ (function (_super) {\n __extends(TextElementBox, _super);\n function TextElementBox() {\n var _this = _super.call(this) || this;\n /**\n * @private\n */\n _this.baselineOffset = 0;\n /**\n * @private\n */\n _this.text = '';\n return _this;\n }\n /**\n * @private\n */\n TextElementBox.prototype.getLength = function () {\n return this.text ? this.text.length : 0;\n };\n /**\n * @private\n */\n TextElementBox.prototype.clone = function () {\n var span = new TextElementBox();\n span.characterFormat.copyFormat(this.characterFormat);\n span.text = this.text;\n if (this.margin) {\n span.margin = this.margin.clone();\n }\n span.width = this.width;\n span.height = this.height;\n return span;\n };\n /**\n * @private\n */\n TextElementBox.prototype.destroy = function () {\n this.text = undefined;\n _super.prototype.destroy.call(this);\n };\n return TextElementBox;\n}(ElementBox));\nexport { TextElementBox };\n/**\n * @private\n */\nvar FieldTextElementBox = /** @class */ (function (_super) {\n __extends(FieldTextElementBox, _super);\n function FieldTextElementBox() {\n var _this = _super.call(this) || this;\n _this.fieldText = '';\n return _this;\n }\n Object.defineProperty(FieldTextElementBox.prototype, \"text\", {\n get: function () {\n return this.fieldText;\n },\n set: function (value) {\n this.fieldText = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n FieldTextElementBox.prototype.clone = function () {\n var span = new FieldTextElementBox();\n span.characterFormat.copyFormat(this.characterFormat);\n span.fieldBegin = this.fieldBegin;\n span.text = this.text;\n if (this.margin) {\n span.margin = this.margin.clone();\n }\n span.width = this.width;\n span.height = this.height;\n return span;\n };\n return FieldTextElementBox;\n}(TextElementBox));\nexport { FieldTextElementBox };\n/**\n * @private\n */\nvar TabElementBox = /** @class */ (function (_super) {\n __extends(TabElementBox, _super);\n function TabElementBox() {\n var _this = _super.call(this) || this;\n /**\n * @private\n */\n _this.tabText = '';\n /**\n * @private\n */\n _this.tabLeader = 'None';\n return _this;\n }\n /**\n * @private\n */\n TabElementBox.prototype.destroy = function () {\n this.tabText = undefined;\n this.tabLeader = undefined;\n };\n /**\n * @private\n */\n TabElementBox.prototype.clone = function () {\n var span = new TabElementBox();\n span.characterFormat.copyFormat(this.characterFormat);\n span.tabText = this.tabText;\n span.tabLeader = this.tabLeader;\n span.text = this.text;\n if (this.margin) {\n span.margin = this.margin.clone();\n }\n span.width = this.width;\n span.height = this.height;\n return span;\n };\n return TabElementBox;\n}(TextElementBox));\nexport { TabElementBox };\n/**\n * @private\n */\nvar BookmarkElementBox = /** @class */ (function (_super) {\n __extends(BookmarkElementBox, _super);\n function BookmarkElementBox(type) {\n var _this = _super.call(this) || this;\n _this.bookmarkTypeIn = 0;\n _this.refereneceIn = undefined;\n _this.nameIn = '';\n _this.bookmarkTypeIn = type;\n return _this;\n }\n Object.defineProperty(BookmarkElementBox.prototype, \"bookmarkType\", {\n /**\n * @private\n */\n get: function () {\n return this.bookmarkTypeIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BookmarkElementBox.prototype, \"name\", {\n /**\n * @private\n */\n get: function () {\n return this.nameIn;\n },\n /**\n * @private\n */\n set: function (name) {\n this.nameIn = name;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BookmarkElementBox.prototype, \"reference\", {\n /**\n * @private\n */\n get: function () {\n return this.refereneceIn;\n },\n /**\n * @private\n */\n set: function (reference) {\n this.refereneceIn = reference;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n BookmarkElementBox.prototype.getLength = function () {\n return 1;\n };\n /**\n * @private\n */\n BookmarkElementBox.prototype.destroy = function () {\n this.name = undefined;\n this.reference = undefined;\n this.bookmarkTypeIn = undefined;\n };\n /**\n * Clones the bookmark element box.\n * @param element - book mark element\n */\n /**\n * @private\n */\n BookmarkElementBox.prototype.clone = function () {\n var span = new BookmarkElementBox(this.bookmarkType);\n span.name = this.name;\n span.reference = this.reference;\n if (this.margin) {\n span.margin = this.margin.clone();\n }\n span.width = this.width;\n span.height = this.height;\n return span;\n };\n return BookmarkElementBox;\n}(ElementBox));\nexport { BookmarkElementBox };\n/**\n * @private\n */\nvar ImageElementBox = /** @class */ (function (_super) {\n __extends(ImageElementBox, _super);\n function ImageElementBox(isInlineImage) {\n var _this = _super.call(this) || this;\n _this.imageStr = '';\n _this.imgElement = undefined;\n _this.isInlineImageIn = true;\n /**\n * @private\n */\n _this.isMetaFile = false;\n _this.isInlineImageIn = isInlineImage;\n return _this;\n }\n Object.defineProperty(ImageElementBox.prototype, \"isInlineImage\", {\n /**\n * @private\n */\n get: function () {\n return this.isInlineImageIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageElementBox.prototype, \"element\", {\n /**\n * @private\n */\n get: function () {\n if (isNullOrUndefined(this.imgElement)) {\n this.imgElement = document.createElement('img');\n }\n return this.imgElement;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageElementBox.prototype, \"length\", {\n /**\n * @private\n */\n get: function () {\n return 1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageElementBox.prototype, \"imageString\", {\n /**\n * @private\n */\n get: function () {\n return this.imageStr;\n },\n /**\n * @private\n */\n set: function (value) {\n this.imageStr = value;\n if (!isNullOrUndefined(value)) {\n this.element.src = this.imageStr;\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ImageElementBox.prototype.getLength = function () {\n return 1;\n };\n /**\n * @private\n */\n ImageElementBox.prototype.clone = function () {\n var image = new ImageElementBox(this.isInlineImage);\n image.characterFormat.copyFormat(this.characterFormat);\n image.imageString = this.imageString;\n image.isMetaFile = this.isMetaFile;\n image.width = this.width;\n image.height = this.height;\n if (this.margin) {\n image.margin = this.margin.clone();\n }\n return image;\n };\n /**\n * @private\n */\n ImageElementBox.prototype.destroy = function () {\n this.imgElement = undefined;\n this.imageString = undefined;\n this.isInlineImageIn = undefined;\n _super.prototype.destroy.call(this);\n };\n return ImageElementBox;\n}(ElementBox));\nexport { ImageElementBox };\n/**\n * @private\n */\nvar ListTextElementBox = /** @class */ (function (_super) {\n __extends(ListTextElementBox, _super);\n function ListTextElementBox(listLevel, isListFollowCharacter) {\n var _this = _super.call(this) || this;\n /**\n * @private\n */\n _this.baselineOffset = 0;\n /**\n * @private\n */\n _this.isFollowCharacter = false;\n _this.listLevel = listLevel;\n _this.isFollowCharacter = isListFollowCharacter;\n return _this;\n }\n /**\n * @private\n */\n ListTextElementBox.prototype.getLength = function () {\n return this.text ? this.text.length : 0;\n };\n /**\n * @private\n */\n ListTextElementBox.prototype.clone = function () {\n var list = new ListTextElementBox(this.listLevel, this.isFollowCharacter);\n list.text = this.text;\n list.baselineOffset = this.baselineOffset;\n if (this.margin) {\n list.margin = this.margin.clone();\n }\n list.width = this.width;\n list.height = this.height;\n return list;\n };\n /**\n * @private\n */\n ListTextElementBox.prototype.destroy = function () {\n this.text = undefined;\n _super.prototype.destroy.call(this);\n };\n return ListTextElementBox;\n}(ElementBox));\nexport { ListTextElementBox };\n/**\n * @private\n */\nvar Page = /** @class */ (function () {\n /**\n * Initialize the constructor of Page\n */\n function Page() {\n /**\n * Specifies the Bonding Rectangle\n * @private\n */\n this.boundingRectangle = new Rect(96, 96, 816, 1056);\n /**\n * @private\n */\n this.repeatHeaderRowTableWidget = false;\n /**\n * Specifies the bodyWidgets\n * @default []\n * @private\n */\n this.bodyWidgets = [];\n /**\n * @private\n */\n this.headerWidget = undefined;\n /**\n * @private\n */\n this.footerWidget = undefined;\n // let text: string = 'DocumentEditor';\n }\n Object.defineProperty(Page.prototype, \"index\", {\n /**\n * @private\n */\n get: function () {\n if (this.viewer) {\n return this.viewer.pages.indexOf(this);\n }\n return -1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Page.prototype, \"previousPage\", {\n /**\n * @private\n */\n get: function () {\n var index = this.index;\n if (index > 0) {\n return this.viewer.pages[index - 1];\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Page.prototype, \"nextPage\", {\n /**\n * @private\n */\n get: function () {\n var index = this.index;\n if (index < this.viewer.pages.length - 1) {\n return this.viewer.pages[index + 1];\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Page.prototype, \"sectionIndex\", {\n /**\n * @private\n */\n get: function () {\n if (this.bodyWidgets.length > 0) {\n return this.bodyWidgets[0].index;\n }\n return -1;\n },\n enumerable: true,\n configurable: true\n });\n Page.prototype.destroy = function () {\n if (this.headerWidget) {\n this.headerWidget.destroy();\n }\n this.headerWidget = undefined;\n if (this.footerWidget) {\n this.footerWidget.destroy();\n }\n this.footerWidget = undefined;\n this.bodyWidgets = [];\n this.bodyWidgets = undefined;\n if (!isNullOrUndefined(this.viewer)) {\n if (!isNullOrUndefined(this.viewer.pages)) {\n this.viewer.removePage(this);\n }\n }\n this.viewer = undefined;\n };\n return Page;\n}());\nexport { Page };\n/**\n * @private\n */\nvar WTableHolder = /** @class */ (function () {\n function WTableHolder() {\n this.tableColumns = [];\n /**\n * @private\n */\n this.tableWidth = 0;\n }\n Object.defineProperty(WTableHolder.prototype, \"columns\", {\n get: function () {\n return this.tableColumns;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n WTableHolder.prototype.resetColumns = function () {\n for (var i = 0; i < this.tableColumns.length; i++) {\n this.tableColumns[i].destroy();\n }\n this.tableColumns = [];\n };\n /**\n * @private\n */\n WTableHolder.prototype.getPreviousSpannedCellWidth = function (previousColumnIndex, curColumnIndex) {\n var width = 0;\n for (var i = previousColumnIndex; i < curColumnIndex; i++) {\n width += this.tableColumns[i].preferredWidth;\n }\n return width;\n };\n /**\n * @private\n */\n WTableHolder.prototype.addColumns = function (currentColumnIndex, columnSpan, width, minWidth, offset) {\n for (var i = this.columns.length; i < columnSpan; i++) {\n this.columns.push(new WColumn());\n }\n var availableWidth = 0;\n for (var j = currentColumnIndex; j < columnSpan; j++) {\n availableWidth += this.columns[j].preferredWidth;\n }\n // If width to add is greater than preferred width, then preferred width will be increased.\n // In case of Gridspan > 1, only last grid column width will be updated.\n var gridSpan = columnSpan - currentColumnIndex;\n if (!(gridSpan > 1) && availableWidth < width) {\n this.columns[columnSpan - 1].preferredWidth += (width - availableWidth);\n }\n if (minWidth > this.columns[columnSpan - 1].minWidth) {\n this.columns[columnSpan - 1].minWidth = minWidth;\n }\n if (offset > this.columns[columnSpan - 1].endOffset) {\n this.columns[columnSpan - 1].endOffset = offset;\n }\n };\n /**\n * @private\n */\n WTableHolder.prototype.getTotalWidth = function () {\n var width = 0;\n for (var i = 0; i < this.columns.length; i++) {\n var column = this.columns[i];\n width += column.preferredWidth;\n }\n return width;\n };\n /**\n * @private\n */\n WTableHolder.prototype.isFitColumns = function (containerWidth, preferredTableWidth, isAutoWidth) {\n // Gets total preferred width.\n var totalColumnWidth = this.getTotalWidth();\n // If auto table width, based on total column widths, minimum value will be updated.\n if (isAutoWidth) {\n this.tableWidth = preferredTableWidth > totalColumnWidth ? totalColumnWidth : preferredTableWidth;\n }\n else {\n this.tableWidth = preferredTableWidth;\n }\n // If total columns width doesn't match table width, then all grid column widths will be updated by even factor.\n // If totalColumnWidth < TableWidth, all grid columns are enlarged. Otherwise shrinked.\n if (totalColumnWidth !== this.tableWidth) {\n var factor = this.tableWidth / totalColumnWidth;\n factor = isNaN(factor) ? 1 : factor;\n for (var i = 0; i < this.columns.length; i++) {\n var column = this.columns[i];\n //column.PreferredWidth = factor * column.PreferredWidth;\n if (factor * column.preferredWidth < column.minWidth) {\n return false;\n }\n }\n return true;\n }\n else {\n return true;\n }\n };\n /**\n * @private\n */\n WTableHolder.prototype.fitColumns = function (containerWidth, preferredTableWidth, isAutoWidth) {\n // Gets total preferred width.\n var totalColumnWidth = this.getTotalWidth();\n // If auto table width, based on total column widths, minimum value will be updated.\n if (isAutoWidth) {\n this.tableWidth = preferredTableWidth > totalColumnWidth ? totalColumnWidth : preferredTableWidth;\n }\n else {\n this.tableWidth = preferredTableWidth;\n }\n // If total columns width doesn't match table width, then all grid column widths will be updated by even factor.\n // If totalColumnWidth < TableWidth, all grid columns are enlarged. Otherwise shrinked.\n if (totalColumnWidth !== this.tableWidth) {\n var factor = this.tableWidth / totalColumnWidth;\n for (var i = 0; i < this.columns.length; i++) {\n var column = this.columns[i];\n column.preferredWidth = factor * column.preferredWidth;\n }\n }\n };\n /**\n * @private\n */\n WTableHolder.prototype.getCellWidth = function (columnIndex, columnSpan, preferredTableWidth, isAutoWidth) {\n var width = 0;\n if (isAutoWidth) {\n var cellWidth = preferredTableWidth / this.tableColumns.length;\n for (var i = 0; i < columnSpan; i++) {\n width += cellWidth;\n }\n }\n else {\n for (var i = 0; i < columnSpan; i++) {\n width += this.tableColumns[i + columnIndex].preferredWidth;\n }\n }\n return width;\n };\n /**\n * @private\n */\n WTableHolder.prototype.validateColumnWidths = function () {\n for (var i = 0; i < this.columns.length; i++) {\n if (i === 0) {\n if (this.columns[i].preferredWidth !== this.columns[i].endOffset) {\n this.columns[i].preferredWidth = this.columns[i].endOffset;\n }\n }\n else {\n // If Previous column offset + current column preferred width is less than current column offset, \n // Then current column preferred width is set to current column offset - previous column offset.\n if (this.columns[i - 1].endOffset + this.columns[i].preferredWidth < this.columns[i].endOffset) {\n this.columns[i].preferredWidth = this.columns[i].endOffset - this.columns[i - 1].endOffset;\n }\n }\n }\n };\n /**\n * @private\n */\n WTableHolder.prototype.clone = function () {\n var tableHolder = new WTableHolder();\n tableHolder.tableWidth = this.tableWidth;\n for (var i = 0; i < this.columns.length; i++) {\n tableHolder.columns.push(this.columns[i].clone());\n }\n return tableHolder;\n };\n /**\n * @private\n */\n WTableHolder.prototype.destroy = function () {\n if (!isNullOrUndefined(this.tableColumns)) {\n for (var i = 0; i < this.tableColumns.length; i++) {\n var column = this.tableColumns[i];\n column.destroy();\n }\n }\n this.tableColumns = [];\n this.tableColumns = undefined;\n this.tableWidth = undefined;\n };\n return WTableHolder;\n}());\nexport { WTableHolder };\n/**\n * @private\n */\nvar WColumn = /** @class */ (function () {\n function WColumn() {\n /**\n * @private\n */\n this.preferredWidth = 0;\n /**\n * @private\n */\n this.minWidth = 0;\n /**\n * @private\n */\n this.maxWidth = 0;\n /**\n * @private\n */\n this.endOffset = 0;\n }\n /**\n * @private\n */\n WColumn.prototype.clone = function () {\n var column = new WColumn();\n column.preferredWidth = this.preferredWidth;\n column.minWidth = this.minWidth;\n column.maxWidth = this.maxWidth;\n return column;\n };\n /**\n * @private\n */\n WColumn.prototype.destroy = function () {\n this.preferredWidth = undefined;\n this.minWidth = undefined;\n this.maxWidth = undefined;\n };\n return WColumn;\n}());\nexport { WColumn };\n","import { ContextMenu as Menu } from '@syncfusion/ej2-navigations';\nimport { isNullOrUndefined, L10n, setCulture, classList } from '@syncfusion/ej2-base';\nimport { FieldElementBox } from './viewer/page';\nvar CONTEXTMENU_COPY = '_contextmenu_copy';\nvar CONTEXTMENU_CUT = '_contextmenu_cut';\nvar CONTEXTMENU_PASTE = '_contextmenu_paste';\nvar CONTEXTMENU_UPDATE_FIELD = '_contextmenu_update_field';\nvar CONTEXTMENU_EDIT_FIELD = '_contextmenu_edit_field';\nvar CONTEXTMENU_HYPERLINK = '_contextmenu_hyperlink';\nvar CONTEXTMENU_OPEN_HYPERLINK = '_contextmenu_open_hyperlink';\nvar CONTEXTMENU_COPY_HYPERLINK = '_contextmenu_copy_hyperlink';\nvar CONTEXTMENU_REMOVE_HYPERLINK = '_contextmenu_remove_hyperlink';\nvar CONTEXTMENU_EDIT_HYPERLINK = '_contextmenu_edit_hyperlink';\nvar CONTEXTMENU_FONT_DIALOG = '_contextmenu_font_dialog';\nvar CONTEXTMENU_PARAGRAPH = '_contextmenu_paragraph_dialog';\nvar CONTEXTMENU_TABLE = '_contextmenu_table_dialog';\nvar CONTEXTMENU_INSERT_TABLE = '_contextmenu_insert_table';\nvar CONTEXTMENU_DELETE_TABLE = '_contextmenu_delete_table';\nvar CONTEXTMENU_INSERT_ABOVE = '_contextmenu_insert_above';\nvar CONTEXTMENU_INSERT_BELOW = '_contextmenu_insert_below';\nvar CONTEXTMENU_INSERT_RIGHT = '_contextmenu_insert_right';\nvar CONTEXTMENU_INSERT_LEFT = '_contextmenu_insert_left';\nvar CONTEXTMENU_COMPLETE_DELETE_TABLE = '_contextmenu_complete_table_delete';\nvar CONTEXTMENU_DELETE_ROW = '_contextmenu_delete_row';\nvar CONTEXTMENU_DELETE_COLUMN = '_contextmenu_delete_column';\nvar CONTEXTMENU_MERGE_CELL = '_contextmenu_merge_cell';\nvar CONTEXTMENU_CONTINUE_NUMBERING = '_contextmenu_continue_numbering';\nvar CONTEXTMENU_RESTART_AT = '_contextmenu_restart_at';\n/**\n * Context Menu class\n */\nvar ContextMenu = /** @class */ (function () {\n /**\n * @private\n */\n function ContextMenu(viewer) {\n var _this = this;\n /**\n * @private\n */\n this.contextMenuInstance = undefined;\n /**\n * Handles on context menu key pressed.\n * @param {PointerEvent} event\n * @private\n */\n this.onContextMenuInternal = function (event) {\n if (_this.showHideElements(_this.viewer.selection)) {\n _this.contextMenuInstance.open(event.y, event.x);\n event.preventDefault();\n }\n };\n this.viewer = viewer;\n var locale = new L10n('documenteditor', this.viewer.owner.defaultLocale);\n locale.setLocale(this.viewer.owner.locale);\n setCulture(this.viewer.owner.locale);\n this.initContextMenu(locale);\n }\n /**\n * Gets module name.\n */\n ContextMenu.prototype.getModuleName = function () {\n return 'ContextMenu';\n };\n /**\n * Initialize context menu.\n * @param localValue Localize value.\n * @private\n */\n // tslint:disable:max-func-body-length\n ContextMenu.prototype.initContextMenu = function (localValue) {\n var _this = this;\n var id = this.viewer.owner.element.id;\n this.contextMenu = document.createElement('div');\n this.contextMenu.id = this.viewer.owner.containerId + 'e-de-contextmenu';\n document.body.appendChild(this.contextMenu);\n var ul = document.createElement('ul');\n ul.style.width = 'auto';\n ul.id = this.viewer.owner.containerId + 'e-de-contextmenu-list';\n ul.style.listStyle = 'none';\n ul.style.margin = '0px';\n ul.style.padding = '0px';\n ul.style.maxHeight = 'auto';\n ul.oncontextmenu = this.disableBrowserContextmenu;\n this.contextMenu.appendChild(ul);\n var menuItems = [\n {\n text: localValue.getConstant('Cut'),\n iconCss: 'e-icons e-de-cut',\n id: id + CONTEXTMENU_CUT\n },\n {\n text: localValue.getConstant('Copy'),\n iconCss: 'e-icons e-de-copy',\n id: id + CONTEXTMENU_COPY\n },\n {\n text: localValue.getConstant('Paste'),\n iconCss: 'e-icons e-de-paste',\n id: id + CONTEXTMENU_PASTE\n },\n {\n separator: true\n },\n {\n text: localValue.getConstant('Update Field'),\n iconCss: 'e-icons e-de-update_field',\n id: id + CONTEXTMENU_UPDATE_FIELD\n },\n {\n text: localValue.getConstant('Edit Field'),\n iconCss: 'e-icons e-de-edit_field',\n id: id + CONTEXTMENU_EDIT_FIELD\n },\n {\n text: localValue.getConstant('Continue Numbering'),\n iconCss: 'e-icons e-de-continue-numbering',\n id: id + CONTEXTMENU_CONTINUE_NUMBERING\n },\n {\n text: localValue.getConstant('Restart At'),\n iconCss: 'e-icons e-de-restart-at',\n id: id + CONTEXTMENU_RESTART_AT\n },\n {\n separator: true\n },\n {\n text: localValue.getConstant('Hyperlink'),\n iconCss: 'e-icons e-de-insertlink',\n id: id + CONTEXTMENU_HYPERLINK\n },\n {\n text: localValue.getConstant('Edit Hyperlink...'),\n iconCss: 'e-icons e-de-edit-hyperlink',\n id: id + CONTEXTMENU_EDIT_HYPERLINK\n },\n {\n text: localValue.getConstant('Open Hyperlink'),\n iconCss: 'e-icons e-de-open-hyperlink',\n id: id + CONTEXTMENU_OPEN_HYPERLINK\n },\n {\n text: localValue.getConstant('Copy Hyperlink'),\n iconCss: 'e-icons e-de-copy-hyperlink',\n id: id + CONTEXTMENU_COPY_HYPERLINK\n },\n {\n text: localValue.getConstant('Remove Hyperlink'),\n iconCss: 'e-icons e-de-remove-hyperlink',\n id: id + CONTEXTMENU_REMOVE_HYPERLINK\n },\n {\n separator: true\n },\n {\n text: localValue.getConstant('Font'),\n iconCss: 'e-icons e-de-fonts',\n id: id + CONTEXTMENU_FONT_DIALOG\n },\n {\n text: localValue.getConstant('Paragraph'),\n iconCss: 'e-icons e-de-paragraph',\n id: id + CONTEXTMENU_PARAGRAPH\n },\n {\n separator: true,\n },\n {\n text: localValue.getConstant('Table Properties'),\n id: id + CONTEXTMENU_TABLE,\n iconCss: 'e-icons e-de-table'\n },\n {\n text: localValue.getConstant('Merge Cells'),\n id: id + CONTEXTMENU_MERGE_CELL,\n iconCss: 'e-de-icon-table-merge-cells'\n },\n {\n text: localValue.getConstant('Insert'),\n id: id + CONTEXTMENU_INSERT_TABLE,\n iconCss: 'e-icons',\n items: [\n {\n text: localValue.getConstant('Insert Above'),\n id: id + CONTEXTMENU_INSERT_ABOVE,\n iconCss: 'e-icons e-de-insertabove'\n },\n {\n text: localValue.getConstant('Insert Below'),\n id: id + CONTEXTMENU_INSERT_BELOW,\n iconCss: 'e-icons e-de-insertbelow'\n },\n {\n text: localValue.getConstant('Insert Left'),\n id: id + CONTEXTMENU_INSERT_LEFT,\n iconCss: 'e-icons e-de-insertleft'\n },\n {\n text: localValue.getConstant('Insert Right'),\n id: id + CONTEXTMENU_INSERT_RIGHT,\n iconCss: 'e-icons e-de-insertright'\n }\n ]\n },\n {\n text: localValue.getConstant('Delete'),\n id: id + CONTEXTMENU_DELETE_TABLE,\n iconCss: 'e-icons',\n items: [\n {\n text: localValue.getConstant('Delete Table'),\n id: id + CONTEXTMENU_COMPLETE_DELETE_TABLE,\n iconCss: 'e-icons e-de-delete-table'\n },\n {\n text: localValue.getConstant('Delete Row'),\n id: id + CONTEXTMENU_DELETE_ROW,\n iconCss: 'e-icons e-de-deleterow'\n },\n {\n text: localValue.getConstant('Delete Column'),\n id: id + CONTEXTMENU_DELETE_COLUMN,\n iconCss: 'e-icons e-de-deletecolumn'\n }\n ]\n },\n ];\n var menuOptions = {\n target: '#' + this.viewer.owner.containerId + 'e-de-contextmenu',\n items: menuItems,\n select: function (args) {\n var item = args.element.id;\n _this.handleContextMenuItem(item);\n },\n };\n this.contextMenuInstance = new Menu(menuOptions, '#' + this.viewer.owner.containerId + 'e-de-contextmenu-list');\n this.contextMenuInstance.beforeOpen = function () {\n if (_this.viewer && _this.viewer.selection) {\n classList(_this.viewer.selection.caret, [], ['e-de-cursor-animation']);\n _this.viewer.selection.showCaret();\n }\n };\n this.contextMenuInstance.onClose = function () {\n if (_this.viewer && _this.viewer.selection) {\n classList(_this.viewer.selection.caret, ['e-de-cursor-animation'], []);\n _this.viewer.updateFocus();\n }\n };\n };\n /**\n * Disable browser context menu.\n */\n ContextMenu.prototype.disableBrowserContextmenu = function () {\n return false;\n };\n /**\n * Handles context menu items.\n * @param {string} item Specifies which item is selected.\n * @private\n */\n ContextMenu.prototype.handleContextMenuItem = function (item) {\n var id = this.viewer.owner.element.id;\n switch (item) {\n case id + CONTEXTMENU_COPY:\n this.viewer.selection.copy();\n break;\n case id + CONTEXTMENU_CUT:\n this.viewer.owner.editor.cut();\n break;\n case id + CONTEXTMENU_PASTE:\n if (!this.viewer.owner.isReadOnlyMode) {\n this.viewer.owner.editorModule.pasteInternal(undefined);\n }\n break;\n case id + CONTEXTMENU_UPDATE_FIELD:\n if (!this.viewer.owner.isReadOnlyMode) {\n this.viewer.owner.editorModule.updateToc();\n }\n break;\n case id + CONTEXTMENU_EDIT_FIELD:\n if (!this.viewer.owner.isReadOnlyMode) {\n this.viewer.owner.tableOfContentsDialogModule.show();\n }\n break;\n case id + CONTEXTMENU_FONT_DIALOG:\n if (this.viewer.owner.fontDialogModule) {\n this.viewer.owner.fontDialogModule.showFontDialog();\n }\n break;\n case id + CONTEXTMENU_OPEN_HYPERLINK:\n this.viewer.selection.navigateHyperlink();\n break;\n case id + CONTEXTMENU_COPY_HYPERLINK:\n this.viewer.selection.copyHyperlink();\n break;\n case id + CONTEXTMENU_EDIT_HYPERLINK:\n case id + CONTEXTMENU_HYPERLINK:\n if (this.viewer.owner.hyperlinkDialogModule) {\n this.viewer.owner.hyperlinkDialogModule.show();\n }\n break;\n case id + CONTEXTMENU_REMOVE_HYPERLINK:\n this.viewer.owner.editor.removeHyperlink();\n break;\n case id + CONTEXTMENU_PARAGRAPH:\n if (this.viewer.owner.paragraphDialogModule) {\n this.viewer.owner.paragraphDialogModule.show();\n }\n break;\n case id + CONTEXTMENU_TABLE:\n this.viewer.owner.tablePropertiesDialogModule.show();\n break;\n case id + CONTEXTMENU_MERGE_CELL:\n this.viewer.owner.editor.mergeCells();\n break;\n case id + CONTEXTMENU_INSERT_ABOVE:\n this.viewer.owner.editor.insertRow(true);\n break;\n case id + CONTEXTMENU_INSERT_BELOW:\n this.viewer.owner.editor.insertRow(false);\n break;\n case id + CONTEXTMENU_INSERT_LEFT:\n this.viewer.owner.editor.insertColumn(true);\n break;\n case id + CONTEXTMENU_INSERT_RIGHT:\n this.viewer.owner.editor.insertColumn(false);\n break;\n case id + CONTEXTMENU_COMPLETE_DELETE_TABLE:\n this.viewer.owner.editor.deleteTable();\n break;\n case id + CONTEXTMENU_DELETE_ROW:\n this.viewer.owner.editor.deleteRow();\n break;\n case id + CONTEXTMENU_DELETE_COLUMN:\n this.viewer.owner.editor.deleteColumn();\n break;\n case id + CONTEXTMENU_CONTINUE_NUMBERING:\n this.viewer.owner.editorModule.applyContinueNumbering(this.viewer.selection);\n break;\n case id + CONTEXTMENU_RESTART_AT:\n this.viewer.owner.editorModule.applyRestartNumbering(this.viewer.selection);\n break;\n }\n };\n ContextMenu.prototype.showHideElements = function (selection) {\n var owner = this.viewer.owner;\n var id = owner.element.id;\n var copy = document.getElementById(id + CONTEXTMENU_COPY);\n var cut = document.getElementById(id + CONTEXTMENU_CUT);\n var paste = document.getElementById(id + CONTEXTMENU_PASTE);\n var updateField = document.getElementById(id + CONTEXTMENU_UPDATE_FIELD);\n var editField = document.getElementById(id + CONTEXTMENU_EDIT_FIELD);\n var font = document.getElementById(id + CONTEXTMENU_FONT_DIALOG);\n var paragraph = document.getElementById(id + CONTEXTMENU_PARAGRAPH);\n var tableProperties = document.getElementById(id + CONTEXTMENU_TABLE);\n var insertTable = document.getElementById(id + CONTEXTMENU_INSERT_TABLE);\n var deleteTable = document.getElementById(id + CONTEXTMENU_DELETE_TABLE);\n var mergeCells = document.getElementById(id + CONTEXTMENU_MERGE_CELL);\n var hyperlink = document.getElementById(id + CONTEXTMENU_HYPERLINK);\n var openHyperlink = document.getElementById(id + CONTEXTMENU_OPEN_HYPERLINK);\n var editHyperlink = document.getElementById(id + CONTEXTMENU_EDIT_HYPERLINK);\n var copyHyperlink = document.getElementById(id + CONTEXTMENU_COPY_HYPERLINK);\n var removeHyperlink = document.getElementById(id + CONTEXTMENU_REMOVE_HYPERLINK);\n var continueNumbering = document.getElementById(id + CONTEXTMENU_CONTINUE_NUMBERING);\n var restartAt = document.getElementById(id + CONTEXTMENU_RESTART_AT);\n cut.style.display = 'none';\n paste.style.display = 'none';\n paste.nextSibling.style.display = 'none';\n hyperlink.style.display = 'none';\n openHyperlink.style.display = 'none';\n copyHyperlink.style.display = 'none';\n editHyperlink.style.display = 'none';\n removeHyperlink.style.display = 'none';\n removeHyperlink.nextSibling.style.display = 'none';\n mergeCells.style.display = 'none';\n font.style.display = 'none';\n paragraph.style.display = 'none';\n paragraph.nextSibling.style.display = 'none';\n insertTable.style.display = 'none';\n deleteTable.style.display = 'none';\n tableProperties.style.display = 'none';\n updateField.style.display = 'none';\n editField.style.display = 'none';\n continueNumbering.style.display = 'none';\n restartAt.style.display = 'none';\n restartAt.nextSibling.style.display = 'none';\n if (isNullOrUndefined(selection)) {\n return false;\n }\n selection.hideToolTip();\n if (selection.isEmpty) {\n cut.classList.add('e-disabled');\n copy.classList.add('e-disabled');\n }\n else {\n cut.classList.remove('e-disabled');\n copy.classList.remove('e-disabled');\n }\n if (owner.isReadOnlyMode) {\n return true;\n }\n cut.style.display = 'block';\n paste.style.display = 'block';\n paste.nextSibling.style.display = 'block';\n insertTable.classList.add('e-blankicon');\n deleteTable.classList.add('e-blankicon');\n updateField.classList.add('e-blankicon');\n editField.classList.add('e-blankicon');\n mergeCells.classList.add('e-blankicon');\n if (owner.enableLocalPaste && !isNullOrUndefined(owner.editor.copiedData)) {\n paste.classList.remove('e-disabled');\n }\n else {\n paste.classList.add('e-disabled');\n }\n if (selection.contextType === 'TableOfContents') {\n updateField.style.display = 'block';\n editField.style.display = 'block';\n restartAt.nextSibling.style.display = 'block';\n }\n else {\n var start = selection.start;\n var end = selection.end;\n if (selection.contextType === 'List'\n && owner.editorModule.getListLevel(start.paragraph).listLevelPattern !== 'Bullet') {\n continueNumbering.style.display = 'block';\n restartAt.style.display = 'block';\n restartAt.nextSibling.style.display = 'block';\n }\n var isCellOrRowSelected = start.paragraph.isInsideTable && (!end.paragraph.isInsideTable\n || start.paragraph.associatedCell !== end.paragraph.associatedCell\n || selection.isCellSelected(start.paragraph.associatedCell, start, end));\n if (isCellOrRowSelected) {\n hyperlink.classList.add('e-disabled');\n }\n else {\n if (hyperlink.classList.contains('e-disabled')) {\n hyperlink.classList.remove('e-disabled');\n }\n }\n var field = selection.getHyperlinkField();\n if (field instanceof FieldElementBox && !selection.isImageField()) {\n openHyperlink.style.display = 'block';\n copyHyperlink.style.display = 'block';\n if (owner.hyperlinkDialogModule) {\n editHyperlink.style.display = 'block';\n }\n removeHyperlink.style.display = 'block';\n removeHyperlink.nextSibling.style.display = 'block';\n }\n else {\n if (owner.hyperlinkDialogModule) {\n hyperlink.style.display = 'block';\n }\n }\n }\n if (this.viewer.owner.selection.start.paragraph.isInsideTable\n && this.viewer.owner.selection.end.paragraph.isInsideTable) {\n paragraph.nextSibling.style.display = 'block';\n if (owner.tablePropertiesDialogModule) {\n tableProperties.style.display = 'block';\n }\n insertTable.style.display = 'block';\n deleteTable.style.display = 'block';\n if (this.viewer.owner.editor.canMergeCells()) {\n mergeCells.style.display = 'block';\n }\n }\n else {\n if (this.viewer.owner.fontDialogModule) {\n font.style.display = 'block';\n font.previousSibling.style.display = 'block';\n }\n if (this.viewer.owner.paragraphDialogModule) {\n paragraph.style.display = 'block';\n }\n }\n if (selection.contextType === 'Image') {\n font.style.display = 'none';\n paragraph.style.display = 'none';\n removeHyperlink.nextSibling.style.display = 'none';\n }\n return true;\n };\n /**\n * Disposes the internal objects which are maintained.\n * @private\n */\n ContextMenu.prototype.destroy = function () {\n if (this.contextMenuInstance) {\n this.contextMenuInstance.destroy();\n }\n if (this.contextMenu) {\n if (this.contextMenu.parentElement) {\n this.contextMenu.parentElement.removeChild(this.contextMenu);\n }\n this.contextMenu.innerHTML = '';\n }\n this.contextMenu = undefined;\n this.contextMenuInstance = undefined;\n };\n return ContextMenu;\n}());\nexport { ContextMenu };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar WAbstractList = /** @class */ (function () {\n function WAbstractList() {\n this.abstractListIdIn = -1;\n this.levels = [];\n }\n Object.defineProperty(WAbstractList.prototype, \"abstractListId\", {\n get: function () {\n return this.abstractListIdIn;\n },\n set: function (abstractListId) {\n this.abstractListIdIn = abstractListId;\n },\n enumerable: true,\n configurable: true\n });\n WAbstractList.prototype.destroy = function () {\n if (!isNullOrUndefined(this.levels)) {\n for (var i = 0; i < this.levels.length; i++) {\n var listLevel = this.levels[i];\n listLevel.destroy();\n this.levels.splice(this.levels.indexOf(listLevel), 1);\n i--;\n }\n this.levels = [];\n }\n this.levels = undefined;\n };\n return WAbstractList;\n}());\nexport { WAbstractList };\n","import { Dictionary } from '../../base/dictionary';\nimport { WUniqueFormat } from '../../base/unique-format';\nimport { WUniqueFormats } from '../../base/unique-formats';\nimport { WCharacterFormat } from '../format/character-format';\nimport { WParagraphFormat } from '../format/paragraph-format';\nimport { WAbstractList } from './abstract-list';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar WListLevel = /** @class */ (function () {\n function WListLevel(node) {\n this.uniqueListLevel = undefined;\n this.paragraphFormat = undefined;\n this.characterFormat = undefined;\n if (node instanceof WAbstractList) {\n this.ownerBase = node;\n }\n else {\n this.ownerBase = node;\n }\n this.characterFormat = new WCharacterFormat(undefined);\n this.paragraphFormat = new WParagraphFormat(undefined);\n }\n Object.defineProperty(WListLevel.prototype, \"listLevelPattern\", {\n get: function () {\n return this.getPropertyValue('listLevelPattern');\n },\n set: function (listLevelPattern) {\n this.setPropertyValue('listLevelPattern', listLevelPattern);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WListLevel.prototype, \"followCharacter\", {\n get: function () {\n return this.getPropertyValue('followCharacter');\n },\n set: function (followCharacter) {\n this.setPropertyValue('followCharacter', followCharacter);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WListLevel.prototype, \"startAt\", {\n get: function () {\n return this.getPropertyValue('startAt');\n },\n set: function (startAt) {\n this.setPropertyValue('startAt', startAt);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WListLevel.prototype, \"numberFormat\", {\n get: function () {\n return this.getPropertyValue('numberFormat');\n },\n set: function (numberFormat) {\n this.setPropertyValue('numberFormat', numberFormat);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WListLevel.prototype, \"restartLevel\", {\n get: function () {\n return this.getPropertyValue('restartLevel');\n },\n set: function (restartLevel) {\n this.setPropertyValue('restartLevel', restartLevel);\n },\n enumerable: true,\n configurable: true\n });\n WListLevel.prototype.getPropertyValue = function (property) {\n var propertyType = WUniqueFormat.getPropertyType(WListLevel.uniqueFormatType, property);\n if (!isNullOrUndefined(this.uniqueListLevel) && this.uniqueListLevel.propertiesHash.containsKey(propertyType)) {\n return this.uniqueListLevel.propertiesHash.get(propertyType);\n }\n return WListLevel.getPropertyDefaultValue(property);\n };\n WListLevel.prototype.setPropertyValue = function (property, value) {\n if (isNullOrUndefined(value) || value === '') {\n value = WListLevel.getPropertyDefaultValue(property);\n }\n if (isNullOrUndefined(this.uniqueListLevel)) {\n this.initializeUniqueWListLevel(property, value);\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueListLevel.uniqueFormatType, property);\n if (this.uniqueListLevel.propertiesHash.containsKey(propertyType) &&\n // tslint:disable-next-line:max-line-length\n this.uniqueListLevel.propertiesHash.get(propertyType) === value) {\n return;\n }\n // tslint:disable-next-line:max-line-length\n this.uniqueListLevel = WListLevel.uniqueListLevels.updateUniqueFormat(this.uniqueListLevel, property, value);\n }\n };\n WListLevel.prototype.initializeUniqueWListLevel = function (property, propValue) {\n var uniqueListLevelTemp = new Dictionary();\n this.addUniqueWListLevel('listLevelPattern', property, propValue, uniqueListLevelTemp);\n this.addUniqueWListLevel('startAt', property, propValue, uniqueListLevelTemp);\n this.addUniqueWListLevel('followCharacter', property, propValue, uniqueListLevelTemp);\n this.addUniqueWListLevel('numberFormat', property, propValue, uniqueListLevelTemp);\n this.addUniqueWListLevel('restartLevel', property, propValue, uniqueListLevelTemp);\n // tslint:disable-next-line:max-line-length \n this.uniqueListLevel = WListLevel.uniqueListLevels.addUniqueFormat(uniqueListLevelTemp, WListLevel.uniqueFormatType);\n };\n // tslint:disable-next-line:max-line-length\n WListLevel.prototype.addUniqueWListLevel = function (property, modifiedProperty, propValue, uniqueCharFormatTemp) {\n var propertyType;\n propertyType = WUniqueFormat.getPropertyType(WListLevel.uniqueFormatType, property);\n if (property === modifiedProperty) {\n uniqueCharFormatTemp.add(propertyType, propValue);\n }\n else {\n uniqueCharFormatTemp.add(propertyType, WListLevel.getPropertyDefaultValue(property));\n }\n };\n WListLevel.getPropertyDefaultValue = function (property) {\n var value = undefined;\n switch (property) {\n case 'listLevelPattern':\n value = 'Arabic';\n break;\n case 'startAt':\n value = 0;\n break;\n case 'followCharacter':\n value = 'Tab';\n break;\n case 'numberFormat':\n value = '';\n break;\n case 'restartLevel':\n value = 0;\n break;\n }\n return value;\n };\n WListLevel.prototype.destroy = function () {\n if (!isNullOrUndefined(this.characterFormat)) {\n this.characterFormat.destroy();\n }\n if (!isNullOrUndefined(this.paragraphFormat)) {\n this.paragraphFormat.destroy();\n }\n if (!isNullOrUndefined(this.uniqueListLevel)) {\n WListLevel.uniqueListLevels.remove(this.uniqueListLevel);\n }\n this.uniqueListLevel = undefined;\n this.characterFormat = undefined;\n this.paragraphFormat = undefined;\n };\n WListLevel.clear = function () {\n this.uniqueListLevels.clear();\n };\n WListLevel.dotBullet = '\\uf0b7';\n WListLevel.squareBullet = '\\uf0a7'; //Symbol font \\u25aa.\n WListLevel.arrowBullet = '\\u27a4';\n WListLevel.circleBullet = '\\uf06f' + '\\u0020';\n WListLevel.uniqueListLevels = new WUniqueFormats();\n WListLevel.uniqueFormatType = 9;\n return WListLevel;\n}());\nexport { WListLevel };\n","import { Dictionary } from '../../base/dictionary';\nimport { WListLevel } from '../list/list-level';\nimport { WCharacterFormat, WParagraphFormat } from '../format/index';\nimport { WBorder } from '../format/index';\nimport { PageLayoutViewer } from './viewer';\nimport { LineWidget, Rect, Widget, Margin, ParagraphWidget, BodyWidget, TextElementBox, ElementBox, ListTextElementBox, TableCellWidget, TableRowWidget, TableWidget, FieldElementBox, BlockWidget, HeaderFooterWidget, BlockContainer, BookmarkElementBox, FieldTextElementBox, TabElementBox } from './page';\nimport { HelperMethods } from '../editor/editor-helper';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar Layout = /** @class */ (function () {\n /**\n * viewer definition\n */\n function Layout(viewer) {\n /**\n * @private\n */\n this.allowLayout = true;\n /**\n * @private\n */\n this.isInitialLoad = true;\n this.fieldBegin = undefined;\n this.maxTextHeight = 0;\n this.maxBaseline = 0;\n this.maxTextBaseline = 0;\n this.isFieldCode = false;\n this.viewer = viewer;\n }\n /**\n * @private\n */\n Layout.prototype.layout = function () {\n // Todo: Need to handle complete document layout(relayout).\n var page = this.viewer.pages[0];\n var body = page.bodyWidgets[0];\n };\n /**\n * Releases un-managed and - optionally - managed resources.\n */\n Layout.prototype.destroy = function () {\n this.viewer = undefined;\n this.value = undefined;\n this.allowLayout = undefined;\n this.isInitialLoad = undefined;\n this.fieldBegin = undefined;\n this.maxTextHeight = undefined;\n this.maxBaseline = undefined;\n this.maxTextBaseline = undefined;\n this.isFieldCode = undefined;\n };\n /**\n * Layouts the items\n * @private\n */\n Layout.prototype.layoutItems = function (sections) {\n var page;\n for (var i = 0; i < sections.length; i++) {\n var section = sections[i];\n page = this.viewer.createNewPage(section);\n this.addBodyWidget(this.viewer.clientActiveArea, section);\n if (this.viewer.pages.length > 1) {\n var pageIndex = 0;\n for (var i_1 = 0; i_1 < this.viewer.pages.length; i_1++) {\n var prevPage = this.viewer.pages[i_1];\n var prevSectionIndex = prevPage.sectionIndex;\n var index = section.index;\n if (prevSectionIndex > index || prevPage === page) {\n break;\n }\n pageIndex++;\n }\n if (pageIndex < this.viewer.pages.length - 1) {\n this.viewer.insertPage(pageIndex, page);\n }\n }\n this.layoutSection(section, 0, this.viewer);\n }\n this.updateFieldElements();\n this.viewer.updateScrollBars();\n this.isInitialLoad = false;\n };\n /**\n * Layouts the items\n * @param section\n * @param viewer\n * @private\n */\n Layout.prototype.layoutSection = function (section, index, viewer, ownerWidget) {\n var block = section.firstChild;\n var nextBlock;\n do {\n this.viewer.updateClientAreaForBlock(block, true);\n nextBlock = this.layoutBlock(block, index);\n index = 0;\n this.viewer.updateClientAreaForBlock(block, false);\n block = nextBlock;\n } while (block);\n };\n /**\n * Layouts the header footer items\n * @param section\n * @param viewer\n * @private\n */\n Layout.prototype.layoutHeaderFooter = function (section, viewer, page) {\n //Header layout\n var headerFooterWidget = viewer.getCurrentPageHeaderFooter(section, true);\n if (headerFooterWidget) {\n var header = headerFooterWidget.clone();\n header.page = page;\n viewer.updateHFClientArea(section.sectionFormat, true);\n page.headerWidget = this.layoutHeaderFooterItems(viewer, header);\n this.updateHeaderFooterToParent(header);\n }\n //Footer Layout\n headerFooterWidget = viewer.getCurrentPageHeaderFooter(section, false);\n if (headerFooterWidget) {\n var footer = headerFooterWidget.clone();\n footer.page = page;\n viewer.updateHFClientArea(section.sectionFormat, false);\n page.footerWidget = this.layoutHeaderFooterItems(viewer, footer);\n this.updateHeaderFooterToParent(footer);\n }\n };\n /**\n * @private\n */\n Layout.prototype.updateHeaderFooterToParent = function (node) {\n var sectionIndex = node.page.sectionIndex;\n var typeIndex = this.viewer.getHeaderFooter(node.headerFooterType);\n var clone = node.clone();\n this.viewer.headersFooters[sectionIndex][typeIndex] = clone;\n for (var j = 0; j < clone.childWidgets.length; j++) {\n var child = clone.childWidgets[j];\n if (child instanceof TableWidget) {\n this.clearTableWidget(child, false, true);\n }\n }\n return clone;\n };\n Layout.prototype.linkFieldInHeaderFooter = function (widget) {\n var firstChild = widget.firstChild;\n do {\n if (firstChild instanceof ParagraphWidget) {\n this.linkFieldInParagraph(firstChild);\n }\n else {\n this.linkFieldInTable(firstChild);\n }\n //tslint:disable:no-conditional-assignment\n } while (firstChild = firstChild.nextWidget);\n };\n /**\n * @private\n */\n Layout.prototype.linkFieldInParagraph = function (widget) {\n for (var j = 0; j < widget.childWidgets.length; j++) {\n var line = widget.childWidgets[j];\n for (var i = 0; i < line.children.length; i++) {\n var element = line.children[i];\n if (element instanceof FieldElementBox && element.fieldType !== 0) {\n element.linkFieldCharacter(this.viewer);\n }\n }\n }\n };\n /**\n * @private\n */\n Layout.prototype.linkFieldInTable = function (widget) {\n for (var i = 0; i < widget.childWidgets.length; i++) {\n var row = widget.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n for (var k = 0; k < cell.childWidgets.length; k++) {\n var block = cell.childWidgets[k];\n if (block instanceof ParagraphWidget) {\n this.linkFieldInParagraph(block);\n }\n else {\n this.linkFieldInTable(block);\n }\n }\n }\n }\n };\n /**\n * Layouts the header footer items.\n * @param viewer\n * @param hfModule\n * @private\n */\n Layout.prototype.layoutHeaderFooterItems = function (viewer, widget) {\n this.viewer.updateClientAreaLocation(widget, viewer.clientActiveArea);\n if (widget.childWidgets.length === 0) {\n var pargaraph = new ParagraphWidget();\n var line = new LineWidget(pargaraph);\n pargaraph.childWidgets.push(line);\n widget.childWidgets.push(pargaraph);\n pargaraph.containerWidget = widget;\n }\n this.linkFieldInHeaderFooter(widget);\n for (var i = 0; i < widget.childWidgets.length; i++) {\n var block = widget.childWidgets[i];\n viewer.updateClientAreaForBlock(block, true);\n this.layoutBlock(block, 0);\n viewer.updateClientAreaForBlock(block, false);\n }\n var type = widget.headerFooterType;\n if (type === 'OddFooter' || type === 'EvenFooter' || type === 'FirstPageFooter') {\n this.shiftChildLocation(viewer.clientArea.y - viewer.clientActiveArea.y, widget);\n }\n return widget;\n };\n /**\n * Shifts the child location\n * @param shiftTop\n * @param bodyWidget\n */\n Layout.prototype.shiftChildLocation = function (shiftTop, bodyWidget) {\n bodyWidget.y += shiftTop;\n for (var i = 0; i < bodyWidget.childWidgets.length; i++) {\n var childWidget = bodyWidget.childWidgets[i];\n if (childWidget instanceof ParagraphWidget) {\n childWidget.x = childWidget.x;\n childWidget.y = childWidget.y + shiftTop;\n }\n else {\n this.shiftChildLocationForTableWidget(childWidget, shiftTop);\n }\n }\n };\n /**\n * Shifts the child location for table widget.\n * @param tableWidget\n * @param shiftTop\n */\n Layout.prototype.shiftChildLocationForTableWidget = function (tableWidget, shiftTop) {\n tableWidget.y = tableWidget.y + shiftTop;\n for (var i = 0; i < tableWidget.childWidgets.length; i++) {\n var childWidget = tableWidget.childWidgets[i];\n if (childWidget instanceof TableRowWidget) {\n this.shiftChildLocationForTableRowWidget(childWidget, shiftTop);\n }\n }\n };\n /**\n * Shifts the child location for table row widget.\n * @param rowWidget\n * @param shiftTop\n */\n Layout.prototype.shiftChildLocationForTableRowWidget = function (rowWidget, shiftTop) {\n rowWidget.y = rowWidget.y + shiftTop;\n for (var i = 0; i < rowWidget.childWidgets.length; i++) {\n this.shiftChildLocationForTableCellWidget(rowWidget.childWidgets[i], shiftTop);\n }\n };\n /**\n * Shifts the child location for table cell widget.\n * @param cellWidget\n * @param shiftTop\n */\n Layout.prototype.shiftChildLocationForTableCellWidget = function (cellWidget, shiftTop) {\n cellWidget.y = cellWidget.y + shiftTop;\n for (var i = 0; i < cellWidget.childWidgets.length; i++) {\n if (cellWidget.childWidgets[i] instanceof ParagraphWidget) {\n cellWidget.childWidgets[i].x = cellWidget.childWidgets[i].x;\n cellWidget.childWidgets[i].y = cellWidget.childWidgets[i].y + shiftTop;\n }\n else {\n this.shiftChildLocationForTableWidget(cellWidget.childWidgets[i], shiftTop);\n }\n }\n };\n /**\n * Layouts specified block.\n * @param block\n * @private\n */\n Layout.prototype.layoutBlock = function (block, index, moveToLine) {\n var nextBlock;\n if (block instanceof ParagraphWidget) {\n nextBlock = this.layoutParagraph(block, index);\n }\n else {\n nextBlock = this.layoutTable(block, index);\n }\n return nextBlock.nextRenderedWidget;\n };\n /**\n * Adds paragraph widget.\n * @param area\n */\n Layout.prototype.addParagraphWidget = function (area, paragraphWidget) {\n var ownerParaWidget = undefined;\n if (paragraphWidget.isEmpty() && !isNullOrUndefined(paragraphWidget.paragraphFormat) &&\n (paragraphWidget.paragraphFormat.textAlignment === 'Center' || paragraphWidget.paragraphFormat.textAlignment === 'Right') &&\n paragraphWidget.paragraphFormat.listFormat.listId === -1) {\n var top_1 = 0;\n var bottom = 0;\n var width = this.viewer.textHelper.getParagraphMarkWidth(paragraphWidget.characterFormat);\n var left = area.x;\n if (paragraphWidget.paragraphFormat.textAlignment === 'Center') {\n left += (area.width - width) / 2;\n }\n else {\n left += area.width - width;\n }\n paragraphWidget.width = width;\n paragraphWidget.x = left;\n paragraphWidget.y = area.y;\n }\n else {\n paragraphWidget.width = area.width;\n paragraphWidget.x = area.x;\n paragraphWidget.y = area.y;\n }\n return paragraphWidget;\n };\n /**\n * Adds line widget.\n * @param paragraph\n */\n Layout.prototype.addLineWidget = function (paragraphWidget) {\n var line = undefined;\n line = new LineWidget(paragraphWidget);\n line.width = paragraphWidget.width;\n paragraphWidget.childWidgets.push(line);\n line.paragraph = paragraphWidget;\n return line;\n };\n /**\n * Layouts specified paragraph.\n * @private\n * @param paragraph\n */\n Layout.prototype.layoutParagraph = function (paragraph, lineIndex) {\n this.addParagraphWidget(this.viewer.clientActiveArea, paragraph);\n this.layoutListItems(paragraph);\n if (paragraph.isEmpty()) {\n this.layoutEmptyLineWidget(paragraph, true);\n }\n else {\n var line = lineIndex < paragraph.childWidgets.length ?\n paragraph.childWidgets[lineIndex] : undefined;\n while (line instanceof LineWidget) {\n if (line.isFirstLine() && isNullOrUndefined(this.fieldBegin)) {\n if (!isNullOrUndefined(paragraph.paragraphFormat)) {\n // tslint:disable-next-line:max-line-length\n var firstLineIndent = -HelperMethods.convertPointToPixel(paragraph.paragraphFormat.firstLineIndent);\n this.viewer.updateClientWidth(firstLineIndent);\n }\n }\n line = this.layoutLine(line, 0);\n paragraph = line.paragraph;\n line = line.nextLine;\n }\n }\n this.updateWidgetToPage(this.viewer, paragraph);\n return paragraph;\n };\n Layout.prototype.clearLineMeasures = function () {\n this.maxBaseline = 0;\n this.maxTextBaseline = 0;\n this.maxTextHeight = 0;\n };\n Layout.prototype.moveElementFromNextLine = function (line) {\n var nextLine = line.nextLine;\n while (nextLine instanceof LineWidget) {\n if (nextLine.children.length > 0) {\n var element = nextLine.children.splice(0, 1)[0];\n line.children.push(element);\n element.line = line;\n break;\n }\n else {\n if (nextLine.paragraph.childWidgets.length === 1) {\n nextLine.paragraph.destroy();\n }\n else {\n nextLine.destroy();\n }\n nextLine = line.nextLine;\n }\n }\n };\n Layout.prototype.layoutLine = function (line, count) {\n var paragraph = line.paragraph;\n if (line.children.length === 0) {\n this.moveElementFromNextLine(line);\n }\n var element = line.children[count];\n this.clearLineMeasures();\n while (element instanceof ElementBox) {\n this.layoutElement(element, paragraph);\n line = element.line;\n element = element.nextElement;\n }\n return line;\n };\n // tslint:disable:max-func-body-length\n Layout.prototype.layoutElement = function (element, paragraph) {\n var line = element.line;\n var text = '';\n var index = element.indexInOwner;\n if (element instanceof FieldElementBox) {\n if (element.fieldType === 0 && this.viewer.fields.indexOf(element) === -1) {\n this.viewer.fields.push(element);\n }\n this.layoutFieldCharacters(element);\n if (element.line.isLastLine() && isNullOrUndefined(element.nextNode) && !this.isFieldCode) {\n if (isNullOrUndefined(element.fieldSeparator)) {\n this.layoutEmptyLineWidget(paragraph, false, element.line);\n }\n this.moveToNextLine(line);\n }\n else if (isNullOrUndefined(element.nextElement) && this.viewer.clientActiveArea.width > 0 && !element.line.isLastLine()) {\n this.moveElementFromNextLine(line);\n }\n return;\n }\n if (element instanceof ListTextElementBox || this.isFieldCode || element instanceof BookmarkElementBox) {\n if (isNullOrUndefined(element.nextElement) && this.viewer.clientActiveArea.width > 0 && !element.line.isLastLine()) {\n this.moveElementFromNextLine(line);\n }\n if (element.line.isLastLine() && isNullOrUndefined(element.nextElement)) {\n this.moveToNextLine(line);\n }\n return;\n }\n var width = element.width;\n if (element instanceof FieldTextElementBox) {\n text = this.viewer.getFieldResult(element.fieldBegin, element.paragraph.bodyWidget.page);\n if (text !== '') {\n element.text = text;\n }\n else {\n text = element.text;\n }\n }\n else if (element instanceof TextElementBox) {\n this.checkAndSplitTabOrLineBreakCharacter(element.text, element);\n text = element.text;\n }\n // Here field code width and height update need to skipped based on the hidden property.\n if (element instanceof TextElementBox) {\n width = this.viewer.textHelper.getTextSize(element, element.characterFormat);\n if (element.text === '\\t') {\n element.width = this.getTabWidth(paragraph, this.viewer, index, line, element);\n }\n }\n if (this.viewer instanceof PageLayoutViewer\n && this.viewer.clientActiveArea.height < element.height && this.viewer.clientActiveArea.y !== this.viewer.clientArea.y) {\n this.moveToNextPage(this.viewer, line);\n if (element instanceof FieldTextElementBox) {\n this.updateFieldText(element);\n }\n if (element.previousElement) {\n this.cutClientWidth(element.previousElement);\n }\n }\n if (width < this.viewer.clientActiveArea.width || !this.viewer.textWrap) {\n //Fits the text in current line.\n this.addElementToLine(paragraph, element);\n if (isNullOrUndefined(element.nextElement) && this.viewer.clientActiveArea.width > 0 && !element.line.isLastLine()) {\n this.moveElementFromNextLine(line);\n }\n else if (!element.line.isLastLine() && isNullOrUndefined(element.nextElement) && this.viewer.clientActiveArea.width === 0) {\n this.moveToNextLine(line);\n }\n }\n else if (element instanceof TextElementBox) {\n if (element.text === '\\t') {\n var currentLine = element.line;\n this.addSplittedLineWidget(currentLine, currentLine.children.indexOf(element));\n this.moveToNextLine(currentLine);\n // Recalculates tab width based on new client active area X position\n element.width = this.getTabWidth(paragraph, this.viewer, index, line, element);\n this.addElementToLine(paragraph, element);\n }\n else {\n //Splits the text and arrange line by line, till end of text.\n do {\n line = element.line;\n this.splitTextForClientArea(line, element, element.text, element.width, element.characterFormat);\n this.checkLineWidgetWithClientArea(line, element);\n if (element instanceof FieldTextElementBox) {\n this.updateFieldText(element);\n }\n } while (element.line !== line && this.cutClientWidth(element));\n }\n }\n else {\n do {\n line = element.line;\n this.splitElementForClientArea(paragraph, element);\n this.checkLineWidgetWithClientArea(line, element);\n if (element instanceof FieldTextElementBox) {\n this.updateFieldText(element);\n }\n } while (element.line !== line && this.cutClientWidth(element));\n }\n if (text === '\\v') {\n var elementIndex = line.children.indexOf(element);\n if (elementIndex > -1) {\n this.addSplittedLineWidget(line, elementIndex);\n }\n }\n if (element.line.isLastLine() && isNullOrUndefined(element.nextElement) || text === '\\v') {\n this.moveToNextLine(element.line);\n if (text === '\\v' && isNullOrUndefined(element.nextNode)) {\n this.layoutEmptyLineWidget(paragraph, true, line, true);\n }\n }\n };\n Layout.prototype.updateFieldText = function (element) {\n // tslint:disable-next-line:max-line-length\n var text = this.viewer.getFieldResult(element.fieldBegin, element.paragraph.bodyWidget.page);\n if (text !== '') {\n element.text = text;\n this.viewer.textHelper.getTextSize(element, element.characterFormat);\n }\n };\n Layout.prototype.checkLineWidgetWithClientArea = function (line, element) {\n if (line !== element.line || element.line === line && isNullOrUndefined(element.nextElement)\n && !element.line.isLastLine()) {\n this.moveToNextLine(line);\n }\n if (element.line !== line && this.viewer instanceof PageLayoutViewer\n && this.viewer.clientActiveArea.height < element.height &&\n this.viewer.clientActiveArea.y !== this.viewer.clientArea.y) {\n this.moveToNextPage(this.viewer, element.line);\n }\n else if (element.line === line && isNullOrUndefined(element.nextElement)\n && line.paragraph.lastChild === line && !line.isLastLine() && this.viewer.clientActiveArea.height >= 0) {\n this.moveLineFromSplittedParagraph(line);\n }\n };\n Layout.prototype.checkAndSplitTabOrLineBreakCharacter = function (text, element) {\n var char = ['\\t', '\\v'];\n var index = HelperMethods.indexOfAny(text, char);\n if (index > -1) {\n var character = text[index];\n if ((character === '\\t' && text !== '\\t') || (character === '\\v' && text !== '\\v')) {\n this.splitByLineBreakOrTab(this.viewer, element, index, character);\n }\n }\n };\n /**\n * @private\n */\n Layout.prototype.moveLineFromSplittedParagraph = function (line) {\n var nextLine = line.nextLine;\n if (nextLine && line.paragraph.childWidgets.indexOf(nextLine) === -1) {\n nextLine.paragraph.childWidgets.splice(nextLine.indexInOwner, 1);\n line.paragraph.childWidgets.push(nextLine);\n nextLine.paragraph = line.paragraph;\n }\n };\n Layout.prototype.cutClientWidth = function (currentElement) {\n this.clearLineMeasures();\n var line = currentElement.line;\n var width = 0;\n for (var i = 0; i < line.children.length; i++) {\n var element = line.children[i];\n width += element.width;\n if (currentElement === element) {\n break;\n }\n }\n var splitCurrentWidget = this.viewer.clientActiveArea.width - width < 0;\n if (!splitCurrentWidget) {\n this.viewer.cutFromLeft(this.viewer.clientActiveArea.x + width);\n if (currentElement.line.paragraph.paragraphFormat.textAlignment === 'Justify' &&\n currentElement instanceof TextElementBox) {\n this.splitTextElementWordByWord(currentElement);\n }\n if (isNullOrUndefined(currentElement.nextElement) && this.viewer.clientActiveArea.width > 0\n && !currentElement.line.isLastLine()) {\n this.moveElementFromNextLine(line);\n }\n }\n else if (currentElement.previousElement) {\n this.cutClientWidth(currentElement.previousElement);\n }\n return splitCurrentWidget;\n };\n Layout.prototype.layoutFieldCharacters = function (element) {\n if (element.fieldType === 0) {\n if (!this.isFieldCode && (!isNullOrUndefined(element.fieldEnd) || element.hasFieldEnd)) {\n this.viewer.fieldStacks.push(element);\n this.isFieldCode = true;\n element.hasFieldEnd = true;\n }\n }\n else if (this.viewer.fieldStacks.length > 0) {\n if (element.fieldType === 2) {\n var field = this.viewer.fieldStacks[this.viewer.fieldStacks.length - 1];\n if (field.fieldSeparator === element && (!isNullOrUndefined(field.fieldEnd) || field.hasFieldEnd)) {\n this.isFieldCode = false;\n }\n }\n else {\n var field = this.viewer.fieldStacks[this.viewer.fieldStacks.length - 1];\n if (element === field.fieldEnd) {\n this.viewer.fieldStacks.pop();\n this.isFieldCode = false;\n }\n }\n }\n };\n /**\n * Layouts empty line widget.\n */\n // tslint:disable-next-line:max-line-length\n Layout.prototype.layoutEmptyLineWidget = function (paragraph, isEmptyLine, line, isShiftEnter) {\n isShiftEnter = isNullOrUndefined(isShiftEnter) ? false : isShiftEnter;\n //Calculate line height and descent based on formatting defined in paragraph.\n var paragraphMarkSize = this.viewer.textHelper.getParagraphMarkSize(paragraph.characterFormat);\n var maxHeight = paragraphMarkSize.Height;\n var beforeSpacing = this.getBeforeSpacing(paragraph);\n var lineWidget;\n if (paragraph.childWidgets.length > 0 && !isShiftEnter) {\n lineWidget = paragraph.childWidgets[0];\n }\n else {\n lineWidget = isEmptyLine ? this.addLineWidget(paragraph) : line;\n }\n //isNullOrUndefined(this.viewer.currentHeaderFooter) && \n if (this.viewer instanceof PageLayoutViewer\n && this.viewer.clientActiveArea.height < beforeSpacing + maxHeight\n && this.viewer.clientActiveArea.y !== this.viewer.clientArea.y) {\n this.moveToNextPage(this.viewer, lineWidget);\n }\n //Gets line spacing.\n var lineSpacing = this.getLineSpacing(paragraph, maxHeight);\n var maxDescent = maxHeight - paragraphMarkSize.BaselineOffset;\n //Calculate the bottom position of current line - max height + line spacing.\n if (!isNaN(this.maxTextHeight)\n && maxHeight < this.maxTextHeight) {\n maxHeight = this.maxTextHeight;\n maxDescent = maxHeight - this.maxTextBaseline;\n }\n var topMargin = 0;\n var bottomMargin = 0;\n var leftMargin = 0;\n var height = maxHeight;\n var lineSpacingType = paragraph.paragraphFormat.lineSpacingType;\n if (lineSpacingType === 'Multiple') {\n if (lineSpacing > maxHeight) {\n bottomMargin += lineSpacing - maxHeight;\n }\n else {\n topMargin += lineSpacing - maxHeight;\n }\n }\n else if (lineSpacingType === 'Exactly') {\n topMargin += lineSpacing - (topMargin + height + bottomMargin);\n }\n else if (lineSpacing > topMargin + height + bottomMargin) {\n topMargin += lineSpacing - (topMargin + height + bottomMargin);\n }\n topMargin += beforeSpacing;\n bottomMargin += HelperMethods.convertPointToPixel(paragraph.paragraphFormat.afterSpacing);\n for (var i = 0; i < lineWidget.children.length; i++) {\n var element = lineWidget.children[i];\n if (element instanceof ListTextElementBox) {\n var textAlignment = paragraph.paragraphFormat.textAlignment;\n if (textAlignment === 'Right') {\n leftMargin = this.viewer.clientArea.width - element.width;\n }\n else if (textAlignment === 'Center') {\n leftMargin = (this.viewer.clientArea.width - element.width) / 2;\n }\n element.margin = new Margin(leftMargin, topMargin, 0, bottomMargin);\n element.line = lineWidget;\n lineWidget.height = topMargin + height + bottomMargin;\n }\n }\n lineWidget.height = topMargin + height + bottomMargin;\n this.viewer.cutFromTop(this.viewer.clientActiveArea.y + lineWidget.height);\n //Clears the previous line elements from collection. \n };\n /**\n * @private\n */\n Layout.prototype.layoutListItems = function (paragraph) {\n if (!this.isFieldCode) {\n if (!isNullOrUndefined(paragraph.paragraphFormat)\n && !isNullOrUndefined(paragraph.paragraphFormat.listFormat)\n && !isNullOrUndefined(this.viewer.getListById(paragraph.paragraphFormat.listFormat.listId)) &&\n paragraph.paragraphFormat.listFormat.listLevelNumber >= 0\n && paragraph.paragraphFormat.listFormat.listLevelNumber < 9) {\n this.clearListElementBox(paragraph);\n this.layoutList(paragraph, this.viewer);\n }\n else if (paragraph.paragraphFormat.listFormat && paragraph.paragraphFormat.listFormat.listId === -1) {\n this.clearListElementBox(paragraph);\n }\n }\n };\n /**\n * Layouts list.\n * @param viewer\n */\n Layout.prototype.layoutList = function (paragraph, viewer) {\n var list = viewer.getListById(paragraph.paragraphFormat.listFormat.listId);\n viewer.updateClientWidth(-HelperMethods.convertPointToPixel(paragraph.paragraphFormat.firstLineIndent));\n var currentListLevel = this.getListLevel(list, paragraph.paragraphFormat.listFormat.listLevelNumber);\n // if (isNullOrUndefined(currentListLevel)) {\n // return;\n // }\n var lineWidget = paragraph.childWidgets[0];\n if (isNullOrUndefined(lineWidget)) {\n lineWidget = new LineWidget(paragraph);\n paragraph.childWidgets.push(lineWidget);\n }\n var element = new ListTextElementBox(currentListLevel, false);\n element.line = lineWidget;\n if (currentListLevel.listLevelPattern === 'Bullet') {\n element.text = currentListLevel.numberFormat;\n }\n else {\n element.text = this.getListNumber(paragraph.paragraphFormat.listFormat);\n }\n viewer.textHelper.updateTextSize(element, paragraph);\n var moveToNextPage;\n if (this.viewer instanceof PageLayoutViewer\n && this.viewer.clientActiveArea.height < element.height && this.viewer.clientActiveArea.y !== this.viewer.clientArea.y) {\n moveToNextPage = true;\n }\n viewer.cutFromLeft(viewer.clientActiveArea.x + element.width);\n //Adds the text element to the line\n lineWidget.children.splice(0, 0, element);\n if (currentListLevel.followCharacter !== 'None') {\n element = new ListTextElementBox(currentListLevel, true);\n if (currentListLevel.followCharacter === 'Tab') {\n element.text = '\\t';\n var index = lineWidget.children.indexOf(element);\n element.width = this.getTabWidth(paragraph, viewer, index, lineWidget, undefined);\n }\n else {\n element.text = ' ';\n viewer.textHelper.updateTextSize(element, paragraph);\n }\n viewer.cutFromLeft(viewer.clientActiveArea.x + element.width);\n //Adds the tabSpace to the line\n lineWidget.children.splice(1, 0, element);\n element.line = lineWidget;\n }\n if (moveToNextPage) {\n this.moveToNextPage(this.viewer, lineWidget);\n this.cutClientWidth(element);\n return;\n }\n if (currentListLevel.followCharacter !== 'None') {\n viewer.updateClientWidth(HelperMethods.convertPointToPixel(paragraph.paragraphFormat.firstLineIndent));\n }\n };\n /**\n * Adds body widget.\n * @param area\n * @param section\n * @private\n */\n Layout.prototype.addBodyWidget = function (area, widget) {\n var bodyWidget;\n if (widget) {\n bodyWidget = widget;\n }\n else {\n bodyWidget = new BodyWidget();\n }\n bodyWidget.width = area.width;\n bodyWidget.x = area.x;\n bodyWidget.y = area.y;\n // this.addSectionInDictionary(this.viewer, section, bodyWidget);\n return bodyWidget;\n };\n /**\n * Adds list level.\n * @param abstractList\n */\n Layout.prototype.addListLevels = function (abstractList) {\n for (var i = abstractList.levels.length; i < 9; i++) {\n var listLevel = new WListLevel(abstractList);\n var val = i % 3;\n if (abstractList.levels[0].listLevelPattern === 'Bullet') {\n listLevel.listLevelPattern = 'Bullet';\n listLevel.numberFormat = val === 0 ? '\\uf0b7' : val === 1 ? '\\uf0a7' : '\\uf0d8';\n listLevel.characterFormat.fontFamily = listLevel.numberFormat === '\\uf0a7' || '\\uf0d8' ? 'Wingdings' : 'Symbol';\n }\n else {\n listLevel.listLevelPattern = this.getListLevelPattern(val);\n listLevel.numberFormat = '%' + (i + 1).toString() + '.';\n listLevel.startAt = 1;\n listLevel.restartLevel = i;\n }\n listLevel.paragraphFormat = new WParagraphFormat(undefined);\n listLevel.paragraphFormat.leftIndent = 48 * (i + 1);\n listLevel.paragraphFormat.firstLineIndent = -24;\n abstractList.levels.push(listLevel);\n }\n };\n Layout.prototype.addSplittedLineWidget = function (lineWidget, elementIndex, splittedElementBox) {\n var paragraph = lineWidget.paragraph;\n var movedElementBox = [];\n var lineIndex = paragraph.childWidgets.indexOf(lineWidget);\n if (!isNullOrUndefined(splittedElementBox)) {\n movedElementBox.push(splittedElementBox);\n }\n var newLineWidget = undefined;\n //Move Next element box to temp collection\n for (var i = elementIndex + 1; i < lineWidget.children.length; i++) {\n movedElementBox.push(lineWidget.children[i]);\n }\n if (movedElementBox.length > 0) {\n if (lineIndex === paragraph.childWidgets.length - 1) {\n newLineWidget = new LineWidget(paragraph);\n }\n else {\n newLineWidget = paragraph.childWidgets[lineIndex + 1];\n }\n for (var j = 0; j < movedElementBox.length; j++) {\n movedElementBox[j].line = newLineWidget;\n }\n lineWidget.children.splice(elementIndex + 1, lineWidget.children.length - 1);\n newLineWidget.children = movedElementBox.concat(newLineWidget.children);\n if (paragraph.childWidgets.indexOf(newLineWidget) === -1) {\n paragraph.childWidgets.splice(lineIndex + 1, 0, newLineWidget);\n }\n }\n };\n /**\n * Adds element to line.\n * @param element\n */\n Layout.prototype.addElementToLine = function (paragraph, element) {\n this.viewer.cutFromLeft(this.viewer.clientActiveArea.x + element.width);\n if (paragraph.paragraphFormat.textAlignment === 'Justify' && element instanceof TextElementBox) {\n this.splitTextElementWordByWord(element);\n }\n };\n /**\n * Splits element for client area.\n * @param element\n */\n Layout.prototype.splitElementForClientArea = function (paragraph, element) {\n var line = element.line;\n if (element.line.children.length > 0) {\n var previousElement = element.previousElement;\n var index = element.indexInOwner;\n // if line widget contain only single image element box need to skip this from splitting\n // else move element to next line\n if (element.line.children.length > 1) {\n if (previousElement && this.viewer.clientActiveArea.x !== this.viewer.clientArea.x) {\n index -= 1;\n }\n }\n this.addSplittedLineWidget(element.line, index);\n }\n };\n /**\n * Splits by word\n * @param elementBox\n * @param text\n * @param width\n * @param characterFormat\n */\n // tslint:disable-next-line:max-line-length\n Layout.prototype.splitByWord = function (lineWidget, paragraph, elementBox, text, width, characterFormat) {\n var index = this.getSplitIndexByWord(this.viewer.clientActiveArea.width, text, width, characterFormat);\n if (index > 0 && index < elementBox.length) {\n var indexOf = lineWidget.children.indexOf(elementBox);\n var lineIndex = paragraph.childWidgets.indexOf(lineWidget);\n var splittedElementBox = new TextElementBox();\n text = text.substring(index);\n splittedElementBox.text = text;\n if (text[0] === ' ') {\n var prevLength = text.length;\n text = HelperMethods.trimStart(text); //To trim white space at starting of the text.\n index += prevLength - text.length;\n }\n splittedElementBox.characterFormat.copyFormat(elementBox.characterFormat);\n splittedElementBox.width = this.viewer.textHelper.getWidth(splittedElementBox.text, characterFormat);\n elementBox.text = elementBox.text.substr(0, index);\n elementBox.width -= splittedElementBox.width;\n splittedElementBox.height = elementBox.height;\n splittedElementBox.baselineOffset = elementBox.baselineOffset;\n this.addSplittedLineWidget(lineWidget, indexOf, splittedElementBox);\n this.addElementToLine(paragraph, elementBox);\n if (elementBox.width === 0) {\n lineWidget.children.splice(indexOf, 1);\n }\n }\n };\n /**\n * Splits by character.\n * @param textElement\n * @param text\n * @param width\n * @param characterFormat\n */\n // tslint:disable-next-line:max-line-length\n Layout.prototype.splitByCharacter = function (lineWidget, textElement, text, width, characterFormat) {\n var paragraph = lineWidget.paragraph;\n // tslint:disable-next-line:max-line-length\n var index = this.getTextSplitIndexByCharacter(this.viewer.clientArea.width, this.viewer.clientActiveArea.width, text, width, characterFormat);\n var splitWidth = 0;\n if (index < textElement.length) {\n splitWidth = this.viewer.textHelper.measureTextExcludingSpaceAtEnd(text.substring(0, index), characterFormat);\n text = text.substring(index);\n }\n if (splitWidth > this.viewer.clientActiveArea.width && textElement.line.children.indexOf(textElement) > 0) {\n this.addSplittedLineWidget(lineWidget, textElement.line.children.indexOf(textElement) - 1);\n }\n var indexOf = lineWidget.children.indexOf(textElement);\n if (index < textElement.length) {\n var lineIndex = paragraph.childWidgets.indexOf(lineWidget);\n var splittedElement = new TextElementBox();\n splittedElement.text = text;\n textElement.text = textElement.text.substr(0, index);\n splittedElement.characterFormat.copyFormat(textElement.characterFormat);\n splittedElement.width = this.viewer.textHelper.getWidth(splittedElement.text, characterFormat);\n textElement.width -= splittedElement.width;\n splittedElement.height = textElement.height;\n splittedElement.baselineOffset = textElement.baselineOffset;\n lineWidget.children.splice(textElement.indexInOwner + 1, 0, splittedElement);\n this.addSplittedLineWidget(lineWidget, indexOf);\n this.addElementToLine(paragraph, textElement);\n if (textElement.width === 0) {\n lineWidget.children.splice(indexOf, 1);\n }\n }\n else {\n //Adds the last text element on inline to line elements collection. \n this.addSplittedLineWidget(lineWidget, indexOf);\n this.addElementToLine(paragraph, textElement);\n }\n };\n /**\n * Splits text element word by word.\n * @param textElement\n */\n Layout.prototype.splitTextElementWordByWord = function (textElement) {\n var lineWidget = textElement.line;\n var indexOf = lineWidget.children.indexOf(textElement);\n var text = textElement.text;\n var format;\n var characterUptoWs = text.trim().indexOf(' ');\n if (characterUptoWs >= 0) {\n lineWidget.children.splice(indexOf, 1);\n format = textElement.characterFormat;\n var fontSize = format.fontSize;\n var index = textElement.length - HelperMethods.trimStart(text).length; //Trim start\n while (index < textElement.length) {\n index = this.getTextIndexAfterSpace(text, index);\n if (index === 0 || index === textElement.length) {\n break;\n }\n if (index < textElement.length) {\n var splittedElement = new TextElementBox();\n var splittedText = text.substring(0, index);\n text = text.substring(index);\n if (text.substring(0, 1) === ' ') {\n // start of the text is trimmed and its length is reduced from text length. \n index += text.length - HelperMethods.trimStart(text).length;\n }\n splittedElement.text = splittedText;\n splittedElement.characterFormat.copyFormat(textElement.characterFormat);\n splittedElement.line = lineWidget;\n splittedElement.width = this.viewer.textHelper.getWidth(splittedElement.text, format);\n splittedElement.height = textElement.height;\n splittedElement.baselineOffset = textElement.baselineOffset;\n lineWidget.children.splice(indexOf, 0, splittedElement);\n textElement.text = text;\n textElement.width -= splittedElement.width;\n if (textElement.width === 0) {\n lineWidget.children.splice(lineWidget.children.indexOf(textElement), 1);\n }\n index = 0;\n indexOf++;\n }\n }\n textElement.text = text;\n lineWidget.children.splice(indexOf, 0, textElement);\n }\n };\n /**\n * Splits text for client area.\n * @param element\n * @param text\n * @param width\n * @param characterFormat\n */\n // tslint:disable-next-line:max-line-length\n Layout.prototype.splitTextForClientArea = function (lineWidget, element, text, width, characterFormat) {\n var paragraph = lineWidget.paragraph;\n var isSplitByWord = true;\n var index = -1;\n if (!(text.substring(0, 1) === ' ')) {\n var textWidth = width;\n var characterUptoWS = 0;\n characterUptoWS = HelperMethods.trimEnd(text).indexOf(' ') + 1;\n index = characterUptoWS;\n //Checks whether text not starts with white space. If starts with white space, no need to check previous text blocks.\n if (index > 0) {\n textWidth = this.viewer.textHelper.measureTextExcludingSpaceAtEnd(text.slice(0, index), characterFormat);\n }\n if (this.viewer.clientActiveArea.width < textWidth) {\n //Check and split the previous text elements to next line. \n isSplitByWord = this.checkPreviousElement(lineWidget, lineWidget.children.indexOf(element), characterFormat);\n if (isSplitByWord) {\n //lineWidget = paragraph.childWidgets[paragraph.childWidgets.indexOf(lineWidget) + 1] as LineWidget;\n //isSplitByWord = textWidth <= this.viewer.clientActiveArea.width;\n return;\n }\n }\n }\n else {\n index = 1;\n }\n if (width <= this.viewer.clientActiveArea.width) {\n //Fits the text in current line.\n this.addElementToLine(paragraph, element);\n }\n else if (isSplitByWord && (index > 0 || text.indexOf(' ') !== -1)) {\n this.splitByWord(lineWidget, paragraph, element, text, width, characterFormat);\n }\n else {\n this.splitByCharacter(lineWidget, element, text, width, characterFormat);\n }\n };\n /**\n * Handle tab or line break character splitting\n * @param {LayoutViewer} viewer\n * @param {TextElementBox} span\n * @param {number} index\n * @param {string} spiltBy\n * @private\n */\n Layout.prototype.splitByLineBreakOrTab = function (viewer, span, index, spiltBy) {\n // Splits tab character to separate SpanAdv\n var inlineIndex = span.line.children.indexOf(span);\n var value = span.text;\n var remainder = value.substring(index);\n var newSpan = spiltBy === '\\t' ? new TabElementBox() : new TextElementBox();\n newSpan.line = span.line;\n newSpan.characterFormat.copyFormat(span.characterFormat);\n span.line.children.splice(inlineIndex + 1, 0, newSpan);\n if (index > 0 && remainder.length === 1) {\n newSpan.text = value.substring(index);\n span.text = value.substring(0, index);\n }\n else if (index > 0) {\n newSpan.text = spiltBy;\n var newText = new TextElementBox();\n newText.line = span.line;\n newText.text = value.substring(index + 1);\n newText.characterFormat.copyFormat(span.characterFormat);\n span.line.children.splice(inlineIndex + 2, 0, newText);\n span.text = value.substring(0, index);\n }\n else if (remainder !== '') {\n newSpan.text = value.substring(index + 1);\n span.text = spiltBy;\n }\n };\n /**\n * Moves to next line.\n */\n Layout.prototype.moveToNextLine = function (line) {\n var paragraph = line.paragraph;\n var paraFormat = paragraph.paragraphFormat;\n var isParagraphStart = line.isFirstLine();\n var isParagraphEnd = line.isLastLine();\n var height = 0;\n var maxDescent = 0;\n var afterSpacing = 0;\n var beforeSpacing = 0;\n var lineSpacing = 0;\n var firstLineIndent = 0;\n this.updateLineWidget(line);\n height = this.maxTextHeight;\n maxDescent = height - this.maxTextBaseline;\n //Updates before spacing at the top of Paragraph first line.\n if (isParagraphStart) {\n beforeSpacing = this.getBeforeSpacing(paragraph);\n firstLineIndent = HelperMethods.convertPointToPixel(paraFormat.firstLineIndent);\n }\n //Updates after spacing at the bottom of Paragraph last line.\n if (isParagraphEnd) {\n afterSpacing = HelperMethods.convertPointToPixel(paraFormat.afterSpacing);\n }\n if (isNaN(this.maxTextHeight)) {\n //Calculate line height and descent based on formatting defined in paragraph.\n var measurement = this.viewer.textHelper.measureText('a', paragraph.characterFormat);\n height = measurement.Height;\n maxDescent = height - measurement.BaselineOffset;\n }\n else {\n height = this.maxTextHeight;\n maxDescent = height - this.maxTextBaseline;\n }\n // Gets line spacing.\n lineSpacing = this.getLineSpacing(paragraph, height);\n if (paraFormat.lineSpacingType === 'Exactly'\n && lineSpacing < maxDescent + this.maxBaseline) {\n lineSpacing = maxDescent + this.maxBaseline;\n }\n var subWidth = 0;\n var whiteSpaceCount = 0;\n var textAlignment = paraFormat.textAlignment;\n //Calculates the sub width, for text alignments - Center, Right, Justify.\n if (textAlignment !== 'Left' && this.viewer.textWrap && !(textAlignment === 'Justify' && isParagraphEnd)) {\n // tslint:disable-next-line:max-line-length\n var getWidthAndSpace = this.getSubWidth(line, textAlignment === 'Justify', whiteSpaceCount, firstLineIndent);\n subWidth = getWidthAndSpace.subWidth;\n whiteSpaceCount = getWidthAndSpace.spaceCount;\n }\n var addSubWidth = false;\n var lineSpacingType = paraFormat.lineSpacingType;\n for (var i = 0; i < line.children.length; i++) {\n var topMargin = 0;\n var bottomMargin = 0;\n var leftMargin = 0;\n var elementBox = line.children[i];\n // tslint:disable-next-line:max-line-length\n var alignElements = this.alignLineElements(elementBox, topMargin, bottomMargin, maxDescent, addSubWidth, subWidth, textAlignment, whiteSpaceCount, i === line.children.length - 1);\n topMargin = alignElements.topMargin;\n bottomMargin = alignElements.bottomMargin;\n addSubWidth = alignElements.addSubWidth;\n whiteSpaceCount = alignElements.whiteSpaceCount;\n //Updates line spacing, paragraph after/ before spacing and aligns the text to base line offset.\n if (lineSpacingType === 'Multiple') {\n if (lineSpacing > height) {\n bottomMargin += lineSpacing - height;\n }\n else {\n topMargin += lineSpacing - height;\n }\n }\n else if (lineSpacingType === 'Exactly') {\n topMargin += lineSpacing - (topMargin + elementBox.height + bottomMargin);\n }\n else if (lineSpacing > topMargin + elementBox.height + bottomMargin) {\n topMargin += lineSpacing - (topMargin + elementBox.height + bottomMargin);\n }\n topMargin += beforeSpacing;\n bottomMargin += afterSpacing;\n if ((i === 0 && !(elementBox instanceof FieldElementBox)) ||\n (elementBox.previousNode instanceof FieldElementBox && elementBox.previousNode.fieldType === 2\n && elementBox.previousNode.fieldBegin && line.children.indexOf(elementBox.previousNode.fieldBegin) === 0)) {\n line.height = topMargin + elementBox.height + bottomMargin;\n if (textAlignment === 'Right') {\n //Aligns the text as right justified.\n leftMargin = subWidth;\n }\n else if (textAlignment === 'Center') {\n //Aligns the text as center justified.\n leftMargin = subWidth / 2;\n }\n }\n elementBox.margin = new Margin(leftMargin, topMargin, 0, bottomMargin);\n elementBox.line = line;\n }\n this.viewer.cutFromTop(this.viewer.clientActiveArea.y + line.height);\n };\n Layout.prototype.updateLineWidget = function (line) {\n for (var i = 0; i < line.children.length; i++) {\n var element = line.children[i];\n if (element instanceof TextElementBox || element instanceof ListTextElementBox) {\n if (this.maxTextHeight < element.height) {\n this.maxTextHeight = element.height;\n this.maxTextBaseline = element.baselineOffset;\n }\n if (this.maxBaseline < this.maxTextBaseline) {\n this.maxBaseline = this.maxTextBaseline;\n }\n }\n else if (this.maxBaseline < element.height) {\n this.maxBaseline = element.height;\n }\n }\n };\n /**\n * @param viewer\n */\n Layout.prototype.moveToNextPage = function (viewer, line) {\n var paragraphWidget = line.paragraph;\n var index = 0;\n if (!isNullOrUndefined(line)) {\n index = paragraphWidget.childWidgets.indexOf(line);\n if (index > 0) {\n paragraphWidget.height = viewer.clientActiveArea.y - paragraphWidget.y;\n }\n }\n var nextBody = this.moveBlocksToNextPage(paragraphWidget);\n this.viewer.updateClientArea(nextBody.sectionFormat, nextBody.page);\n this.viewer.updateClientAreaForBlock(paragraphWidget, true);\n if (index > 0) {\n var nextParagraph = void 0;\n if (nextBody.firstChild instanceof ParagraphWidget && nextBody.firstChild.equals(paragraphWidget)) {\n nextParagraph = nextBody.firstChild;\n }\n else {\n nextParagraph = new ParagraphWidget();\n }\n nextParagraph = this.addParagraphWidget(this.viewer.clientActiveArea, nextParagraph);\n nextParagraph.index = paragraphWidget.index;\n var insertIndex = 0;\n for (var i = index; i < paragraphWidget.childWidgets.length; i++) {\n var lineWidget = paragraphWidget.childWidgets[i];\n lineWidget.paragraph = nextParagraph;\n nextParagraph.childWidgets.splice(insertIndex, 0, lineWidget);\n lineWidget.paragraph = nextParagraph;\n insertIndex++;\n }\n nextParagraph.paragraphFormat = paragraphWidget.paragraphFormat;\n nextParagraph.characterFormat = paragraphWidget.characterFormat;\n paragraphWidget.childWidgets.splice(index);\n paragraphWidget = nextParagraph;\n }\n else {\n paragraphWidget.containerWidget.removeChild(paragraphWidget.indexInOwner);\n }\n if (nextBody.childWidgets.indexOf(paragraphWidget) === -1) {\n nextBody.childWidgets.splice(0, 0, paragraphWidget);\n }\n paragraphWidget.containerWidget = nextBody;\n this.viewer.updateClientAreaLocation(paragraphWidget, this.viewer.clientActiveArea);\n };\n /**\n * Aligns line elements\n * @param element\n * @param topMargin\n * @param bottomMargin\n * @param maxDescent\n * @param addSubWidth\n * @param subWidth\n * @param textAlignment\n * @param whiteSpaceCount\n * @param isLastElement\n */\n // tslint:disable-next-line:max-line-length\n Layout.prototype.alignLineElements = function (element, topMargin, bottomMargin, maxDescent, addSubWidth, subWidth, textAlignment, whiteSpaceCount, isLastElement) {\n if (element instanceof TextElementBox || element instanceof ListTextElementBox) {\n var textElement = element instanceof TextElementBox ? element : undefined;\n //Updates the text to base line offset.\n // tslint:disable-next-line:max-line-length\n var baselineOffset = element instanceof TextElementBox ? textElement.baselineOffset : element.baselineOffset;\n topMargin += this.maxBaseline - baselineOffset;\n bottomMargin += maxDescent - (element.height - baselineOffset);\n //Updates the text to base line offset.\n if (!isNullOrUndefined(textElement) && textAlignment === 'Justify' && whiteSpaceCount > 0) {\n //Aligns the text as Justified.\n var width = textElement.width;\n var text = textElement.text;\n if (!addSubWidth) {\n text = HelperMethods.trimStart(text); // trim start\n addSubWidth = (text.length > 0);\n }\n if (addSubWidth) {\n var spaceCount = text.length - HelperMethods.removeSpace(text).length;\n if (isLastElement) {\n spaceCount -= text.length - HelperMethods.trimEnd(text).length;\n }\n if (whiteSpaceCount < spaceCount) {\n width = this.viewer.textHelper.measureTextExcludingSpaceAtEnd(text, textElement.characterFormat);\n spaceCount = whiteSpaceCount;\n }\n if (spaceCount > 0) {\n textElement.width = width + subWidth * spaceCount;\n whiteSpaceCount -= spaceCount;\n }\n }\n }\n }\n else {\n addSubWidth = true;\n //Updates the Image/UIElement to base line offset.\n topMargin += this.maxBaseline - element.height;\n bottomMargin += maxDescent;\n }\n return { 'topMargin': topMargin, 'bottomMargin': bottomMargin, 'addSubWidth': addSubWidth, 'whiteSpaceCount': whiteSpaceCount };\n };\n /**\n * Updates widget to page.\n * @param viewer\n * @param block\n * @private\n */\n Layout.prototype.updateWidgetToPage = function (viewer, paragraphWidget) {\n if (paragraphWidget.isInsideTable) {\n var cellWidget = paragraphWidget.associatedCell;\n paragraphWidget.height = viewer.clientActiveArea.y - paragraphWidget.y;\n // if (viewer instanceof PageLayoutViewer) {\n if (isNullOrUndefined(paragraphWidget.associatedCell) || isNullOrUndefined(paragraphWidget.associatedCell.ownerRow)\n || isNullOrUndefined(paragraphWidget.associatedCell.ownerRow.rowFormat)) {\n return;\n }\n if (paragraphWidget.associatedCell.ownerRow.rowFormat.heightType === 'Exactly') {\n cellWidget.height = HelperMethods.convertPointToPixel(paragraphWidget.associatedCell.ownerRow.rowFormat.height);\n }\n else {\n // tslint:disable-next-line:max-line-length\n if ([cellWidget].length <= 1 && paragraphWidget.associatedCell.ownerRow.rowFormat.heightType === 'AtLeast') {\n cellWidget.height = Math.max(HelperMethods.convertPointToPixel(paragraphWidget.associatedCell.ownerRow.rowFormat.height), this.getCellContentHeight(cellWidget));\n }\n else {\n cellWidget.height = cellWidget.height + paragraphWidget.height;\n }\n }\n // } else {\n // cellWidget.height = cellWidget.height + paragraphWidget.height;\n // }\n // cellWidget.childWidgets.push(paragraphWidget);\n paragraphWidget.containerWidget = cellWidget;\n }\n else {\n paragraphWidget.height = viewer.clientActiveArea.y - paragraphWidget.y;\n //Adds the paragraph widget to the Header Footer/ Body widget.\n // this.updateWidgetsToBody(paragraphWidget, viewer, paragraphWidget);\n //For canvas no need to render paragraph widget here. In case of div, need to render paragraph here.\n // tslint:disable-next-line:max-line-length \n // this.render.renderParagraphWidget((paragraphWidget.containerWidget as BodyWidget).page, paragraphWidget);\n }\n if (paragraphWidget.bodyWidget instanceof HeaderFooterWidget) {\n paragraphWidget.containerWidget.height += paragraphWidget.height;\n if (this.viewer.owner.enableHeaderAndFooter && paragraphWidget.bodyWidget.headerFooterType.indexOf('Footer') !== -1) {\n this.shiftFooterChildLocation(paragraphWidget.bodyWidget, this.viewer);\n }\n }\n };\n /**\n * @private\n */\n Layout.prototype.shiftFooterChildLocation = function (widget, viewer) {\n var pageHeight = widget.page.bodyWidgets[0].sectionFormat.pageHeight;\n if (widget.headerFooterType.indexOf('Footer') !== -1) {\n var footerDistance = widget.page.bodyWidgets[0].sectionFormat.footerDistance;\n var height = HelperMethods.convertPointToPixel(pageHeight - footerDistance);\n var top_2;\n if (widget.y + widget.height > height) {\n top_2 = height - (widget.y + widget.height);\n }\n else if (widget.y + widget.height < height) {\n top_2 = (widget.y + widget.height) - height;\n }\n if (!isNullOrUndefined(top_2)) {\n top_2 = height - (widget.y + widget.height);\n this.shiftChildLocation(top_2, widget);\n viewer.clientActiveArea.y += top_2;\n }\n }\n };\n /**\n * Checks previous element.\n * @param characterFormat\n */\n Layout.prototype.checkPreviousElement = function (line, index, characterFormat) {\n var paragraph = line.paragraph;\n var isSplitByWord = false;\n var lastTextElement = 0;\n for (var i = index - 1; i >= 0; i--) {\n var textElement = line.children[i];\n if (textElement instanceof TextElementBox) {\n var text = textElement.text;\n lastTextElement = i;\n if (text.length > 0 && text[text.length - 1] === ' ') {\n if (i === index - 1) {\n this.addSplittedLineWidget(line, index - 1);\n return true;\n }\n isSplitByWord = true;\n break;\n }\n else if (text === '\\t') {\n return false;\n }\n else if (text.indexOf(' ') >= 0) {\n isSplitByWord = true;\n var index_1 = text.lastIndexOf(' ') + 1;\n //Splits the text element by space.\n var splittedElement = new TextElementBox();\n splittedElement.text = text.substr(index_1);\n splittedElement.characterFormat.copyFormat(textElement.characterFormat);\n textElement.text = text.substr(0, index_1);\n this.viewer.textHelper.getTextSize(splittedElement, characterFormat);\n textElement.width -= splittedElement.width;\n textElement.height = splittedElement.height;\n if (textElement.width === 0) {\n line.children.splice(i, 1);\n }\n //Adds the text element to the line\n line.children.splice(i + 1, 0, splittedElement);\n break;\n }\n }\n else if (!(textElement instanceof ListTextElementBox)) {\n //Handled for inline images/UIelements.\n lastTextElement = i;\n isSplitByWord = true;\n break;\n }\n }\n if (isSplitByWord) {\n lastTextElement++;\n if (lastTextElement < line.children.length) {\n var splitWidth = 0;\n for (var i = lastTextElement; i < line.children.length; i++) {\n splitWidth += line.children[i].width;\n this.addSplittedLineWidget(line, i - 1);\n i--;\n }\n this.viewer.updateClientWidth(splitWidth);\n }\n }\n return isSplitByWord;\n };\n /**\n * @private\n */\n Layout.prototype.clearListElementBox = function (paragraph) {\n if (paragraph.childWidgets.length === 0) {\n return;\n }\n var line = paragraph.childWidgets[0];\n if (isNullOrUndefined(line.children)) {\n return;\n }\n for (var i = 0; i < line.children.length; i++) {\n if (line.children[i] instanceof ListTextElementBox) {\n line.children.splice(i, 1);\n i--;\n }\n else {\n break;\n }\n }\n };\n /**\n * Gets list number.\n * @param listFormat\n * @param document\n * @private\n */\n Layout.prototype.getListNumber = function (listFormat) {\n var list = this.viewer.getListById(listFormat.listId);\n var levelNumber = listFormat.listLevelNumber;\n var listLevel = this.getListLevel(list, listFormat.listLevelNumber);\n // tslint:disable-next-line:max-line-length\n var levelOverride = !isNullOrUndefined(list.levelOverrides) ? list.levelOverrides[levelNumber] : undefined;\n // If LevelOverride exists and have either override list level or StartAtOverride, then only list numbering will be restarted.\n // tslint:disable-next-line:max-line-length\n // if (!isNullOrUndefined(levelOverride) && !(document.renderedLevelOverrides.indexOf(levelOverride) > -1) && isNullOrUndefined(levelOverride.overrideListLevel)) {\n // //Add List Override style\n // document.renderedLevelOverrides.push(list.levelOverrides.getItem(levelNumber) as WLevelOverride);\n // if (document.renderedLists.containsKey((list.wordDocument as WordDocument).getAbstractListById(list.abstractListId))) {\n // tslint:disable-next-line:max-line-length\n // let levels: Dictionary = document.renderedLists.get((list.wordDocument as WordDocument).getAbstractListById(list.abstractListId));\n // if (levels.containsKey(levelNumber)) {\n // levels.remove(levelNumber);\n // }\n // }\n // }\n this.updateListValues(list, levelNumber);\n return this.getListText(list, levelNumber, listLevel);\n };\n /**\n * Gets list start value\n * @param listLevelNumber\n * @param list\n * @private\n */\n Layout.prototype.getListStartValue = function (listLevelNumber, list) {\n // tslint:disable-next-line:max-line-length\n var levelOverride = !isNullOrUndefined(list.levelOverrides) ? list.levelOverrides[listLevelNumber] : undefined;\n if (!isNullOrUndefined(levelOverride) && isNullOrUndefined(levelOverride.overrideListLevel)) {\n return levelOverride.startAt;\n }\n var listLevel = this.getListLevel(list, listLevelNumber);\n if (isNullOrUndefined(listLevel)) {\n return 0;\n }\n else {\n return listLevel.startAt;\n }\n };\n /**\n * Updates list values.\n * @param list\n * @param listLevelNumber\n * @param document\n */\n Layout.prototype.updateListValues = function (list, listLevelNumber) {\n if (!this.viewer.renderedLists.containsKey(this.viewer.getAbstractListById(list.abstractListId))) {\n var startVal = new Dictionary();\n this.viewer.renderedLists.add(this.viewer.getAbstractListById(list.abstractListId), startVal);\n var listLevel = this.getListLevel(list, listLevelNumber);\n for (var i = 0; i <= listLevelNumber; i++) {\n startVal.add(i, this.getListStartValue(i, list));\n }\n }\n else {\n // tslint:disable-next-line:max-line-length\n var levels = this.viewer.renderedLists.get(this.viewer.getAbstractListById(list.abstractListId));\n if (levels.containsKey(listLevelNumber)) {\n var startAt = levels.get(listLevelNumber);\n levels.set(listLevelNumber, startAt + 1);\n var levelNumber = listLevelNumber + 1;\n while (levelNumber < this.viewer.getAbstractListById(list.abstractListId).levels.length) {\n var listLevel = this.getListLevel(list, levelNumber);\n // if (!isNullOrUndefined(listLevel)) {\n if (levels.containsKey(levelNumber) && listLevel.restartLevel > listLevelNumber) {\n levels.remove(levelNumber);\n // if (document.renderedListLevels.indexOf(listLevel) > -1) {\n // document.renderedListLevels.pop();\n // }\n }\n // }\n levelNumber++;\n }\n }\n else {\n var levelNumber = listLevelNumber;\n while (!levels.containsKey(levelNumber - 1) && levelNumber > 0) {\n var listLevel = this.getListLevel(list, levelNumber - 1);\n // if (!isNullOrUndefined(listLevel)) {\n levels.add(levelNumber - 1, this.getListStartValue(levelNumber - 1, list));\n // if (document.renderedListLevels.indexOf(listLevel) !== -1) {\n // document.renderedListLevels.push(listLevel);\n // }\n // }\n levelNumber--;\n }\n var startAt = this.getListStartValue(listLevelNumber, list);\n levels.add(listLevelNumber, startAt);\n }\n }\n };\n /**\n * Gets list text\n * @param listAdv\n * @param listLevelNumber\n * @param currentListLevel\n * @param document\n */\n Layout.prototype.getListText = function (listAdv, listLevelNumber, currentListLevel) {\n var listText = currentListLevel.numberFormat;\n // tslint:disable-next-line:max-line-length\n if (this.viewer.renderedLists.containsKey(this.viewer.getAbstractListById(listAdv.abstractListId))) {\n var levels = this.viewer.renderedLists.get(this.viewer.getAbstractListById(listAdv.abstractListId));\n var keys = levels.keys;\n for (var i = 0; i < keys.length; i++) {\n var levelNumber = keys[i];\n var levelKey = '%' + (levelNumber + 1).toString();\n var listLevel = this.getListLevel(listAdv, levelNumber);\n if (listText.match(levelKey)) {\n if (levelNumber > listLevelNumber) {\n return '';\n }\n else if (levels.containsKey(levelNumber) && !isNullOrUndefined(listLevel)) {\n listText = listText.replace(levelKey, this.getListTextListLevel(listLevel, levels.get(levelNumber)));\n }\n else {\n listText = listText.replace(levelKey, '0');\n }\n }\n }\n }\n return listText;\n };\n /**\n * Gets the roman letter.\n * @param number\n * @private\n */\n Layout.prototype.getAsLetter = function (number) {\n // if (number <= 0) {\n // return '';\n // }\n var quotient = number / 26;\n var remainder = number % 26;\n if (remainder === 0) {\n //If number denotes the factor of 26, then reduce quotient by 1 and set remainder as 26.\n remainder = 26;\n quotient--;\n }\n //Index of A char in the ASCII table. \n var letter = String.fromCharCode(65 - 1 + remainder);\n var listValue = '';\n while (quotient >= 0) {\n listValue = listValue + letter.toString();\n quotient--;\n }\n return listValue;\n };\n /**\n * Gets list text using list level pattern.\n * @param listLevel\n * @param listValue\n * @private\n */\n Layout.prototype.getListTextListLevel = function (listLevel, listValue) {\n switch (listLevel.listLevelPattern) {\n case 'UpRoman':\n return this.getAsRoman(listValue).toUpperCase();\n case 'LowRoman':\n return this.getAsRoman(listValue).toLowerCase();\n case 'UpLetter':\n return this.getAsLetter(listValue).toUpperCase();\n case 'LowLetter':\n return this.getAsLetter(listValue).toLowerCase();\n case 'Arabic':\n return (listValue).toString();\n case 'LeadingZero':\n return this.getAsLeadingZero(listValue);\n case 'Number':\n return (listValue).toString();\n case 'OrdinalText':\n return (listValue).toString();\n case 'Ordinal':\n return (listValue).toString();\n case 'FarEast':\n return (listValue).toString();\n case 'Special':\n return (listValue).toString();\n default:\n return '';\n }\n };\n /**\n * Generate roman number for the specified number.\n * @param number\n * @param magnitude\n * @param letter\n */\n Layout.prototype.generateNumber = function (number, magnitude, letter) {\n var numberstring = '';\n while (number >= magnitude) {\n number -= magnitude;\n numberstring += letter;\n this.value = number;\n }\n return numberstring.toString();\n };\n /**\n * Gets list value prefixed with zero, if less than 10\n * @param listValue\n */\n Layout.prototype.getAsLeadingZero = function (listValue) {\n if (listValue < 10) {\n return '0' + listValue.toString();\n }\n else {\n return listValue.toString();\n }\n };\n /**\n * Gets the roman number\n * @param number\n * @private\n */\n Layout.prototype.getAsRoman = function (number) {\n var retval = '';\n this.value = number;\n retval += this.generateNumber(this.value, 1000, 'M');\n retval += this.generateNumber(this.value, 900, 'CM');\n retval += this.generateNumber(this.value, 500, 'D');\n retval += this.generateNumber(this.value, 400, 'CD');\n retval += this.generateNumber(this.value, 100, 'C');\n retval += this.generateNumber(this.value, 90, 'XC');\n retval += this.generateNumber(this.value, 50, 'L');\n retval += this.generateNumber(this.value, 40, 'XL');\n retval += this.generateNumber(this.value, 10, 'X');\n retval += this.generateNumber(this.value, 9, 'IX');\n retval += this.generateNumber(this.value, 5, 'V');\n retval += this.generateNumber(this.value, 4, 'IV');\n retval += this.generateNumber(this.value, 1, 'I');\n return retval.toString();\n };\n /**\n * Gets the list level\n * @param list\n * @param listLevelNumber\n * @private\n */\n Layout.prototype.getListLevel = function (list, listLevelNumber) {\n if (!isNullOrUndefined(list)) {\n var abstractList = this.viewer.getAbstractListById(list.abstractListId);\n if (!isNullOrUndefined(list) && abstractList.levels.length <= listLevelNumber\n && listLevelNumber >= 0 && listLevelNumber < 9) {\n this.addListLevels(abstractList);\n }\n var levelOverrideAdv = undefined;\n var level = false;\n level = (!isNullOrUndefined(list.levelOverrides))\n && !isNullOrUndefined(((levelOverrideAdv = list.levelOverrides[listLevelNumber])))\n && (!isNullOrUndefined(levelOverrideAdv.overrideListLevel));\n if (level) {\n return levelOverrideAdv.overrideListLevel;\n }\n else if (!isNullOrUndefined(abstractList) && listLevelNumber >= 0 && listLevelNumber < abstractList.levels.length) {\n return abstractList.levels[listLevelNumber];\n }\n }\n return undefined;\n };\n /**\n * Gets tab width\n * @param paragraph\n * @param viewer\n */\n // tslint:disable-next-line:max-line-length\n Layout.prototype.getTabWidth = function (paragraph, viewer, index, lineWidget, element) {\n var fposition = 0;\n var isCustomTab = false;\n var tabs = paragraph.paragraphFormat.getUpdatedTabs();\n // Calculate hanging width\n if (viewer.clientActiveArea.x < viewer.clientArea.x) {\n return viewer.clientArea.x - viewer.clientActiveArea.x;\n }\n // Calculates tabwidth based on pageleftmargin and defaulttabwidth property\n var position = viewer.clientActiveArea.x -\n (viewer.clientArea.x - HelperMethods.convertPointToPixel(paragraph.paragraphFormat.leftIndent));\n var defaultTabWidth = HelperMethods.convertPointToPixel(viewer.defaultTabWidth);\n if (tabs.length === 0 && (position === 0 || defaultTabWidth === 0)) {\n return defaultTabWidth;\n }\n else {\n if (tabs.length > 0) {\n for (var i = 0; i < tabs.length; i++) {\n var tabPosition = HelperMethods.convertPointToPixel(tabs[i].position);\n if (tabs[i].tabJustification === 'Left' && position < tabPosition) {\n fposition = tabPosition;\n isCustomTab = true;\n if (!isNullOrUndefined(element)) {\n element.tabLeader = tabs[i].tabLeader;\n element.tabText = '';\n }\n break;\n }\n else if (tabs[i].tabJustification === 'Right' && position < tabPosition) {\n var tabwidth = tabPosition - position;\n var width = this.getRightTabWidth(index + 1, lineWidget, paragraph);\n if (width < tabwidth) {\n defaultTabWidth = tabwidth - width;\n }\n else {\n defaultTabWidth = 0;\n }\n fposition = position;\n isCustomTab = true;\n if (!isNullOrUndefined(element)) {\n element.tabLeader = tabs[i].tabLeader;\n element.tabText = '';\n }\n break;\n }\n }\n }\n if (!isCustomTab) {\n var diff = ((Math.round(position) * 100) % (Math.round(defaultTabWidth) * 100)) / 100;\n var cnt = (Math.round(position) - diff) / Math.round(defaultTabWidth);\n fposition = (cnt + 1) * defaultTabWidth;\n }\n return (fposition - position) > 0 ? fposition - position : defaultTabWidth;\n }\n };\n /**\n * Returns the right tab width\n * @param index - index of starting inline\n * @param lineWidget - current line widget\n * @param paragraph - current paragraph widget\n */\n Layout.prototype.getRightTabWidth = function (index, lineWidget, paragraph) {\n var width = 0;\n var isFieldCode = false;\n while (index < lineWidget.children.length) {\n var elementBox = lineWidget.children[index];\n if ((elementBox instanceof FieldElementBox) || (elementBox instanceof BookmarkElementBox) || isFieldCode) {\n if (elementBox instanceof FieldElementBox) {\n if (elementBox.fieldType === 0) {\n isFieldCode = true;\n }\n else if (elementBox.fieldType === 2) {\n isFieldCode = false;\n }\n }\n elementBox.width = 0;\n }\n else {\n this.viewer.textHelper.getTextSize(elementBox, elementBox.characterFormat);\n }\n if (elementBox instanceof TextElementBox && elementBox.text === '\\t') {\n return width;\n }\n else {\n width = width + elementBox.width;\n }\n index++;\n }\n return width;\n };\n /**\n * Gets split index by word.\n * @param clientActiveWidth\n * @param text\n * @param width\n * @param characterFormat\n */\n Layout.prototype.getSplitIndexByWord = function (clientActiveWidth, text, width, characterFormat) {\n var index = 0;\n var length = text.length;\n while (index < length) {\n var nextIndex = this.getTextIndexAfterSpace(text, index);\n if (nextIndex === 0 || nextIndex === length) {\n nextIndex = length - 1;\n }\n var splitWidth = width;\n if ((nextIndex < length - 1 || (nextIndex === length - 1 && text[nextIndex - 1] === ' ')) && index !== nextIndex) {\n splitWidth = this.viewer.textHelper.measureTextExcludingSpaceAtEnd(text.slice(0, nextIndex), characterFormat);\n }\n if (splitWidth <= clientActiveWidth) {\n index = nextIndex;\n }\n else {\n if (index === 0 && text[0] === ' ') {\n index = this.getTextIndexAfterSpace(text, 0);\n }\n break;\n }\n }\n return index;\n };\n /**\n * Gets split index by character\n * @param totalClientWidth\n * @param clientActiveAreaWidth\n * @param text\n * @param width\n * @param characterFormat\n */\n // tslint:disable-next-line:max-line-length\n Layout.prototype.getTextSplitIndexByCharacter = function (totalClientWidth, clientActiveAreaWidth, text, width, characterFormat) {\n var length = text.length;\n for (var i = 0; i < length; i++) {\n var splitWidth = width;\n if (i + 1 < length) {\n splitWidth = this.viewer.textHelper.measureTextExcludingSpaceAtEnd(text.substring(0, i + 1), characterFormat);\n }\n if (splitWidth > clientActiveAreaWidth) {\n if (i === 0 && splitWidth > totalClientWidth) {\n //Handle for cell/section having client width less than a character's width.\n return (length > 1 && text[1] === ' ') ? this.getTextIndexAfterSpace(text, 1) : 1;\n }\n return i;\n }\n }\n return 0;\n };\n /**\n * Gets sub width.\n * @param justify\n * @param spaceCount\n * @param firstLineIndent\n */\n Layout.prototype.getSubWidth = function (lineWidget, justify, spaceCount, firstLineIndent) {\n var width = 0;\n var trimSpace = true;\n var lineText = '';\n for (var i = lineWidget.children.length - 1; i >= 0; i--) {\n var element = lineWidget.children[i];\n if (element instanceof TextElementBox) {\n var elementText = element.text;\n lineText = elementText + lineText;\n if (trimSpace && (elementText.trim() !== '' || elementText === '\\t')) {\n if (HelperMethods.endsWith(elementText)) {\n width += this.viewer.textHelper.measureTextExcludingSpaceAtEnd(elementText, element.characterFormat);\n }\n else {\n width += element.width;\n }\n trimSpace = false;\n }\n else if (!trimSpace) {\n width += element.width;\n }\n }\n else {\n lineText = 'a' + lineText;\n trimSpace = false;\n width += element.width;\n }\n if (!justify) {\n width = Math.round(width);\n }\n }\n lineText = lineText.trim();\n spaceCount = lineText.length - HelperMethods.removeSpace(lineText).length;\n var subWidth = (this.viewer.clientArea.width - firstLineIndent - width);\n if (subWidth <= 0 || (spaceCount === 0 && justify)) {\n spaceCount = 0;\n subWidth = 0;\n }\n else if (justify) {\n subWidth = subWidth / spaceCount;\n }\n return { 'subWidth': subWidth, 'spaceCount': spaceCount };\n };\n /**\n * Gets before spacing.\n * @param paragraph\n * @private\n */\n Layout.prototype.getBeforeSpacing = function (paragraph) {\n var beforeSpacing = 0;\n if (paragraph.previousWidget instanceof ParagraphWidget) {\n if (paragraph.previousWidget.paragraphFormat.afterSpacing < paragraph.paragraphFormat.beforeSpacing) {\n // tslint:disable-next-line:max-line-length\n beforeSpacing = paragraph.paragraphFormat.beforeSpacing - paragraph.previousWidget.paragraphFormat.afterSpacing;\n }\n }\n else {\n beforeSpacing = paragraph.paragraphFormat.beforeSpacing;\n }\n return beforeSpacing;\n };\n /**\n * Gets line spacing.\n * @param paragraph\n * @param maxHeight\n * @private\n */\n Layout.prototype.getLineSpacing = function (paragraph, maxHeight) {\n if (isNullOrUndefined(paragraph.paragraphFormat)) {\n return 0;\n }\n var lineSpacing = 0;\n switch (paragraph.paragraphFormat.lineSpacingType) {\n case 'AtLeast':\n case 'Exactly':\n lineSpacing = paragraph.paragraphFormat.lineSpacing;\n break;\n default:\n lineSpacing = paragraph.paragraphFormat.lineSpacing * maxHeight;\n break;\n }\n return lineSpacing;\n };\n /**\n * Checks whether current line is first line in a paragraph.\n * @param paragraph\n */\n Layout.prototype.isParagraphFirstLine = function (paragraph, line) {\n var widget = paragraph;\n if (isNullOrUndefined(widget.childWidgets) || widget.childWidgets.indexOf(line) === 0) {\n //If the line elements conatins the elements from previous paragraph then need to retun false.\n //Example scenario, Field start and field end in different paragraphs.\n if (line.children.length > 0 && !isNullOrUndefined(paragraph.previousWidget)\n && paragraph.previousWidget instanceof ParagraphWidget) {\n return line.paragraph.index !== paragraph.previousWidget.index;\n }\n return true; //If the line elements count is zero then also need to return true.\n }\n return false;\n };\n /**\n * Checks whether current line is last line in a paragraph.\n * @param paragraph\n */\n Layout.prototype.isParagraphLastLine = function (element) {\n var paragraph = element.line.paragraph;\n var lastLineWidget = paragraph.childWidgets[paragraph.childWidgets.length - 1];\n var lastInline = lastLineWidget.children[lastLineWidget.children.length - 1];\n if (element === lastInline) {\n // tslint:disable-next-line:max-line-length \n return (lastInline instanceof FieldElementBox) || ((!(lastInline instanceof TextElementBox && lastInline.text === '\\v')));\n }\n return false;\n };\n /**\n * Gets text index after space.\n * @param text\n * @param startIndex\n */\n Layout.prototype.getTextIndexAfterSpace = function (text, startIndex) {\n var length = text.length;\n var index = 0;\n index = text.indexOf(' ', startIndex) + 1;\n var nextIndex = index;\n if (nextIndex === 0 || nextIndex === length) {\n return nextIndex;\n }\n while (text[nextIndex] === ' ') {\n nextIndex++;\n if (nextIndex === length) {\n break;\n }\n }\n return nextIndex;\n };\n //#region Table\n /**\n * @private\n */\n Layout.prototype.moveNextWidgetsToTable = function (tableWidget, rowWidgets, moveFromNext) {\n var currentRow = moveFromNext ? rowWidgets[rowWidgets.length - 2] : rowWidgets[rowWidgets.length - 1];\n var rowIndex = currentRow.indexInOwner;\n var currentTable = tableWidget[tableWidget.length - 1];\n if (moveFromNext) {\n rowIndex += 1;\n }\n var nextWidgets = currentRow.containerWidget.childWidgets.splice(rowIndex);\n for (var i = 0; i < nextWidgets.length; i++) {\n currentTable.childWidgets.push(nextWidgets[i]);\n nextWidgets[i].containerWidget = currentTable;\n }\n };\n /**\n * Adds table cell widget.\n * @param cell\n * @param area\n * @param maxCellMarginTop\n * @param maxCellMarginBottom\n */\n Layout.prototype.addTableCellWidget = function (cell, area, maxCellMarginTop, maxCellMarginBottom) {\n //let tableCellWidget: TableCellWidget = new TableCellWidget(cell);\n var prevColumnIndex = 0;\n var cellspace = 0;\n var left = 0;\n var top = maxCellMarginTop;\n var right = 0;\n var bottom = maxCellMarginBottom;\n if (!isNullOrUndefined(cell.cellFormat)) {\n if (cell.cellFormat.containsMargins()) {\n // tslint:disable-next-line:max-line-length\n left = isNullOrUndefined(cell.cellFormat.leftMargin) ? HelperMethods.convertPointToPixel(cell.ownerTable.tableFormat.leftMargin) : HelperMethods.convertPointToPixel(cell.cellFormat.leftMargin);\n right = isNullOrUndefined(cell.cellFormat.rightMargin) ? HelperMethods.convertPointToPixel(cell.ownerTable.tableFormat.rightMargin) : HelperMethods.convertPointToPixel(cell.cellFormat.rightMargin);\n }\n else {\n left = HelperMethods.convertPointToPixel(cell.ownerTable.tableFormat.leftMargin);\n right = HelperMethods.convertPointToPixel(cell.ownerTable.tableFormat.rightMargin);\n }\n }\n cell.margin = new Margin(left, top, right, bottom);\n cell.width = HelperMethods.convertPointToPixel(cell.cellFormat.cellWidth);\n if (!isNullOrUndefined(cell.previousWidget)) {\n // tslint:disable-next-line:max-line-length\n prevColumnIndex = cell.previousWidget.columnIndex + cell.previousWidget.cellFormat.columnSpan;\n }\n // tslint:disable-next-line:max-line-length\n cellspace = !isNullOrUndefined(cell.ownerTable) && !isNullOrUndefined(cell.ownerTable.tableFormat) ? HelperMethods.convertPointToPixel(cell.ownerTable.tableFormat.cellSpacing) : 0;\n var prevSpannedCellWidth = 0;\n if (prevColumnIndex < cell.columnIndex) {\n // tslint:disable-next-line:max-line-length\n prevSpannedCellWidth = HelperMethods.convertPointToPixel(cell.ownerTable.tableHolder.getPreviousSpannedCellWidth(prevColumnIndex, cell.columnIndex));\n if (prevColumnIndex === 0) {\n prevSpannedCellWidth = prevSpannedCellWidth - cellspace / 2;\n }\n }\n cell.x = area.x + prevSpannedCellWidth + cell.margin.left;\n cell.y = area.y + cell.margin.top + cellspace;\n cell.width = cell.width - cell.margin.left - cell.margin.right;\n if (cellspace > 0) {\n cell.x += cellspace;\n if (cell.ownerTable.tableHolder.columns.length === 1) {\n cell.width -= cellspace * 2;\n }\n else if (cell.columnIndex === 0 || cell.columnIndex === cell.ownerTable.tableHolder.columns.length - 1) {\n cell.width -= ((cellspace * 2) - cellspace / 2);\n }\n else {\n cell.width -= cellspace;\n }\n }\n // update the margins values respect to layouting of borders.\n // tslint:disable-next-line:max-line-length\n //For normal table cells only left border is rendred. for last cell left and right border is rendred. this border widths are not included in margins.\n cell.leftBorderWidth = HelperMethods.convertPointToPixel(TableCellWidget.getCellLeftBorder(cell).getLineWidth());\n cell.x += cell.leftBorderWidth;\n cell.width -= cell.leftBorderWidth;\n if (cellspace > 0 || cell.cellIndex === cell.ownerRow.childWidgets.length - 1) {\n cell.rightBorderWidth = TableCellWidget.getCellRightBorder(cell).getLineWidth();\n cell.width -= cell.rightBorderWidth;\n }\n //Add the border widths to respective margin side.\n cell.margin.left = cell.margin.left + cell.leftBorderWidth;\n cell.margin.right = cell.margin.right + cell.rightBorderWidth;\n //cell.ownerWidget = owner;\n return cell;\n };\n /**\n * Adds specified row widget to table.\n * @param viewer\n * @param tableRowWidget\n * @param row\n */\n // tslint:disable-next-line:max-line-length\n Layout.prototype.addWidgetToTable = function (viewer, tableCollection, rowCollection, row, endRowWidget) {\n //Adds table row widget to owner table widget.\n var tableWidget = tableCollection[0];\n var index = tableWidget.childWidgets.length;\n var prevWidget = undefined;\n var rowWidgetIndex = rowCollection.indexOf(row);\n if (rowWidgetIndex > 0) {\n prevWidget = rowCollection[rowWidgetIndex - 1];\n // Need to update on this further\n }\n else if (row.previousRenderedWidget instanceof TableRowWidget) {\n // Need to update on this further\n prevWidget = row.previousRenderedWidget;\n }\n if (!isNullOrUndefined(prevWidget)) {\n tableWidget = prevWidget.containerWidget;\n // index = tableWidget.childWidgets.length;\n index = tableWidget.childWidgets.indexOf(prevWidget) + 1;\n if (Math.round(row.y) !== Math.round(prevWidget.y + prevWidget.height)) {\n var prevIndex = tableCollection.indexOf(tableWidget);\n if (prevIndex + 1 >= tableCollection.length) {\n //Creates new table widget for splitted rows.\n this.addTableWidget(viewer.clientActiveArea, tableCollection, true);\n }\n tableWidget = tableCollection[prevIndex + 1];\n index = tableWidget.childWidgets.length;\n }\n if (rowWidgetIndex > 0) {\n index = 0;\n }\n }\n this.updateRowHeightBySpannedCell(tableWidget, row, index);\n this.updateRowHeightByCellSpacing(tableCollection, row, viewer);\n //Remove widget from previous container after splitteing\n if (row.containerWidget && row.containerWidget !== tableWidget &&\n row.containerWidget.childWidgets.indexOf(row) !== -1) {\n row.containerWidget.childWidgets.splice(row.containerWidget.childWidgets.indexOf(row), 1);\n }\n if (tableWidget.childWidgets.indexOf(row) === -1) {\n tableWidget.childWidgets.splice(index, 0, row);\n }\n row.containerWidget = tableWidget;\n tableWidget.height = tableWidget.height + row.height;\n if (!isNullOrUndefined(tableWidget.containerWidget)\n && tableWidget.containerWidget.childWidgets.indexOf(tableWidget) >= 0 &&\n !(tableWidget.containerWidget instanceof HeaderFooterWidget)) {\n tableWidget.containerWidget.height += row.height;\n }\n this.updateHeightForRowWidget(viewer, false, tableCollection, rowCollection, row, false, endRowWidget);\n viewer.cutFromTop(row.y + row.height);\n };\n /**\n * Updates row height by spanned cell.\n * @param tableWidget\n * @param rowWidget\n * @param insertIndex\n * @param row\n * @private\n */\n Layout.prototype.updateRowHeightBySpannedCell = function (tableWidget, row, insertIndex) {\n var rowSpan = 1;\n if (tableWidget.childWidgets.length === 0 || insertIndex === 0) {\n this.updateRowHeight(row, row);\n return;\n }\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cellWidget = row.childWidgets[i];\n // tslint:disable-next-line:max-line-length\n rowSpan = (isNullOrUndefined(cellWidget) || isNullOrUndefined(cellWidget.cellFormat)) ? rowSpan : cellWidget.cellFormat.rowSpan;\n this.updateSpannedRowCollection(rowSpan, row);\n }\n if (!isNullOrUndefined(row.ownerTable)) {\n for (var i = 0; i < row.ownerTable.spannedRowCollection.length; i++) {\n if (row.ownerTable.spannedRowCollection.keys[i] === row.index) {\n // Back track to previous table row widgets and update it height if vertical merge ends with this row.\n for (var j = 0; j < insertIndex; j++) {\n var prevRowWidget = tableWidget.childWidgets[j];\n this.updateRowHeight(prevRowWidget, row);\n }\n row.ownerTable.spannedRowCollection.remove(row.ownerTable.spannedRowCollection.keys[i]);\n break;\n }\n }\n }\n };\n /**\n * Updates row height.\n * @param prevRowWidget\n * @param rowWidget\n * @param row\n */\n Layout.prototype.updateRowHeight = function (prevRowWidget, row) {\n var rowIndex = row.index;\n var rowSpan = 1;\n for (var i = 0; i < prevRowWidget.childWidgets.length; i++) {\n var cellWidget = prevRowWidget.childWidgets[i];\n // tslint:disable-next-line:max-line-length\n rowSpan = (isNullOrUndefined(cellWidget) || isNullOrUndefined(cellWidget.cellFormat)) ? rowSpan : cellWidget.cellFormat.rowSpan;\n //To update Row height- if row has row span value greater than 1, need to add it in spannedRowCollection \n this.updateSpannedRowCollection(rowSpan, row);\n if (rowIndex - cellWidget.rowIndex === rowSpan - 1) {\n var mergedCellHeight = cellWidget.y + cellWidget.height + cellWidget.margin.bottom - row.y;\n if (row.height < mergedCellHeight) {\n row.height = mergedCellHeight;\n }\n }\n }\n };\n //if row has row span value greater than 1, need to add it in spannedRowCollection\n Layout.prototype.updateSpannedRowCollection = function (rowSpan, row) {\n if (rowSpan > 1 && !isNullOrUndefined(row.ownerTable)) {\n //Checks the rowspan is already exist in the list\n if (!row.ownerTable.spannedRowCollection.containsKey(row.index + rowSpan - 1)) {\n row.ownerTable.spannedRowCollection.add(row.index + rowSpan - 1, row.index);\n }\n }\n };\n /**\n * Updates row height by cell spacing\n * @param rowWidget\n * @param viewer\n * @param row\n */\n Layout.prototype.updateRowHeightByCellSpacing = function (tableCollection, row, viewer) {\n if (row.ownerTable.tableFormat.cellSpacing > 0) {\n // In the Case of tableWidget is greater than one and rowWidget is start at the Top Position of the page. \n // In such case we have update the row height with half of cell spacing.\n // Remaining cases we have to update the entire hight\n // tslint:disable-next-line:max-line-length\n if (tableCollection.length > 1 && row.y === viewer.clientArea.y && viewer instanceof PageLayoutViewer) {\n row.height = row.height - HelperMethods.convertPointToPixel(row.ownerTable.tableFormat.cellSpacing) / 2;\n }\n }\n };\n /**\n * Checks whether row span is end.\n * @param row\n * @param viewer\n */\n Layout.prototype.isRowSpanEnd = function (row, viewer) {\n var rowIndex = row.index;\n var rowSpan = 1;\n for (var i = 0; i < viewer.splittedCellWidgets.length; i++) {\n var splittedCell = viewer.splittedCellWidgets[i];\n // tslint:disable-next-line:max-line-length\n rowSpan = (isNullOrUndefined(splittedCell) || isNullOrUndefined(splittedCell.cellFormat)) ? rowSpan : splittedCell.cellFormat.rowSpan;\n if (rowIndex - splittedCell.rowIndex === rowSpan - 1) {\n return true;\n }\n }\n return false;\n };\n /**\n * Checks whether vertical merged cell to continue or not.\n * @param row\n * @private\n */\n Layout.prototype.isVerticalMergedCellContinue = function (row) {\n var colIndex = 0;\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cell = row.childWidgets[i];\n if (colIndex < cell.columnIndex) {\n return true;\n }\n colIndex += cell.cellFormat.columnSpan;\n }\n return colIndex < row.ownerTable.tableHolder.columns.length;\n };\n /**\n * Splits widgets.\n * @param tableRowWidget\n * @param viewer\n * @param splittedWidget\n * @param row\n */\n // tslint:disable-next-line:max-line-length\n Layout.prototype.splitWidgets = function (tableRowWidget, viewer, tableCollection, rowCollection, splittedWidget) {\n if (this.isFirstLineFitForRow(viewer.clientArea.bottom, tableRowWidget) && tableRowWidget.childWidgets.length > 0) {\n splittedWidget = this.getSplittedWidgetForRow(viewer.clientArea.bottom, tableCollection, rowCollection, tableRowWidget);\n if (viewer.splittedCellWidgets.length > 0 || splittedWidget !== tableRowWidget) {\n //Adds the splitted widget of a vertical merged cell, to next row widget in the next page.\n this.insertSplittedCellWidgets(viewer, tableCollection, splittedWidget, tableRowWidget.indexInOwner - 1);\n }\n }\n else {\n //Adds the splitted widget of a vertical merged cell, to next row widget in the next page.\n this.insertSplittedCellWidgets(viewer, tableCollection, splittedWidget, tableRowWidget.indexInOwner - 1);\n }\n return splittedWidget;\n };\n /**\n * Gets splitted widget for row.\n * @param bottom\n * @param tableRowWidget\n */\n // tslint:disable-next-line:max-line-length\n Layout.prototype.getSplittedWidgetForRow = function (bottom, tableCollection, rowCollection, tableRowWidget) {\n var splittedWidget = undefined;\n var rowIndex = tableRowWidget.index;\n for (var i = 0; i < tableRowWidget.childWidgets.length; i++) {\n var cellWidget = tableRowWidget.childWidgets[i];\n var splittedCell = this.getSplittedWidget(bottom, true, tableCollection, rowCollection, cellWidget);\n if (!isNullOrUndefined(splittedCell)) {\n if (splittedCell === cellWidget) {\n //Returns if the whole content of the row does not fit in current page.\n return tableRowWidget;\n }\n if (tableRowWidget.childWidgets.indexOf(splittedCell) !== -1) {\n tableRowWidget.childWidgets.splice(tableRowWidget.childWidgets.indexOf(splittedCell), 1);\n }\n if (i === 0 || tableRowWidget.height < cellWidget.height + cellWidget.margin.top + cellWidget.margin.bottom) {\n tableRowWidget.height = cellWidget.height + cellWidget.margin.top + cellWidget.margin.bottom;\n }\n if (isNullOrUndefined(splittedWidget)) {\n //Creates new widget, to hold the splitted contents.\n splittedWidget = new TableRowWidget();\n splittedWidget.containerWidget = tableRowWidget.containerWidget;\n splittedWidget.index = tableRowWidget.index;\n splittedWidget.rowFormat = tableRowWidget.rowFormat;\n this.updateWidgetLocation(tableRowWidget, splittedWidget);\n splittedWidget.height = 0;\n rowCollection.push(splittedWidget);\n }\n var rowSpan = 1;\n // tslint:disable-next-line:max-line-length\n rowSpan = (isNullOrUndefined(splittedCell) || isNullOrUndefined(splittedCell.cellFormat)) ? rowSpan : splittedCell.cellFormat.rowSpan;\n if (rowIndex - splittedCell.rowIndex === rowSpan - 1\n && splittedWidget.height < splittedCell.height + splittedCell.margin.top + splittedCell.margin.bottom) {\n splittedWidget.height = splittedCell.height + splittedCell.margin.top + splittedCell.margin.bottom;\n }\n splittedWidget.childWidgets.push(splittedCell);\n splittedCell.containerWidget = splittedWidget;\n }\n }\n return splittedWidget;\n };\n /**\n * Updates widget to table.\n * @param row\n * @param viewer\n */\n /* tslint:disable */\n Layout.prototype.updateWidgetsToTable = function (tableWidgets, rowWidgets, row) {\n var rowHeight = this.getRowHeight(row, [row]);\n var viewer = this.viewer;\n //initializing row properties with default values.\n var isHeader = row.rowFormat.isHeader;\n var isAllowBreakAcrossPages = row.rowFormat.allowBreakAcrossPages;\n var heightType = row.rowFormat.heightType;\n var cellSpacing = 0;\n var count = 0;\n var tableRowWidget = row;\n var moveRowToNextTable = false;\n if (row.ownerTable.continueHeader && !isHeader) {\n row.ownerTable.continueHeader = false;\n }\n cellSpacing = (!isNullOrUndefined(row.ownerTable) && !isNullOrUndefined(row.ownerTable.tableFormat)) ? HelperMethods.convertPointToPixel(row.ownerTable.tableFormat.cellSpacing) : 0;\n while (count < rowWidgets.length) {\n count = rowWidgets.length;\n if (row.ownerTable.isInsideTable || (viewer.splittedCellWidgets.length === 0 && tableRowWidget.y + tableRowWidget.height + cellSpacing <= viewer.clientArea.bottom)) {\n this.addWidgetToTable(viewer, tableWidgets, rowWidgets, tableRowWidget);\n }\n else {\n //Split widget for next page\n if (viewer.splittedCellWidgets.length > 0 && tableRowWidget.y + tableRowWidget.height <= viewer.clientArea.bottom) {\n var isRowSpanEnd = this.isRowSpanEnd(row, viewer);\n if (!isRowSpanEnd) {\n if (this.isVerticalMergedCellContinue(row) && tableRowWidget.y == viewer.clientArea.y) {\n this.insertSplittedCellWidgets(viewer, tableWidgets, tableRowWidget, tableRowWidget.indexInOwner - 1);\n }\n this.addWidgetToTable(viewer, tableWidgets, rowWidgets, tableRowWidget);\n continue;\n }\n }\n var splittedWidget = tableRowWidget;\n var tableWidget = tableWidgets[tableWidgets.length - 1];\n if (rowHeight + tableRowWidget.y > viewer.clientArea.bottom) {\n // tslint:disable-next-line:max-line-length\n if (!isAllowBreakAcrossPages || (isHeader && row.ownerTable.continueHeader) || (heightType === 'AtLeast' && HelperMethods.convertPointToPixel(row.rowFormat.height) < viewer.clientArea.bottom)) {\n // tslint:disable-next-line:max-line-length\n if ((heightType === 'AtLeast' && HelperMethods.convertPointToPixel(row.rowFormat.height) < viewer.clientActiveArea.height && isAllowBreakAcrossPages) || (heightType !== 'Exactly' && tableRowWidget.y === viewer.clientArea.y) || (heightType === 'Auto' && isAllowBreakAcrossPages)) {\n splittedWidget = this.splitWidgets(tableRowWidget, viewer, tableWidgets, rowWidgets, splittedWidget);\n }\n if (heightType === 'Exactly' && tableRowWidget.y === viewer.clientArea.y) {\n this.addWidgetToTable(viewer, tableWidgets, rowWidgets, tableRowWidget);\n count++;\n }\n if (isHeader && row.ownerTable.continueHeader) {\n row.ownerTable.header = false;\n row.ownerTable.continueHeader = false;\n row.ownerTable.headerHeight = 0;\n var pages = undefined;\n // if (viewer instanceof PageLayoutViewer) {\n pages = viewer.pages;\n // }\n if (!isNullOrUndefined(pages)) {\n for (var i = 0; i < pages.length; i++) {\n if (pages[i].repeatHeaderRowTableWidget) {\n pages[i].repeatHeaderRowTableWidget = false;\n }\n }\n }\n }\n }\n else {\n if ((heightType === 'Auto' || heightType === 'AtLeast') && isAllowBreakAcrossPages) {\n // tslint:disable-next-line:max-line-length\n if (!(HelperMethods.convertPointToPixel(row.rowFormat.height) > viewer.clientArea.bottom) || tableRowWidget.y === viewer.clientArea.y) {\n splittedWidget = this.splitWidgets(tableRowWidget, viewer, tableWidgets, rowWidgets, splittedWidget);\n }\n }\n else if (heightType === 'Exactly' && tableRowWidget.y === viewer.clientArea.y) {\n this.addWidgetToTable(viewer, tableWidgets, rowWidgets, tableRowWidget);\n count++;\n }\n }\n }\n else {\n var isInsertSplittedWidgets = false;\n // Splitting handled for the merged cell with allowRowBreakAcross pages. \n if (this.isVerticalMergedCellContinue(row) && (isAllowBreakAcrossPages ||\n (isInsertSplittedWidgets = tableRowWidget.y == viewer.clientArea.y))) {\n splittedWidget = this.splitWidgets(tableRowWidget, viewer, tableWidgets, rowWidgets, splittedWidget);\n }\n }\n //Create New table for splitted widget\n if (!isNullOrUndefined(splittedWidget)) {\n if (splittedWidget !== tableRowWidget) {\n this.addWidgetToTable(viewer, tableWidgets, rowWidgets, tableRowWidget, tableRowWidget.nextRow);\n //Updates the fitted table rows to current page.\n this.updateWidgetsToPage(tableWidgets, rowWidgets, row.ownerTable, tableRowWidget.nextRow);\n var index_2 = tableWidgets.indexOf(tableRowWidget.containerWidget);\n if (index_2 + 1 >= tableWidgets.length) {\n //Creates new table widget for splitted rows.\n this.addTableWidget(viewer.clientActiveArea, tableWidgets, true);\n }\n tableRowWidget = splittedWidget;\n }\n else {\n if (row.index > 0) {\n //Updates the fitted table rows to current page.\n this.updateWidgetsToPage(tableWidgets, rowWidgets, row.ownerTable, row);\n // Need to update on this further\n if (row.previousRenderedWidget instanceof TableRowWidget) {\n // Need to update on this further\n var prevWidget = row.previousRenderedWidget;\n if (HelperMethods.round(tableRowWidget.y, 2) === HelperMethods.round(prevWidget.y + prevWidget.height, 2)) {\n var prevIndex = tableWidgets.indexOf(prevWidget.containerWidget);\n if (prevIndex + 1 >= tableWidgets.length) {\n //Creates new table widget for splitted rows.\n this.addTableWidget(viewer.clientActiveArea, tableWidgets, true);\n }\n }\n else {\n //Creates new table widget for splitted rows.\n this.addTableWidget(viewer.clientActiveArea, tableWidgets, true);\n }\n }\n else {\n //Creates new table widget for splitted rows.\n this.addTableWidget(viewer.clientActiveArea, tableWidgets, true);\n }\n }\n moveRowToNextTable = true;\n count--;\n }\n tableWidget = tableWidgets[tableWidgets.length - 1];\n var prevBodyWidget = undefined;\n if (tableWidgets.length > 1) {\n //Get Previous Splitted Widget container\n prevBodyWidget = tableWidgets[tableWidgets.length - 2].containerWidget;\n }\n else {\n var previousBlock = row.ownerTable.previousRenderedWidget;\n prevBodyWidget = previousBlock.containerWidget;\n }\n var pageIndex = 0;\n if (!isNullOrUndefined(prevBodyWidget)) {\n pageIndex = viewer.pages.indexOf(prevBodyWidget.page);\n }\n var index = row.ownerTable.containerWidget.index;\n var bodyWidget = void 0;\n var block = void 0;\n if (moveRowToNextTable && tableWidgets.length === 1) {\n block = tableWidgets[tableWidgets.length - 1];\n }\n else {\n block = tableWidgets[tableWidgets.length - 2];\n }\n bodyWidget = this.moveBlocksToNextPage(block);\n var curretTable = tableWidgets[tableWidgets.length - 1];\n //Move Next RowWidge to next page\n if (moveRowToNextTable) {\n // tslint:disable-next-line:max-line-length\n if (row.index === 0 && curretTable.containerWidget && curretTable.containerWidget.childWidgets.indexOf(curretTable) !== -1) {\n curretTable.containerWidget.childWidgets.splice(curretTable.containerWidget.childWidgets.indexOf(curretTable), 1);\n }\n }\n bodyWidget.childWidgets.unshift(curretTable);\n curretTable.containerWidget = bodyWidget;\n if (moveRowToNextTable && row.index > 0 || rowWidgets.length > 1) {\n this.moveNextWidgetsToTable(tableWidgets, rowWidgets, !moveRowToNextTable);\n }\n moveRowToNextTable = false;\n if (row.ownerTable.header && tableRowWidget.height < viewer.clientArea.bottom) {\n // if (viewer instanceof PageLayoutViewer) {\n viewer.currentRenderingPage.repeatHeaderRowTableWidget = true;\n // }\n //Updates table widgets location.\n viewer.updateClientAreaForBlock(row.ownerTable, true, tableWidgets);\n // tslint:disable-next-line:max-line-length\n //Update splitted row widget location. if header is repeated update the y position of splitted widget to header height.\n splittedWidget.x = splittedWidget.x;\n splittedWidget.y = tableWidget.y + row.ownerTable.headerHeight;\n // let cellspace: number = viewer instanceof PageLayoutViewer ? cellspacing / 2 : cellspacing;\n var cellspace = cellSpacing / 2;\n this.updateChildLocationForRow(tableWidget.y + row.ownerTable.headerHeight - cellspace, splittedWidget);\n }\n else {\n //Updates table widgets location.\n viewer.updateClientAreaForBlock(row.ownerTable, true, tableWidgets);\n // tslint:disable-next-line:max-line-length\n //Update splitted row widget location. if header is repeated update the y position of splitted widget to header height.\n splittedWidget.x = splittedWidget.x;\n splittedWidget.y = tableWidget.y;\n // let cellspace: number = viewer instanceof PageLayoutViewer ? cellspacing / 2 : cellspacing;\n var cellspace = cellSpacing / 2;\n this.updateChildLocationForRow(tableWidget.y - cellspace, splittedWidget);\n }\n }\n }\n if (isHeader && row.ownerTable.continueHeader) {\n row.ownerTable.header = true;\n row.ownerTable.headerHeight = rowHeight + row.ownerTable.headerHeight;\n }\n if (isHeader && !isNullOrUndefined(this.getHeader(row.ownerTable)) && row.index === this.getHeader(row.ownerTable).index) {\n var headerHeight = this.getHeaderHeight(row.ownerTable, row, rowWidgets);\n if (headerHeight > row.ownerTable.headerHeight || headerHeight > row.ownerTable.headerHeight) {\n row.ownerTable.headerHeight = headerHeight;\n }\n if (row.ownerTable.headerHeight > viewer.clientArea.height) {\n row.ownerTable.header = false;\n row.ownerTable.continueHeader = false;\n row.ownerTable.headerHeight = 0;\n var pages = viewer.pages;\n for (var i = 0; i < pages.length; i++) {\n if (pages[i].repeatHeaderRowTableWidget) {\n pages[i].repeatHeaderRowTableWidget = false;\n }\n }\n }\n }\n if (tableWidgets.length > 2 && row.ownerTable.header && tableRowWidget.height < viewer.clientActiveArea.bottom &&\n !viewer.currentRenderingPage.repeatHeaderRowTableWidget) {\n viewer.currentRenderingPage.repeatHeaderRowTableWidget = true;\n }\n }\n };\n /* tslint:enable */\n /**\n * Gets header.\n * @param table\n * @private\n */\n Layout.prototype.getHeader = function (table) {\n var header = undefined;\n var flag = true;\n table = table.getSplitWidgets()[0];\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n if (row.rowFormat.isHeader) {\n header = row;\n }\n else {\n flag = false;\n }\n if (!flag) {\n break;\n }\n }\n return header;\n };\n /**\n * Gets header height.\n * @param ownerTable\n * @param row\n */\n Layout.prototype.getHeaderHeight = function (ownerTable, row, rowCollection) {\n var height = 0;\n if (row.ownerTable.childWidgets.length > 0 && ownerTable.childWidgets[0].rowFormat.isHeader) {\n for (var i = 0; i < ownerTable.childWidgets.length; i++) {\n var row_1 = ownerTable.childWidgets[i];\n if (row_1.rowFormat.isHeader) {\n height = height + this.getRowHeight(row_1, rowCollection);\n }\n else {\n break;\n }\n }\n }\n return height;\n };\n /**\n * Updates widgets to row.\n * @param cell\n */\n Layout.prototype.updateWidgetToRow = function (cell) {\n var viewer = this.viewer;\n //Adds table cell widget to owner row widget.\n var rowWidget = cell.ownerRow;\n var cellLeft = rowWidget.x;\n if (rowWidget.childWidgets.length > 0) {\n var lastWidget = rowWidget.childWidgets[rowWidget.childWidgets.length - 1];\n cellLeft = lastWidget.x + lastWidget.width + lastWidget.margin.right;\n }\n // rowWidget.childWidgets.push(cell);\n cell.containerWidget = rowWidget;\n //If the row height is set as Atleast then height is set to atleast height for the first cell of the row.\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(cell.ownerRow) && cell.ownerRow.rowFormat.heightType !== 'Exactly' && HelperMethods.convertPointToPixel(cell.ownerRow.rowFormat.height) > 0 && cell.cellIndex === 0) {\n rowWidget.height = rowWidget.height + HelperMethods.convertPointToPixel(cell.ownerRow.rowFormat.height);\n }\n //Add condition not cell merged vertically.\n if (cell.cellFormat.rowSpan === 1) {\n var cellHeight = cell.height + cell.margin.top + cell.margin.bottom;\n if (rowWidget.height - HelperMethods.convertPointToPixel(cell.ownerTable.tableFormat.cellSpacing) < cellHeight) {\n rowWidget.height = cellHeight + HelperMethods.convertPointToPixel(cell.ownerTable.tableFormat.cellSpacing);\n }\n }\n };\n /**\n * Updates height for row widget.\n * @param viewer\n * @param isUpdateVerticalPosition\n * @param rowWidget\n */\n // tslint:disable-next-line:max-line-length\n Layout.prototype.updateHeightForRowWidget = function (viewer, isUpdateVerticalPosition, tableCollection, rowCollection, rowWidget, isLayouted, endRowWidget) {\n for (var i = 0; i < rowWidget.childWidgets.length; i++) {\n var cellspacing = 0;\n var cellWidget = undefined;\n var childWidget = rowWidget.childWidgets[i];\n // if (childWidget instanceof TableCellWidget) {\n cellWidget = childWidget;\n // }\n var rowSpan = 1;\n rowSpan = cellWidget.cellFormat.rowSpan;\n cellspacing = HelperMethods.convertPointToPixel(cellWidget.ownerTable.tableFormat.cellSpacing);\n if (rowSpan > 1) {\n var currentRowWidgetIndex = rowWidget.containerWidget.childWidgets.indexOf(rowWidget);\n // tslint:disable-next-line:max-line-length\n var rowSpanWidgetEndIndex = currentRowWidgetIndex + rowSpan - 1 - (rowWidget.index - cellWidget.rowIndex);\n if (viewer.clientArea.bottom < cellWidget.y + cellWidget.height + cellWidget.margin.bottom\n || rowSpanWidgetEndIndex >= currentRowWidgetIndex + 1) {\n this.splitSpannedCellWidget(cellWidget, tableCollection, rowCollection, viewer);\n }\n var spanEndRowWidget = rowWidget;\n if (rowSpanWidgetEndIndex > 0) {\n if (rowSpanWidgetEndIndex < rowWidget.containerWidget.childWidgets.length) {\n var childWidget_1 = rowWidget.containerWidget.childWidgets[rowSpanWidgetEndIndex];\n if (childWidget_1 instanceof TableRowWidget) {\n spanEndRowWidget = childWidget_1;\n if (spanEndRowWidget === endRowWidget) {\n spanEndRowWidget = rowWidget;\n }\n }\n }\n else {\n // tslint:disable-next-line:max-line-length\n spanEndRowWidget = rowWidget.containerWidget.childWidgets[rowWidget.containerWidget.childWidgets.length - 1];\n }\n }\n if (cellWidget.y + cellWidget.height + cellWidget.margin.bottom < spanEndRowWidget.y + spanEndRowWidget.height) {\n cellWidget.height = spanEndRowWidget.y + spanEndRowWidget.height - cellWidget.y - cellWidget.margin.bottom;\n // tslint:disable-next-line:max-line-length\n }\n else if (isLayouted && spanEndRowWidget && (spanEndRowWidget.y !== 0 && spanEndRowWidget.height !== 0) && cellWidget.y + cellWidget.height + cellWidget.margin.bottom > spanEndRowWidget.y + spanEndRowWidget.height) {\n spanEndRowWidget.height = cellWidget.y + cellWidget.height + cellWidget.margin.bottom - spanEndRowWidget.y;\n // tslint:disable-next-line:max-line-length\n //Update the next rowlayout widget location. Reason for the updation is previous row height is updated when cell height is greater. So already layouted next row location has to be updated again.\n // if (rowWidget === spanEndRowWidget && rowWidget.nextWidget instanceof TableRowWidget) {\n // let nextRow: TableRowWidget = rowWidget.nextWidget as TableRowWidget;\n // // Need to update on this further\n // // if (viewer.renderedElements.containsKey(nextRow)) {\n // // let nextWidget: TableRowWidget[] = viewer.renderedElements.get(nextRow) as TableRowWidget[];\n // // if (nextWidget.length > 0) {\n // // nextWidget[0].x = nextWidget[0].x;\n // // nextWidget[0].y = rowWidget.y + rowWidget.height;\n // // }\n // // }\n // }\n }\n }\n else {\n if (cellspacing > 0) {\n // In the Case of tableWidget is greater than one and rowWidget is start at the Top Position of the page. \n // In such case we have update the cell height with half of cell spacing.\n // Remaining cases we have to update the entire hight\n // tslint:disable-next-line:max-line-length\n if (tableCollection.length > 1 && rowWidget.y === viewer.clientArea.y && viewer instanceof PageLayoutViewer) {\n cellspacing = cellspacing / 2;\n }\n }\n cellWidget.height = rowWidget.height - cellWidget.margin.top - cellWidget.margin.bottom - cellspacing;\n }\n this.updateHeightForCellWidget(viewer, tableCollection, rowCollection, cellWidget);\n var widget = rowWidget.containerWidget;\n while (widget.containerWidget instanceof Widget) {\n widget = widget.containerWidget;\n }\n var page = undefined;\n if (widget instanceof BodyWidget) {\n page = widget.page;\n }\n // tslint:disable-next-line:max-line-length\n if ((viewer instanceof PageLayoutViewer && viewer.visiblePages.indexOf(page) !== -1) || isUpdateVerticalPosition) {\n this.updateCellVerticalPosition(cellWidget, false, false);\n }\n //Renders the current table row contents, after relayout based on editing.\n // if (viewer instanceof PageLayoutViewer && (viewer as PageLayoutViewer).visiblePages.indexOf(page) !== -1) {\n // //Added proper undefined condition check for Asynchronous operation.\n // if (!isNullOrUndefined(rowWidget.tableRow) && !isNullOrUndefined(rowWidget.tableRow.rowFormat)) {\n // this.viewer.updateScrollBars();\n // //this.render.renderTableCellWidget(page, cellWidget);\n // }\n // }\n }\n };\n /**\n * Updates height for cell widget.\n * @param viewer\n * @param cellWidget\n */\n // tslint:disable-next-line:max-line-length\n Layout.prototype.updateHeightForCellWidget = function (viewer, tableWidget, rowCollection, cellWidget) {\n for (var i = 0; i < cellWidget.childWidgets.length; i++) {\n if (cellWidget.childWidgets[i] instanceof TableWidget) {\n this.updateHeightForTableWidget(tableWidget, rowCollection, cellWidget.childWidgets[i]);\n }\n }\n };\n /**\n * Gets row height.\n * @param row\n * @private\n */\n Layout.prototype.getRowHeight = function (row, rowCollection) {\n var height = 0;\n if (row.rowFormat.heightType === 'Exactly') {\n height = row.rowFormat.height;\n }\n else {\n for (var i = 0; i < rowCollection.length; i++) {\n if (rowCollection[i] instanceof TableRowWidget) {\n height = rowCollection[i].height + height;\n }\n }\n height = Math.max(height, row.rowFormat.height);\n }\n return height;\n };\n /**\n * splits spanned cell widget.\n * @param cellWidget\n * @param viewer\n */\n // tslint:disable-next-line:max-line-length\n Layout.prototype.splitSpannedCellWidget = function (cellWidget, tableCollection, rowCollection, viewer) {\n var splittedCell = this.getSplittedWidget(viewer.clientArea.bottom, false, tableCollection, rowCollection, cellWidget);\n if (!isNullOrUndefined(splittedCell)) {\n //Adds the splitted contents of a vertical merged cell, in order preserve in next page.\n viewer.splittedCellWidgets.push(splittedCell);\n }\n };\n /**\n * Inserts splitted cell widgets.\n * @param viewer\n * @param rowWidget\n */\n // tslint:disable-next-line:max-line-length\n Layout.prototype.insertSplittedCellWidgets = function (viewer, tableCollection, rowWidget, previousRowIndex) {\n var left = rowWidget.x;\n var tableWidth = 0;\n tableWidth = this.getTableWidth(rowWidget.ownerTable);\n for (var i = 0; i < rowWidget.childWidgets.length; i++) {\n var cellWidget = rowWidget.childWidgets[i];\n if (Math.round(left) < Math.round(cellWidget.x - cellWidget.margin.left)) {\n if (this.insertRowSpannedWidget(rowWidget, viewer, left, i)) {\n i--;\n continue;\n }\n var length_1 = rowWidget.childWidgets.length;\n this.insertEmptySplittedCellWidget(rowWidget, tableCollection, left, i, previousRowIndex);\n if (length_1 < rowWidget.childWidgets.length) {\n i--;\n continue;\n }\n }\n left += cellWidget.margin.left + cellWidget.width + cellWidget.margin.right;\n if (i === rowWidget.childWidgets.length - 1 && Math.round(left) < Math.round(rowWidget.x + tableWidth)) {\n if (this.insertRowSpannedWidget(rowWidget, viewer, left, i + 1)) {\n continue;\n }\n this.insertEmptySplittedCellWidget(rowWidget, tableCollection, left, i + 1, previousRowIndex);\n continue;\n }\n }\n // tslint:disable-next-line:max-line-length\n // Special case: when the child widgets of row is equal to 0 then the splitted widgets in the viewer is added in the table row widgets. \n if ((isNullOrUndefined(rowWidget.childWidgets) || rowWidget.childWidgets.length === 0) && viewer.splittedCellWidgets.length > 0) {\n for (var j = 0; j < viewer.splittedCellWidgets.length; j++) {\n var widget = viewer.splittedCellWidgets[j];\n if (Math.round(left) <= Math.round(widget.x - widget.margin.left)) {\n if (this.insertRowSpannedWidget(rowWidget, viewer, left, j)) {\n j--;\n continue;\n }\n var count = rowWidget.childWidgets.length;\n this.insertEmptySplittedCellWidget(rowWidget, tableCollection, left, j, previousRowIndex);\n if (count < rowWidget.childWidgets.length) {\n j--;\n continue;\n }\n }\n left += widget.margin.left + widget.width + widget.margin.right;\n if (j === rowWidget.childWidgets.length - 1 && Math.round(left) <\n Math.round(rowWidget.x + tableWidth)) {\n if (this.insertRowSpannedWidget(rowWidget, viewer, left, j + 1)) {\n continue;\n }\n this.insertEmptySplittedCellWidget(rowWidget, tableCollection, left, j + 1, previousRowIndex);\n continue;\n }\n }\n }\n if (viewer.splittedCellWidgets.length > 0) {\n viewer.splittedCellWidgets = [];\n }\n };\n /**\n * Inserts spanned row widget.\n * @param rowWidget\n * @param viewer\n * @param left\n * @param index\n */\n Layout.prototype.insertRowSpannedWidget = function (rowWidget, viewer, left, index) {\n var cellSpacing = 0;\n if (rowWidget.ownerTable.tableFormat.cellSpacing > 0) {\n cellSpacing = HelperMethods.convertPointToPixel(rowWidget.ownerTable.tableFormat.cellSpacing);\n }\n for (var i = 0; i < viewer.splittedCellWidgets.length; i++) {\n var splittedCell = viewer.splittedCellWidgets[i];\n if (Math.round(left) === Math.round(splittedCell.x - splittedCell.margin.left)) {\n rowWidget.childWidgets.splice(index, 0, splittedCell);\n splittedCell.containerWidget = rowWidget;\n //If the splitted cell location differs from expected location update the location of row child widgets.\n if (splittedCell.y !== rowWidget.y + splittedCell.margin.top + cellSpacing) {\n this.updateChildLocationForRow(rowWidget.y, rowWidget);\n }\n viewer.splittedCellWidgets = [];\n return true;\n }\n }\n return false;\n };\n /**\n * Inserts empty splitted cell widgets.\n * @param rowWidget\n * @param left\n * @param index\n */\n // tslint:disable-next-line:max-line-length\n Layout.prototype.insertEmptySplittedCellWidget = function (currentRow, tableCollection, left, index, previousRowIndex) {\n var tableWidget = tableCollection[tableCollection.length - 1];\n for (var i = previousRowIndex; i >= 0; i--) {\n var rowWidget = tableWidget.childWidgets[i];\n var previousLeft = rowWidget.x;\n for (var j = 0; j < rowWidget.childWidgets.length; j++) {\n var rowSpan = 1;\n var cellWidget = rowWidget.childWidgets[j];\n if (Math.round(left) === Math.round(previousLeft)) {\n rowSpan = (isNullOrUndefined(cellWidget) || isNullOrUndefined(cellWidget.cellFormat)) ? rowSpan :\n cellWidget.cellFormat.rowSpan;\n if (rowSpan > 1) {\n var emptyCellWidget = this.createCellWidget(cellWidget);\n currentRow.childWidgets.splice(index, 0, emptyCellWidget);\n emptyCellWidget.containerWidget = currentRow;\n }\n return;\n }\n previousLeft += cellWidget.margin.left + cellWidget.width + cellWidget.margin.right;\n }\n }\n };\n /**\n * Gets spllited widget.\n * @param bottom\n * @param splitMinimalWidget\n * @param cellWidget\n */\n // tslint:disable-next-line:max-line-length\n Layout.prototype.getSplittedWidget = function (bottom, splitMinimalWidget, tableCollection, rowCollection, cellWidget) {\n var splittedWidget = undefined;\n if (cellWidget.y + cellWidget.height > bottom - cellWidget.margin.bottom) {\n for (var i = 0; i < cellWidget.childWidgets.length; i++) {\n if (cellWidget.childWidgets[i] instanceof ParagraphWidget) {\n var paragraphWidget = cellWidget.childWidgets[i];\n var splittedPara = this.getSplittedWidgetForPara(bottom - cellWidget.margin.bottom, paragraphWidget);\n if (!isNullOrUndefined(splittedPara)) {\n if (i === 0 && splittedPara === paragraphWidget) {\n //Returns if the whole content of the cell does not fit in current page.\n return cellWidget;\n }\n if (cellWidget.childWidgets.indexOf(splittedPara) !== -1) {\n cellWidget.childWidgets.splice(cellWidget.childWidgets.indexOf(splittedPara), 1);\n i--;\n }\n cellWidget.height -= splittedPara.height;\n if (isNullOrUndefined(splittedWidget)) {\n //Creates new widget, to hold the splitted contents.\n splittedWidget = this.createCellWidget(cellWidget);\n }\n splittedWidget.height += splittedPara.height;\n splittedWidget.childWidgets.push(splittedPara);\n splittedPara.containerWidget = splittedWidget;\n }\n }\n else {\n var tableWidget = cellWidget.childWidgets[i];\n var tableCol = [tableWidget];\n //Check for nested table.\n if (bottom - cellWidget.margin.bottom < tableWidget.y + tableWidget.height) {\n var tableHeight = tableWidget.height;\n // tslint:disable-next-line:max-line-length\n var splittedTable = this.getSplittedWidgetForTable(bottom - cellWidget.margin.bottom, tableCol, tableWidget);\n if (!isNullOrUndefined(splittedTable)) {\n if (i === 0 && splittedTable === tableWidget) {\n //Returns if the whole table does not fit in current page.\n return cellWidget;\n }\n if (cellWidget.childWidgets.indexOf(splittedTable) !== -1) {\n cellWidget.childWidgets.splice(cellWidget.childWidgets.indexOf(splittedTable), 1);\n i--;\n cellWidget.height -= splittedTable.height;\n }\n else {\n cellWidget.height -= tableHeight - tableWidget.height;\n }\n if (isNullOrUndefined(splittedWidget)) {\n //Creates new widget, to hold the splitted contents.\n splittedWidget = this.createCellWidget(cellWidget);\n }\n splittedWidget.height += splittedTable.height;\n splittedWidget.childWidgets.push(splittedTable);\n splittedTable.containerWidget = splittedWidget;\n }\n }\n }\n }\n }\n if (isNullOrUndefined(splittedWidget) && splitMinimalWidget) {\n //Creates new widget, to hold the splitted contents.\n splittedWidget = this.createCellWidget(cellWidget);\n }\n return splittedWidget;\n };\n /**\n * Gets list level pattern\n * @param value\n * @private\n */\n Layout.prototype.getListLevelPattern = function (value) {\n switch (value) {\n case 0:\n return 'Arabic';\n case 1:\n return 'UpRoman';\n case 2:\n return 'LowRoman';\n case 3:\n return 'UpLetter';\n case 4:\n return 'LowLetter';\n case 5:\n return 'Ordinal';\n case 6:\n return 'Number';\n case 7:\n return 'OrdinalText';\n case 8:\n return 'LeadingZero';\n case 9:\n return 'Bullet';\n case 10:\n return 'FarEast';\n case 11:\n return 'Special';\n default:\n return 'None';\n }\n };\n /**\n * Creates cell widget.\n * @param cell\n */\n Layout.prototype.createCellWidget = function (cell) {\n var cellWidget = new TableCellWidget();\n cellWidget.cellFormat = cell.cellFormat;\n cellWidget.index = cell.index;\n cellWidget.rowIndex = cell.rowIndex;\n cellWidget.columnIndex = cell.columnIndex;\n cellWidget.containerWidget = cell.containerWidget;\n this.updateWidgetLocation(cell, cellWidget);\n cellWidget.margin = cell.margin;\n cellWidget.leftBorderWidth = HelperMethods.convertPointToPixel(cell.leftBorderWidth);\n cellWidget.rightBorderWidth = HelperMethods.convertPointToPixel(cell.rightBorderWidth);\n return cellWidget;\n };\n /**\n * Create Table Widget\n */\n Layout.prototype.createTableWidget = function (table) {\n var newTable = new TableWidget();\n if (table.header) {\n newTable.header = table.header;\n newTable.headerHeight = table.headerHeight;\n }\n newTable.index = table.index;\n newTable.tableFormat = table.tableFormat;\n newTable.tableHolder = table.tableHolder;\n newTable.isGridUpdated = table.isGridUpdated;\n return newTable;\n };\n /**\n * Gets splitted widget for paragraph.\n * @param bottom\n * @param paragraphWidget\n */\n Layout.prototype.getSplittedWidgetForPara = function (bottom, paragraphWidget) {\n var lineBottom = paragraphWidget.y;\n var splittedWidget = undefined;\n for (var i = 0; i < paragraphWidget.childWidgets.length; i++) {\n var lineWidget = paragraphWidget.childWidgets[i];\n if (bottom < lineBottom + lineWidget.height) {\n if (i === 0) {\n if (lineWidget.paragraph.containerWidget instanceof TableCellWidget) {\n //checks first line of the page is exceed the page height\n if (lineWidget.paragraph.containerWidget.y === paragraphWidget.y) {\n lineBottom += lineWidget.height;\n continue;\n }\n }\n splittedWidget = paragraphWidget;\n break;\n }\n if (paragraphWidget.childWidgets.indexOf(lineWidget) !== -1) {\n paragraphWidget.childWidgets.splice(paragraphWidget.childWidgets.indexOf(lineWidget), 1);\n i--;\n }\n paragraphWidget.height -= lineWidget.height;\n if (isNullOrUndefined(splittedWidget)) {\n //Creates new widget, to hold the splitted contents.\n splittedWidget = new ParagraphWidget();\n splittedWidget.characterFormat = paragraphWidget.characterFormat;\n splittedWidget.paragraphFormat = paragraphWidget.paragraphFormat;\n splittedWidget.index = paragraphWidget.index;\n this.updateWidgetLocation(paragraphWidget, splittedWidget);\n splittedWidget.height = lineWidget.height;\n }\n else {\n splittedWidget.height += lineWidget.height;\n }\n splittedWidget.childWidgets.push(lineWidget);\n lineWidget.paragraph = splittedWidget;\n }\n lineBottom += lineWidget.height;\n }\n return splittedWidget;\n };\n /**\n * Gets splitted table widget.\n * @param bottom\n * @param tableWidget\n * @private\n */\n // tslint:disable-next-line:max-line-length\n Layout.prototype.getSplittedWidgetForTable = function (bottom, tableCollection, tableWidget) {\n var rowBottom = tableWidget.y;\n var splittedWidget = undefined;\n for (var i = 0; i < tableWidget.childWidgets.length; i++) {\n var rowWidget = undefined;\n var childWidget = tableWidget.childWidgets[i];\n // if (childWidget instanceof TableRowWidget) {\n rowWidget = childWidget;\n // }\n var rowHeight = rowWidget.height;\n if (bottom < rowBottom + rowHeight || !isNullOrUndefined(splittedWidget)) {\n //ToDo: Check whether row included in vertical merge or AllowRowSplitbyPage is true, if so split row.\n //Checks if atleast first line fits in the client area. \n var splittedRow = undefined;\n var allowRowBreakAcrossPages = true;\n if (!isNullOrUndefined(rowWidget) && !isNullOrUndefined(rowWidget.rowFormat)) {\n allowRowBreakAcrossPages = rowWidget.rowFormat.allowBreakAcrossPages;\n }\n if (allowRowBreakAcrossPages) {\n // tslint:disable-next-line:max-line-length\n splittedRow = (isNullOrUndefined(splittedWidget) && this.isFirstLineFitForRow(bottom, rowWidget)) ? this.getSplittedWidgetForRow(bottom, tableCollection, [rowWidget], rowWidget) : rowWidget;\n }\n if (!isNullOrUndefined(splittedRow)) {\n if (i === 0 && splittedRow === rowWidget) {\n //Returns if the whole table does not fit in current page.\n return tableWidget;\n }\n if (tableWidget.childWidgets.indexOf(splittedRow) !== -1) {\n tableWidget.childWidgets.splice(tableWidget.childWidgets.indexOf(splittedRow), 1);\n i--;\n tableWidget.height -= splittedRow.height;\n }\n else {\n tableWidget.height -= rowHeight - rowWidget.height;\n }\n if (isNullOrUndefined(splittedWidget)) {\n //Creates new widget, to hold the splitted contents.\n splittedWidget = this.createTableWidget(tableWidget);\n this.updateWidgetLocation(tableWidget, splittedWidget);\n splittedWidget.height = splittedRow.height;\n }\n else {\n splittedWidget.height += splittedRow.height;\n }\n splittedWidget.childWidgets.push(splittedRow);\n splittedRow.containerWidget = splittedWidget;\n }\n }\n rowBottom += rowWidget.height;\n }\n return splittedWidget;\n };\n /**\n * Checks whether first line fits for paragraph or not.\n * @param bottom\n * @param paraWidget\n */\n Layout.prototype.isFirstLineFitForPara = function (bottom, paraWidget) {\n var lineWidget = paraWidget.childWidgets[0];\n var cellwidget = lineWidget.paragraph.containerWidget;\n // let document: WordDocument = undefined;\n // if (!isNullOrUndefined(lineWidget.paragraph.currentNode) && !isNullOrUndefined(cellwidget.containerWidget)) {\n // document = WordDocument.getDocumentOf(lineWidget.paragraph.currentNode);\n // }\n //checks first line of the page is exceed the page height\n if (this.viewer.isFirstLineFitInShiftWidgets) {\n if (this.viewer.clientActiveArea.y === this.viewer.clientArea.y && paraWidget.y + lineWidget.height >= bottom) {\n return true;\n }\n }\n else {\n // For nested tables,\n if (cellwidget.ownerTable.isInsideTable) {\n // Gets the container cell widgets, consider it as client area for the cell widget.\n var containerCellWidget = undefined;\n if (cellwidget.containerWidget instanceof TableRowWidget &&\n cellwidget.containerWidget.containerWidget instanceof TableWidget\n && cellwidget.containerWidget.containerWidget.containerWidget instanceof TableCellWidget) {\n containerCellWidget = cellwidget.containerWidget.containerWidget.containerWidget;\n }\n if (!isNullOrUndefined(containerCellWidget) && cellwidget.containerWidget.y === containerCellWidget.y\n && paraWidget.y + lineWidget.height >= bottom) {\n return true;\n }\n }\n else if (cellwidget.containerWidget.y === this.viewer.clientArea.y && paraWidget.y + lineWidget.height >= bottom) {\n return true;\n }\n }\n return (paraWidget.y + lineWidget.height <= bottom);\n };\n /**\n * Checks whether first line fits for table or not.\n * @param bottom\n * @param tableWidget\n * @private\n */\n Layout.prototype.isFirstLineFitForTable = function (bottom, tableWidget) {\n var rowWidget = undefined;\n var isFit = false;\n var childWidget = tableWidget.childWidgets[0];\n // if (childWidget instanceof TableRowWidget) {\n rowWidget = childWidget;\n // }\n if (!isNullOrUndefined(rowWidget)) {\n isFit = this.isFirstLineFitForRow(bottom, rowWidget);\n }\n return isFit;\n };\n /**\n * Checks whether first line fits for row or not.\n * @param bottom\n * @param rowWidget\n */\n Layout.prototype.isFirstLineFitForRow = function (bottom, rowWidget) {\n for (var i = 0; i < rowWidget.childWidgets.length; i++) {\n var cellWidget = rowWidget.childWidgets[i];\n if (!this.isFirstLineFitForCell(bottom, cellWidget)) {\n return false;\n }\n }\n return true;\n };\n /**\n * Checks whether first line fits for cell or not.\n * @param bottom\n * @param cellWidget\n */\n Layout.prototype.isFirstLineFitForCell = function (bottom, cellWidget) {\n if (cellWidget.childWidgets.length === 0) {\n return true;\n }\n if (cellWidget.childWidgets[0] instanceof ParagraphWidget) {\n var paraWidget = cellWidget.childWidgets[0];\n return this.isFirstLineFitForPara(bottom - cellWidget.margin.bottom, paraWidget);\n }\n else {\n var tableWidget = cellWidget.childWidgets[0];\n return this.isFirstLineFitForTable(bottom - cellWidget.margin.bottom, tableWidget);\n }\n };\n /**\n * Updates widget location.\n * @param widget\n * @param table\n */\n Layout.prototype.updateWidgetLocation = function (widget, table) {\n table.x = widget.x;\n table.y = widget.y;\n table.width = widget.width;\n };\n /**\n * Updates child location for table.\n * @param top\n * @param tableWidget\n * @private\n */\n Layout.prototype.updateChildLocationForTable = function (top, tableWidget) {\n for (var i = 0; i < tableWidget.childWidgets.length; i++) {\n var rowWidget = tableWidget.childWidgets[i];\n rowWidget.x = rowWidget.x;\n rowWidget.y = top;\n this.updateChildLocationForRow(top, rowWidget);\n top += rowWidget.height;\n }\n };\n /**\n * Updates child location for row.\n * @param top\n * @param rowWidget\n * @private\n */\n Layout.prototype.updateChildLocationForRow = function (top, rowWidget) {\n var spacing = 0;\n if (rowWidget.ownerTable.tableFormat.cellSpacing > 0) {\n spacing = HelperMethods.convertPointToPixel(rowWidget.ownerTable.tableFormat.cellSpacing);\n }\n for (var i = 0; i < rowWidget.childWidgets.length; i++) {\n var cellWidget = rowWidget.childWidgets[i];\n cellWidget.x = cellWidget.x;\n cellWidget.y = top + cellWidget.margin.top + spacing;\n this.updateChildLocationForCell(cellWidget.y, cellWidget);\n }\n };\n /**\n * Updates child location for cell.\n * @param top\n * @param cellWidget\n */\n Layout.prototype.updateChildLocationForCell = function (top, cellWidget) {\n for (var i = 0; i < cellWidget.childWidgets.length; i++) {\n cellWidget.childWidgets[i].x = cellWidget.childWidgets[i].x;\n cellWidget.childWidgets[i].y = top;\n if (cellWidget.childWidgets[i] instanceof TableWidget) {\n this.updateChildLocationForTable(top, cellWidget.childWidgets[i]);\n }\n top += cellWidget.childWidgets[i].height;\n }\n };\n /**\n * Updates cell vertical position.\n * @param cellWidget\n * @param isUpdateToTop\n * @param isInsideTable\n * @private\n */\n Layout.prototype.updateCellVerticalPosition = function (cellWidget, isUpdateToTop, isInsideTable) {\n if (cellWidget.ownerTable.containerWidget instanceof BodyWidget || isInsideTable) {\n var displacement = this.getDisplacement(cellWidget, isUpdateToTop);\n //Update Y position alone for the child widget of cell\n this.updateCellContentVerticalPosition(cellWidget, displacement, isUpdateToTop);\n }\n };\n /**\n * Updates cell content vertical position.\n * @param cellWidget\n * @param displacement\n * @param isUpdateToTop\n */\n Layout.prototype.updateCellContentVerticalPosition = function (cellWidget, displacement, isUpdateToTop) {\n if (displacement === 0) {\n return;\n }\n var location = cellWidget.y + displacement;\n for (var i = 0; i < cellWidget.childWidgets.length; i++) {\n if (cellWidget.childWidgets[i] instanceof ParagraphWidget) {\n cellWidget.childWidgets[i].y = location;\n }\n else {\n location = this.updateTableWidgetLocation(cellWidget.childWidgets[i], location, isUpdateToTop);\n }\n location = location + cellWidget.childWidgets[i].height;\n }\n };\n /**\n * Updates table widget location.\n * @param tableWidget\n * @param location\n * @param isUpdateToTop\n */\n Layout.prototype.updateTableWidgetLocation = function (tableWidget, location, isUpdateToTop) {\n tableWidget.y = location = location + tableWidget.topBorderWidth;\n var cellSpacing = 0;\n for (var i = 0; i < tableWidget.childWidgets.length; i++) {\n var rowWidget = tableWidget.childWidgets[i];\n rowWidget.y = location;\n for (var j = 0; j < rowWidget.childWidgets.length; j++) {\n var cellWidget = rowWidget.childWidgets[j];\n cellWidget.y = location + cellWidget.margin.top + cellSpacing;\n this.updateCellVerticalPosition(cellWidget, isUpdateToTop, true);\n }\n location = location + rowWidget.height;\n }\n return location;\n };\n /**\n * Gets displacement.\n * @param cellWidget\n * @param isUpdateToTop\n */\n Layout.prototype.getDisplacement = function (cellWidget, isUpdateToTop) {\n //Gets the height of row\n var rowHeight = 0;\n var rowWidget = cellWidget.containerWidget;\n var padding = cellWidget.margin.top + cellWidget.margin.bottom;\n if (!isNullOrUndefined(cellWidget.cellFormat) && cellWidget.cellFormat.rowSpan > 1) {\n rowHeight = cellWidget.height;\n }\n else {\n rowHeight = ((!isNullOrUndefined(rowWidget) ? rowWidget.height : 0) - padding);\n }\n //Gets the height of content within the cell\n var cellContentHeight = this.getCellContentHeight(cellWidget);\n //Displacement field holds the value which has reduced from rowHeight and cellContentHeight\n var displacement = 0;\n if (rowHeight > cellContentHeight) {\n displacement = rowHeight - cellContentHeight;\n if (cellWidget.cellFormat.verticalAlignment === 'Center') {\n displacement = displacement / 2;\n }\n else if ((cellWidget.cellFormat.verticalAlignment === 'Top' || isUpdateToTop)) {\n displacement = 0;\n }\n }\n return displacement;\n };\n /**\n * Gets cell content height.\n * @param cellWidget\n */\n Layout.prototype.getCellContentHeight = function (cellWidget) {\n if (isNullOrUndefined(cellWidget.childWidgets)) {\n return 0;\n }\n var contentHeight = 0;\n for (var i = 0; i < cellWidget.childWidgets.length; i++) {\n if (cellWidget.childWidgets[i] instanceof ParagraphWidget) {\n contentHeight += cellWidget.childWidgets[i].height;\n }\n else {\n contentHeight += cellWidget.childWidgets[i].height;\n }\n }\n return contentHeight;\n };\n /**\n * Gets table left borders.\n * @param borders\n * @private\n */\n Layout.prototype.getTableLeftBorder = function (borders) {\n if (!isNullOrUndefined(borders.left)) {\n return borders.left;\n }\n else {\n var border = new WBorder(borders);\n border.lineStyle = 'Single';\n border.lineWidth = 0.66;\n return border;\n }\n };\n /**\n * Gets table right border.\n * @param borders\n * @private\n */\n Layout.prototype.getTableRightBorder = function (borders) {\n if (!isNullOrUndefined(borders.right)) {\n return borders.right;\n }\n else {\n var border = new WBorder(borders);\n border.lineStyle = 'Single';\n border.lineWidth = 0.66;\n return border;\n }\n };\n /**\n * Get table top border.\n * @param borders\n * @private\n */\n Layout.prototype.getTableTopBorder = function (borders) {\n if (!isNullOrUndefined(borders.top)) {\n return borders.top;\n }\n else {\n var border = new WBorder(borders);\n border.lineStyle = 'Single';\n border.lineWidth = 0.66;\n return border;\n }\n };\n /**\n * Gets table bottom border.\n * @param borders\n * @private\n */\n Layout.prototype.getTableBottomBorder = function (borders) {\n if (!isNullOrUndefined(borders.bottom)) {\n return borders.bottom;\n }\n else {\n var border = new WBorder(borders);\n border.lineStyle = 'Single';\n border.lineWidth = 0.66;\n return border;\n }\n };\n /**\n * Get diagonal cell up border.\n * @param tableCell\n * @private\n */\n Layout.prototype.getCellDiagonalUpBorder = function (tableCell) {\n var diagonalUpBorder = undefined;\n var cellBorder = undefined;\n cellBorder = tableCell.cellFormat.borders;\n diagonalUpBorder = cellBorder.diagonalUp;\n return diagonalUpBorder;\n };\n /**\n * Gets diagonal cell down border\n * @param tableCell\n * @private\n */\n Layout.prototype.getCellDiagonalDownBorder = function (tableCell) {\n var diagonalDownBorder = undefined;\n var cellBorder = undefined;\n cellBorder = tableCell.cellFormat.borders;\n diagonalDownBorder = cellBorder.diagonalDown;\n return diagonalDownBorder;\n };\n /**\n * Gets table width.\n * @param table\n * @private\n */\n Layout.prototype.getTableWidth = function (table) {\n var width = 0;\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n var rowWidth = 0;\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n rowWidth += HelperMethods.convertPointToPixel(cell.cellFormat.cellWidth);\n }\n if (width < rowWidth) {\n width = rowWidth;\n }\n }\n return width;\n };\n //#region shifting\n /**\n * @private\n */\n Layout.prototype.layoutNextItemsBlock = function (blockAdv, viewer) {\n var block = blockAdv;\n var splittedWidget = block.getSplitWidgets();\n var nextBlock = splittedWidget[splittedWidget.length - 1].nextRenderedWidget;\n if (isNullOrUndefined(nextBlock) || this.viewer.blockToShift === block) {\n this.viewer.blockToShift = undefined;\n }\n var updateNextBlockList = true;\n while (nextBlock instanceof BlockWidget) {\n var currentWidget = undefined;\n var blocks = block.getSplitWidgets();\n currentWidget = blocks[blocks.length - 1];\n // if (viewer.fieldEndParagraph === block) {\n // //Sets field end paragraph to undefined, inorder to hold reLayouting with this paragraph.\n // viewer.fieldEndParagraph = undefined;\n // }\n block = nextBlock;\n if (viewer.blockToShift === block) {\n viewer.blockToShift = undefined;\n }\n updateNextBlockList = false;\n var nextWidget = undefined;\n nextWidget = block.getSplitWidgets()[0];\n // tslint:disable-next-line:max-line-length\n if (viewer.fieldStacks.length === 0 && !isNullOrUndefined(nextWidget) && currentWidget.containerWidget === nextWidget.containerWidget\n && (HelperMethods.round(nextWidget.y, 2) === HelperMethods.round(currentWidget.y + currentWidget.height, 2))) {\n if (!isNullOrUndefined(viewer.blockToShift)) {\n viewer.blockToShift = block;\n }\n break;\n }\n updateNextBlockList = true;\n if (viewer.owner.isShiftingEnabled && viewer.fieldStacks.length === 0) {\n viewer.blockToShift = block;\n break;\n }\n else {\n block = block.combineWidget(this.viewer);\n var paragraph = void 0;\n if (currentWidget.containerWidget !== block.containerWidget) {\n // tslint:disable-next-line:max-line-length\n this.updateContainerWidget(block, currentWidget.containerWidget, currentWidget.indexInOwner + 1, false);\n }\n if (block instanceof TableWidget) {\n this.clearTableWidget(block, true, true);\n block.isGridUpdated = false;\n paragraph = this.viewer.selection.getFirstParagraphInFirstCell(block);\n }\n else {\n paragraph = block;\n }\n if ((this.viewer.owner.isDocumentLoaded) && this.viewer.owner.editorModule) {\n this.viewer.owner.editorModule.updateWholeListItems(paragraph);\n }\n viewer.updateClientAreaForBlock(block, true);\n this.viewer.layout.layoutBlock(block, 0);\n viewer.updateClientAreaForBlock(block, false);\n }\n splittedWidget = nextBlock.getSplitWidgets();\n nextBlock = splittedWidget[splittedWidget.length - 1].nextRenderedWidget;\n }\n if (!viewer.owner.isShiftingEnabled || this.viewer.blockToShift !== block) {\n this.viewer.owner.editorModule.updateListItemsTillEnd(block, updateNextBlockList);\n }\n };\n /**\n * @private\n */\n Layout.prototype.updateClientAreaForLine = function (paragraph, startLineWidget, elementIndex) {\n //Clears the line widget starting from current line.\n var top = this.viewer.selection.getTop(startLineWidget);\n var left = this.viewer.clientArea.x;\n this.viewer.cutFromTop(top);\n this.viewer.cutFromLeft(left);\n };\n /**\n * @private\n */\n Layout.prototype.getParentTable = function (block) {\n var widget = block;\n while (widget.containerWidget) {\n if (widget.containerWidget instanceof BlockContainer) {\n return widget;\n }\n widget = widget.containerWidget;\n }\n return undefined;\n };\n /**\n * @private\n */\n Layout.prototype.reLayoutParagraph = function (paragraphWidget, lineIndex, elementBoxIndex) {\n if (this.viewer.blockToShift === paragraphWidget) {\n this.layoutBodyWidgetCollection(paragraphWidget.index, paragraphWidget.containerWidget, paragraphWidget, false);\n }\n // let isElementMoved: boolean = elementBoxIndex > 0;\n if (paragraphWidget.isInsideTable) {\n this.reLayoutTable(paragraphWidget);\n }\n else {\n this.reLayoutLine(paragraphWidget, lineIndex);\n }\n if (paragraphWidget.bodyWidget instanceof HeaderFooterWidget &&\n paragraphWidget.bodyWidget.headerFooterType.indexOf('Footer') !== -1) {\n this.shiftFooterChildLocation(paragraphWidget.bodyWidget, this.viewer);\n }\n };\n /**\n * @private\n */\n Layout.prototype.reLayoutTable = function (block) {\n //Get Top level owner of block\n var table = this.getParentTable(block);\n //Combine splitted table in to single table\n // this.combineTableWidgets(this.viewer, table, undefined);\n //Get Parent table\n var currentTable = table.combineWidget(this.viewer);\n currentTable.isGridUpdated = false;\n currentTable.buildTableColumns();\n currentTable.isGridUpdated = true;\n var bodyWidget = currentTable.containerWidget;\n if (this.viewer.owner.enableHeaderAndFooter || block.isInHeaderFooter) {\n bodyWidget.height -= currentTable.height;\n // tslint:disable-next-line:max-line-length\n this.viewer.updateHCFClientAreaWithTop(table.bodyWidget.sectionFormat, this.viewer.isBlockInHeader(table), bodyWidget.page);\n }\n else {\n this.viewer.updateClientArea(bodyWidget.sectionFormat, bodyWidget.page);\n }\n //Clear Hieght for all the content \n if (this.viewer.owner.isDocumentLoaded && this.viewer.owner.editorModule) {\n var block_1 = this.viewer.selection.getFirstParagraphInFirstCell(currentTable);\n this.viewer.owner.editorModule.updateWholeListItems(block_1);\n }\n this.viewer.updateClientAreaForBlock(currentTable, true);\n //Remove border width\n currentTable.x -= currentTable.leftBorderWidth;\n currentTable.y -= currentTable.topBorderWidth;\n //Update Client area for current position\n this.viewer.cutFromTop(currentTable.y);\n this.clearTableWidget(currentTable, true, true);\n this.layoutBlock(currentTable, 0, true);\n this.viewer.updateClientAreaForBlock(currentTable, false);\n this.layoutNextItemsBlock(currentTable, this.viewer);\n };\n /**\n * @private\n */\n Layout.prototype.clearTableWidget = function (table, clearPosition, clearHeight) {\n table.height = 0;\n if (clearPosition) {\n table.y = 0;\n table.x = 0;\n }\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n this.clearRowWidget(row, clearPosition, clearHeight);\n }\n };\n /**\n * @private\n */\n Layout.prototype.clearRowWidget = function (row, clearPosition, clearHeight) {\n row.height = 0;\n if (clearPosition) {\n row.y = 0;\n row.x = 0;\n }\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cell = row.childWidgets[i];\n this.clearCellWidget(cell, clearPosition, clearHeight);\n }\n };\n /**\n * @private\n */\n Layout.prototype.clearCellWidget = function (cell, clearPosition, clearHeight) {\n cell.height = 0;\n if (clearPosition) {\n cell.y = 0;\n cell.x = 0;\n }\n for (var i = 0; i < cell.childWidgets.length; i++) {\n var block = cell.childWidgets[i];\n if (block instanceof ParagraphWidget) {\n if (clearHeight) {\n block.height = 0;\n }\n }\n else {\n this.clearTableWidget(block, clearPosition, clearHeight);\n }\n }\n };\n /**\n * @param blockIndex\n * @param bodyWidget\n * @param block\n * @private\n */\n // tslint:disable-next-line:max-line-length\n Layout.prototype.layoutBodyWidgetCollection = function (blockIndex, bodyWidget, block, shiftNextWidget) {\n if (!isNullOrUndefined(this.viewer.owner)\n && this.viewer.owner.isLayoutEnabled) {\n if (bodyWidget instanceof BlockContainer) {\n var curretBlock = this.checkAndGetBlock(bodyWidget, blockIndex);\n if (isNullOrUndefined(curretBlock)) {\n return;\n }\n if (bodyWidget instanceof HeaderFooterWidget) {\n // tslint:disable-next-line:max-line-length\n this.viewer.updateHCFClientAreaWithTop(bodyWidget.sectionFormat, bodyWidget.headerFooterType.indexOf('Header') !== -1, bodyWidget.page);\n curretBlock.containerWidget.height -= curretBlock.height;\n }\n else {\n this.viewer.updateClientArea(bodyWidget.sectionFormat, bodyWidget.page);\n }\n if (blockIndex > 0) {\n var prevWidget = curretBlock.getSplitWidgets()[0].previousRenderedWidget;\n this.viewer.cutFromTop(prevWidget.y + prevWidget.height);\n if (curretBlock.containerWidget !== prevWidget.containerWidget) {\n // tslint:disable-next-line:max-line-length\n this.updateContainerWidget(curretBlock, prevWidget.containerWidget, prevWidget.indexInOwner + 1, false);\n }\n }\n var currentParagraph = void 0;\n curretBlock = curretBlock.combineWidget(this.viewer);\n if (curretBlock instanceof TableWidget) {\n this.clearTableWidget(curretBlock, true, true);\n curretBlock.isGridUpdated = false;\n currentParagraph = this.viewer.selection.getFirstParagraphInFirstCell(curretBlock);\n }\n else {\n currentParagraph = curretBlock;\n }\n if ((this.viewer.owner.isDocumentLoaded) && this.viewer.owner.editorModule) {\n this.viewer.owner.editorModule.updateWholeListItems(currentParagraph);\n }\n this.viewer.updateClientAreaForBlock(curretBlock, true);\n this.viewer.layout.layoutBlock(curretBlock, 0, true);\n this.viewer.updateClientAreaForBlock(curretBlock, false);\n if (shiftNextWidget) {\n this.shiftNextWidgets(curretBlock);\n }\n else {\n this.layoutNextItemsBlock(curretBlock, this.viewer);\n }\n }\n else if (bodyWidget instanceof TableCellWidget) {\n var table = this.viewer.layout.getParentTable(bodyWidget.ownerTable.getSplitWidgets()[0]);\n this.reLayoutTable(bodyWidget.ownerTable);\n this.layoutNextItemsBlock(table, this.viewer);\n }\n }\n };\n Layout.prototype.checkAndGetBlock = function (containerWidget, blockIndex) {\n var sectionIndex = containerWidget.index;\n while (containerWidget && containerWidget.index === sectionIndex) {\n if (containerWidget.childWidgets.length > 0 && containerWidget.firstChild.index <= blockIndex &&\n containerWidget.lastChild.index >= blockIndex) {\n for (var i = 0; i < containerWidget.childWidgets.length; i++) {\n var block = containerWidget.childWidgets[i];\n if (block.index === blockIndex) {\n return block;\n }\n }\n }\n if (containerWidget instanceof BodyWidget) {\n containerWidget = containerWidget.nextRenderedWidget;\n }\n else {\n break;\n }\n }\n return undefined;\n };\n //#endregion\n //#region Table\n /**\n * Layouts table.\n * @param table\n * @private\n */\n Layout.prototype.layoutTable = function (table, startIndex) {\n if (!table.isGridUpdated) {\n table.buildTableColumns();\n table.isGridUpdated = true;\n }\n var tableView = [table];\n this.addTableWidget(this.viewer.clientActiveArea, tableView);\n this.viewer.updateClientAreaTopOrLeft(table, true);\n var isHeader = table.childWidgets[0].rowFormat.isHeader;\n if (table.childWidgets.length > 0) {\n table.header = isHeader;\n table.continueHeader = isHeader;\n table.headerHeight = 0;\n }\n var row = table.childWidgets[startIndex];\n while (row) {\n row = this.layoutRow(tableView, row);\n row = row.nextRow;\n }\n this.updateWidgetsToPage(tableView, [], table);\n return tableView[tableView.length - 1];\n };\n /**\n * Adds table widget.\n * @param area\n * @param table\n * @private\n */\n Layout.prototype.addTableWidget = function (area, table, create) {\n var tableWidget = table[table.length - 1];\n if (create) {\n tableWidget = this.createTableWidget(tableWidget);\n table.push(tableWidget);\n }\n tableWidget.width = area.width;\n tableWidget.x = area.x;\n tableWidget.y = area.y;\n //Update the table height of tableWidget when cell spacing has been defined. \n if (tableWidget.tableFormat.cellSpacing > 0) {\n tableWidget.height = tableWidget.height + HelperMethods.convertPointToPixel(tableWidget.tableFormat.cellSpacing);\n // tslint:disable-next-line:max-line-length\n tableWidget.leftBorderWidth = HelperMethods.convertPointToPixel(this.getTableLeftBorder(tableWidget.tableFormat.borders).getLineWidth());\n tableWidget.rightBorderWidth = HelperMethods.convertPointToPixel(this.getTableRightBorder(tableWidget.tableFormat.borders).getLineWidth());\n // tslint:disable-next-line:max-line-length\n tableWidget.topBorderWidth = HelperMethods.convertPointToPixel(this.getTableTopBorder(tableWidget.tableFormat.borders).getLineWidth());\n tableWidget.bottomBorderWidth = HelperMethods.convertPointToPixel(this.getTableBottomBorder(tableWidget.tableFormat.borders).getLineWidth());\n tableWidget.x += tableWidget.leftBorderWidth;\n tableWidget.y += tableWidget.topBorderWidth;\n tableWidget.width -= tableWidget.leftBorderWidth;\n tableWidget.width -= tableWidget.rightBorderWidth;\n tableWidget.height += tableWidget.bottomBorderWidth;\n }\n return tableWidget;\n };\n /**\n * Updates widget to page.\n * @param table\n * @private\n */\n Layout.prototype.updateWidgetsToPage = function (tables, rows, table, endRowWidget) {\n var viewer = this.viewer;\n var tableWidget = tables[tables.length - 1];\n if (!table.isInsideTable) {\n this.updateHeightForTableWidget(tables, rows, tableWidget, endRowWidget);\n if (tableWidget.childWidgets.length > 0 && tableWidget.y !== tableWidget.childWidgets[0].y) {\n tableWidget.y = tableWidget.childWidgets[0].y;\n }\n // Need to update on this further\n //Adds the table widget to owner cell widget.\n // tslint:disable-next-line:max-line-length\n // (viewer.renderedElements.get(table.associatedCell)[viewer.renderedElements.get(table.associatedCell).length - 1] as TableCellWidget).childWidgets.push(tableWidget);\n // tableWidget.containerWidget = viewer.renderedElements.get(table.associatedCell)[viewer.renderedElements.get(table.associatedCell).length - 1] as BodyWidget;\n // tslint:disable-next-line:max-line-length\n // (viewer.renderedElements.get(table.associatedCell)[viewer.renderedElements.get(table.associatedCell).length - 1] as TableCellWidget).height = (viewer.renderedElements.get(table.associatedCell)[viewer.renderedElements.get(table.associatedCell).length - 1] as TableCellWidget).height + tableWidget.height;\n }\n if (table.tableFormat.cellSpacing > 0) {\n // tslint:disable-next-line:max-line-length\n if (tableWidget.y + tableWidget.height + HelperMethods.convertPointToPixel(table.tableFormat.cellSpacing) > viewer.clientArea.bottom && viewer instanceof PageLayoutViewer) {\n //update the table height when split to next page. Which is equivalent Ms Word Behaviour. \n //In Ms Word if the Table Split to next page the bottom spacing of the table will be half of the current spacing.\n //And the Remaining space will be used in next page top of the table.\n tableWidget.height = tableWidget.height - HelperMethods.convertPointToPixel(table.tableFormat.cellSpacing) / 2;\n }\n //Update the current Y position of current clientactivearea.\n viewer.cutFromTop(tableWidget.y + tableWidget.height);\n }\n if (table.bodyWidget instanceof HeaderFooterWidget) {\n table.containerWidget.height += table.height;\n if (this.viewer.owner.enableHeaderAndFooter && table.bodyWidget.headerFooterType.indexOf('Footer') !== -1) {\n this.shiftFooterChildLocation(table.bodyWidget, this.viewer);\n }\n }\n };\n /**\n * Updates height for table widget.\n * @param viewer\n * @param tableWidget\n * @private\n */\n // tslint:disable-next-line:max-line-length\n Layout.prototype.updateHeightForTableWidget = function (tables, rows, tableWidget, endRowWidget) {\n for (var i = 0; i < tableWidget.childWidgets.length; i++) {\n var rowWidget = tableWidget.childWidgets[i];\n if (rowWidget === endRowWidget) {\n break;\n }\n this.updateHeightForRowWidget(this.viewer, true, tables, rows, rowWidget, true, endRowWidget);\n }\n };\n //#endregion\n //#region Row\n /**\n * Layouts table row.\n * @param row\n * @private\n */\n Layout.prototype.layoutRow = function (tableWidget, row) {\n var viewer = this.viewer;\n var rowWidgets = [row];\n var widget = this.addTableRowWidget(viewer.clientActiveArea, rowWidgets);\n viewer.updateClientAreaForRow(row, true);\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cell = row.childWidgets[i];\n // tslint:disable-next-line:max-line-length\n this.layoutCell(cell, this.getMaxTopOrBottomCellMargin(row, 0) + row.topBorderWidth, this.getMaxTopOrBottomCellMargin(row, 1) + row.bottomBorderWidth, widget);\n }\n viewer.updateClientAreaForRow(row, false);\n var rows = [row];\n this.updateWidgetsToTable(tableWidget, rows, row);\n return rows[rows.length - 1];\n };\n /**\n * @param area\n * @param row\n */\n Layout.prototype.addTableRowWidget = function (area, row) {\n var rowWidget = row[row.length - 1];\n rowWidget.x = area.x + rowWidget.rowFormat.gridBeforeWidth;\n rowWidget.y = area.y;\n rowWidget.width = area.width;\n var borderWidth = 0;\n if (!isNullOrUndefined(rowWidget.ownerTable) && !isNullOrUndefined(rowWidget.ownerTable.tableFormat)\n && rowWidget.ownerTable.tableFormat.cellSpacing > 0) {\n rowWidget.height = rowWidget.height + HelperMethods.convertPointToPixel(rowWidget.ownerTable.tableFormat.cellSpacing);\n //Update the table height with the border width to layout the border when the cell spacing is defined..\n for (var j = 0; j < rowWidget.childWidgets.length; j++) {\n if (!isNullOrUndefined(rowWidget.childWidgets[j].cellFormat)\n && !isNullOrUndefined(rowWidget.childWidgets[j].cellFormat.borders)) {\n // tslint:disable-next-line:max-line-length\n var width = TableCellWidget.getCellBottomBorder(rowWidget.childWidgets[j]).getLineWidth();\n if (width > borderWidth) {\n borderWidth = width;\n }\n }\n }\n //Maximum border width is calculated and hold it in a variable to add with the padding of the cells.\n rowWidget.bottomBorderWidth = HelperMethods.convertPointToPixel(borderWidth);\n if (rowWidget.index > 0 && !isNullOrUndefined(rowWidget.previousWidget)) {\n var prevRow = rowWidget.previousWidget;\n borderWidth = 0;\n for (var i = 0; i < prevRow.childWidgets.length; i++) {\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(prevRow.childWidgets[i].cellFormat) && !isNullOrUndefined(prevRow.childWidgets[i].cellFormat.borders)) {\n var value = TableCellWidget.getCellBottomBorder(prevRow.childWidgets[i]).getLineWidth();\n if (value > borderWidth) {\n borderWidth = value;\n }\n }\n }\n //Maximum border width is calculated and hold it in a variable to add with the padding of the cells.\n rowWidget.topBorderWidth = HelperMethods.convertPointToPixel(borderWidth);\n }\n }\n if (!isNullOrUndefined(rowWidget.childWidgets)) {\n for (var i = 0; i < rowWidget.childWidgets.length; i++) {\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(rowWidget.childWidgets[i].cellFormat) && !isNullOrUndefined(rowWidget.childWidgets[i].cellFormat.borders)) {\n var value = TableCellWidget.getCellTopBorder(rowWidget.childWidgets[i]).getLineWidth();\n if (value > borderWidth) {\n borderWidth = value;\n }\n }\n }\n }\n //Maximum border width is calculated and hold it in a variable to add with the padding of the cells.\n rowWidget.topBorderWidth = HelperMethods.convertPointToPixel(borderWidth);\n //Update the table height of tableWidget when cell spacing has been defined. \n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(rowWidget.ownerTable) && !isNullOrUndefined(rowWidget.ownerTable.tableFormat) && rowWidget.ownerTable.tableFormat.cellSpacing <= 0 && rowWidget.rowIndex === rowWidget.ownerTable.childWidgets.length - 1) {\n // Update the bottom width for last row .\n for (var i = 0; i < rowWidget.childWidgets.length; i++) {\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(rowWidget.childWidgets[i].cellFormat) && !isNullOrUndefined(rowWidget.childWidgets[i].cellFormat.borders)) {\n var value = TableCellWidget.getCellBottomBorder(rowWidget.childWidgets[i]).getLineWidth();\n if (value > borderWidth) {\n borderWidth = value;\n }\n }\n }\n //Maximum border width is calculated and hold it in a variable to add with the padding of the cells.\n rowWidget.bottomBorderWidth = HelperMethods.convertPointToPixel(borderWidth);\n }\n //tableRowWidget.ownerWidget = owner;\n return rowWidget;\n };\n /**\n * Gets maximum top or bottom cell margin.\n * @param row\n * @param topOrBottom\n */\n Layout.prototype.getMaxTopOrBottomCellMargin = function (row, topOrBottom) {\n if (isNullOrUndefined(row.childWidgets)) {\n return 0;\n }\n var value = 0;\n for (var i = 0; i < row.childWidgets.length; i++) {\n if (row.childWidgets.length > 0) {\n var cellFormat = row.childWidgets[i].cellFormat;\n if (cellFormat.containsMargins()) {\n if (topOrBottom === 0 && !isNullOrUndefined(cellFormat.topMargin) &&\n HelperMethods.convertPointToPixel(cellFormat.topMargin) > value) {\n value = HelperMethods.convertPointToPixel(cellFormat.topMargin);\n }\n else if (topOrBottom === 1 && !isNullOrUndefined(cellFormat.bottomMargin) &&\n HelperMethods.convertPointToPixel(cellFormat.bottomMargin) > value) {\n value = HelperMethods.convertPointToPixel(cellFormat.bottomMargin);\n }\n }\n else {\n var tableFormat = row.childWidgets[i].ownerTable.tableFormat;\n if (topOrBottom === 0 && HelperMethods.convertPointToPixel(tableFormat.topMargin) > value) {\n value = HelperMethods.convertPointToPixel(tableFormat.topMargin);\n }\n else if (topOrBottom === 1 && HelperMethods.convertPointToPixel(tableFormat.bottomMargin) > value) {\n value = HelperMethods.convertPointToPixel(tableFormat.bottomMargin);\n }\n }\n }\n }\n return value;\n };\n //#endregion Row\n //#region cell\n /**\n * Layouts cell\n * @param cell\n * @param maxCellMarginTop\n * @param maxCellMarginBottom\n */\n Layout.prototype.layoutCell = function (cell, maxCellMarginTop, maxCellMarginBottom, owner) {\n var viewer = this.viewer;\n this.addTableCellWidget(cell, viewer.clientActiveArea, maxCellMarginTop, maxCellMarginBottom);\n viewer.updateClientAreaForCell(cell, true);\n if (cell.childWidgets.length === 0) {\n var paragraphWidget = new ParagraphWidget();\n paragraphWidget.characterFormat = new WCharacterFormat();\n paragraphWidget.paragraphFormat = new WParagraphFormat();\n paragraphWidget.index = 0;\n var lineWidget = new LineWidget(undefined);\n paragraphWidget.childWidgets.push(lineWidget);\n cell.childWidgets.push(paragraphWidget);\n }\n for (var i = 0; i < cell.childWidgets.length; i++) {\n var block = cell.childWidgets[i];\n viewer.updateClientAreaForBlock(block, true);\n block.containerWidget = cell;\n this.layoutBlock(block, 0);\n viewer.updateClientAreaForBlock(block, false);\n }\n this.updateWidgetToRow(cell);\n viewer.updateClientAreaForCell(cell, false);\n };\n //endregion cell\n //#region Shifting\n /**\n * @private\n */\n Layout.prototype.shiftLayoutedItems = function () {\n if (isNullOrUndefined(this.viewer.blockToShift) || isNullOrUndefined(this.viewer.blockToShift.containerWidget)) {\n this.viewer.blockToShift = undefined;\n return;\n }\n var block = this.viewer.blockToShift;\n var sectionIndex = block.bodyWidget.index;\n this.reLayoutOrShiftWidgets(block, this.viewer);\n var updateNextBlockList = true;\n // If flow layout, then all sections are in single page. Hence need to update till last block of last section.\n // Todo: For page layout and section break continuous, need to handle the same.\n var splittedWidget = block.getSplitWidgets();\n var nextBlock = splittedWidget[splittedWidget.length - 1].nextRenderedWidget;\n while (nextBlock instanceof BlockWidget && nextBlock.bodyWidget.index === sectionIndex) {\n var currentWidget = undefined;\n var blocks = block.getSplitWidgets();\n currentWidget = blocks[blocks.length - 1];\n block = nextBlock;\n updateNextBlockList = false;\n var nextWidget = undefined;\n blocks = block.getSplitWidgets();\n if (block instanceof ParagraphWidget) {\n nextWidget = blocks[0];\n }\n else {\n if (block instanceof TableWidget) {\n nextWidget = blocks[0];\n }\n }\n if (currentWidget.containerWidget === nextWidget.containerWidget\n && (HelperMethods.round(nextWidget.y, 2) === HelperMethods.round(this.viewer.clientActiveArea.y, 2)) &&\n isNullOrUndefined(nextWidget.nextWidget)) {\n break;\n }\n updateNextBlockList = true;\n this.reLayoutOrShiftWidgets(block, this.viewer);\n splittedWidget = block.getSplitWidgets();\n nextBlock = splittedWidget[splittedWidget.length - 1].nextRenderedWidget;\n }\n if (this.viewer.owner.editorModule) {\n this.viewer.owner.editorModule.updateListItemsTillEnd(block, updateNextBlockList);\n }\n this.viewer.blockToShift = undefined;\n var viewer = this.viewer;\n // if (viewer instanceof PageLayoutViewer) {\n viewer.removeEmptyPages();\n this.updateFieldElements();\n viewer.updateScrollBars();\n // }\n };\n /**\n * @private\n */\n Layout.prototype.updateFieldElements = function () {\n for (var i = 0; i < this.viewer.fields.length; i++) {\n var fieldBegin = this.viewer.fields[i];\n if (!isNullOrUndefined(this.viewer.selection)) {\n var fieldCode = this.viewer.selection.getFieldCode(fieldBegin);\n if (!isNullOrUndefined(fieldCode) && fieldCode.toLowerCase().match('numpages')) {\n var textElement = fieldBegin.fieldSeparator.nextNode;\n if (!isNullOrUndefined(textElement)) {\n textElement.text = this.viewer.pages.length.toString();\n var paragraph = fieldBegin.line.paragraph;\n if (!isNullOrUndefined(paragraph.bodyWidget) && !isNullOrUndefined(paragraph.bodyWidget.page)) {\n var lineIndex = paragraph.childWidgets.indexOf(fieldBegin.line);\n var elementIndex = fieldBegin.line.children.indexOf(textElement);\n this.reLayoutParagraph(paragraph, lineIndex, elementIndex);\n }\n }\n }\n }\n }\n };\n Layout.prototype.reLayoutOrShiftWidgets = function (blockAdv, viewer) {\n var reLayoutItems = false;\n var block = blockAdv;\n // if (block instanceof ParagraphWidget) {\n // reLayoutItems = viewer.renderedElements.get(block as ParagraphWidget).length === 0;\n // } else {\n // reLayoutItems = viewer.renderedElements.get(block as TableWidget).length === 0;\n // }\n // if (reLayoutItems) {\n // //Handle layouting the block.\n // viewer.updateClientAreaForBlock(block, true);\n // this.layoutMod.layoutBlock(block);\n // viewer.updateClientAreaForBlock(block, false);\n // } else {\n //Handled to check client area and shift layouted widget.\n this.shiftWidgetsBlock(block, viewer);\n //Updates the list value of the rendered paragraph.\n if (this.viewer.owner.editorModule) {\n this.viewer.owner.editorModule.updateRenderedListItems(block);\n }\n // }\n };\n Layout.prototype.shiftWidgetsBlock = function (block, viewer) {\n if (block instanceof ParagraphWidget) {\n this.shiftWidgetsForPara(block, viewer);\n }\n else if (block instanceof TableWidget) {\n this.shiftWidgetsForTable(block, viewer);\n }\n };\n Layout.prototype.shiftWidgetsForPara = function (paragraph, viewer) {\n var prevBodyObj = this.getBodyWidgetOfPreviousBlock(paragraph, 0);\n var prevBodyWidget = prevBodyObj.bodyWidget;\n var index = prevBodyObj.index;\n var prevWidget = undefined;\n for (var i = 0; i < paragraph.getSplitWidgets().length; i++) {\n var widget = paragraph.getSplitWidgets()[i];\n if (!isNullOrUndefined(prevWidget)) {\n this.shiftToPreviousWidget(widget, viewer, prevWidget);\n if (isNullOrUndefined(widget.childWidgets) || widget.childWidgets.length === 0) {\n i--;\n continue;\n }\n prevWidget = undefined;\n if (prevBodyWidget !== widget.containerWidget) {\n prevBodyWidget = widget.containerWidget;\n }\n }\n if (this.isFitInClientArea(widget, viewer)) {\n //Check whether this widget is moved to previous container widget.\n prevWidget = widget;\n widget.y = viewer.clientActiveArea.y;\n viewer.cutFromTop(viewer.clientActiveArea.y + widget.height);\n //Moves the paragraph widget to previous body widget.\n if (!isNullOrUndefined(prevBodyWidget) && prevBodyWidget !== widget.containerWidget) {\n index++;\n this.updateContainerWidget(widget, prevBodyWidget, index, true);\n }\n }\n else {\n var isSplittedToNewPage = this.splitWidget(widget, viewer, prevBodyWidget, index + 1);\n prevWidget = undefined;\n if (prevBodyWidget !== widget.containerWidget) {\n prevBodyWidget = widget.containerWidget;\n i--;\n }\n index = prevBodyWidget.childWidgets.indexOf(widget);\n if (isSplittedToNewPage) {\n prevBodyWidget = paragraph.getSplitWidgets()[i + 1].containerWidget;\n }\n }\n }\n };\n /**\n * @private\n */\n Layout.prototype.shiftTableWidget = function (table, viewer) {\n var tables = [table];\n this.addTableWidget(this.viewer.clientActiveArea, tables);\n this.viewer.updateClientAreaTopOrLeft(table, true);\n var row = table.childWidgets[0];\n while (row) {\n row = this.shiftRowWidget(tables, row);\n row = row.nextRow;\n }\n this.updateWidgetsToPage(tables, [], table);\n return tables[tables.length - 1];\n };\n /**\n * @private\n */\n Layout.prototype.shiftRowWidget = function (tables, row) {\n var viewer = this.viewer;\n var rows = [row];\n var widget = this.addTableRowWidget(viewer.clientActiveArea, rows);\n viewer.updateClientAreaForRow(row, true);\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cell = row.childWidgets[i];\n // tslint:disable-next-line:max-line-length\n this.shiftCellWidget(cell, this.getMaxTopOrBottomCellMargin(row, 0) + row.topBorderWidth, this.getMaxTopOrBottomCellMargin(row, 1) + row.bottomBorderWidth);\n }\n viewer.updateClientAreaForRow(row, false);\n this.updateWidgetsToTable(tables, rows, row);\n return rows[rows.length - 1];\n };\n /**\n * @private\n */\n Layout.prototype.shiftCellWidget = function (cell, maxCellMarginTop, maxCellMarginBottom) {\n var viewer = this.viewer;\n this.addTableCellWidget(cell, viewer.clientActiveArea, maxCellMarginTop, maxCellMarginBottom);\n viewer.updateClientAreaForCell(cell, true);\n for (var i = 0; i < cell.childWidgets.length; i++) {\n var block = cell.childWidgets[i];\n viewer.updateClientAreaForBlock(block, true);\n if (block instanceof ParagraphWidget) {\n this.shiftParagraphWidget(block);\n }\n else {\n this.shiftTableWidget(block, viewer);\n }\n viewer.updateClientAreaForBlock(block, false);\n }\n this.updateWidgetToRow(cell);\n viewer.updateClientAreaForCell(cell, false);\n };\n /**\n * @private\n */\n Layout.prototype.shiftParagraphWidget = function (paragraph) {\n this.addParagraphWidget(this.viewer.clientActiveArea, paragraph);\n this.viewer.cutFromTop(this.viewer.clientActiveArea.y + paragraph.height);\n this.updateWidgetToPage(this.viewer, paragraph);\n };\n Layout.prototype.shiftWidgetsForTable = function (table, viewer) {\n var prevObj = this.getBodyWidgetOfPreviousBlock(table, 0);\n var prevBodyWidget = prevObj.bodyWidget;\n var index = prevObj.index;\n if (prevBodyWidget !== table.containerWidget) {\n this.updateContainerWidget(table, prevBodyWidget, index + 1, true);\n }\n table.y = this.viewer.clientActiveArea.y;\n this.updateVerticalPositionToTop(table, true);\n var isPageLayout = viewer instanceof PageLayoutViewer;\n var combinedTable = table.combineWidget(this.viewer);\n this.viewer.layout.updateChildLocationForTable(combinedTable.y, combinedTable);\n this.clearTableWidget(combinedTable, true, false);\n this.shiftTableWidget(combinedTable, this.viewer);\n this.updateVerticalPositionToTop(table, false);\n };\n Layout.prototype.updateVerticalPositionToTop = function (table, isUpdateTop) {\n //Iterate the tableWidgets counts\n for (var i = 0; i < table.getSplitWidgets().length; i++) {\n var tablewidget = table.getSplitWidgets()[i];\n //Iterate the tableWidget child items\n for (var j = 0; j < tablewidget.childWidgets.length; j++) {\n var rowWidget = tablewidget.childWidgets[j];\n //Iterate the RowWidgets child items\n for (var k = 0; k < rowWidget.childWidgets.length; k++) {\n var cellWidget = rowWidget.childWidgets[k];\n //Iterate the RowWidgets child items\n this.viewer.layout.updateCellVerticalPosition(cellWidget, isUpdateTop, false);\n }\n }\n }\n };\n // tslint:disable-next-line:max-line-length\n Layout.prototype.splitWidget = function (paragraphWidget, viewer, previousBodyWidget, index) {\n var firstLine = paragraphWidget.childWidgets[0];\n var maxElementHeight = this.getMaxElementHeight(firstLine, viewer);\n var paragraphView = paragraphWidget.getSplitWidgets();\n var nextBodyWidget = paragraphWidget.containerWidget;\n if (viewer.clientActiveArea.height >= maxElementHeight) {\n var splittedWidget = undefined;\n var widgetIndex = paragraphView.indexOf(paragraphWidget);\n if (widgetIndex < (paragraphView.length - 1)) {\n splittedWidget = paragraphView[widgetIndex + 1];\n nextBodyWidget = splittedWidget.containerWidget;\n }\n else {\n splittedWidget = new ParagraphWidget();\n splittedWidget.index = paragraphWidget.index;\n splittedWidget.characterFormat = paragraphWidget.characterFormat;\n splittedWidget.paragraphFormat = paragraphWidget.paragraphFormat;\n splittedWidget.width = paragraphWidget.width;\n splittedWidget.x = paragraphWidget.x;\n splittedWidget.y = paragraphWidget.y;\n paragraphView.push(splittedWidget);\n }\n if (previousBodyWidget !== paragraphWidget.containerWidget) {\n this.updateContainerWidget(paragraphWidget, previousBodyWidget, index, true);\n }\n for (var i = paragraphWidget.childWidgets.length - 1; i > 0; i--) {\n if (this.isFitInClientArea(paragraphWidget, viewer)) {\n break;\n }\n else {\n var line = paragraphWidget.childWidgets[i];\n //Moves the line widget to next widget.\n this.updateParagraphWidgetInternal(line, splittedWidget, 0);\n }\n }\n if (isNullOrUndefined(splittedWidget.containerWidget) && splittedWidget.childWidgets.length > 0) {\n var y = viewer.clientActiveArea.y;\n // tslint:disable-next-line:max-line-length\n var clientArea = new Rect(viewer.clientArea.x, viewer.clientArea.y, viewer.clientArea.width, viewer.clientArea.height);\n var activeArea = new Rect(viewer.clientActiveArea.x, viewer.clientActiveArea.y, viewer.clientActiveArea.width, viewer.clientActiveArea.height);\n //Checks whether next node exists, else adds new page.\n nextBodyWidget = this.moveBlocksToNextPage(paragraphWidget);\n // nextBodyWidget = this.createOrGetNextBodyWidget(previousBodyWidget, viewer);\n nextBodyWidget.childWidgets.splice(0, 0, splittedWidget);\n nextBodyWidget.height += splittedWidget.height;\n splittedWidget.containerWidget = nextBodyWidget;\n if (nextBodyWidget.childWidgets.length === 1 && nextBodyWidget.firstChild instanceof ParagraphWidget &&\n nextBodyWidget.firstChild.equals(paragraphWidget)) {\n paragraphWidget.x = paragraphWidget.x;\n paragraphWidget.y = y;\n return true;\n }\n else {\n //Resetting Client area\n viewer.clientArea = clientArea;\n viewer.clientActiveArea = activeArea;\n }\n }\n }\n else {\n nextBodyWidget = this.createOrGetNextBodyWidget(previousBodyWidget, this.viewer);\n if (paragraphWidget.containerWidget !== nextBodyWidget) {\n nextBodyWidget = this.moveBlocksToNextPage(paragraphWidget);\n this.updateContainerWidget(paragraphWidget, nextBodyWidget, 0, true);\n }\n }\n if (previousBodyWidget === paragraphWidget.containerWidget) {\n paragraphWidget.y = viewer.clientActiveArea.y;\n viewer.cutFromTop(viewer.clientActiveArea.y + paragraphWidget.height);\n }\n else {\n //Updates client area based on next body widget.\n viewer.updateClientArea(nextBodyWidget.sectionFormat, nextBodyWidget.page);\n }\n return false;\n };\n Layout.prototype.getMaxElementHeight = function (lineWidget, viewer) {\n var height = 0;\n // tslint:disable-next-line:max-line-length\n if (lineWidget.children.length === 0 || ((lineWidget.children.length === 1 && lineWidget.children[0] instanceof ListTextElementBox) || (lineWidget.children.length === 2 && lineWidget.children[0] instanceof ListTextElementBox && lineWidget.children[1] instanceof ListTextElementBox))) {\n var topMargin = 0;\n var bottomMargin = 0;\n height = viewer.selection.getParagraphMarkSize(lineWidget.paragraph, topMargin, bottomMargin).height;\n height += topMargin;\n if (lineWidget.children.length > 0) {\n var element = lineWidget.children[0];\n if (height < element.margin.top + element.height) {\n height = element.margin.top + element.height;\n }\n }\n }\n else {\n for (var i = 0; i < lineWidget.children.length; i++) {\n var element = lineWidget.children[i];\n if (height < element.margin.top + element.height) {\n height = element.margin.top + element.height;\n }\n }\n }\n return height;\n };\n Layout.prototype.createOrGetNextBodyWidget = function (bodyWidget, viewer) {\n var nextBodyWidget = undefined;\n var pageIndex = 0;\n pageIndex = viewer.pages.indexOf(bodyWidget.page);\n var page = undefined;\n var index = undefined;\n index = bodyWidget.index;\n if (pageIndex === viewer.pages.length - 1\n || viewer.pages[pageIndex + 1].sectionIndex !== index) {\n var currentWidget = new BodyWidget();\n currentWidget.sectionFormat = bodyWidget.sectionFormat;\n currentWidget.index = bodyWidget.index;\n page = viewer.createNewPage(currentWidget);\n if (viewer.pages[pageIndex + 1].sectionIndex !== index) {\n viewer.insertPage(pageIndex + 1, page);\n }\n nextBodyWidget = page.bodyWidgets[0];\n }\n else {\n page = viewer.pages[pageIndex + 1];\n nextBodyWidget = page.bodyWidgets[0];\n }\n return nextBodyWidget;\n };\n Layout.prototype.isFitInClientArea = function (paragraphWidget, viewer) {\n var lastLine = paragraphWidget.childWidgets[paragraphWidget.childWidgets.length - 1];\n var height = paragraphWidget.height;\n var maxElementHeight = this.getMaxElementHeight(lastLine, viewer);\n if (lastLine.height > maxElementHeight) {\n height -= lastLine.height - maxElementHeight;\n }\n return viewer.clientActiveArea.height >= height;\n };\n // tslint:disable-next-line:max-line-length\n Layout.prototype.shiftToPreviousWidget = function (paragraphWidget, viewer, previousWidget) {\n for (var i = 0; i < paragraphWidget.childWidgets.length; i++) {\n var line = paragraphWidget.childWidgets[i];\n var maxElementHeight = this.getMaxElementHeight(line, viewer);\n if (viewer.clientActiveArea.height >= maxElementHeight) {\n //Moves the line widget to previous widget.\n this.updateParagraphWidgetInternal(line, previousWidget, previousWidget.childWidgets.length);\n i--;\n viewer.cutFromTop(viewer.clientActiveArea.y + line.height);\n if (isNullOrUndefined(paragraphWidget.childWidgets)) {\n break;\n }\n }\n else {\n var bodyWidget = previousWidget.containerWidget;\n var nextBodyWidget = this.createOrGetNextBodyWidget(bodyWidget, viewer);\n if (bodyWidget !== nextBodyWidget) {\n this.updateContainerWidget(paragraphWidget, nextBodyWidget, 0, true);\n }\n //Updates client area based on next page.\n viewer.updateClientArea(nextBodyWidget.sectionFormat, nextBodyWidget.page);\n break;\n }\n }\n };\n Layout.prototype.updateParagraphWidgetInternal = function (lineWidget, newParagraphWidget, index) {\n if (!isNullOrUndefined(lineWidget.paragraph)) {\n lineWidget.paragraph.childWidgets.splice(lineWidget.paragraph.childWidgets.indexOf(lineWidget), 1);\n lineWidget.paragraph.height -= lineWidget.height;\n if (!isNullOrUndefined(lineWidget.paragraph.containerWidget)) {\n lineWidget.paragraph.containerWidget.height -= lineWidget.height;\n }\n // tslint:disable-next-line:max-line-length\n if (isNullOrUndefined(lineWidget.paragraph.childWidgets) || lineWidget.paragraph.childWidgets.length === 0) {\n lineWidget.paragraph.destroyInternal(this.viewer);\n }\n }\n newParagraphWidget.childWidgets.splice(index, 0, lineWidget);\n lineWidget.paragraph = newParagraphWidget;\n newParagraphWidget.height += lineWidget.height;\n if (!isNullOrUndefined(newParagraphWidget.containerWidget)) {\n newParagraphWidget.containerWidget.height += lineWidget.height;\n }\n };\n Layout.prototype.shiftNextWidgets = function (blockAdv) {\n var block = blockAdv;\n while (block.nextWidget instanceof BlockWidget) {\n block = block.nextWidget;\n this.reLayoutOrShiftWidgets(block, this.viewer);\n }\n };\n Layout.prototype.updateContainerWidget = function (widget, bodyWidget, index, destroyAndScroll) {\n if (!isNullOrUndefined(widget.containerWidget)) {\n widget.containerWidget.childWidgets.splice(widget.containerWidget.childWidgets.indexOf(widget), 1);\n widget.containerWidget.height -= bodyWidget.height;\n if ((isNullOrUndefined(widget.containerWidget.childWidgets) || widget.containerWidget.childWidgets.length === 0)\n && widget.containerWidget instanceof BodyWidget && widget.containerWidget !== bodyWidget && destroyAndScroll) {\n var page = widget.containerWidget.page;\n if (this.viewer.pages[this.viewer.pages.length - 1] === page &&\n this.viewer.visiblePages.indexOf(page) !== -1) {\n this.viewer.scrollToBottom();\n }\n widget.containerWidget.destroyInternal(this.viewer);\n }\n }\n bodyWidget.childWidgets.splice(index, 0, widget);\n bodyWidget.height += bodyWidget.height;\n widget.containerWidget = bodyWidget;\n };\n Layout.prototype.getBodyWidgetOfPreviousBlock = function (block, index) {\n index = 0;\n var prevBodyWidget = undefined;\n var previousBlock = block.previousRenderedWidget;\n prevBodyWidget = previousBlock ? previousBlock.containerWidget : block.containerWidget;\n index = previousBlock ? prevBodyWidget.childWidgets.indexOf(previousBlock) : block.containerWidget.childWidgets.indexOf(block);\n return { bodyWidget: prevBodyWidget, index: index };\n };\n Layout.prototype.moveBlocksToNextPage = function (block) {\n var body = block.bodyWidget;\n var page = body.page;\n var pageIndex = page.index + 1;\n var nextPage = undefined;\n var nextBody = undefined;\n if (this.viewer.pages.length > pageIndex) {\n nextPage = this.viewer.pages[pageIndex];\n if (nextPage.bodyWidgets.length === 0 || !body.equals(nextPage.bodyWidgets[0])) {\n nextPage = undefined;\n }\n else {\n nextBody = nextPage.bodyWidgets[0];\n this.viewer.updateClientArea(nextBody.sectionFormat, nextBody.page);\n }\n }\n if (isNullOrUndefined(nextPage)) {\n nextBody = this.createSplitBody(body);\n nextPage = this.viewer.createNewPage(nextBody, pageIndex);\n }\n //tslint:disable :no-constant-condition\n do {\n var lastBlock = body.lastChild;\n if (block === lastBlock) {\n break;\n }\n body.childWidgets.pop();\n nextBody.childWidgets.splice(0, 0, lastBlock);\n lastBlock.containerWidget = nextBody;\n nextBody.height += lastBlock.height;\n } while (true);\n return nextBody;\n };\n Layout.prototype.createSplitBody = function (body) {\n var newBody = this.addBodyWidget(this.viewer.clientActiveArea);\n newBody.sectionFormat = body.sectionFormat;\n newBody.index = body.index;\n return newBody;\n };\n //endregion\n //#region Relayout Parargaph \n /**\n * Relayout Paragraph from specified line widget\n * @param paragraph Paragraph to reLayout\n * @param lineIndex start line index to reLayout\n * @private\n */\n Layout.prototype.reLayoutLine = function (paragraph, lineIndex) {\n if (this.viewer.owner.isDocumentLoaded && this.viewer.owner.editorModule) {\n this.viewer.owner.editorModule.updateWholeListItems(paragraph);\n }\n var lineWidget;\n if (paragraph.paragraphFormat.listFormat && paragraph.paragraphFormat.listFormat.listId !== -1) {\n lineWidget = paragraph.getSplitWidgets()[0].firstChild;\n }\n else {\n lineWidget = paragraph.childWidgets[lineIndex];\n }\n var lineToLayout = lineWidget.previousLine;\n if (isNullOrUndefined(lineToLayout)) {\n lineToLayout = lineWidget;\n }\n var currentParagraph = lineToLayout.paragraph;\n var bodyWidget = paragraph.containerWidget;\n bodyWidget.height -= paragraph.height;\n if (this.viewer.owner.enableHeaderAndFooter || paragraph.isInHeaderFooter) {\n // tslint:disable-next-line:max-line-length\n this.viewer.updateHCFClientAreaWithTop(paragraph.bodyWidget.sectionFormat, this.viewer.isBlockInHeader(paragraph), bodyWidget.page);\n }\n else {\n this.viewer.updateClientArea(bodyWidget.sectionFormat, bodyWidget.page);\n }\n this.viewer.updateClientAreaForBlock(paragraph, true);\n if (lineToLayout.paragraph.isEmpty()) {\n this.viewer.cutFromTop(paragraph.y);\n this.layoutParagraph(paragraph, 0);\n }\n else {\n this.updateClientAreaForLine(lineToLayout.paragraph, lineToLayout, 0);\n this.layoutListItems(lineToLayout.paragraph);\n if (lineToLayout.isFirstLine() && !isNullOrUndefined(paragraph.paragraphFormat)) {\n var firstLineIndent = -HelperMethods.convertPointToPixel(paragraph.paragraphFormat.firstLineIndent);\n this.viewer.updateClientWidth(firstLineIndent);\n }\n do {\n lineToLayout = this.layoutLine(lineToLayout, 0);\n paragraph = lineToLayout.paragraph;\n lineToLayout = lineToLayout.nextLine;\n } while (lineToLayout);\n this.updateWidgetToPage(this.viewer, paragraph);\n this.viewer.updateClientAreaForBlock(paragraph, false);\n }\n this.layoutNextItemsBlock(paragraph, this.viewer);\n };\n return Layout;\n}());\nexport { Layout };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Rect, ImageElementBox, ParagraphWidget, ListTextElementBox, TableRowWidget, TableWidget, TableCellWidget, FieldElementBox, TabElementBox } from './page';\nimport { Layout } from './layout';\nimport { HelperMethods } from '../editor/editor-helper';\n/**\n * @private\n */\nvar Renderer = /** @class */ (function () {\n function Renderer(viewer) {\n this.isPrinting = false;\n this.pageLeft = 0;\n this.pageTop = 0;\n this.isFieldCode = false;\n this.viewer = viewer;\n }\n Object.defineProperty(Renderer.prototype, \"pageCanvas\", {\n /**\n * Gets page canvas.\n * @private\n */\n get: function () {\n if (this.isPrinting) {\n if (isNullOrUndefined(this.pageCanvasIn)) {\n this.pageCanvasIn = document.createElement('canvas');\n this.pageCanvasIn.getContext('2d').save();\n }\n return this.pageCanvasIn;\n }\n return isNullOrUndefined(this.viewer) ? undefined : this.viewer.containerCanvas;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Renderer.prototype, \"selectionCanvas\", {\n /**\n * Gets selection canvas.\n */\n get: function () {\n return isNullOrUndefined(this.viewer) ? undefined : this.viewer.selectionCanvas;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Renderer.prototype, \"pageContext\", {\n /**\n * Gets page context.\n */\n get: function () {\n return this.pageCanvas.getContext('2d');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Renderer.prototype, \"selectionContext\", {\n /**\n * Gets selection context.\n */\n get: function () {\n return this.selectionCanvas.getContext('2d');\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Gets the color.\n */\n Renderer.prototype.getColor = function (color) {\n if (color.length > 0) {\n if (color[0] === '#') {\n if (color.length > 7) {\n return color.substr(0, 7);\n }\n }\n }\n return color;\n };\n /**\n * Renders widgets.\n * @param {Page} page\n * @param {number} left\n * @param {number} top\n * @param {number} width\n * @param {number} height\n * @private\n */\n Renderer.prototype.renderWidgets = function (page, left, top, width, height) {\n if (isNullOrUndefined(this.pageCanvas) || isNullOrUndefined(page)) {\n return;\n }\n this.pageContext.fillStyle = this.getColor(this.viewer.backgroundColor);\n this.pageContext.beginPath();\n this.pageContext.fillRect(left, top, width, height);\n this.pageContext.closePath();\n this.pageContext.strokeStyle = this.viewer.owner.pageOutline;\n this.pageContext.strokeRect(left, top, width, height);\n this.pageLeft = left;\n this.pageTop = top;\n if (this.isPrinting) {\n this.setPageSize(page);\n }\n else {\n this.pageContext.beginPath();\n this.pageContext.save();\n this.pageContext.rect(left, top, width, height);\n this.pageContext.clip();\n }\n if (page.headerWidget) {\n this.renderHFWidgets(page, page.headerWidget);\n }\n if (page.footerWidget) {\n this.renderHFWidgets(page, page.footerWidget);\n }\n for (var i = 0; i < page.bodyWidgets.length; i++) {\n this.render(page, page.bodyWidgets[i]);\n }\n if (this.viewer.owner.enableHeaderAndFooter && !this.isPrinting) {\n this.renderHeaderSeparator(page, this.pageLeft, this.pageTop, page.headerWidget);\n }\n this.pageLeft = 0;\n this.pageTop = 0;\n this.pageContext.restore();\n };\n /**\n * Sets page size.\n * @param {Page} page\n */\n Renderer.prototype.setPageSize = function (page) {\n this.pageContext.clearRect(0, 0, this.pageCanvas.width, this.pageCanvas.height);\n this.selectionContext.clearRect(0, 0, this.selectionCanvas.width, this.selectionCanvas.height);\n this.pageContext.restore();\n this.selectionContext.restore();\n var width = page.boundingRectangle.width;\n var height = page.boundingRectangle.height;\n var dpr = Math.max(1, window.devicePixelRatio || 1);\n if (this.pageCanvas.width !== width * dpr || this.pageCanvas.height !== height * dpr) {\n this.pageCanvas.height = height * dpr;\n this.pageCanvas.width = width * dpr;\n this.pageCanvas.style.height = height + 'px';\n this.pageCanvas.style.width = width + 'px';\n this.pageContext.globalAlpha = 1;\n this.pageContext.scale(dpr, dpr);\n }\n };\n /**\n * Renders header footer widget.\n * @param {Page} page\n * @param {HeaderFooterWidget} headFootWidget\n */\n Renderer.prototype.renderHFWidgets = function (page, headFootWidget) {\n this.pageContext.globalAlpha = this.viewer.owner.enableHeaderAndFooter ? 1 : 0.65;\n for (var i = 0; i < headFootWidget.childWidgets.length; i++) {\n var widget = headFootWidget.childWidgets[i];\n this.renderWidget(page, widget);\n }\n this.pageContext.globalAlpha = this.viewer.owner.enableHeaderAndFooter ? 0.65 : 1;\n };\n Renderer.prototype.renderHeaderSeparator = function (page, left, top, widget) {\n //Header Widget\n var topMargin = HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.topMargin);\n var y = this.getScaledValue(Math.max((widget.y + widget.height), topMargin));\n var pageWidth = this.getScaledValue(page.boundingRectangle.width);\n var ctx = this.pageContext;\n ctx.save();\n ctx.globalAlpha = 0.65;\n //Dash line Separator\n this.renderDashLine(ctx, left, top + y, pageWidth);\n var type = this.getHeaderFooterType(page, true);\n ctx.font = '9pt Arial';\n var width = ctx.measureText(type).width;\n this.renderHeaderFooterMark(ctx, left + 5, top + y, width + 10, 20);\n this.renderHeaderFooterMarkText(ctx, type, left + 10, y + top + 15);\n if (page.footerWidget) {\n //Footer Widget\n var footerDistance = HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.footerDistance);\n // tslint:disable-next-line:max-line-length\n var footerHeight = this.getScaledValue(page.boundingRectangle.height) -\n this.getScaledValue(Math.max(page.footerWidget.height + footerDistance, HelperMethods.convertPointToPixel(page.footerWidget.sectionFormat.bottomMargin)));\n this.renderDashLine(ctx, left, top + footerHeight, pageWidth);\n type = this.getHeaderFooterType(page, false);\n width = ctx.measureText(type).width;\n this.renderHeaderFooterMark(ctx, left + 5, top + footerHeight - 20, width + 10, 20);\n this.renderHeaderFooterMarkText(ctx, type, left + 10, top + footerHeight - 5);\n ctx.restore();\n }\n };\n Renderer.prototype.getHeaderFooterType = function (page, isHeader) {\n var type;\n type = isHeader ? 'Header' : 'Footer';\n if (page.bodyWidgets[0].sectionFormat.differentFirstPage && this.viewer.pages.indexOf(page) === 0) {\n type = isHeader ? 'First Page Header' : 'First Page Footer';\n }\n else if (page.bodyWidgets[0].sectionFormat.differentOddAndEvenPages) {\n if ((this.viewer.pages.indexOf(page) + 1) % 2 === 0) {\n type = isHeader ? 'Even Page Header' : 'Even Page Footer';\n }\n else {\n type = isHeader ? 'Odd Page Header' : 'Odd Page Footer';\n }\n }\n return type;\n };\n Renderer.prototype.renderDashLine = function (ctx, x, y, width) {\n ctx.beginPath();\n ctx.strokeStyle = '#000000';\n ctx.lineWidth = 1;\n ctx.setLineDash([6, 4]);\n ctx.moveTo(x, y);\n ctx.lineTo(x + width, y);\n ctx.stroke();\n ctx.setLineDash([]);\n ctx.closePath();\n };\n Renderer.prototype.renderHeaderFooterMark = function (ctx, x, y, w, h) {\n ctx.beginPath();\n ctx.fillStyle = 'lightgray';\n ctx.fillRect(x, y, w, h);\n ctx.strokeStyle = 'black';\n ctx.strokeRect(x, y, w, h);\n ctx.closePath();\n };\n Renderer.prototype.renderHeaderFooterMarkText = function (ctx, content, x, y) {\n ctx.beginPath();\n ctx.fillStyle = '#000000';\n ctx.textBaseline = 'alphabetic';\n ctx.fillText(content, x, y);\n ctx.closePath();\n };\n /**\n * Renders body widget.\n * @param {Page} page\n * @param {BodyWidget} bodyWidget\n */\n Renderer.prototype.render = function (page, bodyWidget) {\n for (var i = 0; i < bodyWidget.childWidgets.length; i++) {\n var widget = bodyWidget.childWidgets[i];\n if (i === 0 && bodyWidget.childWidgets[0] instanceof TableWidget && page.repeatHeaderRowTableWidget) {\n // tslint:disable-next-line:max-line-length\n this.renderHeader(page, widget, this.viewer.layout.getHeader(bodyWidget.childWidgets[0]));\n }\n this.renderWidget(page, widget);\n }\n };\n /**\n * Renders block widget.\n * @param {Page} page\n * @param {Widget} widget\n */\n Renderer.prototype.renderWidget = function (page, widget) {\n if (widget instanceof ParagraphWidget) {\n this.renderParagraphWidget(page, widget);\n }\n else {\n this.renderTableWidget(page, widget);\n }\n };\n /**\n * Renders header.\n * @param {Page} page\n * @param {TableWidget} widget\n * @param {WRow} header\n * @private\n */\n Renderer.prototype.renderHeader = function (page, widget, header) {\n if (isNullOrUndefined(header)) {\n return;\n }\n var top = page.viewer.clientArea.y;\n for (var i = 0; i <= header.rowIndex; i++) {\n if (header.ownerTable.getSplitWidgets()[0].childWidgets.length === 0) {\n return;\n }\n var row = header.ownerTable.getSplitWidgets()[0].childWidgets[0];\n var headerWidget = row.clone();\n headerWidget.containerWidget = row.containerWidget;\n // tslint:disable-next-line:max-line-length\n page.viewer.updateClientAreaLocation(headerWidget, new Rect(page.viewer.clientArea.x, top, headerWidget.width, headerWidget.height));\n page.viewer.layout.updateChildLocationForRow(top, headerWidget);\n var cell = undefined;\n //Renders table cell outline rectangle - Border and background color.\n for (var j = 0; j < headerWidget.childWidgets.length; j++) {\n cell = headerWidget.childWidgets[j];\n this.renderTableCellWidget(page, cell);\n }\n top += headerWidget.height;\n }\n if (widget.y !== top) {\n //this.Location.Y = top;\n page.viewer.layout.updateChildLocationForTable(top, widget);\n }\n };\n /**\n * Renders paragraph widget.\n * @param {Page} page\n * @param {ParagraphWidget} paraWidget\n */\n Renderer.prototype.renderParagraphWidget = function (page, paraWidget) {\n var top = paraWidget.y;\n var left = paraWidget.x;\n for (var i = 0; i < paraWidget.childWidgets.length; i++) {\n var widget = paraWidget.childWidgets[i];\n this.renderLine(widget, page, left, top);\n top += widget.height;\n }\n };\n /**\n * Renders table widget.\n * @param {Page} page\n * @param {TableWidget} tableWidget\n */\n Renderer.prototype.renderTableWidget = function (page, tableWidget) {\n for (var i = 0; i < tableWidget.childWidgets.length; i++) {\n var widget = tableWidget.childWidgets[i];\n this.renderTableRowWidget(page, widget);\n if (tableWidget.tableFormat.cellSpacing > 0) {\n this.renderTableOutline(tableWidget);\n }\n }\n };\n /**\n * Renders table row widget.\n * @param {Page} page\n * @param {Widget} rowWidget\n */\n Renderer.prototype.renderTableRowWidget = function (page, rowWidget) {\n for (var i = 0; i < rowWidget.childWidgets.length; i++) {\n var widget = rowWidget.childWidgets[i];\n this.renderTableCellWidget(page, widget);\n }\n };\n /**\n * Renders table cell widget.\n * @param {Page} page\n * @param {TableCellWidget} cellWidget\n */\n Renderer.prototype.renderTableCellWidget = function (page, cellWidget) {\n if (!this.isPrinting) {\n if (this.getScaledValue(cellWidget.y, 2) + cellWidget.height * this.viewer.zoomFactor < 0 ||\n this.getScaledValue(cellWidget.y, 2) > this.viewer.visibleBounds.height) {\n return;\n }\n }\n var widgetHeight = 0;\n if (!this.isPrinting && page.viewer.owner.selection && page.viewer.owner.selection.selectedWidgets.length > 0) {\n page.viewer.owner.selection.addSelectionHighlightTable(this.selectionContext, cellWidget);\n }\n this.renderTableCellOutline(page.viewer, cellWidget);\n for (var i = 0; i < cellWidget.childWidgets.length; i++) {\n var widget = cellWidget.childWidgets[i];\n var width = cellWidget.width + cellWidget.margin.left - cellWidget.leftBorderWidth;\n this.clipRect(cellWidget.x, cellWidget.y, this.getScaledValue(width), this.getScaledValue(cellWidget.height));\n this.renderWidget(page, widget);\n this.pageContext.restore();\n }\n };\n /**\n * Renders line widget.\n * @param {LineWidget} lineWidget\n * @param {Page} page\n * @param {number} left\n * @param {number} top\n */\n Renderer.prototype.renderLine = function (lineWidget, page, left, top) {\n if (!this.isPrinting && page.viewer.owner.selection && page.viewer.owner.selection.selectedWidgets.length > 0) {\n page.viewer.owner.selection.addSelectionHighlight(this.selectionContext, lineWidget, top);\n }\n if (lineWidget.isFirstLine()) {\n left += HelperMethods.convertPointToPixel(lineWidget.paragraph.paragraphFormat.firstLineIndent);\n }\n if (this.viewer.owner.optionsPaneModule) {\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(page.viewer.owner.optionsPaneModule.searchHighlighters) && page.viewer.owner.optionsPaneModule.searchHighlighters.containsKey(lineWidget)) {\n var widgetInfo = page.viewer.owner.optionsPaneModule.searchHighlighters.get(lineWidget);\n for (var i = 0; i < widgetInfo.length; i++) {\n this.pageContext.fillStyle = '#ffe97f';\n // tslint:disable-next-line:max-line-length\n this.pageContext.fillRect(this.getScaledValue(widgetInfo[i].left, 1), this.getScaledValue(top, 2), this.getScaledValue(widgetInfo[i].width), this.getScaledValue(lineWidget.height));\n }\n }\n }\n for (var i = 0; i < lineWidget.children.length; i++) {\n var elementBox = lineWidget.children[i];\n if (elementBox instanceof FieldElementBox || this.isFieldCode ||\n (elementBox.width === 0 && elementBox.height === 0)) {\n if (this.isFieldCode) {\n elementBox.width = 0;\n }\n left += elementBox.width + elementBox.margin.left;\n this.toSkipFieldCode(elementBox);\n continue;\n }\n var underlineY = this.getUnderlineYPosition(lineWidget);\n if (!this.isPrinting) {\n if (this.getScaledValue(top + elementBox.margin.top, 2) + elementBox.height * this.viewer.zoomFactor < 0 ||\n this.getScaledValue(top + elementBox.margin.top, 2) > this.viewer.visibleBounds.height) {\n left += elementBox.width + elementBox.margin.left;\n continue;\n }\n }\n if (elementBox instanceof ListTextElementBox) {\n this.renderListTextElementBox(elementBox, left, top, underlineY);\n }\n else if (elementBox instanceof ImageElementBox) {\n this.renderImageElementBox(elementBox, left, top, underlineY);\n }\n else {\n this.renderTextElementBox(elementBox, left, top, underlineY);\n }\n left += elementBox.width + elementBox.margin.left;\n }\n };\n Renderer.prototype.toSkipFieldCode = function (element) {\n if (element instanceof FieldElementBox) {\n if (element.fieldType === 0) {\n if ((!isNullOrUndefined(element.fieldEnd) || element.hasFieldEnd)) {\n this.isFieldCode = true;\n }\n }\n else if (element.fieldType === 2 || element.fieldType === 1) {\n this.isFieldCode = false;\n }\n }\n };\n /**\n * Gets underline y position.\n * @param {LineWidget} lineWidget\n */\n Renderer.prototype.getUnderlineYPosition = function (lineWidget) {\n var height = 0;\n var lineHeight = 0;\n for (var i = 0; i < lineWidget.children.length; i++) {\n if (lineWidget.children[i] instanceof FieldElementBox ||\n (lineWidget.children[i].width === 0 && lineWidget.children[i].height === 0)) {\n continue;\n }\n if (height < lineWidget.children[i].height + lineWidget.children[i].margin.top) {\n height = lineWidget.children[i].margin.top + lineWidget.children[i].height;\n lineHeight = lineWidget.children[i].height / 20;\n }\n }\n return height - 2 * lineHeight;\n };\n /**\n * Renders list element box\n * @param {ListTextElementBox} elementBox\n * @param {number} left\n * @param {number} top\n * @param {number} underlineY\n */\n Renderer.prototype.renderListTextElementBox = function (elementBox, left, top, underlineY) {\n var topMargin = elementBox.margin.top;\n var leftMargin = elementBox.margin.left;\n var format = elementBox.listLevel.characterFormat;\n var breakCharacterFormat = elementBox.line.paragraph.characterFormat;\n var color = format.fontColor === '#000000' ? breakCharacterFormat.fontColor : format.fontColor;\n this.pageContext.textBaseline = 'top';\n var bold = '';\n var italic = '';\n var fontFamily = format.fontFamily === 'Verdana' ? breakCharacterFormat.fontFamily : format.fontFamily;\n var fontSize = format.fontSize === 11 ? breakCharacterFormat.fontSize : format.fontSize;\n // tslint:disable-next-line:max-line-length\n var baselineAlignment = format.baselineAlignment === 'Normal' ? breakCharacterFormat.baselineAlignment : format.baselineAlignment;\n bold = format.bold ? 'bold' : breakCharacterFormat.bold ? 'bold' : '';\n italic = format.italic ? 'italic' : breakCharacterFormat.italic ? 'italic' : '';\n fontSize = fontSize === 0 ? 0.5 : fontSize / (baselineAlignment === 'Normal' ? 1 : 1.5);\n var strikethrough = format.strikethrough === 'None' ? breakCharacterFormat.strikethrough : format.strikethrough;\n var highlightColor = format.highlightColor === 'NoColor' ? breakCharacterFormat.highlightColor :\n format.highlightColor;\n if (highlightColor !== 'NoColor') {\n if (highlightColor.substring(0, 1) !== '#') {\n this.pageContext.fillStyle = HelperMethods.getHighlightColorCode(highlightColor);\n }\n else {\n this.pageContext.fillStyle = this.getColor(highlightColor);\n }\n // tslint:disable-next-line:max-line-length\n this.pageContext.fillRect(this.getScaledValue(left + leftMargin, 1), this.getScaledValue(top + topMargin, 2), this.getScaledValue(elementBox.width), this.getScaledValue(elementBox.height));\n }\n this.pageContext.font = bold + ' ' + italic + ' ' + fontSize * this.viewer.zoomFactor + 'pt' + ' ' + fontFamily;\n if (baselineAlignment === 'Subscript') {\n topMargin += elementBox.height - elementBox.height / 1.5;\n }\n this.pageContext.fillStyle = this.getColor(color);\n // tslint:disable-next-line:max-line-length\n this.pageContext.fillText(elementBox.text, this.getScaledValue(left + leftMargin, 1), this.getScaledValue(top + topMargin, 2), this.getScaledValue(elementBox.width));\n if (format.underline !== 'None' && !isNullOrUndefined(format.underline)) {\n this.renderUnderline(elementBox, left, top, underlineY, color, format.underline, baselineAlignment);\n }\n if (strikethrough !== 'None') {\n this.renderStrikeThrough(elementBox, left, top, format.strikethrough, color, baselineAlignment);\n }\n };\n /**\n * Renders text element box.\n * @param {TextElementBox} elementBox\n * @param {number} left\n * @param {number} top\n * @param {number} underlineY\n */\n // tslint:disable-next-line:max-line-length\n Renderer.prototype.renderTextElementBox = function (elementBox, left, top, underlineY) {\n var isHeightType = false;\n var containerWidget = elementBox.line.paragraph.containerWidget;\n if (containerWidget instanceof TableCellWidget) {\n isHeightType = (containerWidget.ownerRow.rowFormat.heightType === 'Exactly');\n }\n var topMargin = elementBox.margin.top;\n var leftMargin = elementBox.margin.left;\n if (isHeightType) {\n // tslint:disable-next-line:max-line-length\n this.clipRect(containerWidget.x, containerWidget.y, this.getScaledValue(containerWidget.width), this.getScaledValue(containerWidget.height));\n }\n var format = elementBox.characterFormat;\n if (format.highlightColor !== 'NoColor') {\n if (format.highlightColor.substring(0, 1) !== '#') {\n this.pageContext.fillStyle = HelperMethods.getHighlightColorCode(format.highlightColor);\n }\n else {\n this.pageContext.fillStyle = this.getColor(format.highlightColor);\n }\n // tslint:disable-next-line:max-line-length\n this.pageContext.fillRect(this.getScaledValue(left + leftMargin, 1), this.getScaledValue(top + topMargin, 2), this.getScaledValue(elementBox.width), this.getScaledValue(elementBox.height));\n }\n var color = format.fontColor;\n this.pageContext.textBaseline = 'top';\n var bold = '';\n var italic = '';\n var fontSize = 11;\n bold = format.bold ? 'bold' : '';\n italic = format.italic ? 'italic' : '';\n fontSize = format.fontSize === 0 ? 0.5 : format.fontSize / (format.baselineAlignment === 'Normal' ? 1 : 1.5);\n this.pageContext.font = bold + ' ' + italic + ' ' + fontSize * this.viewer.zoomFactor + 'pt' + ' ' + format.fontFamily;\n if (format.baselineAlignment === 'Subscript') {\n topMargin += elementBox.height - elementBox.height / 1.5;\n }\n this.pageContext.fillStyle = this.getColor(color);\n var scaledWidth = this.getScaledValue(elementBox.width);\n var text = elementBox.text;\n // tslint:disable-next-line:max-line-length\n if (elementBox instanceof TabElementBox) {\n var tabElement = elementBox;\n if (tabElement.tabText === '' && !isNullOrUndefined(tabElement.tabLeader) && tabElement.tabLeader !== 'None') {\n text = this.getTabLeader(elementBox);\n tabElement.tabText = text;\n }\n else if (tabElement.tabText !== '') {\n text = tabElement.tabText;\n }\n }\n // tslint:disable-next-line:max-line-length\n this.pageContext.fillText(text, this.getScaledValue(left + leftMargin, 1), this.getScaledValue(top + topMargin, 2), scaledWidth);\n if (format.underline !== 'None' && !isNullOrUndefined(format.underline)) {\n // tslint:disable-next-line:max-line-length\n this.renderUnderline(elementBox, left, top, underlineY, color, format.underline, format.baselineAlignment);\n }\n if (format.strikethrough !== 'None' && !isNullOrUndefined(format.strikethrough)) {\n this.renderStrikeThrough(elementBox, left, top, format.strikethrough, color, format.baselineAlignment);\n }\n if (isHeightType) {\n this.pageContext.restore();\n }\n };\n /**\n * Returns tab leader\n */\n Renderer.prototype.getTabLeader = function (elementBox) {\n var textWidth = 0;\n var tabString = this.getTabLeaderString(elementBox.tabLeader);\n var tabText = tabString;\n while (elementBox.width > textWidth) {\n textWidth = this.viewer.textHelper.getWidth(tabText, elementBox.characterFormat);\n tabText = tabText + tabString;\n }\n return tabText.slice(0, -1);\n };\n /**\n * Returns tab leader string.\n */\n Renderer.prototype.getTabLeaderString = function (tabLeader) {\n var tabString = '';\n switch (tabLeader) {\n case 'Dot':\n tabString = '.';\n break;\n case 'Hyphen':\n tabString = '-';\n break;\n case 'Underscore':\n tabString = '_';\n break;\n }\n return tabString;\n };\n /**\n * Clips the rectangle with specified position.\n * @param {number} xPos\n * @param {number} yPos\n * @param {number} width\n * @param {number} height\n */\n Renderer.prototype.clipRect = function (xPos, yPos, width, height) {\n this.pageContext.beginPath();\n this.pageContext.save();\n this.pageContext.rect(this.getScaledValue(xPos, 1), this.getScaledValue(yPos, 2), width, height);\n this.pageContext.clip();\n };\n /**\n * Renders underline.\n * @param {ElementBox} elementBox\n * @param {number} left\n * @param {number} top\n * @param {number} underlineY\n * @param {string} color\n * @param {Underline} underline\n * @param {BaselineAlignment} baselineAlignment\n */\n // tslint:disable-next-line:max-line-length\n Renderer.prototype.renderUnderline = function (elementBox, left, top, underlineY, color, underline, baselineAlignment) {\n var renderedHeight = elementBox.height / (baselineAlignment === 'Normal' ? 1 : 1.5);\n var topMargin = elementBox.margin.top;\n var underlineHeight = renderedHeight / 20;\n var y = 0;\n if (baselineAlignment === 'Subscript' || elementBox instanceof ListTextElementBox) {\n y = (renderedHeight - 2 * underlineHeight) + top;\n topMargin += elementBox.height - renderedHeight;\n y += topMargin > 0 ? topMargin : 0;\n }\n else {\n y = underlineY + top;\n }\n // tslint:disable-next-line:max-line-length\n this.pageContext.fillRect(this.getScaledValue(left + elementBox.margin.left, 1), this.getScaledValue(y, 2), this.getScaledValue(elementBox.width), this.getScaledValue(underlineHeight));\n };\n /**\n * Renders strike through.\n * @param {ElementBox} elementBox\n * @param {number} left\n * @param {number} top\n * @param {Strikethrough} strikethrough\n * @param {string} color\n * @param {BaselineAlignment} baselineAlignment\n */\n // tslint:disable-next-line:max-line-length\n Renderer.prototype.renderStrikeThrough = function (elementBox, left, top, strikethrough, color, baselineAlignment) {\n var renderedHeight = elementBox.height / (baselineAlignment === 'Normal' ? 1 : 1.5);\n var topMargin = elementBox.margin.top;\n if (baselineAlignment === 'Subscript') {\n topMargin += elementBox.height - renderedHeight;\n }\n top += topMargin > 0 ? topMargin : 0;\n var lineHeight = renderedHeight / 20;\n var y = (renderedHeight / 2) + (0.5 * lineHeight);\n var lineCount = 0;\n if (strikethrough === 'DoubleStrike') {\n y -= lineHeight;\n }\n while (lineCount < (strikethrough === 'DoubleStrike' ? 2 : 1)) {\n lineCount++;\n // tslint:disable-next-line:max-line-length\n this.pageContext.fillRect(this.getScaledValue(left + elementBox.margin.left, 1), this.getScaledValue(y + top, 2), this.getScaledValue(elementBox.width), this.getScaledValue(lineHeight));\n y += 2 * lineHeight;\n }\n };\n /**\n * Renders image element box.\n * @param {ImageElementBox} elementBox\n * @param {number} left\n * @param {number} top\n * @param {number} underlineY\n */\n // tslint:disable-next-line:max-line-length\n Renderer.prototype.renderImageElementBox = function (elementBox, left, top, underlineY) {\n var topMargin = elementBox.margin.top;\n var leftMargin = elementBox.margin.left;\n var color = 'black';\n this.pageContext.textBaseline = 'top';\n var widgetWidth = 0;\n var isClipped = false;\n if (topMargin < 0 || elementBox.line.paragraph.width < elementBox.width) {\n var containerWid = elementBox.line.paragraph.containerWidget;\n // if (containerWid instanceof BodyWidget) {\n // widgetWidth = containerWid.width + containerWid.x;\n // } else \n if (containerWid instanceof TableCellWidget) {\n var leftIndent = 0;\n if (containerWid.childWidgets[0] instanceof ParagraphWidget) {\n var paraAdv = containerWid.childWidgets[0];\n leftIndent = paraAdv.paragraphFormat.leftIndent;\n }\n widgetWidth = containerWid.width + containerWid.margin.left - containerWid.leftBorderWidth - leftIndent;\n isClipped = true;\n // tslint:disable-next-line:max-line-length\n this.clipRect(left + leftMargin, top + topMargin, this.getScaledValue(widgetWidth), this.getScaledValue(containerWid.height));\n }\n }\n if (elementBox.isMetaFile) {\n /* tslint:disable:no-empty */\n }\n else {\n // tslint:disable-next-line:max-line-length\n this.pageContext.drawImage(elementBox.element, this.getScaledValue(left + leftMargin, 1), this.getScaledValue(top + topMargin, 2), this.getScaledValue(elementBox.width), this.getScaledValue(elementBox.height));\n }\n if (isClipped) {\n this.pageContext.restore();\n }\n };\n /**\n * Renders table outline.\n * @param {TableWidget} tableWidget\n */\n Renderer.prototype.renderTableOutline = function (tableWidget) {\n var layout = new Layout(this.viewer);\n var table = tableWidget;\n tableWidget.width = this.viewer.layout.getTableWidth(table);\n var border = layout.getTableTopBorder(table.tableFormat.borders);\n var lineWidth = 0;\n //ToDo: Need to draw the borders based on the line style.\n // if (!isNullOrUndefined(border )) {\n lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth());\n // tslint:disable-next-line:max-line-length\n this.renderSingleBorder(border, tableWidget.x - tableWidget.margin.left - lineWidth / 2, tableWidget.y, tableWidget.x - tableWidget.margin.left - lineWidth / 2, tableWidget.y + tableWidget.height, lineWidth);\n // }\n border = layout.getTableTopBorder(table.tableFormat.borders);\n lineWidth = 0;\n // if (!isNullOrUndefined(border )) {\n lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth());\n // tslint:disable-next-line:max-line-length\n this.renderSingleBorder(border, tableWidget.x - tableWidget.margin.left - lineWidth, tableWidget.y - lineWidth / 2, tableWidget.x + tableWidget.width + lineWidth + tableWidget.margin.right, tableWidget.y - lineWidth / 2, lineWidth);\n // }\n border = layout.getTableRightBorder(table.tableFormat.borders);\n lineWidth = 0;\n // if (!isNullOrUndefined(border )) {\n lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth());\n // tslint:disable-next-line:max-line-length\n this.renderSingleBorder(border, tableWidget.x + tableWidget.width + tableWidget.margin.right + lineWidth / 2, tableWidget.y, tableWidget.x + tableWidget.width + tableWidget.margin.right + lineWidth / 2, tableWidget.y + tableWidget.height, lineWidth);\n // }\n border = layout.getTableBottomBorder(table.tableFormat.borders);\n lineWidth = 0;\n // if (!isNullOrUndefined(border )) {\n lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth());\n // tslint:disable-next-line:max-line-length\n this.renderSingleBorder(border, tableWidget.x - tableWidget.margin.left - lineWidth, tableWidget.y + tableWidget.height - lineWidth / 2, tableWidget.x + tableWidget.width + lineWidth + tableWidget.margin.right, tableWidget.y + tableWidget.height - lineWidth / 2, lineWidth);\n // }\n };\n /**\n * Renders table cell outline.\n * @param {LayoutViewer} viewer\n * @param {TableCellWidget} cellWidget\n */\n Renderer.prototype.renderTableCellOutline = function (viewer, cellWidget) {\n var layout = viewer.layout;\n var borders = undefined;\n var tableCell = cellWidget;\n var cellTopMargin = 0;\n var cellBottomMargin = 0;\n var cellLeftMargin = 0;\n var cellRightMargin = 0;\n var height = 0;\n borders = tableCell.cellFormat.borders;\n if (cellWidget.containerWidget instanceof TableRowWidget) {\n cellBottomMargin = cellWidget.margin.bottom - cellWidget.containerWidget.bottomBorderWidth;\n cellTopMargin = cellWidget.margin.top - cellWidget.containerWidget.topBorderWidth;\n }\n cellLeftMargin = cellWidget.margin.left - cellWidget.leftBorderWidth;\n cellRightMargin = cellWidget.margin.right - cellWidget.rightBorderWidth;\n if (!isNullOrUndefined(tableCell.ownerRow) && tableCell.ownerRow.rowFormat.heightType === 'Exactly') {\n height = HelperMethods.convertPointToPixel(tableCell.ownerRow.rowFormat.height) + cellTopMargin + cellBottomMargin;\n }\n else {\n if (!isNullOrUndefined(tableCell.ownerRow) && [tableCell.ownerRow].length <= 1) {\n // tslint:disable-next-line:max-line-length\n height = Math.max(HelperMethods.convertPointToPixel(tableCell.ownerRow.rowFormat.height), cellWidget.height) + cellTopMargin + cellBottomMargin;\n }\n else {\n height = cellWidget.height + cellTopMargin + cellBottomMargin;\n }\n }\n this.renderCellBackground(height, cellWidget);\n var border = TableCellWidget.getCellLeftBorder(tableCell);\n var lineWidth = 0;\n // if (!isNullOrUndefined(border )) { \n lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth()); //Renders the cell left border.\n // tslint:disable-next-line:max-line-length\n this.renderSingleBorder(border, cellWidget.x - cellLeftMargin - lineWidth, cellWidget.y - cellTopMargin, cellWidget.x - cellLeftMargin - lineWidth, cellWidget.y + cellWidget.height + cellBottomMargin, lineWidth);\n // }\n border = TableCellWidget.getCellTopBorder(tableCell);\n // if (!isNullOrUndefined(border )) { //Renders the cell top border. \n lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth());\n // tslint:disable-next-line:max-line-length\n this.renderSingleBorder(border, cellWidget.x - cellWidget.margin.left, cellWidget.y - cellWidget.margin.top + lineWidth / 2, cellWidget.x + cellWidget.width + cellWidget.margin.right, cellWidget.y - cellWidget.margin.top + lineWidth / 2, lineWidth);\n // }\n if (tableCell.ownerTable.tableFormat.cellSpacing > 0 || tableCell.cellIndex === tableCell.ownerRow.childWidgets.length - 1) {\n border = TableCellWidget.getCellRightBorder(tableCell);\n // if (!isNullOrUndefined(border )) { //Renders the cell right border. \n lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth());\n // tslint:disable-next-line:max-line-length\n this.renderSingleBorder(border, cellWidget.x + cellWidget.width + cellWidget.margin.right - lineWidth / 2, cellWidget.y - cellTopMargin, cellWidget.x + cellWidget.width + cellWidget.margin.right - lineWidth / 2, cellWidget.y + cellWidget.height + cellBottomMargin, lineWidth);\n // }\n }\n var nextRow = tableCell.ownerRow.nextWidget;\n //Specifies the next row is within the current table widget.\n //True means current row is not rendered at page end; Otherwise False.\n var nextRowIsInCurrentTableWidget = false;\n if (!isNullOrUndefined(nextRow)) {\n var nextRowWidget = undefined;\n // if (viewer.renderedElements.containsKey(nextRow) && viewer.renderedElements.get(nextRow).length > 0) {\n nextRowWidget = nextRow;\n // }\n if (nextRowWidget instanceof TableRowWidget) {\n // tslint:disable-next-line:max-line-length\n if (cellWidget.containerWidget instanceof TableRowWidget && cellWidget.containerWidget.containerWidget instanceof TableWidget) {\n nextRowIsInCurrentTableWidget = cellWidget.containerWidget.containerWidget.childWidgets.indexOf(nextRowWidget) !== -1;\n }\n }\n }\n if (tableCell.ownerTable.tableFormat.cellSpacing > 0 || tableCell.ownerRow.rowIndex === tableCell.ownerTable.childWidgets.length - 1\n || (tableCell.cellFormat.rowSpan > 1\n && tableCell.ownerRow.rowIndex + tableCell.cellFormat.rowSpan === tableCell.ownerTable.childWidgets.length) ||\n !nextRowIsInCurrentTableWidget) {\n // tslint:disable-next-line:max-line-length\n border = (tableCell.cellFormat.rowSpan > 1 && tableCell.ownerRow.rowIndex + tableCell.cellFormat.rowSpan === tableCell.ownerTable.childWidgets.length) ?\n //true part for vertically merged cells specifically.\n tableCell.getBorderBasedOnPriority(tableCell.cellFormat.borders.bottom, TableCellWidget.getCellBottomBorder(tableCell))\n //false part for remaining cases that has been handled inside method. \n : TableCellWidget.getCellBottomBorder(tableCell);\n // if (!isNullOrUndefined(border )) {\n //Renders the cell bottom border.\n lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth());\n // tslint:disable-next-line:max-line-length\n this.renderSingleBorder(border, cellWidget.x - cellWidget.margin.left, cellWidget.y + cellWidget.height + cellBottomMargin + lineWidth / 2, cellWidget.x + cellWidget.width + cellWidget.margin.right, cellWidget.y + cellWidget.height + cellBottomMargin + lineWidth / 2, lineWidth);\n // }\n }\n border = layout.getCellDiagonalUpBorder(tableCell);\n // if (!isNullOrUndefined(border )) {\n //Renders the cell diagonal up border.\n lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth());\n if (lineWidth > 0) {\n // tslint:disable-next-line:max-line-length\n this.renderSingleBorder(border, cellWidget.x - cellLeftMargin, cellWidget.y + cellWidget.height + cellBottomMargin, cellWidget.x + cellWidget.width + cellRightMargin, cellWidget.y - cellTopMargin, lineWidth);\n // }\n }\n border = layout.getCellDiagonalDownBorder(tableCell);\n // if (!isNullOrUndefined(border )) {\n //Renders the cell diagonal down border.\n lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth());\n if (lineWidth > 0) {\n // tslint:disable-next-line:max-line-length\n this.renderSingleBorder(border, cellWidget.x - cellLeftMargin, cellWidget.y - cellTopMargin, cellWidget.x + cellWidget.width + cellRightMargin, cellWidget.y + cellWidget.height + cellBottomMargin, lineWidth);\n }\n // }\n };\n /**\n * Renders cell background.\n * @param {number} height\n * @param {TableCellWidget} cellWidget\n */\n Renderer.prototype.renderCellBackground = function (height, cellWidget) {\n var cellFormat = cellWidget.cellFormat;\n var bgColor = cellFormat.shading.backgroundColor === '#ffffff' ?\n cellWidget.ownerTable.tableFormat.shading.backgroundColor : cellFormat.shading.backgroundColor;\n this.pageContext.beginPath();\n if (bgColor !== 'empty') {\n this.pageContext.fillStyle = this.getColor(bgColor);\n var left = cellWidget.x - cellWidget.margin.left + cellWidget.leftBorderWidth;\n var top_1 = cellWidget.y - HelperMethods.convertPointToPixel(cellWidget.topMargin);\n // tslint:disable-next-line:max-line-length\n var width = cellWidget.width + cellWidget.margin.left + cellWidget.margin.right - cellWidget.leftBorderWidth - cellWidget.rightBorderWidth;\n // tslint:disable-next-line:max-line-length\n this.pageContext.fillRect(this.getScaledValue(left, 1), this.getScaledValue(top_1, 2), this.getScaledValue(width), this.getScaledValue(height));\n this.pageContext.closePath();\n }\n };\n /**\n * Renders single border.\n * @param {WBorder} border\n * @param {number} startX\n * @param {number} startY\n * @param {number} endX\n * @param {number} endY\n * @param {number} lineWidth\n */\n // tslint:disable-next-line:max-line-length\n Renderer.prototype.renderSingleBorder = function (border, startX, startY, endX, endY, lineWidth) {\n this.pageContext.beginPath();\n this.pageContext.moveTo(this.getScaledValue(startX, 1), this.getScaledValue(startY, 2));\n this.pageContext.lineTo(this.getScaledValue(endX, 1), this.getScaledValue(endY, 2));\n this.pageContext.lineWidth = this.getScaledValue(lineWidth);\n // set line color\n this.pageContext.strokeStyle = border.color;\n if (lineWidth > 0) {\n this.pageContext.stroke();\n }\n this.pageContext.closePath();\n };\n /**\n * Gets scaled value.\n * @param {number} value\n * @param {number} type\n * @private\n */\n Renderer.prototype.getScaledValue = function (value, type) {\n if (this.isPrinting) {\n return value;\n }\n if (isNullOrUndefined(type)) {\n type = 0;\n }\n var x = value * this.viewer.zoomFactor;\n return x + (type === 1 ? this.pageLeft : (type === 2 ? this.pageTop : 0));\n };\n /**\n * Destroys the internal objects which is maintained.\n */\n Renderer.prototype.destroy = function () {\n this.viewer = undefined;\n if (!isNullOrUndefined(this.pageCanvasIn)) {\n this.pageCanvasIn.innerHTML = '';\n }\n this.pageCanvasIn = undefined;\n };\n return Renderer;\n}());\nexport { Renderer };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { WCharacterFormat } from '../index';\nimport { HelperMethods } from '../editor/editor-helper';\n/**\n * @private\n */\nvar TextHelper = /** @class */ (function () {\n function TextHelper(viewer) {\n this.owner = viewer;\n if (!isNullOrUndefined(viewer)) {\n this.context = viewer.containerContext;\n }\n }\n Object.defineProperty(TextHelper.prototype, \"paragraphMark\", {\n get: function () {\n return '¶';\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextHelper.prototype, \"lineBreakMark\", {\n get: function () {\n return '↲';\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n TextHelper.prototype.getParagraphMarkWidth = function (characterFormat) {\n return this.getWidth(this.paragraphMark, characterFormat);\n };\n /**\n * @private\n */\n TextHelper.prototype.getParagraphMarkSize = function (characterFormat) {\n // Gets the text element's width;\n var width = this.getWidth(this.paragraphMark, characterFormat);\n var height = 0;\n var baselineOffset = 0;\n // Calculate the text element's height and baseline offset.\n var textHelper = this.getHeight(characterFormat);\n return {\n 'Width': width, 'Height': textHelper.Height, 'BaselineOffset': textHelper.BaselineOffset\n };\n };\n /**\n * @private\n */\n TextHelper.prototype.getTextSize = function (elementBox, characterFormat) {\n // Gets the text element's width;\n var textTrimEndWidth = 0;\n textTrimEndWidth = this.getWidth(elementBox.text, characterFormat);\n elementBox.width = textTrimEndWidth;\n // Calculate the text element's height and baseline offset.\n var textHelper = this.getHeight(characterFormat);\n elementBox.height = textHelper.Height;\n elementBox.baselineOffset = textHelper.BaselineOffset;\n if (elementBox.text[elementBox.text.length - 1] === ' ') {\n textTrimEndWidth = this.getWidth(HelperMethods.trimEnd(elementBox.text), characterFormat);\n }\n return textTrimEndWidth;\n };\n /**\n * @private\n */\n TextHelper.prototype.getHeight = function (characterFormat) {\n // Get character format property as below predefined structure to make it easy to check and retrieve\n // Predefined static structure `[FontName];[FontSize];bold;italic` to maintain as key in the collection \n var key = this.getFormatText(characterFormat);\n if (!isNullOrUndefined(this.owner.heightInfoCollection[key])) {\n return this.owner.heightInfoCollection[key];\n }\n var sizeInfo = this.getHeightInternal(characterFormat);\n this.owner.heightInfoCollection[key] = sizeInfo;\n return sizeInfo;\n };\n /**\n * @private\n */\n TextHelper.prototype.getFormatText = function (characterFormat) {\n var formatText = characterFormat.fontFamily.toLocaleLowerCase();\n formatText += ';' + characterFormat.fontSize;\n if (characterFormat.bold) {\n formatText += ';' + 'bold';\n }\n if (characterFormat.italic) {\n formatText += ';' + 'italic';\n }\n return formatText;\n };\n /**\n * @private\n */\n TextHelper.prototype.getHeightInternal = function (characterFormat) {\n var textHeight = 0;\n var baselineOffset = 0;\n var spanElement = document.createElement('span');\n spanElement.id = 'tempSpan';\n spanElement.style.whiteSpace = 'nowrap';\n spanElement.innerText = 'm';\n this.applyStyle(spanElement, characterFormat);\n var body = document.getElementsByTagName('body');\n var parentDiv = document.createElement('div');\n parentDiv.style.display = 'inline-block';\n var tempDiv = document.createElement('div');\n tempDiv.setAttribute('style', 'display:inline-block;width: 1px; height: 0px;vertical-align: baseline;');\n parentDiv.appendChild(spanElement);\n parentDiv.appendChild(tempDiv);\n document.body.appendChild(parentDiv);\n // Sets the text element's height.\n textHeight = spanElement.offsetHeight;\n // Calculate the text element's baseline offset.\n var textTopVal = spanElement.offsetTop;\n var tempDivTopVal = tempDiv.offsetTop;\n baselineOffset = tempDivTopVal - textTopVal;\n document.body.removeChild(parentDiv);\n return { 'Height': textHeight, 'BaselineOffset': baselineOffset };\n };\n /**\n * @private\n */\n TextHelper.prototype.measureTextExcludingSpaceAtEnd = function (text, characterFormat) {\n return this.getWidth(HelperMethods.trimEnd(text), characterFormat);\n };\n /**\n * @private\n */\n TextHelper.prototype.getWidth = function (text, characterFormat) {\n if (text.match('\\v')) {\n text.replace('\\v', this.lineBreakMark);\n }\n var bold = '';\n var italic = '';\n var fontFamily = '';\n var fontSize = characterFormat.fontSize;\n bold = characterFormat.bold ? 'bold' : '';\n italic = characterFormat.italic ? 'italic' : '';\n fontFamily = characterFormat.fontFamily;\n fontSize = fontSize === 0 ? 0.5 : fontSize / (characterFormat.baselineAlignment === 'Normal' ? 1 : 1.5);\n this.context.font = bold + ' ' + italic + ' ' + fontSize + 'pt' + ' ' + fontFamily;\n return this.context.measureText(text).width;\n };\n /**\n * @private\n */\n TextHelper.prototype.applyStyle = function (spanElement, characterFormat) {\n if (!isNullOrUndefined(spanElement) && !isNullOrUndefined(characterFormat)) {\n if (characterFormat.fontFamily !== '') {\n spanElement.style.fontFamily = characterFormat.fontFamily;\n }\n var fontSize = characterFormat.fontSize;\n if (fontSize <= 0.5) {\n fontSize = 0.5;\n }\n spanElement.style.fontSize = fontSize.toString() + 'pt';\n if (characterFormat.bold) {\n spanElement.style.fontWeight = 'bold';\n }\n if (characterFormat.italic) {\n spanElement.style.fontStyle = 'italic';\n }\n }\n };\n /**\n * @private\n */\n TextHelper.prototype.measureText = function (text, characterFormat) {\n // Gets the text element's width;\n var width = this.getWidth(text, characterFormat);\n var height = 0;\n var baselineOffset = 0;\n // Calculate the text element's height and baseline offset.\n var textHelper = this.getHeight(characterFormat);\n return {\n 'Width': width, 'Height': textHelper.Height, 'BaselineOffset': textHelper.BaselineOffset\n };\n };\n /**\n * @private\n */\n TextHelper.prototype.updateTextSize = function (elementBox, paragraph) {\n var format = new WCharacterFormat(undefined);\n var listCharacterFormat = elementBox.listLevel.characterFormat;\n var breakCharacterFormat = paragraph.characterFormat;\n format.fontSize = listCharacterFormat.fontSize === 11 ? breakCharacterFormat.fontSize : listCharacterFormat.fontSize;\n format.fontFamily = listCharacterFormat.fontFamily === 'Verdana' ? breakCharacterFormat.fontFamily\n : listCharacterFormat.fontFamily;\n var bold = '';\n var italic = '';\n var baselineAlignment = listCharacterFormat.baselineAlignment === 'Normal' ?\n breakCharacterFormat.baselineAlignment : listCharacterFormat.baselineAlignment;\n bold = listCharacterFormat.bold ? 'bold' : breakCharacterFormat.bold ? 'bold' : '';\n italic = listCharacterFormat.italic ? 'italic' : breakCharacterFormat.italic ? 'italic' : '';\n format.baselineAlignment = baselineAlignment;\n if (bold) {\n format.bold = true;\n }\n if (italic) {\n format.italic = true;\n }\n elementBox.width = this.getWidth(elementBox.text, format);\n // Calculate the text element's height and baseline offset.\n var textHelper = this.getHeight(format);\n elementBox.height = textHelper.Height;\n elementBox.baselineOffset = textHelper.BaselineOffset;\n };\n TextHelper.prototype.destroy = function () {\n this.owner = undefined;\n this.context = undefined;\n };\n return TextHelper;\n}());\nexport { TextHelper };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar Zoom = /** @class */ (function () {\n function Zoom(viewer) {\n var _this = this;\n this.onMouseWheelInternal = function (event) {\n if (event.ctrlKey === true) {\n event.preventDefault();\n var pageX = event.pageX - _this.viewer.viewerContainer.offsetLeft;\n if (pageX < _this.viewer.pageContainer.offsetWidth) {\n var wheel = navigator.userAgent.match('Firefox') ? event.detail < 0 : event.wheelDelta > 0;\n var zoomFactor = _this.viewer.zoomFactor;\n if (wheel) {\n if (zoomFactor <= 4.90) {\n zoomFactor += .10;\n }\n else {\n zoomFactor = 5.00;\n }\n }\n else {\n if (zoomFactor >= .20) {\n zoomFactor -= .10;\n }\n else {\n zoomFactor = 0.10;\n }\n }\n _this.viewer.zoomFactor = zoomFactor;\n }\n }\n };\n this.viewer = viewer;\n }\n Zoom.prototype.setZoomFactor = function (value) {\n this.onZoomFactorChanged();\n if (!isNullOrUndefined(this.viewer.selection)) {\n this.viewer.selection.updateCaretPosition();\n }\n this.viewer.updateTouchMarkPosition();\n if (!isNullOrUndefined(this.viewer.owner.imageResizerModule)) {\n this.viewer.owner.imageResizerModule.updateImageResizerPosition();\n }\n this.viewer.owner.fireZoomFactorChange();\n };\n //Zoom Implementation Starts\n Zoom.prototype.onZoomFactorChanged = function () {\n if (this.viewer.zoomFactor > 5) {\n this.viewer.zoomFactor = 5;\n }\n else if (this.viewer.zoomFactor < 0.1) {\n this.viewer.zoomFactor = 0.1;\n }\n this.zoom();\n };\n Zoom.prototype.zoom = function () {\n var viewer = this.viewer;\n viewer.clearContent();\n viewer.handleZoom();\n viewer.updateFocus();\n };\n return Zoom;\n}());\nexport { Zoom };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Dictionary } from '../../base/dictionary';\nimport { WAbstractList } from '../list/abstract-list';\nimport { WLevelOverride } from '../list/level-override';\nimport { WCharacterFormat, WParagraphFormat, WStyles } from '../format/index';\nimport { Layout } from './layout';\nimport { Renderer } from './render';\nimport { createElement, Browser } from '@syncfusion/ej2-base';\nimport { Page, Rect, ListTextElementBox, ParagraphWidget, HeaderFooterWidget } from './page';\nimport { LineWidget, TableWidget } from './page';\nimport { HelperMethods, Point } from '../editor/editor-helper';\nimport { TextHelper } from './text-helper';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Zoom } from './zooming';\nimport { Dialog } from '@syncfusion/ej2-popups';\n/**\n * @private\n */\nvar LayoutViewer = /** @class */ (function () {\n //#endregion\n function LayoutViewer(owner) {\n var _this = this;\n /**\n * @private\n */\n this.textWrap = true;\n /**\n * @private\n */\n this.currentPage = undefined;\n this.selectionStartPageIn = undefined;\n this.selectionEndPageIn = undefined;\n /**\n * @private\n */\n this.fieldStacks = [];\n /**\n * @private\n */\n this.splittedCellWidgets = [];\n /**\n * @private\n */\n this.tableLefts = [];\n this.tapCount = 0;\n this.timer = -1;\n this.isTimerStarted = false;\n /**\n * @private\n */\n this.isFirstLineFitInShiftWidgets = false;\n /**\n * @private\n */\n this.preZoomFactor = 0;\n /**\n * @private\n */\n this.preDifference = -1;\n /**\n * @private\n */\n this.fieldEndParagraph = undefined;\n /**\n * @private\n */\n this.fieldToLayout = undefined;\n /**\n * @private\n */\n this.backgroundColor = '#FFFFFF';\n /**\n * @private\n */\n this.containerTop = 0;\n /**\n * @private\n */\n this.containerLeft = 0;\n // Event \n /**\n * @private\n */\n this.isMouseDown = false;\n /**\n * @private\n */\n this.isSelectionChangedOnMouseMoved = false;\n /**\n * @private\n */\n this.isControlPressed = false;\n /**\n * @private\n */\n this.isTouchInput = false;\n /**\n * @private\n */\n this.useTouchSelectionMark = false;\n /**\n * @private\n */\n this.touchDownOnSelectionMark = 0;\n /**\n * @private\n */\n this.isCompositionStart = false;\n /**\n * @private\n */\n this.isCompositionUpdated = false;\n /**\n * @private\n */\n this.isCompositionCanceled = false;\n /**\n * @private\n */\n this.isCompositionEnd = false;\n /**\n * @private\n */\n this.prefix = '';\n /**\n * @private\n */\n this.suffix = '';\n /**\n * @private\n */\n this.fields = [];\n /**\n * @private\n */\n this.heightInfoCollection = {};\n /**\n * @private\n */\n this.defaultTabWidth = 36;\n /**\n * @private\n */\n this.lists = [];\n /**\n * @private\n */\n this.abstractLists = [];\n /**\n * @private\n */\n this.styles = new WStyles();\n /**\n * @private\n */\n this.preDefinedStyles = undefined;\n /**\n * @private\n */\n this.isRowOrCellResizing = false;\n this.isMouseDownInFooterRegion = false;\n this.pageFitTypeIn = 'None';\n /**\n * @private\n */\n this.fieldCollection = [];\n /**\n * @private\n */\n this.isPageField = false;\n /**\n * @private\n */\n this.mouseDownOffset = new Point(0, 0);\n this.zoomFactorInternal = 1;\n /**\n * Fires when composition starts.\n * @private\n */\n this.compositionStart = function (event) {\n event.preventDefault();\n _this.isCompositionStart = true;\n };\n /**\n * Fires on every input during composition.\n * @private\n */\n this.compositionUpdated = function (event) {\n event.preventDefault();\n _this.isCompositionUpdated = true;\n };\n /**\n * Fires when user selects a character/word and finalizes the input.\n * @private\n */\n this.compositionEnd = function (event) {\n event.preventDefault();\n _this.isCompositionUpdated = false;\n _this.isCompositionEnd = true;\n };\n // tslint:disable:no-any \n this.onImageResizer = function (args) {\n if (!isNullOrUndefined(_this.owner.imageResizerModule) && _this.owner.imageResizerModule.isImageResizerVisible\n && _this.owner.imageResizerModule.isImageResizing) {\n if (args instanceof MouseEvent) {\n _this.onMouseUpInternal(args);\n }\n else if (args instanceof TouchEvent) {\n _this.onTouchUpInternal(args);\n }\n }\n };\n // tslint:enable:no-any \n this.onTextInputInternal = function (event) {\n if (!_this.owner.isReadOnlyMode) {\n _this.owner.editorModule.onTextInputInternal(event);\n }\n else {\n _this.editableDiv.innerText = '';\n }\n };\n /**\n * Fired on paste.\n * @param {ClipboardEvent} event\n * @private\n */\n this.onPaste = function (event) {\n if (!_this.owner.isReadOnlyMode) {\n _this.owner.editorModule.pasteInternal(event);\n }\n _this.editableDiv.innerText = '';\n event.preventDefault();\n };\n /**\n * Fires when editable div loses focus.\n * @private\n */\n this.onFocusOut = function () {\n if (!isNullOrUndefined(_this.selection)) {\n if (_this.owner.contextMenuModule && _this.owner.contextMenuModule.contextMenuInstance &&\n _this.owner.contextMenuModule.contextMenuInstance.element.style.display === 'block') {\n return;\n }\n _this.selection.hideCaret();\n }\n };\n /**\n * Updates focus to editor area.\n * @private\n */\n this.updateFocus = function () {\n if (_this.selection) {\n _this.editableDiv.focus();\n _this.selection.showCaret();\n }\n };\n /**\n * Fires on scrolling.\n */\n this.scrollHandler = function () {\n _this.clearContent();\n _this.updateScrollBars();\n var vtHeight = _this.containerTop + _this.visibleBounds.height;\n if (vtHeight > _this.pageContainer.offsetHeight) {\n _this.viewerContainer.scrollTop = _this.containerTop - (vtHeight - _this.pageContainer.offsetHeight);\n }\n var viewer = _this;\n if (viewer instanceof PageLayoutViewer && !isNullOrUndefined(_this.owner)) {\n _this.owner.fireViewChange();\n }\n };\n /**\n * Fires when the window gets resized.\n * @private\n */\n this.onWindowResize = function () {\n var viewer = _this;\n var resizeTimer;\n /* tslint:disable:align */\n resizeTimer = setTimeout(function () {\n if (!isNullOrUndefined(viewer.owner) && !isNullOrUndefined(_this.owner.element)) {\n viewer.updateViewerSizeInternal(document.getElementById(viewer.owner.element.id));\n viewer.updateScrollBars();\n if (!isNullOrUndefined(_this.selection)) {\n _this.selection.updateCaretPosition();\n }\n viewer.updateTouchMarkPosition();\n if (viewer.owner.contextMenuModule && viewer.owner.contextMenuModule.contextMenuInstance) {\n viewer.owner.contextMenuModule.contextMenuInstance.close();\n }\n if (resizeTimer) {\n clearTimeout(resizeTimer);\n }\n }\n }, 100);\n };\n /**\n * @private\n */\n this.onContextMenu = function (event) {\n if (_this.owner.contextMenuModule) {\n _this.owner.contextMenuModule.onContextMenuInternal(event);\n }\n };\n /**\n * Called on mouse down.\n * @param {MouseEvent} event\n * @private\n */\n this.onMouseDownInternal = function (event) {\n if (_this.isTouchInput || event.offsetX > (_this.visibleBounds.width - (_this.visibleBounds.width - _this.viewerContainer.clientWidth))\n || event.offsetY > (_this.visibleBounds.height - (_this.visibleBounds.height - _this.viewerContainer.clientHeight))) {\n return;\n }\n if (!isNullOrUndefined(_this.selection)) {\n _this.updateCursor(event);\n // tslint:disable-next-line:max-line-length\n if (_this.isLeftButtonPressed(event) && !_this.owner.isReadOnlyMode && _this.owner.enableImageResizerMode && !isNullOrUndefined(_this.owner.imageResizerModule.selectedResizeElement)) {\n _this.owner.imageResizerModule.isImageResizing = true;\n }\n event.preventDefault();\n if (!_this.isTouchInput) {\n _this.selection.hideCaret();\n }\n var cursorPoint = new Point(event.offsetX, event.offsetY);\n var touchPoint = _this.findFocusedPage(cursorPoint, true);\n _this.mouseDownOffset.x = touchPoint.x;\n _this.mouseDownOffset.y = touchPoint.y;\n // tslint:disable-next-line:max-line-length\n _this.isMouseDownInFooterRegion = _this.selection.isCursorInsidePageRect(cursorPoint, _this.currentPage) && _this.selection.isCursorInFooterRegion(cursorPoint, _this.currentPage);\n _this.isSelectionChangedOnMouseMoved = false;\n if (!_this.owner.isReadOnlyMode && (_this.owner.editorModule.tableResize.isInCellResizerArea(touchPoint) ||\n _this.owner.editorModule.tableResize.isInRowResizerArea(touchPoint))) {\n _this.selection.hideCaret();\n _this.isMouseDown = true;\n _this.isSelectionChangedOnMouseMoved = false;\n if (_this.isLeftButtonPressed(event)) {\n _this.owner.editorModule.tableResize.startingPoint.x = touchPoint.x;\n _this.owner.editorModule.tableResize.startingPoint.y = touchPoint.y;\n _this.owner.editorModule.tableResize.handleResize(touchPoint);\n }\n return;\n }\n if (event.ctrlKey) {\n _this.isControlPressed = true;\n }\n if (_this.owner.selection.isEmpty) {\n _this.useTouchSelectionMark = false;\n }\n if (event.which === 3 && !_this.owner.selection.isEmpty\n && _this.selection.checkCursorIsInSelection(_this.getLineWidget(touchPoint), touchPoint)) {\n event.preventDefault();\n return;\n }\n _this.isTouchInput = false;\n _this.isMouseDown = true;\n _this.updateFocus();\n /* tslint:disable:align */\n _this.timer = setTimeout(function () {\n _this.tapCount++;\n if (_this.tapCount === 4) {\n _this.tapCount = 1;\n }\n }, 200);\n }\n };\n /**\n * Called on mouse move.\n * @param {MouseEvent} event\n * @private\n */\n this.onMouseMoveInternal = function (event) {\n event.preventDefault();\n if (!isNullOrUndefined(_this.selection)) {\n //For image Resizing\n if (!_this.owner.isReadOnlyMode && _this.owner.enableImageResizerMode\n && _this.owner.imageResizerModule.isImageResizing) {\n if (!_this.owner.imageResizerModule.isImageMoveToNextPage) {\n _this.owner.imageResizerModule.handleImageResizingOnMouse(event);\n }\n return;\n }\n var cursorPoint = new Point(event.offsetX, event.offsetY);\n var touchPoint = _this.findFocusedPage(cursorPoint, !_this.owner.enableHeaderAndFooter);\n if (_this.isMouseDown) {\n if (!isNullOrUndefined(_this.currentPage)) {\n var xPosition = touchPoint.x;\n var yPosition = touchPoint.y;\n if (!_this.owner.isReadOnlyMode && _this.isRowOrCellResizing) {\n _this.owner.editorModule.tableResize.handleResizing(touchPoint);\n }\n else {\n if (!(_this.isTouchInput || _this.isSelectionChangedOnMouseMoved || _this.touchDownOnSelectionMark > 0)) {\n _this.updateTextPositionForSelection(touchPoint, 1);\n }\n if (_this.isLeftButtonPressed(event)) {\n event.preventDefault();\n var touchY = yPosition;\n var textPosition = _this.owner.selection.end;\n var touchPoint_1 = new Point(xPosition, touchY);\n if (!_this.owner.enableImageResizerMode || !_this.owner.imageResizerModule.isImageResizerVisible) {\n _this.owner.selection.moveTextPosition(touchPoint_1, textPosition);\n }\n _this.isSelectionChangedOnMouseMoved = true;\n }\n }\n }\n _this.selection.checkForCursorVisibility();\n }\n if (!_this.isRowOrCellResizing && !_this.isSelectionChangedOnMouseMoved) {\n _this.updateCursor(event);\n }\n if (_this.isRowOrCellResizing) {\n _this.selection.hideCaret();\n }\n }\n };\n /**\n * Fired on double tap.\n * @param {MouseEvent} event\n * @private\n */\n this.onDoubleTap = function (event) {\n if (!isNullOrUndefined(_this.selection)) {\n _this.isTouchInput = false;\n var cursorPoint = new Point(event.offsetX, event.offsetY);\n if (_this.selection.checkAndEnableHeaderFooter(cursorPoint, _this.findFocusedPage(cursorPoint, true))) {\n return;\n }\n // tslint:disable-next-line:max-line-length\n if (_this.selection.isEmpty && !isNullOrUndefined(_this.currentPage) && !isNullOrUndefined(_this.owner.selection.start)) {\n _this.owner.selection.selectCurrentWord();\n _this.selection.checkForCursorVisibility();\n _this.tapCount = 2;\n }\n }\n };\n /**\n * Called on mouse up.\n * @param {MouseEvent} event\n * @private\n */\n this.onMouseUpInternal = function (event) {\n event.preventDefault();\n _this.isListTextSelected = false;\n var cursorPoint = new Point(event.offsetX, event.offsetY);\n var touchPoint = _this.findFocusedPage(cursorPoint, true);\n if (!isNullOrUndefined(_this.selection)) {\n var tapCount = 1;\n if (!Browser.isIE) {\n if (event.detail > 2) {\n tapCount = event.detail;\n }\n }\n else {\n tapCount = _this.tapCount;\n }\n if (_this.isRowOrCellResizing) {\n _this.owner.editorModule.tableResize.updateResizingHistory(touchPoint);\n }\n if (_this.isMouseDown && !_this.isSelectionChangedOnMouseMoved\n && !isNullOrUndefined(_this.currentPage) && !isNullOrUndefined(_this.owner.selection.start)\n && (!_this.owner.enableImageResizerMode || !_this.owner.imageResizerModule.isImageResizing)) {\n if (_this.touchDownOnSelectionMark === 0 && !_this.isRowOrCellResizing) {\n _this.updateTextPositionForSelection(touchPoint, tapCount);\n if (Browser.isIE && tapCount === 2) {\n _this.selection.checkAndEnableHeaderFooter(cursorPoint, touchPoint);\n }\n }\n _this.selection.checkForCursorVisibility();\n }\n if (!isNullOrUndefined(_this.currentPage) && !isNullOrUndefined(_this.owner.selection.start)\n && (_this.owner.selection.isEmpty || _this.owner.selection.isImageSelected) &&\n (((event.ctrlKey && _this.owner.useCtrlClickToFollowHyperlink ||\n !_this.owner.useCtrlClickToFollowHyperlink) && _this.isLeftButtonPressed(event) === true))) {\n _this.selection.navigateHyperLinkOnEvent(touchPoint, false);\n }\n if (!_this.owner.isReadOnlyMode && _this.isSelectionInListText(touchPoint)) {\n _this.selection.selectListText();\n }\n // tslint:disable-next-line:max-line-length\n if (!_this.owner.isReadOnlyMode && _this.owner.enableImageResizerMode && _this.owner.imageResizerModule.isImageResizing) {\n _this.owner.imageResizerModule.mouseUpInternal();\n _this.scrollToPosition(_this.owner.selection.start, _this.owner.selection.end);\n _this.owner.imageResizerModule.isImageResizing = false;\n _this.owner.imageResizerModule.updateHistoryForImageResizer();\n }\n // tslint:disable-next-line:max-line-length\n if (_this.owner.enableImageResizerMode && _this.owner.imageResizerModule.isImageResizerVisible && !isNullOrUndefined(_this.selection.caret)) {\n _this.selection.caret.style.display = 'none';\n }\n _this.isMouseDown = false;\n _this.isSelectionChangedOnMouseMoved = false;\n _this.isTouchInput = false;\n _this.useTouchSelectionMark = true;\n _this.isControlPressed = false;\n _this.updateFocus();\n if (_this.isListTextSelected) {\n _this.selection.hideCaret();\n }\n if (_this.owner.enableImageResizerMode) {\n var imageResizer = _this.owner.imageResizerModule;\n imageResizer.isImageResizing = false;\n imageResizer.isImageMoveToNextPage = false;\n imageResizer.leftValue = undefined;\n imageResizer.topValue = undefined;\n }\n _this.isMouseDownInFooterRegion = false;\n }\n };\n /**\n * Fired on touch start.\n * @param {TouchEvent} event\n * @private\n */\n this.onTouchStartInternal = function (event) {\n if (_this.selection) {\n _this.isCompositionStart = false;\n _this.isCompositionEnd = false;\n _this.isCompositionUpdated = false;\n _this.isCompositionCanceled = true;\n _this.isTouchInput = true;\n if (_this.isTimerStarted) {\n if (_this.tapCount === 1) {\n _this.tapCount = 2;\n }\n else {\n _this.tapCount = 3;\n _this.isTimerStarted = false;\n }\n }\n else {\n _this.isTimerStarted = true;\n _this.tapCount = 1;\n }\n if (event.touches.length === 1) {\n _this.zoomX = event.touches[0].clientX;\n _this.zoomY = event.touches[0].clientY;\n if (_this.owner.selection.isEmpty) {\n _this.useTouchSelectionMark = false;\n }\n _this.isMouseDown = true;\n _this.isSelectionChangedOnMouseMoved = false;\n var point = void 0;\n if (_this.isMouseDown) {\n point = _this.getTouchOffsetValue(event);\n }\n point = _this.findFocusedPage(point, true);\n if (_this.owner.enableImageResizerMode) {\n var resizeObj = _this.owner.imageResizerModule.getImagePointOnTouch(point);\n _this.owner.imageResizerModule.selectedResizeElement = resizeObj.selectedElement;\n }\n // tslint:disable-next-line:max-line-length\n if (_this.owner.enableImageResizerMode && !isNullOrUndefined(_this.owner.imageResizerModule.selectedResizeElement)) {\n _this.owner.imageResizerModule.isImageResizing = true;\n }\n var x = _this.owner.selection.end.location.x;\n var y = _this.selection.getCaretBottom(_this.owner.selection.end, _this.owner.selection.isEmpty) + 9;\n //TouchDownOnSelectionMark will be 2 when touch end is pressed\n _this.touchDownOnSelectionMark = ((point.y <= y && point.y >= y - 20 || point.y >= y && point.y <= y + 20)\n && (point.x <= x && point.x >= x - 20 || point.x >= x && point.x <= x + 20)) ? 1 : 0;\n if (!_this.owner.selection.isEmpty && _this.touchDownOnSelectionMark === 0) {\n x = _this.owner.selection.start.location.x;\n y = _this.selection.getCaretBottom(_this.owner.selection.start, false) + 9;\n //TouchDownOnSelectionMark will be 1 when touch start is pressed\n _this.touchDownOnSelectionMark = ((point.y <= y && point.y >= y - 20 || point.y >= y && point.y <= y + 20)\n && (point.x <= x && point.x >= x - 20 || point.x >= x && point.x <= x + 20)) ? 2 : 0;\n }\n }\n if (!isNullOrUndefined(_this.owner.contextMenuModule) && _this.owner.contextMenuModule.contextMenuInstance) {\n _this.owner.contextMenuModule.contextMenuInstance.close();\n }\n if (_this.touchDownOnSelectionMark || event.touches.length > 1) {\n event.preventDefault();\n }\n _this.timer = setTimeout(function () {\n _this.isTimerStarted = false;\n }, 200);\n }\n };\n /**\n * Fired on touch move.\n * @param {TouchEvent} event\n * @private\n */\n this.onTouchMoveInternal = function (event) {\n var touch = event.touches;\n var cursorPoint;\n if (!isNullOrUndefined(_this.selection)) {\n // tslint:disable-next-line:max-line-length\n if (_this.owner.editorModule && _this.owner.enableImageResizerMode && _this.owner.imageResizerModule.isImageResizing) {\n event.preventDefault();\n if (!_this.owner.imageResizerModule.isImageMoveToNextPage) {\n _this.owner.imageResizerModule.handleImageResizingOnTouch(event);\n _this.selection.caret.style.display = 'none';\n }\n return;\n }\n if (_this.isMouseDown) {\n cursorPoint = _this.getTouchOffsetValue(event);\n var touchPoint = _this.findFocusedPage(cursorPoint, true);\n if (_this.touchDownOnSelectionMark > 0 /*|| !this.useTouchSelectionMark*/) {\n event.preventDefault();\n var touchY = touchPoint.y;\n var textPosition = _this.owner.selection.end;\n var touchPointer = void 0;\n if (touchPoint.y <= 26) {\n touchY -= touchPoint.y < 0 ? 0 : touchPoint.y + 0.5;\n }\n else {\n touchY -= 36.5;\n }\n textPosition = _this.touchDownOnSelectionMark === 2 ? _this.selection.start : _this.selection.end;\n touchPoint = new Point(touchPoint.x, touchY);\n _this.owner.selection.moveTextPosition(touchPoint, textPosition);\n _this.isSelectionChangedOnMouseMoved = true;\n }\n _this.selection.checkForCursorVisibility();\n }\n }\n if (touch.length > 1) {\n event.preventDefault();\n _this.isMouseDown = false;\n _this.zoomX = (touch[0].clientX + touch[1].clientX) / 2;\n _this.zoomY = (touch[0].clientY + touch[1].clientY) / 2;\n // tslint:disable-next-line:max-line-length\n var currentDiff = Math.sqrt(Math.pow((touch[0].clientX - touch[1].clientX), 2) + Math.pow((touch[0].clientY - touch[1].clientY), 2));\n if (_this.preDifference > -1) {\n if (currentDiff > _this.preDifference) {\n _this.onPinchOutInternal(event);\n }\n else if (currentDiff < _this.preDifference) {\n _this.onPinchInInternal(event);\n }\n }\n else if (_this.zoomFactor < 2) {\n if (_this.preDifference !== -1) {\n if (currentDiff > _this.preDifference) {\n _this.onPinchInInternal(event);\n }\n }\n }\n else if (_this.preDifference === -1) {\n if (_this.zoomFactor > 2) {\n if (currentDiff > _this.preDifference) {\n _this.onPinchInInternal(event);\n }\n }\n }\n _this.preDifference = currentDiff;\n }\n };\n /**\n * Fired on touch up.\n * @param {TouchEvent} event\n * @private\n */\n this.onTouchUpInternal = function (event) {\n if (!isNullOrUndefined(_this.selection)) {\n var point = _this.getTouchOffsetValue(event);\n var touchPoint = _this.findFocusedPage(point, true);\n if (event.changedTouches.length === 1) {\n _this.zoomX = undefined;\n _this.zoomY = undefined;\n // tslint:disable-next-line:max-line-length\n if (_this.isMouseDown && !_this.isSelectionChangedOnMouseMoved && !isNullOrUndefined(_this.currentPage) && !isNullOrUndefined(_this.owner.selection.start)) {\n if (_this.touchDownOnSelectionMark === 0) {\n _this.updateTextPositionForSelection(new Point(touchPoint.x, touchPoint.y), _this.tapCount);\n if (_this.tapCount === 2) {\n _this.selection.checkAndEnableHeaderFooter(point, touchPoint);\n }\n }\n if (_this.owner.selection.isEmpty) {\n _this.selection.updateCaretPosition();\n }\n _this.selection.checkForCursorVisibility();\n }\n if (!isNullOrUndefined(_this.currentPage) && !isNullOrUndefined(_this.selection.start)\n && !_this.isSelectionChangedOnMouseMoved && (_this.selection.isEmpty ||\n _this.selection.isImageField() && (!_this.owner.enableImageResizerMode ||\n _this.owner.enableImageResizerMode && !_this.owner.imageResizerModule.isImageResizing))) {\n _this.selection.navigateHyperLinkOnEvent(touchPoint, true);\n }\n _this.isMouseDown = false;\n _this.touchDownOnSelectionMark = 0;\n _this.useTouchSelectionMark = true;\n _this.isSelectionChangedOnMouseMoved = false;\n }\n if (_this.owner.enableImageResizerMode && _this.owner.imageResizerModule.isImageResizing) {\n _this.owner.imageResizerModule.mouseUpInternal();\n _this.owner.imageResizerModule.isImageResizing = false;\n _this.owner.imageResizerModule.isImageMoveToNextPage = false;\n _this.scrollToPosition(_this.owner.selection.start, _this.owner.selection.end);\n _this.owner.imageResizerModule.updateHistoryForImageResizer();\n }\n // tslint:disable-next-line:max-line-length\n if (_this.owner.enableImageResizerMode && _this.owner.imageResizerModule.isImageResizerVisible && _this.isTouchInput) {\n _this.touchStart.style.display = 'none';\n _this.touchEnd.style.display = 'none';\n }\n // if (!this.owner.isReadOnlyMode && this.isSelectionInListText(touchPoint)) {\n // this.selection.selectListText();\n // }\n event.preventDefault();\n }\n _this.preDifference = -1;\n _this.isTouchInput = false;\n if (!_this.isTimerStarted) {\n _this.tapCount = 1;\n }\n if (_this.isListTextSelected) {\n _this.selection.hideCaret();\n }\n };\n /**\n * Fired on keyup event.\n * @private\n */\n this.onKeyUpInternal = function (event) {\n if (Browser.isDevice) {\n if (window.getSelection().anchorOffset !== _this.prefix.length) {\n _this.selection.setEditableDivCaretPosition(_this.editableDiv.innerText.length);\n }\n }\n if (event.ctrlKey || (event.keyCode === 17 || event.which === 17)) {\n _this.isControlPressed = false;\n }\n };\n /**\n * Fired on keydown.\n * @private\n */\n this.onKeyDownInternal = function (event) {\n var isHandled = false;\n var key = event.which || event.keyCode;\n var ctrl = (event.ctrlKey || event.metaKey) ? true : ((key === 17) ? true : false); // ctrl detection \n var shift = event.shiftKey ? event.shiftKey : ((key === 16) ? true : false); // Shift Key detection \n var alt = event.altKey ? event.altKey : ((key === 18) ? true : false); // alt key detection\n if (ctrl && !shift && !alt) {\n switch (key) {\n case 80:\n event.preventDefault();\n _this.owner.print();\n isHandled = true;\n break;\n case 83:\n event.preventDefault();\n _this.owner.save(_this.owner.documentName === '' ? 'sample' : _this.owner.documentName, 'Sfdt');\n isHandled = true;\n break;\n }\n }\n if (!isHandled && !isNullOrUndefined(_this.selection)) {\n _this.selection.onKeyDownInternal(event, ctrl, shift, alt);\n }\n if (isHandled) {\n event.preventDefault();\n }\n };\n this.owner = owner;\n this.pages = [];\n this.render = new Renderer(this);\n this.lists = [];\n this.abstractLists = [];\n this.characterFormat = new WCharacterFormat(this);\n this.paragraphFormat = new WParagraphFormat(this);\n this.renderedLists = new Dictionary();\n this.headersFooters = [];\n this.styles = new WStyles();\n this.preDefinedStyles = new Dictionary();\n this.initalizeStyles();\n this.bookmarks = new Dictionary();\n }\n Object.defineProperty(LayoutViewer.prototype, \"containerCanvas\", {\n //#region Properties\n /**\n * Gets container canvas.\n * @private\n */\n get: function () {\n if (isNullOrUndefined(this.containerCanvasIn)) {\n this.containerCanvasIn = document.createElement('canvas');\n this.containerCanvasIn.getContext('2d').save();\n }\n if (!isNullOrUndefined(this.pageContainer)\n && this.containerCanvasIn.parentElement !== this.pageContainer) {\n this.pageContainer.appendChild(this.containerCanvasIn);\n }\n return this.containerCanvasIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LayoutViewer.prototype, \"selectionCanvas\", {\n /**\n * Gets selection canvas.\n * @private\n */\n get: function () {\n if (isNullOrUndefined(this.selectionCanvasIn)) {\n this.selectionCanvasIn = document.createElement('canvas');\n this.selectionCanvas.getContext('2d').save();\n }\n if (!isNullOrUndefined(this.pageContainer)\n && this.selectionCanvasIn.parentElement !== this.pageContainer) {\n this.pageContainer.appendChild(this.selectionCanvasIn);\n }\n return this.selectionCanvasIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LayoutViewer.prototype, \"containerContext\", {\n /**\n * Gets container context.\n * @private\n */\n get: function () {\n return this.containerCanvas.getContext('2d');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LayoutViewer.prototype, \"selectionContext\", {\n /**\n * Gets selection context.\n * @private\n */\n get: function () {\n return this.selectionCanvas.getContext('2d');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LayoutViewer.prototype, \"currentRenderingPage\", {\n /**\n * Gets the current rendering page.\n */\n get: function () {\n if (this.pages.length === 0) {\n return undefined;\n }\n return this.pages[this.pages.length - 1];\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LayoutViewer.prototype, \"visibleBounds\", {\n /**\n * Gets visible bounds.\n * @private\n */\n get: function () {\n return this.visibleBoundsIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LayoutViewer.prototype, \"zoomFactor\", {\n /**\n * Gets or sets zoom factor.\n * @private\n */\n get: function () {\n return this.zoomFactorInternal;\n },\n set: function (value) {\n if (this.zoomFactorInternal !== value) {\n this.preZoomFactor = this.zoomFactor;\n this.zoomFactorInternal = value;\n this.zoomModule.setZoomFactor(value);\n this.owner.zoomFactor = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LayoutViewer.prototype, \"selection\", {\n /**\n * Gets the selection.\n * @private\n */\n get: function () {\n return this.owner.selection;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LayoutViewer.prototype, \"selectionStartPage\", {\n /**\n * Gets or sets selection start page.\n * @private\n */\n get: function () {\n return this.selectionStartPageIn;\n },\n set: function (value) {\n this.selectionStartPageIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LayoutViewer.prototype, \"selectionEndPage\", {\n /**\n * Gets or sets selection end page.\n * @private\n */\n get: function () {\n return this.selectionEndPageIn;\n },\n set: function (value) {\n this.selectionEndPageIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LayoutViewer.prototype, \"dialog\", {\n /**\n * Gets the initialized default dialog.\n * @private\n */\n get: function () {\n if (!this.dialogInternal) {\n this.initDialog();\n }\n return this.dialogInternal;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LayoutViewer.prototype, \"dialog2\", {\n /**\n * Gets the initialized default dialog.\n * @private\n */\n get: function () {\n if (!this.dialogInternal2) {\n this.initDialog2();\n }\n return this.dialogInternal2;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LayoutViewer.prototype, \"pageFitType\", {\n /**\n * Gets or sets page fit type.\n * @private\n */\n get: function () {\n return this.pageFitTypeIn;\n },\n set: function (value) {\n this.pageFitTypeIn = value;\n this.onPageFitTypeChanged(this.pageFitTypeIn);\n },\n enumerable: true,\n configurable: true\n });\n LayoutViewer.prototype.initalizeStyles = function () {\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Normal', '{\"type\":\"Paragraph\",\"name\":\"Normal\",\"next\":\"Normal\"}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Heading 1', '{\"type\":\"Paragraph\",\"name\":\"Heading 1\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"link\":\"Heading 1 Char\",\"characterFormat\":{\"fontSize\":16.0,\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#2F5496\"},\"paragraphFormat\":{\"leftIndent\":0.0,\"rightIndent\":0.0,\"firstLineIndent\":0.0,\"beforeSpacing\":12.0,\"afterSpacing\":0.0,\"lineSpacing\":1.0791666507720947,\"lineSpacingType\":\"Multiple\",\"textAlignment\":\"Left\",\"outlineLevel\":\"Level1\"}}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Heading 2', '{\"type\":\"Paragraph\",\"name\":\"Heading 2\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"link\":\"Heading 2 Char\",\"characterFormat\":{\"fontSize\":13.0,\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#2F5496\"},\"paragraphFormat\":{\"leftIndent\":0.0,\"rightIndent\":0.0,\"firstLineIndent\":0.0,\"beforeSpacing\":2.0,\"afterSpacing\":0.0,\"lineSpacing\":1.0791666507720947,\"lineSpacingType\":\"Multiple\",\"textAlignment\":\"Left\",\"outlineLevel\":\"Level2\"}}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Heading 3', '{\"type\":\"Paragraph\",\"name\":\"Heading 3\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"link\":\"Heading 3 Char\",\"characterFormat\":{\"fontSize\":12.0,\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#1F3763\"},\"paragraphFormat\":{\"leftIndent\":0.0,\"rightIndent\":0.0,\"firstLineIndent\":0.0,\"beforeSpacing\":2.0,\"afterSpacing\":0.0,\"lineSpacing\":1.0791666507720947,\"lineSpacingType\":\"Multiple\",\"textAlignment\":\"Left\",\"outlineLevel\":\"Level3\"}}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Heading 4', '{\"type\":\"Paragraph\",\"name\":\"Heading 4\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"link\":\"Heading 4 Char\",\"characterFormat\":{\"italic\":true,\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#2F5496\"},\"paragraphFormat\":{\"leftIndent\":0.0,\"rightIndent\":0.0,\"firstLineIndent\":0.0,\"beforeSpacing\":2.0,\"afterSpacing\":0.0,\"lineSpacing\":1.0791666507720947,\"lineSpacingType\":\"Multiple\",\"textAlignment\":\"Left\",\"outlineLevel\":\"Level4\"}}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Heading 5', '{\"type\":\"Paragraph\",\"name\":\"Heading 5\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"link\":\"Heading 5 Char\",\"characterFormat\":{\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#2F5496\"},\"paragraphFormat\":{\"leftIndent\":0.0,\"rightIndent\":0.0,\"firstLineIndent\":0.0,\"beforeSpacing\":2.0,\"afterSpacing\":0.0,\"lineSpacing\":1.0791666507720947,\"lineSpacingType\":\"Multiple\",\"textAlignment\":\"Left\",\"outlineLevel\":\"Level5\"}}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Heading 6', '{\"type\":\"Paragraph\",\"name\":\"Heading 6\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"link\":\"Heading 6 Char\",\"characterFormat\":{\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#1F3763\"},\"paragraphFormat\":{\"leftIndent\":0.0,\"rightIndent\":0.0,\"firstLineIndent\":0.0,\"beforeSpacing\":2.0,\"afterSpacing\":0.0,\"lineSpacing\":1.0791666507720947,\"lineSpacingType\":\"Multiple\",\"textAlignment\":\"Left\",\"outlineLevel\":\"Level6\"}}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Default Paragraph Font', '{\"type\":\"Character\",\"name\":\"Default Paragraph Font\"}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Heading 1 Char', '{\"type\":\"Character\",\"name\":\"Heading 1 Char\",\"basedOn\":\"Default Paragraph Font\",\"characterFormat\":{\"fontSize\":16.0,\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#2F5496\"}}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Heading 2 Char', '{\"type\":\"Character\",\"name\":\"Heading 2 Char\",\"basedOn\":\"Default Paragraph Font\",\"characterFormat\":{\"fontSize\":13.0,\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#2F5496\"}}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Heading 3 Char', '{\"type\":\"Character\",\"name\":\"Heading 3 Char\",\"basedOn\":\"Default Paragraph Font\",\"characterFormat\":{\"fontSize\":12.0,\"fontFamily\":\"Calibri Light\",\"fontColor\": \"#1F3763\"}}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Heading 4 Char', '{\"type\":\"Character\",\"name\":\"Heading 4 Char\",\"basedOn\":\"Default Paragraph Font\",\"characterFormat\":{\"italic\":true,\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#2F5496\"}}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Heading 5 Char', '{\"type\":\"Character\",\"name\":\"Heading 5 Char\",\"basedOn\":\"Default Paragraph Font\",\"characterFormat\":{\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#2F5496\"}}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Heading 6 Char', '{\"type\":\"Character\",\"name\":\"Heading 6 Char\",\"basedOn\":\"Default Paragraph Font\",\"characterFormat\":{\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#1F3763\"}}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Hyperlink', '{\"type\":\"Character\",\"name\":\"Hyperlink\",\"basedOn\":\"Default Paragraph Font\",\"next\":\"Normal\",\"characterFormat\":{\"fontColor\":\"#0563C1\",\"underline\": \"Single\"}}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Toc1', '{\"type\":\"Paragraph\",\"name\":\"Toc1\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"paragraphFormat\":{\"afterSpacing\":5.0}}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Toc2', '{\"type\":\"Paragraph\",\"name\":\"Toc2\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"paragraphFormat\":{\"leftIndent\" :11.0,\"afterSpacing\":5.0}}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Toc3', '{\"type\":\"Paragraph\",\"name\":\"Toc3\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"paragraphFormat\":{\"leftIndent\" :22.0,\"afterSpacing\":5.0}}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Toc4', '{\"type\":\"Paragraph\",\"name\":\"Toc4\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"paragraphFormat\":{\"leftIndent\" :33.0,\"afterSpacing\":5.0}}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Toc5', '{\"type\":\"Paragraph\",\"name\":\"Toc5\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"paragraphFormat\":{\"leftIndent\" :44.0,\"afterSpacing\":5.0}}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Toc6', '{\"type\":\"Paragraph\",\"name\":\"Toc6\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"paragraphFormat\":{\"leftIndent\" :55.0,\"afterSpacing\":5.0}}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Toc7', '{\"type\":\"Paragraph\",\"name\":\"Toc7\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"paragraphFormat\":{\"leftIndent\" :66.0,\"afterSpacing\":5.0}}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Toc8', '{\"type\":\"Paragraph\",\"name\":\"Toc8\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"paragraphFormat\":{\"leftIndent\" :77.0,\"afterSpacing\":5.0}}');\n /* tslint:disable-next-line:max-line-length */\n this.preDefinedStyles.add('Toc9', '{\"type\":\"Paragraph\",\"name\":\"Toc9\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"paragraphFormat\":{\"leftIndent\" :88.0,\"afterSpacing\":5.0}}');\n };\n /**\n * @private\n */\n LayoutViewer.prototype.clearDocumentItems = function () {\n this.headersFooters = [];\n this.fields = [];\n this.bookmarks.clear();\n this.styles.clear();\n this.characterFormat.clearFormat();\n this.paragraphFormat.clearFormat();\n };\n /**\n * @private\n */\n LayoutViewer.prototype.getAbstractListById = function (id) {\n if (isNullOrUndefined(this.abstractLists)) {\n return undefined;\n }\n for (var i = 0; i < this.abstractLists.length; i++) {\n var abstractList = this.abstractLists[i];\n if (abstractList instanceof WAbstractList && abstractList.abstractListId === id) {\n return abstractList;\n }\n }\n return undefined;\n };\n /**\n * @private\n */\n LayoutViewer.prototype.getListById = function (id) {\n if (isNullOrUndefined(this.lists)) {\n return undefined;\n }\n for (var i = 0; i < this.lists.length; i++) {\n if (!isNullOrUndefined(this.lists[i]) && this.lists[i].listId === id) {\n return this.lists[i];\n }\n }\n return undefined;\n };\n /**\n * @private\n */\n LayoutViewer.getListLevelNumber = function (listLevel) {\n if (listLevel.ownerBase instanceof WLevelOverride) {\n return listLevel.ownerBase.levelNumber;\n }\n else if (listLevel.ownerBase instanceof WAbstractList && !isNullOrUndefined(listLevel.ownerBase.levels)) {\n return listLevel.ownerBase.levels.indexOf(listLevel);\n }\n else {\n return -1;\n }\n };\n /**\n * Gets the bookmarks.\n * @private\n */\n LayoutViewer.prototype.getBookmarks = function (includeHidden) {\n var bookmarks = [];\n for (var i = 0; i < this.bookmarks.keys.length; i++) {\n var bookmark = this.bookmarks.keys[i];\n if (includeHidden || bookmark.indexOf('_') !== 0) {\n bookmarks.push(bookmark);\n }\n }\n return bookmarks;\n };\n /**\n * Initializes components.\n * @private\n */\n LayoutViewer.prototype.initializeComponents = function () {\n if (isNullOrUndefined(this.owner.element)) {\n return;\n }\n var viewer = this;\n var element = document.getElementById(this.owner.element.id);\n this.viewerContainer = createElement('div', { id: this.owner.containerId + '_viewerContainer' });\n this.viewerContainer.style.cssText = 'position:relative;backgroundColor:#FBFBFB;overflow:auto';\n element.appendChild(this.viewerContainer);\n this.viewerContainer.tabIndex = 0;\n this.viewerContainer.style.outline = 'none';\n this.pageContainer = createElement('div', { id: this.owner.containerId + '_pageContainer', className: 'e-de-background' });\n this.viewerContainer.appendChild(this.pageContainer);\n this.pageContainer.style.top = '0px';\n this.pageContainer.style.left = '0px';\n this.pageContainer.style.position = 'relative';\n this.pageContainer.style.pointerEvents = 'none';\n this.editableDiv = document.createElement('div');\n this.editableDiv.contentEditable = 'true';\n this.editableDiv.style.position = 'fixed';\n this.editableDiv.style.left = '-150em';\n this.editableDiv.style.width = '100%';\n this.editableDiv.style.height = '100%';\n this.editableDiv.id = this.owner.containerId + '_editableDiv';\n document.body.appendChild(this.editableDiv);\n this.editableDiv.id = element.id + '_editableDiv';\n document.body.appendChild(this.editableDiv);\n if (this.owner.enableImageResizerMode) {\n this.owner.imageResizerModule.initializeImageResizer();\n }\n this.updateViewerSizeInternal(element);\n this.layout = new Layout(this);\n this.textHelper = new TextHelper(this);\n this.zoomModule = new Zoom(this);\n // let locale: L10n = new L10n('documenteditor', this.owner.defaultLocale);\n // locale.setLocale(this.owner.locale);\n // setCulture(this.owner.locale);\n this.initTouchEllipse();\n this.wireEvent();\n };\n /**\n * Wires events and methods.\n */\n LayoutViewer.prototype.wireEvent = function () {\n if (!isNullOrUndefined(this.selection)) {\n this.selection.initCaret();\n }\n this.editableDiv.addEventListener('paste', this.onPaste);\n this.editableDiv.addEventListener('input', this.onTextInputInternal);\n this.editableDiv.addEventListener('blur', this.onFocusOut);\n this.editableDiv.addEventListener('keydown', this.onKeyDownInternal);\n this.editableDiv.addEventListener('compositionstart', this.compositionStart);\n this.editableDiv.addEventListener('compositionupdate', this.compositionUpdated);\n this.editableDiv.addEventListener('compositionend', this.compositionEnd);\n this.viewerContainer.addEventListener('scroll', this.scrollHandler);\n this.viewerContainer.addEventListener('mousedown', this.onMouseDownInternal);\n this.viewerContainer.addEventListener('mousemove', this.onMouseMoveInternal);\n this.viewerContainer.addEventListener('contextmenu', this.onContextMenu);\n this.viewerContainer.addEventListener('dblclick', this.onDoubleTap);\n this.viewerContainer.addEventListener('mouseup', this.onMouseUpInternal);\n window.addEventListener('resize', this.onWindowResize);\n window.addEventListener('keyup', this.onKeyUpInternal);\n window.addEventListener('mouseup', this.onImageResizer);\n window.addEventListener('touchend', this.onImageResizer);\n this.viewerContainer.addEventListener('touchstart', this.onTouchStartInternal);\n this.viewerContainer.addEventListener('touchmove', this.onTouchMoveInternal);\n this.viewerContainer.addEventListener('touchend', this.onTouchUpInternal);\n if (navigator.userAgent.match('Firefox')) {\n this.viewerContainer.addEventListener('DOMMouseScroll', this.zoomModule.onMouseWheelInternal);\n }\n this.viewerContainer.addEventListener('mousewheel', this.zoomModule.onMouseWheelInternal);\n };\n /**\n * Initializes dialog template.\n */\n LayoutViewer.prototype.initDialog = function () {\n if (!this.dialogInternal) {\n this.dialogTarget = createElement('div', { className: 'e-de-dlg-target' });\n document.body.appendChild(this.dialogTarget);\n this.dialogInternal = new Dialog({\n target: document.body, showCloseIcon: true,\n allowDragging: true, visible: false, width: '1px', isModal: true, position: { X: 'center', Y: 'center' }, zIndex: 20\n });\n this.dialogInternal.open = this.selection.hideCaret;\n this.dialogInternal.beforeClose = this.updateFocus;\n this.dialogInternal.appendTo(this.dialogTarget);\n }\n };\n /**\n * Initializes dialog template.\n */\n LayoutViewer.prototype.initDialog2 = function () {\n if (!this.dialogInternal2) {\n var target = createElement('div', { className: 'e-de-dlg-target' });\n document.body.appendChild(target);\n this.dialogInternal2 = new Dialog({\n target: document.body, showCloseIcon: true,\n allowDragging: true, visible: false, width: '1px', isModal: true, position: { X: 'center', Y: 'Top' }, zIndex: 10\n });\n this.dialogInternal2.appendTo(target);\n }\n };\n /**\n * Clears the context.\n * @private\n */\n LayoutViewer.prototype.clearContent = function () {\n this.containerContext.clearRect(0, 0, this.containerCanvas.width, this.containerCanvas.height);\n this.selectionContext.clearRect(0, 0, this.selectionCanvas.width, this.selectionCanvas.height);\n };\n /**\n * Fired when the document gets changed.\n * @param {WordDocument} document\n */\n LayoutViewer.prototype.onDocumentChanged = function (sections) {\n this.clearContent();\n if (this.owner.editorModule) {\n this.owner.editorModule.tocStyles = {};\n this.owner.editorModule.tocBookmarkId = 0;\n }\n this.heightInfoCollection = {};\n this.owner.isDocumentLoaded = false;\n for (var i = 0; i < this.pages.length; i++) {\n this.pages[i].bodyWidgets[0].destroy();\n }\n this.pages = [];\n if (!isNullOrUndefined(this.renderedLists)) {\n this.renderedLists.clear();\n }\n if (!isNullOrUndefined(this.owner.editorHistory)) {\n this.owner.editorHistory.destroy();\n }\n this.owner.isDocumentLoaded = true;\n this.layout.isInitialLoad = true;\n this.layout.layoutItems(sections);\n if (this.owner.selection) {\n this.owner.selection.selectRange(this.owner.documentStart, this.owner.documentStart);\n }\n if (this.owner.optionsPaneModule) {\n this.owner.optionsPaneModule.showHideOptionsPane(false);\n }\n this.owner.fireDocumentChange();\n };\n /**\n * Initialize touch ellipse.\n */\n LayoutViewer.prototype.initTouchEllipse = function () {\n var style = 'height: 30px;width: 30px;position: absolute;background-color: transparent;margin: 0px;padding: 0px;z-index:5';\n // tslint:disable-next-line:max-line-length\n var ellipse = ' height: 12px;width: 12px;border-radius: 50%;background-color: white;position: absolute;margin: 0px 6px 0px 6px;border-width: 2px;border-style: solid;border-color: #000000;';\n this.touchStart = createElement('div', { className: 'e-touch-ellipse', styles: style });\n var start = createElement('div', { styles: ellipse });\n this.touchEnd = createElement('div', { className: 'e-touch-ellipse', styles: style });\n this.touchStart.style.display = 'none';\n var end = createElement('div', { styles: ellipse });\n this.touchStart.appendChild(start);\n this.touchEnd.appendChild(end);\n this.touchEnd.style.display = 'none';\n this.viewerContainer.appendChild(this.touchStart);\n this.viewerContainer.appendChild(this.touchEnd);\n };\n /**\n * Updates touch mark position.\n * @private\n */\n LayoutViewer.prototype.updateTouchMarkPosition = function () {\n if (this.touchStart.style.display !== 'none' && !isNullOrUndefined(this.selection)) {\n if (!this.selection.isEmpty) {\n var y = this.selection.getCaretBottom(this.selection.start, false);\n var page = this.selection.getPage(this.selection.start.paragraph);\n var viewer = this;\n // tslint:disable-next-line:max-line-length\n var pageTop = (page.boundingRectangle.y - viewer.pageGap * (this.pages.indexOf(page) + 1)) * this.zoomFactor + viewer.pageGap * (this.pages.indexOf(page) + 1);\n // tslint:disable-next-line:max-line-length\n this.touchStart.style.left = page.boundingRectangle.x + (Math.round(this.selection.start.location.x) * this.zoomFactor - 14) + 'px';\n this.touchStart.style.top = pageTop + ((y) * this.zoomFactor) + 'px';\n if (!this.selection.isEmpty) {\n y = this.selection.getCaretBottom(this.selection.end, false);\n page = this.selection.getPage(this.selection.end.paragraph);\n }\n // tslint:disable-next-line:max-line-length\n this.touchEnd.style.left = page.boundingRectangle.x + (Math.round(this.selection.end.location.x) * this.zoomFactor - 14) + 'px';\n this.touchEnd.style.top = pageTop + (y * this.zoomFactor) + 'px';\n }\n else {\n this.selection.updateCaretPosition();\n }\n }\n };\n LayoutViewer.prototype.isSelectionInListText = function (cursorPoint) {\n var widget = this.getLineWidget(cursorPoint);\n if (!isNullOrUndefined(widget) && widget.children[0] instanceof ListTextElementBox) {\n var left = this.getLeftValue(widget);\n var width = widget.children[0].width;\n var height = widget.children[0].height;\n if (this.isInsideRect(left, widget.paragraph.y, width, height, cursorPoint)) {\n this.selectionLineWidget = widget;\n return true;\n }\n }\n return false;\n };\n /**\n * Check whether touch point is inside the rectangle or not.\n * @param x\n * @param y\n * @param width\n * @param height\n * @param touchPoint\n * @private\n */\n LayoutViewer.prototype.isInsideRect = function (x, y, width, height, touchPoint) {\n if ((touchPoint.x > x && touchPoint.x <= x + width) && (touchPoint.y > y && touchPoint.y <= y + height)) {\n return true;\n }\n return false;\n };\n /**\n * @private\n */\n LayoutViewer.prototype.getLeftValue = function (widget) {\n var left = widget.paragraph.x;\n var paragraphFormat = widget.paragraph.paragraphFormat;\n if (this.selection.isParagraphFirstLine(widget)) {\n if (paragraphFormat.textAlignment === 'Right') {\n left -= HelperMethods.convertPointToPixel(paragraphFormat.firstLineIndent);\n left -= HelperMethods.convertPointToPixel(paragraphFormat.leftIndent);\n }\n else {\n left += HelperMethods.convertPointToPixel(paragraphFormat.firstLineIndent);\n }\n }\n var element = widget.children[0];\n if (element instanceof ListTextElementBox) {\n left += element.margin.left;\n }\n return left;\n };\n /**\n * Checks whether left mouse button is pressed or not.\n */\n LayoutViewer.prototype.isLeftButtonPressed = function (event) {\n this.isTouchInput = false;\n var button = event.which || event.button;\n return button === 1;\n };\n /**\n * Gets touch offset value.\n */\n LayoutViewer.prototype.getTouchOffsetValue = function (event) {\n var targetElement = this.viewerContainer;\n var offset = targetElement.getBoundingClientRect();\n var touchOffsetValues = event.touches[0];\n if (isNullOrUndefined(touchOffsetValues)) {\n touchOffsetValues = event.changedTouches[0];\n }\n var offsetX = touchOffsetValues.pageX - offset.left;\n var offsetY = touchOffsetValues.pageY - offset.top;\n return new Point(offsetX, offsetY);\n };\n /**\n * Fired on pinch zoom in.\n * @param {TouchEvent} event\n */\n LayoutViewer.prototype.onPinchInInternal = function (event) {\n this.preZoomFactor = this.zoomFactor;\n var updatedZoomFactor = this.zoomFactor - 0.01;\n if (updatedZoomFactor < 5 && updatedZoomFactor > 2) {\n updatedZoomFactor = updatedZoomFactor - 0.01;\n }\n if (updatedZoomFactor < 0.1) {\n updatedZoomFactor = 0.1;\n }\n this.zoomFactor = updatedZoomFactor;\n };\n /**\n * Fired on pinch zoom out.\n * @param {TouchEvent} event\n */\n LayoutViewer.prototype.onPinchOutInternal = function (event) {\n this.preZoomFactor = this.zoomFactor;\n var updatedZoomFactor = this.zoomFactor + 0.01;\n if (updatedZoomFactor > 2) {\n updatedZoomFactor = updatedZoomFactor + 0.01;\n }\n if (updatedZoomFactor > 5) {\n updatedZoomFactor = 5;\n }\n this.zoomFactor = updatedZoomFactor;\n };\n /**\n * Gets page width.\n * @private\n */\n LayoutViewer.prototype.getPageWidth = function (page) {\n var width = page.boundingRectangle.width;\n return width;\n };\n /**\n * Removes specified page.\n * @private\n */\n LayoutViewer.prototype.removePage = function (page) {\n if (this.currentPage === page) {\n this.currentPage = undefined;\n }\n var index = this.pages.indexOf(page);\n // if (index > -1) {\n this.pages.splice(index, 1);\n // } \n //this.removeRenderedPages();\n var viewer = this;\n if (!isNullOrUndefined(viewer.visiblePages)) {\n if ((viewer.visiblePages).indexOf(page) > -1) {\n var pageIndex = (viewer.visiblePages).indexOf(page);\n (viewer.visiblePages).splice(pageIndex, 1);\n }\n }\n //(viewer as PageLayoutViewer).visiblePages.remove(page);\n var height = 0;\n for (var i = 0; i < this.pages.length; i++) {\n height = height + this.pages[i].boundingRectangle.height;\n }\n //Updates the vertical height.\n height -= page.boundingRectangle.height + 20;\n //ToDo:Update horizontal width, if removed page has max width.\n var top = 20;\n if (index > 0) {\n top += this.pages[index - 1].boundingRectangle.bottom;\n }\n if (index !== -1) {\n for (var i = index; i < this.pages.length; i++) {\n //Update bounding rectangle of next pages in collection.\n page = this.pages[i];\n // tslint:disable-next-line:max-line-length\n page.boundingRectangle = new Rect(page.boundingRectangle.x, top, page.boundingRectangle.width, page.boundingRectangle.height);\n top = page.boundingRectangle.bottom + 20;\n page.repeatHeaderRowTableWidget = false;\n }\n }\n };\n // private removeRenderedPages(): void {\n // for (let i: number = 0; i < this.pages.length; i++) {\n // this.clearContainer(this.pages[i]);\n // }\n // }\n /**\n * Updates viewer size on window resize.\n * @private\n */\n LayoutViewer.prototype.updateViewerSize = function () {\n var viewer = this;\n var element = this.owner.getDocumentEditorElement();\n viewer.updateViewerSizeInternal(element);\n viewer.updateScrollBars();\n if (!isNullOrUndefined(this.selection)) {\n this.selection.updateCaretPosition();\n }\n };\n /**\n * Updates viewer size.\n */\n LayoutViewer.prototype.updateViewerSizeInternal = function (element) {\n if (!isNullOrUndefined(element)) {\n var rect = element.getBoundingClientRect();\n var width = 0;\n var height = 0;\n height = rect.height > 0 ? rect.height : 200;\n if (this.owner.optionsPaneModule && this.owner.optionsPaneModule.isOptionsPaneShow) {\n var optionsRect = this.owner.optionsPaneModule.optionsPane.getBoundingClientRect();\n width = (rect.width - optionsRect.width) > 0 ? (rect.width - optionsRect.width) : 200;\n }\n else {\n width = rect.width > 0 ? rect.width : 200;\n }\n this.viewerContainer.style.height = height.toString() + 'px';\n this.viewerContainer.style.width = Math.ceil(width) + 'px';\n this.visibleBoundsIn = new Rect(0, 0, width, height);\n this.containerCanvas.width = width;\n this.containerCanvas.height = height;\n this.selectionCanvas.width = width;\n this.selectionCanvas.height = height;\n }\n };\n /**\n * Updates client area for block.\n * @private\n */\n LayoutViewer.prototype.updateClientAreaForBlock = function (block, beforeLayout, tableCollection) {\n var leftIndent = HelperMethods.convertPointToPixel(block.leftIndent);\n var rightIndent = HelperMethods.convertPointToPixel(block.rightIndent);\n if (beforeLayout) {\n if (block instanceof TableWidget && tableCollection) {\n var tableWidget = tableCollection[0];\n this.clientActiveArea.x = this.clientArea.x = tableWidget.x;\n this.clientActiveArea.width = this.clientArea.width = tableWidget.width;\n //Updates the location of last item.\n tableWidget = tableCollection[tableCollection.length - 1];\n tableWidget.x = this.clientActiveArea.x;\n tableWidget.y = this.clientActiveArea.y;\n this.clientArea = new Rect(this.clientArea.x, this.clientArea.y, this.clientArea.width, this.clientArea.height);\n // tslint:disable-next-line:max-line-length\n this.clientActiveArea = new Rect(this.clientActiveArea.x, this.clientActiveArea.y, this.clientActiveArea.width, this.clientActiveArea.height);\n }\n else {\n // tslint:disable-next-line:max-line-length\n if (block instanceof TableWidget && !isNullOrUndefined(block.tableFormat) && block.tableFormat.tableAlignment !== 'Left') {\n var tableWidth = this.layout.getTableWidth(block);\n if (block.tableFormat.tableAlignment === 'Center') {\n leftIndent = (this.clientArea.width - tableWidth) / 2;\n }\n else {\n leftIndent = this.clientArea.width - tableWidth;\n }\n this.tableLefts.push(leftIndent);\n }\n this.clientActiveArea.x = this.clientArea.x = this.clientArea.x + leftIndent;\n var width = this.clientArea.width - (leftIndent + rightIndent);\n this.clientActiveArea.width = this.clientArea.width = width > 0 ? width : 0;\n // tslint:disable-next-line:max-line-length\n this.clientArea = new Rect(this.clientArea.x, this.clientArea.y, this.clientArea.width, this.clientArea.height);\n // tslint:disable-next-line:max-line-length\n this.clientActiveArea = new Rect(this.clientActiveArea.x, this.clientActiveArea.y, this.clientActiveArea.width, this.clientActiveArea.height);\n }\n }\n else {\n // tslint:disable-next-line:max-line-length\n if (block instanceof TableWidget && block.tableFormat.tableAlignment !== 'Left' && this.tableLefts.length > 0) {\n leftIndent = this.tableLefts.pop();\n }\n this.clientActiveArea.x = this.clientArea.x = this.clientArea.x - leftIndent;\n var width = this.clientArea.width + leftIndent + rightIndent;\n this.clientActiveArea.width = this.clientArea.width = width > 0 ? width : 0;\n this.clientArea = new Rect(this.clientArea.x, this.clientArea.y, this.clientArea.width, this.clientArea.height);\n // tslint:disable-next-line:max-line-length\n this.clientActiveArea = new Rect(this.clientActiveArea.x, this.clientActiveArea.y, this.clientActiveArea.width, this.clientActiveArea.height);\n }\n };\n /**\n * Updates client active area left.\n * @private\n */\n LayoutViewer.prototype.cutFromLeft = function (x) {\n if (x < this.clientActiveArea.x) {\n x = this.clientActiveArea.x;\n }\n if (x > this.clientActiveArea.right && this.textWrap) {\n x = this.clientActiveArea.right;\n }\n this.clientActiveArea.width = this.clientActiveArea.right > x ? this.clientActiveArea.right - x : 0;\n this.clientActiveArea.x = x;\n };\n /**\n * Updates client active area top.\n * @private\n */\n LayoutViewer.prototype.cutFromTop = function (y) {\n if (y < this.clientActiveArea.y) {\n y = this.clientActiveArea.y;\n }\n if (y > this.clientActiveArea.bottom) {\n y = this.clientActiveArea.bottom;\n }\n this.clientActiveArea.height = this.clientActiveArea.bottom - y;\n this.clientActiveArea.x = this.clientArea.x;\n this.clientActiveArea.width = this.clientArea.width;\n this.clientActiveArea.y = y;\n };\n /**\n * Updates client width.\n * @private\n */\n LayoutViewer.prototype.updateClientWidth = function (width) {\n this.clientActiveArea.x -= width;\n if (this.clientActiveArea.width + width > 0) {\n this.clientActiveArea.width += width;\n }\n else {\n this.clientActiveArea.width = 0;\n }\n };\n /**\n * Inserts page in specified index.\n * @private\n */\n LayoutViewer.prototype.insertPage = function (index, page) {\n if (this.pages.indexOf(page) > -1) {\n this.pages.splice(this.pages.indexOf(page), 1);\n }\n this.pages.splice(this.pages.indexOf(page), 0, page);\n var top = 20;\n if (index > 0) {\n top += this.pages[index - 1].boundingRectangle.bottom;\n }\n for (var i = index; i < this.pages.length; i++) {\n //Update bounding rectangle of next pages in collection.\n page = this.pages[i];\n page.boundingRectangle = new Rect(page.boundingRectangle.x, top, page.boundingRectangle.width, page.boundingRectangle.height);\n top = page.boundingRectangle.bottom + 20;\n }\n };\n /**\n * Updates client area.\n * @private\n */\n LayoutViewer.prototype.updateClientArea = function (sectionFormat, page) {\n var top = 0;\n var headerDistance = 48;\n var footerDistance = 48;\n if (!isNullOrUndefined(sectionFormat)) {\n top = HelperMethods.convertPointToPixel(sectionFormat.topMargin);\n headerDistance = HelperMethods.convertPointToPixel(sectionFormat.headerDistance);\n footerDistance = HelperMethods.convertPointToPixel(sectionFormat.footerDistance);\n }\n if (!isNullOrUndefined(page.headerWidget)) {\n top = Math.max(headerDistance + page.headerWidget.height, top);\n }\n var bottom = 0.667 + HelperMethods.convertPointToPixel(sectionFormat.bottomMargin);\n if (!isNullOrUndefined(page.footerWidget)) {\n // tslint:disable-next-line:max-line-length\n bottom = 0.667 + Math.max(footerDistance + page.footerWidget.height, HelperMethods.convertPointToPixel(sectionFormat.bottomMargin));\n }\n var width = 0;\n var height = 0;\n if (!isNullOrUndefined(sectionFormat)) {\n width = HelperMethods.convertPointToPixel(sectionFormat.pageWidth - sectionFormat.leftMargin - sectionFormat.rightMargin);\n height = HelperMethods.convertPointToPixel(sectionFormat.pageHeight) - top - bottom;\n }\n if (width < 0) {\n width = 0;\n }\n // tslint:disable-next-line:max-line-length\n this.clientArea = new Rect(HelperMethods.convertPointToPixel(sectionFormat.leftMargin), top, width, HelperMethods.convertPointToPixel(sectionFormat.pageHeight) - top - bottom);\n this.clientActiveArea = new Rect(this.clientArea.x, this.clientArea.y, this.clientArea.width, this.clientArea.height);\n };\n /**\n * Updates client area left or top position.\n * @private\n */\n LayoutViewer.prototype.updateClientAreaTopOrLeft = function (tableWidget, beforeLayout) {\n if (beforeLayout) {\n this.clientActiveArea.y = this.clientActiveArea.y + tableWidget.topBorderWidth;\n this.clientActiveArea.x = this.clientActiveArea.x + tableWidget.leftBorderWidth;\n }\n };\n /**\n * Updates client area for table.\n * @private\n */\n LayoutViewer.prototype.updateClientAreaForTable = function (tableWidget) {\n this.clientActiveArea.x = this.clientArea.x = tableWidget.x;\n this.clientActiveArea.width = this.clientArea.width = tableWidget.width;\n };\n /**\n * Updates client area for row.\n * @private\n */\n LayoutViewer.prototype.updateClientAreaForRow = function (row, beforeLayout) {\n // tslint:disable-next-line:max-line-length\n var tableWidget = row.ownerTable;\n if (beforeLayout) {\n //tslint:disable:no-empty\n }\n else {\n this.clientActiveArea.x = this.clientArea.x = tableWidget.x;\n this.clientActiveArea.width = this.clientArea.width = tableWidget.width;\n this.clientArea = new Rect(this.clientArea.x, this.clientArea.y, this.clientArea.width, this.clientArea.height);\n // tslint:disable-next-line:max-line-length\n this.clientActiveArea = new Rect(this.clientActiveArea.x, this.clientActiveArea.y, this.clientActiveArea.width, this.clientActiveArea.height);\n }\n };\n /**\n * Updates client area for cell.\n * @private\n */\n LayoutViewer.prototype.updateClientAreaForCell = function (cell, beforeLayout) {\n // tslint:disable-next-line:max-line-length\n var rowWidget = cell.ownerRow;\n var cellWidget = cell;\n if (beforeLayout) {\n this.clientActiveArea.x = this.clientArea.x = cellWidget.x;\n this.clientActiveArea.y = cellWidget.y;\n this.clientActiveArea.width = this.clientArea.width = cellWidget.width > 0 ? cellWidget.width : 0;\n if (this instanceof PageLayoutViewer) {\n this.clientActiveArea.height = Number.POSITIVE_INFINITY;\n }\n this.clientArea = new Rect(this.clientArea.x, this.clientArea.y, this.clientArea.width, this.clientArea.height);\n // tslint:disable-next-line:max-line-length\n this.clientActiveArea = new Rect(this.clientActiveArea.x, this.clientActiveArea.y, this.clientActiveArea.width, this.clientActiveArea.height);\n }\n else {\n this.clientActiveArea.x = this.clientArea.x = cellWidget.x + cellWidget.width + cellWidget.margin.right;\n if (rowWidget.x + rowWidget.width - this.clientArea.x < 0) {\n this.clientActiveArea.width = this.clientArea.width = 0;\n }\n else {\n this.clientActiveArea.width = this.clientArea.width = rowWidget.x + rowWidget.width - this.clientArea.x;\n }\n // tslint:disable-next-line:max-line-length\n this.clientActiveArea.y = cellWidget.y - cellWidget.margin.top - HelperMethods.convertPointToPixel(cell.ownerTable.tableFormat.cellSpacing);\n if (!cell.ownerTable.isInsideTable) {\n this.clientActiveArea.height = this.clientArea.bottom - rowWidget.y > 0 ? this.clientArea.bottom - rowWidget.y : 0;\n }\n this.clientArea = new Rect(this.clientArea.x, this.clientArea.y, this.clientArea.width, this.clientArea.height);\n // tslint:disable-next-line:max-line-length\n this.clientActiveArea = new Rect(this.clientActiveArea.x, this.clientActiveArea.y, this.clientActiveArea.width, this.clientActiveArea.height);\n }\n };\n //Widget\n /**\n * Updates client area location.\n * @param widget\n * @param area\n * @private\n */\n LayoutViewer.prototype.updateClientAreaLocation = function (widget, area) {\n widget.x = area.x;\n widget.y = area.y;\n widget.width = area.width;\n };\n /**\n * Updates text position for selection.\n * @param cursorPoint\n * @param tapCount\n * @param clearMultiSelection\n * @private\n */\n LayoutViewer.prototype.updateTextPositionForSelection = function (cursorPoint, tapCount) {\n var widget = this.getLineWidget(cursorPoint);\n if (!isNullOrUndefined(widget)) {\n this.selection.updateTextPosition(widget, cursorPoint);\n }\n if (tapCount > 1) {\n this.isMouseDown = false;\n this.useTouchSelectionMark = false;\n if (this.pages.length === 0) {\n return;\n }\n //Double tap/triple tap selection\n if (!isNullOrUndefined(this.currentPage) && !isNullOrUndefined(this.owner.selection.start)) {\n if (tapCount % 2 === 0) {\n this.owner.selection.selectCurrentWord();\n }\n else {\n this.owner.selection.selectCurrentParagraph();\n }\n }\n }\n };\n /**\n * Scrolls to specified position.\n * @param startPosition\n * @param endPosition\n * @private\n */\n LayoutViewer.prototype.scrollToPosition = function (startPosition, endPosition) {\n if (this.owner.enableImageResizerMode && this.owner.imageResizerModule.isImageResizing\n || this.isMouseDownInFooterRegion || this.isRowOrCellResizing) {\n return;\n }\n var lineWidget = this.selection.getLineWidgetInternal(endPosition.currentWidget, endPosition.offset, true);\n if (isNullOrUndefined(lineWidget)) {\n return;\n }\n var top = this.selection.getTop(lineWidget);\n if (this.isMouseDown) {\n var prevLineWidget = this.selection.getLineWidgetInternal(endPosition.currentWidget, endPosition.offset, false);\n var prevTop = this.selection.getTop(prevLineWidget);\n if (prevLineWidget !== lineWidget && endPosition.location.y >= prevTop) {\n lineWidget = prevLineWidget;\n }\n }\n var height = lineWidget.height;\n //Gets current page.\n var endPage = this.selection.getPage(lineWidget.paragraph);\n this.currentPage = endPage;\n var x = 0;\n var y = 0;\n var viewer = this;\n var horizontalWidth = 0;\n var isPageLayout = viewer instanceof PageLayoutViewer;\n if (isPageLayout) {\n var pageLayout = viewer;\n if (isNullOrUndefined(endPage)) {\n return;\n }\n var pageWidth = endPage.boundingRectangle.width;\n x = (this.visibleBounds.width - pageWidth * this.zoomFactor) / 2;\n if (x < 30) {\n x = 30;\n }\n // tslint:disable-next-line:max-line-length\n y = endPage.boundingRectangle.y * this.zoomFactor + (this.pages.indexOf(endPage) + 1) * viewer.pageGap * (1 - this.zoomFactor);\n }\n var scrollTop = this.containerTop;\n var scrollLeft = this.containerLeft;\n var pageHeight = this.visibleBounds.height;\n var caretInfo = this.selection.updateCaretSize(this.owner.selection.end, true);\n var topMargin = caretInfo.topMargin;\n var caretHeight = caretInfo.height;\n x += (endPosition.location.x) * this.zoomFactor;\n y += (endPosition.location.y + topMargin) * this.zoomFactor;\n //vertical scroll bar update\n if ((scrollTop + 20) > y) {\n this.viewerContainer.scrollTop = (y - 10);\n }\n else if (scrollTop + pageHeight < y + caretHeight) {\n this.viewerContainer.scrollTop = y + caretHeight - pageHeight + 10;\n }\n else {\n this.selection.updateCaretToPage(startPosition, endPage);\n }\n this.selection.updateCaretToPage(startPosition, endPage);\n var scrollBarWidth = this.viewerContainer.offsetWidth - this.viewerContainer.clientWidth;\n if (scrollLeft > x) {\n this.viewerContainer.scrollLeft = x - (viewer.pageContainer.offsetWidth / 100) * 20;\n }\n else if (scrollLeft + this.visibleBounds.width < x + scrollBarWidth) {\n this.viewerContainer.scrollLeft = scrollLeft + (viewer.pageContainer.offsetWidth / 100) * 15 + scrollBarWidth;\n }\n };\n /**\n * Gets line widget using cursor point.\n * @private\n */\n LayoutViewer.prototype.getLineWidget = function (cursorPoint) {\n return this.getLineWidgetInternal(cursorPoint, false);\n };\n /**\n * Gets line widget.\n * @private\n */\n LayoutViewer.prototype.getLineWidgetInternal = function (cursorPoint, isMouseDragged) {\n var widget = undefined;\n if (!isNullOrUndefined(this.currentPage)) {\n var childWidgets = void 0;\n if (this.owner.enableHeaderAndFooter) {\n var page = this.currentPage;\n var pageTop = this.selection.getPageTop(page);\n var pageBottom = page.boundingRectangle.height;\n var headerHeight = Math.max((page.headerWidget.y + page.headerWidget.height), HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.topMargin)) * this.zoomFactor;\n var footerDistance = HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.footerDistance);\n var footerHeight = (page.boundingRectangle.height -\n Math.max(page.footerWidget.height + footerDistance, footerDistance * 2));\n if (isMouseDragged) {\n if (this.isBlockInHeader(this.selection.start.paragraph)) {\n childWidgets = this.currentPage.headerWidget;\n }\n else {\n childWidgets = this.currentPage.footerWidget;\n }\n }\n else {\n if (cursorPoint.y <= pageBottom && cursorPoint.y >= footerHeight) {\n childWidgets = this.currentPage.footerWidget;\n }\n else if ((cursorPoint.y) >= 0 && (cursorPoint.y) <= headerHeight) {\n childWidgets = this.currentPage.headerWidget;\n }\n }\n if (isNullOrUndefined(childWidgets)) {\n return undefined;\n }\n return this.selection.getLineWidgetBodyWidget(childWidgets, cursorPoint);\n }\n else {\n for (var i = 0; i < this.currentPage.bodyWidgets.length; i++) {\n var bodyWidgets = this.currentPage.bodyWidgets[i];\n widget = this.selection.getLineWidgetBodyWidget(bodyWidgets, cursorPoint);\n if (!isNullOrUndefined(widget)) {\n break;\n }\n }\n }\n }\n return widget;\n };\n /**\n * @private\n */\n LayoutViewer.prototype.isBlockInHeader = function (block) {\n while (!(block.containerWidget instanceof HeaderFooterWidget)) {\n if (!block.containerWidget) {\n return false;\n }\n block = block.containerWidget;\n }\n return block.containerWidget.headerFooterType.indexOf('Header') !== -1;\n };\n /**\n * Clears selection highlight.\n * @private\n */\n LayoutViewer.prototype.clearSelectionHighlight = function () {\n var canClear = true;\n canClear = (!this.isControlPressed || !this.isMouseDown);\n // if (this.owner.selection.selectionRanges.length > 0 && canClear) {\n if (this.owner.selection.clearSelectionHighlightInSelectedWidgets()) {\n this.selectionContext.clearRect(0, 0, this.selectionCanvas.width, this.selectionCanvas.height);\n }\n // } else if (!isNullOrUndefined(this.owner.selection.currentSelectionRange) && this.isMouseDown) {\n // this.owner.selection.currentSelectionRange.clearSelectionHighlight();\n // }\n //this.renderVisiblePages();\n };\n /**\n * @private\n */\n LayoutViewer.prototype.removeEmptyPages = function () {\n var scrollToLastPage = false;\n var viewer = this;\n for (var j = 0; j < this.pages.length; j++) {\n var page = this.pages[j];\n if (page.bodyWidgets.length === 0 || page.bodyWidgets[0].childWidgets.length === 0) {\n // tslint:disable-next-line:max-line-length\n if (j === this.pages.length - 1 && viewer instanceof PageLayoutViewer && viewer.visiblePages.indexOf(this.pages[j]) !== -1) {\n scrollToLastPage = true;\n }\n this.removePage(this.pages[j]);\n j--;\n }\n }\n if (scrollToLastPage) {\n this.scrollToBottom();\n }\n };\n /**\n * @private\n */\n LayoutViewer.prototype.scrollToBottom = function () {\n if (this.selection.start.paragraph && this.selection.start.paragraph.bodyWidget) {\n var page = this.selection.start.paragraph.bodyWidget.page;\n var containerHeight = this.visibleBounds.height;\n this.viewerContainer.scrollTop = page.boundingRectangle.bottom - containerHeight;\n }\n };\n /**\n * Returns the field code result.\n * @private\n */\n LayoutViewer.prototype.getFieldResult = function (fieldBegin, page) {\n if (!isNullOrUndefined(page) && !isNullOrUndefined(this.selection)) {\n var fieldCode = this.selection.getFieldCode(fieldBegin);\n var fieldCodes = fieldCode.split('\\*');\n if (fieldCodes.length > 1) {\n var fieldCategory = fieldCodes[0].replace(/[^\\w\\s]/gi, '').trim().toLowerCase();\n var fieldPattern = fieldCodes[1].replace(/[^\\w\\s]/gi, '').trim();\n switch (fieldCategory) {\n case 'page':\n return this.getFieldText(fieldPattern, (page.index + 1));\n case 'numpages':\n return this.getFieldText(fieldPattern, page.viewer.pages.length);\n default:\n break;\n }\n }\n }\n return '';\n };\n /**\n * Returns field text.\n */\n LayoutViewer.prototype.getFieldText = function (pattern, value) {\n switch (pattern) {\n case 'ALPHABETIC':\n return this.layout.getAsLetter(value).toUpperCase();\n case 'alphabetic':\n return this.layout.getAsLetter(value).toLowerCase();\n case 'roman':\n return this.layout.getAsRoman(value).toLowerCase();\n case 'ROMAN':\n return this.layout.getAsRoman(value).toUpperCase();\n default:\n return value.toString();\n }\n };\n /**\n * Destroys the internal objects maintained for control.\n */\n LayoutViewer.prototype.destroy = function () {\n if (!isNullOrUndefined(this.owner)) {\n this.unWireEvent();\n }\n this.pages = [];\n this.pages = undefined;\n this.fieldStacks = [];\n this.fieldStacks = undefined;\n this.splittedCellWidgets = [];\n this.splittedCellWidgets = undefined;\n this.fields = [];\n this.fields = undefined;\n if (this.layout) {\n this.layout.destroy();\n }\n this.layout = undefined;\n if (!isNullOrUndefined(this.render)) {\n this.render.destroy();\n }\n this.render = undefined;\n if (this.dialogInternal) {\n this.dialogInternal.destroy();\n }\n this.dialogInternal = undefined;\n if (this.dialogTarget && this.dialogTarget.parentElement) {\n this.dialogTarget.parentElement.removeChild(this.dialogTarget);\n }\n this.dialogTarget = undefined;\n if (!isNullOrUndefined(this.touchStart)) {\n this.touchStart.innerHTML = '';\n }\n if (this.textHelper) {\n this.textHelper.destroy();\n }\n this.textHelper = undefined;\n this.touchStart = undefined;\n if (!isNullOrUndefined(this.touchEnd)) {\n this.touchEnd.innerHTML = '';\n }\n this.touchEnd = undefined;\n if (!isNullOrUndefined(this.containerCanvasIn)) {\n this.containerCanvasIn.innerHTML = '';\n }\n this.containerCanvasIn = undefined;\n if (!isNullOrUndefined(this.selectionCanvasIn)) {\n this.selectionCanvasIn.innerHTML = '';\n }\n this.selectionCanvasIn = undefined;\n if (!isNullOrUndefined(this.editableDiv)) {\n this.editableDiv.innerHTML = '';\n }\n this.editableDiv = undefined;\n if (!isNullOrUndefined(this.pageContainer)) {\n this.pageContainer.innerHTML = '';\n }\n this.pageContainer = undefined;\n if (!isNullOrUndefined(this.viewerContainer)) {\n this.viewerContainer.innerHTML = '';\n }\n this.viewerContainer = undefined;\n this.owner = undefined;\n this.heightInfoCollection = undefined;\n };\n /**\n * Un-Wires events and methods\n */\n LayoutViewer.prototype.unWireEvent = function () {\n this.viewerContainer.removeEventListener('scroll', this.scrollHandler);\n this.viewerContainer.removeEventListener('mousedown', this.onMouseDownInternal);\n this.viewerContainer.removeEventListener('mousemove', this.onMouseMoveInternal);\n this.editableDiv.removeEventListener('input', this.onTextInputInternal);\n this.editableDiv.removeEventListener('paste', this.onPaste);\n this.viewerContainer.removeEventListener('contextmenu', this.onContextMenu);\n this.editableDiv.removeEventListener('blur', this.onFocusOut);\n this.editableDiv.removeEventListener('keydown', this.onKeyDownInternal);\n this.editableDiv.removeEventListener('compositionstart', this.compositionStart);\n this.editableDiv.removeEventListener('compositionupdate', this.compositionUpdated);\n this.editableDiv.removeEventListener('compositionend', this.compositionEnd);\n this.viewerContainer.removeEventListener('mouseup', this.onMouseUpInternal);\n this.viewerContainer.removeEventListener('dblclick', this.onDoubleTap);\n window.removeEventListener('resize', this.onWindowResize);\n window.removeEventListener('keyup', this.onKeyUpInternal);\n window.removeEventListener('mouseup', this.onImageResizer);\n window.removeEventListener('touchend', this.onImageResizer);\n };\n return LayoutViewer;\n}());\nexport { LayoutViewer };\n/**\n * @private\n */\nvar PageLayoutViewer = /** @class */ (function (_super) {\n __extends(PageLayoutViewer, _super);\n /**\n * Initialize the constructor of PageLayoutViewer\n */\n function PageLayoutViewer(owner) {\n var _this = _super.call(this, owner) || this;\n _this.pageLeft = 30;\n /**\n * @private\n */\n _this.pageGap = 20;\n /**\n * @private\n */\n _this.visiblePages = [];\n if (isNullOrUndefined(owner) || isNullOrUndefined(owner.element)) {\n return _this;\n }\n return _this;\n }\n /**\n * Creates new page.\n * @private\n */\n PageLayoutViewer.prototype.createNewPage = function (section, index) {\n var viewer = this;\n var yPos = this.pageGap;\n if (this.pages.length > 0) {\n yPos = this.pages[this.pages.length - 1].boundingRectangle.bottom + this.pageGap;\n }\n var page = new Page();\n page.viewer = this;\n // tslint:disable-next-line:max-line-length\n var pageWidth = !isNullOrUndefined(section.sectionFormat) ? HelperMethods.convertPointToPixel(section.sectionFormat.pageWidth) : 816;\n // tslint:disable-next-line:max-line-length\n var pageHeight = !isNullOrUndefined(section.sectionFormat) ? HelperMethods.convertPointToPixel(section.sectionFormat.pageHeight) : 1056;\n var xPos = (this.visibleBounds.width - pageWidth * this.zoomFactor) / 2;\n if (xPos < this.pageLeft) {\n xPos = this.pageLeft;\n }\n page.boundingRectangle = new Rect(xPos, yPos, pageWidth, pageHeight);\n if (isNullOrUndefined(index)) {\n this.pages.push(page);\n }\n else {\n this.pages.splice(index, 0, page);\n }\n this.updateClientArea(section.sectionFormat, page);\n page.bodyWidgets.push(section);\n page.bodyWidgets[page.bodyWidgets.length - 1].page = page;\n this.layout.layoutHeaderFooter(section, viewer, page);\n this.updateClientArea(section.sectionFormat, page);\n return page;\n };\n /**\n * Updates cursor.\n */\n PageLayoutViewer.prototype.updateCursor = function (event) {\n var hyperlinkField = undefined;\n var div = this.viewerContainer;\n var point = new Point(event.offsetX, event.offsetY);\n var touchPoint = this.findFocusedPage(point, true);\n var widget = this.getLineWidget(touchPoint);\n var widgetInfo;\n var left;\n var top;\n var editor = !this.owner.isReadOnlyMode ? this.owner.editorModule : undefined;\n var isRowResize = editor ? editor.tableResize.isInRowResizerArea(touchPoint) : false;\n var isCellResize = editor ? editor.tableResize.isInCellResizerArea(touchPoint) : false;\n var resizePosition = '';\n if (this.owner.enableImageResizerMode) {\n var resizeObj = this.owner.imageResizerModule.getImagePoint(touchPoint);\n this.owner.imageResizerModule.selectedResizeElement = resizeObj.selectedElement;\n resizePosition = resizeObj.resizePosition;\n }\n var lineLeft = 0;\n if (!isNullOrUndefined(widget)) {\n lineLeft = this.selection.getLineStartLeft(widget);\n hyperlinkField = this.selection.getHyperLinkFieldInCurrentSelection(widget, touchPoint);\n widgetInfo = this.selection.updateTextPositionIn(widget, undefined, 0, touchPoint, true);\n left = this.selection.getLeft(widget);\n top = this.selection.getTop(widget);\n this.selection.setHyperlinkContentToToolTip(hyperlinkField, widget, touchPoint.x);\n }\n if (!isNullOrUndefined(hyperlinkField) && (event.ctrlKey &&\n this.owner.useCtrlClickToFollowHyperlink || !this.owner.useCtrlClickToFollowHyperlink)) {\n div.style.cursor = 'pointer';\n return;\n }\n else if (touchPoint.x >= lineLeft &&\n event.offsetX < (this.visibleBounds.width - (this.visibleBounds.width - this.viewerContainer.clientWidth)) &&\n event.offsetY < (this.visibleBounds.height - (this.visibleBounds.height - this.viewerContainer.clientHeight))) {\n if (this.selection.isEmpty) {\n div.style.cursor = 'text';\n }\n else {\n div.style.cursor = this.selection.checkCursorIsInSelection(widget, touchPoint) ? 'default' : 'text';\n }\n }\n else {\n div.style.cursor = 'default';\n }\n if (!isNullOrUndefined(resizePosition) && resizePosition !== '') {\n div.style.cursor = resizePosition;\n }\n else if (!isNullOrUndefined(widgetInfo) && widgetInfo.isImageSelected && left < touchPoint.x && top < touchPoint.y &&\n left + widget.width > touchPoint.x && top + widget.height > touchPoint.y) {\n div.style.cursor = 'move';\n }\n if (isRowResize) {\n div.style.cursor = 'row-resize';\n }\n else if (isCellResize) {\n div.style.cursor = 'col-resize';\n }\n };\n /**\n * Finds focused page.\n * @private\n */\n PageLayoutViewer.prototype.findFocusedPage = function (currentPoint, updateCurrentPage) {\n var point = new Point(currentPoint.x, currentPoint.y);\n point.x += this.viewerContainer.scrollLeft;\n point.y += this.viewerContainer.scrollTop;\n for (var i = 0; i < this.pages.length; i++) {\n var page = this.pages[i];\n var pageTop = (page.boundingRectangle.y - this.pageGap * (i + 1)) * this.zoomFactor + this.pageGap * (i + 1);\n var pageHeight = (page.boundingRectangle.height * this.zoomFactor) + this.pageGap;\n var pageLeft = page.boundingRectangle.x;\n var pageRight = ((page.boundingRectangle.right - pageLeft) * this.zoomFactor) + pageLeft;\n if (pageTop <= point.y && pageTop + pageHeight >= point.y) {\n if (updateCurrentPage) {\n this.currentPage = page;\n }\n point.y = (point.y - (pageTop)) / this.zoomFactor;\n if (point.x > pageRight) {\n point.x = page.boundingRectangle.right;\n }\n else if (point.x < pageLeft) {\n point.x = 0;\n }\n else {\n point.x = (point.x - pageLeft) / this.zoomFactor;\n }\n return point;\n }\n }\n return point;\n };\n /**\n * Fired when page fit type changed.\n * @private\n */\n PageLayoutViewer.prototype.onPageFitTypeChanged = function (pageFitType) {\n var width = this.visibleBounds.width;\n var height = this.visibleBounds.height;\n var section = this.visiblePages[0].bodyWidgets[0];\n var pageWidth = HelperMethods.convertPointToPixel(section.sectionFormat.pageWidth);\n var pageHeight = HelperMethods.convertPointToPixel(section.sectionFormat.pageHeight);\n switch (pageFitType) {\n case 'FitOnePage':\n if (height > 0 && pageHeight > 0) {\n var zoomFactor = (this.visibleBounds.height - 2 * this.pageGap - (this.pageGap - 2)) / pageHeight;\n if (zoomFactor === this.zoomFactor) {\n if (!isNullOrUndefined(this.owner.selection) && !isNullOrUndefined(this.owner.selection.start) &&\n !isNullOrUndefined(this.owner.selection.end)) {\n this.scrollToPosition(this.owner.selection.start, this.owner.selection.end);\n }\n }\n else {\n this.zoomFactor = zoomFactor;\n }\n }\n break;\n case 'FitPageWidth':\n if (width > 0 && pageWidth > 0) {\n this.zoomFactor = (this.visibleBounds.width - 80) / pageWidth;\n }\n break;\n default:\n this.zoomFactor = 100 / 100;\n break;\n }\n };\n /**\n * @private\n */\n PageLayoutViewer.prototype.handleZoom = function () {\n var prevScaleFactor = this.preZoomFactor;\n var page = null;\n var verticalHeight = 0;\n var scrollToPosition = false;\n if (this.selection && isNullOrUndefined(this.zoomX && isNullOrUndefined(this.zoomY))) {\n var x = 0;\n var y = 0;\n var endPage = this.selection.getPage(this.selection.end.currentWidget.paragraph);\n x = (this.visibleBounds.width - endPage.boundingRectangle.width * prevScaleFactor) / 2;\n if (x < 30) {\n x = 30;\n }\n // tslint:disable-next-line:max-line-length\n y = endPage.boundingRectangle.y * prevScaleFactor + (this.pages.indexOf(endPage) + 1) * this.pageGap * (1 - prevScaleFactor);\n var caretInfo = this.selection.updateCaretSize(this.owner.selection.end, true);\n var topMargin = caretInfo.topMargin;\n var caretHeight = caretInfo.height;\n x += (this.selection.end.location.x) * prevScaleFactor;\n y += (this.selection.end.location.y + topMargin) * prevScaleFactor;\n if (x >= this.containerLeft && x <= this.visibleBounds.width &&\n y >= this.containerTop && y <= this.containerTop + this.visibleBounds.height) {\n scrollToPosition = true;\n }\n }\n for (var i = 0; i < this.pages.length; i++) {\n verticalHeight = verticalHeight + this.pages[i].boundingRectangle.height;\n }\n var horizontalWidth = 0;\n for (var i = 0; i < this.pages.length; i++) {\n if (horizontalWidth < this.pages[i].boundingRectangle.width) {\n horizontalWidth = this.pages[i].boundingRectangle.width;\n }\n }\n // tslint:disable-next-line:max-line-length\n var height = (verticalHeight * this.zoomFactor + (this.pages.length + 1) * this.pageGap * (1 - this.zoomFactor)) - this.visibleBounds.height;\n var horWidth = horizontalWidth * this.zoomFactor - this.visibleBounds.width;\n if (this.visibleBounds.width - horizontalWidth * this.zoomFactor < 60) {\n horWidth += 60;\n }\n //Update Vertical Scroll bar\n if (height > 0) {\n var value = this.containerTop;\n if (this.visiblePages.length > 0) {\n page = this.visiblePages[0];\n // tslint:disable-next-line:max-line-length\n var prevPageTop = (page.boundingRectangle.y - (page.index + 1) * this.pageGap) * prevScaleFactor + (page.index + 1) * this.pageGap;\n var zoomY = this.zoomY;\n if (isNullOrUndefined) {\n zoomY = this.visibleBounds.height / 2;\n }\n var prevY = value + zoomY;\n while (prevY > prevPageTop + (page.boundingRectangle.height * prevScaleFactor)) {\n var pageIndex = page.index + 1;\n if (pageIndex === this.pages.length) {\n break;\n }\n page = this.pages[pageIndex];\n // tslint:disable-next-line:max-line-length\n prevPageTop = (page.boundingRectangle.y - (page.index + 1) * this.pageGap) * prevScaleFactor + (page.index + 1) * this.pageGap;\n }\n // tslint:disable-next-line:max-line-length\n var currentY = (page.boundingRectangle.y - (page.index + 1) * this.pageGap) * this.zoomFactor + (page.index + 1) * this.pageGap\n + ((prevY - prevPageTop) < 0 ? prevY - prevPageTop : (prevY - prevPageTop) * (this.zoomFactor / prevScaleFactor));\n value = currentY - zoomY;\n zoomY = this.visibleBounds.height / 2;\n }\n this.viewerContainer.scrollTop = value;\n }\n else {\n this.viewerContainer.scrollTop = 0;\n }\n // update Horizontal Scroll Bar\n if (horWidth > 0) {\n var value = this.containerLeft;\n if (this.visiblePages.length > 0) {\n if (page === null) {\n page = this.visiblePages[0];\n }\n var zoomX = this.zoomX;\n if (isNullOrUndefined(zoomX)) {\n zoomX = this.visibleBounds.width / 2;\n }\n var prevValue = (page.boundingRectangle.width * prevScaleFactor) / page.boundingRectangle.width;\n var prevX = value + zoomX;\n // tslint:disable-next-line:max-line-length\n var currentX = page.boundingRectangle.x\n + ((prevX - page.boundingRectangle.x) < 0 ? prevX - page.boundingRectangle.x : (prevX - page.boundingRectangle.x) * (this.zoomFactor / prevValue));\n value = currentX - zoomX;\n zoomX = this.visibleBounds.width / 2;\n }\n this.viewerContainer.scrollLeft = value;\n }\n else {\n this.viewerContainer.scrollLeft = 0;\n }\n this.updateScrollBars();\n if (scrollToPosition) {\n this.scrollToPosition(this.selection.start, this.selection.end);\n }\n };\n /**\n * Gets current page header footer.\n * @private\n */\n PageLayoutViewer.prototype.getCurrentPageHeaderFooter = function (section, isHeader) {\n return this.getCurrentHeaderFooter(this.getHeaderFooterType(section, isHeader), section.index);\n };\n /**\n * Get header footer type\n * @private\n */\n PageLayoutViewer.prototype.getHeaderFooterType = function (section, isHeader) {\n var type;\n type = isHeader ? 'OddHeader' : 'OddFooter';\n // tslint:disable-next-line:max-line-length\n if (section.sectionFormat.differentFirstPage && (this.pages.length === 1 || this.pages[this.pages.length - 1].bodyWidgets[0].index !== section.index)) {\n type = isHeader ? 'FirstPageHeader' : 'FirstPageFooter';\n }\n else if (section.sectionFormat.differentOddAndEvenPages && this.pages.length % 2 === 0) {\n type = isHeader ? 'EvenHeader' : 'EvenFooter';\n }\n return type;\n };\n /**\n * Gets current header footer.\n * @param type\n * @param section\n * @private\n */\n PageLayoutViewer.prototype.getCurrentHeaderFooter = function (type, sectionIndex) {\n if (this.headersFooters[sectionIndex]) {\n var index = this.getHeaderFooter(type);\n var headerFooter = this.headersFooters[sectionIndex][index];\n if (!headerFooter) {\n headerFooter = this.createHeaderFooterWidget(type);\n this.headersFooters[sectionIndex][index] = headerFooter;\n }\n return headerFooter;\n }\n else if (sectionIndex > 0) {\n return this.getCurrentHeaderFooter(type, sectionIndex - 1);\n }\n return undefined;\n };\n PageLayoutViewer.prototype.createHeaderFooterWidget = function (type) {\n var headerFooter = new HeaderFooterWidget(type);\n var paragraph = new ParagraphWidget();\n paragraph.childWidgets.push(new LineWidget(paragraph));\n return headerFooter;\n };\n /**\n * Gets header footer.\n * @param type\n * @private\n */\n PageLayoutViewer.prototype.getHeaderFooter = function (type) {\n switch (type) {\n case 'OddHeader':\n return 0;\n case 'OddFooter':\n return 1;\n case 'EvenHeader':\n return 2;\n case 'EvenFooter':\n return 3;\n case 'FirstPageHeader':\n return 4;\n case 'FirstPageFooter':\n return 5;\n }\n };\n /**\n * Updates header footer client area.\n * @private\n */\n PageLayoutViewer.prototype.updateHFClientArea = function (sectionFormat, isHeader) {\n // tslint:disable-next-line:max-line-length\n var width = HelperMethods.convertPointToPixel(sectionFormat.pageWidth - sectionFormat.leftMargin - sectionFormat.rightMargin);\n if (width < 0) {\n width = 0;\n }\n if (isHeader) {\n // tslint:disable-next-line:max-line-length\n this.clientArea = new Rect(HelperMethods.convertPointToPixel(sectionFormat.leftMargin), HelperMethods.convertPointToPixel(sectionFormat.headerDistance), width, HelperMethods.convertPointToPixel(sectionFormat.pageHeight) - HelperMethods.convertPointToPixel(sectionFormat.headerDistance));\n }\n else {\n // tslint:disable-next-line:max-line-length\n this.clientArea = new Rect(HelperMethods.convertPointToPixel(sectionFormat.leftMargin), HelperMethods.convertPointToPixel(sectionFormat.pageHeight - sectionFormat.footerDistance), width, HelperMethods.convertPointToPixel(sectionFormat.pageHeight - sectionFormat.footerDistance));\n }\n this.clientActiveArea = new Rect(this.clientArea.x, this.clientArea.y, this.clientArea.width, this.clientArea.height);\n };\n /**\n * @private\n */\n PageLayoutViewer.prototype.updateHCFClientAreaWithTop = function (sectionFormat, isHeader, page) {\n this.updateHFClientArea(sectionFormat, isHeader);\n if (!isHeader) {\n if (page.footerWidget.y < this.clientActiveArea.y) {\n // tslint:disable-next-line:max-line-length\n var height = HelperMethods.convertPointToPixel(sectionFormat.pageHeight - sectionFormat.footerDistance) - page.footerWidget.height;\n this.clientActiveArea.y = page.footerWidget.y;\n this.clientActiveArea.height = height;\n }\n }\n };\n /**\n * Scrolls to the specified page\n * @private\n */\n PageLayoutViewer.prototype.scrollToPage = function (pageIndex) {\n var top = 0;\n for (var i = 0; i < this.pages.length; i++) {\n top = this.pages[i].boundingRectangle.y - (this.pageGap / 2);\n if (i === pageIndex) {\n break;\n }\n }\n this.viewerContainer.scrollTop = top;\n this.updateScrollBars();\n };\n /**\n * Updates scroll bars.\n * @private\n */\n PageLayoutViewer.prototype.updateScrollBars = function () {\n var height = 0;\n for (var i = 0; i < this.pages.length; i++) {\n height = height + this.pages[i].boundingRectangle.height;\n }\n var width = 0;\n for (var i = 0; i < this.pages.length; i++) {\n if (width < this.pages[i].boundingRectangle.width) {\n width = this.pages[i].boundingRectangle.width;\n }\n }\n var containerWidth = (width * this.zoomFactor) + (this.pageLeft * 2);\n var containerHeight = (height * this.zoomFactor) + (this.pages.length + 1) * this.pageGap;\n var viewerWidth = this.visibleBounds.width;\n var viewerHeight = this.visibleBounds.height;\n if (this.visibleBounds.width !== this.viewerContainer.clientWidth) {\n viewerWidth -= (this.visibleBounds.width - this.viewerContainer.clientWidth);\n }\n else if (containerHeight > viewerHeight) {\n viewerWidth -= this.viewerContainer.offsetWidth - this.viewerContainer.clientWidth;\n }\n if (containerWidth > viewerWidth) {\n viewerHeight -= (this.visibleBounds.height - this.viewerContainer.clientHeight);\n }\n width = containerWidth > viewerWidth ? containerWidth : viewerWidth;\n height = containerHeight > viewerHeight ? containerHeight : viewerHeight;\n if (parseInt(this.pageContainer.style.width.replace('px', ''), 10) !== width ||\n parseInt(this.pageContainer.style.height.replace('px', ''), 10) !== width) {\n this.pageContainer.style.width = width.toString() + 'px';\n this.pageContainer.style.height = height.toString() + 'px';\n }\n // if (!isNullOrUndefined(this.selection) && !this.selection.isEmpty) {\n // this.selectionContext.clearRect(0, 0, this.selectionCanvas.width, this.selectionCanvas.height);\n // }\n var displayPixelRatio = Math.max(1, window.devicePixelRatio || 1);\n if (this.containerCanvas.width !== Math.floor(viewerWidth * displayPixelRatio)\n || this.containerCanvas.height !== Math.floor(viewerHeight * displayPixelRatio)) {\n this.containerCanvas.width = viewerWidth * displayPixelRatio;\n this.containerCanvas.height = viewerHeight * displayPixelRatio;\n this.containerCanvas.style.width = viewerWidth + 'px';\n this.containerCanvas.style.height = viewerHeight + 'px';\n this.containerContext.scale(displayPixelRatio, displayPixelRatio);\n this.selectionCanvas.width = viewerWidth * displayPixelRatio;\n this.selectionCanvas.height = viewerHeight * displayPixelRatio;\n this.selectionCanvas.style.width = viewerWidth + 'px';\n this.selectionCanvas.style.height = viewerHeight + 'px';\n this.selectionContext.scale(displayPixelRatio, displayPixelRatio);\n }\n this.containerContext.globalAlpha = 1;\n this.selectionContext.globalAlpha = 0.4;\n for (var i = 0; i < this.pages.length; i++) {\n var left = (width - this.pages[i].boundingRectangle.width * this.zoomFactor) / 2;\n if (left > this.pageLeft) {\n // tslint:disable-next-line:max-line-length\n this.pages[i].boundingRectangle = new Rect(left, this.pages[i].boundingRectangle.y, this.pages[i].boundingRectangle.width, this.pages[i].boundingRectangle.height);\n }\n else {\n // tslint:disable-next-line:max-line-length\n this.pages[i].boundingRectangle = new Rect(this.pageLeft, this.pages[i].boundingRectangle.y, this.pages[i].boundingRectangle.width, this.pages[i].boundingRectangle.height);\n }\n }\n this.updateScrollBarPosition(containerWidth, containerHeight, viewerWidth, viewerHeight, width, height);\n };\n // tslint:disable-next-line:max-line-length\n PageLayoutViewer.prototype.updateScrollBarPosition = function (containerWidth, containerHeight, viewerWidth, viewerHeight, width, height) {\n var left = 0;\n var viewerHeight1 = parseFloat(this.viewerContainer.style.height);\n var containerHeight1 = parseFloat(this.pageContainer.style.height);\n this.containerTop = this.viewerContainer.scrollTop;\n this.containerCanvas.style.position = 'absolute';\n this.containerCanvas.style.top = this.containerTop.toString() + 'px';\n this.selectionCanvas.style.position = 'absolute';\n this.selectionCanvas.style.top = this.containerTop.toString() + 'px';\n this.containerLeft = this.viewerContainer.scrollLeft;\n this.containerCanvas.style.left = this.containerLeft + 'px';\n this.selectionCanvas.style.left = this.containerLeft + 'px';\n this.updateVisiblePages();\n };\n /**\n * Updates visible pages.\n * @private\n */\n PageLayoutViewer.prototype.updateVisiblePages = function () {\n var left = 0;\n var width = 0;\n // Clears the container first.\n this.visiblePages = [];\n var height = this.visibleBounds.height;\n var vertical = this.viewerContainer.scrollTop;\n for (var i = 0; i < this.pages.length; i++) {\n var page = this.pages[i];\n var y = (page.boundingRectangle.y - this.pageGap * (i + 1)) * this.zoomFactor + this.pageGap * (i + 1);\n var pageH = page.boundingRectangle.height * this.zoomFactor;\n var left_1 = page.boundingRectangle.x;\n var isTopFit = y >= vertical && y <= vertical + height;\n var isBottomFit = y + pageH >= vertical && y + pageH <= vertical + height;\n var isMiddleFit = y <= vertical && y + pageH >= vertical + height;\n //UI Virtualization\n if (isTopFit || isBottomFit || isMiddleFit) {\n this.addVisiblePage(page, left_1, y);\n }\n }\n };\n /**\n * Adds visible pages.\n */\n PageLayoutViewer.prototype.addVisiblePage = function (page, x, y) {\n var width = page.boundingRectangle.width * this.zoomFactor;\n var height = page.boundingRectangle.height * this.zoomFactor;\n // tslint:disable-next-line:max-line-length\n if (this.owner.enableImageResizerMode && this.owner.imageResizerModule.currentPage !== undefined && this.owner.imageResizerModule.currentPage === page && this.owner.imageResizerModule.isImageResizerVisible) {\n this.owner.imageResizerModule.setImageResizerPositions(x, y, width, height);\n }\n this.visiblePages.push(page);\n this.renderPage(page, x, y, width, height);\n };\n /**\n * Render specified page widgets.\n */\n PageLayoutViewer.prototype.renderPage = function (page, x, y, width, height) {\n this.render.renderWidgets(page, x - this.containerLeft, y - this.containerTop, width, height);\n };\n /**\n * Renders visible pages.\n * @private\n */\n PageLayoutViewer.prototype.renderVisiblePages = function () {\n if (isNullOrUndefined(this.visiblePages) || this.visiblePages.length < 1) {\n return;\n }\n this.clearContent();\n for (var i = 0; i < this.visiblePages.length; i++) {\n var page = this.visiblePages[i];\n var width = page.boundingRectangle.width * this.zoomFactor;\n var height = page.boundingRectangle.height * this.zoomFactor;\n var x = page.boundingRectangle.x;\n var y = (page.boundingRectangle.y - this.pageGap * (i + 1)) * this.zoomFactor + this.pageGap * (i + 1);\n this.renderPage(page, x, y, width, height);\n }\n };\n return PageLayoutViewer;\n}(LayoutViewer));\nexport { PageLayoutViewer };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { WList } from '../list/list';\nimport { WListLevel } from '../list/list-level';\nimport { WAbstractList } from '../list/abstract-list';\nimport { WLevelOverride } from '../list/level-override';\nimport { WCharacterFormat, WListFormat, WParagraphFormat, WCellFormat, WTableFormat, WSectionFormat, WRowFormat } from '../format/index';\nimport { WCharacterStyle, WParagraphStyle, WTabStop } from '../format/index';\nimport { LineWidget, ParagraphWidget, ImageElementBox, BodyWidget, TextElementBox, TableCellWidget, TableRowWidget, TableWidget, FieldElementBox, HeaderFooterWidget, BookmarkElementBox, FieldTextElementBox, TabElementBox } from './page';\nimport { HelperMethods } from '../editor/editor-helper';\n/**\n * @private\n */\nvar SfdtReader = /** @class */ (function () {\n function SfdtReader(viewer) {\n /* tslint:disable:no-any */\n this.viewer = undefined;\n this.viewer = viewer;\n }\n Object.defineProperty(SfdtReader.prototype, \"isPasting\", {\n get: function () {\n return this.viewer && this.viewer.owner.isPastingContent;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n * @param json\n */\n SfdtReader.prototype.convertJsonToDocument = function (json) {\n var sections = [];\n var jsonObject = JSON.parse(json);\n this.parseCharacterFormat(jsonObject.characterFormat, this.viewer.characterFormat);\n this.parseParagraphFormat(jsonObject.paragraphFormat, this.viewer.paragraphFormat);\n if (!isNullOrUndefined(jsonObject.background)) {\n this.viewer.backgroundColor = this.getColor(jsonObject.background.color);\n }\n if (!isNullOrUndefined(jsonObject.abstractLists)) {\n this.parseAbstractList(jsonObject, this.viewer.abstractLists);\n }\n if (!isNullOrUndefined(jsonObject.lists)) {\n this.parseList(jsonObject, this.viewer.lists);\n }\n if (!isNullOrUndefined(jsonObject.styles)) {\n this.parseStyles(jsonObject, this.viewer.styles);\n }\n if (!isNullOrUndefined(jsonObject.sections)) {\n this.parseSections(jsonObject.sections, sections);\n }\n return sections;\n };\n SfdtReader.prototype.parseStyles = function (data, styles) {\n for (var i = 0; i < data.styles.length; i++) {\n if (isNullOrUndefined(this.viewer.styles.findByName(data.styles[i].name))) {\n this.parseStyle(data, data.styles[i], styles);\n }\n }\n };\n SfdtReader.prototype.parseStyle = function (data, style, styles) {\n var wStyle;\n if (!isNullOrUndefined(style.type)) {\n if (style.type === 'Paragraph') {\n wStyle = new WParagraphStyle();\n wStyle.type = 'Paragraph';\n }\n if (style.type === 'Character') {\n wStyle = new WCharacterStyle();\n wStyle.type = 'Character';\n }\n if (!isNullOrUndefined(style.name)) {\n wStyle.name = style.name;\n }\n styles.push(wStyle);\n if (!isNullOrUndefined(style.basedOn)) {\n var basedOn = styles.findByName(style.basedOn);\n if (!isNullOrUndefined(basedOn)) {\n if (basedOn.type === wStyle.type) {\n wStyle.basedOn = basedOn;\n }\n }\n else {\n var basedStyle = this.getStyle(style.basedOn, data);\n var styleString = void 0;\n if (!isNullOrUndefined(basedStyle) && basedStyle.type === wStyle.type) {\n styleString = basedStyle;\n }\n else {\n if (wStyle.type === 'Paragraph') {\n styleString = JSON.parse('{\"type\":\"Paragraph\",\"name\":\"Normal\",\"next\":\"Normal\"}');\n }\n else {\n styleString = JSON.parse('{\"type\": \"Character\",\"name\": \"Default Paragraph Font\"}');\n }\n }\n this.parseStyle(data, styleString, styles);\n wStyle.basedOn = styles.findByName(styleString.name);\n }\n }\n if (!isNullOrUndefined(style.link)) {\n var link = styles.findByName(style.link);\n var linkStyle = this.getStyle(style.link, data);\n var styleString = void 0;\n if (isNullOrUndefined(link)) {\n if (isNullOrUndefined(linkStyle)) {\n //Construct the CharacterStyle string\n var charaStyle = {};\n charaStyle.characterFormat = style.characterFormat;\n charaStyle.name = style.name + ' Char';\n charaStyle.type = 'Character';\n //TODO: Implement basedOn\n charaStyle.basedOn = style.basedOn === 'Normal' ? 'Default Paragraph Font' : (style.basedOn + ' Char');\n styleString = charaStyle;\n }\n else {\n styleString = linkStyle;\n }\n this.parseStyle(data, styleString, styles);\n wStyle.link = isNullOrUndefined(styles.findByName(styleString.name)) ? style.link : styles.findByName(styleString.name);\n }\n else {\n wStyle.link = link;\n }\n }\n if (!isNullOrUndefined(style.characterFormat)) {\n this.parseCharacterFormat(style.characterFormat, wStyle.characterFormat);\n }\n if (!isNullOrUndefined(style.paragraphFormat)) {\n this.parseParagraphFormat(style.paragraphFormat, wStyle.paragraphFormat);\n }\n if (!isNullOrUndefined(style.next)) {\n if (style.next === style.name) {\n wStyle.next = wStyle;\n }\n else {\n var next = styles.findByName(style.next);\n if (!isNullOrUndefined(next) && next.type === wStyle.type) {\n wStyle.next = next;\n }\n else {\n var nextStyleString = this.getStyle(style.next, data);\n if (!isNullOrUndefined(nextStyleString)) {\n this.parseStyle(data, nextStyleString, styles);\n wStyle.next = styles.findByName(nextStyleString.name);\n }\n else {\n wStyle.next = wStyle;\n }\n }\n }\n }\n }\n };\n SfdtReader.prototype.getStyle = function (name, data) {\n for (var i = 0; i < data.styles.length; i++) {\n if (data.styles[i].name === name) {\n return data.styles[i];\n }\n }\n return undefined;\n };\n SfdtReader.prototype.parseAbstractList = function (data, abstractLists) {\n for (var i = 0; i < data.abstractLists.length; i++) {\n var abstractList = new WAbstractList();\n var abstract = data.abstractLists[i];\n abstractLists.push(abstractList);\n if (!isNullOrUndefined(abstract)) {\n if (!isNullOrUndefined(abstract.abstractListId)) {\n abstractList.abstractListId = abstract.abstractListId;\n }\n if (!isNullOrUndefined(abstract.levels)) {\n for (var j = 0; j < abstract.levels.length; j++) {\n var level = abstract.levels[j];\n if (!isNullOrUndefined(level)) {\n var listLevel = this.parseListLevel(level, abstractList);\n abstractList.levels.push(listLevel);\n }\n }\n }\n }\n }\n };\n SfdtReader.prototype.parseListLevel = function (data, owner) {\n var listLevel = new WListLevel(owner);\n if (data.listLevelPattern === 'Bullet') {\n listLevel.listLevelPattern = 'Bullet';\n listLevel.numberFormat = !isNullOrUndefined(data.numberFormat) ? data.numberFormat : '';\n }\n else {\n listLevel.listLevelPattern = data.listLevelPattern;\n listLevel.startAt = data.startAt;\n listLevel.numberFormat = !isNullOrUndefined(data.numberFormat) ? data.numberFormat : '';\n if (data.restartLevel >= 0) {\n listLevel.restartLevel = data.restartLevel;\n }\n else {\n listLevel.restartLevel = data.levelNumber;\n }\n }\n listLevel.followCharacter = data.followCharacter;\n this.parseCharacterFormat(data.characterFormat, listLevel.characterFormat);\n this.parseParagraphFormat(data.paragraphFormat, listLevel.paragraphFormat);\n return listLevel;\n };\n SfdtReader.prototype.parseList = function (data, listCollection) {\n for (var i = 0; i < data.lists.length; i++) {\n var list = new WList();\n var lists = data.lists[i];\n if (!isNullOrUndefined(lists.abstractListId)) {\n list.abstractListId = lists.abstractListId;\n list.abstractList = this.viewer.getAbstractListById(lists.abstractListId);\n }\n listCollection.push(list);\n if (!isNullOrUndefined(lists.listId)) {\n list.listId = lists.listId;\n }\n if (lists.hasOwnProperty('levelOverrides')) {\n this.parseLevelOverride(lists.levelOverrides, list);\n }\n }\n };\n SfdtReader.prototype.parseLevelOverride = function (data, list) {\n if (isNullOrUndefined(data)) {\n return;\n }\n for (var i = 0; i < data.length; i++) {\n var levelOverrides = new WLevelOverride();\n var levelOverride = data[i];\n levelOverrides.startAt = levelOverride.startAt;\n levelOverrides.levelNumber = levelOverride.levelNumber;\n if (!isNullOrUndefined(levelOverride.overrideListLevel)) {\n levelOverrides.overrideListLevel = this.parseListLevel(levelOverride.overrideListLevel, levelOverrides);\n }\n list.levelOverrides.push(levelOverrides);\n }\n };\n SfdtReader.prototype.parseSections = function (data, sections) {\n for (var i = 0; i < data.length; i++) {\n var section = new BodyWidget();\n section.sectionFormat = new WSectionFormat(section);\n section.index = i;\n var item = data[i];\n if (!isNullOrUndefined(item.sectionFormat)) {\n this.parseSectionFormat(item.sectionFormat, section.sectionFormat);\n }\n if (!isNullOrUndefined(item.headersFooters)) {\n this.viewer.headersFooters.push(this.parseHeaderFooter(item.headersFooters, this.viewer.headersFooters));\n }\n this.parseTextBody(item.blocks, section);\n for (var i_1 = 0; i_1 < section.childWidgets.length; i_1++) {\n section.childWidgets[i_1].containerWidget = section;\n }\n sections.push(section);\n }\n };\n /**\n * @private\n */\n SfdtReader.prototype.parseHeaderFooter = function (data, headersFooters) {\n var hfs = {};\n if (!isNullOrUndefined(data.header)) {\n var oddHeader = new HeaderFooterWidget('OddHeader');\n hfs[0] = oddHeader;\n this.parseTextBody(data.header.blocks, oddHeader);\n }\n if (!isNullOrUndefined(data.footer)) {\n var oddFooter = new HeaderFooterWidget('OddFooter');\n hfs[1] = oddFooter;\n this.parseTextBody(data.footer.blocks, oddFooter);\n }\n if (!isNullOrUndefined(data.evenHeader)) {\n var evenHeader = new HeaderFooterWidget('EvenHeader');\n hfs[2] = evenHeader;\n this.parseTextBody(data.evenHeader.blocks, evenHeader);\n }\n if (!isNullOrUndefined(data.evenFooter)) {\n var evenFooter = new HeaderFooterWidget('EvenFooter');\n hfs[3] = evenFooter;\n this.parseTextBody(data.evenFooter.blocks, evenFooter);\n }\n if (!isNullOrUndefined(data.firstPageHeader)) {\n var firstPageHeader = new HeaderFooterWidget('FirstPageHeader');\n hfs[4] = firstPageHeader;\n this.parseTextBody(data.firstPageHeader.blocks, firstPageHeader);\n }\n if (!isNullOrUndefined(data.firstPageFooter)) {\n var firstPageFooter = new HeaderFooterWidget('FirstPageFooter');\n hfs[5] = firstPageFooter;\n this.parseTextBody(data.firstPageFooter.blocks, firstPageFooter);\n }\n return hfs;\n };\n SfdtReader.prototype.parseTextBody = function (data, section) {\n this.parseBody(data, section.childWidgets, section);\n };\n SfdtReader.prototype.parseBody = function (data, blocks, container) {\n if (!isNullOrUndefined(data)) {\n for (var i = 0; i < data.length; i++) {\n var block = data[i];\n if (block.hasOwnProperty('inlines')) {\n var writeInlineFormat = false;\n //writeInlineFormat = this.isPasting && i === data.length - 1;\n var paragraph = new ParagraphWidget();\n paragraph.characterFormat = new WCharacterFormat(paragraph);\n paragraph.paragraphFormat = new WParagraphFormat(paragraph);\n this.parseCharacterFormat(block.characterFormat, paragraph.characterFormat);\n this.parseParagraphFormat(block.paragraphFormat, paragraph.paragraphFormat);\n var styleObj = void 0;\n if (!isNullOrUndefined(block.paragraphFormat) && !isNullOrUndefined(block.paragraphFormat.styleName)) {\n styleObj = this.viewer.styles.findByName(block.paragraphFormat.styleName, 'Paragraph');\n if (!isNullOrUndefined(styleObj)) {\n paragraph.paragraphFormat.ApplyStyle(styleObj);\n }\n }\n if (block.inlines.length > 0) {\n this.parseParagraph(block.inlines, paragraph, writeInlineFormat);\n }\n blocks.push(paragraph);\n paragraph.index = i;\n paragraph.containerWidget = container;\n }\n else if (block.hasOwnProperty('rows')) {\n this.parseTable(block, blocks, i, container);\n }\n }\n }\n };\n SfdtReader.prototype.parseTable = function (block, blocks, index, section) {\n var table = new TableWidget();\n table.index = index;\n table.tableFormat = new WTableFormat(table);\n if (!isNullOrUndefined(block.tableFormat)) {\n this.parseTableFormat(block.tableFormat, table.tableFormat);\n }\n table.title = block.title;\n table.description = block.description;\n for (var i = 0; i < block.rows.length; i++) {\n var row = new TableRowWidget();\n row.rowFormat = new WRowFormat(row);\n var tableRow = block.rows[i];\n if (tableRow.hasOwnProperty('rowFormat')) {\n this.parseRowFormat(tableRow.rowFormat, row.rowFormat);\n this.parseRowGridValues(tableRow, row.rowFormat);\n this.parseRowGridValues(tableRow.rowFormat, row.rowFormat);\n row.index = i;\n for (var j = 0; j < block.rows[i].cells.length; j++) {\n var cell = new TableCellWidget();\n cell.cellFormat = new WCellFormat(cell);\n row.childWidgets.push(cell);\n cell.containerWidget = row;\n cell.index = j;\n cell.rowIndex = i;\n if (block.rows[i].cells[j].hasOwnProperty('cellFormat')) {\n this.parseCellFormat(block.rows[i].cells[j].cellFormat, cell.cellFormat);\n }\n this.parseTextBody(block.rows[i].cells[j].blocks, cell);\n }\n }\n table.childWidgets.push(row);\n row.containerWidget = table;\n }\n table.containerWidget = section;\n blocks.push(table);\n table.isGridUpdated = false;\n };\n SfdtReader.prototype.parseRowGridValues = function (data, rowFormat) {\n if (!isNullOrUndefined(data.gridBefore)) {\n rowFormat.gridBefore = data.gridBefore;\n }\n if (!isNullOrUndefined(data.gridBeforeWidth)) {\n rowFormat.gridBeforeWidth = data.gridBeforeWidth;\n }\n if (!isNullOrUndefined(data.gridBeforeWidthType)) {\n rowFormat.gridBeforeWidthType = data.gridBeforeWidthType;\n }\n if (!isNullOrUndefined(data.gridAfter)) {\n rowFormat.gridAfter = data.gridAfter;\n }\n if (!isNullOrUndefined(data.gridAfterWidth)) {\n rowFormat.gridAfterWidth = data.gridAfterWidth;\n }\n if (!isNullOrUndefined(data.gridAfterWidthType)) {\n rowFormat.gridAfterWidthType = data.gridAfterWidthType;\n }\n };\n SfdtReader.prototype.parseParagraph = function (data, paragraph, writeInlineFormat) {\n var lineWidget = new LineWidget(paragraph);\n for (var i = 0; i < data.length; i++) {\n var inline = data[i];\n if (inline.hasOwnProperty('text')) {\n var textElement = undefined;\n if (this.viewer.isPageField) {\n textElement = new FieldTextElementBox();\n textElement.fieldBegin = this.viewer.fieldStacks[this.viewer.fieldStacks.length - 1];\n }\n else if (inline.text === '\\t') {\n textElement = new TabElementBox();\n }\n else {\n textElement = new TextElementBox();\n }\n textElement.characterFormat = new WCharacterFormat(textElement);\n this.parseCharacterFormat(inline.characterFormat, textElement.characterFormat, writeInlineFormat);\n /*�tslint:disable-next-line:max-line-length */\n if (!isNullOrUndefined(inline.characterFormat) && !isNullOrUndefined(inline.characterFormat.styleName)) {\n var charStyle = this.viewer.styles.findByName(inline.characterFormat.styleName, 'Character');\n textElement.characterFormat.ApplyStyle(charStyle);\n }\n textElement.text = inline.text;\n textElement.line = lineWidget;\n lineWidget.children.push(textElement);\n }\n else if (inline.hasOwnProperty('imageString')) {\n var image = new ImageElementBox(data[i].isInlineImage);\n image.isMetaFile = data[i].isMetaFile;\n image.characterFormat = new WCharacterFormat(image);\n image.line = lineWidget;\n lineWidget.children.push(image);\n image.imageString = inline.imageString;\n image.width = HelperMethods.convertPointToPixel(inline.width);\n image.height = HelperMethods.convertPointToPixel(inline.height);\n this.parseCharacterFormat(inline.characterFormat, image.characterFormat);\n }\n else if (inline.hasOwnProperty('hasFieldEnd') || (inline.hasOwnProperty('fieldType') && inline.fieldType === 0)) {\n var fieldBegin = new FieldElementBox(0);\n fieldBegin.hasFieldEnd = inline.hasFieldEnd;\n this.viewer.fieldStacks.push(fieldBegin);\n fieldBegin.line = lineWidget;\n this.viewer.fields.push(fieldBegin);\n lineWidget.children.push(fieldBegin);\n }\n else if (inline.hasOwnProperty('fieldType')) {\n var field = undefined;\n if (inline.fieldType === 2) {\n field = new FieldElementBox(2);\n this.fieldSeparator = field;\n if (this.viewer.fieldStacks.length > 0) {\n field.fieldBegin = this.viewer.fieldStacks[this.viewer.fieldStacks.length - 1];\n field.fieldBegin.fieldSeparator = field;\n //finds the whether the field is page filed or not\n var lineWidgetCount = lineWidget.children.length;\n if (lineWidgetCount >= 2 && (lineWidget.children[lineWidgetCount - 2] instanceof FieldElementBox)\n && lineWidget.children[lineWidgetCount - 2].hasFieldEnd\n && (lineWidget.children[lineWidgetCount - 1] instanceof TextElementBox)) {\n var fieldElementText = lineWidget.children[lineWidgetCount - 1].text;\n if (fieldElementText.match('PAGE')) {\n this.viewer.isPageField = true;\n }\n }\n }\n }\n else if (inline.fieldType === 1) {\n field = new FieldElementBox(1);\n //For Field End Updated begin and separator. \n if (this.viewer.fieldStacks.length > 0) {\n field.fieldBegin = this.viewer.fieldStacks[this.viewer.fieldStacks.length - 1];\n field.fieldBegin.fieldEnd = field;\n }\n if (!isNullOrUndefined(field.fieldBegin) && field.fieldBegin.fieldSeparator) {\n field.fieldSeparator = field.fieldBegin.fieldSeparator;\n field.fieldBegin.fieldSeparator.fieldEnd = field;\n }\n //After setting all the property clear the field values\n this.viewer.fieldStacks.splice(this.viewer.fieldStacks.length - 1, 1);\n this.fieldSeparator = undefined;\n this.viewer.isPageField = false;\n this.viewer.fieldCollection.push(field.fieldBegin);\n }\n field.line = lineWidget;\n lineWidget.children.push(field);\n }\n else if (inline.hasOwnProperty('bookmarkType')) {\n var bookmark = undefined;\n bookmark = new BookmarkElementBox(inline.bookmarkType);\n bookmark.name = inline.name;\n lineWidget.children.push(bookmark);\n bookmark.line = lineWidget;\n if (inline.bookmarkType === 0) {\n this.viewer.bookmarks.add(bookmark.name, bookmark);\n }\n else if (inline.bookmarkType === 1) {\n if (this.viewer.bookmarks.containsKey(bookmark.name)) {\n var bookmarkStart = this.viewer.bookmarks.get(bookmark.name);\n bookmarkStart.reference = bookmark;\n bookmark.reference = bookmarkStart;\n }\n }\n }\n }\n paragraph.childWidgets.push(lineWidget);\n };\n SfdtReader.prototype.parseTableFormat = function (sourceFormat, tableFormat) {\n this.parseBorders(sourceFormat.borders, tableFormat.borders);\n if (!isNullOrUndefined(sourceFormat.cellSpacing)) {\n tableFormat.cellSpacing = sourceFormat.cellSpacing;\n }\n if (!isNullOrUndefined(sourceFormat.leftMargin)) {\n tableFormat.leftMargin = sourceFormat.leftMargin;\n }\n if (!isNullOrUndefined(sourceFormat.topMargin)) {\n tableFormat.topMargin = sourceFormat.topMargin;\n }\n if (!isNullOrUndefined(sourceFormat.rightMargin)) {\n tableFormat.rightMargin = sourceFormat.rightMargin;\n }\n if (!isNullOrUndefined(sourceFormat.bottomMargin)) {\n tableFormat.bottomMargin = sourceFormat.bottomMargin;\n }\n if (!isNullOrUndefined(sourceFormat.leftIndent)) {\n tableFormat.leftIndent = sourceFormat.leftIndent;\n }\n this.parseShading(sourceFormat.shading, tableFormat.shading);\n if (!isNullOrUndefined(sourceFormat.tableAlignment)) {\n tableFormat.tableAlignment = sourceFormat.tableAlignment;\n }\n if (!isNullOrUndefined(sourceFormat.preferredWidth)) {\n tableFormat.preferredWidth = sourceFormat.preferredWidth;\n }\n if (!isNullOrUndefined(sourceFormat.preferredWidthType)) {\n tableFormat.preferredWidthType = sourceFormat.preferredWidthType;\n }\n };\n SfdtReader.prototype.parseCellFormat = function (sourceFormat, cellFormat) {\n if (!isNullOrUndefined(sourceFormat)) {\n this.parseBorders(sourceFormat.borders, cellFormat.borders);\n if (!sourceFormat.isSamePaddingAsTable) {\n // cellFormat.ClearMargins();\n //else\n this.parseCellMargin(sourceFormat, cellFormat);\n }\n if (!isNullOrUndefined(sourceFormat.cellWidth)) {\n cellFormat.cellWidth = sourceFormat.cellWidth;\n }\n if (!isNullOrUndefined(sourceFormat.columnSpan)) {\n cellFormat.columnSpan = sourceFormat.columnSpan;\n }\n if (!isNullOrUndefined(sourceFormat.rowSpan)) {\n cellFormat.rowSpan = sourceFormat.rowSpan;\n }\n this.parseShading(sourceFormat.shading, cellFormat.shading);\n if (!isNullOrUndefined(sourceFormat.verticalAlignment)) {\n cellFormat.verticalAlignment = sourceFormat.verticalAlignment;\n }\n if (!isNullOrUndefined(sourceFormat.preferredWidthType)) {\n cellFormat.preferredWidthType = sourceFormat.preferredWidthType;\n }\n if (!isNullOrUndefined(sourceFormat.preferredWidth)) {\n cellFormat.preferredWidth = sourceFormat.preferredWidth;\n }\n }\n };\n SfdtReader.prototype.parseCellMargin = function (sourceFormat, cellFormat) {\n if (!isNullOrUndefined(sourceFormat.leftMargin)) {\n cellFormat.leftMargin = sourceFormat.leftMargin;\n }\n if (!isNullOrUndefined(sourceFormat.rightMargin)) {\n cellFormat.rightMargin = sourceFormat.rightMargin;\n }\n if (!isNullOrUndefined(sourceFormat.topMargin)) {\n cellFormat.topMargin = sourceFormat.topMargin;\n }\n if (!isNullOrUndefined(sourceFormat.bottomMargin)) {\n cellFormat.bottomMargin = sourceFormat.bottomMargin;\n }\n };\n SfdtReader.prototype.parseRowFormat = function (sourceFormat, rowFormat) {\n if (!isNullOrUndefined(sourceFormat)) {\n if (!isNullOrUndefined(sourceFormat.allowBreakAcrossPages)) {\n rowFormat.allowBreakAcrossPages = sourceFormat.allowBreakAcrossPages;\n }\n if (!isNullOrUndefined(sourceFormat.isHeader)) {\n rowFormat.isHeader = sourceFormat.isHeader;\n }\n if (!isNullOrUndefined(sourceFormat.heightType)) {\n rowFormat.heightType = sourceFormat.heightType;\n }\n if (!isNullOrUndefined(sourceFormat.height)) {\n rowFormat.height = sourceFormat.height;\n }\n this.parseBorders(sourceFormat.borders, rowFormat.borders);\n }\n };\n SfdtReader.prototype.parseBorders = function (sourceBorders, destBorder) {\n if (!isNullOrUndefined(sourceBorders)) {\n this.parseBorder(sourceBorders.left, destBorder.left);\n this.parseBorder(sourceBorders.right, destBorder.right);\n this.parseBorder(sourceBorders.top, destBorder.top);\n this.parseBorder(sourceBorders.bottom, destBorder.bottom);\n this.parseBorder(sourceBorders.vertical, destBorder.vertical);\n this.parseBorder(sourceBorders.horizontal, destBorder.horizontal);\n this.parseBorder(sourceBorders.diagonalDown, destBorder.diagonalDown);\n this.parseBorder(sourceBorders.diagonalUp, destBorder.diagonalUp);\n }\n };\n SfdtReader.prototype.parseBorder = function (sourceBorder, destBorder) {\n if (!isNullOrUndefined(sourceBorder)) {\n if (!isNullOrUndefined(sourceBorder.color)) {\n destBorder.color = this.getColor(sourceBorder.color);\n }\n if (!isNullOrUndefined(sourceBorder.lineStyle)) {\n destBorder.lineStyle = sourceBorder.lineStyle;\n }\n if (!isNullOrUndefined(sourceBorder.lineWidth)) {\n destBorder.lineWidth = sourceBorder.lineWidth;\n }\n if (!isNullOrUndefined(sourceBorder.hasNoneStyle)) {\n destBorder.hasNoneStyle = sourceBorder.hasNoneStyle;\n }\n }\n };\n SfdtReader.prototype.parseShading = function (sourceShading, destShading) {\n if (!isNullOrUndefined(sourceShading)) {\n if (!isNullOrUndefined(sourceShading.backgroundColor)) {\n destShading.backgroundColor = this.getColor(sourceShading.backgroundColor);\n }\n if (!isNullOrUndefined(sourceShading.foregroundColor)) {\n destShading.foregroundColor = this.getColor(sourceShading.foregroundColor);\n }\n if (!isNullOrUndefined(sourceShading.texture)) {\n destShading.textureStyle = sourceShading.texture;\n }\n }\n };\n SfdtReader.prototype.parseCharacterFormat = function (sourceFormat, characterFormat, writeInlineFormat) {\n if (!isNullOrUndefined(sourceFormat)) {\n if (writeInlineFormat && sourceFormat.hasOwnProperty('inlineFormat')) {\n this.parseCharacterFormat(sourceFormat.inlineFormat, characterFormat);\n return;\n }\n if (!isNullOrUndefined(sourceFormat.baselineAlignment)) {\n characterFormat.baselineAlignment = sourceFormat.baselineAlignment;\n }\n if (!isNullOrUndefined(sourceFormat.underline)) {\n characterFormat.underline = sourceFormat.underline;\n }\n if (!isNullOrUndefined(sourceFormat.strikethrough)) {\n characterFormat.strikethrough = sourceFormat.strikethrough;\n }\n if (!isNullOrUndefined(sourceFormat.fontSize)) {\n characterFormat.fontSize = sourceFormat.fontSize;\n }\n if (!isNullOrUndefined(sourceFormat.fontFamily)) {\n characterFormat.fontFamily = sourceFormat.fontFamily;\n }\n if (!isNullOrUndefined(sourceFormat.bold)) {\n characterFormat.bold = sourceFormat.bold;\n }\n if (!isNullOrUndefined(sourceFormat.italic)) {\n characterFormat.italic = sourceFormat.italic;\n }\n if (!isNullOrUndefined(sourceFormat.highlightColor)) {\n characterFormat.highlightColor = sourceFormat.highlightColor;\n }\n if (!isNullOrUndefined(sourceFormat.fontColor)) {\n characterFormat.fontColor = this.getColor(sourceFormat.fontColor);\n }\n }\n };\n SfdtReader.prototype.getColor = function (color) {\n var convertColor = color;\n return convertColor || '#ffffff';\n };\n SfdtReader.prototype.parseParagraphFormat = function (sourceFormat, paragraphFormat) {\n if (!isNullOrUndefined(sourceFormat)) {\n if (!isNullOrUndefined(sourceFormat.leftIndent)) {\n paragraphFormat.leftIndent = sourceFormat.leftIndent;\n }\n if (!isNullOrUndefined(sourceFormat.rightIndent)) {\n paragraphFormat.rightIndent = sourceFormat.rightIndent;\n }\n if (!isNullOrUndefined(sourceFormat.firstLineIndent)) {\n paragraphFormat.firstLineIndent = sourceFormat.firstLineIndent;\n }\n if (!isNullOrUndefined(sourceFormat.afterSpacing)) {\n paragraphFormat.afterSpacing = sourceFormat.afterSpacing;\n }\n if (!isNullOrUndefined(sourceFormat.beforeSpacing)) {\n paragraphFormat.beforeSpacing = sourceFormat.beforeSpacing;\n }\n if (!isNullOrUndefined(sourceFormat.lineSpacing)) {\n paragraphFormat.lineSpacing = sourceFormat.lineSpacing;\n }\n if (!isNullOrUndefined(sourceFormat.lineSpacingType)) {\n paragraphFormat.lineSpacingType = sourceFormat.lineSpacingType;\n }\n if (!isNullOrUndefined(sourceFormat.textAlignment)) {\n paragraphFormat.textAlignment = sourceFormat.textAlignment;\n }\n if (!isNullOrUndefined(sourceFormat.outlineLevel)) {\n paragraphFormat.outlineLevel = sourceFormat.outlineLevel;\n }\n paragraphFormat.listFormat = new WListFormat();\n if (sourceFormat.hasOwnProperty('listFormat')) {\n this.parseListFormat(sourceFormat, paragraphFormat.listFormat);\n }\n if (sourceFormat.hasOwnProperty('tabs')) {\n this.parseTabStop(sourceFormat.tabs, paragraphFormat.tabs);\n }\n }\n };\n SfdtReader.prototype.parseListFormat = function (block, listFormat) {\n if (!isNullOrUndefined(block.listFormat)) {\n if (!isNullOrUndefined(block.listFormat.listId)) {\n listFormat.listId = block.listFormat.listId;\n listFormat.list = this.viewer.getListById(block.listFormat.listId);\n }\n if (!isNullOrUndefined(block.listFormat.listLevelNumber)) {\n listFormat.listLevelNumber = block.listFormat.listLevelNumber;\n }\n }\n };\n SfdtReader.prototype.parseSectionFormat = function (data, sectionFormat) {\n if (!isNullOrUndefined(data.pageWidth)) {\n sectionFormat.pageWidth = data.pageWidth;\n }\n if (!isNullOrUndefined(data.pageHeight)) {\n sectionFormat.pageHeight = data.pageHeight;\n }\n if (!isNullOrUndefined(data.leftMargin)) {\n sectionFormat.leftMargin = data.leftMargin;\n }\n if (!isNullOrUndefined(data.topMargin)) {\n sectionFormat.topMargin = data.topMargin;\n }\n if (!isNullOrUndefined(data.rightMargin)) {\n sectionFormat.rightMargin = data.rightMargin;\n }\n if (!isNullOrUndefined(data.bottomMargin)) {\n sectionFormat.bottomMargin = data.bottomMargin;\n }\n if (!isNullOrUndefined(data.headerDistance)) {\n sectionFormat.headerDistance = data.headerDistance;\n }\n if (!isNullOrUndefined(data.footerDistance)) {\n sectionFormat.footerDistance = data.footerDistance;\n }\n if (!isNullOrUndefined(data.differentFirstPage)) {\n sectionFormat.differentFirstPage = data.differentFirstPage;\n }\n if (!isNullOrUndefined(data.differentOddAndEvenPages)) {\n sectionFormat.differentOddAndEvenPages = data.differentOddAndEvenPages;\n }\n };\n SfdtReader.prototype.parseTabStop = function (wTabs, tabs) {\n for (var i = 0; i < wTabs.length; i++) {\n var tabStop = new WTabStop();\n tabStop.position = wTabs[i].position;\n tabStop.tabLeader = wTabs[i].tabLeader;\n tabStop.deletePosition = wTabs[i].deletePosition;\n tabStop.tabJustification = wTabs[i].tabJustification;\n tabs.push(tabStop);\n }\n };\n return SfdtReader;\n}());\nexport { SfdtReader };\n","import { WShading } from '../format/index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { WList } from '../list/list';\nimport { WAbstractList } from '../list/abstract-list';\nimport { WListLevel } from '../list/list-level';\n/**\n * Selection character format implementation\n */\nvar SelectionCharacterFormat = /** @class */ (function () {\n /**\n * @private\n */\n function SelectionCharacterFormat(selection) {\n this.boldIn = undefined;\n this.italicIn = undefined;\n this.underlineIn = undefined;\n this.strikeThroughIn = undefined;\n this.baselineAlignmentIn = undefined;\n this.highlightColorIn = undefined;\n this.fontSizeIn = 0;\n this.fontColorIn = undefined;\n this.selection = selection;\n }\n Object.defineProperty(SelectionCharacterFormat.prototype, \"fontSize\", {\n /**\n * Gets or sets the font size of selected contents.\n */\n get: function () {\n return this.fontSizeIn;\n },\n set: function (value) {\n if (value === this.fontSizeIn) {\n return;\n }\n this.fontSizeIn = value;\n this.notifyPropertyChanged('fontSize');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCharacterFormat.prototype, \"fontFamily\", {\n /**\n * Gets or sets the font family of selected contents.\n */\n get: function () {\n return this.fontFamilyIn;\n },\n set: function (value) {\n if (value === this.fontFamilyIn) {\n return;\n }\n this.fontFamilyIn = value;\n this.notifyPropertyChanged('fontFamily');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCharacterFormat.prototype, \"fontColor\", {\n /**\n * Gets or sets the font color of selected contents.\n */\n get: function () {\n return this.fontColorIn;\n },\n set: function (value) {\n if (value === this.fontColorIn) {\n return;\n }\n this.fontColorIn = value;\n this.notifyPropertyChanged('fontColor');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCharacterFormat.prototype, \"bold\", {\n /**\n * Gets or sets the bold formatting of selected contents.\n */\n get: function () {\n return this.boldIn;\n },\n set: function (value) {\n if (value === this.boldIn) {\n return;\n }\n this.boldIn = value;\n this.notifyPropertyChanged('bold');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCharacterFormat.prototype, \"italic\", {\n /**\n * Gets or sets the italic formatting of selected contents.\n */\n get: function () {\n return this.italicIn;\n },\n set: function (value) {\n if (value === this.italic) {\n return;\n }\n this.italicIn = value;\n this.notifyPropertyChanged('italic');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCharacterFormat.prototype, \"strikethrough\", {\n /**\n * Gets or sets the strikethrough property of selected contents.\n */\n get: function () {\n return this.strikeThroughIn;\n },\n set: function (value) {\n if (value === this.strikeThroughIn) {\n return;\n }\n this.strikeThroughIn = value;\n this.notifyPropertyChanged('strikethrough');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCharacterFormat.prototype, \"baselineAlignment\", {\n /**\n * Gets or sets the baseline alignment property of selected contents.\n */\n get: function () {\n return this.baselineAlignmentIn;\n },\n set: function (value) {\n if (value === this.baselineAlignmentIn) {\n return;\n }\n this.baselineAlignmentIn = value;\n this.notifyPropertyChanged('baselineAlignment');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCharacterFormat.prototype, \"underline\", {\n /**\n * Gets or sets the underline style of selected contents.\n */\n get: function () {\n return this.underlineIn;\n },\n set: function (value) {\n if (value === this.underlineIn) {\n return;\n }\n this.underlineIn = value;\n this.notifyPropertyChanged('underline');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCharacterFormat.prototype, \"highlightColor\", {\n /**\n * Gets or sets the highlight color of selected contents.\n */\n get: function () {\n return this.highlightColorIn;\n },\n set: function (value) {\n if (value === this.highlightColorIn) {\n return;\n }\n this.highlightColorIn = value;\n this.notifyPropertyChanged('highlightColor');\n },\n enumerable: true,\n configurable: true\n });\n SelectionCharacterFormat.prototype.getPropertyValue = function (property) {\n switch (property) {\n case 'bold':\n return this.bold;\n case 'italic':\n return this.italic;\n case 'fontSize':\n if (this.fontSize >= 1) {\n return this.fontSize;\n }\n return undefined;\n case 'fontFamily':\n return this.fontFamily;\n case 'strikethrough':\n return this.strikethrough;\n case 'baselineAlignment':\n return this.baselineAlignment;\n case 'highlightColor':\n return this.highlightColor;\n case 'underline':\n return this.underline;\n case 'fontColor':\n return this.fontColor;\n default:\n return undefined;\n }\n };\n /**\n * Notifies whenever property gets changed.\n * @param {string} propertyName\n */\n SelectionCharacterFormat.prototype.notifyPropertyChanged = function (propertyName) {\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(this.selection) && (this.selection.isCleared || this.selection.owner.isReadOnlyMode || !this.selection.owner.isDocumentLoaded || this.selection.owner.isPastingContent) && !this.selection.isRetrieveFormatting) {\n return;\n }\n if (!isNullOrUndefined(this.selection) && !isNullOrUndefined(this.selection.start) && !this.selection.isRetrieveFormatting) {\n var propertyValue = this.getPropertyValue(propertyName);\n if (!isNullOrUndefined(propertyValue)) {\n this.selection.owner.editorModule.onApplyCharacterFormat(propertyName, propertyValue);\n }\n }\n };\n /**\n * Copies the source format.\n * @param {WCharacterFormat} format\n * @returns void\n * @private\n */\n SelectionCharacterFormat.prototype.copyFormat = function (format) {\n this.styleName = !isNullOrUndefined(format.baseCharStyle) ? format.baseCharStyle.name : 'Default Paragraph Font';\n this.fontSize = format.fontSize;\n this.fontFamily = format.fontFamily;\n this.bold = format.bold;\n this.italic = format.italic;\n this.baselineAlignment = format.baselineAlignment;\n this.underline = format.underline;\n this.fontColor = format.fontColor;\n this.highlightColor = format.highlightColor;\n this.strikethrough = format.strikethrough;\n };\n /**\n * Combines the format.\n * @param {WCharacterFormat} format\n * @private\n */\n SelectionCharacterFormat.prototype.combineFormat = function (format) {\n if (!isNullOrUndefined(this.bold) && this.bold !== format.bold) {\n this.bold = undefined;\n }\n if (!isNullOrUndefined(this.italic) && this.italic !== format.italic) {\n this.italic = undefined;\n }\n if (this.fontSize !== 0 && this.fontSize !== format.fontSize) {\n this.fontSize = 0;\n }\n if (!isNullOrUndefined(this.fontFamily) && this.fontFamily !== format.fontFamily) {\n this.fontFamily = undefined;\n }\n if (!isNullOrUndefined(this.highlightColor) && this.highlightColor !== format.highlightColor) {\n this.highlightColor = undefined;\n }\n if (!isNullOrUndefined(this.baselineAlignment) && this.baselineAlignment !== format.baselineAlignment) {\n this.baselineAlignment = undefined;\n }\n if (!isNullOrUndefined(this.fontColor) && (this.fontColor !== format.fontColor)) {\n this.fontColor = undefined;\n }\n if (!isNullOrUndefined(this.underline) && this.underline !== format.underline) {\n this.underline = undefined;\n }\n if (!isNullOrUndefined(this.strikethrough) && this.strikethrough !== format.strikethrough) {\n this.strikethrough = undefined;\n }\n };\n /**\n * Clones the format.\n * @param {SelectionCharacterFormat} selectionCharacterFormat\n * @returns void\n * @private\n */\n SelectionCharacterFormat.prototype.cloneFormat = function (selectionCharacterFormat) {\n this.bold = selectionCharacterFormat.bold;\n this.italic = selectionCharacterFormat.italic;\n this.underline = selectionCharacterFormat.underline;\n this.strikethrough = selectionCharacterFormat.strikethrough;\n this.baselineAlignment = selectionCharacterFormat.baselineAlignment;\n this.highlightColor = selectionCharacterFormat.highlightColor;\n this.fontSize = selectionCharacterFormat.fontSize;\n this.fontFamily = selectionCharacterFormat.fontFamily;\n this.fontColor = selectionCharacterFormat.fontColor;\n this.styleName = selectionCharacterFormat.styleName;\n };\n /**\n * Checks whether current format is equal to the source format or not.\n * @param {SelectionCharacterFormat} format\n * @returns boolean\n * @private\n */\n SelectionCharacterFormat.prototype.isEqualFormat = function (format) {\n return (this.fontSize === format.fontSize\n && this.strikethrough === format.strikethrough\n && this.bold === format.bold\n && this.fontFamily === format.fontFamily\n && this.underline === format.underline\n && this.highlightColor === format.highlightColor\n && this.italic === format.italic\n && this.baselineAlignment === format.baselineAlignment\n && this.fontColor === format.fontColor);\n };\n /**\n * Clears the format.\n * @returns void\n * @private\n */\n SelectionCharacterFormat.prototype.clearFormat = function () {\n this.fontSizeIn = 0;\n this.boldIn = undefined;\n this.italicIn = undefined;\n this.fontFamilyIn = undefined;\n this.fontColorIn = undefined;\n this.underlineIn = undefined;\n this.strikeThroughIn = undefined;\n this.highlightColorIn = undefined;\n this.baselineAlignmentIn = undefined;\n this.styleName = undefined;\n };\n /**\n * Destroys the maintained resources.\n * @returns void\n * @private\n */\n SelectionCharacterFormat.prototype.destroy = function () {\n this.fontSizeIn = undefined;\n this.boldIn = undefined;\n this.italicIn = undefined;\n this.fontFamilyIn = undefined;\n this.fontColorIn = undefined;\n this.underlineIn = undefined;\n this.strikeThroughIn = undefined;\n this.baselineAlignmentIn = undefined;\n this.highlightColorIn = undefined;\n this.selection = undefined;\n this.styleName = undefined;\n };\n return SelectionCharacterFormat;\n}());\nexport { SelectionCharacterFormat };\n/**\n * Selection paragraph format implementation\n */\nvar SelectionParagraphFormat = /** @class */ (function () {\n /**\n * @private\n */\n function SelectionParagraphFormat(selection, viewer) {\n // Declaring the character format properties.\n this.leftIndentIn = 0;\n this.rightIndentIn = 0;\n this.beforeSpacingIn = 0;\n this.afterSpacingIn = 0;\n this.textAlignmentIn = undefined;\n this.firstLineIndentIn = 0;\n this.lineSpacingIn = 1;\n this.lineSpacingTypeIn = undefined;\n this.listLevelNumberIn = -1;\n this.selection = selection;\n this.viewer = viewer;\n }\n Object.defineProperty(SelectionParagraphFormat.prototype, \"leftIndent\", {\n /**\n * Gets or Sets the left indent for selected paragraphs.\n * @default undefined\n */\n get: function () {\n return this.leftIndentIn;\n },\n set: function (value) {\n if (value === this.leftIndentIn) {\n return;\n }\n this.leftIndentIn = value;\n this.notifyPropertyChanged('leftIndent');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"rightIndent\", {\n /**\n * Gets or Sets the right indent for selected paragraphs.\n * @default undefined\n */\n get: function () {\n return this.rightIndentIn;\n },\n set: function (value) {\n if (value === this.rightIndentIn) {\n return;\n }\n this.rightIndentIn = value;\n this.notifyPropertyChanged('rightIndent');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"firstLineIndent\", {\n /**\n * Gets or Sets the first line indent for selected paragraphs.\n * @default undefined\n */\n get: function () {\n return this.firstLineIndentIn;\n },\n set: function (value) {\n if (value === this.firstLineIndentIn) {\n return;\n }\n this.firstLineIndentIn = value;\n this.notifyPropertyChanged('firstLineIndent');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"textAlignment\", {\n /**\n * Gets or Sets the text alignment for selected paragraphs.\n * @default undefined\n */\n get: function () {\n return this.textAlignmentIn;\n },\n set: function (value) {\n if (value === this.textAlignmentIn) {\n return;\n }\n this.textAlignmentIn = value;\n this.notifyPropertyChanged('textAlignment');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"afterSpacing\", {\n /**\n * Gets or Sets the after spacing for selected paragraphs.\n * @default undefined\n */\n get: function () {\n return this.afterSpacingIn;\n },\n set: function (value) {\n if (value === this.afterSpacingIn) {\n return;\n }\n this.afterSpacingIn = value;\n this.notifyPropertyChanged('afterSpacing');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"beforeSpacing\", {\n /**\n * Gets or Sets the before spacing for selected paragraphs.\n * @default undefined\n */\n get: function () {\n return this.beforeSpacingIn;\n },\n set: function (value) {\n if (value === this.beforeSpacingIn) {\n return;\n }\n this.beforeSpacingIn = value;\n this.notifyPropertyChanged('beforeSpacing');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"lineSpacing\", {\n /**\n * Gets or Sets the line spacing for selected paragraphs.\n * @default undefined\n */\n get: function () {\n return this.lineSpacingIn;\n },\n set: function (value) {\n if (value === this.lineSpacingIn) {\n return;\n }\n this.lineSpacingIn = value;\n this.notifyPropertyChanged('lineSpacing');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"lineSpacingType\", {\n /**\n * Gets or Sets the line spacing type for selected paragraphs.\n * @default undefined\n */\n get: function () {\n return this.lineSpacingTypeIn;\n },\n set: function (value) {\n if (value === this.lineSpacingTypeIn) {\n return;\n }\n this.lineSpacingTypeIn = value;\n this.notifyPropertyChanged('lineSpacingType');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"listLevelNumber\", {\n /**\n * Gets or Sets the list level number for selected paragraphs.\n * @default undefined\n */\n get: function () {\n return this.listLevelNumberIn;\n },\n set: function (value) {\n if (value === this.listLevelNumberIn) {\n return;\n }\n this.listLevelNumberIn = value;\n this.notifyPropertyChanged('listLevelNumber');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"listText\", {\n /**\n * Gets the list text for selected paragraphs.\n */\n get: function () {\n var listFormat = undefined;\n var list = this.viewer.getListById(this.listId);\n if (list instanceof WList && this.listLevelNumberIn > -1 && this.listLevelNumberIn < 9) {\n var listLevel = list.getListLevel(this.listLevelNumber);\n if (listLevel instanceof WListLevel) {\n if (listLevel.listLevelPattern === 'Bullet') {\n listFormat = listLevel.numberFormat;\n }\n else {\n listFormat = listLevel.numberFormat;\n for (var i = 0; i < 9; i++) {\n var levelPattern = '%' + (i + 1);\n if (listFormat.indexOf(levelPattern) > -1) {\n var level = i === this.listLevelNumberIn ? listLevel : list.getListLevel(i);\n var listText = this.selection.owner.viewer.layout.getListTextListLevel(level, 1);\n listFormat = listFormat.replace(levelPattern, listText);\n }\n }\n }\n }\n }\n return listFormat;\n },\n enumerable: true,\n configurable: true\n });\n SelectionParagraphFormat.prototype.getPropertyValue = function (property) {\n switch (property) {\n case 'leftIndent':\n return this.leftIndent;\n case 'rightIndent':\n return this.rightIndent;\n case 'firstLineIndent':\n return this.firstLineIndent;\n case 'beforeSpacing':\n return this.beforeSpacing;\n case 'afterSpacing':\n return this.afterSpacing;\n case 'textAlignment':\n return this.textAlignment;\n case 'lineSpacing':\n return this.lineSpacing;\n case 'lineSpacingType':\n return this.lineSpacingType;\n default:\n return undefined;\n }\n };\n /**\n * Notifies whenever the property gets changed.\n * @param {string} propertyName\n */\n SelectionParagraphFormat.prototype.notifyPropertyChanged = function (propertyName) {\n if (!isNullOrUndefined(this.selection) &&\n (this.selection.owner.isReadOnlyMode || !this.selection.owner.isDocumentLoaded)\n && !this.selection.isRetrieveFormatting) {\n return;\n }\n if (!isNullOrUndefined(this.selection) && !isNullOrUndefined(this.selection.start) && !this.selection.isRetrieveFormatting) {\n var editorModule = this.selection.owner.editorModule;\n var value = this.getPropertyValue(propertyName);\n if ((propertyName === 'leftIndent' || propertyName === 'rightIndent' || propertyName === 'firstLineIndent')\n && !(value >= -1056 && value < 1056)) {\n return;\n }\n if (propertyName === 'listLevelNumber') {\n editorModule.onApplyListInternal(this.viewer.getListById(this.listId), this.listLevelNumber);\n }\n else {\n editorModule.onApplyParagraphFormat(propertyName, value, propertyName === 'textAlignment' ? true : false, false);\n }\n }\n };\n /**\n * Copies the format.\n * @param {WParagraphFormat} format\n * @returns void\n * @private\n */\n SelectionParagraphFormat.prototype.copyFormat = function (format) {\n this.styleName = !isNullOrUndefined(format.baseStyle) ? format.baseStyle.name : 'Normal';\n this.leftIndent = format.leftIndent;\n this.rightIndent = format.rightIndent;\n this.firstLineIndent = format.firstLineIndent;\n this.afterSpacing = format.afterSpacing;\n this.beforeSpacing = format.beforeSpacing;\n this.lineSpacing = format.lineSpacing;\n this.lineSpacingType = format.lineSpacingType;\n this.textAlignment = format.textAlignment;\n if (!isNullOrUndefined(format.listFormat) && !isNullOrUndefined(format.listFormat.listId)) {\n this.listId = format.listFormat.listId;\n this.listLevelNumber = format.listFormat.listLevelNumber;\n }\n else {\n this.listId = undefined;\n this.listLevelNumber = 0;\n }\n };\n /**\n * Copies to format.\n * @param {WParagraphFormat} format\n * @private\n */\n SelectionParagraphFormat.prototype.copyToFormat = function (format) {\n if (isNullOrUndefined(format)) {\n return;\n }\n if (!isNullOrUndefined(this.afterSpacing)) {\n format.afterSpacing = this.afterSpacing;\n }\n if (!isNullOrUndefined(this.beforeSpacing)) {\n format.beforeSpacing = this.beforeSpacing;\n }\n if (!isNullOrUndefined(this.leftIndent)) {\n format.leftIndent = this.leftIndent;\n }\n if (!isNullOrUndefined(this.rightIndent)) {\n format.rightIndent = this.rightIndent;\n }\n if (!isNullOrUndefined(this.textAlignment)) {\n format.textAlignment = this.textAlignment;\n }\n if (!isNullOrUndefined(this.lineSpacing)) {\n format.lineSpacing = this.lineSpacing;\n }\n if (!isNullOrUndefined(this.lineSpacingType)) {\n format.lineSpacingType = this.lineSpacingType;\n }\n if (!isNullOrUndefined(this.firstLineIndent)) {\n format.firstLineIndent = this.firstLineIndent;\n }\n };\n /**\n * Combines the format.\n * @param {WParagraphFormat} format\n * @private\n */\n SelectionParagraphFormat.prototype.combineFormat = function (format) {\n if (!isNullOrUndefined(this.leftIndent) && this.leftIndent !== format.leftIndent) {\n this.leftIndent = undefined;\n }\n if (!isNullOrUndefined(this.rightIndent) && this.rightIndent !== format.rightIndent) {\n this.rightIndent = undefined;\n }\n if (!isNullOrUndefined(this.firstLineIndent) && this.firstLineIndent !== format.firstLineIndent) {\n this.firstLineIndent = undefined;\n }\n if (this.lineSpacing !== 0 && this.lineSpacing !== format.lineSpacing) {\n this.lineSpacing = 0;\n }\n if (this.beforeSpacing !== -1 && this.beforeSpacing !== format.beforeSpacing) {\n this.beforeSpacing = -1;\n }\n if (this.afterSpacing !== -1 && this.afterSpacing !== format.afterSpacing) {\n this.afterSpacing = -1;\n }\n if (!isNullOrUndefined(this.lineSpacingType) && this.lineSpacingType !== format.lineSpacingType) {\n this.lineSpacingType = undefined;\n }\n if (!isNullOrUndefined(this.textAlignment) && this.textAlignment !== format.textAlignment) {\n this.textAlignment = undefined;\n }\n // tslint:disable-next-line:max-line-length\n if (this.listLevelNumber >= 0 && !isNullOrUndefined(this.listId) && (isNullOrUndefined(format.listFormat) || format.listFormat.listLevelNumber !== this.listLevelNumber)) {\n this.listLevelNumber = -1;\n }\n // tslint:disable-next-line:max-line-length\n if (isNullOrUndefined(format.listFormat) || isNullOrUndefined(format.listFormat.listId) || (!isNullOrUndefined(this.listId) && this.listId !== format.listFormat.listId)) {\n this.listId = undefined;\n }\n };\n /**\n * Clears the format.\n * @returns void\n * @private\n */\n SelectionParagraphFormat.prototype.clearFormat = function () {\n this.leftIndent = 0;\n this.rightIndent = 0;\n this.beforeSpacing = 0;\n this.afterSpacing = 0;\n this.firstLineIndent = 0;\n this.lineSpacing = 1;\n this.textAlignment = undefined;\n this.lineSpacingType = undefined;\n this.listId = undefined;\n this.listLevelNumber = -1;\n this.styleName = undefined;\n };\n /**\n * Gets the clone of list at current selection.\n * @returns WList\n * @private\n */\n SelectionParagraphFormat.prototype.getList = function () {\n var list = this.viewer.getListById(this.listId);\n if (!isNullOrUndefined(list)) {\n var listAdv = new WList();\n var abstractList = new WAbstractList();\n var currentAbstractList = this.viewer.getAbstractListById(list.abstractListId);\n var editor = this.selection.owner.editorModule;\n if (!isNullOrUndefined(currentAbstractList)) {\n for (var i = 0; i < currentAbstractList.levels.length; i++) {\n var level = editor.cloneListLevel(currentAbstractList.levels[i]);\n abstractList.levels.push(level);\n level.ownerBase = abstractList;\n }\n }\n else {\n abstractList.levels.push(new WListLevel(abstractList));\n }\n if (!isNullOrUndefined(list.levelOverrides)) {\n for (var i = 0; i < list.levelOverrides.length; i++) {\n var levelOverride = editor.cloneLevelOverride(list.levelOverrides[i]);\n listAdv.levelOverrides.push(levelOverride);\n }\n }\n listAdv.abstractList = abstractList;\n listAdv.abstractListId = abstractList.abstractListId;\n listAdv.sourceListId = list.listId;\n return listAdv;\n }\n return undefined;\n };\n /**\n * Modifies the list at current selection.\n * @param {WList} listAdv\n * @private\n */\n SelectionParagraphFormat.prototype.setList = function (listAdv) {\n if (this.viewer.owner.isReadOnlyMode || !this.viewer.owner.isDocumentLoaded) {\n return;\n }\n var list = this.viewer.getListById(this.listId);\n var collection = undefined;\n var currentAbstractList = listAdv ? this.viewer.getAbstractListById(listAdv.abstractListId) : undefined;\n if (!isNullOrUndefined(list) && !isNullOrUndefined(listAdv)\n && !isNullOrUndefined(currentAbstractList) && listAdv.sourceListId === list.listId) {\n var history_1 = this.viewer.owner.editorHistory;\n var listLevel = this.viewer.layout.getListLevel(list, 1);\n this.selection.owner.isLayoutEnabled = false;\n this.viewer.owner.editorModule.setOffsetValue(this.selection);\n if (history_1) {\n collection = history_1.updateListChangesInHistory(currentAbstractList, list);\n }\n this.viewer.owner.editorModule.updateListParagraphs();\n if (history_1) {\n history_1.applyListChanges(this.selection, collection);\n }\n this.selection.owner.isLayoutEnabled = true;\n this.viewer.renderedLists.clear();\n // this.viewer.pages = [];\n this.viewer.owner.editorModule.layoutWholeDocument();\n this.viewer.owner.editorModule.updateSelectionTextPosition(false);\n if (history_1 && history_1.currentBaseHistoryInfo) {\n if (history_1.currentBaseHistoryInfo.modifiedProperties.length > 0) {\n history_1.currentBaseHistoryInfo.updateSelection();\n }\n history_1.updateHistory();\n }\n this.viewer.owner.editorModule.fireContentChange();\n }\n else if (!isNullOrUndefined(listAdv)) {\n this.selection.owner.isLayoutEnabled = false;\n if (!isNullOrUndefined(currentAbstractList) && this.viewer.abstractLists.indexOf(currentAbstractList) === -1) {\n this.viewer.abstractLists.push(currentAbstractList);\n }\n if (this.viewer.lists.indexOf(listAdv) === -1) {\n this.viewer.lists.push(listAdv);\n }\n //currentAbstractList.listType = 'Numbering';\n this.selection.owner.isLayoutEnabled = true;\n this.selection.owner.editorModule.onApplyList(listAdv);\n }\n else {\n this.selection.owner.editorModule.onApplyList(undefined);\n }\n };\n /**\n * Destroys the managed resources.\n * @returns void\n * @private\n */\n SelectionParagraphFormat.prototype.destroy = function () {\n this.leftIndentIn = undefined;\n this.rightIndentIn = undefined;\n this.beforeSpacingIn = undefined;\n this.afterSpacingIn = undefined;\n this.firstLineIndentIn = undefined;\n this.lineSpacingIn = undefined;\n this.textAlignmentIn = undefined;\n this.lineSpacingTypeIn = undefined;\n this.listId = undefined;\n this.listLevelNumberIn = undefined;\n this.viewer = undefined;\n this.selection = undefined;\n this.styleName = undefined;\n };\n return SelectionParagraphFormat;\n}());\nexport { SelectionParagraphFormat };\n/**\n * Selection section format implementation\n */\nvar SelectionSectionFormat = /** @class */ (function () {\n /**\n * @private\n */\n function SelectionSectionFormat(selection) {\n this.differentFirstPageIn = undefined;\n this.differentOddAndEvenPagesIn = undefined;\n this.selection = selection;\n }\n Object.defineProperty(SelectionSectionFormat.prototype, \"pageHeight\", {\n /**\n * Gets or sets the page height.\n */\n get: function () {\n return this.pageHeightIn;\n },\n set: function (value) {\n this.pageHeightIn = value;\n this.notifyPropertyChanged('pageHeight');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"pageWidth\", {\n /**\n * Gets or sets the page width.\n */\n get: function () {\n return this.pageWidthIn;\n },\n set: function (value) {\n this.pageWidthIn = value;\n this.notifyPropertyChanged('pageWidth');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"leftMargin\", {\n /**\n * Gets or sets the page left margin.\n */\n get: function () {\n return this.leftMarginIn;\n },\n set: function (value) {\n this.leftMarginIn = value;\n this.notifyPropertyChanged('leftMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"bottomMargin\", {\n /**\n * Gets or sets the page bottom margin.\n */\n get: function () {\n return this.bottomMarginIn;\n },\n set: function (value) {\n this.bottomMarginIn = value;\n this.notifyPropertyChanged('bottomMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"topMargin\", {\n /**\n * Gets or sets the page top margin.\n */\n get: function () {\n return this.topMarginIn;\n },\n set: function (value) {\n this.topMarginIn = value;\n this.notifyPropertyChanged('topMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"rightMargin\", {\n /**\n * Gets or sets the page right margin.\n */\n get: function () {\n return this.rightMarginIn;\n },\n set: function (value) {\n this.rightMarginIn = value;\n this.notifyPropertyChanged('rightMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"headerDistance\", {\n /**\n * Gets or sets the header distance.\n */\n get: function () {\n return this.headerDistanceIn;\n },\n set: function (value) {\n this.headerDistanceIn = value;\n this.notifyPropertyChanged('headerDistance');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"footerDistance\", {\n /**\n * Gets or sets the footer distance.\n */\n get: function () {\n return this.footerDistanceIn;\n },\n set: function (value) {\n this.footerDistanceIn = value;\n this.notifyPropertyChanged('footerDistance');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"differentFirstPage\", {\n /**\n * Gets or sets a value indicating whether the section has different first page.\n */\n get: function () {\n return this.differentFirstPageIn;\n },\n set: function (value) {\n this.differentFirstPageIn = value;\n this.notifyPropertyChanged('differentFirstPage');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"differentOddAndEvenPages\", {\n /**\n * Gets or sets a value indicating whether the section has different odd and even page.\n */\n get: function () {\n return this.differentOddAndEvenPagesIn;\n },\n set: function (value) {\n this.differentOddAndEvenPagesIn = value;\n this.notifyPropertyChanged('differentOddAndEvenPages');\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Copies the format.\n * @param {WSectionFormat} format\n * @returns void\n * @private\n */\n SelectionSectionFormat.prototype.copyFormat = function (format) {\n this.pageHeight = format.pageHeight;\n this.pageWidth = format.pageWidth;\n this.leftMargin = format.leftMargin;\n this.topMargin = format.topMargin;\n this.rightMargin = format.rightMargin;\n this.bottomMargin = format.bottomMargin;\n this.headerDistance = format.headerDistance;\n this.footerDistance = format.footerDistance;\n this.differentFirstPage = format.differentFirstPage;\n this.differentOddAndEvenPages = format.differentOddAndEvenPages;\n };\n SelectionSectionFormat.prototype.notifyPropertyChanged = function (propertyName) {\n var selection = this.selection;\n if (!isNullOrUndefined(selection) && (selection.isCleared || selection.owner.isPastingContent\n || selection.owner.isReadOnlyMode || !selection.owner.isDocumentLoaded)\n && !selection.isRetrieveFormatting) {\n return;\n }\n if (!isNullOrUndefined(selection) && !isNullOrUndefined(selection.start) && !selection.isRetrieveFormatting) {\n var value = this.getPropertyvalue(propertyName);\n if (!isNullOrUndefined(value)) {\n selection.owner.editorModule.onApplySectionFormat(propertyName, value);\n }\n }\n };\n SelectionSectionFormat.prototype.getPropertyvalue = function (propertyName) {\n switch (propertyName) {\n case 'pageHeight':\n if (this.pageHeight > 0) {\n return this.pageHeight;\n }\n return undefined;\n case 'pageWidth':\n if (this.pageWidth > 0) {\n return this.pageWidth;\n }\n return undefined;\n case 'leftMargin':\n if (this.leftMargin >= 0) {\n return this.leftMargin;\n }\n return undefined;\n case 'rightMargin':\n if (this.rightMargin >= 0) {\n return this.rightMargin;\n }\n return undefined;\n case 'topMargin':\n if (this.topMargin >= 0) {\n return this.topMargin;\n }\n return undefined;\n case 'bottomMargin':\n if (this.bottomMargin >= 0) {\n return this.bottomMargin;\n }\n return undefined;\n case 'differentFirstPage':\n if (!isNullOrUndefined(this.differentFirstPage)) {\n return this.differentFirstPage;\n }\n return undefined;\n case 'differentOddAndEvenPages':\n if (!isNullOrUndefined(this.differentOddAndEvenPages)) {\n return this.differentOddAndEvenPages;\n }\n return undefined;\n case 'headerDistance':\n return this.headerDistanceIn;\n case 'footerDistance':\n return this.footerDistance;\n default:\n return undefined;\n }\n };\n /**\n * Combines the format.\n * @param {WSectionFormat} format\n * @private\n */\n SelectionSectionFormat.prototype.combineFormat = function (format) {\n if (this.pageHeight > 0 && this.pageHeight !== format.pageHeight) {\n this.pageHeight = 0;\n }\n if (this.pageWidth > 0 && this.pageWidth !== format.pageWidth) {\n this.pageWidth = 0;\n }\n if (this.leftMargin > -1 && this.leftMargin !== format.leftMargin) {\n this.leftMargin = -1;\n }\n if (this.topMargin > -1 && this.topMargin !== format.topMargin) {\n this.topMargin = -1;\n }\n if (this.rightMargin > -1 && this.rightMargin !== format.rightMargin) {\n this.rightMargin = -1;\n }\n if (this.bottomMargin > -1 && this.bottomMargin !== format.bottomMargin) {\n this.bottomMargin = -1;\n }\n if (this.headerDistance !== 0 && this.headerDistance !== format.headerDistance) {\n this.headerDistance = 0;\n }\n if (this.footerDistance !== 0 && this.footerDistance !== format.footerDistance) {\n this.footerDistance = 0;\n }\n if (!isNullOrUndefined(this.differentFirstPage) && this.differentFirstPage !== format.differentFirstPage) {\n this.differentFirstPage = undefined;\n }\n if (!isNullOrUndefined(this.differentOddAndEvenPages) && this.differentOddAndEvenPages !== format.differentOddAndEvenPages) {\n this.differentOddAndEvenPages = undefined;\n }\n };\n /**\n * Clears the format.\n * @returns void\n * @private\n */\n SelectionSectionFormat.prototype.clearFormat = function () {\n this.headerDistance = 0;\n this.footerDistance = 0;\n this.pageHeight = 0;\n this.pageWidth = 0;\n this.leftMargin = -1;\n this.rightMargin = -1;\n this.topMargin = -1;\n this.bottomMargin = -1;\n this.differentFirstPage = undefined;\n this.differentOddAndEvenPages = undefined;\n };\n /**\n * Destroys the managed resources.\n * @returns void\n * @private\n */\n SelectionSectionFormat.prototype.destroy = function () {\n this.headerDistanceIn = undefined;\n this.footerDistanceIn = undefined;\n this.pageHeightIn = undefined;\n this.pageWidthIn = undefined;\n this.leftMarginIn = undefined;\n this.rightMarginIn = undefined;\n this.topMarginIn = undefined;\n this.bottomMarginIn = undefined;\n this.differentFirstPageIn = undefined;\n this.differentOddAndEvenPagesIn = undefined;\n this.selection = undefined;\n };\n return SelectionSectionFormat;\n}());\nexport { SelectionSectionFormat };\n/**\n * Selection table format implementation\n */\nvar SelectionTableFormat = /** @class */ (function () {\n /**\n * @private\n */\n function SelectionTableFormat(selection) {\n this.leftIndentIn = 0;\n this.backgroundIn = undefined;\n this.tableAlignmentIn = undefined;\n this.cellSpacingIn = 0;\n this.leftMarginIn = 0;\n this.rightMarginIn = 0;\n this.topMarginIn = 0;\n this.bottomMarginIn = 0;\n this.preferredWidthIn = 0;\n this.selection = selection;\n }\n Object.defineProperty(SelectionTableFormat.prototype, \"table\", {\n /**\n * Gets or sets the table.\n * @private\n */\n get: function () {\n return this.tableIn;\n },\n set: function (value) {\n this.tableIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"leftIndent\", {\n /**\n * Gets or Sets the left indent for selected table.\n * @private\n */\n get: function () {\n return this.leftIndentIn;\n },\n set: function (value) {\n if (value === this.leftIndentIn) {\n return;\n }\n this.leftIndentIn = value;\n this.notifyPropertyChanged('leftIndent');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"topMargin\", {\n /**\n * Gets or Sets the default top margin of cell for selected table.\n * @default undefined\n */\n get: function () {\n return this.topMarginIn;\n },\n set: function (value) {\n if (value === this.topMarginIn) {\n return;\n }\n this.topMarginIn = value;\n this.notifyPropertyChanged('topMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"background\", {\n /**\n * Gets or Sets the background for selected table.\n * @default undefined\n */\n get: function () {\n return this.backgroundIn;\n },\n set: function (value) {\n if (value === this.backgroundIn) {\n return;\n }\n this.backgroundIn = value;\n this.notifyPropertyChanged('background');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"tableAlignment\", {\n /**\n * Gets or Sets the table alignment for selected table.\n * @default undefined\n */\n get: function () {\n return this.tableAlignmentIn;\n },\n set: function (value) {\n if (value === this.tableAlignmentIn) {\n return;\n }\n this.tableAlignmentIn = value;\n this.notifyPropertyChanged('tableAlignment');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"leftMargin\", {\n /**\n * Gets or Sets the default left margin of cell for selected table.\n * @default undefined\n */\n get: function () {\n return this.leftMarginIn;\n },\n set: function (value) {\n if (value === this.leftMarginIn) {\n return;\n }\n this.leftMarginIn = value;\n this.notifyPropertyChanged('leftMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"bottomMargin\", {\n /**\n * Gets or Sets the default bottom margin of cell for selected table.\n * @default undefined\n */\n get: function () {\n return this.bottomMarginIn;\n },\n set: function (value) {\n if (value === this.bottomMarginIn) {\n return;\n }\n this.bottomMarginIn = value;\n this.notifyPropertyChanged('bottomMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"cellSpacing\", {\n /**\n * Gets or Sets the cell spacing for selected table.\n * @default undefined\n */\n get: function () {\n return this.cellSpacingIn;\n },\n set: function (value) {\n if (value === this.cellSpacingIn) {\n return;\n }\n this.cellSpacingIn = value;\n this.notifyPropertyChanged('cellSpacing');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"rightMargin\", {\n /**\n * Gets or Sets the default right margin of cell for selected table.\n * @default undefined\n */\n get: function () {\n return this.rightMarginIn;\n },\n set: function (value) {\n if (value === this.rightMarginIn) {\n return;\n }\n this.rightMarginIn = value;\n this.notifyPropertyChanged('rightMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"preferredWidth\", {\n /**\n * Gets or Sets the preferred width for selected table.\n * @default undefined\n */\n get: function () {\n return this.preferredWidthIn;\n },\n set: function (value) {\n if (value === this.preferredWidthIn) {\n return;\n }\n this.preferredWidthIn = value;\n this.notifyPropertyChanged('preferredWidth');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"preferredWidthType\", {\n /**\n * Gets or Sets the preferred width type for selected table.\n * @default undefined\n */\n get: function () {\n return this.preferredWidthTypeIn;\n },\n set: function (value) {\n if (value === this.preferredWidthTypeIn) {\n return;\n }\n this.preferredWidthTypeIn = value;\n this.notifyPropertyChanged('preferredWidthType');\n },\n enumerable: true,\n configurable: true\n });\n SelectionTableFormat.prototype.getPropertyValue = function (propertyName) {\n switch (propertyName) {\n case 'tableAlignment':\n return this.tableAlignment;\n case 'leftIndent':\n return this.leftIndent;\n case 'cellSpacing':\n return this.cellSpacing;\n case 'leftMargin':\n return this.leftMargin;\n case 'rightMargin':\n return this.rightMargin;\n case 'topMargin':\n return this.topMargin;\n case 'bottomMargin':\n return this.bottomMargin;\n case 'background':\n var shading = new WShading();\n shading.backgroundColor = this.background;\n return shading;\n case 'preferredWidth':\n return this.preferredWidth;\n case 'preferredWidthType':\n return this.preferredWidthType;\n default:\n return undefined;\n }\n };\n SelectionTableFormat.prototype.notifyPropertyChanged = function (propertyName) {\n if (!isNullOrUndefined(this.selection) && (this.selection.isCleared\n || !this.selection.owner.isDocumentLoaded || this.selection.owner.isReadOnlyMode\n || this.selection.owner.isPastingContent) && !this.selection.isRetrieveFormatting) {\n return;\n }\n if (!isNullOrUndefined(this.selection) && !isNullOrUndefined(this.selection.start) && !this.selection.isRetrieveFormatting) {\n var value = this.getPropertyValue(propertyName);\n if (propertyName === 'background') {\n propertyName = 'shading';\n }\n if (!isNullOrUndefined(value)) {\n this.selection.owner.editorModule.onApplyTableFormat(propertyName, value);\n }\n }\n };\n /**\n * Copies the format.\n * @param {WTableFormat} format Format to copy.\n * @returns void\n * @private\n */\n SelectionTableFormat.prototype.copyFormat = function (format) {\n this.leftIndent = format.leftIndent;\n this.background = format.shading.backgroundColor;\n this.tableAlignment = format.tableAlignment;\n this.leftMargin = format.leftMargin;\n this.rightMargin = format.rightMargin;\n this.topMargin = format.topMargin;\n this.bottomMargin = format.bottomMargin;\n this.cellSpacing = format.cellSpacing;\n this.preferredWidth = format.preferredWidth;\n this.preferredWidthType = format.preferredWidthType;\n };\n /**\n * Clears the format.\n * @returns void\n * @private\n */\n SelectionTableFormat.prototype.clearFormat = function () {\n this.table = undefined;\n this.leftIndent = 0;\n this.background = undefined;\n this.leftIndent = 0;\n this.leftMargin = 0;\n this.rightMargin = 0;\n this.topMargin = 0;\n this.bottomMargin = 0;\n this.cellSpacing = 0;\n this.tableAlignment = undefined;\n };\n /**\n * Destroys the managed resources.\n * @returns void\n * @private\n */\n SelectionTableFormat.prototype.destroy = function () {\n this.leftIndentIn = undefined;\n this.backgroundIn = undefined;\n this.leftIndentIn = undefined;\n this.leftMarginIn = undefined;\n this.rightMarginIn = undefined;\n this.topMarginIn = undefined;\n this.bottomMarginIn = undefined;\n this.cellSpacingIn = undefined;\n this.tableAlignmentIn = undefined;\n this.tableIn = undefined;\n this.selection = undefined;\n };\n return SelectionTableFormat;\n}());\nexport { SelectionTableFormat };\n/**\n * Selection cell format implementation\n */\nvar SelectionCellFormat = /** @class */ (function () {\n /**\n * @private\n */\n function SelectionCellFormat(selection) {\n this.verticalAlignmentIn = undefined;\n this.leftMarginIn = 0;\n this.rightMarginIn = 0;\n this.topMarginIn = 0;\n this.bottomMarginIn = 0;\n this.backgroundIn = undefined;\n this.preferredWidthTypeIn = undefined;\n this.selection = selection;\n }\n Object.defineProperty(SelectionCellFormat.prototype, \"verticalAlignment\", {\n /**\n * Gets or sets the vertical alignment of the selected cells.\n * @default undefined\n */\n get: function () {\n return this.verticalAlignmentIn;\n },\n set: function (value) {\n if (value === this.verticalAlignmentIn) {\n return;\n }\n this.verticalAlignmentIn = value;\n this.notifyPropertyChanged('verticalAlignment');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCellFormat.prototype, \"leftMargin\", {\n /**\n * Gets or Sets the left margin for selected cells.\n * @default undefined\n */\n /* tslint:disable */\n get: function () {\n return this.leftMarginIn;\n },\n set: function (value) {\n if (value === this.leftMarginIn) {\n return;\n }\n this.leftMarginIn = value;\n this.notifyPropertyChanged('leftMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCellFormat.prototype, \"rightMargin\", {\n /**\n * Gets or Sets the right margin for selected cells.\n * @default undefined\n */\n get: function () {\n return this.rightMarginIn;\n },\n set: function (value) {\n if (value === this.rightMarginIn) {\n return;\n }\n this.rightMarginIn = value;\n this.notifyPropertyChanged('rightMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCellFormat.prototype, \"topMargin\", {\n /**\n * Gets or Sets the top margin for selected cells.\n * @default undefined\n */\n get: function () {\n return this.topMarginIn;\n },\n set: function (value) {\n if (value === this.topMarginIn) {\n return;\n }\n this.topMarginIn = value;\n this.notifyPropertyChanged('topMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCellFormat.prototype, \"bottomMargin\", {\n /**\n * Gets or Sets the bottom margin for selected cells.\n * @default undefined\n */\n get: function () {\n return this.bottomMarginIn;\n },\n set: function (value) {\n if (value === this.bottomMarginIn) {\n return;\n }\n this.bottomMarginIn = value;\n this.notifyPropertyChanged('bottomMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCellFormat.prototype, \"background\", {\n /**\n * Gets or Sets the background for selected cells.\n * @default undefined\n */\n get: function () {\n return this.backgroundIn;\n },\n /* tslint:enable */\n set: function (value) {\n if (value === this.backgroundIn) {\n return;\n }\n this.backgroundIn = value;\n this.notifyPropertyChanged('background');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCellFormat.prototype, \"preferredWidthType\", {\n /* tslint:disable */\n /**\n * Gets or Sets the preferred width type for selected cells.\n * @default undefined\n */\n get: function () {\n return this.preferredWidthTypeIn;\n },\n set: function (value) {\n if (value === this.preferredWidthTypeIn) {\n return;\n }\n this.preferredWidthTypeIn = value;\n this.notifyPropertyChanged('preferredWidthType');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCellFormat.prototype, \"preferredWidth\", {\n /**\n * Gets or Sets the preferred width for selected cells.\n * @default undefined\n */\n get: function () {\n return this.preferredWidthIn;\n },\n set: function (value) {\n if (value === this.preferredWidthIn) {\n return;\n }\n this.preferredWidthIn = value;\n this.notifyPropertyChanged('preferredWidth');\n },\n enumerable: true,\n configurable: true\n });\n /* tslint:enable */\n SelectionCellFormat.prototype.notifyPropertyChanged = function (propertyName) {\n var selection = this.selection;\n if (!isNullOrUndefined(selection)) {\n if ((selection.isCleared || !selection.owner.isDocumentLoaded\n || selection.owner.isReadOnlyMode || selection.owner.isPastingContent) && !selection.isRetrieveFormatting) {\n return;\n }\n if (!isNullOrUndefined(this.selection.start) && !this.selection.isRetrieveFormatting) {\n var value = this.getPropertyValue(propertyName);\n if (propertyName === 'background') {\n propertyName = 'shading';\n }\n if (!isNullOrUndefined(value)) {\n this.selection.owner.editorModule.onApplyTableCellFormat(propertyName, value);\n }\n }\n }\n };\n SelectionCellFormat.prototype.getPropertyValue = function (propertyName) {\n switch (propertyName) {\n case 'verticalAlignment':\n return this.verticalAlignment;\n case 'leftMargin':\n return this.leftMargin;\n case 'rightMargin':\n return this.rightMargin;\n case 'topMargin':\n return this.topMargin;\n case 'bottomMargin':\n return this.bottomMargin;\n case 'preferredWidth':\n return this.preferredWidth;\n case 'preferredWidthType':\n return this.preferredWidthType;\n case 'background':\n var shading = new WShading();\n shading.backgroundColor = this.background;\n return shading;\n default:\n return undefined;\n }\n };\n /**\n * Copies the format.\n * @param {WCellFormat} format Source Format to copy.\n * @returns void\n * @private\n */\n SelectionCellFormat.prototype.copyFormat = function (format) {\n this.leftMargin = format.leftMargin;\n this.rightMargin = format.rightMargin;\n this.topMargin = format.topMargin;\n this.bottomMargin = format.bottomMargin;\n this.background = format.shading.backgroundColor;\n this.verticalAlignment = format.verticalAlignment;\n this.preferredWidth = format.preferredWidth;\n this.preferredWidthType = format.preferredWidthType;\n };\n /**\n * Clears the format.\n * @returns void\n * @private\n */\n SelectionCellFormat.prototype.clearCellFormat = function () {\n this.leftMargin = undefined;\n this.rightMargin = undefined;\n this.topMargin = undefined;\n this.bottomMargin = undefined;\n this.background = undefined;\n this.verticalAlignment = undefined;\n };\n /**\n * Combines the format.\n * @param {WCellFormat} format\n * @private\n */\n SelectionCellFormat.prototype.combineFormat = function (format) {\n if (!isNullOrUndefined(this.leftMargin) && this.leftMargin !== format.leftMargin) {\n this.leftMargin = undefined;\n }\n if (!isNullOrUndefined(this.topMargin) && this.topMargin !== format.topMargin) {\n this.topMargin = undefined;\n }\n if (!isNullOrUndefined(this.rightMargin) && this.rightMargin !== format.rightMargin) {\n this.rightMargin = undefined;\n }\n if (!isNullOrUndefined(this.bottomMargin) && this.bottomMargin !== format.bottomMargin) {\n this.bottomMargin = undefined;\n }\n if (!isNullOrUndefined(this.background) && this.background !== format.shading.backgroundColor) {\n this.background = undefined;\n }\n if (!isNullOrUndefined(this.verticalAlignment) && this.verticalAlignment !== format.verticalAlignment) {\n this.verticalAlignment = undefined;\n }\n if (!isNullOrUndefined(this.preferredWidth) && this.preferredWidth !== format.preferredWidth) {\n this.preferredWidth = undefined;\n }\n if (!isNullOrUndefined(this.preferredWidthType) && this.preferredWidthType !== format.preferredWidthType) {\n this.preferredWidthType = undefined;\n }\n };\n /**\n * Clears the format.\n * @returns void\n * @private\n */\n SelectionCellFormat.prototype.clearFormat = function () {\n this.background = undefined;\n this.bottomMargin = 0;\n this.leftMargin = 0;\n this.rightMargin = 0;\n this.topMargin = 0;\n this.verticalAlignment = undefined;\n };\n /**\n * Destroys the manages resources.\n * @returns void\n * @private\n */\n SelectionCellFormat.prototype.destroy = function () {\n this.backgroundIn = undefined;\n this.verticalAlignmentIn = undefined;\n this.bottomMarginIn = undefined;\n this.leftMarginIn = undefined;\n this.rightMarginIn = undefined;\n this.topMarginIn = undefined;\n this.selection = undefined;\n };\n return SelectionCellFormat;\n}());\nexport { SelectionCellFormat };\n/**\n * Selection row format implementation\n */\nvar SelectionRowFormat = /** @class */ (function () {\n /**\n * @private\n */\n function SelectionRowFormat(selection) {\n this.heightIn = undefined;\n this.heightTypeIn = undefined;\n this.isHeaderIn = undefined;\n this.allowRowBreakAcrossPagesIn = undefined;\n this.selection = selection;\n }\n Object.defineProperty(SelectionRowFormat.prototype, \"height\", {\n /**\n * Gets or Sets the height for selected rows.\n * @default undefined\n */\n get: function () {\n return this.heightIn;\n },\n set: function (value) {\n if (value === this.heightIn) {\n return;\n }\n this.heightIn = value;\n this.notifyPropertyChanged('height');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionRowFormat.prototype, \"heightType\", {\n /**\n * Gets or Sets the height type for selected rows.\n * @default undefined\n */\n get: function () {\n return this.heightTypeIn;\n },\n set: function (value) {\n if (value === this.heightTypeIn) {\n return;\n }\n this.heightTypeIn = value;\n this.notifyPropertyChanged('heightType');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionRowFormat.prototype, \"isHeader\", {\n /**\n * Gets or Sets a value indicating whether the selected rows are header rows or not.\n * @default undefined\n */\n get: function () {\n return this.isHeaderIn;\n },\n set: function (value) {\n if (value === this.isHeaderIn) {\n return;\n }\n this.isHeaderIn = value;\n this.notifyPropertyChanged('isHeader');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionRowFormat.prototype, \"allowBreakAcrossPages\", {\n /**\n * Gets or Sets a value indicating whether to allow break across pages for selected rows.\n * @default undefined\n */\n get: function () {\n return this.allowRowBreakAcrossPagesIn;\n },\n set: function (value) {\n if (value === this.allowRowBreakAcrossPagesIn) {\n return;\n }\n this.allowRowBreakAcrossPagesIn = value;\n this.notifyPropertyChanged('allowBreakAcrossPages');\n },\n enumerable: true,\n configurable: true\n });\n SelectionRowFormat.prototype.notifyPropertyChanged = function (propertyName) {\n var selection = this.selection;\n if (!isNullOrUndefined(selection) && (selection.isCleared || selection.owner.isReadOnlyMode\n || !selection.owner.isDocumentLoaded || selection.owner.isPastingContent) && !selection.isRetrieveFormatting) {\n return;\n }\n if (!isNullOrUndefined(selection) && !isNullOrUndefined(selection.start) && !selection.isRetrieveFormatting) {\n var value = this.getPropertyValue(propertyName);\n if (!isNullOrUndefined(value)) {\n selection.owner.editorModule.onApplyTableRowFormat(propertyName, value);\n }\n }\n };\n SelectionRowFormat.prototype.getPropertyValue = function (propertyName) {\n switch (propertyName) {\n case 'height':\n return this.height;\n case 'heightType':\n return this.heightType;\n case 'isHeader':\n return this.isHeader;\n case 'allowBreakAcrossPages':\n return this.allowBreakAcrossPages;\n default:\n return undefined;\n }\n };\n /**\n * Copies the format.\n * @param {WRowFormat} format\n * @returns void\n * @private\n */\n SelectionRowFormat.prototype.copyFormat = function (format) {\n this.height = format.height;\n this.heightType = format.heightType;\n this.allowBreakAcrossPages = format.allowBreakAcrossPages;\n this.isHeader = format.isHeader;\n };\n /**\n * Combines the format.\n * @param {WRowFormat} format\n * @private\n */\n SelectionRowFormat.prototype.combineFormat = function (format) {\n if (!isNullOrUndefined(this.height) && this.height !== format.height) {\n this.height = undefined;\n }\n if (!isNullOrUndefined(this.heightType) && this.heightType !== format.heightType) {\n this.heightType = undefined;\n }\n if (!isNullOrUndefined(this.allowBreakAcrossPages) && this.allowBreakAcrossPages !== format.allowBreakAcrossPages) {\n this.allowBreakAcrossPages = undefined;\n }\n if (!isNullOrUndefined(this.isHeader) && this.isHeader !== format.isHeader) {\n this.isHeader = undefined;\n }\n };\n /**\n * Clears the row format.\n * @returns void\n * @private\n */\n SelectionRowFormat.prototype.clearRowFormat = function () {\n this.height = undefined;\n this.heightType = undefined;\n this.allowBreakAcrossPages = undefined;\n this.isHeader = undefined;\n };\n /**\n * Clears the format.\n * @returns void\n * @private\n */\n SelectionRowFormat.prototype.clearFormat = function () {\n this.height = 0;\n this.heightType = undefined;\n this.allowBreakAcrossPages = undefined;\n this.isHeader = undefined;\n };\n /**\n * Destroys the managed resources.\n * @returns void\n * @private\n */\n SelectionRowFormat.prototype.destroy = function () {\n this.heightIn = undefined;\n this.heightTypeIn = undefined;\n this.allowRowBreakAcrossPagesIn = undefined;\n this.isHeaderIn = undefined;\n this.selection = undefined;\n };\n return SelectionRowFormat;\n}());\nexport { SelectionRowFormat };\n/**\n * Selection image format implementation\n */\nvar SelectionImageFormat = /** @class */ (function () {\n /**\n * @private\n */\n function SelectionImageFormat(selection) {\n this.selection = selection;\n }\n Object.defineProperty(SelectionImageFormat.prototype, \"width\", {\n /**\n * Gets the width of the image.\n */\n get: function () {\n if (this.image) {\n return this.image.width;\n }\n return 0;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionImageFormat.prototype, \"height\", {\n /**\n * Gets the height of the image.\n */\n get: function () {\n if (this.image) {\n return this.image.height;\n }\n return 0;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Resizes the image based on given size.\n * @param width\n * @param height\n */\n SelectionImageFormat.prototype.resize = function (width, height) {\n this.updateImageFormat(width, height);\n };\n /**\n * Update image width and height\n * @private\n */\n SelectionImageFormat.prototype.updateImageFormat = function (width, height) {\n if (this.image) {\n if (this.selection.owner.editorModule) {\n this.selection.owner.editorModule.onImageFormat(this.image, width, height);\n }\n }\n };\n /**\n * @private\n */\n SelectionImageFormat.prototype.copyImageFormat = function (image) {\n this.image = image;\n };\n /**\n * @private\n */\n SelectionImageFormat.prototype.clearImageFormat = function () {\n this.image = undefined;\n };\n return SelectionImageFormat;\n}());\nexport { SelectionImageFormat };\n/* tslint:enable */ \n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { HelperMethods } from '../editor/editor-helper';\n/**\n * @private\n */\nvar HtmlExport = /** @class */ (function () {\n function HtmlExport() {\n /* tslint:disable:no-any */\n this.document = undefined;\n /* tslint:disable:no-any */\n /**\n * @private\n */\n this.fieldCheck = 0;\n /* tslint:enable:no-any */\n }\n /* tslint:disable:no-any */\n /**\n * @private\n */\n HtmlExport.prototype.writeHtml = function (document) {\n this.document = document;\n var html = '';\n for (var i = 0; i < document.sections.length; i++) {\n html = this.serializeSection(document.sections[i]);\n }\n return html;\n };\n /**\n * @private\n */\n HtmlExport.prototype.serializeSection = function (section) {\n var string = '';\n for (var i = 0; i < section.blocks.length; i++) {\n var block = section.blocks[i];\n if (block.hasOwnProperty('inlines')) {\n string += this.serializeParagraph(block);\n }\n else {\n string += this.serializeTable(block);\n }\n }\n return string;\n };\n // Serialize Paragraph \n /**\n * @private\n */\n HtmlExport.prototype.serializeParagraph = function (paragraph) {\n var blockStyle = '';\n var startString = undefined;\n var isList = false;\n var tagAttributes = [];\n tagAttributes.push('style=\"' + this.serializeParagraphStyle(paragraph, '', isList) + '\"');\n blockStyle += this.createAttributesTag('p', tagAttributes);\n if (paragraph.inlines.length === 0) {\n //Handled to preserve non breaking space for empty paragraphs similar to MS Word behavior.\n blockStyle += ' ';\n }\n else {\n blockStyle = this.serializeInlines(paragraph, blockStyle);\n }\n blockStyle += this.endTag('p');\n return blockStyle;\n };\n //SerializeInlines\n /**\n * @private\n */\n HtmlExport.prototype.serializeInlines = function (paragraph, blockStyle) {\n var inline = undefined;\n var i = 0;\n while (paragraph.inlines.length > i) {\n inline = paragraph.inlines[i];\n if (inline.hasOwnProperty('imageString')) {\n blockStyle += this.serializeImageContainer(inline);\n }\n else if (inline.hasOwnProperty('fieldType')) {\n if (inline.fieldType === 0) {\n this.fieldCheck = 1;\n var tagAttributes = [];\n tagAttributes.push('style=\"' + this.serializeInlineStyle(inline.characterFormat, '') + '\"');\n blockStyle += this.createAttributesTag('a', tagAttributes);\n }\n else if (inline.fieldType === 2) {\n this.fieldCheck = 2;\n }\n else {\n blockStyle += this.endTag('a');\n this.fieldCheck = 0;\n }\n }\n else {\n var text = isNullOrUndefined(inline.text) ? '' : inline.text;\n if (this.fieldCheck === 0) {\n blockStyle += this.serializeSpan(text, inline.characterFormat);\n }\n if (this.fieldCheck === 1) {\n var hyperLink = text.replace('\\\"', '');\n blockStyle += ' href= \\\"' + hyperLink.replace('HYPERLINK', '').trim();\n blockStyle += '\\\"';\n blockStyle += '>';\n }\n if (this.fieldCheck === 2) {\n blockStyle += text;\n }\n }\n i++;\n }\n return blockStyle;\n };\n // Serialize Span\n /**\n * @private\n */\n HtmlExport.prototype.serializeSpan = function (spanText, characterFormat) {\n var spanClass = '';\n if (spanText.indexOf('\\v') !== -1) {\n spanClass += '
    ';\n return spanClass.toString();\n }\n var tagAttributes = [];\n this.serializeInlineStyle(characterFormat, '');\n tagAttributes.push('style=\"' + this.serializeInlineStyle(characterFormat, '') + '\"');\n spanClass += this.createAttributesTag('span', tagAttributes);\n var ignoreFirstSpace = false;\n // Todo: Need to handle it.\n // If the text starts with white-space, need to check whether it is a continuous space.\n // if (characterFormat.ownerBase instanceof WInline) {\n // let inline: WInline = (characterFormat.ownerBase as WInline);\n // tslint:disable:max-line-length \n // if (inline instanceof WSpan && !isNullOrUndefined(inline.text) && inline.text !== '' && (inline as WSpan).text[0] === ' ') {\n // Check previous inline until, it has valid rendered text.\n // do {\n // inline = WInline.getPreviousTextInline((inline as WSpan));\n // } while (inline instanceof WSpan && !isNullOrUndefined(inline.text));\n // } else {\n // inline = undefined;\n // }\n // If current white-space is a continuation of consecutive spaces, this will be set true.\n // ignoreFirstSpace = inline instanceof WSpan && !isNullOrUndefined(inline.text)\n // && (inline as WSpan).text[(inline as WSpan).text.length - 1] === ' ';\n // }\n var text = this.decodeHtmlNames(spanText.toString());\n spanClass += text;\n spanClass += this.endTag('span');\n return spanClass.toString();\n };\n //Serialize Image\n /**\n * @private\n */\n HtmlExport.prototype.serializeImageContainer = function (image) {\n var imageStyle = '';\n var tagAttributes = [];\n this.serializeInlineStyle(image.characterFormat, '');\n var imageSource = '';\n if (!isNullOrUndefined(image.imageString)) {\n imageSource = image.imageString;\n }\n var width = HelperMethods.convertPointToPixel(image.width);\n var height = HelperMethods.convertPointToPixel(image.height);\n tagAttributes.push('width=\"', width.toString() + '\"');\n tagAttributes.push('height=\"', height.toString() + '\"');\n tagAttributes.push('src=\"', imageSource + '\"');\n imageStyle += this.createAttributesTag('img', tagAttributes);\n imageStyle += (this.endTag('img'));\n return imageStyle.toString();\n };\n // Serialize Table Cell\n /**\n * @private\n */\n HtmlExport.prototype.serializeCell = function (cell) {\n var blockStyle = '';\n var tagAttributes = [];\n var cellHtml = '';\n tagAttributes = [];\n if (!isNullOrUndefined(cell.cellFormat)) {\n //if (cell.cellFormat.shading.backgroundColor !== Color.FromArgb(0, 0, 0, 0)) {\n tagAttributes.push('bgcolor=\"' + cell.cellFormat.shading.backgroundColor + '\"');\n // }\n if (cell.cellFormat.columnSpan > 1) {\n tagAttributes.push('colspan=\"' + cell.cellFormat.columnSpan.toString() + '\"');\n }\n if (cell.cellFormat.rowSpan > 1) {\n tagAttributes.push('rowspan=\"' + cell.cellFormat.rowSpan.toString() + '\"');\n }\n if (cell.cellFormat.cellWidth !== 0) {\n tagAttributes.push('width=\"' + cell.cellFormat.cellWidth.toString() + '\"');\n }\n if (cell.cellFormat.verticalAlignment !== 'Top') {\n tagAttributes.push('valign=\"' + cell.cellFormat.verticalAlignment.toString().toLowerCase() + '\"');\n }\n if (!isNullOrUndefined(cell.cellFormat.leftMargin) && cell.cellFormat.leftMargin !== 0) {\n cellHtml += ('padding-left:' + cell.cellFormat.leftMargin.toString() + 'pt;');\n }\n if (!isNullOrUndefined(cell.cellFormat.rightMargin) && cell.cellFormat.rightMargin !== 0) {\n cellHtml += ('padding-right:' + cell.cellFormat.rightMargin.toString() + 'pt;');\n }\n if (!isNullOrUndefined(cell.cellFormat.topMargin) && cell.cellFormat.topMargin !== 0) {\n cellHtml += ('padding-top:' + cell.cellFormat.topMargin.toString() + 'pt;');\n }\n if (!isNullOrUndefined(cell.cellFormat.bottomMargin) && cell.cellFormat.bottomMargin !== 0) {\n cellHtml += ('padding-bottom:' + cell.cellFormat.bottomMargin.toString() + 'pt;');\n }\n if (!isNullOrUndefined(cell.cellFormat.borders)) {\n cellHtml += this.serializeCellBordersStyle(cell.cellFormat.borders);\n }\n }\n if (cellHtml.length !== 0) {\n tagAttributes.push('style=\"' + cellHtml + '\"');\n }\n blockStyle += (this.createAttributesTag('td', tagAttributes));\n for (var k = 0; k < cell.blocks.length; k++) {\n var block = cell.blocks[k];\n if (block.hasOwnProperty('rows')) {\n blockStyle += this.serializeTable(block);\n }\n else {\n blockStyle += this.serializeParagraph(block);\n }\n }\n blockStyle += (this.endTag('td'));\n return blockStyle;\n };\n // Serialize Table\n /**\n * @private\n */\n HtmlExport.prototype.serializeTable = function (table) {\n var html = '';\n html += this.createTableStartTag(table);\n for (var j = 0; j < table.rows.length; j++) {\n html += this.serializeRow(table.rows[j]);\n }\n html += this.createTableEndTag();\n return html;\n };\n // Serialize Row\n /**\n * @private\n */\n HtmlExport.prototype.serializeRow = function (row) {\n var html = '';\n html += this.createRowStartTag(row);\n for (var k = 0; k < row.cells.length; k++) {\n html += this.serializeCell(row.cells[k]);\n }\n return html;\n };\n // Serialize Styles\n /**\n * @private\n */\n HtmlExport.prototype.serializeParagraphStyle = function (paragraph, className, isList) {\n var paragraphClass = '';\n paragraphClass += this.serializeCharacterFormat(paragraph.characterFormat);\n paragraphClass += this.serializeParagraphFormat(paragraph.paragraphFormat, isList);\n return paragraphClass;\n };\n /**\n * @private\n */\n HtmlExport.prototype.serializeInlineStyle = function (characterFormat, className) {\n return this.serializeCharacterFormat(characterFormat);\n };\n /**\n * @private\n */\n HtmlExport.prototype.serializeTableBorderStyle = function (borders) {\n var borderStyle = '';\n borderStyle += ('border-left-style:' + this.convertBorderLineStyle(borders.left.lineStyle));\n borderStyle += ';';\n borderStyle += ('border-left-width:' + borders.left.lineWidth.toString() + 'pt');\n borderStyle += ';';\n borderStyle += ('border-left-color:' + borders.left.color);\n borderStyle += ';';\n borderStyle += ('border-right-style:' + this.convertBorderLineStyle(borders.right.lineStyle));\n borderStyle += ';';\n borderStyle += ('border-right-width:' + borders.right.lineWidth.toString() + 'pt');\n borderStyle += ';';\n borderStyle += ('border-right-color:' + borders.right.color);\n borderStyle += ';';\n borderStyle += ('border-top-style:' + this.convertBorderLineStyle(borders.top.lineStyle));\n borderStyle += ';';\n borderStyle += ('border-top-width:' + borders.top.lineWidth.toString() + 'pt');\n borderStyle += ';';\n borderStyle += ('border-top-color:' + borders.top.color);\n borderStyle += ';';\n borderStyle += ('border-Bottom-style:' + this.convertBorderLineStyle(borders.bottom.lineStyle));\n borderStyle += ';';\n borderStyle += ('border-Bottom-width:' + borders.bottom.lineWidth.toString() + 'pt');\n borderStyle += ';';\n borderStyle += ('border-Bottom-color:' + borders.bottom.color);\n borderStyle += ';';\n return borderStyle;\n };\n /**\n * @private\n */\n HtmlExport.prototype.serializeCellBordersStyle = function (borders) {\n var borderStyle = '';\n borderStyle = 'border:solid 1px;';\n // Todo: handle\n // let border: WBorder = undefined;\n // //LeftBorder\n // border = WCell.getCellLeftBorder(WCell.getCellOf(borders));\n // if (!isNullOrUndefined(border) && border.lineStyle !== 'None') {\n // borderStyle += this.serializeBorderStyle(border, 'left');\n // } else if (!isNullOrUndefined(border) && border.hasNoneStyle) {\n // borderStyle += ('border-left-style:none;');\n // }\n // //RightBorder\n // border = WCell.getCellRightBorder(WCell.getCellOf(borders));\n // if (!isNullOrUndefined(border) && border.lineStyle !== 'None') {\n // borderStyle += this.serializeBorderStyle(border, 'right');\n // } else if (!isNullOrUndefined(border) && border.hasNoneStyle) {\n // borderStyle += ('border-right-style:none');\n // }\n // //TopBorder\n // border = WCell.getCellTopBorder(WCell.getCellOf(borders));\n // if (!isNullOrUndefined(border) && border.lineStyle !== 'None') {\n // borderStyle += this.serializeBorderStyle(border, 'top');\n // } else if (!isNullOrUndefined(border) && border.hasNoneStyle) {\n // borderStyle += ('border-top-style:none');\n // }\n // //BottomBorder\n // border = WCell.getCellBottomBorder(WCell.getCellOf(borders));\n // if (!isNullOrUndefined(border) && border.lineStyle !== 'None') {\n // borderStyle += this.serializeBorderStyle(border, 'bottom');\n // } else if (!isNullOrUndefined(border) && border.hasNoneStyle) {\n // borderStyle += ('border-bottom-style:none');\n // }\n return borderStyle;\n };\n /**\n * @private\n */\n HtmlExport.prototype.serializeBorderStyle = function (border, borderPosition) {\n var borderStyle = '';\n borderStyle += ('border-' + borderPosition + '-style:' + this.convertBorderLineStyle(border.lineStyle));\n borderStyle += ';';\n if (border.lineWidth > 0) {\n borderStyle += ('border-' + borderPosition + '-width:' + border.lineWidth.toString() + 'pt;');\n }\n //if (border.color !== Color.FromArgb(0, 0, 0, 0))\n borderStyle += ('border-' + borderPosition + '-color:' + border.color + ';');\n return borderStyle;\n };\n /**\n * @private\n */\n HtmlExport.prototype.convertBorderLineStyle = function (lineStyle) {\n switch (lineStyle) {\n case 'None':\n return 'none';\n case 'Single':\n return 'solid';\n case 'Dot':\n return 'dotted';\n case 'DashSmallGap':\n case 'DashLargeGap':\n case 'DashDot':\n case 'DashDotDot':\n return 'dashed';\n case 'Double':\n case 'Triple':\n case 'ThinThickSmallGap':\n case 'ThickThinSmallGap':\n case 'ThinThickThinSmallGap':\n case 'ThinThickMediumGap':\n case 'ThickThinMediumGap':\n case 'ThinThickThinMediumGap':\n case 'ThinThickLargeGap':\n case 'ThickThinLargeGap':\n case 'ThinThickThinLargeGap':\n return 'double';\n case 'SingleWavy':\n return 'solid';\n case 'DoubleWavy':\n return 'double';\n case 'DashDotStroked':\n return 'solid';\n case 'Emboss3D':\n return 'ridge';\n case 'Engrave3D':\n return 'groove';\n case 'Outset':\n return 'outset';\n case 'Inset':\n return 'inset';\n default:\n return 'solid';\n }\n };\n // Serialize Format\n /**\n * @private\n */\n HtmlExport.prototype.serializeCharacterFormat = function (characterFormat) {\n if (!isNullOrUndefined(characterFormat.inlineFormat)) {\n return this.serializeCharacterFormat(characterFormat.inlineFormat);\n }\n var propertyValue;\n var charStyle = '';\n if (characterFormat.bold) {\n charStyle += 'font-weight';\n charStyle += ':';\n charStyle += 'bold';\n charStyle += ';';\n }\n charStyle += 'font-style';\n charStyle += ':';\n if (characterFormat.italic) {\n charStyle += 'italic';\n }\n else {\n charStyle += 'normal';\n }\n charStyle += ';';\n // Double strike through will become Single strike through while saving HTML using MS Word.\n if (characterFormat.strikethrough === 'SingleStrike' || characterFormat.strikethrough === 'DoubleStrike') {\n charStyle += 'text-decoration';\n charStyle += ':';\n charStyle += 'line-through';\n charStyle += ';';\n }\n //Text Baseline Alignment\n // tslint:disable-next-line:max-line-length\n if (characterFormat.baselineAlignment === 'Superscript' || characterFormat.baselineAlignment === 'Subscript') {\n charStyle += 'vertical-align';\n charStyle += ':';\n charStyle += characterFormat.baselineAlignment === 'Superscript' ? 'super' : 'sub';\n charStyle += ';';\n }\n //Text Foreground and Background Color \n if (!isNullOrUndefined(characterFormat.highlightColor)) {\n charStyle += 'background-color';\n charStyle += ':';\n charStyle += characterFormat.highlightColor.toString();\n charStyle += ';';\n }\n //Font Color\n propertyValue = characterFormat.fontColor;\n if (!isNullOrUndefined(propertyValue)) {\n charStyle += 'color';\n charStyle += ':';\n charStyle += propertyValue;\n charStyle += ';';\n }\n if (!isNullOrUndefined(characterFormat.underline) && characterFormat.underline !== 'None') {\n charStyle += 'text-decoration';\n charStyle += ':';\n charStyle += 'underline';\n charStyle += ';';\n }\n propertyValue = characterFormat.fontSize;\n if (!isNullOrUndefined(propertyValue)) {\n charStyle += 'font-size';\n charStyle += ':';\n charStyle += propertyValue.toString();\n charStyle += 'pt';\n charStyle += ';';\n }\n propertyValue = characterFormat.fontFamily;\n if (!isNullOrUndefined(propertyValue)) {\n charStyle += 'font-family';\n charStyle += ':';\n charStyle += propertyValue.toString();\n charStyle += ';';\n }\n return charStyle.toString();\n };\n /**\n * @private\n */\n HtmlExport.prototype.serializeParagraphFormat = function (paragraphFormat, isList) {\n if (!isNullOrUndefined(paragraphFormat.inlineFormat)) {\n return this.serializeParagraphFormat(paragraphFormat.inlineFormat, isList);\n }\n var propertyValue;\n var paraStyle = '';\n propertyValue = paragraphFormat.textAlignment;\n if (!isNullOrUndefined(propertyValue)) {\n paraStyle += 'text-align:' + propertyValue.toLowerCase() + ';';\n }\n propertyValue = paragraphFormat.beforeSpacing;\n if (!isNullOrUndefined(propertyValue)) {\n paraStyle += 'margin-top:' + propertyValue.toString() + 'pt; ';\n }\n propertyValue = paragraphFormat.rightIndent;\n if (!isNullOrUndefined(propertyValue)) {\n paraStyle += 'margin-right:' + propertyValue.toString() + 'pt; ';\n }\n propertyValue = paragraphFormat.afterSpacing;\n if (!isNullOrUndefined(propertyValue)) {\n paraStyle += 'margin-bottom:' + propertyValue.toString() + 'pt; ';\n }\n propertyValue = paragraphFormat.leftIndent;\n if (isList) {\n if (isNullOrUndefined(propertyValue)) {\n propertyValue = -48;\n }\n else {\n propertyValue -= 48;\n }\n }\n if (!isNullOrUndefined(propertyValue)) {\n paraStyle += 'margin-left:' + propertyValue.toString() + 'pt; ';\n }\n propertyValue = paragraphFormat.firstLineIndent;\n if (isList) {\n if (isNullOrUndefined(propertyValue)) {\n propertyValue = 24;\n }\n else {\n propertyValue += 24;\n }\n }\n if (!isNullOrUndefined(propertyValue) && propertyValue !== 0) {\n paraStyle += 'text-indent:' + propertyValue.toString() + 'pt;';\n }\n propertyValue = paragraphFormat.lineSpacing;\n if (!isNullOrUndefined(propertyValue)) {\n if (paragraphFormat.lineSpacingType === 'Multiple') {\n propertyValue = (propertyValue * 100).toString() + '%;';\n }\n else {\n propertyValue = propertyValue.toString() + 'pt;';\n }\n paraStyle += 'line-height:' + propertyValue;\n }\n return paraStyle.toString();\n };\n /**\n * @private\n */\n HtmlExport.prototype.createAttributesTag = function (tagValue, localProperties) {\n var sb = '';\n sb += '<';\n sb += tagValue;\n for (var i = 0; i < localProperties.length; i++) {\n sb += ' ';\n sb += localProperties[i];\n }\n if (tagValue !== 'a') {\n sb += '>';\n }\n return sb;\n };\n /**\n * @private\n */\n HtmlExport.prototype.createTag = function (tagValue) {\n var s = '';\n s += '<';\n s += tagValue;\n s += '>';\n return s;\n };\n /**\n * @private\n */\n HtmlExport.prototype.endTag = function (tagValue) {\n var sb = '';\n sb += '<';\n sb += '/';\n sb += tagValue;\n sb += '>';\n return sb;\n };\n /**\n * @private\n */\n HtmlExport.prototype.createTableStartTag = function (table) {\n var blockStyle = '';\n var tableStyle = '';\n var tagAttributes = [];\n tagAttributes.push('border=\"' + '1\"');\n if (!isNullOrUndefined(table.tableFormat)) {\n //if (table.tableFormat.shading.backgroundColor !== Color.FromArgb(0, 0, 0, 0)) {\n tagAttributes.push('bgcolor=\"' + table.tableFormat.shading.backgroundColor + '\"');\n //}\n if (table.tableFormat.leftIndent !== 0) {\n tagAttributes.push('left-indent=\"' + table.tableFormat.leftIndent.toString() + 'pt;');\n }\n if (table.tableFormat.cellSpacing > 0) {\n tagAttributes.push('cellspacing=\"' + (((table.tableFormat.cellSpacing * 72) / 96) * 2).toString() + '\"');\n }\n else {\n tableStyle += ('border-collapse:collapse;');\n }\n tagAttributes.push('cellpadding=\"' + '0\"');\n if (!isNullOrUndefined(table.tableFormat.borders)) {\n tableStyle += this.serializeTableBorderStyle(table.tableFormat.borders);\n }\n }\n if (tableStyle.length !== 0) {\n tagAttributes.push('style=\"', tableStyle.toString() + '\"');\n }\n return blockStyle += (this.createAttributesTag('table', tagAttributes));\n };\n /**\n * @private\n */\n HtmlExport.prototype.createTableEndTag = function () {\n var blockStyle = '';\n blockStyle += (this.endTag('table'));\n return blockStyle;\n };\n /**\n * @private\n */\n HtmlExport.prototype.createRowStartTag = function (row) {\n var blockStyle = '';\n var tagAttributes = [];\n if (row.rowFormat.isHeader) {\n blockStyle += (this.createTag('thead'));\n }\n if (row.rowFormat.height > 0) {\n tagAttributes.push('height=\"' + row.rowFormat.height + '\"');\n }\n return blockStyle + this.createAttributesTag('tr', tagAttributes);\n };\n /**\n * @private\n */\n HtmlExport.prototype.createRowEndTag = function (row) {\n var blockStyle = '';\n blockStyle += (this.endTag('tr'));\n if (row.rowFormat.isHeader) {\n blockStyle += (this.endTag('thead'));\n }\n return blockStyle;\n };\n /**\n * @private\n */\n HtmlExport.prototype.decodeHtmlNames = function (text) {\n if (text === '\\t') {\n return ' ';\n }\n var splittedText = text.split(' ');\n var htmlText = '';\n if (splittedText.length > 0) {\n htmlText = splittedText[0];\n for (var i = 0; i < splittedText.length - 1; i++) {\n htmlText += ' ' + splittedText[i + 1];\n }\n }\n return htmlText;\n };\n return HtmlExport;\n}());\nexport { HtmlExport };\n","import { Widget, TableRowWidget, TableWidget, LineWidget, ElementBox, TextElementBox, ListTextElementBox, ImageElementBox, ParagraphWidget, TableCellWidget, FieldElementBox, BlockContainer, BookmarkElementBox } from '../index';\nimport { HelperMethods } from '../index';\nimport { Point } from '../index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar TextPosition = /** @class */ (function () {\n function TextPosition(owner) {\n /**\n * @private\n */\n this.location = new Point(0, 0);\n /**\n * @private\n */\n this.isUpdateLocation = true;\n this.owner = owner;\n this.viewer = this.owner.viewer;\n }\n Object.defineProperty(TextPosition.prototype, \"paragraph\", {\n /**\n * @private\n */\n get: function () {\n return this.currentWidget.paragraph;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextPosition.prototype, \"isAtParagraphStart\", {\n /**\n * @private\n */\n get: function () {\n return this.offset === this.owner.selection.getStartOffset(this.paragraph);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextPosition.prototype, \"selection\", {\n /**\n * @private\n */\n get: function () {\n return this.owner.selection;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextPosition.prototype, \"hierarchicalPosition\", {\n /**\n * Gets the hierarchical position of logical text position in the document\n * @returns {string}\n */\n get: function () {\n return this.getHierarchicalIndexInternal();\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Return clone of current text position\n * @private\n */\n TextPosition.prototype.clone = function () {\n var textPosition = new TextPosition(this.owner);\n textPosition.currentWidget = this.currentWidget;\n textPosition.offset = this.offset;\n textPosition.location = this.location;\n return textPosition;\n };\n /**\n * Set text position for paragraph and inline\n * @private\n */\n TextPosition.prototype.setPositionForSelection = function (line, element, index, physicalLocation) {\n //Set the start end position\n var isParagraphEnd = false;\n if (isNullOrUndefined(element)) {\n this.currentWidget = line;\n }\n else {\n this.currentWidget = element.line;\n if (element.nextNode instanceof FieldElementBox && index > element.length) {\n isParagraphEnd = this.selection.isLastRenderedInline(element, element.length);\n }\n }\n this.location = physicalLocation;\n if (isParagraphEnd) {\n this.offset = this.selection.getParagraphLength(this.currentWidget.paragraph) + 1;\n }\n else {\n this.offset = this.currentWidget.getOffset(element, index);\n }\n };\n /**\n * Set text position\n * @private\n */\n TextPosition.prototype.setPositionFromLine = function (line, offset, location) {\n this.currentWidget = line;\n this.offset = offset;\n if (location instanceof Point) {\n this.location.copy(location);\n }\n };\n /**\n * Set text position\n * @private\n */\n TextPosition.prototype.setPosition = function (line, positionAtStart) {\n this.currentWidget = line;\n this.offset = positionAtStart ? this.selection.getStartOffset(line.paragraph)\n : this.selection.getParagraphLength(line.paragraph) + 1;\n this.updatePhysicalPosition(true);\n };\n /**\n * Set position for text position\n * @private\n */\n TextPosition.prototype.setPositionInternal = function (textPosition) {\n this.currentWidget = textPosition.currentWidget;\n this.offset = textPosition.offset;\n this.location = textPosition.location;\n };\n /**\n * Set position for current index\n * @private\n */\n TextPosition.prototype.setPositionForCurrentIndex = function (hierarchicalIndex) {\n var index = { index: hierarchicalIndex };\n var paragraph = this.getParagraphWidget(index); //ref hierarchicalIndex\n this.offset = parseFloat(index.index);\n this.setPositionParagraph(paragraph, this.offset);\n };\n /**\n * Get Page\n */\n TextPosition.prototype.getPage = function (position) {\n var page;\n var index = position.index.indexOf(';');\n var newValue = '0';\n if (index >= 0) {\n newValue = position.index.substring(0, index);\n position.index = position.index.substring(index).replace(';', '');\n }\n index = parseInt(newValue, 10);\n page = this.viewer.pages[index];\n return page;\n };\n /**\n * @private\n */\n TextPosition.prototype.getParagraphWidget = function (position) {\n if (isNullOrUndefined(position.index)) {\n return undefined;\n }\n var page = this.getPage(position);\n var child = this.getLineWidget(undefined, position, page);\n return child;\n };\n /**\n * @private\n */\n TextPosition.prototype.getLineWidget = function (widget, position, page) {\n if (isNullOrUndefined(position.index)) {\n return undefined;\n }\n var index = position.index.indexOf(';');\n var value = '0';\n if (index >= 0) {\n value = position.index.substring(0, index);\n position.index = position.index.substring(index).replace(';', '');\n }\n if (value === 'H' || value === 'F') {\n if (value === 'H') {\n widget = page.headerWidget;\n }\n else {\n widget = page.footerWidget;\n }\n }\n else if (!isNullOrUndefined(page)) {\n widget = page.bodyWidgets[0];\n }\n index = parseInt(value, 10);\n if (widget instanceof BlockContainer) {\n index = position.index.indexOf(';');\n value = '0';\n value = position.index.substring(0, index);\n position.index = position.index.substring(index).replace(';', '');\n index = parseInt(value, 10);\n }\n if (widget instanceof TableRowWidget && index >= widget.childWidgets.length) {\n position.index = '0;0';\n index = widget.childWidgets.length - 1;\n }\n if (index >= 0 && index < widget.childWidgets.length) {\n var child = widget.childWidgets[index];\n if (child instanceof LineWidget) {\n if (position.index.indexOf(';') > 0) {\n position.index = '0';\n }\n return child;\n }\n if (child instanceof Widget) {\n if (position.index.indexOf(';') > 0) {\n return this.getLineWidget(child, position);\n }\n else {\n //If table is shifted to previous text position then return the first paragraph within table.\n if (child instanceof TableWidget) {\n return this.getLineWidget(this.selection.getFirstParagraphInFirstCell(child), position);\n }\n else if (child instanceof TableRowWidget && position.index.indexOf(';') === -1) {\n return this.selection.getFirstParagraphInFirstCell(child.ownerTable).childWidgets[0];\n }\n return undefined;\n }\n }\n }\n else if (widget.nextRenderedWidget instanceof Widget) {\n position.index = '0';\n if (widget.nextRenderedWidget instanceof TableWidget) {\n return this.selection.getFirstParagraphInFirstCell(widget.nextRenderedWidget).firstChild;\n }\n return this.getLineWidget(widget.nextRenderedWidget, position);\n }\n return undefined;\n };\n /**\n * Update physical location of paragraph\n * @private\n */\n TextPosition.prototype.updatePhysicalPosition = function (moveNextLine) {\n if (this.currentWidget && this.owner.isLayoutEnabled && this.isUpdateLocation) {\n this.location = this.selection.getPhysicalPositionInternal(this.currentWidget, this.offset, moveNextLine);\n }\n };\n /**\n * Return true if text position are in same paragraph and offset\n * @private\n */\n TextPosition.prototype.isAtSamePosition = function (textPosition) {\n return this.currentWidget === textPosition.currentWidget\n && this.offset === textPosition.offset;\n };\n /**\n * Return true if text position is in same paragraph\n * @private\n */\n TextPosition.prototype.isInSameParagraph = function (textPosition) {\n if (isNullOrUndefined(textPosition)) {\n throw new Error('textPosition is undefined.');\n }\n return this.paragraph === textPosition.paragraph;\n };\n /**\n * Return true is current text position exist before given text position\n * @private\n */\n TextPosition.prototype.isExistBefore = function (textPosition) {\n if (isNullOrUndefined(textPosition)) {\n throw new Error('textPosition is undefined.');\n }\n if (this.currentWidget === textPosition.currentWidget) {\n return this.offset < textPosition.offset;\n }\n var currentParagraph = this.currentWidget.paragraph;\n var paragraph = textPosition.currentWidget.paragraph;\n if (currentParagraph === paragraph) {\n return currentParagraph.childWidgets.indexOf(this.currentWidget) < paragraph.childWidgets.indexOf(textPosition.currentWidget);\n }\n if (currentParagraph.containerWidget === paragraph.containerWidget) {\n if (currentParagraph.isInsideTable) {\n return currentParagraph.associatedCell.childWidgets.indexOf(currentParagraph) <\n paragraph.associatedCell.childWidgets.indexOf(paragraph);\n //handle after header footer implementation\n // } else if ((this.currentParagraph).owner instanceof WHeaderFooter) {\n // return ((this.currentParagraph).owner as WHeaderFooter).blocks.indexOf((this.currentParagraph)) <\n // ((textPosition.currentParagraph).owner as WHeaderFooter).blocks.indexOf((textPosition.currentParagraph));\n }\n else {\n return (currentParagraph.containerWidget.childWidgets.indexOf(currentParagraph)) <\n (paragraph.containerWidget.childWidgets.indexOf(paragraph));\n }\n }\n return this.owner.selection.isExistBefore(currentParagraph, paragraph);\n };\n /**\n * Return true is current text position exist after given text position\n * @private\n */\n TextPosition.prototype.isExistAfter = function (textPosition) {\n if (isNullOrUndefined(textPosition)) {\n throw new Error('textPosition is undefined.');\n }\n if (this.currentWidget === textPosition.currentWidget) {\n return this.offset > textPosition.offset;\n }\n if (this.currentWidget.paragraph === textPosition.currentWidget.paragraph) {\n return this.currentWidget.paragraph.childWidgets.indexOf(this.currentWidget) >\n textPosition.currentWidget.paragraph.childWidgets.indexOf(textPosition.currentWidget);\n }\n var startParagraph = this.currentWidget.paragraph;\n var endParagraph = textPosition.currentWidget.paragraph;\n if (startParagraph.containerWidget.index === endParagraph.containerWidget.index) {\n if (startParagraph.isInsideTable) {\n return startParagraph.associatedCell.childWidgets.indexOf(startParagraph) >\n endParagraph.associatedCell.childWidgets.indexOf(endParagraph);\n // } else if ((this.currentParagraph).owner instanceof WHeaderFooter) {\n // return ((this.currentParagraph).owner as WHeaderFooter).blocks.indexOf((this.currentParagraph)) >\n // ((textPosition.currentParagraph).owner as WHeaderFooter).blocks.indexOf((textPosition.currentParagraph));\n }\n else {\n return (startParagraph.containerWidget.childWidgets.indexOf(startParagraph) >\n (endParagraph.containerWidget.childWidgets.indexOf(endParagraph)));\n }\n }\n return this.owner.selection.isExistAfter(startParagraph, endParagraph);\n };\n /**\n * Return hierarchical index of current text position\n * @private\n */\n TextPosition.prototype.getHierarchicalIndexInternal = function () {\n return this.getHierarchicalIndex(this.currentWidget, this.offset.toString());\n };\n /**\n * @private\n */\n TextPosition.prototype.getHierarchicalIndex = function (line, hierarchicalIndex) {\n var node = line;\n if (node) {\n return node.getHierarchicalIndex(hierarchicalIndex);\n }\n return hierarchicalIndex;\n };\n /**\n * @private\n */\n TextPosition.prototype.setPositionParagraph = function (line, offsetInLine) {\n this.currentWidget = line;\n this.offset = offsetInLine;\n this.updatePhysicalPosition(true);\n };\n /**\n * @private\n */\n TextPosition.prototype.setPositionForLineWidget = function (lineWidget, offset) {\n var lineLength = this.selection.getLineLength(lineWidget);\n var lineIndex = lineWidget.paragraph.childWidgets.indexOf(lineWidget);\n if (offset > lineLength + 1) {\n var nextLineWidget = void 0;\n if (lineIndex >= lineWidget.paragraph.childWidgets.length - 1) {\n var nextBlock = this.selection.getNextRenderedBlock(lineWidget.paragraph);\n if (nextBlock && nextBlock.index === lineWidget.paragraph.index) {\n nextLineWidget = nextBlock.firstChild;\n }\n }\n else {\n nextLineWidget = lineWidget.paragraph.childWidgets[lineIndex + 1];\n }\n this.setPositionForLineWidget(nextLineWidget, offset - lineLength);\n return;\n }\n else if (offset < 0) {\n var prevLine = lineWidget.paragraph.childWidgets[lineIndex - 1];\n var curretOffSet = this.selection.getLineLength(prevLine) + offset;\n this.setPositionForLineWidget(prevLine, curretOffSet);\n return;\n }\n else {\n this.currentWidget = lineWidget;\n this.offset = offset;\n }\n this.updatePhysicalPosition(true);\n };\n /**\n * move to next text position\n * @private\n */\n TextPosition.prototype.moveNextPosition = function (isNavigate) {\n if (isNullOrUndefined(isNavigate)) {\n isNavigate = true;\n }\n var inline = this.selection.getNextStartInline(this.currentWidget, this.offset);\n if (inline instanceof FieldElementBox && inline.fieldType === 0 && !isNullOrUndefined(inline.fieldEnd)) {\n if (isNavigate) {\n this.moveNextPositionInternal(inline);\n this.moveNextPosition();\n return;\n }\n else {\n var line = inline.fieldEnd.line;\n var fieldEnd = inline.fieldEnd;\n var fieldEndOffset = line.getOffset(fieldEnd, 1);\n var fieldEndIndex = this.getHierarchicalIndex(line, fieldEndOffset.toString());\n if (TextPosition.isForwardSelection(this.selection.end.getHierarchicalIndexInternal(), fieldEndIndex)) {\n //If field end is after selection end, extend selection end to field end.\n this.selection.end.moveToInline(inline.fieldEnd, 1);\n return;\n }\n this.moveToInline(inline.fieldEnd, 1);\n }\n }\n var nextOffset = this.selection.getNextValidOffset(this.currentWidget, this.offset);\n var lineIndex = this.paragraph.childWidgets.indexOf(this.currentWidget);\n var index = 0;\n if (nextOffset > this.offset) {\n this.offset = nextOffset;\n var info = this.currentWidget.getInline(this.offset, index);\n inline = info.element;\n index = info.index;\n if (!isNullOrUndefined(inline) && index === inline.length && inline.nextNode instanceof FieldElementBox) {\n var nextValidInline = this.selection.getNextValidElement(inline.nextNode);\n //Moves to field end mark.\n if (nextValidInline instanceof FieldElementBox && nextValidInline.fieldType === 1) {\n inline = nextValidInline;\n this.offset = this.currentWidget.getOffset(inline, 1);\n }\n }\n }\n else if (lineIndex + 1 < this.paragraph.childWidgets.length) {\n var nextLineWidget = this.paragraph.childWidgets[lineIndex + 1];\n if (nextLineWidget) {\n this.currentWidget = nextLineWidget;\n this.offset = this.selection.getStartLineOffset(this.currentWidget);\n }\n var inlineObj = this.currentWidget.getInline(this.offset, index);\n inline = inlineObj.element;\n index = inlineObj.index;\n if (inline instanceof FieldElementBox && inline.fieldType === 0) {\n this.offset++;\n }\n }\n else {\n this.updateOffsetToNextParagraph(index, false);\n }\n //Gets physical position in current page.\n this.updatePhysicalPosition(true);\n };\n /**\n * Move text position to previous paragraph inside table\n * @private\n */\n TextPosition.prototype.moveToPreviousParagraphInTable = function (selection) {\n var previousParagraph;\n var currentPara = this.currentWidget.paragraph;\n if (currentPara.isInsideTable) {\n previousParagraph = selection.getPreviousSelectionCell(currentPara.associatedCell);\n }\n else {\n previousParagraph = selection.getPreviousParagraphBlock(currentPara);\n }\n if (isNullOrUndefined(previousParagraph)) {\n return;\n }\n this.currentWidget = previousParagraph.childWidgets[previousParagraph.childWidgets.length - 1];\n this.offset = this.currentWidget.getEndOffset() + 1;\n };\n TextPosition.prototype.updateOffsetToNextParagraph = function (indexInInline, isHighlight) {\n //Moves to owner and get next paragraph.\n var inline;\n var positionAtStart = false;\n var nextParagraph = undefined;\n var lineIndex = this.paragraph.childWidgets.indexOf(this.currentWidget);\n if (!isHighlight) {\n nextParagraph = this.selection.getNextParagraphBlock(this.paragraph);\n }\n else if (lineIndex + 1 < this.paragraph.childWidgets.length) {\n var nextLineWidget = this.paragraph.childWidgets[lineIndex + 1];\n if (nextLineWidget) {\n this.currentWidget = nextLineWidget;\n this.offset = 0;\n }\n }\n else {\n nextParagraph = this.selection.getNextSelectionBlock(this.paragraph);\n if (!isNullOrUndefined(nextParagraph)) {\n if (nextParagraph.containerWidget instanceof TableCellWidget) {\n if (this.selection.start.paragraph.isInsideTable) {\n // tslint:disable-next-line:max-line-length\n var containerCell = this.selection.getContainerCellOf(this.selection.start.paragraph.associatedCell, nextParagraph.associatedCell);\n positionAtStart = !containerCell.ownerTable.contains(nextParagraph.associatedCell);\n }\n else {\n positionAtStart = true;\n }\n }\n }\n }\n if (!isNullOrUndefined(nextParagraph) && nextParagraph.childWidgets.length > 0) {\n if (!positionAtStart) {\n this.currentWidget = nextParagraph.firstChild;\n this.offset = isHighlight ? 1 : this.selection.getStartLineOffset(this.currentWidget);\n }\n else {\n this.currentWidget = nextParagraph.childWidgets[nextParagraph.childWidgets.length - 1];\n this.offset = this.selection.getLineLength(this.currentWidget) + 1;\n }\n }\n var inlineObj = this.currentWidget.getInline(this.offset, indexInInline);\n inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (inline instanceof FieldElementBox && inline.fieldType === 0) {\n this.offset++;\n }\n };\n TextPosition.prototype.updateOffsetToPrevPosition = function (index, isHighlight) {\n var inlineInfo;\n var inline;\n var lineIndex = this.paragraph.childWidgets.indexOf(this.currentWidget);\n var prevOffset = this.selection.getPreviousValidOffset(this.currentWidget.paragraph, this.offset);\n if (this.offset > prevOffset) {\n this.offset = prevOffset;\n }\n else if (lineIndex > 0) {\n var prevLineWidget = this.paragraph.childWidgets[lineIndex - 1];\n if (prevLineWidget) {\n this.currentWidget = prevLineWidget;\n this.offset = this.currentWidget.getEndOffset();\n }\n }\n else {\n //Moves to owner and get previous paragraph.\n var previousParagraph = undefined;\n var positionAtStart = false;\n if (!isHighlight) {\n previousParagraph = this.selection.getPreviousParagraphBlock(this.paragraph);\n }\n else {\n previousParagraph = this.selection.getPreviousSelectionBlock(this.paragraph);\n if (!isNullOrUndefined(previousParagraph)) {\n if (previousParagraph.containerWidget instanceof TableCellWidget) {\n if (this.selection.start.paragraph.isInsideTable) {\n // tslint:disable-next-line:max-line-length\n var containerCell = this.selection.getContainerCellOf(this.selection.start.paragraph.associatedCell, previousParagraph.associatedCell);\n positionAtStart = !containerCell.ownerTable.contains(previousParagraph.associatedCell);\n }\n else {\n positionAtStart = true;\n }\n }\n }\n }\n if (!isNullOrUndefined(previousParagraph)) {\n if (!positionAtStart) {\n this.currentWidget = previousParagraph.childWidgets[previousParagraph.childWidgets.length - 1];\n this.offset = this.currentWidget.getEndOffset();\n }\n else {\n this.currentWidget = previousParagraph.firstChild;\n this.offset = this.selection.getStartLineOffset(this.currentWidget);\n }\n }\n }\n index = 0;\n inlineInfo = this.currentWidget.getInline(this.offset, index);\n inline = inlineInfo.element;\n index = inlineInfo.index;\n if (inline instanceof FieldElementBox && inline.fieldType === 0) {\n this.offset++;\n }\n if (inline instanceof FieldElementBox) {\n //Checks if field character is part of rendered field, otherwise moves to previous rendered content.\n var previousInline = this.selection.getPreviousValidElement(inline);\n if (!isNullOrUndefined(previousInline)) {\n inline = previousInline;\n this.currentWidget = inline.line;\n this.offset = this.currentWidget.getOffset(inline, inline.length);\n if (inline instanceof FieldElementBox && inline.fieldType === 0) {\n this.offset--;\n }\n }\n }\n //Gets physical position in current page.\n this.updatePhysicalPosition(true);\n };\n /**\n * Moves the text position to start of the next paragraph.\n */\n TextPosition.prototype.moveToNextParagraphStartInternal = function () {\n var paragraph = this.currentWidget.paragraph;\n if (!isNullOrUndefined(this.selection.getNextParagraphBlock(paragraph))) {\n // tslint:disable-next-line:max-line-length\n this.currentWidget = this.selection.getNextParagraphBlock(paragraph).firstChild;\n this.offset = this.selection.getStartOffset(paragraph);\n this.updatePhysicalPosition(true);\n }\n };\n /**\n * Move to previous position\n * @private\n */\n TextPosition.prototype.movePreviousPosition = function () {\n var index = 0;\n var inlineInfo = this.currentWidget.getInline(this.offset, index);\n var inline = inlineInfo.element;\n index = inlineInfo.index;\n var lineIndex = this.paragraph.childWidgets.indexOf(this.currentWidget);\n if (inline instanceof FieldElementBox && inline.fieldType === 1 && !isNullOrUndefined(inline.fieldBegin)) {\n this.movePreviousPositionInternal(inline);\n }\n this.updateOffsetToPrevPosition(index, false);\n };\n /**\n * Move to next position\n * @private\n */\n TextPosition.prototype.moveNextPositionInternal = function (fieldBegin) {\n var inline;\n if (isNullOrUndefined(fieldBegin.fieldSeparator)) {\n inline = fieldBegin.fieldEnd;\n }\n else {\n inline = fieldBegin.fieldSeparator;\n this.currentWidget = inline.line;\n // tslint:disable-next-line:max-line-length\n if (this.currentWidget === fieldBegin.fieldEnd.line && !this.selection.hasValidInline(this.paragraph, inline, fieldBegin.fieldEnd)) {\n inline = fieldBegin.fieldEnd;\n }\n }\n this.currentWidget = inline.line;\n this.offset = this.currentWidget.getOffset(inline, 1);\n };\n /**\n * Move text position backward\n * @private\n */\n TextPosition.prototype.moveBackward = function () {\n var indexInInline = 0;\n var inlineObj = this.currentWidget.getInline(this.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (!this.owner.selection.isEmpty && !isNullOrUndefined(inline)) {\n var nextInline = this.selection.getNextRenderedElementBox(inline, indexInInline);\n if (nextInline instanceof FieldElementBox && nextInline.fieldType === 0) {\n var hierarchicalIndex = this.owner.selection.start.getHierarchicalIndexInternal();\n // tslint:disable-next-line:max-line-length\n var fieldEndOffset = nextInline.fieldEnd.line.getOffset(nextInline.fieldEnd, 1);\n // tslint:disable-next-line:max-line-length\n var fieldEndIndex = this.getHierarchicalIndex(nextInline.fieldEnd.line, fieldEndOffset.toString());\n if (!TextPosition.isForwardSelection(fieldEndIndex, hierarchicalIndex)) {\n //If field end is after selection start, move selection start to field end.\n // tslint:disable-next-line:max-line-length\n this.owner.selection.start.setPositionParagraph(nextInline.fieldEnd.line, fieldEndOffset);\n return;\n }\n }\n }\n if (inline instanceof FieldElementBox && inline.fieldType === 1 && !isNullOrUndefined(inline.fieldBegin)) {\n var hierarchicalIndex = this.owner.selection.start.getHierarchicalIndexInternal();\n var fieldEndOffset = inline.line.getOffset(inline, 1);\n var fieldEndIndex = this.getHierarchicalIndex(inline.line, fieldEndOffset.toString());\n if (!TextPosition.isForwardSelection(hierarchicalIndex, fieldEndIndex)) {\n //If field end is after selection start, extend selection end to field begin.\n // tslint:disable-next-line:max-line-length\n var fieldBeginOffset = inline.fieldBegin.line.getOffset(inline.fieldBegin, 0);\n this.currentWidget = inline.fieldBegin.line;\n this.offset = fieldBeginOffset;\n //Updates physical position in current page.\n this.updatePhysicalPosition(true);\n return;\n }\n this.movePreviousPositionInternal(inline);\n }\n this.updateOffsetToPrevPosition(indexInInline, true);\n };\n /**\n * Move text position forward\n * @private\n */\n TextPosition.prototype.moveForward = function () {\n var indexInInline = 0;\n var inlineObj = this.currentWidget.getInline(this.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (!isNullOrUndefined(inline)) {\n if (!this.owner.selection.isEmpty && indexInInline === inline.length && inline instanceof FieldElementBox\n && inline.fieldType === 1) {\n var hierarchicalIndex = this.owner.selection.start.getHierarchicalIndexInternal();\n // tslint:disable-next-line:max-line-length\n var fieldBeginOffset = inline.fieldBegin.line.getOffset(inline.fieldBegin, 0);\n // tslint:disable-next-line:max-line-length\n var fieldBeginIndex = this.getHierarchicalIndex(inline.fieldBegin.line, fieldBeginOffset.toString());\n if (!TextPosition.isForwardSelection(hierarchicalIndex, fieldBeginIndex)) {\n //If field begin is before selection start, move selection start to field begin.\n // tslint:disable-next-line:max-line-length\n this.owner.selection.start.setPositionParagraph(inline.fieldBegin.line, fieldBeginOffset);\n return;\n }\n }\n inline = this.selection.getNextRenderedElementBox(inline, indexInInline);\n }\n if (inline instanceof FieldElementBox && !isNullOrUndefined(inline.fieldEnd)) {\n var selectionStartParagraph = this.owner.selection.start.paragraph;\n var selectionStartIndex = 0;\n // tslint:disable-next-line:max-line-length\n var selectionStartInlineObj = selectionStartParagraph.getInline(this.owner.selection.start.offset, selectionStartIndex);\n var selectionStartInline = selectionStartInlineObj.element;\n selectionStartIndex = selectionStartInlineObj.index;\n var nextRenderInline = this.selection.getNextRenderedElementBox(selectionStartInline, selectionStartIndex);\n if (nextRenderInline === inline) {\n this.moveNextPositionInternal(inline);\n }\n else {\n //If selection start is before field begin, extend selection end to field end.\n inline = inline.fieldEnd;\n this.currentWidget = inline.line;\n this.offset = this.currentWidget.getOffset(inline, 1);\n //Updates physical position in current page.\n this.updatePhysicalPosition(true);\n return;\n }\n }\n else if ((inline instanceof FieldElementBox)\n && (inline.fieldType === 0 || inline.fieldType === 1)) {\n this.currentWidget = inline.line;\n this.offset = this.currentWidget.getOffset(inline, 1);\n }\n indexInInline = 0;\n var nextOffset = this.selection.getNextValidOffset(this.currentWidget, this.offset);\n var length = this.selection.getLineLength(this.currentWidget);\n var isParagraphEnd = this.selection.isParagraphLastLine(this.currentWidget);\n if (this.offset < nextOffset) {\n this.offset = nextOffset;\n var inlineObj_1 = this.currentWidget.getInline(this.offset, indexInInline);\n inline = inlineObj_1.element;\n indexInInline = inlineObj_1.index;\n if (!isNullOrUndefined(inline) && indexInInline === inline.length && inline.nextNode instanceof FieldElementBox) {\n var nextValidInline = this.selection.getNextValidElement(inline.nextNode);\n //Moves to field end mark.\n if (nextValidInline instanceof FieldElementBox && nextValidInline.fieldType === 1) {\n inline = nextValidInline;\n this.offset = this.currentWidget.getOffset(inline, 1);\n }\n }\n }\n else if (this.offset === nextOffset && this.offset < length + 1 && isParagraphEnd) {\n this.offset = length + 1;\n }\n else {\n this.updateOffsetToNextParagraph(indexInInline, true);\n }\n //Gets physical position in current page.\n this.updatePhysicalPosition(true);\n };\n /**\n * Move to given inline\n * @private\n */\n TextPosition.prototype.moveToInline = function (inline, index) {\n this.currentWidget = inline.line;\n this.offset = this.currentWidget.getOffset(inline, index);\n //Updates physical position in current page.\n this.updatePhysicalPosition(true);\n };\n /**\n * Return true is start element exist before end element\n * @private\n */\n TextPosition.isForwardSelection = function (start, end) {\n if (start === end) {\n return true;\n }\n start = start.replace(/C;/g, '');\n end = end.replace(/C;/g, '');\n start = start.replace(/H;/g, '');\n end = end.replace(/H;/g, '');\n start = start.replace(/F;/g, '');\n end = end.replace(/F;/g, '');\n var selectionStart = start.split(';');\n var selectionEnd = end.split(';');\n var length = selectionStart.length;\n if (length > selectionEnd.length) {\n length = selectionEnd.length - 1;\n }\n for (var i = 0; i < length; i++) {\n var startOffset = parseFloat(selectionStart[i]);\n var endOffset = parseFloat(selectionEnd[i]);\n if (startOffset !== endOffset) {\n return startOffset < endOffset;\n }\n }\n return false;\n };\n /**\n * Move to previous position offset\n * @private\n */\n TextPosition.prototype.movePreviousPositionInternal = function (fieldEnd) {\n var inline;\n if (isNullOrUndefined(fieldEnd.fieldSeparator)) {\n inline = this.selection.getPreviousValidElement(fieldEnd.fieldBegin);\n }\n else {\n inline = this.selection.getPreviousValidElement(fieldEnd);\n }\n this.currentWidget = inline.line;\n this.offset = this.currentWidget.getOffset(inline, inline instanceof FieldElementBox ? 0 : inline.length);\n };\n /**\n * Moves the text position to start of the word.\n * @private\n */\n TextPosition.prototype.moveToWordStartInternal = function (type) {\n var endOffset = this.currentWidget.getEndOffset();\n var currentPara = this.currentWidget.paragraph;\n var selection = this.selection;\n if (type === 2 && (this.offset === endOffset || this.offset === endOffset + 1)) {\n return;\n }\n if (this.offset === endOffset + 1) {\n this.offset = endOffset;\n }\n else if (this.offset === selection.getStartOffset(currentPara) && this.currentWidget === currentPara.childWidgets[0]) {\n var previousParagraph = selection.getPreviousParagraphBlock(currentPara);\n if (isNullOrUndefined(previousParagraph)) {\n return;\n }\n this.currentWidget = previousParagraph.childWidgets[previousParagraph.childWidgets.length - 1];\n this.offset = this.currentWidget.getEndOffset();\n }\n else {\n if (this.offset === selection.getStartLineOffset(this.currentWidget)) {\n var lineIndex = currentPara.childWidgets.indexOf(this.currentWidget);\n if (lineIndex - 1 >= 0) {\n this.currentWidget = currentPara.childWidgets[lineIndex - 1];\n this.offset = this.currentWidget.getEndOffset();\n }\n }\n var isStarted = false;\n var endSelection = false;\n var indexInInline = 0;\n var inlineObj = this.currentWidget.getInline(this.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n // tslint:disable-next-line:max-line-length \n this.getPreviousWordOffset(inline, selection, indexInInline, type, (inline instanceof FieldElementBox && inline.fieldType === 1), isStarted, endSelection, this);\n }\n if (type === 1) {\n this.calculateOffset();\n }\n this.updatePhysicalPosition(true);\n };\n /**\n * Get next word offset\n * @private\n */\n // tslint:disable-next-line:max-line-length\n TextPosition.prototype.getNextWordOffset = function (inline, indexInInline, type, isInField, endSelection, endPosition, excludeSpace) {\n if (inline instanceof TextElementBox) {\n this.getNextWordOffsetSpan(inline, indexInInline, type, isInField, endSelection, endPosition, excludeSpace);\n }\n else if (inline instanceof ImageElementBox) {\n // tslint:disable-next-line:max-line-length\n this.getNextWordOffsetImage(inline, indexInInline, type, isInField, endSelection, endPosition, excludeSpace);\n }\n else if (inline instanceof FieldElementBox && inline.fieldType === 0) {\n // tslint:disable-next-line:max-line-length\n this.getNextWordOffsetFieldBegin(inline, indexInInline, type, isInField, endSelection, endPosition, excludeSpace);\n }\n else if (inline instanceof FieldElementBox && inline.fieldType === 2 || inline instanceof BookmarkElementBox) {\n // tslint:disable-next-line:max-line-length\n this.getNextWordOffsetFieldSeperator(inline, indexInInline, type, isInField, endSelection, endPosition, excludeSpace);\n }\n else if (inline instanceof FieldElementBox && inline.fieldType === 1) {\n // tslint:disable-next-line:max-line-length\n this.getNextWordOffsetFieldEnd(inline, indexInInline, type, isInField, endSelection, endPosition, excludeSpace);\n }\n };\n /**\n * get next word offset from field begin\n * @private\n */\n // tslint:disable-next-line:max-line-length\n TextPosition.prototype.getNextWordOffsetFieldBegin = function (fieldBegin, indexInInline, type, isInField, endSelection, endPosition, excludeSpace) {\n var startOffset = fieldBegin.line.getOffset(fieldBegin, 0);\n var endOffset = startOffset + fieldBegin.length;\n if (isNullOrUndefined(fieldBegin.fieldSeparator)) {\n this.getNextWordOffsetFieldEnd(fieldBegin.fieldEnd, 0, type, isInField, endSelection, endPosition, excludeSpace);\n }\n else if (type === 0) {\n // tslint:disable-next-line:max-line-length\n this.getNextWordOffsetFieldSeperator(fieldBegin.fieldSeparator, 0, type, isInField, endSelection, endPosition, excludeSpace);\n }\n else if (!isNullOrUndefined(fieldBegin.fieldEnd)) {\n var inline = fieldBegin.fieldSeparator;\n // tslint:disable-next-line:max-line-length\n if (inline.line.paragraph === fieldBegin.fieldEnd.line.paragraph && !this.selection.hasValidInline(inline.line.paragraph, inline, fieldBegin.fieldEnd)) {\n inline = fieldBegin.fieldEnd;\n }\n // tslint:disable-next-line:max-line-length\n this.getNextWordOffset(inline, 0, type, !(endPosition.paragraph === fieldBegin.line.paragraph && endPosition.offset === startOffset), endSelection, endPosition, excludeSpace);\n // tslint:disable-next-line:max-line-length\n if (endSelection && !isNullOrUndefined(fieldBegin.fieldSeparator) && (endPosition.paragraph === fieldBegin.line.paragraph) && (endPosition.offset === fieldBegin.fieldSeparator.line.getOffset(fieldBegin.fieldSeparator, fieldBegin.fieldSeparator.length))) {\n endPosition.setPositionParagraph(fieldBegin.line, startOffset);\n return;\n }\n if (!endSelection) {\n // tslint:disable-next-line:max-line-length\n endPosition.setPositionParagraph(fieldBegin.fieldEnd.line, fieldBegin.fieldEnd.line.getOffset(fieldBegin.fieldEnd, fieldBegin.fieldEnd.length));\n }\n }\n };\n /**\n * get next word offset from image\n * @private\n */\n // tslint:disable-next-line:max-line-length\n TextPosition.prototype.getNextWordOffsetImage = function (image, indexInInline, type, isInField, endSelection, endPosition, excludeSpace) {\n if (isInField) {\n endPosition.setPositionParagraph(image.line, image.line.getOffset(image, indexInInline));\n endSelection = false;\n return;\n }\n if (indexInInline === 0) {\n var startOffset = image.line.getOffset(image, 0);\n endSelection = true;\n if (endPosition.offset === startOffset) {\n if (isNullOrUndefined(image.nextNode)) {\n endPosition.setPositionParagraph(image.line, startOffset + image.length);\n }\n else {\n this.getNextWordOffset(image.nextNode, 0, type, isInField, endSelection, endPosition, excludeSpace);\n }\n }\n else {\n endPosition.setPositionParagraph(image.line, startOffset);\n }\n }\n else if (!isNullOrUndefined(image.nextNode)) {\n this.getNextWordOffset(image.nextNode, 0, type, isInField, endSelection, endPosition, excludeSpace);\n }\n };\n /**\n * get next word offset from span\n */\n // tslint:disable-next-line:max-line-length\n TextPosition.prototype.getNextWordOffsetSpan = function (span, indexInInline, type, isInField, endSelection, endPosition, excludeSpace) {\n if (span.text === '\\t' || span.text === '\\v') {\n if (isInField) {\n endPosition.setPositionParagraph(span.line, span.line.getOffset(span, indexInInline));\n endSelection = false;\n return;\n }\n if (indexInInline === 0) {\n endSelection = true;\n var startOffset = span.line.getOffset(span, 0);\n if (endPosition.offset === startOffset) {\n endPosition.setPositionParagraph(span.line, startOffset + span.length);\n }\n else {\n endPosition.setPositionParagraph(span.line, startOffset);\n }\n }\n else if (!isNullOrUndefined(span.nextNode)) {\n this.getNextWordOffset(span.nextNode, 0, type, isInField, endSelection, endPosition, excludeSpace);\n }\n }\n else {\n var wordEndIndex = 0;\n if (indexInInline === 0 && endSelection && (HelperMethods.wordSplitCharacters.indexOf(span.text[0]) === -1)) {\n endPosition.setPositionParagraph(span.line, span.line.getOffset(span, indexInInline));\n if (isInField) {\n return;\n }\n }\n else if (indexInInline < span.length) {\n // tslint:disable-next-line:max-line-length\n var txt = indexInInline > 0 && span.text.length - 1 >= indexInInline ? span.text.slice(indexInInline, span.length) : span.text;\n wordEndIndex = HelperMethods.indexOfAny(txt, HelperMethods.wordSplitCharacters);\n if (wordEndIndex !== -1) {\n if (isInField) {\n endSelection = false;\n return;\n }\n var offset = span.line.getOffset(span, wordEndIndex + indexInInline);\n // tslint:disable-next-line:max-line-length\n if ((excludeSpace || txt[wordEndIndex] !== ' ') && !endSelection && span.line.paragraph === endPosition.paragraph && offset !== endPosition.offset) {\n endSelection = true;\n endPosition.setPositionParagraph(span.line, offset);\n return;\n }\n wordEndIndex++;\n while (wordEndIndex < txt.length && HelperMethods.wordSplitCharacters.indexOf(txt[wordEndIndex]) !== -1) {\n if (txt[wordEndIndex] !== ' ' && txt[wordEndIndex] !== ' ') {\n break;\n }\n wordEndIndex++;\n }\n endSelection = true;\n if (wordEndIndex < txt.length) {\n // tslint:disable-next-line:max-line-length\n endPosition.setPositionParagraph(span.line, span.line.getOffset(span, wordEndIndex + indexInInline));\n }\n else if (!isNullOrUndefined(span.nextNode)) {\n // tslint:disable-next-line:max-line-length\n this.getNextWordOffset(span.nextNode, 0, type, isInField, endSelection, endPosition, excludeSpace);\n }\n else {\n // tslint:disable-next-line:max-line-length\n endPosition.setPositionParagraph(span.line, span.line.getOffset(span, wordEndIndex + indexInInline));\n }\n }\n else if (!isNullOrUndefined(span.nextNode)) {\n this.getNextWordOffset(span.nextNode, 0, type, isInField, endSelection, endPosition, excludeSpace);\n }\n else {\n endPosition.setPositionParagraph(span.line, span.line.getEndOffset());\n }\n }\n else if (!isNullOrUndefined(span.nextNode)) {\n this.getNextWordOffset(span.nextNode, 0, type, isInField, endSelection, endPosition, excludeSpace);\n }\n }\n };\n /**\n * get next word offset from field separator\n * @private\n */\n // tslint:disable-next-line:max-line-length\n TextPosition.prototype.getNextWordOffsetFieldSeperator = function (fieldSeparator, indexInInline, type, isInField, endSelection, endPosition, excludeSpace) {\n if (!isNullOrUndefined(fieldSeparator.nextNode)) {\n this.getNextWordOffset(fieldSeparator.nextNode, 0, type, isInField, endSelection, endPosition, excludeSpace);\n }\n };\n /**\n * get next word offset from field end\n * @private\n */\n // tslint:disable-next-line:max-line-length\n TextPosition.prototype.getNextWordOffsetFieldEnd = function (fieldEnd, indexInInline, type, isInField, endSelection, endPosition, excludeSpace) {\n var startOffset = fieldEnd.line.getOffset(fieldEnd, 0);\n var endOffset = startOffset + fieldEnd.length;\n if (endPosition.offset === startOffset) {\n endPosition.setPositionParagraph(fieldEnd.line, endOffset);\n if (isNullOrUndefined(fieldEnd.nextNode)) {\n return;\n }\n }\n if (!isNullOrUndefined(fieldEnd.nextNode)) {\n this.getNextWordOffset(fieldEnd.nextNode, 0, type, false, endSelection, endPosition, excludeSpace);\n if (endPosition.offset === endOffset) {\n endPosition.setPositionParagraph(fieldEnd.line, startOffset);\n }\n }\n else {\n endPosition.setPositionParagraph(fieldEnd.line, startOffset);\n }\n endSelection = true;\n };\n /**\n * Get previous word offset\n * @private\n */\n // tslint:disable-next-line:max-line-length\n TextPosition.prototype.getPreviousWordOffset = function (inline, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition) {\n if (inline instanceof TextElementBox) {\n // tslint:disable-next-line:max-line-length\n this.getPreviousWordOffsetSpan(inline, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n else if (inline instanceof ImageElementBox) {\n // tslint:disable-next-line:max-line-length\n this.getPreviousWordOffsetImage(inline, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n else if (inline instanceof FieldElementBox && inline.fieldType === 0) {\n // tslint:disable-next-line:max-line-length\n this.getPreviousWordOffsetFieldBegin(inline, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n else if (inline instanceof FieldElementBox && inline.fieldType === 2) {\n // tslint:disable-next-line:max-line-length\n this.getPreviousWordOffsetFieldSeparator(inline, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n else if (inline instanceof FieldElementBox && inline.fieldType === 1) {\n // tslint:disable-next-line:max-line-length\n this.getPreviousWordOffsetFieldEnd(inline, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n else if (inline instanceof BookmarkElementBox) {\n this.getPreviousWordOffsetBookMark(inline, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n else if (inline instanceof ListTextElementBox && inline.previousNode) {\n // tslint:disable-next-line:max-line-length\n this.getPreviousWordOffsetSpan(inline.previousNode, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n };\n // tslint:disable-next-line:max-line-length\n TextPosition.prototype.getPreviousWordOffsetBookMark = function (bookmark, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition) {\n if (bookmark.previousNode) {\n if (bookmark.previousNode instanceof TextElementBox) {\n var inline = bookmark.previousNode;\n if (HelperMethods.lastIndexOfAny(inline.text, HelperMethods.wordSplitCharacters) !== inline.text.length - 1) {\n this.getPreviousWordOffset(inline, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n else {\n endPosition.setPositionParagraph(bookmark.line, bookmark.line.getOffset(bookmark, 0));\n }\n }\n }\n else {\n endPosition.setPositionParagraph(bookmark.line, selection.getStartLineOffset(bookmark.line));\n }\n };\n /**\n * get previous word offset from field end\n * @private\n */\n // tslint:disable-next-line:max-line-length\n TextPosition.prototype.getPreviousWordOffsetFieldEnd = function (fieldEnd, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition) {\n var startOffset = fieldEnd.line.getOffset(fieldEnd, 0);\n var endOffset = startOffset + fieldEnd.length;\n if (isNullOrUndefined(fieldEnd.fieldSeparator)) {\n this.getPreviousWordOffsetFieldBegin(fieldEnd.fieldBegin, selection, 0, type, isInField, isStarted, endSelection, endPosition);\n }\n else if (type === 0 && !isNullOrUndefined(fieldEnd.previousNode)) {\n var inline = fieldEnd.previousNode;\n // tslint:disable-next-line:max-line-length\n this.getPreviousWordOffset(inline, selection, inline.length, type, (inline instanceof FieldElementBox && inline.fieldType === 1), isStarted, endSelection, endPosition);\n }\n else if (!isNullOrUndefined(fieldEnd.fieldBegin) && type !== 0) {\n var inline = fieldEnd.previousNode;\n // tslint:disable-next-line:max-line-length\n if (isNullOrUndefined(inline) || (inline.line.paragraph === fieldEnd.fieldBegin.line.paragraph && !selection.hasValidInline(inline.line.paragraph, inline, fieldEnd.fieldBegin))) {\n inline = fieldEnd.fieldBegin;\n }\n // tslint:disable-next-line:max-line-length\n this.getPreviousWordOffset(inline, selection, inline.length, type, !(endPosition.paragraph === fieldEnd.line.paragraph && endPosition.offset === endOffset), isStarted, endSelection, endPosition);\n if (endSelection && endPosition.paragraph === fieldEnd.line.paragraph\n && endPosition.offset === startOffset) {\n endPosition.setPositionParagraph(fieldEnd.line, endOffset);\n return;\n }\n if (!endSelection) {\n // tslint:disable-next-line:max-line-length\n endPosition.setPositionParagraph(fieldEnd.fieldBegin.line, fieldEnd.fieldBegin.line.getOffset(fieldEnd.fieldBegin, 0));\n }\n }\n };\n /**\n * get previous word offset from field separator\n * @private\n */\n // tslint:disable-next-line:max-line-length\n TextPosition.prototype.getPreviousWordOffsetFieldSeparator = function (fieldSeparator, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition) {\n this.getPreviousWordOffsetFieldBegin(fieldSeparator.fieldBegin, selection, fieldSeparator.fieldBegin.length, type, isInField, isStarted, endSelection, endPosition);\n };\n /**\n * get previous word offset from field begin\n * @private\n */\n // tslint:disable-next-line:max-line-length\n TextPosition.prototype.getPreviousWordOffsetFieldBegin = function (fieldBegin, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition) {\n var startOffset = fieldBegin.line.getOffset(fieldBegin, 0);\n var endOffset = startOffset + fieldBegin.length;\n if (endPosition.offset === endOffset) {\n endPosition.setPositionParagraph(fieldBegin.line, startOffset);\n }\n if (!isNullOrUndefined(fieldBegin.previousNode)) {\n // tslint:disable-next-line:max-line-length\n this.getPreviousWordOffset(fieldBegin.previousNode, selection, fieldBegin.previousNode.length, type, false, isStarted, endSelection, endPosition);\n if (endPosition.offset === startOffset) {\n if (type !== 0 && !isNullOrUndefined(fieldBegin.fieldSeparator)) {\n // tslint:disable-next-line:max-line-length\n endPosition.setPositionParagraph(fieldBegin.line, fieldBegin.fieldSeparator.line.getOffset(fieldBegin.fieldSeparator, fieldBegin.fieldSeparator.length));\n }\n }\n }\n else {\n endPosition.setPositionParagraph(fieldBegin.line, selection.getStartLineOffset(fieldBegin.line));\n }\n };\n /**\n * get previous word offset from image\n * @private\n */\n // tslint:disable-next-line:max-line-length\n TextPosition.prototype.getPreviousWordOffsetImage = function (image, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition) {\n if (isInField) {\n endPosition.setPositionParagraph(image.line, image.line.getOffset(image, indexInInline));\n endSelection = false;\n return;\n }\n if (indexInInline === image.length) {\n var endOffset = image.line.getOffset(image, image.length);\n if (endOffset === endPosition.offset) {\n endPosition.setPositionParagraph(image.line, endOffset - image.length);\n }\n else {\n endPosition.setPositionParagraph(image.line, endOffset);\n }\n }\n else if (!isNullOrUndefined(image.previousNode)) {\n // tslint:disable-next-line:max-line-length\n this.getPreviousWordOffset(image.previousNode, selection, image.previousNode.length, type, isInField, isStarted, endSelection, endPosition);\n }\n };\n /**\n * Get previous word offset from span\n * @private\n */\n // tslint:disable-next-line:max-line-length \n TextPosition.prototype.getPreviousWordOffsetSpan = function (span, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition) {\n if (span.text === '\\t' || span.text === '\\v') {\n if (isInField) {\n endSelection = false;\n return;\n }\n if (indexInInline === span.length) {\n endSelection = true;\n var endOffset = span.line.getOffset(span, span.length);\n if (endOffset === endPosition.offset) {\n endPosition.setPositionParagraph(span.line, endOffset - span.length);\n }\n else {\n endPosition.setPositionParagraph(span.line, endOffset);\n }\n }\n else if (!isNullOrUndefined(span.previousNode)) {\n // tslint:disable-next-line:max-line-length\n this.getPreviousWordOffset(span.previousNode, selection, span.previousNode.length, type, isInField, isStarted, endSelection, endPosition);\n }\n }\n else {\n var wordStartIndex = 0;\n if (!isStarted) {\n while (indexInInline > 0 && span.text[indexInInline - 1] === ' ') {\n indexInInline--;\n }\n endPosition.setPositionParagraph(span.line, span.line.getOffset(span, indexInInline));\n }\n if (indexInInline > 0) {\n isStarted = true;\n if (indexInInline === 0 && endSelection && (HelperMethods.wordSplitCharacters.indexOf(span.text[0])) === -1) {\n endPosition.setPositionParagraph(span.line, span.line.getOffset(span, indexInInline));\n endSelection = true;\n return;\n }\n var txt = span.text.length > indexInInline ? span.text.slice(0, indexInInline) : span.text;\n wordStartIndex = HelperMethods.lastIndexOfAny(txt, HelperMethods.wordSplitCharacters);\n if (wordStartIndex !== -1) {\n if (isInField) {\n endSelection = false;\n return;\n }\n while (wordStartIndex > 0 && endSelection && txt[wordStartIndex] !== ' '\n && (HelperMethods.wordSplitCharacters.indexOf(txt[wordStartIndex - 1])) !== -1) {\n wordStartIndex--;\n }\n if (txt[wordStartIndex] === ' ' || txt[wordStartIndex] === ' ' || !endSelection) {\n wordStartIndex++;\n }\n endSelection = true;\n if (wordStartIndex > 0) {\n var offset = span.line.getOffset(span, wordStartIndex);\n if (span.line.paragraph === endPosition.paragraph && offset === endPosition.offset) {\n // tslint:disable-next-line:max-line-length\n this.getPreviousWordOffsetSpan(span, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n else {\n endPosition.setPositionParagraph(span.line, offset);\n }\n }\n else if (span.previousNode instanceof TextElementBox) {\n // tslint:disable-next-line:max-line-length\n this.getPreviousWordOffset(span.previousNode, selection, span.previousNode.length, type, isInField, isStarted, endSelection, endPosition);\n }\n else {\n endPosition.setPositionParagraph(span.line, span.line.getOffset(span, 0));\n }\n }\n else {\n this.setPreviousWordOffset(span, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n }\n else {\n this.setPreviousWordOffset(span, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n }\n };\n /**\n * set previous word offset in span\n * @private\n */\n // tslint:disable-next-line:max-line-length\n TextPosition.prototype.setPreviousWordOffset = function (span, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition) {\n if (span.previousNode instanceof ElementBox && span.line === span.previousNode.line) {\n // tslint:disable-next-line:max-line-length\n this.getPreviousWordOffset(span.previousNode, selection, span.previousNode.length, type, isInField, isStarted, endSelection, endPosition);\n }\n else {\n endPosition.setPositionParagraph(span.line, selection.getStartLineOffset(span.line));\n }\n };\n /**\n * Validate if text position is in field forward\n * @private\n */\n TextPosition.prototype.validateForwardFieldSelection = function (currentIndex, selectionEndIndex) {\n var textPosition = new TextPosition(this.owner);\n textPosition.setPositionForCurrentIndex(currentIndex);\n textPosition.isUpdateLocation = false;\n var isPositionMoved = false;\n while (currentIndex !== selectionEndIndex && TextPosition.isForwardSelection(currentIndex, selectionEndIndex)) {\n if (!isPositionMoved) {\n textPosition.moveNextPosition(false);\n var nextIndex = textPosition.getHierarchicalIndexInternal();\n //Handled specifically to break infinite looping, if selection ends at last paragraph mark.\n if (currentIndex === nextIndex) {\n break;\n }\n }\n var indexInInline = 0;\n var inlineObj = textPosition.currentWidget.getInline(textPosition.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (!isNullOrUndefined(inline)) {\n var selectionStartIndex = this.selection.start.getHierarchicalIndexInternal();\n if (indexInInline === inline.length && inline instanceof FieldElementBox && inline.fieldType === 1) {\n if (inline.line.getOffset(inline, 0) === this.offset) {\n return;\n }\n var lineWidget = inline.fieldBegin.line;\n var fieldBeginOffset = lineWidget.getOffset(inline.fieldBegin, 0);\n var fieldBeginIndex = this.getHierarchicalIndex(lineWidget, fieldBeginOffset.toString());\n if (!TextPosition.isForwardSelection(selectionStartIndex, fieldBeginIndex)) {\n this.selection.start.setPositionParagraph(lineWidget, fieldBeginOffset);\n }\n }\n var nextInline = this.selection.getNextRenderedElementBox(inline, indexInInline);\n if (!isNullOrUndefined(nextInline) && nextInline instanceof ElementBox) {\n inline = nextInline;\n }\n }\n isPositionMoved = (inline instanceof FieldElementBox && inline.fieldType === 0 && !isNullOrUndefined(inline.fieldEnd));\n if (isPositionMoved) {\n if (inline.line.getOffset(inline, 0) === this.offset) {\n return;\n }\n var fieldEnd = inline.fieldEnd;\n var paragraph = fieldEnd.line.paragraph;\n var fieldEndOffset = fieldEnd.line.getOffset(fieldEnd, 1);\n var fieldEndIndex = this.getHierarchicalIndex(fieldEnd.line, fieldEndOffset.toString());\n if (!TextPosition.isForwardSelection(fieldEndIndex, selectionEndIndex)) {\n //If selection end is after field begin, extend selection end to field end.\n this.moveToInline(inline.fieldEnd, 1);\n return;\n }\n textPosition.moveToInline(inline.fieldEnd, 1);\n }\n currentIndex = textPosition.getHierarchicalIndexInternal();\n }\n };\n /**\n * Validate if text position is in field backward\n * @private\n */\n TextPosition.prototype.validateBackwardFieldSelection = function (currentIndex, selectionEndIndex) {\n var textPosition = new TextPosition(this.owner);\n textPosition.setPositionForCurrentIndex(currentIndex);\n textPosition.isUpdateLocation = false;\n var selectionStartIndex = this.selection.start.getHierarchicalIndexInternal();\n while (currentIndex !== selectionEndIndex && TextPosition.isForwardSelection(selectionEndIndex, currentIndex)) {\n var indexInInline = 0;\n var inlineObj = textPosition.currentWidget.getInline(textPosition.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (!isNullOrUndefined(inline)) {\n var nextInline = this.selection.getNextRenderedElementBox(inline, indexInInline);\n if (nextInline instanceof FieldElementBox && nextInline.fieldType === 0) {\n var paragraph = nextInline.fieldEnd.line;\n var fieldEndOffset = paragraph.getOffset(nextInline.fieldEnd, 1);\n var fieldEndIndex = this.getHierarchicalIndex(paragraph, fieldEndOffset.toString());\n if (!TextPosition.isForwardSelection(fieldEndIndex, selectionStartIndex)) {\n this.selection.start.setPositionParagraph(paragraph, fieldEndOffset);\n selectionStartIndex = fieldEndIndex;\n }\n }\n }\n if (inline instanceof FieldElementBox && inline.fieldType === 1 && !isNullOrUndefined(inline.fieldBegin)) {\n var line = inline.fieldBegin.line;\n var fieldBegin = inline.fieldBegin;\n var fieldBeginOffset = line.getOffset(fieldBegin, 0);\n var fieldBeginIndex = this.getHierarchicalIndex(line, fieldBeginOffset.toString());\n if (!TextPosition.isForwardSelection(selectionEndIndex, fieldBeginIndex)) {\n //If field begin is before selection end, extend selection end to field begin.\n this.moveToInline(inline.fieldBegin, 0);\n return;\n }\n textPosition.moveToInline(inline.fieldBegin, 0);\n }\n else {\n textPosition.movePreviousPosition();\n }\n currentIndex = textPosition.getHierarchicalIndexInternal();\n }\n };\n /**\n * @private\n */\n TextPosition.prototype.paragraphStartInternal = function (selection, moveToPreviousParagraph) {\n var offset = selection.getStartLineOffset(this.currentWidget);\n if (this.offset === offset && moveToPreviousParagraph) {\n var startParagraph = this.moveToNextParagraphInTableCheck();\n if (startParagraph) {\n this.moveToPreviousParagraphInTable(selection);\n }\n else if (!isNullOrUndefined(selection.getPreviousParagraphBlock(this.currentWidget.paragraph))) {\n var paragraphValue = selection.getPreviousParagraphBlock(this.currentWidget.paragraph);\n this.currentWidget = paragraphValue.childWidgets[0];\n this.offset = selection.getStartLineOffset(this.currentWidget);\n }\n }\n else {\n this.currentWidget = this.currentWidget.paragraph.getSplitWidgets()[0].childWidgets[0];\n this.offset = offset;\n }\n this.calculateOffset();\n };\n /**\n * @private\n */\n TextPosition.prototype.calculateOffset = function () {\n var selectionStartIndex = this.owner.selection.start.getHierarchicalIndexInternal();\n var selectionEndIndex = this.getHierarchicalIndexInternal();\n if (selectionStartIndex !== selectionEndIndex) {\n this.validateBackwardFieldSelection(selectionStartIndex, selectionEndIndex);\n }\n this.updatePhysicalPosition(true);\n };\n /**\n * Moves the text position to start of the paragraph.\n * @private\n */\n TextPosition.prototype.moveToParagraphStartInternal = function (selection, moveToPreviousParagraph) {\n var startOffset = selection.getStartOffset(this.paragraph);\n if (this.offset === startOffset && moveToPreviousParagraph) {\n var paragraphstart = this.moveToNextParagraphInTableCheck();\n if (paragraphstart) {\n this.moveToPreviousParagraphInTable(selection);\n }\n else if (!isNullOrUndefined(selection.getPreviousParagraphBlock(this.paragraph))) {\n this.currentWidget = selection.getPreviousParagraphBlock(this.paragraph).firstChild;\n this.offset = selection.getStartOffset(this.paragraph);\n }\n }\n else {\n this.currentWidget = this.paragraph.firstChild;\n this.offset = selection.getStartLineOffset(this.currentWidget);\n }\n var selectionStartIndex = this.owner.selection.start.getHierarchicalIndexInternal();\n var selectionEndIndex = this.getHierarchicalIndexInternal();\n if (selectionStartIndex !== selectionEndIndex) {\n this.validateBackwardFieldSelection(selectionStartIndex, selectionEndIndex);\n }\n this.updatePhysicalPosition(false);\n };\n /**\n * Moves the text position to end of the paragraph.\n * @private\n */\n TextPosition.prototype.moveToParagraphEndInternal = function (selection, moveToNextParagraph) {\n // tslint:disable-next-line:max-line-length\n var splittedParagraph = this.currentWidget.paragraph;\n while (splittedParagraph.nextSplitWidget) {\n splittedParagraph = splittedParagraph.nextSplitWidget;\n }\n this.currentWidget = splittedParagraph.childWidgets[splittedParagraph.childWidgets.length - 1];\n var endOffset = this.currentWidget.getEndOffset() + 1;\n if (this.offset === endOffset && moveToNextParagraph) {\n var paragraphEnd = this.moveToNextParagraphInTableCheck();\n if (paragraphEnd) {\n this.moveToNextParagraphInTable();\n }\n else if (!isNullOrUndefined(selection.getNextParagraphBlock(this.currentWidget.paragraph))) {\n var endParagraph = selection.getNextParagraphBlock(this.currentWidget.paragraph);\n this.currentWidget = endParagraph.childWidgets[endParagraph.childWidgets.length - 1];\n this.offset = this.currentWidget.getEndOffset() + 1;\n }\n }\n else {\n this.offset = endOffset;\n }\n this.calculateOffset();\n };\n /**\n * @private\n */\n TextPosition.prototype.moveUp = function (selection, left) {\n var paragraph = this.currentWidget.paragraph;\n //Moves text position to start of line.\n this.moveToLineStartInternal(selection, true);\n //Moves previous line starting.\n this.movePreviousPosition();\n var prevLine = undefined;\n var currentParagraph = this.currentWidget.paragraph;\n if (paragraph.isInsideTable && paragraph !== currentParagraph && paragraph.associatedCell !== currentParagraph.associatedCell\n // tslint:disable-next-line:max-line-length\n && (!isNullOrUndefined(currentParagraph.associatedCell) && (paragraph.associatedCell.ownerRow === currentParagraph.associatedCell.ownerRow))) {\n var ownerRow = currentParagraph.associatedCell.ownerRow;\n if (ownerRow.previousRenderedWidget instanceof TableRowWidget) {\n // tslint:disable-next-line:max-line-length\n var cell = selection.getFirstCellInRegion(ownerRow.previousRenderedWidget, currentParagraph.associatedCell, left, true);\n var lastParagraph = selection.getLastParagraph(cell);\n this.setPosition(lastParagraph.childWidgets[lastParagraph.childWidgets.length - 1], false);\n }\n else {\n var prevBlock = ownerRow.ownerTable.previousRenderedWidget;\n do {\n if (prevBlock instanceof TableWidget) {\n prevBlock = selection.getLastBlockInLastCell(prevBlock);\n }\n } while (prevBlock instanceof TableWidget);\n if (prevBlock instanceof ParagraphWidget) {\n this.setPosition(prevBlock.childWidgets[prevBlock.childWidgets.length - 1], false);\n }\n }\n prevLine = selection.getLineWidgetParagraph(this.offset, this.currentWidget);\n }\n else {\n if (!paragraph.isInsideTable && this.currentWidget.paragraph.isInsideTable) {\n // tslint:disable-next-line:max-line-length\n var cell = selection.getFirstCellInRegion(this.currentWidget.paragraph.associatedCell.ownerRow, this.currentWidget.paragraph.associatedCell, this.owner.selection.upDownSelectionLength, true);\n var lastParagraph = selection.getLastParagraph(cell);\n this.setPosition(lastParagraph.childWidgets[lastParagraph.childWidgets.length - 1], false);\n // tslint:disable-next-line:max-line-length\n }\n else if (paragraph.isInsideTable && (!isNullOrUndefined(this.currentWidget.paragraph.associatedCell) && paragraph.associatedCell.ownerRow.previousRenderedWidget !== paragraph.associatedCell.ownerRow.previousSplitWidget &&\n paragraph.associatedCell.ownerRow.previousRenderedWidget === this.currentWidget.paragraph.associatedCell.ownerRow)) {\n // tslint:disable-next-line:max-line-length\n var cell = selection.getLastCellInRegion(this.currentWidget.paragraph.associatedCell.ownerRow, this.currentWidget.paragraph.associatedCell, this.owner.selection.upDownSelectionLength, true);\n var lastParagraph = selection.getLastParagraph(cell);\n this.setPosition(lastParagraph.childWidgets[lastParagraph.childWidgets.length - 1], false);\n }\n prevLine = selection.getLineWidgetParagraph(this.offset, this.currentWidget);\n }\n //Moves till the Up/Down selection width.\n var top = selection.getTop(prevLine);\n selection.updateTextPositionWidget(prevLine, new Point(left, top), this, false);\n };\n /**\n * @private\n */\n TextPosition.prototype.moveDown = function (selection, left) {\n //Moves text position to end of line.\n var prevParagraph = this.currentWidget.paragraph;\n var prevOffset = this.offset;\n this.moveToLineEndInternal(selection, true);\n var length = this.selection.getParagraphLength(this.currentWidget.paragraph);\n if (this.offset > length) {\n this.offset = length;\n }\n //Moves next line starting.\n this.moveNextPosition();\n var nextLine = undefined;\n // tslint:disable-next-line:max-line-length\n if (prevParagraph.isInsideTable && prevParagraph !== this.currentWidget.paragraph && prevParagraph.associatedCell !== this.currentWidget.paragraph.associatedCell && (!isNullOrUndefined(this.currentWidget.paragraph.associatedCell) && prevParagraph.associatedCell.ownerRow === this.currentWidget.paragraph.associatedCell.ownerRow)) {\n var ownerRow = this.currentWidget.paragraph.associatedCell.ownerRow;\n // tslint:disable-next-line:max-line-length\n if (prevParagraph.isInsideTable && this.currentWidget.paragraph.isInsideTable && prevParagraph.associatedCell.cellFormat.rowSpan > 1 && prevParagraph.associatedCell.cellFormat.rowSpan + prevParagraph.associatedCell.ownerRow.rowIndex === prevParagraph.associatedCell.ownerTable.childWidgets.length) {\n //If the prevParagraph owner cell is Verically merged upto the last row, then theposition moved to next column. the position moved to out of the current tabel so owner row is assigned to last row.\n // tslint:disable-next-line:max-line-length\n ownerRow = this.currentWidget.paragraph.associatedCell.ownerTable.childWidgets[this.currentWidget.paragraph.associatedCell.ownerTable.childWidgets.length - 1];\n }\n if (ownerRow.nextRenderedWidget instanceof TableRowWidget) {\n // tslint:disable-next-line:max-line-length\n var cell = this.selection.getLastCellInRegion(ownerRow.nextRenderedWidget, this.currentWidget.paragraph.associatedCell, left, false);\n this.setPosition(this.selection.getFirstParagraph(cell).childWidgets[0], true);\n }\n else {\n var nextBlock = this.selection.getNextRenderedBlock(ownerRow.ownerTable);\n do {\n if (nextBlock instanceof TableWidget) {\n nextBlock = this.selection.getFirstBlockInFirstCell(nextBlock);\n }\n } while (nextBlock instanceof TableWidget);\n if (nextBlock instanceof ParagraphWidget) {\n this.setPosition(nextBlock.childWidgets[0], true);\n }\n }\n nextLine = selection.getLineWidgetParagraph(this.offset, this.currentWidget);\n }\n else {\n if (!prevParagraph.isInsideTable && this.currentWidget.paragraph.isInsideTable) {\n // tslint:disable-next-line:max-line-length\n var cell = this.selection.getLastCellInRegion(this.currentWidget.paragraph.associatedCell.ownerRow, this.currentWidget.paragraph.associatedCell, this.owner.selection.upDownSelectionLength, false);\n this.setPosition(this.selection.getFirstParagraph(cell).childWidgets[0], true);\n // tslint:disable-next-line:max-line-length\n }\n else if (prevParagraph.isInsideTable && (!isNullOrUndefined(this.currentWidget.paragraph.associatedCell) && prevParagraph.associatedCell.ownerRow.nextRenderedWidget !== prevParagraph.associatedCell.ownerRow.nextSplitWidget\n && prevParagraph.associatedCell.ownerRow.nextRenderedWidget === this.currentWidget.paragraph.associatedCell.ownerRow)) {\n // tslint:disable-next-line:max-line-length\n var cell = selection.getLastCellInRegion(this.currentWidget.paragraph.associatedCell.ownerRow, this.currentWidget.paragraph.associatedCell, this.owner.selection.upDownSelectionLength, true);\n this.setPosition(selection.getFirstParagraph(cell).childWidgets[0], false);\n }\n nextLine = selection.getLineWidgetParagraph(this.offset, this.currentWidget);\n }\n //Moves till the Up/Down selection width.\n var top = this.selection.getTop(nextLine);\n this.selection.updateTextPositionWidget(nextLine, new Point(left, top), this, false);\n };\n /**\n * Moves the text position to start of the line.\n * @private\n */\n TextPosition.prototype.moveToLineStartInternal = function (selection, moveToPreviousLine) {\n if (this.location.x > this.viewer.clientActiveArea.right) {\n this.offset = this.offset - 1;\n }\n var currentLine = selection.getLineWidgetInternal(this.currentWidget, this.offset, moveToPreviousLine);\n var firstElement = selection.getFirstElementInternal(currentLine);\n var startOffset = selection.getStartOffset(this.currentWidget.paragraph);\n if (isNullOrUndefined(firstElement) && this.offset > startOffset) {\n var index = 0;\n var inlineObj = this.currentWidget.getInline(this.offset, index);\n var inline = inlineObj.element;\n index = inlineObj.index;\n if (inline instanceof TextElementBox && inline.text !== '\\v') {\n this.offset = startOffset;\n }\n }\n else if (!isNullOrUndefined(firstElement)) {\n var indexInInline = selection.getIndexInInline(firstElement);\n this.currentWidget = firstElement.line;\n this.offset = this.currentWidget.getOffset(firstElement, indexInInline);\n indexInInline = 0;\n var inlineObj = this.currentWidget.getInline(this.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (inline instanceof FieldElementBox) {\n //Checks if field character is part of rendered field, otherwise moves to previous rendered content.\n var prevInline = selection.getPreviousValidElement(inline);\n if (!isNullOrUndefined(prevInline)) {\n inline = prevInline;\n this.currentWidget = inline.line;\n this.offset = this.currentWidget.getOffset(inline, inline.length);\n if (inline instanceof FieldElementBox) {\n this.offset--;\n }\n }\n }\n }\n this.updatePhysicalPosition(true);\n };\n /**\n * Check paragraph is inside table\n * @private\n */\n TextPosition.prototype.moveToNextParagraphInTableCheck = function () {\n if ((this.selection.start.paragraph.isInsideTable || this.paragraph.isInsideTable)\n && (this.selection.start.paragraph.associatedCell !== this.paragraph.associatedCell\n || this.selection.isCellSelected(this.selection.start.paragraph.associatedCell, this.selection.start, this))) {\n return true;\n }\n return false;\n };\n /**\n * Moves the text position to end of the word.\n * @private\n */\n TextPosition.prototype.moveToWordEndInternal = function (type, excludeSpace) {\n // type === 0 -------->CTRL+ARROW Navigation\n // type === 1 -------->CTRL+SHIFT+ARROW Selection\n // type === 2 -------->Double-tap Word Selection\n var incrementValue = 0;\n var endOffset = this.currentWidget.getEndOffset();\n if (this.selection.isParagraphFirstLine(this.currentWidget)) {\n if (this.currentWidget.children[0] instanceof ListTextElementBox) {\n incrementValue = 1;\n }\n if (this.currentWidget.children[1] instanceof ListTextElementBox) {\n incrementValue = 2;\n }\n }\n if (this.offset + incrementValue === endOffset || this.offset === endOffset + 1) {\n if (this.offset === endOffset && type !== 0) {\n this.setPositionParagraph(this.currentWidget, endOffset + 1);\n }\n else {\n var nextParagraph = this.selection.getNextParagraphBlock(this.currentWidget.paragraph);\n if (isNullOrUndefined(nextParagraph)) {\n return;\n }\n this.currentWidget = nextParagraph.childWidgets[0];\n this.offset = this.selection.getStartLineOffset(this.currentWidget);\n if (type === 1) {\n // tslint:disable-next-line:max-line-length\n var nextWord = this.moveToNextParagraphInTableCheck();\n if (nextWord) {\n this.moveToNextParagraphInTable();\n }\n else {\n this.moveToWordEndInternal(type, excludeSpace);\n }\n }\n }\n }\n else {\n var indexInInline = 0;\n var endSelection = false;\n var inlineObj = this.currentWidget.getInline(this.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n this.getNextWordOffset(inline, indexInInline, type, false, endSelection, this, excludeSpace);\n }\n if (type !== 0) {\n var selectionStartIndex = this.owner.selection.start.getHierarchicalIndexInternal();\n var selectionEndIndex = this.getHierarchicalIndexInternal();\n if (selectionStartIndex !== selectionEndIndex) {\n this.validateForwardFieldSelection(selectionStartIndex, selectionEndIndex);\n }\n }\n this.updatePhysicalPosition(true);\n };\n /**\n * move text position to next paragraph inside table\n * @private\n */\n TextPosition.prototype.moveToNextParagraphInTable = function () {\n var paragraph = this.currentWidget.paragraph;\n var nextParagraph = (paragraph.isInsideTable) ? this.selection.getNextSelectionCell(paragraph.associatedCell) :\n this.selection.getNextParagraphBlock(paragraph);\n if (isNullOrUndefined(nextParagraph)) {\n return;\n }\n this.currentWidget = nextParagraph.childWidgets[nextParagraph.childWidgets.length - 1];\n this.offset = this.currentWidget.getEndOffset() + 1;\n };\n /**\n * Moves the text position to start of the previous paragraph.\n */\n TextPosition.prototype.moveToPreviousParagraph = function (selection) {\n var startOffset = selection.getStartOffset(this.currentWidget.paragraph);\n // tslint:disable-next-line:max-line-length\n if (this.offset === startOffset && !isNullOrUndefined(selection.getPreviousParagraphBlock(this.currentWidget.paragraph))) {\n var previousParagraph = selection.getPreviousParagraphBlock(this.currentWidget.paragraph);\n this.currentWidget = previousParagraph.childWidgets[0];\n this.offset = selection.getStartOffset(this.currentWidget.paragraph);\n }\n else {\n this.offset = selection.getStartOffset(this.currentWidget.paragraph);\n }\n this.updatePhysicalPosition(true);\n };\n /**\n * Move to previous line from current position\n * @private\n */\n TextPosition.prototype.moveToPreviousLine = function (selection, left) {\n var currentIndex = this.getHierarchicalIndexInternal();\n var currentLine = selection.getLineWidgetParagraph(this.offset, this.currentWidget);\n //Moves text position to start of line.\n this.moveToLineStartInternal(selection, true);\n if (this.currentWidget.paragraph.isInsideTable) {\n this.moveUpInTable(selection);\n }\n else {\n this.moveBackward();\n }\n var prevLine = selection.getLineWidgetParagraph(this.offset, this.currentWidget);\n var lineStart = selection.getLeft(prevLine);\n var lineWidth = selection.getWidth(prevLine, true);\n //Moves till the Up/Down selection width.\n if (lineWidth + lineStart >= left && currentLine !== prevLine) {\n var top_1 = selection.getTop(prevLine);\n var point = new Point(left, top_1);\n selection.updateTextPositionWidget(prevLine, point, this, true);\n }\n //Checks if the current position is between field result, then move to field begin.\n var selectionEndIndex = this.getHierarchicalIndexInternal();\n this.validateBackwardFieldSelection(currentIndex, selectionEndIndex);\n };\n /**\n * @private\n */\n TextPosition.prototype.moveToLineEndInternal = function (selection, moveToNextLine) {\n if (this.location.x > this.viewer.clientActiveArea.right) {\n this.offset = this.offset - 1;\n }\n var currentLine = selection.getLineWidgetParagraph(this.offset, this.currentWidget);\n var firstElement = selection.getFirstElementInternal(currentLine);\n if (isNullOrUndefined(firstElement) && this.offset === selection.getStartLineOffset(this.currentWidget)) {\n this.offset = selection.getParagraphLength(this.paragraph) + 1;\n this.updatePhysicalPosition(true);\n }\n else if (!isNullOrUndefined(firstElement)) {\n var lastElement = currentLine.children[currentLine.children.length - 1];\n var index = 0;\n index += lastElement instanceof TextElementBox ? lastElement.length : 1;\n this.currentWidget = lastElement.line;\n if (index === lastElement.length\n && isNullOrUndefined(lastElement.nextNode) && selection.isParagraphLastLine(this.currentWidget)) {\n var length_1 = selection.getLineLength(this.currentWidget);\n this.offset = moveToNextLine ? length_1 + 1 : length_1;\n }\n else {\n var inline = lastElement;\n while (!isNullOrUndefined(inline) && inline.length === index && inline.nextNode instanceof FieldElementBox) {\n var nextInline = selection.getNextValidElement(inline.nextNode);\n if (inline !== nextInline) {\n inline = nextInline;\n index = 0;\n }\n if (inline instanceof FieldElementBox && inline.fieldType === 0\n && !isNullOrUndefined(inline.fieldEnd)) {\n var fieldBegin = inline;\n if (isNullOrUndefined(fieldBegin.fieldSeparator)) {\n inline = fieldBegin.fieldEnd;\n }\n else {\n inline = fieldBegin.fieldSeparator;\n this.currentWidget = inline.line;\n if (this.currentWidget === fieldBegin.fieldEnd.line\n && !selection.hasValidInline(this.currentWidget.paragraph, inline, fieldBegin.fieldEnd)) {\n inline = fieldBegin.fieldEnd;\n }\n }\n this.currentWidget = inline.line;\n }\n if (inline instanceof FieldElementBox) {\n index = 1;\n }\n }\n if (index === inline.length && isNullOrUndefined(inline.nextNode)) {\n index++;\n }\n if (!moveToNextLine && inline instanceof ElementBox && inline.text === '\\v') {\n index--;\n }\n this.offset = this.currentWidget.getOffset(inline, index);\n }\n this.updatePhysicalPosition(moveToNextLine);\n }\n };\n /**\n * Move to next line\n * @private\n */\n TextPosition.prototype.moveToNextLine = function (left) {\n var selection = this.selection;\n var textPosition = new TextPosition(this.owner);\n textPosition.setPositionInternal(this);\n var currentIndex = this.getHierarchicalIndexInternal();\n var currentLine = selection.getLineWidgetParagraph(this.offset, this.currentWidget);\n var isAtLineStart = this.offset === 0 ? true : false;\n //Moves text position to end of line.\n this.moveToLineEndInternal(selection, true);\n var isMoveToLineEnd = !textPosition.isAtSamePosition(this);\n textPosition.setPositionInternal(this);\n if (this.currentWidget.paragraph.isInsideTable) {\n this.moveDownInTable(selection);\n }\n else {\n this.moveNextPosition();\n this.moveForward();\n }\n var nextLine = selection.getLineWidgetParagraph(this.offset, this.currentWidget);\n var lineStart = selection.getLeft(nextLine);\n var firstElement = selection.getFirstElementInternal(nextLine);\n // tslint:disable-next-line:max-line-length\n var firstItemWidth = isNullOrUndefined(firstElement) ? selection.getWidth(nextLine, true) : selection.getLeftInternal(nextLine, firstElement, 1) - lineStart;\n //Moves till the Up/Down selection width.\n if (lineStart < left && (firstItemWidth / 2 < left - lineStart)) {\n var top_2 = selection.getTop(nextLine);\n var point = new Point(left, top_2);\n selection.updateTextPositionWidget(nextLine, point, this, true);\n var width = selection.getWidth(nextLine, true);\n if (width < left - lineStart) {\n this.moveToLineEndInternal(selection, true);\n }\n }\n else if (isMoveToLineEnd && this.currentWidget.paragraph.isInsideTable\n && this.currentWidget === this.owner.selection.start.currentWidget) {\n this.setPositionInternal(textPosition);\n }\n else if (!isMoveToLineEnd) {\n this.moveToLineEndInternal(selection, true);\n }\n //Checks if the current position is between field result, then move to field end.\n var selectionEndIndex = this.getHierarchicalIndexInternal();\n this.validateForwardFieldSelection(currentIndex, selectionEndIndex);\n };\n /**\n * Move upward in table\n * @private\n */\n TextPosition.prototype.moveUpInTable = function (selection) {\n var isPositionUpdated = false;\n var end = this.owner.selection.end;\n var isBackwardSelection = !this.owner.selection.isEmpty;\n isPositionUpdated = end.paragraph.isInsideTable;\n if (isPositionUpdated) {\n var startCell = this.currentWidget.paragraph.associatedCell;\n var endCell = end.paragraph.associatedCell;\n var containerCell = selection.getContainerCellOf(endCell, startCell);\n isPositionUpdated = containerCell.ownerTable.contains(startCell);\n if (isPositionUpdated) {\n endCell = selection.getSelectedCell(endCell, containerCell);\n startCell = selection.getSelectedCell(startCell, containerCell);\n // tslint:disable-next-line:max-line-length\n var isInContainerCell = selection.containsCell(containerCell, this.currentWidget.paragraph.associatedCell);\n var isContainerCellSelected = selection.isCellSelected(containerCell, this, end);\n if (!isContainerCellSelected) {\n // tslint:disable-next-line:max-line-length\n isContainerCellSelected = this.currentWidget.paragraph === selection.getFirstParagraph(containerCell) && this.isAtParagraphStart;\n }\n if ((isInContainerCell && isContainerCellSelected\n || !isInContainerCell) && !isNullOrUndefined(startCell.ownerRow.previousRenderedWidget)) {\n //Moves to cell in previous row.\n var row = startCell.ownerRow.previousRenderedWidget;\n // tslint:disable-next-line:max-line-length\n var cell = selection.getFirstCellInRegion(row, containerCell, this.owner.selection.upDownSelectionLength, true);\n var previousParagraph = selection.getLastParagraph(cell);\n this.setPosition(previousParagraph.childWidgets[0], true);\n return;\n }\n else if (isInContainerCell && isContainerCellSelected\n && isNullOrUndefined(startCell.ownerRow.previousRenderedWidget) || !isInContainerCell) {\n if (isBackwardSelection) {\n //Moves to first cell of row.\n startCell = startCell.ownerRow.childWidgets[0];\n var previousParagraph = selection.getFirstParagraph(startCell);\n this.setPosition(previousParagraph.childWidgets[0], true);\n }\n else {\n //Moves to last cell of row.\n startCell = startCell.ownerRow.childWidgets[startCell.ownerRow.childWidgets.length - 1];\n var previousParagraph = selection.getLastParagraph(startCell);\n this.setPosition(previousParagraph.childWidgets[0], false);\n }\n }\n }\n }\n if (!isPositionUpdated) {\n //Moves to previous row / previous block.\n var cell = selection.getContainerCell(this.currentWidget.paragraph.associatedCell);\n if (isBackwardSelection) {\n //Moves to first cell of row.\n cell = cell.ownerRow.childWidgets[0];\n var previousParagraph = selection.getFirstParagraph(cell);\n this.setPosition(previousParagraph.childWidgets[0], true);\n }\n else {\n //Moves to end of row.\n cell = cell.ownerRow.childWidgets[cell.ownerRow.childWidgets.length - 1];\n var previousParagraph = selection.getLastParagraph(cell);\n this.setPosition(previousParagraph.childWidgets[0], false);\n }\n }\n //Moves to previous row / previous block.\n this.moveBackward();\n };\n /**\n * Move down inside table\n * @private\n */\n TextPosition.prototype.moveDownInTable = function (selection) {\n var isPositionUpdated = false;\n var isForwardSelection = this.owner.selection.isEmpty || this.owner.selection.isForward;\n isPositionUpdated = this.owner.selection.start.paragraph.isInsideTable;\n if (isPositionUpdated) {\n var startCell = this.owner.selection.start.paragraph.associatedCell;\n var endCell = this.currentWidget.paragraph.associatedCell;\n var containerCell = selection.getContainerCellOf(startCell, endCell);\n isPositionUpdated = containerCell.ownerTable.contains(endCell);\n if (isPositionUpdated) {\n startCell = selection.getSelectedCell(startCell, containerCell);\n endCell = selection.getSelectedCell(endCell, containerCell);\n // tslint:disable-next-line:max-line-length\n var isInContainerCell = selection.containsCell(containerCell, this.currentWidget.paragraph.associatedCell);\n var isContainerCellSelected = selection.isCellSelected(containerCell, this.owner.selection.start, this);\n if ((isInContainerCell && isContainerCellSelected\n || !isInContainerCell) && !isNullOrUndefined(endCell.ownerRow.nextRenderedWidget)) {\n //Moves to cell in next row.\n var row = endCell.ownerRow.nextRenderedWidget;\n // tslint:disable-next-line:max-line-length\n var cell = selection.getLastCellInRegion(row, containerCell, this.owner.selection.upDownSelectionLength, false);\n var lastParagraph = selection.getLastParagraph(cell);\n this.setPosition(lastParagraph.childWidgets[lastParagraph.childWidgets.length - 1], false);\n return;\n }\n else if (isInContainerCell && isContainerCellSelected\n && isNullOrUndefined(endCell.ownerRow.nextRenderedWidget) || !isInContainerCell) {\n if (isForwardSelection) {\n //Moves to last cell of row.\n endCell = endCell.ownerRow.childWidgets[endCell.ownerRow.childWidgets.length - 1];\n var lastParagraph = selection.getLastParagraph(endCell);\n this.setPosition(lastParagraph.childWidgets[lastParagraph.childWidgets.length - 1], false);\n }\n else {\n //Moves to first cell of row.\n endCell = endCell.ownerRow.childWidgets[0];\n var lastParagraph = selection.getFirstParagraph(endCell);\n this.setPosition(lastParagraph.childWidgets[lastParagraph.childWidgets.length - 1], true);\n }\n }\n }\n }\n if (!isPositionUpdated) {\n //Moves to next row / next block.\n var cell = selection.getContainerCell(this.currentWidget.paragraph.associatedCell);\n if (isForwardSelection) {\n //Moves to end of row.\n cell = cell.ownerRow.childWidgets[cell.ownerRow.childWidgets.length - 1];\n var lastParagraph = selection.getLastParagraph(cell);\n this.setPosition(lastParagraph.childWidgets[lastParagraph.childWidgets.length - 1], false);\n }\n else if (cell.ownerRow.nextRenderedWidget) {\n //Moves to first cell of row.\n cell = cell.ownerRow.nextRenderedWidget.childWidgets[0];\n var lastParagraph = selection.getFirstParagraph(cell);\n this.setPosition(lastParagraph.childWidgets[lastParagraph.childWidgets.length - 1], true);\n }\n }\n //Moves to next row / next block.\n this.moveForward();\n };\n /**\n * @private\n */\n TextPosition.prototype.destroy = function () {\n this.offset = undefined;\n this.isUpdateLocation = undefined;\n if (!isNullOrUndefined(this.location)) {\n this.location.destroy();\n }\n this.location = undefined;\n this.currentWidget = undefined;\n this.owner = undefined;\n this.viewer = undefined;\n };\n return TextPosition;\n}());\nexport { TextPosition };\n/**\n * @private\n */\nvar SelectionWidgetInfo = /** @class */ (function () {\n function SelectionWidgetInfo(left, width) {\n this.leftIn = 0;\n this.widthIn = 0;\n this.leftIn = left;\n this.widthIn = width;\n }\n Object.defineProperty(SelectionWidgetInfo.prototype, \"left\", {\n /**\n * @private\n */\n get: function () {\n return this.leftIn;\n },\n /**\n * @private\n */\n set: function (value) {\n this.leftIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionWidgetInfo.prototype, \"width\", {\n /**\n * @private\n */\n get: function () {\n return this.widthIn;\n },\n /**\n * @private\n */\n set: function (value) {\n this.widthIn = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n SelectionWidgetInfo.prototype.destroy = function () {\n this.widthIn = undefined;\n this.leftIn = undefined;\n };\n return SelectionWidgetInfo;\n}());\nexport { SelectionWidgetInfo };\n/**\n * @private\n */\nvar Hyperlink = /** @class */ (function () {\n function Hyperlink(fieldBeginAdv, selection) {\n this.linkInternal = '';\n this.localRef = '';\n this.opensNewWindow = false;\n var fieldCode = selection.getFieldCode(fieldBeginAdv);\n var lowercase = fieldCode.toLowerCase();\n if (lowercase.substring(0, 9) === 'hyperlink') {\n this.parseFieldValues(fieldCode.substring(9).trim(), selection);\n }\n }\n Object.defineProperty(Hyperlink.prototype, \"navigationLink\", {\n /**\n * Gets navigation link.\n * @returns string\n * @private\n */\n get: function () {\n return this.linkInternal;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Hyperlink.prototype, \"localReference\", {\n /**\n * Gets the local reference if any.\n * @returns string\n * @private\n */\n get: function () {\n return this.localRef;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Hyperlink.prototype, \"linkType\", {\n /**\n * Gets hyper link type.\n * @returns HyperLinkType\n * @private\n */\n get: function () {\n return this.typeInternal;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Parse field values\n * @param {string} value\n * @returns Void\n */\n Hyperlink.prototype.parseFieldValues = function (value, selection) {\n var codes = value.split(' ');\n var isLocalRef = false;\n for (var i = 0; i < codes.length; i++) {\n var code = codes[i];\n if (code.length < 1) {\n continue;\n }\n if (code === '\\\\t' || code === '\\\\l') {\n isLocalRef = true;\n }\n else if (code === '\\\\n') {\n this.opensNewWindow = true;\n }\n else {\n code = this.parseFieldValue(code, code[0] === '\\\"' ? '\\\"' : undefined);\n if (isLocalRef) {\n this.localRef = code;\n isLocalRef = false;\n }\n else {\n this.linkInternal = code;\n }\n }\n }\n this.setLinkType();\n };\n Hyperlink.prototype.parseFieldValue = function (value, endChar) {\n value = value.substring(1);\n var endIndex = endChar ? value.indexOf(endChar) : -1;\n if (endIndex < 0) {\n endIndex = value.length;\n }\n return value.substring(0, endIndex).trim();\n };\n Hyperlink.prototype.setLinkType = function () {\n // If only local reference.\n if (isNullOrUndefined(this.linkInternal) || this.linkInternal.length < 1) {\n this.typeInternal = 'Bookmark';\n return;\n }\n // Validates link.\n if (this.linkInternal.substring(0, 4) === ('www.')) {\n this.linkInternal = 'http://' + this.navigationLink;\n }\n else if (this.linkInternal[0] === '@') {\n this.linkInternal = 'mailto:' + this.navigationLink;\n }\n // Finds proper link type.\n if (this.linkInternal.substring(0, 7) === 'http://'\n || this.linkInternal.substring(0, 8) === 'https://') {\n this.typeInternal = 'WebPage';\n }\n else if (this.linkInternal.substring(0, 7) === 'mailto:') {\n this.typeInternal = 'Email';\n }\n else {\n this.typeInternal = 'File';\n }\n };\n /**\n * @private\n */\n Hyperlink.prototype.destroy = function () {\n this.linkInternal = undefined;\n this.localRef = undefined;\n this.typeInternal = undefined;\n this.opensNewWindow = undefined;\n };\n return Hyperlink;\n}());\nexport { Hyperlink };\n/**\n * @private\n */\nvar ImageFormat = /** @class */ (function () {\n /**\n * Constructor for image format class\n * @param imageContainer - Specifies for image width and height values.\n */\n function ImageFormat(imageContainer) {\n /**\n * @private\n */\n this.width = 0;\n /**\n * @private\n */\n this.height = 0;\n this.width = imageContainer.width;\n this.height = imageContainer.height;\n }\n /**\n * Dispose the internal objects which are maintained.\n * @private\n */\n ImageFormat.prototype.destroy = function () {\n this.width = undefined;\n this.height = undefined;\n };\n return ImageFormat;\n}());\nexport { ImageFormat };\n","import { Widget, BodyWidget, TableRowWidget, TableWidget, LineWidget, ElementBox, TextElementBox, ListTextElementBox, ImageElementBox, ParagraphWidget, TableCellWidget, FieldElementBox, BlockWidget, HeaderFooterWidget, BlockContainer, BookmarkElementBox } from '../viewer/page';\nimport { HelperMethods } from '../editor/editor-helper';\nimport { SelectionCharacterFormat, SelectionCellFormat, SelectionParagraphFormat, SelectionRowFormat, SelectionSectionFormat, SelectionTableFormat, SelectionImageFormat } from './selection-format';\nimport { Point } from '../editor/editor-helper';\nimport { isNullOrUndefined, createElement, L10n } from '@syncfusion/ej2-base';\nimport { Dictionary } from '../../base/dictionary';\nimport { WParagraphFormat, WParagraphStyle } from '../index';\nimport { HtmlExport } from '../writer/html-export';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { TextPosition, SelectionWidgetInfo, Hyperlink } from './selection-helper';\n/**\n * Selection\n */\nvar Selection = /** @class */ (function () {\n /**\n * @private\n */\n function Selection(documentEditor) {\n var _this = this;\n /**\n * @private\n */\n this.upDownSelectionLength = 0;\n /**\n * @private\n */\n this.isSkipLayouting = false;\n /**\n * @private\n */\n this.isImageSelected = false;\n this.contextTypeInternal = undefined;\n /**\n * @private\n */\n this.caret = undefined;\n //Format Retrieval Field\n /**\n * @private\n */\n this.isRetrieveFormatting = false;\n /**\n * @private\n */\n this.skipFormatRetrieval = false;\n this.isMoveDownOrMoveUp = false;\n /**\n * @private\n */\n this.selectedWidgets = undefined;\n /**\n * Hides caret.\n * @private\n */\n this.hideCaret = function () {\n _this.caret.style.display = 'none';\n };\n this.owner = documentEditor;\n this.viewer = this.owner.viewer;\n this.start = new TextPosition(this.owner);\n this.end = new TextPosition(this.owner);\n this.selectedWidgets = new Dictionary();\n this.characterFormatIn = new SelectionCharacterFormat(this);\n this.paragraphFormatIn = new SelectionParagraphFormat(this, this.viewer);\n this.sectionFormatIn = new SelectionSectionFormat(this);\n this.rowFormatIn = new SelectionRowFormat(this);\n this.cellFormatIn = new SelectionCellFormat(this);\n this.tableFormatIn = new SelectionTableFormat(this);\n this.imageFormatInternal = new SelectionImageFormat(this);\n }\n Object.defineProperty(Selection.prototype, \"htmlWriter\", {\n /**\n * @private\n */\n get: function () {\n if (isNullOrUndefined(this.htmlWriterIn)) {\n this.htmlWriterIn = new HtmlExport();\n }\n return this.htmlWriterIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"start\", {\n /**\n * Gets the start text position of last range in the selection\n * @returns {TextPosition}\n * @private\n */\n get: function () {\n if (!isNullOrUndefined(this.owner) && !isNullOrUndefined(this.viewer)) {\n if (isNullOrUndefined(this.startInternal)) {\n this.startInternal = this.owner.documentStart;\n }\n return this.startInternal;\n }\n return undefined;\n },\n /**\n * @private\n */\n set: function (value) {\n this.startInternal = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"characterFormat\", {\n //Format retrieval properties\n /**\n * Gets the instance of selection character format.\n * @default undefined\n * @return {SelectionCharacterFormat}\n */\n get: function () {\n return this.characterFormatIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"paragraphFormat\", {\n /**\n * Gets the instance of selection paragraph format.\n * @default undefined\n * @return {SelectionParagraphFormat}\n */\n get: function () {\n return this.paragraphFormatIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"sectionFormat\", {\n /**\n * Gets the instance of selection section format.\n * @default undefined\n * @return {SelectionSectionFormat}\n */\n get: function () {\n return this.sectionFormatIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"tableFormat\", {\n /**\n * Gets the instance of selection table format.\n * @default undefined\n * @return {SelectionTableFormat}\n */\n get: function () {\n return this.tableFormatIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"cellFormat\", {\n /**\n * Gets the instance of selection cell format.\n * @default undefined\n * @return {SelectionCellFormat}\n */\n get: function () {\n return this.cellFormatIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"rowFormat\", {\n /**\n * Gets the instance of selection row format.\n * @default undefined\n * @returns SelectionRowFormat\n */\n get: function () {\n return this.rowFormatIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"imageFormat\", {\n /**\n * Gets the instance of selection image format.\n * @default undefined\n * @returns SelectionImageFormat\n */\n get: function () {\n return this.imageFormatInternal;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"end\", {\n /**\n * Gets the start text position of selection range.\n * @private\n */\n get: function () {\n return this.endInternal;\n },\n /**\n * For internal use\n * @private\n */\n set: function (value) {\n this.endInternal = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"startPage\", {\n /**\n * Gets the page number where the selection ends.\n * @private\n */\n get: function () {\n if (!this.owner.isDocumentLoaded || isNullOrUndefined(this.viewer)\n || isNullOrUndefined(this.viewer.selectionStartPage)) {\n return 1;\n }\n return this.viewer.pages.indexOf(this.viewer.selectionStartPage) + 1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"endPage\", {\n /**\n * Gets the page number where the selection ends.\n * @private\n */\n get: function () {\n if (!this.owner.isDocumentLoaded || isNullOrUndefined(this.viewer)\n || isNullOrUndefined(this.viewer.selectionEndPage)) {\n return 1;\n }\n return this.viewer.pages.indexOf(this.viewer.selectionEndPage) + 1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"isForward\", {\n /**\n * Determines whether the selection direction is forward or not.\n * @default false\n * @returns {boolean}\n * @private\n */\n get: function () {\n return this.start.isExistBefore(this.end);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"isEmpty\", {\n /**\n * Determines whether the start and end positions are same or not.\n * @default false\n * @returns {boolean}\n * @private\n */\n get: function () {\n if (isNullOrUndefined(this.start)) {\n return true;\n }\n return this.start.isAtSamePosition(this.end);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"text\", {\n /**\n * Gets the text within selection.\n * @default ''\n * @returns {string}\n */\n get: function () {\n return this.getText(false);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"contextType\", {\n /**\n * Gets the context type of the selection.\n */\n get: function () {\n return this.contextTypeInternal;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"isCleared\", {\n /**\n * @private\n */\n get: function () {\n return isNullOrUndefined(this.end);\n },\n enumerable: true,\n configurable: true\n });\n Selection.prototype.getModuleName = function () {\n return 'Selection';\n };\n //Public API\n /**\n * Moves the selection to the header of current page.\n */\n Selection.prototype.goToHeader = function () {\n this.owner.enableHeaderAndFooter = true;\n this.enableHeadersFootersRegion(this.start.paragraph.bodyWidget.page.headerWidget);\n };\n /**\n * Moves the selection to the footer of current page.\n */\n Selection.prototype.goToFooter = function () {\n this.owner.enableHeaderAndFooter = true;\n this.enableHeadersFootersRegion(this.start.paragraph.bodyWidget.page.footerWidget);\n };\n /**\n * Closes the header and footer region.\n */\n Selection.prototype.closeHeaderFooter = function () {\n this.disableHeaderFooter();\n };\n /**\n * Moves the selection to the start of specified page number.\n */\n Selection.prototype.goToPage = function (pageNumber) {\n if (pageNumber >= 1 && pageNumber <= this.viewer.pages.length) {\n var page = this.viewer.pages[pageNumber - 1];\n this.updateTextPositionForBlockContainer(page.bodyWidgets[0]);\n }\n };\n /**\n * Selects the entire table if the context is within table.\n */\n Selection.prototype.selectTable = function () {\n if (!this.owner.enableSelection) {\n return;\n }\n this.selectTableInternal();\n };\n /**\n * Selects the entire row if the context is within table.\n */\n Selection.prototype.selectRow = function () {\n if (!this.owner.enableSelection) {\n return;\n }\n this.selectTableRow();\n };\n /**\n * Selects the entire column if the context is within table.\n */\n Selection.prototype.selectColumn = function () {\n if (!this.owner.enableSelection) {\n return;\n }\n this.selectColumnInternal();\n };\n /**\n * Selects the entire cell if the context is within table.\n */\n Selection.prototype.selectCell = function () {\n if (!this.owner.enableSelection) {\n return;\n }\n this.selectTableCell();\n };\n /**\n * Toggles the bold property of selected contents.\n * @private\n */\n Selection.prototype.toggleBold = function () {\n if (this.owner.editorModule) {\n this.owner.editorModule.toggleBold();\n }\n };\n /**\n * Toggles the italic property of selected contents.\n * @private\n */\n Selection.prototype.toggleItalic = function () {\n if (this.owner.editorModule) {\n this.owner.editorModule.toggleItalic();\n }\n };\n /**\n * Toggles the underline property of selected contents.\n * @param underline Default value of ‘underline’ parameter is Single.\n * @private\n */\n Selection.prototype.toggleUnderline = function (underline) {\n if (this.owner.editor) {\n this.owner.editor.toggleUnderline(underline);\n }\n };\n /**\n * Toggles the strike through property of selected contents.\n * @param {Strikethrough} strikethrough Default value of strikethrough parameter is SingleStrike.\n * @private\n */\n Selection.prototype.toggleStrikethrough = function (strikethrough) {\n if (this.owner.editor) {\n this.owner.editor.toggleStrikethrough(strikethrough);\n }\n };\n /**\n * Toggles the highlight color property of selected contents.\n * @param {HighlightColor} highlightColor Default value of ‘underline’ parameter is Yellow.\n * @private\n */\n Selection.prototype.toggleHighlightColor = function (highlightColor) {\n if (this.owner.editor) {\n this.owner.editor.toggleHighlightColor(highlightColor);\n }\n };\n /**\n * Toggles the subscript formatting of selected contents.\n * @private\n */\n Selection.prototype.toggleSubscript = function () {\n if (this.owner.editor) {\n this.owner.editor.toggleSubscript();\n }\n };\n /**\n * Toggles the superscript formatting of selected contents.\n * @private\n */\n Selection.prototype.toggleSuperscript = function () {\n if (this.owner.editor) {\n this.owner.editor.toggleSuperscript();\n }\n };\n /**\n * Toggles the text alignment property of selected contents.\n * @param {TextAlignment} textAlignment Default value of ‘textAlignment parameter is TextAlignment.Left.\n * @private\n */\n Selection.prototype.toggleTextAlignment = function (textAlignment) {\n if (this.owner.editor) {\n this.owner.editor.toggleTextAlignment(textAlignment);\n }\n };\n /**\n * Increases the left indent of selected paragraphs to a factor of 36 points.\n * @private\n */\n Selection.prototype.increaseIndent = function () {\n if (this.owner.editor) {\n this.owner.editor.increaseIndent();\n }\n };\n /**\n * Decreases the left indent of selected paragraphs to a factor of 36 points.\n * @private\n */\n Selection.prototype.decreaseIndent = function () {\n if (this.owner.editor) {\n this.owner.editor.decreaseIndent();\n }\n };\n /**\n * Fires the `requestNavigate` event if current selection context is in hyperlink.\n */\n Selection.prototype.navigateHyperlink = function () {\n var fieldBegin = this.getHyperlinkField();\n if (fieldBegin) {\n this.fireRequestNavigate(fieldBegin);\n }\n };\n /**\n * Navigate Hyperlink\n * @param fieldBegin\n * @private\n */\n Selection.prototype.fireRequestNavigate = function (fieldBegin) {\n var hyperlink = new Hyperlink(fieldBegin, this);\n var eventArgs = {\n isHandled: false,\n navigationLink: hyperlink.navigationLink,\n linkType: hyperlink.linkType,\n localReference: hyperlink.localReference\n };\n this.owner.trigger('requestNavigate', eventArgs);\n if (!eventArgs.isHandled) {\n this.viewer.selection.navigateBookmark(hyperlink.localReference, true);\n }\n };\n /**\n * Copies the hyperlink URL if the context is within hyperlink.\n */\n Selection.prototype.copyHyperlink = function () {\n var hyperLinkField = this.getHyperlinkField();\n var linkText = this.getLinkText(hyperLinkField);\n this.copyToClipboard(linkText);\n };\n //Selection add, Highlight, remove API starts\n /**\n * @private\n */\n Selection.prototype.highlightSelection = function (isSelectionChanged) {\n if (this.owner.enableImageResizerMode) {\n this.owner.imageResizerModule.hideImageResizer();\n }\n if (this.isEmpty) {\n this.updateCaretPosition();\n }\n else {\n if (this.isForward) {\n this.highlightSelectedContent(this.start, this.end);\n }\n else {\n this.highlightSelectedContent(this.end, this.start);\n }\n }\n this.viewer.updateTouchMarkPosition();\n if (isSelectionChanged) {\n this.viewer.scrollToPosition(this.start, this.end);\n }\n };\n /**\n * @private\n */\n Selection.prototype.createHighlightBorder = function (lineWidget, width, left, top) {\n if (width < 0) {\n width = 0;\n }\n var page = this.getPage(lineWidget.paragraph);\n var height = lineWidget.height;\n var selectionWidget = undefined;\n if (!this.selectedWidgets.containsKey(lineWidget)) {\n selectionWidget = new SelectionWidgetInfo(left, width);\n this.selectedWidgets.add(lineWidget, selectionWidget);\n }\n var viewer = this.viewer;\n var pageTop = this.getPageTop(page);\n var pageLeft = page.boundingRectangle.x;\n if (viewer.containerTop <= pageTop\n || pageTop < viewer.containerTop + viewer.selectionCanvas.height) {\n viewer.selectionContext.fillStyle = 'gray';\n viewer.selectionContext.globalAlpha = 0.4;\n var zoomFactor = viewer.zoomFactor;\n this.clipSelection(page, pageTop);\n // tslint:disable-next-line:max-line-length\n viewer.selectionContext.fillRect((pageLeft + (left * zoomFactor)) - viewer.containerLeft, (pageTop + (top * zoomFactor)) - viewer.containerTop, width * zoomFactor, height * zoomFactor);\n viewer.selectionContext.restore();\n }\n };\n /**\n * Create selection highlight inside table\n * @private\n */\n Selection.prototype.createHighlightBorderInsideTable = function (cellWidget) {\n var page = this.getPage(cellWidget);\n var selectionWidget = undefined;\n var left = cellWidget.x - cellWidget.margin.left + cellWidget.leftBorderWidth;\n var width = cellWidget.width + cellWidget.margin.left\n + cellWidget.margin.right - cellWidget.leftBorderWidth - cellWidget.rightBorderWidth;\n var top = cellWidget.y;\n var height = cellWidget.height;\n var pageTop = this.getPageTop(page);\n var pageLeft = page.boundingRectangle.x;\n var isVisiblePage = this.viewer.containerTop <= pageTop\n || pageTop < this.viewer.containerTop + this.viewer.selectionCanvas.height;\n if (this.selectedWidgets.containsKey(cellWidget)) {\n selectionWidget = this.selectedWidgets.get(cellWidget);\n if (isVisiblePage) {\n // tslint:disable-next-line:max-line-length\n this.viewer.selectionContext.clearRect((pageLeft + (selectionWidget.left * this.viewer.zoomFactor) - this.viewer.containerLeft), (pageTop + (top * this.viewer.zoomFactor)) - this.viewer.containerTop, selectionWidget.width * this.viewer.zoomFactor, height * this.viewer.zoomFactor);\n }\n }\n selectionWidget = new SelectionWidgetInfo(left, width);\n this.selectedWidgets.add(cellWidget, selectionWidget);\n if (isVisiblePage) {\n this.viewer.selectionContext.fillStyle = 'gray';\n this.viewer.selectionContext.globalAlpha = 0.4;\n var zoomFactor = this.viewer.zoomFactor;\n this.clipSelection(page, pageTop);\n // tslint:disable-next-line:max-line-length\n this.viewer.selectionContext.fillRect((pageLeft + (left * zoomFactor)) - this.viewer.containerLeft, (pageTop + (top * zoomFactor)) - this.viewer.containerTop, width * zoomFactor, height * zoomFactor);\n this.viewer.selectionContext.restore();\n }\n };\n /**\n * @private\n */\n Selection.prototype.clipSelection = function (page, pageTop) {\n var viewer = this.viewer;\n var width = page.boundingRectangle.width * viewer.zoomFactor;\n var height = page.boundingRectangle.height * viewer.zoomFactor;\n var left = page.boundingRectangle.x;\n viewer.selectionContext.beginPath();\n viewer.selectionContext.save();\n viewer.selectionContext.rect(left - viewer.containerLeft, pageTop - viewer.containerTop, width, height);\n viewer.selectionContext.clip();\n };\n /**\n * Add selection highlight\n * @private\n */\n Selection.prototype.addSelectionHighlight = function (canvasContext, widget, top) {\n if (this.selectedWidgets.containsKey(widget)) {\n var height = this.viewer.render.getScaledValue(widget.height);\n var widgetInfo = this.selectedWidgets.get(widget);\n var width = this.viewer.render.getScaledValue(widgetInfo.width);\n var left = this.viewer.render.getScaledValue(widgetInfo.left, 1);\n canvasContext.fillStyle = 'gray';\n var page = this.owner.selection.getPage(widget.paragraph);\n this.owner.selection.clipSelection(page, this.owner.selection.getPageTop(page));\n canvasContext.fillRect(left, this.viewer.render.getScaledValue(top, 2), width, height);\n canvasContext.restore();\n }\n };\n /**\n * Add Selection highlight inside table\n * @private\n */\n Selection.prototype.addSelectionHighlightTable = function (canvasContext, tableCellWidget) {\n if (this.selectedWidgets.containsKey(tableCellWidget)) {\n var selectionWidget = this.selectedWidgets.get(tableCellWidget);\n var left = this.viewer.render.getScaledValue(selectionWidget.left, 1);\n var top_1 = this.viewer.render.getScaledValue(tableCellWidget.y, 2);\n var width = this.viewer.render.getScaledValue(selectionWidget.width);\n var height = this.viewer.render.getScaledValue(tableCellWidget.height);\n canvasContext.fillStyle = 'gray';\n var page = this.owner.selection.getPage(tableCellWidget);\n this.owner.selection.clipSelection(page, this.owner.selection.getPageTop(page));\n canvasContext.fillRect(left, top_1, width, height);\n canvasContext.restore();\n }\n };\n /**\n * Remove Selection highlight\n * @private\n */\n Selection.prototype.removeSelectionHighlight = function (widget) {\n var left = 0;\n var top = 0;\n var width = 0;\n var height = 0;\n var page = undefined;\n if (widget instanceof LineWidget) {\n var lineWidget = widget;\n var currentParaWidget = lineWidget.paragraph;\n page = !isNullOrUndefined(currentParaWidget) ?\n this.getPage((lineWidget.paragraph)) : undefined;\n if (isNullOrUndefined(page)) {\n return;\n }\n top = this.getTop(lineWidget);\n height = lineWidget.height;\n }\n else if (widget instanceof TableCellWidget) {\n page = !isNullOrUndefined(widget) ?\n this.getPage(widget) : undefined;\n if (isNullOrUndefined(page)) {\n return;\n }\n top = widget.y;\n height = widget.height;\n }\n if (isNullOrUndefined(page)) {\n return;\n }\n var widgetInfo = this.selectedWidgets.get(widget);\n width = widgetInfo.width;\n left = widgetInfo.left;\n var pageRect = page.boundingRectangle;\n var pageIndex = this.viewer.pages.indexOf(page);\n var pageGap = this.viewer.pageGap;\n var pageTop = (pageRect.y - pageGap * (pageIndex + 1)) * this.viewer.zoomFactor + pageGap * (pageIndex + 1);\n var pageLeft = pageRect.x;\n var zoomFactor = this.viewer.zoomFactor;\n if (this.viewer.containerTop <= pageTop\n || pageTop < this.viewer.containerTop + this.viewer.selectionCanvas.height) {\n // tslint:disable-next-line:max-line-length\n this.viewer.selectionContext.clearRect((pageLeft + (left * zoomFactor) - this.viewer.containerLeft) - 0.5, (pageTop + (top * zoomFactor)) - this.viewer.containerTop - 0.5, width * zoomFactor + 0.5, height * zoomFactor + 0.5);\n }\n };\n /**\n * Select Current word\n * @private\n */\n Selection.prototype.selectCurrentWord = function () {\n var startPosition = this.start.clone();\n var endPosition = this.end.clone();\n this.selectCurrentWordRange(startPosition, endPosition, false);\n this.selectRange(startPosition, endPosition);\n };\n /**\n * Select current paragraph\n * @private\n */\n Selection.prototype.selectCurrentParagraph = function () {\n if (!isNullOrUndefined(this.start)) {\n this.start.paragraphStartInternal(this, false);\n this.end.moveToParagraphEndInternal(this, false);\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n }\n };\n /**\n * Select current word range\n * @private\n */\n Selection.prototype.selectCurrentWordRange = function (startPosition, endPosition, excludeSpace) {\n if (!isNullOrUndefined(startPosition)) {\n if (startPosition.offset > 0) {\n var wordStart = startPosition.clone();\n var indexInInline = 0;\n var inlineObj = startPosition.currentWidget.getInline(startPosition.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (!isNullOrUndefined(inline) && inline instanceof FieldElementBox && inline.fieldType === 1) {\n // tslint:disable-next-line:max-line-length\n if (startPosition.offset > 2 && (!isNullOrUndefined(inline.fieldSeparator) || isNullOrUndefined(inline.fieldBegin))) {\n wordStart.setPositionParagraph(wordStart.currentWidget, startPosition.offset - 2);\n wordStart.moveToWordEndInternal(0, false);\n if (!(wordStart.paragraph === startPosition.paragraph && wordStart.offset === startPosition.offset - 1)) {\n startPosition.moveToWordStartInternal(2);\n }\n }\n else if (startPosition.offset > 3 && isNullOrUndefined(inline.fieldSeparator)) {\n wordStart.setPositionParagraph(wordStart.currentWidget, startPosition.offset - 3);\n wordStart.moveToWordEndInternal(0, false);\n if (!(wordStart.paragraph === startPosition.paragraph && wordStart.offset === startPosition.offset)) {\n startPosition.moveToWordStartInternal(2);\n }\n }\n }\n else {\n wordStart.setPositionParagraph(wordStart.currentWidget, startPosition.offset - 1);\n wordStart.moveToWordEndInternal(0, false);\n if (!(wordStart.paragraph === startPosition.paragraph && wordStart.offset === startPosition.offset)) {\n startPosition.moveToWordStartInternal(2);\n }\n }\n }\n endPosition.moveToWordEndInternal(2, excludeSpace);\n }\n };\n /**\n * Extend selection to paragraph start\n * @private\n */\n Selection.prototype.extendToParagraphStart = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.end.paragraphStartInternal(this, true);\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Extend selection to paragraph end\n * @private\n */\n Selection.prototype.extendToParagraphEnd = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.end.moveToParagraphEndInternal(this, true);\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Move to next text position\n * @private\n */\n Selection.prototype.moveNextPosition = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n if (this.isEmpty) {\n this.start.moveNextPosition();\n this.end.setPositionInternal(this.start);\n }\n this.updateForwardSelection();\n this.upDownSelectionLength = this.start.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Move to next paragraph\n * @private\n */\n Selection.prototype.moveToNextParagraph = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.end.moveToNextParagraphStartInternal();\n this.start.setPositionInternal(this.end);\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Move to previous text position\n * @private\n */\n Selection.prototype.movePreviousPosition = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n if (this.isEmpty) {\n this.start.movePreviousPosition();\n this.end.setPositionInternal(this.start);\n }\n this.updateBackwardSelection();\n this.upDownSelectionLength = this.start.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Move to previous paragraph\n * @private\n */\n Selection.prototype.moveToPreviousParagraph = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.end.moveToPreviousParagraph(this);\n this.start.setPositionInternal(this.end);\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Extend selection to previous line\n * @private\n */\n Selection.prototype.extendToPreviousLine = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.end.moveToPreviousLine(this, this.upDownSelectionLength);\n this.fireSelectionChanged(true);\n };\n /**\n * Extend selection to line end\n * @private\n */\n Selection.prototype.extendToLineEnd = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.end.moveToLineEndInternal(this, true);\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Extend to line start\n * @private\n */\n Selection.prototype.extendToLineStart = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.end.moveToLineStartInternal(this, true);\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * @private\n */\n Selection.prototype.moveUp = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n if (!this.isEmpty) {\n if (this.isForward) {\n this.end.setPositionInternal(this.start);\n }\n else {\n this.start.setPositionInternal(this.end);\n }\n this.upDownSelectionLength = this.start.location.x;\n }\n this.upDownSelectionLength = this.start.location.x;\n this.start.moveUp(this, this.upDownSelectionLength);\n this.end.setPositionInternal(this.start);\n this.fireSelectionChanged(true);\n };\n /**\n * @private\n */\n Selection.prototype.moveDown = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n if (!this.isEmpty) {\n if (this.isForward) {\n this.start.setPositionInternal(this.end);\n }\n else {\n this.end.setPositionInternal(this.start);\n }\n this.upDownSelectionLength = this.start.location.x;\n }\n this.start.moveDown(this, this.upDownSelectionLength);\n this.end.setPositionInternal(this.start);\n this.fireSelectionChanged(true);\n };\n Selection.prototype.updateForwardSelection = function () {\n if (!this.isEmpty) {\n if (this.isForward) {\n this.start.setPositionInternal(this.end);\n }\n else {\n this.end.setPositionInternal(this.start);\n }\n }\n };\n Selection.prototype.updateBackwardSelection = function () {\n if (!this.isEmpty) {\n if (this.isForward) {\n this.end.setPositionInternal(this.start);\n }\n else {\n this.start.setPositionInternal(this.end);\n }\n }\n };\n /**\n * @private\n */\n Selection.prototype.getFirstBlockInFirstCell = function (table) {\n if (table.childWidgets.length > 0) {\n var firstrow = table.childWidgets[0];\n if (firstrow.childWidgets.length > 0) {\n var firstcell = firstrow.childWidgets[0];\n if (firstcell.childWidgets.length === 0) {\n return undefined;\n }\n return firstcell.childWidgets[0];\n }\n }\n return undefined;\n };\n /**\n * @private\n */\n // tslint:disable-next-line:max-line-length\n Selection.prototype.getFirstCellInRegion = function (row, startCell, selectionLength, isMovePrevious) {\n var cellStart = this.getCellLeft(row, startCell);\n var cellEnd = cellStart + startCell.cellFormat.cellWidth;\n var flag = true;\n if (cellStart <= selectionLength && selectionLength < cellEnd) {\n for (var k = 0; k < row.childWidgets.length; k++) {\n var left = this.getCellLeft(row, row.childWidgets[k]);\n if (HelperMethods.round(cellStart, 2) <= HelperMethods.round(left, 2) &&\n HelperMethods.round(left, 2) < HelperMethods.round(cellEnd, 2)) {\n flag = false;\n return row.childWidgets[k];\n }\n }\n }\n else {\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cellLeft = this.getCellLeft(row, row.childWidgets[j]);\n if (cellLeft <= selectionLength && cellLeft +\n row.childWidgets[j].cellFormat.cellWidth > selectionLength) {\n flag = false;\n return row.childWidgets[j];\n }\n }\n }\n if (flag) {\n if (!isNullOrUndefined(row.previousRenderedWidget) && isMovePrevious) {\n var previousWidget = row.previousRenderedWidget;\n return this.getFirstCellInRegion(previousWidget, startCell, selectionLength, isMovePrevious);\n }\n else if (!isNullOrUndefined(row.nextRenderedWidget) && !isMovePrevious) {\n return this.getFirstCellInRegion(row.nextRenderedWidget, startCell, selectionLength, isMovePrevious);\n }\n }\n return row.childWidgets[0];\n };\n /**\n * @private\n */\n Selection.prototype.getFirstParagraph = function (tableCell) {\n while (tableCell.previousSplitWidget) {\n tableCell = tableCell.previousSplitWidget;\n }\n var firstBlock = tableCell.firstChild;\n return this.getFirstParagraphBlock(firstBlock);\n };\n /**\n * Get last block in last cell\n * @private\n */\n //Table\n Selection.prototype.getLastBlockInLastCell = function (table) {\n if (table.childWidgets.length > 0) {\n var lastrow = table.childWidgets[table.childWidgets.length - 1];\n var lastcell = lastrow.childWidgets[lastrow.childWidgets.length - 1];\n return lastcell.childWidgets[lastcell.childWidgets.length - 1];\n }\n return undefined;\n };\n /**\n * Move to line start\n * @private\n */\n Selection.prototype.moveToLineStart = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.updateBackwardSelection();\n this.start.moveToLineStartInternal(this, false);\n this.end.setPositionInternal(this.start);\n this.upDownSelectionLength = this.start.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Move to line end\n * @private\n */\n Selection.prototype.moveToLineEnd = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.updateForwardSelection();\n this.start.moveToLineEndInternal(this, false);\n this.end.setPositionInternal(this.start);\n this.upDownSelectionLength = this.start.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Get Page top\n * @private\n */\n Selection.prototype.getPageTop = function (page) {\n // tslint:disable-next-line:max-line-length\n return (page.boundingRectangle.y - this.viewer.pageGap * (this.viewer.pages.indexOf(page) + 1)) * this.viewer.zoomFactor + this.viewer.pageGap * (this.viewer.pages.indexOf(page) + 1);\n };\n /**\n * Move text position to cursor point\n * @private\n */\n Selection.prototype.moveTextPosition = function (cursorPoint, textPosition) {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n //Updates the text position based on the cursor position.\n var widget = this.viewer.getLineWidgetInternal(cursorPoint, true);\n if (!isNullOrUndefined(widget)) {\n this.updateTextPositionWidget(widget, cursorPoint, textPosition, true);\n }\n this.upDownSelectionLength = textPosition.location.x;\n var selectionStartIndex = this.start.getHierarchicalIndexInternal();\n var selectionEndIndex = this.end.getHierarchicalIndexInternal();\n if (selectionStartIndex !== selectionEndIndex) {\n // Extends selection end to field begin or field end.\n if (TextPosition.isForwardSelection(selectionStartIndex, selectionEndIndex)) {\n textPosition.validateForwardFieldSelection(selectionStartIndex, selectionEndIndex);\n }\n else {\n textPosition.validateBackwardFieldSelection(selectionStartIndex, selectionEndIndex);\n }\n }\n this.fireSelectionChanged(true);\n };\n //Helper Method Implementation \n //Document\n /**\n * Get document start position\n * @private\n */\n Selection.prototype.getDocumentStart = function () {\n var textPosition = undefined;\n var block = this.viewer.pages[0].bodyWidgets[0].childWidgets[0];\n return this.setPositionForBlock(block, true);\n };\n /**\n * Get document end position\n * @private\n */\n Selection.prototype.getDocumentEnd = function () {\n var textPosition = undefined;\n var documentStart = this.owner.documentStart;\n var lastPage = this.viewer.pages[this.viewer.pages.length - 1];\n if (!isNullOrUndefined(documentStart) && lastPage.bodyWidgets[0].childWidgets.length > 0) {\n var block = undefined;\n var section = lastPage.bodyWidgets[0];\n var blocks = section.childWidgets;\n var lastBlkItem = blocks.length - 1;\n var lastBlock = blocks[lastBlkItem];\n if (lastBlock instanceof BlockWidget) {\n block = lastBlock;\n }\n textPosition = this.setPositionForBlock(block, false);\n }\n return textPosition;\n };\n //Keyboard shortcut internal API\n /**\n * @private\n * Handles control end key.\n */\n Selection.prototype.handleControlEndKey = function () {\n var documentEnd = undefined;\n if (!isNullOrUndefined(this.owner.documentEnd)) {\n documentEnd = this.owner.documentEnd;\n }\n if (!isNullOrUndefined(documentEnd)) {\n this.owner.selection.selectContent(documentEnd, true);\n }\n this.checkForCursorVisibility();\n };\n /**\n * @private\n * Handles control home key.\n */\n Selection.prototype.handleControlHomeKey = function () {\n var documentStart = undefined;\n if (!isNullOrUndefined(this.owner.documentStart)) {\n documentStart = this.owner.documentStart;\n }\n if (!isNullOrUndefined(documentStart)) {\n this.owner.selection.selectContent(documentStart, true);\n }\n this.checkForCursorVisibility();\n };\n /**\n * @private\n * Handles control left key.\n */\n Selection.prototype.handleControlLeftKey = function () {\n this.extendToWordStart(true);\n this.checkForCursorVisibility();\n };\n /**\n * @private\n * Handles control right key.\n */\n Selection.prototype.handleControlRightKey = function () {\n this.extendToWordEnd(true);\n this.checkForCursorVisibility();\n };\n /**\n * Handles control down key.\n * @private\n */\n Selection.prototype.handleControlDownKey = function () {\n this.moveToNextParagraph();\n this.checkForCursorVisibility();\n };\n /**\n * Handles control up key.\n * @private\n */\n Selection.prototype.handleControlUpKey = function () {\n this.moveToPreviousParagraph();\n this.checkForCursorVisibility();\n };\n /**\n * @private\n * Handles shift left key.\n */\n Selection.prototype.handleShiftLeftKey = function () {\n this.extendBackward();\n this.checkForCursorVisibility();\n };\n /**\n * Handles shift up key.\n * @private\n */\n Selection.prototype.handleShiftUpKey = function () {\n this.extendToPreviousLine();\n this.checkForCursorVisibility();\n };\n /**\n * Handles shift right key.\n * @private\n */\n Selection.prototype.handleShiftRightKey = function () {\n this.extendForward();\n this.checkForCursorVisibility();\n };\n /**\n * Handles shift down key.\n * @private\n */\n Selection.prototype.handleShiftDownKey = function () {\n this.extendToNextLine();\n this.checkForCursorVisibility();\n };\n /**\n * @private\n * Handles control shift left key.\n */\n Selection.prototype.handleControlShiftLeftKey = function () {\n this.extendToWordStart(false);\n this.checkForCursorVisibility();\n };\n /**\n * Handles control shift up key.\n * @private\n */\n Selection.prototype.handleControlShiftUpKey = function () {\n this.extendToParagraphStart();\n this.checkForCursorVisibility();\n };\n /**\n * Handles control shift right key\n * @private\n */\n Selection.prototype.handleControlShiftRightKey = function () {\n this.extendToWordEnd(false);\n this.checkForCursorVisibility();\n };\n /**\n * Handles control shift down key.\n * @private\n */\n Selection.prototype.handleControlShiftDownKey = function () {\n this.extendToParagraphEnd();\n this.checkForCursorVisibility();\n };\n /**\n * Handles left key.\n * @private\n */\n Selection.prototype.handleLeftKey = function () {\n this.movePreviousPosition();\n this.checkForCursorVisibility();\n };\n /**\n * Handles up key.\n * @private\n */\n Selection.prototype.handleUpKey = function () {\n this.isMoveDownOrMoveUp = true;\n this.moveUp();\n this.isMoveDownOrMoveUp = false;\n this.checkForCursorVisibility();\n };\n /**\n * Handles right key.\n * @private\n */\n Selection.prototype.handleRightKey = function () {\n this.moveNextPosition();\n this.checkForCursorVisibility();\n };\n /**\n * Handles end key.\n * @private\n */\n Selection.prototype.handleEndKey = function () {\n this.moveToLineEnd();\n this.checkForCursorVisibility();\n };\n /**\n * Handles home key.\n * @private\n */\n Selection.prototype.handleHomeKey = function () {\n this.moveToLineStart();\n this.checkForCursorVisibility();\n };\n /**\n * Handles down key.\n * @private\n */\n Selection.prototype.handleDownKey = function () {\n this.isMoveDownOrMoveUp = true;\n this.moveDown();\n this.isMoveDownOrMoveUp = false;\n this.checkForCursorVisibility();\n };\n /**\n * Handles shift end key.\n * @private\n */\n Selection.prototype.handleShiftEndKey = function () {\n this.extendToLineEnd();\n this.checkForCursorVisibility();\n };\n /**\n * Handles shift home key.\n * @private\n */\n Selection.prototype.handleShiftHomeKey = function () {\n this.extendToLineStart();\n this.checkForCursorVisibility();\n };\n /**\n * Handles control shift end key.\n * @private\n */\n Selection.prototype.handleControlShiftEndKey = function () {\n var documentEnd = undefined;\n if (!isNullOrUndefined(this.owner.documentEnd)) {\n documentEnd = this.owner.documentEnd;\n }\n if (!isNullOrUndefined(documentEnd)) {\n this.end.setPosition(documentEnd.currentWidget, false);\n this.fireSelectionChanged(true);\n }\n this.checkForCursorVisibility();\n };\n /**\n * Handles control shift home key.\n * @private\n */\n Selection.prototype.handleControlShiftHomeKey = function () {\n var documentStart = undefined;\n if (!isNullOrUndefined(this.owner.documentStart)) {\n documentStart = this.owner.documentStart;\n }\n if (!isNullOrUndefined(documentStart)) {\n this.end.setPositionInternal(documentStart);\n this.fireSelectionChanged(true);\n }\n this.checkForCursorVisibility();\n };\n /**\n * Handles tab key.\n * @param isNavigateInCell\n * @param isShiftTab\n * @private\n */\n Selection.prototype.handleTabKey = function (isNavigateInCell, isShiftTab) {\n var start = this.start;\n if (isNullOrUndefined(start)) {\n return;\n }\n if (start.paragraph.isInsideTable && this.end.paragraph.isInsideTable && (isNavigateInCell || isShiftTab)) {\n //Perform tab navigation\n if (isShiftTab) {\n this.selectPreviousCell();\n }\n else {\n this.selectNextCell();\n }\n }\n else if ((isNavigateInCell || isShiftTab) && !isNullOrUndefined(start) && start.offset === this.getStartOffset(start.paragraph)\n && !isNullOrUndefined(start.paragraph.paragraphFormat) && !isNullOrUndefined(start.paragraph.paragraphFormat.listFormat)\n && start.paragraph.paragraphFormat.listFormat.listId !== -1 && !this.owner.isReadOnlyMode) {\n this.owner.editorModule.updateListLevel(isShiftTab ? false : true);\n }\n else if (!this.owner.isReadOnlyMode) {\n this.owner.editorModule.handleTextInput('\\t');\n }\n this.checkForCursorVisibility();\n };\n Selection.prototype.selectPreviousCell = function () {\n var tableCell = this.start.paragraph.associatedCell;\n var tableRow = tableCell.ownerRow;\n var tableAdv = tableRow.ownerTable;\n if (isNullOrUndefined(tableCell.previousWidget)) {\n if (!isNullOrUndefined(tableRow.previousRenderedWidget)) {\n //Move text selection or cursor to previous row's last cell\n var prevRow = undefined;\n if (tableRow.previousRenderedWidget instanceof TableRowWidget) {\n prevRow = tableRow.previousRenderedWidget;\n }\n this.selectTableCellInternal(prevRow.childWidgets[prevRow.childWidgets.length - 1], true);\n }\n }\n else {\n //Move text selection or cursor to next cell in current row\n var prevCell = undefined;\n if (tableCell.previousWidget instanceof TableCellWidget) {\n prevCell = tableCell.previousWidget;\n }\n this.selectTableCellInternal(prevCell, true);\n }\n };\n Selection.prototype.selectNextCell = function () {\n var tableCell = this.start.paragraph.associatedCell;\n var tableRow = tableCell.ownerRow;\n var tableAdv = tableRow.ownerTable;\n if (isNullOrUndefined(tableCell.nextWidget)) {\n if (isNullOrUndefined(tableRow.nextRenderedWidget) && !this.owner.isReadOnlyMode) {\n //Insert new row below \n this.owner.editorModule.insertRow(false);\n }\n else {\n //Move text selection or cursor to next row's first cell\n var nextRow = undefined;\n if (tableRow.nextRenderedWidget instanceof TableRowWidget) {\n nextRow = tableRow.nextRenderedWidget;\n }\n this.selectTableCellInternal(nextRow.childWidgets[0], true);\n }\n // }\n }\n else {\n //Move text selection or cursor to next cell in current row\n var nextCell = undefined;\n if (tableCell.nextRenderedWidget instanceof TableCellWidget) {\n nextCell = tableCell.nextRenderedWidget;\n }\n this.selectTableCellInternal(nextCell, true);\n }\n };\n /**\n * Select given table cell\n * @private\n */\n Selection.prototype.selectTableCellInternal = function (tableCell, clearMultiSelection) {\n var firstParagraph = this.getFirstParagraph(tableCell);\n var lastParagraph = this.getLastParagraph(tableCell);\n if (firstParagraph === lastParagraph && lastParagraph.isEmpty()) {\n this.selectParagraph(lastParagraph, true);\n }\n else {\n var firstLineWidget = lastParagraph.childWidgets[0];\n this.start.setPosition(firstParagraph.childWidgets[0], true);\n this.end.setPositionParagraph(firstLineWidget, firstLineWidget.getEndOffset());\n this.fireSelectionChanged(true);\n }\n };\n /**\n * Select while table\n * @private\n */\n Selection.prototype.selectTableInternal = function () {\n var start = this.start;\n var end = this.end;\n if (!this.isForward) {\n start = this.end;\n end = this.start;\n }\n if (!isNullOrUndefined(start) && !isNullOrUndefined(end) && !isNullOrUndefined(this.getTable(start, end))) {\n var containerCell = this.getContainerCellOf(start.paragraph.associatedCell, end.paragraph.associatedCell);\n var table = containerCell.ownerTable;\n var firstPara = this.getFirstParagraphBlock(table);\n var lastPara = this.getLastParagraphBlock(table);\n var offset = lastPara.lastChild.getEndOffset();\n this.start.setPosition(firstPara.childWidgets[0], true);\n this.end.setPositionParagraph(lastPara.lastChild, offset + 1);\n }\n this.selectPosition(this.start, this.end);\n };\n /**\n * Select single column\n * @private\n */\n Selection.prototype.selectColumnInternal = function () {\n var startTextPos = this.start;\n var endTextPos = this.end;\n if (!this.isForward) {\n startTextPos = this.end;\n endTextPos = this.start;\n }\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(startTextPos) && !isNullOrUndefined(endTextPos) && !isNullOrUndefined(this.getTable(startTextPos, endTextPos))) {\n var containerCell = this.getContainerCellOf(startTextPos.paragraph.associatedCell, endTextPos.paragraph.associatedCell);\n if (containerCell.ownerTable.contains(endTextPos.paragraph.associatedCell)) {\n var startCell = this.getSelectedCell(startTextPos.paragraph.associatedCell, containerCell);\n var endCell = this.getSelectedCell(endTextPos.paragraph.associatedCell, containerCell);\n if (this.containsCell(containerCell, endTextPos.paragraph.associatedCell)) {\n var row = startCell.ownerRow;\n var columnCells = containerCell.ownerTable.getColumnCellsForSelection(containerCell, containerCell);\n if (columnCells.length > 0) {\n var firstPara = this.getFirstParagraph(columnCells[0]);\n var lastPara = this.getLastParagraph(columnCells[columnCells.length - 1]);\n this.start.setPosition(firstPara.firstChild, true);\n var lastLine = lastPara.lastChild;\n this.end.setPositionParagraph(lastLine, lastLine.getEndOffset() + 1);\n }\n }\n else {\n var startCellColumnCells = containerCell.ownerTable.getColumnCellsForSelection(startCell, startCell);\n var endCellColumnCells = containerCell.ownerTable.getColumnCellsForSelection(endCell, endCell);\n if (startCellColumnCells.length > 0 && endCellColumnCells.length > 0) {\n var firstPara = this.getFirstParagraph(startCellColumnCells[0]);\n // tslint:disable-next-line:max-line-length\n var lastPara = this.getLastParagraph(endCellColumnCells[endCellColumnCells.length - 1]);\n this.start.setPosition(firstPara.firstChild, true);\n var lastLine = lastPara.lastChild;\n this.end.setPositionParagraph(lastLine, lastLine.getEndOffset() + 1);\n }\n }\n }\n }\n this.selectPosition(this.start, this.end);\n };\n /**\n * Select single row\n * @private\n */\n Selection.prototype.selectTableRow = function () {\n var startPos = this.start;\n var endPos = this.end;\n if (!this.isForward) {\n startPos = this.end;\n endPos = this.start;\n }\n if (!isNullOrUndefined(startPos) && !isNullOrUndefined(endPos) && !isNullOrUndefined(this.getTable(startPos, endPos))) {\n var containerCell = void 0;\n containerCell = this.getContainerCellOf(startPos.paragraph.associatedCell, endPos.paragraph.associatedCell);\n if (containerCell.ownerTable.contains(endPos.paragraph.associatedCell)) {\n var startCell = this.getSelectedCell(startPos.paragraph.associatedCell, containerCell);\n var endCell = this.getSelectedCell(endPos.paragraph.associatedCell, containerCell);\n if (this.containsCell(containerCell, endPos.paragraph.associatedCell)) {\n var row = startCell.ownerRow;\n var firstPara = this.getFirstParagraph(row.childWidgets[0]);\n var lastPara = this.getLastParagraph(row.childWidgets[row.childWidgets.length - 1]);\n this.start.setPosition(firstPara.firstChild, true);\n this.end.setPositionParagraph(lastPara.lastChild, lastPara.lastChild.getEndOffset() + 1);\n }\n else {\n var firstPara = this.getFirstParagraph(startCell.ownerRow.childWidgets[0]);\n var lastPara = void 0;\n // tslint:disable-next-line:max-line-length\n lastPara = this.getLastParagraph(endCell.ownerRow.childWidgets[endCell.ownerRow.childWidgets.length - 1]);\n this.start.setPosition(firstPara.firstChild, true);\n this.end.setPositionParagraph(lastPara.lastChild, lastPara.lastChild.getEndOffset() + 1);\n }\n }\n }\n this.selectPosition(this.start, this.end);\n };\n /**\n * Select single cell\n * @private\n */\n Selection.prototype.selectTableCell = function () {\n var start = this.start;\n var end = this.end;\n if (!this.isForward) {\n start = this.end;\n end = this.start;\n }\n if (isNullOrUndefined(this.getTable(start, end))) {\n return;\n }\n if (this.isEmpty) {\n if (start.paragraph.isInsideTable && !isNullOrUndefined(start.paragraph.associatedCell)) {\n var firstPara = this.getFirstParagraph(start.paragraph.associatedCell);\n var lastPara = this.getLastParagraph(end.paragraph.associatedCell);\n if (firstPara === lastPara) {\n this.start.setPosition(lastPara.firstChild, true);\n this.end.setPositionParagraph(lastPara.lastChild, lastPara.lastChild.getEndOffset() + 1);\n }\n else {\n this.start.setPosition(firstPara.firstChild, true);\n this.end.setPositionParagraph(lastPara.lastChild, lastPara.lastChild.getEndOffset() + 1);\n }\n }\n }\n else {\n var containerCell = this.getContainerCell(start.paragraph.associatedCell);\n // tslint:disable-next-line:max-line-length\n if (this.containsCell(containerCell, start.paragraph.associatedCell) && this.containsCell(containerCell, end.paragraph.associatedCell)) {\n var firstPara = this.getFirstParagraph(containerCell);\n var lastPara = this.getLastParagraph(containerCell);\n if (!isNullOrUndefined(firstPara) && !isNullOrUndefined(lastPara)) {\n this.start.setPosition(firstPara.firstChild, true);\n this.end.setPositionParagraph(lastPara.lastChild, lastPara.lastChild.getEndOffset() + 1);\n }\n }\n }\n this.selectPosition(this.start, this.end);\n };\n /**\n * @private\n * Selects the entire document.\n */\n Selection.prototype.selectAll = function () {\n var documentStart;\n var documentEnd;\n if (this.owner.enableHeaderAndFooter) {\n var headerFooter = this.getContainerWidget(this.start.paragraph);\n documentStart = this.setPositionForBlock(headerFooter.firstChild, true);\n documentEnd = this.setPositionForBlock(headerFooter.lastChild, false);\n }\n else {\n documentStart = this.owner.documentStart;\n documentEnd = this.owner.documentEnd;\n }\n //Selects the entire document. \n if (!isNullOrUndefined(documentStart)) {\n this.start.setPositionInternal(documentStart);\n this.end.setPositionParagraph(documentEnd.currentWidget, documentEnd.offset + 1);\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n }\n };\n /**\n * Extend selection backward\n * @private\n */\n Selection.prototype.extendBackward = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.end.moveBackward();\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Extent selection forward\n * @private\n */\n Selection.prototype.extendForward = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.end.moveForward();\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Extend selection to word start and end\n * @private\n */\n Selection.prototype.extendToWordStartEnd = function () {\n if ((this.start.paragraph.isInsideTable || this.end.paragraph.isInsideTable)\n && (this.start.paragraph.associatedCell !== this.end.paragraph.associatedCell\n || this.isCellSelected(this.start.paragraph.associatedCell, this.start, this.end))) {\n return true;\n }\n return false;\n };\n /**\n * Extend selection to word start\n * @private\n */\n Selection.prototype.extendToWordStart = function (isNavigation) {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n var isCellSelected = this.extendToWordStartEnd();\n if (isCellSelected) {\n this.end.moveToPreviousParagraphInTable(this);\n }\n else {\n this.end.moveToWordStartInternal(isNavigation ? 0 : 1);\n }\n if (isNavigation) {\n this.start.setPositionInternal(this.end);\n }\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Extent selection to word end\n * @private\n */\n Selection.prototype.extendToWordEnd = function (isNavigation) {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n var isCellSelect = this.extendToWordStartEnd();\n if (isCellSelect) {\n this.end.moveToNextParagraphInTable();\n }\n else {\n this.end.moveToWordEndInternal(isNavigation ? 0 : 1, false);\n }\n if (isNavigation) {\n this.start.setPositionInternal(this.end);\n }\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Extend selection to next line\n * @private\n */\n Selection.prototype.extendToNextLine = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.end.moveToNextLine(this.upDownSelectionLength);\n this.fireSelectionChanged(true);\n };\n //Selection Text get API\n //Selection add, Highlight, remove API enda\n Selection.prototype.getTextPosition = function (hierarchicalIndex) {\n var textPosition = new TextPosition(this.owner);\n textPosition.setPositionForCurrentIndex(hierarchicalIndex);\n return textPosition;\n };\n /**\n * Get Selected text\n * @private\n */\n Selection.prototype.getText = function (includeObject) {\n if (isNullOrUndefined(this.start) || isNullOrUndefined(this.end)\n || isNullOrUndefined(this.start.paragraph) || isNullOrUndefined(this.end.paragraph)) {\n return undefined;\n }\n var startPosition = this.start;\n var endPosition = this.end;\n if (startPosition.isAtSamePosition(endPosition)) {\n return '';\n }\n return this.getTextInternal(startPosition, endPosition, includeObject);\n };\n /**\n * Get selected text\n * @private\n */\n Selection.prototype.getTextInternal = function (start, end, includeObject) {\n if (start.isExistAfter(end)) {\n var temp = end;\n end = start;\n start = temp;\n }\n var startPosition = start;\n var endPosition = end;\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(start) && !isNullOrUndefined(end) && !isNullOrUndefined(start.paragraph) && !isNullOrUndefined(end.paragraph)) {\n var startIndex = 0;\n var endIndex = 0;\n var startOffset = start.offset;\n var endOffset = end.offset;\n var startInlineObj = start.currentWidget.getInline(startOffset, startIndex);\n startIndex = startInlineObj.index;\n var inline = startInlineObj.element;\n // If the start position is at the beginning of field begin that has field end, then field code should be skipped.\n if (inline instanceof FieldElementBox && !isNullOrUndefined(inline.fieldEnd)) {\n var elementInfo = this.getRenderedInline(inline, startIndex);\n inline = elementInfo.element;\n startIndex = elementInfo.index;\n }\n var endInlineObj = end.currentWidget.getInline(endOffset, endIndex);\n var endInline = endInlineObj.element;\n endIndex = endInlineObj.index;\n var text = '';\n // Retrieves the text from start inline.\n if (inline instanceof ImageElementBox && includeObject && startIndex === 0) {\n text = ElementBox.objectCharacter;\n }\n else if (inline instanceof TextElementBox) {\n // tslint:disable-next-line:max-line-length\n text = ((isNullOrUndefined(inline.text)) || (inline.text) === '') || inline.text.length < startIndex ? text : inline.text.substring(startIndex);\n }\n if (startPosition.paragraph === endPosition.paragraph) {\n if (inline instanceof ElementBox) {\n if (inline === endInline && inline instanceof TextElementBox) {\n text = text.length < endIndex - startIndex ? text : text.substring(0, endIndex - startIndex);\n }\n else if (inline.nextNode instanceof ElementBox) {\n // tslint:disable-next-line:max-line-length\n text = text + this.getTextInline(inline.nextNode, endPosition.paragraph, endInline, endIndex, includeObject);\n }\n }\n }\n else {\n if (inline instanceof ElementBox && inline.nextNode instanceof ElementBox) {\n text = text + this.getTextInline(inline.nextNode, endPosition.paragraph, undefined, 0, includeObject);\n }\n else {\n // tslint:disable-next-line:max-line-length\n var nextParagraphWidget = this.viewer.selection.getNextParagraphBlock(startPosition.paragraph);\n text = text + '\\r';\n while (!isNullOrUndefined(nextParagraphWidget) && nextParagraphWidget.isEmpty()) {\n text = text + '\\r';\n if (nextParagraphWidget === endPosition.paragraph) {\n return text;\n }\n nextParagraphWidget = this.viewer.selection.getNextParagraphBlock(nextParagraphWidget);\n }\n if (!isNullOrUndefined(nextParagraphWidget) && !nextParagraphWidget.isEmpty()) {\n // tslint:disable-next-line:max-line-length\n text = text + this.getTextInline(nextParagraphWidget.childWidgets[0].children[0], endPosition.paragraph, endInline, endIndex, includeObject);\n }\n }\n }\n // If the selection includes end paragraph mark.\n if (endOffset === (endPosition.currentWidget).getEndOffset() + 1) {\n text = text + '\\r';\n }\n return text;\n }\n return undefined;\n };\n /**\n * @private\n */\n // tslint:disable-next-line:max-line-length\n Selection.prototype.getTextInline = function (inlineElement, endParagraphWidget, endInline, endIndex, includeObject) {\n var text = '';\n do {\n if (inlineElement === endInline) {\n if (inlineElement instanceof TextElementBox) {\n var span = inlineElement;\n if (!(isNullOrUndefined(span.text) || span.text === '')) {\n if (span.text.length < endIndex) {\n text = text + span.text;\n }\n else {\n text = text + span.text.substring(0, endIndex);\n }\n }\n // tslint:disable-next-line:max-line-length\n }\n else if (inlineElement instanceof ImageElementBox && includeObject && endIndex === inlineElement.length) {\n text = text + ElementBox.objectCharacter;\n }\n return text;\n }\n if (inlineElement instanceof TextElementBox) {\n text = text + inlineElement.text;\n }\n else if (inlineElement instanceof ImageElementBox && includeObject) {\n text = text + ElementBox.objectCharacter;\n }\n else if (inlineElement instanceof FieldElementBox && !isNullOrUndefined(inlineElement.fieldEnd)) {\n if (!isNullOrUndefined(inlineElement.fieldSeparator)) {\n inlineElement = inlineElement.fieldSeparator;\n }\n else {\n inlineElement = inlineElement.fieldEnd;\n }\n }\n if (isNullOrUndefined(inlineElement.nextNode)) {\n break;\n }\n inlineElement = inlineElement.nextNode;\n } while (!isNullOrUndefined(inlineElement));\n if (endParagraphWidget === inlineElement.line.paragraph) {\n return text;\n }\n // tslint:disable-next-line:max-line-length\n var nextParagraphWidget = this.viewer.selection.getNextParagraphBlock(inlineElement.line.paragraph);\n while (!isNullOrUndefined(nextParagraphWidget) && nextParagraphWidget.isEmpty()) {\n text = text + '\\r';\n if (nextParagraphWidget === endParagraphWidget) {\n return text;\n }\n nextParagraphWidget = this.viewer.selection.getNextParagraphBlock(nextParagraphWidget);\n }\n if (!isNullOrUndefined(nextParagraphWidget) && !nextParagraphWidget.isEmpty()) {\n var lineWidget = nextParagraphWidget.childWidgets[0];\n // tslint:disable-next-line:max-line-length\n text = text + '\\r' + this.getTextInline(lineWidget.children[0], endParagraphWidget, endInline, endIndex, includeObject);\n }\n return text;\n };\n /**\n * Returns field code.\n * @private\n * @param fieldBegin\n */\n Selection.prototype.getFieldCode = function (fieldBegin) {\n var fieldCode = '';\n if (!(fieldBegin.fieldEnd instanceof FieldElementBox)) {\n return fieldCode;\n }\n var paragraph = fieldBegin.paragraph;\n var endParagraph = fieldBegin.fieldEnd.paragraph;\n if (fieldBegin.fieldSeparator instanceof FieldElementBox) {\n endParagraph = fieldBegin.fieldSeparator.paragraph;\n }\n var startLineIndex = fieldBegin.line.indexInOwner;\n var startIndex = fieldBegin.indexInOwner;\n do {\n fieldCode += this.getFieldCodeInternal(paragraph, startLineIndex, startIndex);\n if (paragraph === endParagraph) {\n break;\n }\n paragraph = this.getNextParagraphBlock(paragraph);\n startLineIndex = 0;\n startIndex = 0;\n } while (paragraph instanceof ParagraphWidget);\n return fieldCode.trim();\n };\n Selection.prototype.getFieldCodeInternal = function (paragraph, startLineIndex, inlineIndex) {\n var fieldCode = '';\n for (var i = startLineIndex; i < paragraph.childWidgets.length; i++) {\n var line = paragraph.childWidgets[i];\n for (var i_1 = inlineIndex; i_1 < line.children.length; i_1++) {\n var element = line.children[i_1];\n if (element instanceof TextElementBox) {\n fieldCode += element.text;\n }\n if (element instanceof FieldElementBox\n && (element.fieldType === 2 || element.fieldType === 1)) {\n return fieldCode;\n }\n }\n inlineIndex = 0;\n }\n return fieldCode;\n };\n /**\n * @private\n */\n Selection.prototype.getTocFieldInternal = function () {\n var paragraph = this.start.paragraph;\n if (!this.isEmpty && !this.isForward) {\n paragraph = this.end.paragraph;\n }\n while (paragraph instanceof ParagraphWidget && paragraph.childWidgets.length > 0) {\n var line = paragraph.firstChild;\n if (line.children.length > 0) {\n var element = line.children[0];\n var nextElement = element.nextNode;\n if (element instanceof FieldElementBox && element.fieldType === 0 && nextElement instanceof TextElementBox\n && nextElement.text.trim().toLowerCase().indexOf('toc') === 0) {\n return element;\n }\n }\n paragraph = paragraph.previousRenderedWidget;\n }\n return undefined;\n };\n /**\n * Get next paragraph in bodyWidget\n * @private\n */\n Selection.prototype.getNextParagraph = function (section) {\n if (section.nextRenderedWidget instanceof BodyWidget) {\n var block = section.nextRenderedWidget.childWidgets[0];\n return this.getFirstParagraphBlock(block);\n }\n return undefined;\n };\n /**\n * @private\n */\n Selection.prototype.getPreviousParagraph = function (section) {\n if (section.previousRenderedWidget instanceof BodyWidget) {\n var bodyWidget = section.previousRenderedWidget;\n var block = bodyWidget.childWidgets[bodyWidget.childWidgets.length - 1];\n return this.getLastParagraphBlock(block);\n }\n return undefined;\n };\n /**\n * Get first paragraph in cell\n * @private\n */\n Selection.prototype.getFirstParagraphInCell = function (cell) {\n var firstBlock = cell.childWidgets[0];\n if (firstBlock instanceof ParagraphWidget) {\n return firstBlock;\n }\n else {\n return this.getFirstParagraphInFirstCell(firstBlock);\n }\n };\n /**\n * Get first paragraph in first cell\n * @private\n */\n Selection.prototype.getFirstParagraphInFirstCell = function (table) {\n if (table.childWidgets.length > 0) {\n var firstRow = table.childWidgets[0];\n var cell = firstRow.childWidgets[0];\n var block = cell.childWidgets[0];\n return this.getFirstParagraphBlock(block);\n }\n return undefined;\n };\n /**\n * Get last paragraph in last cell\n * @private\n */\n Selection.prototype.getLastParagraphInLastCell = function (table) {\n if (table.childWidgets.length > 0) {\n var lastrow = table.lastChild;\n var lastcell = lastrow.lastChild;\n var lastBlock = lastcell.lastChild;\n return this.getLastParagraphBlock(lastBlock);\n }\n return undefined;\n };\n /**\n * Get last paragraph in first row\n * @private\n */\n Selection.prototype.getLastParagraphInFirstRow = function (table) {\n if (table.childWidgets.length > 0) {\n var row = table.firstChild;\n var lastcell = row.lastChild;\n var lastBlock = lastcell.lastChild;\n return this.getLastParagraphBlock(lastBlock);\n }\n return undefined;\n };\n /**\n * Get Next start inline\n * @private\n */\n Selection.prototype.getNextStartInline = function (line, offset) {\n var indexInInline = 0;\n var inlineObj = line.getInline(offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (!isNullOrUndefined(inline) && indexInInline === inline.length && inline.nextNode instanceof FieldElementBox) {\n var nextValidInline = this.getNextValidElement(inline.nextNode);\n if (nextValidInline instanceof FieldElementBox && nextValidInline.fieldType === 0) {\n inline = nextValidInline;\n }\n }\n return inline;\n };\n /**\n * Get previous text inline\n * @private\n */\n Selection.prototype.getPreviousTextInline = function (inline) {\n if (inline.previousNode instanceof TextElementBox) {\n return inline.previousNode;\n }\n if (inline.previousNode instanceof FieldElementBox && HelperMethods.isLinkedFieldCharacter(inline.previousNode)) {\n if (inline.previousNode.fieldType === 0 || inline.previousNode.fieldType === 1) {\n return inline.previousNode;\n }\n return inline.previousNode.fieldBegin;\n }\n if (!isNullOrUndefined(inline.previousNode)) {\n return this.getPreviousTextInline((inline.previousNode));\n }\n return undefined;\n };\n /**\n * Get next text inline\n * @private\n */\n Selection.prototype.getNextTextInline = function (inline) {\n if (inline.nextNode instanceof TextElementBox) {\n return inline.nextNode;\n }\n if (inline.nextNode instanceof FieldElementBox && (HelperMethods.isLinkedFieldCharacter(inline.nextNode))) {\n if (inline.nextNode.fieldType === 1 || inline.nextNode.fieldType === 0) {\n return inline.nextNode;\n }\n return inline.nextNode.fieldEnd;\n }\n if (!isNullOrUndefined(inline.nextNode)) {\n return this.getNextTextInline((inline.nextNode));\n }\n return undefined;\n };\n /**\n * Get container table\n * @private\n */\n Selection.prototype.getContainerTable = function (block) {\n if (block.isInsideTable) {\n if (block.associatedCell.ownerTable.isInsideTable) {\n block = this.getContainerTable(block.associatedCell.ownerTable);\n }\n else {\n block = block.associatedCell.ownerTable;\n }\n }\n if (block instanceof TableWidget) {\n return block;\n }\n return undefined;\n };\n /**\n * @private\n */\n Selection.prototype.isExistBefore = function (start, block) {\n if (start.isInsideTable) {\n var cell1 = start.associatedCell;\n if (block.isInsideTable) {\n var cell2 = block.associatedCell;\n if (cell1 === cell2) {\n return cell1.childWidgets.indexOf(start) < cell1.childWidgets.indexOf(block);\n }\n if (cell1.ownerRow === cell2.ownerRow) {\n return cell1.cellIndex < cell2.cellIndex;\n }\n if (cell1.ownerTable === cell2.ownerTable) {\n return cell1.ownerRow.rowIndex < cell2.ownerRow.rowIndex;\n }\n //Checks if current block exists before the block.\n var containerCell = this.getContainerCellOf(cell1, cell2);\n if (containerCell.ownerTable.contains(cell2)) {\n cell1 = this.getSelectedCell(cell1, containerCell);\n cell2 = this.getSelectedCell(cell2, containerCell);\n if (cell1 === containerCell) {\n return this.isExistBefore(start, cell2.ownerTable);\n }\n if (cell2 === containerCell) {\n return this.isExistBefore(cell1.ownerTable, block);\n }\n if (containerCell.ownerRow === cell2.ownerRow) {\n return containerCell.cellIndex < cell2.cellIndex;\n }\n if (containerCell.ownerTable === cell2.ownerTable) {\n return containerCell.ownerRow.rowIndex < cell2.ownerRow.rowIndex;\n }\n return this.isExistBefore(cell1.ownerTable, cell2.ownerTable);\n }\n return this.isExistBefore(containerCell.ownerTable, this.getContainerTable(cell2.ownerTable));\n }\n else {\n var ownerTable = this.getContainerTable(start);\n return this.isExistBefore(ownerTable, block);\n }\n }\n else if (block.isInsideTable) {\n var ownerTable = this.getContainerTable(block);\n return this.isExistBefore(start, ownerTable);\n }\n else {\n {\n if (start.containerWidget === block.containerWidget) {\n return start.index <\n block.index;\n }\n if (start.containerWidget instanceof BodyWidget && block.containerWidget instanceof BodyWidget) {\n //Splitted blocks \n var startPage = this.viewer.pages.indexOf(start.containerWidget.page);\n var endPage = this.viewer.pages.indexOf(block.containerWidget.page);\n return startPage < endPage;\n }\n }\n }\n return false;\n };\n /**\n * @private\n */\n Selection.prototype.isExistAfter = function (start, block) {\n if (start.isInsideTable) {\n var cell1 = start.associatedCell;\n //Current paragraph in cell, paragraph in cell\n if (block.isInsideTable) {\n var cell2 = block.associatedCell;\n if (cell1 === cell2) {\n return cell1.childWidgets.indexOf(start) > cell1.childWidgets.indexOf(block);\n }\n if (cell1.ownerRow === cell2.ownerRow) {\n return cell1.cellIndex > cell2.cellIndex;\n }\n if (cell1.ownerTable === cell2.ownerTable) {\n return cell1.ownerRow.rowIndex > cell2.ownerRow.rowIndex;\n }\n //Checks if this block exists before block.\n var containerCell = this.getContainerCellOf(cell1, cell2);\n if (containerCell.ownerTable.contains(cell2)) {\n cell1 = this.getSelectedCell(cell1, containerCell);\n cell2 = this.getSelectedCell(cell2, containerCell);\n if (cell1 === containerCell) {\n return this.isExistAfter(start, cell2.ownerTable);\n }\n if (cell2 === containerCell) {\n return this.isExistAfter(cell1.ownerTable, block);\n }\n if (containerCell.ownerRow === cell2.ownerRow) {\n return containerCell.cellIndex > cell2.cellIndex;\n }\n if (containerCell.ownerTable === cell2.ownerTable) {\n return containerCell.ownerRow.rowIndex > cell2.ownerRow.rowIndex;\n }\n return this.isExistAfter(cell1.ownerTable, cell2.ownerTable);\n }\n return this.isExistAfter(containerCell.ownerTable, this.getContainerTable(cell2.ownerTable));\n }\n else {\n var ownerTable = this.getContainerTable(start);\n return this.isExistAfter(ownerTable, block);\n }\n }\n else if (block.isInsideTable) {\n var ownerTable = this.getContainerTable(block);\n return this.isExistAfter(start, ownerTable);\n }\n else {\n if (start.containerWidget === block.containerWidget) {\n return start.index >\n block.index;\n }\n if (start.containerWidget instanceof BodyWidget && block.containerWidget instanceof BodyWidget) {\n //Splitted blocks \n var startPage = this.viewer.pages.indexOf(start.containerWidget.page);\n var endPage = this.viewer.pages.indexOf(block.containerWidget.page);\n return startPage > endPage;\n }\n // if (start.owner instanceof WHeaderFooter) {\n // return (start.owner as WHeaderFooter).childWidgets.indexOf(start) \n // > (block.owner as WHeaderFooter).childWidgets.indexOf(block);\n // } else if (start.section === block.section && start.section instanceof WSection) {\n // return (start.section as WSection).childWidgets.indexOf(start)\n // > (start.section as WSection).childWidgets.indexOf(block);\n // } else if (start.wordDocument instanceof WordDocument) {\n // tslint:disable-next-line:max-line-length\n // return (start.wordDocument as WordDocument).sections.indexOf(start.section as WSection) > (start.wordDocument as WordDocument).sections.indexOf(block.section as WSection);\n }\n return false;\n };\n /**\n * Return true if current inline in exist before inline\n * @private\n */\n Selection.prototype.isExistBeforeInline = function (currentInline, inline) {\n if (currentInline.line === inline.line) {\n return currentInline.line.children.indexOf(currentInline) <\n inline.line.children.indexOf(inline);\n }\n if (currentInline.line.paragraph === inline.line.paragraph) {\n return currentInline.line.paragraph.childWidgets.indexOf(currentInline.line)\n < inline.line.paragraph.childWidgets.indexOf(inline.line);\n }\n var startParagraph = currentInline.line.paragraph;\n var endParagraph = inline.line.paragraph;\n if (startParagraph.containerWidget === endParagraph.containerWidget) {\n if (startParagraph.isInsideTable) {\n return startParagraph.associatedCell.childWidgets.indexOf(startParagraph) <\n endParagraph.associatedCell.childWidgets.indexOf(endParagraph);\n }\n else if (startParagraph.containerWidget instanceof HeaderFooterWidget) {\n // return ((currentInline.owner as WParagraph).owner as WHeaderFooter).blocks.indexOf(currentInline.owner as WParagraph) <\n // ((inline.owner as WParagraph).owner as WHeaderFooter).blocks.indexOf(inline.owner as WParagraph);\n }\n else {\n return startParagraph.containerWidget.childWidgets.indexOf(startParagraph) <\n endParagraph.containerWidget.childWidgets.indexOf(endParagraph);\n }\n }\n return this.isExistBefore(startParagraph, endParagraph);\n };\n /**\n * Return true id current inline is exist after inline\n * @private\n */\n Selection.prototype.isExistAfterInline = function (currentInline, inline) {\n if (currentInline.line === inline.line) {\n return currentInline.line.children.indexOf(currentInline) >\n inline.line.children.indexOf(inline);\n }\n if (currentInline.line.paragraph === inline.line.paragraph) {\n return currentInline.line.paragraph.childWidgets.indexOf(currentInline.line)\n > inline.line.paragraph.childWidgets.indexOf(inline.line);\n }\n var startParagraph = currentInline.line.paragraph;\n var endParagraph = inline.line.paragraph;\n if (startParagraph.containerWidget === endParagraph.containerWidget) {\n if (startParagraph.isInsideTable) {\n return startParagraph.associatedCell.childWidgets.indexOf(startParagraph) >\n endParagraph.associatedCell.childWidgets.indexOf(endParagraph);\n }\n else if (startParagraph.containerWidget instanceof HeaderFooterWidget) {\n // return ((currentInline.owner as WParagraph).owner as WHeaderFooter).blocks.indexOf(currentInline.owner as WParagraph) <\n // ((inline.owner as WParagraph).owner as WHeaderFooter).blocks.indexOf(inline.owner as WParagraph);\n }\n else {\n return startParagraph.containerWidget.childWidgets.indexOf(startParagraph) >\n endParagraph.containerWidget.childWidgets.indexOf(endParagraph);\n }\n }\n return this.isExistAfter(startParagraph, endParagraph);\n };\n /**\n * Get next rendered block\n * @private\n */\n Selection.prototype.getNextRenderedBlock = function (block) {\n if (isNullOrUndefined(block.nextWidget)) {\n return block.nextRenderedWidget;\n }\n return block.nextWidget;\n };\n /**\n * Get next rendered block\n * @private\n */\n Selection.prototype.getPreviousRenderedBlock = function (block) {\n if (isNullOrUndefined(block.previousWidget)) {\n return block.previousRenderedWidget;\n }\n return block.previousWidget;\n };\n /**\n * Get Next paragraph in block\n * @private\n */\n Selection.prototype.getNextParagraphBlock = function (block) {\n if (block.nextRenderedWidget instanceof ParagraphWidget) {\n return block.nextRenderedWidget;\n }\n else if (block.nextRenderedWidget instanceof TableWidget) {\n return this.getFirstParagraphInFirstCell(block.nextRenderedWidget);\n }\n if (block.containerWidget instanceof TableCellWidget) {\n return this.getNextParagraphCell(block.containerWidget);\n }\n else if (block.containerWidget instanceof BodyWidget) {\n var bodyWidget = block.containerWidget;\n return this.getNextParagraph(block.containerWidget);\n }\n else if (block.containerWidget instanceof HeaderFooterWidget && this.isMoveDownOrMoveUp) {\n return this.getFirstBlockInNextHeaderFooter(block);\n }\n return undefined;\n };\n /**\n * @private\n */\n Selection.prototype.getFirstBlockInNextHeaderFooter = function (block) {\n var headerFooter = block.containerWidget;\n var nextBlock;\n if (headerFooter.headerFooterType.indexOf('Header') !== -1) {\n nextBlock = headerFooter.page.footerWidget.firstChild;\n }\n else if (headerFooter.page.nextPage) {\n nextBlock = headerFooter.page.nextPage.headerWidget.firstChild;\n }\n else {\n return undefined;\n }\n if (nextBlock instanceof ParagraphWidget) {\n return nextBlock;\n }\n else {\n return this.getFirstBlockInFirstCell(nextBlock);\n }\n };\n /**\n * @private\n */\n Selection.prototype.getLastBlockInPreviousHeaderFooter = function (block) {\n var headerFooter = block.containerWidget;\n var previousBlock;\n if (headerFooter.headerFooterType.indexOf('Footer') !== -1) {\n previousBlock = headerFooter.page.headerWidget.lastChild;\n }\n else if (headerFooter.page.previousPage) {\n previousBlock = headerFooter.page.previousPage.footerWidget.lastChild;\n }\n else {\n return undefined;\n }\n if (previousBlock instanceof ParagraphWidget) {\n return previousBlock;\n }\n else {\n return this.getFirstBlockInFirstCell(previousBlock);\n }\n };\n /**\n * Get previous paragraph in block\n * @private\n */\n Selection.prototype.getPreviousParagraphBlock = function (block) {\n if (block.previousRenderedWidget instanceof ParagraphWidget) {\n return block.previousRenderedWidget;\n }\n else if (block.previousRenderedWidget instanceof TableWidget) {\n return this.getLastParagraphInLastCell((block.previousRenderedWidget));\n }\n if (block.containerWidget instanceof TableCellWidget) {\n return this.getPreviousParagraphCell((block.containerWidget));\n }\n else if (block.containerWidget instanceof BodyWidget) {\n return this.getPreviousParagraph(block.containerWidget);\n }\n else if (block.containerWidget instanceof HeaderFooterWidget && this.isMoveDownOrMoveUp) {\n return this.getLastBlockInPreviousHeaderFooter(block);\n }\n return undefined;\n };\n /**\n * Get first paragraph in block\n * @private\n */\n Selection.prototype.getFirstParagraphBlock = function (block) {\n if (block instanceof ParagraphWidget) {\n return block;\n }\n else if (block instanceof TableWidget) {\n return this.getFirstParagraphInFirstCell(block);\n }\n return undefined;\n };\n /**\n * Get last paragraph in block\n * @private\n */\n Selection.prototype.getLastParagraphBlock = function (block) {\n if (block instanceof ParagraphWidget) {\n return block;\n }\n else if (block instanceof TableWidget) {\n return this.getLastParagraphInLastCell(block);\n }\n return undefined;\n };\n /**\n * Return true if paragraph has valid inline\n * @private\n */\n Selection.prototype.hasValidInline = function (paragraph, start, end) {\n var index = paragraph.childWidgets.indexOf(start.line);\n for (var i = index; i < paragraph.childWidgets.length; i++) {\n for (var j = 0; j < paragraph.childWidgets[i].children.length; j++) {\n var inline = paragraph.childWidgets[i].children[j];\n if (inline.length === 0) {\n continue;\n }\n if (inline === end) {\n return false;\n }\n if (inline instanceof TextElementBox || inline instanceof ImageElementBox\n || (inline instanceof FieldElementBox && HelperMethods.isLinkedFieldCharacter(inline))) {\n return true;\n }\n }\n }\n return false;\n };\n /**\n * Get paragraph length\n * @private\n */\n Selection.prototype.getParagraphLength = function (paragraph, endLine, elementInfo) {\n var length = 0;\n for (var j = 0; j < paragraph.childWidgets.length; j++) {\n var line = paragraph.childWidgets[j];\n if (endLine instanceof LineWidget && endLine === line) {\n if (elementInfo) {\n length += this.getLineLength(line, elementInfo);\n }\n break;\n }\n length += this.getLineLength(line);\n }\n return length;\n };\n /**\n * Get Line length\n * @private\n */\n Selection.prototype.getLineLength = function (line, elementInfo) {\n var length = 0;\n for (var i = 0; i < line.children.length; i++) {\n var element = line.children[i];\n if (element instanceof ListTextElementBox) {\n continue;\n }\n if (elementInfo && elementInfo.element instanceof ElementBox && elementInfo.element === element) {\n length += elementInfo.index;\n break;\n }\n length += element.length;\n }\n return length;\n };\n /**\n * Get line information\n * @private\n */\n Selection.prototype.getLineInfo = function (paragraph, offset) {\n var line = undefined;\n var length = 0;\n var childLength = paragraph.childWidgets.length;\n for (var j = 0; j < childLength; j++) {\n line = paragraph.childWidgets[j];\n length = this.getLineLength(line);\n if (offset <= length || j === childLength - 1) {\n break;\n }\n else {\n offset = offset - length;\n }\n }\n return { 'line': line, 'offset': offset };\n };\n /**\n * @private\n */\n Selection.prototype.getElementInfo = function (line, offset) {\n var index = 0;\n var element = undefined;\n for (var i = 0; i < line.children.length; i++) {\n element = line.children[i];\n if (element instanceof ListTextElementBox) {\n continue;\n }\n if (offset > element.length\n && (!(offset === element.length + 1 && isNullOrUndefined(element.nextNode)))) {\n offset = offset - element.length;\n }\n else {\n break;\n }\n }\n return { 'element': element, 'index': offset };\n };\n /**\n * Get paragraph start offset\n * @private\n */\n Selection.prototype.getStartOffset = function (paragraph) {\n var startOffset = 0;\n if (paragraph.childWidgets.length > 0) {\n var childWidgets = paragraph.childWidgets[0];\n return this.getStartLineOffset(childWidgets);\n }\n return startOffset;\n };\n /**\n * @private\n */\n Selection.prototype.getStartLineOffset = function (line) {\n var startOffset = 0;\n for (var i = 0; i < line.children.length; i++) {\n var inline = line.children[i];\n if (inline.length === 0) {\n continue;\n }\n if (inline instanceof TextElementBox || inline instanceof ImageElementBox || inline instanceof BookmarkElementBox\n || (inline instanceof FieldElementBox && HelperMethods.isLinkedFieldCharacter(inline))) {\n return startOffset;\n }\n if (inline instanceof ListTextElementBox) {\n continue;\n }\n startOffset += inline.length;\n }\n return startOffset;\n };\n /**\n * Get previous paragraph from selection\n * @private\n */\n Selection.prototype.getPreviousSelectionCell = function (cell) {\n if (!isNullOrUndefined(cell.previousRenderedWidget)) {\n if (!this.isForward) {\n var block = cell.previousRenderedWidget.childWidgets[0];\n if (block instanceof ParagraphWidget) {\n return block;\n }\n else {\n return this.getFirstParagraphInLastRow(block);\n }\n }\n else {\n var widgets = cell.previousRenderedWidget.childWidgets;\n var block = widgets[widgets.length - 1];\n if (block instanceof ParagraphWidget) {\n return block;\n }\n else {\n // tslint:disable-next-line:max-line-length\n return this.getPreviousParagraphSelection(block.childWidgets[block.childWidgets.length - 1]);\n }\n }\n }\n return this.getPreviousSelectionRow(cell.ownerRow);\n };\n /**\n * Get previous paragraph selection in selection\n * @private\n */\n Selection.prototype.getPreviousSelectionRow = function (row) {\n if (!isNullOrUndefined(row.previousRenderedWidget)) {\n if (!this.isForward) {\n var cell = row.previousRenderedWidget.childWidgets[0];\n var block = cell.childWidgets[0];\n return this.getFirstParagraphBlock(block);\n }\n else {\n return this.getPreviousParagraphSelection(row.previousRenderedWidget);\n }\n }\n return this.getPreviousSelectionBlock(row.ownerTable);\n };\n /**\n * @private\n */\n Selection.prototype.getNextSelectionBlock = function (block) {\n if (block.nextRenderedWidget instanceof ParagraphWidget) {\n return block.nextRenderedWidget;\n }\n else if (block.nextRenderedWidget instanceof TableWidget) {\n if (this.isEmpty || this.isForward) {\n return this.getLastParagraphInFirstRow(block.nextRenderedWidget);\n }\n else {\n return this.getNextParagraphSelection(block.nextRenderedWidget.childWidgets[0]);\n }\n }\n if (block.containerWidget instanceof TableCellWidget) {\n return this.getNextSelectionCell(block.containerWidget);\n }\n else if (block.containerWidget instanceof BodyWidget) {\n return this.getNextSelection(block.containerWidget);\n }\n return undefined;\n };\n /**\n * Get next paragraph from selected cell\n * @private\n */\n Selection.prototype.getNextSelectionCell = function (cell) {\n if (!isNullOrUndefined(cell.nextRenderedWidget)) {\n if (this.isEmpty || this.isForward) {\n // tslint:disable-next-line:max-line-length\n var block = cell.nextRenderedWidget.childWidgets[cell.nextRenderedWidget.childWidgets.length - 1];\n return this.getLastParagraphBlock(block);\n }\n else {\n //Return first paragraph in cell. \n var block = cell.nextRenderedWidget.childWidgets[0];\n if (block instanceof ParagraphWidget) {\n return block;\n }\n else {\n return this.getNextParagraphSelection(block.childWidgets[0]);\n }\n }\n }\n return this.getNextSelectionRow(cell.ownerRow);\n };\n /**\n * Get next paragraph in selection\n * @private\n */\n Selection.prototype.getNextSelectionRow = function (row) {\n if (!isNullOrUndefined(row.nextRenderedWidget)) {\n var isForwardSelection = this.isEmpty || this.isForward;\n if (isForwardSelection) {\n // tslint:disable-next-line:max-line-length\n var cell = row.nextRenderedWidget.childWidgets[row.nextRenderedWidget.childWidgets.length - 1];\n var block = cell.childWidgets[cell.childWidgets.length - 1];\n return this.getLastParagraphBlock(block);\n }\n else {\n return this.getNextParagraphSelection(row.nextRenderedWidget);\n }\n }\n return this.getNextSelectionBlock(row.ownerTable);\n };\n /**\n * Get next block with selection\n * @private\n */\n Selection.prototype.getNextSelection = function (section) {\n if (section.nextRenderedWidget instanceof BodyWidget) {\n var block = section.nextRenderedWidget.childWidgets[0];\n if (block instanceof ParagraphWidget) {\n return block;\n }\n else {\n if (this.isEmpty || this.isForward) {\n return this.getLastParagraphInFirstRow(block);\n }\n else {\n return this.getNextParagraphSelection(block.childWidgets[0]);\n }\n }\n }\n return undefined;\n };\n /**\n * @private\n */\n Selection.prototype.getNextParagraphSelection = function (row) {\n //Iterate the exact cell based on UP/Down selection length.\n var cell = row.childWidgets[0];\n if (this.start.paragraph.isInsideTable\n && row.ownerTable.contains(this.start.paragraph.associatedCell)) {\n var startCell = this.getCellInTable(row.ownerTable, this.start.paragraph.associatedCell);\n cell = this.getFirstCellInRegion(row, startCell, this.upDownSelectionLength, false);\n }\n var block = cell.childWidgets[0];\n return this.getFirstParagraphBlock(block);\n };\n /**\n * @private\n */\n Selection.prototype.getPreviousSelectionBlock = function (block) {\n if (block.previousRenderedWidget instanceof ParagraphWidget) {\n return block.previousRenderedWidget;\n }\n else if (block.previousRenderedWidget instanceof TableWidget) {\n if (!this.isForward) {\n return this.getFirstParagraphInLastRow(block.previousRenderedWidget);\n }\n else {\n // tslint:disable-next-line:max-line-length\n return this.getPreviousParagraphSelection(block.previousRenderedWidget.childWidgets[block.previousRenderedWidget.childWidgets.length - 1]);\n }\n }\n if (block.containerWidget instanceof TableCellWidget) {\n return this.getPreviousSelectionCell(block.containerWidget);\n }\n else if (block.containerWidget instanceof BodyWidget) {\n return this.getPreviousSelection(block.containerWidget);\n }\n return undefined;\n };\n /**\n * Get previous paragraph in selection\n * @private\n */\n Selection.prototype.getPreviousSelection = function (section) {\n if (section.previousRenderedWidget instanceof BodyWidget) {\n var prevBodyWidget = section.previousRenderedWidget;\n var block = prevBodyWidget.childWidgets[prevBodyWidget.childWidgets.length - 1];\n if (block instanceof ParagraphWidget) {\n return block;\n }\n else {\n if (!this.isForward) {\n return this.getFirstParagraphInLastRow(block);\n }\n else {\n var tableWidget = block;\n // tslint:disable-next-line:max-line-length\n return this.getPreviousParagraphSelection(tableWidget.childWidgets[tableWidget.childWidgets.length - 1]);\n }\n }\n }\n return undefined;\n };\n /**\n * @private\n */\n Selection.prototype.getPreviousParagraphSelection = function (row) {\n //Iterate the exact cell based on UP/Down selection length.\n var cell = row.childWidgets[row.childWidgets.length - 1];\n if (this.start.paragraph.isInsideTable\n && row.ownerTable.contains(this.start.paragraph.associatedCell)) {\n var startCell = this.getCellInTable(row.ownerTable, this.start.paragraph.associatedCell);\n cell = this.getLastCellInRegion(row, startCell, this.upDownSelectionLength, true);\n }\n var block = cell.childWidgets[cell.childWidgets.length - 1];\n return this.getLastParagraphBlock(block);\n };\n /**\n * Get last cell in the selected region\n * @private\n */\n Selection.prototype.getLastCellInRegion = function (row, startCell, selLength, isMovePrev) {\n var start = this.getCellLeft(row, startCell);\n var end = start + startCell.cellFormat.cellWidth;\n var flag = true;\n if (start <= selLength && selLength < end) {\n for (var i = row.childWidgets.length - 1; i >= 0; i--) {\n var left = this.getCellLeft(row, row.childWidgets[i]);\n if (HelperMethods.round(start, 2) <= HelperMethods.round(left, 2) &&\n HelperMethods.round(left, 2) < HelperMethods.round(end, 2)) {\n flag = false;\n return row.childWidgets[i];\n }\n }\n }\n else {\n for (var i = row.childWidgets.length - 1; i >= 0; i--) {\n var left = this.getCellLeft(row, row.childWidgets[i]);\n if (left <= selLength && left + row.childWidgets[i].cellFormat.cellWidth > selLength) {\n flag = false;\n return row.childWidgets[i];\n }\n }\n }\n if (flag) {\n if (!isNullOrUndefined(row.previousRenderedWidget) && isMovePrev) {\n return this.getLastCellInRegion(row.previousRenderedWidget, startCell, selLength, isMovePrev);\n }\n else if (!isNullOrUndefined(row.nextRenderedWidget) && !isMovePrev) {\n return this.getLastCellInRegion(row.nextRenderedWidget, startCell, selLength, isMovePrev);\n }\n }\n return row.childWidgets[row.childWidgets.length - 1];\n };\n /**\n * Get Container table\n * @private\n */\n Selection.prototype.getCellInTable = function (table, tableCell) {\n while (tableCell.ownerTable.isInsideTable) {\n if (table.equals(tableCell.ownerTable)) {\n return tableCell;\n }\n tableCell = tableCell.ownerTable.associatedCell;\n }\n return tableCell;\n };\n /**\n * Get first paragraph in last row\n * @private\n */\n Selection.prototype.getFirstParagraphInLastRow = function (table) {\n if (table.childWidgets.length > 0) {\n var lastRow = table.childWidgets[table.childWidgets.length - 1];\n var lastCell = lastRow.childWidgets[0];\n var lastBlock = lastCell.childWidgets[0];\n return this.getFirstParagraphBlock(lastBlock);\n }\n return undefined;\n };\n /**\n * Get previous valid offset\n * @private\n */\n Selection.prototype.getPreviousValidOffset = function (paragraph, offset) {\n if (offset === 0) {\n return 0;\n }\n var validOffset = 0;\n var count = 0;\n for (var i = 0; i < paragraph.childWidgets.length; i++) {\n var lineWidget = paragraph.childWidgets[i];\n for (var j = 0; j < lineWidget.children.length; j++) {\n var inline = lineWidget.children[j];\n if (inline.length === 0) {\n continue;\n }\n if (offset <= count + inline.length) {\n return offset - 1 === count ? validOffset : offset - 1;\n }\n if (inline instanceof TextElementBox || inline instanceof ImageElementBox\n || (inline instanceof FieldElementBox && HelperMethods.isLinkedFieldCharacter(inline))) {\n validOffset = count + inline.length;\n }\n count += inline.length;\n }\n }\n return offset - 1 === count ? validOffset : offset - 1;\n };\n /**\n * Get next valid offset\n * @private\n */\n Selection.prototype.getNextValidOffset = function (line, offset) {\n var count = 0;\n for (var i = 0; i < line.children.length; i++) {\n var inline = line.children[i];\n if (inline.length === 0 || inline instanceof ListTextElementBox) {\n continue;\n }\n if (offset < count + inline.length) {\n if (inline instanceof TextElementBox || inline instanceof ImageElementBox\n || (inline instanceof FieldElementBox && HelperMethods.isLinkedFieldCharacter(inline))) {\n return (offset > count ? offset : count) + 1;\n }\n }\n count += inline.length;\n }\n return offset;\n };\n /**\n * Get paragraph mark size info\n * @private\n */\n Selection.prototype.getParagraphMarkSize = function (paragraph, topMargin, bottomMargin) {\n var size = this.viewer.textHelper.getParagraphMarkSize(paragraph.characterFormat);\n var baselineOffset = size.BaselineOffset;\n var maxHeight = size.Height;\n var maxBaselineOffset = baselineOffset;\n if (paragraph instanceof ParagraphWidget) {\n // let paragraphWidget: ParagraphWidget[] = paragraph.renderedElement() as ParagraphWidget[];\n if (paragraph.childWidgets.length > 0) {\n var lineWidget = paragraph.childWidgets[0];\n }\n //Gets line spacing.\n var lineSpacing = this.viewer.layout.getLineSpacing(paragraph, maxHeight);\n var beforeSpacing = this.viewer.layout.getBeforeSpacing(paragraph);\n topMargin = maxBaselineOffset - baselineOffset;\n bottomMargin = maxHeight - maxBaselineOffset - (size.Height - baselineOffset);\n //Updates line spacing, paragraph after/ before spacing and aligns the text to base line offset.\n var lineSpacingType = paragraph.paragraphFormat.lineSpacingType;\n if (lineSpacingType === 'Multiple') {\n if (lineSpacing > maxHeight) {\n bottomMargin += lineSpacing - maxHeight;\n }\n else {\n topMargin += lineSpacing - maxHeight;\n }\n }\n else if (lineSpacingType === 'Exactly') {\n topMargin += lineSpacing - (topMargin + size.Height + bottomMargin);\n }\n else if (lineSpacing > topMargin + size.Height + bottomMargin) {\n topMargin += lineSpacing - (topMargin + size.Height + bottomMargin);\n }\n topMargin += beforeSpacing;\n bottomMargin += paragraph.paragraphFormat.afterSpacing;\n }\n return { 'width': size.Width, 'height': size.Height, 'topMargin': topMargin, 'bottomMargin': bottomMargin };\n };\n /**\n * @private\n */\n Selection.prototype.getPhysicalPositionInternal = function (line, offset, moveNextLine) {\n if (line.paragraph.isEmpty()) {\n var paragraphWidget = line.paragraph;\n var left = paragraphWidget.x;\n if (paragraphWidget.childWidgets.length > 0) {\n var lineWidget = paragraphWidget.childWidgets[0];\n left = this.getLeft(lineWidget);\n }\n var topMargin = 0;\n var bottomMargin = 0;\n var size = this.getParagraphMarkSize(line.paragraph, topMargin, bottomMargin);\n if (offset > 0) {\n left += size.width;\n }\n return new Point(left, paragraphWidget.y + topMargin);\n }\n else {\n var indexInInline = 0;\n var inlineObj = line.getInline(offset, indexInInline);\n var inline = inlineObj.element; //return indexInInline must\n indexInInline = inlineObj.index;\n // tslint:disable-next-line:max-line-length\n // if (inline.length === indexInInline && !isNullOrUndefined(inline.nextNode) && this.viewer.renderedElements.containsKey(inline) &&\n // this.viewer.renderedElements.get(inline).length > 0 && this.viewer.renderedElements.containsKey(inline.nextNode as WInline)\n // && this.viewer.renderedElements.get(inline.nextNode as WInline).length > 0 &&\n // tslint:disable-next-line:max-line-length\n // (this.viewer.renderedElements.get(inline)[this.viewer.renderedElements.get(inline).length - 1] as ElementBox).line !== (this.viewer.renderedElements.get(inline.nextNode as WInline)[0] as ElementBox).line) {\n // //Handled specifically to move the cursor at start of next line.\n // inline = inline.nextNode as WInline;\n // indexInInline = 0;\n // }\n return this.getPhysicalPositionInline(inline, indexInInline, moveNextLine);\n }\n };\n /**\n * Highlight selected content\n * @private\n */\n Selection.prototype.highlightSelectedContent = function (start, end) {\n if (start.paragraph.isInsideTable && (!end.paragraph.isInsideTable\n || (!start.paragraph.associatedCell.equals(end.paragraph.associatedCell))\n || this.isCellSelected(start.paragraph.associatedCell, start, end))) {\n this.highlightCell(start.paragraph.associatedCell, this, start, end);\n }\n else {\n var inline = undefined;\n var index = 0;\n if (!this.owner.isReadOnlyMode && start.paragraph === end.paragraph) {\n if (start.offset + 1 === end.offset) {\n var inlineObj = end.currentWidget.getInline(end.offset, index);\n inline = inlineObj.element; // return index value\n index = inlineObj.index;\n if (inline instanceof ImageElementBox) {\n var startOffset = start.currentWidget.getOffset(inline, 0);\n if (startOffset !== start.offset) {\n inline = undefined;\n }\n }\n }\n else {\n var indexInInline = 0;\n var startInlineObj = start.currentWidget.getInline(start.offset, indexInInline);\n var startInline = startInlineObj.element; //return indexInInline\n indexInInline = startInlineObj.index;\n if (indexInInline === startInline.length) {\n startInline = this.getNextRenderedElementBox(startInline, indexInInline);\n }\n var endInlineObj = end.currentWidget.getInline(end.offset, indexInInline);\n var endInline = endInlineObj.element; //return indexInInline\n indexInInline = endInlineObj.index;\n // tslint:disable-next-line:max-line-length\n if (startInline instanceof FieldElementBox && endInline instanceof FieldElementBox && !isNullOrUndefined(startInline.fieldSeparator)) {\n var fieldValue = startInline.fieldSeparator.nextNode;\n if (fieldValue instanceof ImageElementBox && fieldValue.nextNode === endInline) {\n inline = fieldValue;\n }\n }\n }\n }\n if (!this.owner.isReadOnlyMode && inline instanceof ImageElementBox && this.owner.isDocumentLoaded) {\n var elementBoxObj = this.getElementBoxInternal(inline, index);\n var elementBox = elementBoxObj.element; //return index \n index = elementBoxObj.index;\n if (this.owner.enableImageResizerMode) {\n this.owner.imageResizerModule.positionImageResizer(elementBox);\n this.owner.imageResizerModule.showImageResizer();\n }\n if (this.viewer.isTouchInput) {\n this.viewer.touchStart.style.display = 'none';\n this.viewer.touchEnd.style.display = 'none';\n }\n }\n else {\n this.highlight(start.paragraph, start, end);\n }\n }\n };\n /**\n * @private\n */\n Selection.prototype.highlight = function (paragraph, start, end) {\n var selectionStartIndex = 0;\n var selectionEndIndex = 0;\n var startElement = undefined;\n var endElement = undefined;\n var startLineWidget = undefined;\n var endLineWidget = undefined;\n //return start Element and selection start index\n var startLineObj = this.getStartLineWidget(paragraph, start, startElement, selectionStartIndex);\n startElement = startLineObj.element;\n if (isNullOrUndefined(startElement)) {\n startLineWidget = paragraph.childWidgets[0];\n }\n else {\n startLineWidget = startElement.line;\n }\n selectionStartIndex = startLineObj.index;\n var endLineObj = this.getEndLineWidget(end, endElement, selectionEndIndex);\n endElement = endLineObj.element;\n if (endElement) {\n endLineWidget = endElement.line;\n }\n else {\n endLineWidget = end.paragraph.childWidgets[end.paragraph.childWidgets.length - 1];\n }\n selectionEndIndex = endLineObj.index;\n var top = 0;\n var left = 0;\n if (!isNullOrUndefined(startLineWidget)) {\n top = this.getTop(startLineWidget);\n left = this.getLeftInternal(startLineWidget, startElement, selectionStartIndex);\n }\n if (!isNullOrUndefined(startLineWidget) && startLineWidget === endLineWidget) {\n //Selection ends in current line.\n var right = this.getLeftInternal(endLineWidget, endElement, selectionEndIndex);\n this.createHighlightBorder(startLineWidget, right - left, left, top);\n }\n else {\n if (!isNullOrUndefined(startLineWidget)) {\n var x = startLineWidget.paragraph.x;\n this.createHighlightBorder(startLineWidget, this.getWidth(startLineWidget, true) - (left - x), left, top);\n var lineIndex = startLineWidget.paragraph.childWidgets.indexOf(startLineWidget);\n //Iterates to last item of paragraph or selection end. \n this.highlightParagraph(paragraph, lineIndex + 1, endLineWidget, endElement, selectionEndIndex);\n if (paragraph.childWidgets.indexOf(end.currentWidget) !== -1) {\n return;\n }\n }\n this.highlightNextBlock(paragraph, start, end);\n }\n };\n Selection.prototype.highlightNextBlock = function (paragraph, start, end) {\n var block = paragraph.nextRenderedWidget;\n if (!isNullOrUndefined(block)) {\n if (block instanceof ParagraphWidget) {\n this.highlight(block, start, end);\n }\n else {\n this.highlightTable(block, start, end);\n }\n }\n };\n /**\n * Get start line widget\n * @private\n */\n // tslint:disable-next-line:max-line-length\n Selection.prototype.getStartLineWidget = function (paragraph, start, startElement, selectionStartIndex) {\n var offset = paragraph === start.paragraph ? start.offset : this.getStartOffset(paragraph);\n var startInlineObj = undefined;\n if (paragraph === start.paragraph) {\n startInlineObj = start.currentWidget.getInline(offset, selectionStartIndex);\n }\n else {\n startInlineObj = paragraph.firstChild.getInline(offset, selectionStartIndex);\n }\n startElement = startInlineObj.element; //return selectionStartIndex\n selectionStartIndex = startInlineObj.index;\n if (startElement instanceof FieldElementBox) {\n var inlineInfo = this.getRenderedInline(startElement, selectionStartIndex);\n startElement = inlineInfo.element;\n selectionStartIndex = inlineInfo.index;\n }\n if (offset === this.getParagraphLength(start.paragraph) + 1) {\n selectionStartIndex++;\n }\n return {\n 'index': selectionStartIndex, 'element': startElement\n };\n };\n /**\n * Get end line widget\n * @private\n */\n Selection.prototype.getEndLineWidget = function (end, endElement, selectionEndIndex) {\n var endInlineObj = end.currentWidget.getInline(end.offset, selectionEndIndex);\n endElement = endInlineObj.element; //return selection end index\n selectionEndIndex = endInlineObj.index;\n if (endElement instanceof FieldElementBox) {\n var inlineInfo = this.getRenderedInline(endElement, selectionEndIndex);\n endElement = inlineInfo.element;\n selectionEndIndex = inlineInfo.index;\n }\n var lineIndex = end.paragraph.childWidgets.indexOf(end.currentWidget);\n if (lineIndex === end.paragraph.childWidgets.length - 1 && end.offset === this.getLineLength(end.currentWidget) + 1) {\n selectionEndIndex = endElement ? endElement.length + 1 : 1;\n }\n return { 'index': selectionEndIndex, 'element': endElement };\n };\n /**\n * Get line widget\n * @private\n */\n Selection.prototype.getLineWidgetInternal = function (line, offset, moveToNextLine) {\n var lineWidget = undefined;\n if (line.children.length === 0 && line instanceof LineWidget) {\n lineWidget = line;\n }\n else {\n var indexInInline = 0;\n var inlineInfo = line.getInline(offset, indexInInline);\n var inline = inlineInfo.element;\n indexInInline = inlineInfo.index;\n lineWidget = inline instanceof ElementBox ? inline.line\n : this.getLineWidgetInternalInline(inline, indexInInline, moveToNextLine);\n }\n return lineWidget;\n };\n /**\n * Get last line widget\n * @private\n */\n Selection.prototype.getLineWidgetParagraph = function (offset, line) {\n var linewidget = undefined;\n if (line.children.length === 0) {\n linewidget = line;\n }\n else {\n var indexInInline = 0;\n var inlineInfo = line.getInline(offset, indexInInline);\n var inline = inlineInfo.element;\n indexInInline = inlineInfo.index;\n linewidget = this.getLineWidget(inline, indexInInline);\n }\n return linewidget;\n };\n /**\n * Highlight selected cell\n * @private\n */\n /* tslint:disable */\n // tslint:disable-next-line:max-line-length \n Selection.prototype.highlightCells = function (table, startCell, endCell) {\n var start = this.getCellLeft(startCell.ownerRow, startCell);\n var end = start + startCell.cellFormat.cellWidth;\n var endCellLeft = this.getCellLeft(endCell.ownerRow, endCell);\n var endCellRight = endCellLeft + endCell.cellFormat.cellWidth;\n if (start > endCellLeft) {\n start = endCellLeft;\n }\n if (end < endCellRight) {\n end = endCellRight;\n }\n if (start > this.upDownSelectionLength) {\n start = this.upDownSelectionLength;\n }\n if (end < this.upDownSelectionLength) {\n end = this.upDownSelectionLength;\n }\n var tableWidgetCollection = table.getSplitWidgets();\n var startTableIndex = tableWidgetCollection.indexOf(startCell.ownerRow.ownerTable);\n var endTableIndex = tableWidgetCollection.indexOf(endCell.ownerRow.ownerTable);\n if (startTableIndex === endTableIndex) {\n var count = table.childWidgets.indexOf(endCell.ownerRow);\n for (var i = table.childWidgets.indexOf(startCell.ownerRow); i <= count; i++) {\n this.highlightRow(table.childWidgets[i], start, end);\n }\n }\n else {\n var startRowIndex = 0;\n var endRowIndex = 0;\n for (var i = startTableIndex; i <= endTableIndex; i++) {\n table = tableWidgetCollection[i];\n if (i === startTableIndex) {\n startRowIndex = table.childWidgets.indexOf(startCell.ownerRow);\n }\n else {\n startRowIndex = 0;\n }\n if (i === endTableIndex) {\n endRowIndex = table.childWidgets.indexOf(endCell.ownerRow);\n }\n else {\n endRowIndex = table.childWidgets.length - 1;\n }\n for (var j = startRowIndex; j <= endRowIndex; j++) {\n this.highlightRow(table.childWidgets[j], start, end);\n }\n }\n }\n };\n /* tslint:enable */\n /**\n * highlight selected table\n * @private\n */\n Selection.prototype.highlightTable = function (table, start, end) {\n this.highlightInternal(table.childWidgets[0], start, end);\n if (!end.paragraph.isInsideTable //Selection end is outside the table cell.\n || !table.contains(end.paragraph.associatedCell)) {\n this.highlightNextBlock(table, start, end);\n }\n };\n /**\n * Get cell left\n * @private\n */\n Selection.prototype.getCellLeft = function (row, cell) {\n var left = 0;\n left += cell.x - cell.margin.left;\n return left;\n };\n /**\n * Get next paragraph for row\n * @private\n */\n Selection.prototype.getNextParagraphRow = function (row) {\n if (!isNullOrUndefined(row.nextRenderedWidget)) {\n var cell = row.nextRenderedWidget.childWidgets[0];\n var block = cell.childWidgets[0];\n return this.getFirstParagraphBlock(block);\n }\n return this.getNextParagraphBlock(row.ownerTable);\n };\n /**\n * Get previous paragraph from row\n * @private\n */\n Selection.prototype.getPreviousParagraphRow = function (row) {\n if (!isNullOrUndefined(row.previousRenderedWidget)) {\n // tslint:disable-next-line:max-line-length\n var cell = row.previousRenderedWidget.lastChild;\n var block = cell.lastChild ? cell.lastChild : (cell.previousSplitWidget).lastChild;\n return this.getLastParagraphBlock(block);\n }\n return this.getPreviousParagraphBlock(row.ownerTable);\n };\n /**\n * Return true if row contain cell\n * @private\n */\n Selection.prototype.containsRow = function (row, tableCell) {\n if (row.childWidgets.indexOf(tableCell) !== -1) {\n return true;\n }\n while (tableCell.ownerTable.isInsideTable) {\n if (row.childWidgets.indexOf(tableCell) !== -1) {\n return true;\n }\n tableCell = tableCell.ownerTable.associatedCell;\n }\n return row.childWidgets.indexOf(tableCell) !== -1;\n };\n /**\n * Highlight selected row\n * @private\n */\n Selection.prototype.highlightRow = function (row, start, end) {\n for (var i = 0; i < row.childWidgets.length; i++) {\n var left = this.getCellLeft(row, row.childWidgets[i]);\n if (HelperMethods.round(start, 2) <= HelperMethods.round(left, 2) &&\n HelperMethods.round(left, 2) < HelperMethods.round(end, 2)) {\n this.highlightCellWidget(row.childWidgets[i]);\n }\n }\n };\n /**\n * @private\n */\n // tslint:disable-next-line:max-line-length\n Selection.prototype.highlightInternal = function (row, start, end) {\n for (var i = 0; i < row.childWidgets.length; i++) {\n this.highlightCellWidget(row.childWidgets[i]);\n }\n if (end.paragraph.isInsideTable && this.containsRow(row, end.paragraph.associatedCell)) {\n return;\n }\n else if (row.nextRenderedWidget instanceof TableRowWidget) {\n this.highlightInternal(row.nextRenderedWidget, start, end);\n }\n };\n /**\n * Get last paragraph in cell\n * @private\n */\n Selection.prototype.getLastParagraph = function (cell) {\n while (cell.nextSplitWidget) {\n if (cell.nextSplitWidget.childWidgets.length > 0) {\n cell = cell.nextSplitWidget;\n }\n else {\n break;\n }\n }\n var lastBlock;\n if (cell.childWidgets.length > 0) {\n lastBlock = cell.lastChild;\n }\n else {\n lastBlock = cell.previousSplitWidget.lastChild;\n }\n return this.getLastParagraphBlock(lastBlock);\n };\n /**\n * Return true is source cell contain cell\n * @private\n */\n Selection.prototype.containsCell = function (sourceCell, cell) {\n if (sourceCell.equals(cell)) {\n return true;\n }\n while (cell.ownerTable.isInsideTable) {\n if (sourceCell.equals(cell.ownerTable.associatedCell)) {\n return true;\n }\n cell = cell.ownerTable.associatedCell;\n }\n return false;\n };\n /**\n * Return true if cell is selected\n * @private\n */\n Selection.prototype.isCellSelected = function (cell, startPosition, endPosition) {\n var lastParagraph = this.getLastParagraph(cell);\n // tslint:disable-next-line:max-line-length\n var isAtCellEnd = lastParagraph === endPosition.paragraph && endPosition.offset === this.getParagraphLength(lastParagraph) + 1;\n return isAtCellEnd || (!this.containsCell(cell, startPosition.paragraph.associatedCell) ||\n !this.containsCell(cell, endPosition.paragraph.associatedCell));\n };\n /**\n * Return Container cell\n * @private\n */\n Selection.prototype.getContainerCellOf = function (cell, tableCell) {\n while (cell.ownerTable.isInsideTable) {\n if (cell.ownerTable.contains(tableCell)) {\n return cell;\n }\n cell = cell.ownerTable.associatedCell;\n }\n return cell;\n };\n /**\n * Get Selected cell\n * @private\n */\n Selection.prototype.getSelectedCell = function (cell, containerCell) {\n if (cell.ownerTable.equals(containerCell.ownerTable)) {\n return cell;\n }\n while (cell.ownerTable.isInsideTable) {\n if (cell.ownerTable.associatedCell.equals(containerCell)) {\n return cell;\n }\n cell = cell.ownerTable.associatedCell;\n }\n return cell;\n };\n /**\n * @private\n */\n Selection.prototype.getSelectedCells = function () {\n var cells = [];\n for (var i = 0; i < this.selectedWidgets.keys.length; i++) {\n var widget = this.selectedWidgets.keys[i];\n if (widget instanceof TableCellWidget) {\n cells.push(widget);\n }\n }\n return cells;\n };\n /**\n * Get Next paragraph from cell\n * @private\n */\n Selection.prototype.getNextParagraphCell = function (cell) {\n if (cell.nextRenderedWidget && cell.nextRenderedWidget instanceof TableCellWidget) {\n //Return first paragraph in cell. \n cell = cell.nextRenderedWidget;\n var block = cell.firstChild;\n if (block) {\n return this.getFirstParagraphBlock(block);\n }\n else {\n return this.getNextParagraphCell(cell);\n }\n }\n return this.getNextParagraphRow(cell.containerWidget);\n };\n /**\n * Get previous paragraph from cell\n * @private\n */\n Selection.prototype.getPreviousParagraphCell = function (cell) {\n if (!isNullOrUndefined(cell.previousRenderedWidget) && cell.previousRenderedWidget instanceof TableCellWidget) {\n cell = cell.previousRenderedWidget;\n var block = cell.lastChild;\n return this.getLastParagraphBlock(block);\n }\n return this.getPreviousParagraphRow(cell.ownerRow);\n };\n /**\n * Get cell's container cell\n * @private\n */\n Selection.prototype.getContainerCell = function (cell) {\n while (!isNullOrUndefined(cell.ownerTable) && cell.ownerTable.isInsideTable) {\n cell = cell.ownerTable.associatedCell;\n }\n return cell;\n };\n /**\n * Highlight selected cell\n * @private\n */\n /* tslint:disable */\n Selection.prototype.highlightCell = function (cell, selection, start, end) {\n if (end.paragraph.isInsideTable) {\n var containerCell = this.getContainerCellOf(cell, end.paragraph.associatedCell);\n if (containerCell.ownerTable.contains(end.paragraph.associatedCell)) {\n var startCell = this.getSelectedCell(cell, containerCell);\n var endCell = this.getSelectedCell(end.paragraph.associatedCell, containerCell);\n if (this.containsCell(containerCell, end.paragraph.associatedCell)) {\n /* tslint:enable */\n //Selection end is in container cell.\n if (this.isCellSelected(containerCell, start, end)) {\n this.highlightCellWidget(containerCell);\n }\n else {\n if (startCell === containerCell) {\n this.highlight(start.paragraph, start, end);\n }\n else {\n this.highlightContainer(startCell, start, end);\n }\n }\n }\n else {\n //Selection end is not in container cell.\n this.highlightCellWidget(containerCell);\n if (containerCell.ownerRow.equals(endCell.ownerRow)) {\n //Highlight other selected cells in current row.\n startCell = containerCell;\n while (!isNullOrUndefined(startCell.nextRenderedWidget)) {\n startCell = startCell.nextRenderedWidget;\n this.highlightCellWidget(startCell);\n if (startCell === endCell) {\n break;\n }\n }\n }\n else {\n this.highlightCells(containerCell.ownerTable, containerCell, endCell);\n }\n }\n }\n else {\n this.highlightContainer(containerCell, start, end);\n }\n }\n else {\n var cell1 = this.getContainerCell(cell);\n this.highlightContainer(cell1, start, end);\n }\n };\n /**\n * @private\n */\n Selection.prototype.highlightContainer = function (cell, start, end) {\n this.highlightInternal(cell.containerWidget, start, end);\n this.highlightNextBlock(cell.ownerTable, start, end);\n };\n /**\n * Get previous valid element\n * @private\n */\n Selection.prototype.getPreviousValidElement = function (inline) {\n var previousValidInline = undefined;\n while (inline instanceof FieldElementBox) {\n if (HelperMethods.isLinkedFieldCharacter(inline)) {\n if (inline instanceof FieldElementBox && inline.fieldType === 0) {\n previousValidInline = inline;\n }\n else if (inline instanceof FieldElementBox && inline.fieldType === 1) {\n previousValidInline = inline;\n if (isNullOrUndefined(inline.fieldSeparator)) {\n inline = inline.fieldBegin;\n previousValidInline = inline;\n }\n }\n else {\n inline = inline.fieldBegin;\n previousValidInline = inline;\n }\n }\n inline = inline.previousNode;\n }\n return isNullOrUndefined(previousValidInline) ? inline : previousValidInline;\n };\n /**\n * Get next valid element\n * @private\n */\n Selection.prototype.getNextValidElement = function (inline) {\n var nextValidInline = undefined;\n while (inline instanceof FieldElementBox) {\n if (inline.fieldType === 0 && !isNullOrUndefined(inline.fieldEnd)) {\n return isNullOrUndefined(nextValidInline) ? inline : nextValidInline;\n }\n else if (inline.fieldType === 1 && !isNullOrUndefined(inline.fieldBegin)) {\n nextValidInline = inline;\n }\n inline = inline.nextNode;\n }\n return (isNullOrUndefined(nextValidInline) ? inline : nextValidInline);\n };\n /**\n * Return next valid inline with index\n * @private\n */\n Selection.prototype.validateTextPosition = function (inline, index) {\n if (inline.length === index && inline.nextNode instanceof FieldElementBox) {\n //If inline is last item within field, then set field end as text position.\n var nextInline = this.getNextValidElement(inline.nextNode);\n if (nextInline instanceof FieldElementBox && nextInline.fieldType === 1) {\n inline = nextInline;\n index = 1;\n }\n }\n else if (index === 0 && inline.previousNode instanceof FieldElementBox) {\n var prevInline = this.getPreviousValidElement(inline.previousNode);\n inline = prevInline;\n index = inline instanceof FieldElementBox ? 0 : inline.length;\n if (inline instanceof FieldElementBox && inline.fieldType === 1) {\n index++;\n }\n }\n return { 'element': inline, 'index': index };\n };\n /**\n * Get inline physical location\n * @private\n */\n Selection.prototype.getPhysicalPositionInline = function (inline, index, moveNextLine) {\n var element = undefined;\n element = this.getElementBox(inline, index, moveNextLine).element;\n var lineWidget = undefined;\n if (isNullOrUndefined(element) || isNullOrUndefined(element.line)) {\n if (inline instanceof FieldElementBox || inline instanceof BookmarkElementBox) {\n return this.getFieldCharacterPosition(inline);\n }\n return new Point(0, 0);\n }\n var margin = element.margin;\n var top = 0;\n var left = 0;\n if (element instanceof TextElementBox && element.text === '\\v' && isNullOrUndefined(inline.nextNode)) {\n lineWidget = this.getNextLineWidget(element.line.paragraph, element);\n index = 0;\n }\n else {\n lineWidget = element.line;\n }\n top = this.getTop(lineWidget);\n if (element instanceof ImageElementBox) {\n var format = element.line.paragraph.characterFormat;\n var previousInline = this.getPreviousTextElement(inline);\n if (!isNullOrUndefined(previousInline)) {\n format = previousInline.characterFormat;\n }\n else {\n var nextInline = this.getNextTextElement(inline);\n if (!isNullOrUndefined(nextInline)) {\n format = nextInline.characterFormat;\n }\n }\n var measureObj = this.viewer.textHelper.getHeight(format); //return ascent\n var ascent = measureObj.Height - measureObj.BaselineOffset;\n if (element.margin.top + element.height - ascent > 0) {\n top += element.margin.top + element.height - ascent;\n }\n }\n else if (!(element instanceof FieldElementBox)) {\n top += margin.top > 0 ? margin.top : 0;\n }\n left = (isNullOrUndefined(element) || isNullOrUndefined(lineWidget)) ? 0 : this.getLeftInternal(lineWidget, element, index);\n return new Point(left, top);\n };\n /**\n * Get field character position\n * @private\n */\n Selection.prototype.getFieldCharacterPosition = function (firstInline) {\n var nextValidInline = this.getNextValidElementForField(firstInline);\n //If field separator/end exists at end of paragraph, then move to next paragraph.\n if (isNullOrUndefined(nextValidInline)) {\n var nextParagraph = firstInline.line.paragraph;\n return this.getEndPosition(nextParagraph);\n }\n else {\n return this.getPhysicalPositionInline(nextValidInline, 0, true);\n }\n };\n Selection.prototype.getNextValidElementForField = function (firstInline) {\n if (firstInline instanceof FieldElementBox && firstInline.fieldType === 0\n && HelperMethods.isLinkedFieldCharacter(firstInline)) {\n var fieldBegin = firstInline;\n if (isNullOrUndefined(fieldBegin.fieldSeparator)) {\n firstInline = fieldBegin.fieldEnd;\n }\n else {\n firstInline = fieldBegin.fieldSeparator;\n }\n }\n var nextValidInline = undefined;\n if (!isNullOrUndefined(firstInline.nextNode)) {\n nextValidInline = this.getNextValidElement(firstInline.nextNode);\n }\n return nextValidInline;\n };\n /**\n * Get paragraph end position\n * @private\n */\n Selection.prototype.getEndPosition = function (widget) {\n var left = widget.x;\n var top = widget.y;\n var lineWidget = undefined;\n if (widget.childWidgets.length > 0) {\n lineWidget = widget.childWidgets[widget.childWidgets.length - 1];\n left += this.getWidth(lineWidget, false);\n }\n if (!isNullOrUndefined(lineWidget)) {\n top = this.getTop(lineWidget);\n }\n var topMargin = 0;\n var bottomMargin = 0;\n var size = this.getParagraphMarkSize(widget, topMargin, bottomMargin);\n return new Point(left, top + size.topMargin);\n };\n /**\n * Get element box\n * @private\n */\n Selection.prototype.getElementBox = function (currentInline, index, moveToNextLine) {\n var elementBox = undefined;\n if (!(currentInline instanceof FieldElementBox || currentInline instanceof BookmarkElementBox)) {\n elementBox = currentInline;\n }\n return { 'element': elementBox, 'index': index };\n };\n /**\n * @private\n */\n Selection.prototype.getPreviousTextElement = function (inline) {\n if (inline.previousNode instanceof TextElementBox) {\n return inline.previousNode;\n }\n if (!isNullOrUndefined(inline.previousNode)) {\n return this.getPreviousTextElement(inline.previousNode);\n }\n return undefined;\n };\n /**\n * Get next text inline\n * @private\n */\n Selection.prototype.getNextTextElement = function (inline) {\n if (inline.nextNode instanceof TextElementBox) {\n return inline.nextNode;\n }\n if (!isNullOrUndefined(inline.nextNode)) {\n return this.getNextTextElement(inline.nextNode);\n }\n return undefined;\n };\n /**\n * @private\n */\n Selection.prototype.getNextRenderedElementBox = function (inline, indexInInline) {\n if (inline instanceof FieldElementBox) {\n var fieldBegin = inline;\n if (fieldBegin.fieldType === 0) {\n inline = this.getRenderedField(fieldBegin);\n if (fieldBegin === inline) {\n return fieldBegin;\n }\n }\n indexInInline = 1;\n }\n while (!isNullOrUndefined(inline) && indexInInline === inline.length && inline.nextNode instanceof FieldElementBox) {\n var nextValidInline = this.getNextValidElement((inline.nextNode));\n if (nextValidInline instanceof FieldElementBox && nextValidInline.fieldType === 0) {\n var fieldBegin = nextValidInline;\n inline = this.getRenderedField(fieldBegin);\n if (!isNullOrUndefined(inline) && fieldBegin === inline) {\n return fieldBegin;\n }\n indexInInline = 1;\n }\n else {\n inline = nextValidInline;\n }\n }\n return inline;\n };\n /**\n * @private\n */\n Selection.prototype.getElementBoxInternal = function (inline, index) {\n var element = undefined;\n element = inline;\n return {\n 'element': element, 'index': index\n };\n };\n /**\n * Get Line widget\n * @private\n */\n Selection.prototype.getLineWidget = function (inline, index) {\n return this.getLineWidgetInternalInline(inline, index, true);\n };\n /**\n * @private\n */\n Selection.prototype.getLineWidgetInternalInline = function (inline, index, moveToNextLine) {\n var elementObj = this.getElementBox(inline, index, moveToNextLine);\n var element = elementObj.element; //return index\n index = elementObj.index;\n if (!isNullOrUndefined(element)) {\n if (moveToNextLine && element instanceof TextElementBox && element.text === '\\v' && index === 1) {\n return this.getNextLineWidget(element.line.paragraph, element);\n }\n else {\n return element.line;\n }\n }\n var startInline = inline;\n //ToDo: Check previous inline here.\n var nextValidInline = this.getNextValidElementForField(startInline);\n //If field separator/end exists at end of paragraph, then move to next paragraph.\n if (isNullOrUndefined(nextValidInline)) {\n var lineWidget = undefined;\n var widget = startInline.line.paragraph;\n if (widget.childWidgets.length > 0) {\n lineWidget = widget.childWidgets[widget.childWidgets.length - 1];\n }\n return lineWidget;\n }\n else {\n return this.getLineWidget(nextValidInline, 0);\n }\n };\n /**\n * Get next line widget\n * @private\n */\n Selection.prototype.getNextLineWidget = function (paragraph, element) {\n var lineWidget = undefined;\n var widget = paragraph;\n if (widget.childWidgets.length > 0) {\n var widgetIndex = widget.childWidgets.indexOf(element.line);\n if (widgetIndex === widget.childWidgets.length - 1) {\n widget = paragraph;\n // widget = paragraph.leafWidgets[paragraph.leafWidgets.length - 1];\n widgetIndex = -1;\n }\n else if (widgetIndex > widget.childWidgets.length - 1) {\n widget = this.getNextParagraphBlock(paragraph);\n widgetIndex = -1;\n }\n else if (widgetIndex < 0) {\n // widget = paragraph.leafWidgets[paragraph.leafWidgets.length - 1];\n widget = paragraph;\n widgetIndex = widget.childWidgets.indexOf(element.line);\n }\n lineWidget = widget.childWidgets[widgetIndex + 1];\n }\n return lineWidget;\n };\n /**\n * Get Caret height\n * @private\n */\n // tslint:disable-next-line:max-line-length\n Selection.prototype.getCaretHeight = function (inline, index, format, isEmptySelection, topMargin, isItalic) {\n var elementBoxInfo = this.getElementBox(inline, index, false);\n var element = elementBoxInfo.element;\n var currentInline = inline;\n if (isNullOrUndefined(element)) {\n if (currentInline instanceof FieldElementBox) {\n return this.getFieldCharacterHeight(currentInline, format, isEmptySelection, topMargin, isItalic);\n }\n return { 'height': this.viewer.textHelper.getHeight(format).Height, 'topMargin': topMargin, 'isItalic': isItalic };\n }\n var margin = element.margin;\n var heightElement = element.height;\n var maxLineHeight = 0;\n if (element instanceof ImageElementBox) {\n var previousInline = this.getPreviousTextElement(inline);\n var nextInline = this.getNextTextElement(inline);\n if (isNullOrUndefined(previousInline) && isNullOrUndefined(nextInline)) {\n var top_2 = 0;\n var bottom = 0;\n var paragarph = inline.line.paragraph;\n var sizeInfo = this.getParagraphMarkSize(paragarph, top_2, bottom);\n top_2 = sizeInfo.topMargin;\n bottom = sizeInfo.bottomMargin;\n maxLineHeight = sizeInfo.height;\n isItalic = paragarph.characterFormat.italic;\n if (!isEmptySelection) {\n maxLineHeight += paragarph.paragraphFormat.afterSpacing;\n }\n }\n else if (isNullOrUndefined(previousInline)) {\n isItalic = nextInline.characterFormat.italic;\n return this.getCaretHeight(nextInline, 0, nextInline.characterFormat, isEmptySelection, topMargin, isItalic);\n }\n else {\n if (!isNullOrUndefined(nextInline) && element instanceof ImageElementBox) {\n //Calculates the caret size using image character format.\n var textSizeInfo = this.viewer.textHelper.getHeight(element.characterFormat);\n var charHeight = textSizeInfo.Height;\n var baselineOffset = textSizeInfo.BaselineOffset;\n // tslint:disable-next-line:max-line-length\n maxLineHeight = (element.margin.top < 0 && baselineOffset > element.margin.top + element.height) ? element.margin.top + element.height + charHeight - baselineOffset : charHeight;\n if (!isEmptySelection) {\n maxLineHeight += element.margin.bottom;\n }\n }\n else {\n isItalic = previousInline.characterFormat.italic;\n // tslint:disable-next-line:max-line-length\n return this.getCaretHeight(previousInline, previousInline.length, previousInline.characterFormat, isEmptySelection, topMargin, isItalic);\n }\n }\n }\n else {\n var baselineAlignment = format.baselineAlignment;\n var elementHeight = heightElement;\n if (baselineAlignment !== 'Normal' && isEmptySelection) {\n //Set the caret height as sub/super script text height and updates the top margin for sub script text.\n elementHeight = elementHeight / 1.5;\n if (baselineAlignment === 'Subscript') {\n topMargin = heightElement - elementHeight;\n }\n }\n maxLineHeight = (margin.top < 0 ? margin.top : 0) + elementHeight;\n if (!isEmptySelection) {\n maxLineHeight += margin.bottom;\n }\n }\n if (!isEmptySelection) {\n return { 'height': maxLineHeight, 'topMargin': topMargin, 'isItalic': isItalic };\n }\n var height = this.viewer.textHelper.getHeight(format).Height;\n if (height > maxLineHeight) {\n height = maxLineHeight;\n }\n return { 'height': height, 'topMargin': topMargin, 'isItalic': isItalic };\n };\n /**\n * Get field characters height\n * @private\n */\n // tslint:disable-next-line:max-line-length\n Selection.prototype.getFieldCharacterHeight = function (startInline, format, isEmptySelection, topMargin, isItalic) {\n var nextValidInline = this.getNextValidElementForField(startInline);\n //If field separator/end exists at end of paragraph, then move to next paragraph.\n if (isNullOrUndefined(nextValidInline)) {\n var nextParagraph = startInline.line.paragraph;\n var height = this.viewer.textHelper.getParagraphMarkSize(format).Height;\n var top_3 = 0;\n var bottom = 0;\n var sizeInfo = this.getParagraphMarkSize(nextParagraph, top_3, bottom);\n var maxLineHeight = sizeInfo.height;\n top_3 = sizeInfo.topMargin;\n bottom = sizeInfo.bottomMargin;\n if (!isEmptySelection) {\n maxLineHeight += bottom;\n return { 'height': maxLineHeight, 'topMargin': topMargin, 'isItalic': isItalic };\n }\n if (height > maxLineHeight) {\n height = maxLineHeight;\n }\n return { 'height': height, 'topMargin': topMargin, 'isItalic': isItalic };\n }\n else {\n return this.getCaretHeight(nextValidInline, 0, format, isEmptySelection, topMargin, isItalic);\n }\n };\n /**\n * Get rendered inline\n * @private\n */\n //FieldCharacter\n Selection.prototype.getRenderedInline = function (inline, inlineIndex) {\n var prevInline = this.getPreviousValidElement(inline);\n while (prevInline instanceof FieldElementBox) {\n prevInline = this.getPreviousTextElement(prevInline);\n if (prevInline instanceof FieldElementBox) {\n prevInline = prevInline.previousNode;\n }\n }\n if (!isNullOrUndefined(prevInline)) {\n inlineIndex = prevInline.length;\n return { 'element': prevInline, 'index': inlineIndex };\n }\n inlineIndex = 0;\n var nextInline = this.getNextRenderedElementBox(inline, 0);\n if (nextInline instanceof FieldElementBox && nextInline.fieldType === 0) {\n nextInline = nextInline.fieldSeparator;\n nextInline = nextInline.nextNode;\n while (nextInline instanceof FieldElementBox) {\n if (nextInline instanceof FieldElementBox && nextInline.fieldType === 0\n && HelperMethods.isLinkedFieldCharacter(nextInline)) {\n if (isNullOrUndefined(nextInline.fieldSeparator)) {\n nextInline = nextInline.fieldEnd;\n }\n else {\n nextInline = nextInline.fieldSeparator;\n }\n }\n nextInline = nextInline.nextNode;\n }\n }\n return { 'element': nextInline, 'index': inlineIndex };\n };\n //Field Begin\n /**\n * Get rendered field\n * @private\n */\n Selection.prototype.getRenderedField = function (fieldBegin) {\n var inline = fieldBegin;\n if (isNullOrUndefined(fieldBegin.fieldSeparator)) {\n inline = fieldBegin.fieldEnd;\n }\n else {\n inline = fieldBegin.fieldSeparator;\n var paragraph = inline.line.paragraph;\n if (paragraph === fieldBegin.fieldEnd.line.paragraph\n && !this.hasValidInline(paragraph, inline, fieldBegin.fieldEnd)) {\n inline = fieldBegin.fieldEnd;\n }\n else {\n return inline;\n }\n }\n return inline;\n };\n /**\n * Return true is inline is tha last inline\n * @private\n */\n Selection.prototype.isLastRenderedInline = function (inline, index) {\n while (index === inline.length && inline.nextNode instanceof FieldElementBox) {\n var nextValidInline = this.getNextValidElement(inline.nextNode);\n index = 0;\n if (nextValidInline instanceof FieldElementBox && nextValidInline.fieldType === 0) {\n inline = nextValidInline;\n }\n if (inline instanceof FieldElementBox && inline.fieldType === 0 && !isNullOrUndefined(inline.fieldEnd)) {\n var fieldBegin = inline;\n if (isNullOrUndefined(fieldBegin.fieldSeparator)) {\n inline = fieldBegin.fieldEnd;\n index = 1;\n }\n else {\n inline = fieldBegin.fieldSeparator;\n var paragraph = inline.line.paragraph;\n index = 1;\n if (paragraph === fieldBegin.fieldEnd.line.paragraph\n && !this.hasValidInline(paragraph, inline, fieldBegin.fieldEnd)) {\n inline = fieldBegin.fieldEnd;\n }\n else {\n break;\n }\n }\n }\n }\n return index === inline.length && isNullOrUndefined(inline.nextNode);\n };\n /**\n * Get page\n * @private\n */\n Selection.prototype.getPage = function (widget) {\n var page = undefined;\n if (widget.containerWidget instanceof BlockContainer) {\n var bodyWidget = widget.containerWidget;\n page = widget.containerWidget.page;\n }\n else if (!isNullOrUndefined(widget.containerWidget)) {\n page = this.getPage(widget.containerWidget);\n }\n return page;\n };\n /**\n * Clear Selection highlight\n * @private\n */\n Selection.prototype.clearSelectionHighlightInSelectedWidgets = function () {\n var isNonEmptySelection = false;\n var widgets = this.selectedWidgets.keys;\n for (var i = 0; i < widgets.length; i++) {\n this.removeSelectionHighlight(widgets[i]);\n isNonEmptySelection = true;\n }\n this.selectedWidgets.clear();\n return isNonEmptySelection;\n };\n /**\n * Clear selection highlight\n * @private\n */\n Selection.prototype.clearChildSelectionHighlight = function (widget) {\n for (var i = 0; i < widget.childWidgets.length; i++) {\n if (widget.childWidgets[i] instanceof LineWidget) {\n this.clearSelectionHighlightLineWidget(widget.childWidgets[i]);\n }\n else if (widget.childWidgets[i] instanceof TableCellWidget) {\n this.clearSelectionHighlight(widget.childWidgets[i]);\n }\n else if (widget.childWidgets[i] instanceof Widget) {\n this.clearChildSelectionHighlight(widget.childWidgets[i]);\n }\n }\n };\n /**\n * Get line widget from paragraph widget\n * @private\n */\n //Body Widget\n Selection.prototype.getLineWidgetBodyWidget = function (widget, point) {\n for (var i = 0; i < widget.childWidgets.length; i++) {\n var childWidget = widget.childWidgets[i];\n if (childWidget instanceof Widget && childWidget.y <= point.y\n && (childWidget.y + childWidget.height) >= point.y) {\n if (childWidget instanceof ParagraphWidget) {\n return this.getLineWidgetParaWidget(childWidget, point);\n }\n else {\n return this.getLineWidgetTableWidget(childWidget, point);\n }\n }\n }\n var line = undefined;\n if (widget.childWidgets.length > 0) {\n var firstChild = widget.childWidgets[0];\n if (firstChild instanceof Widget && firstChild.y <= point.y) {\n if (widget.childWidgets[widget.childWidgets.length - 1] instanceof ParagraphWidget) {\n // tslint:disable-next-line:max-line-length\n line = this.getLineWidgetParaWidget(widget.childWidgets[widget.childWidgets.length - 1], point);\n }\n else {\n // tslint:disable-next-line:max-line-length\n line = this.getLineWidgetTableWidget(widget.childWidgets[widget.childWidgets.length - 1], point);\n }\n }\n else {\n var childWidget = undefined;\n if (firstChild instanceof Widget) {\n childWidget = firstChild;\n }\n if (!isNullOrUndefined(childWidget)) {\n if (childWidget instanceof ParagraphWidget) {\n line = this.getLineWidgetParaWidget(firstChild, point);\n }\n else {\n line = this.getLineWidgetTableWidget(firstChild, point);\n }\n }\n }\n }\n return line;\n };\n //ParagraphWidget\n /**\n * Get line widget from paragraph widget\n * @private\n */\n Selection.prototype.getLineWidgetParaWidget = function (widget, point) {\n var childWidgets = widget.childWidgets;\n var top = widget.y;\n for (var i = 0; i < childWidgets.length; i++) {\n if (top <= point.y\n && (top + childWidgets[i].height) >= point.y) {\n return childWidgets[i];\n }\n top += childWidgets[i].height;\n }\n var lineWidget = undefined;\n if (childWidgets.length > 0) {\n if (widget.y <= point.y) {\n lineWidget = childWidgets[childWidgets.length - 1];\n }\n else {\n lineWidget = childWidgets[0];\n }\n }\n return lineWidget;\n };\n /**\n * highlight paragraph widget\n * @private\n */\n // tslint:disable-next-line:max-line-length\n Selection.prototype.highlightParagraph = function (widget, startIndex, endLine, endElement, endIndex) {\n var top = 0;\n for (var i = startIndex; i < widget.childWidgets.length; i++) {\n var line = widget.childWidgets[i];\n if (i === startIndex) {\n top = this.getTop(line);\n }\n var left = this.getLeft(line);\n if (line === endLine) {\n //Selection ends in current line.\n var right = this.getLeftInternal(endLine, endElement, endIndex);\n this.createHighlightBorder(line, right - left, left, top);\n return;\n }\n this.createHighlightBorder(line, this.getWidth(line, true) - (left - widget.x), left, top);\n top += line.height;\n }\n };\n //Table Widget\n /**\n * Get line widget form table widget\n * @private\n */\n Selection.prototype.getLineWidgetTableWidget = function (widget, point) {\n var lineWidget = undefined;\n for (var i = 0; i < widget.childWidgets.length; i++) {\n //Removed the height condition check to handle the vertically merged cells.\n var childWidget = widget.childWidgets[i];\n if (childWidget instanceof TableRowWidget && childWidget.y <= point.y) {\n lineWidget = this.getLineWidgetRowWidget(childWidget, point);\n var cellWidget = undefined;\n if (!isNullOrUndefined(lineWidget) && lineWidget.paragraph.containerWidget instanceof TableCellWidget) {\n cellWidget = lineWidget.paragraph.containerWidget;\n }\n var cellSpacing = 0;\n var rowSpan = 0;\n if (!isNullOrUndefined(cellWidget)) {\n var tableWidget = cellWidget.ownerRow.containerWidget;\n cellSpacing = HelperMethods.convertPointToPixel(tableWidget.tableFormat.cellSpacing);\n rowSpan = cellWidget.cellFormat.rowSpan;\n }\n var leftCellSpacing = 0;\n var rightCellSpacing = 0;\n var topCellSpacing = 0;\n var bottomCellSpacing = 0;\n if (cellSpacing > 0) {\n leftCellSpacing = cellWidget.cellIndex === 0 ? cellSpacing : cellSpacing / 2;\n // tslint:disable-next-line:max-line-length\n rightCellSpacing = cellWidget.cellIndex === cellWidget.ownerRow.childWidgets.length - 1 ? cellSpacing : cellSpacing / 2;\n var rowWidget = undefined;\n if (cellWidget.containerWidget instanceof TableRowWidget) {\n rowWidget = cellWidget.containerWidget;\n }\n var tableWidget = undefined;\n if (cellWidget.containerWidget.containerWidget instanceof TableWidget) {\n tableWidget = cellWidget.containerWidget.containerWidget;\n }\n if (!isNullOrUndefined(rowWidget) && !isNullOrUndefined(tableWidget)) {\n topCellSpacing = cellWidget.ownerRow.rowIndex === 0 ? cellSpacing : cellSpacing / 2;\n if (cellWidget.ownerRow.rowIndex + rowSpan === cellWidget.ownerTable.childWidgets.length) {\n bottomCellSpacing = cellSpacing;\n }\n else {\n bottomCellSpacing = cellSpacing / 2;\n }\n }\n }\n if ((!isNullOrUndefined(lineWidget) && lineWidget.paragraph.x <= point.x\n && lineWidget.paragraph.x + lineWidget.width >= point.x\n && lineWidget.paragraph.y <= point.y && this.getTop(lineWidget) + lineWidget.height >= point.y)\n || (!isNullOrUndefined(cellWidget) && cellWidget.x - cellWidget.margin.left - leftCellSpacing <= point.x\n && cellWidget.x + cellWidget.width + cellWidget.margin.right + rightCellSpacing >= point.x\n && cellWidget.y - cellWidget.margin.top - topCellSpacing <= point.y\n && cellWidget.y + cellWidget.height + cellWidget.margin.bottom + bottomCellSpacing >= point.y)) {\n break;\n }\n }\n }\n return lineWidget;\n };\n //TableRowWidget\n /**\n * Get line widget fom row\n * @private\n */\n Selection.prototype.getLineWidgetRowWidget = function (widget, point) {\n for (var i = 0; i < widget.childWidgets.length; i++) {\n var cellSpacing = 0;\n cellSpacing = HelperMethods.convertPointToPixel(widget.ownerTable.tableFormat.cellSpacing);\n var leftCellSpacing = 0;\n var rightCellSpacing = 0;\n if (cellSpacing > 0) {\n leftCellSpacing = widget.childWidgets[i].columnIndex === 0 ? cellSpacing : cellSpacing / 2;\n // tslint:disable-next-line:max-line-length\n rightCellSpacing = widget.childWidgets[i].cellIndex === widget.childWidgets[i].ownerRow.childWidgets.length - 1 ? cellSpacing : cellSpacing / 2;\n }\n if (widget.childWidgets[i].x -\n // tslint:disable-next-line:max-line-length\n widget.childWidgets[i].margin.left - leftCellSpacing <= point.x && (widget.childWidgets[i].x +\n // tslint:disable-next-line:max-line-length\n widget.childWidgets[i].width) + widget.childWidgets[i].margin.right + rightCellSpacing >= point.x) {\n return this.getLineWidgetCellWidget(widget.childWidgets[i], point);\n }\n }\n var lineWidget = undefined;\n if (widget.childWidgets.length > 0) {\n if (widget.childWidgets[0].x <= point.x) {\n lineWidget = this.getLineWidgetCellWidget(widget.childWidgets[widget.childWidgets.length - 1], point);\n }\n else {\n lineWidget = this.getLineWidgetCellWidget(widget.childWidgets[0], point);\n }\n }\n return lineWidget;\n };\n /**\n * @private\n */\n Selection.prototype.getFirstBlock = function (cell) {\n if (cell.childWidgets.length > 0) {\n return cell.childWidgets[0];\n }\n return undefined;\n };\n //Table Cell Widget\n /**\n * Highlight selected cell widget\n * @private\n */\n Selection.prototype.highlightCellWidget = function (widget) {\n var widgets = [];\n if (widget.previousSplitWidget || widget.nextSplitWidget) {\n widgets = widget.getSplitWidgets();\n }\n else {\n widgets.push(widget);\n }\n for (var i = 0; i < widgets.length; i++) {\n widget = widgets[i];\n //Clears Selection highlight of the child widgets.\n this.clearChildSelectionHighlight(widget);\n //Highlights the entire cell.\n this.createHighlightBorderInsideTable(widget);\n }\n };\n /**\n * Clear selection highlight\n * @private\n */\n Selection.prototype.clearSelectionHighlight = function (widget) {\n if (this.selectedWidgets.containsKey(widget)) {\n this.removeSelectionHighlight(widget);\n this.selectedWidgets.remove(widget);\n }\n };\n /**\n * Get line widget from cell widget\n * @private\n */\n Selection.prototype.getLineWidgetCellWidget = function (widget, point) {\n for (var i = 0; i < widget.childWidgets.length; i++) {\n if (widget.childWidgets[i].y <= point.y\n && (widget.childWidgets[i].y + widget.childWidgets[i].height) >= point.y) {\n if (widget.childWidgets[i] instanceof ParagraphWidget) {\n return this.getLineWidgetParaWidget(widget.childWidgets[i], point);\n }\n else {\n return this.getLineWidgetTableWidget(widget.childWidgets[i], point);\n }\n }\n }\n var lineWidget = undefined;\n if (widget.childWidgets.length > 0) {\n if (widget.childWidgets[0].y <= point.y) {\n if (widget.childWidgets[widget.childWidgets.length - 1] instanceof ParagraphWidget) {\n // tslint:disable-next-line:max-line-length\n lineWidget = this.getLineWidgetParaWidget(widget.childWidgets[widget.childWidgets.length - 1], point);\n }\n else {\n lineWidget = this.getLineWidgetTableWidget(widget.childWidgets[0], point);\n }\n }\n }\n return lineWidget;\n };\n //LineWidget\n /**\n * update text position\n * @private\n */\n Selection.prototype.updateTextPosition = function (widget, point) {\n var caretPosition = point;\n var element = undefined;\n var index = 0;\n var isImageSelected = false;\n var isImageSelectedObj = this.updateTextPositionIn(widget, element, index, point, false);\n if (!isNullOrUndefined(isImageSelectedObj)) {\n element = isImageSelectedObj.element;\n index = isImageSelectedObj.index;\n caretPosition = isImageSelectedObj.caretPosition;\n isImageSelected = isImageSelectedObj.isImageSelected;\n this.isImageSelected = isImageSelected;\n }\n if (isImageSelected) {\n this.selectInternal(widget, element, index, caretPosition);\n if (index === 0) {\n this.extendForward();\n }\n else {\n this.extendBackward();\n }\n }\n else {\n this.selectInternal(widget, element, index, caretPosition);\n }\n };\n /**\n * @private\n */\n /* tslint:disable */\n Selection.prototype.updateTextPositionIn = function (widget, inline, index, caretPosition, includeParagraphMark) {\n var isImageSelected = false;\n var top = this.getTop(widget);\n var left = widget.paragraph.x;\n var elementValues = this.getFirstElement(widget, left);\n var element = elementValues.element;\n left = elementValues.left;\n if (isNullOrUndefined(element)) {\n var topMargin = 0;\n var bottomMargin = 0;\n var size = this.getParagraphMarkSize(widget.paragraph, topMargin, bottomMargin);\n topMargin = size.topMargin;\n bottomMargin = size.bottomMargin;\n var selectParaMark = this.viewer.mouseDownOffset.y >= top && this.viewer.mouseDownOffset.y < top + widget.height ? (this.viewer.mouseDownOffset.x < left + size.width) : true;\n if (selectParaMark && includeParagraphMark && caretPosition.x > left + size.width / 2) {\n left += size.width;\n if (widget.children.length > 0) {\n inline = widget.children[widget.children.length - 1];\n index = inline.length;\n }\n index++;\n }\n caretPosition = new Point(left, topMargin > 0 ? top + topMargin : top);\n }\n else {\n if (!isNullOrUndefined(element)) {\n if (caretPosition.x > left + element.margin.left) {\n for (var i = widget.children.indexOf(element); i < widget.children.length; i++) {\n element = widget.children[i];\n if (caretPosition.x < left + element.margin.left + element.width || i === widget.children.length - 1) {\n break;\n }\n left += element.margin.left + element.width;\n }\n if (caretPosition.x > left + element.margin.left + element.width) {\n //Line End\n index = element instanceof TextElementBox ? element.length : 1;\n left += element.margin.left + element.width;\n }\n else if (element instanceof TextElementBox) {\n var x = caretPosition.x - left - element.margin.left;\n left += element.margin.left;\n var prevWidth = 0;\n var charIndex = 0;\n for (var i = 1; i <= element.length; i++) {\n var width = 0;\n if (i === element.length) {\n width = element.width;\n }\n else {\n width = this.viewer.textHelper.getWidth(element.text.substr(0, i), element.characterFormat);\n }\n if (x < width || i === element.length) {\n //Updates exact left position of the caret.\n var charWidth = width - prevWidth;\n if (x - prevWidth > charWidth / 2) {\n left += width;\n charIndex = i;\n }\n else {\n left += prevWidth;\n charIndex = i - 1;\n if (i === 1 && element !== widget.children[0]) {\n var curIndex = widget.children.indexOf(element);\n if (!(widget.children[curIndex - 1] instanceof ListTextElementBox)) {\n element = widget.children[curIndex - 1];\n charIndex = element instanceof TextElementBox ? element.length : 1;\n }\n }\n }\n break;\n }\n prevWidth = width;\n }\n index = charIndex;\n }\n else {\n isImageSelected = element instanceof ImageElementBox;\n if (caretPosition.x - left - element.margin.left > element.width / 2) {\n index = 1;\n left += element.margin.left + element.width;\n }\n else if (element !== widget.children[0] && !isImageSelected) {\n var curIndex = widget.children.indexOf(element);\n if (!(widget.children[curIndex - 1] instanceof ListTextElementBox)) {\n element = widget.children[curIndex - 1];\n index = element instanceof TextElementBox ? element.length : 1;\n }\n }\n }\n if (element instanceof TextElementBox && element.text === '\\v') {\n index = 0;\n }\n }\n else {\n left += element.margin.left;\n }\n if (element instanceof TextElementBox) {\n top += element.margin.top > 0 ? element.margin.top : 0;\n }\n else {\n var textMetrics = this.viewer.textHelper.getHeight(element.characterFormat); //for ascent and descent\n var height = textMetrics.Height; //after text helper class\n var baselineOffset = textMetrics.BaselineOffset; //baseline calculation\n top += element.margin.top + element.height - baselineOffset;\n }\n inline = element;\n var inlineObj = this.validateTextPosition(inline, index);\n inline = inlineObj.element;\n index = inlineObj.index;\n var isParagraphEnd = isNullOrUndefined(inline.nextNode) && index === inline.length;\n var isLineEnd = isNullOrUndefined(inline.nextNode)\n && inline instanceof TextElementBox && inline.text === '\\v';\n if (includeParagraphMark && inline.nextNode instanceof FieldElementBox && index === inline.length) {\n isParagraphEnd = this.isLastRenderedInline(inline, index);\n }\n if (includeParagraphMark && isParagraphEnd || isLineEnd) {\n var width = 0;\n //Include width of Paragraph mark.\n if (isParagraphEnd) {\n width = this.viewer.textHelper.getParagraphMarkWidth(widget.paragraph.characterFormat);\n var selectParaMark = this.viewer.mouseDownOffset.y >= top && this.viewer.mouseDownOffset.y < top + widget.height ? (this.viewer.mouseDownOffset.x < left + width) : true;\n if (selectParaMark && caretPosition.x > left + width / 2) {\n left += width;\n index = inline.length + 1;\n }\n //Include width of line break mark.\n }\n else if (isLineEnd) {\n width = element.width;\n left += width;\n index = inline.length;\n }\n }\n caretPosition = new Point(left, top);\n }\n }\n return {\n 'element': inline,\n 'index': index,\n 'caretPosition': caretPosition,\n 'isImageSelected': isImageSelected\n };\n };\n /* tslint:enable */\n /**\n * Get text length if the line widget\n * @private\n */\n // public getTextLength(viewer: LayoutViewer, widget: LineWidget, element: ElementBox): number {\n // let length: number = 0;\n // let count: number = widget.children.indexOf(element);\n // if (widget.children.length > 0 && widget.children[0] instanceof ListTextElementBox) {\n // if (widget.children[1] instanceof ListTextElementBox) {\n // count -= 2;\n // } else {\n // count -= 1;\n // }\n // }\n // for (let i: number = 1; i < count; i++) {\n // length += widget.children[i].length;\n // }\n // return length;\n // }\n /**\n * Get Line widget left\n * @private\n */\n Selection.prototype.getLeft = function (widget) {\n var left = widget.paragraph.x;\n var paragraphFormat = widget.paragraph.paragraphFormat;\n if (this.isParagraphFirstLine(widget) && !(paragraphFormat.textAlignment === 'Right')) {\n left += HelperMethods.convertPointToPixel(paragraphFormat.firstLineIndent);\n }\n for (var i = 0; i < widget.children.length; i++) {\n var element = widget.children[i];\n if (element instanceof ListTextElementBox) {\n if (i === 0) {\n left += element.margin.left + element.width;\n }\n else {\n left += element.width;\n }\n }\n else {\n left += element.margin.left;\n break;\n }\n }\n return left;\n };\n /**\n * Get line widget top\n * @private\n */\n Selection.prototype.getTop = function (widget) {\n var top = widget.paragraph.y;\n var count = widget.paragraph.childWidgets.indexOf(widget);\n for (var i = 0; i < count; i++) {\n top += widget.paragraph.childWidgets[i].height;\n }\n return top;\n };\n /**\n * Get first element the widget\n * @private\n */\n Selection.prototype.getFirstElement = function (widget, left) {\n var firstLineIndent = 0;\n if (this.isParagraphFirstLine(widget)) {\n firstLineIndent = HelperMethods.convertPointToPixel(widget.paragraph.paragraphFormat.firstLineIndent);\n }\n left += firstLineIndent;\n var element = undefined;\n for (var i = 0; i < widget.children.length; i++) {\n element = widget.children[i];\n if (element instanceof ListTextElementBox) {\n left += element.margin.left + element.width;\n element = undefined;\n }\n else if (element instanceof FieldElementBox || element instanceof BookmarkElementBox\n || (element.nextNode instanceof FieldElementBox && (element.nextNode.fieldType === 2))) {\n element = undefined;\n }\n else {\n break;\n }\n }\n return { 'element': element, 'left': left };\n };\n /**\n * Return inline index\n * @private\n */\n //ElementBox\n Selection.prototype.getIndexInInline = function (elementBox) {\n var indexInInline = 0;\n if (elementBox instanceof TextElementBox) {\n var count = elementBox.line.children.indexOf(elementBox);\n for (var i = 0; i < count; i++) {\n var element = elementBox.line.children[i];\n if (element instanceof FieldElementBox || element instanceof ListTextElementBox) {\n continue;\n }\n indexInInline += element.length;\n }\n }\n return indexInInline;\n };\n /**\n * Return true if widget is first inline of paragraph\n * @private\n */\n Selection.prototype.isParagraphFirstLine = function (widget) {\n if (isNullOrUndefined(widget.paragraph.previousSplitWidget) &&\n widget === widget.paragraph.firstChild) {\n return true;\n }\n return false;\n };\n /**\n * @private\n */\n Selection.prototype.isParagraphLastLine = function (widget) {\n if (isNullOrUndefined(widget.paragraph.nextSplitWidget)\n && widget === widget.paragraph.lastChild) {\n return true;\n }\n return false;\n };\n /**\n * Return line widget width\n * @private\n */\n Selection.prototype.getWidth = function (widget, includeParagraphMark) {\n var width = 0;\n if (this.isParagraphFirstLine(widget)) {\n width += HelperMethods.convertPointToPixel(widget.paragraph.paragraphFormat.firstLineIndent);\n }\n for (var i = 0; i < widget.children.length; i++) {\n width += widget.children[i].margin.left + widget.children[i].width;\n }\n if (includeParagraphMark && widget.paragraph.childWidgets.indexOf(widget) === widget.paragraph.childWidgets.length - 1\n && isNullOrUndefined(widget.paragraph.nextSplitWidget)) {\n width += this.viewer.textHelper.getParagraphMarkWidth(widget.paragraph.characterFormat);\n }\n return width;\n };\n /**\n * Return line widget left\n * @private\n */\n Selection.prototype.getLeftInternal = function (widget, elementBox, index) {\n var left = widget.paragraph.x;\n if (this.isParagraphFirstLine(widget)) {\n // tslint:disable-next-line:max-line-length\n left += HelperMethods.convertPointToPixel(widget.paragraph.paragraphFormat.firstLineIndent);\n }\n var count = widget.children.indexOf(elementBox);\n if ((widget.children.length === 1 && widget.children[0] instanceof ListTextElementBox) || (widget.children.length === 2\n && widget.children[0] instanceof ListTextElementBox && widget.children[1] instanceof ListTextElementBox)) {\n count = widget.children.length;\n }\n for (var i = 0; i < count; i++) {\n var widgetInternal = widget.children[i];\n if (widgetInternal instanceof FieldElementBox) {\n continue;\n }\n if (i === 1 && widget.children[i] instanceof ListTextElementBox) {\n left += widget.children[i].width;\n }\n else {\n left += widget.children[i].margin.left + widget.children[i].width;\n }\n }\n if (!isNullOrUndefined(elementBox)) {\n left += elementBox.margin.left;\n }\n if (elementBox instanceof TextElementBox) {\n if (index === elementBox.length) {\n left += elementBox.width;\n }\n else if (index > elementBox.length) {\n // tslint:disable-next-line:max-line-length\n left += elementBox.width + this.viewer.textHelper.getParagraphMarkWidth(elementBox.line.paragraph.characterFormat);\n }\n else {\n // tslint:disable-next-line:max-line-length\n left += this.viewer.textHelper.getWidth(elementBox.text.substr(0, index), elementBox.characterFormat);\n }\n }\n else if (index > 0) {\n if (!isNullOrUndefined(elementBox) && !(elementBox instanceof ListTextElementBox)) {\n left += elementBox.width;\n if (index === 2) {\n var paragraph = elementBox.line.paragraph;\n left += this.viewer.textHelper.getParagraphMarkWidth(paragraph.characterFormat);\n }\n }\n else {\n left += this.viewer.textHelper.getParagraphMarkWidth(widget.paragraph.characterFormat);\n }\n }\n return left;\n };\n /**\n * Return line widget start offset\n * @private\n */\n Selection.prototype.getLineStartLeft = function (widget) {\n var left = widget.paragraph.x;\n if (this.isParagraphFirstLine(widget)) {\n left += HelperMethods.convertPointToPixel(widget.paragraph.paragraphFormat.firstLineIndent);\n }\n if (widget.children.length > 0) {\n left += widget.children[0].margin.left;\n }\n return left;\n };\n /**\n * Update text position\n * @private\n */\n Selection.prototype.updateTextPositionWidget = function (widget, point, textPosition, includeParagraphMark) {\n var caretPosition = point;\n var inline = undefined;\n var index = 0;\n var updatePositionObj;\n updatePositionObj = this.updateTextPositionIn(widget, inline, index, caretPosition, includeParagraphMark);\n inline = updatePositionObj.element;\n index = updatePositionObj.index;\n caretPosition = updatePositionObj.caretPosition;\n textPosition.setPositionForSelection(widget, inline, index, caretPosition);\n };\n /**\n * Clear selection highlight\n * @private\n */\n Selection.prototype.clearSelectionHighlightLineWidget = function (widget) {\n if (!isNullOrUndefined(this.owner) && this.selectedWidgets.length > 0) {\n this.clearSelectionHighlight(this);\n }\n };\n /**\n * Return first element from line widget\n * @private\n */\n Selection.prototype.getFirstElementInternal = function (widget) {\n var element = undefined;\n for (var i = 0; i < widget.children.length; i++) {\n element = widget.children[i];\n if (element instanceof ListTextElementBox) {\n element = undefined;\n }\n else {\n break;\n }\n }\n return element;\n };\n //Selection API \n /**\n * Select content between given range\n * @private\n */\n Selection.prototype.selectRange = function (startPosition, endPosition) {\n this.start.setPositionInternal(startPosition);\n this.end.setPositionInternal(endPosition);\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Selects current paragraph\n * @private\n */\n Selection.prototype.selectParagraph = function (paragraph, positionAtStart) {\n var line = paragraph.firstChild;\n if (positionAtStart) {\n this.start.setPosition(line, positionAtStart);\n }\n else {\n var endOffset = line.getEndOffset();\n this.start.setPositionParagraph(line, endOffset);\n }\n this.end.setPositionInternal(this.start);\n this.upDownSelectionLength = this.start.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * @private\n */\n Selection.prototype.setPositionForBlock = function (block, selectFirstBlock) {\n var position;\n if (block instanceof TableWidget) {\n if (selectFirstBlock) {\n block = this.getFirstParagraphInFirstCell(block);\n }\n else {\n block = this.getLastParagraphInLastCell(block);\n }\n }\n if (block instanceof ParagraphWidget) {\n position = new TextPosition(this.owner);\n if (selectFirstBlock) {\n position.setPosition(block.firstChild, true);\n }\n else {\n var line = block.lastChild;\n position.setPositionParagraph(line, line.getEndOffset());\n }\n }\n return position;\n };\n /**\n * Select content in given text position\n * @private\n */\n Selection.prototype.selectContent = function (textPosition, clearMultiSelection) {\n if (isNullOrUndefined(textPosition)) {\n throw new Error('textPosition is undefined.');\n }\n this.start.setPositionInternal(textPosition);\n this.end.setPositionInternal(textPosition);\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Select paragraph\n * @private\n */\n Selection.prototype.selectInternal = function (lineWidget, element, index, physicalLocation) {\n this.start.setPositionForSelection(lineWidget, element, index, physicalLocation);\n this.end.setPositionInternal(this.start);\n this.upDownSelectionLength = physicalLocation.x;\n this.fireSelectionChanged(true);\n };\n /**\n * @private\n */\n Selection.prototype.selects = function (lineWidget, offset, skipSelectionChange) {\n this.viewer.clearSelectionHighlight();\n this.start.setPositionForLineWidget(lineWidget, offset);\n this.end.setPositionInternal(this.start);\n if (!skipSelectionChange) {\n this.fireSelectionChanged(true);\n }\n };\n /**\n * Select content between start and end position\n * @private\n */\n Selection.prototype.selectPosition = function (startPosition, endPosition) {\n if (isNullOrUndefined(startPosition) || isNullOrUndefined(endPosition)) {\n throw new Error('TextPosition cannot be undefined');\n }\n if (isNullOrUndefined(startPosition.paragraph)\n || startPosition.offset > this.getParagraphLength(startPosition.paragraph) + 1) {\n throw new Error('Start TextPosition is not valid.');\n }\n if (isNullOrUndefined(endPosition.paragraph)\n || endPosition.offset > this.getParagraphLength(endPosition.paragraph) + 1) {\n throw new Error('End TextPosition is not valid.');\n }\n if (startPosition.isAtSamePosition(endPosition)) {\n // Select start position.\n this.selectRange(startPosition, startPosition);\n }\n else {\n // If both text position exists within same comment or outside comment, and not at same position.\n if (startPosition.isExistBefore(endPosition)) {\n // tslint:disable-next-line:max-line-length\n endPosition.validateForwardFieldSelection(startPosition.getHierarchicalIndexInternal(), endPosition.getHierarchicalIndexInternal());\n }\n else {\n // tslint:disable-next-line:max-line-length\n startPosition.validateForwardFieldSelection(endPosition.getHierarchicalIndexInternal(), startPosition.getHierarchicalIndexInternal());\n }\n this.selectRange(startPosition, endPosition);\n }\n };\n /**\n * Notify selection change event\n * @private\n */\n Selection.prototype.fireSelectionChanged = function (isSelectionChanged) {\n if (!this.isEmpty) {\n if (this.isForward) {\n this.start.updatePhysicalPosition(true);\n this.end.updatePhysicalPosition(false);\n }\n else {\n this.start.updatePhysicalPosition(false);\n this.end.updatePhysicalPosition(true);\n }\n }\n if (!this.skipFormatRetrieval) {\n this.retrieveCurrentFormatProperties();\n }\n this.viewer.clearSelectionHighlight();\n this.hideToolTip();\n if (this.owner.isLayoutEnabled && !this.owner.isShiftingEnabled) {\n this.highlightSelection(true);\n }\n if (isSelectionChanged) {\n if (this.start.paragraph.isInHeaderFooter && !this.owner.enableHeaderAndFooter) {\n this.owner.enableHeaderAndFooter = true;\n }\n else if (!this.start.paragraph.isInHeaderFooter && this.owner.enableHeaderAndFooter) {\n this.owner.enableHeaderAndFooter = false;\n }\n this.owner.fireSelectionChange();\n }\n this.viewer.updateFocus();\n };\n //Formats Retrieval\n /**\n * Retrieve all current selection format\n * @private\n */\n Selection.prototype.retrieveCurrentFormatProperties = function () {\n this.isRetrieveFormatting = true;\n var startPosition = this.start;\n var endPosition = this.end;\n if (!this.isForward) {\n startPosition = this.end;\n endPosition = this.start;\n }\n this.retrieveImageFormat(startPosition, endPosition);\n this.retrieveCharacterFormat(startPosition, endPosition);\n this.retrieveParagraphFormat(startPosition, endPosition);\n this.retrieveSectionFormat(startPosition, endPosition);\n this.retrieveTableFormat(startPosition, endPosition);\n if (!this.isImageSelected) {\n this.imageFormat.clearImageFormat();\n }\n this.isRetrieveFormatting = false;\n this.setCurrentContextType();\n };\n /**\n * @private\n */\n Selection.prototype.retrieveImageFormat = function (start, end) {\n var image;\n if (start.currentWidget === end.currentWidget && start.offset + 1 === end.offset) {\n var elementInfo = end.currentWidget.getInline(end.offset, 0);\n image = elementInfo.element;\n var index = elementInfo.index;\n if (image instanceof ImageElementBox) {\n var startOffset = start.currentWidget.getOffset(image, 0);\n if (startOffset !== start.offset) {\n image = undefined;\n }\n }\n }\n if (image instanceof ImageElementBox) {\n this.imageFormat.copyImageFormat(image);\n }\n else {\n this.imageFormat.clearImageFormat();\n }\n };\n Selection.prototype.setCurrentContextType = function () {\n var contextIsinImage = this.imageFormat.image ? true : false;\n var contextIsinTable = (isNullOrUndefined(this.tableFormat) || isNullOrUndefined(this.tableFormat.table)) ? false : true;\n var style = this.start.paragraph.paragraphFormat.baseStyle;\n if (style instanceof WParagraphStyle && style.name.toLowerCase().indexOf('toc') === 0) {\n var tocField = this.getTocFieldInternal();\n if (!isNullOrUndefined(tocField)) {\n this.contextTypeInternal = 'TableOfContents';\n return;\n }\n }\n if (this.start.paragraph.isInHeaderFooter) {\n var isInHeader = this.start.paragraph.bodyWidget.headerFooterType.indexOf('Header') !== -1;\n if (contextIsinTable) {\n if (contextIsinImage) {\n this.contextTypeInternal = isInHeader ? 'HeaderTableImage' : 'FooterTableImage';\n }\n else {\n this.contextTypeInternal = isInHeader ? 'HeaderTableText' : 'FooterTableText';\n }\n }\n else {\n if (contextIsinImage) {\n this.contextTypeInternal = isInHeader ? 'HeaderImage' : 'FooterImage';\n }\n else {\n this.contextTypeInternal = isInHeader ? 'HeaderText' : 'FooterText';\n }\n }\n }\n else {\n if (contextIsinTable) {\n this.contextTypeInternal = contextIsinImage ? 'TableImage' : 'TableText';\n }\n else {\n this.contextTypeInternal = contextIsinImage ? 'Image' : 'Text';\n }\n }\n };\n //Table Format retrieval starts\n /**\n * Retrieve selection table format\n * @private\n */\n Selection.prototype.retrieveTableFormat = function (start, end) {\n var tableAdv = this.getTable(start, end);\n if (!isNullOrUndefined(tableAdv)) {\n this.tableFormat.copyFormat(tableAdv.tableFormat);\n this.tableFormat.table = tableAdv;\n this.retrieveCellFormat(start, end);\n this.retrieveRowFormat(start, end);\n }\n else {\n //When the selection is out of table\n this.tableFormat.clearFormat();\n }\n };\n /**\n * Retrieve selection cell format\n * @private\n */\n Selection.prototype.retrieveCellFormat = function (start, end) {\n if (start.paragraph.isInsideTable && end.paragraph.isInsideTable) {\n this.cellFormat.copyFormat(start.paragraph.associatedCell.cellFormat);\n this.getCellFormat(start.paragraph.associatedCell.ownerTable, start, end);\n }\n else {\n //When the selection is out of table\n this.cellFormat.clearCellFormat();\n }\n };\n /**\n * Retrieve selection row format\n * @private\n */\n Selection.prototype.retrieveRowFormat = function (start, end) {\n if (start.paragraph.isInsideTable && end.paragraph.isInsideTable) {\n this.rowFormat.copyFormat(start.paragraph.associatedCell.ownerRow.rowFormat);\n this.getRowFormat(start.paragraph.associatedCell.ownerTable, start, end);\n }\n else {\n //When the selection is out of table\n this.rowFormat.clearRowFormat();\n }\n };\n /**\n * Get selected cell format\n * @private\n */\n Selection.prototype.getCellFormat = function (table, start, end) {\n if (start.paragraph.associatedCell.equals(end.paragraph.associatedCell)) {\n return;\n }\n var isStarted = false;\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n if (row === start.paragraph.associatedCell.ownerRow) {\n isStarted = true;\n }\n if (isStarted) {\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n if (this.isCellSelected(cell, start, end)) {\n this.cellFormat.combineFormat(cell.cellFormat);\n }\n if (cell === end.paragraph.associatedCell) {\n this.cellFormat.combineFormat(cell.cellFormat);\n return;\n }\n }\n }\n }\n };\n /**\n * Get selected row format\n * @private\n */\n Selection.prototype.getRowFormat = function (table, start, end) {\n var tableRow = start.paragraph.associatedCell.ownerRow;\n if (tableRow === end.paragraph.associatedCell.ownerRow) {\n return;\n }\n for (var i = table.childWidgets.indexOf(tableRow) + 1; i < table.childWidgets.length; i++) {\n var tempTableRow = table.childWidgets[i];\n this.rowFormat.combineFormat(tempTableRow.rowFormat);\n if (tempTableRow === end.paragraph.associatedCell.ownerRow) {\n return;\n }\n }\n };\n /**\n * Return table with given text position\n * @private\n */\n Selection.prototype.getTable = function (startPosition, endPosition) {\n if (!isNullOrUndefined(startPosition.paragraph.associatedCell) && !isNullOrUndefined(endPosition.paragraph.associatedCell)) {\n var startTable = startPosition.paragraph.associatedCell.ownerTable;\n var endTable = startPosition.paragraph.associatedCell.ownerTable;\n if (startTable === endTable) {\n return startTable;\n }\n else {\n if (startTable.contains(startPosition.paragraph.associatedCell)) {\n return startTable;\n }\n else if (endTable.contains(startPosition.paragraph.associatedCell)) {\n return endTable;\n }\n else if (!startTable.isInsideTable || !endTable.isInsideTable) {\n return undefined;\n }\n else {\n do {\n startTable = startTable.associatedCell.ownerTable;\n if (startTable === endTable || startTable.contains(endTable.associatedCell)) {\n return startTable;\n }\n else if (endTable.contains(startTable.associatedCell)) {\n return endTable;\n }\n } while (!isNullOrUndefined(startTable.associatedCell));\n }\n }\n }\n return undefined;\n };\n Selection.prototype.getContainerWidget = function (block) {\n var bodyWidget;\n if (block.containerWidget instanceof BlockContainer) {\n bodyWidget = block.containerWidget;\n }\n else {\n bodyWidget = block.containerWidget;\n while (!(bodyWidget instanceof BlockContainer)) {\n bodyWidget = bodyWidget.containerWidget;\n }\n }\n return bodyWidget;\n };\n //Table format retrieval ends\n //Section format retrieval starts\n /**\n * Retrieve selection section format\n * @private\n */\n Selection.prototype.retrieveSectionFormat = function (start, end) {\n var startParaSection = this.getContainerWidget(start.paragraph);\n var endParaSection = this.getContainerWidget(end.paragraph);\n if (!isNullOrUndefined(startParaSection)) {\n this.sectionFormat.copyFormat(startParaSection.sectionFormat);\n var startPageIndex = this.viewer.pages.indexOf(startParaSection.page);\n var endPageIndex = this.viewer.pages.indexOf(endParaSection.page);\n for (var i = startPageIndex + 1; i <= endPageIndex; i++) {\n this.sectionFormat.combineFormat(this.viewer.pages[i].bodyWidgets[0].sectionFormat);\n }\n }\n };\n //section format retrieval ends.\n //Paragraph format retrieval implementation starts.\n /**\n * Retrieve selection paragraph format\n * @private\n */\n Selection.prototype.retrieveParagraphFormat = function (start, end) {\n this.getParagraphFormatForSelection(start.paragraph, this, start, end);\n };\n /**\n * @private\n */\n Selection.prototype.getParagraphFormatForSelection = function (paragraph, selection, start, end) {\n //Selection start in cell.\n if (start.paragraph.isInsideTable && (!end.paragraph.isInsideTable\n || start.paragraph.associatedCell !== end.paragraph.associatedCell\n || this.isCellSelected(start.paragraph.associatedCell, start, end))) {\n this.getParagraphFormatInternalInCell(start.paragraph.associatedCell, start, end);\n }\n else {\n this.getParagraphFormatInternalInParagraph(paragraph, start, end);\n }\n };\n /**\n * @private\n */\n // tslint:disable-next-line:max-line-length\n Selection.prototype.getParagraphFormatInternalInParagraph = function (paragraph, start, end) {\n if (start.paragraph === paragraph) {\n this.paragraphFormat.copyFormat(paragraph.paragraphFormat);\n }\n else {\n this.paragraphFormat.combineFormat(paragraph.paragraphFormat);\n }\n if (end.paragraph === paragraph) {\n return;\n }\n var block = this.getNextRenderedBlock(paragraph);\n if (!isNullOrUndefined(block)) {\n this.getParagraphFormatInternalInBlock(block, start, end);\n }\n };\n /**\n * @private\n */\n Selection.prototype.getParagraphFormatInternalInBlock = function (block, start, end) {\n if (block instanceof ParagraphWidget) {\n this.getParagraphFormatInternalInParagraph(block, start, end);\n }\n else {\n this.getParagraphFormatInternalInTable(block, start, end);\n }\n };\n /**\n * @private\n */\n Selection.prototype.getParagraphFormatInternalInTable = function (table, start, end) {\n for (var i = 0; i < table.childWidgets.length; i++) {\n var tableRow = table.childWidgets[i];\n for (var j = 0; j < tableRow.childWidgets.length; j++) {\n this.getParagraphFormatInCell(tableRow.childWidgets[j]);\n }\n if (end.paragraph.isInsideTable && this.containsRow(tableRow, end.paragraph.associatedCell)) {\n return;\n }\n }\n var block = this.getNextRenderedBlock(table);\n //Goto the next block.\n this.getParagraphFormatInternalInBlock(block, start, end);\n };\n /**\n * Get paragraph format in cell\n * @private\n */\n Selection.prototype.getParagraphFormatInCell = function (cell) {\n for (var i = 0; i < cell.childWidgets.length; i++) {\n this.getParagraphFormatInBlock(cell.childWidgets[i]);\n }\n };\n /**\n * @private\n */\n Selection.prototype.getParagraphFormatInBlock = function (block) {\n if (block instanceof ParagraphWidget) {\n this.getParagraphFormatInParagraph(block);\n }\n else {\n this.getParagraphFormatInTable(block);\n }\n };\n /**\n * @private\n */\n Selection.prototype.getParagraphFormatInTable = function (tableAdv) {\n for (var i = 0; i < tableAdv.childWidgets.length; i++) {\n var tableRow = tableAdv.childWidgets[i];\n for (var j = 0; j < tableRow.childWidgets.length; j++) {\n this.getParagraphFormatInCell(tableRow.childWidgets[j]);\n }\n }\n };\n /**\n * @private\n */\n Selection.prototype.getParagraphFormatInParagraph = function (paragraph) {\n this.paragraphFormat.combineFormat(paragraph.paragraphFormat);\n };\n /**\n * Get paragraph format in cell\n * @private\n */\n Selection.prototype.getParagraphFormatInternalInCell = function (cellAdv, start, end) {\n if (end.paragraph.isInsideTable) {\n var containerCell = this.getContainerCellOf(cellAdv, end.paragraph.associatedCell);\n if (containerCell.ownerTable.contains(end.paragraph.associatedCell)) {\n var startCell = this.getSelectedCell(cellAdv, containerCell);\n var endCell = this.getSelectedCell(end.paragraph.associatedCell, containerCell);\n if (this.containsCell(containerCell, end.paragraph.associatedCell)) {\n //Selection end is in container cell.\n if (this.isCellSelected(containerCell, start, end)) {\n this.getParagraphFormatInCell(containerCell);\n }\n else {\n if (startCell === containerCell) {\n this.getParagraphFormatInternalInParagraph(start.paragraph, start, end);\n }\n else {\n this.getParagraphFormatInRow(startCell.ownerRow, start, end);\n }\n }\n }\n else {\n //Format other selected cells in current table.\n this.getParaFormatForCell(containerCell.ownerTable, containerCell, endCell);\n }\n }\n else {\n this.getParagraphFormatInRow(containerCell.ownerRow, start, end);\n }\n }\n else {\n var cell = this.getContainerCell(cellAdv);\n this.getParagraphFormatInRow(cell.ownerRow, start, end);\n }\n };\n /**\n * @private\n */\n Selection.prototype.getParaFormatForCell = function (table, startCell, endCell) {\n var startCellIn = this.getCellLeft(startCell.ownerRow, startCell);\n var endCellIn = startCellIn + startCell.cellFormat.cellWidth;\n var endCellLeft = this.getCellLeft(endCell.ownerRow, endCell);\n var endCellRight = endCellLeft + endCell.cellFormat.cellWidth;\n if (startCellIn > endCellLeft) {\n startCellIn = endCellLeft;\n }\n if (endCellIn < endCellRight) {\n endCellIn = endCellRight;\n }\n if (startCellIn > this.upDownSelectionLength) {\n startCellIn = this.upDownSelectionLength;\n }\n if (startCellIn < this.upDownSelectionLength) {\n startCellIn = this.upDownSelectionLength;\n }\n var count = table.childWidgets.indexOf(endCell.ownerRow);\n for (var i = table.childWidgets.indexOf(startCell.ownerRow); i <= count; i++) {\n var tableRow = table.childWidgets[i];\n for (var j = 0; j < tableRow.childWidgets.length; j++) {\n var cell = tableRow.childWidgets[j];\n var left = this.getCellLeft(tableRow, cell);\n if (HelperMethods.round(startCellIn, 2) <= HelperMethods.round(left, 2)\n && HelperMethods.round(left, 2) < HelperMethods.round(endCellIn, 2)) {\n this.getParagraphFormatInCell(cell);\n }\n }\n }\n };\n /**\n * Get paragraph format ins row\n * @private\n */\n Selection.prototype.getParagraphFormatInRow = function (tableRow, start, end) {\n for (var i = tableRow.rowIndex; i < tableRow.ownerTable.childWidgets.length; i++) {\n var row = tableRow.ownerTable.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n this.getParagraphFormatInCell(row.childWidgets[j]);\n }\n if (end.paragraph.isInsideTable && this.containsRow(row, end.paragraph.associatedCell)) {\n return;\n }\n }\n var block = this.getNextRenderedBlock(tableRow.ownerTable);\n //Goto the next block.\n this.getParagraphFormatInternalInBlock(block, start, end);\n };\n // paragraph format retrieval implementation ends\n // Character format retrieval implementation starts.\n /**\n * Retrieve Selection character format\n * @private\n */\n Selection.prototype.retrieveCharacterFormat = function (start, end) {\n this.characterFormat.copyFormat(start.paragraph.characterFormat);\n if (start.paragraph === end.paragraph && start.currentWidget.isLastLine()\n && start.offset === this.getLineLength(start.currentWidget) && start.offset + 1 === end.offset) {\n return;\n }\n var para = start.paragraph;\n if (start.offset === this.getParagraphLength(para) && !this.isEmpty) {\n para = this.getNextParagraphBlock(para);\n }\n while (!isNullOrUndefined(para) && para !== end.paragraph && para.isEmpty()) {\n para = this.getNextParagraphBlock(para);\n }\n var offset = para === start.paragraph ? start.offset : 0;\n var indexInInline = 0;\n if (!isNullOrUndefined(para) && !para.isEmpty()) {\n var position = new TextPosition(this.owner);\n var elemInfo = start.currentWidget.getInline(offset, indexInInline);\n var physicalLocation = this.getPhysicalPositionInternal(start.currentWidget, offset, true);\n position.setPositionForSelection(start.currentWidget, elemInfo.element, elemInfo.index, physicalLocation);\n this.getCharacterFormatForSelection(para, this, position, end);\n }\n };\n /**\n * @private\n */\n // tslint:disable-next-line:max-line-length\n Selection.prototype.getCharacterFormatForSelection = function (paragraph, selection, startPosition, endPosition) {\n //Selection start in cell.\n if (startPosition.paragraph instanceof ParagraphWidget && startPosition.paragraph.isInsideTable\n && (!endPosition.paragraph.isInsideTable\n || startPosition.paragraph.associatedCell !== endPosition.paragraph.associatedCell\n || this.isCellSelected(startPosition.paragraph.associatedCell, startPosition, endPosition))) {\n this.getCharacterFormatInTableCell(startPosition.paragraph.associatedCell, selection, startPosition, endPosition);\n }\n else {\n this.getCharacterFormat(paragraph, startPosition, endPosition);\n }\n };\n /**\n * Get Character format\n * @private\n */\n //Format Retrieval\n Selection.prototype.getCharacterFormatForTableRow = function (tableRowAdv, start, end) {\n for (var i = tableRowAdv.rowIndex; i < tableRowAdv.ownerTable.childWidgets.length; i++) {\n var tableRow = tableRowAdv.ownerTable.childWidgets[i];\n for (var j = 0; j < tableRow.childWidgets.length; j++) {\n this.getCharacterFormatForSelectionCell(tableRow.childWidgets[j], start, end);\n }\n if (end.paragraph.isInsideTable && this.containsRow(tableRow, end.paragraph.associatedCell)) {\n return;\n }\n }\n var block = this.getNextRenderedBlock(tableRowAdv.ownerTable);\n // //Goto the next block.\n this.getCharacterFormatForBlock(block, start, end);\n };\n /**\n * Get Character format in table\n * @private\n */\n Selection.prototype.getCharacterFormatInTableCell = function (tableCell, selection, start, end) {\n if (end.paragraph.isInsideTable) {\n var containerCell = this.getContainerCellOf(tableCell, end.paragraph.associatedCell);\n if (containerCell.ownerTable.contains(end.paragraph.associatedCell)) {\n var startCell = this.getSelectedCell(tableCell, containerCell);\n var endCell = this.getSelectedCell(end.paragraph.associatedCell, containerCell);\n if (this.containsCell(containerCell, end.paragraph.associatedCell)) {\n //Selection end is in container cell.\n if (this.isCellSelected(containerCell, start, end)) {\n this.getCharacterFormatForSelectionCell(containerCell, start, end);\n }\n else {\n if (startCell === containerCell) {\n this.getCharacterFormat(start.paragraph, start, end);\n }\n else {\n this.getCharacterFormatForTableRow(startCell.ownerRow, start, end);\n }\n }\n }\n else {\n //Format other selected cells in current table.\n this.getCharacterFormatInternalInTable(containerCell.ownerTable, containerCell, endCell, start, end);\n }\n }\n else {\n this.getCharacterFormatForTableRow(containerCell.ownerRow, start, end);\n }\n }\n else {\n var cell = this.getContainerCell(tableCell);\n this.getCharacterFormatForTableRow(cell.ownerRow, start, end);\n }\n };\n /**\n * @private\n */\n // tslint:disable-next-line:max-line-length\n Selection.prototype.getCharacterFormatInternalInTable = function (table, startCell, endCell, startPosition, endPosition) {\n var startIn = this.getCellLeft(startCell.ownerRow, startCell);\n var endIn = startIn + startCell.cellFormat.cellWidth;\n var endCellLeft = this.getCellLeft(endCell.ownerRow, endCell);\n var endCellRight = endCellLeft + endCell.cellFormat.cellWidth;\n if (startIn > endCellLeft) {\n startIn = endCellLeft;\n }\n if (endIn < endCellRight) {\n endIn = endCellRight;\n }\n if (startIn > this.upDownSelectionLength) {\n startIn = this.upDownSelectionLength;\n }\n if (endIn < this.upDownSelectionLength) {\n endIn = this.upDownSelectionLength;\n }\n var count = table.childWidgets.indexOf(endCell.ownerRow);\n for (var i = table.childWidgets.indexOf(startCell.ownerRow); i <= count; i++) {\n var row = table.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n var left = this.getCellLeft(row, cell);\n if (HelperMethods.round(startIn, 2) <= HelperMethods.round(left, 2) &&\n HelperMethods.round(left, 2) < HelperMethods.round(endIn, 2)) {\n this.getCharacterFormatForSelectionCell(cell, startPosition, endPosition);\n }\n }\n }\n };\n /**\n * Get character format with in selection\n * @private\n */\n Selection.prototype.getCharacterFormat = function (paragraph, start, end) {\n if (paragraph !== start.paragraph && paragraph !== end.paragraph) {\n this.getCharacterFormatInternal(paragraph, this);\n return;\n }\n if (end.paragraph === paragraph && start.paragraph !== paragraph && end.offset === 0) {\n return;\n }\n var startOffset = 0;\n var length = this.getParagraphLength(paragraph);\n if (paragraph === start.paragraph) {\n startOffset = start.offset;\n //Sets selection character format. \n var isUpdated = this.setCharacterFormat(paragraph, start, end, length);\n if (isUpdated) {\n return;\n }\n }\n var startLineWidget = paragraph.childWidgets.indexOf(start.currentWidget) !== -1 ?\n paragraph.childWidgets.indexOf(start.currentWidget) : 0;\n var endLineWidget = paragraph.childWidgets.indexOf(end.currentWidget) !== -1 ?\n paragraph.childWidgets.indexOf(end.currentWidget) : paragraph.childWidgets.length - 1;\n var endOffset = end.offset;\n if (paragraph !== end.paragraph) {\n endOffset = length;\n }\n var isFieldStartSelected = false;\n for (var i = startLineWidget; i <= endLineWidget; i++) {\n var lineWidget = paragraph.childWidgets[i];\n if (i !== startLineWidget) {\n startOffset = this.getStartLineOffset(lineWidget);\n }\n if (lineWidget === end.currentWidget) {\n endOffset = end.offset;\n }\n else {\n endOffset = this.getLineLength(lineWidget);\n }\n var count = 0;\n for (var j = 0; j < lineWidget.children.length; j++) {\n var inline = lineWidget.children[j];\n if (startOffset >= count + inline.length) {\n count += inline.length;\n continue;\n }\n if (inline instanceof FieldElementBox && inline.fieldType === 0\n && HelperMethods.isLinkedFieldCharacter(inline)) {\n var nextInline = isNullOrUndefined(inline.fieldSeparator) ?\n inline.fieldEnd : inline.fieldSeparator;\n do {\n count += inline.length;\n inline = inline.nextNode;\n i++;\n } while (!isNullOrUndefined(inline) && inline !== nextInline);\n isFieldStartSelected = true;\n }\n if (inline instanceof FieldElementBox && inline.fieldType === 1\n && HelperMethods.isLinkedFieldCharacter(inline) && isFieldStartSelected) {\n var fieldInline = inline.fieldBegin;\n do {\n this.characterFormat.combineFormat(fieldInline.characterFormat);\n fieldInline = fieldInline.nextNode;\n } while (!(fieldInline instanceof FieldElementBox));\n }\n if (inline instanceof TextElementBox) {\n this.characterFormat.combineFormat(inline.characterFormat);\n }\n if (isNullOrUndefined(inline) || endOffset <= count + inline.length) {\n break;\n }\n count += inline.length;\n }\n }\n if (end.paragraph === paragraph) {\n return;\n }\n var block = this.getNextRenderedBlock(paragraph);\n if (!isNullOrUndefined(block)) {\n this.getCharacterFormatForBlock(block, start, end);\n }\n };\n Selection.prototype.setCharacterFormat = function (para, startPos, endPos, length) {\n var index = 0;\n var startOffset = startPos.offset;\n var inlineAndIndex = startPos.currentWidget.getInline(startOffset, index);\n index = inlineAndIndex.index;\n var inline = inlineAndIndex.element;\n if (isNullOrUndefined(inline)) {\n var currentLineIndex = startPos.paragraph.childWidgets.indexOf(startPos.currentWidget);\n if (startPos.currentWidget.previousLine) {\n inline = startPos.currentWidget.previousLine.children[startPos.currentWidget.previousLine.children.length - 1];\n this.characterFormat.copyFormat(inline.characterFormat);\n return true;\n }\n }\n if (startOffset < length) {\n if (this.isEmpty) {\n if (inline instanceof TextElementBox || (inline instanceof FieldElementBox\n && (inline.fieldType === 0 || inline.fieldType === 1))) {\n var previousNode = this.getPreviousTextElement(inline);\n if (startOffset === 0 && previousNode) {\n inline = previousNode;\n }\n this.characterFormat.copyFormat(inline.characterFormat);\n }\n else {\n if (!isNullOrUndefined(this.getPreviousTextElement(inline))) {\n this.characterFormat.copyFormat(this.getPreviousTextElement(inline).characterFormat);\n }\n else if (!isNullOrUndefined(this.getNextTextElement(inline))) {\n this.characterFormat.copyFormat(this.getNextTextElement(inline).characterFormat);\n }\n else {\n this.characterFormat.copyFormat(para.characterFormat);\n }\n }\n return true;\n }\n else {\n if (index === inline.length && !isNullOrUndefined(inline.nextNode)) {\n this.characterFormat.copyFormat(this.getNextValidCharacterFormat(inline));\n }\n else if (inline instanceof TextElementBox) {\n this.characterFormat.copyFormat(inline.characterFormat);\n }\n else if (inline instanceof FieldElementBox) {\n this.characterFormat.copyFormat(this.getNextValidCharacterFormatOfField(inline));\n }\n }\n }\n else {\n if (length === endPos.offset) {\n if (inline instanceof TextElementBox || inline instanceof FieldElementBox) {\n this.characterFormat.copyFormat(inline.characterFormat);\n }\n else if (!isNullOrUndefined(inline)) {\n inline = this.getPreviousTextElement(inline);\n if (!isNullOrUndefined(inline)) {\n this.characterFormat.copyFormat(inline.characterFormat);\n }\n }\n else {\n this.characterFormat.copyFormat(para.characterFormat);\n }\n return true;\n }\n }\n return false;\n };\n /**\n * @private\n */\n Selection.prototype.getCharacterFormatForBlock = function (block, start, end) {\n if (block instanceof ParagraphWidget) {\n this.getCharacterFormat(block, start, end);\n }\n else {\n this.getCharacterFormatInTable(block, start, end);\n }\n };\n /**\n * @private\n */\n Selection.prototype.getCharacterFormatInTable = function (table, start, end) {\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n this.getCharacterFormatForSelectionCell(row.childWidgets[j], start, end);\n }\n if (end.paragraph.isInsideTable && this.containsRow(row, end.paragraph.associatedCell)) {\n return;\n }\n }\n var blockAdv = this.getNextRenderedBlock(table);\n // //Goto the next block.\n this.getCharacterFormatForBlock(blockAdv, start, end);\n };\n /**\n * Get character format in selection\n * @private\n */\n Selection.prototype.getCharacterFormatForSelectionCell = function (cell, start, end) {\n for (var i = 0; i < cell.childWidgets.length; i++) {\n this.getCharacterFormatForBlock(cell.childWidgets[i], start, end);\n }\n };\n /**\n * @private\n */\n Selection.prototype.getCharacterFormatInternal = function (paragraph, selection) {\n for (var i = 0; i < paragraph.childWidgets.length; i++) {\n var linewidget = paragraph.childWidgets[i];\n for (var j = 0; j < linewidget.children.length; j++) {\n var element = linewidget.children[j];\n if (!(element instanceof ImageElementBox || element instanceof FieldElementBox)) {\n selection.characterFormat.combineFormat(element.characterFormat);\n }\n }\n }\n };\n /**\n * Get next valid character format from inline\n * @private\n */\n Selection.prototype.getNextValidCharacterFormat = function (inline) {\n var startInline = this.getNextTextElement(inline);\n if (isNullOrUndefined(startInline)) {\n return inline.characterFormat;\n }\n var fieldBegin = undefined;\n if (startInline instanceof FieldElementBox) {\n if (fieldBegin.fieldType === 0) {\n fieldBegin = startInline;\n }\n }\n if (isNullOrUndefined(fieldBegin)) {\n return startInline.characterFormat;\n }\n else {\n return this.getNextValidCharacterFormatOfField(fieldBegin);\n }\n };\n /**\n * Get next valid paragraph format from field\n * @private\n */\n Selection.prototype.getNextValidCharacterFormatOfField = function (fieldBegin) {\n var startInline = fieldBegin;\n if (HelperMethods.isLinkedFieldCharacter(fieldBegin)) {\n if (isNullOrUndefined(fieldBegin.fieldSeparator)) {\n startInline = fieldBegin.fieldEnd;\n }\n else {\n startInline = fieldBegin.fieldSeparator;\n }\n }\n var nextValidInline = undefined;\n if (!isNullOrUndefined(startInline.nextNode)) {\n //Check the next node is a valid and returns inline.\n nextValidInline = this.getNextValidElement(startInline.nextNode);\n }\n //If field separator/end exists at end of paragraph, then move to next paragraph.\n if (isNullOrUndefined(nextValidInline)) {\n return startInline.characterFormat;\n }\n return nextValidInline.characterFormat;\n };\n /**\n * Return true if cursor point with in selection range\n * @private\n */\n Selection.prototype.checkCursorIsInSelection = function (widget, point) {\n if (isNullOrUndefined(this.start) || this.isEmpty || isNullOrUndefined(widget)) {\n return false;\n }\n var isSelected = false;\n do {\n if (this.selectedWidgets.containsKey(widget)) {\n var top_4 = void 0;\n var left = void 0;\n if (widget instanceof LineWidget) {\n top_4 = this.owner.selection.getTop(widget);\n left = this.owner.selection.getLeft(widget);\n }\n else {\n top_4 = widget.y;\n left = widget.x;\n }\n var widgetInfo = this.selectedWidgets.get(widget);\n isSelected = widgetInfo.left <= point.x && top_4 <= point.y &&\n top_4 + widget.height >= point.y && widgetInfo.left + widgetInfo.width >= point.x;\n }\n widget = (widget instanceof LineWidget) ? widget.paragraph : widget.containerWidget;\n } while (!isNullOrUndefined(widget) && !isSelected);\n return isSelected;\n };\n /**\n * Copy paragraph for to selection paragraph format\n * @private\n */\n Selection.prototype.copySelectionParagraphFormat = function () {\n var format = new WParagraphFormat();\n this.paragraphFormat.copyToFormat(format);\n return format;\n };\n /**\n * Get hyperlink display text\n * @private\n */\n // tslint:disable-next-line\n Selection.prototype.getHyperlinkDisplayText = function (paragraph, fieldSeparator, fieldEnd, isNestedField, format) {\n var para = paragraph;\n if (para !== fieldEnd.line.paragraph) {\n isNestedField = true;\n return { displayText: '<>', 'isNestedField': isNestedField, 'format': format };\n }\n var displayText = '';\n var lineIndex = para.childWidgets.indexOf(fieldSeparator.line);\n var index = para.childWidgets[lineIndex].children.indexOf(fieldSeparator);\n for (var j = lineIndex; j < para.childWidgets.length; j++) {\n var lineWidget = para.childWidgets[j];\n if (j !== lineIndex) {\n index = -1;\n }\n for (var i = index + 1; i < lineWidget.children.length; i++) {\n var inline = lineWidget.children[i];\n if (inline === fieldEnd) {\n return { 'displayText': displayText, 'isNestedField': isNestedField, 'format': format };\n }\n if (inline instanceof TextElementBox) {\n displayText += inline.text;\n format = inline.characterFormat;\n }\n else if (inline instanceof FieldElementBox) {\n if (inline instanceof FieldElementBox && inline.fieldType === 0\n && !isNullOrUndefined(inline.fieldEnd)) {\n if (isNullOrUndefined(inline.fieldSeparator)) {\n index = lineWidget.children.indexOf(inline.fieldEnd);\n }\n else {\n index = lineWidget.children.indexOf(inline.fieldSeparator);\n }\n }\n }\n else {\n isNestedField = true;\n return { 'displayText': '<>', 'isNestedField': isNestedField, 'format': format };\n }\n }\n }\n return { 'displayText': displayText, 'isNestedField': isNestedField, 'format': format };\n };\n /**\n * Navigates hyperlink on mouse Event.\n * @private\n */\n Selection.prototype.navigateHyperLinkOnEvent = function (cursorPoint, isTouchInput) {\n var _this = this;\n var widget = this.viewer.getLineWidget(cursorPoint);\n if (!isNullOrUndefined(widget)) {\n var hyperLinkField = this.getHyperLinkFieldInCurrentSelection(widget, cursorPoint);\n //Invokes Hyperlink navigation events.\n if (!isNullOrUndefined(hyperLinkField)) {\n this.viewer.updateTextPositionForSelection(cursorPoint, 1);\n this.fireRequestNavigate(hyperLinkField);\n setTimeout(function () {\n if (_this.viewer) {\n _this.viewer.isTouchInput = isTouchInput;\n _this.viewer.updateFocus();\n _this.viewer.isTouchInput = false;\n }\n });\n }\n }\n };\n /**\n * @private\n */\n Selection.prototype.getLinkText = function (fieldBegin) {\n var hyperlink = new Hyperlink(fieldBegin, this);\n var link = hyperlink.navigationLink;\n if (hyperlink.localReference.length > 0) {\n if (hyperlink.localReference[0] === '_' && (isNullOrUndefined(link) || link.length === 0)) {\n link = 'Current Document';\n }\n else {\n link += '#' + hyperlink.localReference;\n }\n }\n hyperlink.destroy();\n return link;\n };\n /**\n * Set Hyperlink content to tool tip element\n * @private\n */\n Selection.prototype.setHyperlinkContentToToolTip = function (fieldBegin, widget, xPos) {\n if (fieldBegin) {\n if (this.owner.contextMenuModule &&\n this.owner.contextMenuModule.contextMenuInstance.element.style.display === 'block') {\n return;\n }\n if (!this.toolTipElement) {\n this.toolTipElement = createElement('div', { className: 'e-de-tooltip' });\n this.viewer.viewerContainer.appendChild(this.toolTipElement);\n }\n this.toolTipElement.style.display = 'block';\n var l10n = new L10n('documenteditor', this.owner.defaultLocale);\n l10n.setLocale(this.owner.locale);\n var toolTipText = l10n.getConstant('Click to follow link');\n if (this.owner.useCtrlClickToFollowHyperlink) {\n toolTipText = 'Ctrl+' + toolTipText;\n }\n var linkText = this.getLinkText(fieldBegin);\n this.toolTipElement.innerHTML = linkText + '
    ' + toolTipText + '';\n var widgetTop = this.getTop(widget) * this.viewer.zoomFactor;\n var page = this.getPage(widget.paragraph);\n var containerWidth = this.viewer.viewerContainer.getBoundingClientRect().width + this.viewer.viewerContainer.scrollLeft;\n var left = page.boundingRectangle.x + xPos * this.viewer.zoomFactor;\n if ((left + this.toolTipElement.clientWidth + 10) > containerWidth) {\n left = left - ((this.toolTipElement.clientWidth - (containerWidth - left)) + 15);\n }\n var top_5 = this.getPageTop(page) + (widgetTop - this.toolTipElement.offsetHeight);\n top_5 = top_5 > this.viewer.viewerContainer.scrollTop ? top_5 : top_5 + widget.height + this.toolTipElement.offsetHeight;\n this.showToolTip(left, top_5);\n if (!isNullOrUndefined(this.toolTipField) && fieldBegin !== this.toolTipField) {\n this.toolTipObject.position = { X: left, Y: top_5 };\n }\n this.toolTipObject.show();\n this.toolTipField = fieldBegin;\n }\n else {\n this.hideToolTip();\n }\n };\n /**\n * Show hyperlink tooltip\n * @private\n */\n Selection.prototype.showToolTip = function (x, y) {\n if (!this.toolTipObject) {\n this.toolTipObject = new Popup(this.toolTipElement, {\n height: 'auto',\n width: 'auto',\n relateTo: this.viewer.viewerContainer.parentElement,\n position: { X: x, Y: y }\n });\n }\n };\n /**\n * Hide tooltip object\n * @private\n */\n Selection.prototype.hideToolTip = function () {\n this.toolTipField = undefined;\n if (this.toolTipObject) {\n this.toolTipObject.hide();\n this.toolTipObject.destroy();\n this.toolTipObject = undefined;\n this.toolTipElement.style.display = 'none';\n }\n };\n /**\n * Return hyperlink field\n * @private\n */\n Selection.prototype.getHyperLinkFieldInCurrentSelection = function (widget, cursorPosition) {\n var inline = undefined;\n var top = this.getTop(widget);\n var lineStartLeft = this.getLineStartLeft(widget);\n if (cursorPosition.y < top || cursorPosition.y > top + widget.height\n || cursorPosition.x < lineStartLeft || cursorPosition.x > lineStartLeft + widget.paragraph.width) {\n return undefined;\n }\n var left = widget.paragraph.x;\n var elementValues = this.getFirstElement(widget, left);\n left = elementValues.left;\n var element = elementValues.element;\n if (isNullOrUndefined(element)) {\n var width = this.viewer.textHelper.getParagraphMarkWidth(widget.paragraph.characterFormat);\n if (cursorPosition.x <= lineStartLeft + width || cursorPosition.x >= lineStartLeft + width) {\n //Check if paragraph is within a field result.\n var checkedFields = [];\n var field = this.getHyperLinkFields(widget.paragraph, checkedFields);\n checkedFields = [];\n checkedFields = undefined;\n return field;\n }\n }\n else {\n if (cursorPosition.x > left + element.margin.left) {\n for (var i = widget.children.indexOf(element); i < widget.children.length; i++) {\n element = widget.children[i];\n if (cursorPosition.x < left + element.margin.left + element.width || i === widget.children.length - 1) {\n break;\n }\n left += element.margin.left + element.width;\n }\n }\n inline = element;\n var width = element.margin.left + element.width;\n if (isNullOrUndefined(inline.nextNode)) {\n //Include width of Paragraph mark.\n width += this.viewer.textHelper.getParagraphMarkWidth(inline.line.paragraph.characterFormat);\n }\n if (cursorPosition.x <= left + width) {\n //Check if inline is within a field result.\n var checkedFields = [];\n var field = this.getHyperLinkFieldInternal(inline.line.paragraph, inline, checkedFields);\n checkedFields = [];\n checkedFields = undefined;\n return field;\n }\n }\n return undefined;\n };\n /**\n * Return field if paragraph contain hyperlink field\n * @private\n */\n Selection.prototype.getHyperlinkField = function () {\n if (isNullOrUndefined(this.end)) {\n return undefined;\n }\n var index = 0;\n var currentInline = this.end.currentWidget.getInline(this.end.offset, index);\n index = currentInline.index;\n var inline = currentInline.element;\n var checkedFields = [];\n var field = undefined;\n if (isNullOrUndefined(inline)) {\n field = this.getHyperLinkFields(this.end.paragraph, checkedFields);\n }\n else {\n var paragraph = inline.line.paragraph;\n field = this.getHyperLinkFieldInternal(paragraph, inline, checkedFields);\n }\n checkedFields = [];\n return field;\n };\n /**\n * @private\n */\n Selection.prototype.getHyperLinkFields = function (paragraph, checkedFields) {\n for (var i = 0; i < this.viewer.fields.length; i++) {\n if (checkedFields.indexOf(this.viewer.fields[i]) !== -1 || isNullOrUndefined(this.viewer.fields[i].fieldSeparator)) {\n continue;\n }\n else {\n checkedFields.push(this.viewer.fields[i]);\n }\n var field = this.getFieldCode(this.viewer.fields[i]);\n field = field.trim().toLowerCase();\n if (field.match('hyperlink ') && this.paragraphIsInFieldResult(this.viewer.fields[i], paragraph)) {\n return this.viewer.fields[i];\n }\n }\n // if (paragraph.containerWidget instanceof BodyWidget && !(paragraph instanceof WHeaderFooter)) {\n // return this.getHyperLinkFields((paragraph.con as WCompositeNode), checkedFields);\n // }\n return undefined;\n };\n /**\n * @private\n */\n Selection.prototype.getHyperLinkFieldInternal = function (paragraph, inline, fields) {\n for (var i = 0; i < this.viewer.fields.length; i++) {\n if (fields.indexOf(this.viewer.fields[i]) !== -1 || isNullOrUndefined(this.viewer.fields[i].fieldSeparator)) {\n continue;\n }\n else {\n fields.push(this.viewer.fields[i]);\n }\n var fieldCode = this.getFieldCode(this.viewer.fields[i]);\n fieldCode = fieldCode.trim().toLowerCase();\n if (fieldCode.match('hyperlink ') && (this.inlineIsInFieldResult(this.viewer.fields[i], inline) || this.isImageField())) {\n return this.viewer.fields[i];\n }\n }\n if (paragraph.containerWidget instanceof BodyWidget && !(paragraph instanceof HeaderFooterWidget)) {\n return this.getHyperLinkFieldInternal(paragraph.containerWidget, inline, fields);\n }\n return undefined;\n };\n /**\n * @private\n */\n Selection.prototype.getBlock = function (currentIndex) {\n if (currentIndex === '' || isNullOrUndefined(currentIndex)) {\n return undefined;\n }\n var index = { index: currentIndex };\n var page = this.start.getPage(index);\n var bodyIndex = index.index.indexOf(';');\n var value = index.index.substring(0, bodyIndex);\n index.index = index.index.substring(bodyIndex).replace(';', '');\n var bodyWidget = page.bodyWidgets[parseInt(value, 10)];\n return this.getBlockInternal(bodyWidget, index.index);\n };\n /**\n * Return Block relative to position\n * @private\n */\n Selection.prototype.getBlockInternal = function (widget, position) {\n if (position === '' || isNullOrUndefined(position)) {\n return undefined;\n }\n var index = position.indexOf(';');\n var value = position.substring(0, index);\n position = position.substring(index).replace(';', '');\n var node = widget;\n // if (node instanceof Widget && value === 'HF') {\n // //Gets the block in Header footers.\n // let blockObj: BlockInfo = this.getBlock((node as WSection).headersFooters, position);\n // tslint:disable-next-line:max-line-length\n // return { 'node': (!isNullOrUndefined(blockObj)) ? blockObj.node : undefined, 'position': (!isNullOrUndefined(blockObj)) ? blockObj.position : undefined };\n // }\n index = parseInt(value, 10);\n if (index >= 0 && index < widget.childWidgets.length) {\n var child = widget.childWidgets[(index)];\n if (position.indexOf(';') >= 0) {\n if (child instanceof ParagraphWidget) {\n if (position.indexOf(';') >= 0) {\n position = '0';\n }\n return child;\n }\n if (child instanceof BlockWidget) {\n var blockObj = this.getBlockInternal(child, position);\n return blockObj;\n }\n }\n else {\n return child;\n }\n }\n else {\n return node;\n }\n return node;\n };\n /**\n * Return true if inline is in field result\n * @private\n */\n Selection.prototype.inlineIsInFieldResult = function (fieldBegin, inline) {\n if (!isNullOrUndefined(fieldBegin.fieldEnd) && !isNullOrUndefined(fieldBegin.fieldSeparator)) {\n if (this.isExistBeforeInline(fieldBegin.fieldSeparator, inline)) {\n return this.isExistAfterInline(fieldBegin.fieldEnd, inline);\n }\n }\n return false;\n };\n /**\n * Retrieve true if paragraph is in field result\n * @private\n */\n Selection.prototype.paragraphIsInFieldResult = function (fieldBegin, paragraph) {\n if (!isNullOrUndefined(fieldBegin.fieldEnd) && !isNullOrUndefined(fieldBegin.fieldSeparator)) {\n var fieldParagraph = fieldBegin.fieldSeparator.line.paragraph;\n if (fieldBegin.fieldSeparator.line.paragraph === paragraph\n || this.isExistBefore(fieldParagraph, paragraph)) {\n var currentParagraph = fieldBegin.fieldEnd.line.paragraph;\n return (currentParagraph !== paragraph && this.isExistAfter(fieldParagraph, paragraph));\n }\n }\n return false;\n };\n /**\n * Return true if image is In field\n * @private\n */\n Selection.prototype.isImageField = function () {\n if (this.start.paragraph.isEmpty() || this.end.paragraph.isEmpty()) {\n return false;\n }\n var startPosition = this.start;\n var endPosition = this.end;\n if (!this.isForward) {\n startPosition = this.end;\n endPosition = this.start;\n }\n var indexInInline = 0;\n var inlineInfo = startPosition.paragraph.getInline(startPosition.offset, indexInInline);\n var inline = inlineInfo.element;\n indexInInline = inlineInfo.index;\n if (indexInInline === inline.length) {\n inline = this.getNextRenderedElementBox(inline, indexInInline);\n }\n inlineInfo = endPosition.paragraph.getInline(endPosition.offset, indexInInline);\n var endInline = inlineInfo.element;\n indexInInline = inlineInfo.index;\n if (inline instanceof FieldElementBox && inline.fieldType === 0\n && endInline instanceof FieldElementBox && endInline.fieldType === 1 && inline.fieldSeparator) {\n var fieldValue = inline.fieldSeparator.nextNode;\n if (fieldValue instanceof ImageElementBox && fieldValue.nextNode === endInline) {\n return true;\n }\n }\n return false;\n };\n /**\n * Select List Text\n * @private\n */\n Selection.prototype.selectListText = function () {\n var lineWidget = this.viewer.selectionLineWidget;\n var endOffset = '0';\n var selectionIndex = lineWidget.getHierarchicalIndex(endOffset);\n var startPosition = this.getTextPosition(selectionIndex);\n var endPosition = this.getTextPosition(selectionIndex);\n this.selectRange(startPosition, endPosition);\n this.highlightListText(this.viewer.selectionLineWidget);\n this.contextTypeInternal = 'List';\n };\n /**\n * Manually select the list text\n * @private\n */\n Selection.prototype.highlightListText = function (linewidget) {\n var width = linewidget.children[0].width;\n var left = this.viewer.getLeftValue(linewidget);\n var top = linewidget.paragraph.y;\n this.createHighlightBorder(linewidget, width, left, top);\n this.viewer.isListTextSelected = true;\n };\n /**\n * @private\n */\n Selection.prototype.updateImageSize = function (imageFormat) {\n this.owner.isShiftingEnabled = true;\n var startPosition = this.start;\n var endPosition = this.end;\n if (!this.isForward) {\n startPosition = this.end;\n endPosition = this.start;\n }\n var inline = null;\n var index = 0;\n var paragraph = startPosition.paragraph;\n if (paragraph === endPosition.paragraph\n && startPosition.offset + 1 === endPosition.offset) {\n var inlineObj = paragraph.getInline(endPosition.offset, index);\n inline = inlineObj.element;\n index = inlineObj.index;\n }\n if (inline instanceof ImageElementBox) {\n var width = inline.width;\n var height = inline.height;\n inline.width = imageFormat.width;\n inline.height = imageFormat.height;\n imageFormat.width = width;\n imageFormat.height = height;\n if (paragraph != null && paragraph.containerWidget != null && this.owner.editorModule) {\n var lineIndex = paragraph.childWidgets.indexOf(inline.line);\n var elementIndex = inline.line.children.indexOf(inline);\n this.viewer.layout.reLayoutParagraph(paragraph, lineIndex, elementIndex);\n this.highlightSelection(false);\n }\n }\n };\n /**\n * Gets selected table content\n * @private\n */\n Selection.prototype.getSelectedCellsInTable = function (table, startCell, endCell) {\n var startColumnIndex = startCell.columnIndex;\n var endColumnIndex = endCell.columnIndex + endCell.cellFormat.columnSpan - 1;\n var startRowindex = startCell.ownerRow.index;\n var endRowIndex = endCell.ownerRow.index;\n var cells = [];\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n if (row.index >= startRowindex && row.index <= endRowIndex) {\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n if (cell.columnIndex >= startColumnIndex && cell.columnIndex <= endColumnIndex) {\n cells.push(cell);\n }\n }\n }\n if (row.index > endRowIndex) {\n break;\n }\n }\n return cells;\n // return html;\n };\n /**\n * Copies the selected content to clipboard.\n */\n Selection.prototype.copy = function () {\n if (this.isEmpty) {\n return;\n }\n this.copySelectedContent(false);\n };\n /**\n * @private\n */\n Selection.prototype.copySelectedContent = function (isCut) {\n /* tslint:disable:no-any */\n var startPosition = this.start;\n var endPosition = this.end;\n if (!this.isForward) {\n startPosition = this.end;\n endPosition = this.start;\n }\n // tslint:disable-next-line:max-line-length\n var document = this.owner.sfdtExportModule.write(startPosition.currentWidget, startPosition.offset, endPosition.currentWidget, endPosition.offset, true);\n /* tslint:enable:no-any */\n if (this.owner.editorModule) {\n this.owner.editorModule.copiedData = JSON.stringify(document);\n }\n var html = this.htmlWriter.writeHtml(document);\n this.copyToClipboard(html);\n if (isCut) {\n this.owner.editorModule.handleCut(this);\n }\n this.viewer.updateFocus();\n };\n /**\n * Copy content to clipboard\n * @private\n */\n Selection.prototype.copyToClipboard = function (htmlContent) {\n window.getSelection().removeAllRanges();\n var div = document.createElement('div');\n div.style.left = '-10000px';\n div.style.top = '-10000px';\n div.innerHTML = htmlContent;\n document.body.appendChild(div);\n var range = document.createRange();\n range.selectNodeContents(div);\n window.getSelection().addRange(range);\n var copySuccess = false;\n try {\n copySuccess = document.execCommand('copy');\n }\n catch (e) {\n // Copying data to Clipboard can potentially fail - for example, if another application is holding Clipboard open.\n }\n finally {\n window.getSelection().removeAllRanges();\n div.parentNode.removeChild(div);\n this.viewer.viewerContainer.focus();\n }\n return copySuccess;\n };\n // Caret implementation starts\n /**\n * Shows caret in current selection position.\n * @private\n */\n Selection.prototype.showCaret = function () {\n // tslint:disable-next-line:max-line-length\n var page = !isNullOrUndefined(this.viewer.currentPage) ? this.viewer.currentPage : this.viewer.currentRenderingPage;\n if (isNullOrUndefined(page) || this.viewer.isRowOrCellResizing || this.owner.enableImageResizerMode && this.owner.imageResizerModule.isImageResizerVisible) {\n return;\n }\n var left = page.boundingRectangle.x;\n var right = page.boundingRectangle.width * this.viewer.zoomFactor + left;\n if (!this.owner.enableImageResizerMode || !this.owner.imageResizerModule.isImageResizerVisible) {\n // tslint:disable-next-line:max-line-length\n if (this.isEmpty && (!this.owner.isReadOnlyMode || this.owner.enableCursorOnReadOnly)) {\n var caretLeft = parseInt(this.caret.style.left.replace('px', ''), 10);\n if (caretLeft < left || caretLeft > right) {\n this.caret.style.display = 'none';\n }\n else {\n this.caret.style.display = 'block';\n }\n }\n else if (this.isImageSelected && !this.owner.enableImageResizerMode) {\n this.caret.style.display = 'block';\n }\n else {\n if (this.caret.style.display === 'block' || isNullOrUndefined(this)) {\n this.caret.style.display = 'none';\n }\n }\n }\n if (!isNullOrUndefined(this) && this.viewer.isTouchInput && !this.owner.isReadOnlyMode) {\n var caretStartLeft = parseInt(this.viewer.touchStart.style.left.replace('px', ''), 10) + 14;\n var caretEndLeft = parseInt(this.viewer.touchEnd.style.left.replace('px', ''), 10) + 14;\n var page_1 = this.getSelectionPage(this.start);\n if (page_1) {\n if (caretEndLeft < left || caretEndLeft > right) {\n this.viewer.touchEnd.style.display = 'none';\n }\n else {\n this.viewer.touchEnd.style.display = 'block';\n }\n if (!this.isEmpty) {\n left = page_1.boundingRectangle.x;\n right = page_1.boundingRectangle.width * this.viewer.zoomFactor + left;\n }\n if (caretStartLeft < left || caretStartLeft > right) {\n this.viewer.touchStart.style.display = 'none';\n }\n else {\n this.viewer.touchStart.style.display = 'block';\n }\n }\n }\n else {\n this.viewer.touchStart.style.display = 'none';\n this.viewer.touchEnd.style.display = 'none';\n }\n };\n /**\n * To set the editable div caret position\n * @private\n */\n Selection.prototype.setEditableDivCaretPosition = function (index) {\n this.viewer.editableDiv.focus();\n var child = this.viewer.editableDiv.childNodes[this.viewer.editableDiv.childNodes.length - 1];\n if (child) {\n var range = document.createRange();\n range.setStart(child, index);\n range.collapse(true);\n window.getSelection().removeAllRanges();\n window.getSelection().addRange(range);\n }\n };\n /**\n * Initializes caret.\n * @private\n */\n Selection.prototype.initCaret = function () {\n this.caret = createElement('div', {\n styles: 'position:absolute',\n className: 'e-de-blink-cursor e-de-cursor-animation'\n });\n this.viewer.viewerContainer.appendChild(this.caret);\n };\n /**\n * Updates caret position.\n * @private\n */\n Selection.prototype.updateCaretPosition = function () {\n var caretPosition = this.end.location;\n var page = this.getSelectionPage(this.end);\n if (page) {\n this.caret.style.left = page.boundingRectangle.x + (Math.round(caretPosition.x) * this.viewer.zoomFactor) + 'px';\n var caretInfo = this.updateCaretSize(this.owner.selection.end);\n var topMargin = caretInfo.topMargin;\n var caretHeight = caretInfo.height;\n var viewer = this.viewer;\n // tslint:disable-next-line:max-line-length\n var pageTop = (page.boundingRectangle.y - viewer.pageGap * (this.viewer.pages.indexOf(page) + 1)) * this.viewer.zoomFactor + viewer.pageGap * (this.viewer.pages.indexOf(page) + 1);\n this.caret.style.top = pageTop + (Math.round(caretPosition.y + topMargin) * this.viewer.zoomFactor) + 'px';\n if (this.owner.selection.characterFormat.baselineAlignment === 'Subscript') {\n this.caret.style.top = parseFloat(this.caret.style.top) + (parseFloat(this.caret.style.height) / 2) + 'px';\n }\n if (this.viewer.isTouchInput || this.viewer.touchStart.style.display !== 'none') {\n // tslint:disable-next-line:max-line-length\n this.viewer.touchStart.style.left = page.boundingRectangle.x + (Math.round(caretPosition.x) * this.viewer.zoomFactor - 14) + 'px';\n this.viewer.touchStart.style.top = pageTop + ((caretPosition.y + caretInfo.height) * this.viewer.zoomFactor) + 'px';\n // tslint:disable-next-line:max-line-length\n this.viewer.touchEnd.style.left = page.boundingRectangle.x + (Math.round(caretPosition.x) * this.viewer.zoomFactor - 14) + 'px';\n this.viewer.touchEnd.style.top = pageTop + ((caretPosition.y + caretInfo.height) * this.viewer.zoomFactor) + 'px';\n }\n }\n };\n /**\n * Gets current selected page\n */\n Selection.prototype.getSelectionPage = function (position) {\n var lineWidget = this.getLineWidgetInternal(position.currentWidget, position.offset, true);\n if (lineWidget) {\n return this.getPage(lineWidget.paragraph);\n }\n return undefined;\n };\n /**\n * Updates caret size.\n * @private\n */\n Selection.prototype.updateCaretSize = function (textPosition, skipUpdate) {\n var topMargin = 0;\n var isItalic = false;\n var caret;\n var index = 0;\n var caretHeight = 0;\n if (this.characterFormat.italic) {\n isItalic = this.characterFormat.italic;\n }\n if (textPosition.paragraph.isEmpty()) {\n var paragraph = textPosition.paragraph;\n var bottomMargin = 0;\n var paragraphInfo = this.getParagraphMarkSize(paragraph, topMargin, bottomMargin);\n topMargin = paragraphInfo.topMargin;\n bottomMargin = paragraphInfo.bottomMargin;\n var height = paragraphInfo.height;\n caretHeight = topMargin < 0 ? topMargin + height : height;\n if (!skipUpdate) {\n this.caret.style.height = caretHeight * this.viewer.zoomFactor + 'px';\n }\n topMargin = 0;\n }\n else {\n var inlineInfo = textPosition.currentWidget.getInline(textPosition.offset, index);\n index = inlineInfo.index;\n var inline = inlineInfo.element;\n if (!isNullOrUndefined(inline)) {\n caret = this.getCaretHeight(inline, index, inline.characterFormat, true, topMargin, isItalic);\n caretHeight = caret.height;\n if (!skipUpdate) {\n this.caret.style.height = caret.height * this.viewer.zoomFactor + 'px';\n }\n }\n }\n if (!skipUpdate) {\n if (isItalic) {\n this.caret.style.transform = 'rotate(13deg)';\n }\n else {\n this.caret.style.transform = '';\n }\n }\n return {\n 'topMargin': topMargin,\n 'height': caretHeight\n };\n };\n /**\n * Updates caret to page.\n * @private\n */\n Selection.prototype.updateCaretToPage = function (startPosition, endPage) {\n if (!isNullOrUndefined(endPage)) {\n this.viewer.selectionEndPage = endPage;\n if (this.owner.selection.isEmpty) {\n this.viewer.selectionStartPage = endPage;\n }\n else {\n // tslint:disable-next-line:max-line-length\n var startLineWidget = this.getLineWidgetParagraph(startPosition.offset, startPosition.paragraph.childWidgets[0]);\n //Gets start page.\n var startPage = this.getPage(startLineWidget.paragraph);\n if (!isNullOrUndefined(startPage)) {\n this.viewer.selectionStartPage = startPage;\n }\n }\n }\n this.checkForCursorVisibility();\n };\n /**\n * Gets caret bottom position.\n * @private\n */\n Selection.prototype.getCaretBottom = function (textPosition, isEmptySelection) {\n var bottom = textPosition.location.y;\n if (textPosition.paragraph.isEmpty()) {\n var paragraph = textPosition.paragraph;\n var topMargin = 0;\n var bottomMargin = 0;\n var sizeInfo = this.getParagraphMarkSize(paragraph, topMargin, bottomMargin);\n topMargin = sizeInfo.topMargin;\n bottomMargin = sizeInfo.bottomMargin;\n bottom += sizeInfo.height;\n bottom += topMargin;\n if (!isEmptySelection) {\n bottom += bottomMargin;\n }\n }\n else {\n var index = 0;\n var inlineInfo = textPosition.paragraph.getInline(textPosition.offset, index);\n var inline = inlineInfo.element;\n index = inlineInfo.index;\n var topMargin = 0;\n var isItalic = false;\n // tslint:disable-next-line:max-line-length\n var caretHeightInfo = this.getCaretHeight(inline, index, inline.characterFormat, false, topMargin, isItalic);\n topMargin = caretHeightInfo.topMargin;\n isItalic = caretHeightInfo.isItalic;\n bottom += caretHeightInfo.height;\n if (isEmptySelection) {\n bottom -= HelperMethods.convertPointToPixel(textPosition.paragraph.paragraphFormat.afterSpacing);\n }\n }\n return bottom;\n };\n /**\n * Checks for cursor visibility.\n * @param isTouch\n * @private\n */\n Selection.prototype.checkForCursorVisibility = function () {\n this.showCaret();\n };\n // caret implementation ends\n /**\n * Keyboard shortcuts\n * @private\n */\n // tslint:disable:max-func-body-length\n Selection.prototype.onKeyDownInternal = function (event, ctrl, shift, alt) {\n var key = event.which || event.keyCode;\n if (ctrl && !shift && !alt) {\n this.viewer.isControlPressed = true;\n switch (key) {\n // case 9:\n // event.preventDefault();\n // if (this.owner.acceptTab) {\n // this.selection.handleTabKey(false, false);\n // }\n // break;\n case 35:\n this.handleControlEndKey();\n break;\n case 36:\n this.handleControlHomeKey();\n break;\n case 37:\n this.handleControlLeftKey();\n break;\n case 38:\n this.handleControlUpKey();\n break;\n case 39:\n this.handleControlRightKey();\n break;\n case 40:\n this.handleControlDownKey();\n break;\n case 65:\n this.owner.selection.selectAll();\n break;\n case 67:\n event.preventDefault();\n this.copy();\n break;\n case 70:\n event.preventDefault();\n if (!isNullOrUndefined(this.owner.optionsPaneModule)) {\n this.owner.optionsPaneModule.showHideOptionsPane(true);\n }\n break;\n }\n }\n else if (shift && !ctrl && !alt) {\n switch (key) {\n case 35:\n this.handleShiftEndKey();\n event.preventDefault();\n break;\n case 36:\n this.handleShiftHomeKey();\n event.preventDefault();\n break;\n case 37:\n this.handleShiftLeftKey();\n event.preventDefault();\n break;\n case 38:\n this.handleShiftUpKey();\n event.preventDefault();\n break;\n case 39:\n this.handleShiftRightKey();\n event.preventDefault();\n break;\n case 40:\n this.handleShiftDownKey();\n event.preventDefault();\n break;\n }\n }\n else if (shift && ctrl && !alt) {\n switch (key) {\n case 35:\n this.handleControlShiftEndKey();\n break;\n case 36:\n this.handleControlShiftHomeKey();\n break;\n case 37:\n this.handleControlShiftLeftKey();\n break;\n case 38:\n this.handleControlShiftUpKey();\n break;\n case 39:\n this.handleControlShiftRightKey();\n break;\n case 40:\n this.handleControlShiftDownKey();\n break;\n }\n }\n else {\n switch (key) {\n // case 9:\n // event.preventDefault();\n // if (this.owner.acceptTab) {\n // this.handleTabKey(true, false);\n // }\n // break; \n case 33:\n event.preventDefault();\n this.viewer.viewerContainer.scrollTop -= this.viewer.visibleBounds.height;\n break;\n case 34:\n event.preventDefault();\n this.viewer.viewerContainer.scrollTop += this.viewer.visibleBounds.height;\n break;\n case 35:\n this.handleEndKey();\n event.preventDefault();\n break;\n case 36:\n this.handleHomeKey();\n event.preventDefault();\n break;\n case 37:\n this.handleLeftKey();\n event.preventDefault();\n break;\n case 38:\n this.handleUpKey();\n event.preventDefault();\n break;\n case 39:\n this.handleRightKey();\n event.preventDefault();\n break;\n case 40:\n this.handleDownKey();\n event.preventDefault();\n break;\n }\n }\n if (!this.owner.isReadOnlyMode) {\n this.owner.editorModule.onKeyDownInternal(event, ctrl, shift, alt);\n }\n if (this.owner.optionsPaneModule) {\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(this.owner.optionsPaneModule.searchHighlighters) && this.owner.optionsPaneModule.searchHighlighters.length > 0) {\n this.owner.optionsPaneModule.clearSearchHighlight();\n }\n }\n if (event.keyCode === 27 || event.which === 27) {\n if (!isNullOrUndefined(this.owner.optionsPaneModule)) {\n this.owner.optionsPaneModule.showHideOptionsPane(false);\n }\n if (this.owner.enableHeaderAndFooter) {\n this.disableHeaderFooter();\n }\n }\n };\n //#region Enable or disable Header Footer\n /**\n * @private\n */\n Selection.prototype.checkAndEnableHeaderFooter = function (point, pagePoint) {\n var page = this.viewer.currentPage;\n if (this.isCursorInsidePageRect(point, page)) {\n if (this.isCursorInHeaderRegion(point, page)) {\n if (this.owner.enableHeaderAndFooter) {\n return false;\n }\n return this.enableHeadersFootersRegion(page.headerWidget);\n }\n if (this.isCursorInFooterRegion(point, page)) {\n if (this.owner.enableHeaderAndFooter) {\n return false;\n }\n return this.enableHeadersFootersRegion(page.footerWidget);\n }\n }\n if (this.owner.enableHeaderAndFooter) {\n this.owner.enableHeaderAndFooter = false;\n this.viewer.updateTextPositionForSelection(pagePoint, 1);\n return true;\n }\n return false;\n };\n /**\n * @private\n */\n Selection.prototype.isCursorInsidePageRect = function (point, page) {\n if ((this.viewer.containerLeft + point.x) >= page.boundingRectangle.x &&\n (this.viewer.containerLeft + point.x) <= (page.boundingRectangle.x + (page.boundingRectangle.width * this.viewer.zoomFactor))) {\n return true;\n }\n return false;\n };\n /**\n * @private\n */\n Selection.prototype.isCursorInHeaderRegion = function (point, page) {\n var pageTop = this.getPageTop(page);\n var headerHeight = 0;\n if (page.headerWidget) {\n headerHeight = (page.headerWidget.y + page.headerWidget.height);\n }\n var height = Math.max(headerHeight, HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.topMargin))\n * this.viewer.zoomFactor;\n if ((this.viewer.containerTop + point.y) >= pageTop && (this.viewer.containerTop + point.y) <= pageTop + height) {\n return true;\n }\n return false;\n };\n /**\n * @private\n */\n Selection.prototype.isCursorInFooterRegion = function (point, page) {\n var pageRect = page.boundingRectangle;\n var pageTop = this.getPageTop(page);\n var pageBottom = pageTop + (pageRect.height * this.viewer.zoomFactor);\n var footerDistance = HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.footerDistance);\n var footerHeight = 0;\n if (page.footerWidget) {\n footerHeight = page.footerWidget.height;\n }\n // tslint:disable-next-line:max-line-length\n var height = (pageRect.height -\n Math.max(footerHeight + footerDistance, HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.bottomMargin))) * this.viewer.zoomFactor;\n if ((this.viewer.containerTop + point.y) <= pageBottom && (this.viewer.containerTop + point.y) >= pageTop + height) {\n return true;\n }\n return false;\n };\n /**\n * @private\n */\n Selection.prototype.enableHeadersFootersRegion = function (widget) {\n this.owner.enableHeaderAndFooter = true;\n this.updateTextPositionForBlockContainer(widget);\n return true;\n };\n /**\n * @private\n */\n Selection.prototype.updateTextPositionForBlockContainer = function (widget) {\n var block = widget.firstChild;\n if (block instanceof TableWidget) {\n block = this.getFirstBlockInFirstCell(block);\n }\n this.selectParagraph(block, true);\n };\n /**\n * Disable Header footer\n * @private\n */\n Selection.prototype.disableHeaderFooter = function () {\n var page = this.getPage(this.start.paragraph);\n this.updateTextPositionForBlockContainer(page.bodyWidgets[0]);\n this.owner.enableHeaderAndFooter = false;\n };\n //#endregion\n /**\n * @private\n */\n Selection.prototype.destroy = function () {\n if (!isNullOrUndefined(this.contextTypeInternal)) {\n this.contextTypeInternal = undefined;\n }\n this.caret = undefined;\n this.contextTypeInternal = undefined;\n this.upDownSelectionLength = undefined;\n this.viewer = undefined;\n this.owner = undefined;\n };\n /**\n * Navigates to the specified bookmark.\n * @param name\n * @param moveToStart\n * @private\n */\n Selection.prototype.navigateBookmark = function (name, moveToStart) {\n var bookmarks = this.viewer.bookmarks;\n if (bookmarks.containsKey(name)) {\n //bookmark start element\n var bookmrkElmnt = bookmarks.get(name);\n var offset = bookmrkElmnt.line.getOffset(bookmrkElmnt, 1);\n var startPosition = new TextPosition(this.viewer.owner);\n startPosition.setPositionParagraph(bookmrkElmnt.line, offset);\n if (moveToStart) {\n this.viewer.selection.selectRange(startPosition, startPosition);\n }\n else {\n //bookmark end element\n var bookmrkEnd = bookmrkElmnt.reference;\n var endoffset = bookmrkEnd.line.getOffset(bookmrkEnd, 0);\n var endPosition = new TextPosition(this.viewer.owner);\n endPosition.setPositionParagraph(bookmrkEnd.line, endoffset);\n //selects the bookmark range\n this.viewer.selection.selectRange(startPosition, endPosition);\n }\n }\n };\n /**\n * Selects the specified bookmark.\n * @param name\n */\n Selection.prototype.selectBookmark = function (name) {\n this.navigateBookmark(name);\n };\n /**\n * Returns the toc field from the selection.\n * @private\n */\n Selection.prototype.getTocField = function () {\n var paragraph = this.start.paragraph;\n var tocPara = undefined;\n while ((paragraph !== undefined && this.isTocStyle(paragraph))) {\n tocPara = paragraph;\n paragraph = paragraph.previousRenderedWidget;\n }\n if (tocPara !== undefined) {\n var lineWidget = tocPara.childWidgets[0];\n if (lineWidget !== undefined) {\n return lineWidget.children[0];\n }\n }\n return undefined;\n };\n /**\n * Returns true if the paragraph has toc style.\n */\n Selection.prototype.isTocStyle = function (paragraph) {\n var style = paragraph.paragraphFormat.baseStyle;\n return (style !== undefined && (style.name.toLowerCase().indexOf('toc') !== -1));\n };\n return Selection;\n}());\nexport { Selection };\n","/**\n * @private\n */\nvar TextSearchResult = /** @class */ (function () {\n function TextSearchResult(owner) {\n this.startIn = undefined;\n this.endIn = undefined;\n this.owner = owner;\n }\n Object.defineProperty(TextSearchResult.prototype, \"viewer\", {\n get: function () {\n return this.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextSearchResult.prototype, \"start\", {\n get: function () {\n return this.startIn;\n },\n set: function (value) {\n this.startIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextSearchResult.prototype, \"end\", {\n get: function () {\n return this.endIn;\n },\n set: function (value) {\n this.endIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextSearchResult.prototype, \"text\", {\n get: function () {\n return this.viewer.selection.getTextInternal(this.start, this.end, false);\n },\n enumerable: true,\n configurable: true\n });\n TextSearchResult.prototype.destroy = function () {\n this.start = undefined;\n this.end = undefined;\n };\n return TextSearchResult;\n}());\nexport { TextSearchResult };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { TextSearchResult } from './text-search-result';\n/**\n * @private\n */\nvar TextSearchResults = /** @class */ (function () {\n function TextSearchResults(owner) {\n this.currentIndex = -1;\n this.owner = owner;\n }\n Object.defineProperty(TextSearchResults.prototype, \"length\", {\n get: function () {\n if (this.innerList === undefined) {\n return 0;\n }\n return this.innerList.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextSearchResults.prototype, \"currentSearchResult\", {\n get: function () {\n if (this.innerList === undefined || this.currentIndex < 0 || this.currentIndex >= this.length) {\n return undefined;\n }\n return this.innerList[this.currentIndex];\n },\n enumerable: true,\n configurable: true\n });\n TextSearchResults.prototype.addResult = function () {\n var textSearchResult = new TextSearchResult(this.owner);\n if (isNullOrUndefined(this.innerList)) {\n this.innerList = [];\n }\n this.innerList.push(textSearchResult);\n return textSearchResult;\n };\n TextSearchResults.prototype.clearResults = function () {\n this.currentIndex = -1;\n if (!isNullOrUndefined(this.innerList)) {\n for (var i = this.innerList.length - 1; i >= 0; i--) {\n this.innerList[i].destroy();\n this.innerList.splice(i, 1);\n }\n }\n };\n TextSearchResults.prototype.indexOf = function (result) {\n if (isNullOrUndefined(this.innerList)) {\n return -1;\n }\n return this.innerList.indexOf(result);\n };\n TextSearchResults.prototype.destroy = function () {\n if (!isNullOrUndefined(this.innerList)) {\n this.clearResults();\n }\n this.innerList = undefined;\n };\n return TextSearchResults;\n}());\nexport { TextSearchResults };\n","import { Dictionary } from '../../base/dictionary';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { TextPosition } from '../selection/selection-helper';\nimport { TextElementBox, ParagraphWidget, ListTextElementBox, FieldElementBox } from '../viewer/page';\nimport { TextSearchResults } from './text-search-results';\n/**\n * @private\n */\nvar TextSearch = /** @class */ (function () {\n function TextSearch(owner) {\n this.wordBefore = '\\\\b';\n this.wordAfter = '\\\\b';\n this.owner = owner;\n }\n Object.defineProperty(TextSearch.prototype, \"viewer\", {\n get: function () {\n return this.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n TextSearch.prototype.find = function (pattern, findOption) {\n return this.findNext(pattern, findOption, '0;0;0');\n };\n // tslint:disable-next-line:max-line-length \n TextSearch.prototype.findNext = function (pattern, findOption, hierarchicalPosition) {\n if (typeof pattern === 'string') {\n pattern = this.stringToRegex(pattern, findOption);\n }\n if (hierarchicalPosition === undefined) {\n hierarchicalPosition = '0;0;0';\n }\n var results = new TextSearchResults(this.owner);\n this.findDocument(results, pattern, true, findOption, hierarchicalPosition);\n return results.length > 0, results.currentSearchResult;\n };\n TextSearch.prototype.stringToRegex = function (textToFind, option) {\n if (textToFind.indexOf('\\\\') > -1) {\n textToFind = textToFind.split('\\\\').join('\\\\\\\\');\n }\n if (textToFind.indexOf('.') > -1) {\n textToFind = '\\\\' + textToFind;\n }\n if (option === 'WholeWord' || option === 'CaseSensitiveWholeWord') {\n textToFind = this.wordBefore + textToFind + this.wordAfter;\n }\n return new RegExp(textToFind, (option === 'CaseSensitive' || option === 'CaseSensitiveWholeWord') ? 'g' : 'ig');\n };\n TextSearch.prototype.isPatternEmpty = function (pattern) {\n var wordEmpty = this.wordBefore + this.wordAfter;\n var patternRegExp = pattern.toString();\n return (patternRegExp.length === 0 || patternRegExp === wordEmpty);\n };\n // tslint:disable-next-line:max-line-length \n TextSearch.prototype.findAll = function (pattern, findOption, hierarchicalPosition) {\n if (typeof pattern === 'string') {\n pattern = this.stringToRegex(pattern, findOption);\n }\n if (hierarchicalPosition === undefined) {\n hierarchicalPosition = '0;0;0';\n }\n var results = new TextSearchResults(this.owner);\n this.findDocument(results, pattern, false, findOption, hierarchicalPosition);\n if (results.length > 0 && results.currentIndex < 0) {\n results.currentIndex = 0;\n }\n if (!isNullOrUndefined(results.currentSearchResult)) {\n return results;\n }\n return undefined;\n };\n // tslint:disable-next-line:max-line-length \n TextSearch.prototype.findDocument = function (results, pattern, isFirstMatch, findOption, hierachicalPosition) {\n if (this.isPatternEmpty(pattern)) {\n return;\n }\n if (findOption === undefined) {\n findOption = 'None';\n }\n var inline = undefined;\n var selectionEnd = undefined;\n if (hierachicalPosition !== undefined) {\n selectionEnd = this.owner.selection.end;\n }\n if (hierachicalPosition !== undefined && isFirstMatch && selectionEnd !== undefined && selectionEnd.paragraph !== undefined) {\n if (selectionEnd.paragraph instanceof ParagraphWidget) {\n var indexInInline = 0;\n // tslint:disable-next-line:max-line-length \n // IndexInInline Handled specifically for simple find operation to start from starting point\n var inlineElement = selectionEnd.currentWidget.getInline(this.owner.selection.start.offset, indexInInline);\n inline = inlineElement.element;\n indexInInline = inlineElement.index;\n if (!isNullOrUndefined(inline)) {\n var nextParagraphWidget = undefined;\n // tslint:disable-next-line:max-line-length \n nextParagraphWidget = this.findInline(inline, pattern, findOption, indexInInline, isFirstMatch, results, selectionEnd);\n while (results.length === 0 && !isNullOrUndefined(nextParagraphWidget)) {\n while (!isNullOrUndefined(nextParagraphWidget) && nextParagraphWidget.childWidgets.length === 0) {\n // tslint:disable-next-line:max-line-length \n nextParagraphWidget = this.owner.selection.getNextParagraph(nextParagraphWidget.containerWidget);\n }\n if (isNullOrUndefined(nextParagraphWidget)) {\n break;\n }\n var lineWidget = nextParagraphWidget.childWidgets[0];\n if (lineWidget.children[0] instanceof ListTextElementBox) {\n inline = (lineWidget.children[2] instanceof TextElementBox) ? lineWidget.children[2] : undefined;\n }\n else {\n inline = lineWidget.children[0];\n }\n if (isNullOrUndefined(inline)) {\n break;\n }\n // tslint:disable-next-line:max-line-length \n nextParagraphWidget = this.findInline(inline, pattern, findOption, 0, isFirstMatch, results, selectionEnd);\n }\n if (results.length > 0) {\n return;\n }\n }\n }\n }\n var section;\n section = this.viewer.pages[0].bodyWidgets[0];\n while (!isNullOrUndefined(section) && section.childWidgets.length === 0) {\n section = section.nextWidget;\n }\n if (isNullOrUndefined(section) || section.childWidgets.length === 0) {\n return;\n }\n var paragraphWidget = this.owner.selection.getFirstParagraphBlock(section.childWidgets[0]);\n // tslint:disable-next-line:max-line-length \n while (!isNullOrUndefined(paragraphWidget) && paragraphWidget.childWidgets.length === 1 && paragraphWidget.childWidgets[0].children.length === 0) {\n paragraphWidget = this.owner.selection.getNextParagraphBlock(paragraphWidget);\n }\n while (!isNullOrUndefined(paragraphWidget) && paragraphWidget.childWidgets.length > 0) {\n var inlineElement = paragraphWidget.childWidgets[0];\n var inlineEle = inlineElement.children[0];\n if (isNullOrUndefined(inlineEle)) {\n break;\n }\n this.findInline(inlineEle, pattern, findOption, 0, isFirstMatch, results, selectionEnd);\n paragraphWidget = this.owner.selection.getNextParagraphBlock(paragraphWidget);\n // tslint:disable-next-line:max-line-length \n while (!isNullOrUndefined(paragraphWidget) && (paragraphWidget.childWidgets.length === 1) && paragraphWidget.childWidgets[0].children.length === 0) {\n paragraphWidget = this.owner.selection.getNextParagraphBlock(paragraphWidget);\n }\n }\n if (isFirstMatch && !isNullOrUndefined(results) && results.length > 0) {\n return;\n }\n };\n // tslint:disable-next-line:max-line-length \n TextSearch.prototype.findInline = function (inlineElement, pattern, option, indexInInline, isFirstMatch, results, selectionEnd) {\n var inlines = inlineElement;\n var stringBuilder = '';\n var spans = new Dictionary();\n //tslint:disable no-constant-condition\n do {\n // tslint:disable-next-line:max-line-length \n if (inlineElement instanceof TextElementBox && (!isNullOrUndefined(inlineElement.text) && inlineElement.text !== '')) {\n spans.add(inlineElement, stringBuilder.length);\n // IndexInInline Handled specifically for simple find operation to start from starting point\n if (inlineElement === inlines) {\n stringBuilder = stringBuilder + (inlineElement.text.substring(indexInInline));\n }\n else {\n stringBuilder = stringBuilder + (inlineElement.text);\n }\n }\n else if (inlineElement instanceof FieldElementBox) {\n var fieldBegin = inlineElement;\n if (!isNullOrUndefined(fieldBegin.fieldEnd)) {\n // tslint:disable-next-line:max-line-length \n inlineElement = isNullOrUndefined(fieldBegin.fieldSeparator) ? fieldBegin.fieldEnd : fieldBegin.fieldSeparator;\n }\n }\n if (!isNullOrUndefined(inlineElement) && isNullOrUndefined(inlineElement.nextNode)) {\n break;\n }\n if (!isNullOrUndefined(inlineElement)) {\n inlineElement = inlineElement.nextNode;\n }\n } while (true);\n var text = stringBuilder.toString();\n var matches = [];\n var matchObject;\n //tslint:disable no-conditional-assignment\n while (!isNullOrUndefined(matchObject = pattern.exec(text))) {\n matches.push(matchObject);\n }\n for (var i = 0; i < matches.length; i++) {\n var match = matches[i];\n var result = results.addResult();\n var spanKeys = spans.keys;\n for (var i_1 = 0; i_1 < spanKeys.length; i_1++) {\n var span = spanKeys[i_1];\n var startIndex = spans.get(span);\n var spanLength = span.length;\n // IndexInInline Handled specifically for simple find operation to start from starting point\n if (span === inlines) {\n spanLength -= indexInInline;\n }\n if (isNullOrUndefined(result.start) && match.index < startIndex + spanLength) {\n var index = match.index - startIndex;\n // IndexInInline Handled specifically for simple find operation to start from starting point\n if (span === inlines) {\n index += indexInInline;\n }\n var offset = (span.line).getOffset(span, index);\n result.start = this.getTextPosition(span.line, offset.toString());\n result.start.location = this.owner.selection.getPhysicalPositionInternal(span.line, offset, true);\n result.start.setPositionParagraph(span.line, offset);\n }\n if (match.index + match[0].length <= startIndex + spanLength) {\n var index = (match.index + match[0].length) - startIndex;\n // IndexInInline Handled specifically for simple find operation to start from starting point\n if (span === inlines) {\n index += indexInInline;\n }\n var offset = (span.line).getOffset(span, index);\n result.end = this.getTextPosition(span.line, offset.toString());\n result.end.location = this.owner.selection.getPhysicalPositionInternal(span.line, offset, true);\n result.end.setPositionParagraph(span.line, offset);\n break;\n }\n }\n if (isFirstMatch) {\n results.currentIndex = 0;\n return undefined;\n }\n else if (results.currentIndex < 0 && selectionEnd.isExistBefore(result.start)) {\n // } else if (results.currentIndex < 0 && ) {\n results.currentIndex = results.indexOf(result);\n }\n }\n // tslint:disable-next-line:max-line-length\n var paragraphWidget = this.owner.selection.getNextParagraphBlock(inlineElement.line.paragraph);\n return paragraphWidget;\n };\n TextSearch.prototype.getTextPosition = function (lineWidget, hierarchicalIndex) {\n var textPosition = new TextPosition(this.owner);\n var index = textPosition.getHierarchicalIndex(lineWidget, hierarchicalIndex);\n textPosition.setPositionForCurrentIndex(index);\n return textPosition;\n };\n return TextSearch;\n}());\nexport { TextSearch };\n/**\n * @private\n */\nvar SearchWidgetInfo = /** @class */ (function () {\n function SearchWidgetInfo(left, width) {\n this.leftInternal = 0;\n this.widthInternal = 0;\n this.leftInternal = left;\n this.widthInternal = width;\n }\n Object.defineProperty(SearchWidgetInfo.prototype, \"left\", {\n get: function () {\n return this.leftInternal;\n },\n set: function (value) {\n this.leftInternal = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SearchWidgetInfo.prototype, \"width\", {\n get: function () {\n return this.widthInternal;\n },\n set: function (value) {\n this.widthInternal = value;\n },\n enumerable: true,\n configurable: true\n });\n return SearchWidgetInfo;\n}());\nexport { SearchWidgetInfo };\n","import { Dictionary } from '../../base/dictionary';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { TextPosition } from '../selection/selection-helper';\nimport { TextElementBox, FieldElementBox } from '../viewer/page';\nimport { TextSearch } from '../search/text-search';\nimport { TextSearchResults } from '../search/text-search-results';\n/**\n * Search module\n */\nvar Search = /** @class */ (function () {\n /**\n * @private\n */\n function Search(owner) {\n this.owner = owner;\n this.textSearch = new TextSearch(this.owner);\n this.textSearchResults = new TextSearchResults(this.owner);\n }\n Object.defineProperty(Search.prototype, \"viewer\", {\n /**\n * @private\n */\n get: function () {\n return this.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Get the module name.\n */\n Search.prototype.getModuleName = function () {\n return 'Search';\n };\n /**\n * Finds the immediate occurrence of specified text from cursor position in the document.\n * @param {string} text\n * @param {FindOption} findOption? - Default value of ‘findOptions’ parameter is 'None'.\n * @private\n */\n Search.prototype.find = function (text, findOptions) {\n if (isNullOrUndefined(findOptions)) {\n findOptions = 'None';\n }\n var textSearch = new TextSearch(this.owner);\n var result = textSearch.find(text, findOptions);\n if (!isNullOrUndefined(result)) {\n this.navigate(result);\n }\n };\n /**\n * Finds all occurrence of specified text in the document.\n * @param {string} text\n * @param {FindOption} findOption? - Default value of ‘findOptions’ parameter is 'None'.\n * @private\n */\n Search.prototype.findAll = function (text, findOptions) {\n if (isNullOrUndefined(findOptions)) {\n findOptions = 'None';\n }\n var textSearch = new TextSearch(this.owner);\n var results = textSearch.findAll(text, findOptions);\n if (!isNullOrUndefined(results) && results.length > 0) {\n this.navigate(results.innerList[results.currentIndex]);\n this.highlight(results);\n }\n };\n /**\n * Find the textToFind string in current document and replace the specified string.\n * @param {string} textToFind\n * @param {string} textToReplace\n * @param {FindOption} findOptions? - Default value of ‘findOptions’ parameter is FindOption.None.\n * @private\n */\n Search.prototype.replaceAllInternal = function (textToFind, textToReplace, findOptions) {\n if ((textToFind === '' || isNullOrUndefined(textToFind)) || (textToReplace === '' || isNullOrUndefined(textToReplace))) {\n return;\n }\n if (isNullOrUndefined(findOptions)) {\n findOptions = 'None';\n }\n var textSearch = new TextSearch(this.owner);\n var textSearchResults = new TextSearchResults(this.owner);\n var results = textSearch.findAll(textToFind, findOptions);\n if (!isNullOrUndefined(results) && results.length > 0) {\n this.owner.searchModule.navigate(results.innerList[results.currentIndex]);\n this.owner.searchModule.highlight(results);\n this.replaceAll(textToReplace, textSearchResults);\n }\n };\n /**\n * Find the textToFind string in current document and replace the specified string.\n * @param {string} textToFind\n * @param {string} textToReplace\n * @param {FindOption} findOptions? - Default value of ‘findOptions’ parameter is FindOption.None.\n * @private\n */\n Search.prototype.replaceInternal = function (textToFind, textToReplace, findOptions) {\n if ((isNullOrUndefined(textToFind) || textToFind === '') || (textToReplace === '' || isNullOrUndefined(textToReplace))) {\n return;\n }\n if (isNullOrUndefined(findOptions)) {\n findOptions = 'None';\n }\n var textSearch = new TextSearch(this.owner);\n var textSearchResults = new TextSearchResults(this.owner);\n var result = textSearch.find(textToFind, findOptions);\n if (!isNullOrUndefined(result)) {\n this.navigate(result);\n textSearchResults.addResult();\n textSearchResults.innerList[0] = result;\n this.replace(textToReplace, result, textSearchResults);\n var index = this.owner.selection.end.getHierarchicalIndexInternal();\n result = textSearch.findNext(textToFind, findOptions, index);\n textSearchResults.addResult();\n textSearchResults.innerList[0] = result;\n this.owner.searchModule.navigate(result);\n }\n };\n /**\n * @private\n */\n Search.prototype.navigate = function (textSearchResult) {\n var start = textSearchResult.start;\n var end = textSearchResult.end;\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(this.owner) && !isNullOrUndefined(this.owner.selection) && !isNullOrUndefined(start) && !isNullOrUndefined(end) && !isNullOrUndefined(start.paragraph) && !isNullOrUndefined(end.paragraph)) {\n this.owner.selection.selectRange(start, end);\n }\n };\n /**\n * @private\n */\n Search.prototype.highlight = function (textSearchResults) {\n if (this.owner.optionsPaneModule) {\n this.owner.optionsPaneModule.searchHighlighters = new Dictionary();\n for (var i = 0; i < textSearchResults.innerList.length; i++) {\n var result = textSearchResults.innerList[i];\n this.highlightResult(result);\n }\n this.viewer.renderVisiblePages();\n }\n };\n /**\n * @private\n */\n Search.prototype.highlightResult = function (result) {\n this.owner.optionsPaneModule.highlightSearchResult(result.start.paragraph, result.start, result.end);\n };\n /**\n * @private\n */\n Search.prototype.addSearchResultItems = function (result) {\n if (isNullOrUndefined(result) || result === '') {\n return;\n }\n if (isNullOrUndefined(this.owner.findResultsList)) {\n this.owner.findResultsList = [];\n }\n this.owner.findResultsList.push(result);\n };\n /**\n * @private\n */\n Search.prototype.addFindResultView = function (textSearchResults) {\n for (var i = 0; i < textSearchResults.innerList.length; i++) {\n var result = textSearchResults.innerList[i];\n this.addFindResultViewForSearch(result);\n }\n };\n /**\n * @private\n */\n Search.prototype.addFindResultViewForSearch = function (result) {\n if (result.start != null && result.end != null && result.start.paragraph != null && result.end.paragraph != null) {\n var prefixText = void 0;\n var suffixtext = void 0;\n var currentText = void 0;\n var startIndex = 0;\n var inlineObj = result.start.currentWidget.getInline(result.start.offset, startIndex);\n var inline = inlineObj.element;\n startIndex = inlineObj.index;\n var prefix = '';\n var lastIndex = 0;\n if (inline instanceof FieldElementBox) {\n var elementInfo = this.owner.selection.getRenderedInline(inline, startIndex);\n if (elementInfo.element.nextNode instanceof TextElementBox) {\n inline = elementInfo.element.nextNode;\n startIndex = elementInfo.index;\n }\n else {\n inline = elementInfo.element;\n startIndex = elementInfo.index;\n }\n }\n var boxObj = this.owner.selection.getElementBoxInternal(inline, startIndex);\n var box = boxObj.element;\n startIndex = boxObj.index;\n if (box != null) {\n if (box instanceof TextElementBox && startIndex > 0) {\n prefix = box.text.substring(0, startIndex);\n }\n var boxIndex = box.line.children.indexOf(box);\n // tslint:disable-next-line:max-line-length\n lastIndex = prefix.lastIndexOf(' ');\n while (lastIndex < 0 && boxIndex > 0 && box.line.children[boxIndex - 1] instanceof TextElementBox) {\n prefix = box.line.children[boxIndex - 1].text + prefix;\n boxIndex--;\n lastIndex = prefix.lastIndexOf(' ');\n }\n }\n var shiftIndex = prefix.lastIndexOf('\\v');\n if (shiftIndex > 0) {\n prefix = prefix.substring(0, shiftIndex);\n }\n else {\n lastIndex = prefix.lastIndexOf(' ');\n prefixText = lastIndex < 0 ? prefix : prefix.substring(lastIndex + 1);\n }\n currentText = result.text;\n var endIndex = 0;\n var endInlineObj = result.end.currentWidget.getInline(result.end.offset, endIndex);\n var endInline = endInlineObj.element;\n endIndex = endInlineObj.index;\n suffixtext = '';\n //Checks prefix element box is empty\n if (boxObj != null) {\n // Gets the element box using endIndex of the text and set as suffix\n boxObj = this.owner.selection.getElementBoxInternal(endInline, endIndex);\n box = boxObj.element;\n endIndex = boxObj.index;\n }\n //Checks suffix element box is empty.\n if (box != null) {\n if (box instanceof TextElementBox && endIndex < box.length) {\n suffixtext = box.text.substring(endIndex);\n }\n var boxIndex = box.line.children.indexOf(box);\n // tslint:disable-next-line:max-line-length\n while (boxIndex + 1 < box.line.children.length && (box.line.children[boxIndex + 1] instanceof TextElementBox) || (box.line.children[boxIndex + 1] instanceof FieldElementBox)) {\n if (box.line.children[boxIndex + 1] instanceof FieldElementBox) {\n boxIndex = boxIndex + 2;\n }\n else {\n suffixtext = suffixtext + box.line.children[boxIndex + 1].text;\n boxIndex = boxIndex + 1;\n }\n }\n }\n lastIndex = suffixtext.lastIndexOf(' ');\n suffixtext = suffixtext === '\\v' ? suffixtext = '' : suffixtext;\n // tslint:disable-next-line:max-line-length\n var listElement = '
  • ' + prefix + '' + result.text + '' + suffixtext + '
  • ';\n this.addSearchResultItems(listElement);\n }\n };\n //Replace and Replace All API \n /**\n * Replace the searched string with specified string\n * @param {string} replaceText\n * @param {TextSearchResult} result\n * @param {TextSearchResults} results\n * @private\n */\n Search.prototype.replace = function (replaceText, result, results) {\n if (isNullOrUndefined(this.viewer.owner.optionsPaneModule)) {\n return 0;\n }\n if (!isNullOrUndefined(this.viewer)) {\n this.viewer.owner.optionsPaneModule.clearSearchHighlight();\n }\n this.viewer.owner.searchModule.navigate(results.innerList[0]);\n var endPosition = this.viewer.selection.start;\n var index = results.indexOf(result);\n if (index < 0) {\n return 0;\n }\n this.owner.editorModule.insertText(replaceText, true);\n var startTextPosition = result.start;\n var endTextPosition = result.end;\n var difference = endTextPosition.offset - (startTextPosition.offset + replaceText.length);\n var startPosition = new TextPosition(this.viewer.owner);\n startPosition.setPositionParagraph(endTextPosition.currentWidget, endPosition.offset - replaceText.length);\n this.viewer.selection.selectRange(endPosition, startPosition);\n return 1;\n };\n /**\n * Replace all the searched string with specified string\n * @param {string} replaceText\n * @param {TextSearchResults} results\n * @private\n */\n Search.prototype.replaceAll = function (replaceText, results) {\n // tslint:disable-next-line:max-line-length\n if (isNullOrUndefined(this.viewer.owner) || this.viewer.owner.isReadOnlyMode || isNullOrUndefined(results) || isNullOrUndefined(this.viewer.owner.optionsPaneModule)) {\n return 0;\n }\n this.viewer.owner.optionsPaneModule.clearSearchHighlight();\n if (this.owner.editorHistory) {\n this.owner.editorHistory.initComplexHistory(this.owner.selection, 'ReplaceAll');\n }\n var count = results.length;\n this.viewer.owner.isLayoutEnabled = false;\n for (var i = count - 1; i >= 0; i--) {\n this.viewer.owner.searchModule.navigate(results.innerList[i]);\n this.owner.editorModule.insertText(replaceText, true);\n results.innerList[i].destroy();\n }\n if (this.owner.editorHistory && !isNullOrUndefined(this.owner.editorHistory.currentHistoryInfo)) {\n this.owner.editorHistory.updateComplexHistory();\n }\n else {\n this.owner.editorModule.updateComplexWithoutHistory(2);\n }\n return count;\n };\n /**\n * @private\n */\n Search.prototype.destroy = function () {\n if (this.textSearchResults) {\n this.textSearchResults.destroy();\n }\n };\n return Search;\n}());\nexport { Search };\n","import { createElement, isNullOrUndefined, L10n, setCulture } from '@syncfusion/ej2-base';\nimport { HelperMethods } from '../editor/editor-helper';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\nimport { Tab } from '@syncfusion/ej2-navigations';\nimport { SearchWidgetInfo } from './text-search';\n/**\n * Options Pane class.\n */\nvar OptionsPane = /** @class */ (function () {\n /**\n * Constructor for Options pane module\n * @param {LayoutViewer} layoutViewer\n * @private\n */\n function OptionsPane(layoutViewer) {\n var _this = this;\n /**\n * @private\n */\n this.isOptionsPaneShow = false;\n this.findOption = 'None';\n this.matchCase = undefined;\n this.wholeWord = undefined;\n this.regular = undefined;\n this.searchText = 'Navigation';\n this.resultsText = 'Results';\n this.messageDivText = 'No matches';\n this.replaceButtonText = 'Replace';\n this.replaceAllButtonText = 'Replace All';\n this.occurrenceDivText = 'We replaced all ';\n this.focusedIndex = -1;\n this.focusedElement = [];\n this.isOptionsPane = true;\n this.replacePaneText = 'Replace';\n this.findPaneText = 'Find';\n this.matchDivReplaceText = 'No matches';\n this.matchDivReplaceAllText = 'All Done!';\n /**\n * @private\n */\n this.tabInstance = undefined;\n /**\n * @private\n */\n this.isReplace = false;\n /**\n * @private\n */\n this.searchHighlighters = undefined;\n /**\n * Gets selected tab item which tab is selected.\n * @param {SelectEventArgs} args - Specifies which tab will be opened.\n * @private\n */\n this.selectedTabItem = function (args) {\n if (args.previousIndex !== args.selectedIndex) {\n var previousTab = document.querySelector('#e-content_' + args.previousIndex);\n var nextTab = document.querySelector('#e-content_' + args.selectedIndex);\n nextTab.insertBefore(previousTab.firstElementChild, nextTab.firstChild);\n }\n if (args.selectedIndex === 0 && !isNullOrUndefined(document.querySelector('#e-content_' + args.selectedIndex))) {\n _this.isOptionsPane = true;\n _this.onFindPane();\n }\n if (args.selectedIndex === 1 && !isNullOrUndefined(document.querySelector('#e-content_' + args.selectedIndex))) {\n _this.isOptionsPane = false;\n _this.onReplacePane();\n }\n };\n this.searchOptionChange = function () {\n _this.clearSearchResultItems();\n _this.clearSearchHighlight();\n var inputText = _this.searchInput.value;\n if (inputText === '') {\n return;\n }\n var pattern = _this.viewer.owner.searchModule.textSearch.stringToRegex(inputText, _this.findOption);\n var endSelection = _this.viewer.selection.end;\n var selectionIndex = endSelection.getHierarchicalIndexInternal();\n _this.results = _this.viewer.owner.searchModule.textSearch.findAll(pattern, _this.findOption, selectionIndex);\n if (_this.results != null && _this.results.length > 0) {\n _this.navigateSearchResult();\n }\n else {\n _this.viewer.renderVisiblePages();\n _this.messageDiv.innerHTML = _this.localeValue.getConstant('No matches');\n _this.resultContainer.style.display = 'block';\n _this.resultsListBlock.style.display = 'none';\n _this.clearFocusElement();\n _this.resultsListBlock.innerHTML = '';\n }\n };\n /**\n * Apply find option based on whole words value.\n * @param {ChangeEventArgs} args - Specifies the search options value.\n * @private\n */\n this.wholeWordsChange = function (args) {\n if (_this.matchInput.checked && _this.wholeInput.checked) {\n _this.findOption = 'CaseSensitiveWholeWord';\n }\n else if (_this.matchInput.checked && !(_this.wholeInput.checked)) {\n _this.findOption = 'CaseSensitive';\n }\n else if (!(_this.matchInput.checked) && _this.wholeInput.checked) {\n _this.findOption = 'WholeWord';\n }\n else {\n _this.findOption = 'None';\n }\n _this.searchOptionChange();\n };\n /**\n * Apply find option based on match value.\n * @param {ChangeEventArgs} args - Specifies the search options value.\n * @private\n */\n this.matchChange = function (args) {\n if (_this.matchInput.checked && _this.wholeInput.checked) {\n _this.findOption = 'CaseSensitiveWholeWord';\n }\n else if (!(_this.matchInput.checked) && _this.wholeInput.checked) {\n _this.findOption = 'WholeWord';\n }\n else if (_this.matchInput.checked && !(_this.wholeInput.checked)) {\n _this.findOption = 'CaseSensitive';\n }\n else {\n _this.findOption = 'None';\n }\n _this.searchOptionChange();\n };\n /**\n * Apply find options based on regular value.\n * @param {ChangeEventArgs} args - Specifies the search options value.\n * @private\n */\n // public regularChange = (args: ChangeEventArgs): void => {\n // if (args.checked) {\n // this.matchCase.element.parentElement.parentElement.classList.add('e-checkbox-disabled');\n // this.wholeWord.element.parentElement.parentElement.classList.add('e-checkbox-disabled');\n // this.matchCase.checked = false;\n // this.wholeWord.checked = false;\n // this.findOption = 'None';\n // this.onKeyDownInternal();\n // } else {\n // this.matchCase.element.parentElement.parentElement.classList.remove('e-checkbox-disabled');\n // this.wholeWord.element.parentElement.parentElement.classList.remove('e-checkbox-disabled');\n // }\n // }\n // tslint:enable:no-any \n /**\n * Binding events from the element when optins pane creation.\n * @private\n */\n this.onWireEvents = function () {\n _this.searchIcon.addEventListener('click', _this.searchIconClickInternal);\n _this.navigateToNextResult.addEventListener('click', _this.navigateNextResultButtonClick);\n _this.navigateToPreviousResult.addEventListener('click', _this.navigatePreviousResultButtonClick);\n _this.searchInput.addEventListener('keydown', _this.onKeyDown);\n _this.searchInput.addEventListener('keyup', _this.onEnableDisableReplaceButton);\n _this.resultsListBlock.addEventListener('click', _this.resultListBlockClick);\n _this.closeButton.addEventListener('click', _this.close);\n _this.replaceButton.addEventListener('click', _this.onReplaceButtonClick);\n _this.replaceAllButton.addEventListener('click', _this.onReplaceAllButtonClick);\n };\n /**\n * Enable find pane only.\n * @private\n */\n this.onFindPane = function () {\n _this.replaceDiv.style.display = 'none';\n _this.occurrenceDiv.style.display = 'none';\n if (!isNullOrUndefined(_this.results) && _this.results.length === 0) {\n _this.matchDiv.style.display = 'none';\n _this.resultsListBlock.innerHTML = '';\n _this.resultsListBlock.style.display = 'none';\n _this.messageDiv.innerHTML = _this.localeValue.getConstant('No matches');\n }\n _this.resultsListBlock.style.height = _this.resultsListBlock.offsetHeight + _this.replaceTabContentDiv.offsetHeight + 'px';\n _this.replaceTabContentDiv.style.display = 'none';\n _this.findDiv.style.display = 'block';\n _this.messageDiv.style.display = 'block';\n _this.focusedElement = [];\n // tslint:disable-next-line:max-line-length\n _this.focusedElement.push(_this.closeButton, _this.findTabButtonHeader, _this.replaceTabButtonHeader, _this.searchInput, _this.searchIcon, _this.navigateToPreviousResult, _this.navigateToNextResult, _this.matchInput, _this.wholeInput);\n _this.focusedIndex = 3;\n _this.searchInput.select();\n _this.getMessageDivHeight();\n };\n this.onEnableDisableReplaceButton = function () {\n if (_this.searchInput.value.length !== 0) {\n _this.replaceButton.disabled = false;\n _this.replaceAllButton.disabled = false;\n }\n else {\n _this.replaceButton.disabled = true;\n _this.replaceAllButton.disabled = true;\n }\n };\n /**\n * Enable replace pane only.\n * @private\n */\n this.onReplacePane = function () {\n _this.findDiv.style.display = 'block';\n _this.replaceDiv.style.display = 'block';\n _this.replaceTabContentDiv.style.display = 'block';\n _this.resultsListBlock.style.height = _this.resultsListBlock.offsetHeight - _this.replaceTabContentDiv.offsetHeight + 'px';\n _this.isOptionsPane = false;\n _this.clearSearchResultItems();\n _this.clearSearchHighlight();\n _this.viewer.renderVisiblePages();\n if (_this.searchInput.value.length !== 0) {\n _this.replaceButton.disabled = false;\n _this.replaceAllButton.disabled = false;\n }\n else {\n _this.replaceButton.disabled = true;\n _this.replaceAllButton.disabled = true;\n }\n _this.focusedElement = [];\n // tslint:disable-next-line:max-line-length\n _this.focusedElement.push(_this.closeButton, _this.findTabButtonHeader, _this.replaceTabButtonHeader, _this.searchInput, _this.searchIcon, _this.navigateToPreviousResult, _this.navigateToNextResult, _this.matchInput, _this.wholeInput, _this.replaceWith, _this.replaceButton, _this.replaceAllButton);\n _this.focusedIndex = 9;\n if (_this.searchInput.value === '') {\n _this.searchInput.select();\n }\n else {\n _this.replaceWith.select();\n }\n if (_this.searchInput.value !== '') {\n _this.searchOptionChange();\n }\n _this.getMessageDivHeight();\n };\n /**\n * Fires on key down on options pane.\n * @param {KeyboardEvent} event - Specifies the focus of current element.\n * @private\n */\n this.onKeyDownOnOptionPane = function (event) {\n // if (event.keyCode === 70) {\n // event.preventDefault();\n // return;\n // }\n if (event.keyCode === 9) {\n event.preventDefault();\n var focusIndex = undefined;\n if (event.shiftKey) {\n focusIndex = (_this.focusedIndex === 0 || isNullOrUndefined(_this.focusedIndex)) ?\n _this.focusedElement.length - 1 : _this.focusedIndex - 1;\n }\n else {\n focusIndex = (_this.focusedElement.length - 1 === _this.focusedIndex || isNullOrUndefined(_this.focusedIndex)) ?\n 0 : _this.focusedIndex + 1;\n }\n var element = _this.focusedElement[focusIndex];\n element.focus();\n if (element instanceof HTMLInputElement) {\n element.select();\n }\n _this.focusedIndex = focusIndex;\n if (element instanceof HTMLLIElement) {\n _this.scrollToPosition(element);\n }\n }\n else if (event.keyCode === 13) {\n // tslint:disable-next-line:max-line-length\n if (event.target !== _this.searchInput && event.target !== _this.closeButton) {\n event.preventDefault();\n var index = _this.focusedElement.indexOf(event.target);\n if (index !== -1) {\n var list = _this.focusedElement[index];\n list.click();\n list.focus();\n _this.focusedIndex = index;\n }\n }\n }\n else if (event.keyCode === 40 || event.keyCode === 38) {\n if (_this.resultsListBlock.style.display !== 'none') {\n var index = void 0;\n var element = void 0;\n if (event.keyCode === 40) {\n if (_this.focusedIndex > 7) {\n if (_this.focusedIndex + 1 < _this.focusedElement.length) {\n element = _this.focusedElement[_this.focusedIndex + 1];\n element.focus();\n _this.focusedIndex = _this.focusedIndex + 1;\n }\n }\n else {\n index = (_this.focusedElement.length - _this.resultsListBlock.children.length) + _this.results.currentIndex + 1;\n if (index < _this.focusedElement.length) {\n element = _this.focusedElement[index];\n element.focus();\n _this.focusedIndex = index;\n }\n }\n }\n else {\n if (_this.focusedIndex > 8) {\n index = _this.focusedIndex - 1;\n element = _this.focusedElement[index];\n element.focus();\n _this.focusedIndex = index;\n }\n }\n }\n }\n };\n /**\n * Fires on replace.\n * @private\n */\n this.onReplaceButtonClick = function () {\n var optionsPane = _this.optionsPane;\n var findText = _this.searchInput.value;\n var replaceText = _this.replaceWith.value;\n var results = _this.viewer.owner.searchModule.textSearchResults;\n if (findText !== '' && !isNullOrUndefined(findText)) {\n if (_this.viewer.owner.selection != null) {\n var selectionText = _this.viewer.owner.selection.text;\n if (!_this.viewer.owner.selection.isEmpty) {\n // if (this.viewer.owner.selection.isForward) {\n // this.viewer.owner.selection.selectContent(this.viewer.owner.selection.start, true);\n // } else {\n // this.viewer.owner.selection.selectContent(this.viewer.owner.selection.end, true);\n // }\n }\n var pattern = _this.viewer.owner.searchModule.textSearch.stringToRegex(findText, _this.findOption);\n var endSelection = _this.viewer.selection.start;\n var index = endSelection.getHierarchicalIndexInternal();\n var result = _this.viewer.owner.searchModule.textSearch.findNext(pattern, _this.findOption, index);\n if (result !== undefined) {\n _this.viewer.owner.searchModule.navigate(result);\n _this.matchDiv.style.display = 'none';\n }\n results.addResult();\n results.innerList[0] = result;\n if (!isNullOrUndefined(result)) {\n if (result.text === selectionText) {\n var replace = isNullOrUndefined(replaceText) ? '' : replaceText;\n _this.viewer.owner.searchModule.replace(replace, result, results);\n var pattern_1 = _this.viewer.owner.searchModule.textSearch.stringToRegex(findText, _this.findOption);\n var endSelection_1 = _this.viewer.selection.end;\n var index_1 = endSelection_1.getHierarchicalIndexInternal();\n result = _this.viewer.owner.searchModule.textSearch.findNext(pattern_1, _this.findOption, index_1);\n results.addResult();\n results.innerList[0] = result;\n if (result !== undefined) {\n _this.matchDiv.style.display = 'none';\n _this.viewer.owner.searchModule.navigate(result);\n }\n else {\n _this.matchDiv.style.display = 'block';\n _this.matchDiv.innerHTML = _this.localeValue.getConstant(_this.matchDivReplaceText);\n }\n }\n }\n else {\n _this.matchDiv.style.display = 'block';\n _this.matchDiv.innerHTML = _this.localeValue.getConstant(_this.matchDivReplaceText);\n }\n }\n }\n _this.resultsListBlock.style.display = 'none';\n };\n /**\n * Fires on replace all.\n * @private\n */\n this.onReplaceAllButtonClick = function () {\n _this.replaceAll();\n _this.resultsListBlock.style.display = 'none';\n };\n /**\n * Fires on search icon.\n * @private\n */\n this.searchIconClickInternal = function () {\n // tslint:disable:no-any \n var inputElement = document.getElementById(_this.viewer.owner.containerId + '_option_search_text_box');\n // tslint:enable:no-any\n var text = inputElement.value;\n if (text === '') {\n return;\n }\n if (_this.searchIcon.classList.contains('e-de-op-search-close-icon')) {\n _this.searchIcon.classList.add('e-de-op-search-icon');\n _this.searchIcon.classList.remove('e-de-op-search-close-icon');\n inputElement.value = '';\n _this.messageDiv.innerHTML = _this.localeValue.getConstant('No matches');\n _this.resultContainer.style.display = 'block';\n _this.resultsListBlock.style.display = 'none';\n _this.clearFocusElement();\n _this.resultsListBlock.innerHTML = '';\n _this.clearSearchResultItems();\n _this.clearSearchHighlight();\n _this.viewer.renderVisiblePages();\n return;\n }\n if (_this.searchIcon.classList.contains('e-de-op-search-icon') && text.length >= 1) {\n _this.searchIcon.classList.add('e-de-op-search-close-icon');\n _this.searchIcon.classList.remove('e-de-op-search-icon');\n _this.onEnableDisableReplaceButton();\n }\n _this.clearSearchResultItems();\n _this.clearSearchHighlight();\n var patterns = _this.viewer.owner.searchModule.textSearch.stringToRegex(text, _this.findOption);\n var endSelection = _this.viewer.selection.end;\n var index = endSelection.getHierarchicalIndexInternal();\n _this.results = _this.viewer.owner.searchModule.textSearch.findAll(patterns, _this.findOption, index);\n if (_this.results != null && _this.results.length > 0) {\n _this.navigateSearchResult();\n _this.getMessageDivHeight();\n var resultsContainerHeight = _this.viewer.owner.getDocumentEditorElement().offsetHeight - 215;\n _this.resultsListBlock.style.height = resultsContainerHeight + 'px';\n }\n else {\n _this.messageDiv.innerHTML = _this.localeValue.getConstant('No matches');\n _this.resultContainer.style.display = 'block';\n _this.resultsListBlock.style.display = 'none';\n _this.clearFocusElement();\n _this.resultsListBlock.innerHTML = '';\n }\n };\n /**\n * Fires on getting next results.\n * @private\n */\n this.navigateNextResultButtonClick = function () {\n if (document.getElementById(_this.viewer.owner.containerId + '_list_box_container') != null &&\n document.getElementById(_this.viewer.owner.containerId + '_list_box_container').style.display !== 'none') {\n if (_this.results.currentIndex < _this.results.length - 1) {\n _this.results.currentIndex = _this.results.currentIndex + 1;\n var currentelement = _this.results.innerList[_this.results.currentIndex];\n // tslint:disable-next-line:max-line-length\n _this.messageDiv.innerHTML = _this.localeValue.getConstant('Result ') + (_this.results.currentIndex + 1) + _this.localeValue.getConstant(' of ') + _this.results.length;\n for (var i = 0; i < _this.resultsListBlock.children.length; i++) {\n var list = _this.resultsListBlock.children[i];\n if (list.classList.contains('e-de-search-result-hglt')) {\n list.classList.remove('e-de-search-result-hglt');\n list.children[0].classList.remove('e-de-op-search-word-text');\n list.classList.add('e-de-search-result-item');\n }\n }\n var listElement = _this.resultsListBlock.children[_this.results.currentIndex];\n if (listElement.classList.contains('e-de-search-result-item')) {\n listElement.classList.remove('e-de-search-result-item');\n listElement.classList.add('e-de-search-result-hglt');\n listElement.children[0].classList.add('e-de-op-search-word-text');\n _this.scrollToPosition(listElement);\n }\n _this.viewer.owner.searchModule.navigate(currentelement);\n _this.viewer.owner.searchModule.highlight(_this.results);\n }\n else {\n var currentelement = _this.results.innerList[0];\n _this.results.currentIndex = 0;\n // tslint:disable-next-line:max-line-length\n _this.messageDiv.innerHTML = _this.localeValue.getConstant('Result ') + (_this.results.currentIndex + 1) + _this.localeValue.getConstant(' of ') + _this.results.length;\n for (var j = 0; j < _this.resultsListBlock.children.length; j++) {\n var lists = _this.resultsListBlock.children[j];\n if (lists.classList.contains('e-de-search-result-hglt')) {\n lists.classList.remove('e-de-search-result-hglt');\n lists.children[0].classList.remove('e-de-op-search-word-text');\n lists.classList.add('e-de-search-result-item');\n }\n }\n var listElementsDiv = _this.resultsListBlock.children[_this.results.currentIndex];\n if (listElementsDiv.classList.contains('e-de-search-result-item')) {\n listElementsDiv.classList.remove('e-de-search-result-item');\n listElementsDiv.classList.add('e-de-search-result-hglt');\n listElementsDiv.children[0].classList.add('e-de-op-search-word-text');\n _this.scrollToPosition(listElementsDiv);\n }\n _this.viewer.owner.searchModule.navigate(currentelement);\n _this.viewer.owner.searchModule.highlight(_this.results);\n }\n _this.focusedIndex = _this.focusedElement.indexOf(_this.navigateToNextResult);\n }\n };\n /**\n * Fires on getting previous results.\n * @private\n */\n this.navigatePreviousResultButtonClick = function () {\n if (document.getElementById(_this.viewer.owner.containerId + '_list_box_container') != null &&\n document.getElementById(_this.viewer.owner.containerId + '_list_box_container').style.display !== 'none') {\n if (_this.results.currentIndex === 0) {\n _this.results.currentIndex = _this.results.length - 1;\n // tslint:disable-next-line:max-line-length\n _this.messageDiv.innerHTML = _this.localeValue.getConstant('Result ') + (_this.results.length) + _this.localeValue.getConstant(' of ') + _this.results.length;\n for (var index = 0; index < _this.resultsListBlock.children.length; index++) {\n var list = _this.resultsListBlock.children[index];\n if (list.classList.contains('e-de-search-result-hglt')) {\n list.classList.remove('e-de-search-result-hglt');\n list.children[0].classList.remove('e-de-op-search-word-text');\n list.classList.add('e-de-search-result-item');\n }\n }\n var liElement = _this.resultsListBlock.children[_this.results.currentIndex];\n if (liElement.classList.contains('e-de-search-result-item')) {\n liElement.classList.remove('e-de-search-result-item');\n liElement.classList.add('e-de-search-result-hglt');\n liElement.children[0].classList.add('e-de-op-search-word-text');\n _this.scrollToPosition(liElement);\n }\n var currentelement = _this.results.innerList[_this.results.currentIndex];\n _this.viewer.owner.searchModule.navigate(currentelement);\n _this.viewer.owner.searchModule.highlight(_this.results);\n }\n else {\n // tslint:disable-next-line:max-line-length\n _this.messageDiv.innerHTML = _this.localeValue.getConstant('Result ') + (_this.results.currentIndex) + _this.localeValue.getConstant(' of ') + _this.results.length;\n _this.results.currentIndex = _this.results.currentIndex - 1;\n for (var j = 0; j < _this.resultsListBlock.children.length; j++) {\n var list = _this.resultsListBlock.children[j];\n if (list.classList.contains('e-de-search-result-hglt')) {\n list.classList.remove('e-de-search-result-hglt');\n list.children[0].classList.remove('e-de-op-search-word-text');\n list.classList.add('e-de-search-result-item');\n }\n }\n var listElements = _this.resultsListBlock.children[_this.results.currentIndex];\n if (listElements.classList.contains('e-de-search-result-item')) {\n listElements.classList.remove('e-de-search-result-item');\n listElements.classList.add('e-de-search-result-hglt');\n listElements.children[0].classList.add('e-de-op-search-word-text');\n _this.scrollToPosition(listElements);\n }\n var currentelement = _this.results.innerList[_this.results.currentIndex];\n _this.viewer.owner.searchModule.navigate(currentelement);\n _this.viewer.owner.searchModule.highlight(_this.results);\n }\n _this.focusedIndex = _this.focusedElement.indexOf(_this.navigateToPreviousResult);\n }\n };\n /**\n * Fires on key down\n * @param {KeyboardEvent} event - Speficies key down actions.\n * @private\n */\n this.onKeyDown = function (event) {\n var code = event.which || event.keyCode;\n if (code === 13 && event.keyCode !== 9 && event.keyCode !== 40) {\n event.preventDefault();\n _this.findDiv.style.height = '';\n _this.onKeyDownInternal();\n }\n else if (code === 8 && (_this.searchInput.value.length === 0)) {\n _this.resultContainer.style.display = 'block';\n }\n else if (event.keyCode !== 9 && event.keyCode !== 40 && event.keyCode !== 27) {\n _this.clearSearchHighlight();\n _this.clearSearchResultItems();\n _this.viewer.renderVisiblePages();\n _this.resultsListBlock.style.display = 'none';\n _this.messageDiv.innerHTML = _this.localeValue.getConstant('No matches');\n _this.resultContainer.style.display = 'none';\n _this.clearFocusElement();\n _this.resultsListBlock.innerHTML = '';\n if (_this.searchIcon.classList.contains('e-de-op-search-close-icon')) {\n _this.searchIcon.classList.add('e-de-op-search-icon');\n _this.searchIcon.classList.remove('e-de-op-search-close-icon');\n }\n }\n else if (code === 27 && event.keyCode === 27) {\n _this.showHideOptionsPane(false);\n }\n };\n /**\n * Close the optios pane.\n * @private\n */\n this.close = function () {\n _this.clearFocusElement();\n _this.showHideOptionsPane(false);\n _this.resultsListBlock.innerHTML = '';\n _this.focusedIndex = 1;\n _this.isOptionsPane = true;\n };\n /**\n * Fires on results list block.\n * @param {MouseEvent} args - Specifies which list was clicked.\n * @private\n */\n this.resultListBlockClick = function (args) {\n var currentlist = args.target;\n var element = _this.resultsListBlock.children;\n var index = 0;\n for (var i = 0; i < element.length; i++) {\n var list_1 = element[i];\n if (list_1.classList.contains('e-de-search-result-hglt')) {\n list_1.classList.remove('e-de-search-result-hglt');\n list_1.children[0].classList.remove('e-de-op-search-word-text');\n list_1.classList.add('e-de-search-result-item');\n }\n }\n var list;\n for (var i = 0; i < element.length; i++) {\n if (currentlist === element[i]) {\n index = i;\n list = element[i];\n if (list.classList.contains('e-de-search-result-item')) {\n list.classList.remove('e-de-search-result-item');\n list.classList.add('e-de-search-result-hglt');\n list.children[0].classList.add('e-de-op-search-word-text');\n _this.focusedIndex = _this.focusedElement.indexOf(list);\n }\n }\n }\n var currentelement = _this.results.innerList[index];\n _this.results.currentIndex = index;\n // tslint:disable-next-line:max-line-length\n _this.messageDiv.innerHTML = _this.localeValue.getConstant('Result ') + (index + 1) + _this.localeValue.getConstant(' of ') + _this.results.length;\n _this.viewer.owner.searchModule.navigate(currentelement);\n _this.viewer.owner.searchModule.highlight(_this.results);\n list.focus();\n };\n this.viewer = layoutViewer;\n }\n /**\n * Get the module name.\n */\n OptionsPane.prototype.getModuleName = function () {\n return 'OptionsPane';\n };\n /**\n * Initialize the options pane.\n * @param {L10n} localeValue - Specifies the localization based on culture.\n * @private\n */\n // tslint:disable:max-func-body-length\n OptionsPane.prototype.initOptionsPane = function (localeValue) {\n var viewer = this.viewer;\n this.localeValue = localeValue;\n this.optionsPane = createElement('div', { className: 'e-de-op', styles: 'display:none;' });\n this.optionsPane.addEventListener('keydown', this.onKeyDownOnOptionPane);\n this.searchDiv = createElement('div', {\n className: this.viewer.owner.containerId + '_searchDiv e-de-op-header',\n innerHTML: localeValue.getConstant(this.searchText)\n });\n this.optionsPane.appendChild(this.searchDiv);\n // tslint:disable-next-line:max-line-length\n this.closeButton = createElement('button', { className: 'e-de-op-close-button e-de-op-icon-btn e-btn e-flat e-icon-btn', id: 'close' });\n this.optionsPane.appendChild(this.closeButton);\n var closeSpan = createElement('span', { className: 'e-de-op-close-icon e-btn-icon e-icons' });\n this.closeButton.appendChild(closeSpan);\n this.focusedElement.push(this.closeButton);\n this.findTab = createElement('div', { id: this.viewer.owner.containerId + '_findTabDiv', className: 'e-de-op-tab' });\n this.optionsPane.appendChild(this.findTab);\n var tabHeader = createElement('div', { className: 'e-tab-header' });\n this.findTab.appendChild(tabHeader);\n this.findTabButton = createElement('div', { innerHTML: localeValue.getConstant(this.findPaneText) });\n this.focusedElement.push(this.findTabButtonHeader);\n tabHeader.appendChild(this.findTabButton);\n this.replaceTabButton = createElement('div', { innerHTML: localeValue.getConstant(this.replacePaneText) });\n this.focusedElement.push(this.replaceTabButtonHeader);\n tabHeader.appendChild(this.replaceTabButton);\n var tabContent = createElement('div', { className: 'e-content' });\n var findTabContent = createElement('div', { id: 'findTabContent' });\n tabContent.appendChild(findTabContent);\n this.findTabContentDiv = createElement('div', { className: 'e-de-search-tab-content' });\n this.searchTextBoxContainer = createElement('div', { className: 'e-input-group e-de-op-input-group' });\n this.findTabContentDiv.appendChild(this.searchTextBoxContainer);\n // tslint:disable-next-line:max-line-length\n this.searchInput = createElement('input', { className: 'e-input e-de-search-input', id: this.viewer.owner.containerId + '_option_search_text_box', attrs: { placeholder: 'Search for' }, styles: 'font-size:14px;' });\n this.searchTextBoxContainer.appendChild(this.searchInput);\n this.searchIcon = createElement('span', {\n className: 'e-de-op-icon e-de-op-search-icon e-input-group-icon e-icon',\n id: this.viewer.owner.containerId + '_search-icon'\n });\n this.searchIcon.tabIndex = 0;\n this.searchTextBoxContainer.appendChild(this.searchIcon);\n this.focusedElement.push(this.searchIcon);\n // tslint:disable-next-line:max-line-length\n this.navigateToPreviousResult = createElement('span', { className: 'e-de-op-icon e-de-op-nav-btn e-arrow-up e-spin-up e-btn-icon e-icon e-input-group-icon' });\n this.navigateToPreviousResult.tabIndex = 0;\n this.searchTextBoxContainer.appendChild(this.navigateToPreviousResult);\n this.focusedElement.push(this.navigateToPreviousResult);\n // tslint:disable-next-line:max-line-length\n this.navigateToNextResult = createElement('span', { className: 'e-de-op-icon e-de-op-nav-btn e-arrow-down e-spin-down e-btn-icon e-icon e-input-group-icon' });\n this.navigateToNextResult.tabIndex = 0;\n this.searchTextBoxContainer.appendChild(this.navigateToNextResult);\n this.focusedElement.push(this.navigateToNextResult);\n var div = createElement('div', { className: 'e-de-op-more-less' });\n this.matchInput = createElement('input', {\n attrs: { type: 'checkbox' },\n id: this.viewer.owner.containerId + '_matchCase'\n });\n div.appendChild(this.matchInput);\n this.matchCase = new CheckBox({ label: 'Match case', checked: false, change: this.matchChange });\n this.matchCase.appendTo(this.matchInput);\n this.focusedElement.push(this.matchInput);\n this.matchInput.tabIndex = 0;\n this.wholeInput = createElement('input', {\n attrs: { type: 'checkbox' },\n id: this.viewer.owner.containerId + '_wholeWord',\n });\n div.appendChild(this.wholeInput);\n this.wholeWord = new CheckBox({ label: 'Whole words', checked: false, change: this.wholeWordsChange });\n this.wholeWord.appendTo(this.wholeInput);\n this.focusedElement.push(this.wholeInput);\n this.wholeInput.tabIndex = 0;\n this.findTabContentDiv.appendChild(div);\n var replaceTabContent = createElement('div');\n tabContent.appendChild(replaceTabContent);\n this.replaceTabContentDiv = createElement('div', { className: 'e-de-op-replacetabcontentdiv', styles: 'display:none;' });\n tabContent.appendChild(this.replaceTabContentDiv);\n this.findTabContentDiv.appendChild(this.replaceTabContentDiv);\n this.createReplacePane();\n this.findDiv = createElement('div', { className: 'findDiv', styles: 'height:250px;display:block;' });\n findTabContent.appendChild(this.findTabContentDiv);\n this.resultContainer = createElement('div', { styles: 'width:85%;display:block;', className: 'e-de-op-result-container' });\n this.findDiv.appendChild(this.resultContainer);\n // tslint:disable-next-line:max-line-length\n this.messageDiv = createElement('div', { className: this.viewer.owner.containerId + '_messageDiv e-de-op-msg', innerHTML: this.localeValue.getConstant(this.messageDivText), id: this.viewer.owner.containerId + '_search_status' });\n this.resultContainer.appendChild(this.messageDiv);\n // tslint:disable-next-line:max-line-length\n this.resultsListBlock = createElement('div', { id: this.viewer.owner.containerId + '_list_box_container', styles: 'display:none;width:270px;list-style:none;padding-right:5px;overflow:auto;', className: 'e-de-result-list-block' });\n this.findDiv.appendChild(this.resultsListBlock);\n this.findTabContentDiv.appendChild(this.findDiv);\n this.findTab.appendChild(tabContent);\n this.tabInstance = new Tab({ selected: this.selectedTabItem });\n this.tabInstance.appendTo(this.findTab);\n var findHeader = this.tabInstance.element.getElementsByClassName('e-item e-toolbar-item')[0];\n this.findTabButtonHeader = findHeader.getElementsByClassName('e-tab-wrap')[0];\n this.findTabButtonHeader.classList.add('e-de-op-find-tab-header');\n this.findTabButtonHeader.tabIndex = 0;\n var replaceHeader = this.tabInstance.element.getElementsByClassName('e-item e-toolbar-item')[1];\n this.replaceTabButtonHeader = replaceHeader.getElementsByClassName('e-tab-wrap')[0];\n this.replaceTabButtonHeader.classList.add('e-de-op-replace-tab-header');\n this.replaceTabButtonHeader.tabIndex = 0;\n this.onWireEvents();\n };\n /**\n * Create replace pane instances.\n */\n OptionsPane.prototype.createReplacePane = function () {\n this.replaceDiv = createElement('div');\n this.replaceTabContentDiv.appendChild(this.replaceDiv);\n this.replaceWith = createElement('input', {\n className: 'e-de-op-replacewith e-input', styles: 'font-size:14px;',\n attrs: { placeholder: 'Replace with' }\n });\n this.replaceDiv.appendChild(this.replaceWith);\n var replaceButtonDiv = createElement('div', { styles: 'text-align:right;', className: 'e-de-op-dlg-footer' });\n this.replaceDiv.appendChild(replaceButtonDiv);\n this.replaceButton = createElement('button', {\n className: 'e-control e-btn e-flat e-replace',\n styles: 'font-size:12px;margin-right:10px;',\n innerHTML: this.localeValue.getConstant(this.replaceButtonText)\n });\n replaceButtonDiv.appendChild(this.replaceButton);\n this.replaceAllButton = createElement('button', {\n className: 'e-control e-btn e-flat e-replaceall',\n styles: 'font-size:12px;',\n innerHTML: this.localeValue.getConstant(this.replaceAllButtonText)\n });\n replaceButtonDiv.appendChild(this.replaceAllButton);\n this.matchDiv = createElement('div', { styles: 'display:none;padding-top:10px;' });\n this.replaceDiv.appendChild(this.matchDiv);\n var emptyDiv6 = createElement('div', { className: 'e-de-op-search-replacediv' });\n this.replaceDiv.appendChild(emptyDiv6);\n this.occurrenceDiv = createElement('div', { styles: 'display:none;' });\n this.replaceDiv.appendChild(this.occurrenceDiv);\n };\n OptionsPane.prototype.navigateSearchResult = function () {\n this.viewer.owner.searchModule.navigate(this.results.innerList[this.results.currentIndex]);\n this.viewer.owner.searchModule.highlight(this.results);\n this.viewer.owner.searchModule.addFindResultView(this.results);\n this.resultsListBlock.style.display = 'block';\n this.resultContainer.style.display = 'block';\n var lists = this.viewer.owner.findResultsList;\n var text = '';\n for (var i = 0; i < lists.length; i++) {\n text += lists[i];\n }\n this.clearFocusElement();\n this.resultsListBlock.innerHTML = text;\n for (var i = 0; i < this.resultsListBlock.children.length; i++) {\n this.focusedElement.push(this.resultsListBlock.children[i]);\n }\n var currentIndexValue = this.results.currentIndex;\n // tslint:disable-next-line:max-line-length\n this.messageDiv.innerHTML = this.localeValue.getConstant('Result ') + (currentIndexValue + 1) + this.localeValue.getConstant(' of ') + this.results.length;\n var listElement = this.resultsListBlock.children[currentIndexValue];\n if (listElement.classList.contains('e-de-search-result-item')) {\n listElement.classList.remove('e-de-search-result-item');\n listElement.classList.add('e-de-search-result-hglt');\n listElement.children[0].classList.add('e-de-op-search-word-text');\n this.scrollToPosition(listElement);\n }\n };\n /**\n * Fires on key down actions done.\n * @private\n */\n OptionsPane.prototype.onKeyDownInternal = function () {\n // tslint:disable-next-line:max-line-length\n var inputElement = document.getElementById(this.viewer.owner.containerId + '_option_search_text_box');\n inputElement.blur();\n var text = inputElement.value;\n if (text === '') {\n return;\n }\n if (text.length >= 1 && this.searchIcon.classList.contains('e-de-op-search-icon')) {\n this.searchIcon.classList.add('e-de-op-search-close-icon');\n this.searchIcon.classList.remove('e-de-op-search-icon');\n }\n var resultsContainerHeight = this.viewer.owner.getDocumentEditorElement().offsetHeight - 215;\n this.clearSearchResultItems();\n this.clearSearchHighlight();\n var pattern = this.viewer.owner.searchModule.textSearch.stringToRegex(text, this.findOption);\n var endSelection = this.viewer.selection.end;\n var index = endSelection.getHierarchicalIndexInternal();\n this.results = this.viewer.owner.searchModule.textSearch.findAll(pattern, this.findOption, index);\n var results = this.results;\n if (isNullOrUndefined(results)) {\n this.viewer.renderVisiblePages();\n }\n if (results != null && results.length > 0) {\n if ((this.focusedElement.indexOf(this.navigateToPreviousResult) === -1) && this.isOptionsPane) {\n this.focusedElement.push(this.navigateToPreviousResult);\n }\n if ((this.focusedElement.indexOf(this.navigateToNextResult) === -1) && this.isOptionsPane) {\n this.focusedElement.push(this.navigateToNextResult);\n }\n this.viewer.owner.searchModule.navigate(this.results.innerList[this.results.currentIndex]);\n this.viewer.owner.searchModule.highlight(results);\n this.viewer.owner.searchModule.addFindResultView(results);\n // if (this.isOptionsPane) {\n this.resultsListBlock.style.display = 'block';\n this.resultsListBlock.style.height = resultsContainerHeight + 'px';\n this.resultContainer.style.display = 'block';\n var list = this.viewer.owner.findResultsList;\n var text_1 = '';\n this.clearFocusElement();\n this.resultsListBlock.innerHTML = '';\n for (var i = 0; i < list.length; i++) {\n text_1 += list[i];\n }\n this.resultsListBlock.innerHTML = text_1;\n for (var i = 0; i < this.resultsListBlock.children.length; i++) {\n this.focusedElement.push(this.resultsListBlock.children[i]);\n }\n var lists = this.resultsListBlock.children;\n var currentIndex = this.results.currentIndex;\n // tslint:disable-next-line:max-line-length\n this.messageDiv.innerHTML = this.localeValue.getConstant('Result ') + (currentIndex + 1) + this.localeValue.getConstant(' of ') + this.results.length;\n var listElement = this.resultsListBlock.children[currentIndex];\n if (listElement.classList.contains('e-de-search-result-item')) {\n listElement.classList.remove('e-de-search-result-item');\n listElement.classList.add('e-de-search-result-hglt');\n listElement.children[0].classList.add('e-de-op-search-word-text');\n }\n this.navigateToNextResult.focus();\n this.focusedIndex = 6;\n this.getMessageDivHeight();\n // } else {\n //this.focusedIndex = 4;\n // }\n }\n else {\n this.messageDiv.innerHTML = this.localeValue.getConstant('No matches');\n this.resultContainer.style.display = 'block';\n this.resultsListBlock.style.display = 'none';\n this.clearFocusElement();\n this.resultsListBlock.innerHTML = '';\n }\n };\n OptionsPane.prototype.getMessageDivHeight = function () {\n if (!this.isOptionsPane && this.messageDiv.classList.contains('e-de-op-msg')) {\n this.messageDiv.classList.add('e-de-op-replace-messagediv');\n this.messageDiv.classList.remove('e-de-op-msg');\n }\n else if (this.isOptionsPane && this.messageDiv.classList.contains('e-de-op-replace-messagediv')) {\n this.messageDiv.classList.add('e-de-op-msg');\n this.messageDiv.classList.remove('e-de-op-replace-messagediv');\n }\n };\n /**\n * Replace all.\n * @private\n */\n OptionsPane.prototype.replaceAll = function () {\n var optionsPane = this.optionsPane;\n var findText = this.searchInput.value;\n var replaceText = this.replaceWith.value;\n if (findText !== '' && !isNullOrUndefined(findText)) {\n var pattern = this.viewer.owner.searchModule.textSearch.stringToRegex(findText, this.findOption);\n var endSelection = this.viewer.selection.end;\n var index = endSelection.getHierarchicalIndexInternal();\n var results = this.viewer.owner.searchModule.textSearch.findAll(pattern, this.findOption, index);\n var replace = isNullOrUndefined(replaceText) ? '' : replaceText;\n this.viewer.owner.searchModule.replaceAll(replace, results);\n this.matchDiv.style.display = 'block';\n this.matchDiv.innerHTML = this.localeValue.getConstant(this.matchDivReplaceAllText);\n this.occurrenceDiv.style.display = 'block';\n var count = isNullOrUndefined(results) ? 0 : results.length;\n // tslint:disable-next-line:max-line-length\n this.occurrenceDiv.innerHTML = this.occurrenceDivText + count + this.localeValue.getConstant(' instances of \"') + findText + this.localeValue.getConstant('\" with \"') + replaceText + '\" ';\n }\n };\n /**\n * Scrolls to position.\n * @param {HTMLElement} list - Specifies the list element.\n * @private\n */\n OptionsPane.prototype.scrollToPosition = function (list) {\n var rect = list.getBoundingClientRect();\n var top;\n if (rect.top > 0) {\n top = rect.top - list.parentElement.getBoundingClientRect().top;\n if ((list.parentElement.offsetHeight - top) <= list.offsetHeight) {\n if (Math.ceil(top + list.offsetHeight) === list.parentElement.scrollHeight) {\n list.parentElement.scrollTop = top;\n }\n list.parentElement.scrollTop = list.parentElement.scrollTop + (list.parentElement.offsetHeight / 100) * 30;\n }\n else if (top < 0) {\n list.parentElement.scrollTop = list.parentElement.scrollTop - (list.parentElement.offsetHeight / 100) * 30;\n }\n }\n else {\n list.parentElement.scrollTop = 0;\n }\n };\n /**\n * Clear the focus elements.\n * @private\n */\n OptionsPane.prototype.clearFocusElement = function () {\n for (var i = 0; i < this.resultsListBlock.children.length; i++) {\n var index = this.focusedElement.indexOf(this.resultsListBlock.children[i]);\n if (index !== -1) {\n this.focusedElement.splice(index, 1);\n }\n }\n this.focusedIndex = 0;\n };\n /**\n * Show or hide option pane based on boolean value.\n * @param {boolean} show - Specifies showing or hiding the options pane.\n * @private\n */\n OptionsPane.prototype.showHideOptionsPane = function (show) {\n if (!isNullOrUndefined(this.viewer.owner.selectionModule)) {\n if (show) {\n this.localeValue = new L10n('documenteditor', this.viewer.owner.defaultLocale);\n this.localeValue.setLocale(this.viewer.owner.locale);\n setCulture(this.viewer.owner.locale);\n if (isNullOrUndefined(this.optionsPane)) {\n this.initOptionsPane(this.localeValue);\n //Add Option Pane\n var element = document.getElementById(this.viewer.owner.element.id);\n var optionPaneContainer = document.createElement('div');\n optionPaneContainer.className = 'e-documenteditor-optionspane';\n optionPaneContainer.setAttribute('style', 'display:inline-flex');\n optionPaneContainer.appendChild(this.viewer.owner.optionsPaneModule.optionsPane);\n this.viewer.owner.getDocumentEditorElement().appendChild(optionPaneContainer);\n optionPaneContainer.appendChild(this.viewer.viewerContainer);\n element.appendChild(optionPaneContainer);\n }\n this.optionsPane.style.display = 'block';\n if (this.viewer.owner.isReadOnlyMode) {\n this.tabInstance.hideTab(1);\n }\n else {\n this.tabInstance.hideTab(1, false);\n }\n if (this.isReplace && !this.viewer.owner.isReadOnlyMode) {\n this.tabInstance.select(1);\n this.isReplace = false;\n this.isOptionsPane = false;\n }\n else {\n this.tabInstance.select(0);\n }\n this.searchDiv.innerHTML = this.localeValue.getConstant(this.searchText);\n this.isOptionsPaneShow = true;\n // tslint:disable-next-line:max-line-length\n var textBox = document.getElementById(this.viewer.owner.getDocumentEditorElement().id + '_option_search_text_box');\n var selectedText = this.viewer.owner.selection.text;\n if (!isNullOrUndefined(selectedText)) {\n var char = ['\\v', '\\r'];\n var index = HelperMethods.indexOfAny(selectedText, char);\n selectedText = index < 0 ? selectedText : selectedText.substring(0, index);\n }\n textBox.value = selectedText;\n textBox.select();\n this.messageDiv.innerHTML = '';\n if (this.searchIcon.classList.contains('e-de-op-search-close-icon')) {\n this.searchIcon.classList.add('e-de-op-search-icon');\n this.searchIcon.classList.remove('e-de-op-search-close-icon');\n }\n this.viewer.selection.caret.style.display = 'none';\n this.focusedIndex = 3;\n this.focusedElement = [];\n if (this.isOptionsPane) {\n // tslint:disable-next-line:max-line-length\n this.focusedElement.push(this.closeButton, this.findTabButtonHeader, this.replaceTabButtonHeader, this.searchInput, this.searchIcon, this.navigateToPreviousResult, this.navigateToNextResult, this.matchInput, this.wholeInput);\n }\n else {\n // tslint:disable-next-line:max-line-length\n this.focusedElement.push(this.closeButton, this.findTabButtonHeader, this.replaceTabButtonHeader, this.searchInput, this.searchIcon, this.navigateToPreviousResult, this.navigateToNextResult, this.matchInput, this.wholeInput, this.replaceWith, this.replaceButton, this.replaceAllButton);\n }\n this.viewer.updateViewerSize();\n }\n else {\n if (!isNullOrUndefined(this.optionsPane)) {\n this.clearSearchResultItems();\n this.clearSearchHighlight();\n this.isOptionsPaneShow = false;\n var resultListBox = document.getElementById(this.viewer.owner.containerId + '_list_box_container');\n var message = document.getElementById(this.viewer.owner.containerId + '_search_status');\n if (!isNullOrUndefined(resultListBox) && !isNullOrUndefined(message)) {\n resultListBox.style.display = 'none';\n this.clearFocusElement();\n resultListBox.innerHTML = '';\n message.innerHTML = this.localeValue.getConstant('No matches');\n }\n }\n this.viewer.updateViewerSize();\n if (!isNullOrUndefined(this.optionsPane)) {\n if (this.optionsPane.style.display !== 'none') {\n this.viewer.selection.updateCaretPosition();\n this.optionsPane.style.display = 'none';\n }\n }\n this.viewer.updateFocus();\n this.viewer.selection.caret.style.display = 'block';\n }\n }\n };\n /**\n * Adds search highlight border.\n * @private\n */\n OptionsPane.prototype.addSearchHighlightBorder = function (lineWidget) {\n var highlighters = undefined;\n if (this.searchHighlighters.containsKey(lineWidget)) {\n highlighters = this.searchHighlighters.get(lineWidget);\n }\n else {\n highlighters = [];\n this.searchHighlighters.add(lineWidget, highlighters);\n }\n var searchHighlight = new SearchWidgetInfo(0, 0);\n highlighters.push(searchHighlight);\n return searchHighlight;\n };\n /**\n * Clears search results.\n * @private\n */\n OptionsPane.prototype.clearSearchResultItems = function () {\n if (!isNullOrUndefined(this.viewer.owner.findResultsList)) {\n this.viewer.owner.findResultsList = [];\n }\n };\n /**\n * Clears search highlight.\n * @private\n */\n OptionsPane.prototype.clearSearchHighlight = function () {\n if (!isNullOrUndefined(this.searchHighlighters)) {\n this.searchHighlighters.clear();\n this.searchHighlighters = undefined;\n }\n };\n /**\n * Highlight search result\n * @private\n */\n OptionsPane.prototype.highlightSearchResult = function (paragraph, start, end) {\n var selectionStartIndex = 0;\n var selectionEndIndex = 0;\n var startElement = null;\n var endElement = null;\n // tslint:disable-next-line:max-line-length\n var lineWidget = this.viewer.selection.getStartLineWidget(paragraph, start, startElement, selectionStartIndex);\n selectionStartIndex = lineWidget.index;\n startElement = lineWidget.element;\n var startLineWidget = startElement ? startElement.line : paragraph.childWidgets[0];\n var endLine = this.viewer.selection.getEndLineWidget(end, endElement, selectionEndIndex);\n selectionEndIndex = endLine.index;\n endElement = endLine.element;\n var endLineWidget = endElement ? endElement.line :\n end.paragraph.childWidgets[end.paragraph.childWidgets.length - 1];\n var top = this.viewer.selection.getTop(startLineWidget);\n var left = this.viewer.selection.getLeftInternal(startLineWidget, startElement, selectionStartIndex);\n if (!isNullOrUndefined(startLineWidget) && startLineWidget === endLineWidget) {\n //find result ends in current line.\n var right = this.viewer.selection.getLeftInternal(endLineWidget, endElement, selectionEndIndex);\n this.createHighlightBorder(startLineWidget, right - left, left, top);\n }\n else {\n if (!isNullOrUndefined(startLineWidget)) {\n if (paragraph !== startLineWidget.paragraph) {\n paragraph = startLineWidget.paragraph;\n }\n // tslint:disable-next-line:max-line-length\n this.createHighlightBorder(startLineWidget, this.viewer.selection.getWidth(startLineWidget, true) - (left - startLineWidget.paragraph.x), left, top);\n var lineIndex = startLineWidget.paragraph.childWidgets.indexOf(startLineWidget);\n //Iterates to last item of paragraph or search result end.\n var startParagraphWidget = void 0;\n for (var i = 0; i < paragraph.childWidgets.length; i++) {\n if (paragraph === startLineWidget.paragraph) {\n lineIndex += 1;\n }\n this.highlightSearchResultParaWidget(paragraph, lineIndex, endLineWidget, endElement, selectionEndIndex);\n if (paragraph === endLineWidget.paragraph) {\n return;\n }\n else {\n lineIndex = 0;\n }\n }\n }\n }\n };\n /**\n * @private\n */\n // tslint:disable-next-line:max-line-length\n OptionsPane.prototype.highlightSearchResultParaWidget = function (widget, startIndex, endLine, endElement, endIndex) {\n var top = 0;\n for (var j = startIndex; j < widget.childWidgets.length; j++) {\n var lineWidget = widget.childWidgets[j];\n if (j === startIndex) {\n top = this.viewer.selection.getTop(lineWidget);\n }\n var left = this.viewer.selection.getLeft(lineWidget);\n if (lineWidget === endLine) {\n //Search result ends in current line.\n var right = this.viewer.selection.getLeftInternal(endLine, endElement, endIndex);\n this.createHighlightBorder(lineWidget, right - left, left, top);\n return;\n }\n this.createHighlightBorder(lineWidget, this.viewer.selection.getWidth(lineWidget, true) - (left - widget.x), left, top);\n top += lineWidget.height;\n }\n };\n /**\n * @private\n */\n OptionsPane.prototype.createHighlightBorder = function (lineWidget, width, left, top) {\n var findHighLight = this.addSearchHighlightBorder(lineWidget);\n var page = this.viewer.owner.selection.getPage(lineWidget.paragraph);\n var pageTop = page.boundingRectangle.y;\n var pageLeft = page.boundingRectangle.x;\n findHighLight.left = Math.ceil(left);\n top = Math.ceil(top);\n findHighLight.width = Math.floor(width);\n var height = Math.floor(lineWidget.height);\n var context = this.viewer.containerContext;\n };\n /**\n * Dispose the internal objects which are maintained.\n * @private\n */\n OptionsPane.prototype.destroy = function () {\n if (this.optionsPane) {\n this.optionsPane.innerHTML = '';\n this.optionsPane = undefined;\n }\n if (this.resultsListBlock) {\n this.resultsListBlock.innerHTML = '';\n this.resultsListBlock = undefined;\n }\n if (this.messageDiv) {\n this.messageDiv.innerHTML = '';\n this.messageDiv = undefined;\n }\n if (this.resultContainer) {\n this.resultContainer.innerHTML = '';\n }\n this.resultContainer = undefined;\n if (this.searchInput) {\n this.searchInput.value = '';\n this.searchInput = undefined;\n }\n if (this.searchDiv) {\n this.searchDiv.innerHTML = '';\n this.searchDiv = undefined;\n }\n if (this.searchTextBoxContainer) {\n this.searchTextBoxContainer.innerHTML = '';\n this.searchTextBoxContainer = undefined;\n }\n if (this.replaceWith) {\n this.replaceWith.innerHTML = '';\n this.replaceWith = undefined;\n }\n if (this.findDiv) {\n this.findDiv.innerHTML = '';\n this.findDiv = undefined;\n }\n if (this.replaceButton) {\n this.replaceButton.innerHTML = '';\n this.replaceButton = undefined;\n }\n if (this.replaceAllButton) {\n this.replaceAllButton.innerHTML = '';\n this.replaceAllButton = undefined;\n }\n if (this.matchInput) {\n this.matchInput.innerHTML = '';\n this.matchCase = undefined;\n }\n if (this.wholeInput) {\n this.wholeInput.innerHTML = '';\n this.wholeWord = undefined;\n }\n if (this.regularInput) {\n this.regularInput.innerHTML = '';\n this.regular = undefined;\n }\n if (!isNullOrUndefined(this.results)) {\n this.results.destroy();\n }\n if (this.focusedElement) {\n this.focusedElement = [];\n }\n this.focusedElement = undefined;\n this.destroyInternal();\n };\n /**\n * Dispose the internal objects which are maintained.\n */\n OptionsPane.prototype.destroyInternal = function () {\n if (this.searchText) {\n this.searchText = undefined;\n }\n if (this.resultsText) {\n this.resultsText = undefined;\n }\n if (this.messageDivText) {\n this.messageDivText = undefined;\n }\n if (this.replaceButtonText) {\n this.replaceButtonText = undefined;\n }\n if (this.replaceAllButtonText) {\n this.replaceAllButtonText = undefined;\n }\n if (this.occurrenceDivText) {\n this.occurrenceDivText = undefined;\n }\n };\n return OptionsPane;\n}());\nexport { OptionsPane };\n","import { TableWidget } from '../index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Point, HelperMethods } from './editor-helper';\n/**\n * @private\n */\nvar TableResizer = /** @class */ (function () {\n /**\n * @private\n */\n function TableResizer(node) {\n this.resizeNode = 0;\n this.resizerPosition = 0;\n this.currentResizingTable = undefined;\n this.owner = node;\n this.startingPoint = new Point(0, 0);\n }\n Object.defineProperty(TableResizer.prototype, \"viewer\", {\n /**\n * @private\n */\n get: function () {\n return this.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Gets module name.\n */\n TableResizer.prototype.getModuleName = function () {\n return 'TableResizer';\n };\n /**\n * @private\n */\n TableResizer.prototype.updateResizingHistory = function (touchPoint) {\n if (this.owner.editorHistory) {\n this.owner.editorHistory.updateResizingHistory(touchPoint, this);\n }\n this.viewer.isRowOrCellResizing = false;\n this.resizerPosition = -1;\n };\n TableResizer.prototype.handleResize = function (point) {\n this.owner.viewer.isRowOrCellResizing = true;\n this.startingPoint.x = point.x;\n this.startingPoint.y = point.y;\n //Initialize resizing history.\n this.owner.editorHistory.initResizingHistory(point, this);\n };\n //Table Resizing implementation starts\n /**\n * @private\n */\n TableResizer.prototype.isInRowResizerArea = function (touchPoint) {\n var position = this.getRowReSizerPosition(undefined, touchPoint);\n if (position === -1) {\n return false;\n }\n else {\n this.resizeNode = 1;\n this.resizerPosition = position;\n return true;\n }\n };\n TableResizer.prototype.isInCellResizerArea = function (touchPoint) {\n var position = this.getCellReSizerPosition(touchPoint);\n if (position === -1) {\n return false;\n }\n else {\n this.resizeNode = 0;\n this.resizerPosition = position;\n return true;\n }\n };\n /**\n * Gets cell resizer position.\n * @param {Point} point\n * @private\n */\n TableResizer.prototype.getCellReSizerPosition = function (touchPoint) {\n var position = -1;\n var resizerBoundaryWidth = 2;\n var tableWidget = this.getTableWidget(touchPoint);\n var cellWidget = this.getTableCellWidget(touchPoint);\n var cellSpacing = isNullOrUndefined(tableWidget) ? 0 : tableWidget.tableFormat.cellSpacing;\n if (tableWidget && cellSpacing > 0) {\n this.currentResizingTable = tableWidget;\n // tslint:disable-next-line:max-line-length\n if (this.viewer.isInsideRect(tableWidget.x - HelperMethods.convertPointToPixel(tableWidget.leftBorderWidth) - 0.25, tableWidget.y, HelperMethods.convertPointToPixel(tableWidget.leftBorderWidth) + 0.5, tableWidget.height, touchPoint)) {\n return position = 0;\n }\n var startingPointX = tableWidget.x;\n for (var i = 0; i < tableWidget.tableHolder.columns.length; i++) {\n var preferredWidth = HelperMethods.convertPointToPixel(tableWidget.tableHolder.columns[i].preferredWidth);\n // tslint:disable-next-line:max-line-length\n if ((this.viewer.isInsideRect(startingPointX - 1, tableWidget.y, tableWidget.leftBorderWidth + resizerBoundaryWidth, tableWidget.height, touchPoint))) {\n return position = i > 0 ? i : 0;\n // tslint:disable-next-line:max-line-length\n }\n else if (i > 0 && (this.viewer.isInsideRect(startingPointX + preferredWidth - resizerBoundaryWidth / 2, tableWidget.y, resizerBoundaryWidth, tableWidget.height, touchPoint))) {\n return position = (i + 1);\n }\n startingPointX = startingPointX + preferredWidth;\n }\n }\n else {\n if (!isNullOrUndefined(cellWidget)) {\n this.currentResizingTable = cellWidget.ownerTable;\n // tslint:disable-next-line:max-line-length\n if (this.viewer.isInsideRect(cellWidget.x - cellWidget.margin.left - resizerBoundaryWidth / 2, cellWidget.y - cellWidget.margin.top, resizerBoundaryWidth, cellWidget.height, touchPoint)) {\n return position = cellWidget.columnIndex;\n // tslint:disable-next-line:max-line-length\n }\n else if (isNullOrUndefined(cellWidget.nextRenderedWidget)\n && this.viewer.isInsideRect(cellWidget.x + cellWidget.margin.right + cellWidget.width - resizerBoundaryWidth / 2, cellWidget.y - cellWidget.margin.top, resizerBoundaryWidth, cellWidget.height, touchPoint)) {\n return position = (cellWidget.columnIndex + cellWidget.cellFormat.columnSpan);\n }\n else if (cellWidget.childWidgets.length > 0) {\n return this.getCellReSizerPositionInternal(cellWidget, touchPoint); // Gets the nested table resizer position.\n }\n }\n }\n return position;\n };\n /**\n * Gets cell resizer position.\n * @param {TableCellWidget} cellWidget\n * @param {Point} touchPoint\n */\n TableResizer.prototype.getCellReSizerPositionInternal = function (cellWidget, touchPoint) {\n var position = -1;\n var childTableWidget = this.getTableWidgetFromWidget(touchPoint, cellWidget);\n var childCellWidget = undefined;\n if (!isNullOrUndefined(childTableWidget) && childTableWidget.tableFormat.cellSpacing > 0) {\n this.currentResizingTable = childTableWidget;\n // tslint:disable-next-line:max-line-length\n if (this.viewer.isInsideRect(childTableWidget.x - childTableWidget.leftBorderWidth - 0.25, childTableWidget.y, childTableWidget.leftBorderWidth + 0.5, childTableWidget.height, touchPoint)) {\n return position = 0;\n }\n var startingPointX = childTableWidget.x;\n for (var i = 0; i < childTableWidget.tableHolder.columns.length; i++) {\n // tslint:disable-next-line:max-line-length\n var preferredWidth = HelperMethods.convertPointToPixel(childTableWidget.tableHolder.columns[i].preferredWidth);\n // tslint:disable-next-line:max-line-length\n if ((this.viewer.isInsideRect(startingPointX - 1, childTableWidget.y, childTableWidget.leftBorderWidth + 2, childTableWidget.height, touchPoint))) {\n return position = i > 0 ? i : 0;\n // tslint:disable-next-line:max-line-length\n }\n else if (i > 0 && (this.viewer.isInsideRect(startingPointX + preferredWidth - 1, childTableWidget.y, 2, childTableWidget.height, touchPoint))) {\n return position = (i + 1);\n }\n startingPointX = startingPointX + preferredWidth;\n }\n }\n else {\n if (!isNullOrUndefined(childTableWidget)) {\n childCellWidget = childTableWidget.getTableCellWidget(touchPoint);\n }\n if (!isNullOrUndefined(childCellWidget)) {\n this.currentResizingTable = childCellWidget.ownerTable;\n // tslint:disable-next-line:max-line-length\n if (this.viewer.isInsideRect(childCellWidget.x - childCellWidget.margin.left - 1, childCellWidget.y - childCellWidget.margin.top, 2, childCellWidget.height, touchPoint)) {\n return position = childCellWidget.columnIndex;\n }\n else if (isNullOrUndefined(childCellWidget.nextRenderedWidget)\n // tslint:disable-next-line:max-line-length\n && this.viewer.isInsideRect(childCellWidget.x + childCellWidget.margin.right + childCellWidget.width - 1, childCellWidget.y - childCellWidget.margin.top, 2, childCellWidget.height, touchPoint)) {\n return position = (childCellWidget.columnIndex + childCellWidget.cellFormat.columnSpan);\n }\n else if (childCellWidget.childWidgets.length > 0) {\n return this.getCellReSizerPositionInternal(childCellWidget, touchPoint);\n }\n }\n }\n return position;\n };\n TableResizer.prototype.getRowReSizerPosition = function (widget, touchPoint) {\n var tableWidget = undefined;\n var cellWidget = undefined;\n if (isNullOrUndefined(widget)) {\n tableWidget = this.getTableWidget(touchPoint);\n cellWidget = this.getTableCellWidget(touchPoint);\n }\n else {\n tableWidget = this.getTableWidgetFromWidget(touchPoint, widget);\n }\n var cellSpacing = isNullOrUndefined(tableWidget) ? 0 : tableWidget.tableFormat.cellSpacing;\n if (tableWidget && cellSpacing > 0) {\n this.currentResizingTable = tableWidget;\n // tslint:disable-next-line:max-line-length\n if (this.owner.viewer.isInsideRect(tableWidget.x, tableWidget.y + tableWidget.height - cellSpacing, this.getActualWidth(tableWidget.lastChild), (isNullOrUndefined(tableWidget.nextSplitWidget) ? tableWidget.bottomBorderWidth + cellSpacing : 0), touchPoint)) {\n return tableWidget.lastChild.rowIndex;\n }\n for (var i = 0; i < tableWidget.childWidgets.length; i++) {\n //Need to consider for splitted widgets\n var rowWidget = tableWidget.childWidgets[i];\n if (tableWidget.childWidgets.indexOf(rowWidget) > -1\n // tslint:disable-next-line:max-line-length\n && (this.owner.viewer.isInsideRect(rowWidget.x, rowWidget.y + rowWidget.height + cellSpacing / 2, this.getActualWidth(rowWidget), cellSpacing / 2, touchPoint))) {\n return rowWidget.rowIndex;\n }\n }\n }\n else {\n if (tableWidget && cellWidget) {\n cellWidget = this.getTableCellWidget(touchPoint);\n }\n if (cellWidget) {\n var rowWidget = cellWidget.containerWidget;\n var height = 0;\n if (rowWidget.rowIndex === rowWidget.ownerTable.childWidgets.length - 1) {\n height = rowWidget.bottomBorderWidth + 2;\n }\n else {\n height = rowWidget.nextRenderedWidget.topBorderWidth + 2;\n }\n // tslint:disable-next-line:max-line-length\n if (this.owner.viewer.isInsideRect(rowWidget.x, rowWidget.y + rowWidget.height - height, rowWidget.width, height * 2, touchPoint)) {\n this.currentResizingTable = rowWidget.ownerTable;\n return rowWidget.rowIndex;\n }\n else {\n if (cellWidget.childWidgets.length > 0) {\n return this.getRowReSizerPosition(cellWidget, touchPoint);\n }\n }\n }\n }\n return -1;\n };\n /**\n * To handle Table Row and cell resize\n * @param touchPoint\n * @private\n */\n TableResizer.prototype.handleResizing = function (touchPoint) {\n var dragValue = 0;\n if (this.resizeNode === 0) {\n dragValue = touchPoint.x - this.startingPoint.x;\n this.resizeTableCellColumn(dragValue);\n }\n else {\n dragValue = touchPoint.y - this.startingPoint.y;\n this.resizeTableRow(dragValue);\n }\n };\n TableResizer.prototype.resizeTableRow = function (dragValue) {\n var table = this.currentResizingTable;\n if (isNullOrUndefined(table) || dragValue === 0) {\n return;\n }\n var selection = this.owner.selection;\n if (table.isInsideTable) {\n this.owner.isLayoutEnabled = false; //Layouting is disabled to skip the child table layouting. \n }\n if (this.resizerPosition > -1) {\n var row = table.childWidgets[this.resizerPosition];\n this.updateRowHeight(row, dragValue);\n selection.selectPosition(selection.start, selection.end);\n }\n if (table.isInsideTable) {\n var parentTable = this.owner.viewer.layout.getParentTable(table);\n this.owner.isLayoutEnabled = true; //layouting is enabled to layout the parent table of the nested table.\n table = parentTable;\n }\n this.startingPoint.y += HelperMethods.convertPointToPixel(dragValue);\n this.owner.viewer.layout.reLayoutTable(table);\n this.owner.editorModule.reLayout(this.owner.selection);\n };\n /**\n * Gets the table widget from given cursor point\n * @param cursorPoint\n */\n TableResizer.prototype.getTableWidget = function (cursorPoint) {\n var widget = undefined;\n var currentPage = this.owner.viewer.currentPage;\n if (!isNullOrUndefined(currentPage)) {\n for (var i = 0; i < currentPage.bodyWidgets.length; i++) {\n var bodyWidget = currentPage.bodyWidgets[i];\n widget = this.getTableWidgetFromWidget(cursorPoint, bodyWidget);\n if (!isNullOrUndefined(widget)) {\n break;\n }\n }\n }\n return widget;\n };\n TableResizer.prototype.getTableWidgetFromWidget = function (point, widget) {\n for (var j = 0; j < widget.childWidgets.length; j++) {\n if (widget.childWidgets[j] instanceof TableWidget) {\n var childWidget = widget.childWidgets[j];\n if (childWidget.y <= point.y && (childWidget.y + childWidget.height) >= point.y) {\n return childWidget;\n }\n }\n }\n return undefined;\n };\n /**\n * Return the table cell widget from the given cursor point\n * @param cursorPoint\n * @private\n */\n TableResizer.prototype.getTableCellWidget = function (cursorPoint) {\n var widget = undefined;\n var currentPage = this.owner.viewer.currentPage;\n if (!isNullOrUndefined(currentPage)) {\n for (var i = 0; i < currentPage.bodyWidgets.length; i++) {\n var bodyWidget = currentPage.bodyWidgets[i];\n widget = bodyWidget.getTableCellWidget(cursorPoint);\n if (!isNullOrUndefined(widget)) {\n break;\n }\n }\n }\n return widget;\n };\n TableResizer.prototype.updateRowHeight = function (row, dragValue) {\n var rowFormat = row.rowFormat;\n if (rowFormat.heightType === 'Auto') {\n rowFormat.heightType = 'AtLeast';\n var row_1 = rowFormat.ownerBase;\n var currentHeight = this.owner.viewer.layout.getRowHeight(row_1, [row_1]);\n //the minimum height of the Row in MS word is 2.7 points which is equal to 3.6 pixel.\n if (currentHeight + dragValue >= 2.7 && rowFormat.height !== currentHeight + dragValue) {\n rowFormat.height = currentHeight + dragValue;\n }\n }\n else {\n //the minimum height of the Row in MS word is 2.7 points which is equal to 3.6 pixel.\n if (rowFormat.height + dragValue >= 2.7 && rowFormat.height !== rowFormat.height + dragValue) {\n rowFormat.height = rowFormat.height + dragValue;\n }\n }\n };\n //Resize Table cell\n TableResizer.prototype.resizeTableCellColumn = function (dragValue) {\n var table = this.currentResizingTable;\n if (isNullOrUndefined(table) || dragValue === 0 || isNullOrUndefined(table.childWidgets)) {\n return;\n }\n var selectionFlag = true;\n var selection = this.owner.selection;\n this.owner.editor.setOffsetValue(selection);\n table = table.combineWidget(this.viewer);\n this.owner.isLayoutEnabled = false;\n // table.PreserveGrid = true;\n this.setPreferredWidth(table);\n var containerWidth = table.getOwnerWidth(true);\n var newIndent = table.leftIndent;\n var tableAlignment = table.tableFormat.tableAlignment;\n if (!selection.isEmpty) {\n selectionFlag = this.resizeColumnWithSelection(selection, table, dragValue);\n }\n if (!selectionFlag) {\n this.owner.isLayoutEnabled = true;\n return;\n }\n if (this.resizerPosition === 0) {\n // Todo: need to handle the resizing of first column and table indent.\n var columnIndex = this.resizerPosition;\n var rightColumn = table.tableHolder.columns[columnIndex];\n var width = rightColumn.preferredWidth;\n if (dragValue > 0) {\n var prevDragValue = 0;\n while (dragValue !== prevDragValue) {\n var newWidth = HelperMethods.round(rightColumn.preferredWidth - dragValue, 1);\n if (newWidth >= rightColumn.minWidth) {\n rightColumn.preferredWidth = newWidth;\n newIndent = table.leftIndent + dragValue;\n newIndent = newIndent >= -1440 ? (newIndent <= 1440 ? newIndent : 1440) : -1440;\n prevDragValue = dragValue;\n }\n else {\n prevDragValue = dragValue;\n dragValue += newWidth - rightColumn.minWidth;\n }\n }\n }\n else {\n var prevDragValue = 0;\n while (dragValue !== prevDragValue) {\n var newWidth = HelperMethods.round(rightColumn.preferredWidth - dragValue, 1);\n if (newWidth <= 2112) {\n rightColumn.preferredWidth = newWidth;\n newIndent = table.leftIndent + dragValue;\n newIndent = newIndent >= -1440 ? (newIndent <= 1440 ? newIndent : 1440) : -1440;\n prevDragValue = dragValue;\n }\n else {\n prevDragValue = dragValue;\n dragValue -= newWidth - 2112;\n }\n }\n }\n var dragOffset = dragValue;\n // tslint:disable-next-line:max-line-length\n if (tableAlignment !== 'Left' && (table.tableHolder.getTotalWidth() > containerWidth) && table.tableFormat.preferredWidthType === 'Auto') {\n if (table.tableHolder.isFitColumns(containerWidth, table.tableHolder.tableWidth, table.tableFormat.preferredWidthType === 'Auto')) {\n // tslint:disable-next-line:max-line-length\n table.tableHolder.fitColumns(containerWidth, table.tableHolder.tableWidth, table.tableFormat.preferredWidthType === 'Auto');\n }\n else {\n rightColumn.preferredWidth = width;\n }\n dragOffset = 0;\n }\n if (tableAlignment === 'Center'\n && (table.tableHolder.getTotalWidth() < containerWidth || table.tableFormat.preferredWidthType !== 'Auto')) {\n dragOffset = dragOffset / 2;\n }\n table.tableFormat.leftIndent = tableAlignment === 'Left' ? newIndent : 0;\n table.tableHolder.tableWidth = table.tableHolder.getTotalWidth();\n this.updateCellPreferredWidths(table);\n this.updateGridValue(table, true, dragOffset);\n }\n else if (table !== null && this.resizerPosition === table.tableHolder.columns.length) {\n // Todo: need to handle the resizing of last column and table width.\n this.resizeColumnAtLastColumnIndex(table, dragValue, containerWidth);\n }\n else {\n if (this.resizerPosition === -1) {\n this.owner.isLayoutEnabled = true;\n return;\n }\n this.resizeCellAtMiddle(table, dragValue);\n }\n // table.PreserveGrid = false;\n this.owner.isLayoutEnabled = true;\n selection.selectPosition(selection.start, selection.end);\n };\n /**\n * Resize Selected Cells\n */\n TableResizer.prototype.resizeColumnWithSelection = function (selection, table, dragValue) {\n var newIndent = table.leftIndent;\n var cellwidget = this.getTableCellWidget(this.startingPoint);\n if (cellwidget && (selection.selectedWidgets.containsKey(cellwidget) || (cellwidget.previousWidget\n && selection.selectedWidgets.containsKey((cellwidget.previousWidget))))) {\n var selectedCells = selection.getSelectedCells();\n if (this.resizerPosition === 0) {\n this.resizeColumnAtStart(table, dragValue, selectedCells);\n }\n else if (table !== null && this.resizerPosition === table.tableHolder.columns.length) {\n var leftColumnCollection = this.getColumnCells(table, this.resizerPosition, true);\n for (var i = 0; i < leftColumnCollection.length; i++) {\n var cell = leftColumnCollection[i];\n if (selectedCells.indexOf(cell) !== -1) {\n this.increaseOrDecreaseWidth(cell, dragValue, true);\n }\n }\n //Updates the grid after value for all the rows.\n this.updateRowsGridAfterWidth(table);\n table.updateWidth(dragValue);\n this.updateGridValue(table, true, dragValue);\n }\n else {\n if (this.resizerPosition === -1) {\n return false;\n }\n var columnIndex = this.resizerPosition;\n var leftColumnCollection = this.getColumnCells(table, columnIndex, true);\n var rightColumnCollection = this.getColumnCells(table, columnIndex, false);\n var isColumnResizing = this.isColumnSelected(table, columnIndex);\n if (leftColumnCollection.length > 0 && !isColumnResizing) {\n for (var i = 0; i < leftColumnCollection.length; i++) {\n if (selectedCells.indexOf(leftColumnCollection[i]) === -1) {\n leftColumnCollection.splice(i, 1);\n i--;\n }\n }\n }\n if (rightColumnCollection.length > 0 && !isColumnResizing) {\n for (var i = 0; i < rightColumnCollection.length; i++) {\n if (selectedCells.indexOf(rightColumnCollection[i]) === -1) {\n rightColumnCollection.splice(i, 1);\n i--;\n }\n }\n }\n //Getting the adjacent cell collections for left side selected cells in the right column collection.\n if (leftColumnCollection.length === 0 && rightColumnCollection.length > 0) {\n for (var i = 0; i < rightColumnCollection.length; i++) {\n var cell = rightColumnCollection[i];\n if (cell.previousWidget) {\n leftColumnCollection.push(cell.previousWidget);\n }\n }\n }\n else if (rightColumnCollection.length === 0 && leftColumnCollection.length > 0) {\n for (var i = 0; i < leftColumnCollection.length; i++) {\n var cell = leftColumnCollection[i];\n if (cell.nextWidget) {\n rightColumnCollection.push(cell.nextWidget);\n }\n }\n }\n this.changeWidthOfCells(table, leftColumnCollection, rightColumnCollection, dragValue, true);\n this.updateGridValue(table, true, dragValue);\n }\n selection.selectPosition(selection.start, selection.end);\n }\n return false;\n };\n /**\n * Resize selected cells at resizer position 0\n */\n TableResizer.prototype.resizeColumnAtStart = function (table, dragValue, selectedCells) {\n var newIndent = table.leftIndent;\n var rightColumnCollection = this.getColumnCells(table, this.resizerPosition, false);\n var offset = 0;\n var selectedRow = selectedCells[0].ownerRow;\n var rowFormat = selectedRow.rowFormat;\n if (rowFormat.beforeWidth > 0) {\n var newGridBefore = rowFormat.beforeWidth + dragValue;\n if (newGridBefore > 0) {\n this.updateGridBefore(selectedRow, dragValue);\n }\n else {\n var leastGridBefore = this.getLeastGridBefore(table, selectedRow);\n if (newGridBefore < leastGridBefore && offset !== newGridBefore) {\n newIndent = table.leftIndent + newGridBefore;\n table.tableFormat.leftIndent = newIndent >= -1440 ? (newIndent <= 1440 ? newIndent : 1440) : -1440;\n for (var i = 0; i < table.childWidgets.length; i++) {\n var tableRow = table.childWidgets[i];\n if (selectedRow !== tableRow) {\n this.updateGridBefore(tableRow, -newGridBefore);\n }\n }\n }\n }\n }\n else {\n if (dragValue < 0) {\n newIndent = table.leftIndent + dragValue;\n table.tableFormat.leftIndent = newIndent >= -1440 ? (newIndent <= 1440 ? newIndent : 1440) : -1440;\n this.updateWidthForCells(table, selectedCells, dragValue);\n }\n else {\n var leastGridBefore = this.getLeastGridBefore(table, selectedRow);\n var currentTableIndent = table.tableFormat.leftIndent;\n if (currentTableIndent === 0) {\n for (var i = 0; i < table.childWidgets.length; i++) {\n var tableRow = table.childWidgets[i];\n if (selectedCells.indexOf(tableRow.childWidgets[0]) !== -1) {\n this.updateGridBefore(tableRow, dragValue);\n this.increaseOrDecreaseWidth(tableRow.childWidgets[0], dragValue, false);\n }\n }\n }\n else {\n var difference = leastGridBefore - dragValue;\n if (difference > 0) {\n newIndent = table.leftIndent + dragValue;\n table.tableFormat.leftIndent = newIndent >= -1440 ? (newIndent <= 1440 ? newIndent : 1440) : -1440;\n this.updateWidthForCells(table, selectedCells, dragValue);\n }\n else {\n newIndent = table.leftIndent + leastGridBefore;\n table.tableFormat.leftIndent = newIndent >= -1440 ? (newIndent <= 1440 ? newIndent : 1440) : -1440;\n for (var i = 0; i < table.childWidgets.length; i++) {\n var tableRow = table.childWidgets[i];\n if (selectedCells.indexOf(tableRow.childWidgets[0]) !== -1) {\n this.increaseOrDecreaseWidth(tableRow.childWidgets[0], dragValue, false);\n this.updateGridBefore(tableRow, dragValue - leastGridBefore);\n }\n else {\n this.updateGridBefore(tableRow, -leastGridBefore);\n }\n }\n }\n }\n }\n }\n this.updateGridValue(table, true, dragValue);\n };\n TableResizer.prototype.updateWidthForCells = function (table, selectedCells, dragValue) {\n for (var i = 0; i < table.childWidgets.length; i++) {\n var tableRow = table.childWidgets[i];\n if (selectedCells.indexOf(tableRow.childWidgets[0]) !== -1) {\n this.increaseOrDecreaseWidth(tableRow.childWidgets[0], dragValue, false);\n }\n else {\n this.updateGridBefore(tableRow, -dragValue);\n }\n }\n };\n /**\n * Resize selected cells at last column\n */\n TableResizer.prototype.resizeColumnAtLastColumnIndex = function (table, dragValue, containerWidth) {\n var tableAlignment = table.tableFormat.tableAlignment;\n var preferredWidth = table.tableFormat.preferredWidth;\n var hasTableWidth = preferredWidth;\n var columnIndex = this.resizerPosition;\n var leftColumn = table.tableHolder.columns[columnIndex - 1];\n var prevDragValue = 0;\n while (dragValue !== prevDragValue) {\n var newWidth = HelperMethods.round(leftColumn.preferredWidth + dragValue, 1);\n if (newWidth >= leftColumn.minWidth) {\n leftColumn.preferredWidth = newWidth;\n prevDragValue = dragValue;\n }\n else {\n prevDragValue = dragValue;\n dragValue -= newWidth - leftColumn.minWidth;\n }\n }\n this.updateCellPreferredWidths(table);\n if (hasTableWidth || table.tableHolder.getTotalWidth() > containerWidth) {\n table.updateWidth(dragValue);\n table.tableHolder.tableWidth = table.tableHolder.getTotalWidth();\n }\n var dragOffset = dragValue;\n if (tableAlignment === 'Right') {\n dragOffset = 0;\n }\n else if (tableAlignment === 'Center') {\n dragOffset = dragOffset / 2;\n }\n this.updateGridValue(table, true, dragOffset);\n };\n /**\n * Resize selected cells at middle column\n */\n TableResizer.prototype.resizeCellAtMiddle = function (table, dragValue) {\n var columnIndex = this.resizerPosition;\n var leftColumn = table.tableHolder.columns[columnIndex - 1];\n var rightColumn = table.tableHolder.columns[columnIndex];\n if (dragValue > 0) {\n var isContinue = true;\n while (isContinue) {\n var newWidth = HelperMethods.round(rightColumn.preferredWidth - dragValue, 1);\n if (newWidth >= rightColumn.minWidth) {\n rightColumn.preferredWidth = newWidth;\n leftColumn.preferredWidth = leftColumn.preferredWidth + dragValue;\n isContinue = false;\n }\n else {\n dragValue += newWidth - rightColumn.minWidth;\n }\n }\n }\n else {\n var isContinue = true;\n while (isContinue) {\n var newWidth = HelperMethods.round(leftColumn.preferredWidth + dragValue, 1);\n if (newWidth >= leftColumn.minWidth) {\n leftColumn.preferredWidth = newWidth;\n rightColumn.preferredWidth = rightColumn.preferredWidth - dragValue;\n isContinue = false;\n }\n else {\n dragValue -= newWidth - leftColumn.minWidth;\n }\n }\n }\n // Update the cell widths based on the columns preferred width\n this.updateCellPreferredWidths(table);\n // table.tableFormat.AllowAutoFit = false;\n table.tableHolder.tableWidth = table.tableHolder.getTotalWidth();\n this.updateGridValue(table, true, dragValue);\n };\n TableResizer.prototype.updateGridValue = function (table, isUpdate, dragValue) {\n if (isUpdate) {\n table.calculateGrid();\n table.isGridUpdated = false;\n }\n table.buildTableColumns();\n table.isGridUpdated = true;\n this.viewer.owner.isLayoutEnabled = true;\n if (table.isInsideTable) {\n var parentTable = this.viewer.layout.getParentTable(table);\n this.viewer.layout.reLayoutTable(parentTable); // Need to optmize this.\n }\n else {\n this.viewer.layout.reLayoutTable(table);\n }\n this.owner.editor.getOffsetValue(this.viewer.selection);\n this.owner.editorModule.reLayout(this.owner.selection);\n if (dragValue) {\n this.startingPoint.x += HelperMethods.convertPointToPixel(dragValue);\n this.resizerPosition = this.getCellReSizerPosition(this.startingPoint);\n }\n };\n TableResizer.prototype.getColumnCells = function (table, columnIndex, isLeftSideCollection) {\n var cells = [];\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n if (isLeftSideCollection) {\n if (cell.columnIndex + cell.cellFormat.columnSpan === columnIndex) {\n cells.push(cell);\n }\n }\n else {\n if (cell.columnIndex === columnIndex) {\n cells.push(cell);\n }\n }\n }\n }\n return cells;\n };\n TableResizer.prototype.updateGridBefore = function (row, offset) {\n if (row.rowFormat.beforeWidth + offset !== row.rowFormat.beforeWidth) {\n row.rowFormat.beforeWidth = row.rowFormat.beforeWidth + offset;\n row.rowFormat.gridBeforeWidth = row.rowFormat.beforeWidth;\n }\n };\n TableResizer.prototype.getLeastGridBefore = function (table, ignoreRow) {\n var gridBefore = 0;\n var flag = 0;\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n if (row !== ignoreRow) {\n if (flag === 0) {\n gridBefore = row.rowFormat.beforeWidth;\n flag++;\n }\n if (row.rowFormat.beforeWidth <= gridBefore) {\n gridBefore = row.rowFormat.beforeWidth;\n }\n }\n }\n return gridBefore;\n };\n TableResizer.prototype.increaseOrDecreaseWidth = function (cell, dragValue, isIncrease) {\n var preferredWidth = cell.cellFormat.preferredWidth;\n if (cell.cellFormat.preferredWidthType === 'Auto') {\n preferredWidth = cell.cellFormat.cellWidth;\n cell.cellFormat.preferredWidthType = 'Point';\n }\n var minimumWidth = cell.ownerColumn.minWidth;\n if (cell.cellFormat.preferredWidthType === 'Percent') {\n minimumWidth = cell.convertPointToPercent(minimumWidth);\n }\n // Margins properties usedd for internal purpose.\n if (isIncrease) {\n cell.cellFormat.preferredWidth = preferredWidth + dragValue > minimumWidth ? preferredWidth + dragValue : minimumWidth;\n }\n else {\n cell.cellFormat.preferredWidth = preferredWidth - dragValue > minimumWidth ? preferredWidth - dragValue : minimumWidth;\n }\n };\n // tslint:disable-next-line:max-line-length\n TableResizer.prototype.changeWidthOfCells = function (table, leftColumnCollection, rightColumnCollection, dragValue, isSelection) {\n if (leftColumnCollection.length > 0) {\n var flag = false;\n for (var i = 0; i < leftColumnCollection.length; i++) {\n var cell = leftColumnCollection[i];\n this.increaseOrDecreaseWidth(cell, dragValue, true);\n if (cell.cellIndex === cell.ownerRow.childWidgets.length - 1) {\n flag = true;\n }\n }\n if (flag) {\n this.updateRowsGridAfterWidth(table);\n }\n }\n if (rightColumnCollection.length > 0) {\n var diff = 0;\n for (var i = 0; i < rightColumnCollection.length; i++) {\n var cell = rightColumnCollection[i];\n if (cell.cellIndex === 0) {\n var newGridBefore = cell.ownerRow.rowFormat.beforeWidth + dragValue;\n if (newGridBefore >= 0) {\n this.updateGridBefore(cell.ownerRow, dragValue);\n }\n else {\n if (diff !== newGridBefore) {\n diff = newGridBefore;\n }\n cell.ownerRow.rowFormat.gridBeforeWidth = 0;\n cell.ownerRow.rowFormat.gridBeforeWidthType = 'Auto';\n }\n }\n this.increaseOrDecreaseWidth(cell, dragValue, false);\n }\n if (diff !== 0) {\n var newIndent = table.leftIndent + diff;\n table.tableFormat.leftIndent = newIndent >= -1440 ? (newIndent <= 1440 ? newIndent : 1440) : -1440;\n for (var j = 0; j < table.childWidgets.length; j++) {\n var row = table.childWidgets[j];\n if (rightColumnCollection.indexOf(row.childWidgets[0]) === -1) {\n this.updateGridBefore(row, diff > 0 ? diff : -diff);\n }\n }\n }\n }\n };\n TableResizer.prototype.updateRowsGridAfterWidth = function (table) {\n var maxRowWidth = this.getMaxRowWidth(table, true);\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n var currentRowWidth = this.getRowWidth(row, true);\n if (maxRowWidth >= currentRowWidth && row.rowFormat.afterWidth !== maxRowWidth - currentRowWidth) {\n var value = maxRowWidth - currentRowWidth;\n row.rowFormat.gridAfterWidth = value;\n row.rowFormat.afterWidth = value;\n }\n }\n };\n TableResizer.prototype.getRowWidth = function (row, toUpdateGridAfter) {\n var rowWidth = 0;\n if (toUpdateGridAfter) {\n rowWidth = rowWidth + row.rowFormat.beforeWidth;\n }\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cell = row.childWidgets[i];\n rowWidth += cell.cellFormat.cellWidth;\n }\n return rowWidth;\n };\n TableResizer.prototype.getMaxRowWidth = function (table, toUpdateGridAfter) {\n var width = 0;\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n var rowWidth = 0;\n if (toUpdateGridAfter) {\n rowWidth = rowWidth + row.rowFormat.beforeWidth;\n }\n for (var i_1 = 0; i_1 < row.childWidgets.length; i_1++) {\n var cell = row.childWidgets[i_1];\n rowWidth += cell.cellFormat.cellWidth;\n }\n if (width < rowWidth) {\n width = rowWidth;\n }\n }\n return width;\n };\n TableResizer.prototype.isColumnSelected = function (table, columnIndex) {\n var selection = this.owner.selection;\n var selectedCells = selection.getSelectedCells();\n var leftColumnCells = this.getColumnCells(table, columnIndex, true);\n var rightColumnCells = this.getColumnCells(table, columnIndex, false);\n var isColumnSelected = false;\n for (var i = 0; i < leftColumnCells.length; i++) {\n var columnCell = leftColumnCells[i];\n isColumnSelected = selectedCells.indexOf(columnCell) !== -1 ? true : false;\n }\n if (!isColumnSelected) {\n for (var i = 0; i < rightColumnCells.length; i++) {\n var columnCell = rightColumnCells[i];\n isColumnSelected = selectedCells.indexOf(columnCell) !== -1 ? true : false;\n }\n }\n return isColumnSelected;\n };\n TableResizer.prototype.applyProperties = function (table, tableHistoryInfo) {\n if (isNullOrUndefined(tableHistoryInfo)) {\n return;\n }\n table = table;\n // PreserveGrid = true;\n if (tableHistoryInfo.tableHolder) {\n table.tableHolder = tableHistoryInfo.tableHolder.clone();\n }\n if (tableHistoryInfo.tableFormat !== null) {\n table.tableFormat.leftIndent = tableHistoryInfo.tableFormat.leftIndent;\n table.tableFormat.preferredWidth = tableHistoryInfo.tableFormat.preferredWidth;\n table.tableFormat.preferredWidthType = tableHistoryInfo.tableFormat.preferredWidthType;\n }\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n var rowFormat = tableHistoryInfo.rows[i];\n row.rowFormat.gridBefore = rowFormat.gridBefore;\n row.rowFormat.gridBeforeWidth = rowFormat.gridBeforeWidth;\n row.rowFormat.gridBeforeWidthType = rowFormat.gridBeforeWidthType;\n row.rowFormat.gridAfter = rowFormat.gridAfter;\n row.rowFormat.gridAfterWidth = rowFormat.gridAfterWidth;\n row.rowFormat.gridAfterWidthType = rowFormat.gridAfterWidthType;\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n var cellFormat = rowFormat.cells[j];\n cell.columnIndex = cellFormat.columnIndex;\n cell.cellFormat.columnSpan = cellFormat.columnSpan;\n cell.cellFormat.preferredWidth = cellFormat.preferredWidth;\n cell.cellFormat.preferredWidthType = cellFormat.preferredWidthType;\n }\n }\n var containerWidth = table.getOwnerWidth(true);\n var tableWidth = table.getTableClientWidth(containerWidth);\n //Sets the width to cells\n table.setWidthToCells(tableWidth, table.tableFormat.preferredWidthType === 'Auto');\n // PreserveGrid = false;\n };\n /**\n * Return table row width\n */\n TableResizer.prototype.getActualWidth = function (row) {\n var width = 0;\n if (row.childWidgets.length > 0) {\n for (var i = 0; i < row.childWidgets.length; i++) {\n width += row.childWidgets[i].cellFormat.cellWidth;\n }\n }\n return width;\n };\n TableResizer.prototype.setPreferredWidth = function (table) {\n for (var i = 0; i < table.childWidgets.length; i++) {\n var rw = table.childWidgets[i];\n var rowFormat = rw.rowFormat;\n if (rowFormat.gridBefore > 0) {\n rowFormat.gridBeforeWidth = rowFormat.beforeWidth;\n rowFormat.gridBeforeWidthType = 'Point';\n }\n for (var j = 0; j < rw.childWidgets.length; j++) {\n var cell = rw.childWidgets[j];\n cell.cellFormat.preferredWidth = cell.cellFormat.cellWidth;\n cell.cellFormat.preferredWidthType = 'Point';\n }\n if (rowFormat.gridAfter > 0) {\n rowFormat.gridAfterWidth = rowFormat.afterWidth;\n rowFormat.gridAfterWidthType = 'Point';\n }\n }\n };\n TableResizer.prototype.updateCellPreferredWidths = function (table) {\n var tableWidth = table.tableHolder.tableWidth;\n var isAutoFit = table.tableFormat.preferredWidthType === 'Auto';\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n if (row.rowFormat.gridBefore > 0) {\n var width = table.tableHolder.getCellWidth(0, row.rowFormat.gridBefore, tableWidth, isAutoFit);\n this.updateGridBeforeWidth(width, row);\n }\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n cell.updateWidth(table.tableHolder.getCellWidth(cell.columnIndex, cell.cellFormat.columnSpan, tableWidth, isAutoFit));\n }\n if (row.rowFormat.gridAfter > 0) {\n // tslint:disable-next-line:max-line-length\n this.updateGridAfterWidth(table.tableHolder.getCellWidth(row.childWidgets.length, row.rowFormat.gridAfter, tableWidth, isAutoFit), row);\n }\n }\n };\n /**\n * Update grid before width value\n */\n TableResizer.prototype.updateGridBeforeWidth = function (width, row) {\n var rowFormat = row.rowFormat;\n if (width !== rowFormat.beforeWidth) {\n rowFormat.beforeWidth = width;\n if (rowFormat.gridBeforeWidthType === 'Auto') {\n rowFormat.gridBeforeWidthType = 'Point';\n }\n if (rowFormat.gridBeforeWidthType === 'Point') {\n rowFormat.gridBeforeWidth = rowFormat.beforeWidth;\n }\n else {\n // The value is calculated from the pixel values hence, its converted to percent using method. \n var ownerWidth = row.ownerTable.getTableClientWidth(row.ownerTable.getOwnerWidth(true));\n var value = row.ownerTable.convertPointToPercent(rowFormat.beforeWidth, ownerWidth);\n rowFormat.gridBeforeWidth = value;\n }\n }\n };\n /**\n * Update grid after width value\n */\n TableResizer.prototype.updateGridAfterWidth = function (width, row) {\n var rowFormat = row.rowFormat;\n if (width !== rowFormat.afterWidth) {\n rowFormat.afterWidth = width;\n }\n if (rowFormat.gridAfterWidthType === 'Auto') {\n rowFormat.gridAfterWidthType = 'Point';\n }\n if (rowFormat.gridAfterWidthType === 'Point') {\n rowFormat.gridAfterWidth = rowFormat.afterWidth;\n }\n else {\n // The value is calculated from the pixel values hence, its converted to percent using method. \n var ownerWidth = row.ownerTable.getTableClientWidth(row.ownerTable.getOwnerWidth(true));\n var value = row.ownerTable.convertPointToPercent(rowFormat.afterWidth, ownerWidth);\n rowFormat.gridAfterWidth = value;\n }\n };\n return TableResizer;\n}());\nexport { TableResizer };\n","import { TextPosition, ImageFormat } from '../selection/selection-helper';\nimport { ParagraphWidget, LineWidget, ElementBox, TextElementBox, Margin, ImageElementBox, BlockWidget, BlockContainer, BodyWidget, TableWidget, TableCellWidget, TableRowWidget, Widget, ListTextElementBox, BookmarkElementBox, HeaderFooterWidget, FieldTextElementBox, TabElementBox } from '../viewer/page';\nimport { WCharacterFormat } from '../format/character-format';\nimport { HelperMethods } from './editor-helper';\nimport { isNullOrUndefined, Browser, classList } from '@syncfusion/ej2-base';\nimport { WParagraphFormat, WSectionFormat, WListFormat, WTableFormat, WRowFormat, WCellFormat, WBorder, WBorders, WTabStop } from '../index';\nimport { WList } from '../list/list';\nimport { WAbstractList } from '../list/abstract-list';\nimport { WListLevel } from '../list/list-level';\nimport { WLevelOverride } from '../list/level-override';\nimport { FieldElementBox } from '../viewer/page';\nimport { WCharacterStyle } from '../format/style';\nimport { TableResizer } from './table-resizer';\nimport { WParagraphStyle } from '../format/style';\n/**\n * Editor module\n */\nvar Editor = /** @class */ (function () {\n /**\n * Initialize the editor module\n * @param {LayoutViewer} viewer\n * @private\n */\n function Editor(viewer) {\n var _this = this;\n this.nodes = [];\n this.editHyperlinkInternal = false;\n this.startParagraph = undefined;\n this.endParagraph = undefined;\n /**\n * @private\n */\n this.isHandledComplex = false;\n /**\n * @private\n */\n this.tableResize = undefined;\n /**\n * @private\n */\n this.tocStyles = {};\n this.refListNumber = undefined;\n this.incrementListNumber = -1;\n this.removedBookmarkElements = [];\n /**\n * @private\n */\n this.tocBookmarkId = 0;\n /**\n * @private\n */\n this.copiedData = undefined;\n this.pageRefFields = {};\n /**\n * @private\n */\n this.isBordersAndShadingDialog = false;\n /**\n * @private\n */\n this.onTextInputInternal = function (event) {\n if (Browser.isDevice) {\n var viewer = _this.viewer;\n var nbsp = new RegExp(String.fromCharCode(160), 'g');\n var lineFeed = new RegExp(String.fromCharCode(10), 'g');\n viewer.prefix = viewer.prefix.replace(nbsp, ' ').replace(lineFeed, ' ');\n var text = viewer.editableDiv.textContent.replace(nbsp, ' ').replace(lineFeed, ' ');\n var textBoxText = text.substring(2);\n if (viewer.isCompositionStart && viewer.isCompositionUpdated) {\n viewer.isCompositionUpdated = false;\n if (!viewer.owner.isReadOnlyMode && viewer.owner.isDocumentLoaded) {\n if (viewer.prefix.substring(2) !== textBoxText) {\n if (_this.selection.isEmpty) {\n // tslint:disable-next-line:max-line-length\n _this.selection.start.setPositionForLineWidget(viewer.selection.start.currentWidget, _this.selection.start.offset - (viewer.prefix.length - 2));\n _this.handleTextInput(textBoxText);\n viewer.prefix = '@' + String.fromCharCode(160) + textBoxText;\n }\n else {\n _this.handleTextInput(textBoxText);\n viewer.prefix = '@' + String.fromCharCode(160) + textBoxText;\n }\n }\n }\n return;\n }\n else if (viewer.isCompositionStart && viewer.isCompositionEnd && viewer.suffix === '') {\n if (viewer.prefix.substring(2) !== textBoxText) {\n if (_this.selection.isEmpty && viewer.isCompositionStart) {\n viewer.isCompositionStart = false;\n // tslint:disable-next-line:max-line-length\n _this.selection.start.setPositionForLineWidget(viewer.selection.start.currentWidget, _this.selection.start.offset - viewer.prefix.substring(2).length);\n _this.selection.retrieveCurrentFormatProperties();\n if (viewer.suffix === '' || textBoxText === '') {\n _this.handleTextInput(textBoxText);\n }\n }\n else if (!_this.selection.isEmpty) {\n viewer.isCompositionStart = false;\n _this.handleTextInput(textBoxText);\n }\n }\n else if (textBoxText === '') {\n viewer.isCompositionStart = false;\n _this.handleBackKey();\n }\n else if (viewer.prefix.substring(2) === textBoxText && viewer.suffix === '') {\n viewer.isCompositionStart = false;\n _this.handleTextInput(' ');\n }\n viewer.isCompositionEnd = false;\n return;\n }\n else if (viewer.isCompositionEnd || viewer.isCompositionStart && !viewer.compositionUpdated) {\n if (textBoxText.length < viewer.prefix.length &&\n textBoxText === viewer.prefix.substring(2, viewer.prefix.length - 1) || viewer.editableDiv.innerText.length < 2) {\n _this.handleBackKey();\n return;\n }\n else if (viewer.suffix !== '' &&\n viewer.editableDiv.innerText[viewer.editableDiv.innerText.length - 1] !== String.fromCharCode(160)) {\n viewer.isCompositionStart = false;\n //When cursor is placed in between a word and chosen a word from predicted words.\n // tslint:disable-next-line:max-line-length\n _this.selection.start.setPositionForLineWidget(viewer.selection.start.currentWidget, _this.selection.start.offset - (viewer.prefix.length - 2));\n _this.selection.end.setPositionForLineWidget(viewer.selection.end.currentWidget, _this.selection.end.offset + viewer.suffix.length);\n //Retrieve the character format properties. Since the selection was changed manually.\n _this.selection.retrieveCurrentFormatProperties();\n _this.handleTextInput(textBoxText);\n return;\n }\n }\n // tslint:disable-next-line:max-line-length\n if (text !== '\\r' && text !== '\\b' && text !== '\\u001B' && !viewer.owner.isReadOnlyMode && viewer.isControlPressed === false) {\n if (text === '@' || text[0] !== '@' || text === '' || text.length < viewer.prefix.length &&\n textBoxText === viewer.prefix.substring(2, viewer.prefix.length - 1)) {\n _this.handleBackKey();\n if (viewer.editableDiv.innerText.length < 2) {\n _this.predictText();\n }\n }\n else if (text.indexOf(viewer.prefix) === 0 && text.length > viewer.prefix.length) {\n _this.handleTextInput(text.substring(viewer.prefix.length));\n }\n else if (text.indexOf(viewer.prefix) === -1 && text[text.length - 1] !== String.fromCharCode(160)\n && text[text.length - 1] !== ' ') {\n if ((textBoxText.charAt(0).toLowerCase() + textBoxText.slice(1)) === viewer.prefix.substring(2)) {\n // tslint:disable-next-line:max-line-length\n _this.selection.start.setPositionParagraph(viewer.selection.start.currentWidget, _this.selection.start.offset - (viewer.prefix.length - 2));\n }\n _this.handleTextInput(textBoxText);\n }\n else if (text.length !== 2) {\n _this.handleTextInput(' ');\n }\n }\n }\n else {\n var text = _this.viewer.editableDiv.innerText;\n if (text !== String.fromCharCode(160)) {\n // tslint:disable-next-line:max-line-length\n if (text !== '\\r' && text !== '\\b' && text !== '\\u001B' && !_this.owner.isReadOnlyMode && _this.viewer.isControlPressed === false) {\n _this.handleTextInput(text);\n }\n }\n else {\n _this.handleTextInput(' ');\n }\n _this.viewer.editableDiv.innerText = '';\n }\n };\n /**\n * Fired on paste.\n * @param {ClipboardEvent} event\n * @private\n */\n this.onPaste = function (event) {\n if (!_this.owner.isReadOnlyMode) {\n _this.pasteInternal(event);\n }\n event.preventDefault();\n };\n this.viewer = viewer;\n this.tableResize = new TableResizer(this.viewer.owner);\n }\n Object.defineProperty(Editor.prototype, \"editorHistory\", {\n get: function () {\n return this.viewer.owner.editorHistory;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Editor.prototype, \"selection\", {\n get: function () {\n if (this.viewer) {\n return this.viewer.selection;\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Editor.prototype, \"owner\", {\n get: function () {\n return this.viewer.owner;\n },\n enumerable: true,\n configurable: true\n });\n Editor.prototype.getModuleName = function () {\n return 'Editor';\n };\n Editor.prototype.insertField = function (code, result) {\n var fieldCode = code;\n if (isNullOrUndefined(result)) {\n if (fieldCode.substring(0, 10) === 'MERGEFIELD') {\n fieldCode = fieldCode.substring(10).trim();\n var index = fieldCode.indexOf('\\\\*');\n result = '<<' + fieldCode.substring(0, index).trim() + '>>';\n }\n }\n var paragraph = new ParagraphWidget();\n var line = new LineWidget(paragraph);\n var fieldBegin = new FieldElementBox(0);\n line.children.push(fieldBegin);\n var fieldCodeSpan = new TextElementBox();\n fieldCodeSpan.text = code;\n line.children.push(fieldCodeSpan);\n var fieldSeparator = new FieldElementBox(2);\n fieldSeparator.fieldBegin = fieldBegin;\n fieldBegin.fieldSeparator = fieldSeparator;\n line.children.push(fieldSeparator);\n var fieldResultSpan = new TextElementBox();\n fieldResultSpan.text = result;\n line.children.push(fieldResultSpan);\n var fieldEnd = new FieldElementBox(1);\n fieldEnd.fieldSeparator = fieldSeparator;\n fieldEnd.fieldBegin = fieldBegin;\n fieldBegin.fieldEnd = fieldEnd;\n fieldSeparator.fieldEnd = fieldEnd;\n line.children.push(fieldEnd);\n fieldBegin.line = line;\n paragraph.childWidgets.push(line);\n this.viewer.fields.push(fieldBegin);\n var widgets = [];\n widgets.push(paragraph);\n this.pasteContentsInternal(widgets);\n };\n // Public Implementation Starts\n /**\n * Moves the selected content in the document editor control to clipboard.\n */\n Editor.prototype.cut = function () {\n if (this.owner.isReadOnlyMode || this.selection.isEmpty) {\n return;\n }\n this.selection.copySelectedContent(true);\n };\n /**\n * Notify content change event\n * @private\n */\n Editor.prototype.fireContentChange = function () {\n if (this.viewer.owner.isLayoutEnabled && !this.viewer.owner.isShiftingEnabled) {\n this.viewer.owner.fireContentChange();\n }\n };\n /**\n * Update physical location for text position\n * @private\n */\n Editor.prototype.updateSelectionTextPosition = function (isSelectionChanged) {\n this.getOffsetValue(this.selection);\n this.selection.start.updatePhysicalPosition(true);\n if (this.selection.isEmpty) {\n this.selection.end.setPositionInternal(this.selection.start);\n }\n else {\n this.selection.end.updatePhysicalPosition(true);\n }\n this.selection.upDownSelectionLength = this.selection.end.location.x;\n this.selection.fireSelectionChanged(isSelectionChanged);\n };\n /**\n * Predict text\n * @private\n */\n Editor.prototype.predictText = function () {\n this.viewer.suffix = '';\n if (this.selection.start.paragraph.isEmpty() || this.selection.start.offset === 0 &&\n this.selection.start.currentWidget.isFirstLine() || this.selection.end.offset === 0 &&\n this.selection.end.currentWidget.isFirstLine()) {\n this.viewer.prefix = '';\n }\n else {\n this.getPrefixAndSuffix();\n }\n this.viewer.prefix = '@' + String.fromCharCode(160) + this.viewer.prefix; //  \n this.viewer.editableDiv.innerText = this.viewer.prefix;\n this.viewer.selection.setEditableDivCaretPosition(this.viewer.prefix.length);\n };\n /**\n * Gets prefix and suffix.\n * @private\n */\n /* tslint:disable:max-func-body-length */\n Editor.prototype.getPrefixAndSuffix = function () {\n var viewer = this.viewer;\n if (this.selection.text !== '') {\n viewer.prefix = '';\n return;\n }\n else {\n var startIndex = 0;\n var inlineInfo = this.selection.start.currentWidget.getInline(this.selection.start.offset, startIndex);\n var inline = inlineInfo.element;\n startIndex = inlineInfo.index;\n if (inline !== undefined) {\n var boxInfo = this.selection.getElementBoxInternal(inline, startIndex);\n var box = boxInfo.element;\n startIndex = boxInfo.index;\n var spaceIndex = 0;\n if (!isNullOrUndefined(box)) {\n var prefixAdded = false;\n if (box instanceof TextElementBox && startIndex > 0 && box.line.isFirstLine()) {\n viewer.prefix = '';\n }\n if (!(inline instanceof TextElementBox)) {\n inline = this.selection.getPreviousTextElement(inline);\n }\n /* tslint:disable:no-conditional-assignment */\n while ((spaceIndex = viewer.prefix.lastIndexOf(' ')) < 0 && inline instanceof TextElementBox) {\n if (inline.previousNode instanceof TextElementBox && viewer.prefix.indexOf(' ') === -1) {\n if (!prefixAdded) {\n viewer.prefix = inline.text.substring(0, startIndex);\n prefixAdded = true;\n }\n else {\n viewer.prefix = inline.text + viewer.prefix;\n }\n inline = inline.previousNode;\n // If the line has no elements then break the loop to avoid the exception.\n if (inline instanceof ListTextElementBox) {\n break;\n }\n if (!(inline instanceof TextElementBox)) {\n inline = this.selection.getPreviousTextElement(inline);\n }\n }\n else if (!(inline.previousNode instanceof TextElementBox)) {\n if (!prefixAdded) {\n viewer.prefix = inline.text.substring(0, startIndex);\n prefixAdded = true;\n }\n else {\n viewer.prefix = inline.text + viewer.prefix;\n }\n break;\n }\n }\n if (!(viewer.prefix.length > 1 && viewer.prefix[viewer.prefix.length - 1] === ' ' &&\n viewer.prefix[viewer.prefix.length - 2] === '.')) {\n spaceIndex = viewer.prefix.lastIndexOf(' ');\n }\n else {\n spaceIndex = -1;\n viewer.prefix = '';\n }\n viewer.prefix = spaceIndex < 0 ? viewer.prefix : viewer.prefix.substring(spaceIndex);\n if (viewer.prefix.indexOf(' ') === 0 && viewer.prefix.length >= 1) {\n viewer.prefix = viewer.prefix.substring(1);\n }\n // suffix text prediction\n var endIndex = 0;\n var endInlineInfo = this.selection.end.currentWidget.getInline(this.selection.end.offset, endIndex);\n var endInline = endInlineInfo.element;\n endIndex = endInlineInfo.index;\n boxInfo = this.selection.getElementBoxInternal(endInline, endIndex);\n box = boxInfo.element;\n endIndex = boxInfo.index;\n if (box) {\n var suffixAdded = false;\n if (box instanceof TextElementBox && endIndex < box.length) {\n viewer.suffix = '';\n }\n // boxIndex = renderedElements.get(endInline).indexOf(box);\n while ((spaceIndex = viewer.suffix.indexOf(' ')) < 0 && endInline instanceof TextElementBox) {\n if (endInline.nextNode instanceof TextElementBox && viewer.suffix.indexOf(' ') === -1) {\n if (!suffixAdded) {\n viewer.suffix = box.text.substring(endIndex);\n suffixAdded = true;\n }\n else {\n viewer.suffix = viewer.suffix + endInline.text;\n }\n endInline = endInline.nextNode;\n }\n else if (!(endInline.nextNode instanceof TextElementBox)) {\n if (!suffixAdded) {\n viewer.suffix = box.text.substring(endIndex);\n suffixAdded = true;\n }\n else {\n viewer.suffix = viewer.suffix + endInline.text;\n }\n break;\n }\n }\n spaceIndex = viewer.suffix.indexOf(' ');\n viewer.suffix = spaceIndex < 0 ? viewer.suffix : viewer.suffix.substring(0, spaceIndex);\n }\n }\n }\n }\n };\n /**\n * key action\n * @private\n */\n // tslint:disable:max-func-body-length\n Editor.prototype.onKeyDownInternal = function (event, ctrl, shift, alt) {\n var key = event.which || event.keyCode;\n if (ctrl && !shift && !alt) {\n this.viewer.isControlPressed = true;\n switch (key) {\n case 9:\n event.preventDefault();\n if (this.owner.acceptTab) {\n this.selection.handleTabKey(false, false);\n }\n break;\n case 48:\n event.preventDefault();\n this.onApplyParagraphFormat('beforeSpacing', 0, false, false);\n break;\n case 49:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode) {\n this.onApplyParagraphFormat('lineSpacing', 1, false, false);\n }\n break;\n case 50:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode) {\n this.onApplyParagraphFormat('lineSpacing', 2, false, false);\n }\n break;\n case 53:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode) {\n this.onApplyParagraphFormat('lineSpacing', 1.5, false, false);\n }\n break;\n case 66:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode) {\n this.toggleBold();\n }\n break;\n case 68:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode && this.owner.fontDialogModule) {\n this.owner.fontDialogModule.showFontDialog();\n }\n break;\n case 69:\n if (!this.owner.isReadOnlyMode) {\n this.toggleTextAlignment('Center');\n }\n event.preventDefault();\n break;\n case 72:\n event.preventDefault();\n if (!this.owner.isReadOnly && this.owner.optionsPaneModule) {\n this.owner.optionsPaneModule.isReplace = true;\n this.owner.optionsPaneModule.showHideOptionsPane(true);\n }\n break;\n case 73:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode) {\n this.toggleItalic();\n }\n break;\n case 74:\n if (!this.owner.isReadOnlyMode) {\n this.toggleTextAlignment('Justify');\n }\n event.preventDefault();\n break;\n case 75:\n event.preventDefault();\n if (this.owner.hyperlinkDialogModule && !this.owner.isReadOnlyMode) {\n this.owner.hyperlinkDialogModule.show();\n }\n break;\n case 76:\n if (!this.owner.isReadOnlyMode) {\n this.toggleTextAlignment('Left');\n }\n event.preventDefault();\n break;\n case 77:\n if (!this.owner.isReadOnlyMode) {\n this.owner.selection.increaseIndent();\n }\n event.preventDefault();\n break;\n case 78:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode) {\n this.owner.openBlank();\n }\n break;\n case 82:\n if (!this.owner.isReadOnlyMode) {\n this.toggleTextAlignment('Right');\n }\n event.preventDefault();\n break;\n case 85:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode) {\n this.owner.selection.toggleUnderline('Single');\n }\n break;\n case 88:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode) {\n this.owner.editor.cut();\n }\n break;\n case 89:\n if (this.owner.enableEditorHistory) {\n this.editorHistory.redo();\n event.preventDefault();\n }\n break;\n case 90:\n if (this.owner.enableEditorHistory) {\n this.editorHistory.undo();\n event.preventDefault();\n }\n break;\n case 219:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode) {\n this.onApplyCharacterFormat('fontSize', 'decrement', true);\n }\n break;\n case 221:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode) {\n this.onApplyCharacterFormat('fontSize', 'increment', true);\n }\n break;\n case 187:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode) {\n this.toggleBaselineAlignment('Subscript');\n }\n break;\n }\n }\n else if (shift && !ctrl && !alt) {\n switch (key) {\n case 9:\n event.preventDefault();\n if (this.owner.acceptTab) {\n this.selection.handleTabKey(false, true);\n }\n break;\n case 13:\n this.handleShiftEnter();\n event.preventDefault();\n break;\n }\n }\n else if (shift && ctrl && !alt) {\n switch (key) {\n case 68:\n if (!this.owner.isReadOnlyMode) {\n this.owner.selection.toggleUnderline('Double');\n }\n break;\n case 77:\n if (!this.owner.isReadOnlyMode) {\n this.owner.selection.decreaseIndent();\n }\n event.preventDefault();\n break;\n case 188:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode) {\n this.onApplyCharacterFormat('fontSize', 'decrement', true);\n }\n break;\n case 190:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode) {\n this.onApplyCharacterFormat('fontSize', 'increment', true);\n }\n break;\n case 187:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode) {\n this.toggleBaselineAlignment('Superscript');\n }\n }\n }\n else if (!shift && ctrl && alt) {\n switch (key) {\n case 72:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode && this.owner.isDocumentLoaded) {\n this.toggleHighlightColor();\n }\n break;\n }\n }\n else {\n switch (key) {\n case 8:\n event.preventDefault();\n this.handleBackKey();\n break;\n case 9:\n event.preventDefault();\n if (this.owner.acceptTab) {\n this.selection.handleTabKey(true, false);\n }\n break;\n case 13:\n event.preventDefault();\n this.handleEnterKey();\n break;\n case 46:\n this.handleDelete();\n event.preventDefault();\n break;\n }\n }\n };\n /**\n * @private\n */\n Editor.prototype.handleShiftEnter = function () {\n if (!this.owner.isReadOnlyMode) {\n this.handleTextInput('\\v');\n }\n this.selection.checkForCursorVisibility();\n };\n /**\n * Handles back key.\n * @private\n */\n Editor.prototype.handleBackKey = function () {\n if (!this.owner.isReadOnlyMode) {\n this.owner.editorModule.onBackSpace();\n }\n this.selection.checkForCursorVisibility();\n };\n /**\n * Handles delete\n * @private\n */\n Editor.prototype.handleDelete = function () {\n if (!this.owner.isReadOnlyMode) {\n this.owner.editorModule.onDelete();\n }\n this.selection.checkForCursorVisibility();\n };\n /**\n * Handles enter key.\n * @private\n */\n Editor.prototype.handleEnterKey = function () {\n if (!this.owner.isReadOnlyMode) {\n if (Browser.isDevice) {\n this.viewer.isCompositionStart = false;\n }\n this.owner.editorModule.onEnter();\n }\n this.selection.checkForCursorVisibility();\n };\n /**\n * @private\n */\n Editor.prototype.handleTextInput = function (text) {\n var _this = this;\n if (!this.owner.isReadOnlyMode) {\n if (this.animationTimer) {\n clearTimeout(this.animationTimer);\n }\n classList(this.selection.caret, [], ['e-de-cursor-animation']);\n this.owner.editorModule.insertText(text, false);\n /* tslint:disable:align */\n this.animationTimer = setTimeout(function () {\n if (_this.animationTimer) {\n clearTimeout(_this.animationTimer);\n }\n if (_this.selection && _this.selection.caret) {\n classList(_this.selection.caret, ['e-de-cursor-animation'], []);\n }\n }, 600);\n }\n this.selection.checkForCursorVisibility();\n };\n /**\n * Copies to format.\n * @param {WCharacterFormat} format\n * @private\n */\n Editor.prototype.copyInsertFormat = function (format, copy) {\n var insertFormat = new WCharacterFormat();\n var sFormat = this.selection.characterFormat;\n if (copy) {\n insertFormat.copyFormat(format);\n }\n if (!isNullOrUndefined(sFormat.bold) && format.bold !== sFormat.bold) {\n insertFormat.bold = sFormat.bold;\n }\n if (!isNullOrUndefined(sFormat.italic) && format.italic !== sFormat.italic) {\n insertFormat.italic = sFormat.italic;\n }\n if (sFormat.fontSize > 0 && format.fontSize !== sFormat.fontSize) {\n insertFormat.fontSize = sFormat.fontSize;\n }\n if (!isNullOrUndefined(sFormat.fontFamily) && format.fontFamily !== sFormat.fontFamily) {\n insertFormat.fontFamily = sFormat.fontFamily;\n }\n if (!isNullOrUndefined(sFormat.highlightColor) && format.highlightColor !== sFormat.highlightColor) {\n insertFormat.highlightColor = sFormat.highlightColor;\n }\n if (!isNullOrUndefined(sFormat.baselineAlignment) && format.baselineAlignment !== sFormat.baselineAlignment) {\n insertFormat.baselineAlignment = sFormat.baselineAlignment;\n }\n if (!isNullOrUndefined(sFormat.fontColor) && format.fontColor !== sFormat.fontColor) {\n insertFormat.fontColor = sFormat.fontColor;\n }\n if (!isNullOrUndefined(sFormat.underline) && format.underline !== sFormat.underline) {\n insertFormat.underline = sFormat.underline;\n }\n if (!isNullOrUndefined(sFormat.strikethrough) && format.strikethrough !== sFormat.strikethrough) {\n insertFormat.strikethrough = sFormat.strikethrough;\n }\n return insertFormat;\n };\n /**\n * Inserts the specified text at cursor position\n * @param {string} text\n * @param {boolean} isReplace\n * @private\n */\n //tslint:disable: max-func-body-length\n Editor.prototype.insertText = function (text, isReplace) {\n var selection = this.viewer.selection;\n var insertPosition;\n var isRemoved = true;\n this.isListTextSelected();\n this.initHistory('Insert');\n var paragraphInfo = this.getParagraphInfo(selection.start);\n this.viewer.selection.editPosition = this.getHierarchicalIndex(paragraphInfo.paragraph, paragraphInfo.offset.toString());\n if ((!selection.isEmpty && !this.viewer.selection.isImageSelected) ||\n this.viewer.isListTextSelected && selection.contextType === 'List') {\n selection.isSkipLayouting = true;\n selection.skipFormatRetrieval = true;\n isRemoved = this.removeSelectedContents(selection);\n selection.skipFormatRetrieval = false;\n selection.isSkipLayouting = false;\n }\n paragraphInfo = this.getParagraphInfo(selection.start);\n if (isRemoved) {\n selection.owner.isShiftingEnabled = true;\n this.updateInsertPosition();\n insertPosition = selection.start;\n if (insertPosition.paragraph.isEmpty()) {\n var span = new TextElementBox();\n var insertFormat = this.copyInsertFormat(insertPosition.paragraph.characterFormat, true);\n span.characterFormat.copyFormat(insertFormat);\n span.text = text;\n span.line = insertPosition.paragraph.childWidgets[0];\n span.margin = new Margin(0, 0, 0, 0);\n span.line.children.push(span);\n if ((insertPosition.paragraph.paragraphFormat.textAlignment === 'Center'\n || insertPosition.paragraph.paragraphFormat.textAlignment === 'Right') &&\n insertPosition.paragraph.paragraphFormat.listFormat.listId === -1) {\n insertPosition.paragraph.x = this.viewer.clientActiveArea.x;\n }\n this.viewer.layout.reLayoutParagraph(insertPosition.paragraph, 0, 0);\n }\n else {\n var indexInInline = 0;\n var inlineObj = insertPosition.currentWidget.getInline(insertPosition.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n // Todo: compare selection format\n var insertFormat = this.copyInsertFormat(inline.characterFormat, true);\n if (insertFormat.isSameFormat(inline.characterFormat)) {\n this.insertTextInline(inline, selection, text, indexInInline);\n }\n else {\n var tempSpan = new TextElementBox();\n tempSpan.text = text;\n tempSpan.line = inline.line;\n tempSpan.characterFormat.copyFormat(insertFormat);\n var insertIndex = inline.indexInOwner;\n if (indexInInline === inline.length) {\n inline.line.children.splice(insertIndex + 1, 0, tempSpan);\n }\n else if (indexInInline === 0) {\n inline.line.children.splice(insertIndex, 0, tempSpan);\n }\n else {\n if (inline instanceof TextElementBox) {\n var splittedSpan = new TextElementBox();\n splittedSpan.line = inline.line;\n splittedSpan.characterFormat.copyFormat(inline.characterFormat);\n splittedSpan.text = inline.text.substring(indexInInline);\n inline.text = inline.text.slice(0, indexInInline);\n inline.line.children.splice(insertIndex + 1, 0, splittedSpan);\n }\n inline.line.children.splice(insertIndex + 1, 0, tempSpan);\n }\n this.viewer.layout.reLayoutParagraph(insertPosition.paragraph, inline.line.indexInOwner, 0);\n }\n }\n this.setPositionParagraph(paragraphInfo.paragraph, paragraphInfo.offset + text.length, true);\n this.updateEndPosition();\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(this.editorHistory) && !isNullOrUndefined(this.editorHistory.currentHistoryInfo) && (this.editorHistory.currentHistoryInfo.action === 'ListSelect') &&\n this.viewer.isListTextSelected) {\n this.editorHistory.updateHistory();\n this.editorHistory.updateComplexHistory();\n }\n // if (!isNullOrUndefined(selection.currentHistoryInfo) && (selection.currentHistoryInfo.action === 'MultiSelection')) {\n // this.updateComplexHistory();\n // } else { \n this.reLayout(selection);\n // }\n }\n else {\n // selection.selectContent(selection.start, true);\n }\n // insertFormat.destroy();\n if (!isReplace && isRemoved && (text === ' ' || text === '\\t' || text === '\\v')) {\n var hyperlinkField = selection.getHyperlinkField();\n var isSelectionOnHyperlink = !isNullOrUndefined(hyperlinkField);\n var isList = false;\n if (!(text === '\\v')) {\n isList = this.checkAndConvertList(selection, text === '\\t');\n }\n if (isSelectionOnHyperlink) {\n return;\n }\n if (!isList) {\n //Checks if the previous text is URL, then it is auto formatted to hyperlink.\n this.checkAndConvertToHyperlink(selection, false);\n }\n }\n };\n //Auto convert List\n Editor.prototype.checkAndConvertList = function (selection, isTab) {\n var list = selection.paragraphFormat.getList();\n if (!isNullOrUndefined(list)) {\n return false;\n }\n var convertList = false;\n var isLeadingZero = false;\n var indexInInline = 0;\n var inlineObj = selection.start.currentWidget.getInline(selection.start.offset - 1, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (!(inline instanceof TextElementBox)) {\n return false;\n }\n var span = inline;\n var text = span.text.substring(0, indexInInline);\n var tabValue = 0;\n var length = 0;\n while (!isNullOrUndefined(span.previousNode)) {\n // tslint:disable-next-line:max-line-length\n if (span.previousNode instanceof TextElementBox && (span.previousNode.text === '\\t' || span.previousNode.text.trim().length === 0)) {\n (span.previousNode.text === '\\t') ? tabValue += 36 : length = span.previousNode.text.length * 2.5;\n span = span.previousNode;\n continue;\n }\n return false;\n }\n span = inline;\n var index = 0;\n var tabIndex = text.lastIndexOf('\\t');\n index = (tabIndex >= 0) ? tabIndex + 1 : text.lastIndexOf(' ') + 1;\n while (span.previousNode instanceof TextElementBox && index === 0) {\n span = span.previousNode;\n var previousText = span.text;\n tabIndex = previousText.lastIndexOf('\\t');\n index = (tabIndex >= 0) ? tabIndex + 1 : previousText.lastIndexOf(' ') + 1;\n text = span.text + text;\n text = text.substring(index);\n }\n text = HelperMethods.trimStart(text);\n var numberFormat = text.substring(1, 2);\n var listLevelPattern = this.getListLevelPattern(text.substring(0, 1));\n if (listLevelPattern !== 'None' && this.checkNumberFormat(numberFormat, listLevelPattern === 'Bullet', text)) {\n convertList = true;\n }\n else if (this.checkLeadingZero(text)) {\n isLeadingZero = true;\n convertList = true;\n }\n if (convertList) {\n this.initComplexHistory('AutoList');\n var paragraph = inline.paragraph;\n // tslint:disable-next-line:max-line-length\n selection.start.setPositionParagraph(paragraph.childWidgets[0], paragraph.childWidgets[0].getOffset(inline, indexInInline + 1));\n selection.end.setPositionParagraph(paragraph.childWidgets[0], 0);\n this.initHistory('Delete');\n this.deleteSelectedContents(selection, false);\n this.reLayout(selection, false);\n var followCharacter = isTab ? 'Tab' : 'Space';\n numberFormat = !isLeadingZero ? '%1' + numberFormat : '%1' + text.substring(text.length - 1, text.length);\n var leadingZeroText = text.substring(text.length - 3, text.length - 1);\n listLevelPattern = !isLeadingZero ? listLevelPattern : this.getListLevelPattern(leadingZeroText);\n var listLevel = new WListLevel(undefined);\n listLevel.listLevelPattern = listLevelPattern;\n if (listLevelPattern === 'Bullet') {\n if (text === '*') {\n listLevel.numberFormat = '\\uf0b7';\n listLevel.characterFormat.fontFamily = 'Symbol';\n }\n else if (text === '-') {\n listLevel.numberFormat = '-';\n }\n }\n else {\n listLevel.numberFormat = numberFormat;\n }\n listLevel.followCharacter = followCharacter;\n var leftIndent = selection.paragraphFormat.leftIndent;\n if (tabValue !== 0 || length !== 0) {\n listLevel.paragraphFormat.leftIndent = leftIndent + 18 + tabValue + length;\n }\n else if (indexInInline > 2) {\n listLevel.paragraphFormat.leftIndent = leftIndent + (indexInInline - 2) * 2.5 + 18;\n }\n else if (leftIndent > 0) {\n listLevel.paragraphFormat.leftIndent = leftIndent + 18;\n }\n else {\n listLevel.paragraphFormat.leftIndent = 36;\n }\n listLevel.paragraphFormat.firstLineIndent = -18;\n if ((!isLeadingZero && text.substring(0, 1) === '0') || leadingZeroText === '00') {\n listLevel.startAt = 0;\n }\n else {\n listLevel.startAt = 1;\n }\n this.autoConvertList(selection, listLevel);\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentHistoryInfo)) {\n this.editorHistory.updateComplexHistory();\n }\n else {\n this.reLayout(selection);\n }\n }\n return convertList;\n };\n Editor.prototype.getListLevelPattern = function (value) {\n switch (value) {\n case '0':\n case '1':\n return 'Arabic';\n case 'I':\n return 'UpRoman';\n case 'i':\n return 'LowRoman';\n case 'A':\n return 'UpLetter';\n case 'a':\n return 'LowLetter';\n case '*':\n case '-':\n return 'Bullet';\n case '00':\n case '01':\n return 'LeadingZero';\n default:\n return 'None';\n }\n };\n Editor.prototype.autoConvertList = function (selection, listLevel) {\n var start = selection.start;\n if (!selection.isForward) {\n start = selection.end;\n }\n var newList = new WList();\n if (this.viewer.lists.length > 0) {\n newList.listId = this.viewer.lists[this.viewer.lists.length - 1].listId + 1;\n }\n else {\n newList.listId = 0;\n }\n var newAbstractList = new WAbstractList();\n var layout = this.viewer;\n if (layout.abstractLists.length > 0) {\n newAbstractList.abstractListId = layout.abstractLists[layout.abstractLists.length - 1].abstractListId + 1;\n }\n else {\n newAbstractList.abstractListId = 0;\n }\n newList.abstractListId = newAbstractList.abstractListId;\n layout.abstractLists.push(newAbstractList);\n newAbstractList.levels.push(listLevel);\n listLevel.ownerBase = newAbstractList;\n selection.paragraphFormat.setList(newList);\n selection.paragraphFormat.listLevelNumber = 0;\n };\n Editor.prototype.checkNumberFormat = function (numberFormat, isBullet, text) {\n if (isBullet) {\n return numberFormat === '';\n }\n else {\n var index = text.indexOf(numberFormat);\n return (numberFormat === '.' || numberFormat === ')'\n || numberFormat === '>' || numberFormat === '-') && text.substring(index, text.length - 1) === '';\n }\n };\n Editor.prototype.checkLeadingZero = function (text) {\n var j;\n var isZero = false;\n for (var i = 0; i <= text.length - 1; i++) {\n if (text.charAt(i) === '0') {\n isZero = true;\n continue;\n }\n j = i;\n break;\n }\n var numberFormat = undefined;\n if (text.charAt(j) === '1') {\n numberFormat = text.charAt(j + 1);\n }\n else {\n numberFormat = text.charAt(j);\n }\n return isZero && this.checkNumberFormat(numberFormat, false, text);\n };\n Editor.prototype.getPageFromBlockWidget = function (block) {\n var page = undefined;\n if (block.containerWidget instanceof BodyWidget) {\n page = block.containerWidget.page;\n }\n else if (block.containerWidget instanceof HeaderFooterWidget) {\n page = block.containerWidget.page;\n }\n else if (block.containerWidget instanceof TableCellWidget) {\n page = block.containerWidget.bodyWidget.page;\n }\n return page;\n };\n /**\n * @private\n */\n Editor.prototype.insertTextInline = function (element, selection, text, index) {\n if (element instanceof TextElementBox) {\n element.text = HelperMethods.insert(element.text, index, text);\n var paragraph = element.line.paragraph;\n var lineIndex = paragraph.childWidgets.indexOf(element.line);\n var elementIndex = element.line.children.indexOf(element);\n this.viewer.layout.reLayoutParagraph(paragraph, lineIndex, elementIndex);\n }\n else if (element instanceof ImageElementBox) {\n this.insertImageText(element, selection, text, index);\n }\n else if (element instanceof FieldElementBox) {\n if (element.fieldType === 0) {\n this.insertFieldBeginText(element, selection, text, index);\n }\n else if (element.fieldType === 2) {\n this.insertFieldSeparatorText(element, selection, text, index);\n }\n else {\n this.insertFieldEndText(element, selection, text, index);\n }\n }\n else if (element instanceof BookmarkElementBox) {\n this.insertBookMarkText(element, selection, text, index);\n }\n };\n Editor.prototype.insertFieldBeginText = function (fieldBegin, selection, text, index) {\n var spanObj = new TextElementBox();\n spanObj.text = text;\n var lineIndex = fieldBegin.line.paragraph.childWidgets.indexOf(fieldBegin.line);\n var spanIndex = fieldBegin.line.children.indexOf(fieldBegin);\n spanObj.characterFormat.copyFormat(fieldBegin.characterFormat);\n fieldBegin.line.children.splice(spanIndex, 0, spanObj);\n spanObj.line = fieldBegin.line;\n this.viewer.layout.reLayoutParagraph(fieldBegin.line.paragraph, lineIndex, spanIndex);\n };\n Editor.prototype.insertBookMarkText = function (element, selection, text, index) {\n var spanObj = new TextElementBox();\n spanObj.text = text;\n var lineIndex = element.line.paragraph.childWidgets.indexOf(element.line);\n var spanIndex = element.line.children.indexOf(element);\n spanObj.characterFormat.copyFormat(element.characterFormat);\n element.line.children.splice(spanIndex, 0, spanObj);\n spanObj.line = element.line;\n this.viewer.layout.reLayoutParagraph(element.line.paragraph, lineIndex, spanIndex);\n };\n Editor.prototype.insertFieldSeparatorText = function (fieldSeparator, selection, text, index) {\n var previousInline = selection.getPreviousTextInline(fieldSeparator);\n var nextInline = selection.getNextTextInline(fieldSeparator);\n var span = new TextElementBox();\n span.text = text;\n var spanIndex = fieldSeparator.line.children.indexOf(fieldSeparator);\n if (index === fieldSeparator.length) {\n spanIndex++;\n }\n if (isNullOrUndefined(previousInline) && isNullOrUndefined(nextInline)) {\n span.characterFormat.copyFormat(fieldSeparator.line.paragraph.characterFormat);\n }\n else if (isNullOrUndefined(previousInline)) {\n span.characterFormat.copyFormat(nextInline.characterFormat);\n }\n else {\n span.characterFormat.copyFormat(previousInline.characterFormat);\n }\n fieldSeparator.line.children.splice(spanIndex, 0, span);\n span.line = fieldSeparator.line;\n var lineIndex = fieldSeparator.line.paragraph.childWidgets.indexOf(fieldSeparator.line);\n this.viewer.layout.reLayoutParagraph(fieldSeparator.line.paragraph, lineIndex, spanIndex);\n };\n Editor.prototype.insertFieldEndText = function (fieldEnd, selection, text, index) {\n var span = new TextElementBox();\n span.text = text;\n var spanIndex = fieldEnd.line.children.indexOf(fieldEnd);\n span.characterFormat.copyFormat(fieldEnd.characterFormat);\n fieldEnd.line.children.splice(spanIndex + 1, 0, span);\n span.line = fieldEnd.line;\n var lineIndex = fieldEnd.line.paragraph.childWidgets.indexOf(fieldEnd.line);\n this.viewer.layout.reLayoutParagraph(fieldEnd.line.paragraph, lineIndex, spanIndex);\n };\n Editor.prototype.insertImageText = function (image, selection, text, index) {\n var previousInlineObj = selection.getPreviousTextInline(image);\n var nextInlineObj = selection.getNextTextInline(image);\n var line = image.line;\n var element = new TextElementBox();\n var paragraph = line.paragraph;\n var lineIndex = paragraph.childWidgets.indexOf(line);\n element.text = text;\n var spanIndex = line.children.indexOf(image);\n if (index === image.length) {\n spanIndex++;\n }\n if (isNullOrUndefined(previousInlineObj) && isNullOrUndefined(nextInlineObj)) {\n element.characterFormat.copyFormat(paragraph.characterFormat);\n }\n else if (isNullOrUndefined(previousInlineObj)) {\n element.characterFormat.copyFormat(nextInlineObj.characterFormat);\n }\n else {\n element.characterFormat.copyFormat(previousInlineObj.characterFormat);\n }\n line.children.splice(spanIndex, 0, element);\n element.line = line;\n this.viewer.layout.reLayoutParagraph(paragraph, lineIndex, spanIndex);\n };\n /**\n * @private\n */\n Editor.prototype.isListTextSelected = function () {\n if (this.viewer.isListTextSelected) {\n this.initComplexHistory('ListSelect');\n // tslint:disable-next-line:max-line-length\n if (this.viewer.selection.start.paragraph.paragraphFormat.listFormat && this.viewer.selection.start.paragraph.paragraphFormat.listFormat.listId !== -1) {\n this.onApplyList(undefined);\n }\n }\n };\n //Auto Format and insert Hyperlink Implementation starts\n Editor.prototype.checkAndConvertToHyperlink = function (selection, isEnter, paragraph) {\n var text;\n var span;\n if (isEnter) {\n span = paragraph.lastChild.children[paragraph.lastChild.children.length - 1];\n text = span.text;\n }\n else {\n var indexInInline = 0;\n var inlineObj = selection.start.currentWidget.getInline(selection.start.offset - 1, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (!(inline instanceof TextElementBox)) {\n return;\n }\n span = inline;\n text = span.text.substring(0, indexInInline);\n }\n var index = 0;\n var tabCharIndex = text.lastIndexOf('\\t');\n index = (tabCharIndex >= 0) ? tabCharIndex + 1 : text.lastIndexOf(' ') + 1;\n while (span.previousNode instanceof TextElementBox && index === 0) {\n span = span.previousNode;\n var previousText = span.text;\n tabCharIndex = previousText.lastIndexOf('\\t');\n index = (tabCharIndex >= 0) ? tabCharIndex + 1 : previousText.lastIndexOf(' ') + 1;\n text = span.text + text;\n }\n text = text.substring(index);\n var lowerCaseText = text.toLowerCase();\n var containsURL = false;\n if (lowerCaseText.substring(0, 8) === 'file:///'\n || (lowerCaseText.substring(0, 7) === 'http://' && lowerCaseText.length > 7)\n || (lowerCaseText.substring(0, 8) === 'https://' && lowerCaseText.length > 8)\n || (lowerCaseText.substring(0, 4) === 'www.' && lowerCaseText.length > 4)\n || (lowerCaseText.substring(0, 3) === '\\\\' && lowerCaseText.length > 3)\n || (lowerCaseText.substring(0, 7) === 'mailto:' && lowerCaseText.length > 7)) {\n containsURL = true;\n if (lowerCaseText.substring(0, 4) === 'www.' && lowerCaseText.length > 4) {\n text = 'http://' + text;\n }\n }\n else {\n var atIndex = text.indexOf('@');\n var dotIndex = text.indexOf('.');\n if (atIndex > 0 && atIndex < dotIndex && dotIndex < text.length - 1) {\n containsURL = true;\n text = 'mailto:' + text;\n }\n }\n if (containsURL) {\n var startPos = new TextPosition(this.viewer.owner);\n startPos.setPositionParagraph(span.line, span.line.getOffset(span, index));\n var endPos = new TextPosition(this.viewer.owner);\n if (isEnter) {\n endPos.setPositionParagraph(span.line, span.line.getEndOffset());\n }\n else {\n if (selection.end.currentWidget.children.length === 0 && selection.end.offset === 0) {\n var prevLine = selection.end.currentWidget.previousLine;\n endPos.setPositionParagraph(prevLine, prevLine.getEndOffset());\n }\n else {\n endPos.setPositionParagraph(selection.end.currentWidget, selection.end.offset - 1);\n }\n }\n this.autoFormatHyperlink(selection, text, startPos, endPos);\n }\n };\n Editor.prototype.autoFormatHyperlink = function (selection, url, startPosition, endPosition) {\n this.initComplexHistory('AutoFormatHyperlink');\n var blockInfo = this.getParagraphInfo(startPosition);\n var start = this.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n if (this.editorHistory && this.editorHistory.currentHistoryInfo) {\n this.editorHistory.currentHistoryInfo.insertPosition = start;\n }\n // Moves the selection to URL text start and end position.\n selection.start.setPositionInternal(startPosition);\n selection.end.setPositionInternal(endPosition);\n // Preserves the character format for hyperlink field.\n var temp = this.getCharacterFormat(selection);\n var format = new WCharacterFormat();\n format.copyFormat(temp);\n var fieldEnd = this.createHyperlinkElement(url, startPosition, endPosition, format);\n // Moves the selection to the end of field end position.\n selection.start.setPositionParagraph(fieldEnd.line, (fieldEnd.line).getOffset(fieldEnd, 1));\n // Moves to next text position. (To achieve common behavior for space and enter).\n selection.start.moveNextPosition();\n selection.end.setPositionInternal(selection.start);\n blockInfo = this.getParagraphInfo(selection.end);\n var end = this.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n if (this.editorHistory && this.editorHistory.currentHistoryInfo) {\n this.editorHistory.currentHistoryInfo.endPosition = end;\n this.editorHistory.updateComplexHistory();\n this.reLayout(selection);\n }\n else {\n this.updateComplexWithoutHistory(0, start, end);\n }\n };\n Editor.prototype.appylingHyperlinkFormat = function (selection) {\n this.initHistory('Underline');\n this.updateCharacterFormatWithUpdate(selection, 'underline', 'Single', false);\n if (this.editorHistory) {\n this.editorHistory.updateHistory();\n }\n this.reLayout(selection, false);\n // Applies font color for field result.\n this.initHistory('FontColor');\n this.updateCharacterFormatWithUpdate(selection, 'fontColor', '#0563c1', false);\n if (this.editorHistory) {\n this.editorHistory.updateHistory();\n }\n this.reLayout(selection, false);\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.createHyperlinkElement = function (url, startPosition, endPosition, format) {\n var selection = this.selection;\n this.viewer.layout.allowLayout = false;\n this.appylingHyperlinkFormat(selection);\n this.viewer.layout.allowLayout = true;\n // Adds the field end at the URL text end position.\n var fieldEnd = new FieldElementBox(1);\n fieldEnd.characterFormat.copyFormat(format);\n fieldEnd.line = selection.end.currentWidget;\n selection.start.setPositionInternal(selection.end);\n // this.insertElementInCurrentLine(selection, fieldEnd, true);\n this.initInsertInline(fieldEnd);\n // Moves the selection to URL text start position. \n selection.start.setPositionInternal(startPosition);\n selection.end.setPositionInternal(selection.start);\n // Adds field begin, field code and field separator at the URL text start position.\n var begin = this.insertHyperlinkfield(selection, format, url);\n var lineIndex = selection.start.paragraph.childWidgets.indexOf(begin.line);\n var index = begin.line.children.indexOf(begin);\n fieldEnd.linkFieldCharacter(this.viewer);\n this.viewer.layout.reLayoutParagraph(selection.start.paragraph, lineIndex, index);\n return fieldEnd;\n };\n Editor.prototype.insertHyperlinkfield = function (selection, format, url, isBookmark) {\n // Adds field begin, field code and field separator at the URL text start position.\n var begin = new FieldElementBox(0);\n begin.characterFormat.copyFormat(format);\n begin.line = selection.start.currentWidget;\n this.initInsertInline(begin);\n var span = new TextElementBox();\n span.characterFormat.copyFormat(format);\n if (isBookmark) {\n span.text = ' HYPERLINK \\\\l \\\"' + url + '\\\" ';\n }\n else {\n span.text = ' HYPERLINK \\\"' + url + '\\\" ';\n }\n span.line = selection.start.currentWidget;\n this.initInsertInline(span);\n var separator = new FieldElementBox(2);\n separator.characterFormat.copyFormat(format);\n separator.line = selection.start.currentWidget;\n this.initInsertInline(separator);\n return begin;\n };\n Editor.prototype.unLinkFieldCharacter = function (inline) {\n if (inline instanceof FieldElementBox && inline.fieldType === 0) {\n if (inline.fieldEnd) {\n if (this.viewer) {\n this.viewer.fieldToLayout = inline;\n this.viewer.fieldEndParagraph = inline.line.paragraph;\n }\n // inline.line.paragraph.addFieldCharacter(inline.fieldEnd);\n inline.fieldEnd = undefined;\n }\n }\n if (inline instanceof FieldElementBox && inline.fieldType === 2) {\n if (!isNullOrUndefined(inline.fieldEnd)) {\n if (this.viewer) {\n this.viewer.fieldToLayout = inline.fieldBegin;\n this.viewer.fieldEndParagraph = inline.line.paragraph;\n }\n inline.fieldBegin.fieldSeparator = undefined;\n inline.fieldEnd.fieldSeparator = undefined;\n }\n }\n else if (inline instanceof FieldElementBox && inline.fieldType === 1) {\n if (inline.fieldBegin) {\n if (!isNullOrUndefined(this.viewer)) {\n this.viewer.fieldToLayout = inline.fieldBegin;\n this.viewer.fieldEndParagraph = inline.line.paragraph;\n }\n var fieldIndex = this.viewer.fields.indexOf(inline.fieldBegin);\n if (fieldIndex !== -1) {\n this.viewer.fields.splice(fieldIndex, 1);\n }\n inline.fieldBegin = undefined;\n }\n }\n };\n Editor.prototype.getCharacterFormat = function (selection) {\n if (selection.start.paragraph.isEmpty()) {\n return selection.start.paragraph.characterFormat;\n }\n else {\n var info = selection.start.currentWidget.getInline(selection.start.offset, 0);\n return info.element.characterFormat;\n }\n };\n /**\n * Insert Hyperlink\n * @param {string} url\n * @param {string} displayText\n * @param {boolean} remove\n * @private\n */\n Editor.prototype.insertHyperlink = function (url, displayText, remove, isBookmark) {\n var selection = this.viewer.selection;\n if (selection.start.paragraph.associatedCell !== selection.end.paragraph.associatedCell) {\n return;\n }\n if (remove) {\n //Empty selection Hyperlink insert\n this.insertHyperlinkInternal(selection, url, displayText, isBookmark);\n }\n else {\n //Non-Empty Selection- change the selected text to Field \n // this.preservedFontCol = this.getFontColor();\n var startPosition = selection.start;\n var endPosition = selection.end;\n if (!selection.isForward) {\n startPosition = selection.end;\n endPosition = selection.start;\n }\n var fieldStartPosition = new TextPosition(this.viewer.owner);\n fieldStartPosition.setPositionInternal(startPosition);\n var temp = this.getCharacterFormat(selection);\n var format = new WCharacterFormat(undefined);\n format.copyFormat(temp);\n this.initComplexHistory('InsertHyperlink');\n var blockInfo = this.getParagraphInfo(startPosition);\n var start = this.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n if (this.editorHistory && this.editorHistory.currentHistoryInfo) {\n // tslint:disable-next-line:max-line-length\n this.editorHistory.currentHistoryInfo.insertPosition = this.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n }\n this.appylingHyperlinkFormat(selection);\n this.viewer.layout.allowLayout = true;\n startPosition.setPositionInternal(endPosition);\n // Adds the field end at the URL text end position.\n var fieldEnd = new FieldElementBox(1);\n fieldEnd.characterFormat.copyFormat(format);\n fieldEnd.line = selection.end.currentWidget;\n startPosition.setPositionInternal(endPosition);\n // this.insertElementInCurrentLine(selection, fieldEnd, true);\n this.initInsertInline(fieldEnd);\n // Moves the selection to URL text start position. \n startPosition.setPositionInternal(fieldStartPosition);\n endPosition.setPositionInternal(startPosition);\n // Adds field begin, field code and field separator at the URL text start position.\n var begin = this.insertHyperlinkfield(selection, format, url, isBookmark);\n fieldEnd.linkFieldCharacter(this.viewer);\n var lineIndex = selection.start.paragraph.childWidgets.indexOf(begin.line);\n var index = begin.line.children.indexOf(begin);\n this.viewer.layout.reLayoutParagraph(selection.start.paragraph, lineIndex, index);\n var lineWidget = fieldEnd.line;\n selection.selects(lineWidget, lineWidget.getOffset(fieldEnd, fieldEnd.length), true);\n blockInfo = this.getParagraphInfo(endPosition);\n var end = this.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n if (this.editorHistory && this.editorHistory.currentHistoryInfo) {\n // tslint:disable-next-line:max-line-length\n this.editorHistory.currentHistoryInfo.endPosition = this.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n this.editorHistory.updateComplexHistory();\n }\n else {\n this.updateComplexWithoutHistory(1, start, end);\n }\n }\n };\n Editor.prototype.insertHyperlinkInternal = function (selection, url, displayText, isBookmark) {\n if (isNullOrUndefined(selection.start)) {\n return;\n }\n if (this.editHyperlink(selection, url, displayText)) {\n return;\n }\n this.initHistory('InsertHyperlink');\n var isRemoved = true;\n if (!selection.isEmpty) {\n isRemoved = this.removeSelectedContents(selection);\n }\n if (isRemoved) {\n // Preserves the character format for hyperlink field.\n var temp = this.getCharacterFormat(selection);\n var format = new WCharacterFormat();\n format.copyFormat(temp);\n this.insertHyperlinkByFormat(selection, url, displayText, format, isBookmark);\n }\n //else\n // this.Select(Start, true);\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.insertHyperlinkByFormat = function (selection, url, displayText, format, isBookmark) {\n this.updateInsertPosition();\n selection.owner.isShiftingEnabled = true;\n var indexInInline = 0;\n var initial = indexInInline;\n var element = [];\n var fieldBegin = new FieldElementBox(0);\n element.push(fieldBegin);\n var span = new TextElementBox();\n if (isBookmark) {\n span.text = ' HYPERLINK \\\\l \\\"' + url + '\\\" ';\n }\n else {\n span.text = ' HYPERLINK \\\"' + url + '\\\" ';\n }\n element.push(span);\n var fieldSeparator = new FieldElementBox(2);\n element.push(fieldSeparator);\n if (!isNullOrUndefined(displayText) && displayText !== '') {\n span = new TextElementBox();\n span.characterFormat.underline = 'Single';\n span.characterFormat.fontColor = '#0563c1';\n span.text = displayText;\n element.push(span);\n }\n var fieldEnd = new FieldElementBox(1);\n element.push(fieldEnd);\n this.insertElement(element);\n var paragraph = selection.start.paragraph;\n fieldEnd.linkFieldCharacter(this.viewer);\n if (this.viewer.fields.indexOf(fieldBegin) === -1) {\n this.viewer.fields.push(fieldBegin);\n }\n var offset = fieldEnd.line.getOffset(fieldEnd, 1);\n selection.selects(fieldEnd.line, fieldEnd.line.getOffset(fieldEnd, fieldEnd.length), true);\n this.updateEndPosition();\n this.reLayout(selection, true);\n };\n Editor.prototype.initInsertInline = function (element, insertHyperlink) {\n this.initHistory('InsertInline');\n this.insertInlineInSelection(this.viewer.selection, element);\n if (this.editorHistory) {\n this.editorHistory.updateHistory();\n }\n };\n /**\n * @private\n */\n Editor.prototype.insertElementInCurrentLine = function (selection, inline, isReLayout) {\n if (this.checkIsNotRedoing()) {\n selection.owner.isShiftingEnabled = true;\n }\n if (!selection.isEmpty) {\n this.removeSelectedContents(selection);\n }\n this.updateInsertPosition();\n this.insertElement([inline]);\n if (this.checkEndPosition(selection)) {\n this.updateHistoryPosition(selection.start, false);\n }\n this.fireContentChange();\n };\n /**\n * Edit Hyperlink\n * @param {Selection} selection\n * @param {string} url\n * @param {string} displayText\n * @private\n */\n Editor.prototype.editHyperlink = function (selection, url, displayText, isBookmark) {\n var fieldBegin = selection.getHyperlinkField();\n if (isNullOrUndefined(fieldBegin)) {\n return false;\n }\n this.initHistory('InsertHyperlink');\n this.editHyperlinkInternal = isNullOrUndefined(this.editorHistory)\n || (this.editorHistory && isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo));\n var fieldResult = '';\n var isNestedField = false;\n // Preserves the character format for hyperlink field.\n var temp = this.getCharacterFormat(selection);\n var format = new WCharacterFormat();\n format.copyFormat(temp);\n var fieldSeparator = undefined;\n if (!isNullOrUndefined(fieldBegin.fieldSeparator)) {\n fieldSeparator = fieldBegin.fieldSeparator;\n // tslint:disable-next-line:max-line-length\n var fieldObj = selection.getHyperlinkDisplayText(fieldBegin.fieldSeparator.line.paragraph, fieldBegin.fieldSeparator, fieldBegin.fieldEnd, isNestedField, format);\n fieldResult = fieldObj.displayText;\n isNestedField = fieldObj.isNestedField;\n format = fieldObj.format;\n }\n var offset = fieldBegin.line.getOffset(fieldBegin, 0);\n selection.start.setPositionParagraph(fieldBegin.line, offset);\n offset = fieldBegin.fieldEnd.line.getOffset(fieldBegin.fieldEnd, 1);\n selection.end.setPositionParagraph(fieldBegin.fieldEnd.line, offset);\n this.deleteSelectedContents(selection, false);\n if (!isNestedField && fieldResult !== displayText || isNullOrUndefined(fieldSeparator)) {\n this.insertHyperlinkByFormat(selection, url, displayText, format, isBookmark);\n }\n else {\n //Modify the new hyperlink url. Inserts field begin, url and field separator.\n this.updateInsertPosition();\n var newFieldBegin = new FieldElementBox(0);\n newFieldBegin.characterFormat.copyFormat(fieldBegin.characterFormat);\n newFieldBegin.line = selection.start.currentWidget;\n this.insertInlineInternal(newFieldBegin);\n var span = new TextElementBox();\n span.characterFormat.copyFormat(fieldBegin.characterFormat);\n if (isBookmark) {\n span.text = ' HYPERLINK \\\\l \\\"' + url + '\\\" ';\n }\n else {\n span.text = ' HYPERLINK \\\"' + url + '\\\" ';\n }\n span.line = selection.start.currentWidget;\n this.insertInlineInternal(span);\n var nodes = this.editorHistory && this.editorHistory.currentBaseHistoryInfo ?\n this.editorHistory.currentBaseHistoryInfo.removedNodes : this.nodes;\n this.insertClonedFieldResult(selection, nodes, fieldSeparator);\n var fieldEnd = selection.end.currentWidget.getInline(selection.end.offset, 0).element;\n fieldEnd.linkFieldCharacter(this.viewer);\n var paragraph = newFieldBegin.line.paragraph;\n var lineIndex = newFieldBegin.line.paragraph.childWidgets.indexOf(newFieldBegin.line);\n var elementIndex = newFieldBegin.line.children.indexOf(newFieldBegin);\n this.viewer.layout.reLayoutParagraph(paragraph, lineIndex, elementIndex);\n selection.selects(newFieldBegin.fieldEnd.line, offset, true);\n this.updateEndPosition();\n this.reLayout(selection, true);\n }\n this.editHyperlinkInternal = false;\n this.nodes = [];\n return true;\n };\n /* tslint:disable:no-any */\n Editor.prototype.insertClonedFieldResult = function (selection, nodes, fieldSeparator) {\n var fieldEnd;\n var isStarted = false;\n for (var i = nodes.length - 1; i > -1; i--) {\n var node = nodes[i];\n /* tslint:enable:no-any */\n if (!isStarted) {\n if (fieldSeparator === node) {\n isStarted = true;\n }\n else {\n if (node instanceof ParagraphWidget && node === fieldSeparator.line.paragraph) {\n isStarted = true;\n var paragraph = undefined;\n if (i === nodes.length - 1) {\n paragraph = selection.start.paragraph;\n var fieldParagraph = fieldSeparator.line.paragraph;\n this.getClonedFieldResultWithSel(fieldParagraph, selection, fieldSeparator);\n }\n else {\n paragraph = this.getClonedFieldResult(fieldSeparator.line.paragraph, fieldSeparator);\n this.insertParagraph(paragraph, true);\n }\n selection.selectParagraph(selection.getNextParagraphBlock(paragraph), true);\n }\n continue;\n }\n }\n if (node instanceof ElementBox) {\n this.insertInlineInternal(node.clone());\n }\n else if (node instanceof BlockWidget) {\n this.insertBlock(node.clone());\n }\n // else if (node instanceof WSection)\n // editor.insertSection((node as WSection)._Clone());\n }\n };\n Editor.prototype.getClonedFieldResultWithSel = function (paragraph, selection, fieldSeparator) {\n var lineIndex = paragraph.childWidgets.indexOf(fieldSeparator.line);\n var elementIndex = paragraph.childWidgets[lineIndex].children.indexOf(fieldSeparator);\n for (var j = lineIndex; j < paragraph.childWidgets.length; j++) {\n var lineWidget = paragraph.childWidgets[j];\n if (j !== lineIndex) {\n elementIndex = 0;\n }\n for (var i = elementIndex; i < lineWidget.children.length; i++) {\n this.insertInlineInternal(lineWidget.children[i].clone());\n }\n }\n };\n Editor.prototype.getClonedFieldResult = function (curParagraph, fieldSeparator) {\n var paragraph = new ParagraphWidget();\n paragraph.characterFormat.copyFormat(curParagraph.characterFormat);\n paragraph.paragraphFormat.copyFormat(curParagraph.paragraphFormat);\n var lineIndex = curParagraph.childWidgets.indexOf(fieldSeparator.line);\n var elementIndex = curParagraph.childWidgets[lineIndex].children.indexOf(fieldSeparator);\n for (var j = lineIndex; j < curParagraph.childWidgets.length; j++) {\n var lineWidget = curParagraph.childWidgets[j];\n if (j !== lineIndex) {\n elementIndex = 0;\n }\n for (var i = elementIndex; i < lineWidget.children.length; i++) {\n paragraph.childWidgets[0].children.push(lineWidget.children[i]);\n }\n }\n return paragraph;\n };\n /**\n * Removes the hyperlink if selection is within hyperlink.\n */\n Editor.prototype.removeHyperlink = function () {\n if (this.owner.isReadOnlyMode) {\n return;\n }\n var selection = this.selection;\n var fieldBegin = selection.getHyperlinkField();\n if (isNullOrUndefined(fieldBegin)) {\n return;\n }\n var fieldEnd = fieldBegin.fieldEnd;\n var fieldSeparator = fieldBegin.fieldSeparator;\n var fieldStartPosition = new TextPosition(selection.owner);\n // tslint:disable-next-line:max-line-length\n fieldStartPosition.setPositionParagraph(fieldBegin.line, (fieldBegin.line).getOffset(fieldBegin, 0));\n var fieldSeparatorPosition = new TextPosition(selection.owner);\n // tslint:disable-next-line:max-line-length\n fieldSeparatorPosition.setPositionParagraph(fieldSeparator.line, (fieldSeparator.line).getOffset(fieldSeparator, fieldSeparator.length));\n this.initComplexHistory('RemoveHyperlink');\n selection.start.setPositionParagraph(fieldEnd.line, (fieldEnd.line).getOffset(fieldEnd, 0));\n selection.end.setPositionInternal(selection.start);\n this.onDelete();\n selection.start.setPositionInternal(fieldSeparatorPosition);\n this.initHistory('Underline');\n this.updateCharacterFormatWithUpdate(selection, 'underline', 'None', false);\n if (this.editorHistory) {\n this.editorHistory.updateHistory();\n }\n // Applies font color for field result.\n this.initHistory('FontColor');\n this.updateCharacterFormatWithUpdate(selection, 'fontColor', undefined, false);\n if (this.editorHistory) {\n this.editorHistory.updateHistory();\n }\n this.reLayout(selection, false);\n selection.end.setPositionInternal(selection.start);\n selection.start.setPositionInternal(fieldStartPosition);\n this.initHistory('Delete');\n this.deleteSelectedContents(selection, false);\n this.reLayout(selection, true);\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentHistoryInfo)) {\n this.editorHistory.updateComplexHistory();\n }\n };\n //Paste Implementation starts\n /**\n * Paste copied clipboard content on Paste event\n * @param {ClipboardEvent} event\n * @param {any} pasteWindow?\n * @private\n */\n /* tslint:disable:no-any */\n Editor.prototype.pasteInternal = function (event, pasteWindow) {\n if (this.viewer.owner.enableLocalPaste) {\n this.pasteLocal();\n }\n else {\n if (isNullOrUndefined(pasteWindow)) {\n pasteWindow = window;\n }\n /* tslint:enable:no-any */\n var textContent = '';\n var clipbordData = pasteWindow.clipboardData ? pasteWindow.clipboardData : event.clipboardData;\n textContent = clipbordData.getData('Text');\n if (textContent !== '') {\n this.pasteContents(textContent);\n this.viewer.editableDiv.innerHTML = '';\n }\n }\n this.viewer.updateFocus();\n };\n /**\n * Pastes the data present in local clipboard if any.\n */\n Editor.prototype.pasteLocal = function () {\n /* tslint:disable:no-any */\n if (this.copiedData && this.owner.enableLocalPaste) {\n var document_1 = JSON.parse(this.copiedData);\n this.pasteContents(document_1);\n }\n };\n Editor.prototype.getBlocks = function (pasteContent) {\n var widgets = [];\n if (typeof (pasteContent) === 'string') {\n var startParagraph = this.selection.start.paragraph;\n if (!this.selection.isForward) {\n startParagraph = this.selection.end.paragraph;\n }\n var arr = [];\n var txt = pasteContent;\n txt = txt.replace(/\\r\\n/g, '\\r');\n arr = txt.split('\\r');\n for (var i = 0; i < arr.length; i++) {\n var insertFormat = this.copyInsertFormat(startParagraph.characterFormat, false);\n var insertParaFormat = this.viewer.selection.copySelectionParagraphFormat();\n var paragraph = new ParagraphWidget();\n paragraph.paragraphFormat.copyFormat(insertParaFormat);\n var line = new LineWidget(paragraph);\n if (arr[i].length > 0) {\n var textElement = new TextElementBox();\n textElement.characterFormat.copyFormat(insertFormat);\n textElement.text = arr[i];\n line.children.push(textElement);\n textElement.line = line;\n }\n paragraph.childWidgets.push(line);\n widgets.push(paragraph);\n }\n }\n else {\n for (var i = 0; i < pasteContent.sections.length; i++) {\n this.viewer.owner.parser.parseBody(pasteContent.sections[i].blocks, widgets);\n }\n }\n return widgets;\n };\n Editor.prototype.pasteContents = function (content) {\n this.pasteContentsInternal(this.getBlocks(content));\n };\n Editor.prototype.pasteContentsInternal = function (widgets) {\n /* tslint:enable:no-any */\n var selection = this.viewer.selection;\n var isRemoved = true;\n this.initComplexHistory('Paste');\n if (this.viewer.isListTextSelected) {\n var paragraph = selection.start.paragraph;\n if (paragraph.paragraphFormat.listFormat && paragraph.paragraphFormat.listFormat.listId !== -1) {\n this.onApplyList(undefined);\n }\n }\n this.initHistory('Paste');\n if (!selection.isEmpty || this.viewer.isListTextSelected) {\n isRemoved = this.removeSelectedContentInternal(selection, selection.start, selection.end);\n }\n if (isRemoved) {\n this.pasteContent(widgets);\n }\n else if (this.editorHistory) {\n this.editorHistory.currentBaseHistoryInfo = undefined;\n }\n if (this.editorHistory && this.editorHistory.currentHistoryInfo) {\n this.editorHistory.updateHistory();\n this.editorHistory.updateComplexHistory();\n }\n else {\n this.reLayout(selection, selection.isEmpty);\n }\n };\n /* tslint:disable:no-any */\n Editor.prototype.pasteContent = function (widgets) {\n /* tslint:enable:no-any */\n this.viewer.owner.isShiftingEnabled = true;\n this.updateInsertPosition();\n this.viewer.owner.isLayoutEnabled = true;\n this.viewer.owner.isPastingContent = true;\n this.pasteCopiedData(widgets);\n this.updateEndPosition();\n this.viewer.owner.isPastingContent = false;\n this.viewer.selection.fireSelectionChanged(true);\n };\n Editor.prototype.pasteCopiedData = function (widgets) {\n for (var j = 0; j < widgets.length; j++) {\n var widget = widgets[j];\n if (widget instanceof ParagraphWidget && widget.childWidgets.length === 0) {\n widget.childWidgets[0] = new LineWidget(widget);\n }\n if (j === widgets.length - 1 && widget instanceof ParagraphWidget) {\n var newParagraph = widget;\n if (newParagraph.childWidgets.length > 0\n && newParagraph.childWidgets[0].children.length > 0) {\n this.insertElement(newParagraph.childWidgets[0].children);\n }\n }\n else if (widget instanceof BlockWidget) {\n var startParagraph = this.selection.start.paragraph;\n if (widget instanceof TableWidget && startParagraph.isInsideTable) {\n var table = widget;\n //Handled to resize table based on parent cell width.\n var clientWidth = startParagraph.getContainerWidth();\n table.fitCellsToClientArea(clientWidth);\n }\n if (widget instanceof TableWidget && startParagraph.isEmpty()\n && startParagraph.previousWidget instanceof TableWidget) {\n this.insertTableRows(widget, startParagraph.previousWidget);\n }\n else {\n this.insertBlockInternal(widget);\n }\n }\n }\n };\n /**\n * Insert Table on undo\n * @param {WTable} table\n * @param {WTable} newTable\n * @param {boolean} moveRows\n * @private\n */\n Editor.prototype.insertTableInternal = function (table, newTable, moveRows) {\n //Gets the index of current table.\n var insertIndex = table.getIndex();\n if (moveRows) {\n //Moves the rows to table.\n for (var i = 0, index = 0; i < table.childWidgets.length; i++, index++) {\n var row = table.childWidgets[i];\n newTable.childWidgets.splice(index, 0, row);\n row.containerWidget = newTable;\n table.childWidgets.splice(i, 1);\n i--;\n }\n }\n var owner = table.containerWidget;\n this.removeBlock(table);\n //Inserts table in the current table position. \n var blockAdvCollection = owner.childWidgets;\n blockAdvCollection.splice(insertIndex, 0, newTable);\n newTable.index = table.index;\n table.containerWidget = undefined;\n newTable.containerWidget = owner;\n newTable.isGridUpdated = false;\n newTable.buildTableColumns();\n newTable.isGridUpdated = true;\n this.viewer.layout.clearTableWidget(newTable, true, true);\n this.updateNextBlocksIndex(newTable, true);\n this.viewer.layout.linkFieldInTable(newTable);\n this.viewer.layout.layoutBodyWidgetCollection(newTable.index, owner, newTable, false);\n };\n /**\n * Insert Table on undo\n * @param {Selection} selection\n * @param {WBlock} block\n * @param {WTable} table\n * @private\n */\n Editor.prototype.insertBlockTable = function (selection, block, table) {\n var offset = selection.start.offset;\n var lineIndex = selection.start.paragraph.childWidgets.indexOf(selection.start.currentWidget);\n if (block instanceof ParagraphWidget && offset > 0) {\n //Moves the inline items before selection start to the inserted paragraph.\n // tslint:disable-next-line:max-line-length\n this.moveInlines(selection.start.paragraph, block, 0, 0, selection.start.paragraph.firstChild, offset, selection.start.currentWidget);\n selection.selectParagraph(selection.start.paragraph, true);\n if (this.checkInsertPosition(selection)) {\n this.updateHistoryPosition(this.getHierarchicalIndex(block, offset.toString()), true);\n }\n }\n if (offset > 0 && this.checkInsertPosition(selection)) {\n this.updateHistoryPosition(selection.start, true);\n }\n var index = table.indexInOwner;\n table.containerWidget.childWidgets.splice(index, 0, block);\n block.containerWidget = table.containerWidget;\n block.index = table.index;\n this.updateNextBlocksIndex(block, true);\n this.viewer.layout.layoutBodyWidgetCollection(block.index, block.containerWidget, block, false);\n if (this.checkInsertPosition(selection)) {\n var paragraph = undefined;\n if (block instanceof ParagraphWidget) {\n paragraph = block;\n }\n if (block instanceof TableWidget) {\n paragraph = selection.getFirstParagraphInFirstCell(block);\n }\n this.updateHistoryPosition(this.getHierarchicalIndex(paragraph, '0'), true);\n }\n };\n /**\n * On cut handle selected content remove and relayout\n * @param {Selection} selection\n * @param {TextPosition} startPosition\n * @param {TextPosition} endPosition\n * @private\n */\n Editor.prototype.handleCut = function (selection) {\n var startPosition = selection.start;\n var endPosition = selection.end;\n if (!selection.isForward) {\n startPosition = selection.end;\n endPosition = selection.start;\n }\n // this.owner.isShiftingEnabled = true;\n var blockInfo = this.getParagraphInfo(startPosition);\n selection.editPosition = this.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n var image = undefined;\n if (startPosition.paragraph === endPosition.paragraph && startPosition.offset + 1 === endPosition.offset) {\n //Gets selected image and copy image to clipboard.\n var index = 0;\n var currentInline = startPosition.paragraph.getInline(endPosition.offset, index);\n var inline = currentInline.element;\n image = inline;\n }\n this.initHistory('Cut');\n selection.owner.isShiftingEnabled = true;\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n if (this.checkInsertPosition(selection)) {\n this.updateHistoryPosition(selection.editPosition, true);\n }\n }\n this.deleteSelectedContent(endPosition.paragraph, selection, startPosition, endPosition, 3);\n var textPosition = new TextPosition(selection.owner);\n this.setPositionForCurrentIndex(textPosition, selection.editPosition);\n selection.selectContent(textPosition, true);\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n if (this.checkEndPosition(selection)) {\n this.updateHistoryPosition(selection.end, false);\n }\n }\n this.reLayout(selection);\n };\n Editor.prototype.insertInlineInternal = function (element) {\n var selection = this.selection;\n var length = element.length;\n var paragraphInfo = this.getParagraphInfo(selection.start);\n if (selection.start.paragraph.isEmpty()) {\n var paragraph = selection.start.paragraph;\n paragraph.childWidgets[0].children.push(element);\n element.line = paragraph.childWidgets[0];\n element.linkFieldCharacter(this.viewer);\n this.viewer.layout.reLayoutParagraph(paragraph, 0, 0);\n }\n else {\n var indexInInline = 0;\n var inlineObj = selection.start.currentWidget.getInline(selection.start.offset, indexInInline);\n var curInline = inlineObj.element;\n indexInInline = inlineObj.index;\n this.insertElementInternal(curInline, element, indexInInline, true);\n }\n this.setPositionParagraph(paragraphInfo.paragraph, paragraphInfo.offset + length, true);\n };\n Editor.prototype.insertElement = function (element) {\n var selection = this.selection;\n var length = 0;\n var paragraph = undefined;\n var lineIndex = -1;\n var lineWidget = undefined;\n var insertIndex = 0;\n var paragraphInfo = this.getParagraphInfo(selection.start);\n if (selection.start.paragraph.isEmpty()) {\n paragraph = selection.start.paragraph;\n lineWidget = paragraph.childWidgets[0];\n lineIndex = 0;\n }\n else {\n var indexInInline = 0;\n var inlineObj = selection.start.currentWidget.getInline(selection.start.offset, indexInInline);\n var curInline = inlineObj.element;\n indexInInline = inlineObj.index;\n paragraph = curInline.line.paragraph;\n lineIndex = paragraph.childWidgets.indexOf(curInline.line);\n insertIndex = curInline.indexInOwner;\n lineWidget = curInline.line;\n if (indexInInline === curInline.length) {\n insertIndex++;\n }\n else if (indexInInline === 0) {\n if (isNullOrUndefined(curInline.previousNode)) {\n insertIndex = 0;\n }\n }\n else {\n insertIndex++;\n var prevElement = new TextElementBox();\n prevElement.characterFormat.copyFormat(curInline.characterFormat);\n prevElement.text = curInline.text.substring(indexInInline);\n curInline.text = curInline.text.substr(0, indexInInline);\n lineWidget.children.splice(insertIndex, 0, prevElement);\n prevElement.line = curInline.line;\n }\n }\n for (var i = 0; i < element.length; i++) {\n length += element[i].length;\n lineWidget.children.splice(insertIndex, 0, element[i]);\n element[i].line = lineWidget;\n element[i].linkFieldCharacter(this.viewer);\n insertIndex++;\n }\n this.viewer.layout.reLayoutParagraph(paragraph, lineIndex, 0);\n this.setPositionParagraph(paragraphInfo.paragraph, paragraphInfo.offset + length, true);\n };\n Editor.prototype.insertElementInternal = function (element, newElement, index, relayout) {\n var line = element.line;\n var paragraph = line.paragraph;\n var lineIndex = line.indexInOwner;\n var insertIndex = element.indexInOwner;\n if (index === element.length) {\n insertIndex++;\n line.children.splice(insertIndex, 0, newElement);\n }\n else if (index === 0) {\n if (isNullOrUndefined(element.previousNode)) {\n element.line.children.splice(0, 0, newElement);\n insertIndex = 0;\n }\n else {\n element.line.children.splice(insertIndex, 0, newElement);\n }\n }\n else {\n insertIndex++;\n var textElement = new TextElementBox();\n textElement.characterFormat.copyFormat(element.characterFormat);\n textElement.text = element.text.substring(index);\n element.text = element.text.substr(0, index);\n line.children.splice(insertIndex, 0, textElement);\n textElement.line = element.line;\n //Inserts the new inline.\n line.children.splice(insertIndex, 0, newElement);\n insertIndex -= 1;\n }\n newElement.line = element.line;\n newElement.linkFieldCharacter(this.viewer);\n if (relayout) {\n this.viewer.layout.reLayoutParagraph(paragraph, lineIndex, insertIndex);\n }\n };\n /**\n * Insert Block on undo\n * @param {Selection} selection\n * @param {WBlock} block\n * @private\n */\n Editor.prototype.insertBlock = function (block) {\n var isRemoved = true;\n var selection = this.selection;\n if (!selection.isEmpty) {\n isRemoved = this.removeSelectedContents(selection);\n }\n if (!isRemoved) {\n selection.selectContent(selection.start, false);\n }\n this.insertBlockInternal(block);\n if (this.checkInsertPosition(selection)) {\n var paragraph = undefined;\n if (block instanceof ParagraphWidget) {\n paragraph = block;\n }\n else {\n paragraph = this.selection.getFirstParagraphInFirstCell(block);\n }\n // tslint:disable-next-line:max-line-length\n this.updateHistoryPosition(this.getHierarchicalIndex(paragraph, '0'), true);\n }\n this.fireContentChange();\n };\n /**\n * Insert new Block on specific index\n * @param {Selection} selection\n * @param {BlockWidget} block\n * @private\n */\n Editor.prototype.insertBlockInternal = function (block) {\n var selection = this.selection;\n var isRemoved = true;\n var startPara = this.selection.start.paragraph;\n if (!selection.start.isAtParagraphStart) {\n if (block instanceof ParagraphWidget) {\n this.insertNewParagraphWidget(block, false);\n return;\n }\n this.updateInsertPosition();\n startPara = startPara.combineWidget(this.viewer);\n // tslint:disable-next-line:max-line-length\n this.splitParagraph(startPara, startPara.firstChild, 0, selection.start.currentWidget, selection.start.offset, false);\n selection.selectParagraph(this.selection.start.paragraph, true);\n }\n var bodyWidget = selection.start.paragraph.containerWidget;\n var blockIndex = selection.start.paragraph.index;\n var insertIndex = bodyWidget.childWidgets.indexOf(selection.start.paragraph);\n if (!isNullOrUndefined(bodyWidget)) {\n bodyWidget.childWidgets.splice(insertIndex, 0, block);\n block.containerWidget = bodyWidget;\n block.index = blockIndex;\n block.height = 0;\n if (block instanceof TableWidget) {\n block.isGridUpdated = false;\n block.buildTableColumns();\n block.isGridUpdated = true;\n }\n this.updateNextBlocksIndex(block, true);\n this.viewer.layout.layoutBodyWidgetCollection(blockIndex, bodyWidget, block, false);\n }\n };\n /**\n * Inserts the image with specified size at cursor position in the document editor.\n * @param {string} imageString Base64 string, web URL or file URL.\n * @param {number} width? Image width\n * @param {number} height? Image height\n */\n Editor.prototype.insertImage = function (imageString, width, height) {\n if (this.owner.isReadOnlyMode) {\n return;\n }\n if (isNullOrUndefined(width)) {\n width = 100;\n }\n if (isNullOrUndefined(height)) {\n height = 100;\n }\n this.insertPicture(imageString, width, height);\n };\n /**\n * Inserts a table of specified size at cursor position\n * in the document editor.\n * @param {number} rows Default value of ‘rows’ parameter is 1.\n * @param {number} columns Default value of ‘columns’ parameter is 1.\n */\n Editor.prototype.insertTable = function (rows, columns) {\n var startPos = this.selection.start;\n if (this.owner.isReadOnlyMode || !startPos.isAtSamePosition(this.selection.end)) {\n return;\n }\n rows = rows || 1;\n columns = columns || 1;\n var table = this.createTable(rows, columns);\n var clientWidth = startPos.paragraph.getContainerWidth();\n table.splitWidthToTableCells(clientWidth);\n var prevBlock = startPos.paragraph.previousWidget;\n if (startPos.currentWidget.isFirstLine() && startPos.offset === 0 && prevBlock instanceof TableWidget) {\n this.insertTableRows(table, prevBlock);\n table.destroy();\n return;\n }\n else {\n this.initHistory('InsertTable');\n this.viewer.owner.isShiftingEnabled = true;\n this.insertBlock(table);\n }\n var startLine = this.selection.getFirstParagraphInFirstCell(table).childWidgets[0];\n startPos.setPosition(startLine, true);\n this.selection.end.setPositionInternal(startPos);\n var lastParagraph = this.selection.getLastParagraphInLastCell(table);\n var endOffset = lastParagraph.getLength() + 1;\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n // tslint:disable-next-line:max-line-length\n this.editorHistory.currentBaseHistoryInfo.endPosition = this.getHierarchicalIndex(lastParagraph, endOffset.toString());\n }\n this.reLayout(this.selection);\n };\n /**\n * Inserts the specified number of rows to the table above or below to the row at cursor position.\n * @param {boolean} above The above parameter is optional and if omitted,\n * it takes the value as false and inserts below the row at cursor position.\n * @param {number} count The count parameter is optional and if omitted, it takes the value as 1.\n */\n Editor.prototype.insertRow = function (above, count) {\n var rowPlacement = above ? 'Above' : 'Below';\n if (this.owner.isReadOnlyMode) {\n return;\n }\n var startPos = this.selection.isForward ? this.selection.start : this.selection.end;\n var endPos = this.selection.isForward ? this.selection.end : this.selection.start;\n if (startPos.paragraph.isInsideTable) {\n if (this.checkIsNotRedoing()) {\n this.initHistory(rowPlacement === 'Above' ? 'InsertRowAbove' : 'InsertRowBelow');\n }\n this.viewer.owner.isShiftingEnabled = true;\n var startCell = this.getOwnerCell(this.selection.isForward);\n var endCell = this.getOwnerCell(!this.selection.isForward);\n var table = startCell.ownerTable.combineWidget(this.viewer);\n var row = rowPlacement === 'Below' ? endCell.ownerRow : startCell.ownerRow;\n if (this.editorHistory) {\n var clonedTable = this.cloneTableToHistoryInfo(table);\n }\n var rowCount = count ? count : this.getRowCountToInsert();\n var rows = [];\n var index = row.rowIndex;\n if (rowPlacement === 'Below') {\n index++;\n var isAffectedByRowSpannedCell = isNullOrUndefined(endCell.previousWidget)\n || endCell.columnIndex === endCell.previousWidget.columnIndex + 1;\n var isRowSpanEnd = endCell.cellIndex !== endCell.columnIndex && isAffectedByRowSpannedCell\n && row.rowIndex + startCell.cellFormat.rowSpan - 1 === endCell.ownerRow.rowIndex;\n if (!isRowSpanEnd) {\n if (endCell.cellFormat.rowSpan > 1) {\n if (!isNullOrUndefined(row.nextWidget) && row.nextWidget instanceof TableRowWidget) {\n endCell.cellFormat.rowSpan += rowCount;\n row = row.nextWidget;\n }\n }\n }\n }\n for (var i = 0; i < rowCount; i++) {\n var cellCountInfo = this.updateRowspan(row, rowPlacement === 'Below' ? endCell : startCell, rowPlacement);\n var newRow = this.createRowAndColumn(cellCountInfo.count, i);\n newRow.rowFormat.copyFormat(row.rowFormat);\n this.updateCellFormatForInsertedRow(newRow, cellCountInfo.cellFormats);\n rows.push(newRow);\n }\n table.insertTableRowsInternal(rows, index);\n var cell = undefined;\n var paragraph = undefined;\n if ((table.childWidgets[index] instanceof TableRowWidget)) {\n cell = table.childWidgets[index].firstChild;\n paragraph = this.selection.getFirstParagraph(cell);\n }\n else {\n var widget = undefined;\n while (!(widget instanceof TableWidget)) {\n widget = table.nextRenderedWidget;\n }\n paragraph = this.selection.getFirstParagraphInFirstCell(widget);\n }\n this.viewer.layout.reLayoutTable(table);\n this.selection.selectParagraph(paragraph, true);\n }\n this.reLayout(this.selection, true);\n };\n Editor.prototype.updateCellFormatForInsertedRow = function (newRow, cellFormats) {\n for (var i = 0; i < newRow.childWidgets.length; i++) {\n newRow.childWidgets[i].cellFormat.copyFormat(cellFormats[i]);\n newRow.childWidgets[i].cellFormat.rowSpan = 1;\n }\n };\n Editor.prototype.updateRowspan = function (row, startCell, rowPlacement) {\n var spannedCells = row.getPreviousRowSpannedCells(true);\n var count = 0;\n var cellFormats = [];\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cell = row.childWidgets[i];\n var isCellIncluded = false;\n // Need to check with all the row spanned cells. if the start cell contains rowspan greater than 1, \n // and when inserting below, need to increment rowspan for all row spanned cells by 1 except\n // if the spanned cells is placed in the same column or cell to be cloned has the same row index of cloned cell row index.\n // and when inserting above, if cloned cell placed in the same row of start cell or\n // if the cloned cell has equal column index, need to skip updating rowspan value of cloned cell.\n // else update row span value for spanned cell except \n // if the spanned cells is placed in the same column or cell to be cloned has the same row index of cloned cell row index.\n var isRowSpanned = (isNullOrUndefined(cell.previousWidget)\n || cell.columnIndex !== cell.previousWidget.columnIndex + 1);\n for (var j = 0; j < spannedCells.length; j++) {\n if (isRowSpanned) {\n var spannedCell = spannedCells[j];\n var clonedRowIndex = spannedCell.ownerRow.rowIndex + spannedCell.cellFormat.rowSpan - 1;\n if (cell.columnIndex < spannedCell.columnIndex && cell.cellIndex !== cell.columnIndex) {\n isCellIncluded = true;\n count++;\n cellFormats.push(cell.cellFormat);\n }\n if (startCell.cellFormat.rowSpan === 1) {\n // Need to check whether cell is affected by a row spanned cell. if cell is placed on the row where it is affected \n // by row spanned cell, then if we are inserting row below, need to add new cell with spanned cell width\n // or if we are inserting above, need to update row span value of the spanned cell.\n // if cell is placed inbetween the spanned cell , \n // then if we are inserting below, need to update row span value of spanned cell or\n // if we are inserting above, need to skip updating row span value except\n // if start cell is placed on the same row of spanned cell or if start cell placed in the same column.\n if (clonedRowIndex > cell.ownerRow.rowIndex) {\n if (rowPlacement === 'Above'\n && spannedCell.ownerRow === startCell.ownerRow) {\n continue;\n }\n else {\n spannedCell.cellFormat.rowSpan += 1;\n spannedCells.splice(j, 1);\n j--;\n }\n }\n else if (cell.cellIndex !== cell.columnIndex && isRowSpanned && clonedRowIndex === cell.ownerRow.rowIndex) {\n if (rowPlacement === 'Above') {\n spannedCell.cellFormat.rowSpan += 1;\n spannedCells.splice(j, 1);\n j--;\n }\n else {\n count++;\n cellFormats.push(spannedCell.cellFormat);\n spannedCells.splice(j, 1);\n j--;\n }\n }\n }\n else {\n if (spannedCell !== startCell) {\n if (rowPlacement === 'Above'\n && (spannedCell.ownerRow === startCell.ownerRow || spannedCell.columnIndex === startCell.columnIndex)) {\n continue;\n }\n else {\n if (spannedCell.columnIndex !== startCell.columnIndex\n && spannedCell.ownerRow.rowIndex !== cell.ownerRow.rowIndex\n && (clonedRowIndex > startCell.ownerRow.rowIndex\n || (rowPlacement === 'Above' && clonedRowIndex === startCell.ownerRow.rowIndex))) {\n spannedCell.cellFormat.rowSpan += 1;\n spannedCells.splice(j, 1);\n j--;\n }\n }\n }\n }\n }\n }\n if (spannedCells.indexOf(cell) === -1 && cell.cellFormat.rowSpan > 1) {\n isCellIncluded = true;\n }\n if (!isCellIncluded) {\n count++;\n cellFormats.push(cell.cellFormat);\n }\n }\n return { count: count, cellFormats: cellFormats };\n };\n Editor.prototype.insertTableRows = function (table, prevBlock) {\n this.initHistory('InsertRowBelow');\n table.containerWidget = prevBlock.containerWidget;\n prevBlock = prevBlock.combineWidget(this.viewer);\n if (this.editorHistory) {\n var clonedTable = this.cloneTableToHistoryInfo(prevBlock);\n }\n var row = prevBlock.childWidgets[prevBlock.childWidgets.length - 1];\n prevBlock.insertTableRowsInternal(table.childWidgets, prevBlock.childWidgets.length);\n var paragraph = this.selection.getFirstParagraph(row.nextWidget.childWidgets[0]);\n this.viewer.layout.reLayoutTable(prevBlock);\n this.selection.selectParagraph(paragraph, true);\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.updateHistoryPosition(this.selection.start, true);\n this.updateHistoryPosition(this.selection.end, false);\n }\n this.reLayout(this.selection);\n };\n /**\n * Inserts the specified number of columns to the table left or right to the column at cursor position.\n * @param {number} left The left parameter is optional and if omitted, it takes the value as false and\n * inserts to the right of column at cursor position.\n * @param {number} count The count parameter is optional and if omitted, it takes the value as 1.\n */\n Editor.prototype.insertColumn = function (left, count) {\n if (this.owner.isReadOnlyMode) {\n return;\n }\n var columnPlacement = left ? 'Left' : 'Right';\n if (this.selection.start.paragraph.isInsideTable) {\n if (this.checkIsNotRedoing()) {\n this.initHistory(columnPlacement === 'Left' ? 'InsertColumnLeft' : 'InsertColumnRight');\n }\n this.selection.owner.isShiftingEnabled = true;\n var startCell = this.getOwnerCell(this.selection.isForward);\n var endCell = this.getOwnerCell(!this.selection.isForward);\n var table = startCell.ownerRow.ownerTable.combineWidget(this.viewer);\n if (this.editorHistory) {\n //Clones the entire table to preserve in history.\n var clonedTable = this.cloneTableToHistoryInfo(table);\n }\n this.selection.owner.isLayoutEnabled = false;\n var cellIndex = startCell.columnIndex;\n if (columnPlacement === 'Right') {\n cellIndex = endCell.columnIndex + endCell.cellFormat.columnSpan;\n }\n var startParagraph = undefined;\n var newCell = undefined;\n var columnCount = count ? count : this.getColumnCountToInsert();\n var rowSpannedCells = [];\n var rowSpanCellIndex = cellIndex;\n for (var i = 0; i < columnCount; i++) {\n for (var j = 0; j < table.childWidgets.length; j++) {\n var row = table.childWidgets[j];\n newCell = this.createColumn(this.selection.getLastParagraph(startCell));\n newCell.index = j;\n newCell.rowIndex = row.rowIndex;\n newCell.containerWidget = row;\n newCell.cellFormat.copyFormat(startCell.cellFormat);\n newCell.cellFormat.rowSpan = 1;\n if (isNullOrUndefined(startParagraph)) {\n startParagraph = this.selection.getFirstParagraph(newCell);\n }\n if (cellIndex === 0) {\n row.childWidgets.splice(cellIndex, 0, newCell);\n }\n else {\n var isCellInserted = false;\n for (var j_1 = 0; j_1 < row.childWidgets.length; j_1++) {\n var rowCell = row.childWidgets[j_1];\n // Add the row spanned cells to colection for adding column before / after row spnned cells.\n if (rowCell.cellFormat.rowSpan > 1) {\n rowSpannedCells.push(rowCell);\n }\n if (rowCell.columnIndex + rowCell.cellFormat.columnSpan === cellIndex) {\n row.childWidgets.splice(rowCell.cellIndex + 1, 0, newCell);\n isCellInserted = true;\n }\n else if (cellIndex > rowCell.columnIndex && rowCell.columnIndex + rowCell.cellFormat.columnSpan > cellIndex\n && cellIndex < rowCell.columnIndex + rowCell.cellFormat.columnSpan) {\n row.childWidgets.splice(rowCell.cellIndex, 0, newCell);\n isCellInserted = true;\n }\n if (isCellInserted) {\n break;\n }\n }\n // If the cell is not inserted for row, then check for row spanned cells.\n if (!isCellInserted) {\n if (rowSpannedCells.length > 0) {\n for (var k = 0; k < rowSpannedCells.length; k++) {\n var rowSpannedCell = rowSpannedCells[k];\n if (rowSpannedCell.ownerRow !== row\n && row.rowIndex <= rowSpannedCell.ownerRow.rowIndex + rowSpannedCell.cellFormat.rowSpan - 1) {\n if (rowSpannedCell.columnIndex + rowSpannedCell.cellFormat.columnSpan === cellIndex) {\n if (rowSpannedCell.cellIndex > row.childWidgets.length) {\n row.childWidgets.push(newCell);\n }\n else {\n row.childWidgets.splice(rowSpannedCell.cellIndex, 0, newCell);\n }\n isCellInserted = true;\n }\n else if (cellIndex > rowSpannedCell.columnIndex &&\n rowSpannedCell.columnIndex + rowSpannedCell.cellFormat.columnSpan > cellIndex\n && cellIndex < rowSpannedCell.columnIndex + rowSpannedCell.cellFormat.columnSpan) {\n row.childWidgets.splice(rowSpannedCell.columnIndex, 0, newCell);\n isCellInserted = true;\n }\n }\n if (isCellInserted) {\n break;\n }\n }\n }\n }\n }\n }\n }\n table.updateRowIndex(0);\n var parentTable = this.viewer.layout.getParentTable(table);\n if (parentTable) {\n parentTable.fitChildToClientArea();\n }\n else {\n table.fitChildToClientArea();\n }\n this.selection.owner.isLayoutEnabled = true;\n table.isGridUpdated = false;\n table.buildTableColumns();\n table.isGridUpdated = true;\n this.viewer.layout.reLayoutTable(table);\n this.selection.start.setPosition(startParagraph.firstChild, true);\n this.selection.end.setPosition(this.selection.getLastParagraph(newCell).firstChild, false);\n if (this.checkIsNotRedoing() || isNullOrUndefined(this.editorHistory)) {\n this.reLayout(this.selection);\n }\n }\n };\n /**\n * Creates table with specified rows and columns.\n * @private\n */\n Editor.prototype.createTable = function (rows, columns) {\n var startPara = this.selection.start.paragraph;\n var table = new TableWidget();\n table.tableFormat = new WTableFormat(table);\n table.tableFormat.preferredWidthType = 'Auto';\n table.tableFormat.initializeTableBorders();\n var index = 0;\n while (index < rows) {\n var tableRow = this.createRowAndColumn(columns, index);\n tableRow.rowFormat.heightType = 'Auto';\n tableRow.containerWidget = table;\n table.childWidgets.push(tableRow);\n index++;\n }\n return table;\n };\n Editor.prototype.createRowAndColumn = function (columns, rowIndex) {\n var startPara = this.selection.start.paragraph;\n var tableRow = new TableRowWidget();\n tableRow.rowFormat = new WRowFormat(tableRow);\n tableRow.index = rowIndex;\n for (var i = 0; i < columns; i++) {\n var tableCell = this.createColumn(startPara);\n tableCell.index = i;\n tableCell.rowIndex = rowIndex;\n tableCell.containerWidget = tableRow;\n tableRow.childWidgets.push(tableCell);\n }\n return tableRow;\n };\n Editor.prototype.createColumn = function (paragraph) {\n var tableCell = new TableCellWidget();\n var para = new ParagraphWidget();\n para.paragraphFormat.copyFormat(paragraph.paragraphFormat);\n para.characterFormat.copyFormat(paragraph.characterFormat);\n para.containerWidget = tableCell;\n tableCell.childWidgets.push(para);\n tableCell.cellFormat = new WCellFormat(tableCell);\n return tableCell;\n };\n Editor.prototype.getColumnCountToInsert = function () {\n var count = 1;\n var start = this.selection.start;\n var end = this.selection.end;\n if (!this.selection.isForward) {\n start = this.selection.end;\n end = this.selection.start;\n }\n if (start && end && this.selection.getTable(start, end)) {\n if (start.paragraph.associatedCell === end.paragraph.associatedCell) {\n return count = 1;\n }\n if (start.paragraph.associatedCell.ownerRow === end.paragraph.associatedCell.ownerRow) {\n return count = count + end.paragraph.associatedCell.cellIndex - start.paragraph.associatedCell.cellIndex;\n }\n else {\n count = 0;\n // tslint:disable-next-line:max-line-length\n var selectedCells = start.paragraph.associatedCell.ownerTable.getColumnCellsForSelection(start.paragraph.associatedCell, end.paragraph.associatedCell);\n for (var i = 0; i < selectedCells.length; i++) {\n if (start.paragraph.associatedCell.ownerRow === selectedCells[i].ownerRow) {\n count++;\n }\n }\n }\n }\n return count === 0 ? 1 : count;\n };\n Editor.prototype.getRowCountToInsert = function () {\n var count = 1;\n var start = this.selection.start;\n var end = this.selection.end;\n if (!this.selection.isForward) {\n start = this.selection.end;\n end = this.selection.start;\n }\n if (!isNullOrUndefined(start) && !isNullOrUndefined(end) && !isNullOrUndefined(this.selection.getTable(start, end))) {\n if (start.paragraph.associatedCell === end.paragraph.associatedCell ||\n start.paragraph.associatedCell.ownerRow === end.paragraph.associatedCell.ownerRow) {\n return count = 1;\n }\n else {\n return count = count +\n this.getOwnerRow(!this.selection.isForward).rowIndex - this.getOwnerRow(this.selection.isForward).rowIndex;\n }\n }\n return count === 0 ? 1 : count;\n };\n Editor.prototype.getOwnerCell = function (isStart) {\n var cell = undefined;\n var startCell = isStart ? this.selection.start.paragraph.associatedCell\n : this.selection.end.paragraph.associatedCell;\n var endCell = isStart ? this.selection.end.paragraph.associatedCell\n : this.selection.start.paragraph.associatedCell;\n cell = startCell;\n var owner = cell.ownerTable;\n while (!isNullOrUndefined(owner) && owner.containerWidget instanceof TableCellWidget && owner !== endCell.ownerTable) {\n cell = owner.containerWidget;\n owner = cell.ownerTable;\n }\n return cell;\n };\n Editor.prototype.getOwnerRow = function (isStart) {\n var row;\n var startRow = isStart ? this.selection.start.paragraph.associatedCell.ownerRow\n : this.selection.end.paragraph.associatedCell.ownerRow;\n var endRow = isStart ? this.selection.end.paragraph.associatedCell.ownerRow\n : this.selection.start.paragraph.associatedCell.ownerRow;\n row = startRow;\n var owner = row.ownerTable;\n while (!isNullOrUndefined(owner) && owner.containerWidget instanceof TableCellWidget && owner !== endRow.ownerTable) {\n row = owner.containerWidget.ownerRow;\n owner = row.ownerTable;\n }\n return row;\n };\n Editor.prototype.getOwnerTable = function (isStart) {\n var table = undefined;\n var startTable = this.selection.start.paragraph.associatedCell.ownerTable;\n var endTable = this.selection.end.paragraph.associatedCell.ownerTable;\n table = isStart ? startTable : endTable;\n while (table.containerWidget instanceof TableCellWidget && table !== (isStart ? endTable : startTable)) {\n table = table.containerWidget.ownerTable;\n }\n return table;\n };\n /**\n * Merge Selected cells\n * @private\n */\n Editor.prototype.mergeSelectedCellsInTable = function () {\n if (!this.canMergeCells()) {\n return;\n }\n if (this.checkIsNotRedoing()) {\n this.initHistory('MergeCells');\n }\n this.selection.owner.isShiftingEnabled = true;\n var startPosition = this.selection.start;\n var endPosition = this.selection.end;\n if (!this.selection.isForward) {\n startPosition = this.selection.end;\n endPosition = this.selection.start;\n }\n var startOwnerCell = this.getOwnerCell(this.selection.isForward);\n var endOwnerCell = this.getOwnerCell(!this.selection.isForward);\n var containerCell = this.selection.getContainerCellOf(startOwnerCell, endOwnerCell);\n if (containerCell.ownerTable.contains(endOwnerCell)) {\n if (!this.selection.containsCell(containerCell, endOwnerCell)) {\n //Start and End are in different cells. \n var table = startOwnerCell.ownerTable.combineWidget(this.viewer);\n startOwnerCell = this.selection.getSelectedCell(startOwnerCell, containerCell);\n endOwnerCell = this.selection.getSelectedCell(endOwnerCell, containerCell);\n //Merges the selected cells. \n var mergedCell = this.mergeSelectedCells(table, startOwnerCell, endOwnerCell);\n var lastParagraph = this.selection.getLastParagraph(mergedCell);\n endPosition.setPosition(lastParagraph.lastChild, false);\n }\n }\n if (this.checkIsNotRedoing() || isNullOrUndefined(this.editorHistory)) {\n this.reLayout(this.selection, false);\n }\n };\n Editor.prototype.mergeSelectedCells = function (table, startCell, endCell) {\n //Clones the entire table to preserve in history.\n var clonedTable = this.cloneTableToHistoryInfo(table);\n this.selection.owner.isLayoutEnabled = false;\n //Merges the selected cells.\n var start = this.selection.getCellLeft(startCell.ownerRow, startCell);\n var end = start + startCell.cellFormat.cellWidth;\n var endCellLeft = this.selection.getCellLeft(endCell.ownerRow, endCell);\n var endCellRight = endCellLeft + endCell.cellFormat.cellWidth;\n var cellInfo = this.updateSelectedCellsInTable(start, end, endCellLeft, endCellRight);\n start = cellInfo.start;\n end = cellInfo.end;\n var count = table.childWidgets.indexOf(endCell.ownerRow);\n var rowStartIndex = table.childWidgets.indexOf(startCell.ownerRow);\n var mergedCell = undefined;\n for (var i = rowStartIndex; i <= count; i++) {\n var row = table.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n var cellStart = this.selection.getCellLeft(row, cell);\n if (HelperMethods.round(start, 2) <= HelperMethods.round(cellStart, 2)\n && HelperMethods.round(cellStart, 2) < HelperMethods.round(end, 2)) {\n if (isNullOrUndefined(mergedCell)) {\n mergedCell = cell;\n }\n else {\n if (i === rowStartIndex) {\n mergedCell.cellFormat.preferredWidth += cell.cellFormat.preferredWidth;\n mergedCell.cellFormat.columnSpan += cell.cellFormat.columnSpan;\n this.mergeBorders(mergedCell, cell);\n }\n for (var k = 0; k < cell.childWidgets.length; k++) {\n var block = cell.childWidgets[k];\n if (cell.childWidgets.length === 1 && block instanceof ParagraphWidget\n && block.childWidgets.length === 0) {\n break;\n }\n mergedCell.childWidgets.push(block.clone());\n }\n row.childWidgets.splice(j, 1);\n cell.destroy();\n j--;\n }\n }\n }\n if (row.childWidgets.length === 0) {\n var rowIndex = table.childWidgets.indexOf(row);\n row.updateRowBySpannedCells();\n table.childWidgets.splice(rowIndex, 1);\n row.destroy();\n count--;\n i--;\n }\n }\n if (!isNullOrUndefined(mergedCell) && rowStartIndex < count) {\n mergedCell.cellFormat.rowSpan = count - rowStartIndex + 1;\n }\n this.updateBlockIndexAfterMerge(mergedCell);\n table.updateRowIndex(0);\n table.calculateGrid();\n table.isGridUpdated = false;\n table.buildTableColumns();\n table.isGridUpdated = true;\n this.viewer.layout.reLayoutTable(table);\n //Layouts the table after merging cells.\n this.selection.owner.isLayoutEnabled = true;\n return mergedCell;\n };\n Editor.prototype.mergeBorders = function (mergedCell, tableCell) {\n var mergedCellborders = undefined;\n var cellBorders = null;\n if (!isNullOrUndefined(mergedCell.cellFormat.borders)) {\n mergedCellborders = mergedCell.cellFormat.borders;\n }\n if (!isNullOrUndefined(tableCell.cellFormat.borders)) {\n cellBorders = tableCell.cellFormat.borders;\n }\n if (isNullOrUndefined(mergedCellborders) && isNullOrUndefined(cellBorders)) {\n return;\n }\n if (isNullOrUndefined(mergedCellborders)) {\n mergedCellborders = new WBorders(mergedCell.cellFormat);\n mergedCellborders.copyFormat(cellBorders);\n }\n else if (isNullOrUndefined(cellBorders)) {\n return;\n }\n else {\n if (mergedCell.ownerRow.rowIndex === tableCell.ownerRow.rowIndex) {\n mergedCellborders.top = mergedCell.getBorderBasedOnPriority(mergedCellborders.top, cellBorders.bottom);\n mergedCellborders.bottom = mergedCell.getBorderBasedOnPriority(mergedCellborders.bottom, cellBorders.bottom);\n }\n }\n };\n Editor.prototype.updateBlockIndexAfterMerge = function (cell) {\n for (var i = 0; i < cell.childWidgets.length; i++) {\n cell.childWidgets[i].index = i;\n }\n };\n /**\n * Determines whether merge cell operation can be done.\n */\n Editor.prototype.canMergeCells = function () {\n if (this.selection.isEmpty || !this.selection.start.paragraph.isInsideTable || !this.selection.end.paragraph.isInsideTable) {\n return false;\n }\n var startPos = this.selection.start;\n var endPos = this.selection.end;\n if (!this.selection.isForward) {\n startPos = this.selection.end;\n endPos = this.selection.start;\n }\n var startCell = this.getOwnerCell(this.selection.isForward);\n var endCell = this.getOwnerCell(!this.selection.isForward);\n var containerCell = this.selection.getContainerCellOf(startCell, endCell);\n if (containerCell.ownerTable.contains(endCell)) {\n if (!this.selection.containsCell(containerCell, endCell)) {\n startCell = this.selection.getSelectedCell(startCell, containerCell);\n endCell = this.selection.getSelectedCell(endCell, containerCell);\n var rowSpan = 1;\n if (startCell.ownerRow === endCell.ownerRow) {\n var startCellIndex = startCell.ownerRow.childWidgets.indexOf(startCell);\n for (var i = startCellIndex; i <= startCell.ownerRow.childWidgets.indexOf(endCell); i++) {\n var cell = startCell.ownerRow.childWidgets[i];\n var prevCell = cell.previousWidget;\n if (i !== startCellIndex) {\n if (cell.cellFormat.rowSpan !== rowSpan) {\n return false;\n }\n if (!isNullOrUndefined(prevCell)\n && cell.columnIndex !== (prevCell.cellFormat.columnSpan + prevCell.columnIndex)) {\n return false;\n }\n }\n rowSpan = cell.cellFormat.rowSpan;\n }\n return true;\n }\n return this.canMergeSelectedCellsInTable(startCell.ownerTable, startCell, endCell);\n }\n }\n return false;\n };\n Editor.prototype.canMergeSelectedCellsInTable = function (table, startCell, endCell) {\n var count = table.childWidgets.indexOf(endCell.ownerRow);\n var rowStartIndex = table.childWidgets.indexOf(startCell.ownerRow);\n var startLeft = this.selection.getCellLeft(startCell.ownerRow, startCell);\n var endLeft = startLeft + startCell.cellFormat.cellWidth;\n var endCellLeft = this.selection.getCellLeft(endCell.ownerRow, endCell);\n var endCellRight = endCellLeft + endCell.cellFormat.cellWidth;\n var cellInfo = this.updateSelectedCellsInTable(startLeft, endLeft, endCellLeft, endCellRight);\n startLeft = cellInfo.start;\n endLeft = cellInfo.end;\n var selectionLeft = 0;\n var selectionRight = 0;\n var isRowLeftWithinSel = false;\n var isRowRightWithinSel = false;\n var rowSpannedCells = [];\n for (var i = rowStartIndex; i <= count; i++) {\n var row = table.childWidgets[i];\n var rowLeft = 0;\n var rowRight = 0;\n var isStarted = false;\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n var cellStart = this.selection.getCellLeft(row, cell);\n if (this.checkCellWithInSelection(startLeft, endLeft, cellStart)) {\n isRowLeftWithinSel = false;\n isRowRightWithinSel = false;\n if (cell.cellFormat.rowSpan > 1) {\n rowSpannedCells.push(cell);\n }\n if (!isStarted) {\n rowLeft = cellStart;\n rowRight = cellStart;\n isStarted = true;\n }\n var prevCell = cell.previousWidget;\n if (rowRight !== 0 && HelperMethods.round(rowRight, 0) !== HelperMethods.round(cellStart, 0)) {\n rowRight = cellStart;\n }\n rowRight += HelperMethods.convertPointToPixel(cell.cellFormat.cellWidth);\n var isPrevCellWithinSel = this.checkPrevOrNextCellIsWithinSel(startLeft, endLeft, cell, true);\n var isNextCellWithinSel = this.checkPrevOrNextCellIsWithinSel(startLeft, endLeft, cell, false);\n // When selected cell not having row spanned cells and column index is not having immediate cell index value,\n // then returned false.\n var isNoRowSpan = rowSpannedCells.length === 0 || rowSpannedCells.length === 1 && rowSpannedCells[0] === cell;\n // checks whether current cell is with in selection.\n var isCellWithInSel = this.checkCurrentCell(rowSpannedCells, cell, isPrevCellWithinSel, isNextCellWithinSel);\n // when last selected row not having equal row span then returned false.\n if (i === count && !isNullOrUndefined(prevCell) && cell.cellFormat.rowSpan > prevCell.cellFormat.rowSpan\n && !isCellWithInSel) {\n return false;\n }\n if (i !== rowStartIndex) {\n for (var m = 0; m < rowSpannedCells.length; m++) {\n {\n var rowSpan = (rowSpannedCells[m].ownerRow.rowIndex + rowSpannedCells[m].cellFormat.rowSpan) - 1;\n if (rowSpan >= row.rowIndex) {\n if (rowSpannedCells[m].columnIndex > cell.columnIndex) {\n isRowRightWithinSel = true;\n }\n else {\n isRowLeftWithinSel = true;\n }\n if (i === count && rowSpannedCells[m] !== cell\n && rowSpan > (cell.ownerRow.rowIndex + cell.cellFormat.rowSpan - 1)) {\n return false;\n }\n if (rowSpan === row.rowIndex && !this.checkPrevOrNextCellIsWithinSel(startLeft, endLeft, cell, false)) {\n rowSpannedCells.splice(rowSpannedCells.indexOf(rowSpannedCells[m]), 1);\n }\n }\n }\n }\n }\n if (isPrevCellWithinSel && !isNullOrUndefined(prevCell)\n && isNoRowSpan\n && (cell.columnIndex !== prevCell.columnIndex + 1 && this.checkCellWidth(cell))) {\n return false;\n }\n }\n }\n if (i === rowStartIndex) {\n selectionLeft = rowLeft;\n selectionRight = rowRight;\n }\n else {\n if (rowRight > 0 && rowLeft > 0) {\n if (!((isRowLeftWithinSel || Math.round(selectionLeft) === Math.round(rowLeft))\n && (isRowRightWithinSel || Math.round(selectionRight) === Math.round(rowRight)))) {\n return false;\n }\n }\n if (i === count) {\n return true;\n }\n }\n }\n return false;\n };\n Editor.prototype.checkCellWidth = function (cell) {\n var prevCell = cell.previousWidget;\n var cellLeft = this.viewer.selection.getCellLeft(cell.ownerRow, cell);\n var prevCellLeft = this.viewer.selection.getCellLeft(cell.ownerRow, prevCell);\n var left = prevCellLeft + HelperMethods.convertPointToPixel(prevCell.cellFormat.cellWidth);\n if (HelperMethods.round(left, 2) !== HelperMethods.round(cellLeft, 2)) {\n return true;\n }\n return false;\n };\n ;\n Editor.prototype.checkCellWithInSelection = function (startLeft, endLeft, cellStart) {\n if (HelperMethods.round(startLeft, 2) <= HelperMethods.round(cellStart, 2)\n && HelperMethods.round(cellStart, 2) < HelperMethods.round(endLeft, 2)) {\n return true;\n }\n return false;\n };\n ;\n Editor.prototype.checkPrevOrNextCellIsWithinSel = function (startLeft, endLeft, cell, isPrev) {\n var prevOrNextCell = isPrev ? cell.previousWidget : cell.nextWidget;\n var cellStart = 0;\n if (isNullOrUndefined(prevOrNextCell)) {\n return false;\n }\n cellStart = this.viewer.selection.getCellLeft(prevOrNextCell.ownerRow, prevOrNextCell);\n return this.checkCellWithInSelection(startLeft, endLeft, cellStart);\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.checkCurrentCell = function (rowSpannedCells, cell, isPrevCellWithInSel, isNextCellWithinSel) {\n var cellOwner = cell.ownerRow;\n if (rowSpannedCells.length > 0) {\n for (var i = 0; i < rowSpannedCells.length; i++) {\n var spannedCellOwner = rowSpannedCells[i].ownerRow;\n var rowSpan = (spannedCellOwner.rowIndex + rowSpannedCells[i].cellFormat.rowSpan) - 1;\n if (rowSpannedCells[i] === cell && (rowSpannedCells.length === 1 || this.checkRowSpannedCells(rowSpannedCells, cell))\n && !(isNextCellWithinSel || isPrevCellWithInSel)) {\n return true;\n }\n if (rowSpannedCells[i] !== cell && spannedCellOwner.rowIndex < cellOwner.rowIndex\n && rowSpan === (cellOwner.rowIndex + cell.cellFormat.rowSpan - 1)) {\n return true;\n }\n }\n }\n return false;\n };\n Editor.prototype.checkRowSpannedCells = function (rowSpannedCells, cell) {\n for (var i = 0; i < rowSpannedCells.length; i++) {\n if (rowSpannedCells[i] !== cell && rowSpannedCells[i].columnIndex === cell.columnIndex) {\n return true;\n }\n }\n return false;\n };\n /**\n * @private\n */\n Editor.prototype.insertNewParagraphWidget = function (newParagraph, insertAfter) {\n this.updateInsertPosition();\n this.insertParagraph(newParagraph, insertAfter);\n if (!insertAfter) {\n var nextParagraph = void 0;\n var currentParagraph = newParagraph;\n do {\n nextParagraph = this.selection.getNextParagraphBlock(currentParagraph);\n currentParagraph = nextParagraph;\n } while (nextParagraph && nextParagraph.equals(newParagraph));\n if (!isNullOrUndefined(nextParagraph)) {\n this.selection.selectParagraph(nextParagraph, true);\n }\n else {\n this.selection.selectParagraph(newParagraph, true);\n }\n }\n this.fireContentChange();\n };\n Editor.prototype.insertParagraph = function (newParagraph, insertAfter) {\n var lineWidget = this.selection.start.currentWidget;\n var offset = this.selection.start.offset;\n var currentParagraph = this.selection.start.paragraph;\n currentParagraph = currentParagraph.combineWidget(this.viewer);\n if (insertAfter) {\n // tslint:disable-next-line:max-line-length\n var length_1 = this.selection.getLineLength(currentParagraph.lastChild);\n var insertIndex_1 = newParagraph.firstChild ? newParagraph.firstChild.children.length : 0;\n // tslint:disable-next-line:max-line-length\n this.moveInlines(currentParagraph, newParagraph, insertIndex_1, offset, lineWidget, length_1, currentParagraph.lastChild);\n }\n else if (offset > 0) {\n this.moveInlines(currentParagraph, newParagraph, 0, 0, currentParagraph.firstChild, offset, lineWidget);\n }\n var splittedWidget = currentParagraph.getSplitWidgets();\n currentParagraph = insertAfter ? splittedWidget[splittedWidget.length - 1] : splittedWidget[0];\n var insertIndex = currentParagraph.containerWidget.childWidgets.indexOf(currentParagraph);\n if (insertAfter) {\n insertIndex++;\n }\n var bodyWidget = currentParagraph.containerWidget;\n newParagraph.index = currentParagraph.index;\n newParagraph.containerWidget = bodyWidget;\n bodyWidget.childWidgets.splice(insertIndex, 0, newParagraph);\n this.updateNextBlocksIndex(insertAfter ? currentParagraph : newParagraph, true);\n newParagraph.height = 0;\n this.viewer.layout.layoutBodyWidgetCollection(newParagraph.index, bodyWidget, newParagraph, false);\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.moveInlines = function (currentParagraph, newParagraph, insertIndex, startOffset, startLine, endOffset, endLine) {\n if (newParagraph.childWidgets.length === 0) {\n var line = new LineWidget(newParagraph);\n newParagraph.childWidgets.push(line);\n }\n var isMoved = false;\n this.viewer.layout.clearListElementBox(currentParagraph);\n this.viewer.layout.clearListElementBox(newParagraph);\n for (var j = 0; j < currentParagraph.childWidgets.length; j++) {\n var lineWidget = currentParagraph.childWidgets[j];\n if (startLine === lineWidget && endLine === lineWidget) {\n insertIndex = this.moveContent(lineWidget, startOffset, endOffset, insertIndex, newParagraph);\n break;\n }\n if (endLine === lineWidget) {\n insertIndex = this.moveContent(lineWidget, 0, endOffset, insertIndex, newParagraph);\n break;\n }\n else if (startLine === lineWidget) {\n isMoved = true;\n // tslint:disable-next-line:max-line-length\n insertIndex = this.moveContent(lineWidget, startOffset, this.viewer.selection.getLineLength(lineWidget), insertIndex, newParagraph);\n }\n else if (isMoved) {\n insertIndex = this.moveContent(lineWidget, 0, this.viewer.selection.getLineLength(lineWidget), insertIndex, newParagraph);\n }\n }\n this.removeEmptyLine(currentParagraph);\n if (!currentParagraph.isInsideTable) {\n this.viewer.layout.reLayoutParagraph(currentParagraph, 0, 0);\n }\n };\n /**\n * @private\n */\n //tslint:disable-next-line:max-line-length\n Editor.prototype.moveContent = function (lineWidget, startOffset, endOffset, insertIndex, paragraph) {\n var count = 0;\n var lineIndex = lineWidget.paragraph.childWidgets.indexOf(lineWidget);\n for (var i = 0; i < lineWidget.children.length; i++) {\n var inline = lineWidget.children[i];\n if (startOffset >= count + inline.length || inline instanceof ListTextElementBox) {\n if (!(inline instanceof ListTextElementBox)) {\n count += inline.length;\n }\n continue;\n }\n var startIndex = 0;\n if (startOffset > count) {\n startIndex = startOffset - count;\n }\n var endIndex = endOffset - count;\n if (endIndex > inline.length) {\n endIndex = inline.length;\n }\n if (startIndex > 0) {\n count += startIndex;\n }\n if (startIndex === 0 && endIndex === inline.length) {\n paragraph.firstChild.children.splice(insertIndex, 0, inline);\n inline.line = paragraph.firstChild;\n insertIndex++;\n // if (editAction < 4) {\n // this.unLinkFieldCharacter(inline);\n lineWidget.children.splice(i, 1);\n i--;\n // }\n }\n else if (inline instanceof TextElementBox) {\n // if (editAction < 4) {\n var span = new TextElementBox();\n span.characterFormat.copyFormat(inline.characterFormat);\n span.text = inline.text.substr(startIndex, endIndex - startIndex);\n paragraph.firstChild.children.splice(insertIndex, 0, span);\n span.line = paragraph.firstChild;\n insertIndex++;\n inline.text = inline.text.slice(0, startIndex) + inline.text.slice(endIndex);\n }\n if (endOffset <= count + endIndex - startIndex) {\n break;\n }\n count += endIndex - startIndex;\n }\n return insertIndex;\n };\n /**\n * update complex changes when history is not preserved\n * @param {number} action?\n * @param {string} start?\n * @param {string} end?\n * @private\n */\n Editor.prototype.updateComplexWithoutHistory = function (action, start, end) {\n var selection = this.viewer.selection;\n if (action === 0) {\n var startPosition = new TextPosition(selection.owner);\n this.setPositionForCurrentIndex(startPosition, start);\n this.viewer.layout.reLayoutParagraph(startPosition.paragraph, 0, 0);\n this.setPositionForCurrentIndex(selection.start, end);\n this.setPositionForCurrentIndex(selection.end, end);\n }\n if (action === 1) {\n var startPosition = new TextPosition(selection.owner);\n this.setPositionForCurrentIndex(startPosition, start);\n var endPosition = new TextPosition(selection.owner);\n this.setPositionForCurrentIndex(endPosition, end);\n this.viewer.layout.reLayoutParagraph(startPosition.paragraph, 0, 0);\n if (endPosition.paragraph !== startPosition.paragraph) {\n this.viewer.layout.reLayoutParagraph(endPosition.paragraph, 0, 0);\n }\n }\n if (selection.owner.isShiftingEnabled) {\n this.viewer.layout.shiftLayoutedItems();\n if (this.viewer.owner.enableHeaderAndFooter) {\n this.updateHeaderFooterWidget();\n }\n }\n selection.owner.isShiftingEnabled = false;\n selection.start.updatePhysicalPosition(true);\n if (selection.isEmpty) {\n selection.end.setPositionInternal(selection.start);\n }\n else {\n selection.end.updatePhysicalPosition(true);\n }\n selection.upDownSelectionLength = selection.end.location.x;\n selection.fireSelectionChanged(true);\n this.viewer.updateFocus();\n this.viewer.updateScrollBars();\n this.fireContentChange();\n this.isHandledComplex = true;\n };\n /**\n * reLayout\n * @param selection\n * @param isSelectionChanged\n * @private\n */\n Editor.prototype.reLayout = function (selection, isSelectionChanged) {\n if (this.editorHistory && this.editorHistory.isHandledComplexHistory()) {\n if (isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)\n || (this.editorHistory.currentBaseHistoryInfo\n && !(this.editorHistory.currentBaseHistoryInfo.action === 'ClearCharacterFormat'\n || this.editorHistory.currentBaseHistoryInfo.action === 'ClearParagraphFormat'))) {\n this.startParagraph = undefined;\n this.endParagraph = undefined;\n }\n this.isHandledComplex = false;\n return;\n }\n if (isNullOrUndefined(this.viewer.blockToShift)) {\n this.viewer.removeEmptyPages();\n this.viewer.layout.updateFieldElements();\n this.viewer.updateScrollBars();\n if (!selection.owner.isShiftingEnabled) {\n selection.fireSelectionChanged(true);\n this.startParagraph = undefined;\n this.endParagraph = undefined;\n }\n }\n if (isNullOrUndefined(isSelectionChanged)) {\n isSelectionChanged = selection.isEmpty;\n }\n if (selection.owner.isShiftingEnabled) {\n selection.owner.isShiftingEnabled = false;\n selection.owner.isLayoutEnabled = true;\n this.viewer.layout.shiftLayoutedItems();\n if (this.viewer.owner.enableHeaderAndFooter) {\n this.updateHeaderFooterWidget();\n }\n this.getOffsetValue(selection);\n selection.upDownSelectionLength = selection.end.location.x;\n selection.fireSelectionChanged(true);\n this.viewer.updateFocus();\n this.startParagraph = undefined;\n this.endParagraph = undefined;\n this.viewer.layout.allowLayout = true;\n }\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo &&\n ((this.editorHistory.currentBaseHistoryInfo.action !== 'RowResizing'\n && this.editorHistory.currentBaseHistoryInfo.action !== 'CellResizing')\n || (this.editorHistory.isUndoing || this.editorHistory.isRedoing))) {\n if (this.editorHistory.currentBaseHistoryInfo.modifiedProperties.length > 0) {\n this.editorHistory.currentBaseHistoryInfo.updateSelection();\n }\n this.editorHistory.updateHistory();\n }\n this.fireContentChange();\n };\n /**\n * @private\n */\n Editor.prototype.updateHeaderFooterWidget = function () {\n this.updateHeaderFooterWidgetToPage(this.selection.start.paragraph.bodyWidget);\n this.shiftPageContent(this.selection.start.paragraph.bodyWidget);\n };\n /**\n * @private\n */\n Editor.prototype.updateHeaderFooterWidgetToPage = function (node) {\n var currentPage = node.page;\n node = this.viewer.layout.updateHeaderFooterToParent(node);\n var isEvenPage = (node.headerFooterType === 'EvenHeader' || node.headerFooterType === 'EvenFooter');\n for (var i = 0; i < this.viewer.pages.length; i++) {\n var page = this.viewer.pages[i];\n if ((i + 1 === 1) && page.bodyWidgets[0].sectionFormat.differentFirstPage &&\n node.headerFooterType.indexOf('FirstPage') !== -1) {\n return;\n }\n if (page.index === 0 && page.bodyWidgets[0].sectionFormat.differentFirstPage &&\n node.headerFooterType.indexOf('FirstPage') === -1) {\n continue;\n }\n if (currentPage !== page) {\n if (page.bodyWidgets[0].sectionFormat.differentOddAndEvenPages) {\n if (isEvenPage && (i + 1) % 2 === 0) {\n this.updateHeaderFooterWidgetToPageInternal(page, node, node.headerFooterType.indexOf('Header') !== -1);\n }\n else if ((!isEvenPage && (i + 1) % 2 !== 0)) {\n if (page.bodyWidgets[0].sectionFormat.differentFirstPage && (i + 1 !== 1)) {\n this.updateHeaderFooterWidgetToPageInternal(page, node, node.headerFooterType.indexOf('Header') !== -1);\n }\n }\n }\n else {\n this.updateHeaderFooterWidgetToPageInternal(page, node, node.headerFooterType.indexOf('Header') !== -1);\n }\n }\n }\n };\n /**\n * @private\n */\n Editor.prototype.updateHeaderFooterWidgetToPageInternal = function (page, widget, isHeader) {\n if (widget.page !== page) {\n var hfWidget = widget.clone();\n hfWidget.page = page;\n this.viewer.updateHFClientArea(hfWidget.sectionFormat, isHeader);\n hfWidget = this.viewer.layout.layoutHeaderFooterItems(this.viewer, hfWidget);\n var headerOrFooter = void 0;\n if (isHeader) {\n headerOrFooter = page.headerWidget;\n page.headerWidget = hfWidget;\n }\n else {\n headerOrFooter = page.footerWidget;\n page.footerWidget = hfWidget;\n }\n headerOrFooter.destroy();\n }\n };\n /**\n * @private\n */\n Editor.prototype.shiftPageContent = function (headerFooter) {\n var type = headerFooter.headerFooterType;\n var pageIndex;\n if (type === 'FirstPageHeader' || type === 'FirstPageFooter') {\n pageIndex = 0;\n }\n else if (headerFooter.sectionFormat.differentOddAndEvenPages) {\n if (headerFooter.sectionFormat.differentFirstPage) {\n pageIndex = (type === 'EvenHeader' || type === 'EvenFooter') ? 1 : 2;\n }\n else {\n pageIndex = (type.indexOf('Even') === -1) ? 0 : 1;\n }\n }\n else {\n pageIndex = headerFooter.sectionFormat.differentFirstPage ? 1 : 0;\n if (pageIndex === 1 && this.viewer.pages.length === 1) {\n pageIndex = 0;\n }\n }\n var page = this.viewer.pages[pageIndex];\n if (type.indexOf('Header') !== -1) {\n var firstBlock = page.bodyWidgets[0].firstChild;\n var top_1 = HelperMethods.convertPointToPixel(headerFooter.sectionFormat.topMargin);\n var headerDistance = HelperMethods.convertPointToPixel(headerFooter.sectionFormat.headerDistance);\n top_1 = Math.max(headerDistance + page.headerWidget.height, top_1);\n if (firstBlock.y !== top_1) {\n this.viewer.updateClientArea(page.bodyWidgets[0].sectionFormat, page);\n this.viewer.blockToShift = firstBlock;\n }\n }\n else {\n this.checkAndShiftFromBottom(page, headerFooter);\n }\n if (this.viewer.blockToShift) {\n this.viewer.renderedLists.clear();\n this.viewer.layout.shiftLayoutedItems();\n }\n };\n /**\n * @private\n */\n Editor.prototype.checkAndShiftFromBottom = function (page, footerWidget) {\n var bodyWidget = page.bodyWidgets[0];\n var blockToShift;\n for (var i = 0; i < bodyWidget.childWidgets.length; i++) {\n var block = bodyWidget.childWidgets[i];\n if (block.y + block.height > footerWidget.y) {\n blockToShift = block;\n break;\n }\n if (bodyWidget.childWidgets.length - 1 === i && block.y + block.height < footerWidget.y) {\n blockToShift = block;\n break;\n }\n }\n this.viewer.updateClientArea(bodyWidget.sectionFormat, page);\n this.viewer.cutFromTop(blockToShift.y);\n this.viewer.blockToShift = blockToShift;\n };\n //Paste Implementation ends\n //Character Format apply implementation starts\n /**\n * Change HighlightColor\n * @param {HighlightColor} highlightColor\n * Applies character format for selection.\n * @param {string} property\n * @param {Object} value\n * @param {boolean} update\n * @private\n */\n Editor.prototype.onApplyCharacterFormat = function (property, value, update) {\n var selection = this.viewer.selection;\n if (selection.owner.isReadOnlyMode || !selection.owner.isDocumentLoaded) {\n return;\n }\n update = isNullOrUndefined(update) ? false : update;\n var action = (property[0].toUpperCase() + property.slice(1));\n var paragraph = selection.start.paragraph;\n var lastLine = paragraph.childWidgets[paragraph.childWidgets.length - 1];\n if (selection.isEmpty && selection.contextType !== 'List') {\n selection.skipFormatRetrieval = true;\n selection.fireSelectionChanged(true);\n selection.skipFormatRetrieval = false;\n return;\n }\n this.setOffsetValue(selection);\n this.initHistory(action);\n // Todo: Complete Microsoft Word behavior on apply formatting in empty selection\n // if (selection.isEmpty) {\n // this.viewer.owner.isShiftingEnabled = true;\n // this.applyCharFormatValue(paragraph.characterFormat, property, value, update);\n // this.reLayout(this.viewer.selection);\n // this.viewer.updateFocus();\n // return;\n // }\n if (selection.contextType === 'List') {\n // this.updateCharacterFormatForListText(selection, action, value, update);\n this.applyCharacterFormatForListText(selection, property, value, update);\n }\n else {\n //Iterate and update format.\n this.updateSelectionCharacterFormatting(property, value, update);\n }\n };\n /**\n * @private\n */\n // tslint:disable-next-line:max-line-length\n Editor.prototype.applyCharacterFormatForListText = function (selection, property, values, update) {\n var listLevel = this.getListLevel(selection.start.paragraph);\n if (isNullOrUndefined(listLevel)) {\n return;\n }\n var characterFormat = listLevel.characterFormat;\n switch (property) {\n case 'bold':\n this.applyListCharacterFormatByValue(selection, characterFormat, 'bold', !(characterFormat.bold));\n break;\n case 'italic':\n this.applyListCharacterFormatByValue(selection, characterFormat, 'italic', !(characterFormat.italic));\n break;\n case 'fontColor':\n this.applyListCharacterFormatByValue(selection, characterFormat, 'fontColor', values);\n break;\n case 'fontFamily':\n this.applyListCharacterFormatByValue(selection, characterFormat, 'fontFamily', values);\n break;\n case 'fontSize':\n this.applyListCharacterFormatByValue(selection, characterFormat, 'fontSize', values);\n break;\n case 'highlightColor':\n this.applyListCharacterFormatByValue(selection, characterFormat, 'highlightColor', values);\n break;\n case 'baselineAlignment':\n if (characterFormat.baselineAlignment === values) {\n values = 'Normal';\n }\n this.applyListCharacterFormatByValue(selection, characterFormat, 'baselineAlignment', values);\n break;\n case 'strikethrough':\n if (characterFormat.strikethrough === values) {\n values = 'None';\n }\n this.applyListCharacterFormatByValue(selection, characterFormat, 'strikethrough', values);\n break;\n case 'underline':\n if (characterFormat.underline === values) {\n values = 'None';\n }\n this.applyListCharacterFormatByValue(selection, characterFormat, 'underline', values);\n break;\n case 'characterFormat':\n this.applyListCharacterFormatByValue(selection, characterFormat, undefined, values);\n break;\n }\n };\n Editor.prototype.applyListCharacterFormatByValue = function (selection, format, property, value) {\n this.initHistory('ListCharacterFormat');\n this.applyCharFormatValue(format, property, value, false);\n this.editorHistory.updateHistory();\n this.reLayout(selection);\n this.fireContentChange();\n };\n /**\n * @private\n */\n Editor.prototype.updateListCharacterFormat = function (selection, property, value) {\n this.updateListTextSelRange(selection, property, value, false);\n };\n Editor.prototype.updateListTextSelRange = function (selection, property, value, update) {\n this.viewer.owner.isShiftingEnabled = true;\n var startPositionInternal = selection.start;\n var endPositionInternal = selection.end;\n if (!selection.isForward) {\n startPositionInternal = selection.end;\n endPositionInternal = selection.start;\n }\n this.initHistoryPosition(selection, startPositionInternal);\n var listLevel = this.getListLevel(selection.start.paragraph);\n this.applyCharFormatValue(listLevel.characterFormat, property, value, update);\n this.startSelectionReLayouting(startPositionInternal.paragraph, selection, startPositionInternal, endPositionInternal);\n };\n /**\n * @private\n */\n Editor.prototype.getListLevel = function (paragraph) {\n var currentList = undefined;\n var listLevelNumber = 0;\n if (!isNullOrUndefined(paragraph.paragraphFormat) && !isNullOrUndefined(paragraph.paragraphFormat.listFormat)) {\n currentList = this.viewer.getListById(paragraph.paragraphFormat.listFormat.listId);\n listLevelNumber = paragraph.paragraphFormat.listFormat.listLevelNumber;\n }\n if (!isNullOrUndefined(currentList) &&\n !isNullOrUndefined(this.viewer.getAbstractListById(currentList.abstractListId))\n // && !isNullOrUndefined(this.viewer.getAbstractListById(currentList.abstractListId).levels.getItem(listLevelNumber))) {\n && !isNullOrUndefined(this.viewer.getAbstractListById(currentList.abstractListId).levels)) {\n return this.viewer.layout.getListLevel(currentList, listLevelNumber);\n }\n return undefined;\n };\n Editor.prototype.updateInsertPosition = function () {\n var selection = this.viewer.selection;\n var position = selection.start;\n if (!selection.isForward) {\n position = selection.end;\n }\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)\n && !isNullOrUndefined(position)) {\n if (isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo.insertPosition)) {\n this.updateHistoryPosition(position, true);\n }\n }\n };\n /**\n * preserve paragraph and offset value for selection\n * @private\n */\n Editor.prototype.setOffsetValue = function (selection) {\n var info = this.getParagraphInfo(selection.start);\n this.startParagraph = info.paragraph;\n this.startOffset = info.offset;\n info = this.getParagraphInfo(selection.end);\n this.endParagraph = info.paragraph;\n this.endOffset = info.offset;\n };\n /**\n * Toggles the highlight color property of selected contents.\n * @param {HighlightColor} highlightColor Default value of ‘underline’ parameter is Yellow.\n */\n Editor.prototype.toggleHighlightColor = function (highlightColor) {\n var selection = this.viewer.selection;\n if (isNullOrUndefined(highlightColor) || highlightColor === 'NoColor') {\n highlightColor = 'Yellow';\n }\n //In Ms Word the highlight color is took from the ribbon. So we Have given yellow as constant.\n if (selection.characterFormat.highlightColor === highlightColor) {\n highlightColor = 'NoColor';\n }\n this.selection.characterFormat.highlightColor = highlightColor;\n };\n /**\n * Toggles the subscript formatting of selected contents.\n */\n Editor.prototype.toggleSubscript = function () {\n if (!this.owner.isReadOnlyMode) {\n var value = this.selection.characterFormat.baselineAlignment === 'Subscript' ? 'Normal' : 'Subscript';\n this.selection.characterFormat.baselineAlignment = value;\n }\n };\n /**\n * Toggles the superscript formatting of selected contents.\n */\n Editor.prototype.toggleSuperscript = function () {\n if (!this.owner.isReadOnlyMode) {\n var value = this.selection.characterFormat.baselineAlignment === 'Superscript' ? 'Normal' : 'Superscript';\n this.selection.characterFormat.baselineAlignment = value;\n }\n };\n /**\n * Toggles the text alignment property of selected contents.\n * @param {TextAlignment} textAlignment Default value of ‘textAlignment parameter is TextAlignment.Left.\n */\n /**\n * Increases the left indent of selected paragraphs to a factor of 36 points.\n */\n Editor.prototype.increaseIndent = function () {\n if (!this.owner.isReadOnlyMode) {\n this.onApplyParagraphFormat('leftIndent', this.viewer.defaultTabWidth, true, false);\n }\n };\n /**\n * Decreases the left indent of selected paragraphs to a factor of 36 points.\n */\n Editor.prototype.decreaseIndent = function () {\n if (!this.owner.isReadOnlyMode) {\n this.onApplyParagraphFormat('leftIndent', -this.viewer.defaultTabWidth, true, false);\n }\n };\n /**\n * Clears the list format for selected paragraphs.\n */\n Editor.prototype.clearList = function () {\n this.selection.owner.editorModule.onApplyList(undefined);\n };\n /**\n * Applies the bullet list to selected paragraphs.\n * @param {string} bullet Bullet character\n * @param {string} fontFamily Bullet font family\n */\n Editor.prototype.applyBullet = function (bullet, fontFamily) {\n if (!this.owner.isReadOnlyMode) {\n this.applyBulletOrNumbering(bullet, 'Bullet', fontFamily);\n }\n };\n /**\n * Applies the numbering list to selected paragraphs.\n * @param numberFormat “%n” representations in ‘numberFormat’ parameter will be replaced by respective list level’s value.\n * `“%1)” will be displayed as “1)” `\n * @param listLevelPattern Default value of ‘listLevelPattern’ parameter is ListLevelPattern.Arabic\n */\n Editor.prototype.applyNumbering = function (numberFormat, listLevelPattern) {\n if (!this.owner.isReadOnlyMode) {\n this.applyBulletOrNumbering(numberFormat, listLevelPattern, 'Verdana');\n }\n };\n /**\n * Toggles the baseline alignment property of selected contents.\n * @param {Selection} selection\n * @param {BaselineAlignment} baseAlignment\n */\n Editor.prototype.toggleBaselineAlignment = function (baseAlignment) {\n this.updateProperty(2, baseAlignment);\n };\n /**\n * Clears the formatting.\n */\n Editor.prototype.clearFormatting = function () {\n var selection = this.viewer.selection;\n this.initComplexHistory('ClearFormat');\n // let startIndex: string = selection.start.getHierarchicalIndexInternal();\n // let endIndex: string = selection.end.getHierarchicalIndexInternal();\n if (selection.isEmpty) {\n selection.start.moveToParagraphStartInternal(selection, false);\n selection.end.moveToParagraphEndInternal(selection, false);\n }\n this.setOffsetValue(selection);\n if (this.editorHistory) {\n this.editorHistory.initializeHistory('ClearCharacterFormat');\n }\n this.updateSelectionCharacterFormatting('ClearCharacterFormat', undefined, false);\n this.getOffsetValue(selection);\n if (this.editorHistory) {\n this.editorHistory.updateHistory();\n }\n this.setOffsetValue(selection);\n if (this.editorHistory) {\n this.editorHistory.initializeHistory('ClearParagraphFormat');\n }\n this.updateParagraphFormatInternal('ClearParagraphFormat', undefined, false);\n if (this.editorHistory) {\n this.editorHistory.updateHistory();\n }\n this.getOffsetValue(selection);\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentHistoryInfo)) {\n this.editorHistory.updateComplexHistory();\n }\n this.startParagraph = undefined;\n this.endParagraph = undefined;\n // else {\n // this.checkAndUpdatedSelection(startIndex, endIndex);\n // }\n };\n /**\n * Toggles the specified property. If property is assigned already. Then property will be changed\n * @param {Selection} selection\n * @param {number} type\n * @param {Object} value\n * @private\n */\n Editor.prototype.updateProperty = function (type, value) {\n var selection = this.selection;\n if (selection.owner.isReadOnlyMode || !selection.owner.isDocumentLoaded) {\n return;\n }\n var startPosition = selection.start;\n var endPosition = selection.end;\n if (!selection.isForward) {\n startPosition = selection.end;\n endPosition = selection.start;\n }\n var indexInInline = 0;\n var inlineObj = startPosition.currentWidget.getInline(startPosition.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n var paragraph = startPosition.paragraph;\n if (!isNullOrUndefined(inline) && inline.length === indexInInline && !this.selection.isEmpty) {\n inline = inline.nextNode;\n }\n if (type === 1) {\n var currentUnderline = 'None';\n if (!isNullOrUndefined(inline)) {\n currentUnderline = inline.characterFormat.underline;\n }\n else if (!isNullOrUndefined(paragraph)) {\n currentUnderline = paragraph.characterFormat.underline;\n }\n this.selection.characterFormat.underline = value === currentUnderline ? 'None' : value;\n }\n else {\n var script = 'Normal';\n if (!isNullOrUndefined(inline)) {\n script = inline.characterFormat.baselineAlignment;\n }\n else if (!isNullOrUndefined(paragraph)) {\n script = paragraph.characterFormat.baselineAlignment;\n }\n if (script === value) {\n value = 'Normal';\n }\n this.selection.characterFormat.baselineAlignment = value;\n }\n };\n /**\n * Update Style for paragraph\n * @private\n */\n Editor.prototype.applyStyle = function (styleName) {\n var style = this.viewer.styles.findByName(styleName);\n if (style !== undefined) {\n this.onApplyParagraphFormat('styleName', style, false, true);\n }\n else {\n // tslint:disable-next-line:max-line-length\n this.viewer.owner.parser.parseStyle(JSON.parse(this.getCompleteStyles()), JSON.parse(this.viewer.preDefinedStyles.get(styleName)), this.viewer.styles);\n this.applyStyle(styleName);\n }\n };\n Editor.prototype.getCompleteStyles = function () {\n var completeStylesString = '{\"styles\":[';\n for (var _i = 0, _a = this.viewer.preDefinedStyles.getItem(); _i < _a.length; _i++) {\n var name_1 = _a[_i];\n completeStylesString += (this.viewer.preDefinedStyles.get(name_1) + ',');\n }\n return completeStylesString.slice(0, -1) + ']}';\n };\n /**\n * Initialize default styles\n * @private\n */\n Editor.prototype.intializeDefaultStyles = function () {\n var existingStyles = this.owner.getStyleNames('Paragraph');\n var defaultStyleNames = ['Normal', 'Heading 1', 'Heading 2', 'Heading 3', 'Heading 4', 'Heading 5', 'Heading 6'];\n var styleNames = defaultStyleNames.filter(function (val) {\n return existingStyles.indexOf(val) === -1;\n });\n for (var _i = 0, styleNames_1 = styleNames; _i < styleNames_1.length; _i++) {\n var name_2 = styleNames_1[_i];\n this.createStyle(this.viewer.preDefinedStyles.get(name_2));\n }\n };\n /**\n * Create a Style.\n * @private\n */\n Editor.prototype.createStyle = function (styleString) {\n /* tslint:disable:no-any */\n var style = JSON.parse(styleString);\n var styleObj = this.viewer.styles.findByName(style.name);\n if (styleObj !== undefined) {\n //Create a new style with new name and add it to collection.\n style.name = this.getUniqueStyleName(style.name);\n }\n this.viewer.owner.parser.parseStyle(JSON.parse(this.getCompleteStyles()), style, this.viewer.styles);\n return this.viewer.styles.findByName(style.name);\n };\n /**\n * @private\n */\n Editor.prototype.getUniqueStyleName = function (name) {\n var uniqueName = this.getUniqueName(name);\n var style = this.viewer.styles.findByName(uniqueName);\n while (!isNullOrUndefined(style)) {\n uniqueName = this.getUniqueStyleName(style.name);\n style = this.viewer.styles.findByName(uniqueName);\n }\n return uniqueName;\n };\n Editor.prototype.getUniqueName = function (name) {\n var matchArray = name.match(/\\d+$/);\n var returnName;\n if (!isNullOrUndefined(matchArray) && matchArray.length > 0) {\n return name.replace(matchArray[0], (parseInt(matchArray[0], 10) + 1).toString());\n }\n else {\n return name + '_1';\n }\n };\n /**\n * Update Character format for selection\n * @private\n */\n Editor.prototype.updateSelectionCharacterFormatting = function (property, values, update) {\n if (isNullOrUndefined(property)) {\n property = 'CharacterFormat';\n }\n switch (property) {\n case 'bold':\n this.updateCharacterFormat('bold', values);\n break;\n case 'italic':\n this.updateCharacterFormat('italic', values);\n break;\n case 'fontColor':\n this.updateCharacterFormat('fontColor', values);\n break;\n case 'fontFamily':\n this.updateCharacterFormat('fontFamily', values);\n break;\n case 'fontSize':\n this.updateCharacterFormatWithUpdate(this.viewer.selection, 'fontSize', values, update);\n break;\n case 'highlightColor':\n this.updateCharacterFormat('highlightColor', values);\n break;\n case 'baselineAlignment':\n this.updateCharacterFormat('baselineAlignment', values);\n break;\n case 'strikethrough':\n this.updateCharacterFormat('strikethrough', values);\n break;\n case 'underline':\n this.updateCharacterFormat('underline', values);\n break;\n case 'styleName':\n this.updateCharacterFormatWithUpdate(this.viewer.selection, 'styleName', values, true);\n break;\n case 'CharacterFormat':\n this.updateCharacterFormat(undefined, values);\n break;\n case 'ClearCharacterFormat':\n this.updateCharacterFormat(undefined, values);\n break;\n }\n this.reLayout(this.viewer.selection);\n };\n /**\n * Update character format for selection range\n * @param {SelectionRange} selectionRange\n * @param {string} property\n * @param {Object} value\n * @returns void\n * @private\n */\n Editor.prototype.updateCharacterFormat = function (property, value) {\n this.updateCharacterFormatWithUpdate(this.viewer.selection, property, value, false);\n };\n Editor.prototype.updateCharacterFormatWithUpdate = function (selection, property, value, update) {\n this.viewer.owner.isShiftingEnabled = true;\n var startPosition = selection.start;\n var endPosition = selection.end;\n if (!selection.isForward) {\n startPosition = selection.end;\n endPosition = selection.start;\n }\n this.applyCharFormatSelectedContent(startPosition.paragraph, selection, startPosition, endPosition, property, value, update);\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.applyCharFormatSelectedContent = function (paragraph, selection, start, end, property, value, update) {\n //Selection start in cell.\n if (start.paragraph.isInsideTable && (!end.paragraph.isInsideTable\n || start.paragraph.associatedCell !== end.paragraph.associatedCell\n || selection.isCellSelected(start.paragraph.associatedCell, start, end))) {\n var cell = void 0;\n start.paragraph.associatedCell.ownerTable.combineWidget(this.viewer);\n if (this.checkInsertPosition(selection)) {\n this.updateHistoryPosition(start, true);\n }\n cell = start.paragraph.associatedCell;\n this.applyCharFormatCell(cell, selection, start, end, property, value, update);\n var table = cell.ownerTable;\n // tslint:disable-next-line:max-line-length\n this.viewer.layout.layoutBodyWidgetCollection(table.index, table.containerWidget, table, false);\n }\n else {\n this.applyCharFormat(paragraph, selection, start, end, property, value, update);\n }\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.applyCharFormatForSelectedPara = function (paragraph, selection, property, value, update) {\n for (var i = 0; i < paragraph.childWidgets.length; i++) {\n var line = paragraph.childWidgets[i];\n for (var j = 0; j < line.children.length; j++) {\n var element = line.children[j];\n this.applyCharFormatValue(element.characterFormat, property, value, update);\n }\n }\n this.applyCharFormatValue(paragraph.characterFormat, property, value, update);\n };\n Editor.prototype.splittedLastParagraph = function (paragraph) {\n var splittedWidets = paragraph.getSplitWidgets();\n return splittedWidets[splittedWidets.length - 1];\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.getNextParagraphForCharacterFormatting = function (block, start, end, property, value, update) {\n var widgetCollection = block.getSplitWidgets();\n block = widgetCollection[widgetCollection.length - 1];\n block = this.viewer.selection.getNextRenderedBlock(block);\n if (!isNullOrUndefined(block)) {\n if (block instanceof ParagraphWidget) {\n this.applyCharFormat(block, this.viewer.selection, start, end, property, value, update);\n }\n else {\n this.applyCharFormatForTable(0, block, this.viewer.selection, start, end, property, value, update);\n }\n }\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.applyCharFormat = function (paragraph, selection, start, end, property, value, update) {\n paragraph = paragraph.combineWidget(this.viewer);\n var startOffset = 0;\n var length = selection.getParagraphLength(paragraph);\n var startLineWidget = paragraph.childWidgets.indexOf(start.currentWidget) !== -1 ?\n paragraph.childWidgets.indexOf(start.currentWidget) : 0;\n var endOffset = end.offset;\n var endLineWidget = paragraph.childWidgets.indexOf(end.currentWidget) !== -1 ?\n paragraph.childWidgets.indexOf(end.currentWidget) : paragraph.childWidgets.length - 1;\n if (!isNullOrUndefined(selection)) {\n if (paragraph === start.paragraph) {\n startOffset = start.offset;\n }\n }\n if (!paragraph.equals(end.paragraph)) {\n this.applyCharFormatValue(paragraph.characterFormat, property, value, update);\n endOffset = length;\n }\n else {\n var lastLine = paragraph.childWidgets[paragraph.childWidgets.length - 1];\n if (selection.isParagraphLastLine(lastLine) && end.currentWidget === lastLine\n && endOffset === selection.getLineLength(lastLine) + 1) {\n this.applyCharFormatValue(paragraph.characterFormat, property, value, update);\n }\n }\n // let count: number = 0;\n for (var i = startLineWidget; i <= endLineWidget; i++) {\n var line = paragraph.childWidgets[i];\n if (i !== startLineWidget) {\n startOffset = selection.getStartLineOffset(line);\n }\n if (line === end.currentWidget) {\n endOffset = end.offset;\n }\n else {\n endOffset = selection.getLineLength(line);\n }\n var count = 0;\n for (var j = 0; j < line.children.length; j++) {\n var inlineObj = line.children[j];\n if (inlineObj instanceof ListTextElementBox) {\n continue;\n }\n if (startOffset >= count + inlineObj.length) {\n count += inlineObj.length;\n continue;\n }\n var startIndex = 0;\n if (startOffset > count) {\n startIndex = startOffset - count;\n }\n var endIndex = endOffset - count;\n var inlineLength = inlineObj.length;\n if (endIndex > inlineLength) {\n endIndex = inlineLength;\n }\n j += this.applyCharFormatInline(inlineObj, selection, startIndex, endIndex, property, value, update);\n if (endOffset <= count + inlineLength) {\n break;\n }\n count += inlineLength;\n }\n }\n var endParagraph = end.paragraph;\n this.viewer.layout.reLayoutParagraph(paragraph, startLineWidget, 0);\n if (paragraph.equals(endParagraph)) {\n return;\n }\n this.getNextParagraphForCharacterFormatting(paragraph, start, end, property, value, update);\n };\n /**\n * Toggles the bold property of selected contents.\n */\n Editor.prototype.toggleBold = function () {\n if (this.viewer.owner.isReadOnlyMode) {\n return;\n }\n var value = this.getCurrentSelectionValue('bold');\n this.selection.characterFormat.bold = value;\n };\n /**\n * Toggles the bold property of selected contents.\n */\n Editor.prototype.toggleItalic = function () {\n if (this.viewer.owner.isReadOnlyMode) {\n return;\n }\n var value = this.getCurrentSelectionValue('italic');\n this.selection.characterFormat.italic = value;\n };\n Editor.prototype.getCurrentSelectionValue = function (property) {\n var value = false;\n if ((property === 'bold' || property === 'italic')) {\n var index = 0;\n var start = this.selection.start;\n if (!this.selection.isForward) {\n start = this.selection.end;\n }\n var lineWidget = start.currentWidget;\n var inlineObj = lineWidget.getInline(start.offset, index);\n var inline = inlineObj.element;\n // inline.ownerBase\n index = inlineObj.index;\n var characterFormat = lineWidget.paragraph.characterFormat;\n if (!isNullOrUndefined(inline)) {\n if (!this.selection.isEmpty && index === inline.length) {\n characterFormat = isNullOrUndefined(inline.nextNode) ? lineWidget.paragraph.characterFormat\n : inline.nextNode.characterFormat;\n }\n else {\n characterFormat = inline.characterFormat;\n }\n }\n if (property === 'bold') {\n value = !(characterFormat.bold);\n }\n if (property === 'italic') {\n value = !(characterFormat.italic);\n }\n }\n return value;\n };\n /**\n * Toggles the underline property of selected contents.\n * @param underline Default value of ‘underline’ parameter is Single.\n */\n Editor.prototype.toggleUnderline = function (underline) {\n if (!this.owner.isReadOnlyMode) {\n this.updateProperty(1, underline);\n }\n };\n /**\n * Toggles the strike through property of selected contents.\n * @param {Strikethrough} strikethrough Default value of strikethrough parameter is SingleStrike.\n */\n Editor.prototype.toggleStrikethrough = function (strikethrough) {\n if (!this.owner.isReadOnlyMode) {\n var value = void 0;\n if (isNullOrUndefined(strikethrough)) {\n value = this.selection.characterFormat.strikethrough === 'SingleStrike' ? 'None' : 'SingleStrike';\n }\n else {\n value = strikethrough;\n }\n this.selection.characterFormat.strikethrough = value;\n }\n };\n Editor.prototype.updateFontSize = function (format, value) {\n if (typeof (value) === 'number' && !(value < 0 && format.fontSize === 1)) {\n return format.fontSize + value;\n }\n var fontsizeCollection = [8, 9, 10, 11, 12, 14, 16, 18, 20, 24, 26, 28, 36, 48, 72];\n if (typeof (value) === 'string' && value === 'increment') {\n if (format.fontSize < 8) {\n return format.fontSize + 1;\n }\n else if (format.fontSize >= 72 && format.fontSize < 80) {\n return 80;\n }\n else if (format.fontSize >= 80) {\n return format.fontSize + 10;\n }\n else {\n for (var i = 0; i < fontsizeCollection.length; i++) {\n if (format.fontSize < fontsizeCollection[i]) {\n return fontsizeCollection[i];\n }\n }\n }\n }\n else if (typeof (value) === 'string' && value === 'decrement' && format.fontSize > 1) {\n if (format.fontSize <= 8) {\n return format.fontSize - 1;\n }\n else if (format.fontSize > 72 && format.fontSize <= 80) {\n return 72;\n }\n else if (format.fontSize > 80) {\n return format.fontSize - 10;\n }\n else {\n for (var i = 0; i < fontsizeCollection.length; i++) {\n if (format.fontSize <= fontsizeCollection[i]) {\n return fontsizeCollection[i - 1];\n }\n }\n }\n }\n return format.fontSize;\n };\n // Inline\n // tslint:disable-next-line:max-line-length\n Editor.prototype.applyCharFormatInline = function (inline, selection, startIndex, endIndex, property, value, update) {\n if (startIndex === 0 && endIndex === inline.length) {\n this.applyCharFormatValue(inline.characterFormat, property, value, update);\n return 0;\n }\n else if (inline instanceof TextElementBox) {\n return this.formatInline(inline, selection, startIndex, endIndex, property, value, update);\n }\n return 0;\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.formatInline = function (inline, selection, startIndex, endIndex, property, value, update) {\n var x = 0;\n var node = inline;\n var index = inline.line.children.indexOf(node);\n var paragraph = inline.paragraph;\n var lineIndex = paragraph.childWidgets.indexOf(inline.line);\n var textElement;\n if (startIndex > 0) {\n textElement = new TextElementBox();\n textElement.characterFormat.copyFormat(inline.characterFormat);\n textElement.line = inline.line;\n textElement.text = inline.text.substr(startIndex, endIndex - startIndex);\n this.applyCharFormatValue(textElement.characterFormat, property, value, update);\n index++;\n node.line.children.splice(index, 0, textElement);\n x++;\n // this.addToLinkedFields(span); \n }\n if (endIndex < node.length) {\n textElement = new TextElementBox();\n textElement.characterFormat.copyFormat(inline.characterFormat);\n textElement.text = node.text.substring(endIndex);\n textElement.line = inline.line;\n index++;\n node.line.children.splice(index, 0, textElement);\n x++;\n // this.addToLinkedFields(span); \n }\n if (startIndex === 0) {\n inline.text = inline.text.substr(0, endIndex);\n this.applyCharFormatValue(inline.characterFormat, property, value, update);\n }\n else {\n inline.text = inline.text.substr(0, startIndex);\n }\n return x;\n };\n // Cell\n // tslint:disable-next-line:max-line-length\n Editor.prototype.applyCharFormatCell = function (cell, selection, start, end, property, value, update) {\n if (end.paragraph.isInsideTable) {\n var containerCell = selection.getContainerCellOf(cell, end.paragraph.associatedCell);\n if (containerCell.ownerTable.contains(end.paragraph.associatedCell)) {\n var startCell = selection.getSelectedCell(cell, containerCell);\n var endCell = selection.getSelectedCell(end.paragraph.associatedCell, containerCell);\n if (selection.containsCell(containerCell, end.paragraph.associatedCell)) {\n //Selection end is in container cell.\n if (selection.isCellSelected(containerCell, start, end)) {\n value = this.getCharacterFormatValueOfCell(cell, selection, value, property);\n this.applyCharFormatForSelectedCell(containerCell, selection, property, value, update);\n }\n else {\n if (startCell === containerCell) {\n this.applyCharFormat(start.paragraph, selection, start, end, property, value, update);\n }\n else {\n this.applyCharFormatRow(startCell.ownerRow, selection, start, end, property, value, update);\n }\n }\n }\n else {\n this.applyCharFormatForTableCell(containerCell.ownerTable, selection, containerCell, endCell, property, value, update);\n }\n }\n else {\n this.applyCharFormatRow(containerCell.ownerRow, selection, start, end, property, value, update);\n }\n }\n else {\n var tableCell = selection.getContainerCell(cell);\n this.applyCharFormatRow(tableCell.ownerRow, selection, start, end, property, value, update);\n }\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.applyCharFormatForSelectedCell = function (cell, selection, property, value, update) {\n for (var i = 0; i < cell.childWidgets.length; i++) {\n var block = cell.childWidgets[i];\n if (block instanceof ParagraphWidget) {\n this.applyCharFormatForSelectedPara(block, selection, property, value, update);\n }\n else {\n this.applyCharFormatForSelTable(block, selection, property, value, update);\n }\n }\n };\n // Row\n // tslint:disable-next-line:max-line-length\n Editor.prototype.applyCharFormatRow = function (row, selection, start, end, property, value, update) {\n value = this.getCharacterFormatValueOfCell(row.childWidgets[0], selection, value, property);\n this.applyCharFormatForTable(row.rowIndex, row.ownerTable, selection, start, end, property, value, update);\n };\n // Table\n // tslint:disable-next-line:max-line-length\n Editor.prototype.applyCharFormatForTable = function (index, table, selection, start, end, property, value, update) {\n table = table.combineWidget(this.viewer);\n for (var i = index; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n this.applyCharFormatForSelectedCell(row.childWidgets[j], selection, property, value, update);\n }\n if (end.paragraph.isInsideTable && selection.containsRow(row, end.paragraph.associatedCell)) {\n this.viewer.layout.layoutBodyWidgetCollection(table.index, table.containerWidget, table, false);\n return;\n }\n }\n this.viewer.layout.layoutBodyWidgetCollection(table.index, table.containerWidget, table, false);\n this.getNextParagraphForCharacterFormatting(table, start, end, property, value, update);\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.applyCharFormatForSelTable = function (tableWidget, selection, property, value, update) {\n for (var i = 0; i < tableWidget.childWidgets.length; i++) {\n var row = tableWidget.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n this.applyCharFormatForSelectedCell(row.childWidgets[j], selection, property, value, update);\n }\n }\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.applyCharFormatForTableCell = function (table, selection, startCell, endCell, property, value, update) {\n var startCellLeft = selection.getCellLeft(startCell.ownerRow, startCell);\n var startCellRight = startCellLeft + startCell.cellFormat.cellWidth;\n var endCellLeft = selection.getCellLeft(endCell.ownerRow, endCell);\n var endCellRight = endCellLeft + endCell.cellFormat.cellWidth;\n var cellInfo = this.updateSelectedCellsInTable(startCellLeft, startCellRight, endCellLeft, endCellRight);\n startCellLeft = cellInfo.start;\n startCellRight = cellInfo.end;\n var count = table.childWidgets.indexOf(endCell.ownerRow);\n var isStarted = false;\n for (var i = table.childWidgets.indexOf(startCell.ownerRow); i <= count; i++) {\n var row = table.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n var left = selection.getCellLeft(row, row.childWidgets[j]);\n if (HelperMethods.round(startCellLeft, 2) <= HelperMethods.round(left, 2) &&\n HelperMethods.round(left, 2) < HelperMethods.round(startCellRight, 2)) {\n if (!isStarted) {\n value = this.getCharacterFormatValueOfCell(row.childWidgets[j], selection, value, property);\n isStarted = true;\n }\n this.applyCharFormatForSelectedCell(row.childWidgets[j], selection, property, value, update);\n }\n }\n }\n };\n Editor.prototype.updateSelectedCellsInTable = function (start, end, endCellLeft, endCellRight) {\n var selection = this.viewer.selection;\n if (start > endCellLeft) {\n start = endCellLeft;\n }\n if (end < endCellRight) {\n end = endCellRight;\n }\n if (start > selection.upDownSelectionLength) {\n start = selection.upDownSelectionLength;\n }\n if (end < selection.upDownSelectionLength) {\n end = selection.upDownSelectionLength;\n }\n return { start: start, end: end };\n };\n Editor.prototype.getCharacterFormatValueOfCell = function (cell, selection, value, property) {\n if (typeof (value) === 'boolean' || (value === undefined && (property === 'bold' || property === 'italic'))) {\n var firstParagraph = selection.getFirstParagraph(cell);\n var format = firstParagraph.characterFormat;\n if (firstParagraph.childWidgets.length > 0 && firstParagraph.childWidgets[0].children.length > 0) {\n format = firstParagraph.childWidgets[0].children[0].characterFormat;\n }\n value = !format.getPropertyValue(property);\n }\n return value;\n };\n /**\n * Apply Character format for selection\n * @private\n */\n Editor.prototype.applyCharFormatValueInternal = function (selection, format, property, value) {\n this.applyCharFormatValue(format, property, value, false);\n };\n Editor.prototype.copyInlineCharacterFormat = function (sourceFormat, destFormat) {\n destFormat.uniqueCharacterFormat = sourceFormat.uniqueCharacterFormat;\n destFormat.baseCharStyle = sourceFormat.baseCharStyle;\n };\n Editor.prototype.applyCharFormatValue = function (format, property, value, update) {\n if (update && property === 'fontSize') {\n value = this.updateFontSize(format, value);\n }\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n value = this.editorHistory.currentBaseHistoryInfo.addModifiedProperties(format, property, value);\n }\n if (value instanceof WCharacterFormat) {\n if (this.editorHistory && (this.editorHistory.isUndoing || this.editorHistory.isRedoing)) {\n this.copyInlineCharacterFormat(value, format);\n }\n else {\n format.copyFormat(value);\n }\n return;\n }\n if (isNullOrUndefined(value)) {\n format.clearFormat();\n return;\n }\n if (property === 'bold') {\n format.bold = value;\n }\n else if (property === 'italic') {\n format.italic = value;\n }\n else if (property === 'fontColor') {\n format.fontColor = value;\n }\n else if (property === 'fontFamily') {\n format.fontFamily = value;\n }\n else if (property === 'fontSize') {\n format.fontSize = value;\n }\n else if (property === 'highlightColor') {\n format.highlightColor = value;\n }\n else if (property === 'baselineAlignment') {\n format.baselineAlignment = value;\n }\n else if (property === 'strikethrough') {\n format.strikethrough = value;\n }\n else if (property === 'underline') {\n format.underline = value;\n }\n else if (property === 'styleName') {\n format.baseCharStyle = value;\n }\n };\n /**\n * @private\n */\n Editor.prototype.onImageFormat = function (elementBox, width, height) {\n var modifiedFormat = new ImageFormat(elementBox);\n if (this.editorHistory) {\n this.editorHistory.initializeHistory('ImageResizing');\n this.editorHistory.currentBaseHistoryInfo.modifiedProperties.push(modifiedFormat);\n }\n this.setOffsetValue(this.selection);\n elementBox.width = width;\n elementBox.height = height;\n // tslint:disable-next-line:max-line-length\n this.viewer.layout.reLayoutParagraph(elementBox.line.paragraph, elementBox.line.indexInOwner, 0);\n this.reLayout(this.selection, false);\n if (this.viewer.owner.imageResizerModule) {\n this.viewer.owner.imageResizerModule.positionImageResizer(elementBox);\n }\n };\n /**\n * Toggles the text alignment of selected paragraphs.\n * @param {TextAlignment} textAlignment\n */\n Editor.prototype.toggleTextAlignment = function (textAlignment) {\n if (this.viewer.owner.isReadOnlyMode || !this.viewer.owner.isDocumentLoaded) {\n return;\n }\n // Toggle performed based on current selection format similar to MS word behavior.\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(this.viewer.selection.paragraphFormat.textAlignment) && this.viewer.selection.paragraphFormat.textAlignment === textAlignment) {\n if (textAlignment === 'Left') {\n this.onApplyParagraphFormat('textAlignment', 'Justify', false, true);\n }\n else {\n this.onApplyParagraphFormat('textAlignment', 'Left', false, true);\n }\n }\n else {\n this.onApplyParagraphFormat('textAlignment', textAlignment, false, true);\n }\n };\n /**\n * Applies paragraph format for the selection ranges.\n * @param {string} property\n * @param {Object} value\n * @param {boolean} update\n * @param {boolean} isSelectionChanged\n * @private\n */\n Editor.prototype.onApplyParagraphFormat = function (property, value, update, isSelectionChanged) {\n var action = (property[0].toUpperCase() + property.slice(1));\n this.viewer.owner.isShiftingEnabled = true;\n var selection = this.viewer.selection;\n this.initHistory(action);\n if (this.viewer.owner.isReadOnlyMode || !this.viewer.owner.isDocumentLoaded) {\n return;\n }\n if (property === 'leftIndent') {\n if (selection.paragraphFormat.listId !== -1 && update) {\n this.updateListLevel(value > 0);\n return;\n }\n }\n if (selection.isEmpty) {\n this.setOffsetValue(selection);\n if (update && property === 'leftIndent') {\n value = this.getIndentIncrementValue(selection.start.paragraph, value);\n }\n var para = selection.start.paragraph.combineWidget(this.viewer);\n this.applyParaFormatProperty(para, property, value, update);\n this.layoutItemBlock(para, false);\n }\n else {\n //Iterate and update formatting's. \n this.setOffsetValue(selection);\n this.updateSelectionParagraphFormatting(property, value, update);\n }\n this.reLayout(selection);\n };\n /**\n * Update the list level\n * @param {boolean} increaseLevel\n * @private\n */\n Editor.prototype.updateListLevel = function (increaseLevel) {\n // Increment or Decrement list level for Multilevel lists.\n var viewer = this.viewer;\n var listFormat = this.viewer.selection.start.paragraph.paragraphFormat.listFormat;\n var paragraphFormat = this.viewer.selection.start.paragraph.paragraphFormat;\n var list = viewer.getListById(paragraphFormat.listFormat.listId);\n var listLevel = viewer.layout.getListLevel(list, paragraphFormat.listFormat.listLevelNumber);\n var levelNumber;\n if (increaseLevel) {\n levelNumber = paragraphFormat.listFormat.listLevelNumber + 1;\n }\n else {\n levelNumber = paragraphFormat.listFormat.listLevelNumber - 1;\n }\n var nextListLevel = viewer.layout.getListLevel(list, levelNumber);\n if (!isNullOrUndefined(nextListLevel)) {\n this.onApplyListInternal(list, levelNumber);\n viewer.selection.start.updatePhysicalPosition(true);\n viewer.selection.end.updatePhysicalPosition(true);\n viewer.selection.updateCaretPosition();\n }\n };\n /**\n * Applies list\n * @param {WList} list\n * @param {number} listLevelNumber\n * @private\n */\n Editor.prototype.onApplyListInternal = function (list, listLevelNumber) {\n var selection = this.viewer.selection;\n var listFormat = new WListFormat();\n if (!isNullOrUndefined(list) && listLevelNumber >= 0 && listLevelNumber < 9) {\n listFormat.listId = list.listId;\n listFormat.listLevelNumber = listLevelNumber;\n }\n this.onApplyParagraphFormat('listFormat', listFormat, false, false);\n };\n /**\n * Apply paragraph format to selection range\n * @private\n */\n Editor.prototype.updateSelectionParagraphFormatting = function (property, value, update) {\n var selection = this.viewer.selection;\n if (property === 'leftIndent' && update) {\n if (!isNullOrUndefined(selection.start) && selection.start.isExistBefore(selection.end)) {\n value = this.getIndentIncrementValue(selection.start.paragraph, value);\n }\n else {\n value = this.getIndentIncrementValue(selection.end.paragraph, value);\n }\n }\n this.updateParagraphFormatInternal(property, value, update);\n };\n Editor.prototype.getIndentIncrementValue = function (currentParagraph, incrementFactor) {\n var currentParagraphIndent = currentParagraph.paragraphFormat.leftIndent;\n if (currentParagraphIndent < 0) {\n // In MS Word, if the current paragraph left indent is lesser that or equal to 0\n // then performing decrement indent will set left indent to 0. \n if (incrementFactor < 0 || currentParagraphIndent + incrementFactor >= 0) {\n return -currentParagraphIndent;\n }\n else {\n var incrementValue = -this.getIndentIncrementValueInternal(-currentParagraphIndent, -incrementFactor);\n return incrementValue % incrementFactor === 0 ? incrementValue : incrementValue + incrementFactor;\n }\n }\n else {\n return this.getIndentIncrementValueInternal(currentParagraphIndent, incrementFactor);\n }\n };\n Editor.prototype.getIndentIncrementValueInternal = function (position, incrementFactor) {\n var tabValue = Math.abs(incrementFactor);\n if (position === 0 || tabValue === 0) {\n return incrementFactor > 0 ? tabValue : 0;\n }\n else {\n var diff = ((Math.round(position) * 100) % (Math.round(tabValue) * 100)) / 100;\n var cnt = (Math.round(position) - diff) / Math.round(tabValue);\n var fPosition = cnt * tabValue;\n if (incrementFactor > 0) {\n fPosition += tabValue;\n }\n return (fPosition - position) === 0 ? incrementFactor : fPosition - position;\n }\n };\n Editor.prototype.updateParagraphFormatInternal = function (property, value, update) {\n if (isNullOrUndefined(property)) {\n property = 'ParagraphFormat';\n }\n switch (property) {\n case 'afterSpacing':\n this.updateParagraphFormat('afterSpacing', value, false);\n break;\n case 'beforeSpacing':\n this.updateParagraphFormat('beforeSpacing', value, false);\n break;\n case 'rightIndent':\n this.updateParagraphFormat('rightIndent', value, false);\n break;\n case 'leftIndent':\n this.updateParagraphFormat('leftIndent', value, update);\n break;\n case 'firstLineIndent':\n this.updateParagraphFormat('firstLineIndent', value, false);\n break;\n case 'lineSpacing':\n this.updateParagraphFormat('lineSpacing', value, false);\n break;\n case 'lineSpacingType':\n this.updateParagraphFormat('lineSpacingType', value, false);\n break;\n case 'textAlignment':\n this.updateParagraphFormat('textAlignment', value, false);\n break;\n case 'listFormat':\n this.updateParagraphFormat('listFormat', value, false);\n break;\n case 'ParagraphFormat':\n this.updateParagraphFormat(undefined, value, false);\n break;\n case 'styleName':\n this.updateParagraphFormat('styleName', value, false);\n break;\n case 'ClearParagraphFormat':\n // this.initializeHistory('ClearParagraphFormat', selectionRange);\n this.updateParagraphFormat(undefined, value, false);\n break;\n }\n };\n /**\n * Update paragraph format on undo\n * @param {SelectionRange} selectionRange\n * @param {string} property\n * @param {Object} value\n * @param {boolean} update\n * @private\n */\n Editor.prototype.updateParagraphFormat = function (property, value, update) {\n var selection = this.viewer.selection;\n var startPosition = selection.start;\n var endPosition = selection.end;\n if (!selection.isForward) {\n startPosition = selection.end;\n endPosition = selection.start;\n }\n // this.updateInsertPosition(selection, startPosition);\n this.applyParaFormatSelectedContent(startPosition, endPosition, property, value, update);\n // this.startSelectionReLayouting(startPosition.paragraph, selection, startPosition, endPosition);\n };\n Editor.prototype.applyParaFormatSelectedContent = function (start, end, property, value, update) {\n var selection = this.viewer.selection;\n if (start.paragraph.isInsideTable && (!end.paragraph.isInsideTable\n || start.paragraph.associatedCell !== end.paragraph.associatedCell\n || selection.isCellSelected(start.paragraph.associatedCell, start, end))) {\n var cell = void 0;\n start.paragraph.associatedCell.ownerTable.combineWidget(this.viewer);\n if (this.checkInsertPosition(selection)) {\n this.updateHistoryPosition(start, true);\n }\n cell = start.paragraph.associatedCell;\n this.applyParaFormatInCell(cell, start, end, property, value, update);\n var table = cell.ownerTable;\n this.viewer.layout.layoutBodyWidgetCollection(table.index, table.containerWidget, table, false);\n }\n else {\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(value) && !this.selection.isEmpty && property === 'styleName' && this.applyCharacterStyle(start.paragraph, start, end, property, value, update)) {\n return;\n }\n else {\n this.applyParaFormat(start.paragraph, start, end, property, value, update);\n }\n }\n };\n /**\n * Apply Paragraph format\n * @private\n */\n Editor.prototype.applyParaFormatProperty = function (paragraph, property, value, update) {\n var format = paragraph.paragraphFormat;\n if (update && property === 'leftIndent') {\n value = format.leftIndent + value;\n }\n if (property === 'listFormat' && value instanceof WListFormat) {\n var listFormat = value;\n if (!listFormat.hasValue('listLevelNumber')) {\n listFormat.listLevelNumber = format.listFormat.listLevelNumber;\n }\n }\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n value = this.editorHistory.currentBaseHistoryInfo.addModifiedPropertiesForParagraphFormat(format, property, value);\n }\n if (value instanceof WParagraphFormat) {\n if (isNullOrUndefined(property)) {\n if (this.editorHistory && (this.editorHistory.isUndoing || this.editorHistory.isRedoing)) {\n this.copyParagraphFormat(value, format);\n }\n else {\n format.copyFormat(value);\n }\n }\n else if (property === 'listFormat') {\n format.listFormat = value.listFormat;\n // this.handleListFormat(format, value as WParagraphFormat);\n }\n }\n if (isNullOrUndefined(value)) {\n format.clearFormat();\n this.viewer.layout.reLayoutParagraph(format.ownerBase, 0, 0);\n return;\n }\n if (property === 'afterSpacing') {\n format.afterSpacing = value;\n }\n else if (property === 'beforeSpacing') {\n format.beforeSpacing = value;\n }\n else if (property === 'leftIndent') {\n format.leftIndent = value;\n }\n else if (property === 'lineSpacingType') {\n format.lineSpacingType = value;\n }\n else if (property === 'lineSpacing') {\n format.lineSpacing = value;\n }\n else if (property === 'rightIndent') {\n format.rightIndent = value;\n }\n else if (property === 'firstLineIndent') {\n format.firstLineIndent = value;\n }\n else if (property === 'textAlignment') {\n format.textAlignment = value;\n this.viewer.layout.allowLayout = false;\n }\n else if (property === 'styleName') {\n if (typeof (value) === 'string') {\n value = this.viewer.styles.findByName(value);\n }\n format.ApplyStyle(value);\n }\n else if (property === 'listFormat') {\n if (value instanceof WParagraphFormat) {\n this.copyFromListLevelParagraphFormat(format, value);\n value = value.listFormat;\n }\n format.listFormat.copyFormat(value);\n this.viewer.layout.clearListElementBox(format.ownerBase);\n this.onListFormatChange(format.ownerBase, value, format);\n this.layoutItemBlock(format.ownerBase, false);\n return;\n }\n };\n Editor.prototype.copyParagraphFormat = function (sourceFormat, destFormat) {\n destFormat.uniqueParagraphFormat = sourceFormat.uniqueParagraphFormat;\n destFormat.listFormat = sourceFormat.listFormat;\n destFormat.baseStyle = sourceFormat.baseStyle;\n };\n Editor.prototype.onListFormatChange = function (paragraph, listFormat, paraFormat) {\n if (listFormat instanceof WListFormat) {\n var currentFormat = listFormat;\n // currentFormat.setOwnerBase(paraFormat);\n this.updateListParagraphFormat(paragraph, listFormat);\n }\n };\n Editor.prototype.updateListParagraphFormat = function (paragraph, listFormat) {\n var list = this.viewer.getListById(listFormat.listId);\n var listlevel = undefined;\n if (!isNullOrUndefined(list)) {\n listlevel = this.viewer.layout.getListLevel(list, listFormat.listLevelNumber);\n }\n if (paragraph instanceof ParagraphWidget && !isNullOrUndefined(listlevel)\n && !isNullOrUndefined(listlevel.paragraphFormat) && !isNullOrUndefined(paragraph.containerWidget)) {\n this.copyFromListLevelParagraphFormat(paragraph.paragraphFormat, listlevel.paragraphFormat);\n }\n else if (isNullOrUndefined(list)) {\n paragraph.paragraphFormat.leftIndent = 0;\n paragraph.paragraphFormat.firstLineIndent = 0;\n }\n };\n /**\n * Copies list level paragraph format\n * @param {WParagraphFormat} oldFormat\n * @param {WParagraphFormat} newFormat\n * @private\n */\n Editor.prototype.copyFromListLevelParagraphFormat = function (oldFormat, newFormat) {\n if (!isNullOrUndefined(newFormat.leftIndent)) {\n oldFormat.leftIndent = newFormat.leftIndent;\n }\n if (!isNullOrUndefined(newFormat.firstLineIndent)) {\n oldFormat.firstLineIndent = newFormat.firstLineIndent;\n }\n };\n /**\n * @private\n */\n Editor.prototype.applyContinueNumbering = function (selection) {\n this.editorHistory.initializeHistory('ContinueNumbering');\n this.applyContinueNumberingInternal(selection);\n };\n /**\n * @private\n */\n Editor.prototype.applyContinueNumberingInternal = function (selection) {\n var paragraph = selection.start.paragraph;\n var numberingInfo = this.getContinueNumberingInfo(paragraph);\n var paraFormat = this.getParagraphFormat(paragraph, numberingInfo.listLevelNumber, numberingInfo.listPattern);\n this.changeListId(numberingInfo.currentList, paragraph, paraFormat, numberingInfo.listLevelNumber, numberingInfo.listPattern);\n this.reLayout(selection, false);\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n this.editorHistory.updateHistory();\n }\n this.viewer.updateFocus();\n };\n /**\n * @private\n */\n Editor.prototype.getContinueNumberingInfo = function (paragraph) {\n var currentList = undefined;\n var listLevelNumber = 0;\n var listPattern = 'None';\n if (!isNullOrUndefined(paragraph.paragraphFormat)\n && !isNullOrUndefined(paragraph.paragraphFormat.listFormat)) {\n currentList = this.viewer.getListById(paragraph.paragraphFormat.listFormat.listId);\n listLevelNumber = paragraph.paragraphFormat.listFormat.listLevelNumber;\n }\n var viewer = this.viewer;\n if (listLevelNumber !== 0 && !isNullOrUndefined(currentList) &&\n !isNullOrUndefined(viewer.getAbstractListById(currentList.abstractListId))\n && !isNullOrUndefined(viewer.getAbstractListById(currentList.abstractListId).levels[listLevelNumber])) {\n var listLevel = this.viewer.layout.getListLevel(currentList, listLevelNumber);\n if (!isNullOrUndefined(listLevel)) {\n listPattern = listLevel.listLevelPattern;\n }\n }\n return {\n currentList: currentList,\n listLevelNumber: listLevelNumber,\n listPattern: listPattern\n };\n };\n /**\n * @private\n */\n Editor.prototype.revertContinueNumbering = function (selection, format) {\n var paragraph = selection.start.paragraph;\n var numberingInfo = this.getContinueNumberingInfo(paragraph);\n this.changeListId(numberingInfo.currentList, paragraph, format, numberingInfo.listLevelNumber, numberingInfo.listPattern);\n this.reLayout(selection, false);\n if (!isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n this.editorHistory.updateHistory();\n }\n };\n Editor.prototype.changeListId = function (list, block, format, levelNum, listType) {\n if (isNullOrUndefined(block)) {\n return;\n }\n if (block instanceof ParagraphWidget) {\n if (list.listId === block.paragraphFormat.listFormat.listId\n && levelNum === block.paragraphFormat.listFormat.listLevelNumber) {\n var baseHistoryInfo = this.editorHistory.currentBaseHistoryInfo;\n if (!isNullOrUndefined(baseHistoryInfo)) {\n format = baseHistoryInfo.addModifiedPropertiesForContinueNumbering(block.paragraphFormat, format);\n }\n block.paragraphFormat.copyFormat(format);\n this.viewer.layout.reLayoutParagraph(block, 0, 0);\n }\n }\n return this.changeListId(list, block.nextRenderedWidget, format, levelNum, listType);\n };\n Editor.prototype.getParagraphFormat = function (paragraph, levelNumber, listType) {\n if (!isNullOrUndefined(paragraph.previousRenderedWidget)) {\n if (paragraph.previousRenderedWidget instanceof ParagraphWidget) {\n if (!isNullOrUndefined(paragraph.previousRenderedWidget.paragraphFormat.listFormat)\n && paragraph.previousRenderedWidget.paragraphFormat.listFormat.listId !== -1) {\n var listLevel = this.getListLevel(paragraph.previousRenderedWidget);\n if (levelNumber === 0) {\n return paragraph.previousRenderedWidget.paragraphFormat;\n }\n else if (listType === listLevel.listLevelPattern\n || this.checkNumberArabic(listType, listLevel.listLevelPattern)) {\n return paragraph.previousRenderedWidget.paragraphFormat;\n }\n else {\n return this.getParagraphFormat(paragraph.previousRenderedWidget, levelNumber, listType);\n }\n }\n else {\n return this.getParagraphFormat(paragraph.previousRenderedWidget, levelNumber, listType);\n }\n }\n }\n return undefined;\n };\n Editor.prototype.checkNumberArabic = function (listType, levelPattern) {\n if ((listType === 'Number' && levelPattern === 'Arabic')\n || (levelPattern === 'Number' && listType === 'Arabic')) {\n return true;\n }\n return false;\n };\n /**\n * @private\n */\n Editor.prototype.applyRestartNumbering = function (selection) {\n this.editorHistory.initializeHistory('RestartNumbering');\n this.restartListAt(selection);\n };\n /**\n * @private\n */\n Editor.prototype.restartListAt = function (selection) {\n var currentListLevel = this.getListLevel(selection.start.paragraph);\n var list = new WList();\n list.listId = this.viewer.lists[(this.viewer.lists.length - 1)].listId + 1;\n var abstractList = new WAbstractList();\n abstractList.abstractListId = this.viewer.abstractLists[(this.viewer.abstractLists.length - 1)].abstractListId + 1;\n list.abstractListId = abstractList.abstractListId;\n this.viewer.abstractLists.push(abstractList);\n this.createListLevels(abstractList, currentListLevel, list);\n this.viewer.lists.push(list);\n this.restartListAtInternal(selection, list.listId);\n };\n /**\n * @private\n */\n Editor.prototype.restartListAtInternal = function (selection, listId) {\n var numberingInfo = this.getContinueNumberingInfo(selection.start.paragraph);\n this.changeRestartNumbering(numberingInfo.currentList, selection.start.paragraph, listId);\n this.reLayout(selection, false);\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n this.editorHistory.updateHistory();\n }\n this.incrementListNumber = -1;\n this.refListNumber = undefined;\n this.viewer.updateFocus();\n };\n Editor.prototype.changeRestartNumbering = function (list, block, listId) {\n if (isNullOrUndefined(block)) {\n return;\n }\n if (block instanceof ParagraphWidget) {\n if (list.listId === block.paragraphFormat.listFormat.listId) {\n var baseHistoryInfo = this.editorHistory.currentBaseHistoryInfo;\n if (!isNullOrUndefined(baseHistoryInfo)) {\n listId = baseHistoryInfo.addModifiedPropertiesForRestartNumbering(block.paragraphFormat.listFormat, listId);\n }\n block.paragraphFormat.listFormat.listId = listId;\n if (this.refListNumber !== block.paragraphFormat.listFormat.listLevelNumber) {\n this.incrementListNumber += 1;\n this.refListNumber = block.paragraphFormat.listFormat.listLevelNumber;\n }\n block.paragraphFormat.listFormat.listLevelNumber = this.incrementListNumber;\n this.viewer.layout.reLayoutParagraph(block, 0, 0);\n }\n }\n return this.changeRestartNumbering(list, block.nextRenderedWidget, listId);\n };\n Editor.prototype.createListLevels = function (abstractList, currentListLevel, list) {\n var levelPattern = currentListLevel.listLevelPattern;\n var levelPatterns = [];\n var currentAbstractList = currentListLevel.ownerBase;\n for (var i = 0; i < 3; i++) {\n var listLevel = currentAbstractList.levels[i];\n if (!isNullOrUndefined(listLevel)) {\n levelPatterns.push(listLevel.listLevelPattern);\n }\n }\n var indexOfLevelPattern = levelPatterns.indexOf(levelPattern) === -1 ? 0 : levelPatterns.indexOf(levelPattern);\n for (var i = 0; i < currentAbstractList.levels.length; i++) {\n var listLevel = new WListLevel(abstractList);\n if (i === 0) {\n listLevel.listLevelPattern = levelPattern;\n }\n else {\n if (indexOfLevelPattern === 0 || indexOfLevelPattern < levelPatterns.length - 1) {\n indexOfLevelPattern++;\n }\n else {\n indexOfLevelPattern = 0;\n }\n listLevel.listLevelPattern = levelPatterns[indexOfLevelPattern];\n }\n listLevel.numberFormat = '%' + (i + 1) + '.';\n listLevel.startAt = 1;\n listLevel.characterFormat.copyFormat(currentListLevel.characterFormat);\n listLevel.paragraphFormat.copyFormat(currentListLevel.paragraphFormat);\n listLevel.restartLevel = i;\n abstractList.levels.push(listLevel);\n }\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.applyParaFormat = function (paragraph, start, end, property, value, update) {\n this.setOffsetValue(this.selection);\n paragraph = paragraph.combineWidget(this.viewer);\n //Apply Paragraph Format for spitted paragraph\n this.applyParaFormatProperty(paragraph, property, value, update);\n this.layoutItemBlock(paragraph, false);\n this.getOffsetValue(this.selection);\n if (paragraph.equals(end.paragraph)) {\n return;\n }\n this.getNextParagraphForFormatting(paragraph, start, end, property, value, update);\n };\n /* tslint:disable-next-line:max-line-length */\n Editor.prototype.applyCharacterStyle = function (paragraph, start, end, property, value, update) {\n var paragraphWidget = paragraph.getSplitWidgets();\n if ((end.paragraph === paragraph || paragraphWidget.indexOf(end.paragraph) !== -1)) {\n if (((value.type === 'Paragraph') && ((value.link) instanceof WCharacterStyle)) || (value.type === 'Character')) {\n var obj = (value.type === 'Character') ? value : value.link;\n this.updateSelectionCharacterFormatting(property, obj, update);\n return true;\n }\n }\n return false;\n };\n // Cell\n // tslint:disable-next-line:max-line-length\n Editor.prototype.applyParaFormatInCell = function (cell, start, end, property, value, update) {\n var selection = this.viewer.selection;\n if (end.paragraph.isInsideTable) {\n var cellContainer = selection.getContainerCellOf(cell, end.paragraph.associatedCell);\n if (cellContainer.ownerTable.contains(end.paragraph.associatedCell)) {\n var startCell = selection.getSelectedCell(cell, cellContainer);\n var endCell = selection.getSelectedCell(end.paragraph.associatedCell, cellContainer);\n if (selection.containsCell(cellContainer, end.paragraph.associatedCell)) {\n //Selection end is in container cell.\n if (selection.isCellSelected(cellContainer, start, end)) {\n value = this.getParaFormatValueInCell(cellContainer, property, value);\n this.applyParaFormatCellInternal(cellContainer, property, value, update);\n }\n else {\n if (startCell === cellContainer) {\n this.applyParaFormat(start.paragraph, start, end, property, value, update);\n }\n else {\n this.applyParagraphFormatRow(startCell.ownerRow, start, end, property, value, update);\n }\n }\n }\n else {\n //Format other selected cells in current table.\n this.applyParaFormatTableCell(cellContainer.ownerTable, cellContainer, endCell, property, value, update);\n }\n }\n else {\n this.applyParagraphFormatRow(cellContainer.ownerRow, start, end, property, value, update);\n }\n }\n else {\n var wCell = selection.getContainerCell(cell);\n this.applyParagraphFormatRow(wCell.ownerRow, start, end, property, value, update);\n }\n };\n Editor.prototype.applyParaFormatCellInternal = function (cell, property, value, update) {\n for (var i = 0; i < cell.childWidgets.length; i++) {\n var block = cell.childWidgets[i];\n if (block instanceof ParagraphWidget) {\n this.applyParaFormatProperty(block, property, value, update);\n }\n else {\n this.applyParagraphFormatTableInternal(block, property, value, update);\n }\n }\n };\n Editor.prototype.getParaFormatValueInCell = function (cell, property, value) {\n if (typeof value === 'boolean') {\n var firstPara = this.viewer.selection.getFirstParagraph(cell);\n value = !firstPara.paragraphFormat.getPropertyValue(property);\n }\n return value;\n };\n // Row\n // tslint:disable-next-line:max-line-length\n Editor.prototype.applyParagraphFormatRow = function (wRow, start, end, property, value, update) {\n value = this.getParaFormatValueInCell(wRow.childWidgets[0], property, value);\n for (var i = wRow.rowIndex; i < wRow.ownerTable.childWidgets.length; i++) {\n var row = wRow.ownerTable.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n this.applyParaFormatCellInternal(row.childWidgets[j], property, value, update);\n }\n if (end.paragraph.isInsideTable && this.viewer.selection.containsRow(row, end.paragraph.associatedCell)) {\n return;\n }\n }\n this.getNextParagraphForFormatting(wRow.ownerTable, start, end, property, value, update);\n };\n // Table\n // tslint:disable-next-line:max-line-length\n Editor.prototype.applyParaFormatTableCell = function (table, startCell, endCell, property, value, update) {\n var selection = this.viewer.selection;\n var startValue = selection.getCellLeft(startCell.ownerRow, startCell);\n var endValue = startValue + startCell.cellFormat.cellWidth;\n var endCellLeft = selection.getCellLeft(endCell.ownerRow, endCell);\n var endCellRight = endCellLeft + endCell.cellFormat.cellWidth;\n var cellInfo = this.updateSelectedCellsInTable(startValue, endValue, endCellLeft, endCellRight);\n startValue = cellInfo.start;\n endValue = cellInfo.end;\n var count = table.childWidgets.indexOf(endCell.ownerRow);\n var isStarted = false;\n for (var m = table.childWidgets.indexOf(startCell.ownerRow); m <= count; m++) {\n var row = table.childWidgets[m];\n for (var j = 0; j < row.childWidgets.length; j++) {\n var left = selection.getCellLeft(row, row.childWidgets[j]);\n if (Math.round(startValue) <= Math.round(left) && Math.round(left) < Math.round(endValue)) {\n if (!isStarted) {\n value = this.getParaFormatValueInCell(row.childWidgets[j], property, value);\n isStarted = true;\n }\n this.applyParaFormatCellInternal(row.childWidgets[j], property, value, update);\n }\n }\n }\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.applyParaFormatTable = function (table, start, end, property, value, update) {\n table = table.combineWidget(this.viewer);\n var selection = this.viewer.selection;\n for (var m = 0; m < table.childWidgets.length; m++) {\n var tableRow = table.childWidgets[m];\n for (var k = 0; k < tableRow.childWidgets.length; k++) {\n this.applyParaFormatCellInternal(tableRow.childWidgets[k], property, value, update);\n }\n if (end.paragraph.isInsideTable && selection.containsRow(tableRow, end.paragraph.associatedCell)) {\n this.viewer.layout.layoutBodyWidgetCollection(table.index, table.containerWidget, table, false);\n return;\n }\n }\n this.viewer.layout.layoutBodyWidgetCollection(table.index, table.containerWidget, table, false);\n this.getNextParagraphForFormatting(table, start, end, property, value, update);\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.getNextParagraphForFormatting = function (block, start, end, property, value, update) {\n var widgetCollection = block.getSplitWidgets();\n block = widgetCollection[widgetCollection.length - 1];\n block = this.viewer.selection.getNextRenderedBlock(block);\n if (!isNullOrUndefined(block)) {\n if (block instanceof ParagraphWidget) {\n this.applyParaFormat(block, start, end, property, value, update);\n }\n else {\n this.applyParaFormatTable(block, start, end, property, value, update);\n }\n }\n };\n Editor.prototype.applyParagraphFormatTableInternal = function (table, property, value, update) {\n for (var x = 0; x < table.childWidgets.length; x++) {\n var row = table.childWidgets[x];\n for (var y = 0; y < row.childWidgets.length; y++) {\n this.applyParaFormatCellInternal(row.childWidgets[y], property, value, update);\n }\n }\n };\n //Paragraph Format apply implementation Ends\n // Apply Selection Section Format Option Implementation Starts\n /**\n * Apply section format selection changes\n * @param {string} property\n * @param {Object} value\n * @private\n */\n Editor.prototype.onApplySectionFormat = function (property, value) {\n if (!isNullOrUndefined(property)) {\n var action = (property[0].toUpperCase() + property.slice(1));\n this.initHistory(action);\n }\n else {\n this.initHistory('SectionFormat');\n }\n this.updateSectionFormat(property, value);\n };\n /**\n * Update section format\n * @param {string} property\n * @param {Object} value\n * @returns TextPosition\n * @private\n */\n Editor.prototype.updateSectionFormat = function (property, value) {\n var selection = this.viewer.selection;\n selection.owner.isShiftingEnabled = true;\n var startPosition = selection.start;\n var endPosition = selection.end;\n if (!selection.isForward) {\n startPosition = selection.end;\n endPosition = selection.start;\n }\n var startPageIndex;\n var endPageIndex;\n this.viewer.clearContent();\n var startSectionIndex = startPosition.paragraph.containerWidget.index;\n var endSectionIndex = endPosition.paragraph.containerWidget.index;\n for (var i = 0; i < this.viewer.pages.length; i++) {\n if (this.viewer.pages[i].bodyWidgets[0].index === startSectionIndex) {\n startPageIndex = i;\n break;\n }\n }\n for (var i = startPageIndex; i < this.viewer.pages.length; i++) {\n var bodyWidget = this.viewer.pages[i].bodyWidgets[0];\n endPageIndex = i;\n if ((bodyWidget.index === startSectionIndex)) {\n continue;\n }\n else if ((bodyWidget.index >= startSectionIndex) && bodyWidget.index <= endSectionIndex) {\n continue;\n }\n else {\n endPageIndex = i - 1;\n break;\n }\n }\n // let startPageIndex: number = this.viewer.pages.indexOf((selection.start.paragraph.containerWidget as BodyWidget).page);\n // let endPageIndex: number = this.viewer.pages.indexOf((selection.end.paragraph.containerWidget as BodyWidget).page);\n var update = true;\n var index = 0;\n for (var i = startPageIndex; i <= endPageIndex; i++) {\n if (index !== this.viewer.pages[i].bodyWidgets[0].index && !update) {\n update = true;\n }\n this.applyPropertyValueForSection(this.viewer.pages[i].bodyWidgets[0].sectionFormat, property, value, update);\n index = this.viewer.pages[i].bodyWidgets[0].index;\n update = false;\n }\n this.layoutWholeDocument();\n this.fireContentChange();\n };\n //Apply Selection Table Format option implementation starts\n /**\n * Apply table format property changes\n * @param {string} property\n * @param {Object} value\n * @private\n */\n Editor.prototype.onApplyTableFormat = function (property, value) {\n var action = this.getTableFormatAction(property);\n this.viewer.owner.isShiftingEnabled = true;\n var selection = this.viewer.selection;\n var table = selection.start.paragraph.associatedCell.ownerTable;\n table = table.combineWidget(this.viewer);\n if (selection.isEmpty) {\n this.initHistory(action);\n this.applyTablePropertyValue(selection, property, value, table);\n }\n else {\n this.updateSelectionTableFormat(this.selection, action, value);\n }\n table.calculateGrid();\n this.selection.owner.isLayoutEnabled = true;\n this.viewer.layout.reLayoutTable(table);\n this.reLayout(selection, false);\n };\n Editor.prototype.getTableFormatAction = function (property) {\n switch (property) {\n case 'tableAlignment':\n return 'TableAlignment';\n case 'leftIndent':\n return 'TableLeftIndent';\n case 'leftMargin':\n return 'DefaultCellLeftMargin';\n case 'rightMargin':\n return 'DefaultCellRightMargin';\n case 'bottomMargin':\n return 'DefaultCellBottomMargin';\n case 'topMargin':\n return 'DefaultCellTopMargin';\n case 'preferredWidth':\n return 'TablePreferredWidth';\n case 'preferredWidthType':\n return 'TablePreferredWidthType';\n case 'shading':\n return 'Shading';\n default:\n return 'DefaultCellSpacing';\n }\n };\n // Apply Selection Row Format Option Implementation Starts\n /**\n * Apply table row format property changes\n * @param {string} property\n * @param {Object} value\n * @private\n */\n Editor.prototype.onApplyTableRowFormat = function (property, value) {\n var action = this.getRowAction(property);\n this.viewer.owner.isShiftingEnabled = true;\n var selection = this.viewer.selection;\n if (selection.isEmpty) {\n this.initHistory(action);\n var table = selection.start.paragraph.associatedCell.ownerRow.ownerTable;\n this.applyRowPropertyValue(selection, property, value, selection.start.paragraph.associatedCell.ownerRow);\n }\n else {\n this.updateSelectionTableFormat(this.selection, action, value);\n }\n this.reLayout(selection, false);\n };\n Editor.prototype.getRowAction = function (property) {\n switch (property) {\n case 'height':\n return 'RowHeight';\n case 'heightType':\n return 'RowHeightType';\n case 'isHeader':\n return 'RowHeader';\n default:\n return 'AllowBreakAcrossPages';\n }\n };\n /**\n * Apply table cell property changes\n * @param {string} property\n * @param {Object} value\n * @private\n */\n Editor.prototype.onApplyTableCellFormat = function (property, value) {\n var action = this.getTableCellAction(property);\n this.viewer.owner.isShiftingEnabled = true;\n var selection = this.viewer.selection;\n var table = selection.start.paragraph.associatedCell.ownerTable;\n table = table.combineWidget(this.viewer);\n if (selection.isEmpty) {\n this.initHistory(action);\n this.applyCellPropertyValue(selection, property, value, selection.start.paragraph.associatedCell.cellFormat);\n table.calculateGrid();\n this.selection.owner.isLayoutEnabled = true;\n this.viewer.layout.reLayoutTable(table);\n }\n else {\n this.updateSelectionTableFormat(this.selection, action, value);\n }\n this.reLayout(selection, false);\n };\n Editor.prototype.getTableCellAction = function (property) {\n switch (property) {\n case 'verticalAlignment':\n return 'CellContentVerticalAlignment';\n case 'leftMargin':\n return 'CellLeftMargin';\n case 'rightMargin':\n return 'CellRightMargin';\n case 'bottomMargin':\n return 'CellBottomMargin';\n case 'topMargin':\n return 'CellTopMargin';\n case 'preferredWidth':\n return 'CellPreferredWidth';\n case 'shading':\n return 'Shading';\n default:\n return 'CellPreferredWidthType';\n }\n };\n Editor.prototype.applyPropertyValueForSection = function (sectionFormat, property, value, update) {\n var selection = this.viewer.selection;\n if (update && this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n value = this.editorHistory.currentBaseHistoryInfo.addModifiedPropertiesForSection(sectionFormat, property, value);\n }\n if (isNullOrUndefined(value)) {\n return;\n }\n if (value instanceof WSectionFormat) {\n if (isNullOrUndefined(property)) {\n sectionFormat.copyFormat(value, this.editorHistory);\n }\n return;\n }\n if (property === 'pageHeight') {\n sectionFormat.pageHeight = value;\n }\n else if (property === 'pageWidth') {\n sectionFormat.pageWidth = value;\n }\n else if (property === 'leftMargin') {\n sectionFormat.leftMargin = value;\n }\n else if (property === 'rightMargin') {\n sectionFormat.rightMargin = value;\n }\n else if (property === 'topMargin') {\n sectionFormat.topMargin = value;\n }\n else if (property === 'bottomMargin') {\n sectionFormat.bottomMargin = value;\n }\n else if (property === 'differentFirstPage') {\n sectionFormat.differentFirstPage = value;\n }\n else if (property === 'differentOddAndEvenPages') {\n sectionFormat.differentOddAndEvenPages = value;\n }\n else if (property === 'headerDistance') {\n sectionFormat.headerDistance = value;\n }\n else if (property === 'footerDistance') {\n sectionFormat.footerDistance = value;\n }\n };\n /**\n * @private\n */\n Editor.prototype.layoutWholeDocument = function () {\n var startPosition = this.viewer.selection.start;\n var endPosition = this.viewer.selection.end;\n if (startPosition.isExistAfter(endPosition)) {\n startPosition = this.viewer.selection.end;\n endPosition = this.viewer.selection.start;\n }\n var startInfo = this.getParagraphInfo(startPosition);\n var endInfo = this.getParagraphInfo(startPosition);\n var startIndex = this.getHierarchicalIndex(startInfo.paragraph, startInfo.offset.toString());\n var endIndex = this.getHierarchicalIndex(endInfo.paragraph, endInfo.offset.toString());\n this.viewer.renderedLists.clear();\n // this.viewer.owner.isLayoutEnabled = true;\n var sections = this.combineSection();\n this.viewer.clearContent();\n this.viewer.layout.layoutItems(sections);\n this.viewer.owner.isShiftingEnabled = false;\n this.setPositionForCurrentIndex(startPosition, startIndex);\n this.setPositionForCurrentIndex(endPosition, endIndex);\n this.viewer.selection.selectPosition(startPosition, endPosition);\n this.reLayout(this.viewer.selection);\n };\n Editor.prototype.combineSection = function () {\n var sections = [];\n var nextSection = this.viewer.pages[0].bodyWidgets[0];\n do {\n nextSection = this.combineSectionChild(nextSection, sections);\n } while (nextSection);\n return sections;\n };\n Editor.prototype.combineSectionChild = function (bodyWidget, sections) {\n var previousBodyWidget = bodyWidget;\n var temp = new BodyWidget();\n temp.sectionFormat = bodyWidget.sectionFormat;\n temp.index = previousBodyWidget.index;\n do {\n previousBodyWidget = bodyWidget;\n if (bodyWidget.lastChild) {\n bodyWidget.lastChild.combineWidget(this.viewer);\n }\n bodyWidget = bodyWidget.nextRenderedWidget;\n for (var j = 0; j < previousBodyWidget.childWidgets.length; j++) {\n var block = previousBodyWidget.childWidgets[j];\n if (block instanceof TableWidget) {\n this.viewer.layout.clearTableWidget(block, true, true);\n }\n else {\n block.x = 0;\n block.y = 0;\n block.width = 0;\n block.height = 0;\n }\n temp.childWidgets.push(block);\n previousBodyWidget.childWidgets.splice(j, 1);\n j--;\n block.containerWidget = temp;\n }\n this.viewer.pages.splice(previousBodyWidget.page.index, 1);\n } while (bodyWidget && previousBodyWidget.equals(bodyWidget));\n sections.push(temp);\n return bodyWidget;\n };\n Editor.prototype.updateSelectionTableFormat = function (selection, action, value) {\n switch (action) {\n case 'TableAlignment':\n this.editorHistory.initializeHistory('TableAlignment');\n this.updateTableFormat(selection, 'tableAlignment', value);\n break;\n case 'TableLeftIndent':\n this.editorHistory.initializeHistory('TableLeftIndent');\n this.updateTableFormat(selection, 'leftIndent', value);\n break;\n case 'DefaultCellSpacing':\n this.editorHistory.initializeHistory('DefaultCellSpacing');\n this.updateTableFormat(selection, 'cellSpacing', value);\n break;\n case 'DefaultCellLeftMargin':\n this.editorHistory.initializeHistory('DefaultCellLeftMargin');\n this.updateTableFormat(selection, 'leftMargin', value);\n break;\n case 'DefaultCellRightMargin':\n this.editorHistory.initializeHistory('DefaultCellRightMargin');\n this.updateTableFormat(selection, 'rightMargin', value);\n break;\n case 'DefaultCellTopMargin':\n this.editorHistory.initializeHistory('DefaultCellTopMargin');\n this.updateTableFormat(selection, 'topMargin', value);\n break;\n case 'TablePreferredWidth':\n this.editorHistory.initializeHistory('TablePreferredWidth');\n this.updateTableFormat(selection, 'preferredWidth', value);\n break;\n case 'TablePreferredWidthType':\n this.editorHistory.initializeHistory('TablePreferredWidthType');\n this.updateTableFormat(selection, 'preferredWidthType', value);\n break;\n case 'DefaultCellBottomMargin':\n this.editorHistory.initializeHistory('DefaultCellBottomMargin');\n this.updateTableFormat(selection, 'bottomMargin', value);\n break;\n case 'CellContentVerticalAlignment':\n this.editorHistory.initializeHistory('CellContentVerticalAlignment');\n this.updateCellFormat(selection, 'verticalAlignment', value);\n break;\n case 'CellLeftMargin':\n this.editorHistory.initializeHistory('CellLeftMargin');\n this.updateCellFormat(selection, 'leftMargin', value);\n break;\n case 'CellRightMargin':\n this.editorHistory.initializeHistory('CellRightMargin');\n this.updateCellFormat(selection, 'rightMargin', value);\n break;\n case 'CellTopMargin':\n this.editorHistory.initializeHistory('CellTopMargin');\n this.updateCellFormat(selection, 'topMargin', value);\n break;\n case 'CellBottomMargin':\n this.editorHistory.initializeHistory('CellBottomMargin');\n this.updateCellFormat(selection, 'bottomMargin', value);\n break;\n case 'CellPreferredWidth':\n this.editorHistory.initializeHistory('CellPreferredWidth');\n this.updateCellFormat(selection, 'preferredWidth', value);\n break;\n case 'CellPreferredWidthType':\n this.editorHistory.initializeHistory('CellPreferredWidthType');\n this.updateCellFormat(selection, 'preferredWidthType', value);\n break;\n case 'Shading':\n this.editorHistory.initializeHistory('Shading');\n this.updateCellFormat(selection, 'shading', value);\n break;\n case 'RowHeight':\n this.editorHistory.initializeHistory('RowHeight');\n this.updateRowFormat(selection, 'height', value);\n break;\n case 'RowHeightType':\n this.editorHistory.initializeHistory('RowHeightType');\n this.updateRowFormat(selection, 'heightType', value);\n break;\n case 'RowHeader':\n this.editorHistory.initializeHistory('RowHeader');\n this.updateRowFormat(selection, 'isHeader', value);\n break;\n case 'AllowBreakAcrossPages':\n this.editorHistory.initializeHistory('AllowBreakAcrossPages');\n this.updateRowFormat(selection, 'allowBreakAcrossPages', value);\n break;\n }\n };\n // Update Table Properties\n /**\n * Update Table Format on undo\n * @param {Selection} selection\n * @param {SelectionRange} selectionRange\n * @param {string} property\n * @param {object} value\n * @private\n */\n Editor.prototype.updateTableFormat = function (selection, property, value) {\n var tableStartPosition = selection.start;\n var tableEndPosition = selection.end;\n if (!selection.isForward) {\n tableStartPosition = selection.end;\n tableEndPosition = selection.start;\n }\n this.initHistoryPosition(selection, tableStartPosition);\n // tslint:disable-next-line:max-line-length\n this.applyTablePropertyValue(selection, property, value, tableStartPosition.paragraph.associatedCell.ownerTable);\n };\n /**\n * update cell format on undo\n * @param {Selection} selection\n * @param {SelectionRange} selectionRange\n * @param {string} property\n * @param {Object} value\n * @private\n */\n Editor.prototype.updateCellFormat = function (selection, property, value) {\n selection.owner.isShiftingEnabled = true;\n var newStartPosition = selection.start;\n var newEndPosition = selection.end;\n if (!selection.isForward) {\n newStartPosition = selection.end;\n newEndPosition = selection.start;\n }\n this.initHistoryPosition(selection, newStartPosition);\n this.updateFormatForCell(selection, property, value);\n };\n /**\n * update row format on undo\n * @param {Selection} selection\n * @param {SelectionRange} selectionRange\n * @param {string} property\n * @param {Object} value\n * @private\n */\n Editor.prototype.updateRowFormat = function (selection, property, value) {\n var rowStartPosition = selection.start;\n var rowEndPosition = selection.end;\n if (!selection.isForward) {\n rowStartPosition = selection.end;\n rowEndPosition = selection.start;\n }\n this.initHistoryPosition(selection, rowStartPosition);\n // tslint:disable-next-line:max-line-length\n this.applyRowFormat(rowStartPosition.paragraph.associatedCell.ownerRow, rowStartPosition, rowEndPosition, property, value);\n };\n Editor.prototype.initHistoryPosition = function (selection, position) {\n if (this.viewer.owner.editorHistoryModule && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n if (!isNullOrUndefined(position)) {\n if (isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo.insertPosition)) {\n this.editorHistory.currentBaseHistoryInfo.insertPosition = position.getHierarchicalIndexInternal();\n }\n }\n else if (isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo.insertPosition)) {\n this.editorHistory.currentBaseHistoryInfo.insertPosition = selection.start.getHierarchicalIndexInternal();\n }\n }\n };\n Editor.prototype.startSelectionReLayouting = function (paragraph, selection, start, end) {\n selection.owner.isLayoutEnabled = true;\n if (start.paragraph.isInsideTable) {\n var table = start.paragraph.associatedCell.ownerTable;\n while (table.isInsideTable) {\n table = table.associatedCell.ownerTable;\n }\n this.reLayoutSelectionOfTable(table, selection, start, end);\n }\n else {\n this.reLayoutSelection(paragraph, selection, start, end);\n }\n };\n Editor.prototype.reLayoutSelectionOfTable = function (table, selection, start, end) {\n var isEnded = false;\n this.viewer.layout.layoutBodyWidgetCollection(table.index, table.containerWidget, table, false);\n // If the selection ends in the current table, need to stop relayouting.\n if (!isNullOrUndefined(end.paragraph.associatedCell) && table.contains(end.paragraph.associatedCell)) {\n return true;\n }\n var block = selection.getNextRenderedBlock(table);\n // Relayout the next block.\n if (!isNullOrUndefined(block)) {\n isEnded = this.reLayoutSelectionOfBlock(block, selection, start, end);\n }\n return isEnded;\n };\n Editor.prototype.reLayoutSelection = function (paragraph, selection, start, end) {\n if (start.paragraph === paragraph) {\n var startOffset = start.offset;\n var length_2 = selection.getParagraphLength(paragraph);\n var indexInInline = 0;\n var index = 0;\n var inlineObj = paragraph.getInline(start.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (!isNullOrUndefined(inline)) {\n if (indexInInline === inline.length && !isNullOrUndefined(inline.nextNode)) {\n inline = inline.nextNode;\n }\n index = inline.line.children.indexOf(inline);\n }\n var lineIndex = 0;\n if (start.currentWidget.paragraph === paragraph) {\n lineIndex = paragraph.childWidgets.indexOf(start.currentWidget);\n index = start.currentWidget.children.indexOf(inline);\n }\n // If selection start inline is at new inline, need to relayout from the previous inline.\n if (inline instanceof TextElementBox && !inline.line && index > 0) {\n this.viewer.layout.reLayoutParagraph(paragraph, lineIndex, index - 1);\n }\n else {\n this.viewer.layout.reLayoutParagraph(paragraph, lineIndex, index);\n }\n }\n else {\n this.viewer.layout.reLayoutParagraph(paragraph, 0, 0);\n }\n // If the selection ends at the current paragraph, need to stop relayouting.\n if (end.paragraph === paragraph) {\n return true;\n }\n // _Relayout the next block.\n var block = selection.getNextRenderedBlock(paragraph);\n if (!isNullOrUndefined(block)) {\n return this.reLayoutSelectionOfBlock(block, selection, start, end);\n }\n return false;\n };\n //Relayouting Start \n Editor.prototype.reLayoutSelectionOfBlock = function (block, selection, start, end) {\n if (block instanceof ParagraphWidget) {\n return this.reLayoutSelection(block, selection, start, end);\n }\n else {\n return undefined;\n // return this.reLayoutSelectionOfTable(block as TableWidget, selection, start, end);\n }\n };\n /**\n * @private\n */\n Editor.prototype.layoutItemBlock = function (block, shiftNextWidget) {\n var section = undefined;\n if (block.containerWidget instanceof BlockContainer) {\n section = block.containerWidget;\n var index = section.childWidgets.indexOf(block);\n if (!isNullOrUndefined(this.viewer.owner)\n && this.viewer.owner.isLayoutEnabled) {\n // tslint:disable-next-line:max-line-length\n this.viewer.layout.layoutBodyWidgetCollection(block.index, section, block, false);\n }\n }\n else if (block.containerWidget instanceof TableCellWidget) {\n var cell = block.containerWidget;\n cell = this.viewer.selection.getContainerCell(cell);\n if (!isNullOrUndefined(this.viewer.owner)\n && this.viewer.owner.isLayoutEnabled) {\n this.viewer.layout.reLayoutTable(block);\n }\n }\n };\n /**\n * @private\n */\n Editor.prototype.removeSelectedContents = function (selection) {\n return this.removeSelectedContentInternal(selection, selection.start, selection.end);\n };\n Editor.prototype.removeSelectedContentInternal = function (selection, startPosition, endPosition) {\n var startPos = startPosition;\n var endPos = endPosition;\n if (!startPosition.isExistBefore(endPosition)) {\n startPos = endPosition;\n endPos = startPosition;\n }\n // tslint:disable-next-line:max-line-length\n if (startPos.paragraph === endPos.paragraph && startPos.paragraph.childWidgets.indexOf(startPos.currentWidget) === startPos.paragraph.childWidgets.length - 1 &&\n startPos.offset === selection.getParagraphLength(startPos.paragraph) && startPos.offset + 1 === endPos.offset) {\n selection.owner.isShiftingEnabled = true;\n selection.selectContent(startPos, true);\n return true;\n }\n var paragraphInfo = this.getParagraphInfo(startPos);\n selection.editPosition = this.getHierarchicalIndex(paragraphInfo.paragraph, paragraphInfo.offset.toString());\n var isRemoved = this.removeSelectedContent(endPos.paragraph, selection, startPos, endPos);\n var textPosition = new TextPosition(selection.owner);\n this.setPositionForCurrentIndex(textPosition, selection.editPosition);\n selection.selectContent(textPosition, true);\n return isRemoved;\n };\n Editor.prototype.removeSelectedContent = function (paragraph, selection, start, end) {\n //If end is not table end and start is outside the table, then skip removing the contents and move caret to start position.\n if (end.paragraph.isInsideTable\n && end.paragraph !== selection.getLastParagraphInLastCell(end.paragraph.associatedCell.ownerTable)\n && (!start.paragraph.isInsideTable || start.paragraph.associatedCell.ownerTable !== end.paragraph.associatedCell.ownerTable)) {\n return false;\n }\n selection.owner.isShiftingEnabled = true;\n this.deleteSelectedContent(paragraph, selection, start, end, 2);\n return true;\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.deleteSelectedContent = function (paragraph, selection, start, end, editAction) {\n var indexInInline = 0;\n var inlineObj = start.currentWidget.getInline(start.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n // if (!isNullOrUndefined(inline)) {\n // inline = selection.getNextRenderedInline(inline, indexInInline);\n // }\n // if (inline instanceof WFieldBegin && !isNullOrUndefined((inline as WFieldBegin).fieldEnd)) {\n // tslint:disable-next-line:max-line-length\n // let fieldEndOffset: number = ((inline as WFieldBegin).fieldEnd.owner as WParagraph).getOffset((inline as WFieldBegin).fieldEnd, 1);\n // let fieldEndIndex: string = WordDocument.getHierarchicalIndexOf((inline as WFieldBegin).fieldEnd.owner as WParagraph, fieldEndOffset.toString());\n // let selectionEndIndex: string = end.getHierarchicalIndexInternal();\n // if (!TextPosition.isForwardSelection(fieldEndIndex, selectionEndIndex)) {\n // //If selection end is after field begin, moves selection start to field separator.\n // start.moveToInline((inline as WFieldBegin).fieldSeparator, 1);\n // selection.editPosition = start.getHierarchicalIndexInternal();\n // if (!isNullOrUndefined(selection.currentBaseHistoryInfo)) {\n // selection.currentBaseHistoryInfo.insertPosition = selection.editPosition;\n // }\n // }\n // }\n indexInInline = 0;\n inlineObj = end.currentWidget.getInline(end.offset, indexInInline);\n inline = inlineObj.element;\n indexInInline = inlineObj.index;\n // if (!isNullOrUndefined(inline)) {\n // inline = selection.getNextRenderedInline(inline, indexInInline);\n // }\n // if (inline instanceof WFieldEnd && !isNullOrUndefined((inline as WFieldEnd).fieldBegin)) {\n // tslint:disable-next-line:max-line-length\n // let fieldBeginOffset: number = ((inline as WFieldEnd).fieldBegin.owner as WParagraph).getOffset((inline as WFieldEnd).fieldBegin, 0);\n // let fieldBeginIndex: string = WordDocument.getHierarchicalIndexOf((inline as WFieldEnd).fieldBegin.owner as WParagraph, fieldBeginOffset.toString());\n // let selectionStartIndex: string = start.getHierarchicalIndexInternal();\n // if (!TextPosition.isForwardSelection(selectionStartIndex, fieldBeginIndex)) {\n // //If field begin is before selection start, move selection end to inline item before field end.\n // let prevInline: WInline = selection.getPreviousTextInline(inline);\n // if (isNullOrUndefined(prevInline)) {\n // end.moveBackward();\n // } else {\n // end.moveToInline(prevInline, prevInline.length);\n // }\n // }\n // }\n if (end.paragraph !== paragraph) {\n this.deleteSelectedContent(end.paragraph, selection, start, end, editAction);\n return;\n }\n // Selection start in cell.\n if (end.paragraph.isInsideTable && (!start.paragraph.isInsideTable\n || start.paragraph.associatedCell !== end.paragraph.associatedCell\n || selection.isCellSelected(end.paragraph.associatedCell, start, end))) {\n end.paragraph.associatedCell.ownerTable.combineWidget(this.viewer);\n this.deleteTableCell(end.paragraph.associatedCell, selection, start, end, editAction);\n }\n else {\n this.deletePara(paragraph, start, end, editAction);\n }\n };\n /**\n * Merge the selected cells.\n */\n Editor.prototype.mergeCells = function () {\n if (this.owner.isReadOnlyMode || !this.owner.isDocumentLoaded) {\n return;\n }\n if (!isNullOrUndefined(this.viewer) && !this.selection.isEmpty) {\n this.mergeSelectedCellsInTable();\n }\n };\n /**\n * Deletes the entire table at selection.\n */\n Editor.prototype.deleteTable = function () {\n if (this.owner.isReadOnlyMode) {\n return;\n }\n var startPos = this.selection.isForward ? this.selection.start : this.selection.end;\n if (startPos.paragraph.isInsideTable) {\n var table = this.getOwnerTable(this.selection.isForward).combineWidget(this.viewer);\n this.selection.owner.isShiftingEnabled = true;\n if (this.checkIsNotRedoing()) {\n this.initHistory('DeleteTable');\n //Sets the insert position in history info as current table. \n this.updateHistoryPosition(startPos, true);\n }\n var paragraph = this.getParagraphForSelection(table);\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.editorHistory.currentBaseHistoryInfo.removedNodes.push(table.clone());\n }\n this.removeBlock(table);\n this.selection.selectParagraph(paragraph, true);\n if (this.checkIsNotRedoing() || isNullOrUndefined(this.editorHistory)) {\n this.reLayout(this.selection);\n }\n }\n };\n /**\n * Deletes the selected column(s).\n */\n Editor.prototype.deleteColumn = function () {\n if (this.owner.isReadOnlyMode) {\n return;\n }\n var startPos = this.selection.isForward ? this.selection.start : this.selection.end;\n var endPos = this.selection.isForward ? this.selection.end : this.selection.start;\n if (startPos.paragraph.isInsideTable) {\n this.selection.owner.isShiftingEnabled = true;\n if (this.checkIsNotRedoing()) {\n this.initHistory('DeleteColumn');\n }\n var startCell = this.getOwnerCell(this.selection.isForward);\n var endCell = this.getOwnerCell(!this.selection.isForward);\n var table = startCell.ownerTable.combineWidget(this.viewer);\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.cloneTableToHistoryInfo(table);\n }\n var paragraph = undefined;\n if (endCell.nextWidget) {\n var nextCell = endCell.nextWidget;\n paragraph = this.selection.getFirstParagraph(nextCell);\n }\n else if (startCell.previousWidget) {\n var previousCell = startCell.previousWidget;\n paragraph = this.selection.getFirstParagraph(previousCell);\n }\n if (isNullOrUndefined(paragraph)) {\n paragraph = this.getParagraphForSelection(table);\n }\n //retrieve the cell collection based on start and end cell to remove. \n var deleteCells = table.getColumnCellsForSelection(startCell, endCell);\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n if (row.childWidgets.length === 1) {\n if (deleteCells.indexOf(row.childWidgets[0]) >= 0) {\n table.childWidgets.splice(table.childWidgets.indexOf(row), 1);\n row.destroy();\n i--;\n }\n }\n else {\n for (var j = 0; j < row.childWidgets.length; j++) {\n var tableCell = row.childWidgets[j];\n if (deleteCells.indexOf(tableCell) >= 0) {\n row.childWidgets.splice(j, 1);\n tableCell.destroy();\n j--;\n }\n }\n if (row.childWidgets.length === 0) {\n table.childWidgets.splice(table.childWidgets.indexOf(row), 1);\n row.destroy();\n i--;\n }\n }\n }\n if (table.childWidgets.length === 0) {\n // Before disposing table reset the paragrph.\n paragraph = this.getParagraphForSelection(table);\n this.removeBlock(table);\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.editorHistory.currentBaseHistoryInfo.action = 'DeleteTable';\n }\n table.destroy();\n }\n else {\n table.isGridUpdated = false;\n table.buildTableColumns();\n table.isGridUpdated = true;\n this.viewer.layout.reLayoutTable(table);\n }\n this.selection.selectParagraph(paragraph, true);\n if (isNullOrUndefined(this.editorHistory) || this.checkIsNotRedoing()) {\n this.reLayout(this.selection, true);\n }\n }\n };\n /**\n * Deletes the selected row(s).\n */\n Editor.prototype.deleteRow = function () {\n if (this.owner.isReadOnlyMode) {\n return;\n }\n var startPos = !this.selection.isForward ? this.selection.end : this.selection.start;\n var endPos = !this.selection.isForward ? this.selection.start : this.selection.end;\n if (startPos.paragraph.isInsideTable) {\n var startCell = this.getOwnerCell(this.selection.isForward);\n var endCell = this.getOwnerCell(!this.selection.isForward);\n if (this.checkIsNotRedoing()) {\n this.initHistory('DeleteRow');\n }\n this.selection.owner.isShiftingEnabled = true;\n var table = startCell.ownerTable.combineWidget(this.viewer);\n var row = this.getOwnerRow(true);\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.cloneTableToHistoryInfo(table);\n }\n var paragraph = undefined;\n if (row.nextWidget) {\n var nextCell = row.nextWidget.childWidgets[0];\n paragraph = this.selection.getFirstParagraph(nextCell);\n }\n if (isNullOrUndefined(paragraph)) {\n paragraph = this.getParagraphForSelection(table);\n }\n if (!this.selection.isEmpty) {\n //tslint:disable-next-line:max-line-length\n var containerCell = this.selection.getContainerCellOf(startCell, endCell);\n if (containerCell.ownerTable.contains(endCell)) {\n startCell = this.selection.getSelectedCell(startCell, containerCell);\n endCell = this.selection.getSelectedCell(endCell, containerCell);\n if (this.selection.containsCell(containerCell, endCell)) {\n row = startCell.ownerRow;\n this.removeRow(row);\n }\n else {\n row = startCell.ownerRow;\n var endRow = endCell.ownerRow;\n //Update the selection paragraph.\n paragraph = undefined;\n if (endRow.nextWidget) {\n var nextCell = endRow.nextWidget.childWidgets[0];\n paragraph = this.selection.getFirstParagraph(nextCell);\n }\n if (isNullOrUndefined(paragraph)) {\n paragraph = this.getParagraphForSelection(table);\n }\n for (var i = 0; i < table.childWidgets.length; i++) {\n var tableRow = table.childWidgets[i];\n if (tableRow.rowIndex >= row.rowIndex && tableRow.rowIndex <= endRow.rowIndex) {\n table.childWidgets.splice(i, 1);\n tableRow.destroy();\n i--;\n }\n }\n if (table.childWidgets.length === 0) {\n this.removeBlock(table);\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.editorHistory.currentBaseHistoryInfo.action = 'DeleteTable';\n }\n table.destroy();\n }\n else {\n this.updateTable(table);\n }\n }\n }\n }\n else {\n this.removeRow(row);\n }\n this.selection.selectParagraph(paragraph, true);\n if (isNullOrUndefined(this.editorHistory) || this.checkIsNotRedoing()) {\n this.reLayout(this.selection, true);\n }\n }\n };\n Editor.prototype.removeRow = function (row) {\n var table = row.ownerTable;\n if (table.childWidgets.length === 1) {\n this.removeBlock(table);\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.editorHistory.currentBaseHistoryInfo.action = 'Delete';\n }\n table.destroy();\n }\n else {\n table.childWidgets.splice(table.childWidgets.indexOf(row), 1);\n row.destroy();\n this.updateTable(table);\n }\n };\n Editor.prototype.updateTable = function (table) {\n table.updateRowIndex(0);\n table.isGridUpdated = false;\n table.buildTableColumns();\n table.isGridUpdated = true;\n this.viewer.layout.reLayoutTable(table);\n };\n Editor.prototype.getParagraphForSelection = function (table) {\n var paragraph = undefined;\n var nextWidget = table.nextWidget ? table.nextWidget : table.nextRenderedWidget;\n var previousWidget = table.previousWidget ? table.previousWidget : table.previousRenderedWidget;\n if (nextWidget) {\n paragraph = nextWidget instanceof ParagraphWidget ? nextWidget\n : this.selection.getFirstParagraphInFirstCell(nextWidget);\n }\n else if (previousWidget) {\n paragraph = previousWidget instanceof ParagraphWidget ? previousWidget\n : this.selection.getLastParagraphInLastCell(previousWidget);\n }\n return paragraph;\n };\n Editor.prototype.deletePara = function (paragraph, start, end, editAction) {\n paragraph = paragraph.combineWidget(this.viewer);\n var selection = this.viewer.selection;\n var paragraphStart = selection.getStartOffset(paragraph);\n var endParagraphStartOffset = selection.getStartOffset(end.paragraph);\n var startOffset = paragraphStart;\n var endOffset = 0;\n var isCombineNextParagraph = false;\n var lastLinelength = this.selection.getLineLength(paragraph.lastChild);\n var currentParagraph = paragraph;\n var section = paragraph.bodyWidget instanceof BodyWidget ? paragraph.containerWidget : undefined;\n var startLine = undefined;\n var endLineWidget = undefined;\n if (paragraph === start.paragraph) {\n startOffset = start.offset;\n startLine = start.currentWidget;\n if (end.paragraph.isInsideTable) {\n isCombineNextParagraph = this.isEndInAdjacentTable(paragraph, end.paragraph);\n }\n }\n else {\n startLine = paragraph.firstChild;\n }\n if (paragraph !== start.paragraph && selection.isSkipLayouting) {\n selection.isSkipLayouting = false;\n }\n if (paragraph === end.paragraph) {\n endLineWidget = end.currentWidget;\n endOffset = end.offset;\n }\n else {\n endLineWidget = paragraph.lastChild;\n endOffset = this.viewer.selection.getLineLength(paragraph.lastChild);\n }\n var block = paragraph.previousRenderedWidget;\n if (startOffset > paragraphStart && start.currentWidget === paragraph.lastChild &&\n startOffset === lastLinelength && (paragraph === end.paragraph && end.offset === startOffset + 1 ||\n paragraph.nextRenderedWidget === end.paragraph && end.offset === endParagraphStartOffset)) {\n isCombineNextParagraph = true;\n }\n if (end.paragraph === paragraph && end.currentWidget !== paragraph.lastChild ||\n (end.currentWidget === paragraph.lastChild && end.offset <= selection.getLineLength(paragraph.lastChild))) {\n var isStartParagraph = start.paragraph === paragraph;\n if (end.currentWidget.isFirstLine() && end.offset > paragraphStart || !end.currentWidget.isFirstLine()) {\n //If selection end with this paragraph and selection doesnot include paragraph mark. \n this.removeInlines(paragraph, startLine, startOffset, endLineWidget, endOffset, editAction);\n //Removes the splitted paragraph.\n }\n if (!isNullOrUndefined(block) && !isStartParagraph) {\n var nextSection = block.bodyWidget instanceof BodyWidget ? block.bodyWidget : undefined;\n // if (section !== nextSection) {\n // this.deleteSection(selection, section, nextSection, editAction);\n // }\n this.deleteBlock(block, selection, start, end, editAction);\n }\n }\n else if (start.paragraph === paragraph && (start.currentWidget !== paragraph.firstChild ||\n (start.currentWidget === paragraph.firstChild && startOffset > paragraphStart))) {\n // If selection start is after paragraph start\n //And selection does not end with this paragraph Or selection include paragraph mark.\n if (editAction === 4) {\n return;\n }\n else {\n currentParagraph = this.splitParagraph(paragraph, paragraph.firstChild, 0, startLine, startOffset, true);\n this.insertParagraphPaste(paragraph, currentParagraph, start, end, isCombineNextParagraph, editAction);\n this.addRemovedNodes(paragraph);\n return;\n }\n }\n else {\n var newParagraph = undefined;\n var previousBlock = paragraph.previousWidget;\n var prevParagraph = (previousBlock instanceof ParagraphWidget) ? previousBlock : undefined;\n var nextWidget = paragraph.nextRenderedWidget;\n if (editAction < 4) {\n //Checks whether this is last paragraph of owner text body and previousBlock is not paragraph.\n newParagraph = this.checkAndInsertBlock(paragraph, start, end, editAction, prevParagraph);\n this.removeBlock(paragraph);\n if (this.viewer.blockToShift === paragraph) {\n this.viewer.blockToShift = undefined;\n }\n this.addRemovedNodes(paragraph);\n if (!isNullOrUndefined(newParagraph)) {\n selection.editPosition = this.getHierarchicalIndex(newParagraph, '0');\n var offset = selection.getParagraphLength(newParagraph) + 1;\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n //tslint:disable-next-line:max-line-length\n this.editorHistory.currentBaseHistoryInfo.endPosition = this.getHierarchicalIndex(newParagraph, offset.toString());\n }\n }\n else if (paragraph === start.paragraph && isNullOrUndefined(nextWidget) && !isNullOrUndefined(prevParagraph)) {\n var offset = this.selection.getParagraphLength(prevParagraph);\n // if (isNullOrUndefined(block)) {\n selection.editPosition = this.getHierarchicalIndex(prevParagraph, offset.toString());\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n this.updateHistoryPosition(selection.editPosition, true);\n this.editorHistory.currentBaseHistoryInfo.endPosition = selection.editPosition;\n }\n // } else {\n // let offset: number = selection.getParagraphLength(paragraph) + 1;\n // if (block instanceof ParagraphWidget) {\n // prevParagraph = block as ParagraphWidget;\n // }\n // // if (block instanceof WTable) {\n // // prevParagraph = (block as WTable).getFirstParagraphInFirstCell();\n // // }\n // selection.editPosition = prevLineWidget.getHierarchicalIndex('0');\n // }\n }\n }\n if (start.paragraph !== paragraph && !isNullOrUndefined(block)) {\n var nextSection = block.bodyWidget instanceof BodyWidget ? block.bodyWidget : undefined;\n // if (section !== nextSection) {\n // this.deleteSection(selection, section, nextSection, editAction);\n // }\n this.deleteBlock(block, selection, start, end, editAction);\n }\n }\n this.insertParagraphPaste(paragraph, currentParagraph, start, end, isCombineNextParagraph, editAction);\n };\n //tslint:disable:max-line-length\n /**\n * @private\n */\n Editor.prototype.checkAndInsertBlock = function (block, start, end, editAction, previousParagraph) {\n if (block instanceof ParagraphWidget && block === start.paragraph || block instanceof TableWidget) {\n var newParagraph = void 0; //Adds an empty paragraph, to ensure minimal content.\n if (isNullOrUndefined(block.nextWidget) && (isNullOrUndefined(previousParagraph) || previousParagraph.nextRenderedWidget instanceof TableWidget)) {\n newParagraph = new ParagraphWidget();\n if (editAction === 1 && block instanceof ParagraphWidget) {\n newParagraph.characterFormat.copyFormat(block.characterFormat);\n newParagraph.paragraphFormat.copyFormat(block.paragraphFormat);\n }\n newParagraph.index = block.index + 1;\n newParagraph.containerWidget = block.containerWidget;\n this.viewer.layout.layoutBodyWidgetCollection(newParagraph.index, newParagraph.bodyWidget, newParagraph, false);\n if (block.containerWidget instanceof Widget) {\n block.containerWidget.childWidgets.push(newParagraph);\n }\n }\n return newParagraph;\n }\n return undefined;\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.splitParagraph = function (paragraphAdv, startLine, startOffset, endLine, endOffset, removeBlock) {\n var paragraph = new ParagraphWidget();\n paragraph.paragraphFormat = new WParagraphFormat(paragraph);\n paragraph.characterFormat = new WCharacterFormat(paragraph);\n paragraph.paragraphFormat.copyFormat(paragraphAdv.paragraphFormat);\n paragraph.characterFormat.copyFormat(paragraphAdv.characterFormat);\n var lineWidget = new LineWidget(paragraph);\n paragraph.childWidgets.push(lineWidget);\n var blockIndex = paragraphAdv.index;\n var insertIndex = paragraphAdv.indexInOwner;\n this.moveInlines(paragraphAdv, paragraph, 0, startOffset, startLine, endOffset, endLine);\n //Inserts new paragraph in the current text position.\n paragraphAdv.containerWidget.childWidgets.splice(insertIndex, 0, paragraph);\n paragraph.index = blockIndex;\n paragraph.containerWidget = paragraphAdv.containerWidget;\n this.updateNextBlocksIndex(paragraph, true);\n if (removeBlock) {\n this.removeBlock(paragraphAdv);\n }\n // tslint:disable-next-line:max-line-length\n this.viewer.layout.layoutBodyWidgetCollection(blockIndex, paragraph.containerWidget, paragraph, false);\n return paragraph;\n };\n /**\n * @private\n */\n Editor.prototype.removeBlock = function (block) {\n var index;\n var blockCollection;\n var containerWidget;\n this.removeField(block);\n if (block.isInsideTable) {\n containerWidget = block.associatedCell;\n index = block.associatedCell.childWidgets.indexOf(block);\n blockCollection = block.associatedCell.childWidgets;\n this.updateNextBlocksIndex(block, false);\n block.associatedCell.childWidgets.splice(index, 1);\n block.containerWidget = undefined;\n this.viewer.layout.layoutBodyWidgetCollection(block.index, containerWidget, block, false);\n }\n else {\n containerWidget = block.containerWidget;\n index = containerWidget.childWidgets.indexOf(block);\n blockCollection = containerWidget.childWidgets;\n this.updateNextBlocksIndex(block, false);\n containerWidget.childWidgets.splice(index, 1);\n block.containerWidget = undefined;\n containerWidget.height -= block.height;\n this.viewer.layout.layoutBodyWidgetCollection(block.index, containerWidget, block, false);\n }\n };\n Editor.prototype.removeField = function (block) {\n for (var i = 0; i < this.viewer.fields.length; i++) {\n var field = this.viewer.fields[i];\n if (field.line.paragraph === block) {\n this.viewer.fields.splice(i, 1);\n i--;\n }\n }\n };\n Editor.prototype.addRemovedNodes = function (node) {\n if (node instanceof FieldElementBox && node.fieldType === 0) {\n if (this.viewer.fields.indexOf(node) !== -1) {\n this.viewer.fields.splice(this.viewer.fields.indexOf(node), 1);\n }\n }\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n this.editorHistory.currentBaseHistoryInfo.removedNodes.push(node);\n }\n else if (this.editHyperlinkInternal) {\n this.nodes.push(node);\n }\n };\n Editor.prototype.deleteBlock = function (block, selection, start, end, editAction) {\n if (block instanceof ParagraphWidget) {\n this.deletePara(block, start, end, editAction);\n }\n else {\n this.deleteTableBlock(block, selection, start, end, editAction);\n }\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.deleteTableCell = function (cellAdv, selection, start, end, editAction) {\n var deletePreviousBlock = !(start.paragraph.isInsideTable && cellAdv.ownerTable.contains(start.paragraph.associatedCell));\n var previousBlock = cellAdv.ownerTable.previousRenderedWidget;\n if (start.paragraph.isInsideTable) {\n var containerCell = selection.getContainerCellOf(cellAdv, start.paragraph.associatedCell);\n if (containerCell.ownerTable.contains(start.paragraph.associatedCell)) {\n var startCell = selection.getSelectedCell(cellAdv, containerCell);\n var endCell = selection.getSelectedCell(start.paragraph.associatedCell, containerCell);\n if (selection.containsCell(containerCell, start.paragraph.associatedCell)) {\n //Selection end is in container cell.\n if (selection.isCellSelected(containerCell, start, end)) {\n //Container cell is completely selected.\n this.updateEditPosition(containerCell, selection);\n if (editAction === 1) {\n //Specifically handled for backspace. Delete selected cell in current table.\n this.deleteCellsInTable(cellAdv.ownerRow.ownerTable, selection, start, end, editAction);\n }\n else {\n //Delete contents within table cell or Copy contents within table cell to clipboard.\n var isCellCleared = this.deleteCell(containerCell, selection, editAction, true);\n if (!isCellCleared && editAction !== 2 && this.editorHistory) {\n this.editorHistory.currentBaseHistoryInfo = undefined;\n }\n }\n }\n else {\n if (startCell === containerCell) {\n this.deletePara(end.paragraph, start, end, editAction);\n }\n else {\n this.deleteContainer(startCell, selection, start, end, editAction);\n }\n }\n }\n else {\n if (editAction === 2) {\n //Delete contents within table cell.\n this.deleteCell(cellAdv, selection, 2, false);\n }\n else {\n //Delete other selected cells in current table.\n this.deleteCellsInTable(containerCell.ownerTable, selection, start, end, editAction);\n }\n }\n }\n else {\n //Selection end is different table.\n this.deleteContainer(containerCell, selection, start, end, editAction);\n }\n }\n else {\n //Selection end is outside table.\n var cell = selection.getContainerCell(cellAdv);\n this.deleteContainer(cell, selection, start, end, editAction);\n }\n if (deletePreviousBlock) {\n var sectionAdv = previousBlock.bodyWidget instanceof BodyWidget ? previousBlock.bodyWidget : undefined;\n // this.deleteContent(cellAdv.ownerTable, selection, editAction);\n if (!isNullOrUndefined(previousBlock)) {\n // let nextSection: WSection = blockAdv.section instanceof WSection ? blockAdv.section as WSection : undefined;\n // if (sectionAdv !== nextSection) {\n // this.deleteSection(selection, sectionAdv, nextSection, editAction);\n // }\n //Goto the next block.\n this.deleteBlock(previousBlock, selection, start, end, editAction);\n }\n }\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.deleteCellsInTable = function (table, selection, start, end, editAction) {\n var clonedTable = undefined;\n var isDeleteCells = false;\n var action = 'Delete';\n var startCell = start.paragraph.associatedCell;\n var endCell = end.paragraph.associatedCell;\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n action = this.editorHistory.currentBaseHistoryInfo.action;\n //tslint:disable-next-line:max-line-length\n isDeleteCells = this.editorHistory.currentBaseHistoryInfo.action === 'BackSpace' || this.editorHistory.currentBaseHistoryInfo.action === 'DeleteCells'\n || this.editorHistory.currentBaseHistoryInfo.action === 'InsertTable' || (isNullOrUndefined(startCell.ownerRow.previousWidget)\n && isNullOrUndefined(endCell.ownerRow.nextWidget) && this.editorHistory.currentBaseHistoryInfo.action === 'Cut');\n this.editorHistory.currentBaseHistoryInfo.action = isDeleteCells ? 'DeleteCells' : 'ClearCells';\n clonedTable = this.cloneTableToHistoryInfo(table);\n selection.owner.isLayoutEnabled = false;\n }\n var startColumnIndex = startCell.columnIndex;\n var endColumnIndex = endCell.columnIndex + endCell.cellFormat.columnSpan - 1;\n var startRowIndex = startCell.rowIndex;\n var endRowIndex = endCell.rowIndex;\n var cells = [];\n var isStarted = false;\n var isCellCleared = false;\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n if (row.index >= startRowIndex && row.index <= endRowIndex) {\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n if (cell.columnIndex >= startColumnIndex && cell.columnIndex <= endColumnIndex) {\n if (!isStarted) {\n this.updateEditPosition(cell, selection);\n isStarted = true;\n }\n if (isDeleteCells) {\n //Specific for Backspace and Cut if selection includes all rows.\n var cell_1 = row.childWidgets[j];\n this.updateNextBlocksIndex(cell_1, false);\n row.childWidgets.splice(j, 1);\n j--;\n }\n else if (editAction < 4) {\n isCellCleared = this.deleteCell(cell, selection, editAction, false);\n }\n }\n }\n if (row.childWidgets.length === 0) {\n this.updateNextBlocksIndex(table.childWidgets[i], false);\n table.childWidgets.splice(i, 1);\n i--;\n endRowIndex--;\n }\n }\n }\n //Layouts the table after delete cells.\n selection.owner.isLayoutEnabled = true;\n if (table.childWidgets.length === 0) {\n selection.editPosition = this.getHierarchicalIndex(table, '0');\n this.setActionInternal(selection, action);\n this.removeBlock(table);\n }\n else {\n // Before lay outing need to update table grid.\n table.isGridUpdated = false;\n table.buildTableColumns();\n table.isGridUpdated = true;\n this.viewer.layout.reLayoutTable(table);\n }\n };\n Editor.prototype.deleteCell = function (cell, selection, editAction, copyChildToClipboard) {\n //Checks whether this is last paragraph of owner textbody.\n var block = cell.childWidgets[0];\n if (cell.childWidgets.length === 1 && block instanceof ParagraphWidget && block.isEmpty()) {\n return false;\n }\n for (var i = 0; i < cell.childWidgets.length; i++) {\n block = cell.childWidgets[i];\n if (editAction < 4) {\n //Checks whether this is last paragraph of owner textbody.\n if (block instanceof ParagraphWidget && cell.childWidgets.length === 1) {\n //Preserves empty paragraph, to ensure minimal content.\n var paragraph = block;\n //Removes all the inlines in the paragraph.\n for (var j = 0; j < paragraph.childWidgets.length; j++) {\n var inline = paragraph.childWidgets[j];\n for (var k = 0; k < inline.children.length; k++) {\n var element = inline.children[k];\n this.unLinkFieldCharacter(element);\n inline.children.splice(k, 1);\n // this.layoutInlineCollection(true, paragraph.inlines.indexOf(inline), paragraph.inlines, inline);\n k--;\n if (this.checkClearCells(selection)) {\n this.addRemovedNodes(element);\n }\n }\n if (paragraph.childWidgets.length > 1) {\n paragraph.childWidgets.splice(j, 1);\n j--;\n }\n }\n if (this.checkClearCells(selection)) {\n //Add Index for line Widget\n selection.editPosition = this.getHierarchicalIndex(paragraph, '0');\n this.updateHistoryPosition(selection.editPosition, true);\n }\n break;\n }\n this.removeBlock(block);\n i--;\n if (this.checkClearCells(selection)) {\n this.addRemovedNodes(block);\n }\n }\n }\n return true;\n };\n Editor.prototype.deleteContainer = function (cell, selection, start, end, editAction) {\n var ownerTable = cell.ownerTable;\n if (selection.containsRow(ownerTable.lastChild, end.paragraph.associatedCell)) {\n this.deleteContent(ownerTable, selection, editAction);\n }\n else {\n for (var i = 0; i < ownerTable.childWidgets.length; i++) {\n var row = ownerTable.childWidgets[i];\n if (editAction < 4) {\n this.updateNextBlocksIndex(row, false);\n ownerTable.childWidgets.splice(i, 1);\n this.addRemovedNodes(row);\n i--;\n }\n if (end.paragraph.isInsideTable && selection.containsRow(row, end.paragraph.associatedCell)) {\n this.viewer.layout.reLayoutTable(ownerTable);\n return;\n }\n }\n }\n };\n Editor.prototype.deleteTableBlock = function (table, selection, start, end, editAction) {\n table = table.combineWidget(this.viewer);\n if (start.paragraph.isInsideTable && table.contains(start.paragraph.associatedCell)) {\n var block = table.previousRenderedWidget;\n // tslint:disable-next-line:max-line-length\n var previousBlock = this.checkAndInsertBlock(table, start, end, editAction, block instanceof ParagraphWidget ? block : undefined);\n if (selection.containsRow(table.firstChild, start.paragraph.associatedCell)) {\n this.deleteContent(table, selection, editAction);\n }\n else {\n var newTable = this.splitTable(table, start.paragraph.associatedCell.ownerRow);\n this.deleteContent(table, selection, editAction);\n this.viewer.layout.layoutBodyWidgetCollection(newTable.index, newTable.containerWidget, newTable, false);\n }\n if (!isNullOrUndefined(previousBlock)) {\n selection.editPosition = this.getHierarchicalIndex(previousBlock, '0');\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n this.editorHistory.currentBaseHistoryInfo.endPosition = selection.editPosition;\n }\n }\n }\n else {\n var blockAdv = table.previousRenderedWidget;\n var sectionAdv = table.bodyWidget instanceof BodyWidget ? table.bodyWidget : undefined;\n this.deleteContent(table, selection, editAction);\n if (!isNullOrUndefined(blockAdv)) {\n // let nextSection: WSection = blockAdv.section instanceof WSection ? blockAdv.section as WSection : undefined;\n // if (sectionAdv !== nextSection) {\n // this.deleteSection(selection, sectionAdv, nextSection, editAction);\n // }\n //Goto the next block.\n this.deleteBlock(blockAdv, selection, start, end, editAction);\n }\n }\n };\n Editor.prototype.splitTable = function (table, splitEndRow) {\n var newTable = new TableWidget();\n newTable.tableFormat.copyFormat(table.tableFormat);\n newTable.index = table.index;\n //Moves the rows to new table.\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n if (row === splitEndRow) {\n break;\n }\n newTable.childWidgets.push(row);\n row.containerWidget = newTable;\n table.childWidgets.splice(i, 1);\n i--;\n }\n //Inserts new table in the current text position.\n var insertIndex = table.getIndex();\n table.containerWidget.childWidgets.splice(insertIndex, 0, newTable);\n newTable.containerWidget = table.containerWidget;\n this.updateNextBlocksIndex(newTable, true);\n return newTable;\n };\n Editor.prototype.updateEditPosition = function (cell, selection) {\n var firstParagraph = selection.getFirstParagraphInCell(cell);\n selection.editPosition = this.getHierarchicalIndex(firstParagraph, '0');\n };\n /**\n * @private\n */\n Editor.prototype.deleteContent = function (table, selection, editAction) {\n if (editAction < 4) {\n this.removeBlock(table);\n this.addRemovedNodes(table);\n }\n };\n Editor.prototype.setActionInternal = function (selection, action) {\n if (this.viewer.owner.enableHistoryMode && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n this.editorHistory.currentBaseHistoryInfo.action = action;\n }\n };\n Editor.prototype.checkClearCells = function (selection) {\n // tslint:disable-next-line:max-line-length\n return this.editorHistory && this.editorHistory.currentBaseHistoryInfo && this.editorHistory.currentBaseHistoryInfo.action !== 'ClearCells';\n };\n Editor.prototype.isEndInAdjacentTable = function (paragraph, endParagraph) {\n var start = this.getHierarchicalIndex(paragraph, '');\n var end = this.getHierarchicalIndex(endParagraph, '');\n var selectionStart = start.split(';');\n var selectionEnd = end.split(';');\n return selectionStart.length < selectionEnd.length;\n };\n Editor.prototype.cloneTableToHistoryInfo = function (table) {\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n //Clones the entire table to preserve in history.\n var clonedTable = table.clone();\n //Preserves the cloned table in history info, for future undo operation.\n this.editorHistory.currentBaseHistoryInfo.removedNodes.push(clonedTable);\n //Sets the insert position in history info as current table.\n if (this.viewer.selection.start.paragraph.isInsideTable &&\n this.viewer.selection.start.paragraph.associatedCell.ownerTable === table) {\n this.updateHistoryPosition(this.getHierarchicalIndex(table, '0'), true);\n }\n return clonedTable;\n }\n return undefined;\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.insertParagraphPaste = function (paragraph, currentParagraph, start, end, isCombineNextParagraph, editAction) {\n if (this.editorHistory && (this.editorHistory.isUndoing || this.editorHistory.isRedoing) && this.editorHistory.currentBaseHistoryInfo.action === 'Paste') {\n var nextParagraph = this.selection.getNextParagraphBlock(currentParagraph);\n if (nextParagraph) {\n if (start.offset > 0 && nextParagraph === end.paragraph && paragraph === start.paragraph\n && this.editorHistory.currentBaseHistoryInfo.action === 'Paste') {\n //Combines the current paragraph with end paragraph specific for undo/redo paste action.\n var insertIndex = 0;\n this.removeBlock(currentParagraph);\n this.viewer.layout.clearListElementBox(nextParagraph);\n this.viewer.layout.clearListElementBox(currentParagraph);\n for (var i = 0; i < currentParagraph.childWidgets.length; i++) {\n var line = currentParagraph.childWidgets[i];\n nextParagraph.childWidgets.splice(insertIndex, 0, line);\n currentParagraph.childWidgets.splice(i, 1);\n i--;\n insertIndex++;\n line.paragraph = nextParagraph;\n }\n this.viewer.layout.reLayoutParagraph(nextParagraph, 0, 0);\n isCombineNextParagraph = false;\n var offset = this.selection.editPosition.substring(this.selection.editPosition.lastIndexOf(';') + 1);\n this.selection.editPosition = this.getHierarchicalIndex(nextParagraph, offset);\n }\n }\n }\n if (isCombineNextParagraph) {\n this.deleteParagraphMark(currentParagraph, this.selection, editAction);\n }\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.removeInlines = function (paragraph, startLine, startOffset, endLine, endOffset, editAction) {\n var isRemoved = false;\n this.viewer.layout.clearListElementBox(paragraph);\n var startIndex = paragraph.childWidgets.indexOf(startLine);\n for (var i = paragraph.childWidgets.length - 1; i >= 0; i--) {\n var lineWidget = paragraph.childWidgets[i];\n if (startLine === lineWidget && endLine === lineWidget) {\n this.removeContent(lineWidget, startOffset, endOffset);\n isRemoved = true;\n break;\n }\n if (endLine === lineWidget) {\n isRemoved = true;\n this.removeContent(lineWidget, 0, endOffset);\n }\n else if (startLine === lineWidget) {\n this.removeContent(lineWidget, startOffset, this.viewer.selection.getLineLength(lineWidget));\n break;\n }\n else if (isRemoved) {\n this.removeContent(lineWidget, 0, this.viewer.selection.getLineLength(lineWidget));\n }\n }\n if (isRemoved) {\n this.removeEmptyLine(paragraph);\n this.viewer.layout.reLayoutParagraph(paragraph, 0, 0);\n }\n };\n /**\n * @private\n */\n Editor.prototype.removeContent = function (lineWidget, startOffset, endOffset) {\n var count = this.selection.getLineLength(lineWidget);\n for (var i = lineWidget.children.length - 1; i >= 0; i--) {\n var inline = lineWidget.children[i];\n if (endOffset <= count - inline.length) {\n count -= inline.length;\n continue;\n }\n var endIndex = inline.length;\n if (count > endOffset && (count - endIndex < endOffset)) {\n endIndex = endOffset - (count - inline.length);\n }\n var startIndex = 0;\n if (count - inline.length < startOffset) {\n startIndex = startOffset - (count - inline.length);\n }\n if (count > endOffset) {\n count -= (inline.length - endIndex);\n }\n if (startIndex === 0 && endIndex === inline.length) {\n if (!(this.editorHistory && (this.editorHistory.isUndoing || this.editorHistory.isRedoing))) {\n if (inline instanceof BookmarkElementBox) {\n this.removedBookmarkElements.push(inline);\n }\n }\n // if (editAction < 4) {\n this.unLinkFieldCharacter(inline);\n this.addRemovedNodes(lineWidget.children[i]);\n lineWidget.children.splice(i, 1);\n // }\n }\n else if (inline instanceof TextElementBox) {\n // if (editAction < 4) {\n var span = new TextElementBox();\n span.characterFormat.copyFormat(inline.characterFormat);\n span.text = inline.text.substr(startIndex, endIndex - startIndex);\n this.addRemovedNodes(span);\n inline.text = inline.text.slice(0, startIndex) + inline.text.slice(endIndex);\n }\n if (startOffset >= count - (endIndex - startIndex)) {\n break;\n }\n count -= (endIndex - startIndex);\n }\n };\n /**\n * @private\n */\n Editor.prototype.removeEmptyLine = function (paragraph) {\n if (paragraph.childWidgets.length > 1) {\n for (var i = 0; i < paragraph.childWidgets.length; i++) {\n var lineWidget = paragraph.childWidgets[i];\n if (lineWidget.children.length === 0 && paragraph.childWidgets.length > 1) {\n paragraph.childWidgets.splice(i, 1);\n i--;\n }\n }\n }\n };\n //#endregion\n /**\n * clone the list level\n * @param {WListLevel} source\n * @private\n */\n Editor.prototype.cloneListLevel = function (source) {\n var listLevel = new WListLevel(undefined);\n this.copyListLevel(listLevel, source);\n return listLevel;\n };\n /**\n * Copies the list level\n * @param {WListLevel} destination\n * @param {WListLevel} listLevel\n * @private\n */\n Editor.prototype.copyListLevel = function (destination, listLevel) {\n if (!isNullOrUndefined(listLevel.paragraphFormat)) {\n destination.paragraphFormat = new WParagraphFormat(destination);\n destination.paragraphFormat.copyFormat(listLevel.paragraphFormat);\n }\n if (!isNullOrUndefined(listLevel.characterFormat)) {\n destination.characterFormat = new WCharacterFormat(destination);\n destination.characterFormat.copyFormat(listLevel.characterFormat);\n }\n if (!isNullOrUndefined(listLevel.followCharacter)) {\n destination.followCharacter = listLevel.followCharacter;\n }\n if (!isNullOrUndefined(listLevel.listLevelPattern)) {\n destination.listLevelPattern = listLevel.listLevelPattern;\n }\n if (!isNullOrUndefined(listLevel.numberFormat)) {\n destination.numberFormat = listLevel.numberFormat;\n }\n if (!isNullOrUndefined(listLevel.restartLevel)) {\n destination.restartLevel = listLevel.restartLevel;\n }\n if (!isNullOrUndefined(listLevel.startAt)) {\n destination.startAt = listLevel.startAt;\n }\n };\n /**\n * Clone level override\n * @param {WLevelOverride} source\n * @private\n */\n Editor.prototype.cloneLevelOverride = function (source) {\n var levelOverride = new WLevelOverride();\n if (!isNullOrUndefined(source.startAt)) {\n levelOverride.startAt = source.startAt;\n }\n if (!isNullOrUndefined(source.overrideListLevel)) {\n levelOverride.overrideListLevel = source.overrideListLevel;\n }\n if (!isNullOrUndefined(source.levelNumber)) {\n levelOverride.levelNumber = source.levelNumber;\n }\n return levelOverride;\n };\n /**\n * Update List Paragraph\n * @private\n */\n Editor.prototype.updateListParagraphs = function () {\n this.viewer.listParagraphs = [];\n for (var j = 0; j < this.viewer.pages.length; j++) {\n var bodyWidget = this.viewer.pages[j].bodyWidgets[0];\n for (var i = 0; i < bodyWidget.childWidgets.length; i++) {\n this.updateListParagraphsInBlock(bodyWidget.childWidgets[i]);\n }\n }\n };\n /**\n * @private\n */\n Editor.prototype.updateListParagraphsInBlock = function (block) {\n if (block instanceof ParagraphWidget) {\n if (!isNullOrUndefined(block.paragraphFormat)\n && !isNullOrUndefined(block.paragraphFormat.listFormat)\n && !isNullOrUndefined(block.paragraphFormat.listFormat.listId)) {\n if (isNullOrUndefined(this.viewer.listParagraphs)) {\n this.viewer.listParagraphs = [];\n }\n this.viewer.listParagraphs.push(block);\n }\n }\n else if (block instanceof TableWidget) {\n for (var i = 0; i < block.childWidgets.length; i++) {\n for (var j = 0; j < block.childWidgets[i].childWidgets.length; j++) {\n var cell = block.childWidgets[i].childWidgets[j];\n for (var k = 0; k < cell.childWidgets.length; k++) {\n this.updateListParagraphsInBlock(cell.childWidgets[k]);\n }\n }\n }\n }\n };\n /**\n * Applies list format\n * @param {WList} list\n * @private\n */\n Editor.prototype.onApplyList = function (list) {\n var selection = this.viewer.selection;\n this.setOffsetValue(this.viewer.selection);\n this.initHistory('ListFormat');\n var format = new WListFormat();\n if (!isNullOrUndefined(list)) {\n format.listId = list.listId;\n }\n this.viewer.owner.isShiftingEnabled = true;\n if (selection.isEmpty) {\n this.applyParaFormatProperty(selection.start.paragraph, 'listFormat', format, false);\n this.layoutItemBlock(selection.start.paragraph, false);\n }\n else {\n this.updateSelectionParagraphFormatting('listFormat', format, false);\n }\n this.reLayout(selection);\n };\n /**\n * Applies bullets or numbering list\n * @param {string} format\n * @param {ListLevelPattern} listLevelPattern\n * @param {string} fontFamily\n * @private\n */\n Editor.prototype.applyBulletOrNumbering = function (format, listLevelPattern, fontFamily) {\n var selection = this.viewer.selection;\n var list = selection.paragraphFormat.getList();\n var isUpdate = false;\n var start = selection.start;\n if (!selection.isForward) {\n start = selection.end;\n }\n var currentParagraph = start.paragraph;\n if (isNullOrUndefined(list)) {\n while (!isNullOrUndefined(currentParagraph.previousWidget) && currentParagraph.previousWidget instanceof ParagraphWidget\n && currentParagraph.previousWidget.isEmpty() && currentParagraph.previousWidget.paragraphFormat.listFormat.listId === -1) {\n currentParagraph = currentParagraph.previousWidget;\n }\n if (currentParagraph.previousWidget && currentParagraph.previousWidget instanceof ParagraphWidget\n && currentParagraph.previousWidget.paragraphFormat.listFormat.listId !== -1) {\n currentParagraph = currentParagraph.previousWidget;\n list = this.viewer.getListById(currentParagraph.paragraphFormat.listFormat.listId);\n isUpdate = true;\n }\n }\n var startListLevel = undefined;\n if (!isNullOrUndefined(list)) {\n var tempList = this.viewer.getListById(currentParagraph.paragraphFormat.listFormat.listId);\n startListLevel = this.viewer.layout.getListLevel(tempList, currentParagraph.paragraphFormat.listFormat.listLevelNumber);\n }\n if (isNullOrUndefined(list) || (!isNullOrUndefined(list) && ((startListLevel.listLevelPattern !== listLevelPattern) ||\n startListLevel.numberFormat !== format || (startListLevel.characterFormat.fontFamily !== fontFamily\n && startListLevel.listLevelPattern === 'Bullet')))) {\n isUpdate = false;\n list = new WList();\n if (this.viewer.lists.length > 0) {\n list.listId = this.viewer.lists[this.viewer.lists.length - 1].listId + 1;\n }\n else {\n list.listId = 0;\n }\n var abstractList = new WAbstractList();\n if (this.viewer.abstractLists.length > 0) {\n abstractList.abstractListId = this.viewer.abstractLists[this.viewer.abstractLists.length - 1].abstractListId + 1;\n }\n else {\n abstractList.abstractListId = 0;\n }\n list.abstractListId = abstractList.abstractListId;\n this.viewer.abstractLists.push(abstractList);\n if (format === 'bullet' || format === 'multiLevel' || format === 'numbering') {\n this.addListLevels(abstractList, format, selection);\n }\n else {\n var listLevel = new WListLevel(abstractList);\n listLevel.listLevelPattern = listLevelPattern;\n listLevel.numberFormat = format;\n if (listLevelPattern !== 'Bullet') {\n listLevel.startAt = 1;\n }\n else {\n listLevel.characterFormat.fontFamily = fontFamily;\n }\n listLevel.paragraphFormat.leftIndent = 36;\n listLevel.paragraphFormat.firstLineIndent = -18;\n abstractList.levels.push(listLevel);\n selection.paragraphFormat.listLevelNumber = 0;\n }\n selection.paragraphFormat.setList(list);\n }\n else if (!isNullOrUndefined(list) && isUpdate) {\n selection.paragraphFormat.setList(list);\n }\n else {\n selection.paragraphFormat.setList(undefined);\n }\n };\n Editor.prototype.addListLevels = function (abstractListAdv, listName, selection) {\n var bulletCharacters = ['\\uf076', '\\uf0d8', '\\uf0a7', '\\uf0b7', '\\uf0a8'];\n for (var i = abstractListAdv.levels.length; i < 9; i++) {\n var listLevel = new WListLevel(abstractListAdv);\n if (listName.match('bullet')) {\n listLevel.listLevelPattern = 'Bullet';\n listLevel.numberFormat = bulletCharacters[i < 5 ? i % 5 : i % 5 + 1];\n listLevel.characterFormat.fontFamily = i < 3 || i === 5 ? 'Wingdings' : 'Symbol';\n }\n else {\n if (listName.match('multiLevel')) {\n for (var j = 0; j < i + 1; j++) {\n listLevel.numberFormat += '%' + (j + 1).toString() + '.';\n }\n listLevel.listLevelPattern = 'Number';\n }\n else {\n listLevel.numberFormat = '%' + (i + 1).toString() + ')';\n listLevel.listLevelPattern = i % 3 === 0 ? 'Number'\n : i % 3 === 1 ? 'LowLetter' : 'LowRoman';\n }\n listLevel.startAt = 1;\n listLevel.restartLevel = i;\n }\n if (i === 0) {\n listLevel.paragraphFormat.leftIndent = 36;\n }\n else {\n listLevel.paragraphFormat.leftIndent = 36 * i;\n }\n listLevel.paragraphFormat.firstLineIndent = -18;\n abstractListAdv.levels.push(listLevel);\n selection.paragraphFormat.listLevelNumber = i;\n }\n };\n /**\n * @private\n */\n Editor.prototype.onEnter = function () {\n var selection = this.viewer.selection;\n if (selection.isEmpty) {\n //ToDo: Need to handle the CTRL + Enter (Page Break) and SHIFT + Enter (Line Break) behavior.\n var hyperlinkField = selection.getHyperlinkField();\n var isSelectionOnHyperlink = !isNullOrUndefined(hyperlinkField);\n if (isSelectionOnHyperlink) {\n selection.fireRequestNavigate(hyperlinkField);\n return;\n }\n var paragraph = selection.start.paragraph;\n if (paragraph.isEmpty() && paragraph.paragraphFormat.listFormat.listId !== -1) {\n // tslint:disable-next-line:max-line-length\n this.onApplyListInternal(this.viewer.getListById(paragraph.paragraphFormat.listFormat.listId), paragraph.paragraphFormat.listFormat.listLevelNumber - 1);\n return;\n }\n }\n this.initHistory('Enter');\n var isRemoved = true;\n this.selection.skipFormatRetrieval = true;\n if (!selection.isEmpty) {\n // this.initHistoryWithSelection(selection, 'Enter');\n isRemoved = this.removeSelectedContents(selection);\n }\n if (isRemoved) {\n selection.owner.isShiftingEnabled = true;\n this.updateInsertPosition();\n var blockInfo = this.getParagraphInfo(selection.start);\n var initialStart = this.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n this.splitParagraphInternal(selection, selection.start.paragraph, selection.start.currentWidget, selection.start.offset);\n this.setPositionForCurrentIndex(selection.start, initialStart);\n var nextNode = selection.start.paragraph.nextWidget;\n if (isNullOrUndefined(nextNode)) {\n nextNode = selection.getNextRenderedBlock(selection.start.paragraph);\n }\n selection.selectParagraph(nextNode, true);\n this.updateEndPosition();\n // if (!isNullOrUndefined(selection.currentHistoryInfo)) {\n // this.updateComplexHistory();\n // } else {\n this.reLayout(selection);\n // }\n var paragraph = selection.start.paragraph.previousWidget;\n if (!isNullOrUndefined(paragraph) && !paragraph.isEmpty() &&\n // tslint:disable-next-line:max-line-length\n paragraph.lastChild.children[paragraph.lastChild.children.length - 1] instanceof TextElementBox) {\n this.checkAndConvertToHyperlink(selection, true, paragraph);\n }\n }\n this.selection.skipFormatRetrieval = false;\n };\n Editor.prototype.splitParagraphInternal = function (selection, paragraphAdv, currentLine, offset) {\n var insertIndex = 0;\n var blockIndex = paragraphAdv.index;\n var paragraph = new ParagraphWidget();\n var lineWidget = new LineWidget(paragraph);\n paragraph.childWidgets.push(lineWidget);\n //Copies the format to new paragraph.\n paragraph.paragraphFormat.ownerBase = paragraph;\n if (currentLine === paragraphAdv.lastChild && offset === selection.getLineLength(currentLine)) {\n // tslint:disable-next-line:max-line-length\n if (paragraphAdv.paragraphFormat.baseStyle\n && paragraphAdv.paragraphFormat.baseStyle.name !== 'Normal' && paragraphAdv.paragraphFormat.baseStyle.next instanceof WParagraphStyle) {\n paragraph.paragraphFormat.baseStyle = paragraphAdv.paragraphFormat.baseStyle.next;\n if (paragraphAdv.paragraphFormat.baseStyle.name === 'List Paragraph') {\n paragraph.paragraphFormat.listFormat.copyFormat(paragraphAdv.paragraphFormat.listFormat);\n }\n this.selection.skipFormatRetrieval = false;\n }\n else {\n paragraph.paragraphFormat.copyFormat(paragraphAdv.paragraphFormat);\n paragraph.characterFormat.copyFormat(paragraphAdv.characterFormat);\n }\n //ToDo in future: Need to skip copying formattings to new paragraph, if the style for following paragraph is same style.\n insertIndex++;\n blockIndex++;\n }\n else {\n paragraph.paragraphFormat.copyFormat(paragraphAdv.paragraphFormat);\n paragraph.characterFormat.copyFormat(paragraphAdv.characterFormat);\n paragraphAdv = paragraphAdv.combineWidget(this.viewer);\n if (offset > 0 || !currentLine.isFirstLine()) {\n this.moveInlines(paragraphAdv, paragraph, 0, 0, paragraphAdv.firstChild, offset, currentLine);\n }\n var paragraphs = paragraphAdv.getSplitWidgets();\n paragraphAdv = paragraphs[0];\n }\n insertIndex += paragraphAdv.getIndex();\n var container = paragraphAdv.containerWidget;\n var childNodes = container.childWidgets;\n childNodes.splice(insertIndex, 0, paragraph);\n paragraph.containerWidget = container;\n paragraph.index = blockIndex;\n this.updateNextBlocksIndex(paragraph, true);\n // tslint:disable-next-line:max-line-length\n this.viewer.layout.layoutBodyWidgetCollection(blockIndex, container, paragraph, false);\n };\n /**\n * @private\n */\n Editor.prototype.updateNextBlocksIndex = function (block, increaseIndex) {\n var nextIndex = block.containerWidget.childWidgets.indexOf(block) + 1;\n if (block.containerWidget instanceof BodyWidget) {\n var currentSectionIndex = block.containerWidget.index;\n for (var j = this.viewer.pages.indexOf(block.containerWidget.page); j < this.viewer.pages.length; j++) {\n var page = this.viewer.pages[j];\n if (page.bodyWidgets[0].index === currentSectionIndex) {\n for (var k = nextIndex; k < page.bodyWidgets[0].childWidgets.length; k++) {\n var childWidget = page.bodyWidgets[0].childWidgets[k];\n this.updateIndex(childWidget, increaseIndex);\n }\n nextIndex = 0;\n }\n else {\n return;\n }\n }\n }\n else if (block.containerWidget instanceof TableCellWidget) {\n var cells = block.containerWidget.getSplitWidgets();\n var currentCellIndex = cells.indexOf(block.containerWidget);\n for (var x = currentCellIndex; x < cells.length; x++) {\n var blocks = cells[x].childWidgets;\n for (var y = nextIndex; y < blocks.length; y++) {\n this.updateIndex(blocks[y], increaseIndex);\n }\n currentCellIndex = 0;\n nextIndex = 0;\n }\n }\n else if (block.containerWidget instanceof TableRowWidget) {\n for (var i = nextIndex; i < block.containerWidget.childWidgets.length; i++) {\n var cell = block.containerWidget.childWidgets[i];\n if (cell.rowIndex === block.containerWidget.index) {\n this.updateIndex(cell, increaseIndex);\n }\n }\n }\n else if (block.containerWidget instanceof TableWidget) {\n for (var i = nextIndex; i < block.containerWidget.childWidgets.length; i++) {\n var row = block.containerWidget.childWidgets[i];\n this.updateIndex(row, increaseIndex);\n for (var j = 0; j < row.childWidgets.length; j++) {\n row.childWidgets[j].rowIndex = row.index;\n }\n }\n //update Row index of all the cell\n }\n else if (block.containerWidget instanceof HeaderFooterWidget) {\n for (var i = nextIndex; i < block.containerWidget.childWidgets.length; i++) {\n var nextBlock = block.containerWidget.childWidgets[i];\n this.updateIndex(nextBlock, increaseIndex);\n }\n }\n };\n Editor.prototype.updateIndex = function (widget, increment) {\n if (increment) {\n widget.index++;\n }\n else {\n widget.index--;\n }\n };\n Editor.prototype.updateEndPosition = function () {\n var selection = this.viewer.selection;\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n this.updateHistoryPosition(selection.start, false);\n }\n };\n /**\n * @private\n */\n Editor.prototype.onBackSpace = function () {\n var selection = this.viewer.selection;\n if (selection.isEmpty) {\n this.singleBackspace(selection, false);\n }\n else {\n this.initHistory('BackSpace');\n var skipBackSpace = this.deleteSelectedContents(selection, true);\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n if (skipBackSpace) {\n this.editorHistory.currentBaseHistoryInfo = undefined;\n }\n else {\n if (this.checkEndPosition(selection)) {\n this.updateHistoryPosition(selection.end, false);\n }\n this.reLayout(selection);\n }\n }\n }\n };\n /**\n * @private\n */\n Editor.prototype.insertRemoveBookMarkElements = function () {\n var isHandledComplexHistory = false;\n for (var i = 0; i < this.removedBookmarkElements.length; i++) {\n var bookMark = this.removedBookmarkElements[i];\n if (bookMark.bookmarkType === 0) {\n var bookMarkStart = bookMark;\n if (bookMarkStart && bookMarkStart.reference && this.removedBookmarkElements.indexOf(bookMarkStart.reference) !== -1) {\n var endIndex = this.removedBookmarkElements.indexOf(bookMarkStart.reference);\n var startIndex = this.removedBookmarkElements.indexOf(bookMarkStart);\n this.removedBookmarkElements.splice(endIndex, 1);\n this.removedBookmarkElements.splice(startIndex, 1);\n }\n else {\n this.initComplexHistory(this.editorHistory.currentBaseHistoryInfo.action);\n this.editorHistory.updateHistory();\n this.initInsertInline(bookMarkStart.clone());\n this.editorHistory.updateComplexHistory();\n isHandledComplexHistory = true;\n }\n }\n else {\n var bookMarkEnd = bookMark;\n if (bookMarkEnd && bookMarkEnd.reference && this.removedBookmarkElements.indexOf(bookMarkEnd.reference) !== -1) {\n var endIndex = this.removedBookmarkElements.indexOf(bookMarkEnd.reference);\n var startIndex = this.removedBookmarkElements.indexOf(bookMarkEnd);\n this.removedBookmarkElements.splice(endIndex, 1);\n this.removedBookmarkElements.splice(startIndex, 1);\n }\n else {\n this.initComplexHistory(this.editorHistory.currentBaseHistoryInfo.action);\n this.editorHistory.updateHistory();\n this.initInsertInline(bookMarkEnd.clone());\n this.editorHistory.updateComplexHistory();\n isHandledComplexHistory = true;\n }\n }\n }\n this.removedBookmarkElements = [];\n return isHandledComplexHistory;\n };\n /**\n * @private\n */\n Editor.prototype.deleteSelectedContents = function (selection, isBackSpace) {\n var skipBackSpace = this.deleteSelectedContentInternal(selection, isBackSpace, selection.start, selection.end);\n var textPosition = new TextPosition(selection.owner);\n var blockInfo = this.getParagraph({ index: selection.editPosition });\n var lineInfo = this.getLineInfo(blockInfo.paragraph, blockInfo.offset);\n textPosition.setPositionForLineWidget(lineInfo.line, lineInfo.offset);\n selection.selectContent(textPosition, true);\n return skipBackSpace;\n };\n /**\n * @private\n */\n Editor.prototype.singleBackspace = function (selection, isRedoing) {\n var history = this.editorHistory;\n // If backspace is pressed after auto format to hyperlink is done, need to undo auto format.\n if (history && !isRedoing && !history.canRedo() && history.canUndo()) {\n var historyInfo = history.undoStack[history.undoStack.length - 1];\n var startBlockInfo = this.getParagraphInfo(selection.start);\n var endBlockInfo = this.getParagraphInfo(selection.end);\n // tslint:disable-next-line:max-line-length\n if (historyInfo.action === 'AutoFormatHyperlink' && historyInfo.insertPosition === this.getHierarchicalIndex(startBlockInfo.paragraph, startBlockInfo.offset.toString()) &&\n historyInfo.endPosition === this.getHierarchicalIndex(endBlockInfo.paragraph, endBlockInfo.offset.toString())) {\n history.undo();\n return;\n }\n }\n var paragraph = selection.start.paragraph;\n var currentLineWidget = selection.start.currentWidget;\n var offset = selection.start.offset;\n var indexInInline = 0;\n var inlineObj = currentLineWidget.getInline(offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n var previousInline = inline;\n if (inline instanceof FieldElementBox && inline.fieldType === 2) {\n if (HelperMethods.isLinkedFieldCharacter(inline)) {\n var begin = inline.fieldBegin;\n var end = inline.fieldEnd;\n selection.start.setPositionParagraph(begin.line, begin.line.getOffset(begin, 0));\n selection.end.setPositionParagraph(end.line, end.line.getOffset(end, 0) + 1);\n selection.fireSelectionChanged(true);\n return;\n }\n }\n if (inline instanceof FieldElementBox && inline.fieldType === 1) {\n var prevInline = selection.getPreviousValidElement(inline);\n if (prevInline instanceof FieldElementBox) {\n inline = prevInline.fieldBegin;\n paragraph = inline.line.paragraph;\n offset = inline.line.getOffset(inline, 0);\n selection.end.setPositionParagraph(inline.line, offset); //Selects the entire field.\n selection.fireSelectionChanged(true);\n return;\n }\n else if (prevInline !== inline) {\n inline = prevInline; //Updates the offset to delete next content.\n paragraph = inline.line.paragraph;\n offset = inline.line.getOffset(inline, inline.length);\n }\n }\n if (inline && (inline instanceof BookmarkElementBox && inline.bookmarkType === 1\n || inline.previousNode instanceof BookmarkElementBox)) {\n if (inline instanceof BookmarkElementBox) {\n inline = inline.previousNode;\n paragraph = inline.line.paragraph;\n offset = inline.line.getOffset(inline, inline.length);\n }\n if (inline.length === 1 && inline.nextNode instanceof BookmarkElementBox && inline.previousNode instanceof BookmarkElementBox) {\n var begin = inline.previousNode;\n var end = inline.nextNode;\n selection.start.setPositionParagraph(begin.line, begin.line.getOffset(begin, 0));\n selection.end.setPositionParagraph(end.line, end.line.getOffset(end, 0) + 1);\n this.initHistory('BackSpace');\n this.deleteSelectedContents(selection, true);\n if (this.checkEndPosition(selection)) {\n this.updateHistoryPosition(selection.end, false);\n }\n this.reLayout(selection);\n return;\n }\n }\n if (!isRedoing) {\n this.initHistory('BackSpace');\n }\n if (offset === selection.getStartOffset(paragraph) && selection.start.currentWidget.isFirstLine()) {\n if (paragraph.paragraphFormat.listFormat && paragraph.paragraphFormat.listFormat.listId !== -1) {\n this.onApplyList(undefined);\n return;\n }\n if (paragraph.paragraphFormat.firstLineIndent !== 0) {\n this.onApplyParagraphFormat('firstLineIndent', 0, false, false);\n return;\n }\n if (paragraph.paragraphFormat.leftIndent !== 0) {\n this.onApplyParagraphFormat('leftIndent', 0, false, false);\n return;\n }\n if (paragraph.paragraphFormat.textAlignment !== 'Left') {\n this.onApplyParagraphFormat('textAlignment', 'Left', false, true);\n return;\n }\n if (paragraph.previousRenderedWidget instanceof ParagraphWidget) {\n selection.owner.isShiftingEnabled = true;\n var previousParagraph = paragraph.previousRenderedWidget;\n // if (isNullOrUndefined(previousParagraph)) {\n // previousParagraph = this.viewer.selection.getPreviousBlock(paragraph) as ParagraphWidget;\n // }\n if (previousParagraph.isEmpty()) {\n this.removeBlock(previousParagraph);\n this.addRemovedNodes(previousParagraph);\n }\n else {\n this.removeBlock(paragraph);\n var endOffset = this.viewer.selection.getLineLength(previousParagraph.lastChild);\n var previousIndex = previousParagraph.childWidgets.length - 1;\n var lineWidget = void 0;\n if (!paragraph.isEmpty()) {\n for (var i = 0; i < paragraph.childWidgets.length; i++) {\n lineWidget = paragraph.childWidgets[i];\n previousParagraph.childWidgets.push(lineWidget);\n paragraph.childWidgets.splice(i, 1);\n i--;\n lineWidget.paragraph = previousParagraph;\n }\n }\n this.viewer.layout.reLayoutParagraph(previousParagraph, previousIndex, 0);\n selection.selects(previousParagraph.childWidgets[previousIndex], endOffset, true);\n this.addRemovedNodes(paragraph);\n }\n this.setPositionForHistory();\n // if (!isRedoing) {\n this.reLayout(selection);\n // }\n }\n else {\n if (this.editorHistory) {\n this.editorHistory.currentBaseHistoryInfo = undefined;\n }\n }\n }\n else {\n if (!isRedoing) {\n selection.owner.isShiftingEnabled = true;\n }\n var paragraphInfo = this.getParagraphInfo(selection.start);\n var lineWidget = selection.start.currentWidget;\n var removeOffset = offset - 1;\n if (removeOffset < 0) {\n lineWidget = lineWidget.previousLine;\n removeOffset = this.viewer.selection.getLineLength(lineWidget) + removeOffset;\n }\n this.removeAtOffset(lineWidget, selection, removeOffset);\n this.setPositionParagraph(paragraphInfo.paragraph, paragraphInfo.offset - 1, false);\n this.setPositionForHistory();\n if (!isRedoing) {\n this.reLayout(selection);\n }\n else {\n this.fireContentChange();\n }\n }\n };\n Editor.prototype.setPositionForHistory = function (editPosition) {\n var selection = this.viewer.selection;\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n if (isNullOrUndefined(editPosition)) {\n this.updateHistoryPosition(selection.start, true);\n this.editorHistory.currentBaseHistoryInfo.endPosition = this.editorHistory.currentBaseHistoryInfo.insertPosition;\n }\n else {\n this.editorHistory.currentBaseHistoryInfo.insertPosition = editPosition;\n this.editorHistory.currentBaseHistoryInfo.endPosition = editPosition;\n }\n }\n };\n Editor.prototype.removeAtOffset = function (lineWidget, selection, offset) {\n var count = 0;\n var lineIndex = lineWidget.paragraph.childWidgets.indexOf(lineWidget);\n for (var i = 0; i < lineWidget.children.length; i++) {\n var inline = lineWidget.children[i];\n if (inline instanceof ListTextElementBox) {\n continue;\n }\n if (offset < count + inline.length) {\n var indexInInline = offset - count;\n if (offset === count && inline.length === 1) {\n this.unLinkFieldCharacter(inline);\n lineWidget.children.splice(i, 1);\n this.viewer.layout.reLayoutParagraph(lineWidget.paragraph, lineIndex, i);\n this.addRemovedNodes(inline);\n }\n else {\n var span = new TextElementBox();\n span.characterFormat.copyFormat(inline.characterFormat);\n span.text = inline.text.substr(indexInInline, 1);\n inline.text = HelperMethods.remove(inline.text, indexInInline, 1);\n this.viewer.layout.reLayoutParagraph(lineWidget.paragraph, lineIndex, i);\n this.addRemovedNodes(span);\n }\n break;\n }\n count += inline.length;\n }\n };\n /**\n * @private\n */\n Editor.prototype.onDelete = function () {\n var selection = this.viewer.selection;\n if (selection.isEmpty) {\n this.singleDelete(selection, false);\n }\n else {\n // this.initComplexHistory('MultiSelection');\n // for (let i: number = 0; i < selection.selectionRanges.length; i++) {\n // let selectionRange: SelectionRange = selection.selectionRanges.getRange(i);\n this.initHistory('Delete');\n this.deleteSelectedContentInternal(selection, false, selection.start, selection.end);\n var textPosition = new TextPosition(selection.owner);\n this.setPositionForCurrentIndex(textPosition, selection.editPosition);\n selection.selectContent(textPosition, true);\n // if (this.viewer.owner.enableEditorHistory) {\n this.reLayout(selection);\n // }\n // this.updateSelectionRangeOffSet(selection.start, selection.end);\n // }\n // let textPosition: TextPosition = new TextPosition(selection.owner, this.viewer);\n // this.setPositionForCurrentIndex(textPosition,selection.editPosition);\n // selection.selectContent(textPosition, true);\n // if (!isNullOrUndefined(selection.currentHistoryInfo)) {\n // this.updateComplexHistory();\n // } else {\n // this.updateComplexWithoutHistory();\n // }\n }\n };\n /**\n * Remove single character on right of cursor position\n * @param {Selection} selection\n * @param {boolean} isRedoing\n * @private\n */\n Editor.prototype.singleDelete = function (selection, isRedoing) {\n // tslint:disable-next-line:max-line-length\n var paragraph = selection.start.paragraph;\n var offset = selection.start.offset;\n var indexInInline = 0;\n var inlineObj = paragraph.getInline(selection.start.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (paragraph.paragraphFormat.listFormat && paragraph.paragraphFormat.listFormat.listId !== -1 &&\n this.viewer.isListTextSelected && selection.contextType === 'List') {\n this.onApplyList(undefined);\n return;\n }\n if (!isNullOrUndefined(inline) && indexInInline === inline.length && !isNullOrUndefined(inline.nextNode)) {\n inline = inline.nextNode;\n indexInInline = 0;\n }\n if (!isNullOrUndefined(inline)) {\n var nextRenderedInline = undefined;\n var nextInline = selection.getNextValidElement(inline);\n if (nextInline instanceof ElementBox) {\n nextRenderedInline = nextInline;\n }\n if (!isNullOrUndefined(nextRenderedInline) && nextRenderedInline instanceof FieldElementBox\n && nextRenderedInline.fieldType === 0) {\n inline = nextRenderedInline.fieldEnd;\n paragraph = inline.line.paragraph;\n offset = inline.line.getOffset(inline, 1);\n selection.end.setPositionParagraph(inline.line, offset);\n selection.fireSelectionChanged(true);\n return;\n }\n else if (inline !== nextRenderedInline) {\n inline = nextRenderedInline;\n paragraph = inline.line.paragraph;\n offset = inline.line.getOffset(inline, 0);\n if (inline instanceof FieldElementBox && inline.fieldType === 1) {\n offset++;\n }\n }\n }\n if (inline && (inline instanceof BookmarkElementBox && inline.bookmarkType === 0\n || inline.nextNode instanceof BookmarkElementBox)) {\n if (inline instanceof BookmarkElementBox) {\n inline = inline.nextNode;\n paragraph = inline.line.paragraph;\n offset = inline.line.getOffset(inline, 0);\n }\n if (inline.length === 1 && inline.nextNode instanceof BookmarkElementBox\n && inline.previousNode instanceof BookmarkElementBox) {\n var bookMarkBegin = inline.previousNode;\n var bookMarkEnd = inline.nextNode;\n selection.start.setPositionParagraph(bookMarkBegin.line, bookMarkBegin.line.getOffset(bookMarkBegin, 0));\n selection.end.setPositionParagraph(bookMarkEnd.line, bookMarkEnd.line.getOffset(bookMarkEnd, 0) + 1);\n this.initHistory('Delete');\n this.deleteSelectedContentInternal(selection, false, selection.start, selection.end);\n var textPosition = new TextPosition(selection.owner);\n this.setPositionForCurrentIndex(textPosition, selection.editPosition);\n selection.selectContent(textPosition, true);\n this.reLayout(selection);\n return;\n }\n }\n if (selection.start.currentWidget.isLastLine() && offset === this.viewer.selection.getLineLength(selection.start.currentWidget)) {\n if (paragraph.isInsideTable && isNullOrUndefined(paragraph.nextWidget)) {\n return;\n }\n var previousParagraph = undefined;\n var newParagraph = undefined;\n var nextParagraph = selection.getNextParagraphBlock(paragraph);\n if (isNullOrUndefined(nextParagraph)) {\n if (offset > 0) {\n return;\n }\n else {\n if (paragraph.previousWidget instanceof ParagraphWidget) {\n previousParagraph = paragraph.previousWidget;\n }\n if (paragraph.previousWidget instanceof TableWidget) {\n return;\n }\n if (isNullOrUndefined(previousParagraph)) {\n return;\n //Adds an empty paragraph, to ensure minimal content.\n }\n }\n }\n if (!isRedoing) {\n this.initHistory('Delete');\n }\n var blockInfo = this.getParagraphInfo(selection.start);\n selection.editPosition = this.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n if (this.checkInsertPosition(selection)) {\n this.setPositionForHistory(selection.editPosition);\n }\n selection.owner.isShiftingEnabled = true;\n if (paragraph.isEmpty()) {\n this.removeBlock(paragraph);\n this.addRemovedNodes(paragraph);\n if (isNullOrUndefined(nextParagraph)) {\n if (isNullOrUndefined(previousParagraph)) {\n // selection.selectParagraph(newParagraph, true, true);\n var paraEndOffset = selection.getParagraphLength(newParagraph) + 1;\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n this.updateHistoryPosition(selection.start, true);\n //tslint:disable-next-line:max-line-length\n this.editorHistory.currentBaseHistoryInfo.endPosition = this.getHierarchicalIndex(newParagraph, paraEndOffset.toString());\n }\n }\n else {\n selection.selectParagraph(previousParagraph, false);\n this.setPositionForHistory();\n }\n }\n else {\n selection.selectParagraph(nextParagraph, true);\n }\n }\n else {\n paragraph = paragraph.combineWidget(this.viewer);\n // tslint:disable-next-line:max-line-length\n var currentParagraph = this.splitParagraph(paragraph, paragraph.firstChild, 0, selection.start.currentWidget, selection.start.offset, true);\n this.deleteParagraphMark(currentParagraph, selection, 0);\n this.addRemovedNodes(paragraph);\n this.setPositionForCurrentIndex(selection.start, selection.editPosition);\n selection.selectContent(selection.start, true);\n }\n // if (!isRedoing) {\n this.reLayout(selection);\n // }\n }\n else {\n this.singleDeleteInternal(selection, isRedoing, paragraph);\n }\n };\n Editor.prototype.singleDeleteInternal = function (selection, isRedoing, paragraph) {\n if (!isRedoing) {\n selection.owner.isShiftingEnabled = true;\n this.initHistory('Delete');\n }\n if (this.checkInsertPosition(selection)) {\n this.updateHistoryPosition(selection.start, true);\n this.editorHistory.currentBaseHistoryInfo.endPosition = this.editorHistory.currentBaseHistoryInfo.insertPosition;\n }\n var paragraphInfo = this.getParagraphInfo(selection.start);\n var lineWidget = selection.start.currentWidget;\n var removeOffset = selection.start.offset;\n var lineLength = selection.getLineLength(selection.start.currentWidget);\n if (removeOffset >= lineLength) {\n lineWidget = lineWidget.nextLine;\n removeOffset = removeOffset - lineLength;\n }\n this.removeAtOffset(lineWidget, selection, removeOffset);\n this.setPositionParagraph(paragraphInfo.paragraph, paragraphInfo.offset, false);\n if (!isRedoing) {\n this.reLayout(selection);\n }\n else {\n this.fireContentChange();\n }\n };\n Editor.prototype.deleteParagraphMark = function (paragraph, selection, editAction) {\n if (isNullOrUndefined(paragraph.containerWidget)) {\n return;\n }\n paragraph = paragraph.combineWidget(this.viewer);\n var nextParagraph = selection.getNextParagraphBlock(paragraph);\n if (paragraph.isInsideTable && isNullOrUndefined(paragraph.nextWidget) || isNullOrUndefined(nextParagraph)) {\n return;\n }\n //BodyWidget\n var section = paragraph.containerWidget instanceof BodyWidget ? paragraph.containerWidget : undefined;\n var table = undefined;\n if (selection.getNextRenderedBlock(paragraph) instanceof TableWidget) {\n table = selection.getNextRenderedBlock(paragraph);\n }\n else {\n table = undefined;\n }\n if (nextParagraph.isInsideTable && !isNullOrUndefined(table) && table.contains(nextParagraph.associatedCell)) {\n if (editAction < 4) {\n // let nextSection: BodyWidget = table.containerWidget instanceof BodyWidget ? table.containerWidget : undefined;\n // if (section !== nextSection) {\n // this.combineSection(section, selection, nextSection);\n // }\n var offset = 0;\n this.removeBlock(paragraph);\n this.viewer.layout.clearListElementBox(nextParagraph);\n this.viewer.layout.clearListElementBox(paragraph);\n for (var i = paragraph.childWidgets.length - 1; i >= 0; i--) {\n var line = paragraph.childWidgets[i];\n for (var j = line.children.length - 1; j >= 0; j--) {\n var element = line.children[j];\n offset += element.length;\n nextParagraph.firstChild.children.unshift(element);\n element.line = nextParagraph.firstChild;\n // this.layoutInlineCollection(false, 0, nextParagraph.inlines, inline);\n }\n }\n this.viewer.layout.reLayoutParagraph(nextParagraph, 0, 0);\n if (offset > 0) {\n selection.editPosition = this.getHierarchicalIndex(nextParagraph, offset.toString());\n }\n }\n }\n else {\n if (editAction < 4) {\n // let nextSection: WSection = nextParagraph.section instanceof WSection ? nextParagraph.section as WSection : undefined;\n // if (section !== nextSection) {\n // this.combineSection(section, selection, nextSection);\n // }\n var prevLength = paragraph.childWidgets.length - 1;\n var nextPara = nextParagraph.getSplitWidgets();\n nextParagraph = nextParagraph.combineWidget(this.viewer);\n this.viewer.layout.clearListElementBox(nextParagraph);\n this.viewer.layout.clearListElementBox(paragraph);\n this.updateEditPositionOnMerge(paragraph, nextParagraph);\n for (var i = 0; i < nextParagraph.childWidgets.length; i++) {\n var inline = nextParagraph.childWidgets[i];\n nextParagraph.childWidgets.splice(i, 1);\n paragraph.childWidgets.push(inline);\n inline.paragraph = paragraph;\n i--;\n }\n if (nextParagraph.childWidgets.length === 0) {\n nextParagraph.childWidgets.push(new LineWidget(nextParagraph));\n }\n this.removeBlock(nextParagraph);\n this.viewer.layout.reLayoutParagraph(paragraph, 0, 0);\n this.addRemovedNodes(nextParagraph);\n }\n }\n };\n Editor.prototype.updateEditPositionOnMerge = function (currentParagraph, nextParagraph) {\n if (this.viewer.selection.editPosition === this.getHierarchicalIndex(nextParagraph, '0') &&\n nextParagraph.nextRenderedWidget === undefined) {\n // tslint:disable-next-line:max-line-length\n this.viewer.selection.editPosition = this.getHierarchicalIndex(currentParagraph, this.viewer.selection.getLineLength(currentParagraph.lastChild).toString());\n }\n };\n Editor.prototype.checkEndPosition = function (selection) {\n return (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)\n && isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo.endPosition));\n };\n Editor.prototype.checkInsertPosition = function (selection) {\n return (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)\n && isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo.insertPosition));\n };\n Editor.prototype.checkIsNotRedoing = function () {\n return this.viewer.owner.enableHistoryMode && !this.editorHistory.isRedoing;\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.deleteSelectedContentInternal = function (selection, isBackSpace, startPosition, endPosition) {\n var startPos = startPosition;\n var endPos = endPosition;\n if (!startPosition.isExistBefore(endPosition)) {\n startPos = endPosition;\n endPos = startPosition;\n }\n var blockInfo = this.getParagraphInfo(startPos);\n selection.editPosition = this.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n var skipBackSpace = false;\n if (isBackSpace && startPos.isInSameParagraph(endPos)) {\n //Handled specifically to skip removal of contents, if selection is only paragraph mark and next rendered block is table.\n if (startPos.offset < endPos.offset && startPos.offset === selection.getParagraphLength(endPos.paragraph)) {\n var nextBlock = selection.getNextRenderedBlock(startPos.paragraph);\n skipBackSpace = nextBlock instanceof TableWidget;\n }\n //Handled specifically to remove paragraph completely (Delete behavior), if the selected paragraph is empty.\n if (endPos.offset === 1 && endPos.offset > selection.getParagraphLength(endPos.paragraph)\n && !(endPos.paragraph.isInsideTable && isNullOrUndefined(endPos.paragraph.nextWidget))) {\n isBackSpace = false;\n }\n }\n if (!skipBackSpace) {\n selection.owner.isShiftingEnabled = true;\n if (this.checkInsertPosition(selection)) {\n this.editorHistory.currentBaseHistoryInfo.insertPosition = selection.editPosition;\n }\n var editAction = (isBackSpace ? 1 : 0);\n this.deleteSelectedContent(endPos.paragraph, selection, startPos, endPos, editAction);\n }\n return skipBackSpace;\n };\n /**\n * Init EditorHistory\n * @private\n */\n Editor.prototype.initHistory = function (action) {\n if (this.viewer.owner.enableHistoryMode) {\n this.editorHistory.initializeHistory(action);\n }\n };\n /**\n * Init Complex EditorHistory\n * @private\n */\n Editor.prototype.initComplexHistory = function (action) {\n if (this.viewer.owner.enableHistoryMode) {\n this.editorHistory.initComplexHistory(this.viewer.selection, action);\n }\n };\n //Insert Picture implementation starts\n /**\n * Insert image\n * @param {string} base64String\n * @param {number} width\n * @param {number} height\n * @private\n */\n Editor.prototype.insertPicture = function (base64String, width, height) {\n var imageElementBox = new ImageElementBox(true);\n imageElementBox.imageString = base64String;\n imageElementBox.width = width;\n imageElementBox.height = height;\n this.insertPictureInternal(imageElementBox);\n };\n Editor.prototype.insertPictureInternal = function (imageElementBox) {\n var selection = this.viewer.selection;\n this.initHistory('InsertInline');\n this.fitImageToPage(selection, imageElementBox);\n this.insertInlineInSelection(selection, imageElementBox);\n this.reLayout(selection);\n };\n Editor.prototype.fitImageToPage = function (selection, imageElementBox) {\n var section = selection.start.paragraph.bodyWidget;\n var pageWidth = section.sectionFormat.pageWidth - section.sectionFormat.leftMargin - section.sectionFormat.rightMargin;\n var pageHeight = section.sectionFormat.pageHeight - section.sectionFormat.topMargin - section.sectionFormat.topMargin;\n //Resizes image to page size.\n if (imageElementBox.width > pageWidth) {\n imageElementBox.height = imageElementBox.height * pageWidth / imageElementBox.width;\n imageElementBox.width = pageWidth;\n }\n if (imageElementBox.height > pageHeight) {\n imageElementBox.width = imageElementBox.width * pageHeight / imageElementBox.height;\n imageElementBox.height = pageHeight;\n }\n };\n //Insert Picture implementation ends\n /**\n * @private\n */\n Editor.prototype.insertInlineInSelection = function (selection, elementBox) {\n if (this.checkIsNotRedoing()) {\n selection.owner.isShiftingEnabled = true;\n }\n if (!selection.isEmpty) {\n this.removeSelectedContents(selection);\n }\n this.updateInsertPosition();\n this.insertInlineInternal(elementBox);\n if (this.checkEndPosition(selection)) {\n this.updateHistoryPosition(selection.start, false);\n }\n this.fireContentChange();\n };\n /**\n * @private\n */\n Editor.prototype.onPortrait = function () {\n var sectionFormat = new WSectionFormat();\n var width = this.viewer.selection.sectionFormat.pageWidth;\n var height = this.viewer.selection.sectionFormat.pageHeight;\n if (width > height) {\n sectionFormat.pageWidth = height;\n sectionFormat.pageHeight = width;\n }\n this.onApplySectionFormat(undefined, sectionFormat);\n };\n /**\n * @private\n */\n Editor.prototype.onLandscape = function () {\n var sectionFormat = new WSectionFormat();\n var width = this.viewer.selection.sectionFormat.pageWidth;\n var height = this.viewer.selection.sectionFormat.pageHeight;\n if (width < height) {\n sectionFormat.pageWidth = height;\n sectionFormat.pageHeight = width;\n }\n this.onApplySectionFormat(undefined, sectionFormat);\n };\n Editor.prototype.copyValues = function () {\n var format = new WSectionFormat();\n format.bottomMargin = this.viewer.selection.sectionFormat.bottomMargin;\n format.topMargin = this.viewer.selection.sectionFormat.topMargin;\n format.leftMargin = this.viewer.selection.sectionFormat.leftMargin;\n format.rightMargin = this.viewer.selection.sectionFormat.rightMargin;\n format.pageHeight = this.viewer.selection.sectionFormat.pageHeight;\n format.pageWidth = this.viewer.selection.sectionFormat.pageWidth;\n format.footerDistance = this.viewer.selection.sectionFormat.footerDistance;\n format.headerDistance = this.viewer.selection.sectionFormat.headerDistance;\n return format;\n };\n /**\n * @private\n */\n Editor.prototype.changeMarginValue = function (property) {\n var sectionFormat = this.copyValues();\n if (property === 'lastCustomSetting' || property === 'normal') {\n sectionFormat.topMargin = 72;\n sectionFormat.bottomMargin = 72;\n sectionFormat.leftMargin = 72;\n sectionFormat.rightMargin = 72;\n }\n else if (property === 'narrow') {\n sectionFormat.topMargin = 36;\n sectionFormat.bottomMargin = 36;\n sectionFormat.leftMargin = 36;\n sectionFormat.rightMargin = 36;\n }\n else if (property === 'moderate') {\n sectionFormat.topMargin = 72;\n sectionFormat.bottomMargin = 72;\n sectionFormat.leftMargin = 54;\n sectionFormat.rightMargin = 54;\n }\n else if (property === 'wide') {\n sectionFormat.topMargin = 72;\n sectionFormat.bottomMargin = 72;\n sectionFormat.leftMargin = 144;\n sectionFormat.rightMargin = 144;\n }\n else if (property === 'mirrored') {\n sectionFormat.topMargin = 72;\n sectionFormat.bottomMargin = 72;\n sectionFormat.leftMargin = 90;\n sectionFormat.rightMargin = 72;\n }\n else if (property === 'office2003Default') {\n sectionFormat.topMargin = 72;\n sectionFormat.bottomMargin = 72;\n sectionFormat.leftMargin = 90;\n sectionFormat.rightMargin = 90;\n }\n this.onApplySectionFormat(undefined, sectionFormat);\n };\n /**\n * @private\n */\n Editor.prototype.onPaperSize = function (property) {\n var sectionFormat = this.copyValues();\n var width = this.viewer.selection.sectionFormat.pageWidth;\n var height = this.viewer.selection.sectionFormat.pageHeight;\n if (property === 'letter') {\n if (width < height) {\n sectionFormat.pageWidth = 611.9;\n sectionFormat.pageHeight = 791.9;\n }\n else {\n sectionFormat.pageWidth = 791.9;\n sectionFormat.pageHeight = 611.9;\n }\n }\n else if (property === 'tabloid') {\n if (width < height) {\n sectionFormat.pageWidth = 791.9;\n sectionFormat.pageHeight = 1223.9;\n }\n else {\n sectionFormat.pageWidth = 1223.9;\n sectionFormat.pageHeight = 791.9;\n }\n }\n else if (property === 'legal') {\n if (width < height) {\n sectionFormat.pageWidth = 611.9;\n sectionFormat.pageHeight = 1007.9;\n }\n else {\n sectionFormat.pageWidth = 1007.9;\n sectionFormat.pageHeight = 611.9;\n }\n }\n else if (property === 'statement') {\n if (width < height) {\n sectionFormat.pageWidth = 396;\n sectionFormat.pageHeight = 611.9;\n }\n else {\n sectionFormat.pageWidth = 611.9;\n sectionFormat.pageHeight = 396;\n }\n }\n else if (property === 'executive') {\n if (width < height) {\n sectionFormat.pageWidth = 521.9;\n sectionFormat.pageHeight = 755.9;\n }\n else {\n sectionFormat.pageWidth = 755.9;\n sectionFormat.pageHeight = 521.9;\n }\n }\n else if (property === 'a3') {\n if (width < height) {\n sectionFormat.pageWidth = 841.8;\n sectionFormat.pageHeight = 1190.4;\n }\n else {\n sectionFormat.pageWidth = 1190.4;\n sectionFormat.pageHeight = 841.8;\n }\n }\n else if (property === 'a4') {\n if (width < height) {\n sectionFormat.pageWidth = 595.2;\n sectionFormat.pageHeight = 841.8;\n }\n else {\n sectionFormat.pageWidth = 841.8;\n sectionFormat.pageHeight = 595.2;\n }\n }\n else if (property === 'a5') {\n if (width < height) {\n sectionFormat.pageWidth = 419.5;\n sectionFormat.pageHeight = 595.2;\n }\n else {\n sectionFormat.pageWidth = 595.2;\n sectionFormat.pageHeight = 419.5;\n }\n }\n else if (property === 'b4') {\n if (width < height) {\n sectionFormat.pageWidth = 728.4;\n sectionFormat.pageHeight = 1031.7;\n }\n else {\n sectionFormat.pageWidth = 1031.7;\n sectionFormat.pageHeight = 728.4;\n }\n }\n else if (property === 'b5') {\n if (width < height) {\n sectionFormat.pageWidth = 515.8;\n sectionFormat.pageHeight = 728.4;\n }\n else {\n sectionFormat.pageWidth = 728.4;\n sectionFormat.pageHeight = 515.8;\n }\n }\n this.onApplySectionFormat(undefined, sectionFormat);\n };\n //Update List Items\n /**\n * @private\n */\n Editor.prototype.updateListItemsTillEnd = function (blockAdv, updateNextBlockList) {\n var block = updateNextBlockList ? this.viewer.selection.getNextRenderedBlock(blockAdv) : blockAdv;\n while (!isNullOrUndefined(block)) {\n //Updates the list value of the rendered paragraph. \n this.updateRenderedListItems(block);\n block = block.getSplitWidgets().pop().nextRenderedWidget;\n }\n };\n /**\n * @private\n */\n Editor.prototype.updateWholeListItems = function (block) {\n this.viewer.renderedLists.clear();\n var sectionIndex = block.bodyWidget.index;\n var currentBlock;\n for (var j = 0; j < this.viewer.pages.length; j++) {\n var page = this.viewer.pages[j];\n if (page.bodyWidgets[0].index === sectionIndex) {\n currentBlock = page.bodyWidgets[0].firstChild;\n break;\n }\n }\n var isListUpdated = false;\n do {\n isListUpdated = this.updateListItems(currentBlock, block);\n if (isListUpdated) {\n break;\n }\n currentBlock = currentBlock.getSplitWidgets().pop().nextRenderedWidget;\n } while (currentBlock);\n };\n Editor.prototype.updateListItems = function (blockAdv, block) {\n var isListUpdated = false;\n if (blockAdv instanceof ParagraphWidget) {\n isListUpdated = this.updateListItemsForPara(blockAdv, block);\n }\n else {\n isListUpdated = this.updateListItemsForTable(blockAdv, block);\n }\n return isListUpdated;\n };\n Editor.prototype.updateListItemsForTable = function (table, block) {\n if (block instanceof TableWidget && table.equals(block)) {\n return true;\n }\n var row = table.firstChild;\n do {\n var isListUpdated = this.updateListItemsForRow(row, block);\n if (isListUpdated) {\n return true;\n }\n row = row.getSplitWidgets().pop().nextRenderedWidget;\n } while (row);\n return false;\n };\n Editor.prototype.updateListItemsForRow = function (row, block) {\n if (block.isInsideTable && row.childWidgets.indexOf(this.viewer.selection.getContainerCell(block.associatedCell)) !== -1) {\n //Returns as list updated, inorder to start list numbering from first list paragraph of this row.\n return true;\n }\n var cell = row.firstChild;\n do {\n this.updateListItemsForCell(cell, block);\n cell = cell.nextRenderedWidget;\n } while (cell);\n return false;\n };\n Editor.prototype.updateListItemsForCell = function (cell, block) {\n if (cell.childWidgets.length === 0) {\n return;\n }\n var currentBlock = cell.firstChild;\n do {\n this.updateListItems(currentBlock, block);\n currentBlock = currentBlock.getSplitWidgets().pop().nextRenderedWidget;\n } while (currentBlock);\n };\n // public abstract updateListParagraphs(): void;\n /**\n * @private\n */\n Editor.prototype.updateRenderedListItems = function (block) {\n if (block instanceof ParagraphWidget) {\n this.updateRenderedListItemsForPara(block);\n }\n else {\n this.updateRenderedListItemsForTable(block);\n }\n };\n Editor.prototype.updateRenderedListItemsForTable = function (table) {\n var row = table.firstChild;\n do {\n this.updateRenderedListItemsForRow(row);\n row = row.getSplitWidgets().pop().nextRenderedWidget;\n } while (row);\n };\n Editor.prototype.updateRenderedListItemsForRow = function (row) {\n var cell = row.firstChild;\n do {\n this.updateRenderedListItemsForCell(cell);\n cell = cell.nextRenderedWidget;\n } while (cell);\n };\n Editor.prototype.updateRenderedListItemsForCell = function (cell) {\n if (cell.childWidgets.length === 0) {\n return;\n }\n var currentBlock = cell.firstChild;\n do {\n this.updateRenderedListItems(currentBlock);\n currentBlock = currentBlock.getSplitWidgets().pop().nextRenderedWidget;\n } while (currentBlock);\n };\n Editor.prototype.updateListItemsForPara = function (paragraph, block) {\n if (paragraph.equals(block)) {\n return true;\n }\n else {\n var currentList = undefined;\n var listLevelNumber = 0;\n if (!isNullOrUndefined(paragraph.paragraphFormat) && !isNullOrUndefined(paragraph.paragraphFormat.listFormat)) {\n currentList = this.viewer.getListById(paragraph.paragraphFormat.listFormat.listId);\n listLevelNumber = paragraph.paragraphFormat.listFormat.listLevelNumber;\n }\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(currentList) && !isNullOrUndefined(this.viewer.getAbstractListById(currentList.abstractListId))\n // tslint:disable-next-line:max-line-length\n && !isNullOrUndefined(this.viewer.getAbstractListById(currentList.abstractListId).levels[listLevelNumber])) {\n var currentListLevel = this.viewer.layout.getListLevel(currentList, listLevelNumber);\n //Updates the list numbering from document start for reLayouting.\n if (currentListLevel.listLevelPattern !== 'Bullet') {\n this.viewer.layout.getListNumber(paragraph.paragraphFormat.listFormat);\n }\n }\n }\n return false;\n };\n Editor.prototype.updateRenderedListItemsForPara = function (paragraph) {\n if (!isNullOrUndefined(this.viewer.getListById(paragraph.paragraphFormat.listFormat.listId))) {\n var currentList = this.viewer.getListById(paragraph.paragraphFormat.listFormat.listId);\n var listLevelNumber = paragraph.paragraphFormat.listFormat.listLevelNumber;\n if (!isNullOrUndefined(currentList) && !isNullOrUndefined(this.viewer.getAbstractListById(currentList.abstractListId))\n // tslint:disable-next-line:max-line-length\n && !isNullOrUndefined(this.viewer.getAbstractListById(currentList.abstractListId).levels[paragraph.paragraphFormat.listFormat.listLevelNumber])) {\n var currentListLevel = this.viewer.layout.getListLevel(currentList, listLevelNumber);\n //Updates the list numbering from document start for reLayouting.\n if (currentListLevel.listLevelPattern !== 'Bullet') {\n var element = undefined;\n if (paragraph.childWidgets.length > 0) {\n var lineWidget = paragraph.childWidgets[0];\n if (lineWidget.children.length > 0) {\n element = lineWidget.children[0];\n }\n }\n if (!isNullOrUndefined(element)) {\n element.text = this.viewer.layout.getListNumber(paragraph.paragraphFormat.listFormat);\n }\n }\n }\n }\n };\n /**\n * Get logical offset of paragraph.\n * @private\n */\n Editor.prototype.getParagraphInfo = function (position) {\n return this.getParagraphInfoInternal(position.currentWidget, position.offset);\n };\n /**\n * @private\n */\n Editor.prototype.getParagraphInfoInternal = function (line, lineOffset) {\n var paragraph = line.paragraph;\n var offset = this.selection.getParagraphLength(paragraph, line) + lineOffset;\n var previous = paragraph.previousSplitWidget;\n while (previous instanceof ParagraphWidget) {\n paragraph = previous;\n offset += this.viewer.selection.getParagraphLength(paragraph);\n previous = paragraph.previousSplitWidget;\n }\n return { 'paragraph': paragraph, 'offset': offset };\n };\n /**\n * Get offset value to update in selection\n * @private\n */\n Editor.prototype.getOffsetValue = function (selection) {\n if (this.startParagraph) {\n var lineInfo = this.getLineInfo(this.startParagraph, this.startOffset);\n selection.start.setPositionFromLine(lineInfo.line, lineInfo.offset);\n }\n selection.start.updatePhysicalPosition(true);\n if (selection.isEmpty) {\n selection.end.setPositionInternal(selection.start);\n }\n else {\n if (this.endParagraph) {\n var lineInfo = this.getLineInfo(this.endParagraph, this.endOffset);\n selection.end.setPositionFromLine(lineInfo.line, lineInfo.offset);\n }\n selection.end.updatePhysicalPosition(true);\n }\n };\n /**\n * Get offset value to update in selection\n * @private\n */\n Editor.prototype.getLineInfo = function (paragraph, offset) {\n var position = undefined;\n var element = undefined;\n var length = this.selection.getParagraphLength(paragraph);\n var next = paragraph.nextSplitWidget;\n if (offset > length + 1 && isNullOrUndefined(next)) {\n offset = length;\n }\n while (offset > length && next instanceof ParagraphWidget) {\n offset -= length;\n paragraph = next;\n length = this.selection.getParagraphLength(paragraph);\n next = paragraph.nextSplitWidget;\n }\n return this.selection.getLineInfo(paragraph, offset);\n };\n /**\n * @private\n */\n Editor.prototype.setPositionParagraph = function (paragraph, offset, skipSelectionChange) {\n var selection = this.viewer.selection;\n var lineInfo = this.getLineInfo(paragraph, offset);\n selection.start.setPositionFromLine(lineInfo.line, lineInfo.offset);\n selection.end.setPositionInternal(selection.start);\n if (!skipSelectionChange) {\n selection.fireSelectionChanged(true);\n }\n };\n /**\n * @private\n */\n Editor.prototype.setPositionForCurrentIndex = function (textPosition, editPosition) {\n var blockInfo = this.getParagraph({ index: editPosition });\n var lineInfo = this.getLineInfo(blockInfo.paragraph, blockInfo.offset);\n textPosition.setPositionForLineWidget(lineInfo.line, lineInfo.offset);\n };\n /**\n * @private\n */\n Editor.prototype.insertPageNumber = function (numberFormat) {\n if (isNullOrUndefined(numberFormat)) {\n numberFormat = '';\n }\n else {\n numberFormat = ' \\\\*' + numberFormat;\n }\n var fieldCode = 'PAGE ' + numberFormat + ' \\\\* MERGEFORMAT';\n this.createFields(fieldCode);\n };\n /**\n * @private\n */\n Editor.prototype.insertPageCount = function (numberFormat) {\n if (isNullOrUndefined(numberFormat)) {\n numberFormat = '';\n }\n else {\n numberFormat = ' \\*' + numberFormat;\n }\n var fieldCode = 'NUMPAGES ' + numberFormat + ' \\* MERGEFORMAT';\n this.createFields(fieldCode);\n };\n Editor.prototype.createFields = function (fieldCode) {\n var paragraph = new ParagraphWidget();\n var line = new LineWidget(paragraph);\n var fieldBegin = new FieldElementBox(0);\n line.children.push(fieldBegin);\n var fieldtext = new FieldTextElementBox();\n fieldtext.fieldBegin = fieldBegin;\n fieldtext.text = '1';\n var text = new TextElementBox();\n text.text = fieldCode;\n line.children.push(text);\n var fieldSeparator = new FieldElementBox(2);\n fieldSeparator.fieldBegin = fieldBegin;\n fieldBegin.fieldSeparator = fieldSeparator;\n line.children.push(fieldSeparator);\n line.children.push(fieldtext);\n var fieldEnd = new FieldElementBox(1);\n fieldEnd.fieldBegin = fieldBegin;\n fieldEnd.fieldSeparator = fieldSeparator;\n fieldSeparator.fieldEnd = fieldEnd;\n fieldBegin.fieldEnd = fieldEnd;\n line.children.push(fieldEnd);\n fieldBegin.line = line;\n paragraph.childWidgets.push(line);\n var widgets = [];\n widgets.push(paragraph);\n this.viewer.fields.push(fieldBegin);\n this.pasteContentsInternal(widgets);\n };\n /**\n * @private\n */\n Editor.prototype.insertBookmark = function (name) {\n var bookmark = new BookmarkElementBox(0);\n bookmark.name = name;\n var bookmarkEnd = new BookmarkElementBox(1);\n bookmarkEnd.name = name;\n bookmark.reference = bookmarkEnd;\n bookmarkEnd.reference = bookmark;\n this.viewer.bookmarks.add(name, bookmark);\n this.initComplexHistory('InsertBookmark');\n this.insertElements([bookmarkEnd], [bookmark]);\n if (this.editorHistory) {\n this.editorHistory.updateComplexHistoryInternal();\n }\n this.selection.start.setPositionForSelection(bookmark.line, bookmark, 1, this.selection.start.location);\n this.selection.end.setPositionForSelection(bookmarkEnd.line, bookmarkEnd, 0, this.selection.end.location);\n this.selection.fireSelectionChanged(true);\n this.fireContentChange();\n };\n /**\n * @private\n */\n Editor.prototype.deleteBookmark = function (bookmarkName) {\n var bookmarks = this.viewer.bookmarks;\n var bookmark = bookmarks.get(bookmarkName);\n if (bookmark instanceof BookmarkElementBox) {\n var bookmarkEnd = bookmark.reference;\n this.initHistory('DeleteBookmark');\n if (this.editorHistory) {\n this.editorHistory.currentBaseHistoryInfo.setBookmarkInfo(bookmark);\n this.editorHistory.updateHistory();\n }\n this.deleteBookmarkInternal(bookmark);\n }\n this.fireContentChange();\n };\n /**\n * @private\n */\n Editor.prototype.deleteBookmarkInternal = function (bookmark) {\n this.viewer.bookmarks.remove(bookmark.name);\n bookmark.line.children.splice(bookmark.indexInOwner, 1);\n bookmark.reference.line.children.splice(bookmark.reference.indexInOwner, 1);\n };\n /**\n * @private\n */\n Editor.prototype.getSelectionInfo = function () {\n var start = this.selection.start;\n var end = this.selection.end;\n var isEmpty = this.selection.isEmpty;\n if (!this.selection.isForward) {\n start = this.selection.end;\n end = this.selection.start;\n }\n var startElementInfo = start.currentWidget.getInline(start.offset, 0);\n var endElementInfo = end.currentWidget.getInline(end.offset, 0);\n // tslint:disable-next-line:max-line-length\n return { 'start': start.clone(), 'end': end.clone(), 'startElementInfo': startElementInfo, 'endElementInfo': endElementInfo, 'isEmpty': isEmpty };\n };\n /**\n * @private\n */\n Editor.prototype.insertElements = function (endElements, startElements) {\n var info = this.getSelectionInfo();\n if (!isNullOrUndefined(startElements)) {\n this.insertElementsInternal(info.start, startElements);\n }\n if (!isNullOrUndefined(endElements)) {\n this.insertElementsInternal(info.end, endElements);\n }\n };\n /**\n * @private\n */\n Editor.prototype.insertElementsInternal = function (position, elements) {\n this.selection.selectPosition(position, position);\n this.initHistory('InsertElements');\n this.updateInsertPosition();\n var indexInInline = 0;\n var inlineObj = this.selection.start.currentWidget.getInline(this.viewer.selection.start.offset, indexInInline);\n var curInline = inlineObj.element;\n indexInInline = inlineObj.index;\n var firstElement = elements[0];\n this.insertElementInternal(curInline, firstElement, indexInInline, true);\n var index = firstElement.indexInOwner;\n var lastElement = firstElement;\n for (var i = 1; i < elements.length; i++) {\n lastElement = elements[i];\n firstElement.line.children.splice(index + i, 0, lastElement);\n }\n position.setPositionForSelection(lastElement.line, lastElement, lastElement.length, this.selection.start.location);\n this.selection.selectPosition(position, position);\n if (this.editorHistory) {\n if (this.checkEndPosition()) {\n this.updateHistoryPosition(this.selection.start, false);\n }\n this.editorHistory.updateHistory();\n }\n };\n /**\n * @private\n */\n Editor.prototype.getHierarchicalIndex = function (block, offset) {\n var index;\n if (block) {\n if (block instanceof HeaderFooterWidget) {\n var hfString = block.headerFooterType.indexOf('Header') !== -1 ? 'H' : 'F';\n var pageIndex = block.page.index.toString();\n var headerFooterIndex = this.viewer.getHeaderFooter(block.headerFooterType).toString();\n var sectionIndex = block.page.sectionIndex;\n index = sectionIndex + ';' + hfString + ';' + pageIndex + ';' + offset;\n }\n else {\n index = block.index + ';' + offset;\n }\n if (block.containerWidget) {\n if (block instanceof TableCellWidget && block.rowIndex !== block.containerWidget.index) {\n index = block.rowIndex + ';' + index;\n block = block.containerWidget;\n }\n return this.getHierarchicalIndex(block.containerWidget, index);\n }\n }\n return index;\n };\n /**\n * @private\n */\n Editor.prototype.getBlock = function (position) {\n var bodyWidget = this.getBodyWidget(position);\n return this.getBlockInternal(bodyWidget, position);\n };\n /**\n * Return Block relative to position\n * @private\n */\n Editor.prototype.getBlockInternal = function (widget, position) {\n if (position.index === '' || isNullOrUndefined(position)) {\n return undefined;\n }\n var index = position.index.indexOf(';');\n var value = position.index.substring(0, index);\n position.index = position.index.substring(index).replace(';', '');\n var node = widget;\n // if (node instanceof WSection && value === 'HF') {\n // //Gets the block in Header footers.\n // let blockObj: BlockInfo = this.getBlock((node as WSection).headerFooters, position);\n // tslint:disable-next-line:max-line-length\n // return { 'node': (!isNullOrUndefined(blockObj)) ? blockObj.node : undefined, 'position': (!isNullOrUndefined(blockObj)) ? blockObj.position : undefined };\n // }\n index = parseInt(value, 10);\n var childWidget = this.getBlockByIndex(widget, index);\n if (childWidget) {\n var child = childWidget;\n if (position.index.indexOf(';') >= 0) {\n if (child instanceof ParagraphWidget) {\n if (position.index.indexOf(';') >= 0) {\n position.index = '0';\n }\n return { 'node': child, 'position': position };\n }\n if (child instanceof Widget) {\n var blockObj = this.getBlockInternal(child, position);\n // tslint:disable-next-line:max-line-length\n return { 'node': (!isNullOrUndefined(blockObj)) ? blockObj.node : undefined, 'position': (!isNullOrUndefined(blockObj)) ? blockObj.position : undefined };\n }\n }\n else {\n return { 'node': child, 'position': position };\n }\n }\n else {\n return { 'node': node, 'position': position };\n }\n return { 'node': node, 'position': position };\n };\n /**\n * @private\n */\n Editor.prototype.getParagraph = function (position) {\n var paragraph = this.getParagraphInternal(this.getBodyWidget(position), position);\n return { paragraph: paragraph, offset: parseInt(position.index, 10) };\n };\n /**\n * Get paragraph relative to position\n * @private\n */\n Editor.prototype.getParagraphInternal = function (container, position) {\n if (isNullOrUndefined(position.index)) {\n return undefined;\n }\n // let ins: Widget = container;\n var index = position.index.indexOf(';');\n var value = '0';\n if (index >= 0) {\n value = position.index.substring(0, index);\n position.index = position.index.substring(index).replace(';', '');\n }\n // if (container instanceof BodyWidget && value === 'HF') {\n // return this.getParagraph(container.headerFooters, position);\n // }\n index = parseInt(value, 10);\n if (container instanceof TableRowWidget && index >= container.childWidgets.length) {\n position.index = '0;0';\n index = container.childWidgets.length - 1;\n }\n var childWidget = this.getBlockByIndex(container, index);\n if (childWidget) {\n var child = childWidget;\n if (child instanceof ParagraphWidget) {\n if (position.index.indexOf(';') > 0) {\n position.index = '0';\n }\n return child;\n }\n if (child instanceof Widget) {\n if (position.index.indexOf(';') > 0) {\n return this.getParagraphInternal(child, position);\n }\n else {\n //If table is shifted to previous text position then return the first paragraph within table.\n if (child instanceof TableWidget) {\n return this.viewer.selection.getFirstParagraphInFirstCell(child);\n }\n return undefined;\n }\n }\n }\n else if (container) {\n var nextWidget = container.getSplitWidgets().pop().nextRenderedWidget;\n if (nextWidget instanceof Widget) {\n position.index = '0';\n if (nextWidget instanceof TableWidget) {\n return this.viewer.selection.getFirstParagraphInFirstCell(nextWidget);\n }\n return nextWidget;\n }\n }\n return undefined;\n };\n Editor.prototype.getBodyWidget = function (position) {\n var index = position.index.indexOf(';');\n var value = position.index.substring(0, index);\n position.index = position.index.substring(index).replace(';', '');\n var sectionIndex = parseInt(value, 10);\n index = parseInt(value, 10);\n index = position.index.indexOf(';');\n value = position.index.substring(0, index);\n // position = position.substring(index).replace(';', '');\n if (value === 'H' || value === 'F') {\n return this.getHeaderFooterWidget(position);\n }\n index = parseInt(value, 10);\n return this.getBodyWidgetInternal(sectionIndex, index);\n };\n Editor.prototype.getHeaderFooterWidget = function (position) {\n //HEADER OR FOOTER WIDGET\n var index = position.index.indexOf(';');\n var value = position.index.substring(0, index);\n position.index = position.index.substring(index).replace(';', '');\n var isHeader = value === 'H';\n index = position.index.indexOf(';');\n value = position.index.substring(0, index);\n position.index = position.index.substring(index).replace(';', '');\n index = parseInt(value, 10);\n var page = this.viewer.pages[index];\n if (isHeader) {\n return page.headerWidget;\n }\n else {\n return page.footerWidget;\n }\n };\n Editor.prototype.getBodyWidgetInternal = function (sectionIndex, blockIndex) {\n for (var i = 0; i < this.viewer.pages.length; i++) {\n var bodyWidget = this.viewer.pages[i].bodyWidgets[0];\n if (bodyWidget.index === sectionIndex) {\n if (bodyWidget.firstChild.index <= blockIndex && bodyWidget.lastChild.index >= blockIndex) {\n return bodyWidget;\n }\n }\n if (bodyWidget.index > sectionIndex) {\n break;\n }\n }\n return undefined;\n };\n /**\n * @private\n */\n Editor.prototype.getBlockByIndex = function (container, blockIndex) {\n var childWidget;\n if (container) {\n for (var j = 0; j < container.childWidgets.length; j++) {\n if (container.childWidgets[j].index === blockIndex) {\n childWidget = container.childWidgets[j];\n break;\n }\n }\n if (!childWidget && !(container instanceof HeaderFooterWidget)) {\n return this.getBlockByIndex(container.nextSplitWidget, blockIndex);\n }\n }\n return childWidget;\n };\n /**\n * @private\n */\n Editor.prototype.updateHistoryPosition = function (position, isInsertPosition) {\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n var hierarchicalIndex = void 0;\n if (position instanceof TextPosition) {\n var blockInfo = this.getParagraphInfo(position);\n hierarchicalIndex = this.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n }\n else {\n hierarchicalIndex = position;\n }\n if (isInsertPosition) {\n this.editorHistory.currentBaseHistoryInfo.insertPosition = hierarchicalIndex;\n }\n else {\n this.editorHistory.currentBaseHistoryInfo.endPosition = hierarchicalIndex;\n }\n }\n };\n /**\n * Applies the borders based on given settings.\n * @param {BorderSettings} settings\n */\n Editor.prototype.applyBorders = function (settings) {\n this.initHistory('Borders');\n var startPos = this.selection.isForward ? this.selection.start : this.selection.end;\n var endPos = this.selection.isForward ? this.selection.end : this.selection.start;\n var table = startPos.paragraph.associatedCell.ownerTable;\n table = table.combineWidget(this.viewer);\n if (this.editorHistory) {\n var clonedTable = this.cloneTableToHistoryInfo(table);\n }\n var startCell = startPos.paragraph.associatedCell;\n var endCell = endPos.paragraph.associatedCell;\n var cells;\n var border = this.getBorder(settings.borderColor, settings.lineWidth, settings.borderStyle);\n if (this.selection.isEmpty) {\n //Apply borders for current selected cell initially. \n if (settings.type === 'OutsideBorders' || settings.type === 'AllBorders' ||\n settings.type === 'LeftBorder') {\n endCell.cellFormat.borders.left.copyFormat(border);\n }\n if (settings.type === 'OutsideBorders' || settings.type === 'AllBorders' ||\n settings.type === 'TopBorder') {\n endCell.cellFormat.borders.top.copyFormat(border);\n }\n if (settings.type === 'OutsideBorders' || settings.type === 'AllBorders' ||\n settings.type === 'RightBorder') {\n endCell.cellFormat.borders.right.copyFormat(border);\n }\n if (settings.type === 'OutsideBorders' || settings.type === 'AllBorders' ||\n settings.type === 'BottomBorder') {\n endCell.cellFormat.borders.bottom.copyFormat(border);\n }\n if (settings.type === 'AllBorders' || settings.type === 'InsideBorders'\n || settings.type === 'InsideVerticalBorder') {\n endCell.cellFormat.borders.vertical.copyFormat(border);\n }\n if (settings.type === 'AllBorders' || settings.type === 'InsideBorders'\n || settings.type === 'InsideHorizontalBorder') {\n endCell.cellFormat.borders.horizontal.copyFormat(border);\n }\n if (settings.type === 'NoBorder') {\n this.clearAllBorderValues(endCell.cellFormat.borders);\n }\n }\n else {\n if (settings.type === 'OutsideBorders' || settings.type === 'TopBorder') {\n var selectedCell = this.getTopBorderCellsOnSelection();\n for (var i = 0; i < selectedCell.length; i++) {\n selectedCell[i].cellFormat.borders.top.copyFormat(border);\n }\n }\n if (settings.type === 'OutsideBorders' || settings.type === 'LeftBorder') {\n var selectedCell = this.getLeftBorderCellsOnSelection();\n for (var i = 0; i < selectedCell.length; i++) {\n selectedCell[i].cellFormat.borders.left.copyFormat(border);\n }\n }\n if (settings.type === 'OutsideBorders' || settings.type === 'RightBorder') {\n var selectedCell = this.getRightBorderCellsOnSelection();\n for (var i = 0; i < selectedCell.length; i++) {\n selectedCell[i].cellFormat.borders.right.copyFormat(border);\n }\n }\n if (settings.type === 'OutsideBorders' || settings.type === 'BottomBorder') {\n var selectedCell = this.getBottomBorderCellsOnSelection();\n for (var i = 0; i < selectedCell.length; i++) {\n selectedCell[i].cellFormat.borders.bottom.copyFormat(border);\n }\n }\n }\n //Apply Only borders property to selected cells \n if (settings.type === 'BottomBorder' || settings.type === 'AllBorders' || settings.type === 'OutsideBorders'\n || settings.type === 'NoBorder') {\n cells = this.getAdjacentCellToApplyBottomBorder();\n for (var i = 0; i < cells.length; i++) {\n var cell = cells[i];\n if (settings.type === 'NoBorder') {\n cell.cellFormat.borders.top.copyFormat(this.clearBorder());\n }\n else {\n cell.cellFormat.borders.top.copyFormat(border);\n }\n }\n }\n if (settings.type === 'AllBorders' || settings.type === 'OutsideBorders' || settings.type === 'RightBorder'\n || settings.type === 'NoBorder') {\n cells = this.getAdjacentCellToApplyRightBorder();\n for (var i = 0; i < cells.length; i++) {\n var cell = cells[i];\n if (settings.type === 'NoBorder') {\n cell.cellFormat.borders.left.copyFormat(this.clearBorder());\n }\n else {\n cell.cellFormat.borders.left.copyFormat(border);\n }\n }\n }\n if (settings.type === 'AllBorders' || settings.type === 'NoBorder') {\n this.applyAllBorders(border, settings.type);\n }\n if (settings.type === 'InsideBorders' || settings.type === 'InsideVerticalBorder'\n || settings.type === 'InsideHorizontalBorder' || settings.type === 'NoBorder') {\n this.applyInsideBorders(border, settings.type, table);\n }\n this.updateGridForTableDialog(table, false);\n this.reLayout(this.selection, false);\n this.editorHistory.updateHistory();\n };\n Editor.prototype.applyAllBorders = function (border, borderType) {\n var cells = this.selection.getSelectedCells();\n for (var i = 0; i < cells.length; i++) {\n if (borderType === 'NoBorder') {\n cells[i].cellFormat.borders.left.copyFormat(this.clearBorder());\n cells[i].cellFormat.borders.right.copyFormat(this.clearBorder());\n cells[i].cellFormat.borders.top.copyFormat(this.clearBorder());\n cells[i].cellFormat.borders.bottom.copyFormat(this.clearBorder());\n }\n else {\n cells[i].cellFormat.borders.left.copyFormat(border);\n cells[i].cellFormat.borders.right.copyFormat(border);\n cells[i].cellFormat.borders.top.copyFormat(border);\n cells[i].cellFormat.borders.bottom.copyFormat(border);\n }\n }\n };\n Editor.prototype.applyInsideBorders = function (border, borderType, table) {\n var cells = this.selection.getSelectedCells();\n for (var i = 0; i < cells.length; i++) {\n var cell = cells[i];\n var isLastSelectedRow = cell.ownerRow === cells[cells.length - 1].ownerRow;\n var isLastRightCell = (cell.columnIndex + cell.cellFormat.columnSpan - 1) === cells[cells.length - 1].columnIndex;\n if (borderType === 'NoBorder') {\n cell.cellFormat.borders.right.copyFormat(this.clearBorder());\n cell.cellFormat.borders.bottom.copyFormat(this.clearBorder());\n }\n else {\n if (!isLastRightCell && borderType !== 'InsideHorizontalBorder') {\n cell.cellFormat.borders.right.copyFormat(border);\n }\n if (!isLastSelectedRow && borderType !== 'InsideVerticalBorder') {\n cell.cellFormat.borders.bottom.copyFormat(border);\n }\n }\n if (!isLastSelectedRow && borderType !== 'InsideVerticalBorder') {\n // Apply adjacent bottom borders.\n var nextRowIndex = cell.ownerRow.rowIndex + cell.cellFormat.rowSpan;\n var nextRow = table.childWidgets[nextRowIndex];\n if (nextRow) {\n var selectedCells = this.getAdjacentBottomBorderOnEmptyCells(nextRow, cell, true);\n for (var j = 0; j < selectedCells.length; j++) {\n if (borderType === 'NoBorder') {\n selectedCells[j].cellFormat.borders.top.copyFormat(this.clearBorder());\n }\n else {\n selectedCells[j].cellFormat.borders.top.copyFormat(border);\n }\n }\n }\n }\n if (!isLastRightCell && borderType !== 'InsideHorizontalBorder') {\n // Apply adjacent right borders.\n var rightBorderCells = this.getSelectedCellsNextWidgets(cell, table);\n for (var k = 0; k < rightBorderCells.length; k++) {\n if (borderType === 'NoBorder') {\n rightBorderCells[k].cellFormat.borders.left.copyFormat(this.clearBorder());\n }\n else {\n rightBorderCells[k].cellFormat.borders.left.copyFormat(border);\n }\n }\n }\n }\n };\n /**\n * @private\n */\n Editor.prototype.getTopBorderCellsOnSelection = function () {\n var startPos = this.selection.isForward ? this.selection.start : this.selection.end;\n var startCell = startPos.paragraph.associatedCell;\n var topBorderCells = [];\n var cells = this.selection.getSelectedCells();\n for (var i = 0; i < cells.length; i++) {\n if (cells[i].ownerRow === startCell.ownerRow) {\n topBorderCells.push(cells[i]);\n }\n }\n return topBorderCells;\n };\n /**\n * @private\n */\n Editor.prototype.getLeftBorderCellsOnSelection = function () {\n var startPos = this.selection.isForward ? this.selection.start : this.selection.end;\n var startCell = startPos.paragraph.associatedCell;\n var cells = this.selection.getSelectedCells();\n var leftBorderCells = [];\n for (var i = 0; i < cells.length; i++) {\n if (cells[i].columnIndex === startCell.columnIndex) {\n leftBorderCells.push(cells[i]);\n }\n }\n return leftBorderCells;\n };\n /**\n * @private\n */\n Editor.prototype.getRightBorderCellsOnSelection = function () {\n var cells = this.selection.getSelectedCells();\n var rightBorderCells = [];\n for (var i = 0; i < cells.length; i++) {\n if ((cells[i].columnIndex + cells[i].cellFormat.columnSpan - 1) === cells[cells.length - 1].columnIndex) {\n rightBorderCells.push(cells[i]);\n }\n }\n return rightBorderCells;\n };\n /**\n * @private\n */\n Editor.prototype.getBottomBorderCellsOnSelection = function () {\n var endPos = this.selection.isForward ? this.selection.end : this.selection.start;\n var endCell = endPos.paragraph.associatedCell;\n var cells = this.selection.getSelectedCells();\n var bottomBorderCells = [];\n for (var i = 0; i < cells.length; i++) {\n if (cells[i].ownerRow === endCell.ownerRow) {\n bottomBorderCells.push(cells[i]);\n }\n }\n return bottomBorderCells;\n };\n /**\n * @private\n */\n Editor.prototype.clearAllBorderValues = function (borders) {\n var border = this.clearBorder();\n borders.bottom.copyFormat(border);\n borders.left.copyFormat(border);\n borders.right.copyFormat(border);\n borders.top.copyFormat(border);\n borders.vertical.copyFormat(border);\n borders.horizontal.copyFormat(border);\n };\n Editor.prototype.clearBorder = function () {\n var border = new WBorder();\n border.lineStyle = 'Cleared';\n return border;\n };\n /**\n * @private\n */\n Editor.prototype.getAdjacentCellToApplyBottomBorder = function () {\n var cells = [];\n var startPos = this.selection.start;\n var endPos = this.selection.end;\n if (!this.selection.isForward) {\n startPos = this.selection.end;\n endPos = this.selection.start;\n }\n var table = startPos.paragraph.associatedCell.ownerTable;\n table = table.combineWidget(this.viewer);\n var startCell = startPos.paragraph.associatedCell;\n var endCell = endPos.paragraph.associatedCell;\n var nextRowIndex = endCell.ownerRow.rowIndex + endCell.cellFormat.rowSpan;\n var nextRow = table.childWidgets[nextRowIndex];\n if (nextRow) {\n if (endCell.cellFormat.columnSpan > 1) {\n for (var i = endCell.columnIndex; i < endCell.columnIndex + endCell.cellFormat.columnSpan; i++) {\n cells.push(nextRow.childWidgets[i]);\n }\n }\n else {\n cells = this.getAdjacentBottomBorderOnEmptyCells(nextRow, endCell);\n if (!this.selection.isEmpty) {\n for (var i = 0; i < nextRow.childWidgets.length; i++) {\n var nextCellColIndex = nextRow.childWidgets[i].columnIndex;\n if (nextCellColIndex >= startCell.columnIndex && nextCellColIndex <= endCell.columnIndex) {\n cells.push(nextRow.childWidgets[i]);\n }\n }\n }\n }\n }\n return cells;\n };\n Editor.prototype.getAdjacentBottomBorderOnEmptyCells = function (nextRow, cell, isSingleCell) {\n var cells = [];\n if (cell.cellFormat.columnSpan > 1) {\n for (var i = cell.columnIndex; i < cell.columnIndex + cell.cellFormat.columnSpan; i++) {\n cells.push(nextRow.childWidgets[i]);\n }\n }\n else {\n if (this.selection.isEmpty || isSingleCell) {\n for (var i = 0; i < nextRow.childWidgets.length; i++) {\n if (nextRow.childWidgets[i].columnIndex === cell.columnIndex) {\n cells.push(nextRow.childWidgets[i]);\n }\n }\n }\n }\n return cells;\n };\n /**\n * @private\n */\n Editor.prototype.getAdjacentCellToApplyRightBorder = function () {\n var cells = [];\n var startPosIn = this.selection.start;\n var endPosIn = this.selection.end;\n if (!this.selection.isForward) {\n startPosIn = this.selection.end;\n endPosIn = this.selection.start;\n }\n var table = startPosIn.paragraph.associatedCell.ownerTable;\n table = table.combineWidget(this.viewer);\n var startCell = startPosIn.paragraph.associatedCell;\n var endCell = endPosIn.paragraph.associatedCell;\n if (this.selection.isEmpty) {\n var selectedCell = startPosIn.paragraph.associatedCell;\n cells = this.getSelectedCellsNextWidgets(selectedCell, table);\n }\n else {\n // tslint:disable-next-line:max-line-length\n var selectedCells = this.getRightBorderCellsOnSelection();\n for (var i = 0; i < selectedCells.length; i++) {\n var cell = selectedCells[i];\n cells = cells.concat(this.getSelectedCellsNextWidgets(cell, table));\n }\n }\n return cells;\n };\n Editor.prototype.getSelectedCellsNextWidgets = function (selectedCell, table) {\n var cells = [];\n if (selectedCell.nextWidget) {\n cells.push(selectedCell.nextWidget);\n }\n if (selectedCell.cellFormat.rowSpan > 1) {\n var nextRowIndex = selectedCell.ownerRow.rowIndex + selectedCell.cellFormat.rowSpan;\n for (var i = selectedCell.ownerRow.rowIndex + 1; i < nextRowIndex; i++) {\n var nextRow = table.childWidgets[i];\n if (nextRow) {\n for (var j = 0; j < nextRow.childWidgets.length; j++) {\n if (nextRow.childWidgets[j].columnIndex ===\n selectedCell.nextWidget.columnIndex) {\n cells.push(nextRow.childWidgets[j]);\n }\n }\n }\n }\n }\n return cells;\n };\n /**\n * @private\n */\n Editor.prototype.getBorder = function (borderColor, lineWidth, borderStyle) {\n var border = new WBorder();\n border.color = borderColor || '#000000';\n border.lineWidth = lineWidth || 1;\n border.lineStyle = borderStyle || 'Single';\n return border;\n };\n /**\n * Applies borders\n * @param {WBorders} sourceBorders\n * @param {WBorders} applyBorders\n * @private\n */\n Editor.prototype.applyBordersInternal = function (sourceBorders, applyBorders) {\n if (!isNullOrUndefined(sourceBorders) && !isNullOrUndefined(sourceBorders)) {\n if (!isNullOrUndefined(sourceBorders.top)) {\n this.applyBorder(sourceBorders.top, applyBorders.top);\n }\n if (!isNullOrUndefined(sourceBorders.bottom)) {\n this.applyBorder(sourceBorders.bottom, applyBorders.bottom);\n }\n if (!isNullOrUndefined(sourceBorders.left)) {\n this.applyBorder(sourceBorders.left, applyBorders.left);\n }\n if (!isNullOrUndefined(sourceBorders.right)) {\n this.applyBorder(sourceBorders.right, applyBorders.right);\n }\n if (!isNullOrUndefined(sourceBorders.horizontal)) {\n this.applyBorder(sourceBorders.horizontal, applyBorders.horizontal);\n }\n if (!isNullOrUndefined(sourceBorders.vertical)) {\n this.applyBorder(sourceBorders.vertical, applyBorders.vertical);\n }\n if (!isNullOrUndefined(sourceBorders.diagonalUp)) {\n this.applyBorder(sourceBorders.diagonalUp, applyBorders.diagonalUp);\n }\n if (!isNullOrUndefined(sourceBorders.diagonalDown)) {\n this.applyBorder(sourceBorders.diagonalDown, applyBorders.diagonalDown);\n }\n }\n };\n /**\n * Apply shading to table\n * @param {WShading} sourceShading\n * @param {WShading} applyShading\n * @private\n */\n Editor.prototype.applyShading = function (sourceShading, applyShading) {\n if (!isNullOrUndefined(applyShading) && !isNullOrUndefined(sourceShading)) {\n if (!isNullOrUndefined(applyShading.backgroundColor)\n && sourceShading.backgroundColor !== applyShading.backgroundColor) {\n sourceShading.backgroundColor = applyShading.backgroundColor;\n }\n if (!isNullOrUndefined(applyShading.foregroundColor)\n && sourceShading.foregroundColor !== applyShading.foregroundColor) {\n sourceShading.foregroundColor = applyShading.foregroundColor;\n }\n if (!isNullOrUndefined(applyShading.textureStyle)\n && sourceShading.textureStyle !== applyShading.textureStyle) {\n sourceShading.textureStyle = applyShading.textureStyle;\n }\n }\n };\n Editor.prototype.applyBorder = function (sourceBorder, applyBorder) {\n if (!isNullOrUndefined(sourceBorder) && !isNullOrUndefined(applyBorder)) {\n if (!isNullOrUndefined(applyBorder.color)\n && sourceBorder.color !== applyBorder.color) {\n sourceBorder.color = applyBorder.color;\n }\n if (!isNullOrUndefined(applyBorder.lineStyle)\n && sourceBorder.lineStyle !== applyBorder.lineStyle) {\n sourceBorder.lineStyle = applyBorder.lineStyle;\n }\n if (!isNullOrUndefined(applyBorder.lineWidth)\n && sourceBorder.lineWidth !== applyBorder.lineWidth) {\n sourceBorder.lineWidth = applyBorder.lineWidth;\n }\n if (!isNullOrUndefined(applyBorder.shadow)\n && sourceBorder.shadow !== applyBorder.shadow) {\n sourceBorder.shadow = applyBorder.shadow;\n }\n if (!isNullOrUndefined(applyBorder.space)\n && sourceBorder.space !== applyBorder.space) {\n sourceBorder.space = applyBorder.space;\n }\n }\n };\n /**\n * Apply Table Format changes\n * @param {Selection} selection\n * @param {WTableFormat} format\n * @private\n */\n Editor.prototype.onTableFormat = function (format) {\n if (!isNullOrUndefined(this.selection.tableFormat)) {\n this.viewer.owner.isShiftingEnabled = true;\n this.editorHistory.initializeHistory('TableFormat');\n var table = this.selection.start.paragraph.associatedCell.ownerTable.combineWidget(this.viewer);\n this.applyTableFormat(table, undefined, format);\n this.reLayout(this.selection, false);\n }\n };\n /**\n * @private\n */\n Editor.prototype.applyTableFormat = function (table, property, value) {\n this.applyTablePropertyValue(this.viewer.selection, undefined, value, table);\n };\n // tslint:disable-next-line:max-line-length\n Editor.prototype.applyTablePropertyValue = function (selection, property, value, table) {\n var sourceFormat = table.tableFormat;\n if (!isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n value = this.editorHistory.currentBaseHistoryInfo.addModifiedTableProperties(sourceFormat, property, value);\n }\n if (value instanceof WTableFormat) {\n if (isNullOrUndefined(property)) {\n this.handleTableFormat(sourceFormat, value);\n }\n return;\n }\n if (property === 'preferredWidth') {\n sourceFormat.preferredWidth = value;\n }\n else if (property === 'leftIndent') {\n sourceFormat.leftIndent = value;\n }\n else if (property === 'tableAlignment') {\n sourceFormat.tableAlignment = value;\n }\n else if (property === 'cellSpacing') {\n sourceFormat.cellSpacing = value;\n }\n else if (property === 'leftMargin') {\n sourceFormat.leftMargin = value;\n }\n else if (property === 'rightMargin') {\n sourceFormat.rightMargin = value;\n }\n else if (property === 'topMargin') {\n sourceFormat.topMargin = value;\n }\n else if (property === 'bottomMargin') {\n sourceFormat.bottomMargin = value;\n }\n else if (property === 'preferredWidthType') {\n sourceFormat.preferredWidthType = value;\n }\n if (property === 'shading') {\n sourceFormat.shading = value;\n }\n else if (property === 'borders') {\n sourceFormat.borders = value;\n }\n // if (!isNullOrUndefined(table)) {\n // this.layoutItemBlock(table, true);\n // }\n };\n Editor.prototype.handleTableFormat = function (tableFormat, applyFormat) {\n if (this.isBordersAndShadingDialog || this.editorHistory.isUndoing\n || this.editorHistory.isRedoing) {\n if (!isNullOrUndefined(tableFormat.borders)) {\n this.applyBordersInternal(tableFormat.borders, applyFormat.borders);\n }\n if (!isNullOrUndefined(tableFormat.shading)) {\n this.applyShading(tableFormat.shading, applyFormat.shading);\n }\n }\n if (!this.isBordersAndShadingDialog) {\n if (applyFormat.hasValue('preferredWidth') && applyFormat.preferredWidth !== tableFormat.preferredWidth) {\n tableFormat.preferredWidth = applyFormat.preferredWidth;\n }\n if (applyFormat.hasValue('preferredWidthType') && applyFormat.preferredWidthType !== tableFormat.preferredWidthType) {\n tableFormat.preferredWidthType = applyFormat.preferredWidthType;\n }\n if (applyFormat.hasValue('tableAlignment') && applyFormat.tableAlignment !== tableFormat.tableAlignment) {\n tableFormat.tableAlignment = applyFormat.tableAlignment;\n }\n if (applyFormat.hasValue('leftIndent') && applyFormat.leftIndent !== tableFormat.leftIndent) {\n tableFormat.leftIndent = applyFormat.leftIndent;\n }\n }\n this.updateGridForTableDialog(tableFormat.ownerBase, false);\n };\n Editor.prototype.updateGridForTableDialog = function (table, shiftNextItem) {\n if (table.tableHolder) {\n table.updateRowIndex(0);\n table.calculateGrid();\n table.isGridUpdated = false;\n }\n this.viewer.layout.reLayoutTable(table);\n };\n /**\n * Applies Row Format Changes\n * @param {Selection} selection\n * @param {WRowFormat} format\n * @param {WRow} row\n * @private\n */\n Editor.prototype.onRowFormat = function (format) {\n if (isNullOrUndefined(this.selection) || isNullOrUndefined(format)) {\n return;\n }\n this.editorHistory.initializeHistory('RowFormat');\n this.viewer.owner.isShiftingEnabled = true;\n var rowStartPos = this.selection.isForward ? this.selection.start : this.selection.end;\n var rowEndPos = this.selection.isForward ? this.selection.end : this.selection.start;\n var table = rowStartPos.paragraph.associatedCell.ownerTable.combineWidget(this.viewer);\n this.applyRowFormat(rowStartPos.paragraph.associatedCell.ownerRow, rowStartPos, rowEndPos, undefined, format);\n this.reLayout(this.selection, false);\n };\n Editor.prototype.applyRowFormat = function (row, start, end, property, value) {\n this.applyRowPropertyValue(this.viewer.selection, property, value, row);\n if (end.paragraph.associatedCell.ownerRow === row) {\n return;\n }\n var newRow = row.nextWidget;\n if (!isNullOrUndefined(newRow)) {\n this.applyRowFormat(newRow, start, end, property, value);\n }\n };\n Editor.prototype.applyRowPropertyValue = function (selection, property, value, row) {\n var applyFormat = row.rowFormat;\n if (!isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n value = this.editorHistory.currentBaseHistoryInfo.addModifiedRowProperties(applyFormat, property, value);\n }\n if (value instanceof WRowFormat) {\n if (isNullOrUndefined(property)) {\n this.handleRowFormat(value, applyFormat);\n }\n return;\n }\n if (property === 'heightType') {\n applyFormat.heightType = value;\n }\n else if (property === 'height') {\n applyFormat.height = value;\n }\n else if (property === 'isHeader') {\n applyFormat.isHeader = value;\n }\n else if (property === 'allowBreakAcrossPages') {\n applyFormat.allowBreakAcrossPages = value;\n }\n if (!isNullOrUndefined(row.ownerTable)) {\n this.layoutItemBlock(row.ownerTable, true);\n }\n };\n Editor.prototype.handleRowFormat = function (format, applyFormat) {\n if (format.hasValue('allowBreakAcrossPages') && format.allowBreakAcrossPages !== applyFormat.allowBreakAcrossPages) {\n applyFormat.allowBreakAcrossPages = format.allowBreakAcrossPages;\n }\n if (format.hasValue('isHeader') && format.isHeader !== applyFormat.isHeader) {\n applyFormat.isHeader = format.isHeader;\n }\n if (format.hasValue('heightType') && format.heightType !== applyFormat.heightType) {\n applyFormat.heightType = format.heightType;\n }\n if (format.hasValue('height') && format.height !== applyFormat.height) {\n applyFormat.height = format.height;\n }\n this.updateGridForTableDialog(applyFormat.ownerBase.ownerTable, true);\n };\n /**\n * Applies Cell Format changes\n * @param {Selection} selection\n * @param {WCellFormat} format\n * @param {WCell} cell\n * @private\n */\n Editor.prototype.onCellFormat = function (format) {\n if (isNullOrUndefined(this.selection) || isNullOrUndefined(format)) {\n return;\n }\n this.editorHistory.initializeHistory('CellFormat');\n this.updateFormatForCell(this.selection, undefined, format);\n this.reLayout(this.selection, false);\n };\n /**\n * @private\n */\n Editor.prototype.updateCellMargins = function (selection, value) {\n var cellStartPosition = selection.start;\n var cellEndPosition = selection.end;\n if (!selection.isForward) {\n cellStartPosition = selection.end;\n cellEndPosition = selection.start;\n }\n this.initHistoryPosition(selection, cellStartPosition);\n // tslint:disable-next-line:max-line-length\n this.viewer.owner.cellOptionsDialogModule.applyCellmarginsValue(cellStartPosition.paragraph.associatedCell.ownerRow, cellStartPosition, cellEndPosition, value);\n };\n /**\n * @private\n */\n Editor.prototype.updateFormatForCell = function (selection, property, value) {\n var start = selection.start;\n var end = selection.end;\n if (!selection.isForward) {\n start = selection.end;\n end = selection.start;\n }\n var startCell = start.paragraph.associatedCell;\n var endCell = end.paragraph.associatedCell;\n var cells;\n var table = startCell.ownerTable.combineWidget(this.viewer);\n var appliedFormat;\n for (var k = startCell.columnIndex; k <= endCell.columnIndex; k++) {\n cells = this.getSelectedCellInColumn(startCell.ownerTable, startCell.ownerRow.rowIndex, k, endCell.ownerRow.rowIndex);\n for (var i = 0; i < cells.length; i++) {\n appliedFormat = this.applyCellPropertyValue(this.viewer.selection, property, value, cells[i].cellFormat);\n }\n }\n this.updateGridForTableDialog(table, false);\n };\n /**\n * @private\n */\n Editor.prototype.getSelectedCellInColumn = function (table, rowStartIndex, columnIndex, rowEndIndex) {\n var cells = [];\n for (var i = rowStartIndex; i <= rowEndIndex; i++) {\n var row = table.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n if (row.childWidgets[j].columnIndex === columnIndex) {\n cells.push(row.childWidgets[j]);\n }\n }\n }\n return cells;\n };\n Editor.prototype.getColumnCells = function (table, columnIndex, isLeftSideCollection) {\n var cells = [];\n for (var k = 0; k < table.childWidgets.length; k++) {\n var row = table.childWidgets[k];\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cell = row.childWidgets[i];\n if (isLeftSideCollection) {\n if (cell.columnIndex + cell.cellFormat.columnSpan === columnIndex) {\n cells.push(cell);\n }\n }\n else {\n if (cell.columnIndex === columnIndex) {\n cells.push(cell);\n }\n }\n }\n }\n return cells;\n };\n /**\n * @private\n */\n Editor.prototype.getTableWidth = function (table) {\n if (table.tableFormat.preferredWidth !== 0 || table.tableFormat.preferredWidthType === 'Percent') {\n if (table.tableFormat.preferredWidthType === 'Auto' || table.tableFormat.preferredWidthType === 'Point') {\n return table.tableFormat.preferredWidth;\n }\n else {\n if (table.tableFormat.preferredWidth === 0) {\n return 0;\n }\n else {\n return HelperMethods.convertPixelToPoint(this.viewer.clientArea.width) / 100 * table.tableFormat.preferredWidth;\n }\n }\n }\n return HelperMethods.convertPixelToPoint(this.viewer.layout.getTableWidth(table));\n };\n Editor.prototype.applyCellPropertyValue = function (selection, property, value, applyFormat) {\n if (!isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n value = this.editorHistory.currentBaseHistoryInfo.addModifiedCellProperties(applyFormat, property, value);\n }\n if (value instanceof WCellFormat) {\n if (isNullOrUndefined(property)) {\n this.handleCellFormat(value, applyFormat);\n }\n return value;\n }\n if (property === 'leftMargin') {\n applyFormat.leftMargin = value;\n }\n else if (property === 'topMargin') {\n applyFormat.topMargin = value;\n }\n else if (property === 'rightMargin') {\n applyFormat.rightMargin = value;\n }\n else if (property === 'bottomMargin') {\n applyFormat.bottomMargin = value;\n }\n else if (property === 'preferredWidth') {\n applyFormat.preferredWidth = value;\n applyFormat.cellWidth = value;\n }\n else if (property === 'cellWidth') {\n applyFormat.cellWidth = value;\n }\n else if (property === 'columnSpan') {\n applyFormat.columnSpan = value;\n }\n else if (property === 'rowSpan') {\n applyFormat.rowSpan = value;\n }\n else if (property === 'preferredWidthType') {\n applyFormat.preferredWidthType = value;\n }\n else if (property === 'verticalAlignment') {\n applyFormat.verticalAlignment = value;\n }\n if (property === 'shading') {\n applyFormat.shading = value;\n }\n else if (property === 'borders') {\n applyFormat.borders = value;\n }\n return undefined;\n };\n Editor.prototype.handleCellFormat = function (cellFormat, applyFormat) {\n if (!isNullOrUndefined(cellFormat) && !isNullOrUndefined(applyFormat)) {\n if (this.isBordersAndShadingDialog) {\n if (!isNullOrUndefined(cellFormat.borders)) {\n this.applyBordersInternal(applyFormat.borders, cellFormat.borders);\n }\n if (!isNullOrUndefined(cellFormat.shading)) {\n this.applyShading(applyFormat.shading, cellFormat.shading);\n }\n // this.layoutRow((applyFormat.ownerBase as TableCellWidget).ownerRow, this.viewer, false);\n }\n else {\n if (cellFormat.hasValue('preferredWidth') && applyFormat.preferredWidth !== cellFormat.preferredWidth) {\n applyFormat.preferredWidth = cellFormat.preferredWidth;\n }\n if (cellFormat.hasValue('preferredWidthType') && applyFormat.preferredWidthType !== cellFormat.preferredWidthType) {\n applyFormat.preferredWidthType = cellFormat.preferredWidthType;\n }\n if (cellFormat.hasValue('verticalAlignment') && applyFormat.verticalAlignment !== cellFormat.verticalAlignment) {\n applyFormat.verticalAlignment = cellFormat.verticalAlignment;\n }\n }\n }\n };\n /**\n * @private\n */\n Editor.prototype.destroy = function () {\n this.viewer = undefined;\n this.nodes = [];\n };\n Editor.prototype.isTocField = function (element) {\n if (element instanceof FieldElementBox) {\n var nextElement = element.nextNode;\n if (element instanceof FieldElementBox && element.fieldType === 0 && nextElement instanceof TextElementBox\n && nextElement.text.trim().toLowerCase().indexOf('toc') === 0) {\n return true;\n }\n }\n return false;\n };\n /**\n * Updates the table of contents.\n * @private\n */\n Editor.prototype.updateToc = function (tocField) {\n if (isNullOrUndefined(tocField)) {\n tocField = this.selection.getTocFieldInternal();\n }\n if (!this.isTocField(tocField)) {\n return;\n }\n // Decode field code to get parameters\n var code = this.selection.getFieldCode(tocField);\n if (code.toLocaleLowerCase().indexOf('toc') !== -1) {\n this.insertTableOfContents(this.validateTocSettings(this.getTocSettings(code, tocField)));\n }\n };\n Editor.prototype.getTocSettings = function (code, tocField) {\n var tocSettings = {};\n tocSettings.includePageNumber = true;\n tocSettings.rightAlign = true;\n // Decode field code to get parameters\n if (code.toLowerCase() === 'toc \\\\mergeformat') {\n tocSettings.startLevel = 1;\n tocSettings.endLevel = 3;\n }\n else {\n var swtiches = code.split('\\\\');\n for (var i = 0; i < swtiches.length; i++) {\n var swtch = swtiches[i];\n if (swtch.length === 0) {\n continue;\n }\n switch (swtch[0]) {\n case 'o':\n if (!isNullOrUndefined(swtch.match(/\\d+/g))) {\n var levels = swtch.match(/\\d+/g).map(Number);\n tocSettings.startLevel = levels[0];\n tocSettings.endLevel = levels[1];\n }\n else {\n tocSettings.startLevel = 1;\n tocSettings.endLevel = 9;\n }\n break;\n case 'h':\n tocSettings.includeHyperlink = true;\n break;\n case 'n':\n tocSettings.includePageNumber = false;\n break;\n case 'p':\n tocSettings.rightAlign = false;\n break;\n case 'u':\n tocSettings.includeOutlineLevels = true;\n break;\n case 't':\n this.decodeTSwitch(tocSettings, swtch);\n break;\n }\n }\n }\n //assigns tab leader.\n var tabs = tocField.paragraph.paragraphFormat.tabs;\n if (tabs.length > 0) {\n tocSettings.tabLeader = tabs[0].tabLeader;\n }\n return tocSettings;\n };\n Editor.prototype.decodeTSwitch = function (tocSettings, tSwitch) {\n tocSettings.levelSettings = {};\n tSwitch = tSwitch.replace('t', '');\n tSwitch = tSwitch.replace('\"', '');\n tSwitch = tSwitch.replace('\"', '');\n tSwitch = tSwitch.trim();\n var levels = tSwitch.split(',');\n for (var index = 0; index < levels.length; index++) {\n tocSettings.levelSettings[levels[index]] = parseInt(levels[index + 1], 10);\n index++;\n }\n };\n /**\n * Inserts, modifies or updates the table of contents based on given settings.\n * @param {TableOfContentsSettings} tableOfContentsSettings\n */\n Editor.prototype.insertTableOfContents = function (tableOfContentsSettings) {\n this.initComplexHistory('TOC');\n if (isNullOrUndefined(tableOfContentsSettings)) {\n //Initializes with default value.\n tableOfContentsSettings = {};\n tableOfContentsSettings.startLevel = 1;\n tableOfContentsSettings.endLevel = 3;\n tableOfContentsSettings.includeHyperlink = true;\n tableOfContentsSettings.includeOutlineLevels = true;\n tableOfContentsSettings.includePageNumber = true;\n tableOfContentsSettings.rightAlign = true;\n tableOfContentsSettings.tabLeader = 'Dot';\n }\n var tocField = undefined;\n var code = undefined;\n if (this.selection.contextType === 'TableOfContents') {\n tocField = this.selection.getTocFieldInternal();\n }\n if (tocField instanceof FieldElementBox) {\n this.selection.start.setPositionForSelection(tocField.line, tocField, 0, this.selection.start.location);\n this.selection.end.setPositionForSelection(tocField.fieldEnd.line, tocField.fieldEnd, 2, this.selection.end.location);\n this.onDelete();\n }\n // Build TOC field code based on parameter\n code = this.constructTocFieldCode(tableOfContentsSettings);\n var isStartParagraph = this.selection.start.isAtParagraphStart;\n var blockInfo = this.getParagraphInfo(this.selection.start);\n var initialStart = this.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n // Build TOC fields\n // tslint:disable-next-line:max-line-length\n var widgets = this.buildToc(this.validateTocSettings(tableOfContentsSettings), code, true, isStartParagraph);\n if (widgets.length > 0) {\n var tocLastPara = new ParagraphWidget();\n var tocLastLine = new LineWidget(tocLastPara);\n tocLastPara.childWidgets.push(tocLastLine);\n var index = 0;\n if (!isStartParagraph) {\n index = 1;\n }\n var line = widgets[index].childWidgets[0];\n var fieldBegin = line.children[0];\n this.appendEndField(fieldBegin, tocLastLine);\n widgets.push(tocLastPara);\n this.appendEmptyPara(widgets);\n }\n this.setPositionForCurrentIndex(this.selection.start, initialStart);\n this.selection.end.setPositionInternal(this.selection.start);\n this.pasteContentsInternal(widgets);\n this.updatePageRef();\n if (this.editorHistory) {\n this.editorHistory.updateComplexHistoryInternal();\n }\n };\n Editor.prototype.appendEmptyPara = function (widgets) {\n var emptyPara = new ParagraphWidget();\n var emptyLine = new LineWidget(emptyPara);\n emptyPara.childWidgets.push(emptyLine);\n widgets.push(emptyPara);\n };\n Editor.prototype.constructTocFieldCode = function (tocSettings) {\n var tocFieldCode = 'TOC';\n //appends styles level\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(tocSettings.startLevel) && tocSettings.startLevel !== 0 && !isNullOrUndefined(tocSettings.endLevel) && tocSettings.endLevel !== 0) {\n tocFieldCode = tocFieldCode + ' \\\\o \"' + tocSettings.startLevel + '-' + tocSettings.endLevel + '\"';\n }\n if (tocSettings.includePageNumber && !tocSettings.rightAlign) {\n tocFieldCode = tocFieldCode + ' \\\\p \" \"';\n }\n if (!tocSettings.includePageNumber) {\n tocFieldCode = tocFieldCode + ' \\\\n';\n }\n if (tocSettings.includeHyperlink) {\n tocFieldCode = tocFieldCode + ' \\\\h \\\\z';\n }\n if (tocSettings.includeOutlineLevels) {\n tocFieldCode = tocFieldCode + ' \\\\u';\n }\n var tSwitch = this.constructTSwitch(tocSettings);\n if (tSwitch.length > 6) {\n tocFieldCode = tocFieldCode + tSwitch;\n }\n return tocFieldCode;\n };\n Editor.prototype.constructTSwitch = function (tocSettings) {\n var tSwitch = '';\n var prefix = ' \\\\t ';\n if (!isNullOrUndefined(tocSettings.levelSettings)) {\n for (var _i = 0, _a = Object.keys(tocSettings.levelSettings); _i < _a.length; _i++) {\n var key = _a[_i];\n tSwitch = tSwitch + key + ',' + tocSettings.levelSettings[key].toString() + ',';\n }\n }\n tSwitch = tSwitch.slice(0, -1);\n tSwitch = prefix + '\"' + tSwitch + '\"';\n return tSwitch;\n };\n /**\n * Appends the end filed to the given line.\n */\n Editor.prototype.appendEndField = function (fieldBegin, lineWidget) {\n var fieldEnd = new FieldElementBox(1);\n fieldEnd.fieldSeparator = fieldBegin.fieldSeparator;\n fieldBegin.fieldSeparator.fieldEnd = fieldEnd;\n fieldEnd.fieldBegin = fieldBegin;\n fieldEnd.fieldBegin.fieldEnd = fieldEnd;\n fieldEnd.line = lineWidget;\n lineWidget.children.push(fieldEnd);\n };\n Editor.prototype.validateTocSettings = function (tocSettings) {\n if (isNullOrUndefined(tocSettings.startLevel) || tocSettings.startLevel < 1) {\n tocSettings.startLevel = 1;\n }\n if (isNullOrUndefined(tocSettings.endLevel) || tocSettings.endLevel < tocSettings.endLevel) {\n tocSettings.endLevel = tocSettings.startLevel > 3 ? tocSettings.startLevel : 3;\n }\n if (isNullOrUndefined(tocSettings.includeHyperlink)) {\n tocSettings.includeHyperlink = false;\n }\n if (isNullOrUndefined(tocSettings.includePageNumber)) {\n tocSettings.includePageNumber = false;\n }\n if (isNullOrUndefined(tocSettings.rightAlign)) {\n tocSettings.rightAlign = false;\n }\n if (isNullOrUndefined(tocSettings.levelSettings)) {\n tocSettings.levelSettings = {};\n }\n return tocSettings;\n };\n /**\n * Builds the TOC\n * @private\n */\n // tslint:disable-next-line:max-line-length\n Editor.prototype.buildToc = function (tocSettings, fieldCode, isFirstPara, isStartParagraph) {\n var tocDomBody = this.viewer.pages[0].bodyWidgets[0];\n var widgets = [];\n this.createHeadingLevels(tocSettings);\n if (tocSettings.includeOutlineLevels) {\n this.createOutlineLevels(tocSettings);\n }\n var widget = tocDomBody.childWidgets[0];\n while (widget !== undefined) {\n // tslint:disable-next-line:max-line-length\n if (widget instanceof ParagraphWidget && (this.isHeadingStyle(widget) || (tocSettings.includeOutlineLevels && this.isOutlineLevelStyle(widget)))) {\n var bookmarkName = this.insertTocBookmark(widget);\n // tslint:disable-next-line:max-line-length\n this.createTOCWidgets(widget, widgets, fieldCode, bookmarkName, tocSettings, isFirstPara, isStartParagraph);\n isFirstPara = false;\n }\n widget = this.selection.getNextParagraphBlock(widget);\n }\n this.tocStyles = {};\n return widgets;\n };\n Editor.prototype.createOutlineLevels = function (settings) {\n for (var i = settings.startLevel; i <= settings.endLevel; i++) {\n var levelStyle = 'Level' + i.toString();\n if (isNullOrUndefined(this.tocStyles[levelStyle])) {\n this.tocStyles[levelStyle] = i;\n }\n }\n };\n /**\n * Creates TOC heading styles\n * @param start - lower heading level\n * @param end - higher heading level\n */\n Editor.prototype.createHeadingLevels = function (settings) {\n var normalStyle = 'Normal';\n for (var i = settings.startLevel; i <= settings.endLevel; i++) {\n var headingStyle = 'Heading ' + i.toString();\n if (isNullOrUndefined(this.tocStyles[headingStyle])) {\n this.tocStyles[headingStyle] = i;\n }\n }\n if (!isNullOrUndefined(settings.levelSettings)) {\n for (var _i = 0, _a = Object.keys(settings.levelSettings); _i < _a.length; _i++) {\n var key = _a[_i];\n this.tocStyles[key] = settings.levelSettings[key];\n }\n }\n };\n /**\n * Checks the current style is heading style.\n */\n Editor.prototype.isHeadingStyle = function (para) {\n var style = para.paragraphFormat.baseStyle;\n if (style !== undefined) {\n return isNullOrUndefined(this.tocStyles[style.name]) ? false : true;\n }\n return false;\n };\n Editor.prototype.isOutlineLevelStyle = function (para) {\n var styleName = para.paragraphFormat.outlineLevel;\n return isNullOrUndefined(this.tocStyles[styleName]) ? false : true;\n };\n /**\n * Creates TOC field element.\n */\n Editor.prototype.createTocFieldElement = function (lineWidget, fieldCode) {\n //begin\n var fieldBegin = new FieldElementBox(0);\n fieldBegin.hasFieldEnd = true;\n fieldBegin.line = lineWidget;\n lineWidget.children.push(fieldBegin);\n //format toc\n var textElement = new TextElementBox();\n textElement.text = fieldCode;\n textElement.line = lineWidget;\n lineWidget.children.push(textElement);\n //field separator\n var fieldSeparator = new FieldElementBox(2);\n fieldSeparator.fieldBegin = fieldBegin;\n fieldSeparator.fieldBegin.fieldSeparator = fieldSeparator;\n fieldSeparator.line = lineWidget;\n lineWidget.children.push(fieldSeparator);\n return fieldBegin;\n };\n /**\n * Updates TOC para\n */\n // tslint:disable-next-line:max-line-length\n Editor.prototype.createTOCWidgets = function (widget, widgets, fieldCode, bookmarkName, tocSettings, isFirstPara, isStartParagraph) {\n var fieldBegin = undefined;\n var tocPara = undefined;\n var tocLine = undefined;\n // tslint:disable-next-line:max-line-length\n if (widgets.length === 1 && widgets[0].childWidgets[0].children.length === 3 && !isNullOrUndefined(isFirstPara) && !isFirstPara) {\n tocLine = widgets[0].childWidgets[0];\n }\n else {\n tocPara = new ParagraphWidget();\n var styleName = undefined;\n //Adds toc syles into paragraph\n var headingStyleName = widget.paragraphFormat.baseStyle.name;\n if (tocSettings.includeOutlineLevels && isNullOrUndefined(this.tocStyles[headingStyleName])) {\n styleName = widget.paragraphFormat.outlineLevel;\n }\n else {\n styleName = headingStyleName;\n }\n var tocStyleName = 'Toc' + this.tocStyles[styleName];\n var paraStyle = this.viewer.styles.findByName(tocStyleName, 'Paragraph');\n if (isNullOrUndefined(paraStyle)) {\n // tslint:disable-next-line:max-line-length\n this.viewer.owner.parser.parseStyle(JSON.parse(this.getCompleteStyles()), JSON.parse(this.viewer.preDefinedStyles.get(tocStyleName)), this.viewer.styles);\n paraStyle = this.viewer.styles.findByName(tocStyleName, 'Paragraph');\n }\n tocPara.paragraphFormat.ApplyStyle(paraStyle);\n //Creates right tab for page number.\n if (tocSettings.rightAlign && tocSettings.includePageNumber) {\n var tabStop = new WTabStop();\n tabStop.position = 467.5;\n tabStop.tabLeader = tocSettings.tabLeader;\n tabStop.deletePosition = 0;\n tabStop.tabJustification = 'Right';\n tocPara.paragraphFormat.tabs.push(tabStop);\n }\n tocLine = new LineWidget(tocPara);\n tocPara.childWidgets.push(tocLine);\n }\n //creates toc field element if it is insert\n if ((isFirstPara !== undefined) && isFirstPara) {\n if (!isNullOrUndefined(isStartParagraph) && !isStartParagraph) {\n this.appendEmptyPara(widgets);\n }\n this.createTocFieldElement(tocLine, fieldCode);\n }\n var text = '';\n for (var lineIndex = 0; lineIndex < widget.childWidgets.length; lineIndex++) {\n var lineWidget = widget.childWidgets[lineIndex];\n for (var elementIndex = 0; elementIndex < lineWidget.children.length; elementIndex++) {\n var element = lineWidget.children[elementIndex];\n if (element instanceof TextElementBox) {\n text = text + element.text;\n }\n }\n }\n if (text !== '') {\n // inserts hyperlink\n if (tocSettings.includeHyperlink && (bookmarkName !== undefined)) {\n fieldBegin = this.insertTocHyperlink(tocLine, bookmarkName, text);\n }\n else {\n var span = new TextElementBox();\n span.text = text;\n span.line = tocLine;\n tocLine.children.push(span);\n }\n //inserts page number\n if (tocSettings.includePageNumber && (bookmarkName !== undefined)) {\n if (tocSettings.rightAlign) {\n var tabText = new TabElementBox();\n tabText.text = '\\t';\n tabText.line = tocLine;\n tocLine.children.push(tabText);\n }\n var pageField = this.insertTocPageNumber(bookmarkName, tocLine, tocSettings.rightAlign, widget);\n this.appendEndField(pageField, tocLine);\n }\n if (tocSettings.includeHyperlink && fieldBegin !== undefined) {\n this.appendEndField(fieldBegin, tocLine);\n }\n }\n if (!isNullOrUndefined(tocPara) && (text !== '' || isFirstPara)) {\n widgets.push(tocPara);\n }\n };\n /**\n * Inserts toc hyperlink.\n */\n Editor.prototype.insertTocHyperlink = function (lineWidget, bookmarkName, text) {\n var fieldCode = ' HYPERLINK \\\\l \\\"' + bookmarkName + '\\\" ';\n var fieldBegin = this.createTocFieldElement(lineWidget, fieldCode);\n //text element.\n var span = new TextElementBox();\n span.text = text;\n span.line = lineWidget;\n lineWidget.children.push(span);\n return fieldBegin;\n };\n /**\n * Inserts toc page number.\n */\n // tslint:disable-next-line:max-line-length\n Editor.prototype.insertTocPageNumber = function (bookMarkname, lineWidget, isRightAlign, widget) {\n var fieldCode = ' PAGEREF' + bookMarkname + ' \\\\h ';\n var fieldBegin = this.createTocFieldElement(lineWidget, fieldCode);\n var text = (this.viewer.pages.indexOf(widget.bodyWidget.page) + 1).toString();\n //text element.\n var span = new FieldTextElementBox();\n span.fieldBegin = fieldBegin;\n if (!isRightAlign) {\n text = ' ' + text;\n }\n span.text = text;\n span.line = lineWidget;\n lineWidget.children.push(span);\n this.pageRefFields[bookMarkname] = span;\n return fieldBegin;\n };\n Editor.prototype.updatePageRef = function () {\n for (var _i = 0, _a = Object.keys(this.pageRefFields); _i < _a.length; _i++) {\n var key = _a[_i];\n var bookmark = this.viewer.bookmarks.get(key);\n var pageRef = (bookmark.paragraph.bodyWidget.page.index + 1).toString();\n var span = this.pageRefFields[key];\n if (pageRef !== span.text) {\n span.text = pageRef;\n var paragraph = span.paragraph;\n var lineIndex = paragraph.childWidgets.indexOf(span.line);\n var elementIndex = span.line.children.indexOf(span);\n this.viewer.layout.reLayoutParagraph(paragraph, lineIndex, elementIndex);\n }\n }\n };\n /**\n * Inserts toc bookmark.\n */\n Editor.prototype.insertTocBookmark = function (widget) {\n var bookmarkName = undefined;\n var lineLength = widget.childWidgets.length;\n if (lineLength > 0) {\n var startLine = widget.childWidgets[0];\n var endLine = widget.childWidgets[lineLength - 1];\n if ((startLine !== undefined) && (endLine !== undefined)) {\n var startElement = startLine.children[0];\n //Returns the bookmark if already present for paragraph.\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(startElement) && startElement instanceof BookmarkElementBox && startElement.bookmarkType === 0 && (startElement.name.toLowerCase().match('^_toc'))) {\n return startElement.name;\n }\n var endElement = endLine.children[endLine.children.length - 1];\n if ((startElement !== undefined) && (endElement !== undefined)) {\n this.selection.start.setPositionForSelection(startLine, startElement, 0, this.selection.start.location);\n this.selection.end.setPositionForSelection(endLine, endElement, endElement.length, this.selection.end.location);\n bookmarkName = this.generateBookmarkName();\n this.insertBookmark(bookmarkName);\n }\n }\n }\n return bookmarkName;\n };\n /**\n * Generates bookmark id.\n */\n Editor.prototype.generateBookmarkName = function () {\n this.tocBookmarkId++;\n var count = 10 - this.tocBookmarkId.toString().length;\n var formatString = '';\n while (count - 1 > 0) {\n formatString = '0' + formatString;\n count--;\n }\n var bookmarkName = '_Toc' + formatString + this.tocBookmarkId;\n return bookmarkName;\n };\n return Editor;\n}());\nexport { Editor };\n","import { WTableHolder } from '../viewer/page';\n/**\n * @private\n */\nvar ModifiedLevel = /** @class */ (function () {\n function ModifiedLevel(owner, modified) {\n this.ownerListLevelIn = undefined;\n this.modifiedListLevelIn = undefined;\n this.ownerListLevel = owner;\n this.modifiedListLevel = modified;\n }\n Object.defineProperty(ModifiedLevel.prototype, \"ownerListLevel\", {\n /**\n * @private\n */\n get: function () {\n return this.ownerListLevelIn;\n },\n /**\n * @private\n */\n set: function (value) {\n this.ownerListLevelIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ModifiedLevel.prototype, \"modifiedListLevel\", {\n /**\n * @private\n */\n get: function () {\n return this.modifiedListLevelIn;\n },\n /**\n * @private\n */\n set: function (value) {\n this.modifiedListLevelIn = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ModifiedLevel.prototype.destroy = function () {\n this.ownerListLevel = undefined;\n this.modifiedListLevel = undefined;\n };\n return ModifiedLevel;\n}());\nexport { ModifiedLevel };\n/**\n * @private\n */\nvar ModifiedParagraphFormat = /** @class */ (function () {\n function ModifiedParagraphFormat(ownerFormat, modifiedFormat) {\n this.ownerFormatIn = undefined;\n this.modifiedFormatIn = undefined;\n this.ownerFormat = ownerFormat;\n this.modifiedFormat = modifiedFormat;\n }\n Object.defineProperty(ModifiedParagraphFormat.prototype, \"ownerFormat\", {\n /**\n * @private\n */\n get: function () {\n return this.ownerFormatIn;\n },\n /**\n * @private\n */\n set: function (value) {\n this.ownerFormatIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ModifiedParagraphFormat.prototype, \"modifiedFormat\", {\n /**\n * hidden\n */\n get: function () {\n return this.modifiedFormatIn;\n },\n /**\n * @private\n */\n set: function (value) {\n this.modifiedFormatIn = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ModifiedParagraphFormat.prototype.destroy = function () {\n this.ownerFormat = undefined;\n this.modifiedFormat.destroy();\n this.modifiedFormat = undefined;\n };\n return ModifiedParagraphFormat;\n}());\nexport { ModifiedParagraphFormat };\n/**\n * @private\n */\nvar RowHistoryFormat = /** @class */ (function () {\n function RowHistoryFormat(startingPoint, rowFormat) {\n this.startingPoint = startingPoint;\n this.rowFormat = rowFormat;\n this.rowHeightType = rowFormat.heightType;\n }\n RowHistoryFormat.prototype.revertChanges = function (isRedo, owner) {\n //backup current format values.\n var currentRowHeightType = this.rowFormat.heightType;\n //Restore old values.\n owner.editorModule.tableResize.updateRowHeight(this.rowFormat.ownerBase, isRedo ? this.displacement : (-this.displacement));\n owner.viewer.layout.reLayoutTable(this.rowFormat.ownerBase.ownerTable);\n if (this.rowFormat.heightType !== this.rowHeightType) {\n this.rowFormat.heightType = this.rowHeightType;\n }\n //backup the current format values for redo.\n this.rowHeightType = currentRowHeightType;\n };\n return RowHistoryFormat;\n}());\nexport { RowHistoryFormat };\n/**\n * @private\n */\nvar TableHistoryInfo = /** @class */ (function () {\n function TableHistoryInfo(table, owner) {\n this.tableHolder = new WTableHolder();\n this.tableFormat = new TableFormatHistoryInfo();\n this.rows = [];\n this.owner = owner;\n this.copyProperties(table);\n }\n TableHistoryInfo.prototype.copyProperties = function (table) {\n if (table.tableHolder) {\n this.tableHolder = table.tableHolder.clone();\n }\n if (table.tableFormat) {\n this.tableFormat.leftIndent = table.tableFormat.leftIndent;\n this.tableFormat.preferredWidth = table.tableFormat.preferredWidth;\n this.tableFormat.preferredWidthType = table.tableFormat.preferredWidthType;\n }\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n var rowFormat = new RowFormatHistoryInfo();\n rowFormat.gridBefore = row.rowFormat.gridBefore;\n rowFormat.gridBeforeWidth = row.rowFormat.gridBeforeWidth;\n rowFormat.gridBeforeWidthType = row.rowFormat.gridBeforeWidthType;\n rowFormat.gridAfter = row.rowFormat.gridAfter;\n rowFormat.gridAfterWidth = row.rowFormat.gridAfterWidth;\n rowFormat.gridAfterWidthType = row.rowFormat.gridAfterWidthType;\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n var cellFormat = new CellFormatHistoryInfo();\n cellFormat.columnIndex = cell.columnIndex;\n cellFormat.columnSpan = cell.cellFormat.columnSpan;\n cellFormat.preferredWidth = cell.cellFormat.preferredWidth;\n cellFormat.preferredWidthType = cell.cellFormat.preferredWidthType;\n rowFormat.cells.push(cellFormat);\n }\n this.rows.push(rowFormat);\n }\n this.tableHierarchicalIndex = this.owner.editorModule.getHierarchicalIndex(table, '0');\n };\n TableHistoryInfo.prototype.destroy = function () {\n this.tableHierarchicalIndex = undefined;\n if (this.tableHolder) {\n this.tableHolder.destroy();\n this.tableHolder = undefined;\n }\n if (this.tableFormat) {\n this.tableFormat = null;\n }\n if (this.rows) {\n this.rows = [];\n this.rows = undefined;\n }\n };\n return TableHistoryInfo;\n}());\nexport { TableHistoryInfo };\n/**\n * @private\n */\nvar TableFormatHistoryInfo = /** @class */ (function () {\n function TableFormatHistoryInfo() {\n /* tslint:disable:no-empty */\n }\n return TableFormatHistoryInfo;\n}());\nexport { TableFormatHistoryInfo };\n/**\n * @private\n */\nvar RowFormatHistoryInfo = /** @class */ (function () {\n function RowFormatHistoryInfo() {\n this.cells = [];\n }\n return RowFormatHistoryInfo;\n}());\nexport { RowFormatHistoryInfo };\n/**\n * @private\n */\nvar CellFormatHistoryInfo = /** @class */ (function () {\n function CellFormatHistoryInfo() {\n /* tslint:disable:no-empty */\n }\n return CellFormatHistoryInfo;\n}());\nexport { CellFormatHistoryInfo };\n/**\n * @private\n */\nvar CellHistoryFormat = /** @class */ (function () {\n function CellHistoryFormat(point) {\n this.startingPoint = point; // starting point preserved to calculate the displacement on after cell resizing finished.\n }\n return CellHistoryFormat;\n}());\nexport { CellHistoryFormat };\n","import { WParagraphFormat } from '../format/paragraph-format';\nimport { WSectionFormat } from '../format/section-format';\nimport { WCharacterFormat } from '../format/character-format';\nimport { WListFormat } from '../format/list-format';\nimport { ModifiedLevel, RowHistoryFormat, TableHistoryInfo } from './history-helper';\nimport { BlockWidget, ParagraphWidget, BodyWidget, TableCellWidget, TableWidget, TableRowWidget, HeaderFooterWidget } from '../viewer/page';\nimport { Dictionary } from '../../base/dictionary';\nimport { TextPosition, ImageFormat } from '../index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { ElementBox } from '../viewer/page';\nimport { WTableFormat, WRowFormat, WCellFormat, WParagraphStyle } from '../format/index';\n/**\n * @private\n */\nvar BaseHistoryInfo = /** @class */ (function () {\n function BaseHistoryInfo(node) {\n this.ownerIn = node;\n this.viewer = node.viewer;\n this.modifiedPropertiesIn = [];\n this.modifiedNodeLength = [];\n this.removedNodesIn = [];\n }\n Object.defineProperty(BaseHistoryInfo.prototype, \"owner\", {\n //Properties\n //gets owner control\n /**\n * gets the owner control\n * @private\n */\n get: function () { return this.ownerIn; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BaseHistoryInfo.prototype, \"editorHistory\", {\n /**\n * gets or sets action\n * @private\n */\n get: function () {\n return this.owner.editorHistory;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BaseHistoryInfo.prototype, \"action\", {\n /**\n * gets or sets action\n * @private\n */\n get: function () { return this.actionIn; },\n set: function (value) { this.actionIn = value; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BaseHistoryInfo.prototype, \"modifiedProperties\", {\n /**\n * gets modified properties\n * @returns Object\n * @private\n */\n get: function () { return this.modifiedPropertiesIn; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BaseHistoryInfo.prototype, \"removedNodes\", {\n /**\n * @private\n */\n get: function () {\n return this.removedNodesIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BaseHistoryInfo.prototype, \"selectionStart\", {\n /**\n * Gets or Sets the selection start\n * @private\n */\n //gets or sets selection start\n get: function () { return this.selectionStartIn; },\n set: function (value) { this.selectionStartIn = value; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BaseHistoryInfo.prototype, \"selectionEnd\", {\n /**\n * Gets or Sets the selection end\n * @private\n */\n get: function () { return this.selectionEndIn; },\n set: function (value) { this.selectionEndIn = value; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BaseHistoryInfo.prototype, \"insertPosition\", {\n /**\n * Gets or sets the insert position\n * @private\n */\n get: function () { return this.insertPositionIn; },\n set: function (value) { this.insertPositionIn = value; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BaseHistoryInfo.prototype, \"endPosition\", {\n /**\n * Gets or sets end position\n * @private\n */\n get: function () { return this.endPositionIn; },\n set: function (value) { this.endPositionIn = value; },\n enumerable: true,\n configurable: true\n });\n /**\n * Update the selection\n * @param selection\n * @private\n */\n BaseHistoryInfo.prototype.updateSelection = function () {\n var blockInfo = this.owner.editorModule.getParagraphInfo(this.owner.selection.start);\n this.selectionStart = this.owner.editorModule.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n blockInfo = this.owner.editorModule.getParagraphInfo(this.owner.selection.end);\n this.selectionEnd = this.owner.editorModule.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n };\n BaseHistoryInfo.prototype.setBookmarkInfo = function (bookmark) {\n this.removedNodes.push({ 'bookmark': bookmark, 'startIndex': bookmark.indexInOwner, 'endIndex': bookmark.reference.indexInOwner });\n };\n BaseHistoryInfo.prototype.revertBookmark = function () {\n var bookmarkInfo = this.removedNodes[0];\n var bookmark = bookmarkInfo.bookmark;\n if (this.editorHistory.isUndoing) {\n this.viewer.bookmarks.add(bookmark.name, bookmark);\n bookmark.line.children.splice(bookmarkInfo.startIndex, 0, bookmark);\n bookmark.reference.line.children.splice(bookmarkInfo.endIndex, 0, bookmark.reference);\n this.editorHistory.recordChanges(this);\n }\n else {\n this.owner.editorModule.deleteBookmarkInternal(bookmark);\n this.editorHistory.undoStack.push(this);\n }\n };\n /**\n * Reverts this instance\n * @private\n */\n // tslint:disable: max-func-body-length\n BaseHistoryInfo.prototype.revert = function () {\n if (this.action === 'DeleteBookmark') {\n this.revertBookmark();\n return;\n }\n this.owner.isShiftingEnabled = true;\n var selectionStartTextPosition = undefined;\n var selectionEndTextPosition = undefined;\n var start = this.selectionStart;\n var end = this.selectionEnd;\n var isForwardSelection = TextPosition.isForwardSelection(start, end);\n if (this.modifiedProperties.length > 0 || this.action === 'Selection' || this.action === 'ClearCharacterFormat'\n || this.action === 'ClearParagraphFormat') {\n selectionStartTextPosition = this.getTextPosition(start);\n selectionEndTextPosition = this.getTextPosition(end);\n this.revertModifiedProperties(selectionStartTextPosition, selectionEndTextPosition);\n }\n else {\n var deletedNodes = this.removedNodes;\n this.removedNodesIn = [];\n var isForward = TextPosition.isForwardSelection(this.insertPosition, this.endPosition);\n var insertTextPosition = this.getTextPosition(isForward ? this.insertPosition : this.endPosition);\n var endTextPosition = this.getTextPosition(isForward ? this.endPosition : this.insertPosition);\n if (insertTextPosition.isAtSamePosition(endTextPosition)) {\n this.owner.selection.selectContent(insertTextPosition, true);\n }\n else {\n this.owner.selection.selectPosition(insertTextPosition, endTextPosition);\n }\n if (this.action === 'InsertHyperlink' && this.editorHistory.isRedoing) {\n var fieldBegin = this.owner.selection.getHyperlinkField();\n if (!isNullOrUndefined(fieldBegin)) {\n var offset = (fieldBegin.line).getOffset(fieldBegin, 0);\n insertTextPosition.setPositionParagraph(fieldBegin.line, offset);\n this.owner.selection.start.setPositionInternal(insertTextPosition);\n offset = fieldBegin.fieldEnd.line.getOffset(fieldBegin.fieldEnd, 1);\n endTextPosition.setPositionParagraph(fieldBegin.fieldEnd.line, offset);\n }\n }\n this.editorHistory.currentBaseHistoryInfo = this;\n this.selectionStart = this.insertPosition;\n this.insertPosition = undefined;\n this.selectionEnd = this.endPosition;\n this.endPosition = undefined;\n var isRemoveContent = false;\n if (!insertTextPosition.isAtSamePosition(endTextPosition)) {\n isRemoveContent = this.action === 'BackSpace' || this.action === 'Delete' || this.action === 'ClearCells'\n || this.action === 'DeleteCells';\n if (!(isRemoveContent) && this.action !== 'MergeCells' && this.action !== 'InsertRowAbove'\n && this.action !== 'InsertRowBelow' && this.action !== 'InsertColumnLeft'\n && this.action !== 'InsertColumnRight' && this.action !== 'Borders'\n && this.action !== 'DeleteTable' && this.action !== 'DeleteColumn' && this.action !== 'DeleteRow') {\n this.owner.selection.end.setPositionInternal(endTextPosition);\n if (!this.owner.selection.isEmpty) {\n if (this.editorHistory.isRedoing) {\n this.owner.editorModule.removeSelectedContents(this.owner.selection);\n }\n else {\n this.owner.editorModule.deleteSelectedContents(this.owner.selection, true);\n }\n }\n }\n }\n var isRedoAction = this.editorHistory.isRedoing && !isRemoveContent;\n this.revertModifiedNodes(deletedNodes, isRedoAction, isForwardSelection ? start : end, start === end);\n if (isRemoveContent) {\n this.removeContent(insertTextPosition, endTextPosition);\n }\n //this.owner.editorModule.reLayout(this.viewer.selection);\n }\n var isSelectionChanged = false;\n if ((this.editorHistory.isUndoing && isNullOrUndefined(this.editorHistory.currentHistoryInfo)) ||\n ((this.action === 'InsertRowAbove' || this.action === 'Borders' || this.action === 'InsertRowBelow'\n || this.action === 'InsertColumnLeft'\n || this.action === 'InsertColumnRight') && (this.editorHistory.isRedoing\n || this.editorHistory.currentHistoryInfo.action === 'Paste'))) {\n selectionStartTextPosition = this.getTextPosition(start);\n selectionEndTextPosition = this.getTextPosition(end);\n this.owner.selection.selectRange(selectionStartTextPosition, selectionEndTextPosition);\n isSelectionChanged = true;\n }\n // Updates insert position of history info instance.\n this.insertPosition = start;\n this.endPosition = end;\n this.owner.editorModule.reLayout(this.owner.selection, this.owner.selection.isEmpty);\n if (isSelectionChanged) {\n this.viewer.scrollToPosition(this.owner.selection.start, this.owner.selection.end);\n }\n this.highlightListText();\n };\n BaseHistoryInfo.prototype.highlightListText = function () {\n if (!isNullOrUndefined(this.editorHistory.currentHistoryInfo)) {\n // tslint:disable-next-line:max-line-length\n if (this.action === 'ListCharacterFormat' || (this.editorHistory.currentHistoryInfo.action === 'ListSelect' && this.action === 'ListFormat')) {\n var selectionStartTextPosition = this.getTextPosition(this.selectionStart);\n var widget = selectionStartTextPosition.currentWidget;\n this.viewer.selection.highlightListText(widget);\n }\n }\n };\n BaseHistoryInfo.prototype.removeContent = function (insertTextPosition, endTextPosition) {\n //If the base parent of the insert text position and end text position is null \n //then the paragraphs already removed.\n //Example scenario: In table editing that is delete cells operation \n // we will backed up the entire table ad it will be replaced on undo operation.\n //At that time if the positions are in table \n //which is already replaced in undo (revert modified nodes method) then the base parent of the paragraph will be null.\n //So again, selecting the content and deleting is unnecessary\n // and it will cause improper position updates and null reference exceptions. \n if ((!isNullOrUndefined(insertTextPosition.paragraph.containerWidget) &&\n insertTextPosition.paragraph.containerWidget instanceof BodyWidget &&\n (!isNullOrUndefined(endTextPosition.paragraph.containerWidget)\n && endTextPosition.paragraph.containerWidget instanceof BodyWidget))\n || (!isNullOrUndefined(insertTextPosition.paragraph.containerWidget)\n && !isNullOrUndefined(endTextPosition.paragraph.containerWidget)\n && insertTextPosition.paragraph.containerWidget instanceof TableCellWidget\n && endTextPosition.paragraph.containerWidget instanceof TableCellWidget\n && !isNullOrUndefined(insertTextPosition.paragraph.bodyWidget))) {\n //Removes if any empty paragraph is added while delete.\n this.owner.selection.selectRange(insertTextPosition, endTextPosition);\n var isDelete = (this.action === 'BackSpace') ? true : false;\n this.owner.editorModule.deleteSelectedContents(this.owner.selection, isDelete);\n }\n };\n BaseHistoryInfo.prototype.revertModifiedProperties = function (start, end) {\n if (this.action === 'CellFormat' || this.action === 'CellOptions' || this.action === 'TableOptions') {\n this.owner.isShiftingEnabled = false;\n }\n this.owner.selection.selectRange(start, end);\n if (this.action === 'RowResizing' || this.action === 'CellResizing') {\n this.revertResizing();\n }\n else if (this.action === 'CellOptions' || this.action === 'TableOptions') {\n this.revertTableDialogProperties(this.action);\n }\n else if (this.action !== 'Selection') {\n this.revertProperties();\n }\n };\n // Redoes the Action\n BaseHistoryInfo.prototype.redoAction = function () {\n var editor = this.owner.editorModule;\n switch (this.action) {\n case 'BackSpace':\n editor.singleBackspace(this.owner.selection, true);\n break;\n case 'Delete':\n editor.singleDelete(this.owner.selection, true);\n break;\n case 'DeleteTable':\n editor.deleteTable();\n break;\n case 'DeleteColumn':\n editor.deleteColumn();\n break;\n case 'DeleteRow':\n editor.deleteRow();\n break;\n case 'MergeCells':\n editor.mergeSelectedCellsInTable();\n break;\n case 'InsertRowAbove':\n editor.insertRow(true);\n break;\n case 'InsertRowBelow':\n editor.insertRow(false);\n break;\n case 'InsertColumnLeft':\n editor.insertColumn(true);\n break;\n case 'InsertColumnRight':\n editor.insertColumn(true);\n break;\n }\n };\n /**\n * Revert the modified nodes\n * @param {WNode[]} deletedNodes\n * @param {boolean} isRedoAction\n * @param {string} start\n * @param {boolean} isEmptySelection\n */\n BaseHistoryInfo.prototype.revertModifiedNodes = function (deletedNodes, isRedoAction, start, isEmptySelection) {\n if (isRedoAction && (this.action === 'BackSpace' || this.action === 'Delete' || this.action === 'DeleteTable'\n || this.action === 'DeleteColumn' || this.action === 'DeleteRow' || this.action === 'InsertRowAbove' ||\n this.action === 'InsertRowBelow' || this.action === 'InsertColumnLeft' || this.action === 'InsertColumnRight'\n || this.action === 'MergeCells')) {\n this.redoAction();\n }\n if (deletedNodes.length > 0) {\n if ((this.editorHistory.isUndoing && (this.action === 'DeleteCells' || this.action === 'DeleteColumn'\n || this.action === 'DeleteRow' || this.action === 'MergeCells'))\n || (this.action === 'InsertRowAbove' || this.action === 'InsertRowBelow' || this.action === 'InsertColumnLeft'\n || this.action === 'ClearCells' || this.action === 'InsertColumnRight' || this.action === 'Borders')) {\n var insertIndex = this.selectionStart;\n var block = this.owner.editorModule.getBlock({ index: insertIndex }).node;\n var lastNode = deletedNodes[deletedNodes.length - 1];\n if ((block instanceof TableWidget || block.previousRenderedWidget instanceof TableWidget || block.isInsideTable)\n && lastNode instanceof TableWidget) {\n if (block instanceof ParagraphWidget && !block.isInsideTable) {\n block = block.previousRenderedWidget;\n }\n block = block.combineWidget(this.viewer);\n this.owner.editorModule.insertTableInternal(block, lastNode, false);\n deletedNodes.splice(deletedNodes.indexOf(lastNode), 1);\n }\n else if (lastNode instanceof TableWidget) {\n this.owner.editorModule.insertBlock(lastNode);\n }\n }\n else {\n var initialStart = start;\n var block = this.owner.editorModule.getBlock({ index: initialStart }).node;\n // initialStart = blockObj.position;\n if (deletedNodes.length > 0 && (this.action === 'BackSpace' && isEmptySelection\n || (!(block instanceof TableWidget) && !(block instanceof HeaderFooterWidget)))) {\n var lastNode = deletedNodes[0];\n if (lastNode instanceof ParagraphWidget && this.owner.selection.start.offset > 0) {\n this.owner.editorModule.insertNewParagraphWidget(lastNode, true);\n deletedNodes.splice(deletedNodes.indexOf(lastNode), 1);\n if (isNullOrUndefined(block)) {\n // tslint:disable-next-line:max-line-length\n var nextBlock = this.viewer.selection.getNextParagraphBlock(lastNode.getSplitWidgets().pop());\n this.owner.selection.getNextRenderedBlock(lastNode);\n if (isNullOrUndefined(nextBlock)) {\n //Sets the selection as starting of last paragraph.\n this.owner.selection.selectParagraph(lastNode, true);\n }\n }\n }\n if (lastNode instanceof TableWidget && this.owner.selection.start.offset > 0) {\n var firstBlock = deletedNodes[deletedNodes.length - 1];\n if (firstBlock instanceof ParagraphWidget) {\n this.owner.editorModule.insertNewParagraphWidget(firstBlock, true);\n deletedNodes.splice(deletedNodes.indexOf(firstBlock), 1);\n if (isNullOrUndefined(block)) {\n // tslint:disable-next-line:max-line-length\n var nextBlock = this.viewer.selection.getNextParagraphBlock(firstBlock.getSplitWidgets().pop());\n if (isNullOrUndefined(nextBlock)) {\n //Sets the selection as starting of last paragraph.\n this.owner.selection.selectParagraph(firstBlock, true);\n }\n }\n }\n }\n }\n if (deletedNodes.length > 0) {\n var firstNode = deletedNodes[deletedNodes.length - 1];\n if (block instanceof TableWidget) {\n block = block.combineWidget(this.viewer);\n if (firstNode instanceof TableWidget) {\n this.owner.editorModule.insertTableInternal(block, firstNode, true);\n deletedNodes.splice(deletedNodes.indexOf(firstNode), 1);\n this.insertPosition = start;\n var nextWidget = firstNode.getSplitWidgets().pop();\n if (nextWidget.nextRenderedWidget instanceof TableWidget) {\n block = nextWidget.nextRenderedWidget;\n }\n else {\n initialStart = start;\n block = this.owner.editorModule.getBlock({ index: initialStart }).node;\n }\n }\n }\n //Checks if first node is paragraph and current insert position is paragraph end.\n // tslint:disable-next-line:max-line-length\n if (firstNode instanceof ParagraphWidget && this.owner.selection.start.offset > 0\n && this.owner.selection.start.offset === this.owner.selection.getLineLength(this.owner.selection.start.paragraph.lastChild)) {\n var editor = this.owner.editorModule;\n editor.insertNewParagraphWidget(firstNode, false);\n deletedNodes.splice(deletedNodes.indexOf(firstNode), 1);\n //Removes the intermediate empty paragraph instance.\n if (this.action !== 'Paste') {\n editor.removeBlock(this.owner.selection.start.paragraph);\n }\n // tslint:disable-next-line:max-line-length\n var paragraph = this.viewer.selection.getNextParagraphBlock(firstNode.getSplitWidgets().pop());\n if (!isNullOrUndefined(paragraph)) {\n this.owner.selection.selectParagraph(paragraph, true);\n }\n }\n else if (deletedNodes[0] instanceof TableWidget && deletedNodes.length !== 1) {\n var nextNode = deletedNodes[1];\n if (nextNode instanceof ParagraphWidget && nextNode.isEmpty()) {\n deletedNodes.splice(deletedNodes.indexOf(nextNode), 1);\n }\n }\n }\n if (deletedNodes.length > 0) {\n if (block instanceof TableWidget) {\n block = block.combineWidget(this.viewer);\n }\n this.insertRemovedNodes(deletedNodes, block);\n }\n }\n }\n };\n BaseHistoryInfo.prototype.insertRemovedNodes = function (deletedNodes, block) {\n for (var i = deletedNodes.length - 1, index = 0; i > -1; i--) {\n var node = deletedNodes[i];\n if (node instanceof ElementBox) {\n this.owner.editorModule.insertInlineInSelection(this.owner.selection, node);\n }\n else if (node instanceof BlockWidget) {\n if (node instanceof TableRowWidget) {\n if (block instanceof TableWidget) {\n block.childWidgets.splice(index, 0, node);\n this.owner.editorModule.updateNextBlocksIndex(node, true);\n if (i === 0 || !(deletedNodes[i - 1] instanceof TableRowWidget)) {\n // tslint:disable-next-line:max-line-length\n this.viewer.layout.layoutBodyWidgetCollection(block.index, block.containerWidget, block, false);\n }\n }\n }\n else if (block instanceof TableWidget) {\n this.owner.editorModule.insertBlockTable(this.owner.selection, node, block);\n }\n else {\n this.owner.editorModule.insertBlock(node);\n }\n }\n }\n deletedNodes = [];\n };\n BaseHistoryInfo.prototype.revertResizing = function () {\n this.editorHistory.currentBaseHistoryInfo = this;\n if (this.action === 'RowResizing') {\n if (this.modifiedProperties[0] instanceof RowHistoryFormat) {\n // tslint:disable-next-line:max-line-length\n this.modifiedProperties[0].revertChanges(this.editorHistory.isRedoing, this.owner);\n }\n }\n else {\n if (this.modifiedProperties[0] instanceof TableHistoryInfo) {\n //selected cell resizing the condition checks done based on the selected widgets only. so need to highlight the selection.\n if (this.owner.selection.selectedWidgets.length === 0) {\n this.owner.selection.highlightSelection(true);\n }\n var prevTableHistoryInfo = this.modifiedProperties[0];\n var position = prevTableHistoryInfo.tableHierarchicalIndex;\n var block = this.owner.editorModule.getBlock({ index: position }).node;\n if (block instanceof TableWidget) {\n var tableResize = this.owner.editorModule.tableResize;\n this.owner.editor.setOffsetValue(this.owner.selection);\n block = block.combineWidget(this.owner.viewer);\n tableResize.currentResizingTable = block;\n this.modifiedProperties.splice(0, 1);\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n var tableHistoryInfoCurrent = new TableHistoryInfo(block, this.owner);\n this.modifiedProperties.splice(0, 0, tableHistoryInfoCurrent);\n this.owner.isLayoutEnabled = false;\n tableResize.applyProperties(tableResize.currentResizingTable, prevTableHistoryInfo);\n tableResize.currentResizingTable.isGridUpdated = true;\n this.owner.isLayoutEnabled = true;\n tableResize.updateGridValue(tableResize.currentResizingTable, false);\n prevTableHistoryInfo.destroy();\n prevTableHistoryInfo = undefined;\n }\n }\n }\n }\n };\n BaseHistoryInfo.prototype.revertTableDialogProperties = function (action) {\n this.owner.isShiftingEnabled = false;\n this.editorHistory.currentBaseHistoryInfo = this;\n this.currentPropertyIndex = 0;\n if (action === 'CellOptions') {\n var selection = this.owner.selection;\n var cellFormat = this.modifiedProperties[0];\n this.owner.editorModule.updateCellMargins(selection, cellFormat);\n }\n else if (action === 'TableOptions') {\n this.owner.tableOptionsDialogModule.applyTableOptionsHelper(this.modifiedProperties[0]);\n }\n this.currentPropertyIndex = 0;\n this.owner.isShiftingEnabled = true;\n };\n BaseHistoryInfo.prototype.getTextPosition = function (hierarchicalIndex) {\n var textPosition = new TextPosition(this.owner);\n var blockInfo = this.owner.editorModule.getParagraph({ index: hierarchicalIndex });\n var lineInfo = this.owner.editorModule.getLineInfo(blockInfo.paragraph, blockInfo.offset);\n textPosition.setPositionForLineWidget(lineInfo.line, lineInfo.offset);\n return textPosition;\n };\n /**\n * Add modified properties for section format\n * @param {WSectionFormat} format\n * @param {string} property\n * @param {Object} value\n * @private\n */\n BaseHistoryInfo.prototype.addModifiedPropertiesForSection = function (format, property, value) {\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n var modifiedProperties = this.modifiedProperties;\n var previousFormat = (this.currentPropertyIndex < modifiedProperties.length ?\n modifiedProperties[this.currentPropertyIndex] : modifiedProperties[modifiedProperties.length - 1]);\n if (isNullOrUndefined(property)) {\n value = previousFormat;\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties[this.currentPropertyIndex] = format.cloneFormat();\n }\n else {\n this.modifiedProperties[this.modifiedProperties.length - 1] = format.cloneFormat();\n }\n }\n else {\n value = previousFormat.getPropertyValue(property);\n previousFormat.copyFormat(format);\n }\n this.currentPropertyIndex++;\n }\n else {\n if (isNullOrUndefined(property)) {\n this.modifiedProperties.push(format.cloneFormat());\n }\n else {\n var currentFormat = new WSectionFormat();\n currentFormat.copyFormat(format);\n this.modifiedProperties.push(currentFormat);\n }\n }\n return value;\n };\n /**\n * Add the modified properties for character format\n * @param {WCharacterFormat} format\n * @param {string} property\n * @param {Object} value\n * @private\n */\n BaseHistoryInfo.prototype.addModifiedProperties = function (format, property, value) {\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n // tslint:disable-next-line:max-line-length \n var previousFormat = (this.currentPropertyIndex < this.modifiedProperties.length ? this.modifiedProperties[this.currentPropertyIndex] : this.modifiedProperties[this.modifiedProperties.length - 1]);\n var skipRemove = false;\n if (format.ownerBase instanceof ElementBox) {\n var prevLength = this.modifiedNodeLength[this.currentPropertyIndex];\n if (format.ownerBase.length < prevLength) {\n skipRemove = true;\n this.modifiedNodeLength[this.currentPropertyIndex] = format.ownerBase.length;\n this.modifiedNodeLength.splice(this.currentPropertyIndex + 1, 0, prevLength - format.ownerBase.length);\n //Adds a copy of character format at next position for splitted inline.\n var nextFormat = new WCharacterFormat(undefined);\n nextFormat.copyFormat(previousFormat);\n this.modifiedProperties.splice(this.currentPropertyIndex + 1, 0, nextFormat);\n }\n }\n if (this.action === 'ClearCharacterFormat') {\n if (this.editorHistory.isUndoing) {\n value = previousFormat;\n if (!skipRemove) {\n this.modifiedProperties.splice(this.currentPropertyIndex, 1);\n this.currentPropertyIndex--;\n }\n }\n else {\n this.modifiedProperties.push(format.cloneFormat());\n }\n }\n else {\n value = previousFormat;\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties[this.currentPropertyIndex] = format.cloneFormat();\n }\n else {\n this.modifiedProperties[this.modifiedProperties.length - 1] = format.cloneFormat();\n }\n }\n this.currentPropertyIndex++;\n }\n else {\n if (isNullOrUndefined(property)) {\n this.modifiedProperties.push(format.cloneFormat());\n }\n else {\n var currentFormat = new WCharacterFormat(undefined);\n currentFormat.copyFormat(format);\n this.modifiedProperties.push(currentFormat);\n }\n if (format.ownerBase instanceof ElementBox) {\n this.modifiedNodeLength.push(format.ownerBase.length);\n }\n else {\n this.modifiedNodeLength.push(0);\n }\n }\n return value;\n };\n /**\n * Add the modified properties for paragraph format\n * @param {WParagraphFormat} format\n * @param {string} property\n * @param {Object} value\n * @private\n */\n BaseHistoryInfo.prototype.addModifiedPropertiesForParagraphFormat = function (format, property, value) {\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n // tslint:disable-next-line:max-line-length\n var previousFormat = (this.currentPropertyIndex < this.modifiedProperties.length ? this.modifiedProperties[this.currentPropertyIndex] : this.modifiedProperties[this.modifiedProperties.length - 1]);\n if (this.action === 'ClearParagraphFormat') {\n if (this.editorHistory.isUndoing) {\n value = previousFormat;\n this.modifiedProperties.splice(this.currentPropertyIndex, 1);\n this.currentPropertyIndex--;\n }\n else {\n this.modifiedProperties.push(format.cloneFormat());\n }\n this.currentPropertyIndex++;\n return value;\n }\n if (isNullOrUndefined(property)) {\n value = previousFormat;\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties[this.currentPropertyIndex] = format.cloneFormat();\n }\n else {\n this.modifiedProperties[this.modifiedProperties.length - 1] = format.cloneFormat();\n }\n this.currentPropertyIndex++;\n return value;\n }\n if (property === 'listFormat') {\n value = new WParagraphFormat(undefined);\n value.copyFormat(previousFormat);\n previousFormat.listFormat = new WListFormat();\n previousFormat.listFormat.copyFormat(format.listFormat);\n this.currentPropertyIndex++;\n return value;\n }\n if (property === 'styleName') {\n if (!isNullOrUndefined(previousFormat.baseStyle)) {\n value = new WParagraphStyle();\n value.copyStyle(previousFormat.baseStyle);\n this.currentPropertyIndex++;\n return value;\n }\n else {\n return undefined;\n }\n }\n value = previousFormat.getPropertyValue(property);\n previousFormat.copyFormat(format);\n this.currentPropertyIndex++;\n }\n else {\n if (isNullOrUndefined(property)) {\n this.modifiedProperties.push(format.cloneFormat());\n }\n else {\n var currentFormat = new WParagraphFormat(undefined);\n currentFormat.copyFormat(format);\n this.modifiedProperties.push(currentFormat);\n }\n }\n return value;\n };\n /**\n * @private\n */\n BaseHistoryInfo.prototype.addModifiedPropertiesForContinueNumbering = function (paragraphFormat, value) {\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n // tslint:disable-next-line:max-line-length\n var previousFormat = (this.currentPropertyIndex < this.modifiedProperties.length ? this.modifiedProperties[this.currentPropertyIndex] : this.modifiedProperties[this.modifiedProperties.length - 1]);\n value = previousFormat;\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties[this.currentPropertyIndex] = paragraphFormat.cloneFormat();\n }\n else {\n this.modifiedProperties[this.modifiedProperties.length - 1] = paragraphFormat.cloneFormat();\n }\n this.currentPropertyIndex++;\n return value;\n }\n else {\n var currentFormat = new WParagraphFormat();\n currentFormat.copyFormat(paragraphFormat);\n this.modifiedProperties.push(currentFormat);\n }\n return value;\n };\n /**\n * @param listFormat\n * @param value\n * @private\n */\n BaseHistoryInfo.prototype.addModifiedPropertiesForRestartNumbering = function (listFormat, value) {\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n // tslint:disable-next-line:max-line-length\n var listId = (this.currentPropertyIndex < this.modifiedProperties.length ? this.modifiedProperties[this.currentPropertyIndex] : this.modifiedProperties[this.modifiedProperties.length - 1]);\n value = listId;\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties[this.currentPropertyIndex] = listFormat.listId;\n }\n else {\n this.modifiedProperties[this.modifiedProperties.length - 1] = listFormat.listId;\n }\n this.currentPropertyIndex++;\n return value;\n }\n else {\n this.modifiedProperties.push(listFormat.listId);\n }\n return value;\n };\n /**\n * Add modified properties for list format\n * @param {WListLevel} listLevel\n * @private\n */\n BaseHistoryInfo.prototype.addModifiedPropertiesForList = function (listLevel) {\n var value;\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n // tslint:disable-next-line:max-line-length\n var previousLevel = (this.currentPropertyIndex < this.modifiedProperties.length ? this.modifiedProperties[this.currentPropertyIndex] : this.modifiedProperties[this.modifiedProperties.length - 1]);\n value = previousLevel;\n previousLevel = new ModifiedLevel(listLevel, this.owner.editorModule.cloneListLevel(listLevel));\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties[this.currentPropertyIndex] = previousLevel;\n }\n else {\n this.modifiedProperties[this.modifiedProperties.length - 1] = previousLevel;\n }\n this.currentPropertyIndex++;\n }\n else {\n this.modifiedProperties.push(new ModifiedLevel(listLevel, this.owner.editorModule.cloneListLevel(listLevel)));\n value = listLevel;\n }\n return value;\n };\n /**\n * Revert the properties\n * @param {SelectionRange} selectionRange\n */\n BaseHistoryInfo.prototype.revertProperties = function () {\n this.editorHistory.currentBaseHistoryInfo = this;\n this.currentPropertyIndex = 0;\n var property = this.getProperty();\n this.viewer.owner.editorModule.setOffsetValue(this.viewer.selection);\n if (this.action === 'ClearCharacterFormat' || this.modifiedProperties[0] instanceof WCharacterFormat) {\n if (this.action === 'ListCharacterFormat') {\n this.owner.editorModule.updateListCharacterFormat(this.viewer.selection, property, undefined);\n return;\n }\n this.owner.editorModule.updateSelectionCharacterFormatting(property, undefined, false);\n }\n else if (this.action === 'ClearParagraphFormat' || this.modifiedProperties[0] instanceof WParagraphFormat) {\n if (this.action === 'ContinueNumbering') {\n // tslint:disable-next-line:max-line-length\n this.owner.editorModule.revertContinueNumbering(this.owner.selection, this.modifiedProperties[0]);\n return;\n }\n if (this.action === 'StyleName' && this.modifiedProperties[0] instanceof WParagraphFormat) {\n // tslint:disable-next-line:max-line-length\n this.owner.editorModule.updateSelectionParagraphFormatting(property, this.modifiedProperties[0].baseStyle, false);\n return;\n }\n this.owner.editorModule.updateSelectionParagraphFormatting(property, undefined, false);\n }\n else if (this.modifiedProperties[0] instanceof WSectionFormat) {\n this.owner.editorModule.updateSectionFormat(property, undefined);\n }\n else if (this.action === 'RestartNumbering') {\n this.owner.editorModule.restartListAtInternal(this.owner.selection, this.modifiedProperties[0]);\n return;\n }\n else if (this.modifiedProperties[0] instanceof ImageFormat) {\n this.owner.selection.updateImageSize(this.modifiedProperties[0]);\n }\n else if (this.modifiedProperties[0] instanceof ModifiedLevel) {\n var modified = new Dictionary();\n for (var i = 0; i < this.modifiedProperties.length; i++) {\n var modifiedLevel = this.modifiedProperties[i];\n // modified.modifiedLevels.add(modifiedLevel.ownerListLevel.levelNumber, modifiedLevel);\n modified.add(i, modifiedLevel);\n }\n this.editorHistory.updateListChanges(modified);\n modified.destroy();\n modified = undefined;\n }\n else if (this.modifiedProperties[0] instanceof WTableFormat) {\n this.owner.editorModule.updateTableFormat(this.owner.selection, property, undefined);\n }\n else if (this.modifiedProperties[0] instanceof WCellFormat) {\n this.owner.isShiftingEnabled = true;\n this.owner.editorModule.updateCellFormat(this.owner.selection, property, undefined);\n }\n else if (this.modifiedProperties[0] instanceof WRowFormat) {\n this.owner.editorModule.updateRowFormat(this.owner.selection, property, undefined);\n }\n this.currentPropertyIndex = 0;\n if (this.action === 'ClearCharacterFormat' || this.action === 'ClearParagraphFormat') {\n this.owner.editorModule.getOffsetValue(this.viewer.selection);\n }\n };\n /**\n * Add modified properties for cell options dialog\n * @param {WCellFormat} format\n * @param {WTable} table\n * @private\n */\n BaseHistoryInfo.prototype.addModifiedCellOptions = function (applyFormat, format, table) {\n var currentFormat;\n if (isNullOrUndefined(applyFormat.bottomMargin) && isNullOrUndefined(applyFormat.topMargin)\n && isNullOrUndefined(applyFormat.rightMargin) && isNullOrUndefined(applyFormat.leftMargin)) {\n currentFormat = this.copyCellOptions(table.tableFormat);\n }\n else {\n currentFormat = this.copyCellOptions(applyFormat);\n }\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n // tslint:disable-next-line:max-line-length\n var previousFormat = (this.currentPropertyIndex < this.modifiedProperties.length ? this.modifiedProperties[this.currentPropertyIndex] : this.modifiedProperties[this.modifiedProperties.length - 1]);\n format = previousFormat;\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties[this.currentPropertyIndex] = this.copyCellOptions(applyFormat);\n }\n else {\n this.modifiedProperties[this.modifiedProperties.length - 1] = this.copyCellOptions(applyFormat);\n }\n this.currentPropertyIndex++;\n return format;\n }\n else {\n this.modifiedProperties.push(currentFormat);\n }\n return format;\n };\n BaseHistoryInfo.prototype.copyCellOptions = function (format) {\n var cellFormat = new WCellFormat();\n cellFormat.topMargin = format.topMargin;\n cellFormat.rightMargin = format.rightMargin;\n cellFormat.bottomMargin = format.bottomMargin;\n cellFormat.leftMargin = format.leftMargin;\n return cellFormat;\n };\n /**\n * Add modified properties for cell options dialog\n * @param {WTableFormat} format\n * @private\n */\n BaseHistoryInfo.prototype.addModifiedTableOptions = function (format) {\n var currentFormat = this.copyTableOptions(format);\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n // tslint:disable-next-line:max-line-length \n var previousFormat = (this.currentPropertyIndex < this.modifiedProperties.length ? this.modifiedProperties[this.currentPropertyIndex] : this.modifiedProperties[this.modifiedProperties.length - 1]);\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties.splice(this.currentPropertyIndex, 1, currentFormat);\n }\n else {\n this.modifiedProperties.splice(this.modifiedProperties.length - 1, 1, currentFormat);\n }\n this.currentPropertyIndex++;\n }\n else {\n this.modifiedProperties.push(currentFormat);\n }\n };\n BaseHistoryInfo.prototype.copyTableOptions = function (format) {\n var tableFormat = new WTableFormat();\n tableFormat.topMargin = format.topMargin;\n tableFormat.rightMargin = format.rightMargin;\n tableFormat.bottomMargin = format.bottomMargin;\n tableFormat.leftMargin = format.leftMargin;\n tableFormat.cellSpacing = format.cellSpacing;\n return tableFormat;\n };\n BaseHistoryInfo.prototype.getProperty = function () {\n switch (this.action) {\n case 'Bold':\n return 'bold';\n case 'Italic':\n return 'italic';\n case 'FontColor':\n return 'fontColor';\n case 'FontFamily':\n return 'fontFamily';\n case 'FontSize':\n return 'fontSize';\n case 'HighlightColor':\n return 'highlightColor';\n case 'BaselineAlignment':\n return 'baselineAlignment';\n case 'Strikethrough':\n return 'strikethrough';\n case 'Underline':\n return 'underline';\n case 'AfterSpacing':\n return 'afterSpacing';\n case 'BeforeSpacing':\n return 'beforeSpacing';\n case 'LeftIndent':\n return 'leftIndent';\n case 'RightIndent':\n return 'rightIndent';\n case 'FirstLineIndent':\n return 'firstLineIndent';\n case 'LineSpacingType':\n return 'lineSpacingType';\n case 'LineSpacing':\n return 'lineSpacing';\n case 'TextAlignment':\n return 'textAlignment';\n case 'ListFormat':\n return 'listFormat';\n case 'PageHeight':\n return 'pageHeight';\n case 'PageWidth':\n return 'pageWidth';\n case 'TableAlignment':\n return 'tableAlignment';\n case 'TableLeftIndent':\n return 'leftIndent';\n case 'DefaultCellSpacing':\n return 'cellSpacing';\n case 'LeftMargin':\n case 'CellLeftMargin':\n case 'DefaultCellLeftMargin':\n return 'leftMargin';\n case 'RightMargin':\n case 'CellRightMargin':\n case 'DefaultCellRightMargin':\n return 'rightMargin';\n case 'TopMargin':\n case 'CellTopMargin':\n case 'DefaultCellTopMargin':\n return 'topMargin';\n case 'BottomMargin':\n case 'CellBottomMargin':\n case 'DefaultCellBottomMargin':\n return 'bottomMargin';\n case 'CellContentVerticalAlignment':\n return 'verticalAlignment';\n case 'RowHeight':\n return 'height';\n case 'RowHeightType':\n return 'heightType';\n case 'RowHeader':\n return 'isHeader';\n case 'AllowBreakAcrossPages':\n return 'allowBreakAcrossPages';\n case 'TablePreferredWidth':\n case 'CellPreferredWidth':\n return 'preferredWidth';\n case 'TablePreferredWidthType':\n case 'CellPreferredWidthType':\n return 'preferredWidthType';\n case 'Shading':\n return 'shading';\n case 'StyleName':\n return 'styleName';\n }\n return undefined;\n };\n BaseHistoryInfo.prototype.getCharacterPropertyValue = function (property, modifiedProperty) {\n var value;\n if (property === 'bold') {\n value = modifiedProperty.bold;\n }\n else if (property === 'italic') {\n value = modifiedProperty.italic;\n }\n else if (property === 'fontColor') {\n value = modifiedProperty.fontColor;\n }\n else if (property === 'fontFamily') {\n value = modifiedProperty.fontFamily;\n }\n else if (property === 'fontSize') {\n value = modifiedProperty.fontSize;\n }\n else if (property === 'highlightColor') {\n value = modifiedProperty.highlightColor;\n }\n else if (property === 'baselineAlignment') {\n value = modifiedProperty.baselineAlignment;\n }\n else if (property === 'strikethrough') {\n value = modifiedProperty.strikethrough;\n }\n else if (property === 'underline') {\n value = modifiedProperty.underline;\n }\n return value;\n };\n /**\n * Add modified properties for table format\n * @param {WTableFormat} format\n * @param {string} property\n * @param {Object} value\n * @private\n */\n BaseHistoryInfo.prototype.addModifiedTableProperties = function (format, property, value) {\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n // tslint:disable-next-line:max-line-length\n var previousTableFormat = (this.currentPropertyIndex < this.modifiedProperties.length ? this.modifiedProperties[this.currentPropertyIndex] : this.modifiedProperties[this.modifiedProperties.length - 1]);\n if (isNullOrUndefined(property)) {\n value = previousTableFormat;\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties[this.currentPropertyIndex] = format.cloneFormat();\n }\n else {\n this.modifiedProperties[this.modifiedProperties.length - 1] = format.cloneFormat();\n }\n this.currentPropertyIndex++;\n return value;\n }\n if (property === 'shading') {\n value = previousTableFormat.shading;\n }\n else {\n value = previousTableFormat.getPropertyValue(property);\n }\n previousTableFormat.copyFormat(format);\n this.currentPropertyIndex++;\n }\n else {\n var currentFormat = new WTableFormat();\n currentFormat.copyFormat(format);\n this.modifiedProperties.push(currentFormat);\n }\n return value;\n };\n /**\n * Add modified properties for row format\n * @param {WRowFormat} rowFormat\n * @param {string} property\n * @param {Object} value\n * @private\n */\n BaseHistoryInfo.prototype.addModifiedRowProperties = function (rowFormat, property, value) {\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n // tslint:disable-next-line:max-line-length\n var previousFormat = (this.currentPropertyIndex < this.modifiedProperties.length ? this.modifiedProperties[this.currentPropertyIndex] : this.modifiedProperties[this.modifiedProperties.length - 1]);\n if (isNullOrUndefined(property)) {\n value = previousFormat;\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties[this.currentPropertyIndex] = rowFormat.cloneFormat();\n }\n else {\n this.modifiedProperties[this.modifiedProperties.length - 1] = rowFormat.cloneFormat();\n }\n this.currentPropertyIndex++;\n return value;\n }\n value = previousFormat.getPropertyValue(property);\n previousFormat.copyFormat(rowFormat);\n this.currentPropertyIndex++;\n }\n else {\n var currentFormat = new WRowFormat();\n currentFormat.copyFormat(rowFormat);\n this.modifiedProperties.push(currentFormat);\n }\n return value;\n };\n /**\n * Add modified properties for cell format\n * @param {WCellFormat} cellFormat\n * @param {string} property\n * @param {Object} value\n * @private\n */\n BaseHistoryInfo.prototype.addModifiedCellProperties = function (cellFormat, property, value) {\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n // tslint:disable-next-line:max-line-length\n var previousFormat = (this.currentPropertyIndex < this.modifiedProperties.length ? this.modifiedProperties[this.currentPropertyIndex] : this.modifiedProperties[this.modifiedProperties.length - 1]);\n if (isNullOrUndefined(property)) {\n value = previousFormat;\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties[this.currentPropertyIndex] = cellFormat.cloneFormat();\n }\n else {\n this.modifiedProperties[this.modifiedProperties.length - 1] = cellFormat.cloneFormat();\n }\n this.currentPropertyIndex++;\n return value;\n }\n if (property === 'shading') {\n value = previousFormat.shading;\n }\n else {\n value = previousFormat.getPropertyValue(property);\n }\n previousFormat.copyFormat(cellFormat);\n this.currentPropertyIndex++;\n }\n else {\n var currentFormat = new WCellFormat();\n currentFormat.copyFormat(cellFormat);\n this.modifiedProperties.push(currentFormat);\n }\n return value;\n };\n /**\n * @private\n */\n BaseHistoryInfo.prototype.destroy = function () {\n this.selectionStart = undefined;\n this.selectionEnd = undefined;\n this.insertPosition = undefined;\n this.endPosition = undefined;\n if (!isNullOrUndefined(this.modifiedNodeLength)) {\n this.modifiedNodeLength = [];\n this.modifiedNodeLength = undefined;\n }\n if (!isNullOrUndefined(this.modifiedProperties)) {\n for (var i = 0; i < this.modifiedProperties.length; i++) {\n var property = this.modifiedProperties[i];\n if (property instanceof WCharacterFormat) {\n property.destroy();\n }\n else if (property instanceof WParagraphFormat) {\n property.destroy();\n }\n else if (property instanceof WSectionFormat) {\n property.destroy();\n }\n else if (property instanceof ModifiedLevel) {\n property.destroy();\n }\n this.modifiedProperties.splice(this.modifiedProperties.indexOf(property), 1);\n i--;\n }\n this.modifiedPropertiesIn = undefined;\n }\n if (!isNullOrUndefined(this.removedNodes)) {\n for (var i = 0; i < this.removedNodes.length; i++) {\n var node = this.removedNodes[i];\n if (node instanceof ParagraphWidget) {\n node.destroyInternal(this.viewer);\n }\n else if (node instanceof ElementBox) {\n node.destroy();\n }\n this.removedNodes.splice(this.removedNodes.indexOf(node), 1);\n i--;\n }\n this.removedNodesIn = undefined;\n }\n this.ownerIn = undefined;\n };\n return BaseHistoryInfo;\n}());\nexport { BaseHistoryInfo };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { PageLayoutViewer } from '../index';\nimport { Dictionary } from '../../base/dictionary';\nimport { ImageFormat } from '../selection/selection-helper';\nimport { Point, HelperMethods } from './editor-helper';\nimport { BaseHistoryInfo } from '../editor-history/base-history-info';\n/**\n * Image resizer implementation.\n */\nvar ImageResizer = /** @class */ (function () {\n /**\n * Constructor for image resizer module.\n * @param {DocumentEditor} node\n * @param {LayoutViewer} viewer\n * @private\n */\n function ImageResizer(node, viewer) {\n /**\n * @private\n */\n this.resizeContainerDiv = undefined;\n /**\n * @private\n */\n this.topLeftRect = undefined;\n /**\n * @private\n */\n this.topMiddleRect = undefined;\n /**\n * @private\n */\n this.topRightRect = undefined;\n /**\n * @private\n */\n this.bottomLeftRect = undefined;\n /**\n * @private\n */\n this.bottomMiddleRect = undefined;\n /**\n * @private\n */\n this.bottomRightRect = undefined;\n /**\n * @private\n */\n this.leftMiddleRect = undefined;\n /**\n * @private\n */\n this.rightMiddleRect = undefined;\n /**\n * @private\n */\n this.topLeftRectParent = undefined;\n /**\n * @private\n */\n this.topMiddleRectParent = undefined;\n /**\n * @private\n */\n this.topRightRectParent = undefined;\n /**\n * @private\n */\n this.bottomLeftRectParent = undefined;\n /**\n * @private\n */\n this.bottomMiddleRectParent = undefined;\n /**\n * @private\n */\n this.bottomRightRectParent = undefined;\n /**\n * @private\n */\n this.leftMiddleRectParent = undefined;\n /**\n * @private\n */\n this.rightMiddleRectParent = undefined;\n /**\n * @private\n */\n this.resizeMarkSizeIn = 7;\n /**\n * @private\n */\n this.selectedImageWidget = undefined;\n /**\n * @private\n */\n this.baseHistoryInfo = undefined;\n /**\n * @private\n */\n this.isImageResizing = false;\n /**\n * @private\n */\n this.isImageResizerVisible = false;\n /**\n * @private\n */\n this.isImageMoveToNextPage = false;\n /**\n * @private\n */\n this.selectedResizeElement = undefined;\n /**\n * @private\n */\n this.topValue = undefined;\n /**\n * @private\n */\n this.leftValue = undefined;\n this.owner = node;\n this.selectedImageWidget = new Dictionary();\n this.viewer = viewer;\n this.imageResizerPoints = new ImageResizingPoints();\n if (isNullOrUndefined(this.imageResizerDiv) && this.viewer && this.viewer.pageContainer) {\n this.initializeImageResizer();\n }\n }\n Object.defineProperty(ImageResizer.prototype, \"currentImageElementBox\", {\n /**\n * Gets or Sets the current image element box.\n * @private\n */\n get: function () {\n return this.currentImageElementBoxIn;\n },\n /**\n * @private\n */\n set: function (value) {\n this.currentImageElementBoxIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageResizer.prototype, \"resizeMarkSize\", {\n /**\n * Gets or Sets the resize mark size.\n * @private\n */\n get: function () {\n return this.resizeMarkSizeIn;\n },\n /**\n * @private\n */\n set: function (value) {\n this.resizeMarkSizeIn = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Gets module name.\n */\n ImageResizer.prototype.getModuleName = function () {\n return 'ImageResizer';\n };\n //Image Resizing Methods\n /**\n * Sets image resizer position.\n * @param {number} x - Specifies for image resizer left value.\n * @param {number} y - Specifies for image resizer top value.\n * @param {number} width - Specifies for image resizer width value.\n * @param {number} height - Specifies for image resizer height value.\n * @private\n */\n ImageResizer.prototype.setImageResizerPositions = function (x, y, width, height) {\n this.imageResizerDivElement.style.top = y.toString() + 'px';\n this.imageResizerDivElement.style.left = x.toString() + 'px';\n this.imageResizerDivElement.style.borderWidth = '0px';\n this.imageResizerDivElement.style.height = height + 'px';\n this.imageResizerDivElement.style.width = width + 'px';\n this.imageResizerDivElement.style.backgroundColor = 'transparent';\n this.imageResizerDivElement.style.overflow = 'hidden';\n this.imageResizerDivElement.style.position = 'absolute';\n };\n /**\n * Creates image resizer DOM element.\n * @private\n */\n ImageResizer.prototype.initializeImageResizer = function () {\n this.imageResizerDivElement = document.createElement('div');\n this.imageResizerDivElement.style.zIndex = '1';\n this.imageResizerDivElement.style.display = 'none';\n this.viewer.pageContainer.appendChild(this.imageResizerDivElement);\n };\n /**\n * Position an image resizer\n * @param {ImageElementBox} elementBox - Specifies the image position.\n * @private\n */\n ImageResizer.prototype.positionImageResizer = function (elementBox) {\n this.selectedImageWidget.clear();\n // Initializes the image resizer on demand, i.e at the time of selecting an image for the first time.\n var resizeDiv;\n if (!isNullOrUndefined(this.viewer.currentPage)) {\n resizeDiv = this.imageResizerDivElement;\n }\n if (!isNullOrUndefined(resizeDiv) && !resizeDiv.contains(this.imageResizerDiv)) {\n this.imageResizerDiv = this.initResizeMarks(resizeDiv, this);\n }\n this.imageResizerDiv.style.width = (elementBox.width) + 'px';\n this.imageResizerDiv.style.height = (elementBox.height) + 'px';\n this.currentImageElementBox = elementBox;\n var lineWidget = elementBox.line;\n var top = this.viewer.selection.getTop(lineWidget) + elementBox.margin.top;\n var left = this.viewer.selection.getLeftInternal(lineWidget, elementBox, 0);\n var page = this.viewer.selection.getPage(lineWidget.paragraph);\n this.currentPage = page;\n var x = 0;\n var y = 0;\n if (!isNullOrUndefined(resizeDiv)) {\n this.imageResizerDivElement.style.display = 'block';\n resizeDiv.style.width = page.boundingRectangle.width + 'px';\n resizeDiv.style.height = page.boundingRectangle.height + 'px';\n resizeDiv.style.left = page.boundingRectangle.x + 'px';\n resizeDiv.style.top = page.boundingRectangle.y + 'px';\n resizeDiv.style.borderWidth = '0px';\n resizeDiv.style.backgroundColor = 'transparent';\n resizeDiv.style.overflow = 'hidden';\n resizeDiv.style.position = 'absolute';\n }\n var horizontalWidth = 0;\n var pageWidth = this.viewer.getPageWidth(page);\n var pagelayout = this.viewer;\n // tslint:disable-next-line:max-line-length\n horizontalWidth = parseFloat(this.imageResizerDivElement.style.width);\n x = (this.viewer.visibleBounds.width - horizontalWidth * this.viewer.zoomFactor) / 2;\n if (x < 30) {\n x = 30;\n }\n if (pageWidth < horizontalWidth) {\n x += (horizontalWidth - pageWidth) * this.viewer.zoomFactor / 2;\n }\n // tslint:disable-next-line:max-line-length \n y = page.boundingRectangle.y * this.viewer.zoomFactor + (this.viewer.pages.indexOf(page) + 1) * 20 * (1 - this.viewer.zoomFactor);\n var currentPageDiv = this.imageResizerDivElement;\n var currentPageDivWidth = parseFloat(currentPageDiv.style.width);\n var currentPageDivHeight = parseFloat(currentPageDiv.style.height);\n var imageResizerDivWidth = parseFloat(this.imageResizerDiv.style.width);\n var imageResizerDivHeight = parseFloat(this.imageResizerDiv.style.height);\n var margin = (this.resizeMarkSize - 1) / 2;\n var width = imageResizerDivWidth + 2 * margin;\n var height = imageResizerDivHeight + 2 * margin;\n if (width > (currentPageDivWidth - left) * this.viewer.zoomFactor + margin) {\n width = (currentPageDivWidth - left) * this.viewer.zoomFactor;\n }\n if (height > (currentPageDivHeight - top) * this.viewer.zoomFactor + margin) {\n height = (currentPageDivHeight - top) * this.viewer.zoomFactor;\n }\n // if (width < imageResizerDivHeight + margin || height < imageResizerDivHeight + margin) {\n // }\n // tslint:disable-next-line:max-line-length\n this.imageResizerDivElement.style.width = parseInt(this.imageResizerDivElement.style.width.replace('px', ''), 10) * this.viewer.zoomFactor + 'px';\n this.imageResizerDivElement.style.height = parseInt(this.imageResizerDivElement.style.height.replace('px', ''), 10) * this.viewer.zoomFactor + 'px';\n height = this.viewer.render.getScaledValue(elementBox.height);\n width = this.viewer.render.getScaledValue(elementBox.width);\n left = this.viewer.render.getScaledValue(left);\n top = this.viewer.render.getScaledValue(top);\n this.setImageResizerPosition(left, top, width, height, this);\n if (!this.selectedImageWidget.containsKey(lineWidget)) {\n var selectedImageInfo = new SelectedImageInfo(elementBox.height, elementBox.width);\n this.selectedImageWidget.add(lineWidget, selectedImageInfo);\n }\n };\n /**\n * Shows the image resizer.\n * @private\n */\n ImageResizer.prototype.showImageResizer = function () {\n if (!isNullOrUndefined(this.imageResizerDivElement)) {\n this.imageResizerDivElement.style.display = '';\n }\n if (!isNullOrUndefined(this.resizeContainerDiv)) {\n this.resizeContainerDiv.style.display = '';\n }\n if (!isNullOrUndefined(this.bottomLeftRect)) {\n this.bottomLeftRect.style.display = '';\n this.bottomLeftRectParent.style.display = '';\n }\n if (!isNullOrUndefined(this.bottomRightRect)) {\n this.bottomRightRect.style.display = '';\n this.bottomRightRectParent.style.display = '';\n }\n if (!isNullOrUndefined(this.bottomMiddleRect)) {\n this.bottomMiddleRect.style.display = '';\n this.bottomMiddleRectParent.style.display = '';\n }\n if (!isNullOrUndefined(this.rightMiddleRect)) {\n this.rightMiddleRect.style.display = '';\n this.rightMiddleRectParent.style.display = '';\n }\n if (!isNullOrUndefined(this.topRightRect)) {\n this.topRightRect.style.display = '';\n this.topRightRectParent.style.display = '';\n }\n if (!isNullOrUndefined(this.topLeftRect)) {\n this.topLeftRect.style.display = '';\n this.topLeftRectParent.style.display = '';\n }\n if (!isNullOrUndefined(this.leftMiddleRect)) {\n this.leftMiddleRect.style.display = '';\n this.leftMiddleRectParent.style.display = '';\n }\n if (!isNullOrUndefined(this.topMiddleRect)) {\n this.topMiddleRect.style.display = '';\n this.topMiddleRectParent.style.display = '';\n }\n this.isImageResizerVisible = true;\n };\n /**\n * Hides the image resizer.\n * @private\n */\n ImageResizer.prototype.hideImageResizer = function () {\n if (!isNullOrUndefined(this.imageResizerDivElement)) {\n this.imageResizerDivElement.style.display = 'none';\n }\n if (!isNullOrUndefined(this.resizeContainerDiv)) {\n this.resizeContainerDiv.style.display = 'none';\n }\n if (!isNullOrUndefined(this.bottomLeftRect)) {\n this.bottomLeftRect.style.display = 'none';\n this.bottomLeftRectParent.style.display = 'none';\n }\n if (!isNullOrUndefined(this.bottomRightRect)) {\n this.bottomRightRect.style.display = 'none';\n this.bottomRightRectParent.style.display = 'none';\n }\n if (!isNullOrUndefined(this.bottomMiddleRect)) {\n this.bottomMiddleRect.style.display = 'none';\n this.bottomMiddleRectParent.style.display = 'none';\n }\n if (!isNullOrUndefined(this.rightMiddleRect)) {\n this.rightMiddleRect.style.display = 'none';\n this.rightMiddleRectParent.style.display = 'none';\n }\n if (!isNullOrUndefined(this.topRightRect)) {\n this.topRightRect.style.display = 'none';\n this.topRightRectParent.style.display = 'none';\n }\n if (!isNullOrUndefined(this.topLeftRect)) {\n this.topLeftRect.style.display = 'none';\n this.topLeftRectParent.style.display = 'none';\n }\n if (!isNullOrUndefined(this.leftMiddleRect)) {\n this.leftMiddleRect.style.display = 'none';\n this.leftMiddleRectParent.style.display = 'none';\n }\n if (!isNullOrUndefined(this.topMiddleRect)) {\n this.topMiddleRect.style.display = 'none';\n this.topMiddleRectParent.style.display = 'none';\n }\n this.isImageResizerVisible = false;\n this.currentPage = undefined;\n };\n /**\n * Initialize the resize marks.\n * @param {HTMLElement} resizeDiv - Specifies to appending resizer container div element.\n * @param {ImageResizer} imageResizer - Specifies to creating div element of each position.\n * @private\n */\n /* tslint:disable */\n ImageResizer.prototype.initResizeMarks = function (resizeDiv, imageResizer) {\n this.initResizeContainerDiv(imageResizer);\n resizeDiv.appendChild(imageResizer.resizeContainerDiv);\n imageResizer.topRightRectParent = document.createElement('div');\n imageResizer.topRightRectParent.style.cursor = 'ne-resize';\n imageResizer.topRightRectParent.id = this.viewer.owner.containerId + '_TopRightRectParent';\n this.applyProperties(imageResizer.topRightRectParent);\n imageResizer.topRightRectParent.style.width = !this.viewer.isTouchInput ? '14px' : '30px';\n imageResizer.topRightRectParent.style.height = !this.viewer.isTouchInput ? '14px' : '30px';\n imageResizer.topRightRectParent.style.opacity = '-1';\n resizeDiv.appendChild(imageResizer.topRightRectParent);\n imageResizer.topRightRect = document.createElement('div');\n imageResizer.topRightRect.id = this.viewer.owner.containerId + '_TopRightRect';\n imageResizer.topRightRect.style.cursor = 'ne-resize';\n this.applyProperties(imageResizer.topRightRect);\n resizeDiv.appendChild(imageResizer.topRightRect);\n imageResizer.topLeftRectParent = document.createElement('div');\n imageResizer.topLeftRectParent.style.cursor = 'nw-resize';\n imageResizer.topLeftRectParent.id = this.viewer.owner.containerId + '_TopLeftRectParent';\n this.applyProperties(imageResizer.topLeftRectParent);\n imageResizer.topLeftRectParent.style.width = !this.viewer.isTouchInput ? '14px' : '30px';\n imageResizer.topLeftRectParent.style.height = !this.viewer.isTouchInput ? '14px' : '30px';\n imageResizer.topLeftRectParent.style.opacity = '-1';\n resizeDiv.appendChild(imageResizer.topLeftRectParent);\n imageResizer.topLeftRect = document.createElement('div');\n imageResizer.topLeftRect.id = this.viewer.owner.containerId + '_TopLeftRect';\n imageResizer.topLeftRect.style.cursor = 'nw-resize';\n this.applyProperties(imageResizer.topLeftRect);\n resizeDiv.appendChild(imageResizer.topLeftRect);\n imageResizer.topMiddleRectParent = document.createElement('div');\n imageResizer.topMiddleRectParent.style.cursor = 'n-resize';\n imageResizer.topMiddleRectParent.id = this.viewer.owner.containerId + '_TopMiddleRectParent';\n this.applyProperties(imageResizer.topMiddleRectParent);\n imageResizer.topMiddleRectParent.style.width = !this.viewer.isTouchInput ? '14px' : '30px';\n imageResizer.topMiddleRectParent.style.height = !this.viewer.isTouchInput ? '14px' : '30px';\n imageResizer.topMiddleRectParent.style.opacity = '-1';\n resizeDiv.appendChild(imageResizer.topMiddleRectParent);\n imageResizer.topMiddleRect = document.createElement('div');\n imageResizer.topMiddleRect.id = this.viewer.owner.containerId + '_TopMiddleRect';\n imageResizer.topMiddleRect.style.cursor = 'n-resize';\n this.applyProperties(imageResizer.topMiddleRect);\n resizeDiv.appendChild(imageResizer.topMiddleRect);\n imageResizer.bottomRightRectParent = document.createElement('div');\n imageResizer.bottomRightRectParent.style.cursor = 'se-resize';\n imageResizer.bottomRightRectParent.id = this.viewer.owner.containerId + '_BottomRightRectParent';\n this.applyProperties(imageResizer.bottomRightRectParent);\n imageResizer.bottomRightRectParent.style.width = !this.viewer.isTouchInput ? '14px' : '30px';\n imageResizer.bottomRightRectParent.style.height = !this.viewer.isTouchInput ? '14px' : '30px';\n imageResizer.bottomRightRectParent.style.opacity = '-1';\n resizeDiv.appendChild(imageResizer.bottomRightRectParent);\n imageResizer.bottomRightRect = document.createElement('div');\n imageResizer.bottomRightRect.id = this.viewer.owner.containerId + '_BottomRightRect';\n imageResizer.bottomRightRect.style.cursor = 'se-resize';\n this.applyProperties(imageResizer.bottomRightRect);\n resizeDiv.appendChild(imageResizer.bottomRightRect);\n imageResizer.bottomLeftRectParent = document.createElement('div');\n imageResizer.bottomLeftRectParent.style.cursor = 'sw-resize';\n imageResizer.bottomLeftRectParent.id = this.viewer.owner.containerId + '_BottomLeftRectParent';\n this.applyProperties(imageResizer.bottomLeftRectParent);\n imageResizer.bottomLeftRectParent.style.width = !this.viewer.isTouchInput ? '14px' : '30px';\n imageResizer.bottomLeftRectParent.style.height = !this.viewer.isTouchInput ? '14px' : '30px';\n imageResizer.bottomLeftRectParent.style.opacity = '-1';\n resizeDiv.appendChild(imageResizer.bottomLeftRectParent);\n imageResizer.bottomLeftRect = document.createElement('div');\n imageResizer.bottomLeftRect.id = this.viewer.owner.containerId + '_BottomLeftRect';\n imageResizer.bottomLeftRect.style.cursor = 'sw-resize';\n this.applyProperties(imageResizer.bottomLeftRect);\n resizeDiv.appendChild(imageResizer.bottomLeftRect);\n imageResizer.bottomMiddleRectParent = document.createElement('div');\n imageResizer.bottomMiddleRectParent.style.cursor = 's-resize';\n imageResizer.bottomMiddleRectParent.id = this.viewer.owner.containerId + '_BottomMiddleRectParent';\n this.applyProperties(imageResizer.bottomMiddleRectParent);\n imageResizer.bottomMiddleRectParent.style.width = !this.viewer.isTouchInput ? '14px' : '30px';\n imageResizer.bottomMiddleRectParent.style.height = !this.viewer.isTouchInput ? '14px' : '30px';\n imageResizer.bottomMiddleRectParent.style.opacity = '-1';\n resizeDiv.appendChild(imageResizer.bottomMiddleRectParent);\n imageResizer.bottomMiddleRect = document.createElement('div');\n imageResizer.bottomMiddleRect.id = this.viewer.owner.containerId + '_BottomMiddleRect';\n imageResizer.bottomMiddleRect.style.cursor = 's-resize';\n this.applyProperties(imageResizer.bottomMiddleRect);\n resizeDiv.appendChild(imageResizer.bottomMiddleRect);\n imageResizer.rightMiddleRectParent = document.createElement('div');\n imageResizer.rightMiddleRectParent.style.cursor = 'e-resize';\n imageResizer.rightMiddleRectParent.id = this.viewer.owner.containerId + '_RightMiddleRectParent';\n this.applyProperties(imageResizer.rightMiddleRectParent);\n imageResizer.rightMiddleRectParent.style.width = !this.viewer.isTouchInput ? '14px' : '30px';\n imageResizer.rightMiddleRectParent.style.height = !this.viewer.isTouchInput ? '14px' : '30px';\n imageResizer.rightMiddleRectParent.style.opacity = '-1';\n resizeDiv.appendChild(imageResizer.rightMiddleRectParent);\n imageResizer.rightMiddleRect = document.createElement('div');\n imageResizer.rightMiddleRect.id = this.viewer.owner.containerId + '_RightMiddleRect';\n imageResizer.rightMiddleRect.style.cursor = 'e-resize';\n this.applyProperties(imageResizer.rightMiddleRect);\n resizeDiv.appendChild(imageResizer.rightMiddleRect);\n imageResizer.leftMiddleRectParent = document.createElement('div');\n imageResizer.leftMiddleRectParent.style.cursor = 'w-resize';\n imageResizer.leftMiddleRectParent.id = this.viewer.owner.containerId + '_LeftMiddleRectParent';\n this.applyProperties(imageResizer.leftMiddleRectParent);\n imageResizer.leftMiddleRectParent.style.width = !this.viewer.isTouchInput ? '14px' : '30px';\n imageResizer.leftMiddleRectParent.style.height = !this.viewer.isTouchInput ? '14px' : '30px';\n imageResizer.leftMiddleRectParent.style.opacity = '-1';\n resizeDiv.appendChild(imageResizer.leftMiddleRectParent);\n imageResizer.leftMiddleRect = document.createElement('div');\n imageResizer.leftMiddleRect.id = this.viewer.owner.containerId + '_LeftMiddleRect';\n imageResizer.leftMiddleRect.style.cursor = 'w-resize';\n this.applyProperties(imageResizer.leftMiddleRect);\n resizeDiv.appendChild(imageResizer.leftMiddleRect);\n return imageResizer.resizeContainerDiv;\n };\n /**\n * Sets the image resizer position.\n * @param {number} left - Specifies for image resizer left value.\n * @param {number} top - Specifies for image resizer top value.\n * @param {number} width - Specifies for image resizer width value.\n * @param {number} height - Specifies for image resizer height value.\n * @param {ImageResizer} imageResizer - Specifies for image resizer.\n * @private\n */\n ImageResizer.prototype.setImageResizerPosition = function (left, top, width, height, imageResizer) {\n //Positions Updating For Image Resize Div\n imageResizer.resizeContainerDiv.style.width = width + 'px';\n imageResizer.resizeContainerDiv.style.height = height + 'px';\n imageResizer.resizeContainerDiv.style.left = left - 1 + 'px';\n imageResizer.resizeContainerDiv.style.top = top + 'px';\n //Positions Updating For Image Resizing Points\n imageResizer.topRightRect.style.left = ((left + width) - 5) + 'px';\n imageResizer.topRightRect.style.top = (top - 4) + 'px';\n imageResizer.topLeftRect.style.left = (left - 5) + 'px';\n imageResizer.topLeftRect.style.top = (top - 4) + 'px';\n imageResizer.topMiddleRect.style.left = ((parseFloat(imageResizer.topLeftRect.style.left) + (width / 2)) - 4) + 'px';\n imageResizer.topMiddleRect.style.top = (top - 4) + 'px';\n imageResizer.bottomRightRect.style.left = imageResizer.topRightRect.style.left;\n imageResizer.bottomRightRect.style.top = (parseFloat(imageResizer.topRightRect.style.top) + height) + 'px';\n imageResizer.bottomLeftRect.style.left = imageResizer.topLeftRect.style.left;\n imageResizer.bottomLeftRect.style.top = (parseFloat(imageResizer.topLeftRect.style.top) + height) + 'px';\n imageResizer.bottomMiddleRect.style.left = imageResizer.topMiddleRect.style.left;\n imageResizer.bottomMiddleRect.style.top = (parseFloat(imageResizer.topMiddleRect.style.top) + height) + 'px';\n imageResizer.rightMiddleRect.style.left = ((left + width) - 4) + 'px';\n imageResizer.rightMiddleRect.style.top = (parseFloat(imageResizer.topRightRect.style.top) + (height / 2)) + 'px';\n imageResizer.leftMiddleRect.style.left = imageResizer.topLeftRect.style.left;\n imageResizer.leftMiddleRect.style.top = (parseFloat(imageResizer.topLeftRect.style.top) + (height / 2)) + 'px';\n imageResizer.topRightRectParent.style.left = !this.viewer.isTouchInput ? ((left + width) - 8) + 'px' : ((left + width) - 15) + 'px';\n imageResizer.topRightRectParent.style.top = !this.viewer.isTouchInput ? (top - 7) + 'px' : (top - 15) + 'px';\n imageResizer.topLeftRectParent.style.left = !this.viewer.isTouchInput ? (left - 8) + 'px' : (left - 15) + 'px';\n imageResizer.topLeftRectParent.style.top = !this.viewer.isTouchInput ? (top - 7) + 'px' : (top - 15) + 'px';\n imageResizer.topMiddleRectParent.style.left = ((parseFloat(imageResizer.topLeftRectParent.style.left) + (width / 2)) - 4) + 'px';\n imageResizer.topMiddleRectParent.style.top = !this.viewer.isTouchInput ? (top - 7) + 'px' : (top - 15) + 'px';\n imageResizer.bottomRightRectParent.style.left = imageResizer.topRightRectParent.style.left;\n imageResizer.bottomRightRectParent.style.top = (parseFloat(imageResizer.topRightRectParent.style.top) + height) + 'px';\n imageResizer.bottomLeftRectParent.style.left = imageResizer.topLeftRectParent.style.left;\n imageResizer.bottomLeftRectParent.style.top = (parseFloat(imageResizer.topLeftRectParent.style.top) + height) + 'px';\n imageResizer.bottomMiddleRectParent.style.left = imageResizer.topMiddleRectParent.style.left;\n imageResizer.bottomMiddleRectParent.style.top = (parseFloat(imageResizer.topMiddleRectParent.style.top) + height) + 'px';\n imageResizer.rightMiddleRectParent.style.left = !this.viewer.isTouchInput ? ((left + width) - 7) + 'px' : ((left + width) - 15) + 'px';\n imageResizer.rightMiddleRectParent.style.top = (parseFloat(imageResizer.topRightRectParent.style.top) + (height / 2)) + 'px';\n imageResizer.leftMiddleRectParent.style.left = imageResizer.topLeftRectParent.style.left;\n imageResizer.leftMiddleRectParent.style.top = (parseFloat(imageResizer.topLeftRectParent.style.top) + (height / 2)) + 'px';\n this.setImageResizingPoints(imageResizer);\n if (this.viewer.isTouchInput) {\n this.applyPropertiesForTouch();\n }\n else {\n this.applyPropertiesForMouse();\n }\n };\n /**\n * Sets the image resizing points.\n * @param {ImageResizer} imageResizer - Specifies for position of each resizing elements.\n * @private\n */\n ImageResizer.prototype.setImageResizingPoints = function (imageResizer) {\n this.imageResizerPoints.resizeContainerDiv.x = parseFloat(imageResizer.resizeContainerDiv.style.left);\n this.imageResizerPoints.resizeContainerDiv.y = parseFloat(imageResizer.resizeContainerDiv.style.top);\n this.imageResizerPoints.bottomLeftRectParent.x = parseFloat(imageResizer.bottomLeftRectParent.style.left);\n this.imageResizerPoints.bottomLeftRectParent.y = parseFloat(imageResizer.bottomLeftRectParent.style.top);\n this.imageResizerPoints.bottomRightRectParent.x = parseFloat(imageResizer.bottomRightRectParent.style.left);\n this.imageResizerPoints.bottomRightRectParent.y = parseFloat(imageResizer.bottomRightRectParent.style.top);\n this.imageResizerPoints.bottomMiddleRectParent.x = parseFloat(imageResizer.bottomMiddleRectParent.style.left);\n this.imageResizerPoints.bottomMiddleRectParent.y = parseFloat(imageResizer.bottomMiddleRectParent.style.top);\n this.imageResizerPoints.topLeftRectParent.x = parseFloat(imageResizer.topLeftRectParent.style.left);\n this.imageResizerPoints.topLeftRectParent.y = parseFloat(imageResizer.topLeftRectParent.style.top);\n this.imageResizerPoints.topRightRectParent.x = parseFloat(imageResizer.topRightRectParent.style.left);\n this.imageResizerPoints.topRightRectParent.y = parseFloat(imageResizer.topRightRectParent.style.top);\n this.imageResizerPoints.topMiddleRectParent.x = parseFloat(imageResizer.topMiddleRectParent.style.left);\n this.imageResizerPoints.topMiddleRectParent.y = parseFloat(imageResizer.topMiddleRectParent.style.top);\n this.imageResizerPoints.leftMiddleRectParent.x = parseFloat(imageResizer.leftMiddleRectParent.style.left);\n this.imageResizerPoints.leftMiddleRectParent.y = parseFloat(imageResizer.leftMiddleRectParent.style.top);\n this.imageResizerPoints.rightMiddleRectParent.x = parseFloat(imageResizer.rightMiddleRectParent.style.left);\n this.imageResizerPoints.rightMiddleRectParent.y = parseFloat(imageResizer.rightMiddleRectParent.style.top);\n };\n /**\n * Initialize the resize container div element.\n * @param {ImageResizer} imageResizer - Specifies for creating resize container div element.\n * @private\n */\n ImageResizer.prototype.initResizeContainerDiv = function (imageResizer) {\n imageResizer.resizeContainerDiv = document.createElement('div');\n imageResizer.resizeContainerDiv.id = this.viewer.owner.containerId + '_ResizeDivElement';\n imageResizer.resizeContainerDiv.style.position = 'absolute';\n imageResizer.resizeContainerDiv.style.border = '1px solid #bfbfbf';\n imageResizer.resizeContainerDiv.style.zIndex = '30';\n imageResizer.resizeContainerDiv.style.backgroundColor = 'transparent';\n imageResizer.resizeContainerDiv.style.display = 'block';\n };\n /**\n * Apply the properties of each resize rectangle element.\n * @param {HTMLDivElement} resizeRectElement - Specifies for applying properties to resize rectangle element.\n * @private\n */\n ImageResizer.prototype.applyProperties = function (resizeRectElement) {\n resizeRectElement.style.position = 'absolute';\n resizeRectElement.style.width = '8px';\n resizeRectElement.style.height = '8px';\n resizeRectElement.style.fontSize = '0px';\n resizeRectElement.style.zIndex = ' 551';\n resizeRectElement.style.backgroundColor = '#ffffff';\n resizeRectElement.style.border = '1px solid #bfbfbf';\n resizeRectElement.style.boxShadow = '0 1px 2px 0 #bfbfbf 0.35';\n resizeRectElement.style.color = '#000000';\n };\n /**\n * Handles an image resizing.\n * @param {number} x - Specifies for left value while resizing.\n * @param {number} y - Specifies for top value while resizing.\n */\n ImageResizer.prototype.handleImageResizing = function (touchPoint, prevX, prevY) {\n prevX = prevX / this.viewer.zoomFactor;\n prevY = prevY / this.viewer.zoomFactor;\n this.leftValue = isNullOrUndefined(this.leftValue) ? prevX : this.leftValue;\n this.topValue = isNullOrUndefined(this.topValue) ? prevY : this.topValue;\n var points;\n switch (this.selectedResizeElement.id.split('_')[1]) {\n case 'TopRightRectParent':\n points = this.topRightResizing(touchPoint);\n prevX = points.left;\n prevY = points.top;\n break;\n case 'TopLeftRectParent':\n points = this.topLeftResizing(touchPoint);\n prevX = -points.left;\n prevY = -points.top;\n break;\n case 'TopMiddleRectParent':\n prevX = 0;\n prevY = this.topMiddleResizing(touchPoint);\n break;\n case 'BottomRightRectParent':\n points = this.bottomRightResizing(touchPoint);\n prevX = points.left;\n prevY = points.top;\n break;\n case 'BottomLeftRectParent':\n points = this.bottomLeftResizing(touchPoint);\n prevX = -points.left;\n prevY = -points.top;\n break;\n case 'BottomMiddleRectParent':\n prevY = touchPoint.y - prevY;\n prevX = 0;\n break;\n case 'RightMiddleRectParent':\n prevX = touchPoint.x - prevX;\n prevY = 0;\n break;\n case 'LeftMiddleRectParent':\n prevX = this.leftMiddleResizing(touchPoint);\n prevY = 0;\n break;\n default:\n break;\n }\n if (prevX !== 0 || prevY !== 0) {\n var widget = this.currentImageElementBox.line.paragraph;\n var image = this.currentImageElementBox;\n if (!isNullOrUndefined(widget) && widget.isInsideTable) {\n var cellWidget = widget.containerWidget;\n if (!isNullOrUndefined(cellWidget)) {\n var rowWidget = cellWidget.containerWidget;\n var imageHeight = HelperMethods.convertPointToPixel(image.height);\n var widgetHeight = rowWidget.height - imageHeight;\n if (prevY > 0 && rowWidget.y + widgetHeight + imageHeight + prevY > this.viewer.clientArea.bottom) {\n this.isImageMoveToNextPage = true;\n }\n }\n }\n // tslint:disable-next-line:max-line-length \n if (this.owner.enableHistoryMode) {\n this.initHistoryForImageResizer(this.currentImageElementBox);\n }\n if (!isNullOrUndefined(this.currentImageElementBox)) {\n // tslint:disable-next-line:max-line-length \n var width = this.currentImageElementBox.width + prevX > 10 ? this.currentImageElementBox.width + prevX : 10;\n // tslint:disable-next-line:max-line-length \n var height = this.currentImageElementBox.height + prevY > 10 ? this.currentImageElementBox.height + prevY : 10;\n if (this.selectedResizeElement.id.split('_')[1] === 'BottomRightRectParent'\n || this.selectedResizeElement.id.split('_')[1] === 'TopRightRectParent'\n || this.selectedResizeElement.id.split('_')[1] === 'BottomLeftRectParent'\n || this.selectedResizeElement.id.split('_')[1] === 'TopLeftRectParent') {\n height = this.currentImageElementBox.height / this.currentImageElementBox.width * width;\n width = this.currentImageElementBox.width / this.currentImageElementBox.height * height;\n }\n this.currentImageElementBox.width = width;\n this.currentImageElementBox.height = height;\n var owner = this.currentImageElementBox.line.paragraph;\n this.positionImageResizer(this.currentImageElementBox);\n }\n this.isImageResizing = true;\n }\n };\n /**\n * Handles image resizing on mouse.\n * @param {MouseEvent} event - Specifies for image resizing using mouse event.\n * @private\n */\n ImageResizer.prototype.handleImageResizingOnMouse = function (event) {\n if (!isNullOrUndefined(this.selectedResizeElement)) {\n var prevX = parseFloat(this.selectedResizeElement.style.left);\n var prevY = parseFloat(this.selectedResizeElement.style.top);\n var cursorPoint = new Point(event.offsetX, event.offsetY);\n var touchPoint = this.viewer.findFocusedPage(cursorPoint, true);\n this.handleImageResizing(touchPoint, prevX, prevY);\n }\n };\n ImageResizer.prototype.topMiddleResizing = function (touchPoint) {\n var prevY;\n if (this.topValue >= touchPoint.y) {\n prevY = this.topValue / touchPoint.y;\n this.topValue = touchPoint.y;\n if (this.viewer instanceof PageLayoutViewer) {\n if (this.topValue <= this.viewer.pageGap) {\n prevY = 1;\n }\n }\n }\n else {\n prevY = -(touchPoint.y / this.topValue);\n this.topValue = touchPoint.y;\n if (this.topValue === 0) {\n prevY = -1;\n }\n }\n return prevY;\n };\n ImageResizer.prototype.leftMiddleResizing = function (touchPoint) {\n var prevX;\n if (this.leftValue >= touchPoint.x) {\n prevX = this.leftValue / touchPoint.x;\n this.leftValue = touchPoint.x;\n if (this.leftValue === 0) {\n prevX = 1;\n this.leftValue = parseFloat(this.selectedResizeElement.style.left);\n }\n }\n else {\n prevX = -(touchPoint.x / this.leftValue);\n this.leftValue = touchPoint.x;\n }\n return prevX;\n };\n ImageResizer.prototype.topRightResizing = function (touchPoint) {\n var points;\n if (this.leftValue <= touchPoint.x && this.topValue >= touchPoint.y) {\n points = this.getOuterResizingPoint(touchPoint);\n }\n else {\n points = this.getInnerResizingPoint(touchPoint);\n }\n return points;\n };\n ImageResizer.prototype.topLeftResizing = function (touchPoint) {\n var points;\n if (this.leftValue >= touchPoint.x && this.topValue >= touchPoint.y) {\n points = this.getOuterResizingPoint(touchPoint);\n }\n else {\n points = this.getInnerResizingPoint(touchPoint);\n }\n return points;\n };\n ImageResizer.prototype.bottomRightResizing = function (touchPoint) {\n var points;\n if (this.leftValue <= touchPoint.x && this.topValue <= touchPoint.y) {\n points = this.getOuterResizingPoint(touchPoint);\n }\n else {\n points = this.getInnerResizingPoint(touchPoint);\n }\n return points;\n };\n ImageResizer.prototype.bottomLeftResizing = function (touchPoint) {\n var points;\n if (this.leftValue >= touchPoint.x && this.topValue <= touchPoint.y) {\n points = this.getOuterResizingPoint(touchPoint);\n }\n else {\n points = this.getInnerResizingPoint(touchPoint);\n }\n return points;\n };\n ImageResizer.prototype.getOuterResizingPoint = function (touchPoint) {\n var prevX;\n var prevY;\n prevX = touchPoint.x - this.leftValue;\n this.leftValue = touchPoint.x;\n prevY = touchPoint.y - this.topValue;\n this.topValue = touchPoint.y;\n return { left: prevX, top: prevY };\n };\n ImageResizer.prototype.getInnerResizingPoint = function (touchPoint) {\n var prevX;\n var prevY;\n prevX = -(this.leftValue - touchPoint.x);\n this.leftValue = touchPoint.x;\n prevY = -(this.topValue - touchPoint.y);\n this.topValue = touchPoint.y;\n return { left: prevX, top: prevY };\n };\n /**\n * Handles image resizing on touch.\n * @param {TouchEvent} touchEvent - Specifies for image resizing using touch event.\n * @private\n */\n ImageResizer.prototype.handleImageResizingOnTouch = function (touchEvent) {\n if (!isNullOrUndefined(this.selectedResizeElement)) {\n var prevX = parseFloat(this.selectedResizeElement.style.left) + 24;\n var prevY = parseFloat(this.selectedResizeElement.style.top) + 24;\n var touch = touchEvent.touches;\n var cursorPoint = new Point(touch[0].clientX, touch[0].clientY);\n var touchPoint = this.viewer.findFocusedPage(cursorPoint, true);\n if (isNullOrUndefined(this.currentImageElementBox) || isNullOrUndefined(this.currentImageElementBox)) {\n return;\n }\n this.handleImageResizing(touchPoint, prevX, prevY);\n }\n };\n /**\n * Gets the image point of mouse.\n * @param {Point} touchPoint - Specifies for resizer cursor position.\n * @private\n */\n ImageResizer.prototype.getImagePoint = function (touchPoint) {\n var x = this.viewer.render.getScaledValue(touchPoint.x, 1);\n var y = this.viewer.render.getScaledValue(touchPoint.y, 2);\n touchPoint = new Point(x, y);\n var imageResizingPoints = this.imageResizerPoints;\n var resizePosition = '';\n var selectedElement = undefined;\n var bottomMiddle = imageResizingPoints.bottomMiddleRectParent;\n var bottomRight = imageResizingPoints.bottomRightRectParent;\n var bottomLeft = imageResizingPoints.bottomLeftRectParent;\n var topMiddle = imageResizingPoints.topMiddleRectParent;\n var topRight = imageResizingPoints.topRightRectParent;\n var topLeft = imageResizingPoints.topLeftRectParent;\n var rightMiddle = imageResizingPoints.rightMiddleRectParent;\n var leftMiddle = imageResizingPoints.leftMiddleRectParent;\n if (!isNullOrUndefined(this.bottomMiddleRectParent) && this.bottomMiddleRectParent.style.display !== 'none') {\n // tslint:disable-next-line:max-line-length \n if ((touchPoint.x > bottomMiddle.x && touchPoint.x <= bottomMiddle.x + 15) && (touchPoint.y > bottomMiddle.y && touchPoint.y <= bottomMiddle.y + 15)) {\n selectedElement = this.bottomMiddleRectParent;\n resizePosition = 's-resize';\n // tslint:disable-next-line:max-line-length \n }\n else if ((touchPoint.x > bottomRight.x && touchPoint.x <= bottomRight.x + 15) && (touchPoint.y > bottomRight.y && touchPoint.y <= bottomRight.y + 15)) {\n selectedElement = this.bottomRightRectParent;\n resizePosition = 'se-resize';\n // tslint:disable-next-line:max-line-length \n }\n else if ((touchPoint.x > bottomLeft.x && touchPoint.x <= bottomLeft.x + 15) && (touchPoint.y > bottomLeft.y && touchPoint.y <= bottomLeft.y + 15)) {\n selectedElement = this.bottomLeftRectParent;\n resizePosition = 'sw-resize';\n // tslint:disable-next-line:max-line-length \n }\n else if ((touchPoint.x > topMiddle.x && touchPoint.x <= topMiddle.x + 15) && (touchPoint.y > topMiddle.y && touchPoint.y <= topMiddle.y + 15)) {\n selectedElement = this.topMiddleRectParent;\n resizePosition = 'n-resize';\n // tslint:disable-next-line:max-line-length \n }\n else if ((touchPoint.x > topRight.x && touchPoint.x <= topRight.x + 15) && (touchPoint.y > topRight.y && touchPoint.y <= topRight.y + 15)) {\n selectedElement = this.topRightRectParent;\n resizePosition = 'ne-resize';\n // tslint:disable-next-line:max-line-length \n }\n else if ((touchPoint.x > topLeft.x && touchPoint.x <= topLeft.x + 15) && (touchPoint.y > topLeft.y && touchPoint.y <= topLeft.y + 15)) {\n selectedElement = this.topLeftRectParent;\n resizePosition = 'nw-resize';\n // tslint:disable-next-line:max-line-length \n }\n else if ((touchPoint.x > leftMiddle.x && touchPoint.x <= leftMiddle.x + 15) && (touchPoint.y > leftMiddle.y && touchPoint.y <= leftMiddle.y + 15)) {\n selectedElement = this.leftMiddleRectParent;\n resizePosition = 'w-resize';\n // tslint:disable-next-line:max-line-length \n }\n else if ((touchPoint.x > rightMiddle.x && touchPoint.x <= rightMiddle.x + 15) && (touchPoint.y > rightMiddle.y && touchPoint.y <= rightMiddle.y + 15)) {\n selectedElement = this.rightMiddleRectParent;\n resizePosition = 'e-resize';\n // tslint:disable-next-line:max-line-length \n }\n else if (!isNullOrUndefined(this.resizeContainerDiv) && (touchPoint.x > parseFloat(this.resizeContainerDiv.style.left)\n && touchPoint.x <= (parseFloat(this.resizeContainerDiv.style.left) + parseFloat(this.resizeContainerDiv.style.width)))\n && (touchPoint.y > parseFloat(this.resizeContainerDiv.style.top)\n // tslint:disable-next-line:max-line-length \n && touchPoint.y <= (parseFloat(this.resizeContainerDiv.style.top) + parseFloat(this.resizeContainerDiv.style.height)))) {\n resizePosition = 'move';\n }\n }\n return { 'selectedElement': selectedElement, 'resizePosition': resizePosition };\n };\n ImageResizer.prototype.applyPropertiesForMouse = function () {\n if (!isNullOrUndefined(this.bottomLeftRectParent)) {\n this.bottomMiddleRectParent.style.width = '14px';\n this.bottomMiddleRectParent.style.height = '14px';\n this.bottomRightRectParent.style.width = '14px';\n this.bottomRightRectParent.style.height = '14px';\n this.bottomLeftRectParent.style.width = '14px';\n this.bottomLeftRectParent.style.height = '14px';\n this.topMiddleRectParent.style.width = '14px';\n this.topMiddleRectParent.style.height = '14px';\n this.topRightRectParent.style.width = '14px';\n this.topRightRectParent.style.height = '14px';\n this.topLeftRectParent.style.width = '14px';\n this.topLeftRectParent.style.height = '14px';\n this.leftMiddleRectParent.style.width = '14px';\n this.leftMiddleRectParent.style.height = '14px';\n this.rightMiddleRectParent.style.width = '14px';\n this.rightMiddleRectParent.style.height = '14px';\n }\n };\n /**\n * Gets the image point of touch.\n * @param {Point} touchPoints - Specifies for resizer cursor position.\n * @private\n */\n ImageResizer.prototype.getImagePointOnTouch = function (touchPoints) {\n var x = this.viewer.render.getScaledValue(touchPoints.x, 1);\n var y = this.viewer.render.getScaledValue(touchPoints.y, 2);\n touchPoints = new Point(x, y);\n var imageResizingPointsOnTouch = this.imageResizerPoints;\n var resizePosition = '';\n var selectedElements = undefined;\n var bottomMiddle = imageResizingPointsOnTouch.bottomMiddleRectParent;\n var bottomRight = imageResizingPointsOnTouch.bottomRightRectParent;\n var bottomLeft = imageResizingPointsOnTouch.bottomLeftRectParent;\n var topMiddle = imageResizingPointsOnTouch.topMiddleRectParent;\n var topRight = imageResizingPointsOnTouch.topRightRectParent;\n var topLeft = imageResizingPointsOnTouch.topLeftRectParent;\n var rightMiddle = imageResizingPointsOnTouch.rightMiddleRectParent;\n var leftMiddle = imageResizingPointsOnTouch.leftMiddleRectParent;\n if (!isNullOrUndefined(this.bottomMiddleRectParent) && this.bottomMiddleRectParent.style.display !== 'none') {\n // tslint:disable-next-line:max-line-length \n if ((touchPoints.x > bottomMiddle.x && touchPoints.x <= bottomMiddle.x + 25) && (touchPoints.y > bottomMiddle.y && touchPoints.y <= bottomMiddle.y + 25)) {\n selectedElements = this.bottomMiddleRectParent;\n resizePosition = 's-resize';\n // tslint:disable-next-line:max-line-length \n }\n else if ((touchPoints.x > bottomRight.x && touchPoints.x <= bottomRight.x + 25) && (touchPoints.y > bottomRight.y && touchPoints.y <= bottomRight.y + 25)) {\n selectedElements = this.bottomRightRectParent;\n resizePosition = 'se-resize';\n // tslint:disable-next-line:max-line-length \n }\n else if ((touchPoints.x > bottomLeft.x && touchPoints.x <= bottomLeft.x + 25) && (touchPoints.y > bottomLeft.y && touchPoints.y <= bottomLeft.y + 25)) {\n selectedElements = this.bottomLeftRectParent;\n resizePosition = 'sw-resize';\n // tslint:disable-next-line:max-line-length \n }\n else if ((touchPoints.x > topMiddle.x && touchPoints.x <= topMiddle.x + 25) && (touchPoints.y > topMiddle.y && touchPoints.y <= topMiddle.y + 25)) {\n selectedElements = this.topMiddleRectParent;\n resizePosition = 'n-resize';\n // tslint:disable-next-line:max-line-length \n }\n else if ((touchPoints.x > topRight.x && touchPoints.x <= topRight.x + 25) && (touchPoints.y > topRight.y && touchPoints.y <= topRight.y + 25)) {\n selectedElements = this.topRightRectParent;\n resizePosition = 'ne-resize';\n // tslint:disable-next-line:max-line-length \n }\n else if ((touchPoints.x > topLeft.x && touchPoints.x <= topLeft.x + 25) && (touchPoints.y > topLeft.y && touchPoints.y <= topLeft.y + 25)) {\n selectedElements = this.topLeftRectParent;\n resizePosition = 'nw-resize';\n // tslint:disable-next-line:max-line-length \n }\n else if ((touchPoints.x > leftMiddle.x && touchPoints.x <= leftMiddle.x + 25) && (touchPoints.y > leftMiddle.y && touchPoints.y <= leftMiddle.y + 25)) {\n selectedElements = this.leftMiddleRectParent;\n resizePosition = 'w-resize';\n // tslint:disable-next-line:max-line-length \n }\n else if ((touchPoints.x > rightMiddle.x && touchPoints.x <= rightMiddle.x + 25) && (touchPoints.y > rightMiddle.y && touchPoints.y <= rightMiddle.y + 25)) {\n selectedElements = this.rightMiddleRectParent;\n resizePosition = 'e-resize';\n // tslint:disable-next-line:max-line-length \n }\n else if (!isNullOrUndefined(this.resizeContainerDiv) && (touchPoints.x > parseFloat(this.resizeContainerDiv.style.left)\n && touchPoints.x <= (parseFloat(this.resizeContainerDiv.style.left) + parseFloat(this.resizeContainerDiv.style.width)))\n && (touchPoints.y > parseFloat(this.resizeContainerDiv.style.top)\n // tslint:disable-next-line:max-line-length \n && touchPoints.y <= (parseFloat(this.resizeContainerDiv.style.top) + parseFloat(this.resizeContainerDiv.style.height)))) {\n resizePosition = 'move';\n }\n }\n return { 'selectedElement': selectedElements, 'resizePosition': resizePosition };\n };\n ImageResizer.prototype.applyPropertiesForTouch = function () {\n if (!isNullOrUndefined(this.bottomLeftRectParent)) {\n this.bottomMiddleRectParent.style.width = '30px';\n this.bottomMiddleRectParent.style.height = '30px';\n this.bottomRightRectParent.style.width = '30px';\n this.bottomRightRectParent.style.height = '30px';\n this.bottomLeftRectParent.style.width = '30px';\n this.bottomLeftRectParent.style.height = '30px';\n this.topMiddleRectParent.style.width = '30px';\n this.topMiddleRectParent.style.height = '30px';\n this.topRightRectParent.style.width = '30px';\n this.topRightRectParent.style.height = '30px';\n this.topLeftRectParent.style.width = '30px';\n this.topLeftRectParent.style.height = '30px';\n this.leftMiddleRectParent.style.width = '30px';\n this.leftMiddleRectParent.style.height = '30px';\n this.rightMiddleRectParent.style.width = '30px';\n this.rightMiddleRectParent.style.height = '30px';\n }\n };\n /**\n * @private\n */\n ImageResizer.prototype.mouseUpInternal = function () {\n this.currentImageElementBox.width = parseFloat(this.imageResizerDiv.style.width) / this.viewer.zoomFactor;\n this.currentImageElementBox.height = parseFloat(this.imageResizerDiv.style.height) / this.viewer.zoomFactor;\n this.owner.isShiftingEnabled = true;\n this.owner.editorModule.setOffsetValue(this.owner.selection);\n this.viewer.layout.reLayoutParagraph(this.currentImageElementBox.line.paragraph, 0, 0);\n this.owner.editorModule.reLayout(this.owner.selection, true);\n this.viewer.updateScrollBars();\n };\n /**\n * Initialize history for image resizer.\n * @param {ImageResizer} imageResizer - Specifies for image resizer.\n * @param {WImage} imageContainer - Specifies for an image.\n * @private\n */\n ImageResizer.prototype.initHistoryForImageResizer = function (imageContainer) {\n if (!isNullOrUndefined(this.owner) && isNullOrUndefined(this.baseHistoryInfo)) {\n this.baseHistoryInfo = new BaseHistoryInfo(this.owner);\n this.baseHistoryInfo.action = 'ImageResizing';\n this.baseHistoryInfo.updateSelection();\n this.baseHistoryInfo.modifiedProperties.push(new ImageFormat(imageContainer));\n }\n };\n /**\n * Updates histroy for image resizer.\n * @private\n */\n ImageResizer.prototype.updateHistoryForImageResizer = function () {\n if (!isNullOrUndefined(this.owner) && !isNullOrUndefined(this.baseHistoryInfo)) {\n var imageFormat = this.baseHistoryInfo.modifiedProperties[0];\n if (this.currentImageElementBox.width === imageFormat.width\n && this.currentImageElementBox.height === imageFormat.height) {\n this.baseHistoryInfo.modifiedProperties.pop();\n }\n else {\n //Records the image size modifications\n this.owner.editorHistory.recordChanges(this.baseHistoryInfo);\n }\n //Fires the content changed event for the image size modifications\n this.baseHistoryInfo = undefined;\n }\n };\n /**\n * Updates image resize container when applying zooming\n * @private\n */\n ImageResizer.prototype.updateImageResizerPosition = function () {\n if (!isNullOrUndefined(this.currentImageElementBox)) {\n var elementBox = this.currentImageElementBox;\n var lineWidget = elementBox.line;\n var top_1 = this.viewer.selection.getTop(lineWidget) + elementBox.margin.top;\n var left = this.viewer.selection.getLeftInternal(lineWidget, elementBox, 0);\n var topValue = top_1 * this.viewer.zoomFactor;\n var leftValue = left * this.viewer.zoomFactor;\n var height = this.viewer.render.getScaledValue(elementBox.height, 2);\n var width = this.viewer.render.getScaledValue(elementBox.width, 1);\n this.setImageResizerPosition(leftValue, topValue, width, height, this);\n }\n };\n /**\n * Dispose the internal objects which are maintained.\n * @private\n */\n ImageResizer.prototype.destroy = function () {\n if (!isNullOrUndefined(this.resizeContainerDiv)) {\n this.resizeContainerDiv.innerHTML = '';\n }\n if (!isNullOrUndefined(this.topLeftRect)) {\n this.topLeftRect.innerHTML = '';\n }\n if (!isNullOrUndefined(this.topMiddleRect)) {\n this.topMiddleRect.innerHTML = '';\n }\n if (!isNullOrUndefined(this.topRightRect)) {\n this.topRightRect.innerHTML = '';\n }\n if (!isNullOrUndefined(this.bottomLeftRect)) {\n this.bottomLeftRect.innerHTML = '';\n }\n if (!isNullOrUndefined(this.bottomMiddleRect)) {\n this.bottomMiddleRect.innerHTML = '';\n }\n if (!isNullOrUndefined(this.bottomRightRect)) {\n this.bottomRightRect.innerHTML = '';\n }\n if (!isNullOrUndefined(this.leftMiddleRect)) {\n this.leftMiddleRect.innerHTML = '';\n }\n if (!isNullOrUndefined(this.rightMiddleRect)) {\n this.rightMiddleRect.innerHTML = '';\n }\n if (!isNullOrUndefined(this.imageResizerDiv)) {\n this.imageResizerDiv.innerHTML = '';\n }\n if (!isNullOrUndefined(this.selectedImageWidget)) {\n this.selectedImageWidget.destroy();\n }\n if (!isNullOrUndefined(this.imageResizerDivElement)) {\n this.imageResizerDivElement.innerHTML = '';\n }\n this.imageResizerDivElement = undefined;\n this.resizeContainerDiv = undefined;\n this.topLeftRect = undefined;\n this.topMiddleRect = undefined;\n this.topRightRect = undefined;\n this.bottomLeftRect = undefined;\n this.bottomMiddleRect = undefined;\n this.bottomRightRect = undefined;\n this.leftMiddleRect = undefined;\n this.rightMiddleRect = undefined;\n this.imageResizerDiv = undefined;\n this.selectedImageWidget = undefined;\n this.isImageResizing = false;\n this.isImageResizerVisible = false;\n this.currentImageElementBoxIn = undefined;\n //this.baseHistoryInfo = undefined;\n this.resizeMarkSizeIn = undefined;\n this.viewer = undefined;\n this.owner = undefined;\n };\n return ImageResizer;\n}());\nexport { ImageResizer };\n/**\n * @private\n */\nvar ImageResizingPoints = /** @class */ (function () {\n /**\n * Constructor for image resizing points class.\n */\n function ImageResizingPoints() {\n /**\n * @private\n */ this.resizeContainerDiv = new Point(0, 0);\n /**\n * @private\n */\n this.topLeftRectParent = new Point(0, 0);\n /**\n * @private\n */\n this.topMiddleRectParent = new Point(0, 0);\n /**\n * @private\n */\n this.topRightRectParent = new Point(0, 0);\n /**\n * @private\n */\n this.bottomLeftRectParent = new Point(0, 0);\n /**\n * @private\n */\n this.bottomMiddleRectParent = new Point(0, 0);\n /**\n * @private\n */\n this.bottomRightRectParent = new Point(0, 0);\n /**\n * @private\n */\n this.leftMiddleRectParent = new Point(0, 0);\n /**\n * @private\n */\n this.rightMiddleRectParent = new Point(0, 0);\n var text = 'DocumentEditor';\n }\n return ImageResizingPoints;\n}());\nexport { ImageResizingPoints };\n/**\n * @private\n */\nvar SelectedImageInfo = /** @class */ (function () {\n /**\n * Constructor for selected image info class.\n * @param {number} height - Specifies for height value.\n * @param {number} width - Specifies for width value.\n */\n function SelectedImageInfo(height, width) {\n this.heightIn = 0;\n this.widthIn = 0;\n this.heightIn = height;\n this.widthIn = width;\n }\n Object.defineProperty(SelectedImageInfo.prototype, \"height\", {\n /**\n * Gets or Sets the height value.\n * @private\n */\n get: function () {\n return this.heightIn;\n },\n /**\n * @private\n */\n set: function (value) {\n this.heightIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectedImageInfo.prototype, \"width\", {\n /**\n * Gets or Sets the width value.\n * @private\n */\n get: function () {\n return this.widthIn;\n },\n /**\n * @private\n */\n set: function (value) {\n this.widthIn = value;\n },\n enumerable: true,\n configurable: true\n });\n return SelectedImageInfo;\n}());\nexport { SelectedImageInfo };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { BaseHistoryInfo } from './base-history-info';\n/**\n * EditorHistory preservation class\n */\n/**\n * @private\n */\nvar HistoryInfo = /** @class */ (function (_super) {\n __extends(HistoryInfo, _super);\n function HistoryInfo(node, isChild) {\n var _this = _super.call(this, node) || this;\n _this.isChildHistoryInfo = false;\n _this.isChildHistoryInfo = isChild;\n return _this;\n }\n Object.defineProperty(HistoryInfo.prototype, \"hasAction\", {\n /**\n * @private\n */\n get: function () {\n return !isNullOrUndefined(this.modifiedActions);\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Adds the modified actions\n * @param {BaseHistoryInfo} baseHistoryInfo\n * @private\n */\n HistoryInfo.prototype.addModifiedAction = function (baseHistoryInfo) {\n // For complex actions such as Replace text, Insert/Remove Hyperlink etc.\n if (!(this.editorHistory.isUndoing || this.editorHistory.isRedoing)) {\n if (isNullOrUndefined(this.modifiedActions)) {\n this.modifiedActions = [];\n }\n this.modifiedActions.push(baseHistoryInfo);\n }\n };\n /**\n * Reverts this instance\n * @private\n */\n HistoryInfo.prototype.revert = function () {\n this.editorHistory.currentHistoryInfo = this;\n if (this.action === 'BordersAndShading') {\n this.owner.editorModule.isBordersAndShadingDialog = true;\n }\n if (!isNullOrUndefined(this.modifiedActions)) {\n if (this.editorHistory.isUndoing) {\n var i = this.modifiedActions.length;\n while (i > 0) {\n var baseHistoryInfo = this.modifiedActions[i - 1];\n baseHistoryInfo.revert();\n i = i - 1;\n }\n }\n else {\n var i = 0;\n while (i < this.modifiedActions.length) {\n var baseHistoryInfo = this.modifiedActions[i];\n baseHistoryInfo.revert();\n i = i + 1;\n }\n }\n }\n if (!this.isChildHistoryInfo) {\n this.editorHistory.updateComplexHistory();\n }\n else {\n this.editorHistory.updateComplexHistoryInternal();\n }\n };\n /**\n * @private\n */\n HistoryInfo.prototype.destroy = function () {\n if (!isNullOrUndefined(this.modifiedActions)) {\n while (this.modifiedActions.length > 0) {\n var baseHistoryInfo = this.modifiedActions[this.modifiedActions.length - 1];\n baseHistoryInfo.destroy();\n this.modifiedActions.splice(this.modifiedActions.indexOf(baseHistoryInfo), 1);\n }\n this.modifiedActions = undefined;\n }\n _super.prototype.destroy.call(this);\n };\n return HistoryInfo;\n}(BaseHistoryInfo));\nexport { HistoryInfo };\n","import { Dictionary } from '../../base/dictionary';\nimport { TextPosition } from '../selection/selection-helper';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { BaseHistoryInfo, } from './base-history-info';\nimport { ModifiedParagraphFormat, ModifiedLevel, RowHistoryFormat, TableHistoryInfo } from './history-helper';\nimport { HistoryInfo } from './history-info';\nimport { WParagraphFormat } from '../format/paragraph-format';\nimport { HelperMethods } from '../editor/editor-helper';\n/**\n * `EditorHistory` Module class is used to handle history preservation\n */\nvar EditorHistory = /** @class */ (function () {\n /**\n * @private\n */\n function EditorHistory(node) {\n //Fields\n this.undoStackIn = [];\n this.redoStackIn = [];\n this.historyInfoStack = [];\n /**\n * @private\n */\n this.isUndoing = false;\n /**\n * @private\n */\n this.isRedoing = false;\n this.owner = node;\n this.viewer = node.viewer;\n this.modifiedParaFormats = new Dictionary();\n this.undoLimitIn = 500;\n this.redoLimitIn = 500;\n }\n Object.defineProperty(EditorHistory.prototype, \"currentHistoryInfo\", {\n /**\n * @private\n */\n get: function () {\n return this.historyInfoStack && this.historyInfoStack.length > 0 ?\n this.historyInfoStack[this.historyInfoStack.length - 1] : undefined;\n },\n set: function (value) {\n if (value instanceof HistoryInfo) {\n this.historyInfoStack.push(value);\n }\n else {\n this.historyInfoStack.pop();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EditorHistory.prototype, \"undoStack\", {\n //Properties\n /**\n * gets undo stack\n * @private\n */\n get: function () { return this.undoStackIn; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EditorHistory.prototype, \"redoStack\", {\n /**\n * gets redo stack\n * @private\n */\n get: function () { return this.redoStackIn; },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EditorHistory.prototype, \"undoLimit\", {\n /**\n * Gets or Sets the limit of undo operations can be done.\n */\n get: function () {\n return isNullOrUndefined(this.undoLimitIn) ? 0 : this.undoLimitIn;\n },\n set: function (value) {\n if (value < 0) {\n throw new Error('The limit should be greater than or equal to zero.');\n }\n this.undoLimitIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EditorHistory.prototype, \"redoLimit\", {\n /**\n * Gets or Sets the limit of redo operations can be done.\n */\n get: function () {\n return isNullOrUndefined(this.redoLimitIn) ? 0 : this.redoLimitIn;\n },\n set: function (value) {\n if (value < 0) {\n throw new Error('The limit should be greater than or equal to zero.');\n }\n this.redoLimitIn = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n EditorHistory.prototype.getModuleName = function () {\n return 'EditorHistory';\n };\n /**\n * Determines whether undo operation can be done.\n * @returns boolean\n */\n EditorHistory.prototype.canUndo = function () {\n return !isNullOrUndefined(this.undoStack) && this.undoStack.length > 0;\n };\n /**\n * Determines whether redo operation can be done.\n * @returns boolean\n */\n EditorHistory.prototype.canRedo = function () {\n return !isNullOrUndefined(this.redoStack) && this.redoStack.length > 0;\n };\n //EditorHistory Initialization \n /**\n * initialize EditorHistory\n * @param {Selection} selection\n * @param {Action} action\n * @param {SelectionRange} selectionRange\n * @private\n */\n EditorHistory.prototype.initializeHistory = function (action) {\n this.currentBaseHistoryInfo = new BaseHistoryInfo(this.owner);\n this.currentBaseHistoryInfo.action = action;\n this.currentBaseHistoryInfo.updateSelection();\n };\n /**\n * Initialize complex history\n * @param {Selection} selection\n * @param {Action} action\n * @private\n */\n EditorHistory.prototype.initComplexHistory = function (selection, action) {\n this.currentHistoryInfo = new HistoryInfo(selection.owner, !isNullOrUndefined(this.currentHistoryInfo));\n this.currentHistoryInfo.action = action;\n this.currentHistoryInfo.updateSelection();\n };\n /**\n * @private\n */\n EditorHistory.prototype.initResizingHistory = function (startingPoint, tableResize) {\n if (tableResize.resizeNode === 1) {\n this.initializeHistory('RowResizing');\n if (!isNullOrUndefined(this.currentBaseHistoryInfo)) {\n // tslint:disable-next-line:max-line-length\n this.currentBaseHistoryInfo.modifiedProperties.push(new RowHistoryFormat(startingPoint, tableResize.currentResizingTable.childWidgets[tableResize.resizerPosition].rowFormat));\n }\n }\n else {\n this.initializeHistory('CellResizing');\n if (this.currentBaseHistoryInfo) {\n tableResize.currentResizingTable = tableResize.currentResizingTable.combineWidget(this.viewer);\n var tableHistoryInfo = new TableHistoryInfo(tableResize.currentResizingTable, this.owner);\n tableHistoryInfo.startingPoint = startingPoint;\n this.currentBaseHistoryInfo.modifiedProperties.push(tableHistoryInfo);\n }\n }\n };\n /**\n * Update resizing history\n * @param {Point} point\n * @param {Selection} selection\n * @private\n */\n EditorHistory.prototype.updateResizingHistory = function (point, tableResize) {\n if (tableResize.resizeNode === 1) {\n if (!isNullOrUndefined(this.currentBaseHistoryInfo)) {\n var rowHistoryFormat = this.currentBaseHistoryInfo.modifiedProperties[0];\n if (rowHistoryFormat.startingPoint.y === point.y) {\n this.currentBaseHistoryInfo.modifiedProperties.length = 0;\n }\n else {\n rowHistoryFormat.displacement = HelperMethods.convertPixelToPoint(point.y - rowHistoryFormat.startingPoint.y);\n this.recordChanges(this.currentBaseHistoryInfo);\n this.currentBaseHistoryInfo = undefined;\n }\n }\n }\n else {\n if (!isNullOrUndefined(this.currentBaseHistoryInfo)) {\n var cellHistoryFormat = this.currentBaseHistoryInfo.modifiedProperties[0];\n if (cellHistoryFormat.startingPoint.x === point.x) {\n this.currentBaseHistoryInfo.modifiedProperties.length = 0;\n }\n else {\n cellHistoryFormat.displacement = HelperMethods.convertPixelToPoint(point.x - cellHistoryFormat.startingPoint.x);\n cellHistoryFormat.endIndex = tableResize.getCellReSizerPosition(point);\n this.owner.editorHistory.recordChanges(this.currentBaseHistoryInfo);\n this.currentBaseHistoryInfo = undefined;\n }\n }\n }\n };\n /**\n * Record the changes\n * @param {BaseHistoryInfo} baseHistoryInfo\n * @private\n */\n EditorHistory.prototype.recordChanges = function (baseHistoryInfo) {\n if (!this.owner.enableHistoryMode) {\n return;\n }\n if (this.isUndoing) {\n if (isNullOrUndefined(this.redoStack)) {\n this.redoStackIn = [];\n }\n if (this.redoStack.length === this.redoLimit && this.redoLimit > 0) {\n var count = this.undoLimit > 20 ? 10 : 1;\n this.redoStackIn.splice(0, count);\n }\n if (this.redoStack.length < this.redoLimit) {\n this.redoStack.push(baseHistoryInfo);\n }\n }\n else {\n if (!this.isRedoing) {\n this.clearRedoStack();\n }\n if (isNullOrUndefined(this.undoStack)) {\n this.undoStackIn = [];\n }\n if (this.undoStack.length === this.undoLimit && this.undoLimit > 0) {\n var count = this.undoLimit > 20 ? 10 : 1;\n this.undoStackIn.splice(0, count);\n }\n if (this.undoStack.length < this.undoLimit) {\n this.undoStackIn.push(baseHistoryInfo);\n }\n }\n };\n /**\n * update EditorHistory\n * @private\n */\n EditorHistory.prototype.updateHistory = function () {\n if (this.viewer.owner.enableHistoryMode && !isNullOrUndefined(this.currentBaseHistoryInfo)) {\n //Updates the current end position\n if (!isNullOrUndefined(this.currentBaseHistoryInfo)\n && isNullOrUndefined(this.currentBaseHistoryInfo.endPosition)) {\n this.currentBaseHistoryInfo.endPosition = this.currentBaseHistoryInfo.insertPosition;\n }\n if (!isNullOrUndefined(this.currentHistoryInfo)) {\n this.currentHistoryInfo.addModifiedAction(this.currentBaseHistoryInfo);\n }\n else {\n this.recordChanges(this.currentBaseHistoryInfo);\n }\n this.currentBaseHistoryInfo = undefined;\n }\n };\n /**\n * @private\n */\n EditorHistory.prototype.isHandledComplexHistory = function () {\n var isHandledComplexHistory = false;\n if (!(this.isUndoing || this.isRedoing)) {\n isHandledComplexHistory = this.owner.editorModule.insertRemoveBookMarkElements();\n }\n if (this.viewer.owner.enableHistoryMode && !isNullOrUndefined(this.currentHistoryInfo)) {\n this.updateHistory();\n isHandledComplexHistory = true;\n }\n else if (this.owner.editorModule.isHandledComplex) {\n isHandledComplexHistory = true;\n }\n return isHandledComplexHistory;\n };\n /**\n * Update complex history\n * @private\n */\n EditorHistory.prototype.updateComplexHistory = function () {\n var selection = this.viewer.selection;\n if (this.currentHistoryInfo.hasAction) {\n if (this.currentHistoryInfo.action === 'AutoFormatHyperlink') {\n var startPosition = new TextPosition(selection.owner);\n this.owner.editorModule.setPositionForCurrentIndex(startPosition, this.currentHistoryInfo.insertPosition);\n // this.reLayoutParagraph(startPosition.paragraph, 0);\n if (selection.owner.editorHistory.isUndoing) {\n this.owner.editorModule.setPositionForCurrentIndex(selection.start, this.currentHistoryInfo.selectionStart);\n this.owner.editorModule.setPositionForCurrentIndex(selection.end, this.currentHistoryInfo.selectionEnd);\n }\n else {\n this.owner.editorModule.setPositionForCurrentIndex(selection.start, this.currentHistoryInfo.endPosition);\n this.owner.editorModule.setPositionForCurrentIndex(selection.end, this.currentHistoryInfo.endPosition);\n }\n }\n if (this.currentHistoryInfo.action === 'InsertHyperlink') {\n var startPosition = new TextPosition(selection.owner);\n this.owner.editorModule.setPositionForCurrentIndex(startPosition, this.currentHistoryInfo.insertPosition);\n var endPosition = new TextPosition(selection.owner);\n this.owner.editorModule.setPositionForCurrentIndex(endPosition, this.currentHistoryInfo.endPosition);\n this.viewer.layout.reLayoutParagraph(startPosition.paragraph, 0, 0);\n if (endPosition.paragraph !== startPosition.paragraph) {\n this.viewer.layout.reLayoutParagraph(endPosition.paragraph, 0, 0);\n }\n }\n if (this.currentHistoryInfo.action === 'ReplaceAll') {\n this.owner.editorModule.layoutWholeDocument();\n }\n else if (selection.owner.isShiftingEnabled) {\n this.viewer.layout.shiftLayoutedItems();\n if (this.owner.enableHeaderAndFooter) {\n this.owner.editorModule.updateHeaderFooterWidget();\n }\n }\n }\n selection.owner.isShiftingEnabled = false;\n selection.owner.isLayoutEnabled = true;\n // // selection.addMultipleSelectionRanges();\n selection.start.updatePhysicalPosition(true);\n if (selection.isEmpty) {\n selection.end.setPositionInternal(selection.start);\n }\n else {\n selection.end.updatePhysicalPosition(true);\n }\n selection.upDownSelectionLength = selection.end.location.x;\n selection.fireSelectionChanged(true);\n this.viewer.updateFocus();\n this.updateComplexHistoryInternal();\n this.viewer.updateScrollBars();\n this.owner.editorModule.fireContentChange();\n };\n /**\n * @private\n */\n EditorHistory.prototype.updateComplexHistoryInternal = function () {\n if (!isNullOrUndefined(this.currentHistoryInfo)) {\n //Updates the current end position\n if (isNullOrUndefined(this.currentHistoryInfo.endPosition)) {\n this.currentHistoryInfo.endPosition = this.currentHistoryInfo.insertPosition;\n }\n if (this.historyInfoStack.length > 1) {\n var historyInfo = this.historyInfoStack[this.historyInfoStack.length - 2];\n historyInfo.addModifiedAction(this.currentHistoryInfo);\n }\n else {\n this.recordChanges(this.currentHistoryInfo);\n }\n this.currentHistoryInfo = undefined;\n }\n };\n //List history preservation undo API\n /**\n * update list changes for history preservation\n * @param {Selection} selection\n * @param {WAbstractList} currentAbstractList\n * @param {WList} list\n * @private\n */\n EditorHistory.prototype.updateListChangesInHistory = function (currentAbstractList, list) {\n this.currentBaseHistoryInfo = new BaseHistoryInfo(this.viewer.owner);\n this.currentBaseHistoryInfo.action = 'List';\n this.currentBaseHistoryInfo.updateSelection();\n var collection = new Dictionary();\n for (var i = 0; i < currentAbstractList.levels.length; i++) {\n var levels = this.viewer.getAbstractListById(list.abstractListId).levels[i];\n var value = this.currentBaseHistoryInfo.addModifiedPropertiesForList(levels);\n var modifiedLevel = new ModifiedLevel(levels, currentAbstractList.levels[i]);\n if (!isNullOrUndefined(levels)) {\n this.viewer.owner.editorModule.copyListLevel(levels, currentAbstractList.levels[i]);\n }\n collection.add(i, modifiedLevel);\n }\n return collection;\n };\n /**\n * Apply list changes\n * @param {Selection} selection\n * @param {Dictionary} modifiedLevelsInternal\n * @private\n */\n EditorHistory.prototype.applyListChanges = function (selection, modifiedLevelsInternal) {\n if (isNullOrUndefined(this.modifiedParaFormats)) {\n this.modifiedParaFormats = new Dictionary();\n }\n var collection = [];\n for (var i = 0; i < this.viewer.listParagraphs.length; i++) {\n var paragraph = this.viewer.listParagraphs[i];\n var paraFormat = paragraph.paragraphFormat;\n var currentList = this.viewer.getListById(paraFormat.listFormat.listId);\n var listLevel = this.viewer.layout.getListLevel(currentList, paraFormat.listFormat.listLevelNumber);\n // tslint:disable-next-line:max-line-length\n if (modifiedLevelsInternal.containsKey(paraFormat.listFormat.listLevelNumber)\n && modifiedLevelsInternal.get(paraFormat.listFormat.listLevelNumber).ownerListLevel === listLevel) {\n var modifiedFormat = new WParagraphFormat(null);\n modifiedFormat.leftIndent = paraFormat.leftIndent;\n modifiedFormat.firstLineIndent = paraFormat.firstLineIndent;\n var modified = new ModifiedParagraphFormat(paraFormat, modifiedFormat);\n collection.push(modified);\n this.owner.editorModule.copyFromListLevelParagraphFormat(paraFormat, listLevel.paragraphFormat);\n }\n }\n this.modifiedParaFormats.add(this.currentBaseHistoryInfo, collection);\n };\n /**\n * Update list changes\n * @param {Dictionary} modifiedCollection\n * @param {Selection} selection\n * @private\n */\n EditorHistory.prototype.updateListChanges = function (modifiedCollection) {\n this.viewer.owner.isLayoutEnabled = false;\n this.owner.editorModule.updateListParagraphs();\n for (var i = 0; i < modifiedCollection.keys.length; i++) {\n var levelNumber = modifiedCollection.keys[0];\n var modifiedLevel = modifiedCollection.get(levelNumber);\n if (!isNullOrUndefined(this.currentBaseHistoryInfo)) {\n // tslint:disable-next-line:max-line-length\n modifiedLevel = this.currentBaseHistoryInfo.addModifiedPropertiesForList(modifiedLevel.ownerListLevel);\n }\n this.owner.editorModule.copyListLevel(modifiedLevel.ownerListLevel, modifiedLevel.modifiedListLevel);\n }\n this.revertListChanges();\n this.viewer.owner.isLayoutEnabled = true;\n this.viewer.renderedLists.clear();\n this.viewer.pages = [];\n this.viewer.layout.layout();\n var selection = this.viewer.selection;\n selection.start.updatePhysicalPosition(true);\n if (selection.isEmpty) {\n selection.end.setPositionInternal(selection.start);\n }\n else {\n selection.end.updatePhysicalPosition(true);\n }\n selection.upDownSelectionLength = selection.end.location.x;\n selection.fireSelectionChanged(false);\n this.updateHistory();\n };\n /**\n * Revert list changes\n * @param {Selection} selection\n */\n EditorHistory.prototype.revertListChanges = function () {\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(this.currentBaseHistoryInfo)\n && this.viewer.owner.editorHistory.modifiedParaFormats.containsKey(this.currentBaseHistoryInfo)) {\n // tslint:disable-next-line:max-line-length\n var collection = this.modifiedParaFormats.get(this.currentBaseHistoryInfo);\n for (var i = 0; i < collection.length; i++) {\n var modified = new WParagraphFormat(null);\n modified.leftIndent = collection[i].ownerFormat.leftIndent;\n modified.firstLineIndent = collection[i].ownerFormat.firstLineIndent;\n collection[i].ownerFormat.copyFormat(collection[i].modifiedFormat);\n collection[i].modifiedFormat.leftIndent = modified.leftIndent;\n collection[i].modifiedFormat.firstLineIndent = modified.firstLineIndent;\n }\n }\n };\n /**\n * Reverts the last editing action.\n */\n EditorHistory.prototype.undo = function () {\n if (this.owner.isReadOnlyMode || !this.canUndo() || !this.owner.enableHistoryMode) {\n return;\n }\n //this.owner.ClearTextSearchResults();\n var historyInfo = this.undoStack.pop();\n this.isUndoing = true;\n historyInfo.revert();\n this.isUndoing = false;\n this.owner.selection.checkForCursorVisibility();\n this.owner.editorModule.isBordersAndShadingDialog = false;\n };\n /**\n * Performs the last reverted action.\n */\n EditorHistory.prototype.redo = function () {\n if (this.owner.isReadOnlyMode || !this.canRedo() || !this.owner.enableHistoryMode) {\n return;\n }\n //this.owner.ClearTextSearchResults();\n var historyInfo = this.redoStack.pop();\n if (historyInfo.action === 'BordersAndShading') {\n this.owner.editorModule.isBordersAndShadingDialog = true;\n }\n this.isRedoing = true;\n historyInfo.revert();\n this.isRedoing = false;\n this.owner.selection.checkForCursorVisibility();\n this.owner.editorModule.isBordersAndShadingDialog = false;\n };\n /**\n * @private\n */\n EditorHistory.prototype.destroy = function () {\n this.clearHistory();\n this.undoStackIn = undefined;\n this.redoStackIn = undefined;\n };\n EditorHistory.prototype.clearHistory = function () {\n this.clearUndoStack();\n this.clearRedoStack();\n };\n EditorHistory.prototype.clearUndoStack = function () {\n if (this.canUndo()) {\n while (this.undoStack.length > 0) {\n var historyInfo = this.undoStack.pop();\n historyInfo.destroy();\n historyInfo = undefined;\n }\n }\n };\n EditorHistory.prototype.clearRedoStack = function () {\n if (this.canRedo()) {\n while (this.redoStack.length > 0) {\n var historyInfo = this.redoStack.pop();\n historyInfo.destroy();\n historyInfo = undefined;\n }\n }\n };\n return EditorHistory;\n}());\nexport { EditorHistory };\n","import { ZipArchive, ZipArchiveItem } from '@syncfusion/ej2-compression';\nimport { XmlWriter } from '@syncfusion/ej2-file-utils';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Dictionary } from '../../index';\n/**\n * Exports the document to Word format.\n */\nvar WordExport = /** @class */ (function () {\n function WordExport() {\n //Part path\n this.documentPath = 'word/document.xml';\n this.stylePath = 'word/styles.xml';\n this.numberingPath = 'word/numbering.xml';\n this.settingsPath = 'word/settings.xml';\n this.headerPath = 'word/header';\n this.footerPath = 'word/footer';\n //private commentsPath: string = 'word/comments.xml';\n this.imagePath = 'word/media/image';\n // private footnotesPath: string = 'word/footnotes.xml';\n // private endnotesPath: string = 'word/endnotes.xml';\n this.appPath = 'docProps/app.xml';\n this.corePath = 'docProps/core.xml';\n // private CustomPath: string = 'docProps/custom.xml';\n // private FontTablePath: string = 'word/fontTable.xml';\n this.contentTypesPath = '[Content_Types].xml';\n // private ChartsPath: string = 'word/charts/';\n // private DefaultEmbeddingPath: string = 'word/embeddings/';\n // private EmbeddingPath:string = 'word\\embeddings\\';\n // private DrawingPath:string = 'word\\drawings\\';\n // private ThemePath: string = 'word/theme/theme1.xml';\n // private FontsPath:string = 'word\\fonts\\';\n // private DiagramPath:string = \"word/diagrams/';\n // private ControlPath:string = \"word/activeX/';\n // private VbaProject: string = 'vbaProject.bin';\n // private VbaData: string = 'vbaData.xml';\n // private VbaProjectPath: string = 'word/vbaProject.bin';\n // private VbaDataPath: string = 'word/vbaData.xml';\n // private CustomXMLPath:string = 'customXml\\';\n //Relationship path\n this.generalRelationPath = '_rels/.rels';\n this.wordRelationPath = 'word/_rels/document.xml.rels';\n // private FontRelationPath: string = 'word/_rels/fontTable.xml.rels';\n // private CommentsRelationPath: string = 'word/_rels/comments.xml.rels';\n // private FootnotesRelationPath: string = 'word/_rels/footnotes.xml.rels';\n // private EndnotesRelationPath: string = 'word/_rels/endnotes.xml.rels';\n // private NumberingRelationPath: string = 'word/_rels/numbering.xml.rels';\n this.headerRelationPath = 'word/_rels/header';\n this.footerRelationPath = 'word/_rels/footer';\n // private SettingsRelationpath: string = 'word/_rels/settings.xml.rels';\n // private VbaProjectRelsPath: string = 'word/_rels/vbaProject.bin.rels';\n //Content type of the parts\n this.xmlContentType = 'application/xml';\n this.fontContentType = 'application/vnd.openxmlformats-officedocument.obfuscatedFont';\n this.documentContentType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml';\n // private TemplateContentType: string = 'application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml';\n // private CommentsContentType: string = 'application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml';\n this.settingsContentType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml';\n // private EndnoteContentType: string = 'application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml';\n // private FontTableContentType: string = 'application/vnd.openxmlformats-officedocument.wordprocessingml.fontTable+xml';\n this.footerContentType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml';\n // private FootnoteContentType: string = 'application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml';\n // private GlossaryDocumentContentType: string = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml';\n this.headerContentType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.header+xml';\n this.numberingContentType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml';\n this.stylesContentType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml';\n this.webSettingsContentType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.webSettings+xml';\n this.appContentType = 'application/vnd.openxmlformats-officedocument.extended-properties+xml';\n this.coreContentType = 'application/vnd.openxmlformats-package.core-properties+xml';\n this.customContentType = 'application/vnd.openxmlformats-officedocument.custom-properties+xml';\n this.customXmlContentType = 'application/vnd.openxmlformats-officedocument.customXmlProperties+xml';\n this.relationContentType = 'application/vnd.openxmlformats-package.relationships+xml';\n // private DiagramColor: string = 'application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml';\n // private DiagramData: string = 'application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml';\n // private DiagramLayout: string = 'application/vnd.openxmlformats-officedocument.drawingml.diagramLayout+xml';\n // private DiagramStyle: string = 'application/vnd.openxmlformats-officedocument.drawingml.diagramStyle+xml';\n // private ChartsContentType: string = 'application/vnd.openxmlformats-officedocument.drawingml.chart+xml';\n // private ThemeContentType: string = 'application/vnd.openxmlformats-officedocument.theme+xml';\n // private ChartDrawingContentType: string = 'application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml';\n // private ActiveXContentType: string = 'application/vnd.ms-office.activeX+xml';\n // private ActiveXBinContentType: string = 'application/vnd.ms-office.activeX';\n this.tableStyleContentType = 'application/vnd.openxmlformats-officedocument.presentationml.tableStyles+xml';\n // private ChartStyleContentType: string = 'application/vnd.ms-office.chartstyle+xml';\n // private ChartColorStyleContentType: string = 'application/vnd.ms-office.chartcolorstyle+xml';\n // private VbaProjectContentType: string = 'application/vnd.ms-office.vbaProject';\n // private VbaDataContentType: string = 'application/vnd.ms-word.vbaData+xml';\n // private MacroDocumentContentType: string = 'application/vnd.ms-word.document.macroEnabled.main+xml';\n // private MacroTemplateContentType: string = 'application/vnd.ms-word.template.macroEnabledTemplate.main+xml';\n // private OleObjectContentType: string = 'application/vnd.openxmlformats-officedocument.oleObject';\n // Relationship types of document parts\n // private AltChunkRelType: string = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/aFChunk';\n // private CommentsRelType: string = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments';\n this.settingsRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings';\n // private EndnoteRelType: string = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/endnotes';\n // private FontTableRelType: string = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable';\n this.footerRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer';\n // private FootnoteRelType: string = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/footnotes';\n this.headerRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/header';\n this.documentRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument';\n this.numberingRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/numbering';\n this.stylesRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles';\n // private OleObjectRelType: string = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/oleObject';\n // private ChartRelType: string = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart';\n // private ThemeRelType: string = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme';\n this.fontRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/font';\n this.tableStyleRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/tableStyles';\n this.coreRelType = 'http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties';\n this.appRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties';\n this.customRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties';\n this.imageRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image';\n this.hyperlinkRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink';\n this.controlRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/control';\n this.packageRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/package';\n // private VbaProjectRelType: string = 'http://schemas.microsoft.com/office/2006/relationships/vbaProject';\n // private VbaDataRelType: string = 'http://schemas.microsoft.com/office/2006/relationships/wordVbaData';\n this.customXmlRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml';\n this.customUIRelType = 'http://schemas.microsoft.com/office/2006/relationships/ui/extensibility';\n this.attachedTemplateRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/attachedTemplate';\n // private ChartColorStyleRelType: string = 'http://schemas.microsoft.com/office/2011/relationships/chartColorStyle';\n // private ChartStyleRelType: string = 'http://schemas.microsoft.com/office/2011/relationships/chartStyle';\n // private ChartUserShapesRelType: string = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/chartUserShapes';\n // private ChartContentType: string = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/package';\n // Namespaces\n // private PKG_namespace: string = 'http://schemas.microsoft.com/office/2006/xmlPackage';\n this.wNamespace = 'http://schemas.openxmlformats.org/wordprocessingml/2006/main';\n this.wpNamespace = 'http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing';\n this.pictureNamespace = 'http://schemas.openxmlformats.org/drawingml/2006/picture';\n this.aNamespace = 'http://schemas.openxmlformats.org/drawingml/2006/main';\n this.a14Namespace = 'http://schemas.microsoft.com/office/drawing/2010/main';\n // private SVG_namespace: string = 'http://schemas.microsoft.com/office/drawing/2016/SVG/main';\n this.rNamespace = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships';\n this.rpNamespace = 'http://schemas.openxmlformats.org/package/2006/relationships';\n this.vNamespace = 'urn:schemas-microsoft-com:vml';\n this.oNamespace = 'urn:schemas-microsoft-com:office:office';\n this.xmlNamespace = 'http://www.w3.org/XML/1998/namespace';\n this.w10Namespace = 'urn:schemas-microsoft-com:office:word';\n this.cpNamespace = 'http://schemas.openxmlformats.org/package/2006/metadata/core-properties';\n this.dcNamespace = 'http://purl.org/dc/elements/1.1/';\n // private DCTERMS_namespace: string = 'http://purl.org/dc/terms/';\n // private XSI_namespace: string = 'http://www.w3.org/2001/XMLSchema-instance';\n this.docPropsNamespace = 'http://schemas.openxmlformats.org/officeDocument/2006/extended-properties';\n this.veNamespace = 'http://schemas.openxmlformats.org/markup-compatibility/2006';\n this.mNamespace = 'http://schemas.openxmlformats.org/officeDocument/2006/math';\n this.wneNamespace = 'http://schemas.microsoft.com/office/word/2006/wordml';\n // private DCMI_namespace: string = 'http://purl.org/dc/dcmitype/';\n this.customPropsNamespace = 'http://schemas.openxmlformats.org/officeDocument/2006/custom-properties';\n this.vtNamespace = 'http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes';\n this.chartNamespace = 'http://schemas.openxmlformats.org/drawingml/2006/chart';\n this.slNamespace = 'http://schemas.openxmlformats.org/schemaLibrary/2006/main';\n //2003WML namespace\n // private amlNamespace: string = 'http://schemas.microsoft.com/aml/2001/core';\n this.dtNamespace = 'uuid:C2F41010-65B3-11d1-A29F-00AA00C14882';\n this.wmlNamespace = 'http://schemas.microsoft.com/office/word/2003/wordml';\n //2010 namespaces\n this.w14Namespace = 'http://schemas.microsoft.com/office/word/2010/wordml';\n this.wpCanvasNamespace = 'http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas';\n this.wpDrawingNamespace = 'http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing';\n this.wpGroupNamespace = 'http://schemas.microsoft.com/office/word/2010/wordprocessingGroup';\n this.wpInkNamespace = 'http://schemas.microsoft.com/office/word/2010/wordprocessingInk';\n this.wpShapeNamespace = 'http://schemas.microsoft.com/office/word/2010/wordprocessingShape';\n //2013 namespaces\n this.w15Namespace = 'http://schemas.microsoft.com/office/word/2012/wordml';\n this.diagramNamespace = 'http://schemas.openxmlformats.org/drawingml/2006/diagram';\n //Encryption namespaces\n this.eNamespace = 'http://schemas.microsoft.com/office/2006/encryption';\n this.pNamespace = 'http://schemas.microsoft.com/office/2006/keyEncryptor/password';\n this.certNamespace = 'http://schemas.microsoft.com/office/2006/keyEncryptor/certificate';\n // Dls xml tags\n this.cRelationshipsTag = 'Relationships';\n this.cRelationshipTag = 'Relationship';\n this.cIdTag = 'Id';\n this.cTypeTag = 'Type';\n this.cTargetTag = 'Target';\n this.cUserShapesTag = 'userShapes';\n this.cExternalData = 'externalData';\n this.twipsInOnePoint = 20;\n this.twentiethOfPoint = 20;\n this.borderMultiplier = 8;\n this.percentageFactor = 50;\n this.emusPerPoint = 12700;\n // private const TOC_SYMBOL:string = (char)0x01;\n // private const FOOTNOTE_SYMBOL:string = (char)0x02;\n // private const PAGENUMBER_SYMBOL:string = (char)0xB;\n // private DEF_FIT_TEXT_TO_SHAPE: string = 'mso-fit-shape-to-text:t';\n // Document tags\n this.cConditionalTableStyleTag = 'tblStylePr';\n this.cTableFormatTag = 'tblPr';\n this.cTowFormatTag = 'trPr';\n this.cCellFormatTag = 'tcPr';\n this.cParagraphFormatTag = 'pPr';\n this.cCharacterFormatTag = 'rPr';\n this.packageType = 'http://schemas.microsoft.com/office/2006/xmlPackage';\n this.relsPartPath = '/_rels/.rels';\n this.documentRelsPartPath = '/word/_rels/document.xml.rels';\n this.webSettingsPath = '/word/webSettings.xml';\n this.wordMLDocumentPath = '/word/document.xml';\n this.wordMLStylePath = '/word/styles.xml';\n this.wordMLNumberingPath = '/word/numbering.xml';\n this.wordMLSettingsPath = '/word/settings.xml';\n this.wordMLHeaderPath = '/word/header';\n this.wordMLFooterPath = '/word/footer';\n this.wordMLCommentsPath = '/word/comments.xml';\n this.wordMLImagePath = '/word/media/image';\n this.wordMLFootnotesPath = '/word/footnotes.xml';\n this.wordMLEndnotesPath = '/word/endnotes.xml';\n this.wordMLAppPath = '/docProps/app.xml';\n this.wordMLCorePath = '/docProps/core.xml';\n this.wordMLCustomPath = '/docProps/custom.xml';\n this.wordMLFontTablePath = '/word/fontTable.xml';\n this.wordMLChartsPath = '/word/charts/';\n this.wordMLDefaultEmbeddingPath = '/word/embeddings/';\n this.wordMLEmbeddingPath = '/word/embeddings/';\n this.wordMLDrawingPath = '/word/drawings/';\n this.wordMLThemePath = '/word/theme/theme1.xml';\n this.wordMLFontsPath = '/word/fonts/';\n this.wordMLDiagramPath = '/word/diagrams/';\n this.wordMLControlPath = '/word/activeX/';\n this.wordMLVbaProject = '/vbaProject.bin';\n this.wordMLVbaData = '/vbaData.xml';\n this.wordMLVbaProjectPath = '/word/vbaProject.bin';\n this.wordMLVbaDataPath = '/word/vbaData.xml';\n // private WordMLCustomXMLPath: string = '/customXml/';\n this.wordMLWebSettingsPath = '/word/webSettings.xml';\n this.wordMLCustomItemProp1Path = '/customXml/itemProps1.xml';\n // private WordMLCustomXMLRelPath: string = '/customXml/_rels/item1.xml.rels';\n this.wordMLFootnoteRelPath = '/word/_rels/footnotes.xml.rels';\n this.wordMLEndnoteRelPath = '/word/_rels/endnotes.xml.rels';\n this.wordMLSettingsRelPath = '/word/_rels/settings.xml.rels';\n this.wordMLNumberingRelPath = '/word/_rels/numbering.xml.rels';\n this.wordMLFontTableRelPath = '/word/_rels/fontTable.xml.rels';\n this.wordMLCustomXmlPropsRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXmlProps';\n this.wordMLControlRelType = 'http://schemas.microsoft.com/office/2006/relationships/activeXControlBinary';\n this.wordMLDiagramContentType = 'application/vnd.ms-office.drawingml.diagramDrawing+xml';\n this.lastSection = false;\n this.mRelationShipID = 0;\n this.mDocPrID = 0;\n this.mDifferentFirstPage = false;\n this.mBookmarks = undefined;\n /* tslint:enable:no-any */\n }\n WordExport.prototype.getModuleName = function () {\n return 'WordExport';\n };\n Object.defineProperty(WordExport.prototype, \"bookmarks\", {\n // Gets the bookmark name\n get: function () {\n if (isNullOrUndefined(this.mBookmarks)) {\n this.mBookmarks = [];\n }\n return this.mBookmarks;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WordExport.prototype, \"documentImages\", {\n // Gets the collection of images present in the document body\n get: function () {\n if (this.mDocumentImages === undefined) {\n this.mDocumentImages = new Dictionary();\n }\n return this.mDocumentImages;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WordExport.prototype, \"externalImages\", {\n // Gets the collection of images present in the document body\n get: function () {\n if (this.mExternalLinkImages === undefined) {\n this.mExternalLinkImages = new Dictionary();\n }\n return this.mExternalLinkImages;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WordExport.prototype, \"headerFooterImages\", {\n // Gets the collections of images present in the HeaderFooters\n get: function () {\n if (this.mHeaderFooterImages === undefined) {\n this.mHeaderFooterImages = new Dictionary();\n }\n return this.mHeaderFooterImages;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WordExport.prototype, \"headersFooters\", {\n /// Gets the HeaderFooter Collection\n get: function () {\n if (this.mHeaderFooterColl === undefined) {\n this.mHeaderFooterColl = new Dictionary();\n }\n return this.mHeaderFooterColl;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n WordExport.prototype.save = function (viewer, fileName) {\n this.serialize(viewer);\n this.mArchive.save(fileName + '.docx').then(function (mArchive) {\n mArchive.destroy();\n });\n this.close();\n };\n /**\n * @private\n */\n WordExport.prototype.saveAsBlob = function (viewer) {\n var _this = this;\n this.serialize(viewer);\n return new Promise(function (resolve, reject) {\n _this.mArchive.saveAsBlob().then(function (blob) {\n _this.mArchive.destroy();\n blob = new Blob([blob], { type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' });\n resolve(blob);\n });\n });\n };\n /**\n * @private\n */\n WordExport.prototype.destroy = function () {\n this.clearDocument();\n this.mRelationShipID = undefined;\n this.mDocPrID = undefined;\n this.mDifferentFirstPage = undefined;\n if (this.mArchive) {\n this.mArchive.destroy();\n this.mArchive = undefined;\n }\n };\n // Saves the word document in the stream\n WordExport.prototype.serialize = function (viewer) {\n /* tslint:disable:no-any */\n var document = viewer.owner.sfdtExportModule.write();\n this.setDocument(document);\n this.mArchive = new ZipArchive();\n this.mArchive.compressionLevel = 'Normal';\n this.mVerticalMerge = new Dictionary();\n this.mGridSpans = new Dictionary();\n var contenttype;\n //document.xml\n this.serializeDocument();\n //Styles.xml\n this.serializeStyles();\n //numbering.xml\n this.serializeNumberings();\n //theme.xml\n // if (m_document.DocHasThemes && !isNullOrUndefined(m_document.Themes))\n // SerializeThemes();\n // else\n // this.serializeDefaultThemes();\n //settings.xml\n this.serializeSettings();\n //core.xml\n this.serializeCoreProperties();\n //app.xml\n this.serializeAppProperties();\n //fontTable.xml\n this.serializeFontTable(contenttype);\n //custom.xml\n // if (!isNullOrUndefined(this.wordDocument.CustomDocumentProperties) && m_document.CustomDocumentProperties.length > 0) {\n // SerializeCustomProperties();\n // }\n //Settings Relations\n this.serializeSettingsRelation();\n //Numbering relation if the document has picture bullet\n // if (PictureBullets.length > 0) {\n // SerializeNumberingsRelation();\n // }\n this.serializeHeaderFooters();\n //document relations\n this.serializeDocumentRelations();\n // // Add controls to archieve.\n // if (ControlsPathNames.length > 0) {\n // AddControlsToZip(m_document.DocxPackage);\n // }\n // if (!isNullOrUndefined(m_document.CustomUIPartContainer))\n // AddPartContainerToArchive(m_document.CustomUIPartContainer);\n // if (!isNullOrUndefined(m_document.CustomXMLContainer))\n // AddPartContainerToArchive(m_document.CustomXMLContainer);\n //general relations\n this.serializeGeneralRelations();\n //[ContentTypes].xml\n this.serializeContentTypes(contenttype);\n // Clears the internal fields maintained for serializing.\n this.clearDocument();\n };\n // Sets the document\n WordExport.prototype.setDocument = function (document) {\n this.document = document;\n this.mSections = document.sections;\n this.mLists = document.lists;\n this.mAbstractLists = document.abstractLists;\n this.defCharacterFormat = document.characterFormat;\n this.defParagraphFormat = document.paragraphFormat;\n this.defaultTabWidthValue = document.defaultTabWidth;\n this.mStyles = document.styles;\n };\n // Clears the document\n WordExport.prototype.clearDocument = function () {\n // Owner Nodes\n this.section = undefined;\n this.lastSection = undefined;\n this.blockOwner = undefined;\n this.paragraph = undefined;\n this.table = undefined;\n this.row = undefined;\n this.headerFooter = undefined;\n this.document = undefined;\n this.mSections = undefined;\n this.mLists = undefined;\n this.mAbstractLists = undefined;\n this.defCharacterFormat = undefined;\n this.defParagraphFormat = undefined;\n this.defaultTabWidthValue = undefined;\n this.mRelationShipID = 0;\n this.mDocPrID = 0;\n this.mDifferentFirstPage = false;\n if (this.mHeaderFooterColl) {\n this.mHeaderFooterColl.destroy();\n this.mHeaderFooterColl = undefined;\n }\n if (this.mVerticalMerge) {\n this.mVerticalMerge.destroy();\n this.mVerticalMerge = undefined;\n }\n if (this.mGridSpans) {\n this.mGridSpans.destroy();\n this.mGridSpans = undefined;\n }\n if (this.mDocumentImages) {\n this.mDocumentImages.destroy();\n this.mDocumentImages = undefined;\n }\n if (this.mExternalLinkImages) {\n this.mExternalLinkImages.destroy();\n this.mExternalLinkImages = undefined;\n }\n if (this.mHeaderFooterImages) {\n this.mHeaderFooterImages.destroy();\n this.mHeaderFooterImages = undefined;\n }\n };\n // Serializes the document elements (document.xml)\n WordExport.prototype.serializeDocument = function () {\n var writer = new XmlWriter();\n writer.writeStartElement('w', 'document', this.wNamespace);\n this.writeCommonAttributeStrings(writer);\n this.serializeDocumentBody(writer);\n writer.writeEndElement(); //end of document tag\n var archiveItem = new ZipArchiveItem(writer.buffer, this.documentPath);\n this.mArchive.addItem(archiveItem);\n };\n WordExport.prototype.writeCommonAttributeStrings = function (writer) {\n writer.writeAttributeString('xmlns', 'wpc', undefined, this.wpCanvasNamespace);\n this.writeCustom(writer);\n writer.writeAttributeString('xmlns', 'wp14', undefined, this.wpDrawingNamespace);\n writer.writeAttributeString('xmlns', 'wp', undefined, this.wpNamespace);\n writer.writeAttributeString('xmlns', 'w10', undefined, this.w10Namespace);\n writer.writeAttributeString('xmlns', 'w', undefined, this.wNamespace);\n this.writeDup(writer);\n writer.writeAttributeString('xmlns', 'wne', undefined, this.wneNamespace);\n writer.writeAttributeString('xmlns', 'wps', undefined, this.wpShapeNamespace);\n writer.writeAttributeString('mc', 'Ignorable', undefined, 'w14 w15 wp14');\n };\n WordExport.prototype.writeDup = function (writer) {\n writer.writeAttributeString('xmlns', 'w14', undefined, this.w14Namespace);\n writer.writeAttributeString('xmlns', 'w15', undefined, this.w15Namespace);\n writer.writeAttributeString('xmlns', 'wpg', undefined, this.wpGroupNamespace);\n writer.writeAttributeString('xmlns', 'wpi', undefined, this.wpInkNamespace);\n };\n WordExport.prototype.writeCustom = function (writer) {\n writer.writeAttributeString('xmlns', 'mc', undefined, this.veNamespace);\n writer.writeAttributeString('xmlns', 'o', undefined, this.oNamespace);\n writer.writeAttributeString('xmlns', 'r', undefined, this.rNamespace);\n writer.writeAttributeString('xmlns', 'm', undefined, this.mNamespace);\n writer.writeAttributeString('xmlns', 'v', undefined, this.vNamespace);\n };\n // Serializes the document body\n WordExport.prototype.serializeDocumentBody = function (writer) {\n writer.writeStartElement(undefined, 'body', this.wNamespace);\n var count = this.document.sections.length;\n for (var i = 0; i < count; i++) {\n this.section = this.document.sections[i];\n this.lastSection = i === count - 1;\n this.serializeSection(writer, this.section, i === count - 1);\n this.section = undefined;\n }\n writer.writeEndElement();\n };\n // Serializes the Section.\n WordExport.prototype.serializeSection = function (writer, section, last) {\n this.blockOwner = section;\n this.serializeBodyItems(writer, section.blocks, last);\n if (last) {\n this.serializeSectionProperties(writer, section);\n }\n this.blockOwner = undefined;\n };\n // Serialize the section properties.\n WordExport.prototype.serializeSectionProperties = function (writer, section) {\n writer.writeStartElement('w', 'sectPr', this.wNamespace);\n if (section.headersFooters) {\n this.serializeHFReference(writer, section.headersFooters);\n }\n // if (IsNeedToSerializeSectionFootNoteProperties(section))\n // SerializeFootnoteProperties(section);\n // if (IsNeedToSerializeSectionEndNoteProperties(section))\n // SerializeEndnoteProperties(section);\n this.serializeSectionType(writer, 'nextPage');\n this.serializePageSetup(writer, section.sectionFormat);\n this.serializeColumns(writer, section);\n // this.serializeSectionProtection(section);\n // if (section.PageSetup.VerticalAlignment !== PageAlignment.Top) {\n // writer.writeStartElement('vAlign', this.wNamespace);\n // switch (section.PageSetup.VerticalAlignment) {\n // case PageAlignment.Top:\n // writer.WriteAttributeString('val', this.wNamespace, 'top');\n // break;\n // case PageAlignment.Middle:\n // writer.WriteAttributeString('val', this.wNamespace, 'center');\n // break;\n // case PageAlignment.Justified:\n // writer.WriteAttributeString('val', this.wNamespace, 'both');\n // break;\n // case PageAlignment.Bottom:\n // writer.WriteAttributeString('val', this.wNamespace, 'bottom');\n // break;\n // }\n // writer.WriteEndElement();\n // }\n if (section.sectionFormat !== undefined && section.sectionFormat.differentFirstPage) {\n writer.writeStartElement(undefined, 'titlePg', this.wNamespace);\n writer.writeEndElement();\n }\n // SerializeTextDirection(section);\n // if (section.PageSetup.Bidi) {\n // writer.WriteStartElement('bidi', this.wNamespace);\n // writer.WriteEndElement();\n // }\n //rtlGutter\n // SerializeDocGrid(section);\n //printerSettings\n writer.writeEndElement(); //end of sectPr tag\n };\n // Serialize the column properties of section.\n WordExport.prototype.serializeColumns = function (writer, section) {\n writer.writeStartElement(undefined, 'cols', this.wNamespace);\n writer.writeAttributeString(undefined, 'equalWidth', this.wNamespace, '1');\n writer.writeAttributeString(undefined, 'space', this.wNamespace, '0');\n writer.writeEndElement();\n // ColumnCollection columns = section.Columns;\n // writer.WriteStartElement('cols', this.wNamespace);\n // if (columns.length > 0)\n // {\n // writer.WriteAttributeString('num', this.wNamespace, columns.length.ToString());\n // }\n // if (section.PageSetup.DrawLinesBetweenCols)\n // writer.WriteAttributeString('sep', this.wNamespace, '1');\n // if (columns.OwnerSection.PageSetup.EqualColumnWidth)\n // {\n // writer.WriteAttributeString('equalWidth', this.wNamespace, '1');\n // //When the column count is negative, MS word just reset the column's count to zero\n // //To avoid index out of exception, checked the columns count\n // tslint:disable-next-line:max-line-length\n // writer.WriteAttributeString('space', this.wNamespace, ToString(columns.length > 0 ? columns[0].Space * this.TwentiethOfPoint : 0));\n // }\n // else if (columns.length > 0)\n // {\n // writer.WriteAttributeString('equalWidth', this.wNamespace, '0');\n // foreach (Column column in columns)\n // {\n // writer.WriteStartElement('col', this.wNamespace);\n // writer.WriteAttributeString('w', this.wNamespace, ToString(column.Width * this.TwentiethOfPoint));\n // tslint:disable-next-line:max-line-length\n // writer.WriteAttributeString('space', this.wNamespace, ToString(column.Space * this.TwentiethOfPoint));\n // writer.WriteEndElement();\n // }\n // }\n // writer.WriteEndElement();\n };\n // Serialize the page setup properties.\n WordExport.prototype.serializePageSetup = function (writer, pageSetup) {\n if (pageSetup !== undefined) {\n this.serializePageSize(writer, pageSetup);\n this.serializePageMargins(writer, pageSetup);\n }\n // // StartElement paperSrc (if any)\n // if (pageSetup.FirstPageTray > 0 || pageSetup.OtherPagesTray > 0) {\n // writer.WriteStartElement('paperSrc', this.wNamespace);\n // if (pageSetup.FirstPageTray > 0) {\n // writer.WriteAttributeString('first', this.wNamespace, pageSetup.FirstPageTray.ToString());\n // }\n // if (pageSetup.OtherPagesTray > 0) {\n // writer.WriteAttributeString('other', this.wNamespace, pageSetup.OtherPagesTray.ToString());\n // }\n // writer.WriteEndElement();\n // }\n writer.writeStartElement(undefined, 'pgBorders', this.wNamespace);\n // //zOrder\n // if (pageSetup.PageBordersApplyType === PageBordersApplyType.FirstPage)\n // writer.WriteAttributeString('display', this.wNamespace, 'firstPage');\n // else if (pageSetup.PageBordersApplyType === PageBordersApplyType.AllExceptFirstPage)\n // writer.WriteAttributeString('display', this.wNamespace, 'notFirstPage');\n // if (pageSetup.PageBorderOffsetFrom === PageBorderOffsetFrom.PageEdge) {\n // writer.WriteAttributeString('offsetFrom', this.wNamespace, 'page');\n // }\n // //Serializing zOrder of the front page border\n // if (!pageSetup.IsFrontPageBorder) {\n // writer.WriteAttributeString('zOrder', this.wNamespace, 'back');\n // }\n // SerializePageBorders(pageSetup.Borders);\n writer.writeEndElement();\n // this.serializeLineNumberType(writer, pageSetup);\n //this.serializePageNumberType(writer, pageSetup);\n };\n // serialize the page size\n WordExport.prototype.serializePageSize = function (writer, pageSetup) {\n writer.writeStartElement(undefined, 'pgSz', this.wNamespace);\n // tslint:disable-next-line:max-line-length\n writer.writeAttributeString(undefined, 'w', this.wNamespace, this.roundToTwoDecimal(pageSetup.pageWidth * this.twentiethOfPoint).toString());\n // tslint:disable-next-line:max-line-length\n writer.writeAttributeString(undefined, 'h', this.wNamespace, this.roundToTwoDecimal(pageSetup.pageHeight * this.twentiethOfPoint).toString());\n // if (pageSetup.Orientation === PageOrientation.Landscape)\n // {\n // writer.WriteAttributeString('orient', this.wNamespace, 'landscape');\n // }\n writer.writeEndElement();\n };\n // Serialize the border.\n WordExport.prototype.serializePageMargins = function (writer, pageSetup) {\n writer.writeStartElement(undefined, 'pgMar', this.wNamespace);\n var marginValue = Math.round(pageSetup.topMargin * this.twentiethOfPoint);\n writer.writeAttributeString(undefined, 'top', this.wNamespace, marginValue.toString());\n marginValue = Math.round(pageSetup.rightMargin * this.twentiethOfPoint);\n writer.writeAttributeString(undefined, 'right', this.wNamespace, marginValue.toString());\n marginValue = Math.round(pageSetup.bottomMargin * this.twentiethOfPoint);\n writer.writeAttributeString(undefined, 'bottom', this.wNamespace, marginValue.toString());\n marginValue = Math.round(pageSetup.leftMargin * this.twentiethOfPoint);\n writer.writeAttributeString(undefined, 'left', this.wNamespace, marginValue.toString());\n // tslint:disable-next-line:max-line-length\n writer.writeAttributeString(undefined, 'header', this.wNamespace, this.roundToTwoDecimal(pageSetup.headerDistance * this.twentiethOfPoint).toString());\n // tslint:disable-next-line:max-line-length\n writer.writeAttributeString(undefined, 'footer', this.wNamespace, this.roundToTwoDecimal(pageSetup.footerDistance * this.twentiethOfPoint).toString());\n writer.writeAttributeString(undefined, 'gutter', this.wNamespace, '0');\n writer.writeEndElement();\n };\n // Serialize the section type.\n WordExport.prototype.serializeSectionType = function (writer, sectionBreakCode) {\n writer.writeStartElement('w', 'type', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, sectionBreakCode); //GetSectionBreakCode(sectionBreakCode));\n writer.writeEndElement();\n };\n // Serialize the heeader/footer reference.\n WordExport.prototype.serializeHFReference = function (writer, headersFooters) {\n var hfId = '';\n if (headersFooters !== undefined) {\n this.mDifferentFirstPage = this.section.sectionFormat.differentOddAndEvenPages;\n var hf = headersFooters.firstPageHeader;\n if (hf && hf.blocks && hf.blocks.length > 0) {\n writer.writeStartElement(undefined, 'headerReference', this.wNamespace);\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'first');\n hfId = this.getNextRelationShipID();\n writer.writeAttributeString(undefined, 'id', this.rNamespace, hfId);\n this.addHeaderFooter(hf, 'FirstPageHeader', hfId);\n writer.writeEndElement();\n }\n hf = headersFooters.firstPageFooter;\n if (hf && hf.blocks && hf.blocks.length > 0) {\n writer.writeStartElement(undefined, 'footerReference', this.wNamespace);\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'first');\n hfId = this.getNextRelationShipID();\n writer.writeAttributeString(undefined, 'id', this.rNamespace, hfId);\n this.addHeaderFooter(hf, 'FirstPageFooter', hfId);\n writer.writeEndElement();\n }\n hf = headersFooters.evenHeader;\n if (hf && hf.blocks && hf.blocks.length > 0) {\n writer.writeStartElement(undefined, 'headerReference', this.wNamespace);\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'even');\n hfId = this.getNextRelationShipID();\n writer.writeAttributeString(undefined, 'id', this.rNamespace, hfId);\n this.addHeaderFooter(hf, 'EvenHeader', hfId);\n writer.writeEndElement();\n }\n hf = headersFooters.evenFooter;\n if (hf && hf.blocks && hf.blocks.length > 0) {\n writer.writeStartElement(undefined, 'footerReference', this.wNamespace);\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'even');\n hfId = this.getNextRelationShipID();\n writer.writeAttributeString(undefined, 'id', this.rNamespace, hfId);\n this.addHeaderFooter(hf, 'EvenFooter', hfId);\n writer.writeEndElement();\n }\n hf = headersFooters.header;\n if (hf && hf.blocks && hf.blocks.length > 0) {\n writer.writeStartElement(undefined, 'headerReference', this.wNamespace);\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'default');\n hfId = this.getNextRelationShipID();\n writer.writeAttributeString(undefined, 'id', this.rNamespace, hfId);\n this.addHeaderFooter(hf, 'OddHeader', hfId);\n writer.writeEndElement();\n }\n hf = headersFooters.footer;\n if (hf && hf.blocks && hf.blocks.length > 0) {\n writer.writeStartElement(undefined, 'footerReference', this.wNamespace);\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'default');\n hfId = this.getNextRelationShipID();\n writer.writeAttributeString(undefined, 'id', this.rNamespace, hfId);\n this.addHeaderFooter(hf, 'OddFooter', hfId);\n writer.writeEndElement();\n }\n }\n };\n // Adds the header footer details to the collection.\n WordExport.prototype.addHeaderFooter = function (hf, hfType, id) {\n var hfColl = new Dictionary();\n this.headersFooters.add(hfType, hfColl);\n this.headersFooters.get(hfType).add(id, hf);\n };\n // Serializes the bodyItems\n WordExport.prototype.serializeBodyItems = function (writer, blockCollection, isLastSection) {\n for (var i = 0; i < blockCollection.length; i++) {\n this.serializeBodyItem(writer, blockCollection[i], isLastSection);\n }\n };\n // Serialize the TextBody item\n WordExport.prototype.serializeBodyItem = function (writer, item, isLastSection) {\n if (isNullOrUndefined(item)) {\n throw new Error('BodyItem should not be undefined');\n }\n if (item.hasOwnProperty('inlines')) {\n this.paragraph = item;\n this.serializeParagraph(writer, item, isLastSection);\n this.paragraph = undefined;\n }\n else {\n var table = item;\n for (var i = 0; i < table.rows.length; i++) {\n if (table.rows[i].cells.length > 0) {\n this.serializeTable(writer, table);\n break;\n }\n }\n }\n };\n // Serialize the paragraph\n WordExport.prototype.serializeParagraph = function (writer, paragraph, isLastSection) {\n if (isNullOrUndefined(paragraph)) {\n throw new Error('Paragraph should not be undefined');\n }\n var sec = this.blockOwner;\n //Need to write the Section Properties if the Paragraph is last item in the section\n if (!isLastSection && sec.hasOwnProperty('sectionFormat')\n && sec.blocks.indexOf(paragraph) === sec.blocks.length - 1) {\n writer.writeStartElement('w', 'p', this.wNamespace);\n writer.writeStartElement(undefined, 'pPr', this.wNamespace);\n this.serializeSectionProperties(writer, sec);\n writer.writeEndElement();\n writer.writeEndElement();\n }\n // if (paragraph.ParagraphFormat.PageBreakAfter && !IsPageBreakNeedToBeSkipped(paragraph as Entity))\n // paragraph.InsertBreak(BreakType.PageBreak);\n // if (paragraph.ParagraphFormat.ColumnBreakAfter && !IsPageBreakNeedToBeSkipped(paragraph as Entity))\n // paragraph.InsertBreak(BreakType.ColumnBreak);\n //Splits the paragraph based on the newline character\n // paragraph.SplitTextRange();\n writer.writeStartElement('w', 'p', this.wNamespace);\n writer.writeStartElement(undefined, 'pPr', this.wNamespace);\n this.serializeParagraphFormat(writer, paragraph.paragraphFormat, paragraph);\n writer.writeEndElement(); //end of pPr\n // Serialize watermark if paragraph is the first item of Header document.\n // EnsureWatermark(paragraph);\n this.serializeParagraphItems(writer, paragraph.inlines);\n writer.writeEndElement(); //end of paragraph tag.\n };\n // Serialize the paragraph items\n WordExport.prototype.serializeParagraphItems = function (writer, paraItems) {\n var previousNode = undefined;\n for (var i = 0; i < paraItems.length; i++) {\n var item = paraItems[i];\n if (item.hasOwnProperty('fieldType')) {\n this.serializeFieldCharacter(writer, item);\n }\n else if (item.hasOwnProperty('imageString')) {\n this.serializePicture(writer, item);\n }\n else if (item.hasOwnProperty('bookmarkType')) {\n this.serializeBookMark(writer, item);\n }\n else {\n this.serializeTextRange(writer, item, previousNode);\n }\n previousNode = item;\n }\n };\n // Serialize the book mark\n WordExport.prototype.serializeBookMark = function (writer, bookmark) {\n var bookmarkId = this.getBookmarkId(bookmark.name);\n var bookmarkName = bookmark.name;\n if (bookmark.bookmarkType === 0) {\n writer.writeStartElement('w', 'bookmarkStart', this.wNamespace);\n writer.writeAttributeString('w', 'name', this.wNamespace, bookmarkName);\n }\n else if (bookmark.bookmarkType === 1) {\n writer.writeStartElement('w', 'bookmarkEnd', this.wNamespace);\n }\n writer.writeAttributeString('w', 'id', this.wNamespace, bookmarkId.toString());\n writer.writeEndElement();\n };\n WordExport.prototype.getBookmarkId = function (name) {\n var index = this.bookmarks.indexOf(name);\n if (index < 0) {\n index = this.bookmarks.length;\n this.bookmarks.push(name);\n }\n return index;\n };\n // Serialize the picture.\n WordExport.prototype.serializePicture = function (writer, image) {\n if (image.width >= 0 && image.height >= 0) {\n writer.writeStartElement(undefined, 'r', this.wNamespace);\n this.serializeCharacterFormat(writer, image.characterFormat);\n this.serializeDrawing(writer, image);\n writer.writeEndElement(); //end of run element\n }\n };\n // Serialize the drawing element.\n WordExport.prototype.serializeDrawing = function (writer, image) {\n writer.writeStartElement(undefined, 'drawing', this.wNamespace);\n this.serializeInlinePicture(writer, image);\n writer.writeEndElement();\n };\n // Serialize the inline picture.\n WordExport.prototype.serializeInlinePicture = function (writer, image) {\n writer.writeStartElement(undefined, 'inline', this.wpNamespace);\n writer.writeStartElement(undefined, 'extent', this.wpNamespace);\n var cx = Math.round(image.width * this.emusPerPoint);\n writer.writeAttributeString(undefined, 'cx', undefined, cx.toString());\n var cy = Math.round(image.height * this.emusPerPoint);\n writer.writeAttributeString(undefined, 'cy', undefined, cy.toString());\n writer.writeEndElement();\n // double borderWidth = (double)picture.PictureShape.PictureDescriptor.BorderLeft.LineWidth / DLSConstants.BorderLineFactor;\n // if (borderWidth > 0 && picture.DocxProps.length === 0) {\n // long leftTop = 0, rightBottom = 0;\n // picture.PictureShape.GetEffectExtent(borderWidth, ref leftTop, ref rightBottom);\n // m_writer.WriteStartElement('effectExtent', WP_namespace);\n // m_writer.WriteAttributeString('l', leftTop.ToString(CultureInfo.InvariantCulture));\n // m_writer.WriteAttributeString('t', leftTop.ToString(CultureInfo.InvariantCulture));\n // m_writer.WriteAttributeString('r', rightBottom.ToString(CultureInfo.InvariantCulture));\n // m_writer.WriteAttributeString('b', rightBottom.ToString(CultureInfo.InvariantCulture));\n // m_writer.WriteEndElement();\n // }\n //this.serializePicProperties(writer, image);\n this.serializeDrawingGraphics(writer, image);\n writer.writeEndElement();\n };\n WordExport.prototype.startsWith = function (sourceString, startString) {\n return startString.length > 0 && sourceString.substring(0, startString.length) === startString;\n };\n // Serialize the graphics element for pictures.\n WordExport.prototype.serializeDrawingGraphics = function (writer, picture) {\n var id = '';\n id = this.updateShapeId(picture);\n // picture.ShapeId = this.getNextDocPrID();\n // Processing picture\n writer.writeStartElement('wp', 'docPr', this.wpNamespace);\n writer.writeAttributeString(undefined, 'id', undefined, (this.mDocPrID++).toString());\n // if (!isNullOrUndefined(picture.AlternativeText))\n // m_writer.WriteAttributeString('descr', picture.AlternativeText);\n writer.writeAttributeString(undefined, 'name', undefined, '1'.toString());\n // if (!string.IsNullOrEmpty(picture.Title))\n // m_writer.WriteAttributeString('title', picture.Title);\n // else\n writer.writeAttributeString(undefined, 'title', undefined, '');\n // if (!picture.Visible)\n // m_writer.WriteAttributeString('hidden', '1');\n // SerializePictureHyperlink(picture);\n writer.writeEndElement();\n writer.writeStartElement('a', 'graphic', this.aNamespace);\n writer.writeStartElement('a', 'graphicData', this.aNamespace);\n writer.writeAttributeString(undefined, 'uri', undefined, this.pictureNamespace);\n writer.writeStartElement('pic', 'pic', this.pictureNamespace);\n writer.writeStartElement('pic', 'nvPicPr', this.pictureNamespace);\n writer.writeStartElement('pic', 'cNvPr', this.pictureNamespace);\n writer.writeAttributeString(undefined, 'id', undefined, '0');\n writer.writeAttributeString(undefined, 'name', undefined, '');\n writer.writeAttributeString(undefined, 'descr', undefined, '');\n writer.writeEndElement();\n writer.writeStartElement('pic', 'cNvPicPr', this.pictureNamespace);\n writer.writeStartElement('a', 'picLocks', this.aNamespace);\n writer.writeAttributeString(undefined, 'noChangeAspect', undefined, '1');\n writer.writeAttributeString(undefined, 'noChangeArrowheads', undefined, '1');\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeStartElement('pic', 'blipFill', this.pictureNamespace);\n writer.writeStartElement('a', 'blip', this.aNamespace);\n if (this.startsWith(picture.imageString, 'data:image')) {\n writer.writeAttributeString('r', 'embed', this.rNamespace, id);\n }\n else {\n if (this.documentImages.containsKey(id)) {\n //Remove the image document images collection for this particular key\n //If the picture image data has href means MS Word contains the image in media folder as well as \n //it is having external relationship id\n // if (!this.startsWith(picture.imageString, 'data:image')) {\n this.documentImages.remove(id);\n this.externalImages.add(id, picture.imageString);\n writer.writeAttributeString(undefined, 'link', this.rNamespace, id);\n }\n }\n //End Element Blip\n writer.writeEndElement();\n writer.writeStartElement('a', 'srcRect', this.aNamespace);\n writer.writeEndElement();\n writer.writeStartElement('a', 'stretch', this.aNamespace);\n writer.writeStartElement('a', 'fillRect', this.aNamespace);\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeStartElement('pic', 'spPr', this.pictureNamespace);\n writer.writeAttributeString(undefined, 'bwMode', undefined, 'auto');\n writer.writeStartElement('a', 'xfrm', this.aNamespace);\n // if (picture.Rotation !== 0)\n // m_writer.WriteAttributeString('rot', picture.Rotation.ToString());\n writer.writeStartElement('a', 'off', this.aNamespace);\n writer.writeAttributeString(undefined, 'x', undefined, '0');\n writer.writeAttributeString(undefined, 'y', undefined, '0');\n writer.writeEndElement();\n writer.writeStartElement('a', 'ext', this.aNamespace);\n var cx = Math.round((picture.width * this.emusPerPoint));\n writer.writeAttributeString(undefined, 'cx', undefined, cx.toString());\n var cy = Math.round((picture.height * this.emusPerPoint));\n writer.writeAttributeString(undefined, 'cy', undefined, cy.toString());\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeStartElement('a', 'prstGeom', this.aNamespace);\n writer.writeAttributeString(undefined, 'prst', undefined, 'rect');\n writer.writeStartElement('a', 'avLst', this.aNamespace);\n writer.writeEndElement();\n writer.writeEndElement();\n //When the picture border has been added next to effect list\n //if not, Picture border has not been preserved\n // if (picture.HasBorder)\n // {\n // if (picture.TextWrappingStyle === TextWrappingStyle.Inline && picture.IsShape)\n // SerializeInlineShapeLine(picture.PictureShape);\n // else\n // SerializeShapeLine(picture.PictureShape);\n // }\n // if (picture.DocxProps.length > 0)\n // SerializeDocxProps(picture.DocxProps, 'effectLst');\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeEndElement();\n };\n /// Update the shape id.\n WordExport.prototype.updateShapeId = function (picture) {\n var id = '';\n var tOwner = this.paragraph;\n // Adding picture byte data to the corresponding picture collection \n // depending on its owner subdocument\n if (this.headerFooter) {\n id = this.updateHFImageRels(this.headerFooter, picture);\n }\n else {\n if (id === '') {\n if (tOwner.hasOwnProperty('sectionFormat') || tOwner.hasOwnProperty('inlines')) {\n id = this.addImageRelation(this.documentImages, picture);\n // if (owner is WFootnote)\n // {\n // if ((owner as WFootnote).FootnoteType === FootnoteType.Footnote)\n // id = AddImageRelation(FootnoteImages, picture.ImageRecord);\n // else\n // id = AddImageRelation(EndnoteImages, picture.ImageRecord);\n // }\n // if (owner is WComment)\n // id = AddImageRelation(CommentImages, picture.ImageRecord);\n }\n }\n }\n return id;\n };\n // Adds the image relation.\n WordExport.prototype.addImageRelation = function (imageCollection, image) {\n var relationId = '';\n // if (imageCollection.ContainsValue(imageRecord)) {\n // foreach(string key in imageCollection.keys)\n // {\n // if (imageRecord === imageCollection[key]) {\n // relationId = key;\n // break;\n // }\n // }\n // }\n // else {\n relationId = this.getNextRelationShipID();\n imageCollection.add(relationId, image);\n // }\n return relationId;\n };\n // Update the HeaderFooter image relations.\n WordExport.prototype.updateHFImageRels = function (hf, image) {\n var id = '';\n // UpdateImages(image);\n var headerId = '';\n var types = this.headersFooters.keys;\n for (var i = 0; i < types.length; i++) {\n var hfColl = this.headersFooters.get(types[i]);\n var hfKeys = hfColl.keys;\n for (var j = 0; j < hfKeys.length; j++) {\n if (hfColl.get(hfKeys[j]) === hf) {\n headerId = hfKeys[j];\n var headerImages = void 0;\n if (this.headerFooterImages.containsKey(headerId)) {\n headerImages = this.headerFooterImages.get(headerId);\n id = this.addImageRelation(headerImages, image);\n }\n else {\n headerImages = new Dictionary();\n id = this.addImageRelation(headerImages, image);\n this.headerFooterImages.add(headerId, headerImages);\n }\n }\n }\n }\n return id;\n };\n // Serialize the table\n WordExport.prototype.serializeTable = function (writer, table) {\n if (table.rows.length <= 0) {\n return;\n }\n var owner = this.table;\n this.table = table;\n writer.writeStartElement(undefined, 'tbl', this.wNamespace);\n var tableFormat = table.rows[0].rowFormat;\n this.serializeTableFormat(writer, tableFormat, table);\n this.serializeTableGrid(writer, table);\n this.serializeTableRows(writer, table.rows);\n writer.writeEndElement();\n this.table = owner;\n };\n // Serialize the table grid\n WordExport.prototype.serializeTableGrid = function (writer, table) {\n writer.writeStartElement(undefined, 'tblGrid', this.wNamespace);\n if (table.grid.length !== 0) {\n this.serializeGridColumns(writer, table.grid);\n }\n writer.writeEndElement();\n };\n // Serialize the table rows\n WordExport.prototype.serializeTableRows = function (writer, rows) {\n if (rows.length > 0) {\n for (var i = 0; i < rows.length; i++) {\n var row = rows[i];\n if (row.cells.length > 0) {\n this.serializeRow(writer, row);\n }\n }\n }\n };\n // Serialize the table row\n WordExport.prototype.serializeRow = function (writer, row) {\n var owner = this.row;\n this.row = row;\n writer.writeStartElement(undefined, 'tr', this.wNamespace);\n this.serializeRowFormat(writer, row);\n this.serializeCells(writer, row.cells);\n writer.writeEndElement(); //end od table row 'tr'\n this.row = owner;\n };\n // Serialize the row format\n WordExport.prototype.serializeRowFormat = function (writer, row) {\n writer.writeStartElement(undefined, 'trPr', this.wNamespace);\n //Serialize Row Height\n if (row.rowFormat.height > 0) {\n writer.writeStartElement(undefined, 'trHeight', this.wNamespace);\n if (row.rowFormat.heightType === 'Exactly') {\n writer.writeAttributeString('w', 'hRule', this.wNamespace, 'exact');\n }\n else if (row.rowFormat.heightType === 'AtLeast') {\n writer.writeAttributeString('w', 'hRule', this.wNamespace, 'atLeast');\n }\n var height = this.roundToTwoDecimal(row.rowFormat.height * this.twentiethOfPoint).toString();\n writer.writeAttributeString('w', 'val', this.wNamespace, height);\n writer.writeEndElement();\n }\n var rowFormat = row.rowFormat;\n // //Serialize 'gridBefore' element\n var gridBefore = rowFormat.gridBefore;\n if (gridBefore > 0) {\n writer.writeStartElement(undefined, 'gridBefore', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, gridBefore.toString());\n writer.writeEndElement();\n }\n // //Serialize 'gridAfter' element\n var gridAfter = rowFormat.gridAfter;\n if (gridAfter > 0) {\n writer.writeStartElement(undefined, 'gridAfter', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, gridAfter.toString());\n writer.writeEndElement();\n }\n // //Serialize 'wBefore' element \n if (gridBefore > 0) {\n writer.writeStartElement(undefined, 'wBefore', this.wNamespace);\n switch (rowFormat.gridBeforeWidthType) {\n case 'Percent':\n var width = this.roundToTwoDecimal(rowFormat.gridBeforeWidth * this.percentageFactor).toString();\n writer.writeAttributeString('w', 'val', this.wNamespace, width);\n writer.writeAttributeString('w', 'type', this.wNamespace, 'pct');\n break;\n case 'Point':\n var pointWidth = this.roundToTwoDecimal(rowFormat.gridBeforeWidth * this.twipsInOnePoint).toString();\n writer.writeAttributeString('w', 'val', this.wNamespace, pointWidth);\n writer.writeAttributeString('w', 'type', this.wNamespace, 'dxa');\n break;\n }\n writer.writeEndElement();\n }\n //Serialize 'wAfter' element\n if (gridAfter > 0) {\n writer.writeStartElement(undefined, 'wAfter', this.wNamespace);\n switch (rowFormat.gridAfterWidthType) {\n case 'Percent':\n var width = this.roundToTwoDecimal(rowFormat.gridAfterWidth * this.percentageFactor).toString();\n writer.writeAttributeString('w', 'val', this.wNamespace, width);\n writer.writeAttributeString('w', 'type', this.wNamespace, 'pct');\n break;\n case 'Point':\n var pointWidth = this.roundToTwoDecimal(rowFormat.gridAfterWidth * this.twipsInOnePoint).toString();\n writer.writeAttributeString('w', 'val', this.wNamespace, pointWidth);\n writer.writeAttributeString('w', 'type', this.wNamespace, 'dxa');\n break;\n }\n writer.writeEndElement();\n }\n //Serialize 'cantSplit' element \n if (!rowFormat.allowBreakAcrossPages) {\n writer.writeStartElement(undefined, 'cantSplit', this.wNamespace);\n writer.writeEndElement();\n }\n // //Serialize 'tblHeader' element \n if (rowFormat.isHeader) {\n writer.writeStartElement(undefined, 'tblHeader', this.wNamespace);\n writer.writeEndElement();\n }\n writer.writeEndElement();\n };\n // serialize the table cells\n WordExport.prototype.serializeCells = function (writer, cells) {\n for (var i = 0; i < cells.length; i++) {\n this.serializeCell(writer, cells[i]);\n }\n };\n // Serialize the table cell\n WordExport.prototype.serializeCell = function (writer, cell) {\n var owner = this.blockOwner;\n this.blockOwner = cell;\n writer.writeStartElement(undefined, 'tc', this.wNamespace);\n this.serializeCellFormat(writer, cell.cellFormat);\n if (cell.blocks.length > 0) {\n var itemIndex = 0;\n var item = undefined;\n while (itemIndex < cell.blocks.length) {\n item = cell.blocks[itemIndex];\n this.serializeBodyItem(writer, item, false);\n itemIndex += 1;\n }\n }\n else {\n writer.writeStartElement(undefined, 'p', this.wNamespace);\n writer.writeStartElement(undefined, 'pPr', this.wNamespace);\n writer.writeStartElement(undefined, 'pStyle', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, 'Normal');\n writer.writeEndElement(); //end of pStyle\n writer.writeEndElement(); //end of pPr\n writer.writeEndElement(); //end of P\n }\n writer.writeEndElement(); //end of table cell 'tc' \n this.blockOwner = owner;\n };\n // Serialize the cell formatting\n WordExport.prototype.serializeCellFormat = function (writer, cellFormat) {\n var cell = this.blockOwner;\n //Get the table fomat\n var tf = this.table.tableFormat;\n //Get the row format\n var rf = this.row.rowFormat;\n writer.writeStartElement(undefined, 'tcPr', this.wNamespace);\n //w:cnfStyle - Table Cell Conditional Formatting\n // SerializeCnfStyleElement(cell);\n //w:tcW - Preferred Table Cell Width\n this.serializeCellWidth(writer, cell);\n //w:hMerge - Horizontally Merged Cell and w:vMerge - Vertically Merged Cell\n this.serializeCellMerge(writer, cellFormat);\n //w:gridSpan - Grid Columns Spanned by Current Table Cell\n this.serializeGridSpan(writer, cell);\n //w:tcBorders - Table Cell Borders\n writer.writeStartElement(undefined, 'tcBorders', this.wNamespace);\n this.serializeBorders(writer, cellFormat.borders, 8);\n writer.writeEndElement();\n //w:shd - Table Cell Shading\n this.serializeShading(writer, cell.cellFormat.shading);\n // //w:noWrap - Don't Wrap Cell Content\n // if (cellFormat.HasValue(CellFormat.TextWrapKey)) {\n // m_writer.WriteStartElement('noWrap', W_namespace);\n // if (cellFormat.TextWrap)\n // m_writer.WriteAttributeString('w', 'val', W_namespace, 'false');\n // m_writer.WriteEndElement();\n // }\n // //w:tcMar - Single Table Cell Margins\n // if (!cellFormat.SamePaddingsAsTable) {\n // m_writer.WriteStartElement('tcMar', W_namespace);\n // SerializePaddings(cellFormat.Paddings);\n // m_writer.WriteEndElement();\n // }\n //w:textDirection - Table Cell Text Flow Direction\n this.serializeTableCellDirection(writer, cellFormat);\n // //w:tcFitText - Fit Text Within Cell\n // if (cellFormat.FitText) {\n // m_writer.WriteStartElement('tcFitText', W_namespace);\n // m_writer.WriteEndElement();\n // }\n // //w:hideMark \n // if (cellFormat.HideMark) {\n // m_writer.WriteStartElement('hideMark', W_namespace);\n // m_writer.WriteEndElement();\n // }\n //w:vAlign - Table Cell Vertical Alignment\n // if (cellFormat.HasValue(CellFormat.VrAlignmentKey))\n this.serializeCellVerticalAlign(writer, cellFormat.verticalAlignment);\n // //w:hideMark - Ignore End Of Cell Marker In Row Height Calculation\n // SerializeDocxProps(tempDocxProps, 'hideMark');\n // //w:cellIns - Table Cell Insertion\n // SerializeDocxProps(tempDocxProps, 'cellIns');\n // //w:cellDel - Table Cell Deletion\n // SerializeDocxProps(tempDocxProps, 'cellDel');\n // //w:cellMerge - Vertically Merged/Split Table Cells\n // SerializeDocxProps(tempDocxProps, 'cellMerge');\n // if (cellFormat.OldPropertiesHash.length > 0 && !m_isAlternativeCellFormat) {\n // m_isAlternativeCellFormat = true;\n // SerializeTrackChangeProps('tcPrChange', cellFormat.FormatChangeAuthorName, cellFormat.FormatChangeDateTime);\n // Dictionary < int, object > oldPropertyHash = new Dictionary(cellFormat.OldPropertiesHash);\n // Dictionary < int, object > propertyHash = new Dictionary(cellFormat.PropertiesHash);\n // cellFormat.PropertiesHash.Clear();\n // cellFormat.OldPropertiesHash.Clear();\n // foreach(KeyValuePair < int, object > keyValue in oldPropertyHash)\n // cellFormat.PropertiesHash[keyValue.Key] = keyValue.Value;\n // SerializeCellFormat(cellFormat);\n // cellFormat.PropertiesHash.Clear();\n // foreach(KeyValuePair < int, object > keyValue in propertyHash)\n // cellFormat.PropertiesHash[keyValue.Key] = keyValue.Value;\n // foreach(KeyValuePair < int, object > keyValue in oldPropertyHash)\n // cellFormat.OldPropertiesHash[keyValue.Key] = keyValue.Value;\n // m_writer.WriteEndElement();\n // m_isAlternativeCellFormat = false;\n // }\n writer.writeEndElement();\n };\n // Serialize the cell width\n WordExport.prototype.serializeCellWidth = function (writer, cell) {\n var cf = cell.cellFormat;\n writer.writeStartElement(undefined, 'tcW', this.wNamespace);\n if (cf.preferredWidthType === 'Percent') {\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'pct');\n // tslint:disable-next-line:max-line-length\n writer.writeAttributeString(undefined, 'w', this.wNamespace, this.roundToTwoDecimal(cf.preferredWidth * this.percentageFactor).toString());\n }\n else if (cf.preferredWidthType === 'Point') {\n // tslint:disable-next-line:max-line-length\n writer.writeAttributeString(undefined, 'w', this.wNamespace, this.roundToTwoDecimal(cf.preferredWidth * this.twipsInOnePoint).toString());\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'dxa');\n }\n else {\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'auto');\n writer.writeAttributeString(undefined, 'w', this.wNamespace, '0');\n }\n writer.writeEndElement();\n };\n // Serialize cell merge\n WordExport.prototype.serializeCellMerge = function (writer, cellFormat) {\n var cell = this.blockOwner;\n var isserialized = false;\n var collKey;\n var currentIndex = cell.columnIndex;\n var cellIndex = this.row.cells.indexOf(cell);\n var prevIndex = cellIndex > 0 ? this.row.cells[cellIndex - 1].columnIndex : cell.columnIndex;\n if (cell.columnIndex === cellIndex) {\n collKey = cell.columnIndex;\n isserialized = true;\n }\n else {\n isserialized = false;\n }\n if (!isserialized) {\n if (cellIndex === 0) {\n currentIndex = cell.columnIndex;\n prevIndex = -1;\n }\n for (var i = prevIndex; i < currentIndex; i++) {\n collKey = prevIndex + 1;\n prevIndex += 1;\n if (this.mVerticalMerge.containsKey(collKey)) {\n this.createMerge(writer, collKey, cell);\n }\n }\n }\n if (cellFormat.rowSpan > 1) {\n writer.writeStartElement(undefined, 'vMerge', this.wNamespace);\n this.mVerticalMerge.add(collKey, cellFormat.rowSpan - 1);\n if (cellFormat.columnSpan > 1) {\n this.mGridSpans.add(collKey, cellFormat.columnSpan);\n }\n writer.writeAttributeString('w', 'val', this.wNamespace, 'restart');\n writer.writeEndElement();\n }\n else if (this.mVerticalMerge.containsKey(collKey) && isserialized) {\n this.createMerge(writer, collKey, cell);\n }\n else if (this.mVerticalMerge.containsKey(cellIndex + 1) && isserialized && cell.nextNode === undefined) {\n collKey = cell.columnIndex + 1;\n writer.writeEndElement();\n writer.writeStartElement('w', 'p', this.wNamespace);\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeStartElement(undefined, 'tc', this.wNamespace);\n writer.writeStartElement(undefined, 'tcPr', this.wNamespace);\n this.serializeColumnSpan(collKey, writer);\n writer.writeStartElement(undefined, 'vMerge', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, 'continue');\n writer.writeEndElement();\n this.checkMergeCell(collKey);\n }\n };\n WordExport.prototype.createMerge = function (writer, collKey, cell) {\n this.serializeColumnSpan(collKey, writer);\n writer.writeStartElement(undefined, 'vMerge', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, 'continue');\n writer.writeEndElement();\n writer.writeEndElement(); //end tcPr\n writer.writeStartElement('w', 'p', this.wNamespace);\n writer.writeEndElement();\n writer.writeEndElement(); //end tc\n writer.writeStartElement(undefined, 'tc', this.wNamespace);\n writer.writeStartElement(undefined, 'tcPr', this.wNamespace);\n this.serializeCellWidth(writer, cell);\n this.checkMergeCell(collKey);\n };\n WordExport.prototype.serializeColumnSpan = function (collKey, writer) {\n if (this.mGridSpans.keys.length > 0 && this.mGridSpans.containsKey(collKey)) {\n writer.writeStartElement(undefined, 'gridSpan', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, this.mGridSpans.get(collKey).toString());\n writer.writeEndElement();\n }\n };\n WordExport.prototype.checkMergeCell = function (collKey) {\n if ((this.mVerticalMerge.get(collKey) - 1) === 0) {\n this.mVerticalMerge.remove(collKey);\n if (this.mGridSpans.keys.length > 0 && this.mGridSpans.containsKey(collKey)) {\n this.mGridSpans.remove(collKey);\n }\n }\n else {\n this.mVerticalMerge.set(collKey, this.mVerticalMerge.get(collKey) - 1);\n }\n };\n // Serialize the grid span element of cell.\n WordExport.prototype.serializeGridSpan = function (writer, cell) {\n // int gridSpan = cell.cellFormat.GridSpan;\n if (cell.cellFormat.columnSpan > 1) {\n var num = cell.cellFormat.columnSpan;\n writer.writeStartElement(undefined, 'gridSpan', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, num.toString());\n writer.writeEndElement();\n }\n };\n // Serialize the table cell direction\n WordExport.prototype.serializeTableCellDirection = function (writer, cellFormat) {\n // if (cellFormat..textDirection !== TextDirection.Horizontal)\n // {\n // m_writer.WriteStartElement('textDirection', W_namespace);\n // switch (cellFormat.TextDirection)\n // {\n // case TextDirection.Horizontal:\n // m_writer.WriteAttributeString('w', 'val', W_namespace, 'lrTb');\n // break;\n // case TextDirection.VerticalBottomToTop:\n // m_writer.WriteAttributeString('w', 'val', W_namespace, 'btLr');\n // break;\n // case TextDirection.VerticalTopToBottom:\n // m_writer.WriteAttributeString('w', 'val', W_namespace, 'tbRl');\n // break;\n // case TextDirection.HorizontalFarEast:\n // m_writer.WriteAttributeString('w', 'val', W_namespace, 'lrTbV');\n // break;\n // case TextDirection.Vertical:\n // m_writer.WriteAttributeString('w', 'val', W_namespace, 'tbLrV');\n // break;\n // case TextDirection.VerticalFarEast:\n // m_writer.WriteAttributeString('w', 'val', W_namespace, 'tbRlV');\n // break;\n // }\n // m_writer.WriteEndElement();\n // }\n };\n // Serialize the cell vertical alignment\n WordExport.prototype.serializeCellVerticalAlign = function (writer, alignment) {\n writer.writeStartElement(undefined, 'vAlign', this.wNamespace);\n switch (alignment) {\n case 'Top':\n writer.writeAttributeString('w', 'val', this.wNamespace, 'top');\n break;\n case 'Center':\n writer.writeAttributeString('w', 'val', this.wNamespace, 'center');\n break;\n default:\n writer.writeAttributeString('w', 'val', this.wNamespace, 'bottom');\n break;\n }\n writer.writeEndElement();\n };\n // Serialize the table grid columns.\n WordExport.prototype.serializeGridColumns = function (writer, grid) {\n for (var i = 1, count = grid.length; i < count; i++) {\n var gridValue = Math.round(grid[i] * 20);\n writer.writeStartElement(undefined, 'gridCol', this.wNamespace);\n writer.writeAttributeString(undefined, 'w', this.wNamespace, gridValue.toString());\n writer.writeEndElement();\n }\n };\n // Serialize the row formattings.\n // Table parameter is passed for serializing table format and undefined for serializing row format.\n WordExport.prototype.serializeTableFormat = function (writer, format, table) {\n // if (!isNullOrUndefined(table))\n // {\n // List tempDocxProps = new List();\n // for (int i = 0, cnt = table.DocxTableFormat.NodeArray.length; i < cnt; i++)\n // tempDocxProps.Add(table.DocxTableFormat.NodeArray[i]);\n writer.writeStartElement(undefined, 'tblPr', this.wNamespace);\n // SerializeTableStlye(format);\n // if (format.WrapTextAround &&!((table.OwnerTextBody.Owner is WTextBox) || \n //(table.OwnerTextBody.Owner is WComment) || (table.OwnerTextBody.Owner is WFootnote)))\n // {\n // SerializeTablePositioning(format.Positioning);\n // if (!format.Positioning.AllowOverlap)\n // {\n // m_writer.WriteStartElement('tblOverlap', W_namespace);\n // m_writer.WriteAttributeString('val', W_namespace, 'never');\n // m_writer.WriteEndElement();\n // }\n // }\n // if (format.Bidi)\n // {\n // m_writer.WriteStartElement('bidiVisual', W_namespace);\n // m_writer.WriteEndElement();\n // }\n // SerializeDocxProps(tempDocxProps, 'tblStyleRowBandSize');\n // SerializeDocxProps(tempDocxProps, 'tblStyleColBandSize');\n this.serializeTableWidth(writer, table);\n this.serializeTableAlignment(writer, table.tableFormat);\n this.serializeCellSpacing(writer, table.tableFormat);\n this.serializeTableIndentation(writer, table.tableFormat);\n this.serializeTableBorders(writer, table.tableFormat);\n this.serializeShading(writer, table.tableFormat.shading);\n this.serializeTblLayout(writer, table.tableFormat);\n // this.serializeTableCellMargin(writer, table.tableFormat);\n // SerializeTableLook(table);\n // if (!isNullOrUndefined(table.Title))\n // SerializeTableTitle(table);\n // if (!isNullOrUndefined(table.Description))\n // SerializeTableDescription(table);\n // }\n // else\n // {\n // SerializeCellSpacing(format);\n // SerializeTableIndentation(format);\n // SerializeTableBorders(format);\n // SerializeTableShading(format);\n // SerializeTblLayout(format);\n // SerializeTableCellMargin(format);\n // }\n // if (!isNullOrUndefined(format.OwnerBase) && format.OwnerBase is WTable\n // && format.OldPropertiesHash.length > 0 && !m_isAlternativeTableFormat)\n // {\n // m_isAlternativeTableFormat = true;\n // SerializeTrackChangeProps('tblPrChange', format.FormatChangeAuthorName, format.FormatChangeDateTime);\n // SerializeTableTrackChanges(format, format.OwnerBase as WTable);\n // m_writer.WriteEndElement();\n // m_isAlternativeTableFormat = false;\n // }\n // if (!isNullOrUndefined(format.OwnerRow) && format.OldPropertiesHash.length > 0)\n // {\n // SerializeTrackChangeProps('tblPrExChange', format.FormatChangeAuthorName, format.FormatChangeDateTime);\n // SerializeTableTrackChanges(format, undefined);\n // m_writer.WriteEndElement();\n // }\n // SerializeTblTrackChanges(format);\n if (!isNullOrUndefined(table)) {\n writer.writeEndElement(); //end of tblPr\n }\n };\n // Serialize the table borders\n WordExport.prototype.serializeShading = function (writer, format) {\n // if (format.textureStyle !== 'TextureNone') {\n writer.writeStartElement(undefined, 'shd', this.wNamespace);\n writer.writeAttributeString(undefined, 'fill', this.wNamespace, this.getColor(format.backgroundColor));\n if (format.foregroundColor === 'empty') {\n writer.writeAttributeString(undefined, 'color', this.wNamespace, 'auto');\n }\n else {\n writer.writeAttributeString(undefined, 'color', this.wNamespace, this.getColor(format.foregroundColor));\n }\n writer.writeAttributeString('w', 'val', this.wNamespace, this.getTextureStyle(format.textureStyle));\n writer.writeEndElement();\n // }\n };\n WordExport.prototype.getTextureStyle = function (textureStyle) {\n switch (textureStyle) {\n case 'Texture5Percent':\n case 'Texture2Pt5Percent':\n case 'Texture7Pt5Percent':\n return 'pct5';\n case 'Texture10Percent':\n return 'pct10';\n case 'Texture12Pt5Percent':\n return 'pct12';\n case 'Texture15Percent':\n case 'Texture17Pt5Percent':\n return 'pct15';\n case 'Texture20Percent':\n case 'Texture22Pt5Percent':\n return 'pct20';\n case 'Texture25Percent':\n case 'Texture27Pt5Percent':\n return 'pct25';\n case 'Texture30Percent':\n case 'Texture32Pt5Percent':\n return 'pct30';\n case 'Texture35Percent':\n return 'pct35';\n case 'Texture37Pt5Percent':\n return 'pct37';\n case 'Texture40Percent':\n case 'Texture42Pt5Percent':\n return 'pct40';\n case 'Texture45Percent':\n case 'Texture47Pt5Percent':\n return 'pct45';\n case 'Texture50Percent':\n case 'Texture52Pt5Percent':\n return 'pct50';\n case 'Texture55Percent':\n case 'Texture57Pt5Percent':\n return 'pct55';\n case 'Texture60Percent':\n return 'pct60';\n case 'Texture62Pt5Percent':\n return 'pct62';\n case 'Texture65Percent':\n case 'Texture67Pt5Percent':\n return 'pct65';\n case 'Texture70Percent':\n case 'Texture72Pt5Percent':\n return 'pct70';\n case 'Texture75Percent':\n case 'Texture77Pt5Percent':\n return 'pct75';\n case 'Texture80Percent':\n case 'Texture82Pt5Percent':\n return 'pct80';\n case 'Texture85Percent':\n return 'pct85';\n case 'Texture87Pt5Percent':\n return 'pct87';\n case 'Texture90Percent':\n case 'Texture92Pt5Percent':\n return 'pct90';\n case 'Texture95Percent':\n case 'Texture97Pt5Percent':\n return 'pct95';\n case 'TextureCross':\n return 'thinHorzCross';\n case 'TextureDarkCross':\n return 'horzCross';\n case 'TextureDarkDiagonalCross':\n return 'diagCross';\n case 'TextureDarkDiagonalDown':\n return 'reverseDiagStripe';\n case 'TextureDarkDiagonalUp':\n return 'diagStripe';\n case 'TextureDarkHorizontal':\n return 'horzStripe';\n case 'TextureDarkVertical':\n return 'vertStripe';\n case 'TextureDiagonalCross':\n return 'thinDiagCross';\n case 'TextureDiagonalDown':\n return 'thinReverseDiagStripe';\n case 'TextureDiagonalUp':\n return 'thinDiagStripe';\n case 'TextureHorizontal':\n return 'thinHorzStripe';\n case 'TextureSolid':\n return 'solid';\n case 'TextureVertical':\n return 'thinVertStripe';\n default:\n return 'clear';\n }\n };\n // Serialize the table borders\n WordExport.prototype.serializeTableBorders = function (writer, format) {\n var borders = format.borders;\n // if (IsNoneBorder(borders))\n // return;\n writer.writeStartElement(undefined, 'tblBorders', this.wNamespace);\n this.serializeBorders(writer, format.borders, 8);\n writer.writeEndElement();\n };\n // Serialize the borders.\n WordExport.prototype.serializeBorders = function (writer, borders, multipler) {\n this.serializeBorder(writer, borders.top, 'top', multipler);\n this.serializeBorder(writer, borders.left, 'left', multipler);\n this.serializeBorder(writer, borders.bottom, 'bottom', multipler);\n this.serializeBorder(writer, borders.right, 'right', multipler);\n this.serializeBorder(writer, borders.horizontal, 'insideH', multipler);\n this.serializeBorder(writer, borders.vertical, 'insideV', multipler);\n this.serializeBorder(writer, borders.diagonalDown, 'tl2br', multipler);\n this.serializeBorder(writer, borders.diagonalUp, 'tr2bl', multipler);\n };\n // Serialize the table layout element\n WordExport.prototype.serializeTblLayout = function (writer, format) {\n //TODO: AUTO size property is not mapped yet\n // if (!format.IsAutoResized)\n // {\n // writer.writeStartElement(undefined, 'tblLayout', this.wNamespace);\n // writer.writeAttributeString(undefined, 'type', this.wNamespace, 'fixed');\n // writer.writeEndElement();\n // }\n };\n // Serializes the Border\n WordExport.prototype.serializeBorder = function (writer, border, tagName, multiplier) {\n var borderStyle = border.lineStyle;\n var sz = (border.lineWidth * multiplier);\n var space = border.space;\n if (borderStyle === 'Cleared') {\n writer.writeStartElement(undefined, tagName, this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, 'nil');\n writer.writeEndElement();\n return;\n }\n else if ((borderStyle === 'None' && !border.hasNoneStyle) || sz <= 0) {\n return;\n }\n writer.writeStartElement(undefined, tagName, this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, this.getBorderStyle(borderStyle));\n // if (border.color === '#000000')\n // {\n // writer.writeAttributeString(undefined, 'color', this.wNamespace, 'auto');\n // }\n // else\n // {\n writer.writeAttributeString(undefined, 'color', this.wNamespace, this.getColor(border.color));\n // }\n writer.writeAttributeString(undefined, 'sz', this.wNamespace, this.roundToTwoDecimal(sz).toString());\n writer.writeAttributeString(undefined, 'space', this.wNamespace, space.toString());\n if (border.shadow) {\n writer.writeAttributeString(undefined, 'shadow', this.wNamespace, 'on');\n }\n writer.writeEndElement();\n };\n // Get the border style as string\n WordExport.prototype.getBorderStyle = function (borderStyle) {\n switch (borderStyle) {\n case 'Cleared':\n return 'cleared';\n case 'DashSmallGap':\n return 'dashSmallGap';\n case 'Triple':\n return 'triple';\n case 'Dot':\n return 'dotted';\n case 'DashDot':\n return 'dotDash';\n case 'DashLargeGap':\n return 'dashed';\n case 'DashDotDot':\n return 'dotDotDash';\n case 'Double':\n return 'double';\n case 'ThinThickSmallGap':\n return 'thinThickSmallGap';\n case 'ThickThinSmallGap':\n return 'thickThinSmallGap';\n case 'ThinThickThinSmallGap':\n return 'thinThickThinSmallGap';\n case 'ThickThinMediumGap':\n return 'thickThinMediumGap';\n case 'ThinThickMediumGap':\n return 'thinThickMediumGap';\n case 'ThinThickThinMediumGap':\n return 'thinThickThinMediumGap';\n case 'ThickThinLargeGap':\n return 'thickThinLargeGap';\n case 'ThinThickLargeGap':\n return 'thinThickLargeGap';\n case 'ThinThickThinLargeGap':\n return 'thinThickThinLargeGap';\n case 'Thick':\n return 'thick';\n case 'SingleWavy':\n return 'wave';\n case 'DoubleWavy':\n return 'doubleWave';\n case 'DashDotStroked':\n return 'dashDotStroked';\n case 'Engrave3D':\n return 'threeDEngrave';\n case 'Emboss3D':\n return 'threeDEmboss';\n case 'Outset':\n return 'outset';\n case 'Inset':\n return 'inset';\n // case 'None':\n // return 'none';\n default:\n return 'single';\n }\n };\n // Serialize the table indentation.\n WordExport.prototype.serializeTableIndentation = function (writer, format) {\n writer.writeStartElement(undefined, 'tblInd', this.wNamespace);\n var tableIndent = Math.round(format.leftIndent * this.twipsInOnePoint);\n writer.writeAttributeString(undefined, 'w', this.wNamespace, tableIndent.toString());\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'dxa');\n writer.writeEndElement();\n };\n // Serialize the cell spacing.\n WordExport.prototype.serializeCellSpacing = function (writer, format) {\n if (!isNullOrUndefined(format.cellSpacing) && format.cellSpacing >= 0) {\n writer.writeStartElement(undefined, 'tblCellSpacing', this.wNamespace);\n // tslint:disable-next-line:max-line-length\n writer.writeAttributeString(undefined, 'w', this.wNamespace, this.roundToTwoDecimal(format.cellSpacing * this.twentiethOfPoint).toString());\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'dxa');\n writer.writeEndElement();\n }\n };\n // Serialize the table width\n WordExport.prototype.serializeTableWidth = function (writer, table) {\n writer.writeStartElement(undefined, 'tblW', this.wNamespace);\n if (table.tableFormat.preferredWidthType === 'Percent') {\n // tslint:disable-next-line:max-line-length\n writer.writeAttributeString(undefined, 'w', this.wNamespace, (table.tableFormat.preferredWidth * this.percentageFactor).toString());\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'pct');\n }\n else if (table.tableFormat.preferredWidthType === 'Point') {\n var tableWidth = Math.round(table.tableFormat.preferredWidth * this.twipsInOnePoint);\n writer.writeAttributeString(undefined, 'w', this.wNamespace, tableWidth.toString());\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'dxa');\n }\n else {\n writer.writeAttributeString(undefined, 'w', this.wNamespace, '0');\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'auto');\n }\n writer.writeEndElement();\n };\n // Serialize the table alignment\n WordExport.prototype.serializeTableAlignment = function (writer, format) {\n writer.writeStartElement(undefined, 'jc', this.wNamespace);\n switch (format.tableAlignment) {\n case 'Right':\n writer.writeAttributeString('w', 'val', this.wNamespace, 'right');\n break;\n case 'Center':\n writer.writeAttributeString('w', 'val', this.wNamespace, 'center');\n break;\n default:\n writer.writeAttributeString('w', 'val', this.wNamespace, 'left');\n break;\n }\n writer.writeEndElement();\n };\n // Serialize the field\n WordExport.prototype.serializeFieldCharacter = function (writer, field) {\n writer.writeStartElement(undefined, 'r', this.wNamespace);\n this.serializeCharacterFormat(writer, field.characterFormat);\n writer.writeStartElement(undefined, 'fldChar', this.wNamespace);\n var type = field.fieldType === 0 ? 'begin'\n : field.fieldType === 1 ? 'end' : 'separate';\n writer.writeAttributeString(undefined, 'fldCharType', this.wNamespace, type);\n writer.writeEndElement();\n writer.writeEndElement();\n };\n // Serialize the text range.\n WordExport.prototype.serializeTextRange = function (writer, span, previousNode) {\n writer.writeStartElement('w', 'r', this.wNamespace);\n this.serializeCharacterFormat(writer, span.characterFormat);\n if (span.text === '\\t') {\n writer.writeElementString(undefined, 'tab', this.wNamespace, undefined);\n }\n else if (span.text === '\\v') {\n writer.writeElementString(undefined, 'br', this.wNamespace, undefined);\n }\n else {\n var isField = !isNullOrUndefined(previousNode)\n && previousNode.hasOwnProperty('fieldType') && previousNode.fieldType !== 2;\n writer.writeStartElement(undefined, isField ? 'instrText' : 't', this.wNamespace);\n writer.writeAttributeString('xml', 'space', this.xmlNamespace, 'preserve');\n writer.writeString(span.text);\n writer.writeEndElement();\n }\n writer.writeEndElement();\n };\n // Serializes the paragraph format\n WordExport.prototype.serializeParagraphFormat = function (writer, paragraphFormat, paragraph) {\n if (!isNullOrUndefined(paragraphFormat.styleName)) {\n writer.writeStartElement(undefined, 'pStyle', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, paragraphFormat.styleName);\n writer.writeEndElement(); //end of pStyle\n }\n if (!isNullOrUndefined(paragraph)) {\n this.serializeListFormat(writer, paragraph.paragraphFormat.listFormat);\n }\n else {\n this.serializeListFormat(writer, paragraphFormat.listFormat);\n }\n this.serializeParagraphSpacing(writer, paragraphFormat);\n this.serializeIndentation(writer, paragraphFormat);\n this.serializeParagraphAlignment(writer, paragraphFormat.textAlignment);\n if (!isNullOrUndefined(paragraphFormat.tabs) && paragraphFormat.tabs.length > 0) {\n this.serializeTabs(writer, paragraphFormat.tabs);\n }\n };\n // Serialize Tabs\n WordExport.prototype.serializeTabs = function (writer, tabStops) {\n writer.writeStartElement('w', 'tabs', this.wNamespace);\n for (var i = 0; i < tabStops.length; i++) {\n this.serializeTab(writer, tabStops[i]);\n }\n writer.writeEndElement();\n };\n WordExport.prototype.serializeTab = function (writer, tabStop) {\n var position = 0;\n writer.writeStartElement('w', 'tab', this.wNamespace);\n if (tabStop.position === 0 && tabStop.deletePosition !== 0) {\n position = tabStop.deletePosition * this.twentiethOfPoint;\n writer.writeAttributeString('w', 'val', this.wNamespace, 'clear');\n }\n else {\n position = tabStop.position * this.twentiethOfPoint;\n writer.writeAttributeString('w', 'val', this.wNamespace, this.getTabJustification(tabStop.tabJustification));\n }\n if (!isNullOrUndefined(tabStop.tabLeader) && (tabStop.tabLeader !== 'None')) {\n writer.writeAttributeString('w', 'leader', this.wNamespace, this.getTabLeader(tabStop.tabLeader));\n }\n writer.writeAttributeString('w', 'pos', this.wNamespace, position.toString() + '');\n writer.writeEndElement();\n };\n WordExport.prototype.getTabLeader = function (tabLeader) {\n switch (tabLeader) {\n case 'Dot':\n return 'dot';\n case 'Hyphen':\n return 'hyphen';\n case 'Underscore':\n return 'underscore';\n default:\n return 'none';\n }\n };\n WordExport.prototype.getTabJustification = function (tabJustification) {\n switch (tabJustification) {\n case 'Bar':\n return 'bar';\n case 'Center':\n return 'center';\n case 'Decimal':\n return 'decimal';\n case 'Left':\n return 'left';\n case 'List':\n return 'num';\n case 'Right':\n return 'right';\n default:\n return 'clear';\n }\n };\n // // Seraializes the pargraph list format\n // private serializeListParagraph(writer: XmlWriter, paragraph: any): void {\n // if (!isNullOrUndefined(paragraph.paragraphFormat.listFormat)) {\n // this.serializeListFormat(writer, paragraph.paragraphFormat.listFormat);\n // }\n // }\n // Serialize the list format\n WordExport.prototype.serializeListFormat = function (writer, lf) {\n // let pStyleName = undefined;\n // if (lf.CurrentListStyle.IsBuiltInStyle && !isNullOrUndefined(lf.OwnerParagraph))\n // {\n // pStyleName = lf.OwnerParagraph.StyleName;\n // }\n // int listId = GetListId(lf);\n // if (!isNullOrUndefined(pStyleName) && string.IsNullOrEmpty(lf.LFOStyleName)) \n // {\n // WordDocument doc = lf.OwnerParagraph.Document;\n // WParagraphStyle style = doc.Styles.FindByName(pStyleName, StyleType.ParagraphStyle) as WParagraphStyle;\n // if (style.ListIndex === -1)\n // {\n // ListStyle lstStyle = lf.OwnerParagraph.Document.ListStyles.FindByName(lf.CustomStyleName);\n // style.ListIndex = listId;\n // if (lstStyle.Levels.length > 1)\n // {\n // style.ListLevel = lf.ListLevelNumber;\n // }\n // pStyleName = pStyleName.Replace(' ', '');\n // lstStyle.Levels[lf.ListLevelNumber].ParaStyleName = pStyleName;\n // }\n // }\n // else\n // {\n // if (!isNullOrUndefined(lf.listId) && !isNullOrUndefined(lf.listLevelNumber)) {\n // this.serializeNumPr(writer, lf.listId, lf.listLevelNumber);\n // }\n // }\n if (!isNullOrUndefined(lf.listId) || !isNullOrUndefined(lf.listLevelNumber)) {\n writer.writeStartElement(undefined, 'numPr', this.wNamespace);\n if (!isNullOrUndefined(lf.listLevelNumber) && lf.listLevelNumber !== -1) {\n writer.writeStartElement(undefined, 'ilvl', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, lf.listLevelNumber.toString());\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(lf.listId) && lf.listId !== -1) {\n writer.writeStartElement(undefined, 'numId', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, (lf.listId + 1).toString());\n writer.writeEndElement();\n }\n writer.writeEndElement();\n }\n };\n // // Serializes the numbering properties to the paragraph\n // private serializeNumPr(writer: XmlWriter, listId: number, listLevel: number): void {\n // writer.writeStartElement(undefined, 'numPr', this.wNamespace);\n // if (listLevel !== -1) {\n // writer.writeStartElement(undefined, 'ilvl', this.wNamespace);\n // writer.writeAttributeString('w', 'val', this.wNamespace, listLevel.toString());\n // writer.writeEndElement();\n // }\n // if (listId !== -1) {\n // writer.writeStartElement(undefined, 'numId', this.wNamespace);\n // writer.writeAttributeString('w', 'val', this.wNamespace, listId.toString());\n // writer.writeEndElement();\n // }\n // writer.writeEndElement();\n // }\n WordExport.prototype.serializeParagraphAlignment = function (writer, txtAlignment) {\n if (!isNullOrUndefined(txtAlignment)) {\n writer.writeStartElement(undefined, 'jc', this.wNamespace);\n var alignment = void 0;\n switch (txtAlignment) {\n case 'Center':\n alignment = 'center';\n break;\n case 'Right':\n alignment = 'right';\n break;\n case 'Justify':\n alignment = 'both';\n break;\n default:\n alignment = 'left';\n break;\n }\n writer.writeAttributeString('w', 'val', this.wNamespace, alignment);\n writer.writeEndElement();\n }\n };\n // Serializes the paragraph spacings\n WordExport.prototype.serializeParagraphSpacing = function (writer, paragraphFormat) {\n writer.writeStartElement(undefined, 'spacing', this.wNamespace);\n // if (paragraphFormat.HasValue(WParagraphFormat.BeforeLinesKey))\n // {\n // short beforeLines = (short)Math.Round(paragraphFormat.BeforeLines * DLSConstants.HundredthsUnit);\n // writer.WriteAttributeString('beforeLines', this.wNamespace, ToString((float)beforeLines)); \n // }\n // if (paragraphFormat.HasValue(WParagraphFormat.AfterLinesKey))\n // {\n // short afterLines = (short)Math.Round(paragraphFormat.AfterLines * DLSConstants.HundredthsUnit);\n // writer.WriteAttributeString('afterLines', this.wNamespace, ToString((float)afterLines)); \n // }\n // tslint:disable-next-line:max-line-length\n if (!isNullOrUndefined(paragraphFormat.beforeSpacing)) {\n writer.writeAttributeString(undefined, 'before', this.wNamespace, this.roundToTwoDecimal(paragraphFormat.beforeSpacing * this.twentiethOfPoint).toString());\n }\n //TODO:ISSUEFIX(paragraphFormat.beforeSpacing * this.twentiethOfPoint).toString());\n // if (paragraphFormat.HasValue(WParagraphFormat.SpacingBeforeAutoKey))\n // {\n // if (paragraphFormat.SpaceBeforeAuto)\n // {\n // writer.WriteAttributeString('beforeAutospacing', this.wNamespace, '1');\n // }\n // else\n // {\n // writer.WriteAttributeString('beforeAutospacing', this.wNamespace, '0');\n // }\n // }\n if (!isNullOrUndefined(paragraphFormat.afterSpacing)) {\n // tslint:disable-next-line:max-line-length\n writer.writeAttributeString(undefined, 'after', this.wNamespace, this.roundToTwoDecimal(paragraphFormat.afterSpacing * this.twentiethOfPoint).toString());\n }\n //TODO:ISSUEFIX(paragraphFormat.afterSpacing * this.twentiethOfPoint).toString());\n // if (paragraphFormat.HasValue(WParagraphFormat.SpacingAfterAutoKey))\n // {\n // if (paragraphFormat.SpaceAfterAuto)\n // {\n // writer.WriteAttributeString('afterAutospacing', this.wNamespace, '1');\n // }\n // else\n // {\n // writer.WriteAttributeString('afterAutospacing', this.wNamespace, '0');\n // }\n // }\n writer.writeAttributeString(undefined, 'line', this.wNamespace, '240');\n //TODO:ISSUEFIX((paragraphFormat.lineSpacing) * this.twentiethOfPoint).toString());\n switch (paragraphFormat.lineSpacingType) {\n case 'AtLeast':\n writer.writeAttributeString(undefined, 'lineRule', this.wNamespace, 'atLeast');\n break;\n case 'Exactly':\n writer.writeAttributeString(undefined, 'lineRule', this.wNamespace, 'exact');\n break;\n default:\n writer.writeAttributeString(undefined, 'lineRule', this.wNamespace, 'auto');\n break;\n }\n writer.writeEndElement();\n };\n // Serializes the paragraph indentation\n WordExport.prototype.serializeIndentation = function (writer, paragraphFormat) {\n writer.writeStartElement(undefined, 'ind', this.wNamespace);\n if (!isNullOrUndefined(paragraphFormat.leftIndent)) {\n // tslint:disable-next-line:max-line-length\n writer.writeAttributeString(undefined, 'left', this.wNamespace, this.roundToTwoDecimal(paragraphFormat.leftIndent * this.twipsInOnePoint).toString());\n }\n if (!isNullOrUndefined(paragraphFormat.rightIndent)) {\n // tslint:disable-next-line:max-line-length\n writer.writeAttributeString(undefined, 'right', this.wNamespace, this.roundToTwoDecimal(paragraphFormat.rightIndent * this.twipsInOnePoint).toString());\n }\n if (!isNullOrUndefined(paragraphFormat.firstLineIndent)) {\n if (paragraphFormat.firstLineIndent < 0) {\n // tslint:disable-next-line:max-line-length\n writer.writeAttributeString(undefined, 'hanging', this.wNamespace, this.roundToTwoDecimal(-1 * paragraphFormat.firstLineIndent * this.twipsInOnePoint).toString());\n }\n else {\n // tslint:disable-next-line:max-line-length\n writer.writeAttributeString(undefined, 'firstLine', this.wNamespace, this.roundToTwoDecimal(paragraphFormat.firstLineIndent * this.twipsInOnePoint).toString());\n }\n }\n writer.writeEndElement();\n };\n // Serialize the styles (styles.xml)\n WordExport.prototype.serializeStyles = function () {\n var writer = new XmlWriter();\n writer.writeStartElement('w', 'styles', this.wNamespace);\n writer.writeAttributeString('xmlns', 'mc', undefined, this.veNamespace);\n writer.writeAttributeString('xmlns', 'r', undefined, this.rNamespace);\n writer.writeAttributeString('xmlns', 'w', undefined, this.wNamespace);\n writer.writeAttributeString('xmlns', 'w14', undefined, this.w14Namespace);\n writer.writeAttributeString('xmlns', 'w15', undefined, this.w15Namespace);\n writer.writeAttributeString('mc', 'Ignorable', undefined, 'w14 w15');\n //writes the document defaults, latent styles and default styles.\n this.serializeDefaultStyles(writer);\n //writes the document styles\n this.serializeDocumentStyles(writer);\n writer.writeEndElement(); //end of styles tag\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, this.stylePath);\n this.mArchive.addItem(zipArchiveItem); //this.stylePath, styleStream, false, FileAttributes.Archive);\n };\n // Serializes the default styles (document default paragraph and character format)\n WordExport.prototype.serializeDefaultStyles = function (writer) {\n writer.writeStartElement(undefined, 'docDefaults', this.wNamespace);\n //if (HasDefaultCharFormat())\n //{\n writer.writeStartElement(undefined, 'rPrDefault', this.wNamespace);\n // if (!isNullOrUndefined(this.mDocument.characterFormat)) {\n this.serializeCharacterFormat(writer, this.defCharacterFormat);\n writer.writeEndElement(); // end of rPrDefault\n // }\n // else {\n // writer.writeStartElement(undefined, 'rPr', this.wNamespace);\n // writer.writeStartElement(undefined, 'rFonts', this.wNamespace);\n // if (!string.IsNullOrEmpty(m_document.StandardAsciiFont))\n // writer.WriteAttributeString('ascii', this.wNamespace, m_document.StandardAsciiFont);\n // if (!string.IsNullOrEmpty(m_document.StandardFarEastFont))\n // writer.WriteAttributeString('eastAsia', this.wNamespace, m_document.StandardFarEastFont);\n // if (!string.IsNullOrEmpty(m_document.StandardNonFarEastFont))\n // writer.WriteAttributeString('hAnsi', this.wNamespace, m_document.StandardNonFarEastFont);\n // if (!string.IsNullOrEmpty(m_document.StandardBidiFont))\n // writer.WriteAttributeString('cs', this.wNamespace, m_document.StandardBidiFont);\n // writer.WriteEndElement();\n // float fontSize = GetDefFontSize(m_document, WCharacterFormat.FontSizeKey);\n // if (fontSize !== 0f)\n // {\n // writer.WriteStartElement('sz', this.wNamespace);\n // writer.WriteAttributeString('val', this.wNamespace, (fontSize * 2).ToString(CultureInfo.InvariantCulture));\n // writer.WriteEndElement();\n // }\n // fontSize = GetDefFontSize(m_document, WCharacterFormat.FontSizeBidiKey);\n // if (fontSize !== 0f)\n // {\n // writer.WriteStartElement('szCs', this.wNamespace);\n // writer.WriteAttributeString('val', this.wNamespace, (fontSize * 2).ToString(CultureInfo.InvariantCulture));\n // writer.WriteEndElement();\n // }\n // writer.WriteEndElement();\n // }\n // writer.WriteEndElement();\n // //}\n writer.writeStartElement(undefined, 'pPrDefault', this.wNamespace);\n if (!isNullOrUndefined(this.defParagraphFormat)) {\n writer.writeStartElement(undefined, 'pPr', this.wNamespace);\n this.serializeParagraphFormat(writer, this.defParagraphFormat, undefined);\n writer.writeEndElement(); //end of pPr\n }\n writer.writeEndElement(); //end of pPrDefault\n // writer.WriteEndElement();\n // SerializeLatentStyles();\n // //Default styles\n // if (m_document.Styles.length === 0 || isNullOrUndefined(m_document.Styles.FindByName('Normal')))\n // {\n // SerializeDefaultParagraphStyle();\n // }\n // if (!IsDocumentContainsDefaultTableStyle())\n // {\n // SerializeTableNormalStyle();\n // }\n // if (isNullOrUndefined(m_document.Styles.FindByName('No List')) && isNullOrUndefined(m_document.Styles.FindByName('NoList')))\n // SerializeNoListStyle();\n // tslint:disable-next-line:max-line-length\n // if (isNullOrUndefined(m_document.Styles.FindByName('Table Grid')) && isNullOrUndefined(m_document.Styles.FindByName('TableGrid')))\n // {\n // SerializeTableGridStyle();\n // }\n // } \n writer.writeEndElement();\n };\n WordExport.prototype.serializeDocumentStyles = function (writer) {\n for (var i = 0; i < this.mStyles.length; i++) {\n var style = this.mStyles[i];\n writer.writeStartElement(undefined, 'style', this.wNamespace);\n var type = style.type === 'Paragraph' ? 'paragraph' : 'character';\n writer.writeAttributeString('w', 'type', this.wNamespace, type);\n writer.writeAttributeString('w', 'styleId', this.wNamespace, style.name);\n //name\n writer.writeStartElement(undefined, 'name', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, style.name);\n writer.writeEndElement();\n //basedOn\n if (!isNullOrUndefined(style.basedOn)) {\n writer.writeStartElement(undefined, 'basedOn', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, style.basedOn);\n writer.writeEndElement();\n }\n //next\n if (!isNullOrUndefined(style.next)) {\n writer.writeStartElement(undefined, 'next', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, style.next);\n writer.writeEndElement();\n }\n //link\n if (!isNullOrUndefined(style.link)) {\n writer.writeStartElement(undefined, 'link', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, style.link);\n writer.writeEndElement();\n }\n if (style.type === 'Paragraph') {\n writer.writeStartElement(undefined, 'pPr', this.wNamespace);\n this.serializeParagraphFormat(writer, style.paragraphFormat, undefined);\n writer.writeEndElement();\n }\n // let value = (style.characterFormat as WCharacterFormat).newgetCharacterFormat();\n this.serializeCharacterFormat(writer, style.characterFormat);\n writer.writeEndElement(); //end of Style\n }\n };\n // Serializes the Character format\n WordExport.prototype.serializeCharacterFormat = function (writer, characterFormat) {\n writer.writeStartElement(undefined, 'rPr', this.wNamespace);\n if (!isNullOrUndefined(characterFormat.styleName)) {\n writer.writeStartElement(undefined, 'rStyle', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, characterFormat.styleName);\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(characterFormat.fontFamily)) {\n writer.writeStartElement(undefined, 'rFonts', this.wNamespace);\n writer.writeAttributeString(undefined, 'ascii', this.wNamespace, characterFormat.fontFamily);\n writer.writeAttributeString(undefined, 'hAnsi', this.wNamespace, characterFormat.fontFamily);\n writer.writeAttributeString(undefined, 'eastAsia', this.wNamespace, characterFormat.fontFamily);\n writer.writeAttributeString(undefined, 'cs', this.wNamespace, characterFormat.fontFamily);\n writer.writeEndElement(); //end \n }\n if (!isNullOrUndefined(characterFormat.bold)) {\n this.serializeBoolProperty(writer, 'b', characterFormat.bold);\n }\n if (!isNullOrUndefined(characterFormat.italic)) {\n this.serializeBoolProperty(writer, 'i', characterFormat.italic);\n }\n if (!isNullOrUndefined(characterFormat.strikethrough)) {\n switch (characterFormat.strikethrough) {\n case 'SingleStrike':\n this.serializeBoolProperty(writer, 'strike', true);\n break;\n case 'DoubleStrike':\n this.serializeBoolProperty(writer, 'dstrike', true);\n break;\n default:\n this.serializeBoolProperty(writer, 'strike', false);\n this.serializeBoolProperty(writer, 'dstrike', false);\n break;\n }\n }\n if (!isNullOrUndefined(characterFormat.fontColor)) {\n writer.writeStartElement(undefined, 'color', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, this.getColor(characterFormat.fontColor));\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(characterFormat.fontSize)) {\n writer.writeStartElement(undefined, 'sz', this.wNamespace);\n // tslint:disable-next-line:max-line-length\n writer.writeAttributeString('w', 'val', this.wNamespace, this.roundToTwoDecimal(characterFormat.fontSize * 2).toString());\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(characterFormat.highlightColor) && characterFormat.highlightColor !== 'NoColor') {\n writer.writeStartElement(undefined, 'highlight', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, this.getHighlightColor(characterFormat.highlightColor));\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(characterFormat.underline) && characterFormat.underline !== 'None') {\n writer.writeStartElement(undefined, 'u', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, this.getUnderlineStyle(characterFormat.underline));\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(characterFormat.baselineAlignment)) {\n writer.writeStartElement(undefined, 'vertAlign', this.wNamespace);\n switch (characterFormat.baselineAlignment) {\n case 'Subscript':\n writer.writeAttributeString('w', 'val', this.wNamespace, 'subscript');\n break;\n case 'Superscript':\n writer.writeAttributeString('w', 'val', this.wNamespace, 'superscript');\n break;\n default:\n writer.writeAttributeString('w', 'val', this.wNamespace, 'baseline');\n break;\n }\n writer.writeEndElement();\n }\n writer.writeEndElement(); //end of rPrChange\n };\n WordExport.prototype.getColor = function (color) {\n if (color.length > 0) {\n if (color[0] === '#') {\n color = color.substr(1);\n }\n if (color.length > 6) {\n color = color.substr(0, 6);\n }\n }\n return color;\n };\n // Get the underline style as string\n WordExport.prototype.getUnderlineStyle = function (underlineStyle) {\n switch (underlineStyle) {\n case 'DotDotDashHeavy':\n return 'dashDotDotHeavy';\n case 'DotDashHeavy':\n return 'dashDotHeavy';\n case 'DashHeavy':\n return 'dashedHeavy';\n case 'DashLong':\n return 'dashLong';\n case 'DashLongHeavy':\n return 'dashLongHeavy';\n case 'DotDash':\n return 'dotDash';\n case 'DotDotDash':\n return 'dotDotDash';\n case 'Dotted':\n return 'dotted';\n case 'DottedHeavy':\n return 'dottedHeavy';\n case 'Double':\n return 'double';\n case 'Single':\n return 'single';\n case 'Thick':\n return 'thick';\n case 'Wavy':\n return 'wave';\n case 'WavyDouble':\n return 'wavyDouble';\n case 'WavyHeavy':\n return 'wavyHeavy';\n case 'Words':\n return 'words';\n default:\n return 'dash';\n }\n };\n WordExport.prototype.getHighlightColor = function (highlight) {\n switch (highlight) {\n // Highlights the content with bright green (#ff00ff00) color.\n case 'BrightGreen':\n return 'green';\n // Highlights the content with turquoise (#ff00ffff) color.\n case 'Turquoise':\n return 'cyan';\n // Highlights the content with pink (#ffff00ff) color.\n case 'Pink':\n return 'magenta';\n // Highlights the content with blue (#ff0000ff) color.\n case 'Blue':\n return 'blue';\n // Highlights the content with red (#ffff0000) color.\n case 'Red':\n return 'red';\n // Highlights the content with dark blue (#ff000080) color.\n case 'DarkBlue':\n return 'darkBlue';\n // Highlights the content with teal (#ff008080) color.\n case 'Teal':\n return 'darkCyan';\n // Highlights the content with green (#ff008000) color.\n case 'Green':\n return 'darkGreen';\n // Highlights the content with violet (#ff800080) color.\n case 'Violet':\n return 'darkMagenta';\n // Highlights the content with dark red (#ff800000) color.\n case 'DarkRed':\n return 'darkRed';\n // Highlights the content with dark yellow (#ff808000) color.\n case 'DarkYellow':\n return 'darkYellow';\n // Highlights the content with gray 50 (#ff808080) color.\n case 'Gray50':\n return 'darkGray';\n // Highlights the content with gray 25 (#ffc0c0c0) color.\n case 'Gray25':\n return 'lightGray';\n // Highlights the content with black (#ff000000) color.\n case 'Black':\n return 'black';\n // Highlights the content with yellow (#ffffff00) color.\n default:\n return 'yellow';\n }\n };\n /*private toggleFirstCahar(text: string) {\n return text.charAt(0).toLowerCase() + text.slice(1);\n }*/\n // Serializes the bool character format property\n WordExport.prototype.serializeBoolProperty = function (writer, tag, value) {\n writer.writeStartElement(undefined, tag, this.wNamespace);\n if (!value) {\n writer.writeAttributeString(undefined, 'val', this.wNamespace, '0');\n }\n writer.writeEndElement();\n };\n // Serialize the list styles and numberings (numberings.xml)\n WordExport.prototype.serializeNumberings = function () {\n if (this.document.lists.length === 0) {\n return;\n }\n var writer = new XmlWriter();\n writer.writeStartElement('w', 'numbering', this.wNamespace);\n this.writeCommonAttributeStrings(writer);\n // this.serializePictureBullets(writer, this.mDocument.lists);\n this.serializeAbstractListStyles(writer, this.document.abstractLists);\n this.serializeListInstances(writer, this.document.lists);\n // SerializeListOverrides(writer, this.mDocument.ridesm_document.ListOverrides);\n writer.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, this.numberingPath);\n this.mArchive.addItem(zipArchiveItem);\n };\n // Serializes the abstract list styles\n WordExport.prototype.serializeAbstractListStyles = function (writer, listStyles) {\n for (var i = 0; i < listStyles.length; i++) {\n var abstractList = listStyles[i];\n writer.writeStartElement(undefined, 'abstractNum', this.wNamespace);\n writer.writeAttributeString(undefined, 'abstractNumId', this.wNamespace, abstractList.abstractListId.toString());\n writer.writeStartElement(undefined, 'nsid', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, this.generateHex());\n writer.writeEndElement();\n for (var ilvl = 0, cnt = abstractList.levels.length; ilvl < cnt; ilvl++) {\n this.serializeListLevel(writer, abstractList.levels[ilvl], ilvl);\n }\n writer.writeEndElement(); //end of abstractNum\n }\n };\n // Serializes the list styles\n WordExport.prototype.serializeListInstances = function (writer, listStyles) {\n for (var i = 0; i < listStyles.length; i++) {\n var list = listStyles[i];\n writer.writeStartElement(undefined, 'num', this.wNamespace);\n writer.writeAttributeString(undefined, 'numId', this.wNamespace, (list.listId + 1).toString());\n writer.writeStartElement(undefined, 'abstractNumId', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, list.abstractListId.toString());\n writer.writeEndElement();\n writer.writeEndElement();\n }\n };\n WordExport.prototype.generateHex = function () {\n return (Math.floor(Math.random() * (4000000000 - 270000000)) + 270000000).toString(16).toUpperCase();\n };\n WordExport.prototype.roundToTwoDecimal = function (num) {\n return Math.round(num); // * 100) / 100;\n };\n // Serialize the list level\n WordExport.prototype.serializeListLevel = function (writer, listLevel, levelIndex) {\n writer.writeStartElement(undefined, 'lvl', this.wNamespace);\n writer.writeAttributeString(undefined, 'ilvl', this.wNamespace, levelIndex.toString());\n writer.writeStartElement(undefined, 'start', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, listLevel.startAt.toString());\n writer.writeEndElement();\n writer.writeStartElement(undefined, 'numFmt', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, this.getLevelPattern(listLevel.listLevelPattern));\n writer.writeEndElement();\n if (listLevel.restartLevel > 0) {\n writer.writeStartElement(undefined, 'lvlRestart', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, '0');\n writer.writeEndElement();\n }\n // if (!isNullOrUndefined(listLevel.paragraphFormat)) {\n // string name = listLevel.ParaStyleName.Substring(0, 1).ToUpper() + listLevel.ParaStyleName.Remove(0, 1);\n // writer.WriteStartElement('pStyle', this.wNamespace);\n // writer.WriteAttributeString('val', this.wNamespace, name);\n // writer.WriteEndElement();\n // }\n // if (listLevel.IsLegalStyleNumbering) {\n // writer.WriteStartElement('isLgl', this.wNamespace);\n // writer.WriteEndElement();\n // }\n this.serializeLevelFollow(writer, listLevel);\n this.serializeLevelText(writer, listLevel, levelIndex + 1);\n // SerializeLegacyProperties(listLevel);\n // if (listLevel.PicBulletId > 0) {\n // writer.WriteStartElement('lvlPicBulletId', this.wNamespace);\n // writer.WriteAttributeString('val', this.wNamespace, listLevel.PicBulletId.ToString());\n // writer.WriteEndElement();\n // }\n // //lvlJc\n // if (listLevel.NumberAlignment !== ListNumberAlignment.Left) {\n // writer.WriteStartElement('lvlJc', this.wNamespace);\n // string alignment = string.Empty;\n // if (listLevel.NumberAlignment === ListNumberAlignment.Right) {\n // alignment = 'right';\n // }\n // else {\n // alignment = 'center';\n // }\n // writer.WriteAttributeString('val', this.wNamespace, alignment);\n // writer.WriteEndElement();\n // }\n writer.writeStartElement(undefined, 'pPr', this.wNamespace);\n this.serializeParagraphFormat(writer, listLevel.paragraphFormat, undefined);\n writer.writeEndElement(); //end of pPr\n this.serializeCharacterFormat(writer, listLevel.characterFormat);\n writer.writeEndElement();\n };\n WordExport.prototype.getLevelPattern = function (levelPattern) {\n var patternType;\n switch (levelPattern) {\n case 'Arabic':\n patternType = 'decimal';\n break;\n case 'UpRoman':\n patternType = 'upperRoman';\n break;\n case 'LowRoman':\n patternType = 'lowerRoman';\n break;\n case 'UpLetter':\n patternType = 'upperLetter';\n break;\n case 'LowLetter':\n patternType = 'lowerLetter';\n break;\n // case 'Ordinal':\n // patternType = 'ordinal';\n // break;\n // case 'Number':\n // patternType = 'cardinalText';\n // break;\n // case 'OrdinalText':\n // patternType = 'ordinalText';\n // break;\n // case 'LeadingZero':\n // patternType = 'decimalZero';\n // break;\n // case 'Bullet':\n default:\n patternType = 'bullet';\n break;\n }\n return patternType;\n };\n // Serializes the level text\n WordExport.prototype.serializeLevelText = function (writer, listLevel, lvlIndex) {\n writer.writeStartElement(undefined, 'lvlText', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, (listLevel.numberFormat));\n writer.writeEndElement();\n };\n // Serialize the level follow character\n WordExport.prototype.serializeLevelFollow = function (writer, listLevel) {\n var fc;\n //TODO:Type issue returns number instead of string\n if (listLevel.followCharacter === 'Tab') {\n fc = 'tab';\n }\n else if (listLevel.followCharacter === 'Space') {\n fc = 'space';\n }\n else {\n fc = 'nothing';\n }\n writer.writeStartElement(undefined, 'suff', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, fc);\n writer.writeEndElement();\n };\n WordExport.prototype.serializeSettings = function () {\n var writer = new XmlWriter();\n writer.writeStartElement('w', 'settings', this.wNamespace);\n this.writeCustom(writer);\n // writer.writeAttributeString('xmlns', 'mc', undefined, this.veNamespace);\n // writer.writeAttributeString('xmlns', 'o', undefined, this.oNamespace);\n // writer.writeAttributeString('xmlns', 'r', undefined, this.rNamespace);\n // writer.writeAttributeString('xmlns', 'm', undefined, this.mNamespace);\n // writer.writeAttributeString('xmlns', 'v', undefined, this.vNamespace);\n writer.writeAttributeString('xmlns', 'w10', undefined, this.w10Namespace);\n writer.writeAttributeString('xmlns', 'w14', undefined, this.w14Namespace);\n writer.writeAttributeString('xmlns', 'w15', undefined, this.w15Namespace);\n writer.writeAttributeString('xmlns', 'sl', undefined, this.slNamespace);\n writer.writeAttributeString('mc', 'Ignorable', undefined, 'w14 w15');\n // //w:writeProtection - Write Protection\n // if (m_document.WriteProtected)\n // {\n // writer.writeStartElement('w', 'writeProtection', this.wNamespace);\n // writer.writeAttributeString('recommended', this.wNamespace, '1');\n // writer.writeEndElement();\n // }\n //w:view - Document View Setting\n // if (this.mDocument.ViewSetup.DocumentViewType !== DocumentViewType.PrintLayout &&\n // m_document.ViewSetup.DocumentViewType !== DocumentViewType.NormalLayout)\n // {\n // writer.writeStartElement('view', this.wNamespace);\n // string viewTypeStr = string.Empty;\n // if (m_document.ViewSetup.DocumentViewType === DocumentViewType.OutlineLayout)\n // {\n // viewTypeStr = 'outline';\n // }\n // else if (m_document.ViewSetup.DocumentViewType === DocumentViewType.WebLayout)\n // {\n // viewTypeStr = 'web';\n // }\n // writer.writeAttributeString('val', this.wNamespace, viewTypeStr);\n // writer.writeEndElement();\n // }\n //w:zoom - Magnification Setting\n writer.writeStartElement('w', 'zoom', this.wNamespace);\n // switch (m_document.ViewSetup.ZoomType)\n // {\n // case ZoomType.FullPage:\n // writer.writeAttributeString('w', 'val', this.wNamespace, 'fullPage');\n // break;\n // case ZoomType.PageWidth:\n // writer.writeAttributeString('w', 'val', this.wNamespace, 'bestFit');\n // break;\n // case ZoomType.TextFit:\n // writer.writeAttributeString('w', 'val', this.wNamespace, 'textFit');\n // break;\n // default:\n writer.writeAttributeString('w', 'val', this.wNamespace, 'none');\n // break;\n // }\n writer.writeAttributeString('w', 'percent', this.wNamespace, '100');\n writer.writeEndElement();\n //w:displayBackgroundShape - Display Background Objects When Displaying Document\n // if (m_document.Background.Type !== BackgroundType.NoBackground)\n // {\n writer.writeStartElement(undefined, 'displayBackgroundShape', this.wNamespace);\n writer.writeEndElement();\n // }\n //w:defaultTabStop - Distance Between Automatic Tab Stops\n writer.writeStartElement(undefined, 'defaultTabStop', this.wNamespace);\n var tabWidth = Math.round(this.defaultTabWidthValue * this.twipsInOnePoint);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, tabWidth.toString());\n writer.writeEndElement();\n //w:evenAndOddHeaders - Different Even/Odd Page Headers and Footers \n if (this.mDifferentFirstPage) {\n writer.writeStartElement(undefined, 'evenAndOddHeaders', this.wNamespace);\n writer.writeEndElement();\n }\n //w:footnotePr - Document-Wide Footnote Properties and w:endnotePr - Document-Wide Endnote Properties\n // SerializeFootnoteSettings();\n //w:compat - Compatibility Settings\n writer.writeStartElement(undefined, 'compat', this.wNamespace);\n writer.writeStartElement(undefined, 'compatSetting', this.wNamespace);\n writer.writeAttributeString(undefined, 'name', this.wNamespace, 'compatibilityMode');\n writer.writeAttributeString(undefined, 'uri', this.wNamespace, 'http://schemas.microsoft.com/office/word');\n writer.writeAttributeString(undefined, 'val', this.wNamespace, '15');\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, this.settingsPath);\n this.mArchive.addItem(zipArchiveItem);\n };\n WordExport.prototype.serializeCoreProperties = function () {\n //implementation\n };\n WordExport.prototype.serializeAppProperties = function () {\n //implementation\n };\n WordExport.prototype.serializeFontTable = function (contentType) {\n //implementation\n };\n WordExport.prototype.serializeSettingsRelation = function () {\n //implementation\n };\n WordExport.prototype.serializeHeaderFooters = function () {\n this.serializeHeaderFooter('EvenFooter');\n this.serializeHeaderFooter('EvenHeader');\n this.serializeHeaderFooter('FirstPageFooter');\n this.serializeHeaderFooter('FirstPageHeader');\n this.serializeHeaderFooter('OddFooter');\n this.serializeHeaderFooter('OddHeader');\n };\n // Serializes the Header/Footer\n WordExport.prototype.serializeHeaderFooter = function (hfType) {\n if (this.headersFooters.length === 0) {\n return;\n }\n var headerFooterPath;\n var headerFooterRelsPath;\n if (!this.headersFooters.containsKey(hfType)) {\n return;\n }\n var hfColl = this.headersFooters.get(hfType);\n var hf = undefined;\n for (var i = 0; i < hfColl.keys.length; i++) {\n var id = hfColl.keys[i];\n hf = hfColl.get(id);\n if (hfType === 'EvenHeader' || hfType === 'FirstPageHeader' ||\n hfType === 'OddHeader') {\n headerFooterPath = this.headerPath + id.replace('rId', '') + '.xml';\n headerFooterRelsPath = this.headerRelationPath + id.replace('rId', '') + '.xml.rels';\n this.serializeHeader(hf, id, headerFooterPath, headerFooterRelsPath);\n }\n else {\n headerFooterPath = this.footerPath + id.replace('rId', '') + '.xml';\n headerFooterRelsPath = this.footerRelationPath + id.replace('rId', '') + '.xml.rels';\n this.serializeFooter(hf, id, headerFooterPath, headerFooterRelsPath);\n }\n }\n };\n // Serialize the header part\n WordExport.prototype.serializeHeader = function (header, id, headerFooterPath, headerFooterRelsPath) {\n this.headerFooter = header;\n var writer = new XmlWriter();\n writer.writeStartElement('w', 'hdr', this.wNamespace);\n this.writeHFCommonAttributes(writer);\n var owner = this.blockOwner;\n this.blockOwner = header;\n this.serializeBodyItems(writer, header.blocks, true);\n this.blockOwner = owner;\n writer.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, headerFooterPath);\n this.mArchive.addItem(zipArchiveItem);\n this.serializeHFRelations(id, headerFooterRelsPath);\n this.headerFooter = undefined;\n };\n // Serializes the HeaderFooter relations\n WordExport.prototype.serializeHFRelations = function (hfId, headerFooterRelsPath) {\n var hasHFImage = this.headerFooterImages.containsKey(hfId);\n // let hasHFHyperlinks = HeaderFooterHyperlinks.ContainsKey(hfId);\n // let hasHFInclPics = HeaderFooterInclPicUrls.ContainsKey(hfId);\n // let hasHFAlternateChunks = HeaderFooterAlternateChunks.ContainsKey(hfId);\n if (hasHFImage) {\n var writer = new XmlWriter();\n writer.writeStartElement(undefined, 'Relationships', this.rpNamespace);\n this.serializeImagesRelations(this.headerFooterImages.get(hfId), writer);\n // if (hasHFHyperlinks)\n // SerializeHyperlinkRelations(stream, HeaderFooterHyperlinks[hfId]);\n // if (hasHFAlternateChunks)\n // SerializeAltChunkRelations(stream, HeaderFooterAlternateChunks[hfId]);\n // if (hasHFInclPics)\n // SerializeIncludePictureUrlRelations(stream, HeaderFooterInclPicUrls[hfId]);\n // if (HFOleContainers.ContainsKey(hfId))\n // {\n // AddOLEToZip(HFOleContainers[hfId]);\n // }\n // if (HFRelations.ContainsKey(hfId))\n // SerializeHFCommonRelations(stream, HFRelations[hfId]);\n writer.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, headerFooterRelsPath);\n this.mArchive.addItem(zipArchiveItem);\n }\n else {\n return;\n }\n };\n WordExport.prototype.writeHFCommonAttributes = function (writer) {\n writer.writeAttributeString('xmlns', 'v', undefined, this.vNamespace);\n writer.writeAttributeString('xmlns', 'w10', undefined, this.w10Namespace);\n writer.writeAttributeString('xmlns', 'o', undefined, this.oNamespace);\n writer.writeAttributeString('xmlns', 've', undefined, this.veNamespace);\n writer.writeAttributeString('xmlns', 'r', undefined, this.rNamespace);\n writer.writeAttributeString('xmlns', 'm', undefined, this.mNamespace);\n writer.writeAttributeString('xmlns', 'wne', undefined, this.wneNamespace);\n writer.writeAttributeString('xmlns', 'a', undefined, this.aNamespace);\n writer.writeAttributeString('xmlns', 'pic', undefined, this.pictureNamespace);\n writer.writeAttributeString('xmlns', 'wp', undefined, this.wpNamespace);\n writer.writeAttributeString('xmlns', 'wpc', undefined, this.wpCanvasNamespace);\n writer.writeAttributeString('xmlns', 'wp14', undefined, this.wpDrawingNamespace);\n this.writeDup(writer);\n writer.writeAttributeString('xmlns', 'wps', undefined, this.wpShapeNamespace);\n writer.writeAttributeString('ve', 'Ignorable', undefined, 'w14 w15 wp14');\n };\n // Serailize the footer and its relations\n WordExport.prototype.serializeFooter = function (footer, id, headerFooterPath, headerFooterRelsPath) {\n this.headerFooter = footer;\n var writer = new XmlWriter();\n writer.writeStartElement('w', 'ftr', this.wNamespace);\n this.writeHFCommonAttributes(writer);\n this.serializeBodyItems(writer, footer.blocks, true);\n writer.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, headerFooterPath);\n this.mArchive.addItem(zipArchiveItem);\n this.serializeHFRelations(id, headerFooterRelsPath);\n };\n WordExport.prototype.serializeDocumentRelations = function () {\n var writer = new XmlWriter();\n writer.writeStartElement(undefined, 'Relationships', this.rpNamespace);\n this.serializeRelationShip(writer, this.getNextRelationShipID(), this.stylesRelType, 'styles.xml');\n this.serializeRelationShip(writer, this.getNextRelationShipID(), this.settingsRelType, 'settings.xml');\n // this.serializeRelationShip(writer, this.getNextRelationShipID(), this.ThemeRelType, 'theme/theme1.xml');\n if (this.document.lists.length > 0) {\n this.serializeRelationShip(writer, this.getNextRelationShipID(), this.numberingRelType, 'numbering.xml');\n }\n this.serializeHeaderFooterRelations(writer);\n // if (HasFontTable) {\n // SerializeRelationShip(docRelstream, GetNextRelationShipID(), this.FontTableRelType, 'fontTable.xml');\n // }\n // SerializeIncludePictureUrlRelations(docRelstream, InclPicFieldUrl);\n // //// Creating relationships for every hyperlink and image containing in the document\n this.serializeImagesRelations(this.documentImages, writer);\n // SerializeSvgImageRelation();\n //this.serializeExternalLinkImages(writer);\n // if (HasHyperlink && HyperlinkTargets.length > 0) {\n // SerializeHyperlinkRelations(docRelstream, HyperlinkTargets);\n // }\n // if (m_document.HasMacros\n // && IsMacroEnabled)\n // SerializeRelationShip(docRelstream, GetNextRelationShipID(), this.VbaProjectRelType, this.VbaProject);\n writer.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, this.wordRelationPath);\n this.mArchive.addItem(zipArchiveItem);\n this.headerFooter = undefined;\n };\n // Serializes the image relations\n WordExport.prototype.serializeImagesRelations = function (images, writer) {\n if (images.length > 0) {\n var imagePath = '';\n var base64ImageString = void 0;\n var keys = images.keys;\n for (var i = 0; i < keys.length; i++) {\n var mImage = images.get(keys[i]);\n base64ImageString = mImage.imageString;\n if (isNullOrUndefined(base64ImageString)) {\n imagePath = this.imagePath + '/0.jpeg';\n this.serializeRelationShip(writer, keys[i], this.imageRelType, imagePath.replace('word/', ''));\n }\n else {\n var extension = '';\n var formatClippedString = '';\n if (this.startsWith(base64ImageString, 'data:image/bmp;base64,')) {\n extension = '.bmp';\n formatClippedString = base64ImageString.replace('data:image/bmp;base64,', '');\n }\n else if (this.startsWith(base64ImageString, 'data:image/x-emf;base64,')) {\n extension = '.emf';\n formatClippedString = base64ImageString.replace('data:image/x-emf;base64,', '');\n }\n else if (this.startsWith(base64ImageString, 'data:image/exif;base64,')) {\n extension = '.exif';\n formatClippedString = base64ImageString.replace('data:image/exif;base64,', '');\n }\n else if (this.startsWith(base64ImageString, 'data:image/gif;base64,')) {\n extension = '.gif';\n formatClippedString = base64ImageString.replace('data:image/gif;base64,', '');\n }\n else if (this.startsWith(base64ImageString, 'data:image/icon;base64,')) {\n extension = '.ico';\n formatClippedString = base64ImageString.replace('data:image/icon;base64,', '');\n }\n else if (this.startsWith(base64ImageString, 'data:image/jpeg;base64,')) {\n extension = '.jpeg';\n formatClippedString = base64ImageString.replace('data:image/jpeg;base64,', '');\n }\n else if (this.startsWith(base64ImageString, 'data:image/jpg;base64,')) {\n extension = '.jpg';\n formatClippedString = base64ImageString.replace('data:image/jpg;base64,', '');\n }\n else if (this.startsWith(base64ImageString, 'data:image/png;base64,')) {\n extension = '.png';\n formatClippedString = base64ImageString.replace('data:image/png;base64,', '');\n }\n else if (this.startsWith(base64ImageString, 'data:image/tiff;base64,')) {\n extension = '.tif';\n formatClippedString = base64ImageString.replace('data:image/tiff;base64,', '');\n }\n else if (this.startsWith(base64ImageString, 'data:image/x-wmf;base64,')) {\n extension = '.wmf';\n formatClippedString = base64ImageString.replace('data:image/x-wmf;base64,', '');\n }\n else {\n extension = '.jpeg';\n }\n imagePath = this.imagePath + keys[i] + extension;\n this.serializeRelationShip(writer, keys[i], this.imageRelType, imagePath.replace('word/', ''));\n //if (m_archive.Find(imagePath.Replace('\\\\', '/')) === -1)\n // {\n var imageBlob = new Blob([this.encodedString(formatClippedString)]);\n var zipArchiveItem = new ZipArchiveItem(imageBlob, imagePath);\n // let TestArchive = new ZipArchive();\n this.mArchive.addItem(zipArchiveItem);\n // TestArchive.save('image.zip').then(function (): void {\n // TestArchive.destroy();\n // });\n // }\n }\n }\n }\n };\n /**\n * @private\n */\n WordExport.prototype.encodedString = function (input) {\n var keyStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n var chr1;\n var chr2;\n var chr3;\n var enc1;\n var enc2;\n var enc3;\n var enc4;\n var i = 0;\n var resultIndex = 0;\n /*let dataUrlPrefix: string = 'data:';*/\n input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, '');\n var totalLength = input.length * 3 / 4;\n if (input.charAt(input.length - 1) === keyStr.charAt(64)) {\n totalLength--;\n }\n if (input.charAt(input.length - 2) === keyStr.charAt(64)) {\n totalLength--;\n }\n if (totalLength % 1 !== 0) {\n // totalLength is not an integer, the length does not match a valid\n // base64 content. That can happen if:\n // - the input is not a base64 content\n // - the input is *almost* a base64 content, with a extra chars at the\n // beginning or at the end\n // - the input uses a base64 variant (base64url for example)\n throw new Error('Invalid base64 input, bad content length.');\n }\n var output = new Uint8Array(totalLength | 0);\n while (i < input.length) {\n enc1 = keyStr.indexOf(input.charAt(i++));\n enc2 = keyStr.indexOf(input.charAt(i++));\n enc3 = keyStr.indexOf(input.charAt(i++));\n enc4 = keyStr.indexOf(input.charAt(i++));\n chr1 = (enc1 << 2) | (enc2 >> 4);\n chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\n chr3 = ((enc3 & 3) << 6) | enc4;\n output[resultIndex++] = chr1;\n if (enc3 !== 64) {\n output[resultIndex++] = chr2;\n }\n if (enc4 !== 64) {\n output[resultIndex++] = chr3;\n }\n }\n return output;\n };\n WordExport.prototype.serializeExternalLinkImages = function (writer) {\n var imagePath = '';\n var keys = this.externalImages.keys;\n for (var i = 0; i < this.externalImages.keys.length; i++) {\n this.serializeRelationShip(writer, keys[i], this.imageRelType, this.externalImages.get(keys[i]));\n }\n };\n // Serializes the HeaderFooters relations to the document relations stream\n WordExport.prototype.serializeHeaderFooterRelations = function (writer) {\n this.serializeHFRelation(writer, 'EvenFooter');\n this.serializeHFRelation(writer, 'EvenHeader');\n this.serializeHFRelation(writer, 'FirstPageFooter');\n this.serializeHFRelation(writer, 'FirstPageHeader');\n this.serializeHFRelation(writer, 'OddFooter');\n this.serializeHFRelation(writer, 'OddHeader');\n };\n // Serializes the headers footers relations.\n WordExport.prototype.serializeHFRelation = function (writer, hfType) {\n var headerFooterPath = '';\n var relType;\n if (!this.headersFooters.containsKey(hfType)) {\n return;\n }\n var hfColl = this.headersFooters.get(hfType);\n for (var i = 0; i < hfColl.keys.length; i++) {\n var id = hfColl.keys[i];\n if (hfType === 'EvenHeader' || hfType === 'FirstPageHeader' ||\n hfType === 'OddHeader') {\n headerFooterPath = 'header' + id.replace('rId', '') + '.xml';\n relType = this.headerRelType;\n }\n else {\n headerFooterPath = 'footer' + id.replace('rId', '') + '.xml';\n relType = this.footerRelType;\n }\n this.serializeRelationShip(writer, id, relType, headerFooterPath);\n }\n };\n // Serializes the relationship\n WordExport.prototype.serializeRelationShip = function (writer, relationshipID, relationshipType, targetPath) {\n writer.writeStartElement(undefined, 'Relationship', undefined);\n writer.writeAttributeString(undefined, 'Id', undefined, relationshipID);\n writer.writeAttributeString(undefined, 'Type', undefined, relationshipType);\n writer.writeAttributeString(undefined, 'Target', undefined, targetPath.replace('\\\\', '/').replace('\\v', ''));\n // tslint:disable-next-line:max-line-length\n if (relationshipType === this.hyperlinkRelType || this.startsWith(targetPath, 'http://') || this.startsWith(targetPath, 'https://') || this.startsWith(targetPath, 'file:///')) {\n // Uri targetUri;\n // if ((!targetPath.StartsWith('file:///')) && Uri.TryCreate(targetPath, UriKind.Absolute, out targetUri))\n // {\n // //Handled using Try catch to avoid exception if the Host name type is None because in \n //Silverlight 'HostNameType' property is not available.\n // try\n // {\n // m_writer.WriteAttributeString('Target', targetUri.AbsoluteUri);\n // }\n // catch\n // {\n // m_writer.WriteAttributeString('Target', targetPath.Replace('\\\\', '/').Replace(ControlChar.LineBreak, string.Empty));\n // }\n // }\n // else\n // {\n // m_writer.WriteAttributeString('Target', targetPath.Replace('\\\\', '/').Replace(ControlChar.LineBreak, string.Empty));\n // }\n writer.writeAttributeString(undefined, 'TargetMode', undefined, 'External');\n }\n writer.writeEndElement();\n };\n // Get the next relationship ID\n WordExport.prototype.getNextRelationShipID = function () {\n return 'rId' + (++this.mRelationShipID);\n };\n WordExport.prototype.serializeGeneralRelations = function () {\n var writer = new XmlWriter();\n this.resetRelationShipID();\n writer.writeStartElement(undefined, 'Relationships', this.rpNamespace);\n this.serializeRelationShip(writer, this.getNextRelationShipID(), this.documentRelType, this.documentPath);\n // this.serializeRelationShip(writer, this.getNextRelationShipID(), this.AppRelType, this.appPath);\n // this.serializeRelationShip(writer, this.getNextRelationShipID(), this.CoreRelType, this.corePath);\n //End of Relationships tag\n writer.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, this.generalRelationPath);\n this.mArchive.addItem(zipArchiveItem);\n };\n WordExport.prototype.serializeContentTypes = function (contentType) {\n var writer = new XmlWriter();\n writer.writeStartElement(undefined, 'Types', 'http://schemas.openxmlformats.org/package/2006/content-types');\n //if (m_hasOleObject)\n //{\n // //\n // SerializeDefaultContentType(contentStream, 'bin', 'application/vnd.openxmlformats-officedocument.oleObject');\n //}\n this.serializeDefaultContentType(writer, 'rels', this.relationContentType);\n this.serializeDefaultContentType(writer, 'xml', this.xmlContentType);\n // if (m_hasEmbedFonts && !string.IsNullOrEmpty(type))\n // {\n // SerializeDefaultContentType(contentStream,type, this.fontContentType);\n // }\n if (this.documentImages.length > 0 || this.externalImages.length > 0 || this.headerFooterImages.length > 0) {\n this.serializeDefaultContentType(writer, 'png', 'image/png');\n this.serializeDefaultContentType(writer, 'bmp', 'image/bmp');\n this.serializeDefaultContentType(writer, 'emf', 'image/x-emf');\n this.serializeDefaultContentType(writer, 'wmf', 'image/x-wmf');\n this.serializeDefaultContentType(writer, 'gif', 'image/gif');\n this.serializeDefaultContentType(writer, 'ico', 'image/x-icon');\n this.serializeDefaultContentType(writer, 'tif', 'image/tiff');\n this.serializeDefaultContentType(writer, 'tiff', 'image/tiff');\n this.serializeDefaultContentType(writer, 'jpeg', 'image/jpeg');\n this.serializeDefaultContentType(writer, 'jpg', 'image/jpeg');\n this.serializeDefaultContentType(writer, 'svg', 'image/svg+xml');\n }\n // if (m_document.HasMacros\n // && IsMacroEnabled && !m_isSkipBinExtension)\n // {\n // SerializeDefaultContentType(contentStream, 'bin', this.VbaProjectContentType);\n // m_isSkipBinExtension = true;\n // }\n // if (m_hasOleObject)\n // {\n // SerializeOleContentType(contentStream);\n // }\n //document.xml\n this.serializeOverrideContentType(writer, this.documentPath, this.documentContentType);\n // tslint:disable-next-line:max-line-length\n //\n // if (HasNumbering) {\n this.serializeOverrideContentType(writer, this.numberingPath, this.numberingContentType);\n // }\n //Add the header/footer Alternate chunks\n // if (HeaderFooterAlternateChunks.length > 0) {\n // foreach(Dictionary < string, string > item in m_headerFooterAlternateChunks.Values)\n // AddAlternateChunkItem(item);\n // }\n //styles.xml\n this.serializeOverrideContentType(writer, this.stylePath, this.stylesContentType);\n //settings.xml\n this.serializeOverrideContentType(writer, this.settingsPath, this.settingsContentType);\n // //core.xml\n // SerializeOverrideContentType(contentStream, this.corePath, this.CoreContentType);\n // //app.xml\n // SerializeOverrideContentType(contentStream, this.appPath, this.AppContentType);\n // //custom.xml\n // if (!isNullOrUndefined(m_document.CustomDocumentProperties) && m_document.CustomDocumentProperties.length > 0)\n // SerializeOverrideContentType(contentStream, this.CustomPath, this.CustomContentType);\n // #if Chart\n // if (m_hasChart)\n // SerializeChartContentType(contentStream);\n // #endif\n this.serializeHFContentTypes(writer);\n // WriteXmlItemsContentTypes(contentStream);\n //End of Types tag\n writer.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, this.contentTypesPath);\n this.mArchive.addItem(zipArchiveItem);\n };\n // Serializes the HeaderFooter content types\n WordExport.prototype.serializeHFContentTypes = function (writer) {\n this.serializeHeaderFootersContentType(writer, 'EvenFooter');\n this.serializeHeaderFootersContentType(writer, 'EvenHeader');\n this.serializeHeaderFootersContentType(writer, 'FirstPageFooter');\n this.serializeHeaderFootersContentType(writer, 'FirstPageHeader');\n this.serializeHeaderFootersContentType(writer, 'OddFooter');\n this.serializeHeaderFootersContentType(writer, 'OddHeader');\n };\n // Serializes the HeaderFooter content types.\n WordExport.prototype.serializeHeaderFootersContentType = function (writer, headerFooterType) {\n var contentType;\n var partName;\n if (!this.headersFooters.containsKey(headerFooterType)) {\n return;\n }\n var hfColl = this.headersFooters.get(headerFooterType);\n for (var i = 0; i < hfColl.keys.length; i++) {\n var id = hfColl.keys[i];\n if (headerFooterType === 'EvenHeader' || headerFooterType === 'FirstPageHeader' ||\n headerFooterType === 'OddHeader') {\n partName = this.headerPath + id.replace('rId', '') + '.xml';\n contentType = this.headerContentType;\n }\n else {\n partName = this.footerPath + id.replace('rId', '') + '.xml';\n contentType = this.footerContentType;\n }\n this.serializeOverrideContentType(writer, partName, contentType);\n }\n };\n // Serializes the Override content type.\n WordExport.prototype.serializeOverrideContentType = function (writer, partName, contentType) {\n writer.writeStartElement(undefined, 'Override', undefined);\n writer.writeAttributeString(undefined, 'PartName', undefined, '/' + partName.replace('\\\\', '/'));\n writer.writeAttributeString(undefined, 'ContentType', undefined, contentType);\n writer.writeEndElement();\n };\n // Serializes the default content type\n WordExport.prototype.serializeDefaultContentType = function (writer, extension, contentType) {\n writer.writeStartElement(undefined, 'Default', undefined);\n writer.writeAttributeString(undefined, 'Extension', undefined, extension);\n writer.writeAttributeString(undefined, 'ContentType', undefined, contentType);\n writer.writeEndElement();\n };\n // Reset the relationship id counter\n WordExport.prototype.resetRelationShipID = function () {\n this.mRelationShipID = 0;\n };\n WordExport.prototype.close = function () {\n //Implement\n };\n return WordExport;\n}());\nexport { WordExport };\n","import { StreamWriter } from '@syncfusion/ej2-file-utils';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * Exports the document to Text format.\n */\nvar TextExport = /** @class */ (function () {\n function TextExport() {\n this.text = '';\n this.curSectionIndex = 0;\n this.inField = false;\n }\n TextExport.prototype.getModuleName = function () {\n return 'TextExport';\n };\n /**\n * @private\n */\n TextExport.prototype.save = function (viewer, fileName) {\n this.serialize(viewer);\n var writer = new StreamWriter();\n this.writeInternal(writer);\n writer.save(fileName + '.txt');\n };\n /**\n * @private\n */\n TextExport.prototype.saveAsBlob = function (viewer) {\n this.serialize(viewer);\n var streamWriter = new StreamWriter();\n this.writeInternal(streamWriter);\n var blob = streamWriter.buffer;\n streamWriter.destroy();\n var promise;\n return new Promise(function (resolve, reject) {\n resolve(blob);\n });\n };\n TextExport.prototype.serialize = function (viewer) {\n var document = viewer.owner.sfdtExportModule.write();\n this.setDocument(document);\n };\n TextExport.prototype.setDocument = function (document) {\n this.document = document;\n this.mSections = document.sections;\n };\n TextExport.prototype.writeInternal = function (streamWriter) {\n var section = undefined;\n var sectionCount = this.document.sections.length - 1;\n var isLastSection = false;\n this.updateLastParagraph();\n for (var i = 0; i <= sectionCount; i++) {\n section = this.document.sections[i];\n isLastSection = (i === sectionCount) ? true : false;\n this.writeBody(streamWriter, section.blocks);\n this.writeNewLine(streamWriter);\n this.writeSectionEnd(section, isLastSection);\n }\n for (var j = 0; j <= sectionCount; j++) {\n section = this.document.sections[j];\n this.writeHeadersFooters(streamWriter, section);\n }\n };\n /// \n /// Writes the specified document content to the text file.\n /// \n TextExport.prototype.writeBody = function (streamWriter, body) {\n var bodyItemsCount = body.length - 1;\n var bodyItem = undefined;\n for (var i = 0; i <= bodyItemsCount; i++) {\n bodyItem = body[i];\n if (bodyItem.hasOwnProperty('inlines')) {\n var isLastPara = (bodyItem === this.lastPara) ? true : false;\n this.writeParagraph(streamWriter, bodyItem, isLastPara);\n }\n else {\n this.writeTable(streamWriter, bodyItem);\n }\n }\n };\n TextExport.prototype.writeParagraph = function (streamWriter, paragraph, isLastPara) {\n for (var i = 0; i < paragraph.inlines.length; i++) {\n var item = paragraph.inlines[i];\n if (item.hasOwnProperty('fieldType')) {\n this.inField = item.fieldType === 0;\n }\n else if (item.hasOwnProperty('text') && !this.inField) {\n this.writeText(streamWriter, item.text);\n }\n }\n if (!isLastPara) {\n this.writeNewLine(streamWriter);\n }\n };\n /// }\n /// \n /// Writes the specified table text content to the text file.\n /// \n TextExport.prototype.writeTable = function (streamWriter, table) {\n for (var i = 0; i < table.rows.length; i++) {\n var row = table.rows[i];\n for (var j = 0; j < row.cells.length; j++) {\n var cell = row.cells[j];\n this.writeBody(streamWriter, cell.blocks);\n }\n }\n };\n /// \n /// Writes the specified Header Footer text content to the text file.\n /// \n TextExport.prototype.writeHeadersFooters = function (streamWriter, section) {\n var headersFooters = section.headersFooters;\n if (isNullOrUndefined(headersFooters)) {\n return;\n }\n if (!isNullOrUndefined(section.headersFooters.header)) {\n this.writeBody(streamWriter, section.headersFooters.header.blocks);\n }\n if (section.headersFooters.footer) {\n this.writeBody(streamWriter, section.headersFooters.footer.blocks);\n }\n if (section.headersFooters.evenFooter) {\n this.writeBody(streamWriter, section.headersFooters.evenFooter.blocks);\n }\n if (section.headersFooters.evenHeader) {\n this.writeBody(streamWriter, section.headersFooters.evenHeader.blocks);\n }\n if (section.headersFooters.firstPageHeader) {\n this.writeBody(streamWriter, section.headersFooters.firstPageHeader.blocks);\n }\n if (section.headersFooters.firstPageFooter) {\n this.writeBody(streamWriter, section.headersFooters.firstPageFooter.blocks);\n }\n };\n /// \n /// Writes the end of the section.\n /// \n TextExport.prototype.writeSectionEnd = function (section, lastSection) {\n this.curSectionIndex++;\n };\n TextExport.prototype.writeNewLine = function (writer) {\n writer.writeLine('');\n };\n TextExport.prototype.writeText = function (writer, text) {\n writer.write(text);\n };\n TextExport.prototype.updateLastParagraph = function () {\n var cnt = this.document.sections.length;\n var sec;\n if (cnt > 0) {\n sec = this.document.sections[cnt - 1];\n }\n if (!isNullOrUndefined(sec)) {\n var paragraphs = [];\n for (var i = 0; i < sec.blocks.length; i++) {\n if (sec.blocks[i].hasOwnProperty('inlines')) {\n paragraphs.push(sec.blocks[i]);\n }\n }\n var pCount = paragraphs.length;\n if (pCount > 0) {\n this.lastPara = paragraphs[pCount - 1];\n }\n }\n };\n /**\n * @private\n */\n TextExport.prototype.destroy = function () {\n this.document = undefined;\n this.lastPara = undefined;\n this.mSections = undefined;\n this.sections = undefined;\n };\n return TextExport;\n}());\nexport { TextExport };\n","import { LineWidget, ParagraphWidget, BodyWidget, TextElementBox, FieldElementBox, TableRowWidget, TableCellWidget, ImageElementBox, ListTextElementBox, BookmarkElementBox } from '../viewer/page';\nimport { BlockWidget } from '../viewer/page';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { HelperMethods } from '../editor/editor-helper';\nimport { StreamWriter } from '@syncfusion/ej2-file-utils';\n/**\n * Exports the document to Sfdt format.\n */\nvar SfdtExport = /** @class */ (function () {\n /**\n * @private\n */\n function SfdtExport(owner) {\n /* tslint:disable:no-any */\n this.endLine = undefined;\n this.endOffset = undefined;\n this.endCell = undefined;\n this.startColumnIndex = undefined;\n this.endColumnIndex = undefined;\n this.lists = undefined;\n this.viewer = undefined;\n this.document = undefined;\n this.writeInlineStyles = undefined;\n this.viewer = owner;\n }\n SfdtExport.prototype.getModuleName = function () {\n return 'SfdtExport';\n };\n SfdtExport.prototype.clear = function () {\n this.writeInlineStyles = undefined;\n this.endLine = undefined;\n this.lists = undefined;\n this.document = undefined;\n };\n /**\n * Serialize the data as Syncfusion document text.\n * @private\n */\n SfdtExport.prototype.serialize = function () {\n return JSON.stringify(this.write());\n };\n /**\n * @private\n */\n SfdtExport.prototype.saveAsBlob = function (viewer) {\n var streamWriter = new StreamWriter();\n streamWriter.write(this.serialize());\n var blob = streamWriter.buffer;\n streamWriter.destroy();\n var promise;\n return new Promise(function (resolve, reject) {\n resolve(blob);\n });\n };\n // tslint:disable-next-line:max-line-length\n /**\n * @private\n */\n SfdtExport.prototype.write = function (line, startOffset, endLine, endOffset, writeInlineStyles) {\n if (writeInlineStyles) {\n this.writeInlineStyles = true;\n }\n this.lists = [];\n this.document = {};\n this.document.sections = [];\n this.document.characterFormat = this.writeCharacterFormat(this.viewer.characterFormat);\n this.document.paragraphFormat = this.writeParagraphFormat(this.viewer.paragraphFormat);\n if (line instanceof LineWidget && endLine instanceof LineWidget) {\n // For selection\n var startPara = line.paragraph;\n var endPara = endLine.paragraph;\n var startCell = startPara.associatedCell;\n var endCell = endPara.associatedCell;\n // Creates section\n var bodyWidget = startPara.bodyWidget;\n var section = this.createSection(line.paragraph.bodyWidget);\n this.document.sections.push(section);\n if (startCell === endCell || isNullOrUndefined(endCell)) {\n this.endLine = endLine;\n this.endOffset = endOffset;\n }\n else {\n // Todo: Handle nested table cases\n if (startCell instanceof TableCellWidget) {\n var startTable = startCell.getContainerTable();\n var endTable = endCell.getContainerTable();\n if (startTable.tableFormat === endTable.tableFormat) {\n this.endCell = endCell;\n this.endColumnIndex = this.endCell.columnIndex + this.endCell.cellFormat.columnSpan;\n this.startColumnIndex = startCell.columnIndex;\n }\n }\n else {\n this.endCell = endCell;\n }\n }\n if (startCell === endCell || isNullOrUndefined(startCell)) {\n var paragraph = this.createParagraph(line.paragraph);\n section.blocks.push(paragraph);\n if (!this.writeParagraph(line.paragraph, paragraph, section.blocks, line.indexInOwner, startOffset)) {\n // Todo:continue in next section\n }\n }\n else {\n var table = this.createTable(startCell.ownerTable);\n section.blocks.push(table);\n this.writeTable(startCell.ownerTable, table, startCell.ownerRow.indexInOwner, section.blocks);\n }\n }\n else {\n if (this.viewer.pages.length > 0) {\n var page = this.viewer.pages[0];\n if (page.bodyWidgets.length > 0) {\n this.writeBodyWidget(page.bodyWidgets[0], 0);\n }\n }\n }\n this.writeStyles(this.viewer);\n this.writeLists(this.viewer);\n var doc = this.document;\n this.clear();\n return doc;\n };\n SfdtExport.prototype.writeBodyWidget = function (bodyWidget, index) {\n if (!(bodyWidget instanceof BodyWidget)) {\n return true;\n }\n var section = this.createSection(bodyWidget);\n this.document.sections.push(section);\n this.writeHeaderFooters(this.viewer.headersFooters[bodyWidget.index], section);\n if (this.writeBlock(bodyWidget.childWidgets[index], 0, section.blocks)) {\n return true;\n }\n var next = bodyWidget;\n do {\n bodyWidget = next;\n next = next.nextRenderedWidget;\n } while (next instanceof BodyWidget && next.index === bodyWidget.index);\n return this.writeBodyWidget(next, index);\n };\n SfdtExport.prototype.writeHeaderFooters = function (hfs, section) {\n if (isNullOrUndefined(hfs)) {\n return;\n }\n section.headersFooters.header = this.writeHeaderFooter(hfs[0]);\n section.headersFooters.footer = this.writeHeaderFooter(hfs[1]);\n section.headersFooters.evenHeader = this.writeHeaderFooter(hfs[2]);\n section.headersFooters.evenFooter = this.writeHeaderFooter(hfs[3]);\n section.headersFooters.firstPageHeader = this.writeHeaderFooter(hfs[4]);\n section.headersFooters.firstPageFooter = this.writeHeaderFooter(hfs[5]);\n };\n SfdtExport.prototype.writeHeaderFooter = function (widget) {\n if (isNullOrUndefined(widget)) {\n return undefined;\n }\n var headerFooter = {};\n if (widget && widget.childWidgets && widget.childWidgets.length > 0) {\n headerFooter.blocks = [];\n this.writeBlock(widget.firstChild, 0, headerFooter.blocks);\n }\n return headerFooter;\n };\n SfdtExport.prototype.createSection = function (bodyWidget) {\n var section = {};\n section.sectionFormat = {};\n section.sectionFormat.pageWidth = bodyWidget.sectionFormat.pageWidth;\n section.sectionFormat.pageHeight = bodyWidget.sectionFormat.pageHeight;\n section.sectionFormat.leftMargin = bodyWidget.sectionFormat.leftMargin;\n section.sectionFormat.rightMargin = bodyWidget.sectionFormat.rightMargin;\n section.sectionFormat.topMargin = bodyWidget.sectionFormat.topMargin;\n section.sectionFormat.bottomMargin = bodyWidget.sectionFormat.bottomMargin;\n section.sectionFormat.differentFirstPage = bodyWidget.sectionFormat.differentFirstPage;\n section.sectionFormat.differentOddAndEvenPages = bodyWidget.sectionFormat.differentOddAndEvenPages;\n section.sectionFormat.headerDistance = bodyWidget.sectionFormat.headerDistance;\n section.sectionFormat.footerDistance = bodyWidget.sectionFormat.footerDistance;\n section.blocks = [];\n section.headersFooters = {};\n return section;\n };\n SfdtExport.prototype.writeBlock = function (widget, index, blocks) {\n if (!(widget instanceof BlockWidget)) {\n return true;\n }\n if (widget instanceof ParagraphWidget) {\n var paragraph = this.createParagraph(widget);\n blocks.push(paragraph);\n if (this.writeParagraph(widget, paragraph, blocks)) {\n return true;\n }\n }\n else {\n var tableWidget = widget;\n var table = this.createTable(tableWidget);\n blocks.push(table);\n if (this.writeTable(tableWidget, table, 0, blocks)) {\n return true;\n }\n }\n return false;\n };\n SfdtExport.prototype.writeNextBlock = function (widget, blocks) {\n var next = widget.nextRenderedWidget;\n if (next instanceof BlockWidget && next.containerWidget.index === widget.containerWidget.index) {\n return this.writeBlock(widget.nextRenderedWidget, 0, blocks);\n }\n return false;\n };\n SfdtExport.prototype.writeParagraph = function (paragraphWidget, paragraph, blocks, lineIndex, start) {\n if (isNullOrUndefined(lineIndex)) {\n lineIndex = 0;\n }\n if (isNullOrUndefined(start)) {\n start = 0;\n }\n var next = paragraphWidget;\n while (next instanceof ParagraphWidget) {\n if (this.writeLines(next, lineIndex, start, paragraph.inlines)) {\n return true;\n }\n lineIndex = 0;\n start = 0;\n paragraphWidget = next;\n next = paragraphWidget.nextSplitWidget;\n }\n return this.writeNextBlock(paragraphWidget, blocks);\n };\n SfdtExport.prototype.writeInlines = function (line, inlines) {\n for (var i = 0; i < line.children.length; i++) {\n var element = line.children[i];\n if (element instanceof ListTextElementBox) {\n continue;\n }\n var inline = this.writeInline(element);\n if (!isNullOrUndefined(inline)) {\n inlines.push(inline);\n }\n }\n };\n SfdtExport.prototype.writeInline = function (element) {\n var inline = {};\n inline.characterFormat = this.writeCharacterFormat(element.characterFormat);\n if (element instanceof FieldElementBox) {\n inline.fieldType = element.fieldType;\n }\n else if (element instanceof ImageElementBox) {\n inline.imageString = element.imageString;\n inline.width = HelperMethods.convertPixelToPoint(element.width);\n inline.height = HelperMethods.convertPixelToPoint(element.height);\n }\n else if (element instanceof BookmarkElementBox) {\n inline.bookmarkType = element.bookmarkType;\n inline.name = element.name;\n }\n else if (element instanceof TextElementBox) {\n inline.text = element.text;\n }\n else {\n inline = undefined;\n }\n return inline;\n };\n SfdtExport.prototype.writeLines = function (paragraph, lineIndex, offset, inlines) {\n var startIndex = lineIndex;\n var endParagraph = this.endLine instanceof LineWidget && this.endLine.paragraph === paragraph;\n var endIndex = endParagraph ? this.endLine.indexInOwner : paragraph.childWidgets.length - 1;\n for (var i = startIndex; i <= endIndex; i++) {\n var child = paragraph.childWidgets[i];\n if (this.endLine === child || (lineIndex === i && offset !== 0)) {\n this.writeLine(child, offset, inlines);\n }\n else {\n this.writeInlines(child, inlines);\n }\n }\n return endParagraph;\n };\n SfdtExport.prototype.writeLine = function (line, offset, inlines) {\n var isEnd = line === this.endLine;\n var started = false;\n var ended = false;\n var length = 0;\n for (var j = 0; j < line.children.length; j++) {\n var element = line.children[j];\n if (element instanceof ListTextElementBox) {\n continue;\n }\n var inline = undefined;\n length += element.length;\n started = length > offset;\n ended = isEnd && length >= this.endOffset;\n if (!started) {\n continue;\n }\n inline = this.writeInline(element);\n inlines[inlines.length] = inline;\n if (length > offset || ended) {\n if (inline.hasOwnProperty('text')) {\n var startIndex = length - element.length;\n var indexInInline = offset - startIndex;\n var endIndex = ended ? this.endOffset - startIndex : element.length;\n inline.text = inline.text.substring(indexInInline, endIndex);\n }\n offset = -1;\n }\n if (ended) {\n break;\n }\n }\n };\n SfdtExport.prototype.createParagraph = function (paragraphWidget) {\n var paragraph = {};\n paragraph.paragraphFormat = this.writeParagraphFormat(paragraphWidget.paragraphFormat);\n paragraph.characterFormat = this.writeCharacterFormat(paragraphWidget.characterFormat);\n paragraph.inlines = [];\n return paragraph;\n };\n /**\n * @private\n */\n SfdtExport.prototype.writeCharacterFormat = function (format, isInline) {\n var characterFormat = {};\n HelperMethods.writeCharacterFormat(characterFormat, isInline, format);\n if (this.writeInlineStyles && !isInline) {\n characterFormat.inlineFormat = this.writeCharacterFormat(format, true);\n }\n return characterFormat;\n };\n SfdtExport.prototype.writeParagraphFormat = function (format, isInline) {\n var paragraphFormat = {};\n paragraphFormat.leftIndent = isInline ? format.leftIndent : format.getValue('leftIndent');\n paragraphFormat.rightIndent = isInline ? format.rightIndent : format.getValue('rightIndent');\n paragraphFormat.firstLineIndent = isInline ? format.firstLineIndent : format.getValue('firstLineIndent');\n paragraphFormat.textAlignment = isInline ? format.textAlignment : format.getValue('textAlignment');\n paragraphFormat.beforeSpacing = isInline ? format.beforeSpacing : format.getValue('beforeSpacing');\n paragraphFormat.afterSpacing = isInline ? format.afterSpacing : format.getValue('afterSpacing');\n paragraphFormat.lineSpacing = isInline ? format.lineSpacing : format.getValue('lineSpacing');\n paragraphFormat.lineSpacingType = isInline ? format.lineSpacingType : format.getValue('lineSpacingType');\n paragraphFormat.styleName = !isNullOrUndefined(format.baseStyle) ? format.baseStyle.name : undefined;\n paragraphFormat.outlineLevel = isInline ? format.outlineLevel : format.getValue('outlineLevel');\n paragraphFormat.listFormat = this.writeListFormat(format.listFormat, isInline);\n paragraphFormat.tabs = this.writeTabs(format.tabs);\n if (this.writeInlineStyles && !isInline) {\n paragraphFormat.inlineFormat = this.writeParagraphFormat(format, true);\n }\n return paragraphFormat;\n };\n SfdtExport.prototype.writeTabs = function (tabStops) {\n if (isNullOrUndefined(tabStops) || tabStops.length < 1) {\n return undefined;\n }\n var tabs = [];\n for (var i = 0; i < tabStops.length; i++) {\n var tabStop = tabStops[i];\n var tab = {};\n tab.position = tabStop.position;\n tab.deletePosition = tabStop.deletePosition;\n tab.tabJustification = tabStop.tabJustification;\n tab.tabLeader = tabStop.tabLeader;\n tabs.push(tab);\n }\n return tabs;\n };\n /**\n * @private\n */\n SfdtExport.prototype.writeListFormat = function (format, isInline) {\n var listFormat = {};\n var listIdValue = format.getValue('listId');\n if (!isNullOrUndefined(listIdValue) && listIdValue > -1) {\n listFormat.listId = listIdValue;\n listFormat.listLevelNumber = format.getValue('listLevelNumber');\n if (this.lists.indexOf(format.listId) < 0) {\n this.lists.push(format.listId);\n }\n }\n return listFormat;\n };\n SfdtExport.prototype.writeTable = function (tableWidget, table, index, blocks) {\n var widget = tableWidget.childWidgets[index];\n if (widget instanceof TableRowWidget) {\n if (this.writeRow(widget, table.rows)) {\n return true;\n }\n }\n var next = tableWidget;\n do {\n tableWidget = next;\n next = tableWidget.nextSplitWidget;\n } while (next instanceof BlockWidget);\n return this.writeNextBlock(tableWidget, blocks);\n };\n SfdtExport.prototype.writeRow = function (rowWidget, rows) {\n if (!(rowWidget instanceof TableRowWidget)) {\n return false;\n }\n var row = this.createRow(rowWidget);\n rows.push(row);\n for (var i = 0; i < rowWidget.childWidgets.length; i++) {\n var widget = rowWidget.childWidgets[i];\n if (widget instanceof TableCellWidget) {\n if (rowWidget.index === widget.rowIndex\n && (isNullOrUndefined(this.startColumnIndex) || widget.columnIndex >= this.startColumnIndex)\n && (isNullOrUndefined(this.endColumnIndex) || widget.columnIndex < this.endColumnIndex)) {\n if (this.writeCell(widget, row.cells)) {\n return true;\n }\n }\n }\n }\n var next = rowWidget;\n do {\n rowWidget = next;\n next = rowWidget.nextRenderedWidget;\n } while (next instanceof TableRowWidget && next.index === rowWidget.index);\n return this.writeRow(next, rows);\n };\n SfdtExport.prototype.writeCell = function (cellWidget, cells) {\n var cell = this.createCell(cellWidget);\n cells.push(cell);\n if (this.writeBlock(cellWidget.firstChild, 0, cell.blocks)) {\n return true;\n }\n return this.endCell instanceof TableCellWidget ? this.endCell.cellFormat === cellWidget.cellFormat : false;\n };\n SfdtExport.prototype.createTable = function (tableWidget) {\n var table = {};\n table.rows = [];\n table.grid = [];\n for (var i = 0; i < tableWidget.tableHolder.columns.length; i++) {\n table.grid[i] = tableWidget.tableHolder.columns[i].preferredWidth;\n }\n table.tableFormat = this.writeTableFormat(tableWidget.tableFormat);\n table.description = tableWidget.description;\n table.title = tableWidget.title;\n return table;\n };\n SfdtExport.prototype.createRow = function (rowWidget) {\n var row = {};\n row.cells = [];\n row.rowFormat = this.writeRowFormat(rowWidget.rowFormat);\n return row;\n };\n SfdtExport.prototype.createCell = function (cellWidget) {\n var cell = {};\n cell.blocks = [];\n cell.cellFormat = this.writeCellFormat(cellWidget.cellFormat);\n cell.columnIndex = cellWidget.columnIndex;\n return cell;\n };\n SfdtExport.prototype.writeShading = function (wShading) {\n var shading = {};\n shading.backgroundColor = wShading.backgroundColor;\n shading.foregroundColor = wShading.foregroundColor;\n shading.textureStyle = wShading.textureStyle;\n return shading;\n };\n SfdtExport.prototype.writeBorder = function (wBorder) {\n var border = {};\n border.color = wBorder.color;\n border.hasNoneStyle = wBorder.hasNoneStyle;\n border.lineStyle = wBorder.lineStyle;\n border.lineWidth = wBorder.lineWidth;\n border.shadow = wBorder.shadow;\n border.space = wBorder.space;\n return border;\n };\n SfdtExport.prototype.writeBorders = function (wBorders) {\n var borders = {};\n borders.top = this.writeBorder(wBorders.top);\n borders.left = this.writeBorder(wBorders.left);\n borders.right = this.writeBorder(wBorders.right);\n borders.bottom = this.writeBorder(wBorders.bottom);\n borders.diagonalDown = this.writeBorder(wBorders.diagonalDown);\n borders.diagonalUp = this.writeBorder(wBorders.diagonalUp);\n borders.horizontal = this.writeBorder(wBorders.horizontal);\n borders.vertical = this.writeBorder(wBorders.vertical);\n return borders;\n };\n SfdtExport.prototype.writeCellFormat = function (wCellFormat) {\n var cellFormat = {};\n cellFormat.borders = this.writeBorders(wCellFormat.borders);\n cellFormat.shading = this.writeShading(wCellFormat.shading);\n cellFormat.topMargin = wCellFormat.topMargin;\n cellFormat.rightMargin = wCellFormat.rightMargin;\n cellFormat.leftMargin = wCellFormat.leftMargin;\n cellFormat.bottomMargin = wCellFormat.bottomMargin;\n cellFormat.preferredWidth = wCellFormat.preferredWidth;\n cellFormat.preferredWidthType = wCellFormat.preferredWidthType;\n cellFormat.cellWidth = wCellFormat.cellWidth;\n cellFormat.columnSpan = wCellFormat.columnSpan;\n cellFormat.rowSpan = wCellFormat.rowSpan;\n cellFormat.verticalAlignment = wCellFormat.verticalAlignment;\n return cellFormat;\n };\n SfdtExport.prototype.writeRowFormat = function (wRowFormat) {\n var rowFormat = {};\n rowFormat.height = wRowFormat.height;\n rowFormat.allowBreakAcrossPages = wRowFormat.allowBreakAcrossPages;\n rowFormat.heightType = wRowFormat.heightType;\n rowFormat.isHeader = wRowFormat.isHeader;\n rowFormat.borders = this.writeBorders(wRowFormat.borders);\n rowFormat.gridBefore = wRowFormat.gridBefore;\n rowFormat.gridBeforeWidth = wRowFormat.gridBeforeWidth;\n rowFormat.gridBeforeWidthType = wRowFormat.gridBeforeWidthType;\n rowFormat.gridAfter = wRowFormat.gridAfter;\n rowFormat.gridAfterWidth = wRowFormat.gridAfterWidth;\n rowFormat.gridAfterWidthType = wRowFormat.gridAfterWidthType;\n return rowFormat;\n };\n SfdtExport.prototype.writeTableFormat = function (wTableFormat) {\n var tableFormat = {};\n tableFormat.borders = this.writeBorders(wTableFormat.borders);\n tableFormat.shading = this.writeShading(wTableFormat.shading);\n tableFormat.cellSpacing = wTableFormat.cellSpacing;\n tableFormat.leftIndent = wTableFormat.leftIndent;\n tableFormat.tableAlignment = wTableFormat.tableAlignment;\n tableFormat.topMargin = wTableFormat.topMargin;\n tableFormat.rightMargin = wTableFormat.rightMargin;\n tableFormat.leftMargin = wTableFormat.leftMargin;\n tableFormat.bottomMargin = wTableFormat.bottomMargin;\n tableFormat.preferredWidth = wTableFormat.preferredWidth;\n tableFormat.preferredWidthType = wTableFormat.preferredWidthType;\n return tableFormat;\n };\n SfdtExport.prototype.writeStyles = function (viewer) {\n var styles = [];\n this.document.styles = [];\n for (var i = 0; i < viewer.styles.length; i++) {\n this.document.styles.push(this.writeStyle(viewer.styles.getItem(i)));\n }\n };\n SfdtExport.prototype.writeStyle = function (style) {\n var wStyle = {};\n wStyle.name = style.name;\n if (style.type === 'Paragraph') {\n wStyle.type = 'Paragraph';\n wStyle.paragraphFormat = this.writeParagraphFormat(style.paragraphFormat);\n wStyle.characterFormat = this.writeCharacterFormat(style.characterFormat);\n }\n if (style.type === 'Character') {\n wStyle.type = 'Character';\n wStyle.characterFormat = this.writeCharacterFormat(style.characterFormat);\n }\n if (!isNullOrUndefined(style.basedOn)) {\n wStyle.basedOn = style.basedOn.name;\n }\n if (!isNullOrUndefined(style.link)) {\n wStyle.link = style.link.name;\n }\n if (!isNullOrUndefined(style.next)) {\n wStyle.next = style.next.name;\n }\n return wStyle;\n };\n SfdtExport.prototype.writeLists = function (viewer) {\n var abstractLists = [];\n this.document.lists = [];\n for (var i = 0; i < viewer.lists.length; i++) {\n var list = viewer.lists[i];\n if (this.lists.indexOf(list.listId) > -1) {\n this.document.lists.push(this.writeList(list));\n if (abstractLists.indexOf(list.abstractListId) < 0) {\n abstractLists.push(list.abstractListId);\n }\n }\n }\n this.document.abstractLists = [];\n for (var i = 0; i < viewer.abstractLists.length; i++) {\n var abstractList = viewer.abstractLists[i];\n if (this.lists.indexOf(abstractList.abstractListId) > -1) {\n this.document.abstractLists.push(this.writeAbstractList(abstractList));\n }\n }\n };\n SfdtExport.prototype.writeAbstractList = function (wAbstractList) {\n var abstractList = {};\n abstractList.abstractListId = wAbstractList.abstractListId;\n abstractList.levels = [];\n for (var i = 0; i < wAbstractList.levels.length; i++) {\n abstractList.levels[i] = this.writeListLevel(wAbstractList.levels[i]);\n }\n return abstractList;\n };\n SfdtExport.prototype.writeList = function (wList) {\n var list = {};\n list.abstractListId = wList.abstractListId;\n //list.levelOverrides = wList.levelOverrides;\n list.listId = wList.listId;\n return list;\n };\n SfdtExport.prototype.writeListLevel = function (wListLevel) {\n var listLevel = {};\n listLevel.characterFormat = this.writeCharacterFormat(wListLevel.characterFormat);\n listLevel.paragraphFormat = this.writeParagraphFormat(wListLevel.paragraphFormat);\n listLevel.followCharacter = wListLevel.followCharacter;\n listLevel.listLevelPattern = wListLevel.listLevelPattern;\n listLevel.numberFormat = wListLevel.numberFormat;\n listLevel.restartLevel = wListLevel.restartLevel;\n listLevel.startAt = wListLevel.startAt;\n return listLevel;\n };\n /**\n * @private\n */\n SfdtExport.prototype.destroy = function () {\n this.lists = undefined;\n this.endLine = undefined;\n this.endOffset = undefined;\n this.viewer = undefined;\n };\n return SfdtExport;\n}());\nexport { SfdtExport };\n","import { createElement, isNullOrUndefined, L10n, setCulture } from '@syncfusion/ej2-base';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\n/**\n * The Hyperlink dialog is used to insert or edit hyperlink at selection.\n */\n/* tslint:disable:max-line-length */\nvar HyperlinkDialog = /** @class */ (function () {\n /**\n * @private\n */\n function HyperlinkDialog(viewer) {\n var _this = this;\n this.displayText = '';\n this.navigationUrl = undefined;\n this.bookmarkDropdown = undefined;\n this.bookmarkCheckbox = undefined;\n this.bookmarks = [];\n /**\n * @private\n */\n this.onKeyUpOnUrlBox = function (event) {\n if (event.keyCode === 13) {\n if (_this.displayTextBox.value !== '' && _this.urlTextBox.value !== '') {\n _this.onInsertHyperlink();\n }\n return;\n }\n var selectedText = _this.owner.selection.text;\n var urlValue = _this.urlTextBox.value;\n if (urlValue.substring(0, 4).toLowerCase() === 'www.') {\n _this.urlTextBox.value = 'http://' + urlValue;\n }\n if (_this.displayText === '') {\n _this.displayTextBox.value = urlValue;\n }\n _this.enableOrDisableInsertButton();\n };\n /**\n * @private\n */\n this.onKeyUpOnDisplayBox = function () {\n _this.displayText = _this.displayTextBox.value;\n _this.enableOrDisableInsertButton();\n };\n /**\n * @private\n */\n this.onInsertButtonClick = function () {\n _this.onInsertHyperlink();\n };\n /**\n * @private\n */\n this.onCancelButtonClick = function () {\n _this.owner.dialog.hide();\n _this.clearValue();\n };\n /**\n * @private\n */\n this.loadHyperlinkDialog = function () {\n _this.owner.updateFocus();\n _this.bookmarks = [];\n for (var i = 0; i < _this.owner.bookmarks.keys.length; i++) {\n var bookmark = _this.owner.bookmarks.keys[i];\n if (bookmark.indexOf('_') !== 0) {\n _this.bookmarks.push(bookmark);\n }\n }\n var fieldBegin = _this.owner.selection.getHyperlinkField();\n if (!isNullOrUndefined(fieldBegin)) {\n if (!isNullOrUndefined(fieldBegin.fieldSeparator)) {\n var format = undefined;\n // tslint:disable-next-line:max-line-length\n var fieldObj = _this.owner.selection.getHyperlinkDisplayText(fieldBegin.fieldSeparator.line.paragraph, fieldBegin.fieldSeparator, fieldBegin.fieldEnd, false, format);\n _this.displayText = fieldObj.displayText;\n _this.displayTextBox.disabled = fieldObj.isNestedField;\n }\n _this.displayTextBox.value = _this.displayText;\n var link = _this.owner.selection.getLinkText(fieldBegin);\n _this.urlTextBox.value = _this.navigationUrl = link;\n _this.owner.dialog.header = _this.localObj.getConstant('Edit Hyperlink');\n }\n else {\n _this.displayText = _this.owner.selection.getText(true);\n if (_this.displayText !== '') {\n if (_this.displayText.indexOf(String.fromCharCode(65532)) !== -1 ||\n _this.displayText.indexOf('\\r') !== -1 && (_this.displayText.lastIndexOf('\\r') !== -1 &&\n _this.displayText.slice(0, -1).indexOf('\\r') !== -1)) {\n _this.displayTextBox.value = '<>';\n _this.displayTextBox.disabled = true;\n }\n else {\n _this.displayTextBox.value = _this.displayText;\n }\n }\n }\n _this.bookmarkDiv.style.display = 'none';\n _this.addressText.style.display = 'block';\n _this.urlTextBox.style.display = 'block';\n _this.bookmarkCheckbox.checked = false;\n _this.bookmarkDropdown.dataSource = _this.owner.bookmarks.keys;\n _this.insertButton = document.getElementsByClassName('e-hyper-insert')[0];\n _this.enableOrDisableInsertButton();\n _this.urlTextBox.focus();\n if (_this.owner.selection.caret.style.display !== 'none') {\n _this.owner.selection.caret.style.display = 'none';\n }\n };\n /**\n * @private\n */\n this.closeHyperlinkDialog = function () {\n _this.clearValue();\n _this.owner.updateFocus();\n };\n /* tslint:disable:no-any */\n this.onUseBookmarkChange = function (args) {\n if (args.checked) {\n _this.bookmarkDiv.style.display = 'block';\n _this.bookmarkDropdown.dataSource = _this.bookmarks;\n _this.addressText.style.display = 'none';\n _this.urlTextBox.style.display = 'none';\n }\n else {\n _this.bookmarkDiv.style.display = 'none';\n _this.addressText.style.display = 'block';\n _this.urlTextBox.style.display = 'block';\n }\n };\n this.onBookmarkchange = function (args) {\n if (_this.bookmarkDropdown.value !== '') {\n _this.insertButton.disabled = false;\n }\n };\n this.owner = viewer;\n }\n /**\n * @private\n */\n HyperlinkDialog.prototype.getModuleName = function () {\n return 'HyperlinkDialog';\n };\n /**\n * @private\n */\n HyperlinkDialog.prototype.initHyperlinkDialog = function (localValue) {\n var instance = this;\n var id = this.owner.owner.containerId + '_insert_hyperlink';\n this.target = createElement('div', { id: id, className: 'e-de-hyperlink' });\n var container = createElement('div');\n var displayText = createElement('div', { className: 'e-de-hyperlink-dlg-title', innerHTML: localValue.getConstant('Text to display') });\n this.displayTextBox = createElement('input', { id: this.owner.owner.containerId + '_display_text', className: 'e-input e-de-hyperlink-dlg-input' });\n this.displayTextBox.addEventListener('keyup', instance.onKeyUpOnDisplayBox);\n container.appendChild(displayText);\n container.appendChild(this.displayTextBox);\n this.addressText = createElement('div', { className: 'e-de-hyperlink-dlg-title', innerHTML: localValue.getConstant('Address') });\n this.urlTextBox = createElement('input', { id: this.owner.owner.containerId + '_url_text', className: 'e-input e-de-hyperlink-dlg-input', attrs: { autofocus: 'true' } });\n this.urlTextBox.addEventListener('input', instance.onKeyUpOnUrlBox);\n this.urlTextBox.addEventListener('keyup', instance.onKeyUpOnUrlBox);\n container.appendChild(this.addressText);\n container.appendChild(this.urlTextBox);\n this.bookmarkDiv = createElement('div', { styles: 'display:none;' });\n var bookmarkText = createElement('div', { className: 'e-de-hyperlink-dlg-title', innerHTML: localValue.getConstant('Bookmark') });\n var bookmarkTextElement = createElement('div', { className: 'e-de-hyperlink-dlg-bookmark' });\n // tslint:disable-next-line:max-line-length\n var bookmarkValue = createElement('input', { id: 'e-de-hyperlink-dlg-bookmark-value' });\n bookmarkTextElement.appendChild(bookmarkValue);\n // tslint:disable-next-line:max-line-length\n this.bookmarkDropdown = new DropDownList({ dataSource: [], change: this.onBookmarkchange, popupHeight: '230px', width: '230px', noRecordsTemplate: localValue.getConstant('No bookmarks found') });\n this.bookmarkDropdown.appendTo(bookmarkValue);\n this.bookmarkDiv.appendChild(bookmarkText);\n this.bookmarkDiv.appendChild(bookmarkTextElement);\n container.appendChild(this.bookmarkDiv);\n // tslint:disable-next-line:max-line-length\n var bookmarkCheckDiv = createElement('div', { className: 'e-de-hyperlink-bookmark-check e-de-hyperlink-dlg-title' });\n var bookmarkCheck = createElement('input', { attrs: { type: 'checkbox' }, id: this.target.id + '_bookmark', className: this.target.id + '_bookmarkcheck' });\n bookmarkCheckDiv.appendChild(bookmarkCheck);\n this.bookmarkCheckbox = new CheckBox({ label: localValue.getConstant('Use bookmarks'), change: this.onUseBookmarkChange });\n this.bookmarkCheckbox.appendTo(bookmarkCheck);\n container.appendChild(bookmarkCheckDiv);\n this.target.appendChild(container);\n };\n /**\n * @private\n */\n HyperlinkDialog.prototype.show = function () {\n this.localObj = new L10n('documenteditor', this.owner.owner.defaultLocale);\n this.localObj.setLocale(this.owner.owner.locale);\n setCulture(this.owner.owner.locale);\n if (!this.target) {\n this.initHyperlinkDialog(this.localObj);\n }\n this.owner.dialog.header = this.localObj.getConstant('Insert Hyperlink');\n this.owner.dialog.height = 'auto';\n this.owner.dialog.width = 'auto';\n this.owner.dialog.content = this.target;\n this.owner.dialog.buttons = [{\n click: this.onInsertButtonClick,\n buttonModel: { content: this.localObj.getConstant('Ok'), cssClass: 'e-flat e-hyper-insert', isPrimary: true }\n },\n {\n click: this.onCancelButtonClick,\n buttonModel: { content: this.localObj.getConstant('Cancel'), cssClass: 'e-flat e-hyper-cancel' }\n }];\n this.owner.dialog.dataBind();\n this.owner.dialog.beforeOpen = this.loadHyperlinkDialog;\n this.owner.dialog.close = this.closeHyperlinkDialog;\n this.owner.dialog.show();\n };\n /**\n * @private\n */\n HyperlinkDialog.prototype.hide = function () {\n this.closeHyperlinkDialog();\n };\n HyperlinkDialog.prototype.enableOrDisableInsertButton = function () {\n if (!isNullOrUndefined(this.insertButton)) {\n // tslint:disable-next-line:max-line-length\n this.insertButton.disabled = (this.urlTextBox.value === '' || this.displayTextBox.value === '');\n }\n };\n /**\n * @private\n */\n HyperlinkDialog.prototype.onInsertHyperlink = function () {\n var displayText = this.displayTextBox.value.trim();\n var address = this.urlTextBox.value.trim();\n var isBookmark = false;\n if (!isNullOrUndefined(this.bookmarkDropdown.value) && this.bookmarkDropdown.value !== '') {\n address = this.bookmarkDropdown.value;\n isBookmark = true;\n }\n if (address === '') {\n this.owner.dialog.hide();\n return;\n }\n if (displayText === '' && address !== '') {\n displayText = address;\n }\n else {\n displayText = this.displayTextBox.value;\n }\n if (!isNullOrUndefined(this.navigationUrl)) {\n this.owner.owner.editorModule.editHyperlink(this.owner.selection, address, displayText, isBookmark);\n }\n else {\n var remove = this.owner.selection.text !== displayText && !this.displayTextBox.disabled;\n this.owner.owner.editorModule.insertHyperlink(address, displayText, remove, isBookmark);\n }\n this.owner.dialog.hide();\n this.navigationUrl = undefined;\n };\n /* tslint:enable:no-any */\n /**\n * @private\n */\n HyperlinkDialog.prototype.clearValue = function () {\n this.displayTextBox.value = '';\n this.urlTextBox.value = '';\n this.displayText = '';\n this.displayTextBox.disabled = false;\n this.bookmarks = [];\n };\n /**\n * @private\n */\n HyperlinkDialog.prototype.destroy = function () {\n if (this.displayTextBox) {\n this.displayTextBox.innerHTML = '';\n this.displayTextBox = undefined;\n }\n if (this.urlTextBox) {\n this.urlTextBox.parentElement.removeChild(this.urlTextBox);\n this.urlTextBox = undefined;\n }\n this.owner = undefined;\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n this.target.innerHTML = '';\n this.target = undefined;\n }\n };\n return HyperlinkDialog;\n}());\nexport { HyperlinkDialog };\n","import { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { L10n, createElement, setCulture, isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * The Table dialog is used to insert table at selection.\n */\nvar TableDialog = /** @class */ (function () {\n /**\n * @private\n */\n function TableDialog(viewer) {\n var _this = this;\n /**\n * @private\n */\n this.keyUpInsertTable = function (event) {\n if (event.keyCode === 13) {\n if (_this.rowsCountBox.value !== '' && _this.columnsCountBox.value !== '') {\n _this.onInsertTableClick();\n }\n }\n };\n /**\n * @private\n */\n this.onCancelButtonClick = function () {\n _this.owner.dialog.hide();\n };\n /**\n * @private\n */\n this.onInsertTableClick = function () {\n var rowCount = _this.rowValueTextBox.value;\n var columnCount = _this.columnValueTexBox.value;\n if (!(isNullOrUndefined(rowCount) && isNullOrUndefined(columnCount))) {\n _this.owner.owner.editor.insertTable(rowCount, columnCount);\n }\n _this.owner.dialog.hide();\n };\n this.owner = viewer;\n }\n TableDialog.prototype.getModuleName = function () {\n return 'TableDialog';\n };\n /**\n * @private\n */\n TableDialog.prototype.initTableDialog = function (localValue) {\n var instance = this;\n var id = this.owner.owner.containerId + '_insert_Table';\n this.target = createElement('div', { id: id, className: 'e-de-insert-table' });\n var parentDiv = createElement('div');\n var columnContainer = createElement('div', {\n className: 'e-de-insert-table-dlg-sub-header', innerHTML: localValue.getConstant('Column Size')\n });\n var columnValue = createElement('div', { className: 'e-de-insert-table-dlg-input' });\n this.columnsCountBox = createElement('input', {\n attrs: { type: 'text' }, id: this.owner.owner.containerId + '_column'\n });\n columnValue.appendChild(this.columnsCountBox);\n var rowContainer = createElement('div', {\n className: 'e-de-insert-table-dlg-sub-header', innerHTML: localValue.getConstant('Row Size')\n });\n var rowValue = createElement('div', { className: 'e-de-insert-table-dlg-input' });\n this.rowsCountBox = createElement('input', {\n attrs: { type: 'text' }, id: this.owner.owner.containerId + 'row'\n });\n rowValue.appendChild(this.rowsCountBox);\n parentDiv.appendChild(columnContainer);\n parentDiv.appendChild(columnValue);\n parentDiv.appendChild(rowContainer);\n parentDiv.appendChild(rowValue);\n this.target.appendChild(parentDiv);\n this.columnsCountBox.addEventListener('keyup', instance.keyUpInsertTable);\n this.rowsCountBox.addEventListener('keyup', instance.keyUpInsertTable);\n this.rowValueTextBox = new NumericTextBox({\n format: '#',\n value: 2,\n min: 1,\n max: 32767,\n enablePersistence: false\n });\n this.rowValueTextBox.appendTo(this.rowsCountBox);\n this.columnValueTexBox = new NumericTextBox({\n format: '#',\n value: 2,\n min: 1,\n max: 63,\n enablePersistence: false\n });\n this.columnValueTexBox.appendTo(this.columnsCountBox);\n };\n /**\n * @private\n */\n TableDialog.prototype.show = function () {\n var localValue = new L10n('documenteditor', this.owner.owner.defaultLocale);\n localValue.setLocale(this.owner.owner.locale);\n setCulture(this.owner.owner.locale);\n if (!this.target) {\n this.initTableDialog(localValue);\n }\n if (this.owner.selection.caret.style.display !== 'none') {\n this.owner.selection.caret.style.display = 'none';\n }\n this.owner.dialog.header = localValue.getConstant('Insert Table');\n this.owner.dialog.height = 'auto';\n this.owner.dialog.width = 'auto';\n this.owner.dialog.content = this.target;\n this.owner.dialog.beforeOpen = this.owner.updateFocus;\n this.owner.dialog.buttons = [{\n click: this.onInsertTableClick,\n buttonModel: { content: localValue.getConstant('Ok'), cssClass: 'e-flat e-table-ok', isPrimary: true }\n },\n {\n click: this.onCancelButtonClick,\n buttonModel: { content: localValue.getConstant('Cancel'), cssClass: 'e-flat e-table-cancel' }\n }];\n this.rowValueTextBox.value = 2;\n this.columnValueTexBox.value = 2;\n this.owner.dialog.close = this.owner.updateFocus;\n this.owner.dialog.dataBind();\n this.owner.dialog.show();\n };\n /**\n * @private\n */\n TableDialog.prototype.destroy = function () {\n if (this.columnsCountBox) {\n if (this.columnsCountBox.parentElement) {\n this.columnsCountBox.parentElement.removeChild(this.columnsCountBox);\n }\n this.columnsCountBox = undefined;\n }\n if (this.rowsCountBox) {\n if (this.rowsCountBox.parentElement) {\n this.rowsCountBox.parentElement.removeChild(this.rowsCountBox);\n }\n this.rowsCountBox = undefined;\n }\n if (this.columnValueTexBox) {\n this.columnValueTexBox.destroy();\n this.columnValueTexBox = undefined;\n }\n if (this.rowValueTextBox) {\n this.rowValueTextBox.destroy();\n this.rowValueTextBox = undefined;\n }\n this.columnsCountBox = undefined;\n this.rowsCountBox = undefined;\n this.owner = undefined;\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var i = 0; i < this.target.childNodes.length; i++) {\n this.target.removeChild(this.target.childNodes[i]);\n i--;\n }\n this.target = undefined;\n }\n };\n return TableDialog;\n}());\nexport { TableDialog };\n","import { ListView } from '@syncfusion/ej2-lists';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { createElement, L10n, setCulture } from '@syncfusion/ej2-base';\n/**\n * The Bookmark dialog is used to add, navigate or delete bookmarks.\n */\nvar BookmarkDialog = /** @class */ (function () {\n /**\n * @private\n */\n function BookmarkDialog(viewer) {\n var _this = this;\n this.addBookmark = function () {\n _this.owner.owner.editorModule.insertBookmark(_this.textBoxInput.value);\n _this.owner.dialog.hide();\n };\n /* tslint:disable:no-any */\n this.selectHandler = function (args) {\n _this.textBoxInput.value = args.text;\n /* tslint:disable:no-any */\n var value = document.getElementById('bookmark_text_box');\n value.setSelectionRange(0, args.text.length);\n value.focus();\n };\n this.gotoBookmark = function () {\n _this.owner.selection.selectBookmark(_this.textBoxInput.value);\n };\n this.deleteBookmark = function () {\n _this.owner.owner.editorModule.deleteBookmark(_this.textBoxInput.value);\n _this.show();\n };\n this.owner = viewer;\n }\n /**\n * @private\n */\n BookmarkDialog.prototype.getModuleName = function () {\n return 'BookmarkDialog';\n };\n /**\n * @private\n */\n BookmarkDialog.prototype.initBookmarkDialog = function (localValue, bookmarks) {\n var instance = this;\n var id = this.owner.owner.containerId + '_insert_bookmark';\n this.target = createElement('div', { id: id, className: 'e-de-bookmark' });\n var headerValue = localValue.getConstant('Bookmark name:');\n var dlgFields = createElement('div', { innerHTML: headerValue, className: 'e-bookmark-dlgfields' });\n this.target.appendChild(dlgFields);\n var commonDiv = createElement('div', { className: 'e-bookmark-common' });\n this.target.appendChild(commonDiv);\n var searchDiv = createElement('div', { className: 'e-bookmark-list' });\n commonDiv.appendChild(searchDiv);\n var textBoxDiv = createElement('div', { className: 'e-bookmark-textboxdiv' });\n searchDiv.appendChild(textBoxDiv);\n // tslint:disable-next-line:max-line-length\n this.textBoxInput = createElement('input', { className: 'e-input e-bookmark-textbox-input', id: 'bookmark_text_box' });\n this.textBoxInput.setAttribute('type', 'text');\n textBoxDiv.appendChild(this.textBoxInput);\n var listviewDiv = createElement('div', { className: 'e-bookmark-listViewDiv', id: 'bookmark_listview' });\n searchDiv.appendChild(listviewDiv);\n var arts = this.owner.bookmarks.keys;\n this.listviewInstance = new ListView({\n dataSource: bookmarks,\n cssClass: 'e-bookmark-listview',\n });\n this.listviewInstance.appendTo(listviewDiv);\n this.listviewInstance.addEventListener('select', this.selectHandler);\n var buttonDiv = createElement('div', { className: 'e-bookmark-button' });\n commonDiv.appendChild(buttonDiv);\n var addbuttonDiv = createElement('div', { className: 'e-bookmark-addbutton' });\n buttonDiv.appendChild(addbuttonDiv);\n var addButtonElement = createElement('button', { innerHTML: 'Add', id: 'add' });\n addbuttonDiv.appendChild(addButtonElement);\n var addbutton = new Button({ cssClass: 'e-button-custom' });\n addbutton.appendTo(addButtonElement);\n addButtonElement.addEventListener('click', this.addBookmark);\n var deleteButtonDiv = createElement('div', { className: 'e-bookmark-deletebutton' });\n buttonDiv.appendChild(deleteButtonDiv);\n var deleteButtonElement = createElement('button', { innerHTML: 'Delete', id: 'delete' });\n deleteButtonDiv.appendChild(deleteButtonElement);\n var deletebutton = new Button({ cssClass: 'e-button-custom' });\n deletebutton.appendTo(deleteButtonElement);\n deleteButtonElement.addEventListener('click', this.deleteBookmark);\n var gotoButtonDiv = createElement('div', { className: 'e-bookmark-gotobutton' });\n buttonDiv.appendChild(gotoButtonDiv);\n var gotoButtonElement = createElement('button', { innerHTML: 'Go To', id: 'goto' });\n gotoButtonDiv.appendChild(gotoButtonElement);\n var gotobutton = new Button({ cssClass: 'e-button-custom' });\n gotobutton.appendTo(gotoButtonElement);\n gotoButtonElement.addEventListener('click', this.gotoBookmark);\n };\n /**\n * @private\n */\n BookmarkDialog.prototype.show = function () {\n var bookmarks = this.owner.getBookmarks();\n var localObj = new L10n('documenteditor', this.owner.owner.defaultLocale);\n localObj.setLocale(this.owner.owner.locale);\n setCulture(this.owner.owner.locale);\n // if (!this.target) {\n this.initBookmarkDialog(localObj, bookmarks);\n //}\n this.owner.dialog.header = 'Bookmark';\n this.owner.dialog.height = 'auto';\n this.owner.dialog.width = 'auto';\n this.owner.dialog.content = this.target;\n this.owner.dialog.beforeOpen = this.owner.updateFocus;\n this.owner.dialog.close = this.owner.updateFocus;\n this.owner.dialog.buttons = [{\n click: this.removeObjects.bind(this),\n buttonModel: { content: localObj.getConstant('Cancel'), cssClass: 'e-flat e-hyper-insert', isPrimary: true }\n }];\n this.owner.dialog.dataBind();\n this.owner.dialog.show();\n };\n BookmarkDialog.prototype.removeObjects = function () {\n this.owner.dialog.hide();\n };\n /**\n * @private\n */\n BookmarkDialog.prototype.destroy = function () {\n if (this.textBoxInput) {\n this.textBoxInput.remove();\n this.textBoxInput = undefined;\n }\n if (this.listviewInstance) {\n this.listviewInstance.destroy();\n this.listviewInstance = undefined;\n }\n };\n return BookmarkDialog;\n}());\nexport { BookmarkDialog };\n","import { L10n, setCulture, createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CheckBox, Button } from '@syncfusion/ej2-buttons';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { ListView } from '@syncfusion/ej2-lists';\n/**\n * The Table of contents dialog is used to insert or edit table of contents at selection.\n */\nvar TableOfContentsDialog = /** @class */ (function () {\n /**\n * @private\n */\n function TableOfContentsDialog(viewer) {\n var _this = this;\n /**\n * @private\n */\n this.loadTableofContentDialog = function () {\n _this.owner.updateFocus();\n _this.pageNumber.checked = true;\n _this.rightAlign.disabled = false;\n _this.rightAlign.checked = true;\n _this.tabLeader.enabled = true;\n _this.hyperlink.checked = true;\n _this.style.checked = true;\n _this.outline.checked = true;\n _this.outline.disabled = false;\n _this.showLevel.enabled = true;\n };\n /**\n * @private\n */\n this.closeTableOfContentDialog = function () {\n _this.unWireEventsAndBindings();\n _this.owner.updateFocus();\n };\n /**\n * @private\n */\n this.onCancelButtonClick = function () {\n _this.owner.dialog.hide();\n _this.unWireEventsAndBindings();\n };\n /* tslint:disable:no-any */\n this.selectHandler = function (args) {\n _this.textBoxInput.value = args.text;\n /* tslint:disable:no-any */\n var value = document.getElementById('toclist');\n value.setSelectionRange(0, args.text.length);\n value.focus();\n };\n this.showStyleDialog = function () {\n if (!isNullOrUndefined(_this.owner.owner.styleDialogModule)) {\n _this.owner.owner.styleDialogModule.show(_this.textBoxInput.value);\n }\n };\n this.changeShowLevelValue = function (event) {\n var levels = event.value;\n var values = [];\n switch (levels) {\n case 1:\n values = ['1', null, null, null, null, null, null, null, null];\n _this.changeByValue(values);\n break;\n case 2:\n values = ['1', '2', null, null, null, null, null, null, null];\n _this.changeByValue(values);\n break;\n case 3:\n values = ['1', '2', '3', null, null, null, null, null, null];\n _this.changeByValue(values);\n break;\n case 4:\n values = ['1', '2', '3', '4', null, null, null, null, null];\n _this.changeByValue(values);\n break;\n case 5:\n values = ['1', '2', '3', '4', '5', null, null, null, null];\n _this.changeByValue(values);\n break;\n case 6:\n values = ['1', '2', '3', '4', '5', '6', null, null, null];\n _this.changeByValue(values);\n break;\n case 7:\n values = ['1', '2', '3', '4', '5', '6', '7', null, null];\n _this.changeByValue(values);\n break;\n case 8:\n values = ['1', '2', '3', '4', '5', '6', '7', '8', null];\n _this.changeByValue(values);\n break;\n case 9:\n values = ['1', '2', '3', '4', '5', '6', '7', '8', '9'];\n _this.changeByValue(values);\n break;\n }\n };\n this.changeByValue = function (headings) {\n _this.heading1.value = headings[0];\n _this.heading2.value = headings[1];\n _this.heading3.value = headings[2];\n _this.heading4.value = headings[3];\n _this.heading5.value = headings[4];\n _this.heading6.value = headings[5];\n _this.heading7.value = headings[6];\n _this.heading8.value = headings[7];\n _this.heading9.value = headings[8];\n };\n this.reset = function () {\n _this.showLevel.enabled = true;\n _this.showLevel.value = 3;\n _this.outline.disabled = false;\n _this.outline.checked = true;\n var values = ['1', '2', '3', null, null, null, null, null, null];\n _this.changeByValue(values);\n _this.normal.value = null;\n };\n this.changeStyle = function (args) {\n var headingValue = args.srcElement.value;\n var value = _this.getElementValue(args.srcElement);\n if (headingValue !== value && headingValue !== '') {\n _this.showLevel.enabled = false;\n }\n else {\n _this.showLevel.enabled = true;\n _this.checkLevel();\n }\n };\n this.changeHeadingStyle = function (args) {\n var headingValue = args.srcElement.value;\n if (headingValue === '') {\n _this.showLevel.enabled = true;\n }\n else {\n _this.showLevel.enabled = false;\n }\n if (_this.normal === args.srcElement) {\n _this.outline.checked = false;\n _this.outline.disabled = true;\n }\n };\n /**\n * @private\n */\n this.changePageNumberValue = function (args) {\n if (args.checked) {\n _this.rightAlign.checked = true;\n _this.rightAlign.disabled = false;\n _this.tabLeader.enabled = true;\n }\n else {\n _this.rightAlign.disabled = true;\n _this.tabLeader.enabled = false;\n }\n };\n /**\n * @private\n */\n this.changeRightAlignValue = function (args) {\n if (args.checked) {\n _this.tabLeader.enabled = true;\n }\n else {\n _this.tabLeader.enabled = false;\n }\n };\n /**\n * @private\n */\n this.changeStyleValue = function (args) {\n if (args.checked) {\n _this.heading1.disabled = false;\n _this.heading2.disabled = false;\n _this.heading3.disabled = false;\n _this.heading4.disabled = false;\n _this.heading5.disabled = false;\n _this.heading6.disabled = false;\n _this.heading7.disabled = false;\n _this.heading8.disabled = false;\n _this.heading9.disabled = false;\n _this.normal.disabled = false;\n }\n else {\n _this.heading1.disabled = true;\n _this.heading2.disabled = true;\n _this.heading3.disabled = true;\n _this.heading4.disabled = true;\n _this.heading5.disabled = true;\n _this.heading6.disabled = true;\n _this.heading7.disabled = true;\n _this.heading8.disabled = true;\n _this.heading9.disabled = true;\n _this.normal.disabled = true;\n }\n };\n /**\n * @private\n */\n this.applyTableOfContentProperties = function () {\n var tocSettings = {\n startLevel: 1,\n endLevel: _this.showLevel.value,\n includeHyperlink: _this.hyperlink.checked,\n includePageNumber: _this.pageNumber.checked,\n rightAlign: _this.rightAlign.checked,\n tabLeader: _this.tabLeader.value,\n includeOutlineLevels: _this.outline.checked\n };\n _this.applyLevelSetting(tocSettings);\n _this.owner.owner.editorModule.insertTableOfContents(tocSettings);\n _this.owner.dialog.hide();\n };\n /**\n * @private\n */\n this.unWireEventsAndBindings = function () {\n _this.pageNumber.checked = false;\n _this.rightAlign.checked = false;\n _this.tabLeader.value = '';\n _this.hyperlink.checked = false;\n _this.style.checked = false;\n _this.outline.checked = false;\n _this.normal.value = '';\n };\n this.owner = viewer;\n }\n TableOfContentsDialog.prototype.getModuleName = function () {\n return 'TableOfContentsDialog';\n };\n /*tslint:disable max-func-body-length*/\n /**\n * @private\n */\n TableOfContentsDialog.prototype.initTableOfContentDialog = function (locale) {\n var instance = this;\n var ownerId = this.owner.owner.containerId;\n var id = ownerId + '_toc_dialog';\n this.target = createElement('div', { id: id, className: 'e-de-toc-dlg-container' });\n this.owner.owner.element.appendChild(this.target);\n // tslint:disable-next-line:max-line-length\n var generalDiv = createElement('div', { id: 'general_div', className: 'e-de-toc-dlg-sub-container' });\n this.target.appendChild(generalDiv);\n // tslint:disable-next-line:max-line-length\n var genLabel = createElement('div', { id: ownerId + '_genLabel', className: 'e-de-toc-dlg-main-heading', styles: 'margin-bottom: 13px;', innerHTML: locale.getConstant('General') });\n generalDiv.appendChild(genLabel);\n // tslint:disable-next-line:max-line-length\n var leftGeneralDiv = createElement('div', { id: 'left_general', styles: 'float:left;position:relative;' });\n generalDiv.appendChild(leftGeneralDiv);\n // tslint:disable-next-line:max-line-length\n var rightGeneralDiv = createElement('div', { styles: 'position:relative;', className: 'e-de-toc-dlg-right-general-div' });\n generalDiv.appendChild(rightGeneralDiv);\n // tslint:disable-next-line:max-line-length\n var leftBottomGeneralDiv = createElement('div', { id: 'leftBottom_general', styles: 'float:left;position:absolute;top:210px;' });\n generalDiv.appendChild(leftBottomGeneralDiv);\n // tslint:disable-next-line:max-line-length\n var rightBottomGeneralDiv = createElement('div', { className: 'e-de-toc-dlg-right-sub-container', styles: 'float:right;' });\n generalDiv.appendChild(rightBottomGeneralDiv);\n // tslint:disable-next-line:max-line-length\n var pageNumberDiv = createElement('div', { id: 'pageNumber_div', className: 'e-de-toc-dlg-sub-container' });\n var pageNumber = createElement('input', {\n attrs: { 'type': 'checkbox' }, id: this.target.id + '_pageNumber'\n });\n pageNumberDiv.appendChild(pageNumber);\n // tslint:disable-next-line:max-line-length\n var rightAlignDiv = createElement('div', { id: 'rightAlign_div', className: 'e-de-toc-dlg-sub-container' });\n var rightAlign = createElement('input', {\n attrs: { 'type': 'checkbox' }, id: this.target.id + '_rightAlign'\n });\n rightAlignDiv.appendChild(rightAlign);\n // tslint:disable-next-line:max-line-length\n this.pageNumber = new CheckBox({ label: locale.getConstant('Show page numbers'), checked: true, change: this.changePageNumberValue });\n // tslint:disable-next-line:max-line-length\n this.rightAlign = new CheckBox({ label: locale.getConstant('Right align page numbers'), checked: true, change: this.changeRightAlignValue });\n this.pageNumber.appendTo(pageNumber);\n this.rightAlign.appendTo(rightAlign);\n var tabDiv = createElement('div', { id: 'tab_div', className: 'e-de-toc-dlg-tab-div' });\n // tslint:disable-next-line:max-line-length\n var tabLeaderLabelDiv = createElement('div', { id: 'tabLeaderLabel_div' });\n // tslint:disable-next-line:max-line-length\n var tabLeaderLabel = createElement('label', { id: ownerId + '_tabLeaderLabel', className: 'e-de-toc-dlg-heading', innerHTML: locale.getConstant('Tab leader:') });\n tabLeaderLabelDiv.appendChild(tabLeaderLabel);\n var tabLeaderDiv = createElement('div', { id: 'tabLeader_div' });\n var tabLeader = createElement('select', {\n id: ownerId + '_tabLeader',\n innerHTML: ''\n });\n tabLeaderDiv.appendChild(tabLeader);\n tabDiv.appendChild(tabLeaderLabelDiv);\n tabDiv.appendChild(tabLeaderDiv);\n leftGeneralDiv.appendChild(pageNumberDiv);\n leftGeneralDiv.appendChild(rightAlignDiv);\n leftGeneralDiv.appendChild(tabDiv);\n this.tabLeader = new DropDownList({ width: 210 });\n this.tabLeader.appendTo(tabLeader);\n var hyperlink = createElement('input', {\n attrs: { 'type': 'checkbox' }, id: this.target.id + '_hyperlink'\n });\n rightGeneralDiv.appendChild(hyperlink);\n this.hyperlink = new CheckBox({ label: locale.getConstant('Use hyperlinks instead of page numbers'), checked: true });\n this.hyperlink.appendTo(hyperlink);\n // tslint:disable-next-line:max-line-length\n var showDiv = createElement('div', { id: 'show_div', className: 'e-de-toc-dlg-style-label' });\n // tslint:disable-next-line:max-line-length\n var showLevelLabelDiv = createElement('div', { id: 'showLevelLabel_div', className: 'e-de-toc-dlg-show-level-div' });\n // tslint:disable-next-line:max-line-length\n var showLevelLabel = createElement('label', { id: ownerId + '_showLevelLabel', className: 'e-de-toc-dlg-heading', innerHTML: locale.getConstant('Show levels:') });\n showLevelLabelDiv.appendChild(showLevelLabel);\n // tslint:disable-next-line:max-line-length\n var showLevelDiv = createElement('div', { id: 'showLevel_div', className: 'e-de-toc-dlg-showlevel-div' });\n // tslint:disable-next-line:max-line-length\n var showLevel = createElement('input', { id: ownerId + '_showLevel', attrs: { 'type': 'text' } });\n showLevelDiv.appendChild(showLevel);\n showDiv.appendChild(showLevelLabelDiv);\n showDiv.appendChild(showLevelDiv);\n rightGeneralDiv.appendChild(showDiv);\n this.showLevel = new NumericTextBox({ format: '#', value: 3, min: 1, max: 9, width: 210, change: this.changeShowLevelValue });\n this.showLevel.appendTo(showLevel);\n // tslint:disable-next-line:max-line-length\n var buildTableDiv = createElement('div', { id: 'buildTable_div', className: 'e-de-toc-dlg-sub-container' });\n // tslint:disable-next-line:max-line-length\n var buildTableLabel = createElement('div', { id: ownerId + '_buildTableLabel', className: 'e-de-toc-dlg-main-heading e-de-toc-dlg-build-table', styles: 'margin-bottom: 13px;', innerHTML: locale.getConstant('Build table of contents from:') });\n leftBottomGeneralDiv.appendChild(buildTableDiv);\n leftBottomGeneralDiv.appendChild(buildTableLabel);\n var style = createElement('input', {\n attrs: { 'type': 'checkbox' }, id: this.target.id + '_style',\n });\n leftBottomGeneralDiv.appendChild(style);\n this.style = new CheckBox({ label: locale.getConstant('Styles'), checked: true, change: this.changeStyleValue });\n this.style.appendTo(style);\n var table = createElement('TABLE', { styles: 'margin-top:3px;' });\n var tr1 = createElement('tr');\n var td1 = createElement('td', { styles: 'width:120px;padding-left:10px;' });\n var availableLabel = createElement('label', {\n // tslint:disable-next-line:max-line-length\n innerHTML: locale.getConstant('Available Styles:'), className: 'e-de-toc-dlg-main-heading e-de-toc-dlg-sub-level-heading', id: this.target.id + '_availableLabel'\n });\n td1.appendChild(availableLabel);\n var td2 = createElement('td');\n var tocLabel = createElement('label', {\n innerHTML: locale.getConstant('TOC level:'), className: 'e-de-toc-dlg-main-heading e-de-toc-dlg-sub-level-heading',\n id: this.target.id + '_tocLabel'\n });\n td2.appendChild(tocLabel);\n tr1.appendChild(td1);\n tr1.appendChild(td2);\n table.appendChild(tr1);\n // tslint:disable-next-line:max-line-length\n var tableDiv = createElement('div', { id: 'table_div', className: 'e-de-toc-table-div' });\n var table1 = createElement('TABLE');\n var tr2 = createElement('tr');\n var td3 = createElement('td');\n var heading1Label = createElement('label', {\n innerHTML: locale.getConstant('Heading 1'),\n className: 'e-de-toc-dlg-sub-heading', id: this.target.id + '_heading1Label'\n });\n td3.appendChild(heading1Label);\n var td4 = createElement('td');\n this.heading1 = createElement('input', { id: '_heading1', className: 'e-input e-de-toc-dlg-toc-level' });\n this.heading1.value = '1';\n this.heading1.addEventListener('keyup', this.changeStyle);\n td4.appendChild(this.heading1);\n tr2.appendChild(td3);\n tr2.appendChild(td4);\n var tr3 = createElement('tr');\n var td5 = createElement('td');\n var heading2Label = createElement('label', {\n innerHTML: locale.getConstant('Heading 2'),\n className: 'e-de-toc-dlg-sub-heading', id: this.target.id + '_heading2Label'\n });\n td5.appendChild(heading2Label);\n var td6 = createElement('td');\n this.heading2 = createElement('input', { id: '_heading2', className: 'e-input e-de-toc-dlg-toc-level' });\n this.heading2.value = '2';\n this.heading2.addEventListener('keyup', this.changeStyle);\n td6.appendChild(this.heading2);\n tr3.appendChild(td5);\n tr3.appendChild(td6);\n var tr4 = createElement('tr');\n var td7 = createElement('td');\n var heading3Label = createElement('label', {\n innerHTML: locale.getConstant('Heading 3'),\n className: 'e-de-toc-dlg-sub-heading', id: this.target.id + '_heading3Label'\n });\n td7.appendChild(heading3Label);\n var td8 = createElement('td');\n this.heading3 = createElement('input', { id: '_heading3', className: 'e-input e-de-toc-dlg-toc-level' });\n this.heading3.value = '3';\n this.heading3.addEventListener('keyup', this.changeStyle);\n td8.appendChild(this.heading3);\n tr4.appendChild(td7);\n tr4.appendChild(td8);\n var tr5 = createElement('tr');\n var td9 = createElement('td');\n var heading4Label = createElement('label', {\n innerHTML: locale.getConstant('Heading 4'),\n className: 'e-de-toc-dlg-sub-heading', id: this.target.id + '_heading4Label'\n });\n td9.appendChild(heading4Label);\n var td10 = createElement('td');\n this.heading4 = createElement('input', { id: '_heading4', className: 'e-input e-de-toc-dlg-toc-level' });\n this.heading4.addEventListener('keyup', this.changeStyle);\n td10.appendChild(this.heading4);\n tr5.appendChild(td9);\n tr5.appendChild(td10);\n var tr6 = createElement('tr');\n var td11 = createElement('td');\n var heading5Label = createElement('label', {\n innerHTML: locale.getConstant('Heading 5'),\n className: 'e-de-toc-dlg-sub-heading', id: this.target.id + '_heading5Label'\n });\n td11.appendChild(heading5Label);\n var td12 = createElement('td');\n this.heading5 = createElement('input', { id: '_heading5', className: 'e-input e-de-toc-dlg-toc-level' });\n this.heading5.addEventListener('keyup', this.changeStyle);\n td12.appendChild(this.heading5);\n tr6.appendChild(td11);\n tr6.appendChild(td12);\n var tr7 = createElement('tr');\n var td13 = createElement('td');\n var heading6Label = createElement('label', {\n innerHTML: locale.getConstant('Heading 6'),\n className: 'e-de-toc-dlg-sub-heading', id: this.target.id + '_heading6Label'\n });\n td13.appendChild(heading6Label);\n var td14 = createElement('td');\n this.heading6 = createElement('input', { id: '_heading6', className: 'e-input e-de-toc-dlg-toc-level' });\n this.heading6.addEventListener('keyup', this.changeStyle);\n td14.appendChild(this.heading6);\n tr7.appendChild(td13);\n tr7.appendChild(td14);\n var tr8 = createElement('tr');\n var td15 = createElement('td');\n var heading7Label = createElement('label', {\n innerHTML: locale.getConstant('Heading 7'),\n className: 'e-de-toc-dlg-sub-heading', id: this.target.id + '_heading7Label'\n });\n td15.appendChild(heading7Label);\n var td16 = createElement('td');\n this.heading7 = createElement('input', { id: '_heading7', className: 'e-input e-de-toc-dlg-toc-level' });\n this.heading7.addEventListener('keyup', this.changeStyle);\n td16.appendChild(this.heading7);\n tr8.appendChild(td15);\n tr8.appendChild(td16);\n var tr9 = createElement('tr');\n var td17 = createElement('td');\n var heading8Label = createElement('label', {\n innerHTML: locale.getConstant('Heading 8'),\n className: 'e-de-toc-dlg-sub-heading', id: this.target.id + '_heading8Label'\n });\n td17.appendChild(heading8Label);\n var td18 = createElement('td');\n this.heading8 = createElement('input', { id: '_heading8', className: 'e-input e-de-toc-dlg-toc-level' });\n this.heading8.addEventListener('keyup', this.changeStyle);\n td18.appendChild(this.heading8);\n tr9.appendChild(td17);\n tr9.appendChild(td18);\n var tr10 = createElement('tr');\n var td19 = createElement('td');\n var heading9Label = createElement('label', {\n innerHTML: locale.getConstant('Heading 9'),\n className: 'e-de-toc-dlg-sub-heading', id: this.target.id + '_heading9Label'\n });\n td19.appendChild(heading9Label);\n var td20 = createElement('td');\n this.heading9 = createElement('input', { id: '_heading9', className: 'e-input e-de-toc-dlg-toc-level' });\n this.heading9.addEventListener('keyup', this.changeStyle);\n td20.appendChild(this.heading9);\n tr10.appendChild(td19);\n tr10.appendChild(td20);\n var tr12 = createElement('tr');\n var td23 = createElement('td');\n var normalLabel = createElement('label', {\n innerHTML: locale.getConstant('Normal'),\n className: 'e-de-toc-dlg-sub-heading', id: this.target.id + '_normalLabel'\n });\n td23.appendChild(normalLabel);\n var td24 = createElement('td');\n this.normal = createElement('input', { id: '_normal', className: 'e-input e-de-toc-dlg-toc-level' });\n this.normal.addEventListener('keyup', this.changeHeadingStyle);\n td24.appendChild(this.normal);\n tr12.appendChild(td23);\n tr12.appendChild(td24);\n table1.appendChild(tr2);\n table1.appendChild(tr3);\n table1.appendChild(tr4);\n table1.appendChild(tr5);\n table1.appendChild(tr6);\n table1.appendChild(tr7);\n table1.appendChild(tr8);\n table1.appendChild(tr9);\n table1.appendChild(tr10);\n table1.appendChild(tr12);\n tableDiv.appendChild(table1);\n var stylesLevelDiv = createElement('div', { className: 'e-de-toc-styles-table-div' });\n stylesLevelDiv.appendChild(table);\n stylesLevelDiv.appendChild(tableDiv);\n leftBottomGeneralDiv.appendChild(stylesLevelDiv);\n //leftBottomGeneralDiv.appendChild(table); leftBottomGeneralDiv.appendChild(tableDiv);\n var fieldsDiv = createElement('div', { id: 'fields_div', styles: 'display: flex;' });\n leftBottomGeneralDiv.appendChild(fieldsDiv);\n var outDiv = createElement('div', { id: 'out_div' });\n // tslint:disable-next-line:max-line-length\n var outlineDiv = createElement('div', { id: 'outline_div', className: 'e-de-toc-dlg-sub-container e-de-toc-dlg-outline-levels' });\n var outline = createElement('input', {\n attrs: { 'type': 'checkbox' }, id: '_outline'\n });\n outlineDiv.appendChild(outline);\n outDiv.appendChild(outlineDiv);\n fieldsDiv.appendChild(outDiv);\n this.outline = new CheckBox({ label: locale.getConstant('Outline levels'), checked: true });\n this.outline.appendTo(outline);\n var resetButtonDiv = createElement('div', { className: 'e-de-toc-reset-button' });\n fieldsDiv.appendChild(resetButtonDiv);\n var resetElement = createElement('button', { innerHTML: 'Reset', id: 'reset' });\n resetButtonDiv.appendChild(resetElement);\n var resetButton = new Button({ cssClass: 'e-btn e-flat' });\n resetButton.appendTo(resetElement);\n resetElement.addEventListener('click', this.reset);\n // tslint:disable-next-line:max-line-length\n var tocStylesDiv = createElement('div', { id: 'tocStyles_div', className: 'e-de-toc-dlg-sub-container' });\n // tslint:disable-next-line:max-line-length\n var tocStylesLabel = createElement('div', {\n id: ownerId + '_tocStylesLabel', className: 'e-de-toc-dlg-main-heading e-de-toc-dlg-styles',\n innerHTML: locale.getConstant('Styles:')\n });\n rightBottomGeneralDiv.appendChild(tocStylesDiv);\n rightBottomGeneralDiv.appendChild(tocStylesLabel);\n var textBoxDiv = createElement('div', { className: 'e-de-toc-dlg-style-input' });\n rightBottomGeneralDiv.appendChild(textBoxDiv);\n this.textBoxInput = createElement('input', { className: 'e-input', id: 'toclist' });\n this.textBoxInput.setAttribute('type', 'text');\n textBoxDiv.appendChild(this.textBoxInput);\n var listViewDiv = createElement('div', { className: 'e-de-toc-list-view' });\n var styleValues = ['TOC 1', 'TOC 2', 'TOC 3', 'TOC 4', 'TOC 5', 'TOC 6', 'TOC 7', 'TOC 8', 'TOC 9'];\n this.listViewInstance = new ListView({ dataSource: styleValues, cssClass: 'e-toc-list-view' });\n this.listViewInstance.appendTo(listViewDiv);\n this.listViewInstance.addEventListener('select', this.selectHandler);\n rightBottomGeneralDiv.appendChild(listViewDiv);\n var modifyButtonDiv = createElement('div', { className: 'e-de-toc-modify-button' });\n rightBottomGeneralDiv.appendChild(modifyButtonDiv);\n var modifyElement = createElement('button', { innerHTML: 'Modify', id: 'modify' });\n modifyButtonDiv.appendChild(modifyElement);\n var modifyButton = new Button({ cssClass: 'e-btn e-flat' });\n modifyButton.appendTo(modifyElement);\n modifyElement.addEventListener('click', this.showStyleDialog);\n };\n /**\n * @private\n */\n TableOfContentsDialog.prototype.show = function () {\n var localValue = new L10n('documenteditor', this.owner.owner.defaultLocale);\n localValue.setLocale(this.owner.owner.locale);\n setCulture(this.owner.owner.locale);\n if (!this.target) {\n this.initTableOfContentDialog(localValue);\n }\n this.owner.dialog.header = localValue.getConstant('Table of Contents');\n this.owner.dialog.width = 'auto';\n this.owner.dialog.height = 'auto';\n this.owner.dialog.content = this.target;\n this.owner.dialog.beforeOpen = this.loadTableofContentDialog;\n this.owner.dialog.close = this.closeTableOfContentDialog;\n this.owner.dialog.buttons = [{\n click: this.applyTableOfContentProperties,\n buttonModel: { content: localValue.getConstant('Ok'), cssClass: 'e-flat e-toc-okay', isPrimary: true }\n },\n {\n click: this.onCancelButtonClick,\n buttonModel: { content: localValue.getConstant('Cancel'), cssClass: 'e-flat e-toc-cancel' }\n }];\n this.owner.dialog.dataBind();\n this.owner.dialog.show();\n };\n TableOfContentsDialog.prototype.checkLevel = function () {\n if (this.heading1.value !== '') {\n this.showLevel.value = 1;\n }\n if (this.heading2.value !== '') {\n this.showLevel.value = 2;\n }\n if (this.heading3.value !== '') {\n this.showLevel.value = 3;\n }\n if (this.heading4.value !== '') {\n this.showLevel.value = 4;\n }\n if (this.heading5.value !== '') {\n this.showLevel.value = 5;\n }\n if (this.heading6.value !== '') {\n this.showLevel.value = 6;\n }\n if (this.heading7.value !== '') {\n this.showLevel.value = 7;\n }\n if (this.heading8.value !== '') {\n this.showLevel.value = 8;\n }\n if (this.heading9.value !== '') {\n this.showLevel.value = 9;\n }\n };\n TableOfContentsDialog.prototype.getElementValue = function (element) {\n switch (element) {\n case this.heading1:\n return '1';\n case this.heading2:\n return '2';\n case this.heading3:\n return '3';\n case this.heading4:\n return '4';\n case this.heading5:\n return '5';\n case this.heading6:\n return '6';\n case this.heading7:\n return '7';\n case this.heading8:\n return '8';\n case this.heading9:\n return '9';\n default:\n return '1';\n }\n };\n TableOfContentsDialog.prototype.getHeadingLevel = function (index) {\n switch (index) {\n case 1:\n return parseInt(this.heading1.value);\n case 2:\n return parseInt(this.heading2.value);\n case 3:\n return parseInt(this.heading3.value);\n case 4:\n return parseInt(this.heading4.value);\n case 5:\n return parseInt(this.heading5.value);\n case 6:\n return parseInt(this.heading6.value);\n case 7:\n return parseInt(this.heading7.value);\n case 8:\n return parseInt(this.heading8.value);\n case 9:\n return parseInt(this.heading9.value);\n default:\n return 0;\n }\n };\n TableOfContentsDialog.prototype.applyLevelSetting = function (tocSettings) {\n tocSettings.levelSettings = {};\n var headingPrefix = 'Heading ';\n var newStartLevel = 0;\n var newEndLevel = 0;\n var isEndLevel = false;\n for (var i = 1; i <= tocSettings.endLevel; i++) {\n var outlineLevel = this.getHeadingLevel(i);\n if (i === outlineLevel) {\n if (newStartLevel === 0) {\n newStartLevel = i;\n isEndLevel = false;\n }\n if (!isEndLevel) {\n newEndLevel = i;\n }\n }\n else {\n isEndLevel = true;\n if (outlineLevel !== 0) {\n var headingStyle = headingPrefix + i.toString();\n tocSettings.levelSettings[headingStyle] = outlineLevel;\n }\n }\n }\n tocSettings.startLevel = newStartLevel;\n tocSettings.endLevel = newEndLevel;\n if (this.normal.value !== '') {\n tocSettings.levelSettings['Normal'] = +this.normal.value;\n }\n };\n /**\n * @private\n */\n TableOfContentsDialog.prototype.destroy = function () {\n if (this.pageNumber) {\n this.pageNumber.destroy();\n this.pageNumber = undefined;\n }\n if (this.rightAlign) {\n this.rightAlign.destroy();\n this.rightAlign = undefined;\n }\n if (this.tabLeader) {\n this.tabLeader.destroy();\n this.tabLeader = undefined;\n }\n if (this.showLevel) {\n this.showLevel.destroy();\n this.showLevel = undefined;\n }\n if (this.hyperlink) {\n this.hyperlink.destroy();\n this.hyperlink = undefined;\n }\n if (this.style) {\n this.style.destroy();\n this.style = undefined;\n }\n if (this.outline) {\n this.outline.destroy();\n this.outline = undefined;\n }\n if (this.listViewInstance) {\n this.listViewInstance.destroy();\n this.listViewInstance = undefined;\n }\n this.heading1 = undefined;\n this.heading2 = undefined;\n this.heading3 = undefined;\n this.heading4 = undefined;\n this.heading5 = undefined;\n this.heading6 = undefined;\n this.heading7 = undefined;\n this.heading8 = undefined;\n this.heading9 = undefined;\n this.normal = undefined;\n this.textBoxInput = undefined;\n this.owner = undefined;\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var count = 0; count < this.target.childNodes.length; count++) {\n this.target.removeChild(this.target.childNodes[count]);\n count--;\n }\n this.target = undefined;\n }\n };\n return TableOfContentsDialog;\n}());\nexport { TableOfContentsDialog };\n","import { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { createElement, L10n, setCulture } from '@syncfusion/ej2-base';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { CheckBox, RadioButton } from '@syncfusion/ej2-buttons';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { WSectionFormat } from './../../implementation/format/index';\nimport { Tab } from '@syncfusion/ej2-navigations';\n/**\n * The Page setup dialog is used to modify formatting of selected sections.\n */\nvar PageSetupDialog = /** @class */ (function () {\n /**\n * @private\n */\n function PageSetupDialog(viewer) {\n var _this = this;\n this.isPortrait = true;\n /**\n * @private\n */\n this.loadPageSetupDialog = function () {\n _this.owner.updateFocus();\n var sectionFormat = _this.owner.selection.sectionFormat;\n _this.topMarginBox.value = sectionFormat.topMargin;\n _this.leftMarginBox.value = sectionFormat.leftMargin;\n _this.bottomMarginBox.value = sectionFormat.bottomMargin;\n _this.rightMarginBox.value = sectionFormat.rightMargin;\n _this.widthBox.value = sectionFormat.pageWidth;\n _this.heightBox.value = sectionFormat.pageHeight;\n _this.checkBox1.checked = sectionFormat.differentOddAndEvenPages;\n _this.checkBox2.checked = sectionFormat.differentFirstPage;\n _this.headerBox.value = sectionFormat.headerDistance;\n _this.footerBox.value = sectionFormat.footerDistance;\n if (_this.widthBox.value > _this.heightBox.value) {\n _this.landscape.checked = true;\n }\n else {\n _this.portrait.checked = true;\n }\n };\n /**\n * @private\n */\n this.closePageSetupDialog = function () {\n _this.unWireEventsAndBindings();\n _this.owner.updateFocus();\n };\n /**\n * @private\n */\n this.onCancelButtonClick = function () {\n _this.owner.dialog.hide();\n _this.unWireEventsAndBindings();\n };\n /**\n * @private\n */\n this.keyUpInsertPageSettings = function (event) {\n if (event.keyCode === 13) {\n _this.applyPageSetupProperties();\n }\n };\n /**\n * @private\n */\n this.applyPageSetupProperties = function () {\n var sectionFormat = new WSectionFormat();\n sectionFormat.bottomMargin = _this.bottomMarginBox.value;\n sectionFormat.topMargin = _this.topMarginBox.value;\n sectionFormat.leftMargin = _this.leftMarginBox.value;\n sectionFormat.rightMargin = _this.rightMarginBox.value;\n sectionFormat.pageWidth = _this.widthBox.value;\n sectionFormat.pageHeight = _this.heightBox.value;\n sectionFormat.differentOddAndEvenPages = _this.checkBox1.checked;\n sectionFormat.differentFirstPage = _this.checkBox2.checked;\n sectionFormat.headerDistance = _this.headerBox.value;\n sectionFormat.footerDistance = _this.footerBox.value;\n _this.owner.owner.editorModule.onApplySectionFormat(undefined, sectionFormat);\n _this.owner.dialog.hide();\n };\n /**\n * @private\n */\n this.changeByPaperSize = function (event) {\n var value = event.value;\n var sectionFormat = _this.owner.selection.sectionFormat;\n var width = sectionFormat.pageWidth;\n var height = sectionFormat.pageHeight;\n if (_this.owner.selection.sectionFormat.pageWidth > _this.owner.selection.sectionFormat.pageHeight || _this.landscape.checked) {\n _this.isPortrait = false;\n }\n else {\n _this.isPortrait = true;\n }\n if (value === 'letter') {\n if (_this.isPortrait) {\n _this.widthBox.value = 612;\n _this.heightBox.value = 792;\n }\n else {\n _this.widthBox.value = 792;\n _this.heightBox.value = 612;\n }\n }\n else if (value === 'tabloid') {\n if (_this.isPortrait) {\n _this.widthBox.value = 792;\n _this.heightBox.value = 1224;\n }\n else {\n _this.widthBox.value = 1224;\n _this.heightBox.value = 792;\n }\n }\n else if (value === 'legal') {\n if (_this.isPortrait) {\n _this.widthBox.value = 612;\n _this.heightBox.value = 1008;\n }\n else {\n _this.widthBox.value = 1008;\n _this.heightBox.value = 612;\n }\n }\n else if (value === 'statement') {\n if (_this.isPortrait) {\n _this.widthBox.value = 392;\n _this.heightBox.value = 612;\n }\n else {\n _this.widthBox.value = 612;\n _this.heightBox.value = 392;\n }\n }\n else if (value === 'executive') {\n if (_this.isPortrait) {\n _this.widthBox.value = 522;\n _this.heightBox.value = 756;\n }\n else {\n _this.widthBox.value = 756;\n _this.heightBox.value = 522;\n }\n }\n else if (value === 'a3') {\n if (_this.isPortrait) {\n _this.widthBox.value = 841.9;\n _this.heightBox.value = 1190.55;\n }\n else {\n _this.widthBox.value = 1190.55;\n _this.heightBox.value = 841.9;\n }\n }\n else if (value === 'a4') {\n if (_this.isPortrait) {\n _this.widthBox.value = 595.3;\n _this.heightBox.value = 841.9;\n }\n else {\n _this.widthBox.value = 841.9;\n _this.heightBox.value = 595.3;\n }\n }\n else if (value === 'a5') {\n if (_this.isPortrait) {\n _this.widthBox.value = 419.55;\n _this.heightBox.value = 595.3;\n }\n else {\n _this.widthBox.value = 595.3;\n _this.heightBox.value = 419.55;\n }\n }\n else if (value === 'b4') {\n if (_this.isPortrait) {\n _this.widthBox.value = 728.5;\n _this.heightBox.value = 1031.8;\n }\n else {\n _this.widthBox.value = 1031.8;\n _this.heightBox.value = 728.5;\n }\n }\n else if (value === 'b5') {\n if (_this.isPortrait) {\n _this.widthBox.value = 515.9;\n _this.heightBox.value = 728.5;\n }\n else {\n _this.widthBox.value = 728.5;\n _this.heightBox.value = 515.9;\n }\n }\n else if (value === 'customsize') {\n if (_this.isPortrait) {\n _this.widthBox.value = 515.9;\n _this.heightBox.value = 728.5;\n }\n else {\n _this.widthBox.value = 728.5;\n _this.heightBox.value = 515.9;\n }\n }\n };\n /**\n * @private\n */\n this.onPortrait = function (event) {\n _this.landscape.checked = false;\n var width = _this.widthBox.value;\n var height = _this.heightBox.value;\n if (width > height) {\n _this.widthBox.value = height;\n _this.heightBox.value = width;\n }\n };\n /**\n * @private\n */\n this.onLandscape = function (event) {\n _this.portrait.checked = false;\n var width = _this.widthBox.value;\n var height = _this.heightBox.value;\n if (width < height) {\n _this.widthBox.value = height;\n _this.heightBox.value = width;\n }\n };\n /**\n * @private\n */\n this.unWireEventsAndBindings = function () {\n _this.paperSize.value = undefined;\n _this.topMarginBox.value = undefined;\n _this.bottomMarginBox.value = undefined;\n _this.leftMarginBox.value = undefined;\n _this.rightMarginBox.value = undefined;\n _this.headerBox.value = undefined;\n _this.footerBox.value = undefined;\n _this.widthBox.value = undefined;\n _this.heightBox.value = undefined;\n _this.checkBox1.checked = false;\n _this.checkBox2.checked = false;\n _this.portrait.checked = false;\n _this.landscape.checked = false;\n };\n this.owner = viewer;\n }\n PageSetupDialog.prototype.getModuleName = function () {\n return 'PageSetupDialog';\n };\n /**\n * @private\n */\n PageSetupDialog.prototype.initPageSetupDialog = function (locale) {\n var id = this.owner.owner.containerId + '_pagesetup_dialog';\n this.target = createElement('div', { id: id, className: 'e-de-pagesetup-dlg-container' });\n this.owner.owner.element.appendChild(this.target);\n var ejtabContainer = createElement('div', { id: this.target.id + '_MarginTabContainer' });\n this.target.appendChild(ejtabContainer);\n this.marginTab = createElement('div', {\n id: this.target.id + '_marginPropertyTab', styles: 'position: relative;width:400px;'\n });\n this.paperTab = createElement('div', {\n id: this.target.id + '_paperSizePropertyTab', styles: 'position: relative;width:400px;'\n });\n this.layoutTab = createElement('div', {\n id: this.target.id + '_CellPropertiesDialogTab', styles: 'position: relative;width:400px;'\n });\n // tslint:disable-next-line:max-line-length\n var ejtab = createElement('div', { id: this.target.id + '_PageSetupDialogTab', className: 'e-de-page-setup-ppty-tab' });\n var headerContainer = createElement('div', { className: 'e-tab-header' });\n var marginHeader = createElement('div', {\n id: this.target.id + '_marginHeader', innerHTML: locale.getConstant('Margin')\n });\n var paperHeader = createElement('div', {\n id: this.target.id + '_paperHeader', innerHTML: locale.getConstant('Paper')\n });\n var layoutHeader = createElement('div', {\n id: this.target.id + '_layoutHeader', innerHTML: locale.getConstant('Layout')\n });\n headerContainer.appendChild(marginHeader);\n headerContainer.appendChild(paperHeader);\n headerContainer.appendChild(layoutHeader);\n var contentContainer = createElement('div', { className: 'e-content' });\n var marginContent = createElement('div', { id: this.target.id + '_marginContent' });\n var paperContent = createElement('div', { id: this.target.id + '_paperContent' });\n var layoutContent = createElement('div', { id: this.target.id + '_layoutContent' });\n marginContent.appendChild(this.marginTab);\n paperContent.appendChild(this.paperTab);\n layoutContent.appendChild(this.layoutTab);\n contentContainer.appendChild(marginContent);\n contentContainer.appendChild(paperContent);\n contentContainer.appendChild(layoutContent);\n ejtab.appendChild(headerContainer);\n ejtab.appendChild(contentContainer);\n ejtabContainer.appendChild(ejtab);\n this.initMarginProperties(this.marginTab, locale);\n this.initPaperSizeProperties(this.paperTab, locale);\n this.initLayoutProperties(this.layoutTab, locale);\n var tabObj = new Tab({}, ejtab);\n this.target.addEventListener('keyup', this.keyUpInsertPageSettings);\n var marginTabHeader = tabObj.element.getElementsByClassName('e-item e-toolbar-item')[0];\n var marginTabHeaderItem = marginTabHeader.getElementsByClassName('e-tab-wrap')[0];\n marginTabHeaderItem.classList.add('e-de-page-setup-dlg-margin-tab-header');\n };\n /**\n * @private\n */\n PageSetupDialog.prototype.initMarginProperties = function (element, locale) {\n var marginDiv = createElement('div', {\n id: 'margin_div',\n className: 'e-de-page-setup-dlg-sub-container', styles: 'height:135px;'\n });\n // tslint:disable-next-line:max-line-length\n var leftMarginDiv = createElement('div', { id: 'left_margin', className: 'e-de-page-setup-dlg-left-sub-container' });\n marginDiv.appendChild(leftMarginDiv);\n // tslint:disable-next-line:max-line-length\n var rightMarginDiv = createElement('div', { className: 'e-de-page-setup-dlg-right-sub-container' });\n marginDiv.appendChild(rightMarginDiv);\n var topLabel = createElement('label', {\n innerHTML: locale.getConstant('Top'), className: 'e-de-page-setup-dlg-sub-header',\n id: this.target.id + '_TopLabel', styles: 'padding-top:0px;width:190px;'\n });\n var topTextBox = createElement('input', {\n attrs: { 'type': 'text' }, id: this.target.id + '_Top'\n });\n var bottomBoxLabel = createElement('label', {\n innerHTML: locale.getConstant('Bottom'),\n className: 'e-de-page-setup-dlg-sub-title-header', id: this.target.id + '_bottomLabel'\n });\n var bottomTextBox = createElement('input', {\n attrs: { 'type': 'text' },\n id: this.target.id + '_bottom'\n });\n leftMarginDiv.appendChild(topLabel);\n leftMarginDiv.appendChild(topTextBox);\n leftMarginDiv.appendChild(bottomBoxLabel);\n leftMarginDiv.appendChild(bottomTextBox);\n var leftBoxLabel = createElement('label', {\n innerHTML: locale.getConstant('Left'), className: 'e-de-page-setup-dlg-sub-header', styles: 'padding-top:0px;width:190px;',\n id: this.target.id + '_leftLabel'\n });\n var leftTextBox = createElement('input', {\n attrs: { 'type': 'text' }, id: this.target.id + '_left'\n });\n var rightLabel = createElement('label', {\n innerHTML: locale.getConstant('Right'),\n id: this.target.id + '_rightLabel', className: 'e-de-page-setup-dlg-sub-title-header'\n });\n var rightTextBox = createElement('input', {\n attrs: { 'type': 'text' },\n id: this.target.id + '_right'\n });\n rightMarginDiv.appendChild(leftBoxLabel);\n rightMarginDiv.appendChild(leftTextBox);\n rightMarginDiv.appendChild(rightLabel);\n rightMarginDiv.appendChild(rightTextBox);\n element.appendChild(marginDiv);\n this.topMarginBox = new NumericTextBox({ value: 71, width: 170, decimals: 2 });\n this.topMarginBox.appendTo(topTextBox);\n this.leftMarginBox = new NumericTextBox({ value: 73, width: 170, decimals: 2 });\n this.leftMarginBox.appendTo(leftTextBox);\n this.bottomMarginBox = new NumericTextBox({ value: 72, width: 170, decimals: 2 });\n this.bottomMarginBox.appendTo(bottomTextBox);\n this.rightMarginBox = new NumericTextBox({ value: 74, width: 170, decimals: 2 });\n this.rightMarginBox.appendTo(rightTextBox);\n // tslint:disable-next-line:max-line-length\n var orientationDiv = createElement('div', { id: 'orientation_div', className: 'e-de-page-setup-dlg-sub-container-port' });\n // tslint:disable-next-line:max-line-length\n var orientationLabeldiv = createElement('div', { id: '_orientationLabelDiv', className: 'e-de-page-setup-dlg-sub-label', innerHTML: locale.getConstant('Orientation') });\n var orientationPropDiv = createElement('div', { id: '_orientationPropDiv', styles: 'display: flex;', className: 'e-de-page-setup-dlg-orientation-prop' });\n var portraitDiv = createElement('div', { id: '_portraitDiv', styles: 'padding-right: 30px;' });\n var portrait = createElement('input', {\n attrs: { 'type': 'radiobutton' }, id: this.target.id + '_portrait'\n });\n var landscapeDiv = createElement('div', { id: '_landscapeDiv' });\n var landscape = createElement('input', {\n attrs: { 'type': 'radiobutton' }, id: this.target.id + '_landscape'\n });\n portraitDiv.appendChild(portrait);\n landscapeDiv.appendChild(landscape);\n orientationPropDiv.appendChild(portraitDiv);\n orientationPropDiv.appendChild(landscapeDiv);\n orientationDiv.appendChild(orientationLabeldiv);\n orientationDiv.appendChild(orientationPropDiv);\n this.portrait = new RadioButton({ label: locale.getConstant('Portrait'), checked: true, change: this.onPortrait });\n this.landscape = new RadioButton({ label: locale.getConstant('Landscape'), change: this.onLandscape });\n this.portrait.appendTo(portrait);\n this.landscape.appendTo(landscape);\n element.appendChild(orientationDiv);\n };\n /**\n * @private\n */\n PageSetupDialog.prototype.initPaperSizeProperties = function (element, locale) {\n var sizeDiv = createElement('div', {\n id: 'size_div',\n className: 'e-de-page-setup-dlg-sub-size-container'\n });\n // tslint:disable-next-line:max-line-length\n var leftSizeDiv = createElement('div', { id: 'left_size', className: 'e-de-page-setup-dlg-left-sub-container' });\n sizeDiv.appendChild(leftSizeDiv);\n // tslint:disable-next-line:max-line-length\n var rightSizeDiv = createElement('div', { className: 'e-de-page-setup-dlg-right-sub-container' });\n sizeDiv.appendChild(rightSizeDiv);\n var widthLabel = createElement('label', {\n innerHTML: locale.getConstant('Width'), className: 'e-de-page-setup-dlg-sub-header',\n id: this.target.id + '_widthLabel', styles: 'padding-top:0px;width:190px;'\n });\n var widthTextBox = createElement('input', {\n attrs: { 'type': 'text' }, id: this.target.id + '_Width'\n });\n leftSizeDiv.appendChild(widthLabel);\n leftSizeDiv.appendChild(widthTextBox);\n var heightLabel = createElement('label', {\n innerHTML: locale.getConstant('Height'), className: 'e-de-page-setup-dlg-sub-header', styles: 'padding-top:0px;width:190px;',\n id: this.target.id + '_heightLabel'\n });\n var heightTextBox = createElement('input', {\n attrs: { 'type': 'text' }, id: this.target.id + '_height'\n });\n rightSizeDiv.appendChild(heightLabel);\n rightSizeDiv.appendChild(heightTextBox);\n element.appendChild(sizeDiv);\n this.widthBox = new NumericTextBox({ value: 612, width: 170, decimals: 2 });\n this.widthBox.appendTo(widthTextBox);\n this.heightBox = new NumericTextBox({ value: 792, width: 170, decimals: 2 });\n this.heightBox.appendTo(heightTextBox);\n // tslint:disable-next-line:max-line-length\n var paperSizeDiv = createElement('div', { id: '_paperSizeDiv', styles: 'height:37px;', className: 'e-de-page-setup-dlg-sub-container' });\n var paperSize = createElement('select', {\n id: this.target.id + '_papersize', styles: 'width:170px;padding-bottom: 20px;',\n innerHTML: ''\n });\n paperSizeDiv.appendChild(paperSize);\n this.paperSize = new DropDownList({ change: this.changeByPaperSize, width: '170px' });\n this.paperSize.appendTo(paperSize);\n element.appendChild(paperSizeDiv);\n };\n /**\n * @private\n */\n PageSetupDialog.prototype.initLayoutProperties = function (element, locale) {\n // tslint:disable-next-line:max-line-length\n var layoutDiv = createElement('div', { id: '_layoutDiv', className: 'e-de-page-setup-dlg-layout-sub-container', });\n // tslint:disable-next-line:max-line-length\n var firstPageDiv = createElement('div', { id: '_firstPageDiv', styles: 'height: 27px;', className: 'e-de-page-setup-dlg-first-page-prop' });\n var checkBox1 = createElement('input', {\n attrs: { 'type': 'checkbox' }, id: this.target.id + '_oddoreven'\n });\n firstPageDiv.appendChild(checkBox1);\n // tslint:disable-next-line:max-line-length\n var oddOrEvenDiv = createElement('div', { id: '_oddOrEvenDiv', styles: 'height: 27px;', className: 'e-de-page-setup-dlg-odd-or-even-prop' });\n var checkBox2 = createElement('input', {\n attrs: { 'type': 'checkbox' }, id: this.target.id + '_even'\n });\n oddOrEvenDiv.appendChild(checkBox2);\n layoutDiv.appendChild(firstPageDiv);\n layoutDiv.appendChild(oddOrEvenDiv);\n this.checkBox1 = new CheckBox({ label: locale.getConstant('Different odd and even') });\n this.checkBox2 = new CheckBox({ label: locale.getConstant('Different first page') });\n this.checkBox1.appendTo(checkBox1);\n this.checkBox2.appendTo(checkBox2);\n element.appendChild(layoutDiv);\n // tslint:disable-next-line:max-line-length\n var textLabelDiv = createElement('div', { id: '_textLabelDiv', className: 'e-de-page-setup-dlg-sub-label' });\n var textLabel = createElement('label', {\n innerHTML: locale.getConstant('From edge'), id: this.target.id + '_textLabel'\n });\n textLabelDiv.appendChild(textLabel);\n element.appendChild(textLabelDiv);\n // tslint:disable-next-line:max-line-length\n var propertyDiv = createElement('div', { id: '_headerFooeterPropDiv', className: 'e-de-page-setup-dlg-sub-container', styles: 'height: 65px;' });\n // tslint:disable-next-line:max-line-length\n var leftLayoutDiv = createElement('div', { id: '_leftLayoutDiv', className: 'e-de-page-setup-dlg-left-layout-container' });\n propertyDiv.appendChild(leftLayoutDiv);\n // tslint:disable-next-line:max-line-length\n var rightLayoutDiv = createElement('div', { className: 'e-de-page-setup-dlg-right-layout-container' });\n propertyDiv.appendChild(rightLayoutDiv);\n var headerLabel = createElement('label', {\n innerHTML: locale.getConstant('Header'), className: 'e-de-page-setup-dlg-sub-header',\n id: this.target.id + '_headerLabel', styles: 'padding-top:0px;width:190px;'\n });\n var headerBox = createElement('input', {\n attrs: { 'type': 'text' }, id: this.target.id + '_header'\n });\n leftLayoutDiv.appendChild(headerLabel);\n leftLayoutDiv.appendChild(headerBox);\n var footerLabel = createElement('label', {\n innerHTML: locale.getConstant('Footer'), className: 'e-de-page-setup-dlg-sub-header', styles: 'padding-top:0px;width:190px;',\n id: this.target.id + '_footerLabel'\n });\n var footerBox = createElement('input', {\n attrs: { 'type': 'text' }, id: this.target.id + '_footer'\n });\n rightLayoutDiv.appendChild(footerLabel);\n rightLayoutDiv.appendChild(footerBox);\n element.appendChild(propertyDiv);\n this.headerBox = new NumericTextBox({ value: 612, width: 170, decimals: 2 });\n this.headerBox.appendTo(headerBox);\n this.footerBox = new NumericTextBox({ value: 792, width: 170, decimals: 2 });\n this.footerBox.appendTo(footerBox);\n };\n /**\n * @private\n */\n PageSetupDialog.prototype.show = function () {\n var localValue = new L10n('documenteditor', this.owner.owner.defaultLocale);\n localValue.setLocale(this.owner.owner.locale);\n setCulture(this.owner.owner.locale);\n if (!this.target) {\n this.initPageSetupDialog(localValue);\n }\n this.owner.dialog.header = localValue.getConstant('Page Setup');\n this.owner.dialog.width = 'auto';\n this.owner.dialog.height = 'auto';\n this.owner.dialog.content = this.target;\n this.owner.dialog.beforeOpen = this.loadPageSetupDialog;\n this.owner.dialog.close = this.closePageSetupDialog;\n this.owner.dialog.buttons = [{\n click: this.applyPageSetupProperties,\n buttonModel: { content: localValue.getConstant('Ok'), cssClass: 'e-flat e-layout-ppty-okay', isPrimary: true }\n },\n {\n click: this.onCancelButtonClick,\n buttonModel: { content: localValue.getConstant('Cancel'), cssClass: 'e-flat e-layout-ppty-cancel' }\n }];\n this.owner.dialog.dataBind();\n this.owner.dialog.show();\n };\n /**\n * @private\n */\n PageSetupDialog.prototype.destroy = function () {\n if (this.topMarginBox) {\n this.topMarginBox.destroy();\n this.topMarginBox = undefined;\n }\n if (this.leftMarginBox) {\n this.leftMarginBox.destroy();\n this.leftMarginBox = undefined;\n }\n if (this.bottomMarginBox) {\n this.bottomMarginBox.destroy();\n this.bottomMarginBox = undefined;\n }\n if (this.rightMarginBox) {\n this.rightMarginBox.destroy();\n this.rightMarginBox = undefined;\n }\n if (this.headerBox) {\n this.headerBox.destroy();\n this.headerBox = undefined;\n }\n if (this.footerBox) {\n this.footerBox.destroy();\n this.footerBox = undefined;\n }\n if (this.widthBox) {\n this.widthBox.destroy();\n this.widthBox = undefined;\n }\n if (this.heightBox) {\n this.heightBox.destroy();\n this.heightBox = undefined;\n }\n if (this.paperSize) {\n this.paperSize.destroy();\n this.paperSize = undefined;\n }\n if (this.checkBox1) {\n this.checkBox1.destroy();\n this.checkBox1 = undefined;\n }\n if (this.checkBox2) {\n this.checkBox2.destroy();\n this.checkBox2 = undefined;\n }\n if (this.portrait) {\n this.portrait.destroy();\n this.portrait = undefined;\n }\n if (this.landscape) {\n this.landscape.destroy();\n this.landscape = undefined;\n }\n this.owner = undefined;\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var s = 0; s < this.target.childNodes.length; s++) {\n this.target.removeChild(this.target.childNodes[s]);\n s--;\n }\n this.target = undefined;\n }\n };\n return PageSetupDialog;\n}());\nexport { PageSetupDialog };\n","import { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { createElement, L10n, setCulture } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { WParagraphFormat } from '../index';\n/**\n * The Paragraph dialog is used to modify formatting of selected paragraphs.\n */\nvar ParagraphDialog = /** @class */ (function () {\n /**\n * @private\n */\n function ParagraphDialog(viewer) {\n var _this = this;\n //paragraph Format properties\n this.leftIndent = undefined;\n this.rightIndent = undefined;\n this.beforeSpacing = undefined;\n this.afterSpacing = undefined;\n this.textAlignment = undefined;\n this.firstLineIndent = undefined;\n this.lineSpacingIn = undefined;\n this.lineSpacingType = undefined;\n this.paragraphFormat = undefined;\n /**\n * @private\n */\n this.keyUpParagraphSettings = function (event) {\n if (event.keyCode === 13) {\n _this.applyParagraphFormat();\n }\n };\n this.changeBeforeSpacing = function (event) {\n _this.beforeSpacing = event.value;\n };\n this.changeAfterSpacing = function (event) {\n _this.afterSpacing = event.value;\n };\n this.changeLeftIndent = function (event) {\n _this.leftIndent = event.value;\n };\n this.changeRightIndent = function (event) {\n _this.rightIndent = event.value;\n };\n this.changeLineSpacingValue = function (event) {\n _this.lineSpacingIn = event.value;\n };\n this.changeFirstLineIndent = function (event) {\n _this.firstLineIndent = event.value;\n };\n this.changeByTextAlignment = function (args) {\n _this.textAlignment = args.value;\n };\n /**\n * @private\n */\n this.changeByValue = function (event) {\n var paragraphFormat = _this.owner.selection.paragraphFormat;\n switch (_this.special.index) {\n case 0:\n if (paragraphFormat.firstLineIndent !== 0) {\n _this.byIn.value = 0;\n }\n break;\n case 1:\n if (paragraphFormat.firstLineIndent === 0 || isNullOrUndefined(paragraphFormat.firstLineIndent)) {\n _this.byIn.value = 0.1;\n }\n else if (paragraphFormat.firstLineIndent < 0) {\n _this.byIn.value = -(paragraphFormat.firstLineIndent);\n }\n break;\n case 2:\n if (paragraphFormat.firstLineIndent === 0 || isNullOrUndefined(paragraphFormat.firstLineIndent)) {\n paragraphFormat.firstLineIndent = -0.1;\n }\n else if (paragraphFormat.firstLineIndent > 0) {\n _this.byIn.value = -(paragraphFormat.firstLineIndent);\n }\n break;\n }\n };\n /**\n * @private\n */\n this.changeBySpacing = function (event) {\n if (isNullOrUndefined(_this.lineSpacing)) {\n return;\n }\n switch (_this.lineSpacing.index) {\n case 0:\n _this.lineSpacingType = 'AtLeast';\n _this.atIn.value = 12;\n break;\n case 1:\n _this.lineSpacingType = 'Exactly';\n _this.atIn.value = 12;\n break;\n case 2:\n _this.lineSpacingType = 'Multiple';\n _this.atIn.value = 1;\n break;\n }\n };\n /* tslint:enable */\n /**\n * @private\n */\n this.loadParagraphDialog = function () {\n var selectionFormat;\n if (_this.paragraphFormat) {\n selectionFormat = _this.paragraphFormat;\n }\n else {\n selectionFormat = _this.owner.selection.paragraphFormat;\n }\n var alignValue = _this.alignment.index;\n if (selectionFormat.textAlignment === 'Center') {\n alignValue = 0;\n }\n else if (selectionFormat.textAlignment === 'Left') {\n alignValue = 1;\n }\n else if (selectionFormat.textAlignment === 'Right') {\n alignValue = 2;\n }\n else {\n alignValue = 3;\n }\n _this.alignment.index = alignValue;\n _this.beforeSpacingIn.value = selectionFormat.beforeSpacing;\n _this.afterSpacingIn.value = selectionFormat.afterSpacing;\n _this.leftIndentIn.value = selectionFormat.leftIndent;\n _this.rightIndentIn.value = selectionFormat.rightIndent;\n _this.byIn.value = selectionFormat.firstLineIndent;\n var lineSpaceValue = _this.lineSpacing.index;\n if (selectionFormat.lineSpacingType === 'AtLeast') {\n lineSpaceValue = 0;\n }\n else if (selectionFormat.lineSpacingType === 'Exactly') {\n lineSpaceValue = 1;\n }\n else {\n lineSpaceValue = 2;\n }\n _this.lineSpacing.index = lineSpaceValue;\n _this.atIn.value = selectionFormat.lineSpacing;\n if (_this.owner.selection.caret.style.display !== 'none') {\n _this.owner.selection.caret.style.display = 'none';\n }\n };\n /**\n * @private\n */\n this.applyParagraphFormat = function () {\n var paraFormat;\n var isApply;\n if (_this.paragraphFormat) {\n paraFormat = _this.paragraphFormat;\n isApply = false;\n }\n else {\n paraFormat = new WParagraphFormat();\n isApply = true;\n }\n if (!isNullOrUndefined(_this.beforeSpacing)) {\n paraFormat.beforeSpacing = _this.beforeSpacing;\n }\n if (!isNullOrUndefined(_this.afterSpacing)) {\n paraFormat.afterSpacing = _this.afterSpacing;\n }\n if (!isNullOrUndefined(_this.lineSpacingType)) {\n paraFormat.lineSpacingType = _this.lineSpacingType;\n }\n if (!isNullOrUndefined(_this.leftIndent)) {\n paraFormat.leftIndent = _this.leftIndent;\n }\n if (!isNullOrUndefined(_this.rightIndent)) {\n paraFormat.rightIndent = _this.rightIndent;\n }\n if (!isNullOrUndefined(_this.lineSpacingIn)) {\n paraFormat.lineSpacing = _this.lineSpacingIn;\n }\n if (!isNullOrUndefined(_this.firstLineIndent)) {\n paraFormat.firstLineIndent = _this.firstLineIndent;\n }\n if (!isNullOrUndefined(_this.textAlignment)) {\n paraFormat.textAlignment = _this.textAlignment;\n }\n if (isApply) {\n _this.onParagraphFormat(paraFormat);\n }\n else {\n _this.owner.owner.styleDialogModule.updateParagraphFormat();\n }\n _this.owner.dialog.hide();\n };\n /**\n * @private\n */\n this.closeParagraphDialog = function () {\n _this.leftIndent = undefined;\n _this.afterSpacing = undefined;\n _this.beforeSpacing = undefined;\n _this.firstLineIndent = undefined;\n _this.textAlignment = undefined;\n _this.rightIndent = undefined;\n _this.lineSpacingIn = undefined;\n _this.lineSpacingType = undefined;\n _this.paragraphFormat = undefined;\n _this.owner.dialog.hide();\n _this.owner.updateFocus();\n };\n this.owner = viewer;\n }\n /**\n * @private\n */\n ParagraphDialog.prototype.getModuleName = function () {\n return 'ParagraphDialog';\n };\n /*tslint:disable max-func-body-length*/\n /**\n * @private\n */\n ParagraphDialog.prototype.initParagraphDialog = function (locale) {\n var instance = this;\n var ownerId = this.owner.owner.containerId;\n var id = ownerId + '_paragraph_dialog';\n this.target = createElement('div', { id: id, className: 'e-de-para-dlg-container' });\n // tslint:disable-next-line:max-line-length\n var div = createElement('div', { id: 'property_div', styles: 'width:400px;' });\n var generalDiv = createElement('div', { id: 'genral_div', styles: 'width:200px;height:85px;', className: 'e-de-para-dlg-sub-container' });\n // tslint:disable-next-line:max-line-length\n var genLabel = createElement('div', { id: ownerId + '_genLabel', className: 'e-de-para-dlg-heading', innerHTML: locale.getConstant('General') });\n var alignLabel = createElement('div', { id: ownerId + '_AlignLabel', className: 'e-de-dlg-sub-header', innerHTML: locale.getConstant('Alignment') });\n var alignment = createElement('select', {\n id: ownerId + '_Alignment',\n innerHTML: ''\n });\n generalDiv.appendChild(genLabel);\n generalDiv.appendChild(alignLabel);\n generalDiv.appendChild(alignment);\n // tslint:disable-next-line:max-line-length\n var indentionDiv = createElement('div', { id: 'indention_div', styles: 'width: 400px;height: 150px;', className: 'e-de-para-dlg-sub-container' });\n var leftIndentionDiv = createElement('div', { id: 'left_indention', styles: 'float:left;position:relative;' });\n indentionDiv.appendChild(leftIndentionDiv);\n // tslint:disable-next-line:max-line-length\n var rightIndentionDiv = createElement('div', { className: 'e-de-para-dlg-right-sub-container', styles: 'float:right;position:relative;' });\n indentionDiv.appendChild(rightIndentionDiv);\n // tslint:disable-next-line:max-line-length\n var spacingDiv = createElement('div', { id: 'spacing_div', styles: 'width: 400px;height: 150px;', className: 'e-de-para-dlg-sub-container' });\n var leftSpacingDiv = createElement('div', { id: 'left_spacing', styles: 'float:left;position:relative;' });\n spacingDiv.appendChild(leftSpacingDiv);\n // tslint:disable-next-line:max-line-length\n var rightSpacingDiv = createElement('div', { className: 'e-de-para-dlg-right-sub-container', styles: 'float:right;position:relative;' });\n spacingDiv.appendChild(rightSpacingDiv);\n // tslint:disable-next-line:max-line-length\n var indentLabel = createElement('div', {\n id: ownerId + '_indentLabel', className: 'e-de-para-dlg-heading', innerHTML: locale.getConstant('Indentation')\n });\n var beforeTextLabel = createElement('div', {\n id: ownerId + '_bfTextLabel',\n className: 'e-de-dlg-sub-header', innerHTML: locale.getConstant('Before Text')\n });\n // tslint:disable-next-line:max-line-length\n var leftIndent = createElement('input', { id: ownerId + '_leftIndent', attrs: { 'type': 'text' } });\n var specialLabel = createElement('div', { id: ownerId + '_specialLabel', className: 'e-de-dlg-sub-header', innerHTML: locale.getConstant('Special') });\n var special = createElement('select', {\n id: ownerId + '_special',\n innerHTML: ' '\n });\n leftIndentionDiv.appendChild(indentLabel);\n leftIndentionDiv.appendChild(beforeTextLabel);\n leftIndentionDiv.appendChild(leftIndent);\n leftIndentionDiv.appendChild(specialLabel);\n leftIndentionDiv.appendChild(special);\n // tslint:disable-next-line:max-line-length\n var afterTextLabel = createElement('div', { id: ownerId + '_afTextLabel', className: 'e-de-dlg-sub-header', innerHTML: locale.getConstant('After Text') });\n var rightIndent = createElement('input', { id: ownerId + '_rightIndent', attrs: { 'type': 'text' } });\n // tslint:disable-next-line:max-line-length\n var byLabel = createElement('label', { id: ownerId + '_byLabel', className: 'e-de-dlg-sub-header', innerHTML: locale.getConstant('By') });\n var by = createElement('input', { id: ownerId + '_By', attrs: { 'type': 'text' } });\n rightIndentionDiv.appendChild(afterTextLabel);\n rightIndentionDiv.appendChild(rightIndent);\n rightIndentionDiv.appendChild(byLabel);\n rightIndentionDiv.appendChild(by);\n // tslint:disable-next-line:max-line-length\n var spaceLabel = createElement('div', { innerHTML: locale.getConstant('Spacing'), className: 'e-de-para-dlg-heading', id: ownerId + '_spaceLabel' });\n var beforeLabel = createElement('div', { className: 'e-de-dlg-sub-header', innerHTML: locale.getConstant('Before'), id: ownerId + '_beforeLabel' });\n // tslint:disable-next-line:max-line-length\n var beforeSpacing = createElement('input', { id: ownerId + '_beforeSpacing', attrs: { 'type': 'text' } });\n var lineSpaceLabel = createElement('div', { id: ownerId + '_lineSpaceLabel', className: 'e-de-dlg-sub-header', innerHTML: locale.getConstant('Line Spacing') });\n // tslint:disable-next-line:max-line-length\n var lineSpacing = createElement('select', {\n id: ownerId + '_lineSpacing', styles: 'width:180px;',\n innerHTML: ''\n });\n leftSpacingDiv.appendChild(spaceLabel);\n leftSpacingDiv.appendChild(beforeLabel);\n leftSpacingDiv.appendChild(beforeSpacing);\n leftSpacingDiv.appendChild(lineSpaceLabel);\n leftSpacingDiv.appendChild(lineSpacing);\n // tslint:disable-next-line:max-line-length\n var afterLabel = createElement('div', { innerHTML: locale.getConstant('After'), className: 'e-de-dlg-sub-header', id: ownerId + '_afterLabel' });\n var afterSpacing = createElement('input', { id: ownerId + '_afterSpacing', attrs: { 'type': 'text' } });\n // tslint:disable-next-line:max-line-length\n var atLabel = createElement('div', { innerHTML: locale.getConstant('At'), id: ownerId + '_atLabel', className: 'e-de-dlg-sub-header' });\n var lineSpacingAt = createElement('input', { id: ownerId + '_lineSpacingAt', attrs: { 'type': 'text' } });\n rightSpacingDiv.appendChild(afterLabel);\n rightSpacingDiv.appendChild(afterSpacing);\n rightSpacingDiv.appendChild(atLabel);\n rightSpacingDiv.appendChild(lineSpacingAt);\n div.appendChild(generalDiv);\n div.appendChild(indentionDiv);\n div.appendChild(spacingDiv);\n this.target.appendChild(div);\n this.leftIndentIn = new NumericTextBox({\n format: 'n1', value: 0, min: -1584, max: 1584, width: 180, enablePersistence: false, change: this.changeLeftIndent\n });\n this.leftIndentIn.appendTo(leftIndent);\n this.rightIndentIn = new NumericTextBox({\n format: 'n1', value: 0, min: -1584, max: 1584, width: 180, enablePersistence: false, change: this.changeRightIndent\n });\n this.rightIndentIn.appendTo(rightIndent);\n this.byIn = new NumericTextBox({\n format: 'n1', value: 0, min: 0, max: 1584, width: 180, enablePersistence: false, change: this.changeFirstLineIndent\n });\n this.byIn.appendTo(by);\n this.beforeSpacingIn = new NumericTextBox({\n format: 'n1', value: 0, min: 0, max: 1584, width: 180, step: 6, enablePersistence: false,\n change: this.changeBeforeSpacing\n });\n this.beforeSpacingIn.appendTo(beforeSpacing);\n this.afterSpacingIn = new NumericTextBox({\n format: 'n1', value: 0, min: 0, max: 1584, width: 180, step: 6, enablePersistence: false,\n change: this.changeAfterSpacing\n });\n this.afterSpacingIn.appendTo(afterSpacing);\n this.atIn = new NumericTextBox({\n format: 'n1', value: 0, min: 1, max: 1584, width: 180, step: 0.5, enablePersistence: false, change: this.changeLineSpacingValue\n });\n this.special = new DropDownList({ change: this.changeByValue, width: 180 });\n this.special.appendTo(special);\n this.lineSpacing = new DropDownList({ change: this.changeBySpacing, width: '180px' });\n this.lineSpacing.appendTo(lineSpacing);\n this.alignment = new DropDownList({ width: 180, change: this.changeByTextAlignment });\n this.alignment.appendTo(alignment);\n this.atIn.appendTo(lineSpacingAt);\n this.target.addEventListener('keyup', instance.keyUpParagraphSettings);\n };\n /**\n * Applies Paragraph Format\n * @param {WParagraphFormat} paragraphFormat\n * @private\n */\n ParagraphDialog.prototype.onParagraphFormat = function (paragraphFormat) {\n this.owner.owner.editorModule.initHistory('ParagraphFormat');\n var selection = this.owner.selection;\n this.owner.owner.isShiftingEnabled = true;\n if (this.owner.selection.isEmpty) {\n this.owner.owner.editorModule.applyParaFormatProperty(selection.start.paragraph, undefined, paragraphFormat, false);\n }\n else {\n this.owner.owner.editorModule.updateSelectionParagraphFormatting('ParagraphFormat', paragraphFormat, false);\n }\n this.owner.owner.editorModule.reLayout(selection);\n };\n /**\n * @private\n */\n ParagraphDialog.prototype.show = function (paragraphFormat) {\n if (paragraphFormat) {\n this.paragraphFormat = paragraphFormat;\n }\n var local = new L10n('documenteditor', this.owner.owner.defaultLocale);\n local.setLocale(this.owner.owner.locale);\n setCulture(this.owner.owner.locale);\n if (!this.target) {\n this.initParagraphDialog(local);\n }\n this.loadParagraphDialog();\n this.owner.dialog.header = 'Paragraph';\n this.owner.dialog.content = this.target;\n this.owner.dialog.height = 'auto';\n this.owner.dialog.width = 'auto';\n this.owner.dialog.buttons = [{\n click: this.applyParagraphFormat,\n buttonModel: { content: local.getConstant('Ok'), cssClass: 'e-flat e-para-okay', isPrimary: true }\n },\n {\n click: this.closeParagraphDialog,\n buttonModel: { content: local.getConstant('Cancel'), cssClass: 'e-flat e-para-cancel' }\n }];\n this.owner.dialog.beforeOpen = this.owner.updateFocus;\n this.owner.dialog.close = this.owner.updateFocus;\n this.owner.dialog.dataBind();\n this.owner.dialog.show();\n };\n /**\n * @private\n */\n ParagraphDialog.prototype.destroy = function () {\n if (this.afterSpacingIn) {\n this.afterSpacingIn.destroy();\n this.afterSpacingIn = undefined;\n }\n if (this.beforeSpacingIn) {\n this.beforeSpacingIn.destroy();\n this.beforeSpacingIn = undefined;\n }\n if (this.leftIndentIn) {\n this.leftIndentIn.destroy();\n this.leftIndentIn = undefined;\n }\n if (this.rightIndentIn) {\n this.rightIndentIn.destroy();\n this.rightIndentIn = undefined;\n }\n if (this.byIn) {\n this.byIn.destroy();\n this.byIn = undefined;\n }\n if (this.atIn) {\n this.atIn.destroy();\n this.atIn = undefined;\n }\n if (this.alignment) {\n this.alignment.change = undefined;\n this.alignment.destroy();\n }\n this.alignment = undefined;\n if (this.lineSpacing) {\n this.lineSpacing.change = undefined;\n this.lineSpacing.destroy();\n }\n this.lineSpacing = undefined;\n if (this.special) {\n this.special.change = undefined;\n this.special.destroy();\n }\n this.special = undefined;\n this.owner = undefined;\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var q = 0; q < this.target.childNodes.length; q++) {\n this.target.removeChild(this.target.childNodes[q]);\n q--;\n }\n this.target = undefined;\n }\n };\n return ParagraphDialog;\n}());\nexport { ParagraphDialog };\n","import { WCharacterFormat, WParagraphFormat } from '../format/index';\nimport { WList } from '../list/list';\nimport { WAbstractList } from '../list/abstract-list';\nimport { WListLevel } from '../list/list-level';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * List view model implementation\n * @private\n */\nvar ListViewModel = /** @class */ (function () {\n /**\n * @private\n */\n function ListViewModel() {\n this.listIn = undefined;\n this.levelNumberIn = undefined;\n /**\n * @private\n */\n this.dialog = undefined;\n this.levelNumber = 0;\n }\n Object.defineProperty(ListViewModel.prototype, \"levelNumber\", {\n /**\n * @private\n */\n get: function () {\n return this.levelNumberIn;\n },\n /**\n * @private\n */\n set: function (value) {\n this.levelNumberIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ListViewModel.prototype, \"list\", {\n /**\n * @private\n */\n get: function () {\n return this.listIn;\n },\n /**\n * @private\n */\n set: function (value) {\n if (isNullOrUndefined(value)) {\n this.createList();\n }\n else {\n this.listIn = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ListViewModel.prototype, \"listLevel\", {\n /**\n * @private\n */\n get: function () {\n if (!isNullOrUndefined(this.list) && this.levelNumber >= 0 && this.levelNumber < 9) {\n if (!isNullOrUndefined(this.dialog.owner.getAbstractListById(this.list.abstractListId))) {\n if (this.dialog.owner.getAbstractListById(this.list.abstractListId).levels.length <= this.levelNumber) {\n this.addListLevels();\n }\n return this.dialog.owner.getAbstractListById(this.list.abstractListId).levels[this.levelNumber];\n }\n else {\n this.dialog.owner.lists.push(this.list);\n var abstractList = this.list.abstractList;\n if (!this.list.abstractList) {\n abstractList = new WAbstractList();\n abstractList.abstractListId = this.list.abstractListId;\n }\n var listLevelAdv = new WListLevel(abstractList);\n listLevelAdv.characterFormat = new WCharacterFormat(listLevelAdv);\n listLevelAdv.paragraphFormat = new WParagraphFormat(listLevelAdv);\n listLevelAdv.paragraphFormat.leftIndent = (1) * 48;\n listLevelAdv.paragraphFormat.firstLineIndent = -24;\n listLevelAdv.numberFormat = '%' + (1).toString() + '.';\n listLevelAdv.listLevelPattern = 'UpRoman';\n listLevelAdv.followCharacter = 'Tab';\n listLevelAdv.startAt = 1;\n listLevelAdv.restartLevel = 1;\n this.dialog.owner.abstractLists.push(abstractList);\n return this.dialog.owner.getAbstractListById(this.list.abstractListId).levels[0];\n // return this.dialog.owner.getAbstractListById(this.list.abstractListId).levels.getItem(0);\n }\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ListViewModel.prototype, \"listLevelPattern\", {\n /**\n * @private\n */\n get: function () {\n if (!isNullOrUndefined(this.listLevel)) {\n return this.listLevel.listLevelPattern;\n }\n return 'Arabic';\n },\n /**\n * @private\n */\n set: function (value) {\n if (!isNullOrUndefined(this.listLevel)) {\n this.listLevel.listLevelPattern = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ListViewModel.prototype, \"followCharacter\", {\n /**\n * @private\n */\n get: function () {\n if (!isNullOrUndefined(this.listLevel)) {\n return this.listLevel.followCharacter;\n }\n return 'None';\n },\n /**\n * @private\n */\n set: function (value) {\n if (!isNullOrUndefined(this.listLevel)) {\n this.listLevel.followCharacter = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n ListViewModel.prototype.createList = function () {\n this.list = new WList();\n this.list.listId = this.dialog.owner.lists.length + 1;\n var abstractList = new WAbstractList();\n abstractList.abstractListId = this.dialog.owner.abstractLists.length + 1;\n this.list.abstractListId = abstractList.abstractListId;\n this.dialog.owner.lists.push(this.list);\n var listLevel = new WListLevel(abstractList);\n listLevel.paragraphFormat = new WParagraphFormat(listLevel);\n listLevel.paragraphFormat.leftIndent = 48;\n listLevel.paragraphFormat.firstLineIndent = -24;\n listLevel.characterFormat = new WCharacterFormat(listLevel);\n listLevel.numberFormat = '%1.';\n listLevel.startAt = 1;\n abstractList.levels.push(listLevel);\n this.dialog.owner.abstractLists.push(abstractList);\n };\n ListViewModel.prototype.addListLevels = function () {\n if (!isNullOrUndefined(this.list) && !isNullOrUndefined(this.list.abstractListId)) {\n for (var i = this.dialog.owner.getAbstractListById(this.list.abstractListId).levels.length; i < 9; i++) {\n var listLevelAdv = new WListLevel(this.dialog.owner.getAbstractListById(this.list.abstractListId));\n listLevelAdv.characterFormat = new WCharacterFormat(listLevelAdv);\n listLevelAdv.paragraphFormat = new WParagraphFormat(listLevelAdv);\n listLevelAdv.paragraphFormat.leftIndent = (i + 1) * 48;\n listLevelAdv.paragraphFormat.firstLineIndent = -24;\n listLevelAdv.numberFormat = '%' + (i + 1).toString() + '.';\n listLevelAdv.listLevelPattern = 'Arabic';\n listLevelAdv.followCharacter = 'Tab';\n listLevelAdv.startAt = 1;\n listLevelAdv.restartLevel = i;\n (this.dialog.owner).getAbstractListById(this.list.abstractListId).levels.push(listLevelAdv);\n }\n }\n };\n /**\n * @private\n */\n ListViewModel.prototype.destroy = function () {\n this.list = undefined;\n this.followCharacter = undefined;\n this.levelNumber = undefined;\n this.listLevelPattern = undefined;\n };\n return ListViewModel;\n}());\nexport { ListViewModel };\n","import { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { createElement, L10n, setCulture } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n// tslint:disable-next-line:max-line-length\nimport { WCharacterFormat, WParagraphFormat } from '../format/index';\nimport { WAbstractList } from '../list/abstract-list';\nimport { WLevelOverride } from '../list/level-override';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { Tooltip } from '@syncfusion/ej2-popups';\nimport { ListViewModel } from './list-view-model';\n/**\n * The List dialog is used to create or modify lists.\n */\n/* tslint:disable:no-any */\nvar ListDialog = /** @class */ (function () {\n /**\n * @private\n */\n function ListDialog(viewer) {\n var _this = this;\n /**\n * @private\n */\n this.dialog = undefined;\n this.target = undefined;\n /**\n * @private\n */\n this.owner = undefined;\n this.viewModel = undefined;\n this.startAt = undefined;\n this.textIndent = undefined;\n this.alignedAt = undefined;\n this.listLevelElement = undefined;\n this.followNumberWith = undefined;\n this.numberStyle = undefined;\n this.numberFormat = undefined;\n this.restartBy = undefined;\n /**\n * @private\n */\n this.isListCharacterFormat = false;\n this.onTextIndentChanged = function (args) {\n _this.viewModel.listLevel.paragraphFormat.leftIndent = args.value;\n };\n this.onStartValueChanged = function (args) {\n _this.viewModel.listLevel.startAt = args.value;\n };\n this.onListLevelValueChanged = function (args) {\n _this.viewModel.levelNumber = parseInt(args.value.slice(args.value.length - 1), 10) - 1;\n if (isNullOrUndefined(_this.listLevel)) {\n return;\n }\n if (isNullOrUndefined(_this.listLevel.characterFormat)) {\n _this.listLevel.characterFormat = new WCharacterFormat(_this.viewModel.listLevel);\n }\n if (!isNullOrUndefined(_this.listLevel.paragraphFormat)) {\n _this.listLevel.paragraphFormat = new WParagraphFormat(_this.viewModel.listLevel);\n }\n _this.updateDialogValues();\n _this.updateRestartLevelBox();\n };\n this.onNumberFormatChanged = function (args) {\n _this.viewModel.listLevel.numberFormat = args.target.value;\n };\n this.onAlignedAtValueChanged = function (args) {\n _this.viewModel.listLevel.paragraphFormat.firstLineIndent = args.value;\n };\n this.onFollowCharacterValueChanged = function (args) {\n if (args.value) {\n _this.viewModel.followCharacter = args.value;\n }\n };\n this.onLevelPatternValueChanged = function (args) {\n _this.viewModel.listLevelPattern = args.value;\n var numberFormat = '%' + (_this.levelNumber + 1).toString();\n // tslint:disable-next-line:max-line-length\n var numberFormatTextBox = document.getElementById(_this.owner.owner.containerId + '_numberFormat');\n if (_this.listLevel.listLevelPattern === 'Bullet') {\n _this.listLevel.numberFormat = '\\uf0b7';\n numberFormatTextBox.value = _this.listLevel.numberFormat;\n _this.listLevel.characterFormat.fontFamily = 'Wingdings';\n }\n else {\n if (_this.listLevel.listLevelPattern === 'None') {\n _this.listLevel.numberFormat = '';\n }\n if (!_this.listLevel.numberFormat.match(numberFormat) && _this.listLevel.listLevelPattern !== 'None') {\n _this.listLevel.numberFormat = numberFormat + '.';\n }\n numberFormatTextBox.value = _this.listLevel.numberFormat;\n }\n };\n this.loadListDialog = function () {\n _this.owner.updateFocus();\n if (isNullOrUndefined(_this.owner.owner)) {\n return;\n }\n _this.viewModel = new ListViewModel();\n _this.viewModel.dialog = _this;\n if (_this.owner.selection.paragraphFormat.listLevelNumber > 0) {\n _this.viewModel.levelNumber = _this.owner.selection.paragraphFormat.listLevelNumber;\n }\n _this.viewModel.list = _this.owner.selection.paragraphFormat.getList();\n if (isNullOrUndefined(_this.listLevel)) {\n return;\n }\n if (isNullOrUndefined(_this.listLevel.characterFormat)) {\n _this.listLevel.characterFormat = new WCharacterFormat(_this.viewModel.listLevel);\n }\n if (isNullOrUndefined(_this.listLevel.paragraphFormat)) {\n _this.listLevel.paragraphFormat = new WParagraphFormat(_this.viewModel.listLevel);\n }\n _this.updateDialogValues();\n if (_this.owner.selection.caret.style.display !== 'none') {\n _this.owner.selection.caret.style.display = 'none';\n }\n };\n this.showFontDialog = function () {\n _this.owner.owner.fontDialogModule.showFontDialog(_this.listLevel.characterFormat);\n };\n this.onApplyList = function () {\n if (!isNullOrUndefined(_this.owner)) {\n _this.owner.selection.paragraphFormat.setList(_this.list);\n }\n _this.owner.dialog2.hide();\n _this.owner.updateFocus();\n };\n this.onCancelButtonClick = function () {\n _this.disposeBindingForListUI();\n _this.owner.dialog2.hide();\n _this.owner.updateFocus();\n _this.isListCharacterFormat = false;\n };\n this.closeListDialog = function () {\n _this.disposeBindingForListUI();\n _this.owner.updateFocus();\n _this.isListCharacterFormat = false;\n };\n this.owner = viewer;\n this.viewModel = new ListViewModel();\n }\n Object.defineProperty(ListDialog.prototype, \"listLevel\", {\n /**\n * @private\n */\n get: function () {\n if (!isNullOrUndefined(this.viewModel)) {\n return this.viewModel.listLevel;\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ListDialog.prototype, \"list\", {\n /**\n * @private\n */\n get: function () {\n if (!isNullOrUndefined(this.viewModel)) {\n return this.viewModel.list;\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ListDialog.prototype, \"levelNumber\", {\n /**\n * @private\n */\n get: function () {\n if (this.listLevel.ownerBase instanceof WLevelOverride) {\n return this.listLevel.ownerBase.levelNumber;\n // tslint:disable-next-line:max-line-length\n }\n else if (this.listLevel.ownerBase instanceof WAbstractList && !isNullOrUndefined(this.listLevel.ownerBase.levels)) {\n return this.listLevel.ownerBase.levels.indexOf(this.listLevel);\n }\n else {\n return -1;\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ListDialog.prototype.getModuleName = function () {\n return 'ListDialog';\n };\n /**\n * @private\n */\n ListDialog.prototype.showListDialog = function () {\n var locale = new L10n('documenteditor', this.owner.owner.defaultLocale);\n locale.setLocale(this.owner.owner.locale);\n setCulture(this.owner.owner.locale);\n if (!this.target) {\n this.initListDialog(locale);\n }\n this.isListCharacterFormat = true;\n this.owner.dialog2.header = locale.getConstant('List');\n this.owner.dialog2.height = 'auto';\n this.owner.dialog2.width = 'auto';\n this.owner.dialog2.content = this.target;\n this.owner.dialog2.buttons = [{\n click: this.showFontDialog,\n buttonModel: { content: locale.getConstant('Font'), cssClass: 'e-flat e-list-dlg-font e-font' }\n }, {\n click: this.onApplyList,\n buttonModel: { content: locale.getConstant('Ok'), cssClass: 'e-flat e-list-dlg', isPrimary: true }\n },\n {\n click: this.onCancelButtonClick,\n buttonModel: { content: locale.getConstant('Cancel'), cssClass: 'e-flat e-list-dlg' }\n }];\n this.owner.dialog2.dataBind();\n this.owner.dialog2.beforeOpen = this.loadListDialog;\n this.owner.dialog2.close = this.closeListDialog;\n this.owner.dialog2.position = { X: 'center', Y: 'top' };\n this.owner.dialog2.show();\n };\n /**\n * Shows the table properties dialog\n * @private\n */\n ListDialog.prototype.initListDialog = function (locale) {\n var instance = this;\n var containerId = this.owner.owner.containerId;\n var id = containerId + '_insert_list';\n this.target = createElement('div', { id: id, className: 'e-de-list-dlg' });\n this.owner.owner.element.appendChild(this.target);\n // tslint:disable-next-line:max-line-length\n var listLevelDiv = createElement('div', { innerHTML: '' });\n this.target.appendChild(listLevelDiv);\n var div = createElement('div');\n // tslint:disable-next-line:max-line-length\n var numberStyleDiv = createElement('div', { innerHTML: '
    ' });\n div.appendChild(numberStyleDiv);\n // tslint:disable-next-line:max-line-length\n var numberFormatDiv = createElement('div', { className: 'e-de-list-dlg-subdiv', innerHTML: '
    ' });\n div.appendChild(numberFormatDiv);\n this.target.appendChild(div);\n // tslint:disable-next-line:max-line-length\n var indentsDiv = createElement('div', { innerHTML: '
    ', });\n this.target.appendChild(indentsDiv);\n var startAtTextBox = document.getElementById(containerId + '_startAt');\n var textIndentAtTextBox = document.getElementById(containerId + '_textIndent');\n var alignedAtTextBox = document.getElementById(containerId + '_alignedAt');\n this.startAt = new NumericTextBox({\n format: '#',\n decimals: 0,\n min: 0,\n max: 50,\n width: '180px',\n enablePersistence: false,\n });\n this.startAt.addEventListener('change', instance.onStartValueChanged);\n this.startAt.appendTo(startAtTextBox);\n this.textIndent = new NumericTextBox({\n format: '#',\n decimals: 0,\n min: 0,\n max: 1584,\n width: '180px',\n step: 4,\n enablePersistence: false\n });\n this.textIndent.addEventListener('change', instance.onTextIndentChanged);\n this.textIndent.appendTo(textIndentAtTextBox);\n this.alignedAt = new NumericTextBox({\n format: '#',\n max: 1584,\n step: 6,\n width: '180px',\n enablePersistence: false\n });\n this.alignedAt.addEventListener('change', instance.onAlignedAtValueChanged);\n this.alignedAt.appendTo(alignedAtTextBox);\n var listLevel = document.getElementById(containerId + '_listLevel');\n this.listLevelElement = new DropDownList({ popupHeight: '150px', width: '180px', change: instance.onListLevelValueChanged });\n this.listLevelElement.appendTo(listLevel);\n var followCharacterElement = document.getElementById(containerId + '_followCharacter');\n this.followNumberWith = new DropDownList({ popupHeight: '150px', width: '180px', change: instance.onFollowCharacterValueChanged });\n this.followNumberWith.appendTo(followCharacterElement);\n var numberStyleEle = document.getElementById(containerId + '_numberStyle');\n this.numberStyle = new DropDownList({ popupHeight: '150px', width: '180px', change: instance.onLevelPatternValueChanged });\n this.numberStyle.appendTo(numberStyleEle);\n this.numberFormat = document.getElementById(containerId + '_numberFormat');\n this.numberFormat.addEventListener('change', instance.onNumberFormatChanged);\n var restartElement = document.getElementById(containerId + '_restartBy');\n this.restartBy = new DropDownList({ popupHeight: '150px', width: '180px' });\n this.restartBy.appendTo(restartElement);\n var button = document.getElementById(containerId + '_list_info');\n this.formatInfoToolTip = new Tooltip({ width: 200 });\n // tslint:disable-next-line:max-line-length\n this.formatInfoToolTip.content = locale.getConstant('listInfo');\n this.formatInfoToolTip.position = 'RightTop';\n this.formatInfoToolTip.appendTo(button);\n };\n ListDialog.prototype.updateRestartLevelBox = function () {\n var containerId = this.owner.owner.containerId;\n var listLevel = document.getElementById(containerId + '_listLevel');\n var restartBy = document.getElementById(containerId + '_restartBy');\n for (var i = 0; i < restartBy.options.length; i) {\n restartBy.options.remove(i);\n }\n if (listLevel.selectedIndex === 0) {\n var option = document.createElement('option');\n option.value = 'No Restart';\n option.innerHTML = 'No Restart';\n restartBy.appendChild(option);\n }\n else {\n for (var i = listLevel.selectedIndex; i > 0; i--) {\n var option_1 = document.createElement('option');\n option_1.value = 'Level ' + i;\n option_1.innerHTML = 'Level ' + i;\n restartBy.appendChild(option_1);\n }\n var option = document.createElement('option');\n option.value = 'No Restart';\n option.innerHTML = 'No Restart';\n restartBy.appendChild(option);\n }\n restartBy.selectedIndex = 0;\n };\n ListDialog.prototype.listPatternConverter = function (listLevelPattern) {\n switch (listLevelPattern) {\n case 'Arabic': return 0;\n case 'UpRoman': return 1;\n case 'LowRoman': return 2;\n case 'UpLetter': return 3;\n case 'LowLetter': return 4;\n case 'Number': return 5;\n case 'LeadingZero': return 6;\n case 'Bullet': return 7;\n case 'Ordinal': return 8;\n case 'OrdinalText': return 9;\n case 'Special': return 10;\n case 'FarEast': return 11;\n default: return 12;\n }\n };\n ListDialog.prototype.followCharacterConverter = function (followCharacter) {\n switch (followCharacter) {\n case 'Tab':\n return 0;\n case 'Space':\n return 1;\n default:\n return 2;\n }\n };\n ListDialog.prototype.updateDialogValues = function () {\n // tslint:disable-next-line:max-line-length\n var restartByTextBox = document.getElementById(this.owner.owner.containerId + '_restartBy');\n this.startAt.value = this.viewModel.listLevel.startAt;\n this.textIndent.value = this.viewModel.listLevel.paragraphFormat.leftIndent;\n this.alignedAt.value = this.viewModel.listLevel.paragraphFormat.firstLineIndent;\n this.followNumberWith.index = this.followCharacterConverter(this.viewModel.followCharacter);\n this.numberFormat.value = this.viewModel.listLevel.numberFormat;\n this.numberStyle.index = this.listPatternConverter(this.viewModel.listLevelPattern);\n this.listLevelElement.index = this.viewModel.levelNumber;\n this.viewModel.levelNumber = this.viewModel.levelNumber;\n };\n ListDialog.prototype.disposeBindingForListUI = function () {\n this.followNumberWith.index = -1;\n this.numberFormat.value = ' ';\n this.numberStyle.index = -1;\n this.listLevelElement.index = -1;\n this.restartBy.index = -1;\n this.viewModel.destroy();\n };\n /**\n * @private\n */\n ListDialog.prototype.destroy = function () {\n if (this.alignedAt) {\n this.alignedAt.destroy();\n }\n this.alignedAt = undefined;\n this.dialog = undefined;\n if (this.followNumberWith) {\n this.followNumberWith.destroy();\n }\n this.followNumberWith = undefined;\n if (this.listLevelElement) {\n this.listLevelElement.destroy();\n }\n this.listLevelElement = undefined;\n if (this.textIndent) {\n this.textIndent.destroy();\n }\n this.textIndent = undefined;\n if (this.startAt) {\n this.startAt.destroy();\n }\n this.startAt = undefined;\n if (this.numberStyle) {\n this.numberStyle.destroy();\n }\n this.numberStyle = undefined;\n this.numberFormat = undefined;\n if (this.restartBy) {\n this.restartBy.destroy();\n }\n this.restartBy = undefined;\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var l = 0; l < this.target.childNodes.length; l++) {\n this.target.removeChild(this.target.childNodes[l]);\n l--;\n }\n this.target = undefined;\n }\n this.owner = undefined;\n this.viewModel = undefined;\n };\n return ListDialog;\n}());\nexport { ListDialog };\n/* tslint:enable:no-any */ \n","import { createElement, isNullOrUndefined, L10n, setCulture } from '@syncfusion/ej2-base';\nimport { DropDownList, ComboBox } from '@syncfusion/ej2-dropdowns';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { WCharacterStyle, WParagraphStyle } from '../../implementation/format/style';\nimport { BulletsAndNumberingDialog } from './index';\nimport { WAbstractList } from '../list/abstract-list';\nimport { ColorPicker } from '@syncfusion/ej2-inputs';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\n/**\n * The Style dialog is used to create or modify styles.\n */\nvar StyleDialog = /** @class */ (function () {\n /**\n * @private\n */\n function StyleDialog(viewer) {\n var _this = this;\n this.target = undefined;\n this.styleType = undefined;\n this.styleBasedOn = undefined;\n this.styleParagraph = undefined;\n this.onlyThisDocument = undefined;\n this.template = undefined;\n this.fontFamily = undefined;\n this.fontSize = undefined;\n this.characterFormat = undefined;\n this.paragraphFormat = undefined;\n /* tslint:disable-next-line:no-any */\n this.openDialog = function (args) {\n switch (args.item.id) {\n case 'style_font':\n _this.showFontDialog();\n break;\n case 'style_paragraph':\n _this.showParagraphDialog();\n break;\n case 'style_numbering':\n _this.showNumberingBulletDialog();\n break;\n }\n };\n this.setBoldProperty = function () {\n _this.characterFormat.bold = !_this.characterFormat.bold;\n _this.fontButtonClicked(undefined);\n };\n this.setItalicProperty = function () {\n _this.characterFormat.italic = !_this.characterFormat.italic;\n _this.fontButtonClicked(undefined);\n };\n this.setUnderlineProperty = function () {\n _this.characterFormat.underline = _this.characterFormat.underline === 'None' ? 'Single' : 'None';\n _this.fontButtonClicked(undefined);\n };\n /* tslint:disable-next-line:no-any */\n this.fontButtonClicked = function (args) {\n if (_this.characterFormat.bold) {\n if (!_this.bold.classList.contains('e-active')) {\n _this.bold.classList.add('e-active');\n }\n }\n else {\n if (_this.bold.classList.contains('e-active')) {\n _this.bold.classList.remove('e-active');\n }\n }\n if (_this.characterFormat.italic) {\n if (!_this.italic.classList.contains('e-active')) {\n _this.italic.classList.add('e-active');\n }\n }\n else {\n if (_this.italic.classList.contains('e-active')) {\n _this.italic.classList.remove('e-active');\n }\n }\n if (_this.characterFormat.underline !== undefined && _this.characterFormat.underline !== 'None') {\n if (!_this.underline.classList.contains('e-active')) {\n _this.underline.classList.add('e-active');\n _this.characterFormat.underline = 'Single';\n }\n }\n else {\n if (_this.underline.classList.contains('e-active')) {\n _this.underline.classList.remove('e-active');\n _this.characterFormat.underline = 'None';\n }\n }\n };\n /* tslint:disable-next-line:no-any */\n this.fontSizeUpdate = function (args) {\n _this.characterFormat.fontSize = args.value;\n };\n /* tslint:disable-next-line:no-any */\n this.fontFamilyChanged = function (args) {\n _this.characterFormat.fontFamily = args.value;\n };\n /* tslint:disable-next-line:no-any */\n this.fontColorUpdate = function (args) {\n _this.characterFormat.fontColor = args.currentValue.rgba;\n };\n this.setLeftAlignment = function () {\n if (_this.paragraphFormat.textAlignment === 'Left') {\n _this.paragraphFormat.textAlignment = 'Justify';\n }\n else {\n _this.paragraphFormat.textAlignment = 'Left';\n }\n _this.updateParagraphFormat();\n };\n this.setRightAlignment = function () {\n if (_this.paragraphFormat.textAlignment === 'Right') {\n _this.paragraphFormat.textAlignment = 'Left';\n }\n else {\n _this.paragraphFormat.textAlignment = 'Right';\n }\n _this.updateParagraphFormat();\n };\n this.setCenterAlignment = function () {\n if (_this.paragraphFormat.textAlignment === 'Center') {\n _this.paragraphFormat.textAlignment = 'Left';\n }\n else {\n _this.paragraphFormat.textAlignment = 'Center';\n }\n _this.updateParagraphFormat();\n };\n this.setJustifyAlignment = function () {\n if (_this.paragraphFormat.textAlignment === 'Justify') {\n _this.paragraphFormat.textAlignment = 'Left';\n }\n else {\n _this.paragraphFormat.textAlignment = 'Justify';\n }\n _this.updateParagraphFormat();\n };\n this.increaseBeforeAfterSpacing = function () {\n _this.paragraphFormat.beforeSpacing += 6;\n _this.paragraphFormat.afterSpacing += 6;\n };\n this.decreaseBeforeAfterSpacing = function () {\n if (_this.paragraphFormat.beforeSpacing >= 6) {\n _this.paragraphFormat.beforeSpacing -= 6;\n }\n else {\n _this.paragraphFormat.beforeSpacing = 0;\n }\n if (_this.paragraphFormat.afterSpacing >= 6) {\n _this.paragraphFormat.afterSpacing -= 6;\n }\n else {\n _this.paragraphFormat.afterSpacing = 0;\n }\n };\n /**\n * @private\n */\n this.updateNextStyle = function (args) {\n var typedName = args.srcElement.value;\n if (_this.getTypeValue() === 'Paragraph' && !isNullOrUndefined(typedName) && typedName !== '' && !_this.isUserNextParaUpdated) {\n var styles = _this.owner.owner.viewer.styles.getStyleNames(_this.getTypeValue());\n if (_this.isEdit) {\n styles = styles.filter(function (e) { return e !== _this.editStyleName; });\n }\n styles.push(typedName);\n _this.styleParagraph.dataSource = styles;\n _this.styleParagraph.index = null;\n _this.styleParagraph.index = styles.indexOf(typedName);\n _this.styleParagraph.dataBind();\n }\n };\n /**\n * @private\n */\n this.updateOkButton = function () {\n var styleName = _this.target.getElementsByClassName('e-input e-de-style-dlg-name-input').item(0).value;\n _this.enableOrDisableOkButton();\n };\n /**\n * @private\n */\n /* tslint:disable-next-line:no-any */\n this.styleTypeChange = function (args) {\n if (args.isInteracted) {\n var type = void 0;\n if (args.value === 'Character') {\n _this.style = new WCharacterStyle();\n type = 'Character';\n }\n if (args.value === 'Paragraph' || args.value === 'Linked(Paragraph and Character)') {\n _this.style = new WParagraphStyle();\n type = 'Paragraph';\n }\n _this.toggleDisable();\n _this.updateStyleNames(type);\n }\n };\n /* tslint:disable-next-line:no-any */\n this.styleBasedOnChange = function (args) {\n //Based on change\n };\n /**\n * @private\n */\n /* tslint:disable-next-line:no-any */\n this.styleParagraphChange = function (args) {\n if (args.isInteracted) {\n _this.isUserNextParaUpdated = true;\n }\n //Next change\n };\n /**\n * @private\n */\n this.showFontDialog = function () {\n if (!isNullOrUndefined(_this.owner.owner.fontDialogModule)) {\n _this.owner.owner.showFontDialog(_this.characterFormat);\n }\n _this.updateCharacterFormat();\n };\n /**\n * @private\n */\n this.showParagraphDialog = function () {\n if (!isNullOrUndefined(_this.owner.owner.paragraphDialogModule)) {\n _this.owner.owner.showParagraphDialog(_this.paragraphFormat);\n }\n };\n /**\n * @private\n */\n this.showNumberingBulletDialog = function () {\n _this.numberingBulletDialog = new BulletsAndNumberingDialog(_this.owner.owner.viewer);\n _this.numberingBulletDialog.showNumberBulletDialog(_this.style.paragraphFormat.listFormat, _this.abstractList);\n };\n /**\n * @private\n */\n this.onOkButtonClick = function () {\n var styleName = _this.styleNameElement.value;\n if (styleName.length > 0) {\n var style = _this.owner.owner.viewer.styles.findByName(styleName);\n var name_1;\n if (!isNullOrUndefined(style)) {\n _this.style.type = _this.getTypeValue();\n _this.style.basedOn = _this.owner.owner.viewer.styles.findByName(_this.styleBasedOn.value);\n if (_this.styleType.value === 'Paragraph' || _this.styleType.value === 'Linked(Paragraph and Character)') {\n _this.style.next = _this.owner.owner.viewer.styles.findByName(_this.styleParagraph.value);\n _this.style.characterFormat.mergeFormat(style.characterFormat);\n _this.style.paragraphFormat.mergeFormat(style.paragraphFormat);\n _this.updateList();\n // tslint:disable-next-line:max-line-length\n _this.style.link = (_this.styleType.value === 'Linked(Paragraph and Character)') ? _this.createLinkStyle(styleName, _this.isEdit) : undefined;\n }\n //Updating existing style implementation\n _this.style.name = style.name;\n name_1 = style.name;\n style = _this.style;\n _this.owner.owner.isShiftingEnabled = true;\n _this.owner.owner.editorModule.layoutWholeDocument();\n _this.owner.owner.isShiftingEnabled = false;\n }\n else {\n /* tslint:disable-next-line:no-any */\n var basedOn = _this.owner.owner.viewer.styles.findByName(_this.styleBasedOn.value);\n if (_this.styleType.value === 'Paragraph' || _this.styleType.value === 'Linked(Paragraph and Character)') {\n if (styleName === _this.styleParagraph.value) {\n _this.style.next = _this.style;\n }\n else {\n _this.style.next = _this.owner.owner.viewer.styles.findByName(_this.styleParagraph.value);\n }\n _this.updateList();\n }\n // tslint:disable-next-line:max-line-length\n _this.style.link = (_this.styleType.value === 'Linked(Paragraph and Character)') ? _this.createLinkStyle(styleName) : undefined;\n _this.style.type = _this.getTypeValue();\n _this.style.name = styleName;\n _this.style.basedOn = basedOn;\n /* tslint:disable-next-line:no-any */\n _this.owner.owner.viewer.styles.push(_this.style);\n name_1 = styleName;\n _this.owner.owner.editorModule.applyStyle(name_1);\n }\n _this.owner.owner.viewer.dialog2.hide();\n }\n else {\n throw new Error('Enter valid Style name');\n }\n if (_this.style) {\n //this.style.destroy();\n }\n };\n /* tslint:disable-next-line:no-any */\n this.loadStyleDialog = function (args) {\n _this.owner.owner.viewer.updateFocus();\n _this.isUserNextParaUpdated = false;\n /* tslint:disable-next-line:max-line-length */\n _this.styleNameElement = _this.target.getElementsByClassName('e-input e-de-style-dlg-name-input').item(0);\n _this.styleNameElement.value = null;\n if (!_this.isEdit) {\n _this.styleType.index = 0; //Set to paragraph \n }\n var name;\n if (_this.isEdit) {\n _this.styleNameElement.value = _this.editStyleName;\n name = _this.editStyleName;\n }\n /* tslint:disable-next-line:max-line-length */\n _this.okButton = _this.owner.dialog2.element.getElementsByClassName('e-flat e-style-okay').item(0);\n _this.enableOrDisableOkButton();\n _this.updateStyleNames(_this.getTypeValue(), name);\n _this.updateCharacterFormat(_this.style.characterFormat);\n _this.updateParagraphFormat(_this.style.paragraphFormat);\n };\n /**\n * @private\n */\n this.onCancelButtonClick = function () {\n if (!_this.isEdit && _this.style) {\n _this.style.destroy();\n }\n _this.owner.owner.viewer.dialog2.hide();\n };\n /**\n * @private\n */\n this.closeStyleDialog = function () {\n _this.owner.owner.viewer.updateFocus();\n };\n this.owner = viewer;\n }\n /**\n * @private\n */\n StyleDialog.prototype.getModuleName = function () {\n return 'StyleDialog';\n };\n /**\n * @private\n */\n //tslint:disable: max-func-body-length\n StyleDialog.prototype.initStyleDialog = function (localValue) {\n var instance = this;\n var id = this.owner.owner.containerId + '_style';\n this.target = createElement('div', { id: id, className: 'e-de-style-dialog' });\n var container = createElement('div');\n // tslint:disable-next-line:max-line-length\n var properties = createElement('div', { className: 'e-de-style-properties', innerHTML: localValue.getConstant('Properties') });\n container.appendChild(properties);\n var styleNameTypeDiv = createElement('div', { styles: 'display:flex', className: 'e-de-style-nametype-div' });\n container.appendChild(styleNameTypeDiv);\n var nameWholeDiv = createElement('div', { className: 'e-de-style-left-div' });\n styleNameTypeDiv.appendChild(nameWholeDiv);\n var name = createElement('div', { className: 'e-de-style-name', innerHTML: localValue.getConstant('Name') + ':' });\n nameWholeDiv.appendChild(name);\n // tslint:disable-next-line:max-line-length\n var nameValue = createElement('input', { id: this.owner.owner.containerId + '_style_name', styles: 'width:210px;', className: 'e-input e-de-style-dlg-name-input' });\n nameValue.addEventListener('keyup', this.updateOkButton);\n nameValue.addEventListener('input', this.updateOkButton);\n nameValue.addEventListener('blur', this.updateNextStyle);\n nameWholeDiv.appendChild(nameValue);\n var styleTypeWholeDiv = createElement('div');\n styleNameTypeDiv.appendChild(styleTypeWholeDiv);\n // tslint:disable-next-line:max-line-length\n var styleType = createElement('div', { className: 'e-de-style-styletype', innerHTML: localValue.getConstant('Style type') + ':' });\n styleTypeWholeDiv.appendChild(styleType);\n var styleTypeDivElement = createElement('div', { className: 'e-de-style-style-type-div' });\n var styleTypeValue = createElement('select', { id: 'e-de-style-style-type' });\n // tslint:disable-next-line:max-line-length\n styleTypeValue.innerHTML = ''; //';\n styleTypeDivElement.appendChild(styleTypeValue);\n this.styleType = new DropDownList({ change: this.styleTypeChange, popupHeight: '253px', width: '210px' });\n this.styleType.appendTo(styleTypeValue);\n styleTypeWholeDiv.appendChild(styleTypeDivElement);\n // tslint:disable-next-line:max-line-length\n var styleBasedParaDiv = createElement('div', { styles: 'display:flex', className: 'e-de-style-based-para-div' });\n container.appendChild(styleBasedParaDiv);\n var styleBasedOnWholeDiv = createElement('div', { className: 'e-de-style-left-div' });\n styleBasedParaDiv.appendChild(styleBasedOnWholeDiv);\n // tslint:disable-next-line:max-line-length\n var styleBasedOn = createElement('div', { className: 'e-de-style-style-based-on', innerHTML: localValue.getConstant('Style based on') + ':' });\n styleBasedOnWholeDiv.appendChild(styleBasedOn);\n var styleBasedOnDivElement = createElement('div', { className: 'e-de-style-style-based-on-div' });\n // tslint:disable-next-line:max-line-length\n var styleBasedOnValue = createElement('input', { id: 'e-de-style-style-based-on-value' });\n //styleBasedOnValue.innerHTML = '';\n styleBasedOnDivElement.appendChild(styleBasedOnValue);\n this.styleBasedOn = new DropDownList({ dataSource: [], select: this.styleBasedOnChange, popupHeight: '253px', width: '210px' });\n this.styleBasedOn.appendTo(styleBasedOnValue);\n styleBasedOnWholeDiv.appendChild(styleBasedOnDivElement);\n var styleParagraphWholeDiv = createElement('div', { className: 'e-de-style-left-div' });\n styleBasedParaDiv.appendChild(styleParagraphWholeDiv);\n // tslint:disable-next-line:max-line-length\n var styleParagraph = createElement('div', { className: 'e-de-style-style-paragraph', innerHTML: localValue.getConstant('Style for following paragraph') + ':' });\n styleParagraphWholeDiv.appendChild(styleParagraph);\n var styleParagraphDivElement = createElement('div', { className: 'e-de-style-style-paragraph-div' });\n // tslint:disable-next-line:max-line-length\n var styleParagraphValue = createElement('input', { id: 'e-de-style-style-paragraph-value' });\n // tslint:disable-next-line:max-line-length\n //styleParagraphValue.innerHTML = '';\n styleParagraphDivElement.appendChild(styleParagraphValue);\n this.styleParagraph = new DropDownList({ dataSource: [], select: this.styleParagraphChange, popupHeight: '253px', width: '210px' });\n this.styleParagraph.appendTo(styleParagraphValue);\n styleParagraphWholeDiv.appendChild(styleParagraphDivElement);\n // tslint:disable-next-line:max-line-length\n var formatting = createElement('div', { className: 'e-de-style-formatting', innerHTML: localValue.getConstant('Formatting') });\n container.appendChild(formatting);\n var optionsDiv = createElement('div', { className: 'e-de-style-options-div' });\n container.appendChild(optionsDiv);\n var fontOptionsDiv = createElement('div', { styles: 'display:flex;margin-bottom: 15px;' });\n optionsDiv.appendChild(fontOptionsDiv);\n this.createFontOptions(fontOptionsDiv);\n var paragraphOptionsDiv = createElement('div', { styles: 'display:flex', className: 'e-style-paragraph' });\n optionsDiv.appendChild(paragraphOptionsDiv);\n this.createParagraphOptions(paragraphOptionsDiv);\n // let radioOptionsDiv: HTMLElement = createElement('div', { styles: 'display:flex' });\n // container.appendChild(radioOptionsDiv);\n // let onlyThisDocumentDiv: HTMLElement = createElement('div', { className: 'e-de-style-radio-button' });\n // tslint:disable-next-line:max-line-length\n // let onlyThisDocument: HTMLInputElement = createElement('input', { className: 'e-de-style-only-this-doc', attrs: { type: 'radio' } }) as HTMLInputElement;\n // onlyThisDocumentDiv.appendChild(onlyThisDocument);\n // tslint:disable-next-line:max-line-length\n // this.onlyThisDocument = new RadioButton({ label: 'Only in this document', value: 'only in this document', checked: true, name: 'styles' });\n // this.onlyThisDocument.appendTo(onlyThisDocument);\n // radioOptionsDiv.appendChild(onlyThisDocumentDiv);\n // let templateDiv: HTMLElement = createElement('div', { className: 'e-de-style-radio-button' });\n // tslint:disable-next-line:max-line-length\n // let template: HTMLInputElement = createElement('input', { className: 'e-de-style-temp', attrs: { type: 'radio' } }) as HTMLInputElement;\n // templateDiv.appendChild(template);\n // this.template = new RadioButton({ label: 'Template', value: 'template', name: 'styles' });\n // this.template.appendTo(template);\n // radioOptionsDiv.appendChild(templateDiv);\n this.createFormatDropdown(container, localValue);\n this.target.appendChild(container);\n };\n StyleDialog.prototype.createFormatDropdown = function (parentDiv, localValue) {\n var _this = this;\n var formatBtn = createElement('button', { id: 'style_format_dropdown', innerHTML: localValue.getConstant('Format') });\n formatBtn.style.height = '35px';\n parentDiv.appendChild(formatBtn);\n var items = [{ text: localValue.getConstant('Font..'), id: 'style_font' },\n { text: localValue.getConstant('Paragraph..'), id: 'style_paragraph' },\n { text: localValue.getConstant('Numbering..'), id: 'style_numbering' }];\n var dropDownbtn = new DropDownButton({\n items: items, cssClass: 'e-de-style-format-dropdwn',\n beforeItemRender: function (args) {\n if (_this.styleType.value === 'Character') {\n if (args.item.text === 'Paragraph') {\n args.element.classList.add('e-disabled');\n }\n if (args.item.text === 'Numbering') {\n args.element.classList.add('e-disabled');\n }\n }\n else {\n if (args.item.text === 'Paragraph') {\n args.element.classList.remove('e-disabled');\n }\n if (args.item.text === 'Numbering') {\n args.element.classList.remove('e-disabled');\n }\n }\n }\n });\n dropDownbtn.appendTo(formatBtn);\n dropDownbtn.addEventListener('select', this.openDialog);\n };\n StyleDialog.prototype.createFontOptions = function (parentDiv) {\n var fontFamilyElement = createElement('select', { id: this.target.id + '_fontName' });\n fontFamilyElement.innerHTML = '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '';\n parentDiv.appendChild(fontFamilyElement);\n this.fontFamily = new ComboBox({\n width: '123px', popupWidth: '123px',\n cssClass: 'e-style-font-fmaily-right', change: this.fontFamilyChanged\n });\n this.fontFamily.showClearButton = false;\n this.fontFamily.appendTo(fontFamilyElement);\n var fontSizeElement = createElement('input');\n parentDiv.appendChild(fontSizeElement);\n var sizeDataSource = [8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 26, 28, 36, 48, 72];\n this.fontSize = new ComboBox({\n dataSource: sizeDataSource, width: '73px', cssClass: 'e-style-font-fmaily-right',\n change: this.fontSizeUpdate\n });\n this.fontSize.showClearButton = false;\n this.fontSize.appendTo(fontSizeElement);\n var fontGroupButton = createElement('div', { className: 'e-de-style-font-group-button' });\n parentDiv.appendChild(fontGroupButton);\n // tslint:disable-next-line:max-line-length\n this.bold = this.createButtonElement(fontGroupButton, 'e-de-bold', 'e-de-style-bold-button-size', this.owner.owner.containerId + '_style_bold');\n this.bold.addEventListener('click', this.setBoldProperty);\n // tslint:disable-next-line:max-line-length\n this.italic = this.createButtonElement(fontGroupButton, 'e-de-italic', 'e-de-style-icon-button-size', this.owner.owner.containerId + '_style_italic');\n this.italic.addEventListener('click', this.setItalicProperty);\n // tslint:disable-next-line:max-line-length\n this.underline = this.createButtonElement(fontGroupButton, 'e-de-underline', 'e-de-style-icon-button-size', this.owner.owner.containerId + '_style_underline');\n this.underline.addEventListener('click', this.setUnderlineProperty);\n var fontColorElement = createElement('input', { attrs: { type: 'color' }, className: 'e-de-style-icon-button-size' });\n parentDiv.appendChild(fontColorElement);\n this.fontColor = new ColorPicker({ cssClass: 'e-de-style-font-color-picker', change: this.fontColorUpdate });\n this.fontColor.appendTo(fontColorElement);\n };\n StyleDialog.prototype.createParagraphOptions = function (parentDiv) {\n var _this = this;\n var alignmentDiv = createElement('div', { className: 'e-de-style-paragraph-group-button' });\n parentDiv.appendChild(alignmentDiv);\n this.leftAlign = this.createButtonElement(alignmentDiv, 'e-de-align-left', 'e-de-style-icon-button-size');\n this.leftAlign.addEventListener('click', this.setLeftAlignment);\n this.centerAlign = this.createButtonElement(alignmentDiv, 'e-de-align-center', 'e-de-style-icon-button-size');\n this.centerAlign.addEventListener('click', this.setCenterAlignment);\n this.rightAlign = this.createButtonElement(alignmentDiv, 'e-de-align-right', 'e-de-style-icon-button-size');\n this.rightAlign.addEventListener('click', this.setRightAlignment);\n this.justify = this.createButtonElement(alignmentDiv, 'e-de-justify', 'e-de-style-icon-button-last-size');\n this.justify.addEventListener('click', this.setJustifyAlignment);\n var lineSpacingDiv = createElement('div', { className: 'e-de-style-paragraph-group-button' });\n parentDiv.appendChild(lineSpacingDiv);\n this.singleLineSpacing = this.createButtonElement(lineSpacingDiv, 'e-de-single-spacing', 'e-de-style-icon-button-first-size');\n this.singleLineSpacing.addEventListener('click', function () {\n _this.paragraphFormat.lineSpacing = 1;\n _this.updateParagraphFormat();\n });\n // tslint:disable-next-line:max-line-length\n this.onePointFiveLineSpacing = this.createButtonElement(lineSpacingDiv, 'e-de-one-point-five-spacing', 'e-de-style-icon-button-size');\n this.onePointFiveLineSpacing.addEventListener('click', function () {\n _this.paragraphFormat.lineSpacing = 1.5;\n _this.updateParagraphFormat();\n });\n this.doubleLineSpacing = this.createButtonElement(lineSpacingDiv, 'e-de-double-spacing', 'e-de-style-icon-button-last-size');\n this.doubleLineSpacing.addEventListener('click', function () {\n _this.paragraphFormat.lineSpacing = 2;\n _this.updateParagraphFormat();\n });\n var spacingDiv = createElement('div', { className: 'e-de-style-paragraph-group-button' });\n parentDiv.appendChild(spacingDiv);\n var beforeSpacing = this.createButtonElement(spacingDiv, 'e-de-before-spacing', 'e-de-style-icon-button-first-size');\n var afterSpacing = this.createButtonElement(spacingDiv, 'e-de-after-spacing', 'e-de-style-icon-button-last-size');\n beforeSpacing.addEventListener('click', this.increaseBeforeAfterSpacing);\n afterSpacing.addEventListener('click', this.decreaseBeforeAfterSpacing);\n var indentingDiv = createElement('div', { className: 'e-de-style-paragraph-indent-group-button' });\n parentDiv.appendChild(indentingDiv);\n var decreaseIndent = this.createButtonElement(indentingDiv, 'e-de-indent', 'e-de-style-icon-button-first-size');\n decreaseIndent.addEventListener('click', function () {\n if (_this.paragraphFormat.leftIndent >= 36) {\n _this.paragraphFormat.leftIndent -= 36;\n }\n else {\n _this.paragraphFormat.leftIndent = 0;\n }\n });\n var increaseindent = this.createButtonElement(indentingDiv, 'e-de-outdent', 'e-de-style-icon-button-size');\n increaseindent.addEventListener('click', function () {\n _this.paragraphFormat.leftIndent += 36;\n });\n };\n StyleDialog.prototype.createButtonElement = function (parentDiv, iconCss, className, id) {\n var buttonElement = createElement('button');\n if (!isNullOrUndefined(id)) {\n buttonElement.id = id;\n }\n parentDiv.appendChild(buttonElement);\n var button = new Button({ iconCss: iconCss, cssClass: className });\n button.appendTo(buttonElement);\n return buttonElement;\n };\n StyleDialog.prototype.toggleDisable = function () {\n if (this.styleType.value === 'Character') {\n this.styleParagraph.enabled = false;\n // tslint:disable-next-line:max-line-length\n this.target.getElementsByClassName('e-style-paragraph').item(0).setAttribute('style', 'display:flex;pointer-events:none;opacity:0.5');\n }\n else {\n this.styleParagraph.enabled = true;\n this.target.getElementsByClassName('e-style-paragraph').item(0).removeAttribute('style');\n this.target.getElementsByClassName('e-style-paragraph').item(0).setAttribute('style', 'display:flex');\n }\n this.styleBasedOn.enabled = true;\n };\n /**\n * @private\n */\n StyleDialog.prototype.show = function (styleName, header) {\n var localObj = new L10n('documenteditor', this.owner.owner.defaultLocale);\n this.isEdit = (!isNullOrUndefined(styleName) && styleName.length > 0) ? true : false;\n this.editStyleName = styleName;\n this.abstractList = new WAbstractList();\n // tslint:disable-next-line:max-line-length\n var style = this.owner.owner.viewer.styles.findByName(styleName);\n this.style = !this.isEdit ? new WParagraphStyle() : style ? style : this.getStyle(styleName);\n localObj.setLocale(this.owner.owner.locale);\n setCulture(this.owner.owner.locale);\n if (!this.target) {\n this.initStyleDialog(localObj);\n }\n if (isNullOrUndefined(header)) {\n header = localObj.getConstant('Create New Style');\n }\n this.owner.owner.viewer.dialog2.header = header;\n this.owner.owner.viewer.dialog2.height = 'auto';\n this.owner.owner.viewer.dialog2.width = 'auto';\n this.owner.owner.viewer.dialog2.content = this.target;\n this.owner.owner.viewer.dialog2.buttons = [{\n click: this.onOkButtonClick,\n buttonModel: { content: localObj.getConstant('Ok'), cssClass: 'e-flat e-style-okay', isPrimary: true }\n },\n {\n click: this.onCancelButtonClick,\n buttonModel: { content: localObj.getConstant('Cancel'), cssClass: 'e-flat e-style-cancel' }\n }];\n this.toggleDisable();\n this.owner.owner.viewer.dialog2.dataBind();\n this.owner.owner.viewer.dialog2.beforeOpen = this.loadStyleDialog;\n this.owner.owner.viewer.dialog2.close = this.closeStyleDialog;\n this.owner.owner.viewer.dialog2.position = { X: 'center', Y: 'center' };\n this.owner.owner.viewer.dialog2.show();\n };\n StyleDialog.prototype.updateList = function () {\n var listId = this.style.paragraphFormat.listFormat.listId;\n if (listId > -1) {\n if (this.owner.owner.viewer.lists.filter(function (a) { return (a.listId === listId); }).length === 0) {\n this.owner.owner.viewer.lists.push(this.style.paragraphFormat.listFormat.list);\n }\n else {\n this.owner.owner.viewer.lists = this.owner.owner.viewer.lists.filter(function (a) { return (a.listId !== listId); });\n this.owner.owner.viewer.lists.push(this.style.paragraphFormat.listFormat.list);\n }\n }\n if (this.abstractList.abstractListId !== -1) {\n this.owner.owner.viewer.abstractLists.push(this.abstractList);\n }\n };\n StyleDialog.prototype.createLinkStyle = function (name, isEdit) {\n var charStyle;\n if (isEdit) {\n charStyle = this.owner.owner.viewer.styles.findByName((name + ' Char'), 'Character');\n }\n else {\n charStyle = new WCharacterStyle();\n }\n charStyle.type = 'Character';\n charStyle.name = name + ' Char';\n charStyle.characterFormat = this.style.characterFormat.cloneFormat();\n charStyle.basedOn = this.style.basedOn;\n if (!isEdit) {\n this.owner.owner.viewer.styles.push(charStyle);\n }\n return this.owner.owner.viewer.styles.findByName(charStyle.name, 'Character');\n };\n /**\n * @private\n */\n StyleDialog.prototype.updateCharacterFormat = function (characterFormat) {\n if (!isNullOrUndefined(characterFormat)) {\n this.characterFormat = characterFormat;\n }\n this.fontFamily.value = this.characterFormat.fontFamily;\n this.fontSize.value = this.characterFormat.fontSize;\n this.fontColor.value = this.characterFormat.fontColor;\n this.fontButtonClicked(undefined);\n };\n /**\n * @private\n */\n StyleDialog.prototype.updateParagraphFormat = function (paragraphFOrmat) {\n if (!isNullOrUndefined(paragraphFOrmat)) {\n this.paragraphFormat = paragraphFOrmat;\n }\n if (this.paragraphFormat.textAlignment === 'Left') {\n if (!this.leftAlign.classList.contains('e-active')) {\n this.leftAlign.classList.add('e-active');\n }\n if (this.rightAlign.classList.contains('e-active')) {\n this.rightAlign.classList.remove('e-active');\n }\n if (this.centerAlign.classList.contains('e-active')) {\n this.centerAlign.classList.remove('e-active');\n }\n if (this.justify.classList.contains('e-active')) {\n this.justify.classList.remove('e-active');\n }\n }\n else if (this.paragraphFormat.textAlignment === 'Right') {\n if (this.leftAlign.classList.contains('e-active')) {\n this.leftAlign.classList.remove('e-active');\n }\n if (!this.rightAlign.classList.contains('e-active')) {\n this.rightAlign.classList.add('e-active');\n }\n if (this.centerAlign.classList.contains('e-active')) {\n this.centerAlign.classList.remove('e-active');\n }\n if (this.justify.classList.contains('e-active')) {\n this.justify.classList.remove('e-active');\n }\n }\n else if (this.paragraphFormat.textAlignment === 'Center') {\n if (this.leftAlign.classList.contains('e-active')) {\n this.leftAlign.classList.remove('e-active');\n }\n if (this.rightAlign.classList.contains('e-active')) {\n this.rightAlign.classList.remove('e-active');\n }\n if (!this.centerAlign.classList.contains('e-active')) {\n this.centerAlign.classList.add('e-active');\n }\n if (this.justify.classList.contains('e-active')) {\n this.justify.classList.remove('e-active');\n }\n }\n else if (this.paragraphFormat.textAlignment === 'Justify') {\n if (this.leftAlign.classList.contains('e-active')) {\n this.leftAlign.classList.remove('e-active');\n }\n if (this.rightAlign.classList.contains('e-active')) {\n this.rightAlign.classList.remove('e-active');\n }\n if (this.centerAlign.classList.contains('e-active')) {\n this.centerAlign.classList.remove('e-active');\n }\n if (!this.justify.classList.contains('e-active')) {\n this.justify.classList.add('e-active');\n }\n }\n if (this.paragraphFormat.lineSpacing === 1) {\n this.singleLineSpacing.classList.add('e-active');\n this.onePointFiveLineSpacing.classList.remove('e-active');\n this.doubleLineSpacing.classList.remove('e-active');\n }\n else if (this.paragraphFormat.lineSpacing === 1.5) {\n this.singleLineSpacing.classList.remove('e-active');\n this.onePointFiveLineSpacing.classList.add('e-active');\n this.doubleLineSpacing.classList.remove('e-active');\n }\n else if (this.paragraphFormat.lineSpacing === 2) {\n this.singleLineSpacing.classList.remove('e-active');\n this.onePointFiveLineSpacing.classList.remove('e-active');\n this.doubleLineSpacing.classList.add('e-active');\n }\n else {\n this.singleLineSpacing.classList.remove('e-active');\n this.onePointFiveLineSpacing.classList.remove('e-active');\n this.doubleLineSpacing.classList.remove('e-active');\n }\n };\n StyleDialog.prototype.enableOrDisableOkButton = function () {\n if (!isNullOrUndefined(this.okButton)) {\n this.okButton.disabled = (this.styleNameElement.value === '');\n }\n };\n StyleDialog.prototype.getTypeValue = function () {\n var type;\n if (this.styleType.value === 'Linked(Paragraph and Character)' || this.styleType.value === 'Paragraph') {\n return 'Paragraph';\n }\n else {\n return 'Character';\n }\n };\n StyleDialog.prototype.updateStyleNames = function (type, name) {\n var styles = this.owner.owner.viewer.styles.getStyleNames(type);\n this.styleParagraph.dataSource = styles;\n this.styleParagraph.index = null;\n if (name) {\n this.styleBasedOn.dataSource = styles.filter(function (e) { return e !== name; });\n this.styleBasedOn.index = null;\n var style = this.getStyle(name);\n if (style.basedOn instanceof String || isNullOrUndefined(style.basedOn)) {\n this.styleBasedOn.enabled = false;\n }\n else {\n /* tslint:disable-next-line:max-line-length */\n this.styleBasedOn.index = styles.indexOf(style.basedOn.name) > -1 ? styles.indexOf(style.basedOn.name) : 0;\n }\n if (style.type === 'Paragraph') {\n if (!isNullOrUndefined(style.link)) {\n this.styleType.index = 2;\n }\n else {\n this.styleType.index = 0;\n }\n }\n else {\n this.styleType.index = 1;\n }\n if (!isNullOrUndefined(style.next)) {\n var nxtName = style.next.name;\n var index = 0;\n if (styles.indexOf(nxtName) > -1) {\n index = styles.indexOf(nxtName);\n }\n this.styleParagraph.index = index;\n this.isUserNextParaUpdated = (nxtName === name) ? false : true;\n }\n }\n else {\n this.styleBasedOn.dataSource = styles;\n this.styleBasedOn.index = null;\n var basedOnIndex = 0;\n if (this.owner.owner.selectionModule) {\n var styleName = void 0;\n if (type === 'Character') {\n styleName = this.owner.owner.selection.characterFormat.styleName;\n }\n else {\n styleName = this.owner.owner.selection.paragraphFormat.styleName;\n }\n basedOnIndex = styles.indexOf(styleName);\n }\n this.styleBasedOn.index = basedOnIndex;\n this.styleParagraph.index = 0;\n }\n if (this.isEdit) {\n this.styleType.enabled = false;\n }\n else {\n this.styleType.enabled = true;\n }\n this.styleBasedOn.dataBind();\n this.styleParagraph.dataBind();\n };\n StyleDialog.prototype.getStyle = function (styleName) {\n /* tslint:disable-next-line:max-line-length */\n if (isNullOrUndefined(this.owner.owner.viewer.styles.findByName(styleName))) {\n /* tslint:disable-next-line:max-line-length */\n this.owner.owner.editor.createStyle(this.owner.owner.viewer.preDefinedStyles.get(styleName));\n }\n return this.owner.owner.viewer.styles.findByName(styleName);\n };\n /**\n * @private\n */\n StyleDialog.prototype.destroy = function () {\n this.owner = undefined;\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var n = 0; n < this.target.childNodes.length; n++) {\n this.target.removeChild(this.target.childNodes[n]);\n n--;\n }\n this.target = undefined;\n }\n if (this.styleType) {\n this.styleType.destroy();\n }\n this.styleType = undefined;\n if (this.styleBasedOn) {\n this.styleBasedOn.destroy();\n }\n this.styleBasedOn = undefined;\n if (this.styleParagraph) {\n this.styleParagraph.destroy();\n }\n this.styleParagraph = undefined;\n if (this.onlyThisDocument) {\n this.onlyThisDocument.destroy();\n }\n this.onlyThisDocument = undefined;\n if (this.template) {\n this.template.destroy();\n }\n this.template = undefined;\n if (this.style) {\n this.style = undefined;\n }\n if (this.abstractList) {\n this.abstractList = undefined;\n }\n if (this.numberingBulletDialog) {\n this.numberingBulletDialog.destroy();\n }\n this.numberingBulletDialog = undefined;\n };\n return StyleDialog;\n}());\nexport { StyleDialog };\n","import { createElement, isNullOrUndefined, L10n, setCulture } from '@syncfusion/ej2-base';\nimport { Tab } from '@syncfusion/ej2-navigations';\nimport { WList } from '../list/list';\nimport { WAbstractList } from '../list/abstract-list';\nimport { WListLevel } from '../list/list-level';\nimport { WListFormat } from '../../implementation/format/list-format';\n/**\n * The Bullets and Numbering dialog is used to apply list format for a paragraph style.\n */\n/* tslint:disable:no-any */\nvar BulletsAndNumberingDialog = /** @class */ (function () {\n /**\n * @private\n */\n function BulletsAndNumberingDialog(layoutViewer) {\n var _this = this;\n this.isBullet = false;\n /**\n * @private\n */\n this.numberListClick = function (args) {\n _this.isBullet = false;\n _this.setActiveElement(args);\n if (args.currentTarget.classList.contains('e-de-list-numbered-none')) {\n _this.numberFormat = undefined;\n _this.listLevelPattern = undefined;\n }\n else if (args.currentTarget.classList.contains('e-de-list-numbered-number-dot')) {\n _this.numberFormat = '%1.';\n _this.listLevelPattern = 'Arabic';\n }\n else if (args.currentTarget.classList.contains('e-de-list-numbered-number-brace')) {\n _this.numberFormat = '%1)';\n _this.listLevelPattern = 'Arabic';\n }\n else if (args.currentTarget.classList.contains('e-de-list-numbered-up-roman')) {\n _this.numberFormat = '%1.';\n _this.listLevelPattern = 'UpRoman';\n }\n else if (args.currentTarget.classList.contains('e-de-list-numbered-up-letter')) {\n _this.numberFormat = '%1.';\n _this.listLevelPattern = 'UpLetter';\n }\n else if (args.currentTarget.classList.contains('e-de-list-numbered-low-letter-brace')) {\n _this.numberFormat = '%1)';\n _this.listLevelPattern = 'LowLetter';\n }\n else if (args.currentTarget.classList.contains('e-de-numbered-low-letter-dot')) {\n _this.numberFormat = '%1.';\n _this.listLevelPattern = 'LowLetter';\n }\n else if (args.currentTarget.classList.contains('e-de-list-numbered-low-roman')) {\n _this.numberFormat = '%1.';\n _this.listLevelPattern = 'LowRoman';\n }\n };\n /**\n * @private\n */\n this.bulletListClick = function (args) {\n _this.isBullet = true;\n _this.setActiveElement(args);\n if (args.currentTarget.classList.contains('e-bullet-none')) {\n _this.symbol = undefined;\n _this.fontFamily = undefined;\n }\n else if (args.currentTarget.classList.contains('e-bullet-dot')) {\n _this.symbol = '\\uf0b7';\n _this.fontFamily = 'Symbol';\n }\n else if (args.currentTarget.classList.contains('e-bullet-circle')) {\n _this.symbol = '\\uf06f' + '\\u0020';\n _this.fontFamily = 'Symbol';\n }\n else if (args.currentTarget.classList.contains('e-bullet-square')) {\n _this.symbol = '\\uf0a7';\n _this.fontFamily = 'Wingdings';\n }\n else if (args.currentTarget.classList.contains('e-bullet-flower')) {\n _this.symbol = '\\uf076';\n _this.fontFamily = 'Wingdings';\n }\n else if (args.currentTarget.classList.contains('e-bullet-arrow')) {\n _this.symbol = '\\uf0d8';\n _this.fontFamily = 'Wingdings';\n }\n else if (args.currentTarget.classList.contains('e-bullet-tick')) {\n _this.symbol = '\\uf0fc';\n _this.fontFamily = 'Wingdings';\n }\n };\n /**\n * @private\n */\n this.loadNumberingBulletDialog = function () {\n //Load \n _this.owner.updateFocus();\n };\n /**\n * @private\n */\n this.closeNumberingBulletDialog = function () {\n _this.unWireEventsAndBindings();\n _this.owner.updateFocus();\n };\n /**\n * @private\n */\n this.onCancelButtonClick = function () {\n _this.isBullet = false;\n _this.listLevelPattern = undefined;\n _this.numberFormat = undefined;\n _this.symbol = undefined;\n _this.fontFamily = undefined;\n _this.owner.dialog.hide();\n _this.unWireEventsAndBindings();\n };\n /**\n * @private\n */\n this.onOkButtonClick = function () {\n if (_this.owner.owner.viewer.lists.length > 0) {\n _this.listFormat.list.listId = _this.owner.owner.viewer.lists[_this.owner.owner.viewer.lists.length - 1].listId + 1;\n _this.listFormat.listId = _this.listFormat.list.listId;\n }\n else {\n _this.listFormat.list.listId = 0;\n _this.listFormat.listId = 0;\n }\n if (_this.owner.owner.viewer.abstractLists.length > 0) {\n /* tslint:disable-next-line:max-line-length */\n _this.abstractList.abstractListId = _this.owner.owner.viewer.abstractLists[_this.owner.owner.viewer.abstractLists.length - 1].abstractListId + 1;\n }\n else {\n _this.abstractList.abstractListId = 0;\n }\n _this.listFormat.list.abstractListId = _this.abstractList.abstractListId;\n var listLevel = new WListLevel(_this.abstractList);\n listLevel.listLevelPattern = !isNullOrUndefined(_this.listLevelPattern) ? _this.listLevelPattern : 'Bullet';\n listLevel.numberFormat = _this.isBullet ? _this.symbol : _this.numberFormat;\n if (listLevel.listLevelPattern !== 'Bullet') {\n listLevel.startAt = 1;\n }\n listLevel.characterFormat.fontFamily = !isNullOrUndefined(_this.fontFamily) ? _this.fontFamily : 'Verdana';\n listLevel.paragraphFormat.leftIndent = 36;\n listLevel.paragraphFormat.firstLineIndent = -18;\n _this.abstractList.levels.push(listLevel);\n _this.listFormat.listLevelNumber = 0;\n _this.listFormat.list.abstractList = _this.abstractList;\n _this.owner.dialog.hide();\n };\n this.owner = layoutViewer;\n }\n /**\n * @private\n */\n BulletsAndNumberingDialog.prototype.getModuleName = function () {\n return 'BulletsAndNumberingDialog';\n };\n /**\n * @private\n */\n BulletsAndNumberingDialog.prototype.initNumberingBulletDialog = function (locale) {\n var instance = this;\n var id = this.owner.owner.containerId;\n this.target = createElement('div', { id: id + '_insertNumberBulletDialog', className: 'e-de-number-bullet-dlg' });\n var tabTarget = createElement('div', { id: id + '_tabNumberBulletDialog', className: 'e-de-tab-number-bullet-dlg' });\n this.target.appendChild(tabTarget);\n this.createNumberList(id);\n this.createBulletList(id);\n //Initialize Tab component\n var tabObj = new Tab({\n items: [\n {\n header: { 'text': locale.getConstant('Numbering') },\n /* tslint:disable-next-line:max-line-length */\n content: ('#' + id + '_Number'),\n },\n {\n header: { 'text': locale.getConstant('Bullets') },\n /* tslint:disable-next-line:max-line-length */\n content: ('#' + id + '_Bullet'),\n },\n ],\n heightAdjustMode: 'None',\n width: 272,\n });\n //Render initialized Tab component\n tabObj.appendTo(tabTarget);\n this.owner.owner.element.appendChild(this.target);\n tabObj.refresh();\n };\n BulletsAndNumberingDialog.prototype.createNumberList = function (id) {\n var numberListDiv = createElement('div', { className: 'e-de-style-numbered-list', id: id + '_Number' });\n numberListDiv.style.display = 'none';\n numberListDiv.style.height = '270px';\n var ulTag = createElement('ul', {\n styles: 'display: block; outline: 0px;',\n id: 'listMenu',\n className: 'e-de-ui-wfloating-menu e-de-ui-bullets-menu e-de-list-container e-de-list-thumbnail'\n });\n numberListDiv.appendChild(ulTag);\n var numberedNone = this.createNumberNoneListTag(ulTag);\n var numberedNumberDot = this.createNumberListTag(ulTag, '1.', '2.', '3.', 'e-de-list-numbered-number-dot');\n var numberedNumberBrace = this.createNumberListTag(ulTag, '1)', '2)', '3)', 'e-de-list-numbered-number-brace');\n var numberedUpRoman = this.createNumberListTag(ulTag, 'I.', 'II.', 'III.', 'e-de-list-numbered-up-roman');\n var numberedUpLettter = this.createNumberListTag(ulTag, 'A.', 'B.', 'C.', 'e-de-list-numbered-up-letter');\n var numberedLowLetterDot = this.createNumberListTag(ulTag, 'a.', 'b.', 'c.', 'e-de-numbered-low-letter-dot');\n var numberedLowLetterBrace = this.createNumberListTag(ulTag, 'a)', 'b)', 'c)', 'e-de-list-numbered-low-letter-brace');\n var numberedLowRoman = this.createNumberListTag(ulTag, 'i.', 'ii.', 'iii.', 'e-de-list-numbered-low-roman');\n numberedNone.addEventListener('click', this.numberListClick);\n numberedNumberDot.addEventListener('click', this.numberListClick);\n numberedNumberBrace.addEventListener('click', this.numberListClick);\n numberedUpRoman.addEventListener('click', this.numberListClick);\n numberedUpLettter.addEventListener('click', this.numberListClick);\n numberedLowLetterBrace.addEventListener('click', this.numberListClick);\n numberedLowLetterDot.addEventListener('click', this.numberListClick);\n numberedLowRoman.addEventListener('click', this.numberListClick);\n this.target.appendChild(numberListDiv);\n };\n BulletsAndNumberingDialog.prototype.createNumberListTag = function (ulTag, text1, text2, text3, className) {\n var liTag = createElement('li', {\n styles: 'display:block',\n className: 'e-de-ui-wfloating-menuitem e-de-ui-wfloating-menuitem-md e-de-list-items e-de-list-item-size ' + className\n });\n ulTag.appendChild(liTag);\n /* tslint:disable-next-line:max-line-length */\n var innerHTML = '
    ' + text1 + '
    ' + text2 + '';\n innerHTML += '
    ' + text3 + '
    ';\n var liInnerDiv = createElement('div', {\n className: 'e-de-ui-list-header-presetmenu',\n id: 'e-de-ui-zlist0', innerHTML: innerHTML\n });\n liTag.style.cssFloat = 'left';\n liTag.appendChild(liInnerDiv);\n return liTag;\n };\n BulletsAndNumberingDialog.prototype.createNumberNoneListTag = function (ulTag) {\n var liTag = createElement('li', {\n styles: 'display:block',\n /* tslint:disable-next-line:max-line-length */\n className: 'e-de-ui-wfloating-menuitem e-de-ui-wfloating-menuitem-md e-de-list-items e-de-list-item-size e-de-list-numbered-none'\n });\n ulTag.appendChild(liTag);\n var innerHTML = '
    None
    ';\n var liInnerDiv = createElement('div', {\n className: 'e-de-ui-list-header-presetmenu',\n id: 'e-de-ui-zlist0', innerHTML: innerHTML\n });\n liTag.style.cssFloat = 'left';\n liTag.appendChild(liInnerDiv);\n return liTag;\n };\n BulletsAndNumberingDialog.prototype.createBulletListTag = function (ulTag, iconCss, className) {\n var liTag = createElement('li', {\n styles: 'display:block;',\n className: 'e-de-ui-wfloating-menuitem e-de-ui-wfloating-bullet-menuitem-md e-de-list-items e-de-list-item-size ' + className\n });\n ulTag.appendChild(liTag);\n /* tslint:disable-next-line:max-line-length */\n var liInnerDiv = createElement('div', { className: 'e-de-ui-bullet-list-header-presetmenu e-de-bullet-icon-size', id: 'e-de-ui-zlist0' });\n var liNextDiv = createElement('div', { className: iconCss });\n liInnerDiv.appendChild(liNextDiv);\n liTag.appendChild(liInnerDiv);\n return liTag;\n };\n BulletsAndNumberingDialog.prototype.createBulletList = function (id) {\n var bulletListDiv = createElement('div', { className: 'e-de-ui-bullet-list-header-presetmenu', id: id + '_Bullet' });\n bulletListDiv.style.display = 'none';\n bulletListDiv.style.height = '270px';\n var ulTag = createElement('ul', {\n styles: 'display: block; outline: 0px;', id: 'listMenu',\n className: 'e-de-ui-wfloating-menu e-de-ui-bullets-menu e-de-list-container e-de-list-thumbnail'\n });\n bulletListDiv.appendChild(ulTag);\n var bulletNone = this.createBulletListTag(ulTag, 'e-de-icon-bullet-list-none e-de-bullet-icons', 'e-bullet-none');\n var bulletDot = this.createBulletListTag(ulTag, 'e-de-icon-bullet-list-dot e-de-bullet-icons', 'e-bullet-dot');\n /* tslint:disable-next-line:max-line-length */\n var bulletCircle = this.createBulletListTag(ulTag, 'e-de-icon-bullet-list-circle e-de-bullet-icons', 'e-bullet-circle');\n var bulletSquare = this.createBulletListTag(ulTag, 'e-de-icon-bullet-list-square e-de-bullet-icons', 'e-bullet-square');\n /* tslint:disable-next-line:max-line-length */\n var bulletFlower = this.createBulletListTag(ulTag, 'e-de-icon-bullet-list-flower e-de-bullet-icons', 'e-bullet-flower');\n var bulletArrow = this.createBulletListTag(ulTag, 'e-de-icon-bullet-list-arrow e-de-bullet-icons', 'e-bullet-arrow');\n var bulletTick = this.createBulletListTag(ulTag, 'e-de-icon-bullet-list-tick e-de-bullet-icons', 'e-bullet-tick');\n bulletNone.addEventListener('click', this.bulletListClick);\n bulletDot.addEventListener('click', this.bulletListClick);\n bulletCircle.addEventListener('click', this.bulletListClick);\n bulletSquare.addEventListener('click', this.bulletListClick);\n bulletFlower.addEventListener('click', this.bulletListClick);\n bulletArrow.addEventListener('click', this.bulletListClick);\n bulletTick.addEventListener('click', this.bulletListClick);\n // bulletListDiv.appendChild(table1); \n this.target.appendChild(bulletListDiv);\n };\n /**\n * @private\n */\n BulletsAndNumberingDialog.prototype.showNumberBulletDialog = function (listFormat, abstractList) {\n if (!isNullOrUndefined(listFormat)) {\n this.listFormat = listFormat;\n }\n else {\n this.listFormat = new WListFormat();\n }\n if (isNullOrUndefined(this.listFormat.list)) {\n this.listFormat.list = new WList();\n }\n if (!isNullOrUndefined(abstractList)) {\n this.abstractList = abstractList;\n }\n else {\n this.abstractList = new WAbstractList();\n }\n var locale = new L10n('documenteditor', this.owner.owner.defaultLocale);\n locale.setLocale(this.owner.owner.locale);\n setCulture(this.owner.owner.locale);\n if (!this.target) {\n this.initNumberingBulletDialog(locale);\n }\n this.owner.dialog.header = locale.getConstant('Numbering and Bullets');\n this.owner.dialog.width = 'auto';\n this.owner.dialog.height = 'auto';\n this.owner.dialog.content = this.target;\n this.owner.dialog.beforeOpen = this.loadNumberingBulletDialog;\n this.owner.dialog.close = this.closeNumberingBulletDialog;\n this.owner.dialog.position = { X: 'center', Y: 'center' };\n this.owner.dialog.buttons = [{\n click: this.onOkButtonClick,\n buttonModel: { content: locale.getConstant('Ok'), cssClass: 'e-flat e-numbering-bullet-okay', isPrimary: true }\n },\n {\n click: this.onCancelButtonClick,\n buttonModel: { content: locale.getConstant('Cancel'), cssClass: 'e-flat e-numbering-bullet-cancel' }\n }];\n this.owner.dialog.dataBind();\n this.owner.dialog.show();\n };\n BulletsAndNumberingDialog.prototype.setActiveElement = function (args) {\n var html = args.currentTarget.parentElement;\n for (var i = 0; i < html.childElementCount; i++) {\n if (html.childNodes[i].classList.contains('e-de-list-active')) {\n html.childNodes[i].classList.remove('e-de-list-active');\n }\n }\n args.currentTarget.classList.add('e-de-list-active');\n };\n /**\n * @private\n */\n BulletsAndNumberingDialog.prototype.unWireEventsAndBindings = function () {\n //Unwire events\n };\n /**\n * @private\n */\n BulletsAndNumberingDialog.prototype.destroy = function () {\n this.owner = undefined;\n if (this.listFormat) {\n this.listFormat.destroy();\n this.listFormat = undefined;\n }\n if (this.abstractList) {\n this.abstractList.destroy();\n this.abstractList = undefined;\n }\n if (this.target && this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n for (var m = 0; m < this.target.childNodes.length; m++) {\n this.target.removeChild(this.target.childNodes[m]);\n m--;\n }\n this.target = undefined;\n }\n };\n return BulletsAndNumberingDialog;\n}());\nexport { BulletsAndNumberingDialog };\n/* tslint:enable:no-any */ \n","import { createElement, isNullOrUndefined, L10n, setCulture } from '@syncfusion/ej2-base';\nimport { DropDownList, ComboBox } from '@syncfusion/ej2-dropdowns';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\nimport { WCharacterFormat } from '../format/character-format';\nimport { ColorPicker } from '@syncfusion/ej2-inputs';\n/**\n * The Font dialog is used to modify formatting of selected text.\n */\n/* tslint:disable:no-any */\nvar FontDialog = /** @class */ (function () {\n /**\n * @private\n */\n function FontDialog(layoutViewer) {\n var _this = this;\n this.fontStyleInternal = undefined;\n this.fontNameList = undefined;\n this.fontStyleText = undefined;\n this.fontSizeText = undefined;\n this.colorPicker = undefined;\n this.underlineDrop = undefined;\n this.strikethroughBox = undefined;\n this.doublestrikethrough = undefined;\n this.superscript = undefined;\n this.subscript = undefined;\n //Character Format Property\n this.bold = undefined;\n this.italic = undefined;\n this.underline = undefined;\n this.strikethrough = undefined;\n this.baselineAlignment = undefined;\n this.fontSize = undefined;\n this.fontFamily = undefined;\n this.fontColor = undefined;\n /**\n * @private\n */\n this.characterFormat = undefined;\n /**\n * @private\n */\n this.loadFontDialog = function () {\n _this.owner.updateFocus();\n var characterFormat;\n if (_this.characterFormat) {\n characterFormat = _this.characterFormat;\n }\n else {\n characterFormat = _this.owner.owner.selection.characterFormat;\n }\n _this.fontNameList.value = characterFormat.fontFamily;\n if (!characterFormat.bold && !characterFormat.italic) {\n _this.fontStyleText.value = _this.fontSizeText.value;\n _this.fontStyleText.index = 0;\n }\n else if (characterFormat.bold && !characterFormat.italic) {\n _this.fontStyleText.value = _this.fontSizeText.value;\n _this.fontStyleText.index = 1;\n }\n else if (!characterFormat.bold && characterFormat.italic) {\n _this.fontStyleText.value = _this.fontSizeText.value;\n _this.fontStyleText.index = 2;\n }\n else if (characterFormat.bold && characterFormat.italic) {\n _this.fontStyleText.value = _this.fontSizeText.value;\n _this.fontStyleText.index = 3;\n }\n if (!isNullOrUndefined(characterFormat.fontSize)) {\n for (var i = 0; i <= 15; i++) {\n var items = _this.fontSizeText.getItems();\n if (characterFormat.fontSize.toString() === items[i].innerHTML) {\n _this.fontSizeText.value = characterFormat.fontSize;\n _this.fontSizeText.index = i;\n break;\n }\n }\n }\n if (!isNullOrUndefined(characterFormat.fontColor)) {\n _this.colorPicker.value = characterFormat.fontColor;\n }\n else {\n _this.colorPicker.value = '#000000';\n }\n if (characterFormat.underline === 'None') {\n _this.underlineDrop.index = 0;\n }\n else if (characterFormat.underline === 'Single') {\n _this.underlineDrop.index = 1;\n }\n if (characterFormat.strikethrough === 'SingleStrike') {\n _this.strikethroughBox.checked = true;\n }\n else if (characterFormat.strikethrough === 'DoubleStrike') {\n _this.doublestrikethrough.checked = true;\n }\n else {\n _this.strikethroughBox.checked = false;\n _this.doublestrikethrough.checked = false;\n }\n if (characterFormat.baselineAlignment === 'Superscript') {\n _this.superscript.checked = true;\n }\n else if (characterFormat.baselineAlignment === 'Subscript') {\n _this.subscript.checked = true;\n }\n else {\n _this.superscript.checked = false;\n _this.subscript.checked = false;\n }\n if (_this.owner.selection.caret.style.display !== 'none') {\n _this.owner.selection.caret.style.display = 'none';\n }\n };\n /**\n * @private\n */\n this.closeFontDialog = function () {\n _this.unWireEventsAndBindings();\n _this.owner.updateFocus();\n };\n /**\n * @private\n */\n this.onCancelButtonClick = function () {\n _this.owner.dialog.hide();\n _this.unWireEventsAndBindings();\n };\n /**\n * @private\n */\n this.onInsertFontFormat = function () {\n var format;\n if (_this.characterFormat) {\n format = _this.characterFormat;\n }\n else {\n format = new WCharacterFormat(undefined);\n }\n if (!isNullOrUndefined(_this.bold)) {\n format.bold = _this.bold;\n }\n if (!isNullOrUndefined(_this.italic)) {\n format.italic = _this.italic;\n }\n if (!isNullOrUndefined(_this.fontSize) && _this.fontSize > 0) {\n format.fontSize = _this.fontSize;\n }\n if (!isNullOrUndefined(_this.fontColor)) {\n format.fontColor = _this.fontColor;\n }\n if (!isNullOrUndefined(_this.baselineAlignment)) {\n format.baselineAlignment = _this.baselineAlignment;\n }\n if (!isNullOrUndefined(_this.strikethrough)) {\n format.strikethrough = _this.strikethrough;\n }\n if (!isNullOrUndefined(_this.underline)) {\n format.underline = _this.underline;\n }\n if (!isNullOrUndefined(_this.fontFamily)) {\n format.fontFamily = _this.fontFamily;\n }\n if (!_this.characterFormat) {\n _this.onCharacterFormat(_this.owner.selection, format);\n }\n else {\n _this.owner.owner.styleDialogModule.updateCharacterFormat();\n }\n _this.owner.dialog.hide();\n };\n this.fontSizeUpdate = function (args) {\n _this.fontSize = args.value;\n };\n this.fontStyleUpdate = function (args) {\n _this.fontStyle = args.value;\n };\n this.fontFamilyUpdate = function (args) {\n _this.fontFamily = args.value;\n };\n this.underlineUpdate = function (args) {\n _this.underline = args.value;\n };\n this.fontColorUpdate = function (args) {\n if (!isNullOrUndefined(args.currentValue)) {\n _this.fontColor = args.currentValue.hex;\n }\n };\n this.singleStrikeUpdate = function (args) {\n _this.enableCheckBoxProperty(args);\n if (args.checked) {\n _this.strikethrough = 'SingleStrike';\n }\n else {\n _this.strikethrough = 'None';\n }\n };\n this.doubleStrikeUpdate = function (args) {\n _this.enableCheckBoxProperty(args);\n if (args.checked) {\n _this.strikethrough = 'DoubleStrike';\n }\n else {\n _this.strikethrough = 'None';\n }\n };\n this.superscriptUpdate = function (args) {\n _this.enableCheckBoxProperty(args);\n if (args.checked) {\n _this.baselineAlignment = 'Superscript';\n }\n else {\n _this.baselineAlignment = 'Normal';\n }\n };\n this.subscriptUpdate = function (args) {\n _this.enableCheckBoxProperty(args);\n if (args.checked) {\n _this.baselineAlignment = 'Subscript';\n }\n else {\n _this.baselineAlignment = 'Normal';\n }\n };\n this.owner = layoutViewer;\n }\n Object.defineProperty(FontDialog.prototype, \"fontStyle\", {\n /**\n * @private\n */\n get: function () {\n return this.fontStyleInternal;\n },\n /**\n * @private\n */\n set: function (value) {\n this.fontStyleInternal = value;\n switch (this.fontStyle) {\n case 'Bold':\n this.bold = true;\n this.italic = false;\n break;\n case 'Italic':\n this.bold = false;\n this.italic = true;\n break;\n case 'BoldItalic':\n this.bold = true;\n this.italic = true;\n break;\n case 'Regular':\n this.bold = false;\n this.italic = false;\n break;\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n FontDialog.prototype.getModuleName = function () {\n return 'FontDialog';\n };\n FontDialog.prototype.createInputElement = function (type, id, className) {\n var element = createElement('input', {\n attrs: { type: type },\n id: id,\n className: className\n });\n return element;\n };\n /**\n * @private\n */\n FontDialog.prototype.initFontDialog = function (locale) {\n var instance = this;\n var effectLabel;\n var strikeThroughElement;\n var superScriptElement;\n var subScriptElement;\n var doubleStrikeThroughElement;\n var id = this.owner.owner.containerId;\n this.target = createElement('div', { id: id + '_insertFontDialog', className: 'e-de-font-dlg' });\n var fontDiv = this.getFontDiv(locale);\n this.target.appendChild(fontDiv);\n var sizeDiv = this.getFontSizeDiv(locale);\n this.target.appendChild(sizeDiv);\n var colorDiv = createElement('div', { id: id + '_fontColor', styles: 'margin-top:15px;' });\n this.fontColorDiv = createElement('div', { id: id + '_fontColorDiv', className: 'e-de-font-dlg-display' });\n var fontColorLabel = createElement('label', {\n className: 'e-de-font-dlg-header-font-color e-de-font-color-margin', innerHTML: locale.getConstant('Font Color')\n });\n this.fontColorDiv.appendChild(fontColorLabel);\n var fontColorElement = this.createInputElement('color', this.target.id + '_ColorDiv', 'e-de-font-dlg-color');\n this.fontColorDiv.appendChild(fontColorElement);\n colorDiv.appendChild(this.fontColorDiv);\n this.target.appendChild(colorDiv);\n var fontEffectsDiv = createElement('div', { id: id + '_fontEffectsDiv' });\n var fontEffectSubDiv1 = createElement('div', {\n className: 'e-de-font-color-label e-de-font-dlg-display',\n id: this.target.id + '_fontEffectsSubDiv1'\n });\n effectLabel = createElement('label', { className: 'e-de-font-dlg-header-effects', innerHTML: locale.getConstant('Effects') });\n fontEffectSubDiv1.appendChild(effectLabel);\n strikeThroughElement = this.createInputElement('checkbox', this.target.id + '_strikeThrough', '');\n fontEffectSubDiv1.appendChild(strikeThroughElement);\n superScriptElement = this.createInputElement('checkbox', this.target.id + '_superScript', '');\n fontEffectSubDiv1.appendChild(superScriptElement);\n fontEffectsDiv.appendChild(fontEffectSubDiv1);\n var fontEffectSubDiv2 = createElement('div', { className: 'e-de-font-checkbox', id: id + '_fontEffectsSubDiv2' });\n subScriptElement = this.createInputElement('checkbox', this.target.id + '_subScript', '');\n fontEffectSubDiv2.appendChild(subScriptElement);\n doubleStrikeThroughElement = this.createInputElement('checkbox', this.target.id + '_doubleStrikeThrough', '');\n fontEffectSubDiv2.appendChild(doubleStrikeThroughElement);\n fontEffectsDiv.appendChild(fontEffectSubDiv2);\n this.target.appendChild(fontEffectsDiv);\n this.owner.owner.element.appendChild(this.target);\n this.colorPicker = new ColorPicker({\n change: this.fontColorUpdate, value: '#000000',\n });\n this.colorPicker.appendTo(fontColorElement);\n this.strikethroughBox = new CheckBox({\n change: this.singleStrikeUpdate,\n cssClass: 'e-de-font-content-label',\n label: locale.getConstant('Strikethrough')\n });\n this.strikethroughBox.appendTo(strikeThroughElement);\n this.doublestrikethrough = new CheckBox({\n change: this.doubleStrikeUpdate,\n cssClass: 'e-de-font-content-checkbox-label',\n label: locale.getConstant('Double Strikethrough')\n });\n this.doublestrikethrough.appendTo(doubleStrikeThroughElement);\n this.subscript = new CheckBox({\n label: locale.getConstant('Subscript'),\n change: this.subscriptUpdate\n });\n this.subscript.appendTo(subScriptElement);\n this.superscript = new CheckBox({\n label: locale.getConstant('Superscript'),\n cssClass: 'e-de-font-content-label', change: this.superscriptUpdate\n });\n this.superscript.appendTo(superScriptElement);\n };\n FontDialog.prototype.getFontSizeDiv = function (locale) {\n var fontSize;\n var sizeDiv;\n var id = this.owner.owner.containerId;\n sizeDiv = createElement('div', { id: id + '_fontSizeAndUnderlineDiv', className: 'e-de-font-dlg-padding e-de-font-dlg-display' });\n var sizeSubDiv1 = createElement('div', { id: id + '_fontSizeAndUnderlineSubDiv1' });\n var sizeLabel = createElement('label', { className: 'e-de-font-dlg-header', innerHTML: locale.getConstant('Size') });\n var styles = 'font-family:Roboto;font-size:14px;opacity:0.8;';\n fontSize = createElement('select', { id: this.target.id + '_fontSize', styles: styles });\n fontSize.innerHTML = '' +\n '' +\n '';\n sizeSubDiv1.appendChild(sizeLabel);\n sizeSubDiv1.appendChild(fontSize);\n sizeDiv.appendChild(sizeSubDiv1);\n var sizeSubDiv2 = createElement('div', {\n className: 'e-de-font-dlg-cb-right',\n id: id + '_fontSizeAndUnderlineSubDiv2'\n });\n var html = locale.getConstant('Underline');\n var underlineLabel = createElement('label', { className: 'e-de-font-dlg-header', innerHTML: html });\n var underlineElement;\n underlineElement = createElement('select', { id: this.target.id + '_underLine', styles: styles });\n underlineElement.innerHTML = '';\n sizeSubDiv2.appendChild(underlineLabel);\n sizeSubDiv2.appendChild(underlineElement);\n sizeDiv.appendChild(sizeSubDiv2);\n this.fontSizeText = new ComboBox({ change: this.fontSizeUpdate, popupHeight: '170px', width: '170px' });\n this.fontSizeText.showClearButton = false;\n this.fontSizeText.appendTo(fontSize);\n this.underlineDrop = new DropDownList({ change: this.underlineUpdate, popupHeight: '100px', width: '170px' });\n this.underlineDrop.appendTo(underlineElement);\n return sizeDiv;\n };\n FontDialog.prototype.getFontDiv = function (locale) {\n var id = this.owner.owner.containerId;\n var fontDiv = createElement('div', { id: id + '_fontDiv', className: 'e-de-font-dlg-display' });\n var fontSubDiv1 = createElement('div', { id: id + '_fontSubDiv1' });\n var fontNameLabel = createElement('label', {\n className: 'e-de-font-dlg-header',\n innerHTML: locale.getConstant('Font')\n });\n var fontNameValues = createElement('select', { id: this.target.id + '_fontName' });\n fontNameValues.innerHTML = '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '';\n fontSubDiv1.appendChild(fontNameLabel);\n fontSubDiv1.appendChild(fontNameValues);\n fontDiv.appendChild(fontSubDiv1);\n var fontSubDiv2;\n var fontStyleLabel;\n var fontStyleValues;\n fontSubDiv2 = createElement('div', { className: 'e-de-font-dlg-cb-right', id: id + '_fontSubDiv2', styles: 'float:right;' });\n fontStyleLabel = createElement('label', { className: 'e-de-font-dlg-header', innerHTML: locale.getConstant('Font Style') });\n var fontStyle = 'font-family:Roboto;font-size:14px;opacity:0.8;';\n fontStyleValues = createElement('select', { id: this.target.id + '_fontStyle', styles: fontStyle });\n fontStyleValues.innerHTML = '';\n fontSubDiv2.appendChild(fontStyleLabel);\n fontSubDiv2.appendChild(fontStyleValues);\n fontDiv.appendChild(fontSubDiv2);\n this.fontNameList = new ComboBox({ change: this.fontFamilyUpdate, popupHeight: '200px', width: '170px' });\n this.fontNameList.showClearButton = false;\n this.fontNameList.appendTo(fontNameValues);\n this.fontStyleText = new DropDownList({ change: this.fontStyleUpdate, popupHeight: '170px', width: '170px' });\n this.fontStyleText.appendTo(fontStyleValues);\n return fontDiv;\n };\n /**\n * @private\n */\n FontDialog.prototype.showFontDialog = function (characterFormat) {\n if (characterFormat) {\n this.characterFormat = characterFormat;\n }\n var locale = new L10n('documenteditor', this.owner.owner.defaultLocale);\n locale.setLocale(this.owner.owner.locale);\n setCulture(this.owner.owner.locale);\n if (!this.target) {\n this.initFontDialog(locale);\n }\n this.owner.dialog.header = locale.getConstant('Font');\n this.owner.dialog.width = 'auto';\n this.owner.dialog.height = 'auto';\n this.owner.dialog.content = this.target;\n this.owner.dialog.beforeOpen = this.loadFontDialog;\n this.owner.dialog.close = this.closeFontDialog;\n this.owner.dialog.buttons = [{\n click: this.onInsertFontFormat,\n buttonModel: { content: locale.getConstant('Ok'), cssClass: 'e-flat e-font-okay', isPrimary: true }\n },\n {\n click: this.onCancelButtonClick,\n buttonModel: { content: locale.getConstant('Cancel'), cssClass: 'e-flat e-font-cancel' }\n }];\n this.owner.dialog.dataBind();\n this.owner.dialog.show();\n };\n /**\n * Applies character format\n * @param {Selection} selection\n * @param {WCharacterFormat} format\n * @private\n */\n FontDialog.prototype.onCharacterFormat = function (selection, format) {\n this.owner.owner.editorModule.initHistory('CharacterFormat');\n if (selection.isEmpty) {\n if (selection.start.offset === selection.getParagraphLength(selection.start.paragraph)) {\n // tslint:disable-next-line:max-line-length\n this.owner.owner.editorModule.applyCharFormatValueInternal(selection, selection.start.paragraph.characterFormat, undefined, format);\n this.owner.owner.editorModule.reLayout(selection);\n }\n this.owner.updateFocus();\n return;\n }\n else {\n //Iterate and update formating.\n this.owner.owner.editorModule.setOffsetValue(this.owner.selection);\n this.owner.owner.editorModule.updateSelectionCharacterFormatting('CharacterFormat', format, false);\n }\n };\n /**\n * @private\n */\n FontDialog.prototype.enableCheckBoxProperty = function (args) {\n if (this.strikethroughBox.checked && this.doublestrikethrough.checked) {\n this.strikethroughBox.checked = false;\n this.doublestrikethrough.checked = false;\n if (args.event.currentTarget.id === this.target.id + '_doubleStrikeThrough') {\n this.doublestrikethrough.checked = true;\n }\n else {\n this.strikethroughBox.checked = true;\n }\n }\n if (this.superscript.checked && this.subscript.checked) {\n this.subscript.checked = false;\n this.superscript.checked = false;\n if (args.event.currentTarget.id === this.target.id + '_subScript') {\n this.subscript.checked = true;\n }\n else {\n this.superscript.checked = true;\n }\n }\n };\n /**\n * @private\n */\n FontDialog.prototype.unWireEventsAndBindings = function () {\n this.fontNameList.value = '';\n this.fontSizeText.value = '';\n this.fontStyleText.value = '';\n this.strikethroughBox.checked = false;\n this.doublestrikethrough.checked = false;\n this.superscript.checked = false;\n this.subscript.checked = false;\n this.bold = undefined;\n this.italic = undefined;\n this.underline = undefined;\n this.strikethrough = undefined;\n this.baselineAlignment = undefined;\n this.colorPicker.change = undefined;\n this.fontColor = undefined;\n this.fontSize = undefined;\n this.fontFamily = undefined;\n };\n /**\n * @private\n */\n FontDialog.prototype.destroy = function () {\n this.owner = undefined;\n if (this.characterFormat) {\n this.characterFormat.destroy();\n this.characterFormat = undefined;\n }\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var m = 0; m < this.target.childNodes.length; m++) {\n this.target.removeChild(this.target.childNodes[m]);\n m--;\n }\n this.target = undefined;\n }\n if (this.fontNameList) {\n this.fontNameList.destroy();\n }\n this.fontNameList = undefined;\n if (this.fontStyleText) {\n this.fontStyleText.destroy();\n }\n this.fontStyleText = undefined;\n if (this.fontSizeText) {\n this.fontSizeText.destroy();\n }\n this.fontSizeText = undefined;\n if (this.colorPicker) {\n this.colorPicker.destroy();\n }\n this.colorPicker = undefined;\n if (this.underlineDrop) {\n this.underlineDrop.destroy();\n }\n this.underlineDrop = undefined;\n if (this.strikethroughBox) {\n this.strikethroughBox.destroy();\n }\n this.strikethroughBox = undefined;\n if (this.doublestrikethrough) {\n this.doublestrikethrough.destroy();\n }\n this.doublestrikethrough = undefined;\n if (this.superscript) {\n this.superscript.destroy();\n }\n this.superscript = undefined;\n if (this.subscript) {\n this.subscript.destroy();\n }\n this.subscript = undefined;\n };\n return FontDialog;\n}());\nexport { FontDialog };\n/* tslint:enable:no-any */ \n","import { createElement, isNullOrUndefined, L10n, setCulture } from '@syncfusion/ej2-base';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { WTableFormat, WRowFormat, WCellFormat } from '../format/index';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { Tab } from '@syncfusion/ej2-navigations';\nimport { classList } from '@syncfusion/ej2-base';\nimport { HelperMethods } from '../editor/editor-helper';\n/**\n * The Table properties dialog is used to modify properties of selected table.\n */\nvar TablePropertiesDialog = /** @class */ (function () {\n /**\n * @private\n */\n function TablePropertiesDialog(viewer) {\n var _this = this;\n this.hasTableWidth = false;\n this.hasCellWidth = false;\n /**\n * @private\n */\n this.isTableBordersAndShadingUpdated = false;\n /**\n * @private\n */\n this.isCellBordersAndShadingUpdated = false;\n this.tabObj = undefined;\n /**\n * @private\n */\n this.isCellOptionsUpdated = false;\n /**\n * @private\n */\n this.isTableOptionsUpdated = false;\n this.onBeforeOpen = function () {\n _this.owner.updateFocus();\n _this.loadTableProperties.bind(_this);\n };\n /**\n * @private\n */\n this.onCloseTablePropertyDialog = function () {\n _this.unWireEvent.bind(_this);\n _this.owner.updateFocus();\n };\n /**\n * @private\n */\n this.applyTableProperties = function () {\n var selection = _this.owner.selection;\n if (!_this.preferCheckBox.checked && !_this.preferCheckBox.indeterminate) {\n if (isNullOrUndefined(selection.tableFormat.preferredWidth) || selection.tableFormat.preferredWidth !== 0) {\n _this.tableFormat.preferredWidth = 0;\n _this.tableFormat.preferredWidthType = 'Point';\n }\n }\n if (_this.tableFormat.hasValue('tableAlignment') && _this.tableFormat.tableAlignment !== 'Left') {\n if (isNullOrUndefined(selection.tableFormat.leftIndent) || selection.tableFormat.leftIndent !== 0) {\n _this.tableFormat.leftIndent = 0;\n }\n }\n if (!_this.rowHeightCheckBox.checked && !_this.rowHeightCheckBox.indeterminate) {\n if (isNullOrUndefined(selection.rowFormat.height) || selection.rowFormat.height !== 0) {\n _this.rowFormat.heightType = 'AtLeast';\n _this.rowFormat.height = 0;\n }\n }\n if (!_this.preferredCellWidthCheckBox.checked && !_this.preferredCellWidthCheckBox.indeterminate) {\n if (isNullOrUndefined(selection.cellFormat.preferredWidth) || selection.cellFormat.preferredWidth !== 0) {\n _this.cellFormat.preferredWidthType = 'Point';\n _this.cellFormat.preferredWidth = 0;\n }\n }\n else {\n if (_this.cellFormat.preferredWidthType === 'Percent') {\n if (!_this.tableFormat.hasValue('preferredWidth') && !_this.tableFormat.hasValue('preferredWidthType')\n && _this.owner.selection.start.paragraph.associatedCell.ownerTable.tableFormat.preferredWidth === 0) {\n // tslint:disable-next-line:max-line-length\n var containerWidth = _this.owner.selection.start.paragraph.associatedCell.ownerTable.getOwnerWidth(true);\n var tableWidth = _this.owner.selection.start.paragraph.associatedCell.ownerTable.getTableClientWidth(containerWidth);\n _this.tableFormat.preferredWidthType = 'Percent';\n _this.tableFormat.preferredWidth = tableWidth / HelperMethods.convertPixelToPoint(_this.owner.clientArea.width) * 100;\n }\n }\n }\n if (_this.rowHeightValue) {\n _this.rowFormat.height = _this.rowHeightValue;\n }\n _this.owner.owner.editorModule.initComplexHistory('TableProperties');\n _this.owner.owner.editorModule.onTableFormat(_this.tableFormat);\n _this.owner.owner.editorModule.onRowFormat(_this.rowFormat);\n _this.owner.owner.editorModule.onCellFormat(_this.cellFormat);\n _this.owner.owner.editorHistory.updateComplexHistory();\n _this.closeTablePropertiesDialog();\n _this.owner.updateFocus();\n };\n /**\n * @private\n */\n this.applyTableSubProperties = function () {\n if (_this.isCellOptionsUpdated) {\n var cellFormat = _this.owner.owner.cellOptionsDialogModule.cellFormat;\n _this.owner.owner.cellOptionsDialogModule.applySubCellOptions(cellFormat);\n }\n if (_this.isTableOptionsUpdated) {\n var tableFormat = _this.owner.owner.tableOptionsDialogModule.tableFormat;\n _this.owner.owner.tableOptionsDialogModule.applySubTableOptions(tableFormat);\n }\n _this.isCellOptionsUpdated = false;\n _this.isTableOptionsUpdated = false;\n };\n /**\n * @private\n */\n this.unWireEvent = function () {\n //Table Format\n _this.preferCheckBox.change = undefined;\n _this.tableWidthBox.change = undefined;\n _this.tableWidthType.change = undefined;\n _this.leftIndentBox.change = undefined;\n //Row Format\n _this.rowHeightCheckBox.change = undefined;\n _this.rowHeightBox.change = undefined;\n _this.rowHeightType.change = undefined;\n _this.repeatHeader.change = undefined;\n _this.allowRowBreak.change = undefined;\n //Cell Format\n _this.preferredCellWidthCheckBox.change = undefined;\n _this.cellWidthBox.change = undefined;\n _this.cellWidthType.change = undefined;\n _this.cellFormat.destroy();\n _this.rowFormat.destroy();\n _this.tableFormat.destroy();\n _this.rowHeightValue = undefined;\n _this.owner.dialog2.open = _this.owner.selection.hideCaret.bind(_this.owner);\n };\n /**\n * @private\n */\n this.closeTablePropertiesDialog = function () {\n _this.owner.dialog2.hide();\n _this.owner.updateFocus();\n };\n /**\n * @private\n */\n this.changeTableCheckBox = function () {\n var enable = (_this.preferCheckBox.checked || _this.preferCheckBox.indeterminate);\n _this.tableWidthBox.enabled = enable;\n _this.tableWidthType.enabled = enable;\n if (enable) {\n _this.tableFormat.preferredWidthType = (_this.tableWidthType.value === 'Points') ?\n 'Point' : _this.tableWidthType.value;\n }\n else {\n _this.tableFormat.preferredWidthType = _this.owner.selection.tableFormat.preferredWidthType;\n }\n };\n /**\n * @private\n */\n this.changeTableAlignment = function (event) {\n _this.updateClassForAlignmentProperties(_this.tableTab);\n var element = event.target;\n classList(element, ['e-de-table-alignment-active'], ['e-de-table-properties-alignment']);\n if (element.classList.contains('e-de-table-left-alignment')) {\n _this.leftIndentBox.enabled = true;\n }\n else {\n _this.leftIndentBox.enabled = false;\n }\n _this.tableFormat.tableAlignment = _this.getTableAlignment();\n };\n /**\n * @private\n */\n this.changeTableRowCheckBox = function () {\n _this.rowHeightType.enabled = _this.rowHeightCheckBox.checked;\n _this.rowHeightBox.enabled = _this.rowHeightCheckBox.checked;\n if (_this.rowHeightType.enabled) {\n _this.rowFormat.heightType = _this.rowHeightType.value;\n }\n else {\n _this.rowFormat.heightType = _this.owner.selection.rowFormat.heightType;\n }\n };\n /**\n * @private\n */\n this.changeTableCellCheckBox = function () {\n _this.cellWidthType.enabled = _this.preferredCellWidthCheckBox.checked;\n _this.cellWidthBox.enabled = _this.preferredCellWidthCheckBox.checked;\n };\n /**\n * @private\n */\n this.changeCellAlignment = function (event) {\n _this.updateClassForCellAlignment(_this.cellTab);\n var element = event.target;\n classList(element, ['e-de-table-alignment-active'], ['e-de-tablecell-alignment']);\n _this.cellFormat.verticalAlignment = _this.getCellAlignment();\n };\n //#endregion\n /**\n * @private\n */\n this.showTableOptionsDialog = function () {\n _this.owner.owner.tableOptionsDialogModule.show();\n _this.owner.dialog2.element.style.pointerEvents = 'none';\n };\n /**\n * @private\n */\n this.showBordersShadingsPropertiesDialog = function () {\n _this.owner.owner.bordersAndShadingDialogModule.show();\n _this.owner.dialog2.element.style.pointerEvents = 'none';\n };\n /**\n * @private\n */\n this.showCellOptionsDialog = function () {\n _this.owner.owner.cellOptionsDialogModule.show();\n _this.owner.dialog2.element.style.pointerEvents = 'none';\n };\n this.owner = viewer;\n }\n Object.defineProperty(TablePropertiesDialog.prototype, \"cellFormat\", {\n /**\n * @private\n */\n get: function () {\n if (isNullOrUndefined(this.cellFormatIn)) {\n return this.cellFormatIn = new WCellFormat();\n }\n return this.cellFormatIn;\n },\n /**\n * @private\n */\n set: function (value) {\n this.cellFormatIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TablePropertiesDialog.prototype, \"tableFormat\", {\n /**\n * @private\n */\n get: function () {\n if (isNullOrUndefined(this.tableFormatIn)) {\n this.tableFormatIn = new WTableFormat();\n return this.tableFormatIn;\n }\n return this.tableFormatIn;\n },\n /**\n * @private\n */\n set: function (value) {\n this.tableFormatIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TablePropertiesDialog.prototype, \"rowFormat\", {\n /**\n * @private\n */\n get: function () {\n if (isNullOrUndefined(this.rowFormatInternal)) {\n this.rowFormatInternal = new WRowFormat();\n return this.rowFormatInternal;\n }\n return this.rowFormatInternal;\n },\n enumerable: true,\n configurable: true\n });\n TablePropertiesDialog.prototype.getModuleName = function () {\n return 'TablePropertiesDialog';\n };\n /**\n * @private\n */\n TablePropertiesDialog.prototype.initTablePropertyDialog = function (localValue) {\n var id = this.owner.owner.containerId + '_TablePropertiesDialog';\n this.target = createElement('div', { id: id, className: 'e-de-table-properties-dlg' });\n this.owner.owner.element.appendChild(this.target);\n var ejtabContainer = createElement('div', { id: this.target.id + '_TabContainer' });\n this.target.appendChild(ejtabContainer);\n this.tableTab = createElement('div', {\n id: this.target.id + '_TablePropertiesContentDialogTab', className: 'e-de-table-ppty-dlg-tabs'\n });\n this.rowTab = createElement('div', {\n id: this.target.id + '_RowPropertiesDialogTab', className: 'e-de-table-ppty-dlg-tabs'\n });\n this.cellTab = createElement('div', {\n id: this.target.id + '_CellPropertiesDialogTab', className: 'e-de-table-ppty-dlg-tabs'\n });\n var separatorLine = createElement('div', { className: 'e-de-table-dialog-separator-line' });\n // tslint:disable-next-line:max-line-length\n var ejtab = createElement('div', { id: this.target.id + '_TablePropertiesDialogTab', className: 'e-de-table-ppty-tab' });\n var headerContainer = createElement('div', { className: 'e-tab-header' });\n var tableHeader = createElement('div', {\n id: this.target.id + '_tableHeader', innerHTML: localValue.getConstant('Table')\n });\n var rowHeader = createElement('div', {\n id: this.target.id + '_rowHeader', innerHTML: localValue.getConstant('Row')\n });\n var cellHeader = createElement('div', {\n id: this.target.id + '_cellHeader', innerHTML: localValue.getConstant('Cell')\n });\n headerContainer.appendChild(tableHeader);\n headerContainer.appendChild(rowHeader);\n headerContainer.appendChild(cellHeader);\n var contentContainer = createElement('div', { className: 'e-content' });\n var tableContent = createElement('div', { id: this.target.id + '_tableContent' });\n var rowContent = createElement('div', { id: this.target.id + '_rowContent' });\n var cellContent = createElement('div', { id: this.target.id + '_cellContent' });\n tableContent.appendChild(this.tableTab);\n rowContent.appendChild(this.rowTab);\n cellContent.appendChild(this.cellTab);\n contentContainer.appendChild(tableContent);\n contentContainer.appendChild(rowContent);\n contentContainer.appendChild(cellContent);\n ejtab.appendChild(headerContainer);\n ejtab.appendChild(contentContainer);\n ejtabContainer.appendChild(ejtab);\n this.initTableProperties(this.tableTab, localValue);\n this.initTableRowProperties(this.rowTab, localValue);\n this.initTableCellProperties(this.cellTab, localValue);\n this.tabObj = new Tab({}, ejtab);\n this.target.appendChild(separatorLine);\n var alignMentButtons = this.tableTab.getElementsByClassName(this.tableTab.id + 'e-de-table-alignment');\n for (var i = 0; i < alignMentButtons.length; i++) {\n alignMentButtons[i].addEventListener('click', this.changeTableAlignment);\n }\n var cellAlignment = this.cellTab.getElementsByClassName(this.cellTab.id + 'e-de-table-cell-alignment');\n for (var i = 0; i < cellAlignment.length; i++) {\n cellAlignment[i].addEventListener('click', this.changeCellAlignment);\n }\n var tableTabHeader = this.tabObj.element.getElementsByClassName('e-item e-toolbar-item')[0];\n var tableTabHeaderItem = tableTabHeader.getElementsByClassName('e-tab-wrap')[0];\n tableTabHeaderItem.classList.add('e-de-table-ppty-dlg-table-header');\n var rowTabHeader = this.tabObj.element.getElementsByClassName('e-item e-toolbar-item')[1];\n var rowTabHeaderItem = rowTabHeader.getElementsByClassName('e-tab-wrap')[0];\n rowTabHeaderItem.classList.add('e-de-table-ppty-dlg-row-header');\n var cellTabHeader = this.tabObj.element.getElementsByClassName('e-item e-toolbar-item')[2];\n var cellTabHeaderItem = cellTabHeader.getElementsByClassName('e-tab-wrap')[0];\n cellTabHeaderItem.classList.add('e-de-table-ppty-dlg-cell-header');\n this.tabObj.element.getElementsByClassName('e-indicator')[0].style.right = '155px';\n };\n /**\n * @private\n */\n TablePropertiesDialog.prototype.show = function () {\n var localValue = new L10n('documenteditor', this.owner.owner.defaultLocale);\n localValue.setLocale(this.owner.owner.locale);\n setCulture(this.owner.owner.locale);\n if (!this.target) {\n this.initTablePropertyDialog(localValue);\n }\n if (this.owner.selection.caret.style.display !== 'none') {\n this.owner.selection.caret.style.display = 'none';\n }\n this.owner.dialog2.header = localValue.getConstant('Table Properties');\n this.owner.dialog2.position = { X: 'center', Y: 'center' };\n this.owner.dialog2.width = 'auto';\n this.owner.dialog2.height = 'auto';\n this.owner.dialog2.content = this.target;\n this.owner.dialog2.beforeOpen = this.onBeforeOpen;\n this.owner.dialog2.close = this.onCloseTablePropertyDialog;\n this.owner.dialog2.open = this.wireEvent.bind(this);\n this.owner.dialog2.buttons = [{\n click: this.applyTableProperties,\n buttonModel: { content: localValue.getConstant('Ok'), cssClass: 'e-flat e-table-ppty-okay', isPrimary: true }\n },\n {\n click: this.closeTablePropertiesDialog,\n buttonModel: { content: localValue.getConstant('Cancel'), cssClass: 'e-flat e-table-ppty-cancel' }\n }];\n //this.tabObj.select(0);\n this.owner.dialog2.dataBind();\n this.owner.dialog2.show();\n };\n /**\n * @private\n */\n TablePropertiesDialog.prototype.calculateGridValue = function (table) {\n table.calculateGrid();\n table.isGridUpdated = false;\n table.buildTableColumns();\n table.isGridUpdated = true;\n this.owner.selection.owner.isLayoutEnabled = true;\n this.owner.layout.reLayoutTable(table);\n this.owner.owner.editorModule.reLayout(this.owner.selection);\n this.owner.owner.editorModule.updateSelectionTextPosition(true);\n var history = this.owner.owner.editorHistory;\n if (history && history.currentBaseHistoryInfo) {\n if (history.currentBaseHistoryInfo.modifiedProperties.length > 0) {\n history.currentBaseHistoryInfo.updateSelection();\n }\n history.updateHistory();\n }\n this.owner.owner.editorModule.fireContentChange();\n };\n /**\n * @private\n */\n TablePropertiesDialog.prototype.loadTableProperties = function () {\n this.setTableProperties();\n this.setTableRowProperties();\n this.setTableCellProperties();\n if (!this.owner.owner.bordersAndShadingDialogModule) {\n this.bordersAndShadingButton.disabled = true;\n }\n else {\n this.bordersAndShadingButton.disabled = false;\n }\n // if (!this.owner.owner.tableOptionsDialogModule) {\n // this.tableOptionButton.disabled = true;\n // } else {\n this.tableOptionButton.disabled = false;\n // }\n // if (!this.owner.owner.cellOptionsDialogModule) {\n // this.cellOptionButton.disabled = true;\n // } else {\n this.cellOptionButton.disabled = false;\n // }\n };\n /**\n * @private\n */\n TablePropertiesDialog.prototype.wireEvent = function () {\n this.owner.selection.hideCaret();\n //Table Format\n this.preferCheckBox.change = this.changeTableCheckBox.bind(this);\n this.tableWidthBox.change = this.onTableWidthChange.bind(this);\n this.tableWidthType.change = this.onTableWidthTypeChange.bind(this);\n this.leftIndentBox.change = this.onLeftIndentChange.bind(this);\n //Row Format\n this.rowHeightCheckBox.change = this.changeTableRowCheckBox.bind(this);\n this.rowHeightBox.change = this.onRowHeightChange.bind(this);\n this.rowHeightType.change = this.onRowHeightTypeChange.bind(this);\n this.allowRowBreak.change = this.onAllowBreakAcrossPage.bind(this);\n this.repeatHeader.change = this.onRepeatHeader.bind(this);\n //Cell Format\n this.preferredCellWidthCheckBox.change = this.changeTableCellCheckBox.bind(this);\n this.cellWidthBox.change = this.onCellWidthChange.bind(this);\n this.cellWidthType.change = this.onCellWidthTypeChange.bind(this);\n };\n //#region Table Format\n /**\n * @private\n */\n // tslint:disable-next-line:max-func-body-length\n TablePropertiesDialog.prototype.initTableProperties = function (element, localValue) {\n var container = createElement('div', { id: element.id + '_table_TabContainer' });\n var sizeHeader = createElement('div', {\n id: container.id + '_sizeLabel', innerHTML: localValue.getConstant('Size'),\n styles: 'width:100%;margin:0px;padding-top: 20px;padding-bottom: 0px;', className: 'e-de-table-dialog-options-label'\n });\n var parentContainer = createElement('div', { styles: 'display: inline-flex;' });\n var childContainer1 = createElement('div', {\n styles: 'float: left;',\n className: 'e-de-table-container-div'\n });\n var childContainer2 = createElement('div', {\n className: 'e-de-table-ppty-dlg-preferred-width-div'\n });\n var child1 = createElement('div', {\n styles: 'display: inline;',\n className: 'e-de-table-ppty-dlg-measure-div'\n });\n var child2 = createElement('div', {\n styles: 'display: inline;position: absolute;',\n className: 'e-de-table-ppty-dlg-measure-drop-down-div'\n });\n var childContainer3 = createElement('div');\n var preferCheckBox = createElement('input', {\n id: element.id + '_Prefer_Width_CheckBox', attrs: { 'type': 'checkbox' }\n });\n this.preferredWidth = createElement('input', { id: element.id + 'preferred_Width' });\n var controlDiv = createElement('div');\n var tableWidthType = createElement('select', {\n innerHTML: '', id: element.id + '_width_dropdown'\n });\n var labeltext = createElement('label', {\n innerHTML: localValue.getConstant('Measure in'), styles: 'width: 60px;font-size: 11px; font-weight: normal;'\n });\n var alignmentHeader = createElement('div', {\n innerHTML: localValue.getConstant('Alignment'), className: 'e-de-table-dialog-options-label',\n styles: 'width: 100%;margin: 0px;padding-bottom: 15px'\n });\n var alignmentContainer = createElement('div', { styles: 'height:70px;' });\n var classDivName = element.id + 'e-de-table-alignment';\n var leftAlignDiv = createElement('div', { className: 'e-de-table-dia-align-div' });\n this.left = createElement('div', {\n className: 'e-icons e-de-table-properties-alignment e-de-table-left-alignment ' + classDivName,\n id: element.id + '_left_alignment', styles: 'width:54px;height:54px;margin:2px'\n });\n leftAlignDiv.appendChild(this.left);\n var centerAlignDiv = createElement('div', { className: 'e-de-table-dia-align-div' });\n this.center = createElement('div', {\n className: 'e-icons e-de-table-properties-alignment e-de-table-center-alignment ' + classDivName,\n id: element.id + '_center_alignment', styles: 'width:54px;height:54px;margin:2px'\n });\n centerAlignDiv.appendChild(this.center);\n this.right = createElement('div', {\n styles: 'width:54px;height:54px;margin:2px', id: element.id + '_right_alignment',\n className: 'e-icons e-de-table-properties-alignment e-de-table-right-alignment ' + classDivName\n });\n var rightAlignDiv = createElement('div', { className: 'e-de-table-dia-align-div' });\n rightAlignDiv.appendChild(this.right);\n var leftlabel = createElement('label', {\n innerHTML: localValue.getConstant('Left'), className: 'e-de-table-dia-align-label'\n });\n var centerlabel = createElement('label', {\n innerHTML: localValue.getConstant('Center'), className: 'e-de-table-dia-align-label'\n });\n var rightlabel = createElement('label', {\n innerHTML: localValue.getConstant('Right'), className: 'e-de-table-dia-align-label'\n });\n var leftIndenetContainer = createElement('div', {\n className: 'e-de-table-ppty-dlg-left-indent-container'\n });\n var leftIndentLabel = createElement('label', {\n innerHTML: localValue.getConstant('Indent from Left'),\n styles: 'font-weight: normal;font-size: 11px;float:right;margin-right:121px;'\n });\n var leftIndentBox = createElement('div', {\n styles: 'margin-top: 27px;'\n });\n this.leftIndent = createElement('input', { id: element.id + '_left_indent' });\n var tableOptionContiner = createElement('div', {\n className: 'e-de-tbl-dlg-border-btn'\n });\n this.bordersAndShadingButton = createElement('button', {\n innerHTML: localValue.getConstant('Borders and Shading'),\n id: element.id + '_borders_and_shadings', className: 'e-control e-btn e-flat e-de-ok-button'\n });\n this.tableOptionButton = createElement('button', {\n className: 'e-control e-btn e-flat', innerHTML: localValue.getConstant('Options'),\n id: element.id + '_table_cellmargin'\n });\n this.tableOptionButton.addEventListener('click', this.showTableOptionsDialog);\n this.bordersAndShadingButton.addEventListener('click', this.showBordersShadingsPropertiesDialog);\n tableOptionContiner.appendChild(this.bordersAndShadingButton);\n tableOptionContiner.appendChild(this.tableOptionButton);\n leftIndenetContainer.appendChild(leftIndentLabel);\n leftIndentBox.appendChild(this.leftIndent);\n leftIndenetContainer.appendChild(leftIndentBox);\n alignmentContainer.appendChild(leftAlignDiv);\n alignmentContainer.appendChild(centerAlignDiv);\n alignmentContainer.appendChild(rightAlignDiv);\n leftAlignDiv.appendChild(leftlabel);\n centerAlignDiv.appendChild(centerlabel);\n rightAlignDiv.appendChild(rightlabel);\n alignmentContainer.appendChild(leftIndenetContainer);\n container.appendChild(sizeHeader);\n element.appendChild(container);\n childContainer1.appendChild(preferCheckBox);\n parentContainer.appendChild(childContainer1);\n childContainer2.appendChild(this.preferredWidth);\n parentContainer.appendChild(childContainer2);\n controlDiv.appendChild(tableWidthType);\n child1.appendChild(labeltext);\n child2.appendChild(controlDiv);\n childContainer3.appendChild(child1);\n childContainer3.appendChild(child2);\n parentContainer.appendChild(childContainer3);\n element.appendChild(parentContainer);\n element.appendChild(alignmentHeader);\n element.appendChild(alignmentContainer);\n element.appendChild(tableOptionContiner);\n this.tableWidthBox = new NumericTextBox({\n value: 0, decimals: 2, min: 0, max: 1584, width: 120, enablePersistence: false\n });\n this.tableWidthBox.appendTo(this.preferredWidth);\n this.leftIndentBox = new NumericTextBox({\n value: 0, decimals: 2, min: -1584, max: 1584, width: 140, enablePersistence: false\n });\n this.leftIndentBox.appendTo(this.leftIndent);\n this.preferCheckBox = new CheckBox({\n label: localValue.getConstant('Preferred Width')\n });\n this.preferCheckBox.appendTo(preferCheckBox);\n this.tableWidthType = new DropDownList({ width: '120px' });\n this.tableWidthType.appendTo(tableWidthType);\n };\n /**\n * @private\n */\n TablePropertiesDialog.prototype.onTableWidthChange = function () {\n this.tableFormat.preferredWidth = this.tableWidthBox.value;\n };\n /**\n * @private\n */\n TablePropertiesDialog.prototype.onTableWidthTypeChange = function () {\n var value;\n var table = this.owner.selection.start.paragraph.associatedCell.ownerTable;\n var width = HelperMethods.convertPixelToPoint(this.owner.clientArea.width);\n if (this.tableWidthType.text === 'Percent' && this.owner.selection.tableFormat.preferredWidthType !== 'Percent') {\n value = this.tableWidthBox.value / width * 100;\n this.formatNumericTextBox(this.tableWidthBox, 'Percent', value);\n }\n else if (this.tableWidthType.text === 'Points' && this.owner.selection.tableFormat.preferredWidthType !== 'Point') {\n value = width / 100 * this.tableWidthBox.value;\n this.formatNumericTextBox(this.tableWidthBox, 'Point', value);\n }\n else {\n if (this.tableWidthBox.format === '#\\'\\%\\'') {\n if (this.tableWidthType.text === 'Points') {\n value = width / 100 * this.tableWidthBox.value;\n }\n else {\n value = this.tableWidthBox.value;\n }\n }\n else {\n if (this.tableWidthType.text === 'Percent') {\n value = this.tableWidthBox.value / width * 100;\n }\n else {\n value = this.tableWidthBox.value;\n }\n }\n // tslint:disable-next-line:max-line-length\n this.formatNumericTextBox(this.tableWidthBox, (this.tableWidthType.text === 'Points') ? 'Point' : this.tableWidthType.text, value);\n }\n this.tableFormat.preferredWidthType = (this.tableWidthType.text === 'Points') ? 'Point' : this.tableWidthType.text;\n };\n /**\n * @private\n */\n TablePropertiesDialog.prototype.onLeftIndentChange = function () {\n this.tableFormat.leftIndent = this.leftIndentBox.value;\n };\n TablePropertiesDialog.prototype.setTableProperties = function () {\n //instance of Table Property values\n var tableFormat = this.owner.selection.tableFormat;\n var tableHasWidth = tableFormat.preferredWidth > 0;\n var preferredWidth = tableFormat.preferredWidth;\n if (isNullOrUndefined(tableFormat.preferredWidth)) {\n this.preferCheckBox.indeterminate = true;\n var startTable = this.owner.selection.start.paragraph.associatedCell.ownerTable;\n var table = startTable.combineWidget(this.owner);\n preferredWidth = table.tableFormat.preferredWidth;\n }\n else {\n this.preferCheckBox.checked = tableHasWidth;\n }\n this.tableWidthBox.enabled = tableHasWidth;\n this.tableWidthType.enabled = tableHasWidth;\n this.formatNumericTextBox(this.tableWidthBox, tableFormat.preferredWidthType, preferredWidth);\n if (tableFormat.preferredWidthType === 'Auto' || tableFormat.preferredWidthType === 'Point') {\n this.tableWidthType.index = 0;\n }\n else {\n this.tableWidthType.index = 1;\n }\n this.leftIndentBox.value = tableFormat.leftIndent;\n this.leftIndentBox.enabled = tableFormat.tableAlignment === 'Left';\n classList(this.left, [], ['e-de-table-alignment-active']);\n classList(this.right, [], ['e-de-table-alignment-active']);\n classList(this.center, [], ['e-de-table-alignment-active']);\n if (tableFormat.tableAlignment === 'Left') {\n this.left.classList.add('e-de-table-alignment-active');\n }\n else if (tableFormat.tableAlignment === 'Center') {\n this.center.classList.add('e-de-table-alignment-active');\n }\n else if (tableFormat.tableAlignment === 'Right') {\n this.right.classList.add('e-de-table-alignment-active');\n }\n };\n /**\n * @private\n */\n TablePropertiesDialog.prototype.getTableAlignment = function () {\n var id = this.tableTab.id;\n var groupButtons = this.tableTab.getElementsByClassName(id + 'e-de-table-alignment');\n for (var j = 0; j < groupButtons.length; j++) {\n var groupButton = groupButtons[j];\n if (groupButton.classList.contains('e-de-table-alignment-active')) {\n if (j === 0) {\n return 'Left';\n }\n else if (j === 1) {\n return 'Center';\n }\n else {\n return 'Right';\n }\n }\n }\n return undefined;\n };\n /**\n * @private\n */\n TablePropertiesDialog.prototype.updateClassForAlignmentProperties = function (element) {\n var id = element.id;\n var groupButtons = element.getElementsByClassName(id + 'e-de-table-alignment');\n for (var j = 0; j < groupButtons.length; j++) {\n var groupButton = groupButtons[j];\n if (groupButton.classList.contains('e-de-table-alignment-active')) {\n classList(groupButton, ['e-de-table-properties-alignment'], ['e-de-table-alignment-active']);\n }\n }\n };\n //#endregion\n //#region Row Format\n /**\n * @private\n */\n TablePropertiesDialog.prototype.initTableRowProperties = function (element, localValue) {\n var rowDiv = createElement('div', { styles: 'width: 100%;' });\n var sizeLabeldiv = createElement('div', {\n innerHTML: localValue.getConstant('Size'),\n styles: 'width: 100%;padding-top: 20px;padding-bottom: 10px;',\n className: 'e-de-table-dialog-options-label'\n });\n var parentDiv = createElement('div', { styles: 'display: inline;width: 100%;' });\n var childDiv1 = createElement('div', {\n styles: 'display: inline;float: left;',\n className: 'e-de-table-header-div'\n });\n var rowHeightCheckBox = createElement('input', {\n attrs: { 'type': 'checkbox' }, id: element.id + '_height_CheckBox'\n });\n var childdiv2 = createElement('div', {\n styles: 'display: inline-block;',\n className: 'e-de-row-ht-top'\n });\n this.rowHeight = createElement('input', {\n attrs: { 'type': 'text' }, 'id': element.id + '_table_row_height'\n });\n var child2 = createElement('div', {\n styles: 'float: right;display: inline;width: auto;margin-top: 5px;'\n });\n var child3 = createElement('div', {\n styles: 'display: inline;',\n className: 'e-de-table-ppty-dlg-row-height-label'\n });\n var child4 = createElement('div', {\n styles: 'display: inline;',\n className: 'e-de-table-subheader-div'\n });\n var controlDiv = createElement('div');\n var rowHeightType = createElement('select', {\n innerHTML: '',\n id: element.id + '_height_type'\n });\n var labeltext = createElement('label', {\n innerHTML: localValue.getConstant('Row height is'), styles: 'font-size: 11px;font-weight: normal;width: 75px;'\n });\n rowDiv.appendChild(sizeLabeldiv);\n element.appendChild(rowDiv);\n childDiv1.appendChild(rowHeightCheckBox);\n parentDiv.appendChild(childDiv1);\n childdiv2.appendChild(this.rowHeight);\n parentDiv.appendChild(childdiv2);\n controlDiv.appendChild(rowHeightType);\n child3.appendChild(labeltext);\n child4.appendChild(controlDiv);\n child2.appendChild(child3);\n child2.appendChild(child4);\n parentDiv.appendChild(child2);\n element.appendChild(parentDiv);\n var alignmentDiv = createElement('div', {\n innerHTML: localValue.getConstant('Options'), styles: 'width: 100%;',\n className: 'e-de-table-dialog-options-label'\n });\n // tslint:disable-next-line:max-line-length\n var allowRowContainer = createElement('div', { className: 'e-de-table-ppty-options-break' });\n var repeatHeaderContaniner = createElement('div', { className: 'e-de-table-ppty-options-header-row' });\n var allowRowBreak = createElement('input', {\n attrs: { 'type': 'checkbox' }, id: element.id + '_allow_row_break'\n });\n var repeatHeader = createElement('input', {\n attrs: { 'type': 'checkbox' }, 'id': element.id + '_repeat_header'\n });\n allowRowContainer.appendChild(allowRowBreak);\n repeatHeaderContaniner.appendChild(repeatHeader);\n element.appendChild(alignmentDiv);\n element.appendChild(allowRowContainer);\n element.appendChild(repeatHeaderContaniner);\n this.rowHeightBox = new NumericTextBox({\n value: 0, decimals: 2, min: 0, max: 1584, width: 120, enablePersistence: false\n });\n this.rowHeightBox.appendTo(this.rowHeight);\n this.rowHeightCheckBox = new CheckBox({\n label: localValue.getConstant('Specify height')\n });\n this.rowHeightCheckBox.appendTo(rowHeightCheckBox);\n this.rowHeightType = new DropDownList({ width: '120px' });\n this.rowHeightType.appendTo(rowHeightType);\n this.allowRowBreak = new CheckBox({\n label: localValue.getConstant('Allow row to break across pages')\n });\n this.allowRowBreak.appendTo(allowRowBreak);\n this.repeatHeader = new CheckBox({\n label: localValue.getConstant('Repeat as header row at the top of each page')\n });\n this.repeatHeader.appendTo(repeatHeader);\n };\n TablePropertiesDialog.prototype.setTableRowProperties = function () {\n var rowFormat = this.owner.selection.rowFormat;\n var enableRowHeight = (rowFormat.height > 0 || rowFormat.heightType === 'Exactly');\n //instance of table row values\n if (enableRowHeight) {\n this.rowHeightCheckBox.checked = true;\n }\n else {\n if (rowFormat.heightType === undefined) {\n this.rowHeightCheckBox.indeterminate = true;\n enableRowHeight = true;\n }\n else {\n this.rowHeightCheckBox.checked = false;\n }\n }\n this.rowHeightBox.enabled = enableRowHeight;\n this.rowHeightType.enabled = enableRowHeight;\n // let enabledHeader: boolean = this.enableRepeatHeader() ? false : true;\n var enabledHeader = true;\n if (isNullOrUndefined(this.owner.selection.rowFormat.isHeader)) {\n this.repeatHeader.indeterminate = true;\n this.repeatHeader.disabled = true;\n }\n else if (this.owner.selection.rowFormat.isHeader) {\n this.repeatHeader.checked = !enabledHeader;\n this.repeatHeader.indeterminate = enabledHeader;\n this.repeatHeader.disabled = enabledHeader;\n }\n else {\n this.repeatHeader.checked = false;\n this.repeatHeader.indeterminate = false;\n this.repeatHeader.disabled = enabledHeader;\n }\n if (isNullOrUndefined(rowFormat.allowBreakAcrossPages)) {\n this.allowRowBreak.indeterminate = true;\n }\n else {\n this.allowRowBreak.checked = rowFormat.allowBreakAcrossPages;\n }\n this.rowHeightBox.value = rowFormat.height;\n if (rowFormat.heightType === 'Auto' || rowFormat.heightType === 'AtLeast') {\n this.rowHeightType.index = 0;\n }\n else {\n this.rowHeightType.index = 1;\n }\n };\n /**\n * @private\n */\n TablePropertiesDialog.prototype.onRowHeightChange = function () {\n this.rowHeightValue = this.rowHeightBox.value;\n };\n /**\n * @private\n */\n TablePropertiesDialog.prototype.onRowHeightTypeChange = function () {\n this.rowFormat.heightType = this.rowHeightType.text;\n };\n /**\n * @private\n */\n TablePropertiesDialog.prototype.onAllowBreakAcrossPage = function () {\n this.rowFormat.allowBreakAcrossPages = this.allowRowBreak.checked;\n };\n /**\n * @private\n */\n TablePropertiesDialog.prototype.onRepeatHeader = function () {\n this.rowFormat.isHeader = this.repeatHeader.checked;\n };\n /**\n * @private\n */\n // public enableRepeatHeader(): boolean {\n // let isFirstRow: number = 0;\n // for (let i: number = 0; i < this.owner.selection.selectionRanges.length; i++) {\n // let range: SelectionRange = this.owner.selection.selectionRanges.getRange(i);\n // let table: WTable = range.start.paragraph.associatedCell.ownerTable;\n // if (table.childNodes.indexOf(range.start.paragraph.associatedCell.ownerRow) === 0 ||\n // table.childNodes.indexOf(range.start.paragraph.associatedCell.ownerRow) === 0) {\n // isFirstRow++;\n // }\n // }\n // return isFirstRow === this.owner.selection.selectionRanges.length;\n // }\n //#endregion\n //#region Cell Format\n /**\n * @private\n */\n TablePropertiesDialog.prototype.initTableCellProperties = function (element, localValue) {\n var sizeDiv = createElement('div', { styles: 'width: 100%;' });\n var div = createElement('div', {\n innerHTML: localValue.getConstant('Size'), className: 'e-de-table-dialog-options-label',\n styles: 'width: 100%;padding-top: 20px;padding-bottom: 10px;',\n });\n var parentdiv = createElement('div', { styles: 'display: inline;width: 100%;' });\n var childdiv1 = createElement('div', {\n styles: 'display: inline;float: left;',\n className: 'e-de-table-cell-header-div'\n });\n var preferredCellWidthCheckBox = createElement('input', {\n attrs: { 'type': 'checkbox' }, id: element.id + '_Prefer_Width_CheckBox_cell'\n });\n var childdiv2 = createElement('div', {\n styles: 'display: inline-block;',\n className: 'e-de-cell-width-top'\n });\n this.preferredCellWidth = createElement('input', {\n id: element.id + 'tablecell_Width_textBox', attrs: { 'type': 'text' }\n });\n var child2 = createElement('div', {\n styles: 'float: right;display: inline;width: auto;margin-top: 5px;'\n });\n var child3 = createElement('div', {\n styles: 'display: inline;',\n className: 'e-de-table-ppty-dlg-cell-tab-measure-label'\n });\n var child4 = createElement('div', {\n styles: 'display: inline;float: right;', className: 'e-de-table-cell-subheader-div'\n });\n var controlDiv = createElement('div');\n var cellWidthType = createElement('select', {\n innerHTML: '', 'id': element.id + '_measure_type_cell'\n });\n var labeltext = createElement('label', {\n innerHTML: localValue.getConstant('Measure in'),\n styles: 'font-size: 11px;font-weight: normal;'\n });\n sizeDiv.appendChild(div);\n element.appendChild(sizeDiv);\n childdiv1.appendChild(preferredCellWidthCheckBox);\n parentdiv.appendChild(childdiv1);\n childdiv2.appendChild(this.preferredCellWidth);\n parentdiv.appendChild(childdiv2);\n controlDiv.appendChild(cellWidthType);\n child3.appendChild(labeltext);\n child4.appendChild(controlDiv);\n child2.appendChild(child3);\n child2.appendChild(child4);\n parentdiv.appendChild(child2);\n element.appendChild(parentdiv);\n var alignmentDiv = createElement('div', {\n innerHTML: localValue.getConstant('Vertical alignment'),\n styles: 'width: 100%;margin: 0px;',\n className: 'e-de-table-dialog-options-label'\n });\n var classDivName = element.id + 'e-de-table-cell-alignment';\n var divAlignment = createElement('div', {\n styles: 'width: 100%;height: 100px;'\n });\n var divStyle = 'width:54px;height:54px;margin:2px;border-style:solid;border-width:1px';\n var topAlignDiv = createElement('div', { className: 'e-de-table-dia-align-div' });\n this.cellTopAlign = createElement('div', {\n styles: divStyle, id: element.id + '_cell_top-alignment',\n className: 'e-icons e-de-tablecell-alignment e-de-tablecell-top-alignment ' + classDivName\n });\n topAlignDiv.appendChild(this.cellTopAlign);\n var centerAlignDiv = createElement('div', { className: 'e-de-table-dia-align-div' });\n this.cellCenterAlign = createElement('div', {\n styles: divStyle, id: element.id + '_cell_center-alignment',\n className: 'e-icons e-de-tablecell-alignment e-de-tablecell-center-alignment ' + classDivName\n });\n centerAlignDiv.appendChild(this.cellCenterAlign);\n var bottomAlignDiv = createElement('div', { className: 'e-de-table-dia-align-div' });\n this.cellBottomAlign = createElement('div', {\n styles: divStyle, id: element.id + '_cell_bottom-alignment',\n className: 'e-icons e-de-tablecell-alignment e-de-tablecell-bottom-alignment ' + classDivName\n });\n bottomAlignDiv.appendChild(this.cellBottomAlign);\n var topLabel = createElement('label', {\n innerHTML: localValue.getConstant('Top'), className: 'e-de-table-dia-align-label'\n });\n var centerLabel = createElement('label', {\n innerHTML: localValue.getConstant('Center'), className: 'e-de-table-dia-align-label'\n });\n var bottomLabel = createElement('label', {\n innerHTML: localValue.getConstant('Bottom'), className: 'e-de-table-dia-align-label'\n });\n this.cellOptionButton = createElement('button', {\n innerHTML: localValue.getConstant('Options'), id: element.id + '_table_cellmargin',\n className: 'e-de-tbl-dlg-op-btn e-control e-btn e-flat e-de-cell-options',\n });\n divAlignment.appendChild(topAlignDiv);\n divAlignment.appendChild(centerAlignDiv);\n divAlignment.appendChild(bottomAlignDiv);\n topAlignDiv.appendChild(topLabel);\n centerAlignDiv.appendChild(centerLabel);\n bottomAlignDiv.appendChild(bottomLabel);\n element.appendChild(alignmentDiv);\n element.appendChild(divAlignment);\n element.appendChild(this.cellOptionButton);\n this.cellOptionButton.addEventListener('click', this.showCellOptionsDialog);\n this.cellWidthBox = new NumericTextBox({\n value: 0, decimals: 2, min: 0, max: 1584, width: 120, enablePersistence: false\n });\n this.cellWidthBox.appendTo(this.preferredCellWidth);\n this.preferredCellWidthCheckBox = new CheckBox({ label: localValue.getConstant('Preferred Width') });\n this.preferredCellWidthCheckBox.appendTo(preferredCellWidthCheckBox);\n this.cellWidthType = new DropDownList({ width: '120px' });\n this.cellWidthType.appendTo(cellWidthType);\n };\n TablePropertiesDialog.prototype.setTableCellProperties = function () {\n var cellFormat = this.owner.selection.cellFormat;\n //instance of table cell Values\n this.hasCellWidth = cellFormat.preferredWidth > 0;\n var preferredWidth = cellFormat.preferredWidth;\n if (isNullOrUndefined(cellFormat.preferredWidth)) {\n this.preferredCellWidthCheckBox.indeterminate = true;\n preferredWidth = this.owner.selection.start.paragraph.associatedCell.cellFormat.preferredWidth;\n }\n else {\n this.preferredCellWidthCheckBox.checked = this.hasCellWidth;\n }\n this.cellWidthBox.enabled = this.hasCellWidth;\n this.cellWidthType.enabled = this.hasCellWidth;\n if (cellFormat.preferredWidthType === 'Auto' || cellFormat.preferredWidthType === 'Point') {\n this.cellWidthType.index = 0;\n }\n else {\n this.cellWidthType.index = 1;\n }\n this.formatNumericTextBox(this.cellWidthBox, cellFormat.preferredWidthType, preferredWidth);\n classList(this.cellTopAlign, ['e-de-tablecell-alignment'], ['e-de-table-alignment-active']);\n classList(this.cellCenterAlign, ['e-de-tablecell-alignment'], ['e-de-table-alignment-active']);\n classList(this.cellBottomAlign, ['e-de-tablecell-alignment'], ['e-de-table-alignment-active']);\n if (cellFormat.verticalAlignment === 'Top') {\n this.cellTopAlign.classList.add('e-de-table-alignment-active');\n }\n else if (cellFormat.verticalAlignment === 'Center') {\n this.cellCenterAlign.classList.add('e-de-table-alignment-active');\n }\n else if (cellFormat.verticalAlignment === 'Bottom') {\n this.cellBottomAlign.classList.add('e-de-table-alignment-active');\n }\n };\n /**\n * @private\n */\n TablePropertiesDialog.prototype.updateClassForCellAlignment = function (element) {\n var cellAlignments = element.getElementsByClassName(element.id + 'e-de-table-cell-alignment');\n for (var j = 0; j < cellAlignments.length; j++) {\n var cellAlignment = cellAlignments[j];\n if (cellAlignment.classList.contains('e-de-table-alignment-active')) {\n classList(cellAlignment, ['e-de-tablecell-alignment'], ['e-de-table-alignment-active']);\n }\n }\n };\n /**\n * @private\n */\n TablePropertiesDialog.prototype.formatNumericTextBox = function (textBox, format, value) {\n if (format === 'Auto' || format === 'Point') {\n textBox.format = 'n2';\n }\n else {\n textBox.format = '#\\'\\%\\'';\n }\n textBox.step = 1;\n textBox.decimals = 2;\n textBox.value = value;\n };\n /**\n * @private\n */\n TablePropertiesDialog.prototype.getCellAlignment = function () {\n var id = this.cellTab.id;\n var groupButtons = this.cellTab.getElementsByClassName(id + 'e-de-table-cell-alignment');\n for (var j = 0; j < groupButtons.length; j++) {\n var groupButton = groupButtons[j];\n if (groupButton.classList.contains('e-de-table-alignment-active')) {\n if (j === 0) {\n return 'Top';\n }\n else if (j === 1) {\n return 'Center';\n }\n else {\n return 'Bottom';\n }\n }\n }\n return this.owner.selection.cellFormat.verticalAlignment;\n };\n /**\n * @private\n */\n TablePropertiesDialog.prototype.onCellWidthChange = function () {\n this.cellFormat.preferredWidth = this.cellWidthBox.value;\n };\n /**\n * @private\n */\n TablePropertiesDialog.prototype.onCellWidthTypeChange = function () {\n var value;\n var table = this.owner.selection.start.paragraph.associatedCell.ownerTable;\n var containerWidth = table.getOwnerWidth(true);\n var tableWidth = table.getTableClientWidth(containerWidth);\n if (this.cellWidthType.text === 'Percent' && this.owner.selection.cellFormat.preferredWidthType !== 'Percent') {\n value = this.cellWidthBox.value / tableWidth * 100;\n this.formatNumericTextBox(this.cellWidthBox, 'Percent', value);\n }\n else if (this.cellWidthType.text === 'Points' && this.owner.selection.cellFormat.preferredWidthType !== 'Point') {\n value = tableWidth / 100 * this.cellWidthBox.value;\n this.formatNumericTextBox(this.cellWidthBox, 'Point', value);\n }\n else {\n if (this.cellWidthBox.format === '#\\'\\%\\'') {\n if (this.cellWidthType.text === 'Points') {\n value = tableWidth / 100 * this.cellWidthBox.value;\n }\n else {\n value = this.cellWidthBox.value;\n }\n }\n else {\n if (this.cellWidthType.text === 'Percent') {\n value = this.cellWidthBox.value / tableWidth * 100;\n }\n else {\n value = this.cellWidthBox.value;\n }\n }\n // tslint:disable-next-line:max-line-length\n this.formatNumericTextBox(this.cellWidthBox, (this.cellWidthType.text === 'Points') ? 'Point' : this.cellWidthType.text, value);\n }\n this.cellFormat.preferredWidthType = (this.cellWidthType.text === 'Points') ? 'Point' : this.cellWidthType.text;\n };\n /**\n * @private\n */\n TablePropertiesDialog.prototype.destroy = function () {\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var s = 0; s < this.target.childNodes.length; s++) {\n this.target.removeChild(this.target.childNodes[s]);\n s--;\n }\n this.target = undefined;\n }\n this.dialog = undefined;\n this.target = undefined;\n this.cellAlignment = undefined;\n this.tableAlignment = undefined;\n this.owner = undefined;\n this.preferCheckBox = undefined;\n this.tableWidthType = undefined;\n this.preferredWidth = undefined;\n this.rowHeightType = undefined;\n this.rowHeightCheckBox = undefined;\n this.rowHeight = undefined;\n this.cellWidthType = undefined;\n this.preferredCellWidthCheckBox = undefined;\n this.preferredCellWidth = undefined;\n this.tableTab = undefined;\n this.rowTab = undefined;\n this.cellTab = undefined;\n this.left = undefined;\n this.center = undefined;\n this.right = undefined;\n this.leftIndent = undefined;\n this.allowRowBreak = undefined;\n this.repeatHeader = undefined;\n this.cellTopAlign = undefined;\n this.cellCenterAlign = undefined;\n this.cellBottomAlign = undefined;\n this.tableFormat.destroy();\n this.cellFormat.destroy();\n this.tableFormat = undefined;\n this.cellFormat = undefined;\n };\n return TablePropertiesDialog;\n}());\nexport { TablePropertiesDialog };\n","import { createElement, isNullOrUndefined, L10n, setCulture } from '@syncfusion/ej2-base';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { WTableFormat, WBorder, WBorders, WShading, WCellFormat } from '../format/index';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { ColorPicker } from '@syncfusion/ej2-inputs';\n/**\n * The Borders and Shading dialog is used to modify borders and shading options for selected table or cells.\n */\nvar BordersAndShadingDialog = /** @class */ (function () {\n /**\n * @private\n */\n function BordersAndShadingDialog(viewer) {\n var _this = this;\n this.cellFormat = new WCellFormat();\n this.tableFormat = new WTableFormat();\n this.applyBordersShadingsProperties = function () {\n var tablePropertiesDialog = _this.owner.owner.tablePropertiesDialogModule;\n var selectedCell = _this.owner.selection.start.paragraph.associatedCell;\n //Need to bind the properties with current cell and current table formats.\n var borders = undefined;\n if (_this.checkClassName(_this.previewDivTopTop) || _this.checkClassName(_this.previewDivTopBottom)\n || _this.checkClassName(_this.previewDivTopCenter) || _this.checkClassName(_this.previewDivBottomcenter)\n || _this.checkClassName(_this.previewDivBottomLeft) || _this.checkClassName(_this.previewDivBottomRight)\n || _this.checkClassName(_this.previewDivDiagonalRight) || _this.checkClassName(_this.previewDivLeftDiagonal)) {\n borders = new WBorders();\n if (_this.checkClassName(_this.previewDivTopTop)) {\n borders.top = _this.getBorder();\n }\n if (_this.checkClassName(_this.previewDivTopBottom)) {\n borders.bottom = _this.getBorder();\n }\n if (_this.checkClassName(_this.previewDivBottomLeft)) {\n borders.left = _this.getBorder();\n }\n if (_this.checkClassName(_this.previewDivBottomRight)) {\n borders.right = _this.getBorder();\n }\n if (_this.checkClassName(_this.previewDivTopCenter)) {\n borders.horizontal = _this.getBorder();\n }\n if (_this.checkClassName(_this.previewDivBottomcenter)) {\n borders.vertical = _this.getBorder();\n }\n if (_this.checkClassName(_this.previewDivLeftDiagonal)) {\n borders.diagonalDown = _this.getBorder();\n }\n if (_this.checkClassName(_this.previewDivDiagonalRight)) {\n borders.diagonalUp = _this.getBorder();\n }\n }\n var shading = new WShading();\n var editorModule = _this.owner.owner.editorModule;\n shading.backgroundColor = _this.shadingColorPicker.value;\n if (_this.ulelementShading.index === 0) {\n _this.applyTo = 0;\n if (tablePropertiesDialog) {\n tablePropertiesDialog.isCellBordersAndShadingUpdated = true;\n }\n _this.cellFormat.borders = new WBorders();\n if (!isNullOrUndefined(borders)) {\n editorModule.applyBordersInternal(_this.cellFormat.borders, borders);\n }\n else if (_this.noneDiv.classList.contains('e-de-table-border-inside-setting-click')) {\n editorModule.applyBordersInternal(_this.cellFormat.borders, new WBorders());\n }\n // Once option has been added for texture and foreground, need to handle this similar to Shading Fill.\n if (!isNullOrUndefined(selectedCell.cellFormat.shading)) {\n shading.foregroundColor = selectedCell.cellFormat.shading.foregroundColor;\n shading.textureStyle = selectedCell.cellFormat.shading.textureStyle;\n }\n _this.cellFormat.shading = new WShading();\n editorModule.applyShading(_this.cellFormat.shading, shading);\n }\n else {\n if (tablePropertiesDialog) {\n tablePropertiesDialog.isTableBordersAndShadingUpdated = true;\n }\n _this.applyTo = 1;\n var currentTableFormat = _this.owner.owner.selection.tableFormat.table.tableFormat;\n _this.tableFormat.copyFormat(currentTableFormat);\n _this.tableFormat.borders = new WBorders();\n if (!isNullOrUndefined(borders)) {\n editorModule.applyBordersInternal(_this.tableFormat.borders, borders);\n }\n else if (_this.noneDiv.classList.contains('e-de-table-border-inside-setting-click')) {\n editorModule.applyBordersInternal(_this.tableFormat.borders, new WBorders());\n }\n // Once option has been added for texture and foreground, need to handle this similar to Shading Fill.\n if (!isNullOrUndefined(currentTableFormat.shading)) {\n shading.foregroundColor = currentTableFormat.shading.foregroundColor;\n shading.textureStyle = currentTableFormat.shading.textureStyle;\n }\n _this.tableFormat.shading = new WShading();\n editorModule.applyShading(_this.tableFormat.shading, shading);\n }\n _this.applyFormat();\n _this.closeDialog();\n };\n /**\n * @private\n */\n this.closeDialog = function () {\n _this.owner.dialog.hide();\n _this.closeBordersShadingsDialog();\n };\n this.closeBordersShadingsDialog = function () {\n _this.owner.dialog2.element.style.pointerEvents = '';\n _this.owner.updateFocus();\n };\n this.handleSettingCheckBoxAction = function (event) {\n var targetId = event.target.id;\n var tableBorderDialogId = _this.target.id;\n var targetDiv;\n if (targetId === tableBorderDialogId + '_None_Div' || targetId === tableBorderDialogId + '_None_Div_Container'\n || targetId === tableBorderDialogId + '_None_Div_Transparent') {\n _this.updateClassForSettingDivElements();\n _this.noneDiv.classList.add('e-de-table-border-inside-setting-click');\n _this.setSettingPreviewDivElement('none');\n }\n else if (targetId === tableBorderDialogId + '_Box_Div' || targetId === tableBorderDialogId + '_Box_Div_Container'\n || targetId === tableBorderDialogId + '_Box_Div_Transparent') {\n _this.updateClassForSettingDivElements();\n _this.boxDiv.classList.add('e-de-table-border-inside-setting-click');\n _this.setSettingPreviewDivElement('box');\n }\n else if (targetId === tableBorderDialogId + '_All_Div' || targetId === tableBorderDialogId + '_All_Div_Container'\n || targetId === tableBorderDialogId + '_All_Div_Transparent') {\n _this.updateClassForSettingDivElements();\n _this.allDiv.classList.add('e-de-table-border-inside-setting-click');\n _this.setSettingPreviewDivElement('all');\n }\n else {\n _this.updateClassForSettingDivElements();\n _this.customDiv.classList.add('e-de-table-border-inside-setting-click');\n _this.setSettingPreviewDivElement('customDiv');\n }\n };\n this.handlePreviewCheckBoxAction = function (event) {\n var target = event.target;\n var targetId = target.id;\n var tableBorderDialog = _this.target;\n var tableBorderDialogId = _this.target.id;\n var checkBox;\n var compareClass = 'e-de-table-border-inside-preview-click';\n _this.customDiv.click();\n if (targetId === tableBorderDialogId + '_Preview_Div_TopTop_Container' || targetId === tableBorderDialogId + '_Preview_Div_TopTop'\n || targetId === tableBorderDialogId + '_previewDivTopTopTransParent') {\n _this.handlePreviewCheckBoxShowHide(tableBorderDialogId, compareClass, _this.previewDivTopTop);\n _this.showHidePreviewDivElements(tableBorderDialogId, compareClass, '_Preview_Div', '_Preview_Div_TopTop', 'TopTop');\n }\n else if (targetId === tableBorderDialogId + '_Preview_Div_TopCenter_Container'\n || targetId === tableBorderDialogId + '_Preview_Div_TopCenter'\n || targetId === tableBorderDialogId + '_previewDivTopCenterTransParent') {\n _this.handlePreviewCheckBoxShowHide(tableBorderDialogId, compareClass, _this.previewDivTopCenter);\n // tslint:disable-next-line:max-line-length\n _this.showHidePreviewDivElements(tableBorderDialogId, compareClass, '_Preview_Div_Horizontal', '_Preview_Div_TopCenter', 'TopCenter');\n }\n else if (targetId === tableBorderDialogId + '_Preview_Div_TopBottom_Container' || targetId === tableBorderDialogId + '_Preview_Div_TopBottom'\n || targetId === tableBorderDialogId + '_previewDivTopBottomTransParent') {\n _this.handlePreviewCheckBoxShowHide(tableBorderDialogId, compareClass, _this.previewDivTopBottom);\n _this.showHidePreviewDivElements(tableBorderDialogId, compareClass, '_Preview_Div', '_Preview_Div_TopBottom', 'TopBottom');\n }\n else if (targetId === tableBorderDialogId + '_Preview_Div_LeftDiagonal_Container'\n || targetId === tableBorderDialogId + '_Preview_Div_LeftDiagonal'\n || targetId === tableBorderDialogId + '_previewDivLeftDiagonalTransParent') {\n _this.handlePreviewCheckBoxShowHide(tableBorderDialogId, compareClass, _this.previewDivLeftDiagonal);\n // tslint:disable-next-line:max-line-length\n _this.showHidePreviewDivElements(tableBorderDialogId, compareClass, '_Preview_Div_Left_Diagonal', '_Preview_Div_LeftDiagonal', 'LeftDiagonal');\n }\n else if (targetId === tableBorderDialogId + '_Preview_Div_BottomLeft_Container' || targetId === tableBorderDialogId + '_Preview_Div_BottomLeft'\n || targetId === tableBorderDialogId + '_previewDivBottomLeftTransparent') {\n _this.handlePreviewCheckBoxShowHide(tableBorderDialogId, compareClass, _this.previewDivBottomLeft);\n _this.showHidePreviewDivElements(tableBorderDialogId, compareClass, '_Preview_Div', '_Preview_Div_BottomLeft', 'BottomLeft');\n }\n else if (targetId === tableBorderDialogId + '_Preview_Div_BottomCenter_Container'\n || targetId === tableBorderDialogId + '_Preview_Div_BottomCenter'\n || targetId === tableBorderDialogId + '_previewDivBottomcenterTransparent') {\n _this.handlePreviewCheckBoxShowHide(tableBorderDialogId, compareClass, _this.previewDivBottomcenter);\n // tslint:disable-next-line:max-line-length\n _this.showHidePreviewDivElements(tableBorderDialogId, compareClass, '_Preview_Div_Vertical', '_Preview_Div_BottomCenter', 'BottomCenter');\n }\n else if (targetId === tableBorderDialogId + '_Preview_Div_BottomRight_Container' || targetId === tableBorderDialogId + '_Preview_Div_BottomRight'\n || targetId === tableBorderDialogId + '_previewDivBottomRightTransparent') {\n _this.handlePreviewCheckBoxShowHide(tableBorderDialogId, compareClass, _this.previewDivBottomRight);\n _this.showHidePreviewDivElements(tableBorderDialogId, compareClass, '_Preview_Div', '_Preview_Div_BottomRight', 'BottomRight');\n }\n else if (targetId === tableBorderDialogId + '_Preview_Div_RightDiagonal_Container'\n || targetId === tableBorderDialogId + '_Preview_Div_RightDiagonal'\n || targetId === tableBorderDialogId + '_previewDivDiagonalRightTransparent') {\n _this.handlePreviewCheckBoxShowHide(tableBorderDialogId, compareClass, _this.previewDivDiagonalRight);\n // tslint:disable-next-line:max-line-length\n _this.showHidePreviewDivElements(tableBorderDialogId, compareClass, '_Preview_Div_Right_Diagonal', '_Preview_Div_RightDiagonal', 'RightDiagonal');\n }\n };\n this.applyTableCellPreviewBoxes = function () {\n _this.customDiv.click();\n if (!isNullOrUndefined(_this.ulelementShading)) {\n if (_this.ulelementShading.index === 0) {\n _this.previewDivBottomcenterContainer.style.display = 'none';\n _this.previewDivTopCenterContainer.style.display = 'none';\n _this.previewVerticalDiv.style.display = 'none';\n _this.previewHorizontalDiv.style.display = 'none';\n _this.previewDivLeftDiagonal.style.display = '';\n _this.previewDivDiagonalRight.style.display = '';\n _this.previewDivBottomRightContainer.style.left = '80px';\n }\n else {\n _this.previewDivLeftDiagonal.style.display = 'none';\n _this.previewDivDiagonalRight.style.display = 'none';\n _this.previewDivBottomcenterContainer.style.display = '';\n _this.previewDivTopCenterContainer.style.display = '';\n _this.previewVerticalDiv.style.display = '';\n _this.previewHorizontalDiv.style.display = '';\n _this.previewDivBottomRightContainer.style.left = '110px';\n }\n }\n };\n this.applyPreviewTableBackgroundColor = function (args) {\n if (!isNullOrUndefined(args.currentValue)) {\n var color = args.currentValue.hex;\n _this.previewDiv.style.backgroundColor = color;\n }\n };\n this.applyPreviewTableBorderColor = function (args) {\n if (!isNullOrUndefined(args.currentValue)) {\n var color = args.currentValue.hex;\n _this.previewDiv.style.borderColor = color;\n _this.previewRightDiagonalDiv.style.backgroundColor = color;\n _this.previewLeftDiagonalDiv.style.backgroundColor = color;\n _this.previewVerticalDiv.style.backgroundColor = color;\n _this.previewHorizontalDiv.style.backgroundColor = color;\n }\n };\n this.owner = viewer;\n }\n BordersAndShadingDialog.prototype.getModuleName = function () {\n return 'BordersAndShadingDialog';\n };\n /**\n * @private\n */\n // tslint:disable-next-line:max-func-body-length\n BordersAndShadingDialog.prototype.initBordersAndShadingsDialog = function (localeValue) {\n var instance = this;\n this.target = createElement('div', {\n id: instance.owner.owner.containerId + '_table_border_shadings',\n className: 'e-de-table-border-shading-dlg'\n });\n this.owner.owner.element.appendChild(this.target);\n var displayText = createElement('div', {\n innerHTML: localeValue.getConstant('Borders'), styles: 'position: absolute;top: 65px;',\n id: this.target.id + '_border_label', className: 'e-de-table-border-heading'\n });\n var settingsContiner = createElement('div', {\n styles: 'display: inline-block;position: absolute;top: 105px;width: 100px;height: 235px;border-style: none;',\n id: this.target.id + '_border_settings'\n });\n var styleContainer = createElement('div', {\n // tslint:disable-next-line:max-line-length\n styles: 'display: inline-block;position: absolute;left: 125px;top: 125px;width: 150px;height: 235px;padding-left: 40px;border-style: none;padding-right: 40px;',\n id: this.target.id + '_border_style'\n });\n var previewContiner = createElement('div', {\n // tslint:disable-next-line:max-line-length\n styles: 'display: inline-block;position: absolute;left: 345px;top: 87px;width: 180px;height: 235px;padding: 0px;border-style: none;',\n id: this.target.id + '_border_preview'\n });\n var styleText = createElement('div', {\n innerHTML: localeValue.getConstant('Style'), styles: 'width: 100%;padding-bottom: 10px;',\n className: 'e-de-table-element-subheading'\n });\n var dropDownList = createElement('select', {\n id: this.target.id + '_border_style_dropDown'\n });\n dropDownList.innerHTML = '';\n var widthText = createElement('div', {\n innerHTML: localeValue.getConstant('Width'), styles: 'width:100%;padding-top: 20px;padding-bottom: 10px;',\n className: 'e-de-table-element-subheading'\n });\n var widthNumeric = createElement('input', {\n id: this.target.id + '_width'\n });\n var colorText = createElement('div', {\n innerHTML: localeValue.getConstant('Color'), styles: 'padding-top: 25px;',\n className: 'e-de-table-setting-heading'\n });\n var borderColorPickerElement = createElement('input', {\n attrs: { 'type': 'color' },\n id: this.target.id + '_border_color',\n styles: 'width: 30px;position: absolute;left: 90px;',\n className: 'e-dlg-clr-pkr-top'\n });\n var settingText = createElement('div', {\n innerHTML: localeValue.getConstant('Setting'), styles: 'width: 100%;position: absolute;',\n className: 'e-de-table-setting-heading'\n });\n var noneDivContainer = createElement('div', {\n id: this.target.id + '_None_Div_Container', className: 'e-de-table-border-none'\n });\n this.noneDiv = createElement('div', {\n id: this.target.id + '_None_Div',\n className: 'e-de-table-border-inside-setting e-de-table-border-setting-genral'\n });\n var noneDivLabel = createElement('label', {\n innerHTML: localeValue.getConstant('None'), className: 'e-de-table-setting-labels-heading',\n styles: 'padding-left: 10px;top: 20px;position: absolute;',\n id: this.target.id + '_None_Div_Label'\n });\n var boxDivContainer = createElement('div', {\n id: this.target.id + '_Box_Div_Container', className: 'e-de-table-border-box'\n });\n this.boxDiv = createElement('div', {\n id: this.target.id + '_Box_Div',\n className: 'e-de-table-border-inside-setting e-de-table-border-setting-genral'\n });\n var boxDivLabel = createElement('label', {\n innerHTML: localeValue.getConstant('Box'), className: 'e-de-table-setting-labels-heading',\n styles: 'padding-left: 10px;top: 20px;position: absolute;',\n id: this.target.id + '_Box_Div_Label'\n });\n var allDivContainer = createElement('div', {\n id: this.target.id + '_All_Div_Container', className: 'e-de-table-border-all'\n });\n this.allDiv = createElement('div', {\n id: this.target.id + '_All_Div',\n className: 'e-de-table-border-inside-setting e-de-table-border-setting-genral'\n });\n var allDivLabel = createElement('label', {\n innerHTML: localeValue.getConstant('All'), className: 'e-de-table-setting-labels-heading',\n styles: 'padding-left: 10px;top: 25px;position: absolute;',\n id: this.target.id + '_All_Div_Label'\n });\n var customDivContainer = createElement('div', {\n id: this.target.id + '_Custom_Div_Container', className: 'e-de-table-border-custom'\n });\n this.customDiv = createElement('div', {\n id: this.target.id + '_Custom_Div',\n className: 'e-de-table-border-inside-setting e-de-table-border-setting-genral'\n });\n var customDivLabel = createElement('label', {\n innerHTML: localeValue.getConstant('Custom'), className: 'e-de-table-setting-labels-heading',\n styles: 'padding-left: 10px;top: 25px;position: absolute;',\n id: this.target.id + '_Custom_Div_Label'\n });\n this.noneDivTransparent = createElement('div', {\n id: this.target.id + '_None_Div_Transparent', className: 'e-icons e-de-table-border-setting e-de-table-border-none-setting'\n });\n this.boxDivTransparent = createElement('div', {\n id: this.target.id + '_Box_Div_Transparent', className: 'e-icons e-de-table-border-setting e-de-table-border-box-setting'\n });\n this.allDivTransparent = createElement('div', {\n id: this.target.id + '_All_Div_Transparent', className: 'e-icons e-de-table-border-setting e-de-table-border-all-setting'\n });\n this.customDivTransparent = createElement('div', {\n id: this.target.id + '_Custom_Div_Transparent', className: 'e-icons e-de-table-border-setting e-de-table-border-custom-setting'\n });\n var previewText = createElement('div', {\n innerHTML: localeValue.getConstant('Preview'), className: 'e-de-table-setting-heading',\n styles: 'position: absolute;top: 20px;left: 10px;'\n });\n this.previewDiv = createElement('div', {\n styles: 'width: 80px;height: 80px;position: absolute; left: 50px;top: 50px;',\n id: this.target.id + '_Preview_Div', className: 'e-de-border-dlg-preview-div'\n });\n this.previewRightDiagonalDiv = createElement('div', {\n styles: 'position: absolute;width:1px;height:113px;left: 90px;top: 34px;transform: rotate(135deg);',\n id: this.target.id + '_Preview_Div_Right_Diagonal',\n className: 'e-de-border-dlg-preview-inside-divs'\n });\n this.previewLeftDiagonalDiv = createElement('div', {\n styles: 'position: absolute;width: 1px;height: 113px;left: 90px;top: 34px;transform:rotate(45deg);',\n id: this.target.id + '_Preview_Div_Left_Diagonal',\n className: 'e-de-border-dlg-preview-inside-divs'\n });\n this.previewVerticalDiv = createElement('div', {\n styles: 'width: 1px;height: 81px;position: absolute;left: 90px;top: 50px;',\n id: this.target.id + '_Preview_Div_Vertical',\n className: 'e-de-border-dlg-preview-inside-divs'\n });\n this.previewHorizontalDiv = createElement('div', {\n styles: 'width: 81px;height: 1px;position: absolute;left: 50px;top: 90px;',\n id: this.target.id + '_Preview_Div_Horizontal',\n className: 'e-de-border-dlg-preview-inside-divs'\n });\n this.previewDivTopTopContainer = createElement('div', {\n styles: 'top: 50px;position: absolute;left: 10px;', id: this.target.id + '_Preview_Div_TopTop_Container'\n });\n this.previewDivTopTop = createElement('div', {\n id: this.target.id + '_Preview_Div_TopTop',\n className: 'e-de-table-border-inside-preview e-de-table-border-preview-genral'\n });\n this.previewDivTopCenterContainer = createElement('div', {\n styles: 'top: 80px;position: absolute;left: 10px;', id: this.target.id + '_Preview_Div_TopCenter_Container'\n });\n this.previewDivTopCenter = createElement('div', {\n id: this.target.id + '_Preview_Div_TopCenter',\n className: 'e-de-table-border-inside-preview e-de-table-border-preview-genral'\n });\n this.previewDivTopBottomContainer = createElement('div', {\n styles: 'top: 110px;position: absolute;left: 10px;', id: this.target.id + '_Preview_Div_TopBottom_Container'\n });\n this.previewDivTopBottom = createElement('div', {\n id: this.target.id + '_Preview_Div_TopBottom',\n className: 'e-de-table-border-inside-preview e-de-table-border-preview-genral'\n });\n this.previewDivLeftDiagonalContainer = createElement('div', {\n styles: 'top: 145px;position: absolute;left: 10px;', id: this.target.id + '_Preview_Div_LeftDiagonal_Container'\n });\n this.previewDivLeftDiagonal = createElement('div', {\n id: this.target.id + '_Preview_Div_LeftDiagonal',\n className: 'e-de-table-border-inside-preview e-de-table-border-preview-genral'\n });\n this.previewDivBottomLeftContainer = createElement('div', {\n styles: 'top: 145px;position: absolute;left: 50px', id: this.target.id + '_Preview_Div_BottomLeft_Container'\n });\n this.previewDivBottomLeft = createElement('div', {\n id: this.target.id + '_Preview_Div_BottomLeft',\n className: 'e-de-table-border-inside-preview e-de-table-border-preview-genral'\n });\n this.previewDivBottomcenterContainer = createElement('div', {\n styles: 'top: 145px;position: absolute;left: 80px;', id: this.target.id + '_Preview_Div_BottomCenter_Container'\n });\n this.previewDivBottomcenter = createElement('div', {\n id: this.target.id + '_Preview_Div_BottomCenter',\n className: 'e-de-table-border-inside-preview e-de-table-border-preview-genral'\n });\n this.previewDivBottomRightContainer = createElement('div', {\n styles: 'top: 145px;position: absolute;left: 110px;', id: this.target.id + '_Preview_Div_BottomRight_Container'\n });\n this.previewDivBottomRight = createElement('div', {\n id: this.target.id + '_Preview_Div_BottomRight',\n className: 'e-de-table-border-inside-preview e-de-table-border-preview-genral'\n });\n this.previewDivDiagonalRightContainer = createElement('div', {\n styles: 'top: 145px; position: absolute; left: 110px;', id: this.target.id + '_Preview_Div_RightDiagonal_Container'\n });\n this.previewDivDiagonalRight = createElement('div', {\n id: this.target.id + '_Preview_Div_RightDiagonal',\n className: 'e-de-table-border-inside-preview e-de-table-border-preview-genral'\n });\n this.previewDivTopTopTransParent = createElement('div', {\n id: this.target.id + '_previewDivTopTopTransParent',\n className: 'e-icons e-de-table-border-preview e-de-table-border-toptop-alignment'\n });\n this.previewDivTopCenterTransParent = createElement('div', {\n id: this.target.id + '_previewDivTopCenterTransParent',\n className: 'e-icons e-de-table-border-preview e-de-table-border-topcenter-alignment'\n });\n this.previewDivTopBottomTransParent = createElement('div', {\n id: this.target.id + '_previewDivTopBottomTransParent',\n className: 'e-icons e-de-table-border-preview e-de-table-border-topbottom-alignment'\n });\n this.previewDivLeftDiagonalTransParent = createElement('div', {\n id: this.target.id + '_previewDivLeftDiagonalTransParent',\n className: 'e-icons e-de-table-border-preview e-de-table-border-diagionalup-alignment'\n });\n this.previewDivBottomLeftTransparent = createElement('div', {\n id: this.target.id + '_previewDivBottomLeftTransparent',\n className: 'e-icons e-de-table-border-preview e-de-table-border-bottomleft-alignment'\n });\n this.previewDivBottomcenterTransparent = createElement('div', {\n id: this.target.id + '_previewDivBottomcenterTransparent',\n className: 'e-icons e-de-table-border-preview e-de-table-border-bottomcenter-alignment'\n });\n this.previewDivBottomRightTransparent = createElement('div', {\n id: this.target.id + '_previewDivBottomRightTransparent',\n className: 'e-icons e-de-table-border-preview e-de-table-border-bottomright-alignment'\n });\n this.previewDivDiagonalRightTransparent = createElement('div', {\n id: this.target.id + '_previewDivDiagonalRightTransparent',\n className: 'e-icons e-de-table-border-preview e-de-table-border-diagionaldown-alignment'\n });\n this.shadingContiner = createElement('div', {\n /* tslint:disable:max-line-length */\n styles: 'display:inline-block;position:absolute;left:17px;width:400px;height:100px;padding:0px;border-style: none;margin-left:10px;',\n id: this.target.id + '_shading_preview', className: 'e-de-table-shading-preview'\n });\n var shadingText = createElement('div', {\n innerHTML: localeValue.getConstant('Shading'), className: 'e-de-table-border-heading',\n styles: 'padding-top: 30px;left: 5px;'\n });\n var shadings = createElement('div', { styles: 'display:flex;' });\n var label = createElement('div', {\n innerHTML: localeValue.getConstant('Fill'), className: 'e-de-table-setting-heading e-de-table-border-fill',\n styles: 'top: 50px;left: 10px;'\n });\n var shadingColorPickerElement = createElement('input', {\n attrs: { 'type': 'color' },\n id: this.target.id + '_shading_color', styles: 'position: absolute;top: 75px;left: 40px;width: 30px;'\n });\n var shdApply = createElement('div', {\n styles: 'position:absolute;top:41px;left:150px;width:180px;'\n });\n var div = createElement('div', {\n styles: 'width:100px;padding-bottom: 10px;', innerHTML: localeValue.getConstant('Apply To'),\n className: 'e-de-table-element-subheading'\n });\n var divsion = createElement('div', { styles: 'width:100px;position:absolute;' });\n var ulelementShading = createElement('select', {\n innerHTML: ''\n + '',\n id: this.target.id + '_shading'\n });\n divsion.appendChild(ulelementShading);\n this.noneDiv.appendChild(this.noneDivTransparent);\n this.boxDiv.appendChild(this.boxDivTransparent);\n this.allDiv.appendChild(this.allDivTransparent);\n this.customDiv.appendChild(this.customDivTransparent);\n noneDivContainer.appendChild(this.noneDiv);\n noneDivContainer.appendChild(noneDivLabel);\n boxDivContainer.appendChild(this.boxDiv);\n boxDivContainer.appendChild(boxDivLabel);\n allDivContainer.appendChild(this.allDiv);\n allDivContainer.appendChild(allDivLabel);\n customDivContainer.appendChild(this.customDiv);\n customDivContainer.appendChild(customDivLabel);\n settingsContiner.appendChild(settingText);\n settingsContiner.appendChild(noneDivContainer);\n settingsContiner.appendChild(boxDivContainer);\n settingsContiner.appendChild(allDivContainer);\n settingsContiner.appendChild(customDivContainer);\n this.previewDivBottomcenter.appendChild(this.previewDivBottomcenterTransparent);\n this.previewDivBottomRight.appendChild(this.previewDivBottomRightTransparent);\n this.previewDivBottomLeft.appendChild(this.previewDivBottomLeftTransparent);\n this.previewDivTopTop.appendChild(this.previewDivTopTopTransParent);\n this.previewDivTopCenter.appendChild(this.previewDivTopCenterTransParent);\n this.previewDivTopBottom.appendChild(this.previewDivTopBottomTransParent);\n this.previewDivDiagonalRight.appendChild(this.previewDivDiagonalRightTransparent);\n this.previewDivLeftDiagonal.appendChild(this.previewDivLeftDiagonalTransParent);\n this.previewDivBottomcenterContainer.appendChild(this.previewDivBottomcenter);\n this.previewDivBottomLeftContainer.appendChild(this.previewDivBottomLeft);\n this.previewDivBottomRightContainer.appendChild(this.previewDivBottomRight);\n this.previewDivDiagonalRightContainer.appendChild(this.previewDivDiagonalRight);\n this.previewDivLeftDiagonalContainer.appendChild(this.previewDivLeftDiagonal);\n this.previewDivTopBottomContainer.appendChild(this.previewDivTopBottom);\n this.previewDivTopCenterContainer.appendChild(this.previewDivTopCenter);\n this.previewDivTopTopContainer.appendChild(this.previewDivTopTop);\n previewContiner.appendChild(previewText);\n previewContiner.appendChild(this.previewDiv);\n previewContiner.appendChild(this.previewRightDiagonalDiv);\n previewContiner.appendChild(this.previewHorizontalDiv);\n previewContiner.appendChild(this.previewLeftDiagonalDiv);\n previewContiner.appendChild(this.previewVerticalDiv);\n previewContiner.appendChild(this.previewDivBottomcenterContainer);\n previewContiner.appendChild(this.previewDivBottomLeftContainer);\n previewContiner.appendChild(this.previewDivBottomRightContainer);\n previewContiner.appendChild(this.previewDivDiagonalRightContainer);\n previewContiner.appendChild(this.previewDivLeftDiagonalContainer);\n previewContiner.appendChild(this.previewDivTopBottomContainer);\n previewContiner.appendChild(this.previewDivTopCenterContainer);\n previewContiner.appendChild(this.previewDivTopTopContainer);\n shdApply.appendChild(div);\n shdApply.appendChild(divsion);\n shadings.appendChild(label);\n shadings.appendChild(shadingColorPickerElement);\n shadings.appendChild(shdApply);\n this.shadingContiner.appendChild(shadingText);\n this.shadingContiner.appendChild(shadings);\n styleContainer.appendChild(styleText);\n styleContainer.appendChild(dropDownList);\n styleContainer.appendChild(widthText);\n styleContainer.appendChild(widthNumeric);\n styleContainer.appendChild(colorText);\n styleContainer.appendChild(borderColorPickerElement);\n this.target.appendChild(displayText);\n this.target.appendChild(settingsContiner);\n this.target.appendChild(styleContainer);\n this.target.appendChild(previewContiner);\n this.target.appendChild(this.shadingContiner);\n // Handling Setting Container\n noneDivContainer.addEventListener('click', this.handleSettingCheckBoxAction);\n boxDivContainer.addEventListener('click', this.handleSettingCheckBoxAction);\n allDivContainer.addEventListener('click', this.handleSettingCheckBoxAction);\n customDivContainer.addEventListener('click', this.handleSettingCheckBoxAction);\n // Handling Preview Div Container\n this.previewDivBottomcenterContainer.addEventListener('click', this.handlePreviewCheckBoxAction);\n this.previewDivBottomLeftContainer.addEventListener('click', this.handlePreviewCheckBoxAction);\n this.previewDivBottomRightContainer.addEventListener('click', this.handlePreviewCheckBoxAction);\n this.previewDivTopTopContainer.addEventListener('click', this.handlePreviewCheckBoxAction);\n this.previewDivTopBottomContainer.addEventListener('click', this.handlePreviewCheckBoxAction);\n this.previewDivTopCenterContainer.addEventListener('click', this.handlePreviewCheckBoxAction);\n this.previewDivDiagonalRightContainer.addEventListener('click', this.handlePreviewCheckBoxAction);\n this.previewDivLeftDiagonalContainer.addEventListener('click', this.handlePreviewCheckBoxAction);\n // handling dropdown change\n this.borderWidth = new NumericTextBox({\n value: 0, min: 0, max: 6, decimals: 2,\n width: 150, enablePersistence: false\n });\n this.borderWidth.appendTo(widthNumeric);\n this.borderStyle = new DropDownList({\n width: '150px', popupHeight: '150px', index: 1\n });\n this.borderStyle.appendTo(dropDownList);\n this.ulelementShading = new DropDownList({\n width: '150px', change: this.applyTableCellPreviewBoxes, index: 1\n });\n this.ulelementShading.appendTo(ulelementShading);\n this.borderColorPicker = new ColorPicker({\n value: '#000000', change: this.applyPreviewTableBorderColor\n });\n this.borderColorPicker.appendTo(borderColorPickerElement);\n this.shadingColorPicker = new ColorPicker({\n value: '#000000', change: this.applyPreviewTableBackgroundColor\n });\n this.shadingColorPicker.appendTo(shadingColorPickerElement);\n };\n BordersAndShadingDialog.prototype.applyFormat = function () {\n var selection = this.owner.selection;\n var editorModule = this.owner.owner.editorModule;\n editorModule.initComplexHistory('BordersAndShading');\n editorModule.isBordersAndShadingDialog = true;\n if (this.applyTo === 0) {\n editorModule.onCellFormat(this.cellFormat);\n }\n else {\n editorModule.onTableFormat(this.tableFormat);\n }\n if (!isNullOrUndefined(this.owner.owner.editorHistory.currentHistoryInfo)) {\n this.owner.owner.editorHistory.updateComplexHistory();\n }\n editorModule.isBordersAndShadingDialog = false;\n };\n BordersAndShadingDialog.prototype.getBorder = function () {\n var border = new WBorder();\n border.color = this.borderColorPicker.value;\n border.lineStyle = this.borderStyle.text;\n border.lineWidth = this.borderWidth.value;\n return border;\n };\n BordersAndShadingDialog.prototype.checkClassName = function (element) {\n return element.classList.contains('e-de-table-border-inside-preview-click');\n };\n /**\n * @private\n */\n BordersAndShadingDialog.prototype.show = function () {\n var localeValue = new L10n('documenteditor', this.owner.owner.defaultLocale);\n localeValue.setLocale(this.owner.owner.locale);\n setCulture(this.owner.owner.locale);\n if (!this.target) {\n this.initBordersAndShadingsDialog(localeValue);\n }\n this.loadBordersShadingsPropertiesDialog();\n this.owner.dialog.content = this.target;\n this.owner.dialog.header = localeValue.getConstant('Borders and Shading');\n this.owner.dialog.beforeOpen = this.owner.updateFocus;\n this.owner.dialog.close = this.closeBordersShadingsDialog;\n this.owner.dialog.position = { X: 'center', Y: 'top' };\n this.owner.dialog.width = 'auto';\n this.owner.dialog.height = 'auto';\n this.owner.dialog.buttons = [{\n click: this.applyBordersShadingsProperties,\n buttonModel: { content: localeValue.getConstant('Ok'), cssClass: 'e-flat e-table-border-shading-okay', isPrimary: true }\n },\n {\n click: this.closeDialog,\n buttonModel: { content: localeValue.getConstant('Cancel'), cssClass: 'e-flat e-table-border-shading-cancel' }\n }];\n this.owner.dialog.dataBind();\n this.owner.dialog.show();\n };\n BordersAndShadingDialog.prototype.updateClassForSettingDivElements = function () {\n var settingDivs = this.target.getElementsByClassName('e-de-table-border-inside-setting');\n for (var j = 0; j < settingDivs.length; j++) {\n if (settingDivs[j].className.indexOf('e-de-table-border-inside-setting-click') !== -1) {\n var tempClassName = settingDivs[j].className;\n tempClassName = tempClassName.replace('e-de-table-border-inside-setting-click', '');\n settingDivs[j].className = tempClassName;\n }\n }\n };\n BordersAndShadingDialog.prototype.setSettingPreviewDivElement = function (position) {\n switch (position) {\n case 'none':\n this.previewDivTopTop.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivTopCenter.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivTopBottom.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivLeftDiagonal.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivDiagonalRight.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivBottomRight.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivBottomLeft.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivBottomcenter.classList.remove('e-de-table-border-inside-preview-click');\n this.isShowHidePreviewTableElements('none');\n break;\n case 'box':\n this.previewDivTopCenter.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivLeftDiagonal.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivDiagonalRight.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivBottomcenter.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivTopTop.classList.add('e-de-table-border-inside-preview-click');\n this.previewDivTopBottom.classList.add('e-de-table-border-inside-preview-click');\n this.previewDivBottomRight.classList.add('e-de-table-border-inside-preview-click');\n this.previewDivBottomLeft.classList.add('e-de-table-border-inside-preview-click');\n this.isShowHidePreviewTableElements('box');\n break;\n case 'all':\n this.previewDivLeftDiagonal.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivDiagonalRight.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivBottomcenter.classList.add('e-de-table-border-inside-preview-click');\n this.previewDivTopTop.classList.add('e-de-table-border-inside-preview-click');\n this.previewDivTopBottom.classList.add('e-de-table-border-inside-preview-click');\n this.previewDivBottomRight.classList.add('e-de-table-border-inside-preview-click');\n this.previewDivBottomLeft.classList.add('e-de-table-border-inside-preview-click');\n this.previewDivTopCenter.classList.add('e-de-table-border-inside-preview-click');\n this.isShowHidePreviewTableElements('all');\n break;\n }\n };\n BordersAndShadingDialog.prototype.isShowHidePreviewTableElements = function (settingDiv) {\n switch (settingDiv) {\n case 'none':\n this.previewDiv.style.border = 'none';\n this.previewRightDiagonalDiv.style.display = 'none';\n this.previewLeftDiagonalDiv.style.display = 'none';\n this.previewHorizontalDiv.style.display = 'none';\n this.previewVerticalDiv.style.display = 'none';\n break;\n case 'box':\n this.previewDiv.style.border = '1px solid rgba(0, 0, 0, .54)';\n this.previewRightDiagonalDiv.style.display = 'none';\n this.previewLeftDiagonalDiv.style.display = 'none';\n this.previewHorizontalDiv.style.display = 'none';\n this.previewVerticalDiv.style.display = 'none';\n break;\n case 'all':\n this.previewDiv.style.border = '1px solid rgba(0, 0, 0, .54)';\n this.previewRightDiagonalDiv.style.display = 'none';\n this.previewLeftDiagonalDiv.style.display = 'none';\n this.previewHorizontalDiv.style.display = 'block';\n this.previewVerticalDiv.style.display = 'block';\n break;\n }\n };\n BordersAndShadingDialog.prototype.handlePreviewCheckBoxShowHide = function (tableBorderDialogId, compareClass, element) {\n if (element.classList.contains(compareClass)) {\n element.classList.remove(compareClass);\n }\n else {\n element.classList.add(compareClass);\n }\n };\n // tslint:disable-next-line:max-line-length\n BordersAndShadingDialog.prototype.showHidePreviewDivElements = function (tableBorderDialogId, compareClass, elementClass, compareElementClass, position) {\n var setElement = document.getElementById(tableBorderDialogId + elementClass);\n var compareElement = document.getElementById(tableBorderDialogId + compareElementClass);\n if (position === 'TopTop') {\n this.setPropertyPreviewDivElement(setElement, compareElement, compareClass, 'border-top');\n }\n else if (position === 'TopCenter') {\n this.setPropertyPreviewDivElement(setElement, compareElement, compareClass, 'display');\n }\n else if (position === 'TopBottom') {\n this.setPropertyPreviewDivElement(setElement, compareElement, compareClass, 'border-bottom');\n }\n else if (position === 'LeftDiagonal') {\n this.setPropertyPreviewDivElement(setElement, compareElement, compareClass, 'display');\n }\n else if (position === 'BottomLeft') {\n this.setPropertyPreviewDivElement(setElement, compareElement, compareClass, 'border-left');\n }\n else if (position === 'BottomCenter') {\n this.setPropertyPreviewDivElement(setElement, compareElement, compareClass, 'display');\n }\n else if (position === 'BottomRight') {\n this.setPropertyPreviewDivElement(setElement, compareElement, compareClass, 'border-right');\n }\n else if (position === 'RightDiagonal') {\n this.setPropertyPreviewDivElement(setElement, compareElement, compareClass, 'display');\n }\n };\n BordersAndShadingDialog.prototype.setPropertyPreviewDivElement = function (ele, compareElement, compareClass, property) {\n if (compareElement.classList.contains(compareClass) && property.split('-')[0] === 'border') {\n /* tslint:disable:no-any */\n ele.style[property] = '1px solid rgba(0, 0, 0, .54)';\n }\n else if (compareElement.classList.contains(compareClass) && property === 'display') {\n ele.style[property] = 'block';\n }\n else {\n ele.style[property] = 'none';\n /* tslint:enable:no-any */\n }\n };\n BordersAndShadingDialog.prototype.loadBordersShadingsPropertiesDialog = function () {\n var tableFormat = this.owner.selection.tableFormat.table.tableFormat;\n var lineStyle;\n var borderColor;\n var fillColor;\n var borderWidth;\n if (!isNullOrUndefined(tableFormat) && !isNullOrUndefined(tableFormat.borders)) {\n if (isNullOrUndefined(tableFormat.borders) || isNullOrUndefined(tableFormat.borders.top)) {\n lineStyle = 1;\n borderColor = '#000000';\n borderWidth = 0;\n fillColor = '#000000';\n }\n else {\n lineStyle = this.getLineStyle(tableFormat.borders.top.lineStyle);\n borderColor = tableFormat.borders.top.color;\n borderWidth = tableFormat.borders.top.getLineWidth();\n fillColor = tableFormat.shading.backgroundColor;\n }\n }\n if (!this.customDiv.classList.contains('e-de-table-border-inside-setting-click')) {\n this.customDiv.classList.add('e-de-table-border-inside-setting-click');\n this.noneDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.boxDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.allDiv.classList.remove('e-de-table-border-inside-setting-click');\n }\n this.setSettingPreviewDivElement('all');\n this.borderColorPicker.value = borderColor;\n this.shadingColorPicker.value = fillColor;\n /* tslint:disable:no-any */\n var colorPickerEvent = {\n target: this.borderColorPicker, ctrlKey: false,\n shiftKey: false, which: 0\n };\n var fillColorEvent = {\n target: this.shadingColorPicker, ctrlKey: false,\n shiftKey: false, which: 0\n };\n /* tslint:enable:no-any */\n this.applyPreviewTableBackgroundColor(fillColorEvent);\n this.applyPreviewTableBorderColor(colorPickerEvent);\n this.ulelementShading.index = 1;\n this.previewDivLeftDiagonal.style.display = 'none';\n this.previewDivDiagonalRight.style.display = 'none';\n this.borderWidth.value = borderWidth;\n this.borderStyle.index = lineStyle;\n };\n BordersAndShadingDialog.prototype.getLineStyle = function (lineStyle) {\n switch (lineStyle) {\n case 'Single': return 1;\n case 'Dot': return 2;\n case 'DashSmallGap': return 3;\n case 'DashLargeGap': return 4;\n case 'DashDot': return 5;\n case 'DashDotDot': return 6;\n case 'Double': return 7;\n case 'Triple': return 8;\n case 'ThinThickSmallGap': return 9;\n case 'ThickThinSmallGap': return 10;\n case 'ThinThickThinSmallGap': return 11;\n case 'ThinThickMediumGap': return 12;\n case 'ThickThinMediumGap': return 13;\n case 'ThinThickThinMediumGap': return 14;\n case 'ThinThickLargeGap': return 15;\n case 'ThickThinLargeGap': return 16;\n case 'ThinThickThinLargeGap': return 17;\n case 'SingleWavy': return 18;\n case 'DoubleWavy': return 19;\n case 'DashDotStroked': return 20;\n case 'Emboss3D': return 21;\n case 'Engrave3D': return 22;\n case 'Outset': return 23;\n case 'Inset': return 24;\n case 'Thick': return 25;\n }\n return 0;\n };\n /**\n * @private\n */\n BordersAndShadingDialog.prototype.destroy = function () {\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var k = 0; k < this.target.childNodes.length; k++) {\n this.target.removeChild(this.target.childNodes[k]);\n k--;\n }\n this.target = undefined;\n }\n if (this.cellFormat) {\n this.cellFormat.destroy();\n this.cellFormat = undefined;\n }\n if (this.tableFormat) {\n this.tableFormat.destroy();\n this.tableFormat = undefined;\n }\n this.dialog = undefined;\n this.target = undefined;\n if (!isNullOrUndefined(this.borderStyle)) {\n this.borderStyle.destroy();\n }\n this.borderStyle = undefined;\n this.borderColorPicker = undefined;\n this.noneDivTransparent = undefined;\n this.boxDivTransparent = undefined;\n this.allDivTransparent = undefined;\n this.customDivTransparent = undefined;\n this.previewDiv = undefined;\n this.previewRightDiagonalDiv = undefined;\n this.previewLeftDiagonalDiv = undefined;\n this.previewVerticalDiv = undefined;\n this.previewHorizontalDiv = undefined;\n this.previewDivTopTopContainer = undefined;\n this.previewDivTopTop = undefined;\n this.previewDivTopCenterContainer = undefined;\n this.previewDivTopCenter = undefined;\n this.previewDivTopBottomContainer = undefined;\n this.previewDivTopBottom = undefined;\n this.previewDivLeftDiagonalContainer = undefined;\n this.previewDivLeftDiagonal = undefined;\n this.previewDivBottomLeftContainer = undefined;\n this.previewDivBottomLeft = undefined;\n this.previewDivBottomcenterContainer = undefined;\n this.previewDivBottomcenter = undefined;\n this.previewDivBottomRightContainer = undefined;\n this.previewDivBottomRight = undefined;\n this.previewDivDiagonalRightContainer = undefined;\n this.previewDivDiagonalRight = undefined;\n this.previewDivTopTopTransParent = undefined;\n this.previewDivTopCenterTransParent = undefined;\n this.previewDivTopBottomTransParent = undefined;\n this.previewDivLeftDiagonalTransParent = undefined;\n this.previewDivBottomLeftTransparent = undefined;\n this.previewDivBottomcenterTransparent = undefined;\n this.previewDivBottomRightTransparent = undefined;\n this.previewDivDiagonalRightTransparent = undefined;\n this.shadingContiner = undefined;\n this.shadingColorPicker = undefined;\n this.ulelementShading = undefined;\n };\n return BordersAndShadingDialog;\n}());\nexport { BordersAndShadingDialog };\n","import { CheckBox } from '@syncfusion/ej2-buttons';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { WTableFormat } from '../index';\nimport { isNullOrUndefined, L10n, createElement, setCulture } from '@syncfusion/ej2-base';\nimport { CellOptionsDialog } from './index';\n/**\n * The Table options dialog is used to modify default cell margins and cell spacing of selected table.\n */\nvar TableOptionsDialog = /** @class */ (function () {\n /**\n * @private\n */\n function TableOptionsDialog(viewer) {\n var _this = this;\n /**\n * @private\n */\n this.applyTableCellProperties = function () {\n var tableFormat = _this.owner.selection.tableFormat;\n if (!isNullOrUndefined(_this.bottomMarginBox.value || _this.leftMarginBox.value\n || _this.rightMarginBox.value || _this.topMarginBox.value || _this.cellSpaceTextBox.value)\n && (tableFormat.bottomMargin !== _this.bottomMarginBox.value\n || tableFormat.leftMargin !== _this.leftMarginBox.value\n || tableFormat.rightMargin !== _this.rightMarginBox.value\n || tableFormat.topMargin !== _this.topMarginBox.value\n || tableFormat.cellSpacing !== _this.cellSpaceTextBox.value)) {\n _this.owner.owner.tablePropertiesDialogModule.isTableOptionsUpdated = true;\n _this.applyTableOptions(_this.tableFormat);\n _this.owner.owner.tablePropertiesDialogModule.applyTableSubProperties();\n }\n _this.closeCellMarginsDialog();\n };\n /**\n * @private\n */\n this.closeCellMarginsDialog = function () {\n _this.owner.dialog.hide();\n _this.owner.dialog.element.style.pointerEvents = '';\n _this.owner.updateFocus();\n };\n /**\n * @private\n */\n this.changeAllowSpaceCheckBox = function () {\n if (_this.allowSpaceCheckBox.checked) {\n _this.cellSpaceTextBox.enabled = true;\n }\n else {\n _this.cellSpaceTextBox.enabled = false;\n }\n };\n /**\n * @private\n */\n this.removeEvents = function () {\n _this.owner.dialog2.element.style.pointerEvents = '';\n _this.owner.updateFocus();\n };\n this.owner = viewer;\n }\n Object.defineProperty(TableOptionsDialog.prototype, \"tableFormat\", {\n /**\n * @private\n */\n get: function () {\n if (isNullOrUndefined(this.tableFormatIn)) {\n return this.tableFormatIn = new WTableFormat();\n }\n return this.tableFormatIn;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n TableOptionsDialog.prototype.getModuleName = function () {\n return 'TableOptionsDialog';\n };\n /**\n * @private\n */\n TableOptionsDialog.prototype.initTableOptionsDialog = function (localValue) {\n var instance = this.owner;\n this.target = createElement('div', {\n id: this.owner.owner.containerId + '_insertCellMarginsDialog', className: 'e-de-table-options-dlg'\n });\n this.owner.owner.element.appendChild(this.target);\n var innerDiv = createElement('div', { styles: 'width: 475px;position: relative;height: 180px;' });\n var innerDivLabel = createElement('Label', {\n id: this.target.id + '_innerDivLabel', className: 'e-de-cell-dia-options-label',\n innerHTML: localValue.getConstant('Default Cell Margins')\n });\n innerDiv.appendChild(innerDivLabel);\n CellOptionsDialog.getCellMarginDialogElements(this, innerDiv, localValue);\n var div = createElement('div', { styles: 'width: 475px; position: relative;' });\n var cellSpaceLabel = createElement('Label', {\n className: 'e-de-cell-dia-options-label',\n id: this.target.id + '_cellSpaceLabel'\n });\n cellSpaceLabel.innerHTML = localValue.getConstant('Default Cell Spacing');\n div.appendChild(cellSpaceLabel);\n var table2 = createElement('TABLE', {\n styles: 'height: 30px;padding-bottom: 15px;'\n });\n var tr3 = createElement('tr');\n var td5 = createElement('td');\n var allowSpaceCheckBox = createElement('input', {\n attrs: { 'type': 'checkbox' }, id: this.target.id + '_cellcheck'\n });\n var td6 = createElement('td', { styles: 'padding-left: 15px;', });\n this.cellspacingTextBox = createElement('input', {\n attrs: { 'type': 'text' }, id: this.target.id + '_cellspacing'\n });\n td5.appendChild(allowSpaceCheckBox);\n td6.appendChild(this.cellspacingTextBox);\n tr3.appendChild(td5);\n tr3.appendChild(td6);\n table2.appendChild(tr3);\n div.appendChild(table2);\n var divBtn = document.createElement('div');\n this.target.appendChild(div);\n this.target.appendChild(divBtn);\n this.cellSpaceTextBox = new NumericTextBox({\n value: 0, min: 0, max: 264.5, width: 150,\n decimals: 2, enablePersistence: false\n });\n this.cellSpaceTextBox.appendTo(this.cellspacingTextBox);\n this.allowSpaceCheckBox = new CheckBox({\n label: localValue.getConstant('Allow Spacing Between Cells'),\n change: this.changeAllowSpaceCheckBox,\n cssClass: 'e-de-tbl-margin-sub-header',\n });\n this.allowSpaceCheckBox.appendTo(allowSpaceCheckBox);\n };\n /**\n * @private\n */\n TableOptionsDialog.prototype.loadCellMarginsDialog = function () {\n var tableFormat = this.owner.selection.tableFormat;\n this.cellSpaceTextBox.value = tableFormat.cellSpacing;\n this.bottomMarginBox.value = tableFormat.bottomMargin;\n this.topMarginBox.value = tableFormat.topMargin;\n this.rightMarginBox.value = tableFormat.rightMargin;\n this.leftMarginBox.value = tableFormat.leftMargin;\n if (tableFormat.cellSpacing > 0) {\n this.allowSpaceCheckBox.checked = true;\n this.cellSpaceTextBox.enabled = true;\n }\n else {\n this.allowSpaceCheckBox.checked = false;\n this.cellSpaceTextBox.enabled = false;\n }\n };\n /**\n * @private\n */\n TableOptionsDialog.prototype.applySubTableOptions = function (tableFormat) {\n this.owner.owner.editorHistory.initComplexHistory(this.owner.selection, 'TableMarginsSelection');\n this.applyTableOptionsHistory(tableFormat);\n if (!isNullOrUndefined(this.owner.owner.editorHistory.currentHistoryInfo)) {\n this.owner.owner.editorHistory.updateComplexHistory();\n }\n };\n /**\n * @private\n */\n TableOptionsDialog.prototype.applyTableOptionsHelper = function (tableFormat) {\n this.applySubTableOptionsHelper(tableFormat);\n };\n /**\n * @private\n */\n TableOptionsDialog.prototype.applyTableOptionsHistory = function (tableFormat) {\n this.owner.owner.editorModule.initHistory('TableOptions');\n this.applySubTableOptionsHelper(tableFormat);\n };\n /**\n * @private\n */\n TableOptionsDialog.prototype.applySubTableOptionsHelper = function (tableFormat) {\n var ownerTable = this.owner.selection.start.currentWidget.paragraph.associatedCell.ownerTable;\n ownerTable = ownerTable.combineWidget(this.owner);\n var currentTableFormat = ownerTable.tableFormat;\n if (!isNullOrUndefined(this.owner.owner.editorHistory.currentBaseHistoryInfo)) {\n this.owner.owner.editorHistory.currentBaseHistoryInfo.addModifiedTableOptions(currentTableFormat);\n }\n currentTableFormat.cellSpacing = tableFormat.cellSpacing;\n currentTableFormat.leftMargin = tableFormat.leftMargin;\n currentTableFormat.topMargin = tableFormat.topMargin;\n currentTableFormat.rightMargin = tableFormat.rightMargin;\n currentTableFormat.bottomMargin = tableFormat.bottomMargin;\n this.owner.owner.tablePropertiesDialogModule.calculateGridValue(ownerTable);\n };\n /**\n * @private\n */\n TableOptionsDialog.prototype.applyTableOptions = function (tableFormat) {\n tableFormat.leftMargin = this.leftMarginBox.value;\n tableFormat.topMargin = this.topMarginBox.value;\n tableFormat.bottomMargin = this.bottomMarginBox.value;\n tableFormat.rightMargin = this.rightMarginBox.value;\n if (this.allowSpaceCheckBox.checked) {\n tableFormat.cellSpacing = this.cellSpaceTextBox.value;\n }\n };\n /**\n * @private\n */\n TableOptionsDialog.prototype.show = function () {\n var documentLocale = new L10n('documenteditor', this.owner.owner.defaultLocale);\n documentLocale.setLocale(this.owner.owner.locale);\n setCulture(this.owner.owner.locale);\n if (!this.target) {\n this.initTableOptionsDialog(documentLocale);\n }\n this.loadCellMarginsDialog();\n this.owner.dialog.header = documentLocale.getConstant('Table Options');\n this.owner.dialog.content = this.target;\n this.owner.dialog.beforeOpen = undefined;\n this.owner.dialog.position = { X: 'center', Y: 'top' };\n // this.owner.dialog.cssClass = 'e-de-table-margin-size';\n this.owner.dialog.height = 'auto';\n this.owner.dialog.width = 'auto';\n this.owner.dialog.open = undefined;\n this.owner.dialog.beforeOpen = this.owner.updateFocus;\n this.owner.dialog.close = this.removeEvents;\n this.owner.dialog.buttons = [{\n click: this.applyTableCellProperties,\n buttonModel: { content: documentLocale.getConstant('Ok'), cssClass: 'e-flat e-table-cell-okay', isPrimary: true }\n },\n {\n click: this.closeCellMarginsDialog,\n buttonModel: { content: documentLocale.getConstant('Cancel'), cssClass: 'e-flat e-table-cell-cancel' }\n }];\n this.owner.dialog.dataBind();\n this.owner.dialog.show();\n };\n /**\n * @private\n */\n TableOptionsDialog.prototype.destroy = function () {\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var p = 0; p < this.target.childNodes.length; p++) {\n this.target.removeChild(this.target.childNodes[p]);\n p--;\n }\n this.target = undefined;\n }\n this.dialog = undefined;\n this.target = undefined;\n this.owner = undefined;\n this.cellspacingTextBox = undefined;\n this.allowSpaceCheckBox = undefined;\n };\n return TableOptionsDialog;\n}());\nexport { TableOptionsDialog };\n","import { CheckBox } from '@syncfusion/ej2-buttons';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { WCellFormat } from '../index';\nimport { isNullOrUndefined, L10n, createElement, setCulture } from '@syncfusion/ej2-base';\n/**\n * The Cell options dialog is used to modify margins of selected cells.\n */\nvar CellOptionsDialog = /** @class */ (function () {\n /**\n * @private\n */\n function CellOptionsDialog(viewer) {\n var _this = this;\n /**\n * @private\n */\n this.removeEvents = function () {\n _this.owner.dialog2.element.style.pointerEvents = '';\n _this.owner.updateFocus();\n };\n /**\n * @private\n */\n this.changeSameAsTable = function () {\n if (_this.sameAsTableCheckBox.checked) {\n _this.leftMarginBox.enabled = false;\n _this.rightMarginBox.enabled = false;\n _this.bottomMarginBox.enabled = false;\n _this.topMarginBox.enabled = false;\n }\n else {\n _this.leftMarginBox.enabled = true;\n _this.rightMarginBox.enabled = true;\n _this.bottomMarginBox.enabled = true;\n _this.topMarginBox.enabled = true;\n }\n };\n /**\n * @private\n */\n this.applyTableCellProperties = function () {\n var cellFormat = _this.owner.selection.cellFormat;\n if (!isNullOrUndefined(_this.bottomMarginBox.value || _this.leftMarginBox.value\n || _this.rightMarginBox.value || _this.topMarginBox.value) &&\n (cellFormat.bottomMargin !== _this.bottomMarginBox.value || cellFormat.leftMargin !== _this.leftMarginBox.value\n || cellFormat.rightMargin !== _this.rightMarginBox.value || cellFormat.topMargin !== _this.topMarginBox.value)) {\n _this.owner.owner.tablePropertiesDialogModule.isCellOptionsUpdated = true;\n _this.applyTableOptions(_this.cellFormat);\n _this.owner.owner.tablePropertiesDialogModule.applyTableSubProperties();\n }\n _this.closeCellMarginsDialog();\n };\n /**\n * @private\n */\n this.closeCellMarginsDialog = function () {\n _this.owner.dialog.hide();\n _this.owner.dialog.element.style.pointerEvents = '';\n };\n this.owner = viewer;\n }\n Object.defineProperty(CellOptionsDialog.prototype, \"cellFormat\", {\n /**\n * @private\n */\n get: function () {\n if (isNullOrUndefined(this.cellFormatIn)) {\n return this.cellFormatIn = new WCellFormat();\n }\n return this.cellFormatIn;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n CellOptionsDialog.prototype.getModuleName = function () {\n return 'CellOptionsDialog';\n };\n /**\n * @private\n */\n CellOptionsDialog.prototype.initCellMarginsDialog = function (localValue) {\n var instance = this.owner;\n this.target = createElement('div', {\n id: this.owner.owner.containerId + '_tableCellMarginsDialog', className: 'e-de-table-cell-margin-dlg'\n });\n this.owner.owner.element.appendChild(this.target);\n var innerDiv = createElement('div', { styles: 'width: 475px;position: relative;height: 165px;' });\n var innerDivLabel = createElement('Label', {\n className: 'e-de-cell-dia-options-label', id: this.target.id + '_innerDivLabel'\n });\n innerDivLabel.innerHTML = localValue.getConstant('Cell Margins');\n innerDiv.appendChild(innerDivLabel);\n var table = createElement('TABLE', {\n styles: 'height: 40px;padding-bottom: 0px;', className: 'e-de-cell-margin-top'\n });\n var tr = createElement('tr');\n var td = createElement('td', { className: 'e-de-tbl-btn-seperator' });\n var sameAsTableCheckBox = createElement('input', {\n attrs: { 'type': 'checkbox' }, id: this.target.id + '_sameAsCheckBox'\n });\n td.appendChild(sameAsTableCheckBox);\n tr.appendChild(td);\n table.appendChild(tr);\n innerDiv.appendChild(table);\n CellOptionsDialog.getCellMarginDialogElements(this, innerDiv, localValue);\n var divBtn = document.createElement('div');\n this.target.appendChild(divBtn);\n this.sameAsTableCheckBox = new CheckBox({\n label: localValue.getConstant('Same as the whole table'),\n change: this.changeSameAsTable\n });\n this.sameAsTableCheckBox.appendTo(sameAsTableCheckBox);\n this.sameAsTableCheckBox.addEventListener('change', this.changeSameAsTable);\n };\n /**\n * @private\n */\n CellOptionsDialog.prototype.show = function () {\n var localizeValue = new L10n('documenteditor', this.owner.owner.defaultLocale);\n localizeValue.setLocale(this.owner.owner.locale);\n setCulture(this.owner.owner.locale);\n if (!this.target) {\n this.initCellMarginsDialog(localizeValue);\n }\n this.loadCellMarginsDialog();\n this.owner.dialog.header = localizeValue.getConstant('Cell Options');\n this.owner.dialog.position = { X: 'center', Y: 'top' };\n this.owner.dialog.height = 'auto';\n this.owner.dialog.width = 'auto';\n this.owner.dialog.content = this.target;\n this.owner.dialog.beforeOpen = undefined;\n this.owner.dialog.open = undefined;\n this.owner.dialog.close = this.removeEvents;\n this.owner.dialog.buttons = [{\n click: this.applyTableCellProperties,\n buttonModel: { content: localizeValue.getConstant('Ok'), cssClass: 'e-flat e-table-cell-margin-okay', isPrimary: true }\n },\n {\n click: this.closeCellMarginsDialog,\n buttonModel: { content: localizeValue.getConstant('Cancel'), cssClass: 'e-flat e-table-cell-margin-cancel' }\n }];\n this.owner.dialog.show();\n };\n /**\n * @private\n */\n CellOptionsDialog.prototype.loadCellMarginsDialog = function () {\n var cellFormat = this.owner.selection.cellFormat;\n this.sameAsTable = isNullOrUndefined(cellFormat.leftMargin || cellFormat.topMargin\n || cellFormat.rightMargin || cellFormat.bottomMargin);\n if (this.sameAsTable) {\n var tableFormat = this.owner.selection.tableFormat;\n this.loadCellProperties(tableFormat, false, true);\n }\n else {\n this.loadCellProperties(cellFormat, true, false);\n }\n };\n CellOptionsDialog.prototype.loadCellProperties = function (format, enableTextBox, enableCheckBox) {\n this.leftMarginBox.value = format.leftMargin;\n this.rightMarginBox.value = format.rightMargin;\n this.topMarginBox.value = format.topMargin;\n this.bottomMarginBox.value = format.bottomMargin;\n this.leftMarginBox.enabled = enableTextBox;\n this.rightMarginBox.enabled = enableTextBox;\n this.topMarginBox.enabled = enableTextBox;\n this.bottomMarginBox.enabled = enableTextBox;\n this.sameAsTableCheckBox.checked = enableCheckBox;\n };\n /**\n * @private\n */\n CellOptionsDialog.prototype.applySubCellOptions = function (cellFormat) {\n this.owner.owner.editorHistory.initComplexHistory(this.owner.selection, 'CellMarginsSelection');\n this.owner.owner.editorModule.initHistory('CellOptions');\n /* tslint:disable:max-line-length */\n var startTable = this.owner.selection.start.paragraph.associatedCell.ownerTable;\n startTable = startTable.combineWidget(this.owner);\n this.applyCellmarginsValue(this.owner.selection.start.paragraph.associatedCell.ownerRow.combineWidget(this.owner), this.owner.selection.start, this.owner.selection.end, cellFormat);\n this.owner.owner.editorModule.reLayout(this.owner.selection, false);\n if (!isNullOrUndefined(this.owner.owner.editorHistory.currentHistoryInfo)) {\n this.owner.owner.editorHistory.updateComplexHistory();\n }\n };\n /**\n * @private\n */\n CellOptionsDialog.prototype.applyCellmarginsValue = function (row, start, end, cellFormat) {\n this.applyCellMarginsInternal(row, cellFormat);\n if (end.paragraph.associatedCell.ownerRow === row) {\n return;\n }\n var newRow = row.nextWidget;\n if (!isNullOrUndefined(newRow)) {\n this.applyCellmarginsValue(newRow, start, end, cellFormat);\n }\n };\n CellOptionsDialog.prototype.applyCellMarginsInternal = function (row, cellFormat) {\n if (!isNullOrUndefined(this.owner.owner.editorHistory.currentBaseHistoryInfo)) {\n var currentFormat = row.childWidgets[0].cellFormat;\n /* tslint:disable:max-line-length */\n cellFormat = this.owner.owner.editorHistory.currentBaseHistoryInfo.addModifiedCellOptions(currentFormat, cellFormat, row.ownerTable);\n }\n if (!isNullOrUndefined(cellFormat)) {\n this.applyCellMarginsForCells(row, cellFormat);\n }\n };\n /**\n * @private\n */\n CellOptionsDialog.prototype.applyCellMarginsForCells = function (row, cellFormat) {\n var rowCells = row.childWidgets;\n this.iterateCells(rowCells, cellFormat);\n };\n /**\n * @private\n */\n CellOptionsDialog.prototype.iterateCells = function (cells, cellFormat) {\n for (var i = 0; i < cells.length; i++) {\n this.applySubCellMargins(cells[i].cellFormat, cellFormat);\n }\n this.owner.owner.tablePropertiesDialogModule.calculateGridValue(cells[0].ownerTable);\n };\n /**\n * @private\n */\n CellOptionsDialog.prototype.applySubCellMargins = function (sourceFormat, cellFormat) {\n sourceFormat.leftMargin = cellFormat.leftMargin;\n sourceFormat.topMargin = cellFormat.topMargin;\n sourceFormat.rightMargin = cellFormat.rightMargin;\n sourceFormat.bottomMargin = cellFormat.bottomMargin;\n };\n /**\n * @private\n */\n CellOptionsDialog.prototype.applyTableOptions = function (cellFormat) {\n if (!this.sameAsTableCheckBox.checked) {\n cellFormat.leftMargin = this.leftMarginBox.value;\n cellFormat.topMargin = this.topMarginBox.value;\n cellFormat.bottomMargin = this.bottomMarginBox.value;\n cellFormat.rightMargin = this.rightMarginBox.value;\n }\n };\n /**\n * @private\n */\n CellOptionsDialog.prototype.destroy = function () {\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var n = 0; n < this.target.childNodes.length; n++) {\n this.target.removeChild(this.target.childNodes[n]);\n n--;\n }\n this.target = undefined;\n }\n this.dialog = undefined;\n this.target = undefined;\n this.owner = undefined;\n this.sameAsTableCheckBox = undefined;\n };\n /**\n * @private\n */\n CellOptionsDialog.getCellMarginDialogElements = function (dialog, div, locale) {\n if (!isNullOrUndefined(dialog)) {\n var table = createElement('TABLE', { className: 'e-de-cell-margin-top' });\n var tr1 = createElement('tr', { styles: 'height: 50px;color:black;' });\n var td1 = createElement('td');\n var topLabel = createElement('label', {\n innerHTML: locale.getConstant('Top'), className: 'e-de-cell-dia-label-common',\n id: dialog.target.id + '_TopLabel'\n });\n var topTextBox = createElement('input', {\n attrs: { 'type': 'text' }, styles: 'width:100%', id: dialog.target.id + '_Top'\n });\n td1.appendChild(topLabel);\n td1.appendChild(topTextBox);\n var td2 = createElement('td', { className: 'e-de-tbl-btn-seperator' });\n var leftLabel = createElement('label', {\n innerHTML: locale.getConstant('Left'), className: 'e-de-cell-dia-label-common',\n id: dialog.target.id + '_leftLabel'\n });\n var leftTextBox = createElement('input', {\n attrs: { 'type': 'text' },\n styles: 'width:100%', id: dialog.target.id + '_left'\n });\n td2.appendChild(leftLabel);\n td2.appendChild(leftTextBox);\n tr1.appendChild(td1);\n tr1.appendChild(td2);\n var tr2 = createElement('tr', { styles: 'height: 50px;color:black;' });\n var td3 = createElement('td', { styles: 'width:40%;' });\n var bottomLabel = createElement('label', {\n innerHTML: locale.getConstant('Bottom'),\n className: 'e-de-cell-dia-label-common', id: dialog.target.id + '_bottomLabel'\n });\n var bottomTextBox = createElement('input', {\n attrs: { 'type': 'text' },\n styles: 'width:100%', id: dialog.target.id + '_bottom'\n });\n td3.appendChild(bottomLabel);\n td3.appendChild(bottomTextBox);\n var td4 = createElement('td', { styles: 'width:40%;' });\n var rightLabel = createElement('label', {\n innerHTML: locale.getConstant('Right'), id: dialog.target.id + '_rightLabel',\n className: 'e-de-cell-dia-label-common'\n });\n var rightTextBox = createElement('input', {\n attrs: { 'type': 'text' },\n styles: 'width:100%', id: dialog.target.id + '_right'\n });\n td4.appendChild(rightLabel);\n td4.appendChild(rightTextBox);\n tr2.appendChild(td3);\n tr2.appendChild(td4);\n table.appendChild(tr1);\n table.appendChild(tr2);\n div.appendChild(table);\n dialog.target.appendChild(div);\n dialog.topMarginBox = new NumericTextBox({\n value: 0, min: 0, max: 1584, width: 150, decimals: 2,\n enablePersistence: false\n });\n dialog.topMarginBox.appendTo(topTextBox);\n dialog.leftMarginBox = new NumericTextBox({\n value: 0, min: 0, max: 1584, width: 150,\n decimals: 2, enablePersistence: false\n });\n dialog.leftMarginBox.appendTo(leftTextBox);\n dialog.bottomMarginBox = new NumericTextBox({\n value: 0, min: 0, max: 1584, width: 150, decimals: 2,\n enablePersistence: false\n });\n dialog.bottomMarginBox.appendTo(bottomTextBox);\n dialog.rightMarginBox = new NumericTextBox({\n value: 0, min: 0, max: 1584, width: 150,\n decimals: 2, enablePersistence: false\n });\n dialog.rightMarginBox.appendTo(rightTextBox);\n }\n };\n return CellOptionsDialog;\n}());\nexport { CellOptionsDialog };\n","import { ListView } from '@syncfusion/ej2-lists';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { createElement, L10n, setCulture } from '@syncfusion/ej2-base';\n/**\n * The Styles dialog is used to create or modify styles.\n */\nvar StylesDialog = /** @class */ (function () {\n /**\n * @private\n */\n function StylesDialog(viewer) {\n var _this = this;\n this.updateStyleNames = function () {\n var collection = _this.owner.owner.viewer.styles.getStyleNames('Paragraph');\n var defaultStyleNames = ['Normal', 'Heading 1', 'Heading 2', 'Heading 3', 'Heading 4', 'Heading 5', 'Heading 6'];\n var finalList = collection.concat(defaultStyleNames).filter(function (v, i, a) { return a.indexOf(v) === i; });\n return finalList;\n };\n this.modifyStyles = function () {\n _this.owner.dialog.hide();\n _this.owner.owner.styleDialogModule.show(_this.styleName, _this.localValue.getConstant('Modify Style'));\n };\n /* tslint:disable:no-any */\n this.selectHandler = function (args) {\n _this.styleName = args.text;\n };\n this.addNewStyles = function () {\n _this.owner.dialog.hide();\n _this.owner.owner.styleDialogModule.show();\n };\n this.owner = viewer;\n }\n /**\n * @private\n */\n StylesDialog.prototype.getModuleName = function () {\n return 'StylesDialog';\n };\n /**\n * @private\n */\n StylesDialog.prototype.initStylesDialog = function (localValue, styles) {\n var instance = this;\n var id = this.owner.owner.containerId + '_insert_styles';\n this.target = createElement('div', { id: id, className: 'e-de-styles' });\n var headerValue = localValue.getConstant('Styles');\n var dlgFields = createElement('div', { innerHTML: headerValue, className: 'e-styles-dlgfields' });\n this.target.appendChild(dlgFields);\n var commonDiv = createElement('div', { className: 'e-styles-common' });\n this.target.appendChild(commonDiv);\n var searchDiv = createElement('div', { className: 'e-styles-list' });\n commonDiv.appendChild(searchDiv);\n var listviewDiv = createElement('div', { className: 'e-styles-listViewDiv', id: 'styles_listview' });\n searchDiv.appendChild(listviewDiv);\n this.listviewInstance = new ListView({\n dataSource: styles,\n cssClass: 'e-styles-listview',\n });\n this.listviewInstance.appendTo(listviewDiv);\n this.listviewInstance.addEventListener('select', this.selectHandler);\n var buttonDiv = createElement('div', { className: 'e-styles-button' });\n commonDiv.appendChild(buttonDiv);\n var newButtonDiv = createElement('div', { className: 'e-styles-addbutton' });\n buttonDiv.appendChild(newButtonDiv);\n var newButtonElement = createElement('button', { innerHTML: localValue.getConstant('New'), id: 'new' });\n newButtonDiv.appendChild(newButtonElement);\n var newbutton = new Button({ cssClass: 'e-button-custom' });\n newbutton.appendTo(newButtonElement);\n newButtonElement.addEventListener('click', this.addNewStyles);\n var modifybuttonDiv = createElement('div', { className: 'e-styles-addbutton' });\n buttonDiv.appendChild(modifybuttonDiv);\n var modifyButtonElement = createElement('button', { innerHTML: localValue.getConstant('Modify'), id: 'modify' });\n modifybuttonDiv.appendChild(modifyButtonElement);\n var addbutton = new Button({ cssClass: 'e-button-custom' });\n addbutton.appendTo(modifyButtonElement);\n modifyButtonElement.addEventListener('click', this.modifyStyles);\n };\n /**\n * @private\n */\n StylesDialog.prototype.show = function () {\n var styles = this.updateStyleNames();\n var localValue = new L10n('documenteditor', this.owner.owner.defaultLocale);\n localValue.setLocale(this.owner.owner.locale);\n setCulture(this.owner.owner.locale);\n this.localValue = localValue;\n this.initStylesDialog(localValue, styles);\n this.owner.dialog.content = this.target;\n this.owner.dialog.beforeOpen = this.owner.updateFocus;\n this.owner.dialog.close = this.owner.updateFocus;\n this.owner.dialog.header = 'Styles';\n this.owner.dialog.height = 'auto';\n this.owner.dialog.width = 'auto';\n this.owner.dialog.buttons = [{\n click: this.hideObjects.bind(this),\n buttonModel: { content: localValue.getConstant('Cancel'), cssClass: 'e-flat e-hyper-insert', isPrimary: true }\n }];\n this.owner.dialog.dataBind();\n this.owner.dialog.show();\n };\n StylesDialog.prototype.hideObjects = function () {\n this.owner.dialog.hide();\n };\n /**\n * @private\n */\n StylesDialog.prototype.destroy = function () {\n if (this.listviewInstance) {\n this.listviewInstance.destroy();\n this.listviewInstance = undefined;\n }\n };\n return StylesDialog;\n}());\nexport { StylesDialog };\n","import * as index from '@syncfusion/ej2-documenteditor';\nindex.DocumentEditor.Inject( index.Print,index.SfdtExport,index.WordExport,index.TextExport,index.Selection,index.Search,index.Editor,index.EditorHistory,index.OptionsPane,index.ContextMenu,index.ImageResizer,index.HyperlinkDialog,index.TableDialog,index.BookmarkDialog,index.TableOfContentsDialog,index.PageSetupDialog,index.ParagraphDialog,index.ListDialog,index.StyleDialog,index.StylesDialog,index.BulletsAndNumberingDialog,index.FontDialog,index.TablePropertiesDialog,index.BordersAndShadingDialog,index.TableOptionsDialog,index.CellOptionsDialog);\nexport * from '@syncfusion/ej2-documenteditor';\n","import * as index from '@syncfusion/ej2-dropdowns';\nindex.MultiSelect.Inject( index.CheckBoxSelection);\nexport * from '@syncfusion/ej2-dropdowns';\n","/**\n * Defines types of Cell\n * @hidden\n */\nexport var CellType;\n(function (CellType) {\n /** Defines CellType as Data */\n CellType[CellType[\"Data\"] = 0] = \"Data\";\n /** Defines CellType as Header */\n CellType[CellType[\"Header\"] = 1] = \"Header\";\n /** Defines CellType as Summary */\n CellType[CellType[\"Summary\"] = 2] = \"Summary\";\n /** Defines CellType as GroupSummary */\n CellType[CellType[\"GroupSummary\"] = 3] = \"GroupSummary\";\n /** Defines CellType as CaptionSummary */\n CellType[CellType[\"CaptionSummary\"] = 4] = \"CaptionSummary\";\n /** Defines CellType as Filter */\n CellType[CellType[\"Filter\"] = 5] = \"Filter\";\n /** Defines CellType as Indent */\n CellType[CellType[\"Indent\"] = 6] = \"Indent\";\n /** Defines CellType as GroupCaption */\n CellType[CellType[\"GroupCaption\"] = 7] = \"GroupCaption\";\n /** Defines CellType as GroupCaptionEmpty */\n CellType[CellType[\"GroupCaptionEmpty\"] = 8] = \"GroupCaptionEmpty\";\n /** Defines CellType as Expand */\n CellType[CellType[\"Expand\"] = 9] = \"Expand\";\n /** Defines CellType as HeaderIndent */\n CellType[CellType[\"HeaderIndent\"] = 10] = \"HeaderIndent\";\n /** Defines CellType as StackedHeader */\n CellType[CellType[\"StackedHeader\"] = 11] = \"StackedHeader\";\n /** Defines CellType as DetailHeader */\n CellType[CellType[\"DetailHeader\"] = 12] = \"DetailHeader\";\n /** Defines CellType as DetailExpand */\n CellType[CellType[\"DetailExpand\"] = 13] = \"DetailExpand\";\n /** Defines CellType as CommandColumn */\n CellType[CellType[\"CommandColumn\"] = 14] = \"CommandColumn\";\n})(CellType || (CellType = {}));\n/**\n * Defines types of Render\n * @hidden\n */\nexport var RenderType;\n(function (RenderType) {\n /** Defines RenderType as Header */\n RenderType[RenderType[\"Header\"] = 0] = \"Header\";\n /** Defines RenderType as Content */\n RenderType[RenderType[\"Content\"] = 1] = \"Content\";\n /** Defines RenderType as Summary */\n RenderType[RenderType[\"Summary\"] = 2] = \"Summary\";\n})(RenderType || (RenderType = {}));\n/**\n * Defines Predefined toolbar items.\n * @hidden\n */\nexport var ToolbarItem;\n(function (ToolbarItem) {\n ToolbarItem[ToolbarItem[\"Add\"] = 0] = \"Add\";\n ToolbarItem[ToolbarItem[\"Edit\"] = 1] = \"Edit\";\n ToolbarItem[ToolbarItem[\"Update\"] = 2] = \"Update\";\n ToolbarItem[ToolbarItem[\"Delete\"] = 3] = \"Delete\";\n ToolbarItem[ToolbarItem[\"Cancel\"] = 4] = \"Cancel\";\n ToolbarItem[ToolbarItem[\"Print\"] = 5] = \"Print\";\n ToolbarItem[ToolbarItem[\"Search\"] = 6] = \"Search\";\n ToolbarItem[ToolbarItem[\"ColumnChooser\"] = 7] = \"ColumnChooser\";\n ToolbarItem[ToolbarItem[\"PdfExport\"] = 8] = \"PdfExport\";\n ToolbarItem[ToolbarItem[\"ExcelExport\"] = 9] = \"ExcelExport\";\n ToolbarItem[ToolbarItem[\"CsvExport\"] = 10] = \"CsvExport\";\n ToolbarItem[ToolbarItem[\"WordExport\"] = 11] = \"WordExport\";\n})(ToolbarItem || (ToolbarItem = {}));\n","/**\n * CellStyle class\n */\nvar CellStyle = /** @class */ (function () {\n function CellStyle() {\n this.numFmtId = 0;\n this.backColor = 'none';\n this.fontName = 'Calibri';\n this.fontSize = 14;\n this.fontColor = '#000000';\n this.italic = false;\n this.bold = false;\n this.underline = false;\n this.wrapText = false;\n this.hAlign = 'general';\n this.vAlign = 'bottom';\n this.indent = 0;\n this.numberFormat = 'GENERAL';\n this.type = 'datetime';\n this.borders = new Borders();\n this.isGlobalStyle = false;\n }\n return CellStyle;\n}());\nexport { CellStyle };\nvar Font = /** @class */ (function () {\n function Font() {\n this.sz = 14;\n this.name = 'Calibri';\n this.u = false;\n this.b = false;\n this.i = false;\n this.color = 'FF000000';\n }\n return Font;\n}());\nexport { Font };\nvar CellXfs = /** @class */ (function () {\n function CellXfs() {\n }\n return CellXfs;\n}());\nexport { CellXfs };\nvar Alignment = /** @class */ (function () {\n function Alignment() {\n }\n return Alignment;\n}());\nexport { Alignment };\nvar CellStyleXfs = /** @class */ (function () {\n function CellStyleXfs() {\n }\n return CellStyleXfs;\n}());\nexport { CellStyleXfs };\nvar CellStyles = /** @class */ (function () {\n function CellStyles() {\n this.name = 'Normal';\n this.xfId = 0;\n }\n return CellStyles;\n}());\nexport { CellStyles };\nvar NumFmt = /** @class */ (function () {\n function NumFmt(id, code) {\n this.numFmtId = id;\n this.formatCode = code;\n }\n return NumFmt;\n}());\nexport { NumFmt };\n/**\n * Border class\n */\nvar Border = /** @class */ (function () {\n function Border(mLine, mColor) {\n this.lineStyle = mLine;\n this.color = mColor;\n }\n return Border;\n}());\nexport { Border };\n/**\n * Border class\n */\nvar Borders = /** @class */ (function () {\n function Borders() {\n this.left = new Border('none', '#FFFFFF');\n this.right = new Border('none', '#FFFFFF');\n this.top = new Border('none', '#FFFFFF');\n this.bottom = new Border('none', '#FFFFFF');\n this.all = new Border('none', '#FFFFFF');\n }\n return Borders;\n}());\nexport { Borders };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * Worksheet class\n */\nvar Cell = /** @class */ (function () {\n function Cell() {\n }\n return Cell;\n}());\nexport { Cell };\n/**\n * Rows class\n */\nvar Cells = /** @class */ (function (_super) {\n __extends(Cells, _super);\n function Cells() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.add = function (cell) {\n var inserted = false;\n var count = 0;\n for (var _i = 0, _a = _this; _i < _a.length; _i++) {\n var c = _a[_i];\n if (c.index === cell.index) {\n _this[count] = cell;\n inserted = true;\n }\n count++;\n }\n if (!inserted) {\n _this.push(cell);\n }\n };\n return _this;\n }\n return Cells;\n}(Array));\nexport { Cells };\n","/**\n * Column class\n */\nvar Column = /** @class */ (function () {\n function Column() {\n }\n return Column;\n}());\nexport { Column };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * Worksheet class\n */\nvar Row = /** @class */ (function () {\n function Row() {\n }\n return Row;\n}());\nexport { Row };\n/**\n * Rows class\n */\nvar Rows = /** @class */ (function (_super) {\n __extends(Rows, _super);\n function Rows() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.add = function (row) {\n var inserted = false;\n var count = 0;\n for (var _i = 0, _a = _this; _i < _a.length; _i++) {\n var r = _a[_i];\n if (r.index === row.index) {\n _this[count] = row;\n inserted = true;\n }\n count++;\n }\n if (!inserted) {\n _this.push(row);\n }\n };\n return _this;\n }\n return Rows;\n}(Array));\nexport { Rows };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * Worksheets class\n */\nvar Worksheets = /** @class */ (function (_super) {\n __extends(Worksheets, _super);\n function Worksheets() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return Worksheets;\n}(Array));\nexport { Worksheets };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * Worksheet class\n */\nvar Worksheet = /** @class */ (function () {\n function Worksheet() {\n this.isSummaryRowBelow = true;\n }\n return Worksheet;\n}());\nexport { Worksheet };\nvar HyperLink = /** @class */ (function () {\n function HyperLink() {\n }\n return HyperLink;\n}());\nexport { HyperLink };\nvar Grouping = /** @class */ (function () {\n function Grouping() {\n }\n return Grouping;\n}());\nexport { Grouping };\nvar FreezePane = /** @class */ (function () {\n function FreezePane() {\n }\n return FreezePane;\n}());\nexport { FreezePane };\nvar MergeCell = /** @class */ (function () {\n function MergeCell() {\n }\n return MergeCell;\n}());\nexport { MergeCell };\n/**\n * MergeCells class\n */\nvar MergeCells = /** @class */ (function (_super) {\n __extends(MergeCells, _super);\n function MergeCells() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.add = function (mergeCell) {\n var inserted = false;\n var count = 0;\n for (var _i = 0, _a = _this; _i < _a.length; _i++) {\n var mCell = _a[_i];\n if (MergeCells.isIntersecting(mCell, mergeCell)) {\n var intersectingCell = new MergeCell();\n intersectingCell.x = Math.min(mCell.x, mergeCell.x);\n intersectingCell.y = Math.min(mCell.Y, mergeCell.y);\n intersectingCell.width = Math.max(mCell.Width + mCell.X, mergeCell.width + mergeCell.x);\n intersectingCell.height = Math.max(mCell.Height + mCell.Y, mergeCell.height + mergeCell.y);\n intersectingCell.ref = (_this[count].ref.split(':')[0]) + ':' + (mergeCell.ref.split(':')[1]);\n _this[count] = intersectingCell;\n mergeCell = intersectingCell;\n inserted = true;\n }\n count++;\n }\n if (!inserted) {\n _this.push(mergeCell);\n }\n return mergeCell;\n };\n return _this;\n }\n MergeCells.isIntersecting = function (base, compare) {\n return (base.x <= compare.x + compare.width)\n && (compare.x <= base.x + base.width)\n && (base.y <= compare.y + compare.height)\n && (compare.y <= base.y + base.height);\n };\n return MergeCells;\n}(Array));\nexport { MergeCells };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Internationalization } from '@syncfusion/ej2-base';\n// import { IValueFormatter } from '../base/interface';\n/**\n * ValueFormatter class to globalize the value.\n * @hidden\n */\nvar ValueFormatter = /** @class */ (function () {\n function ValueFormatter(cultureName) {\n this.intl = new Internationalization();\n // if (!isNullOrUndefined(cultureName)) {\n // this.intl.culture = cultureName;\n // }\n }\n ValueFormatter.prototype.getFormatFunction = function (format) {\n if (format.type) {\n return this.intl.getDateFormat(format);\n }\n else {\n return this.intl.getNumberFormat(format);\n }\n };\n // public getParserFunction(format: NumberFormatOptions | DateFormatOptions): Function {\n // if ((format).type) {\n // return this.intl.getDateParser(format);\n // } else {\n // return this.intl.getNumberParser(format);\n // }\n // }\n // public fromView(value: string, format: Function, type?: string): string | number | Date {\n // if (type === 'date' || type === 'datetime' || type === 'number') {\n // return format(value);\n // } else {\n // return value;\n // }\n // }\n ValueFormatter.prototype.toView = function (value, format) {\n var result = value;\n if (!isNullOrUndefined(format) && !isNullOrUndefined(value)) {\n result = format(value);\n }\n return result;\n };\n // public setCulture(cultureName: string): void {\n // if (!isNullOrUndefined(cultureName)) {\n // setCulture(cultureName);\n // }\n // }\n /* tslint:disable:no-any */\n ValueFormatter.prototype.displayText = function (value, format) {\n return this.toView(value, this.getFormatFunction(format));\n };\n return ValueFormatter;\n}());\nexport { ValueFormatter };\n","import { ValueFormatter } from './value-formatter';\n/**\n * CsvHelper class\n */\nvar CsvHelper = /** @class */ (function () {\n /* tslint:disable:no-any */\n function CsvHelper(json) {\n this.csvStr = '';\n this.formatter = new ValueFormatter();\n this.isMicrosoftBrowser = !(!navigator.msSaveBlob);\n if (json.styles !== null && json.styles !== undefined) {\n this.globalStyles = new Map();\n for (var i = 0; i < json.styles.length; i++) {\n if (json.styles[i].name !== undefined && json.styles[i].numberFormat !== undefined) {\n this.globalStyles.set(json.styles[i].name, json.styles[i].numberFormat);\n }\n }\n }\n // Parses Worksheets data to DOM. \n if (json.worksheets !== null && json.worksheets !== undefined) {\n this.parseWorksheet(json.worksheets[0]);\n }\n //this.csvStr = 'a1,a2,a3\\nb1,b2,b3';\n }\n CsvHelper.prototype.parseWorksheet = function (json) {\n //Rows\n if (json.rows !== null && json.rows !== undefined) {\n this.parseRows(json.rows);\n }\n };\n /* tslint:disable:no-any */\n CsvHelper.prototype.parseRows = function (rows) {\n var count = 1;\n for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {\n var row = rows_1[_i];\n //Row index\n if (row.index !== null && row.index !== undefined) {\n while (count < row.index) {\n this.csvStr += '\\n';\n count++;\n }\n this.parseRow(row);\n }\n else {\n throw Error('Row index is missing.');\n }\n }\n };\n /* tslint:disable:no-any */\n CsvHelper.prototype.parseRow = function (row) {\n if (row.cells !== null && row.cells !== undefined) {\n var count = 1;\n for (var _i = 0, _a = row.cells; _i < _a.length; _i++) {\n var cell = _a[_i];\n //cell index\n if (cell.index !== null && cell.index !== undefined) {\n while (count < cell.index) {\n this.csvStr += ',';\n count++;\n }\n this.parseCell(cell);\n }\n else {\n throw Error('Cell index is missing.');\n }\n }\n }\n };\n /* tslint:disable:no-any */\n CsvHelper.prototype.parseCell = function (cell) {\n var csv = this.csvStr;\n if (cell.value !== undefined) {\n if (cell.value instanceof Date) {\n if (cell.style !== undefined && cell.style.numberFormat !== undefined) {\n /* tslint:disable-next-line:max-line-length */\n csv += this.parseCellValue(this.formatter.displayText(cell.value, { type: 'dateTime', skeleton: cell.style.numberFormat }));\n }\n else if (cell.style !== undefined && cell.style.name !== undefined && this.globalStyles.has(cell.style.name)) {\n /* tslint:disable-next-line:max-line-length */\n csv += this.parseCellValue(this.formatter.displayText(cell.value, { type: 'dateTime', skeleton: this.globalStyles.get(cell.style.name) }));\n }\n else {\n csv += cell.value;\n }\n }\n else if (typeof (cell.value) === 'boolean') {\n csv += cell.value ? 'TRUE' : 'FALSE';\n }\n else if (typeof (cell.value) === 'number') {\n if (cell.style !== undefined && cell.style.numberFormat !== undefined) {\n /* tslint:disable-next-line:max-line-length */\n csv += this.parseCellValue(this.formatter.displayText(cell.value, { format: cell.style.numberFormat }));\n }\n else if (cell.style !== undefined && cell.style.name !== undefined && this.globalStyles.has(cell.style.name)) {\n /* tslint:disable-next-line:max-line-length */\n csv += this.parseCellValue(this.formatter.displayText(cell.value, { format: this.globalStyles.get(cell.style.name) }));\n }\n else {\n csv += cell.value;\n }\n }\n else {\n csv += this.parseCellValue(cell.value);\n }\n }\n this.csvStr = csv;\n };\n CsvHelper.prototype.parseCellValue = function (value) {\n if (value.indexOf(',') !== -1) {\n return value = '\\\"' + value + '\\\"';\n }\n else {\n return value;\n }\n };\n /**\n * Saves the file with specified name and sends the file to client browser\n * @param {string} fileName- file name to save.\n * @param {Blob} buffer- the content to write in file\n */\n CsvHelper.prototype.save = function (fileName) {\n this.buffer = new Blob(['\\ufeff' + this.csvStr], { type: 'text/csv;charset=UTF-8' });\n if (this.isMicrosoftBrowser) {\n navigator.msSaveBlob(this.buffer, fileName);\n }\n else {\n var dataUrl_1 = window.URL.createObjectURL(this.buffer);\n var dwlLink = document.createElementNS('http://www.w3.org/1999/xhtml', 'a');\n dwlLink.download = fileName;\n dwlLink.href = dataUrl_1;\n var event_1 = document.createEvent('MouseEvent');\n event_1.initEvent('click', true, true);\n dwlLink.dispatchEvent(event_1);\n setTimeout(function () {\n window.URL.revokeObjectURL(dataUrl_1);\n });\n }\n };\n CsvHelper.prototype.saveAsBlob = function () {\n return new Blob(['\\ufeff' + this.csvStr], { type: 'text/csv;charset=UTF-8' });\n };\n return CsvHelper;\n}());\nexport { CsvHelper };\n","/**\n * BlobHelper class\n */\nvar BlobHelper = /** @class */ (function () {\n function BlobHelper() {\n /* tslint:disable:no-any */\n this.parts = [];\n }\n /* tslint:disable:no-any */\n BlobHelper.prototype.append = function (part) {\n this.parts.push(part);\n this.blob = undefined; // Invalidate the blob\n };\n BlobHelper.prototype.getBlob = function () {\n return new Blob(this.parts, { type: 'text/plain' });\n };\n return BlobHelper;\n}());\nexport { BlobHelper };\n","import { Worksheets } from './worksheets';\nimport { Worksheet, FreezePane, MergeCell, MergeCells, HyperLink, Grouping } from './worksheet';\nimport { CellStyle, Font, Borders, CellXfs, Alignment, NumFmt, CellStyleXfs, CellStyles } from './cell-style';\nimport { Column } from './column';\nimport { Row, Rows } from './row';\nimport { Cell, Cells } from './cell';\nimport { ZipArchive, ZipArchiveItem } from '@syncfusion/ej2-compression';\nimport { CsvHelper } from './csv-helper';\nimport { Internationalization, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { BlobHelper } from './blob-helper';\n/**\n * Workbook class\n */\nvar Workbook = /** @class */ (function () {\n /* tslint:disable:no-any */\n function Workbook(json, saveType, culture, currencyString) {\n this.sharedStringCount = 0;\n this.unitsProportions = [\n 96 / 75.0,\n 96 / 300.0,\n 96,\n 96 / 25.4,\n 96 / 2.54,\n 1,\n 96 / 72.0,\n 96 / 72.0 / 12700,\n ];\n /* tslint:disable:no-any */\n this.hyperlinkStyle = { fontColor: '#0000FF', underline: true };\n if (culture !== undefined) {\n this.culture = culture;\n }\n else {\n this.culture = 'en-US';\n }\n if (currencyString !== undefined) {\n this.currency = currencyString;\n }\n else {\n this.currency = 'USD';\n }\n this.intl = new Internationalization(this.culture);\n this.mSaveType = saveType;\n if (saveType === 'xlsx') {\n this.mArchive = new ZipArchive();\n this.sharedString = [];\n this.mFonts = [];\n this.mBorders = [];\n this.mStyles = [];\n this.printTitles = new Map();\n this.cellStyles = new Map();\n this.mNumFmt = new Map();\n this.mFills = new Map();\n this.mStyles.push(new CellStyle());\n this.mFonts.push(new Font());\n /* tslint:disable */\n this.cellStyles.set('Normal', new CellStyles());\n /* tslint:enable */\n this.mCellXfs = [];\n this.mCellStyleXfs = [];\n if (json.styles !== null && json.styles !== undefined) {\n /* tslint:disable-next-line:no-any */\n this.globalStyles = new Map();\n for (var i = 0; i < json.styles.length; i++) {\n if (json.styles[i].name !== undefined) {\n if (!this.cellStyles.has(json.styles[i].name)) {\n var cellStyle = new CellStyle();\n cellStyle.isGlobalStyle = true;\n this.parserCellStyle(json.styles[i], cellStyle, 'none');\n var cellStylesIn = new CellStyles();\n cellStylesIn.name = cellStyle.name;\n cellStylesIn.xfId = (cellStyle.index - 1);\n this.cellStyles.set(cellStylesIn.name, cellStylesIn);\n /* tslint:disable-next-line:no-any */\n var tFormat = {};\n if (json.styles[i].numberFormat !== undefined) {\n tFormat.format = json.styles[i].numberFormat;\n }\n if (json.styles[i].type !== undefined) {\n tFormat.type = json.styles[i].type;\n }\n else {\n tFormat.type = 'datetime';\n }\n if (tFormat.format !== undefined) {\n this.globalStyles.set(json.styles[i].name, tFormat);\n }\n }\n else {\n throw Error('Style name ' + json.styles[i].name + ' is already existed');\n }\n }\n }\n }\n // Parses Worksheets data to DOM. \n if (json.worksheets !== null && json.worksheets !== undefined) {\n this.parserWorksheets(json.worksheets);\n }\n else {\n throw Error('Worksheet is expected.');\n }\n // Parses the BuiltInProperties data to DOM. \n if (json.builtInProperties !== null && json.builtInProperties !== undefined) {\n this.builtInProperties = new BuiltInProperties();\n this.parserBuiltInProperties(json.builtInProperties, this.builtInProperties);\n }\n }\n else {\n this.csvHelper = new CsvHelper(json);\n }\n }\n /* tslint:disable:no-any */\n Workbook.prototype.parserBuiltInProperties = function (jsonBuiltInProperties, builtInProperties) {\n //Author\n if (jsonBuiltInProperties.author !== null && jsonBuiltInProperties.author !== undefined) {\n builtInProperties.author = jsonBuiltInProperties.author;\n }\n //Comments\n if (jsonBuiltInProperties.comments !== null && jsonBuiltInProperties.comments !== undefined) {\n builtInProperties.comments = jsonBuiltInProperties.comments;\n }\n //Category\n if (jsonBuiltInProperties.category !== null && jsonBuiltInProperties.category !== undefined) {\n builtInProperties.category = jsonBuiltInProperties.category;\n }\n //Company\n if (jsonBuiltInProperties.company !== null && jsonBuiltInProperties.company !== undefined) {\n builtInProperties.company = jsonBuiltInProperties.company;\n }\n //Manager\n if (jsonBuiltInProperties.manager !== null && jsonBuiltInProperties.manager !== undefined) {\n builtInProperties.manager = jsonBuiltInProperties.manager;\n }\n //Subject\n if (jsonBuiltInProperties.subject !== null && jsonBuiltInProperties.subject !== undefined) {\n builtInProperties.subject = jsonBuiltInProperties.subject;\n }\n //Title\n if (jsonBuiltInProperties.title !== null && jsonBuiltInProperties.title !== undefined) {\n builtInProperties.title = jsonBuiltInProperties.title;\n }\n //Creation date\n if (jsonBuiltInProperties.createdDate !== null && jsonBuiltInProperties.createdDate !== undefined) {\n builtInProperties.createdDate = jsonBuiltInProperties.createdDate;\n }\n //Modified date\n if (jsonBuiltInProperties.modifiedDate !== null && jsonBuiltInProperties.modifiedDate !== undefined) {\n builtInProperties.modifiedDate = jsonBuiltInProperties.modifiedDate;\n }\n //Tags\n if (jsonBuiltInProperties.tags !== null && jsonBuiltInProperties.tags !== undefined) {\n builtInProperties.tags = jsonBuiltInProperties.tags;\n }\n //Status\n if (jsonBuiltInProperties.status !== null && jsonBuiltInProperties.status !== undefined) {\n builtInProperties.status = jsonBuiltInProperties.status;\n }\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserWorksheets = function (json) {\n this.worksheets = new Worksheets();\n var length = json.length;\n for (var i = 0; i < length; i++) {\n var jsonSheet = json[i];\n var sheet = new Worksheet();\n this.mergeCells = new MergeCells();\n this.mergedCellsStyle = new Map();\n this.mHyperLinks = [];\n //Name\n if (jsonSheet.name !== null && jsonSheet.name !== undefined) {\n sheet.name = jsonSheet.name;\n }\n else {\n sheet.name = 'Sheet' + (i + 1).toString();\n }\n sheet.index = (i + 1);\n //Columns\n if (jsonSheet.columns !== null && jsonSheet.columns !== undefined) {\n this.parserColumns(jsonSheet.columns, sheet);\n }\n //Rows\n if (jsonSheet.rows !== null && jsonSheet.rows !== undefined) {\n this.parserRows(jsonSheet.rows, sheet);\n }\n //FreezePanes\n if (jsonSheet.freeze !== null && jsonSheet.freeze !== undefined) {\n this.parserFreezePanes(jsonSheet.freeze, sheet);\n }\n //Print Title\n if (jsonSheet.printTitle !== null && jsonSheet.printTitle !== undefined) {\n this.parserPrintTitle(jsonSheet.printTitle, sheet);\n }\n if (jsonSheet.pageSetup !== undefined) {\n if (jsonSheet.pageSetup.isSummaryRowBelow !== undefined) {\n sheet.isSummaryRowBelow = jsonSheet.pageSetup.isSummaryRowBelow;\n }\n }\n sheet.index = (i + 1);\n sheet.mergeCells = this.mergeCells;\n sheet.hyperLinks = this.mHyperLinks;\n this.worksheets.push(sheet);\n }\n };\n /* tslint:disable:no-any */\n Workbook.prototype.mergeOptions = function (fromJson, toJson) {\n /* tslint:disable:no-any */\n var result = {};\n this.applyProperties(fromJson, result);\n this.applyProperties(toJson, result);\n return result;\n };\n /* tslint:disable:no-any */\n Workbook.prototype.applyProperties = function (sourceJson, destJson) {\n var keys = Object.keys(sourceJson);\n for (var index = 0; index < keys.length; index++) {\n if (keys[index] !== 'name') {\n destJson[keys[index]] = sourceJson[keys[index]];\n }\n }\n };\n Workbook.prototype.getCellName = function (row, column) {\n return this.getColumnName(column) + row.toString();\n };\n Workbook.prototype.getColumnName = function (col) {\n col--;\n var strColumnName = '';\n do {\n var iCurrentDigit = col % 26;\n col = col / 26 - 1;\n strColumnName = String.fromCharCode(65 + iCurrentDigit) + strColumnName;\n } while (col >= 0);\n return strColumnName;\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserPrintTitle = function (json, sheet) {\n var printTitleName = '';\n var titleRowName;\n if (json.fromRow !== null && json.fromRow !== undefined) {\n var fromRow = json.fromRow;\n var toRow = void 0;\n if (json.toRow !== null && json.toRow !== undefined) {\n toRow = json.toRow;\n }\n else {\n toRow = json.fromRow;\n }\n titleRowName = '$' + fromRow + ':$' + toRow;\n }\n var titleColName;\n if (json.fromColumn !== null && json.fromColumn !== undefined) {\n var fromColumn = json.fromColumn;\n var toColumn = void 0;\n if (json.toColumn !== null && json.toColumn !== undefined) {\n toColumn = json.toColumn;\n }\n else {\n toColumn = json.fromColumn;\n }\n titleColName = '$' + this.getColumnName(fromColumn) + ':$' + this.getColumnName(toColumn);\n }\n if (titleRowName !== undefined) {\n printTitleName += (sheet.name + '!' + titleRowName);\n }\n if (titleColName !== undefined && titleRowName !== undefined) {\n printTitleName += ',' + (sheet.name + '!' + titleColName);\n }\n else if (titleColName !== undefined) {\n printTitleName += (sheet.name + '!' + titleColName);\n }\n if (printTitleName !== '') {\n this.printTitles.set(sheet.index - 1, printTitleName);\n }\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserFreezePanes = function (json, sheet) {\n sheet.freezePanes = new FreezePane();\n if (json.row !== null && json.row !== undefined) {\n sheet.freezePanes.row = json.row;\n }\n else {\n sheet.freezePanes.row = 0;\n }\n if (json.column !== null && json.column !== undefined) {\n sheet.freezePanes.column = json.column;\n }\n else {\n sheet.freezePanes.column = 0;\n }\n sheet.freezePanes.leftCell = this.getCellName(sheet.freezePanes.row + 1, sheet.freezePanes.column + 1);\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserColumns = function (json, sheet) {\n var columnsLength = json.length;\n sheet.columns = [];\n for (var column = 0; column < columnsLength; column++) {\n var col = new Column();\n if (json[column].index !== null && json[column].index !== undefined) {\n col.index = json[column].index;\n }\n else {\n throw Error('Column index is missing.');\n }\n if (json[column].width !== null && json[column].width !== undefined) {\n col.width = json[column].width;\n }\n sheet.columns.push(col);\n }\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserRows = function (json, sheet) {\n var rowsLength = json.length;\n sheet.rows = new Rows();\n var rowId = 0;\n for (var r = 0; r < rowsLength; r++) {\n var row = this.parserRow(json[r], rowId);\n rowId = row.index;\n sheet.rows.add(row);\n }\n this.insertMergedCellsStyle(sheet);\n };\n Workbook.prototype.insertMergedCellsStyle = function (sheet) {\n var _this = this;\n if (this.mergeCells.length > 0) {\n this.mergedCellsStyle.forEach(function (value, key) {\n var row = sheet.rows.filter(function (item) {\n return item.index === value.y;\n })[0];\n if (!isNullOrUndefined(row)) {\n var cell = row.cells.filter(function (item) {\n return item.index === value.x;\n })[0];\n if (!isNullOrUndefined(cell)) {\n cell.styleIndex = value.styleIndex;\n }\n else {\n var cells = row.cells.filter(function (item) {\n return item.index <= value.x;\n });\n var insertIndex = 0;\n if (cells.length > 0) {\n insertIndex = row.cells.indexOf(cells[cells.length - 1]) + 1;\n }\n row.cells.splice(insertIndex, 0, _this.createCell(value, key));\n }\n }\n else {\n var rows = sheet.rows.filter(function (item) {\n return item.index <= value.y;\n });\n var rowToInsert = new Row();\n rowToInsert.index = value.y;\n rowToInsert.cells = new Cells();\n rowToInsert.cells.add(_this.createCell(value, key));\n var insertIndex = 0;\n if (rows.length > 0) {\n insertIndex = sheet.rows.indexOf(rows[rows.length - 1]) + 1;\n }\n sheet.rows.splice(insertIndex, 0, rowToInsert);\n }\n });\n }\n };\n Workbook.prototype.createCell = function (value, key) {\n var cellToInsert = new Cell();\n cellToInsert.refName = key;\n cellToInsert.index = value.x;\n cellToInsert.cellStyle = new CellStyle();\n cellToInsert.styleIndex = value.styleIndex;\n return cellToInsert;\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserRow = function (json, rowIndex) {\n var row = new Row();\n //Row Height\n if (json.height !== null && json.height !== undefined) {\n row.height = json.height;\n }\n //Row index\n if (json.index !== null && json.index !== undefined) {\n row.index = json.index;\n }\n else {\n throw Error('Row index is missing.');\n }\n if (json.grouping !== null && json.grouping !== undefined) {\n this.parseGrouping(json.grouping, row);\n }\n this.parseCells(json.cells, row);\n return row;\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parseGrouping = function (json, row) {\n row.grouping = new Grouping();\n if (json.outlineLevel !== undefined) {\n row.grouping.outlineLevel = json.outlineLevel;\n }\n if (json.isCollapsed !== undefined) {\n row.grouping.isCollapsed = json.isCollapsed;\n }\n if (json.isHidden !== undefined) {\n row.grouping.isHidden = json.isHidden;\n }\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parseCells = function (json, row) {\n row.cells = new Cells();\n var cellsLength = json !== undefined ? json.length : 0;\n var spanMin = 1;\n var spanMax = 1;\n var curCellIndex = 0;\n for (var cellId = 0; cellId < cellsLength; cellId++) {\n /* tslint:disable:no-any */\n var jsonCell = json[cellId];\n var cell = new Cell();\n //cell index\n if (jsonCell.index !== null && jsonCell.index !== undefined) {\n cell.index = jsonCell.index;\n }\n else {\n throw Error('Cell index is missing.');\n }\n if (cell.index < spanMin) {\n spanMin = cell.index;\n }\n else if (cell.index > spanMax) {\n spanMax = cell.index;\n }\n //Update the Cell name\n cell.refName = this.getCellName(row.index, cell.index);\n //Row span\n if (jsonCell.rowSpan !== null && jsonCell.rowSpan !== undefined) {\n cell.rowSpan = jsonCell.rowSpan - 1;\n }\n else {\n cell.rowSpan = 0;\n }\n //Column span\n if (jsonCell.colSpan !== null && jsonCell.colSpan !== undefined) {\n cell.colSpan = jsonCell.colSpan - 1;\n }\n else {\n cell.colSpan = 0;\n }\n //Hyperlink\n if (jsonCell.hyperlink !== null && jsonCell.hyperlink !== undefined) {\n var hyperLink = new HyperLink();\n if (jsonCell.hyperlink.target !== undefined) {\n hyperLink.target = jsonCell.hyperlink.target;\n if (jsonCell.hyperlink.displayText !== undefined) {\n cell.value = jsonCell.hyperlink.displayText;\n }\n else {\n cell.value = jsonCell.hyperlink.target;\n }\n cell.type = this.getCellValueType(cell.value);\n hyperLink.ref = cell.refName;\n hyperLink.rId = (this.mHyperLinks.length + 1);\n this.mHyperLinks.push(hyperLink);\n cell.cellStyle = new CellStyle();\n /* tslint:disable-next-line:max-line-length */\n this.parserCellStyle((jsonCell.style !== undefined ? this.mergeOptions(jsonCell.style, this.hyperlinkStyle) : this.hyperlinkStyle), cell.cellStyle, 'string');\n cell.styleIndex = cell.cellStyle.index;\n }\n }\n //Cell value\n if (jsonCell.value !== null && jsonCell.value !== undefined) {\n cell.value = jsonCell.value;\n cell.type = this.getCellValueType(cell.value);\n }\n if (jsonCell.style !== null && jsonCell.style !== undefined && cell.styleIndex === undefined) {\n cell.cellStyle = new CellStyle();\n if (cell.value instanceof Date) {\n this.parserCellStyle(jsonCell.style, cell.cellStyle, cell.type, 14);\n }\n else {\n this.parserCellStyle(jsonCell.style, cell.cellStyle, cell.type);\n }\n cell.styleIndex = cell.cellStyle.index;\n }\n else if (cell.value instanceof Date) {\n cell.cellStyle = new CellStyle();\n this.parserCellStyle({}, cell.cellStyle, cell.type, 14);\n cell.styleIndex = cell.cellStyle.index;\n }\n this.parseCellType(cell);\n this.mergeCells = this.processMergeCells(cell, row.index, this.mergeCells);\n row.cells.add(cell);\n curCellIndex = (cell.index + 1);\n }\n row.spans = (spanMin) + ':' + (spanMax);\n };\n Workbook.prototype.applyGlobalStyle = function (json, cellStyle) {\n var index = 0;\n if (this.cellStyles.has(json.name)) {\n cellStyle.index = this.mStyles.filter(function (a) { return (a.name === json.name); })[0].index;\n cellStyle.name = json.name;\n }\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserCellStyle = function (json, cellStyle, cellType, defStyleIndex) {\n //name\n if (json.name !== null && json.name !== undefined) {\n if (cellStyle.isGlobalStyle) {\n cellStyle.name = json.name;\n }\n else {\n this.applyGlobalStyle(json, cellStyle);\n return;\n }\n }\n //background color\n if (json.backColor !== null && json.backColor !== undefined) {\n cellStyle.backColor = json.backColor;\n }\n //borders\n //leftBorder\n cellStyle.borders = new Borders();\n //AllBorder\n if (json.borders !== null && json.borders !== undefined) {\n this.parserBorder(json.borders, cellStyle.borders.all);\n }\n //leftborder\n if (json.leftBorder !== null && json.leftBorder !== undefined) {\n this.parserBorder(json.leftBorder, cellStyle.borders.left);\n }\n //rightBorder\n if (json.rightBorder !== null && json.rightBorder !== undefined) {\n this.parserBorder(json.rightBorder, cellStyle.borders.right);\n }\n //topBorder\n if (json.topBorder !== null && json.topBorder !== undefined) {\n this.parserBorder(json.topBorder, cellStyle.borders.top);\n }\n //bottomBorder\n if (json.bottomBorder !== null && json.bottomBorder !== undefined) {\n this.parserBorder(json.bottomBorder, cellStyle.borders.bottom);\n }\n //fontName\n if (json.fontName !== null && json.fontName !== undefined) {\n cellStyle.fontName = json.fontName;\n }\n //fontSize\n if (json.fontSize !== null && json.fontSize !== undefined) {\n cellStyle.fontSize = json.fontSize;\n }\n //fontColor\n if (json.fontColor !== null && json.fontColor !== undefined) {\n cellStyle.fontColor = json.fontColor;\n }\n //italic\n if (json.italic !== null && json.italic !== undefined) {\n cellStyle.italic = json.italic;\n }\n //bold\n if (json.bold !== null && json.bold !== undefined) {\n cellStyle.bold = json.bold;\n }\n //hAlign\n if (json.hAlign !== null && json.hAlign !== undefined) {\n cellStyle.hAlign = json.hAlign;\n }\n //indent\n if (json.indent !== null && json.indent !== undefined) {\n cellStyle.indent = json.indent;\n if (!(cellStyle.hAlign === 'left' || cellStyle.hAlign === 'right')) {\n cellStyle.hAlign = 'left';\n }\n }\n //vAlign\n if (json.vAlign !== null && json.vAlign !== undefined) {\n cellStyle.vAlign = json.vAlign;\n }\n //underline\n if (json.underline !== null && json.underline !== undefined) {\n cellStyle.underline = json.underline;\n }\n //wrapText\n if (json.wrapText !== null && json.wrapText !== undefined) {\n cellStyle.wrapText = json.wrapText;\n }\n //numberFormat\n if (json.numberFormat !== null && json.numberFormat !== undefined) {\n if (json.type !== null && json.type !== undefined) {\n cellStyle.numberFormat = this.getNumberFormat(json.numberFormat, json.type);\n }\n else {\n cellStyle.numberFormat = this.getNumberFormat(json.numberFormat, cellType);\n }\n }\n else if (defStyleIndex !== undefined) {\n cellStyle.numFmtId = 14;\n cellStyle.numberFormat = 'GENERAL';\n }\n else {\n cellStyle.numberFormat = 'GENERAL';\n }\n cellStyle.index = this.processCellStyle(cellStyle);\n };\n Workbook.prototype.switchNumberFormat = function (numberFormat, type) {\n var format = this.getNumberFormat(numberFormat, type);\n if (format !== numberFormat) {\n var numFmt = this.mNumFmt.get(numberFormat);\n if (numFmt !== undefined) {\n numFmt.formatCode = format;\n if (this.mNumFmt.has(format)) {\n for (var _i = 0, _a = this.mCellStyleXfs; _i < _a.length; _i++) {\n var cellStyleXfs = _a[_i];\n if (cellStyleXfs.numFmtId === numFmt.numFmtId) {\n cellStyleXfs.numFmtId = this.mNumFmt.get(format).numFmtId;\n }\n }\n for (var _b = 0, _c = this.mCellXfs; _b < _c.length; _b++) {\n var cellXfs = _c[_b];\n if (cellXfs.numFmtId === numFmt.numFmtId) {\n cellXfs.numFmtId = this.mNumFmt.get(format).numFmtId;\n }\n }\n }\n }\n }\n };\n Workbook.prototype.getNumberFormat = function (numberFormat, type) {\n var returnFormat;\n switch (type) {\n case 'number':\n try {\n returnFormat = this.intl.getNumberPattern({ format: numberFormat, currency: this.currency });\n }\n catch (error) {\n returnFormat = numberFormat;\n }\n break;\n case 'datetime':\n try {\n returnFormat = this.intl.getDatePattern({ skeleton: numberFormat, type: 'dateTime' }, true);\n }\n catch (error) {\n returnFormat = numberFormat;\n }\n break;\n case 'date':\n try {\n returnFormat = this.intl.getDatePattern({ skeleton: numberFormat, type: 'date' }, true);\n }\n catch (error) {\n returnFormat = numberFormat;\n }\n break;\n case 'time':\n try {\n returnFormat = this.intl.getDatePattern({ skeleton: numberFormat, type: 'time' }, true);\n }\n catch (error) {\n returnFormat = numberFormat;\n }\n break;\n default:\n returnFormat = numberFormat;\n break;\n }\n return returnFormat;\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserBorder = function (json, border) {\n if (json.color !== null && json.color !== undefined) {\n border.color = json.color;\n }\n else {\n border.color = '#000000';\n }\n if (json.lineStyle !== null && json.lineStyle !== undefined) {\n border.lineStyle = json.lineStyle;\n }\n else {\n border.lineStyle = 'thin';\n }\n };\n Workbook.prototype.processCellStyle = function (style) {\n if (style.isGlobalStyle) {\n this.processNumFormatId(style);\n this.mStyles.push(style);\n return this.mStyles.length;\n }\n else {\n var compareResult = this.compareStyle(style);\n if (!compareResult.result) {\n this.processNumFormatId(style);\n this.mStyles.push(style);\n return this.mStyles.length;\n }\n else {\n //Return the index of the already existing style.\n return compareResult.index;\n }\n }\n };\n Workbook.prototype.processNumFormatId = function (style) {\n if (style.numberFormat !== 'GENERAL' && !this.mNumFmt.has(style.numberFormat)) {\n var id = this.mNumFmt.size + 164;\n this.mNumFmt.set(style.numberFormat, new NumFmt(id, style.numberFormat));\n }\n };\n Workbook.prototype.isNewFont = function (toCompareStyle) {\n var result = false;\n var index = 0;\n for (var _i = 0, _a = this.mFonts; _i < _a.length; _i++) {\n var font = _a[_i];\n index++;\n var fontColor = undefined;\n if (toCompareStyle.fontColor !== undefined) {\n fontColor = ('FF' + toCompareStyle.fontColor.replace('#', ''));\n }\n result = font.color === fontColor &&\n font.b === toCompareStyle.bold &&\n font.i === toCompareStyle.italic &&\n font.u === toCompareStyle.underline &&\n font.name === toCompareStyle.fontName &&\n font.sz === toCompareStyle.fontSize;\n if (result) {\n break;\n }\n }\n index = index - 1;\n return { index: index, result: result };\n };\n Workbook.prototype.isNewBorder = function (toCompareStyle) {\n var bStyle = new CellStyle();\n if (this.isAllBorder(toCompareStyle.borders)) {\n return (bStyle.borders.all.color === toCompareStyle.borders.all.color &&\n bStyle.borders.all.lineStyle === toCompareStyle.borders.all.lineStyle);\n }\n else {\n return (bStyle.borders.left.color === toCompareStyle.borders.left.color &&\n bStyle.borders.left.lineStyle === toCompareStyle.borders.left.lineStyle &&\n bStyle.borders.right.color === toCompareStyle.borders.right.color &&\n bStyle.borders.right.lineStyle === toCompareStyle.borders.right.lineStyle &&\n bStyle.borders.top.color === toCompareStyle.borders.top.color &&\n bStyle.borders.top.lineStyle === toCompareStyle.borders.top.lineStyle &&\n bStyle.borders.bottom.color === toCompareStyle.borders.bottom.color &&\n bStyle.borders.bottom.lineStyle === toCompareStyle.borders.bottom.lineStyle);\n }\n };\n Workbook.prototype.isAllBorder = function (toCompareBorder) {\n var allBorderStyle = new CellStyle();\n return allBorderStyle.borders.all.color !== toCompareBorder.all.color &&\n allBorderStyle.borders.all.lineStyle !== toCompareBorder.all.lineStyle;\n };\n Workbook.prototype.compareStyle = function (toCompareStyle) {\n var result = true;\n var index = 0;\n var globalStyleIndex = 0;\n for (var _i = 0, _a = this.mStyles; _i < _a.length; _i++) {\n var baseStyle = _a[_i];\n result = baseStyle.isGlobalStyle ? false : (baseStyle.backColor === toCompareStyle.backColor &&\n baseStyle.bold === toCompareStyle.bold &&\n baseStyle.numFmtId === toCompareStyle.numFmtId &&\n baseStyle.numberFormat === toCompareStyle.numberFormat &&\n baseStyle.type === toCompareStyle.type &&\n baseStyle.fontColor === toCompareStyle.fontColor &&\n baseStyle.fontName === toCompareStyle.fontName &&\n baseStyle.fontSize === toCompareStyle.fontSize &&\n baseStyle.hAlign === toCompareStyle.hAlign &&\n baseStyle.italic === toCompareStyle.italic &&\n baseStyle.underline === toCompareStyle.underline &&\n baseStyle.vAlign === toCompareStyle.vAlign &&\n baseStyle.indent === toCompareStyle.indent &&\n baseStyle.wrapText === toCompareStyle.wrapText &&\n (baseStyle.borders.all.color === toCompareStyle.borders.all.color &&\n baseStyle.borders.all.lineStyle === toCompareStyle.borders.all.lineStyle) &&\n (baseStyle.borders.left.color === toCompareStyle.borders.left.color &&\n baseStyle.borders.left.lineStyle === toCompareStyle.borders.left.lineStyle &&\n baseStyle.borders.right.color === toCompareStyle.borders.right.color &&\n baseStyle.borders.right.lineStyle === toCompareStyle.borders.right.lineStyle &&\n baseStyle.borders.top.color === toCompareStyle.borders.top.color &&\n baseStyle.borders.top.lineStyle === toCompareStyle.borders.top.lineStyle &&\n baseStyle.borders.bottom.color === toCompareStyle.borders.bottom.color &&\n baseStyle.borders.bottom.lineStyle === toCompareStyle.borders.bottom.lineStyle));\n if (result) {\n index = baseStyle.index;\n break;\n }\n }\n return { index: index, result: result };\n };\n Workbook.prototype.contains = function (array, item) {\n var index = array.indexOf(item);\n return index > -1 && index < array.length;\n };\n Workbook.prototype.getCellValueType = function (value) {\n if (value instanceof Date) {\n return 'datetime';\n }\n else if (typeof (value) === 'boolean') {\n return 'boolean';\n }\n else if (typeof (value) === 'number') {\n return 'number';\n }\n else {\n return 'string';\n }\n };\n Workbook.prototype.parseCellType = function (cell) {\n var type = cell.type;\n var saveType;\n var value = cell.value;\n switch (type) {\n case 'datetime':\n value = this.toOADate(value);\n if (cell.cellStyle !== undefined && cell.cellStyle.name !== undefined) {\n if (this.globalStyles.has(cell.cellStyle.name)) {\n var value_1 = this.globalStyles.get(cell.cellStyle.name);\n this.switchNumberFormat(value_1.format, value_1.type);\n }\n }\n saveType = 'n';\n break;\n //TODO: Update the number format index and style\n case 'boolean':\n value = value ? 1 : 0;\n saveType = 'b';\n break;\n case 'number':\n saveType = 'n';\n if (cell.cellStyle !== undefined && cell.cellStyle.name !== undefined) {\n if (this.globalStyles.has(cell.cellStyle.name)) {\n this.switchNumberFormat(this.globalStyles.get(cell.cellStyle.name).format, 'number');\n }\n }\n break;\n case 'string':\n this.sharedStringCount++;\n saveType = 's';\n if (!this.contains(this.sharedString, value)) {\n this.sharedString.push(value);\n }\n value = this.sharedString.indexOf(value);\n break;\n default:\n break;\n }\n cell.saveType = saveType;\n cell.value = value;\n };\n Workbook.prototype.saveAsBlob = function (blobSaveType) {\n var _this = this;\n switch (blobSaveType) {\n case 'text/csv':\n return new Promise(function (resolve, reject) {\n var obj = {};\n obj.blobData = _this.csvHelper.saveAsBlob();\n resolve(obj);\n });\n default:\n return new Promise(function (resolve, reject) {\n _this.saveInternal();\n _this.mArchive.saveAsBlob().then(function (blob) {\n var obj = {};\n obj.blobData = new Blob([blob], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });\n resolve(obj);\n });\n });\n }\n };\n Workbook.prototype.save = function (fileName, proxyUrl) {\n var _this = this;\n if (fileName === null || fileName === undefined || fileName === '') {\n throw new Error('Argument Null Exception: fileName cannot be null or empty');\n }\n var xlsxMatch = fileName.match('.xlsx$');\n var csvMatch = fileName.match('.csv$');\n if (xlsxMatch !== null && xlsxMatch[0] === ('.' + this.mSaveType)) {\n this.saveInternal();\n this.mArchive.save(fileName).then(function () {\n _this.mArchive.destroy();\n });\n }\n else if (csvMatch !== null && csvMatch[0] === ('.' + this.mSaveType)) {\n this.csvHelper.save(fileName);\n }\n else {\n throw Error('Save type and file extension is different.');\n }\n };\n Workbook.prototype.saveInternal = function () {\n this.saveWorkbook();\n this.saveWorksheets();\n this.saveSharedString();\n this.saveStyles();\n this.saveApp(this.builtInProperties);\n this.saveCore(this.builtInProperties);\n this.saveContentType();\n this.saveTopLevelRelation();\n this.saveWorkbookRelation();\n };\n Workbook.prototype.saveWorkbook = function () {\n /* tslint:disable-next-line:max-line-length */\n var workbookTemp = '';\n var sheets = '';\n var length = this.worksheets.length;\n for (var i = 0; i < length; i++) {\n /* tslint:disable-next-line:max-line-length */\n sheets += '';\n }\n sheets += '';\n workbookTemp += sheets;\n if (this.printTitles.size > 0) {\n var printTitle_1 = '';\n this.printTitles.forEach(function (value, key) {\n printTitle_1 += '' + value + '';\n });\n printTitle_1 += '';\n workbookTemp += printTitle_1;\n }\n this.addToArchive(workbookTemp + '', 'xl/workbook.xml');\n };\n Workbook.prototype.saveWorksheets = function () {\n var length = this.worksheets.length;\n for (var i = 0; i < length; i++) {\n this.saveWorksheet(this.worksheets[i], i);\n }\n };\n Workbook.prototype.saveWorksheet = function (sheet, index) {\n var sheetBlob = new BlobHelper();\n /* tslint:disable-next-line:max-line-length */\n var sheetString = '';\n if (!sheet.isSummaryRowBelow) {\n sheetString += ('' + '' + '' + '');\n }\n else {\n sheetString += ('');\n }\n if (sheet.freezePanes !== undefined) {\n sheetString += (this.saveFreezePanes(sheet));\n }\n if (sheet.columns !== undefined) {\n var colString = '';\n for (var _i = 0, _a = sheet.columns; _i < _a.length; _i++) {\n var column = _a[_i];\n /* tslint:disable-next-line:max-line-length */\n if (column.width !== undefined) {\n colString += '';\n }\n else {\n colString += '';\n }\n }\n sheetString += (colString + '');\n }\n sheetString += ('');\n sheetBlob.append(sheetString);\n sheetString = '';\n if (sheet.rows !== undefined) {\n for (var _b = 0, _c = sheet.rows; _b < _c.length; _b++) {\n var row = _c[_b];\n var rowString = '');\n for (var _d = 0, _e = row.cells; _d < _e.length; _d++) {\n var cell = _e[_d];\n if (cell !== undefined && (cell.value !== undefined || cell.cellStyle !== undefined)) {\n rowString += ('');\n if (cell.value !== undefined) {\n rowString += ('' + cell.value + '');\n }\n else {\n rowString += ('');\n }\n }\n }\n rowString += ('');\n sheetBlob.append(rowString);\n }\n }\n sheetString += ('');\n if (sheet.mergeCells.length > 0) {\n sheetString += ('');\n for (var _f = 0, _g = sheet.mergeCells; _f < _g.length; _f++) {\n var mCell = _g[_f];\n sheetString += ('');\n }\n sheetString += ('');\n }\n if (sheet.hyperLinks.length > 0) {\n sheetString += ('');\n for (var _h = 0, _j = sheet.hyperLinks; _h < _j.length; _h++) {\n var hLink = _j[_h];\n sheetString += ('');\n }\n sheetString += ('');\n this.addToArchive(this.saveSheetRelations(sheet), ('xl/worksheets/_rels/sheet' + sheet.index + '.xml.rels'));\n }\n /* tslint:disable-next-line:max-line-length */\n sheetString += ('');\n sheetBlob.append(sheetString);\n this.addToArchive(sheetBlob.getBlob(), 'xl/worksheets' + '/sheet' + (index + 1) + '.xml');\n };\n Workbook.prototype.pixelsToColumnWidth = function (pixels) {\n var dDigitWidth = 7;\n var val = (pixels > dDigitWidth + 5) ?\n this.trunc((pixels - 5) / dDigitWidth * 100 + 0.5) / 100 :\n pixels / (dDigitWidth + 5);\n return (val > 1) ?\n ((val * dDigitWidth + 5) / dDigitWidth * 256.0) / 256.0 :\n (val * (dDigitWidth + 5) / dDigitWidth * 256.0) / 256.0;\n };\n Workbook.prototype.trunc = function (x) {\n var n = x - x % 1;\n return n === 0 && (x < 0 || (x === 0 && (1 / x !== 1 / 0))) ? -0 : n;\n };\n Workbook.prototype.pixelsToRowHeight = function (pixels) {\n return (pixels * this.unitsProportions[5] / this.unitsProportions[6]);\n };\n Workbook.prototype.saveSheetRelations = function (sheet) {\n /* tslint:disable-next-line:max-line-length */\n var relStr = '';\n for (var _i = 0, _a = sheet.hyperLinks; _i < _a.length; _i++) {\n var hLink = _a[_i];\n /* tslint:disable-next-line:max-line-length */\n relStr += '';\n }\n relStr += '';\n return relStr;\n };\n Workbook.prototype.saveFreezePanes = function (sheet) {\n var paneString = ' 0) {\n /* tslint:disable-next-line:max-line-length */\n var sstStart = '';\n var si = '';\n for (var i = 0; i < length; i++) {\n si += '';\n si += this.processString(this.sharedString[i]);\n si += '';\n }\n si += '';\n this.addToArchive(sstStart + si, 'xl/sharedStrings.xml');\n }\n };\n Workbook.prototype.processString = function (value) {\n if (value.indexOf('&') !== -1) {\n value = value.replace(/&/g, '&');\n }\n if (value.indexOf('<') !== -1) {\n value = value.replace(/') !== -1) {\n value = value.replace(/>/g, '>');\n }\n return value;\n };\n Workbook.prototype.saveStyles = function () {\n this.updateCellXfsStyleXfs();\n /* tslint:disable-next-line:max-line-length */\n var styleTemp = '';\n styleTemp += this.saveNumberFormats();\n styleTemp += this.saveFonts();\n styleTemp += this.saveFills();\n styleTemp += this.saveBorders();\n styleTemp += this.saveCellStyleXfs();\n styleTemp += this.saveCellXfs();\n styleTemp += this.saveCellStyles();\n this.addToArchive(styleTemp + '', 'xl/styles.xml');\n };\n Workbook.prototype.updateCellXfsStyleXfs = function () {\n for (var _i = 0, _a = this.mStyles; _i < _a.length; _i++) {\n var style = _a[_i];\n var cellXfs = undefined;\n if (style.isGlobalStyle) {\n cellXfs = new CellStyleXfs();\n cellXfs.xfId = (style.index - 1);\n }\n else {\n cellXfs = new CellXfs();\n cellXfs.xfId = 0;\n }\n //Add font\n var compareFontResult = this.isNewFont(style);\n if (!compareFontResult.result) {\n var font = new Font();\n font.b = style.bold;\n font.i = style.italic;\n font.name = style.fontName;\n font.sz = style.fontSize;\n font.u = style.underline;\n font.color = ('FF' + style.fontColor.replace('#', ''));\n this.mFonts.push(font);\n cellXfs.fontId = this.mFonts.length - 1;\n }\n else {\n cellXfs.fontId = compareFontResult.index;\n }\n //Add fill\n if (style.backColor !== 'none') {\n var backColor = 'FF' + style.backColor.replace('#', '');\n if (this.mFills.has(backColor)) {\n var fillId = this.mFills.get(backColor);\n cellXfs.fillId = fillId;\n }\n else {\n var fillId = this.mFills.size + 2;\n this.mFills.set(backColor, fillId);\n cellXfs.fillId = (fillId);\n }\n }\n else {\n cellXfs.fillId = 0;\n }\n //Add border \n if (!this.isNewBorder(style)) {\n this.mBorders.push(style.borders);\n cellXfs.borderId = this.mBorders.length;\n }\n else {\n cellXfs.borderId = 0;\n }\n //Add Number Format \n if (style.numberFormat !== 'GENERAL') {\n if (this.mNumFmt.has(style.numberFormat)) {\n var numFmt = this.mNumFmt.get(style.numberFormat);\n cellXfs.numFmtId = numFmt.numFmtId;\n }\n else {\n var id = this.mNumFmt.size + 164;\n this.mNumFmt.set(style.numberFormat, new NumFmt(id, style.numberFormat));\n cellXfs.numFmtId = id;\n }\n }\n else {\n if (style.numberFormat === 'GENERAL' && style.numFmtId === 14) {\n cellXfs.numFmtId = 14;\n }\n else {\n cellXfs.numFmtId = 0;\n }\n }\n //Add alignment \n if (!style.isGlobalStyle) {\n cellXfs.applyAlignment = 1;\n }\n cellXfs.alignment = new Alignment();\n cellXfs.alignment.indent = style.indent;\n cellXfs.alignment.horizontal = style.hAlign;\n cellXfs.alignment.vertical = style.vAlign;\n cellXfs.alignment.wrapText = style.wrapText ? 1 : 0;\n if (style.isGlobalStyle) {\n this.mCellStyleXfs.push(cellXfs);\n this.mCellXfs.push(cellXfs);\n }\n else {\n //Add cellxfs\n this.mCellXfs.push(cellXfs);\n }\n }\n };\n Workbook.prototype.saveNumberFormats = function () {\n if (this.mNumFmt.size >= 1) {\n var numFmtStyle_1 = '';\n this.mNumFmt.forEach(function (value, key) {\n numFmtStyle_1 += '';\n });\n return (numFmtStyle_1 += '');\n }\n else {\n return '';\n }\n };\n Workbook.prototype.saveFonts = function () {\n /* tslint:disable-next-line:max-line-length */\n var fontStyle = '';\n if (this.mFonts.length >= 1) {\n for (var _i = 0, _a = this.mFonts; _i < _a.length; _i++) {\n var font = _a[_i];\n fontStyle += '';\n if (font.b) {\n fontStyle += '';\n }\n if (font.i) {\n fontStyle += '';\n }\n if (font.u) {\n fontStyle += '';\n }\n fontStyle += '';\n fontStyle += '';\n fontStyle += '';\n }\n }\n return fontStyle + '';\n };\n Workbook.prototype.saveFills = function () {\n /* tslint:disable-next-line:max-line-length */\n var fillsStyle = '';\n if (this.mFills.size >= 1) {\n this.mFills.forEach(function (value, key) {\n /* tslint:disable-next-line:max-line-length */\n fillsStyle += '';\n });\n }\n return fillsStyle + '';\n };\n Workbook.prototype.saveBorders = function () {\n /* tslint:disable-next-line:max-line-length */\n var bordersStyle = '';\n if (this.mBorders.length >= 1) {\n for (var _i = 0, _a = this.mBorders; _i < _a.length; _i++) {\n var borders = _a[_i];\n if (this.isAllBorder(borders)) {\n var color = borders.all.color.replace('#', '');\n var lineStyle = borders.all.lineStyle;\n /* tslint:disable-next-line:max-line-length */\n bordersStyle += '';\n }\n else {\n /* tslint:disable-next-line:max-line-length */\n bordersStyle += '';\n }\n }\n }\n return bordersStyle + '';\n };\n Workbook.prototype.saveCellStyles = function () {\n var _this = this;\n var cellStyleString = '';\n this.cellStyles.forEach(function (value, key) {\n cellStyleString += '';\n if (this.mCellStyleXfs.length >= 1) {\n for (var _i = 0, _a = this.mCellStyleXfs; _i < _a.length; _i++) {\n var cellStyleXf = _a[_i];\n /* tslint:disable-next-line:max-line-length */\n cellXfsStyle += '';\n }\n else {\n cellXfsStyle += ' />';\n }\n }\n }\n return cellXfsStyle + '';\n };\n Workbook.prototype.saveCellXfs = function () {\n /* tslint:disable-next-line:max-line-length */\n var cellXfsStyle = '';\n if (this.mCellXfs.length >= 1) {\n for (var _i = 0, _a = this.mCellXfs; _i < _a.length; _i++) {\n var cellXf = _a[_i];\n /* tslint:disable-next-line:max-line-length */\n cellXfsStyle += '';\n }\n }\n return cellXfsStyle + '';\n };\n Workbook.prototype.saveAlignment = function (cellXf) {\n var alignString = '';\n return alignString;\n };\n Workbook.prototype.saveApp = function (builtInProperties) {\n /* tslint:disable-next-line:max-line-length */\n var appString = 'Essential XlsIO';\n if (builtInProperties !== undefined) {\n if (builtInProperties.manager !== undefined) {\n appString += '' + builtInProperties.manager + '';\n }\n if (builtInProperties.company !== undefined) {\n appString += '' + builtInProperties.company + '';\n }\n }\n this.addToArchive((appString + ''), 'docProps/app.xml');\n };\n Workbook.prototype.saveCore = function (builtInProperties) {\n var createdDate = new Date();\n /* tslint:disable-next-line:max-line-length */\n var coreString = '';\n if (this.builtInProperties !== undefined) {\n if (builtInProperties.author !== undefined) {\n coreString += '' + builtInProperties.author + '';\n }\n if (builtInProperties.subject !== undefined) {\n coreString += '' + builtInProperties.subject + '';\n }\n if (builtInProperties.category !== undefined) {\n coreString += '' + builtInProperties.category + '';\n }\n if (builtInProperties.comments !== undefined) {\n coreString += '' + builtInProperties.comments + '';\n }\n if (builtInProperties.title !== undefined) {\n coreString += '' + builtInProperties.title + '';\n }\n if (builtInProperties.tags !== undefined) {\n coreString += '' + builtInProperties.tags + '';\n }\n if (builtInProperties.status !== undefined) {\n coreString += '' + builtInProperties.status + '';\n }\n if (builtInProperties.createdDate !== undefined) {\n /* tslint:disable-next-line:max-line-length */\n coreString += '' + builtInProperties.createdDate.toISOString() + '';\n }\n else {\n coreString += '' + createdDate.toISOString() + '';\n }\n if (builtInProperties.modifiedDate !== undefined) {\n /* tslint:disable-next-line:max-line-length */\n coreString += '' + builtInProperties.modifiedDate.toISOString() + '';\n }\n else {\n coreString += '' + createdDate.toISOString() + '';\n }\n }\n else {\n coreString += '' + createdDate.toISOString() + '';\n coreString += '' + createdDate.toISOString() + '';\n }\n /* tslint:disable-next-line:max-line-length */\n coreString += '';\n this.addToArchive(coreString, 'docProps/core.xml');\n };\n Workbook.prototype.saveTopLevelRelation = function () {\n /* tslint:disable-next-line:max-line-length */\n var topRelation = '';\n this.addToArchive(topRelation, '_rels/.rels');\n };\n Workbook.prototype.saveWorkbookRelation = function () {\n /* tslint:disable-next-line:max-line-length */\n var wbRelation = '';\n var length = this.worksheets.length;\n var count = 0;\n for (var i = 0; i < length; i++, count++) {\n /* tslint:disable-next-line:max-line-length */\n wbRelation += '';\n }\n /* tslint:disable-next-line:max-line-length */\n wbRelation += '';\n if (this.sharedStringCount > 0) {\n /* tslint:disable-next-line:max-line-length */\n wbRelation += '';\n }\n this.addToArchive((wbRelation + ''), 'xl/_rels/workbook.xml.rels');\n };\n Workbook.prototype.saveContentType = function () {\n /* tslint:disable-next-line:max-line-length */\n var contentTypeString = '';\n var sheetsOverride = '';\n var length = this.worksheets.length;\n for (var i = 0; i < length; i++) {\n /* tslint:disable-next-line:max-line-length */\n sheetsOverride += '';\n }\n if (this.sharedStringCount > 0) {\n /* tslint:disable-next-line:max-line-length */\n contentTypeString += '';\n }\n this.addToArchive((contentTypeString + sheetsOverride + ''), '[Content_Types].xml');\n };\n Workbook.prototype.addToArchive = function (xmlString, itemName) {\n if (typeof (xmlString) === 'string') {\n var blob = new Blob([xmlString], { type: 'text/plain' });\n var archiveItem = new ZipArchiveItem(blob, itemName);\n this.mArchive.addItem(archiveItem);\n }\n else {\n var archiveItem = new ZipArchiveItem(xmlString, itemName);\n this.mArchive.addItem(archiveItem);\n }\n };\n Workbook.prototype.processMergeCells = function (cell, rowIndex, mergeCells) {\n if (cell.rowSpan !== 0 || cell.colSpan !== 0) {\n var mCell = new MergeCell();\n mCell.x = cell.index;\n mCell.width = cell.colSpan;\n mCell.y = rowIndex;\n mCell.height = cell.rowSpan;\n var startCell = this.getCellName(mCell.y, mCell.x);\n var endCell = this.getCellName(rowIndex + mCell.height, cell.index + mCell.width);\n mCell.ref = startCell + ':' + endCell;\n var mergedCell = mergeCells.add(mCell);\n var start = { x: mCell.x, y: mCell.y };\n var end = {\n x: (cell.index + mCell.width), y: (rowIndex + mCell.height)\n };\n this.updatedMergedCellStyles(start, end, cell);\n }\n return mergeCells;\n };\n Workbook.prototype.updatedMergedCellStyles = function (sCell, eCell, cell) {\n for (var x = sCell.x; x <= eCell.x; x++) {\n for (var y = sCell.y; y <= eCell.y; y++) {\n this.mergedCellsStyle.set(this.getCellName(y, x), { x: x, y: y, styleIndex: cell.styleIndex });\n }\n }\n };\n /**\n * Returns the tick count corresponding to the given year, month, and day.\n * @param year number value of year\n * @param month number value of month\n * @param day number value of day\n */\n Workbook.prototype.dateToTicks = function (year, month, day) {\n var ticksPerDay = 10000 * 1000 * 60 * 60 * 24;\n var daysToMonth365 = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365];\n var daysToMonth366 = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366];\n if (year >= 1 && year <= 9999 && month >= 1 && month <= 12) {\n var days = this.isLeapYear(year) ? daysToMonth366 : daysToMonth365;\n var y = year - 1;\n var n = y * 365 + ((y / 4) | 0) - ((y / 100) | 0) + ((y / 400) | 0) + days[month - 1] + day - 1;\n return n * ticksPerDay;\n }\n throw new Error('Not a valid date');\n };\n /**\n * Return the tick count corresponding to the given hour, minute, second.\n * @param hour number value of hour\n * @param minute number value if minute\n * @param second number value of second\n */\n Workbook.prototype.timeToTicks = function (hour, minute, second) {\n if (hour >= 0 && hour < 24 && minute >= 0 && minute < 60 && second >= 0 && second < 60) {\n var totalSeconds = hour * 3600 + minute * 60 + second;\n return totalSeconds * 10000 * 1000;\n }\n throw new Error('Not valid time');\n };\n /**\n * Checks if given year is a leap year.\n * @param year Year value.\n */\n Workbook.prototype.isLeapYear = function (year) {\n return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n };\n /**\n * Converts `DateTime` to the equivalent OLE Automation date.\n */\n Workbook.prototype.toOADate = function (date) {\n var ticks = 0;\n /* tslint:disable-next-line:max-line-length */\n ticks = this.dateToTicks(date.getFullYear(), (date.getMonth() + 1), date.getDate()) + this.timeToTicks(date.getHours(), date.getMinutes(), date.getSeconds());\n if (ticks === 0) {\n return 0.0;\n }\n var ticksPerDay = 10000 * 1000 * 60 * 60 * 24;\n var daysTo1899 = (((365 * 4 + 1) * 25 - 1) * 4 + 1) * 4 + ((365 * 4 + 1) * 25 - 1) * 3 - 367;\n var doubleDateOffset = daysTo1899 * ticksPerDay;\n var oaDateMinAsTicks = (((365 * 4 + 1) * 25 - 1) - 365) * ticksPerDay;\n if (ticks < oaDateMinAsTicks) {\n throw new Error('Arg_OleAutDateInvalid');\n }\n var millisPerDay = 1000 * 60 * 60 * 24;\n return ((ticks - doubleDateOffset) / 10000) / millisPerDay;\n };\n return Workbook;\n}());\nexport { Workbook };\nvar BuiltInProperties = /** @class */ (function () {\n function BuiltInProperties() {\n }\n return BuiltInProperties;\n}());\nexport { BuiltInProperties };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Internationalization, setCulture } from '@syncfusion/ej2-base';\n/**\n * ValueFormatter class to globalize the value.\n * @hidden\n */\nvar ValueFormatter = /** @class */ (function () {\n function ValueFormatter(cultureName) {\n this.intl = new Internationalization();\n if (!isNullOrUndefined(cultureName)) {\n this.intl.culture = cultureName;\n }\n }\n ValueFormatter.prototype.getFormatFunction = function (format) {\n if (format.type) {\n return this.intl.getDateFormat(format);\n }\n else {\n return this.intl.getNumberFormat(format);\n }\n };\n ValueFormatter.prototype.getParserFunction = function (format) {\n if (format.type) {\n return this.intl.getDateParser(format);\n }\n else {\n return this.intl.getNumberParser(format);\n }\n };\n ValueFormatter.prototype.fromView = function (value, format, type) {\n if (type === 'date' || type === 'datetime' || type === 'number') {\n return format(value);\n }\n else {\n return value;\n }\n };\n ValueFormatter.prototype.toView = function (value, format) {\n var result = value;\n if (!isNullOrUndefined(format) && !isNullOrUndefined(value)) {\n result = format(value);\n }\n return result;\n };\n ValueFormatter.prototype.setCulture = function (cultureName) {\n if (!isNullOrUndefined(cultureName)) {\n setCulture(cultureName);\n }\n };\n return ValueFormatter;\n}());\nexport { ValueFormatter };\n","import { merge, isNullOrUndefined, getValue } from '@syncfusion/ej2-base';\nimport { Query, DataUtil } from '@syncfusion/ej2-data';\nimport { ValueFormatter } from '../services/value-formatter';\nimport { getUid, templateCompiler, getForeignData } from '../base/util';\n/**\n * Represents Grid `Column` model class.\n */\nvar Column = /** @class */ (function () {\n function Column(options) {\n var _this = this;\n /**\n * If `allowSorting` set to false, then it disables sorting option of a particular column.\n * By default all columns are sortable.\n * @default true\n */\n this.allowSorting = true;\n /**\n * If `allowResizing` is set to false, it disables resize option of a particular column.\n * By default all the columns can be resized.\n * @default true\n */\n this.allowResizing = true;\n /**\n * If `allowFiltering` set to false, then it disables filtering option and filter bar element of a particular column.\n * By default all columns are filterable.\n * @default true\n */\n this.allowFiltering = true;\n /**\n * If `allowGrouping` set to false, then it disables grouping of a particular column.\n * By default all columns are groupable.\n * @default true\n */\n this.allowGrouping = true;\n /**\n * If `allowReordering` set to false, then it disables reorder of a particular column.\n * By default all columns can be reorder.\n * @default true\n */\n this.allowReordering = true;\n /**\n * If `showColumnMenu` set to false, then it disable the column menu of a particular column.\n * By default column menu will show for all columns\n * @default true\n */\n this.showColumnMenu = true;\n /**\n * If `enableGroupByFormat` set to true, then it groups the particular column by formatted values.\n * @default true\n */\n this.enableGroupByFormat = false;\n /**\n * If `allowEditing` set to false, then it disables editing of a particular column.\n * By default all columns are editable.\n * @default true\n */\n this.allowEditing = true;\n /**\n * It is used to customize the default filter options for a specific columns.\n * * type - Specifies the filter type as menu or checkbox.\n * * ui - to render custom component for specific column it has following functions.\n * * ui.create – It is used for creating custom components.\n * * ui.read - It is used for read the value from the component.\n * * ui.write - It is used to apply component model as dynamically.\n * {% codeBlock src=\"grid/filter-menu-api/index.ts\" %}{% endcodeBlock %}\n *\n * > Check the [`Filter UI`](./filtering.html#custom-component-in-filter-menu) for its customization.\n * @default null\n */\n this.filter = {};\n /**\n * If `showInColumnChooser` set to false, then hide the particular column in column chooser.\n * By default all columns are displayed in column Chooser.\n * @default true\n */\n this.showInColumnChooser = true;\n /**\n * Defines the `IEditCell` object to customize default edit cell.\n * @default {}\n */\n this.edit = {};\n this.sortDirection = 'Descending';\n merge(this, options);\n this.uid = getUid('grid-column');\n var valueFormatter = new ValueFormatter();\n if (options.format && (options.format.skeleton || options.format.format)) {\n this.setFormatter(valueFormatter.getFormatFunction(options.format));\n this.setParser(valueFormatter.getParserFunction(options.format));\n }\n if (!this.field) {\n this.allowFiltering = false;\n this.allowGrouping = false;\n this.allowSorting = false;\n }\n if (this.commands && !this.textAlign) {\n this.textAlign = 'Right';\n }\n if (this.template || this.commandsTemplate) {\n this.templateFn = templateCompiler(this.template || this.commandsTemplate);\n }\n if (this.headerTemplate) {\n this.headerTemplateFn = templateCompiler(this.headerTemplate);\n }\n if (this.filter.itemTemplate) {\n this.fltrTemplateFn = templateCompiler(this.filter.itemTemplate);\n }\n if (this.isForeignColumn() && (isNullOrUndefined(this.editType) || this.editType === 'dropdownedit')) {\n this.editType = 'dropdownedit';\n this.edit.params = {\n dataSource: this.dataSource,\n query: new Query(), fields: { value: this.foreignKeyField || this.field, text: this.foreignKeyValue }\n };\n }\n if (this.sortComparer) {\n var a_1 = this.sortComparer;\n this.sortComparer = function comparer(x, y) {\n if (this.sortDirection === 'Descending') {\n var z = x;\n x = y;\n y = z;\n }\n return a_1(x, y);\n };\n }\n if (!this.sortComparer && this.isForeignColumn()) {\n this.sortComparer = function (x, y) {\n x = getValue(_this.foreignKeyValue, getForeignData(_this, {}, x)[0]);\n y = getValue(_this.foreignKeyValue, getForeignData(_this, {}, y)[0]);\n return _this.sortDirection === 'Descending' ? DataUtil.fnDescending(x, y) : DataUtil.fnAscending(x, y);\n };\n }\n }\n /** @hidden */\n Column.prototype.getSortDirection = function () {\n return this.sortDirection;\n };\n /** @hidden */\n Column.prototype.setSortDirection = function (direction) {\n this.sortDirection = direction;\n };\n /** @hidden */\n Column.prototype.setProperties = function (column) {\n //Angular two way binding\n var keys = Object.keys(column);\n for (var i = 0; i < keys.length; i++) {\n this[keys[i]] = column[keys[i]];\n }\n };\n /**\n * @hidden\n * It defines the column is foreign key column or not.\n */\n Column.prototype.isForeignColumn = function () {\n return !!(this.dataSource && this.foreignKeyValue);\n };\n /** @hidden */\n Column.prototype.getFormatter = function () {\n return this.formatFn;\n };\n /** @hidden */\n Column.prototype.setFormatter = function (value) {\n this.formatFn = value;\n };\n /** @hidden */\n Column.prototype.getParser = function () {\n return this.parserFn;\n };\n /** @hidden */\n Column.prototype.setParser = function (value) {\n this.parserFn = value;\n };\n /** @hidden */\n Column.prototype.getColumnTemplate = function () {\n return this.templateFn;\n };\n /** @hidden */\n Column.prototype.getHeaderTemplate = function () {\n return this.headerTemplateFn;\n };\n /** @hidden */\n Column.prototype.getFilterItemTemplate = function () {\n return this.fltrTemplateFn;\n };\n /** @hidden */\n Column.prototype.getDomSetter = function () {\n return this.disableHtmlEncode ? 'textContent' : 'innerHTML';\n };\n return Column;\n}());\nexport { Column };\n","/** @hidden */\nexport var created = 'create';\n/** @hidden */\nexport var destroyed = 'destroy';\n/** @hidden */\nexport var load = 'load';\n/** @hidden */\nexport var rowDataBound = 'rowDataBound';\n/** @hidden */\nexport var queryCellInfo = 'queryCellInfo';\n/** @hidden */\nexport var headerCellInfo = 'headerCellInfo';\n/** @hidden */\nexport var actionBegin = 'actionBegin';\n/** @hidden */\nexport var actionComplete = 'actionComplete';\n/** @hidden */\nexport var actionFailure = 'actionFailure';\n/** @hidden */\nexport var dataBound = 'dataBound';\n/** @hidden */\nexport var rowSelecting = 'rowSelecting';\n/** @hidden */\nexport var rowSelected = 'rowSelected';\n/** @hidden */\nexport var rowDeselecting = 'rowDeselecting';\n/** @hidden */\nexport var rowDeselected = 'rowDeselected';\n/** @hidden */\nexport var cellSelecting = 'cellSelecting';\n/** @hidden */\nexport var cellSelected = 'cellSelected';\n/** @hidden */\nexport var cellDeselecting = 'cellDeselecting';\n/** @hidden */\nexport var cellDeselected = 'cellDeselected';\n/** @hidden */\nexport var columnDragStart = 'columnDragStart';\n/** @hidden */\nexport var columnDrag = 'columnDrag';\n/** @hidden */\nexport var columnDrop = 'columnDrop';\n/** @hidden */\nexport var rowDragStart = 'rowDragStart';\n/** @hidden */\nexport var rowDrag = 'rowDrag';\n/** @hidden */\nexport var rowDrop = 'rowDrop';\n/** @hidden */\nexport var beforePrint = 'beforePrint';\n/** @hidden */\nexport var printComplete = 'printComplete';\n/** @hidden */\nexport var detailDataBound = 'detailDataBound';\n/** @hidden */\nexport var toolbarClick = 'toolbarClick';\n/** @hidden */\nexport var batchAdd = 'batchAdd';\n/** @hidden */\nexport var batchCancel = 'batchCancel';\n/** @hidden */\nexport var batchDelete = 'batchDelete';\n/** @hidden */\nexport var beforeBatchAdd = 'beforeBatchAdd';\n/** @hidden */\nexport var beforeBatchDelete = 'beforeBatchDelete';\n/** @hidden */\nexport var beforeBatchSave = 'beforeBatchSave';\n/** @hidden */\nexport var beginEdit = 'beginEdit';\n/** @hidden */\nexport var cellEdit = 'cellEdit';\n/** @hidden */\nexport var cellSave = 'cellSave';\n/** @hidden */\nexport var endAdd = 'endAdd';\n/** @hidden */\nexport var endDelete = 'endDelete';\n/** @hidden */\nexport var endEdit = 'endEdit';\n/** @hidden */\nexport var recordDoubleClick = 'recordDoubleClick';\n/** @hidden */\nexport var recordClick = 'recordClick';\n/** @hidden */\nexport var beforeDataBound = 'beforeDataBound';\n/** @hidden */\nexport var beforeOpenColumnChooser = 'beforeOpenColumnChooser';\n/** @hidden */\nexport var resizeStart = 'resizeStart';\n/** @hidden */\nexport var onResize = 'resizing';\n/** @hidden */\nexport var resizeStop = 'resizeStop';\n/** @hidden */\nexport var checkBoxChange = 'checkBoxChange';\n/** @hidden */\nexport var beforeCopy = 'beforeCopy';\n/** @hidden */\nexport var filterChoiceRequest = 'filterchoicerequest';\n/** @hidden */\nexport var filterAfterOpen = 'filterafteropen';\n/** @hidden */\nexport var filterBeforeOpen = 'filterbeforeopen';\nexport var filterSearchBegin = 'filtersearchbegin';\n/**\n * Specifies grid internal events\n */\n/** @hidden */\nexport var initialLoad = 'initial-load';\n/** @hidden */\nexport var initialEnd = 'initial-end';\n/** @hidden */\nexport var dataReady = 'data-ready';\n/** @hidden */\nexport var contentReady = 'content-ready';\n/** @hidden */\nexport var uiUpdate = 'ui-update';\n/** @hidden */\nexport var onEmpty = 'on-empty';\n/** @hidden */\nexport var inBoundModelChanged = 'inbound-model-changed';\n/** @hidden */\nexport var modelChanged = 'model-changed';\n/** @hidden */\nexport var colGroupRefresh = 'colgroup-refresh';\n/** @hidden */\nexport var headerRefreshed = 'header-refreshed';\n/** @hidden */\nexport var pageBegin = 'paging-begin';\n/** @hidden */\nexport var pageComplete = 'paging-complete';\n/** @hidden */\nexport var sortBegin = 'sorting-begin';\n/** @hidden */\nexport var sortComplete = 'sorting-complete';\n/** @hidden */\nexport var filterBegin = 'filtering-begin';\n/** @hidden */\nexport var filterComplete = 'filtering-complete';\n/** @hidden */\nexport var searchBegin = 'searching-begin';\n/** @hidden */\nexport var searchComplete = 'searching-complete';\n/** @hidden */\nexport var reorderBegin = 'reorder-begin';\n/** @hidden */\nexport var reorderComplete = 'reorder-complete';\n/** @hidden */\nexport var rowDragAndDropBegin = 'rowdraganddrop-begin';\n/** @hidden */\nexport var rowDragAndDropComplete = 'rowdraganddrop-complete';\n/** @hidden */\nexport var groupBegin = 'grouping-begin';\n/** @hidden */\nexport var groupComplete = 'grouping-complete';\n/** @hidden */\nexport var ungroupBegin = 'ungrouping-begin';\n/** @hidden */\nexport var ungroupComplete = 'ungrouping-complete';\n/** @hidden */\nexport var rowSelectionBegin = 'rowselecting';\n/** @hidden */\nexport var rowSelectionComplete = 'rowselected';\n/** @hidden */\nexport var columnSelectionBegin = 'columnselecting';\n/** @hidden */\nexport var columnSelectionComplete = 'columnselected';\n/** @hidden */\nexport var cellSelectionBegin = 'cellselecting';\n/** @hidden */\nexport var cellSelectionComplete = 'cellselected';\n/** @hidden */\nexport var beforeCellFocused = 'beforecellfocused';\n/** @hidden */\nexport var cellFocused = 'cellfocused';\n/** @hidden */\nexport var keyPressed = 'key-pressed';\n/** @hidden */\nexport var click = 'click';\n/** @hidden */\nexport var destroy = 'destroy';\n/** @hidden */\nexport var columnVisibilityChanged = 'column-visible-changed';\n/** @hidden */\nexport var scroll = 'scroll';\n/** @hidden */\nexport var columnWidthChanged = 'column-width-changed';\n/** @hidden */\nexport var columnPositionChanged = 'column-position-changed';\n/** @hidden */\nexport var rowDragAndDrop = 'row-drag-and-drop';\n/** @hidden */\nexport var rowsAdded = 'rows-added';\n/** @hidden */\nexport var rowsRemoved = 'rows-removed';\n/** @hidden */\nexport var columnDragStop = 'column-drag-stop';\n/** @hidden */\nexport var headerDrop = 'header-drop';\n/** @hidden */\nexport var dataSourceModified = 'datasource-modified';\n/** @hidden */\nexport var refreshComplete = 'refresh-complete';\n/** @hidden */\nexport var refreshVirtualBlock = 'refresh-virtual-block';\n/** @hidden */\nexport var dblclick = 'dblclick';\n/** @hidden */\nexport var toolbarRefresh = 'toolbar-refresh';\n/** @hidden */\nexport var bulkSave = 'bulk-save';\n/** @hidden */\nexport var autoCol = 'auto-col';\n/** @hidden */\nexport var tooltipDestroy = 'tooltip-destroy';\n/** @hidden */\nexport var updateData = 'update-data';\n/** @hidden */\nexport var editBegin = 'edit-begin';\n/** @hidden */\nexport var editComplete = 'edit-complete';\n/** @hidden */\nexport var addBegin = 'add-begin';\n/** @hidden */\nexport var addComplete = 'add-complete';\n/** @hidden */\nexport var saveComplete = 'save-complete';\n/** @hidden */\nexport var deleteBegin = 'delete-begin';\n/** @hidden */\nexport var deleteComplete = 'delete-complete';\n/** @hidden */\nexport var preventBatch = 'prevent-batch';\n/** @hidden */\nexport var dialogDestroy = 'dialog-destroy';\n/** @hidden */\nexport var crudAction = 'crud-Action';\n/** @hidden */\nexport var addDeleteAction = 'add-delete-Action';\n/** @hidden */\nexport var destroyForm = 'destroy-form';\n/** @hidden */\nexport var doubleTap = 'double-tap';\n/** @hidden */\nexport var beforeExcelExport = 'beforeExcelExport';\n/** @hidden */\nexport var excelExportComplete = 'excelExportComplete';\n/** @hidden */\nexport var excelQueryCellInfo = 'excelQueryCellInfo';\n/** @hidden */\nexport var excelHeaderQueryCellInfo = 'excelHeaderQueryCellInfo';\n/** @hidden */\nexport var beforePdfExport = 'beforePdfExport';\n/** @hidden */\nexport var pdfExportComplete = 'pdfExportComplete';\n/** @hidden */\nexport var pdfQueryCellInfo = 'pdfQueryCellInfo';\n/** @hidden */\nexport var pdfHeaderQueryCellInfo = 'pdfHeaderQueryCellInfo';\n/** @hidden */\nexport var accessPredicate = 'access-predicate';\n/** @hidden */\nexport var contextMenuClick = 'contextMenuClick';\n/** @hidden */\nexport var freezeRender = 'freezerender';\n/** @hidden */\nexport var freezeRefresh = 'freezerefresh';\n/** @hidden */\nexport var contextMenuOpen = 'contextMenuOpen';\n/** @hidden */\nexport var columnMenuClick = 'columnMenuClick';\n/** @hidden */\nexport var columnMenuOpen = 'columnMenuOpen';\n/** @hidden */\nexport var filterOpen = 'filterOpen';\n/** @hidden */\nexport var filterDialogCreated = 'filterDialogCreated';\n/** @hidden */\nexport var filterMenuClose = 'filter-menu-close';\n/** @hidden */\nexport var initForeignKeyColumn = 'initForeignKeyColumn';\n/** @hidden */\nexport var getForeignKeyData = 'getForeignKeyData';\n/** @hidden */\nexport var generateQuery = 'generateQuery';\n/** @hidden */\nexport var showEmptyGrid = 'showEmptyGrid';\n/** @hidden */\nexport var foreignKeyData = 'foreignKeyData';\n/** @hidden */\nexport var dataStateChange = 'dataStateChange';\n/** @hidden */\nexport var dataSourceChanged = 'dataSourceChanged';\n/** @hidden */\nexport var rtlUpdated = 'rtl-updated';\n/** @hidden */\nexport var beforeFragAppend = 'beforeFragAppend';\n/** @hidden */\nexport var frozenHeight = 'frozenHeight';\n","/* tslint:disable-next-line:max-line-length */\nimport { EventHandler, isNullOrUndefined, extend, classList, addClass, removeClass, Browser, getValue, setValue } from '@syncfusion/ej2-base';\nimport { parentsUntil, getUid, appendChildren, getDatePredicate } from '../base/util';\nimport { remove, createElement, debounce } from '@syncfusion/ej2-base';\nimport { DataUtil, Query, DataManager, Predicate, UrlAdaptor, Deferred } from '@syncfusion/ej2-data';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport * as events from '../base/constant';\nimport { ValueFormatter } from '../services/value-formatter';\nimport { getForeignData } from '../base/util';\nimport { Dialog } from '@syncfusion/ej2-popups';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { createSpinner, hideSpinner, showSpinner } from '@syncfusion/ej2-popups';\nimport { getFilterMenuPostion, toogleCheckbox, createCboxWithWrap, removeAddCboxClasses, getColumnByForeignKeyValue } from '../base/util';\n/**\n * @hidden\n * `CheckBoxFilter` module is used to handle filtering action.\n */\nvar CheckBoxFilter = /** @class */ (function () {\n /**\n * Constructor for checkbox filtering module\n * @hidden\n */\n function CheckBoxFilter(parent, filterSettings, serviceLocator) {\n this.existingPredicate = {};\n this.filterState = true;\n this.values = {};\n this.cBoxTrue = createCheckBox(false, { checked: true, label: ' ' });\n this.cBoxFalse = createCheckBox(false, { checked: false, label: ' ' });\n this.parent = parent;\n this.id = this.parent.element.id;\n this.serviceLocator = serviceLocator;\n this.filterSettings = filterSettings;\n this.valueFormatter = new ValueFormatter(this.parent.locale);\n this.cBoxTrue.insertBefore(createElement('input', {\n className: 'e-chk-hidden', attrs: { type: 'checkbox' }\n }), this.cBoxTrue.firstChild);\n this.cBoxFalse.insertBefore(createElement('input', {\n className: 'e-chk-hidden', attrs: { 'type': 'checkbox' }\n }), this.cBoxFalse.firstChild);\n this.cBoxFalse.querySelector('.e-frame').classList.add('e-uncheck');\n if (this.parent.enableRtl) {\n addClass([this.cBoxTrue, this.cBoxFalse], ['e-rtl']);\n }\n }\n /**\n * To destroy the filter bar.\n * @return {void}\n * @hidden\n */\n CheckBoxFilter.prototype.destroy = function () {\n this.closeDialog();\n };\n CheckBoxFilter.prototype.wireEvents = function () {\n EventHandler.add(this.dlg, 'click', this.clickHandler, this);\n this.searchHandler = debounce(this.searchBoxKeyUp, 200);\n EventHandler.add(this.dlg.querySelector('.e-searchinput'), 'keyup', this.searchHandler, this);\n };\n CheckBoxFilter.prototype.unWireEvents = function () {\n EventHandler.remove(this.dlg, 'click', this.clickHandler);\n var elem = this.dlg.querySelector('.e-searchinput');\n if (elem) {\n EventHandler.remove(elem, 'keyup', this.searchHandler);\n }\n };\n CheckBoxFilter.prototype.searchBoxClick = function (e) {\n var target = e.target;\n if (target.classList.contains('e-searchclear')) {\n this.sInput.value = '';\n this.refreshCheckboxes();\n this.updateSearchIcon();\n this.sInput.focus();\n }\n };\n CheckBoxFilter.prototype.searchBoxKeyUp = function (e) {\n this.refreshCheckboxes();\n this.updateSearchIcon();\n };\n CheckBoxFilter.prototype.updateSearchIcon = function () {\n if (this.sInput.value.length) {\n classList(this.sIcon, ['e-chkcancel-icon'], ['e-search-icon']);\n }\n else {\n classList(this.sIcon, ['e-search-icon'], ['e-chkcancel-icon']);\n }\n };\n /**\n * Gets the localized label by locale keyword.\n * @param {string} key\n * @return {string}\n */\n CheckBoxFilter.prototype.getLocalizedLabel = function (key) {\n return this.localeObj.getConstant(key);\n };\n CheckBoxFilter.prototype.updateDataSource = function () {\n var dataSource = this.options.dataSource;\n if (!(dataSource instanceof DataManager)) {\n for (var i = 0; i < dataSource.length; i++) {\n if (typeof dataSource !== 'object') {\n var obj = {};\n obj[this.options.field] = dataSource[i];\n dataSource[i] = obj;\n }\n }\n }\n };\n CheckBoxFilter.prototype.updateModel = function (options) {\n this.options = options;\n this.existingPredicate = options.actualPredicate || {};\n this.options.dataSource = options.dataSource;\n this.updateDataSource();\n this.options.type = options.type || 'string';\n this.options.format = options.format || '';\n this.options.filteredColumns = options.filteredColumns || this.parent.filterSettings.columns;\n this.options.sortedColumns = options.sortedColumns || this.parent.sortSettings.columns;\n this.options.query = options.query || new Query();\n this.options.allowCaseSensitive = options.allowCaseSensitive || false;\n this.values = {};\n this.localeObj = options.localeObj;\n this.isFiltered = options.filteredColumns.length;\n };\n CheckBoxFilter.prototype.getAndSetChkElem = function (options) {\n this.dlg = createElement('div', {\n id: this.id + this.options.type + '_excelDlg',\n className: 'e-checkboxfilter e-filter-popup'\n });\n this.sBox = createElement('div', { className: 'e-searchcontainer' });\n if (!options.hideSearchbox) {\n this.sInput = createElement('input', {\n id: this.id + '_SearchBox',\n className: 'e-searchinput'\n });\n this.sIcon = createElement('span', {\n className: 'e-searchclear e-search-icon e-icons e-input-group-icon', attrs: {\n type: 'text', title: this.getLocalizedLabel('Search')\n }\n });\n this.searchBox = createElement('span', { className: 'e-searchbox e-fields' });\n this.searchBox.appendChild(this.sInput);\n this.sBox.appendChild(this.searchBox);\n Input.createInput({\n element: this.sInput, floatLabelType: 'Never', properties: {\n placeholder: this.getLocalizedLabel('Search')\n }\n });\n this.searchBox.querySelector('.e-input-group').appendChild(this.sIcon);\n }\n this.spinner = createElement('div', { className: 'e-spinner' }); //for spinner\n this.cBox = createElement('div', {\n id: this.id + this.options.type + '_CheckBoxList',\n className: 'e-checkboxlist e-fields'\n });\n this.spinner.appendChild(this.cBox);\n this.sBox.appendChild(this.spinner);\n return this.sBox;\n };\n CheckBoxFilter.prototype.showDialog = function (options) {\n var args = {\n requestType: events.filterBeforeOpen, filterModel: this,\n columnName: this.options.field, columnType: this.options.type, cancel: false\n };\n this.parent.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n this.dialogObj = new Dialog({\n visible: false, content: this.sBox,\n close: this.closeDialog.bind(this),\n width: (!isNullOrUndefined(parentsUntil(options.target, 'e-bigger')))\n || this.parent.element.classList.contains('e-device') ? 260 : 255,\n target: this.parent.element, animationSettings: { effect: 'None' },\n buttons: [{\n click: this.btnClick.bind(this),\n buttonModel: {\n content: this.getLocalizedLabel(this.isExcel ? 'OKButton' : 'FilterButton'),\n cssClass: 'e-primary', isPrimary: true\n }\n },\n {\n click: this.btnClick.bind(this),\n buttonModel: { cssClass: 'e-flat', content: this.getLocalizedLabel(this.isExcel ? 'CancelButton' : 'ClearButton') }\n }],\n created: this.dialogCreated.bind(this),\n open: this.dialogOpen.bind(this)\n });\n this.dialogObj.appendTo(this.dlg);\n this.dialogObj.element.style.maxHeight = '800px';\n this.dialogObj.show();\n this.wireEvents();\n createSpinner({ target: this.spinner });\n showSpinner(this.spinner);\n this.getAllData();\n };\n CheckBoxFilter.prototype.dialogCreated = function (e) {\n if (!Browser.isDevice) {\n getFilterMenuPostion(this.options.target, this.dialogObj, this.parent);\n }\n else {\n this.dialogObj.position = { X: 'center', Y: 'center' };\n }\n this.parent.notify(events.filterDialogCreated, e);\n };\n CheckBoxFilter.prototype.openDialog = function (options) {\n this.updateModel(options);\n this.getAndSetChkElem(options);\n this.showDialog(options);\n };\n CheckBoxFilter.prototype.closeDialog = function () {\n if (this.dialogObj && !this.dialogObj.isDestroyed) {\n this.parent.notify(events.filterMenuClose, { field: this.options.field });\n this.dialogObj.destroy();\n this.unWireEvents();\n remove(this.dlg);\n this.dlg = null;\n }\n };\n CheckBoxFilter.prototype.clearFilter = function () {\n this.options.handler({ action: 'clear-filter', field: this.options.field });\n };\n CheckBoxFilter.prototype.btnClick = function (e) {\n if (this.filterState) {\n if (e.target.tagName.toLowerCase() === 'input') {\n var args = {\n action: 'filtering', filterCollection: {\n field: this.options.field,\n operator: this.options.column.type === 'date' || this.options.column.type === 'datetime' ? 'equal' : 'contains',\n value: e.target.value, matchCase: false, type: this.options.column.type\n },\n field: this.options.field\n };\n e.target.value ? this.options.handler(args) : this.closeDialog();\n }\n else {\n var text = e.target.firstChild.textContent.toLowerCase();\n if (this.getLocalizedLabel(this.isExcel ? 'OKButton' : 'FilterButton').toLowerCase() === text) {\n this.fltrBtnHandler();\n }\n else if (this.getLocalizedLabel('ClearButton').toLowerCase() === text) {\n this.clearFilter();\n }\n }\n this.closeDialog();\n }\n else if (!(e.target.tagName.toLowerCase() === 'input')) {\n this.clearFilter();\n this.closeDialog();\n }\n };\n CheckBoxFilter.prototype.fltrBtnHandler = function () {\n var checked = [].slice.call(this.cBox.querySelectorAll('.e-check:not(.e-selectall)'));\n var optr = 'equal';\n var caseSen = this.options.type === 'string' ?\n this.options.allowCaseSensitive : true;\n var defaults = {\n field: this.options.field, predicate: 'or',\n operator: optr, matchCase: caseSen, ignoreAccent: this.parent.filterSettings.ignoreAccent\n };\n var isNotEqual = this.itemsCnt !== checked.length && this.itemsCnt - checked.length < checked.length;\n if (isNotEqual) {\n optr = 'notequal';\n checked = [].slice.call(this.cBox.querySelectorAll('.e-uncheck:not(.e-selectall)'));\n defaults.predicate = 'and';\n defaults.operator = 'notequal';\n }\n var value;\n var fObj;\n var coll = [];\n var searchInput = this.searchBox.querySelector('.e-searchinput');\n if (checked.length !== this.itemsCnt || (searchInput.value && searchInput.value !== '')) {\n for (var i = 0; i < checked.length; i++) {\n value = this.values[parentsUntil(checked[i], 'e-ftrchk').getAttribute('uid')];\n fObj = extend({}, { value: value }, defaults);\n if (value && !value.toString().length) {\n fObj.operator = isNotEqual ? 'notequal' : 'equal';\n }\n coll.push(fObj);\n }\n this.initiateFilter(coll);\n }\n else {\n this.clearFilter();\n }\n };\n CheckBoxFilter.prototype.initiateFilter = function (fColl) {\n var firstVal = fColl[0];\n var predicate;\n if (!isNullOrUndefined(firstVal)) {\n predicate = firstVal.ejpredicate ? firstVal.ejpredicate :\n new Predicate(firstVal.field, firstVal.operator, firstVal.value, !firstVal.matchCase, firstVal.ignoreAccent);\n for (var j = 1; j < fColl.length; j++) {\n predicate = fColl[j].ejpredicate !== undefined ?\n predicate[fColl[j].predicate](fColl[j].ejpredicate) :\n predicate[fColl[j].predicate](fColl[j].field, fColl[j].operator, fColl[j].value, !fColl[j].matchCase, fColl[j].ignoreAccent);\n }\n var args = {\n action: 'filtering', filterCollection: fColl, field: this.options.field,\n ejpredicate: Predicate.or(predicate)\n };\n this.options.handler(args);\n }\n };\n CheckBoxFilter.prototype.refreshCheckboxes = function () {\n var val = this.sInput.value;\n var query = this.options.query.clone();\n var parsed = (this.options.type !== 'string' && parseFloat(val)) ? parseFloat(val) : val;\n var operator = this.options.type ? 'startswith' : 'contains';\n var matchCase = true;\n var ignoreAccent = this.parent.filterSettings.ignoreAccent;\n parsed = (parsed === '' || parsed === undefined) ? undefined : parsed;\n var predicte;\n if (this.options.type === 'boolean') {\n if (parsed !== undefined &&\n this.getLocalizedLabel('FilterTrue').toLowerCase().indexOf(parsed.toLowerCase()) !== -1) {\n parsed = 'true';\n }\n else if (parsed !== undefined &&\n this.getLocalizedLabel('FilterFalse').toLowerCase().indexOf(parsed.toLowerCase()) !== -1) {\n parsed = 'false';\n }\n parsed = parsed === 'true';\n operator = 'equal';\n }\n var args = {\n requestType: events.filterSearchBegin,\n filterModel: this, columnName: this.options.field, column: this.options.column,\n operator: operator, matchCase: matchCase, ignoreAccent: ignoreAccent, filterChoiceCount: null,\n query: query\n };\n this.parent.trigger(events.actionBegin, args);\n predicte = new Predicate(this.options.field, args.operator, parsed, args.matchCase, args.ignoreAccent);\n if (this.options.type === 'date' || this.options.type === 'datetime') {\n parsed = this.valueFormatter.fromView(val, this.options.parserFn, this.options.type);\n operator = 'equal';\n if (isNullOrUndefined(parsed) && val.length) {\n return;\n }\n predicte = getDatePredicate({\n field: this.options.field, operator: operator, value: parsed, matchCase: matchCase,\n ignoreAccent: ignoreAccent\n });\n }\n if (val.length) {\n query.where(predicte);\n }\n args.filterChoiceCount = !isNullOrUndefined(args.filterChoiceCount) ? args.filterChoiceCount : 1000;\n query.take(args.filterChoiceCount);\n if (this.parent.dataSource && 'result' in this.parent.dataSource) {\n this.filterEvent(args, query);\n }\n else {\n this.processSearch(query);\n }\n };\n CheckBoxFilter.prototype.getPredicateFromCols = function (columns) {\n var predicate;\n var predicates = CheckBoxFilter.getPredicate(columns);\n var predicateList = [];\n var fPredicate = {};\n var foreignColumn = this.parent.getForeignKeyColumns();\n for (var _i = 0, _a = Object.keys(predicates); _i < _a.length; _i++) {\n var prop = _a[_i];\n var col = getColumnByForeignKeyValue(prop, foreignColumn);\n if (col) {\n this.parent.notify(events.generateQuery, { predicate: fPredicate, column: col });\n if (fPredicate.predicate.predicates.length) {\n predicateList.push(Predicate.or(fPredicate.predicate.predicates));\n }\n }\n else {\n predicateList.push(predicates[prop]);\n }\n }\n return predicateList.length && Predicate.and(predicateList);\n };\n CheckBoxFilter.prototype.getAllData = function () {\n var query = new Query();\n query = this.parent.query.clone();\n query.requiresCount(); //consider take query\n var args = {\n requestType: events.filterChoiceRequest, filterModel: this, query: query, filterChoiceCount: null\n };\n this.parent.trigger(events.actionBegin, args);\n args.filterChoiceCount = !isNullOrUndefined(args.filterChoiceCount) ? args.filterChoiceCount : 1000;\n query.take(args.filterChoiceCount);\n if (this.parent.dataSource && 'result' in this.parent.dataSource) {\n this.filterEvent(args, query);\n }\n else {\n this.processDataOperation(query);\n }\n };\n CheckBoxFilter.prototype.filterEvent = function (args, query) {\n var _this = this;\n var def = this.eventPromise(args, query);\n def.promise.then(function (e) {\n _this.dataSuccess(e);\n });\n };\n CheckBoxFilter.prototype.eventPromise = function (args, query) {\n var state;\n state = this.getStateEventArgument(query);\n var def = new Deferred();\n state.dataSource = def.resolve;\n state.action = args;\n this.parent.trigger(events.dataStateChange, state);\n return def;\n };\n ;\n CheckBoxFilter.prototype.getStateEventArgument = function (query) {\n var adaptr = new UrlAdaptor();\n var dm = new DataManager({ url: '', adaptor: new UrlAdaptor });\n var state = adaptr.processQuery(dm, query);\n var data = JSON.parse(state.data);\n return data;\n };\n ;\n CheckBoxFilter.prototype.processDataOperation = function (query) {\n var _this = this;\n this.options.dataSource = this.options.dataSource instanceof DataManager ?\n this.options.dataSource : new DataManager(this.options.dataSource);\n var allPromise = [];\n var runArray = [];\n if (this.options.column.isForeignColumn()) {\n allPromise.push(this.options.column.dataSource.executeQuery(new Query()));\n runArray.push(function (data) { return _this.foreignKeyData = data; });\n }\n allPromise.push(this.options.dataSource.executeQuery(query));\n runArray.push(this.dataSuccess.bind(this));\n var i = 0;\n Promise.all(allPromise).then(function (e) {\n e.forEach(function (data) {\n runArray[i++](data.result);\n });\n });\n };\n CheckBoxFilter.prototype.dataSuccess = function (e) {\n this.fullData = e;\n var query = new Query();\n if ((this.options.filteredColumns.length)) {\n var cols = [];\n for (var i = 0; i < this.options.filteredColumns.length; i++) {\n if (!(this.options.filteredColumns[i].field === this.options.field ||\n this.options.filteredColumns[i].field === this.options.foreignKeyValue)) {\n cols.push(this.options.filteredColumns[i]);\n }\n }\n var predicate = this.getPredicateFromCols(cols);\n if (predicate) {\n query.where(predicate);\n }\n }\n // query.select(this.options.field);\n var result = new DataManager(this.fullData).executeLocal(query);\n var col = this.options.column;\n var res = CheckBoxFilter.getDistinct(result, this.options.field, col, this.foreignKeyData);\n this.filteredData = res.records || [];\n this.processDataSource(null, true, this.filteredData);\n this.sInput.focus();\n var args = {\n requestType: events.filterAfterOpen,\n filterModel: this, columnName: this.options.field, columnType: this.options.type\n };\n this.parent.trigger(events.actionComplete, args);\n };\n CheckBoxFilter.prototype.processDataSource = function (query, isInitial, dataSource) {\n showSpinner(this.spinner);\n // query = query ? query : this.options.query.clone();\n // query.requiresCount();\n // let result: Object = new DataManager(dataSource as JSON[]).executeLocal(query);\n // let res: { result: Object[] } = result as { result: Object[] };\n this.updateResult();\n this.createFilterItems(dataSource, isInitial);\n };\n CheckBoxFilter.prototype.processSearch = function (query) {\n this.processDataOperation(query);\n };\n CheckBoxFilter.prototype.updateResult = function () {\n this.result = {};\n var predicate = this.getPredicateFromCols(this.options.filteredColumns);\n var query = new Query();\n if (predicate) {\n query.where(predicate);\n }\n var result = new DataManager(this.fullData).executeLocal(query);\n for (var _i = 0, result_1 = result; _i < result_1.length; _i++) {\n var res = result_1[_i];\n this.result[getValue(this.options.field, res)] = true;\n }\n };\n CheckBoxFilter.prototype.clickHandler = function (e) {\n var target = e.target;\n var elem = parentsUntil(target, 'e-checkbox-wrapper');\n if (parentsUntil(target, 'e-searchbox')) {\n this.searchBoxClick(e);\n }\n if (elem) {\n var selectAll = elem.querySelector('.e-selectall');\n if (selectAll) {\n this.updateAllCBoxes(!selectAll.classList.contains('e-check'));\n }\n else {\n toogleCheckbox(elem.parentElement);\n }\n this.updateIndeterminatenBtn();\n elem.querySelector('.e-chk-hidden').focus();\n }\n };\n CheckBoxFilter.prototype.updateAllCBoxes = function (checked) {\n var cBoxes = [].slice.call(this.cBox.querySelectorAll('.e-frame'));\n for (var _i = 0, cBoxes_1 = cBoxes; _i < cBoxes_1.length; _i++) {\n var cBox = cBoxes_1[_i];\n removeAddCboxClasses(cBox, checked);\n }\n };\n CheckBoxFilter.prototype.dialogOpen = function () {\n if (this.parent.element.classList.contains('e-device')) {\n this.dialogObj.element.querySelector('.e-input-group').classList.remove('e-input-focus');\n this.dialogObj.element.querySelector('.e-btn').focus();\n }\n };\n CheckBoxFilter.prototype.createCheckbox = function (value, checked) {\n var elem = checked ? this.cBoxTrue.cloneNode(true) :\n this.cBoxFalse.cloneNode(true);\n var label = elem.querySelector('.e-label');\n label.innerHTML = !isNullOrUndefined(value) && value.toString().length ? value :\n this.getLocalizedLabel('Blanks');\n if (this.options.template) {\n label.innerHTML = '';\n var args = {};\n args[this.options.field] = value;\n appendChildren(label, this.options.template(args));\n }\n return elem;\n };\n CheckBoxFilter.prototype.updateIndeterminatenBtn = function () {\n var cnt = this.cBox.children.length - 1;\n var className = [];\n var elem = this.cBox.querySelector('.e-selectall');\n var selected = this.cBox.querySelectorAll('.e-check:not(.e-selectall)').length;\n var btn = this.dialogObj.btnObj[0];\n btn.disabled = false;\n if (cnt === selected) {\n className = ['e-check'];\n }\n else if (selected) {\n className = ['e-stop'];\n }\n else {\n className = ['e-uncheck'];\n btn.disabled = true;\n }\n this.filterState = !btn.disabled;\n btn.dataBind();\n removeClass([elem], ['e-check', 'e-stop', 'e-uncheck']);\n addClass([elem], className);\n };\n CheckBoxFilter.prototype.createFilterItems = function (data, isInitial) {\n var cBoxes = createElement('div');\n var btn = this.dialogObj.btnObj[0];\n this.itemsCnt = data.length;\n if (data.length) {\n var selectAll = createCboxWithWrap(getUid('cbox'), this.createCheckbox(this.getLocalizedLabel('SelectAll'), false), 'e-ftrchk');\n selectAll.querySelector('.e-frame').classList.add('e-selectall');\n cBoxes.appendChild(selectAll);\n var predicate = new Predicate('field', 'equal', this.options.field);\n if (this.options.foreignKeyValue) {\n predicate = predicate.or('field', 'equal', this.options.foreignKeyValue);\n }\n var isColFiltered = new DataManager(this.options.filteredColumns).executeLocal(new Query().where(predicate)).length;\n for (var i = 0; i < data.length; i++) {\n var uid = getUid('cbox');\n this.values[uid] = getValue('ejValue', data[i]);\n var value = this.valueFormatter.toView(getValue(this.options.field, data[i]), this.options.formatFn);\n cBoxes.appendChild(createCboxWithWrap(uid, this.createCheckbox(value, this.getCheckedState(isColFiltered, this.values[uid])), 'e-ftrchk'));\n }\n this.cBox.innerHTML = cBoxes.innerHTML;\n this.updateIndeterminatenBtn();\n btn.disabled = false;\n }\n else {\n cBoxes.appendChild(createElement('span', { innerHTML: this.getLocalizedLabel('NoResult') }));\n this.cBox.innerHTML = cBoxes.innerHTML;\n btn.disabled = true;\n }\n this.filterState = !btn.disabled;\n btn.dataBind();\n var args = { requestType: events.filterChoiceRequest, filterModel: this, dataSource: data };\n this.parent.trigger(events.actionComplete, args);\n hideSpinner(this.spinner);\n };\n CheckBoxFilter.prototype.getCheckedState = function (isColFiltered, value) {\n if (!this.isFiltered || !isColFiltered) {\n return true;\n }\n else {\n return this.result[value];\n }\n };\n CheckBoxFilter.getDistinct = function (json, field, column, foreignKeyData) {\n var len = json.length;\n var result = [];\n var value;\n var ejValue = 'ejValue';\n var lookup = {};\n var isForeignKey = column && column.isForeignColumn();\n while (len--) {\n value = json[len];\n value = getValue(field, value); //local remote diff, check with mdu \n if (!isNullOrUndefined(value)) {\n if (!(value in lookup)) {\n var obj = {};\n obj[ejValue] = value;\n lookup[value] = true;\n value = isForeignKey ? getValue(column.foreignKeyValue, getForeignData(column, {}, value, foreignKeyData)[0]) : value;\n setValue(field, isNullOrUndefined(value) ? null : value, obj);\n result.push(obj);\n }\n }\n }\n return DataUtil.group(DataUtil.sort(result, field, DataUtil.fnAscending), 'ejValue');\n };\n CheckBoxFilter.getPredicate = function (columns) {\n var cols = CheckBoxFilter.getDistinct(columns, 'field').records || [];\n var collection = [];\n var pred = {};\n for (var i = 0; i < cols.length; i++) {\n collection = new DataManager(columns).executeLocal(new Query().where('field', 'equal', cols[i].field));\n if (collection.length !== 0) {\n pred[cols[i].field] = CheckBoxFilter.generatePredicate(collection);\n }\n }\n return pred;\n };\n CheckBoxFilter.generatePredicate = function (cols) {\n var len = cols ? cols.length : 0;\n var predicate;\n var first;\n first = CheckBoxFilter.updateDateFilter(cols[0]);\n first.ignoreAccent = !isNullOrUndefined(first.ignoreAccent) ? first.ignoreAccent : false;\n if (first.type === 'date' || first.type === 'datetime') {\n predicate = getDatePredicate(first);\n }\n else {\n predicate = first.ejpredicate ? first.ejpredicate :\n new Predicate(first.field, first.operator, first.value, !CheckBoxFilter.getCaseValue(first), first.ignoreAccent);\n }\n for (var p = 1; p < len; p++) {\n cols[p] = CheckBoxFilter.updateDateFilter(cols[p]);\n if (len > 2 && p > 1 && cols[p].predicate === 'or') {\n if (cols[p].type === 'date' || cols[p].type === 'datetime') {\n predicate.predicates.push(getDatePredicate(cols[p]));\n }\n else {\n predicate.predicates.push(new Predicate(cols[p].field, cols[p].operator, cols[p].value, !CheckBoxFilter.getCaseValue(cols[p]), cols[p].ignoreAccent));\n }\n }\n else {\n if (cols[p].type === 'date' || cols[p].type === 'datetime') {\n predicate = predicate[(cols[p].predicate)](getDatePredicate(cols[p]), cols[p].ignoreAccent);\n }\n else {\n predicate = cols[p].ejpredicate ?\n predicate[cols[p].predicate](cols[p].ejpredicate) :\n predicate[(cols[p].predicate)](cols[p].field, cols[p].operator, cols[p].value, !CheckBoxFilter.getCaseValue(cols[p]), cols[p].ignoreAccent);\n }\n }\n }\n return predicate || null;\n };\n CheckBoxFilter.getCaseValue = function (filter) {\n if (isNullOrUndefined(filter.matchCase)) {\n return true;\n }\n else {\n return filter.matchCase;\n }\n };\n CheckBoxFilter.updateDateFilter = function (filter) {\n if ((filter.type === 'date' || filter.type === 'datetime' || filter.value instanceof Date)) {\n filter.type = filter.type || 'date';\n }\n return filter;\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n CheckBoxFilter.prototype.getModuleName = function () {\n return 'checkboxFilter';\n };\n return CheckBoxFilter;\n}());\nexport { CheckBoxFilter };\n","import { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { Query, DataManager, Predicate, Deferred, UrlAdaptor } from '@syncfusion/ej2-data';\nimport { setFormatter, getDatePredicate, getColumnByForeignKeyValue } from '../base/util';\nimport * as events from '../base/constant';\nimport { ValueFormatter } from '../services/value-formatter';\nimport { CheckBoxFilter } from '../actions/checkbox-filter';\n/**\n * Grid data module is used to generate query and data source.\n * @hidden\n */\nvar Data = /** @class */ (function () {\n /**\n * Constructor for data module.\n * @hidden\n */\n function Data(parent, serviceLocator) {\n this.dataState = { isPending: false, resolver: null, group: [] };\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n this.initDataManager();\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.rowsAdded, this.addRows, this);\n this.parent.on(events.rowsRemoved, this.removeRows, this);\n this.parent.on(events.dataSourceModified, this.initDataManager, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.updateData, this.crudActions, this);\n this.parent.on(events.addDeleteAction, this.getData, this);\n }\n /**\n * The function used to initialize dataManager and external query\n * @return {void}\n */\n Data.prototype.initDataManager = function () {\n var gObj = this.parent;\n this.dataManager = gObj.dataSource instanceof DataManager ? gObj.dataSource :\n (isNullOrUndefined(gObj.dataSource) ? new DataManager() : new DataManager(gObj.dataSource));\n gObj.query = gObj.query instanceof Query ? gObj.query : new Query();\n };\n /**\n * The function is used to generate updated Query from Grid model.\n * @return {Query}\n * @hidden\n */\n Data.prototype.generateQuery = function (skipPage) {\n var gObj = this.parent;\n var query = gObj.query.clone();\n this.filterQuery(query);\n this.searchQuery(query);\n this.aggregateQuery(query);\n this.sortQuery(query);\n this.pageQuery(query, skipPage);\n this.groupQuery(query);\n return query;\n };\n Data.prototype.aggregateQuery = function (query, isForeign) {\n this.parent.aggregates.forEach(function (row) {\n row.columns.forEach(function (column) {\n var types = column.type instanceof Array ? column.type : [column.type];\n types.forEach(function (type) { return query.aggregate(type.toLowerCase(), column.field); });\n });\n });\n return query;\n };\n Data.prototype.pageQuery = function (query, skipPage) {\n var gObj = this.parent;\n if ((gObj.allowPaging || gObj.enableVirtualization) && skipPage !== true) {\n gObj.pageSettings.currentPage = Math.max(1, gObj.pageSettings.currentPage);\n if (gObj.pageSettings.pageCount <= 0) {\n gObj.pageSettings.pageCount = 8;\n }\n if (gObj.pageSettings.pageSize <= 0) {\n gObj.pageSettings.pageSize = 12;\n }\n query.page(gObj.pageSettings.currentPage, gObj.pageSettings.pageSize);\n }\n return query;\n };\n Data.prototype.groupQuery = function (query) {\n var gObj = this.parent;\n if (gObj.allowGrouping && gObj.groupSettings.columns.length) {\n var columns = gObj.groupSettings.columns;\n for (var i = 0, len = columns.length; i < len; i++) {\n var column = this.getColumnByField(columns[i]);\n var isGrpFmt = column.enableGroupByFormat;\n var format = column.format;\n if (isGrpFmt) {\n query.group(columns[i], this.formatGroupColumn.bind(this), format);\n }\n else {\n query.group(columns[i], null);\n }\n }\n }\n return query;\n };\n Data.prototype.sortQuery = function (query) {\n var gObj = this.parent;\n if ((gObj.allowSorting || gObj.allowGrouping) && gObj.sortSettings.columns.length) {\n var columns = gObj.sortSettings.columns;\n var sortGrp = [];\n for (var i = columns.length - 1; i > -1; i--) {\n var col = this.getColumnByField(columns[i].field);\n if (col) {\n col.setSortDirection(columns[i].direction);\n }\n var fn = col.sortComparer && !this.isRemote() ? col.sortComparer.bind(col) : columns[i].direction;\n if (gObj.groupSettings.columns.indexOf(columns[i].field) === -1) {\n query.sortBy(col.field, fn);\n }\n else {\n sortGrp.push({ direction: fn, field: col.field });\n }\n }\n for (var i = 0, len = sortGrp.length; i < len; i++) {\n query.sortBy(sortGrp[i].field, sortGrp[i].direction);\n }\n }\n return query;\n };\n Data.prototype.searchQuery = function (query) {\n var _this = this;\n var sSettings = this.parent.searchSettings;\n var fields = sSettings.fields.length ? sSettings.fields : this.parent.getColumns().map(function (f) { return f.field; });\n var predicateList = [];\n if (this.parent.searchSettings.key.length) {\n var predicate = void 0;\n if (this.parent.getForeignKeyColumns().length) {\n fields.forEach(function (columnName) {\n var column = _this.getColumnByField(columnName);\n var sQuery = new Query();\n if (column.isForeignColumn()) {\n predicateList = _this.fGeneratePredicate(column, predicateList);\n }\n else {\n predicateList.push(new Predicate(column.field, sSettings.operator, sSettings.key, sSettings.ignoreCase, sSettings.ignoreAccent));\n }\n });\n query.where(Predicate.or(predicateList));\n }\n else {\n query.search(sSettings.key, fields, sSettings.operator, sSettings.ignoreCase, sSettings.ignoreAccent);\n }\n }\n return query;\n };\n Data.prototype.filterQuery = function (query, column, skipFoerign) {\n var gObj = this.parent;\n var predicateList = [];\n var fPredicate = {};\n var actualFilter = [];\n var foreignColumn = this.parent.getForeignKeyColumns();\n if (gObj.allowFiltering && gObj.filterSettings.columns.length) {\n var columns = column ? column : gObj.filterSettings.columns;\n var colType = {};\n for (var _i = 0, _a = gObj.columns; _i < _a.length; _i++) {\n var col = _a[_i];\n colType[col.field] = col.filter.type ? col.filter.type : gObj.filterSettings.type;\n }\n var checkBoxCols = [];\n var defaultFltrCols = [];\n for (var _b = 0, columns_1 = columns; _b < columns_1.length; _b++) {\n var col = columns_1[_b];\n if (colType[col.field] === 'CheckBox' || colType[col.field] === 'Excel') {\n checkBoxCols.push(col);\n }\n else {\n defaultFltrCols.push(col);\n }\n }\n if (checkBoxCols.length) {\n var excelPredicate = CheckBoxFilter.getPredicate(checkBoxCols);\n for (var _c = 0, _d = Object.keys(excelPredicate); _c < _d.length; _c++) {\n var prop = _d[_c];\n var col = getColumnByForeignKeyValue(prop, foreignColumn);\n if (col && !skipFoerign) {\n predicateList = this.fGeneratePredicate(col, predicateList);\n actualFilter.push(col);\n }\n else {\n predicateList.push(excelPredicate[prop]);\n }\n }\n }\n if (defaultFltrCols.length) {\n for (var _e = 0, defaultFltrCols_1 = defaultFltrCols; _e < defaultFltrCols_1.length; _e++) {\n var col = defaultFltrCols_1[_e];\n var column_1 = this.getColumnByField(col.field) ||\n getColumnByForeignKeyValue(col.field, this.parent.getForeignKeyColumns());\n var sType = column_1.type;\n if (getColumnByForeignKeyValue(col.field, foreignColumn) && !skipFoerign) {\n actualFilter.push(col);\n predicateList = this.fGeneratePredicate(column_1, predicateList);\n }\n else {\n if (sType !== 'date' && sType !== 'datetime') {\n predicateList.push(new Predicate(col.field, col.operator, col.value, !col.matchCase, this.parent.filterSettings.ignoreAccent));\n }\n else {\n predicateList.push(getDatePredicate(col));\n }\n }\n }\n }\n if (predicateList.length) {\n query.where(Predicate.and(predicateList));\n }\n else {\n this.parent.notify(events.showEmptyGrid, {});\n }\n }\n return query;\n };\n Data.prototype.fGeneratePredicate = function (col, predicateList) {\n var fPredicate = {};\n if (col) {\n this.parent.notify(events.generateQuery, { predicate: fPredicate, column: col });\n if (fPredicate.predicate.predicates.length) {\n predicateList.push(fPredicate.predicate);\n }\n }\n return predicateList;\n };\n /**\n * The function is used to get dataManager promise by executing given Query.\n * @param {Query} query - Defines the query which will execute along with data processing.\n * @return {Promise}\n * @hidden\n */\n Data.prototype.getData = function (args, query) {\n var _this = this;\n if (args === void 0) { args = { requestType: '' }; }\n var key = this.getKey(args.foreignKeyData &&\n Object.keys(args.foreignKeyData).length ?\n args.foreignKeyData : this.parent.getPrimaryKeyFieldNames());\n if (this.parent.dataSource && 'result' in this.parent.dataSource) {\n var def = this.eventPromise(args, query, key);\n return def.promise;\n }\n else {\n var crud = void 0;\n switch (args.requestType) {\n case 'delete':\n query = query ? query : this.generateQuery();\n var len = Object.keys(args.data).length;\n if (len === 1) {\n crud = this.dataManager.remove(key, args.data[0], null, query);\n }\n else {\n var changes = {\n addedRecords: [],\n deletedRecords: [],\n changedRecords: []\n };\n changes.deletedRecords = args.data;\n crud = this.dataManager.saveChanges(changes, key, null, query.requiresCount());\n }\n break;\n case 'save':\n query = query ? query : this.generateQuery();\n args.index = isNullOrUndefined(args.index) ? 0 : args.index;\n crud = this.dataManager.insert(args.data, null, query, args.index);\n break;\n }\n if (crud && !Array.isArray(crud) && !crud.hasOwnProperty('deletedRecords')) {\n return crud.then(function (result) {\n return _this.executeQuery(query);\n });\n }\n else {\n return this.executeQuery(query);\n }\n }\n };\n Data.prototype.executeQuery = function (query) {\n var _this = this;\n if (this.dataManager.ready) {\n var deferred_1 = new Deferred();\n var ready = this.dataManager.ready;\n ready.then(function (e) {\n _this.dataManager.executeQuery(query).then(function (result) {\n deferred_1.resolve(result);\n });\n }).catch(function (e) {\n deferred_1.reject(e);\n });\n return deferred_1.promise;\n }\n else {\n return this.dataManager.executeQuery(query);\n }\n };\n Data.prototype.formatGroupColumn = function (value, field) {\n var gObj = this.parent;\n var serviceLocator = this.serviceLocator;\n var column = this.getColumnByField(field);\n var date = value;\n if (!column.type) {\n column.type = date.getDay ? (date.getHours() > 0 || date.getMinutes() > 0 ||\n date.getSeconds() > 0 || date.getMilliseconds() > 0 ? 'datetime' : 'date') : typeof (value);\n }\n if (isNullOrUndefined(column.getFormatter())) {\n setFormatter(serviceLocator, column);\n }\n var formatVal = ValueFormatter.prototype.toView(value, column.getFormatter());\n return formatVal;\n };\n Data.prototype.crudActions = function (args) {\n var query = this.generateQuery();\n var promise = null;\n var pr = 'promise';\n var key = this.getKey(args.foreignKeyData &&\n Object.keys(args.foreignKeyData).length ? args.foreignKeyData :\n this.parent.getPrimaryKeyFieldNames());\n if (this.parent.dataSource && 'result' in this.parent.dataSource) {\n this.eventPromise(args, query, key);\n }\n switch (args.requestType) {\n case 'save':\n promise = this.dataManager.update(key, args.data, null, this.generateQuery());\n break;\n }\n args[pr] = promise;\n this.parent.notify(events.crudAction, args);\n };\n /** @hidden */\n Data.prototype.saveChanges = function (changes, key) {\n var query = this.generateQuery().requiresCount();\n if ('result' in this.parent.dataSource) {\n var state = void 0;\n state = this.getStateEventArgument(query);\n var deff = new Deferred();\n var args = {\n requestType: 'batchsave', changes: changes, key: key, query: query,\n endEdit: deff.resolve\n };\n this.setState({ isPending: true, resolver: deff.resolve });\n this.parent.trigger(events.dataSourceChanged, args);\n return deff.promise;\n }\n else {\n var promise = this.dataManager.saveChanges(changes, key, null, this.generateQuery().requiresCount());\n return promise;\n }\n };\n Data.prototype.getKey = function (keys) {\n if (keys && keys.length) {\n return keys[0];\n }\n return undefined;\n };\n /** @hidden */\n Data.prototype.isRemote = function () {\n return this.dataManager.dataSource.offline !== true && this.dataManager.dataSource.url !== undefined;\n };\n Data.prototype.addRows = function (e) {\n for (var i = e.records.length; i > 0; i--) {\n this.dataManager.dataSource.json.splice(e.toIndex, 0, e.records[i - 1]);\n }\n };\n Data.prototype.removeRows = function (e) {\n var json = this.dataManager.dataSource.json;\n this.dataManager.dataSource.json = json.filter(function (value, index) { return e.records.indexOf(value) === -1; });\n };\n Data.prototype.getColumnByField = function (field) {\n var col;\n return (this.parent.columnModel).some(function (column) {\n col = column;\n return column.field === field;\n }) && col;\n };\n Data.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.rowsAdded, this.addRows);\n this.parent.off(events.rowsRemoved, this.removeRows);\n this.parent.off(events.dataSourceModified, this.initDataManager);\n this.parent.off(events.dataSourceModified, this.destroy);\n this.parent.off(events.updateData, this.crudActions);\n this.parent.off(events.addDeleteAction, this.getData);\n };\n Data.prototype.getState = function () {\n return this.dataState;\n };\n Data.prototype.setState = function (state) {\n return this.dataState = state;\n };\n Data.prototype.getStateEventArgument = function (query) {\n var adaptr = new UrlAdaptor();\n var dm = new DataManager({ url: '', adaptor: new UrlAdaptor });\n var state = adaptr.processQuery(dm, query);\n var data = JSON.parse(state.data);\n return extend(data, state.pvtData);\n };\n Data.prototype.eventPromise = function (args, query, key) {\n var _this = this;\n var state;\n var dataArgs = args;\n state = this.getStateEventArgument(query);\n var def = new Deferred();\n var deff = new Deferred();\n if (args.requestType !== undefined && this.dataState.isDataChanged !== false) {\n state.action = args;\n if (args.requestType === 'save' || args.requestType === 'delete') {\n var editArgs = args;\n editArgs.key = key;\n editArgs.state = state;\n this.setState({ isPending: true, resolver: deff.resolve });\n dataArgs.endEdit = deff.resolve;\n this.parent.trigger(events.dataSourceChanged, editArgs);\n deff.promise.then(function (e) {\n _this.setState({ isPending: true, resolver: def.resolve, group: state.group, aggregates: state.aggregates });\n _this.parent.trigger(events.dataStateChange, state);\n });\n }\n else {\n this.setState({ isPending: true, resolver: def.resolve, group: state.group, aggregates: state.aggregates });\n this.parent.trigger(events.dataStateChange, state);\n }\n }\n else {\n this.setState({});\n def.resolve(this.parent.dataSource);\n }\n return def;\n };\n return Data;\n}());\nexport { Data };\n","import { merge } from '@syncfusion/ej2-base';\n/**\n * Row\n * @hidden\n */\nvar Row = /** @class */ (function () {\n function Row(options) {\n merge(this, options);\n }\n Row.prototype.clone = function () {\n var row = new Row({});\n merge(row, this);\n row.cells = this.cells.map(function (cell) { return cell.clone(); });\n return row;\n };\n return Row;\n}());\nexport { Row };\n","import { merge } from '@syncfusion/ej2-base';\n/**\n * Cell\n * @hidden\n */\nvar Cell = /** @class */ (function () {\n function Cell(options) {\n this.isSpanned = false;\n merge(this, options);\n }\n Cell.prototype.clone = function () {\n var cell = new Cell({});\n merge(cell, this);\n return cell;\n };\n return Cell;\n}());\nexport { Cell };\n","import { isNullOrUndefined, attributes } from '@syncfusion/ej2-base';\nimport { iterateArrayOrObject } from '../base/util';\nimport { CellType } from '../base/enum';\n/**\n * `CellMergeRender` module.\n * @hidden\n */\nvar CellMergeRender = /** @class */ (function () {\n function CellMergeRender(serviceLocator, parent) {\n this.serviceLocator = serviceLocator;\n this.parent = parent;\n }\n CellMergeRender.prototype.render = function (cellArgs, row, i, td) {\n var cellRendererFact = this.serviceLocator.getService('cellRendererFactory');\n var cellRenderer = cellRendererFact.getCellRenderer(row.cells[i].cellType || CellType.Data);\n var span = row.cells[i].cellSpan ? row.cells[i].cellSpan :\n (cellArgs.colSpan + i) <= row.cells.length ? cellArgs.colSpan : row.cells.length - i;\n var visible = 0;\n for (var j = i + 1; j < i + span && j < row.cells.length; j++) {\n if (row.cells[j].visible === false) {\n visible++;\n }\n else {\n row.cells[j].isSpanned = true;\n }\n }\n if (visible > 0) {\n for (var j = i + span; j < i + span + visible && j < row.cells.length; j++) {\n row.cells[j].isSpanned = true;\n }\n if (i + span + visible >= row.cells.length) {\n span -= (i + span + visible) - row.cells.length;\n }\n }\n if (row.cells[i].cellSpan) {\n row.data[cellArgs.column.field] = row.cells[i].spanText;\n td = cellRenderer.render(row.cells[i], row.data, { 'index': !isNullOrUndefined(row.index) ? row.index.toString() : '' });\n }\n if (span > 1) {\n attributes(td, { 'colSpan': span.toString(), 'aria-colSpan': span.toString() });\n }\n if (this.parent.enableColumnVirtualization && !row.cells[i].cellSpan &&\n !this.containsKey(cellArgs.column.field, cellArgs.data[cellArgs.column.field])) {\n this.backupMergeCells(cellArgs.column.field, cellArgs.data[cellArgs.column.field], cellArgs.colSpan);\n }\n return td;\n };\n CellMergeRender.prototype.backupMergeCells = function (fName, data, span) {\n this.setMergeCells(this.generteKey(fName, data), span);\n };\n CellMergeRender.prototype.generteKey = function (fname, data) {\n return fname + '__' + data.toString();\n };\n CellMergeRender.prototype.splitKey = function (key) {\n return key.split('__');\n };\n CellMergeRender.prototype.containsKey = function (fname, data) {\n return this.getMergeCells().hasOwnProperty(this.generteKey(fname, data));\n };\n CellMergeRender.prototype.getMergeCells = function () {\n return this.parent.mergeCells;\n };\n CellMergeRender.prototype.setMergeCells = function (key, span) {\n this.parent.mergeCells[key] = span;\n };\n CellMergeRender.prototype.updateVirtualCells = function (rows) {\n var mCells = this.getMergeCells();\n for (var _i = 0, _a = Object.keys(mCells); _i < _a.length; _i++) {\n var key = _a[_i];\n var value = mCells[key];\n var merge = this.splitKey(key);\n var columnIndex = this.getIndexFromAllColumns(merge[0]);\n var vColumnIndices = this.parent.getColumnIndexesInView();\n var span = value - (vColumnIndices[0] - columnIndex);\n if (columnIndex < vColumnIndices[0] && span > 1) {\n for (var _b = 0, rows_1 = rows; _b < rows_1.length; _b++) {\n var row = rows_1[_b];\n if (row.data[merge[0]].toString() === merge[1].toString()) {\n row.cells[0].cellSpan = span;\n row.cells[0].spanText = merge[1];\n break;\n }\n }\n }\n }\n return rows;\n };\n CellMergeRender.prototype.getIndexFromAllColumns = function (field) {\n var index = iterateArrayOrObject(this.parent.getVisibleColumns(), function (item, index) {\n if (item.field === field) {\n return index;\n }\n return undefined;\n })[0];\n return index;\n };\n return CellMergeRender;\n}());\nexport { CellMergeRender };\n","import { isNullOrUndefined, extend, getValue, addClass } from '@syncfusion/ej2-base';\nimport { createElement, attributes as addAttributes } from '@syncfusion/ej2-base';\nimport { rowDataBound, queryCellInfo } from '../base/constant';\nimport { setStyleAndAttributes } from '../base/util';\nimport { CellType } from '../base/enum';\nimport { CellMergeRender } from './cell-merge-renderer';\n/**\n * RowRenderer class which responsible for building row content.\n * @hidden\n */\nvar RowRenderer = /** @class */ (function () {\n function RowRenderer(serviceLocator, cellType, parent) {\n this.element = createElement('tr', { attrs: { role: 'row' } });\n this.cellType = cellType;\n this.serviceLocator = serviceLocator;\n this.parent = parent;\n }\n /**\n * Function to render the row content based on Column[] and data.\n * @param {Column[]} columns\n * @param {Object} data?\n * @param {{[x:string]:Object}} attributes?\n * @param {string} rowTemplate?\n */\n RowRenderer.prototype.render = function (row, columns, attributes, rowTemplate, cloneNode) {\n return this.refreshRow(row, columns, attributes, rowTemplate, cloneNode);\n };\n /**\n * Function to refresh the row content based on Column[] and data.\n * @param {Column[]} columns\n * @param {Object} data?\n * @param {{[x:string]:Object}} attributes?\n * @param {string} rowTemplate?\n */\n RowRenderer.prototype.refresh = function (row, columns, isChanged, attributes, rowTemplate) {\n if (isChanged) {\n row.data = extend({}, row.changes);\n this.refreshMergeCells(row);\n }\n var node = this.parent.element.querySelector('[data-uid=' + row.uid + ']');\n var tr = this.refreshRow(row, columns, attributes, rowTemplate);\n var cells = [].slice.call(tr.cells);\n node.innerHTML = '';\n for (var _i = 0, cells_1 = cells; _i < cells_1.length; _i++) {\n var cell = cells_1[_i];\n node.appendChild(cell);\n }\n };\n RowRenderer.prototype.refreshRow = function (row, columns, attributes, rowTemplate, cloneNode) {\n var tr = !isNullOrUndefined(cloneNode) ? cloneNode : this.element.cloneNode();\n var rowArgs = { data: row.data };\n var cellArgs = { data: row.data };\n var attrCopy = extend({}, attributes, {});\n var chekBoxEnable = this.parent.getColumns().filter(function (col) { return col.type === 'checkbox' && col.field; })[0];\n var value = false;\n if (chekBoxEnable) {\n value = getValue(chekBoxEnable.field, rowArgs.data);\n }\n if (row.isDataRow) {\n row.isSelected = this.parent.getSelectedRowIndexes().indexOf(row.index) > -1 || value;\n }\n if (row.isDataRow && this.parent.isCheckBoxSelection\n && this.parent.checkAllRows === 'Check' && this.parent.enableVirtualization) {\n row.isSelected = true;\n if (this.parent.getSelectedRowIndexes().indexOf(row.index) === -1) {\n this.parent.getSelectedRowIndexes().push(row.index);\n }\n }\n this.buildAttributeFromRow(tr, row);\n addAttributes(tr, attrCopy);\n setStyleAndAttributes(tr, row.attributes);\n var cellRendererFact = this.serviceLocator.getService('cellRendererFactory');\n for (var i = 0, len = row.cells.length; i < len; i++) {\n var cell = row.cells[i];\n cell.isSelected = row.isSelected;\n var cellRenderer = cellRendererFact.getCellRenderer(row.cells[i].cellType || CellType.Data);\n var attrs = { 'index': !isNullOrUndefined(row.index) ? row.index.toString() : '' };\n if (row.isExpand && row.cells[i].cellType === CellType.DetailExpand) {\n attrs['class'] = 'e-detailrowexpand';\n }\n var td = cellRenderer.render(row.cells[i], row.data, attrs);\n if (row.cells[i].cellType !== CellType.Filter) {\n if (row.cells[i].cellType === CellType.Data || row.cells[i].cellType === CellType.CommandColumn) {\n this.parent.trigger(queryCellInfo, extend(cellArgs, {\n cell: td, column: cell.column, colSpan: 1,\n foreignKeyData: row.cells[i].foreignKeyData\n }));\n if (cellArgs.colSpan > 1 || row.cells[i].cellSpan > 1) {\n var cellMerge = new CellMergeRender(this.serviceLocator, this.parent);\n td = cellMerge.render(cellArgs, row, i, td);\n }\n }\n if (!row.cells[i].isSpanned) {\n tr.appendChild(td);\n }\n }\n }\n var args = { row: tr, rowHeight: this.parent.rowHeight };\n if (row.isDataRow) {\n this.parent.trigger(rowDataBound, extend(rowArgs, args));\n }\n if (this.parent.enableVirtualization) {\n rowArgs.rowHeight = this.parent.rowHeight;\n }\n if (rowArgs.rowHeight) {\n tr.style.height = rowArgs.rowHeight + 'px';\n }\n else if (this.parent.rowHeight && tr.querySelector('.e-headercell')) {\n tr.style.height = this.parent.rowHeight + 'px';\n }\n if (row.cssClass) {\n tr.classList.add(row.cssClass);\n }\n if (this.parent.element.scrollHeight > this.parent.height && this.parent.aggregates.length) {\n for (var i = 0; i < this.parent.aggregates.length; i++) {\n var property = 'properties';\n var column = 'columns';\n if (this.parent.aggregates[i][property][column][0].footerTemplate) {\n var summarycell = tr.querySelectorAll('.e-summarycell');\n if (summarycell.length) {\n var lastSummaryCell = (summarycell[summarycell.length - 1]);\n addClass([lastSummaryCell], ['e-lastsummarycell']);\n }\n }\n }\n }\n return tr;\n };\n RowRenderer.prototype.refreshMergeCells = function (row) {\n for (var _i = 0, _a = row.cells; _i < _a.length; _i++) {\n var cell = _a[_i];\n cell.isSpanned = false;\n }\n return row;\n };\n /**\n * Function to check and add alternative row css class.\n * @param {Element} tr\n * @param {{[x:string]:Object}} attr\n */\n RowRenderer.prototype.buildAttributeFromRow = function (tr, row) {\n var attr = {};\n var prop = { 'rowindex': 'aria-rowindex', 'dataUID': 'data-uid', 'ariaSelected': 'aria-selected' };\n var classes = [];\n if (row.isDataRow) {\n classes.push('e-row');\n }\n if (row.isAltRow) {\n classes.push('e-altrow');\n }\n if (!isNullOrUndefined(row.index)) {\n attr[prop.rowindex] = row.index;\n }\n if (row.rowSpan) {\n attr.rowSpan = row.rowSpan;\n }\n if (row.uid) {\n attr[prop.dataUID] = row.uid;\n }\n if (row.isSelected) {\n attr[prop.ariaSelected] = true;\n }\n if (row.visible === false) {\n classes.push('e-hide');\n }\n attr.class = classes;\n setStyleAndAttributes(tr, attr);\n };\n return RowRenderer;\n}());\nexport { RowRenderer };\n","import { isNullOrUndefined, getValue, setValue } from '@syncfusion/ej2-base';\nimport { Row } from '../models/row';\nimport { CellType } from '../base/enum';\nimport { Cell } from '../models/cell';\nimport { getUid } from '../base/util';\nimport { getForeignData } from '../../grid/base/util';\n/**\n * RowModelGenerator is used to generate grid data rows.\n * @hidden\n */\nvar RowModelGenerator = /** @class */ (function () {\n /**\n * Constructor for header renderer module\n */\n function RowModelGenerator(parent) {\n this.parent = parent;\n }\n RowModelGenerator.prototype.generateRows = function (data, args) {\n var rows = [];\n var startIndex = this.parent.enableVirtualization ? args.startIndex : 0;\n for (var i = 0, len = Object.keys(data).length; i < len; i++, startIndex++) {\n rows[i] = this.generateRow(data[i], startIndex);\n }\n return rows;\n };\n RowModelGenerator.prototype.ensureColumns = function () {\n //TODO: generate dummy column for group, detail here;\n var cols = [];\n if (this.parent.detailTemplate || this.parent.childGrid) {\n cols.push(this.generateCell({}, null, CellType.DetailExpand));\n }\n return cols;\n };\n RowModelGenerator.prototype.generateRow = function (data, index, cssClass, indent) {\n var options = {};\n options.foreignKeyData = {};\n options.uid = getUid('grid-row');\n options.data = data;\n options.index = index;\n options.indent = indent;\n options.isDataRow = true;\n options.isExpand = false;\n options.cssClass = cssClass;\n options.isAltRow = this.parent.enableAltRow ? index % 2 !== 0 : false;\n options.isSelected = this.parent.getSelectedRowIndexes().indexOf(index) > -1;\n this.refreshForeignKeyRow(options);\n var cells = this.ensureColumns();\n var row = new Row(options);\n row.cells = cells.concat(this.generateCells(options));\n return row;\n };\n RowModelGenerator.prototype.refreshForeignKeyRow = function (options) {\n this.parent.getForeignKeyColumns().forEach(function (col) {\n setValue(col.field, getForeignData(col, options.data), options.foreignKeyData);\n });\n };\n RowModelGenerator.prototype.generateCells = function (options) {\n var _this = this;\n var dummies = this.parent.getColumns();\n var tmp = [];\n dummies.forEach(function (dummy, index) {\n return tmp.push(_this.generateCell(dummy, options.uid, isNullOrUndefined(dummy.commands) ? undefined : CellType.CommandColumn, null, index, options.foreignKeyData));\n });\n return tmp;\n };\n RowModelGenerator.prototype.generateCell = function (column, rowId, cellType, colSpan, oIndex, foreignKeyData) {\n var opt = {\n 'visible': column.visible,\n 'isDataCell': !isNullOrUndefined(column.field || column.template),\n 'isTemplate': !isNullOrUndefined(column.template),\n 'rowID': rowId,\n 'column': column,\n 'cellType': !isNullOrUndefined(cellType) ? cellType : CellType.Data,\n 'colSpan': colSpan,\n 'commands': column.commands,\n 'isForeignKey': column.isForeignColumn && column.isForeignColumn(),\n 'foreignKeyData': column.isForeignColumn && column.isForeignColumn() && getValue(column.field, foreignKeyData)\n };\n if (opt.isDataCell || opt.column.type === 'checkbox') {\n opt.index = this.parent.getColumnIndexByField(column.field);\n }\n return new Cell(opt);\n };\n RowModelGenerator.prototype.refreshRows = function (input) {\n var _this = this;\n input.forEach(function (row) {\n _this.refreshForeignKeyRow(row);\n row.cells = _this.generateCells(row);\n });\n return input;\n };\n return RowModelGenerator;\n}());\nexport { RowModelGenerator };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Row } from '../models/row';\nimport { Column } from '../models/column';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { calculateAggregate } from '../base/util';\nimport { CellType } from '../base/enum';\nimport { Cell } from '../models/cell';\n/**\n * Summary row model generator\n * @hidden\n */\nvar SummaryModelGenerator = /** @class */ (function () {\n /**\n * Constructor for Summary row model generator\n */\n function SummaryModelGenerator(parent) {\n this.parent = parent;\n }\n SummaryModelGenerator.prototype.getData = function () {\n var _this = this;\n var rows = [];\n this.parent.aggregates.slice().forEach(function (row) {\n var columns = row.columns.filter(function (column) {\n return !(column.footerTemplate || column.groupFooterTemplate || column.groupCaptionTemplate)\n || _this.columnSelector(column);\n });\n if (columns.length) {\n rows.push({ columns: columns });\n }\n });\n return rows;\n };\n SummaryModelGenerator.prototype.columnSelector = function (column) {\n return column.footerTemplate !== undefined;\n };\n SummaryModelGenerator.prototype.getColumns = function (start, end) {\n var columns = [];\n if (this.parent.allowGrouping) {\n this.parent.groupSettings.columns.forEach(function (value) { return columns.push(new Column({})); });\n }\n if (this.parent.detailTemplate || !isNullOrUndefined(this.parent.childGrid)) {\n columns.push(new Column({}));\n }\n columns.push.apply(columns, this.parent.getColumns());\n return isNullOrUndefined(start) ? columns : columns.slice(start, end);\n };\n SummaryModelGenerator.prototype.generateRows = function (input, args, start, end) {\n var _this = this;\n if (this.parent.currentViewData.length === 0) {\n return [];\n }\n var data = this.buildSummaryData(input, args);\n var rows = [];\n this.getData().forEach(function (row, index) {\n rows.push(_this.getGeneratedRow(row, data[index], args ? args.level : undefined, start, end));\n });\n return rows;\n };\n SummaryModelGenerator.prototype.getGeneratedRow = function (summaryRow, data, raw, start, end) {\n var _this = this;\n var tmp = [];\n var indents = this.getIndentByLevel(raw);\n var isDetailGridAlone = !isNullOrUndefined(this.parent.childGrid);\n var indentLength = this.parent.groupSettings.columns.length + (this.parent.detailTemplate ||\n !isNullOrUndefined(this.parent.childGrid) ? 1 : 0);\n this.getColumns(start, end).forEach(function (value, index) { return tmp.push(_this.getGeneratedCell(value, summaryRow, index >= indentLength ? _this.getCellType() : CellType.Indent, indents[index], isDetailGridAlone)); });\n var row = new Row({ data: data, attributes: { class: 'e-summaryrow' } });\n row.cells = tmp;\n row.visible = tmp.some(function (cell) { return cell.isDataCell && cell.visible; });\n return row;\n };\n SummaryModelGenerator.prototype.getGeneratedCell = function (column, summaryRow, cellType, indent, isDetailGridAlone) {\n //Get the summary column by display\n var sColumn = summaryRow.columns.filter(function (scolumn) { return scolumn.columnName === column.field; })[0];\n var attrs = { 'style': { 'textAlign': column.textAlign } };\n if (indent) {\n attrs.class = indent;\n }\n if (isNullOrUndefined(indent) && isDetailGridAlone) {\n attrs.class = 'e-detailindentcelltop';\n }\n var opt = {\n 'visible': column.visible,\n 'isDataCell': !isNullOrUndefined(sColumn),\n 'isTemplate': sColumn && !isNullOrUndefined(sColumn.footerTemplate\n || sColumn.groupFooterTemplate || sColumn.groupCaptionTemplate),\n 'column': sColumn || {},\n 'attributes': attrs,\n 'cellType': cellType\n };\n return new Cell(opt);\n };\n SummaryModelGenerator.prototype.buildSummaryData = function (data, args) {\n var _this = this;\n var dummy = [];\n var summaryRows = this.getData();\n var single = {};\n var key = '';\n summaryRows.forEach(function (row) {\n single = {};\n row.columns.forEach(function (column) {\n single = _this.setTemplate(column, (args && args.aggregates) ? args : data, single);\n });\n dummy.push(single);\n });\n return dummy;\n };\n SummaryModelGenerator.prototype.getIndentByLevel = function (data) {\n return this.parent.groupSettings.columns.map(function () { return 'e-indentcelltop'; });\n };\n SummaryModelGenerator.prototype.setTemplate = function (column, data, single) {\n var _this = this;\n var types = column.type;\n var helper = {};\n var formatFn = column.getFormatter() || (function () { return function (a) { return a; }; })();\n var group = data;\n if (!(types instanceof Array)) {\n types = [column.type];\n }\n types.forEach(function (type) {\n var key = column.field + ' - ' + type.toLowerCase();\n var disp = column.columnName;\n var val = type !== 'Custom' && group.aggregates && key in group.aggregates ? group.aggregates[key] :\n calculateAggregate(type, group.aggregates ? group : data, column, _this.parent);\n single[disp] = single[disp] || {};\n single[disp][key] = val;\n single[disp][type] = !isNullOrUndefined(val) ? formatFn(val) : ' ';\n if (group.field) {\n single[disp].field = group.field;\n single[disp].key = group.key;\n }\n });\n helper.format = column.getFormatter();\n column.setTemplate(helper);\n return single;\n };\n SummaryModelGenerator.prototype.getCellType = function () {\n return CellType.Summary;\n };\n return SummaryModelGenerator;\n}());\nexport { SummaryModelGenerator };\nvar GroupSummaryModelGenerator = /** @class */ (function (_super) {\n __extends(GroupSummaryModelGenerator, _super);\n function GroupSummaryModelGenerator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n GroupSummaryModelGenerator.prototype.columnSelector = function (column) {\n return column.groupFooterTemplate !== undefined;\n };\n GroupSummaryModelGenerator.prototype.getIndentByLevel = function (level) {\n if (level === void 0) { level = this.parent.groupSettings.columns.length; }\n return this.parent.groupSettings.columns.map(function (v, indx) { return indx <= level - 1 ? '' : 'e-indentcelltop'; });\n };\n GroupSummaryModelGenerator.prototype.getCellType = function () {\n return CellType.GroupSummary;\n };\n return GroupSummaryModelGenerator;\n}(SummaryModelGenerator));\nexport { GroupSummaryModelGenerator };\nvar CaptionSummaryModelGenerator = /** @class */ (function (_super) {\n __extends(CaptionSummaryModelGenerator, _super);\n function CaptionSummaryModelGenerator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n CaptionSummaryModelGenerator.prototype.columnSelector = function (column) {\n return column.groupCaptionTemplate !== undefined;\n };\n CaptionSummaryModelGenerator.prototype.getData = function () {\n var initVal = { columns: [] };\n return [_super.prototype.getData.call(this).reduce(function (prev, cur) {\n prev.columns = prev.columns.concat(cur.columns);\n return prev;\n }, initVal)];\n };\n CaptionSummaryModelGenerator.prototype.isEmpty = function () {\n return (this.getData()[0].columns || []).length === 0;\n };\n CaptionSummaryModelGenerator.prototype.getCellType = function () {\n return CellType.CaptionSummary;\n };\n return CaptionSummaryModelGenerator;\n}(SummaryModelGenerator));\nexport { CaptionSummaryModelGenerator };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Row } from '../models/row';\nimport { isNullOrUndefined, extend, setValue } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\nimport { RowModelGenerator } from '../services/row-model-generator';\nimport { GroupSummaryModelGenerator, CaptionSummaryModelGenerator } from '../services/summary-model-generator';\nimport { getForeignData } from '../../grid/base/util';\n/**\n * GroupModelGenerator is used to generate group caption rows and data rows.\n * @hidden\n */\nvar GroupModelGenerator = /** @class */ (function (_super) {\n __extends(GroupModelGenerator, _super);\n function GroupModelGenerator(parent) {\n var _this = _super.call(this, parent) || this;\n _this.rows = [];\n _this.index = 0;\n _this.parent = parent;\n _this.summaryModelGen = new GroupSummaryModelGenerator(parent);\n _this.captionModelGen = new CaptionSummaryModelGenerator(parent);\n return _this;\n }\n GroupModelGenerator.prototype.generateRows = function (data, args) {\n if (this.parent.groupSettings.columns.length === 0) {\n return _super.prototype.generateRows.call(this, data, args);\n }\n this.rows = [];\n this.index = this.parent.enableVirtualization ? (this.parent.pageSettings.currentPage - 1) * data.records.length : 0;\n for (var i = 0, len = data.length; i < len; i++) {\n this.getGroupedRecords(0, data[i], data.level);\n }\n this.index = 0;\n return this.rows;\n };\n GroupModelGenerator.prototype.getGroupedRecords = function (index, data, raw) {\n var level = raw;\n if (isNullOrUndefined(data.items)) {\n if (isNullOrUndefined(data.GroupGuid)) {\n this.rows = this.rows.concat(this.generateDataRows(data, index));\n }\n else {\n for (var j = 0, len = data.length; j < len; j++) {\n this.getGroupedRecords(index, data[j], data.level);\n }\n }\n }\n else {\n this.rows = this.rows.concat(this.generateCaptionRow(data, index));\n if (data.items && data.items.length) {\n this.getGroupedRecords(index + 1, data.items, data.items.level);\n }\n if (this.parent.aggregates.length) {\n (_a = this.rows).push.apply(_a, this.summaryModelGen.generateRows(data, { level: level }));\n }\n }\n var _a;\n };\n GroupModelGenerator.prototype.getCaptionRowCells = function (field, indent, data) {\n var _this = this;\n var cells = [];\n var visibles = [];\n var column = this.parent.getColumnByField(field);\n var indexes = this.parent.getColumnIndexesInView();\n if (this.parent.enableColumnVirtualization) {\n column = this.parent.columns.filter(function (c) { return c.field === field; })[0];\n }\n var groupedLen = this.parent.groupSettings.columns.length;\n var gObj = this.parent;\n if (!this.parent.enableColumnVirtualization || indexes.indexOf(indent) !== -1) {\n for (var i = 0; i < indent; i++) {\n cells.push(this.generateIndentCell());\n }\n cells.push(this.generateCell({}, null, CellType.Expand));\n }\n indent = this.parent.enableColumnVirtualization ? 1 :\n (this.parent.getVisibleColumns().length + groupedLen + (gObj.detailTemplate || gObj.childGrid ? 1 : 0) -\n indent + (this.parent.getVisibleColumns().length ? -1 : 0));\n //Captionsummary cells will be added here. \n if (this.parent.aggregates.length && !this.captionModelGen.isEmpty()) {\n var captionCells = this.captionModelGen.generateRows(data)[0];\n extend(data, captionCells.data);\n var cIndex_1 = 0;\n captionCells.cells.some(function (cell, index) { cIndex_1 = index; return cell.visible && cell.isDataCell; });\n visibles = captionCells.cells.slice(cIndex_1).filter(function (cell) { return cell.visible; });\n if (captionCells.visible && visibles[0].column.field === this.parent.getVisibleColumns()[0].field) {\n visibles = visibles.slice(1);\n }\n if (this.parent.getVisibleColumns().length === 1) {\n visibles = [];\n }\n indent = indent - visibles.length;\n }\n var cols = (!this.parent.enableColumnVirtualization ? [column] : this.parent.getColumns());\n var wFlag = true;\n cols.forEach(function (col, index) {\n var tmpFlag = wFlag && indexes.indexOf(indent) !== -1;\n if (tmpFlag) {\n wFlag = false;\n }\n var cellType = !_this.parent.enableColumnVirtualization || tmpFlag ?\n CellType.GroupCaption : CellType.GroupCaptionEmpty;\n indent = _this.parent.enableColumnVirtualization && cellType === CellType.GroupCaption ? indent + groupedLen : indent;\n cells.push(_this.generateCell(column, null, cellType, indent));\n });\n cells.push.apply(cells, visibles);\n return cells;\n };\n GroupModelGenerator.prototype.generateCaptionRow = function (data, indent) {\n var options = {};\n var tmp = [];\n var col = this.parent.getColumnByField(data.field);\n options.data = extend({}, data);\n if (col) {\n options.data.field = data.field;\n }\n options.isDataRow = false;\n var row = new Row(options);\n row.indent = indent;\n this.getForeignKeyData(row);\n row.cells = this.getCaptionRowCells(data.field, indent, row.data);\n return row;\n };\n GroupModelGenerator.prototype.getForeignKeyData = function (row) {\n var data = row.data;\n var col = this.parent.getColumnByField(data.field);\n if (col && col.isForeignColumn && col.isForeignColumn()) {\n setValue('foreignKey', col.valueAccessor(col.foreignKeyValue, getForeignData(col, {}, data.key)[0], col), row.data);\n }\n };\n GroupModelGenerator.prototype.generateDataRows = function (data, indent) {\n var rows = [];\n var indexes = this.parent.getColumnIndexesInView();\n for (var i = 0, len = data.length; i < len; i++) {\n rows[i] = this.generateRow(data[i], this.index, i ? undefined : 'e-firstchildrow', indent);\n for (var j = 0; j < indent; j++) {\n if (this.parent.enableColumnVirtualization && indexes.indexOf(indent) === -1) {\n continue;\n }\n rows[i].cells.unshift(this.generateIndentCell());\n }\n this.index++;\n }\n return rows;\n };\n GroupModelGenerator.prototype.generateIndentCell = function () {\n return this.generateCell({}, null, CellType.Indent);\n };\n GroupModelGenerator.prototype.refreshRows = function (input) {\n var _this = this;\n var indexes = this.parent.getColumnIndexesInView();\n input.forEach(function (row) {\n if (row.isDataRow) {\n row.cells = _this.generateCells(row);\n for (var j = 0; j < row.indent; j++) {\n if (_this.parent.enableColumnVirtualization && indexes.indexOf(row.indent) === -1) {\n continue;\n }\n row.cells.unshift(_this.generateIndentCell());\n }\n }\n else {\n var cRow = _this.generateCaptionRow(row.data, row.indent);\n row.cells = cRow.cells;\n }\n });\n return input;\n };\n return GroupModelGenerator;\n}(RowModelGenerator));\nexport { GroupModelGenerator };\n","import { Droppable } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { createElement, setStyleAttribute, remove } from '@syncfusion/ej2-base';\nimport { getUpdateUsingRaf, appendChildren } from '../base/util';\nimport * as events from '../base/constant';\nimport { RowRenderer } from './row-renderer';\nimport { CellMergeRender } from './cell-merge-renderer';\nimport { RowModelGenerator } from '../services/row-model-generator';\nimport { GroupModelGenerator } from '../services/group-model-generator';\nimport { getScrollBarWidth } from '../base/util';\n/**\n * Content module is used to render grid content\n * @hidden\n */\nvar ContentRender = /** @class */ (function () {\n /**\n * Constructor for content renderer module\n */\n function ContentRender(parent, serviceLocator) {\n var _this = this;\n this.rows = [];\n this.freezeRows = [];\n this.movableRows = [];\n this.isLoaded = true;\n this.drop = function (e) {\n _this.parent.notify(events.columnDrop, { target: e.target, droppedElement: e.droppedElement });\n remove(e.droppedElement);\n };\n this.rafCallback = function (args) {\n var arg = args;\n return function () {\n _this.ariaService.setBusy(_this.getPanel().firstChild, false);\n if (_this.parent.isDestroyed) {\n return;\n }\n var rows = _this.rows.slice(0);\n if (_this.parent.getFrozenColumns() !== 0) {\n rows = args.isFrozen ? _this.freezeRows : _this.movableRows;\n }\n _this.parent.notify(events.contentReady, { rows: rows, args: arg });\n if (_this.isLoaded) {\n _this.parent.trigger(events.dataBound, {});\n if (_this.parent.allowTextWrap) {\n _this.parent.notify(events.freezeRender, { case: 'textwrap' });\n }\n }\n if (arg) {\n var action = (arg.requestType || '').toLowerCase() + '-complete';\n _this.parent.notify(action, arg);\n }\n if (_this.isLoaded) {\n _this.parent.hideSpinner();\n }\n };\n };\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n this.ariaService = this.serviceLocator.getService('ariaService');\n this.generator = this.getModelGenerator();\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.columnVisibilityChanged, this.setVisible, this);\n this.parent.on(events.colGroupRefresh, this.colGroupRefresh, this);\n this.parent.on(events.uiUpdate, this.enableAfterRender, this);\n }\n /**\n * The function is used to render grid content div\n */\n ContentRender.prototype.renderPanel = function () {\n var gObj = this.parent;\n var div = createElement('div', { className: 'e-gridcontent' });\n var innerDiv = createElement('div', {\n className: 'e-content'\n });\n this.ariaService.setOptions(innerDiv, { busy: false });\n div.appendChild(innerDiv);\n this.setPanel(div);\n gObj.element.appendChild(div);\n };\n /**\n * The function is used to render grid content table\n */\n ContentRender.prototype.renderTable = function () {\n var contentDiv = this.getPanel();\n contentDiv.appendChild(this.createContentTable('_content_table'));\n this.setTable(contentDiv.querySelector('.e-table'));\n this.ariaService.setOptions(this.getTable(), {\n multiselectable: this.parent.selectionSettings.type === 'Multiple'\n });\n this.initializeContentDrop();\n if (this.parent.frozenRows) {\n this.parent.getHeaderContent().classList.add('e-frozenhdrcont');\n }\n };\n /**\n * The function is used to create content table elements\n * @return {Element}\n * @hidden\n */\n ContentRender.prototype.createContentTable = function (id) {\n var innerDiv = this.getPanel().firstChild;\n var table = createElement('table', {\n className: 'e-table', attrs: {\n cellspacing: '0.25px', role: 'grid',\n id: this.parent.element.id + id\n }\n });\n this.setColGroup(this.parent.element.querySelector('.e-gridheader').querySelector('colgroup').cloneNode(true));\n table.appendChild(this.getColGroup());\n table.appendChild(createElement('tbody'));\n innerDiv.appendChild(table);\n return innerDiv;\n };\n ContentRender.prototype.splitRows = function (idx) {\n if (this.parent.getFrozenColumns()) {\n if (idx === 0) {\n this.freezeRows = this.rows;\n this.freezeRowElements = this.rowElements;\n }\n else {\n this.movableRows = this.rows;\n }\n }\n };\n /**\n * Refresh the content of the Grid.\n * @return {void}\n */\n // tslint:disable-next-line:max-func-body-length\n ContentRender.prototype.refreshContentRows = function (args) {\n var _this = this;\n if (args === void 0) { args = {}; }\n var gObj = this.parent;\n if (gObj.currentViewData.length === 0) {\n return;\n }\n var dataSource = gObj.currentViewData;\n var frag = document.createDocumentFragment();\n var hdrfrag = document.createDocumentFragment();\n var columns = gObj.getColumns();\n var tr;\n var hdrTbody;\n var frzCols = gObj.getFrozenColumns();\n var row = new RowRenderer(this.serviceLocator, null, this.parent);\n this.rowElements = [];\n this.rows = [];\n var fCont = this.getPanel().querySelector('.e-frozencontent');\n var mCont = this.getPanel().querySelector('.e-movablecontent');\n var cont = this.getPanel().querySelector('.e-content');\n var modelData = this.generator.generateRows(dataSource, args);\n if (isNullOrUndefined(modelData[0].cells[0])) {\n mCont.querySelector('tbody').innerHTML = '';\n }\n var idx = modelData[0].cells[0].index;\n // tslint:disable-next-line:no-any\n if (this.parent.registeredTemplate && this.parent.registeredTemplate.template) {\n this.parent.destroyTemplate(['template']);\n }\n if (this.parent.enableColumnVirtualization) {\n var cellMerge = new CellMergeRender(this.serviceLocator, this.parent);\n cellMerge.updateVirtualCells(modelData);\n }\n if (frzCols && idx >= frzCols) {\n this.tbody = mCont.querySelector('tbody');\n }\n else {\n this.tbody = this.getTable().querySelector('tbody');\n }\n for (var i = 0, len = modelData.length; i < len; i++) {\n if (!gObj.rowTemplate) {\n tr = row.render(modelData[i], columns);\n if (gObj.frozenRows && i < gObj.frozenRows) {\n hdrfrag.appendChild(tr);\n }\n else {\n frag.appendChild(tr);\n }\n }\n else {\n var elements = gObj.getRowTemplate()(extend({ index: i }, dataSource[i]), gObj, 'rowTemplate');\n if (elements[0].tagName === 'TBODY') {\n for (var j = 0; j < elements.length; j++) {\n var isTR = elements[j].nodeName.toLowerCase() === 'tr';\n if (isTR || (elements[j].querySelectorAll && elements[j].querySelectorAll('tr').length)) {\n tr = isTR ? elements[j] : elements[j].querySelector('tr');\n }\n }\n if (gObj.frozenRows && i < gObj.frozenRows) {\n hdrfrag.appendChild(tr);\n }\n else {\n frag.appendChild(tr);\n }\n }\n else {\n if (gObj.frozenRows && i < gObj.frozenRows) {\n tr = appendChildren(hdrfrag, elements);\n }\n else {\n // frag.appendChild(tr);\n tr = appendChildren(frag, elements);\n }\n }\n }\n this.rows.push(modelData[i]);\n if (modelData[i].isDataRow) {\n //detailrowvisible \n var td = tr.querySelectorAll('.e-rowcell:not(.e-hide)')[0];\n if (td) {\n td.classList.add('e-detailrowvisible');\n }\n this.rowElements.push(tr);\n }\n this.ariaService.setOptions(this.getTable(), { colcount: gObj.getColumns().length.toString() });\n }\n this.splitRows(idx);\n if (gObj.frozenRows) {\n hdrTbody = frzCols ? gObj.getHeaderContent().querySelector(idx === 0 ? '.e-frozenheader'\n : '.e-movableheader').querySelector('tbody') : gObj.getHeaderTable().querySelector('tbody');\n hdrTbody.innerHTML = '';\n hdrTbody.appendChild(hdrfrag);\n }\n if (gObj.frozenRows && idx === 0 && cont.offsetHeight === Number(gObj.height)) {\n cont.style.height = (cont.offsetHeight - hdrTbody.offsetHeight) + 'px';\n }\n if (frzCols && idx === 0) {\n this.getPanel().firstChild.style.overflowY = 'hidden';\n }\n args.rows = this.rows.slice(0);\n args.isFrozen = this.parent.getFrozenColumns() !== 0 && !args.isFrozen;\n this.index = idx;\n getUpdateUsingRaf(function () {\n _this.parent.notify(events.beforeFragAppend, {});\n if (!_this.parent.enableVirtualization) {\n remove(_this.tbody);\n _this.tbody = createElement('tbody');\n }\n if (frzCols) {\n _this.tbody.appendChild(frag);\n if (_this.index === 0) {\n _this.isLoaded = false;\n fCont.querySelector('table').appendChild(_this.tbody);\n }\n else {\n if (_this.tbody.childElementCount < 1) {\n _this.tbody.appendChild(createElement('tr').appendChild(createElement('td')));\n }\n _this.isLoaded = true;\n mCont.querySelector('table').appendChild(_this.tbody);\n fCont.style.height = ((mCont.offsetHeight) - getScrollBarWidth()) + 'px';\n mCont.style.overflowY = _this.parent.height !== 'auto' ? 'scroll' : 'auto';\n fCont.style.borderRightWidth = '1px';\n }\n }\n else {\n _this.appendContent(_this.tbody, frag, args);\n }\n if (frzCols && idx === 0) {\n _this.refreshContentRows(extend({}, args));\n }\n frag = null;\n }, this.rafCallback(extend({}, args)));\n };\n ContentRender.prototype.appendContent = function (tbody, frag, args) {\n tbody.appendChild(frag);\n this.getTable().appendChild(tbody);\n };\n /**\n * Get the content div element of grid\n * @return {Element}\n */\n ContentRender.prototype.getPanel = function () {\n return this.contentPanel;\n };\n /**\n * Set the content div element of grid\n * @param {Element} panel\n */\n ContentRender.prototype.setPanel = function (panel) {\n this.contentPanel = panel;\n };\n /**\n * Get the content table element of grid\n * @return {Element}\n */\n ContentRender.prototype.getTable = function () {\n return this.contentTable;\n };\n /**\n * Set the content table element of grid\n * @param {Element} table\n */\n ContentRender.prototype.setTable = function (table) {\n this.contentTable = table;\n };\n /**\n * Get the Row collection in the Grid.\n * @returns {Row[] | HTMLCollectionOf}\n */\n ContentRender.prototype.getRows = function () {\n return this.parent.getFrozenColumns() ? this.freezeRows : this.rows;\n };\n /**\n * Get the Movable Row collection in the Freeze pane Grid.\n * @returns {Row[] | HTMLCollectionOf}\n */\n ContentRender.prototype.getMovableRows = function () {\n return this.movableRows;\n };\n /**\n * Get the content table data row elements\n * @return {Element}\n */\n ContentRender.prototype.getRowElements = function () {\n return this.parent.getFrozenColumns() ? this.freezeRowElements : this.rowElements;\n };\n /**\n * Get the Freeze pane movable content table data row elements\n * @return {Element}\n */\n ContentRender.prototype.getMovableRowElements = function () {\n return this.rowElements;\n };\n /**\n * Get the content table data row elements\n * @return {Element}\n */\n ContentRender.prototype.setRowElements = function (elements) {\n this.rowElements = elements;\n };\n /**\n * Get the header colgroup element\n * @returns {Element}\n */\n ContentRender.prototype.getColGroup = function () {\n return this.colgroup;\n };\n /**\n * Set the header colgroup element\n * @param {Element} colgroup\n * @returns {Element}\n */\n ContentRender.prototype.setColGroup = function (colGroup) {\n return this.colgroup = colGroup;\n };\n /**\n * Function to hide content table column based on visible property\n * @param {Column[]} columns?\n */\n ContentRender.prototype.setVisible = function (columns) {\n var gObj = this.parent;\n var frzCols = gObj.getFrozenColumns();\n var rows = [];\n if (frzCols) {\n var fRows = this.freezeRows;\n var mRows = this.movableRows;\n var rowLen = fRows.length;\n var cellLen = void 0;\n for (var i = 0, row = void 0; i < rowLen; i++) {\n cellLen = mRows[i].cells.length;\n row = fRows[i].clone();\n for (var j = 0; j < cellLen; j++) {\n row.cells.push(mRows[i].cells[j]);\n }\n rows.push(row);\n }\n }\n else {\n rows = this.getRows();\n }\n var element;\n var testRow;\n rows.some(function (r) { if (r.isDataRow) {\n testRow = r;\n } return r.isDataRow; });\n var tasks = [];\n for (var c = 0, clen = columns.length; c < clen; c++) {\n var column = columns[c];\n var idx = this.parent.getNormalizedColumnIndex(column.uid);\n //used canSkip method to skip unwanted visible toggle operation. \n if (this.canSkip(column, testRow, idx)) {\n continue;\n }\n var displayVal = column.visible === true ? '' : 'none';\n if (frzCols) {\n if (idx < frzCols) {\n setStyleAttribute(this.getColGroup().childNodes[idx], { 'display': displayVal });\n }\n else {\n var mTable = gObj.getContent().querySelector('.e-movablecontent').querySelector('colgroup');\n setStyleAttribute(mTable.childNodes[idx - frzCols], { 'display': displayVal });\n }\n }\n else {\n setStyleAttribute(this.getColGroup().childNodes[idx], { 'display': displayVal });\n }\n }\n this.refreshContentRows({ requestType: 'refresh' });\n };\n ContentRender.prototype.colGroupRefresh = function () {\n if (this.getColGroup()) {\n var colGroup = this.parent.element.querySelector('.e-gridheader').querySelector('colgroup').cloneNode(true);\n this.getTable().replaceChild(colGroup, this.getColGroup());\n this.setColGroup(colGroup);\n }\n };\n ContentRender.prototype.initializeContentDrop = function () {\n var gObj = this.parent;\n var drop = new Droppable(gObj.getContent(), {\n accept: '.e-dragclone',\n drop: this.drop\n });\n };\n ContentRender.prototype.canSkip = function (column, row, index) {\n /**\n * Skip the toggle visiblity operation when one of the following success\n * 1. Grid has empty records\n * 2. column visible property is unchanged\n * 3. cell`s isVisible property is same as column`s visible property.\n */\n return isNullOrUndefined(row) || //(1)\n isNullOrUndefined(column.visible) || //(2) \n row.cells[index].visible === column.visible; //(3)\n };\n ContentRender.prototype.getModelGenerator = function () {\n return this.generator = this.parent.allowGrouping ? new GroupModelGenerator(this.parent) : new RowModelGenerator(this.parent);\n };\n ContentRender.prototype.renderEmpty = function (tbody) {\n this.getTable().appendChild(tbody);\n if (this.parent.frozenRows) {\n this.parent.getHeaderContent().querySelector('tbody').innerHTML = '';\n }\n };\n ContentRender.prototype.setSelection = function (uid, set, clearAll) {\n if (this.parent.getFrozenColumns()) {\n this.getMovableRows().filter(function (row) { return clearAll || uid === row.uid; }).forEach(function (row) { return row.isSelected = set; });\n }\n this.getRows().filter(function (row) { return clearAll || uid === row.uid; })\n .forEach(function (row) {\n row.isSelected = set;\n row.cells.forEach(function (cell) { return cell.isSelected = set; });\n });\n };\n ContentRender.prototype.getRowByIndex = function (index) {\n return this.parent.getDataRows()[index];\n };\n ContentRender.prototype.getVirtualRowIndex = function (index) {\n return index;\n };\n ContentRender.prototype.getMovableRowByIndex = function (index) {\n return this.parent.getMovableDataRows()[index];\n };\n ContentRender.prototype.enableAfterRender = function (e) {\n if (e.module === 'group' && e.enable) {\n this.generator = this.getModelGenerator();\n }\n };\n return ContentRender;\n}());\nexport { ContentRender };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { createElement, setStyleAttribute, closest as getClosest, remove } from '@syncfusion/ej2-base';\nimport { classList } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\nimport { RowRenderer } from './row-renderer';\nimport { Cell } from '../models/cell';\nimport { Row } from '../models/row';\nimport * as events from '../base/constant';\nimport { Draggable, Droppable } from '@syncfusion/ej2-base';\nimport { parentsUntil, wrap } from '../base/util';\n/**\n * Content module is used to render grid content\n * @hidden\n */\nvar HeaderRender = /** @class */ (function () {\n /**\n * Constructor for header renderer module\n */\n function HeaderRender(parent, serviceLocator) {\n var _this = this;\n this.frzIdx = 0;\n this.helper = function (e) {\n var gObj = _this.parent;\n var target = e.sender.target;\n var parentEle = parentsUntil(target, 'e-headercell');\n if (!(gObj.allowReordering || gObj.allowGrouping) || (!isNullOrUndefined(parentEle)\n && parentEle.querySelectorAll('.e-checkselectall').length > 0)) {\n return false;\n }\n var visualElement = createElement('div', { className: 'e-cloneproperties e-dragclone e-headerclone' });\n var element = target.classList.contains('e-headercell') ? target : parentEle;\n if (!element || (!gObj.allowReordering && element.classList.contains('e-stackedheadercell'))) {\n return false;\n }\n var height = element.offsetHeight;\n var headercelldiv = element.querySelector('.e-headercelldiv') || element.querySelector('.e-stackedheadercelldiv');\n var col;\n if (headercelldiv) {\n if (element.querySelector('.e-stackedheadercelldiv')) {\n col = gObj.getStackedHeaderColumnByHeaderText(headercelldiv.innerText.trim(), gObj.columns);\n }\n else {\n col = gObj.getColumnByUid(headercelldiv.getAttribute('e-mappinguid'));\n }\n _this.column = col;\n visualElement.setAttribute('e-mappinguid', _this.column.uid);\n }\n if (col && !isNullOrUndefined(col.headerTemplate)) {\n if (col.headerTemplate.indexOf('#') !== -1) {\n visualElement.innerHTML = document.querySelector(col.headerTemplate).innerHTML.trim();\n }\n else {\n visualElement.innerHTML = col.headerTemplate;\n }\n }\n else {\n visualElement.textContent = headercelldiv ?\n col.headerText : element.firstElementChild.innerHTML;\n }\n visualElement.style.width = element.offsetWidth + 'px';\n visualElement.style.height = element.offsetHeight + 'px';\n visualElement.style.lineHeight = (height - 6).toString() + 'px';\n gObj.element.appendChild(visualElement);\n return visualElement;\n };\n this.dragStart = function (e) {\n var gObj = _this.parent;\n gObj.element.querySelector('.e-gridpopup').style.display = 'none';\n gObj.notify(events.columnDragStart, { target: e.target, column: _this.column, event: e.event });\n };\n this.drag = function (e) {\n var gObj = _this.parent;\n var target = e.target;\n if (target) {\n var closest = getClosest(target, '.e-grid');\n var cloneElement = _this.parent.element.querySelector('.e-cloneproperties');\n if (!closest || closest.getAttribute('id') !== gObj.element.getAttribute('id')) {\n classList(cloneElement, ['e-notallowedcur'], ['e-defaultcur']);\n if (gObj.allowReordering) {\n gObj.element.querySelector('.e-reorderuparrow').style.display = 'none';\n gObj.element.querySelector('.e-reorderdownarrow').style.display = 'none';\n }\n return;\n }\n gObj.notify(events.columnDrag, { target: e.target, column: _this.column, event: e.event });\n }\n };\n this.dragStop = function (e) {\n var gObj = _this.parent;\n var cancel;\n gObj.element.querySelector('.e-gridpopup').style.display = 'none';\n if ((!parentsUntil(e.target, 'e-headercell') && !parentsUntil(e.target, 'e-groupdroparea')) ||\n (!gObj.allowReordering && parentsUntil(e.target, 'e-headercell')) ||\n (!e.helper.getAttribute('e-mappinguid') && parentsUntil(e.target, 'e-groupdroparea'))) {\n remove(e.helper);\n cancel = true;\n }\n gObj.notify(events.columnDragStop, { target: e.target, event: e.event, column: _this.column, cancel: cancel });\n };\n this.drop = function (e) {\n var gObj = _this.parent;\n var uid = e.droppedElement.getAttribute('e-mappinguid');\n var closest = getClosest(e.target, '.e-grid');\n remove(e.droppedElement);\n if (closest && closest.getAttribute('id') !== gObj.element.getAttribute('id') ||\n !(gObj.allowReordering || gObj.allowGrouping)) {\n return;\n }\n gObj.notify(events.headerDrop, { target: e.target, uid: uid });\n };\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n this.ariaService = this.serviceLocator.getService('ariaService');\n this.widthService = this.serviceLocator.getService('widthService');\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.columnVisibilityChanged, this.setVisible, this);\n this.parent.on(events.columnPositionChanged, this.colPosRefresh, this);\n }\n /**\n * The function is used to render grid header div\n */\n HeaderRender.prototype.renderPanel = function () {\n var div = createElement('div', { className: 'e-gridheader' });\n var innerDiv = createElement('div', { className: 'e-headercontent' });\n div.appendChild(innerDiv);\n this.setPanel(div);\n this.parent.element.appendChild(div);\n };\n /**\n * The function is used to render grid header table\n */\n HeaderRender.prototype.renderTable = function () {\n var headerDiv = this.getPanel();\n headerDiv.appendChild(this.createHeaderTable());\n this.setTable(headerDiv.querySelector('.e-table'));\n if (!this.parent.getFrozenColumns()) {\n this.initializeHeaderDrag();\n this.initializeHeaderDrop();\n }\n this.parent.notify(events.headerRefreshed, { rows: this.rows, args: { isFrozen: this.parent.getFrozenColumns() !== 0 } });\n };\n /**\n * Get the header content div element of grid\n * @return {Element}\n */\n HeaderRender.prototype.getPanel = function () {\n return this.headerPanel;\n };\n /**\n * Set the header content div element of grid\n * @param {Element} panel\n */\n HeaderRender.prototype.setPanel = function (panel) {\n this.headerPanel = panel;\n };\n /**\n * Get the header table element of grid\n * @return {Element}\n */\n HeaderRender.prototype.getTable = function () {\n return this.headerTable;\n };\n /**\n * Set the header table element of grid\n * @param {Element} table\n */\n HeaderRender.prototype.setTable = function (table) {\n this.headerTable = table;\n };\n /**\n * Get the header colgroup element\n * @returns {Element}\n */\n HeaderRender.prototype.getColGroup = function () {\n return this.colgroup;\n };\n /**\n * Set the header colgroup element\n * @param {Element} colgroup\n * @returns {Element}\n */\n HeaderRender.prototype.setColGroup = function (colGroup) {\n return this.colgroup = colGroup;\n };\n /**\n * Get the header row element collection.\n * @return {Element[]}\n */\n HeaderRender.prototype.getRows = function () {\n var table = this.getTable();\n return table.tHead.rows;\n };\n /**\n * The function is used to create header table elements\n * @return {Element}\n * @hidden\n */\n HeaderRender.prototype.createHeaderTable = function () {\n var table = this.createTable();\n var innerDiv = this.getPanel().firstChild;\n innerDiv.appendChild(table);\n return innerDiv;\n };\n /**\n * @hidden\n */\n HeaderRender.prototype.createTable = function () {\n var gObj = this.parent;\n var columns = gObj.getColumns();\n var table = createElement('table', { className: 'e-table', attrs: { cellspacing: '0.25px', role: 'grid' } });\n var innerDiv = this.getPanel().firstChild;\n var findHeaderRow = this.createHeaderContent();\n var thead = findHeaderRow.thead;\n var tbody = createElement('tbody', { className: this.parent.frozenRows ? '' : 'e-hide' });\n this.caption = createElement('caption', { innerHTML: this.parent.element.id + '_header_table', className: 'e-hide' });\n var colGroup = createElement('colgroup');\n var rowBody = createElement('tr');\n var bodyCell;\n var rows = this.rows = findHeaderRow.rows;\n var rowRenderer = new RowRenderer(this.serviceLocator, CellType.Header);\n for (var i = 0, len = rows.length; i < len; i++) {\n for (var j = 0, len_1 = rows[i].cells.length; j < len_1; j++) {\n var cell = rows[i].cells[j];\n bodyCell = createElement('td');\n rowBody.appendChild(bodyCell);\n }\n }\n if (gObj.allowFiltering || gObj.allowSorting || gObj.allowGrouping) {\n table.classList.add('e-sortfilter');\n }\n this.updateColGroup(colGroup);\n tbody.appendChild(rowBody);\n table.appendChild(this.setColGroup(colGroup));\n table.appendChild(thead);\n table.appendChild(tbody);\n table.appendChild(this.caption);\n this.ariaService.setOptions(table, { colcount: gObj.getColumns().length.toString() });\n return table;\n };\n HeaderRender.prototype.createHeaderContent = function () {\n var gObj = this.parent;\n var columns = gObj.getColumns();\n var thead = createElement('thead');\n var colHeader = createElement('tr', { className: 'e-columnheader' });\n var rowRenderer = new RowRenderer(this.serviceLocator, CellType.Header, gObj);\n rowRenderer.element = colHeader;\n var rows = [];\n var headerRow;\n this.colDepth = this.getObjDepth();\n for (var i = 0, len = this.colDepth; i < len; i++) {\n rows[i] = this.generateRow(i);\n rows[i].cells = [];\n }\n rows = this.ensureColumns(rows);\n rows = this.getHeaderCells(rows);\n for (var i = 0, len = this.colDepth; i < len; i++) {\n headerRow = rowRenderer.render(rows[i], columns);\n if (this.parent.rowHeight && headerRow.querySelector('.e-headercell')) {\n headerRow.style.height = this.parent.rowHeight + 'px';\n }\n thead.appendChild(headerRow);\n }\n var findHeaderRow = {\n thead: thead,\n rows: rows\n };\n return findHeaderRow;\n };\n HeaderRender.prototype.updateColGroup = function (colGroup) {\n var cols = this.parent.getColumns();\n var col;\n var indexes = this.parent.getColumnIndexesInView();\n if (this.parent.allowGrouping) {\n for (var i = 0, len = this.parent.groupSettings.columns.length; i < len; i++) {\n if (this.parent.enableColumnVirtualization && indexes.indexOf(i) === -1) {\n continue;\n }\n col = createElement('col');\n colGroup.appendChild(col);\n }\n }\n if (this.parent.detailTemplate || this.parent.childGrid) {\n col = createElement('col');\n colGroup.appendChild(col);\n }\n for (var i = 0, len = cols.length; i < len; i++) {\n col = createElement('col');\n if (cols[i].visible === false) {\n setStyleAttribute(col, { 'display': 'none' });\n }\n colGroup.appendChild(col);\n }\n return colGroup;\n };\n HeaderRender.prototype.ensureColumns = function (rows) {\n //TODO: generate dummy column for group, detail, stacked row here; ensureColumns here\n var gObj = this.parent;\n var indexes = this.parent.getColumnIndexesInView();\n for (var i = 0, len = rows.length; i < len; i++) {\n if (gObj.allowGrouping) {\n for (var c = 0, len_2 = gObj.groupSettings.columns.length; c < len_2; c++) {\n if (this.parent.enableColumnVirtualization && indexes.indexOf(c) === -1) {\n continue;\n }\n rows[i].cells.push(this.generateCell({}, CellType.HeaderIndent));\n }\n }\n if (gObj.detailTemplate || gObj.childGrid) {\n rows[i].cells.push(this.generateCell({}, CellType.DetailHeader));\n }\n }\n return rows;\n };\n HeaderRender.prototype.getHeaderCells = function (rows) {\n var column;\n var thead = this.parent.getHeaderTable() && this.parent.getHeaderTable().querySelector('thead');\n var cols = this.parent.enableColumnVirtualization ? this.parent.getColumns() : this.parent.columns;\n this.frzIdx = 0;\n for (var i = 0, len = cols.length; i < len; i++) {\n rows = this.appendCells(cols[i], rows, 0, i === 0, false, i === (len - 1), thead);\n }\n return rows;\n };\n HeaderRender.prototype.appendCells = function (cols, rows, index, isFirstObj, isFirstCol, isLastCol, isMovable) {\n var lastCol = isLastCol ? 'e-lastcell' : '';\n var frzCols = this.parent.getFrozenColumns();\n if (!cols.columns) {\n if (!frzCols || (frzCols\n && ((!isMovable && (this.frzIdx < this.parent.frozenColumns || cols.isFrozen))\n || (isMovable && this.frzIdx >= this.parent.frozenColumns && !cols.isFrozen)))) {\n rows[index].cells.push(this.generateCell(cols, CellType.Header, this.colDepth - index, (isFirstObj ? '' : (isFirstCol ? 'e-firstcell' : '')) + lastCol, index, this.parent.getColumnIndexByUid(cols.uid)));\n }\n this.frzIdx++;\n }\n else {\n var colSpan = this.getCellCnt(cols, 0);\n if (colSpan) {\n var frzObj = this.refreshFrozenHdr(cols.columns, { isPartial: false, isComp: true, cnt: 0 });\n if (!frzCols || (frzCols\n && ((!isMovable && (this.parent.frozenColumns - this.frzIdx > 0 || (frzObj.isPartial)))\n || (isMovable && (colSpan + this.frzIdx > this.parent.frozenColumns && !frzObj.isComp))))) {\n rows[index].cells.push(new Cell({\n cellType: CellType.StackedHeader, column: cols,\n colSpan: this.getColSpan(colSpan, isMovable, frzObj.cnt)\n }));\n }\n }\n for (var i = 0, len = cols.columns.length; i < len; i++) {\n rows = this.appendCells(cols.columns[i], rows, index + 1, isFirstObj, i === 0, i === (len - 1) && isLastCol, isMovable);\n }\n }\n return rows;\n };\n HeaderRender.prototype.refreshFrozenHdr = function (cols, frzObj) {\n for (var i = 0; i < cols.length; i++) {\n if (cols[i].columns) {\n frzObj = this.refreshFrozenHdr(cols[i].columns, frzObj);\n }\n else {\n if (cols[i].isFrozen) {\n frzObj.isPartial = true;\n frzObj.cnt++;\n }\n frzObj.isComp = frzObj.isComp && (cols[i].isFrozen ||\n this.parent.getColumnIndexByField(cols[i].field) < this.parent.frozenColumns);\n }\n }\n return frzObj;\n };\n HeaderRender.prototype.getColSpan = function (colSpan, isMovable, frozenCnt) {\n var frzCol = this.parent.frozenColumns;\n if (this.parent.getFrozenColumns() && this.frzIdx + colSpan > frzCol) {\n if (isMovable) {\n colSpan = colSpan - (frzCol > this.frzIdx ? frzCol - this.frzIdx : 0) - frozenCnt;\n }\n else {\n colSpan = colSpan - (colSpan - (frzCol > this.frzIdx ? frzCol + frozenCnt - this.frzIdx : frozenCnt));\n }\n }\n return colSpan;\n };\n HeaderRender.prototype.generateRow = function (index) {\n return new Row({});\n };\n HeaderRender.prototype.generateCell = function (column, cellType, rowSpan, className, rowIndex, colIndex) {\n var opt = {\n 'visible': column.visible,\n 'isDataCell': false,\n 'isTemplate': !isNullOrUndefined(column.headerTemplate),\n 'rowID': '',\n 'column': column,\n 'cellType': cellType,\n 'rowSpan': rowSpan,\n 'className': className,\n 'index': rowIndex,\n 'colIndex': colIndex\n };\n if (!opt.rowSpan || opt.rowSpan < 2) {\n delete opt.rowSpan;\n }\n return new Cell(opt);\n };\n /**\n * Function to hide header table column based on visible property\n * @param {Column[]} columns?\n */\n HeaderRender.prototype.setVisible = function (columns) {\n var gObj = this.parent;\n var rows = [].slice.call(this.getRows()); //NodeList -> Array \n var displayVal = '';\n var idx;\n var className;\n var element;\n var frzCols = gObj.getFrozenColumns();\n for (var c = 0, clen = columns.length; c < clen; c++) {\n var column = columns[c];\n idx = gObj.getNormalizedColumnIndex(column.uid);\n if (column.visible === false) {\n displayVal = 'none';\n }\n if (frzCols) {\n if (idx < frzCols) {\n setStyleAttribute(this.getColGroup().children[idx], { 'display': displayVal });\n }\n else {\n var mTblColGrp = gObj.getHeaderContent().querySelector('.e-movableheader').querySelector('colgroup');\n setStyleAttribute(mTblColGrp.children[idx - frzCols], { 'display': displayVal });\n }\n }\n else {\n setStyleAttribute(this.getColGroup().children[idx], { 'display': displayVal });\n }\n this.refreshUI();\n }\n };\n HeaderRender.prototype.colPosRefresh = function () {\n this.refreshUI();\n };\n /**\n * Refresh the header of the Grid.\n * @returns {void}\n */\n HeaderRender.prototype.refreshUI = function () {\n var headerDiv = this.getPanel();\n var table = this.getTable();\n var frzCols = this.parent.getFrozenColumns();\n remove(this.getTable());\n table.removeChild(table.firstChild);\n table.removeChild(table.childNodes[0]);\n var colGroup = createElement('colgroup');\n var findHeaderRow = this.createHeaderContent();\n this.rows = findHeaderRow.rows;\n table.insertBefore(findHeaderRow.thead, table.firstChild);\n this.updateColGroup(colGroup);\n table.insertBefore(this.setColGroup(colGroup), table.firstChild);\n this.setTable(table);\n this.appendContent(table);\n this.parent.notify(events.colGroupRefresh, {});\n this.widthService.setWidthToColumns();\n this.parent.updateDefaultCursor();\n if (!frzCols) {\n this.initializeHeaderDrag();\n }\n var rows = [].slice.call(headerDiv.querySelectorAll('tr.e-columnheader'));\n for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {\n var row = rows_1[_i];\n var gCells = [].slice.call(row.querySelectorAll('.e-grouptopleftcell'));\n if (gCells.length) {\n gCells[gCells.length - 1].classList.add('e-lastgrouptopleftcell');\n }\n }\n if (!frzCols) {\n this.parent.notify(events.headerRefreshed, { rows: this.rows, args: { isFrozen: this.parent.getFrozenColumns() !== 0 } });\n }\n if (this.parent.allowTextWrap && this.parent.textWrapSettings.wrapMode === 'Header') {\n wrap(rows, true);\n }\n };\n HeaderRender.prototype.appendContent = function (table) {\n this.getPanel().firstChild.appendChild(table);\n };\n HeaderRender.prototype.getObjDepth = function () {\n var max = 0;\n var cols = this.parent.columns;\n for (var i = 0, len = cols.length; i < len; i++) {\n var depth = this.checkDepth(cols[i], 0);\n if (max < depth) {\n max = depth;\n }\n }\n return max + 1;\n };\n HeaderRender.prototype.checkDepth = function (col, index) {\n var max = index;\n var indices = [];\n if (col.columns) {\n index++;\n for (var i = 0, len = col.columns.length; i < len; i++) {\n indices[i] = this.checkDepth(col.columns[i], index);\n }\n for (var j = 0; j < indices.length; j++) {\n if (max < indices[j]) {\n max = indices[j];\n }\n }\n index = max;\n }\n return index;\n };\n HeaderRender.prototype.getCellCnt = function (col, cnt) {\n if (col.columns) {\n for (var i = 0, len = col.columns.length; i < len; i++) {\n cnt = this.getCellCnt(col.columns[i], cnt);\n }\n }\n else {\n if (col.visible) {\n cnt++;\n }\n }\n return cnt;\n };\n HeaderRender.prototype.initializeHeaderDrag = function () {\n var gObj = this.parent;\n if (!(this.parent.allowReordering || (this.parent.allowGrouping && this.parent.groupSettings.showDropArea))) {\n return;\n }\n var headerRows = [].slice.call(gObj.getHeaderContent().querySelectorAll('.e-columnheader'));\n for (var i = 0, len = headerRows.length; i < len; i++) {\n var drag = new Draggable(headerRows[i], {\n dragTarget: '.e-headercell',\n distance: 5,\n helper: this.helper,\n dragStart: this.dragStart,\n drag: this.drag,\n dragStop: this.dragStop,\n abort: '.e-rhandler'\n });\n }\n };\n HeaderRender.prototype.initializeHeaderDrop = function () {\n var gObj = this.parent;\n var drop = new Droppable(gObj.getHeaderContent(), {\n accept: '.e-dragclone',\n drop: this.drop\n });\n };\n return HeaderRender;\n}());\nexport { HeaderRender };\n","import { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { createElement } from '@syncfusion/ej2-base';\nimport { doesImplementInterface, setStyleAndAttributes, appendChildren } from '../base/util';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { foreignKeyData } from '../base/constant';\n/**\n * CellRenderer class which responsible for building cell content.\n * @hidden\n */\nvar CellRenderer = /** @class */ (function () {\n function CellRenderer(parent, locator) {\n this.element = createElement('TD', { className: 'e-rowcell', attrs: { role: 'gridcell', tabindex: '-1' } });\n this.rowChkBox = createElement('input', { className: 'e-checkselect', attrs: { 'type': 'checkbox' } });\n this.localizer = locator.getService('localization');\n this.formatter = locator.getService('valueFormatter');\n this.parent = parent;\n }\n /**\n * Function to return the wrapper for the TD content\n * @returns string\n */\n CellRenderer.prototype.getGui = function () {\n return '';\n };\n /**\n * Function to format the cell value.\n * @param {Column} column\n * @param {Object} value\n * @param {Object} data\n */\n CellRenderer.prototype.format = function (column, value, data) {\n if (!isNullOrUndefined(column.format)) {\n value = this.formatter.toView(value, column.getFormatter());\n }\n return isNullOrUndefined(value) ? '' : value.toString();\n };\n CellRenderer.prototype.evaluate = function (node, cell, data, attributes, fData) {\n var result;\n if (cell.column.template) {\n var literals = ['index'];\n var dummyData = extend({}, data, (_a = {}, _a[foreignKeyData] = fData, _a));\n result = cell.column.getColumnTemplate()(extend({ 'index': attributes[literals[0]] }, dummyData), this.parent, 'template');\n appendChildren(node, result);\n result = null;\n node.setAttribute('aria-label', node.innerText + ' is template cell' + ' column header ' +\n cell.column.headerText);\n return false;\n }\n return true;\n var _a;\n };\n /**\n * Function to invoke the custom formatter available in the column object.\n * @param {Column} column\n * @param {Object} value\n * @param {Object} data\n */\n CellRenderer.prototype.invokeFormatter = function (column, value, data) {\n if (!isNullOrUndefined(column.formatter)) {\n if (doesImplementInterface(column.formatter, 'getValue')) {\n var formatter = column.formatter;\n value = new formatter().getValue(column, data);\n }\n else if (typeof column.formatter === 'function') {\n value = column.formatter(column, data);\n }\n else {\n value = column.formatter.getValue(column, data);\n }\n }\n return value;\n };\n /**\n * Function to render the cell content based on Column object.\n * @param {Column} column\n * @param {Object} data\n * @param {{[x:string]:Object}} attributes?\n * @param {Element}\n */\n CellRenderer.prototype.render = function (cell, data, attributes) {\n return this.refreshCell(cell, data, attributes);\n };\n /**\n * Function to refresh the cell content based on Column object.\n * @param {Column} column\n * @param {Object} data\n * @param {{[x:string]:Object}} attributes?\n * @param {Element}\n */\n CellRenderer.prototype.refreshTD = function (td, cell, data, attributes) {\n var node = this.refreshCell(cell, data, attributes);\n td.innerHTML = '';\n var elements = [].slice.call(node.childNodes);\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var elem = elements_1[_i];\n td.appendChild(elem);\n }\n };\n CellRenderer.prototype.refreshCell = function (cell, data, attributes) {\n var node = this.element.cloneNode();\n var column = cell.column;\n var fData;\n if (cell.isForeignKey) {\n fData = cell.foreignKeyData[0] || (_a = {}, _a[column.foreignKeyValue] = column.format ? null : '', _a);\n }\n //Prepare innerHtml\n var innerHtml = this.getGui();\n var value = cell.isForeignKey ? this.getValue(column.foreignKeyValue, fData, column) :\n this.getValue(column.field, data, column);\n if (column.type === 'date' && !isNullOrUndefined(value)) {\n value = new Date(value);\n }\n value = this.format(column, value, data);\n innerHtml = value.toString();\n if (column.type === 'boolean' && !column.displayAsCheckBox) {\n var localeStr = (value !== 'true' && value !== 'false') ? null : value === 'true' ? 'True' : 'False';\n innerHtml = localeStr ? this.localizer.getConstant(localeStr) : innerHtml;\n }\n var fromFormatter = this.invokeFormatter(column, value, data);\n innerHtml = !isNullOrUndefined(column.formatter) ? isNullOrUndefined(fromFormatter) ? '' : fromFormatter.toString() : innerHtml;\n node.setAttribute('aria-label', (innerHtml === '' ? 'empty' : innerHtml) + ' column header ' + cell.column.headerText);\n if (!isNullOrUndefined(cell.column.headerText)) {\n node.setAttribute('aria-label', innerHtml + ' column header ' + cell.column.headerText);\n }\n if (this.evaluate(node, cell, data, attributes, fData) && column.type !== 'checkbox') {\n this.appendHtml(node, innerHtml, column.getDomSetter ? column.getDomSetter() : 'innerHTML');\n }\n else if (column.type === 'checkbox') {\n node.classList.add('e-gridchkbox');\n node.setAttribute('aria-label', 'checkbox');\n if (this.parent.selectionSettings.persistSelection) {\n value = value === 'true';\n }\n else {\n value = false;\n }\n var checkWrap = createCheckBox(false, { checked: value, label: ' ' });\n checkWrap.insertBefore(this.rowChkBox.cloneNode(), checkWrap.firstChild);\n node.appendChild(checkWrap);\n }\n if (this.parent.checkAllRows === 'Check' && this.parent.enableVirtualization) {\n cell.isSelected = true;\n }\n this.setAttributes(node, cell, attributes);\n if (column.type === 'boolean' && column.displayAsCheckBox) {\n var checked = isNaN(parseInt(value.toString(), 10)) ? value === 'true' : parseInt(value.toString(), 10) > 0;\n var checkWrap = createCheckBox(false, { checked: checked, label: ' ' });\n node.innerHTML = '';\n checkWrap.classList.add('e-checkbox-disabled');\n node.appendChild(checkWrap);\n node.setAttribute('aria-label', checked + ' column header ' + cell.column.headerText);\n }\n return node;\n var _a;\n };\n /**\n * Function to specifies how the result content to be placed in the cell.\n * @param {Element} node\n * @param {string|Element} innerHtml\n * @returns Element\n */\n CellRenderer.prototype.appendHtml = function (node, innerHtml, property) {\n if (property === void 0) { property = 'innerHTML'; }\n node[property] = innerHtml;\n return node;\n };\n /**\n * @hidden\n */\n CellRenderer.prototype.setAttributes = function (node, cell, attributes) {\n var column = cell.column;\n this.buildAttributeFromCell(node, cell, column.type === 'checkbox');\n setStyleAndAttributes(node, attributes);\n setStyleAndAttributes(node, cell.attributes);\n if (column.customAttributes) {\n setStyleAndAttributes(node, column.customAttributes);\n }\n if (column.textAlign) {\n node.style.textAlign = column.textAlign;\n }\n if (column.clipMode === 'Clip') {\n node.classList.add('e-gridclip');\n }\n else if (column.clipMode === 'EllipsisWithTooltip') {\n node.classList.add('e-ellipsistooltip');\n }\n };\n CellRenderer.prototype.buildAttributeFromCell = function (node, cell, isCheckBoxType) {\n var attr = {};\n var prop = { 'colindex': 'aria-colindex' };\n var classes = [];\n if (cell.colSpan) {\n attr.colSpan = cell.colSpan;\n }\n if (cell.rowSpan) {\n attr.rowSpan = cell.rowSpan;\n }\n if (cell.isTemplate) {\n classes.push('e-templatecell');\n }\n if (cell.isSelected) {\n classes.push.apply(classes, ['e-selectionbackground', 'e-active']);\n if (isCheckBoxType) {\n node.querySelector('.e-frame').classList.add('e-check');\n }\n }\n if (!isNullOrUndefined(cell.index)) {\n attr[prop.colindex] = cell.index;\n }\n if (!cell.visible) {\n classes.push('e-hide');\n }\n attr.class = classes;\n setStyleAndAttributes(node, attr);\n };\n CellRenderer.prototype.getValue = function (field, data, column) {\n return column.valueAccessor(field, data, column);\n };\n return CellRenderer;\n}());\nexport { CellRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { createElement, attributes } from '@syncfusion/ej2-base';\nimport { setStyleAndAttributes, appendChildren } from '../base/util';\nimport { CellRenderer } from './cell-renderer';\nimport { AriaService } from '../services/aria-service';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { headerCellInfo } from '../base/constant';\n/**\n * HeaderCellRenderer class which responsible for building header cell content.\n * @hidden\n */\nvar HeaderCellRenderer = /** @class */ (function (_super) {\n __extends(HeaderCellRenderer, _super);\n function HeaderCellRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.element = createElement('TH', { className: 'e-headercell', attrs: { role: 'columnheader', tabindex: '-1' } });\n _this.ariaService = new AriaService();\n _this.hTxtEle = createElement('span', { className: 'e-headertext' });\n _this.sortEle = createElement('div', { className: 'e-sortfilterdiv e-icons' });\n _this.gui = createElement('div');\n _this.chkAllBox = createElement('input', { className: 'e-checkselectall', attrs: { 'type': 'checkbox' } });\n return _this;\n }\n /**\n * Function to return the wrapper for the TH content.\n * @returns string\n */\n HeaderCellRenderer.prototype.getGui = function () {\n return this.gui.cloneNode();\n };\n /**\n * Function to render the cell content based on Column object.\n * @param {Column} column\n * @param {Object} data\n * @param {Element}\n */\n HeaderCellRenderer.prototype.render = function (cell, data, attributes) {\n var node = this.element.cloneNode();\n var fltrMenuEle = createElement('div', { className: 'e-filtermenudiv e-icons e-icon-filter' });\n return this.prepareHeader(cell, node, fltrMenuEle);\n };\n /**\n * Function to refresh the cell content based on Column object.\n * @param {Cell} cell\n * @param {Element} node\n */\n HeaderCellRenderer.prototype.refresh = function (cell, node) {\n this.clean(node);\n var fltrMenuEle = createElement('div', { className: 'e-filtermenudiv e-icons e-icon-filter' });\n return this.prepareHeader(cell, node, fltrMenuEle);\n };\n HeaderCellRenderer.prototype.clean = function (node) {\n node.innerHTML = '';\n };\n HeaderCellRenderer.prototype.prepareHeader = function (cell, node, fltrMenuEle) {\n var column = cell.column;\n var ariaAttr = {};\n //Prepare innerHtml\n var innerDIV = this.getGui();\n attributes(innerDIV, {\n 'e-mappinguid': column.uid,\n 'class': 'e-headercelldiv'\n });\n if (column.type !== 'checkbox') {\n var value = column.headerText;\n var headerText = this.hTxtEle.cloneNode();\n headerText[column.getDomSetter()] = value;\n innerDIV.appendChild(headerText);\n }\n else {\n column.editType = 'booleanedit';\n var checkAllWrap = createCheckBox(false, { checked: false, label: ' ' });\n checkAllWrap.insertBefore(this.chkAllBox.cloneNode(), checkAllWrap.firstChild);\n innerDIV.appendChild(checkAllWrap);\n innerDIV.classList.add('e-headerchkcelldiv');\n }\n this.buildAttributeFromCell(node, cell);\n this.appendHtml(node, innerDIV);\n node.appendChild(this.sortEle.cloneNode());\n if ((this.parent.allowFiltering && this.parent.filterSettings.type !== 'FilterBar') &&\n (column.allowFiltering && !isNullOrUndefined(column.field)) &&\n !(this.parent.showColumnMenu && column.showColumnMenu)) {\n attributes(fltrMenuEle, {\n 'e-mappinguid': 'e-flmenu-' + column.uid,\n });\n node.classList.add('e-fltr-icon');\n var matchFlColumns = [];\n if (this.parent.filterSettings.columns.length && this.parent.filterSettings.columns.length !== matchFlColumns.length) {\n for (var index = 0; index < this.parent.columns.length; index++) {\n for (var count = 0; count < this.parent.filterSettings.columns.length; count++) {\n if (this.parent.filterSettings.columns[count].field === column.field) {\n fltrMenuEle.classList.add('e-filtered');\n matchFlColumns.push(column.field);\n break;\n }\n }\n }\n }\n node.appendChild(fltrMenuEle.cloneNode());\n }\n if (cell.className) {\n node.classList.add(cell.className);\n }\n if (column.customAttributes) {\n setStyleAndAttributes(node, column.customAttributes);\n }\n if (column.allowSorting) {\n ariaAttr.sort = 'none';\n }\n if (column.allowGrouping) {\n ariaAttr.grabbed = false;\n }\n node = this.extendPrepareHeader(column, node);\n var result;\n var gridObj = this.parent;\n var colIndex = gridObj.getColumnIndexByField(column.field);\n if (!isNullOrUndefined(column.headerTemplate)) {\n result = column.getHeaderTemplate()(extend({ 'index': colIndex }, column), gridObj, 'headerTemplate');\n node.firstElementChild.innerHTML = '';\n appendChildren(node.firstElementChild, result);\n }\n this.ariaService.setOptions(node, ariaAttr);\n if (!isNullOrUndefined(column.headerTextAlign) || !isNullOrUndefined(column.textAlign)) {\n var alignment = column.headerTextAlign || column.textAlign;\n innerDIV.style.textAlign = alignment;\n if (alignment === 'Right' || alignment === 'Left') {\n node.classList.add(alignment === 'Right' ? 'e-rightalign' : 'e-leftalign');\n }\n else if (alignment === 'Center') {\n node.classList.add('e-centeralign');\n }\n }\n if (column.clipMode === 'Clip') {\n node.classList.add('e-gridclip');\n }\n else if (column.clipMode === 'EllipsisWithTooltip') {\n node.classList.add('e-ellipsistooltip');\n }\n node.setAttribute('aria-rowspan', (!isNullOrUndefined(cell.rowSpan) ? cell.rowSpan : 1).toString());\n node.setAttribute('aria-colspan', '1');\n this.parent.trigger(headerCellInfo, { cell: cell, node: node });\n return node;\n };\n HeaderCellRenderer.prototype.extendPrepareHeader = function (column, node) {\n if (this.parent.showColumnMenu && column.showColumnMenu && !isNullOrUndefined(column.field)) {\n var element = (createElement('div', { className: 'e-icons e-columnmenu' }));\n var matchFilteredColumns = [];\n if (this.parent.filterSettings.columns.length && this.parent.filterSettings.columns.length !== matchFilteredColumns.length) {\n for (var i = 0; i < this.parent.columns.length; i++) {\n for (var j = 0; j < this.parent.filterSettings.columns.length; j++) {\n if (this.parent.filterSettings.columns[j].field === column.field) {\n element.classList.add('e-filtered');\n matchFilteredColumns.push(column.field);\n break;\n }\n }\n }\n }\n node.classList.add('e-fltr-icon');\n node.appendChild(element);\n }\n if (this.parent.allowResizing) {\n var handler = createElement('div');\n handler.className = column.allowResizing ? 'e-rhandler e-rcursor' : 'e-rsuppress';\n node.appendChild(handler);\n }\n return node;\n };\n /**\n * Function to specifies how the result content to be placed in the cell.\n * @param {Element} node\n * @param {string|Element} innerHtml\n * @returns Element\n */\n HeaderCellRenderer.prototype.appendHtml = function (node, innerHtml) {\n node.appendChild(innerHtml);\n return node;\n };\n return HeaderCellRenderer;\n}(CellRenderer));\nexport { HeaderCellRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { createElement } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CellRenderer } from './cell-renderer';\nimport { headerCellInfo } from '../base/constant';\n/**\n * StackedHeaderCellRenderer class which responsible for building stacked header cell content.\n * @hidden\n */\nvar StackedHeaderCellRenderer = /** @class */ (function (_super) {\n __extends(StackedHeaderCellRenderer, _super);\n function StackedHeaderCellRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.element = createElement('TH', {\n className: 'e-headercell e-stackedheadercell', attrs: {\n role: 'columnheader',\n tabindex: '-1'\n }\n });\n return _this;\n }\n /**\n * Function to render the cell content based on Column object.\n * @param {Column} column\n * @param {Object} data\n * @param {Element}\n */\n StackedHeaderCellRenderer.prototype.render = function (cell, data, attributes) {\n var node = this.element.cloneNode();\n var div = createElement('div', { className: 'e-stackedheadercelldiv' });\n node.appendChild(div);\n div.innerHTML = cell.column.headerText;\n if (cell.column.toolTip) {\n node.setAttribute('title', cell.column.toolTip);\n }\n if (!isNullOrUndefined(cell.column.textAlign)) {\n div.style.textAlign = cell.column.textAlign;\n }\n node.setAttribute('colspan', cell.colSpan.toString());\n node.setAttribute('aria-colspan', cell.colSpan.toString());\n node.setAttribute('aria-rowspan', '1');\n this.parent.trigger(headerCellInfo, { cell: cell, node: node });\n return node;\n };\n return StackedHeaderCellRenderer;\n}(CellRenderer));\nexport { StackedHeaderCellRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { createElement } from '@syncfusion/ej2-base';\nimport { setStyleAndAttributes } from '../base/util';\nimport { CellRenderer } from './cell-renderer';\n/**\n * IndentCellRenderer class which responsible for building group indent cell.\n * @hidden\n */\nvar IndentCellRenderer = /** @class */ (function (_super) {\n __extends(IndentCellRenderer, _super);\n function IndentCellRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.element = createElement('TD', { className: 'e-indentcell' });\n return _this;\n }\n /**\n * Function to render the indent cell\n * @param {Cell} cell\n * @param {Object} data\n */\n IndentCellRenderer.prototype.render = function (cell, data) {\n var node = this.element.cloneNode();\n setStyleAndAttributes(node, cell.attributes);\n return node;\n };\n return IndentCellRenderer;\n}(CellRenderer));\nexport { IndentCellRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CellRenderer } from './cell-renderer';\nimport { appendChildren, templateCompiler } from '../base/util';\n/**\n * GroupCaptionCellRenderer class which responsible for building group caption cell.\n * @hidden\n */\nvar GroupCaptionCellRenderer = /** @class */ (function (_super) {\n __extends(GroupCaptionCellRenderer, _super);\n function GroupCaptionCellRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.element = createElement('TD', { className: 'e-groupcaption', attrs: { role: 'gridcell', tabindex: '-1' } });\n return _this;\n }\n /**\n * Function to render the cell content based on Column object.\n * @param {Cell} cell\n * @param {Object} data\n */\n GroupCaptionCellRenderer.prototype.render = function (cell, data) {\n var node = this.element.cloneNode();\n var gObj = this.parent;\n var result;\n var helper = {};\n var fKeyValue;\n if (cell.isForeignKey) {\n fKeyValue = this.format(cell.column, cell.column.valueAccessor('foreignKey', data, cell.column));\n }\n var value = cell.isForeignKey ? fKeyValue : cell.column.enableGroupByFormat ? data.key :\n this.format(cell.column, cell.column.valueAccessor('key', data, cell.column));\n if (!isNullOrUndefined(gObj.groupSettings.captionTemplate)) {\n if (gObj.groupSettings.captionTemplate.indexOf('#') !== -1) {\n result = templateCompiler(document.querySelector(gObj.groupSettings.captionTemplate).innerHTML.trim())(data);\n }\n else {\n result = templateCompiler(gObj.groupSettings.captionTemplate)(data);\n }\n appendChildren(node, result);\n }\n else {\n node.innerHTML = cell.column.headerText + ': ' + value + ' - ' + data.count + ' ' +\n (data.count < 2 ? this.localizer.getConstant('Item') : this.localizer.getConstant('Items'));\n }\n node.setAttribute('colspan', cell.colSpan.toString());\n node.setAttribute('aria-label', node.innerHTML + ' is groupcaption cell');\n node.setAttribute('title', node.innerHTML);\n return node;\n };\n return GroupCaptionCellRenderer;\n}(CellRenderer));\nexport { GroupCaptionCellRenderer };\n/**\n * GroupCaptionEmptyCellRenderer class which responsible for building group caption empty cell.\n * @hidden\n */\nvar GroupCaptionEmptyCellRenderer = /** @class */ (function (_super) {\n __extends(GroupCaptionEmptyCellRenderer, _super);\n function GroupCaptionEmptyCellRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.element = createElement('TD', { className: 'e-groupcaption' });\n return _this;\n }\n /**\n * Function to render the cell content based on Column object.\n * @param {Cell} cell\n * @param {Object} data\n */\n GroupCaptionEmptyCellRenderer.prototype.render = function (cell, data) {\n var node = this.element.cloneNode();\n node.innerHTML = ' ';\n node.setAttribute('colspan', cell.colSpan.toString());\n return node;\n };\n return GroupCaptionEmptyCellRenderer;\n}(CellRenderer));\nexport { GroupCaptionEmptyCellRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { createElement } from '@syncfusion/ej2-base';\nimport { IndentCellRenderer } from './indent-cell-renderer';\n/**\n * ExpandCellRenderer class which responsible for building group expand cell.\n * @hidden\n */\nvar ExpandCellRenderer = /** @class */ (function (_super) {\n __extends(ExpandCellRenderer, _super);\n function ExpandCellRenderer() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Function to render the expand cell\n * @param {Cell} cell\n * @param {Object} data\n */\n ExpandCellRenderer.prototype.render = function (cell, data) {\n var node = this.element.cloneNode();\n node.className = 'e-recordplusexpand';\n node.setAttribute('ej-mappingname', data.field);\n node.setAttribute('ej-mappingvalue', data.key);\n node.setAttribute('aria-expanded', 'true');\n node.setAttribute('tabindex', '-1');\n node.appendChild(createElement('div', { className: 'e-icons e-gdiagonaldown e-icon-gdownarrow' }));\n return node;\n };\n return ExpandCellRenderer;\n}(IndentCellRenderer));\nexport { ExpandCellRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { createElement } from '@syncfusion/ej2-base';\nimport { CellRenderer } from './cell-renderer';\n/**\n * HeaderIndentCellRenderer class which responsible for building header indent cell.\n * @hidden\n */\nvar HeaderIndentCellRenderer = /** @class */ (function (_super) {\n __extends(HeaderIndentCellRenderer, _super);\n function HeaderIndentCellRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.element = createElement('TH', { className: 'e-grouptopleftcell' });\n return _this;\n }\n /**\n * Function to render the indent cell\n * @param {Cell} cell\n * @param {Object} data\n */\n HeaderIndentCellRenderer.prototype.render = function (cell, data) {\n var node = this.element.cloneNode();\n node.appendChild(createElement('div', { className: 'e-headercelldiv e-emptycell', innerHTML: '' }));\n return node;\n };\n return HeaderIndentCellRenderer;\n}(CellRenderer));\nexport { HeaderIndentCellRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { createElement } from '@syncfusion/ej2-base';\nimport { CellRenderer } from './cell-renderer';\n/**\n * DetailHeaderIndentCellRenderer class which responsible for building detail header indent cell.\n * @hidden\n */\nvar DetailHeaderIndentCellRenderer = /** @class */ (function (_super) {\n __extends(DetailHeaderIndentCellRenderer, _super);\n function DetailHeaderIndentCellRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.element = createElement('TH', { className: 'e-detailheadercell' });\n return _this;\n }\n /**\n * Function to render the detail indent cell\n * @param {Cell} cell\n * @param {Object} data\n */\n DetailHeaderIndentCellRenderer.prototype.render = function (cell, data) {\n var node = this.element.cloneNode();\n node.appendChild(createElement('div', { className: 'e-emptycell' }));\n return node;\n };\n return DetailHeaderIndentCellRenderer;\n}(CellRenderer));\nexport { DetailHeaderIndentCellRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CellRenderer } from './cell-renderer';\n/**\n * ExpandCellRenderer class which responsible for building group expand cell.\n * @hidden\n */\nvar DetailExpandCellRenderer = /** @class */ (function (_super) {\n __extends(DetailExpandCellRenderer, _super);\n function DetailExpandCellRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.element = createElement('TD', {\n className: 'e-detailrowcollapse',\n attrs: { 'aria-expanded': 'false', role: 'gridcell', tabindex: '-1' }\n });\n return _this;\n }\n /**\n * Function to render the detail expand cell\n */\n DetailExpandCellRenderer.prototype.render = function (cell, data, attributes) {\n var node = this.element.cloneNode();\n if (attributes && !isNullOrUndefined(attributes['class'])) {\n node.className = '';\n node.className = attributes['class'];\n node.appendChild(createElement('div', { className: 'e-icons e-dtdiagonaldown e-icon-gdownarrow' }));\n }\n else {\n node.appendChild(createElement('div', { className: 'e-icons e-dtdiagonalright e-icon-grightarrow' }));\n }\n return node;\n };\n return DetailExpandCellRenderer;\n}(CellRenderer));\nexport { DetailExpandCellRenderer };\n","import { createElement, remove } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, getValue, extend } from '@syncfusion/ej2-base';\nimport { DataManager, Query, Deferred, Predicate, DataUtil } from '@syncfusion/ej2-data';\nimport { ValueFormatter } from '../services/value-formatter';\nimport { RenderType, CellType } from '../base/enum';\nimport { Data } from '../actions/data';\nimport { Row } from '../models/row';\nimport { Cell } from '../models/cell';\nimport * as events from '../base/constant';\nimport { prepareColumns, setFormatter, getDatePredicate } from '../base/util';\nimport { ContentRender } from '../renderer/content-renderer';\nimport { HeaderRender } from '../renderer/header-renderer';\nimport { CellRenderer } from '../renderer/cell-renderer';\nimport { HeaderCellRenderer } from '../renderer/header-cell-renderer';\nimport { StackedHeaderCellRenderer } from '../renderer/stacked-cell-renderer';\nimport { IndentCellRenderer } from '../renderer/indent-cell-renderer';\nimport { GroupCaptionCellRenderer, GroupCaptionEmptyCellRenderer } from '../renderer/caption-cell-renderer';\nimport { ExpandCellRenderer } from '../renderer/expand-cell-renderer';\nimport { HeaderIndentCellRenderer } from '../renderer/header-indent-renderer';\nimport { DetailHeaderIndentCellRenderer } from '../renderer/detail-header-indent-renderer';\nimport { DetailExpandCellRenderer } from '../renderer/detail-expand-cell-renderer';\n/**\n * Content module is used to render grid content\n * @hidden\n */\nvar Render = /** @class */ (function () {\n /**\n * Constructor for render module\n */\n function Render(parent, locator) {\n this.emptyGrid = false;\n this.parent = parent;\n this.locator = locator;\n this.data = new Data(parent, locator);\n this.l10n = locator.getService('localization');\n this.ariaService = this.locator.getService('ariaService');\n this.renderer = this.locator.getService('rendererFactory');\n this.addEventListener();\n }\n /**\n * To initialize grid header, content and footer rendering\n */\n Render.prototype.render = function () {\n var gObj = this.parent;\n this.headerRenderer = this.renderer.getRenderer(RenderType.Header);\n this.contentRenderer = this.renderer.getRenderer(RenderType.Content);\n this.headerRenderer.renderPanel();\n this.contentRenderer.renderPanel();\n if (gObj.getColumns().length) {\n this.headerRenderer.renderTable();\n this.contentRenderer.renderTable();\n this.emptyRow(false);\n }\n this.refreshDataManager();\n };\n /**\n * Refresh the entire Grid.\n * @return {void}\n */\n Render.prototype.refresh = function (e) {\n if (e === void 0) { e = { requestType: 'refresh' }; }\n this.parent.notify(e.requestType + \"-begin\", e);\n this.parent.trigger(events.actionBegin, e);\n if (e.cancel) {\n return;\n }\n this.refreshDataManager(e);\n };\n Render.prototype.refreshComplete = function (e) {\n this.parent.trigger(events.actionComplete, e);\n };\n /**\n * The function is used to refresh the dataManager\n * @return {void}\n */\n Render.prototype.refreshDataManager = function (args) {\n var _this = this;\n if (args === void 0) { args = {}; }\n if (args.requestType !== 'virtualscroll') {\n this.parent.showSpinner();\n }\n this.parent.isEdit = false;\n this.emptyGrid = false;\n var dataManager;\n var isFActon = this.isNeedForeignAction();\n this.ariaService.setBusy(this.parent.getContent().firstChild, true);\n if (isFActon) {\n var deffered = new Deferred();\n dataManager = this.getFData(deffered);\n }\n if (!dataManager) {\n dataManager = this.data.getData(args, this.data.generateQuery().requiresCount())\n .catch(function (e) { _this.parent.trigger(events.actionFailure, e); return e; });\n }\n else {\n dataManager = dataManager.then(function (e) {\n var query = _this.data.generateQuery().requiresCount();\n if (_this.emptyGrid) {\n var def = new Deferred();\n def.resolve({ result: [], count: 0 });\n return def.promise;\n }\n return _this.data.getData(args, query);\n }).catch(function (e) { _this.parent.trigger(events.actionFailure, e); return e; });\n }\n if (this.parent.getForeignKeyColumns().length && (!isFActon || this.parent.searchSettings.key.length)) {\n var deffered_1 = new Deferred();\n dataManager = dataManager.then(function (e) {\n _this.parent.notify(events.getForeignKeyData, { dataManager: dataManager, result: e, promise: deffered_1 });\n return deffered_1.promise;\n });\n }\n if (this.parent.groupSettings.disablePageWiseAggregates && this.parent.groupSettings.columns.length) {\n dataManager = dataManager.then(function (e) { return _this.validateGroupRecords(e); });\n }\n dataManager.then(function (e) { return _this.dataManagerSuccess(e, args); })\n .catch(function (e) { return _this.dataManagerFailure(e); });\n };\n Render.prototype.getFData = function (deferred) {\n this.parent.notify(events.getForeignKeyData, { isComplex: true, promise: deferred });\n return deferred.promise;\n };\n Render.prototype.isNeedForeignAction = function () {\n var gObj = this.parent;\n return !!((gObj.allowFiltering && gObj.filterSettings.columns.length) ||\n (gObj.searchSettings.key.length)) && this.foreignKey(this.parent.getForeignKeyColumns());\n };\n Render.prototype.foreignKey = function (columns) {\n var _this = this;\n return columns.some(function (col) {\n var fbool = false;\n fbool = _this.parent.filterSettings.columns.some(function (value) {\n return col.foreignKeyValue === value.field;\n });\n return !!(fbool || _this.parent.searchSettings.key.length);\n });\n };\n Render.prototype.sendBulkRequest = function (args) {\n var _this = this;\n var promise = this.data.saveChanges(args.changes, this.parent.getPrimaryKeyFieldNames()[0]);\n var query = this.data.generateQuery().requiresCount();\n if (this.data.dataManager.dataSource.offline) {\n this.refreshDataManager({ requestType: 'batchsave' });\n return;\n }\n else {\n promise.then(function (e) {\n _this.data.getData(args, query)\n .then(function (e) { return _this.dmSuccess(e, args); })\n .catch(function (e) { return _this.dmFailure(e); });\n })\n .catch(function (e) { return _this.dmFailure(e); });\n }\n };\n Render.prototype.dmSuccess = function (e, args) {\n this.dataManagerSuccess(e, args);\n };\n Render.prototype.dmFailure = function (e) {\n this.dataManagerFailure(e);\n };\n /**\n * Render empty row to Grid which is used at the time to represent to no records.\n * @return {void}\n * @hidden\n */\n Render.prototype.renderEmptyRow = function () {\n this.emptyRow(true);\n };\n Render.prototype.emptyRow = function (isTrigger) {\n var gObj = this.parent;\n var tbody = this.contentRenderer.getTable().querySelector('tbody');\n var tr;\n remove(tbody);\n tbody = createElement('tbody');\n tr = createElement('tr', { className: 'e-emptyrow' });\n tr.appendChild(createElement('td', {\n innerHTML: this.l10n.getConstant('EmptyRecord'),\n attrs: { colspan: gObj.getColumns().length.toString() }\n }));\n tbody.appendChild(tr);\n this.contentRenderer.renderEmpty(tbody);\n if (isTrigger) {\n this.parent.trigger(events.dataBound, {});\n this.parent.notify(events.onEmpty, { rows: [new Row({ isDataRow: true, cells: [new Cell({ isDataCell: true, visible: true })] })] });\n }\n };\n Render.prototype.dynamicColumnChange = function () {\n if (this.parent.getCurrentViewRecords().length) {\n this.updateColumnType(this.parent.getCurrentViewRecords()[0]);\n }\n };\n Render.prototype.updateColumnType = function (record) {\n var columns = this.parent.getColumns();\n var value;\n var data = record && record.items ? record.items[0] : record;\n var fmtr = this.locator.getService('valueFormatter');\n for (var i = 0, len = columns.length; i < len; i++) {\n value = getValue(columns[i].field || '', data);\n if (columns[i].isForeignColumn() && columns[i].columnData) {\n value = getValue(columns[i].foreignKeyValue || '', columns[i].columnData[0]);\n }\n if (!isNullOrUndefined(value)) {\n this.isColTypeDef = true;\n if (!columns[i].type) {\n columns[i].type = value.getDay ? (value.getHours() > 0 || value.getMinutes() > 0 ||\n value.getSeconds() > 0 || value.getMilliseconds() > 0 ? 'datetime' : 'date') : typeof (value);\n }\n }\n else {\n columns[i].type = columns[i].type || null;\n }\n var valueFormatter = new ValueFormatter();\n if (columns[i].format && (columns[i].format.skeleton || columns[i].format.format)) {\n columns[i].setFormatter(valueFormatter.getFormatFunction(columns[i].format));\n columns[i].setParser(valueFormatter.getParserFunction(columns[i].format));\n }\n if (typeof (columns[i].format) === 'string') {\n setFormatter(this.locator, columns[i]);\n }\n else if (!columns[i].format && columns[i].type === 'number') {\n columns[i].setParser(fmtr.getParserFunction({ format: 'n2' }));\n }\n }\n };\n Render.prototype.dataManagerSuccess = function (e, args) {\n var gObj = this.parent;\n gObj.trigger(events.beforeDataBound, e);\n var len = Object.keys(e.result).length;\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.notify(events.tooltipDestroy, {});\n gObj.currentViewData = e.result;\n if (!len && e.count && gObj.allowPaging) {\n gObj.prevPageMoving = true;\n gObj.pageSettings.totalRecordsCount = e.count;\n gObj.pageSettings.currentPage = Math.ceil(e.count / gObj.pageSettings.pageSize);\n gObj.dataBind();\n return;\n }\n if (!gObj.getColumns().length && len) {\n this.updatesOnInitialRender(e);\n }\n if (!this.isColTypeDef && gObj.getCurrentViewRecords()) {\n this.updateColumnType(gObj.getCurrentViewRecords()[0]);\n }\n this.parent.notify(events.dataReady, extend({ count: e.count, result: e.result, aggregates: e.aggregates }, args));\n if (gObj.groupSettings.columns.length || (args && args.requestType === 'ungrouping')) {\n this.headerRenderer.refreshUI();\n }\n if (len) {\n this.contentRenderer.refreshContentRows(args);\n }\n else {\n if (!gObj.getColumns().length) {\n gObj.element.innerHTML = '';\n alert(this.l10n.getConstant('EmptyDataSourceError')); //ToDO: change this alert as dialog\n return;\n }\n this.contentRenderer.setRowElements([]);\n this.renderEmptyRow();\n if (args) {\n var action = (args.requestType || '').toLowerCase() + '-complete';\n this.parent.notify(action, args);\n }\n this.parent.hideSpinner();\n }\n this.parent.notify(events.toolbarRefresh, {});\n };\n Render.prototype.dataManagerFailure = function (e) {\n this.ariaService.setOptions(this.parent.getContent().firstChild, { busy: false, invalid: true });\n this.parent.trigger(events.actionFailure, { error: e });\n this.parent.currentViewData = [];\n this.renderEmptyRow();\n this.parent.hideSpinner();\n };\n Render.prototype.updatesOnInitialRender = function (e) {\n this.buildColumns(e.result[0]);\n prepareColumns(this.parent.columns);\n this.headerRenderer.renderTable();\n this.contentRenderer.renderTable();\n this.parent.notify(events.autoCol, {});\n };\n Render.prototype.buildColumns = function (record) {\n var columns = Object.keys(record);\n var cols = [];\n for (var i = 0, len = columns.length; i < len; i++) {\n cols[i] = { 'field': columns[i] };\n if (this.parent.enableColumnVirtualization) {\n cols[i].width = !isNullOrUndefined(cols[i].width) ? cols[i].width : 200;\n }\n }\n this.parent.columns = cols;\n };\n Render.prototype.instantiateRenderer = function () {\n this.renderer.addRenderer(RenderType.Header, new HeaderRender(this.parent, this.locator));\n this.renderer.addRenderer(RenderType.Content, new ContentRender(this.parent, this.locator));\n var cellrender = this.locator.getService('cellRendererFactory');\n cellrender.addCellRenderer(CellType.Header, new HeaderCellRenderer(this.parent, this.locator));\n cellrender.addCellRenderer(CellType.Data, new CellRenderer(this.parent, this.locator));\n cellrender.addCellRenderer(CellType.StackedHeader, new StackedHeaderCellRenderer(this.parent, this.locator));\n cellrender.addCellRenderer(CellType.Indent, new IndentCellRenderer(this.parent, this.locator));\n cellrender.addCellRenderer(CellType.GroupCaption, new GroupCaptionCellRenderer(this.parent, this.locator));\n cellrender.addCellRenderer(CellType.GroupCaptionEmpty, new GroupCaptionEmptyCellRenderer(this.parent, this.locator));\n cellrender.addCellRenderer(CellType.Expand, new ExpandCellRenderer(this.parent, this.locator));\n cellrender.addCellRenderer(CellType.HeaderIndent, new HeaderIndentCellRenderer(this.parent, this.locator));\n cellrender.addCellRenderer(CellType.StackedHeader, new StackedHeaderCellRenderer(this.parent, this.locator));\n cellrender.addCellRenderer(CellType.DetailHeader, new DetailHeaderIndentCellRenderer(this.parent, this.locator));\n cellrender.addCellRenderer(CellType.DetailExpand, new DetailExpandCellRenderer(this.parent, this.locator));\n };\n Render.prototype.addEventListener = function () {\n var _this = this;\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.initialLoad, this.instantiateRenderer, this);\n this.parent.on(events.modelChanged, this.refresh, this);\n this.parent.on(events.refreshComplete, this.refreshComplete, this);\n this.parent.on(events.bulkSave, this.sendBulkRequest, this);\n this.parent.on(events.showEmptyGrid, function () { _this.emptyGrid = true; }, this);\n this.parent.on(events.autoCol, this.dynamicColumnChange, this);\n };\n /** @hidden */\n Render.prototype.validateGroupRecords = function (e) {\n var _this = this;\n var index = e.result.length - 1;\n if (index < 0) {\n return Promise.resolve(e);\n }\n var group0 = e.result[0];\n var groupN = e.result[index];\n var predicate = [];\n var addWhere = function (input) {\n [group0, groupN].forEach(function (group) {\n return predicate.push(new Predicate('field', '==', group.field).and(_this.getPredicate('key', 'equal', group.key)));\n });\n input.where(Predicate.or(predicate));\n };\n var query = new Query();\n addWhere(query);\n var curDm = new DataManager(e.result);\n var curFilter = curDm.executeLocal(query);\n var newQuery = this.data.generateQuery(true);\n var rPredicate = [];\n if (this.data.isRemote()) {\n [group0, groupN].forEach(function (group) {\n return rPredicate.push(_this.getPredicate(group.field, 'equal', group.key));\n });\n newQuery.where(Predicate.or(rPredicate));\n }\n else {\n addWhere(newQuery);\n }\n var deferred = new Deferred();\n this.data.getData({}, newQuery).then(function (r) {\n _this.updateGroupInfo(curFilter, r.result);\n deferred.resolve(e);\n }).catch(function (e) { return deferred.reject(e); });\n return deferred.promise;\n };\n Render.prototype.getPredicate = function (key, operator, value) {\n if (value instanceof Date) {\n return getDatePredicate({ field: key, operator: operator, value: value });\n }\n return new Predicate(key, operator, value);\n };\n Render.prototype.updateGroupInfo = function (current, untouched) {\n var _this = this;\n var dm = new DataManager(untouched);\n current.forEach(function (element, index, array) {\n var uGroup = dm.executeLocal(new Query()\n .where(new Predicate('field', '==', element.field).and(_this.getPredicate('key', 'equal', element.key))))[0];\n element.count = uGroup.count;\n var itemGroup = element.items;\n var uGroupItem = uGroup.items;\n if (itemGroup.GroupGuid) {\n element.items = _this.updateGroupInfo(element.items, uGroup.items);\n }\n _this.parent.aggregates.forEach(function (row) {\n return row.columns.forEach(function (column) {\n var types = column.type instanceof Array ? column.type : [column.type];\n types.forEach(function (type) {\n var key = column.field + ' - ' + type.toLowerCase();\n var data = itemGroup.level ? uGroupItem.records : uGroup.items;\n var context = _this.parent;\n if (type === 'Custom') {\n element.aggregates[key] = column.customAggregate ? column.customAggregate.call(context, data, column) : '';\n }\n else {\n element.aggregates[key] = DataUtil.aggregates[type.toLowerCase()](data, column.field);\n }\n });\n });\n });\n });\n return current;\n };\n return Render;\n}());\nexport { Render };\n","import { isNullOrUndefined, getEnumValue } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\n/**\n * CellRendererFactory\n * @hidden\n */\nvar CellRendererFactory = /** @class */ (function () {\n function CellRendererFactory() {\n this.cellRenderMap = {};\n }\n CellRendererFactory.prototype.addCellRenderer = function (name, type) {\n name = typeof name === 'string' ? name : getEnumValue(CellType, name);\n if (isNullOrUndefined(this.cellRenderMap[name])) {\n this.cellRenderMap[name] = type;\n }\n };\n CellRendererFactory.prototype.getCellRenderer = function (name) {\n name = typeof name === 'string' ? name : getEnumValue(CellType, name);\n if (isNullOrUndefined(this.cellRenderMap[name])) {\n throw \"The cellRenderer \" + name + \" is not found\";\n }\n else {\n return this.cellRenderMap[name];\n }\n };\n return CellRendererFactory;\n}());\nexport { CellRendererFactory };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * ServiceLocator\n * @hidden\n */\nvar ServiceLocator = /** @class */ (function () {\n function ServiceLocator() {\n this.services = {};\n }\n ServiceLocator.prototype.register = function (name, type) {\n if (isNullOrUndefined(this.services[name])) {\n this.services[name] = type;\n }\n };\n ServiceLocator.prototype.getService = function (name) {\n if (isNullOrUndefined(this.services[name])) {\n throw \"The service \" + name + \" is not registered\";\n }\n return this.services[name];\n };\n return ServiceLocator;\n}());\nexport { ServiceLocator };\n","import { isNullOrUndefined, getEnumValue } from '@syncfusion/ej2-base';\nimport { RenderType } from '../base/enum';\n/**\n * RendererFactory\n * @hidden\n */\nvar RendererFactory = /** @class */ (function () {\n function RendererFactory() {\n this.rendererMap = {};\n }\n RendererFactory.prototype.addRenderer = function (name, type) {\n var rName = getEnumValue(RenderType, name);\n if (isNullOrUndefined(this.rendererMap[rName])) {\n this.rendererMap[rName] = type;\n }\n };\n RendererFactory.prototype.getRenderer = function (name) {\n var rName = getEnumValue(RenderType, name);\n if (isNullOrUndefined(this.rendererMap[rName])) {\n throw \"The renderer \" + rName + \" is not found\";\n }\n else {\n return this.rendererMap[rName];\n }\n };\n return RendererFactory;\n}());\nexport { RendererFactory };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { formatUnit } from '@syncfusion/ej2-base';\nimport { columnWidthChanged } from '../base/constant';\nimport { Column } from '../models/column';\n/**\n * ColumnWidthService\n * @hidden\n */\nvar ColumnWidthService = /** @class */ (function () {\n function ColumnWidthService(parent) {\n this.parent = parent;\n }\n ColumnWidthService.prototype.setWidthToColumns = function () {\n var _this = this;\n var i = 0;\n var indexes = this.parent.getColumnIndexesInView();\n var wFlag = true;\n if (this.parent.allowGrouping) {\n for (var len = this.parent.groupSettings.columns.length; i < len; i++) {\n if (this.parent.enableColumnVirtualization && indexes.indexOf(i) === -1) {\n wFlag = false;\n continue;\n }\n this.setColumnWidth(new Column({ width: '30px' }), i);\n }\n }\n if (this.parent.detailTemplate || this.parent.childGrid) {\n this.setColumnWidth(new Column({ width: '30px' }), i);\n }\n this.parent.getColumns().forEach(function (column, index) {\n _this.setColumnWidth(column, wFlag ? undefined : index);\n });\n };\n ColumnWidthService.prototype.setColumnWidth = function (column, index, module) {\n var columnIndex = isNullOrUndefined(index) ? this.parent.getNormalizedColumnIndex(column.uid) : index;\n var cWidth = this.getWidth(column);\n if (cWidth !== null) {\n this.setWidth(cWidth, columnIndex);\n if ((this.parent.allowResizing && module === 'resize') || (this.parent.getFrozenColumns() && this.parent.allowResizing)) {\n this.setWidthToTable();\n }\n this.parent.notify(columnWidthChanged, { index: columnIndex, width: cWidth, column: column, module: module });\n }\n };\n ColumnWidthService.prototype.setWidth = function (width, index) {\n var header = this.parent.getHeaderTable();\n var content = this.parent.getContentTable();\n var fWidth = formatUnit(width);\n var headerCol;\n var frzCols = this.parent.getFrozenColumns();\n var mHdr = this.parent.getHeaderContent().querySelector('.e-movableheader');\n if (frzCols && index >= frzCols && mHdr && mHdr.querySelector('colgroup')) {\n headerCol = mHdr.querySelector('colgroup').children[index - frzCols];\n }\n else {\n headerCol = header.querySelector('colgroup').children[index];\n }\n if (headerCol) {\n headerCol.style.width = fWidth;\n }\n var contentCol;\n if (frzCols && index >= frzCols) {\n contentCol = this.parent.getContent().querySelector('.e-movablecontent')\n .querySelector('colgroup').children[index - frzCols];\n }\n else {\n contentCol = content.querySelector('colgroup').children[index];\n }\n if (contentCol) {\n contentCol.style.width = fWidth;\n }\n var edit = content.querySelector('.e-table.e-inline-edit');\n if (edit) {\n if (edit.querySelector('colgroup').children[index]) {\n edit.querySelector('colgroup').children[index].style.width = fWidth;\n }\n }\n };\n ColumnWidthService.prototype.getSiblingsHeight = function (element) {\n var previous = this.getHeightFromDirection(element, 'previous');\n var next = this.getHeightFromDirection(element, 'next');\n return previous + next;\n };\n ColumnWidthService.prototype.getHeightFromDirection = function (element, direction) {\n var sibling = element[direction + 'ElementSibling'];\n var result = 0;\n var classList = ['e-gridheader', 'e-gridfooter', 'e-groupdroparea', 'e-gridpager', 'e-toolbar'];\n while (sibling) {\n if (classList.some(function (value) { return sibling.classList.contains(value); })) {\n result += sibling.offsetHeight;\n }\n sibling = sibling[direction + 'ElementSibling'];\n }\n return result;\n };\n ColumnWidthService.prototype.getWidth = function (column) {\n if (isNullOrUndefined(column.width) && this.parent.allowResizing) {\n column.width = 200;\n }\n if (!column.width) {\n return null;\n }\n var width = parseInt(column.width.toString(), 10);\n if (column.minWidth && width < parseInt(column.minWidth.toString(), 10)) {\n return column.minWidth;\n }\n else if ((column.maxWidth && width > parseInt(column.maxWidth.toString(), 10))) {\n return column.maxWidth;\n }\n else {\n return column.width;\n }\n };\n ColumnWidthService.prototype.getTableWidth = function (columns) {\n var tWidth = 0;\n for (var _i = 0, columns_1 = columns; _i < columns_1.length; _i++) {\n var column = columns_1[_i];\n var cWidth = this.getWidth(column);\n if (column.visible !== false && cWidth !== null) {\n tWidth += parseInt(cWidth.toString(), 10);\n }\n }\n return tWidth;\n };\n ColumnWidthService.prototype.setWidthToFrozenTable = function () {\n var columns = this.parent.getColumns();\n columns.splice(this.parent.getFrozenColumns(), columns.length);\n var freezeWidth = formatUnit(this.getTableWidth(columns));\n this.parent.getHeaderTable().style.width = freezeWidth;\n this.parent.getContentTable().style.width = freezeWidth;\n };\n ColumnWidthService.prototype.setWidthToMovableTable = function () {\n var columns = this.parent.getColumns();\n columns.splice(0, this.parent.getFrozenColumns());\n var movableWidth = formatUnit(this.getTableWidth(columns));\n if (this.parent.getHeaderContent().querySelector('.e-movableheader').firstElementChild) {\n this.parent.getHeaderContent().querySelector('.e-movableheader').firstElementChild.style.width\n = movableWidth;\n }\n this.parent.getContent().querySelector('.e-movablecontent').firstElementChild.style.width =\n movableWidth;\n };\n ColumnWidthService.prototype.setWidthToTable = function () {\n var tWidth = formatUnit(this.getTableWidth(this.parent.getColumns()));\n if (this.parent.getFrozenColumns()) {\n this.setWidthToFrozenTable();\n this.setWidthToMovableTable();\n }\n else {\n if (this.parent.detailTemplate || this.parent.childGrid) {\n this.setColumnWidth(new Column({ width: '30px' }));\n }\n this.parent.getHeaderTable().style.width = tWidth;\n this.parent.getContentTable().style.width = tWidth;\n }\n var edit = this.parent.element.querySelector('.e-table.e-inline-edit');\n if (edit) {\n edit.style.width = tWidth;\n }\n };\n return ColumnWidthService;\n}());\nexport { ColumnWidthService };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { EventHandler, getValue, closest, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, extend, Browser } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\nimport * as event from '../base/constant';\n/**\n * FocusStrategy class\n * @hidden\n */\nvar FocusStrategy = /** @class */ (function () {\n function FocusStrategy(parent) {\n this.currentInfo = {};\n this.oneTime = true;\n this.swap = {};\n this.forget = true;\n this.skipFocus = true;\n this.focusByClick = false;\n this.prevIndexes = {};\n this.parent = parent;\n this.addEventListener();\n }\n FocusStrategy.prototype.focusCheck = function (e) {\n var target = e.target;\n this.focusByClick = true;\n this.skipFocus = target.classList.contains('e-grid');\n };\n FocusStrategy.prototype.onFocus = function () {\n if (this.parent.isDestroyed || Browser.isDevice || this.parent.enableVirtualization) {\n return;\n }\n this.setActive(this.parent.frozenRows === 0, this.parent.frozenColumns !== 0);\n var current = this.getContent().matrix.get(0, -1, [0, 1], null, this.getContent().validator());\n this.getContent().matrix.select(current[0], current[1]);\n if (this.skipFocus) {\n this.focus();\n this.skipFocus = false;\n }\n };\n FocusStrategy.prototype.passiveFocus = function (e) {\n if (this.parent.isDestroyed) {\n return;\n }\n if (e.target && e.target.classList.contains('e-detailcell')) {\n this.currentInfo.skipAction = false;\n addClass([this.currentInfo.element], ['e-focused', 'e-focus']);\n }\n };\n FocusStrategy.prototype.onBlur = function (e) {\n if ((this.parent.isEdit || e && (!e.relatedTarget || closest(e.relatedTarget, '.e-grid')))) {\n return;\n }\n this.removeFocus();\n this.skipFocus = false;\n this.currentInfo.skipAction = false;\n if (this.getContent().getFocusInfo().elementToFocus) {\n this.getContent().getFocusInfo().elementToFocus.tabIndex = 0;\n }\n };\n FocusStrategy.prototype.onClick = function (e, force) {\n var isContent = !isNullOrUndefined(closest(e.target, '.e-gridcontent'));\n var isHeader = !isNullOrUndefined(closest(e.target, '.e-gridheader'));\n isContent = isContent && isHeader ? !isContent : isContent;\n var isFrozen = !isNullOrUndefined(closest(e.target, '.e-frozencontent')) ||\n !isNullOrUndefined(closest(e.target, '.e-frozenheader'));\n if (!isContent && isNullOrUndefined(closest(e.target, '.e-gridheader')) ||\n e.target.classList.contains('e-content')) {\n return;\n }\n this.setActive(isContent, isFrozen);\n if (!isContent && isNullOrUndefined(closest(e.target, '.e-gridheader')) ||\n e.target.classList.contains('e-filtermenudiv')) {\n this.clearOutline();\n return;\n }\n var beforeArgs = { cancel: false, byKey: false, byClick: !isNullOrUndefined(e.target), clickArgs: e };\n this.parent.notify(event.beforeCellFocused, beforeArgs);\n if (beforeArgs.cancel || closest(e.target, '.e-inline-edit')) {\n return;\n }\n this.setActive(isContent, isFrozen);\n if (this.getContent()) {\n var returnVal = this.getContent().onClick(e, force);\n if (returnVal === false) {\n return;\n }\n this.focus();\n }\n };\n FocusStrategy.prototype.onKeyPress = function (e) {\n if (this.skipOn(e)) {\n return;\n }\n var beforeArgs = { cancel: false, byKey: true, byClick: false, keyArgs: e };\n this.parent.notify(event.beforeCellFocused, beforeArgs);\n if (beforeArgs.cancel) {\n return;\n }\n var bValue = this.getContent().matrix.current;\n this.currentInfo.outline = true;\n var swapInfo = this.getContent().jump(e.action, bValue);\n this.swap = swapInfo;\n if (swapInfo.swap) {\n this.setActive(!swapInfo.toHeader, swapInfo.toFrozen);\n this.getContent().matrix.current = this.getContent().getNextCurrent(bValue, swapInfo, this.active, e.action);\n this.prevIndexes = {};\n }\n this.setActiveByKey(e.action, this.getContent());\n var returnVal = this.getContent().onKeyPress(e);\n if (returnVal === false) {\n this.clearIndicator();\n return;\n }\n e.preventDefault();\n this.focus(e);\n };\n FocusStrategy.prototype.skipOn = function (e) {\n var target = e.target;\n if (!target) {\n return false;\n }\n if (this.currentInfo.skipAction) {\n this.clearIndicator();\n return true;\n }\n if (['pageUp', 'pageDown'].indexOf(e.action) > -1) {\n this.clearIndicator();\n return true;\n }\n return (e.action === 'delete'\n || (this.parent.editSettings.mode !== 'Batch' && (this.parent.isEdit || ['insert', 'f2'].indexOf(e.action) > -1))\n || (closest(document.activeElement, '.e-filterbarcell') !== null ||\n closest(document.activeElement, '#' + this.parent.element.id + '_searchbar') !== null\n && ['enter', 'leftArrow', 'rightArrow',\n 'shiftLeft', 'shiftRight', 'ctrlPlusA'].indexOf(e.action) > -1)\n || (closest(target, '.e-gridcontent') === null && closest(target, '.e-gridheader') === null)\n || (e.action === 'space' && (!target.classList.contains('e-gridchkbox') && closest(target, '.e-gridchkbox') === null\n && closest(target, '.e-headerchkcelldiv') === null)));\n };\n FocusStrategy.prototype.getFocusedElement = function () {\n return this.currentInfo.elementToFocus;\n };\n FocusStrategy.prototype.getContent = function () {\n return this.active || this.content;\n };\n FocusStrategy.prototype.setActive = function (content, isFrozen) {\n this.active = content ? isFrozen ? this.fContent : this.content :\n isFrozen ? this.fHeader : this.header;\n };\n FocusStrategy.prototype.setFocusedElement = function (element) {\n var _this = this;\n this.currentInfo.elementToFocus = element;\n setTimeout(function () { return _this.currentInfo.elementToFocus.focus(); }, 0);\n };\n FocusStrategy.prototype.focus = function (e) {\n this.removeFocus();\n this.addFocus(this.getContent().getFocusInfo(), e);\n };\n FocusStrategy.prototype.removeFocus = function (e) {\n if (!this.currentInfo.element) {\n return;\n }\n removeClass([this.currentInfo.element, this.currentInfo.elementToFocus], ['e-focused', 'e-focus']);\n this.currentInfo.element.tabIndex = -1;\n };\n FocusStrategy.prototype.addFocus = function (info, e) {\n this.currentInfo = info;\n this.currentInfo.outline = info.outline && !isNullOrUndefined(e);\n if (!info.element) {\n return;\n }\n var isFocused = info.elementToFocus.classList.contains('e-focus');\n if (isFocused) {\n return;\n }\n if (this.currentInfo.outline) {\n addClass([info.element], ['e-focused']);\n }\n addClass([info.elementToFocus], ['e-focus']);\n info.element.tabIndex = 0;\n if (!isFocused) {\n this.setFocusedElement(info.elementToFocus);\n }\n this.parent.notify(event.cellFocused, {\n element: info.elementToFocus,\n parent: info.element,\n indexes: this.getContent().matrix.current,\n byKey: !isNullOrUndefined(e),\n byClick: isNullOrUndefined(e),\n keyArgs: e,\n isJump: this.swap.swap,\n container: this.getContent().getInfo(e),\n outline: !isNullOrUndefined(e),\n swapInfo: this.swap\n });\n var _a = this.getContent().matrix.current, rowIndex = _a[0], cellIndex = _a[1];\n this.prevIndexes = { rowIndex: rowIndex, cellIndex: cellIndex };\n this.focusedColumnUid = this.parent.getColumnByIndex(cellIndex).uid;\n this.focusByClick = false;\n };\n FocusStrategy.prototype.refreshMatrix = function (content) {\n var _this = this;\n return function (e) {\n if (content && (e.args && e.args.isFrozen) && !_this.fContent) {\n _this.fContent = new FixedContentFocus(_this.parent);\n }\n else if (content && !_this.content) {\n _this.content = new ContentFocus(_this.parent);\n }\n if (!content && (e.args && e.args.isFrozen) && !_this.fHeader) {\n _this.fHeader = new FixedHeaderFocus(_this.parent);\n }\n else if (!content && !_this.header) {\n _this.header = new HeaderFocus(_this.parent);\n }\n var cFocus = content ? (e.args && e.args.isFrozen) ? _this.fContent : _this.content :\n (e.args && e.args.isFrozen) ? _this.fHeader : _this.header;\n var rows = content ? e.rows.slice(_this.parent.frozenRows) : e.rows;\n var updateRow = content ? e.rows.slice(0, _this.parent.frozenRows) : e.rows;\n var matrix = cFocus.matrix.generate(updateRow, cFocus.selector);\n cFocus.matrix.generate(rows, cFocus.selector);\n cFocus.generateRows(updateRow, { matrix: matrix, handlerInstance: (e.args && e.args.isFrozen) ? _this.fHeader : _this.header });\n if (!Browser.isDevice && !_this.focusByClick && e && e.args && e.args.requestType === 'paging') {\n _this.skipFocus = false;\n _this.parent.element.focus();\n }\n if (e && e.args && e.args.requestType === 'virtualscroll') {\n if (_this.currentInfo.uid) {\n var index_1;\n var bool = e.rows.some(function (row, i) {\n index_1 = i;\n return row.uid === _this.currentInfo.uid;\n });\n if (bool) {\n _this.content.matrix.current[0] = index_1;\n _this.content.matrix.current[1] = _this.parent.getColumnIndexByUid(_this.focusedColumnUid) || 0;\n _this.focus();\n }\n }\n }\n };\n };\n FocusStrategy.prototype.addEventListener = function () {\n var _this = this;\n if (this.parent.isDestroyed) {\n return;\n }\n EventHandler.add(this.parent.element, 'mousedown', this.focusCheck, this);\n EventHandler.add(this.parent.element, 'focus', this.onFocus, this);\n this.parent.element.addEventListener('focus', this.passiveHandler = function (e) { return _this.passiveFocus(e); }, true);\n EventHandler.add(this.parent.element, 'focusout', this.onBlur, this);\n this.parent.on(event.keyPressed, this.onKeyPress, this);\n this.parent.on(event.click, this.onClick, this);\n this.parent.on(event.contentReady, this.refreshMatrix(true), this);\n this.parent.on(event.headerRefreshed, this.refreshMatrix(), this);\n this.parent.on('close-edit', this.restoreFocus, this);\n ['start-edit', 'start-add'].forEach(function (evt) { return _this.parent.on(evt, _this.clearIndicator, _this); });\n ['sorting'].forEach(function (action) { return _this.parent.on(action + \"-complete\", _this.restoreFocus, _this); });\n this.parent.on(event.batchAdd, this.refreshMatrix(true), this);\n this.parent.on(event.batchCancel, this.refreshMatrix(true), this);\n this.parent.on(event.batchDelete, this.refreshMatrix(true), this);\n this.parent.on(event.detailDataBound, this.refreshMatrix(true), this);\n this.parent.on(event.onEmpty, this.refreshMatrix(true), this);\n this.parent.on(event.cellFocused, this.internalCellFocus, this);\n };\n FocusStrategy.prototype.removeEventListener = function () {\n var _this = this;\n if (this.parent.isDestroyed) {\n return;\n }\n EventHandler.remove(this.parent.element, 'mousedown', this.focusCheck);\n EventHandler.remove(this.parent.element, 'focus', this.onFocus);\n EventHandler.remove(this.parent.element, 'focusout', this.onBlur);\n this.parent.element.removeEventListener('focus', this.passiveHandler, true);\n this.parent.off(event.keyPressed, this.onKeyPress);\n this.parent.off(event.click, this.onClick);\n this.parent.off(event.contentReady, this.refreshMatrix(true));\n this.parent.off(event.headerRefreshed, this.refreshMatrix());\n this.parent.off('close-edit', this.restoreFocus);\n ['start-edit', 'start-add'].forEach(function (evt) { return _this.parent.off(evt, _this.clearOutline); });\n ['sorting'].forEach(function (action) { return _this.parent.off(action + \"-complete\", _this.restoreFocus); });\n this.parent.off(event.batchAdd, this.refreshMatrix(true));\n this.parent.off(event.batchDelete, this.refreshMatrix(true));\n this.parent.off(event.batchCancel, this.refreshMatrix(true));\n this.parent.off(event.detailDataBound, this.refreshMatrix(true));\n this.parent.off(event.onEmpty, this.refreshMatrix(true));\n this.parent.off(event.cellFocused, this.internalCellFocus);\n };\n FocusStrategy.prototype.destroy = function () {\n this.removeEventListener();\n };\n FocusStrategy.prototype.restoreFocus = function () {\n this.addFocus(this.getContent().getFocusInfo());\n };\n FocusStrategy.prototype.clearOutline = function () {\n this.getContent().matrix.current = this.getContent().matrix.get(0, -1, [0, 1], 'downArrow', this.getContent().validator());\n this.clearIndicator();\n };\n FocusStrategy.prototype.clearIndicator = function () {\n if (!this.currentInfo.element || !this.currentInfo.elementToFocus) {\n return;\n }\n removeClass([this.currentInfo.element, this.currentInfo.elementToFocus], ['e-focus', 'e-focused']);\n };\n FocusStrategy.prototype.getPrevIndexes = function () {\n var forget = this.forget;\n this.forget = false;\n return forget ? { rowIndex: null, cellIndex: null } : this.prevIndexes;\n };\n FocusStrategy.prototype.forgetPrevious = function () {\n this.forget = true;\n };\n FocusStrategy.prototype.setActiveByKey = function (action, active) {\n var _this = this;\n if (this.parent.frozenColumns === 0 && this.parent.frozenRows === 0) {\n return;\n }\n var info;\n var actions = {\n 'home': function () { return ({ toHeader: !info.isContent, toFrozen: true }); },\n 'end': function () { return ({ toHeader: !info.isContent, toFrozen: false }); },\n 'ctrlHome': function () { return ({ toHeader: true, toFrozen: _this.parent.frozenColumns !== 0 }); },\n 'ctrlEnd': function () { return ({ toHeader: false, toFrozen: false }); }\n };\n if (!(action in actions)) {\n return;\n }\n info = active.getInfo();\n var swap = actions[action]();\n this.setActive(!swap.toHeader, swap.toFrozen);\n this.getContent().matrix.current = active.matrix.current;\n };\n FocusStrategy.prototype.internalCellFocus = function (e) {\n if (!(e.byKey && e.container.isContent && e.keyArgs.action === 'enter'\n && (e.parent.classList.contains('e-detailcell') ||\n e.parent.classList.contains('e-unboundcell') || e.parent.classList.contains('e-templatecell')))) {\n return;\n }\n this.clearIndicator();\n var focusEle = this.getContent().getFocusable(this.getFocusedElement());\n this.setFocusedElement(focusEle);\n this.currentInfo.skipAction = true;\n };\n return FocusStrategy;\n}());\nexport { FocusStrategy };\n/**\n * Create matrix from row collection which act as mental model for cell navigation\n * @hidden\n */\nvar Matrix = /** @class */ (function () {\n function Matrix() {\n this.matrix = [];\n this.current = [];\n }\n Matrix.prototype.set = function (rowIndex, columnIndex, allow) {\n rowIndex = Math.max(0, Math.min(rowIndex, this.rows));\n columnIndex = Math.max(0, Math.min(columnIndex, this.columns));\n this.matrix[rowIndex] = this.matrix[rowIndex] || [];\n this.matrix[rowIndex][columnIndex] = allow ? 1 : 0;\n };\n Matrix.prototype.get = function (rowIndex, columnIndex, navigator, action, validator) {\n var tmp = columnIndex;\n if (rowIndex + navigator[0] < 0) {\n return [rowIndex, columnIndex];\n }\n rowIndex = Math.max(0, Math.min(rowIndex + navigator[0], this.rows));\n columnIndex = Math.max(0, Math.min(columnIndex + navigator[1], this.matrix[rowIndex].length - 1));\n if (tmp + navigator[1] > this.matrix[rowIndex].length - 1 && validator(rowIndex, columnIndex, action)) {\n return [rowIndex, tmp];\n }\n var first = this.first(this.matrix[rowIndex], columnIndex, navigator, true, action);\n columnIndex = first === null ? tmp : first;\n var val = getValue(rowIndex + \".\" + columnIndex, this.matrix);\n return this.inValid(val) || !validator(rowIndex, columnIndex, action) ?\n this.get(rowIndex, tmp, navigator, action, validator) : [rowIndex, columnIndex];\n };\n Matrix.prototype.first = function (vector, index, navigator, moveTo, action) {\n if (((index < 0 || index === vector.length) && this.inValid(vector[index])\n && (action !== 'upArrow' && action !== 'downArrow')) || !vector.some(function (v) { return v === 1; })) {\n return null;\n }\n return !this.inValid(vector[index]) ? index :\n this.first(vector, (['upArrow', 'downArrow', 'shiftUp', 'shiftDown'].indexOf(action) !== -1) ? moveTo ? 0 : ++index : index + navigator[1], navigator, false, action);\n };\n Matrix.prototype.select = function (rowIndex, columnIndex) {\n rowIndex = Math.max(0, Math.min(rowIndex, this.rows));\n columnIndex = Math.max(0, Math.min(columnIndex, this.matrix[rowIndex].length - 1));\n this.current = [rowIndex, columnIndex];\n };\n Matrix.prototype.generate = function (rows, selector) {\n var _this = this;\n this.rows = rows.length - 1;\n this.matrix = [];\n rows.forEach(function (row, rIndex) {\n var cells = row.cells.filter(function (c) { return c.isSpanned !== true; });\n _this.columns = Math.max(cells.length - 1, _this.columns | 0);\n cells.forEach(function (cell, cIndex) {\n _this.set(rIndex, cIndex, selector(row, cell));\n });\n });\n return this.matrix;\n };\n Matrix.prototype.inValid = function (value) {\n return value === 0 || value === undefined;\n };\n return Matrix;\n}());\nexport { Matrix };\n/**\n * @hidden\n */\nvar ContentFocus = /** @class */ (function () {\n function ContentFocus(parent) {\n var _this = this;\n this.matrix = new Matrix();\n this.parent = parent;\n this.keyActions = {\n 'rightArrow': [0, 1],\n 'tab': [0, 1],\n 'leftArrow': [0, -1],\n 'shiftTab': [0, -1],\n 'upArrow': [-1, 0],\n 'downArrow': [1, 0],\n 'shiftUp': [-1, 0],\n 'shiftDown': [1, 0],\n 'shiftRight': [0, 1],\n 'shiftLeft': [0, -1],\n 'enter': [1, 0],\n 'shiftEnter': [-1, 0]\n };\n this.indexesByKey = function (action) {\n var opt = {\n 'home': [_this.matrix.current[0], -1, 0, 1],\n 'end': [_this.matrix.current[0], _this.matrix.columns + 1, 0, -1],\n 'ctrlHome': [0, -1, 0, 1],\n 'ctrlEnd': [_this.matrix.rows, _this.matrix.columns + 1, 0, -1]\n };\n return opt[action] || null;\n };\n }\n ContentFocus.prototype.getTable = function () {\n return (this.parent.frozenColumns ?\n this.parent.getContent().querySelector('.e-movablecontent .e-table') :\n this.parent.getContentTable());\n };\n ContentFocus.prototype.onKeyPress = function (e) {\n var navigator = this.keyActions[e.action];\n var current = this.getCurrentFromAction(e.action, navigator, e.action in this.keyActions, e);\n if (!current) {\n return;\n }\n if ((['tab', 'shiftTab'].indexOf(e.action) > -1 && this.matrix.current || []).toString() === current.toString()) {\n if (current.toString() === [this.matrix.rows, this.matrix.columns].toString() ||\n current.toString() === [0, 0].toString()) {\n return false;\n }\n }\n this.matrix.select(current[0], current[1]);\n };\n ContentFocus.prototype.getCurrentFromAction = function (action, navigator, isPresent, e) {\n if (navigator === void 0) { navigator = [0, 0]; }\n if (!isPresent && !this.indexesByKey(action)) {\n return null;\n }\n if (!this.shouldFocusChange(e)) {\n return this.matrix.current;\n }\n var _a = this.indexesByKey(action) || this.matrix.current.concat(navigator), rowIndex = _a[0], cellIndex = _a[1], rN = _a[2], cN = _a[3];\n var current = this.matrix.get(rowIndex, cellIndex, [rN, cN], action, this.validator());\n return current;\n };\n ContentFocus.prototype.onClick = function (e, force) {\n var target = e.target;\n target = (target.classList.contains('e-rowcell') ? target : closest(target, 'td'));\n target = target ? target : closest(e.target, 'td.e-detailrowcollapse')\n || closest(e.target, 'td.e-detailrowexpand');\n target = closest(e.target, 'td.e-detailcell') ?\n isNullOrUndefined(closest(closest(e.target, '.e-grid'), 'td.e-detailcell')) ? null : target : target;\n target = target && closest(target, 'table').classList.contains('e-table') ? target : null;\n if (!target) {\n return false;\n }\n var _a = [target.parentElement.rowIndex, target.cellIndex], rowIndex = _a[0], cellIndex = _a[1];\n var _b = this.matrix.current, oRowIndex = _b[0], oCellIndex = _b[1];\n var val = getValue(rowIndex + \".\" + cellIndex, this.matrix.matrix);\n if (this.matrix.inValid(val) || (!force && oRowIndex === rowIndex && oCellIndex === cellIndex)) {\n return false;\n }\n this.matrix.select(rowIndex, cellIndex);\n };\n ContentFocus.prototype.getFocusInfo = function () {\n var info = {};\n var _a = this.matrix.current, _b = _a[0], rowIndex = _b === void 0 ? 0 : _b, _c = _a[1], cellIndex = _c === void 0 ? 0 : _c;\n this.matrix.current = [rowIndex, cellIndex];\n info.element = !isNullOrUndefined(this.getTable().rows[rowIndex]) ? this.getTable().rows[rowIndex].cells[cellIndex] : null;\n if (!info.element) {\n return info;\n }\n info.elementToFocus = !info.element.classList.contains('e-unboundcell') && !info.element.classList.contains('e-detailcell')\n ? this.getFocusable(info.element) : info.element;\n info.outline = true;\n info.uid = info.element.parentElement.getAttribute('data-uid');\n return info;\n };\n ContentFocus.prototype.getFocusable = function (element) {\n var query = 'button, [href], input:not([type=\"hidden\"]), select, textarea, [tabindex]:not([tabindex=\"-1\"])';\n if (this.parent.isEdit) {\n query = 'input:not([type=\"hidden\"]), select:not([aria-hidden=\"true\"]), textarea';\n }\n var child = [].slice.call(element.querySelectorAll(query));\n /* Select the first focusable child element\n * if no child found then select the cell itself.\n * if Grid is in editable state, check for editable control inside child.\n */\n return child.length ? child[0] : element;\n };\n ContentFocus.prototype.selector = function (row, cell) {\n var types = [CellType.Expand, CellType.GroupCaption, CellType.CaptionSummary, CellType.GroupSummary];\n return ((row.isDataRow && cell.visible && (cell.isDataCell || cell.isTemplate))\n || (row.isDataRow && cell.cellType === CellType.DetailExpand)\n || (!row.isDataRow && types.indexOf(cell.cellType) > -1)\n || (cell.column && cell.column.type === 'checkbox')\n || (cell.cellType === CellType.CommandColumn))\n && !(row.edit === 'delete' && row.isDirty);\n };\n ContentFocus.prototype.jump = function (action, current) {\n var frozenSwap = this.parent.frozenColumns > 0 &&\n ((action === 'leftArrow' || action === 'shiftTab') && current[1] === 0);\n var enterFrozen = this.parent.frozenRows !== 0 && action === 'shiftEnter';\n var info = {\n swap: ((action === 'upArrow' || enterFrozen) && current[0] === 0) || frozenSwap,\n toHeader: (action === 'upArrow' || enterFrozen) && current[0] === 0,\n toFrozen: frozenSwap\n };\n return info;\n };\n ContentFocus.prototype.getNextCurrent = function (previous, swap, active, action) {\n if (previous === void 0) { previous = []; }\n var current = [];\n if (action === 'rightArrow' || action === 'tab') {\n current[0] = previous[0];\n current[1] = -1;\n }\n else if (action === 'downArrow' || action === 'enter') {\n current[0] = -1;\n current[1] = previous[1];\n }\n return current;\n };\n ContentFocus.prototype.generateRows = function (rows, optionals) {\n var matrix = optionals.matrix, handlerInstance = optionals.handlerInstance;\n var len = handlerInstance.matrix.matrix.length;\n var defaultLen = this.parent.allowFiltering && this.parent.filterSettings.type === 'FilterBar' ? len + 1 : len;\n handlerInstance.matrix.matrix = handlerInstance.matrix.matrix.slice(0, defaultLen); //Header matrix update.\n handlerInstance.matrix.rows = defaultLen;\n (_a = handlerInstance.matrix.matrix).push.apply(_a, matrix);\n handlerInstance.matrix.rows += matrix.length;\n var _a;\n };\n ContentFocus.prototype.getInfo = function (e) {\n var info = this.getFocusInfo();\n var _a = this.matrix.current, rIndex = _a[0], cIndex = _a[1];\n var isData = info.element.classList.contains('e-rowcell');\n var isSelectable = isData || (e && e.action !== 'enter' && (info.element.classList.contains('e-detailrowcollapse')\n || info.element.classList.contains('e-detailrowexpand')));\n var _b = [Math.min(parseInt(info.element.parentElement.getAttribute('aria-rowindex'), 10), rIndex),\n Math.min(parseInt(info.element.getAttribute('aria-colindex'), 10), cIndex)], rowIndex = _b[0], cellIndex = _b[1];\n return { isContent: true, isDataCell: isData, indexes: [rowIndex, cellIndex], isSelectable: isSelectable };\n };\n ContentFocus.prototype.validator = function () {\n var table = this.getTable();\n return function (rowIndex, cellIndex, action) {\n var cell = table.rows[rowIndex].cells[cellIndex];\n if (action === 'enter' || action === 'shiftEnter') {\n return cell.classList.contains('e-rowcell');\n }\n if ((action === 'shiftUp' || action === 'shiftDown') && cell.classList.contains('e-rowcell')) {\n return true;\n }\n else if (action !== 'shiftUp' && action !== 'shiftDown') {\n return cell.getBoundingClientRect().width !== 0;\n }\n return false;\n };\n };\n ContentFocus.prototype.shouldFocusChange = function (e) {\n var _a = this.matrix.current, _b = _a[0], rIndex = _b === void 0 ? -1 : _b, _c = _a[1], cIndex = _c === void 0 ? -1 : _c;\n if (rIndex < 0 || cIndex < 0) {\n return true;\n }\n var cell = getValue(rIndex + \".cells.\" + cIndex, this.getTable().rows);\n if (!cell) {\n return true;\n }\n return e.action === 'enter' || e.action === 'shiftEnter' ?\n cell.classList.contains('e-rowcell') && !cell.classList.contains('e-unboundcell')\n && !cell.classList.contains('e-templatecell') && !cell.classList.contains('e-detailcell') : true;\n };\n return ContentFocus;\n}());\nexport { ContentFocus };\n/**\n * @hidden\n */\nvar HeaderFocus = /** @class */ (function (_super) {\n __extends(HeaderFocus, _super);\n function HeaderFocus(parent) {\n return _super.call(this, parent) || this;\n }\n HeaderFocus.prototype.getTable = function () {\n return (this.parent.frozenColumns ? this.parent.getHeaderContent().querySelector('.e-movableheader .e-table') :\n this.parent.getHeaderTable());\n };\n HeaderFocus.prototype.onClick = function (e) {\n var target = e.target;\n target = (target.classList.contains('e-headercell') ? target : closest(target, 'th'));\n if (!target && this.parent.frozenRows !== 0) {\n target = (e.target.classList.contains('e-rowcell') ? e.target :\n closest(e.target, 'td'));\n }\n if (!target) {\n return;\n }\n var _a = [target.parentElement.rowIndex, target.cellIndex], rowIndex = _a[0], cellIndex = _a[1];\n var val = getValue(rowIndex + \".\" + cellIndex, this.matrix.matrix);\n if (this.matrix.inValid(val)) {\n return false;\n }\n this.matrix.select(target.parentElement.rowIndex, target.cellIndex);\n };\n HeaderFocus.prototype.getFocusInfo = function () {\n var info = {};\n var _a = this.matrix.current, _b = _a[0], rowIndex = _b === void 0 ? 0 : _b, _c = _a[1], cellIndex = _c === void 0 ? 0 : _c;\n info.element = this.getTable().rows[rowIndex].cells[cellIndex];\n info.elementToFocus = this.getFocusable(info.element);\n info.outline = !info.element.classList.contains('e-filterbarcell');\n return info;\n };\n HeaderFocus.prototype.selector = function (row, cell) {\n return (cell.visible && (cell.column.field !== undefined || cell.isTemplate)) || cell.column.type === 'checkbox' ||\n cell.cellType === CellType.StackedHeader;\n };\n HeaderFocus.prototype.jump = function (action, current) {\n var frozenSwap = this.parent.frozenColumns > 0 &&\n (action === 'leftArrow' || action === 'shiftTab') && current[1] === 0;\n var enterFrozen = this.parent.frozenRows !== 0 && action === 'enter';\n return {\n swap: ((action === 'downArrow' || enterFrozen) && current[0] === this.matrix.matrix.length - 1) ||\n frozenSwap,\n toHeader: frozenSwap,\n toFrozen: frozenSwap\n };\n };\n HeaderFocus.prototype.getNextCurrent = function (previous, swap, active, action) {\n if (previous === void 0) { previous = []; }\n var current1 = [];\n if (action === 'upArrow' || action === 'shiftEnter') {\n current1[0] = this.matrix.matrix.length;\n current1[1] = previous[1];\n }\n else if (action === 'rightArrow' || action === 'tab') {\n current1[0] = previous[0];\n current1[1] = -1;\n }\n return current1;\n };\n HeaderFocus.prototype.generateRows = function (rows) {\n var _this = this;\n var length = this.matrix.matrix.length;\n if (this.parent.allowFiltering && this.parent.filterSettings.type === 'FilterBar') {\n this.matrix.rows = ++this.matrix.rows;\n rows[0].cells.forEach(function (cell, cIndex) {\n return _this.matrix.set(length, cIndex, cell.visible && cell.column.allowFiltering !== false);\n });\n }\n };\n HeaderFocus.prototype.getInfo = function (e) {\n return extend(_super.prototype.getInfo.call(this, e), { isContent: false, isHeader: true });\n };\n HeaderFocus.prototype.validator = function () {\n return function () { return true; };\n };\n HeaderFocus.prototype.shouldFocusChange = function (e) {\n var _a = this.matrix.current, rIndex = _a[0], cIndex = _a[1];\n if (rIndex < 0 || cIndex < 0) {\n return true;\n }\n var cell = getValue(rIndex + \".cells.\" + cIndex, this.getTable().rows);\n if (!cell) {\n return true;\n }\n return e.action === 'enter' || e.action === 'altDownArrow' ? !cell.classList.contains('e-headercell') : true;\n };\n return HeaderFocus;\n}(ContentFocus));\nexport { HeaderFocus };\nvar FixedContentFocus = /** @class */ (function (_super) {\n __extends(FixedContentFocus, _super);\n function FixedContentFocus() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n FixedContentFocus.prototype.getTable = function () {\n return this.parent.getContent().querySelector('.e-frozencontent .e-table');\n };\n FixedContentFocus.prototype.jump = function (action, current) {\n var enterFrozen = this.parent.frozenRows !== 0 && action === 'shiftEnter';\n return {\n swap: (action === 'upArrow' || enterFrozen) && current[0] === 0\n || ((action === 'tab' || action === 'rightArrow') && current[1] === this.matrix.columns),\n toHeader: (action === 'upArrow' || enterFrozen) && current[0] === 0,\n toFrozen: (action === 'upArrow' || enterFrozen) && current[0] === 0\n };\n };\n FixedContentFocus.prototype.getNextCurrent = function (previous, swap, active, action) {\n if (previous === void 0) { previous = []; }\n var current2 = [];\n if (action === 'leftArrow' || action === 'shiftTab') {\n current2[0] = previous[0];\n current2[1] = active.matrix.columns + 1;\n }\n else if (action === 'downArrow' || action === 'enter') {\n current2[0] = -1;\n current2[1] = previous[1];\n }\n return current2;\n };\n return FixedContentFocus;\n}(ContentFocus));\nexport { FixedContentFocus };\nvar FixedHeaderFocus = /** @class */ (function (_super) {\n __extends(FixedHeaderFocus, _super);\n function FixedHeaderFocus() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n FixedHeaderFocus.prototype.jump = function (action, current) {\n var enterFrozen = this.parent.frozenRows !== 0 && action === 'enter';\n return {\n swap: (action === 'downArrow' || enterFrozen) && current[0] === this.matrix.matrix.length - 1\n || ((action === 'rightArrow' || action === 'tab') && current[1] === this.matrix.columns),\n toHeader: (action === 'rightArrow' || action === 'tab') && current[1] === this.matrix.columns,\n toFrozen: (action === 'downArrow' || enterFrozen) && current[0] === this.matrix.matrix.length - 1\n };\n };\n FixedHeaderFocus.prototype.getTable = function () {\n return (this.parent.getHeaderContent().querySelector('.e-frozenheader .e-table'));\n };\n FixedHeaderFocus.prototype.getNextCurrent = function (previous, swap, active, action) {\n if (previous === void 0) { previous = []; }\n var current3 = [];\n if (action === 'leftArrow' || action === 'shiftTab') {\n current3[0] = previous[0];\n current3[1] = active.matrix.columns + 1;\n }\n else if (action === 'upArrow' || action === 'shiftEnter') {\n current3[0] = this.matrix.matrix.length;\n current3[1] = previous[1];\n }\n return current3;\n };\n return FixedHeaderFocus;\n}(HeaderFocus));\nexport { FixedHeaderFocus };\n/** @hidden */\nvar SearchBox = /** @class */ (function () {\n function SearchBox(searchBox) {\n this.searchBox = searchBox;\n }\n SearchBox.prototype.searchFocus = function (args) {\n args.target.parentElement.classList.add('e-input-focus');\n };\n SearchBox.prototype.searchBlur = function (args) {\n args.target.parentElement.classList.remove('e-input-focus');\n };\n SearchBox.prototype.wireEvent = function () {\n if (this.searchBox) {\n EventHandler.add(this.searchBox, 'focus', this.searchFocus, this);\n EventHandler.add(this.searchBox, 'blur', this.searchBlur, this);\n }\n };\n SearchBox.prototype.unWireEvent = function () {\n if (this.searchBox) {\n EventHandler.remove(this.searchBox, 'focus', this.searchFocus);\n EventHandler.remove(this.searchBox, 'blur', this.searchBlur);\n }\n };\n return SearchBox;\n}());\nexport { SearchBox };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the paging behavior of the Grid.\n */\nvar PageSettings = /** @class */ (function (_super) {\n __extends(PageSettings, _super);\n function PageSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(12)\n ], PageSettings.prototype, \"pageSize\", void 0);\n __decorate([\n Property(8)\n ], PageSettings.prototype, \"pageCount\", void 0);\n __decorate([\n Property(1)\n ], PageSettings.prototype, \"currentPage\", void 0);\n __decorate([\n Property()\n ], PageSettings.prototype, \"totalRecordsCount\", void 0);\n __decorate([\n Property(false)\n ], PageSettings.prototype, \"enableQueryString\", void 0);\n __decorate([\n Property(false)\n ], PageSettings.prototype, \"pageSizes\", void 0);\n __decorate([\n Property(null)\n ], PageSettings.prototype, \"template\", void 0);\n return PageSettings;\n}(ChildProperty));\nexport { PageSettings };\n","var __assign = (this && this.__assign) || Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n};\nimport { Browser, EventHandler } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, isUndefined, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { remove, createElement, closest } from '@syncfusion/ej2-base';\nimport { Query } from '@syncfusion/ej2-data';\nimport { setCssInGridPopUp, getPosition, parentsUntil, addRemoveActiveClasses, removeAddCboxClasses } from '../base/util';\nimport * as events from '../base/constant';\nimport { RenderType } from '../base/enum';\n/**\n * The `Selection` module is used to handle cell and row selection.\n */\nvar Selection = /** @class */ (function () {\n /**\n * Constructor for the Grid selection module\n * @hidden\n */\n function Selection(parent, selectionSettings, locator) {\n //Internal variables \n /**\n * @hidden\n */\n this.selectedRowIndexes = [];\n /**\n * @hidden\n */\n this.selectedRowCellIndexes = [];\n /**\n * @hidden\n */\n this.selectedRecords = [];\n this.preventFocus = false;\n this.isMultiShiftRequest = false;\n this.isMultiCtrlRequest = false;\n this.enableSelectMultiTouch = false;\n this.selectedRowState = {};\n this.totalRecordsCount = 0;\n this.chkAllCollec = [];\n this.isCheckedOnAdd = false;\n this.persistSelectedData = [];\n this.isCancelDeSelect = false;\n this.isPreventCellSelect = false;\n this.disableUI = false;\n this.parent = parent;\n this.selectionSettings = selectionSettings;\n this.factory = locator.getService('rendererFactory');\n this.focus = locator.getService('focus');\n this.addEventListener();\n }\n Selection.prototype.initializeSelection = function () {\n EventHandler.add(this.parent.getContent(), 'mousedown', this.mouseDownHandler, this);\n };\n /**\n * The function used to trigger onActionBegin\n * @return {void}\n * @hidden\n */\n Selection.prototype.onActionBegin = function (args, type) {\n this.parent.trigger(type, this.fDataUpdate(args));\n };\n Selection.prototype.fDataUpdate = function (args) {\n if (args.cellIndex || args.rowIndex) {\n var rowObj = this.getRowObj(isNullOrUndefined(args.rowIndex) ? isNullOrUndefined(args.cellIndex) ?\n this.currentIndex : args.cellIndex.rowIndex : args.rowIndex);\n args.foreignKeyData = rowObj.foreignKeyData;\n }\n return args;\n };\n /**\n * The function used to trigger onActionComplete\n * @return {void}\n * @hidden\n */\n Selection.prototype.onActionComplete = function (args, type) {\n this.parent.trigger(type, this.fDataUpdate(args));\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Selection.prototype.getModuleName = function () {\n return 'selection';\n };\n /**\n * To destroy the selection\n * @return {void}\n * @hidden\n */\n Selection.prototype.destroy = function () {\n this.hidePopUp();\n this.clearSelection();\n this.removeEventListener();\n EventHandler.remove(this.parent.getContent(), 'mousedown', this.mouseDownHandler);\n };\n Selection.prototype.isEditing = function () {\n return (this.parent.editSettings.mode === 'Normal' || (this.parent.editSettings.mode === 'Batch' &&\n this.parent.editModule.formObj && !this.parent.editModule.formObj.validate())) &&\n this.parent.isEdit && !this.parent.isPersistSelection;\n };\n Selection.prototype.getSelectedMovableRow = function (index) {\n var gObj = this.parent;\n if (gObj.getFrozenColumns()) {\n return gObj.getMovableRowByIndex(index);\n }\n return null;\n };\n /**\n * Selects a row by the given index.\n * @param {number} index - Defines the row index.\n * @param {boolean} isToggle - If set to true, then it toggles the selection.\n * @return {void}\n */\n Selection.prototype.selectRow = function (index, isToggle) {\n var gObj = this.parent;\n var selectedRow = gObj.getRowByIndex(index);\n var selectedMovableRow = this.getSelectedMovableRow(index);\n var selectData = gObj.getCurrentViewRecords()[index];\n if (!this.isRowType() || !selectedRow || this.isEditing()) {\n // if (this.isEditing()) {\n // gObj.selectedRowIndex = index;\n // }\n return;\n }\n var isRowSelected = selectedRow.hasAttribute('aria-selected');\n isToggle = !isToggle ? isToggle :\n !this.selectedRowIndexes.length ? false :\n (this.selectedRowIndexes.length === 1 ? (index === this.selectedRowIndexes[0]) : false);\n var args;\n var can = 'cancel';\n if (!isToggle) {\n args = {\n data: selectData, rowIndex: index, isCtrlPressed: this.isMultiCtrlRequest,\n isShiftPressed: this.isMultiShiftRequest, row: selectedRow,\n previousRow: gObj.getRows()[this.prevRowIndex], previousRowIndex: this.prevRowIndex, target: this.target, cancel: false\n };\n args = this.addMovableArgs(args, selectedMovableRow);\n this.onActionBegin(args, events.rowSelecting);\n }\n if (!isNullOrUndefined(args) && args[can] === true) {\n return;\n }\n this.clearRow();\n if (!isToggle) {\n this.updateRowSelection(selectedRow, index);\n if (gObj.getFrozenColumns()) {\n this.updateRowSelection(selectedMovableRow, index);\n }\n gObj.selectedRowIndex = index;\n }\n this.updateRowProps(index);\n if (!isToggle) {\n args = {\n data: selectData, rowIndex: index,\n row: selectedRow, previousRow: gObj.getRows()[this.prevRowIndex],\n previousRowIndex: this.prevRowIndex, target: this.target\n };\n args = this.addMovableArgs(args, selectedMovableRow);\n this.onActionComplete(args, events.rowSelected);\n }\n };\n Selection.prototype.addMovableArgs = function (targetObj, mRow) {\n if (this.parent.getFrozenColumns()) {\n var mObj = { mRow: mRow, previousMovRow: this.parent.getMovableRows()[this.prevRowIndex] };\n targetObj = __assign({}, targetObj, mObj);\n }\n return targetObj;\n };\n /**\n * Selects a range of rows from start and end row indexes.\n * @param {number} startIndex - Specifies the start row index.\n * @param {number} endIndex - Specifies the end row index.\n * @return {void}\n */\n Selection.prototype.selectRowsByRange = function (startIndex, endIndex) {\n this.selectRows(this.getCollectionFromIndexes(startIndex, endIndex));\n this.parent.selectedRowIndex = endIndex;\n };\n /**\n * Selects a collection of rows by index.\n * @param {number[]} rowIndexes - Specifies an array of row indexes.\n * @return {void}\n */\n Selection.prototype.selectRows = function (rowIndexes) {\n var gObj = this.parent;\n var rowIndex = !this.isSingleSel() ? rowIndexes[0] : rowIndexes[rowIndexes.length - 1];\n var selectedRow = gObj.getRowByIndex(rowIndex);\n var selectedMovableRow = this.getSelectedMovableRow(rowIndex);\n var frzCols = gObj.getFrozenColumns();\n var can = 'cancel';\n var selectedData = gObj.getCurrentViewRecords()[rowIndexes[0]];\n if (!this.isRowType() || this.isEditing()) {\n return;\n }\n var args = {\n rowIndexes: rowIndexes, row: selectedRow, rowIndex: rowIndex, target: this.target,\n prevRow: gObj.getRows()[this.prevRowIndex], previousRowIndex: this.prevRowIndex,\n isCtrlPressed: this.isMultiCtrlRequest, isShiftPressed: this.isMultiShiftRequest,\n data: selectedData\n };\n args = this.addMovableArgs(args, selectedMovableRow);\n this.onActionBegin(args, events.rowSelecting);\n if (!isNullOrUndefined(args) && args[can] === true) {\n return;\n }\n this.clearRow();\n gObj.selectedRowIndex = rowIndexes.slice(-1)[0];\n if (!this.isSingleSel()) {\n for (var _i = 0, rowIndexes_1 = rowIndexes; _i < rowIndexes_1.length; _i++) {\n var rowIdx = rowIndexes_1[_i];\n this.updateRowSelection(gObj.getRowByIndex(rowIdx), rowIdx);\n if (frzCols) {\n this.updateRowSelection(gObj.getMovableRowByIndex(rowIdx), rowIdx);\n }\n this.updateRowProps(rowIndex);\n }\n }\n else {\n this.updateRowSelection(gObj.getRowByIndex(rowIndex), rowIndex);\n if (frzCols) {\n this.updateRowSelection(gObj.getMovableRowByIndex(rowIndex), rowIndex);\n }\n this.updateRowProps(rowIndex);\n }\n args = {\n rowIndexes: rowIndexes, row: selectedRow, rowIndex: rowIndex, target: this.target,\n prevRow: gObj.getRows()[this.prevRowIndex], previousRowIndex: this.prevRowIndex,\n data: selectedData\n };\n args = this.addMovableArgs(args, selectedMovableRow);\n this.onActionComplete(args, events.rowSelected);\n };\n /**\n * Select rows with existing row selection by passing row indexes.\n * @param {number} startIndex - Specifies the row indexes.\n * @return {void}\n * @hidden\n */\n Selection.prototype.addRowsToSelection = function (rowIndexes) {\n var gObj = this.parent;\n var can = 'cancel';\n var selectedRow = !this.isSingleSel() ? gObj.getRowByIndex(rowIndexes[0]) :\n gObj.getRowByIndex(rowIndexes[rowIndexes.length - 1]);\n var selectedMovableRow = !this.isSingleSel() ? this.getSelectedMovableRow(rowIndexes[0]) :\n this.getSelectedMovableRow(rowIndexes[rowIndexes.length - 1]);\n var frzCols = gObj.getFrozenColumns();\n if (!this.isRowType() || this.isEditing()) {\n return;\n }\n var args;\n for (var _i = 0, rowIndexes_2 = rowIndexes; _i < rowIndexes_2.length; _i++) {\n var rowIndex = rowIndexes_2[_i];\n var rowObj = this.getRowObj(rowIndex);\n var isUnSelected = this.selectedRowIndexes.indexOf(rowIndex) > -1;\n gObj.selectedRowIndex = rowIndex;\n if (isUnSelected) {\n this.rowDeselect(events.rowDeselecting, [rowIndex], [rowObj.data], [selectedRow], [rowObj.foreignKeyData]);\n this.selectedRowIndexes.splice(this.selectedRowIndexes.indexOf(rowIndex), 1);\n this.selectedRecords.splice(this.selectedRecords.indexOf(selectedRow), 1);\n selectedRow.removeAttribute('aria-selected');\n this.addRemoveClassesForRow(selectedRow, false, null, 'e-selectionbackground', 'e-active');\n if (selectedMovableRow) {\n this.selectedRecords.splice(this.selectedRecords.indexOf(selectedMovableRow), 1);\n selectedMovableRow.removeAttribute('aria-selected');\n this.addRemoveClassesForRow(selectedMovableRow, false, null, 'e-selectionbackground', 'e-active');\n }\n this.rowDeselect(events.rowDeselected, [rowIndex], [rowObj.data], [selectedRow], [rowObj.foreignKeyData], [selectedMovableRow]);\n }\n else {\n args = {\n data: rowObj.data, rowIndex: rowIndex, row: selectedRow, target: this.target,\n prevRow: gObj.getRows()[this.prevRowIndex], previousRowIndex: this.prevRowIndex,\n isCtrlPressed: this.isMultiCtrlRequest, isShiftPressed: this.isMultiShiftRequest,\n foreignKeyData: rowObj.foreignKeyData\n };\n args = this.addMovableArgs(args, selectedMovableRow);\n this.onActionBegin(args, events.rowSelecting);\n if (!isNullOrUndefined(args) && args[can] === true) {\n return;\n }\n if (this.isSingleSel()) {\n this.clearRow();\n }\n this.updateRowSelection(selectedRow, rowIndex);\n if (frzCols) {\n this.updateRowSelection(selectedMovableRow, rowIndex);\n }\n }\n this.updateRowProps(rowIndex);\n if (!isUnSelected) {\n args = {\n data: rowObj.data, rowIndex: rowIndex, row: selectedRow, target: this.target,\n prevRow: gObj.getRows()[this.prevRowIndex], previousRowIndex: this.prevRowIndex,\n foreignKeyData: rowObj.foreignKeyData\n };\n args = this.addMovableArgs(args, selectedMovableRow);\n this.onActionComplete(args, events.rowSelected);\n }\n if (this.isSingleSel()) {\n break;\n }\n }\n };\n Selection.prototype.getCollectionFromIndexes = function (startIndex, endIndex) {\n var indexes = [];\n var _a = (startIndex < endIndex) ?\n { i: startIndex, max: endIndex } : { i: endIndex, max: startIndex }, i = _a.i, max = _a.max;\n for (; i <= max; i++) {\n indexes.push(i);\n }\n if (startIndex > endIndex) {\n indexes.reverse();\n }\n return indexes;\n };\n Selection.prototype.clearRow = function () {\n this.clearRowSelection();\n this.selectedRowIndexes = [];\n this.selectedRecords = [];\n this.parent.selectedRowIndex = -1;\n if (this.isSingleSel() && this.parent.isPersistSelection) {\n this.selectedRowState = {};\n }\n };\n Selection.prototype.updateRowProps = function (startIndex) {\n this.prevRowIndex = startIndex;\n this.isRowSelected = this.selectedRowIndexes.length && true;\n };\n Selection.prototype.updatePersistCollection = function (selectedRow, chkState) {\n var _this = this;\n if (this.parent.isPersistSelection && !isNullOrUndefined(selectedRow)) {\n var rowObj = this.getRowObj(selectedRow);\n var pKey_1 = rowObj.data ? rowObj.data[this.primaryKey] : null;\n if (pKey_1 === null) {\n return;\n }\n rowObj.isSelected = chkState;\n if (chkState) {\n this.selectedRowState[pKey_1] = chkState;\n if (!this.persistSelectedData.some(function (data) { return data[_this.primaryKey] === pKey_1; })) {\n this.persistSelectedData.push(rowObj.data);\n }\n }\n else {\n this.updatePersistDelete(pKey_1);\n }\n }\n };\n Selection.prototype.updatePersistDelete = function (pKey) {\n var _this = this;\n delete (this.selectedRowState[pKey]);\n var index;\n var isPresent = this.persistSelectedData.some(function (data, i) {\n index = i;\n return data[_this.primaryKey] === pKey;\n });\n if (isPresent) {\n this.persistSelectedData.splice(index, 1);\n }\n };\n Selection.prototype.updateCheckBoxes = function (row, chkState) {\n if (!isNullOrUndefined(row)) {\n var chkBox = row.querySelector('.e-checkselect');\n if (!isNullOrUndefined(chkBox)) {\n removeAddCboxClasses(chkBox.nextElementSibling, chkState);\n if (isNullOrUndefined(this.checkedTarget) || (!isNullOrUndefined(this.checkedTarget)\n && !this.checkedTarget.classList.contains('e-checkselectall'))) {\n this.setCheckAllState(parseInt(row.getAttribute('aria-rowindex'), 10));\n }\n }\n }\n };\n Selection.prototype.updateRowSelection = function (selectedRow, startIndex) {\n if (!selectedRow) {\n return;\n }\n this.selectedRowIndexes.push(startIndex);\n var len = this.selectedRowIndexes.length;\n if (this.parent.getFrozenColumns() && len > 1) {\n if ((this.selectedRowIndexes[len - 2] === this.selectedRowIndexes[len - 1])) {\n this.selectedRowIndexes.pop();\n }\n }\n this.selectedRecords.push(selectedRow);\n selectedRow.setAttribute('aria-selected', 'true');\n this.updatePersistCollection(selectedRow, true);\n this.updateCheckBoxes(selectedRow, true);\n this.addRemoveClassesForRow(selectedRow, true, null, 'e-selectionbackground', 'e-active');\n if (!this.preventFocus) {\n var target = this.focus.getPrevIndexes().cellIndex ?\n selectedRow.cells[this.focus.getPrevIndexes().cellIndex] :\n selectedRow.querySelector('.e-selectionbackground:not(.e-hide)');\n if (!target) {\n return;\n }\n this.focus.onClick({ target: target }, true);\n }\n };\n /**\n * Deselects the currently selected rows and cells.\n * @return {void}\n */\n Selection.prototype.clearSelection = function () {\n if (!this.parent.isPersistSelection || (this.parent.isPersistSelection && !this.parent.isEdit) ||\n (!isNullOrUndefined(this.checkedTarget) && this.checkedTarget.classList.contains('e-checkselectall'))) {\n var span = this.parent.element.querySelector('.e-gridpopup').querySelector('span');\n if (span.classList.contains('e-rowselect')) {\n span.classList.remove('e-spanclicked');\n }\n this.clearRowSelection();\n this.clearCellSelection();\n this.enableSelectMultiTouch = false;\n }\n };\n /**\n * Deselects the currently selected rows.\n * @return {void}\n */\n Selection.prototype.clearRowSelection = function () {\n var _this = this;\n if (this.isRowSelected) {\n var gObj = this.parent;\n var rows = this.parent.getDataRows();\n var data = [];\n var row = [];\n var mRow = [];\n var rowIndex = [];\n var frzCols = gObj.getFrozenColumns();\n var foreignKeyData = [];\n var currentViewData = this.parent.getCurrentViewRecords();\n for (var i = 0, len = this.selectedRowIndexes.length; i < len; i++) {\n var currentRow = this.parent.getDataRows()[this.selectedRowIndexes[i]];\n var rowObj = this.getRowObj(currentRow);\n if (rowObj) {\n data.push(rowObj.data);\n row.push(currentRow);\n rowIndex.push(this.selectedRowIndexes[i]);\n foreignKeyData.push(rowObj.foreignKeyData);\n }\n if (frzCols) {\n mRow.push(gObj.getMovableRows()[this.selectedRowIndexes[i]]);\n }\n }\n this.rowDeselect(events.rowDeselecting, rowIndex, data, row, foreignKeyData, mRow);\n if (this.isCancelDeSelect === true) {\n return;\n }\n rows.filter(function (record) { return record.hasAttribute('aria-selected'); }).forEach(function (ele) {\n if (!_this.disableUI) {\n ele.removeAttribute('aria-selected');\n _this.addRemoveClassesForRow(ele, false, true, 'e-selectionbackground', 'e-active');\n }\n _this.updatePersistCollection(ele, false);\n _this.updateCheckBoxes(ele);\n });\n for (var i = 0, len = this.selectedRowIndexes.length; i < len; i++) {\n var movableRow = this.getSelectedMovableRow(this.selectedRowIndexes[i]);\n if (movableRow) {\n if (!this.disableUI) {\n movableRow.removeAttribute('aria-selected');\n this.addRemoveClassesForRow(movableRow, false, true, 'e-selectionbackground', 'e-active');\n }\n this.updatePersistCollection(movableRow, false);\n }\n }\n this.selectedRowIndexes = [];\n this.selectedRecords = [];\n this.isRowSelected = false;\n this.parent.selectedRowIndex = -1;\n this.rowDeselect(events.rowDeselected, rowIndex, data, row, foreignKeyData, mRow);\n }\n };\n Selection.prototype.rowDeselect = function (type, rowIndex, data, row, foreignKeyData, mRow) {\n var cancl = 'cancel';\n this.updatePersistCollection(row[0], false);\n var rowDeselectObj = { rowIndex: rowIndex, data: data, row: row, foreignKeyData: foreignKeyData, cancel: false };\n this.parent.trigger(type, this.parent.getFrozenColumns() ? __assign({}, rowDeselectObj, { mRow: mRow }) : rowDeselectObj);\n this.isCancelDeSelect = rowDeselectObj[cancl];\n this.updateCheckBoxes(row[0]);\n };\n Selection.prototype.getRowObj = function (row) {\n if (row === void 0) { row = this.currentIndex; }\n if (isNullOrUndefined(row)) {\n return {};\n }\n if (typeof row === 'number') {\n row = this.parent.getRowByIndex(row);\n }\n if (row) {\n return this.parent.getRowObjectFromUID(row.getAttribute('data-uid')) || {};\n }\n return {};\n };\n Selection.prototype.getSelectedMovableCell = function (cellIndex) {\n var gObj = this.parent;\n var frzCols = gObj.getFrozenColumns();\n if (frzCols) {\n if (cellIndex.cellIndex >= frzCols) {\n return gObj.getMovableCellFromIndex(cellIndex.rowIndex, this.getColIndex(cellIndex.rowIndex, cellIndex.cellIndex));\n }\n return null;\n }\n return null;\n };\n /**\n * Selects a cell by the given index.\n * @param {IIndex} cellIndex - Defines the row and column indexes.\n * @param {boolean} isToggle - If set to true, then it toggles the selection.\n * @return {void}\n */\n Selection.prototype.selectCell = function (cellIndex, isToggle) {\n if (!this.isCellType()) {\n return;\n }\n var gObj = this.parent;\n var selectedCell = this.getSelectedMovableCell(cellIndex);\n var args;\n var cncl = 'cancel';\n if (!selectedCell) {\n selectedCell = gObj.getCellFromIndex(cellIndex.rowIndex, this.getColIndex(cellIndex.rowIndex, cellIndex.cellIndex));\n }\n var selectedTable;\n var cIdx;\n this.currentIndex = cellIndex.rowIndex;\n var selectedData = gObj.getCurrentViewRecords()[this.currentIndex];\n if (!this.isCellType() || !selectedCell || this.isEditing()) {\n return;\n }\n var isCellSelected = selectedCell.classList.contains('e-cellselectionbackground');\n isToggle = !isToggle ? isToggle : (!isUndefined(this.prevCIdxs) &&\n cellIndex.rowIndex === this.prevCIdxs.rowIndex && cellIndex.cellIndex === this.prevCIdxs.cellIndex &&\n isCellSelected);\n if (!isToggle) {\n args = {\n data: selectedData, cellIndex: cellIndex, currentCell: selectedCell,\n isCtrlPressed: this.isMultiCtrlRequest, isShiftPressed: this.isMultiShiftRequest, previousRowCellIndex: this.prevECIdxs,\n previousRowCell: this.prevECIdxs ?\n this.getCellIndex(this.prevECIdxs.rowIndex, this.prevECIdxs.cellIndex) : undefined,\n cancel: false\n };\n this.onActionBegin(args, events.cellSelecting);\n }\n if (!isNullOrUndefined(args) && args[cncl] === true) {\n return;\n }\n this.clearCell();\n if (!isToggle) {\n this.updateCellSelection(selectedCell, cellIndex.rowIndex, cellIndex.cellIndex);\n }\n this.updateCellProps(cellIndex, cellIndex);\n if (!isToggle) {\n this.onActionComplete({\n data: selectedData, cellIndex: cellIndex, currentCell: selectedCell,\n previousRowCellIndex: this.prevECIdxs, selectedRowCellIndex: this.selectedRowCellIndexes,\n previousRowCell: this.prevECIdxs ?\n this.getCellIndex(this.prevECIdxs.rowIndex, this.prevECIdxs.cellIndex) : undefined\n }, events.cellSelected);\n }\n };\n Selection.prototype.getCellIndex = function (rIdx, cIdx) {\n return (this.parent.getFrozenColumns() ? (cIdx >= this.parent.getFrozenColumns() ? this.parent.getMovableCellFromIndex(rIdx, cIdx)\n : this.parent.getCellFromIndex(rIdx, cIdx)) : this.parent.getCellFromIndex(rIdx, cIdx));\n };\n /**\n * Selects a range of cells from start and end indexes.\n * @param {IIndex} startIndex - Specifies the row and column's start index.\n * @param {IIndex} endIndex - Specifies the row and column's end index.\n * @return {void}\n */\n Selection.prototype.selectCellsByRange = function (startIndex, endIndex) {\n if (!this.isCellType()) {\n return;\n }\n var gObj = this.parent;\n var selectedCell = this.getSelectedMovableCell(startIndex);\n var frzCols = gObj.getFrozenColumns();\n if (!selectedCell) {\n selectedCell = gObj.getCellFromIndex(startIndex.rowIndex, startIndex.cellIndex);\n }\n var min;\n var max;\n var stIndex = startIndex;\n var edIndex = endIndex = endIndex ? endIndex : startIndex;\n var cellIndexes;\n this.currentIndex = startIndex.rowIndex;\n var cncl = 'cancel';\n var selectedData = gObj.getCurrentViewRecords()[this.currentIndex];\n if (this.isSingleSel() || !this.isCellType() || this.isEditing()) {\n return;\n }\n var args = {\n data: selectedData, cellIndex: startIndex, currentCell: selectedCell,\n isCtrlPressed: this.isMultiCtrlRequest, isShiftPressed: this.isMultiShiftRequest, previousRowCellIndex: this.prevECIdxs,\n previousRowCell: this.prevECIdxs ? this.getCellIndex(this.prevECIdxs.rowIndex, this.prevECIdxs.cellIndex) : undefined\n };\n this.onActionBegin(args, events.cellSelecting);\n if (!isNullOrUndefined(args) && args[cncl] === true) {\n return;\n }\n this.clearCell();\n if (startIndex.rowIndex > endIndex.rowIndex) {\n var temp = startIndex;\n startIndex = endIndex;\n endIndex = temp;\n }\n for (var i = startIndex.rowIndex; i <= endIndex.rowIndex; i++) {\n if (this.selectionSettings.cellSelectionMode !== 'Box') {\n min = i === startIndex.rowIndex ? (startIndex.cellIndex) : 0;\n max = i === endIndex.rowIndex ? (endIndex.cellIndex) : this.getLastColIndex(i);\n }\n else {\n min = startIndex.cellIndex;\n max = endIndex.cellIndex;\n }\n cellIndexes = [];\n for (var j = min < max ? min : max, len = min > max ? min : max; j <= len; j++) {\n if (frzCols) {\n if (j < frzCols) {\n selectedCell = gObj.getCellFromIndex(i, j);\n }\n else {\n selectedCell = gObj.getMovableCellFromIndex(i, j);\n }\n }\n else {\n selectedCell = gObj.getCellFromIndex(i, j);\n }\n if (!selectedCell) {\n continue;\n }\n cellIndexes.push(j);\n this.updateCellSelection(selectedCell);\n this.addAttribute(selectedCell);\n }\n this.selectedRowCellIndexes.push({ rowIndex: i, cellIndexes: cellIndexes });\n }\n this.updateCellProps(stIndex, edIndex);\n this.onActionComplete({\n data: selectedData, cellIndex: startIndex, currentCell: selectedCell,\n previousRowCellIndex: this.prevECIdxs, selectedRowCellIndex: this.selectedRowCellIndexes,\n previousRowCell: this.prevECIdxs ? this.getCellIndex(this.prevECIdxs.rowIndex, this.prevECIdxs.cellIndex) : undefined\n }, events.cellSelected);\n };\n /**\n * Selects a collection of cells by row and column indexes.\n * @param {ISelectedCell[]} rowCellIndexes - Specifies the row and column indexes.\n * @return {void}\n */\n Selection.prototype.selectCells = function (rowCellIndexes) {\n if (!this.isCellType()) {\n return;\n }\n var gObj = this.parent;\n var selectedCell = this.getSelectedMovableCell(rowCellIndexes[0]);\n var frzCols = gObj.getFrozenColumns();\n if (!selectedCell) {\n selectedCell = gObj.getCellFromIndex(rowCellIndexes[0].rowIndex, rowCellIndexes[0].cellIndexes[0]);\n }\n this.currentIndex = rowCellIndexes[0].rowIndex;\n var selectedData = gObj.getCurrentViewRecords()[this.currentIndex];\n if (this.isSingleSel() || !this.isCellType() || this.isEditing()) {\n return;\n }\n this.onActionBegin({\n data: selectedData, cellIndex: rowCellIndexes[0].cellIndexes[0],\n currentCell: selectedCell, isCtrlPressed: this.isMultiCtrlRequest,\n isShiftPressed: this.isMultiShiftRequest, previousRowCellIndex: this.prevECIdxs,\n previousRowCell: this.prevECIdxs ? this.getCellIndex(this.prevECIdxs.rowIndex, this.prevECIdxs.cellIndex) : undefined\n }, events.cellSelecting);\n for (var i = 0, len = rowCellIndexes.length; i < len; i++) {\n for (var j = 0, cellLen = rowCellIndexes[i].cellIndexes.length; j < cellLen; j++) {\n if (frzCols) {\n if (rowCellIndexes[i].cellIndexes[j] < frzCols) {\n selectedCell = gObj.getCellFromIndex(rowCellIndexes[i].rowIndex, rowCellIndexes[i].cellIndexes[j]);\n }\n else {\n selectedCell = gObj.getMovableCellFromIndex(rowCellIndexes[i].rowIndex, rowCellIndexes[i].cellIndexes[j]);\n }\n }\n else {\n selectedCell = gObj.getCellFromIndex(rowCellIndexes[i].rowIndex, rowCellIndexes[i].cellIndexes[j]);\n }\n if (!selectedCell) {\n continue;\n }\n this.updateCellSelection(selectedCell);\n this.addAttribute(selectedCell);\n this.addRowCellIndex({ rowIndex: rowCellIndexes[i].rowIndex, cellIndex: rowCellIndexes[i].cellIndexes[j] });\n }\n }\n this.updateCellProps({ rowIndex: rowCellIndexes[0].rowIndex, cellIndex: rowCellIndexes[0].cellIndexes[0] }, { rowIndex: rowCellIndexes[0].rowIndex, cellIndex: rowCellIndexes[0].cellIndexes[0] });\n this.onActionComplete({\n data: selectedData, cellIndex: rowCellIndexes[0].cellIndexes[0],\n currentCell: selectedCell,\n previousRowCellIndex: this.prevECIdxs, selectedRowCellIndex: this.selectedRowCellIndexes,\n previousRowCell: this.prevECIdxs ? this.getCellIndex(this.prevECIdxs.rowIndex, this.prevECIdxs.cellIndex) : undefined\n }, events.cellSelected);\n };\n /**\n * Select cells with existing cell selection by passing row and column index.\n * @param {IIndex} startIndex - Defines the collection of row and column index.\n * @return {void}\n * @hidden\n */\n Selection.prototype.addCellsToSelection = function (cellIndexes) {\n if (!this.isCellType()) {\n return;\n }\n var gObj = this.parent;\n var selectedTable;\n var cIdx;\n var selectedCell;\n var frzCols = gObj.getFrozenColumns();\n var index;\n this.currentIndex = cellIndexes[0].rowIndex;\n var selectedData = gObj.getCurrentViewRecords()[this.currentIndex];\n if (this.isSingleSel() || !this.isCellType() || this.isEditing()) {\n return;\n }\n var rowObj;\n if (frzCols && cellIndexes[0].cellIndex >= frzCols) {\n rowObj = gObj.getMovableRowsObject()[cellIndexes[0].rowIndex];\n }\n else {\n rowObj = this.getRowObj(cellIndexes[0].rowIndex);\n }\n var foreignKeyData = [];\n for (var _i = 0, cellIndexes_1 = cellIndexes; _i < cellIndexes_1.length; _i++) {\n var cellIndex = cellIndexes_1[_i];\n for (var i = 0, len = this.selectedRowCellIndexes.length; i < len; i++) {\n if (this.selectedRowCellIndexes[i].rowIndex === cellIndex.rowIndex) {\n index = i;\n break;\n }\n }\n selectedCell = this.getSelectedMovableCell(cellIndex);\n if (!selectedCell) {\n selectedCell = gObj.getCellFromIndex(cellIndex.rowIndex, this.getColIndex(cellIndex.rowIndex, cellIndex.cellIndex));\n }\n foreignKeyData.push(rowObj.cells[frzCols && cellIndexes[0].cellIndex >= frzCols\n ? cellIndex.cellIndex - frzCols : cellIndex.cellIndex].foreignKeyData);\n var args = {\n data: selectedData, cellIndex: cellIndexes[0],\n isShiftPressed: this.isMultiShiftRequest, previousRowCellIndex: this.prevECIdxs,\n currentCell: selectedCell, isCtrlPressed: this.isMultiCtrlRequest,\n previousRowCell: this.prevECIdxs ?\n gObj.getCellFromIndex(this.prevECIdxs.rowIndex, this.prevECIdxs.cellIndex) : undefined,\n };\n var isUnSelected = index > -1;\n if (isUnSelected) {\n var selectedCellIdx = this.selectedRowCellIndexes[index].cellIndexes;\n if (selectedCellIdx.indexOf(cellIndex.cellIndex) > -1) {\n this.cellDeselect(events.cellDeselecting, [{ rowIndex: cellIndex.rowIndex, cellIndexes: [cellIndex.cellIndex] }], selectedData, [selectedCell], foreignKeyData);\n selectedCellIdx.splice(selectedCellIdx.indexOf(cellIndex.cellIndex), 1);\n selectedCell.classList.remove('e-cellselectionbackground');\n selectedCell.removeAttribute('aria-selected');\n this.cellDeselect(events.cellDeselected, [{ rowIndex: cellIndex.rowIndex, cellIndexes: [cellIndex.cellIndex] }], selectedData, [selectedCell], foreignKeyData);\n }\n else {\n isUnSelected = false;\n this.onActionBegin(args, events.cellSelecting);\n this.addRowCellIndex({ rowIndex: cellIndex.rowIndex, cellIndex: cellIndex.cellIndex });\n this.updateCellSelection(selectedCell);\n this.addAttribute(selectedCell);\n }\n }\n else {\n this.onActionBegin(args, events.cellSelecting);\n this.updateCellSelection(selectedCell, cellIndex.rowIndex, cellIndex.cellIndex);\n }\n this.updateCellProps(cellIndex, cellIndex);\n if (!isUnSelected) {\n this.onActionComplete({\n data: selectedData, cellIndex: cellIndexes[0], currentCell: selectedCell,\n previousRowCell: this.prevECIdxs ? this.getCellIndex(this.prevECIdxs.rowIndex, this.prevECIdxs.cellIndex) :\n undefined, previousRowCellIndex: this.prevECIdxs, selectedRowCellIndex: this.selectedRowCellIndexes\n }, events.cellSelected);\n }\n }\n };\n Selection.prototype.getColIndex = function (rowIndex, index) {\n var cells;\n var frzCols = this.parent.getFrozenColumns();\n if (frzCols) {\n if (index >= frzCols) {\n cells = this.parent.getMovableDataRows()[rowIndex].querySelectorAll('td.e-rowcell');\n }\n }\n if (!cells) {\n cells = this.parent.getDataRows()[rowIndex].querySelectorAll('td.e-rowcell');\n }\n for (var m = 0; m < cells.length; m++) {\n var colIndex = parseInt(cells[m].getAttribute('aria-colindex'), 10);\n if (colIndex === index) {\n if (frzCols) {\n if (index >= frzCols) {\n m += frzCols;\n }\n }\n return m;\n }\n }\n return -1;\n };\n Selection.prototype.getLastColIndex = function (rowIndex) {\n var cells = this.parent.getFrozenColumns() ? this.parent.getMovableDataRows()[rowIndex].querySelectorAll('td.e-rowcell')\n : this.parent.getDataRows()[rowIndex].querySelectorAll('td.e-rowcell');\n return parseInt(cells[cells.length - 1].getAttribute('aria-colindex'), 10);\n };\n Selection.prototype.clearCell = function () {\n this.clearCellSelection();\n };\n Selection.prototype.cellDeselect = function (type, cellIndexes, data, cells, foreignKeyData) {\n var cancl = 'cancel';\n if (cells[0] && cells[0].classList.contains('e-gridchkbox')) {\n this.updateCheckBoxes(closest(cells[0], 'tr'));\n }\n var args = {\n cells: cells, data: data, cellIndexes: cellIndexes, foreignKeyData: foreignKeyData, cancel: false\n };\n this.parent.trigger(type, args);\n this.isPreventCellSelect = args[cancl];\n };\n Selection.prototype.updateCellSelection = function (selectedCell, rowIndex, cellIndex) {\n if (!isNullOrUndefined(rowIndex)) {\n this.addRowCellIndex({ rowIndex: rowIndex, cellIndex: cellIndex });\n }\n selectedCell.classList.add('e-cellselectionbackground');\n if (selectedCell.classList.contains('e-gridchkbox')) {\n this.updateCheckBoxes(closest(selectedCell, 'tr'), true);\n }\n this.addAttribute(selectedCell);\n };\n Selection.prototype.addAttribute = function (cell) {\n this.target = cell;\n if (!isNullOrUndefined(cell)) {\n cell.setAttribute('aria-selected', 'true');\n if (!this.preventFocus) {\n this.focus.onClick({ target: cell }, true);\n }\n }\n };\n Selection.prototype.updateCellProps = function (startIndex, endIndex) {\n this.prevCIdxs = startIndex;\n this.prevECIdxs = endIndex;\n this.isCellSelected = this.selectedRowCellIndexes.length && true;\n };\n Selection.prototype.addRowCellIndex = function (rowCellIndex) {\n var isRowAvail;\n var index;\n for (var i = 0, len = this.selectedRowCellIndexes.length; i < len; i++) {\n if (this.selectedRowCellIndexes[i].rowIndex === rowCellIndex.rowIndex) {\n isRowAvail = true;\n index = i;\n break;\n }\n }\n if (isRowAvail) {\n if (this.selectedRowCellIndexes[index].cellIndexes.indexOf(rowCellIndex.cellIndex) < 0) {\n this.selectedRowCellIndexes[index].cellIndexes.push(rowCellIndex.cellIndex);\n }\n }\n else {\n this.selectedRowCellIndexes.push({ rowIndex: rowCellIndex.rowIndex, cellIndexes: [rowCellIndex.cellIndex] });\n }\n };\n /**\n * Deselects the currently selected cells.\n * @return {void}\n */\n Selection.prototype.clearCellSelection = function () {\n if (this.isCellSelected) {\n var gObj = this.parent;\n var selectedCells = this.getSelectedCellsElement();\n var rowCell = this.selectedRowCellIndexes;\n var data = [];\n var cells = [];\n var foreignKeyData = [];\n var currentViewData = gObj.getCurrentViewRecords();\n var selectedTable = void 0;\n var frzCols = gObj.getFrozenColumns();\n for (var i = 0, len = rowCell.length; i < len; i++) {\n data.push(currentViewData[rowCell[i].rowIndex]);\n var rowObj = this.getRowObj(rowCell[i].rowIndex);\n for (var j = 0, cLen = rowCell[i].cellIndexes.length; j < cLen; j++) {\n if (frzCols) {\n if (rowCell[i].cellIndexes[j] < frzCols) {\n cells.push(gObj.getCellFromIndex(rowCell[i].rowIndex, rowCell[i].cellIndexes[j]));\n }\n else {\n cells.push(gObj.getMovableCellFromIndex(rowCell[i].rowIndex, rowCell[i].cellIndexes[j]));\n }\n }\n else {\n foreignKeyData.push(rowObj.cells[rowCell[i].cellIndexes[j]].foreignKeyData);\n cells.push(gObj.getCellFromIndex(rowCell[i].rowIndex, rowCell[i].cellIndexes[j]));\n }\n }\n }\n this.cellDeselect(events.cellDeselecting, rowCell, data, cells, foreignKeyData);\n if (this.isPreventCellSelect === true) {\n return;\n }\n for (var i = 0, len = selectedCells.length; i < len; i++) {\n selectedCells[i].classList.remove('e-cellselectionbackground');\n selectedCells[i].removeAttribute('aria-selected');\n }\n this.selectedRowCellIndexes = [];\n this.isCellSelected = false;\n this.cellDeselect(events.cellDeselected, rowCell, data, cells, foreignKeyData);\n }\n };\n Selection.prototype.getSelectedCellsElement = function () {\n var gObj = this.parent;\n var rows = gObj.getDataRows();\n var mRows;\n if (gObj.getFrozenColumns()) {\n mRows = gObj.getMovableDataRows();\n rows = gObj.addMovableRows(rows, mRows);\n }\n var cells = [];\n for (var i = 0, len = rows.length; i < len; i++) {\n cells = cells.concat([].slice.call(rows[i].querySelectorAll('.e-cellselectionbackground')));\n }\n return cells;\n };\n Selection.prototype.mouseMoveHandler = function (e) {\n e.preventDefault();\n var gBRect = this.parent.element.getBoundingClientRect();\n var x1 = this.x;\n var y1 = this.y;\n var position = getPosition(e);\n var x2 = position.x - gBRect.left;\n var y2 = position.y - gBRect.top;\n var tmp;\n var target = closest(e.target, 'tr');\n this.isDragged = true;\n if (!this.isCellDrag) {\n if (!target) {\n target = closest(document.elementFromPoint(this.parent.element.offsetLeft + 2, e.clientY), 'tr');\n }\n if (x1 > x2) {\n tmp = x2;\n x2 = x1;\n x1 = tmp;\n }\n if (y1 > y2) {\n tmp = y2;\n y2 = y1;\n y1 = tmp;\n }\n this.element.style.left = x1 + 'px';\n this.element.style.top = y1 + 'px';\n this.element.style.width = x2 - x1 + 'px';\n this.element.style.height = y2 - y1 + 'px';\n }\n if (target && !e.ctrlKey && !e.shiftKey) {\n var rowIndex = parseInt(target.getAttribute('aria-rowindex'), 10);\n if (!this.isCellDrag) {\n this.selectRowsByRange(this.startIndex, rowIndex);\n }\n else {\n var td = parentsUntil(e.target, 'e-rowcell');\n if (td) {\n this.selectLikeExcel(rowIndex, parseInt(td.getAttribute('aria-colindex'), 10));\n }\n }\n }\n };\n Selection.prototype.selectLikeExcel = function (rowIndex, cellIndex) {\n this.clearCellSelection();\n this.selectCellsByRange({ rowIndex: this.startIndex, cellIndex: this.startCellIndex }, { rowIndex: rowIndex, cellIndex: cellIndex });\n };\n Selection.prototype.mouseUpHandler = function (e) {\n document.body.classList.remove('e-disableuserselect');\n if (this.element) {\n remove(this.element);\n }\n EventHandler.remove(this.parent.getContent(), 'mousemove', this.mouseMoveHandler);\n EventHandler.remove(document.body, 'mouseup', this.mouseUpHandler);\n this.isDragged = false;\n };\n Selection.prototype.mouseDownHandler = function (e) {\n var target = e.target;\n var gObj = this.parent;\n var isDrag;\n var gridElement = parentsUntil(target, 'e-grid');\n if (gridElement && gridElement.id !== gObj.element.id) {\n return;\n }\n if (e.shiftKey || e.ctrlKey) {\n e.preventDefault();\n }\n if (target.classList.contains('e-rowcell') && !e.shiftKey && !e.ctrlKey) {\n if (gObj.selectionSettings.cellSelectionMode === 'Box' && !this.isRowType() && !this.isSingleSel()) {\n this.isCellDrag = true;\n isDrag = true;\n }\n else if (gObj.allowRowDragAndDrop) {\n if (!this.isRowType() || this.isSingleSel() || closest(target, 'td').classList.contains('e-selectionbackground')) {\n this.isDragged = false;\n return;\n }\n isDrag = true;\n this.element = createElement('div', { className: 'e-griddragarea' });\n gObj.getContent().appendChild(this.element);\n }\n if (isDrag) {\n var tr = closest(e.target, 'tr');\n this.startIndex = parseInt(tr.getAttribute('aria-rowindex'), 10);\n this.startCellIndex = parseInt(parentsUntil(target, 'e-rowcell').getAttribute('aria-colindex'), 10);\n document.body.classList.add('e-disableuserselect');\n var gBRect = gObj.element.getBoundingClientRect();\n var postion = getPosition(e);\n this.x = postion.x - gBRect.left;\n this.y = postion.y - gBRect.top;\n EventHandler.add(gObj.getContent(), 'mousemove', this.mouseMoveHandler, this);\n EventHandler.add(document.body, 'mouseup', this.mouseUpHandler, this);\n }\n }\n };\n Selection.prototype.clearSelAfterRefresh = function (e) {\n if (e.requestType !== 'virtualscroll' && !this.parent.isPersistSelection) {\n this.clearSelection();\n }\n };\n /**\n * @hidden\n */\n Selection.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.uiUpdate, this.enableAfterRender, this);\n this.parent.on(events.initialEnd, this.initializeSelection, this);\n this.parent.on(events.rowSelectionComplete, this.onActionComplete, this);\n this.parent.on(events.cellSelectionComplete, this.onActionComplete, this);\n this.parent.on(events.inBoundModelChanged, this.onPropertyChanged, this);\n this.parent.on(events.cellFocused, this.onCellFocused, this);\n this.parent.on(events.beforeFragAppend, this.clearSelAfterRefresh, this);\n this.parent.on(events.columnPositionChanged, this.columnPositionChanged, this);\n this.parent.on(events.contentReady, this.initialEnd, this);\n this.actionBeginFunction = this.actionBegin.bind(this);\n this.actionCompleteFunction = this.actionComplete.bind(this);\n this.parent.addEventListener(events.actionBegin, this.actionBeginFunction);\n this.parent.addEventListener(events.actionComplete, this.actionCompleteFunction);\n this.parent.on(events.rowsRemoved, this.rowsRemoved, this);\n this.parent.on(events.headerRefreshed, this.refreshHeader, this);\n this.addEventListener_checkbox();\n };\n /**\n * @hidden\n */\n Selection.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.uiUpdate, this.enableAfterRender);\n this.parent.off(events.initialEnd, this.initializeSelection);\n this.parent.off(events.rowSelectionComplete, this.onActionComplete);\n this.parent.off(events.cellSelectionComplete, this.onActionComplete);\n this.parent.off(events.inBoundModelChanged, this.onPropertyChanged);\n this.parent.off(events.cellFocused, this.onCellFocused);\n this.parent.off(events.beforeFragAppend, this.clearSelAfterRefresh);\n this.parent.off(events.columnPositionChanged, this.columnPositionChanged);\n this.parent.removeEventListener(events.actionBegin, this.actionBeginFunction);\n this.parent.removeEventListener(events.actionComplete, this.actionCompleteFunction);\n this.parent.off(events.rowsRemoved, this.rowsRemoved);\n this.parent.off(events.headerRefreshed, this.refreshHeader);\n this.removeEventListener_checkbox();\n };\n Selection.prototype.columnPositionChanged = function () {\n if (!this.parent.isPersistSelection) {\n this.clearSelection();\n }\n };\n Selection.prototype.refreshHeader = function () {\n this.setCheckAllState();\n };\n Selection.prototype.rowsRemoved = function (e) {\n for (var i = 0; i < e.records.length; i++) {\n delete (this.selectedRowState[e.records[i][this.primaryKey]]);\n --this.totalRecordsCount;\n }\n this.setCheckAllState();\n };\n ;\n Selection.prototype.beforeFragAppend = function (e) {\n if (e.requestType !== 'virtualscroll' && !this.parent.isPersistSelection) {\n this.clearSelection();\n }\n };\n ;\n Selection.prototype.getCheckAllBox = function () {\n return this.parent.getHeaderContent().querySelector('.e-checkselectall');\n };\n Selection.prototype.enableAfterRender = function (e) {\n if (e.module === this.getModuleName() && e.enable) {\n this.render();\n }\n };\n Selection.prototype.render = function (e) {\n EventHandler.add(this.parent.getContent(), 'mousedown', this.mouseDownHandler, this);\n };\n Selection.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName()) {\n return;\n }\n var gObj = this.parent;\n if (!isNullOrUndefined(e.properties.type) && this.selectionSettings.type === 'Single') {\n if (this.selectedRowCellIndexes.length > 1) {\n this.clearCellSelection();\n }\n if (this.selectedRowIndexes.length > 1) {\n this.clearRowSelection();\n }\n this.enableSelectMultiTouch = false;\n this.hidePopUp();\n }\n if (!isNullOrUndefined(e.properties.mode) ||\n !isNullOrUndefined(e.properties.cellSelectionMode)) {\n this.clearSelection();\n }\n this.checkBoxSelectionChanged();\n this.initPerisistSelection();\n };\n Selection.prototype.hidePopUp = function () {\n if (this.parent.element.querySelector('.e-gridpopup').querySelectorAll('.e-rowselect').length) {\n this.parent.element.querySelector('.e-gridpopup').style.display = 'none';\n }\n };\n Selection.prototype.initialEnd = function () {\n this.parent.off(events.contentReady, this.initialEnd);\n this.selectRow(this.parent.selectedRowIndex);\n };\n Selection.prototype.checkBoxSelectionChanged = function () {\n this.parent.off(events.contentReady, this.checkBoxSelectionChanged);\n var gobj = this.parent;\n var checkboxColumn = gobj.getColumns().filter(function (col) { return col.type === 'checkbox'; });\n if (checkboxColumn.length > 0) {\n gobj.isCheckBoxSelection = true;\n this.chkField = checkboxColumn[0].field;\n this.totalRecordsCount = this.parent.pageSettings.totalRecordsCount;\n if (isNullOrUndefined(this.totalRecordsCount)) {\n this.totalRecordsCount = this.parent.getCurrentViewRecords().length;\n }\n if (this.isSingleSel()) {\n gobj.selectionSettings.type = 'Multiple';\n gobj.dataBind();\n }\n else {\n this.initPerisistSelection();\n }\n }\n if (!gobj.isCheckBoxSelection) {\n this.chkField = null;\n this.initPerisistSelection();\n }\n };\n Selection.prototype.initPerisistSelection = function () {\n var gobj = this.parent;\n if (this.parent.selectionSettings.persistSelection && this.parent.getPrimaryKeyFieldNames().length > 0) {\n gobj.isPersistSelection = true;\n this.ensureCheckboxFieldSelection();\n }\n else if (this.parent.getPrimaryKeyFieldNames().length > 0) {\n gobj.isPersistSelection = false;\n this.ensureCheckboxFieldSelection();\n }\n else {\n gobj.isPersistSelection = false;\n this.selectedRowState = {};\n }\n };\n Selection.prototype.ensureCheckboxFieldSelection = function () {\n var gobj = this.parent;\n this.primaryKey = this.parent.getPrimaryKeyFieldNames()[0];\n if (!gobj.enableVirtualization && this.chkField\n && ((gobj.isPersistSelection && Object.keys(this.selectedRowState).length === 0) ||\n !gobj.isPersistSelection)) {\n var data = this.parent.getDataModule();\n var query = new Query().where(this.chkField, 'equal', true);\n var dataManager = data.getData({}, query);\n var proxy_1 = this;\n this.parent.showSpinner();\n dataManager.then(function (e) {\n proxy_1.dataSuccess(e.result);\n proxy_1.refreshPersistSelection();\n proxy_1.parent.hideSpinner();\n });\n }\n };\n Selection.prototype.dataSuccess = function (res) {\n for (var i = 0; i < res.length; i++) {\n if (isNullOrUndefined(this.selectedRowState[res[i][this.primaryKey]]) && res[i][this.chkField]) {\n this.selectedRowState[res[i][this.primaryKey]] = res[i][this.chkField];\n }\n }\n this.persistSelectedData = res;\n };\n Selection.prototype.setRowSelection = function (state) {\n if (!this.parent.getDataModule().isRemote()) {\n if (state) {\n for (var _i = 0, _a = this.getData(); _i < _a.length; _i++) {\n var data = _a[_i];\n this.selectedRowState[data[this.primaryKey]] = true;\n }\n }\n else {\n this.selectedRowState = {};\n }\n // (this.getData()).forEach(function (data) {\n // this.selectedRowState[data[this.primaryKey]] = true;\n // })\n }\n };\n Selection.prototype.getData = function () {\n return this.parent.getDataModule().dataManager.dataSource.json;\n };\n Selection.prototype.refreshPersistSelection = function () {\n var rows = this.parent.getRows();\n if (rows.length > 0 && (this.parent.isPersistSelection || this.chkField)) {\n var indexes = [];\n for (var j = 0; j < rows.length; j++) {\n var rowObj = this.getRowObj(rows[j]);\n var pKey = rowObj ? rowObj.data[this.primaryKey] : null;\n if (pKey === null) {\n return;\n }\n var checkState = void 0;\n var chkBox = rows[j].querySelector('.e-checkselect');\n if (this.selectedRowState[pKey] || (this.parent.checkAllRows === 'Check' && this.chkAllCollec.indexOf(pKey) < 0)\n || (this.parent.checkAllRows === 'Uncheck' && this.chkAllCollec.indexOf(pKey) > 0)\n || (this.parent.checkAllRows === 'Intermediate' && !isNullOrUndefined(this.chkField) && rowObj.data[this.chkField])) {\n indexes.push(parseInt(rows[j].getAttribute('aria-rowindex'), 10));\n checkState = true;\n }\n else {\n checkState = false;\n if (this.checkedTarget !== chkBox && this.parent.isCheckBoxSelection) {\n removeAddCboxClasses(chkBox.nextElementSibling, checkState);\n }\n }\n this.updatePersistCollection(rows[j], checkState);\n }\n this.isSingleSel() && indexes.length > 0 ? this.selectRow(indexes[0], true) : this.selectRows(indexes);\n }\n if (this.parent.isCheckBoxSelection && this.parent.getCurrentViewRecords().length > 0) {\n this.setCheckAllState();\n }\n };\n Selection.prototype.actionBegin = function (e) {\n if (e.requestType === 'save' && this.parent.isPersistSelection) {\n var editChkBox = this.parent.element.querySelector('.e-edit-checkselect');\n if (!isNullOrUndefined(editChkBox)) {\n var row = closest(editChkBox, '.e-editedrow');\n if (row) {\n if (this.parent.editSettings.mode === 'Dialog') {\n row = this.parent.element.querySelector('.e-dlgeditrow');\n }\n var rowObj = this.getRowObj(row);\n if (!rowObj) {\n return;\n }\n this.selectedRowState[rowObj.data[this.primaryKey]] = rowObj.isSelected = editChkBox.checked;\n }\n else {\n this.isCheckedOnAdd = editChkBox.checked;\n }\n }\n }\n };\n Selection.prototype.actionComplete = function (e) {\n var _this = this;\n if (e.requestType === 'save' && this.parent.isPersistSelection) {\n if (e.action === 'add' && this.isCheckedOnAdd) {\n var rowObj = this.parent.getRowObjectFromUID(this.parent.getRows()[e.selectedRow].getAttribute('data-uid'));\n this.selectedRowState[rowObj.data[this.primaryKey]] = rowObj.isSelected = this.isCheckedOnAdd;\n }\n this.refreshPersistSelection();\n }\n if (e.requestType === 'delete' && this.parent.isPersistSelection) {\n e.data.slice().forEach(function (data) {\n if (!isNullOrUndefined(data[_this.primaryKey])) {\n _this.updatePersistDelete(data[_this.primaryKey]);\n }\n });\n this.setCheckAllState();\n this.totalRecordsCount = this.parent.pageSettings.totalRecordsCount;\n }\n };\n Selection.prototype.onDataBound = function () {\n if (!this.parent.enableVirtualization && this.parent.isPersistSelection) {\n this.refreshPersistSelection();\n }\n };\n Selection.prototype.checkSelectAllAction = function (checkState) {\n var cRenderer = this.getRenderer();\n var editForm = this.parent.element.querySelector('.e-gridform');\n this.checkedTarget = this.getCheckAllBox();\n if (checkState && this.parent.getCurrentViewRecords().length) {\n this.selectRowsByRange(cRenderer.getVirtualRowIndex(0), cRenderer.getVirtualRowIndex(this.parent.getCurrentViewRecords().length));\n this.parent.checkAllRows = 'Check';\n }\n else {\n this.clearSelection();\n this.parent.checkAllRows = 'Uncheck';\n }\n this.chkAllCollec = [];\n if (this.parent.isPersistSelection) {\n var rows = this.parent.getRows();\n for (var i = 0; i < rows.length; i++) {\n this.updatePersistCollection(rows[i], checkState);\n }\n if (this.parent.checkAllRows === 'Uncheck') {\n this.setRowSelection(false);\n this.persistSelectedData = this.parent.getDataModule().isRemote() ? this.persistSelectedData : [];\n }\n else if (this.parent.checkAllRows === 'Check') {\n this.setRowSelection(true);\n this.persistSelectedData = !this.parent.getDataModule().isRemote() ? this.getData().slice() : this.persistSelectedData;\n }\n }\n if (!isNullOrUndefined(editForm)) {\n var editChkBox = editForm.querySelector('.e-edit-checkselect');\n removeAddCboxClasses(editChkBox.nextElementSibling, checkState);\n }\n };\n Selection.prototype.checkSelectAll = function (checkBox) {\n var _this = this;\n var stateStr = this.getCheckAllStatus(checkBox);\n var state = stateStr === 'Check';\n if (stateStr === 'Intermediate') {\n state = this.parent.getCurrentViewRecords().some(function (data) {\n return data[_this.primaryKey] in _this.selectedRowState;\n });\n }\n this.checkSelectAllAction(!state);\n this.target = null;\n if (this.parent.getCurrentViewRecords().length > 0) {\n this.setCheckAllState();\n }\n this.triggerChkChangeEvent(checkBox, !state);\n };\n Selection.prototype.getCheckAllStatus = function (ele) {\n var classes = ele ? ele.nextElementSibling.classList :\n this.getCheckAllBox().nextElementSibling.classList;\n var status;\n if (classes.contains('e-check')) {\n status = 'Check';\n }\n else if (classes.contains('e-uncheck')) {\n status = 'Uncheck';\n }\n else if (classes.contains('e-stop')) {\n status = 'Intermediate';\n }\n else {\n status = 'None';\n }\n return status;\n };\n Selection.prototype.checkSelect = function (checkBox) {\n var target = closest(this.checkedTarget, '.e-rowcell');\n var checkObj = checkBox;\n this.isMultiCtrlRequest = true;\n var rIndex = parseInt(target.parentElement.getAttribute('aria-rowindex'), 10);\n if (this.parent.isPersistSelection && this.parent.element.querySelectorAll('.e-addedrow').length > 0) {\n ++rIndex;\n }\n this.rowCellSelectionHandler(rIndex, parseInt(target.getAttribute('aria-colindex'), 10));\n this.moveIntoUncheckCollection(closest(target, '.e-row'));\n this.setCheckAllState();\n this.isMultiCtrlRequest = false;\n this.triggerChkChangeEvent(checkBox, checkBox.nextElementSibling.classList.contains('e-check'));\n };\n Selection.prototype.moveIntoUncheckCollection = function (row) {\n if (this.parent.checkAllRows === 'Check' || this.parent.checkAllRows === 'Uncheck') {\n var rowObj = this.getRowObj(row);\n var pKey = rowObj && rowObj.data ? rowObj.data[this.primaryKey] : null;\n if (!pKey) {\n return;\n }\n if (this.chkAllCollec.indexOf(pKey) < 0) {\n this.chkAllCollec.push(pKey);\n }\n else {\n this.chkAllCollec.splice(this.chkAllCollec.indexOf(pKey), 1);\n }\n }\n };\n Selection.prototype.triggerChkChangeEvent = function (checkBox, checkState) {\n this.parent.trigger(events.checkBoxChange, {\n checked: checkState, selectedRowIndexes: this.parent.getSelectedRowIndexes(),\n target: checkBox\n });\n if (!this.parent.isEdit) {\n this.checkedTarget = null;\n }\n };\n Selection.prototype.updateSelectedRowIndex = function (index) {\n if (this.parent.isCheckBoxSelection && this.parent.enableVirtualization && !this.parent.getDataModule().isRemote()) {\n if (this.parent.checkAllRows === 'Check') {\n this.selectedRowIndexes = [];\n for (var data = 0; data < this.getData().length; data++) {\n this.selectedRowIndexes.push(data);\n }\n }\n else if (this.parent.checkAllRows === 'Uncheck') {\n this.selectedRowIndexes = [];\n }\n else {\n if (index && this.parent.getRowByIndex(index).getAttribute('aria-selected') === 'false') {\n var selectedVal = this.selectedRowIndexes.indexOf(index);\n this.selectedRowIndexes.splice(selectedVal, 1);\n }\n }\n }\n };\n ;\n Selection.prototype.setCheckAllState = function (index, isInteraction) {\n if (this.parent.isCheckBoxSelection) {\n var checkedLen = Object.keys(this.selectedRowState).length;\n if (!this.parent.isPersistSelection) {\n checkedLen = this.selectedRecords.length;\n this.totalRecordsCount = this.parent.getCurrentViewRecords().length;\n }\n if (this.getCheckAllBox()) {\n var spanEle = this.getCheckAllBox().nextElementSibling;\n removeClass([spanEle], ['e-check', 'e-stop', 'e-uncheck']);\n if (checkedLen === this.totalRecordsCount && this.totalRecordsCount || (this.parent.enableVirtualization\n && !this.parent.allowPaging && !this.parent.getDataModule().isRemote() && checkedLen === this.getData().length)) {\n addClass([spanEle], ['e-check']);\n if (isInteraction) {\n this.getRenderer().setSelection(null, true, true);\n }\n this.parent.checkAllRows = 'Check';\n }\n else if (checkedLen === 0 || this.parent.getCurrentViewRecords().length === 0) {\n addClass([spanEle], ['e-uncheck']);\n if (isInteraction) {\n this.getRenderer().setSelection(null, false, true);\n }\n this.parent.checkAllRows = 'Uncheck';\n if (checkedLen === 0 && this.parent.getCurrentViewRecords().length === 0) {\n addClass([spanEle.parentElement], ['e-checkbox-disabled']);\n }\n else {\n removeClass([spanEle.parentElement], ['e-checkbox-disabled']);\n }\n }\n else {\n addClass([spanEle], ['e-stop']);\n this.parent.checkAllRows = 'Intermediate';\n }\n if (this.parent.enableVirtualization && !this.parent.allowPaging && !this.parent.getDataModule().isRemote()) {\n this.updateSelectedRowIndex(index);\n }\n }\n }\n };\n Selection.prototype.clickHandler = function (e) {\n var target = e.target;\n this.isMultiCtrlRequest = e.ctrlKey || this.enableSelectMultiTouch;\n this.isMultiShiftRequest = e.shiftKey;\n this.popUpClickHandler(e);\n var chkSelect = false;\n this.preventFocus = true;\n var checkBox;\n var checkWrap = parentsUntil(target, 'e-checkbox-wrapper');\n if (checkWrap && checkWrap.querySelectorAll('.e-checkselect,.e-checkselectall').length > 0) {\n checkBox = checkWrap.querySelector('input[type=\"checkbox\"]');\n chkSelect = true;\n }\n target = parentsUntil(target, 'e-rowcell');\n if ((target && target.parentElement.classList.contains('e-row') && !this.parent.selectionSettings.checkboxOnly) || chkSelect) {\n if (this.parent.isCheckBoxSelection) {\n this.isMultiCtrlRequest = true;\n }\n this.target = target;\n if (!isNullOrUndefined(checkBox)) {\n this.checkedTarget = checkBox;\n if (checkBox.classList.contains('e-checkselectall')) {\n this.checkSelectAll(checkBox);\n }\n else {\n this.checkSelect(checkBox);\n this.target = closest(target, '.e-rowcell');\n }\n }\n else {\n var rIndex = parseInt(target.parentElement.getAttribute('aria-rowindex'), 10);\n if (this.parent.isPersistSelection && this.parent.element.querySelectorAll('.e-addedrow').length > 0) {\n ++rIndex;\n }\n this.rowCellSelectionHandler(rIndex, parseInt(target.getAttribute('aria-colindex'), 10));\n if (this.parent.isCheckBoxSelection) {\n this.moveIntoUncheckCollection(closest(target, '.e-row'));\n this.setCheckAllState();\n }\n }\n if (!this.parent.isCheckBoxSelection && Browser.isDevice && !this.isSingleSel()) {\n this.showPopup(e);\n }\n }\n this.isMultiCtrlRequest = false;\n this.isMultiShiftRequest = false;\n this.preventFocus = false;\n };\n Selection.prototype.popUpClickHandler = function (e) {\n var target = e.target;\n if (closest(target, '.e-headercell') || e.target.classList.contains('e-rowcell') ||\n closest(target, '.e-gridpopup')) {\n if (target.classList.contains('e-rowselect')) {\n if (!target.classList.contains('e-spanclicked')) {\n target.classList.add('e-spanclicked');\n this.enableSelectMultiTouch = true;\n }\n else {\n target.classList.remove('e-spanclicked');\n this.enableSelectMultiTouch = false;\n this.parent.element.querySelector('.e-gridpopup').style.display = 'none';\n }\n }\n }\n else {\n this.parent.element.querySelector('.e-gridpopup').style.display = 'none';\n }\n };\n Selection.prototype.showPopup = function (e) {\n setCssInGridPopUp(this.parent.element.querySelector('.e-gridpopup'), e, 'e-rowselect e-icons e-icon-rowselect' +\n (!this.isSingleSel() && (this.selectedRecords.length > (this.parent.getFrozenColumns() ? 2 : 1)\n || this.selectedRowCellIndexes.length > 1) ? ' e-spanclicked' : ''));\n };\n Selection.prototype.rowCellSelectionHandler = function (rowIndex, cellIndex) {\n if ((!this.isMultiCtrlRequest && !this.isMultiShiftRequest) || this.isSingleSel()) {\n if (!this.isDragged) {\n this.selectRow(rowIndex, true);\n }\n this.selectCell({ rowIndex: rowIndex, cellIndex: cellIndex }, true);\n }\n else if (this.isMultiShiftRequest) {\n this.selectRowsByRange(isUndefined(this.prevRowIndex) ? rowIndex : this.prevRowIndex, rowIndex);\n this.selectCellsByRange(isUndefined(this.prevCIdxs) ? { rowIndex: rowIndex, cellIndex: cellIndex } : this.prevCIdxs, { rowIndex: rowIndex, cellIndex: cellIndex });\n }\n else {\n this.addRowsToSelection([rowIndex]);\n this.addCellsToSelection([{ rowIndex: rowIndex, cellIndex: cellIndex }]);\n }\n this.isDragged = false;\n };\n Selection.prototype.onCellFocused = function (e) {\n if (this.parent.frozenRows && e.container.isHeader && e.byKey) {\n if (e.keyArgs.action === 'upArrow') {\n if (this.parent.allowFiltering) {\n e.isJump = e.element.tagName === 'INPUT' ? true : false;\n }\n else {\n e.isJump = e.element.tagName === 'TH' ? true : false;\n }\n }\n else {\n if (e.keyArgs.action === 'downArrow') {\n var rIdx = Number(e.element.parentElement.getAttribute('aria-rowindex'));\n e.isJump = rIdx === 0 ? true : false;\n }\n else {\n if (e.keyArgs.action === 'ctrlHome') {\n e.isJump = true;\n }\n }\n }\n }\n var clear = this.parent.getFrozenColumns() ? (((e.container.isHeader && e.element.tagName !== 'TD' && e.isJump) ||\n ((e.container.isContent || e.element.tagName === 'TD') && !(e.container.isSelectable || e.element.tagName === 'TD')))\n && !(e.byKey && e.keyArgs.action === 'space')) : ((e.container.isHeader && e.isJump) ||\n (e.container.isContent && !e.container.isSelectable)) && !(e.byKey && e.keyArgs.action === 'space');\n var headerAction = (e.container.isHeader && e.element.tagName !== 'TD' && !closest(e.element, '.e-rowcell'))\n && !(e.byKey && e.keyArgs.action === 'space');\n if (!e.byKey || clear) {\n if (clear && !this.parent.isCheckBoxSelection) {\n this.clearSelection();\n }\n return;\n }\n var _a = e.container.isContent ? e.container.indexes : e.indexes, rowIndex = _a[0], cellIndex = _a[1];\n var prev = this.focus.getPrevIndexes();\n if (this.parent.frozenRows) {\n if (e.container.isHeader && (e.element.tagName === 'TD' || closest(e.element, '.e-rowcell'))) {\n var thLen = this.parent.getHeaderTable().querySelector('thead').childElementCount;\n rowIndex -= thLen;\n prev.rowIndex = prev.rowIndex ? prev.rowIndex - thLen : null;\n }\n else {\n rowIndex += this.parent.frozenRows;\n prev.rowIndex = prev.rowIndex === 0 || !isNullOrUndefined(prev.rowIndex) ? prev.rowIndex + this.parent.frozenRows : null;\n }\n if (this.parent.getFrozenColumns()) {\n var cIdx = Number(e.element.getAttribute('aria-colindex'));\n prev.cellIndex = prev.cellIndex ? (prev.cellIndex === cellIndex ? cIdx : cIdx - 1) : null;\n cellIndex = cIdx;\n }\n }\n if (headerAction || (['ctrlPlusA', 'escape'].indexOf(e.keyArgs.action) === -1 && e.keyArgs.action !== 'space' &&\n rowIndex === prev.rowIndex && cellIndex === prev.cellIndex)) {\n return;\n }\n this.preventFocus = true;\n switch (e.keyArgs.action) {\n case 'downArrow':\n case 'upArrow':\n case 'enter':\n case 'shiftEnter':\n this.applyDownUpKey(rowIndex, cellIndex);\n break;\n case 'rightArrow':\n case 'leftArrow':\n this.applyRightLeftKey(rowIndex, cellIndex);\n break;\n case 'shiftDown':\n case 'shiftUp':\n this.shiftDownKey(rowIndex, cellIndex);\n break;\n case 'shiftLeft':\n case 'shiftRight':\n this.applyShiftLeftRightKey(rowIndex, cellIndex);\n break;\n case 'home':\n case 'end':\n cellIndex = e.keyArgs.action === 'end' ? this.getLastColIndex(rowIndex) : 0;\n this.applyHomeEndKey(rowIndex, cellIndex);\n break;\n case 'ctrlHome':\n case 'ctrlEnd':\n this.applyCtrlHomeEndKey(rowIndex, cellIndex);\n break;\n case 'escape':\n this.clearSelection();\n break;\n case 'ctrlPlusA':\n this.ctrlPlusA();\n break;\n case 'space':\n this.applySpaceSelection(e.element);\n break;\n }\n this.preventFocus = false;\n };\n /**\n * Apply ctrl + A key selection\n * @return {void}\n * @hidden\n */\n Selection.prototype.ctrlPlusA = function () {\n if (this.isRowType() && !this.isSingleSel()) {\n this.selectRowsByRange(0, this.parent.getRows().length - 1);\n }\n if (this.isCellType() && !this.isSingleSel()) {\n this.selectCellsByRange({ rowIndex: 0, cellIndex: 0 }, { rowIndex: this.parent.getRows().length - 1, cellIndex: this.parent.getColumns().length - 1 });\n }\n };\n Selection.prototype.applySpaceSelection = function (target) {\n if (target.classList.contains('e-checkselectall')) {\n this.checkedTarget = target;\n this.checkSelectAll(this.checkedTarget);\n }\n else {\n if (target.classList.contains('e-checkselect')) {\n this.checkedTarget = target;\n this.checkSelect(this.checkedTarget);\n }\n }\n };\n Selection.prototype.applyDownUpKey = function (rowIndex, cellIndex) {\n var gObj = this.parent;\n if (this.parent.isCheckBoxSelection && this.parent.checkAllRows === 'Check') {\n this.checkSelectAllAction(false);\n this.checkedTarget = null;\n }\n if (this.isRowType()) {\n if (this.parent.frozenRows) {\n this.selectRow(rowIndex, true);\n this.applyUpDown(gObj.selectedRowIndex);\n }\n else {\n this.selectRow(rowIndex, true);\n this.applyUpDown(gObj.selectedRowIndex);\n }\n }\n if (this.isCellType()) {\n this.selectCell({ rowIndex: rowIndex, cellIndex: cellIndex }, true);\n }\n };\n Selection.prototype.applyUpDown = function (rowIndex) {\n if (rowIndex < 0) {\n return;\n }\n if (!this.target) {\n this.target = this.parent.getRows()[0].children[this.parent.groupSettings.columns.length || 0];\n }\n var cIndex = parseInt(this.target.getAttribute('aria-colindex'), 10);\n var frzCols = this.parent.getFrozenColumns();\n if (frzCols) {\n if (cIndex >= frzCols) {\n this.target =\n this.contentRenderer.getMovableRowByIndex(rowIndex).querySelectorAll('.e-rowcell')[cIndex - frzCols];\n }\n else {\n this.target = this.contentRenderer.getRowByIndex(rowIndex).querySelectorAll('.e-rowcell')[cIndex];\n }\n }\n else {\n this.target = this.contentRenderer.getRowByIndex(rowIndex).querySelectorAll('.e-rowcell')[cIndex];\n }\n this.addAttribute(this.target);\n };\n Selection.prototype.applyRightLeftKey = function (rowIndex, cellIndex) {\n var gObj = this.parent;\n if (this.isCellType()) {\n this.selectCell({ rowIndex: rowIndex, cellIndex: cellIndex }, true);\n this.addAttribute(this.target);\n }\n };\n Selection.prototype.applyHomeEndKey = function (rowIndex, cellIndex) {\n if (this.isCellType()) {\n this.selectCell({ rowIndex: rowIndex, cellIndex: cellIndex }, true);\n }\n else {\n this.addAttribute(this.parent.getCellFromIndex(rowIndex, cellIndex));\n }\n };\n /**\n * Apply shift+down key selection\n * @return {void}\n * @hidden\n */\n Selection.prototype.shiftDownKey = function (rowIndex, cellIndex) {\n var gObj = this.parent;\n this.isMultiShiftRequest = true;\n if (this.isRowType() && !this.isSingleSel()) {\n if (!isUndefined(this.prevRowIndex)) {\n this.selectRowsByRange(this.prevRowIndex, rowIndex);\n this.applyUpDown(rowIndex);\n }\n else {\n this.selectRow(0, true);\n }\n }\n if (this.isCellType() && !this.isSingleSel()) {\n this.selectCellsByRange(this.prevCIdxs || { rowIndex: 0, cellIndex: 0 }, { rowIndex: rowIndex, cellIndex: cellIndex });\n }\n this.isMultiShiftRequest = false;\n };\n Selection.prototype.applyShiftLeftRightKey = function (rowIndex, cellIndex) {\n var gObj = this.parent;\n this.isMultiShiftRequest = true;\n this.selectCellsByRange(this.prevCIdxs, { rowIndex: rowIndex, cellIndex: cellIndex });\n this.isMultiShiftRequest = false;\n };\n Selection.prototype.applyCtrlHomeEndKey = function (rowIndex, cellIndex) {\n if (this.isRowType()) {\n this.selectRow(rowIndex, true);\n this.addAttribute(this.parent.getCellFromIndex(rowIndex, cellIndex));\n }\n if (this.isCellType()) {\n this.selectCell({ rowIndex: rowIndex, cellIndex: cellIndex }, true);\n }\n };\n Selection.prototype.addRemoveClassesForRow = function (row, isAdd, clearAll) {\n var args = [];\n for (var _i = 3; _i < arguments.length; _i++) {\n args[_i - 3] = arguments[_i];\n }\n if (row) {\n var cells = [].slice.call(row.querySelectorAll('.e-rowcell'));\n var cell = row.querySelector('.e-detailrowcollapse') || row.querySelector('.e-detailrowexpand');\n if (cell) {\n cells.push(cell);\n }\n addRemoveActiveClasses.apply(void 0, [cells, isAdd].concat(args));\n }\n this.getRenderer().setSelection(row ? row.getAttribute('data-uid') : null, isAdd, clearAll);\n };\n Selection.prototype.isRowType = function () {\n return this.selectionSettings.mode === 'Row' || this.selectionSettings.mode === 'Both';\n };\n Selection.prototype.isCellType = function () {\n return this.selectionSettings.mode === 'Cell' || this.selectionSettings.mode === 'Both';\n };\n Selection.prototype.isSingleSel = function () {\n return this.selectionSettings.type === 'Single';\n };\n Selection.prototype.getRenderer = function () {\n if (isNullOrUndefined(this.contentRenderer)) {\n this.contentRenderer = this.factory.getRenderer(RenderType.Content);\n }\n return this.contentRenderer;\n };\n /**\n * Gets the collection of selected records.\n * @return {Object[]}\n */\n Selection.prototype.getSelectedRecords = function () {\n var selectedData = [];\n if (!this.selectionSettings.persistSelection) {\n selectedData = this.parent.getRowsObject().filter(function (row) { return row.isSelected; })\n .map(function (m) { return m.data; });\n }\n else {\n selectedData = this.persistSelectedData;\n }\n return selectedData;\n };\n Selection.prototype.addEventListener_checkbox = function () {\n this.parent.on(events.dataReady, this.dataReady, this);\n this.onDataBoundFunction = this.onDataBound.bind(this);\n this.parent.addEventListener(events.dataBound, this.onDataBoundFunction);\n this.parent.on(events.contentReady, this.checkBoxSelectionChanged, this);\n this.actionCompleteFunc = this.actionCompleteHandler.bind(this);\n this.parent.addEventListener(events.actionComplete, this.actionCompleteFunc);\n this.parent.on(events.click, this.clickHandler, this);\n };\n Selection.prototype.removeEventListener_checkbox = function () {\n this.parent.off(events.dataReady, this.dataReady);\n this.parent.removeEventListener(events.dataBound, this.onDataBoundFunction);\n this.parent.removeEventListener(events.actionComplete, this.actionCompleteFunc);\n this.parent.off(events.click, this.clickHandler);\n };\n Selection.prototype.dataReady = function (e) {\n if (e.requestType !== 'virtualscroll' && !this.parent.isPersistSelection) {\n this.disableUI = true;\n this.clearSelection();\n this.disableUI = false;\n }\n };\n Selection.prototype.actionCompleteHandler = function (e) {\n if (e.requestType === 'save' && this.parent.isPersistSelection) {\n this.refreshPersistSelection();\n }\n };\n return Selection;\n}());\nexport { Selection };\n","import { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { isActionPrevent } from '../base/util';\n/**\n * The `Search` module is used to handle search action.\n */\nvar Search = /** @class */ (function () {\n /**\n * Constructor for Grid search module.\n * @hidden\n */\n function Search(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * Searches Grid records by given key.\n *\n * > You can customize the default search action by using [`searchSettings`](./api-grid.html#searchsettings-searchsettingsmodel).\n * @param {string} searchString - Defines the key.\n * @return {void}\n */\n Search.prototype.search = function (searchString) {\n var gObj = this.parent;\n searchString = isNullOrUndefined(searchString) ? '' : searchString;\n if (isActionPrevent(gObj)) {\n gObj.notify(events.preventBatch, { instance: this, handler: this.search, arg1: searchString });\n return;\n }\n if (searchString !== gObj.searchSettings.key) {\n gObj.searchSettings.key = searchString.toString();\n gObj.dataBind();\n }\n else if (this.refreshSearch) {\n gObj.refresh();\n }\n };\n /**\n * @hidden\n */\n Search.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.inBoundModelChanged, this.onPropertyChanged, this);\n this.parent.on(events.searchComplete, this.onSearchComplete, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.actionCompleteFunc = this.onActionComplete.bind(this);\n this.parent.addEventListener(events.actionComplete, this.actionCompleteFunc);\n };\n /**\n * @hidden\n */\n Search.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.inBoundModelChanged, this.onPropertyChanged);\n this.parent.off(events.searchComplete, this.onSearchComplete);\n this.parent.off(events.destroy, this.destroy);\n this.parent.removeEventListener(events.actionComplete, this.actionCompleteFunc);\n };\n /**\n * To destroy the print\n * @return {void}\n * @hidden\n */\n Search.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @hidden\n */\n Search.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName()) {\n return;\n }\n if (!isNullOrUndefined(e.properties.key)) {\n this.parent.notify(events.modelChanged, {\n requestType: 'searching', type: events.actionBegin, searchString: this.parent.searchSettings.key\n });\n }\n else {\n this.parent.notify(events.modelChanged, {\n requestType: 'searching', type: events.actionBegin\n });\n }\n };\n /**\n * The function used to trigger onActionComplete\n * @return {void}\n * @hidden\n */\n Search.prototype.onSearchComplete = function (e) {\n this.parent.trigger(events.actionComplete, extend(e, {\n searchString: this.parent.searchSettings.key, requestType: 'searching', type: events.actionComplete\n }));\n };\n Search.prototype.onActionComplete = function (e) {\n this.refreshSearch = e.requestType !== 'searching';\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Search.prototype.getModuleName = function () {\n return 'search';\n };\n return Search;\n}());\nexport { Search };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { iterateArrayOrObject, isActionPrevent } from '../base/util';\nimport * as events from '../base/constant';\n/**\n * The `ShowHide` module is used to control column visibility.\n */\nvar ShowHide = /** @class */ (function () {\n /**\n * Constructor for the show hide module.\n * @hidden\n */\n function ShowHide(parent) {\n this.parent = parent;\n }\n /**\n * Shows a column by column name.\n * @param {string|string[]} columnName - Defines a single or collection of column names to show.\n * @param {string} showBy - Defines the column key either as field name or header text.\n * @return {void}\n */\n ShowHide.prototype.show = function (columnName, showBy) {\n var keys = this.getToggleFields(columnName);\n var columns = this.getColumns(keys, showBy);\n this.parent.notify(events.tooltipDestroy, { module: 'edit' });\n columns.forEach(function (value) {\n value.visible = true;\n });\n this.setVisible(columns);\n };\n /**\n * Hides a column by column name.\n * @param {string|string[]} columnName - Defines a single or collection of column names to hide.\n * @param {string} hideBy - Defines the column key either as field name or header text.\n * @return {void}\n */\n ShowHide.prototype.hide = function (columnName, hideBy) {\n var keys = this.getToggleFields(columnName);\n var columns = this.getColumns(keys, hideBy);\n this.parent.notify(events.tooltipDestroy, { module: 'edit' });\n columns.forEach(function (value) {\n value.visible = false;\n });\n this.setVisible(columns);\n };\n ShowHide.prototype.getToggleFields = function (key) {\n var finalized = [];\n if (typeof key === 'string') {\n finalized = [key];\n }\n else {\n finalized = key;\n }\n return finalized;\n };\n ShowHide.prototype.getColumns = function (keys, getKeyBy) {\n var _this = this;\n var columns = iterateArrayOrObject(keys, function (key, index) {\n return iterateArrayOrObject(_this.parent.getColumns(), function (item, index) {\n if (item[getKeyBy] === key) {\n return item;\n }\n return undefined;\n })[0];\n });\n return columns;\n };\n /**\n * Shows or hides columns by given column collection.\n * @private\n * @param {Column[]} columns - Specifies the columns.\n * @return {void}\n */\n ShowHide.prototype.setVisible = function (columns) {\n if (isActionPrevent(this.parent)) {\n this.parent.notify(events.preventBatch, {\n instance: this, handler: this.setVisible,\n arg1: columns\n });\n return;\n }\n columns = isNullOrUndefined(columns) ? this.parent.getColumns() : columns;\n if (this.parent.allowSelection && this.parent.getSelectedRecords().length) {\n this.parent.clearSelection();\n }\n this.parent.notify(events.columnVisibilityChanged, columns);\n };\n return ShowHide;\n}());\nexport { ShowHide };\n","import { Browser, EventHandler } from '@syncfusion/ej2-base';\nimport { addClass, removeClass } from '@syncfusion/ej2-base';\nimport { formatUnit, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { getScrollBarWidth, getUpdateUsingRaf } from '../base/util';\nimport { scroll, contentReady, uiUpdate, onEmpty } from '../base/constant';\nimport { ColumnWidthService } from '../services/width-controller';\n/**\n * The `Scroll` module is used to handle scrolling behaviour.\n */\nvar Scroll = /** @class */ (function () {\n /**\n * Constructor for the Grid scrolling.\n * @hidden\n */\n function Scroll(parent) {\n this.lastScrollTop = 0;\n //To maintain scroll state on grid actions.\n this.previousValues = { top: 0, left: 0 };\n this.oneTimeReady = true;\n this.parent = parent;\n this.widthService = new ColumnWidthService(parent);\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Scroll.prototype.getModuleName = function () {\n return 'scroll';\n };\n /**\n * @hidden\n */\n Scroll.prototype.setWidth = function () {\n this.parent.element.style.width = formatUnit(this.parent.width);\n if (this.parent.toolbarModule && this.parent.toolbarModule.toolbar &&\n this.parent.toolbarModule.toolbar.element) {\n this.parent.toolbarModule.toolbar.refreshOverflow();\n }\n };\n /**\n * @hidden\n */\n Scroll.prototype.setHeight = function () {\n var mHdrHeight = 0;\n var content = this.parent.getContent().firstChild;\n if (this.parent.frozenRows && this.parent.height !== 'auto') {\n mHdrHeight =\n this.parent.getHeaderContent().querySelector('tbody').offsetHeight;\n content.style.height = formatUnit(this.parent.height - mHdrHeight);\n }\n else {\n content.style.height = formatUnit(this.parent.height);\n }\n this.ensureOverflow(content);\n };\n /**\n * @hidden\n */\n Scroll.prototype.setPadding = function () {\n var content = this.parent.getHeaderContent();\n var scrollWidth = Scroll.getScrollBarWidth() - this.getThreshold();\n var cssProps = this.getCssProperties();\n content.firstChild.style[cssProps.border] = scrollWidth > 0 ? '1px' : '0px';\n content.style[cssProps.padding] = scrollWidth > 0 ? scrollWidth + 'px' : '0px';\n };\n /**\n * @hidden\n */\n Scroll.prototype.removePadding = function (rtl) {\n var cssProps = this.getCssProperties(rtl);\n this.parent.getHeaderContent().firstChild.style[cssProps.border] = '';\n this.parent.getHeaderContent().firstChild.parentElement.style[cssProps.padding] = '';\n };\n /**\n * Refresh makes the Grid adoptable with the height of parent container.\n *\n * > The [`height`](./api-grid.html#height) must be set to 100%.\n * @return\n */\n Scroll.prototype.refresh = function () {\n if (this.parent.height !== '100%') {\n return;\n }\n var content = this.parent.getContent();\n this.parent.element.style.height = '100%';\n var height = this.widthService.getSiblingsHeight(content);\n content.style.height = 'calc(100% - ' + height + 'px)'; //Set the height to the '.e-gridcontent';\n };\n Scroll.prototype.getThreshold = function () {\n /* Some browsers places the scroller outside the content,\n * hence the padding should be adjusted.*/\n var appName = Browser.info.name;\n if (appName === 'mozilla') {\n return 0.5;\n }\n return 1;\n };\n /**\n * @hidden\n */\n Scroll.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(onEmpty, this.wireEvents, this);\n this.parent.on(contentReady, this.wireEvents, this);\n this.parent.on(uiUpdate, this.onPropertyChanged, this);\n };\n /**\n * @hidden\n */\n Scroll.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(onEmpty, this.wireEvents);\n this.parent.off(contentReady, this.wireEvents);\n this.parent.off(uiUpdate, this.onPropertyChanged);\n };\n Scroll.prototype.onContentScroll = function (scrollTarget) {\n var _this = this;\n var element = scrollTarget;\n var isHeader = element.classList.contains('e-headercontent');\n return function (e) {\n if (_this.content.querySelector('tbody') === null || _this.parent.isPreventScrollEvent) {\n return;\n }\n var target = e.target;\n var left = target.scrollLeft;\n var sLimit = target.scrollWidth;\n var isFooter = target.classList.contains('e-summarycontent');\n if (_this.previousValues.left === left) {\n _this.previousValues.top = !isHeader ? _this.previousValues.top : target.scrollTop;\n return;\n }\n element.scrollLeft = left;\n if (isFooter) {\n _this.header.scrollLeft = left;\n }\n _this.previousValues.left = left;\n _this.parent.notify(scroll, { left: left });\n };\n };\n Scroll.prototype.onFreezeContentScroll = function (scrollTarget) {\n var _this = this;\n var element = scrollTarget;\n return function (e) {\n if (_this.content.querySelector('tbody') === null) {\n return;\n }\n var target = e.target;\n var top = target.scrollTop;\n if (_this.previousValues.top === top) {\n return;\n }\n element.scrollTop = top;\n _this.previousValues.top = top;\n if (_this.parent.isDestroyed) {\n return;\n }\n };\n };\n Scroll.prototype.onWheelScroll = function (scrollTarget) {\n var _this = this;\n var element = scrollTarget;\n return function (e) {\n if (_this.content.querySelector('tbody') === null) {\n return;\n }\n var top = element.scrollTop + (e.deltaMode === 1 ? e.deltaY * 30 : e.deltaY);\n if (_this.previousValues.top === top) {\n return;\n }\n e.preventDefault();\n _this.parent.getContent().querySelector('.e-frozencontent').scrollTop = top;\n element.scrollTop = top;\n _this.previousValues.top = top;\n };\n };\n Scroll.prototype.onTouchScroll = function (scrollTarget) {\n var _this = this;\n var element = scrollTarget;\n return function (e) {\n if (e.pointerType === 'mouse') {\n return;\n }\n var cont;\n var mHdr;\n var pageXY = _this.getPointXY(e);\n var top = element.scrollTop + (_this.pageXY.y - pageXY.y);\n var left = element.scrollLeft + (_this.pageXY.x - pageXY.x);\n if (_this.parent.getHeaderContent().contains(e.target)) {\n mHdr = _this.parent.getFrozenColumns() ?\n _this.parent.getHeaderContent().querySelector('.e-movableheader') : _this.parent.getHeaderContent().firstChild;\n if (_this.previousValues.left === left || (left < 0 || (mHdr.scrollWidth - mHdr.clientWidth) < left)) {\n return;\n }\n e.preventDefault();\n mHdr.scrollLeft = left;\n element.scrollLeft = left;\n _this.pageXY.x = pageXY.x;\n _this.previousValues.left = left;\n }\n else {\n cont = _this.parent.getContent().querySelector('.e-frozencontent');\n if (_this.previousValues.top === top || (top < 0 || (cont.scrollHeight - cont.clientHeight) < top)) {\n return;\n }\n e.preventDefault();\n cont.scrollTop = top;\n element.scrollTop = top;\n _this.pageXY.y = pageXY.y;\n _this.previousValues.top = top;\n }\n };\n };\n Scroll.prototype.setPageXY = function () {\n var _this = this;\n return function (e) {\n if (e.pointerType === 'mouse') {\n return;\n }\n _this.pageXY = _this.getPointXY(e);\n };\n };\n Scroll.prototype.getPointXY = function (e) {\n var pageXY = { x: 0, y: 0 };\n if (e.touches && e.touches.length) {\n pageXY.x = e.touches[0].pageX;\n pageXY.y = e.touches[0].pageY;\n }\n else {\n pageXY.x = e.pageX;\n pageXY.y = e.pageY;\n }\n return pageXY;\n };\n Scroll.prototype.wireEvents = function () {\n var _this = this;\n if (this.oneTimeReady) {\n var frzCols = this.parent.getFrozenColumns();\n this.content = this.parent.getContent().firstChild;\n this.header = this.parent.getHeaderContent().firstChild;\n var mCont = this.content.querySelector('.e-movablecontent');\n var fCont = this.content.querySelector('.e-frozencontent');\n var mHdr = this.header.querySelector('.e-movableheader');\n if (this.parent.frozenRows) {\n EventHandler.add(frzCols ? mHdr : this.header, 'touchstart pointerdown', this.setPageXY(), this);\n EventHandler.add(frzCols ? mHdr : this.header, 'touchmove pointermove', this.onTouchScroll(frzCols ? mCont : this.content), this);\n }\n if (frzCols) {\n EventHandler.add(mCont, 'scroll', this.onContentScroll(mHdr), this);\n EventHandler.add(mCont, 'scroll', this.onFreezeContentScroll(fCont), this);\n EventHandler.add(fCont, 'scroll', this.onFreezeContentScroll(mCont), this);\n EventHandler.add(mHdr, 'scroll', this.onContentScroll(mCont), this);\n EventHandler.add(fCont, 'wheel', this.onWheelScroll(mCont), this);\n EventHandler.add(fCont, 'touchstart pointerdown', this.setPageXY(), this);\n EventHandler.add(fCont, 'touchmove pointermove', this.onTouchScroll(mCont), this);\n }\n else {\n EventHandler.add(this.content, 'scroll', this.onContentScroll(this.header), this);\n EventHandler.add(this.header, 'scroll', this.onContentScroll(this.content), this);\n }\n if (this.parent.aggregates.length) {\n EventHandler.add(this.parent.getFooterContent().firstChild, 'scroll', this.onContentScroll(this.content), this);\n }\n this.refresh();\n this.oneTimeReady = false;\n }\n var table = this.parent.getContentTable();\n var sLeft;\n var sHeight;\n var clientHeight;\n getUpdateUsingRaf(function () {\n sLeft = _this.header.scrollLeft;\n sHeight = table.scrollHeight;\n clientHeight = _this.parent.getContent().clientHeight;\n }, function () {\n if (!_this.parent.enableVirtualization) {\n if (sHeight < clientHeight) {\n addClass(table.querySelectorAll('tr:last-child td'), 'e-lastrowcell');\n if (_this.parent.getFrozenColumns()) {\n addClass(_this.parent.getContent().querySelector('.e-movablecontent').querySelectorAll('tr:last-child td'), 'e-lastrowcell');\n }\n }\n if ((_this.parent.frozenRows > 0 || _this.parent.frozenColumns > 0) && _this.header.querySelector('.e-movableheader')) {\n _this.header.querySelector('.e-movableheader').scrollLeft = _this.previousValues.left;\n }\n else {\n _this.header.scrollLeft = _this.previousValues.left;\n }\n _this.content.scrollLeft = _this.previousValues.left;\n _this.content.scrollTop = _this.previousValues.top;\n }\n if (!_this.parent.enableColumnVirtualization) {\n _this.content.scrollLeft = sLeft;\n }\n if (_this.parent.frozenColumns) {\n _this.header.querySelector('.e-movableheader').scrollLeft =\n _this.content.querySelector('.e-movablecontent').scrollLeft;\n }\n });\n this.parent.isPreventScrollEvent = false;\n };\n /**\n * @hidden\n */\n Scroll.prototype.getCssProperties = function (rtl) {\n var css = {};\n var enableRtl = isNullOrUndefined(rtl) ? this.parent.enableRtl : rtl;\n css.border = enableRtl ? 'borderLeftWidth' : 'borderRightWidth';\n css.padding = enableRtl ? 'paddingLeft' : 'paddingRight';\n return css;\n };\n Scroll.prototype.ensureOverflow = function (content) {\n if (this.parent.getFrozenColumns()) {\n content.querySelector('.e-movablecontent').style.overflowY = this.parent.height === 'auto' ? 'auto' : 'scroll';\n }\n else {\n content.style.overflowY = this.parent.height === 'auto' ? 'auto' : 'scroll';\n }\n };\n Scroll.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName()) {\n return;\n }\n this.setPadding();\n this.oneTimeReady = true;\n if (this.parent.height === 'auto') {\n this.removePadding();\n }\n this.wireEvents();\n this.setHeight();\n this.setWidth();\n };\n /**\n * @hidden\n */\n Scroll.prototype.destroy = function () {\n this.removeEventListener();\n //Remove padding\n this.removePadding();\n removeClass([this.parent.getHeaderContent().firstChild], 'e-headercontent');\n removeClass([this.parent.getContent().firstChild], 'e-content');\n //Remove height\n this.parent.getContent().firstChild.style.height = '';\n //Remove width\n this.parent.element.style.width = '';\n //Remove Dom event\n EventHandler.remove(this.parent.getContent().firstChild, 'scroll', this.onContentScroll);\n };\n /**\n * Function to get the scrollbar width of the browser.\n * @return {number}\n * @hidden\n */\n Scroll.getScrollBarWidth = function () {\n return getScrollBarWidth();\n };\n return Scroll;\n}());\nexport { Scroll };\n","import { print as printWindow, createElement, detach } from '@syncfusion/ej2-base';\nimport { removeElement, getActualProperties, getActualPropFromColl } from '../base/util';\nimport { Grid } from '../base/grid';\nimport * as events from '../base/constant';\n/**\n *\n * The `Print` module is used to handle print action.\n */\nvar Print = /** @class */ (function () {\n /**\n * Constructor for the Grid print module\n * @hidden\n */\n function Print(parent, scrollModule) {\n this.isAsyncPrint = false;\n this.printing = 'isPrinting';\n this.parent = parent;\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.contentReady, this.contentReady.bind(this));\n this.parent.addEventListener(events.actionBegin, this.actionBegin.bind(this));\n this.parent.on(events.onEmpty, this.onEmpty.bind(this));\n this.scrollModule = scrollModule;\n }\n /**\n * By default, prints all the Grid pages and hides the pager.\n * > You can customize print options using the\n * [`printMode`](./api-grid.html#printmode-string).\n * @return {void}\n */\n Print.prototype.print = function () {\n this.renderPrintGrid();\n this.printWind = window.open('', 'print', 'height=' + window.outerHeight + ',width=' + window.outerWidth + ',tabbar=no');\n this.printWind.moveTo(0, 0);\n this.printWind.resizeTo(screen.availWidth, screen.availHeight);\n };\n Print.prototype.onEmpty = function () {\n if (this.isPrintGrid()) {\n this.contentReady();\n }\n };\n Print.prototype.actionBegin = function () {\n if (this.isPrintGrid()) {\n this.isAsyncPrint = true;\n }\n };\n Print.prototype.renderPrintGrid = function () {\n var gObj = this.parent;\n var elem = 'element';\n var printGridModel = {};\n var element = createElement('div', {\n id: this.parent.element.id + '_print', className: gObj.element.className + ' e-print-grid'\n });\n document.body.appendChild(element);\n for (var _i = 0, _a = Print.printGridProp; _i < _a.length; _i++) {\n var key = _a[_i];\n if (key === 'columns') {\n printGridModel[key] = getActualPropFromColl(gObj[key]);\n }\n else if (key === 'allowPaging') {\n printGridModel[key] = this.parent.printMode === 'CurrentPage';\n }\n else {\n printGridModel[key] = getActualProperties(gObj[key]);\n }\n }\n var printGrid = new Grid(printGridModel);\n printGrid.appendTo(element);\n printGrid[this.printing] = true;\n printGrid.trigger = gObj.trigger;\n };\n Print.prototype.contentReady = function () {\n if (this.isPrintGrid()) {\n var gObj = this.parent;\n if (this.isAsyncPrint) {\n this.printGrid();\n return;\n }\n var args = {\n requestType: 'print',\n element: gObj.element,\n selectedRows: gObj.getContentTable().querySelectorAll('tr[aria-selected=\"true\"]'),\n cancel: false\n };\n if (!this.isAsyncPrint) {\n gObj.trigger(events.beforePrint, args);\n }\n if (args.cancel) {\n detach(gObj.element);\n return;\n }\n else if (!this.isAsyncPrint) {\n this.printGrid();\n }\n }\n };\n Print.prototype.printGrid = function () {\n var gObj = this.parent;\n // Pager eleement process based on primt mode\n if (gObj.allowPaging && gObj.printMode === 'CurrentPage') {\n gObj.element.querySelector('.e-gridpager').style.display = 'none';\n }\n // Height adjustment on print grid\n if (gObj.height !== 'auto') {\n var cssProps = this.scrollModule.getCssProperties();\n var contentDiv = gObj.element.querySelector('.e-content');\n var headerDiv = gObj.element.querySelector('.e-gridheader');\n contentDiv.style.height = 'auto';\n contentDiv.style.overflowY = 'auto';\n headerDiv.style[cssProps.padding] = '';\n headerDiv.firstElementChild.style[cssProps.border] = '';\n }\n // Grid alignment adjustment on grouping\n if (gObj.allowGrouping) {\n if (!gObj.groupSettings.columns.length) {\n gObj.element.querySelector('.e-groupdroparea').style.display = 'none';\n }\n else {\n this.removeColGroup(gObj.groupSettings.columns.length, gObj.element);\n removeElement(gObj.element, '.e-grouptopleftcell');\n removeElement(gObj.element, '.e-recordpluscollapse');\n removeElement(gObj.element, '.e-indentcell');\n removeElement(gObj.element, '.e-recordplusexpand');\n }\n }\n // hide horizontal scroll\n gObj.element.querySelector('.e-content').style.overflowX = 'hidden';\n //hide filter bar in print grid\n if (gObj.allowFiltering && gObj.filterSettings.type === 'FilterBar') {\n gObj.element.querySelector('.e-filterbar').style.display = 'none';\n }\n // Hide the waiting popup\n var waitingPop = gObj.element.querySelectorAll('.e-spin-show');\n if (waitingPop.length > 0) {\n waitingPop[0].classList.add('e-spin-hide');\n waitingPop[0].classList.remove('e-spin-show');\n }\n if (gObj[this.printing]) {\n detach(gObj.element);\n }\n gObj.element.classList.remove('e-print-grid');\n this.printWind = printWindow(gObj.element, this.printWind);\n gObj[this.printing] = false;\n var args = {\n element: gObj.element\n };\n gObj.trigger(events.printComplete, args);\n };\n Print.prototype.removeColGroup = function (depth, element) {\n var groupCaption = element.querySelectorAll('.e-groupcaption');\n var colSpan = groupCaption[depth - 1].getAttribute('colspan');\n for (var i = 0; i < groupCaption.length; i++) {\n groupCaption[i].setAttribute('colspan', colSpan);\n }\n var colGroups = element.querySelectorAll('colgroup');\n for (var i = 0; i < colGroups.length; i++) {\n for (var j = 0; j < depth; j++) {\n colGroups[i].childNodes[j].style.display = 'none';\n }\n }\n };\n Print.prototype.isPrintGrid = function () {\n return this.parent.element.id.indexOf('_print') > 0 && this.parent[this.printing];\n };\n /**\n * To destroy the print\n * @return {void}\n * @hidden\n */\n Print.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.contentReady, this.contentReady.bind(this));\n this.parent.removeEventListener(events.actionBegin, this.actionBegin.bind(this));\n this.parent.off(events.onEmpty, this.onEmpty.bind(this));\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Print.prototype.getModuleName = function () {\n return 'print';\n };\n Print.printGridProp = [\n 'aggregates', 'allowGrouping', 'allowFiltering', 'allowMultiSorting', 'allowReordering', 'allowSorting',\n 'allowTextWrap', 'childGrid', 'columns', 'currentViewData', 'dataSource', 'detailTemplate', 'enableAltRow',\n 'enableColumnVirtualization', 'filterSettings', 'gridLines',\n 'groupSettings', 'height', 'locale', 'pageSettings', 'printMode', 'query', 'queryString',\n 'rowHeight', 'rowTemplate', 'sortSettings', 'textWrapSettings', 'allowPaging',\n events.beforePrint, events.printComplete\n ];\n return Print;\n}());\nexport { Print };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { compile } from '@syncfusion/ej2-base';\nimport { getEnumValue } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\nimport { Property, Collection, ChildProperty } from '@syncfusion/ej2-base';\nimport { ValueFormatter } from '../services/value-formatter';\n/**\n * Configures the Grid's aggregate column.\n */\nvar AggregateColumn = /** @class */ (function (_super) {\n __extends(AggregateColumn, _super);\n function AggregateColumn() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.templateFn = {};\n return _this;\n }\n /**\n * @hidden\n */\n AggregateColumn.prototype.setFormatter = function () {\n var valueFormatter = new ValueFormatter();\n if (this.format && (this.format.skeleton || this.format.format)) {\n this.formatFn = valueFormatter.getFormatFunction(this.format);\n }\n };\n /**\n * @hidden\n */\n AggregateColumn.prototype.getFormatter = function () {\n return this.formatFn;\n };\n /**\n * @hidden\n */\n AggregateColumn.prototype.setTemplate = function (helper) {\n if (helper === void 0) { helper = {}; }\n if (this.footerTemplate !== undefined) {\n this.templateFn[getEnumValue(CellType, CellType.Summary)] = { fn: compile(this.footerTemplate, helper),\n property: 'footerTemplate' };\n }\n if (this.groupFooterTemplate !== undefined) {\n this.templateFn[getEnumValue(CellType, CellType.GroupSummary)] = { fn: compile(this.groupFooterTemplate, helper),\n property: 'groupFooterTemplate' };\n }\n if (this.groupCaptionTemplate !== undefined) {\n this.templateFn[getEnumValue(CellType, CellType.CaptionSummary)] = { fn: compile(this.groupCaptionTemplate, helper),\n property: 'groupCaptionTemplate' };\n }\n };\n /**\n * @hidden\n */\n AggregateColumn.prototype.getTemplate = function (type) {\n return this.templateFn[getEnumValue(CellType, type)];\n };\n /**\n * @hidden\n */\n AggregateColumn.prototype.setPropertiesSilent = function (prop) {\n this.setProperties(prop, true);\n };\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"type\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"field\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"columnName\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"format\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"footerTemplate\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"groupFooterTemplate\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"groupCaptionTemplate\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"customAggregate\", void 0);\n return AggregateColumn;\n}(ChildProperty));\nexport { AggregateColumn };\n/**\n * Configures the aggregate rows.\n */\nvar AggregateRow = /** @class */ (function (_super) {\n __extends(AggregateRow, _super);\n function AggregateRow() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Collection([], AggregateColumn)\n ], AggregateRow.prototype, \"columns\", void 0);\n return AggregateRow;\n}(ChildProperty));\nexport { AggregateRow };\n","import { Browser, createElement, remove } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\n/**\n * The `Clipboard` module is used to handle clipboard copy action.\n */\nvar Clipboard = /** @class */ (function () {\n /**\n * Constructor for the Grid clipboard module\n * @hidden\n */\n function Clipboard(parent) {\n this.copyContent = '';\n this.isSelect = false;\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * @hidden\n */\n Clipboard.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.contentReady, this.initialEnd, this);\n this.parent.on(events.keyPressed, this.keyDownHandler, this);\n };\n /**\n * @hidden\n */\n Clipboard.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.keyPressed, this.keyDownHandler);\n };\n Clipboard.prototype.initialEnd = function () {\n this.parent.off(events.contentReady, this.initialEnd);\n this.clipBoardTextArea = createElement('textarea', {\n className: 'e-clipboard',\n styles: 'opacity: 0',\n attrs: { readonly: 'true', tabindex: '-1', 'aria-label': 'clipboard' }\n });\n this.parent.element.appendChild(this.clipBoardTextArea);\n };\n Clipboard.prototype.keyDownHandler = function (e) {\n if (e.action === 'ctrlPlusC') {\n this.copy();\n }\n else if (e.action === 'ctrlShiftPlusH') {\n this.copy(true);\n }\n };\n Clipboard.prototype.setCopyData = function (withHeader) {\n if (window.getSelection().toString() === '') {\n var isFrozen = this.parent.getFrozenColumns();\n this.clipBoardTextArea.value = this.copyContent = '';\n var mRows = void 0;\n var rows = this.parent.getRows();\n if (isFrozen) {\n mRows = this.parent.getMovableDataRows();\n }\n if (this.parent.selectionSettings.mode !== 'Cell') {\n var selectedIndexes = this.parent.getSelectedRowIndexes().sort(function (a, b) { return a - b; });\n if (withHeader) {\n var headerTextArray = [];\n for (var i = 0; i < this.parent.getVisibleColumns().length; i++) {\n headerTextArray[i] = this.parent.getVisibleColumns()[i].headerText;\n }\n this.getCopyData(headerTextArray, false, '\\t', withHeader);\n this.copyContent += '\\n';\n }\n for (var i = 0; i < selectedIndexes.length; i++) {\n if (i > 0) {\n this.copyContent += '\\n';\n }\n var cells = [].slice.call(rows[selectedIndexes[i]].querySelectorAll('.e-rowcell'));\n if (isFrozen) {\n cells.push.apply(cells, [].slice.call(mRows[selectedIndexes[i]].querySelectorAll('.e-rowcell')));\n }\n this.getCopyData(cells, false, '\\t', withHeader);\n }\n }\n else {\n var obj = this.checkBoxSelection();\n if (obj.status) {\n if (withHeader) {\n var headers = [];\n for (var i = 0; i < obj.colIndexes.length; i++) {\n headers.push(this.parent.getColumnHeaderByIndex(obj.colIndexes[i]));\n }\n this.getCopyData(headers, false, '\\t', withHeader);\n this.copyContent += '\\n';\n }\n for (var i = 0; i < obj.rowIndexes.length; i++) {\n if (i > 0) {\n this.copyContent += '\\n';\n }\n var cells = [].slice.call(rows[obj.rowIndexes[i]].\n querySelectorAll('.e-cellselectionbackground'));\n if (isFrozen) {\n cells.push.apply(cells, [].slice.call(mRows[obj.rowIndexes[i]].querySelectorAll('.e-cellselectionbackground')));\n }\n this.getCopyData(cells, false, '\\t', withHeader);\n }\n }\n else {\n this.getCopyData([].slice.call(this.parent.element.querySelectorAll('.e-cellselectionbackground')), true, '\\n', withHeader);\n }\n }\n var args = {\n data: this.copyContent,\n cancel: false,\n };\n this.parent.trigger(events.beforeCopy, args);\n if (args.cancel) {\n return;\n }\n this.clipBoardTextArea.value = this.copyContent = args.data;\n if (!Browser.userAgent.match(/ipad|ipod|iphone/i)) {\n this.clipBoardTextArea.select();\n }\n else {\n this.clipBoardTextArea.setSelectionRange(0, this.clipBoardTextArea.value.length);\n }\n this.isSelect = true;\n }\n };\n Clipboard.prototype.getCopyData = function (cells, isCell, splitKey, withHeader) {\n var isElement = typeof cells[0] !== 'string';\n for (var j = 0; j < cells.length; j++) {\n if (withHeader && isCell) {\n this.copyContent += this.parent.getColumns()[parseInt(cells[j].getAttribute('aria-colindex'), 10)].headerText + '\\n';\n }\n if (isElement) {\n if (!cells[j].classList.contains('e-hide')) {\n this.copyContent += cells[j].textContent;\n }\n }\n else {\n this.copyContent += cells[j];\n }\n if (j < cells.length - 1) {\n this.copyContent += splitKey;\n }\n }\n };\n /**\n * Copy selected rows or cells data into clipboard.\n * @param {boolean} withHeader - Specifies whether the column header data need to be copied or not.\n */\n Clipboard.prototype.copy = function (withHeader) {\n if (document.queryCommandSupported('copy')) {\n this.setCopyData(withHeader);\n document.execCommand('copy');\n this.clipBoardTextArea.blur();\n }\n if (this.isSelect) {\n window.getSelection().removeAllRanges();\n this.isSelect = false;\n }\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Clipboard.prototype.getModuleName = function () {\n return 'clipboard';\n };\n /**\n * To destroy the clipboard\n * @return {void}\n * @hidden\n */\n Clipboard.prototype.destroy = function () {\n this.removeEventListener();\n remove(this.clipBoardTextArea);\n };\n Clipboard.prototype.checkBoxSelection = function () {\n var gridObj = this.parent;\n var obj = { status: false };\n if (gridObj.selectionSettings.mode === 'Cell') {\n var rowCellIndxes = gridObj.getSelectedRowCellIndexes();\n var str = void 0;\n var isBox = void 0;\n var rowIndexes = [];\n var i = void 0;\n for (i = 0; i < rowCellIndxes.length; i++) {\n if (rowCellIndxes[i].cellIndexes.length) {\n rowIndexes.push(rowCellIndxes[i].rowIndex);\n }\n if (rowCellIndxes[i].cellIndexes.length) {\n if (!str) {\n str = JSON.stringify(rowCellIndxes[i].cellIndexes.sort());\n }\n if (str !== JSON.stringify(rowCellIndxes[i].cellIndexes.sort())) {\n break;\n }\n }\n }\n rowIndexes.sort();\n if (i === rowCellIndxes.length && rowIndexes[rowIndexes.length - 1] - rowIndexes[0] === rowIndexes.length - 1) {\n obj = { status: true, rowIndexes: rowIndexes, colIndexes: rowCellIndxes[0].cellIndexes };\n }\n }\n return obj;\n };\n return Clipboard;\n}());\nexport { Clipboard };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, ChildProperty, Browser, closest, extend } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, setValue, getValue } from '@syncfusion/ej2-base';\nimport { createElement, addClass, removeClass, append, classList } from '@syncfusion/ej2-base';\nimport { Property, Collection, Complex, Event, NotifyPropertyChanges, L10n } from '@syncfusion/ej2-base';\nimport { EventHandler, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { DataUtil } from '@syncfusion/ej2-data';\nimport { createSpinner, hideSpinner, showSpinner, Tooltip } from '@syncfusion/ej2-popups';\nimport { iterateArrayOrObject, prepareColumns, parentsUntil, wrap, templateCompiler, refreshForeignData, getRowHeight } from './util';\nimport * as events from '../base/constant';\nimport { Render } from '../renderer/render';\nimport { RenderType } from './enum';\nimport { RowRenderer } from '../renderer/row-renderer';\nimport { CellRenderer } from '../renderer/cell-renderer';\nimport { CellRendererFactory } from '../services/cell-render-factory';\nimport { ServiceLocator } from '../services/service-locator';\nimport { ValueFormatter } from '../services/value-formatter';\nimport { RendererFactory } from '../services/renderer-factory';\nimport { ColumnWidthService } from '../services/width-controller';\nimport { AriaService } from '../services/aria-service';\nimport { FocusStrategy } from '../services/focus-strategy';\nimport { PageSettings } from '../models/page-settings';\nimport { Selection } from '../actions/selection';\nimport { Search } from '../actions/search';\nimport { ShowHide } from '../actions/show-hide';\nimport { Scroll } from '../actions/scroll';\nimport { Print } from '../actions/print';\nimport { AggregateRow } from '../models/aggregate';\nimport { Clipboard } from '../actions/clipboard';\n/**\n * Represents the field name and direction of sort column.\n */\nvar SortDescriptor = /** @class */ (function (_super) {\n __extends(SortDescriptor, _super);\n function SortDescriptor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], SortDescriptor.prototype, \"field\", void 0);\n __decorate([\n Property()\n ], SortDescriptor.prototype, \"direction\", void 0);\n return SortDescriptor;\n}(ChildProperty));\nexport { SortDescriptor };\n/**\n * Configures the sorting behavior of Grid.\n */\nvar SortSettings = /** @class */ (function (_super) {\n __extends(SortSettings, _super);\n function SortSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Collection([], SortDescriptor)\n ], SortSettings.prototype, \"columns\", void 0);\n __decorate([\n Property(true)\n ], SortSettings.prototype, \"allowUnsort\", void 0);\n return SortSettings;\n}(ChildProperty));\nexport { SortSettings };\n/**\n * Represents the predicate for the filter column.\n */\nvar Predicate = /** @class */ (function (_super) {\n __extends(Predicate, _super);\n function Predicate() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], Predicate.prototype, \"field\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"operator\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"value\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"matchCase\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"ignoreAccent\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"predicate\", void 0);\n __decorate([\n Property({})\n ], Predicate.prototype, \"actualFilterValue\", void 0);\n __decorate([\n Property({})\n ], Predicate.prototype, \"actualOperator\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"type\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"ejpredicate\", void 0);\n return Predicate;\n}(ChildProperty));\nexport { Predicate };\n/**\n * Configures the filtering behavior of the Grid.\n */\nvar FilterSettings = /** @class */ (function (_super) {\n __extends(FilterSettings, _super);\n function FilterSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Collection([], Predicate)\n ], FilterSettings.prototype, \"columns\", void 0);\n __decorate([\n Property('FilterBar')\n ], FilterSettings.prototype, \"type\", void 0);\n __decorate([\n Property()\n ], FilterSettings.prototype, \"mode\", void 0);\n __decorate([\n Property(true)\n ], FilterSettings.prototype, \"showFilterBarStatus\", void 0);\n __decorate([\n Property(1500)\n ], FilterSettings.prototype, \"immediateModeDelay\", void 0);\n __decorate([\n Property()\n ], FilterSettings.prototype, \"operators\", void 0);\n __decorate([\n Property(false)\n ], FilterSettings.prototype, \"ignoreAccent\", void 0);\n return FilterSettings;\n}(ChildProperty));\nexport { FilterSettings };\n/**\n * Configures the selection behavior of the Grid.\n */\nvar SelectionSettings = /** @class */ (function (_super) {\n __extends(SelectionSettings, _super);\n function SelectionSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Row')\n ], SelectionSettings.prototype, \"mode\", void 0);\n __decorate([\n Property('Flow')\n ], SelectionSettings.prototype, \"cellSelectionMode\", void 0);\n __decorate([\n Property('Single')\n ], SelectionSettings.prototype, \"type\", void 0);\n __decorate([\n Property(false)\n ], SelectionSettings.prototype, \"checkboxOnly\", void 0);\n __decorate([\n Property(false)\n ], SelectionSettings.prototype, \"persistSelection\", void 0);\n return SelectionSettings;\n}(ChildProperty));\nexport { SelectionSettings };\n/**\n * Configures the search behavior of the Grid.\n */\nvar SearchSettings = /** @class */ (function (_super) {\n __extends(SearchSettings, _super);\n function SearchSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property([])\n ], SearchSettings.prototype, \"fields\", void 0);\n __decorate([\n Property('')\n ], SearchSettings.prototype, \"key\", void 0);\n __decorate([\n Property('contains')\n ], SearchSettings.prototype, \"operator\", void 0);\n __decorate([\n Property(true)\n ], SearchSettings.prototype, \"ignoreCase\", void 0);\n __decorate([\n Property(false)\n ], SearchSettings.prototype, \"ignoreAccent\", void 0);\n return SearchSettings;\n}(ChildProperty));\nexport { SearchSettings };\n/**\n * Configures the row drop settings of the Grid.\n */\nvar RowDropSettings = /** @class */ (function (_super) {\n __extends(RowDropSettings, _super);\n function RowDropSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], RowDropSettings.prototype, \"targetID\", void 0);\n return RowDropSettings;\n}(ChildProperty));\nexport { RowDropSettings };\n/**\n * Configures the text wrap settings of the Grid.\n */\nvar TextWrapSettings = /** @class */ (function (_super) {\n __extends(TextWrapSettings, _super);\n function TextWrapSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Both')\n ], TextWrapSettings.prototype, \"wrapMode\", void 0);\n return TextWrapSettings;\n}(ChildProperty));\nexport { TextWrapSettings };\n/**\n * Configures the group behavior of the Grid.\n */\nvar GroupSettings = /** @class */ (function (_super) {\n __extends(GroupSettings, _super);\n function GroupSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], GroupSettings.prototype, \"showDropArea\", void 0);\n __decorate([\n Property(false)\n ], GroupSettings.prototype, \"showToggleButton\", void 0);\n __decorate([\n Property(false)\n ], GroupSettings.prototype, \"showGroupedColumn\", void 0);\n __decorate([\n Property(true)\n ], GroupSettings.prototype, \"showUngroupButton\", void 0);\n __decorate([\n Property(false)\n ], GroupSettings.prototype, \"disablePageWiseAggregates\", void 0);\n __decorate([\n Property([])\n ], GroupSettings.prototype, \"columns\", void 0);\n __decorate([\n Property()\n ], GroupSettings.prototype, \"captionTemplate\", void 0);\n return GroupSettings;\n}(ChildProperty));\nexport { GroupSettings };\n/**\n * Configures the edit behavior of the Grid.\n */\nvar EditSettings = /** @class */ (function (_super) {\n __extends(EditSettings, _super);\n function EditSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"allowAdding\", void 0);\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"allowEditing\", void 0);\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"allowDeleting\", void 0);\n __decorate([\n Property('Normal')\n ], EditSettings.prototype, \"mode\", void 0);\n __decorate([\n Property(true)\n ], EditSettings.prototype, \"allowEditOnDblClick\", void 0);\n __decorate([\n Property(true)\n ], EditSettings.prototype, \"showConfirmDialog\", void 0);\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"showDeleteConfirmDialog\", void 0);\n return EditSettings;\n}(ChildProperty));\nexport { EditSettings };\n/**\n * Represents the Grid component.\n * ```html\n *
    \n * \n * ```\n */\nvar Grid = /** @class */ (function (_super) {\n __extends(Grid, _super);\n /**\n * Constructor for creating the component\n * @hidden\n */\n function Grid(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isPreventScrollEvent = false;\n _this.inViewIndexes = [];\n _this.freezeRefresh = Component.prototype.refresh;\n /**\n * Gets the currently visible records of the Grid.\n */\n _this.currentViewData = [];\n /** @hidden */\n _this.prevPageMoving = false;\n _this.needsID = true;\n setValue('mergePersistData', _this.mergePersistGridData, _this);\n return _this;\n }\n /**\n * Get the properties to be maintained in the persisted state.\n * @return {string}\n * @hidden\n */\n Grid.prototype.getPersistData = function () {\n var _this = this;\n var keyEntity = ['pageSettings', 'sortSettings',\n 'filterSettings', 'groupSettings', 'columns', 'searchSettings', 'selectedRowIndex'];\n var ignoreOnPersist = {\n pageSettings: ['template', 'pageSizes', 'enableQueryString', 'totalRecordsCount', 'pageCount'],\n filterSettings: ['type', 'mode', 'showFilterBarStatus', 'immediateModeDelay', 'ignoreAccent'],\n groupSettings: ['showDropArea', 'showToggleButton', 'showGroupedColumn', 'showUngroupButton',\n 'disablePageWiseAggregates', 'hideCaptionCount'],\n searchSettings: ['fields', 'operator', 'ignoreCase'],\n sortSettings: [], columns: [], selectedRowIndex: []\n };\n var ignoreOnColumn = ['filter', 'edit', 'filterBarTemplate', 'headerTemplate', 'template',\n 'commandTemplate', 'commands', 'dataSource'];\n keyEntity.forEach(function (value) {\n var currentObject = _this[value];\n for (var _i = 0, _a = ignoreOnPersist[value]; _i < _a.length; _i++) {\n var val = _a[_i];\n delete currentObject[val];\n }\n });\n this.ignoreInArrays(ignoreOnColumn, this.columns);\n return this.addOnPersist(keyEntity);\n };\n Grid.prototype.ignoreInArrays = function (ignoreOnColumn, columns) {\n var _this = this;\n columns.forEach(function (column) {\n if (column.columns) {\n _this.ignoreInColumn(ignoreOnColumn, column);\n _this.ignoreInArrays(ignoreOnColumn, column.columns);\n }\n else {\n _this.ignoreInColumn(ignoreOnColumn, column);\n }\n });\n };\n Grid.prototype.ignoreInColumn = function (ignoreOnColumn, column) {\n ignoreOnColumn.forEach(function (val) {\n delete column[val];\n });\n };\n /**\n * To provide the array of modules needed for component rendering\n * @return {ModuleDeclaration[]}\n * @hidden\n */\n Grid.prototype.requiredModules = function () {\n var modules = [];\n if (this.isDestroyed) {\n return modules;\n }\n if (this.allowFiltering) {\n modules.push({\n member: 'filter',\n args: [this, this.filterSettings, this.serviceLocator]\n });\n }\n if (this.allowExcelExport) {\n modules.push({\n member: 'ExcelExport',\n args: [this]\n });\n }\n if (this.allowPdfExport) {\n modules.push({\n member: 'PdfExport',\n args: [this]\n });\n }\n if (this.allowSorting) {\n modules.push({\n member: 'sort',\n args: [this, this.sortSettings, this.sortedColumns, this.serviceLocator]\n });\n }\n if (this.allowPaging) {\n modules.push({\n member: 'pager',\n args: [this, this.pageSettings]\n });\n }\n if (this.allowSelection) {\n modules.push({\n member: 'selection',\n args: [this, this.selectionSettings, this.serviceLocator]\n });\n }\n modules.push({\n member: 'resize',\n args: [this]\n });\n if (this.allowReordering) {\n modules.push({\n member: 'reorder',\n args: [this]\n });\n }\n if (this.allowRowDragAndDrop) {\n modules.push({\n member: 'rowDragAndDrop',\n args: [this]\n });\n }\n if (this.allowGrouping) {\n modules.push({\n member: 'group',\n args: [this, this.groupSettings, this.sortedColumns, this.serviceLocator]\n });\n }\n if (this.aggregates.length) {\n modules.push({ member: 'aggregate', args: [this, this.serviceLocator] });\n }\n if (this.isDetail()) {\n modules.push({\n member: 'detailRow',\n args: [this, this.serviceLocator]\n });\n }\n if (this.toolbar || this.toolbarTemplate) {\n modules.push({\n member: 'toolbar',\n args: [this, this.serviceLocator]\n });\n }\n if (this.enableVirtualization || this.enableColumnVirtualization) {\n modules.push({\n member: 'virtualscroll',\n args: [this, this.serviceLocator]\n });\n }\n if (this.getFrozenColumns() || this.frozenRows) {\n modules.push({ member: 'freeze', args: [this, this.serviceLocator] });\n }\n if (this.isCommandColumn(this.columns)) {\n modules.push({\n member: 'commandColumn',\n args: [this, this.serviceLocator]\n });\n }\n if (this.editSettings.allowAdding || this.editSettings.allowDeleting || this.editSettings.allowEditing) {\n modules.push({\n member: 'edit',\n args: [this, this.serviceLocator]\n });\n }\n this.extendRequiredModules(modules);\n return modules;\n };\n Grid.prototype.extendRequiredModules = function (modules) {\n if (this.contextMenuItems) {\n modules.push({\n member: 'contextMenu',\n args: [this, this.serviceLocator]\n });\n }\n if (this.showColumnMenu) {\n modules.push({\n member: 'columnMenu',\n args: [this, this.serviceLocator]\n });\n }\n if (this.showColumnChooser) {\n modules.push({\n member: 'columnChooser',\n args: [this, this.serviceLocator]\n });\n }\n if (this.isForeignKeyEnabled(this.columns)) {\n modules.push({ member: 'foreignKey', args: [this, this.serviceLocator] });\n }\n };\n /**\n * For internal use only - Initialize the event handler;\n * @private\n */\n Grid.prototype.preRender = function () {\n this.serviceLocator = new ServiceLocator;\n this.initProperties();\n this.initializeServices();\n };\n Grid.prototype.initProperties = function () {\n /* tslint:disable */\n this.isInitial = true;\n this.sortedColumns = [];\n this.inViewIndexes = [];\n this.mediaCol = [];\n this.isInitialLoad = false;\n this.mergeCells = {};\n this.isEdit = false;\n this.checkAllRows = 'None';\n this.isCheckBoxSelection = false;\n this.isPersistSelection = false;\n this.freezeRefresh = Component.prototype.refresh;\n this.filterOperators = {\n contains: 'contains', endsWith: 'endswith', equal: 'equal', greaterThan: 'greaterthan', greaterThanOrEqual: 'greaterthanorequal',\n lessThan: 'lessthan', lessThanOrEqual: 'lessthanorequal', notEqual: 'notequal', startsWith: 'startswith'\n };\n this.defaultLocale = {\n EmptyRecord: 'No records to display',\n True: 'true',\n False: 'false',\n InvalidFilterMessage: 'Invalid Filter Data',\n GroupDropArea: 'Drag a column header here to group its column',\n UnGroup: 'Click here to ungroup',\n GroupDisable: 'Grouping is disabled for this column',\n FilterbarTitle: '\\'s filter bar cell',\n EmptyDataSourceError: 'DataSource must not be empty at initial load since columns are generated from dataSource in AutoGenerate Column Grid',\n // Toolbar Items\n Add: 'Add',\n Edit: 'Edit',\n Cancel: 'Cancel',\n Update: 'Update',\n Delete: 'Delete',\n Print: 'Print',\n Pdfexport: 'PDF Export',\n Excelexport: 'Excel Export',\n Wordexport: 'Word Export',\n Csvexport: 'CSV Export',\n Search: 'Search',\n Columnchooser: 'Columns',\n Save: 'Save',\n Item: 'item',\n Items: 'items',\n EditOperationAlert: 'No records selected for edit operation',\n DeleteOperationAlert: 'No records selected for delete operation',\n SaveButton: 'Save',\n OKButton: 'OK',\n CancelButton: 'Cancel',\n EditFormTitle: 'Details of ',\n AddFormTitle: 'Add New Record',\n BatchSaveConfirm: 'Are you sure you want to save changes?',\n BatchSaveLostChanges: 'Unsaved changes will be lost. Are you sure you want to continue?',\n ConfirmDelete: 'Are you sure you want to Delete Record?',\n CancelEdit: 'Are you sure you want to Cancel the changes?',\n ChooseColumns: 'Choose Column',\n SearchColumns: 'search columns',\n Matchs: 'No Matches Found',\n FilterButton: 'Filter',\n ClearButton: 'Clear',\n StartsWith: 'Starts With',\n EndsWith: 'Ends With',\n Contains: 'Contains',\n Equal: 'Equal',\n NotEqual: 'Not Equal',\n LessThan: 'Less Than',\n LessThanOrEqual: 'Less Than Or Equal',\n GreaterThan: 'Greater Than',\n GreaterThanOrEqual: 'Greater Than Or Equal',\n ChooseDate: 'Choose a Date',\n EnterValue: 'Enter the value',\n Copy: 'Copy',\n Group: 'Group by this column',\n Ungroup: 'Ungroup by this column',\n autoFitAll: 'Auto Fit all columns',\n autoFit: 'Auto Fit this column',\n Export: 'Export',\n FirstPage: 'First Page',\n LastPage: 'Last Page',\n PreviousPage: 'Previous Page',\n NextPage: 'Next Page',\n SortAscending: 'Sort Ascending',\n SortDescending: 'Sort Descending',\n EditRecord: 'Edit Record',\n DeleteRecord: 'Delete Record',\n FilterMenu: 'Filter',\n SelectAll: 'Select All',\n Blanks: 'Blanks',\n FilterTrue: 'True',\n FilterFalse: 'False',\n NoResult: 'No Matches Found',\n ClearFilter: 'Clear Filter',\n NumberFilter: 'Number Filters',\n TextFilter: 'Text Filters',\n DateFilter: 'Date Filters',\n MatchCase: 'Match Case',\n Between: 'Between',\n CustomFilter: 'Custom Filter',\n CustomFilterPlaceHolder: 'Enter the value',\n CustomFilterDatePlaceHolder: 'Choose a date',\n AND: 'AND',\n OR: 'OR',\n ShowRowsWhere: 'Show rows where:'\n };\n this.keyConfigs = {\n downArrow: 'downarrow',\n upArrow: 'uparrow',\n rightArrow: 'rightarrow',\n leftArrow: 'leftarrow',\n shiftDown: 'shift+downarrow',\n shiftUp: 'shift+uparrow',\n shiftRight: 'shift+rightarrow',\n shiftLeft: 'shift+leftarrow',\n home: 'home',\n end: 'end',\n escape: 'escape',\n ctrlHome: 'ctrl+home',\n ctrlEnd: 'ctrl+end',\n pageUp: 'pageup',\n pageDown: 'pagedown',\n ctrlAltPageUp: 'ctrl+alt+pageup',\n ctrlAltPageDown: 'ctrl+alt+pagedown',\n altPageUp: 'alt+pageup',\n altPageDown: 'alt+pagedown',\n altDownArrow: 'alt+downarrow',\n altUpArrow: 'alt+uparrow',\n ctrlDownArrow: 'ctrl+downarrow',\n ctrlUpArrow: 'ctrl+uparrow',\n ctrlPlusA: 'ctrl+A',\n ctrlPlusP: 'ctrl+P',\n insert: 'insert',\n delete: 'delete',\n f2: 'f2',\n enter: 'enter',\n ctrlEnter: 'ctrl+enter',\n shiftEnter: 'shift+enter',\n tab: 'tab',\n shiftTab: 'shift+tab',\n space: 'space',\n ctrlPlusC: 'ctrl+C',\n ctrlShiftPlusH: 'ctrl+shift+H'\n };\n /* tslint:enable */\n };\n /**\n * For internal use only - To Initialize the component rendering.\n * @private\n */\n Grid.prototype.render = function () {\n this.ariaService.setOptions(this.element, { role: 'grid' });\n createSpinner({ target: this.element });\n this.renderModule = new Render(this, this.serviceLocator);\n this.getMediaColumns();\n this.searchModule = new Search(this);\n this.scrollModule = new Scroll(this);\n this.notify(events.initialLoad, {});\n this.trigger(events.load);\n prepareColumns(this.columns, this.enableColumnVirtualization);\n this.getColumns();\n this.processModel();\n this.gridRender();\n this.wireEvents();\n this.addListener();\n this.updateDefaultCursor();\n this.updateStackedFilter();\n this.showSpinner();\n this.notify(events.initialEnd, {});\n };\n /**\n * By default, grid shows the spinner for all its actions. You can use this method to show spinner at your needed time.\n */\n Grid.prototype.showSpinner = function () {\n showSpinner(this.element);\n };\n /**\n * Manually showed spinner needs to hide by `hideSpinnner`.\n */\n Grid.prototype.hideSpinner = function () {\n hideSpinner(this.element);\n };\n Grid.prototype.updateStackedFilter = function () {\n if (this.allowFiltering && this.filterSettings.type === 'FilterBar' &&\n this.getHeaderContent().querySelectorAll('.e-stackedheadercell').length) {\n this.getHeaderContent().classList.add('e-stackedfilter');\n }\n else {\n this.getHeaderContent().classList.remove('e-stackedfilter');\n }\n };\n Grid.prototype.getMediaColumns = function () {\n if (!this.enableColumnVirtualization) {\n var gcol = this.getColumns();\n this.getShowHideService = this.serviceLocator.getService('showHideService');\n if (!isNullOrUndefined(gcol)) {\n for (var index = 0; index < gcol.length; index++) {\n if (!isNullOrUndefined(gcol[index].hideAtMedia)) {\n this.mediaCol.push(gcol[index]);\n var media = window.matchMedia(gcol[index].hideAtMedia);\n this.mediaQueryUpdate(index, media);\n media.addListener(this.mediaQueryUpdate.bind(this, index));\n }\n }\n }\n }\n };\n /**\n * @hidden\n */\n Grid.prototype.mediaQueryUpdate = function (columnIndex, e) {\n var col = this.getColumns()[columnIndex];\n col.visible = e.matches;\n if (this.isInitialLoad) {\n if (col.visible) {\n this.showHider.show(col.headerText, 'headerText');\n }\n else {\n this.showHider.hide(col.headerText, 'headerText');\n }\n }\n };\n Grid.prototype.refreshMediaCol = function () {\n this.isInitialLoad = true;\n if (this.aggregates.length && this.element.scrollHeight > this.height) {\n var footerContent = this.element.querySelector('.e-gridfooter');\n addClass([footerContent], ['e-footerpadding']);\n }\n };\n /**\n * For internal use only - Initialize the event handler\n * @private\n */\n Grid.prototype.eventInitializer = function () {\n //eventInitializer\n };\n /**\n * Destroys the component (detaches/removes all event handlers, attributes, classes, and empties the component element).\n * @method destroy\n * @return {void}\n */\n Grid.prototype.destroy = function () {\n this.unwireEvents();\n this.removeListener();\n this.notify(events.destroy, {});\n this.destroyDependentModules();\n _super.prototype.destroy.call(this);\n this.toolTipObj.destroy();\n var modules = ['renderModule', 'headerModule', 'contentModule', 'valueFormatterService',\n 'serviceLocator', 'ariaService', 'keyboardModule', 'widthService', 'searchModule', 'showHider',\n 'scrollModule', 'printModule', 'clipboardModule', 'focusModule'];\n for (var i = 0; i < modules.length; i++) {\n if (this[modules[i]]) {\n this[modules[i]] = null;\n }\n }\n this.element.innerHTML = '';\n classList(this.element, [], ['e-rtl', 'e-gridhover', 'e-responsive', 'e-default', 'e-device', 'e-grid-min-height']);\n };\n Grid.prototype.destroyDependentModules = function () {\n this.scrollModule.destroy();\n this.keyboardModule.destroy();\n this.focusModule.destroy();\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Grid.prototype.getModuleName = function () {\n return 'grid';\n };\n /**\n * Called internally if any of the property value changed.\n * @hidden\n */\n /* tslint:disable-next-line:max-line-length */\n Grid.prototype.onPropertyChanged = function (newProp, oldProp) {\n var requireRefresh = false;\n var requireGridRefresh = false;\n var checkCursor;\n var args = { requestType: 'refresh' };\n if (this.isDestroyed) {\n return;\n }\n var properties = Object.keys(newProp);\n if (properties.indexOf('columns') > -1) {\n this.updateColumnObject();\n requireGridRefresh = true;\n }\n for (var _i = 0, properties_1 = properties; _i < properties_1.length; _i++) {\n var prop = properties_1[_i];\n switch (prop) {\n case 'allowPaging':\n this.notify(events.uiUpdate, { module: 'pager', enable: this.allowPaging });\n requireRefresh = true;\n break;\n case 'pageSettings':\n this.notify(events.inBoundModelChanged, { module: 'pager', properties: newProp.pageSettings });\n if (isNullOrUndefined(newProp.pageSettings.currentPage) && isNullOrUndefined(newProp.pageSettings.totalRecordsCount)\n || ((newProp.pageSettings.currentPage !== oldProp.pageSettings.currentPage)\n && !this.enableColumnVirtualization && !this.enableVirtualization\n && this.pageSettings.totalRecordsCount <= this.pageSettings.pageSize)) {\n requireRefresh = true;\n }\n break;\n case 'currencyCode':\n case 'locale':\n _super.prototype.refresh.call(this);\n break;\n case 'allowSorting':\n this.notify(events.uiUpdate, { module: 'sort', enable: this.allowSorting });\n requireRefresh = true;\n checkCursor = true;\n break;\n case 'allowFiltering':\n this.updateStackedFilter();\n this.notify(events.uiUpdate, { module: 'filter', enable: this.allowFiltering });\n requireRefresh = true;\n if (this.filterSettings.type !== 'FilterBar') {\n this.refreshHeader();\n }\n break;\n case 'height':\n case 'width':\n this.notify(events.uiUpdate, { module: 'scroll', properties: { width: newProp.width, height: newProp.height } });\n break;\n case 'allowReordering':\n this.headerModule.refreshUI();\n checkCursor = true;\n break;\n case 'allowRowDragAndDrop':\n this.notify(events.uiUpdate, { module: 'rowDragAndDrop', enable: this.allowRowDragAndDrop });\n break;\n case 'allowSelection':\n this.notify(events.uiUpdate, { module: 'selection', enable: this.allowSelection });\n break;\n case 'rowTemplate':\n this.rowTemplateFn = templateCompiler(this.rowTemplate);\n requireRefresh = true;\n break;\n case 'detailTemplate':\n this.detailTemplateFn = templateCompiler(this.detailTemplate);\n requireRefresh = true;\n break;\n case 'allowGrouping':\n this.notify(events.uiUpdate, { module: 'group', enable: this.allowGrouping });\n this.headerModule.refreshUI();\n requireRefresh = true;\n checkCursor = true;\n break;\n case 'childGrid':\n requireRefresh = true;\n break;\n case 'toolbar':\n this.notify(events.uiUpdate, { module: 'toolbar' });\n break;\n case 'groupSettings':\n if (!(isNullOrUndefined(newProp.groupSettings.showDropArea))) {\n this.headerModule.refreshUI();\n requireRefresh = true;\n checkCursor = true;\n }\n this.notify(events.inBoundModelChanged, {\n module: 'group', properties: newProp.groupSettings,\n oldProperties: oldProp.groupSettings\n });\n break;\n case 'aggregates':\n if (!this.aggregates.length && this.allowGrouping && this.groupSettings.columns.length) {\n requireRefresh = true;\n }\n this.notify(events.uiUpdate, { module: 'aggregate', properties: newProp });\n break;\n case 'frozenColumns':\n case 'frozenRows':\n this.freezeRefresh();\n break;\n default:\n this.extendedPropertyChange(prop, newProp);\n }\n }\n if (checkCursor) {\n this.updateDefaultCursor();\n }\n if (requireGridRefresh) {\n this.refresh();\n if (this.frozenColumns || this.frozenRows) {\n this.freezeRefresh();\n }\n }\n else if (requireRefresh) {\n this.notify(events.modelChanged, args);\n requireRefresh = false;\n }\n };\n /* tslint:disable-next-line:max-line-length */\n Grid.prototype.extendedPropertyChange = function (prop, newProp) {\n switch (prop) {\n case 'enableRtl':\n this.updateRTL();\n if (this.allowPaging) {\n this.element.querySelector('.e-gridpager').ej2_instances[0].enableRtl = newProp.enableRtl;\n this.element.querySelector('.e-gridpager').ej2_instances[0].dataBind();\n }\n if (this.height !== 'auto') {\n this.scrollModule.removePadding(!newProp.enableRtl);\n this.scrollModule.setPadding();\n }\n if (this.toolbar) {\n this.toolbarModule.getToolbar().ej2_instances[0].enableRtl = newProp.enableRtl;\n this.toolbarModule.getToolbar().ej2_instances[0].dataBind();\n }\n if (this.contextMenuItems) {\n this.contextMenuModule.getContextMenu().ej2_instances[0].enableRtl = newProp.enableRtl;\n this.contextMenuModule.getContextMenu().ej2_instances[0].dataBind();\n }\n if (this.showColumnMenu) {\n this.columnMenuModule.getColumnMenu().ej2_instances[0].enableRtl = newProp.enableRtl;\n this.columnMenuModule.getColumnMenu().ej2_instances[0].dataBind();\n }\n this.notify(events.rtlUpdated, {});\n break;\n case 'enableAltRow':\n this.renderModule.refresh();\n break;\n case 'allowResizing':\n this.headerModule.refreshUI();\n this.updateResizeLines();\n break;\n case 'rowHeight':\n if (this.rowHeight) {\n addClass([this.element], 'e-grid-min-height');\n }\n else {\n removeClass([this.element], 'e-grid-min-height');\n }\n this.renderModule.refresh();\n this.headerModule.refreshUI();\n break;\n case 'gridLines':\n this.updateGridLines();\n break;\n case 'showColumnMenu':\n this.headerModule.refreshUI();\n this.notify(events.uiUpdate, { module: 'columnMenu', enable: true });\n break;\n case 'columnMenuItems':\n this.notify(events.uiUpdate, { module: 'columnMenu', enable: this.columnMenuItems });\n break;\n case 'contextMenuItems':\n this.notify(events.uiUpdate, { module: 'contextMenu', enable: this.contextMenuItems });\n break;\n case 'showColumnChooser':\n this.notify(events.uiUpdate, { module: 'columnChooser', enable: this.showColumnChooser });\n break;\n case 'filterSettings':\n this.updateStackedFilter();\n this.notify(events.inBoundModelChanged, { module: 'filter', properties: newProp.filterSettings });\n break;\n case 'searchSettings':\n this.notify(events.inBoundModelChanged, { module: 'search', properties: newProp.searchSettings });\n break;\n case 'sortSettings':\n this.notify(events.inBoundModelChanged, { module: 'sort' });\n break;\n case 'selectionSettings':\n this.notify(events.inBoundModelChanged, { module: 'selection', properties: newProp.selectionSettings });\n break;\n case 'editSettings':\n this.notify(events.inBoundModelChanged, { module: 'edit', properties: newProp.editSettings });\n break;\n case 'allowTextWrap':\n case 'textWrapSettings':\n if (this.allowTextWrap) {\n this.applyTextWrap();\n }\n else {\n this.removeTextWrap();\n }\n this.notify(events.freezeRender, { case: 'textwrap', isModeChg: (prop === 'textWrapSettings') });\n break;\n case 'dataSource':\n var pending_1 = this.getDataModule().getState();\n if (pending_1.isPending) {\n var gResult_1 = !isNullOrUndefined(this.dataSource) ? this.dataSource.result : [];\n (pending_1.group || []).forEach(function (name) {\n gResult_1 = DataUtil.group(gResult_1, name, pending_1.aggregates || []);\n });\n this.dataSource = {\n result: gResult_1, count: this.dataSource.count,\n aggregates: this.dataSource.aggregates\n };\n pending_1.resolver(this.dataSource);\n }\n else {\n this.getDataModule().setState({ isDataChanged: false });\n this.notify(events.dataSourceModified, {});\n this.renderModule.refresh();\n }\n break;\n case 'enableHover':\n var action = newProp.enableHover ? addClass : removeClass;\n action([this.element], 'e-gridhover');\n break;\n }\n };\n /**\n * @private\n */\n Grid.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n if (this.filterModule && muteOnChange) {\n this.filterModule.refreshFilter();\n }\n };\n /**\n * @hidden\n */\n Grid.prototype.updateDefaultCursor = function () {\n var headerRows = [].slice.call(this.element.querySelectorAll('.e-columnheader'));\n for (var _i = 0, headerRows_1 = headerRows; _i < headerRows_1.length; _i++) {\n var row = headerRows_1[_i];\n if (this.allowSorting || (this.allowGrouping && this.groupSettings.showDropArea) || this.allowReordering) {\n row.classList.remove('e-defaultcursor');\n }\n else {\n row.classList.add('e-defaultcursor');\n }\n }\n };\n Grid.prototype.updateColumnModel = function (columns) {\n for (var i = 0, len = columns.length; i < len; i++) {\n if (columns[i].columns) {\n this.updateColumnModel(columns[i].columns);\n }\n else {\n this.columnModel.push(columns[i]);\n }\n }\n this.updateFrozenColumns();\n };\n Grid.prototype.updateFrozenColumns = function () {\n var cols = this.columnModel;\n var count = 0;\n for (var i = 0, len = cols.length; i < len; i++) {\n if (cols[i].isFrozen) {\n cols.splice(this.frozenColumns + count, 0, cols.splice(i, 1)[0]);\n count++;\n }\n }\n };\n /**\n * Gets the columns from the Grid.\n * @return {Column[]}\n */\n Grid.prototype.getColumns = function (isRefresh) {\n var _this = this;\n var inview = this.inViewIndexes.map(function (v) { return v - _this.groupSettings.columns.length; }).filter(function (v) { return v > -1; });\n var vLen = inview.length;\n if (!this.enableColumnVirtualization || isNullOrUndefined(this.columnModel) || this.columnModel.length === 0 || isRefresh) {\n this.columnModel = [];\n this.updateColumnModel(this.columns);\n }\n var columns = vLen === 0 ? this.columnModel :\n this.columnModel.slice(inview[0], inview[vLen - 1] + 1);\n return columns;\n };\n /**\n * @private\n */\n Grid.prototype.getStackedHeaderColumnByHeaderText = function (stackedHeader, col) {\n for (var i = 0; i < col.length; i++) {\n var individualColumn = col[i];\n if (individualColumn.field === stackedHeader || individualColumn.headerText === stackedHeader) {\n this.stackedColumn = individualColumn;\n break;\n }\n else if (individualColumn.columns) {\n this.getStackedHeaderColumnByHeaderText(stackedHeader, individualColumn.columns);\n }\n }\n return this.stackedColumn;\n };\n /**\n * @private\n */\n Grid.prototype.getColumnIndexesInView = function () {\n return this.inViewIndexes;\n };\n /**\n * @private\n */\n Grid.prototype.getLocaleConstants = function () {\n return this.defaultLocale;\n };\n /**\n * @private\n */\n Grid.prototype.setColumnIndexesInView = function (indexes) {\n this.inViewIndexes = indexes;\n };\n /**\n * Gets the visible columns from the Grid.\n * @return {Column[]}\n */\n Grid.prototype.getVisibleColumns = function () {\n var cols = [];\n for (var _i = 0, _a = this.columnModel; _i < _a.length; _i++) {\n var col = _a[_i];\n if (col.visible) {\n cols.push(col);\n }\n }\n return cols;\n };\n /**\n * Gets the header div of the Grid.\n * @return {Element}\n */\n Grid.prototype.getHeaderContent = function () {\n return this.headerModule.getPanel();\n };\n /**\n * Sets the header div of the Grid to replace the old header.\n * @param {Element} element - Specifies the Grid header.\n * @return {void}\n */\n Grid.prototype.setGridHeaderContent = function (element) {\n this.headerModule.setPanel(element);\n };\n /**\n * Gets the content table of the Grid.\n * @return {Element}\n */\n Grid.prototype.getContentTable = function () {\n return this.contentModule.getTable();\n };\n /**\n * Sets the content table of the Grid to replace the old content table.\n * @param {Element} element - Specifies the Grid content table.\n * @return {void}\n */\n Grid.prototype.setGridContentTable = function (element) {\n this.contentModule.setTable(element);\n };\n /**\n * Gets the content div of the Grid.\n * @return {Element}\n */\n Grid.prototype.getContent = function () {\n return this.contentModule.getPanel();\n };\n /**\n * Sets the content div of the Grid to replace the old Grid content.\n * @param {Element} element - Specifies the Grid content.\n * @return {void}\n */\n Grid.prototype.setGridContent = function (element) {\n this.contentModule.setPanel(element);\n };\n /**\n * Gets the header table element of the Grid.\n * @return {Element}\n */\n Grid.prototype.getHeaderTable = function () {\n return this.headerModule.getTable();\n };\n /**\n * Sets the header table of the Grid to replace the old one.\n * @param {Element} element - Specifies the Grid header table.\n * @return {void}\n */\n Grid.prototype.setGridHeaderTable = function (element) {\n this.headerModule.setTable(element);\n };\n /**\n * Gets the footer div of the Grid.\n * @return {Element}\n */\n Grid.prototype.getFooterContent = function () {\n if (isNullOrUndefined(this.footerElement)) {\n this.footerElement = this.element.getElementsByClassName('e-gridfooter')[0];\n }\n return this.footerElement;\n };\n /**\n * Gets the footer table element of the Grid.\n * @return {Element}\n */\n Grid.prototype.getFooterContentTable = function () {\n if (isNullOrUndefined(this.footerElement)) {\n this.footerElement = this.element.getElementsByClassName('e-gridfooter')[0];\n }\n return this.footerElement.firstChild.firstChild;\n };\n /**\n * Gets the pager of the Grid.\n * @return {Element}\n */\n Grid.prototype.getPager = function () {\n return this.gridPager; //get element from pager\n };\n /**\n * Sets the pager of the Grid to replace the old pager.\n * @param {Element} element - Specifies the Grid pager.\n * @return {void}\n */\n Grid.prototype.setGridPager = function (element) {\n this.gridPager = element;\n };\n /**\n * Gets a row by index.\n * @param {number} index - Specifies the row index.\n * @return {Element}\n */\n Grid.prototype.getRowByIndex = function (index) {\n return this.contentModule.getRowByIndex(index);\n };\n /**\n * Gets a movable tables row by index.\n * @param {number} index - Specifies the row index.\n * @return {Element}\n */\n Grid.prototype.getMovableRowByIndex = function (index) {\n return this.contentModule.getMovableRowByIndex(index);\n };\n /**\n * Gets all the data rows of the Grid.\n * @return {Element[]}\n */\n Grid.prototype.getRows = function () {\n return this.contentModule.getRowElements();\n };\n /**\n * Get a row information based on cell\n * @param {Element}\n * @return RowInfo\n */\n Grid.prototype.getRowInfo = function (target) {\n var ele = target;\n var args = { target: target };\n if (!isNullOrUndefined(target) && isNullOrUndefined(parentsUntil(ele, 'e-detailrowcollapse')\n && isNullOrUndefined(parentsUntil(ele, 'e-recordplusexpand'))) && !this.isEdit) {\n var cell = closest(ele, '.e-rowcell');\n if (!cell) {\n return args;\n }\n var cellIndex = parseInt(cell.getAttribute('aria-colindex'), 10);\n if (!isNullOrUndefined(cell) && !isNaN(cellIndex)) {\n var row_1 = closest(cell, '.e-row');\n var rowIndex = parseInt(row_1.getAttribute('aria-rowindex'), 10);\n var frzCols = this.getFrozenColumns();\n var isMovable = frzCols ? cellIndex >= frzCols : false;\n var rows = (isMovable ?\n this.contentModule.getMovableRows() : this.contentModule.getRows());\n var rowsObject = rows.filter(function (r) { return r.uid === row_1.getAttribute('data-uid'); });\n var rowData = rowsObject[0].data;\n var column = rowsObject[0].cells[isMovable ? cellIndex - frzCols : cellIndex].column;\n args = { cell: cell, cellIndex: cellIndex, row: row_1, rowIndex: rowIndex, rowData: rowData, column: column, target: target };\n }\n }\n return args;\n };\n /**\n * Gets the Grid's movable content rows from frozen grid.\n * @return {Element[]}\n */\n Grid.prototype.getMovableRows = function () {\n return this.contentModule.getMovableRowElements();\n };\n /**\n * Gets all the Grid's data rows.\n * @return {Element[]}\n */\n Grid.prototype.getDataRows = function () {\n var rows = [].slice.call(this.getContentTable().querySelector('tbody').children);\n if (this.frozenRows) {\n var freezeRows = [].slice.call(this.getHeaderTable().querySelector('tbody').children);\n rows = this.addMovableRows(freezeRows, rows);\n }\n var dataRows = this.generateDataRows(rows);\n return dataRows;\n };\n /**\n * @hidden\n */\n Grid.prototype.addMovableRows = function (fRows, mrows) {\n for (var i = 0, len = mrows.length; i < len; i++) {\n fRows.push(mrows[i]);\n }\n return fRows;\n };\n Grid.prototype.generateDataRows = function (rows) {\n var dRows = [];\n for (var i = 0, len = rows.length; i < len; i++) {\n if (rows[i].classList.contains('e-row') && !rows[i].classList.contains('e-hiddenrow')) {\n dRows.push(rows[i]);\n }\n }\n return dRows;\n };\n /**\n * Gets all the Grid's movable table data rows.\n * @return {Element[]}\n */\n Grid.prototype.getMovableDataRows = function () {\n var rows = [].slice.call(this.getContent().querySelector('.e-movablecontent').querySelector('tbody').children);\n if (this.frozenRows) {\n var freezeRows = [].slice.call(this.getHeaderContent().querySelector('.e-movableheader').querySelector('tbody').children);\n rows = this.addMovableRows(freezeRows, rows);\n }\n var dataRows = this.generateDataRows(rows);\n return dataRows;\n };\n /**\n * Updates particular cell value based on the given primary key value.\n * > Primary key column must be specified using `columns.isPrimaryKey` property.\n * @param {string| number} key - Specifies the PrimaryKey value of dataSource.\n * @param {string } field - Specifies the field name which you want to update.\n * @param {string | number | boolean | Date} value - To update new value for the particular cell.\n */\n Grid.prototype.setCellValue = function (key, field, value) {\n var cells = 'cells';\n var rowData = 'data';\n var rowIdx = 'index';\n var rowuID = 'uid';\n var fieldIdx;\n var col;\n var tr;\n var pkName = this.getPrimaryKeyFieldNames()[0];\n var cell = new CellRenderer(this, this.serviceLocator);\n var selectedRow = {};\n var rowObjects = this.contentModule.getRows();\n fieldIdx = this.getColumnIndexByField(field);\n col = this.getColumnByField(field);\n selectedRow = rowObjects.filter(function (r) {\n return getValue(pkName, r.data) === key;\n })[0];\n tr = !isNullOrUndefined(selectedRow) ? this.element.querySelector('[data-uid=' + selectedRow[rowuID] + ']') : null;\n if (!isNullOrUndefined(tr)) {\n setValue(field, value, selectedRow[rowData]);\n var td = tr.childNodes[fieldIdx];\n if (!isNullOrUndefined(td)) {\n cell.refreshTD(td, selectedRow[cells][fieldIdx], selectedRow[rowData]);\n this.trigger(events.queryCellInfo, {\n cell: td, column: col, data: selectedRow[rowData]\n });\n }\n }\n else {\n return;\n }\n };\n /**\n * Updates and refresh the particular row values based on the given primary key value.\n * > Primary key column must be specified using `columns.isPrimaryKey` property.\n * @param {string| number} key - Specifies the PrimaryKey value of dataSource.\n * @param {Object} rowData - To update new data for the particular row.\n */\n Grid.prototype.setRowData = function (key, rowData) {\n var rwdata = 'data';\n var rowuID = 'uid';\n var rowObjects = this.contentModule.getRows();\n var selectedRow;\n var pkName = this.getPrimaryKeyFieldNames()[0];\n var rowRenderer = new RowRenderer(this.serviceLocator, null, this);\n selectedRow = rowObjects.filter(function (r) {\n return getValue(pkName, r.data) === key;\n })[0];\n if (!isNullOrUndefined(selectedRow) && this.element.querySelectorAll('[data-uid=' + selectedRow[rowuID] + ']').length) {\n selectedRow.changes = rowData;\n refreshForeignData(selectedRow, this.getForeignKeyColumns(), selectedRow.changes);\n rowRenderer.refresh(selectedRow, this.getColumns(), true);\n }\n else {\n return;\n }\n };\n /**\n * Gets a cell by row and column index.\n * @param {number} rowIndex - Specifies the row index.\n * @param {number} columnIndex - Specifies the column index.\n * @return {Element}\n */\n Grid.prototype.getCellFromIndex = function (rowIndex, columnIndex) {\n return this.getDataRows()[rowIndex].querySelectorAll('.e-rowcell')[columnIndex];\n };\n /**\n * Gets a movable table cell by row and column index.\n * @param {number} rowIndex - Specifies the row index.\n * @param {number} columnIndex - Specifies the column index.\n * @return {Element}\n */\n Grid.prototype.getMovableCellFromIndex = function (rowIndex, columnIndex) {\n return this.getMovableDataRows()[rowIndex].querySelectorAll('.e-rowcell')[columnIndex - this.getFrozenColumns()];\n };\n /**\n * Gets a column header by column index.\n * @param {number} index - Specifies the column index.\n * @return {Element}\n */\n Grid.prototype.getColumnHeaderByIndex = function (index) {\n return this.getHeaderTable().querySelectorAll('.e-headercell')[index];\n };\n /**\n * @hidden\n */\n Grid.prototype.getRowObjectFromUID = function (uid) {\n var rows = this.contentModule.getRows();\n var row = this.rowObject(rows, uid);\n if (this.getFrozenColumns()) {\n if (!row) {\n row = this.rowObject(this.contentModule.getMovableRows(), uid);\n return row;\n }\n }\n return row;\n };\n Grid.prototype.rowObject = function (rows, uid) {\n for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {\n var row = rows_1[_i];\n if (row.uid === uid) {\n return row;\n }\n }\n return null;\n };\n /**\n * @hidden\n */\n Grid.prototype.getRowsObject = function () {\n return this.contentModule.getRows();\n };\n /**\n * @hidden\n */\n Grid.prototype.getMovableRowsObject = function () {\n return this.contentModule.getMovableRows();\n };\n /**\n * Gets a column header by column name.\n * @param {string} field - Specifies the column name.\n * @return {Element}\n */\n Grid.prototype.getColumnHeaderByField = function (field) {\n return this.getColumnHeaderByUid(this.getColumnByField(field).uid);\n };\n /**\n * Gets a column header by UID.\n * @param {string} field - Specifies the column uid.\n * @return {Element}\n */\n Grid.prototype.getColumnHeaderByUid = function (uid) {\n return this.getHeaderContent().querySelector('[e-mappinguid=' + uid + ']').parentElement;\n };\n /**\n * @hidden\n */\n Grid.prototype.getColumnByIndex = function (index) {\n var column;\n this.getColumns().some(function (col, i) {\n column = col;\n return i === index;\n });\n return column;\n };\n /**\n * Gets a Column by column name.\n * @param {string} field - Specifies the column name.\n * @return {Column}\n */\n Grid.prototype.getColumnByField = function (field) {\n return iterateArrayOrObject(this.getColumns(), function (item, index) {\n if (item.field === field) {\n return item;\n }\n return undefined;\n })[0];\n };\n /**\n * Gets a column index by column name.\n * @param {string} field - Specifies the column name.\n * @return {number}\n */\n Grid.prototype.getColumnIndexByField = function (field) {\n var cols = this.getColumns();\n for (var i = 0; i < cols.length; i++) {\n if (cols[i].field === field) {\n return i;\n }\n }\n return -1;\n };\n /**\n * Gets a column by UID.\n * @param {string} uid - Specifies the column UID.\n * @return {Column}\n */\n Grid.prototype.getColumnByUid = function (uid) {\n return iterateArrayOrObject(this.getColumns(), function (item, index) {\n if (item.uid === uid) {\n return item;\n }\n return undefined;\n })[0];\n };\n /**\n * Gets a column index by UID.\n * @param {string} uid - Specifies the column UID.\n * @return {number}\n */\n Grid.prototype.getColumnIndexByUid = function (uid) {\n var index = iterateArrayOrObject(this.getColumns(), function (item, index) {\n if (item.uid === uid) {\n return index;\n }\n return undefined;\n })[0];\n return !isNullOrUndefined(index) ? index : -1;\n };\n /**\n * Gets UID by column name.\n * @param {string} field - Specifies the column name.\n * @return {string}\n */\n Grid.prototype.getUidByColumnField = function (field) {\n return iterateArrayOrObject(this.getColumns(), function (item, index) {\n if (item.field === field) {\n return item.uid;\n }\n return undefined;\n })[0];\n };\n /**\n * Gets TH index by column uid value.\n * @private\n * @param {string} uid - Specifies the column uid.\n * @return {number}\n */\n Grid.prototype.getNormalizedColumnIndex = function (uid) {\n var index = this.getColumnIndexByUid(uid);\n if (this.allowGrouping) {\n index += this.groupSettings.columns.length;\n }\n if (this.isDetail()) {\n index++;\n }\n /**\n * TODO: index normalization based on the stacked header, grouping and detailTemplate\n * and frozen should be handled here\n */\n return index;\n };\n /**\n * Gets the collection of column fields.\n * @return {string[]}\n */\n Grid.prototype.getColumnFieldNames = function () {\n var columnNames = [];\n var column;\n for (var i = 0, len = this.getColumns().length; i < len; i++) {\n column = this.getColumns()[i];\n if (column.visible) {\n columnNames.push(column.field);\n }\n }\n return columnNames;\n };\n /**\n * Gets a compiled row template.\n * @return {Function}\n * @private\n */\n Grid.prototype.getRowTemplate = function () {\n return this.rowTemplateFn;\n };\n /**\n * Gets a compiled detail row template.\n * @private\n * @return {Function}\n */\n Grid.prototype.getDetailTemplate = function () {\n return this.detailTemplateFn;\n };\n /**\n * Get the names of the primary key columns of the Grid.\n * @return {string[]}\n */\n Grid.prototype.getPrimaryKeyFieldNames = function () {\n var keys = [];\n this.columnModel.forEach(function (column) {\n if (column.isPrimaryKey) {\n keys.push(column.field);\n }\n });\n return keys;\n };\n /**\n * Refreshes the Grid header and content.\n */\n Grid.prototype.refresh = function () {\n this.headerModule.refreshUI();\n this.updateStackedFilter();\n this.renderModule.refresh();\n };\n /**\n * Refreshes the Grid header.\n */\n Grid.prototype.refreshHeader = function () {\n this.headerModule.refreshUI();\n };\n /**\n * Gets the collection of selected rows.\n * @return {Element[]}\n */\n Grid.prototype.getSelectedRows = function () {\n return this.selectionModule ? this.selectionModule.selectedRecords : [];\n };\n /**\n * Gets the collection of selected row indexes.\n * @return {number[]}\n */\n Grid.prototype.getSelectedRowIndexes = function () {\n return this.selectionModule ? this.selectionModule.selectedRowIndexes : [];\n };\n /**\n * Gets the collection of selected row and cell indexes.\n * @return {number[]}\n */\n Grid.prototype.getSelectedRowCellIndexes = function () {\n return this.selectionModule.selectedRowCellIndexes;\n };\n /**\n * Gets the collection of selected records.\n * @return {Object[]}\n */\n Grid.prototype.getSelectedRecords = function () {\n return this.selectionModule.getSelectedRecords();\n };\n /**\n * Gets the data module.\n * @return {Data}\n */\n Grid.prototype.getDataModule = function () {\n return this.renderModule.data;\n };\n /**\n * Shows a column by its column name.\n * @param {string|string[]} keys - Defines a single or collection of column names.\n * @param {string} showBy - Defines the column key either as field name or header text.\n * @return {void}\n */\n Grid.prototype.showColumns = function (keys, showBy) {\n showBy = showBy ? showBy : 'headerText';\n this.showHider.show(keys, showBy);\n };\n /**\n * Hides a column by column name.\n * @param {string|string[]} keys - Defines a single or collection of column names.\n * @param {string} hideBy - Defines the column key either as field name or header text.\n * @return {void}\n */\n Grid.prototype.hideColumns = function (keys, hideBy) {\n hideBy = hideBy ? hideBy : 'headerText';\n this.showHider.hide(keys, hideBy);\n };\n /**\n * @hidden\n */\n Grid.prototype.getFrozenColumns = function () {\n return this.frozenColumns + this.getFrozenCount(this.columns, 0);\n };\n /**\n * @hidden\n */\n Grid.prototype.getVisibleFrozenColumns = function () {\n return this.getVisibleFrozenColumnsCount() + this.getVisibleFrozenCount(this.columns, 0);\n };\n Grid.prototype.getVisibleFrozenColumnsCount = function () {\n var visibleFrozenColumns = 0;\n var col = this.columns;\n for (var i = 0; i < this.frozenColumns; i++) {\n if (col[i].visible) {\n visibleFrozenColumns++;\n }\n }\n return visibleFrozenColumns;\n };\n Grid.prototype.getVisibleFrozenCount = function (cols, cnt) {\n for (var i = 0, len = cols.length; i < len; i++) {\n if (cols[i].columns) {\n cnt = this.getVisibleFrozenCount(cols[i].columns, cnt);\n }\n else {\n if (cols[i].isFrozen && cols[i].visible) {\n cnt++;\n }\n }\n }\n return cnt;\n };\n Grid.prototype.getFrozenCount = function (cols, cnt) {\n for (var i = 0, len = cols.length; i < len; i++) {\n if (cols[i].columns) {\n cnt = this.getFrozenCount(cols[i].columns, cnt);\n }\n else {\n if (cols[i].isFrozen) {\n cnt++;\n }\n }\n }\n return cnt;\n };\n /**\n * Navigates to the specified target page.\n * @param {number} pageNo - Defines the page number to navigate.\n * @return {void}\n */\n Grid.prototype.goToPage = function (pageNo) {\n this.pagerModule.goToPage(pageNo);\n };\n /**\n * Defines the text of external message.\n * @param {string} message - Defines the message to update.\n * @return {void}\n */\n Grid.prototype.updateExternalMessage = function (message) {\n this.pagerModule.updateExternalMessage(message);\n };\n /**\n * Sorts a column with the given options.\n * @param {string} columnName - Defines the column name to be sorted.\n * @param {SortDirection} direction - Defines the direction of sorting field.\n * @param {boolean} isMultiSort - Specifies whether the previous sorted columns are to be maintained.\n * @return {void}\n */\n Grid.prototype.sortColumn = function (columnName, direction, isMultiSort) {\n this.sortModule.sortColumn(columnName, direction, isMultiSort);\n };\n /**\n * Clears all the sorted columns of the Grid.\n * @return {void}\n */\n Grid.prototype.clearSorting = function () {\n this.sortModule.clearSorting();\n };\n /**\n * Remove sorted column by field name.\n * @param {string} field - Defines the column field name to remove sort.\n * @return {void}\n * @hidden\n */\n Grid.prototype.removeSortColumn = function (field) {\n this.sortModule.removeSortColumn(field);\n };\n /**\n * Filters grid row by column name with the given options.\n * @param {string} fieldName - Defines the field name of the column.\n * @param {string} filterOperator - Defines the operator to filter records.\n * @param {string | number | Date | boolean} filterValue - Defines the value used to filter records.\n * @param {string} predicate - Defines the relationship between one filter query and another by using AND or OR predicate.\n * @param {boolean} matchCase - If match case is set to true, the grid filters the records with exact match. if false, it filters case\n * insensitive records (uppercase and lowercase letters treated the same).\n * @param {boolean} ignoreAccent - If ignoreAccent set to true,\n * then filter ignores the diacritic characters or accents while filtering.\n * @param {string} actualFilterValue - Defines the actual filter value for the filter column.\n * @param {string} actualOperator - Defines the actual filter operator for the filter column.\n * @return {void}\n */\n Grid.prototype.filterByColumn = function (fieldName, filterOperator, filterValue, predicate, matchCase, ignoreAccent, actualFilterValue, actualOperator) {\n this.filterModule.filterByColumn(fieldName, filterOperator, filterValue, predicate, matchCase, ignoreAccent, actualFilterValue, actualOperator);\n };\n /**\n * Clears all the filtered rows of the Grid.\n * @return {void}\n */\n Grid.prototype.clearFiltering = function () {\n this.filterModule.clearFiltering();\n };\n /**\n * Removes filtered column by field name.\n * @param {string} field - Defines column field name to remove filter.\n * @param {boolean} isClearFilterBar - Specifies whether the filter bar value needs to be cleared.\n * @return {void}\n * @hidden\n */\n Grid.prototype.removeFilteredColsByField = function (field, isClearFilterBar) {\n this.filterModule.removeFilteredColsByField(field, isClearFilterBar);\n };\n /**\n * Selects a row by given index.\n * @param {number} index - Defines the row index.\n * @param {boolean} isToggle - If set to true, then it toggles the selection.\n * @return {void}\n */\n Grid.prototype.selectRow = function (index, isToggle) {\n this.selectionModule.selectRow(index, isToggle);\n };\n /**\n * Selects a collection of rows by indexes.\n * @param {number[]} rowIndexes - Specifies the row indexes.\n * @return {void}\n */\n Grid.prototype.selectRows = function (rowIndexes) {\n this.selectionModule.selectRows(rowIndexes);\n };\n /**\n * Deselects the current selected rows and cells.\n * @return {void}\n */\n Grid.prototype.clearSelection = function () {\n this.selectionModule.clearSelection();\n };\n /**\n * Selects a cell by the given index.\n * @param {IIndex} cellIndex - Defines the row and column indexes.\n * @param {boolean} isToggle - If set to true, then it toggles the selection.\n * @return {void}\n */\n Grid.prototype.selectCell = function (cellIndex, isToggle) {\n this.selectionModule.selectCell(cellIndex, isToggle);\n };\n /**\n * Searches Grid records using the given key.\n * You can customize the default search option by using the\n * [`searchSettings`](./api-searchSettings.html).\n * @param {string} searchString - Defines the key.\n * @return {void}\n */\n Grid.prototype.search = function (searchString) {\n this.searchModule.search(searchString);\n };\n /**\n * By default, prints all the pages of the Grid and hides the pager.\n * > You can customize print options using the\n * [`printMode`](./api-grid.html#printmode-string).\n * @return {void}\n */\n Grid.prototype.print = function () {\n this.printModule.print();\n };\n /**\n * Delete a record with Given options. If fieldname and data is not given then grid will delete the selected record.\n * > `editSettings.allowDeleting` should be true.\n * @param {string} fieldname - Defines the primary key field, 'Name of the column'.\n * @param {Object} data - Defines the JSON data of the record to be deleted.\n */\n Grid.prototype.deleteRecord = function (fieldname, data) {\n this.editModule.deleteRecord(fieldname, data);\n };\n /**\n * To edit any particular row by TR element.\n * @param {HTMLTableRowElement} tr - Defines the table row to be edited.\n */\n Grid.prototype.startEdit = function () {\n this.editModule.startEdit();\n };\n /**\n * If Grid is in editable state, you can save a record by invoking endEdit.\n */\n Grid.prototype.endEdit = function () {\n this.editModule.endEdit();\n };\n /**\n * Cancels edited state.\n */\n Grid.prototype.closeEdit = function () {\n this.editModule.closeEdit();\n };\n /**\n * Adds a new record to the Grid. Without passing parameters, it adds empty rows.\n * > `editSettings.allowEditing` should be true.\n * @param {Object} data - Defines the new add record data.\n * @param {number} index - Defines the row index to be added\n */\n Grid.prototype.addRecord = function (data, index) {\n this.editModule.addRecord(data, index);\n };\n /**\n * Delete any visible row by TR element.\n * @param {HTMLTableRowElement} tr - Defines the table row element.\n */\n Grid.prototype.deleteRow = function (tr) {\n this.editModule.deleteRow(tr);\n };\n /**\n * Copy the selected rows or cells data into clipboard.\n * @param {boolean} withHeader - Specifies whether the column header text needs to be copied along with rows or cells.\n */\n Grid.prototype.copy = function (withHeader) {\n this.clipboardModule.copy(withHeader);\n };\n /**\n * @hidden\n */\n Grid.prototype.recalcIndentWidth = function () {\n if (!this.getHeaderTable().querySelector('.e-emptycell')) {\n return;\n }\n if ((!this.groupSettings.columns.length && !this.isDetail()) ||\n this.getHeaderTable().querySelector('.e-emptycell').getAttribute('indentRefreshed') ||\n !this.getContentTable()) {\n return;\n }\n var indentWidth = this.getHeaderTable().querySelector('.e-emptycell').parentElement.offsetWidth;\n var headerCol = [].slice.call(this.getHeaderTable().querySelector('colgroup').childNodes);\n var contentCol = [].slice.call(this.getContentTable().querySelector('colgroup').childNodes);\n var perPixel = indentWidth / 30;\n var i = 0;\n if (perPixel >= 1) {\n indentWidth = (30 / perPixel);\n }\n if (this.enableColumnVirtualization) {\n indentWidth = 30;\n }\n while (i < this.groupSettings.columns.length) {\n headerCol[i].style.width = indentWidth + 'px';\n contentCol[i].style.width = indentWidth + 'px';\n this.notify(events.columnWidthChanged, { index: i, width: indentWidth });\n i++;\n }\n if (this.isDetail()) {\n headerCol[i].style.width = indentWidth + 'px';\n contentCol[i].style.width = indentWidth + 'px';\n this.notify(events.columnWidthChanged, { index: i, width: indentWidth });\n }\n this.getHeaderTable().querySelector('.e-emptycell').setAttribute('indentRefreshed', 'true');\n };\n /**\n * Changes the Grid column positions by field names.\n * @param {string} fromFName - Defines the origin field name.\n * @param {string} toFName - Defines the destination field name.\n * @return {void}\n */\n Grid.prototype.reorderColumns = function (fromFName, toFName) {\n this.reorderModule.reorderColumns(fromFName, toFName);\n };\n /**\n * Changes the column width to automatically fit its content to ensure that the width shows the content without wrapping/hiding.\n * > * This method ignores the hidden columns.\n * > * Uses the `autoFitColumns` method in the `dataBound` event to resize at initial rendering.\n * @param {string |string[]} fieldNames - Defines the column names.\n * @return {void}\n *\n *\n * ```typescript\n *
    \n * \n * ```\n *\n */\n Grid.prototype.autoFitColumns = function (fieldNames) {\n this.resizeModule.autoFitColumns(fieldNames);\n };\n /**\n * @hidden\n */\n Grid.prototype.createColumnchooser = function (x, y, target) {\n this.columnChooserModule.renderColumnChooser(x, y, target);\n };\n Grid.prototype.initializeServices = function () {\n this.serviceLocator.register('widthService', this.widthService = new ColumnWidthService(this));\n this.serviceLocator.register('cellRendererFactory', new CellRendererFactory);\n this.serviceLocator.register('rendererFactory', new RendererFactory);\n this.serviceLocator.register('localization', this.localeObj = new L10n(this.getModuleName(), this.defaultLocale, this.locale));\n this.serviceLocator.register('valueFormatter', this.valueFormatterService = new ValueFormatter(this.locale));\n this.serviceLocator.register('showHideService', this.showHider = new ShowHide(this));\n this.serviceLocator.register('ariaService', this.ariaService = new AriaService());\n this.serviceLocator.register('focus', this.focusModule = new FocusStrategy(this));\n };\n Grid.prototype.processModel = function () {\n var _this = this;\n var gCols = this.groupSettings.columns;\n var sCols = this.sortSettings.columns;\n var flag;\n var j;\n if (this.allowGrouping) {\n var _loop_1 = function (i, len) {\n j = 0;\n for (var sLen = sCols.length; j < sLen; j++) {\n if (sCols[j].field === gCols[i]) {\n flag = true;\n break;\n }\n }\n if (!flag) {\n sCols.push({ field: gCols[i], direction: 'Ascending' });\n }\n else {\n if (this_1.allowSorting) {\n this_1.sortedColumns.push(sCols[j].field);\n }\n else {\n sCols[j].direction = 'Ascending';\n }\n }\n if (!this_1.groupSettings.showGroupedColumn) {\n var column = this_1.enableColumnVirtualization ?\n this_1.columns.filter(function (c) { return c.field === gCols[i]; })[0] : this_1.getColumnByField(gCols[i]);\n column.visible = false;\n }\n };\n var this_1 = this;\n for (var i = 0, len = gCols.length; i < len; i++) {\n _loop_1(i, len);\n }\n }\n if (!gCols.length) {\n sCols.forEach(function (col) {\n _this.sortedColumns.push(col.field);\n });\n }\n this.rowTemplateFn = templateCompiler(this.rowTemplate);\n this.detailTemplateFn = templateCompiler(this.detailTemplate);\n if (!isNullOrUndefined(this.parentDetails)) {\n var value = isNullOrUndefined(this.parentDetails.parentKeyFieldValue) ? 'undefined' :\n this.parentDetails.parentKeyFieldValue;\n this.query.where(this.queryString, 'equal', value, true);\n }\n this.initForeignColumn();\n };\n Grid.prototype.initForeignColumn = function () {\n if (this.isForeignKeyEnabled(this.getColumns())) {\n this.notify(events.initForeignKeyColumn, this.getForeignKeyColumns());\n }\n };\n Grid.prototype.gridRender = function () {\n this.updateRTL();\n if (this.enableHover) {\n this.element.classList.add('e-gridhover');\n }\n if (Browser.isDevice) {\n this.element.classList.add('e-device');\n }\n if (this.rowHeight) {\n this.element.classList.add('e-grid-min-height');\n }\n classList(this.element, ['e-responsive', 'e-default'], []);\n var rendererFactory = this.serviceLocator.getService('rendererFactory');\n this.headerModule = rendererFactory.getRenderer(RenderType.Header);\n this.contentModule = rendererFactory.getRenderer(RenderType.Content);\n this.printModule = new Print(this, this.scrollModule);\n this.clipboardModule = new Clipboard(this);\n this.renderModule.render();\n this.eventInitializer();\n this.createGridPopUpElement();\n this.widthService.setWidthToColumns();\n this.updateGridLines();\n this.applyTextWrap();\n this.createTooltip(); //for clip mode ellipsis\n };\n Grid.prototype.dataReady = function () {\n this.scrollModule.setWidth();\n this.scrollModule.setHeight();\n if (this.height !== 'auto') {\n this.scrollModule.setPadding();\n }\n };\n Grid.prototype.updateRTL = function () {\n if (this.enableRtl) {\n this.element.classList.add('e-rtl');\n }\n else {\n this.element.classList.remove('e-rtl');\n }\n };\n Grid.prototype.createGridPopUpElement = function () {\n var popup = createElement('div', { className: 'e-gridpopup', styles: 'display:none;' });\n var content = createElement('div', { className: 'e-content', attrs: { tabIndex: '-1' } });\n append([content, createElement('div', { className: 'e-uptail e-tail' })], popup);\n content.appendChild(createElement('span'));\n append([content, createElement('div', { className: 'e-downtail e-tail' })], popup);\n this.element.appendChild(popup);\n };\n Grid.prototype.updateGridLines = function () {\n classList(this.element, [], ['e-verticallines', 'e-horizontallines', 'e-hidelines', 'e-bothlines']);\n switch (this.gridLines) {\n case 'Horizontal':\n this.element.classList.add('e-horizontallines');\n break;\n case 'Vertical':\n this.element.classList.add('e-verticallines');\n break;\n case 'None':\n this.element.classList.add('e-hidelines');\n break;\n case 'Both':\n this.element.classList.add('e-bothlines');\n break;\n }\n this.updateResizeLines();\n };\n Grid.prototype.updateResizeLines = function () {\n if (this.allowResizing &&\n !(this.gridLines === 'Vertical' || this.gridLines === 'Both')) {\n this.element.classList.add('e-resize-lines');\n }\n else {\n this.element.classList.remove('e-resize-lines');\n }\n };\n /**\n * The function is used to apply text wrap\n * @return {void}\n * @hidden\n */\n Grid.prototype.applyTextWrap = function () {\n if (this.allowTextWrap) {\n var headerRows = [].slice.call(this.element.querySelectorAll('.e-columnheader'));\n switch (this.textWrapSettings.wrapMode) {\n case 'Header':\n wrap(this.element, false);\n wrap(this.getContent(), false);\n wrap(headerRows, true);\n break;\n case 'Content':\n wrap(this.getContent(), true);\n wrap(this.element, false);\n wrap(headerRows, false);\n break;\n default:\n wrap(this.element, true);\n wrap(this.getContent(), false);\n wrap(headerRows, false);\n }\n }\n };\n /**\n * The function is used to remove text wrap\n * @return {void}\n * @hidden\n */\n Grid.prototype.removeTextWrap = function () {\n wrap(this.element, false);\n var headerRows = [].slice.call(this.element.querySelectorAll('.e-columnheader'));\n wrap(headerRows, false);\n wrap(this.getContent(), false);\n };\n /**\n * The function is used to add Tooltip to the grid cell that has ellipsiswithtooltip clip mode.\n * @return {void}\n * @hidden\n */\n Grid.prototype.createTooltip = function () {\n this.toolTipObj = new Tooltip({ opensOn: 'custom', content: '' }, this.element);\n };\n Grid.prototype.getTooltipStatus = function (element) {\n var width;\n var headerTable = this.getHeaderTable();\n var contentTable = this.getContentTable();\n var headerDivTag = 'e-gridheader';\n var contentDivTag = 'e-gridcontent';\n var htable = this.createTable(headerTable, headerDivTag, 'header');\n var ctable = this.createTable(headerTable, headerDivTag, 'content');\n var td = element;\n var table = headerTable.contains(element) ? htable : ctable;\n var ele = headerTable.contains(element) ? 'th' : 'tr';\n table.querySelector(ele).className = element.className;\n table.querySelector(ele).innerHTML = element.innerHTML;\n width = table.querySelector(ele).getBoundingClientRect().width;\n document.body.removeChild(htable);\n document.body.removeChild(ctable);\n if (width > element.getBoundingClientRect().width) {\n return true;\n }\n return false;\n };\n Grid.prototype.mouseMoveHandler = function (e) {\n if (this.isEllipsisTooltip()) {\n var element = parentsUntil(e.target, 'e-ellipsistooltip');\n if (element) {\n if (element.getAttribute('aria-describedby')) {\n return;\n }\n if (this.getTooltipStatus(element)) {\n if (element.getElementsByClassName('e-headertext').length) {\n this.toolTipObj.content = element.getElementsByClassName('e-headertext')[0].innerText;\n }\n else {\n this.toolTipObj.content = element.innerText;\n }\n this.toolTipObj.open(element);\n }\n else {\n this.toolTipObj.close();\n }\n }\n else {\n this.toolTipObj.close();\n }\n }\n };\n Grid.prototype.isEllipsisTooltip = function () {\n var cols = this.getColumns();\n for (var i = 0; i < cols.length; i++) {\n if (cols[i].clipMode === 'EllipsisWithTooltip') {\n return true;\n }\n }\n return false;\n };\n Grid.prototype.scrollHandler = function () {\n if (this.isEllipsisTooltip()) {\n this.toolTipObj.close();\n }\n };\n /**\n * To create table for ellipsiswithtooltip\n * @hidden\n */\n Grid.prototype.createTable = function (table, tag, type) {\n var myTableDiv = createElement('div');\n myTableDiv.className = this.element.className;\n myTableDiv.style.cssText = 'display: inline-block;visibility:hidden;position:absolute';\n var mySubDiv = createElement('div');\n mySubDiv.className = tag;\n var myTable = createElement('table');\n myTable.className = table.className;\n myTable.style.cssText = 'table-layout: auto;width: auto';\n var ele = (type === 'header') ? 'th' : 'td';\n var myTr = createElement('tr');\n var mytd = createElement(ele);\n myTr.appendChild(mytd);\n myTable.appendChild(myTr);\n mySubDiv.appendChild(myTable);\n myTableDiv.appendChild(mySubDiv);\n document.body.appendChild(myTableDiv);\n return myTableDiv;\n };\n /**\n * Binding events to the element while component creation.\n * @hidden\n */\n Grid.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'click', this.mouseClickHandler, this);\n EventHandler.add(this.element, 'touchend', this.mouseClickHandler, this);\n EventHandler.add(this.element, 'focusout', this.focusOutHandler, this);\n EventHandler.add(this.getContent(), 'dblclick', this.dblClickHandler, this);\n if (this.allowKeyboard) {\n this.element.tabIndex = this.element.tabIndex === -1 ? 0 : this.element.tabIndex;\n }\n this.keyboardModule = new KeyboardEvents(this.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n EventHandler.add(this.getContent().firstElementChild, 'scroll', this.scrollHandler, this);\n EventHandler.add(this.element, 'mousemove', this.mouseMoveHandler, this);\n };\n /**\n * Unbinding events from the element while component destroy.\n * @hidden\n */\n Grid.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, 'click', this.mouseClickHandler);\n EventHandler.remove(this.element, 'touchend', this.mouseClickHandler);\n EventHandler.remove(this.element, 'focusout', this.focusOutHandler);\n EventHandler.remove(this.getContent().firstElementChild, 'scroll', this.scrollHandler);\n EventHandler.remove(this.element, 'mousemove', this.mouseMoveHandler);\n };\n /**\n * @hidden\n */\n Grid.prototype.addListener = function () {\n if (this.isDestroyed) {\n return;\n }\n this.on(events.dataReady, this.dataReady, this);\n this.on(events.contentReady, this.recalcIndentWidth, this);\n this.on(events.headerRefreshed, this.recalcIndentWidth, this);\n this.dataBoundFunction = this.refreshMediaCol.bind(this);\n this.addEventListener(events.dataBound, this.dataBoundFunction);\n };\n /**\n * @hidden\n */\n Grid.prototype.removeListener = function () {\n if (this.isDestroyed) {\n return;\n }\n this.off(events.dataReady, this.dataReady);\n this.off(events.contentReady, this.recalcIndentWidth);\n this.off(events.headerRefreshed, this.recalcIndentWidth);\n this.removeEventListener(events.dataBound, this.dataBoundFunction);\n };\n /**\n * Get current visible data of grid.\n * @return {Object[]}\n * @hidden\n */\n Grid.prototype.getCurrentViewRecords = function () {\n return (this.allowGrouping && this.groupSettings.columns.length && this.currentViewData.length) ?\n this.currentViewData.records : this.currentViewData;\n };\n Grid.prototype.mouseClickHandler = function (e) {\n if (this.isChildGrid(e) || (parentsUntil(e.target, 'e-gridpopup') && e.touches) ||\n this.element.querySelectorAll('.e-cloneproperties').length || this.checkEdit(e)) {\n return;\n }\n if (((!this.allowRowDragAndDrop && (parentsUntil(e.target, 'e-gridcontent') ||\n e.target.tagName === 'TD')) || (!(this.allowGrouping || this.allowReordering) &&\n parentsUntil(e.target, 'e-gridheader'))) && e.touches) {\n return;\n }\n if (parentsUntil(e.target, 'e-gridheader') && this.allowRowDragAndDrop) {\n e.preventDefault();\n }\n this.notify(events.click, e);\n };\n Grid.prototype.checkEdit = function (e) {\n var tr = parentsUntil(e.target, 'e-row');\n var isEdit = this.editSettings.mode !== 'Batch' &&\n this.isEdit && tr && (tr.classList.contains('e-editedrow') || tr.classList.contains('e-addedrow'));\n return !parentsUntil(e.target, 'e-unboundcelldiv') && (isEdit || (parentsUntil(e.target, 'e-rowcell') &&\n parentsUntil(e.target, 'e-rowcell').classList.contains('e-editedbatchcell')));\n };\n Grid.prototype.dblClickHandler = function (e) {\n var grid = parentsUntil(e.target, 'e-grid');\n if (isNullOrUndefined(grid) || grid.id !== this.element.id || closest(e.target, '.e-unboundcelldiv')) {\n return;\n }\n var args = this.getRowInfo(e.target);\n args.target = e.target;\n this.trigger(events.recordDoubleClick, args);\n this.notify(events.dblclick, e);\n };\n Grid.prototype.focusOutHandler = function (e) {\n if (this.isChildGrid(e)) {\n return;\n }\n if (!parentsUntil(e.target, 'e-grid')) {\n this.element.querySelector('.e-gridpopup').style.display = 'None';\n }\n var filterClear = this.element.querySelector('.e-cancel:not(.e-hide)');\n if (filterClear) {\n filterClear.classList.add('e-hide');\n }\n if ((!e.relatedTarget || !parentsUntil(e.relatedTarget, 'e-grid'))\n && !this.keyPress && this.editSettings.mode === 'Batch' && this.isEdit && !Browser.isDevice) {\n this.editModule.saveCell();\n }\n this.keyPress = false;\n };\n Grid.prototype.isChildGrid = function (e) {\n var gridElement = parentsUntil(e.target, 'e-grid');\n if (gridElement && gridElement.id !== this.element.id) {\n return true;\n }\n return false;\n };\n Grid.prototype.mergePersistGridData = function () {\n var data = window.localStorage.getItem(this.getModuleName() + this.element.id);\n if (!(isNullOrUndefined(data) || (data === ''))) {\n var dataObj = JSON.parse(data);\n var keys = Object.keys(dataObj);\n this.isProtectedOnChange = true;\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n if ((typeof this[key] === 'object') && !isNullOrUndefined(this[key])) {\n if (Array.isArray(this[key]) && key === 'columns') {\n this.mergeColumns(dataObj[key], this[key]);\n this[key] = dataObj[key];\n }\n else {\n extend(this[key], dataObj[key]);\n }\n }\n else {\n this[key] = dataObj[key];\n }\n }\n this.isProtectedOnChange = false;\n }\n };\n Grid.prototype.mergeColumns = function (storedColumn, columns) {\n var _this = this;\n storedColumn.forEach(function (col, index, arr) {\n var ind;\n var localCol = _this.getColumnByField(col.field) ||\n columns.some(function (element, i) {\n ind = i;\n return element.headerText === col.headerText;\n }) && columns[ind];\n if (!isNullOrUndefined(localCol)) {\n if (localCol.columns && localCol.columns.length) {\n _this.mergeColumns(col.columns, localCol.columns);\n }\n else {\n arr[index] = extend({}, localCol, col, true);\n }\n }\n });\n };\n Grid.prototype.isDetail = function () {\n return !isNullOrUndefined(this.detailTemplate) || !isNullOrUndefined(this.childGrid);\n };\n Grid.prototype.isCommandColumn = function (columns) {\n var _this = this;\n return columns.some(function (col) {\n if (col.columns) {\n return _this.isCommandColumn(col.columns);\n }\n return !!(col.commands || col.commandsTemplate);\n });\n };\n Grid.prototype.isForeignKeyEnabled = function (columns) {\n var _this = this;\n return columns.some(function (col) {\n if (col.columns) {\n return _this.isForeignKeyEnabled(col.columns);\n }\n return !!(col.dataSource && col.foreignKeyValue);\n });\n };\n Grid.prototype.keyActionHandler = function (e) {\n this.keyPress = true;\n if (this.isChildGrid(e) ||\n (this.isEdit && e.action !== 'escape' && e.action !== 'enter' && e.action !== 'shiftEnter'\n && e.action !== 'tab' && e.action !== 'shiftTab')) {\n return;\n }\n if (this.allowKeyboard) {\n if (e.action === 'ctrlPlusP') {\n e.preventDefault();\n this.print();\n }\n this.notify(events.keyPressed, e);\n }\n };\n /**\n * @hidden\n */\n Grid.prototype.setInjectedModules = function (modules) {\n this.injectedModules = modules;\n };\n Grid.prototype.updateColumnObject = function () {\n prepareColumns(this.columns, this.enableColumnVirtualization);\n this.initForeignColumn();\n this.notify(events.autoCol, {});\n };\n /**\n * Gets the foreign columns from Grid.\n * @return {Column[]}\n */\n Grid.prototype.getForeignKeyColumns = function () {\n return this.getColumns().filter(function (col) {\n return col.isForeignColumn();\n });\n };\n /**\n * @hidden\n */\n Grid.prototype.getRowHeight = function () {\n return this.rowHeight ? this.rowHeight : getRowHeight(this.element);\n };\n /**\n * Refreshes the Grid column changes.\n */\n Grid.prototype.refreshColumns = function () {\n this.isPreventScrollEvent = true;\n this.updateColumnObject();\n this.refresh();\n };\n /**\n * Export Grid data to Excel file(.xlsx).\n * @param {ExcelExportProperties} excelExportProperties - Defines the export properties of the Grid.\n * @param {boolean} isMultipleExport - Define to enable multiple export.\n * @param {workbook} workbook - Defines the Workbook if multiple export is enabled.\n * @param {boolean} isBlob - If 'isBlob' set to true, then it will be returned as blob data.\n * @return {Promise}\n */\n Grid.prototype.excelExport = function (excelExportProperties, isMultipleExport, \n /* tslint:disable-next-line:no-any */\n workbook, isBlob) {\n return this.excelExportModule.Map(this, excelExportProperties, isMultipleExport, workbook, false, isBlob);\n };\n /**\n * Export Grid data to CSV file.\n * @param {ExcelExportProperties} excelExportProperties - Defines the export properties of the Grid.\n * @param {boolean} isMultipleExport - Define to enable multiple export.\n * @param {workbook} workbook - Defines the Workbook if multiple export is enabled.\n * @param {boolean} isBlob - If 'isBlob' set to true, then it will be returned as blob data.\n * @return {Promise}\n *\n */\n Grid.prototype.csvExport = function (excelExportProperties, \n /* tslint:disable-next-line:no-any */\n isMultipleExport, workbook, isBlob) {\n return this.excelExportModule.Map(this, excelExportProperties, isMultipleExport, workbook, true, isBlob);\n };\n /**\n * Export Grid data to PDF document.\n * @param {pdfExportProperties} PdfExportProperties - Defines the export properties of the Grid.\n * @param {isMultipleExport} isMultipleExport - Define to enable multiple export.\n * @param {pdfDoc} pdfDoc - Defined the Pdf Document if multiple export is enabled.\n * @param {boolean} isBlob - If 'isBlob' set to true, then it will be returned as blob data.\n * @return {Promise}\n *\n */\n Grid.prototype.pdfExport = function (pdfExportProperties, \n /* tslint:disable-next-line:no-any */\n isMultipleExport, pdfDoc, isBlob) {\n return this.pdfExportModule.Map(this, pdfExportProperties, isMultipleExport, pdfDoc, isBlob);\n };\n /**\n * Groups a column by column name.\n * @param {string} columnName - Defines the column name to group.\n * @return {void}\n */\n Grid.prototype.groupColumn = function (columnName) {\n this.groupModule.groupColumn(columnName);\n };\n /**\n * Ungroups a column by column name.\n * @param {string} columnName - Defines the column name to ungroup.\n * @return {void}\n */\n Grid.prototype.ungroupColumn = function (columnName) {\n this.groupModule.ungroupColumn(columnName);\n };\n /**\n * @hidden\n */\n Grid.prototype.isContextMenuOpen = function () {\n return this.contextMenuModule && this.contextMenuModule.isOpen;\n };\n /**\n * @hidden\n */\n Grid.prototype.ensureModuleInjected = function (module) {\n return this.getInjectedModules().indexOf(module) >= 0;\n };\n /**\n * Destroys the given template reference.\n * @param {string[]} propertyNames - Defines the collection of template name.\n */\n Grid.prototype.destroyTemplate = function (propertyNames) {\n this.clearTemplate(propertyNames);\n };\n __decorate([\n Property([])\n ], Grid.prototype, \"columns\", void 0);\n __decorate([\n Property(true)\n ], Grid.prototype, \"enableAltRow\", void 0);\n __decorate([\n Property(true)\n ], Grid.prototype, \"enableHover\", void 0);\n __decorate([\n Property(true)\n ], Grid.prototype, \"allowKeyboard\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"allowTextWrap\", void 0);\n __decorate([\n Complex({}, TextWrapSettings)\n ], Grid.prototype, \"textWrapSettings\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"allowPaging\", void 0);\n __decorate([\n Complex({}, PageSettings)\n ], Grid.prototype, \"pageSettings\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"enableVirtualization\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"enableColumnVirtualization\", void 0);\n __decorate([\n Complex({}, SearchSettings)\n ], Grid.prototype, \"searchSettings\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"allowSorting\", void 0);\n __decorate([\n Property(true)\n ], Grid.prototype, \"allowMultiSorting\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"allowExcelExport\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"allowPdfExport\", void 0);\n __decorate([\n Complex({}, SortSettings)\n ], Grid.prototype, \"sortSettings\", void 0);\n __decorate([\n Property(true)\n ], Grid.prototype, \"allowSelection\", void 0);\n __decorate([\n Property(-1)\n ], Grid.prototype, \"selectedRowIndex\", void 0);\n __decorate([\n Complex({}, SelectionSettings)\n ], Grid.prototype, \"selectionSettings\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"allowFiltering\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"allowReordering\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"allowResizing\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"allowRowDragAndDrop\", void 0);\n __decorate([\n Complex({}, RowDropSettings)\n ], Grid.prototype, \"rowDropSettings\", void 0);\n __decorate([\n Complex({}, FilterSettings)\n ], Grid.prototype, \"filterSettings\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"allowGrouping\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"showColumnMenu\", void 0);\n __decorate([\n Complex({}, GroupSettings)\n ], Grid.prototype, \"groupSettings\", void 0);\n __decorate([\n Complex({}, EditSettings)\n ], Grid.prototype, \"editSettings\", void 0);\n __decorate([\n Collection([], AggregateRow)\n ], Grid.prototype, \"aggregates\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"showColumnChooser\", void 0);\n __decorate([\n Property('auto')\n ], Grid.prototype, \"height\", void 0);\n __decorate([\n Property('auto')\n ], Grid.prototype, \"width\", void 0);\n __decorate([\n Property('Default')\n ], Grid.prototype, \"gridLines\", void 0);\n __decorate([\n Property()\n ], Grid.prototype, \"rowTemplate\", void 0);\n __decorate([\n Property()\n ], Grid.prototype, \"detailTemplate\", void 0);\n __decorate([\n Property()\n ], Grid.prototype, \"childGrid\", void 0);\n __decorate([\n Property()\n ], Grid.prototype, \"queryString\", void 0);\n __decorate([\n Property('AllPages')\n ], Grid.prototype, \"printMode\", void 0);\n __decorate([\n Property([])\n ], Grid.prototype, \"dataSource\", void 0);\n __decorate([\n Property(null)\n ], Grid.prototype, \"rowHeight\", void 0);\n __decorate([\n Property()\n ], Grid.prototype, \"query\", void 0);\n __decorate([\n Property('USD')\n ], Grid.prototype, \"currencyCode\", void 0);\n __decorate([\n Property()\n ], Grid.prototype, \"toolbar\", void 0);\n __decorate([\n Property()\n ], Grid.prototype, \"contextMenuItems\", void 0);\n __decorate([\n Property()\n ], Grid.prototype, \"columnMenuItems\", void 0);\n __decorate([\n Property()\n ], Grid.prototype, \"toolbarTemplate\", void 0);\n __decorate([\n Property()\n ], Grid.prototype, \"pagerTemplate\", void 0);\n __decorate([\n Property(0)\n ], Grid.prototype, \"frozenRows\", void 0);\n __decorate([\n Property(0)\n ], Grid.prototype, \"frozenColumns\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"rowDataBound\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"queryCellInfo\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"headerCellInfo\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"actionComplete\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"actionFailure\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"dataBound\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"recordDoubleClick\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"rowSelecting\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"rowSelected\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"rowDeselecting\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"rowDeselected\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"cellSelecting\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"cellSelected\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"cellDeselecting\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"cellDeselected\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"columnDragStart\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"columnDrag\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"columnDrop\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"printComplete\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beforePrint\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"pdfQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"pdfHeaderQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"excelQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"excelHeaderQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beforeExcelExport\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"excelExportComplete\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beforePdfExport\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"pdfExportComplete\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"detailDataBound\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"rowDragStart\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"rowDrag\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"rowDrop\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"toolbarClick\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beforeOpenColumnChooser\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"batchAdd\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"batchDelete\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beforeBatchAdd\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beforeBatchDelete\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beforeBatchSave\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beginEdit\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"cellEdit\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"cellSave\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"resizeStart\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"resizing\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"resizeStop\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beforeDataBound\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"contextMenuOpen\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"contextMenuClick\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"columnMenuOpen\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"columnMenuClick\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"checkBoxChange\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beforeCopy\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"dataStateChange\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"dataSourceChanged\", void 0);\n Grid = __decorate([\n NotifyPropertyChanges\n ], Grid);\n return Grid;\n}(Component));\nexport { Grid };\nGrid.Inject(Selection);\n","import { Browser } from '@syncfusion/ej2-base';\nimport { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { createElement, closest, classList } from '@syncfusion/ej2-base';\nimport { setCssInGridPopUp, getActualPropFromColl, isActionPrevent } from '../base/util';\nimport * as events from '../base/constant';\nimport { AriaService } from '../services/aria-service';\n/**\n *\n * The `Sort` module is used to handle sorting action.\n */\nvar Sort = /** @class */ (function () {\n /**\n * Constructor for Grid sorting module\n * @hidden\n */\n function Sort(parent, sortSettings, sortedColumns, locator) {\n this.contentRefresh = true;\n this.isModelChanged = true;\n this.aria = new AriaService();\n this.parent = parent;\n this.sortSettings = sortSettings;\n this.sortedColumns = sortedColumns;\n this.focus = locator.getService('focus');\n this.addEventListener();\n }\n /**\n * The function used to update sortSettings\n * @return {void}\n * @hidden\n */\n Sort.prototype.updateModel = function () {\n var sortedColumn = { field: this.columnName, direction: this.direction };\n var index;\n var gCols = this.parent.groupSettings.columns;\n var flag = false;\n if (!this.isMultiSort) {\n if (!gCols.length) {\n this.sortSettings.columns = [sortedColumn];\n }\n else {\n var sortedCols = [];\n for (var i = 0, len = gCols.length; i < len; i++) {\n index = this.getSortedColsIndexByField(gCols[i], sortedCols);\n if (this.columnName === gCols[i]) {\n flag = true;\n sortedCols.push(sortedColumn);\n }\n else {\n var sCol = this.getSortColumnFromField(gCols[i]);\n sortedCols.push({ field: sCol.field, direction: sCol.direction });\n }\n }\n if (!flag) {\n sortedCols.push(sortedColumn);\n }\n this.sortSettings.columns = sortedCols;\n }\n }\n else {\n index = this.getSortedColsIndexByField(this.columnName);\n if (index > -1) {\n this.sortSettings.columns.splice(index, 1);\n }\n this.sortSettings.columns.push(sortedColumn);\n this.sortSettings.columns = this.sortSettings.columns;\n }\n this.parent.dataBind();\n this.lastSortedCol = this.columnName;\n };\n /**\n * The function used to trigger onActionComplete\n * @return {void}\n * @hidden\n */\n Sort.prototype.onActionComplete = function (e) {\n var args = !this.isRemove ? {\n columnName: this.columnName, direction: this.direction, requestType: 'sorting', type: events.actionComplete\n } : { requestType: 'sorting', type: events.actionComplete };\n this.isRemove = false;\n this.parent.trigger(events.actionComplete, extend(e, args));\n };\n /**\n * Sorts a column with the given options.\n * @param {string} columnName - Defines the column name to sort.\n * @param {SortDirection} direction - Defines the direction of sorting field.\n * @param {boolean} isMultiSort - Specifies whether the previously sorted columns are to be maintained.\n * @return {void}\n */\n Sort.prototype.sortColumn = function (columnName, direction, isMultiSort) {\n var gObj = this.parent;\n if (this.parent.getColumnByField(columnName).allowSorting === false || this.parent.isContextMenuOpen()) {\n return;\n }\n if (!gObj.allowMultiSorting) {\n isMultiSort = gObj.allowMultiSorting;\n }\n if (this.isActionPrevent()) {\n gObj.notify(events.preventBatch, {\n instance: this, handler: this.sortColumn,\n arg1: columnName, arg2: direction, arg3: isMultiSort\n });\n return;\n }\n this.columnName = columnName;\n this.direction = direction;\n this.isMultiSort = isMultiSort;\n this.removeSortIcons();\n var column = gObj.getColumnHeaderByField(columnName);\n this.updateSortedCols(columnName, isMultiSort);\n this.updateModel();\n };\n Sort.prototype.updateSortedCols = function (columnName, isMultiSort) {\n if (!isMultiSort) {\n if (this.parent.allowGrouping) {\n for (var i = 0, len = this.sortedColumns.length; i < len; i++) {\n if (this.parent.groupSettings.columns.indexOf(this.sortedColumns[i]) < 0) {\n this.sortedColumns.splice(i, 1);\n len--;\n i--;\n }\n }\n }\n else {\n this.sortedColumns.splice(0, this.sortedColumns.length);\n }\n }\n if (this.sortedColumns.indexOf(columnName) < 0) {\n this.sortedColumns.push(columnName);\n }\n };\n /**\n * @hidden\n */\n Sort.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName()) {\n return;\n }\n if (this.contentRefresh) {\n var args = this.sortSettings.columns.length ? {\n columnName: this.columnName, direction: this.direction, requestType: 'sorting', type: events.actionBegin\n } : { requestType: 'sorting', type: events.actionBegin };\n this.parent.notify(events.modelChanged, args);\n }\n this.refreshSortSettings();\n this.removeSortIcons();\n this.addSortIcons();\n };\n Sort.prototype.refreshSortSettings = function () {\n var _this = this;\n this.sortedColumns = [];\n this.sortSettings.columns.forEach(function (e) {\n _this.sortedColumns.push(e.field);\n });\n };\n /**\n * Clears all the sorted columns of the Grid.\n * @return {void}\n */\n Sort.prototype.clearSorting = function () {\n var cols = getActualPropFromColl(this.sortSettings.columns);\n if (this.isActionPrevent()) {\n this.parent.notify(events.preventBatch, { instance: this, handler: this.clearSorting });\n return;\n }\n for (var i = 0, len = cols.length; i < len; i++) {\n this.removeSortColumn(cols[i].field);\n }\n };\n Sort.prototype.isActionPrevent = function () {\n return isActionPrevent(this.parent);\n };\n /**\n * Remove sorted column by field name.\n * @param {string} field - Defines the column field name to remove sort.\n * @return {void}\n * @hidden\n */\n Sort.prototype.removeSortColumn = function (field) {\n var gObj = this.parent;\n var cols = this.sortSettings.columns;\n if (this.sortedColumns.indexOf(field) < 0) {\n return;\n }\n if (this.isActionPrevent()) {\n this.parent.notify(events.preventBatch, { instance: this, handler: this.removeSortColumn, arg1: field });\n return;\n }\n this.removeSortIcons();\n for (var i = 0, len = cols.length; i < len; i++) {\n if (cols[i].field === field) {\n if (gObj.allowGrouping && gObj.groupSettings.columns.indexOf(cols[i].field) > -1) {\n continue;\n }\n this.sortedColumns.splice(this.sortedColumns.indexOf(cols[i].field), 1);\n cols.splice(i, 1);\n this.isRemove = true;\n if (this.isModelChanged) {\n this.parent.notify(events.modelChanged, {\n requestType: 'sorting', type: events.actionBegin\n });\n }\n break;\n }\n }\n this.addSortIcons();\n };\n Sort.prototype.getSortedColsIndexByField = function (field, sortedColumns) {\n var cols = sortedColumns ? sortedColumns : this.sortSettings.columns;\n for (var i = 0, len = cols.length; i < len; i++) {\n if (cols[i].field === field) {\n return i;\n }\n }\n return -1;\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Sort.prototype.getModuleName = function () {\n return 'sort';\n };\n Sort.prototype.initialEnd = function () {\n this.parent.off(events.contentReady, this.initialEnd);\n if (this.parent.getColumns().length && this.sortSettings.columns.length) {\n var gObj = this.parent;\n this.contentRefresh = false;\n this.isMultiSort = this.sortSettings.columns.length > 1;\n for (var _i = 0, _a = gObj.sortSettings.columns; _i < _a.length; _i++) {\n var col = _a[_i];\n if (this.sortedColumns.indexOf(col.field) > -1) {\n this.sortColumn(col.field, col.direction, true);\n }\n }\n this.isMultiSort = false;\n this.contentRefresh = true;\n }\n };\n /**\n * @hidden\n */\n Sort.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.contentReady, this.initialEnd, this);\n this.parent.on(events.sortComplete, this.onActionComplete, this);\n this.parent.on(events.inBoundModelChanged, this.onPropertyChanged, this);\n this.parent.on(events.click, this.clickHandler, this);\n this.parent.on(events.headerRefreshed, this.refreshSortIcons, this);\n this.parent.on(events.keyPressed, this.keyPressed, this);\n };\n /**\n * @hidden\n */\n Sort.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.sortComplete, this.onActionComplete);\n this.parent.off(events.inBoundModelChanged, this.onPropertyChanged);\n this.parent.off(events.click, this.clickHandler);\n this.parent.off(events.headerRefreshed, this.refreshSortIcons);\n this.parent.off(events.keyPressed, this.keyPressed);\n };\n /**\n * To destroy the sorting\n * @return {void}\n * @hidden\n */\n Sort.prototype.destroy = function () {\n this.isModelChanged = false;\n if (this.parent.element.querySelector('.e-gridpopup').querySelectorAll('.e-sortdirect').length) {\n this.parent.element.querySelector('.e-gridpopup').style.display = 'none';\n }\n this.clearSorting();\n this.isModelChanged = true;\n this.removeEventListener();\n };\n Sort.prototype.clickHandler = function (e) {\n this.popUpClickHandler(e);\n var target = closest(e.target, '.e-headercell');\n if (target && !e.target.classList.contains('e-grptogglebtn') &&\n !e.target.classList.contains('e-stackedheadercell') &&\n !e.target.classList.contains('e-stackedheadercelldiv') &&\n !(target.classList.contains('e-resized')) &&\n !e.target.classList.contains('e-rhandler') &&\n !e.target.classList.contains('e-columnmenu') &&\n !e.target.classList.contains('e-filtermenudiv')) {\n var gObj = this.parent;\n var colObj = gObj.getColumnByUid(target.querySelector('.e-headercelldiv').getAttribute('e-mappinguid'));\n var direction = !target.querySelectorAll('.e-ascending').length ? 'Ascending' :\n 'Descending';\n if (colObj.type !== 'checkbox') {\n this.initiateSort(target, e, colObj);\n if (Browser.isDevice) {\n this.showPopUp(e);\n }\n }\n }\n if (target) {\n target.classList.remove('e-resized');\n }\n };\n Sort.prototype.keyPressed = function (e) {\n var ele = e.target;\n if (!this.parent.isEdit && (e.action === 'enter' || e.action === 'ctrlEnter' || e.action === 'shiftEnter')\n && closest(ele, '.e-headercell')) {\n var target = this.focus.getFocusedElement();\n if (isNullOrUndefined(target) || !target.classList.contains('e-headercell')\n || !target.querySelector('.e-headercelldiv')) {\n return;\n }\n var col = this.parent.getColumnByUid(target.querySelector('.e-headercelldiv').getAttribute('e-mappinguid'));\n this.initiateSort(target, e, col);\n }\n };\n Sort.prototype.initiateSort = function (target, e, column) {\n var gObj = this.parent;\n var field = column.field;\n var direction = !target.querySelectorAll('.e-ascending').length ? 'Ascending' :\n 'Descending';\n if (e.shiftKey || (this.sortSettings.allowUnsort && target.querySelectorAll('.e-descending').length)\n && !(gObj.groupSettings.columns.indexOf(field) > -1)) {\n this.removeSortColumn(field);\n }\n else {\n this.sortColumn(field, direction, e.ctrlKey || this.enableSortMultiTouch);\n }\n };\n Sort.prototype.showPopUp = function (e) {\n var target = closest(e.target, '.e-headercell');\n if (!isNullOrUndefined(target) || this.parent.isContextMenuOpen()) {\n setCssInGridPopUp(this.parent.element.querySelector('.e-gridpopup'), e, 'e-sortdirect e-icons e-icon-sortdirect' + (this.sortedColumns.length > 1 ? ' e-spanclicked' : ''));\n }\n };\n Sort.prototype.popUpClickHandler = function (e) {\n var target = e.target;\n if (closest(target, '.e-headercell') || e.target.classList.contains('e-rowcell') ||\n closest(target, '.e-gridpopup')) {\n if (target.classList.contains('e-sortdirect')) {\n if (!target.classList.contains('e-spanclicked')) {\n target.classList.add('e-spanclicked');\n this.enableSortMultiTouch = true;\n }\n else {\n target.classList.remove('e-spanclicked');\n this.enableSortMultiTouch = false;\n this.parent.element.querySelector('.e-gridpopup').style.display = 'none';\n }\n }\n }\n else {\n this.parent.element.querySelector('.e-gridpopup').style.display = 'none';\n }\n };\n Sort.prototype.addSortIcons = function () {\n var gObj = this.parent;\n var header;\n var filterElement;\n var cols = this.sortSettings.columns;\n var fieldNames = this.parent.getColumns().map(function (c) { return c.field; });\n for (var i = 0, len = cols.length; i < len; i++) {\n if (fieldNames.indexOf(cols[i].field) === -1) {\n continue;\n }\n header = gObj.getColumnHeaderByField(cols[i].field);\n this.aria.setSort(header, cols[i].direction);\n if (this.isMultiSort && cols.length > 1) {\n header.querySelector('.e-headercelldiv').insertBefore(createElement('span', { className: 'e-sortnumber', innerHTML: (i + 1).toString() }), header.querySelector('.e-headertext'));\n }\n filterElement = header.querySelector('.e-sortfilterdiv');\n if (cols[i].direction === 'Ascending') {\n classList(filterElement, ['e-ascending', 'e-icon-ascending'], []);\n }\n else {\n classList(filterElement, ['e-descending', 'e-icon-descending'], []);\n }\n }\n };\n Sort.prototype.removeSortIcons = function (position) {\n var gObj = this.parent;\n var header;\n var cols = this.sortSettings.columns;\n var fieldNames = this.parent.getColumns().map(function (c) { return c.field; });\n for (var i = position ? position : 0, len = !isNullOrUndefined(position) ? position + 1 : cols.length; i < len; i++) {\n header = gObj.getColumnHeaderByField(cols[i].field);\n if (gObj.allowGrouping && gObj.groupSettings.columns.indexOf(cols[i].field) > -1 &&\n (isNullOrUndefined(header) || !header.querySelector('.e-sortfilterdiv'))) {\n continue;\n }\n if (fieldNames.indexOf(cols[i].field) === -1) {\n continue;\n }\n this.aria.setSort(header, 'none');\n classList(header.querySelector('.e-sortfilterdiv'), [], ['e-descending', 'e-icon-descending', 'e-ascending', 'e-icon-ascending']);\n if (header.querySelector('.e-sortnumber')) {\n header.querySelector('.e-headercelldiv').removeChild(header.querySelector('.e-sortnumber'));\n }\n }\n };\n Sort.prototype.getSortColumnFromField = function (field) {\n for (var i = 0, len = this.sortSettings.columns.length; i < len; i++) {\n if (this.sortSettings.columns[i].field === field) {\n return this.sortSettings.columns[i];\n }\n }\n return false;\n };\n Sort.prototype.updateAriaAttr = function () {\n var fieldNames = this.parent.getColumns().map(function (c) { return c.field; });\n for (var _i = 0, _a = this.sortedColumns; _i < _a.length; _i++) {\n var col = _a[_i];\n if (fieldNames.indexOf(col) === -1) {\n continue;\n }\n var header = this.parent.getColumnHeaderByField(col);\n this.aria.setSort(header, this.getSortColumnFromField(col).direction);\n }\n };\n Sort.prototype.refreshSortIcons = function () {\n this.removeSortIcons();\n this.isMultiSort = true;\n this.removeSortIcons();\n this.addSortIcons();\n this.isMultiSort = false;\n this.updateAriaAttr();\n };\n return Sort;\n}());\nexport { Sort };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { EventHandler } from '@syncfusion/ej2-base';\nimport { createElement, classList, append } from '@syncfusion/ej2-base';\n/**\n * `NumericContainer` module handles rendering and refreshing numeric container.\n */\nvar NumericContainer = /** @class */ (function () {\n /**\n * Constructor for numericContainer module\n * @hidden\n */\n function NumericContainer(pagerModule) {\n this.pagerModule = pagerModule;\n }\n /**\n * The function is used to render numericContainer\n * @hidden\n */\n NumericContainer.prototype.render = function () {\n this.pagerElement = this.pagerModule.element;\n this.renderNumericContainer();\n this.refreshNumericLinks();\n this.wireEvents();\n };\n /**\n * Refreshes the numeric container of Pager.\n */\n NumericContainer.prototype.refresh = function () {\n this.pagerModule.updateTotalPages();\n if (this.links.length) {\n this.updateLinksHtml();\n }\n this.updateStyles();\n };\n /**\n * The function is used to refresh refreshNumericLinks\n * @hidden\n */\n NumericContainer.prototype.refreshNumericLinks = function () {\n var link;\n var pagerObj = this.pagerModule;\n var div = pagerObj.element.querySelector('.e-numericcontainer');\n var frag = document.createDocumentFragment();\n div.innerHTML = '';\n for (var i = 1; i <= pagerObj.pageCount; i++) {\n link = createElement('a', {\n className: 'e-link e-numericitem e-spacing e-pager-default',\n attrs: { role: 'link', tabindex: '-1', 'aria-label': 'Goto Page ' + i,\n href: 'javascript:void(0);', name: 'Goto page' + i }\n });\n if (pagerObj.currentPage === i) {\n classList(link, ['e-currentitem', 'e-active'], ['e-pager-default']);\n }\n frag.appendChild(link);\n }\n div.appendChild(frag);\n this.links = [].slice.call(div.childNodes);\n };\n /**\n * Binding events to the element while component creation\n * @hidden\n */\n NumericContainer.prototype.wireEvents = function () {\n EventHandler.add(this.pagerElement, 'click', this.clickHandler, this);\n };\n /**\n * Unbinding events from the element while component destroy\n * @hidden\n */\n NumericContainer.prototype.unwireEvents = function () {\n EventHandler.remove(this.pagerElement, 'click', this.clickHandler);\n };\n /**\n * To destroy the PagerMessage\n * @method destroy\n * @return {void}\n * @hidden\n */\n NumericContainer.prototype.destroy = function () {\n this.unwireEvents();\n };\n NumericContainer.prototype.renderNumericContainer = function () {\n this.element = createElement('div', {\n className: 'e-pagercontainer', attrs: { 'role': 'navigation' }\n });\n this.renderFirstNPrev(this.element);\n this.renderPrevPagerSet(this.element);\n this.element.appendChild(createElement('div', { className: 'e-numericcontainer' }));\n this.renderNextPagerSet(this.element);\n this.renderNextNLast(this.element);\n this.pagerModule.element.appendChild(this.element);\n };\n NumericContainer.prototype.renderFirstNPrev = function (pagerContainer) {\n this.first = createElement('div', {\n className: 'e-first e-icons e-icon-first',\n attrs: {\n title: this.pagerModule.getLocalizedLabel('firstPageTooltip'),\n 'aria-label': this.pagerModule.getLocalizedLabel('firstPageTooltip'),\n tabindex: '-1'\n }\n });\n this.prev = createElement('div', {\n className: 'e-prev e-icons e-icon-prev',\n attrs: {\n title: this.pagerModule.getLocalizedLabel('previousPageTooltip'),\n 'aria-label': this.pagerModule.getLocalizedLabel('previousPageTooltip'),\n tabindex: '-1'\n }\n });\n append([this.first, this.prev], pagerContainer);\n };\n NumericContainer.prototype.renderPrevPagerSet = function (pagerContainer) {\n var prevPager = createElement('div');\n this.PP = createElement('a', {\n className: 'e-link e-pp e-spacing', innerHTML: '...',\n attrs: {\n title: this.pagerModule.getLocalizedLabel('previousPagerTooltip'), role: 'link',\n 'aria-label': this.pagerModule.getLocalizedLabel('previousPagerTooltip'),\n tabindex: '-1',\n name: this.pagerModule.getLocalizedLabel('previousPagerTooltip'),\n href: 'javascript:void(0);'\n }\n });\n prevPager.appendChild(this.PP);\n pagerContainer.appendChild(prevPager);\n };\n NumericContainer.prototype.renderNextPagerSet = function (pagerContainer) {\n var nextPager = createElement('div');\n this.NP = createElement('a', {\n className: 'e-link e-np e-spacing',\n innerHTML: '...', attrs: {\n title: this.pagerModule.getLocalizedLabel('nextPagerTooltip'), role: 'link',\n 'aria-label': this.pagerModule.getLocalizedLabel('nextPagerTooltip'),\n tabindex: '-1',\n name: this.pagerModule.getLocalizedLabel('nextPagerTooltip'),\n href: 'javascript:void(0);'\n }\n });\n nextPager.appendChild(this.NP);\n pagerContainer.appendChild(nextPager);\n };\n NumericContainer.prototype.renderNextNLast = function (pagerContainer) {\n this.next = createElement('div', {\n className: 'e-next e-icons e-icon-next',\n attrs: {\n title: this.pagerModule.getLocalizedLabel('nextPageTooltip'),\n 'aria-label': this.pagerModule.getLocalizedLabel('nextPageTooltip'),\n tabindex: '-1'\n }\n });\n this.last = createElement('div', {\n className: 'e-last e-icons e-icon-last',\n attrs: {\n title: this.pagerModule.getLocalizedLabel('lastPageTooltip'),\n 'aria-label': this.pagerModule.getLocalizedLabel('lastPageTooltip'),\n tabindex: '-1'\n }\n });\n append([this.next, this.last], pagerContainer);\n };\n NumericContainer.prototype.clickHandler = function (e) {\n var pagerObj = this.pagerModule;\n var target = e.target;\n pagerObj.previousPageNo = pagerObj.currentPage;\n if (!target.classList.contains('e-disable') && !isNullOrUndefined(target.getAttribute('index'))) {\n pagerObj.currentPage = parseInt(target.getAttribute('index'), 10);\n pagerObj.dataBind();\n }\n return false;\n };\n NumericContainer.prototype.updateLinksHtml = function () {\n var pagerObj = this.pagerModule;\n var currentPageSet;\n var pageNo;\n pagerObj.currentPage = pagerObj.totalPages === 1 ? 1 : pagerObj.currentPage;\n if (pagerObj.currentPage > pagerObj.totalPages && pagerObj.totalPages) {\n pagerObj.currentPage = pagerObj.totalPages;\n }\n currentPageSet = parseInt((pagerObj.currentPage / pagerObj.pageCount).toString(), 10);\n if (pagerObj.currentPage % pagerObj.pageCount === 0 && currentPageSet > 0) {\n currentPageSet = currentPageSet - 1;\n }\n for (var i = 0; i < pagerObj.pageCount; i++) {\n pageNo = (currentPageSet * pagerObj.pageCount) + 1 + i;\n if (pageNo <= pagerObj.totalPages) {\n this.links[i].style.display = '';\n this.links[i].setAttribute('index', pageNo.toString());\n this.links[i].innerHTML = !pagerObj.customText ? pageNo.toString() : pagerObj.customText + pageNo;\n if (pagerObj.currentPage !== pageNo) {\n this.links[i].classList.add('e-pager-default');\n }\n else {\n this.links[i].classList.remove('e-pager-default');\n }\n }\n else {\n this.links[i].innerHTML = !pagerObj.customText ? pageNo.toString() : pagerObj.customText + pageNo;\n this.links[i].style.display = 'none';\n }\n classList(this.links[i], [], ['e-currentitem', 'e-active']);\n }\n this.first.setAttribute('index', '1');\n this.last.setAttribute('index', pagerObj.totalPages.toString());\n this.prev.setAttribute('index', (pagerObj.currentPage - 1).toString());\n this.next.setAttribute('index', (pagerObj.currentPage + 1).toString());\n this.pagerElement.querySelector('.e-mfirst').setAttribute('index', '1');\n this.pagerElement.querySelector('.e-mlast').setAttribute('index', pagerObj.totalPages.toString());\n this.pagerElement.querySelector('.e-mprev').setAttribute('index', (pagerObj.currentPage - 1).toString());\n this.pagerElement.querySelector('.e-mnext').setAttribute('index', (pagerObj.currentPage + 1).toString());\n this.PP.setAttribute('index', (parseInt(this.links[0].getAttribute('index'), 10) - pagerObj.pageCount).toString());\n this.NP.setAttribute('index', (parseInt(this.links[this.links.length - 1].getAttribute('index'), 10) + 1).toString());\n };\n NumericContainer.prototype.updateStyles = function () {\n this.updateFirstNPrevStyles();\n this.updatePrevPagerSetStyles();\n this.updateNextPagerSetStyles();\n this.updateNextNLastStyles();\n if (this.links.length) {\n classList(this.links[(this.pagerModule.currentPage - 1) % this.pagerModule.pageCount], ['e-currentitem', 'e-active'], []);\n }\n };\n NumericContainer.prototype.updateFirstNPrevStyles = function () {\n var firstPage = ['e-firstpage', 'e-pager-default'];\n var firstPageDisabled = ['e-firstpagedisabled', 'e-disable'];\n var prevPage = ['e-prevpage', 'e-pager-default'];\n var prevPageDisabled = ['e-prevpagedisabled', 'e-disable'];\n if (this.pagerModule.totalPages > 0 && this.pagerModule.currentPage > 1) {\n classList(this.prev, prevPage, prevPageDisabled);\n classList(this.first, firstPage, firstPageDisabled);\n classList(this.pagerElement.querySelector('.e-mfirst'), firstPage, firstPageDisabled);\n classList(this.pagerElement.querySelector('.e-mprev'), prevPage, prevPageDisabled);\n }\n else {\n classList(this.prev, prevPageDisabled, prevPage);\n classList(this.first, firstPageDisabled, firstPage);\n classList(this.pagerElement.querySelector('.e-mprev'), prevPageDisabled, prevPage);\n classList(this.pagerElement.querySelector('.e-mfirst'), firstPageDisabled, firstPage);\n }\n };\n NumericContainer.prototype.updatePrevPagerSetStyles = function () {\n if (this.pagerModule.currentPage > this.pagerModule.pageCount) {\n classList(this.PP, ['e-numericitem', 'e-pager-default'], ['e-nextprevitemdisabled', 'e-disable']);\n }\n else {\n classList(this.PP, ['e-nextprevitemdisabled', 'e-disable'], ['e-numericitem', 'e-pager-default']);\n }\n };\n NumericContainer.prototype.updateNextPagerSetStyles = function () {\n var pagerObj = this.pagerModule;\n var firstPage = this.links[0].innerHTML.replace(pagerObj.customText, '');\n if (!firstPage.length || !this.links.length || (parseInt(firstPage, 10) + pagerObj.pageCount > pagerObj.totalPages)) {\n classList(this.NP, ['e-nextprevitemdisabled', 'e-disable'], ['e-numericitem', 'e-pager-default']);\n }\n else {\n classList(this.NP, ['e-numericitem', 'e-pager-default'], ['e-nextprevitemdisabled', 'e-disable']);\n }\n };\n NumericContainer.prototype.updateNextNLastStyles = function () {\n var lastPage = ['e-lastpage', 'e-pager-default'];\n var lastPageDisabled = ['e-lastpagedisabled', 'e-disable'];\n var nextPage = ['e-nextpage', 'e-pager-default'];\n var nextPageDisabled = ['e-nextpagedisabled', 'e-disable'];\n var pagerObj = this.pagerModule;\n if (pagerObj.currentPage === pagerObj.totalPages || pagerObj.totalRecordsCount === 0) {\n classList(this.last, lastPageDisabled, lastPage);\n classList(this.next, nextPageDisabled, nextPage);\n classList(this.pagerElement.querySelector('.e-mlast'), lastPageDisabled, lastPage);\n classList(this.pagerElement.querySelector('.e-mnext'), nextPageDisabled, nextPage);\n }\n else {\n classList(this.last, lastPage, lastPageDisabled);\n classList(this.next, nextPage, nextPageDisabled);\n classList(this.pagerElement.querySelector('.e-mlast'), lastPage, lastPageDisabled);\n classList(this.pagerElement.querySelector('.e-mnext'), nextPage, nextPageDisabled);\n }\n };\n return NumericContainer;\n}());\nexport { NumericContainer };\n","import { createElement, append } from '@syncfusion/ej2-base';\n/**\n * `PagerMessage` module is used to display pager information.\n */\nvar PagerMessage = /** @class */ (function () {\n /**\n * Constructor for externalMessage module\n * @hidden\n */\n function PagerMessage(pagerModule) {\n this.pagerModule = pagerModule;\n }\n /**\n * The function is used to render pager message\n * @hidden\n */\n PagerMessage.prototype.render = function () {\n var div = createElement('div', { className: 'e-parentmsgbar', attrs: { 'aria-label': 'Pager Information' } });\n this.pageNoMsgElem = createElement('span', { className: 'e-pagenomsg', styles: 'textalign:right' });\n this.pageCountMsgElem = createElement('span', { className: 'e-pagecountmsg', styles: 'textalign:right' });\n append([this.pageNoMsgElem, this.pageCountMsgElem], div);\n this.pagerModule.element.appendChild(div);\n this.refresh();\n };\n /**\n * Refreshes the pager information.\n */\n PagerMessage.prototype.refresh = function () {\n var pagerObj = this.pagerModule;\n this.pageNoMsgElem.textContent = this.format(pagerObj.getLocalizedLabel('currentPageInfo'), [pagerObj.totalRecordsCount === 0 ? 0 :\n pagerObj.currentPage, pagerObj.totalPages || 0]) + ' ';\n this.pageCountMsgElem.textContent = this.format(pagerObj.getLocalizedLabel('totalItemsInfo'), [pagerObj.totalRecordsCount || 0]);\n this.pageNoMsgElem.parentElement.setAttribute('aria-label', this.pageNoMsgElem.textContent + this.pageCountMsgElem.textContent);\n };\n /**\n * Hides the Pager information.\n */\n PagerMessage.prototype.hideMessage = function () {\n if (this.pageNoMsgElem) {\n this.pageNoMsgElem.style.display = 'none';\n }\n if (this.pageCountMsgElem) {\n this.pageCountMsgElem.style.display = 'none';\n }\n };\n /**\n * Shows the Pager information.\n */\n PagerMessage.prototype.showMessage = function () {\n if (!this.pageNoMsgElem) {\n this.render();\n }\n this.pageNoMsgElem.style.display = '';\n this.pageCountMsgElem.style.display = '';\n };\n /**\n * To destroy the PagerMessage\n * @method destroy\n * @return {void}\n * @hidden\n */\n PagerMessage.prototype.destroy = function () {\n //destroy\n };\n PagerMessage.prototype.format = function (str, args) {\n var regx;\n for (var i = 0; i < args.length; i++) {\n regx = new RegExp('\\\\{' + (i) + '\\\\}', 'gm');\n str = str.replace(regx, args[i].toString());\n }\n return str;\n };\n return PagerMessage;\n}());\nexport { PagerMessage };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, L10n, Browser } from '@syncfusion/ej2-base';\nimport { createElement, compile as templateCompiler } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Property, Event, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { NumericContainer } from './numeric-container';\nimport { PagerMessage } from './pager-message';\nimport { appendChildren } from '../grid/base/util';\n/**\n * Represents the `Pager` component.\n * ```html\n *
    \n * ```\n * ```typescript\n * \n * ```\n */\nvar Pager = /** @class */ (function (_super) {\n __extends(Pager, _super);\n /**\n * Constructor for creating the component.\n * @hidden\n */\n function Pager(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.defaultConstants = {\n currentPageInfo: '{0} of {1} pages',\n totalItemsInfo: '({0} items)',\n firstPageTooltip: 'Go to first page',\n lastPageTooltip: 'Go to last page',\n nextPageTooltip: 'Go to next page',\n previousPageTooltip: 'Go to previous page',\n nextPagerTooltip: 'Go to next pager',\n previousPagerTooltip: 'Go to previous pager',\n pagerDropDown: 'Items per page'\n };\n /**\n * `containerModule` is used to manipulate numeric container behavior of Pager.\n */\n _this.containerModule = new NumericContainer(_this);\n /**\n * `pagerMessageModule` is used to manipulate pager message of Pager.\n */\n _this.pagerMessageModule = new PagerMessage(_this);\n return _this;\n }\n /**\n * To provide the array of modules needed for component rendering\n * @hidden\n */\n Pager.prototype.requiredModules = function () {\n var modules = [];\n if (this.enableExternalMessage) {\n modules.push({\n member: 'externalMessage',\n args: [this]\n });\n }\n if (this.checkpagesizes()) {\n modules.push({\n member: 'pagerdropdown',\n args: [this]\n });\n }\n return modules;\n };\n /**\n * Initialize the event handler\n * @hidden\n */\n Pager.prototype.preRender = function () {\n //preRender\n };\n /**\n * To Initialize the component rendering\n */\n Pager.prototype.render = function () {\n if (this.template) {\n this.pagerTemplate();\n }\n else {\n this.initLocalization();\n this.updateRTL();\n this.totalRecordsCount = this.totalRecordsCount || 0;\n this.renderFirstPrevDivForDevice();\n this.containerModule.render();\n if (this.enablePagerMessage) {\n this.pagerMessageModule.render();\n }\n this.renderNextLastDivForDevice();\n if (this.checkpagesizes()) {\n this.pagerdropdownModule.render();\n }\n this.addAriaLabel();\n if (this.enableExternalMessage && this.externalMessageModule) {\n this.externalMessageModule.render();\n }\n this.refresh();\n this.trigger('created', { 'currentPage': this.currentPage, 'totalRecordsCount': this.totalRecordsCount });\n }\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @hidden\n */\n Pager.prototype.getPersistData = function () {\n var keyEntity = ['currentPage', 'pageSize'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * To destroy the Pager component.\n * @method destroy\n * @return {void}\n */\n Pager.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n this.containerModule.destroy();\n this.pagerMessageModule.destroy();\n this.element.innerHTML = '';\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Pager.prototype.getModuleName = function () {\n return 'pager';\n };\n /**\n * Called internally if any of the property value changed.\n * @hidden\n */\n Pager.prototype.onPropertyChanged = function (newProp, oldProp) {\n if (this.isDestroyed) {\n return;\n }\n if (newProp.pageCount !== oldProp.pageCount) {\n this.containerModule.refreshNumericLinks();\n this.containerModule.refresh();\n }\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'currentPage':\n if (this.checkGoToPage(newProp.currentPage, oldProp.currentPage)) {\n this.currentPageChanged();\n }\n break;\n case 'pageSize':\n case 'totalRecordsCount':\n case 'customText':\n if (this.checkpagesizes()) {\n this.pagerdropdownModule.setDropDownValue('value', this.pageSize);\n }\n this.refresh();\n break;\n case 'pageSizes':\n if (this.checkpagesizes()) {\n this.pagerdropdownModule.destroy();\n this.pagerdropdownModule.render();\n }\n this.refresh();\n break;\n case 'template':\n this.templateFn = this.compile(this.template);\n this.refresh();\n break;\n case 'locale':\n this.initLocalization();\n this.refresh();\n break;\n case 'enableExternalMessage':\n if (this.enableExternalMessage) {\n this.externalMessageModule.render();\n }\n break;\n case 'externalMessage':\n if (this.externalMessageModule) {\n this.externalMessageModule.refresh();\n }\n break;\n case 'enableRtl':\n this.updateRTL();\n break;\n case 'enablePagerMessage':\n if (this.enablePagerMessage) {\n this.pagerMessageModule.showMessage();\n }\n else {\n this.pagerMessageModule.hideMessage();\n }\n break;\n }\n }\n };\n /**\n * Gets the localized label by locale keyword.\n * @param {string} key\n * @return {string}\n */\n Pager.prototype.getLocalizedLabel = function (key) {\n return this.localeObj.getConstant(key);\n };\n /**\n * Navigate to target page by given number.\n * @param {number} pageNo - Defines page number.\n * @return {void}\n */\n Pager.prototype.goToPage = function (pageNo) {\n if (this.checkGoToPage(pageNo)) {\n this.currentPage = pageNo;\n this.dataBind();\n }\n };\n Pager.prototype.checkpagesizes = function () {\n if (this.pageSizes === true || this.pageSizes.length) {\n return true;\n }\n return false;\n };\n Pager.prototype.checkGoToPage = function (newPageNo, oldPageNo) {\n if (newPageNo !== this.currentPage) {\n this.previousPageNo = this.currentPage;\n }\n if (!isNullOrUndefined(oldPageNo)) {\n this.previousPageNo = oldPageNo;\n }\n if (this.previousPageNo !== newPageNo && (newPageNo >= 1 && newPageNo <= this.totalPages)) {\n return true;\n }\n return false;\n };\n Pager.prototype.currentPageChanged = function () {\n if (this.enableQueryString) {\n this.updateQueryString(this.currentPage);\n }\n var args = { currentPage: this.currentPage, cancel: false };\n this.trigger('click', args);\n if (!args.cancel) {\n this.refresh();\n }\n };\n Pager.prototype.pagerTemplate = function () {\n var result;\n this.element.classList.add('e-pagertemplate');\n this.compile(this.template);\n var data = {\n currentPage: this.currentPage, pageSize: this.pageSize, pageCount: this.pageCount,\n totalRecordsCount: this.totalRecordsCount, totalPages: this.totalPages\n };\n result = this.getPagerTemplate()(data);\n appendChildren(this.element, result);\n };\n /** @hidden */\n Pager.prototype.updateTotalPages = function () {\n this.totalPages = (this.totalRecordsCount % this.pageSize === 0) ? (this.totalRecordsCount / this.pageSize) :\n (parseInt((this.totalRecordsCount / this.pageSize).toString(), 10) + 1);\n };\n /** @hidden */\n Pager.prototype.getPagerTemplate = function () {\n return this.templateFn;\n };\n Pager.prototype.compile = function (template) {\n if (template) {\n var e = void 0;\n try {\n if (document.querySelectorAll(template).length) {\n this.templateFn = templateCompiler(document.querySelector(template).innerHTML.trim());\n }\n }\n catch (e) {\n this.templateFn = templateCompiler(template);\n }\n }\n return undefined;\n };\n /**\n * Refreshes page count, pager information and external message.\n * @return {void}\n */\n Pager.prototype.refresh = function () {\n if (this.template) {\n this.element.innerHTML = '';\n this.updateTotalPages();\n this.pagerTemplate();\n }\n else {\n this.updateRTL();\n this.containerModule.refresh();\n if (this.enablePagerMessage) {\n this.pagerMessageModule.refresh();\n }\n if (this.enableExternalMessage && this.externalMessageModule) {\n this.externalMessageModule.refresh();\n }\n }\n };\n Pager.prototype.updateRTL = function () {\n if (this.enableRtl) {\n this.element.classList.add('e-rtl');\n }\n else {\n this.element.classList.remove('e-rtl');\n }\n };\n Pager.prototype.initLocalization = function () {\n this.localeObj = new L10n(this.getModuleName(), this.defaultConstants, this.locale);\n };\n Pager.prototype.updateQueryString = function (value) {\n var updatedUrl = this.getUpdatedURL(window.location.href, 'page', value.toString());\n window.history.pushState({ path: updatedUrl }, '', updatedUrl);\n };\n Pager.prototype.getUpdatedURL = function (uri, key, value) {\n var regx = new RegExp('([?|&])' + key + '=.*?(&|#|$)', 'i');\n if (uri.match(regx)) {\n return uri.replace(regx, '$1' + key + '=' + value + '$2');\n }\n else {\n var hash = '';\n if (uri.indexOf('#') !== -1) {\n hash = uri.replace(/.*#/, '#');\n uri = uri.replace(/#.*/, '');\n }\n return uri + (uri.indexOf('?') !== -1 ? '&' : '?') + key + '=' + value + hash;\n }\n };\n Pager.prototype.renderFirstPrevDivForDevice = function () {\n this.element.appendChild(createElement('div', {\n className: 'e-mfirst e-icons e-icon-first',\n attrs: { title: this.getLocalizedLabel('firstPageTooltip'), tabindex: '-1' }\n }));\n this.element.appendChild(createElement('div', {\n className: 'e-mprev e-icons e-icon-prev',\n attrs: { title: this.getLocalizedLabel('previousPageTooltip'), tabindex: '-1' }\n }));\n };\n Pager.prototype.renderNextLastDivForDevice = function () {\n this.element.appendChild(createElement('div', {\n className: 'e-mnext e-icons e-icon-next',\n attrs: { title: this.getLocalizedLabel('nextPageTooltip'), tabindex: '-1' }\n }));\n this.element.appendChild(createElement('div', {\n className: 'e-mlast e-icons e-icon-last',\n attrs: { title: this.getLocalizedLabel('lastPageTooltip'), tabindex: '-1' }\n }));\n };\n Pager.prototype.addAriaLabel = function () {\n var _this = this;\n var classList = ['.e-mfirst', '.e-mprev', '.e-mnext', '.e-mlast'];\n if (!Browser.isDevice) {\n classList.forEach(function (value) {\n var element = _this.element.querySelector(value);\n element.setAttribute('aria-label', element.getAttribute('title'));\n });\n }\n };\n __decorate([\n Property(false)\n ], Pager.prototype, \"enableQueryString\", void 0);\n __decorate([\n Property(false)\n ], Pager.prototype, \"enableExternalMessage\", void 0);\n __decorate([\n Property(true)\n ], Pager.prototype, \"enablePagerMessage\", void 0);\n __decorate([\n Property(12)\n ], Pager.prototype, \"pageSize\", void 0);\n __decorate([\n Property(10)\n ], Pager.prototype, \"pageCount\", void 0);\n __decorate([\n Property(1)\n ], Pager.prototype, \"currentPage\", void 0);\n __decorate([\n Property()\n ], Pager.prototype, \"totalRecordsCount\", void 0);\n __decorate([\n Property()\n ], Pager.prototype, \"externalMessage\", void 0);\n __decorate([\n Property(false)\n ], Pager.prototype, \"pageSizes\", void 0);\n __decorate([\n Property()\n ], Pager.prototype, \"template\", void 0);\n __decorate([\n Property('')\n ], Pager.prototype, \"customText\", void 0);\n __decorate([\n Event()\n ], Pager.prototype, \"click\", void 0);\n __decorate([\n Event()\n ], Pager.prototype, \"dropDownChanged\", void 0);\n __decorate([\n Event()\n ], Pager.prototype, \"created\", void 0);\n Pager = __decorate([\n NotifyPropertyChanges\n ], Pager);\n return Pager;\n}(Component));\nexport { Pager };\n","import { createElement, remove } from '@syncfusion/ej2-base';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\n/**\n * `PagerDropDown` module handles selected pageSize from DropDownList.\n */\nvar PagerDropDown = /** @class */ (function () {\n /**\n * Constructor for pager module\n * @hidden\n */\n function PagerDropDown(pagerModule) {\n this.pagerModule = pagerModule;\n }\n /**\n * For internal use only - Get the module name.\n * @private\n * @hidden\n */\n PagerDropDown.prototype.getModuleName = function () {\n return 'pagerdropdown';\n };\n /**\n * The function is used to render pager dropdown\n * @hidden\n */\n PagerDropDown.prototype.render = function () {\n var pagerObj = this.pagerModule;\n this.pagerDropDownDiv = createElement('div', { className: 'e-pagesizes' });\n var dropDownDiv = createElement('div', { className: 'e-pagerdropdown' });\n var defaultTextDiv = createElement('div', { className: 'e-pagerconstant' });\n var input = createElement('input', { attrs: { type: 'text', tabindex: '1' } });\n this.pagerCons = createElement('span', { className: 'e-constant', innerHTML: this.pagerModule.getLocalizedLabel('pagerDropDown') });\n dropDownDiv.appendChild(input);\n defaultTextDiv.appendChild(this.pagerCons);\n this.pagerDropDownDiv.appendChild(dropDownDiv);\n this.pagerDropDownDiv.appendChild(defaultTextDiv);\n this.pagerModule.element.appendChild(this.pagerDropDownDiv);\n var pageSizesModule = this.pagerModule.pageSizes;\n var pageSizesArray = (pageSizesModule.length ? pageSizesModule : [5, 10, 12, 20]);\n var defaultValue = (pageSizesArray).indexOf(this.pagerModule.pageSize) > -1 ? this.pagerModule.pageSize : pageSizesArray[0];\n this.dropDownListObject = new DropDownList({\n dataSource: pageSizesArray,\n value: defaultValue,\n change: this.onChange.bind(this)\n });\n this.dropDownListObject.appendTo(input);\n pagerObj.pageSize = defaultValue;\n pagerObj.dataBind();\n pagerObj.trigger('dropDownChanged', { pageSize: defaultValue });\n };\n /**\n * For internal use only - Get the pagesize.\n * @private\n * @hidden\n */\n PagerDropDown.prototype.onChange = function (e) {\n this.pagerModule.pageSize = this.dropDownListObject.value;\n this.pagerModule.dataBind();\n this.pagerModule.trigger('dropDownChanged', { pageSize: this.dropDownListObject.value });\n };\n PagerDropDown.prototype.setDropDownValue = function (prop, value) {\n if (this.dropDownListObject) {\n this.dropDownListObject[prop] = value;\n }\n };\n /**\n * To destroy the Pagerdropdown\n * @method destroy\n * @return {void}\n * @hidden\n */\n PagerDropDown.prototype.destroy = function (args) {\n if (this.dropDownListObject && !this.dropDownListObject.isDestroyed) {\n this.dropDownListObject.destroy();\n remove(this.pagerDropDownDiv);\n }\n };\n return PagerDropDown;\n}());\nexport { PagerDropDown };\n","import { createElement, remove } from '@syncfusion/ej2-base';\n/**\n * `ExternalMessage` module is used to display user provided message.\n */\nvar ExternalMessage = /** @class */ (function () {\n /**\n * Constructor for externalMessage module\n * @param {Pager} pagerModule?\n * @returns defaultType\n * @hidden\n */\n function ExternalMessage(pagerModule) {\n this.pagerModule = pagerModule;\n }\n /**\n * For internal use only - Get the module name.\n * @private\n */\n ExternalMessage.prototype.getModuleName = function () {\n return 'externalMessage';\n };\n /**\n * The function is used to render pager externalMessage\n * @hidden\n */\n ExternalMessage.prototype.render = function () {\n this.element = createElement('div', { className: 'e-pagerexternalmsg', attrs: { 'aria-label': 'Pager external message' } });\n this.pagerModule.element.appendChild(this.element);\n this.refresh();\n };\n /**\n * Refreshes the external message of Pager.\n */\n ExternalMessage.prototype.refresh = function () {\n if (this.pagerModule.externalMessage && this.pagerModule.externalMessage.toString().length) {\n this.showMessage();\n this.element.innerHTML = this.pagerModule.externalMessage;\n }\n else {\n this.hideMessage();\n }\n };\n /**\n * Hides the external message of Pager.\n */\n ExternalMessage.prototype.hideMessage = function () {\n this.element.style.display = 'none';\n };\n /**\n * Shows the external message of the Pager.\n */\n ExternalMessage.prototype.showMessage = function () {\n this.element.style.display = '';\n };\n /**\n * To destroy the PagerMessage\n * @method destroy\n * @return {void}\n * @hidden\n */\n ExternalMessage.prototype.destroy = function () {\n remove(this.element);\n };\n return ExternalMessage;\n}());\nexport { ExternalMessage };\n","import { extend } from '@syncfusion/ej2-base';\nimport { remove, createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Pager } from '../../pager/pager';\nimport { PagerDropDown } from '../../pager/pager-dropdown';\nimport { ExternalMessage } from '../../pager/external-message';\nimport { extend as gridExtend, getActualProperties, isActionPrevent } from '../base/util';\nimport * as events from '../base/constant';\nPager.Inject(ExternalMessage, PagerDropDown);\n/**\n * The `Page` module is used to render pager and handle paging action.\n */\nvar Page = /** @class */ (function () {\n /**\n * Constructor for the Grid paging module\n * @hidden\n */\n function Page(parent, pageSettings) {\n this.parent = parent;\n this.pageSettings = pageSettings;\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Page.prototype.getModuleName = function () {\n return 'pager';\n };\n /**\n * The function used to render pager from grid pageSettings\n * @return {void}\n * @hidden\n */\n Page.prototype.render = function () {\n var gObj = this.parent;\n var pagerObj;\n this.pagerDestroy();\n if (!isNullOrUndefined(this.parent.pagerTemplate)) {\n this.pageSettings.template = this.parent.pagerTemplate;\n }\n this.element = createElement('div', { className: 'e-gridpager' });\n pagerObj = gridExtend({}, extend({}, getActualProperties(this.pageSettings)), {\n click: this.clickHandler.bind(this),\n dropDownChanged: this.onSelect.bind(this),\n enableRtl: gObj.enableRtl, locale: gObj.locale,\n created: this.addAriaAttr.bind(this)\n }, ['parentObj', 'propName']);\n this.pagerObj = new Pager(pagerObj);\n };\n Page.prototype.onSelect = function (e) {\n this.pageSettings.pageSize = e.pageSize;\n this.pageSettings.currentPage = 1;\n };\n Page.prototype.addAriaAttr = function () {\n var _this = this;\n if (!(this.pageSettings.template)) {\n var numericContainerNew = createElement('div', { className: 'e-numericcontainer' });\n var pagerContainer = this.element.querySelector('.e-pagercontainer');\n var frag = document.createDocumentFragment();\n var numericContainer = this.element.querySelector('.e-numericcontainer');\n var links = numericContainer.querySelectorAll('a');\n for (var i = 0; i < links.length; i++) {\n if (this.parent.getContentTable()) {\n links[i].setAttribute('aria-owns', this.parent.getContentTable().id);\n }\n else {\n links[i].setAttribute('aria-owns', this.parent.element.getAttribute('id') + '_content_table');\n }\n var numericContainerDiv = createElement('div');\n numericContainerDiv.appendChild(links[i]);\n frag.appendChild(numericContainerDiv);\n }\n numericContainerNew.appendChild(frag);\n pagerContainer.replaceChild(numericContainerNew, numericContainer);\n var classList = ['.e-mfirst', '.e-mprev', '.e-first', '.e-prev', '.e-next', '.e-last', '.e-mnext', '.e-mlast'];\n classList.forEach(function (value) {\n var element = _this.element.querySelector(value);\n if (_this.parent.getContentTable()) {\n element.setAttribute('aria-owns', _this.parent.getContentTable().id);\n }\n });\n }\n };\n Page.prototype.dataReady = function (e) {\n this.updateModel(e);\n };\n /**\n * Refreshes the page count, pager information, and external message.\n * @return {void}\n */\n Page.prototype.refresh = function () {\n this.pagerObj.refresh();\n };\n /**\n * Navigates to the target page according to the given number.\n * @param {number} pageNo - Defines the page number to navigate.\n * @return {void}\n */\n Page.prototype.goToPage = function (pageNo) {\n this.pagerObj.goToPage(pageNo);\n };\n /**\n * The function used to update pageSettings model\n * @return {void}\n * @hidden\n */\n Page.prototype.updateModel = function (e) {\n this.parent.pageSettings.totalRecordsCount = e.count;\n this.parent.dataBind();\n };\n /**\n * The function used to trigger onActionComplete\n * @return {void}\n * @hidden\n */\n Page.prototype.onActionComplete = function (e) {\n this.parent.trigger(events.actionComplete, extend(e, {\n currentPage: this.parent.pageSettings.currentPage, requestType: 'paging',\n type: events.actionComplete\n }));\n };\n /**\n * @hidden\n */\n Page.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName()) {\n return;\n }\n var newProp = e.properties;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n this.pagerObj[prop] = newProp[prop];\n }\n this.pagerObj.dataBind();\n };\n Page.prototype.clickHandler = function (e) {\n var gObj = this.parent;\n if (this.isForceCancel || isActionPrevent(gObj) && !gObj.prevPageMoving) {\n if (!this.isForceCancel) {\n gObj.notify(events.preventBatch, { instance: this, handler: this.goToPage, arg1: e.currentPage });\n this.isForceCancel = true;\n this.pagerObj.currentPage = gObj.pageSettings.currentPage;\n this.pagerObj.dataBind();\n }\n else {\n this.isForceCancel = false;\n }\n e.cancel = true;\n return;\n }\n gObj.prevPageMoving = false;\n var prevPage = this.pageSettings.currentPage;\n this.pageSettings.currentPage = e.currentPage;\n this.parent.notify(events.modelChanged, {\n requestType: 'paging',\n previousPage: prevPage,\n currentPage: e.currentPage,\n type: events.actionBegin\n });\n };\n Page.prototype.keyPressHandler = function (e) {\n if (e.action in keyActions) {\n e.preventDefault();\n this.element.querySelector(keyActions[e.action]).click();\n }\n };\n /**\n * Defines the text of the external message.\n * @param {string} message - Defines the message to update.\n * @return {void}\n */\n Page.prototype.updateExternalMessage = function (message) {\n if (!this.pagerObj.enableExternalMessage) {\n this.pagerObj.enableExternalMessage = true;\n this.pagerObj.dataBind();\n }\n this.pagerObj.externalMessage = message;\n this.pagerObj.dataBind();\n };\n Page.prototype.appendToElement = function (e) {\n this.parent.element.appendChild(this.element);\n this.parent.setGridPager(this.element);\n this.pagerObj.appendTo(this.element);\n };\n Page.prototype.enableAfterRender = function (e) {\n if (e.module === this.getModuleName() && e.enable) {\n this.render();\n this.appendToElement();\n }\n };\n /**\n * @hidden\n */\n Page.prototype.addEventListener = function () {\n this.handlers = {\n load: this.render,\n end: this.appendToElement,\n ready: this.dataReady,\n complete: this.onActionComplete,\n updateLayout: this.enableAfterRender,\n inboundChange: this.onPropertyChanged,\n keyPress: this.keyPressHandler\n };\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.initialLoad, this.handlers.load, this);\n this.parent.on(events.initialEnd, this.handlers.end, this); //For initial rendering\n this.parent.on(events.dataReady, this.handlers.ready, this);\n this.parent.on(events.pageComplete, this.handlers.complete, this);\n this.parent.on(events.uiUpdate, this.handlers.updateLayout, this);\n this.parent.on(events.inBoundModelChanged, this.handlers.inboundChange, this);\n this.parent.on(events.keyPressed, this.handlers.keyPress, this);\n };\n /**\n * @hidden\n */\n Page.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initialLoad, this.handlers.load);\n this.parent.off(events.initialEnd, this.handlers.end); //For initial rendering\n this.parent.off(events.dataReady, this.handlers.ready);\n this.parent.off(events.pageComplete, this.handlers.complete);\n this.parent.off(events.uiUpdate, this.handlers.updateLayout);\n this.parent.off(events.inBoundModelChanged, this.handlers.inboundChange);\n this.parent.off(events.keyPressed, this.handlers.keyPress);\n };\n /**\n * To destroy the pager\n * @return {void}\n * @hidden\n */\n Page.prototype.destroy = function () {\n this.removeEventListener();\n this.pagerDestroy();\n };\n Page.prototype.pagerDestroy = function () {\n if (this.pagerObj && !this.pagerObj.isDestroyed) {\n this.pagerObj.destroy();\n remove(this.element);\n }\n };\n return Page;\n}());\nexport { Page };\n/**\n * @hidden\n */\nvar keyActions = {\n pageUp: '.e-prev',\n pageDown: '.e-next',\n ctrlAltPageDown: '.e-last',\n ctrlAltPageUp: '.e-first',\n altPageUp: '.e-pp',\n altPageDown: '.e-np'\n};\n","import { EventHandler, closest } from '@syncfusion/ej2-base';\nimport { extend, getValue } from '@syncfusion/ej2-base';\nimport { remove, createElement } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, setValue } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { EditRender } from '../renderer/edit-renderer';\nimport { BooleanEditCell } from '../renderer/boolean-edit-cell';\nimport { DropDownEditCell } from '../renderer/dropdown-edit-cell';\nimport { NumericEditCell } from '../renderer/numeric-edit-cell';\nimport { DefaultEditCell } from '../renderer/default-edit-cell';\nimport { InlineEdit } from './inline-edit';\nimport { BatchEdit } from './batch-edit';\nimport { DialogEdit } from './dialog-edit';\nimport { Dialog } from '@syncfusion/ej2-popups';\nimport { parentsUntil, changeButtonType } from '../base/util';\nimport { FormValidator } from '@syncfusion/ej2-inputs';\nimport { DatePickerEditCell } from '../renderer/datepicker-edit-cell';\nimport { calculateRelativeBasedPosition } from '@syncfusion/ej2-popups';\n/**\n * The `Edit` module is used to handle editing actions.\n */\nvar Edit = /** @class */ (function () {\n /**\n * Constructor for the Grid editing module\n * @hidden\n */\n function Edit(parent, serviceLocator) {\n this.editCellType = {\n 'dropdownedit': DropDownEditCell, 'numericedit': NumericEditCell,\n 'datepickeredit': DatePickerEditCell, 'booleanedit': BooleanEditCell, 'defaultedit': DefaultEditCell\n };\n this.editType = { 'Inline': InlineEdit, 'Normal': InlineEdit, 'Batch': BatchEdit, 'Dialog': DialogEdit };\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n this.l10n = this.serviceLocator.getService('localization');\n this.addEventListener();\n this.updateEditObj();\n this.createAlertDlg();\n this.createConfirmDlg();\n }\n Edit.prototype.updateColTypeObj = function () {\n for (var _i = 0, _a = this.parent.getColumns(); _i < _a.length; _i++) {\n var col = _a[_i];\n col.edit = extend(new this.editCellType[col.editType && this.editCellType[col.editType] ?\n col.editType : 'defaultedit'](this.parent, this.serviceLocator), col.edit || {});\n }\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Edit.prototype.getModuleName = function () {\n return 'edit';\n };\n /**\n * @hidden\n */\n Edit.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName()) {\n return;\n }\n var gObj = this.parent;\n var newProp = e.properties;\n for (var _i = 0, _a = Object.keys(e.properties); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'allowAdding':\n case 'allowDeleting':\n case 'allowEditing':\n if (gObj.editSettings.allowAdding || gObj.editSettings.allowEditing || gObj.editSettings.allowDeleting) {\n this.initialEnd();\n }\n break;\n case 'mode':\n this.updateEditObj();\n gObj.isEdit = false;\n gObj.refresh();\n break;\n }\n }\n };\n Edit.prototype.updateEditObj = function () {\n if (this.editModule) {\n this.editModule.destroy();\n }\n this.renderer = new EditRender(this.parent, this.serviceLocator);\n this.editModule = new this.editType[this.parent.editSettings.mode](this.parent, this.serviceLocator, this.renderer);\n };\n Edit.prototype.initialEnd = function () {\n this.updateColTypeObj();\n };\n Edit.prototype.wireEvents = function () {\n EventHandler.add(this.parent.getContent(), 'touchstart', this.tapEvent, this);\n };\n Edit.prototype.unwireEvents = function () {\n EventHandler.remove(this.parent.getContent(), 'touchstart', this.tapEvent);\n };\n Edit.prototype.tapEvent = function (e) {\n if (this.getUserAgent()) {\n if (!Global.timer) {\n Global.timer = setTimeout(function () {\n Global.timer = null;\n }, 300);\n }\n else {\n clearTimeout(Global.timer);\n Global.timer = null;\n this.parent.notify(events.doubleTap, e);\n }\n }\n };\n Edit.prototype.getUserAgent = function () {\n var userAgent = window.navigator.userAgent.toLowerCase();\n return /iphone|ipod|ipad/.test(userAgent);\n };\n /**\n * Edits any bound record in the Grid by TR element.\n * @param {HTMLTableRowElement} tr - Defines the table row to be edited.\n */\n Edit.prototype.startEdit = function (tr) {\n var gObj = this.parent;\n if (!gObj.editSettings.allowEditing || gObj.isEdit || gObj.editSettings.mode === 'Batch') {\n return;\n }\n if (!gObj.getSelectedRows().length) {\n if (!tr) {\n this.showDialog('EditOperationAlert', this.alertDObj);\n return;\n }\n }\n else if (!tr) {\n tr = gObj.getSelectedRows()[0];\n }\n if (tr.style.display === 'none') {\n return;\n }\n this.editModule.startEdit(tr);\n this.refreshToolbar();\n gObj.element.querySelector('.e-gridpopup').style.display = 'none';\n this.parent.notify('start-edit', {});\n };\n /**\n * Cancels edited state.\n */\n Edit.prototype.closeEdit = function () {\n if (this.parent.editSettings.mode === 'Batch' && this.parent.editSettings.showConfirmDialog\n && this.parent.element.querySelectorAll('.e-updatedtd').length) {\n this.showDialog('CancelEdit', this.dialogObj);\n return;\n }\n this.editModule.closeEdit();\n this.refreshToolbar();\n this.parent.notify('close-edit', {});\n };\n Edit.prototype.refreshToolbar = function () {\n this.parent.notify(events.toolbarRefresh, {});\n };\n /**\n * To adds a new row at the top with the given data. When data is not passed, it will add empty rows.\n * > `editSettings.allowEditing` should be true.\n * @param {Object} data - Defines the new add record data.\n * @param {number} index - Defines the row index to be added\n */\n Edit.prototype.addRecord = function (data, index) {\n if (!this.parent.editSettings.allowAdding) {\n return;\n }\n this.editModule.addRecord(data, index);\n this.refreshToolbar();\n this.parent.notify('start-add', {});\n };\n /**\n * Deletes a record with the given options. If fieldname and data are not given, the Grid will delete the selected record.\n * > `editSettings.allowDeleting` should be true.\n * @param {string} fieldname - Defines the primary key field name of the column.\n * @param {Object} data - Defines the JSON data record to be deleted.\n */\n Edit.prototype.deleteRecord = function (fieldname, data) {\n var gObj = this.parent;\n if (!gObj.editSettings.allowDeleting) {\n return;\n }\n if (!data) {\n if (!gObj.getSelectedRecords().length) {\n this.showDialog('DeleteOperationAlert', this.alertDObj);\n return;\n }\n }\n if (gObj.editSettings.showDeleteConfirmDialog) {\n this.showDialog('ConfirmDelete', this.dialogObj);\n return;\n }\n this.editModule.deleteRecord(fieldname, data);\n };\n /**\n * Deletes a visible row by TR element.\n * @param {HTMLTableRowElement} tr - Defines the table row element.\n */\n Edit.prototype.deleteRow = function (tr) {\n this.deleteRecord(null, this.parent.getCurrentViewRecords()[parseInt(tr.getAttribute('aria-rowindex'), 10)]);\n };\n /**\n * If Grid is in editable state, you can save a record by invoking endEdit.\n */\n Edit.prototype.endEdit = function () {\n if (this.parent.editSettings.mode === 'Batch' && this.parent.editSettings.showConfirmDialog &&\n (isNullOrUndefined(this.formObj) || this.formObj.validate())) {\n this.showDialog('BatchSaveConfirm', this.dialogObj);\n return;\n }\n this.endEditing();\n };\n /**\n * To update the specified cell by given value without changing into edited state.\n * @param {number} rowIndex Defines the row index.\n * @param {string} field Defines the column field.\n * @param {string | number | boolean | Date} value - Defines the value to be changed.\n */\n Edit.prototype.updateCell = function (rowIndex, field, value) {\n this.editModule.updateCell(rowIndex, field, value);\n };\n /**\n * To update the specified row by given values without changing into edited state.\n * @param {number} index Defines the row index.\n * @param {Object} data Defines the data object to be updated.\n */\n Edit.prototype.updateRow = function (index, data) {\n this.editModule.updateRow(index, data);\n };\n /**\n * Resets added, edited, and deleted records in the batch mode.\n */\n Edit.prototype.batchCancel = function () {\n this.closeEdit();\n };\n /**\n * Bulk saves added, edited, and deleted records in the batch mode.\n */\n Edit.prototype.batchSave = function () {\n this.endEdit();\n };\n /**\n * Changes a particular cell into edited state based on the row index and field name provided in the `batch` mode.\n * @param {number} index - Defines row index to edit a particular cell.\n * @param {string} field - Defines the field name of the column to perform batch edit.\n */\n Edit.prototype.editCell = function (index, field) {\n this.editModule.editCell(index, field);\n };\n /**\n * Checks the status of validation at the time of editing. If validation is passed, it returns true.\n * @return {boolean}\n */\n Edit.prototype.editFormValidate = function () {\n if (this.formObj) {\n return this.formObj.validate();\n }\n return false;\n };\n /**\n * Gets the added, edited,and deleted data before bulk save to the DataSource in batch mode.\n * @return {Object}\n */\n Edit.prototype.getBatchChanges = function () {\n return this.editModule.getBatchChanges ? this.editModule.getBatchChanges() : {};\n };\n /**\n * Gets the current value of the edited component.\n */\n Edit.prototype.getCurrentEditCellData = function () {\n var obj = this.getCurrentEditedData(this.formObj.element, {});\n return obj[Object.keys(obj)[0]];\n };\n /**\n * Saves the cell that is currently edited. It does not save the value to the DataSource.\n */\n Edit.prototype.saveCell = function () {\n this.editModule.saveCell();\n };\n Edit.prototype.endEditing = function () {\n this.editModule.endEdit();\n this.refreshToolbar();\n };\n Edit.prototype.showDialog = function (content, obj) {\n obj.content = '
    ' + this.l10n.getConstant(content) + '
    ';\n obj.dataBind();\n obj.show();\n };\n Edit.prototype.getValueFromType = function (col, value) {\n var val = value;\n switch (col.type) {\n case 'number':\n val = !isNaN(parseFloat(value)) ? parseFloat(value) : null;\n break;\n case 'boolean':\n if (col.editType !== 'booleanedit') {\n val = value === this.l10n.getConstant('True') ? true : false;\n }\n break;\n case 'date':\n case 'datetime':\n if (col.editType !== 'datepicker' && value && value.length) {\n val = new Date(value);\n }\n break;\n }\n return val;\n };\n Edit.prototype.destroyToolTip = function () {\n var elements = [].slice.call(this.parent.element.querySelectorAll('.e-griderror'));\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var elem = elements_1[_i];\n remove(elem);\n }\n this.parent.getContent().firstElementChild.style.position = 'relative';\n };\n Edit.prototype.createConfirmDlg = function () {\n this.dialogObj = this.dlgWidget([\n {\n click: this.dlgOk.bind(this),\n buttonModel: { content: this.l10n.getConstant('OKButton'), cssClass: 'e-primary', isPrimary: true }\n },\n {\n click: this.dlgCancel.bind(this),\n buttonModel: { cssClass: 'e-flat', content: this.l10n.getConstant('CancelButton') }\n }\n ], 'EditConfirm');\n };\n Edit.prototype.createAlertDlg = function () {\n this.alertDObj = this.dlgWidget([\n {\n click: this.alertClick.bind(this), buttonModel: { content: this.l10n.getConstant('OKButton'), cssClass: 'e-flat', isPrimary: true }\n }\n ], 'EditAlert');\n };\n Edit.prototype.alertClick = function () {\n this.alertDObj.hide();\n };\n Edit.prototype.dlgWidget = function (btnOptions, name) {\n var div = createElement('div', { id: this.parent.element.id + name });\n this.parent.element.appendChild(div);\n var options = {\n showCloseIcon: false,\n isModal: true,\n visible: false,\n closeOnEscape: true,\n target: this.parent.element,\n width: '320px',\n animationSettings: { effect: 'None' }\n };\n options.buttons = btnOptions;\n var obj = new Dialog(options);\n obj.appendTo(div);\n changeButtonType(obj.element);\n return obj;\n };\n Edit.prototype.dlgCancel = function () {\n this.dialogObj.hide();\n };\n Edit.prototype.dlgOk = function (e) {\n switch (this.dialogObj.element.querySelector('.e-dlg-content').firstElementChild.innerText) {\n case this.l10n.getConstant('ConfirmDelete'):\n this.editModule.deleteRecord();\n break;\n case this.l10n.getConstant('CancelEdit'):\n this.editModule.closeEdit();\n break;\n case this.l10n.getConstant('BatchSaveConfirm'):\n this.endEditing();\n break;\n case this.l10n.getConstant('BatchSaveLostChanges'):\n this.executeAction();\n break;\n }\n this.dlgCancel();\n };\n /**\n * @hidden\n */\n Edit.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.inBoundModelChanged, this.onPropertyChanged, this);\n this.parent.on(events.initialEnd, this.initialEnd, this);\n this.parent.on(events.keyPressed, this.keyPressHandler, this);\n this.parent.on(events.autoCol, this.updateColTypeObj, this);\n this.parent.on(events.tooltipDestroy, this.destroyToolTip, this);\n this.parent.on(events.preventBatch, this.preventBatch, this);\n this.parent.on(events.destroyForm, this.destroyForm, this);\n this.actionBeginFunction = this.onActionBegin.bind(this);\n this.actionCompleteFunction = this.actionComplete.bind(this);\n this.parent.addEventListener(events.actionBegin, this.actionBeginFunction);\n this.parent.addEventListener(events.actionComplete, this.actionCompleteFunction);\n this.parent.on(events.initialEnd, this.wireEvents, this);\n };\n /**\n * @hidden\n */\n Edit.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.inBoundModelChanged, this.onPropertyChanged);\n this.parent.off(events.initialEnd, this.initialEnd);\n this.parent.off(events.keyPressed, this.keyPressHandler);\n this.parent.off(events.autoCol, this.updateColTypeObj);\n this.parent.off(events.tooltipDestroy, this.destroyToolTip);\n this.parent.off(events.preventBatch, this.preventBatch);\n this.parent.off(events.destroyForm, this.destroyForm);\n this.parent.removeEventListener(events.actionComplete, this.actionCompleteFunction);\n this.parent.removeEventListener(events.actionBegin, this.actionBeginFunction);\n this.parent.off(events.initialEnd, this.unwireEvents);\n };\n Edit.prototype.actionComplete = function (e) {\n var actions = ['add', 'beginEdit', 'save', 'delete', 'cancel'];\n if (actions.indexOf(e.requestType) < 0) {\n this.parent.isEdit = false;\n }\n this.refreshToolbar();\n };\n /**\n * @hidden\n */\n Edit.prototype.getCurrentEditedData = function (form, editedData) {\n var gObj = this.parent;\n var inputs = [].slice.call(form.querySelectorAll('.e-field'));\n for (var i = 0, len = inputs.length; i < len; i++) {\n var col = gObj.getColumnByUid(inputs[i].getAttribute('e-mappinguid'));\n var value = void 0;\n if (col && col.field) {\n var temp = col.edit.read;\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n }\n if (col.type !== 'checkbox') {\n value = gObj.editModule.getValueFromType(col, col.edit.read(inputs[i]));\n }\n else {\n value = inputs[i].checked;\n }\n setValue(col.field, value, editedData);\n }\n }\n return editedData;\n };\n /**\n * @hidden\n */\n Edit.prototype.onActionBegin = function (e) {\n var restrictedRequestTypes = ['filterafteropen', 'filterbeforeopen', 'filterchoicerequest', 'save'];\n if (this.parent.editSettings.mode !== 'Batch' && this.formObj && !this.formObj.isDestroyed\n && restrictedRequestTypes.indexOf(e.requestType) === -1) {\n this.destroyForm();\n this.destroyWidgets();\n }\n };\n /**\n * @hidden\n */\n Edit.prototype.destroyWidgets = function (cols) {\n cols = cols ? cols : this.parent.getColumns();\n for (var _i = 0, cols_1 = cols; _i < cols_1.length; _i++) {\n var col = cols_1[_i];\n if (col.edit.destroy) {\n col.edit.destroy();\n }\n }\n };\n /**\n * @hidden\n */\n Edit.prototype.destroyForm = function () {\n this.destroyToolTip();\n if (this.formObj && !this.formObj.isDestroyed) {\n this.formObj.destroy();\n }\n this.destroyToolTip();\n };\n /**\n * To destroy the editing.\n * @return {void}\n * @hidden\n */\n Edit.prototype.destroy = function () {\n this.destroyForm();\n this.removeEventListener();\n var elem = this.dialogObj.element;\n this.dialogObj.destroy();\n remove(elem);\n elem = this.alertDObj.element;\n this.alertDObj.destroy();\n remove(elem);\n this.unwireEvents();\n if (this.editModule) {\n this.editModule.destroy();\n }\n };\n Edit.prototype.keyPressHandler = function (e) {\n switch (e.action) {\n case 'insert':\n this.addRecord();\n break;\n case 'delete':\n if ((e.target.tagName !== 'INPUT' || e.target.classList.contains('e-checkselect'))\n && !document.querySelector('.e-popup-open')) {\n this.deleteRecord();\n }\n break;\n case 'f2':\n this.startEdit();\n break;\n case 'enter':\n if (!parentsUntil(e.target, '.e-unboundcelldiv') && this.parent.editSettings.mode !== 'Batch' &&\n (parentsUntil(e.target, 'e-gridcontent') || (this.parent.frozenRows\n && parentsUntil(e.target, 'e-headercontent')))\n && !document.querySelectorAll('.e-popup-open').length) {\n e.preventDefault();\n this.endEdit();\n }\n break;\n case 'escape':\n this.closeEdit();\n break;\n }\n };\n Edit.prototype.preventBatch = function (args) {\n this.preventObj = args;\n this.showDialog('BatchSaveLostChanges', this.dialogObj);\n };\n Edit.prototype.executeAction = function () {\n this.preventObj.handler.call(this.preventObj.instance, this.preventObj.arg1, this.preventObj.arg2, this.preventObj.arg3, this.preventObj.arg4, this.preventObj.arg5, this.preventObj.arg6, this.preventObj.arg7);\n };\n /**\n * @hidden\n */\n Edit.prototype.applyFormValidation = function (cols) {\n var gObj = this.parent;\n var frzCols = gObj.getFrozenColumns();\n var form = gObj.element.querySelector('.e-gridform');\n var mForm = gObj.element.querySelectorAll('.e-gridform')[1];\n var rules = {};\n var mRules = {};\n cols = cols ? cols : gObj.columns;\n for (var _i = 0, cols_2 = cols; _i < cols_2.length; _i++) {\n var col = cols_2[_i];\n if (col.validationRules && form.querySelectorAll('#' + gObj.element.id + col.field).length) {\n rules[col.field] = col.validationRules;\n }\n else if (frzCols && col.validationRules\n && mForm.querySelectorAll('#' + gObj.element.id + col.field).length) {\n mRules[col.field] = col.validationRules;\n }\n }\n this.parent.editModule.formObj = this.createFormObj(form, rules);\n if (frzCols && this.parent.editSettings.mode !== 'Dialog') {\n this.parent.editModule.mFormObj = this.createFormObj(mForm, mRules);\n }\n };\n Edit.prototype.createFormObj = function (form, rules) {\n var _this = this;\n return new FormValidator(form, {\n rules: rules,\n validationComplete: function (args) {\n _this.validationComplete(args);\n },\n customPlacement: function (inputElement, error) {\n _this.valErrorPlacement(inputElement, error);\n }\n });\n };\n Edit.prototype.valErrorPlacement = function (inputElement, error) {\n if (this.parent.isEdit) {\n var id = error.getAttribute('for');\n var elem = this.getElemTable(inputElement).querySelector('#' + id + '_Error');\n if (!elem) {\n this.createTooltip(inputElement, error, id, '');\n }\n else {\n elem.querySelector('.e-tip-content').innerHTML = error.innerHTML;\n }\n }\n };\n Edit.prototype.getElemTable = function (inputElement) {\n var isFHdr;\n if (this.parent.editSettings.mode !== 'Dialog') {\n isFHdr = (this.parent.frozenRows && this.parent.frozenRows\n > (parseInt(closest(inputElement, '.e-row').getAttribute('aria-rowindex'), 10) || 0));\n }\n return this.parent.editSettings.mode !== 'Dialog' ? isFHdr ? this.parent.getHeaderTable() : this.parent.getContentTable() :\n this.parent.element.querySelector('#' + this.parent.element.id + '_dialogEdit_wrapper');\n };\n Edit.prototype.validationComplete = function (args) {\n if (this.parent.isEdit) {\n var elem = this.getElemTable(args.element).querySelector('#' + args.inputName + '_Error');\n if (elem) {\n if (args.status === 'failure') {\n elem.style.display = '';\n }\n else {\n elem.style.display = 'none';\n }\n }\n }\n };\n Edit.prototype.createTooltip = function (element, error, name, display) {\n var gcontent = this.parent.getContent().firstElementChild;\n var isScroll = gcontent.scrollHeight > gcontent.clientHeight;\n var isInline = this.parent.editSettings.mode !== 'Dialog';\n var isFHdr;\n if (isInline) {\n isFHdr = (this.parent.frozenRows && this.parent.frozenRows\n > (parseInt(closest(element, '.e-row').getAttribute('aria-rowindex'), 10) || 0));\n }\n var fCont = this.parent.getContent().querySelector('.e-frozencontent');\n var table = isInline ?\n (isFHdr ? this.parent.getHeaderTable() : this.parent.getContentTable()) :\n this.parent.element.querySelector('#' + this.parent.element.id + '_dialogEdit_wrapper').querySelector('.e-dlg-content');\n var client = table.getBoundingClientRect();\n var left = isInline ?\n this.parent.element.getBoundingClientRect().left : client.left;\n var input = parentsUntil(element, 'e-rowcell');\n var inputClient = input.getBoundingClientRect();\n var td = closest(element, 'td').getBoundingClientRect();\n var div = createElement('div', {\n className: 'e-tooltip-wrap e-control e-popup e-griderror',\n id: name + '_Error',\n styles: 'display:' + display + ';top:' +\n ((isFHdr ? inputClient.top + inputClient.height : inputClient.bottom - client.top\n - (this.parent.getFrozenColumns() ? fCont.scrollTop : 0)) + table.scrollTop + 9) + 'px;left:' +\n (inputClient.left - left + table.scrollLeft + inputClient.width / 2) + 'px;' +\n 'max-width:' + td.width + 'px;text-align:center;'\n });\n var content = createElement('div', { className: 'e-tip-content' });\n content.appendChild(error);\n var arrow = createElement('div', { className: 'e-arrow-tip e-tip-top' });\n arrow.appendChild(createElement('div', { className: 'e-arrow-tip-outer e-tip-top' }));\n arrow.appendChild(createElement('div', { className: 'e-arrow-tip-inner e-tip-top' }));\n div.appendChild(content);\n div.appendChild(arrow);\n table.appendChild(div);\n var lineHeight = parseInt(document.defaultView.getComputedStyle(div, null).getPropertyValue('font-size'), 10);\n if (div.getBoundingClientRect().width < td.width &&\n div.querySelector('label').getBoundingClientRect().height / (lineHeight * 1.2) >= 2) {\n div.style.width = div.style.maxWidth;\n }\n div.style.left = (parseInt(div.style.left, 10) - div.offsetWidth / 2) + 'px';\n if (!isScroll && isInline && !this.parent.allowPaging) {\n gcontent.style.position = 'static';\n var pos = calculateRelativeBasedPosition(input, div);\n div.style.top = pos.top + inputClient.height + 9 + 'px';\n }\n };\n return Edit;\n}());\nexport { Edit };\n/** @hidden */\nexport var Global;\n(function (Global) {\n Global.timer = null;\n})(Global || (Global = {}));\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { isNullOrUndefined, getValue } from '@syncfusion/ej2-base';\nimport { createElement, attributes } from '@syncfusion/ej2-base';\nimport { CellRenderer } from './cell-renderer';\nimport { Input } from '@syncfusion/ej2-inputs';\n/**\n * FilterCellRenderer class which responsible for building filter cell.\n * @hidden\n */\nvar FilterCellRenderer = /** @class */ (function (_super) {\n __extends(FilterCellRenderer, _super);\n function FilterCellRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.element = createElement('TH', { className: 'e-filterbarcell' });\n return _this;\n }\n /**\n * Function to return the wrapper for the TH content.\n * @returns string\n */\n FilterCellRenderer.prototype.getGui = function () {\n return createElement('div');\n };\n /**\n * Function to render the cell content based on Column object.\n * @param {Cell} cell\n * @param {Object} data\n */\n FilterCellRenderer.prototype.render = function (cell, data) {\n var tr = this.parent.element.querySelector('.e-filterbar');\n var node = this.element.cloneNode();\n var innerDIV = this.getGui();\n var input;\n var column = cell.column;\n tr.appendChild(node);\n node.setAttribute('e-mappinguid', column.uid);\n if (column.type !== 'checkbox') {\n if ((isNullOrUndefined(column.allowFiltering) || column.allowFiltering) && !isNullOrUndefined(column.filterBarTemplate)) {\n node.classList.add('e-fltrtemp');\n attributes(innerDIV, {\n 'class': 'e-fltrtempdiv'\n });\n if (isNullOrUndefined(column.filterBarTemplate.create)) {\n input = createElement('input', {\n id: column.field + '_filterBarcell', className: 'e-filterUi_input e-filtertext e-fltrTemp',\n attrs: { type: 'search', title: column.headerText }\n });\n innerDIV.appendChild(input);\n }\n else {\n var args = { column: column, node: Element };\n var temp = column.filterBarTemplate.create;\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n }\n input = temp(args);\n if (typeof input === 'string') {\n var div = createElement('div');\n div.innerHTML = input;\n input = div.firstChild;\n }\n attributes(innerDIV, {\n class: 'e-filterUi_input e-filtertext e-fltrTemp',\n title: column.headerText,\n id: column.field + '_filterBarcell',\n });\n innerDIV.appendChild(input);\n }\n }\n else {\n attributes(innerDIV, {\n 'class': 'e-filterdiv e-fltrinputdiv'\n });\n input = createElement('input', {\n id: column.field + '_filterBarcell', className: 'e-filtertext',\n attrs: {\n type: 'search', title: column.headerText + cell.attributes.title,\n value: data[cell.column.field] ? data[cell.column.field] : '', role: 'search'\n }\n });\n innerDIV.appendChild(input);\n Input.createInput({\n element: input, floatLabelType: 'Never',\n properties: {\n enableRtl: this.parent.enableRtl, showClearButton: true\n }\n });\n }\n //TODO: apply intial filtering\n if (column.allowFiltering === false || column.field === '' || isNullOrUndefined(column.field)) {\n input.setAttribute('disabled', 'true');\n input.classList.add('e-disable');\n }\n if (!column.visible) {\n node.classList.add('e-hide');\n }\n this.appendHtml(node, innerDIV);\n if ((isNullOrUndefined(column.allowFiltering) || column.allowFiltering) && !isNullOrUndefined(column.filterBarTemplate)) {\n var templateWrite = column.filterBarTemplate.write;\n var args = { element: input, column: column };\n if (typeof templateWrite === 'string') {\n templateWrite = getValue(templateWrite, window);\n }\n templateWrite.call(this, args);\n }\n }\n return node;\n };\n /**\n * Function to specifies how the result content to be placed in the cell.\n * @param {Element} node\n * @param {string|Element} innerHTML\n * @returns Element\n */\n FilterCellRenderer.prototype.appendHtml = function (node, innerHtml) {\n node.appendChild(innerHtml);\n return node;\n };\n return FilterCellRenderer;\n}(CellRenderer));\nexport { FilterCellRenderer };\n","import { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { createElement } from '@syncfusion/ej2-base';\nimport { Query, DataManager } from '@syncfusion/ej2-data';\n/**\n * `filter operators` render boolean column.\n * @hidden\n */\nvar FlMenuOptrUI = /** @class */ (function () {\n function FlMenuOptrUI(parent, customFltrOperators, serviceLocator, filterSettings) {\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n this.filterSettings = filterSettings;\n this.customFilterOperators = customFltrOperators;\n }\n /**\n * @hidden\n */\n FlMenuOptrUI.prototype.renderOperatorUI = function (dlgConetntEle, target, column, dlgObj) {\n this.dialogObj = dlgObj;\n var optr = column.type + 'Operator';\n this.optrData = this.customOptr = (!isNullOrUndefined(this.parent.filterSettings.operators) &&\n !isNullOrUndefined(this.parent.filterSettings.operators[optr])) ?\n this.parent.filterSettings.operators[optr] : this.customFilterOperators[optr];\n var dropDatasource = this.customOptr;\n var selectedValue = this.dropSelectedVal(column, optr);\n var optrDiv = createElement('div', { className: 'e-flm_optrdiv' });\n dlgConetntEle.appendChild(optrDiv);\n var optrInput = createElement('input', { id: column.uid + '-floptr' });\n optrDiv.appendChild(optrInput);\n this.dropOptr = new DropDownList({\n dataSource: dropDatasource,\n fields: { text: 'text', value: 'value' },\n open: this.dropDownOpen.bind(this),\n text: selectedValue\n });\n this.dropOptr.appendTo('#' + column.uid + '-floptr');\n };\n FlMenuOptrUI.prototype.dropDownOpen = function (args) {\n args.popup.element.style.zIndex = (this.dialogObj.zIndex + 1).toString();\n };\n FlMenuOptrUI.prototype.dropSelectedVal = function (col, optr) {\n var selValue = '';\n var columns = this.parent.filterSettings.columns;\n for (var _i = 0, columns_1 = columns; _i < columns_1.length; _i++) {\n var column = columns_1[_i];\n if (col.field === column.field || (col.isForeignColumn() && col.foreignKeyValue === column.field)) {\n var selectedField = new DataManager(this.optrData).executeLocal(new Query().where('value', 'equal', column.operator));\n selValue = !isNullOrUndefined(selectedField[0]) ? selectedField[0].text : '';\n }\n }\n if (selValue === '') {\n selValue = this.optrData[0].text;\n }\n return selValue;\n };\n /**\n * @hidden\n */\n FlMenuOptrUI.prototype.getFlOperator = function () {\n return this.dropOptr.value;\n };\n return FlMenuOptrUI;\n}());\nexport { FlMenuOptrUI };\n","import { AutoComplete } from '@syncfusion/ej2-dropdowns';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { createElement, Browser, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { getZIndexCalcualtion } from '../base/util';\n/**\n * `string filterui` render string column.\n * @hidden\n */\nvar StringFilterUI = /** @class */ (function () {\n function StringFilterUI(parent, serviceLocator, filterSettings) {\n this.parent = parent;\n this.serLocator = serviceLocator;\n this.filterSettings = filterSettings;\n }\n StringFilterUI.prototype.create = function (args) {\n var data;\n var floptr;\n this.instance = createElement('input', { className: 'e-flmenu-input', id: 'strui-' + args.column.uid });\n args.target.appendChild(this.instance);\n this.dialogObj = args.dialogObj;\n this.actObj = new AutoComplete(this.getAutoCompleteOptions(args));\n this.actObj.appendTo(this.instance);\n };\n StringFilterUI.prototype.getAutoCompleteOptions = function (args) {\n var _this = this;\n var isForeignColumn = args.column.isForeignColumn();\n var dataSource = isForeignColumn ? args.column.dataSource : this.parent.dataSource;\n var fields = { value: isForeignColumn ? args.column.foreignKeyValue : args.column.field };\n return {\n dataSource: dataSource instanceof DataManager ? dataSource : new DataManager(dataSource),\n fields: fields,\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl,\n sortOrder: 'Ascending',\n open: this.openPopup.bind(this),\n cssClass: 'e-popup-flmenu',\n focus: function () {\n _this.actObj.filterType = args.getOptrInstance.getFlOperator();\n },\n autofill: true,\n placeholder: args.localizeText.getConstant('EnterValue'),\n actionComplete: function (e) {\n e.result = e.result.filter(function (obj, index, arr) {\n return arr.map(function (mapObj) {\n return mapObj[_this.actObj.fields.value];\n }).indexOf(obj[_this.actObj.fields.value]) === index;\n });\n }\n };\n };\n StringFilterUI.prototype.write = function (args) {\n var columns = this.filterSettings.columns;\n if (args.filteredValue !== '' && !isNullOrUndefined(args.filteredValue)) {\n var struiObj = document.querySelector('#strui-' + args.column.uid).ej2_instances[0];\n struiObj.value = args.filteredValue;\n }\n };\n StringFilterUI.prototype.read = function (element, column, filterOptr, filterObj) {\n var actuiObj = document.querySelector('#strui-' + column.uid).ej2_instances[0];\n if (Browser.isDevice) {\n actuiObj.hidePopup();\n actuiObj.focusOut();\n }\n var filterValue = actuiObj.value;\n if (isNullOrUndefined(filterValue) || filterValue === '') {\n filterValue = null;\n }\n filterObj.filterByColumn(column.field, filterOptr, filterValue, 'and', false);\n };\n StringFilterUI.prototype.openPopup = function (args) {\n getZIndexCalcualtion(args, this.dialogObj);\n };\n return StringFilterUI;\n}());\nexport { StringFilterUI };\n","import { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { createElement } from '@syncfusion/ej2-base';\n/**\n * `numberfilterui` render number column.\n * @hidden\n */\nvar NumberFilterUI = /** @class */ (function () {\n function NumberFilterUI(parent, serviceLocator, filterSettings) {\n this.filterSettings = filterSettings;\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n }\n NumberFilterUI.prototype.create = function (args) {\n this.instance = createElement('input', { className: 'e-flmenu-input', id: 'numberui-' + args.column.uid });\n args.target.appendChild(this.instance);\n this.numericTxtObj = new NumericTextBox({\n format: args.column.format,\n locale: this.parent.locale,\n cssClass: 'e-popup-flmenu',\n placeholder: args.localizeText.getConstant('EnterValue'),\n enableRtl: this.parent.enableRtl,\n });\n this.numericTxtObj.appendTo(this.instance);\n };\n NumberFilterUI.prototype.write = function (args) {\n var numberuiObj = document.querySelector('#numberui-' + args.column.uid).ej2_instances[0];\n numberuiObj.value = args.filteredValue;\n };\n NumberFilterUI.prototype.read = function (element, column, filterOptr, filterObj) {\n var numberuiObj = document.querySelector('#numberui-' + column.uid).ej2_instances[0];\n var filterValue = numberuiObj.value;\n filterObj.filterByColumn(column.field, filterOptr, filterValue, 'and', true);\n };\n return NumberFilterUI;\n}());\nexport { NumberFilterUI };\n","import { getZIndexCalcualtion } from '../base/util';\nimport { Query, DataManager, DataUtil } from '@syncfusion/ej2-data';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * `boolfilterui` render boolean column.\n * @hidden\n */\nvar BooleanFilterUI = /** @class */ (function () {\n function BooleanFilterUI(parent, serviceLocator, filterSettings) {\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n this.filterSettings = filterSettings;\n }\n BooleanFilterUI.prototype.create = function (args) {\n var isForeignColumn = args.column.isForeignColumn();\n var dataSource = isForeignColumn ? args.column.dataSource : this.parent.dataSource;\n var fields = isForeignColumn ? args.column.foreignKeyValue : args.column.field;\n this.elem = createElement('input', { className: 'e-flmenu-input', id: 'bool-ui-' + args.column.uid });\n args.target.appendChild(this.elem);\n this.dialogObj = args.dialogObj;\n this.dropInstance = new DropDownList({\n dataSource: dataSource instanceof DataManager ?\n dataSource : new DataManager(dataSource),\n query: new Query().select(fields),\n fields: { text: fields, value: fields },\n placeholder: args.localizeText.getConstant('SelectValue'),\n cssClass: 'e-popup-flmenu',\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl,\n open: this.openPopup.bind(this),\n actionComplete: function (e) {\n e.result = DataUtil.distinct(e.result, fields, true);\n }\n });\n this.dropInstance.appendTo(this.elem);\n };\n BooleanFilterUI.prototype.write = function (args) {\n var drpuiObj = document.querySelector('#bool-ui-' + args.column.uid).ej2_instances[0];\n if (!isNullOrUndefined(args.filteredValue)) {\n drpuiObj.text = args.filteredValue;\n }\n };\n BooleanFilterUI.prototype.read = function (element, column, filterOptr, filterObj) {\n var drpuiObj = document.querySelector('#bool-ui-' + column.uid).ej2_instances[0];\n var filterValue = drpuiObj.value;\n filterObj.filterByColumn(column.field, filterOptr, filterValue, 'and', false);\n };\n BooleanFilterUI.prototype.openPopup = function (args) {\n getZIndexCalcualtion(args, this.dialogObj);\n };\n return BooleanFilterUI;\n}());\nexport { BooleanFilterUI };\n","import { DatePicker } from '@syncfusion/ej2-calendars';\nimport { createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Internationalization } from '@syncfusion/ej2-base';\n/**\n * `datefilterui` render date column.\n * @hidden\n */\nvar DateFilterUI = /** @class */ (function () {\n function DateFilterUI(parent, serviceLocator, filterSettings) {\n this.parent = parent;\n this.locator = serviceLocator;\n this.fltrSettings = filterSettings;\n }\n DateFilterUI.prototype.create = function (args) {\n var intl = new Internationalization();\n var colFormat = args.column.format;\n var format = intl.getDatePattern({ type: 'date', skeleton: colFormat }, false);\n this.dialogObj = args.dialogObj;\n this.inputElem = createElement('input', { className: 'e-flmenu-input', id: 'dateui-' + args.column.uid });\n args.target.appendChild(this.inputElem);\n this.datePickerObj = new DatePicker({\n format: format,\n cssClass: 'e-popup-flmenu',\n placeholder: args.localizeText.getConstant('ChooseDate'),\n width: '100%',\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl,\n open: this.openPopup.bind(this),\n });\n this.datePickerObj.appendTo(this.inputElem);\n };\n DateFilterUI.prototype.write = function (args) {\n var columns = this.fltrSettings.columns;\n var dateuiObj = document.querySelector('#dateui-' + args.column.uid).ej2_instances[0];\n dateuiObj.value = !isNullOrUndefined(args.filteredValue) ? new Date(args.filteredValue) : null;\n };\n DateFilterUI.prototype.read = function (element, column, filterOptr, filterObj) {\n var dateuiObj = document.querySelector('#dateui-' + column.uid).ej2_instances[0];\n var filterValue = dateuiObj.value;\n filterValue = isNullOrUndefined(filterValue) ? null : filterValue;\n filterObj.filterByColumn(column.field, filterOptr, filterValue, 'and', true);\n };\n DateFilterUI.prototype.openPopup = function (args) {\n args.popup.element.style.zIndex = (this.dialogObj.zIndex + 1).toString();\n };\n return DateFilterUI;\n}());\nexport { DateFilterUI };\n","import { isNullOrUndefined, getValue, remove } from '@syncfusion/ej2-base';\nimport { createElement, Browser } from '@syncfusion/ej2-base';\nimport { Dialog } from '@syncfusion/ej2-popups';\nimport { FlMenuOptrUI } from './filter-menu-operator';\nimport { StringFilterUI } from './string-filter-ui';\nimport { NumberFilterUI } from './number-filter-ui';\nimport { BooleanFilterUI } from './boolean-filter-ui';\nimport { DateFilterUI } from './date-filter-ui';\nimport { getFilterMenuPostion, parentsUntil } from '../base/util';\nimport * as events from '../base/constant';\n/**\n * `filter menu` render boolean column.\n * @hidden\n */\nvar FilterMenuRenderer = /** @class */ (function () {\n function FilterMenuRenderer(parent, filterSettings, serviceLocator, customFltrOperators, fltrObj) {\n this.isDialogOpen = false;\n this.colTypes = {\n 'string': StringFilterUI, 'number': NumberFilterUI, 'date': DateFilterUI, 'boolean': BooleanFilterUI, 'datetime': DateFilterUI\n };\n this.parent = parent;\n this.filterSettings = filterSettings;\n this.serviceLocator = serviceLocator;\n this.customFilterOperators = customFltrOperators;\n this.filterObj = fltrObj;\n this.flMuiObj = new FlMenuOptrUI(this.parent, this.customFilterOperators, this.serviceLocator);\n this.l10n = this.serviceLocator.getService('localization');\n }\n FilterMenuRenderer.prototype.openDialog = function (args) {\n this.col = this.parent.getColumnByField(args.field);\n if (isNullOrUndefined(this.col.filter) || (isNullOrUndefined(this.col.filter.type) || this.col.filter.type === 'Menu')) {\n this.renderDlgContent(args.target, this.col);\n }\n };\n FilterMenuRenderer.prototype.closeDialog = function () {\n var elem = document.getElementById(this.dlgObj.element.id);\n if (this.dlgObj && !this.dlgObj.isDestroyed && elem) {\n this.parent.notify(events.filterMenuClose, { field: this.col.field });\n this.isDialogOpen = false;\n this.dlgObj.destroy();\n remove(elem);\n }\n };\n FilterMenuRenderer.prototype.renderDlgContent = function (target, column) {\n var args = {\n requestType: events.filterBeforeOpen, filterModel: this,\n columnName: column.field, columnType: column.type\n };\n this.parent.trigger(events.actionBegin, args);\n var mainDiv = createElement('div', { className: 'e-flmenu-maindiv', id: column.uid + '-flmenu' });\n this.dlgDiv = createElement('div', { className: 'e-flmenu', id: column.uid + '-flmdlg' });\n this.parent.element.appendChild(this.dlgDiv);\n this.dlgObj = new Dialog({\n showCloseIcon: false,\n closeOnEscape: false,\n locale: this.parent.locale,\n visible: false,\n enableRtl: this.parent.enableRtl,\n created: this.dialogCreated.bind(this, target, column),\n position: this.parent.element.classList.contains('e-device') ? { X: 'center', Y: 'center' } : { X: '', Y: '' },\n target: this.parent.element.classList.contains('e-device') ? document.body : this.parent.element,\n buttons: [{\n click: this.filterBtnClick.bind(this, column),\n buttonModel: {\n content: this.l10n.getConstant('FilterButton'), isPrimary: true, cssClass: 'e-flmenu-okbtn'\n }\n },\n {\n click: this.clearBtnClick.bind(this, column),\n buttonModel: { content: this.l10n.getConstant('ClearButton'), cssClass: 'e-flmenu-cancelbtn' }\n }],\n content: mainDiv,\n width: (!isNullOrUndefined(parentsUntil(target, 'e-bigger'))) || this.parent.element.classList.contains('e-device') ? 260 : 250,\n animationSettings: { effect: 'None' },\n cssClass: 'e-filter-popup'\n });\n this.dlgObj.appendTo(this.dlgDiv);\n };\n FilterMenuRenderer.prototype.dialogCreated = function (target, column) {\n if (!Browser.isDevice) {\n getFilterMenuPostion(target, this.dlgObj, this.parent);\n }\n this.renderFilterUI(target, column);\n this.parent.notify(events.filterDialogCreated, {});\n this.dlgObj.element.style.maxHeight = '350px';\n this.dlgObj.show();\n this.writeMethod(column, this.dlgObj.element.querySelector('#' + column.uid + '-flmenu'));\n var args = {\n requestType: events.filterAfterOpen,\n filterModel: this, columnName: column.field, columnType: column.type\n };\n this.isDialogOpen = true;\n this.parent.trigger(events.actionComplete, args);\n };\n FilterMenuRenderer.prototype.renderFilterUI = function (target, col) {\n var dlgConetntEle = this.dlgObj.element.querySelector('.e-flmenu-maindiv');\n this.renderOperatorUI(dlgConetntEle, target, col);\n this.renderFlValueUI(dlgConetntEle, target, col);\n };\n FilterMenuRenderer.prototype.renderOperatorUI = function (dlgConetntEle, target, column) {\n this.flMuiObj.renderOperatorUI(dlgConetntEle, target, column, this.dlgObj);\n };\n FilterMenuRenderer.prototype.renderFlValueUI = function (dlgConetntEle, target, column) {\n var valueDiv = createElement('div', { className: 'e-flmenu-valuediv' });\n dlgConetntEle.appendChild(valueDiv);\n var args = { target: valueDiv, column: column, getOptrInstance: this.flMuiObj, dialogObj: this.dlgObj };\n var instanceofFilterUI = new this.colTypes[column.type](this.parent, this.serviceLocator, this.parent.filterSettings);\n if (!isNullOrUndefined(column.filter) && !isNullOrUndefined(column.filter.ui)\n && !isNullOrUndefined(column.filter.ui.create)) {\n var temp = column.filter.ui.create;\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n }\n temp({\n column: column, target: valueDiv,\n getOptrInstance: this.flMuiObj, dialogObj: this.dlgObj\n });\n }\n else {\n instanceofFilterUI.create({\n column: column, target: valueDiv,\n getOptrInstance: this.flMuiObj, localizeText: this.l10n, dialogObj: this.dlgObj\n });\n }\n };\n FilterMenuRenderer.prototype.writeMethod = function (col, dlgContentEle) {\n var flValue;\n var target = dlgContentEle.querySelector('.e-flmenu-valinput');\n var instanceofFilterUI = new this.colTypes[col.type](this.parent, this.serviceLocator, this.parent.filterSettings);\n var columns = this.filterSettings.columns;\n for (var _i = 0, columns_1 = columns; _i < columns_1.length; _i++) {\n var column = columns_1[_i];\n if (col.field === column.field || col.foreignKeyValue === column.field) {\n flValue = column.value;\n }\n }\n if (!isNullOrUndefined(col.filter) && !isNullOrUndefined(col.filter.ui)\n && !isNullOrUndefined(col.filter.ui.write)) {\n var temp = col.filter.ui.write;\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n }\n temp({ column: col, target: target, parent: this.parent, filteredValue: flValue });\n }\n else {\n instanceofFilterUI.write({ column: col, target: target, parent: this.parent, filteredValue: flValue });\n }\n };\n FilterMenuRenderer.prototype.filterBtnClick = function (col) {\n var flValue;\n var flOptrValue;\n var targ = this.dlgObj.element.querySelector('.e-flmenu-valuediv input');\n flOptrValue = this.flMuiObj.getFlOperator();\n var instanceofFilterUI = new this.colTypes[col.type](this.parent, this.serviceLocator, this.parent.filterSettings);\n if (!isNullOrUndefined(col.filter) &&\n !isNullOrUndefined(col.filter.ui) && !isNullOrUndefined(col.filter.ui.read)) {\n var temp = col.filter.ui.read;\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n }\n flValue = temp({ element: targ, column: col, operator: flOptrValue, fltrObj: this.filterObj });\n }\n else {\n instanceofFilterUI.read(targ, col, flOptrValue, this.filterObj);\n }\n var iconClass = this.parent.showColumnMenu ? '.e-columnmenu' : '.e-icon-filter';\n var column = this.parent.element.querySelector('[e-mappinguid=\"' + col.uid + '\"]').parentElement;\n var flIcon = column.querySelector(iconClass);\n if (flIcon) {\n flIcon.classList.add('e-filtered');\n }\n this.closeDialog();\n };\n FilterMenuRenderer.prototype.clearBtnClick = function (column) {\n this.filterObj.removeFilteredColsByField(column.field);\n this.closeDialog();\n var iconClass = this.parent.showColumnMenu ? '.e-columnmenu' : '.e-icon-filter';\n var col = this.parent.element.querySelector('[e-mappinguid=\"' + column.uid + '\"]').parentElement;\n var flIcon = col.querySelector(iconClass);\n if (flIcon) {\n flIcon.classList.remove('e-filtered');\n }\n };\n FilterMenuRenderer.prototype.destroy = function () {\n this.closeDialog();\n };\n return FilterMenuRenderer;\n}());\nexport { FilterMenuRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { createElement, EventHandler, remove, Browser } from '@syncfusion/ej2-base';\nimport { parentsUntil } from '../base/util';\nimport { ContextMenu } from '@syncfusion/ej2-navigations';\nimport { CheckBoxFilter } from '../actions/checkbox-filter';\nimport { isNullOrUndefined, } from '@syncfusion/ej2-base';\nimport { Internationalization } from '@syncfusion/ej2-base';\nimport { Query, DataManager, Predicate } from '@syncfusion/ej2-data';\nimport { Dialog } from '@syncfusion/ej2-popups';\nimport { DropDownList, AutoComplete } from '@syncfusion/ej2-dropdowns';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { RadioButton, CheckBox } from '@syncfusion/ej2-buttons';\nimport { distinctStringValues } from '../base/util';\nimport { generateQuery } from '../base/constant';\nimport { DatePicker } from '@syncfusion/ej2-calendars';\n/**\n * @hidden\n * `ExcelFilter` module is used to handle filtering action.\n */\nvar ExcelFilter = /** @class */ (function (_super) {\n __extends(ExcelFilter, _super);\n /**\n * Constructor for excel filtering module\n * @hidden\n */\n function ExcelFilter(parent, filterSettings, serviceLocator, customFltrOperators) {\n var _this = _super.call(this, parent, filterSettings, serviceLocator) || this;\n _this.customFilterOperators = customFltrOperators;\n _this.isExcel = true;\n return _this;\n }\n ExcelFilter.prototype.getCMenuDS = function (type, operator) {\n var options = {\n number: ['Equal', 'NotEqual', '', 'LessThan', 'LessThanOrEqual', 'GreaterThan',\n 'GreaterThanOrEqual', 'Between', '', 'CustomFilter'],\n string: ['Equal', 'NotEqual', '', 'StartsWith', 'EndsWith', '', 'Contains', '', 'CustomFilter'],\n };\n options.date = options.number;\n options.datetime = options.number;\n var model = [];\n for (var i = 0; i < options[type].length; i++) {\n if (options[type][i].length) {\n if (operator) {\n model.push({\n text: this.getLocalizedLabel(options[type][i]) + '...',\n iconCss: 'e-icons e-icon-check ' + (operator === options[type][i] ? '' : 'e-emptyicon')\n });\n }\n else {\n model.push({\n text: this.getLocalizedLabel(options[type][i]) + '...'\n });\n }\n }\n else {\n model.push({ separator: true });\n }\n }\n return model;\n };\n /**\n * To destroy the filter bar.\n * @return {void}\n * @hidden\n */\n ExcelFilter.prototype.destroy = function () {\n if (this.dlg) {\n this.unwireExEvents();\n _super.prototype.destroy.call(this);\n }\n if (this.cmenu.parentElement) {\n remove(this.cmenu);\n }\n };\n ExcelFilter.prototype.createMenu = function (type, isFiltered, isCheckIcon) {\n var options = { string: 'TextFilter', date: 'DateFilter', datetime: 'DateFilter', number: 'NumberFilter' };\n this.menu = createElement('div', { className: 'e-contextmenu-wrapper' });\n if (this.parent.enableRtl) {\n this.menu.classList.add('e-rtl');\n }\n else {\n this.menu.classList.remove('e-rtl');\n }\n var ul = createElement('ul');\n var icon = isFiltered ? 'e-excl-filter-icon e-filtered' : 'e-excl-filter-icon';\n ul.appendChild(this.createMenuElem(this.getLocalizedLabel('ClearFilter'), isFiltered ? '' : 'e-disabled', icon));\n if (type !== 'boolean') {\n ul.appendChild(this.createMenuElem(this.getLocalizedLabel(options[type]), 'e-submenu', isCheckIcon && this.ensureTextFilter() ? 'e-icon-check' : icon + ' e-emptyicon', true));\n }\n this.menu.appendChild(ul);\n };\n ExcelFilter.prototype.createMenuElem = function (val, className, iconName, isSubMenu) {\n var li = createElement('li', { className: className + ' e-menu-item' });\n li.innerHTML = val;\n li.insertBefore(createElement('span', { className: 'e-menu-icon e-icons ' + iconName }), li.firstChild);\n if (isSubMenu) {\n li.appendChild(createElement('span', { className: 'e-icons e-caret' }));\n }\n return li;\n };\n ExcelFilter.prototype.wireExEvents = function () {\n EventHandler.add(this.dlg, 'mouseover', this.hoverHandler, this);\n EventHandler.add(this.dlg, 'click', this.clickExHandler, this);\n };\n ExcelFilter.prototype.unwireExEvents = function () {\n EventHandler.remove(this.dlg, 'mouseover', this.hoverHandler);\n EventHandler.remove(this.dlg, 'click', this.clickExHandler);\n };\n ExcelFilter.prototype.clickExHandler = function (e) {\n var menuItem = parentsUntil(e.target, 'e-menu-item');\n if (menuItem && this.getLocalizedLabel('ClearFilter') === menuItem.innerText.trim()) {\n this.clearFilter();\n this.closeDialog();\n }\n };\n ExcelFilter.prototype.destroyCMenu = function () {\n if (this.menuObj && !this.menuObj.isDestroyed) {\n this.menuObj.destroy();\n remove(this.cmenu);\n }\n };\n ExcelFilter.prototype.hoverHandler = function (e) {\n var target = e.target.querySelector('.e-contextmenu');\n var li = parentsUntil(e.target, 'e-menu-item');\n var focused = this.menu.querySelector('.e-focused');\n var isSubMenu;\n if (focused) {\n focused.classList.remove('e-focused');\n }\n if (li) {\n li.classList.add('e-focused');\n isSubMenu = li.classList.contains('e-submenu');\n }\n if (target) {\n return;\n }\n if (!isSubMenu) {\n var submenu = this.menu.querySelector('.e-submenu');\n if (!isNullOrUndefined(submenu)) {\n submenu.classList.remove('e-selected');\n }\n this.isCMenuOpen = false;\n this.destroyCMenu();\n }\n var selectedMenu = this.ensureTextFilter();\n if (!this.isCMenuOpen && isSubMenu) {\n li.classList.add('e-selected');\n this.isCMenuOpen = true;\n var menuOptions = {\n items: this.getCMenuDS(this.options.type, selectedMenu ? selectedMenu.replace(/\\s/g, '') : undefined),\n select: this.selectHandler.bind(this),\n onClose: this.destroyCMenu.bind(this),\n enableRtl: this.parent.enableRtl,\n beforeClose: this.preventClose\n };\n this.parent.element.appendChild(this.cmenu);\n this.menuObj = new ContextMenu(menuOptions, this.cmenu);\n var client = this.menu.querySelector('.e-submenu').getBoundingClientRect();\n var pos = { top: 0, left: 0 };\n if (Browser.isDevice) {\n var contextRect = this.getContextBounds(this.menuObj);\n pos.top = (window.innerHeight - contextRect.height) / 2;\n pos.left = (window.innerWidth - contextRect.width) / 2;\n this.closeDialog();\n }\n else {\n pos.top = client.top;\n pos.left = this.getCMenuYPosition(this.dlg, this.menuObj);\n }\n this.menuObj.open(pos.top, pos.left);\n }\n };\n ExcelFilter.prototype.ensureTextFilter = function () {\n var selectedMenu;\n var predicates = this.existingPredicate[this.options.field];\n if (predicates && predicates.length === 2) {\n if (predicates[0].operator === 'greaterThanOrEqual' && predicates[1].operator === 'lessThanOrEqual') {\n selectedMenu = 'Between';\n }\n else {\n selectedMenu = 'CustomFilter';\n }\n }\n else {\n if (predicates && predicates.length === 1) {\n this.optrData = this.customFilterOperators[this.options.type + 'Operator'];\n selectedMenu = this.getSelectedText(predicates[0].operator);\n }\n }\n return selectedMenu;\n };\n ExcelFilter.prototype.preventClose = function (args) {\n if (args.event instanceof MouseEvent && args.event.target.classList.contains('e-submenu')) {\n args.cancel = true;\n }\n };\n ExcelFilter.prototype.getContextBounds = function (context) {\n var elementVisible = this.menuObj.element.style.display;\n this.menuObj.element.style.display = 'block';\n return this.menuObj.element.getBoundingClientRect();\n };\n ExcelFilter.prototype.getCMenuYPosition = function (target, context) {\n var contextWidth = this.getContextBounds(context).width;\n var targetPosition = target.getBoundingClientRect();\n var leftPos = targetPosition.right + contextWidth - this.parent.element.clientWidth;\n return (leftPos < 1) ? (targetPosition.right + 1) : (targetPosition.left - contextWidth - 1);\n };\n ExcelFilter.prototype.openDialog = function (options) {\n var _this = this;\n this.updateModel(options);\n this.getAndSetChkElem(options);\n this.showDialog(options);\n this.dialogObj.dataBind();\n var filterLength = (this.existingPredicate[options.field] && this.existingPredicate[options.field].length) ||\n this.options.filteredColumns.filter(function (col) {\n return _this.options.field === col.field;\n }).length;\n this.createMenu(options.type, filterLength > 0, (filterLength === 1 || filterLength === 2));\n this.dlg.insertBefore(this.menu, this.dlg.firstChild);\n this.dlg.classList.add('e-excelfilter');\n this.dlg.classList.remove('e-checkboxfilter');\n this.cmenu = createElement('ul', { className: 'e-excel-menu' });\n this.wireExEvents();\n };\n ExcelFilter.prototype.closeDialog = function () {\n _super.prototype.closeDialog.call(this);\n };\n ExcelFilter.prototype.selectHandler = function (e) {\n if (e.item) {\n this.menuItem = e.item;\n this.renderDialogue(e);\n }\n };\n ExcelFilter.prototype.renderDialogue = function (e) {\n var _this = this;\n var target = e.element;\n var column = this.options.field;\n var mainDiv = createElement('div', { className: 'e-xlfl-maindiv', id: column + '-xlflmenu' });\n this.dlgDiv = createElement('div', { className: 'e-xlflmenu', id: column + '-xlfldlg' });\n this.parent.element.appendChild(this.dlgDiv);\n this.dlgObj = new Dialog({\n header: this.getLocalizedLabel('CustomFilter'),\n isModal: true,\n overlayClick: this.removeDialog.bind(this),\n showCloseIcon: true,\n closeOnEscape: false,\n target: document.body,\n // target: this.parent.element,\n visible: false,\n enableRtl: this.parent.enableRtl,\n open: function () {\n var row = _this.dlgObj.element.querySelector('table.e-xlfl-table>tr');\n row.cells[1].querySelector('input:not([type=hidden])').focus();\n },\n close: this.removeDialog.bind(this),\n created: this.createdDialog.bind(this, target, column),\n buttons: [{\n click: this.filterBtnClick.bind(this, column),\n buttonModel: {\n content: this.getLocalizedLabel('OKButton'), isPrimary: true, cssClass: 'e-xlfl-okbtn'\n }\n },\n {\n click: this.removeDialog.bind(this),\n buttonModel: { content: this.getLocalizedLabel('CancelButton'), cssClass: 'e-xlfl-cancelbtn' }\n }],\n content: mainDiv,\n width: 430,\n animationSettings: { effect: 'None' },\n });\n this.dlgObj.appendTo(this.dlgDiv);\n };\n ExcelFilter.prototype.removeDialog = function () {\n this.removeObjects([this.dropOptr, this.datePicker, this.actObj, this.numericTxtObj, this.dlgObj]);\n remove(this.dlgDiv);\n };\n ExcelFilter.prototype.clearBtnClick = function (field) {\n this.clearFilter();\n this.removeDialog();\n };\n ExcelFilter.prototype.createdDialog = function (target, column) {\n this.renderCustomFilter(target, column);\n this.dlgObj.element.style.left = '0px';\n this.dlgObj.element.style.top = '0px';\n if (Browser.isDevice && window.innerWidth < 440) {\n this.dlgObj.element.style.width = '90%';\n }\n this.dlgObj.show();\n };\n ExcelFilter.prototype.renderCustomFilter = function (target, column) {\n var dlgConetntEle = this.dlgObj.element.querySelector('.e-xlfl-maindiv');\n /* tslint:disable-next-line:max-line-length */\n var dlgFields = createElement('div', { innerHTML: this.getLocalizedLabel('ShowRowsWhere'), className: 'e-xlfl-dlgfields' });\n dlgConetntEle.appendChild(dlgFields);\n //column name\n var fieldSet = createElement('div', { innerHTML: this.options.displayName, className: 'e-xlfl-fieldset' });\n dlgConetntEle.appendChild(fieldSet);\n this.renderFilterUI(column, dlgConetntEle);\n };\n ExcelFilter.prototype.filterBtnClick = function (col) {\n var fValue = this.dlgDiv.querySelector('#' + col + '-xlfl-frstvalue').ej2_instances[0];\n var fOperator = this.dlgDiv.querySelector('#' + col + '-xlfl-frstoptr').ej2_instances[0];\n var sValue = this.dlgDiv.querySelector('#' + col + '-xlfl-secndvalue').ej2_instances[0];\n var sOperator = this.dlgDiv.querySelector('#' + col + '-xlfl-secndoptr').ej2_instances[0];\n var checkBoxValue;\n if (this.options.type === 'string') {\n var checkBox = this.dlgDiv.querySelector('#' + col + '-xlflmtcase').ej2_instances[0];\n checkBoxValue = checkBox.checked;\n }\n var andRadio = this.dlgDiv.querySelector('#' + col + 'e-xlfl-frstpredicate').ej2_instances[0];\n var orRadio = this.dlgDiv.querySelector('#' + col + 'e-xlfl-secndpredicate').ej2_instances[0];\n var predicate = (andRadio.checked ? 'and' : 'or');\n if (sValue.value === null) {\n predicate = 'or';\n }\n this.filterByColumn(this.options.field, fOperator.value, fValue.value, predicate, checkBoxValue, this.parent.filterSettings.ignoreAccent, sOperator.value, sValue.value);\n this.removeDialog();\n };\n /**\n * Filters grid row by column name with given options.\n * @param {string} fieldName - Defines the field name of the filter column.\n * @param {string} firstOperator - Defines the first operator by how to filter records.\n * @param {string | number | Date | boolean} firstValue - Defines the first value which is used to filter records.\n * @param {string} predicate - Defines the relationship between one filter query with another by using AND or OR predicate.\n * @param {boolean} matchCase - If ignore case set to true, then filter records with exact match or else\n * filter records with case insensitive(uppercase and lowercase letters treated as same).\n * @param {boolean} ignoreAccent - If ignoreAccent set to true, then ignores the diacritic characters or accents when filtering.\n * @param {string} secondOperator - Defines the second operator by how to filter records.\n * @param {string | number | Date | boolean} secondValue - Defines the first value which is used to filter records.\n */\n ExcelFilter.prototype.filterByColumn = function (fieldName, firstOperator, firstValue, predicate, matchCase, ignoreAccent, secondOperator, secondValue) {\n var _this = this;\n var col = this.parent.getColumnByField(fieldName);\n var field = col.isForeignColumn() ? col.foreignKeyValue : fieldName;\n var fColl = [];\n var mPredicate;\n fColl.push({\n field: field,\n predicate: predicate,\n matchCase: matchCase,\n ignoreAccent: ignoreAccent,\n operator: firstOperator,\n value: firstValue,\n type: this.options.type\n });\n mPredicate = new Predicate(field, firstOperator.toLowerCase(), firstValue, !matchCase, ignoreAccent);\n if (secondValue) {\n secondOperator = !isNullOrUndefined(secondOperator) ? secondOperator : 'equal';\n fColl.push({\n field: field,\n predicate: predicate,\n matchCase: matchCase,\n ignoreAccent: ignoreAccent,\n operator: secondOperator,\n value: secondValue,\n type: this.options.type\n });\n /* tslint:disable-next-line:max-line-length */\n mPredicate = mPredicate[predicate](field, secondOperator.toLowerCase(), secondValue, !matchCase, ignoreAccent);\n }\n var args = {\n action: 'filtering', filterCollection: fColl, field: this.options.field,\n ejpredicate: mPredicate, actualPredicate: fColl\n };\n var fPredicate = {};\n var filterCollection = [];\n if (col.isForeignColumn()) {\n this.options.column.dataSource.\n executeQuery(new Query().where(mPredicate)).then(function (e) {\n _this.options.column.columnData = e.result;\n _this.parent.notify(generateQuery, { predicate: fPredicate, column: col });\n args.ejpredicate = fPredicate.predicate.predicates;\n fPredicate.predicate.predicates.forEach(function (fpred) {\n filterCollection.push({\n field: fpred.field,\n predicate: 'or',\n matchCase: fpred.ignoreCase,\n ignoreAccent: fpred.ignoreAccent,\n operator: fpred.operator,\n value: fpred.value,\n type: _this.options.type\n });\n });\n args.filterCollection = filterCollection.length ? filterCollection :\n fColl.filter(function (col) { return col.field = _this.options.field; });\n _this.options.handler(args);\n });\n }\n else {\n this.options.handler(args);\n }\n };\n /* tslint:disable-next-line:max-line-length */\n ExcelFilter.prototype.renderOperatorUI = function (column, table, elementID, predicates, isFirst) {\n var fieldElement = createElement('tr', { className: 'e-xlfl-fields' });\n table.appendChild(fieldElement);\n var xlfloptr = createElement('td', { className: 'e-xlfl-optr' });\n fieldElement.appendChild(xlfloptr);\n var optrDiv = createElement('div', { className: 'e-xlfl-optrdiv' });\n var optrInput = createElement('input', { id: column + elementID });\n optrDiv.appendChild(optrInput);\n xlfloptr.appendChild(optrDiv);\n var optr = this.options.type + 'Operator';\n var dropDatasource = this.customFilterOperators[optr];\n this.optrData = dropDatasource;\n var selectedValue = this.dropSelectedVal(column, predicates, isFirst);\n //Trailing three dots are sliced.\n var menuText = '';\n if (this.menuItem) {\n menuText = this.menuItem.text.slice(0, -3);\n if (menuText !== this.getLocalizedLabel('CustomFilter')) {\n selectedValue = isFirst ? menuText : undefined;\n }\n if (menuText === this.getLocalizedLabel('Between')) {\n selectedValue = this.getLocalizedLabel(isFirst ? 'GreaterThanOrEqual' : 'LessThanOrEqual');\n }\n }\n this.dropOptr = new DropDownList({\n dataSource: dropDatasource,\n fields: { text: 'text', value: 'value' },\n text: selectedValue,\n open: this.dropDownOpen.bind(this),\n enableRtl: this.parent.enableRtl\n });\n this.dropOptr.appendTo(optrInput);\n var operator = this.getSelectedValue(selectedValue);\n return { fieldElement: fieldElement, operator: operator };\n };\n ExcelFilter.prototype.dropDownOpen = function (args) {\n args.popup.element.style.zIndex = (this.dialogObj.zIndex + 1).toString();\n };\n ExcelFilter.prototype.getSelectedValue = function (text) {\n var selectedField = new DataManager(this.optrData).executeLocal(new Query().where('text', 'equal', text));\n return !isNullOrUndefined(selectedField[0]) ? selectedField[0].value : '';\n };\n ExcelFilter.prototype.dropSelectedVal = function (col, predicates, isFirst) {\n var operator;\n if (predicates && predicates.length > 0) {\n operator = predicates.length === 2 ?\n (isFirst ? predicates[0].operator : predicates[1].operator) :\n (isFirst ? predicates[0].operator : undefined);\n }\n else {\n operator = isFirst ? 'equal' : undefined;\n }\n return this.getSelectedText(operator);\n };\n ExcelFilter.prototype.getSelectedText = function (operator) {\n var selectedField = new DataManager(this.optrData).executeLocal(new Query().where('value', 'equal', operator));\n return !isNullOrUndefined(selectedField[0]) ? selectedField[0].text : '';\n };\n ExcelFilter.prototype.renderFilterUI = function (column, dlgConetntEle) {\n var predicates = this.existingPredicate[column];\n var table = createElement('table', { className: 'e-xlfl-table' });\n dlgConetntEle.appendChild(table);\n var colGroup = createElement('colGroup');\n colGroup.innerHTML = '';\n table.appendChild(colGroup);\n //Renders first dropdown\n /* tslint:disable-next-line:max-line-length */\n var optr = this.renderOperatorUI(column, table, '-xlfl-frstoptr', predicates, true);\n //Renders first value\n this.renderFlValueUI(column, optr, '-xlfl-frstvalue', predicates, true);\n var predicate = createElement('tr', { className: 'e-xlfl-predicate' });\n table.appendChild(predicate);\n //Renders first radion button\n this.renderRadioButton(column, predicate, predicates);\n //Renders second dropdown\n optr = this.renderOperatorUI(column, table, '-xlfl-secndoptr', predicates, false);\n //Renders second text box\n this.renderFlValueUI(column, optr, '-xlfl-secndvalue', predicates, false);\n };\n ExcelFilter.prototype.renderRadioButton = function (column, tr, predicates) {\n var td = createElement('td', { className: 'e-xlfl-radio', attrs: { 'colSpan': '2' } });\n tr.appendChild(td);\n var radioDiv = createElement('div', { className: 'e-xlfl-radiodiv', attrs: { 'style': 'display: inline-block' } });\n /* tslint:disable-next-line:max-line-length */\n var frstpredicate = createElement('input', { id: column + 'e-xlfl-frstpredicate', attrs: { 'type': 'radio' } });\n /* tslint:disable-next-line:max-line-length */\n var secndpredicate = createElement('input', { id: column + 'e-xlfl-secndpredicate', attrs: { 'type': 'radio' } });\n //appends into div\n radioDiv.appendChild(frstpredicate);\n radioDiv.appendChild(secndpredicate);\n td.appendChild(radioDiv);\n if (this.options.type === 'string') {\n this.renderMatchCase(column, tr, td, '-xlflmtcase', predicates);\n }\n // Initialize AND RadioButton component.\n /* tslint:disable-next-line:max-line-length */\n var andRadio = new RadioButton({ label: this.getLocalizedLabel('AND'), name: 'default', cssClass: 'e-xlfl-radio-and', checked: true, enableRtl: this.parent.enableRtl });\n // Initialize OR RadioButton component.\n /* tslint:disable-next-line:max-line-length */\n var orRadio = new RadioButton({ label: this.getLocalizedLabel('OR'), name: 'default', cssClass: 'e-xlfl-radio-or', enableRtl: this.parent.enableRtl });\n var flValue = predicates && predicates.length === 2 ? predicates[1].predicate : 'and';\n if (flValue === 'and') {\n andRadio.checked = true;\n orRadio.checked = false;\n }\n else {\n orRadio.checked = true;\n andRadio.checked = false;\n }\n // Render initialized RadioButton.\n andRadio.appendTo(frstpredicate);\n orRadio.appendTo(secndpredicate);\n };\n /* tslint:disable-next-line:no-any */\n ExcelFilter.prototype.removeObjects = function (elements) {\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var obj = elements_1[_i];\n if (obj && !obj.isDestroyed) {\n obj.destroy();\n }\n }\n };\n /* tslint:disable-next-line:max-line-length */\n ExcelFilter.prototype.renderFlValueUI = function (column, optr, elementId, predicates, isFirst) {\n var value = createElement('td', { className: 'e-xlfl-value' });\n optr.fieldElement.appendChild(value);\n var valueDiv = createElement('div', { className: 'e-xlfl-valuediv' });\n var valueInput = createElement('input', { id: column + elementId });\n valueDiv.appendChild(valueInput);\n value.appendChild(valueDiv);\n var flValue;\n var predicate;\n if (predicates && predicates.length > 0) {\n predicate = predicates.length === 2 ?\n (isFirst ? predicates[0] : predicates[1]) :\n (isFirst ? predicates[0] : undefined);\n flValue = (predicate && predicate.operator === optr.operator) ? predicate.value : undefined;\n }\n var types = {\n 'string': this.renderAutoComplete.bind(this),\n 'number': this.renderNumericTextBox.bind(this),\n 'date': this.renderDate.bind(this),\n 'datetime': this.renderDate.bind(this)\n };\n types[this.options.type](this.options, column, valueInput, flValue, this.parent.enableRtl);\n };\n /* tslint:disable-next-line:max-line-length */\n ExcelFilter.prototype.renderMatchCase = function (column, tr, matchCase, elementId, predicates) {\n /* tslint:disable-next-line:max-line-length */\n var matchCaseDiv = createElement('div', { className: 'e-xlfl-matchcasediv', attrs: { 'style': 'display: inline-block' } });\n var matchCaseInput = createElement('input', { id: column + elementId, attrs: { 'type': 'checkbox' } });\n matchCaseDiv.appendChild(matchCaseInput);\n matchCase.appendChild(matchCaseDiv);\n var flValue = predicates && predicates.length > 0 ?\n (predicates && predicates.length === 2 ? predicates[1].matchCase : predicates[0].matchCase) :\n false;\n // Initialize Match Case check box.\n var checkbox = new CheckBox({ label: this.getLocalizedLabel('MatchCase'),\n enableRtl: this.parent.enableRtl, checked: flValue });\n // Render initialized CheckBox.\n checkbox.appendTo(matchCaseInput);\n };\n /* tslint:disable-next-line:max-line-length */\n ExcelFilter.prototype.renderDate = function (options, column, inputValue, fValue, isRtl) {\n var intl = new Internationalization();\n var format = intl.getDatePattern({ type: 'date', skeleton: options.format }, false);\n this.datePicker = new DatePicker({\n format: format,\n cssClass: 'e-popup-flmenu',\n placeholder: this.getLocalizedLabel('CustomFilterDatePlaceHolder'),\n width: '100%',\n enableRtl: isRtl,\n value: new Date(fValue),\n });\n this.datePicker.appendTo(inputValue);\n };\n ExcelFilter.prototype.completeAction = function (e) {\n e.result = distinctStringValues(e.result);\n };\n /* tslint:disable-next-line:max-line-length */\n ExcelFilter.prototype.renderNumericTextBox = function (options, column, inputValue, fValue, isRtl) {\n this.numericTxtObj = new NumericTextBox({\n format: options.format,\n placeholder: this.getLocalizedLabel('CustomFilterPlaceHolder'),\n enableRtl: isRtl,\n value: fValue\n });\n this.numericTxtObj.appendTo(inputValue);\n };\n /* tslint:disable-next-line:max-line-length */\n ExcelFilter.prototype.renderAutoComplete = function (options, column, inputValue, fValue, isRtl) {\n var _this = this;\n var colObj = this.parent.getColumnByField(column);\n var isForeignColumn = colObj.isForeignColumn();\n var dataSource = isForeignColumn ? colObj.dataSource : options.dataSource;\n var fields = { value: isForeignColumn ? colObj.foreignKeyValue : column };\n var actObj = new AutoComplete({\n dataSource: dataSource instanceof DataManager ? dataSource : new DataManager(dataSource),\n fields: fields,\n query: this.parent.query.clone(),\n sortOrder: 'Ascending',\n locale: this.parent.locale,\n autofill: true,\n focus: function () {\n actObj.filterType = _this.dlgDiv.querySelector('#' + column +\n (inputValue.id === (column + '-xlfl-frstvalue') ?\n '-xlfl-frstoptr' :\n '-xlfl-secndoptr')).ej2_instances[0].value;\n actObj.ignoreCase = options.type === 'string' ?\n !_this.dlgDiv.querySelector('#' + column + '-xlflmtcase').ej2_instances[0].checked :\n true;\n actObj.filterType = !isNullOrUndefined(actObj.filterType) ? actObj.filterType :\n 'equal';\n },\n placeholder: this.getLocalizedLabel('CustomFilterPlaceHolder'),\n enableRtl: isRtl,\n actionComplete: function (e) {\n e.result = e.result.filter(function (obj, index, arr) {\n return arr.map(function (mapObject) {\n return mapObject[actObj.fields.value];\n }).indexOf(obj[_this.actObj.fields.value]) === index;\n });\n },\n value: fValue\n });\n actObj.appendTo(inputValue);\n this.actObj = actObj;\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n ExcelFilter.prototype.getModuleName = function () {\n return 'excelFilter';\n };\n return ExcelFilter;\n}(CheckBoxFilter));\nexport { ExcelFilter };\n","import { EventHandler, isNullOrUndefined, extend, closest, getValue } from '@syncfusion/ej2-base';\nimport { getActualPropFromColl, isActionPrevent, getColumnByForeignKeyValue } from '../base/util';\nimport { remove, createElement, matches } from '@syncfusion/ej2-base';\nimport { DataUtil, Query, DataManager } from '@syncfusion/ej2-data';\nimport * as events from '../base/constant';\nimport { CellType } from '../base/enum';\nimport { RowRenderer } from '../renderer/row-renderer';\nimport { Cell } from '../models/cell';\nimport { Row } from '../models/row';\nimport { FilterCellRenderer } from '../renderer/filter-cell-renderer';\nimport { parentsUntil } from '../base/util';\nimport { FilterMenuRenderer } from '../renderer/filter-menu-renderer';\nimport { CheckBoxFilter } from '../actions/checkbox-filter';\nimport { ExcelFilter } from '../actions/excel-filter';\n/**\n *\n * The `Filter` module is used to handle filtering action.\n */\nvar Filter = /** @class */ (function () {\n /**\n * Constructor for Grid filtering module\n * @hidden\n */\n function Filter(parent, filterSettings, serviceLocator) {\n this.predicate = 'and';\n this.contentRefresh = true;\n this.values = {};\n this.nextFlMenuOpen = '';\n this.type = { 'Menu': FilterMenuRenderer, 'CheckBox': CheckBoxFilter, 'Excel': ExcelFilter };\n this.filterOperators = {\n contains: 'contains', endsWith: 'endswith', equal: 'equal', greaterThan: 'greaterthan', greaterThanOrEqual: 'greaterthanorequal',\n lessThan: 'lessthan', lessThanOrEqual: 'lessthanorequal', notEqual: 'notequal', startsWith: 'startswith'\n };\n this.fltrDlgDetails = { field: '', isOpen: false };\n this.actualPredicate = {};\n this.parent = parent;\n this.filterSettings = filterSettings;\n this.serviceLocator = serviceLocator;\n this.addEventListener();\n }\n /**\n * To render filter bar when filtering enabled.\n * @return {void}\n * @hidden\n */\n Filter.prototype.render = function (e) {\n if (DataUtil.getObject('args.isFrozen', e)) {\n return;\n }\n var gObj = this.parent;\n this.l10n = this.serviceLocator.getService('localization');\n this.getLocalizedCustomOperators();\n if (this.parent.filterSettings.type === 'FilterBar') {\n if (gObj.columns.length) {\n var fltrElem = this.parent.element.querySelector('.e-filterbar');\n if (fltrElem) {\n remove(fltrElem);\n }\n var rowRenderer = new RowRenderer(this.serviceLocator, CellType.Filter, gObj);\n var row = void 0;\n var cellrender = this.serviceLocator.getService('cellRendererFactory');\n cellrender.addCellRenderer(CellType.Filter, new FilterCellRenderer(this.parent, this.serviceLocator));\n this.valueFormatter = this.serviceLocator.getService('valueFormatter');\n rowRenderer.element = createElement('tr', { className: 'e-filterbar' });\n row = this.generateRow();\n row.data = this.values;\n this.parent.getHeaderContent().querySelector('thead').appendChild(rowRenderer.element);\n this.element = rowRenderer.render(row, gObj.getColumns(), null, null, rowRenderer.element);\n var detail = this.element.querySelector('.e-detailheadercell');\n if (detail) {\n detail.className = 'e-filterbarcell e-mastercell';\n }\n var gCells = [].slice.call(this.element.querySelectorAll('.e-grouptopleftcell'));\n if (gCells.length) {\n gCells[gCells.length - 1].classList.add('e-lastgrouptopleftcell');\n }\n this.wireEvents();\n this.parent.notify(events.freezeRender, { case: 'filter' });\n }\n }\n };\n /**\n * To destroy the filter bar.\n * @return {void}\n * @hidden\n */\n Filter.prototype.destroy = function () {\n if (this.filterModule) {\n this.filterModule.destroy();\n }\n this.filterSettings.columns = [];\n this.updateFilterMsg();\n this.removeEventListener();\n this.unWireEvents();\n if (this.element) {\n remove(this.element);\n var filterBarElement = this.parent.getHeaderContent().querySelector('.e-filterbar');\n if (this.parent.getFrozenColumns() && filterBarElement) {\n remove(filterBarElement);\n }\n }\n };\n Filter.prototype.generateRow = function (index) {\n var options = {};\n var row = new Row(options);\n row.cells = this.generateCells();\n return row;\n };\n Filter.prototype.generateCells = function () {\n //TODO: generate dummy column for group, detail, stacked row here for filtering;\n var cells = [];\n if (this.parent.allowGrouping) {\n for (var c = 0, len = this.parent.groupSettings.columns.length; c < len; c++) {\n cells.push(this.generateCell({}, CellType.HeaderIndent));\n }\n }\n if (this.parent.detailTemplate || this.parent.childGrid) {\n cells.push(this.generateCell({}, CellType.DetailHeader));\n }\n for (var _i = 0, _a = this.parent.getColumns(); _i < _a.length; _i++) {\n var dummy = _a[_i];\n cells.push(this.generateCell(dummy));\n }\n return cells;\n };\n Filter.prototype.generateCell = function (column, cellType) {\n var opt = {\n 'visible': column.visible,\n 'isDataCell': false,\n 'rowId': '',\n 'column': column,\n 'cellType': cellType ? cellType : CellType.Filter,\n 'attributes': { title: this.l10n.getConstant('FilterbarTitle') }\n };\n return new Cell(opt);\n };\n /**\n * To update filterSettings when applying filter.\n * @return {void}\n * @hidden\n */\n Filter.prototype.updateModel = function () {\n var col = this.parent.getColumnByField(this.fieldName);\n var field = col.isForeignColumn() ? col.foreignKeyValue : this.fieldName;\n this.currentFilterObject = {\n field: field, operator: this.operator, value: this.value, predicate: this.predicate,\n matchCase: this.matchCase, ignoreAccent: this.ignoreAccent, actualFilterValue: {}, actualOperator: {}\n };\n var index = this.getFilteredColsIndexByField(col);\n if (index > -1) {\n this.filterSettings.columns[index] = this.currentFilterObject;\n }\n else {\n this.filterSettings.columns.push(this.currentFilterObject);\n }\n this.filterSettings.columns = this.filterSettings.columns;\n this.parent.dataBind();\n };\n Filter.prototype.getFilteredColsIndexByField = function (col) {\n var cols = this.filterSettings.columns;\n for (var i = 0, len = cols.length; i < len; i++) {\n if (cols[i].field === col.field || (col.isForeignColumn() && cols[i].field === col.foreignKeyValue)) {\n return i;\n }\n }\n return -1;\n };\n /**\n * To trigger action complete event.\n * @return {void}\n * @hidden\n */\n Filter.prototype.onActionComplete = function (e) {\n var args = !this.isRemove ? {\n currentFilterObject: this.currentFilterObject, currentFilteringColumn: this.column.field,\n columns: this.filterSettings.columns, requestType: 'filtering', type: events.actionComplete\n } : {\n requestType: 'filtering', type: events.actionComplete\n };\n this.parent.trigger(events.actionComplete, extend(e, args));\n this.isRemove = false;\n };\n Filter.prototype.wireEvents = function () {\n EventHandler.add(this.parent.getHeaderContent(), 'keyup', this.keyUpHandler, this);\n };\n Filter.prototype.unWireEvents = function () {\n EventHandler.remove(this.parent.getHeaderContent(), 'keyup', this.keyUpHandler);\n };\n Filter.prototype.enableAfterRender = function (e) {\n if (e.module === this.getModuleName() && e.enable) {\n this.render();\n }\n };\n Filter.prototype.initialEnd = function () {\n this.parent.off(events.contentReady, this.initialEnd);\n if (this.parent.getColumns().length && this.filterSettings.columns.length) {\n var gObj = this.parent;\n this.contentRefresh = false;\n for (var _i = 0, _a = gObj.filterSettings.columns; _i < _a.length; _i++) {\n var col = _a[_i];\n this.filterByColumn(col.field, col.operator, col.value, col.predicate, col.matchCase, col.ignoreAccent, col.actualFilterValue, col.actualOperator);\n }\n this.updateFilterMsg();\n this.contentRefresh = true;\n }\n };\n /**\n * @hidden\n */\n Filter.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.uiUpdate, this.enableAfterRender, this);\n this.parent.on(events.filterComplete, this.onActionComplete, this);\n this.parent.on(events.inBoundModelChanged, this.onPropertyChanged, this);\n this.parent.on(events.keyPressed, this.keyUpHandler, this);\n this.parent.on(events.columnPositionChanged, this.columnPositionChanged, this);\n this.parent.on(events.headerRefreshed, this.render, this);\n this.parent.on(events.contentReady, this.initialEnd, this);\n this.parent.on(events.filterMenuClose, this.filterMenuClose, this);\n EventHandler.add(document, 'click', this.clickHandler, this);\n this.parent.on(events.filterOpen, this.columnMenuFilter, this);\n this.parent.on(events.click, this.filterIconClickHandler, this);\n };\n /**\n * @hidden\n */\n Filter.prototype.removeEventListener = function () {\n EventHandler.remove(document, 'click', this.clickHandler);\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.uiUpdate, this.enableAfterRender);\n this.parent.off(events.filterComplete, this.onActionComplete);\n this.parent.off(events.inBoundModelChanged, this.onPropertyChanged);\n this.parent.off(events.keyPressed, this.keyUpHandler);\n this.parent.off(events.columnPositionChanged, this.columnPositionChanged);\n this.parent.off(events.headerRefreshed, this.render);\n this.parent.off(events.filterOpen, this.columnMenuFilter);\n this.parent.off(events.filterMenuClose, this.filterMenuClose);\n this.parent.off(events.click, this.filterIconClickHandler);\n };\n Filter.prototype.filterMenuClose = function (args) {\n this.fltrDlgDetails.isOpen = false;\n };\n /**\n * Filters the Grid row by fieldName, filterOperator, and filterValue.\n * @param {string} fieldName - Defines the field name of the filter column.\n * @param {string} filterOperator - Defines the operator to filter records.\n * @param {string | number | Date | boolean} filterValue - Defines the value which is used to filter records.\n * @param {string} predicate - Defines the relationship of one filter query with another by using AND or OR predicate.\n * @param {boolean} matchCase - If match case is set to true, then the filter records\n * the exact match or
    filters records that are case insensitive (uppercase and lowercase letters treated the same).\n * @param {boolean} ignoreAccent - If ignoreAccent set to true, then filter ignores the diacritic characters or accents while filtering.\n * @param {string} actualFilterValue - Defines the actual filter value for the filter column.\n * @param {string} actualOperator - Defines the actual filter operator for the filter column.\n * @return {void}\n */\n Filter.prototype.filterByColumn = function (fieldName, filterOperator, filterValue, predicate, matchCase, ignoreAccent, actualFilterValue, actualOperator) {\n var gObj = this.parent;\n var filterCell;\n this.column = gObj.getColumnByField(fieldName);\n if (this.filterSettings.type === 'FilterBar') {\n filterCell = gObj.getHeaderContent().querySelector('[id=\\'' + this.column.field + '_filterBarcell\\']');\n }\n if (!isNullOrUndefined(this.column.allowFiltering) && !this.column.allowFiltering) {\n return;\n }\n if (isActionPrevent(gObj)) {\n gObj.notify(events.preventBatch, {\n instance: this, handler: this.filterByColumn, arg1: fieldName, arg2: filterOperator, arg3: filterValue, arg4: predicate,\n arg5: matchCase, arg6: ignoreAccent, arg7: actualFilterValue, arg8: actualOperator\n });\n return;\n }\n this.value = filterValue;\n this.matchCase = matchCase || false;\n this.ignoreAccent = this.ignoreAccent = !isNullOrUndefined(ignoreAccent) ? ignoreAccent : this.parent.filterSettings.ignoreAccent;\n this.fieldName = fieldName;\n this.predicate = predicate || 'and';\n this.operator = filterOperator;\n filterValue = !isNullOrUndefined(filterValue) && filterValue.toString();\n if (this.column.type === 'number' || this.column.type === 'date') {\n this.matchCase = true;\n }\n gObj.getColumnHeaderByField(fieldName).setAttribute('aria-filtered', 'true');\n if (filterValue.length < 1 || this.checkForSkipInput(this.column, filterValue)) {\n this.filterStatusMsg = filterValue.length < 1 ? '' : this.l10n.getConstant('InvalidFilterMessage');\n this.updateFilterMsg();\n return;\n }\n if (this.filterSettings.type === 'FilterBar' && filterCell.value !== filterValue) {\n filterCell.value = filterValue;\n }\n if (!isNullOrUndefined(this.column.format)) {\n this.applyColumnFormat(filterValue);\n }\n else {\n this.values[this.column.field] = filterValue; //this line should be above updateModel\n }\n this.actualPredicate[this.fieldName] = [{\n field: this.fieldName,\n predicate: predicate,\n matchCase: matchCase,\n ignoreAccent: ignoreAccent,\n operator: this.operator,\n value: this.value,\n type: this.column.type\n }];\n this.addFilteredClass(this.fieldName);\n if (this.checkAlreadyColFiltered(this.column.field)) {\n return;\n }\n this.updateModel();\n };\n Filter.prototype.applyColumnFormat = function (filterValue) {\n var getFlvalue = (this.column.type === 'date' || this.column.type === 'datetime') ?\n new Date(filterValue) : parseFloat(filterValue);\n this.values[this.column.field] = this.setFormatForFlColumn(getFlvalue, this.column);\n };\n Filter.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName()) {\n return;\n }\n for (var _i = 0, _a = Object.keys(e.properties); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'columns':\n if (this.contentRefresh) {\n this.parent.notify(events.modelChanged, {\n currentFilterObject: this.currentFilterObject, currentFilteringColumn: this.column ?\n this.column.field : undefined,\n columns: this.filterSettings.columns, requestType: 'filtering', type: events.actionBegin\n });\n this.refreshFilterSettings();\n this.updateFilterMsg();\n this.updateFilter();\n }\n break;\n case 'showFilterBarStatus':\n if (e.properties[prop]) {\n this.updateFilterMsg();\n }\n else if (this.parent.allowPaging) {\n this.parent.updateExternalMessage('');\n }\n break;\n case 'type':\n this.parent.refreshHeader();\n this.refreshFilterSettings();\n break;\n }\n }\n };\n Filter.prototype.refreshFilterSettings = function () {\n if (this.filterSettings.type === 'FilterBar') {\n for (var i = 0; i < this.filterSettings.columns.length; i++) {\n this.column = this.parent.getColumnByField(this.filterSettings.columns[i].field) ||\n getColumnByForeignKeyValue(this.filterSettings.columns[i].field, this.parent.getForeignKeyColumns());\n var filterValue = this.filterSettings.columns[i].value;\n filterValue = !isNullOrUndefined(filterValue) && filterValue.toString();\n if (!isNullOrUndefined(this.column.format)) {\n this.applyColumnFormat(filterValue);\n }\n else {\n var key = this.filterSettings.columns[i].field;\n this.values[key] = this.filterSettings.columns[i].value;\n }\n var filterElement = this.getFilterBarElement(this.filterSettings.columns[i].field);\n if (filterElement) {\n filterElement.value = this.filterSettings.columns[i].value;\n }\n }\n if (this.filterSettings.columns.length === 0) {\n var col = this.parent.getColumns();\n for (var i = 0; i < col.length; i++) {\n var filterElement = this.getFilterBarElement(col[i].field);\n if (filterElement && filterElement.value !== '') {\n filterElement.value = '';\n delete this.values[col[i].field];\n }\n }\n }\n }\n };\n Filter.prototype.getFilterBarElement = function (col) {\n var selector = '[id=\\'' + col + '_filterBarcell\\']';\n var filterElement;\n if (selector && !isNullOrUndefined(this.element)) {\n filterElement = this.element.querySelector(selector);\n }\n return filterElement;\n };\n /**\n * @private\n */\n Filter.prototype.refreshFilter = function () {\n this.refreshFilterSettings();\n this.updateFilterMsg();\n };\n /**\n * Clears all the filtered rows of the Grid.\n * @return {void}\n */\n Filter.prototype.clearFiltering = function () {\n var cols = getActualPropFromColl(this.filterSettings.columns);\n if (isActionPrevent(this.parent)) {\n this.parent.notify(events.preventBatch, { instance: this, handler: this.clearFiltering });\n return;\n }\n for (var i = 0, len = cols.length; i < len; i++) {\n this.removeFilteredColsByField(cols[i].field, false);\n }\n if (this.parent.filterSettings.columns.length === 0 && this.parent.element.querySelector('.e-filtered')) {\n var fltrElement = [].slice.call(this.parent.element.querySelectorAll('.e-filtered'));\n for (var i = 0, len = fltrElement.length; i < len; i++) {\n fltrElement[0].removeAttribute('aria-filtered');\n fltrElement[0].classList.remove('e-filtered');\n }\n }\n this.isRemove = true;\n this.filterStatusMsg = '';\n this.updateFilterMsg();\n };\n Filter.prototype.checkAlreadyColFiltered = function (field) {\n var columns = this.filterSettings.columns;\n for (var _i = 0, columns_1 = columns; _i < columns_1.length; _i++) {\n var col = columns_1[_i];\n if (col.field === field && col.value === this.value &&\n col.operator === this.operator && col.predicate === this.predicate) {\n return true;\n }\n }\n return false;\n };\n Filter.prototype.columnMenuFilter = function (args) {\n this.column = args.col;\n var ele = closest(args.target, '#' + args.id);\n if (args.isClose && !ele) {\n this.filterModule.closeDialog();\n }\n else if (ele) {\n this.filterDialogOpen(this.column, args.target);\n }\n };\n Filter.prototype.filterDialogOpen = function (col, target, left, top) {\n var gObj = this.parent;\n if (this.filterModule) {\n this.filterModule.closeDialog();\n }\n this.filterModule = new this.type[col.filter.type || this.parent.filterSettings.type](this.parent, gObj.filterSettings, this.serviceLocator, this.customOperators, this);\n var dataSource = col.filter.dataSource || gObj.getDataModule().dataManager;\n this.filterModule.openDialog({\n type: col.type, field: col.field, displayName: col.headerText,\n dataSource: dataSource, format: col.format,\n filteredColumns: gObj.filterSettings.columns, target: target,\n sortedColumns: gObj.sortSettings.columns, formatFn: col.getFormatter(),\n parserFn: col.getParser(), query: gObj.query, template: col.getFilterItemTemplate(),\n hideSearchbox: isNullOrUndefined(col.filter.hideSearchbox) ? false : col.filter.hideSearchbox,\n handler: this.filterHandler.bind(this), localizedStrings: gObj.getLocaleConstants(),\n position: { X: left, Y: top }, column: col, foreignKeyValue: col.foreignKeyValue,\n actualPredicate: this.actualPredicate, localeObj: this.parent.localeObj\n });\n };\n /**\n * Removes filtered column by field name.\n * @param {string} field - Defines column field name to remove filter.\n * @param {boolean} isClearFilterBar - Specifies whether the filter bar value needs to be cleared.\n * @return {void}\n * @hidden\n */\n Filter.prototype.removeFilteredColsByField = function (field, isClearFilterBar) {\n var fCell;\n var cols = this.filterSettings.columns;\n if (isActionPrevent(this.parent)) {\n var args = { instance: this, handler: this.removeFilteredColsByField, arg1: field, arg2: isClearFilterBar };\n this.parent.notify(events.preventBatch, args);\n return;\n }\n for (var i = 0, len = cols.length; i < len; i++) {\n var column = this.parent.getColumnByField(field) ||\n getColumnByForeignKeyValue(field, this.parent.getForeignKeyColumns());\n if (cols[i].field === field || cols[i].field === column.foreignKeyValue) {\n if (this.filterSettings.type === 'FilterBar' && !isClearFilterBar) {\n var selector = '[id=\\'' + cols[i].field + '_filterBarcell\\']';\n fCell = this.parent.getHeaderContent().querySelector(selector);\n fCell.value = '';\n delete this.values[field];\n }\n cols.splice(i, 1);\n var fltrElement = this.parent.getColumnHeaderByField(column.field);\n fltrElement.removeAttribute('aria-filtered');\n if (this.filterSettings.type !== 'FilterBar') {\n var iconClass = this.parent.showColumnMenu ? '.e-columnmenu' : '.e-icon-filter';\n fltrElement.querySelector(iconClass).classList.remove('e-filtered');\n }\n this.isRemove = true;\n if (this.actualPredicate[field]) {\n delete this.actualPredicate[field];\n }\n if (this.values[field]) {\n delete this.values[field];\n }\n this.parent.notify(events.modelChanged, {\n requestType: 'filtering', type: events.actionBegin, currentFilterObject: {\n field: column.field, operator: this.operator, value: this.value, predicate: this.predicate,\n matchCase: this.matchCase, ignoreAccent: this.ignoreAccent, actualFilterValue: {}, actualOperator: {}\n }, currentFilterColumn: column\n });\n break;\n }\n }\n this.updateFilterMsg();\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Filter.prototype.getModuleName = function () {\n return 'filter';\n };\n Filter.prototype.keyUpHandler = function (e) {\n var gObj = this.parent;\n var target = e.target;\n if (target && matches(target, '.e-filterbar input')) {\n var closeHeaderEle = closest(target, 'th.e-filterbarcell');\n this.column = gObj.getColumnByUid(closeHeaderEle.getAttribute('e-mappinguid'));\n if (!this.column) {\n return;\n }\n if ((this.filterSettings.mode === 'Immediate' || e.keyCode === 13) && e.keyCode !== 9) {\n this.value = target.value.trim();\n this.processFilter(e);\n }\n }\n };\n Filter.prototype.updateCrossIcon = function (element) {\n if (element.value.length) {\n element.nextElementSibling.classList.remove('e-hide');\n }\n };\n Filter.prototype.updateFilterMsg = function () {\n if (this.filterSettings.type === 'FilterBar') {\n var gObj = this.parent;\n var getFormatFlValue = void 0;\n var columns = this.filterSettings.columns;\n var formater = this.serviceLocator.getService('valueFormatter');\n var column = void 0;\n var value = void 0;\n if (!this.filterSettings.showFilterBarStatus) {\n return;\n }\n if (columns.length > 0 && this.filterStatusMsg !== this.l10n.getConstant('InvalidFilterMessage')) {\n this.filterStatusMsg = '';\n for (var index = 0; index < columns.length; index++) {\n column = gObj.getColumnByField(columns[index].field) ||\n getColumnByForeignKeyValue(columns[index].field, this.parent.getForeignKeyColumns());\n if (index) {\n this.filterStatusMsg += ' && ';\n }\n if (!isNullOrUndefined(column.format)) {\n var flValue = (column.type === 'date' || column.type === 'datetime') ?\n new Date(this.values[column.field]) :\n this.values[column.field];\n if (!(column.type === 'date' || column.type === 'datetime')) {\n var formater_1 = this.serviceLocator.getService('valueFormatter');\n getFormatFlValue = formater_1.toView(flValue, column.getParser()).toString();\n }\n else {\n getFormatFlValue = this.setFormatForFlColumn(flValue, column);\n }\n this.filterStatusMsg += column.headerText + ': ' + getFormatFlValue;\n }\n else {\n this.filterStatusMsg += column.headerText + ': ' + this.values[column.field];\n }\n }\n }\n if (gObj.allowPaging) {\n gObj.updateExternalMessage(this.filterStatusMsg);\n }\n //TODO: virtual paging \n this.filterStatusMsg = '';\n }\n };\n Filter.prototype.setFormatForFlColumn = function (value, column) {\n var formater = this.serviceLocator.getService('valueFormatter');\n return formater.toView(value, column.getFormatter()).toString();\n };\n Filter.prototype.checkForSkipInput = function (column, value) {\n var isSkip;\n var skipInput;\n if (column.type === 'number') {\n skipInput = ['=', ' ', '!'];\n if (DataUtil.operatorSymbols[value] || skipInput.indexOf(value) > -1) {\n isSkip = true;\n }\n }\n else if (column.type === 'string') {\n skipInput = ['>', '<', '=', '!'];\n for (var _i = 0, value_1 = value; _i < value_1.length; _i++) {\n var val = value_1[_i];\n if (skipInput.indexOf(val) > -1) {\n isSkip = true;\n }\n }\n }\n return isSkip;\n };\n Filter.prototype.processFilter = function (e) {\n this.stopTimer();\n this.startTimer(e);\n };\n Filter.prototype.startTimer = function (e) {\n var _this = this;\n this.timer = window.setInterval(function () { _this.onTimerTick(); }, e.keyCode === 13 ? 0 : this.filterSettings.immediateModeDelay);\n };\n Filter.prototype.stopTimer = function () {\n window.clearInterval(this.timer);\n };\n Filter.prototype.onTimerTick = function () {\n var selector = '[id=\\'' + this.column.field + '_filterBarcell\\']';\n var filterElement = this.element.querySelector(selector);\n if (!filterElement && this.parent.getFrozenColumns()) {\n filterElement = this.parent.getHeaderContent().querySelector(selector);\n }\n var filterValue;\n this.stopTimer();\n if (!isNullOrUndefined(this.column.filterBarTemplate)) {\n var templateRead = this.column.filterBarTemplate.read;\n if (typeof templateRead === 'string') {\n templateRead = getValue(templateRead, window);\n }\n if (!isNullOrUndefined(templateRead)) {\n this.value = templateRead.call(this, filterElement);\n }\n }\n else {\n filterValue = JSON.parse(JSON.stringify(filterElement.value));\n }\n if (isNullOrUndefined(this.value) || this.value === '') {\n this.removeFilteredColsByField(this.column.field);\n return;\n }\n this.validateFilterValue(this.value);\n this.filterByColumn(this.column.field, this.operator, this.value, this.predicate, this.matchCase, this.ignoreAccent);\n filterElement.value = filterValue;\n this.updateFilterMsg();\n };\n Filter.prototype.validateFilterValue = function (value) {\n var gObj = this.parent;\n var skipInput;\n var index;\n this.matchCase = true;\n switch (this.column.type) {\n case 'number':\n this.operator = this.filterOperators.equal;\n skipInput = ['>', '<', '=', '!'];\n for (var i = 0; i < value.length; i++) {\n if (skipInput.indexOf(value[i]) > -1) {\n index = i;\n break;\n }\n }\n this.getOperator(value.substring(index));\n if (index !== 0) {\n this.value = value.substring(0, index);\n }\n if (this.value !== '' && value.length >= 1) {\n this.value = this.valueFormatter.fromView(this.value, this.column.getParser(), this.column.type);\n }\n if (isNaN(this.value)) {\n this.filterStatusMsg = this.l10n.getConstant('InvalidFilterMessage');\n }\n break;\n case 'date':\n case 'datetime':\n this.operator = this.filterOperators.equal;\n if (this.value !== '' && !(this.value instanceof Date)) {\n this.getOperator(value);\n this.value = this.valueFormatter.fromView(this.value, this.column.getParser(), this.column.type);\n if (isNullOrUndefined(this.value)) {\n this.filterStatusMsg = this.l10n.getConstant('InvalidFilterMessage');\n }\n }\n break;\n case 'string':\n this.matchCase = false;\n if (value.charAt(0) === '*') {\n this.value = this.value.slice(1);\n this.operator = this.filterOperators.startsWith;\n }\n else if (value.charAt(value.length - 1) === '%') {\n this.value = this.value.slice(0, -1);\n this.operator = this.filterOperators.startsWith;\n }\n else if (value.charAt(0) === '%') {\n this.value = this.value.slice(1);\n this.operator = this.filterOperators.endsWith;\n }\n else {\n this.operator = this.filterOperators.startsWith;\n }\n break;\n case 'boolean':\n if (value.toLowerCase() === 'true' || value === '1') {\n this.value = true;\n }\n else if (value.toLowerCase() === 'false' || value === '0') {\n this.value = false;\n }\n else if (value.length) {\n this.filterStatusMsg = this.l10n.getConstant('InvalidFilterMessage');\n }\n this.operator = this.filterOperators.equal;\n break;\n default:\n this.operator = this.filterOperators.equal;\n }\n };\n Filter.prototype.getOperator = function (value) {\n var singleOp = value.charAt(0);\n var multipleOp = value.slice(0, 2);\n var operators = extend({ '=': this.filterOperators.equal, '!': this.filterOperators.notEqual }, DataUtil.operatorSymbols);\n if (operators.hasOwnProperty(singleOp) || operators.hasOwnProperty(multipleOp)) {\n this.operator = operators[singleOp];\n this.value = value.substring(1);\n if (!this.operator) {\n this.operator = operators[multipleOp];\n this.value = value.substring(2);\n }\n }\n if (this.operator === this.filterOperators.lessThan || this.operator === this.filterOperators.greaterThan) {\n if (this.value.charAt(0) === '=') {\n this.operator = this.operator + 'orequal';\n this.value = this.value.substring(1);\n }\n }\n };\n Filter.prototype.columnPositionChanged = function (e) {\n if (this.parent.filterSettings.type !== 'FilterBar') {\n return;\n }\n };\n Filter.prototype.getLocalizedCustomOperators = function () {\n var numOptr = [\n { value: 'equal', text: this.l10n.getConstant('Equal') },\n { value: 'greaterthan', text: this.l10n.getConstant('GreaterThan') },\n { value: 'greaterthanorequal', text: this.l10n.getConstant('GreaterThanOrEqual') },\n { value: 'lessthan', text: this.l10n.getConstant('LessThan') },\n { value: 'lessthanorequal', text: this.l10n.getConstant('LessThanOrEqual') },\n { value: 'notequal', text: this.l10n.getConstant('NotEqual') }\n ];\n this.customOperators = {\n stringOperator: [\n { value: 'startswith', text: this.l10n.getConstant('StartsWith') },\n { value: 'endswith', text: this.l10n.getConstant('EndsWith') },\n { value: 'contains', text: this.l10n.getConstant('Contains') },\n { value: 'equal', text: this.l10n.getConstant('Equal') },\n { value: 'notequal', text: this.l10n.getConstant('NotEqual') }\n ],\n numberOperator: numOptr,\n dateOperator: numOptr,\n datetimeOperator: numOptr,\n booleanOperator: [\n { value: 'equal', text: this.l10n.getConstant('Equal') },\n { value: 'notequal', text: this.l10n.getConstant('NotEqual') }\n ]\n };\n };\n ;\n Filter.prototype.filterIconClickHandler = function (e) {\n var target = e.target;\n if (target.classList.contains('e-filtermenudiv') && (this.parent.filterSettings.type === 'Menu' ||\n this.parent.filterSettings.type === 'CheckBox' || this.parent.filterSettings.type === 'Excel')) {\n var gObj = this.parent;\n var col = gObj.getColumnByUid(parentsUntil(target, 'e-headercell').firstElementChild.getAttribute('e-mappinguid'));\n var gClient = gObj.element.getBoundingClientRect();\n var fClient = target.getBoundingClientRect();\n this.column = col;\n if (this.fltrDlgDetails.field === col.field && this.fltrDlgDetails.isOpen) {\n return;\n }\n if (this.filterModule) {\n this.filterModule.closeDialog();\n }\n this.fltrDlgDetails = { field: col.field, isOpen: true };\n this.filterDialogOpen(this.column, target, fClient.right - gClient.left, fClient.bottom - gClient.top);\n }\n };\n Filter.prototype.clickHandler = function (e) {\n if (this.filterSettings.mode === 'Immediate' || this.parent.filterSettings.type === 'Menu' ||\n this.parent.filterSettings.type === 'CheckBox' || this.parent.filterSettings.type === 'Excel') {\n var gObj = this.parent;\n var target = e.target;\n var datepickerEle = target.classList.contains('e-day'); // due to datepicker popup cause\n if (parentsUntil(target, 'e-filter-popup') || target.classList.contains('e-filtermenudiv')) {\n return;\n }\n else if (this.filterModule &&\n (!parentsUntil(target, 'e-popup-wrapper')\n && (!closest(target, '.e-filter-item.e-menu-item'))\n && (!parentsUntil(target, 'e-popup'))) && !datepickerEle) {\n this.filterModule.closeDialog(target);\n }\n if (this.filterSettings.mode === 'Immediate' && target.classList.contains('e-clear-icon')) {\n var targetText = target.previousElementSibling;\n this.removeFilteredColsByField(targetText.id.slice(0, -14)); //Length of _filterBarcell = 14\n }\n }\n };\n Filter.prototype.filterHandler = function (args) {\n var filterIconElement;\n this.actualPredicate[args.field] = args.actualPredicate;\n var dataManager = new DataManager(this.filterSettings.columns);\n var query = new Query().where('field', this.filterOperators.equal, args.field);\n var result = dataManager.executeLocal(query);\n for (var i = 0; i < result.length; i++) {\n var index = -1;\n for (var j = 0; j < this.filterSettings.columns.length; j++) {\n if (result[i].field === this.filterSettings.columns[j].field) {\n index = j;\n break;\n }\n }\n if (index !== -1) {\n this.filterSettings.columns.splice(index, 1);\n }\n }\n if (this.values[args.field]) {\n delete this.values[args.field];\n }\n var iconClass = this.parent.showColumnMenu ? '.e-columnmenu' : '.e-icon-filter';\n filterIconElement = this.parent.getColumnHeaderByField(args.field).querySelector(iconClass);\n if (args.action === 'filtering') {\n this.filterSettings.columns = this.filterSettings.columns.concat(args.filterCollection);\n if (this.filterSettings.columns.length && filterIconElement) {\n filterIconElement.classList.add('e-filtered');\n }\n }\n else {\n if (filterIconElement) {\n filterIconElement.classList.remove('e-filtered');\n }\n this.parent.renderModule.refresh(); //hot-fix onpropertychanged not working for object { array } \n }\n this.parent.dataBind();\n };\n Filter.prototype.updateFilter = function () {\n var cols = this.filterSettings.columns;\n for (var i = 0; i < cols.length; i++) {\n this.column = this.parent.getColumnByField(cols[i].field) ||\n getColumnByForeignKeyValue(cols[i].field, this.parent.getForeignKeyColumns());\n var fieldName = cols[i].field;\n if (!this.parent.getColumnByField(cols[i].field)) {\n fieldName = getColumnByForeignKeyValue(cols[i].field, this.parent.getForeignKeyColumns()).field;\n }\n /* tslint:disable-next-line:max-line-length */\n this.refreshFilterIcon(fieldName, cols[i].operator, cols[i].value, cols[i].type, cols[i].predicate, cols[i].matchCase, cols[i].ignoreAccent);\n }\n };\n /* tslint:disable-next-line:max-line-length */\n Filter.prototype.refreshFilterIcon = function (fieldName, operator, value, type, predicate, matchCase, ignoreAccent) {\n this.actualPredicate[fieldName] = [{\n field: fieldName,\n predicate: predicate,\n matchCase: matchCase,\n ignoreAccent: ignoreAccent,\n operator: operator,\n value: value,\n type: type\n }];\n this.addFilteredClass(fieldName);\n };\n Filter.prototype.addFilteredClass = function (fieldName) {\n var filterIconElement;\n filterIconElement = this.parent.getColumnHeaderByField(fieldName).querySelector('.e-icon-filter');\n if (filterIconElement) {\n filterIconElement.classList.add('e-filtered');\n }\n };\n return Filter;\n}());\nexport { Filter };\n","import { EventHandler, createElement, detach, formatUnit, Browser, closest } from '@syncfusion/ej2-base';\nimport { Column } from '../models/column';\nimport { ColumnWidthService } from '../services/width-controller';\nimport * as events from '../base/constant';\nimport { getScrollBarWidth, parentsUntil } from '../base/util';\nexport var resizeClassList = {\n root: 'e-rhandler',\n suppress: 'e-rsuppress',\n icon: 'e-ricon',\n helper: 'e-rhelper',\n header: 'th.e-headercell',\n cursor: 'e-rcursor'\n};\n/**\n * `Resize` module is used to handle Resize to fit for columns.\n * @hidden\n * @private\n */\nvar Resize = /** @class */ (function () {\n /**\n * Constructor for the Grid resize module\n * @hidden\n */\n function Resize(parent) {\n this.tapped = false;\n this.isDblClk = true;\n this.parent = parent;\n if (this.parent.isDestroyed) {\n return;\n }\n this.widthService = new ColumnWidthService(parent);\n this.addEventListener();\n }\n /**\n * Resize by field names.\n * @param {string|string[]} fName - Defines the field name.\n * @return {void}\n */\n Resize.prototype.autoFitColumns = function (fName) {\n var columnName = (fName === undefined || fName === null || fName.length <= 0) ?\n this.parent.getColumns().map(function (x) { return x.field; }) : (typeof fName === 'string') ? [fName] : fName;\n this.findColumn(columnName);\n };\n Resize.prototype.resizeColumn = function (fName, index, id) {\n var gObj = this.parent;\n var tWidth = 0;\n var headerTable;\n var contentTable;\n var headerDivTag = 'e-gridheader';\n var contentDivTag = 'e-gridcontent';\n var indentWidth = 0;\n var uid = id ? id : this.parent.getUidByColumnField(fName);\n var columnIndex = this.parent.getNormalizedColumnIndex(uid);\n var headerTextClone;\n var contentTextClone;\n var frzCols = gObj.getFrozenColumns();\n if (frzCols) {\n if (index < frzCols) {\n headerTable = gObj.getHeaderTable();\n contentTable = gObj.getContentTable();\n headerTextClone = headerTable.querySelectorAll('th')[columnIndex].cloneNode(true);\n contentTextClone = contentTable.querySelectorAll(\"td:nth-child(\" + (columnIndex + 1) + \")\");\n }\n else {\n headerTable = gObj.getHeaderContent().querySelector('.e-movableheader').children[0];\n contentTable = gObj.getContent().querySelector('.e-movablecontent').children[0];\n headerTextClone = headerTable.querySelectorAll('th')[columnIndex - frzCols].cloneNode(true);\n contentTextClone = contentTable.querySelectorAll(\"td:nth-child(\" + ((columnIndex - frzCols) + 1) + \")\");\n }\n }\n else {\n headerTable = gObj.getHeaderTable();\n contentTable = gObj.getContentTable();\n headerTextClone = headerTable.querySelectorAll('th')[columnIndex].cloneNode(true);\n contentTextClone = contentTable.querySelectorAll(\"td:nth-child(\" + (columnIndex + 1) + \"):not(.e-groupcaption)\");\n }\n var indentWidthClone = headerTable.querySelector('tr').querySelectorAll('.e-grouptopleftcell');\n if (indentWidthClone.length > 0) {\n for (var i = 0; i < indentWidthClone.length; i++) {\n indentWidth += indentWidthClone[i].offsetWidth;\n }\n }\n if (this.parent.detailTemplate || this.parent.childGrid) {\n indentWidth += contentTable.querySelector('.e-detailrowcollapse').offsetWidth;\n }\n var headerText = [headerTextClone];\n var contentText = [];\n for (var i = 0; i < contentTextClone.length; i++) {\n contentText[i] = contentTextClone[i].cloneNode(true);\n }\n var wHeader = this.createTable(headerTable, headerText, headerDivTag);\n var wContent = this.createTable(contentTable, contentText, contentDivTag);\n var columnbyindex = gObj.getColumns()[index];\n var result;\n var width = (wHeader > wContent) ? columnbyindex.width = formatUnit(wHeader) : columnbyindex.width = formatUnit(wContent);\n this.widthService.setColumnWidth(gObj.getColumns()[index]);\n result = gObj.getColumns().some(function (x) { return x.width === null || x.width === undefined || x.width.length <= 0; });\n if (result === false) {\n gObj.getColumns().forEach(function (element) {\n if (element.visible) {\n tWidth = tWidth + parseInt(element.width, 10);\n }\n });\n }\n var calcTableWidth = tWidth + indentWidth;\n if (tWidth > 0 && !gObj.getFrozenColumns()) {\n if (this.parent.detailTemplate || this.parent.childGrid) {\n this.widthService.setColumnWidth(new Column({ width: '30px' }));\n }\n headerTable.style.width = formatUnit(calcTableWidth);\n contentTable.style.width = formatUnit(calcTableWidth);\n }\n var tableWidth = headerTable.offsetWidth;\n var contentwidth = (gObj.getContent().scrollWidth);\n if (contentwidth > tableWidth) {\n headerTable.classList.add('e-tableborder');\n contentTable.classList.add('e-tableborder');\n }\n else {\n headerTable.classList.remove('e-tableborder');\n contentTable.classList.remove('e-tableborder');\n }\n };\n /**\n * To destroy the resize\n * @return {void}\n * @hidden\n */\n Resize.prototype.destroy = function () {\n this.widthService = null;\n this.unwireEvents();\n this.removeEventListener();\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Resize.prototype.getModuleName = function () {\n return 'resize';\n };\n Resize.prototype.findColumn = function (fName) {\n var _this = this;\n fName.forEach(function (element) {\n var fieldName = element;\n var columnIndex = _this.parent.getColumnIndexByField(fieldName);\n if (_this.parent.getColumns()[columnIndex].visible === true) {\n _this.resizeColumn(fieldName, columnIndex);\n }\n });\n };\n /**\n * To create table for autofit\n * @hidden\n */\n Resize.prototype.createTable = function (table, text, tag) {\n var myTableDiv = createElement('div');\n myTableDiv.className = this.parent.element.className;\n myTableDiv.style.cssText = 'display: inline-block;visibility:hidden;position:absolute';\n var mySubDiv = createElement('div');\n mySubDiv.className = tag;\n var myTable = createElement('table');\n myTable.className = table.className;\n myTable.classList.add('e-resizetable');\n myTable.style.cssText = 'table-layout: auto;width: auto';\n var myTr = createElement('tr');\n text.forEach(function (element) {\n var tr = myTr.cloneNode();\n tr.className = table.querySelector('tr').className;\n tr.appendChild(element);\n myTable.appendChild(tr);\n });\n mySubDiv.appendChild(myTable);\n myTableDiv.appendChild(mySubDiv);\n document.body.appendChild(myTableDiv);\n var offsetWidthValue = myTable.getBoundingClientRect().width;\n document.body.removeChild(myTableDiv);\n return Math.ceil(offsetWidthValue);\n };\n /**\n * @hidden\n */\n Resize.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.headerRefreshed, this.refreshHeight, this);\n this.parent.on(events.initialEnd, this.wireEvents, this);\n };\n /**\n * @hidden\n */\n Resize.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.headerRefreshed, this.refreshHeight);\n this.parent.off(events.initialEnd, this.wireEvents);\n };\n /**\n * @hidden\n */\n Resize.prototype.render = function () {\n this.unwireEvents();\n this.wireEvents();\n this.setHandlerHeight();\n };\n Resize.prototype.refreshHeight = function () {\n this.getResizeHandlers().forEach(function (ele) {\n ele.style.height = ele.parentElement.offsetHeight + 'px';\n });\n };\n Resize.prototype.wireEvents = function () {\n EventHandler.add(this.parent.getHeaderContent(), Browser.touchStartEvent, this.resizeStart, this);\n EventHandler.add(this.parent.getHeaderContent(), events.dblclick, this.callAutoFit, this);\n };\n Resize.prototype.unwireEvents = function () {\n EventHandler.remove(this.parent.getHeaderContent(), Browser.touchStartEvent, this.resizeStart);\n EventHandler.remove(this.parent.getHeaderContent(), events.dblclick, this.callAutoFit);\n };\n Resize.prototype.getResizeHandlers = function () {\n return this.parent.getFrozenColumns() ?\n [].slice.call(this.parent.getHeaderContent().querySelectorAll('.' + resizeClassList.root))\n : [].slice.call(this.parent.getHeaderTable().querySelectorAll('.' + resizeClassList.root));\n };\n Resize.prototype.setHandlerHeight = function () {\n [].slice.call(this.parent.getHeaderTable().querySelectorAll('.' + resizeClassList.suppress)).forEach(function (ele) {\n ele.style.height = ele.parentElement.offsetHeight + 'px';\n });\n };\n Resize.prototype.callAutoFit = function (e) {\n if (e.target.classList.contains('e-rhandler')) {\n var col = this.getTargetColumn(e);\n this.resizeColumn(col.field, this.parent.getNormalizedColumnIndex(col.uid), col.uid);\n var header = closest(e.target, resizeClassList.header);\n header.classList.add('e-resized');\n }\n };\n Resize.prototype.resizeStart = function (e) {\n if (e.target.classList.contains('e-rhandler')) {\n if (!this.helper) {\n if (this.getScrollBarWidth() === 0) {\n for (var _i = 0, _a = this.refreshColumnWidth(); _i < _a.length; _i++) {\n var col = _a[_i];\n this.widthService.setColumnWidth(col);\n }\n this.widthService.setWidthToTable();\n }\n this.element = e.target;\n this.parentElementWidth = this.parent.element.getBoundingClientRect().width;\n this.appendHelper();\n this.column = this.getTargetColumn(e);\n this.pageX = this.getPointX(e);\n if (this.parent.enableRtl) {\n this.minMove = parseInt(this.column.width.toString(), 10)\n - (this.column.minWidth ? parseInt(this.column.minWidth.toString(), 10) : 0);\n }\n else {\n this.minMove = (this.column.minWidth ? parseInt(this.column.minWidth.toString(), 10) : 0)\n - parseInt(this.column.width.toString(), 10);\n }\n this.minMove += this.pageX;\n }\n if (Browser.isDevice && !this.helper.classList.contains(resizeClassList.icon)) {\n this.helper.classList.add(resizeClassList.icon);\n EventHandler.add(document, Browser.touchStartEvent, this.removeHelper, this);\n EventHandler.add(this.helper, Browser.touchStartEvent, this.resizeStart, this);\n }\n else {\n var args = {\n e: e,\n column: this.column\n };\n this.parent.trigger(events.resizeStart, args);\n if (args.cancel) {\n this.cancelResizeAction();\n return;\n }\n EventHandler.add(document, Browser.touchEndEvent, this.resizeEnd, this);\n EventHandler.add(this.parent.element, Browser.touchMoveEvent, this.resizing, this);\n this.updateCursor('add');\n }\n }\n };\n Resize.prototype.cancelResizeAction = function (removeEvents) {\n if (removeEvents) {\n EventHandler.remove(this.parent.element, Browser.touchMoveEvent, this.resizing);\n EventHandler.remove(document, Browser.touchEndEvent, this.resizeEnd);\n this.updateCursor('remove');\n }\n if (Browser.isDevice) {\n EventHandler.remove(document, Browser.touchStartEvent, this.removeHelper);\n EventHandler.remove(this.helper, Browser.touchStartEvent, this.resizeStart);\n }\n detach(this.helper);\n this.refresh();\n };\n Resize.prototype.getWidth = function (width, minWidth, maxWidth) {\n if (minWidth && width < minWidth) {\n return minWidth;\n }\n else if ((maxWidth && width > maxWidth)) {\n return maxWidth;\n }\n else {\n return width;\n }\n };\n Resize.prototype.resizing = function (e) {\n if (this.parent.allowTextWrap) {\n if (this.parent.getFrozenColumns()) {\n if (!this.parent.getHeaderContent().querySelectorAll('.e-stackedheadercell').length) {\n this.parent.notify(events.freezeRender, { case: 'textwrap' });\n }\n }\n this.element.style.height = this.element.parentElement.offsetHeight + 'px';\n this.setHelperHeight();\n }\n var pageX = this.getPointX(e);\n var mousemove = this.parent.enableRtl ? -(pageX - this.pageX) : (pageX - this.pageX);\n var colData = {\n width: parseInt(this.widthService.getWidth(this.column).toString(), 10) + mousemove,\n minWidth: this.column.minWidth ? parseInt(this.column.minWidth.toString(), 10) : null,\n maxWidth: this.column.maxWidth ? parseInt(this.column.maxWidth.toString(), 10) : null\n };\n var width = this.getWidth(colData.width, colData.minWidth, colData.maxWidth);\n if ((!this.parent.enableRtl && this.minMove >= pageX) || (this.parent.enableRtl && this.minMove <= pageX)) {\n width = this.column.minWidth ? parseInt(this.column.minWidth.toString(), 10) : 0;\n this.pageX = pageX = this.minMove;\n }\n if (width !== parseInt(this.column.width.toString(), 10)) {\n this.pageX = pageX;\n this.column.width = formatUnit(width);\n var args = {\n e: e,\n column: this.column\n };\n this.parent.trigger(events.onResize, args);\n if (args.cancel) {\n this.cancelResizeAction(true);\n return;\n }\n this.widthService.setColumnWidth(this.column, null, 'resize');\n this.updateHelper();\n }\n this.isDblClk = false;\n };\n Resize.prototype.resizeEnd = function (e) {\n if (!this.helper || this.parent.isDestroyed) {\n return;\n }\n EventHandler.remove(this.parent.element, Browser.touchMoveEvent, this.resizing);\n EventHandler.remove(document, Browser.touchEndEvent, this.resizeEnd);\n this.updateCursor('remove');\n detach(this.helper);\n var args = {\n e: e,\n column: this.column\n };\n this.parent.trigger(events.resizeStop, args);\n closest(this.element, '.e-headercell').classList.add('e-resized');\n if (parentsUntil(this.element, 'e-frozenheader')) {\n this.isFrozenColResized = true;\n }\n else {\n this.isFrozenColResized = false;\n }\n if (this.parent.getFrozenColumns()) {\n this.parent.notify(events.freezeRender, { case: 'textwrap' });\n }\n this.refresh();\n this.doubleTapEvent(e);\n this.isDblClk = true;\n };\n Resize.prototype.getPointX = function (e) {\n if (e.touches && e.touches.length) {\n return e.touches[0].pageX;\n }\n else {\n return e.pageX;\n }\n };\n Resize.prototype.refreshColumnWidth = function () {\n var columns = this.parent.getColumns();\n for (var _i = 0, _a = [].slice.apply(this.parent.getHeaderTable().querySelectorAll('th.e-headercell')); _i < _a.length; _i++) {\n var ele = _a[_i];\n for (var _b = 0, columns_1 = columns; _b < columns_1.length; _b++) {\n var column = columns_1[_b];\n if (ele.querySelector('[e-mappinguid]') &&\n ele.querySelector('[e-mappinguid]').getAttribute('e-mappinguid') === column.uid && column.visible) {\n column.width = ele.getBoundingClientRect().width;\n break;\n }\n }\n }\n return columns;\n };\n Resize.prototype.getTargetColumn = function (e) {\n var cell = closest(e.target, resizeClassList.header);\n var uid = cell.querySelector('.e-headercelldiv').getAttribute('e-mappinguid');\n return this.parent.getColumnByUid(uid);\n };\n Resize.prototype.updateCursor = function (action) {\n var headerRows = [].slice.call(this.parent.getHeaderContent().querySelectorAll('th'));\n headerRows.push(this.parent.element);\n for (var _i = 0, headerRows_1 = headerRows; _i < headerRows_1.length; _i++) {\n var row = headerRows_1[_i];\n row.classList[action](resizeClassList.cursor);\n }\n };\n Resize.prototype.refresh = function () {\n this.column = null;\n this.pageX = null;\n this.element = null;\n this.helper = null;\n };\n Resize.prototype.appendHelper = function () {\n this.helper = createElement('div', {\n className: resizeClassList.helper\n });\n this.parent.element.appendChild(this.helper);\n this.setHelperHeight();\n };\n Resize.prototype.setHelperHeight = function () {\n var height = this.parent.getContent().offsetHeight - this.getScrollBarWidth();\n var rect = closest(this.element, resizeClassList.header);\n var tr = [].slice.call(this.parent.getHeaderContent().querySelectorAll('tr'));\n var frzCols = this.parent.getFrozenColumns();\n if (frzCols) {\n if (rect.parentElement.children.length !== frzCols) {\n tr.splice(0, tr.length / 2);\n }\n else {\n tr.splice(tr.length / 2, tr.length / 2);\n }\n }\n for (var i = tr.indexOf(rect.parentElement); i < tr.length; i++) {\n height += tr[i].offsetHeight;\n }\n var pos = this.calcPos(rect);\n pos.left += (this.parent.enableRtl ? 0 - 1 : rect.offsetWidth - 2);\n this.helper.style.cssText = 'height: ' + height + 'px; top: ' + pos.top + 'px; left:' + Math.floor(pos.left) + 'px;';\n };\n Resize.prototype.getScrollBarWidth = function (height) {\n var ele = this.parent.getFrozenColumns() ? this.parent.getContent().querySelector('.e-movablecontent')\n : this.parent.getContent().firstChild;\n return (ele.scrollHeight > ele.clientHeight && height) ||\n ele.scrollWidth > ele.clientWidth ? getScrollBarWidth() : 0;\n };\n Resize.prototype.removeHelper = function (e) {\n var cls = e.target.classList;\n if (!(cls.contains(resizeClassList.root) || cls.contains(resizeClassList.icon)) && this.helper) {\n EventHandler.remove(document, Browser.touchStartEvent, this.removeHelper);\n EventHandler.remove(this.helper, Browser.touchStartEvent, this.resizeStart);\n detach(this.helper);\n this.refresh();\n }\n };\n Resize.prototype.updateHelper = function () {\n var rect = closest(this.element, resizeClassList.header);\n var left = Math.floor(this.calcPos(rect).left + (this.parent.enableRtl ? 0 - 1 : rect.offsetWidth - 2));\n var borderWidth = 2; // to maintain the helper inside of grid element.\n if (left > this.parentElementWidth) {\n left = this.parentElementWidth - borderWidth;\n }\n if (this.parent.getFrozenColumns()) {\n var table = closest(rect, '.e-table');\n var fLeft = table.offsetLeft;\n if (left < fLeft) {\n left = fLeft;\n }\n }\n this.helper.style.left = left + 'px';\n };\n Resize.prototype.calcPos = function (elem) {\n var parentOffset = {\n top: 0,\n left: 0\n };\n var offset = elem.getBoundingClientRect();\n var doc = elem.ownerDocument;\n var offsetParent = elem.offsetParent || doc.documentElement;\n while (offsetParent &&\n (offsetParent === doc.body || offsetParent === doc.documentElement) &&\n offsetParent.style.position === 'static') {\n offsetParent = offsetParent.parentNode;\n }\n if (offsetParent && offsetParent !== elem && offsetParent.nodeType === 1) {\n parentOffset = offsetParent.getBoundingClientRect();\n }\n return {\n top: offset.top - parentOffset.top,\n left: offset.left - parentOffset.left\n };\n };\n Resize.prototype.doubleTapEvent = function (e) {\n if (this.getUserAgent() && this.isDblClk) {\n if (!this.tapped) {\n this.tapped = setTimeout(this.timeoutHandler(), 300);\n }\n else {\n clearTimeout(this.tapped);\n this.callAutoFit(e);\n this.tapped = null;\n }\n }\n };\n Resize.prototype.getUserAgent = function () {\n var userAgent = Browser.userAgent.toLowerCase();\n return /iphone|ipod|ipad/.test(userAgent);\n };\n Resize.prototype.timeoutHandler = function () {\n this.tapped = null;\n };\n return Resize;\n}());\nexport { Resize };\n","import { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { closest as closestElement, removeClass, classList, createElement, remove } from '@syncfusion/ej2-base';\nimport { getElementIndex, inArray, parentsUntil, getPosition, isActionPrevent } from '../base/util';\nimport * as events from '../base/constant';\n/**\n *\n * The `Reorder` module is used for reordering columns.\n */\nvar Reorder = /** @class */ (function () {\n /**\n * Constructor for the Grid reorder module\n * @hidden\n */\n function Reorder(parent) {\n this.parent = parent;\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.headerDrop, this.headerDrop, this);\n this.parent.on(events.uiUpdate, this.enableAfterRender, this);\n this.parent.on(events.reorderComplete, this.onActionComplete, this);\n this.parent.on(events.columnDrag, this.drag, this);\n this.parent.on(events.columnDragStart, this.dragStart, this);\n this.parent.on(events.columnDragStop, this.dragStop, this);\n this.parent.on(events.headerDrop, this.headerDrop, this);\n this.parent.on(events.headerRefreshed, this.createReorderElement, this);\n }\n Reorder.prototype.chkDropPosition = function (srcElem, destElem) {\n return (srcElem.parentElement.isEqualNode(destElem.parentElement) || (this.parent.getFrozenColumns()\n && Array.prototype.indexOf.call(closestElement(srcElem, 'thead').children, srcElem.parentElement)\n === Array.prototype.indexOf.call(closestElement(destElem, 'thead').children, destElem.parentElement)))\n && this.targetParentContainerIndex(srcElem, destElem) > -1;\n };\n Reorder.prototype.chkDropAllCols = function (srcElem, destElem) {\n var isFound;\n var headers = this.getHeaderCells();\n var header;\n while (!isFound && headers.length > 0) {\n header = headers.pop();\n isFound = srcElem !== header && this.targetParentContainerIndex(srcElem, destElem) > -1;\n }\n return isFound;\n };\n Reorder.prototype.findColParent = function (col, cols, parent) {\n parent = parent;\n for (var i = 0, len = cols.length; i < len; i++) {\n if (col === cols[i]) {\n return true;\n }\n else if (cols[i].columns) {\n var cnt = parent.length;\n parent.push(cols[i]);\n if (!this.findColParent(col, cols[i].columns, parent)) {\n parent.splice(cnt, parent.length - cnt);\n }\n else {\n return true;\n }\n }\n }\n return false;\n };\n Reorder.prototype.getColumnsModel = function (cols) {\n var columnModel = [];\n var subCols = [];\n for (var i = 0, len = cols.length; i < len; i++) {\n columnModel.push(cols[i]);\n if (cols[i].columns) {\n subCols = subCols.concat(cols[i].columns);\n }\n }\n if (subCols.length) {\n columnModel = columnModel.concat(this.getColumnsModel(subCols));\n }\n return columnModel;\n };\n Reorder.prototype.headerDrop = function (e) {\n var gObj = this.parent;\n var dropElement = this.element.querySelector('.e-headercelldiv') || this.element.querySelector('.e-stackedheadercelldiv');\n var uId = dropElement.getAttribute('e-mappinguid');\n var column = gObj.getColumnByUid(uId);\n if (!closestElement(e.target, 'th') || (!isNullOrUndefined(column) && column.allowReordering === false)) {\n return;\n }\n var destElem = closestElement(e.target, '.e-headercell');\n var destElemDiv = destElem.querySelector('.e-headercelldiv') || destElem.querySelector('.e-stackedheadercelldiv');\n var destElemUid = destElemDiv.getAttribute('e-mappinguid');\n var destColumn = gObj.getColumnByUid(destElemUid);\n if (isNullOrUndefined(destColumn) || destColumn.allowReordering === false) {\n return;\n }\n if (destElem && !(!this.chkDropPosition(this.element, destElem) || !this.chkDropAllCols(this.element, destElem))) {\n if (this.parent.enableColumnVirtualization) {\n var columns = this.parent.columns;\n var sourceUid_1 = this.element.querySelector('.e-headercelldiv').getAttribute('e-mappinguid');\n var col = this.parent.getColumns(true).filter(function (col) { return col.uid === sourceUid_1; });\n var colMatchIndex_1 = null;\n var column_1 = col[0];\n var destUid_1 = destElem.querySelector('.e-headercelldiv').getAttribute('e-mappinguid');\n var bool = columns.some(function (col, index) {\n if (col.uid === destUid_1) {\n colMatchIndex_1 = index;\n return col.uid === destUid_1;\n }\n return false;\n });\n if (!isNullOrUndefined(colMatchIndex_1)) {\n this.moveColumns(colMatchIndex_1, column_1);\n }\n }\n else {\n var headers = this.getHeaderCells();\n var oldIdx = getElementIndex(this.element, headers);\n var columns = this.getColumnsModel(this.parent.columns);\n var column_2 = columns[oldIdx];\n var newIndex = this.targetParentContainerIndex(this.element, destElem);\n this.moveColumns(newIndex, column_2);\n }\n }\n };\n Reorder.prototype.isActionPrevent = function (gObj) {\n return isActionPrevent(gObj);\n };\n Reorder.prototype.moveColumns = function (destIndex, column) {\n var gObj = this.parent;\n if (this.isActionPrevent(gObj)) {\n gObj.notify(events.preventBatch, { instance: this, handler: this.moveColumns, arg1: destIndex, arg2: column });\n return;\n }\n var parent = this.getColParent(column, this.parent.columns);\n var cols = parent ? parent.columns : this.parent.columns;\n var srcIdx = inArray(column, cols);\n if (!gObj.allowReordering || srcIdx === destIndex || srcIdx === -1 || destIndex === -1) {\n return;\n }\n cols.splice(destIndex, 0, cols.splice(srcIdx, 1)[0]);\n gObj.getColumns(true);\n gObj.notify(events.columnPositionChanged, { fromIndex: destIndex, toIndex: srcIdx });\n gObj.notify(events.modelChanged, {\n type: events.actionBegin, requestType: 'reorder'\n });\n };\n Reorder.prototype.targetParentContainerIndex = function (srcElem, destElem) {\n var headers = this.getHeaderCells();\n var cols = this.parent.columns;\n var flatColumns = this.getColumnsModel(cols);\n var parent = this.getColParent(flatColumns[getElementIndex(srcElem, headers)], cols);\n cols = parent ? parent.columns : cols;\n return inArray(flatColumns[getElementIndex(destElem, headers)], cols);\n };\n Reorder.prototype.getHeaderCells = function () {\n if (this.parent.getFrozenColumns()) {\n var fTh = void 0;\n var mTh = void 0;\n var fHeaders = [];\n var fRows = [].slice.call(this.parent.getHeaderTable().querySelectorAll('.e-columnheader'));\n var mRows = [].slice.call(this.parent.getHeaderContent()\n .querySelector('.e-movableheader').querySelectorAll('.e-columnheader'));\n for (var i = 0; i < fRows.length; i++) {\n fTh = [].slice.call(fRows[i].getElementsByClassName('e-headercell'));\n mTh = [].slice.call(mRows[i].getElementsByClassName('e-headercell'));\n fHeaders = fHeaders.concat(fTh);\n for (var j = 0; j < mTh.length; j++) {\n if (!fTh.length || j !== 0 || fTh[fTh.length - 1].innerText !== mTh[0].innerText) {\n fHeaders.push(mTh[j]);\n }\n }\n }\n return fHeaders;\n }\n else {\n return [].slice.call(this.parent.element.getElementsByClassName('e-headercell'));\n }\n };\n Reorder.prototype.getColParent = function (column, columns) {\n var parents = [];\n this.findColParent(column, columns, parents);\n return parents[parents.length - 1];\n };\n /**\n * Changes the position of the Grid columns by field names.\n * @param {string} fromFName - Defines the origin field name.\n * @param {string} toFName - Defines the destination field name.\n * @return {void}\n */\n Reorder.prototype.reorderColumns = function (fromFName, toFName) {\n var fColumn = this.parent.getColumnByField(fromFName);\n var toColumn = this.parent.getColumnByField(toFName);\n if ((!isNullOrUndefined(fColumn) && !fColumn.allowReordering) || (!isNullOrUndefined(toColumn) && !toColumn.allowReordering)) {\n return;\n }\n var column = this.parent.getColumnByField(toFName);\n var parent = this.getColParent(column, this.parent.columns);\n var columns = parent ? parent.columns : this.parent.columns;\n var destIndex = inArray(column, columns);\n if (destIndex > -1) {\n this.moveColumns(destIndex, this.parent.getColumnByField(fromFName));\n }\n };\n Reorder.prototype.enableAfterRender = function (e) {\n if (e.module === this.getModuleName() && e.enable) {\n this.createReorderElement();\n }\n };\n Reorder.prototype.createReorderElement = function () {\n var header = this.parent.element.querySelector('.e-headercontent');\n this.upArrow = header.appendChild(createElement('div', { className: 'e-icons e-icon-reorderuparrow e-reorderuparrow', attrs: { style: 'display:none' } }));\n this.downArrow = header.appendChild(createElement('div', { className: 'e-icons e-icon-reorderdownarrow e-reorderdownarrow', attrs: { style: 'display:none' } }));\n };\n /**\n * The function used to trigger onActionComplete\n * @return {void}\n * @hidden\n */\n Reorder.prototype.onActionComplete = function (e) {\n this.parent.trigger(events.actionComplete, extend(e, { type: events.actionComplete }));\n };\n /**\n * To destroy the reorder\n * @return {void}\n * @hidden\n */\n Reorder.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n remove(this.upArrow);\n remove(this.downArrow);\n this.parent.off(events.headerDrop, this.headerDrop);\n this.parent.off(events.uiUpdate, this.enableAfterRender);\n this.parent.off(events.reorderComplete, this.onActionComplete);\n this.parent.off(events.columnDrag, this.drag);\n this.parent.off(events.columnDragStart, this.dragStart);\n this.parent.off(events.columnDragStop, this.dragStop);\n this.parent.off(events.headerRefreshed, this.createReorderElement);\n //call ejdrag and drop destroy\n };\n Reorder.prototype.drag = function (e) {\n var gObj = this.parent;\n var target = e.target;\n if (e.column.allowReordering === false) {\n return;\n }\n var closest = closestElement(target, '.e-headercell:not(.e-stackedHeaderCell)');\n var cloneElement = gObj.element.querySelector('.e-cloneproperties');\n var isLeft = this.x > getPosition(e.event).x + gObj.getContent().firstElementChild.scrollLeft;\n removeClass(gObj.getHeaderTable().querySelectorAll('.e-reorderindicate'), ['e-reorderindicate']);\n this.setDisplay('none');\n this.stopTimer();\n classList(cloneElement, ['e-defaultcur'], ['e-notallowedcur']);\n this.updateScrollPostion(e.event);\n if (closest && !closest.isEqualNode(this.element)) {\n target = closest;\n //consider stacked, detail header cell \n if (!(!this.chkDropPosition(this.element, target) || !this.chkDropAllCols(this.element, target))) {\n this.updateArrowPosition(target, isLeft);\n classList(target, ['e-allowDrop', 'e-reorderindicate'], []);\n }\n else if (!(gObj.allowGrouping && parentsUntil(e.target, 'e-groupdroparea'))) {\n classList(cloneElement, ['e-notallowedcur'], ['e-defaultcur']);\n }\n }\n gObj.trigger(events.columnDrag, { target: target, draggableType: 'headercell', column: e.column });\n };\n Reorder.prototype.updateScrollPostion = function (e) {\n var _this = this;\n var frzCols = this.parent.getFrozenColumns();\n var x = getPosition(e).x;\n var cliRect = this.parent.element.getBoundingClientRect();\n var cliRectBaseLeft = frzCols ? this.parent.element.querySelector('.e-movableheader')\n .getBoundingClientRect().left : cliRect.left;\n var cliRectBaseRight = cliRect.right;\n var scrollElem = frzCols ? this.parent.getContent().querySelector('.e-movablecontent')\n : this.parent.getContent().firstElementChild;\n if (x > cliRectBaseLeft && x < cliRectBaseLeft + 35) {\n this.timer = window.setInterval(function () { _this.setScrollLeft(scrollElem, true); }, 50);\n }\n else if (x < cliRectBaseRight && x > cliRectBaseRight - 35) {\n this.timer = window.setInterval(function () { _this.setScrollLeft(scrollElem, false); }, 50);\n }\n };\n Reorder.prototype.setScrollLeft = function (scrollElem, isLeft) {\n var scrollLeft = scrollElem.scrollLeft;\n scrollElem.scrollLeft = scrollElem.scrollLeft + (isLeft ? -5 : 5);\n if (scrollLeft !== scrollElem.scrollLeft) {\n this.setDisplay('none');\n }\n };\n Reorder.prototype.stopTimer = function () {\n window.clearInterval(this.timer);\n };\n Reorder.prototype.updateArrowPosition = function (target, isLeft) {\n var cliRect = target.getBoundingClientRect();\n var cliRectBase = this.parent.element.getBoundingClientRect();\n if ((isLeft && cliRect.left < cliRectBase.left) || (!isLeft && cliRect.right > cliRectBase.right)) {\n return;\n }\n this.upArrow.style.top = cliRect.top + cliRect.height - cliRectBase.top + 'px';\n this.downArrow.style.top = cliRect.top - cliRectBase.top - 4 + 'px';\n this.upArrow.style.left = this.downArrow.style.left = (isLeft ? cliRect.left : cliRect.right) - cliRectBase.left - 4 + 'px';\n this.setDisplay('');\n };\n Reorder.prototype.dragStart = function (e) {\n var gObj = this.parent;\n var target = e.target;\n this.element = target.classList.contains('e-headercell') ? target :\n parentsUntil(target, 'e-headercell');\n if (e.column.allowReordering === false) {\n return;\n }\n this.x = getPosition(e.event).x + gObj.getContent().firstElementChild.scrollLeft;\n gObj.trigger(events.columnDragStart, {\n target: target, draggableType: 'headercell', column: e.column\n });\n };\n Reorder.prototype.dragStop = function (e) {\n var gObj = this.parent;\n this.setDisplay('none');\n this.stopTimer();\n if (!e.cancel) {\n gObj.trigger(events.columnDrop, { target: e.target, draggableType: 'headercell', column: e.column });\n }\n removeClass(gObj.getHeaderTable().querySelectorAll('.e-reorderindicate'), ['e-reorderindicate']);\n };\n Reorder.prototype.setDisplay = function (display) {\n this.upArrow.style.display = display;\n this.downArrow.style.display = display;\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Reorder.prototype.getModuleName = function () {\n return 'reorder';\n };\n return Reorder;\n}());\nexport { Reorder };\n","import { Draggable } from '@syncfusion/ej2-base';\nimport { extend } from '@syncfusion/ej2-base';\nimport { remove, createElement, closest as closestElement, classList } from '@syncfusion/ej2-base';\nimport { parentsUntil, removeElement, getPosition } from '../base/util';\nimport * as events from '../base/constant';\n/**\n *\n * Reorder module is used to handle row reordering.\n * @hidden\n */\nvar RowDD = /** @class */ (function () {\n /**\n * Constructor for the Grid print module\n * @hidden\n */\n function RowDD(parent) {\n var _this = this;\n //Internal variables \n this.selectedRows = [];\n this.helper = function (e) {\n var gObj = _this.parent;\n if (document.getElementsByClassName('e-griddragarea').length ||\n (!e.sender.target.classList.contains('e-selectionbackground') && gObj.selectionSettings.type !== 'Single')) {\n return false;\n }\n var visualElement = createElement('div', {\n className: 'e-cloneproperties e-draganddrop e-grid e-dragclone',\n styles: 'height:\"auto\", z-index:2, width:' + gObj.element.offsetWidth\n });\n var table = createElement('table', { styles: 'width:' + gObj.element.offsetWidth });\n var tbody = createElement('tbody');\n if (gObj.selectionSettings.mode === 'Row' && gObj.selectionSettings.type === 'Single') {\n var index = parseInt(e.sender.target.parentElement.getAttribute('aria-rowindex'), 10);\n gObj.selectRow(index);\n }\n var selectedRows = gObj.getSelectedRows();\n for (var i = 0, len = selectedRows.length; i < len; i++) {\n var selectedRow = selectedRows[i].cloneNode(true);\n removeElement(selectedRow, '.e-indentcell');\n removeElement(selectedRow, '.e-detailrowcollapse');\n removeElement(selectedRow, '.e-detailrowexpand');\n tbody.appendChild(selectedRow);\n }\n table.appendChild(tbody);\n visualElement.appendChild(table);\n gObj.element.appendChild(visualElement);\n return visualElement;\n };\n this.dragStart = function (e) {\n var gObj = _this.parent;\n if (document.getElementsByClassName('e-griddragarea').length) {\n return;\n }\n gObj.trigger(events.rowDragStart, {\n rows: gObj.getSelectedRows(),\n target: e.target, draggableType: 'rows', data: gObj.getSelectedRecords()\n });\n var dropElem = document.getElementById(gObj.rowDropSettings.targetID);\n if (gObj.rowDropSettings.targetID && dropElem && dropElem.ej2_instances) {\n dropElem.ej2_instances[0].getContent().classList.add('e-allowRowDrop');\n }\n _this.isDragStop = false;\n };\n this.drag = function (e) {\n var gObj = _this.parent;\n var cloneElement = _this.parent.element.querySelector('.e-cloneproperties');\n var target = _this.getElementFromPosition(cloneElement, e.event);\n classList(cloneElement, ['e-defaultcur'], ['e-notallowedcur']);\n gObj.trigger(events.rowDrag, {\n rows: gObj.getSelectedRows(),\n target: target, draggableType: 'rows', data: gObj.getSelectedRecords()\n });\n gObj.element.classList.add('e-rowdrag');\n if (!parentsUntil(target, 'e-gridcontent') ||\n parentsUntil(cloneElement.parentElement, 'e-grid').id === parentsUntil(target, 'e-grid').id) {\n classList(cloneElement, ['e-notallowedcur'], ['e-defaultcur']);\n }\n };\n this.dragStop = function (e) {\n var gObj = _this.parent;\n if (_this.parent.isDestroyed) {\n return;\n }\n var target = _this.getElementFromPosition(e.helper, e.event);\n gObj.element.classList.remove('e-rowdrag');\n var dropElem = document.getElementById(gObj.rowDropSettings.targetID);\n if (gObj.rowDropSettings.targetID && dropElem && dropElem.ej2_instances) {\n dropElem.ej2_instances[0].getContent().classList.remove('e-allowRowDrop');\n }\n gObj.trigger(events.rowDrop, {\n target: target, draggableType: 'rows',\n rows: gObj.getSelectedRows(), data: gObj.getSelectedRecords()\n });\n if (!parentsUntil(target, 'e-gridcontent')) {\n remove(e.helper);\n return;\n }\n };\n this.parent = parent;\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.initialEnd, this.initializeDrag, this);\n this.parent.on(events.columnDrop, this.columnDrop, this);\n this.parent.on(events.rowDragAndDropComplete, this.onActionComplete, this);\n this.parent.on(events.uiUpdate, this.enableAfterRender, this);\n }\n RowDD.prototype.initializeDrag = function () {\n var gObj = this.parent;\n var column;\n var drag;\n drag = new Draggable(gObj.getContent(), {\n dragTarget: '.e-rowcell',\n distance: 5,\n helper: this.helper,\n dragStart: this.dragStart,\n drag: this.drag,\n dragStop: this.dragStop\n });\n };\n RowDD.prototype.getElementFromPosition = function (element, event) {\n var target;\n var position = getPosition(event);\n element.style.display = 'none';\n target = document.elementFromPoint(position.x, position.y);\n element.style.display = '';\n return target;\n };\n /**\n * The function used to trigger onActionComplete\n * @return {void}\n * @hidden\n */\n RowDD.prototype.onActionComplete = function (e) {\n this.parent.trigger(events.actionComplete, extend(e, { type: events.actionComplete }));\n };\n RowDD.prototype.getTargetIdx = function (targetRow) {\n return targetRow ? parseInt(targetRow.getAttribute('aria-rowindex'), 10) : 0;\n };\n RowDD.prototype.columnDrop = function (e) {\n var gObj = this.parent;\n if (e.droppedElement.getAttribute('action') !== 'grouping') {\n var targetRow = closestElement(e.target, 'tr');\n var srcControl = void 0;\n var currentIndex = void 0;\n if (e.droppedElement.parentElement.id !== gObj.element.id) {\n srcControl = e.droppedElement.parentElement.ej2_instances[0];\n }\n else {\n return;\n }\n if (srcControl.element.id !== gObj.element.id && srcControl.rowDropSettings.targetID !== gObj.element.id) {\n return;\n }\n var records = srcControl.getSelectedRecords();\n var targetIndex = currentIndex = this.getTargetIdx(targetRow);\n var count = 0;\n if (isNaN(targetIndex)) {\n targetIndex = currentIndex = 0;\n }\n if (gObj.allowPaging) {\n targetIndex = targetIndex + (gObj.pageSettings.currentPage * gObj.pageSettings.pageSize) - gObj.pageSettings.pageSize;\n }\n //Todo: drag and drop mapper & BatchChanges \n gObj.notify(events.rowsAdded, { toIndex: targetIndex, records: records });\n gObj.notify(events.modelChanged, {\n type: events.actionBegin, requestType: 'rowdraganddrop'\n });\n var selectedRows = srcControl.getSelectedRowIndexes();\n var skip = srcControl.allowPaging ?\n (srcControl.pageSettings.currentPage * srcControl.pageSettings.pageSize) - srcControl.pageSettings.pageSize : 0;\n this.selectedRows = [];\n for (var i = 0, len = records.length; i < len; i++) {\n this.selectedRows.push(skip + selectedRows[i]);\n }\n srcControl.notify(events.rowsRemoved, { indexes: this.selectedRows, records: records });\n srcControl.notify(events.modelChanged, {\n type: events.actionBegin, requestType: 'rowdraganddrop'\n });\n }\n };\n RowDD.prototype.enableAfterRender = function (e) {\n if (e.module === this.getModuleName() && e.enable) {\n this.initializeDrag();\n }\n };\n /**\n * To destroy the print\n * @return {void}\n * @hidden\n */\n RowDD.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initialEnd, this.initializeDrag);\n this.parent.off(events.columnDrop, this.columnDrop);\n this.parent.off(events.rowDragAndDropComplete, this.onActionComplete);\n this.parent.off(events.uiUpdate, this.enableAfterRender);\n //destory ejdrag and drop\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n RowDD.prototype.getModuleName = function () {\n return 'rowDragAndDrop';\n };\n return RowDD;\n}());\nexport { RowDD };\n","import { Draggable, Droppable } from '@syncfusion/ej2-base';\nimport { createElement, closest, remove, classList, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { parentsUntil, isActionPrevent } from '../base/util';\nimport * as events from '../base/constant';\nimport { AriaService } from '../services/aria-service';\n/**\n *\n * The `Group` module is used to handle group action.\n */\nvar Group = /** @class */ (function () {\n /**\n * Constructor for Grid group module\n * @hidden\n */\n function Group(parent, groupSettings, sortedColumns, serviceLocator) {\n var _this = this;\n this.isAppliedGroup = false;\n this.isAppliedUnGroup = false;\n this.visualElement = createElement('div', {\n className: 'e-cloneproperties e-dragclone e-gdclone',\n styles: 'line-height:23px', attrs: { action: 'grouping' }\n });\n this.helper = function (e) {\n var gObj = _this.parent;\n var target = e.sender.target;\n var element = target.classList.contains('e-groupheadercell') ? target :\n parentsUntil(target, 'e-groupheadercell');\n if (!element) {\n return false;\n }\n _this.column = gObj.getColumnByField(element.firstElementChild.getAttribute('ej-mappingname'));\n _this.visualElement.textContent = element.textContent;\n _this.visualElement.style.width = element.offsetWidth + 2 + 'px';\n _this.visualElement.style.height = element.offsetHeight + 2 + 'px';\n _this.visualElement.setAttribute('e-mappinguid', _this.column.uid);\n gObj.element.appendChild(_this.visualElement);\n return _this.visualElement;\n };\n this.dragStart = function () {\n _this.parent.element.classList.add('e-ungroupdrag');\n };\n this.drag = function (e) {\n var target = e.target;\n var cloneElement = _this.parent.element.querySelector('.e-cloneproperties');\n _this.parent.trigger(events.columnDrag, { target: target, draggableType: 'headercell', column: _this.column });\n classList(cloneElement, ['e-defaultcur'], ['e-notallowedcur']);\n if (!(parentsUntil(target, 'e-gridcontent') || parentsUntil(target, 'e-headercell'))) {\n classList(cloneElement, ['e-notallowedcur'], ['e-defaultcur']);\n }\n };\n this.dragStop = function (e) {\n _this.parent.element.classList.remove('e-ungroupdrag');\n if (!(parentsUntil(e.target, 'e-gridcontent') || parentsUntil(e.target, 'e-gridheader'))) {\n remove(e.helper);\n return;\n }\n };\n this.drop = function (e) {\n var gObj = _this.parent;\n var column = gObj.getColumnByUid(e.droppedElement.getAttribute('e-mappinguid'));\n _this.element.classList.remove('e-hover');\n remove(e.droppedElement);\n _this.aria.setDropTarget(_this.parent.element.querySelector('.e-groupdroparea'), false);\n _this.aria.setGrabbed(_this.parent.getHeaderTable().querySelector('[aria-grabbed=true]'), false);\n if (isNullOrUndefined(column) || column.allowGrouping === false ||\n parentsUntil(gObj.getColumnHeaderByUid(column.uid), 'e-grid').getAttribute('id') !==\n gObj.element.getAttribute('id')) {\n return;\n }\n _this.groupColumn(column.field);\n };\n this.contentRefresh = true;\n this.aria = new AriaService();\n this.parent = parent;\n this.groupSettings = groupSettings;\n this.serviceLocator = serviceLocator;\n this.sortedColumns = sortedColumns;\n this.focus = serviceLocator.getService('focus');\n this.addEventListener();\n }\n Group.prototype.columnDrag = function (e) {\n var gObj = this.parent;\n var cloneElement = this.parent.element.querySelector('.e-cloneproperties');\n classList(cloneElement, ['e-defaultcur'], ['e-notallowedcur']);\n if (!parentsUntil(e.target, 'e-groupdroparea') &&\n !(this.parent.allowReordering && parentsUntil(e.target, 'e-headercell'))) {\n classList(cloneElement, ['e-notallowedcur'], ['e-defaultcur']);\n }\n e.target.classList.contains('e-groupdroparea') ? this.element.classList.add('e-hover') : this.element.classList.remove('e-hover');\n };\n Group.prototype.columnDragStart = function (e) {\n if (e.target.classList.contains('e-stackedheadercell')) {\n return;\n }\n var gObj = this.parent;\n var dropArea = this.parent.element.querySelector('.e-groupdroparea');\n this.aria.setDropTarget(dropArea, e.column.allowGrouping);\n var element = e.target.classList.contains('e-headercell') ? e.target : parentsUntil(e.target, 'e-headercell');\n this.aria.setGrabbed(element, true, !e.column.allowGrouping);\n };\n Group.prototype.columnDrop = function (e) {\n var gObj = this.parent;\n if (e.droppedElement.getAttribute('action') === 'grouping') {\n var column = gObj.getColumnByUid(e.droppedElement.getAttribute('e-mappinguid'));\n if (isNullOrUndefined(column) || column.allowGrouping === false ||\n parentsUntil(gObj.getColumnHeaderByUid(column.uid), 'e-grid').getAttribute('id') !==\n gObj.element.getAttribute('id')) {\n return;\n }\n this.ungroupColumn(column.field);\n }\n };\n /**\n * @hidden\n */\n Group.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.uiUpdate, this.enableAfterRender, this);\n this.parent.on(events.groupComplete, this.onActionComplete, this);\n this.parent.on(events.ungroupComplete, this.onActionComplete, this);\n this.parent.on(events.inBoundModelChanged, this.onPropertyChanged, this);\n this.parent.on(events.click, this.clickHandler, this);\n this.parent.on(events.columnDrag, this.columnDrag, this);\n this.parent.on(events.columnDragStart, this.columnDragStart, this);\n this.parent.on(events.columnDrop, this.columnDrop, this);\n this.parent.on(events.headerRefreshed, this.refreshSortIcons, this);\n this.parent.on(events.sortComplete, this.refreshSortIcons, this);\n this.parent.on(events.keyPressed, this.keyPressHandler, this);\n this.parent.on(events.contentReady, this.initialEnd, this);\n this.parent.on(events.onEmpty, this.initialEnd, this);\n this.parent.on(events.initialEnd, this.render, this);\n };\n /**\n * @hidden\n */\n Group.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initialEnd, this.render);\n this.parent.off(events.uiUpdate, this.enableAfterRender);\n this.parent.off(events.groupComplete, this.onActionComplete);\n this.parent.off(events.ungroupComplete, this.onActionComplete);\n this.parent.off(events.inBoundModelChanged, this.onPropertyChanged);\n this.parent.off(events.click, this.clickHandler);\n this.parent.off(events.columnDrag, this.columnDrag);\n this.parent.off(events.columnDragStart, this.columnDragStart);\n this.parent.off(events.columnDrop, this.columnDrop);\n this.parent.off(events.headerRefreshed, this.refreshSortIcons);\n this.parent.off(events.sortComplete, this.refreshSortIcons);\n this.parent.off(events.keyPressed, this.keyPressHandler);\n };\n Group.prototype.initialEnd = function () {\n var gObj = this.parent;\n this.parent.off(events.contentReady, this.initialEnd);\n this.parent.off(events.onEmpty, this.initialEnd);\n if (this.parent.getColumns().length && this.groupSettings.columns.length) {\n this.contentRefresh = false;\n for (var _i = 0, _a = gObj.groupSettings.columns; _i < _a.length; _i++) {\n var col = _a[_i];\n this.groupColumn(col);\n }\n this.contentRefresh = true;\n }\n };\n Group.prototype.keyPressHandler = function (e) {\n var gObj = this.parent;\n if ((!this.groupSettings.columns.length ||\n ['altDownArrow', 'altUpArrow', 'ctrlDownArrow', 'ctrlUpArrow', 'enter'].indexOf(e.action) === -1)) {\n return;\n }\n e.preventDefault();\n switch (e.action) {\n case 'altDownArrow':\n case 'altUpArrow':\n var selected = gObj.allowSelection ? gObj.getSelectedRowIndexes() : [];\n if (selected.length) {\n var rows = gObj.getContentTable().querySelector('tbody').children;\n var dataRow = gObj.getDataRows()[selected[selected.length - 1]];\n var grpRow = void 0;\n for (var i = dataRow.rowIndex; i >= 0; i--) {\n if (!rows[i].classList.contains('e-row') && !rows[i].classList.contains('e-detailrow')) {\n grpRow = rows[i];\n break;\n }\n }\n this.expandCollapseRows(grpRow.querySelector(e.action === 'altUpArrow' ?\n '.e-recordplusexpand' : '.e-recordpluscollapse'));\n }\n break;\n case 'ctrlDownArrow':\n this.expandAll();\n break;\n case 'ctrlUpArrow':\n this.collapseAll();\n break;\n case 'enter':\n if (this.parent.isEdit || (closest(e.target, '#' + this.parent.element.id + '_searchbar') !== null)) {\n return;\n }\n var element = this.focus.getFocusedElement();\n var row = element ? element.parentElement.querySelector('[class^=\"e-record\"]') : null;\n if (!row) {\n break;\n }\n this.expandCollapseRows(row);\n break;\n }\n };\n Group.prototype.clickHandler = function (e) {\n this.expandCollapseRows(e.target);\n this.applySortFromTarget(e.target);\n this.unGroupFromTarget(e.target);\n this.toogleGroupFromHeader(e.target);\n };\n Group.prototype.unGroupFromTarget = function (target) {\n if (target.classList.contains('e-ungroupbutton')) {\n this.ungroupColumn(target.parentElement.getAttribute('ej-mappingname'));\n }\n };\n Group.prototype.toogleGroupFromHeader = function (target) {\n if (this.groupSettings.showToggleButton) {\n if (target.classList.contains('e-grptogglebtn')) {\n if (target.classList.contains('e-toggleungroup')) {\n this.ungroupColumn(this.parent.getColumnByUid(target.parentElement.getAttribute('e-mappinguid')).field);\n }\n else {\n this.groupColumn(this.parent.getColumnByUid(target.parentElement.getAttribute('e-mappinguid')).field);\n }\n }\n else {\n if (target.classList.contains('e-toggleungroup')) {\n this.ungroupColumn(target.parentElement.getAttribute('ej-mappingname'));\n }\n }\n }\n };\n Group.prototype.applySortFromTarget = function (target) {\n var gObj = this.parent;\n var gHeader = closest(target, '.e-groupheadercell');\n if (gObj.allowSorting && gHeader && !target.classList.contains('e-ungroupbutton') &&\n !target.classList.contains('e-toggleungroup')) {\n var field = gHeader.firstElementChild.getAttribute('ej-mappingname');\n if (gObj.getColumnHeaderByField(field).querySelectorAll('.e-ascending').length) {\n gObj.sortColumn(field, 'Descending', true);\n }\n else {\n gObj.sortColumn(field, 'Ascending', true);\n }\n }\n };\n /**\n * Expands or collapses grouped rows by target element.\n * @param {Element} target - Defines the target element of the grouped row.\n * @return {void}\n */\n Group.prototype.expandCollapseRows = function (target) {\n var trgt = parentsUntil(target, 'e-recordplusexpand') ||\n parentsUntil(target, 'e-recordpluscollapse');\n if (trgt) {\n var cellIdx = trgt.cellIndex;\n var rowIdx = trgt.parentElement.rowIndex;\n var rowNodes = this.parent.getContentTable().querySelector('tbody').children;\n var rows = [].slice.call(rowNodes).slice(rowIdx + 1, rowNodes.length);\n var isHide = void 0;\n var expandElem = void 0;\n var toExpand = [];\n var indent = trgt.parentElement.querySelectorAll('.e-indentcell').length;\n var expand = false;\n if (trgt.classList.contains('e-recordpluscollapse')) {\n addClass([trgt], 'e-recordplusexpand');\n removeClass([trgt], 'e-recordpluscollapse');\n trgt.firstElementChild.className = 'e-icons e-gdiagonaldown e-icon-gdownarrow';\n expand = true;\n }\n else {\n isHide = true;\n removeClass([trgt], 'e-recordplusexpand');\n addClass([trgt], 'e-recordpluscollapse');\n trgt.firstElementChild.className = 'e-icons e-gnextforward e-icon-grightarrow';\n }\n this.aria.setExpand(trgt, expand);\n for (var i = 0, len = rows.length; i < len; i++) {\n if (rows[i].querySelectorAll('td')[cellIdx] &&\n rows[i].querySelectorAll('td')[cellIdx].classList.contains('e-indentcell') && rows) {\n if (isHide) {\n rows[i].style.display = 'none';\n }\n else {\n if (rows[i].querySelectorAll('.e-indentcell').length === indent + 1) {\n rows[i].style.display = '';\n expandElem = rows[i].querySelector('.e-recordplusexpand');\n if (expandElem) {\n toExpand.push(expandElem);\n }\n if (rows[i].classList.contains('e-detailrow')) {\n if (rows[i - 1].querySelectorAll('.e-detailrowcollapse').length) {\n rows[i].style.display = 'none';\n }\n }\n }\n }\n }\n else {\n break;\n }\n }\n for (var i = 0, len = toExpand.length; i < len; i++) {\n removeClass([toExpand[i]], 'e-recordplusexpand');\n addClass([toExpand[i]], 'e-recordpluscollapse');\n toExpand[i].firstElementChild.className = 'e-icons e-gnextforward e-icon-grightarrow';\n this.expandCollapseRows(toExpand[i]);\n }\n }\n };\n Group.prototype.expandCollapse = function (isExpand) {\n var rowNodes = this.parent.getContentTable().querySelector('tbody').children;\n var row;\n for (var i = 0, len = rowNodes.length; i < len; i++) {\n if (rowNodes[i].querySelectorAll('.e-recordplusexpand, .e-recordpluscollapse').length) {\n row = rowNodes[i].querySelector(isExpand ? '.e-recordpluscollapse' : '.e-recordplusexpand');\n if (row) {\n row.className = isExpand ? 'e-recordplusexpand' : 'e-recordpluscollapse';\n row.firstElementChild.className = isExpand ? 'e-icons e-gdiagonaldown e-icon-gdownarrow' :\n 'e-icons e-gnextforward e-icon-grightarrow';\n }\n if (!(rowNodes[i].firstElementChild.classList.contains('e-recordplusexpand') ||\n rowNodes[i].firstElementChild.classList.contains('e-recordpluscollapse'))) {\n rowNodes[i].style.display = isExpand ? '' : 'none';\n }\n }\n else {\n rowNodes[i].style.display = isExpand ? '' : 'none';\n }\n }\n };\n /**\n * Expands all the grouped rows of the Grid.\n * @return {void}\n */\n Group.prototype.expandAll = function () {\n this.expandCollapse(true);\n };\n /**\n * Collapses all the grouped rows of the Grid.\n * @return {void}\n */\n Group.prototype.collapseAll = function () {\n this.expandCollapse(false);\n };\n /**\n * The function is used to render grouping\n * @return {Element}\n * @hidden\n */\n Group.prototype.render = function () {\n this.l10n = this.serviceLocator.getService('localization');\n this.renderGroupDropArea();\n this.initDragAndDrop();\n this.refreshToggleBtn();\n };\n Group.prototype.renderGroupDropArea = function () {\n var groupElem = this.parent.element.querySelector('.e-groupdroparea');\n if (groupElem) {\n remove(groupElem);\n }\n this.element = createElement('div', { className: 'e-groupdroparea', attrs: { 'tabindex': '-1' } });\n this.updateGroupDropArea();\n this.parent.element.insertBefore(this.element, this.parent.element.firstChild);\n if (!this.groupSettings.showDropArea) {\n this.element.style.display = 'none';\n }\n };\n Group.prototype.updateGroupDropArea = function (clear) {\n if (this.groupSettings.showDropArea && !this.groupSettings.columns.length) {\n var dragLabel = this.l10n.getConstant('GroupDropArea');\n this.element.innerHTML = dragLabel;\n this.element.classList.remove('e-grouped');\n }\n else {\n if ((this.element.innerHTML === this.l10n.getConstant('GroupDropArea') && (this.groupSettings.columns.length === 1\n || !this.isAppliedGroup && !this.isAppliedUnGroup)) || clear) {\n this.element.innerHTML = '';\n }\n this.element.classList.add('e-grouped');\n }\n };\n Group.prototype.initDragAndDrop = function () {\n this.initializeGHeaderDrop();\n this.initializeGHeaderDrag();\n };\n Group.prototype.initializeGHeaderDrag = function () {\n var drag = new Draggable(this.element, {\n dragTarget: '.e-groupheadercell',\n distance: 5,\n helper: this.helper,\n dragStart: this.dragStart,\n drag: this.drag,\n dragStop: this.dragStop\n });\n };\n Group.prototype.initializeGHeaderDrop = function () {\n var gObj = this.parent;\n var drop = new Droppable(this.element, {\n accept: '.e-dragclone',\n drop: this.drop\n });\n };\n /**\n * Groups a column by column name.\n * @param {string} columnName - Defines the column name to group.\n * @return {void}\n */\n Group.prototype.groupColumn = function (columnName) {\n var gObj = this.parent;\n var column = gObj.getColumnByField(columnName);\n if (isNullOrUndefined(column) || column.allowGrouping === false ||\n (this.contentRefresh && this.groupSettings.columns.indexOf(columnName) > -1)) {\n return;\n }\n if (isActionPrevent(gObj)) {\n gObj.notify(events.preventBatch, { instance: this, handler: this.groupColumn, arg1: columnName });\n return;\n }\n column.visible = gObj.groupSettings.showGroupedColumn;\n this.colName = columnName;\n this.isAppliedGroup = true;\n if (this.contentRefresh) {\n this.updateModel();\n }\n else {\n this.addColToGroupDrop(columnName);\n }\n this.updateGroupDropArea();\n this.isAppliedGroup = false;\n };\n /**\n * Ungroups a column by column name.\n * @param {string} columnName - Defines the column name to ungroup.\n * @return {void}\n */\n Group.prototype.ungroupColumn = function (columnName) {\n var gObj = this.parent;\n var column = this.parent.enableColumnVirtualization ?\n this.parent.columns.filter(function (c) { return c.field === columnName; })[0] : gObj.getColumnByField(columnName);\n if (isNullOrUndefined(column) || column.allowGrouping === false || this.groupSettings.columns.indexOf(columnName) < 0) {\n return;\n }\n if (isActionPrevent(gObj)) {\n gObj.notify(events.preventBatch, { instance: this, handler: this.ungroupColumn, arg1: columnName });\n return;\n }\n column.visible = true;\n this.colName = column.field;\n var columns = JSON.parse(JSON.stringify(this.groupSettings.columns));\n columns.splice(columns.indexOf(this.colName), 1);\n if (this.sortedColumns.indexOf(columnName) < 0) {\n for (var i = 0, len = gObj.sortSettings.columns.length; i < len; i++) {\n if (columnName === gObj.sortSettings.columns[i].field) {\n gObj.sortSettings.columns.splice(i, 1);\n break;\n }\n }\n }\n this.groupSettings.columns = columns;\n if (gObj.allowGrouping) {\n this.isAppliedUnGroup = true;\n this.parent.dataBind();\n }\n };\n /**\n * The function used to update groupSettings\n * @return {void}\n * @hidden\n */\n Group.prototype.updateModel = function () {\n var gObj = this.parent;\n var i = 0;\n var columns = JSON.parse(JSON.stringify(this.groupSettings.columns));\n columns.push(this.colName);\n this.groupSettings.columns = columns;\n this.groupAddSortingQuery(this.colName);\n this.parent.dataBind();\n };\n /**\n * The function used to trigger onActionComplete\n * @return {void}\n * @hidden\n */\n Group.prototype.onActionComplete = function (e) {\n var gObj = this.parent;\n if (e.requestType === 'grouping') {\n this.addColToGroupDrop(this.colName);\n }\n else {\n this.removeColFromGroupDrop(this.colName);\n }\n var args = this.groupSettings.columns.indexOf(this.colName) > -1 ? {\n columnName: this.colName, requestType: 'grouping', type: events.actionComplete\n } : { requestType: 'ungrouping', type: events.actionComplete };\n this.parent.trigger(events.actionComplete, extend(e, args));\n this.colName = null;\n };\n Group.prototype.groupAddSortingQuery = function (colName) {\n var i = 0;\n while (i < this.parent.sortSettings.columns.length) {\n if (this.parent.sortSettings.columns[i].field === colName) {\n break;\n }\n i++;\n }\n if (this.parent.sortSettings.columns.length === i) {\n this.parent.sortSettings.columns.push({ field: colName, direction: 'Ascending' });\n }\n else if (!this.parent.allowSorting) {\n this.parent.sortSettings.columns[i].direction = 'Ascending';\n }\n };\n Group.prototype.addColToGroupDrop = function (field) {\n var gObj = this.parent;\n var direction = 'Ascending';\n var groupedColumn = createElement('div', { className: 'e-grid-icon e-groupheadercell' });\n var childDiv = createElement('div', { attrs: { 'ej-mappingname': field } });\n var column = this.parent.getColumnByField(field);\n if (isNullOrUndefined(column)) {\n return;\n }\n //Todo headerTemplateID for grouped column, disableHtmlEncode \n var headerCell = gObj.getColumnHeaderByUid(column.uid);\n if (!isNullOrUndefined(column.headerTemplate)) {\n if (column.headerTemplate.indexOf('#') !== -1) {\n childDiv.innerHTML = document.querySelector(column.headerTemplate).innerHTML.trim();\n }\n else {\n childDiv.innerHTML = column.headerTemplate;\n }\n childDiv.firstElementChild.classList.add('e-grouptext');\n }\n else {\n childDiv.appendChild(createElement('span', {\n className: 'e-grouptext', innerHTML: column.headerText,\n attrs: { tabindex: '-1', 'aria-label': 'sort the grouped column' }\n }));\n }\n if (this.groupSettings.showToggleButton) {\n childDiv.appendChild(createElement('span', {\n className: 'e-togglegroupbutton e-icons e-icon-ungroup e-toggleungroup', innerHTML: ' ',\n attrs: { tabindex: '-1', 'aria-label': 'ungroup button' }\n }));\n }\n if (headerCell.querySelectorAll('.e-ascending,.e-descending').length) {\n direction = headerCell.querySelector('.e-ascending') ? 'Ascending' : 'Descending';\n }\n childDiv.appendChild(createElement('span', {\n className: 'e-groupsort e-icons ' +\n ('e-' + direction.toLowerCase() + ' e-icon-' + direction.toLowerCase()), innerHTML: ' ',\n attrs: { tabindex: '-1', 'aria-label': 'sort the grouped column' }\n }));\n childDiv.appendChild(createElement('span', {\n className: 'e-ungroupbutton e-icons e-icon-hide', innerHTML: ' ',\n attrs: { title: this.l10n.getConstant('UnGroup'), tabindex: '-1', 'aria-label': 'ungroup the grouped column' },\n styles: this.groupSettings.showUngroupButton ? '' : 'display:none'\n }));\n groupedColumn.appendChild(childDiv);\n this.element.appendChild(groupedColumn);\n //Todo: rtl \n };\n Group.prototype.refreshToggleBtn = function (isRemove) {\n if (this.groupSettings.showToggleButton) {\n var headers = [].slice.call(this.parent.element.getElementsByClassName('e-headercelldiv'));\n for (var i = 0, len = headers.length; i < len; i++) {\n if (!((headers[i].classList.contains('e-emptycell')) || (headers[i].classList.contains('e-headerchkcelldiv')))) {\n var column = this.parent.getColumnByUid(headers[i].getAttribute('e-mappinguid'));\n if (!this.parent.showColumnMenu || (this.parent.showColumnMenu && !column.showColumnMenu)) {\n if (headers[i].querySelectorAll('.e-grptogglebtn').length) {\n remove(headers[i].querySelectorAll('.e-grptogglebtn')[0]);\n }\n if (!isRemove) {\n headers[i].appendChild(createElement('span', {\n className: 'e-grptogglebtn e-icons ' +\n (this.groupSettings.columns.indexOf(column.field) > -1 ? 'e-toggleungroup e-icon-ungroup'\n : 'e-togglegroup e-icon-group'), attrs: { tabindex: '-1', 'aria-label': 'Group button' }\n }));\n }\n }\n }\n }\n }\n };\n Group.prototype.removeColFromGroupDrop = function (field) {\n if (!isNullOrUndefined(this.getGHeaderCell(field))) {\n remove(this.getGHeaderCell(field));\n this.updateGroupDropArea();\n }\n this.isAppliedUnGroup = false;\n };\n Group.prototype.onPropertyChanged = function (e) {\n var _this = this;\n if (e.module !== this.getModuleName()) {\n return;\n }\n var _loop_1 = function (prop) {\n switch (prop) {\n case 'columns':\n var args = void 0;\n if (this_1.contentRefresh) {\n if (!this_1.isAppliedUnGroup) {\n if (!this_1.isAppliedGroup) {\n this_1.updateGroupDropArea(true);\n for (var i = 0; i < this_1.groupSettings.columns.length; i++) {\n this_1.colName = this_1.groupSettings.columns[i];\n var col = this_1.parent.getColumnByField(this_1.colName);\n col.visible = this_1.parent.groupSettings.showGroupedColumn;\n this_1.groupAddSortingQuery(this_1.colName);\n if (i < this_1.groupSettings.columns.length - 1) {\n this_1.addColToGroupDrop(this_1.groupSettings.columns[i]);\n }\n }\n }\n args = { columnName: this_1.colName, requestType: e.properties[prop].length ? 'grouping' : 'ungrouping',\n type: events.actionBegin };\n }\n else {\n args = { requestType: 'ungrouping', type: events.actionBegin };\n }\n if (!this_1.groupSettings.showGroupedColumn) {\n e.oldProperties[prop].forEach(function (column) {\n if (e.properties[prop].indexOf(column) === -1) {\n _this.parent.getColumnByField(column).visible = true;\n }\n });\n }\n this_1.parent.notify(events.modelChanged, args);\n }\n break;\n case 'showDropArea':\n this_1.updateGroupDropArea();\n this_1.groupSettings.showDropArea ? this_1.element.style.display = '' : this_1.element.style.display = 'none';\n break;\n case 'showGroupedColumn':\n this_1.updateGroupedColumn(this_1.groupSettings.showGroupedColumn);\n this_1.parent.notify(events.modelChanged, { requestType: 'refresh' });\n break;\n case 'showUngroupButton':\n this_1.updateButtonVisibility(this_1.groupSettings.showUngroupButton, 'e-ungroupbutton');\n break;\n case 'showToggleButton':\n this_1.updateButtonVisibility(this_1.groupSettings.showToggleButton, 'e-togglegroupbutton ');\n this_1.parent.refreshHeader();\n break;\n }\n };\n var this_1 = this;\n for (var _i = 0, _a = Object.keys(e.properties); _i < _a.length; _i++) {\n var prop = _a[_i];\n _loop_1(prop);\n }\n };\n Group.prototype.updateGroupedColumn = function (isVisible) {\n for (var i = 0; i < this.groupSettings.columns.length; i++) {\n this.parent.getColumnByField(this.groupSettings.columns[i]).visible = isVisible;\n }\n };\n Group.prototype.updateButtonVisibility = function (isVisible, className) {\n var gHeader = [].slice.call(this.element.querySelectorAll('.' + className));\n for (var i = 0; i < gHeader.length; i++) {\n gHeader[i].style.display = isVisible ? '' : 'none';\n }\n };\n Group.prototype.enableAfterRender = function (e) {\n if (e.module === this.getModuleName() && e.enable) {\n this.render();\n }\n };\n /**\n * To destroy the reorder\n * @return {void}\n * @hidden\n */\n Group.prototype.destroy = function () {\n if (!this.parent.isDestroyed) {\n this.clearGrouping();\n }\n this.removeEventListener();\n this.refreshToggleBtn(true);\n remove(this.element);\n //call ejdrag and drop destroy\n };\n /**\n * Clears all the grouped columns of the Grid.\n * @return {void}\n */\n Group.prototype.clearGrouping = function () {\n var cols = JSON.parse(JSON.stringify(this.groupSettings.columns));\n this.contentRefresh = false;\n for (var i = 0, len = cols.length; i < len; i++) {\n this.ungroupColumn(cols[i]);\n }\n this.contentRefresh = true;\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Group.prototype.getModuleName = function () {\n return 'group';\n };\n Group.prototype.refreshSortIcons = function (e) {\n var gObj = this.parent;\n var header;\n var cols = gObj.sortSettings.columns;\n var gCols = gObj.groupSettings.columns;\n var fieldNames = this.parent.getColumns().map(function (c) { return c.field; });\n this.refreshToggleBtn();\n for (var i = 0, len = cols.length; i < len; i++) {\n if (fieldNames.indexOf(cols[i].field) === -1) {\n continue;\n }\n header = gObj.getColumnHeaderByField(cols[i].field);\n if (!gObj.allowSorting && (this.sortedColumns.indexOf(cols[i].field) > -1 ||\n this.groupSettings.columns.indexOf(cols[i].field) > -1)) {\n classList(header.querySelector('.e-sortfilterdiv'), ['e-ascending', 'e-icon-ascending'], []);\n if (cols.length > 1) {\n header.querySelector('.e-headercelldiv').appendChild(createElement('span', { className: 'e-sortnumber', innerHTML: (i + 1).toString() }));\n }\n }\n else if (this.getGHeaderCell(cols[i].field) && this.getGHeaderCell(cols[i].field).querySelectorAll('.e-groupsort').length) {\n if (cols[i].direction === 'Ascending') {\n classList(this.getGHeaderCell(cols[i].field).querySelector('.e-groupsort'), ['e-ascending', 'e-icon-ascending'], ['e-descending', 'e-icon-descending']);\n }\n else {\n classList(this.getGHeaderCell(cols[i].field).querySelector('.e-groupsort'), ['e-descending', 'e-icon-descending'], ['e-ascending', 'e-icon-ascending']);\n }\n }\n }\n for (var i = 0, len = gCols.length; i < len; i++) {\n if (fieldNames.indexOf(gCols[i]) === -1) {\n continue;\n }\n gObj.getColumnHeaderByField(gCols[i]).setAttribute('aria-grouped', 'true');\n }\n };\n Group.prototype.getGHeaderCell = function (field) {\n if (this.element && this.element.querySelector('[ej-mappingname=\"' + field + '\"]')) {\n return this.element.querySelector('[ej-mappingname=\"' + field + '\"]').parentElement;\n }\n return null;\n };\n return Group;\n}());\nexport { Group };\n","import { createElement, closest, classList } from '@syncfusion/ej2-base';\nimport { Grid } from '../base/grid';\nimport { parents, getUid, appendChildren } from '../base/util';\nimport * as events from '../base/constant';\nimport { AriaService } from '../services/aria-service';\nimport { Row } from '../models/row';\nimport { Cell } from '../models/cell';\nimport { CellType } from '../base/enum';\n/**\n * The `DetailRow` module is used to handle detail template and hierarchy Grid operations.\n */\nvar DetailRow = /** @class */ (function () {\n /**\n * Constructor for the Grid detail template module\n * @hidden\n */\n function DetailRow(parent, locator) {\n //Internal variables\n this.aria = new AriaService();\n this.parent = parent;\n if (this.parent.isDestroyed) {\n return;\n }\n this.focus = locator.getService('focus');\n this.parent.on(events.click, this.clickHandler, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.keyPressed, this.keyPressHandler, this);\n }\n DetailRow.prototype.clickHandler = function (e) {\n this.toogleExpandcollapse(closest(e.target, 'td'));\n };\n DetailRow.prototype.toogleExpandcollapse = function (target) {\n var gObj = this.parent;\n var parent = 'parentDetails';\n if (target && (target.classList.contains('e-detailrowcollapse') || target.classList.contains('e-detailrowexpand'))) {\n var tr = target.parentElement;\n var uid_1 = tr.getAttribute('data-uid');\n var nextRow = this.parent.getContentTable().querySelector('tbody').children[tr.rowIndex + 1];\n if (target.classList.contains('e-detailrowcollapse')) {\n var key = 'records';\n var currentViewData = gObj.allowGrouping && gObj.groupSettings.columns.length ?\n gObj.currentViewData[key] : gObj.currentViewData;\n var data = currentViewData[tr.getAttribute('aria-rowindex')];\n if (this.isDetailRow(nextRow)) {\n nextRow.style.display = '';\n }\n else if (gObj.getDetailTemplate() || gObj.childGrid) {\n var detailRow = createElement('tr', { className: 'e-detailrow' });\n var detailCell = createElement('td', { className: 'e-detailcell' });\n detailCell.setAttribute('colspan', this.parent.getVisibleColumns().length.toString());\n var row = new Row({\n isDataRow: true,\n isExpand: true,\n cells: [new Cell({ cellType: CellType.Indent }), new Cell({ isDataCell: true, visible: true })]\n });\n for (var i = 0, len = gObj.groupSettings.columns.length; i < len; i++) {\n detailRow.appendChild(createElement('td', { className: 'e-indentcell' }));\n row.cells.unshift(new Cell({ cellType: CellType.Indent }));\n }\n detailRow.appendChild(createElement('td', { className: 'e-detailindentcell' }));\n detailRow.appendChild(detailCell);\n tr.parentNode.insertBefore(detailRow, tr.nextSibling);\n if (gObj.detailTemplate) {\n appendChildren(detailCell, gObj.getDetailTemplate()(data, gObj, 'detailTemplate'));\n }\n else {\n gObj.childGrid[parent] = {\n parentID: gObj.element.id,\n parentPrimaryKeys: gObj.getPrimaryKeyFieldNames(),\n parentKeyField: gObj.childGrid.queryString,\n parentKeyFieldValue: data[gObj.childGrid.queryString],\n parentRowData: data\n };\n var grid = new Grid(gObj.childGrid);\n var modules = grid.getInjectedModules();\n var injectedModues = gObj.getInjectedModules();\n if (!modules || modules.length !== injectedModues.length) {\n grid.setInjectedModules(injectedModues);\n }\n var gridElem = createElement('div', {\n id: 'child' + parents(tr, 'e-grid').length +\n '_grid' + tr.rowIndex + getUid('')\n });\n detailCell.appendChild(gridElem);\n grid.appendTo(gridElem);\n }\n detailRow.appendChild(detailCell);\n tr.parentNode.insertBefore(detailRow, tr.nextSibling);\n var idx_1;\n this.parent.getRowsObject().some(function (r, rIndex) { idx_1 = rIndex; return r.uid === uid_1; });\n gObj.getRows().splice(tr.rowIndex + 1, 0, detailRow);\n this.parent.getRowsObject().splice(idx_1 + 1, 0, row);\n gObj.trigger(events.detailDataBound, { detailElement: detailCell, data: data });\n gObj.notify(events.detailDataBound, { rows: this.parent.getRowsObject() });\n }\n classList(target, ['e-detailrowexpand'], ['e-detailrowcollapse']);\n classList(target.firstElementChild, ['e-dtdiagonaldown', 'e-icon-gdownarrow'], ['e-dtdiagonalright', 'e-icon-grightarrow']);\n this.parent.getRowsObject()[tr.rowIndex].isExpand = true;\n this.aria.setExpand(target, true);\n }\n else {\n if (this.isDetailRow(nextRow)) {\n nextRow.style.display = 'none';\n }\n classList(target, ['e-detailrowcollapse'], ['e-detailrowexpand']);\n classList(target.firstElementChild, ['e-dtdiagonalright', 'e-icon-grightarrow'], ['e-dtdiagonaldown', 'e-icon-gdownarrow']);\n this.parent.getRowsObject()[tr.rowIndex].isExpand = false;\n this.aria.setExpand(target, false);\n }\n }\n };\n DetailRow.prototype.isDetailRow = function (row) {\n return row && row.classList.contains('e-detailrow');\n };\n DetailRow.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.click, this.clickHandler);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.keyPressed, this.keyPressHandler);\n };\n DetailRow.prototype.getTDfromIndex = function (index, className) {\n var tr = this.parent.getDataRows()[index];\n if (tr && tr.querySelector(className)) {\n return tr.querySelector(className);\n }\n return null;\n };\n /**\n * Expands a detail row with the given target.\n * @param {Element} target - Defines the collapsed element to expand.\n * @return {void}\n */\n DetailRow.prototype.expand = function (target) {\n if (!isNaN(target)) {\n target = this.getTDfromIndex(target, '.e-detailrowcollapse');\n }\n if (target && target.classList.contains('e-detailrowcollapse')) {\n this.toogleExpandcollapse(target);\n }\n };\n /**\n * Collapses a detail row with the given target.\n * @param {Element} target - Defines the expanded element to collapse.\n * @return {void}\n */\n DetailRow.prototype.collapse = function (target) {\n if (!isNaN(target)) {\n target = this.getTDfromIndex(target, '.e-detailrowexpand');\n }\n if (target && target.classList.contains('e-detailrowexpand')) {\n this.toogleExpandcollapse(target);\n }\n };\n /**\n * Expands all the detail rows of the Grid.\n * @return {void}\n */\n DetailRow.prototype.expandAll = function () {\n this.expandCollapse(true);\n };\n /**\n * Collapses all the detail rows of the Grid.\n * @return {void}\n */\n DetailRow.prototype.collapseAll = function () {\n this.expandCollapse(false);\n };\n DetailRow.prototype.expandCollapse = function (isExpand) {\n var td;\n var rows = this.parent.getDataRows();\n for (var i = 0, len = rows.length; i < len; i++) {\n td = rows[i].querySelector('.e-detailrowcollapse, .e-detailrowexpand');\n isExpand ? this.expand(td) : this.collapse(td);\n }\n };\n DetailRow.prototype.keyPressHandler = function (e) {\n var gObj = this.parent;\n switch (e.action) {\n case 'ctrlDownArrow':\n this.expandAll();\n break;\n case 'ctrlUpArrow':\n this.collapseAll();\n break;\n case 'altUpArrow':\n case 'altDownArrow':\n var selected = gObj.allowSelection ? gObj.getSelectedRowIndexes() : [];\n if (selected.length) {\n var dataRow = gObj.getDataRows()[selected[selected.length - 1]];\n var td = dataRow.querySelector('.e-detailrowcollapse, .e-detailrowexpand');\n e.action === 'altDownArrow' ? this.expand(td) : this.collapse(td);\n }\n break;\n case 'enter':\n if (this.parent.isEdit) {\n return;\n }\n var element = this.focus.getFocusedElement();\n if (!e.target.classList.contains('e-detailrowcollapse') &&\n !e.target.classList.contains('e-detailrowexpand')) {\n break;\n }\n this.toogleExpandcollapse(element);\n break;\n }\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n DetailRow.prototype.getModuleName = function () {\n return 'detailRow';\n };\n return DetailRow;\n}());\nexport { DetailRow };\n","import { EventHandler, extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { createElement, remove } from '@syncfusion/ej2-base';\nimport { Toolbar as tool } from '@syncfusion/ej2-navigations';\nimport * as events from '../base/constant';\nimport { templateCompiler, appendChildren } from '../base/util';\nimport { SearchBox } from '../services/focus-strategy';\n/**\n * The `Toolbar` module is used to handle ToolBar actions.\n * @hidden\n */\nvar Toolbar = /** @class */ (function () {\n function Toolbar(parent, serviceLocator) {\n this.predefinedItems = {};\n this.items = ['Add', 'Edit', 'Update', 'Delete', 'Cancel', 'Print', 'Search',\n 'ColumnChooser', 'PdfExport', 'ExcelExport', 'CsvExport', 'WordExport'];\n this.parent = parent;\n this.gridID = parent.element.id;\n this.serviceLocator = serviceLocator;\n this.addEventListener();\n }\n Toolbar.prototype.render = function () {\n this.l10n = this.serviceLocator.getService('localization');\n var preItems = ['Add', 'Edit', 'Update', 'Delete', 'Cancel', 'Print',\n 'PdfExport', 'ExcelExport', 'WordExport', 'CsvExport'];\n for (var _i = 0, preItems_1 = preItems; _i < preItems_1.length; _i++) {\n var item = preItems_1[_i];\n var itemStr = item.toLowerCase();\n var localeName = itemStr[0].toUpperCase() + itemStr.slice(1);\n this.predefinedItems[item] = {\n id: this.gridID + '_' + itemStr, prefixIcon: 'e-' + itemStr,\n text: this.l10n.getConstant(localeName), tooltipText: this.l10n.getConstant(localeName)\n };\n }\n this.predefinedItems.Search = {\n id: this.gridID + '_search',\n template: '
    \\\n \\\n \\\n
    ',\n tooltipText: this.l10n.getConstant('Search'), align: 'Right', cssClass: 'e-search-wrapper'\n };\n this.predefinedItems.ColumnChooser = {\n id: this.gridID + '_' + 'columnchooser', cssClass: 'e-cc e-ccdiv e-cc-toolbar', suffixIcon: 'e-' + 'columnchooser-btn',\n text: this.l10n.getConstant('Columnchooser'), tooltipText: this.l10n.getConstant('Columnchooser'), align: 'Right',\n };\n this.createToolbar();\n };\n /**\n * Gets the toolbar of the Grid.\n * @return {Element}\n * @hidden\n */\n Toolbar.prototype.getToolbar = function () {\n return this.toolbar.element;\n };\n /**\n * Destroys the ToolBar.\n * @method destroy\n * @return {void}\n */\n Toolbar.prototype.destroy = function () {\n if (!this.toolbar.isDestroyed) {\n if (!this.toolbar.element) {\n this.parent.destroyTemplate(['toolbarTemplate']);\n }\n else {\n this.toolbar.destroy();\n }\n this.unWireEvent();\n this.removeEventListener();\n remove(this.element);\n }\n };\n Toolbar.prototype.createToolbar = function () {\n var items = this.getItems();\n this.toolbar = new tool({\n items: items,\n clicked: this.toolbarClickHandler.bind(this),\n enablePersistence: this.parent.enablePersistence,\n enableRtl: this.parent.enableRtl\n });\n var viewStr = 'viewContainerRef';\n var registerTemp = 'registeredTemplate';\n if (this.parent[viewStr]) {\n this.toolbar[registerTemp] = {};\n this.toolbar[viewStr] = this.parent[viewStr];\n }\n this.element = createElement('div', { id: this.gridID + '_toolbarItems' });\n if (this.parent.toolbarTemplate) {\n if (typeof (this.parent.toolbarTemplate) === 'string') {\n this.toolbar.appendTo(this.parent.toolbarTemplate);\n this.element = this.toolbar.element;\n }\n else {\n appendChildren(this.element, templateCompiler(this.parent.toolbarTemplate)({}, this.parent, 'toolbarTemplate'));\n }\n }\n else {\n this.toolbar.appendTo(this.element);\n }\n this.parent.element.insertBefore(this.element, this.parent.getHeaderContent());\n this.searchElement = this.element.querySelector('#' + this.gridID + '_searchbar');\n this.wireEvent();\n this.refreshToolbarItems();\n if (this.parent.searchSettings) {\n this.updateSearchBox();\n }\n };\n Toolbar.prototype.refreshToolbarItems = function (args) {\n var gObj = this.parent;\n var enableItems = [];\n var disableItems = [];\n var edit = gObj.editSettings;\n var hasData = gObj.currentViewData && gObj.currentViewData.length;\n edit.allowAdding ? enableItems.push(this.gridID + '_add') : disableItems.push(this.gridID + '_add');\n edit.allowEditing && hasData ? enableItems.push(this.gridID + '_edit') : disableItems.push(this.gridID + '_edit');\n edit.allowDeleting && hasData ? enableItems.push(this.gridID + '_delete') : disableItems.push(this.gridID + '_delete');\n if (gObj.editSettings.mode === 'Batch') {\n if (gObj.element.querySelectorAll('.e-updatedtd').length && (edit.allowAdding || edit.allowEditing)) {\n enableItems.push(this.gridID + '_update');\n enableItems.push(this.gridID + '_cancel');\n }\n else {\n disableItems.push(this.gridID + '_update');\n disableItems.push(this.gridID + '_cancel');\n }\n }\n else {\n if (gObj.isEdit && (edit.allowAdding || edit.allowEditing)) {\n enableItems = [this.gridID + '_update', this.gridID + '_cancel'];\n disableItems = [this.gridID + '_add', this.gridID + '_edit', this.gridID + '_delete'];\n }\n else {\n disableItems.push(this.gridID + '_update');\n disableItems.push(this.gridID + '_cancel');\n }\n }\n this.enableItems(enableItems, true);\n this.enableItems(disableItems, false);\n };\n Toolbar.prototype.getItems = function () {\n var items = [];\n var toolbarItems = this.parent.toolbar || [];\n if (typeof (this.parent.toolbar) === 'string') {\n return [];\n }\n for (var _i = 0, toolbarItems_1 = toolbarItems; _i < toolbarItems_1.length; _i++) {\n var item = toolbarItems_1[_i];\n switch (typeof item) {\n case 'number':\n items.push(this.getItemObject(this.items[item]));\n break;\n case 'string':\n items.push(this.getItemObject(item));\n break;\n default:\n items.push(this.getItem(item));\n }\n }\n return items;\n };\n Toolbar.prototype.getItem = function (itemObject) {\n var item = this.predefinedItems[itemObject.text];\n return item ? extend(item, item, itemObject) : itemObject;\n };\n Toolbar.prototype.getItemObject = function (itemName) {\n return this.predefinedItems[itemName] || { text: itemName, id: this.gridID + '_' + itemName };\n };\n /**\n * Enables or disables ToolBar items.\n * @param {string[]} items - Defines the collection of itemID of ToolBar items.\n * @param {boolean} isEnable - Defines the items to be enabled or disabled.\n * @return {void}\n * @hidden\n */\n Toolbar.prototype.enableItems = function (items, isEnable) {\n for (var _i = 0, items_1 = items; _i < items_1.length; _i++) {\n var item = items_1[_i];\n var element = this.element.querySelector('#' + item);\n if (element) {\n this.toolbar.enableItems(element.parentElement, isEnable);\n }\n }\n };\n Toolbar.prototype.toolbarClickHandler = function (args) {\n var gObj = this.parent;\n var gID = this.gridID;\n extend(args, { cancel: false });\n gObj.trigger(events.toolbarClick, args);\n if (args.cancel) {\n return;\n }\n switch (!isNullOrUndefined(args.item) && args.item.id) {\n case gID + '_print':\n gObj.print();\n break;\n case gID + '_edit':\n gObj.startEdit();\n break;\n case gID + '_update':\n gObj.endEdit();\n break;\n case gID + '_cancel':\n gObj.closeEdit();\n break;\n case gID + '_add':\n gObj.addRecord();\n break;\n case gID + '_delete':\n gObj.deleteRecord();\n break;\n case gID + '_search':\n if (args.originalEvent.target.id === gID + '_searchbutton') {\n this.search();\n }\n break;\n case gID + '_columnchooser':\n var tarElement = this.parent.element.querySelector('.e-ccdiv');\n var y = tarElement.getBoundingClientRect().top;\n var x = tarElement.getBoundingClientRect().left;\n var targetEle = args.originalEvent.target;\n y = tarElement.getBoundingClientRect().top + tarElement.offsetTop;\n gObj.createColumnchooser(x, y, targetEle);\n break;\n }\n };\n Toolbar.prototype.modelChanged = function (e) {\n if (e.module === 'edit') {\n this.refreshToolbarItems();\n }\n };\n Toolbar.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName() || !this.parent.toolbar) {\n return;\n }\n if (this.element) {\n remove(this.element);\n }\n this.render();\n };\n Toolbar.prototype.keyUpHandler = function (e) {\n if (e.keyCode === 13) {\n this.search();\n }\n };\n Toolbar.prototype.search = function () {\n this.parent.search(this.searchElement.value);\n };\n Toolbar.prototype.updateSearchBox = function () {\n if (this.searchElement) {\n this.searchElement.value = this.parent.searchSettings.key;\n }\n };\n Toolbar.prototype.wireEvent = function () {\n if (this.searchElement) {\n this.searchBoxObj = new SearchBox(this.searchElement);\n EventHandler.add(this.searchElement, 'keyup', this.keyUpHandler, this);\n this.searchBoxObj.wireEvent();\n }\n };\n Toolbar.prototype.unWireEvent = function () {\n if (this.searchElement) {\n EventHandler.remove(this.searchElement, 'keyup', this.keyUpHandler);\n this.searchBoxObj.unWireEvent();\n }\n };\n Toolbar.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.initialEnd, this.render, this);\n this.parent.on(events.uiUpdate, this.onPropertyChanged, this);\n this.parent.on(events.inBoundModelChanged, this.updateSearchBox.bind(this));\n this.parent.on(events.modelChanged, this.refreshToolbarItems, this);\n this.parent.on(events.toolbarRefresh, this.refreshToolbarItems, this);\n this.parent.on(events.inBoundModelChanged, this.modelChanged, this);\n this.parent.on(events.dataBound, this.refreshToolbarItems, this);\n };\n Toolbar.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initialEnd, this.render);\n this.parent.off(events.uiUpdate, this.onPropertyChanged);\n this.parent.off(events.inBoundModelChanged, this.updateSearchBox);\n this.parent.off(events.modelChanged, this.refreshToolbarItems);\n this.parent.off(events.toolbarRefresh, this.refreshToolbarItems);\n this.parent.off(events.inBoundModelChanged, this.modelChanged);\n this.parent.off(events.dataBound, this.refreshToolbarItems);\n };\n /**\n * For internal use only - Get the module name.\n */\n Toolbar.prototype.getModuleName = function () {\n return 'toolbar';\n };\n return Toolbar;\n}());\nexport { Toolbar };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { createElement, isNullOrUndefined, remove } from '@syncfusion/ej2-base';\nimport { formatUnit } from '@syncfusion/ej2-base';\nimport { Browser } from '@syncfusion/ej2-base';\nimport { colGroupRefresh, columnWidthChanged, scroll, columnVisibilityChanged } from '../base/constant';\nimport { ContentRender } from './content-renderer';\nimport { RowRenderer } from './row-renderer';\nimport { SummaryModelGenerator } from '../services/summary-model-generator';\nimport { renderMovable } from '../base/util';\n/**\n * Footer module is used to render grid content\n * @hidden\n */\nvar FooterRenderer = /** @class */ (function (_super) {\n __extends(FooterRenderer, _super);\n function FooterRenderer(gridModule, serviceLocator) {\n var _this = _super.call(this, gridModule, serviceLocator) || this;\n _this.aggregates = {};\n _this.parent = gridModule;\n _this.locator = serviceLocator;\n _this.modelGenerator = new SummaryModelGenerator(_this.parent);\n _this.addEventListener();\n return _this;\n }\n /**\n * The function is used to render grid footer div\n */\n FooterRenderer.prototype.renderPanel = function () {\n var div = createElement('div', { className: 'e-gridfooter' });\n var innerDiv = createElement('div', { className: 'e-summarycontent' });\n var movableContent = innerDiv;\n if (this.parent.getFrozenColumns()) {\n var fDiv = createElement('div', { className: 'e-frozenfootercontent' });\n var mDiv = createElement('div', { className: 'e-movablefootercontent' });\n innerDiv.appendChild(fDiv);\n innerDiv.appendChild(mDiv);\n this.frozenContent = fDiv;\n this.movableContent = mDiv;\n movableContent = mDiv;\n }\n if (Browser.isDevice) {\n movableContent.style.overflowX = 'scroll';\n }\n div.appendChild(innerDiv);\n this.setPanel(div);\n if (this.parent.getPager() != null) {\n this.parent.element.insertBefore(div, this.parent.getPager());\n }\n else {\n this.parent.element.appendChild(div);\n }\n };\n /**\n * The function is used to render grid footer table\n */\n FooterRenderer.prototype.renderTable = function () {\n var contentDiv = this.getPanel();\n var innerDiv = this.createContentTable('_footer_table');\n var table = innerDiv.querySelector('.e-table');\n var tFoot = createElement('tfoot');\n table.appendChild(tFoot);\n if (this.parent.getFrozenColumns()) {\n var freezeTable = table.cloneNode(true);\n this.frozenContent.appendChild(freezeTable);\n this.freezeTable = freezeTable;\n this.movableContent.appendChild(table);\n remove(table.querySelector('colgroup'));\n var colGroup = ((this.parent.getHeaderContent().querySelector('.e-movableheader').querySelector('colgroup')).cloneNode(true));\n table.insertBefore(colGroup, table.querySelector('tbody'));\n this.setColGroup(colGroup);\n }\n this.setTable(table);\n };\n FooterRenderer.prototype.renderSummaryContent = function (e, table, cStart, cEnd) {\n var input = this.parent.dataSource instanceof Array ? this.parent.dataSource : this.parent.currentViewData;\n var summaries = this.modelGenerator.getData();\n var dummies = isNullOrUndefined(cStart) ? this.modelGenerator.getColumns() :\n this.modelGenerator.getColumns(cStart, cEnd);\n var rows = isNullOrUndefined(cStart) ? this.modelGenerator.generateRows(input, e || this.aggregates) :\n this.modelGenerator.generateRows(input, e || this.aggregates, cStart, cEnd);\n var fragment = document.createDocumentFragment();\n var rowrenderer = new RowRenderer(this.locator, null, this.parent);\n rowrenderer.element = createElement('TR', { className: 'e-summaryrow' });\n for (var srow = 0, len = summaries.length; srow < len; srow++) {\n var row = rows[srow];\n if (!row) {\n continue;\n }\n var tr = rowrenderer.render(row, dummies);\n fragment.appendChild(tr);\n }\n table.tFoot.appendChild(fragment);\n this.aggregates = e;\n };\n FooterRenderer.prototype.refresh = function (e) {\n if (this.parent.getFrozenColumns()) {\n remove(this.getPanel());\n this.renderPanel();\n this.renderTable();\n this.freezeTable.tFoot.innerHTML = '';\n this.renderSummaryContent(e, this.freezeTable, 0, this.parent.getFrozenColumns());\n }\n this.getTable().tFoot.innerHTML = '';\n this.renderSummaryContent(e, this.getTable(), this.parent.getFrozenColumns());\n // check freeze content have no row case\n if (this.parent.getFrozenColumns()) {\n var frozenDiv = this.frozenContent;\n if (!frozenDiv.offsetHeight) {\n frozenDiv.style.height = this.getTable().offsetHeight + 'px';\n }\n }\n this.onScroll();\n };\n FooterRenderer.prototype.refreshCol = function () {\n // frozen table \n var mheaderCol;\n var fheaderCol = mheaderCol = this.parent.element.querySelector('.e-gridheader').querySelector('colgroup').cloneNode(true);\n if (this.parent.getFrozenColumns()) {\n mheaderCol = renderMovable(fheaderCol, this.parent.getFrozenColumns());\n this.freezeTable.replaceChild(fheaderCol, this.freezeTable.querySelector('colGroup'));\n }\n this.getTable().replaceChild(mheaderCol, this.getColGroup());\n this.setColGroup(mheaderCol);\n };\n FooterRenderer.prototype.onWidthChange = function (args) {\n this.getColFromIndex(args.index).style.width = formatUnit(args.width);\n if (this.parent.allowResizing && args.module === 'resize') {\n this.updateFooterTableWidth(this.getTable());\n }\n };\n FooterRenderer.prototype.onScroll = function (e) {\n if (e === void 0) { e = { left: this.parent.getContent().firstChild.scrollLeft }; }\n this.getTable().parentElement.scrollLeft = e.left;\n };\n FooterRenderer.prototype.getColFromIndex = function (index) {\n var fCol = this.parent.getFrozenColumns();\n if (fCol && fCol > index) {\n return this.freezeTable.querySelector('colGroup').children[index];\n }\n return this.getColGroup().children[index - fCol];\n };\n FooterRenderer.prototype.columnVisibilityChanged = function () {\n this.refresh();\n };\n FooterRenderer.prototype.addEventListener = function () {\n this.parent.on(colGroupRefresh, this.refreshCol, this);\n this.parent.on(columnWidthChanged, this.onWidthChange, this);\n this.parent.on(scroll, this.onScroll, this);\n this.parent.on(columnVisibilityChanged, this.columnVisibilityChanged, this);\n };\n FooterRenderer.prototype.removeEventListener = function () {\n this.parent.off(colGroupRefresh, this.refreshCol);\n this.parent.off(columnWidthChanged, this.onWidthChange);\n this.parent.off(scroll, this.onScroll);\n this.parent.off(columnVisibilityChanged, this.columnVisibilityChanged);\n };\n FooterRenderer.prototype.updateFooterTableWidth = function (tFoot) {\n var tHead = this.parent.getHeaderTable();\n if (tHead && tFoot) {\n tFoot.style.width = tHead.style.width;\n }\n };\n return FooterRenderer;\n}(ContentRender));\nexport { FooterRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { createElement } from '@syncfusion/ej2-base';\nimport { appendChildren } from '../base/util';\nimport { CellRenderer } from './cell-renderer';\n/**\n * SummaryCellRenderer class which responsible for building summary cell content.\n * @hidden\n */\nvar SummaryCellRenderer = /** @class */ (function (_super) {\n __extends(SummaryCellRenderer, _super);\n function SummaryCellRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.element = createElement('TD', { className: 'e-summarycell', attrs: { role: 'gridcell', tabindex: '-1' } });\n return _this;\n }\n SummaryCellRenderer.prototype.getValue = function (field, data, column) {\n var key;\n key = !isNullOrUndefined(column.type) ?\n column.field + ' - ' + (typeof column.type === 'string' ? column.type.toLowerCase() : '') : column.columnName;\n return data[column.columnName] ? data[column.columnName][key] : '';\n };\n SummaryCellRenderer.prototype.evaluate = function (node, cell, data, attributes) {\n var column = cell.column;\n if (!(column.footerTemplate || column.groupFooterTemplate || column.groupCaptionTemplate)) {\n return true;\n }\n var tempObj = column.getTemplate(cell.cellType);\n appendChildren(node, tempObj.fn(data[column.columnName], this.parent, tempObj.property));\n return false;\n };\n return SummaryCellRenderer;\n}(CellRenderer));\nexport { SummaryCellRenderer };\n","import { EventHandler } from '@syncfusion/ej2-base';\nimport { debounce } from '@syncfusion/ej2-base';\n/**\n * InterSectionObserver - class watch whether it enters the viewport.\n * @hidden\n */\nvar InterSectionObserver = /** @class */ (function () {\n function InterSectionObserver(element, options) {\n var _this = this;\n this.fromWheel = false;\n this.touchMove = false;\n this.options = {};\n this.sentinelInfo = {\n 'up': {\n check: function (rect, info) {\n var top = rect.top - _this.containerRect.top;\n info.entered = top >= 0;\n return top + (_this.options.pageHeight / 2) >= 0;\n },\n axis: 'Y'\n },\n 'down': {\n check: function (rect, info) {\n var cHeight = _this.options.container.clientHeight;\n var top = rect.bottom;\n info.entered = rect.bottom <= _this.containerRect.bottom;\n return top - (_this.options.pageHeight / 2) <= _this.options.pageHeight / 2;\n }, axis: 'Y'\n },\n 'right': {\n check: function (rect, info) {\n var right = rect.right;\n info.entered = right < _this.containerRect.right;\n return right - _this.containerRect.width <= _this.containerRect.right;\n }, axis: 'X'\n },\n 'left': {\n check: function (rect, info) {\n var left = rect.left;\n info.entered = left > 0;\n return left + _this.containerRect.width >= _this.containerRect.left;\n }, axis: 'X'\n }\n };\n this.element = element;\n this.options = options;\n }\n InterSectionObserver.prototype.observe = function (callback, onEnterCallback) {\n var _this = this;\n this.containerRect = this.options.container.getBoundingClientRect();\n EventHandler.add(this.options.container, 'wheel', function () { return _this.fromWheel = true; }, this);\n EventHandler.add(this.options.container, 'scroll', this.virtualScrollHandler(callback, onEnterCallback), this);\n };\n InterSectionObserver.prototype.check = function (direction) {\n var info = this.sentinelInfo[direction];\n return info.check(this.element.getBoundingClientRect(), info);\n };\n InterSectionObserver.prototype.virtualScrollHandler = function (callback, onEnterCallback) {\n var _this = this;\n var prevTop = 0;\n var prevLeft = 0;\n var debounced100 = debounce(callback, 100);\n var debounced50 = debounce(callback, 50);\n return function (e) {\n var top = e.target.scrollTop;\n var left = e.target.scrollLeft;\n var direction = prevTop < top ? 'down' : 'up';\n direction = prevLeft === left ? direction : prevLeft < left ? 'right' : 'left';\n prevTop = top;\n prevLeft = left;\n var current = _this.sentinelInfo[direction];\n if (_this.options.axes.indexOf(current.axis) === -1) {\n return;\n }\n var check = _this.check(direction);\n if (current.entered) {\n onEnterCallback(_this.element, current, direction, { top: top, left: left });\n }\n if (check) {\n var fn = debounced100; //this.fromWheel ? this.options.debounceEvent ? debounced100 : callback : debounced100;\n if (current.axis === 'X') {\n fn = debounced50;\n }\n fn({ direction: direction, sentinel: current, offset: { top: top, left: left } });\n }\n _this.fromWheel = false;\n };\n };\n InterSectionObserver.prototype.setPageHeight = function (value) {\n this.options.pageHeight = value;\n };\n return InterSectionObserver;\n}());\nexport { InterSectionObserver };\n","import { Browser } from '@syncfusion/ej2-base';\nimport { RowModelGenerator } from '../services/row-model-generator';\nimport { GroupModelGenerator } from '../services/group-model-generator';\n/**\n * Content module is used to render grid content\n */\nvar VirtualRowModelGenerator = /** @class */ (function () {\n function VirtualRowModelGenerator(parent) {\n this.cOffsets = {};\n this.cache = {};\n this.data = {};\n this.groups = {};\n this.parent = parent;\n this.model = this.parent.pageSettings;\n this.rowModelGenerator = this.parent.allowGrouping ? new GroupModelGenerator(this.parent) : new RowModelGenerator(this.parent);\n }\n VirtualRowModelGenerator.prototype.generateRows = function (data, notifyArgs) {\n var _this = this;\n var info = notifyArgs.virtualInfo = notifyArgs.virtualInfo || this.getData();\n var xAxis = info.sentinelInfo && info.sentinelInfo.axis === 'X';\n var page = !xAxis && info.loadNext && !info.loadSelf ? info.nextInfo.page : info.page;\n var result = [];\n var center = ~~(this.model.pageSize / 2);\n var indexes = this.getBlockIndexes(page);\n var loadedBlocks = [];\n this.checkAndResetCache(notifyArgs.requestType);\n if (this.parent.enableColumnVirtualization) {\n info.blockIndexes.forEach(function (value) {\n if (_this.isBlockAvailable(value)) {\n _this.cache[value] = _this.rowModelGenerator.refreshRows(_this.cache[value]);\n }\n });\n }\n info.blockIndexes.forEach(function (value) {\n if (!_this.isBlockAvailable(value)) {\n var rows = _this.rowModelGenerator.generateRows(data, {\n virtualInfo: info, startIndex: _this.getStartIndex(value, data)\n });\n var median = ~~Math.max(rows.length, _this.model.pageSize) / 2;\n if (!_this.isBlockAvailable(indexes[0])) {\n _this.cache[indexes[0]] = rows.slice(0, median);\n }\n if (!_this.isBlockAvailable(indexes[1])) {\n _this.cache[indexes[1]] = rows.slice(median);\n }\n }\n if (_this.parent.groupSettings.columns.length && !xAxis && _this.cache[value]) {\n _this.cache[value] = _this.updateGroupRow(_this.cache[value], value);\n }\n result.push.apply(result, _this.cache[value]);\n if (_this.isBlockAvailable(value)) {\n loadedBlocks.push(value);\n }\n });\n info.blockIndexes = loadedBlocks;\n var grouping = 'records';\n if (this.parent.allowGrouping) {\n this.parent.currentViewData[grouping] = result.map(function (m) { return m.data; });\n }\n else {\n this.parent.currentViewData = result.map(function (m) { return m.data; });\n }\n return result;\n };\n VirtualRowModelGenerator.prototype.getBlockIndexes = function (page) {\n return [page + (page - 1), page * 2];\n };\n VirtualRowModelGenerator.prototype.getPage = function (block) {\n return block % 2 === 0 ? block / 2 : (block + 1) / 2;\n };\n VirtualRowModelGenerator.prototype.isBlockAvailable = function (value) {\n return value in this.cache;\n };\n VirtualRowModelGenerator.prototype.getData = function () {\n return {\n page: this.model.currentPage,\n blockIndexes: this.getBlockIndexes(this.model.currentPage),\n direction: 'down',\n columnIndexes: this.parent.getColumnIndexesInView()\n };\n };\n VirtualRowModelGenerator.prototype.getStartIndex = function (blk, data, full) {\n if (full === void 0) { full = true; }\n var page = this.getPage(blk);\n var even = blk % 2 === 0;\n var index = (page - 1) * this.model.pageSize;\n return full || !even ? index : index + ~~(this.model.pageSize / 2);\n };\n VirtualRowModelGenerator.prototype.getColumnIndexes = function (content) {\n var _this = this;\n if (content === void 0) { content = this.parent.getHeaderContent().firstChild; }\n var indexes = [];\n var sLeft = content.scrollLeft | 0;\n var keys = Object.keys(this.cOffsets);\n var cWidth = content.getBoundingClientRect().width;\n sLeft = Math.min(this.cOffsets[keys.length - 1] - cWidth, sLeft);\n var calWidth = Browser.isDevice ? 2 * cWidth : cWidth / 2;\n var left = sLeft + cWidth + (sLeft === 0 ? calWidth : 0);\n keys.some(function (offset, indx, input) {\n var iOffset = Number(offset);\n var offsetVal = _this.cOffsets[offset];\n var border = sLeft - calWidth <= offsetVal && left + calWidth >= offsetVal;\n if (border) {\n indexes.push(iOffset);\n }\n return left + calWidth < offsetVal;\n });\n return indexes;\n };\n VirtualRowModelGenerator.prototype.checkAndResetCache = function (action) {\n var clear = ['paging', 'refresh', 'sorting', 'filtering', 'searching', 'grouping', 'ungrouping', 'reorder']\n .some(function (value) { return action === value; });\n if (clear) {\n this.cache = {};\n this.data = {};\n this.groups = {};\n }\n return clear;\n };\n VirtualRowModelGenerator.prototype.refreshColOffsets = function () {\n var _this = this;\n var col = 0;\n this.cOffsets = {};\n var gLen = this.parent.groupSettings.columns.length;\n var cols = this.parent.columns;\n var cLen = cols.length;\n var isVisible = function (column) { return column.visible &&\n (!_this.parent.groupSettings.showGroupedColumn ? _this.parent.groupSettings.columns.indexOf(column.field) < 0 : column.visible); };\n this.parent.groupSettings.columns.forEach(function (c, n) { return _this.cOffsets[n] = (_this.cOffsets[n - 1] | 0) + 30; });\n Array.apply(null, Array(cLen)).map(function () { return col++; }).forEach(function (block, i) {\n block = block + gLen;\n _this.cOffsets[block] = (_this.cOffsets[block - 1] | 0) + (isVisible(cols[i]) ? parseInt(cols[i].width, 10) : 0);\n });\n };\n VirtualRowModelGenerator.prototype.updateGroupRow = function (current, block) {\n var _this = this;\n var currentFirst = current[0];\n var rows = [];\n Object.keys(this.cache).forEach(function (key) {\n if (Number(key) < block) {\n rows = rows.concat(_this.cache[key]);\n }\n });\n if ((currentFirst && currentFirst.isDataRow) || block % 2 === 0) {\n return current;\n }\n return this.iterateGroup(current, rows);\n };\n VirtualRowModelGenerator.prototype.iterateGroup = function (current, rows) {\n var currentFirst = current[0];\n var offset = 0;\n if (currentFirst && currentFirst.isDataRow) {\n return current;\n }\n var isPresent = current.some(function (row) {\n return rows.some(function (oRow, index) {\n var res = oRow && oRow.data.field !== undefined && oRow.data.field === row.data.field &&\n oRow.data.key === row.data.key;\n if (res) {\n offset = index;\n }\n return res;\n });\n });\n if (isPresent) {\n current.shift();\n current = this.iterateGroup(current, rows.slice(offset));\n }\n return current;\n };\n VirtualRowModelGenerator.prototype.getRows = function () {\n var _this = this;\n var rows = [];\n Object.keys(this.cache).forEach(function (key) { return rows = rows.concat(_this.cache[key]); });\n return rows;\n };\n return VirtualRowModelGenerator;\n}());\nexport { VirtualRowModelGenerator };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { remove, createElement, closest, formatUnit } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { dataReady, modelChanged, refreshVirtualBlock, contentReady } from '../base/constant';\nimport { RenderType } from '../base/enum';\nimport { ContentRender } from './content-renderer';\nimport { HeaderRender } from './header-renderer';\nimport { InterSectionObserver } from '../services/intersection-observer';\nimport { VirtualRowModelGenerator } from '../services/virtual-row-model-generator';\n/**\n * VirtualContentRenderer\n * @hidden\n */\nvar VirtualContentRenderer = /** @class */ (function (_super) {\n __extends(VirtualContentRenderer, _super);\n function VirtualContentRenderer(parent, locator) {\n var _this = _super.call(this, parent, locator) || this;\n _this.prevHeight = 0;\n _this.currentInfo = {};\n _this.preventEvent = false;\n _this.actions = ['filtering', 'searching', 'grouping', 'ungrouping'];\n _this.offsets = {};\n _this.tmpOffsets = {};\n _this.virtualEle = new VirtualElementHandler();\n _this.offsetKeys = [];\n _this.isFocused = false;\n _this.locator = locator;\n _this.eventListener('on');\n _this.vgenerator = _this.generator;\n return _this;\n }\n VirtualContentRenderer.prototype.renderTable = function () {\n this.header = this.locator.getService('rendererFactory').getRenderer(RenderType.Header);\n _super.prototype.renderTable.call(this);\n this.virtualEle.table = this.getTable();\n this.virtualEle.content = this.content = this.getPanel().firstChild;\n this.virtualEle.renderWrapper(this.parent.height);\n this.virtualEle.renderPlaceHolder();\n this.virtualEle.wrapper.style.position = 'absolute';\n var debounceEvent = (this.parent.dataSource instanceof DataManager && !this.parent.dataSource.dataSource.offline);\n var opt = {\n container: this.content, pageHeight: this.getBlockHeight() * 2, debounceEvent: debounceEvent,\n axes: this.parent.enableColumnVirtualization ? ['X', 'Y'] : ['Y']\n };\n this.observer = new InterSectionObserver(this.virtualEle.wrapper, opt);\n };\n VirtualContentRenderer.prototype.renderEmpty = function (tbody) {\n this.getTable().appendChild(tbody);\n this.virtualEle.adjustTable(0, 0);\n };\n VirtualContentRenderer.prototype.scrollListener = function (scrollArgs) {\n if (this.preventEvent || this.parent.isDestroyed) {\n this.preventEvent = false;\n return;\n }\n this.isFocused = this.content === closest(document.activeElement, '.e-content') || this.content === document.activeElement;\n var info = scrollArgs.sentinel;\n var viewInfo = this.currentInfo = this.getInfoFromView(scrollArgs.direction, info, scrollArgs.offset);\n if (this.prevInfo && ((info.axis === 'Y' && this.prevInfo.blockIndexes.toString() === viewInfo.blockIndexes.toString())\n || (info.axis === 'X' && this.prevInfo.columnIndexes.toString() === viewInfo.columnIndexes.toString()))) {\n return;\n }\n this.parent.setColumnIndexesInView(this.parent.enableColumnVirtualization ? viewInfo.columnIndexes : []);\n this.parent.pageSettings.currentPage = viewInfo.loadNext && !viewInfo.loadSelf ? viewInfo.nextInfo.page : viewInfo.page;\n this.parent.notify(viewInfo.event, { requestType: 'virtualscroll', virtualInfo: viewInfo });\n };\n VirtualContentRenderer.prototype.block = function (blk) {\n return this.vgenerator.isBlockAvailable(blk);\n };\n VirtualContentRenderer.prototype.getInfoFromView = function (direction, info, e) {\n var tempBlocks = [];\n var infoType = { direction: direction, sentinelInfo: info, offsets: e };\n infoType.page = this.getPageFromTop(e.top, infoType);\n infoType.blockIndexes = tempBlocks = this.vgenerator.getBlockIndexes(infoType.page);\n infoType.loadSelf = !this.vgenerator.isBlockAvailable(tempBlocks[infoType.block]);\n var blocks = this.ensureBlocks(infoType);\n infoType.blockIndexes = blocks;\n infoType.loadNext = !blocks.filter(function (val) { return tempBlocks.indexOf(val) === -1; })\n .every(this.block.bind(this));\n infoType.event = (infoType.loadNext || infoType.loadSelf) ? modelChanged : refreshVirtualBlock;\n infoType.nextInfo = infoType.loadNext ? { page: Math.max(1, infoType.page + (direction === 'down' ? 1 : -1)) } : {};\n infoType.columnIndexes = info.axis === 'X' ? this.vgenerator.getColumnIndexes() : this.parent.getColumnIndexesInView();\n if (this.parent.enableColumnVirtualization && info.axis === 'X') {\n infoType.event = refreshVirtualBlock;\n }\n return infoType;\n };\n VirtualContentRenderer.prototype.ensureBlocks = function (info) {\n var _this = this;\n var index = info.blockIndexes[info.block];\n var mIdx;\n var old = index;\n var max = Math.max;\n var indexes = info.direction === 'down' ? [max(index, 1), ++index, ++index] : [max(index - 1, 1), index, index + 1];\n indexes = indexes.filter(function (val, ind) { return indexes.indexOf(val) === ind; });\n if (this.prevInfo.blockIndexes.toString() === indexes.toString()) {\n return indexes;\n }\n if (info.loadSelf || (info.direction === 'down' && this.isEndBlock(old))) {\n indexes = this.vgenerator.getBlockIndexes(info.page);\n }\n indexes.some(function (val, ind) {\n var result = val === _this.getTotalBlocks();\n if (result) {\n mIdx = ind;\n }\n return result;\n });\n if (mIdx !== undefined) {\n indexes = indexes.slice(0, mIdx + 1);\n if (info.block === 0 && indexes.length === 1 && this.vgenerator.isBlockAvailable(indexes[0] - 1)) {\n indexes = [indexes[0] - 1, indexes[0]];\n }\n }\n return indexes;\n };\n VirtualContentRenderer.prototype.appendContent = function (target, newChild, e) {\n // currentInfo value will be used if there are multiple dom updates happened due to mousewheel\n var info = e.virtualInfo.sentinelInfo && e.virtualInfo.sentinelInfo.axis === 'Y' && this.currentInfo.page &&\n this.currentInfo.page !== e.virtualInfo.page ? this.currentInfo : e.virtualInfo;\n this.prevInfo = this.prevInfo || e.virtualInfo;\n var cBlock = (info.columnIndexes[0]) - 1;\n var cOffset = this.getColumnOffset(cBlock);\n var width;\n var blocks = info.blockIndexes;\n if (this.parent.groupSettings.columns.length) {\n this.refreshOffsets();\n }\n var translate = this.getTranslateY(this.content.scrollTop, this.content.getBoundingClientRect().height, info);\n this.virtualEle.adjustTable(cOffset, translate);\n if (this.parent.enableColumnVirtualization) {\n this.header.virtualEle.adjustTable(cOffset, 0);\n }\n if (this.parent.enableColumnVirtualization) {\n var cIndex = info.columnIndexes;\n width = this.getColumnOffset(cIndex[cIndex.length - 1]) - this.getColumnOffset(cIndex[0] - 1) + '';\n this.header.virtualEle.setWrapperWidth(width);\n }\n this.virtualEle.setWrapperWidth(width, this.parent.enableColumnVirtualization);\n remove(target);\n target = createElement('tbody');\n target.appendChild(newChild);\n this.getTable().appendChild(target);\n if (this.parent.groupSettings.columns.length) {\n if (info.direction === 'up') {\n var blk = this.offsets[this.getTotalBlocks()] - this.prevHeight;\n this.preventEvent = true;\n var sTop = this.content.scrollTop;\n this.content.scrollTop = sTop + blk;\n }\n this.setVirtualHeight();\n this.observer.setPageHeight(this.getOffset(blocks[blocks.length - 1]) - this.getOffset(blocks[0] - 1));\n }\n this.prevInfo = info;\n if (this.isFocused) {\n this.content.focus();\n }\n };\n VirtualContentRenderer.prototype.onDataReady = function (e) {\n if (!isNullOrUndefined(e.count)) {\n this.count = e.count;\n this.maxPage = Math.ceil(e.count / this.parent.pageSettings.pageSize);\n }\n this.vgenerator.checkAndResetCache(e.requestType);\n if (['refresh', 'filtering', 'searching', 'grouping', 'ungrouping', 'reorder', undefined]\n .some(function (value) { return e.requestType === value; })) {\n this.refreshOffsets();\n }\n this.setVirtualHeight();\n this.resetScrollPosition(e.requestType);\n };\n VirtualContentRenderer.prototype.setVirtualHeight = function () {\n var width = this.parent.enableColumnVirtualization ?\n this.getColumnOffset(this.parent.columns.length + this.parent.groupSettings.columns.length - 1) + 'px' : '100%';\n this.virtualEle.setVirtualHeight(this.offsets[this.getTotalBlocks()], width);\n if (this.parent.enableColumnVirtualization) {\n this.header.virtualEle.setVirtualHeight(1, width);\n }\n };\n VirtualContentRenderer.prototype.getPageFromTop = function (sTop, info) {\n var _this = this;\n var total = this.getTotalBlocks();\n var page = 0;\n var extra = this.offsets[total] - this.prevHeight;\n this.offsetKeys.some(function (offset) {\n var iOffset = Number(offset);\n var border = sTop < _this.offsets[offset] || (iOffset === total && sTop > _this.offsets[offset]);\n if (border) {\n info.block = iOffset % 2 === 0 ? 1 : 0;\n page = Math.max(1, Math.min(_this.vgenerator.getPage(iOffset), _this.maxPage));\n }\n return border;\n });\n return page;\n };\n VirtualContentRenderer.prototype.getTranslateY = function (sTop, cHeight, info, isOnenter) {\n if (info === undefined) {\n info = { page: this.getPageFromTop(sTop, {}) };\n info.blockIndexes = this.vgenerator.getBlockIndexes(info.page);\n }\n var block = (info.blockIndexes[0] || 1) - 1;\n var translate = this.getOffset(block);\n var endTranslate = this.getOffset(info.blockIndexes[info.blockIndexes.length - 1]);\n if (isOnenter) {\n info = this.prevInfo;\n }\n var result = translate > sTop ?\n this.getOffset(block - 1) : endTranslate < (sTop + cHeight) ? this.getOffset(block + 1) : translate;\n var blockHeight = this.offsets[info.blockIndexes[info.blockIndexes.length - 1]] -\n this.tmpOffsets[info.blockIndexes[0]];\n if (result + blockHeight > this.offsets[this.getTotalBlocks()]) {\n result -= (result + blockHeight) - this.offsets[this.getTotalBlocks()];\n }\n return result;\n };\n VirtualContentRenderer.prototype.getOffset = function (block) {\n return Math.min(this.offsets[block] | 0, this.offsets[this.maxBlock] | 0);\n };\n VirtualContentRenderer.prototype.onEntered = function () {\n var _this = this;\n return function (element, current, direction, e) {\n var xAxis = current.axis === 'X';\n var top = _this.prevInfo.offsets ? _this.prevInfo.offsets.top : null;\n var height = _this.content.getBoundingClientRect().height;\n var x = _this.getColumnOffset(xAxis ? _this.vgenerator.getColumnIndexes()[0] - 1 : _this.prevInfo.columnIndexes[0] - 1);\n var y = _this.getTranslateY(e.top, height, xAxis && top === e.top ? _this.prevInfo : undefined, true);\n _this.virtualEle.adjustTable(x, Math.min(y, _this.offsets[_this.maxBlock]));\n if (_this.parent.enableColumnVirtualization) {\n _this.header.virtualEle.adjustTable(x, 0);\n }\n };\n };\n VirtualContentRenderer.prototype.eventListener = function (action) {\n var _this = this;\n this.parent[action](dataReady, this.onDataReady, this);\n this.parent[action](refreshVirtualBlock, this.refreshContentRows, this);\n this.actions.forEach(function (event) { return _this.parent[action](event + \"-begin\", _this.onActionBegin, _this); });\n var fn = function () {\n _this.observer.observe(function (scrollArgs) { return _this.scrollListener(scrollArgs); }, _this.onEntered());\n _this.parent.off(contentReady, fn);\n };\n this.parent.on(contentReady, fn, this);\n };\n VirtualContentRenderer.prototype.getBlockSize = function () {\n return this.parent.pageSettings.pageSize >> 1;\n };\n VirtualContentRenderer.prototype.getBlockHeight = function () {\n return this.getBlockSize() * this.parent.getRowHeight();\n };\n VirtualContentRenderer.prototype.isEndBlock = function (index) {\n var totalBlocks = this.getTotalBlocks();\n return index >= totalBlocks || index === totalBlocks - 1;\n };\n VirtualContentRenderer.prototype.getTotalBlocks = function () {\n return Math.ceil(this.count / this.getBlockSize());\n };\n VirtualContentRenderer.prototype.getColumnOffset = function (block) {\n return this.vgenerator.cOffsets[block] | 0;\n };\n VirtualContentRenderer.prototype.getModelGenerator = function () {\n return new VirtualRowModelGenerator(this.parent);\n };\n VirtualContentRenderer.prototype.resetScrollPosition = function (action) {\n if (this.actions.some(function (value) { return value === action; })) {\n this.preventEvent = this.content.scrollTop !== 0;\n this.content.scrollTop = 0;\n }\n };\n VirtualContentRenderer.prototype.onActionBegin = function (e) {\n //Update property silently..\n this.parent.setProperties({ pageSettings: { currentPage: 1 } }, true);\n };\n VirtualContentRenderer.prototype.getRows = function () {\n return this.vgenerator.getRows();\n };\n VirtualContentRenderer.prototype.getRowByIndex = function (index) {\n var prev = this.prevInfo.blockIndexes;\n var startIdx = (prev[0] - 1) * this.getBlockSize();\n return this.parent.getDataRows()[index - startIdx];\n };\n VirtualContentRenderer.prototype.getVirtualRowIndex = function (index) {\n var prev = this.prevInfo.blockIndexes;\n var startIdx = (prev[0] - 1) * this.getBlockSize();\n return startIdx + index;\n };\n VirtualContentRenderer.prototype.refreshOffsets = function () {\n var _this = this;\n var row = 0;\n var bSize = this.getBlockSize();\n var total = this.getTotalBlocks();\n this.prevHeight = this.offsets[total];\n this.maxBlock = total % 2 === 0 ? total - 2 : total - 1;\n this.offsets = {};\n //Row offset update\n Array.apply(null, Array(total)).map(function () { return ++row; })\n .forEach(function (block) {\n var tmp = (_this.vgenerator.cache[block] || []).length;\n var rem = _this.count % bSize;\n var size = block in _this.vgenerator.cache ?\n tmp * _this.parent.getRowHeight() : rem && block === total ? rem * _this.parent.getRowHeight() : _this.getBlockHeight();\n // let size: number = this.parent.groupSettings.columns.length && block in this.vgenerator.cache ?\n // tmp * getRowHeight() : this.getBlockHeight();\n _this.offsets[block] = (_this.offsets[block - 1] | 0) + size;\n _this.tmpOffsets[block] = _this.offsets[block - 1] | 0;\n });\n this.offsetKeys = Object.keys(this.offsets);\n //Column offset update\n if (this.parent.enableColumnVirtualization) {\n this.vgenerator.refreshColOffsets();\n }\n };\n VirtualContentRenderer.prototype.refreshVirtualElement = function () {\n this.vgenerator.refreshColOffsets();\n this.setVirtualHeight();\n };\n return VirtualContentRenderer;\n}(ContentRender));\nexport { VirtualContentRenderer };\n/**\n * @hidden\n */\nvar VirtualHeaderRenderer = /** @class */ (function (_super) {\n __extends(VirtualHeaderRenderer, _super);\n function VirtualHeaderRenderer(parent, locator) {\n var _this = _super.call(this, parent, locator) || this;\n _this.virtualEle = new VirtualElementHandler();\n _this.gen = new VirtualRowModelGenerator(_this.parent);\n _this.parent.on(refreshVirtualBlock, function (e) { return e.virtualInfo.sentinelInfo.axis === 'X' ? _this.refreshUI() : null; }, _this);\n return _this;\n }\n VirtualHeaderRenderer.prototype.renderTable = function () {\n this.gen.refreshColOffsets();\n this.parent.setColumnIndexesInView(this.gen.getColumnIndexes(this.getPanel().firstChild));\n _super.prototype.renderTable.call(this);\n this.virtualEle.table = this.getTable();\n this.virtualEle.content = this.getPanel().firstChild;\n this.virtualEle.content.style.position = 'relative';\n this.virtualEle.renderWrapper();\n this.virtualEle.renderPlaceHolder('absolute');\n };\n VirtualHeaderRenderer.prototype.appendContent = function (table) {\n this.virtualEle.wrapper.appendChild(table);\n };\n VirtualHeaderRenderer.prototype.refreshUI = function () {\n this.gen.refreshColOffsets();\n this.parent.setColumnIndexesInView(this.gen.getColumnIndexes(this.getPanel().firstChild));\n _super.prototype.refreshUI.call(this);\n };\n return VirtualHeaderRenderer;\n}(HeaderRender));\nexport { VirtualHeaderRenderer };\n/**\n * @hidden\n */\nvar VirtualElementHandler = /** @class */ (function () {\n function VirtualElementHandler() {\n }\n VirtualElementHandler.prototype.renderWrapper = function (height) {\n this.wrapper = createElement('div', { className: 'e-virtualtable', styles: \"min-height:\" + formatUnit(height) });\n this.wrapper.appendChild(this.table);\n this.content.appendChild(this.wrapper);\n };\n VirtualElementHandler.prototype.renderPlaceHolder = function (position) {\n if (position === void 0) { position = 'relative'; }\n this.placeholder = createElement('div', { className: 'e-virtualtrack', styles: \"position:\" + position });\n this.content.appendChild(this.placeholder);\n };\n VirtualElementHandler.prototype.adjustTable = function (xValue, yValue) {\n this.wrapper.style.transform = \"translate(\" + xValue + \"px, \" + yValue + \"px)\";\n };\n VirtualElementHandler.prototype.setWrapperWidth = function (width, full) {\n this.wrapper.style.width = width ? width + \"px\" : full ? '100%' : '';\n };\n VirtualElementHandler.prototype.setVirtualHeight = function (height, width) {\n this.placeholder.style.height = height + \"px\";\n this.placeholder.style.width = width;\n };\n return VirtualElementHandler;\n}());\nexport { VirtualElementHandler };\n","import { initialLoad } from '../base/constant';\nimport { RenderType } from '../base/enum';\nimport { VirtualContentRenderer, VirtualHeaderRenderer } from '../renderer/virtual-content-renderer';\nimport * as events from '../base/constant';\n/**\n * Virtual Scrolling class\n */\nvar VirtualScroll = /** @class */ (function () {\n function VirtualScroll(parent, locator) {\n this.parent = parent;\n this.locator = locator;\n this.addEventListener();\n }\n VirtualScroll.prototype.getModuleName = function () {\n return 'virtualscroll';\n };\n VirtualScroll.prototype.instantiateRenderer = function () {\n var renderer = this.locator.getService('rendererFactory');\n if (this.parent.enableColumnVirtualization) {\n renderer.addRenderer(RenderType.Header, new VirtualHeaderRenderer(this.parent, this.locator));\n }\n renderer.addRenderer(RenderType.Content, new VirtualContentRenderer(this.parent, this.locator));\n this.ensurePageSize();\n };\n VirtualScroll.prototype.ensurePageSize = function () {\n var rowHeight = this.parent.getRowHeight();\n this.blockSize = ~~(this.parent.height / rowHeight);\n var height = this.blockSize * 2;\n var size = this.parent.pageSettings.pageSize;\n this.parent.setProperties({ pageSettings: { pageSize: size < height ? height : size } }, true);\n };\n VirtualScroll.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(initialLoad, this.instantiateRenderer, this);\n this.parent.on(events.columnWidthChanged, this.refreshVirtualElement, this);\n };\n VirtualScroll.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(initialLoad, this.instantiateRenderer);\n this.parent.off(events.columnWidthChanged, this.refreshVirtualElement);\n };\n VirtualScroll.prototype.refreshVirtualElement = function (args) {\n if (this.parent.enableColumnVirtualization && args.module === 'resize') {\n var renderer = this.locator.getService('rendererFactory');\n renderer.getRenderer(RenderType.Content).refreshVirtualElement();\n }\n };\n VirtualScroll.prototype.destroy = function () {\n this.removeEventListener();\n };\n return VirtualScroll;\n}());\nexport { VirtualScroll };\n","import { createElement, isNullOrUndefined, addClass } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\n/**\n * Edit render module is used to render grid edit row.\n * @hidden\n */\nvar InlineEditRender = /** @class */ (function () {\n /**\n * Constructor for render module\n */\n function InlineEditRender(parent) {\n this.parent = parent;\n }\n InlineEditRender.prototype.addNew = function (elements, args) {\n var mTbody;\n var tbody;\n if (this.parent.frozenRows) {\n tbody = this.parent.getHeaderContent().querySelector('tbody');\n }\n else {\n tbody = this.parent.getContentTable().querySelector('tbody');\n }\n args.row = createElement('tr', { className: 'e-row e-addedrow' });\n if (tbody.querySelector('.e-emptyrow')) {\n tbody.querySelector('.e-emptyrow').classList.add('e-hide');\n }\n tbody.insertBefore(args.row, tbody.firstChild);\n args.row.appendChild(this.getEditElement(elements, false));\n if (this.parent.getFrozenColumns()) {\n var mEle = this.renderMovableform(args.row);\n if (this.parent.frozenRows) {\n mTbody = this.parent.getHeaderContent().querySelector('.e-movableheader').querySelector('tbody');\n }\n else {\n mTbody = this.parent.getContent().querySelector('.e-movablecontent').querySelector('tbody');\n }\n mTbody.insertBefore(mEle, mTbody.firstChild);\n args.row.querySelector('.e-normaledit').setAttribute('colspan', this.parent.getVisibleFrozenColumns() + '');\n mEle.setAttribute('colspan', '' + (this.parent.getVisibleColumns().length - this.parent.getVisibleFrozenColumns()));\n if (this.parent.height === 'auto') {\n this.parent.notify(events.frozenHeight, {});\n }\n }\n };\n InlineEditRender.prototype.renderMovableform = function (ele) {\n var mEle = ele.cloneNode(true);\n this.renderMovable(ele, mEle);\n mEle.querySelector('colgroup').innerHTML = this.parent.getHeaderContent()\n .querySelector('.e-movableheader').querySelector('colgroup').innerHTML;\n return mEle;\n };\n InlineEditRender.prototype.updateFreezeEdit = function (row, td) {\n if (this.parent.getFrozenColumns()) {\n var idx = parseInt(row.getAttribute('aria-rowindex'), 10);\n var fCont = this.parent.getContent().querySelector('.e-frozencontent').querySelector('tbody');\n var mCont = this.parent.getContent().querySelector('.e-movablecontent').querySelector('tbody');\n var fHdr = this.parent.getHeaderContent().querySelector('.e-frozenheader').querySelector('tbody');\n var mHdr = this.parent.getHeaderContent().querySelector('.e-movableheader').querySelector('tbody');\n if (this.parent.frozenRows && idx >= this.parent.frozenRows) {\n idx -= this.parent.frozenRows;\n }\n if (fCont.contains(row)) {\n td = td.concat([].slice.call(mCont.children[idx].querySelectorAll('td.e-rowcell')));\n }\n else if (mCont.contains(row)) {\n td = td.concat([].slice.call(fCont.children[idx].querySelectorAll('td.e-rowcell')));\n }\n else if (fHdr.contains(row)) {\n td = td.concat([].slice.call(mHdr.children[idx].querySelectorAll('td.e-rowcell')));\n }\n else if (mHdr.contains(row)) {\n td = td.concat([].slice.call(fHdr.children[idx].querySelectorAll('td.e-rowcell')));\n }\n }\n return td;\n };\n InlineEditRender.prototype.update = function (elements, args) {\n var tdElement = [].slice.call(args.row.querySelectorAll('td.e-rowcell'));\n args.row.innerHTML = '';\n tdElement = this.updateFreezeEdit(args.row, tdElement);\n args.row.appendChild(this.getEditElement(elements, true, tdElement));\n args.row.classList.add('e-editedrow');\n this.refreshFreezeEdit(args.row);\n };\n InlineEditRender.prototype.refreshFreezeEdit = function (row) {\n var td = row.firstChild;\n var fCls;\n var cont;\n var idx = parseInt(row.getAttribute('aria-rowindex'), 10);\n if (this.parent.getFrozenColumns()) {\n if (idx < this.parent.frozenRows) {\n cont = this.parent.getHeaderContent();\n fCls = '.e-frozenheader';\n }\n else {\n cont = this.parent.getContent();\n fCls = '.e-frozencontent';\n }\n var mTd = td.cloneNode(true);\n var fRows = void 0;\n if (cont.querySelector(fCls).contains(row)) {\n fRows = this.parent.getMovableRowByIndex(idx);\n this.updateFrozenCont(fRows, td, mTd);\n }\n else {\n fRows = this.parent.getRowByIndex(idx);\n this.updateFrozenCont(fRows, mTd, td);\n }\n fRows.appendChild(mTd);\n fRows.classList.add('e-editedrow');\n }\n };\n InlineEditRender.prototype.updateFrozenCont = function (row, ele, mEle) {\n row.innerHTML = '';\n this.renderMovable(ele, mEle);\n mEle.querySelector('colgroup').innerHTML = this.parent.getHeaderContent()\n .querySelector('.e-movableheader').querySelector('colgroup').innerHTML;\n ele.setAttribute('colspan', this.parent.getVisibleFrozenColumns() + '');\n mEle.setAttribute('colspan', this.parent.getColumns().length - this.parent.getFrozenColumns() + '');\n };\n InlineEditRender.prototype.renderMovable = function (ele, mEle) {\n var frzCols = this.parent.getFrozenColumns();\n for (var i = 0; i < frzCols; i++) {\n mEle.querySelector('tr').removeChild(mEle.querySelector('tr').children[0]);\n }\n for (var i = frzCols, len = ele.querySelector('tr').childElementCount; i < len; i++) {\n ele.querySelector('tr').removeChild(ele.querySelector('tr').children[ele.querySelector('tr').childElementCount - 1]);\n }\n };\n InlineEditRender.prototype.getEditElement = function (elements, isEdit, tdElement) {\n var gObj = this.parent;\n var gLen = 0;\n var isDetail = !isNullOrUndefined(gObj.detailTemplate) || !isNullOrUndefined(gObj.childGrid) ? 1 : 0;\n if (gObj.allowGrouping) {\n gLen = gObj.groupSettings.columns.length;\n }\n var td = createElement('td', {\n className: 'e-editcell e-normaledit',\n attrs: { colspan: (gObj.getVisibleColumns().length - gObj.getVisibleFrozenColumns() + gLen + isDetail).toString() }\n });\n var form = createElement('form', { id: gObj.element.id + 'EditForm', className: 'e-gridform' });\n var table = createElement('table', { className: 'e-table e-inline-edit', attrs: { cellspacing: '0.25' } });\n table.appendChild(gObj.getContentTable().querySelector('colgroup').cloneNode(true));\n var tbody = createElement('tbody');\n var tr = createElement('tr');\n var i = 0;\n if (isDetail) {\n tr.insertBefore(createElement('td', { className: 'e-detailrowcollapse' }), tr.firstChild);\n }\n while (i < gLen) {\n tr.appendChild(createElement('td', { className: 'e-indentcell' }));\n i++;\n }\n var m = 0;\n i = 0;\n while ((isEdit && m < tdElement.length && i < gObj.getColumns().length) || i < gObj.getColumns().length) {\n var span = isEdit ? tdElement[m].getAttribute('colspan') : null;\n var col = gObj.getColumns()[i];\n var td_1 = createElement('td', {\n className: 'e-rowcell', attrs: { style: 'text-align:' + (col.textAlign ? col.textAlign : ''), 'colspan': span ? span : '' }\n });\n if (col.visible) {\n td_1.appendChild(elements[col.uid]);\n if (col.editType === 'booleanedit') {\n td_1.classList.add('e-boolcell');\n }\n else if (col.commands || col.commandsTemplate) {\n addClass([td_1], 'e-unboundcell');\n }\n }\n else {\n td_1.classList.add('e-hide');\n }\n tr.appendChild(td_1);\n i = span ? i + parseInt(span, 10) : i + 1;\n m++;\n }\n tbody.appendChild(tr);\n table.appendChild(tbody);\n form.appendChild(table);\n td.appendChild(form);\n return td;\n };\n InlineEditRender.prototype.removeEventListener = function () {\n //To destroy the renderer\n };\n return InlineEditRender;\n}());\nexport { InlineEditRender };\n","import { createElement, classList } from '@syncfusion/ej2-base';\n/**\n * Edit render module is used to render grid edit row.\n * @hidden\n */\nvar BatchEditRender = /** @class */ (function () {\n /**\n * Constructor for render module\n */\n function BatchEditRender(parent) {\n this.parent = parent;\n }\n BatchEditRender.prototype.update = function (elements, args) {\n args.cell.innerHTML = '';\n args.cell.appendChild(this.getEditElement(elements, args));\n args.cell.classList.add('e-editedbatchcell');\n classList(args.row, ['e-editedrow', 'e-batchrow'], []);\n };\n BatchEditRender.prototype.getEditElement = function (elements, args) {\n var gObj = this.parent;\n var form = createElement('form', { id: gObj.element.id + 'EditForm', className: 'e-gridform' });\n form.appendChild(elements[args.columnObject.uid]);\n if (args.columnObject.editType === 'booleanedit') {\n args.cell.classList.add('e-boolcell');\n }\n if (!args.columnObject.editType) {\n args.cell.classList.add('e-inputbox');\n }\n return form;\n };\n BatchEditRender.prototype.removeEventListener = function () {\n //To destroy the renderer\n };\n return BatchEditRender;\n}());\nexport { BatchEditRender };\n","import { Dialog } from '@syncfusion/ej2-popups';\nimport { remove, createElement } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { changeButtonType } from '../base/util';\n/**\n * Edit render module is used to render grid edit row.\n * @hidden\n */\nvar DialogEditRender = /** @class */ (function () {\n /**\n * Constructor for render module\n */\n function DialogEditRender(parent, serviceLocator) {\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.dialogDestroy, this.destroy, this);\n this.parent.on(events.destroy, this.destroy, this);\n }\n DialogEditRender.prototype.setLocaleObj = function () {\n this.l10n = this.serviceLocator.getService('localization');\n };\n DialogEditRender.prototype.addNew = function (elements, args) {\n this.isEdit = false;\n this.createDialog(elements, args);\n };\n DialogEditRender.prototype.update = function (elements, args) {\n this.isEdit = true;\n this.createDialog(elements, args);\n };\n DialogEditRender.prototype.createDialog = function (elements, args) {\n var gObj = this.parent;\n this.dialog = createElement('div', { id: gObj.element.id + '_dialogEdit_wrapper' });\n gObj.element.appendChild(this.dialog);\n this.setLocaleObj();\n var position = this.parent.element.getBoundingClientRect().height < 400 ?\n { X: 'center', Y: 'top' } : { X: 'center', Y: 'center' };\n this.dialogObj = new Dialog({\n header: this.isEdit ? this.l10n.getConstant('EditFormTitle') + args.primaryKeyValue[0] :\n this.l10n.getConstant('AddFormTitle'), isModal: true, visible: true, cssClass: 'e-edit-dialog',\n content: this.getEditElement(elements),\n showCloseIcon: true,\n allowDragging: true,\n position: position,\n close: this.dialogClose.bind(this),\n closeOnEscape: true, width: '330px', target: gObj.element, animationSettings: { effect: 'None' },\n buttons: [{\n click: this.btnClick.bind(this),\n buttonModel: { content: this.l10n.getConstant('SaveButton'), cssClass: 'e-primary', isPrimary: true }\n },\n { click: this.btnClick.bind(this), buttonModel: { cssClass: 'e-flat', content: this.l10n.getConstant('CancelButton') } }]\n });\n this.dialogObj.appendTo(this.dialog);\n changeButtonType(this.dialogObj.element);\n };\n DialogEditRender.prototype.btnClick = function (e) {\n if (this.l10n.getConstant('CancelButton').toLowerCase() === e.target.innerText.trim().toLowerCase()) {\n this.dialogClose();\n }\n else {\n this.parent.endEdit();\n }\n };\n DialogEditRender.prototype.dialogClose = function () {\n this.parent.closeEdit();\n this.destroy();\n };\n DialogEditRender.prototype.destroy = function (args) {\n this.parent.notify(events.destroyForm, {});\n this.parent.isEdit = false;\n this.parent.notify(events.toolbarRefresh, {});\n if (this.dialog && !this.dialogObj.isDestroyed) {\n this.dialogObj.destroy();\n remove(this.dialog);\n }\n };\n DialogEditRender.prototype.getEditElement = function (elements) {\n var gObj = this.parent;\n var div = createElement('div', { className: this.isEdit ? 'e-editedrow' : 'e-insertedrow' });\n var form = createElement('form', { id: gObj.element.id + 'EditForm', className: 'e-gridform' });\n var table = createElement('table', { className: 'e-table', attrs: { cellspacing: '6px' } });\n var tbody = createElement('tbody');\n var cols = gObj.getColumns();\n for (var i = 0; i < cols.length; i++) {\n if (!cols[i].visible || cols[i].commands || cols[i].commandsTemplate) {\n continue;\n }\n var tr = createElement('tr');\n var dataCell = createElement('td', {\n className: 'e-rowcell', attrs: {\n style: 'text-align:' + (this.parent.enableRtl ? 'right' : 'left') + ';width:190px'\n }\n });\n var label = createElement('label', { innerHTML: cols[i].field });\n elements[cols[i].uid].classList.remove('e-input');\n dataCell.appendChild(elements[cols[i].uid]);\n tr.appendChild(dataCell);\n tbody.appendChild(tr);\n }\n table.appendChild(tbody);\n form.appendChild(table);\n div.appendChild(form);\n return div;\n };\n DialogEditRender.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.dialogDestroy, this.destroy);\n this.parent.off(events.destroy, this.destroy);\n };\n return DialogEditRender;\n}());\nexport { DialogEditRender };\n","import { isNullOrUndefined, closest, getValue } from '@syncfusion/ej2-base';\nimport { InlineEditRender } from './inline-edit-renderer';\nimport { BatchEditRender } from './batch-edit-renderer';\nimport { DialogEditRender } from './dialog-edit-renderer';\nimport { createElement, attributes, classList } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\nimport { RowModelGenerator } from '../services/row-model-generator';\nimport { isComplexField, getComplexFieldID } from '../base/util';\n/**\n * Edit render module is used to render grid edit row.\n * @hidden\n */\nvar EditRender = /** @class */ (function () {\n /**\n * Constructor for render module\n */\n function EditRender(parent, serviceLocator) {\n //Internal variables \n this.editType = {\n 'Inline': InlineEditRender,\n 'Normal': InlineEditRender, 'Batch': BatchEditRender, 'Dialog': DialogEditRender\n };\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n this.renderer = new this.editType[this.parent.editSettings.mode](parent, serviceLocator);\n this.focus = serviceLocator.getService('focus');\n }\n EditRender.prototype.addNew = function (args) {\n this.renderer.addNew(this.getEditElements(args), args);\n this.convertWidget(args);\n };\n EditRender.prototype.update = function (args) {\n this.renderer.update(this.getEditElements(args), args);\n this.convertWidget(args);\n };\n EditRender.prototype.convertWidget = function (args) {\n var gObj = this.parent;\n var isFocused;\n var cell;\n var value;\n var fForm;\n var frzCols = gObj.getFrozenColumns();\n var form = gObj.element.querySelector('.e-gridform');\n if (frzCols && gObj.editSettings.mode === 'Normal') {\n var rowIndex = parseInt(args.row.getAttribute('aria-rowindex'), 10);\n if (gObj.frozenRows && (args.requestType === 'add' || rowIndex < gObj.frozenRows)) {\n fForm = gObj.element.querySelector('.e-movableheader').querySelector('.e-gridform');\n }\n else {\n fForm = gObj.element.querySelector('.e-movablecontent').querySelector('.e-gridform');\n }\n }\n var cols = gObj.editSettings.mode !== 'Batch' ? gObj.getColumns() : [gObj.getColumnByField(args.columnName)];\n for (var _i = 0, cols_1 = cols; _i < cols_1.length; _i++) {\n var col = cols_1[_i];\n if (!col.visible || col.commands) {\n continue;\n }\n value = col.valueAccessor(col.field, args.rowData, col);\n if (frzCols && cols.indexOf(col) >= frzCols && gObj.editSettings.mode === 'Normal') {\n cell = fForm.querySelector('[e-mappinguid=' + col.uid + ']');\n }\n else {\n cell = form.querySelector('[e-mappinguid=' + col.uid + ']');\n }\n var temp = col.edit.write;\n if (!isNullOrUndefined(cell)) {\n col.edit.write({\n rowData: args.rowData, element: cell, column: col, requestType: args.requestType, type: args.type, row: args.row,\n foreignKeyData: col.isForeignColumn() && getValue(col.field, args.foreignKeyData)\n });\n if (!isFocused && !cell.getAttribute('disabled')) {\n this.focusElement(cell, args.type);\n isFocused = true;\n }\n }\n }\n };\n EditRender.prototype.focusElement = function (elem, type) {\n var chkBox = this.parent.element.querySelector('.e-edit-checkselect');\n if (!isNullOrUndefined(chkBox)) {\n chkBox.nextElementSibling.classList.add('e-focus');\n }\n if (this.parent.editSettings.mode === 'Batch') {\n this.focus.onClick({ target: closest(elem, 'td') }, true);\n }\n else {\n elem.focus();\n }\n if (elem.classList.contains('e-defaultcell')) {\n elem.setSelectionRange(elem.value.length, elem.value.length);\n }\n };\n EditRender.prototype.getEditElements = function (args) {\n var gObj = this.parent;\n var elements = {};\n var cols = gObj.editSettings.mode !== 'Batch' ? gObj.getColumns() : [gObj.getColumnByField(args.columnName)];\n for (var i = 0, len = cols.length; i < len; i++) {\n var col = cols[i];\n if (!col.visible) {\n continue;\n }\n if (col.commands || col.commandsTemplate) {\n var cellRendererFact = this.serviceLocator.getService('cellRendererFactory');\n var model = new RowModelGenerator(this.parent);\n var cellRenderer = cellRendererFact.getCellRenderer(CellType.CommandColumn);\n var cells = model.generateRows(args.rowData)[0].cells;\n var td = cellRenderer.render(cells[i], args.rowData, { 'index': args.row ? args.row.getAttribute('aria-rowindex') : 0 });\n var div = td.firstElementChild;\n div.setAttribute('textAlign', td.getAttribute('textAlign'));\n elements[col.uid] = div;\n continue;\n }\n var value = col.valueAccessor(col.field, args.rowData, col);\n var tArgs = { column: col, value: value, type: args.requestType, data: args.rowData };\n var temp = col.edit.create;\n var input = void 0;\n input = col.edit.create(tArgs);\n if (typeof input === 'string') {\n var div = createElement('div');\n div.innerHTML = input;\n input = div.firstChild;\n }\n var isInput = input.tagName !== 'input' && input.querySelectorAll('input').length;\n var isComplex = !isNullOrUndefined(col.field) && isComplexField(col.field);\n var complexFieldName = !isNullOrUndefined(col.field) && getComplexFieldID(col.field);\n attributes(isInput ? input.querySelector('input') : input, {\n name: isComplex ? complexFieldName : col.field, 'e-mappinguid': col.uid,\n id: isComplex ? gObj.element.id + complexFieldName : gObj.element.id + col.field\n });\n classList(input, ['e-input', 'e-field'], []);\n if (col.textAlign === 'Right') {\n input.classList.add('e-ralign');\n }\n if ((col.isPrimaryKey || col.isIdentity) && args.requestType === 'beginEdit' ||\n (col.isIdentity && args.requestType === 'add')) {\n input.setAttribute('disabled', 'true');\n }\n elements[col.uid] = input;\n }\n return elements;\n };\n EditRender.prototype.destroy = function () {\n this.renderer.removeEventListener();\n };\n return EditRender;\n}());\nexport { EditRender };\n","import { createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\nimport { extend } from '@syncfusion/ej2-base';\nimport { isEditable, getComplexValue, addRemoveActiveClasses, isComplexField, getComplexFieldID } from '../base/util';\n/**\n * `BooleanEditCell` is used to handle boolean cell type editing.\n * @hidden\n */\nvar BooleanEditCell = /** @class */ (function () {\n function BooleanEditCell(parent) {\n this.activeClasses = ['e-selectionbackground', 'e-active'];\n this.parent = parent;\n }\n BooleanEditCell.prototype.create = function (args) {\n var col = args.column;\n var classNames = 'e-field e-boolcell';\n if (col.type === 'checkbox') {\n classNames = 'e-field e-boolcell e-edit-checkselect';\n }\n var isComplex = !isNullOrUndefined(args.column.field) && isComplexField(args.column.field);\n var complexFieldName = !isNullOrUndefined(args.column.field) && getComplexFieldID(args.column.field);\n return createElement('input', {\n className: classNames, attrs: {\n type: 'checkbox', value: args.value, 'e-mappinguid': col.uid,\n id: isComplex ? this.parent.element.id + complexFieldName : this.parent.element.id + col.field,\n name: isComplex ? complexFieldName : col.field\n }\n });\n };\n BooleanEditCell.prototype.read = function (element) {\n return element.checked;\n };\n BooleanEditCell.prototype.write = function (args) {\n var selectChkBox;\n var chkState;\n var isComplex = !isNullOrUndefined(args.column.field) && isComplexField(args.column.field);\n var isAddRow = args.requestType === 'add' || args.row.classList.contains('e-addedrow');\n if (!isNullOrUndefined(args.row)) {\n selectChkBox = args.row.querySelector('.e-edit-checkselect');\n }\n if (!isComplex && args.rowData[args.column.field]) {\n chkState = JSON.parse(args.rowData[args.column.field].toString().toLowerCase());\n }\n if (isComplex && !isAddRow && getComplexValue(args.rowData, args.column.field)) {\n chkState = JSON.parse(getComplexValue(args.rowData, args.column.field).toString().toLowerCase());\n }\n if (!isNullOrUndefined(selectChkBox)) {\n this.editType = this.parent.editSettings.mode;\n this.editRow = args.row;\n if (args.requestType !== 'add') {\n var row = this.parent.getRowObjectFromUID(args.row.getAttribute('data-uid'));\n chkState = row ? row.isSelected : false;\n }\n addRemoveActiveClasses.apply(void 0, [[].slice.call(args.row.querySelectorAll('.e-rowcell')), chkState].concat(this.activeClasses));\n }\n this.obj = new CheckBox(extend({\n label: this.parent.editSettings.mode !== 'Dialog' ? '' : args.column.headerText,\n checked: chkState,\n disabled: !isEditable(args.column, args.requestType, args.element), enableRtl: this.parent.enableRtl,\n change: this.checkBoxChange.bind(this)\n }, args.column.edit.params));\n this.obj.appendTo(args.element);\n };\n BooleanEditCell.prototype.checkBoxChange = function (args) {\n if (this.editRow && this.editType !== 'Dialog') {\n var add = false;\n if (!args.checked) {\n this.editRow.removeAttribute('aria-selected');\n }\n else {\n add = true;\n this.editRow.setAttribute('aria-selected', add.toString());\n }\n addRemoveActiveClasses.apply(void 0, [[].slice.call(this.editRow.querySelectorAll('.e-rowcell')), add].concat(this.activeClasses));\n }\n };\n BooleanEditCell.prototype.destroy = function () {\n if (this.obj) {\n this.obj.destroy();\n }\n };\n return BooleanEditCell;\n}());\nexport { BooleanEditCell };\n","import { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { createElement } from '@syncfusion/ej2-base';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { Query, DataManager, DataUtil } from '@syncfusion/ej2-data';\nimport { isEditable, getComplexFieldID, getComplexValue, isComplexField } from '../base/util';\nimport { parentsUntil } from '../base/util';\n/**\n * `DropDownEditCell` is used to handle dropdown cell type editing.\n * @hidden\n */\nvar DropDownEditCell = /** @class */ (function () {\n function DropDownEditCell(parent) {\n //constructor\n this.parent = parent;\n }\n DropDownEditCell.prototype.create = function (args) {\n //create\n /* tslint:disable-next-line:no-any */\n var complexFieldName = getComplexFieldID(args.column.field);\n /* tslint:disable-next-line:no-any */\n var isComplex = isComplexField(args.column.field);\n return createElement('input', {\n className: 'e-field', attrs: {\n /* tslint:disable-next-line:no-any */\n id: isComplex ? this.parent.element.id + complexFieldName : this.parent.element.id + args.column.field,\n /* tslint:disable-next-line:no-any */\n name: isComplex ? complexFieldName : args.column.field, type: 'text', 'e-mappinguid': args.column.uid,\n }\n });\n };\n DropDownEditCell.prototype.write = function (args) {\n this.column = args.column;\n /* tslint:disable-next-line:no-any */\n var complexFieldName = getComplexFieldID(args.column.field);\n var isComplex = isComplexField(args.column.field);\n var isInline = this.parent.editSettings.mode !== 'Dialog';\n var isAddRow = args.requestType === 'add' || args.row.classList.contains('e-addedrow');\n this.obj = new DropDownList(extend({\n dataSource: this.parent.dataSource instanceof DataManager ?\n this.parent.dataSource : new DataManager(this.parent.dataSource),\n query: new Query().select(args.column.field), enabled: isEditable(args.column, args.requestType, args.element),\n fields: { value: args.column.field },\n value: isComplex && !isAddRow ?\n getComplexValue(args.rowData, args.column.field) : args.rowData[args.column.field],\n enableRtl: this.parent.enableRtl, actionComplete: this.ddActionComplete.bind(this),\n placeholder: isInline ? '' : args.column.headerText, popupHeight: '200px',\n floatLabelType: isInline ? 'Never' : 'Always', open: this.dropDownOpen.bind(this),\n sortOrder: 'Ascending'\n }, args.column.edit.params));\n this.obj.appendTo(args.element);\n /* tslint:disable-next-line:no-any */\n args.element.setAttribute('name', isComplex ? complexFieldName : args.column.field);\n };\n DropDownEditCell.prototype.read = function (element) {\n return element.ej2_instances[0].value;\n };\n DropDownEditCell.prototype.ddActionComplete = function (e) {\n e.result = DataUtil.distinct(e.result, this.column.isForeignColumn() ? this.column.foreignKeyField : this.column.field, true);\n if (this.column.dataSource) {\n this.column.dataSource.dataSource.json = e.result;\n }\n };\n DropDownEditCell.prototype.dropDownOpen = function (args) {\n var dlgElement = parentsUntil(this.obj.element, 'e-dialog');\n if (this.parent.editSettings.mode === 'Dialog' && !isNullOrUndefined(dlgElement)) {\n var dlgObj = this.parent.element.querySelector('#' + dlgElement.id).ej2_instances[0];\n args.popup.element.style.zIndex = (dlgObj.zIndex + 1).toString();\n }\n };\n DropDownEditCell.prototype.destroy = function () {\n if (this.obj) {\n this.obj.destroy();\n }\n };\n return DropDownEditCell;\n}());\nexport { DropDownEditCell };\n","import { extend } from '@syncfusion/ej2-base';\nimport { createElement } from '@syncfusion/ej2-base';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { isEditable, isComplexField, getComplexFieldID, getComplexValue } from '../base/util';\n/**\n * `NumericEditCell` is used to handle numeric cell type editing.\n * @hidden\n */\nvar NumericEditCell = /** @class */ (function () {\n function NumericEditCell(parent) {\n this.parent = parent;\n }\n NumericEditCell.prototype.create = function (args) {\n /* tslint:disable-next-line:no-any */\n var isComplex = isComplexField(args.column.field);\n var complexFieldName = getComplexFieldID(args.column.field);\n return createElement('input', {\n className: 'e-field', attrs: {\n /* tslint:disable-next-line:no-any */\n id: isComplex ? this.parent.element.id + complexFieldName : this.parent.element.id + args.column.field,\n name: isComplex ? complexFieldName : args.column.field, 'e-mappinguid': args.column.uid\n }\n });\n };\n NumericEditCell.prototype.read = function (element) {\n element.blur();\n return element.ej2_instances[0].value;\n };\n NumericEditCell.prototype.write = function (args) {\n var col = args.column;\n var isInline = this.parent.editSettings.mode !== 'Dialog';\n var isComplex = isComplexField(args.column.field);\n var complexFieldName = getComplexFieldID(args.column.field);\n var isAddRow = args.requestType === 'add' || args.row.classList.contains('e-addedrow');\n this.obj = new NumericTextBox(extend({\n value: isComplex && !isAddRow ?\n parseFloat(getComplexValue(args.rowData, args.column.field)) : parseFloat(args.rowData[col.field]),\n enableRtl: this.parent.enableRtl,\n placeholder: isInline ? '' : args.column.headerText,\n enabled: isEditable(args.column, args.requestType, args.element),\n floatLabelType: this.parent.editSettings.mode !== 'Dialog' ? 'Never' : 'Always',\n }, col.edit.params));\n this.obj.appendTo(args.element);\n args.element.setAttribute('name', isComplex ? complexFieldName : args.column.field);\n };\n NumericEditCell.prototype.destroy = function () {\n if (this.obj && !this.obj.isDestroyed) {\n this.obj.destroy();\n }\n };\n return NumericEditCell;\n}());\nexport { NumericEditCell };\n","import { createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { isEditable } from '../base/util';\n/**\n * `DefaultEditCell` is used to handle default cell type editing.\n * @hidden\n */\nvar DefaultEditCell = /** @class */ (function () {\n function DefaultEditCell(parent) {\n this.parent = parent;\n }\n DefaultEditCell.prototype.create = function (args) {\n var col = args.column;\n var input = createElement('input', {\n className: 'e-field e-input e-defaultcell', attrs: {\n type: 'text', value: !isNullOrUndefined(args.value) ? args.value : '', 'e-mappinguid': col.uid,\n id: this.parent.element.id + col.field, name: col.field, style: 'text-align:' + col.textAlign,\n }\n });\n return input;\n };\n DefaultEditCell.prototype.read = function (element) {\n return element.value;\n };\n DefaultEditCell.prototype.write = function (args) {\n var col = args.column;\n var isInline = this.parent.editSettings.mode !== 'Dialog';\n Input.createInput({\n element: args.element, floatLabelType: this.parent.editSettings.mode !== 'Dialog' ? 'Never' : 'Always',\n properties: {\n enableRtl: this.parent.enableRtl, enabled: isEditable(args.column, args.requestType, args.element),\n placeholder: isInline ? '' : args.column.headerText\n }\n });\n };\n return DefaultEditCell;\n}());\nexport { DefaultEditCell };\n","import { extend, getValue } from '@syncfusion/ej2-base';\nimport { remove, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { parentsUntil, refreshForeignData } from '../base/util';\nimport * as events from '../base/constant';\nimport { RowRenderer } from '../renderer/row-renderer';\n/**\n * `NormalEdit` module is used to handle normal('inline, dialog, external') editing actions.\n * @hidden\n */\nvar NormalEdit = /** @class */ (function () {\n function NormalEdit(parent, serviceLocator, renderer) {\n this.parent = parent;\n this.renderer = renderer;\n this.serviceLocator = serviceLocator;\n this.addEventListener();\n }\n NormalEdit.prototype.clickHandler = function (e) {\n var target = e.target;\n var gObj = this.parent;\n if ((((parentsUntil(target, 'e-gridcontent') &&\n parentsUntil(parentsUntil(target, 'e-gridcontent'), 'e-grid').id === gObj.element.id)) || (gObj.frozenRows\n && parentsUntil(target, 'e-headercontent'))) && !parentsUntil(target, 'e-unboundcelldiv')) {\n this.rowIndex = parentsUntil(target, 'e-rowcell') ? parseInt(target.parentElement.getAttribute('aria-rowindex'), 10) : -1;\n if (gObj.isEdit) {\n gObj.editModule.endEdit();\n }\n }\n };\n NormalEdit.prototype.dblClickHandler = function (e) {\n if (parentsUntil(e.target, 'e-rowcell') && this.parent.editSettings.allowEditOnDblClick) {\n this.parent.editModule.startEdit(parentsUntil(e.target, 'e-row'));\n }\n };\n /**\n * The function used to trigger editComplete\n * @return {void}\n * @hidden\n */\n NormalEdit.prototype.editComplete = function (e) {\n this.parent.isEdit = false;\n switch (e.requestType) {\n case 'save':\n if (!(this.parent.isCheckBoxSelection || this.parent.selectionSettings.type === 'Multiple')\n || (!this.parent.isPersistSelection)) {\n this.parent.selectRow(0);\n }\n this.parent.trigger(events.actionComplete, extend(e, {\n requestType: 'save',\n type: events.actionComplete\n }));\n break;\n case 'delete':\n this.parent.trigger(events.actionComplete, extend(e, {\n requestType: 'delete',\n type: events.actionComplete\n }));\n this.parent.selectRow(this.editRowIndex);\n break;\n }\n };\n NormalEdit.prototype.startEdit = function (tr) {\n var gObj = this.parent;\n var primaryKeys = gObj.getPrimaryKeyFieldNames();\n var primaryKeyValues = [];\n this.rowIndex = this.editRowIndex = parseInt(tr.getAttribute('aria-rowindex'), 10);\n this.previousData = gObj.getCurrentViewRecords()[this.rowIndex];\n for (var i = 0; i < primaryKeys.length; i++) {\n primaryKeyValues.push(this.previousData[primaryKeys[i]]);\n }\n this.uid = tr.getAttribute('data-uid');\n var rowObj = gObj.getRowObjectFromUID(this.uid);\n var args = {\n row: tr, primaryKey: primaryKeys, primaryKeyValue: primaryKeyValues, requestType: 'beginEdit',\n rowData: this.previousData, rowIndex: this.rowIndex, type: 'edit', cancel: false,\n foreignKeyData: rowObj && rowObj.foreignKeyData\n };\n gObj.trigger(events.beginEdit, args);\n args.type = 'actionBegin';\n gObj.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n gObj.isEdit = true;\n gObj.clearSelection();\n if (gObj.editSettings.mode === 'Dialog') {\n args.row.classList.add('e-dlgeditrow');\n }\n this.renderer.update(args);\n this.uid = tr.getAttribute('data-uid');\n gObj.editModule.applyFormValidation();\n args.type = 'actionComplete';\n gObj.trigger(events.actionComplete, args);\n if (this.parent.allowTextWrap) {\n this.parent.notify(events.freezeRender, { case: 'textwrap' });\n }\n };\n NormalEdit.prototype.updateRow = function (index, data) {\n var gObj = this.parent;\n var args = {\n requestType: 'save', type: events.actionBegin, data: data, cancel: false,\n previousData: gObj.getCurrentViewRecords()[index]\n };\n gObj.showSpinner();\n gObj.notify(events.updateData, args);\n gObj.refresh();\n };\n NormalEdit.prototype.endEdit = function () {\n var gObj = this.parent;\n if (!this.parent.isEdit || !gObj.editModule.formObj.validate() ||\n (gObj.editModule.mFormObj && !gObj.editModule.mFormObj.validate())) {\n return;\n }\n var editedData = extend({}, this.previousData);\n var args = {\n requestType: 'save', type: events.actionBegin, data: editedData, cancel: false,\n previousData: this.previousData, selectedRow: gObj.selectedRowIndex, foreignKeyData: {}\n };\n editedData = gObj.editModule.getCurrentEditedData(gObj.element.querySelector('.e-gridform'), editedData);\n if (gObj.getFrozenColumns() && gObj.editSettings.mode === 'Normal') {\n var mForm = gObj.element.querySelector('.e-movableheader').querySelector('.e-gridform');\n if (gObj.frozenRows && mForm) {\n editedData = gObj.editModule.getCurrentEditedData(mForm, editedData);\n }\n else {\n editedData = gObj.editModule.getCurrentEditedData(gObj.element.querySelector('.e-movablecontent').querySelector('.e-gridform'), editedData);\n }\n }\n if (gObj.element.querySelectorAll('.e-editedrow').length) {\n args.action = 'edit';\n gObj.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n gObj.showSpinner();\n this.destroyElements();\n gObj.notify(events.updateData, args);\n }\n else {\n args.action = 'add';\n args.selectedRow = 0;\n args.index = this.addedRowIndex;\n gObj.notify(events.modelChanged, args);\n this.addedRowIndex = null;\n if (args.cancel) {\n return;\n }\n this.destroyElements();\n }\n this.stopEditStatus();\n if (gObj.editSettings.mode === 'Dialog' && args.action !== 'add') {\n gObj.element.querySelector('.e-dlgeditrow').classList.remove('e-dlgeditrow');\n }\n };\n NormalEdit.prototype.destroyElements = function () {\n var gObj = this.parent;\n gObj.editModule.destroyWidgets();\n gObj.editModule.destroyForm();\n gObj.notify(events.dialogDestroy, {});\n };\n NormalEdit.prototype.editHandler = function (args) {\n var _this = this;\n if (args.promise) {\n args.promise.then(function (e) { return _this.edSucc(e, args); }).catch(function (e) { return _this.edFail(e); });\n }\n else {\n this.editSuccess(args.data, args);\n }\n };\n NormalEdit.prototype.edSucc = function (e, args) {\n this.editSuccess(e, args);\n };\n NormalEdit.prototype.edFail = function (e) {\n this.editFailure(e);\n };\n NormalEdit.prototype.updateCurrentViewData = function (data) {\n this.parent.getCurrentViewRecords()[this.editRowIndex] = data;\n };\n NormalEdit.prototype.editSuccess = function (e, args) {\n if (!isNullOrUndefined(e)) {\n args.data = e;\n }\n this.parent.trigger(events.beforeDataBound, args);\n args.type = events.actionComplete;\n this.parent.isEdit = false;\n this.refreshRow(args.data);\n this.updateCurrentViewData(args.data);\n this.parent.trigger(events.actionComplete, args);\n if (!(this.parent.isCheckBoxSelection || this.parent.selectionSettings.type === 'Multiple')\n || (!this.parent.isPersistSelection)) {\n this.parent.selectRow(this.rowIndex > -1 ? this.rowIndex : this.editRowIndex);\n }\n this.parent.hideSpinner();\n };\n NormalEdit.prototype.editFailure = function (e) {\n this.parent.trigger(events.actionFailure, e);\n };\n NormalEdit.prototype.refreshRow = function (data) {\n var frzCols = this.parent.getFrozenColumns();\n var row = new RowRenderer(this.serviceLocator, null, this.parent);\n var rowObj = this.parent.getRowObjectFromUID(this.uid);\n if (rowObj) {\n rowObj.changes = data;\n refreshForeignData(rowObj, this.parent.getForeignKeyColumns(), rowObj.changes);\n row.refresh(rowObj, this.parent.getColumns(), true);\n if (frzCols) {\n var uid = void 0;\n var tr = this.parent.element.querySelector('[data-uid=' + rowObj.uid + ']');\n if ((parentsUntil(tr, 'e-frozencontent')) || (parentsUntil(tr, 'e-frozenheader'))) {\n uid = this.parent.getMovableRows()[rowObj.index].getAttribute('data-uid');\n }\n else {\n uid = this.parent.getRows()[rowObj.index].getAttribute('data-uid');\n }\n rowObj = this.parent.getRowObjectFromUID(uid);\n rowObj.changes = data;\n row.refresh(rowObj, this.parent.columns, true);\n }\n }\n };\n NormalEdit.prototype.closeEdit = function () {\n if (!this.parent.isEdit) {\n return;\n }\n var gObj = this.parent;\n var args = {\n requestType: 'cancel', type: events.actionBegin, data: this.previousData, selectedRow: gObj.selectedRowIndex\n };\n gObj.trigger(events.actionBegin, args);\n if (this.parent.editSettings.mode === 'Dialog') {\n this.parent.notify(events.dialogDestroy, {});\n }\n gObj.isEdit = false;\n this.stopEditStatus();\n args.type = events.actionComplete;\n if (gObj.editSettings.mode !== 'Dialog') {\n this.refreshRow(args.data);\n }\n if (gObj.getContentTable().querySelector('tr.e-emptyrow') &&\n !gObj.getContentTable().querySelector('tr.e-row')) {\n gObj.getContentTable().querySelector('tr.e-emptyrow').classList.remove('e-hide');\n }\n gObj.selectRow(this.rowIndex);\n gObj.trigger(events.actionComplete, args);\n };\n NormalEdit.prototype.addRecord = function (data, index) {\n var gObj = this.parent;\n this.addedRowIndex = !isNullOrUndefined(index) ? index : 0;\n if (data) {\n gObj.notify(events.modelChanged, {\n requestType: 'save', type: events.actionBegin, data: data, selectedRow: 0, action: 'add', index: index\n });\n return;\n }\n if (gObj.isEdit) {\n return;\n }\n this.previousData = {};\n this.uid = '';\n for (var _i = 0, _a = gObj.getColumns(); _i < _a.length; _i++) {\n var col = _a[_i];\n this.previousData[col.field] = data && data[col.field] ? data[col.field] : col.defaultValue;\n }\n var args = {\n cancel: false, foreignKeyData: {},\n requestType: 'add', data: this.previousData, type: events.actionBegin, index: index\n };\n gObj.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n gObj.isEdit = true;\n gObj.clearSelection();\n this.renderer.addNew({ rowData: args.data, requestType: 'add' });\n gObj.editModule.applyFormValidation();\n args.type = events.actionComplete;\n args.row = gObj.element.querySelector('.e-addedrow');\n gObj.trigger(events.actionComplete, args);\n };\n NormalEdit.prototype.deleteRecord = function (fieldname, data) {\n this.editRowIndex = this.parent.selectedRowIndex;\n if (data) {\n data = (data instanceof Array) ? data : [data];\n var gObj = this.parent;\n var index = 0;\n var dataLen = Object.keys(data).length;\n fieldname = fieldname || this.parent.getPrimaryKeyFieldNames()[0];\n var _loop_1 = function (i) {\n var tmpRecord;\n var contained = gObj.currentViewData.some(function (record) {\n tmpRecord = record;\n return data[i] === getValue(fieldname, record) || data[i] === record;\n });\n data[i] = contained ? tmpRecord : (_a = {}, _a[fieldname] = data[i], _a);\n var _a;\n };\n for (var i = 0; i < dataLen; i++) {\n _loop_1(i);\n }\n }\n this.parent.notify(events.modelChanged, {\n requestType: 'delete', type: events.actionBegin, foreignKeyData: {},\n data: data ? data : this.parent.getSelectedRecords(), tr: this.parent.getSelectedRows(), cancel: false\n });\n };\n NormalEdit.prototype.stopEditStatus = function () {\n var gObj = this.parent;\n var elem = gObj.element.querySelector('.e-addedrow');\n var mElem;\n var editMElem;\n if (gObj.getFrozenColumns()) {\n mElem = gObj.element.querySelectorAll('.e-addedrow')[1];\n editMElem = gObj.element.querySelectorAll('.e-editedrow')[1];\n if (mElem) {\n remove(mElem);\n }\n if (editMElem) {\n editMElem.classList.remove('e-editedrow');\n }\n }\n if (elem) {\n remove(elem);\n }\n elem = gObj.element.querySelector('.e-editedrow');\n if (elem) {\n elem.classList.remove('e-editedrow');\n }\n };\n /**\n * @hidden\n */\n NormalEdit.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.crudAction, this.editHandler, this);\n this.parent.on(events.doubleTap, this.dblClickHandler, this);\n this.parent.on(events.click, this.clickHandler, this);\n this.parent.on(events.dblclick, this.dblClickHandler, this);\n this.parent.on(events.deleteComplete, this.editComplete, this);\n this.parent.on(events.saveComplete, this.editComplete, this);\n };\n /**\n * @hidden\n */\n NormalEdit.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.crudAction, this.editHandler);\n this.parent.off(events.doubleTap, this.dblClickHandler);\n this.parent.off(events.click, this.clickHandler);\n this.parent.off(events.dblclick, this.dblClickHandler);\n this.parent.off(events.deleteComplete, this.editComplete);\n this.parent.off(events.saveComplete, this.editComplete);\n };\n /**\n * @hidden\n */\n NormalEdit.prototype.destroy = function () {\n this.removeEventListener();\n this.renderer.destroy();\n };\n return NormalEdit;\n}());\nexport { NormalEdit };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { NormalEdit } from './normal-edit';\n/**\n * `InlineEdit` module is used to handle inline editing actions.\n * @hidden\n */\nvar InlineEdit = /** @class */ (function (_super) {\n __extends(InlineEdit, _super);\n function InlineEdit(parent, serviceLocator, renderer) {\n var _this = _super.call(this, parent, serviceLocator) || this;\n _this.parent = parent;\n _this.serviceLocator = serviceLocator;\n _this.renderer = renderer;\n return _this;\n }\n InlineEdit.prototype.closeEdit = function () {\n _super.prototype.closeEdit.call(this);\n };\n InlineEdit.prototype.addRecord = function (data, index) {\n _super.prototype.addRecord.call(this, data, index);\n };\n InlineEdit.prototype.endEdit = function () {\n _super.prototype.endEdit.call(this);\n };\n InlineEdit.prototype.updateRow = function (index, data) {\n _super.prototype.updateRow.call(this, index, data);\n };\n InlineEdit.prototype.deleteRecord = function (fieldname, data) {\n _super.prototype.deleteRecord.call(this, fieldname, data);\n };\n InlineEdit.prototype.startEdit = function (tr) {\n _super.prototype.startEdit.call(this, tr);\n };\n return InlineEdit;\n}(NormalEdit));\nexport { InlineEdit };\n","import { extend, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { remove, classList, createElement } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\nimport { parentsUntil, inArray, refreshForeignData, getComplexValue, isComplexField } from '../base/util';\nimport * as events from '../base/constant';\nimport { RowRenderer } from '../renderer/row-renderer';\nimport { CellRenderer } from '../renderer/cell-renderer';\nimport { Row } from '../models/row';\nimport { Cell } from '../models/cell';\nimport { RowModelGenerator } from '../services/row-model-generator';\n/**\n * `BatchEdit` module is used to handle batch editing actions.\n * @hidden\n */\nvar BatchEdit = /** @class */ (function () {\n function BatchEdit(parent, serviceLocator, renderer) {\n this.cellDetails = {};\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n this.renderer = renderer;\n this.focus = serviceLocator.getService('focus');\n this.addEventListener();\n }\n /**\n * @hidden\n */\n BatchEdit.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.click, this.clickHandler, this);\n this.parent.on(events.dblclick, this.dblClickHandler, this);\n this.parent.on(events.beforeCellFocused, this.onBeforeCellFocused, this);\n this.parent.on(events.cellFocused, this.onCellFocused, this);\n this.dataBoundFunction = this.dataBound.bind(this);\n this.parent.addEventListener(events.dataBound, this.dataBoundFunction);\n this.parent.on(events.doubleTap, this.dblClickHandler, this);\n this.parent.on(events.keyPressed, this.keyDownHandler, this);\n };\n /**\n * @hidden\n */\n BatchEdit.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.click, this.clickHandler);\n this.parent.off(events.dblclick, this.dblClickHandler);\n this.parent.off(events.beforeCellFocused, this.onBeforeCellFocused);\n this.parent.off(events.cellFocused, this.onCellFocused);\n this.parent.removeEventListener(events.dataBound, this.dataBoundFunction);\n this.parent.off(events.doubleTap, this.dblClickHandler);\n this.parent.off(events.keyPressed, this.keyDownHandler);\n };\n BatchEdit.prototype.dataBound = function () {\n this.parent.notify(events.toolbarRefresh, {});\n };\n /**\n * @hidden\n */\n BatchEdit.prototype.destroy = function () {\n this.removeEventListener();\n };\n BatchEdit.prototype.clickHandler = function (e) {\n if (!parentsUntil(e.target, this.parent.element.id + '_add', true)) {\n this.saveCell();\n if (parentsUntil(e.target, 'e-rowcell') && !this.parent.isEdit) {\n this.setCellIdx(e.target);\n }\n }\n };\n BatchEdit.prototype.dblClickHandler = function (e) {\n var target = parentsUntil(e.target, 'e-rowcell');\n var tr = parentsUntil(e.target, 'e-row');\n if (target && tr && !isNaN(parseInt(target.getAttribute('aria-colindex'), 10))) {\n this.editCell(parseInt(tr.getAttribute('aria-rowindex'), 10), this.parent.getColumns()[parseInt(target.getAttribute('aria-colindex'), 10)].field, this.isAddRow(parseInt(tr.getAttribute('aria-rowindex'), 10)));\n }\n };\n BatchEdit.prototype.onBeforeCellFocused = function (e) {\n if (this.parent.isEdit && this.validateFormObj() &&\n (e.byClick || (['tab', 'shiftTab', 'enter', 'shiftEnter'].indexOf(e.keyArgs.action) > -1))) {\n e.cancel = true;\n if (e.byClick) {\n e.clickArgs.preventDefault();\n }\n else {\n e.keyArgs.preventDefault();\n }\n }\n };\n BatchEdit.prototype.onCellFocused = function (e) {\n var frzCols = this.parent.getFrozenColumns();\n var mCont = this.parent.getContent().querySelector('.e-movablecontent');\n var mHdr = this.parent.getHeaderContent().querySelector('.e-movableheader');\n var clear = (!e.container.isContent || !e.container.isDataCell) && !(this.parent.frozenRows && e.container.isHeader);\n if (!e.byKey || clear) {\n return;\n }\n var _a = e.container.indexes, rowIndex = _a[0], cellIndex = _a[1];\n if (frzCols && (mCont.contains(e.element) || (this.parent.frozenRows && mHdr.contains(e.element)))) {\n cellIndex += frzCols;\n }\n if (this.parent.frozenRows && e.container.isContent) {\n rowIndex += this.parent.frozenRows;\n }\n var isEdit = this.parent.isEdit;\n if (!document.querySelectorAll('.e-popup-open').length) {\n isEdit = isEdit && !this.validateFormObj();\n switch (e.keyArgs.action) {\n case 'tab':\n case 'shiftTab':\n if (isEdit) {\n this.editCellFromIndex(rowIndex, cellIndex);\n }\n break;\n case 'enter':\n case 'shiftEnter':\n e.keyArgs.preventDefault();\n if (isEdit) {\n this.editCell(rowIndex, this.cellDetails.column.field);\n }\n break;\n case 'f2':\n this.editCellFromIndex(rowIndex, cellIndex);\n this.focus.focus();\n break;\n }\n }\n };\n BatchEdit.prototype.isAddRow = function (index) {\n return this.parent.getDataRows()[index].classList.contains('e-insertedrow');\n };\n BatchEdit.prototype.editCellFromIndex = function (rowIdx, cellIdx) {\n this.cellDetails.rowIndex = rowIdx;\n this.cellDetails.cellIndex = cellIdx;\n this.editCell(rowIdx, this.parent.getColumns()[cellIdx].field, this.isAddRow(rowIdx));\n };\n BatchEdit.prototype.closeEdit = function () {\n var gObj = this.parent;\n var rows = this.parent.getRowsObject();\n if (gObj.frozenColumns && rows.length < this.parent.currentViewData.length * 2) {\n rows.push.apply(rows, this.parent.getMovableRowsObject());\n }\n var rowRenderer = new RowRenderer(this.serviceLocator, null, this.parent);\n var tr;\n var mTr;\n var movObj;\n if (gObj.isEdit) {\n this.saveCell(true);\n }\n gObj.clearSelection();\n for (var i = 0; i < rows.length; i++) {\n if (rows[i].isDirty) {\n if (gObj.frozenColumns) {\n movObj = gObj.getMovableRowsObject()[rows[i].index];\n movObj.isDirty = true;\n }\n tr = gObj.getContentTable().querySelector('[data-uid=' + rows[i].uid + ']');\n if (gObj.frozenRows) {\n tr = gObj.getHeaderContent().querySelector('[data-uid=' + rows[i].uid + ']');\n }\n if (gObj.frozenColumns) {\n if (gObj.frozenRows) {\n mTr = gObj.getHeaderContent().querySelector('.e-movableheader')\n .querySelector('[data-uid=' + rows[i].uid + ']');\n }\n else {\n mTr = gObj.getContent().querySelector('.e-movablecontent')\n .querySelector('[data-uid=' + rows[i].uid + ']');\n }\n }\n if (tr || mTr) {\n if (tr && tr.classList.contains('e-insertedrow') || mTr && mTr.classList.contains('e-insertedrow')) {\n if (tr) {\n remove(tr);\n }\n if (mTr && (gObj.frozenColumns || gObj.frozenRows)) {\n remove(mTr);\n }\n this.removeRowObjectFromUID(rows[i].uid);\n i--;\n }\n else {\n refreshForeignData(rows[i], this.parent.getForeignKeyColumns(), rows[i].data);\n delete rows[i].changes;\n rows[i].isDirty = false;\n var ftr = mTr ? mTr : tr;\n classList(ftr, [], ['e-hiddenrow', 'e-updatedtd']);\n rowRenderer.refresh(rows[i], gObj.getColumns(), false);\n }\n }\n }\n }\n if (gObj.getContentTable().querySelector('tr.e-emptyrow') &&\n !gObj.getContentTable().querySelector('tr.e-row')) {\n gObj.getContentTable().querySelector('tr.e-emptyrow').classList.remove('e-hide');\n }\n gObj.notify(events.batchCancel, { rows: this.parent.getRowsObject() });\n var args = {\n requestType: 'batchCancel', type: 'actionBegin', cancel: false\n };\n gObj.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n gObj.notify(events.batchCancel, {\n rows: this.parent.getRowsObject().length ? this.parent.getRowsObject() :\n [new Row({ isDataRow: true, cells: [new Cell({ isDataCell: true, visible: true })] })]\n });\n gObj.selectRow(this.cellDetails.rowIndex);\n this.refreshRowIdx();\n gObj.notify(events.toolbarRefresh, {});\n this.parent.notify(events.tooltipDestroy, {});\n args = { requestType: 'batchCancel', type: 'actionComplete' };\n gObj.trigger(events.actionComplete, args);\n };\n BatchEdit.prototype.deleteRecord = function (fieldname, data) {\n this.saveCell();\n if (this.validateFormObj()) {\n this.saveCell(true);\n }\n this.bulkDelete(fieldname, data);\n };\n BatchEdit.prototype.addRecord = function (data) {\n this.bulkAddRow(data);\n };\n BatchEdit.prototype.endEdit = function (data) {\n if (this.parent.isEdit && this.validateFormObj()) {\n return;\n }\n this.batchSave();\n };\n BatchEdit.prototype.validateFormObj = function () {\n return this.parent.editModule.formObj && !this.parent.editModule.formObj.validate();\n };\n BatchEdit.prototype.batchSave = function () {\n var gObj = this.parent;\n this.saveCell();\n if (gObj.isEdit) {\n return;\n }\n var changes = this.getBatchChanges();\n var args = { batchChanges: changes, cancel: false };\n gObj.trigger(events.beforeBatchSave, args);\n if (args.cancel) {\n return;\n }\n gObj.showSpinner();\n gObj.notify(events.bulkSave, { changes: changes });\n };\n BatchEdit.prototype.getBatchChanges = function () {\n var changes = {\n addedRecords: [],\n deletedRecords: [],\n changedRecords: []\n };\n var rows = this.parent.getRowsObject();\n var mRows = this.parent.getMovableRowsObject();\n var frzCols = this.parent.getFrozenColumns();\n for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {\n var row = rows_1[_i];\n if (frzCols) {\n this.mergeBatchChanges(row, mRows[row.index], frzCols);\n }\n if (row.isDirty) {\n switch (row.edit) {\n case 'add':\n changes.addedRecords.push(row.changes);\n break;\n case 'delete':\n changes.deletedRecords.push(row.data);\n break;\n default:\n changes.changedRecords.push(row.changes);\n }\n }\n }\n return changes;\n };\n BatchEdit.prototype.mergeBatchChanges = function (row, mRow, frzCols) {\n if (row.isDirty) {\n if (mRow.isDirty) {\n extend(row.changes, mRow.changes);\n }\n }\n else if (mRow.isDirty) {\n extend(row, mRow);\n }\n };\n /**\n * @hidden\n */\n BatchEdit.prototype.removeRowObjectFromUID = function (uid) {\n var rows = this.parent.getRowsObject();\n var i = 0;\n for (var len = rows.length; i < len; i++) {\n if (rows[i].uid === uid) {\n break;\n }\n }\n rows.splice(i, 1);\n };\n /**\n * @hidden\n */\n BatchEdit.prototype.addRowObject = function (row) {\n this.parent.getRowsObject().unshift(row);\n };\n BatchEdit.prototype.bulkDelete = function (fieldname, data) {\n var gObj = this.parent;\n var index = data ? this.getIndexFromData(data) : gObj.selectedRowIndex;\n var selectedRows = gObj.getSelectedRows();\n var args = {\n primaryKey: this.parent.getPrimaryKeyFieldNames(),\n rowIndex: index,\n rowData: data ? data : gObj.getSelectedRecords()[0],\n row: data ? gObj.getRows()[index] : selectedRows[0], cancel: false\n };\n if (!args.row) {\n return;\n }\n gObj.trigger(events.beforeBatchDelete, args);\n if (args.cancel) {\n return;\n }\n gObj.clearSelection();\n var uid = args.row.getAttribute('data-uid');\n if (args.row.classList.contains('e-insertedrow')) {\n this.removeRowObjectFromUID(uid);\n remove(args.row);\n }\n else {\n var rowObj = gObj.getRowObjectFromUID(uid);\n rowObj.isDirty = true;\n rowObj.edit = 'delete';\n classList(args.row, ['e-hiddenrow', 'e-updatedtd'], []);\n if (gObj.getFrozenColumns()) {\n classList(data ? gObj.getMovableRows()[index] : selectedRows[1], ['e-hiddenrow', 'e-updatedtd'], []);\n if (gObj.frozenRows && index < gObj.frozenRows) {\n gObj.getHeaderContent().querySelector('.e-movableheader').querySelector('tbody')\n .appendChild(gObj.getMovableRowByIndex(gObj.frozenRows - 1));\n gObj.getHeaderContent().querySelector('.e-frozenheader').querySelector('tbody')\n .appendChild(gObj.getRowByIndex(gObj.frozenRows - 1));\n }\n }\n else if (gObj.frozenRows && index < gObj.frozenRows) {\n gObj.getHeaderContent().querySelector('tbody').appendChild(gObj.getRowByIndex(gObj.frozenRows - 1));\n }\n }\n this.refreshRowIdx();\n gObj.selectRow(index);\n delete args.row;\n gObj.trigger(events.batchDelete, args);\n gObj.notify(events.batchDelete, { rows: this.parent.getRowsObject() });\n gObj.notify(events.toolbarRefresh, {});\n };\n BatchEdit.prototype.refreshRowIdx = function () {\n var rows = [];\n var mRows = [];\n var nonMovableRows = [];\n var frzCols = this.parent.getFrozenColumns();\n if (this.parent.frozenRows) {\n rows = [].slice.call(this.parent.getHeaderTable().querySelector('tbody').children);\n if (frzCols) {\n mRows = [].slice.call(this.parent.getHeaderContent().querySelector('.e-movableheader').querySelector('tbody').children);\n for (var i = 0; i < mRows.length; i++) {\n nonMovableRows[i] = createElement('tr', { className: 'emptynonmv' });\n }\n }\n }\n if (frzCols) {\n mRows = mRows.concat([].slice.call(this.parent.getContentTable().querySelector('tbody').children));\n nonMovableRows = nonMovableRows.concat([].slice.call(this.parent.element.querySelector('.e-movablecontent').querySelector('tbody').children));\n }\n rows = rows.concat([].slice.call(this.parent.getContentTable().querySelector('tbody').children));\n for (var i = 0, j = 0, len = rows.length; i < len; i++) {\n if (rows[i].classList.contains('e-row') && !rows[i].classList.contains('e-hiddenrow')) {\n rows[i].setAttribute('aria-rowindex', j.toString());\n if (frzCols) {\n mRows[i].setAttribute('aria-rowindex', j.toString());\n if (nonMovableRows[i].classList.contains('e-row')) {\n nonMovableRows[i].setAttribute('aria-rowindex', j.toString());\n }\n }\n j++;\n }\n else {\n rows[i].removeAttribute('aria-rowindex');\n if (frzCols) {\n mRows[i].removeAttribute('aria-rowindex');\n }\n }\n }\n };\n BatchEdit.prototype.getIndexFromData = function (data) {\n return inArray(data, this.parent.getCurrentViewRecords());\n };\n BatchEdit.prototype.bulkAddRow = function (data) {\n var gObj = this.parent;\n if (!gObj.editSettings.allowAdding) {\n return;\n }\n if (gObj.isEdit) {\n this.saveCell();\n }\n if (gObj.isEdit) {\n return;\n }\n var defaultData = data ? data : this.getDefaultData();\n var args = {\n defaultData: defaultData,\n primaryKey: gObj.getPrimaryKeyFieldNames(),\n cancel: false\n };\n gObj.trigger(events.beforeBatchAdd, args);\n if (args.cancel) {\n return;\n }\n gObj.clearSelection();\n var mTr;\n var mTbody;\n var row = new RowRenderer(this.serviceLocator, null, this.parent);\n var model = new RowModelGenerator(this.parent);\n var modelData = model.generateRows([args.defaultData]);\n var tr = row.render(modelData[0], gObj.getColumns());\n var col;\n var index;\n for (var i = 0; i < this.parent.groupSettings.columns.length; i++) {\n tr.insertBefore(createElement('td', { className: 'e-indentcell' }), tr.firstChild);\n modelData[0].cells.unshift(new Cell({ cellType: CellType.Indent }));\n }\n var tbody = gObj.getContentTable().querySelector('tbody');\n tr.classList.add('e-insertedrow');\n if (tbody.querySelector('.e-emptyrow')) {\n tbody.querySelector('.e-emptyrow').classList.add('e-hide');\n }\n if (gObj.getFrozenColumns()) {\n mTr = this.renderMovable(tr);\n if (gObj.frozenRows) {\n mTbody = gObj.getHeaderContent().querySelector('.e-movableheader').querySelector('tbody');\n }\n else {\n mTbody = gObj.getContent().querySelector('.e-movablecontent').querySelector('tbody');\n }\n mTbody.insertBefore(mTr, mTbody.firstChild);\n addClass(mTr.querySelectorAll('.e-rowcell'), ['e-updatedtd']);\n if (this.parent.height === 'auto') {\n this.parent.notify(events.frozenHeight, {});\n }\n }\n if (gObj.frozenRows) {\n tbody = gObj.getHeaderContent().querySelector('tbody');\n }\n tbody.insertBefore(tr, tbody.firstChild);\n addClass(tr.querySelectorAll('.e-rowcell'), ['e-updatedtd']);\n modelData[0].isDirty = true;\n modelData[0].changes = extend({}, modelData[0].data);\n modelData[0].edit = 'add';\n this.addRowObject(modelData[0]);\n this.refreshRowIdx();\n this.focus.forgetPrevious();\n gObj.notify(events.batchAdd, { rows: this.parent.getRowsObject() });\n gObj.selectRow(0);\n if (!data) {\n index = this.findNextEditableCell(0, true);\n col = gObj.getColumns()[index];\n this.editCell(0, col.field, true);\n }\n var args1 = {\n defaultData: args.defaultData, row: tr,\n columnObject: col, columnIndex: index, primaryKey: args.primaryKey, cell: tr.cells[index]\n };\n gObj.trigger(events.batchAdd, args1);\n };\n BatchEdit.prototype.renderMovable = function (ele) {\n var mEle = ele.cloneNode(true);\n for (var i = 0; i < this.parent.frozenColumns; i++) {\n mEle.removeChild(mEle.children[0]);\n }\n for (var i = this.parent.frozenColumns, len = ele.childElementCount; i < len; i++) {\n ele.removeChild(ele.children[ele.childElementCount - 1]);\n }\n return mEle;\n };\n BatchEdit.prototype.findNextEditableCell = function (columnIndex, isAdd) {\n var cols = this.parent.getColumns();\n var endIndex = cols.length;\n for (var i = columnIndex; i < endIndex; i++) {\n if (!isAdd && this.checkNPCell(cols[i])) {\n return i;\n }\n else if (isAdd && !cols[i].template && cols[i].visible && cols[i].allowEditing &&\n !(cols[i].isIdentity && cols[i].isPrimaryKey)) {\n return i;\n }\n }\n return -1;\n };\n BatchEdit.prototype.checkNPCell = function (col) {\n return !col.template && col.visible && !col.isPrimaryKey && !col.isIdentity && col.allowEditing;\n };\n BatchEdit.prototype.getDefaultData = function () {\n var gObj = this.parent;\n var data = {};\n var dValues = { 'number': 0, 'string': null, 'boolean': false, 'date': null, 'datetime': null };\n for (var _i = 0, _a = gObj.getColumns(); _i < _a.length; _i++) {\n var col = _a[_i];\n if (!isNullOrUndefined(col.field) && !isComplexField(col.field)) {\n data[col.field] = col.defaultValue ? col.defaultValue : dValues[col.type];\n }\n if (!isNullOrUndefined(col.field) && isComplexField(col.field)) {\n var splits = col.field.split('.');\n data[splits[0]] = !isNullOrUndefined(data[splits[0]]) ? data[splits[0]] : {};\n col.defaultValue ? data[splits[0]][splits[1]] = col.defaultValue : data[splits[0]][splits[1]] = dValues[col.type];\n }\n }\n return data;\n };\n BatchEdit.prototype.setCellIdx = function (target) {\n var gLen = 0;\n if (this.parent.allowGrouping) {\n gLen = this.parent.groupSettings.columns.length;\n }\n this.cellDetails.cellIndex = target.cellIndex - gLen;\n this.cellDetails.rowIndex = parseInt(target.parentElement.getAttribute('aria-rowindex'), 10);\n };\n BatchEdit.prototype.editCell = function (index, field, isAdd) {\n var gObj = this.parent;\n var col = gObj.getColumnByField(field);\n var keys = gObj.getPrimaryKeyFieldNames();\n if (gObj.editSettings.allowEditing && col.allowEditing) {\n if (gObj.isEdit && !(this.cellDetails.column.field === field\n && (this.cellDetails.rowIndex === index && this.parent.getDataRows().length - 1 !== index))) {\n this.saveCell();\n if (this.cellDetails.rowIndex === index && this.cellDetails.column.field === field) {\n return;\n }\n }\n if (gObj.isEdit) {\n return;\n }\n var row = void 0;\n var rowData = void 0;\n var mRowData = void 0;\n var colIdx = gObj.getColumnIndexByField(field);\n var frzCols = gObj.getFrozenColumns();\n if (frzCols && colIdx >= frzCols) {\n row = gObj.getMovableDataRows()[index];\n mRowData = this.parent.getRowObjectFromUID(this.parent.getMovableDataRows()[index].getAttribute('data-uid'));\n rowData = mRowData.changes ? extend({}, mRowData.changes) : extend({}, this.getDataByIndex(index));\n }\n else {\n row = gObj.getDataRows()[index];\n rowData = extend({}, this.getDataByIndex(index));\n }\n if ((keys[0] === col.field && !row.classList.contains('e-insertedrow')) || col.template || col.columns ||\n (col.isPrimaryKey && col.isIdentity)) {\n return;\n }\n var rowObj = gObj.getRowObjectFromUID(row.getAttribute('data-uid'));\n var cells = [].slice.apply(row.cells);\n var isComplex = !isNullOrUndefined(col.field) && isComplexField(col.field);\n var args = {\n cell: cells[this.getColIndex(cells, this.getCellIdx(col.uid))], row: row,\n columnName: col.field, columnObject: col, isForeignKey: !isNullOrUndefined(col.foreignKeyValue),\n primaryKey: keys, rowData: rowData,\n validationRules: extend({}, col.validationRules ? col.validationRules : {}),\n value: isComplex && !isAdd ? getComplexValue(rowData, col.field) : rowData[col.field],\n type: !isAdd ? 'edit' : 'add', cancel: false,\n foreignKeyData: rowObj && rowObj.foreignKeyData\n };\n if (!args.cell) {\n return;\n }\n gObj.trigger(events.cellEdit, args);\n if (args.cancel) {\n return;\n }\n this.cellDetails = {\n rowData: rowData, column: col, value: args.value, isForeignKey: args.isForeignKey, rowIndex: index,\n cellIndex: parseInt(args.cell.getAttribute('aria-colindex'), 10),\n foreignKeyData: args.foreignKeyData\n };\n if (args.cell.classList.contains('e-updatedtd')) {\n this.isColored = true;\n args.cell.classList.remove('e-updatedtd');\n }\n gObj.isEdit = true;\n gObj.clearSelection();\n if (!gObj.isCheckBoxSelection || !gObj.isPersistSelection) {\n gObj.selectRow(this.cellDetails.rowIndex, true);\n }\n this.renderer.update(args);\n this.form = gObj.element.querySelector('#' + gObj.element.id + 'EditForm');\n gObj.editModule.applyFormValidation([col]);\n this.parent.element.querySelector('.e-gridpopup').style.display = 'none';\n }\n };\n BatchEdit.prototype.updateCell = function (rowIndex, field, value) {\n var col = this.parent.getColumnByField(field);\n if (col && !col.isPrimaryKey) {\n var td = this.parent.getDataRows()[rowIndex].cells[this.parent.getColumnIndexByField(field)];\n var rowObj = this.parent.getRowObjectFromUID(td.parentElement.getAttribute('data-uid'));\n this.refreshTD(td, col, rowObj, value);\n this.parent.trigger(events.queryCellInfo, {\n cell: td, column: col, data: rowObj.changes\n });\n }\n };\n BatchEdit.prototype.setChanges = function (rowObj, field, value) {\n var isComplex = !isNullOrUndefined(field) && isComplexField(field);\n if (!rowObj.changes) {\n rowObj.changes = extend({}, rowObj.data);\n }\n if (isComplex) {\n rowObj.changes[field.split('.')[0]] = extend({}, rowObj.data[field.split('.')[0]]);\n rowObj.changes[field.split('.')[0]][field.split('.')[1]] = value;\n }\n else {\n rowObj.changes[field] = value;\n }\n if (rowObj.data[field] !== value) {\n rowObj.isDirty = true;\n }\n };\n BatchEdit.prototype.updateRow = function (index, data) {\n var keys = Object.keys(data);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var col = keys_1[_i];\n this.updateCell(index, col, data[col]);\n }\n };\n BatchEdit.prototype.getCellIdx = function (uid) {\n var cIdx = this.parent.getColumnIndexByUid(uid) + this.parent.groupSettings.columns.length;\n if (!isNullOrUndefined(this.parent.detailTemplate) || !isNullOrUndefined(this.parent.childGrid)) {\n cIdx++;\n }\n return cIdx;\n };\n BatchEdit.prototype.refreshTD = function (td, column, rowObj, value) {\n var cell = new CellRenderer(this.parent, this.serviceLocator);\n var rowcell;\n this.setChanges(rowObj, column.field, value);\n var frzCols = this.parent.getFrozenColumns();\n refreshForeignData(rowObj, this.parent.getForeignKeyColumns(), rowObj.changes);\n if (frzCols && this.getCellIdx(column.uid) >= frzCols && this.parent.getColumns().length === rowObj.cells.length) {\n rowcell = rowObj.cells.slice(frzCols, rowObj.cells.length);\n }\n else {\n rowcell = rowObj.cells;\n }\n cell.refreshTD(td, rowcell[this.getCellIdx(column.uid) - (this.getCellIdx(column.uid) >= frzCols ? frzCols : 0)], rowObj.changes);\n td.classList.add('e-updatedtd');\n this.parent.notify(events.toolbarRefresh, {});\n };\n BatchEdit.prototype.getColIndex = function (cells, index) {\n var cIdx = 0;\n if (this.parent.allowGrouping && this.parent.groupSettings.columns) {\n cIdx = this.parent.groupSettings.columns.length;\n }\n if (!isNullOrUndefined(this.parent.detailTemplate) || !isNullOrUndefined(this.parent.childGrid)) {\n cIdx++;\n }\n for (var m = 0; m < cells.length; m++) {\n var colIndex = parseInt(cells[m].getAttribute('aria-colindex'), 10);\n if (colIndex === index - cIdx) {\n return m;\n }\n }\n return -1;\n };\n BatchEdit.prototype.saveCell = function (isForceSave) {\n var gObj = this.parent;\n if (!isForceSave && (!gObj.isEdit || this.validateFormObj())) {\n return;\n }\n var tr = parentsUntil(this.form, 'e-row');\n var column = this.cellDetails.column;\n var editedData = gObj.editModule.getCurrentEditedData(this.form, {});\n var isComplex = !isNullOrUndefined(column.field) && isComplexField(column.field);\n var cloneEditedData = extend({}, editedData);\n editedData = extend({}, editedData, this.cellDetails.rowData);\n if (isComplex) {\n var splits = column.field.split('.');\n var cloneComplexData = extend({}, this.cellDetails.rowData[splits[0]]);\n editedData[splits[0]] = extend({}, editedData[splits[0]], this.cellDetails.rowData[splits[0]]);\n this.cellDetails.rowData[splits[0]][splits[1]] = cloneComplexData[splits[1]];\n editedData[splits[0]][splits[1]] = cloneEditedData[splits[0]][splits[1]];\n }\n else {\n editedData[column.field] = cloneEditedData[column.field];\n }\n var args = {\n columnName: column.field,\n value: isComplex ? getComplexValue(editedData, column.field) : editedData[column.field],\n rowData: this.cellDetails.rowData,\n previousValue: this.cellDetails.value,\n columnObject: column,\n cell: this.form.parentElement,\n isForeignKey: this.cellDetails.isForeignKey, cancel: false\n };\n if (!isForceSave) {\n gObj.trigger(events.cellSave, args);\n }\n if (args.cancel) {\n return;\n }\n gObj.editModule.destroyForm();\n gObj.isEdit = false;\n gObj.editModule.destroyWidgets([column]);\n this.parent.notify(events.tooltipDestroy, {});\n this.refreshTD(args.cell, column, gObj.getRowObjectFromUID(tr.getAttribute('data-uid')), args.value);\n removeClass([tr], ['e-editedrow', 'e-batchrow']);\n removeClass([args.cell], ['e-editedbatchcell', 'e-boolcell']);\n if (!isNullOrUndefined(args.value) && args.value.toString() ===\n (!isNullOrUndefined(this.cellDetails.value) ? this.cellDetails.value : '').toString() && !this.isColored\n || (isNullOrUndefined(args.value) && isNullOrUndefined(this.cellDetails.value) &&\n !args.cell.parentElement.classList.contains('e-insertedrow'))) {\n args.cell.classList.remove('e-updatedtd');\n }\n gObj.notify(events.toolbarRefresh, {});\n this.isColored = false;\n };\n BatchEdit.prototype.getDataByIndex = function (index) {\n var row = this.parent.getRowObjectFromUID(this.parent.getDataRows()[index].getAttribute('data-uid'));\n return row.changes ? row.changes : row.data;\n };\n BatchEdit.prototype.keyDownHandler = function (e) {\n if (e.action === 'tab' && this.parent.isEdit) {\n var rowcell = parentsUntil(e.target, 'e-rowcell');\n if (rowcell) {\n var cell = rowcell.querySelector('.e-field');\n if (cell) {\n var visibleColumns = this.parent.getVisibleColumns();\n if (visibleColumns[visibleColumns.length - 1].field === cell.getAttribute('name')) {\n this.saveCell();\n }\n }\n }\n }\n };\n return BatchEdit;\n}());\nexport { BatchEdit };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { NormalEdit } from './normal-edit';\n/**\n * `DialogEdit` module is used to handle dialog editing actions.\n * @hidden\n */\nvar DialogEdit = /** @class */ (function (_super) {\n __extends(DialogEdit, _super);\n function DialogEdit(parent, serviceLocator, renderer) {\n var _this = \n //constructor\n _super.call(this, parent, serviceLocator) || this;\n _this.parent = parent;\n _this.serviceLocator = serviceLocator;\n _this.renderer = renderer;\n return _this;\n }\n DialogEdit.prototype.closeEdit = function () {\n //closeEdit\n _super.prototype.closeEdit.call(this);\n };\n DialogEdit.prototype.addRecord = function (data, index) {\n //addRecord\n _super.prototype.addRecord.call(this, data, index);\n };\n DialogEdit.prototype.endEdit = function () {\n //endEdit\n _super.prototype.endEdit.call(this);\n };\n DialogEdit.prototype.updateRow = function (index, data) {\n _super.prototype.updateRow.call(this, index, data);\n };\n DialogEdit.prototype.deleteRecord = function (fieldname, data) {\n //deleteRecord\n _super.prototype.deleteRecord.call(this, fieldname, data);\n };\n DialogEdit.prototype.startEdit = function (tr) {\n _super.prototype.startEdit.call(this, tr);\n };\n return DialogEdit;\n}(NormalEdit));\nexport { DialogEdit };\n","import { extend } from '@syncfusion/ej2-base';\nimport { createElement } from '@syncfusion/ej2-base';\nimport { DatePicker } from '@syncfusion/ej2-calendars';\nimport { isEditable, isComplexField, getComplexFieldID, getComplexValue } from '../base/util';\n/**\n * `DatePickerEditCell` is used to handle datepicker cell type editing.\n * @hidden\n */\nvar DatePickerEditCell = /** @class */ (function () {\n function DatePickerEditCell(parent) {\n this.parent = parent;\n }\n DatePickerEditCell.prototype.create = function (args) {\n /* tslint:disable-next-line:no-any */\n var complexFieldName = getComplexFieldID(args.column.field);\n var isComplex = isComplexField(args.column.field);\n return createElement('input', {\n className: 'e-field', attrs: {\n id: isComplex ? this.parent.element.id + complexFieldName : this.parent.element.id + args.column.field,\n name: isComplex ? complexFieldName : args.column.field, type: 'text', 'e-mappinguid': args.column.uid\n }\n });\n };\n DatePickerEditCell.prototype.read = function (element) {\n return element.ej2_instances[0].value;\n };\n DatePickerEditCell.prototype.write = function (args) {\n var isInline = this.parent.editSettings.mode !== 'Dialog';\n /* tslint:disable-next-line:no-any */\n var isComplex = isComplexField(args.column.field);\n var isAddRow = args.requestType === 'add' || args.row.classList.contains('e-addedrow');\n var value = isComplex && !isAddRow ?\n getComplexValue(args.rowData, args.column.field) : args.rowData[args.column.field];\n value = value ? new Date(value) : null;\n this.obj = new DatePicker(extend({\n floatLabelType: isInline ? 'Never' : 'Always',\n value: value,\n placeholder: isInline ?\n '' : args.column.headerText, enableRtl: this.parent.enableRtl,\n enabled: isEditable(args.column, args.type, args.element),\n }, args.column.edit.params));\n this.obj.appendTo(args.element);\n };\n DatePickerEditCell.prototype.destroy = function () {\n if (this.obj) {\n this.obj.destroy();\n }\n };\n return DatePickerEditCell;\n}());\nexport { DatePickerEditCell };\n","import { createElement, classList, addClass, removeClass, isNullOrUndefined, Browser } from '@syncfusion/ej2-base';\nimport { Query, DataManager } from '@syncfusion/ej2-data';\nimport { EventHandler, closest } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { Dialog, calculateRelativeBasedPosition } from '@syncfusion/ej2-popups';\nimport { changeButtonType, createCboxWithWrap, toogleCheckbox, parentsUntil } from '../base/util';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { SearchBox } from '../services/focus-strategy';\n/**\n * The `ColumnChooser` module is used to show or hide columns dynamically.\n */\nvar ColumnChooser = /** @class */ (function () {\n /**\n * Constructor for the Grid ColumnChooser module\n * @hidden\n */\n function ColumnChooser(parent, serviceLocator) {\n this.showColumn = [];\n this.hideColumn = [];\n this.isDlgOpen = false;\n this.dlghide = false;\n this.initialOpenDlg = true;\n this.stateChangeColumns = [];\n this.isInitialOpen = false;\n this.isCustomizeOpenCC = false;\n this.cBoxTrue = createCheckBox(true, { checked: true, label: ' ' });\n this.cBoxFalse = createCheckBox(true, { checked: false, label: ' ' });\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n this.addEventListener();\n this.cBoxTrue.insertBefore(createElement('input', {\n className: 'e-chk-hidden e-cc e-cc-chbox', attrs: { type: 'checkbox' }\n }), this.cBoxTrue.firstChild);\n this.cBoxFalse.insertBefore(createElement('input', {\n className: 'e-chk-hidden e-cc e-cc-chbox', attrs: { 'type': 'checkbox' }\n }), this.cBoxFalse.firstChild);\n this.cBoxFalse.querySelector('.e-frame').classList.add('e-uncheck');\n if (this.parent.enableRtl) {\n addClass([this.cBoxTrue, this.cBoxFalse], ['e-rtl']);\n }\n }\n ColumnChooser.prototype.destroy = function () {\n this.removeEventListener();\n this.unWireEvents();\n if (!isNullOrUndefined(this.dlgObj) && this.dlgObj.element && !this.dlgObj.isDestroyed) {\n this.dlgObj.destroy();\n }\n };\n ColumnChooser.prototype.rtlUpdate = function () {\n if (this.parent.enableRtl) {\n addClass(this.innerDiv.querySelectorAll('.e-checkbox-wrapper'), ['e-rtl']);\n }\n else {\n removeClass(this.innerDiv.querySelectorAll('.e-checkbox-wrapper'), ['e-rtl']);\n }\n };\n /**\n * @hidden\n */\n ColumnChooser.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.click, this.clickHandler, this);\n this.parent.on(events.uiUpdate, this.enableAfterRenderEle, this);\n this.parent.on(events.initialEnd, this.render, this);\n this.parent.addEventListener(events.dataBound, this.hideDialog.bind(this));\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.rtlUpdated, this.rtlUpdate, this);\n };\n /**\n * @hidden\n */\n ColumnChooser.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.click, this.clickHandler);\n this.parent.off(events.initialEnd, this.render);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.uiUpdate, this.enableAfterRenderEle);\n this.parent.off(events.rtlUpdated, this.rtlUpdate);\n };\n ColumnChooser.prototype.render = function () {\n this.l10n = this.serviceLocator.getService('localization');\n this.renderDlgContent();\n this.getShowHideService = this.serviceLocator.getService('showHideService');\n };\n ColumnChooser.prototype.clickHandler = function (e) {\n var targetElement = e.target;\n if (!this.isCustomizeOpenCC) {\n if (!isNullOrUndefined(closest(targetElement, '.e-cc')) || !isNullOrUndefined(closest(targetElement, '.e-cc-toolbar'))) {\n if (targetElement.classList.contains('e-columnchooser-btn') || targetElement.classList.contains('e-cc-toolbar')) {\n if ((this.initialOpenDlg && this.dlgObj.visible) || !this.isDlgOpen) {\n this.isDlgOpen = true;\n return;\n }\n }\n else if (targetElement.classList.contains('e-cc-cancel')) {\n targetElement.parentElement.querySelector('.e-ccsearch').value = '';\n this.columnChooserSearch('');\n this.removeCancelIcon();\n }\n }\n else {\n if (!isNullOrUndefined(this.dlgObj) && this.dlgObj.visible && !targetElement.classList.contains('e-toolbar-items')) {\n this.dlgObj.hide();\n this.clearActions();\n this.refreshCheckboxState();\n // this.unWireEvents();\n this.isDlgOpen = false;\n }\n }\n }\n this.rtlUpdate();\n };\n ColumnChooser.prototype.hideDialog = function () {\n if (!isNullOrUndefined(this.dlgObj) && this.dlgObj.visible) {\n this.dlgObj.hide();\n // this.unWireEvents();\n this.isDlgOpen = false;\n }\n };\n /**\n * To render columnChooser when showColumnChooser enabled.\n * @return {void}\n * @hidden\n */\n ColumnChooser.prototype.renderColumnChooser = function (x, y, target) {\n if (!this.dlgObj.visible) {\n var pos = { X: null, Y: null };\n var args1 = {\n requestType: 'beforeOpenColumnChooser', element: this.parent.element,\n columns: this.getColumns(), cancel: false\n };\n this.parent.trigger(events.beforeOpenColumnChooser, args1);\n if (args1.cancel) {\n return;\n }\n this.refreshCheckboxState();\n this.dlgObj.dataBind();\n this.dlgObj.element.style.maxHeight = '430px';\n var elementVisible = this.dlgObj.element.style.display;\n this.dlgObj.element.style.display = 'block';\n var newpos = calculateRelativeBasedPosition(closest(target, '.e-toolbar-item'), this.dlgObj.element);\n this.dlgObj.element.style.display = elementVisible;\n this.dlgObj.element.style.top = newpos.top + closest(target, '.e-cc-toolbar').getBoundingClientRect().height + 'px';\n var dlgWidth = 250;\n if (!isNullOrUndefined(closest(target, '.e-bigger'))) {\n this.dlgObj.width = 258;\n }\n if (Browser.isDevice) {\n this.dlgObj.target = document.body;\n this.dlgObj.position = { X: 'center', Y: 'center' };\n this.dlgObj.refreshPosition();\n this.dlgObj.open = this.mOpenDlg.bind(this);\n }\n else {\n if (this.parent.enableRtl) {\n this.dlgObj.element.style.left = target.offsetLeft + 'px';\n }\n else {\n this.dlgObj.element.style.left = ((newpos.left - dlgWidth) + closest(target, '.e-cc-toolbar').clientWidth) + 2 + 'px';\n }\n }\n this.removeCancelIcon();\n this.dlgObj.show();\n }\n else {\n // this.unWireEvents();\n this.hideDialog();\n this.addcancelIcon();\n }\n this.rtlUpdate();\n };\n /**\n * Column chooser can be displayed on screen by given position(X and Y axis).\n * @param {number} X - Defines the X axis.\n * @param {number} Y - Defines the Y axis.\n * @return {void}\n */\n ColumnChooser.prototype.openColumnChooser = function (X, Y) {\n this.isCustomizeOpenCC = true;\n if (this.dlgObj.visible) {\n this.hideDialog();\n return;\n }\n if (!this.isInitialOpen) {\n this.dlgObj.content = this.renderChooserList();\n }\n else {\n this.refreshCheckboxState();\n }\n this.dlgObj.dataBind();\n this.dlgObj.position = { X: 'center', Y: 'center' };\n if (isNullOrUndefined(X)) {\n this.dlgObj.position = { X: 'center', Y: 'center' };\n this.dlgObj.refreshPosition();\n }\n else {\n this.dlgObj.element.style.top = '';\n this.dlgObj.element.style.left = '';\n this.dlgObj.element.style.top = Y + 'px';\n this.dlgObj.element.style.left = X + 'px';\n }\n this.dlgObj.beforeOpen = this.customDialogOpen.bind(this);\n this.dlgObj.show();\n this.isInitialOpen = true;\n this.dlgObj.beforeClose = this.customDialogClose.bind(this);\n };\n ColumnChooser.prototype.enableAfterRenderEle = function (e) {\n if (e.module === this.getModuleName() && e.enable) {\n this.render();\n }\n };\n ColumnChooser.prototype.customDialogOpen = function () {\n var searchElement = this.dlgObj.content.querySelector('input.e-ccsearch');\n EventHandler.add(searchElement, 'keyup', this.columnChooserManualSearch, this);\n };\n ColumnChooser.prototype.customDialogClose = function () {\n var searchElement = this.dlgObj.content.querySelector('input.e-ccsearch');\n EventHandler.remove(searchElement, 'keyup', this.columnChooserManualSearch);\n };\n ColumnChooser.prototype.getColumns = function () {\n var columns = this.parent.getColumns().filter(function (column) { return (column.type !== 'checkbox'\n && column.showInColumnChooser === true) || (column.type === 'checkbox' && column.field !== undefined); });\n return columns;\n };\n ColumnChooser.prototype.renderDlgContent = function () {\n var y;\n this.dlgDiv = createElement('div', { className: 'e-ccdlg e-cc', id: this.parent.element.id + '_ccdlg' });\n this.parent.element.appendChild(this.dlgDiv);\n var xpos = this.parent.element.getBoundingClientRect().width - 250;\n var dialoPos = this.parent.enableRtl ? 'left' : 'right';\n var tarElement = this.parent.element.querySelector('.e-ccdiv');\n if (!isNullOrUndefined(tarElement)) {\n y = tarElement.getBoundingClientRect().top;\n }\n var pos = { X: null, Y: null };\n this.dlgObj = new Dialog({\n header: this.l10n.getConstant('ChooseColumns'),\n showCloseIcon: false,\n closeOnEscape: false,\n locale: this.parent.locale,\n visible: false,\n enableRtl: this.parent.enableRtl,\n target: document.getElementById(this.parent.element.id),\n buttons: [{\n click: this.confirmDlgBtnClick.bind(this),\n buttonModel: {\n content: this.l10n.getConstant('OKButton'), isPrimary: true,\n cssClass: 'e-cc e-cc_okbtn',\n }\n },\n {\n click: this.clearActions.bind(this),\n buttonModel: { cssClass: 'e-flat e-cc e-cc-cnbtn', content: this.l10n.getConstant('CancelButton') }\n }],\n content: this.renderChooserList(),\n width: 250,\n cssClass: 'e-cc',\n animationSettings: { effect: 'None' },\n });\n this.dlgObj.appendTo(this.dlgDiv);\n changeButtonType(this.dlgObj.element);\n this.wireEvents();\n };\n ColumnChooser.prototype.renderChooserList = function () {\n this.mainDiv = createElement('div', { className: 'e-main-div e-cc' });\n var searchDiv = createElement('div', { className: 'e-cc-searchdiv e-cc e-input-group' });\n var ccsearchele = createElement('input', {\n className: 'e-ccsearch e-cc e-input',\n attrs: { placeholder: this.l10n.getConstant('Search') }\n });\n var ccsearchicon = createElement('span', { className: 'e-ccsearch-icon e-icons e-cc e-input-group-icon',\n attrs: { title: this.l10n.getConstant('Search') } });\n var conDiv = createElement('div', { className: 'e-cc-contentdiv' });\n this.innerDiv = createElement('div', { className: 'e-innerdiv e-cc' });\n searchDiv.appendChild(ccsearchele);\n searchDiv.appendChild(ccsearchicon);\n this.searchBoxObj = new SearchBox(ccsearchele);\n var innerDivContent = this.refreshCheckboxList(this.parent.getColumns());\n this.innerDiv.appendChild(innerDivContent);\n conDiv.appendChild(this.innerDiv);\n this.mainDiv.appendChild(searchDiv);\n this.mainDiv.appendChild(conDiv);\n return this.mainDiv;\n };\n ColumnChooser.prototype.confirmDlgBtnClick = function (args) {\n this.stateChangeColumns = [];\n if (!isNullOrUndefined(args)) {\n if (this.hideColumn.length) {\n this.columnStateChange(this.hideColumn, false);\n }\n if (this.showColumn.length) {\n this.columnStateChange(this.showColumn, true);\n }\n var params = {\n requestType: 'columnstate', element: this.parent.element,\n columns: this.stateChangeColumns, dialogInstance: this.dlgObj\n };\n this.parent.trigger(events.actionComplete, params);\n this.getShowHideService.setVisible(this.stateChangeColumns);\n this.clearActions();\n this.parent.notify(events.tooltipDestroy, { module: 'edit' });\n }\n };\n ColumnChooser.prototype.columnStateChange = function (stateColumns, state) {\n for (var index = 0; index < stateColumns.length; index++) {\n var colUid = stateColumns[index];\n var currentCol = this.parent.getColumnByUid(colUid);\n currentCol.visible = state;\n this.stateChangeColumns.push(currentCol);\n }\n };\n ColumnChooser.prototype.clearActions = function () {\n this.hideColumn = [];\n this.showColumn = [];\n // this.unWireEvents();\n this.hideDialog();\n this.addcancelIcon();\n };\n ColumnChooser.prototype.checkstatecolumn = function (isChecked, coluid) {\n if (isChecked) {\n if (this.hideColumn.indexOf(coluid) !== -1) {\n this.hideColumn.splice(this.hideColumn.indexOf(coluid), 1);\n }\n if (this.showColumn.indexOf(coluid) === -1) {\n this.showColumn.push(coluid);\n }\n }\n else {\n if (this.showColumn.indexOf(coluid) !== -1) {\n this.showColumn.splice(this.showColumn.indexOf(coluid), 1);\n }\n if (this.hideColumn.indexOf(coluid) === -1) {\n this.hideColumn.push(coluid);\n }\n }\n };\n ColumnChooser.prototype.columnChooserSearch = function (searchVal) {\n var clearSearch = false;\n var fltrCol;\n if (searchVal === '') {\n this.removeCancelIcon();\n fltrCol = this.getColumns();\n clearSearch = true;\n }\n else {\n fltrCol = new DataManager(this.getColumns()).executeLocal(new Query()\n .where('headerText', 'startswith', searchVal, true));\n }\n if (fltrCol.length) {\n this.innerDiv.innerHTML = ' ';\n this.innerDiv.classList.remove('e-ccnmdiv');\n this.innerDiv.appendChild(this.refreshCheckboxList(fltrCol, searchVal));\n if (!clearSearch) {\n this.addcancelIcon();\n }\n }\n else {\n var nMatchele = createElement('span', { className: 'e-cc e-nmatch' });\n nMatchele.innerHTML = this.l10n.getConstant('Matchs');\n this.innerDiv.innerHTML = ' ';\n this.innerDiv.appendChild(nMatchele);\n this.innerDiv.classList.add('e-ccnmdiv');\n }\n this.flag = true;\n this.stopTimer();\n };\n ColumnChooser.prototype.wireEvents = function () {\n EventHandler.add(this.dlgObj.element, 'click', this.checkBoxClickHandler, this);\n EventHandler.add(this.searchBoxObj.searchBox, 'keyup', this.columnChooserManualSearch, this);\n this.searchBoxObj.wireEvent();\n };\n ColumnChooser.prototype.unWireEvents = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n if (this.dlgObj.element) {\n EventHandler.remove(this.dlgObj.element, 'click', this.checkBoxClickHandler);\n }\n EventHandler.remove(this.searchBoxObj.searchBox, 'keyup', this.columnChooserManualSearch);\n this.searchBoxObj.unWireEvent();\n };\n ColumnChooser.prototype.checkBoxClickHandler = function (e) {\n var checkstate;\n var elem = parentsUntil(e.target, 'e-checkbox-wrapper');\n if (elem) {\n toogleCheckbox(elem.parentElement);\n elem.querySelector('.e-chk-hidden').focus();\n if (elem.querySelector('.e-check')) {\n checkstate = true;\n }\n else if (elem.querySelector('.e-uncheck')) {\n checkstate = false;\n }\n else {\n return;\n }\n var columnUid = parentsUntil(elem, 'e-ccheck').getAttribute('uid');\n this.checkstatecolumn(checkstate, columnUid);\n this.refreshCheckboxButton();\n }\n };\n ColumnChooser.prototype.refreshCheckboxButton = function () {\n var searchValue = this.dlgObj.element.querySelector('.e-cc.e-input').value;\n var selected = this.innerDiv.querySelectorAll('.e-check').length;\n var btn = this.dlgDiv.querySelector('.e-footer-content').querySelector('.e-btn').ej2_instances[0];\n btn.disabled = false;\n if (selected === 0 && searchValue === '') {\n btn.disabled = true;\n }\n btn.dataBind();\n };\n ColumnChooser.prototype.refreshCheckboxList = function (gdCol, searchVal) {\n this.ulElement = createElement('ul', { className: 'e-ccul-ele e-cc' });\n for (var i = 0; i < gdCol.length; i++) {\n var columns = gdCol[i];\n this.renderCheckbox(columns);\n }\n return this.ulElement;\n };\n ColumnChooser.prototype.refreshCheckboxState = function () {\n this.dlgObj.element.querySelector('.e-cc.e-input').value = '';\n this.columnChooserSearch('');\n for (var i = 0; i < this.parent.element.querySelectorAll('.e-cc-chbox').length; i++) {\n var element = this.parent.element.querySelectorAll('.e-cc-chbox')[i];\n var columnUID = parentsUntil(element, 'e-ccheck').getAttribute('uid');\n var column = this.parent.getColumnByUid(columnUID);\n if (column.visible) {\n element.checked = true;\n this.checkState(element.parentElement.querySelector('.e-icons'), true);\n }\n else {\n element.checked = false;\n this.checkState(element.parentElement.querySelector('.e-icons'), false);\n }\n }\n };\n ColumnChooser.prototype.checkState = function (element, state) {\n state ? classList(element, ['e-check'], ['e-uncheck']) : classList(element, ['e-uncheck'], ['e-check']);\n };\n ColumnChooser.prototype.createCheckBox = function (label, checked, uid) {\n var cbox = checked ? this.cBoxTrue.cloneNode(true) : this.cBoxFalse.cloneNode(true);\n cbox.querySelector('.e-label').innerHTML = label;\n return createCboxWithWrap(uid, cbox, 'e-ccheck');\n };\n ColumnChooser.prototype.renderCheckbox = function (column) {\n var cclist;\n var hideColState;\n var showColState;\n var checkBoxObj;\n if (column.showInColumnChooser) {\n cclist = createElement('li', { className: 'e-cclist e-cc', styles: 'list-style:None', id: 'e-ccli_' + column.uid });\n hideColState = this.hideColumn.indexOf(column.uid) === -1 ? false : true;\n showColState = this.showColumn.indexOf(column.uid) === -1 ? false : true;\n var cccheckboxlist = this.createCheckBox(column.headerText, (column.visible && !hideColState) || showColState, column.uid);\n cclist.appendChild(cccheckboxlist);\n this.ulElement.appendChild(cclist);\n }\n };\n ColumnChooser.prototype.columnChooserManualSearch = function (e) {\n this.addcancelIcon();\n this.searchValue = e.target.value;\n var proxy = this;\n this.stopTimer();\n this.startTimer(e);\n };\n ColumnChooser.prototype.startTimer = function (e) {\n var proxy = this;\n var interval = !proxy.flag && e.keyCode !== 13 ? 500 : 0;\n this.timer = window.setInterval(function () { proxy.columnChooserSearch(proxy.searchValue); }, interval);\n };\n ColumnChooser.prototype.stopTimer = function () {\n window.clearInterval(this.timer);\n };\n ColumnChooser.prototype.addcancelIcon = function () {\n this.dlgDiv.querySelector('.e-cc.e-ccsearch-icon').classList.add('e-cc-cancel');\n };\n ColumnChooser.prototype.removeCancelIcon = function () {\n this.dlgDiv.querySelector('.e-cc.e-ccsearch-icon').classList.remove('e-cc-cancel');\n };\n ColumnChooser.prototype.mOpenDlg = function () {\n if (Browser.isDevice) {\n this.dlgObj.element.querySelector('.e-cc-searchdiv').classList.remove('e-input-focus');\n this.dlgObj.element.querySelectorAll('.e-cc-chbox')[0].focus();\n }\n };\n // internally use\n ColumnChooser.prototype.getModuleName = function () {\n return 'columnChooser';\n };\n return ColumnChooser;\n}());\nexport { ColumnChooser };\n","import { Row } from './../models/row';\nimport { CellType } from '../base/enum';\nimport { isNullOrUndefined, Internationalization, getValue } from '@syncfusion/ej2-base';\nimport { Cell } from '../models/cell';\nimport { ValueFormatter } from './../services/value-formatter';\nimport { Query } from '@syncfusion/ej2-data';\nimport { getForeignData } from '../base/util';\n/**\n * @hidden\n * `ExportHelper` for `PdfExport` & `ExcelExport`\n */\nvar ExportHelper = /** @class */ (function () {\n function ExportHelper(parent) {\n this.hideColumnInclude = false;\n this.foreignKeyData = {};\n this.parent = parent;\n }\n ExportHelper.getQuery = function (parent, data) {\n return data.isRemote() ?\n data.generateQuery(true).requiresCount().take(parent.pageSettings.totalRecordsCount) :\n data.generateQuery(true).requiresCount();\n };\n ExportHelper.prototype.getFData = function (value, column) {\n var foreignKeyData = getForeignData(column, {}, value, this.foreignKeyData[column.field])[0];\n return foreignKeyData;\n };\n ExportHelper.prototype.getColumnData = function (gridObj) {\n var _this = this;\n var columnPromise = [];\n var promise;\n var fColumns = gridObj.getForeignKeyColumns();\n if (fColumns.length) {\n fColumns.forEach(function (col) {\n columnPromise.push(col.dataSource.executeQuery(new Query()));\n });\n promise = Promise.all(columnPromise).then(function (e) {\n fColumns.forEach(function (col, index) {\n _this.foreignKeyData[col.field] = e[index].result;\n });\n // tslint:disable-next-line:no-any\n });\n }\n return promise;\n };\n /* tslint:disable:no-any */\n ExportHelper.prototype.getHeaders = function (column, isHideColumnInclude) {\n if (isHideColumnInclude) {\n this.hideColumnInclude = true;\n }\n else {\n this.hideColumnInclude = false;\n }\n var cols = column;\n this.colDepth = this.measureColumnDepth(cols);\n var rows = [];\n var actualColumns = [];\n for (var i = 0; i < this.colDepth; i++) {\n rows[i] = new Row({});\n rows[i].cells = [];\n }\n rows = this.processColumns(rows);\n rows = this.processHeaderCells(rows);\n for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {\n var row = rows_1[_i];\n for (var i = 0; i < row.cells.length; i++) {\n var cell = row.cells[i];\n if (cell.visible === undefined && cell.cellType !== CellType.StackedHeader) {\n row.cells = this.removeCellFromRow(row.cells, i);\n i = i - 1;\n }\n if ((!isHideColumnInclude) && cell.visible !== undefined && (!cell.visible)) {\n row.cells = this.removeCellFromRow(row.cells, i);\n i = i - 1;\n }\n }\n }\n for (var i = 0; i < cols.length; i++) {\n this.generateActualColumns(cols[i], actualColumns);\n }\n return { rows: rows, columns: actualColumns };\n };\n ExportHelper.prototype.getConvertedWidth = function (input) {\n var value = parseFloat(input);\n /* tslint:disable-next-line:max-line-length */\n return (input.indexOf('%') !== -1) ? (this.parent.element.getBoundingClientRect().width * value / 100) : value;\n };\n ExportHelper.prototype.generateActualColumns = function (column, actualColumns) {\n if (column.commands) {\n return;\n }\n if (!column.columns) {\n if (column.visible || this.hideColumnInclude) {\n actualColumns.push(column);\n }\n }\n else {\n if (column.visible || this.hideColumnInclude) {\n var colSpan = this.getCellCount(column, 0);\n if (colSpan !== 0) {\n for (var i = 0; i < column.columns.length; i++) {\n /* tslint:disable-next-line:max-line-length */\n this.generateActualColumns(column.columns[i], actualColumns);\n }\n }\n }\n }\n };\n ExportHelper.prototype.removeCellFromRow = function (cells, cellIndex) {\n var resultCells = [];\n for (var i = 0; i < cellIndex; i++) {\n resultCells.push(cells[i]);\n }\n for (var i = (cellIndex + 1); i < cells.length; i++) {\n resultCells.push(cells[i]);\n }\n return resultCells;\n };\n ExportHelper.prototype.processHeaderCells = function (rows) {\n var columns = this.parent.enableColumnVirtualization ? this.parent.getColumns() : this.parent.columns;\n for (var i = 0; i < columns.length; i++) {\n if (!columns[i].commands) {\n rows = this.appendGridCells(columns[i], rows, 0, i === 0, false, i === (columns.length - 1));\n }\n }\n return rows;\n };\n /* tslint:disable */\n ExportHelper.prototype.appendGridCells = function (cols, gridRows, index, isFirstObj, isFirstColumn, isLastColumn) {\n /* tslint:enable */\n var lastCol = isLastColumn ? 'e-lastcell' : '';\n if (!cols.columns) {\n gridRows[index].cells.push(this.generateCell(cols, CellType.Header, this.colDepth - index, (isFirstObj ? '' : (isFirstColumn ? 'e-firstcell' : '')) + lastCol, index, this.parent.getColumnIndexByUid(cols.uid)));\n }\n else {\n var colSpan = this.getCellCount(cols, 0);\n if (colSpan) {\n gridRows[index].cells.push(new Cell({\n cellType: CellType.StackedHeader, column: cols, colSpan: colSpan\n }));\n }\n var isFirstCell = void 0;\n var isIgnoreFirstCell = void 0;\n for (var i = 0, len = cols.columns.length; i < len; i++) {\n isFirstCell = false;\n if (cols.columns[i].visible && !isIgnoreFirstCell) {\n isFirstCell = true;\n isIgnoreFirstCell = true;\n }\n /* tslint:disable-next-line:max-line-length */\n gridRows = this.appendGridCells(cols.columns[i], gridRows, index + 1, isFirstObj, i === 0, i === (len - 1) && isLastColumn);\n }\n }\n return gridRows;\n };\n ExportHelper.prototype.generateCell = function (gridColumn, cellType, rowSpan, className, rowIndex, columnIndex) {\n var option = {\n 'visible': gridColumn.visible,\n 'isDataCell': false,\n 'isTemplate': !isNullOrUndefined(gridColumn.headerTemplate),\n 'rowID': '',\n 'column': gridColumn,\n 'cellType': cellType,\n 'rowSpan': rowSpan,\n 'className': className,\n 'index': rowIndex,\n 'colIndex': columnIndex\n };\n if (!option.rowSpan || option.rowSpan < 2) {\n delete option.rowSpan;\n }\n return new Cell(option);\n };\n ExportHelper.prototype.processColumns = function (rows) {\n //TODO: generate dummy column for group, detail, stacked row here; ensureColumns here\n var gridObj = this.parent;\n var columnIndexes = this.parent.getColumnIndexesInView();\n for (var i = 0, len = rows.length; i < len; i++) {\n if (gridObj.allowGrouping) {\n for (var j = 0, len_1 = gridObj.groupSettings.columns.length; j < len_1; j++) {\n if (this.parent.enableColumnVirtualization && columnIndexes.indexOf(j) === -1) {\n continue;\n }\n rows[i].cells.push(this.generateCell({}, CellType.HeaderIndent));\n }\n }\n if (gridObj.detailTemplate || gridObj.childGrid) {\n rows[i].cells.push(this.generateCell({}, CellType.DetailHeader));\n }\n }\n return rows;\n };\n /* tslint:disable:no-any */\n ExportHelper.prototype.getCellCount = function (column, count) {\n if (column.columns) {\n for (var i = 0; i < column.columns.length; i++) {\n count = this.getCellCount(column.columns[i], count);\n }\n }\n else {\n if (column.visible || this.hideColumnInclude) {\n count++;\n }\n }\n return count;\n };\n /* tslint:disable:no-any */\n ExportHelper.prototype.measureColumnDepth = function (column) {\n var max = 0;\n for (var i = 0; i < column.length; i++) {\n var depth = this.checkDepth(column[i], 0);\n if (max < depth) {\n max = depth;\n }\n }\n return max + 1;\n };\n /* tslint:disable:no-any */\n ExportHelper.prototype.checkDepth = function (col, index) {\n var max = index;\n var indices = [];\n if (col.columns) {\n index++;\n for (var i = 0; i < col.columns.length; i++) {\n indices[i] = this.checkDepth(col.columns[i], index);\n }\n for (var j = 0; j < indices.length; j++) {\n if (max < indices[j]) {\n max = indices[j];\n }\n }\n index = max;\n }\n return index;\n };\n ;\n return ExportHelper;\n}());\nexport { ExportHelper };\n/**\n * @hidden\n * `ExportValueFormatter` for `PdfExport` & `ExcelExport`\n */\nvar ExportValueFormatter = /** @class */ (function () {\n function ExportValueFormatter(culture) {\n this.valueFormatter = new ValueFormatter(culture);\n this.internationalization = new Internationalization(culture);\n }\n /* tslint:disable-next-line:no-any */\n ExportValueFormatter.prototype.returnFormattedValue = function (args, customFormat) {\n if (!isNullOrUndefined(args.value) && args.value) {\n return this.valueFormatter.getFormatFunction(customFormat)(args.value);\n }\n else {\n return '';\n }\n };\n /* tslint:disable-next-line:no-any */\n ExportValueFormatter.prototype.formatCellValue = function (args) {\n if (args.isForeignKey) {\n args.value = getValue(args.column.foreignKeyValue, getForeignData(args.column, {}, args.value)[0]);\n }\n if (args.column.type === 'number' && args.column.format !== undefined && args.column.format !== '') {\n return args.value ? this.internationalization.getNumberFormat({ format: args.column.format })(args.value) : '';\n }\n else if (args.column.type === 'boolean') {\n return args.value ? 'true' : 'false';\n /* tslint:disable-next-line:max-line-length */\n }\n else if ((args.column.type === 'date' || args.column.type === 'datetime' || args.column.type === 'time') && args.column.format !== undefined) {\n if (typeof args.column.format === 'string') {\n var format = void 0;\n if (args.column.type === 'date') {\n format = { type: 'date', skeleton: args.column.format };\n }\n else if (args.column.type === 'time') {\n format = { type: 'time', skeleton: args.column.format };\n }\n else {\n format = { type: 'dateTime', skeleton: args.column.format };\n }\n return this.returnFormattedValue(args, format);\n }\n else {\n if (args.column.format instanceof Object && args.column.format.type === undefined) {\n return (args.value.toString());\n }\n else {\n /* tslint:disable-next-line:max-line-length */\n var customFormat = void 0;\n if (args.column.type === 'date') {\n /* tslint:disable-next-line:max-line-length */\n customFormat = { type: args.column.format.type, format: args.column.format.format, skeleton: args.column.format.skeleton };\n }\n else if (args.column.type === 'time') {\n customFormat = { type: 'time', format: args.column.format.format, skeleton: args.column.format.skeleton };\n }\n else {\n customFormat = { type: 'dateTime', format: args.column.format.format, skeleton: args.column.format.skeleton };\n }\n return this.returnFormattedValue(args, customFormat);\n }\n }\n }\n else {\n if ((!isNullOrUndefined(args.column.type) && !isNullOrUndefined(args.value)) || !isNullOrUndefined(args.value)) {\n return (args.value).toString();\n }\n else {\n return '';\n }\n }\n };\n return ExportValueFormatter;\n}());\nexport { ExportValueFormatter };\n","import * as events from '../base/constant';\nimport { Workbook } from '@syncfusion/ej2-excel-export';\nimport { isNullOrUndefined, getEnumValue, compile, extend, getValue } from '@syncfusion/ej2-base';\nimport { Data } from '../actions/data';\nimport { ExportHelper, ExportValueFormatter } from './export-helper';\nimport { SummaryModelGenerator, GroupSummaryModelGenerator, CaptionSummaryModelGenerator } from '../services/summary-model-generator';\nimport { CellType } from '../base/enum';\nimport { Query, DataManager } from '@syncfusion/ej2-data';\n/**\n * @hidden\n * `ExcelExport` module is used to handle the Excel export action.\n */\nvar ExcelExport = /** @class */ (function () {\n /**\n * Constructor for the Grid Excel Export module.\n * @hidden\n */\n function ExcelExport(parent) {\n /* tslint:disable-next-line:no-any */\n this.book = {};\n /* tslint:disable-next-line:no-any */\n this.workSheet = [];\n /* tslint:disable-next-line:no-any */\n this.rows = [];\n /* tslint:disable-next-line:no-any */\n this.columns = [];\n /* tslint:disable-next-line:no-any */\n this.styles = [];\n this.rowLength = 1;\n this.expType = 'AppendToSheet';\n this.includeHiddenColumn = false;\n this.isCsvExport = false;\n this.isElementIdChanged = false;\n this.foreignKeyData = {};\n this.parent = parent;\n this.helper = new ExportHelper(parent);\n }\n /**\n * For internal use only - Get the module name.\n */\n ExcelExport.prototype.getModuleName = function () {\n return 'ExcelExport';\n };\n ExcelExport.prototype.init = function (gObj) {\n if (gObj.element !== null && gObj.element.id === '') {\n gObj.element.id = new Date().toISOString();\n this.isElementIdChanged = true;\n }\n this.parent = gObj;\n if (this.parent.isDestroyed) {\n return;\n }\n this.isExporting = undefined;\n this.book = {};\n /* tslint:disable-next-line:no-any */\n this.workSheet = [];\n /* tslint:disable-next-line:no-any */\n this.rows = [];\n /* tslint:disable-next-line:no-any */\n this.columns = [];\n /* tslint:disable-next-line:no-any */\n this.styles = [];\n this.rowLength = 1;\n /* tslint:disable-next-line:no-any */\n this.footer = undefined;\n this.expType = 'AppendToSheet';\n this.includeHiddenColumn = false;\n this.exportValueFormatter = new ExportValueFormatter(gObj.locale);\n };\n /**\n * Export Grid to Excel file.\n * @param {exportProperties} exportProperties - Defines the export properties of the Grid.\n * @param {isMultipleExport} isMultipleExport - Defines is multiple Grid's are exported.\n * @param {workbook} workbook - Defined the Workbook if multiple Grid is exported.\n * @param {isCsv} isCsv - true if export to CSV.\n * @return {Promise}\n */\n /* tslint:disable-next-line:max-line-length */\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.Map = function (grid, exportProperties, isMultipleExport, workbook, isCsv, isBlob) {\n var gObj = grid;\n gObj.trigger(events.beforeExcelExport);\n this.data = new Data(gObj);\n this.isExporting = true;\n this.isBlob = isBlob;\n if (isCsv) {\n this.isCsvExport = isCsv;\n }\n else {\n this.isCsvExport = false;\n }\n return this.processRecords(gObj, exportProperties, isMultipleExport, workbook);\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.processRecords = function (gObj, exportProperties, isMultipleExport, workbook) {\n var _this = this;\n if (!isNullOrUndefined(exportProperties) && !isNullOrUndefined(exportProperties.dataSource) &&\n exportProperties.dataSource instanceof DataManager) {\n /* tslint:disable-next-line:no-any */\n return new Promise(function (resolve, reject) {\n /* tslint:disable-next-line:max-line-length */\n /* tslint:disable-next-line:no-any */\n var dataManager = exportProperties.dataSource.executeQuery(new Query());\n dataManager.then(function (r) {\n _this.init(gObj);\n _this.processInnerRecords(gObj, exportProperties, isMultipleExport, workbook, r);\n resolve(_this.book);\n });\n });\n }\n else {\n /* tslint:disable-next-line:no-any */\n var allPromise = [];\n allPromise.push(this.data.getData({}, ExportHelper.getQuery(gObj, this.data)));\n allPromise.push(this.helper.getColumnData(gObj));\n return Promise.all(allPromise).then(function (e) {\n _this.init(gObj);\n _this.processInnerRecords(gObj, exportProperties, isMultipleExport, workbook, e[0]);\n return _this.book;\n }).catch(function (e) {\n _this.parent.trigger(events.actionFailure, e);\n });\n }\n };\n /* tslint:disable-next-line:max-line-length */\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.processInnerRecords = function (gObj, exportProperties, isMultipleExport, workbook, r) {\n var blankRows = 5;\n if (!isNullOrUndefined(exportProperties) && !isNullOrUndefined(exportProperties.multipleExport)) {\n /* tslint:disable-next-line:max-line-length */\n this.expType = (!isNullOrUndefined(exportProperties.multipleExport.type) ? exportProperties.multipleExport.type : 'AppendToSheet');\n if (!isNullOrUndefined(exportProperties.multipleExport.blankRows)) {\n blankRows = exportProperties.multipleExport.blankRows;\n }\n }\n if (isNullOrUndefined(workbook)) {\n this.workSheet = [];\n this.rows = [];\n this.columns = [];\n this.styles = [];\n }\n else if (this.expType === 'NewSheet') {\n this.workSheet = workbook.worksheets;\n this.rows = [];\n this.columns = [];\n this.styles = workbook.styles;\n }\n else {\n this.workSheet = [];\n this.rows = workbook.worksheets[0].rows;\n this.columns = workbook.worksheets[0].columns;\n this.styles = workbook.styles;\n this.rowLength = (this.rows[this.rows.length - 1].index + blankRows);\n this.rowLength++;\n }\n if (!isNullOrUndefined(exportProperties)) {\n if (!isNullOrUndefined(isMultipleExport)) {\n if (!isNullOrUndefined(exportProperties.header) && (isMultipleExport || this.expType === 'NewSheet')) {\n this.processExcelHeader(JSON.parse(JSON.stringify(exportProperties.header)));\n }\n if (!isNullOrUndefined(exportProperties.footer)) {\n if (this.expType === 'AppendToSheet') {\n if (!isMultipleExport) {\n this.footer = JSON.parse(JSON.stringify(exportProperties.footer));\n }\n }\n else {\n this.footer = JSON.parse(JSON.stringify(exportProperties.footer));\n }\n }\n }\n else {\n if (!isNullOrUndefined(exportProperties.header)) {\n this.processExcelHeader(JSON.parse(JSON.stringify(exportProperties.header)));\n }\n if (!isNullOrUndefined(exportProperties.footer)) {\n this.footer = JSON.parse(JSON.stringify(exportProperties.footer));\n }\n }\n }\n this.includeHiddenColumn = (!isNullOrUndefined(exportProperties) ? exportProperties.includeHiddenColumn : false);\n /* tslint:disable-next-line:max-line-length */\n /* tslint:disable-next-line:no-any */\n var headerRow = this.helper.getHeaders(gObj.columns, this.includeHiddenColumn);\n var groupIndent = 0;\n /* tslint:disable:no-any */\n if (!isNullOrUndefined((r.result).level)) {\n groupIndent += (r.result).level;\n groupIndent += (r.result).childLevels;\n }\n /* tslint:enable:no-any */\n this.processHeaderContent(gObj, headerRow, exportProperties, groupIndent);\n /* tslint:disable-next-line:max-line-length */\n if (!isNullOrUndefined(exportProperties) && !isNullOrUndefined(exportProperties.dataSource) && !(exportProperties.dataSource instanceof DataManager)) {\n this.processRecordContent(gObj, r, headerRow, isMultipleExport, exportProperties.dataSource);\n }\n else if (!isNullOrUndefined(exportProperties) && exportProperties.exportType === 'CurrentPage') {\n this.processRecordContent(gObj, r, headerRow, isMultipleExport, gObj.getCurrentViewRecords());\n }\n else {\n this.processRecordContent(gObj, r, headerRow, isMultipleExport);\n }\n this.isExporting = false;\n gObj.trigger(events.excelExportComplete, this.isBlob ? { promise: this.blobPromise } : {});\n };\n /* tslint:disable-next-line:max-line-length */\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.processRecordContent = function (gObj, returnType, headerRow, isMultipleExport, currentViewRecords) {\n /* tslint:disable-next-line:no-any */\n var column = gObj.columns;\n /* tslint:disable-next-line:no-any */\n var record = undefined;\n if (!isNullOrUndefined(currentViewRecords)) {\n record = currentViewRecords;\n }\n else {\n record = returnType.result;\n }\n if (!isNullOrUndefined(record.level)) {\n this.processGroupedRows(gObj, record, headerRow, record.level);\n }\n else {\n this.processRecordRows(gObj, record, headerRow, 0);\n }\n if (!isNullOrUndefined(returnType.aggregates)) {\n if (!isNullOrUndefined(currentViewRecords)) {\n this.processAggregates(gObj, returnType.result, currentViewRecords);\n }\n else {\n this.processAggregates(gObj, returnType.result);\n }\n }\n //footer template add\n if (!isNullOrUndefined(this.footer)) {\n if ((this.expType === 'AppendToSheet' && !isMultipleExport) || (this.expType === 'NewSheet')) {\n this.processExcelFooter(this.footer);\n }\n }\n /* tslint:disable-next-line:no-any */\n var sheet = {};\n if (this.columns.length > 0) {\n sheet.columns = this.columns;\n }\n sheet.rows = this.rows;\n this.workSheet.push(sheet);\n this.book.worksheets = this.workSheet;\n this.book.styles = this.styles;\n if (!isMultipleExport) {\n if (this.isCsvExport) {\n var book = new Workbook(this.book, 'csv', gObj.locale);\n if (!this.isBlob) {\n book.save('Export.csv');\n }\n else {\n this.blobPromise = book.saveAsBlob('text/csv');\n }\n }\n else {\n var book = new Workbook(this.book, 'xlsx', gObj.locale);\n if (!this.isBlob) {\n book.save('Export.xlsx');\n }\n else {\n this.blobPromise = book.saveAsBlob('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');\n }\n }\n if (this.isElementIdChanged) {\n gObj.element.id = '';\n }\n }\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.processGroupedRows = function (gObj, dataSource, headerRow, level) {\n for (var _i = 0, dataSource_1 = dataSource; _i < dataSource_1.length; _i++) {\n var item = dataSource_1[_i];\n /* tslint:disable-next-line:no-any */\n var cells = [];\n var index = 1;\n /* tslint:disable-next-line:no-any */\n var cell = {};\n cell.index = index + level;\n var col = gObj.getColumnByField(item.field);\n /* tslint:disable-next-line:no-any */\n var args = {\n value: item.key,\n column: col,\n style: undefined,\n isForeignKey: col.isForeignColumn(),\n };\n cell.value = this.parent.getColumnByField(item.field).headerText +\n ': ' + this.exportValueFormatter.formatCellValue(args) + ' - ';\n if (item.count > 1) {\n cell.value += item.count + ' items';\n }\n else {\n cell.value += item.count + ' item';\n }\n cell.style = this.getCaptionThemeStyle(this.theme);\n var captionModelGen = new CaptionSummaryModelGenerator(gObj);\n var groupCaptionSummaryRows = captionModelGen.generateRows(item);\n this.fillAggregates(gObj, groupCaptionSummaryRows, dataSource.level + dataSource.childLevels, this.rowLength);\n cells.push(cell);\n if (this.rows[this.rows.length - 1].cells.length > 0) {\n var lIndex = dataSource.level + dataSource.childLevels + groupCaptionSummaryRows[0].cells.length;\n var hIndex = 0;\n for (var _a = 0, _b = this.rows[this.rows.length - 1].cells; _a < _b.length; _a++) {\n var tCell = _b[_a];\n if (tCell.index < lIndex) {\n lIndex = tCell.index;\n }\n if (tCell.index > hIndex) {\n hIndex = tCell.index;\n }\n tCell.style = this.getCaptionThemeStyle(this.theme);\n if (cells[cells.length - 1].index !== tCell.index) {\n cells.push(tCell);\n }\n }\n if ((lIndex - cell.index) > 1) {\n cell.colSpan = lIndex - cell.index;\n }\n while (hIndex < (headerRow.columns.length + level)) {\n /* tslint:disable-next-line:no-any */\n var sCell = {};\n if (dataSource.childLevels === 0) {\n sCell.index = (hIndex);\n }\n else {\n sCell.index = (hIndex + 1);\n }\n sCell.style = this.getCaptionThemeStyle(this.theme);\n cells.push(sCell);\n hIndex++;\n }\n }\n else {\n var span = 0;\n //Calculation for column span when group caption dont have aggregates\n for (var _c = 0, _d = headerRow.columns; _c < _d.length; _c++) {\n var col_1 = _d[_c];\n if (col_1.visible) {\n span++;\n }\n }\n cell.colSpan = (dataSource.childLevels + span);\n }\n this.rows[this.rows.length - 1].cells = cells;\n this.rowLength++;\n if (!isNullOrUndefined(dataSource.childLevels) && dataSource.childLevels > 0) {\n this.processGroupedRows(gObj, item.items, headerRow, item.items.level);\n }\n else {\n this.processRecordRows(gObj, item.items, headerRow, (level));\n this.processAggregates(gObj, item, undefined, (level), true);\n }\n }\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.processRecordRows = function (gObj, record, headerRow, level) {\n var rLen = Object.keys(record).length;\n var index = 1;\n /* tslint:disable-next-line:no-any */\n var cells = [];\n for (var r = 0; r < rLen; r++) {\n cells = [];\n index = 1;\n for (var c = 0, len = headerRow.columns.length; c < len; c++) {\n /* tslint:disable-next-line:no-any */\n var value = !isNullOrUndefined(headerRow.columns[c].field) ? getValue(headerRow.columns[c].field, record[r]) : '';\n var column = headerRow.columns[c];\n var foreignKeyData = void 0;\n // tslint:disable-next-line:max-line-length\n if (column.isForeignColumn && column.isForeignColumn()) {\n foreignKeyData = this.helper.getFData(value, column);\n value = getValue(column.foreignKeyValue, foreignKeyData);\n }\n if (!isNullOrUndefined(value)) {\n /* tslint:disable-next-line:no-any */\n var excelCellArgs = { data: record[r], column: headerRow.columns[c], foreignKeyData: foreignKeyData };\n gObj.trigger(events.excelQueryCellInfo, extend(excelCellArgs, {\n column: headerRow.columns[c], data: record[r],\n value: value, style: undefined, colSpan: 1\n }));\n /* tslint:disable-next-line:no-any */\n var cell = {};\n cell.index = index + level;\n cell.value = excelCellArgs.value;\n if (excelCellArgs.colSpan > 1) {\n cell.colSpan = excelCellArgs.colSpan;\n }\n if (!isNullOrUndefined(excelCellArgs.style)) {\n var styleIndex = this.getColumnStyle(gObj, index + level);\n cell.style = this.mergeOptions(this.styles[styleIndex], excelCellArgs.style);\n }\n else {\n cell.style = { name: gObj.element.id + 'column' + (index + level) };\n }\n cells.push(cell);\n }\n index++;\n }\n this.rows.push({ index: this.rowLength++, cells: cells });\n }\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.processAggregates = function (gObj, rec, currentViewRecords, indent, byGroup) {\n var summaryModel = new SummaryModelGenerator(gObj);\n /* tslint:disable-next-line:no-any */\n var data = undefined;\n if (!isNullOrUndefined(currentViewRecords)) {\n data = currentViewRecords;\n }\n else {\n data = rec;\n }\n if (indent === undefined) {\n indent = 0;\n }\n if (gObj.groupSettings.columns.length > 0 && byGroup) {\n var groupSummaryModel = new GroupSummaryModelGenerator(gObj);\n var groupSummaryRows = groupSummaryModel.generateRows(data, { level: data.level });\n if (groupSummaryRows.length > 0) {\n this.fillAggregates(gObj, groupSummaryRows, indent);\n }\n }\n else {\n indent = gObj.groupSettings.columns.length > 0 && !byGroup ? gObj.groupSettings.columns.length : indent;\n var sRows = summaryModel.generateRows(data, rec.aggregates);\n if (sRows.length > 0 && !byGroup) {\n this.fillAggregates(gObj, sRows, indent);\n }\n }\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.fillAggregates = function (gObj, cells, indent, customIndex) {\n for (var _i = 0, cells_1 = cells; _i < cells_1.length; _i++) {\n var row = cells_1[_i];\n /* tslint:disable-next-line:no-any */\n var cells_2 = [];\n var index = 0;\n for (var _a = 0, _b = row.cells; _a < _b.length; _a++) {\n var cell = _b[_a];\n /* tslint:disable-next-line:no-any */\n var eCell = {};\n if ((cell.visible || this.includeHiddenColumn)) {\n index++;\n if (cell.isDataCell) {\n eCell.index = index + indent;\n if (!isNullOrUndefined(cell.column.footerTemplate)) {\n eCell.value = this.getAggreateValue(CellType.Summary, cell.column.footerTemplate, cell, row);\n }\n else if (!isNullOrUndefined(cell.column.groupFooterTemplate)) {\n eCell.value = this.getAggreateValue(CellType.GroupSummary, cell.column.groupFooterTemplate, cell, row);\n }\n else if (!isNullOrUndefined(cell.column.groupCaptionTemplate)) {\n eCell.value = this.getAggreateValue(CellType.CaptionSummary, cell.column.groupCaptionTemplate, cell, row);\n }\n else {\n for (var _c = 0, _d = Object.keys(row.data[cell.column.field]); _c < _d.length; _c++) {\n var key = _d[_c];\n if (key === cell.column.type) {\n if (!isNullOrUndefined(row.data[cell.column.field].Sum)) {\n eCell.value = row.data[cell.column.field].Sum;\n }\n else if (!isNullOrUndefined(row.data[cell.column.field].Average)) {\n eCell.value = row.data[cell.column.field].Average;\n }\n else if (!isNullOrUndefined(row.data[cell.column.field].Max)) {\n eCell.value = row.data[cell.column.field].Max;\n }\n else if (!isNullOrUndefined(row.data[cell.column.field].Min)) {\n eCell.value = row.data[cell.column.field].Min;\n }\n else if (!isNullOrUndefined(row.data[cell.column.field].Count)) {\n eCell.value = row.data[cell.column.field].Count;\n }\n else if (!isNullOrUndefined(row.data[cell.column.field].TrueCount)) {\n eCell.value = row.data[cell.column.field].TrueCount;\n }\n else if (!isNullOrUndefined(row.data[cell.column.field].FalseCount)) {\n eCell.value = row.data[cell.column.field].FalseCount;\n }\n else if (!isNullOrUndefined(row.data[cell.column.field].Custom)) {\n eCell.value = row.data[cell.column.field].Custom;\n }\n }\n }\n }\n eCell.style = this.getCaptionThemeStyle(this.theme); //{ name: gObj.element.id + 'column' + index };\n if (cell.attributes.style.textAlign) {\n eCell.style.hAlign = cell.attributes.style.textAlign;\n }\n cells_2.push(eCell);\n }\n else {\n if (customIndex === undefined) {\n eCell.index = index + indent;\n eCell.style = this.getCaptionThemeStyle(this.theme); //{ name: gObj.element.id + 'column' + index };\n cells_2.push(eCell);\n }\n }\n }\n }\n if (!isNullOrUndefined(customIndex)) {\n this.rows.push({ index: customIndex, cells: cells_2 });\n }\n else {\n this.rows.push({ index: this.rowLength++, cells: cells_2 });\n }\n }\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.getAggreateValue = function (cellType, template, cell, row) {\n var templateFn = {};\n templateFn[getEnumValue(CellType, cell.cellType)] = compile(template);\n /* tslint:disable-next-line:max-line-length */\n var txt = (templateFn[getEnumValue(CellType, cell.cellType)](row.data[cell.column.field ? cell.column.field : cell.column.columnName]));\n return txt[0].wholeText;\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.mergeOptions = function (JSON1, JSON2) {\n /* tslint:disable-next-line:no-any */\n var result = {};\n /* tslint:disable-next-line:no-any */\n var attrname = Object.keys(JSON1);\n for (var index = 0; index < attrname.length; index++) {\n if (attrname[index] !== 'name') {\n result[attrname[index]] = JSON1[attrname[index]];\n }\n }\n attrname = Object.keys(JSON2);\n for (var index = 0; index < attrname.length; index++) {\n if (attrname[index] !== 'name') {\n result[attrname[index]] = JSON2[attrname[index]];\n }\n }\n return result;\n };\n ExcelExport.prototype.getColumnStyle = function (gObj, columnIndex) {\n var index = 0;\n for (var _i = 0, _a = this.styles; _i < _a.length; _i++) {\n var style = _a[_i];\n if (style.name === gObj.element.id + 'column' + columnIndex) {\n return index;\n }\n index++;\n }\n return undefined;\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.processHeaderContent = function (gObj, headerRow, exportProperties, indent) {\n /* tslint:disable-next-line:no-any */\n var column = gObj.columns;\n var rowIndex = 1;\n /* tslint:disable-next-line:no-any */\n var returnValue = headerRow;\n /* tslint:enable:no-any */\n var gridRows = returnValue.rows;\n // Column collection with respect to the records in the grid\n var gridColumns = returnValue.columns;\n /* tslint:disable-next-line:no-any */\n var spannedCells = [];\n if (indent > 0) {\n var index = 0;\n while (index !== indent) {\n this.columns.push({ index: index + 1, width: 30 });\n index++;\n }\n }\n for (var row = 0; row < gridRows.length; row++) {\n var currentCellIndex = 1 + indent;\n /* tslint:disable-next-line:no-any */\n var cells = [];\n for (var column_1 = 0; column_1 < gridRows[row].cells.length; column_1++) {\n /* tslint:disable-next-line:no-any */\n var style = {};\n /* tslint:disable-next-line:no-any */\n var cell = {};\n /* tslint:disable-next-line:no-any */\n var gridCell = gridRows[row].cells[column_1];\n /* tslint:disable-next-line:no-any */\n var result = { contains: true, index: 1 };\n while (result.contains) {\n result = this.getIndex(spannedCells, rowIndex, currentCellIndex);\n currentCellIndex = result.index;\n if (!result.contains) {\n cell.index = result.index;\n break;\n }\n }\n if (!isNullOrUndefined(gridCell.rowSpan) && gridCell.rowSpan !== 1) {\n cell.rowSpan = gridCell.rowSpan;\n for (var i = rowIndex; i < gridCell.rowSpan + rowIndex; i++) {\n /* tslint:disable-next-line:no-any */\n var spannedCell = { rowIndex: 0, columnIndex: 0 };\n spannedCell.rowIndex = i;\n spannedCell.columnIndex = currentCellIndex;\n spannedCells.push(spannedCell);\n }\n }\n if (!isNullOrUndefined(gridCell.colSpan) && gridCell.colSpan !== 1) {\n cell.colSpan = gridCell.colSpan;\n currentCellIndex = currentCellIndex + cell.colSpan - 1;\n }\n cell.value = gridCell.column.headerText;\n if (!isNullOrUndefined(exportProperties) && !isNullOrUndefined(exportProperties.theme)) {\n this.theme = exportProperties.theme;\n }\n style = this.getHeaderThemeStyle(this.theme);\n if (!isNullOrUndefined(gridCell.column.textAlign)) {\n style.hAlign = gridCell.column.textAlign;\n }\n if (!isNullOrUndefined(gridCell.column.headerTextAlign)) {\n style.hAlign = gridCell.column.headerTextAlign;\n }\n /* tslint:disable-next-line:no-any */\n var excelHeaderCellArgs = { cell: cell, gridCell: gridCell, setStyle: style };\n gObj.trigger(events.excelHeaderQueryCellInfo, extend(excelHeaderCellArgs, {\n cell: cell, setStyle: style\n }));\n cell.style = style;\n cells.push(cell);\n currentCellIndex++;\n }\n this.rows.push({ index: this.rowLength++, cells: cells });\n }\n for (var col = 0; col < gridColumns.length; col++) {\n this.parseStyles(gObj, gridColumns[col], this.getRecordThemeStyle(this.theme), indent + col + 1);\n }\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.getHeaderThemeStyle = function (theme) {\n /* tslint:disable-next-line:no-any */\n var style = {};\n style.fontSize = 12;\n style.borders = { color: '#E0E0E0' };\n if (!isNullOrUndefined(theme) && !isNullOrUndefined(theme.header)) {\n style = this.updateThemeStyle(theme.header, style);\n }\n return style;\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.updateThemeStyle = function (themestyle, style) {\n if (!isNullOrUndefined(themestyle.fontColor)) {\n style.fontColor = themestyle.fontColor;\n }\n if (!isNullOrUndefined(themestyle.fontName)) {\n style.fontName = themestyle.fontName;\n }\n if (!isNullOrUndefined(themestyle.fontSize)) {\n style.fontSize = themestyle.fontSize;\n }\n if (!isNullOrUndefined(themestyle.borders)) {\n if (!isNullOrUndefined(themestyle.borders.color)) {\n style.borders.color = themestyle.borders.color;\n }\n if (!isNullOrUndefined(themestyle.borders.lineStyle)) {\n style.borders.lineStyle = themestyle.borders.lineStyle;\n }\n }\n if (themestyle.bold !== false) {\n style.bold = themestyle.bold;\n }\n return style;\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.getCaptionThemeStyle = function (theme) {\n /* tslint:disable-next-line:no-any */\n var style = {};\n style.fontSize = 13;\n style.backColor = '#F6F6F6';\n if (!isNullOrUndefined(theme) && !isNullOrUndefined(theme.caption)) {\n style = this.updateThemeStyle(theme.caption, style);\n }\n return style;\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.getRecordThemeStyle = function (theme) {\n /* tslint:disable-next-line:no-any */\n var style = {};\n style.fontSize = 13;\n style.borders = { color: '#E0E0E0' };\n if (!isNullOrUndefined(theme) && !isNullOrUndefined(theme.record)) {\n style = this.updateThemeStyle(theme.record, style);\n }\n return style;\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.processExcelHeader = function (header) {\n if (!isNullOrUndefined(header.rows) && (this.expType === 'NewSheet' || this.rowLength === 1)) {\n var noRows = void 0;\n if (header.headerRows === undefined) {\n this.rowLength = header.rows.length;\n }\n else {\n this.rowLength = header.headerRows;\n }\n if (this.rowLength < header.rows.length) {\n noRows = this.rowLength;\n }\n else {\n noRows = header.rows.length;\n }\n this.rowLength++;\n for (var row = 0; row < noRows; row++) {\n /* tslint:disable-next-line:no-any */\n var json = header.rows[row];\n //Row index\n if (!(json.index !== null && !isNullOrUndefined(json.index))) {\n json.index = (row + 1);\n }\n this.updatedCellIndex(json);\n }\n }\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.updatedCellIndex = function (json) {\n var cellsLength = json.cells.length;\n for (var cellId = 0; cellId < cellsLength; cellId++) {\n /* tslint:disable-next-line:no-any */\n var jsonCell = json.cells[cellId];\n //cell index\n if (!(jsonCell.index !== null && !isNullOrUndefined(jsonCell.index))) {\n jsonCell.index = (cellId + 1);\n }\n }\n this.rows.push(json);\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.processExcelFooter = function (footer) {\n if (!isNullOrUndefined(footer.rows)) {\n var noRows = void 0;\n if (footer.footerRows === undefined) {\n this.rowLength += footer.rows.length;\n }\n else {\n if (footer.footerRows > footer.rows.length) {\n this.rowLength += (footer.footerRows - footer.rows.length);\n noRows = footer.rows.length;\n }\n else {\n noRows = footer.footerRows;\n }\n }\n for (var row = 0; row < noRows; row++) {\n /* tslint:disable-next-line:no-any */\n var json = footer.rows[row];\n //Row index\n if (json.index === null || json.index === undefined) {\n json.index = this.rowLength++;\n }\n else {\n json.index += this.rowLength;\n }\n this.updatedCellIndex(json);\n }\n }\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.getIndex = function (spannedCells, rowIndex, columnIndex) {\n for (var _i = 0, spannedCells_1 = spannedCells; _i < spannedCells_1.length; _i++) {\n var spannedCell = spannedCells_1[_i];\n if ((spannedCell.rowIndex === rowIndex) && (spannedCell.columnIndex === columnIndex)) {\n columnIndex = columnIndex + 1;\n return { contains: true, index: columnIndex };\n }\n }\n return { contains: false, index: columnIndex };\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.parseStyles = function (gObj, col, style, index) {\n if (!isNullOrUndefined(col.format)) {\n if (!isNullOrUndefined(col.format.skeleton)) {\n style.numberFormat = col.format.skeleton;\n if (!isNullOrUndefined(col.format.type)) {\n style.type = col.format.type;\n }\n }\n else {\n style.numberFormat = col.format;\n style.type = col.type;\n }\n }\n if (!isNullOrUndefined(col.textAlign)) {\n style.hAlign = col.textAlign;\n }\n if (Object.keys(style).length > 0) {\n style.name = gObj.element.id + 'column' + index;\n this.styles.push(style);\n }\n if (!isNullOrUndefined(col.width)) {\n /* tslint:disable-next-line:max-line-length */\n this.columns.push({ index: index, width: typeof col.width === 'number' ? col.width : this.helper.getConvertedWidth(col.width) });\n }\n };\n /**\n * To destroy the excel export\n * @return {void}\n * @hidden\n */\n ExcelExport.prototype.destroy = function () {\n //destroy for exporting\n };\n return ExcelExport;\n}());\nexport { ExcelExport };\n","import * as events from '../base/constant';\nimport { PdfDocument, PdfGrid, PdfBorders, PdfPen } from '@syncfusion/ej2-pdf-export';\nimport { PdfStandardFont, PdfFontFamily, PdfFontStyle, PdfBitmap } from '@syncfusion/ej2-pdf-export';\nimport { PdfStringFormat, PdfTextAlignment, PdfColor, PdfSolidBrush } from '@syncfusion/ej2-pdf-export';\nimport { PdfVerticalAlignment, RectangleF, PdfPageTemplateElement } from '@syncfusion/ej2-pdf-export';\nimport { PointF, PdfPageNumberField, PdfCompositeField } from '@syncfusion/ej2-pdf-export';\nimport { PdfPageCountField, SizeF, PdfPageSettings, PdfPageOrientation } from '@syncfusion/ej2-pdf-export';\nimport { ExportHelper, ExportValueFormatter } from './export-helper';\nimport { Data } from '../actions/data';\nimport { SummaryModelGenerator, GroupSummaryModelGenerator, CaptionSummaryModelGenerator } from '../services/summary-model-generator';\nimport { compile, getEnumValue, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { getValue } from '@syncfusion/ej2-base';\n/**\n * `PDF Export` module is used to handle the exportToPDF action.\n * @hidden\n */\nvar PdfExport = /** @class */ (function () {\n /**\n * Constructor for the Grid PDF Export module\n * @hidden\n */\n function PdfExport(parent) {\n this.hideColumnInclude = false;\n this.currentViewData = false;\n this.customDataSource = false;\n this.isGrouping = false;\n this.parent = parent;\n this.helper = new ExportHelper(parent);\n }\n /**\n * For internal use only - Get the module name.\n */\n PdfExport.prototype.getModuleName = function () {\n return 'PdfExport';\n };\n PdfExport.prototype.init = function (parent) {\n this.exportValueFormatter = new ExportValueFormatter(parent.locale);\n this.pdfDocument = undefined;\n this.hideColumnInclude = false;\n this.currentViewData = false;\n this.parent = parent;\n var gObj = parent;\n this.isGrouping = false;\n this.isExporting = true;\n gObj.trigger(events.beforePdfExport);\n };\n /**\n * Used to map the input data\n * @return {void}\n */\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.Map = function (parent, pdfExportProperties, isMultipleExport, pdfDoc, isBlob) {\n var _this = this;\n this.data = new Data(this.parent);\n this.isBlob = isBlob;\n /* tslint:disable-next-line:max-line-length */\n if (!isNullOrUndefined(pdfExportProperties) && !isNullOrUndefined(pdfExportProperties.dataSource) && pdfExportProperties.dataSource instanceof DataManager) {\n return new Promise(function (resolve, reject) {\n /* tslint:disable-next-line:no-any */ /* tslint:disable-next-line:max-line-length */\n new DataManager({ url: pdfExportProperties.dataSource.dataSource.url, adaptor: pdfExportProperties.dataSource.adaptor }).executeQuery(new Query()).then(function (returnType) {\n _this.init(parent);\n if (!isNullOrUndefined(pdfDoc)) {\n _this.pdfDocument = pdfDoc;\n }\n else {\n _this.pdfDocument = new PdfDocument();\n }\n _this.processExport(parent, returnType, pdfExportProperties, isMultipleExport);\n _this.isExporting = false;\n parent.trigger(events.pdfExportComplete, _this.isBlob ? { promise: _this.blobPromise } : {});\n resolve(_this.pdfDocument);\n });\n });\n }\n else {\n var allPromise = [];\n allPromise.push(this.data.getData({}, ExportHelper.getQuery(parent, this.data)));\n allPromise.push(this.helper.getColumnData(parent));\n return Promise.all(allPromise).then(function (e) {\n _this.init(parent);\n if (!isNullOrUndefined(pdfDoc)) {\n _this.pdfDocument = pdfDoc;\n }\n else {\n _this.pdfDocument = new PdfDocument();\n }\n _this.processExport(parent, e[0], pdfExportProperties, isMultipleExport);\n _this.isExporting = false;\n parent.trigger(events.pdfExportComplete, _this.isBlob ? { promise: _this.blobPromise } : {});\n return _this.pdfDocument;\n // tslint:disable-next-line:no-any\n });\n }\n };\n /* tslint:disable:no-any */\n PdfExport.prototype.processExport = function (gObj, returnType, pdfExportProperties, isMultipleExport) {\n if (!isNullOrUndefined(pdfExportProperties)) {\n this.gridTheme = pdfExportProperties.theme;\n }\n var columns = gObj.columns;\n var dataSource = returnType.result;\n /* tslint:enable:no-any */\n var section = this.pdfDocument.sections.add();\n /* tslint:disable-next-line:no-any */\n var result = this.processExportProperties(pdfExportProperties, dataSource, section);\n dataSource = result.dataSource;\n /* tslint:disable-next-line:no-any */\n if (!isNullOrUndefined(dataSource.GroupGuid)) {\n this.isGrouping = true;\n }\n section = result.section;\n var pdfPage = section.pages.add();\n // create a grid\n var pdfGrid = new PdfGrid();\n // get header theme style\n /* tslint:disable-next-line:no-any */\n var headerThemeStyle = this.getHeaderThemeStyle();\n var border = headerThemeStyle.border;\n var headerFont = headerThemeStyle.font;\n var headerBrush = headerThemeStyle.brush;\n /* tslint:disable-next-line:no-any */\n var returnValue = this.helper.getHeaders(columns, this.hideColumnInclude);\n var rows = returnValue.rows;\n // Column collection with respect to the records in the grid\n var gridColumns = returnValue.columns;\n // process grid header content\n pdfGrid = this.processGridHeaders(dataSource.childLevels, pdfGrid, rows, gridColumns, border, headerFont, headerBrush);\n // set alignment, width and type of the values of the column\n this.setColumnProperties(gridColumns, pdfGrid);\n /* tslint:disable-next-line:no-any */\n var captionThemeStyle = this.getSummaryCaptionThemeStyle();\n if (!isNullOrUndefined(dataSource) && dataSource.length > 0) {\n if (this.isGrouping) {\n /* tslint:disable-next-line:max-line-length */\n this.processGroupedRecords(pdfGrid, dataSource, gridColumns, gObj, border, 0, captionThemeStyle.font, captionThemeStyle.brush, captionThemeStyle.backgroundBrush, returnType);\n }\n else {\n this.processRecord(border, gridColumns, gObj, dataSource, pdfGrid);\n }\n if (!isNullOrUndefined(returnType.aggregates)) {\n var summaryModel = new SummaryModelGenerator(gObj);\n var sRows = void 0;\n if (this.customDataSource) {\n sRows = summaryModel.generateRows(dataSource, returnType.aggregates);\n }\n else if (this.currentViewData) {\n sRows = summaryModel.generateRows(this.parent.getCurrentViewRecords(), returnType.aggregates);\n }\n else if (this.isGrouping) {\n sRows = summaryModel.generateRows(dataSource.records, returnType.aggregates);\n }\n else {\n sRows = summaryModel.generateRows(returnType.result, returnType.aggregates);\n }\n /* tslint:disable-next-line:max-line-length */\n this.processAggregates(sRows, pdfGrid, border, captionThemeStyle.font, captionThemeStyle.brush, captionThemeStyle.backgroundBrush, false);\n }\n }\n else {\n var row = pdfGrid.rows.addRow();\n row.style.setBorder(border);\n }\n // draw the grid\n pdfGrid.draw(pdfPage, 20, 20);\n if (!isMultipleExport) {\n // save the PDF\n if (!this.isBlob) {\n this.pdfDocument.save('Export.pdf');\n }\n else {\n this.blobPromise = this.pdfDocument.save();\n }\n this.pdfDocument.destroy();\n }\n };\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.getSummaryCaptionThemeStyle = function () {\n if (!isNullOrUndefined(this.gridTheme) && !isNullOrUndefined(this.gridTheme.caption) && this.gridTheme.caption !== null) {\n var fontSize = !isNullOrUndefined(this.gridTheme.caption.fontSize) ? this.gridTheme.caption.fontSize : 9.75;\n var pdfColor = new PdfColor();\n if (!isNullOrUndefined(this.gridTheme.caption.fontColor)) {\n var penBrushColor = this.hexToRgb(this.gridTheme.caption.fontColor);\n pdfColor = new PdfColor(penBrushColor.r, penBrushColor.g, penBrushColor.b);\n }\n /* tslint:disable-next-line:max-line-length */\n return { font: new PdfStandardFont(PdfFontFamily.Helvetica, 10.5), brush: new PdfSolidBrush(new PdfColor(pdfColor)), backgroundBrush: new PdfSolidBrush(new PdfColor(246, 246, 246)) };\n }\n else {\n //Material theme\n /* tslint:disable-next-line:max-line-length */\n return { font: new PdfStandardFont(PdfFontFamily.Helvetica, 9.75), brush: new PdfSolidBrush(new PdfColor(0, 0, 0)), backgroundBrush: new PdfSolidBrush(new PdfColor(246, 246, 246)) };\n }\n };\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.getHeaderThemeStyle = function () {\n var border = new PdfBorders();\n if (!isNullOrUndefined(this.gridTheme) && !isNullOrUndefined(this.gridTheme.header)) {\n if (!isNullOrUndefined(this.gridTheme.header.borders) && !isNullOrUndefined(this.gridTheme.header.borders.color)) {\n var borderColor = this.hexToRgb(this.gridTheme.header.borders.color);\n border.all = new PdfPen(new PdfColor(borderColor.r, borderColor.g, borderColor.b));\n }\n var fontSize = !isNullOrUndefined(this.gridTheme.header.fontSize) ? this.gridTheme.header.fontSize : 10.5;\n var pdfColor = new PdfColor();\n if (!isNullOrUndefined(this.gridTheme.header.fontColor)) {\n var penBrushColor = this.hexToRgb(this.gridTheme.header.fontColor);\n pdfColor = new PdfColor(penBrushColor.r, penBrushColor.g, penBrushColor.b);\n }\n /* tslint:disable-next-line:max-line-length */\n return { border: border, font: new PdfStandardFont(PdfFontFamily.Helvetica, fontSize), brush: new PdfSolidBrush(pdfColor) };\n }\n else {\n //Material theme\n border.all = new PdfPen(new PdfColor(234, 234, 234));\n /* tslint:disable-next-line:max-line-length */\n return { border: border, font: new PdfStandardFont(PdfFontFamily.Helvetica, 10.5), brush: new PdfSolidBrush(new PdfColor(102, 102, 102)) };\n }\n };\n /* tslint:disable-next-line:max-line-length */ /* tslint:disable-next-line:no-any */\n PdfExport.prototype.processGroupedRecords = function (pdfGrid, dataSource, gridColumns, gObj, border, level, font, brush, backgroundBrush, returnType) {\n var groupIndex = level;\n for (var _i = 0, dataSource_1 = dataSource; _i < dataSource_1.length; _i++) {\n var dataSourceItems = dataSource_1[_i];\n var row = pdfGrid.rows.addRow();\n var col = gObj.getColumnByField(dataSourceItems.field);\n /* tslint:disable-next-line:no-any */\n var args = {\n value: dataSourceItems.key,\n column: col,\n style: undefined,\n isForeignKey: col.isForeignColumn(),\n };\n /* tslint:disable-next-line:max-line-length */\n var value = dataSourceItems.field + ': ' + this.exportValueFormatter.formatCellValue(args) + ' - ' + dataSourceItems.count + (dataSource.count > 1 ? ' items' : ' item');\n row.cells.getCell(groupIndex).value = value;\n row.cells.getCell(groupIndex + 1).style.stringFormat = new PdfStringFormat(PdfTextAlignment.Left);\n row.style.setBorder(border);\n row.style.setFont(font);\n row.style.setTextBrush(brush);\n row.style.setBackgroundBrush(backgroundBrush);\n var sRows = void 0;\n var captionSummaryModel = new CaptionSummaryModelGenerator(gObj);\n if (!isNullOrUndefined(dataSourceItems.items.records)) {\n sRows = captionSummaryModel.generateRows(dataSourceItems.items.records, dataSourceItems);\n }\n else {\n sRows = captionSummaryModel.generateRows(dataSourceItems.items, dataSourceItems);\n }\n if (!isNullOrUndefined(sRows) && sRows.length === 0) {\n row.cells.getCell(groupIndex + 1).columnSpan = pdfGrid.columns.count - (groupIndex + 1);\n }\n if (!isNullOrUndefined(dataSource.childLevels) && dataSource.childLevels > 0) {\n this.processAggregates(sRows, pdfGrid, border, font, brush, backgroundBrush, true, row, groupIndex);\n /* tslint:disable-next-line:max-line-length */\n this.processGroupedRecords(pdfGrid, dataSourceItems.items, gridColumns, gObj, border, (groupIndex + 1), font, brush, backgroundBrush, returnType);\n var groupSummaryModel = new GroupSummaryModelGenerator(gObj);\n sRows = groupSummaryModel.generateRows(dataSourceItems.items.records, dataSourceItems);\n this.processAggregates(sRows, pdfGrid, border, font, brush, backgroundBrush, false);\n }\n else {\n this.processAggregates(sRows, pdfGrid, border, font, brush, backgroundBrush, true, row, groupIndex);\n this.processRecord(border, gridColumns, gObj, dataSourceItems.items, pdfGrid, (groupIndex + 1));\n var groupSummaryModel = new GroupSummaryModelGenerator(gObj);\n sRows = groupSummaryModel.generateRows(dataSourceItems.items, dataSourceItems);\n this.processAggregates(sRows, pdfGrid, border, font, brush, backgroundBrush, false);\n }\n }\n };\n /* tslint:disable-next-line:max-line-length */\n PdfExport.prototype.processGridHeaders = function (childLevels, pdfGrid, rows, gridColumns, border, headerFont, headerBrush) {\n var columnCount = gridColumns.length;\n var gObj = this.parent;\n if (this.isGrouping) {\n columnCount += (childLevels + 1);\n }\n // add columns\n pdfGrid.columns.add(columnCount);\n if (this.isGrouping) {\n for (var i = 0; i < (childLevels + 1); i++) {\n pdfGrid.columns.getColumn(i).width = 20;\n }\n }\n // add header\n pdfGrid.headers.add(rows.length);\n // set cell values of each rows in the header\n for (var i = 0; i < rows.length; i++) {\n var gridHeader = pdfGrid.headers.getHeader(i);\n gridHeader.style.setBorder(border);\n gridHeader.style.setFont(headerFont);\n gridHeader.style.setTextBrush(headerBrush);\n var cellIndex = this.isGrouping ? (childLevels + 1) : 0;\n if (rows[i].cells.length === 0) {\n for (var j = 0; j < gridHeader.cells.count; j++) {\n var cell = gridHeader.cells.getCell(j);\n cell.value = '';\n }\n }\n else {\n for (var j = 0; j < cellIndex; j++) {\n var cell = gridHeader.cells.getCell(j);\n cell.value = '';\n }\n for (var j = 0; j < rows[i].cells.length; j++) {\n var cell = gridHeader.cells.getCell(cellIndex);\n /* tslint:disable-next-line:no-any */\n var args = {\n cell: cell,\n gridCell: rows[i].cells[j],\n style: cell.style\n };\n /* tslint:enable:no-any */\n gObj.trigger(events.pdfHeaderQueryCellInfo, args);\n if (cell.value !== null) {\n cell.value = rows[i].cells[j].column.headerText;\n if (!isNullOrUndefined(rows[i].cells[j].column.headerTextAlign)) {\n cell.style.stringFormat = this.getHorizontalAlignment(rows[i].cells[j].column.headerTextAlign);\n }\n if (!isNullOrUndefined(rows[i].cells[j].rowSpan)) {\n cell.rowSpan = rows[i].cells[j].rowSpan;\n /* tslint:disable-next-line:max-line-length */\n cell.style.stringFormat = this.getVerticalAlignment('Bottom', cell.style.stringFormat, rows[i].cells[j].column.textAlign);\n for (var k = 1; k < rows[i].cells[j].rowSpan; k++) {\n pdfGrid.headers.getHeader(i + k).cells.getCell(cellIndex).value = null;\n }\n }\n if (!isNullOrUndefined(rows[i].cells[j].colSpan)) {\n cell.columnSpan = rows[i].cells[j].colSpan;\n }\n cellIndex += cell.columnSpan;\n }\n else {\n cell.value = '';\n cellIndex += cell.columnSpan;\n j = j - 1;\n }\n }\n }\n }\n if (pdfGrid.columns.count >= 6) {\n pdfGrid.style.allowHorizontalOverflow = true;\n }\n return pdfGrid;\n };\n /* tslint:disable-next-line:no-any */ /* tslint:disable-next-line:max-line-length */\n PdfExport.prototype.processExportProperties = function (pdfExportProperties, dataSource, section) {\n if (!isNullOrUndefined(pdfExportProperties)) {\n if (!isNullOrUndefined(pdfExportProperties.theme)) {\n this.gridTheme = pdfExportProperties.theme;\n }\n if (!isNullOrUndefined(pdfExportProperties.pageOrientation) || !isNullOrUndefined(pdfExportProperties.pageSize)) {\n var pdfPageSettings = new PdfPageSettings();\n /* tslint:disable-next-line:max-line-length */\n pdfPageSettings.orientation = (pdfExportProperties.pageOrientation === 'Landscape') ? PdfPageOrientation.Landscape : PdfPageOrientation.Portrait;\n pdfPageSettings.size = this.getPageSize(pdfExportProperties.pageSize);\n section.setPageSettings(pdfPageSettings);\n }\n var clientSize = this.pdfDocument.pageSettings.size;\n if (!isNullOrUndefined(pdfExportProperties.header)) {\n /* tslint:disable-next-line:no-any */\n var header = pdfExportProperties.header;\n var position = new PointF(0, header.fromTop);\n var size = new SizeF((clientSize.width - 80), (header.height * 0.75));\n var bounds = new RectangleF(position, size);\n this.pdfDocument.template.top = this.drawPageTemplate(new PdfPageTemplateElement(bounds), header);\n }\n if (!isNullOrUndefined(pdfExportProperties.footer)) {\n /* tslint:disable-next-line:no-any */\n var footer = pdfExportProperties.footer;\n var position = new PointF(0, ((clientSize.width - 80) - (footer.fromBottom * 0.75)));\n var size = new SizeF((clientSize.width - 80), (footer.height * 0.75));\n var bounds = new RectangleF(position, size);\n this.pdfDocument.template.bottom = this.drawPageTemplate(new PdfPageTemplateElement(bounds), footer);\n }\n if (!isNullOrUndefined(pdfExportProperties.includeHiddenColumn) && !this.isGrouping) {\n this.hideColumnInclude = pdfExportProperties.includeHiddenColumn;\n }\n if (!isNullOrUndefined(pdfExportProperties.dataSource)) {\n if (!(pdfExportProperties.dataSource instanceof DataManager)) {\n dataSource = pdfExportProperties.dataSource;\n }\n this.customDataSource = true;\n this.currentViewData = false;\n }\n else if (!isNullOrUndefined(pdfExportProperties.exportType)) {\n if (pdfExportProperties.exportType === 'CurrentPage') {\n dataSource = this.parent.getCurrentViewRecords();\n this.currentViewData = true;\n this.customDataSource = false;\n }\n else {\n this.currentViewData = false;\n this.customDataSource = false;\n }\n }\n else {\n this.currentViewData = false;\n this.customDataSource = false;\n }\n }\n else {\n this.currentViewData = false;\n this.customDataSource = false;\n }\n return { dataSource: dataSource, section: section };\n };\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.drawPageTemplate = function (template, element) {\n for (var _i = 0, _a = element.contents; _i < _a.length; _i++) {\n var content = _a[_i];\n this.processContentValidation(content);\n switch (content.type) {\n case 'Text':\n /* tslint:disable-next-line:max-line-length */\n if (content.value === '' || content.value === undefined || content.value === null || typeof content.value !== 'string') {\n throw new Error('please enter the valid input value in text content...');\n }\n this.drawText(template, content);\n break;\n case 'PageNumber':\n this.drawPageNumber(template, content);\n break;\n case 'Image':\n if (content.src === undefined || content.src === null || content.src === '') {\n throw new Error('please enter the valid base64 string in image content...');\n }\n this.drawImage(template, content);\n break;\n case 'Line':\n this.drawLine(template, content);\n break;\n default:\n throw new Error('Please set valid content type...');\n }\n }\n return template;\n };\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.processContentValidation = function (content) {\n if (content.type === undefined || content.type === null) {\n throw new Error('please set valid content type...');\n }\n else {\n if (content.type === 'Line') {\n if (content.points === undefined || content.points === null) {\n throw new Error('please enter valid points in ' + content.type + ' content...');\n }\n else {\n if (content.points.x1 === undefined || content.points.x1 === null || typeof content.points.x1 !== 'number') {\n throw new Error('please enter valid x1 co-ordinate in ' + content.type + ' points...');\n }\n if (content.points.y1 === undefined || content.points.y1 === null || typeof content.points.y1 !== 'number') {\n throw new Error('please enter valid y1 co-ordinate in ' + content.type + ' points...');\n }\n if (content.points.x2 === undefined || content.points.x2 === null || typeof content.points.x2 !== 'number') {\n throw new Error('please enter valid x2 co-ordinate in ' + content.type + ' points...');\n }\n if (content.points.y2 === undefined || content.points.y2 === null || typeof content.points.y2 !== 'number') {\n throw new Error('please enter valid y2 co-ordinate in ' + content.type + ' points...');\n }\n }\n }\n else {\n if (content.position === undefined || content.position === null) {\n throw new Error('please enter valid position in ' + content.type + ' content...');\n }\n else {\n if (content.position.x === undefined || content.position.x === null || typeof content.position.x !== 'number') {\n throw new Error('please enter valid x co-ordinate in ' + content.type + ' position...');\n }\n if (content.position.y === undefined || content.position.y === null || typeof content.position.y !== 'number') {\n throw new Error('please enter valid y co-ordinate in ' + content.type + ' position...');\n }\n }\n }\n }\n };\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.drawText = function (pageTemplate, content) {\n var font = this.getFont(content);\n var brush = this.getBrushFromContent(content);\n var pen = null;\n if (!isNullOrUndefined(content.style.textPenColor)) {\n var penColor = this.hexToRgb(content.style.textPenColor);\n pen = new PdfPen(new PdfColor(penColor.r, penColor.g, penColor.b));\n }\n if (brush == null && pen == null) {\n brush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n }\n var value = content.value.toString();\n var x = content.position.x * 0.75;\n var y = content.position.y * 0.75;\n var format;\n var result = this.setContentFormat(content, format);\n if (result !== null && !isNullOrUndefined(result.format) && !isNullOrUndefined(result.size)) {\n pageTemplate.graphics.drawString(value, font, pen, brush, x, y, result.size.width, result.size.height, result.format);\n }\n else {\n pageTemplate.graphics.drawString(value, font, pen, brush, x, y, format);\n }\n };\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.drawPageNumber = function (documentHeader, content) {\n var font = this.getFont(content);\n var brush = null;\n if (!isNullOrUndefined(content.style.textBrushColor)) {\n /* tslint:disable-next-line:max-line-length */\n var brushColor = this.hexToRgb(content.style.textBrushColor);\n brush = new PdfSolidBrush(new PdfColor(brushColor.r, brushColor.g, brushColor.b));\n }\n else {\n brush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n }\n var pageNumber = new PdfPageNumberField(font, brush);\n pageNumber.numberStyle = this.getPageNumberStyle(content.pageNumberType);\n var compositeField;\n var format;\n if (!isNullOrUndefined(content.format)) {\n if (content.format.indexOf('$total') !== -1 && content.format.indexOf('$current') !== -1) {\n var pageCount = new PdfPageCountField(font);\n if (content.format.indexOf('$total') > content.format.indexOf('$current')) {\n format = content.format.replace('$current', '0');\n format = format.replace('$total', '1');\n }\n else {\n format = content.format.replace('$current', '1');\n format = format.replace('$total', '0');\n }\n compositeField = new PdfCompositeField(font, brush, format, pageNumber, pageCount);\n }\n else if (content.format.indexOf('$current') !== -1 && content.format.indexOf('$total') === -1) {\n format = content.format.replace('$current', '0');\n compositeField = new PdfCompositeField(font, brush, format, pageNumber);\n }\n else {\n var pageCount = new PdfPageCountField(font);\n format = content.format.replace('$total', '0');\n compositeField = new PdfCompositeField(font, brush, format, pageCount);\n }\n }\n else {\n format = '{0}';\n compositeField = new PdfCompositeField(font, brush, format, pageNumber);\n }\n var x = content.position.x * 0.75;\n var y = content.position.y * 0.75;\n var result = this.setContentFormat(content, compositeField.stringFormat);\n if (result !== null && !isNullOrUndefined(result.format) && !isNullOrUndefined(result.size)) {\n compositeField.stringFormat = result.format;\n compositeField.bounds = new RectangleF(x, y, result.size.width, result.size.height);\n }\n compositeField.draw(documentHeader.graphics, x, y);\n };\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.drawImage = function (documentHeader, content) {\n var x = content.position.x * 0.75;\n var y = content.position.y * 0.75;\n var width = (!isNullOrUndefined(content.size)) ? (content.size.width * 0.75) : undefined;\n var height = (!isNullOrUndefined(content.size)) ? (content.size.height * 0.75) : undefined;\n var image = new PdfBitmap(content.src);\n if (!isNullOrUndefined(width)) {\n documentHeader.graphics.drawImage(image, x, y, width, height);\n }\n else {\n documentHeader.graphics.drawImage(image, x, y);\n }\n };\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.drawLine = function (documentHeader, content) {\n var x1 = content.points.x1 * 0.75;\n var y1 = content.points.y1 * 0.75;\n var x2 = content.points.x2 * 0.75;\n var y2 = content.points.y2 * 0.75;\n var pen = this.getPenFromContent(content);\n if (!isNullOrUndefined(content.style) && content.style !== null) {\n if (!isNullOrUndefined(content.style.penSize) && content.style.penSize !== null && typeof content.style.penSize === 'number') {\n pen.width = content.style.penSize * 0.75;\n }\n pen.dashStyle = this.getDashStyle(content.style.dashStyle);\n }\n documentHeader.graphics.drawLine(pen, x1, y1, x2, y2);\n };\n /* tslint:disable-next-line:no-any */ /* tslint:disable-next-line:max-line-length */\n PdfExport.prototype.processAggregates = function (sRows, pdfGrid, border, font, brush, backgroundBrush, isCaption, captionRow, groupIndex) {\n for (var _i = 0, sRows_1 = sRows; _i < sRows_1.length; _i++) {\n var row = sRows_1[_i];\n var startIndex = 0;\n var leastCaptionSummaryIndex = -1;\n var index = 0;\n var isEmpty = true;\n /* tslint:disable-next-line:no-any */\n var value = [];\n for (var i = 0; i < pdfGrid.columns.count; i++) {\n /* tslint:disable-next-line:no-any */\n var cell = row.cells[index];\n if (!this.hideColumnInclude) {\n while (cell.visible === undefined) {\n if (!isNullOrUndefined(captionRow)) {\n if (!isNullOrUndefined(captionRow.cells.getCell(i).value)) {\n value.push('');\n value.push(captionRow.cells.getCell(i).value);\n isEmpty = false;\n i += 1;\n }\n else {\n value.push('');\n }\n }\n else {\n value.push('');\n }\n i += 1;\n index = index + 1;\n cell = row.cells[index];\n }\n while (!isNullOrUndefined(cell.visible) && !cell.visible) {\n index = index + 1;\n cell = row.cells[index];\n }\n }\n if (cell.isDataCell) {\n var templateFn = {};\n /* tslint:disable-next-line:max-line-length */\n if (!isNullOrUndefined(cell.column.footerTemplate) || !isNullOrUndefined(cell.column.groupCaptionTemplate) || !isNullOrUndefined(cell.column.groupFooterTemplate)) {\n /* tslint:disable-next-line:no-any */\n var result = this.getTemplateFunction(templateFn, i, leastCaptionSummaryIndex, cell.column);\n templateFn = result.templateFunction;\n leastCaptionSummaryIndex = result.leastCaptionSummaryIndex;\n /* tslint:disable-next-line:max-line-length */\n var txt = (templateFn[getEnumValue(CellType, cell.cellType)](row.data[cell.column.field ? cell.column.field : cell.column.columnName]));\n value.push(txt[0].wholeText);\n isEmpty = false;\n }\n else {\n /* tslint:disable-next-line:no-any */\n var result = this.getSummaryWithoutTemplate(row.data[cell.column.field]);\n if (!isNullOrUndefined(result)) {\n value.push(result);\n }\n }\n }\n else {\n value.push('');\n }\n if (isEmpty && value[i] !== '' && !isNullOrUndefined(value[i]) && value[i] !== null) {\n isEmpty = false;\n }\n index += 1;\n }\n if (!isEmpty) {\n if (!isCaption) {\n var gridRow = pdfGrid.rows.addRow();\n gridRow.style.setBorder(border);\n gridRow.style.setFont(font);\n gridRow.style.setTextBrush(brush);\n gridRow.style.setBackgroundBrush(backgroundBrush);\n for (var i = 0; i < pdfGrid.columns.count; i++) {\n gridRow.cells.getCell(i).value = value[i].toString();\n }\n }\n else {\n for (var i = 0; i < pdfGrid.columns.count; i++) {\n captionRow.cells.getCell(i).value = value[i].toString();\n if (i === (groupIndex + 1) && leastCaptionSummaryIndex !== -1) {\n captionRow.cells.getCell(i).columnSpan = leastCaptionSummaryIndex - (groupIndex + 1);\n }\n else if (i === (groupIndex + 1) && leastCaptionSummaryIndex === -1) {\n captionRow.cells.getCell(i).columnSpan = pdfGrid.columns.count - (groupIndex + 1);\n }\n }\n }\n }\n }\n };\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.getTemplateFunction = function (templateFn, index, leastCaptionSummaryIndex, column) {\n if (!isNullOrUndefined(column.footerTemplate)) {\n templateFn[getEnumValue(CellType, CellType.Summary)] = compile(column.footerTemplate);\n }\n else if (!isNullOrUndefined(column.groupCaptionTemplate)) {\n if (leastCaptionSummaryIndex === -1) {\n leastCaptionSummaryIndex = index;\n }\n templateFn[getEnumValue(CellType, CellType.CaptionSummary)] = compile(column.groupCaptionTemplate);\n }\n else {\n templateFn[getEnumValue(CellType, CellType.GroupSummary)] = compile(column.groupFooterTemplate);\n }\n return { templateFunction: templateFn, leastCaptionSummaryIndex: leastCaptionSummaryIndex };\n };\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.getSummaryWithoutTemplate = function (data) {\n if (!isNullOrUndefined(data.Sum)) {\n return data.Sum;\n }\n else if (!isNullOrUndefined(data.Average)) {\n return data.Average;\n }\n else if (!isNullOrUndefined(data.Max)) {\n return data.Max;\n }\n else if (!isNullOrUndefined(data.Min)) {\n return data.Min;\n }\n else if (!isNullOrUndefined(data.Count)) {\n return data.Count;\n }\n else if (!isNullOrUndefined(data.TrueCount)) {\n return data.TrueCount;\n }\n else if (!isNullOrUndefined(data.FalseCount)) {\n return data.FalseCount;\n }\n else if (!isNullOrUndefined(data.Custom)) {\n return data.Custom;\n }\n };\n // Set alignment, width and type of the values of the column\n /* tslint:disable:no-any */\n /* tslint:disable-next-line:max-line-length */\n PdfExport.prototype.setColumnProperties = function (gridColumns, pdfGrid) {\n var startIndex = this.isGrouping ? (pdfGrid.columns.count - gridColumns.length) : 0;\n for (var i = 0; i < gridColumns.length; i++) {\n if (!isNullOrUndefined(gridColumns[i].textAlign)) {\n pdfGrid.columns.getColumn(i + startIndex).format = this.getHorizontalAlignment(gridColumns[i].textAlign);\n }\n // Need to add width consideration with % value\n if (pdfGrid.style.allowHorizontalOverflow && !isNullOrUndefined(gridColumns[i].width)) {\n /* tslint:disable-next-line:max-line-length */\n pdfGrid.columns.getColumn(i + startIndex).width = typeof gridColumns[i].width === 'number' ? gridColumns[i].width * 0.75 : this.helper.getConvertedWidth(gridColumns[i].width) * 0.75;\n }\n }\n };\n /**\n * set default style properties of each rows in exporting grid\n * @private\n */\n PdfExport.prototype.setRecordThemeStyle = function (row, border) {\n if (!isNullOrUndefined(this.gridTheme) && !isNullOrUndefined(this.gridTheme.record) && this.gridTheme.record !== null) {\n var pdfColor = new PdfColor();\n if (!isNullOrUndefined(this.gridTheme.record.fontColor)) {\n var penBrushColor = this.hexToRgb(this.gridTheme.record.fontColor);\n pdfColor = new PdfColor(penBrushColor.r, penBrushColor.g, penBrushColor.b);\n }\n row.style.setTextBrush(new PdfSolidBrush(pdfColor));\n }\n else {\n row.style.setTextBrush(new PdfSolidBrush(new PdfColor(0, 0, 0)));\n }\n row.style.setBorder(border);\n return row;\n };\n /**\n * generate the formatted cell values\n * @private\n */\n /* tslint:disable-next-line:max-line-length */ /* tslint:disable-next-line:no-any */\n PdfExport.prototype.processRecord = function (border, columns, gObj, dataSource, pdfGrid, groupIndex) {\n var startIndex = this.isGrouping ? groupIndex : 0;\n for (var _i = 0, _a = dataSource; _i < _a.length; _i++) {\n var items = _a[_i];\n // create a new row and set default style properties\n var gridRow = this.setRecordThemeStyle(pdfGrid.rows.addRow(), border);\n for (var j = 0; j < columns.length; j++) {\n /* tslint:disable:no-any */\n var value = (!isNullOrUndefined(columns[j].field) && getValue(columns[j].field, items)) || '';\n var column = columns[j];\n var foreignKeyData = void 0;\n if (column.isForeignColumn && column.isForeignColumn()) {\n foreignKeyData = this.helper.getFData(value, column);\n value = getValue(column.foreignKeyValue, foreignKeyData);\n }\n var data = items;\n var args = {\n data: data,\n value: value,\n column: column,\n style: undefined,\n colSpan: 1\n };\n /* tslint:enable:no-any */\n gObj.trigger(events.pdfQueryCellInfo, args);\n var cell = gridRow.cells.getCell(j + startIndex);\n cell.value = this.exportValueFormatter.formatCellValue(args);\n if (!isNullOrUndefined(args.style)) {\n this.processCellStyle(cell, args);\n }\n if (args.colSpan > 1) {\n if ((j + startIndex + 1 + args.colSpan) > gridRow.cells.count) {\n args.colSpan = gridRow.cells.count - (j + startIndex + 1);\n }\n cell.columnSpan = args.colSpan;\n for (var i = 1; i < cell.columnSpan; i++) {\n var spanCell = gridRow.cells.getCell(j + startIndex + i);\n spanCell.value = '';\n }\n j += (args.colSpan - 1);\n }\n }\n }\n };\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.processCellStyle = function (cell, args) {\n if (!isNullOrUndefined(args.style.backgroundColor)) {\n /* tslint:disable-next-line:max-line-length */\n var backColor = this.hexToRgb(args.style.backgroundColor);\n cell.style.backgroundBrush = new PdfSolidBrush(new PdfColor(backColor.r, backColor.g, backColor.b));\n }\n if (!isNullOrUndefined(args.style.textAlignment)) {\n cell.style.stringFormat = this.getHorizontalAlignment(args.style.textAlignment);\n }\n if (!isNullOrUndefined(args.style.verticalAlignment)) {\n cell.style.stringFormat = this.getVerticalAlignment(args.style.verticalAlignment, cell.style.stringFormat);\n }\n if (!isNullOrUndefined(args.style.textBrushColor)) {\n var textBrushColor = this.hexToRgb(args.style.textBrushColor);\n cell.style.textBrush = new PdfSolidBrush(new PdfColor(textBrushColor.r, textBrushColor.g, textBrushColor.b));\n }\n if (!isNullOrUndefined(args.style.textPenColor)) {\n var textPenColor = this.hexToRgb(args.style.textPenColor);\n cell.style.textPen = new PdfPen(new PdfColor(textPenColor.r, textPenColor.g, textPenColor.b));\n }\n /* tslint:disable-next-line:max-line-length */\n if (!isNullOrUndefined(args.style.fontFamily) || !isNullOrUndefined(args.style.fontSize) || !isNullOrUndefined(args.style.bold) || !isNullOrUndefined(args.style.italic) || !isNullOrUndefined(args.style.underline) || !isNullOrUndefined(args.style.strikeout)) {\n cell.style.font = this.getFont(args);\n }\n if (!isNullOrUndefined(args.style.border)) {\n var border = new PdfBorders();\n var borderWidth = args.style.border.width;\n // set border width\n var width = (!isNullOrUndefined(borderWidth) && typeof borderWidth === 'number') ? (borderWidth * 0.75) : (undefined);\n // set border color\n var color = new PdfColor(196, 196, 196);\n if (!isNullOrUndefined(args.style.border.color)) {\n var borderColor = this.hexToRgb(args.style.border.color);\n color = new PdfColor(borderColor.r, borderColor.g, borderColor.b);\n }\n var pen = new PdfPen(color, width);\n // set border dashStyle 'Solid , Dash, Dot, DashDot, DashDotDot'\n if (!isNullOrUndefined(args.style.border.dashStyle)) {\n pen.dashStyle = this.getDashStyle(args.style.border.dashStyle);\n }\n border.all = pen;\n cell.style.borders = border;\n }\n if (!isNullOrUndefined(args.style.paragraphIndent)) {\n cell.style.stringFormat = new PdfStringFormat();\n cell.style.stringFormat.paragraphIndent = args.style.paragraphIndent;\n }\n };\n /**\n * set text alignment of each columns in exporting grid\n * @private\n */\n PdfExport.prototype.getHorizontalAlignment = function (textAlign, format) {\n if (format === undefined) {\n format = new PdfStringFormat();\n }\n switch (textAlign) {\n case 'Right':\n format.alignment = PdfTextAlignment.Right;\n break;\n case 'Center':\n format.alignment = PdfTextAlignment.Center;\n break;\n case 'Justify':\n format.alignment = PdfTextAlignment.Justify;\n break;\n case 'Left':\n format.alignment = PdfTextAlignment.Left;\n break;\n }\n return format;\n };\n /**\n * set vertical alignment of each columns in exporting grid\n * @private\n */\n PdfExport.prototype.getVerticalAlignment = function (verticalAlign, format, textAlign) {\n if (format === undefined) {\n format = new PdfStringFormat();\n format = this.getHorizontalAlignment(textAlign, format);\n }\n switch (verticalAlign) {\n case 'Bottom':\n format.lineAlignment = PdfVerticalAlignment.Bottom;\n break;\n case 'Middle':\n format.lineAlignment = PdfVerticalAlignment.Middle;\n break;\n case 'Top':\n format.lineAlignment = PdfVerticalAlignment.Top;\n break;\n }\n return format;\n };\n PdfExport.prototype.getFontFamily = function (fontFamily) {\n switch (fontFamily) {\n case 'TimesRoman':\n return 2;\n case 'Courier':\n return 1;\n case 'Symbol':\n return 3;\n case 'ZapfDingbats':\n return 4;\n default:\n return 0;\n }\n };\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.getFont = function (content) {\n var fontSize = (!isNullOrUndefined(content.style.fontSize)) ? (content.style.fontSize * 0.75) : 9.75;\n /* tslint:disable-next-line:max-line-length */\n var fontFamily = (!isNullOrUndefined(content.style.fontFamily)) ? (this.getFontFamily(content.style.fontFamily)) : PdfFontFamily.Helvetica;\n var fontStyle = PdfFontStyle.Regular;\n if (!isNullOrUndefined(content.style.bold) && content.style.bold) {\n fontStyle |= PdfFontStyle.Bold;\n }\n if (!isNullOrUndefined(content.style.italic) && content.style.italic) {\n fontStyle |= PdfFontStyle.Italic;\n }\n if (!isNullOrUndefined(content.style.underline) && content.style.underline) {\n fontStyle |= PdfFontStyle.Underline;\n }\n if (!isNullOrUndefined(content.style.strikeout) && content.style.strikeout) {\n fontStyle |= PdfFontStyle.Strikeout;\n }\n return new PdfStandardFont(fontFamily, fontSize, fontStyle);\n };\n PdfExport.prototype.getPageNumberStyle = function (pageNumberType) {\n switch (pageNumberType) {\n case 'LowerLatin':\n return 2;\n case 'LowerRoman':\n return 3;\n case 'UpperLatin':\n return 4;\n case 'UpperRoman':\n return 5;\n default:\n return 1;\n }\n };\n /* tslint:disable-next-line:max-line-length */ /* tslint:disable-next-line:no-any */\n PdfExport.prototype.setContentFormat = function (content, format) {\n if (!isNullOrUndefined(content.size)) {\n var width = content.size.width * 0.75;\n var height = content.size.height * 0.75;\n format = new PdfStringFormat(PdfTextAlignment.Left, PdfVerticalAlignment.Middle);\n if (!isNullOrUndefined(content.style.hAlign)) {\n switch (content.style.hAlign) {\n case 'Right':\n format.alignment = PdfTextAlignment.Right;\n break;\n case 'Center':\n format.alignment = PdfTextAlignment.Center;\n break;\n case 'Justify':\n format.alignment = PdfTextAlignment.Justify;\n break;\n default:\n format.alignment = PdfTextAlignment.Left;\n }\n }\n if (!isNullOrUndefined(content.style.vAlign)) {\n format = this.getVerticalAlignment(content.style.vAlign, format);\n }\n return { format: format, size: new SizeF(width, height) };\n }\n return null;\n };\n PdfExport.prototype.getPageSize = function (pageSize) {\n switch (pageSize) {\n case 'Letter':\n return new SizeF(612, 792);\n case 'Note':\n return new SizeF(540, 720);\n case 'Legal':\n return new SizeF(612, 1008);\n case 'A0':\n return new SizeF(2380, 3368);\n case 'A1':\n return new SizeF(1684, 2380);\n case 'A2':\n return new SizeF(1190, 1684);\n case 'A3':\n return new SizeF(842, 1190);\n case 'A5':\n return new SizeF(421, 595);\n case 'A6':\n return new SizeF(297, 421);\n case 'A7':\n return new SizeF(210, 297);\n case 'A8':\n return new SizeF(148, 210);\n case 'A9':\n return new SizeF(105, 148);\n // case 'A10':\n // return new SizeF(74, 105);\n case 'B0':\n return new SizeF(2836, 4008);\n case 'B1':\n return new SizeF(2004, 2836);\n case 'B2':\n return new SizeF(1418, 2004);\n case 'B3':\n return new SizeF(1002, 1418);\n case 'B4':\n return new SizeF(709, 1002);\n case 'B5':\n return new SizeF(501, 709);\n case 'Archa':\n return new SizeF(648, 864);\n case 'Archb':\n return new SizeF(864, 1296);\n case 'Archc':\n return new SizeF(1296, 1728);\n case 'Archd':\n return new SizeF(1728, 2592);\n case 'Arche':\n return new SizeF(2592, 3456);\n case 'Flsa':\n return new SizeF(612, 936);\n case 'HalfLetter':\n return new SizeF(396, 612);\n case 'Letter11x17':\n return new SizeF(792, 1224);\n case 'Ledger':\n return new SizeF(1224, 792);\n default:\n return new SizeF(595, 842);\n }\n };\n PdfExport.prototype.getDashStyle = function (dashStyle) {\n switch (dashStyle) {\n case 'Dash':\n return 1;\n case 'Dot':\n return 2;\n case 'DashDot':\n return 3;\n case 'DashDotDot':\n return 4;\n default:\n return 0;\n }\n };\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.getPenFromContent = function (content) {\n var pen = new PdfPen(new PdfColor(0, 0, 0));\n if (!isNullOrUndefined(content.style) && content.style !== null && !isNullOrUndefined(content.style.penColor)) {\n var penColor = this.hexToRgb(content.style.penColor);\n pen = new PdfPen(new PdfColor(penColor.r, penColor.g, penColor.b));\n }\n return pen;\n };\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.getBrushFromContent = function (content) {\n var brush = null;\n if (!isNullOrUndefined(content.style.textBrushColor)) {\n /* tslint:disable-next-line:max-line-length */\n var brushColor = this.hexToRgb(content.style.textBrushColor);\n brush = new PdfSolidBrush(new PdfColor(brushColor.r, brushColor.g, brushColor.b));\n }\n return brush;\n };\n PdfExport.prototype.hexToRgb = function (hex) {\n if (hex === null || hex === '' || hex.length !== 7) {\n throw new Error('please set valid hex value for color...');\n }\n hex = hex.substring(1);\n var bigint = parseInt(hex, 16);\n var r = (bigint >> 16) & 255;\n var g = (bigint >> 8) & 255;\n var b = bigint & 255;\n return { r: r, g: g, b: b };\n };\n /**\n * To destroy the pdf export\n * @return {void}\n * @hidden\n */\n PdfExport.prototype.destroy = function () {\n //destroy for exporting\n };\n return PdfExport;\n}());\nexport { PdfExport };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { createElement, addClass, removeClass, attributes } from '@syncfusion/ej2-base';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { CellRenderer } from './cell-renderer';\nimport { appendChildren } from '../base/util';\n/**\n * `CommandColumn` used to render command column in grid\n * @hidden\n */\nvar CommandColumnRenderer = /** @class */ (function (_super) {\n __extends(CommandColumnRenderer, _super);\n function CommandColumnRenderer(parent, locator) {\n var _this = _super.call(this, parent, locator) || this;\n _this.buttonElement = createElement('button', {});\n _this.unbounDiv = createElement('div', { className: 'e-unboundcelldiv', styles: 'display: inline-block' });\n _this.element = createElement('TD', {\n className: 'e-rowcell e-unboundcell', attrs: {\n role: 'gridcell', tabindex: '-1'\n }\n });\n return _this;\n }\n /**\n * Function to render the cell content based on Column object.\n * @param {Column} column\n * @param {Object} data\n * @param {{[x:string]:Object}} attributes?\n * @param {Element}\n */\n CommandColumnRenderer.prototype.render = function (cell, data, attributes) {\n var node = this.element.cloneNode();\n node.appendChild(this.unbounDiv.cloneNode());\n node.setAttribute('aria-label', 'is Command column column header ' + cell.column.headerText);\n if (cell.column.commandsTemplate) {\n appendChildren(node.firstElementChild, cell.column.getColumnTemplate()(data));\n }\n else {\n for (var _i = 0, _a = cell.commands; _i < _a.length; _i++) {\n var command = _a[_i];\n node = this.renderButton(node, command, attributes.index);\n }\n }\n this.setAttributes(node, cell, attributes);\n if (this.parent.isEdit) {\n addClass(node.querySelectorAll('.e-edit-delete'), 'e-hide');\n removeClass(node.querySelectorAll('.e-save-cancel'), 'e-hide');\n }\n else {\n addClass(node.querySelectorAll('.e-save-cancel'), 'e-hide');\n removeClass(node.querySelectorAll('.e-edit-delete'), 'e-hide');\n }\n return node;\n };\n CommandColumnRenderer.prototype.renderButton = function (node, buttonOption, index) {\n var button = this.buttonElement.cloneNode();\n attributes(button, {\n 'id': this.parent.element.id + (buttonOption.type || '') + '_' + index, 'type': 'button',\n title: buttonOption.buttonOption.content || this.localizer.getConstant(buttonOption.type) || buttonOption.type\n });\n button.onclick = buttonOption.buttonOption.click;\n var buttonObj = new Button(buttonOption.buttonOption, button);\n buttonObj.commandType = buttonOption.type;\n node.firstElementChild.appendChild(buttonObj.element);\n switch (buttonOption.type) {\n case 'Edit':\n case 'Delete':\n addClass([button], ['e-edit-delete', 'e-' + buttonOption.type.toLowerCase() + 'button']);\n break;\n case 'Cancel':\n case 'Save':\n addClass([button], ['e-save-cancel', 'e-' + buttonOption.type.toLowerCase() + 'button']);\n break;\n }\n return node;\n };\n return CommandColumnRenderer;\n}(CellRenderer));\nexport { CommandColumnRenderer };\n","import { closest } from '@syncfusion/ej2-base';\nimport { initialEnd, click, keyPressed } from '../base/constant';\nimport { CellType } from '../base/enum';\nimport { CommandColumnRenderer } from '../renderer/command-column-renderer';\n/**\n * `CommandColumn` used to handle the command column actions.\n * @hidden\n */\nvar CommandColumn = /** @class */ (function () {\n function CommandColumn(parent, locator) {\n this.parent = parent;\n this.locator = locator;\n this.addEventListener();\n }\n CommandColumn.prototype.initiateRender = function () {\n var cellFac = this.locator.getService('cellRendererFactory');\n cellFac.addCellRenderer(CellType.CommandColumn, new CommandColumnRenderer(this.parent, this.locator));\n };\n CommandColumn.prototype.commandClickHandler = function (e) {\n var gObj = this.parent;\n var gID = gObj.element.id;\n var target = closest(e.target, 'button');\n if (!target || !gObj.editModule || !closest(e.target, '.e-unboundcell')) {\n return;\n }\n var buttonObj = target.ej2_instances[0];\n var type = buttonObj.commandType;\n if (buttonObj.disabled) {\n return;\n }\n switch (type) {\n case 'Edit':\n gObj.editModule.endEdit();\n gObj.editModule.startEdit(closest(target, 'tr'));\n break;\n case 'Cancel':\n gObj.editModule.closeEdit();\n break;\n case 'Save':\n gObj.editModule.endEdit();\n break;\n case 'Delete':\n gObj.editModule.endEdit();\n gObj.clearSelection();\n //for toogle issue when dbl click\n gObj.selectRow(parseInt(closest(target, 'tr').getAttribute('aria-rowindex'), 10), false);\n gObj.editModule.deleteRecord();\n break;\n }\n };\n /**\n * For internal use only - Get the module name.\n */\n CommandColumn.prototype.getModuleName = function () {\n return 'commandColumn';\n };\n /**\n * To destroy CommandColumn.\n * @method destroy\n * @return {void}\n */\n CommandColumn.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n };\n CommandColumn.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(click, this.commandClickHandler);\n this.parent.off(initialEnd, this.initiateRender);\n this.parent.off(keyPressed, this.keyPressHandler);\n };\n CommandColumn.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(click, this.commandClickHandler, this);\n this.parent.on(initialEnd, this.initiateRender, this);\n this.parent.on(keyPressed, this.keyPressHandler, this);\n };\n CommandColumn.prototype.keyPressHandler = function (e) {\n if (e.action === 'enter' && closest(e.target, '.e-unboundcelldiv')) {\n this.commandClickHandler(e);\n e.preventDefault();\n }\n };\n return CommandColumn;\n}());\nexport { CommandColumn };\n","import { closest, isNullOrUndefined, EventHandler } from '@syncfusion/ej2-base';\nimport { createElement, remove } from '@syncfusion/ej2-base';\nimport { ContextMenu as Menu } from '@syncfusion/ej2-navigations';\nimport * as events from '../base/constant';\nimport { Resize } from '../actions/resize';\nimport { Page } from '../actions/page';\nimport { parentsUntil } from '../base/util';\nimport { Group } from '../actions/group';\nimport { Sort } from '../actions/sort';\nimport { PdfExport } from '../actions/pdf-export';\nimport { ExcelExport } from '../actions/excel-export';\nexport var menuClass = {\n header: '.e-gridheader',\n content: '.e-gridcontent',\n edit: '.e-inline-edit',\n batchEdit: '.e-editedbatchcell',\n editIcon: 'e-edit',\n pager: '.e-gridpager',\n delete: 'e-delete',\n save: 'e-save',\n cancel: 'e-cancel',\n copy: 'e-copy',\n pdf: 'e-pdfexport',\n group: 'e-icon-group',\n ungroup: 'e-icon-ungroup',\n csv: 'e-csvexport',\n excel: 'e-excelexport',\n fPage: 'e-icon-first',\n nPage: 'e-icon-next',\n lPage: 'e-icon-last',\n pPage: 'e-icon-prev',\n ascending: 'e-icon-ascending',\n descending: 'e-icon-descending',\n groupHeader: 'e-groupdroparea',\n touchPop: 'e-gridpopup'\n};\n/**\n * The `ContextMenu` module is used to handle context menu actions.\n */\nvar ContextMenu = /** @class */ (function () {\n function ContextMenu(parent, serviceLocator) {\n this.defaultItems = {};\n this.disableItems = [];\n this.hiddenItems = [];\n this.localeText = this.setLocaleKey();\n this.parent = parent;\n this.gridID = parent.element.id;\n this.serviceLocator = serviceLocator;\n this.addEventListener();\n }\n /**\n * @hidden\n */\n ContextMenu.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.uiUpdate, this.enableAfterRenderMenu, this);\n this.parent.on(events.initialLoad, this.render, this);\n };\n /**\n * @hidden\n */\n ContextMenu.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initialLoad, this.render);\n this.parent.off(events.uiUpdate, this.enableAfterRenderMenu);\n EventHandler.remove(this.element, 'keydown', this.keyDownHandler.bind(this));\n };\n ContextMenu.prototype.keyDownHandler = function (e) {\n if (e.code === 'Tab' || e.which === 9) {\n this.contextMenu.close();\n }\n };\n ContextMenu.prototype.render = function () {\n this.parent.element.classList.add('e-noselect');\n this.l10n = this.serviceLocator.getService('localization');\n this.element = createElement('ul', { id: this.gridID + '_cmenu' });\n EventHandler.add(this.element, 'keydown', this.keyDownHandler.bind(this));\n this.parent.element.appendChild(this.element);\n var target = '#' + this.gridID;\n this.contextMenu = new Menu({\n items: this.getMenuItems(),\n enableRtl: this.parent.enableRtl,\n enablePersistence: this.parent.enablePersistence,\n locale: this.parent.locale,\n target: target,\n select: this.contextMenuItemClick.bind(this),\n beforeOpen: this.contextMenuBeforeOpen.bind(this),\n onOpen: this.contextMenuOpen.bind(this),\n onClose: this.contextMenuOnClose.bind(this),\n cssClass: 'e-grid-menu'\n });\n this.contextMenu.appendTo(this.element);\n };\n ContextMenu.prototype.enableAfterRenderMenu = function (e) {\n if (e.module === this.getModuleName() && e.enable) {\n if (this.contextMenu) {\n this.contextMenu.destroy();\n remove(this.element);\n this.parent.element.classList.remove('e-noselect');\n }\n this.render();\n }\n };\n ContextMenu.prototype.getMenuItems = function () {\n var menuItems = [];\n var exportItems = [];\n for (var _i = 0, _a = this.parent.contextMenuItems; _i < _a.length; _i++) {\n var item = _a[_i];\n if (typeof item === 'string' && this.getDefaultItems().indexOf(item) !== -1) {\n if (item.toLocaleLowerCase().indexOf('export') !== -1) {\n exportItems.push(this.buildDefaultItems(item));\n }\n else {\n menuItems.push(this.buildDefaultItems(item));\n }\n }\n else if (typeof item !== 'string') {\n menuItems.push(item);\n }\n }\n if (exportItems.length > 0) {\n var exportGroup = this.buildDefaultItems('export');\n exportGroup.items = exportItems;\n menuItems.push(exportGroup);\n }\n return menuItems;\n };\n ContextMenu.prototype.getLastPage = function () {\n var totalpage = Math.floor(this.parent.pageSettings.totalRecordsCount / this.parent.pageSettings.pageSize);\n if (this.parent.pageSettings.totalRecordsCount % this.parent.pageSettings.pageSize) {\n totalpage += 1;\n }\n return totalpage;\n };\n ContextMenu.prototype.contextMenuOpen = function () {\n this.isOpen = true;\n };\n ContextMenu.prototype.contextMenuItemClick = function (args) {\n var item = this.getKeyFromId(args.item.id);\n switch (item) {\n case 'AutoFitAll':\n this.parent.autoFitColumns([]);\n break;\n case 'AutoFit':\n this.parent.autoFitColumns(this.targetColumn.field);\n break;\n case 'Group':\n this.parent.groupColumn(this.targetColumn.field);\n break;\n case 'Ungroup':\n this.parent.ungroupColumn(this.targetColumn.field);\n break;\n case 'Edit':\n if (this.parent.editSettings.mode === 'Batch') {\n if (this.row && this.cell && !isNaN(parseInt(this.cell.getAttribute('aria-colindex'), 10))) {\n this.parent.editModule.editCell(parseInt(this.row.getAttribute('aria-rowindex'), 10), this.parent.getColumns()[parseInt(this.cell.getAttribute('aria-colindex'), 10)].field);\n }\n }\n else {\n this.parent.editModule.endEdit();\n this.parent.editModule.startEdit(this.row);\n }\n break;\n case 'Delete':\n if (this.parent.editSettings.mode !== 'Batch') {\n this.parent.editModule.endEdit();\n }\n if (this.parent.getSelectedRecords().length === 1) {\n this.parent.editModule.deleteRow(this.row);\n }\n else {\n this.parent.deleteRecord();\n }\n break;\n case 'Save':\n this.parent.editModule.endEdit();\n break;\n case 'Cancel':\n this.parent.editModule.closeEdit();\n break;\n case 'Copy':\n this.parent.copy();\n break;\n case 'PdfExport':\n this.parent.pdfExport();\n break;\n case 'ExcelExport':\n this.parent.excelExport();\n break;\n case 'CsvExport':\n this.parent.csvExport();\n break;\n case 'SortAscending':\n this.isOpen = false;\n this.parent.sortColumn(this.targetColumn.field, 'Ascending');\n break;\n case 'SortDescending':\n this.isOpen = false;\n this.parent.sortColumn(this.targetColumn.field, 'Descending');\n break;\n case 'FirstPage':\n this.parent.goToPage(1);\n break;\n case 'PrevPage':\n this.parent.goToPage(this.parent.pageSettings.currentPage - 1);\n break;\n case 'LastPage':\n this.parent.goToPage(this.getLastPage());\n break;\n case 'NextPage':\n this.parent.goToPage(this.parent.pageSettings.currentPage + 1);\n break;\n }\n args.column = this.targetColumn;\n this.parent.trigger(events.contextMenuClick, args);\n };\n ContextMenu.prototype.contextMenuOnClose = function (args) {\n var parent = 'parentObj';\n if (args.items.length > 0 && args.items[0][parent] instanceof Menu) {\n this.updateItemStatus();\n }\n };\n ContextMenu.prototype.getLocaleText = function (item) {\n return this.l10n.getConstant(this.localeText[item]);\n };\n ContextMenu.prototype.updateItemStatus = function () {\n this.contextMenu.showItems(this.hiddenItems);\n this.contextMenu.enableItems(this.disableItems);\n this.hiddenItems = [];\n this.disableItems = [];\n this.isOpen = false;\n };\n ContextMenu.prototype.contextMenuBeforeOpen = function (args) {\n var changedRecords = 'changedRecords';\n var addedRecords = 'addedRecords';\n var deletedRecords = 'deletedRecords';\n var closestGrid = closest(args.event.target, '.e-grid');\n if (args.event && closestGrid && closestGrid !== this.parent.element) {\n args.cancel = true;\n }\n else if (args.event && (closest(args.event.target, '.' + menuClass.groupHeader)\n || closest(args.event.target, '.' + menuClass.touchPop) ||\n closest(args.event.target, '.e-summarycell') ||\n closest(args.event.target, '.e-groupcaption') ||\n closest(args.event.target, '.e-filterbarcell'))) {\n args.cancel = true;\n }\n else {\n this.targetColumn = this.getColumn(args.event);\n this.selectRow(args.event, this.parent.selectionSettings.type !== 'Multiple');\n for (var _i = 0, _a = args.items; _i < _a.length; _i++) {\n var item = _a[_i];\n var key = this.getKeyFromId(item.id);\n var dItem = this.defaultItems[key];\n if (this.getDefaultItems().indexOf(key) !== -1) {\n if (this.ensureDisabledStatus(key)) {\n this.disableItems.push(item.text);\n }\n if (args.event && (this.ensureTarget(args.event.target, menuClass.edit) ||\n this.ensureTarget(args.event.target, menuClass.batchEdit))) {\n if (key !== 'Save' && key !== 'Cancel') {\n this.hiddenItems.push(item.text);\n }\n }\n else if (this.parent.editSettings.mode === 'Batch' && ((closest(args.event.target, '.e-gridform')) ||\n this.parent.editModule.getBatchChanges()[changedRecords].length ||\n this.parent.editModule.getBatchChanges()[addedRecords].length ||\n this.parent.editModule.getBatchChanges()[deletedRecords].length) && (key === 'Save' || key === 'Cancel')) {\n continue;\n }\n else if (isNullOrUndefined(args.parentItem) && args.event\n && !this.ensureTarget(args.event.target, dItem.target)) {\n this.hiddenItems.push(item.text);\n }\n }\n else if (item.target && args.event &&\n !this.ensureTarget(args.event.target, item.target)) {\n this.hiddenItems.push(item.text);\n }\n }\n this.contextMenu.enableItems(this.disableItems, false);\n this.contextMenu.hideItems(this.hiddenItems);\n this.eventArgs = args.event;\n args.column = this.targetColumn;\n this.parent.trigger(events.contextMenuOpen, args);\n if (this.hiddenItems.length === args.items.length) {\n this.updateItemStatus();\n args.cancel = true;\n }\n }\n };\n ContextMenu.prototype.ensureTarget = function (targetElement, selector) {\n var target = targetElement;\n if (this.ensureFrozenHeader(targetElement) && (selector === menuClass.header || selector === menuClass.content)) {\n target = closest(targetElement, selector === menuClass.header ? 'thead' : 'tbody');\n }\n else if (selector === menuClass.content || selector === menuClass.header) {\n target = parentsUntil(closest(targetElement, '.e-table'), selector.substr(1, selector.length));\n }\n else {\n target = closest(targetElement, selector);\n }\n return target && parentsUntil(target, 'e-grid') === this.parent.element;\n };\n ContextMenu.prototype.ensureFrozenHeader = function (targetElement) {\n return (this.parent.getFrozenColumns() || this.parent.frozenRows)\n && closest(targetElement, menuClass.header) ? true : false;\n };\n ContextMenu.prototype.ensureDisabledStatus = function (item) {\n var _this = this;\n var status = false;\n switch (item) {\n case 'AutoFitAll':\n case 'AutoFit':\n status = !(this.parent.ensureModuleInjected(Resize) && !this.parent.isEdit);\n break;\n case 'Group':\n if (!this.parent.allowGrouping || (this.parent.ensureModuleInjected(Group) && this.targetColumn\n && this.parent.groupSettings.columns.indexOf(this.targetColumn.field) >= 0)) {\n status = true;\n }\n break;\n case 'Ungroup':\n if (!this.parent.allowGrouping || !this.parent.ensureModuleInjected(Group)\n || (this.parent.ensureModuleInjected(Group) && this.targetColumn\n && this.parent.groupSettings.columns.indexOf(this.targetColumn.field) < 0)) {\n status = true;\n }\n break;\n case 'Edit':\n case 'Delete':\n case 'Save':\n case 'Cancel':\n if (!this.parent.editModule || (this.parent.getDataRows().length === 0)) {\n status = true;\n }\n break;\n case 'Copy':\n if (this.parent.getSelectedRowIndexes().length === 0 ||\n this.parent.getCurrentViewRecords().length === 0) {\n status = true;\n }\n break;\n case 'export':\n if ((!this.parent.allowExcelExport || !this.parent.excelExport) ||\n !this.parent.ensureModuleInjected(PdfExport) && !this.parent.ensureModuleInjected(ExcelExport)) {\n status = true;\n }\n break;\n case 'PdfExport':\n if (!(this.parent.allowPdfExport) || !this.parent.ensureModuleInjected(PdfExport)) {\n status = true;\n }\n break;\n case 'ExcelExport':\n case 'CsvExport':\n if (!(this.parent.allowExcelExport) || !this.parent.ensureModuleInjected(ExcelExport)) {\n status = true;\n }\n break;\n case 'SortAscending':\n case 'SortDescending':\n if ((!this.parent.allowSorting) || !this.parent.ensureModuleInjected(Sort)) {\n status = true;\n }\n else if (this.parent.ensureModuleInjected(Sort) && this.parent.sortSettings.columns.length > 0 && this.targetColumn) {\n this.parent.sortSettings.columns.forEach(function (element) {\n if (element.field === _this.targetColumn.field\n && element.direction.toLowerCase() === item.toLowerCase().replace('sort', '').toLocaleLowerCase()) {\n status = true;\n }\n });\n }\n break;\n case 'FirstPage':\n case 'PrevPage':\n if (!this.parent.allowPaging || !this.parent.ensureModuleInjected(Page) ||\n this.parent.getCurrentViewRecords().length === 0 ||\n (this.parent.ensureModuleInjected(Page) && this.parent.pageSettings.currentPage === 1)) {\n status = true;\n }\n break;\n case 'LastPage':\n case 'NextPage':\n if (!this.parent.allowPaging || !this.parent.ensureModuleInjected(Page) ||\n this.parent.getCurrentViewRecords().length === 0 ||\n (this.parent.ensureModuleInjected(Page) && this.parent.pageSettings.currentPage === this.getLastPage())) {\n status = true;\n }\n break;\n }\n return status;\n };\n /**\n * Gets the context menu element from the Grid.\n * @return {Element}\n */\n ContextMenu.prototype.getContextMenu = function () {\n return this.element;\n };\n /**\n * Destroys the context menu component in the Grid.\n * @method destroy\n * @return {void}\n * @hidden\n */\n ContextMenu.prototype.destroy = function () {\n this.contextMenu.destroy();\n remove(this.element);\n this.removeEventListener();\n this.parent.element.classList.remove('e-noselect');\n };\n ContextMenu.prototype.getModuleName = function () {\n return 'contextMenu';\n };\n ContextMenu.prototype.generateID = function (item) {\n return this.gridID + '_cmenu_' + item;\n };\n ContextMenu.prototype.getKeyFromId = function (id) {\n return id.replace(this.gridID + '_cmenu_', '');\n };\n ContextMenu.prototype.buildDefaultItems = function (item) {\n var menuItem;\n switch (item) {\n case 'AutoFitAll':\n case 'AutoFit':\n menuItem = { target: menuClass.header };\n break;\n case 'Group':\n menuItem = { target: menuClass.header, iconCss: menuClass.group };\n break;\n case 'Ungroup':\n menuItem = { target: menuClass.header, iconCss: menuClass.ungroup };\n break;\n case 'Edit':\n menuItem = { target: menuClass.content, iconCss: menuClass.editIcon };\n break;\n case 'Delete':\n menuItem = { target: menuClass.content, iconCss: menuClass.delete };\n break;\n case 'Save':\n menuItem = { target: menuClass.edit, iconCss: menuClass.save };\n break;\n case 'Cancel':\n menuItem = { target: menuClass.edit, iconCss: menuClass.cancel };\n break;\n case 'Copy':\n menuItem = { target: menuClass.content, iconCss: menuClass.copy };\n break;\n case 'export':\n menuItem = { target: menuClass.content };\n break;\n case 'PdfExport':\n menuItem = { target: menuClass.content, iconCss: menuClass.pdf };\n break;\n case 'ExcelExport':\n menuItem = { target: menuClass.content, iconCss: menuClass.excel };\n break;\n case 'CsvExport':\n menuItem = { target: menuClass.content, iconCss: menuClass.csv };\n break;\n case 'SortAscending':\n menuItem = { target: menuClass.header, iconCss: menuClass.ascending };\n break;\n case 'SortDescending':\n menuItem = { target: menuClass.header, iconCss: menuClass.descending };\n break;\n case 'FirstPage':\n menuItem = { target: menuClass.pager, iconCss: menuClass.fPage };\n break;\n case 'PrevPage':\n menuItem = { target: menuClass.pager, iconCss: menuClass.pPage };\n break;\n case 'LastPage':\n menuItem = { target: menuClass.pager, iconCss: menuClass.lPage };\n break;\n case 'NextPage':\n menuItem = { target: menuClass.pager, iconCss: menuClass.nPage };\n break;\n }\n this.defaultItems[item] = {\n text: this.getLocaleText(item), id: this.generateID(item),\n target: menuItem.target, iconCss: menuItem.iconCss ? 'e-icons ' + menuItem.iconCss : ''\n };\n return this.defaultItems[item];\n };\n ContextMenu.prototype.getDefaultItems = function () {\n return ['AutoFitAll', 'AutoFit',\n 'Group', 'Ungroup', 'Edit', 'Delete', 'Save', 'Cancel', 'Copy', 'export',\n 'PdfExport', 'ExcelExport', 'CsvExport', 'SortAscending', 'SortDescending',\n 'FirstPage', 'PrevPage', 'LastPage', 'NextPage'];\n };\n ContextMenu.prototype.setLocaleKey = function () {\n return {\n 'AutoFitAll': 'autoFitAll',\n 'AutoFit': 'autoFit',\n 'Copy': 'Copy',\n 'Group': 'Group',\n 'Ungroup': 'Ungroup',\n 'Edit': 'EditRecord',\n 'Delete': 'DeleteRecord',\n 'Save': 'Save',\n 'Cancel': 'CancelButton',\n 'PdfExport': 'Pdfexport',\n 'ExcelExport': 'Excelexport',\n 'CsvExport': 'Csvexport',\n 'export': 'Export',\n 'SortAscending': 'SortAscending',\n 'SortDescending': 'SortDescending',\n 'FirstPage': 'FirstPage',\n 'LastPage': 'LastPage',\n 'PrevPage': 'PreviousPage',\n 'NextPage': 'NextPage'\n };\n };\n ContextMenu.prototype.getColumn = function (e) {\n var cell = closest(e.target, 'th.e-headercell');\n if (cell) {\n cell.classList.add('e-resized');\n var uid = cell.querySelector('.e-headercelldiv').getAttribute('e-mappinguid');\n return this.parent.getColumnByUid(uid);\n }\n return null;\n };\n ContextMenu.prototype.selectRow = function (e, isSelectable) {\n this.cell = e.target;\n this.row = closest(e.target, 'tr.e-row') || this.row;\n if (this.row && isSelectable && !parentsUntil(e.target, 'e-gridpager')) {\n this.parent.selectRow(parseInt(this.row.getAttribute('aria-rowindex'), 10));\n }\n };\n return ContextMenu;\n}());\nexport { ContextMenu };\n","import { RowModelGenerator } from '../services/row-model-generator';\n/**\n * FreezeRowModelGenerator is used to generate grid data rows with freeze row and column.\n * @hidden\n */\nvar FreezeRowModelGenerator = /** @class */ (function () {\n function FreezeRowModelGenerator(parent) {\n this.isFrzLoad = 1;\n this.parent = parent;\n this.rowModelGenerator = new RowModelGenerator(this.parent);\n }\n FreezeRowModelGenerator.prototype.generateRows = function (data, notifyArgs) {\n var frzCols = this.parent.getFrozenColumns();\n var row = this.rowModelGenerator.generateRows(data, notifyArgs);\n for (var i = 0, len = row.length; i < len; i++) {\n if (this.isFrzLoad % 2 === 0) {\n row[i].cells = row[i].cells.slice(frzCols, row[i].cells.length);\n }\n else {\n row[i].cells = row[i].cells.slice(0, frzCols);\n }\n }\n this.isFrzLoad++;\n return row;\n };\n return FreezeRowModelGenerator;\n}());\nexport { FreezeRowModelGenerator };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { createElement, remove, addClass } from '@syncfusion/ej2-base';\nimport { HeaderRender } from './header-renderer';\nimport { ContentRender } from './content-renderer';\nimport { FreezeRowModelGenerator } from '../services/freeze-row-model-generator';\nimport * as events from '../base/constant';\nimport { renderMovable, getScrollBarWidth } from '../base/util';\n/**\n * Freeze module is used to render grid content with frozen rows and columns\n * @hidden\n */\nvar FreezeContentRender = /** @class */ (function (_super) {\n __extends(FreezeContentRender, _super);\n function FreezeContentRender(parent, locator) {\n return _super.call(this, parent, locator) || this;\n }\n FreezeContentRender.prototype.renderPanel = function () {\n _super.prototype.renderPanel.call(this);\n var fDiv = createElement('div', { className: 'e-frozencontent' });\n var mDiv = createElement('div', { className: 'e-movablecontent' });\n this.getPanel().firstChild.appendChild(fDiv);\n this.getPanel().firstChild.appendChild(mDiv);\n this.setFrozenContent(fDiv);\n this.setMovableContent(mDiv);\n };\n FreezeContentRender.prototype.renderEmpty = function (tbody) {\n _super.prototype.renderEmpty.call(this, tbody);\n this.getMovableContent().querySelector('tbody').innerHTML = '';\n this.getFrozenContent().querySelector('.e-emptyrow').querySelector('td').colSpan = this.parent.getFrozenColumns();\n this.getFrozenContent().style.borderRightWidth = '0px';\n if (this.parent.frozenRows) {\n this.parent.getHeaderContent().querySelector('.e-frozenheader').querySelector('tbody').innerHTML = '';\n this.parent.getHeaderContent().querySelector('.e-movableheader').querySelector('tbody').innerHTML = '';\n }\n };\n FreezeContentRender.prototype.setFrozenContent = function (ele) {\n this.frozenContent = ele;\n };\n FreezeContentRender.prototype.setMovableContent = function (ele) {\n this.movableContent = ele;\n };\n FreezeContentRender.prototype.getFrozenContent = function () {\n return this.frozenContent;\n };\n FreezeContentRender.prototype.getMovableContent = function () {\n return this.movableContent;\n };\n FreezeContentRender.prototype.getModelGenerator = function () {\n return new FreezeRowModelGenerator(this.parent);\n };\n FreezeContentRender.prototype.renderTable = function () {\n _super.prototype.renderTable.call(this);\n this.getFrozenContent().appendChild(this.getTable());\n var mTbl = this.getTable().cloneNode(true);\n this.getMovableContent().appendChild(mTbl);\n remove(this.getMovableContent().querySelector('colgroup'));\n var colGroup = ((this.parent.getHeaderContent().querySelector('.e-movableheader').querySelector('colgroup')).cloneNode(true));\n mTbl.insertBefore(colGroup, mTbl.querySelector('tbody'));\n };\n return FreezeContentRender;\n}(ContentRender));\nexport { FreezeContentRender };\nvar FreezeRender = /** @class */ (function (_super) {\n __extends(FreezeRender, _super);\n function FreezeRender(parent, locator) {\n var _this = _super.call(this, parent, locator) || this;\n _this.addEventListener();\n return _this;\n }\n FreezeRender.prototype.addEventListener = function () {\n this.parent.on(events.freezeRender, this.refreshFreeze, this);\n this.parent.on(events.frozenHeight, this.setFrozenHeight, this);\n };\n FreezeRender.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.frozenHeight, this.setFrozenHeight);\n };\n FreezeRender.prototype.renderTable = function () {\n _super.prototype.renderTable.call(this);\n this.rfshMovable();\n this.updateColgroup();\n this.initializeHeaderDrag();\n this.initializeHeaderDrop();\n this.parent.notify(events.headerRefreshed, { rows: this.rows, args: { isFrozen: false } });\n };\n FreezeRender.prototype.renderPanel = function () {\n _super.prototype.renderPanel.call(this);\n var fDiv = createElement('div', { className: 'e-frozenheader' });\n var mDiv = createElement('div', { className: 'e-movableheader' });\n this.getPanel().firstChild.appendChild(fDiv);\n this.getPanel().firstChild.appendChild(mDiv);\n this.setFrozenHeader(fDiv);\n this.setMovableHeader(mDiv);\n };\n FreezeRender.prototype.refreshUI = function () {\n var tbody = this.getMovableHeader().querySelector('tbody');\n remove(this.getMovableHeader().querySelector('table'));\n _super.prototype.refreshUI.call(this);\n this.rfshMovable();\n this.getMovableHeader().querySelector('tbody').innerHTML = tbody.innerHTML;\n this.updateColgroup();\n renderMovable(this.parent.getContentTable().querySelector('colgroup'), this.parent.getFrozenColumns());\n this.initializeHeaderDrag();\n this.parent.notify(events.headerRefreshed, { rows: this.rows, args: { isFrozen: false } });\n };\n FreezeRender.prototype.rfshMovable = function () {\n this.getFrozenHeader().appendChild(this.getTable());\n this.getMovableHeader().appendChild(this.createTable());\n this.refreshStackedHdrHgt();\n this.addMovableFirstCls();\n };\n FreezeRender.prototype.addMovableFirstCls = function () {\n if (this.parent.getVisibleFrozenColumns()) {\n var movablefirstcell = this.parent.element.querySelector('.e-movableheader').querySelector('thead').querySelectorAll('.e-columnheader');\n var len = this.parent.element.querySelector('.e-movableheader').querySelector('thead').querySelectorAll('.e-columnheader').length;\n for (var i = 0; i < len; i++) {\n var cells = 'cells';\n var element = movablefirstcell[i][cells][0];\n if (element) {\n addClass([element], ['e-movablefirst']);\n if (movablefirstcell[i][cells][0].rowSpan > 1) {\n i = i + (movablefirstcell[i][cells][0].rowSpan - 1);\n }\n }\n }\n }\n };\n FreezeRender.prototype.refreshFreeze = function (obj) {\n if (obj.case === 'filter') {\n var filterRow = this.getTable().querySelector('.e-filterbar');\n if (this.parent.allowFiltering && filterRow && this.getMovableHeader().querySelector('thead')) {\n this.getMovableHeader().querySelector('thead')\n .appendChild(renderMovable(filterRow, this.parent.getFrozenColumns()));\n }\n }\n else if (obj.case === 'textwrap') {\n var fRows = void 0;\n var mRows = void 0;\n var fHdr = this.getFrozenHeader();\n var mHdr = this.getMovableHeader();\n var cont = this.parent.getContent();\n var wrapMode = this.parent.textWrapSettings.wrapMode;\n var hdrClassList = this.parent.getHeaderContent().firstChild.classList;\n if (wrapMode !== 'Header' || obj.isModeChg) {\n fRows = cont.querySelector('.e-frozencontent').querySelectorAll('tr');\n mRows = cont.querySelector('.e-movablecontent').querySelectorAll('tr');\n this.setWrapHeight(fRows, mRows, obj.isModeChg, true);\n }\n if (wrapMode === 'Content' && this.parent.allowTextWrap) {\n hdrClassList.add('e-wrap');\n }\n else {\n hdrClassList.remove('e-wrap');\n }\n if (wrapMode === 'Both' || obj.isModeChg) {\n fRows = fHdr.querySelectorAll('tr');\n mRows = mHdr.querySelectorAll('tr');\n }\n else {\n fRows = fHdr.querySelector(wrapMode === 'Content' ? 'tbody' : 'thead').querySelectorAll('tr');\n mRows = mHdr.querySelector(wrapMode === 'Content' ? 'tbody' : 'thead').querySelectorAll('tr');\n }\n if (!this.parent.getHeaderContent().querySelectorAll('.e-stackedheadercell').length) {\n this.setWrapHeight(fRows, mRows, obj.isModeChg, false, this.colDepth > 1);\n }\n this.refreshStackedHdrHgt();\n }\n };\n FreezeRender.prototype.updateResizeHandler = function () {\n [].slice.call(this.parent.getHeaderContent().querySelectorAll('.e-rhandler')).forEach(function (ele) {\n ele.style.height = ele.parentElement.offsetHeight + 'px';\n });\n };\n FreezeRender.prototype.setWrapHeight = function (fRows, mRows, isModeChg, isContReset, isStackedHdr) {\n var fRowHgt;\n var mRowHgt;\n var isWrap = this.parent.allowTextWrap;\n var wrapMode = this.parent.textWrapSettings.wrapMode;\n var tHead = this.parent.getHeaderContent().querySelector('thead');\n var tBody = this.parent.getHeaderContent().querySelector('tbody');\n var height = [];\n var width = [];\n for (var i = 0, len = fRows.length; i < len; i++) {\n height[i] = fRows[i].offsetHeight; //https://pagebuildersandwich.com/increased-plugins-performance-200/\n width[i] = mRows[i].offsetHeight;\n }\n for (var i = 0, len = fRows.length; i < len; i++) {\n if (isModeChg && ((wrapMode === 'Header' && isContReset) || ((wrapMode === 'Content' && tHead.contains(fRows[i]))\n || (wrapMode === 'Header' && tBody.contains(fRows[i])))) || isStackedHdr) {\n fRows[i].style.height = null;\n mRows[i].style.height = null;\n }\n fRowHgt = height[i];\n mRowHgt = width[i];\n if (fRows[i].childElementCount && ((isWrap && fRowHgt < mRowHgt) || (!isWrap && fRowHgt > mRowHgt) ||\n (this.parent.allowResizing && !this.parent.resizeModule.isFrozenColResized))) {\n if (!this.parent.allowResizing || (this.parent.allowResizing && !this.parent.resizeModule.isFrozenColResized)) {\n fRows[i].style.height = mRowHgt + 'px';\n }\n }\n if (mRows[i].childElementCount && ((isWrap && fRowHgt > mRowHgt) || (!isWrap && fRowHgt < mRowHgt) ||\n (this.parent.allowResizing && this.parent.resizeModule.isFrozenColResized))) {\n if (!this.parent.allowResizing || (this.parent.allowResizing && this.parent.resizeModule.isFrozenColResized)) {\n mRows[i].style.height = fRowHgt + 'px';\n }\n }\n }\n if (isWrap) {\n this.setFrozenHeight();\n }\n };\n FreezeRender.prototype.setFrozenHeight = function () {\n var movableContentHeight = this.parent.element.querySelector('.e-movablecontent').getBoundingClientRect().height;\n var frozenContentHeight = this.parent.element.querySelector('.e-frozencontent').getBoundingClientRect().height;\n if (movableContentHeight > frozenContentHeight) {\n this.parent.element.querySelector('.e-frozencontent').style.height = movableContentHeight -\n getScrollBarWidth() + 'px';\n }\n };\n FreezeRender.prototype.refreshStackedHdrHgt = function () {\n var fRowSpan;\n var mRowSpan;\n var fTr = this.getFrozenHeader().querySelectorAll('.e-columnheader');\n var mTr = this.getMovableHeader().querySelectorAll('.e-columnheader');\n for (var i = 0, len = fTr.length; i < len; i++) {\n fRowSpan = this.getRowSpan(fTr[i]);\n mRowSpan = this.getRowSpan(mTr[i]);\n if (fRowSpan.min > 1) {\n this.updateStackedHdrRowHgt(i, fRowSpan.max, fTr[i], mTr);\n }\n else if (mRowSpan.min > 1) {\n this.updateStackedHdrRowHgt(i, mRowSpan.max, mTr[i], fTr);\n }\n }\n if (this.parent.allowResizing) {\n this.updateResizeHandler();\n }\n };\n FreezeRender.prototype.getRowSpan = function (row) {\n var rSpan;\n var minRowSpan;\n var maxRowSpan;\n for (var i = 0, len = row.childElementCount; i < len; i++) {\n if (i === 0) {\n minRowSpan = row.children[0].rowSpan;\n }\n rSpan = row.children[i].rowSpan;\n minRowSpan = Math.min(rSpan, minRowSpan);\n maxRowSpan = Math.max(rSpan, minRowSpan);\n }\n return { min: minRowSpan, max: maxRowSpan };\n };\n FreezeRender.prototype.updateStackedHdrRowHgt = function (idx, maxRowSpan, row, rows) {\n var height = 0;\n for (var i = 0; i < maxRowSpan; i++) {\n height += rows[idx + i].style.height ?\n parseInt(rows[idx + i].style.height, 10) : rows[idx + i].offsetHeight;\n }\n row.style.height = height + 'px';\n };\n FreezeRender.prototype.setFrozenHeader = function (ele) {\n this.frozenHeader = ele;\n };\n FreezeRender.prototype.setMovableHeader = function (ele) {\n this.movableHeader = ele;\n };\n FreezeRender.prototype.getFrozenHeader = function () {\n return this.frozenHeader;\n };\n FreezeRender.prototype.getMovableHeader = function () {\n return this.movableHeader;\n };\n FreezeRender.prototype.updateColgroup = function () {\n var mTable = this.getMovableHeader().querySelector('table');\n remove(this.getMovableHeader().querySelector('colgroup'));\n mTable.insertBefore(renderMovable(this.getFrozenHeader().querySelector('colgroup'), this.parent.getFrozenColumns()), mTable.querySelector('thead'));\n };\n return FreezeRender;\n}(HeaderRender));\nexport { FreezeRender };\n","import * as events from '../base/constant';\nimport { RenderType } from '../base/enum';\nimport { parentsUntil } from '../base/util';\nimport { EventHandler } from '@syncfusion/ej2-base';\nimport { FreezeRender, FreezeContentRender } from '../renderer/freeze-renderer';\n/**\n * `Freeze` module is used to handle Frozen rows and columns.\n * @hidden\n */\nvar Freeze = /** @class */ (function () {\n function Freeze(parent, locator) {\n this.parent = parent;\n this.locator = locator;\n this.addEventListener();\n }\n Freeze.prototype.getModuleName = function () {\n return 'freeze';\n };\n Freeze.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.initialLoad, this.instantiateRenderer, this);\n this.parent.on(events.initialEnd, this.wireEvents, this);\n };\n Freeze.prototype.wireEvents = function () {\n if (this.parent.frozenRows) {\n EventHandler.add(this.parent.getHeaderContent(), 'dblclick', this.dblClickHandler, this);\n }\n };\n Freeze.prototype.dblClickHandler = function (e) {\n if (parentsUntil(e.target, 'e-grid').id !== this.parent.element.id) {\n return;\n }\n this.parent.notify(events.dblclick, e);\n };\n Freeze.prototype.instantiateRenderer = function () {\n var renderer = this.locator.getService('rendererFactory');\n if (this.parent.getFrozenColumns()) {\n renderer.addRenderer(RenderType.Header, new FreezeRender(this.parent, this.locator));\n renderer.addRenderer(RenderType.Content, new FreezeContentRender(this.parent, this.locator));\n }\n };\n Freeze.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initialLoad, this.instantiateRenderer);\n };\n Freeze.prototype.destroy = function () {\n this.removeEventListener();\n };\n return Freeze;\n}());\nexport { Freeze };\n","import { EventHandler, closest, Browser, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { createElement, remove } from '@syncfusion/ej2-base';\nimport { ContextMenu as Menu } from '@syncfusion/ej2-navigations';\nimport { parentsUntil } from '../base/util';\nimport * as events from '../base/constant';\nimport { calculatePosition } from '@syncfusion/ej2-popups';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { Group } from '../actions/group';\nimport { Sort } from '../actions/sort';\nimport { Filter } from '../actions/filter';\nimport { Resize } from '../actions/resize';\n/**\n * 'column menu module used to handle column menu actions'\n */\nvar ColumnMenu = /** @class */ (function () {\n function ColumnMenu(parent, serviceLocator) {\n this.defaultItems = {};\n this.localeText = this.setLocaleKey();\n this.disableItems = [];\n this.hiddenItems = [];\n this.isOpen = false;\n // default class names\n this.GROUP = 'e-icon-group';\n this.UNGROUP = 'e-icon-ungroup';\n this.ASCENDING = 'e-icon-ascending';\n this.DESCENDING = 'e-icon-descending';\n this.ROOT = 'e-columnmenu';\n this.FILTER = 'e-icon-filter';\n this.POP = 'e-filter-popup';\n this.WRAP = 'e-col-menu';\n this.CHOOSER = '_chooser_';\n this.parent = parent;\n this.gridID = parent.element.id;\n this.serviceLocator = serviceLocator;\n this.addEventListener();\n }\n ColumnMenu.prototype.wireEvents = function () {\n var _this = this;\n this.getColumnMenuHandlers().forEach(function (ele) {\n EventHandler.add(ele, 'mousedown', _this.columnMenuHandlerDown, _this);\n });\n };\n ColumnMenu.prototype.unwireEvents = function () {\n var _this = this;\n this.getColumnMenuHandlers().forEach(function (ele) {\n EventHandler.remove(ele, 'mousedown', _this.columnMenuHandlerDown);\n });\n };\n /**\n * To destroy the resize\n * @return {void}\n * @hidden\n */\n ColumnMenu.prototype.destroy = function () {\n this.columnMenu.destroy();\n this.removeEventListener();\n this.unwireFilterEvents();\n this.unwireEvents();\n remove(this.element);\n };\n ColumnMenu.prototype.columnMenuHandlerClick = function (e) {\n if (e.target.classList.contains('e-columnmenu')) {\n if ((this.isOpen && this.headerCell !== this.getHeaderCell(e)) || document.querySelector('.e-grid-menu .e-menu-parent.e-ul')) {\n this.columnMenu.close();\n this.openColumnMenu(e);\n }\n else if (!this.isOpen) {\n this.openColumnMenu(e);\n }\n else {\n this.columnMenu.close();\n }\n }\n };\n ColumnMenu.prototype.openColumnMenu = function (e) {\n var pos = { top: 0, left: 0 };\n this.element.style.cssText = 'display:block;visibility:hidden';\n var elePos = this.element.getBoundingClientRect();\n this.element.style.cssText = 'display:none;visibility:visible';\n this.headerCell = this.getHeaderCell(e);\n if (Browser.isDevice) {\n pos.top = ((window.innerHeight / 2) - (elePos.height / 2));\n pos.left = ((window.innerWidth / 2) - (elePos.width / 2));\n }\n else {\n if (this.parent.enableRtl) {\n pos = calculatePosition(this.headerCell, 'left', 'bottom');\n }\n else {\n pos = calculatePosition(this.headerCell, 'right', 'bottom');\n pos.left -= elePos.width;\n }\n }\n this.columnMenu.open(pos.top, pos.left);\n e.preventDefault();\n };\n ColumnMenu.prototype.columnMenuHandlerDown = function (e) {\n this.isOpen = !(this.element.style.display === 'none' || this.element.style.display === '');\n };\n ColumnMenu.prototype.getColumnMenuHandlers = function () {\n return [].slice.call(this.parent.getHeaderTable().querySelectorAll('.' + this.ROOT));\n };\n /**\n * @hidden\n */\n ColumnMenu.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.headerRefreshed, this.wireEvents, this);\n this.parent.on(events.uiUpdate, this.enableAfterRenderMenu, this);\n this.parent.on(events.initialEnd, this.render, this);\n if (this.isFilterItemAdded()) {\n this.parent.on(events.filterDialogCreated, this.filterPosition, this);\n }\n this.parent.on(events.click, this.columnMenuHandlerClick, this);\n };\n /**\n * @hidden\n */\n ColumnMenu.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.headerRefreshed, this.unwireEvents);\n this.parent.off(events.uiUpdate, this.enableAfterRenderMenu);\n this.parent.off(events.initialEnd, this.render);\n if (this.isFilterItemAdded()) {\n this.parent.off(events.filterDialogCreated, this.filterPosition);\n }\n this.parent.off(events.click, this.columnMenuHandlerClick);\n };\n ColumnMenu.prototype.enableAfterRenderMenu = function (e) {\n if (e.module === this.getModuleName() && e.enable) {\n if (this.columnMenu) {\n this.columnMenu.destroy();\n remove(this.element);\n }\n this.render();\n }\n };\n ColumnMenu.prototype.render = function () {\n this.l10n = this.serviceLocator.getService('localization');\n this.element = createElement('ul', { id: this.gridID + '_columnmenu', className: 'e-colmenu' });\n this.parent.element.appendChild(this.element);\n this.columnMenu = new Menu({\n cssClass: 'e-grid-menu',\n enableRtl: this.parent.enableRtl,\n enablePersistence: this.parent.enablePersistence,\n locale: this.parent.locale,\n items: this.getItems(),\n select: this.columnMenuItemClick.bind(this),\n beforeOpen: this.columnMenuBeforeOpen.bind(this),\n onClose: this.columnMenuOnClose.bind(this),\n beforeItemRender: this.beforeMenuItemRender.bind(this),\n beforeClose: this.columnMenuBeforeClose.bind(this)\n });\n this.columnMenu.appendTo(this.element);\n this.wireFilterEvents();\n };\n ColumnMenu.prototype.wireFilterEvents = function () {\n if (!Browser.isDevice && this.isFilterItemAdded()) {\n EventHandler.add(this.element, 'mouseover', this.appendFilter, this);\n }\n };\n ColumnMenu.prototype.unwireFilterEvents = function () {\n if (!Browser.isDevice && this.isFilterItemAdded()) {\n EventHandler.remove(this.element, 'mouseover', this.appendFilter);\n }\n };\n ColumnMenu.prototype.beforeMenuItemRender = function (args) {\n if (this.isChooserItem(args.item)) {\n var field = this.getKeyFromId(args.item.id, this.CHOOSER);\n var column = this.parent.getColumnByField(field);\n var check = createCheckBox(false, {\n label: args.item.text,\n checked: column.visible\n });\n if (this.parent.enableRtl) {\n check.classList.add('e-rtl');\n }\n args.element.innerHTML = '';\n args.element.appendChild(check);\n }\n else if (args.item.id && this.getKeyFromId(args.item.id) === 'Filter') {\n args.element.appendChild(createElement('span', { className: 'e-icons e-caret' }));\n args.element.className += 'e-filter-item e-menu-caret-icon';\n }\n };\n ColumnMenu.prototype.columnMenuBeforeClose = function (args) {\n var colChooser = args.event ? closest(args.event.target, '.e-menu-item') : null;\n if (!isNullOrUndefined(args.parentItem) &&\n this.getKeyFromId(args.parentItem.id) === 'ColumnChooser' &&\n colChooser && this.isChooserItem(colChooser)) {\n args.cancel = true;\n }\n else if (args.event && (closest(args.event.target, '.' + this.POP)\n || (args.event.currentTarget && args.event.currentTarget.activeElement &&\n parentsUntil(args.event.currentTarget.activeElement, 'e-filter-popup'))\n || parentsUntil(args.event.target, 'e-popup') ||\n (parentsUntil(args.event.target, 'e-popup-wrapper')))) {\n args.cancel = true;\n }\n };\n ColumnMenu.prototype.isChooserItem = function (item) {\n return item.id && item.id.indexOf('_colmenu_') >= 0 &&\n this.getKeyFromId(item.id, this.CHOOSER).indexOf('_colmenu_') === -1;\n };\n ColumnMenu.prototype.columnMenuBeforeOpen = function (args) {\n args.column = this.targetColumn = this.getColumn();\n this.parent.trigger(events.columnMenuOpen, args);\n for (var _i = 0, _a = args.items; _i < _a.length; _i++) {\n var item = _a[_i];\n var key = this.getKeyFromId(item.id);\n var dItem = this.defaultItems[key];\n if (this.getDefaultItems().indexOf(key) !== -1) {\n if (this.ensureDisabledStatus(key) && !dItem.hide) {\n this.disableItems.push(item.text);\n }\n else if (item.hide) {\n this.hiddenItems.push(item.text);\n }\n }\n }\n this.columnMenu.enableItems(this.disableItems, false);\n this.columnMenu.hideItems(this.hiddenItems);\n };\n ColumnMenu.prototype.ensureDisabledStatus = function (item) {\n var _this = this;\n var status = false;\n switch (item) {\n case 'Group':\n if (!this.parent.allowGrouping || (this.parent.ensureModuleInjected(Group) && this.targetColumn\n && this.parent.groupSettings.columns.indexOf(this.targetColumn.field) >= 0)) {\n status = true;\n }\n break;\n case 'AutoFitAll':\n case 'AutoFit':\n status = !this.parent.ensureModuleInjected(Resize);\n break;\n case 'Ungroup':\n if (!this.parent.ensureModuleInjected(Group) || (this.parent.ensureModuleInjected(Group) && this.targetColumn\n && this.parent.groupSettings.columns.indexOf(this.targetColumn.field) < 0)) {\n status = true;\n }\n break;\n case 'SortDescending':\n case 'SortAscending':\n if (this.parent.allowSorting && this.parent.ensureModuleInjected(Sort)\n && this.parent.sortSettings.columns.length > 0 && this.targetColumn) {\n this.parent.sortSettings.columns.forEach(function (ele) {\n if (ele.field === _this.targetColumn.field\n && ele.direction.toLocaleLowerCase() === item.toLocaleLowerCase().replace('sort', '')) {\n status = true;\n }\n });\n }\n else if (!this.parent.allowSorting || !this.parent.ensureModuleInjected(Sort)) {\n status = true;\n }\n break;\n case 'Filter':\n status = !(this.parent.allowFiltering && (this.parent.filterSettings.type !== 'FilterBar')\n && this.parent.ensureModuleInjected(Filter));\n }\n return status;\n };\n ColumnMenu.prototype.columnMenuItemClick = function (args) {\n var item = this.isChooserItem(args.item) ? 'ColumnChooser' : this.getKeyFromId(args.item.id);\n switch (item) {\n case 'AutoFit':\n this.parent.autoFitColumns(this.targetColumn.field);\n break;\n case 'AutoFitAll':\n this.parent.autoFitColumns([]);\n break;\n case 'Ungroup':\n this.parent.ungroupColumn(this.targetColumn.field);\n break;\n case 'Group':\n this.parent.groupColumn(this.targetColumn.field);\n break;\n case 'SortAscending':\n this.parent.sortColumn(this.targetColumn.field, 'Ascending');\n break;\n case 'SortDescending':\n this.parent.sortColumn(this.targetColumn.field, 'Descending');\n break;\n case 'ColumnChooser':\n var key = this.getKeyFromId(args.item.id, this.CHOOSER);\n var checkbox = args.element.querySelector('.e-checkbox-wrapper .e-frame');\n if (checkbox && checkbox.classList.contains('e-check')) {\n checkbox.classList.remove('e-check');\n this.parent.hideColumns(key, 'field');\n }\n else if (checkbox) {\n this.parent.showColumns(key, 'field');\n checkbox.classList.add('e-check');\n }\n break;\n case 'Filter':\n this.getFilter(args.element, args.item.id);\n break;\n }\n args.column = this.targetColumn;\n this.parent.trigger(events.columnMenuClick, args);\n };\n ColumnMenu.prototype.columnMenuOnClose = function (args) {\n var parent = 'parentObj';\n if (args.items.length > 0 && args.items[0][parent] instanceof Menu) {\n this.columnMenu.enableItems(this.disableItems);\n this.disableItems = [];\n this.columnMenu.showItems(this.hiddenItems);\n this.hiddenItems = [];\n if (this.isFilterPopupOpen()) {\n this.getFilter(args.element, args.element.id, true);\n }\n }\n };\n ColumnMenu.prototype.getDefaultItems = function () {\n return ['AutoFitAll', 'AutoFit', 'SortAscending', 'SortDescending', 'Group', 'Ungroup', 'ColumnChooser', 'Filter'];\n };\n ColumnMenu.prototype.getItems = function () {\n var items = [];\n var defultItems = this.parent.columnMenuItems ? this.parent.columnMenuItems : this.getDefault();\n for (var _i = 0, defultItems_1 = defultItems; _i < defultItems_1.length; _i++) {\n var item = defultItems_1[_i];\n if (typeof item === 'string') {\n if (item === 'ColumnChooser') {\n var col = this.getDefaultItem(item);\n col.items = this.createChooserItems();\n items.push(col);\n }\n else {\n items.push(this.getDefaultItem(item));\n }\n }\n else {\n items.push(item);\n }\n }\n return items;\n };\n ColumnMenu.prototype.getDefaultItem = function (item) {\n var menuItem = {};\n switch (item) {\n case 'SortAscending':\n menuItem = { iconCss: this.ASCENDING };\n break;\n case 'SortDescending':\n menuItem = { iconCss: this.DESCENDING };\n break;\n case 'Group':\n menuItem = { iconCss: this.GROUP };\n break;\n case 'Ungroup':\n menuItem = { iconCss: this.UNGROUP };\n break;\n case 'Filter':\n menuItem = { iconCss: this.FILTER };\n break;\n }\n this.defaultItems[item] = {\n text: this.getLocaleText(item), id: this.generateID(item),\n iconCss: menuItem.iconCss ? 'e-icons ' + menuItem.iconCss : null\n };\n return this.defaultItems[item];\n };\n ColumnMenu.prototype.getLocaleText = function (item) {\n return this.l10n.getConstant(this.localeText[item]);\n };\n ColumnMenu.prototype.generateID = function (item, append) {\n return this.gridID + '_colmenu_' + (append ? append + item : item);\n };\n ColumnMenu.prototype.getKeyFromId = function (id, append) {\n return id.indexOf('_colmenu_') > 0 &&\n id.replace(this.gridID + '_colmenu_' + (append ? append : ''), '');\n };\n ColumnMenu.prototype.getColumnMenu = function () {\n return this.element;\n };\n ColumnMenu.prototype.getModuleName = function () {\n return 'columnMenu';\n };\n ColumnMenu.prototype.setLocaleKey = function () {\n return {\n 'AutoFitAll': 'autoFitAll',\n 'AutoFit': 'autoFit',\n 'Group': 'Group',\n 'Ungroup': 'Ungroup',\n 'SortAscending': 'SortAscending',\n 'SortDescending': 'SortDescending',\n 'ColumnChooser': 'Columnchooser',\n 'Filter': 'FilterMenu'\n };\n };\n ColumnMenu.prototype.getHeaderCell = function (e) {\n return closest(e.target, 'th.e-headercell');\n };\n ColumnMenu.prototype.getColumn = function () {\n if (this.headerCell) {\n var uid = this.headerCell.querySelector('.e-headercelldiv').getAttribute('e-mappinguid');\n return this.parent.getColumnByUid(uid);\n }\n return null;\n };\n ColumnMenu.prototype.createChooserItems = function () {\n var items = [];\n for (var _i = 0, _a = this.parent.getColumns(); _i < _a.length; _i++) {\n var col = _a[_i];\n if (col.showInColumnChooser && col.field) {\n items.push({ id: this.generateID(col.field, this.CHOOSER), text: col.headerText ? col.headerText : col.field });\n }\n }\n return items;\n };\n ColumnMenu.prototype.appendFilter = function (e) {\n var filter = 'Filter';\n if (!this.defaultItems[filter]) {\n return;\n }\n else {\n var key = this.defaultItems[filter].id;\n if (closest(e.target, '#' + key) && !this.isFilterPopupOpen()) {\n this.getFilter(e.target, key);\n }\n else if (!closest(e.target, '#' + key) && this.isFilterPopupOpen()) {\n this.getFilter(e.target, key, true);\n }\n }\n };\n ColumnMenu.prototype.getFilter = function (target, id, isClose) {\n var filterPopup = this.getFilterPop();\n if (filterPopup) {\n filterPopup.style.display = !Browser.isDevice && isClose ? 'none' : 'block';\n }\n else {\n this.parent.notify(events.filterOpen, {\n col: this.targetColumn, target: target, isClose: isClose, id: id\n });\n }\n };\n ColumnMenu.prototype.setPosition = function (li, ul) {\n var gridPos = this.parent.element.getBoundingClientRect();\n var liPos = li.getBoundingClientRect();\n var left = liPos.left - gridPos.left;\n var top = liPos.top - gridPos.top;\n if (gridPos.height < top) {\n top = top - ul.offsetHeight + liPos.height;\n }\n else if (gridPos.height < top + ul.offsetHeight) {\n top = gridPos.height - ul.offsetHeight;\n }\n if (window.innerHeight < ul.offsetHeight + top + gridPos.top) {\n top = window.innerHeight - ul.offsetHeight - gridPos.top;\n }\n left += (this.parent.enableRtl ? -ul.offsetWidth : liPos.width);\n if (gridPos.width <= left + ul.offsetWidth) {\n left -= liPos.width + ul.offsetWidth;\n }\n else if (left < 0) {\n left += ul.offsetWidth + liPos.width;\n }\n ul.style.top = top + 'px';\n ul.style.left = left + 'px';\n };\n ColumnMenu.prototype.filterPosition = function (e) {\n var filterPopup = this.getFilterPop();\n filterPopup.classList.add(this.WRAP);\n if (!Browser.isDevice) {\n var disp = filterPopup.style.display;\n filterPopup.style.cssText += 'display:block;visibility:hidden';\n var li = this.element.querySelector('.' + this.FILTER);\n if (li) {\n this.setPosition(li.parentElement, filterPopup);\n filterPopup.style.cssText += 'display:' + disp + ';visibility:visible';\n }\n }\n };\n ColumnMenu.prototype.getDefault = function () {\n var items = [];\n if (this.parent.ensureModuleInjected(Resize)) {\n items.push('AutoFitAll');\n items.push('AutoFit');\n }\n if (this.parent.allowGrouping && this.parent.ensureModuleInjected(Group)) {\n items.push('Group');\n items.push('Ungroup');\n }\n if (this.parent.allowSorting && this.parent.ensureModuleInjected(Sort)) {\n items.push('SortAscending');\n items.push('SortDescending');\n }\n items.push('ColumnChooser');\n if (this.parent.allowFiltering && (this.parent.filterSettings.type !== 'FilterBar') &&\n this.parent.ensureModuleInjected(Filter)) {\n items.push('Filter');\n }\n return items;\n };\n ColumnMenu.prototype.isFilterPopupOpen = function () {\n var filterPopup = this.getFilterPop();\n return filterPopup && filterPopup.style.display !== 'none';\n };\n ColumnMenu.prototype.getFilterPop = function () {\n return this.parent.element.querySelector('.' + this.POP);\n };\n ColumnMenu.prototype.isFilterItemAdded = function () {\n return (this.parent.columnMenuItems &&\n this.parent.columnMenuItems.indexOf('Filter') >= 0) || !this.parent.columnMenuItems;\n };\n return ColumnMenu;\n}());\nexport { ColumnMenu };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DataManager, Query, Predicate, DataUtil } from '@syncfusion/ej2-data';\nimport { initForeignKeyColumn, getForeignKeyData, generateQuery } from '../base/constant';\nimport { getDatePredicate } from '../base/util';\nimport { Data } from './data';\n/**\n * `ForeignKey` module is used to handle foreign key column's actions.\n */\nvar ForeignKey = /** @class */ (function (_super) {\n __extends(ForeignKey, _super);\n function ForeignKey(parent, serviceLocator) {\n var _this = _super.call(this, parent, serviceLocator) || this;\n _this.parent = parent;\n _this.serviceLocator = serviceLocator;\n _this.initEvent();\n return _this;\n }\n ForeignKey.prototype.initEvent = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(initForeignKeyColumn, this.initForeignKeyColumns, this);\n this.parent.on(getForeignKeyData, this.getForeignKeyData, this);\n this.parent.on(generateQuery, this.generateQueryFormData, this);\n };\n ForeignKey.prototype.initForeignKeyColumns = function (columns) {\n columns.forEach(function (column) {\n column.dataSource = (column.dataSource instanceof DataManager ? column.dataSource :\n (isNullOrUndefined(column.dataSource) ? new DataManager() : new DataManager(column.dataSource)));\n });\n };\n ForeignKey.prototype.getForeignKeyData = function (args) {\n var _this = this;\n var foreignColumns = args.column ? [args.column] : this.parent.getForeignKeyColumns();\n var allPromise = [];\n foreignColumns.forEach(function (col) {\n var promise;\n var query = args.isComplex ? _this.genarateColumnQuery(col) :\n _this.genarateQuery(col, args.result.result, false, true);\n var dataSource = col.dataSource;\n if (!dataSource.ready || dataSource.dataSource.offline) {\n promise = dataSource.executeQuery(query);\n }\n else {\n promise = dataSource.ready.then(function () {\n return dataSource.executeQuery(query);\n });\n }\n allPromise.push(promise);\n });\n Promise.all(allPromise).then(function (responses) {\n responses.forEach(function (data, index) {\n foreignColumns[index].columnData = data.result;\n });\n args.promise.resolve(args.result);\n }).catch(function (e) {\n if (args.promise && args.promise.reject) {\n args.promise.reject(e);\n }\n return e;\n });\n };\n ForeignKey.prototype.generateQueryFormData = function (args) {\n args.predicate.predicate = this.genarateQuery(args.column, args.column.columnData, true);\n };\n ForeignKey.prototype.genarateQuery = function (column, e, fromData, needQuery) {\n var gObj = this.parent;\n var predicates = [];\n var predicate;\n var query = new Query();\n var field = fromData ? column.foreignKeyField : column.field;\n if (gObj.allowPaging || gObj.enableVirtualization || fromData) {\n e = new DataManager(((gObj.allowGrouping && gObj.groupSettings.columns.length) ?\n e.records : e)).executeLocal(new Query().select(field));\n var filteredValue = DataUtil.distinct(e, field, false);\n field = fromData ? column.field : column.foreignKeyField;\n filteredValue.forEach(function (obj) {\n if (obj && obj.getDay) {\n predicates.push(getDatePredicate({ field: field, operator: 'equal', value: obj, matchCase: false }));\n }\n else {\n predicates.push(new Predicate(field, 'equal', obj, false));\n }\n });\n }\n if (needQuery) {\n return predicates.length ? query.where(Predicate.or(predicates)) : query;\n }\n predicate = (predicates.length ? Predicate.or(predicates) : { predicates: [] });\n return predicate;\n };\n ForeignKey.prototype.genarateColumnQuery = function (column) {\n var gObj = this.parent;\n var query = gObj.query.clone();\n var predicate = [];\n var queryColumn = this.isFiltered(column);\n if (queryColumn.isTrue) {\n query = this.filterQuery(query, queryColumn.column, true);\n }\n if (gObj.searchSettings.key.length) {\n var sSettings = gObj.searchSettings;\n query.search(sSettings.key, column.foreignKeyValue, sSettings.operator, sSettings.ignoreCase);\n }\n return query;\n };\n ForeignKey.prototype.isFiltered = function (column) {\n var filterColumn = this.parent.filterSettings.columns.filter(function (fColumn) {\n return (fColumn.field === column.foreignKeyValue);\n });\n return {\n column: filterColumn, isTrue: !!filterColumn.length\n };\n };\n ForeignKey.prototype.getModuleName = function () {\n return 'foreignKey';\n };\n ForeignKey.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n this.destroyEvent();\n };\n ForeignKey.prototype.destroyEvent = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(initForeignKeyColumn, this.initForeignKeyColumns);\n this.parent.off(getForeignKeyData, this.getForeignKeyData);\n this.parent.off(generateQuery, this.generateQueryFormData);\n };\n return ForeignKey;\n}(Data));\nexport { ForeignKey };\n","import * as index from '@syncfusion/ej2-grids';\nindex.Grid.Inject( index.Filter,index.Page,index.Selection,index.Sort,index.Group,index.Reorder,index.RowDD,index.DetailRow,index.Toolbar,index.Aggregate,index.Search,index.VirtualScroll,index.Edit,index.Resize,index.ExcelExport,index.PdfExport,index.CommandColumn,index.ContextMenu,index.Freeze,index.ColumnMenu,index.ColumnChooser,index.ForeignKey);\nexport * from '@syncfusion/ej2-grids';\n","/**\n * Specifies HeatMaps Themes\n */\nexport var Theme;\n(function (Theme) {\n /** @private */\n Theme.heatMapTitleFont = {\n size: '15px',\n fontWeight: '500',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Segoe UI'\n };\n /** @private */\n Theme.axisTitleFont = {\n size: '12px',\n fontWeight: 'Normal',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Segoe UI'\n };\n /** @private */\n Theme.axisLabelFont = {\n size: '12px',\n fontWeight: 'Normal',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Segoe UI'\n };\n /** @private */\n Theme.legendLabelFont = {\n size: '12px',\n fontWeight: 'Normal',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Segoe UI',\n textOverflow: 'None',\n };\n /** @private */\n Theme.rectLabelFont = {\n size: '12px',\n fontWeight: 'Normal',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Segoe UI',\n textOverflow: 'None',\n };\n})(Theme || (Theme = {}));\n/** @private */\nexport function getThemeColor(theme) {\n var style;\n switch (theme) {\n case 'Highcontrast':\n style = {\n heatMapTitle: '#ffffff',\n axisTitle: '#ffffff',\n axisLabel: '#ffffff',\n cellBorder: '#EEEEEE',\n background: '#000000',\n cellTextColor: '#000000',\n emptyCellColor: '#EEEEEE',\n legendLabel: '#ffffff',\n palette: [{ 'color': '#BEE7EE' },\n { 'color': '#85c4cf' },\n { 'color': '#4CA1AF' }]\n };\n break;\n default:\n style = {\n heatMapTitle: '#424242',\n axisTitle: '#424242',\n axisLabel: '#686868',\n cellBorder: '#EEEEEE',\n cellTextColor: '#000000',\n background: '#FFFFFF',\n emptyCellColor: '#EEEEEE',\n legendLabel: '#353535',\n palette: [{ 'color': '#BEE7EE' },\n { 'color': '#85c4cf' },\n { 'color': '#4CA1AF' }]\n };\n break;\n }\n return style;\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, Complex } from '@syncfusion/ej2-base';\n/**\n * Configures the fonts in heat map.\n */\nvar Font = /** @class */ (function (_super) {\n __extends(Font, _super);\n function Font() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('16px')\n ], Font.prototype, \"size\", void 0);\n __decorate([\n Property('')\n ], Font.prototype, \"color\", void 0);\n __decorate([\n Property('Segoe UI')\n ], Font.prototype, \"fontFamily\", void 0);\n __decorate([\n Property('Normal')\n ], Font.prototype, \"fontWeight\", void 0);\n __decorate([\n Property('Normal')\n ], Font.prototype, \"fontStyle\", void 0);\n __decorate([\n Property('Center')\n ], Font.prototype, \"textAlignment\", void 0);\n __decorate([\n Property('Trim')\n ], Font.prototype, \"textOverflow\", void 0);\n return Font;\n}(ChildProperty));\nexport { Font };\n/**\n * Configures the heat map margins.\n */\nvar Margin = /** @class */ (function (_super) {\n __extends(Margin, _super);\n function Margin() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(10)\n ], Margin.prototype, \"left\", void 0);\n __decorate([\n Property(10)\n ], Margin.prototype, \"right\", void 0);\n __decorate([\n Property(10)\n ], Margin.prototype, \"top\", void 0);\n __decorate([\n Property(10)\n ], Margin.prototype, \"bottom\", void 0);\n return Margin;\n}(ChildProperty));\nexport { Margin };\n/**\n * Configures the borders in the heat map.\n */\nvar Border = /** @class */ (function (_super) {\n __extends(Border, _super);\n function Border() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Border.prototype, \"color\", void 0);\n __decorate([\n Property(1)\n ], Border.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], Border.prototype, \"radius\", void 0);\n return Border;\n}(ChildProperty));\nexport { Border };\n/**\n * class used to maintain Title styles.\n */\nvar Title = /** @class */ (function (_super) {\n __extends(Title, _super);\n function Title() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Title.prototype, \"text\", void 0);\n __decorate([\n Complex({}, Font)\n ], Title.prototype, \"textStyle\", void 0);\n return Title;\n}(ChildProperty));\nexport { Title };\n/**\n * class used to maintain palette information.\n */\nvar PaletteCollection = /** @class */ (function (_super) {\n __extends(PaletteCollection, _super);\n function PaletteCollection() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], PaletteCollection.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], PaletteCollection.prototype, \"color\", void 0);\n __decorate([\n Property(null)\n ], PaletteCollection.prototype, \"label\", void 0);\n return PaletteCollection;\n}(ChildProperty));\nexport { PaletteCollection };\n/**\n * Internal class used to maintain colorcollection.\n */\nvar ColorCollection = /** @class */ (function () {\n function ColorCollection(value, color) {\n this.value = value;\n this.color = color;\n }\n return ColorCollection;\n}());\nexport { ColorCollection };\n/**\n * Internal class used to maintain legend colorcollection.\n */\nvar LegendColorCollection = /** @class */ (function () {\n function LegendColorCollection(value, color, label, isHidden) {\n this.value = value;\n this.color = color;\n this.label = label;\n this.isHidden = isHidden;\n }\n return LegendColorCollection;\n}());\nexport { LegendColorCollection };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, extend, ChildProperty, Collection, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { ColorCollection, LegendColorCollection, PaletteCollection } from '../model/base';\nimport { PaletterColor } from './helper';\n/**\n * Configures the color property in Heatmap.\n */\nvar PaletteSettings = /** @class */ (function (_super) {\n __extends(PaletteSettings, _super);\n function PaletteSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Collection([{}], PaletteCollection)\n ], PaletteSettings.prototype, \"palette\", void 0);\n __decorate([\n Property('Gradient')\n ], PaletteSettings.prototype, \"type\", void 0);\n __decorate([\n Property('')\n ], PaletteSettings.prototype, \"emptyPointColor\", void 0);\n return PaletteSettings;\n}(ChildProperty));\nexport { PaletteSettings };\n/**\n * Helper class for colormapping\n */\nvar RgbColor = /** @class */ (function () {\n function RgbColor(r, g, b) {\n this.R = r;\n this.G = g;\n this.B = b;\n }\n return RgbColor;\n}());\nexport { RgbColor };\nvar CellColor = /** @class */ (function () {\n function CellColor(heatMap) {\n this.heatMap = heatMap;\n }\n /**\n * To convert hexa color to RGB.\n * @return {RGB}\n * @private\n */\n CellColor.prototype.convertToRGB = function (value, colorMapping) {\n var previousOffset = colorMapping[0].value;\n var nextOffset = 0;\n for (var i = 1; i < colorMapping.length; i++) {\n var offset = Number(colorMapping[i].value);\n if (value <= offset) {\n nextOffset = offset;\n break;\n }\n else {\n nextOffset = offset;\n previousOffset = offset;\n }\n }\n var percent = 0;\n var full = nextOffset - previousOffset;\n percent = (value - previousOffset) / full;\n var previousColor = this.getEqualColor(colorMapping, previousOffset);\n var nextColor = this.getEqualColor(colorMapping, nextOffset);\n return this.getPercentageColor(percent, previousColor, nextColor);\n };\n /**\n * To convert RGB to HEX.\n * @return {string}\n * @private\n */\n CellColor.prototype.rgbToHex = function (r, g, b) {\n return '#' + this.componentToHex(r) + this.componentToHex(g) + this.componentToHex(b);\n };\n /**\n * To convert Component to HEX.\n * @return {string}\n * @private\n */\n CellColor.prototype.componentToHex = function (c) {\n var hex = c.toString(16);\n return hex.length === 1 ? '0' + hex : hex;\n };\n /**\n * To get similar color.\n * @return {string}\n * @private\n */\n CellColor.prototype.getEqualColor = function (list, offset) {\n for (var i = 0; i < list.length; i++) {\n if (Number(list[i].value) === offset) {\n var color = list[i].color;\n if (color.indexOf('rgb') !== -1) {\n color = this.convertToHex(color);\n }\n else if (color.indexOf('#') === -1) {\n color = '#FFFFFF';\n }\n return color;\n }\n }\n return '#00000';\n };\n /**\n * To convert RGB to HEX.\n * @return {string}\n * @private\n */\n CellColor.prototype.convertToHex = function (color) {\n var itemColor = color.substr(3);\n itemColor = itemColor.split('(')[1].split(')')[0];\n var colorSplit = itemColor.split(',');\n itemColor = this.rgbToHex(parseInt(colorSplit[0], 10), parseInt(colorSplit[1], 10), parseInt(colorSplit[2], 10));\n return itemColor;\n };\n /**\n * To get RGB for percentage value.\n * @return {RGB}\n * @private\n */\n CellColor.prototype.getPercentageColor = function (percent, previous, next) {\n var nextColor = next.split('#')[1];\n var prevColor = previous.split('#')[1];\n var r = this.getPercentage(percent, parseInt(prevColor.substr(0, 2), 16), parseInt(nextColor.substr(0, 2), 16));\n var g = this.getPercentage(percent, parseInt(prevColor.substr(2, 2), 16), parseInt(nextColor.substr(2, 2), 16));\n var b = this.getPercentage(percent, parseInt(prevColor.substr(4, 2), 16), parseInt(nextColor.substr(4, 2), 16));\n return new RgbColor(r, g, b);\n };\n /**\n * To convert numbet to percentage.\n * @return {RGB}\n * @private\n */\n CellColor.prototype.getPercentage = function (percent, previous, next) {\n var full = next - previous;\n return Math.round((previous + (full * percent)));\n };\n /**\n * To get complete color Collection.\n * @private\n */\n CellColor.prototype.getColorCollection = function () {\n this.heatMap.colorCollection = [];\n this.heatMap.legendColorCollection = [];\n var range;\n this.heatMap.emptyPointColor = this.heatMap.paletteSettings.emptyPointColor ? this.heatMap.paletteSettings.emptyPointColor :\n this.heatMap.themeStyle.emptyCellColor;\n var tempcolorMapping = this.orderbyOffset(this.heatMap.paletteSettings.palette && this.heatMap.paletteSettings.palette.length > 1 ?\n this.heatMap.paletteSettings.palette : this.heatMap.themeStyle.palette);\n if (!tempcolorMapping.isCompact) {\n if (this.heatMap.paletteSettings.type === 'Gradient') {\n range = (this.heatMap.dataSourceMaxValue - this.heatMap.dataSourceMinValue) / (tempcolorMapping.offsets.length - 1);\n }\n else {\n range = (this.heatMap.dataSourceMaxValue - this.heatMap.dataSourceMinValue) / (tempcolorMapping.offsets.length);\n }\n if (tempcolorMapping.offsets.length >= 2) {\n for (var index = 0; index < tempcolorMapping.offsets.length; index++) {\n this.heatMap.colorCollection.push(new ColorCollection(Math.round(((this.heatMap.dataSourceMinValue) + (index * range)) * 100) / 100, tempcolorMapping.offsets[index].color));\n this.heatMap.legendColorCollection.push(new LegendColorCollection(Math.round(((this.heatMap.dataSourceMinValue) + (index * range)) * 100) / 100, tempcolorMapping.offsets[index].color, tempcolorMapping.offsets[index].label, false));\n }\n }\n }\n else {\n this.heatMap.colorCollection = tempcolorMapping.offsets;\n this.heatMap.legendColorCollection = extend([], tempcolorMapping.offsets, null, true);\n }\n this.updateLegendColorCollection();\n };\n /**\n * To update legend color Collection.\n * @private\n */\n CellColor.prototype.updateLegendColorCollection = function () {\n if (this.heatMap.dataSourceMinValue < this.heatMap.legendColorCollection[0].value) {\n this.heatMap.legendColorCollection.unshift(new LegendColorCollection(this.heatMap.dataSourceMinValue, this.heatMap.legendColorCollection[0].color, this.heatMap.legendColorCollection[0].label, true));\n }\n if (this.heatMap.dataSourceMaxValue > this.heatMap.legendColorCollection[this.heatMap.legendColorCollection.length - 1].value) {\n this.heatMap.legendColorCollection.push(new LegendColorCollection(this.heatMap.dataSourceMaxValue, this.heatMap.legendColorCollection[this.heatMap.legendColorCollection.length - 1].color, this.heatMap.legendColorCollection[this.heatMap.legendColorCollection.length - 1].label, true));\n }\n };\n /**\n * To get ordered palette color collection.\n * @private\n */\n CellColor.prototype.orderbyOffset = function (offsets) {\n var returnCollection = new PaletterColor();\n var key = 'value';\n returnCollection.isCompact = true;\n // tslint:disable-next-line:no-any \n returnCollection.offsets = offsets.sort(function (a, b) {\n if (!isNullOrUndefined(a[key]) && !isNullOrUndefined(b[key])) {\n return a[key] - b[key];\n }\n else {\n returnCollection.isCompact = false;\n return a;\n }\n });\n if (!returnCollection.isCompact) {\n returnCollection.offsets = this.heatMap.paletteSettings.palette && this.heatMap.paletteSettings.palette.length > 1 ?\n this.heatMap.paletteSettings.palette : this.heatMap.themeStyle.palette;\n }\n return returnCollection;\n };\n /**\n * To get color depends to value.\n * @private\n */\n CellColor.prototype.getColorByValue = function (text) {\n var color = '';\n var rbg;\n var compareValue = 0;\n if (text.toString() !== '') {\n if (this.heatMap.paletteSettings.type === 'Fixed') {\n for (var y = 0; y < this.heatMap.colorCollection.length; y++) {\n compareValue = this.heatMap.colorCollection[y + 1] ? this.heatMap.colorCollection[y + 1].value :\n this.heatMap.colorCollection[y].value;\n if (text < compareValue || (text >= compareValue && y === this.heatMap.colorCollection.length - 1)) {\n color = this.heatMap.colorCollection[y].color;\n break;\n }\n }\n }\n else {\n if (text < this.heatMap.colorCollection[0].value) {\n color = this.heatMap.colorCollection[0].color;\n }\n else if (text > this.heatMap.colorCollection[this.heatMap.colorCollection.length - 1].value) {\n color = this.heatMap.colorCollection[this.heatMap.colorCollection.length - 1].color;\n }\n else {\n rbg = this.convertToRGB(text, this.heatMap.colorCollection);\n color = this.rgbToHex(rbg.R, rbg.G, rbg.B);\n }\n }\n }\n else {\n color = this.heatMap.emptyPointColor;\n }\n return color;\n };\n return CellColor;\n}());\nexport { CellColor };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/**\n * HeatMap Axis file\n */\nimport { Property, Complex, ChildProperty, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DataUtil } from '@syncfusion/ej2-data';\nimport { Font, Title } from '../model/base';\nimport { Theme } from '../model/theme';\nimport { Rect, measureText, Size, rotateTextSize, increaseDateTimeInterval } from '../utils/helper';\nvar Axis = /** @class */ (function (_super) {\n __extends(Axis, _super);\n function Axis() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** @private */\n _this.rect = new Rect(undefined, undefined, 0, 0);\n /** @private */\n _this.nearSizes = [];\n /** @private */\n _this.farSizes = [];\n /** @private */\n _this.maxLabelSize = new Size(0, 0);\n /** @private */\n _this.titleSize = new Size(0, 0);\n /** @private */\n _this.axisLabels = [];\n /** @private */\n _this.tooltipLabels = [];\n /** @private */\n _this.labelValue = [];\n /** @private */\n _this.axisLabelSize = 0;\n /** @private */\n _this.axisLabelInterval = 0;\n /** @private */\n _this.maxLength = 0;\n /** @private */\n _this.min = 0;\n /** @private */\n _this.max = 0;\n return _this;\n }\n /**\n * measure the axis title and label size\n * @param axis\n * @param heatmap\n * @private\n */\n Axis.prototype.computeSize = function (axis, heatmap) {\n var width = 0;\n var innerPadding = 10;\n this.titleSize = axis.getTitleSize(axis, innerPadding);\n this.maxLabelSize = axis.getMaxLabelSize(axis, heatmap);\n };\n Axis.prototype.getTitleSize = function (axis, innerPadding) {\n var titleSize = new Size(0, 0);\n if (this.title.text) {\n titleSize = measureText(this.title.text, this.title.textStyle);\n titleSize.height += innerPadding;\n }\n if (axis.opposedPosition) {\n this.farSizes.push(titleSize.height);\n }\n else {\n this.nearSizes.push(titleSize.height);\n }\n return titleSize;\n };\n Axis.prototype.getMaxLabelSize = function (axis, heatmap) {\n var labelSize = new Size(0, 0);\n var labels = this.axisLabels;\n axis.angle = axis.labelRotation;\n if (axis.orientation === 'Horizontal' && axis.labelIntersectAction === 'Rotate45') {\n var interval = heatmap.initialClipRect.width / axis.axisLabels.length;\n var startX = heatmap.initialClipRect.x + ((!axis.isInversed) ? 0 : heatmap.initialClipRect.width);\n var previousEnd = void 0;\n for (var i = 0, len = labels.length; i < len; i++) {\n var label = labels[i];\n var elementSize = measureText(label, axis.textStyle);\n var startPoint = startX + (!axis.isInversed ?\n ((interval - elementSize.width) / 2) : -((interval + elementSize.width) / 2));\n startPoint = startPoint < heatmap.initialClipRect.x ? heatmap.initialClipRect.x : startPoint;\n var endPoint = startPoint + elementSize.width;\n if (isNullOrUndefined(previousEnd)) {\n previousEnd = endPoint;\n }\n else {\n if (startPoint < previousEnd) {\n axis.angle = 45;\n break;\n }\n previousEnd = endPoint;\n }\n startX += axis.isInversed ? -interval : interval;\n }\n }\n for (var i = 0; i < labels.length; i++) {\n var size = (axis.angle === 0) ?\n measureText(labels[i], axis.textStyle) : rotateTextSize(axis.textStyle, labels[i], axis.angle);\n labelSize.width = (labelSize.width > size.width) ? labelSize.width : size.width;\n labelSize.height = (labelSize.height > size.height) ? labelSize.height : size.height;\n }\n if (axis.opposedPosition) {\n this.farSizes.push((axis.orientation === 'Horizontal') ? labelSize.height : labelSize.width);\n }\n else {\n this.nearSizes.push((axis.orientation === 'Horizontal') ? labelSize.height : labelSize.width);\n }\n return labelSize;\n };\n /**\n * Generate the axis lables for numeric axis\n * @param heatmap\n * @private\n */\n Axis.prototype.calculateNumericAxisLabels = function (heatmap) {\n //Axis Min\n var min = 0;\n var max = 0;\n var interval = this.interval ? this.interval : 1;\n var adaptorMin;\n var adaptorMax;\n if (heatmap.adaptorModule && heatmap.isCellData) {\n adaptorMin = this.orientation === 'Horizontal' ?\n heatmap.adaptorModule.adaptiveXMinMax.min : heatmap.adaptorModule.adaptiveYMinMax.min;\n adaptorMax = this.orientation === 'Horizontal' ?\n heatmap.adaptorModule.adaptiveXMinMax.max : heatmap.adaptorModule.adaptiveYMinMax.max;\n }\n min = !isNullOrUndefined(this.minimum) ? this.minimum : ((adaptorMin) ? adaptorMin : 0);\n max = !isNullOrUndefined(this.maximum) ? this.maximum : ((adaptorMax) ? adaptorMax : this.maxLength);\n var temp;\n if (this.minimum && this.maximum && min > max) {\n temp = min;\n min = max;\n max = temp;\n }\n max = !isNullOrUndefined(this.maximum) ? max : (adaptorMax ? adaptorMax : (max + min));\n var format = this.labelFormat;\n var isCustom = format.match('{value}') !== null;\n this.format = heatmap.intl.getNumberFormat({\n format: isCustom ? '' : format\n });\n for (var i = min; i <= max; i = i + interval) {\n var value = this.formatValue(isCustom, format, i);\n this.axisLabels.push(value);\n }\n this.min = 0;\n this.axisLabelSize = (max - min) + 1;\n this.max = this.axisLabelSize - 1;\n this.axisLabelInterval = interval;\n for (var i = min; i <= max; i++) {\n var value = this.formatValue(isCustom, format, i);\n this.tooltipLabels.push(value);\n this.labelValue.push(i);\n }\n };\n /**\n * Generate the axis lables for category axis\n * @private\n */\n Axis.prototype.calculateCategoryAxisLabels = function () {\n var labels = this.labels ? this.labels : [];\n var min = !isNullOrUndefined(this.minimum) ? this.minimum : 0;\n var max = !isNullOrUndefined(this.maximum) ? this.maximum : this.maxLength;\n var interval = this.interval ? this.interval : 1;\n var temp;\n if (!isNullOrUndefined(this.minimum) && !isNullOrUndefined(this.maximum) && min > max) {\n temp = min;\n min = max;\n max = temp;\n }\n if (labels && labels.length > 0) {\n for (var i = min; i <= max; i = i + interval) {\n var value = labels[i] ? labels[i].toString() : i.toString();\n this.axisLabels.push(value);\n }\n }\n else {\n for (var i = min; i <= max; i = i + interval) {\n this.axisLabels.push(i.toString());\n }\n }\n for (var i = min; i <= max; i++) {\n this.tooltipLabels.push(labels[i] ? labels[i].toString() : i.toString());\n this.labelValue.push(labels[i] ? labels[i].toString() : i.toString());\n }\n this.min = min;\n this.max = max;\n this.axisLabelSize = max - min + 1;\n this.axisLabelInterval = interval;\n };\n /**\n * Generate the axis labels for date time axis.\n * @param heatmap\n * @private\n */\n Axis.prototype.calculateDateTimeAxisLabel = function (heatmap) {\n var interval = this.interval ? this.interval : 1;\n var option = {\n skeleton: 'full',\n type: 'dateTime'\n };\n var dateParser = heatmap.intl.getDateParser(option);\n var dateFormatter = heatmap.intl.getDateFormat(option);\n var min;\n var max;\n var adaptorMin = null;\n var adaptorMax = null;\n if (heatmap.adaptorModule && heatmap.isCellData) {\n adaptorMin = this.orientation === 'Horizontal' ? heatmap.adaptorModule.adaptiveXMinMax.min :\n heatmap.adaptorModule.adaptiveYMinMax.min;\n adaptorMax = this.orientation === 'Horizontal' ? heatmap.adaptorModule.adaptiveXMinMax.max :\n heatmap.adaptorModule.adaptiveYMinMax.max;\n }\n var minimum = this.minimum ? this.minimum : (adaptorMin ? adaptorMin : null);\n var maximum = this.maximum ? this.maximum : (adaptorMax ? adaptorMax : null);\n if (minimum === null && maximum === null) {\n min = 0;\n max = this.maxLength;\n for (var i = min; i <= max; i = i + interval) {\n this.axisLabels.push(i.toString());\n this.tooltipLabels.push(i.toString());\n this.labelValue.push(i.toString());\n }\n this.min = 0;\n this.max = this.maxLength;\n this.axisLabelSize = (max - min) + 1;\n this.axisLabelInterval = interval;\n }\n else {\n if (minimum !== null && maximum === null) {\n min = Date.parse(dateParser(dateFormatter(new Date(DataUtil.parse.parseJson({ val: minimum }).val))));\n max = increaseDateTimeInterval(min, this.maxLength, this.intervalType).getTime();\n }\n else if (minimum === null && maximum !== null) {\n max = Date.parse(dateParser(dateFormatter(new Date(DataUtil.parse.parseJson({ val: maximum }).val))));\n min = increaseDateTimeInterval(max, -this.maxLength, this.intervalType).getTime();\n }\n else {\n min = Date.parse(dateParser(dateFormatter(new Date(DataUtil.parse.parseJson({ val: minimum }).val))));\n max = Date.parse(dateParser(dateFormatter(new Date(DataUtil.parse.parseJson({ val: maximum }).val))));\n }\n this.format = heatmap.intl.getDateFormat({\n format: this.labelFormat, skeleton: this.getSkeleton()\n });\n var tempInterval = min;\n while (tempInterval <= max) {\n var value = this.format(new Date(tempInterval));\n this.axisLabels.push(value);\n tempInterval = increaseDateTimeInterval(tempInterval, interval, this.intervalType).getTime();\n }\n this.min = 0;\n this.axisLabelInterval = interval;\n this.axisLabelSize = this.getTotalLabelLength(min, max); // this.tooltipLabels.length;\n this.max = this.axisLabelSize - 1;\n tempInterval = min;\n while (tempInterval <= max) {\n var value = this.format(new Date(tempInterval));\n this.tooltipLabels.push(value);\n this.labelValue.push(new Date(tempInterval));\n tempInterval = increaseDateTimeInterval(tempInterval, 1, this.intervalType).getTime();\n }\n }\n };\n Axis.prototype.getSkeleton = function () {\n var skeleton;\n if (this.intervalType === 'Years') {\n skeleton = 'yMMM';\n }\n else if (this.intervalType === 'Months') {\n skeleton = 'MMMd';\n }\n else if (this.intervalType === 'Days') {\n skeleton = 'yMd';\n }\n else if (this.intervalType === 'Hours') {\n skeleton = 'EHm';\n }\n else if (this.intervalType === 'Minutes') {\n skeleton = 'Hms';\n }\n else {\n skeleton = 'Hms';\n }\n return skeleton;\n };\n /**\n * Formatted the axis label.\n * @private\n */\n Axis.prototype.formatValue = function (isCustom, format, tempInterval) {\n return isCustom ? format.replace('{value}', this.format(tempInterval))\n : this.format(tempInterval);\n };\n /** @private */\n Axis.prototype.getTotalLabelLength = function (min, max) {\n var length = 0;\n var minimum = new Date(min);\n var maximum = new Date(max);\n var difference;\n var days;\n switch (this.intervalType) {\n case 'Years':\n var years = (maximum.getFullYear() - minimum.getFullYear()) + 1;\n length = years;\n break;\n case 'Months':\n var months = (maximum.getFullYear() - minimum.getFullYear()) * 12;\n months -= minimum.getMonth();\n months += maximum.getMonth() + 1;\n length = months <= 0 ? 1 : months;\n break;\n case 'Days':\n difference = Math.abs(minimum.getTime() - maximum.getTime());\n days = Math.ceil(difference / (1000 * 3600 * 24));\n length = days + 1;\n break;\n case 'Hours':\n difference = Math.abs(minimum.getTime() - maximum.getTime());\n var hours = Math.ceil(difference / (1000 * 3600));\n length = hours + 1;\n break;\n case 'Minutes':\n difference = Math.abs(minimum.getTime() - maximum.getTime());\n var minutes = Math.ceil(difference / (1000 * 60));\n length = minutes + 1;\n break;\n }\n return length;\n };\n __decorate([\n Complex({ text: '', textStyle: Theme.axisTitleFont }, Title)\n ], Axis.prototype, \"title\", void 0);\n __decorate([\n Property(false)\n ], Axis.prototype, \"opposedPosition\", void 0);\n __decorate([\n Property(null)\n ], Axis.prototype, \"labels\", void 0);\n __decorate([\n Complex(Theme.axisLabelFont, Font)\n ], Axis.prototype, \"textStyle\", void 0);\n __decorate([\n Property(0)\n ], Axis.prototype, \"labelRotation\", void 0);\n __decorate([\n Property(false)\n ], Axis.prototype, \"isInversed\", void 0);\n __decorate([\n Property('Category')\n ], Axis.prototype, \"valueType\", void 0);\n __decorate([\n Property(null)\n ], Axis.prototype, \"minimum\", void 0);\n __decorate([\n Property(null)\n ], Axis.prototype, \"maximum\", void 0);\n __decorate([\n Property(null)\n ], Axis.prototype, \"interval\", void 0);\n __decorate([\n Property('')\n ], Axis.prototype, \"labelFormat\", void 0);\n __decorate([\n Property('Days')\n ], Axis.prototype, \"intervalType\", void 0);\n __decorate([\n Property('Trim')\n ], Axis.prototype, \"labelIntersectAction\", void 0);\n return Axis;\n}(ChildProperty));\nexport { Axis };\n","import { Rect, measureText, TextOption, rotateTextSize, textTrim, CanvasTooltip } from '../utils/helper';\nimport { sum, titlePositionX, LineOption, Line, DrawSvgCanvas, TextBasic, titlePositionY } from '../utils/helper';\nimport { extend, Browser } from '@syncfusion/ej2-base';\nvar AxisHelper = /** @class */ (function () {\n function AxisHelper(heatMap) {\n this.heatMap = heatMap;\n this.padding = 10;\n this.drawSvgCanvas = new DrawSvgCanvas(heatMap);\n }\n AxisHelper.prototype.renderAxes = function () {\n this.initialClipRect = this.heatMap.initialClipRect;\n var heatMap = this.heatMap;\n var axisElement;\n var element;\n if (!heatMap.enableCanvasRendering) {\n axisElement = this.heatMap.renderer.createGroup({ id: heatMap.element.id + 'AxisCollection' });\n }\n var axes = this.heatMap.axisCollections;\n for (var i = 0, len = axes.length; i < len; i++) {\n var axis = axes[i];\n var optionsLine = {};\n if (axis.orientation === 'Horizontal') {\n if (!heatMap.enableCanvasRendering) {\n element = this.heatMap.renderer.createGroup({ id: heatMap.element.id + 'XAxisGroup' });\n }\n this.drawXAxisLine(element, axis);\n this.drawXAxisTitle(axis, element, axis.rect);\n this.drawXAxisLabels(axis, element, axis.rect);\n }\n else {\n element = heatMap.renderer.createGroup({ id: heatMap.element.id + 'YAxisGroup' });\n this.drawYAxisLine(element, axis);\n this.drawYAxisTitle(axis, element, axis.rect);\n this.drawYAxisLabels(axis, element, axis.rect);\n }\n if (!heatMap.enableCanvasRendering) {\n axisElement.appendChild(element);\n }\n }\n if (!heatMap.enableCanvasRendering) {\n this.heatMap.svgObject.appendChild(axisElement);\n }\n };\n AxisHelper.prototype.drawXAxisLine = function (parent, axis) {\n var y = this.initialClipRect.y + (!axis.opposedPosition ? this.initialClipRect.height : 0);\n var line = new LineOption(this.heatMap.element.id + '_XAxisLine', new Line(this.initialClipRect.x, y, this.initialClipRect.x + this.initialClipRect.width, y), 'transparent', 0);\n this.drawSvgCanvas.drawLine(line, parent);\n };\n AxisHelper.prototype.drawYAxisLine = function (parent, axis) {\n var x = this.initialClipRect.x + ((!axis.opposedPosition) ? 0 : this.initialClipRect.width);\n var line = new LineOption(this.heatMap.element.id + '_YAxisLine', new Line(x, this.initialClipRect.y, x, this.initialClipRect.height + this.initialClipRect.y), 'transparent', 0);\n this.drawSvgCanvas.drawLine(line, parent);\n };\n AxisHelper.prototype.drawXAxisTitle = function (axis, parent, rect) {\n var y = rect.y + (!axis.opposedPosition ?\n (axis.maxLabelSize.height + this.padding) : -(axis.maxLabelSize.height + this.padding));\n if (axis.title.text) {\n var heatMap = this.heatMap;\n var title = axis.title;\n var elementSize = measureText(title.text, title.textStyle);\n var padding = this.padding;\n var anchor = title.textStyle.textAlignment === 'Near' ? 'start' :\n title.textStyle.textAlignment === 'Far' ? 'end' : 'middle';\n padding = axis.opposedPosition ? -(padding + elementSize.height / 4) : (padding + (3 * elementSize.height / 4));\n var options = new TextOption(heatMap.element.id + '_XAxisTitle', new TextBasic(rect.x + titlePositionX(rect.width, 0, 0, title.textStyle), y + padding, anchor, title.text), title.textStyle, title.textStyle.color || heatMap.themeStyle.axisTitle);\n this.drawSvgCanvas.createText(options, parent, title.text);\n }\n };\n AxisHelper.prototype.drawYAxisTitle = function (axis, parent, rect) {\n if (axis.title.text) {\n var title = axis.title;\n var heatMap = this.heatMap;\n var labelRotation = (axis.opposedPosition) ? 90 : -90;\n var elementSize = measureText(title.text, title.textStyle);\n var anchor = title.textStyle.textAlignment === 'Near' ? 'start' :\n title.textStyle.textAlignment === 'Far' ? 'end' : 'middle';\n var padding = 10;\n padding = axis.opposedPosition ? padding : -padding;\n var x = rect.x + padding + ((axis.opposedPosition) ? axis.maxLabelSize.width : -axis.maxLabelSize.width);\n var y = rect.y + titlePositionY(rect, 0, 0, title.textStyle) + (axis.opposedPosition ? this.padding : -this.padding);\n var options = new TextOption(heatMap.element.id + '_YAxisTitle', new TextBasic(x, y - this.padding, anchor, title.text, labelRotation, 'rotate(' + labelRotation + ',' + (x) + ',' + (y) + ')', 'auto'), title.textStyle, title.textStyle.color || heatMap.themeStyle.axisTitle);\n if (!this.heatMap.enableCanvasRendering) {\n this.drawSvgCanvas.createText(options, parent, title.text);\n }\n else {\n this.drawSvgCanvas.canvasDrawText(options, title.text, x, y);\n }\n }\n };\n /**\n * Get the visible labels for both x and y axis\n * @private\n */\n AxisHelper.prototype.calculateVisibleLabels = function () {\n var heatmap = this.heatMap;\n var axis;\n var axisCollection = heatmap.axisCollections;\n for (var i = 0, len = axisCollection.length; i < len; i++) {\n axis = axisCollection[i];\n axis.axisLabels = [];\n axis.tooltipLabels = [];\n axis.labelValue = [];\n if (axis.valueType === 'Numeric') {\n axis.calculateNumericAxisLabels(this.heatMap);\n }\n else if (axis.valueType === 'DateTime') {\n axis.calculateDateTimeAxisLabel(this.heatMap);\n }\n else {\n axis.calculateCategoryAxisLabels();\n }\n axis.tooltipLabels = axis.isInversed ? axis.tooltipLabels.reverse() : axis.tooltipLabels;\n }\n };\n /**\n * Measure the title and labels rendering position for both X and Y axis.\n * @param rect\n */\n AxisHelper.prototype.measureAxis = function (rect) {\n var heatmap = this.heatMap;\n var axis;\n var axisCollection = heatmap.axisCollections;\n for (var i = axisCollection.length - 1; i >= 0; i--) {\n axis = axisCollection[i];\n axis.nearSizes = [];\n axis.farSizes = [];\n axis.computeSize(axis, heatmap);\n if (!axis.opposedPosition) {\n if (axis.orientation === 'Horizontal') {\n rect.height -= (sum(axis.nearSizes) + this.padding);\n }\n else {\n rect.x += sum(axis.nearSizes) + this.padding;\n rect.width -= sum(axis.nearSizes) + this.padding;\n }\n }\n else {\n if (axis.orientation === 'Horizontal') {\n rect.y += sum(axis.farSizes) + this.padding;\n rect.height -= sum(axis.farSizes) + this.padding;\n }\n else {\n rect.width -= sum(axis.farSizes) + this.padding;\n }\n }\n }\n };\n /**\n * Calculate the X and Y axis line position\n * @param rect\n * @private\n */\n AxisHelper.prototype.calculateAxisSize = function (rect) {\n var heatmap = this.heatMap;\n var axis;\n var axisCollection = heatmap.axisCollections;\n for (var i = 0, len = axisCollection.length; i < len; i++) {\n var axis_1 = axisCollection[i];\n axis_1.rect = extend({}, rect, null, true);\n if (axis_1.orientation === 'Horizontal' && !axis_1.opposedPosition) {\n axis_1.rect.y = rect.y + rect.height;\n axis_1.rect.height = 0;\n }\n if (axis_1.orientation === 'Vertical' && axis_1.opposedPosition) {\n axis_1.rect.x = rect.x + rect.width;\n axis_1.rect.width = 0;\n }\n }\n };\n AxisHelper.prototype.drawXAxisLabels = function (axis, parent, rect) {\n var heatMap = this.heatMap;\n var labels = axis.axisLabels;\n var interval = rect.width / axis.axisLabelSize;\n var compactInterval = 0;\n var axisInterval = axis.interval ? axis.interval : 1;\n var tempintervel = rect.width / (axis.axisLabelSize / axis.axisLabelInterval);\n var temp = axis.axisLabelInterval;\n while (tempintervel < parseInt(axis.textStyle.size, 10)) {\n temp = temp + 1;\n tempintervel = rect.width / (axis.axisLabelSize / temp);\n }\n if (axis.axisLabelInterval < temp) {\n compactInterval = temp;\n labels = axis.tooltipLabels;\n axisInterval = temp;\n }\n var padding = 10;\n var lableStrtX = rect.x + (!axis.isInversed ? 0 : rect.width);\n var labelPadding;\n var angle = axis.angle;\n padding = this.padding;\n var anglePadding = ((angle === 90 || angle === -90)) ? -2 : 0;\n var labelElement;\n if (!heatMap.enableCanvasRendering) {\n labelElement = this.heatMap.renderer.createGroup({ id: heatMap.element.id + 'XAxisLabels' });\n }\n for (var i = 0, len = labels.length; i < len; i++) {\n var lableRect = new Rect(lableStrtX, rect.y, interval, rect.height);\n var label = axis.labelIntersectAction === 'Trim' ?\n textTrim(interval * axisInterval, labels[i], axis.textStyle) : labels[i];\n var elementSize = measureText(label, axis.textStyle);\n var transform = void 0;\n labelPadding = (axis.opposedPosition) ?\n -(padding + (angle ? (3 * (elementSize.height / 4) + (2 * axis.maxLabelSize.height / 5)) : 0))\n : padding + (angle ? (3 * (elementSize.height / 4)) + (2 * axis.maxLabelSize.height / 5)\n : (3 * (elementSize.height / 4)));\n var x = lableRect.x + ((!axis.isInversed) ?\n (lableRect.width / 2) - (elementSize.width / 2) : -((lableRect.width / 2) + (elementSize.width / 2)));\n if (axis.labelIntersectAction === 'Trim') {\n x = (!axis.isInversed) ? (x >= lableRect.x ? x : lableRect.x) : (x > (lableStrtX - interval) ? x : (lableStrtX - interval));\n }\n else {\n x = x < rect.x ? rect.x : x;\n x = ((x + elementSize.width) > (rect.x + rect.width)) ? (rect.x + rect.width - elementSize.width) : x;\n }\n var y = rect.y + labelPadding;\n var translateX = void 0;\n var translateY = void 0;\n if (angle !== 0) {\n angle = (angle > 360) ? angle % 360 : angle;\n var rotateSize = rotateTextSize(axis.textStyle, label, angle);\n var diffHeight = axis.maxLabelSize.height - Math.ceil(rotateSize.height - elementSize.height);\n var yLocation = axis.opposedPosition ? diffHeight / 2 : -diffHeight / 2;\n translateX = x + elementSize.width / 2 + anglePadding;\n translateY = y + yLocation;\n transform = 'rotate(' + angle + ',' + translateX + ','\n + translateY + ')';\n y += yLocation + ((angle === 270 || angle === -90) ? -(rotateSize.height / 4) : (rotateSize.height / 4));\n }\n var options = new TextOption(heatMap.element.id + '_XAxis_Label' + i, new TextBasic(x, y, 'start', label, angle, transform), axis.textStyle, axis.textStyle.color || heatMap.themeStyle.axisLabel);\n if (angle !== 0 && this.heatMap.enableCanvasRendering) {\n this.drawSvgCanvas.canvasDrawText(options, label, translateX, translateY);\n }\n else {\n this.drawSvgCanvas.createText(options, labelElement, label);\n }\n if (compactInterval === 0) {\n lableStrtX = lableStrtX + (!axis.isInversed ? (axis.axisLabelInterval * interval) : -(axis.axisLabelInterval * interval));\n }\n else {\n lableStrtX = lableStrtX + (!axis.isInversed ? (compactInterval * interval) : -(compactInterval * interval));\n }\n if (label.indexOf('...') !== -1 && this.heatMap.enableCanvasRendering) {\n this.heatMap.tooltipCollection.push(new CanvasTooltip(labels[i], new Rect(x, y - elementSize.height, elementSize.width, elementSize.height)));\n }\n if (compactInterval !== 0) {\n i = i + (compactInterval - 1);\n }\n }\n if (!heatMap.enableCanvasRendering) {\n parent.appendChild(labelElement);\n }\n };\n AxisHelper.prototype.drawYAxisLabels = function (axis, parent, rect) {\n var heatMap = this.heatMap;\n var labels = axis.axisLabels;\n var interval = rect.height / axis.axisLabelSize;\n var compactInterval = 0;\n var tempintervel = rect.height / (axis.axisLabelSize / axis.axisLabelInterval);\n var temp = axis.axisLabelInterval;\n while (tempintervel < parseInt(axis.textStyle.size, 10)) {\n temp = temp + 1;\n tempintervel = rect.height / (axis.axisLabelSize / temp);\n }\n if (axis.axisLabelInterval < temp) {\n compactInterval = temp;\n labels = axis.tooltipLabels;\n }\n var padding = 10;\n var lableStartY = rect.y + (axis.isInversed ? 0 : rect.height);\n var anchor = axis.opposedPosition ? 'start' : 'end';\n padding = axis.opposedPosition ? padding : -padding;\n var labelElement;\n if (!heatMap.enableCanvasRendering) {\n labelElement = this.heatMap.renderer.createGroup({ id: heatMap.element.id + 'YAxisLabels' });\n }\n for (var i = 0, len = labels.length; i < len; i++) {\n var labelRect = new Rect(rect.x, lableStartY, rect.width, interval);\n var position = labelRect.height / 2; //titlePositionY(lableRect, 0, 0, axis.textStyle);\n var x = labelRect.x + padding;\n var y = labelRect.y + (axis.isInversed ? position : -position);\n var options = new TextOption(heatMap.element.id + '_YAxis_Label' + i, new TextBasic(x, y, anchor, labels[i], 0, 'rotate(' + 0 + ',' + (x) + ',' + (y) + ')', 'middle'), axis.textStyle, axis.textStyle.color || heatMap.themeStyle.axisLabel);\n this.drawSvgCanvas.createText(options, labelElement, labels[i]);\n if (Browser.isIE && !this.heatMap.enableCanvasRendering) {\n labelElement.childNodes[i].setAttribute('dy', '1ex');\n }\n if (compactInterval === 0) {\n lableStartY = lableStartY + (axis.isInversed ? (axis.axisLabelInterval * interval) : -(axis.axisLabelInterval * interval));\n }\n else {\n lableStartY = lableStartY + (axis.isInversed ? (compactInterval * interval) : -(compactInterval * interval));\n i = i + (compactInterval - 1);\n }\n }\n if (!heatMap.enableCanvasRendering) {\n parent.appendChild(labelElement);\n }\n };\n return AxisHelper;\n}());\nexport { AxisHelper };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, Complex, Browser } from '@syncfusion/ej2-base';\nimport { Rect, TextBasic, RectOption, TextOption, CurrentRect, DrawSvgCanvas } from '../utils/helper';\nimport { convertHexToColor, colorNameToHex } from '../utils/helper';\nimport { CellColor } from '../utils/colorMapping';\nimport { Border, Font } from '../model/base';\nimport { Theme } from '../model/theme';\n/**\n * Configures the CellSettings property in the Heatmap.\n */\nvar CellSettings = /** @class */ (function (_super) {\n __extends(CellSettings, _super);\n function CellSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], CellSettings.prototype, \"showLabel\", void 0);\n __decorate([\n Property('')\n ], CellSettings.prototype, \"format\", void 0);\n __decorate([\n Property(true)\n ], CellSettings.prototype, \"enableCellHighlighting\", void 0);\n __decorate([\n Complex({}, Border)\n ], CellSettings.prototype, \"border\", void 0);\n __decorate([\n Complex(Theme.rectLabelFont, Font)\n ], CellSettings.prototype, \"textStyle\", void 0);\n return CellSettings;\n}(ChildProperty));\nexport { CellSettings };\nvar Series = /** @class */ (function () {\n function Series(heatMap) {\n this.heatMap = heatMap;\n this.drawSvgCanvas = new DrawSvgCanvas(this.heatMap);\n this.cellColor = new CellColor(this.heatMap);\n }\n /**\n * To render rect series.\n * @return {void}\n * @private\n */\n Series.prototype.renderRectSeries = function () {\n if (!this.heatMap.enableCanvasRendering) {\n this.containerRectObject = this.heatMap.renderer.createGroup({\n id: this.heatMap.element.id + '_Container_RectGroup',\n x: this.heatMap.initialClipRect.x, y: this.heatMap.initialClipRect.y, transform: 'translate( 0, 0)'\n });\n if (this.heatMap.cellSettings.showLabel) {\n this.containerTextObject = this.heatMap.renderer.createGroup({ id: this.heatMap.element.id + '_Container_TextGroup', transform: 'translate( 0, 0)' });\n }\n }\n this.heatMap.xLength = this.heatMap.axisCollections[0].axisLabelSize;\n this.heatMap.yLength = this.heatMap.axisCollections[1].axisLabelSize;\n // Rectangle Part\n var tempX = Math.round(this.heatMap.initialClipRect.x);\n var tempY = Math.round(this.heatMap.initialClipRect.y);\n var dataXIndex = 0;\n var dataYIndex = 0;\n var tempWidth = Math.round(((this.heatMap.initialClipRect.width -\n (this.heatMap.cellSettings.border.width / 2)) / this.heatMap.xLength) * 100) / 100;\n var tempHeight = Math.round(((this.heatMap.initialClipRect.height -\n (this.heatMap.cellSettings.border.width / 2)) / this.heatMap.yLength) * 100) / 100;\n var tempVal = 0;\n var themeStyle = this.heatMap.themeStyle;\n var color = '';\n var tempBorder;\n var tempRectPosition = [];\n tempBorder = this.heatMap.cellSettings.border;\n this.rectPositionCollection = [];\n this.checkLabelYDisplay = tempHeight > parseInt(this.heatMap.cellSettings.textStyle.size, 10) ? true : false;\n var tempMaxString = this.getFormatedText(this.heatMap.dataSourceMaxValue, this.heatMap.cellSettings.format);\n this.checkLabelXDisplay = tempWidth > (tempMaxString.length *\n (parseInt(this.heatMap.cellSettings.textStyle.size, 10) / 2)) ? true : false;\n if (this.heatMap.yAxis.opposedPosition) {\n tempX = Math.round((this.heatMap.initialClipRect.x + (tempBorder.width / 2)) * 100) / 100;\n }\n for (var x = 0; x < (this.heatMap.xLength * this.heatMap.yLength); x++) {\n var text = this.heatMap.clonedDataSource[dataXIndex][dataYIndex];\n var rectPosition = new CurrentRect(0, 0, 0, 0, 0, '');\n color = this.cellColor.getColorByValue(text);\n var rect = new RectOption(this.heatMap.element.id + '_HeatMapRect_' + x, color, tempBorder, 1, new Rect(tempX, tempY, tempWidth, tempHeight), tempBorder.color || this.heatMap.themeStyle.cellBorder, tempBorder.radius, tempBorder.radius);\n this.drawSvgCanvas.drawRectangle(rect, this.containerRectObject);\n rectPosition.x = tempX;\n rectPosition.y = tempY;\n rectPosition.width = tempWidth;\n rectPosition.height = tempHeight;\n rectPosition.value = text;\n rectPosition.id = this.heatMap.element.id + '_HeatMapRect_' + x;\n tempRectPosition.push(rectPosition);\n if (this.heatMap.cellSettings.showLabel && this.checkLabelYDisplay && this.checkLabelXDisplay) {\n var displayText = this.getFormatedText(text, this.heatMap.cellSettings.format);\n var themeCellTextStyle = this.heatMap.cellSettings.textStyle;\n var options = new TextOption(this.heatMap.element.id + '_HeatMapRectLabels_' + x, new TextBasic(Math.round((tempX + tempWidth / 2) * 100) / 100, Math.round((tempY + tempHeight / 2) * 100) / 100, 'middle', displayText, null, null, 'middle'), themeCellTextStyle, themeCellTextStyle.color || this.getSaturatedColor(color));\n this.drawSvgCanvas.createText(options, this.containerTextObject, displayText);\n if (Browser.isIE && !this.heatMap.enableCanvasRendering) {\n this.containerTextObject.childNodes[x].setAttribute('dy', '1ex');\n }\n }\n if (tempVal === this.heatMap.xLength - 1) {\n tempY = Math.round((tempY + tempHeight) * 100) / 100;\n tempVal = 0;\n dataYIndex = 0;\n if (this.heatMap.yAxis.opposedPosition) {\n tempX = Math.round((this.heatMap.initialClipRect.x + (tempBorder.width / 2)) * 100) / 100;\n }\n else {\n tempX = Math.round(this.heatMap.initialClipRect.x);\n }\n this.rectPositionCollection.push(tempRectPosition);\n tempRectPosition = [];\n dataXIndex++;\n }\n else {\n tempX = Math.round((tempX + tempWidth) * 100) / 100;\n tempVal++;\n dataYIndex++;\n }\n }\n if (!this.heatMap.enableCanvasRendering) {\n this.heatMap.svgObject.appendChild(this.containerRectObject);\n if (this.heatMap.cellSettings.showLabel) {\n this.heatMap.svgObject.appendChild(this.containerTextObject);\n }\n }\n };\n /**\n * To find saturated color for datalabel.\n * @return {string}\n * @private\n */\n Series.prototype.getSaturatedColor = function (color) {\n var saturatedColor = color;\n saturatedColor = (saturatedColor === 'transparent') ? window.getComputedStyle(document.body, null).backgroundColor : saturatedColor;\n var rgbValue = convertHexToColor(colorNameToHex(saturatedColor));\n var contrast = Math.round((rgbValue.R * 299 + rgbValue.G * 587 + rgbValue.B * 114) / 1000);\n return contrast >= 128 ? 'black' : 'white';\n };\n /**\n * To highlight the mouse hovered rect cell.\n * @return {void}\n * @private\n */\n Series.prototype.highlightSvgRect = function (tempID) {\n if (tempID.indexOf('Celltooltip') === -1) {\n if (tempID.indexOf('_HeatMapRect') !== -1) {\n if (tempID.indexOf('_HeatMapRectLabels_') !== -1) {\n var tempIndex = tempID.indexOf('_HeatMapRectLabels_') + 19;\n tempID = this.heatMap.element.id + '_HeatMapRect_' + tempID.slice(tempIndex);\n }\n var element = document.getElementById(tempID);\n if (this.heatMap.tempRectHoverClass !== tempID) {\n if (this.heatMap.cellSettings.enableCellHighlighting) {\n var oldElement = document.getElementById(this.heatMap.tempRectHoverClass);\n if (oldElement) {\n oldElement.style.opacity = '1';\n }\n element.style.opacity = '0.65';\n }\n this.heatMap.tempRectHoverClass = tempID;\n }\n }\n else {\n if (this.heatMap.cellSettings.enableCellHighlighting) {\n var oldElement = document.getElementById(this.heatMap.tempRectHoverClass);\n if (oldElement) {\n oldElement.style.opacity = '1';\n this.heatMap.tempRectHoverClass = '';\n }\n }\n }\n }\n };\n /**\n * To get the value depends to format.\n * @return {string}\n * @private\n */\n Series.prototype.getFormatedText = function (val, getFormat) {\n var format = getFormat;\n var isCustom = format.match('{value}') !== null;\n this.format = this.heatMap.intl.getNumberFormat({\n format: isCustom ? '' : format\n });\n var value = '';\n if (val.toString() !== '') {\n value = this.formatValue(isCustom, format, val);\n }\n return value;\n };\n /**\n * To get mouse hovered cell details.\n * @return {CurrentRect}\n * @private\n */\n Series.prototype.getCurrentRect = function (x, y) {\n var currentRect;\n var firstRectDetails = [];\n firstRectDetails.push(this.heatMap.heatMapSeries.rectPositionCollection[0][0]);\n var rectX = Math.ceil((x - firstRectDetails[0].x) / firstRectDetails[0].width) <\n this.heatMap.axisCollections[0].axisLabelSize ?\n Math.ceil((x - firstRectDetails[0].x) / firstRectDetails[0].width) :\n this.heatMap.axisCollections[0].axisLabelSize;\n var rectY = Math.floor(((y - firstRectDetails[0].y) / firstRectDetails[0].height)) <\n this.heatMap.axisCollections[1].axisLabelSize ?\n Math.floor(((y - firstRectDetails[0].y) / firstRectDetails[0].height)) :\n this.heatMap.axisCollections[1].axisLabelSize - 1;\n rectX = rectX === 0 ? 1 : rectX;\n currentRect = this.heatMap.heatMapSeries.rectPositionCollection[rectY][rectX - 1];\n this.hoverXAxisLabel = this.heatMap.axisCollections[0].tooltipLabels[rectX - 1];\n this.hoverXAxisValue = this.heatMap.axisCollections[0].labelValue[rectX - 1];\n this.hoverYAxisLabel = this.heatMap.axisCollections[1].tooltipLabels[(this.heatMap.axisCollections[1].tooltipLabels.length - 1) - rectY];\n this.hoverYAxisValue = this.heatMap.axisCollections[1].labelValue[(this.heatMap.axisCollections[1].labelValue.length - 1) - rectY];\n return currentRect;\n };\n /**\n * Format the cell label.\n * @private\n */\n Series.prototype.formatValue = function (isCustom, format, tempInterval) {\n return isCustom ? format.replace('{value}', this.format(tempInterval))\n : this.format(tempInterval);\n };\n return Series;\n}());\nexport { Series };\n","import { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nvar TwoDimensional = /** @class */ (function () {\n function TwoDimensional(heatMap) {\n this.heatMap = heatMap;\n }\n /**\n * To reconstruct proper two dimensional dataSource depends on min and max values.\n * @private\n */\n TwoDimensional.prototype.processDataSource = function (dataSource) {\n var tempCloneData = extend([], dataSource, null, true);\n this.heatMap.clonedDataSource = [];\n this.completeDataSource = [];\n var axis = this.heatMap.axisCollections;\n var dataLength = axis[0].maxLength + 1;\n var labelLength = axis[0].axisLabelSize + (axis[0].min > 0 ? axis[0].min : 0);\n var xLength = dataLength > labelLength ? dataLength : labelLength;\n var minVal;\n var maxVal;\n dataLength = axis[1].maxLength + 1;\n labelLength = axis[1].axisLabelSize + (axis[1].min > 0 ? axis[1].min : 0);\n var yLength = dataLength > labelLength ? dataLength : labelLength;\n // tslint:disable-next-line:no-any \n var tempVariable;\n var cloneDataIndex = 0;\n var minMaxDatasource = [];\n for (var z = axis[1].valueType === 'Category' ? axis[1].min : 0; z < yLength; z++) {\n var tempIndex = axis[0].valueType === 'Category' ? axis[0].min : 0;\n this.completeDataSource.push([]);\n while (tempIndex < xLength) {\n if (tempIndex >= axis[0].min && tempIndex <= axis[0].max) {\n if (tempCloneData[tempIndex] && (tempCloneData[tempIndex][z] ||\n (tempCloneData[tempIndex][z] === 0 &&\n tempCloneData[tempIndex][z].toString() !== ''))) {\n this.completeDataSource[cloneDataIndex].push(tempCloneData[tempIndex][z]);\n }\n else {\n this.completeDataSource[cloneDataIndex].push('');\n }\n }\n tempIndex++;\n }\n tempVariable = extend([], this.completeDataSource[cloneDataIndex], null, true);\n if (isNullOrUndefined(minVal)) {\n minVal = tempVariable.sort(function (a, b) { return a - b; }).filter(this.checkmin)[0];\n }\n else if (tempVariable.sort(function (a, b) { return a - b; }).filter(this.checkmin)[0] < minVal) {\n minVal = tempVariable.sort(function (a, b) { return a - b; }).filter(this.checkmin)[0];\n }\n if (isNullOrUndefined(maxVal)) {\n maxVal = Math.max.apply(Math, this.completeDataSource[cloneDataIndex]);\n }\n else if (Math.max.apply(Math, this.completeDataSource[cloneDataIndex]) > maxVal) {\n maxVal = Math.max.apply(Math, this.completeDataSource[cloneDataIndex]);\n }\n if (this.heatMap.xAxis.isInversed) {\n this.completeDataSource[cloneDataIndex] = this.completeDataSource[cloneDataIndex].reverse();\n }\n if (z >= this.heatMap.axisCollections[1].min && z <= this.heatMap.axisCollections[1].max) {\n minMaxDatasource.push(this.completeDataSource[cloneDataIndex]);\n }\n cloneDataIndex++;\n }\n if (!this.heatMap.yAxis.isInversed) {\n this.completeDataSource.reverse();\n minMaxDatasource.reverse();\n }\n this.heatMap.clonedDataSource = minMaxDatasource;\n this.heatMap.dataSourceMinValue = isNullOrUndefined(minVal) ? 0 : parseFloat(minVal.toString());\n this.heatMap.dataSourceMaxValue = isNullOrUndefined(maxVal) ? 0 : parseFloat(maxVal.toString());\n };\n /**\n * To get minimum value\n * @private\n */\n TwoDimensional.prototype.checkmin = function (val) {\n return !isNullOrUndefined(val) && val.toString() !== '';\n };\n return TwoDimensional;\n}());\nexport { TwoDimensional };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, Complex, Browser } from '@syncfusion/ej2-base';\nimport { DrawSvgCanvas, TextOption, TextBasic, PathOption, Line, LineOption, GradientPointer } from '../utils/helper';\nimport { Size, measureText, getTitle, getElement, CanvasTooltip } from '../utils/helper';\nimport { Font } from '../model/base';\nimport { Rect, RectOption, Gradient, GradientColor, showTooltip, stringToNumber } from '../utils/helper';\nimport { Theme } from '../model/theme';\n/**\n * Configures the Legend\n */\nvar LegendSettings = /** @class */ (function (_super) {\n __extends(LegendSettings, _super);\n function LegendSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], LegendSettings.prototype, \"height\", void 0);\n __decorate([\n Property('')\n ], LegendSettings.prototype, \"width\", void 0);\n __decorate([\n Property('Right')\n ], LegendSettings.prototype, \"position\", void 0);\n __decorate([\n Property(true)\n ], LegendSettings.prototype, \"visible\", void 0);\n __decorate([\n Property('Center')\n ], LegendSettings.prototype, \"alignment\", void 0);\n __decorate([\n Property(true)\n ], LegendSettings.prototype, \"showLabel\", void 0);\n __decorate([\n Property(true)\n ], LegendSettings.prototype, \"showGradientPointer\", void 0);\n __decorate([\n Complex(Theme.legendLabelFont, Font)\n ], LegendSettings.prototype, \"textStyle\", void 0);\n return LegendSettings;\n}(ChildProperty));\nexport { LegendSettings };\nvar Legend = /** @class */ (function () {\n function Legend(heatMap) {\n this.maxLegendLabelSize = new Size(0, 0);\n this.gradientScaleSize = 10;\n this.positionCollections = [];\n this.labelCollections = [];\n this.legendSize = 10;\n this.previousOptions = new GradientPointer(0, 0, 0, 0, 0, 0);\n this.listPerPage = 0;\n this.numberOfPages = 1;\n this.listWidth = 0;\n this.fillRect = new Rect(0, 0, 0, 0);\n this.legendRect = new Rect(0, 0, 0, 0);\n this.currentPage = 1;\n this.lastList = [];\n this.navigationCollections = [];\n this.pagingRect = new Rect(0, 0, 0, 0);\n this.listInterval = 10; // padding between two lists\n this.legendLabelTooltip = [];\n this.labelXCollections = [];\n this.labelYCollections = [];\n this.legendXCollections = [];\n this.legendYCollections = [];\n this.heatMap = heatMap;\n this.drawSvgCanvas = new DrawSvgCanvas(heatMap);\n }\n ;\n /**\n * Get component name\n */\n Legend.prototype.getModuleName = function () {\n return 'Legend';\n };\n /**\n * To destroy the Legend.\n * @return {void}\n * @private\n */\n Legend.prototype.destroy = function (heatMap) {\n /**\n * destory code\n */\n };\n ;\n /**\n * @private\n */\n Legend.prototype.renderLegendItems = function (heatMap) {\n var tempBorder = {\n color: 'transparent',\n width: 0,\n };\n this.legend = heatMap.renderer.createGroup({ id: heatMap.element.id + '_Heatmap_Legend' });\n var rectItems = new RectOption(heatMap.element.id + '_LegendBound', 'none', tempBorder, 1, this.legendGroup);\n this.drawSvgCanvas.drawRectangle(rectItems, this.legend);\n var legendBound = this.legendRectScale;\n var rectItemsSvg = new Rect(legendBound.x, legendBound.y, legendBound.width, legendBound.height);\n if (heatMap.paletteSettings.type === 'Gradient') {\n var fill = void 0;\n if (heatMap.enableCanvasRendering) {\n var grd = void 0;\n var ctx = heatMap.canvasRenderer.ctx;\n if (heatMap.horizontalGradient) {\n grd = ctx.createLinearGradient(legendBound.x, 0, legendBound.x + legendBound.width, 0);\n }\n else {\n grd = ctx.createLinearGradient(0, legendBound.y, 0, legendBound.y + legendBound.height);\n }\n for (var i = 0; i < heatMap.legendColorCollection.length; i++) {\n var value = ((heatMap.legendColorCollection[i].value - this.legendMinValue) /\n (this.legendMaxValue - this.legendMinValue));\n value = isNaN(value) ? 0 : value;\n grd.addColorStop(value, heatMap.legendColorCollection[i].color);\n }\n ctx.fillStyle = grd;\n fill = grd.toString();\n }\n else {\n var gradientOptions = void 0;\n var gradientColor = void 0;\n var cgradientColors = [];\n for (var i = 0; i < heatMap.legendColorCollection.length; i++) {\n var gradientPercentage = ((heatMap.legendColorCollection[i].value - this.legendMinValue) /\n (this.legendMaxValue - this.legendMinValue)) * 100;\n gradientPercentage = isNaN(gradientPercentage) ? 0 : gradientPercentage;\n gradientColor = new GradientColor(heatMap.legendColorCollection[i].color, gradientPercentage + '%');\n cgradientColors.push(gradientColor);\n }\n if (heatMap.horizontalGradient) {\n gradientOptions = new Gradient(heatMap.element.id + '_lineargradient', '0%', '100%', '0%', '0%');\n }\n else {\n gradientOptions = new Gradient(heatMap.element.id + '_lineargradient', '0%', '0%', '0%', '100%');\n }\n var linearGradient = heatMap.renderer.drawGradient('linearGradient', gradientOptions, cgradientColors);\n this.legend.appendChild(linearGradient);\n fill = 'url(#' + heatMap.element.id + '_lineargradient)';\n }\n var rectItems_1 = new RectOption(heatMap.element.id + '_Gradient_Legend', fill, tempBorder, 1, rectItemsSvg);\n this.drawSvgCanvas.drawRectangle(rectItems_1, this.legend);\n if (!heatMap.enableCanvasRendering) {\n heatMap.svgObject.appendChild(this.legend);\n }\n this.renderColorAxisGrid(rectItemsSvg);\n if (heatMap.legendSettings.showLabel) {\n this.renderLegendLabel(heatMap, rectItemsSvg);\n }\n }\n else {\n this.legendScale = heatMap.renderer.createGroup({ id: heatMap.element.id + 'Heatmap_GradientScale' });\n var listRect = new RectOption(heatMap.element.id + '_Gradient_Scale', 'none', tempBorder, 1, this.legendRectScale);\n this.drawSvgCanvas.drawRectangle(listRect, this.legendScale);\n if (!heatMap.enableCanvasRendering) {\n this.legend.appendChild(this.legendScale);\n }\n this.translategroup = heatMap.renderer.createGroup({ id: heatMap.element.id + '_translate' });\n this.calculateListPerPage(rectItemsSvg, heatMap);\n if (this.numberOfPages > 1) {\n this.paginggroup = heatMap.renderer.createGroup({ id: heatMap.element.id + '_navigation' });\n }\n this.renderListLegendMode(rectItemsSvg);\n }\n };\n Legend.prototype.renderLegendLabel = function (heatMap, rect) {\n var anchor;\n var dominantBaseline;\n var legendLabel;\n var textWrapWidth = 0;\n this.legendLabelTooltip = [];\n if (heatMap.enableCanvasRendering) {\n var ctx = heatMap.canvasRenderer.ctx;\n ctx.rect(this.legendGroup.x, this.legendGroup.y, this.legendGroup.width, this.legendGroup.height);\n ctx.clip();\n }\n else {\n legendLabel = heatMap.renderer.createGroup({ id: heatMap.element.id + '_Heatmap_LegendLabel' });\n }\n var labelX;\n var labelY;\n for (var i = 0; i < heatMap.legendColorCollection.length; i++) {\n var value = ((heatMap.legendColorCollection[i].value - this.legendMinValue) /\n (this.legendMaxValue - this.legendMinValue)) * 100;\n if (heatMap.horizontalGradient) {\n labelX = this.positionCollections[i];\n labelY = rect.y + rect.height + this.labelPadding;\n anchor = (value === 0) ? 'start' : (i === heatMap.legendColorCollection.length - 1) ? 'end' : 'middle';\n dominantBaseline = 'hanging';\n }\n else {\n labelX = rect.x + rect.width + this.labelPadding;\n labelY = this.positionCollections[i];\n dominantBaseline = (value === 0) ? 'hanging' : (i === heatMap.legendColorCollection.length - 1) ? 'baseline' : 'middle';\n }\n if (heatMap.horizontalGradient) {\n var previousSegmentWidth = (this.positionCollections[i] - this.positionCollections[i - 1]) / 2;\n var nextSegmentWidth = (this.positionCollections[i + 1] - this.positionCollections[i]) / 2;\n if (i === heatMap.legendColorCollection.length - 1) {\n textWrapWidth = previousSegmentWidth;\n }\n else if (i === 0) {\n textWrapWidth = nextSegmentWidth;\n }\n else {\n textWrapWidth = previousSegmentWidth < nextSegmentWidth ? previousSegmentWidth : nextSegmentWidth;\n }\n }\n else {\n textWrapWidth = this.width - (this.legendRectScale.width + this.labelPadding +\n this.legendRectPadding);\n }\n if (this.labelCollections[i] !== '') {\n var text = getTitle(this.labelCollections[i], heatMap.legendSettings.textStyle, textWrapWidth);\n if (text.length !== 0 && text[0].indexOf('...') !== -1 && heatMap.enableCanvasRendering) {\n var elementSize = measureText(this.labelCollections[i], heatMap.legendSettings.textStyle);\n this.legendLabelTooltip.push(new CanvasTooltip(this.labelCollections[i], new Rect(labelX, labelY, elementSize.width, elementSize.height)));\n }\n var textBasic = new TextBasic(labelX, labelY, anchor, text, 0, 'translate(0,0)', dominantBaseline);\n var options = new TextOption(heatMap.element.id + '_Legend_Label' + i, textBasic, heatMap.legendSettings.textStyle, heatMap.legendSettings.textStyle.color || heatMap.themeStyle.legendLabel);\n if (text.length > 1) {\n this.drawSvgCanvas.createWrapText(options, heatMap.legendSettings.textStyle, this.legend);\n }\n else {\n this.drawSvgCanvas.createText(options, legendLabel, text[0]);\n }\n if (Browser.isIE && !heatMap.enableCanvasRendering) {\n if (dominantBaseline === 'middle') {\n legendLabel.lastChild.setAttribute('dy', '0.6ex');\n }\n else if (dominantBaseline === 'hanging') {\n legendLabel.lastChild.setAttribute('dy', '1.5ex');\n }\n }\n }\n }\n if (!heatMap.enableCanvasRendering) {\n this.legend.appendChild(legendLabel);\n var clippath = heatMap.renderer.createClipPath({ id: heatMap.element.id + '_clipPath' });\n var clipRect = heatMap.renderer.drawRectangle(this.legendGroup);\n clippath.appendChild(clipRect);\n heatMap.svgObject.appendChild(clippath);\n this.legend.setAttribute('style', 'clip-path:url(#' + clippath.id + ')');\n }\n };\n /**\n * @private\n */\n Legend.prototype.renderGradientPointer = function (e, pageX, pageY) {\n var heatMap = this.heatMap;\n var currentRect = heatMap.heatMapSeries.getCurrentRect(pageX, pageY);\n var cellValue = currentRect.value.toString();\n var rect = this.legendRectScale;\n var legendPart;\n var direction;\n var options;\n var legendPath;\n var pathX1;\n var pathY1;\n var pathX2;\n var pathY2;\n var pathX3;\n var pathY3;\n if (cellValue.toString() !== '') {\n if (!heatMap.horizontalGradient) {\n legendPart = rect.height / 100;\n legendPath = legendPart * ((Number(cellValue) - this.legendMinValue) /\n (this.legendMaxValue - this.legendMinValue)) * 100;\n pathX1 = rect.x - 1;\n pathY1 = rect.y + legendPath;\n pathX2 = pathX3 = rect.x - 8;\n pathY2 = rect.y - 5 + legendPath;\n pathY3 = rect.y + 5 + legendPath;\n }\n else {\n legendPart = rect.width / 100;\n legendPath = legendPart * ((Number(cellValue) - this.legendMinValue) /\n (this.legendMaxValue - this.legendMinValue)) * 100;\n pathX1 = rect.x + legendPath;\n pathY1 = rect.y + rect.height;\n pathX2 = rect.x - 5 + legendPath;\n pathY2 = pathY3 = rect.y + rect.height + 8;\n pathX3 = rect.x + 5 + legendPath;\n }\n direction = 'M' + ' ' + pathX1 + ' ' + pathY1 + ' ' +\n 'L' + ' ' + pathX2 + ' ' + pathY2 + ' ' + 'L' + ' ' + pathX3 + ' ' + pathY3 + ' ' + 'Z';\n options = new PathOption(heatMap.element.id + '_Gradient_Pointer', 'gray', 0.01, '#A0A0A0', 1, '0,0', direction);\n if (!heatMap.enableCanvasRendering) {\n this.gradientPointer = heatMap.renderer.drawPath(options);\n this.gradientPointer.style.visibility = 'visible';\n this.legend.appendChild(this.gradientPointer);\n }\n else {\n this.removeGradientPointer(heatMap);\n var canvasTranslate = void 0;\n heatMap.canvasRenderer.drawPath(options, canvasTranslate);\n this.previousOptions.pathX1 = pathX1;\n this.previousOptions.pathY1 = pathY1;\n this.previousOptions.pathX2 = pathX2;\n this.previousOptions.pathY2 = pathY2;\n this.previousOptions.pathX3 = pathX3;\n this.previousOptions.pathY3 = pathY3;\n }\n }\n else {\n this.removeGradientPointer(heatMap);\n }\n };\n /**\n * @private\n */\n Legend.prototype.removeGradientPointer = function (heatMap) {\n if (this.gradientPointer && !heatMap.enableCanvasRendering) {\n this.gradientPointer.style.visibility = 'hidden';\n }\n else if (heatMap.enableCanvasRendering) {\n if (Object.keys(this.previousOptions).length !== 0) {\n if (heatMap.horizontalGradient) {\n this.fillRect.x = this.previousOptions.pathX2 - 1;\n this.fillRect.y = this.previousOptions.pathY1;\n this.fillRect.width = this.previousOptions.pathX3 - this.previousOptions.pathX2 + 2;\n this.fillRect.height = this.previousOptions.pathY2 + 1 - this.previousOptions.pathY1;\n }\n else {\n this.fillRect.x = this.previousOptions.pathX2 - 1;\n this.fillRect.y = this.previousOptions.pathY2 - 1;\n this.fillRect.width = this.previousOptions.pathX1 - this.previousOptions.pathX2 + 1;\n this.fillRect.height = this.previousOptions.pathY3 - this.previousOptions.pathY2 + 2;\n }\n }\n heatMap.canvasRenderer.ctx.fillStyle = heatMap.themeStyle.background;\n heatMap.canvasRenderer.ctx.fillRect(this.fillRect.x, this.fillRect.y, this.fillRect.width, this.fillRect.height);\n }\n };\n /**\n * @private\n */\n Legend.prototype.calculateLegendBounds = function (rect) {\n var heatMap = this.heatMap;\n var legendSettings = heatMap.legendSettings;\n var colorCollection = heatMap.legendColorCollection;\n this.labelCollections = [];\n if (legendSettings.position !== 'Bottom' && legendSettings.position !== 'Top' &&\n legendSettings.position !== 'Right' && legendSettings.position !== 'Left') {\n legendSettings.position = 'Right';\n }\n heatMap.horizontalGradient = legendSettings.position === 'Bottom' || legendSettings.position === 'Top';\n this.legendRectPadding = heatMap.horizontalGradient ? 16 : 10; // padding between rect and legend\n this.labelPadding = legendSettings.showLabel ? this.heatMap.horizontalGradient ? 10 : 6 : 0; // padding between list and label\n this.legendHeight = legendSettings.height;\n this.legendWidth = legendSettings.width;\n for (var i = 0; i < colorCollection.length; i++) {\n var label = colorCollection[i].isHidden ? '' : colorCollection[i].label ?\n colorCollection[i].label : colorCollection[i].value.toString();\n if (heatMap.paletteSettings.type === 'Fixed' && label === '') {\n continue;\n }\n else {\n this.labelCollections.push(label);\n }\n }\n if (heatMap.paletteSettings.type === 'Gradient') {\n if (legendSettings.textStyle.textOverflow !== 'Trim') {\n this.maxLegendLabelSize = this.getMaxLabelSize(heatMap);\n if (heatMap.horizontalGradient && legendSettings.height === '') {\n this.legendHeight = ((2 * this.legendRectPadding) + this.legendSize + this.maxLegendLabelSize.height).toString();\n }\n else if (!heatMap.horizontalGradient && legendSettings.width === '' && legendSettings.textStyle.textOverflow !== 'Wrap') {\n this.legendWidth = ((2 * this.legendRectPadding) + this.legendSize + this.maxLegendLabelSize.width).toString();\n }\n }\n }\n else {\n this.calculateListLegendBounds(rect);\n }\n this.legendHeight = this.legendHeight ? this.legendHeight : heatMap.horizontalGradient ? '50' : '100%';\n this.legendWidth = this.legendWidth ? this.legendWidth : heatMap.horizontalGradient ?\n '100%' : heatMap.paletteSettings.type === 'Gradient' ? '50' : '70';\n this.height = stringToNumber(this.legendHeight, rect.height);\n this.width = stringToNumber(this.legendWidth, rect.width);\n if (heatMap.horizontalGradient) {\n this.height = heatMap.paletteSettings.type === 'Gradient' ? this.height < 50 ? 50 : this.height : this.height;\n if (legendSettings.position === 'Top') {\n rect.y += this.height;\n }\n rect.height -= this.height;\n }\n else {\n this.width = heatMap.paletteSettings.type === 'Gradient' ? this.width < 50 ? 50 : this.width : this.width;\n if (legendSettings.position === 'Left') {\n rect.x += this.width;\n }\n rect.width -= this.width;\n }\n };\n Legend.prototype.calculateListLegendBounds = function (rect) {\n var heatMap = this.heatMap;\n this.listWidth = 0;\n this.listHeight = 0;\n this.currentPage = 1;\n var padding = 10; // padding of paging elements\n if (heatMap.horizontalGradient) {\n for (var i = 0; i < heatMap.colorCollection.length; i++) {\n var size = 0;\n if (heatMap.legendSettings.showLabel) {\n var text = this.labelCollections[i];\n size = measureText(text, heatMap.legendSettings.textStyle).width;\n }\n var perListWidth = this.legendSize + this.labelPadding + size + this.listInterval;\n this.listWidth += perListWidth;\n }\n this.listWidth += this.listInterval + padding;\n if (this.legendWidth === '') {\n this.legendWidth = this.listWidth > rect.width ? rect.width.toString() : this.listWidth.toString();\n }\n if (this.legendHeight === '') {\n this.numberOfRows = Math.ceil(this.listWidth / stringToNumber(this.legendWidth, rect.width));\n this.numberOfRows = this.numberOfRows > 3 ? 3 : this.numberOfRows;\n this.legendHeight = (this.listWidth > rect.width || this.listWidth > stringToNumber(this.legendWidth, rect.width)) &&\n this.numberOfRows > 3 ? (((this.legendSize + this.listInterval) * this.numberOfRows) + this.legendRectPadding +\n parseInt(heatMap.legendSettings.textStyle.size, 10) + padding).toString() :\n (((this.legendSize + this.listInterval) * this.numberOfRows) + this.legendRectPadding).toString();\n }\n }\n else {\n this.listHeight = ((this.legendSize + this.listInterval) * heatMap.colorCollection.length) + this.listInterval;\n if (this.legendHeight === '') {\n this.legendHeight = this.listHeight > rect.height ? rect.height.toString() : this.listHeight.toString();\n }\n if (this.legendWidth === '' && heatMap.legendSettings.textStyle.textOverflow !== 'Trim') {\n this.maxLegendLabelSize = this.getMaxLabelSize(heatMap);\n this.legendWidth = ((2 * this.legendRectPadding) + this.legendSize + this.labelPadding +\n this.maxLegendLabelSize.width).toString();\n }\n }\n if (stringToNumber(this.legendHeight, rect.height) < 50) {\n this.legendHeight = '50';\n }\n if (stringToNumber(this.legendWidth, rect.width) < 70) {\n this.legendWidth = '70';\n }\n };\n Legend.prototype.getMaxLabelSize = function (heatMap) {\n if (!heatMap.legendSettings.showLabel || heatMap.horizontalGradient && heatMap.paletteSettings.type === 'Fixed') {\n return this.maxLegendLabelSize;\n }\n else {\n var labelSize = this.maxLegendLabelSize;\n for (var i = 0; i < heatMap.colorCollection.length; i++) {\n var size = measureText(this.labelCollections[i], heatMap.legendSettings.textStyle);\n labelSize.width = (labelSize.width > size.width) ? labelSize.width : size.width;\n labelSize.height = (labelSize.height > size.height) ? labelSize.height : size.height;\n }\n return labelSize;\n }\n };\n /**\n * @private\n */\n Legend.prototype.calculateLegendSize = function (rect, legendTop) {\n var heatMap = this.heatMap;\n var legendSettings = heatMap.legendSettings;\n var left;\n var top;\n var padding = 10; // inner padding for axis title and axil labels\n var alignment = legendSettings.alignment;\n var height = stringToNumber(this.legendHeight, rect.height);\n var width = stringToNumber(this.legendWidth, rect.width);\n var axis = heatMap.axisCollections;\n var axisTitlePadding = 0;\n if (heatMap.horizontalGradient) {\n width = width > rect.width ? rect.width : width;\n height = heatMap.paletteSettings.type === 'Gradient' ? height > 50 ? height : 50 : this.height;\n left = alignment === 'Near' ? rect.x : alignment === 'Far' ? rect.x + rect.width - width :\n rect.x + (rect.width / 2) - (width / 2);\n if (heatMap.xAxis.title.text !== '') {\n axisTitlePadding = measureText(heatMap.xAxis.title.text, heatMap.xAxis.textStyle).height + padding;\n }\n var axisHeight = axis[0].opposedPosition ? 0 : axis[0].maxLabelSize.height + axisTitlePadding + padding;\n top = legendSettings.position === 'Top' ? heatMap.titleSettings.text ? legendTop :\n heatMap.margin.top : rect.y + rect.height + axisHeight;\n }\n else {\n height = height > rect.height ? rect.height : height;\n width = heatMap.paletteSettings.type === 'Gradient' ? width > 50 ? width : 50 : width;\n top = alignment === 'Near' ? rect.y : alignment === 'Far' ? rect.y + rect.height - height :\n rect.y + (rect.height / 2) - (height / 2);\n if (heatMap.yAxis.title.text !== '') {\n axisTitlePadding = measureText(heatMap.yAxis.title.text, heatMap.yAxis.textStyle).height + padding;\n }\n var axisWidth = axis[1].opposedPosition ? axis[1].maxLabelSize.width + axisTitlePadding + padding : 0;\n left = legendSettings.position === 'Right' ? rect.x + rect.width + axisWidth : heatMap.margin.left;\n }\n this.legendGroup = new Rect(left, top, width, height);\n this.calculateGradientScale(this.legendGroup);\n };\n // calculating number of lists per page\n Legend.prototype.measureListLegendBound = function (rect) {\n var heatMap = this.heatMap;\n var padding = 15; // padding of paging element\n if (heatMap.horizontalGradient) {\n if (this.listWidth > this.width) {\n this.numberOfRows = Math.ceil(this.listWidth / this.width);\n this.listHeight = ((this.legendSize + this.listInterval) * this.numberOfRows);\n this.listPerPage = this.numberOfRows <= 3 ? this.numberOfRows : Math.ceil((this.height - padding -\n parseInt(heatMap.legendSettings.textStyle.size, 10) -\n this.legendRectPadding) / (this.legendSize + this.listInterval));\n this.numberOfPages = Math.ceil(this.numberOfRows / this.listPerPage);\n }\n else {\n this.listPerPage = 1;\n }\n }\n else {\n if (this.listHeight > rect.height || this.listHeight > this.height) {\n var maxHeight = stringToNumber(this.legendHeight, rect.height);\n maxHeight = maxHeight > rect.height ? rect.height : maxHeight;\n this.listPerPage = Math.floor(maxHeight / (this.legendSize + this.listInterval) - 1);\n this.numberOfPages = Math.max(1, Math.ceil(heatMap.colorCollection.length / this.listPerPage));\n }\n else {\n this.listPerPage = heatMap.colorCollection.length;\n this.legendHeight = this.listHeight.toString();\n }\n }\n };\n Legend.prototype.renderPagingElements = function (heatMap) {\n if (this.numberOfPages > 1) {\n this.navigationCollections = [];\n this.legend.appendChild(this.paginggroup);\n var iconSize = 10;\n var rightArrowX = this.legendGroup.x + this.legendGroup.width - iconSize;\n var rightArrowY = this.legendGroup.y + this.legendGroup.height - iconSize;\n var text = this.currentPage + '/' + this.numberOfPages;\n var textSize = measureText(text, heatMap.legendSettings.textStyle);\n var textX = rightArrowX - textSize.width - 15;\n var textBasic = new TextBasic(textX, rightArrowY, 'start', text, 0, 'translate(0,0)', 'middle');\n var options = new TextOption(heatMap.element.id + '_paging', textBasic, heatMap.legendSettings.textStyle, heatMap.legendSettings.textStyle.color || heatMap.themeStyle.legendLabel);\n this.drawSvgCanvas.createText(options, this.paginggroup, text);\n if (Browser.isIE && !heatMap.enableCanvasRendering) {\n this.paginggroup.lastChild.setAttribute('dy', '0.6ex');\n }\n this.pagingRect = new Rect(textX, rightArrowY - textSize.height / 2, textSize.width, textSize.height);\n var pagingTextRect = new RectOption(heatMap.element.id + '_pagingText', 'none', { color: 'transparent', width: 0 }, 1, this.pagingRect);\n this.drawSvgCanvas.drawRectangle(pagingTextRect, this.paginggroup);\n var rightArrowRect = new RectOption(heatMap.element.id + '_rightArrow', 'none', { color: 'transparent', width: 0 }, 1, new Rect(rightArrowX - iconSize, rightArrowY - iconSize / 2, iconSize, iconSize));\n this.drawSvgCanvas.drawRectangle(rightArrowRect, this.paginggroup);\n var rightArrow = 'M' + ' ' + (rightArrowX) + ' ' + rightArrowY + ' ' +\n 'L' + ' ' + (rightArrowX - iconSize) + ' ' + (rightArrowY - iconSize / 2) + ' ' + 'L' + ' ' +\n (rightArrowX - iconSize) + ' ' + (rightArrowY + (iconSize / 2)) + 'Z';\n var leftX = textX - 15;\n var leftArrow = 'M' + ' ' + leftX + ' ' + rightArrowY + ' ' +\n 'L' + ' ' + (leftX + iconSize) + ' ' + (rightArrowY - iconSize / 2) + ' ' + 'L' + ' ' +\n (leftX + iconSize) + ' ' + (rightArrowY + (iconSize / 2)) + 'Z';\n var leftArrowRect = new RectOption(heatMap.element.id + '_leftArrow', 'none', { color: 'transparent', width: 0 }, 1, new Rect(leftX, rightArrowY - iconSize / 2, iconSize, iconSize));\n this.drawSvgCanvas.drawRectangle(leftArrowRect, this.paginggroup);\n var leftOption = new PathOption(heatMap.element.id + '_Legend_leftarrow', 'gray', 0.01, '#A0A0A0', 1, '0,0', leftArrow);\n var rightOption = new PathOption(heatMap.element.id + '_Legend_rightarrow', 'gray', 0.01, '#A0A0A0', 1, '0,0', rightArrow);\n this.navigationCollections.push(rightArrowRect);\n this.navigationCollections.push(leftArrowRect);\n if (!heatMap.enableCanvasRendering) {\n var arrow = heatMap.renderer.drawPath(leftOption);\n var rightarrow = heatMap.renderer.drawPath(rightOption);\n this.paginggroup.appendChild(arrow);\n this.paginggroup.appendChild(rightarrow);\n }\n else {\n var canvasTranslate = void 0;\n heatMap.canvasRenderer.drawPath(leftOption, canvasTranslate);\n heatMap.canvasRenderer.drawPath(rightOption, canvasTranslate);\n }\n }\n };\n Legend.prototype.calculateGradientScale = function (scale) {\n var heatMap = this.heatMap;\n var padding = 10; // padding between legend bounds and gradient scale\n var left;\n var top;\n var height;\n var width;\n if (heatMap.paletteSettings.type === 'Fixed') {\n this.measureListLegendBound(heatMap.initialClipRect);\n }\n if (heatMap.horizontalGradient) {\n left = scale.x + padding;\n top = scale.y + this.legendRectPadding;\n width = heatMap.paletteSettings.type === 'Gradient' ? scale.width - 2 * padding : scale.width - (2 * this.listInterval);\n height = heatMap.paletteSettings.type === 'Gradient' ? this.gradientScaleSize :\n (this.legendSize + this.listInterval) * this.listPerPage - this.listInterval;\n }\n else {\n left = scale.x + this.legendRectPadding;\n top = scale.y + padding;\n width = heatMap.paletteSettings.type === 'Gradient' ? this.gradientScaleSize : scale.width - padding;\n height = heatMap.paletteSettings.type === 'Gradient' ? scale.height - 2 * padding :\n (this.legendSize + this.listInterval) * this.listPerPage - this.listInterval;\n }\n this.legendRectScale = new Rect(left, top, width, height);\n if (heatMap.paletteSettings.type === 'Gradient') {\n this.calculateColorAxisGrid(this.legendRectScale);\n }\n };\n Legend.prototype.calculateColorAxisGrid = function (legendRect) {\n var heatMap = this.heatMap;\n var rect = this.legendRectScale;\n var legendPart;\n var text;\n var maxTextWrapLength = 0;\n var segmentCollections = [];\n var pathX1;\n var pathY1;\n this.legendMinValue = heatMap.colorCollection[0].value;\n this.legendMaxValue = heatMap.colorCollection[heatMap.colorCollection.length - 1].value;\n for (var i = 0; i < heatMap.legendColorCollection.length; i++) {\n this.legendMinValue = heatMap.legendColorCollection[i].value < this.legendMinValue ?\n heatMap.legendColorCollection[i].value : this.legendMinValue;\n this.legendMaxValue = heatMap.legendColorCollection[i].value > this.legendMaxValue ?\n heatMap.legendColorCollection[i].value : this.legendMaxValue;\n }\n this.legendMinValue = this.legendMinValue > heatMap.dataSourceMinValue ? heatMap.dataSourceMinValue : this.legendMinValue;\n this.legendMaxValue = this.legendMaxValue < heatMap.dataSourceMaxValue ? heatMap.dataSourceMaxValue : this.legendMaxValue;\n for (var index = 0; index < heatMap.legendColorCollection.length; index++) {\n var value = ((heatMap.legendColorCollection[index].value - this.legendMinValue) /\n (this.legendMaxValue - this.legendMinValue)) * 100;\n if (!heatMap.horizontalGradient) {\n legendPart = rect.height / 100;\n pathY1 = legendRect.y + (legendPart * value);\n segmentCollections.push(pathY1);\n }\n else {\n legendPart = rect.width / 100;\n pathX1 = legendRect.x + (legendPart * value);\n segmentCollections.push(pathX1);\n }\n }\n if (heatMap.horizontalGradient && heatMap.legendSettings.textStyle.textOverflow === 'Wrap') {\n for (var i = 0; i < heatMap.legendColorCollection.length; i++) {\n var textWrapWidth = void 0;\n var previousSegmentWidth = (segmentCollections[i] - segmentCollections[i - 1]) / 2;\n var nextSegmentWidth = (segmentCollections[i + 1] - segmentCollections[i]) / 2;\n if (i === heatMap.legendColorCollection.length - 1) {\n textWrapWidth = previousSegmentWidth;\n }\n else if (i === 0) {\n textWrapWidth = nextSegmentWidth;\n }\n else {\n textWrapWidth = previousSegmentWidth < nextSegmentWidth ? previousSegmentWidth : nextSegmentWidth;\n }\n text = getTitle(this.labelCollections[i], heatMap.legendSettings.textStyle, textWrapWidth);\n maxTextWrapLength = text.length > maxTextWrapLength ? text.length : maxTextWrapLength;\n }\n if (heatMap.legendSettings.position === 'Bottom') {\n heatMap.initialClipRect.height -= (this.maxLegendLabelSize.height * (maxTextWrapLength - 1));\n this.legendGroup.y -= (this.maxLegendLabelSize.height * (maxTextWrapLength - 1));\n this.legendRectScale.y = this.legendGroup.y + this.legendRectPadding;\n this.legendGroup.height = parseInt(this.legendHeight, 10) + (this.maxLegendLabelSize.height * (maxTextWrapLength - 1));\n }\n else {\n heatMap.initialClipRect.y += (this.maxLegendLabelSize.height * (maxTextWrapLength - 1));\n heatMap.initialClipRect.height -= (this.maxLegendLabelSize.height * (maxTextWrapLength - 1));\n this.legendRectScale.y = this.legendGroup.y + this.legendRectPadding;\n this.legendGroup.height = parseInt(this.legendHeight, 10) + (this.maxLegendLabelSize.height * (maxTextWrapLength - 1));\n }\n }\n };\n Legend.prototype.renderColorAxisGrid = function (legendRect) {\n var heatMap = this.heatMap;\n var rect = this.legendRectScale;\n var legendPart;\n var legendElement;\n var pathX1;\n var pathY1;\n var pathX2;\n var pathY2;\n this.positionCollections = [];\n if (!heatMap.enableCanvasRendering) {\n legendElement = this.heatMap.renderer.createGroup({ id: heatMap.element.id + '_ColorAxis_Grid' });\n }\n for (var i = 0; i < heatMap.legendColorCollection.length; i++) {\n var value = ((heatMap.legendColorCollection[i].value - this.legendMinValue) /\n (this.legendMaxValue - this.legendMinValue)) * 100;\n value = isNaN(value) ? 0 : value;\n if (!heatMap.horizontalGradient) {\n legendPart = rect.height / 100;\n pathX1 = legendRect.x;\n pathY1 = pathY2 = legendRect.y + (legendPart * value);\n pathX2 = legendRect.x + legendRect.width;\n this.positionCollections.push(pathY1);\n }\n else {\n legendPart = rect.width / 100;\n pathX1 = pathX2 = legendRect.x + (legendPart * value);\n pathY1 = legendRect.y;\n pathY2 = legendRect.y + legendRect.height;\n this.positionCollections.push(pathX1);\n }\n var direction = new Line(pathX1, pathY1, pathX2, pathY2);\n var line = new LineOption(this.heatMap.element.id + '_ColorAxis_Grid' + i, direction, '#EEEEEE', 1);\n this.drawSvgCanvas.drawLine(line, legendElement);\n if (!heatMap.enableCanvasRendering) {\n this.legend.appendChild(legendElement);\n }\n }\n };\n /**\n * @private\n */\n Legend.prototype.renderLegendLabelTooltip = function (e) {\n var x = this.heatMap.mouseX;\n var y = this.heatMap.mouseY;\n if (e.target.id.indexOf('_Legend_Label') !== -1 && event.target.textContent.indexOf('...') > -1) {\n var targetId = event.target.id.split(this.heatMap.element.id + '_Legend_Label');\n if (targetId.length === 2) {\n var index = void 0;\n if (targetId[1].length === 1 || this.heatMap.legendSettings.textStyle.textOverflow === 'Trim') {\n index = parseInt(targetId[1], 10);\n }\n else {\n index = parseInt(targetId[1].substring(0, targetId[1].length - 1), 10);\n }\n showTooltip(this.labelCollections[index], x, y, this.heatMap.element.offsetWidth, this.heatMap.element.id + '_LegendLabel_Tooltip', getElement(this.heatMap.element.id + '_Secondary_Element'));\n document.getElementById(this.heatMap.element.id + '_LegendLabel_Tooltip').style.visibility = 'visible';\n }\n }\n else {\n var element = document.getElementById(this.heatMap.element.id + '_LegendLabel_Tooltip');\n if (element) {\n element.style.visibility = 'hidden';\n }\n }\n };\n Legend.prototype.calculateListPerPage = function (rect, heatMap) {\n if (heatMap.horizontalGradient) {\n this.lastList = [];\n var legendX = rect.x;\n var legendY = rect.y;\n var size = 0;\n var division = 0;\n var labelX = 0;\n var labelY = 0;\n var interval = 20;\n var i = void 0;\n var legendSize = 10;\n var padding = 5;\n this.labelXCollections = [];\n this.labelYCollections = [];\n this.legendXCollections = [];\n this.legendYCollections = [];\n for (i = 0; i < heatMap.colorCollection.length; i++) {\n if (heatMap.legendSettings.showLabel) {\n var text = this.labelCollections[i];\n size = measureText(text, heatMap.legendSettings.textStyle).width;\n }\n labelX = legendX + legendSize + padding;\n labelY = legendY + padding;\n var maxWidth = heatMap.legendSettings.showLabel ? labelX + size : legendX + this.legendSize + this.listInterval;\n if (i !== 0 && maxWidth > this.legendGroup.width + this.legendGroup.x - this.listInterval) {\n division += 1;\n legendX = rect.x;\n legendY = rect.y + (division * interval);\n labelX = legendX + legendSize + padding;\n labelY = legendY + padding;\n if (division % (this.listPerPage) === 0) {\n this.lastList.push(i);\n legendY = rect.y;\n labelY = legendY + padding;\n division = 0;\n }\n }\n this.labelXCollections.push(labelX);\n this.labelYCollections.push(labelY);\n this.legendXCollections.push(legendX);\n this.legendYCollections.push(legendY);\n legendX = legendX + this.legendSize + this.labelPadding + size + this.listInterval;\n }\n this.lastList.push(i);\n this.numberOfPages = this.lastList.length;\n }\n };\n Legend.prototype.renderListLegendMode = function (rect) {\n var heatMap = this.heatMap;\n var legendSize = 10;\n var tempBorder = {\n color: 'transparent',\n width: 0,\n };\n var padding = 5; // padding for legend label from top\n this.legendLabelTooltip = [];\n var listRect;\n var size = new Size(0, 0);\n var division = 0;\n var labelX = 0;\n var labelY = 0;\n var legendX = rect.x;\n var legendY = rect.y;\n this.renderPagingElements(heatMap);\n var x;\n var y;\n var textWrapWidth = this.legendGroup.width - (this.legendSize +\n this.legendRectPadding + this.labelPadding);\n if (!heatMap.horizontalGradient) {\n x = (this.currentPage * (this.listPerPage)) - (this.listPerPage);\n y = x + this.listPerPage;\n y = y < heatMap.colorCollection.length ? y : heatMap.colorCollection.length;\n }\n else {\n x = this.currentPage === 1 ? 0 : this.lastList[this.currentPage - 2];\n y = this.lastList[this.currentPage - 1];\n }\n for (var i = x; i < y; i++) {\n if (heatMap.legendSettings.showLabel) {\n var text = this.labelCollections[i];\n size = measureText(text, heatMap.legendSettings.textStyle);\n }\n if (heatMap.horizontalGradient) {\n legendX = this.legendXCollections[i];\n legendY = this.legendYCollections[i];\n labelX = this.labelXCollections[i];\n labelY = this.labelYCollections[i];\n }\n if (heatMap.legendSettings.showLabel) {\n labelX = legendX + this.legendSize + this.labelPadding;\n labelY = legendY + padding;\n var text = getTitle(this.labelCollections[i], heatMap.legendSettings.textStyle, textWrapWidth);\n if (text[0].indexOf('...') !== -1 && heatMap.enableCanvasRendering) {\n this.legendLabelTooltip.push(new CanvasTooltip(this.labelCollections[i], new Rect(labelX, labelY, size.width, size.height)));\n }\n var textBasic = new TextBasic(labelX, labelY, 'start', text, 0, 'translate(0,0)', 'middle');\n var options = new TextOption(heatMap.element.id + '_Legend_Label' + i, textBasic, heatMap.legendSettings.textStyle, heatMap.legendSettings.textStyle.color || heatMap.themeStyle.legendLabel);\n if (text.length > 1) {\n this.drawSvgCanvas.createWrapText(options, heatMap.legendSettings.textStyle, this.translategroup);\n }\n else {\n this.drawSvgCanvas.createText(options, this.translategroup, text[0]);\n }\n if (Browser.isIE && !heatMap.enableCanvasRendering) {\n this.translategroup.lastChild.setAttribute('dy', '0.6ex');\n }\n }\n listRect = new Rect(legendX, legendY, legendSize, legendSize);\n var rectItems = new RectOption(heatMap.element.id + '_legend_list' + i, heatMap.colorCollection[i].color, tempBorder, 1, listRect);\n this.drawSvgCanvas.drawRectangle(rectItems, this.translategroup);\n heatMap.horizontalGradient ? legendX = legendX + this.legendSize + this.labelPadding + size.width + this.listInterval :\n legendY += this.legendSize + this.listInterval;\n }\n if (!heatMap.enableCanvasRendering) {\n var clippath = heatMap.renderer.createClipPath({ id: heatMap.element.id + '_LegendScale_ClipPath' });\n var clipRect = heatMap.renderer.drawRectangle(this.legendGroup);\n clippath.appendChild(clipRect);\n this.translategroup.appendChild(clippath);\n this.translategroup.setAttribute('style', 'clip-path:url(#' + clippath.id + ')');\n this.legendScale.appendChild(this.translategroup);\n heatMap.svgObject.appendChild(this.legend);\n }\n };\n /**\n * @private\n */\n Legend.prototype.translatePage = function (heatMap, page, isNext) {\n var padding = 5;\n if ((isNext && page >= 1 && page < this.numberOfPages) || (!isNext && page > 1 && page <= this.numberOfPages)) {\n if (isNext) {\n this.currentPage += 1;\n this.legendRect.y += this.legendRect.height;\n }\n else {\n this.currentPage -= 1;\n this.legendRect.y -= this.legendRect.height;\n }\n if (!heatMap.enableCanvasRendering) {\n this.paginggroup.removeChild(this.paginggroup.firstChild);\n while (this.translategroup.childNodes.length) {\n this.translategroup.removeChild(this.translategroup.firstChild);\n }\n }\n else {\n var ctx = heatMap.canvasRenderer.ctx;\n ctx.fillRect(this.legendRectScale.x - padding, this.legendRectScale.y - padding, this.legendRectScale.width +\n padding, this.legendRectScale.height + (2 * padding));\n ctx.fillRect(this.pagingRect.x, this.pagingRect.y, this.pagingRect.width, this.pagingRect.height);\n }\n this.renderListLegendMode(this.legendRectScale);\n }\n };\n return Legend;\n}());\nexport { Legend };\n","/**\n * Heat Map Component\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, NotifyPropertyChanges, Internationalization, Complex } from '@syncfusion/ej2-base';\nimport { remove, Event, EventHandler } from '@syncfusion/ej2-base';\nimport { SvgRenderer, CanvasRenderer, Browser } from '@syncfusion/ej2-base';\nimport { Size, stringToNumber, RectOption, Rect, TextBasic, measureText } from './utils/helper';\nimport { DrawSvgCanvas, TextOption, titlePositionX, getTitle, showTooltip, getElement } from './utils/helper';\nimport { removeElement, CanvasTooltip, getTooltipText } from './utils/helper';\nimport { Margin, Title } from './model/base';\nimport { Theme, getThemeColor } from './model/theme';\nimport { Axis } from './axis/axis';\nimport { AxisHelper } from './axis/axis-helpers';\nimport { Series, CellSettings } from './series/series';\nimport { PaletteSettings, CellColor } from './utils/colorMapping';\nimport { TwoDimensional } from './datasource/twodimensional';\nimport { LegendSettings } from '../heatmap/legend/legend';\nvar HeatMap = /** @class */ (function (_super) {\n __extends(HeatMap, _super);\n function HeatMap() {\n /**\n * The width of the heatmap as a string accepts input as both like '100px' or '100%'.\n * If specified as '100%, heatmap renders to the full width of its parent element.\n * @default null\n */\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** @private */\n _this.enableCanvasRendering = false;\n /** @private */\n _this.horizontalGradient = _this.legendSettings.position === 'Bottom' || _this.legendSettings.position === 'Top';\n /**\n * @private\n */\n _this.tooltipCollection = [];\n /**\n * @private\n */\n _this.isCellData = false;\n return _this;\n }\n HeatMap.prototype.preRender = function () {\n this.initPrivateVariable();\n this.unWireEvents();\n this.wireEvents();\n };\n HeatMap.prototype.initPrivateVariable = function () {\n this.renderer = new SvgRenderer(this.element.id);\n this.canvasRenderer = new CanvasRenderer(this.element.id);\n this.heatMapAxis = new AxisHelper(this);\n this.heatMapSeries = new Series(this);\n this.drawSvgCanvas = new DrawSvgCanvas(this);\n this.twoDimensional = new TwoDimensional(this);\n this.cellColor = new CellColor(this);\n this.tempRectHoverClass = '';\n this.tempTooltipRectId = '';\n this.setCulture();\n };\n /**\n * Method to set culture for heatmap\n */\n HeatMap.prototype.setCulture = function () {\n this.intl = new Internationalization();\n };\n HeatMap.prototype.render = function () {\n this.trigger('load', { heatmap: this });\n this.processInitData();\n this.setTheme();\n this.initAxis();\n this.calculateMaxLength();\n this.heatMapAxis.calculateVisibleLabels();\n this.twoDimensional.processDataSource(this.completeAdaptDataSource);\n this.createSvg();\n this.cellColor.getColorCollection();\n this.calculateBounds();\n this.renderElements();\n this.element.appendChild(this.svgObject);\n if (this.tooltipModule) {\n this.tooltipModule.showHideTooltip(false);\n }\n this.trigger('created', { heatmap: this });\n };\n /**\n * To re-calculate the datasource while changing datasource property dynamically.\n * @private\n */\n HeatMap.prototype.reRenderDatasource = function () {\n this.processInitData();\n this.calculateMaxLength();\n this.heatMapAxis.calculateVisibleLabels();\n this.twoDimensional.processDataSource(this.completeAdaptDataSource);\n this.cellColor.getColorCollection();\n this.calculateBounds();\n };\n /**\n * To process datasource property.\n * @private\n */\n HeatMap.prototype.processInitData = function () {\n if (this.adaptorModule) {\n this.adaptorModule.constructDatasource(this.dataSource);\n }\n else {\n this.completeAdaptDataSource = this.dataSource;\n }\n };\n /**\n * To set render mode of heatmap as SVG or Canvas.\n * @private\n */\n HeatMap.prototype.setRenderMode = function () {\n if (this.renderingMode === 'Canvas') {\n this.enableCanvasRendering = true;\n }\n else if (this.renderingMode === 'Auto' &&\n (this.axisCollections[0].axisLabelSize * this.axisCollections[1].axisLabelSize) >= 10000) {\n this.enableCanvasRendering = true;\n }\n else {\n this.enableCanvasRendering = false;\n }\n };\n HeatMap.prototype.renderElements = function () {\n this.renderSecondaryElement();\n this.renderBorder();\n this.renderTitle();\n this.heatMapAxis.renderAxes();\n if (this.tooltipModule && this.showTooltip) {\n this.tooltipModule.tooltipObject = null;\n this.tooltipModule.createTooltipDiv(this);\n }\n this.heatMapSeries.renderRectSeries();\n if (this.legendModule && this.legendSettings.visible) {\n this.legendModule.renderLegendItems(this);\n }\n };\n /**\n * Get component name\n */\n HeatMap.prototype.getModuleName = function () {\n return 'heatmap';\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @private\n */\n HeatMap.prototype.getPersistData = function () {\n return '';\n };\n HeatMap.prototype.onPropertyChanged = function (newProp, oldProp) {\n var renderer = false;\n var refreshBounds = false;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'renderingMode':\n renderer = true;\n break;\n case 'cellSettings':\n renderer = true;\n break;\n case 'showTooltip':\n refreshBounds = true;\n break;\n case 'dataSource':\n this.isCellData = false;\n this.reRenderDatasource();\n renderer = true;\n break;\n case 'titleSettings':\n case 'width':\n case 'height':\n case 'margin':\n case 'legendSettings':\n refreshBounds = true;\n break;\n case 'yAxis':\n case 'xAxis':\n this.heatMapAxis.calculateVisibleLabels();\n this.twoDimensional.processDataSource(this.completeAdaptDataSource);\n refreshBounds = true;\n break;\n case 'paletteSettings':\n this.cellColor.getColorCollection();\n this.calculateBounds();\n renderer = true;\n break;\n case 'theme':\n this.setTheme();\n renderer = true;\n break;\n }\n }\n if (!refreshBounds && renderer) {\n this.createSvg();\n this.renderElements();\n this.element.appendChild(this.svgObject);\n this.trigger('created', { heatmap: this });\n }\n else if (refreshBounds) {\n this.createSvg();\n this.refreshBound();\n this.element.appendChild(this.svgObject);\n this.trigger('created', { heatmap: this });\n }\n };\n HeatMap.prototype.createSvg = function () {\n this.removeSvg();\n this.setRenderMode();\n this.calculateSize();\n if (!this.enableCanvasRendering) {\n this.svgObject = this.renderer.createSvg({\n id: this.element.id + '_svg',\n width: this.availableSize.width,\n height: this.availableSize.height\n });\n }\n else {\n this.svgObject = this.canvasRenderer.createCanvas({\n id: this.element.id + '_canvas',\n width: this.availableSize.width,\n height: this.availableSize.height\n });\n }\n };\n /**\n * To Remove the SVG.\n */\n HeatMap.prototype.removeSvg = function () {\n if (document.getElementById(this.element.id + '_Secondary_Element')) {\n remove(document.getElementById(this.element.id + '_Secondary_Element'));\n }\n if (document.getElementById(this.element.id + 'Celltooltipcontainer')) {\n remove(document.getElementById(this.element.id + 'Celltooltipcontainer'));\n }\n if (this.svgObject) {\n var svgElement = document.getElementById(this.svgObject.id);\n if (svgElement) {\n while (this.svgObject.childNodes.length) {\n this.svgObject.removeChild(this.svgObject.firstChild);\n }\n remove(this.svgObject);\n }\n }\n };\n HeatMap.prototype.renderSecondaryElement = function () {\n var tooltipDiv = document.createElement('div');\n tooltipDiv.id = this.element.id + '_Secondary_Element';\n tooltipDiv.setAttribute('style', 'position: relative');\n this.element.appendChild(tooltipDiv);\n };\n /**\n * To provide the array of modules needed for control rendering\n * @return{ModuleDeclaration[]}\n * @private\n */\n HeatMap.prototype.requiredModules = function () {\n var modules = [];\n if (this.showTooltip) {\n modules.push({\n member: 'Tooltip',\n args: [this]\n });\n }\n if (this.legendSettings) {\n modules.push({\n member: 'Legend',\n args: [this]\n });\n }\n if (this.dataSource) {\n modules.push({\n member: 'Adaptor',\n args: [this]\n });\n }\n return modules;\n };\n /**\n * To destroy the widget\n * @method destroy\n * @return {void}.\n * @member of Heatmap\n */\n HeatMap.prototype.destroy = function () {\n this.unWireEvents();\n _super.prototype.destroy.call(this);\n this.element.innerHTML = '';\n this.element.classList.remove('e-heatmap');\n };\n HeatMap.prototype.renderBorder = function () {\n this.border = {\n width: 0\n };\n var width = 0;\n var rect = new RectOption(this.element.id + '_HeatmapBorder', this.themeStyle.background, this.border, 1, new Rect(width / 2, width / 2, this.availableSize.width - width, this.availableSize.height - width));\n this.drawSvgCanvas.drawRectangle(rect, this.svgObject);\n };\n HeatMap.prototype.calculateSize = function () {\n var width = stringToNumber(this.width, this.element.offsetWidth) || this.element.offsetWidth || 600;\n var height = stringToNumber(this.height, this.element.offsetHeight) || this.element.offsetHeight || 450;\n this.availableSize = new Size(width, height);\n };\n HeatMap.prototype.renderTitle = function () {\n if (this.titleSettings.text) {\n var titleStyle = this.titleSettings.textStyle;\n var anchor = titleStyle.textAlignment === 'Near' ? 'start' :\n titleStyle.textAlignment === 'Far' ? 'end' : 'middle';\n this.elementSize = measureText(this.titleCollection[0], titleStyle);\n var options = new TextOption(this.element.id + '_HeatmapTitle', new TextBasic(titlePositionX(this.availableSize.width - this.margin.left - this.margin.right, this.margin.left, this.margin.right, titleStyle), this.margin.top + ((this.elementSize.height) * 3 / 4), anchor, this.titleCollection), titleStyle, titleStyle.color || this.themeStyle.heatMapTitle);\n if (this.titleCollection.length > 1) {\n this.drawSvgCanvas.createWrapText(options, titleStyle, this.svgObject);\n }\n else {\n this.drawSvgCanvas.createText(options, this.svgObject, this.titleCollection[0]);\n if (this.titleCollection[0].indexOf('...') !== -1 && this.enableCanvasRendering) {\n this.tooltipCollection.push(new CanvasTooltip(this.titleSettings.text, new Rect(this.margin.left, this.margin.top, this.elementSize.width, this.elementSize.height)));\n }\n }\n }\n };\n HeatMap.prototype.titleTooltip = function (event, x, y, isTouch) {\n var targetId = event.target.id;\n if ((targetId === (this.element.id + '_HeatmapTitle')) && (event.target.textContent.indexOf('...') > -1)) {\n showTooltip(this.titleSettings.text, x, y, this.element.offsetWidth, this.element.id + '_Title_Tooltip', getElement(this.element.id + '_Secondary_Element'), isTouch);\n }\n else {\n removeElement(this.element.id + '_Title_Tooltip');\n }\n };\n HeatMap.prototype.axisTooltip = function (event, x, y, isTouch) {\n var targetId = event.target.id;\n if ((targetId.indexOf(this.element.id + '_XAxis_Label') !== -1) && (event.target.textContent.indexOf('...') > -1)) {\n var index = parseInt(targetId.replace(this.element.id + '_XAxis_Label', ''), 10);\n showTooltip(this.axisCollections[0].axisLabels[index], x, y, this.element.offsetWidth, this.element.id + '_axis_Tooltip', getElement(this.element.id + '_Secondary_Element'), isTouch);\n }\n else {\n removeElement(this.element.id + '_axis_Tooltip');\n }\n };\n HeatMap.prototype.isHeatmapRect = function (x, y) {\n var firstRectDetails = [];\n var lastRectDetails = [];\n var isRect;\n firstRectDetails.push(this.heatMapSeries.rectPositionCollection[0][0]);\n lastRectDetails.push(this.heatMapSeries.rectPositionCollection[this.yLength - 1][this.xLength - 1]);\n isRect = (x >= firstRectDetails[0].x && y >= firstRectDetails[0].y &&\n x <= (lastRectDetails[0].x + lastRectDetails[0].width) &&\n y <= (lastRectDetails[0].y + lastRectDetails[0].height)) ? true : false;\n return isRect;\n };\n HeatMap.prototype.setTheme = function () {\n /*! Set theme */\n this.themeStyle = getThemeColor(this.theme);\n };\n HeatMap.prototype.calculateBounds = function () {\n var margin = this.margin;\n // Title Height;\n var titleHeight = 0;\n var padding = (this.legendModule && this.legendSettings.position === 'Top') ? 0 : 16; // title padding\n var left = margin.left;\n var width = this.availableSize.width - left - margin.right;\n if (this.titleSettings.text) {\n this.titleCollection = getTitle(this.titleSettings.text, this.titleSettings.textStyle, width);\n titleHeight = (measureText(this.titleSettings.text, this.titleSettings.textStyle).height * this.titleCollection.length) +\n padding;\n }\n var top = margin.top + titleHeight;\n var height = this.availableSize.height - top - margin.bottom;\n this.initialClipRect = new Rect(left, top, width, height);\n var legendTop = this.initialClipRect.y;\n if (this.legendModule && this.legendSettings.visible) {\n this.legendModule.calculateLegendBounds(this.initialClipRect);\n }\n this.heatMapAxis.measureAxis(this.initialClipRect);\n if (this.legendModule && this.legendSettings.visible) {\n this.legendModule.calculateLegendSize(this.initialClipRect, legendTop);\n }\n this.heatMapAxis.calculateAxisSize(this.initialClipRect);\n };\n HeatMap.prototype.refreshBound = function () {\n this.calculateBounds();\n this.renderElements();\n };\n HeatMap.prototype.initAxis = function () {\n var axis;\n var axes = [this.xAxis, this.yAxis];\n this.axisCollections = [];\n for (var i = 0, len = axes.length; i < len; i++) {\n axis = axes[i];\n axis.orientation = (i === 0) ? 'Horizontal' : 'Vertical';\n this.axisCollections.push(axis);\n }\n };\n /**\n * Method to bind events for HeatMap\n */\n HeatMap.prototype.wireEvents = function () {\n /*! Find the Events type */\n var isIE11Pointer = Browser.isPointer;\n var start = Browser.touchStartEvent;\n var stop = Browser.touchEndEvent;\n var move = Browser.touchMoveEvent;\n var cancel = isIE11Pointer ? 'pointerleave' : 'mouseleave';\n EventHandler.add(this.element, Browser.isDevice ? start : 'click', this.heatMapMouseClick, this);\n EventHandler.add(this.element, start, this.heatMapMouseMove, this);\n EventHandler.add(this.element, stop, this.heatMapMouseLeave, this);\n EventHandler.add(this.element, move, this.heatMapMouseMove, this);\n EventHandler.add(this.element, cancel, this.heatMapMouseLeave, this);\n window.addEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.heatMapResize.bind(this));\n this.setStyle(this.element);\n };\n /**\n * Applying styles for heatmap element\n */\n HeatMap.prototype.setStyle = function (element) {\n element.style.touchAction = 'element';\n element.style.msTouchAction = 'element';\n element.style.msContentZooming = 'none';\n element.style.msUserSelect = 'none';\n element.style.webkitUserSelect = 'none';\n element.style.position = 'relative';\n };\n /**\n * Method to unbind events for HeatMap\n */\n HeatMap.prototype.unWireEvents = function () {\n /*! Find the Events type */\n var isIE11Pointer = Browser.isPointer;\n var start = Browser.touchStartEvent;\n var stop = Browser.touchEndEvent;\n var move = Browser.touchMoveEvent;\n var cancel = isIE11Pointer ? 'pointerleave' : 'mouseleave';\n EventHandler.remove(this.element, Browser.isDevice ? start : 'click', this.heatMapMouseClick);\n EventHandler.remove(this.element, start, this.heatMapMouseMove);\n EventHandler.remove(this.element, move, this.heatMapMouseLeave);\n EventHandler.remove(this.element, move, this.heatMapMouseMove);\n EventHandler.remove(this.element, cancel, this.heatMapMouseLeave);\n window.removeEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.heatMapResize);\n };\n /**\n * Handles the heatmap resize.\n * @return {boolean}\n * @private\n */\n HeatMap.prototype.heatMapResize = function (e) {\n var _this = this;\n if (this.resizeTimer) {\n clearTimeout(this.resizeTimer);\n }\n this.resizeTimer = setTimeout(function () {\n if (_this.isDestroyed) {\n clearTimeout(_this.resizeTimer);\n return;\n }\n _this.createSvg();\n _this.refreshBound();\n _this.element.appendChild(_this.svgObject);\n }, 500);\n return false;\n };\n /**\n * Get the maximum length of data source for both horizontal and vertical\n * @private\n */\n HeatMap.prototype.calculateMaxLength = function () {\n var dataSource = this.completeAdaptDataSource;\n if (dataSource && dataSource.length > 0) {\n var xAxisMax = dataSource.length - 1;\n var yAxisMax = 0;\n for (var i = 0; i <= xAxisMax; i++) {\n var length_1 = dataSource[i].length;\n yAxisMax = yAxisMax > length_1 ? yAxisMax : length_1;\n }\n this.axisCollections[0].maxLength = xAxisMax;\n this.axisCollections[1].maxLength = yAxisMax - 1;\n }\n else {\n this.axisCollections[0].maxLength = 0;\n this.axisCollections[1].maxLength = 0;\n }\n };\n /**\n * To find mouse x, y for aligned heatmap element svg position\n */\n HeatMap.prototype.setMouseXY = function (pageX, pageY) {\n var rect = this.element.getBoundingClientRect();\n var svgCanvasRect;\n if (this.enableCanvasRendering) {\n svgCanvasRect = document.getElementById(this.element.id + '_canvas').getBoundingClientRect();\n }\n else {\n svgCanvasRect = document.getElementById(this.element.id + '_svg').getBoundingClientRect();\n }\n this.mouseX = (pageX - rect.left) - Math.max(svgCanvasRect.left - rect.left, 0);\n this.mouseY = (pageY - rect.top) - Math.max(svgCanvasRect.top - rect.top, 0);\n };\n HeatMap.prototype.heatMapMouseClick = function (e) {\n var pageX;\n var pageY;\n var tooltipText;\n var touchArg;\n var elementRect = this.element.getBoundingClientRect();\n if (e.type === 'touchstart') {\n this.isTouch = true;\n touchArg = e;\n pageY = touchArg.changedTouches[0].clientY;\n pageX = touchArg.changedTouches[0].clientX;\n }\n else {\n this.isTouch = false;\n pageY = e.clientY;\n pageX = e.clientX;\n }\n pageX -= elementRect.left;\n pageY -= elementRect.top;\n var isheatmapRect = this.isHeatmapRect(pageX, pageY);\n if (isheatmapRect) {\n var currentRect = this.heatMapSeries.getCurrentRect(pageX, pageY);\n this.trigger('cellClick', {\n heatmap: this,\n value: currentRect.value,\n x: currentRect.x,\n y: currentRect.y,\n xLabel: this.heatMapSeries.hoverXAxisLabel,\n yLabel: this.heatMapSeries.hoverYAxisLabel,\n xValue: this.heatMapSeries.hoverXAxisValue,\n yValue: this.heatMapSeries.hoverYAxisValue,\n cellElement: this.enableCanvasRendering ? null : document.getElementById(currentRect.id)\n });\n }\n this.notify('click', e);\n if (this.paletteSettings.type !== 'Gradient' && this.legendModule && this.legendSettings.visible) {\n var page = this.legendModule.navigationCollections;\n if (page.length && pageX > page[0].x && pageX < page[0].x + page[0].width &&\n pageY > page[0].y && pageY < page[0].y + page[0].height) {\n this.legendModule.translatePage(this, this.legendModule.currentPage, true);\n }\n else if (page.length && pageX > page[1].x && pageX < page[1].x + page[1].width &&\n pageY > page[1].y && pageY < page[1].y + page[1].height) {\n this.legendModule.translatePage(this, this.legendModule.currentPage, false);\n }\n }\n return false;\n };\n /**\n * Handles the mouse Move.\n * @return {boolean}\n * @private\n */\n HeatMap.prototype.heatMapMouseMove = function (e) {\n var _this = this;\n var pageX;\n var pageY;\n var tooltipText;\n var touchArg;\n var elementRect = this.element.getBoundingClientRect();\n if (e.type === 'touchmove' || e.type === 'touchstart') {\n this.isTouch = true;\n touchArg = e;\n pageX = touchArg.changedTouches[0].clientX;\n pageY = touchArg.changedTouches[0].clientY;\n }\n else {\n this.isTouch = false;\n pageX = e.clientX;\n pageY = e.clientY;\n }\n pageX -= elementRect.left;\n pageY -= elementRect.top;\n this.setMouseXY(pageX, pageY);\n if (e.target && e.target.id) {\n var isheatmapRect = this.isHeatmapRect(pageX, pageY);\n if (this.legendModule) {\n if (isheatmapRect) {\n if (this.paletteSettings.type === 'Gradient' &&\n this.legendSettings.showGradientPointer && this.legendSettings.visible) {\n this.legendModule.renderGradientPointer(e, pageX, pageY);\n }\n }\n else {\n this.legendModule.removeGradientPointer(this);\n }\n }\n var isshowTooltip = void 0;\n isshowTooltip = this.showTooltip && this.tooltipModule ? this.isHeatmapRect(pageX, pageY) : false;\n if (isshowTooltip) {\n var currentRect = void 0;\n currentRect = this.heatMapSeries.getCurrentRect(pageX, pageY);\n if (this.tempTooltipRectId !== currentRect.id) {\n if (this.showTooltip) {\n if ((this.cellSettings.enableCellHighlighting || (this.tooltipModule && this.showTooltip))\n && !this.enableCanvasRendering) {\n this.heatMapSeries.highlightSvgRect(currentRect.id);\n }\n this.tooltipModule.renderTooltip(currentRect);\n if (this.isTouch) {\n if (this.tooltipTimer) {\n window.clearTimeout(this.tooltipTimer);\n }\n this.tooltipTimer = setTimeout(function () {\n _this.tooltipModule.tooltipObject.fadeOut();\n _this.tooltipModule.isFadeout = true;\n }, 1500);\n if (e.type === 'touchmove') {\n e.preventDefault();\n }\n }\n }\n this.tempTooltipRectId = currentRect.id;\n }\n }\n else {\n if (e.target.id.indexOf('Celltooltip') === -1) {\n if ((this.cellSettings.enableCellHighlighting || this.showTooltip) && !this.enableCanvasRendering) {\n this.heatMapSeries.highlightSvgRect(e.target.id);\n }\n if (this.tooltipModule && this.showTooltip) {\n this.tooltipModule.showHideTooltip(false, true);\n }\n }\n this.tempTooltipRectId = '';\n }\n var elementRect_1;\n if (!this.enableCanvasRendering) {\n if (this.titleSettings.text && this.titleSettings.textStyle.textOverflow === 'Trim') {\n this.titleTooltip(e, pageX, pageY, this.isTouch);\n }\n this.axisTooltip(e, pageX, pageY, this.isTouch);\n if (this.legendModule && this.legendSettings.visible && this.legendSettings.showLabel) {\n this.legendModule.renderLegendLabelTooltip(e);\n }\n }\n else {\n elementRect_1 = this.element.getBoundingClientRect();\n tooltipText = getTooltipText(this.tooltipCollection, pageX, pageY) ||\n (this.legendModule && getTooltipText(this.legendModule.legendLabelTooltip, pageX, pageY));\n if (tooltipText) {\n showTooltip(tooltipText, this.mouseX, this.mouseY, this.element.offsetWidth, this.element.id + '_canvas_Tooltip', getElement(this.element.id + '_Secondary_Element'), this.isTouch);\n }\n else {\n removeElement(this.element.id + '_canvas_Tooltip');\n }\n }\n }\n return true;\n };\n /**\n * Handles the mouse end.\n * @return {boolean}\n * @private\n */\n HeatMap.prototype.heatMapMouseLeave = function (e) {\n var _this = this;\n if (e.target && e.target.id &&\n (this.cellSettings.enableCellHighlighting || (this.tooltipModule && this.showTooltip))\n && !this.enableCanvasRendering) {\n this.heatMapSeries.highlightSvgRect(this.tempTooltipRectId);\n }\n if (this.tooltipModule && this.showTooltip && e.type === 'mouseleave') {\n this.tooltipModule.showHideTooltip(false);\n }\n this.tempTooltipRectId = '';\n if (this.paletteSettings.type === 'Gradient' && this.legendModule && this.legendSettings.showGradientPointer &&\n this.legendSettings.visible) {\n if (e.type === 'mouseleave') {\n this.legendModule.removeGradientPointer(this);\n }\n else {\n if (this.gradientTimer) {\n window.clearTimeout(this.gradientTimer);\n }\n this.gradientTimer = setTimeout(function () { _this.legendModule.removeGradientPointer(_this); }, 1500);\n }\n }\n if (this.enableCanvasRendering) {\n var main = document.getElementById(this.element.id + '_hoverRect_canvas');\n if (main) {\n main.style.visibility = 'hidden';\n this.tempRectHoverClass = '';\n }\n }\n if (this.titleSettings.text && this.titleCollection[0].indexOf('...') !== -1) {\n if (!this.enableCanvasRendering) {\n removeElement(this.element.id + '_Title_Tooltip');\n }\n else {\n removeElement(this.element.id + '_canvas_Tooltip');\n }\n }\n return true;\n };\n __decorate([\n Property(null)\n ], HeatMap.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], HeatMap.prototype, \"height\", void 0);\n __decorate([\n Property(true)\n ], HeatMap.prototype, \"showTooltip\", void 0);\n __decorate([\n Event()\n ], HeatMap.prototype, \"tooltipRender\", void 0);\n __decorate([\n Property('SVG')\n ], HeatMap.prototype, \"renderingMode\", void 0);\n __decorate([\n Property(null)\n ], HeatMap.prototype, \"dataSource\", void 0);\n __decorate([\n Property('Material')\n ], HeatMap.prototype, \"theme\", void 0);\n __decorate([\n Complex({}, Margin)\n ], HeatMap.prototype, \"margin\", void 0);\n __decorate([\n Complex({ text: '', textStyle: Theme.heatMapTitleFont }, Title)\n ], HeatMap.prototype, \"titleSettings\", void 0);\n __decorate([\n Complex({}, Axis)\n ], HeatMap.prototype, \"xAxis\", void 0);\n __decorate([\n Complex({}, LegendSettings)\n ], HeatMap.prototype, \"legendSettings\", void 0);\n __decorate([\n Complex({}, PaletteSettings)\n ], HeatMap.prototype, \"paletteSettings\", void 0);\n __decorate([\n Complex({}, Axis)\n ], HeatMap.prototype, \"yAxis\", void 0);\n __decorate([\n Complex({}, CellSettings)\n ], HeatMap.prototype, \"cellSettings\", void 0);\n __decorate([\n Event()\n ], HeatMap.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], HeatMap.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], HeatMap.prototype, \"cellClick\", void 0);\n HeatMap = __decorate([\n NotifyPropertyChanges\n ], HeatMap);\n return HeatMap;\n}(Component));\nexport { HeatMap };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\nimport { DataUtil } from '@syncfusion/ej2-data';\nimport { increaseDateTimeInterval } from '../utils/helper';\n/**\n * Configures the Adaptor Property in the Heatmap.\n */\nvar Data = /** @class */ (function (_super) {\n __extends(Data, _super);\n function Data() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Data.prototype, \"data\", void 0);\n __decorate([\n Property(false)\n ], Data.prototype, \"isJsonData\", void 0);\n __decorate([\n Property('cell')\n ], Data.prototype, \"adaptorType\", void 0);\n __decorate([\n Property('')\n ], Data.prototype, \"xDataMapping\", void 0);\n __decorate([\n Property('')\n ], Data.prototype, \"yDataMapping\", void 0);\n __decorate([\n Property('')\n ], Data.prototype, \"valueMapping\", void 0);\n return Data;\n}(ChildProperty));\nexport { Data };\nvar AdaptiveMinMax = /** @class */ (function () {\n function AdaptiveMinMax() {\n }\n return AdaptiveMinMax;\n}());\nexport { AdaptiveMinMax };\nvar Adaptor = /** @class */ (function () {\n function Adaptor(heatMap) {\n this.reconstructedXAxis = [];\n this.reconstructedYAxis = [];\n this.adaptiveXMinMax = new AdaptiveMinMax();\n this.adaptiveYMinMax = new AdaptiveMinMax();\n this.heatMap = heatMap;\n }\n /**\n * Method to construct Two Dimentional Datasource.\n * @return {void}\n * @private\n */\n Adaptor.prototype.constructDatasource = function (adaptData) {\n if (adaptData && adaptData.data === undefined) {\n this.heatMap.completeAdaptDataSource = adaptData;\n }\n else if (!adaptData.isJsonData && adaptData.adaptorType === 'Table' || adaptData.data === null) {\n this.heatMap.completeAdaptDataSource = adaptData.data;\n }\n else if (adaptData.isJsonData && adaptData.adaptorType === 'Table') {\n this.heatMap.completeAdaptDataSource = this.processJsonTableData(adaptData);\n }\n else if (adaptData.isJsonData && adaptData.adaptorType === 'Cell') {\n this.heatMap.completeAdaptDataSource = this.processJsonCellData(adaptData);\n }\n else if (!adaptData.isJsonData && adaptData.adaptorType === 'Cell') {\n var xAxis = this.heatMap.xAxis;\n var yAxis = this.heatMap.yAxis;\n this.adaptiveXMinMax.min = xAxis.minimum;\n this.adaptiveXMinMax.max = xAxis.maximum;\n this.adaptiveYMinMax.min = yAxis.minimum;\n this.adaptiveYMinMax.max = yAxis.maximum;\n if (((xAxis.valueType === 'Numeric' || xAxis.valueType === 'DateTime') &&\n (isNullOrUndefined(xAxis.minimum) || isNullOrUndefined(xAxis.maximum))) ||\n ((yAxis.valueType === 'Numeric' || yAxis.valueType === 'DateTime') &&\n (isNullOrUndefined(yAxis.minimum) || isNullOrUndefined(yAxis.maximum)))) {\n this.getMinMaxValue(adaptData.data, xAxis, yAxis);\n }\n this.constructAdaptiveAxis();\n this.heatMap.completeAdaptDataSource = this.processCellData(adaptData);\n this.heatMap.isCellData = true;\n }\n };\n /**\n * Method to construct Axis Collection.\n * @return {void}\n * @private\n */\n Adaptor.prototype.constructAdaptiveAxis = function () {\n var xAxis = this.heatMap.xAxis;\n var yAxis = this.heatMap.yAxis;\n var intervalType;\n if (xAxis.valueType === 'Numeric') {\n this.reconstructedXAxis = this.getNumericAxisCollection(this.adaptiveXMinMax.min, this.adaptiveXMinMax.max);\n }\n if (yAxis.valueType === 'Numeric') {\n this.reconstructedYAxis = this.getNumericAxisCollection(this.adaptiveYMinMax.min, this.adaptiveYMinMax.max);\n }\n if (xAxis.valueType === 'DateTime') {\n this.reconstructedXAxis = this.getDateAxisCollection(this.adaptiveXMinMax.min, this.adaptiveXMinMax.max, xAxis.intervalType);\n }\n if (yAxis.valueType === 'DateTime') {\n this.reconstructedYAxis = this.getDateAxisCollection(this.adaptiveYMinMax.min, this.adaptiveYMinMax.max, yAxis.intervalType);\n }\n };\n /**\n * Method to calculate Numeric Axis Collection.\n * @return {string[]}\n * @private\n */\n Adaptor.prototype.getNumericAxisCollection = function (min, max) {\n var loopIndex = min;\n var tempAxisColl = [];\n while (loopIndex <= max) {\n tempAxisColl.push(loopIndex.toString());\n loopIndex++;\n }\n return tempAxisColl;\n };\n /**\n * Method to calculate DateTime Axis Collection.\n * @return {string[]}\n * @private\n */\n Adaptor.prototype.getDateAxisCollection = function (min, max, intervalType) {\n var option = {\n skeleton: 'full',\n type: 'dateTime'\n };\n var dateParser = this.heatMap.intl.getDateParser(option);\n var dateFormatter = this.heatMap.intl.getDateFormat(option);\n min = Date.parse(dateParser(dateFormatter(new Date(DataUtil.parse.parseJson({ val: min }).val))));\n var tempInterval = min;\n var tempAxisColl = [];\n while (tempInterval <= max) {\n tempAxisColl.push(new Date(tempInterval).toString());\n tempInterval = increaseDateTimeInterval(tempInterval, 1, intervalType).getTime();\n }\n return tempAxisColl;\n };\n /**\n * Method to calculate Maximum and Minimum Value from datasource.\n * @return {void}\n * @private\n */\n Adaptor.prototype.getMinMaxValue = function (data, xAxis, yAxis) {\n if (data.length > 0) {\n this.adaptiveXMinMax.min = !isNullOrUndefined(xAxis.minimum) ? xAxis.minimum : data[0][0];\n this.adaptiveYMinMax.min = !isNullOrUndefined(yAxis.minimum) ? yAxis.minimum : data[0][1];\n this.adaptiveXMinMax.max = !isNullOrUndefined(xAxis.maximum) ? xAxis.maximum : data[0][0];\n this.adaptiveYMinMax.max = !isNullOrUndefined(yAxis.maximum) ? yAxis.maximum : data[0][1];\n }\n for (var dataIndex = 0; dataIndex < data.length; dataIndex++) {\n if (data[dataIndex][0] < this.adaptiveXMinMax.min && isNullOrUndefined(xAxis.minimum)) {\n this.adaptiveXMinMax.min = data[dataIndex][0];\n }\n if (data[dataIndex][0] > this.adaptiveXMinMax.max && isNullOrUndefined(xAxis.maximum)) {\n this.adaptiveXMinMax.max = data[dataIndex][0];\n }\n if (data[dataIndex][1] < this.adaptiveYMinMax.min && isNullOrUndefined(yAxis.minimum)) {\n this.adaptiveYMinMax.min = data[dataIndex][1];\n }\n if (data[dataIndex][1] > this.adaptiveYMinMax.max && isNullOrUndefined(yAxis.maximum)) {\n this.adaptiveYMinMax.max = data[dataIndex][1];\n }\n }\n };\n /**\n * Method to process Cell datasource.\n * @return {Object}\n * @private\n */\n Adaptor.prototype.processCellData = function (adaptordata) {\n // tslint:disable-next-line:no-any \n var tempDataCollection = adaptordata.data;\n var xLabels = this.reconstructedXAxis;\n var yLabels = this.reconstructedYAxis;\n var currentDataXIndex = 0;\n var currentDataYIndex = 0;\n if (tempDataCollection.length) {\n this.reconstructData = [];\n for (var xindex = 0; xindex < tempDataCollection.length; xindex++) {\n if (this.heatMap.xAxis.valueType === 'Category') {\n currentDataXIndex = tempDataCollection[xindex][0];\n }\n else {\n currentDataXIndex = xLabels.indexOf(tempDataCollection[xindex][0].toString());\n }\n if (currentDataXIndex > -1) {\n while (!this.reconstructData[currentDataXIndex]) {\n this.reconstructData.push([]);\n }\n if (this.heatMap.yAxis.valueType === 'Category') {\n currentDataYIndex = tempDataCollection[xindex][1];\n }\n else {\n currentDataYIndex = yLabels.indexOf(tempDataCollection[xindex][1].toString());\n }\n if (currentDataYIndex !== -1) {\n while (this.reconstructData[currentDataXIndex][currentDataYIndex] !== '') {\n this.reconstructData[currentDataXIndex].push('');\n }\n this.reconstructData[currentDataXIndex][currentDataYIndex] = isNullOrUndefined(tempDataCollection[xindex][2]) ?\n '' : tempDataCollection[xindex][2];\n }\n }\n }\n }\n return this.reconstructData;\n };\n /**\n * Method to process JSON Cell datasource.\n * @return {Object}\n * @private\n */\n Adaptor.prototype.processJsonCellData = function (adaptordata) {\n // tslint:disable-next-line:no-any \n var tempDataCollection = adaptordata.data;\n var xLabels = this.heatMap.xAxis.labels ? this.heatMap.xAxis.labels : [];\n var yLabels = this.heatMap.yAxis.labels ? this.heatMap.yAxis.labels : [];\n var currentDataXIndex = 0;\n var currentDataYIndex = 0;\n if (tempDataCollection.length) {\n this.reconstructData = [];\n for (var index = 0; index < tempDataCollection.length; index++) {\n currentDataXIndex = xLabels.indexOf(tempDataCollection[index][adaptordata.xDataMapping]);\n if (currentDataXIndex !== -1) {\n while (!this.reconstructData[currentDataXIndex]) {\n this.reconstructData.push([]);\n }\n currentDataYIndex = yLabels.indexOf(tempDataCollection[index][adaptordata.yDataMapping]);\n if (currentDataYIndex !== -1) {\n while (this.reconstructData[currentDataXIndex][currentDataYIndex] !== '') {\n this.reconstructData[currentDataXIndex].push('');\n }\n this.reconstructData[currentDataXIndex][currentDataYIndex] =\n isNullOrUndefined(tempDataCollection[index][adaptordata.valueMapping]) ?\n '' : tempDataCollection[index][adaptordata.valueMapping];\n }\n }\n }\n }\n return this.reconstructData;\n };\n /**\n * Method to process JSON Table datasource.\n * @return {Object}\n * @private\n */\n Adaptor.prototype.processJsonTableData = function (adaptordata) {\n // tslint:disable-next-line:no-any \n var tempDataCollection = adaptordata.data;\n var currentDataXIndex = 0;\n var currentDataYIndex = 0;\n var xLabels = this.heatMap.xAxis.labels ? this.heatMap.xAxis.labels : [];\n var yLabels = this.heatMap.yAxis.labels ? this.heatMap.yAxis.labels : [];\n var key;\n if (tempDataCollection.length) {\n this.reconstructData = [];\n for (var xindex = 0; xindex < tempDataCollection.length; xindex++) {\n currentDataXIndex = xLabels.indexOf(tempDataCollection[xindex][adaptordata.xDataMapping]);\n if (currentDataXIndex !== -1) {\n while (!this.reconstructData[currentDataXIndex]) {\n this.reconstructData.push([]);\n }\n for (var index = 0; index < Object.keys(tempDataCollection[xindex]).length; index++) {\n key = Object.keys(tempDataCollection[xindex])[index];\n currentDataYIndex = key !== adaptordata.xDataMapping ? yLabels.indexOf(key) : -1;\n if (currentDataYIndex !== -1) {\n while (this.reconstructData[currentDataXIndex][currentDataYIndex] !== '') {\n this.reconstructData[currentDataXIndex].push('');\n }\n this.reconstructData[currentDataXIndex][currentDataYIndex] =\n isNullOrUndefined(tempDataCollection[xindex][key]) ?\n '' : tempDataCollection[xindex][key];\n }\n }\n }\n }\n }\n return this.reconstructData;\n };\n /**\n * To destroy the Adaptor.\n * @return {void}\n * @private\n */\n Adaptor.prototype.destroy = function (heatMap) {\n /**\n * No Lines\n */\n };\n ;\n /**\n * To get Module name\n * @private\n */\n Adaptor.prototype.getModuleName = function () {\n return 'Adaptor';\n };\n return Adaptor;\n}());\nexport { Adaptor };\n","/**\n * HeatMap tool tip file\n */\nimport { createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Tooltip as tool } from '@syncfusion/ej2-svg-base';\nvar Tooltip = /** @class */ (function () {\n function Tooltip(heatMap) {\n /* private */\n this.isFirst = true;\n /* private */\n this.isFadeout = false;\n this.heatMap = heatMap;\n }\n /**\n * Get component name\n */\n Tooltip.prototype.getModuleName = function () {\n return 'Tooltip';\n };\n /**\n * To show/hide Tooltip.\n * @private\n */\n Tooltip.prototype.showHideTooltip = function (isShow, isFadeout) {\n var ele = document.getElementById(this.heatMap.element.id + 'Celltooltipcontainer');\n if (!isShow) {\n if (ele && ele.style.visibility !== 'hidden') {\n if (this.tooltipObject && isFadeout) {\n this.tooltipObject.fadeOut();\n }\n else {\n if (this.tooltipObject && this.tooltipObject.element) {\n var tooltipElement = this.tooltipObject.element.firstChild;\n tooltipElement.setAttribute('opacity', '0');\n }\n }\n ele.style.visibility = 'hidden';\n }\n this.isFadeout = true;\n }\n else {\n ele.style.visibility = 'visible';\n }\n };\n /**\n * To destroy the Tooltip.\n * @return {void}\n * @private\n */\n Tooltip.prototype.destroy = function (heatMap) {\n /**\n * Destroy method performed here\n */\n };\n ;\n /**\n * To add Tooltip to the rect cell.\n * @return {void}\n * @private\n */\n Tooltip.prototype.createTooltip = function (x, y, tempTooltipText) {\n var offset = null;\n if (this.heatMap.cellSettings.showLabel && this.heatMap.heatMapSeries.checkLabelXDisplay &&\n this.heatMap.heatMapSeries.checkLabelYDisplay) {\n offset = parseInt(this.heatMap.cellSettings.textStyle.size, 10) / 2;\n }\n this.tooltipObject = new tool({\n enableAnimation: false,\n offset: offset,\n location: { x: x, y: y },\n theme: this.heatMap.theme,\n content: tempTooltipText,\n areaBounds: {\n height: this.heatMap.initialClipRect.height + this.heatMap.initialClipRect.y,\n width: this.heatMap.initialClipRect.width, x: this.heatMap.initialClipRect.x\n }\n }, '#' + this.heatMap.element.id + 'Celltooltipcontainer');\n };\n /**\n * To create div container for tooltip.\n * @return {void}\n * @private\n */\n Tooltip.prototype.createTooltipDiv = function (heatMap) {\n var element2 = createElement('div', {\n id: this.heatMap.element.id + 'Celltooltipcontainer',\n styles: 'position:absolute'\n });\n this.heatMap.element.appendChild(createElement('div', {\n id: this.heatMap.element.id + 'Celltooltipparent',\n styles: 'position:relative'\n })\n .appendChild(element2));\n };\n /**\n * To render tooltip.\n * @private\n */\n Tooltip.prototype.renderTooltip = function (currentRect) {\n var hetmapSeries = this.heatMap.heatMapSeries;\n var tempTooltipText = [''];\n if (isNullOrUndefined(currentRect.value) || (!isNullOrUndefined(currentRect.value) && currentRect.value.toString() === '')) {\n this.showHideTooltip(false, false);\n }\n else {\n if (!isNullOrUndefined(this.heatMap.tooltipRender)) {\n // this.tooltipObject.header = '';\n // this.tooltipObject.content = this.getTemplateText(\n // currentRect, this.heatMap.tooltipTemplate, hetmapSeries.hoverXAxisLabel,\n // hetmapSeries.hoverYAxisLabel);\n var argData = {\n heatmap: this.heatMap,\n cancel: false,\n name: 'tooltipRender',\n value: currentRect.value,\n xValue: this.heatMap.heatMapSeries.hoverXAxisValue,\n yValue: this.heatMap.heatMapSeries.hoverYAxisValue,\n xLabel: this.heatMap.heatMapSeries.hoverXAxisLabel ?\n this.heatMap.heatMapSeries.hoverXAxisLabel.toString() : null,\n yLabel: this.heatMap.heatMapSeries.hoverYAxisLabel ?\n this.heatMap.heatMapSeries.hoverYAxisLabel.toString() : null,\n content: [hetmapSeries.hoverXAxisLabel + ' | ' + hetmapSeries.hoverYAxisLabel + ' : ' +\n hetmapSeries.getFormatedText(currentRect.value, this.heatMap.cellSettings.format)]\n };\n this.heatMap.trigger('tooltipRender', argData);\n if (!argData.cancel) {\n tempTooltipText = argData.content;\n }\n else {\n if (this.tooltipObject) {\n this.showHideTooltip(false);\n }\n return;\n }\n }\n else {\n // this.tooltipObject.header = hetmapSeries.hoverYAxisLabel.toString();\n tempTooltipText = [hetmapSeries.hoverXAxisLabel + ' | ' + hetmapSeries.hoverYAxisLabel + ' : ' +\n hetmapSeries.getFormatedText(currentRect.value, this.heatMap.cellSettings.format)];\n }\n if (!this.tooltipObject) {\n this.createTooltip(currentRect.x + (currentRect.width / 2), currentRect.y + (currentRect.height / 2), tempTooltipText);\n }\n else {\n this.tooltipObject.content = tempTooltipText;\n }\n this.showHideTooltip(true);\n this.tooltipObject.enableAnimation = (this.isFirst || this.isFadeout) ? false : true;\n this.isFirst = (this.isFirst) ? false : this.isFirst;\n this.isFadeout = (this.isFadeout) ? false : this.isFadeout;\n this.tooltipObject.location.x = currentRect.x + (currentRect.width / 2);\n this.tooltipObject.location.y = currentRect.y + (currentRect.height / 2);\n }\n };\n return Tooltip;\n}());\nexport { Tooltip };\n","import * as index from '@syncfusion/ej2-heatmap';\nindex.HeatMap.Inject( index.Legend,index.Tooltip,index.Adaptor);\nexport * from '@syncfusion/ej2-heatmap';\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, Complex } from '@syncfusion/ej2-base';\n/**\n * Options for customizing the fonts.\n */\nvar Font = /** @class */ (function (_super) {\n __extends(Font, _super);\n function Font() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('16px')\n ], Font.prototype, \"size\", void 0);\n __decorate([\n Property('')\n ], Font.prototype, \"color\", void 0);\n __decorate([\n Property('Segoe UI')\n ], Font.prototype, \"fontFamily\", void 0);\n __decorate([\n Property('Regular')\n ], Font.prototype, \"fontWeight\", void 0);\n __decorate([\n Property('Normal')\n ], Font.prototype, \"fontStyle\", void 0);\n __decorate([\n Property(1)\n ], Font.prototype, \"opacity\", void 0);\n return Font;\n}(ChildProperty));\nexport { Font };\n/**\n * Configures the margin of linear gauge.\n */\nvar Margin = /** @class */ (function (_super) {\n __extends(Margin, _super);\n function Margin() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(10)\n ], Margin.prototype, \"left\", void 0);\n __decorate([\n Property(10)\n ], Margin.prototype, \"right\", void 0);\n __decorate([\n Property(10)\n ], Margin.prototype, \"top\", void 0);\n __decorate([\n Property(10)\n ], Margin.prototype, \"bottom\", void 0);\n return Margin;\n}(ChildProperty));\nexport { Margin };\n/**\n * Configures the border in linear gauge.\n */\nvar Border = /** @class */ (function (_super) {\n __extends(Border, _super);\n function Border() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Border.prototype, \"color\", void 0);\n __decorate([\n Property(0)\n ], Border.prototype, \"width\", void 0);\n return Border;\n}(ChildProperty));\nexport { Border };\n/**\n * Options for customizing the annotation.\n */\nvar Annotation = /** @class */ (function (_super) {\n __extends(Annotation, _super);\n function Annotation() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Annotation.prototype, \"content\", void 0);\n __decorate([\n Property(0)\n ], Annotation.prototype, \"x\", void 0);\n __decorate([\n Property(0)\n ], Annotation.prototype, \"y\", void 0);\n __decorate([\n Property('None')\n ], Annotation.prototype, \"verticalAlignment\", void 0);\n __decorate([\n Property('None')\n ], Annotation.prototype, \"horizontalAlignment\", void 0);\n __decorate([\n Property('-1')\n ], Annotation.prototype, \"zIndex\", void 0);\n __decorate([\n Complex({ size: '12px', color: null }, Font)\n ], Annotation.prototype, \"font\", void 0);\n __decorate([\n Property(null)\n ], Annotation.prototype, \"axisIndex\", void 0);\n __decorate([\n Property(null)\n ], Annotation.prototype, \"axisValue\", void 0);\n return Annotation;\n}(ChildProperty));\nexport { Annotation };\n/**\n * Options for customizing the container of linear gauge.\n */\nvar Container = /** @class */ (function (_super) {\n __extends(Container, _super);\n function Container() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Normal')\n ], Container.prototype, \"type\", void 0);\n __decorate([\n Property(0)\n ], Container.prototype, \"height\", void 0);\n __decorate([\n Property(0)\n ], Container.prototype, \"width\", void 0);\n __decorate([\n Property(10)\n ], Container.prototype, \"roundedCornerRadius\", void 0);\n __decorate([\n Property('transparent')\n ], Container.prototype, \"backgroundColor\", void 0);\n __decorate([\n Complex({ width: 1, color: '#bfbfbf' }, Border)\n ], Container.prototype, \"border\", void 0);\n __decorate([\n Property(0)\n ], Container.prototype, \"offset\", void 0);\n return Container;\n}(ChildProperty));\nexport { Container };\n/**\n * Options for customizing the tooltip in linear gauge.\n */\nvar TooltipSettings = /** @class */ (function (_super) {\n __extends(TooltipSettings, _super);\n function TooltipSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], TooltipSettings.prototype, \"enable\", void 0);\n __decorate([\n Property('#FFFFFF')\n ], TooltipSettings.prototype, \"fill\", void 0);\n __decorate([\n Complex({ color: '#686868', size: '13px' }, Font)\n ], TooltipSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Property(null)\n ], TooltipSettings.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], TooltipSettings.prototype, \"template\", void 0);\n __decorate([\n Property(true)\n ], TooltipSettings.prototype, \"enableAnimation\", void 0);\n __decorate([\n Complex({}, Border)\n ], TooltipSettings.prototype, \"border\", void 0);\n return TooltipSettings;\n}(ChildProperty));\nexport { TooltipSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, Complex, ChildProperty, Collection } from '@syncfusion/ej2-base';\nimport { Font, Border } from '../model/base';\n/** Options for customizing the axis line. */\nvar Line = /** @class */ (function (_super) {\n __extends(Line, _super);\n function Line() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Line.prototype, \"dashArray\", void 0);\n __decorate([\n Property(null)\n ], Line.prototype, \"height\", void 0);\n __decorate([\n Property(2)\n ], Line.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], Line.prototype, \"color\", void 0);\n __decorate([\n Property(0)\n ], Line.prototype, \"offset\", void 0);\n return Line;\n}(ChildProperty));\nexport { Line };\n/**\n * Options for customizing the axis labels appearance.\n */\nvar Label = /** @class */ (function (_super) {\n __extends(Label, _super);\n function Label() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({ size: '12px', color: null }, Font)\n ], Label.prototype, \"font\", void 0);\n __decorate([\n Property(false)\n ], Label.prototype, \"useRangeColor\", void 0);\n __decorate([\n Property('')\n ], Label.prototype, \"format\", void 0);\n __decorate([\n Property(0)\n ], Label.prototype, \"offset\", void 0);\n return Label;\n}(ChildProperty));\nexport { Label };\n/**\n * Options for customizing the ranges of an axis.\n */\nvar Range = /** @class */ (function (_super) {\n __extends(Range, _super);\n function Range() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Range.prototype, \"start\", void 0);\n __decorate([\n Property(null)\n ], Range.prototype, \"end\", void 0);\n __decorate([\n Property('Outside')\n ], Range.prototype, \"position\", void 0);\n __decorate([\n Property('')\n ], Range.prototype, \"color\", void 0);\n __decorate([\n Property(10)\n ], Range.prototype, \"startWidth\", void 0);\n __decorate([\n Property(10)\n ], Range.prototype, \"endWidth\", void 0);\n __decorate([\n Property(0)\n ], Range.prototype, \"offset\", void 0);\n __decorate([\n Complex({ color: '#000000', width: 0 }, Border)\n ], Range.prototype, \"border\", void 0);\n return Range;\n}(ChildProperty));\nexport { Range };\n/**\n * Options for customizing the minor tick lines.\n */\nvar Tick = /** @class */ (function (_super) {\n __extends(Tick, _super);\n function Tick() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(20)\n ], Tick.prototype, \"height\", void 0);\n __decorate([\n Property(2)\n ], Tick.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], Tick.prototype, \"interval\", void 0);\n __decorate([\n Property(null)\n ], Tick.prototype, \"color\", void 0);\n __decorate([\n Property(null)\n ], Tick.prototype, \"offset\", void 0);\n return Tick;\n}(ChildProperty));\nexport { Tick };\n/**\n * Options for customizing the pointers of an axis.\n */\nvar Pointer = /** @class */ (function (_super) {\n __extends(Pointer, _super);\n function Pointer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** @private */\n _this.animationComplete = true;\n /** @private */\n _this.currentValue = null;\n return _this;\n }\n __decorate([\n Property('Marker')\n ], Pointer.prototype, \"type\", void 0);\n __decorate([\n Property(null)\n ], Pointer.prototype, \"value\", void 0);\n __decorate([\n Property('InvertedTriangle')\n ], Pointer.prototype, \"markerType\", void 0);\n __decorate([\n Property(null)\n ], Pointer.prototype, \"imageUrl\", void 0);\n __decorate([\n Complex({ color: '#808080' }, Border)\n ], Pointer.prototype, \"border\", void 0);\n __decorate([\n Property(10)\n ], Pointer.prototype, \"roundedCornerRadius\", void 0);\n __decorate([\n Property('Far')\n ], Pointer.prototype, \"placement\", void 0);\n __decorate([\n Property(20)\n ], Pointer.prototype, \"height\", void 0);\n __decorate([\n Property(20)\n ], Pointer.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], Pointer.prototype, \"color\", void 0);\n __decorate([\n Property(1)\n ], Pointer.prototype, \"opacity\", void 0);\n __decorate([\n Property(0)\n ], Pointer.prototype, \"animationDuration\", void 0);\n __decorate([\n Property(false)\n ], Pointer.prototype, \"enableDrag\", void 0);\n __decorate([\n Property(0)\n ], Pointer.prototype, \"offset\", void 0);\n __decorate([\n Property(null)\n ], Pointer.prototype, \"description\", void 0);\n return Pointer;\n}(ChildProperty));\nexport { Pointer };\nvar Axis = /** @class */ (function (_super) {\n __extends(Axis, _super);\n function Axis() {\n /**\n * Specifies the minimum value of an axis.\n * @default 0\n */\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** @private */\n _this.visibleLabels = [];\n return _this;\n }\n __decorate([\n Property(0)\n ], Axis.prototype, \"minimum\", void 0);\n __decorate([\n Property(100)\n ], Axis.prototype, \"maximum\", void 0);\n __decorate([\n Property(false)\n ], Axis.prototype, \"isInversed\", void 0);\n __decorate([\n Property(false)\n ], Axis.prototype, \"opposedPosition\", void 0);\n __decorate([\n Complex({}, Line)\n ], Axis.prototype, \"line\", void 0);\n __decorate([\n Collection([{}], Range)\n ], Axis.prototype, \"ranges\", void 0);\n __decorate([\n Collection([{}], Pointer)\n ], Axis.prototype, \"pointers\", void 0);\n __decorate([\n Complex({ width: 2, height: 20 }, Tick)\n ], Axis.prototype, \"majorTicks\", void 0);\n __decorate([\n Complex({ width: 1, height: 10 }, Tick)\n ], Axis.prototype, \"minorTicks\", void 0);\n __decorate([\n Complex({}, Label)\n ], Axis.prototype, \"labelStyle\", void 0);\n return Axis;\n}(ChildProperty));\nexport { Axis };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { axisLabelRender } from '../model/constant';\nimport { VisibleLabels, Size, measureText, getLabelFormat, Rect } from '../utils/helper';\nimport { valueToCoefficient, Align, getRangePalette, VisibleRange, withInRange, calculateNiceInterval } from '../utils/helper';\n/**\n * @private\n * To calculate the overall axis bounds for gauge.\n */\nvar AxisLayoutPanel = /** @class */ (function () {\n function AxisLayoutPanel(gauge) {\n this.gauge = gauge;\n }\n /**\n * To calculate the axis bounds\n */\n AxisLayoutPanel.prototype.calculateAxesBounds = function () {\n var axis;\n var bounds;\n var pointer;\n this.gauge.nearSizes = [];\n this.gauge.farSizes = [];\n var x;\n var y;\n var width;\n var height;\n var axisPadding = 8;\n var containerRect = this.gauge.containerBounds;\n this.checkThermometer();\n for (var i = 0; i < this.gauge.axes.length; i++) {\n axis = this.gauge.axes[i];\n axis.checkAlign = new Align(i, ((!axis.opposedPosition) ? 'Near' : 'Far'));\n (!axis.opposedPosition) ? this.gauge.nearSizes.push(1) : this.gauge.farSizes.push(1);\n this.calculateLineBounds(axis, i);\n this.calculateTickBounds(axis, i);\n this.calculateLabelBounds(axis, i);\n if (axis.pointers.length > 0) {\n this.calculatePointerBounds(axis, i);\n }\n if (axis.ranges.length > 0) {\n this.calculateRangesBounds(axis, i);\n }\n bounds = axis.labelBounds;\n if (this.gauge.orientation === 'Vertical') {\n x = (!axis.opposedPosition) ? bounds.x - axisPadding : axis.lineBounds.x;\n y = axis.lineBounds.y;\n height = axis.lineBounds.height;\n width = Math.abs((!axis.opposedPosition) ? (axis.lineBounds.x - x) : ((bounds.x + bounds.width + axisPadding) - x));\n }\n else {\n y = (!axis.opposedPosition) ? bounds.y - bounds.height - axisPadding : axis.lineBounds.y;\n x = axis.lineBounds.x;\n width = axis.lineBounds.width;\n height = Math.abs((!axis.opposedPosition) ? Math.abs(axis.lineBounds.y - y) : (bounds.y + axisPadding) - y);\n }\n axis.bounds = new Rect(x, y, width, height);\n }\n };\n /**\n * Calculate axis line bounds\n * @param axis\n * @param axisIndex\n */\n AxisLayoutPanel.prototype.calculateLineBounds = function (axis, axisIndex) {\n var x;\n var y;\n var width;\n var height;\n var index;\n var prevAxis;\n var lineHeight = axis.line.height;\n var orientation = this.gauge.orientation;\n var containerRect = this.gauge.containerBounds;\n lineHeight = (axis.line.width > 0) ? lineHeight : null;\n if (orientation === 'Vertical') {\n y = (isNullOrUndefined(lineHeight)) ? containerRect.y :\n containerRect.y + ((containerRect.height / 2) - (lineHeight / 2));\n width = axis.line.width;\n height = (isNullOrUndefined(lineHeight)) ? containerRect.height : lineHeight;\n }\n else {\n x = (isNullOrUndefined(lineHeight)) ? containerRect.x :\n containerRect.x + ((containerRect.width / 2) - (lineHeight / 2));\n height = axis.line.width;\n width = (isNullOrUndefined(lineHeight)) ? containerRect.width : lineHeight;\n }\n index = this.checkPreviousAxes(axis, axisIndex);\n if (isNullOrUndefined(index)) {\n if (orientation === 'Vertical') {\n x = (!axis.opposedPosition ? containerRect.x : containerRect.x + containerRect.width) + axis.line.offset;\n }\n else {\n y = (!axis.opposedPosition ? containerRect.y : containerRect.y + containerRect.height) + axis.line.offset;\n }\n }\n else {\n prevAxis = this.gauge.axes[index];\n if (orientation === 'Vertical') {\n x = ((!axis.opposedPosition) ? prevAxis.bounds.x : (prevAxis.bounds.x + prevAxis.bounds.width)) + axis.line.offset;\n }\n else {\n y = ((!axis.opposedPosition) ? prevAxis.bounds.y : (prevAxis.bounds.y + prevAxis.bounds.height)) + axis.line.offset;\n }\n }\n axis.lineBounds = new Rect(x, y, width, height);\n };\n /**\n * Calculate axis tick bounds\n * @param axis\n * @param axisIndex\n */\n AxisLayoutPanel.prototype.calculateTickBounds = function (axis, axisIndex) {\n var x;\n var y;\n var width;\n var height;\n var major;\n var minor;\n var min = Math.min(axis.minimum, axis.maximum);\n var max = Math.max(axis.minimum, axis.maximum);\n min = (min === max) ? max - 1 : min;\n var interval = axis.majorTicks.interval;\n var bounds = axis.lineBounds;\n major = axis.majorTicks;\n minor = axis.minorTicks;\n axis.majorInterval = major.interval;\n axis.minorInterval = minor.interval;\n var size = (this.gauge.orientation === 'Vertical' ? bounds.height : bounds.width);\n var lineSize = (this.gauge.orientation === 'Vertical' ? bounds.width : bounds.height) / 2;\n axis.majorInterval = isNullOrUndefined(axis.majorInterval) ? calculateNiceInterval(min, max, size, this.gauge.orientation)\n : major.interval;\n axis.visibleRange = new VisibleRange(min, max, axis.majorInterval, (max - min));\n axis.minorInterval = (isNullOrUndefined(axis.minorInterval)) ? axis.majorInterval / 2 : axis.minorInterval;\n if (this.gauge.orientation === 'Vertical') {\n x = (!axis.opposedPosition ? (bounds.x - lineSize - major.height) : bounds.x + lineSize) + major.offset;\n axis.majorTickBounds = new Rect(x, bounds.y, major.height, bounds.height);\n x = (!axis.opposedPosition ? (bounds.x - lineSize - minor.height) : bounds.x + lineSize) + minor.offset;\n axis.minorTickBounds = new Rect(x, bounds.y, minor.height, bounds.height);\n }\n else {\n y = (!axis.opposedPosition ? (bounds.y - lineSize - major.height) : bounds.y + lineSize) + major.offset;\n axis.majorTickBounds = new Rect(bounds.x, y, bounds.width, major.height);\n y = (!axis.opposedPosition ? (bounds.y - lineSize - minor.height) : bounds.y + lineSize) + minor.offset;\n axis.minorTickBounds = new Rect(bounds.x, y, bounds.width, minor.height);\n }\n };\n /**\n * To Calculate axis label bounds\n * @param axis\n * @param axisIndex\n */\n AxisLayoutPanel.prototype.calculateLabelBounds = function (axis, axisIndex) {\n var x;\n var y;\n var width;\n var height;\n var padding = 5;\n var bounds = axis.majorTickBounds;\n var offset = axis.labelStyle.offset;\n this.calculateVisibleLabels(axis);\n width = axis.maxLabelSize.width;\n height = axis.maxLabelSize.height / 2;\n if (this.gauge.orientation === 'Vertical') {\n x = (!axis.opposedPosition ? (bounds.x - width - padding) : (bounds.x + bounds.width + padding)) + offset;\n y = axis.lineBounds.y;\n }\n else {\n y = (!axis.opposedPosition ? (bounds.y - padding) : ((bounds.y + bounds.height + padding) + height)) + offset;\n x = axis.lineBounds.x;\n }\n axis.labelBounds = new Rect(x, y, width, height);\n };\n /**\n * Calculate pointer bounds\n * @param axis\n * @param axisIndex\n */\n AxisLayoutPanel.prototype.calculatePointerBounds = function (axis, axisIndex) {\n var pointer;\n var actualValue;\n var length;\n var val = [];\n var range = axis.visibleRange;\n var orientation = this.gauge.orientation;\n var bounds;\n var line = axis.lineBounds;\n var label = axis.labelBounds;\n var currentVal;\n var type;\n var markerType;\n var nearX;\n var farX;\n var nearY;\n var farY;\n var minimumValue = Math.min(range.min, range.max);\n var maximumValue = Math.max(range.min, range.max);\n for (var i = 0; i < axis.pointers.length; i++) {\n pointer = axis.pointers[i];\n pointer.currentValue = pointer.value !== null ?\n pointer.value < minimumValue ? minimumValue : pointer.value > maximumValue ? maximumValue : pointer.value\n : minimumValue;\n if (pointer.width > 0 && withInRange(pointer.currentValue, null, null, range.max, range.min, 'pointer')) {\n this['calculate' + pointer.type + 'Bounds'](axisIndex, axis, i, pointer);\n }\n }\n };\n /**\n * Calculate marker pointer bounds\n * @param axisIndex\n * @param axis\n * @param pointerIndex\n * @param pointer\n */\n AxisLayoutPanel.prototype.calculateMarkerBounds = function (axisIndex, axis, pointerIndex, pointer) {\n var x;\n var y;\n var line = axis.lineBounds;\n var offset = pointer.offset;\n var range = axis.visibleRange;\n var placement = pointer.placement;\n var tick = axis.majorTickBounds;\n var label = axis.labelBounds;\n var border = pointer.border.width;\n if (this.gauge.orientation === 'Vertical') {\n x = (!axis.opposedPosition) ? (placement === 'Near') ? label.x : (placement === 'Center') ? tick.x : line.x :\n placement === 'Far' ? label.x + label.width : (placement === 'Center' ? tick.x + tick.width : line.x);\n x = !axis.opposedPosition ? ((pointer.placement === 'Far' ? x + border : x - border) + (offset)) :\n ((pointer.placement === 'Near' ? x - border : x + border) + (offset));\n y = ((valueToCoefficient(pointer.currentValue, axis, this.gauge.orientation, range) * line.height) + line.y);\n }\n else {\n y = (!axis.opposedPosition) ? (placement === 'Near') ? label.y - label.height : (placement === 'Center') ? tick.y :\n line.y : (placement === 'Far') ? label.y : (placement === 'Center') ? tick.y + tick.height : line.y;\n y = !axis.opposedPosition ? ((pointer.placement === 'Far' ? y + border : y - border) + (offset)) :\n ((pointer.placement === 'Near' ? y - border : y + border) + (offset));\n x = ((valueToCoefficient(pointer.currentValue, axis, this.gauge.orientation, range) * line.width) + line.x);\n }\n pointer.bounds = new Rect(x, y, pointer.width, pointer.height);\n };\n /**\n * Calculate bar pointer bounds\n * @param axisIndex\n * @param axis\n * @param pointerIndex\n * @param pointer\n */\n AxisLayoutPanel.prototype.calculateBarBounds = function (axisIndex, axis, pointerIndex, pointer) {\n var x1;\n var x2;\n var y1;\n var y2;\n var height;\n var width;\n var line = axis.lineBounds;\n var padding = 10;\n var range = axis.visibleRange;\n var orientation = this.gauge.orientation;\n var offset = pointer.offset;\n var container = this.gauge.containerBounds;\n if (orientation === 'Vertical') {\n x1 = (container.width > 0) ? container.x + ((container.width / 2) - (pointer.width / 2)) :\n (!axis.opposedPosition) ? (line.x + padding) : (line.x - pointer.width - padding);\n x1 += (offset);\n y1 = ((valueToCoefficient(pointer.currentValue, axis, orientation, range) * line.height) + line.y);\n y2 = ((valueToCoefficient(range.min, axis, orientation, range) * line.height) + line.y);\n height = Math.abs(y2 - y1);\n y1 = (!axis.isInversed) ? y1 : y2;\n width = pointer.width;\n }\n else {\n x1 = ((valueToCoefficient(range.min, axis, orientation, range) * line.width) + line.x);\n y1 = (container.height > 0) ? (container.y + (container.height / 2) - (pointer.height) / 2) :\n (!axis.opposedPosition) ? (line.y + padding) : (line.y - pointer.height - padding);\n y1 += (offset);\n height = pointer.height;\n x2 = ((valueToCoefficient(pointer.currentValue, axis, orientation, range) * line.width) + line.x);\n width = Math.abs(x2 - x1);\n x1 = (!axis.isInversed) ? x1 : x2;\n }\n pointer.bounds = new Rect(x1, y1, width, height);\n };\n /**\n * Calculate ranges bounds\n * @param axis\n * @param axisIndex\n */\n AxisLayoutPanel.prototype.calculateRangesBounds = function (axis, axisIndex) {\n var range;\n var start;\n var end;\n var line = axis.lineBounds;\n var visibleRange = axis.visibleRange;\n var orientation = this.gauge.orientation;\n var startVal;\n var endVal;\n var pointX;\n var pointY;\n var width;\n var height;\n var position;\n var startWidth;\n var endWidth;\n var colors;\n for (var i = 0; i < axis.ranges.length; i++) {\n range = axis.ranges[i];\n if (withInRange(null, range.start, range.end, visibleRange.max, visibleRange.min, 'range')) {\n start = Math.min(range.start, range.end);\n end = Math.max(range.start, range.end);\n position = range.position;\n startWidth = range.startWidth;\n endWidth = range.endWidth;\n colors = this.gauge.rangePalettes.length ? this.gauge.rangePalettes : getRangePalette();\n range.interior = range.color ? range.color : colors[i % colors.length];\n if (this.gauge.orientation === 'Vertical') {\n pointX = line.x + (range.offset);\n pointY = (valueToCoefficient(end, axis, orientation, visibleRange) * line.height) + line.y;\n height = (valueToCoefficient(start, axis, orientation, visibleRange) * line.height) + line.y;\n height -= pointY;\n startVal = !axis.opposedPosition ? position === 'Inside' ? (pointX + startWidth) : (pointX - startWidth)\n : position === 'Inside' ? (pointX - startWidth) : (pointX + startWidth);\n endVal = !axis.opposedPosition ? position === 'Inside' ? (pointX + endWidth) : (pointX - endWidth) :\n position === 'Inside' ? (pointX - endWidth) : (pointX + endWidth);\n range.path = 'M' + pointX + ' ' + pointY + ' L ' + pointX + ' ' + (pointY + height) +\n ' L ' + startVal + ' ' + (pointY + height) + ' L ' + endVal + ' ' + pointY +\n ' L ' + pointX + ' ' + pointY + ' z ';\n }\n else {\n pointX = (valueToCoefficient(end, axis, orientation, visibleRange) * line.width) + line.x;\n pointY = axis.lineBounds.y + (range.offset);\n width = (valueToCoefficient(start, axis, orientation, visibleRange) * line.width) + line.x;\n width = pointX - width;\n startVal = !axis.opposedPosition ? position === 'Inside' ? (pointY + startWidth) :\n (pointY - startWidth) : (position === 'Inside') ? (pointY - startWidth) :\n (pointY + startWidth);\n endVal = !axis.opposedPosition ? position === 'Inside' ? (pointY + endWidth) : (pointY - endWidth) :\n (position === 'Inside') ? (pointY - endWidth) : (pointY + endWidth);\n range.path = 'M' + pointX + ' ' + pointY + ' L ' + (pointX - width) + ' ' + pointY +\n ' L ' + (pointX - width) + ' ' + startVal + ' L ' + pointX + ' ' + endVal +\n ' L ' + pointX + ' ' + pointY + ' z ';\n }\n }\n }\n };\n AxisLayoutPanel.prototype.checkPreviousAxes = function (currentAxis, axisIndex) {\n var index = axisIndex - 1;\n var prevAxis;\n var isPositive = (index >= 0) ? true : false;\n if (isPositive) {\n prevAxis = this.gauge.axes[index];\n index = (prevAxis.checkAlign.align === currentAxis.checkAlign.align) ? index : this.checkPreviousAxes(currentAxis, index);\n }\n else {\n index = null;\n }\n return index;\n };\n /**\n *\n * @param axis To calculate the visible labels\n */\n AxisLayoutPanel.prototype.calculateVisibleLabels = function (axis) {\n axis.visibleLabels = [];\n var min = axis.visibleRange.min;\n var max = axis.visibleRange.max;\n var interval = axis.visibleRange.interval;\n var format;\n var argsData;\n var style = axis.labelStyle;\n var text;\n var labelSize;\n var customLabelFormat = style.format && style.format.match('{value}') !== null;\n format = this.gauge.intl.getNumberFormat({\n format: getLabelFormat(style.format), useGrouping: this.gauge.useGroupingSeparator\n });\n for (var i = min; (i <= max && interval > 0); i += interval) {\n argsData = {\n cancel: false, name: axisLabelRender, axis: axis,\n text: customLabelFormat ? style.format.replace(new RegExp('{value}', 'g'), format(i)) :\n format(i),\n value: i\n };\n this.gauge.trigger(axisLabelRender, argsData);\n labelSize = measureText(argsData.text, axis.labelStyle.font);\n if (!argsData.cancel) {\n axis.visibleLabels.push(new VisibleLabels(argsData.text, i, labelSize));\n }\n }\n this.getMaxLabelWidth(this.gauge, axis);\n };\n /**\n * Calculate maximum label width for the axis.\n * @return {void}\n * @private\n */\n AxisLayoutPanel.prototype.getMaxLabelWidth = function (gauge, axis) {\n axis.maxLabelSize = new Size(0, 0);\n var label;\n for (var i = 0; i < axis.visibleLabels.length; i++) {\n label = axis.visibleLabels[i];\n label.size = measureText(label.text, axis.labelStyle.font);\n if (label.size.width > axis.maxLabelSize.width) {\n axis.maxLabelSize.width = label.size.width;\n }\n if (label.size.height > axis.maxLabelSize.height) {\n axis.maxLabelSize.height = label.size.height;\n }\n }\n };\n AxisLayoutPanel.prototype.checkThermometer = function () {\n if (this.gauge.container.type === 'Thermometer') {\n this.gauge.axes.map(function (axis, index) {\n if (axis.isInversed) {\n axis.pointers.map(function (pointer, index) {\n if (pointer.type === 'Bar') {\n axis.isInversed = false;\n }\n });\n }\n });\n }\n };\n return AxisLayoutPanel;\n}());\nexport { AxisLayoutPanel };\n","/**\n * Specifies the linear gauge constant value\n */\n/** @private */\nexport var loaded = 'loaded';\n/** @private */\nexport var load = 'load';\n/** @private */\nexport var animationComplete = 'animationComplete';\n/** @private */\nexport var axisLabelRender = 'axisLabelRender';\n/** @private */\nexport var tooltipRender = 'tooltipRender';\n/** @private */\nexport var annotationRender = 'annotationRender';\n/** @private */\nexport var gaugeMouseMove = 'gaugeMouseMove';\n/** @private */\nexport var gaugeMouseLeave = 'gaugeMouseLeave';\n/** @private */\nexport var gaugeMouseDown = 'gaugeMouseDown';\n/** @private */\nexport var gaugeMouseUp = 'gaugeMouseUp';\n/** @private */\nexport var valueChange = 'valueChange';\n/** @private */\nexport var resized = 'resized';\n","import { Animation } from '@syncfusion/ej2-base';\nimport { animationComplete } from '../model/constant';\nimport { Size, valueToCoefficient, PathOption } from '../utils/helper';\nimport { calculateShapes, getBox } from '../utils/helper';\n/**\n * @private\n * To handle the animation for gauge\n */\nvar Animations = /** @class */ (function () {\n function Animations(gauge) {\n this.gauge = gauge;\n }\n /**\n * To do the marker pointer animation.\n * @return {void}\n * @private\n */\n Animations.prototype.performMarkerAnimation = function (element, axis, pointer) {\n var _this = this;\n var markerElement = element;\n var options;\n var timeStamp;\n var range = axis.visibleRange;\n var rectHeight = (this.gauge.orientation === 'Vertical') ? axis.lineBounds.height : axis.lineBounds.width;\n var rectY = (this.gauge.orientation === 'Vertical') ? axis.lineBounds.y : axis.lineBounds.x;\n if (this.gauge.orientation === 'Vertical') {\n pointer.bounds.y = (valueToCoefficient(pointer.currentValue, axis, this.gauge.orientation, range) * rectHeight) + rectY;\n }\n else {\n pointer.bounds.x = (valueToCoefficient(pointer.currentValue, axis, this.gauge.orientation, range) * rectHeight) + rectY;\n }\n options = new PathOption(markerElement.id, null, null, null);\n options = calculateShapes(pointer.bounds, pointer.markerType, new Size(pointer.width, pointer.height), pointer.imageUrl, options, this.gauge.orientation, axis, pointer);\n var currentValue;\n var start = pointer.startValue;\n var end = pointer.currentValue;\n start = (start === end) ? range.min : start;\n var val = Math.abs(start - end);\n var currentPath = options.d;\n new Animation({}).animate(markerElement, {\n duration: pointer.animationDuration,\n progress: function (args) {\n if (args.timeStamp >= args.delay) {\n timeStamp = ((args.timeStamp - args.delay) / args.duration);\n currentValue = (start < end) ? start + (timeStamp * val) : start - (timeStamp * val);\n if (_this.gauge.orientation === 'Vertical') {\n pointer.bounds.y = (valueToCoefficient(currentValue, axis, _this.gauge.orientation, range) *\n rectHeight) + rectY;\n }\n else {\n pointer.bounds.x = (valueToCoefficient(currentValue, axis, _this.gauge.orientation, range) *\n rectHeight) + rectY;\n }\n options = calculateShapes(pointer.bounds, pointer.markerType, new Size(pointer.width, pointer.height), pointer.imageUrl, options, _this.gauge.orientation, axis, pointer);\n markerElement.setAttribute('d', options.d);\n }\n },\n end: function (model) {\n markerElement.setAttribute('d', currentPath);\n pointer.startValue = pointer.currentValue;\n pointer.animationComplete = true;\n _this.gauge.trigger(animationComplete, { axis: axis, pointer: pointer });\n }\n });\n };\n /**\n * Perform the bar pointer animation\n * @param element\n * @param axis\n * @param pointer\n */\n Animations.prototype.performBarAnimation = function (element, axis, pointer) {\n var _this = this;\n var val;\n var radix = 10;\n var timeStamp;\n var value2;\n var value1;\n var height;\n var currentValue;\n var clipHeight;\n var clipY;\n var clipX;\n var clipVal;\n var rectHeight;\n var rectY;\n var rectX;\n var rectWidth;\n var clipWidth;\n var currentHeight;\n var clipElement;\n var range = axis.visibleRange;\n var pointerElement = element;\n var pathElement;\n var svgPathElement;\n var clipRect;\n var lineHeight = (this.gauge.orientation === 'Vertical') ? axis.lineBounds.height : axis.lineBounds.width;\n var lineY = (this.gauge.orientation === 'Vertical') ? axis.lineBounds.y : axis.lineBounds.x;\n var size = new Size(this.gauge.availableSize.width, this.gauge.availableSize.height);\n var start = pointer.startValue;\n var end = pointer.currentValue;\n start = (start === end) ? range.min : start;\n var path = '';\n var currentPath = '';\n var tagName = pointerElement.tagName;\n val = Math.abs(start - end);\n var pointerValue = (valueToCoefficient(end, axis, this.gauge.orientation, range) * lineHeight) + lineY;\n var startPointerVal = (valueToCoefficient(range.min, axis, this.gauge.orientation, range) *\n lineHeight) + lineY;\n rectY = (this.gauge.orientation === 'Vertical') ? !axis.isInversed ? pointerValue : startPointerVal :\n axis.isInversed ? pointerValue : startPointerVal;\n rectHeight = Math.abs(startPointerVal - pointerValue);\n if (this.gauge.container.type === 'Thermometer' && start === 0) {\n clipElement = pointerElement.parentElement.childNodes[1].childNodes[0].childNodes[0];\n if (this.gauge.orientation === 'Vertical') {\n clipY = clipElement.getAttribute('y');\n clipHeight = clipElement.getAttribute('height');\n clipVal = parseInt(clipY, radix) + parseInt(clipHeight, radix);\n clipElement.setAttribute('y', clipVal.toString());\n }\n else {\n clipX = clipElement.getAttribute('x');\n clipWidth = clipElement.getAttribute('width');\n clipVal = parseInt(clipX, radix) + parseInt(clipWidth, radix);\n clipElement.setAttribute('width', '0');\n }\n }\n path = getBox(pointer.bounds, this.gauge.container.type, this.gauge.orientation, new Size(pointer.bounds.width, pointer.bounds.height), 'bar', this.gauge.container.width, axis, pointer.roundedCornerRadius);\n new Animation({}).animate(pointerElement, {\n duration: pointer.animationDuration,\n progress: function (animate) {\n if (animate.timeStamp >= animate.delay) {\n timeStamp = ((animate.timeStamp - animate.delay) / animate.duration);\n currentValue = (start < end) ? start + (timeStamp * val) : start - (timeStamp * val);\n value2 = (valueToCoefficient(currentValue, axis, _this.gauge.orientation, range) * lineHeight) + lineY;\n value1 = (valueToCoefficient(range.min, axis, _this.gauge.orientation, range) * lineHeight) + lineY;\n currentHeight = Math.abs(value2 - value1);\n if (_this.gauge.orientation === 'Vertical') {\n pointer.bounds.y = (!axis.isInversed) ? value2 : value1;\n pointer.bounds.height = currentHeight;\n }\n else {\n pointer.bounds.x = (axis.isInversed) ? value2 : value1;\n pointer.bounds.width = currentHeight;\n }\n if (tagName === 'path') {\n if (start === 0 && _this.gauge.container.type === 'Thermometer') {\n (_this.gauge.orientation === 'Vertical') ?\n clipElement.setAttribute('y', (clipVal - (timeStamp * parseInt(clipHeight, radix))).toString()) :\n clipElement.setAttribute('width', (timeStamp * parseInt(clipWidth, radix)).toString());\n }\n currentPath = getBox(pointer.bounds, _this.gauge.container.type, _this.gauge.orientation, new Size(pointer.bounds.width, pointer.bounds.height), 'bar', _this.gauge.container.width, axis, pointer.roundedCornerRadius);\n pointerElement.setAttribute('d', currentPath);\n }\n else {\n if (_this.gauge.orientation === 'Vertical') {\n pointerElement.setAttribute('y', pointer.bounds.y.toString());\n pointerElement.setAttribute('height', pointer.bounds.height.toString());\n }\n else {\n pointerElement.setAttribute('x', pointer.bounds.x.toString());\n pointerElement.setAttribute('width', pointer.bounds.width.toString());\n }\n }\n }\n },\n end: function (model) {\n if (tagName === 'path') {\n if (start === 0 && _this.gauge.container.type === 'Thermometer') {\n pointerElement.parentElement.children[1].remove();\n }\n else {\n pointerElement.setAttribute('d', path);\n }\n }\n else {\n if (_this.gauge.orientation === 'Vertical') {\n pointerElement.setAttribute('y', rectY.toString());\n pointerElement.setAttribute('height', rectHeight.toString());\n }\n else {\n pointerElement.setAttribute('x', rectY.toString());\n pointerElement.setAttribute('width', rectHeight.toString());\n }\n }\n pointer.startValue = pointer.currentValue;\n _this.gauge.trigger(animationComplete, { axis: axis, pointer: pointer });\n }\n });\n };\n return Animations;\n}());\nexport { Animations };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { isNullOrUndefined, remove } from '@syncfusion/ej2-base';\nimport { Animations } from './animation';\nimport { Size, valueToCoefficient, PathOption, textElement, getElement } from '../utils/helper';\nimport { TextOption, RectOption, calculateShapes, getBox, getPathToRect, getRangeColor } from '../utils/helper';\n/**\n * @private\n * To render the axis elements\n */\nvar AxisRenderer = /** @class */ (function (_super) {\n __extends(AxisRenderer, _super);\n function AxisRenderer(gauge) {\n return _super.call(this, gauge) || this;\n }\n AxisRenderer.prototype.renderAxes = function () {\n var _this = this;\n var axis;\n var major;\n var minor;\n this.axisElements = [];\n this.axisObject = this.gauge.renderer.createGroup({\n id: this.gauge.element.id + '_Axis_Collections',\n transform: 'translate( 0, 0 )'\n });\n for (var i = 0; i < this.gauge.axes.length; i++) {\n axis = this.gauge.axes[i];\n major = axis.majorTicks;\n minor = axis.minorTicks;\n this.htmlObject = this.gauge.renderer.createGroup({ id: this.gauge.element.id + '_Axis_Group_' + i });\n this.drawAxisLine(axis, this.htmlObject, i);\n this.drawRanges(axis, this.htmlObject, i);\n this.drawTicks(axis, major, this.htmlObject, 'MajorTicks', axis.majorTickBounds);\n this.drawTicks(axis, minor, this.htmlObject, 'MinorTicks', axis.minorTickBounds);\n this.drawAxisLabels(axis, this.htmlObject);\n this.drawPointers(axis, this.htmlObject, i);\n this.axisElements.push(this.htmlObject);\n }\n this.axisElements.forEach(function (axisElement) {\n _this.axisObject.appendChild(axisElement);\n });\n this.gauge.svgObject.appendChild(this.axisObject);\n if (this.gauge.nearSizes.length !== this.gauge.farSizes.length && this.gauge.axes.length > 1) {\n this.axisAlign(this.gauge.axes);\n }\n };\n AxisRenderer.prototype.axisAlign = function (axes) {\n var nearAxisWidth = 0;\n var farAxisWidth = 0;\n var axis;\n var tranX;\n var transY;\n if (this.gauge.orientation === 'Vertical') {\n axes.forEach(function (axis, axisIndex) {\n if (!axis.opposedPosition) {\n nearAxisWidth += axis.bounds.width;\n }\n else {\n farAxisWidth += axis.bounds.width;\n }\n });\n nearAxisWidth += this.gauge.containerBounds.width / 2;\n farAxisWidth += this.gauge.containerBounds.width / 2;\n tranX = (nearAxisWidth / 2) - (farAxisWidth / 2);\n this.axisObject.setAttribute('transform', 'translate(' + tranX + ',0)');\n if (!(isNullOrUndefined(this.gauge.containerObject))) {\n this.gauge.containerObject.setAttribute('transform', 'translate(' + tranX + ',0)');\n }\n }\n else {\n axes.forEach(function (axis, axisIndex) {\n if (!axis.opposedPosition) {\n nearAxisWidth += axis.bounds.height;\n }\n else {\n farAxisWidth += axis.bounds.height;\n }\n });\n nearAxisWidth += (this.gauge.containerBounds.height / 2);\n farAxisWidth += (this.gauge.containerBounds.height / 2);\n transY = (nearAxisWidth / 2) - (farAxisWidth / 2);\n this.axisObject.setAttribute('transform', 'translate(0,' + transY + ')');\n if (!(isNullOrUndefined(this.gauge.containerObject))) {\n this.gauge.containerObject.setAttribute('transform', 'translate(0,' + transY + ')');\n }\n }\n };\n AxisRenderer.prototype.drawAxisLine = function (axis, axisObject, axisIndex) {\n var options;\n var rect = axis.lineBounds;\n var path = '';\n if (axis.line.width > 0) {\n path = 'M' + rect.x + ' ' + rect.y + ' L ' + (this.gauge.orientation === 'Vertical' ? rect.x : rect.x + rect.width) +\n ' ' + (this.gauge.orientation === 'Vertical' ? rect.y + rect.height : rect.y) + 'z';\n options = new PathOption(this.gauge.element.id + '_AxisLine_' + axisIndex, axis.line.color, axis.line.width, axis.line.color, 1, axis.line.dashArray, path);\n axisObject.appendChild(this.gauge.renderer.drawPath(options));\n }\n };\n AxisRenderer.prototype.drawTicks = function (axis, ticks, axisObject, tickID, tickBounds) {\n var tickPath = '';\n var pointY;\n var pointX;\n var options;\n var range = axis.visibleRange;\n var line = axis.lineBounds;\n var interval = ((tickID === 'MajorTicks') ? axis.majorInterval : axis.minorInterval);\n for (var i = range.min; (i <= range.max && interval > 0); i += interval) {\n if ((tickID === 'MajorTicks') || (tickID === 'MinorTicks' && i !== range.min && i !== range.max\n && (i % axis.majorInterval) !== 0)) {\n if (this.gauge.orientation === 'Vertical') {\n pointX = tickBounds.x;\n pointY = (valueToCoefficient(i, axis, this.gauge.orientation, range) * line.height) + line.y;\n tickPath = tickPath.concat('M' + pointX + ' ' + pointY + ' ' + 'L' + (pointX + ticks.height) + ' ' + pointY + ' ');\n }\n else {\n pointX = (valueToCoefficient(i, axis, this.gauge.orientation, range) * line.width) + line.x;\n pointY = tickBounds.y;\n tickPath = tickPath.concat('M' + pointX + ' ' + pointY + ' ' + 'L' + pointX + ' ' + (pointY + ticks.height) + ' ');\n }\n }\n }\n options = new PathOption(this.gauge.element.id + '_' + tickID + 'Line_' + 0, ticks.color, ticks.width, ticks.color, 1, null, tickPath);\n axisObject.appendChild(this.gauge.renderer.drawPath(options));\n };\n AxisRenderer.prototype.drawAxisLabels = function (axis, axisObject) {\n var options;\n var pointX;\n var pointY;\n var rect = axis.lineBounds;\n var bounds = axis.labelBounds;\n var tick = axis.majorTickBounds;\n var labelSize;\n var range = axis.visibleRange;\n var anchor;\n var baseline;\n var padding = 5;\n var labelColor;\n var offset = axis.labelStyle.offset;\n var labelElement = this.gauge.renderer.createGroup({ id: this.gauge.element.id + '_AxisLabelsGroup' });\n for (var i = 0; i < axis.visibleLabels.length; i++) {\n labelSize = axis.visibleLabels[i].size;\n labelColor = axis.labelStyle.useRangeColor ? getRangeColor(axis.visibleLabels[i].value, axis.ranges) :\n null;\n labelColor = isNullOrUndefined(labelColor) ? axis.labelStyle.font.color : labelColor;\n if (this.gauge.orientation === 'Vertical') {\n pointY = (valueToCoefficient(axis.visibleLabels[i].value, axis, this.gauge.orientation, range) *\n rect.height) + rect.y;\n pointX = (!axis.opposedPosition ? (tick.x - labelSize.width - padding) + offset : bounds.x);\n pointY += (labelSize.height / 4);\n }\n else {\n pointX = (valueToCoefficient(axis.visibleLabels[i].value, axis, this.gauge.orientation, range) *\n rect.width) + rect.x;\n pointY = bounds.y;\n anchor = 'middle';\n baseline = '';\n }\n options = new TextOption(this.gauge.element.id + '_AxisLabel_' + i, pointX, pointY, anchor, axis.visibleLabels[i].text, null, baseline);\n textElement(options, axis.labelStyle.font, labelColor, labelElement);\n }\n axisObject.appendChild(labelElement);\n };\n AxisRenderer.prototype.drawPointers = function (axis, axisObject, axisIndex) {\n var pointer;\n var clipId;\n var pointesGroup;\n var pointerClipRectGroup;\n pointesGroup = this.gauge.renderer.createGroup({ id: this.gauge.element.id + '_PointersGroup' });\n for (var i = 0; i < axis.pointers.length; i++) {\n pointer = axis.pointers[i];\n clipId = 'url(#' + this.gauge.element.id + '_AxisIndex_' + axisIndex + '_' + '_' + pointer.type + 'ClipRect_' + i + ')';\n if (!(isNullOrUndefined(pointer.bounds))) {\n pointerClipRectGroup = this.gauge.renderer.createGroup({\n 'id': this.gauge.element.id + '_AxisIndex_' + axisIndex + '_' + pointer.type + 'Pointer_' + i,\n 'clip-path': clipId\n });\n if (isNullOrUndefined(pointer.startValue)) {\n pointer.startValue = axis.visibleRange.min;\n }\n this['draw' + pointer.type + 'Pointer'](axis, axisIndex, pointer, i, pointerClipRectGroup);\n pointesGroup.appendChild(pointerClipRectGroup);\n }\n }\n axisObject.appendChild(pointesGroup);\n };\n AxisRenderer.prototype.drawMarkerPointer = function (axis, axisIndex, pointer, pointerIndex, parentElement) {\n var options;\n var pointerID = this.gauge.element.id + '_AxisIndex_' + axisIndex + '_' + pointer.type + 'Pointer' + '_' + pointerIndex;\n var transform = 'translate( 0, 0 )';\n var pointerElement;\n if (getElement(pointerID) && getElement(pointerID).childElementCount > 0) {\n remove(getElement(pointerID));\n }\n options = new PathOption(pointerID, pointer.color, pointer.border.width, pointer.border.color, pointer.opacity, null, null, transform);\n options = calculateShapes(pointer.bounds, pointer.markerType, new Size(pointer.width, pointer.height), pointer.imageUrl, options, this.gauge.orientation, axis, pointer);\n pointerElement = ((pointer.markerType === 'Circle' ? this.gauge.renderer.drawCircle(options)\n : (pointer.markerType === 'Image') ? this.gauge.renderer.drawImage(options) :\n this.gauge.renderer.drawPath(options)));\n parentElement.appendChild(pointerElement);\n if (pointer.animationDuration > 0 && !this.gauge.gaugeResized) {\n pointer.animationComplete = false;\n this.performMarkerAnimation(pointerElement, axis, pointer);\n }\n pointerElement.setAttribute('aria-label', pointer.description || 'Pointer:' + Number(pointer.currentValue).toString());\n };\n AxisRenderer.prototype.drawBarPointer = function (axis, axisIndex, pointer, pointerIndex, parentElement) {\n var rectOptions;\n var clipRectElement;\n var pointerElement;\n var path = '';\n var options;\n var box;\n var radius;\n var bottomRadius;\n var topRadius;\n var size = new Size(this.gauge.availableSize.width, this.gauge.availableSize.height);\n var pointerID = this.gauge.element.id + '_AxisIndex_' + axisIndex + '_' + pointer.type + 'Pointer' + '_' + pointerIndex;\n if (getElement(pointerID) && getElement(pointerID).childElementCount > 0) {\n remove(getElement(pointerID));\n }\n if (this.gauge.container.type === 'Normal') {\n rectOptions = new RectOption(pointerID, pointer.color, pointer.border, pointer.opacity, pointer.bounds, null, null);\n box = pointer.bounds;\n pointerElement = this.gauge.renderer.drawRectangle(rectOptions);\n }\n else {\n path = getBox(pointer.bounds, this.gauge.container.type, this.gauge.orientation, new Size(pointer.bounds.width, pointer.bounds.height), 'bar', this.gauge.container.width, axis, pointer.roundedCornerRadius);\n options = new PathOption(pointerID, pointer.color, pointer.border.width, pointer.border.color, pointer.opacity, null, path);\n pointerElement = this.gauge.renderer.drawPath(options);\n box = getPathToRect(pointerElement.cloneNode(true), size, this.gauge.element);\n }\n if (getElement(pointerID) && getElement(pointerID).childElementCount > 0) {\n var element = getElement(pointerID).firstElementChild;\n if (this.gauge.container.type === 'Normal') {\n element.setAttribute('x', rectOptions.x + '');\n element.setAttribute('y', rectOptions.y + '');\n element.setAttribute('width', rectOptions.width + '');\n element.setAttribute('height', rectOptions.height + '');\n }\n else {\n element.setAttribute('d', options.d);\n }\n }\n else {\n parentElement.appendChild(pointerElement);\n }\n pointerElement.setAttribute('aria-label', pointer.description || 'Pointer:' + Number(pointer.currentValue).toString());\n if (pointer.animationDuration > 0 && !this.gauge.gaugeResized) {\n if (this.gauge.container.type === 'Thermometer' && pointer.startValue === 0) {\n clipRectElement = this.gauge.renderer.drawClipPath(new RectOption(this.gauge.element.id + '_AxisIndex_' + axisIndex + '_' + '_' + pointer.type + 'ClipRect_' + pointerIndex, 'transparent', { width: 1, color: 'Gray' }, 1, box));\n parentElement.appendChild(clipRectElement);\n }\n this.performBarAnimation(pointerElement, axis, pointer);\n }\n };\n AxisRenderer.prototype.drawRanges = function (axis, axisObject, axisIndex) {\n var range;\n var options;\n var rangeElement = this.gauge.renderer.createGroup({ id: this.gauge.element.id + '_RangesGroup' });\n for (var j = 0; j < axis.ranges.length; j++) {\n range = axis.ranges[j];\n if (!(isNullOrUndefined(range.path))) {\n options = new PathOption(this.gauge.element.id + '_AxisIndex_' + axisIndex + '_Range_' + j, range.interior, range.border.width, range.border.color, 1, null, range.path);\n rangeElement.appendChild(this.gauge.renderer.drawPath(options));\n }\n }\n axisObject.appendChild(rangeElement);\n };\n return AxisRenderer;\n}(Animations));\nexport { AxisRenderer };\n","import { createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { getTemplateFunction, getElement, getElementOffset } from '../utils/helper';\nimport { getFontStyle, valueToCoefficient } from '../utils/helper';\nimport { annotationRender } from '../model/constant';\n/**\n * Represent the Annotation rendering for gauge\n */\nvar Annotations = /** @class */ (function () {\n function Annotations(gauge) {\n this.gauge = gauge;\n }\n /**\n * To render annotation elements\n */\n Annotations.prototype.renderAnnotationElements = function () {\n var _this = this;\n var secondaryID = this.gauge.element.id + '_Secondary_Element';\n var annotationGroup = createElement('div', { id: this.gauge.element.id + '_AnnotationsGroup' });\n annotationGroup.style.position = 'absolute';\n annotationGroup.style.top = '0px';\n annotationGroup.style.left = '0px';\n this.gauge.annotations.map(function (annotation, index) {\n if (annotation.content !== null) {\n _this.createAnnotationTemplate(annotationGroup, index);\n }\n });\n if (annotationGroup.childElementCount > 0 && !(isNullOrUndefined(getElement(secondaryID)))) {\n getElement(secondaryID).appendChild(annotationGroup);\n }\n };\n /**\n * To create annotation elements\n */\n Annotations.prototype.createAnnotationTemplate = function (element, annotationIndex) {\n var left;\n var top;\n var templateFn;\n var renderAnnotation = false;\n var templateElement;\n var axis;\n var axisIndex;\n var axisValue;\n var id = this.gauge.element.id + '_Annotation_' + annotationIndex;\n var annotation = this.gauge.annotations[annotationIndex];\n var childElement;\n childElement = createElement('div', {\n id: this.gauge.element.id + '_Annotation_' + annotationIndex, styles: 'position: absolute; z-index:' + annotation.zIndex + ';'\n });\n var argsData = {\n cancel: false, name: annotationRender, content: annotation.content,\n annotation: annotation, textStyle: annotation.font\n };\n this.gauge.trigger(annotationRender, argsData);\n if (!argsData.cancel) {\n templateFn = getTemplateFunction(argsData.content);\n if (templateFn && templateFn(this.gauge).length) {\n templateElement = templateFn(this.gauge);\n while (templateElement.length > 0) {\n childElement.appendChild(templateElement[0]);\n }\n }\n else {\n childElement.appendChild(createElement('div', {\n innerHTML: argsData.content,\n styles: getFontStyle(argsData.textStyle)\n }));\n }\n var offset = getElementOffset(childElement.cloneNode(true), this.gauge.element);\n if (!(isNullOrUndefined(annotation.axisValue))) {\n axisIndex = isNullOrUndefined(annotation.axisIndex) ? 0 : annotation.axisIndex;\n axis = this.gauge.axes[axisIndex];\n var range = axis.visibleRange;\n renderAnnotation = (annotation.axisValue >= range.min && annotation.axisValue <= range.max) ? true : false;\n var line = axis.lineBounds;\n if (this.gauge.orientation === 'Vertical') {\n left = line.x + annotation.x;\n top = ((valueToCoefficient(annotation.axisValue, axis, this.gauge.orientation, range) * line.height) + line.y);\n top += annotation.y;\n }\n else {\n left = ((valueToCoefficient(annotation.axisValue, axis, this.gauge.orientation, range) * line.width) + line.x);\n left += annotation.x;\n top = line.y + annotation.y;\n }\n left -= (offset.width / 2);\n top -= (offset.height / 2);\n }\n else {\n var elementRect = this.gauge.element.getBoundingClientRect();\n var bounds = this.gauge.svgObject.getBoundingClientRect();\n renderAnnotation = true;\n left = Math.abs(bounds.left - elementRect.left);\n top = Math.abs(bounds.top - elementRect.top);\n left = (annotation.horizontalAlignment === 'None') ? (left + annotation.x) : left;\n top = (annotation.verticalAlignment === 'None') ? top + annotation.y : top;\n switch (annotation.verticalAlignment) {\n case 'Near':\n top = top + annotation.y;\n break;\n case 'Center':\n top = top + annotation.y + ((bounds.height / 2) - (offset.height / 2));\n break;\n case 'Far':\n top = (top + bounds.height) + annotation.y - offset.height;\n break;\n }\n switch (annotation.horizontalAlignment) {\n case 'Near':\n left = left + annotation.x;\n break;\n case 'Center':\n left = left + annotation.x + ((bounds.width / 2) - (offset.width / 2));\n break;\n case 'Far':\n left = (left + bounds.width) + annotation.x - offset.width;\n break;\n }\n }\n childElement.style.left = left + 'px';\n childElement.style.top = top + 'px';\n if (renderAnnotation) {\n element.appendChild(childElement);\n }\n }\n };\n /*\n * Get module name.\n */\n Annotations.prototype.getModuleName = function () {\n return 'Annotations';\n };\n /**\n * To destroy the annotation.\n * @return {void}\n * @private\n */\n Annotations.prototype.destroy = function (gauge) {\n // Destroy method performed here\n };\n return Annotations;\n}());\nexport { Annotations };\n","import { createElement, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { tooltipRender } from '../model/constant';\nimport { Tooltip } from '@syncfusion/ej2-popups';\nimport { getElement, getLabelFormat, getTemplateFunction, GaugeLocation, Size } from '../utils/helper';\nimport { getPointer, convertPixelToValue } from '../utils/helper';\n/**\n * Represent the tooltip rendering for gauge\n */\nvar GaugeTooltip = /** @class */ (function () {\n function GaugeTooltip(gauge) {\n this.gauge = gauge;\n this.element = gauge.element;\n this.tooltip = gauge.tooltip;\n this.textStyle = this.tooltip.textStyle;\n this.borderStyle = this.tooltip.border;\n this.ejTooltip = new Tooltip({\n opensOn: 'custom',\n beforeRender: this.onBeforeRender.bind(this),\n beforeOpen: this.tooltipCustomization.bind(this),\n openDelay: 0, closeDelay: 1000\n });\n this.ejTooltip.appendTo(this.element);\n }\n /**\n * Internal use for tooltip rendering\n * @param pointerElement\n */\n GaugeTooltip.prototype.renderTooltip = function (pointerElement) {\n this.pointerElement = pointerElement;\n var clientRect = this.gauge.element.getBoundingClientRect();\n var current = getPointer(pointerElement, this.gauge);\n this.currentAxis = current.axis;\n this.axisIndex = current.axisIndex;\n this.currentPointer = current.pointer;\n var ele = this.appendTargetElement();\n if (pointerElement.getAttribute('data-tooltip-id') === null && ele.getAttribute('aria-describedby') === null) {\n this.ejTooltip.open(ele);\n }\n };\n GaugeTooltip.prototype.appendTargetElement = function () {\n var location = this.getTooltipLocation();\n var element = getElement(this.element.id + '_EJTooltip_');\n var elementSpace = 2;\n if (element) {\n element.style.left = (location.x - (elementSpace / 2)) + 'px';\n element.style.top = (location.y - (elementSpace / 2)) + 'px';\n }\n else {\n element = createElement('div', {\n id: this.element.id + '_EJTooltip_',\n styles: 'position:absolute; left:' + location.x + 'px;top:' + location.y + 'px;'\n });\n element.appendChild(createElement('div', {\n id: this.element.id + '_GaugeTooltip',\n styles: 'position:absolute;width:' + elementSpace + 'px;height:' + elementSpace + 'px;background:transparent'\n }));\n getElement(this.element.id + '_Secondary_Element').appendChild(element);\n }\n return element;\n };\n GaugeTooltip.prototype.getTooltipPosition = function () {\n var position;\n if (this.gauge.orientation === 'Vertical') {\n position = (!this.currentAxis.opposedPosition) ? 'LeftCenter' : 'RightCenter';\n }\n else {\n position = (this.currentAxis.opposedPosition) ? 'TopCenter' : 'BottomCenter';\n }\n return position;\n };\n GaugeTooltip.prototype.getTooltipLocation = function () {\n var location;\n var bounds;\n var radix = 10;\n var lineX;\n var lineY;\n var size = new Size(this.gauge.availableSize.width, this.gauge.availableSize.height);\n var x;\n var y;\n var height;\n var width;\n var lineId = this.gauge.element.id + '_AxisLine_' + this.axisIndex;\n var tickID = this.gauge.element.id + '_MajorTicksLine_' + this.axisIndex;\n var lineBounds;\n if (getElement(lineId)) {\n lineBounds = getElement(lineId).getBoundingClientRect();\n lineX = lineBounds.left;\n lineY = lineBounds.top;\n }\n else {\n lineBounds = getElement(tickID).getBoundingClientRect();\n lineX = (!this.currentAxis.opposedPosition) ? (lineBounds.left + lineBounds.width) : lineBounds.left;\n lineY = (!this.currentAxis.opposedPosition) ? (lineBounds.top + lineBounds.height) : lineBounds.top;\n }\n bounds = this.pointerElement.getBoundingClientRect();\n var elementRect = this.gauge.element.getBoundingClientRect();\n x = bounds.left - elementRect.left;\n y = bounds.top - elementRect.top;\n height = bounds.height;\n width = bounds.width;\n if (this.gauge.orientation === 'Vertical') {\n x = (lineX - elementRect.left);\n y = (this.currentPointer.type === 'Marker') ? y + (height / 2) : (!this.currentAxis.isInversed) ? y : y + height;\n }\n else {\n y = (lineY - elementRect.top);\n x = (this.currentPointer.type === 'Marker') ? (x + width / 2) : (!this.currentAxis.isInversed) ? x + width : x;\n }\n location = new GaugeLocation(x, y);\n return location;\n };\n GaugeTooltip.prototype.onBeforeRender = function (args) {\n var pointerValue = convertPixelToValue(this.element, this.pointerElement, this.gauge.orientation, this.currentAxis, 'tooltip', null);\n var tooltipFormat = this.gauge.tooltip.format || this.currentAxis.labelStyle.format;\n var customLabelFormat = tooltipFormat && tooltipFormat.match('{value}') !== null;\n var format = this.gauge.intl.getNumberFormat({\n format: getLabelFormat(tooltipFormat), useGrouping: this.gauge.useGroupingSeparator\n });\n var content = customLabelFormat ?\n tooltipFormat.replace(new RegExp('{value}', 'g'), format(pointerValue)) :\n format(pointerValue);\n content = this.tooltip.template ? getTemplateFunction(this.tooltip.template)({ 'value': content })[0] : content;\n var argsData = {\n cancel: false, name: tooltipRender,\n content: content,\n border: this.borderStyle,\n axis: this.currentAxis, pointer: this.currentPointer,\n textStyle: this.textStyle\n };\n this.gauge.trigger(tooltipRender, argsData);\n this.ejTooltip.content = argsData.content;\n this.textStyle = argsData.textStyle;\n this.borderStyle = argsData.border;\n this.ejTooltip.position = this.getTooltipPosition();\n this.ejTooltip.dataBind();\n };\n GaugeTooltip.prototype.tooltipCustomization = function (args) {\n var font = this.textStyle;\n var borderColor = this.borderStyle.color;\n var border = this.borderStyle.width;\n var pointerSize = 8;\n var arrowWidth = (pointerSize - border) + 'px';\n var outerWidth;\n var innerWidth;\n args.element.classList.remove('e-popup-close');\n args.element.classList.add('e-popup-open');\n var arrowEle = args.element.querySelector('.e-arrow-tip');\n setStyleAttribute(args.element, {\n 'backgroundColor': this.tooltip.fill, 'borderColor': borderColor || '#212121',\n 'borderWidth': border + 'px', 'pointer-events': 'none', 'borderRadius': '5px', 'padding-left': '5px',\n 'padding-right': '5px', 'padding-top': '3px', 'padding-bottom': '3px'\n });\n setStyleAttribute(args.element.querySelector('.e-tip-content'), {\n 'color': font.color, 'fontFamily': font.fontFamily, 'fontSize': font.size,\n 'fontWeight': font.fontWeight, 'opacity': font.opacity.toString(), 'fontStyle': font.fontStyle\n });\n setStyleAttribute(args.element.querySelector('.e-arrow-tip'), {\n 'width': 2 * (pointerSize + border) + 'px', 'height': pointerSize + border + 'px'\n });\n if (arrowEle.classList.contains('e-tip-top')) {\n pointerSize = args.element.querySelector('.e-arrow-tip').offsetHeight;\n outerWidth = pointerSize + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-outer'), {\n 'borderRightColor': 'transparent', 'borderLeftColor': 'transparent', 'borderBottomColor': this.tooltip.border.width > 0 ?\n this.tooltip.border.color : 'transparent', 'borderLeftWidth': outerWidth, 'borderRightWidth': outerWidth,\n 'borderBottomWidth': outerWidth,\n });\n innerWidth = (pointerSize - border) + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-inner'), {\n 'borderRightColor': 'transparent', 'borderLeftColor': 'transparent', 'borderBottomColor': 'transparent',\n 'borderLeftWidth': innerWidth, 'borderRightWidth': innerWidth, 'borderBottomWidth': innerWidth,\n 'left': border + 'px', 'top': border + 'px'\n });\n }\n else if (arrowEle.classList.contains('e-tip-bottom')) {\n pointerSize = args.element.querySelector('.e-arrow-tip').offsetHeight;\n outerWidth = pointerSize + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-outer'), {\n 'borderRightColor': 'transparent', 'borderLeftColor': 'transparent', 'borderTopColor': this.tooltip.border.width > 0 ?\n this.tooltip.border.color : 'transparent', 'borderLeftWidth': outerWidth, 'borderRightWidth': outerWidth,\n 'borderTopWidth': outerWidth,\n });\n innerWidth = (pointerSize - border) + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-inner'), {\n 'borderRightColor': 'transparent', 'borderLeftColor': 'transparent', 'borderTopColor': 'transparent',\n 'borderLeftWidth': innerWidth, 'borderRightWidth': innerWidth, 'borderTopWidth': innerWidth,\n 'left': border + 'px', 'top': '0'\n });\n }\n else if (arrowEle.classList.contains('e-tip-left')) {\n setStyleAttribute(args.element.querySelector('.e-arrow-tip'), {\n 'width': pointerSize + border + 'px', 'height': 2 * (pointerSize + border) + 'px'\n });\n pointerSize = args.element.querySelector('.e-arrow-tip').offsetWidth;\n outerWidth = pointerSize + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-outer'), {\n 'borderTopColor': 'transparent', 'borderBottomColor': 'transparent', 'borderRightColor': borderColor,\n 'borderTopWidth': outerWidth, 'borderBottomWidth': outerWidth, 'borderRightWidth': outerWidth\n });\n innerWidth = (pointerSize - border) + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-inner'), {\n 'borderTopColor': 'transparent', 'borderBottomColor': 'transparent', 'borderRightColor': this.tooltip.fill,\n 'borderTopWidth': innerWidth, 'borderBottomWidth': innerWidth, 'borderRightWidth': innerWidth,\n 'left': border + 'px', 'top': border + 'px'\n });\n }\n else {\n setStyleAttribute(args.element.querySelector('.e-arrow-tip'), {\n 'width': (pointerSize + border) + 'px', 'height': 2 * (pointerSize + border) + 'px'\n });\n pointerSize = args.element.querySelector('.e-arrow-tip').offsetWidth;\n outerWidth = pointerSize + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-outer'), {\n 'borderTopColor': 'transparent', 'borderBottomColor': 'transparent', 'borderLeftColor': borderColor,\n 'borderTopWidth': outerWidth, 'borderBottomWidth': outerWidth, 'borderLeftWidth': outerWidth\n });\n innerWidth = (pointerSize - border) + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-inner'), {\n 'borderTopColor': 'transparent', 'borderBottomColor': 'transparent', 'borderLeftColor': this.tooltip.fill,\n 'borderTopWidth': innerWidth, 'borderBottomWidth': innerWidth, 'borderLeftWidth': innerWidth,\n 'left': (border <= 1 ? 0 : -1) + 'px', 'top': border + 'px'\n });\n }\n this.ejTooltip.refresh(args.target);\n setStyleAttribute(args.element, {\n 'display': 'block', 'transitionProperty': 'left,top',\n 'transitionDuration': this.tooltip.enableAnimation ? '1000ms' : '0ms'\n });\n };\n /*\n * Get module name.\n */\n GaugeTooltip.prototype.getModuleName = function () {\n return 'Tooltip';\n };\n /**\n * To destroy the tooltip.\n * @return {void}\n * @private\n */\n GaugeTooltip.prototype.destroy = function (gauge) {\n // Destroy method performed here\n };\n return GaugeTooltip;\n}());\nexport { GaugeTooltip };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, NotifyPropertyChanges, Internationalization } from '@syncfusion/ej2-base';\nimport { SvgRenderer, Browser } from '@syncfusion/ej2-base';\nimport { Event, EventHandler, Complex, Collection, isNullOrUndefined, remove, createElement } from '@syncfusion/ej2-base';\nimport { Border, Font, Container, Margin, Annotation, TooltipSettings } from './model/base';\nimport { Axis } from './axes/axis';\nimport { load, loaded, gaugeMouseMove, gaugeMouseLeave, gaugeMouseDown, gaugeMouseUp, resized, valueChange } from './model/constant';\nimport { Size, valueToCoefficient, calculateShapes, stringToNumber, removeElement, getElement } from './utils/helper';\nimport { measureText, Rect, TextOption, textElement, GaugeLocation, RectOption, PathOption } from './utils/helper';\nimport { getBox, withInRange, getPointer, convertPixelToValue, isPointerDrag } from './utils/helper';\nimport { AxisLayoutPanel } from './axes/axis-panel';\nimport { AxisRenderer } from './axes/axis-renderer';\nimport { Annotations } from './annotations/annotations';\nimport { GaugeTooltip } from './user-interaction/tooltip';\n/**\n * Represents the EJ2 Linear gauge control.\n * ```html\n *
    \n * \n * ```\n */\nvar LinearGauge = /** @class */ (function (_super) {\n __extends(LinearGauge, _super);\n /**\n * @private\n * Constructor for creating the widget\n * @hidden\n */\n function LinearGauge(options, element) {\n var _this = _super.call(this, options, element) || this;\n /** @private */\n _this.pointerDrag = false;\n /** @private */\n _this.mouseX = 0;\n /** @private */\n _this.mouseY = 0;\n /** @private */\n _this.gaugeResized = false;\n return _this;\n }\n /**\n * Initialize the preRender method.\n */\n LinearGauge.prototype.preRender = function () {\n this.unWireEvents();\n this.trigger(load, { gauge: this });\n this.themeEffect();\n this.initPrivateVariable();\n this.setCulture();\n this.createSvg();\n this.wireEvents();\n };\n LinearGauge.prototype.themeEffect = function () {\n if (this.theme === 'Highcontrast') {\n this.titleStyle.color = this.titleStyle.color || '#FFFFFF';\n this.setThemeColors('#FFFFFF', '#FFFFFF');\n }\n else {\n this.titleStyle.color = this.titleStyle.color || '#424242';\n this.setThemeColors('#686868', '#a6a6a6');\n }\n };\n LinearGauge.prototype.setThemeColors = function (labelcolor, others) {\n for (var _i = 0, _a = this.axes; _i < _a.length; _i++) {\n var axis = _a[_i];\n axis.line.color = axis.line.color || others;\n axis.labelStyle.font.color = axis.labelStyle.font.color || labelcolor;\n axis.majorTicks.color = axis.majorTicks.color || others;\n axis.minorTicks.color = axis.minorTicks.color || others;\n for (var _b = 0, _c = axis.pointers; _b < _c.length; _b++) {\n var pointer = _c[_b];\n pointer.color = pointer.color || others;\n }\n }\n for (var _d = 0, _e = this.annotations; _d < _e.length; _d++) {\n var annotation = _e[_d];\n annotation.font.color = annotation.font.color || labelcolor;\n }\n };\n LinearGauge.prototype.initPrivateVariable = function () {\n this.renderer = new SvgRenderer(this.element.id);\n this.gaugeAxisLayoutPanel = new AxisLayoutPanel(this);\n this.axisRenderer = new AxisRenderer(this);\n };\n /**\n * Method to set culture for chart\n */\n LinearGauge.prototype.setCulture = function () {\n this.intl = new Internationalization();\n };\n /**\n * Methods to create svg element\n */\n LinearGauge.prototype.createSvg = function () {\n this.removeSvg();\n this.calculateSize();\n this.svgObject = this.renderer.createSvg({\n id: this.element.id + '_svg',\n width: this.availableSize.width,\n height: this.availableSize.height\n });\n };\n /**\n * To Remove the SVG.\n * @return {boolean}\n * @private\n */\n LinearGauge.prototype.removeSvg = function () {\n removeElement(this.element.id + '_Secondary_Element');\n if (!(isNullOrUndefined(this.svgObject)) && !isNullOrUndefined(this.svgObject.parentNode)) {\n remove(this.svgObject);\n }\n };\n /**\n * Method to calculate the size of the gauge\n */\n LinearGauge.prototype.calculateSize = function () {\n var width = stringToNumber(this.width, this.element.offsetWidth) || this.element.offsetWidth || 600;\n var height = stringToNumber(this.height, this.element.offsetHeight) || this.element.offsetHeight || 450;\n this.availableSize = new Size(width, height);\n };\n /**\n * To Initialize the control rendering\n */\n LinearGauge.prototype.render = function () {\n this.renderGaugeElements();\n this.calculateBounds();\n this.renderAxisElements();\n this.trigger(loaded, { gauge: this });\n };\n /**\n * @private\n * To render the gauge elements\n */\n LinearGauge.prototype.renderGaugeElements = function () {\n this.appendSecondaryElement();\n this.renderBorder();\n this.renderTitle();\n this.renderContainer();\n };\n LinearGauge.prototype.appendSecondaryElement = function () {\n if (isNullOrUndefined(getElement(this.element.id + '_Secondary_Element'))) {\n var secondaryElement = createElement('div');\n secondaryElement.id = this.element.id + '_Secondary_Element';\n secondaryElement.setAttribute('style', 'position: relative');\n this.element.appendChild(secondaryElement);\n }\n };\n /**\n * @private\n * To calculate axes bounds\n */\n LinearGauge.prototype.calculateBounds = function () {\n this.gaugeAxisLayoutPanel.calculateAxesBounds();\n };\n /**\n * @private\n * To render axis elements\n */\n LinearGauge.prototype.renderAxisElements = function () {\n this.axisRenderer.renderAxes();\n this.element.appendChild(this.svgObject);\n if (this.annotationsModule) {\n this.annotationsModule.renderAnnotationElements();\n }\n };\n LinearGauge.prototype.renderBorder = function () {\n var width = this.border.width;\n if (width > 0) {\n var rect = new RectOption(this.element.id + '_LinearGaugeBorder', this.background, this.border, 1, new Rect(width / 2, width / 2, this.availableSize.width - width, this.availableSize.height - width), null, null);\n this.svgObject.appendChild(this.renderer.drawRectangle(rect));\n }\n };\n LinearGauge.prototype.renderTitle = function () {\n var x;\n var y;\n var height;\n var width;\n var titleBounds;\n if (this.title) {\n var size = measureText(this.title, this.titleStyle);\n var options = new TextOption(this.element.id + '_LinearGaugeTitle', this.availableSize.width / 2, this.margin.top + (size.height / 2), 'middle', this.title);\n titleBounds = {\n x: options.x - (size.width / 2),\n y: options.y,\n width: size.width,\n height: size.height\n };\n var element = textElement(options, this.titleStyle, this.titleStyle.color, this.svgObject);\n element.setAttribute('aria-label', this.description || this.title);\n element.setAttribute('tabindex', this.tabIndex.toString());\n }\n x = this.margin.left;\n y = (isNullOrUndefined(titleBounds)) ? this.margin.top : titleBounds.y;\n height = (this.availableSize.height - y - this.margin.bottom);\n width = (this.availableSize.width - this.margin.left - this.margin.right);\n this.actualRect = { x: x, y: y, width: width, height: height };\n };\n /*\n * Method to unbind the gauge events\n */\n LinearGauge.prototype.unWireEvents = function () {\n EventHandler.remove(this.element, Browser.touchStartEvent, this.gaugeOnMouseDown);\n EventHandler.remove(this.element, Browser.touchMoveEvent, this.mouseMove);\n EventHandler.remove(this.element, Browser.touchEndEvent, this.mouseEnd);\n EventHandler.remove(this.element, 'contextmenu', this.gaugeRightClick);\n EventHandler.remove(this.element, (Browser.isPointer ? 'pointerleave' : 'mouseleave'), this.mouseLeave);\n EventHandler.remove(window, (Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.gaugeResize.bind(this));\n };\n /*\n * Method to bind the gauge events\n */\n LinearGauge.prototype.wireEvents = function () {\n /*! Bind the Event handler */\n EventHandler.add(this.element, Browser.touchStartEvent, this.gaugeOnMouseDown, this);\n EventHandler.add(this.element, Browser.touchMoveEvent, this.mouseMove, this);\n EventHandler.add(this.element, Browser.touchEndEvent, this.mouseEnd, this);\n EventHandler.add(this.element, 'contextmenu', this.gaugeRightClick, this);\n EventHandler.add(this.element, (Browser.isPointer ? 'pointerleave' : 'mouseleave'), this.mouseLeave, this);\n EventHandler.add(window, (Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.gaugeResize, this);\n this.setStyle(this.element);\n };\n LinearGauge.prototype.setStyle = function (element) {\n element.style.touchAction = isPointerDrag(this.axes) ? 'none' : 'element';\n element.style.msTouchAction = isPointerDrag(this.axes) ? 'none' : 'element';\n element.style.msContentZooming = 'none';\n element.style.msUserSelect = 'none';\n element.style.webkitUserSelect = 'none';\n element.style.position = 'relative';\n };\n /**\n * Handles the gauge resize.\n * @return {boolean}\n * @private\n */\n LinearGauge.prototype.gaugeResize = function (e) {\n var _this = this;\n var args = {\n gauge: this,\n previousSize: new Size(this.availableSize.width, this.availableSize.height),\n name: resized,\n currentSize: new Size(0, 0)\n };\n if (this.resizeTo) {\n clearTimeout(this.resizeTo);\n }\n if (this.element.classList.contains('e-lineargauge')) {\n this.resizeTo = setTimeout(function () {\n _this.gaugeResized = true;\n _this.createSvg();\n _this.refreshing = true;\n args.currentSize = new Size(_this.availableSize.width, _this.availableSize.height);\n _this.trigger(resized, args);\n _this.render();\n }, 500);\n }\n return false;\n };\n /**\n * To destroy the gauge element from the DOM.\n */\n LinearGauge.prototype.destroy = function () {\n this.unWireEvents();\n this.removeSvg();\n _super.prototype.destroy.call(this);\n };\n /**\n * @private\n * To render the gauge container\n */\n LinearGauge.prototype.renderContainer = function () {\n var width;\n var height;\n var x;\n var y;\n var options;\n var path = '';\n var topRadius;\n var bottomRadius;\n var fill = this.container.backgroundColor;\n var rect;\n var radius = this.container.width;\n bottomRadius = radius + ((radius / 2) / Math.PI);\n topRadius = radius / 2;\n if (this.orientation === 'Vertical') {\n height = this.actualRect.height;\n height = (this.container.height > 0 ? this.container.height : ((height / 2) - ((height / 2) / 4)) * 2);\n width = this.container.width;\n height = (this.container.type === 'Thermometer') ? height - (bottomRadius * 2) - topRadius : height;\n x = (this.actualRect.x + ((this.actualRect.width / 2) - (this.container.width / 2))) + this.container.offset;\n y = this.actualRect.y + ((this.actualRect.height / 2) - ((this.container.type === 'Thermometer') ?\n ((height + (bottomRadius * 2) - topRadius)) / 2 : height / 2));\n height = height;\n }\n else {\n width = (this.container.height > 0) ? this.container.height :\n ((this.actualRect.width / 2) - ((this.actualRect.width / 2) / 4)) * 2;\n width = (this.container.type === 'Thermometer') ? width - (bottomRadius * 2) - topRadius : width;\n x = this.actualRect.x + ((this.actualRect.width / 2) - ((this.container.type === 'Thermometer') ?\n (width - (bottomRadius * 2) + topRadius) / 2 : width / 2));\n y = (this.actualRect.y + ((this.actualRect.height / 2) - (this.container.width / 2))) + this.container.offset;\n height = this.container.width;\n }\n this.containerBounds = { x: x, y: y, width: width, height: height };\n if (this.containerBounds.width > 0) {\n this.containerObject = this.renderer.createGroup({ id: this.element.id + '_Container_Group', transform: 'translate( 0, 0)' });\n if (this.container.type === 'Normal') {\n rect = new RectOption(this.element.id + '_' + this.container.type + '_Layout', fill, this.container.border, 1, new Rect(x, y, width, height));\n this.containerObject.appendChild(this.renderer.drawRectangle(rect));\n }\n else {\n path = getBox(this.containerBounds, this.container.type, this.orientation, new Size(this.container.height, this.container.width), 'container', null, null, this.container.roundedCornerRadius);\n options = new PathOption(this.element.id + '_' + this.container.type + '_Layout', fill, this.container.border.width, this.container.border.color, 1, '', path);\n this.containerObject.appendChild(this.renderer.drawPath(options));\n }\n this.svgObject.appendChild(this.containerObject);\n }\n };\n /**\n * Handles the mouse down on gauge.\n * @return {boolean}\n * @private\n */\n LinearGauge.prototype.gaugeOnMouseDown = function (e) {\n var pageX;\n var pageY;\n var target;\n var element = e.target;\n var split = [];\n var clientRect = this.element.getBoundingClientRect();\n var axis;\n var isPointer = false;\n var pointer;\n var current;\n var top;\n var left;\n var pointerElement;\n var svgPath;\n var dragProcess = false;\n var args = this.getMouseArgs(e, 'touchstart', gaugeMouseDown);\n this.trigger(gaugeMouseDown, args);\n this.mouseX = args.x;\n this.mouseY = args.y;\n if (args.target) {\n if (!args.cancel && ((args.target.id.indexOf('MarkerPointer') > -1) || (args.target.id.indexOf('BarPointer') > -1))) {\n current = this.moveOnPointer(args.target);\n if (!(isNullOrUndefined(current)) && current.pointer) {\n this.pointerDrag = true;\n this.mouseElement = args.target;\n }\n }\n }\n return true;\n };\n /**\n * Handles the mouse move.\n * @return {boolean}\n * @private\n */\n LinearGauge.prototype.mouseMove = function (e) {\n var current;\n var element;\n var args = this.getMouseArgs(e, 'touchmove', gaugeMouseMove);\n this.trigger(gaugeMouseMove, args);\n this.mouseX = args.x;\n this.mouseY = args.y;\n if (args.target && !args.cancel) {\n if ((args.target.id.indexOf('MarkerPointer') > -1) || (args.target.id.indexOf('BarPointer') > -1)) {\n if (this.tooltipModule && this.tooltip.enable) {\n this.tooltipModule.renderTooltip(args.target);\n }\n current = this.moveOnPointer(args.target);\n if (!(isNullOrUndefined(current)) && current.pointer) {\n this.element.style.cursor = current.style;\n }\n }\n else {\n if (this.tooltipModule && this.tooltip.enable) {\n this.tooltipModule.ejTooltip.close();\n }\n this.element.style.cursor = (this.pointerDrag) ? this.element.style.cursor : 'auto';\n }\n this.gaugeOnMouseMove(e);\n }\n return false;\n };\n /**\n * To find the mouse move on pointer.\n * @param element\n */\n LinearGauge.prototype.moveOnPointer = function (element) {\n var current;\n var clientRect = this.element.getBoundingClientRect();\n var axis;\n var isPointer = false;\n var pointer;\n var top;\n var left;\n var pointerElement = getElement(element.id);\n var svgPath = pointerElement;\n var cursorStyle;\n var process;\n current = getPointer(element, this);\n axis = current.axis;\n pointer = current.pointer;\n if (pointer.enableDrag) {\n if (pointer.type === 'Bar') {\n if (this.orientation === 'Vertical') {\n top = pointerElement.getBoundingClientRect().top - clientRect.top;\n top = (!axis.isInversed) ? top : top + svgPath.getBBox().height;\n isPointer = !axis.isInversed ? (this.mouseY < (top + 10) && this.mouseY >= top) :\n (this.mouseY <= top && this.mouseY > (top - 10));\n cursorStyle = 'n-resize';\n }\n else {\n left = pointerElement.getBoundingClientRect().left - clientRect.left;\n left = (!axis.isInversed) ? left + svgPath.getBBox().width : left;\n isPointer = !axis.isInversed ? (this.mouseX > (left - 10) && this.mouseX <= left) :\n (this.mouseX >= left && this.mouseX < (left + 10));\n cursorStyle = 'e-resize';\n }\n }\n else {\n isPointer = true;\n cursorStyle = 'pointer';\n }\n }\n if (isPointer) {\n process = { pointer: isPointer, style: cursorStyle };\n }\n return process;\n };\n /**\n * @private\n * Handle the right click\n * @param event\n */\n LinearGauge.prototype.gaugeRightClick = function (event) {\n if (event.buttons === 2 || event.pointerType === 'touch') {\n event.preventDefault();\n event.stopPropagation();\n return false;\n }\n return true;\n };\n /**\n * Handles the mouse leave.\n * @return {boolean}\n * @private\n */\n LinearGauge.prototype.mouseLeave = function (e) {\n var parentNode;\n var args = this.getMouseArgs(e, 'touchmove', gaugeMouseLeave);\n if (!isNullOrUndefined(this.mouseElement)) {\n parentNode = this.element;\n parentNode.style.cursor = '';\n this.mouseElement = null;\n this.pointerDrag = false;\n }\n if (this.tooltip.enable && this.tooltipModule) {\n this.tooltipModule.ejTooltip.close();\n }\n return false;\n };\n /**\n * Handles the mouse move on gauge.\n * @return {boolean}\n * @private\n */\n LinearGauge.prototype.gaugeOnMouseMove = function (e) {\n var current;\n if (this.pointerDrag) {\n current = getPointer(this.mouseElement, this);\n if (current.pointer.enableDrag && current.pointer.animationComplete) {\n this[current.pointer.type.toLowerCase() + 'Drag'](current.axis, current.pointer);\n }\n }\n return true;\n };\n /**\n * Handles the mouse up.\n * @return {boolean}\n * @private\n */\n LinearGauge.prototype.mouseEnd = function (e) {\n var _this = this;\n var parentNode;\n var tooltipInterval;\n var isTouch = e.pointerType === 'touch' || e.pointerType === '2' || e.type === 'touchend';\n var args = this.getMouseArgs(e, 'touchend', gaugeMouseUp);\n this.trigger(gaugeMouseUp, args);\n if (!isNullOrUndefined(this.mouseElement)) {\n parentNode = this.element;\n parentNode.style.cursor = '';\n this.mouseElement = null;\n this.pointerDrag = false;\n }\n if (!args.cancel && isTouch && this.tooltip.enable && this.tooltipModule) {\n if (args.target.id.indexOf('Pointer') >= 0) {\n this.tooltipModule.renderTooltip(args.target);\n tooltipInterval = setTimeout(function () {\n _this.tooltipModule.ejTooltip.close();\n }, 2000);\n }\n }\n return true;\n };\n /**\n * Handles the mouse event arguments.\n * @return {IMouseEventArgs}\n * @private\n */\n LinearGauge.prototype.getMouseArgs = function (e, type, name) {\n var rect = this.element.getBoundingClientRect();\n var location = new GaugeLocation(-rect.left, -rect.top);\n var isTouch = (e.type === type);\n location.x += isTouch ? e.changedTouches[0].clientX : e.clientX;\n location.y += isTouch ? e.changedTouches[0].clientY : e.clientY;\n return {\n cancel: false, name: name,\n model: this,\n x: location.x, y: location.y,\n target: isTouch ? e.target : e.target\n };\n };\n /**\n * @private\n * @param axis\n * @param pointer\n */\n LinearGauge.prototype.markerDrag = function (axis, pointer) {\n var options;\n var value = convertPixelToValue(this.element, this.mouseElement, this.orientation, axis, 'drag', new GaugeLocation(this.mouseX, this.mouseY));\n var process = withInRange(value, null, null, axis.visibleRange.max, axis.visibleRange.min, 'pointer');\n if (withInRange(value, null, null, axis.visibleRange.max, axis.visibleRange.min, 'pointer')) {\n this.triggerDragEvent(this.mouseElement);\n options = new PathOption('pointerID', pointer.color, pointer.border.width, pointer.border.color, pointer.opacity, null, null, '');\n if (this.orientation === 'Vertical') {\n pointer.bounds.y = this.mouseY;\n }\n else {\n pointer.bounds.x = this.mouseX;\n }\n pointer.currentValue = value;\n options = calculateShapes(pointer.bounds, pointer.markerType, new Size(pointer.width, pointer.height), pointer.imageUrl, options, this.orientation, axis, pointer);\n if (pointer.markerType === 'Image') {\n this.mouseElement.setAttribute('x', (pointer.bounds.x - (pointer.bounds.width / 2)).toString());\n this.mouseElement.setAttribute('y', (pointer.bounds.y - (pointer.bounds.height / 2)).toString());\n }\n else {\n this.mouseElement.setAttribute('d', options.d);\n }\n }\n };\n /**\n * @private\n * @param axis\n * @param pointer\n */\n LinearGauge.prototype.barDrag = function (axis, pointer) {\n var line = axis.lineBounds;\n var range = axis.visibleRange;\n var value1;\n var value2;\n var isDrag;\n var lineHeight = (this.orientation === 'Vertical') ? line.height : line.width;\n var lineY = (this.orientation === 'Vertical') ? line.y : line.x;\n var path;\n value1 = ((valueToCoefficient(range.min, axis, this.orientation, range) * lineHeight) + lineY);\n value2 = ((valueToCoefficient(range.max, axis, this.orientation, range) * lineHeight) + lineY);\n if (this.orientation === 'Vertical') {\n isDrag = (!axis.isInversed) ? (this.mouseY > value2 && this.mouseY < value1) : (this.mouseY > value1 && this.mouseY < value2);\n if (isDrag) {\n if (this.container.type === 'Normal') {\n if (!axis.isInversed) {\n this.mouseElement.setAttribute('y', this.mouseY.toString());\n }\n this.mouseElement.setAttribute('height', Math.abs(value1 - this.mouseY).toString());\n }\n else {\n if (!axis.isInversed) {\n pointer.bounds.y = this.mouseY;\n }\n pointer.bounds.height = Math.abs(value1 - this.mouseY);\n }\n }\n }\n else {\n isDrag = (!axis.isInversed) ? (this.mouseX > value1 && this.mouseX < value2) : (this.mouseX > value2 && this.mouseX < value1);\n if (isDrag) {\n if (this.container.type === 'Normal') {\n if (axis.isInversed) {\n this.mouseElement.setAttribute('x', this.mouseX.toString());\n }\n this.mouseElement.setAttribute('width', Math.abs(value1 - this.mouseX).toString());\n }\n else {\n if (axis.isInversed) {\n pointer.bounds.x = this.mouseX;\n }\n pointer.bounds.width = Math.abs(value1 - this.mouseX);\n }\n }\n }\n if (isDrag && this.mouseElement.tagName === 'path') {\n this.triggerDragEvent(this.mouseElement);\n path = getBox(pointer.bounds, this.container.type, this.orientation, new Size(pointer.bounds.width, pointer.bounds.height), 'bar', this.container.width, axis, pointer.roundedCornerRadius);\n this.mouseElement.setAttribute('d', path);\n }\n };\n /**\n * Triggers when drag the pointer\n * @param activeElement\n */\n LinearGauge.prototype.triggerDragEvent = function (activeElement) {\n var active = getPointer(this.mouseElement, this);\n var value = convertPixelToValue(this.element, this.mouseElement, this.orientation, active.axis, 'tooltip', null);\n var dragArgs = {\n name: 'valueChange',\n gauge: this,\n element: this.mouseElement,\n axisIndex: active.axisIndex,\n axis: active.axis,\n pointerIndex: active.pointerIndex,\n pointer: active.pointer,\n value: value\n };\n this.trigger(valueChange, dragArgs);\n };\n /**\n * To set the pointer value using this method\n * @param axisIndex\n * @param pointerIndex\n * @param value\n */\n LinearGauge.prototype.setPointerValue = function (axisIndex, pointerIndex, value) {\n var axis = this.axes[axisIndex];\n var pointer = axis.pointers[pointerIndex];\n var id = this.element.id + '_AxisIndex_' + axisIndex + '_' + pointer.type + 'Pointer_' + pointerIndex;\n var pointerElement = getElement(id);\n pointer.currentValue = value;\n if ((pointerElement !== null) && withInRange(pointer.currentValue, null, null, axis.visibleRange.max, axis.visibleRange.min, 'pointer')) {\n this.gaugeAxisLayoutPanel['calculate' + pointer.type + 'Bounds'](axisIndex, axis, pointerIndex, pointer);\n this.axisRenderer['draw' + pointer.type + 'Pointer'](axis, axisIndex, pointer, pointerIndex, pointerElement.parentElement);\n }\n };\n /**\n * To set the annotation value using this method.\n * @param annotationIndex\n * @param content\n */\n LinearGauge.prototype.setAnnotationValue = function (annotationIndex, content) {\n var elementExist = getElement(this.element.id + '_Annotation_' + annotationIndex) === null;\n var element = getElement(this.element.id + '_AnnotationsGroup') ||\n createElement('div', {\n id: this.element.id + '_AnnotationsGroup'\n });\n var annotation = this.annotations[annotationIndex];\n if (content !== null) {\n if (getElement(this.element.id + '_Annotation_' + annotationIndex)) {\n getElement(this.element.id + '_Annotation_' + annotationIndex).remove();\n }\n annotation.content = content;\n this.annotationsModule.createAnnotationTemplate(element, annotationIndex);\n if (!elementExist) {\n element.appendChild(getElement(this.element.id + '_Annotation_' + annotationIndex));\n }\n }\n };\n /**\n * To provide the array of modules needed for control rendering\n * @return {ModuleDeclaration[]}\n * @private\n */\n LinearGauge.prototype.requiredModules = function () {\n var modules = [];\n var annotationEnable = false;\n var tooltipEnable = false;\n this.annotations.map(function (annotation, index) {\n annotationEnable = annotation.content != null;\n });\n if (annotationEnable) {\n modules.push({\n member: 'Annotations',\n args: [this, Annotations]\n });\n }\n if (this.tooltip.enable) {\n modules.push({\n member: 'Tooltip',\n args: [this, GaugeTooltip]\n });\n }\n return modules;\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @private\n */\n LinearGauge.prototype.getPersistData = function () {\n var keyEntity = ['loaded'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Get component name\n */\n LinearGauge.prototype.getModuleName = function () {\n return 'lineargauge';\n };\n /**\n * Called internally if any of the property value changed.\n * @private\n */\n LinearGauge.prototype.onPropertyChanged = function (newProp, oldProp) {\n var renderer = false;\n var refreshBounds = false;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'height':\n case 'width':\n case 'margin':\n this.createSvg();\n refreshBounds = true;\n break;\n case 'title':\n refreshBounds = (newProp.title === '' || oldProp.title === '');\n renderer = !(newProp.title === '' || oldProp.title === '');\n break;\n case 'titleStyle':\n if (newProp.titleStyle && newProp.titleStyle.size) {\n refreshBounds = true;\n }\n else {\n renderer = true;\n }\n break;\n case 'border':\n renderer = true;\n break;\n case 'background':\n renderer = true;\n break;\n case 'container':\n refreshBounds = true;\n break;\n }\n }\n if (!refreshBounds && renderer) {\n this.removeSvg();\n this.renderGaugeElements();\n this.renderAxisElements();\n }\n if (refreshBounds) {\n this.createSvg();\n this.renderGaugeElements();\n this.calculateBounds();\n this.renderAxisElements();\n }\n };\n __decorate([\n Property(null)\n ], LinearGauge.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], LinearGauge.prototype, \"height\", void 0);\n __decorate([\n Property('Vertical')\n ], LinearGauge.prototype, \"orientation\", void 0);\n __decorate([\n Complex({}, Margin)\n ], LinearGauge.prototype, \"margin\", void 0);\n __decorate([\n Complex({ color: '', width: 0 }, Border)\n ], LinearGauge.prototype, \"border\", void 0);\n __decorate([\n Property('transparent')\n ], LinearGauge.prototype, \"background\", void 0);\n __decorate([\n Property('')\n ], LinearGauge.prototype, \"title\", void 0);\n __decorate([\n Complex({ size: '15px', color: null }, Font)\n ], LinearGauge.prototype, \"titleStyle\", void 0);\n __decorate([\n Complex({}, Container)\n ], LinearGauge.prototype, \"container\", void 0);\n __decorate([\n Collection([{}], Axis)\n ], LinearGauge.prototype, \"axes\", void 0);\n __decorate([\n Complex({}, TooltipSettings)\n ], LinearGauge.prototype, \"tooltip\", void 0);\n __decorate([\n Collection([{}], Annotation)\n ], LinearGauge.prototype, \"annotations\", void 0);\n __decorate([\n Property([])\n ], LinearGauge.prototype, \"rangePalettes\", void 0);\n __decorate([\n Property(false)\n ], LinearGauge.prototype, \"useGroupingSeparator\", void 0);\n __decorate([\n Property(null)\n ], LinearGauge.prototype, \"description\", void 0);\n __decorate([\n Property(1)\n ], LinearGauge.prototype, \"tabIndex\", void 0);\n __decorate([\n Property('Material')\n ], LinearGauge.prototype, \"theme\", void 0);\n __decorate([\n Event()\n ], LinearGauge.prototype, \"loaded\", void 0);\n __decorate([\n Event()\n ], LinearGauge.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], LinearGauge.prototype, \"animationComplete\", void 0);\n __decorate([\n Event()\n ], LinearGauge.prototype, \"axisLabelRender\", void 0);\n __decorate([\n Event()\n ], LinearGauge.prototype, \"annotationRender\", void 0);\n __decorate([\n Event()\n ], LinearGauge.prototype, \"tooltipRender\", void 0);\n __decorate([\n Event()\n ], LinearGauge.prototype, \"gaugeMouseMove\", void 0);\n __decorate([\n Event()\n ], LinearGauge.prototype, \"gaugeMouseLeave\", void 0);\n __decorate([\n Event()\n ], LinearGauge.prototype, \"gaugeMouseDown\", void 0);\n __decorate([\n Event()\n ], LinearGauge.prototype, \"gaugeMouseUp\", void 0);\n __decorate([\n Event()\n ], LinearGauge.prototype, \"valueChange\", void 0);\n __decorate([\n Event()\n ], LinearGauge.prototype, \"resized\", void 0);\n LinearGauge = __decorate([\n NotifyPropertyChanges\n ], LinearGauge);\n return LinearGauge;\n}(Component));\nexport { LinearGauge };\n","import * as index from '@syncfusion/ej2-lineargauge';\nindex.LinearGauge.Inject( index.GaugeTooltip,index.Annotations);\nexport * from '@syncfusion/ej2-lineargauge';\n","import * as index from '@syncfusion/ej2-lists';\nindex.ListView.Inject( index.Virtualization);\nexport * from '@syncfusion/ej2-lists';\n","/**\n * Specifies Maps Themes\n */\nexport var Theme;\n(function (Theme) {\n /** @private */\n Theme.mapsTitleFont = {\n size: '14px',\n fontWeight: 'Medium',\n color: '#424242',\n fontStyle: 'Medium',\n fontFamily: 'Roboto, Noto, Sans-serif'\n };\n /** @private */\n Theme.mapsSubTitleFont = {\n size: '13px',\n fontWeight: 'Medium',\n color: '#424242',\n fontStyle: 'Medium',\n fontFamily: 'Roboto, Noto, Sans-serif'\n };\n /** @private */\n Theme.tooltipLabelFont = {\n size: '12px',\n fontWeight: 'Regular',\n color: '#FFFFFF',\n fontStyle: 'Regular',\n fontFamily: 'Roboto'\n };\n /** @private */\n Theme.legendTitleFont = {\n size: '14px',\n fontWeight: 'Regular',\n color: '#757575',\n fontStyle: 'Regular',\n fontFamily: 'Roboto, Noto, Sans-serif'\n };\n /** @private */\n Theme.legendLabelFont = {\n size: '13px',\n fontWeight: 'Medium',\n color: '#757575',\n fontStyle: 'Medium',\n fontFamily: 'Roboto, Noto, Sans-serif'\n };\n /** @private */\n Theme.dataLabelFont = {\n size: '12px',\n fontWeight: 'Medium',\n color: '#000000',\n fontStyle: 'Medium',\n fontFamily: 'Roboto, Noto, Sans-serif'\n };\n})(Theme || (Theme = {}));\nexport var FabricTheme;\n(function (FabricTheme) {\n /** @private */\n FabricTheme.mapsTitleFont = {\n size: '14px',\n fontWeight: 'Semibold',\n color: '#424242',\n fontStyle: 'Semibold',\n fontFamily: 'SegoeUI, Helvetica Neue, Helvetica, Arial, sans-serif'\n };\n /** @private */\n FabricTheme.mapsSubTitleFont = {\n size: '13px',\n fontWeight: 'Regular',\n color: '#424242',\n fontStyle: 'Regular',\n fontFamily: 'SegoeUI, Helvetica Neue, Helvetica, Arial, sans-serif'\n };\n /** @private */\n FabricTheme.tooltipLabelFont = {\n size: '12px',\n fontWeight: 'Regular',\n color: '#FFFFFF',\n fontStyle: 'Regular',\n fontFamily: 'Roboto'\n };\n /** @private */\n FabricTheme.legendTitleFont = {\n size: '14px',\n fontWeight: 'Regular',\n color: '#757575',\n fontStyle: 'Regular',\n fontFamily: 'SegoeUI, Helvetica Neue, Helvetica, Arial, sans-serif'\n };\n /** @private */\n FabricTheme.legendLabelFont = {\n size: '13px',\n fontWeight: 'Medium',\n color: '#757575',\n fontStyle: 'Medium',\n fontFamily: 'SegoeUI, Helvetica Neue, Helvetica, Arial, sans-serif'\n };\n /** @private */\n FabricTheme.dataLabelFont = {\n size: '12px',\n fontWeight: 'Medium',\n color: '#000000',\n fontStyle: 'Medium',\n fontFamily: 'SegoeUI, Helvetica Neue, Helvetica, Arial, sans-serif'\n };\n})(FabricTheme || (FabricTheme = {}));\nexport var BootstrapTheme;\n(function (BootstrapTheme) {\n /** @private */\n BootstrapTheme.mapsTitleFont = {\n size: '14px',\n fontWeight: 'Semibold',\n color: '#424242',\n fontStyle: 'Semibold',\n fontFamily: 'Helvetica Neue, Helvetica, Arial, sans-serif'\n };\n /** @private */\n BootstrapTheme.mapsSubTitleFont = {\n size: '13px',\n fontWeight: 'Regular',\n color: '#424242',\n fontStyle: 'Regular',\n fontFamily: 'Helvetica Neue, Helvetica, Arial, sans-serif'\n };\n /** @private */\n BootstrapTheme.tooltipLabelFont = {\n size: '12px',\n fontWeight: 'Regular',\n color: '#FFFFFF',\n fontStyle: 'Regular',\n fontFamily: 'Roboto'\n };\n /** @private */\n BootstrapTheme.legendTitleFont = {\n size: '14px',\n fontWeight: 'Regular',\n color: '#757575',\n fontStyle: 'Regular',\n fontFamily: 'Helvetica Neue, Helvetica, Arial, sans-serif'\n };\n /** @private */\n BootstrapTheme.legendLabelFont = {\n size: '13px',\n fontWeight: 'Medium',\n color: '#757575',\n fontStyle: 'Medium',\n fontFamily: 'Helvetica Neue, Helvetica, Arial, sans-serif'\n };\n /** @private */\n BootstrapTheme.dataLabelFont = {\n size: '12px',\n fontWeight: 'Medium',\n color: '#000000',\n fontStyle: 'Medium',\n fontFamily: 'Helvetica Neue, Helvetica, Arial, sans-serif'\n };\n})(BootstrapTheme || (BootstrapTheme = {}));\n/**\n * Internal use of Method to getting colors based on themes.\n * @private\n * @param theme\n */\nexport function getShapeColor(theme) {\n return ['#B5E485', '#7BC1E8', '#DF819C', '#EC9B79', '#78D0D3',\n '#D6D572', '#9178E3', '#A1E5B4', '#87A4B4', '#E4C16C'];\n}\n/**\n * HighContrast Theme configuration\n */\nexport var HighContrastTheme;\n(function (HighContrastTheme) {\n /** @private */\n HighContrastTheme.mapsTitleFont = {\n size: '14px',\n fontWeight: 'Medium',\n color: '#FFFFFF',\n fontStyle: 'Medium',\n fontFamily: 'Roboto, Noto, Sans-serif'\n };\n /** @private */\n HighContrastTheme.mapsSubTitleFont = {\n size: '13px',\n fontWeight: 'Medium',\n color: '#FFFFFF',\n fontStyle: 'Medium',\n fontFamily: 'Roboto, Noto, Sans-serif'\n };\n /** @private */\n HighContrastTheme.tooltipLabelFont = {\n size: '12px',\n fontWeight: 'Regular',\n color: '#FFFFFF',\n fontStyle: 'Regular',\n fontFamily: 'Roboto'\n };\n /** @private */\n HighContrastTheme.legendTitleFont = {\n size: '14px',\n fontWeight: 'Regular',\n color: '#FFFFFF',\n fontStyle: 'Regular',\n fontFamily: 'Roboto, Noto, Sans-serif'\n };\n /** @private */\n HighContrastTheme.legendLabelFont = {\n size: '13px',\n fontWeight: 'Medium',\n color: '#FFFFFF',\n fontStyle: 'Medium',\n fontFamily: 'Roboto, Noto, Sans-serif'\n };\n /** @private */\n HighContrastTheme.dataLabelFont = {\n size: '12px',\n fontWeight: 'Medium',\n color: '#000000',\n fontStyle: 'Medium',\n fontFamily: 'Roboto, Noto, Sans-serif'\n };\n})(HighContrastTheme || (HighContrastTheme = {}));\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/**\n * Maps base document\n */\nimport { Property, ChildProperty, Complex, Collection } from '@syncfusion/ej2-base';\nimport { Theme } from './theme';\nimport { Point } from '../utils/helper';\n/**\n * Options for customizing the annotation.\n */\nvar Annotation = /** @class */ (function (_super) {\n __extends(Annotation, _super);\n function Annotation() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Annotation.prototype, \"content\", void 0);\n __decorate([\n Property('0px')\n ], Annotation.prototype, \"x\", void 0);\n __decorate([\n Property('0px')\n ], Annotation.prototype, \"y\", void 0);\n __decorate([\n Property('None')\n ], Annotation.prototype, \"verticalAlignment\", void 0);\n __decorate([\n Property('None')\n ], Annotation.prototype, \"horizontalAlignment\", void 0);\n __decorate([\n Property('-1')\n ], Annotation.prototype, \"zIndex\", void 0);\n return Annotation;\n}(ChildProperty));\nexport { Annotation };\nvar Arrow = /** @class */ (function (_super) {\n __extends(Arrow, _super);\n function Arrow() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Start')\n ], Arrow.prototype, \"position\", void 0);\n __decorate([\n Property('false')\n ], Arrow.prototype, \"showArrow\", void 0);\n __decorate([\n Property(2)\n ], Arrow.prototype, \"size\", void 0);\n __decorate([\n Property('black')\n ], Arrow.prototype, \"color\", void 0);\n __decorate([\n Property(0)\n ], Arrow.prototype, \"offSet\", void 0);\n return Arrow;\n}(ChildProperty));\nexport { Arrow };\n/**\n * Configures the fonts in maps.\n */\nvar Font = /** @class */ (function (_super) {\n __extends(Font, _super);\n function Font() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Font.prototype, \"size\", void 0);\n __decorate([\n Property(null)\n ], Font.prototype, \"color\", void 0);\n __decorate([\n Property(null)\n ], Font.prototype, \"fontFamily\", void 0);\n __decorate([\n Property(null)\n ], Font.prototype, \"fontWeight\", void 0);\n __decorate([\n Property(null)\n ], Font.prototype, \"fontStyle\", void 0);\n __decorate([\n Property(1)\n ], Font.prototype, \"opacity\", void 0);\n return Font;\n}(ChildProperty));\nexport { Font };\n/**\n * Configures the borders in the maps.\n */\nvar Border = /** @class */ (function (_super) {\n __extends(Border, _super);\n function Border() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Border.prototype, \"color\", void 0);\n __decorate([\n Property(0)\n ], Border.prototype, \"width\", void 0);\n return Border;\n}(ChildProperty));\nexport { Border };\n/**\n * To configure the tooltip settings of the maps.\n */\nvar TooltipSettings = /** @class */ (function (_super) {\n __extends(TooltipSettings, _super);\n function TooltipSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], TooltipSettings.prototype, \"visible\", void 0);\n __decorate([\n Property('')\n ], TooltipSettings.prototype, \"template\", void 0);\n __decorate([\n Property('#363F4C')\n ], TooltipSettings.prototype, \"fill\", void 0);\n __decorate([\n Complex({ color: 'transparent', width: 1 }, Border)\n ], TooltipSettings.prototype, \"border\", void 0);\n __decorate([\n Complex(Theme.tooltipLabelFont, Font)\n ], TooltipSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Property(null)\n ], TooltipSettings.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], TooltipSettings.prototype, \"valuePath\", void 0);\n return TooltipSettings;\n}(ChildProperty));\nexport { TooltipSettings };\n/**\n * Configures the maps margins.\n */\nvar Margin = /** @class */ (function (_super) {\n __extends(Margin, _super);\n function Margin() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(10)\n ], Margin.prototype, \"left\", void 0);\n __decorate([\n Property(10)\n ], Margin.prototype, \"right\", void 0);\n __decorate([\n Property(10)\n ], Margin.prototype, \"top\", void 0);\n __decorate([\n Property(10)\n ], Margin.prototype, \"bottom\", void 0);\n return Margin;\n}(ChildProperty));\nexport { Margin };\n/**\n * To configure ColorMapping in Maps\n */\nvar ColorMappingSettings = /** @class */ (function (_super) {\n __extends(ColorMappingSettings, _super);\n function ColorMappingSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], ColorMappingSettings.prototype, \"from\", void 0);\n __decorate([\n Property(null)\n ], ColorMappingSettings.prototype, \"to\", void 0);\n __decorate([\n Property(null)\n ], ColorMappingSettings.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], ColorMappingSettings.prototype, \"color\", void 0);\n __decorate([\n Property(null)\n ], ColorMappingSettings.prototype, \"label\", void 0);\n return ColorMappingSettings;\n}(ChildProperty));\nexport { ColorMappingSettings };\n/**\n * To configure the selection settings\n */\nvar SelectionSettings = /** @class */ (function (_super) {\n __extends(SelectionSettings, _super);\n function SelectionSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], SelectionSettings.prototype, \"enable\", void 0);\n __decorate([\n Property('#D2691E')\n ], SelectionSettings.prototype, \"fill\", void 0);\n __decorate([\n Property(1)\n ], SelectionSettings.prototype, \"opacity\", void 0);\n __decorate([\n Property(false)\n ], SelectionSettings.prototype, \"enableMultiSelect\", void 0);\n __decorate([\n Complex({ color: 'transparent', width: 0 }, Border)\n ], SelectionSettings.prototype, \"border\", void 0);\n return SelectionSettings;\n}(ChildProperty));\nexport { SelectionSettings };\n/**\n * To configure the highlight settings\n */\nvar HighlightSettings = /** @class */ (function (_super) {\n __extends(HighlightSettings, _super);\n function HighlightSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('#6B8E23')\n ], HighlightSettings.prototype, \"fill\", void 0);\n __decorate([\n Property(false)\n ], HighlightSettings.prototype, \"enable\", void 0);\n __decorate([\n Property(1)\n ], HighlightSettings.prototype, \"opacity\", void 0);\n __decorate([\n Complex({ color: 'transparent', width: 0 }, Border)\n ], HighlightSettings.prototype, \"border\", void 0);\n return HighlightSettings;\n}(ChildProperty));\nexport { HighlightSettings };\n/**\n * NavigationSelectedLine\n */\nvar NavigationLineSettings = /** @class */ (function (_super) {\n __extends(NavigationLineSettings, _super);\n function NavigationLineSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], NavigationLineSettings.prototype, \"visible\", void 0);\n __decorate([\n Property(1)\n ], NavigationLineSettings.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], NavigationLineSettings.prototype, \"longitude\", void 0);\n __decorate([\n Property(null)\n ], NavigationLineSettings.prototype, \"latitude\", void 0);\n __decorate([\n Property('')\n ], NavigationLineSettings.prototype, \"dashArray\", void 0);\n __decorate([\n Property('black')\n ], NavigationLineSettings.prototype, \"color\", void 0);\n __decorate([\n Property(0)\n ], NavigationLineSettings.prototype, \"angle\", void 0);\n __decorate([\n Complex({ showArrow: false, position: 'Start', size: 5, color: 'black' }, Arrow)\n ], NavigationLineSettings.prototype, \"arrowSettings\", void 0);\n __decorate([\n Complex({}, SelectionSettings)\n ], NavigationLineSettings.prototype, \"selectionSettings\", void 0);\n __decorate([\n Complex({}, HighlightSettings)\n ], NavigationLineSettings.prototype, \"highlightSettings\", void 0);\n return NavigationLineSettings;\n}(ChildProperty));\nexport { NavigationLineSettings };\n/**\n * Bubble settings model class\n */\nvar BubbleSettings = /** @class */ (function (_super) {\n __extends(BubbleSettings, _super);\n function BubbleSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({}, Border)\n ], BubbleSettings.prototype, \"border\", void 0);\n __decorate([\n Property(false)\n ], BubbleSettings.prototype, \"visible\", void 0);\n __decorate([\n Property([])\n ], BubbleSettings.prototype, \"dataSource\", void 0);\n __decorate([\n Property(1000)\n ], BubbleSettings.prototype, \"animationDuration\", void 0);\n __decorate([\n Property(0)\n ], BubbleSettings.prototype, \"animationDelay\", void 0);\n __decorate([\n Property('')\n ], BubbleSettings.prototype, \"fill\", void 0);\n __decorate([\n Property(10)\n ], BubbleSettings.prototype, \"minRadius\", void 0);\n __decorate([\n Property(20)\n ], BubbleSettings.prototype, \"maxRadius\", void 0);\n __decorate([\n Property(1)\n ], BubbleSettings.prototype, \"opacity\", void 0);\n __decorate([\n Property(null)\n ], BubbleSettings.prototype, \"valuePath\", void 0);\n __decorate([\n Property('Circle')\n ], BubbleSettings.prototype, \"bubbleType\", void 0);\n __decorate([\n Property(null)\n ], BubbleSettings.prototype, \"colorValuePath\", void 0);\n __decorate([\n Collection([], ColorMappingSettings)\n ], BubbleSettings.prototype, \"colorMapping\", void 0);\n __decorate([\n Complex({}, TooltipSettings)\n ], BubbleSettings.prototype, \"tooltipSettings\", void 0);\n __decorate([\n Complex({}, SelectionSettings)\n ], BubbleSettings.prototype, \"selectionSettings\", void 0);\n __decorate([\n Complex({}, HighlightSettings)\n ], BubbleSettings.prototype, \"highlightSettings\", void 0);\n return BubbleSettings;\n}(ChildProperty));\nexport { BubbleSettings };\n/**\n * To configure title of the maps.\n */\nvar CommonTitleSettings = /** @class */ (function (_super) {\n __extends(CommonTitleSettings, _super);\n function CommonTitleSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], CommonTitleSettings.prototype, \"text\", void 0);\n __decorate([\n Property('')\n ], CommonTitleSettings.prototype, \"description\", void 0);\n return CommonTitleSettings;\n}(ChildProperty));\nexport { CommonTitleSettings };\n/**\n * To configure subtitle of the maps.\n */\nvar SubTitleSettings = /** @class */ (function (_super) {\n __extends(SubTitleSettings, _super);\n function SubTitleSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({}, Font)\n ], SubTitleSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Property('Center')\n ], SubTitleSettings.prototype, \"alignment\", void 0);\n return SubTitleSettings;\n}(CommonTitleSettings));\nexport { SubTitleSettings };\n/**\n * To configure title of the maps.\n */\nvar TitleSettings = /** @class */ (function (_super) {\n __extends(TitleSettings, _super);\n function TitleSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({}, Font)\n ], TitleSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Property('Center')\n ], TitleSettings.prototype, \"alignment\", void 0);\n __decorate([\n Complex({}, SubTitleSettings)\n ], TitleSettings.prototype, \"subtitleSettings\", void 0);\n return TitleSettings;\n}(CommonTitleSettings));\nexport { TitleSettings };\n/**\n * Options to configure maps Zooming Settings.\n */\nvar ZoomSettings = /** @class */ (function (_super) {\n __extends(ZoomSettings, _super);\n function ZoomSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], ZoomSettings.prototype, \"enable\", void 0);\n __decorate([\n Property('Horizontal')\n ], ZoomSettings.prototype, \"toolBarOrientation\", void 0);\n __decorate([\n Property(null)\n ], ZoomSettings.prototype, \"color\", void 0);\n __decorate([\n Property('#e61576')\n ], ZoomSettings.prototype, \"highlightColor\", void 0);\n __decorate([\n Property('#e61576')\n ], ZoomSettings.prototype, \"selectionColor\", void 0);\n __decorate([\n Property('Far')\n ], ZoomSettings.prototype, \"horizontalAlignment\", void 0);\n __decorate([\n Property('Near')\n ], ZoomSettings.prototype, \"verticalAlignment\", void 0);\n __decorate([\n Property(['ZoomIn', 'ZoomOut', 'Reset'])\n ], ZoomSettings.prototype, \"toolbars\", void 0);\n __decorate([\n Property(true)\n ], ZoomSettings.prototype, \"mouseWheelZoom\", void 0);\n __decorate([\n Property(false)\n ], ZoomSettings.prototype, \"doubleClickZoom\", void 0);\n __decorate([\n Property(false)\n ], ZoomSettings.prototype, \"pinchZooming\", void 0);\n __decorate([\n Property(false)\n ], ZoomSettings.prototype, \"zoomOnClick\", void 0);\n __decorate([\n Property(1)\n ], ZoomSettings.prototype, \"zoomFactor\", void 0);\n __decorate([\n Property(10)\n ], ZoomSettings.prototype, \"maxZoom\", void 0);\n __decorate([\n Property(1)\n ], ZoomSettings.prototype, \"minZoom\", void 0);\n return ZoomSettings;\n}(ChildProperty));\nexport { ZoomSettings };\n/**\n * Configures the legend settings.\n */\nvar LegendSettings = /** @class */ (function (_super) {\n __extends(LegendSettings, _super);\n function LegendSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], LegendSettings.prototype, \"toggleVisibility\", void 0);\n __decorate([\n Property(false)\n ], LegendSettings.prototype, \"visible\", void 0);\n __decorate([\n Property('transparent')\n ], LegendSettings.prototype, \"background\", void 0);\n __decorate([\n Property('Layers')\n ], LegendSettings.prototype, \"type\", void 0);\n __decorate([\n Property(false)\n ], LegendSettings.prototype, \"invertedPointer\", void 0);\n __decorate([\n Property('After')\n ], LegendSettings.prototype, \"labelPosition\", void 0);\n __decorate([\n Property('None')\n ], LegendSettings.prototype, \"labelDisplayMode\", void 0);\n __decorate([\n Property('Circle')\n ], LegendSettings.prototype, \"shape\", void 0);\n __decorate([\n Property('')\n ], LegendSettings.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], LegendSettings.prototype, \"height\", void 0);\n __decorate([\n Complex({}, Font)\n ], LegendSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Property(15)\n ], LegendSettings.prototype, \"shapeWidth\", void 0);\n __decorate([\n Property(15)\n ], LegendSettings.prototype, \"shapeHeight\", void 0);\n __decorate([\n Property(10)\n ], LegendSettings.prototype, \"shapePadding\", void 0);\n __decorate([\n Complex({ color: '#000000', width: 0 }, Border)\n ], LegendSettings.prototype, \"border\", void 0);\n __decorate([\n Complex({ color: '#000000', width: 0 }, Border)\n ], LegendSettings.prototype, \"shapeBorder\", void 0);\n __decorate([\n Complex({}, CommonTitleSettings)\n ], LegendSettings.prototype, \"title\", void 0);\n __decorate([\n Complex({}, Font)\n ], LegendSettings.prototype, \"titleStyle\", void 0);\n __decorate([\n Property('Bottom')\n ], LegendSettings.prototype, \"position\", void 0);\n __decorate([\n Property('Center')\n ], LegendSettings.prototype, \"alignment\", void 0);\n __decorate([\n Property('None')\n ], LegendSettings.prototype, \"orientation\", void 0);\n __decorate([\n Property({ x: 0, y: 0 })\n ], LegendSettings.prototype, \"location\", void 0);\n __decorate([\n Property(null)\n ], LegendSettings.prototype, \"fill\", void 0);\n __decorate([\n Property('Default')\n ], LegendSettings.prototype, \"mode\", void 0);\n return LegendSettings;\n}(ChildProperty));\nexport { LegendSettings };\n/**\n * Customization for Data label settings.\n */\nvar DataLabelSettings = /** @class */ (function (_super) {\n __extends(DataLabelSettings, _super);\n function DataLabelSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], DataLabelSettings.prototype, \"visible\", void 0);\n __decorate([\n Complex({ width: 0, color: 'transparent' }, Border)\n ], DataLabelSettings.prototype, \"border\", void 0);\n __decorate([\n Property('black')\n ], DataLabelSettings.prototype, \"fill\", void 0);\n __decorate([\n Property(1)\n ], DataLabelSettings.prototype, \"opacity\", void 0);\n __decorate([\n Property(5)\n ], DataLabelSettings.prototype, \"rx\", void 0);\n __decorate([\n Property(5)\n ], DataLabelSettings.prototype, \"ry\", void 0);\n __decorate([\n Complex({}, Font)\n ], DataLabelSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Property('')\n ], DataLabelSettings.prototype, \"labelPath\", void 0);\n __decorate([\n Property('None')\n ], DataLabelSettings.prototype, \"smartLabelMode\", void 0);\n __decorate([\n Property('None')\n ], DataLabelSettings.prototype, \"intersectionAction\", void 0);\n __decorate([\n Property('')\n ], DataLabelSettings.prototype, \"template\", void 0);\n return DataLabelSettings;\n}(ChildProperty));\nexport { DataLabelSettings };\n/**\n * To configure the shapeSettings in the maps.\n */\nvar ShapeSettings = /** @class */ (function (_super) {\n __extends(ShapeSettings, _super);\n function ShapeSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('#A6A6A6')\n ], ShapeSettings.prototype, \"fill\", void 0);\n __decorate([\n Property([])\n ], ShapeSettings.prototype, \"palette\", void 0);\n __decorate([\n Property(5)\n ], ShapeSettings.prototype, \"circleRadius\", void 0);\n __decorate([\n Complex({ width: 0, color: '#000000' }, Border)\n ], ShapeSettings.prototype, \"border\", void 0);\n __decorate([\n Property('')\n ], ShapeSettings.prototype, \"dashArray\", void 0);\n __decorate([\n Property(1)\n ], ShapeSettings.prototype, \"opacity\", void 0);\n __decorate([\n Property(null)\n ], ShapeSettings.prototype, \"colorValuePath\", void 0);\n __decorate([\n Property(null)\n ], ShapeSettings.prototype, \"valuePath\", void 0);\n __decorate([\n Collection([], ColorMappingSettings)\n ], ShapeSettings.prototype, \"colorMapping\", void 0);\n __decorate([\n Property(false)\n ], ShapeSettings.prototype, \"autofill\", void 0);\n return ShapeSettings;\n}(ChildProperty));\nexport { ShapeSettings };\n/**\n * To configure the marker settings for the maps.\n */\nvar MarkerSettings = /** @class */ (function (_super) {\n __extends(MarkerSettings, _super);\n function MarkerSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({ color: 'transparent', width: 1 }, Border)\n ], MarkerSettings.prototype, \"border\", void 0);\n __decorate([\n Property(null)\n ], MarkerSettings.prototype, \"dashArray\", void 0);\n __decorate([\n Property(false)\n ], MarkerSettings.prototype, \"visible\", void 0);\n __decorate([\n Property('#FF471A')\n ], MarkerSettings.prototype, \"fill\", void 0);\n __decorate([\n Property(10)\n ], MarkerSettings.prototype, \"height\", void 0);\n __decorate([\n Property(10)\n ], MarkerSettings.prototype, \"width\", void 0);\n __decorate([\n Property(1)\n ], MarkerSettings.prototype, \"opacity\", void 0);\n __decorate([\n Property('Balloon')\n ], MarkerSettings.prototype, \"shape\", void 0);\n __decorate([\n Property('')\n ], MarkerSettings.prototype, \"legendText\", void 0);\n __decorate([\n Property(new Point(0, 0))\n ], MarkerSettings.prototype, \"offset\", void 0);\n __decorate([\n Property('')\n ], MarkerSettings.prototype, \"imageUrl\", void 0);\n __decorate([\n Property(null)\n ], MarkerSettings.prototype, \"template\", void 0);\n __decorate([\n Property([])\n ], MarkerSettings.prototype, \"dataSource\", void 0);\n __decorate([\n Complex({}, TooltipSettings)\n ], MarkerSettings.prototype, \"tooltipSettings\", void 0);\n __decorate([\n Property(1000)\n ], MarkerSettings.prototype, \"animationDuration\", void 0);\n __decorate([\n Property(0)\n ], MarkerSettings.prototype, \"animationDelay\", void 0);\n __decorate([\n Complex({}, SelectionSettings)\n ], MarkerSettings.prototype, \"selectionSettings\", void 0);\n __decorate([\n Complex({}, HighlightSettings)\n ], MarkerSettings.prototype, \"highlightSettings\", void 0);\n return MarkerSettings;\n}(ChildProperty));\nexport { MarkerSettings };\n/**\n * To configure the layers of the maps.\n */\nvar LayerSettings = /** @class */ (function (_super) {\n __extends(LayerSettings, _super);\n function LayerSettings() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\n * @private\n */\n _this.isBaseLayer = false;\n return _this;\n }\n __decorate([\n Property(null)\n ], LayerSettings.prototype, \"shapeData\", void 0);\n __decorate([\n Property()\n ], LayerSettings.prototype, \"query\", void 0);\n __decorate([\n Complex({}, ShapeSettings)\n ], LayerSettings.prototype, \"shapeSettings\", void 0);\n __decorate([\n Property([])\n ], LayerSettings.prototype, \"dataSource\", void 0);\n __decorate([\n Property('Layer')\n ], LayerSettings.prototype, \"type\", void 0);\n __decorate([\n Property('Geographic')\n ], LayerSettings.prototype, \"geometryType\", void 0);\n __decorate([\n Property('Aerial')\n ], LayerSettings.prototype, \"bingMapType\", void 0);\n __decorate([\n Property('')\n ], LayerSettings.prototype, \"key\", void 0);\n __decorate([\n Property('Geometry')\n ], LayerSettings.prototype, \"layerType\", void 0);\n __decorate([\n Property('http://a.tile.openstreetmap.org/level/tileX/tileY.png')\n ], LayerSettings.prototype, \"urlTemplate\", void 0);\n __decorate([\n Property(true)\n ], LayerSettings.prototype, \"visible\", void 0);\n __decorate([\n Property('name')\n ], LayerSettings.prototype, \"shapeDataPath\", void 0);\n __decorate([\n Property('name')\n ], LayerSettings.prototype, \"shapePropertyPath\", void 0);\n __decorate([\n Property(0)\n ], LayerSettings.prototype, \"animationDuration\", void 0);\n __decorate([\n Collection([], MarkerSettings)\n ], LayerSettings.prototype, \"markerSettings\", void 0);\n __decorate([\n Complex({}, DataLabelSettings)\n ], LayerSettings.prototype, \"dataLabelSettings\", void 0);\n __decorate([\n Collection([], BubbleSettings)\n ], LayerSettings.prototype, \"bubbleSettings\", void 0);\n __decorate([\n Collection([], NavigationLineSettings)\n ], LayerSettings.prototype, \"navigationLineSettings\", void 0);\n __decorate([\n Complex({}, TooltipSettings)\n ], LayerSettings.prototype, \"tooltipSettings\", void 0);\n __decorate([\n Complex({}, SelectionSettings)\n ], LayerSettings.prototype, \"selectionSettings\", void 0);\n __decorate([\n Complex({}, HighlightSettings)\n ], LayerSettings.prototype, \"highlightSettings\", void 0);\n return LayerSettings;\n}(ChildProperty));\nexport { LayerSettings };\n/**\n * Internal use for bing type layer rendering\n */\nvar Tile = /** @class */ (function () {\n function Tile(x, y, height, width, top, left, src) {\n if (height === void 0) { height = 256; }\n if (width === void 0) { width = 256; }\n if (top === void 0) { top = 0; }\n if (left === void 0) { left = 0; }\n if (src === void 0) { src = null; }\n this.x = x;\n this.y = y;\n this.top = top;\n this.left = left;\n this.height = height;\n this.width = width;\n this.src = src;\n }\n return Tile;\n}());\nexport { Tile };\n/**\n * Maps area configuration\n */\nvar MapsAreaSettings = /** @class */ (function (_super) {\n __extends(MapsAreaSettings, _super);\n function MapsAreaSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], MapsAreaSettings.prototype, \"background\", void 0);\n __decorate([\n Complex({ color: 'transparent', width: 1 }, Border)\n ], MapsAreaSettings.prototype, \"border\", void 0);\n return MapsAreaSettings;\n}(ChildProperty));\nexport { MapsAreaSettings };\n","/**\n * Maps constants doc\n */\n/**\n * Specifies maps load event name.\n * @private\n */\nexport var load = 'load';\n/**\n * Specifies maps loaded event name.\n * @private\n */\nexport var loaded = 'loaded';\n/**\n * Specifies maps click event name.\n * @private\n */\nexport var click = 'click';\n/**\n * Specifies maps loaded event name.\n * @private\n */\nexport var rightClick = 'rightClick';\n/**\n * Specifies maps double click event name.\n * @private\n */\nexport var doubleClick = 'doubleClick';\n/**\n * Specifies maps resize event name.\n * @private\n */\nexport var resize = 'resize';\n/**\n * Specifies the map tooltip render event\n */\nexport var tooltipRender = 'tooltipRender';\n/**\n * Specifies the map shapeSelected event\n */\nexport var shapeSelected = 'shapeSelected';\n/**\n * Specifies the map shapeHighlight event\n */\nexport var shapeHighlight = 'shapeHighlight';\n/**\n * Specifies maps mousemove event name.\n * @private\n */\nexport var mousemove = 'mousemove';\n/**\n * Specifies maps mouseup event name.\n * @private\n */\nexport var mouseup = 'mouseup';\n/**\n * Specifies maps mousedown event name.\n * @private\n */\nexport var mousedown = 'mousedown';\n/**\n * Specifies maps layerRendering event name.\n * @private\n */\nexport var layerRendering = 'layerRendering';\n/**\n * Specifies maps shapeRendering event name.\n * @private\n */\nexport var shapeRendering = 'shapeRendering';\n/**\n * Specifies maps markerRendering event name.\n * @private\n */\nexport var markerRendering = 'markerRendering';\n/**\n * Specifies maps markerClick event name.\n * @private\n */\nexport var markerClick = 'markerClick';\n/**\n * Specifies maps markerMouseMove event name.\n * @private\n */\nexport var markerMouseMove = 'markerMouseMove';\n/**\n * Specifies maps dataLabelRendering event name.\n * @private\n */\nexport var dataLabelRendering = 'dataLabelRendering';\n/**\n * Specifies maps bubbleRendering event name.\n * @private\n */\nexport var bubbleRendering = 'bubbleRendering';\n/**\n * Specifies maps bubbleClick event name.\n * @private\n */\nexport var bubbleClick = 'bubbleClick';\n/**\n * Specifies maps bubbleMouseMove event name.\n * @private\n */\nexport var bubbleMouseMove = 'bubbleMouseMove';\n/**\n * Specifies maps animationComplete event name.\n * @private\n */\nexport var animationComplete = 'animationComplete';\n/**\n * Specifies maps legendRendering event name.\n * @private\n */\nexport var legendRendering = 'legendRendering';\n/**\n * Specifies maps annotationRendering event name.\n * @private\n */\nexport var annotationRendering = 'annotationRendering';\n/**\n * Specifies maps itemSelection event name\n * @private\n */\nexport var itemSelection = 'itemSelection';\n/**\n * Specifies maps itemHighlight event name\n */\nexport var itemHighlight = 'itemHighlight';\n/**\n * Specifies maps beforePrint event name\n */\nexport var beforePrint = 'beforePrint';\n","/**\n * Bing map src doc\n */\nvar BingMap = /** @class */ (function () {\n function BingMap(maps) {\n this.maps = maps;\n }\n BingMap.prototype.getBingMap = function (tile, key, type, language, imageUrl, subDomains) {\n var quadKey = '';\n var subDomain;\n var maxZoom = Math.min(this.maps.tileZoomLevel, parseInt(this.maxZoom, 10));\n for (var i = maxZoom; i > 0; i--) {\n var digit = 0;\n var mask = 1 << (i - 1);\n if ((tile.x & mask) !== 0) {\n digit++;\n }\n if ((tile.y & mask) !== 0) {\n digit += 2;\n }\n quadKey = quadKey + '' + digit;\n }\n subDomain = subDomains[Math.min(parseInt(quadKey.substr(quadKey.length - 1, 1), 10), subDomains.length)];\n imageUrl = imageUrl.replace('{quadkey}', quadKey).replace('{subdomain}', subDomain);\n return imageUrl += '&mkt=' + language + '&ur=IN&Key=' + key;\n };\n return BingMap;\n}());\nexport { BingMap };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * ColorMapping class\n */\nvar ColorMapping = /** @class */ (function () {\n function ColorMapping(maps) {\n this.maps = maps;\n }\n /**\n * To get color based on shape settings.\n * @private\n */\n ColorMapping.prototype.getShapeColorMapping = function (shapeSettings, layerData, color) {\n var colorValuePath = shapeSettings.colorValuePath ? shapeSettings.colorValuePath : shapeSettings.valuePath;\n var equalValue = layerData[colorValuePath];\n var colorValue = Number(equalValue);\n var shapeColor = this.getColorByValue(shapeSettings.colorMapping, colorValue, equalValue);\n return shapeColor ? shapeColor : color;\n };\n /**\n * To color by value and color mapping\n */\n ColorMapping.prototype.getColorByValue = function (colorMapping, colorValue, equalValue) {\n if (isNaN(colorValue) && isNullOrUndefined(equalValue)) {\n return null;\n }\n var fill = '';\n for (var _i = 0, colorMapping_1 = colorMapping; _i < colorMapping_1.length; _i++) {\n var colorMap = colorMapping_1[_i];\n if ((colorMap.from && colorMap.to && (colorValue >= colorMap.from && colorValue <= colorMap.to)) ||\n (colorMap.value === equalValue)) {\n fill = colorMap.color;\n }\n }\n return fill || ((!colorMapping.length) ? equalValue : null);\n };\n return ColorMapping;\n}());\nexport { ColorMapping };\n","import { isNullOrUndefined, extend, createElement, Ajax } from '@syncfusion/ej2-base';\nimport { getShapeColor } from '../model/theme';\nimport { GeoLocation, isCustomPath, convertGeoToPoint, Point, PathOption, Size, PolylineOption, getElementByID } from '../utils/helper';\nimport { MapLocation, RectOption, getTranslate, convertTileLatLongToPoint, checkShapeDataFields, CircleOption } from '../utils/helper';\nimport { Tile } from '../model/base';\nimport { BingMap } from './bing-map';\nimport { ColorMapping } from './color-mapping';\nimport { layerRendering, shapeRendering } from '../index';\n/**\n * To calculate and render the shape layer\n */\nvar LayerPanel = /** @class */ (function () {\n function LayerPanel(map) {\n this.tileTranslatePoint = new MapLocation(0, 0);\n this.isMapCoordinates = true;\n this.ajaxProcessCount = 0;\n this.mapObject = map;\n this.ajaxModule = new Ajax();\n this.ajaxResponse = [];\n }\n /* tslint:disable:no-string-literal */\n LayerPanel.prototype.measureLayerPanel = function () {\n var _this = this;\n var imageSize = 30;\n var layerCollection = this.mapObject.layersCollection;\n var areaRect = this.mapObject.mapAreaRect;\n var padding = 10;\n var secondaryEle = getElementByID(this.mapObject.element.id + '_Secondary_Element');\n if (this.mapObject.isTileMap && secondaryEle) {\n this.tileSvgObject = this.mapObject.renderer.createSvg({\n id: this.mapObject.element.id + '_Tile_SVG', width: areaRect.width,\n height: areaRect.height,\n style: 'pointer-events:none'\n });\n secondaryEle.appendChild(this.tileSvgObject);\n }\n this.layerGroup = (this.mapObject.renderer.createGroup({\n id: this.mapObject.element.id + '_Layer_Collections',\n 'clip-path': 'url(#' + this.mapObject.element.id + '_MapArea_ClipRect)'\n }));\n this.clipRectElement = this.mapObject.renderer.drawClipPath(new RectOption(this.mapObject.element.id + '_MapArea_ClipRect', 'transparent', { width: 1, color: 'Gray' }, 1, {\n x: this.mapObject.isTileMap ? 0 : areaRect.x, y: this.mapObject.isTileMap ? 0 : areaRect.y,\n width: areaRect.width, height: areaRect.height\n }));\n this.layerGroup.appendChild(this.clipRectElement);\n this.mapObject.baseMapBounds = null;\n this.mapObject.baseMapRectBounds = null;\n this.mapObject.baseSize = null;\n var layerCount = layerCollection.length - 1;\n layerCollection.forEach(function (layer, index) {\n _this.currentLayer = layer;\n _this.processLayers(layer, index);\n });\n };\n LayerPanel.prototype.renderTileLayer = function (panel, layer, layerIndex, bing) {\n var center = new Point(panel.mapObject.centerPosition.longitude, panel.mapObject.centerPosition.latitude);\n panel.currentFactor = panel.calculateFactor(layer);\n if (isNullOrUndefined(panel.mapObject.tileZoomLevel)) {\n panel.mapObject.tileZoomLevel = panel.mapObject.zoomSettings.zoomFactor;\n }\n panel.mapObject.tileTranslatePoint = panel.panTileMap(panel.mapObject.availableSize.width, panel.mapObject.availableSize.height, center);\n panel.generateTiles(panel.mapObject.tileZoomLevel, panel.mapObject.tileTranslatePoint, bing);\n if (panel.mapObject.markerModule) {\n panel.mapObject.markerModule.markerRender(panel.layerObject, layerIndex, panel.mapObject.tileZoomLevel);\n }\n if (panel.mapObject.navigationLineModule) {\n panel.layerObject.appendChild(panel.mapObject.navigationLineModule.renderNavigation(panel.currentLayer, panel.mapObject.tileZoomLevel, layerIndex));\n }\n panel.translateLayerElements(panel.layerObject, layerIndex);\n panel.layerGroup.appendChild(panel.layerObject);\n };\n LayerPanel.prototype.processLayers = function (layer, layerIndex) {\n this.layerObject = (this.mapObject.renderer.createGroup({\n id: this.mapObject.element.id + '_LayerIndex_' + layerIndex\n }));\n var eventArgs = {\n cancel: false, name: layerRendering, index: layerIndex,\n layer: layer, maps: this.mapObject\n };\n this.mapObject.trigger(layerRendering, eventArgs);\n if (!eventArgs.cancel) {\n if (layer.layerType !== 'Geometry') {\n if (layer.layerType !== 'Bing' || this.bing) {\n this.renderTileLayer(this, layer, layerIndex);\n }\n else if (layer.key && layer.key.length > 1) {\n var proxy_1 = this;\n var bing_1 = new BingMap(this.mapObject);\n var url = 'http://dev.virtualearth.net/REST/V1/Imagery/Metadata/' + layer.bingMapType;\n var ajax = new Ajax({\n url: url + '?output=json&include=ImageryProviders&key=' + layer.key\n });\n ajax.onSuccess = function (json) {\n var jsonObject = JSON.parse(json);\n var resource = jsonObject['resourceSets'][0]['resources'][0];\n var imageUrl = resource['imageUrl'];\n var subDomains = resource['imageUrlSubdomains'];\n var maxZoom = resource['zoomMax'];\n if (imageUrl !== null && imageUrl !== undefined && imageUrl !== bing_1.imageUrl) {\n bing_1.imageUrl = imageUrl;\n }\n if (subDomains !== null && subDomains !== undefined && subDomains !== bing_1.subDomains) {\n bing_1.subDomains = subDomains;\n }\n if (maxZoom !== null && maxZoom !== undefined && maxZoom !== bing_1.maxZoom) {\n bing_1.maxZoom = maxZoom;\n }\n proxy_1.mapObject['bingMap'] = bing_1;\n proxy_1.renderTileLayer(proxy_1, layer, layerIndex, bing_1);\n };\n ajax.send();\n }\n }\n else {\n if (!isNullOrUndefined(layer.shapeData) && (!isNullOrUndefined(layer.shapeData['geometries']) ||\n !isNullOrUndefined(layer.shapeData['features']))) {\n var featureData = (!isNullOrUndefined(layer.shapeData['geometries']) &&\n layer.shapeData['geometries'].length > 0 ? layer.shapeData['geometries'] :\n layer.shapeData['features']);\n layer.layerData = [];\n var bbox = layer.shapeData['bbox'];\n if (!isNullOrUndefined(bbox) && layer.isBaseLayer) {\n this.mapObject.baseMapBounds = new GeoLocation({ min: bbox[0][1], max: bbox[1][1] }, { min: bbox[0][0], max: bbox[1][0] });\n }\n else if (isNullOrUndefined(this.mapObject.baseMapBounds) && !isCustomPath(featureData)) {\n this.calculateRectBounds(featureData);\n // if (isNullOrUndefined(this.mapObject.baseSize)) {\n // let minSize: Point = convertGeoToPoint(\n // this.mapObject.baseMapBounds.latitude.min,\n // this.mapObject.baseMapBounds.longitude.min, this.calculateFactor(layer), layer, this.mapObject\n // );\n // let maxSize: Point = convertGeoToPoint(\n // this.mapObject.baseMapBounds.latitude.max,\n // this.mapObject.baseMapBounds.longitude.max, this.calculateFactor(layer), layer, this.mapObject\n // );\n // this.mapObject.baseSize = new Size(Math.abs(minSize.x - maxSize.x), Math.abs(minSize.y - maxSize.y));\n // }\n }\n this.calculatePathCollection(layerIndex, featureData);\n }\n }\n }\n if (!this.mapObject.isTileMap) {\n this.mapObject.svgObject.appendChild(this.layerGroup);\n }\n else if (this.tileSvgObject) {\n this.tileSvgObject.appendChild(this.layerGroup);\n }\n };\n //tslint:disable:max-func-body-length\n LayerPanel.prototype.bubbleCalculation = function (bubbleSettings, range) {\n if (bubbleSettings.dataSource != null && bubbleSettings != null) {\n if (bubbleSettings.colorValuePath == null) {\n return;\n }\n for (var i = 0; i < bubbleSettings.dataSource.length; i++) {\n var bubbledata = parseFloat(bubbleSettings.dataSource[i][bubbleSettings.valuePath]);\n if (i !== 0) {\n if (bubbledata > range.max) {\n range.max = bubbledata;\n }\n else if (bubbledata < range.min) {\n range.min = bubbledata;\n }\n }\n else {\n range.max = range.min = bubbledata;\n }\n }\n }\n };\n // tslint:disable-next-line:max-func-body-length\n LayerPanel.prototype.calculatePathCollection = function (layerIndex, renderData) {\n var _this = this;\n this.groupElements = [];\n if ((!isCustomPath(renderData))) {\n this.currentFactor = this.calculateFactor(this.currentLayer);\n }\n this.rectBounds = null;\n var shapeSettings = this.currentLayer.shapeSettings;\n renderData.forEach(function (geometryData, index) {\n if (!isNullOrUndefined(geometryData['geometry']) || !isNullOrUndefined(geometryData['coordinates'])) {\n var type = !isNullOrUndefined(geometryData['geometry']) ? geometryData['geometry']['type'] : geometryData['type'];\n var coords = !isNullOrUndefined(geometryData['geometry']) ? geometryData['geometry']['coordinates'] :\n geometryData['coordinates'];\n var data = geometryData['geometry'];\n var properties = geometryData['properties'];\n _this.generatePoints(type, coords, data, properties);\n }\n });\n this.currentLayer.rectBounds = this.rectBounds;\n if (isNullOrUndefined(this.mapObject.baseMapRectBounds) && this.currentLayer.isBaseLayer) {\n this.mapObject.baseMapRectBounds = this.rectBounds;\n }\n var colors = shapeSettings.palette.length > 1 ? shapeSettings.palette : getShapeColor(this.mapObject.theme);\n var labelTemplateEle = createElement('div', {\n id: this.mapObject.element.id + '_LayerIndex_' + layerIndex + '_Label_Template_Group',\n className: 'template',\n styles: 'pointer-events: none; overflow: hidden; position: absolute;' +\n 'top:' + this.mapObject.mapAreaRect.y + 'px;' +\n 'left:' + this.mapObject.mapAreaRect.x + 'px;' +\n 'height:' + this.mapObject.mapAreaRect.height + 'px;' +\n 'width:' + this.mapObject.mapAreaRect.width + 'px;'\n });\n var _loop_1 = function (i) {\n var k = void 0;\n var currentShapeData = this_1.currentLayer.layerData[i];\n var pathOptions = void 0;\n var polyLineOptions = void 0;\n var circleOptions = void 0;\n var groupElement = void 0;\n var drawObject = void 0;\n var path = '';\n var points = '';\n var fill = (shapeSettings.autofill) ? colors[i % colors.length] : shapeSettings.fill;\n if (shapeSettings.colorValuePath !== null && !isNullOrUndefined(currentShapeData['property'])) {\n k = checkShapeDataFields(this_1.currentLayer.dataSource, currentShapeData['property'], this_1.currentLayer.shapeDataPath, this_1.currentLayer.shapePropertyPath);\n if (k !== null && shapeSettings.colorMapping.length === 0) {\n fill = this_1.currentLayer.dataSource[k][shapeSettings.colorValuePath];\n }\n else if (currentShapeData['property'][shapeSettings.colorValuePath] &&\n this_1.currentLayer.dataSource.length === 0 && shapeSettings.colorMapping.length === 0) {\n fill = currentShapeData['property'][shapeSettings.colorValuePath];\n }\n }\n var shapeID = this_1.mapObject.element.id + '_LayerIndex_' + layerIndex + '_ShapeIndex_' + i + '_dataIndex_' + k;\n fill = this_1.getShapeColorMapping(this_1.currentLayer, currentShapeData['property'], fill);\n var eventArgs = {\n cancel: false, name: shapeRendering, index: i,\n data: this_1.currentLayer.dataSource ? this_1.currentLayer.dataSource[k] : null, maps: this_1.mapObject,\n shape: shapeSettings, fill: fill, border: { width: shapeSettings.border.width, color: shapeSettings.border.color }\n };\n this_1.mapObject.trigger(shapeRendering, eventArgs);\n var drawingType = !isNullOrUndefined(currentShapeData['_isMultiPolygon'])\n ? 'MultiPolygon' : isNullOrUndefined(currentShapeData['type']) ? currentShapeData[0]['type'] : currentShapeData['type'];\n drawingType = (drawingType === 'Polygon' || drawingType === 'MultiPolygon') ? 'Polygon' : drawingType;\n if (this_1.groupElements.length < 1) {\n groupElement = this_1.mapObject.renderer.createGroup({\n id: this_1.mapObject.element.id + '_LayerIndex_' + layerIndex + '_' + drawingType + '_Group', transform: ''\n });\n this_1.groupElements.push(groupElement);\n }\n else {\n for (var i_1 = 0; i_1 < this_1.groupElements.length; i_1++) {\n var ele = this_1.groupElements[i_1];\n if (ele.id.indexOf(drawingType) > -1) {\n groupElement = ele;\n break;\n }\n else if (i_1 >= this_1.groupElements.length - 1) {\n groupElement = this_1.mapObject.renderer.createGroup({\n id: this_1.mapObject.element.id + '_LayerIndex_' + layerIndex + '_' + drawingType + '_Group'\n });\n this_1.groupElements.push(groupElement);\n break;\n }\n }\n }\n var pathEle = void 0;\n switch (drawingType) {\n case 'Polygon':\n if (!currentShapeData['_isMultiPolygon']) {\n path += 'M' + (currentShapeData[0]['point']['x']) + ' ' + (currentShapeData[0]['point']['y']);\n currentShapeData.map(function (shapeData) {\n path += ' L ' + (shapeData['point']['x']) + ' ' + (shapeData['point']['y']);\n });\n }\n else {\n path = this_1.generateMultiPolygonPath(currentShapeData);\n }\n path += ' z ';\n if (path.length > 3) {\n pathOptions = new PathOption(shapeID, eventArgs.fill, eventArgs.border.width, eventArgs.border.color, shapeSettings.opacity, shapeSettings.dashArray, path);\n pathEle = this_1.mapObject.renderer.drawPath(pathOptions);\n }\n break;\n case 'LineString':\n currentShapeData.map(function (lineData) {\n points += lineData['point']['x'] + ' , ' + lineData['point']['y'] + ' ';\n });\n polyLineOptions = new PolylineOption(shapeID, points, eventArgs.fill, eventArgs.border.width, eventArgs.border.color, shapeSettings.opacity, shapeSettings.dashArray);\n pathEle = this_1.mapObject.renderer.drawPolyline(polyLineOptions);\n break;\n case 'Point':\n var pointData = currentShapeData['point'];\n circleOptions = new CircleOption(shapeID, eventArgs.fill, eventArgs.border, shapeSettings.opacity, pointData['x'], pointData['y'], shapeSettings.circleRadius, null);\n pathEle = this_1.mapObject.renderer.drawCircle(circleOptions);\n break;\n case 'Path':\n path = currentShapeData['point'];\n pathOptions = new PathOption(shapeID, eventArgs.fill, eventArgs.border.width, eventArgs.border.color, shapeSettings.opacity, shapeSettings.dashArray, path);\n pathEle = this_1.mapObject.renderer.drawPath(pathOptions);\n break;\n }\n if (!isNullOrUndefined(pathEle)) {\n pathEle.setAttribute('aria-label', ((!isNullOrUndefined(currentShapeData['property'])) ?\n (currentShapeData['property'][this_1.currentLayer.shapePropertyPath]) : ''));\n pathEle.setAttribute('tabindex', (this_1.mapObject.tabIndex + i + 2).toString());\n groupElement.appendChild(pathEle);\n }\n };\n var this_1 = this;\n for (var i = 0; i < this.currentLayer.layerData.length; i++) {\n _loop_1(i);\n }\n var bubbleG;\n if (this.currentLayer.bubbleSettings.length && this.mapObject.bubbleModule) {\n var length_1 = this.currentLayer.bubbleSettings.length;\n var bubble_1;\n var _loop_2 = function (j) {\n bubble_1 = this_2.currentLayer.bubbleSettings[j];\n bubbleG = this_2.mapObject.renderer.createGroup({\n id: this_2.mapObject.element.id + '_LayerIndex_' + layerIndex + '_bubble_Group_' + j\n });\n var range = { min: 0, max: 0 };\n this_2.bubbleCalculation(bubble_1, range);\n bubble_1.dataSource.map(function (bubbleData, i) {\n _this.renderBubble(_this.currentLayer, bubbleData, colors[i % colors.length], range, j, i, bubbleG, layerIndex, bubble_1);\n });\n this_2.groupElements.push(bubbleG);\n };\n var this_2 = this;\n for (var j = 0; j < length_1; j++) {\n _loop_2(j);\n }\n }\n var group = (this.mapObject.renderer.createGroup({\n id: this.mapObject.element.id + '_layerIndex_' + layerIndex + '_dataLableIndex_Group', style: 'pointer-events: none;'\n }));\n if (this.mapObject.dataLabelModule && this.currentLayer.dataLabelSettings.visible) {\n renderData.map(function (currentShapeData, i) {\n _this.renderLabel(_this.currentLayer, layerIndex, currentShapeData, group, i, labelTemplateEle);\n });\n this.groupElements.push(group);\n }\n if (this.mapObject.navigationLineModule) {\n this.groupElements.push(this.mapObject.navigationLineModule.renderNavigation(this.currentLayer, this.currentFactor, layerIndex));\n }\n this.groupElements.map(function (element) {\n _this.layerObject.appendChild(element);\n });\n if (this.mapObject.markerModule) {\n this.mapObject.markerModule.markerRender(this.layerObject, layerIndex, this.currentFactor);\n }\n this.translateLayerElements(this.layerObject, layerIndex);\n this.layerGroup.appendChild(this.layerObject);\n };\n /**\n * render datalabel\n */\n LayerPanel.prototype.renderLabel = function (layer, layerIndex, shape, group, shapeIndex, labelTemplateEle) {\n this.mapObject.dataLabelModule.renderLabel(layer, layerIndex, shape, layer.layerData, group, labelTemplateEle, shapeIndex);\n };\n /**\n * To render path for multipolygon\n */\n LayerPanel.prototype.generateMultiPolygonPath = function (currentShapeData) {\n var path = '';\n var shape;\n for (var j = 0; j < currentShapeData.length; j++) {\n path += 'M' + (currentShapeData[j][0]['point']['x']) + ' ' + (currentShapeData[j][0]['point']['y']);\n shape = currentShapeData[j];\n shape.map(function (shapeData) {\n path += ' L ' + (shapeData['point']['x']) + ' ' + (shapeData['point']['y']);\n });\n }\n return path;\n };\n /**\n * To render bubble\n */\n LayerPanel.prototype.renderBubble = function (layer, bubbleData, color, range, bubbleIndex, dataIndex, group, layerIndex, bubbleSettings) {\n if (isNullOrUndefined(this.mapObject.bubbleModule) || !bubbleSettings.visible) {\n return null;\n }\n color = bubbleSettings.fill ? bubbleSettings.fill : color;\n this.mapObject.bubbleModule.id = this.mapObject.element.id + '_LayerIndex_' + layerIndex + '_BubbleIndex_' +\n bubbleIndex + '_dataIndex_' + dataIndex;\n this.mapObject.bubbleModule.renderBubble(bubbleSettings, bubbleData, color, range, bubbleIndex, dataIndex, layerIndex, layer, group);\n };\n /**\n * To get the shape color from color mapping module\n */\n LayerPanel.prototype.getShapeColorMapping = function (layer, shape, color) {\n color = color ? color : layer.shapeSettings.fill;\n if (layer.shapeSettings.colorMapping.length === 0 && isNullOrUndefined(layer.dataSource)) {\n return color;\n }\n var index = checkShapeDataFields(layer.dataSource, shape, layer.shapeDataPath, layer.shapePropertyPath);\n var colorMapping = new ColorMapping(this.mapObject);\n if (isNullOrUndefined(layer.dataSource[index])) {\n return color;\n }\n return colorMapping.getShapeColorMapping(layer.shapeSettings, layer.dataSource[index], color);\n };\n LayerPanel.prototype.generatePoints = function (type, coordinates, data, properties) {\n var _this = this;\n var latitude;\n var longitude;\n var newData = [];\n switch (type.toLowerCase()) {\n case 'polygon':\n newData = this.calculatePolygonBox(coordinates[0], data, properties);\n if (newData.length > 0) {\n newData['property'] = properties;\n newData['type'] = type;\n newData['_isMultiPolygon'] = false;\n this.currentLayer.layerData.push(newData);\n }\n break;\n case 'multipolygon':\n var multiPolygonDatas = [];\n for (var i = 0; i < coordinates.length; i++) {\n newData = this.calculatePolygonBox(coordinates[i][0], data, properties);\n if (newData.length > 0) {\n multiPolygonDatas.push(newData);\n }\n }\n multiPolygonDatas['property'] = properties;\n multiPolygonDatas['type'] = type;\n multiPolygonDatas['_isMultiPolygon'] = true;\n this.currentLayer.layerData.push(multiPolygonDatas);\n break;\n case 'linestring':\n coordinates.map(function (points, index) {\n latitude = points[1];\n longitude = points[0];\n var point = convertGeoToPoint(latitude, longitude, _this.currentFactor, _this.currentLayer, _this.mapObject);\n newData.push({\n point: point, lat: latitude, lng: longitude\n });\n });\n newData['property'] = properties;\n newData['type'] = type;\n this.currentLayer.layerData.push(newData);\n break;\n case 'point':\n latitude = coordinates[1];\n longitude = coordinates[0];\n var point = convertGeoToPoint(latitude, longitude, this.currentFactor, this.currentLayer, this.mapObject);\n this.currentLayer.layerData.push({\n point: point, type: type, lat: latitude, lng: longitude, property: properties\n });\n break;\n case 'path':\n this.currentLayer.layerData.push({\n point: data['d'], type: type, property: properties\n });\n break;\n }\n };\n LayerPanel.prototype.calculateFactor = function (layer) {\n var horFactor;\n var verFactor = 1;\n var divide = 10;\n var exp = 'e+1';\n var bounds = this.mapObject.baseMapBounds;\n var mapSize = new Size(this.mapObject.mapAreaRect.width, this.mapObject.mapAreaRect.height - 5);\n var mapHeight;\n var mapWidth;\n if (bounds) {\n var start = convertGeoToPoint(bounds.latitude.min, bounds.longitude.min, null, layer, this.mapObject);\n var end = convertGeoToPoint(bounds.latitude.max, bounds.longitude.max, null, layer, this.mapObject);\n mapHeight = end.y - start.y;\n mapWidth = end.x - start.x;\n }\n else {\n mapHeight = mapWidth = 500;\n }\n if (mapHeight < mapSize.height) {\n horFactor = parseFloat(Math.abs(Number(mapSize.height / Number(mapHeight.toString() + exp)) * 100).toString().split('.')[0])\n / divide;\n }\n else {\n horFactor = mapSize.height / mapHeight;\n }\n if (mapWidth < mapSize.width) {\n verFactor = parseFloat(Math.abs(Number(mapSize.width / Number(mapWidth.toString() + exp)) * 100).toString().split('.')[0])\n / divide;\n }\n else {\n verFactor = mapSize.width / mapWidth;\n }\n return (Math.min(verFactor, horFactor));\n };\n LayerPanel.prototype.translateLayerElements = function (layerElement, index) {\n var childNode;\n if (!isNullOrUndefined(this.mapObject.baseMapRectBounds)) {\n var duration = this.currentLayer.animationDuration;\n var animate = duration !== 0 || isNullOrUndefined(this.mapObject.zoomModule);\n var translate = getTranslate(this.mapObject, this.currentLayer, animate);\n var scale = this.mapObject.previousScale = translate['scale'];\n var location_1 = this.mapObject.previousPoint = translate['location'];\n this.mapObject.baseTranslatePoint = this.mapObject.translatePoint = location_1;\n this.mapObject.baseScale = this.mapObject.scale = scale;\n for (var i = 0; i < layerElement.childElementCount; i++) {\n childNode = layerElement.childNodes[i];\n if (!(childNode.id.indexOf('_Markers_Group') > -1) &&\n (!(childNode.id.indexOf('_bubble_Group') > -1)) &&\n (!(childNode.id.indexOf('_dataLableIndex_Group') > -1))) {\n var transform = 'scale( ' + scale + ' ) '\n + 'translate( ' + location_1.x + ' ' + location_1.y + ' ) ';\n childNode.setAttribute('transform', transform);\n if (duration > 0 && !isNullOrUndefined(this.mapObject.zoomModule)) {\n translate = getTranslate(this.mapObject, this.currentLayer);\n this.mapObject.scale = translate['scale'];\n this.mapObject.translatePoint = translate['location'];\n }\n }\n }\n }\n else if (this.mapObject.isTileMap) {\n for (var j = 0; j < layerElement.childElementCount; j++) {\n childNode = layerElement.childNodes[j];\n if (!(childNode.id.indexOf('_Markers_Group') > -1) &&\n (!(childNode.id.indexOf('_bubble_Group') > -1)) &&\n (!(childNode.id.indexOf('_dataLableIndex_Group') > -1)) &&\n (!(childNode.id.indexOf('_line_Group') > -1))) {\n var transform = 'scale( ' + this.mapObject.scale + ' ) ' + 'translate( ' + this.mapObject.translatePoint.x\n + ' ' + this.mapObject.translatePoint.y + ' ) ';\n childNode.setAttribute('transform', transform);\n }\n }\n }\n };\n LayerPanel.prototype.calculateRectBounds = function (layerData) {\n var _this = this;\n layerData.forEach(function (obj, index) {\n if (!isNullOrUndefined(obj['geometry']) || !isNullOrUndefined(obj['coordinates'])) {\n var type = !isNullOrUndefined(obj['geometry']) ? obj['geometry']['type'] : obj['type'];\n var coordinates = !isNullOrUndefined(obj['geometry']) ? obj['geometry']['coordinates'] : obj['coordinates'];\n switch (type.toLowerCase()) {\n case 'polygon':\n _this.calculateRectBox(coordinates[0]);\n break;\n case 'multipolygon':\n coordinates.map(function (point, index) {\n _this.calculateRectBox(point[0]);\n });\n break;\n }\n }\n });\n };\n LayerPanel.prototype.calculatePolygonBox = function (coordinates, data, properties) {\n var _this = this;\n var newData = [];\n var bounds = this.mapObject.baseMapBounds;\n coordinates.map(function (currentPoint, index) {\n var latitude = currentPoint[1];\n var longitude = currentPoint[0];\n if ((longitude >= bounds.longitude.min && longitude <= bounds.longitude.max)\n && (latitude >= bounds.latitude.min && latitude <= bounds.latitude.max)) {\n var point = convertGeoToPoint(latitude, longitude, _this.currentFactor, _this.currentLayer, _this.mapObject);\n if (isNullOrUndefined(_this.rectBounds)) {\n _this.rectBounds = { min: { x: point.x, y: point.y }, max: { x: point.x, y: point.y } };\n }\n else {\n _this.rectBounds['min']['x'] = Math.min(_this.rectBounds['min']['x'], point.x);\n _this.rectBounds['min']['y'] = Math.min(_this.rectBounds['min']['y'], point.y);\n _this.rectBounds['max']['x'] = Math.max(_this.rectBounds['max']['x'], point.x);\n _this.rectBounds['max']['y'] = Math.max(_this.rectBounds['max']['y'], point.y);\n }\n newData.push({\n point: point,\n lat: latitude,\n lng: longitude\n });\n }\n });\n return newData;\n };\n LayerPanel.prototype.calculateRectBox = function (coordinates) {\n var _this = this;\n coordinates.forEach(function (currentCoords) {\n if (isNullOrUndefined(_this.mapObject.baseMapBounds)) {\n _this.mapObject.baseMapBounds = new GeoLocation({ min: currentCoords[1], max: currentCoords[1] }, { min: currentCoords[0], max: currentCoords[0] });\n }\n else {\n _this.mapObject.baseMapBounds.latitude.min = Math.min(_this.mapObject.baseMapBounds.latitude.min, currentCoords[1]);\n _this.mapObject.baseMapBounds.latitude.max = Math.max(_this.mapObject.baseMapBounds.latitude.max, currentCoords[1]);\n _this.mapObject.baseMapBounds.longitude.min = Math.min(_this.mapObject.baseMapBounds.longitude.min, currentCoords[0]);\n _this.mapObject.baseMapBounds.longitude.max = Math.max(_this.mapObject.baseMapBounds.longitude.max, currentCoords[0]);\n }\n });\n };\n LayerPanel.prototype.generateTiles = function (zoomLevel, tileTranslatePoint, bing) {\n var userLang = this.mapObject.locale;\n var size = this.mapObject.availableSize;\n this.tiles = [];\n var xcount;\n var ycount;\n xcount = ycount = Math.pow(2, zoomLevel);\n var width = size.width / 2;\n var height = size.height / 2;\n var baseLayer = this.mapObject.layers[this.mapObject.baseLayerIndex];\n this.urlTemplate = baseLayer.urlTemplate;\n var endY = Math.min(ycount, ((-tileTranslatePoint.y + size.height) / 256) + 1);\n var endX = Math.min(xcount, ((-tileTranslatePoint.x + size.width) / 256) + 1);\n var startX = (-(tileTranslatePoint.x + 256) / 256);\n var startY = (-(tileTranslatePoint.y + 256) / 256);\n bing = bing || this.bing || this.mapObject['bingMap'];\n for (var i = Math.round(startX); i < Math.round(endX); i++) {\n for (var j = Math.round(startY); j < Math.round(endY); j++) {\n var x = 256 * i + tileTranslatePoint.x;\n var y = 256 * j + tileTranslatePoint.y;\n if (x > -256 && x <= size.width && y > -256 && y < size.height) {\n if (i >= 0 && j >= 0) {\n var tile = new Tile(i, j);\n tile.left = x;\n tile.top = y;\n if (baseLayer.layerType === 'Bing') {\n var key = baseLayer.key;\n tile.src = bing.getBingMap(tile, key, baseLayer.bingMapType, userLang, bing.imageUrl, bing.subDomains);\n }\n else {\n tile.src = this.urlTemplate.replace('level', zoomLevel.toString()).replace('tileX', tile.x.toString())\n .replace('tileY', tile.y.toString());\n }\n this.tiles.push(tile);\n }\n }\n }\n }\n var proxTiles = extend([], this.tiles, [], true);\n for (var _i = 0, _a = this.mapObject.layers; _i < _a.length; _i++) {\n var layer = _a[_i];\n if (!(layer.type === 'SubLayer' && layer.visible)) {\n continue;\n }\n if (layer.layerType === 'OSM' || layer.layerType === 'Bing') {\n for (var _b = 0, proxTiles_1 = proxTiles; _b < proxTiles_1.length; _b++) {\n var baseTile = proxTiles_1[_b];\n var subtile = extend(baseTile, {}, {}, true);\n if (layer.layerType === 'Bing') {\n subtile.src = bing.getBingMap(subtile, layer.key, layer.bingMapType, userLang, bing.imageUrl, bing.subDomains);\n }\n else {\n subtile.src = layer.urlTemplate.replace('level', zoomLevel.toString()).replace('tileX', baseTile.x.toString())\n .replace('tileY', baseTile.y.toString());\n }\n this.tiles.push(subtile);\n }\n }\n }\n this.arrangeTiles();\n };\n LayerPanel.prototype.arrangeTiles = function () {\n var htmlString = this.templateCompiler(this.tiles);\n if (getElementByID(this.mapObject.element.id + '_tile_parent')) {\n document.getElementById(this.mapObject.element.id + '_tile_parent').innerHTML = htmlString;\n }\n };\n LayerPanel.prototype.templateCompiler = function (tiles) {\n var tileElment = '';\n for (var _i = 0, tiles_1 = tiles; _i < tiles_1.length; _i++) {\n var tile = tiles_1[_i];\n tileElment += '
    ';\n }\n return tileElment;\n };\n LayerPanel.prototype.panTileMap = function (factorX, factorY, centerPosition) {\n var level = this.mapObject.tileZoomLevel;\n var padding = 20;\n var x;\n var y;\n var totalSize = Math.pow(2, level) * 256;\n x = (factorX / 2) - (totalSize / 2);\n y = (factorY / 2) - (totalSize / 2);\n var position = convertTileLatLongToPoint(centerPosition, level, { x: x, y: y }, this.isMapCoordinates);\n x -= position.x - (factorX / 2);\n y = (y - (position.y - (factorY / 2))) + padding;\n this.mapObject.scale = Math.pow(2, level - 1);\n this.mapObject.translatePoint = new Point(((x - (0.5 * this.mapObject.scale)) / this.mapObject.scale), ((y - (0.5 * this.mapObject.scale)) / this.mapObject.scale));\n return new Point(x, y);\n };\n return LayerPanel;\n}());\nexport { LayerPanel };\n","import { annotationRendering } from '../index';\nimport { createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { getTemplateFunction, getElementOffset, getElementByID } from '../utils/helper';\n/**\n * Represent the annotation rendering for map\n */\nvar Annotations = /** @class */ (function () {\n function Annotations(map) {\n this.map = map;\n }\n Annotations.prototype.renderAnnotationElements = function () {\n var _this = this;\n var secondaryID = this.map.element.id + '_Secondary_Element';\n var annotationGroup = createElement('div', { id: this.map.element.id + '_Annotations_Group' });\n annotationGroup.style.position = 'absolute';\n annotationGroup.style.top = '0px';\n annotationGroup.style.left = '0px';\n this.map.annotations.map(function (annotation, index) {\n if (annotation.content !== null) {\n _this.createAnnotationTemplate(annotationGroup, annotation, index);\n }\n });\n if (annotationGroup.childElementCount > 0 && !(isNullOrUndefined(getElementByID(secondaryID)))) {\n getElementByID(secondaryID).appendChild(annotationGroup);\n }\n };\n /**\n * To create annotation elements\n */\n Annotations.prototype.createAnnotationTemplate = function (parentElement, annotation, annotationIndex) {\n var left;\n var top;\n var templateFn;\n var map = this.map;\n var templateElement;\n var availSize = map.availableSize;\n var id = map.element.id + '_Annotation_' + annotationIndex;\n var childElement = createElement('div', {\n id: map.element.id + '_Annotation_' + annotationIndex, styles: 'position: absolute; z-index:' + annotation.zIndex + ';'\n });\n var argsData = {\n cancel: false, name: annotationRendering, content: annotation.content,\n annotation: annotation\n };\n this.map.trigger(annotationRendering, argsData);\n templateFn = getTemplateFunction(argsData.content);\n if (templateFn && templateFn(this.map).length) {\n templateElement = templateFn(this.map);\n while (templateElement.length > 0) {\n childElement.appendChild(templateElement[0]);\n }\n }\n else {\n childElement.appendChild(createElement('div', {\n innerHTML: argsData.content\n }));\n }\n var offset = getElementOffset(childElement.cloneNode(true), map.element);\n var elementRect = map.element.getBoundingClientRect();\n var bounds = map.svgObject.getBoundingClientRect();\n left = Math.abs(bounds.left - elementRect.left);\n top = Math.abs(bounds.top - elementRect.top);\n var annotationXValue = (annotation.x.indexOf('%') > -1) ? (availSize.width / 100) * parseFloat(annotation.x) :\n parseFloat(annotation.x);\n var annotationYValue = (annotation.y.indexOf('%') > -1) ? (availSize.height / 100) * parseFloat(annotation.y) :\n parseFloat(annotation.y);\n left = (annotation.horizontalAlignment === 'None') ? (left + annotationXValue) : left;\n top = (annotation.verticalAlignment === 'None') ? (top + annotationYValue) : top;\n switch (annotation.verticalAlignment) {\n case 'Near':\n top = (top + annotationYValue);\n break;\n case 'Center':\n top = (top + annotationYValue) + ((bounds.height / 2) - (offset.height / 2));\n break;\n case 'Far':\n top = (top + bounds.height + annotationYValue) - offset.height;\n break;\n }\n switch (annotation.horizontalAlignment) {\n case 'Near':\n left = (left + annotationXValue);\n break;\n case 'Center':\n left = (left + annotationXValue) + ((bounds.width / 2) - (offset.width / 2));\n break;\n case 'Far':\n left = (left + bounds.width + annotationXValue) - offset.width;\n break;\n }\n childElement.style.left = left + 'px';\n childElement.style.top = top + 'px';\n parentElement.appendChild(childElement);\n };\n /*\n * Get module name.\n */\n Annotations.prototype.getModuleName = function () {\n return 'Annotations';\n };\n /**\n * To destroy the annotation.\n * @return {void}\n * @private\n */\n Annotations.prototype.destroy = function (map) {\n // Destroy method performed here\n };\n return Annotations;\n}());\nexport { Annotations };\n","import { print as printWindow, createElement, isNullOrUndefined, Browser } from '@syncfusion/ej2-base';\nimport { getElement } from '../utils/helper';\nimport { beforePrint } from '../model/constants';\nimport { PdfPageOrientation, PdfDocument, PdfBitmap } from '@syncfusion/ej2-pdf-export';\n/**\n * Annotation Module handles the Annotation for Maps\n */\nvar ExportUtils = /** @class */ (function () {\n /**\n * Constructor for Maps\n * @param control\n */\n function ExportUtils(control) {\n this.control = control;\n }\n /**\n * To print the Maps\n * @param elements\n */\n ExportUtils.prototype.print = function (elements) {\n this.printWindow = window.open('', 'print', 'height=' + window.outerHeight + ',width=' + window.outerWidth + ',tabbar=no');\n this.printWindow.moveTo(0, 0);\n this.printWindow.resizeTo(screen.availWidth, screen.availHeight);\n var argsData = {\n cancel: false, htmlContent: this.getHTMLContent(elements), name: beforePrint\n };\n this.control.trigger(beforePrint, argsData);\n if (!argsData.cancel) {\n printWindow(argsData.htmlContent, this.printWindow);\n }\n };\n /**\n * To get the html string of the Maps\n * @param elements\n * @private\n */\n ExportUtils.prototype.getHTMLContent = function (elements) {\n var div = createElement('div');\n if (elements) {\n if (elements instanceof Array) {\n elements.forEach(function (value) {\n div.appendChild(getElement(value).cloneNode(true));\n });\n }\n else if (elements instanceof Element) {\n div.appendChild(elements.cloneNode(true));\n }\n else {\n div.appendChild(getElement(elements).cloneNode(true));\n }\n }\n else {\n div.appendChild(this.control.element.cloneNode(true));\n }\n return div;\n };\n /**\n * To export the file as image/svg format\n * @param type\n * @param fileName\n */\n ExportUtils.prototype.export = function (type, fileName, orientation) {\n var _this = this;\n var element = createElement('canvas', {\n id: 'ej2-canvas',\n attrs: {\n 'width': this.control.availableSize.width.toString(),\n 'height': this.control.availableSize.height.toString()\n }\n });\n var isDownload = !(Browser.userAgent.toString().indexOf('HeadlessChrome') > -1);\n orientation = isNullOrUndefined(orientation) ? PdfPageOrientation.Landscape : orientation;\n var svgData = '' +\n this.control.svgObject.outerHTML +\n '';\n var url = window.URL.createObjectURL(new Blob(type === 'SVG' ? [svgData] :\n [(new XMLSerializer()).serializeToString(this.control.svgObject)], { type: 'image/svg+xml' }));\n if (type === 'SVG') {\n this.triggerDownload(fileName, type, url, isDownload);\n }\n else {\n var image_1 = new Image();\n var ctx_1 = element.getContext('2d');\n image_1.onload = (function () {\n ctx_1.drawImage(image_1, 0, 0);\n window.URL.revokeObjectURL(url);\n if (type === 'PDF') {\n var document_1 = new PdfDocument();\n var imageString = element.toDataURL('image/jpeg').replace('image/jpeg', 'image/octet-stream');\n document_1.pageSettings.orientation = orientation;\n imageString = imageString.slice(imageString.indexOf(',') + 1);\n document_1.pages.add().graphics.drawImage(new PdfBitmap(imageString), 0, 0, (_this.control.availableSize.width - 60), _this.control.availableSize.height);\n if (isDownload) {\n document_1.save(fileName + '.pdf');\n document_1.destroy();\n }\n }\n else {\n _this.triggerDownload(fileName, type, element.toDataURL('image/png').replace('image/png', 'image/octet-stream'), isDownload);\n }\n });\n image_1.src = url;\n }\n };\n /**\n * To trigger the download element\n * @param fileName\n * @param type\n * @param url\n */\n ExportUtils.prototype.triggerDownload = function (fileName, type, url, isDownload) {\n createElement('a', {\n attrs: {\n 'download': fileName + '.' + type.toLocaleLowerCase(),\n 'href': url\n }\n }).dispatchEvent(new MouseEvent(isDownload ? 'click' : 'move', {\n view: window,\n bubbles: false,\n cancelable: true\n }));\n };\n return ExportUtils;\n}());\nexport { ExportUtils };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/**\n * Maps Component file\n */\nimport { Component, NotifyPropertyChanges, Property, Ajax } from '@syncfusion/ej2-base';\nimport { EventHandler, Browser, isNullOrUndefined, createElement } from '@syncfusion/ej2-base';\nimport { SvgRenderer, Event, remove, L10n, Collection, Internationalization, Complex } from '@syncfusion/ej2-base';\nimport { Size, createSvg, Point, removeElement, triggerShapeEvent, showTooltip, getElement } from './utils/helper';\nimport { ZoomSettings, LegendSettings } from './model/base';\nimport { LayerSettings, TitleSettings, Border, Margin, MapsAreaSettings, Annotation } from './model/base';\nimport { load, click, loaded, resize, shapeSelected } from './model/constants';\nimport { Theme, BootstrapTheme, FabricTheme, HighContrastTheme } from './model/theme';\nimport { LayerPanel } from './layers/layer-panel';\nimport { Rect, RectOption, measureText, getElementByID, MapAjax } from '../maps/utils/helper';\nimport { findPosition, textTrim, TextOption, renderTextElement, convertGeoToPoint } from '../maps/utils/helper';\nimport { Annotations } from '../maps/user-interaction/annotation';\nimport { MarkerSettings } from './index';\nimport { changeBorderWidth } from './index';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { ExportUtils } from '../maps/utils/export';\n/**\n * Represents the Maps control.\n * ```html\n *
    \n * \n * ```\n */\nvar Maps = /** @class */ (function (_super) {\n __extends(Maps, _super);\n /**\n * Constructor for creating the widget\n */\n function Maps(options, element) {\n var _this = _super.call(this, options, element) || this;\n /**\n * Check layer whether is normal or tile\n * @private\n */\n _this.isTileMap = false;\n /** @private */\n _this.baseSize = new Size(0, 0);\n /** @private */\n _this.translatePoint = new Point(0, 0);\n /** @private */\n _this.baseTranslatePoint = new Point(0, 0);\n /** @private */\n _this.tileTranslatePoint = new Point(0, 0);\n /** @private */\n _this.baseTileTranslatePoint = new Point(0, 0);\n /** @private */\n _this.isDevice = Browser.isDevice;\n return _this;\n }\n /**\n * Gets the localized label by locale keyword.\n * @param {string} key\n * @return {string}\n */\n Maps.prototype.getLocalizedLabel = function (key) {\n return this.localeObject.getConstant(key);\n };\n /**\n * Initializing pre-required values.\n */\n Maps.prototype.preRender = function () {\n this.initPrivateVariable();\n this.trigger(load, { maps: this });\n this.themeEffect();\n this.unWireEVents();\n this.createSVG();\n this.wireEVents();\n this.setCulture();\n };\n Maps.prototype.setTextStyle = function (theme, font) {\n font.color = font.color || theme.color;\n font.size = font.size || theme.size;\n font.fontFamily = font.fontFamily || theme.fontFamily;\n font.fontStyle = font.fontStyle || theme.fontStyle;\n font.fontWeight = font.fontWeight || theme.fontWeight;\n };\n /**\n * To change font styles of map based on themes\n */\n Maps.prototype.themeEffect = function () {\n this.setBackgroundValue(this.theme);\n switch (this.theme) {\n case 'Material':\n this.setTextStyle(Theme.mapsTitleFont, this.titleSettings.textStyle);\n this.setTextStyle(Theme.mapsSubTitleFont, this.titleSettings.subtitleSettings.textStyle);\n this.setTextStyle(Theme.legendLabelFont, this.legendSettings.textStyle);\n this.setTextStyle(Theme.legendTitleFont, this.legendSettings.textStyle);\n this.setLabelFont(this.layers, Theme.dataLabelFont);\n break;\n case 'Bootstrap':\n this.setTextStyle(BootstrapTheme.mapsTitleFont, this.titleSettings.textStyle);\n this.setTextStyle(BootstrapTheme.mapsSubTitleFont, this.titleSettings.subtitleSettings.textStyle);\n this.setTextStyle(BootstrapTheme.legendLabelFont, this.legendSettings.textStyle);\n this.setTextStyle(BootstrapTheme.legendTitleFont, this.legendSettings.textStyle);\n this.setLabelFont(this.layers, BootstrapTheme.dataLabelFont);\n break;\n case 'Fabric':\n this.setTextStyle(FabricTheme.mapsTitleFont, this.titleSettings.textStyle);\n this.setTextStyle(FabricTheme.mapsSubTitleFont, this.titleSettings.subtitleSettings.textStyle);\n this.setTextStyle(FabricTheme.legendLabelFont, this.legendSettings.textStyle);\n this.setTextStyle(FabricTheme.legendTitleFont, this.legendSettings.textStyle);\n this.setLabelFont(this.layers, FabricTheme.dataLabelFont);\n break;\n case 'Highcontrast':\n this.setTextStyle(HighContrastTheme.mapsTitleFont, this.titleSettings.textStyle);\n this.setTextStyle(HighContrastTheme.mapsSubTitleFont, this.titleSettings.subtitleSettings.textStyle);\n this.setTextStyle(HighContrastTheme.legendLabelFont, this.legendSettings.textStyle);\n this.setTextStyle(HighContrastTheme.legendTitleFont, this.legendSettings.textStyle);\n this.setLabelFont(this.layers, HighContrastTheme.dataLabelFont);\n break;\n }\n };\n /**\n * Maps background and area background colors change as per theme.\n * @param theme based on theme background colors will change.\n */\n Maps.prototype.setBackgroundValue = function (theme) {\n var color = theme === 'Highcontrast' ? '#000000' : '#FFFFFF';\n this.background = this.background ? this.background : color;\n this.mapsArea.background = this.mapsArea.background ? this.mapsArea.background : color;\n color = theme !== 'Highcontrast' ? '#737373' : '#FFFFFF';\n this.zoomSettings.color = (this.zoomSettings.color) ? this.zoomSettings.color : color;\n };\n /**\n * To change datalabel font\n * @param layers\n * @param style\n */\n Maps.prototype.setLabelFont = function (layers, style) {\n for (var _i = 0, layers_1 = layers; _i < layers_1.length; _i++) {\n var layer = layers_1[_i];\n this.setTextStyle(style, layer.dataLabelSettings.textStyle);\n }\n };\n /**\n * To Initialize the control rendering.\n */\n Maps.prototype.render = function () {\n this.findBaseAndSubLayers();\n this.createSecondaryElement();\n this.addTabIndex();\n this.renderBorder();\n this.renderTitle(this.titleSettings, 'title', null, null);\n this.renderArea();\n this.processRequestJsonData();\n };\n /* tslint:disable:no-string-literal */\n Maps.prototype.processRequestJsonData = function () {\n var _this = this;\n var length = this.layersCollection.length - 1;\n this.serverProcess = { request: 0, response: 0 };\n var queryModule;\n var localAjax;\n var ajaxModule;\n var dataModule;\n this.layersCollection.forEach(function (layer, layerIndex) {\n if (layer.shapeData instanceof DataManager) {\n _this.serverProcess['request']++;\n dataModule = layer.shapeData;\n queryModule = layer.query instanceof Query ? layer.query : new Query();\n var dataManager = dataModule.executeQuery(queryModule);\n dataManager.then(function (e) {\n _this.processResponseJsonData('DataManager', e, layer, 'ShapeData');\n });\n }\n else if (layer.shapeData instanceof MapAjax) {\n _this.processAjaxRequest(layer, layer.shapeData, 'ShapeData');\n }\n if (layer.dataSource instanceof MapAjax) {\n _this.processAjaxRequest(layer, layer.dataSource, 'DataSource');\n }\n if (_this.serverProcess['request'] === _this.serverProcess['response'] && length === layerIndex) {\n _this.processResponseJsonData(null);\n }\n });\n };\n Maps.prototype.processAjaxRequest = function (layer, localAjax, type) {\n var _this = this;\n var ajaxModule;\n this.serverProcess['request']++;\n ajaxModule = new Ajax(localAjax.dataOptions, localAjax.type, localAjax.async, localAjax.contentType);\n ajaxModule.onSuccess = function (args) {\n _this.processResponseJsonData('Ajax', args, layer, type);\n };\n ajaxModule.send(localAjax.sendData);\n };\n /* tslint:disable:no-eval */\n Maps.prototype.processResponseJsonData = function (processType, data, layer, dataType) {\n this.serverProcess['response']++;\n if (processType) {\n if (dataType === 'ShapeData') {\n layer.shapeData = (processType === 'DataManager') ? !isNullOrUndefined(data['result']) ? data['result'] : data['actual'] :\n JSON.parse(data);\n }\n else {\n layer.dataSource = (processType === 'DataManager') ? !isNullOrUndefined(data['result']) ? data['result'] : data['actual'] :\n JSON.parse('[' + data + ']')[0];\n }\n }\n if (!isNullOrUndefined(processType) && this.serverProcess['request'] === this.serverProcess['response']) {\n var collection = this.layersCollection;\n this.layersCollection = [];\n for (var i = 0; i < collection.length; i++) {\n if (collection[i].isBaseLayer) {\n this.layersCollection.push(collection[i]);\n }\n }\n for (var j = 0; j < collection.length; j++) {\n if (!collection[j].isBaseLayer) {\n this.layersCollection.push(collection[j]);\n }\n }\n this.renderMap();\n }\n else if (isNullOrUndefined(processType)) {\n this.renderMap();\n }\n };\n Maps.prototype.renderMap = function () {\n if (this.legendModule && this.legendSettings.visible) {\n this.legendModule.renderLegend();\n }\n this.createTile();\n if (this.zoomSettings.enable && this.zoomModule) {\n this.zoomModule.createZoomingToolbars();\n }\n this.mapLayerPanel.measureLayerPanel();\n this.element.appendChild(this.svgObject);\n //this.setSecondaryElementPosition();\n this.arrangeTemplate();\n if (this.annotationsModule) {\n this.annotationsModule.renderAnnotationElements();\n }\n this.zoomingChange();\n this.trigger(loaded, { maps: this });\n };\n /**\n * Render the map area border\n */\n Maps.prototype.renderArea = function () {\n var rect = new RectOption(this.element.id + '_MapAreaBorder', this.mapsArea.background, this.mapsArea.border, 1, this.mapAreaRect);\n this.svgObject.appendChild(this.renderer.drawRectangle(rect));\n };\n /**\n * To add tab index for map element\n */\n Maps.prototype.addTabIndex = function () {\n this.element.setAttribute('aria-label', this.description || 'Maps Element');\n this.element.setAttribute('tabindex', this.tabIndex.toString());\n };\n // private setSecondaryElementPosition(): void {\n // if (!this.isTileMap) {\n // let element: HTMLDivElement = getElementByID(this.element.id + '_Secondary_Element') as HTMLDivElement;\n // let rect: ClientRect = this.element.getBoundingClientRect();\n // let svgRect: ClientRect = getElementByID(this.element.id + '_svg').getBoundingClientRect();\n // element.style.marginLeft = Math.max(svgRect.left - rect.left, 0) + 'px';\n // element.style.marginTop = Math.max(svgRect.top - rect.top, 0) + 'px';\n // }\n // }\n Maps.prototype.zoomingChange = function () {\n var left;\n var top;\n if (getElementByID(this.element.id + '_Layer_Collections') && this.zoomModule) {\n this.zoomModule.layerCollectionEle = getElementByID(this.element.id + '_Layer_Collections');\n }\n if (this.isTileMap && getElementByID(this.element.id + '_Tile_SVG') && getElementByID(this.element.id + '_tile_parent')) {\n var tileRect = getElementByID(this.element.id + '_tile_parent').getBoundingClientRect();\n var tileSvgRect = getElementByID(this.element.id + '_Tile_SVG').getBoundingClientRect();\n left = (tileRect.left - tileSvgRect.left);\n top = (tileRect.top - tileSvgRect.top);\n getElementByID(this.element.id + '_Tile_SVG').setAttribute('transform', 'translate(' + left + ' ' + top + ')');\n var markerTemplateElements = document.getElementsByClassName('template');\n if (!isNullOrUndefined(markerTemplateElements) && markerTemplateElements.length > 0) {\n for (var i = 0; i < markerTemplateElements.length; i++) {\n var templateGroupEle = markerTemplateElements[i];\n templateGroupEle.style.left = left + 'px';\n templateGroupEle.style.top = top + 'px';\n }\n }\n }\n if (this.zoomSettings.zoomFactor >= 1) {\n if (this.zoomModule && this.zoomModule.toolBarGroup && this.zoomSettings.enable) {\n this.zoomModule.alignToolBar();\n }\n var elements = document.getElementById(this.element.id + '_Layer_Collections');\n if (!isNullOrUndefined(elements) && elements.childElementCount > 0) {\n for (var i = 0; i < elements.childNodes.length; i++) {\n var childElement = elements.childNodes[i];\n if (childElement.tagName === 'g') {\n var layerIndex = parseFloat(childElement.id.split('_')[2]);\n for (var j = 0; j < childElement.childNodes.length; j++) {\n var childNode = childElement.childNodes[j];\n if (!(childNode.id.indexOf('_Markers_Group') > -1) &&\n (!(childNode.id.indexOf('_bubble_Group') > -1)) &&\n (!(childNode.id.indexOf('_dataLableIndex_Group') > -1))) {\n changeBorderWidth(childNode, layerIndex, this.scale, this);\n }\n }\n }\n }\n }\n if (this.zoomModule && (this.previousScale !== this.scale)) {\n this.zoomModule.applyTransform(true);\n }\n }\n };\n Maps.prototype.createSecondaryElement = function () {\n if (isNullOrUndefined(document.getElementById(this.element.id + '_Secondary_Element'))) {\n var secondaryElement = createElement('div', {\n id: this.element.id + '_Secondary_Element',\n styles: 'position: absolute;z-index:1;'\n });\n this.element.appendChild(secondaryElement);\n }\n };\n Maps.prototype.arrangeTemplate = function () {\n var secondaryEle = getElementByID(this.element.id + '_Secondary_Element');\n if (document.getElementById(this.element.id + '_Legend_Border')) {\n document.getElementById(this.element.id + '_Legend_Border').style.pointerEvents = 'none';\n }\n var templateElements = document.getElementsByClassName('template');\n if (!isNullOrUndefined(templateElements) && templateElements.length > 0 && getElementByID(this.element.id + '_Layer_Collections')) {\n for (var i = 0; i < templateElements.length; i++) {\n var templateGroupEle = templateElements[i];\n if (!isNullOrUndefined(templateGroupEle) && templateGroupEle.childElementCount > 0) {\n var layerOffset = getElementByID(this.element.id + '_Layer_Collections').getBoundingClientRect();\n var elementOffset = getElementByID(templateGroupEle.id).getBoundingClientRect();\n for (var j = 0; j < templateGroupEle.childElementCount; j++) {\n var currentTemplate = templateGroupEle.childNodes[j];\n var templateOffset = currentTemplate.getBoundingClientRect();\n currentTemplate.style.left = ((this.isTileMap ? parseFloat(currentTemplate.style.left) :\n ((layerOffset.left < elementOffset.left ? (parseFloat(currentTemplate.style.left) -\n Math.abs(elementOffset.left - layerOffset.left)) : (parseFloat(currentTemplate.style.left) +\n Math.abs(elementOffset.left - layerOffset.left))))) - (templateOffset.width / 2)) + 'px';\n currentTemplate.style.top = ((this.isTileMap ? parseFloat(currentTemplate.style.top) :\n ((layerOffset.top < elementOffset.top ? (parseFloat(currentTemplate.style.top) -\n Math.abs(elementOffset.top - layerOffset.top)) : (parseFloat(currentTemplate.style.top) +\n Math.abs(elementOffset.top - layerOffset.top))))) - (templateOffset.height / 2)) + 'px';\n }\n }\n }\n }\n };\n Maps.prototype.createTile = function () {\n var mainLayer = this.layersCollection[0];\n var padding = 0;\n if (mainLayer.isBaseLayer && (mainLayer.layerType === 'OSM' || mainLayer.layerType === 'Bing')) {\n removeElement(this.element.id + '_tile_parent');\n var elementRect = this.element.getBoundingClientRect();\n var parentRect = this.element.parentElement.getBoundingClientRect();\n var left = Math.abs(elementRect.left - parentRect.left);\n var top_1 = Math.abs(elementRect.top - parentRect.top);\n var ele = createElement('div', {\n id: this.element.id + '_tile_parent', styles: 'position: absolute; left: ' +\n (this.mapAreaRect.x + left) + 'px; top: ' + (this.mapAreaRect.y + top_1 + padding) + 'px; height: ' +\n (this.mapAreaRect.height) + 'px; width: '\n + (this.mapAreaRect.width) + 'px; overflow: hidden;'\n });\n this.element.appendChild(ele);\n }\n };\n /**\n * To initilize the private varibales of maps.\n */\n Maps.prototype.initPrivateVariable = function () {\n this.renderer = new SvgRenderer(this.element.id);\n this.mapLayerPanel = new LayerPanel(this);\n };\n Maps.prototype.findBaseAndSubLayers = function () {\n var _this = this;\n var baseIndex = this.baseLayerIndex;\n var mainLayers = [];\n var subLayers = [];\n this.layersCollection = [];\n this.layers.forEach(function (layer) {\n (layer.type === 'Layer') ? mainLayers.push(layer) : subLayers.push(layer);\n });\n for (var i = 0; i < mainLayers.length; i++) {\n var baseLayer = mainLayers[i];\n if (baseLayer.visible && baseIndex === i) {\n baseLayer.isBaseLayer = true;\n this.isTileMap = (baseLayer.layerType === 'Geometry') ? false : true;\n this.layersCollection.push(baseLayer);\n break;\n }\n else if (i === mainLayers.length - 1) {\n this.layersCollection.push(mainLayers[0]);\n break;\n }\n }\n subLayers.map(function (subLayer, subLayerIndex) {\n if (subLayer.visible) {\n _this.layersCollection.push(subLayer);\n }\n });\n };\n /**\n * @private\n * Render the map border\n */\n Maps.prototype.renderBorder = function () {\n var width = this.border.width;\n var borderElement = this.svgObject.querySelector('#' + this.element.id + '_MapBorder');\n if ((width > 0 || this.background) && isNullOrUndefined(borderElement)) {\n var borderRect = new RectOption(this.element.id + '_MapBorder', this.background, this.border, 1, new Rect(width / 2, width / 2, this.availableSize.width - width, this.availableSize.height - width));\n this.svgObject.appendChild(this.renderer.drawRectangle(borderRect));\n }\n else {\n borderElement.setAttribute('fill', this.background);\n }\n };\n /**\n * @private\n * Render the title and subtitle\n */\n Maps.prototype.renderTitle = function (title, type, bounds, groupEle) {\n var style = title.textStyle;\n var height;\n var width = Math.abs((this.margin.left + this.margin.right) - this.availableSize.width);\n if (title.text) {\n if (isNullOrUndefined(groupEle)) {\n groupEle = this.renderer.createGroup({ id: this.element.id + '_Title_Group' });\n }\n var trimmedTitle = textTrim(width, title.text, style);\n var elementSize = measureText(trimmedTitle, style);\n var rect = (isNullOrUndefined(bounds)) ? new Rect(this.margin.left, this.margin.top, this.availableSize.width, this.availableSize.height) : bounds;\n var location_1 = findPosition(rect, title.alignment, elementSize, type);\n var options = new TextOption(this.element.id + '_Map_' + type, location_1.x, location_1.y, 'start', trimmedTitle);\n var titleBounds = new Rect(location_1.x, location_1.y, elementSize.width, elementSize.height);\n var element = renderTextElement(options, style, style.color, groupEle);\n element.setAttribute('aria-label', this.description || title.text);\n element.setAttribute('tabindex', (this.tabIndex + (type === 'title' ? 1 : 2)).toString());\n if ((type === 'title' && !title.subtitleSettings.text) || (type === 'subtitle')) {\n height = Math.abs((titleBounds.y + this.margin.bottom) - this.availableSize.height);\n this.mapAreaRect = new Rect(this.margin.left, titleBounds.y + 10, width, height - 10);\n }\n if (type !== 'subtitle' && title.subtitleSettings.text) {\n this.renderTitle(title.subtitleSettings, 'subtitle', titleBounds, groupEle);\n }\n else {\n this.svgObject.appendChild(groupEle);\n }\n }\n else {\n height = Math.abs((this.margin.top + this.margin.bottom) - this.availableSize.height);\n this.mapAreaRect = new Rect(this.margin.left, this.margin.top, width, height);\n }\n };\n /**\n * To create svg element for maps\n */\n Maps.prototype.createSVG = function () {\n this.removeSvg();\n createSvg(this);\n };\n /**\n * To Remove the SVG\n */\n Maps.prototype.removeSvg = function () {\n removeElement(this.element.id + '_Secondary_Element');\n removeElement(this.element.id + '_tile_parent');\n if (document.getElementsByClassName('e-tooltip-wrap')[0]) {\n remove(document.getElementsByClassName('e-tooltip-wrap')[0]);\n }\n if (this.svgObject) {\n while (this.svgObject.childNodes.length > 0) {\n this.svgObject.removeChild(this.svgObject.firstChild);\n }\n if (!this.svgObject.hasChildNodes() && this.svgObject.parentNode) {\n remove(this.svgObject);\n }\n }\n };\n /**\n * To bind event handlers for maps.\n */\n Maps.prototype.wireEVents = function () {\n //let cancelEvent: string = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n EventHandler.add(this.element, 'click', this.mapsOnClick, this);\n // EventHandler.add(this.element, 'contextmenu', this.mapsOnRightClick, this);\n EventHandler.add(this.element, 'dblclick', this.mapsOnDoubleClick, this);\n EventHandler.add(this.element, Browser.touchStartEvent, this.mouseDownOnMap, this);\n EventHandler.add(this.element, Browser.touchMoveEvent, this.mouseMoveOnMap, this);\n EventHandler.add(this.element, Browser.touchEndEvent, this.mouseEndOnMap, this);\n // EventHandler.add(this.element, cancelEvent, this.mouseLeaveOnMap, this);\n window.addEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.mapsOnResize.bind(this));\n };\n /**\n * To unbind event handlers from maps.\n */\n Maps.prototype.unWireEVents = function () {\n //let cancelEvent: string = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n EventHandler.remove(this.element, 'click', this.mapsOnClick);\n // EventHandler.remove(this.element, 'contextmenu', this.mapsOnRightClick);\n EventHandler.remove(this.element, 'dblclick', this.mapsOnDoubleClick);\n EventHandler.remove(this.element, Browser.touchStartEvent, this.mouseDownOnMap);\n EventHandler.remove(this.element, Browser.touchMoveEvent, this.mouseMoveOnMap);\n EventHandler.remove(this.element, Browser.touchEndEvent, this.mouseEndOnMap);\n //EventHandler.remove(this.element, cancelEvent, this.mouseLeaveOnMap);\n window.removeEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.mapsOnResize);\n };\n /**\n * To handle the click event for the maps.\n */\n /* tslint:disable:no-string-literal */\n Maps.prototype.mapsOnClick = function (e) {\n var targetEle = e.target;\n var targetId = targetEle.id;\n var eventArgs = {\n cancel: false, name: click, target: targetId, x: e.clientX, y: e.clientY\n };\n this.trigger(click, eventArgs);\n if (targetEle.id.indexOf('ShapeIndex') !== -1) {\n var layerIndex = parseInt(targetEle.id.split('_LayerIndex_')[1].split('_')[0], 10);\n triggerShapeEvent(targetId, this.layers[layerIndex].selectionSettings, this, shapeSelected);\n }\n if (this.markerModule) {\n this.markerModule.markerClick(e);\n }\n if (this.bubbleModule) {\n this.bubbleModule.bubbleClick(e);\n }\n if (!eventArgs.cancel) {\n this.notify(click, targetEle);\n }\n };\n /**\n *\n */\n Maps.prototype.mouseEndOnMap = function (e) {\n var pageX;\n var pageY;\n var target;\n var touchArg;\n var rect = this.element.getBoundingClientRect();\n var element = e.target;\n if (e.type.indexOf('touch') !== -1) {\n this.isTouch = true;\n touchArg = e;\n pageX = touchArg.changedTouches[0].pageX;\n pageY = touchArg.changedTouches[0].pageY;\n target = touchArg.target;\n }\n else {\n this.isTouch = e.pointerType === 'touch';\n pageX = e.pageX;\n pageY = e.pageY;\n target = e.target;\n }\n if (this.isTouch) {\n this.titleTooltip(e, pageX, pageY, true);\n }\n this.notify(Browser.touchEndEvent, e);\n e.preventDefault();\n return false;\n };\n /**\n *\n */\n Maps.prototype.mouseDownOnMap = function (e) {\n var pageX;\n var pageY;\n var target;\n var touchArg;\n var rect = this.element.getBoundingClientRect();\n var element = e.target;\n this.notify(Browser.touchStartEvent, e);\n };\n /**\n * To handle the double click event for the maps.\n */\n Maps.prototype.mapsOnDoubleClick = function (e) {\n this.notify('dblclick', e);\n };\n /**\n *\n */\n /* tslint:disable:no-string-literal */\n Maps.prototype.mouseMoveOnMap = function (e) {\n var pageX;\n var pageY;\n var touchArg;\n var target;\n var touches = null;\n target = (e.type === 'touchmove') ? e.target :\n target = e.target;\n // if (target.id.indexOf('ShapeIndex') !== -1 && !this.highlightSettings.enable) {\n // triggerShapeEvent(target.id, this.highlightSettings, this, shapeHighlight);\n // }\n if (this.markerModule) {\n this.markerModule.markerMove(e);\n }\n if (this.bubbleModule) {\n this.bubbleModule.bubbleMove(e);\n }\n this.onMouseMove(e);\n this.notify(Browser.touchMoveEvent, e);\n };\n Maps.prototype.onMouseMove = function (e) {\n var element = e.target;\n var pageX;\n var pageY;\n var target;\n var touchArg;\n if (!this.isTouch) {\n this.titleTooltip(e, e.pageX, e.pageY);\n }\n return false;\n };\n Maps.prototype.titleTooltip = function (event, x, y, isTouch) {\n var targetId = event.target.id;\n if ((targetId === (this.element.id + '_Map_title')) && (event.target.textContent.indexOf('...') > -1)) {\n showTooltip(this.titleSettings.text, this.titleSettings.textStyle.size, x, y, this.element.offsetWidth, this.element.offsetHeight, this.element.id + '_EJ2_Title_Tooltip', getElement(this.element.id + '_Secondary_Element'), isTouch);\n }\n else {\n removeElement(this.element.id + '_EJ2_Title_Tooltip');\n }\n };\n /*\n\n /**\n * To handle the window resize event on maps.\n */\n Maps.prototype.mapsOnResize = function (e) {\n var _this = this;\n var args = {\n name: resize,\n previousSize: this.availableSize,\n currentSize: new Size(0, 0),\n maps: this\n };\n if (this.resizeTo) {\n clearTimeout(this.resizeTo);\n }\n if (this.element.classList.contains('e-maps')) {\n this.resizeTo = setTimeout(function () {\n _this.unWireEVents();\n _this.createSVG();\n _this.refreshing = true;\n _this.wireEVents();\n args.currentSize = _this.availableSize;\n _this.trigger(resize, args);\n _this.render();\n }, 500);\n }\n return false;\n };\n Maps.prototype.zoomByPosition = function (centerPosition, zoomFactor) {\n var lattitude = centerPosition.latitude;\n var longitude = centerPosition.longitude;\n var factor = this.mapLayerPanel.calculateFactor(this.layersCollection[0]);\n var position = convertGeoToPoint(lattitude, longitude, factor, this.layersCollection[0], this);\n if (this.zoomModule) {\n this.zoomModule.performZooming(position, zoomFactor, 'ZoomIn');\n }\n };\n /**\n * To add layers to maps\n */\n Maps.prototype.addLayer = function (layer) {\n this.layers.push(new LayerSettings(this.layers[0], 'layers', layer));\n this.refresh();\n };\n /**\n * To remove layers from maps\n */\n Maps.prototype.removeLayer = function (index) {\n this.layers.splice(index, 1);\n this.refresh();\n };\n /**\n * To add marker to layers\n */\n Maps.prototype.addMarker = function (layerIndex, marker) {\n var currentMarker = this.layers[layerIndex].markerSettings;\n currentMarker.push(new MarkerSettings(currentMarker[0], 'markerSettings', marker));\n this.refresh();\n };\n /**\n * Method to set culture for maps\n */\n Maps.prototype.setCulture = function () {\n this.intl = new Internationalization();\n this.setLocaleConstants();\n this.localeObject = new L10n(this.getModuleName(), this.defaultLocalConstants, this.locale);\n };\n /**\n * Method to set locale constants\n */\n Maps.prototype.setLocaleConstants = function () {\n // Need to modify after the api confirm\n this.defaultLocalConstants = {\n ZoomIn: 'Zoom In',\n Zoom: 'Zoom',\n ZoomOut: 'Zoom Out',\n Pan: 'Pan',\n Reset: 'Reset',\n };\n };\n /**\n * To destroy maps control.\n */\n Maps.prototype.destroy = function () {\n this.unWireEVents();\n _super.prototype.destroy.call(this);\n };\n /**\n * Get component name\n */\n Maps.prototype.getModuleName = function () {\n return 'maps';\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @private\n */\n Maps.prototype.getPersistData = function () {\n return '';\n };\n /**\n * Called internally if any of the property value changed.\n * @private\n */\n Maps.prototype.onPropertyChanged = function (newProp, oldProp) {\n var render = false;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'background':\n this.renderBorder();\n break;\n case 'height':\n case 'width':\n this.createSVG();\n render = true;\n break;\n }\n }\n if (render) {\n this.render();\n }\n };\n /**\n * To provide the array of modules needed for maps rendering\n * @return {ModuleDeclaration[]}\n * @private\n */\n Maps.prototype.requiredModules = function () {\n var modules = [];\n var isVisible = this.findVisibleLayers(this.layers);\n var annotationEnable = false;\n this.annotations.map(function (annotation, index) {\n annotationEnable = annotation.content != null;\n });\n if (this.isBubbleVisible()) {\n modules.push({\n member: 'Bubble',\n args: [this]\n });\n }\n if (isVisible.highlight) {\n modules.push({\n member: 'Highlight',\n args: [this]\n });\n }\n if (isVisible.selection) {\n modules.push({\n member: 'Selection',\n args: [this]\n });\n }\n if (this.legendSettings.visible) {\n modules.push({\n member: 'Legend',\n args: [this]\n });\n }\n if (this.zoomSettings.enable || this.zoomSettings.zoomFactor > this.zoomSettings.minZoom) {\n modules.push({\n member: 'Zoom',\n args: [this]\n });\n }\n if (this.isMarkersVisible()) {\n modules.push({\n member: 'Marker',\n args: [this]\n });\n }\n if (this.isDataLabelVisible()) {\n modules.push({\n member: 'DataLabel',\n args: [this]\n });\n }\n if (this.isNavigationVisible()) {\n modules.push({\n member: 'NavigationLine',\n args: [this]\n });\n }\n if (isVisible.tooltip) {\n modules.push({\n member: 'MapsTooltip',\n args: [this]\n });\n }\n if (annotationEnable) {\n modules.push({\n member: 'Annotations',\n args: [this, Annotations]\n });\n }\n return modules;\n };\n /**\n * To find marker visibility\n */\n Maps.prototype.isMarkersVisible = function () {\n var isVisible = false;\n this.layers.forEach(function (layer, layerIndex) {\n for (var i = 0; i < layer.markerSettings.length; i++) {\n if (layer.markerSettings[i].visible) {\n isVisible = true;\n break;\n }\n }\n });\n return isVisible;\n };\n /**\n * To find DataLabel visibility\n */\n Maps.prototype.isDataLabelVisible = function () {\n var isVisible = false;\n for (var i = 0; i < this.layers.length; i++) {\n if (this.layers[i].dataLabelSettings.visible) {\n isVisible = true;\n break;\n }\n }\n return isVisible;\n };\n /**\n * To find navigation line visibility\n */\n Maps.prototype.isNavigationVisible = function () {\n var isVisible = false;\n this.layers.forEach(function (layer, layerIndex) {\n for (var i = 0; i < layer.navigationLineSettings.length; i++) {\n if (layer.navigationLineSettings[i].visible) {\n isVisible = true;\n break;\n }\n }\n });\n return isVisible;\n };\n /**\n * To find marker visibility\n */\n Maps.prototype.isBubbleVisible = function () {\n var isVisible = false;\n for (var _i = 0, _a = this.layers; _i < _a.length; _i++) {\n var layer = _a[_i];\n if (this.getBubbleVisible(layer)) {\n isVisible = true;\n break;\n }\n }\n return isVisible;\n };\n /**\n * To find the bubble visibility from layer\n * @private\n */\n Maps.prototype.getBubbleVisible = function (layer) {\n var isVisible = false;\n for (var _i = 0, _a = layer.bubbleSettings; _i < _a.length; _i++) {\n var bubble = _a[_i];\n if (bubble.visible) {\n isVisible = true;\n break;\n }\n }\n return isVisible;\n };\n /**\n * Handles the print method for chart control.\n */\n Maps.prototype.print = function (id) {\n var exportChart = new ExportUtils(this);\n exportChart.print(id);\n };\n /**\n * Handles the export method for chart control.\n * @param type\n * @param fileName\n */\n Maps.prototype.export = function (type, fileName, orientation) {\n var exportMap = new ExportUtils(this);\n exportMap.export(type, fileName, orientation);\n };\n /**\n * To find visibility of layers and markers for required modules load.\n */\n Maps.prototype.findVisibleLayers = function (layers, isLayerVisible, isBubblevisible, istooltipVisible, isSelection, isHighlight) {\n if (isLayerVisible === void 0) { isLayerVisible = false; }\n if (isBubblevisible === void 0) { isBubblevisible = false; }\n if (istooltipVisible === void 0) { istooltipVisible = false; }\n if (isSelection === void 0) { isSelection = false; }\n if (isHighlight === void 0) { isHighlight = false; }\n var bubbles;\n var markers;\n var navigationLine;\n for (var _i = 0, layers_2 = layers; _i < layers_2.length; _i++) {\n var layer = layers_2[_i];\n isLayerVisible = layer.visible || isLayerVisible;\n if (layer.visible) {\n bubbles = layer.bubbleSettings;\n markers = layer.markerSettings;\n navigationLine = layer.navigationLineSettings;\n for (var _a = 0, navigationLine_1 = navigationLine; _a < navigationLine_1.length; _a++) {\n var navigation = navigationLine_1[_a];\n if (navigation.visible) {\n isSelection = navigation.highlightSettings.enable || isSelection;\n isHighlight = navigation.selectionSettings.enable || isHighlight;\n }\n }\n for (var _b = 0, markers_1 = markers; _b < markers_1.length; _b++) {\n var marker = markers_1[_b];\n if (marker.visible) {\n istooltipVisible = marker.tooltipSettings.visible || istooltipVisible;\n isSelection = marker.selectionSettings.enable || isSelection;\n isHighlight = marker.highlightSettings.enable || isHighlight;\n }\n if (istooltipVisible) {\n break;\n }\n }\n for (var _c = 0, bubbles_1 = bubbles; _c < bubbles_1.length; _c++) {\n var bubble = bubbles_1[_c];\n if (bubble.visible) {\n istooltipVisible = bubble.tooltipSettings.visible || istooltipVisible;\n isSelection = bubble.selectionSettings.enable || isSelection;\n isHighlight = bubble.highlightSettings.enable || isHighlight;\n }\n if (istooltipVisible) {\n break;\n }\n }\n istooltipVisible = layer.tooltipSettings.visible || istooltipVisible;\n isSelection = layer.selectionSettings.enable || isSelection;\n isHighlight = layer.highlightSettings.enable || isHighlight;\n }\n if (isLayerVisible && isBubblevisible && istooltipVisible) {\n break;\n }\n }\n return {\n layer: isLayerVisible, bubble: isBubblevisible, tooltip: istooltipVisible,\n selection: isSelection, highlight: isHighlight\n };\n };\n __decorate([\n Property(null)\n ], Maps.prototype, \"background\", void 0);\n __decorate([\n Property(false)\n ], Maps.prototype, \"useGroupingSeparator\", void 0);\n __decorate([\n Property(null)\n ], Maps.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], Maps.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], Maps.prototype, \"height\", void 0);\n __decorate([\n Complex({}, TitleSettings)\n ], Maps.prototype, \"titleSettings\", void 0);\n __decorate([\n Complex({}, ZoomSettings)\n ], Maps.prototype, \"zoomSettings\", void 0);\n __decorate([\n Complex({}, LegendSettings)\n ], Maps.prototype, \"legendSettings\", void 0);\n __decorate([\n Collection([], LayerSettings)\n ], Maps.prototype, \"layers\", void 0);\n __decorate([\n Collection([], Annotation)\n ], Maps.prototype, \"annotations\", void 0);\n __decorate([\n Complex({}, Margin)\n ], Maps.prototype, \"margin\", void 0);\n __decorate([\n Complex({ color: '#DDDDDD', width: 0 }, Border)\n ], Maps.prototype, \"border\", void 0);\n __decorate([\n Property('Material')\n ], Maps.prototype, \"theme\", void 0);\n __decorate([\n Property('Mercator')\n ], Maps.prototype, \"projectionType\", void 0);\n __decorate([\n Property(0)\n ], Maps.prototype, \"baseLayerIndex\", void 0);\n __decorate([\n Property(null)\n ], Maps.prototype, \"description\", void 0);\n __decorate([\n Property(1)\n ], Maps.prototype, \"tabIndex\", void 0);\n __decorate([\n Property({ latitude: null, longitude: null })\n ], Maps.prototype, \"centerPosition\", void 0);\n __decorate([\n Complex({}, MapsAreaSettings)\n ], Maps.prototype, \"mapsArea\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"beforePrint\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"loaded\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"click\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"doubleClick\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"rightClick\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"resize\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"tooltipRender\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"shapeSelected\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"itemSelection\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"itemHighlight\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"shapeHighlight\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"layerRendering\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"shapeRendering\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"markerRendering\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"markerClick\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"markerMouseMove\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"dataLabelRendering\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"bubbleRendering\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"bubbleClick\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"bubbleMouseMove\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"animationComplete\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"annotationRendering\", void 0);\n Maps = __decorate([\n NotifyPropertyChanges\n ], Maps);\n return Maps;\n}(Component));\nexport { Maps };\n","import { ColorMapping, bubbleRendering } from '../index';\nimport { bubbleClick, bubbleMouseMove } from '../index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CircleOption, MapLocation, findMidPointOfPolygon, Point, drawCircle, elementAnimate, getTranslate } from '../utils/helper';\nimport { RectOption, Rect, drawRectangle } from '../utils/helper';\n/**\n * Bubble module class\n */\nvar Bubble = /** @class */ (function () {\n function Bubble(maps) {\n /**\n * Bubble Id for current layer\n */\n this.id = '';\n this.maps = maps;\n this.bubbleCollection = [];\n }\n /**\n * To render bubble\n */\n /* tslint:disable:no-string-literal */\n Bubble.prototype.renderBubble = function (bubbleSettings, shapeData, color, range, bubbleIndex, dataIndex, layerIndex, layer, group) {\n var layerData = layer.layerData;\n var colorValuePath = bubbleSettings.colorValuePath;\n var equalValue = shapeData[colorValuePath];\n var colorValue = Number(shapeData[colorValuePath]);\n var bubbleValue = Number(shapeData[bubbleSettings.valuePath]);\n if (isNaN(bubbleValue) && isNaN(colorValue) && isNullOrUndefined(equalValue)) {\n return null;\n }\n var radius = this.getRatioOfBubble(bubbleSettings.minRadius, bubbleSettings.maxRadius, bubbleValue, range.min, range.max);\n var colorMapping = new ColorMapping(this.maps);\n var shapeColor = colorMapping.getColorByValue(bubbleSettings.colorMapping, colorValue, equalValue);\n shapeColor = shapeColor ? shapeColor : color;\n var shapePoints = [[]];\n var midIndex = 0;\n var pointsLength = 0;\n var currentLength = 0;\n for (var i = 0, len = layerData.length; i < len; i++) {\n var shape = layerData[i];\n shape = shape['property'];\n if (shapeData[layer.shapeDataPath] === shape[layer.shapePropertyPath]) {\n if (!layerData[i]['_isMultiPolygon']) {\n shapePoints.push(this.getPoints(layerData[i], []));\n currentLength = shapePoints[shapePoints.length - 1].length;\n if (pointsLength < currentLength) {\n pointsLength = currentLength;\n midIndex = shapePoints.length - 1;\n }\n }\n else {\n var layer_1 = layerData[i];\n for (var j = 0; j < layer_1.length; j++) {\n shapePoints.push(this.getPoints(layer_1[j], []));\n currentLength = shapePoints[shapePoints.length - 1].length;\n if (pointsLength < currentLength) {\n pointsLength = currentLength;\n midIndex = shapePoints.length - 1;\n }\n }\n }\n }\n }\n var center = findMidPointOfPolygon(shapePoints[midIndex]);\n if (!isNullOrUndefined(center)) {\n var centerY = this.maps.projectionType === 'Mercator' ? center['y'] : (-center['y']);\n var eventArgs = {\n cancel: false, name: bubbleRendering, border: bubbleSettings.border,\n cx: center['x'], cy: centerY, data: shapeData, fill: shapeColor, maps: this.maps,\n radius: radius\n };\n this.maps.trigger(bubbleRendering, eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n var bubbleElement = void 0;\n if (bubbleSettings.bubbleType === 'Circle') {\n var circle = new CircleOption(this.id, eventArgs.fill, eventArgs.border, bubbleSettings.opacity, 0, 0, eventArgs.radius, null);\n bubbleElement = drawCircle(this.maps, circle, group);\n }\n else {\n var y = this.maps.projectionType === 'Mercator' ? (eventArgs.cy - radius) : (eventArgs.cy + radius);\n var rectangle = new RectOption(this.id, eventArgs.fill, eventArgs.border, bubbleSettings.opacity, new Rect(0, 0, radius * 2, radius * 2), 2, 2);\n eventArgs.cx -= radius;\n eventArgs.cy = y;\n bubbleElement = drawRectangle(this.maps, rectangle, group);\n }\n this.bubbleCollection.push({\n LayerIndex: layerIndex,\n BubbleIndex: bubbleIndex,\n DataIndex: dataIndex,\n element: bubbleElement,\n center: { x: eventArgs.cx, y: eventArgs.cy }\n });\n var animate = layer.animationDuration !== 0 || isNullOrUndefined(this.maps.zoomModule);\n var translate = getTranslate(this.maps, layer, animate);\n var scale = translate['scale'];\n var transPoint = translate['location'];\n var position = new MapLocation((this.maps.isTileMap ? (eventArgs.cx) : ((eventArgs.cx + transPoint.x) * scale)), (this.maps.isTileMap ? (eventArgs.cy) : ((eventArgs.cy + transPoint.y) * scale)));\n bubbleElement.setAttribute('transform', 'translate( ' + (position.x) + ' ' + (position.y) + ' )');\n var bubble = (bubbleSettings.dataSource.length - 1) === dataIndex ? 'bubble' : null;\n if (bubbleSettings.bubbleType === 'Square') {\n position.x += radius;\n position.y += radius * (this.maps.projectionType === 'Mercator' ? 1 : -1);\n }\n else {\n radius = 0;\n }\n if (bubbleSettings.animationDuration > 0) {\n elementAnimate(bubbleElement, bubbleSettings.animationDelay, bubbleSettings.animationDuration, position, this.maps, bubble, radius);\n }\n }\n };\n Bubble.prototype.getPoints = function (shape, points) {\n shape.map(function (current, index) {\n points.push(new Point(current['point']['x'], current['point']['y']));\n });\n return points;\n };\n Bubble.prototype.getRatioOfBubble = function (min, max, value, minValue, maxValue) {\n var percent = (100 / (maxValue - minValue)) * (value - minValue);\n var bubbleRadius = (((max - min) / 100) * percent) + min;\n if (maxValue === minValue) {\n bubbleRadius = (((max - min) / 100)) + min;\n }\n return bubbleRadius;\n };\n /**\n * To check and trigger bubble click event\n */\n Bubble.prototype.bubbleClick = function (e) {\n var target = e.target.id;\n if (target.indexOf('_LayerIndex_') === -1) {\n return;\n }\n var data = this.getbubble(target);\n if (isNullOrUndefined(data)) {\n return;\n }\n var eventArgs = {\n cancel: false, name: bubbleClick, data: data, maps: this.maps,\n target: target, x: e.clientX, y: e.clientY\n };\n this.maps.trigger(bubbleClick, eventArgs);\n };\n /**\n * To get bubble from target id\n */\n Bubble.prototype.getbubble = function (target) {\n var id = target.split('_LayerIndex_');\n var index = parseInt(id[1].split('_')[0], 10);\n var layer = this.maps.layers[index];\n var data;\n if (target.indexOf('_BubbleIndex_') > -1) {\n var bubbleIndex = parseInt(id[1].split('_BubbleIndex_')[1], 10);\n if (!isNaN(bubbleIndex)) {\n data = layer.dataSource[bubbleIndex];\n return data;\n }\n }\n return null;\n };\n /**\n * To check and trigger bubble move event\n */\n Bubble.prototype.bubbleMove = function (e) {\n var target = e.target.id;\n if (target.indexOf('_LayerIndex_') === -1) {\n return;\n }\n var data = this.getbubble(target);\n if (isNullOrUndefined(data)) {\n return;\n }\n var eventArgs = {\n cancel: false, name: bubbleMouseMove, data: data, maps: this.maps,\n target: target, x: e.clientX, y: e.clientY\n };\n this.maps.trigger(bubbleMouseMove, eventArgs);\n };\n /**\n * Get module name.\n */\n Bubble.prototype.getModuleName = function () {\n return 'Bubble';\n };\n /**\n * To destroy the bubble.\n * @return {void}\n * @private\n */\n Bubble.prototype.destroy = function (maps) {\n /**\n * Destroy method performed here\n */\n };\n return Bubble;\n}());\nexport { Bubble };\n","import { markerRendering, convertTileLatLongToPoint, MapLocation } from '../index';\nimport { markerClick, markerMouseMove } from '../index';\nimport { isNullOrUndefined, merge, createElement } from '@syncfusion/ej2-base';\nimport { CircleOption, PathOption, Point, getTranslate, convertGeoToPoint } from '../utils/helper';\nimport { getTemplateFunction, getElementByID, convertElement, calculateShapes, Size, RectOption, Rect, elementAnimate } from '../utils/helper';\n/**\n * Marker class\n */\nvar Marker = /** @class */ (function () {\n function Marker(maps) {\n this.maps = maps;\n this.trackElements = [];\n }\n /* tslint:disable:no-string-literal */\n Marker.prototype.markerRender = function (layerElement, layerIndex, factor) {\n var _this = this;\n var templateFn;\n var currentLayer = this.maps.layersCollection[layerIndex];\n this.markerSVGObject = this.maps.renderer.createGroup({ id: this.maps.element.id + '_Markers_Group' });\n var markerTemplateEle = createElement('div', {\n id: this.maps.element.id + '_LayerIndex_' + layerIndex + '_Markers_Template_Group',\n className: 'template',\n styles: 'overflow: hidden; position: absolute;pointer-events: none;' +\n 'top:' + (this.maps.isTileMap ? 0 : this.maps.mapAreaRect.y) + 'px;' +\n 'left:' + (this.maps.isTileMap ? 0 : this.maps.mapAreaRect.x) + 'px;' +\n 'height:' + this.maps.mapAreaRect.height + 'px;' +\n 'width:' + this.maps.mapAreaRect.width + 'px;'\n });\n currentLayer.markerSettings.map(function (markerSettings, markerIndex) {\n var markerData = markerSettings.dataSource;\n markerData.forEach(function (data, dataIndex) {\n var eventArgs = {\n cancel: false, name: markerRendering, fill: markerSettings.fill, height: markerSettings.height,\n width: markerSettings.width, imageUrl: markerSettings.imageUrl, shape: markerSettings.shape,\n template: markerSettings.template, data: data, maps: _this.maps, marker: markerSettings,\n border: markerSettings.border\n };\n _this.maps.trigger(markerRendering, eventArgs);\n var lng = data['longitude'];\n var lat = data['latitude'];\n var offset = markerSettings.offset;\n if (!eventArgs.cancel && markerSettings.visible && !isNullOrUndefined(lng) && !isNullOrUndefined(lat)) {\n var markerID = _this.maps.element.id + '_LayerIndex_' + layerIndex + '_MarkerIndex_'\n + markerIndex + '_DataIndex_' + dataIndex;\n var location_1 = (_this.maps.isTileMap) ? convertTileLatLongToPoint(new MapLocation(lng, lat), factor, _this.maps.tileTranslatePoint, true) : convertGeoToPoint(lat, lng, factor, currentLayer, _this.maps);\n var animate = currentLayer.animationDuration !== 0 || isNullOrUndefined(_this.maps.zoomModule);\n var translate = (_this.maps.isTileMap) ? new Object() : getTranslate(_this.maps, currentLayer, animate);\n var scale = translate['scale'];\n var transPoint = translate['location'];\n if (eventArgs.template) {\n templateFn = getTemplateFunction(eventArgs.template);\n if (templateFn && templateFn(_this.maps).length) {\n var templateElement = templateFn(_this.maps);\n var markerElement = convertElement(templateElement, markerID, data, markerIndex, _this.maps);\n markerElement.style.left = ((_this.maps.isTileMap ? location_1.x :\n ((Math.abs(_this.maps.baseMapRectBounds['min']['x'] - location_1.x)) * scale)) + offset.x) + 'px';\n markerElement.style.top = ((_this.maps.isTileMap ? location_1.y :\n ((Math.abs(_this.maps.baseMapRectBounds['min']['y'] - location_1.y)) * scale)) + offset.y) + 'px';\n markerTemplateEle.appendChild(markerElement);\n }\n }\n else {\n var shapeCustom = {\n size: new Size(eventArgs.width, eventArgs.height),\n fill: eventArgs.fill, borderColor: eventArgs.border.color,\n borderWidth: eventArgs.border.width, opacity: markerSettings.opacity,\n dashArray: markerSettings.dashArray\n };\n var ele = _this.drawSymbol(eventArgs.shape, eventArgs.imageUrl, { x: 0, y: 0 }, markerID, shapeCustom);\n var x = (_this.maps.isTileMap ? location_1.x : (location_1.x + transPoint.x) * scale) + offset.x;\n var y = (_this.maps.isTileMap ? location_1.y : (location_1.y + transPoint.y) * scale) + offset.y;\n ele.setAttribute('transform', 'translate( ' + x + ' ' + y + ' )');\n _this.markerSVGObject.appendChild(ele);\n var element = (markerData.length - 1) === dataIndex ? 'marker' : null;\n var markerPoint = new Point(x, y);\n if (markerSettings.animationDuration > 0) {\n elementAnimate(ele, markerSettings.animationDelay, markerSettings.animationDuration, markerPoint, _this.maps, element);\n }\n }\n }\n });\n });\n if (this.markerSVGObject.childElementCount > 0) {\n layerElement.appendChild(this.markerSVGObject);\n }\n if (markerTemplateEle.childElementCount > 0 && getElementByID(this.maps.element.id + '_Secondary_Element')) {\n getElementByID(this.maps.element.id + '_Secondary_Element').appendChild(markerTemplateEle);\n }\n };\n Marker.prototype.drawSymbol = function (shape, imageUrl, location, markerID, shapeCustom) {\n var markerEle;\n var x;\n var y;\n var size = shapeCustom['size'];\n var borderColor = shapeCustom['borderColor'];\n var borderWidth = parseFloat(shapeCustom['borderWidth']);\n var fill = shapeCustom['fill'];\n var dashArray = shapeCustom['dashArray'];\n var border = { color: borderColor, width: borderWidth };\n var opacity = shapeCustom['opacity'];\n var circleOptions;\n var pathOptions;\n var rectOptions;\n pathOptions = new PathOption(markerID, fill, borderWidth, borderColor, opacity, dashArray, '');\n if (shape === 'Circle') {\n var radius = (size.width + size.height) / 4;\n circleOptions = new CircleOption(markerID, fill, border, opacity, location.x, location.y, radius, dashArray);\n markerEle = this.maps.renderer.drawCircle(circleOptions);\n }\n else if (shape === 'Rectangle') {\n x = location.x - (size.width / 2);\n y = location.y - (size.height / 2);\n rectOptions = new RectOption(markerID, fill, border, opacity, new Rect(x, y, size.width, size.height), null, null, '', dashArray);\n markerEle = this.maps.renderer.drawRectangle(rectOptions);\n }\n else if (shape === 'Image') {\n x = location.x - (size.width / 2);\n y = location.y - (size.height / 2);\n merge(pathOptions, { 'href': imageUrl, 'height': size.height, 'width': size.width, x: x, y: y });\n markerEle = this.maps.renderer.drawImage(pathOptions);\n }\n else {\n markerEle = calculateShapes(this.maps, shape, pathOptions, size, location, this.markerSVGObject);\n }\n return markerEle;\n };\n /**\n * To check and trigger marker click event\n */\n Marker.prototype.markerClick = function (e) {\n var target = e.target.id;\n if (target.indexOf('_LayerIndex_') === -1) {\n return;\n }\n var options = this.getMarker(target);\n if (isNullOrUndefined(options)) {\n return;\n }\n var eventArgs = {\n cancel: false, name: markerClick, data: options.data, maps: this.maps, marker: options.marker,\n target: target, x: e.clientX, y: e.clientY\n };\n this.maps.trigger(markerClick, eventArgs);\n };\n /**\n * To get marker from target id\n */\n Marker.prototype.getMarker = function (target) {\n var id = target.split('_LayerIndex_');\n var index = parseInt(id[1].split('_')[0], 10);\n var layer = this.maps.layers[index];\n var data;\n var marker;\n if (target.indexOf('_MarkerIndex_') > -1) {\n var markerIndex = parseInt(id[1].split('_MarkerIndex_')[1].split('_')[0], 10);\n var dataIndex = parseInt(id[1].split('_DataIndex_')[1].split('_')[0], 10);\n marker = layer.markerSettings[markerIndex];\n if (!isNaN(markerIndex)) {\n data = marker.dataSource[dataIndex];\n return { marker: marker, data: data };\n }\n }\n return null;\n };\n /**\n * To check and trigger marker move event\n */\n Marker.prototype.markerMove = function (e) {\n var targetId = e.target.id;\n if (targetId.indexOf('_LayerIndex_') === -1) {\n return;\n }\n var options = this.getMarker(targetId);\n if (isNullOrUndefined(options)) {\n return;\n }\n var eventArgs = {\n cancel: false, name: markerMouseMove, data: options.data, maps: this.maps,\n target: targetId, x: e.clientX, y: e.clientY\n };\n this.maps.trigger(markerMouseMove, eventArgs);\n };\n /**\n * Get module name.\n */\n Marker.prototype.getModuleName = function () {\n return 'Marker';\n };\n /**\n * To destroy the layers.\n * @return {void}\n * @private\n */\n Marker.prototype.destroy = function (maps) {\n /**\n * Destroy method performed here\n */\n };\n return Marker;\n}());\nexport { Marker };\n","import { findMidPointOfPolygon, Rect, filter, getTemplateFunction, getTranslate, RectOption, convertElementFromLabel, Point, TextOption, renderTextElement, textTrim, measureText, Internalize } from '../utils/helper';\nimport { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\n/**\n * DataLabel class\n */\nvar DataLabel = /** @class */ (function () {\n function DataLabel(maps) {\n this.intersect = [];\n this.value = { rightWidth: 0, leftWidth: 0, heightTop: 0, heightBottom: 0 };\n this.maps = maps;\n this.dataLabelCollections = [];\n }\n //tslint:disable:max-func-body-length\n DataLabel.prototype.getDataLabel = function (dataSource, labelPath, shapeName, shapeDataPath) {\n var text;\n for (var i = 0; i < dataSource.length; i++) {\n var data = dataSource[i];\n if ((data[shapeDataPath]) === shapeName) {\n text = data;\n break;\n }\n }\n return text;\n };\n DataLabel.prototype.renderLabel = function (layer, layerIndex, shape, layerData, group, labelTemplateElement, index) {\n var dataLabel = layer.dataLabelSettings;\n var style = layer.dataLabelSettings.textStyle;\n var markerEle;\n var templateFn;\n var options;\n var dataLabelSettings = layer.dataLabelSettings;\n var labelpath = layer.dataLabelSettings.labelPath;\n var shapePoint = [[]];\n var midIndex = 0;\n var pointsLength = 0;\n var shapeData = shape;\n var element;\n var data;\n var text = '';\n var datasrcObj;\n var currentLength = 0;\n var location;\n var labelId = this.maps.element.id + '_LayerIndex_' + layerIndex + '_shapeIndex_' + index + '_LabelIndex_' + index;\n var textLocation = new Point(0, 0);\n /* tslint:disable:no-string-literal */\n for (var i = 0, len = layerData.length; i < len; i++) {\n var shapes = layerData[i];\n shape = shapes['property'];\n if (!isNullOrUndefined(shapes['property']) && shapeData['properties']['name'] === shape['name']) {\n if (!layerData[i]['_isMultiPolygon']) {\n shapePoint.push(this.getPoint(layerData[i], []));\n currentLength = shapePoint[shapePoint.length - 1].length;\n if (pointsLength < currentLength) {\n pointsLength = currentLength;\n midIndex = shapePoint.length - 1;\n }\n }\n else {\n var layer_1 = layerData[i];\n for (var j = 0; j < layer_1.length; j++) {\n shapePoint.push(this.getPoint(layer_1[j], []));\n currentLength = shapePoint[shapePoint.length - 1].length;\n if (pointsLength < currentLength) {\n pointsLength = currentLength;\n midIndex = shapePoint.length - 1;\n }\n }\n }\n }\n }\n if (!isNullOrUndefined(layer.dataSource) && layer.dataSource.length > 0) {\n var localData = extend([], layer.dataSource, null, true);\n datasrcObj = this.getDataLabel(localData, labelpath, shapeData['properties'][layer.shapePropertyPath], layer.shapeDataPath);\n datasrcObj[labelpath] = datasrcObj[labelpath];\n text = datasrcObj[labelpath];\n }\n else {\n text = shapeData['properties'][labelpath];\n }\n location = findMidPointOfPolygon(shapePoint[midIndex]);\n if (!isNullOrUndefined(text) && !isNullOrUndefined(location)) {\n location['y'] = (this.maps.projectionType === 'Mercator') ? location['y'] : (-location['y']);\n data = location;\n if (!isNullOrUndefined(this.maps.format) && !isNaN(parseFloat(text))) {\n text = Internalize(this.maps, parseFloat(text));\n if (!isNullOrUndefined(datasrcObj)) {\n datasrcObj[labelpath] = text;\n }\n }\n var eventargs = {\n name: 'labelRendering', maps: this.maps, cancel: false, border: dataLabel.border, datalabel: dataLabel,\n fill: dataLabel.fill, template: dataLabel.template, text: text\n };\n this.maps.trigger('labelRendering', eventargs);\n var border = { color: 'yellow' };\n var position = [];\n var width = location['rightMax']['x'] - location['leftMax']['x'];\n var textSize = measureText(text, style);\n var trimmedLable = textTrim(width, text, style);\n var elementSize = measureText(trimmedLable, style);\n var startY = location['y'] - textSize['height'] / 4;\n var endY = location['y'] + textSize['height'] / 4;\n var start = location['y'] - textSize['height'] / 4;\n var end = location['y'] + textSize['height'] / 4;\n position = filter(shapePoint[midIndex], startY, endY);\n if (position.length > 5 && (!isNullOrUndefined(shapeData['geometry']) ? shapeData['geometry']['type'] !== 'MultiPolygon' :\n shapeData['type'] !== 'MultiPolygon')) {\n var location1 = findMidPointOfPolygon(position);\n location['x'] = location1['x'];\n width = location1['rightMax']['x'] - location1['leftMax']['x'];\n }\n var xpositionEnds = location['x'] + textSize['width'] / 2;\n var xpositionStart = location['x'] - textSize['width'] / 2;\n trimmedLable = textTrim(width, text, style);\n elementSize = measureText(trimmedLable, style);\n this.value[index] = { rightWidth: xpositionEnds, leftWidth: xpositionStart, heightTop: start, heightBottom: end };\n var animate = layer.animationDuration !== 0 || isNullOrUndefined(this.maps.zoomModule);\n var translate = getTranslate(this.maps, layer, animate);\n var scale = translate['scale'];\n var transPoint = translate['location'];\n var labelElement = void 0;\n if (eventargs.template !== '') {\n templateFn = getTemplateFunction(eventargs.template);\n var templateElement = templateFn(this.maps);\n labelElement = convertElementFromLabel(templateElement, labelId, !isNullOrUndefined(datasrcObj) ? datasrcObj : shapeData['properties'], index, this.maps);\n labelElement.style.left = ((Math.abs(this.maps.baseMapRectBounds['min']['x'] - location['x'])) * scale) + 'px';\n labelElement.style.top = ((Math.abs(this.maps.baseMapRectBounds['min']['y'] - location['y'])) * scale) + 'px';\n labelTemplateElement.appendChild(labelElement);\n var labelWidth = labelElement.offsetWidth;\n var labelHeight = labelElement.offsetHeight;\n // if (labelWidth > width || labelWidth === 0 || labelHeight > location['height']) {\n // labelElement.style.display = 'None';\n // }\n }\n else {\n if (dataLabelSettings.smartLabelMode === 'Trim') {\n options = new TextOption(labelId, textLocation.x, textLocation.y, 'middle', trimmedLable, '', '');\n }\n if (dataLabelSettings.smartLabelMode === 'None') {\n options = new TextOption(labelId, (textLocation.x), textLocation.y, 'middle', text, '', '');\n }\n if (dataLabelSettings.smartLabelMode === 'Hide') {\n text = (width >= textSize['width']) ? text : '';\n options = new TextOption(labelId, (textLocation.x), (textLocation.y), 'middle', text, '', '');\n }\n text = options['text'];\n if (dataLabelSettings.intersectionAction === 'Hide') {\n for (var i = 0; i < this.intersect.length; i++) {\n if (!isNullOrUndefined(this.intersect[i])) {\n if (this.value[index]['leftWidth'] > this.intersect[i]['rightWidth']\n || this.value[index]['rightWidth'] < this.intersect[i]['leftWidth']\n || this.value[index]['heightTop'] > this.intersect[i]['heightBottom']\n || this.value[index]['heightBottom'] < this.intersect[i]['heightTop']) {\n text = text;\n }\n else {\n text = '';\n break;\n }\n }\n }\n this.intersect.push(this.value[index]);\n options = new TextOption(labelId, textLocation.x, textLocation.y, 'middle', text, '', '');\n }\n var difference = void 0;\n if (dataLabelSettings.intersectionAction === 'Trim') {\n for (var j = 0; j < this.intersect.length; j++) {\n if (!isNullOrUndefined(this.intersect[j])) {\n if (this.intersect[j]['rightWidth'] < this.value[index]['leftWidth']\n || this.intersect[j]['leftWidth'] > this.value[index]['rightWidth']\n || this.intersect[j]['heightBottom'] < this.value[index]['heightTop']\n || this.intersect[j]['heightTop'] > this.value[index]['heightBottom']) {\n trimmedLable = text;\n difference = 0;\n }\n else {\n if (this.value[index]['leftWidth'] > this.intersect[j]['leftWidth']) {\n width = this.intersect[j]['rightWidth'] - this.value[index]['leftWidth'];\n difference = width - (this.value[index]['rightWidth'] - this.value[index]['leftWidth']);\n trimmedLable = textTrim(difference, text, style);\n break;\n }\n if (this.value[index]['leftWidth'] < this.intersect[j]['leftWidth']) {\n width = this.value[index]['rightWidth'] - this.intersect[j]['leftWidth'];\n difference = Math.abs(width - (this.value[index]['rightWidth'] - this.value[index]['leftWidth']));\n trimmedLable = textTrim(difference, text, style);\n break;\n }\n }\n }\n }\n this.intersect.push(this.value[index]);\n options = new TextOption(labelId, textLocation.x, (textLocation.y), 'middle', trimmedLable, '', '');\n }\n if (dataLabelSettings.intersectionAction === 'None') {\n options = new TextOption(labelId, (textLocation.x), (textLocation.y), 'middle', text, '', '');\n }\n if (trimmedLable.length > 1) {\n var border_1 = eventargs.border;\n if (border_1['width'] > 1) {\n var fill = eventargs.fill;\n var opacity = dataLabelSettings.opacity;\n var rx = dataLabelSettings.rx;\n var ry = dataLabelSettings.ry;\n var x = location['x'] - textSize['width'] / 2;\n var y = location['y'] - textSize['height'] / 2;\n var rectOptions = new RectOption(this.maps.element.id + '_LayerIndex_' + layerIndex + '_shapeIndex_' + index + '_rectIndex_' + index, fill, border_1, opacity, new Rect(x, y, textSize['width'], textSize['height']), rx, ry);\n var rect = this.maps.renderer.drawRectangle(rectOptions);\n group.appendChild(rect);\n }\n }\n element = renderTextElement(options, style, style.color, group);\n element.setAttribute('transform', 'translate( ' + ((location['x'] + transPoint.x) * scale) + ' '\n + (((location['y'] + transPoint.y) * scale) + (elementSize.height / 4)) + ' )');\n group.appendChild(element);\n }\n this.dataLabelCollections.push({\n location: { x: location['x'], y: (location['y'] + elementSize.height / 4) },\n element: isNullOrUndefined(labelElement) ? element : labelElement,\n layerIndex: layerIndex,\n shapeIndex: index,\n labelIndex: index\n });\n if (labelTemplateElement.childElementCount > 0 && !this.maps.element.contains(labelTemplateElement)) {\n document.getElementById(this.maps.element.id + '_Secondary_Element').appendChild(labelTemplateElement);\n }\n }\n };\n DataLabel.prototype.getPoint = function (shapes, points) {\n shapes.map(function (current, index) {\n points.push(new Point(current['point']['x'], current['point']['y']));\n });\n return points;\n };\n /**\n * Get module name.\n */\n DataLabel.prototype.getModuleName = function () {\n return 'DataLabel';\n };\n /**\n * To destroy the layers.\n * @return {void}\n * @private\n */\n DataLabel.prototype.destroy = function (maps) {\n /**\n * Destroy method performed here\n */\n };\n return DataLabel;\n}());\nexport { DataLabel };\n","import { convertTileLatLongToPoint } from '../index';\nimport { convertGeoToPoint, Point, PathOption } from '../utils/helper';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * navigation-selected-line\n */\nvar NavigationLine = /** @class */ (function () {\n function NavigationLine(maps) {\n this.maps = maps;\n }\n /* tslint:disable:no-string-literal */\n //tslint:disable:max-func-body-length\n NavigationLine.prototype.renderNavigation = function (layer, factor, layerIndex) {\n var navigationEle;\n var navigation;\n navigation = layer.navigationLineSettings;\n var longitude;\n var point = [];\n var latitude;\n var visible;\n var angle;\n var width;\n var color;\n var dashArray;\n var pathOption;\n var direction;\n var markerWidth;\n var arcId;\n var radius;\n var showArrow;\n var arrowColor;\n var arrowSize;\n var arrowSettings;\n var arrowPosition;\n var startArrow;\n var endArrow;\n var offSet;\n var offSetValue;\n var navigationGroup;\n var d;\n var group = (this.maps.renderer.createGroup({\n id: this.maps.element.id + '_layerIndex_' + layerIndex + '_line_Group'\n }));\n for (var i = 0; i < navigation.length; i++) {\n latitude = navigation[i]['properties']['latitude'];\n longitude = navigation[i]['properties']['longitude'];\n visible = navigation[i]['properties']['visible'];\n angle = navigation[i]['properties']['angle'];\n width = navigation[i]['width'] || 1;\n color = navigation[i]['color'];\n dashArray = navigation[i]['properties']['dashArray'];\n arrowSettings = navigation[i]['properties']['arrowSettings'];\n showArrow = (isNullOrUndefined(arrowSettings)) ? false : arrowSettings['properties']['showArrow'];\n if (longitude['length'] === latitude['length'] && visible) {\n for (var i_1 = 0; i_1 < longitude['length']; i_1++) {\n var location_1 = (this.maps.isTileMap) ? convertTileLatLongToPoint(new Point(longitude[i_1], latitude[i_1]), factor, this.maps.tileTranslatePoint, true) : convertGeoToPoint(latitude[i_1], longitude[i_1], factor, layer, this.maps);\n point.push(location_1);\n }\n }\n navigationGroup = (this.maps.renderer.createGroup({\n id: this.maps.element.id + '_layerIndex_' + layerIndex + '_NavigationGroup' + i + ''\n }));\n for (var j = 0; j < point['length'] - 1; j++) {\n angle = (-1 > angle) ? -1 : angle;\n angle = (1 < angle) ? 1 : angle;\n var arcId_1 = this.maps.element.id + '_LayerIndex_' + layerIndex + '_NavigationIndex_' + i + '_Line' + j + '';\n var radius_1 = this.convertRadius(point[j], point[j + 1]);\n if (angle <= 1 && angle > 0) {\n direction = 0;\n if (point[j]['x'] > point[j + 1]['x']) {\n direction = 1;\n }\n }\n if (angle >= -1 && angle < 0) {\n direction = 1;\n if (point[j]['x'] > point[j + 1]['x']) {\n direction = 0;\n }\n }\n if (point[j]['x'] !== point[j + 1]['x']) {\n if (showArrow) {\n arrowColor = arrowSettings['properties']['color'];\n arrowSize = arrowSettings['properties']['size'];\n offSetValue = (arrowSettings['properties']['offSet'] === undefined) ? 0 : arrowSettings['properties']['offSet'];\n var divide = (Math.round(arrowSize / 2));\n arrowPosition = arrowSettings['properties']['position'];\n startArrow = (arrowPosition === 'Start') ? 'url(#triangle' + i + ')' : null;\n endArrow = (arrowPosition === 'End') ? 'url(#triangle' + i + ')' : null;\n if (offSet !== 0 && angle === 0) {\n offSet = (arrowPosition === 'Start') ? offSetValue : -(offSetValue);\n }\n offSet = (isNullOrUndefined(offSet)) ? 0 : offSet;\n var triId = this.maps.element.id + '_triangle';\n var defElement = this.maps.renderer.createDefs();\n var xmlns = 'http://www.w3.org/2000/svg';\n var markerEle = document.createElementNS(xmlns, 'marker');\n markerEle.setAttribute('id', 'triangle' + i);\n markerEle.setAttribute('markerWidth', (arrowSize.toString()));\n markerEle.setAttribute('markerHeight', (arrowSize.toString()));\n markerEle.setAttribute('refX', (divide - offSet).toString());\n markerEle.setAttribute('refY', divide.toString());\n markerEle.setAttribute('orient', 'auto');\n var d2 = 'M 0,0 L 0,' + arrowSize + ' L ' + divide + ', ' + divide + ' Z';\n pathOption = new PathOption(triId, arrowColor, width, color, 1, dashArray, d2);\n navigationEle = this.maps.renderer.drawPath(pathOption);\n markerEle.appendChild(navigationEle);\n defElement.appendChild(markerEle);\n navigationGroup.appendChild(defElement);\n }\n d = (angle === 0) ? 'M ' + point[j]['x'] + ',' + point[j]['y'] + 'L ' + point[j + 1]['x']\n + ',' + point[j + 1]['y'] + '' :\n 'M ' + point[j]['x'] + ',' + point[j]['y'] + ' A ' + (angle * radius_1) + ' ' +\n (angle * radius_1) + ' ' + 0 + ',' + 0 + ',' + direction + ' , ' + point[j + 1]['x'] + ',' + point[j + 1]['y'] + ' ';\n pathOption = new PathOption(arcId_1, 'none', 2, color, 1, dashArray, d);\n navigationEle = this.maps.renderer.drawPath(pathOption);\n if (!isNullOrUndefined(arrowPosition)) {\n (arrowPosition === 'Start') ? navigationEle.setAttribute('marker-start', startArrow)\n : navigationEle.setAttribute('marker-end', endArrow);\n }\n navigationGroup.appendChild(navigationEle);\n group.appendChild(navigationGroup);\n }\n }\n point = [];\n }\n return group;\n };\n NavigationLine.prototype.convertRadius = function (point1, point2) {\n var value1 = point2['x'] - point1['x'];\n var value2 = point2['y'] - point1['y'];\n var value = Math.sqrt((Math.pow(value1, 2) + Math.pow(value2, 2)));\n return value;\n };\n /**\n * Get module name.\n */\n NavigationLine.prototype.getModuleName = function () {\n return 'NavigationLine';\n };\n /**\n * To destroy the layers.\n * @return {void}\n * @private\n */\n NavigationLine.prototype.destroy = function (maps) {\n /**\n * Destroy method performed here\n */\n };\n return NavigationLine;\n}());\nexport { NavigationLine };\n","import { legendRendering } from '../index';\nimport { Rect, measureText, PathOption, textTrim, querySelector, getTemplateFunction } from '../utils/helper';\nimport { RectOption, Size, TextOption, Point, renderTextElement, drawSymbol } from '../utils/helper';\nimport { isNullOrUndefined, Browser, EventHandler, remove } from '@syncfusion/ej2-base';\n/**\n * Legend module class\n */\nvar Legend = /** @class */ (function () {\n function Legend(maps) {\n this.legendBorderRect = new Rect(0, 0, 0, 0);\n this.totalPages = [];\n this.page = 0;\n this.currentPage = 0;\n this.interactiveLocation = new Point(0, 0);\n this.legendItemRect = new Rect(0, 0, 0, 0);\n this.heightIncrement = 0;\n this.widthIncrement = 0;\n this.textMaxWidth = 0;\n this.areaRect = new Rect(0, 0, 0, 0);\n this.maps = maps;\n this.addEventListener();\n }\n Legend.prototype.renderLegend = function () {\n this.calculateLegendBounds();\n this.drawLegend();\n };\n /* tslint:disable-next-line:max-func-body-length */\n Legend.prototype.calculateLegendBounds = function () {\n var _this = this;\n var map = this.maps;\n var legend = map.legendSettings;\n this.legendCollection = [];\n var spacing = 10;\n var leftPadding = 10;\n var topPadding = map.mapAreaRect.y;\n this.legendRenderingCollections = [];\n map.layersCollection.forEach(function (layer, layerIndex) {\n if (!isNullOrUndefined(layer.shapeData)) {\n var layerData = layer.shapeData['features'];\n var dataPath = layer.shapeDataPath;\n var propertyPath = layer.shapePropertyPath;\n var dataSource = layer.dataSource;\n var colorValuePath = void 0;\n var colorMapping = void 0;\n if (legend.type === 'Layers' && layer.visible) {\n colorValuePath = layer.shapeSettings.colorValuePath;\n colorMapping = layer.shapeSettings.colorMapping;\n _this.getLegends(layerIndex, layerData, colorMapping, dataSource, dataPath, colorValuePath, propertyPath);\n }\n else if (legend.type === 'Bubbles') {\n for (var _i = 0, _a = layer.bubbleSettings; _i < _a.length; _i++) {\n var bubble = _a[_i];\n if (bubble.visible) {\n colorValuePath = bubble.colorValuePath;\n colorMapping = bubble.colorMapping;\n dataSource = bubble.dataSource;\n _this.getLegends(layerIndex, layerData, colorMapping, dataSource, dataPath, colorValuePath, propertyPath);\n }\n }\n }\n else {\n _this.getMarkersLegendCollections(layerIndex, layer.markerSettings);\n }\n }\n });\n var defaultSize = 25;\n var legendTitle = map.legendSettings.title.text;\n var titleTextStyle = map.legendSettings.titleStyle;\n if (this.legendCollection.length > 0) {\n var legendMode = legend.mode;\n var shapeX = 0;\n var shapeY = 0;\n var textX = 0;\n var textY = 0;\n var shapePadding = legend.shapePadding;\n var textPadding = 10;\n var shapeHeight = legend.shapeHeight;\n var shapeWidth = legend.shapeWidth;\n var shapeLocation = [];\n var textLocation = [];\n var legendRectCollection = [];\n var location_1;\n var position = legend.position;\n var labelAction = legend.labelDisplayMode;\n var arrangement = (legend.orientation === 'None') ? ((position === 'Top' || position === 'Bottom')\n ? 'Horizontal' : 'Vertical') : legend.orientation;\n var legendWidth = (legend.width.length > 1) ? (legend.width.indexOf('%') > -1) ? (map.availableSize.width / 100)\n * parseInt(legend.width, 10) : parseInt(legend.width, 10) : null;\n var legendHeight = (legend.height.length > 1) ? (legend.height.indexOf('%') > -1) ? (map.availableSize.height / 100) *\n parseInt(legend.height, 10) : parseInt(legend.height, 10) : null;\n var legendItemStartX_1;\n var legendItemStartY_1;\n var startX = 0;\n var startY = 0;\n var legendtitleSize = measureText(legendTitle, titleTextStyle);\n if (legendMode === 'Interactive') {\n var itemTextStyle = legend.textStyle;\n var rectWidth = void 0;\n var rectHeight = void 0;\n var legendLength = this.legendCollection.length;\n rectWidth = (arrangement === 'Horizontal') ? (isNullOrUndefined(legendWidth)) ? (map.mapAreaRect.width / legendLength) :\n (legendWidth / legendLength) : (isNullOrUndefined(legendWidth)) ? defaultSize : legendWidth;\n rectHeight = (arrangement === 'Horizontal') ? (isNullOrUndefined(legendHeight)) ? defaultSize : legendHeight :\n (isNullOrUndefined(legendHeight)) ? (map.mapAreaRect.height / legendLength) : (legendHeight / legendLength);\n startX = 0;\n startY = legendtitleSize.height + spacing;\n var position_1 = legend.labelPosition;\n var textX_1 = 0;\n var textY_1 = 0;\n var textPadding_1 = 10;\n var itemStartX = 0;\n var itemStartY = 0;\n var maxTextHeight = 0;\n var maxTextWidth = 0;\n for (var i = 0; i < this.legendCollection.length; i++) {\n startX = (arrangement === 'Horizontal') ? (startX + rectWidth) : startX;\n startY = (arrangement === 'Horizontal') ? startY : (startY + rectHeight);\n var legendText = this.legendCollection[i]['text'];\n var itemTextSize = new Size(0, 0);\n if (labelAction === 'None') {\n itemTextSize = measureText(legendText, itemTextStyle);\n }\n else if (labelAction === 'Trim') {\n legendText = textTrim((arrangement === 'Horizontal' ? rectWidth : rectHeight), legendText, itemTextStyle);\n itemTextSize = measureText(legendText, itemTextStyle);\n }\n else {\n legendText = '';\n }\n maxTextHeight = Math.max(maxTextHeight, itemTextSize.height);\n maxTextWidth = Math.max(maxTextWidth, itemTextSize.width);\n if (itemTextSize.width > 0 && itemTextSize.height > 0) {\n if (arrangement === 'Horizontal') {\n textX_1 = startX + (rectWidth / 2);\n textY_1 = (position_1 === 'After') ? (startY + rectHeight + (itemTextSize.height / 2)) + textPadding_1 :\n (startY - textPadding_1);\n }\n else {\n textX_1 = (position_1 === 'After') ? startX - (itemTextSize.width / 2) - textPadding_1\n : (startX + rectWidth + itemTextSize.width / 2) + textPadding_1;\n textY_1 = startY + (rectHeight / 2) + (itemTextSize.height / 4);\n }\n }\n if (i === 0) {\n itemStartX = (arrangement === 'Horizontal') ? startX : (position_1 === 'After') ?\n textX_1 - (itemTextSize.width / 2) : startX;\n itemStartY = (arrangement === 'Horizontal') ? (position_1 === 'After') ? startY :\n textY_1 - (itemTextSize.height / 2) : startY;\n }\n else if (i === this.legendCollection.length - 1) {\n legendWidth = (arrangement === 'Horizontal') ? Math.abs((startX + rectWidth) - itemStartX) :\n (rectWidth + maxTextWidth + textPadding_1);\n legendHeight = (arrangement === 'Horizontal') ? (rectHeight + (maxTextHeight / 2) + textPadding_1) :\n Math.abs((startY + rectHeight) - itemStartY);\n }\n this.legendRenderingCollections.push({\n fill: this.legendCollection[i]['fill'], x: startX, y: startY,\n width: rectWidth, height: rectHeight,\n text: legendText, textX: textX_1, textY: textY_1,\n textWidth: itemTextSize.width, textHeight: itemTextSize.height\n });\n }\n this.legendItemRect = { x: itemStartX, y: itemStartY, width: legendWidth, height: legendHeight };\n }\n else {\n legendWidth = (isNullOrUndefined(legendWidth)) ? map.mapAreaRect.width : legendWidth;\n legendHeight = (isNullOrUndefined(legendHeight)) ? map.mapAreaRect.height : legendHeight;\n var j = 0;\n for (var i = 0; i < this.legendCollection.length; i++) {\n var legendItem = this.legendCollection[i];\n if (isNullOrUndefined(this.totalPages[this.page])) {\n this.totalPages[this.page] = { Page: (this.page + 1), Collection: [] };\n }\n var legendTextSize = measureText(legendItem['text'], legend.textStyle);\n this.textMaxWidth = Math.max(this.textMaxWidth, legendTextSize.width);\n if (i === 0) {\n startX = shapeX = (leftPadding + (shapeWidth / 2));\n startY = shapeY = topPadding + legendtitleSize.height + (shapeHeight > legendTextSize.height ? shapeHeight / 2\n : (legendTextSize.height / 4));\n }\n else {\n var maxSize = (legendTextSize.height > shapeHeight) ? legendTextSize.height : shapeHeight;\n if (arrangement === 'Horizontal') {\n var prvePositionX = (textLocation[j - 1].x + textLocation[j - 1].width) + textPadding + shapeWidth;\n if ((prvePositionX + shapePadding + legendTextSize.width) > legendWidth) {\n var nextPositionY = (textLocation[j - 1].y > (shapeLocation[j - 1].y + (shapeHeight / 2)) ?\n textLocation[j - 1].y : (shapeLocation[j - 1].y + (shapeHeight / 2))) + topPadding;\n if ((nextPositionY + maxSize) > legendHeight) {\n this.getPageChanged();\n j = 0;\n shapeLocation = [];\n textLocation = [];\n legendRectCollection = [];\n shapeX = startX;\n shapeY = startY;\n }\n else {\n shapeX = (shapeLocation[0].x);\n shapeY = (nextPositionY + (maxSize / 2));\n }\n }\n else {\n shapeX = (prvePositionX - (shapeWidth / 2));\n shapeY = (shapeLocation[j - 1]).y;\n }\n }\n else {\n var prevPositionY = textLocation[j - 1].y > shapeLocation[j - 1].y + (shapeHeight / 2) ?\n textLocation[j - 1].y : shapeLocation[j - 1].y + (shapeHeight / 2);\n if ((prevPositionY + topPadding + maxSize) > legendHeight) {\n var nextPositionX = (textLocation[j - 1].x + this.textMaxWidth + textPadding);\n if ((nextPositionX + shapePadding + legendTextSize.width) > legendWidth) {\n shapeX = startX;\n shapeY = startY;\n legendRectCollection = [];\n textLocation = [];\n shapeLocation = [];\n this.getPageChanged();\n j = 0;\n }\n else {\n shapeX = nextPositionX + (shapeWidth / 2);\n shapeY = (shapeLocation[0].y);\n }\n }\n else {\n shapeX = shapeLocation[j - 1].x;\n shapeY = prevPositionY + topPadding + (shapeHeight / 2);\n }\n }\n }\n textX = shapeX + (shapeWidth / 2) + shapePadding;\n textY = shapeY + (legendTextSize.height / 4);\n shapeLocation.push({ x: shapeX, y: shapeY });\n textLocation.push({ x: textX, y: textY, width: legendTextSize.width, height: (legendTextSize.height / 2) });\n this.totalPages[this.page]['Collection'].push({\n DisplayText: legendItem['text'],\n ImageSrc: legendItem['imageSrc'],\n Shape: { x: shapeX, y: shapeY },\n Text: { x: textX, y: textY },\n Fill: legendItem['fill'],\n Rect: {\n x: shapeLocation[j].x - (shapeWidth / 2),\n y: (shapeLocation[j].y - (shapeHeight / 2)) < (textY - legendTextSize.height) ?\n (shapeLocation[j].y - (shapeHeight / 2)) : (textY - legendTextSize.height),\n width: Math.abs((shapeLocation[j].x - (shapeWidth / 2)) - (textX + legendTextSize.width)),\n height: ((shapeHeight > legendTextSize.height) ? shapeHeight : legendTextSize.height)\n }\n });\n j++;\n }\n var collection = this.totalPages[0]['Collection'];\n collection.forEach(function (legendObj, index) {\n var legendRect = new Rect(legendObj['Rect']['x'], legendObj['Rect']['y'], legendObj['Rect']['width'], legendObj['Rect']['height']);\n if (index === 0) {\n legendItemStartX_1 = legendRect.x;\n legendItemStartY_1 = legendRect.y;\n }\n _this.widthIncrement = Math.max(_this.widthIncrement, Math.abs(legendItemStartX_1 - (legendRect.x + legendRect.width)));\n _this.heightIncrement = Math.max(_this.heightIncrement, Math.abs(legendItemStartY_1 - (legendRect.y + legendRect.height)));\n });\n legendWidth = ((this.widthIncrement < legendWidth) ? this.widthIncrement : legendWidth);\n legendHeight = ((this.heightIncrement < legendHeight) ? this.heightIncrement : legendHeight);\n this.legendItemRect = {\n x: collection[0]['Rect']['x'], y: collection[0]['Rect']['y'],\n width: legendWidth, height: legendHeight\n };\n }\n }\n };\n /**\n *\n */\n Legend.prototype.getLegends = function (layerIndex, layerData, colorMapping, dataSource, dataPath, colorValuePath, propertyPath) {\n this.getRangeLegendCollection(layerIndex, layerData, colorMapping, dataSource, dataPath, colorValuePath, propertyPath);\n this.getEqualLegendCollection(layerIndex, layerData, colorMapping, dataSource, dataPath, colorValuePath, propertyPath);\n this.getDataLegendCollection(layerIndex, layerData, colorMapping, dataSource, dataPath, colorValuePath, propertyPath);\n };\n Legend.prototype.getPageChanged = function () {\n this.page++;\n if (isNullOrUndefined(this.totalPages[this.page])) {\n this.totalPages[this.page] = { Page: (this.page + 1), Collection: [] };\n }\n };\n Legend.prototype.drawLegend = function () {\n var map = this.maps;\n var legend = map.legendSettings;\n var render = map.renderer;\n var textOptions;\n var textFont = legend.textStyle;\n this.legendGroup = render.createGroup({ id: map.element.id + '_Legend_Group' });\n var eventArgs = {\n name: legendRendering, cancel: false, fill: '', shape: legend.shape,\n shapeBorder: legend.shapeBorder\n };\n if (legend.mode === 'Interactive') {\n for (var i = 0; i < this.legendRenderingCollections.length; i++) {\n var itemId = map.element.id + '_Legend_Index_' + i;\n var textId = map.element.id + '_Legend_Index_' + i + '_Text';\n var item = this.legendRenderingCollections[i];\n var bounds = new Rect(item['x'], item['y'], item['width'], item['height']);\n var textLocation = new Point(item['textX'], item['textY']);\n eventArgs.fill = item['fill'];\n map.trigger(legendRendering, eventArgs);\n var rectOptions = new RectOption(itemId, eventArgs.fill, eventArgs.shapeBorder, 1, bounds);\n textOptions = new TextOption(textId, textLocation.x, textLocation.y, 'middle', item['text'], '', '');\n renderTextElement(textOptions, textFont, textFont.color, this.legendGroup);\n this.legendGroup.appendChild(render.drawRectangle(rectOptions));\n }\n this.renderLegendBorder();\n }\n else {\n this.drawLegendItem(this.currentPage);\n }\n };\n Legend.prototype.drawLegendItem = function (page) {\n var map = this.maps;\n var legend = map.legendSettings;\n var spacing = 10;\n var shapeSize = new Size(legend.shapeWidth, legend.shapeHeight);\n var textOptions;\n var renderOptions;\n var render = map.renderer;\n var shapeBorder = legend.shapeBorder;\n var eventArgs = {\n name: legendRendering, cancel: false, fill: '', shape: legend.shape\n };\n if (page >= 0 && page < this.totalPages.length) {\n if (querySelector(this.legendGroup.id, this.maps.element.id)) {\n remove(querySelector(this.legendGroup.id, this.maps.element.id));\n }\n var strokeColor = (legend.shape === 'HorizontalLine' || legend.shape === 'VerticalLine'\n || legend.shape === 'Cross') ? isNullOrUndefined(legend.fill) ? '#000000' : legend.fill : shapeBorder.color;\n var strokeWidth = (legend.shape === 'HorizontalLine' || legend.shape === 'VerticalLine'\n || legend.shape === 'Cross') ? (shapeBorder.width === 0) ?\n 1 : shapeBorder.width : shapeBorder.width;\n eventArgs.shapeBorder = { width: strokeWidth, color: strokeColor };\n for (var i = 0; i < this.totalPages[page]['Collection'].length; i++) {\n var collection = this.totalPages[page]['Collection'][i];\n var legendElement = render.createGroup({ id: map.element.id + '_Legend_Index_' + i });\n var legendText = collection['DisplayText'];\n eventArgs.fill = collection['Fill'];\n eventArgs.shape = ((legend.type === 'Markers') ? ((isNullOrUndefined(collection['ImageSrc'])) ?\n legend.shape : 'Image') : legend.shape);\n map.trigger(legendRendering, eventArgs);\n var shapeId = map.element.id + '_Legend_Shape_Index_' + i;\n var textId = map.element.id + '_Legend_Text_Index_' + i;\n var shapeLocation = collection['Shape'];\n var textLocation = collection['Text'];\n var imageUrl = ((isNullOrUndefined(collection['ImageSrc'])) ? legend.shape : collection['ImageSrc']);\n var renderOptions_1 = new PathOption(shapeId, eventArgs.fill, eventArgs.shapeBorder.width, eventArgs.shapeBorder.color, 1, '');\n legendElement.appendChild(drawSymbol(shapeLocation, eventArgs.shape, shapeSize, collection['ImageSrc'], renderOptions_1));\n textOptions = new TextOption(textId, textLocation.x, textLocation.y, 'start', legendText, '', '');\n renderTextElement(textOptions, legend.textStyle, legend.textStyle.color, legendElement);\n this.legendGroup.appendChild(legendElement);\n }\n var pagingGroup = void 0;\n var width = spacing;\n var height = (spacing / 2);\n if (this.page !== 0) {\n var pagingText = (page + 1) + '/' + this.totalPages.length;\n var pagingFont = legend.textStyle;\n var pagingTextSize = measureText(pagingText, pagingFont);\n var leftPageX = (this.legendItemRect.x + this.legendItemRect.width) - pagingTextSize.width -\n (width * 2) - spacing;\n var rightPageX = (this.legendItemRect.x + this.legendItemRect.width);\n var locY = (this.legendItemRect.y + this.legendItemRect.height) + (height / 2) + spacing;\n var pageTextX = rightPageX - width - (pagingTextSize.width / 2) - (spacing / 2);\n pagingGroup = render.createGroup({ id: map.element.id + '_Legend_Paging_Group' });\n var leftPageElement = render.createGroup({ id: map.element.id + '_Legend_Left_Paging_Group' });\n var rightPageElement = render.createGroup({ id: map.element.id + '_Legend_Right_Paging_Group' });\n var rightPath = ' M ' + rightPageX + ' ' + locY + ' L ' + (rightPageX - width) + ' ' + (locY - height) +\n ' L ' + (rightPageX - width) + ' ' + (locY + height) + ' z ';\n var leftPath = ' M ' + leftPageX + ' ' + locY + ' L ' + (leftPageX + width) + ' ' + (locY - height) +\n ' L ' + (leftPageX + width) + ' ' + (locY + height) + ' z ';\n var leftPageOptions = new PathOption(map.element.id + '_Left_Page', '#a6a6a6', 0, '#a6a6a6', 1, '', leftPath);\n leftPageElement.appendChild(render.drawPath(leftPageOptions));\n var leftRectPageOptions = new RectOption(map.element.id + '_Left_Page_Rect', 'transparent', {}, 1, new Rect(leftPageX - (width / 2), (locY - (height * 2)), width * 2, spacing * 2), null, null, '', '');\n leftPageElement.appendChild(render.drawRectangle(leftRectPageOptions));\n this.wireEvents(leftPageElement);\n var rightPageOptions = new PathOption(map.element.id + '_Right_Page', '#a6a6a6', 0, '#a6a6a6', 1, '', rightPath);\n rightPageElement.appendChild(render.drawPath(rightPageOptions));\n var rightRectPageOptions = new RectOption(map.element.id + '_Right_Page_Rect', 'transparent', {}, 1, new Rect((rightPageX - width), (locY - height), width, spacing), null, null, '', '');\n rightPageElement.appendChild(render.drawRectangle(rightRectPageOptions));\n this.wireEvents(rightPageElement);\n pagingGroup.appendChild(leftPageElement);\n pagingGroup.appendChild(rightPageElement);\n var pageTextOptions = {\n 'id': map.element.id + '_Paging_Text',\n 'x': pageTextX,\n 'y': locY + (pagingTextSize.height / 4),\n 'fill': '#a6a6a6',\n 'font-size': '14px',\n 'font-style': pagingFont.fontStyle,\n 'font-family': pagingFont.fontFamily,\n 'font-weight': pagingFont.fontWeight,\n 'text-anchor': 'middle',\n 'transform': '',\n 'opacity': 1,\n 'dominant-baseline': ''\n };\n pagingGroup.appendChild(render.createText(pageTextOptions, pagingText));\n this.legendGroup.appendChild(pagingGroup);\n }\n this.renderLegendBorder();\n }\n };\n Legend.prototype.renderLegendBorder = function () {\n var map = this.maps;\n var legend = map.legendSettings;\n var legendTitle = legend.title.text;\n var textStyle = legend.titleStyle;\n var textOptions;\n var spacing = 10;\n var trimTitle = textTrim((this.legendItemRect.width + (spacing * 2)), legendTitle, textStyle);\n var textSize = measureText(trimTitle, textStyle);\n this.legendBorderRect = new Rect((this.legendItemRect.x - spacing), (this.legendItemRect.y - spacing - textSize.height), (this.legendItemRect.width) + (spacing * 2), (this.legendItemRect.height) + (spacing * 2) + textSize.height +\n (legend.mode === 'Interactive' ? 0 : (this.page !== 0) ? spacing : 0));\n if (legendTitle) {\n textOptions = new TextOption(map.element.id + '_LegendTitle', (this.legendItemRect.x) + (this.legendItemRect.width / 2), this.legendItemRect.y - (textSize.height / 2), 'middle', trimTitle, '');\n renderTextElement(textOptions, textStyle, textStyle.color, this.legendGroup);\n }\n var renderOptions = new RectOption(map.element.id + '_Legend_Border', legend.background, legend.border, 1, this.legendBorderRect, null, null, '', '');\n this.legendGroup.appendChild(map.renderer.drawRectangle(renderOptions));\n this.translate = (legend.position !== 'Float') ?\n this.getLegendAlignment(map, this.legendBorderRect.width, this.legendBorderRect.height, legend) : legend.location;\n this.legendGroup.setAttribute('transform', 'translate( ' + (this.translate.x + (-(this.legendBorderRect.x))) + ' ' +\n (this.translate.y + (-(this.legendBorderRect.y))) + ' )');\n map.svgObject.appendChild(this.legendGroup);\n };\n Legend.prototype.changeNextPage = function (e) {\n this.currentPage = (e.target.id.indexOf('_Left_Page_') > -1) ? (this.currentPage - 1) :\n (this.currentPage + 1);\n this.legendGroup = this.maps.renderer.createGroup({ id: this.maps.element.id + '_Legend_Group' });\n this.drawLegendItem(this.currentPage);\n if (querySelector(this.maps.element.id + '_Legend_Border', this.maps.element.id)) {\n querySelector(this.maps.element.id + '_Legend_Border', this.maps.element.id).style.pointerEvents = 'none';\n }\n };\n Legend.prototype.getLegendAlignment = function (map, width, height, legend) {\n var x;\n var y;\n var spacing = 10;\n var totalWidth = map.availableSize.width;\n var totalHeight = map.availableSize.height;\n switch (legend.position) {\n case 'Top':\n case 'Bottom':\n map.mapAreaRect.height = (map.mapAreaRect.height - height);\n x = (totalWidth / 2) - (width / 2);\n y = (legend.position === 'Top') ? map.mapAreaRect.y : (map.mapAreaRect.y + map.mapAreaRect.height);\n map.mapAreaRect.y = (legend.position === 'Top') ? map.mapAreaRect.y + height + spacing : map.mapAreaRect.y;\n break;\n case 'Left':\n case 'Right':\n map.mapAreaRect.width = (map.mapAreaRect.width - width);\n x = (legend.position === 'Left') ? map.mapAreaRect.x : map.mapAreaRect.x + map.mapAreaRect.width;\n y = (totalHeight / 2) - (height / 2);\n map.mapAreaRect.x = (legend.position === 'Left') ? map.mapAreaRect.x + width : map.mapAreaRect.x;\n break;\n }\n switch (legend.alignment) {\n case 'Near':\n if (legend.position === 'Top' || legend.position === 'Bottom') {\n x = map.mapAreaRect.x;\n }\n else {\n y = map.mapAreaRect.y;\n }\n break;\n case 'Far':\n if (legend.position === 'Top' || legend.position === 'Bottom') {\n x = totalWidth - width;\n }\n else {\n y = totalHeight - height;\n }\n break;\n }\n return new Point(x, y);\n };\n Legend.prototype.getMarkersLegendCollections = function (layerIndex, markers) {\n var _this = this;\n markers.forEach(function (marker, markerIndex) {\n var dataSource = marker.dataSource;\n var field = marker.legendText;\n var templateFn;\n dataSource.forEach(function (data, dataIndex) {\n var imageSrc = null;\n if (marker.visible && (!isNullOrUndefined(data['latitude'])) && (!isNullOrUndefined(data['longitude']))) {\n if (marker.template) {\n templateFn = getTemplateFunction(marker.template);\n var templateElement = templateFn(_this.maps);\n var markerEle = isNullOrUndefined(templateElement.childElementCount) ? templateElement[0] :\n templateElement;\n imageSrc = markerEle.querySelector('img').src;\n }\n var text = isNullOrUndefined(data[field]) ? '' : data[field];\n _this.legendCollection.push({\n layerIndex: layerIndex, markerIndex: markerIndex, dataIndex: dataIndex,\n fill: marker.fill, text: text, imageSrc: imageSrc\n });\n }\n });\n });\n };\n Legend.prototype.getRangeLegendCollection = function (layerIndex, layerData, colorMapping, dataSource, dataPath, colorValuePath, propertyPath) {\n var _this = this;\n var legendText;\n var fill = this.maps.legendSettings.fill;\n var _loop_1 = function (colorMap) {\n if (!isNullOrUndefined(colorMap.from) && !isNullOrUndefined(colorMap.to)) {\n legendText = !isNullOrUndefined(colorMap.label) ? colorMap.label : colorMap.from + ' - ' + colorMap.to;\n var rangeData_1 = [];\n var colorMapProcess_1 = false;\n dataSource.forEach(function (data, dataIndex) {\n var colorValue = parseFloat(data[colorValuePath]);\n if (colorValue >= colorMap.from && colorValue <= colorMap.to) {\n colorMapProcess_1 = true;\n rangeData_1.push(_this.getLegendData(layerIndex, dataIndex, data, dataPath, layerData, propertyPath, colorValue));\n }\n });\n if (!colorMapProcess_1) {\n rangeData_1.push({\n layerIndex: layerIndex, shapeIndex: null, dataIndex: null,\n name: null, value: null\n });\n }\n var legendFill = (isNullOrUndefined(fill)) ? colorMap.color : fill;\n this_1.getOverallLegendItemsCollection(legendText, legendFill, rangeData_1);\n }\n };\n var this_1 = this;\n for (var _i = 0, colorMapping_1 = colorMapping; _i < colorMapping_1.length; _i++) {\n var colorMap = colorMapping_1[_i];\n _loop_1(colorMap);\n }\n };\n Legend.prototype.getOverallLegendItemsCollection = function (legendText, legendFill, legendData) {\n var newColllection = [];\n if (legendData.length > 0) {\n for (var i = 0; i < legendData.length; i++) {\n var collection = legendData[i];\n if (collection.length > 0) {\n for (var j = 0; j < collection.length; j++) {\n newColllection.push(collection[j]);\n }\n }\n else {\n newColllection.push(legendData[i]);\n }\n newColllection['_isVisible'] = true;\n }\n this.legendCollection.push({ text: legendText, fill: legendFill, data: newColllection });\n }\n };\n Legend.prototype.getEqualLegendCollection = function (layerIndex, layerData, colorMapping, dataSource, dataPath, colorValuePath, propertyPath) {\n var _this = this;\n var fill = this.maps.legendSettings.fill;\n var legendText;\n var _loop_2 = function (colorMap) {\n if (!isNullOrUndefined(colorMap.value)) {\n legendText = !isNullOrUndefined(colorMap.label) ? colorMap.label : colorMap.value;\n var equalData_1 = [];\n var eqaulColorProcess_1 = false;\n dataSource.forEach(function (data, dataIndex) {\n var equalValue = data[colorValuePath];\n if (equalValue === colorMap.value) {\n eqaulColorProcess_1 = true;\n equalData_1.push(_this.getLegendData(layerIndex, dataIndex, data, dataPath, layerData, propertyPath, equalValue));\n }\n });\n if (!eqaulColorProcess_1) {\n equalData_1.push({\n layerIndex: layerIndex, shapeIndex: null, dataIndex: null,\n name: null, value: null\n });\n }\n var legendFill = (isNullOrUndefined(fill)) ? colorMap.color : fill;\n this_2.getOverallLegendItemsCollection(legendText, legendFill, equalData_1);\n }\n };\n var this_2 = this;\n for (var _i = 0, colorMapping_2 = colorMapping; _i < colorMapping_2.length; _i++) {\n var colorMap = colorMapping_2[_i];\n _loop_2(colorMap);\n }\n };\n Legend.prototype.getDataLegendCollection = function (layerIndex, layerData, colorMapping, dataSource, dataPath, colorValuePath, propertyPath) {\n var _this = this;\n var legendText;\n var fill = this.maps.legendSettings.fill;\n if (!isNullOrUndefined(colorValuePath)) {\n dataSource.forEach(function (data, dataIndex) {\n var dataValue = data[colorValuePath];\n var newData = [];\n var legendFill = (isNullOrUndefined(fill)) ? dataValue : fill;\n if (!isNullOrUndefined(dataValue) && colorMapping.length === 0) {\n legendText = data[dataPath];\n newData.push(_this.getLegendData(layerIndex, dataIndex, data, dataPath, layerData, propertyPath, dataValue));\n }\n _this.getOverallLegendItemsCollection(legendText, legendFill, newData);\n });\n }\n };\n Legend.prototype.interactiveHandler = function (e) {\n var target = e.target;\n var legend = this.maps.legendSettings;\n var id = this.maps.element.id + '_Interactive_Legend';\n var hoverId = legend.type === 'Layers' ? '_ShapeIndex_' : (legend.type === 'Markers') ? '_MarkerIndex_' :\n '_BubbleIndex_';\n if (target.id.indexOf(hoverId) > 1) {\n var layerIndex = parseFloat(target.id.split('_')[2]);\n var dataIndex = parseFloat(target.id.split('_')[6]);\n var fill = void 0;\n var stroke = void 0;\n var strokeWidth = void 0;\n if (!(isNullOrUndefined(querySelector(id, this.maps.element.id)))) {\n remove(querySelector(id, this.maps.element.id));\n }\n var layer = this.maps.layersCollection[layerIndex];\n if (legend.visible && this.legendRenderingCollections.length > 0\n && legend.mode === 'Interactive' && (legend.type === 'Layers' ? layer.visible :\n legend.type === 'Markers' ? layer.markerSettings[parseFloat(target.id.split('_')[4])].visible :\n (this.maps.getBubbleVisible(this.maps.layersCollection[layerIndex])))) {\n var svgRect = this.maps.svgObject.getBoundingClientRect();\n for (var i = 0; i < this.legendCollection.length; i++) {\n var currentData = this.legendCollection[i];\n var legendElement = querySelector(this.maps.element.id + '_Legend_Index_' + i, this.maps.element.id);\n var legendRect = legendElement.getBoundingClientRect();\n var rect = new Rect(Math.abs(legendRect.left - svgRect.left), Math.abs(legendRect.top - svgRect.top), legendRect.width, legendRect.height);\n fill = legendElement.getAttribute('fill');\n stroke = legend.shapeBorder.color;\n strokeWidth = legend.shapeBorder.width;\n if (!isNullOrUndefined(currentData['data'])) {\n var data = currentData['data'];\n for (var j = 0; j < data.length; j++) {\n if (dataIndex === data[j]['dataIndex'] && layerIndex === data[j]['layerIndex']) {\n this.renderInteractivePointer(legend, fill, stroke, id, strokeWidth, rect);\n break;\n }\n }\n }\n }\n }\n }\n else {\n if (!(isNullOrUndefined(querySelector(id, this.maps.element.id)))) {\n remove(querySelector(id, this.maps.element.id));\n }\n }\n };\n Legend.prototype.renderInteractivePointer = function (legend, fill, stroke, id, strokeWidth, rect) {\n var path;\n var pathOptions;\n var locX;\n var locY;\n var height = 10;\n var width = 10;\n var direction = (legend.orientation === 'None') ? (legend.position === 'Top' || legend.position === 'Bottom')\n ? 'Horizontal' : 'Vertical' : legend.orientation;\n if (direction === 'Horizontal') {\n if (!legend.invertedPointer) {\n locX = rect.x + (rect.width / 2);\n locY = rect.y;\n path = ' M ' + locX + ' ' + locY + ' L ' + (locX - width) + ' ' + (locY - height) +\n ' L ' + (locX + width) + ' ' + (locY - height) + ' Z ';\n }\n else {\n locX = rect.x + (rect.width / 2);\n locY = rect.y + (rect.height);\n path = ' M ' + locX + ' ' + locY + ' L ' + (locX - width) + ' ' + (locY + height) +\n ' L ' + (locX + width) + ' ' + (locY + height) + ' Z ';\n }\n }\n else {\n if (!legend.invertedPointer) {\n locX = rect.x + (rect.width);\n locY = rect.y + (rect.height / 2);\n path = ' M ' + locX + ' ' + locY + ' L ' + (locX + width) + ' ' + (locY - height) +\n ' L ' + (locX + width) + ' ' + (locY + height) + ' z ';\n }\n else {\n locX = rect.x;\n locY = rect.y + (rect.height / 2);\n path = ' M ' + locX + ' ' + locY + ' L ' + (locX - width) + ' ' + (locY - height) +\n ' L ' + (locX - width) + ' ' + (locY + height) + ' z ';\n }\n }\n pathOptions = new PathOption(id, fill, strokeWidth, stroke, 1, '', path);\n this.maps.svgObject.appendChild(this.maps.renderer.drawPath(pathOptions));\n };\n Legend.prototype.wireEvents = function (element) {\n EventHandler.add(element, Browser.touchStartEvent, this.changeNextPage, this);\n };\n Legend.prototype.addEventListener = function () {\n if (this.maps.isDestroyed) {\n return;\n }\n this.maps.on(Browser.touchMoveEvent, this.interactiveHandler, this);\n this.maps.on(Browser.touchEndEvent, this.interactiveHandler, this);\n // this.maps.on(click, this.legendClick, this);\n };\n // private legendClick(targetEle: Element): void {\n // if (targetEle.parentElement.id.indexOf(this.maps.element.id + '_Legend_Index_') > -1) {\n // let mapElement: Element;\n // let data: object;\n // let legendIndex: number = parseFloat(targetEle.parentElement.id.substr((this.maps.element.id + '_Legend_Index_').length));\n // let selectedItem: object[] = this.legendCollection[legendIndex]['data'];\n // let childElement: Element;\n // let isVisible: boolean = selectedItem['_isVisible'];\n // if (this.maps.legendSettings.toggleVisibility) {\n // for (let i: number = 0; i < selectedItem.length; i++) {\n // data = this.legendCollection[legendIndex]['data'][i];\n // mapElement = querySelector(\n // this.maps.element.id + '_LayerIndex_' + data['layerIndex'] +\n // '_ShapeIndex_' + data['shapeIndex'] + '_dataIndex_' + data['dataIndex'],\n // this.maps.element.id);\n // if (isVisible) {\n // mapElement.setAttribute('opacity', '0');\n // } else {\n // mapElement.setAttribute('opacity', '1');\n // }\n // }\n // selectedItem['_isVisible'] = isVisible ? false : true;\n // } else if (this.maps.legendSettings.legendSelection && this.maps.selectionSettings.enable) {\n // this.selectShapes(targetEle, legendIndex);\n // }\n // }\n // }\n // private selectShapes(targetEle: Element, legendIndex: number): void {\n // let mapElement: Element;\n // let selectedElements: NodeListOf;\n // let selectedLength: number;\n // let childElement: HTMLElement = targetEle.parentElement.childNodes[0] as HTMLElement;\n // let legendSelected: boolean = targetEle.parentElement.id.indexOf('_Legend_Index_') &&\n // childElement.getAttribute('class') ? true : false;\n // if (!this.maps.selectionSettings.enableMultiSelect) {\n // selectedElements = querySelectorAll('selectionMapStyle', document.body);\n // selectedLength = selectedElements.length;\n // for (let i: number = 0; i < selectedLength; i++) {\n // removeClass(selectedElements[selectedElements.length - 1]);\n // }\n // if (!legendSelected) {\n // this.select(legendIndex, targetEle);\n // }\n // } else {\n // if (legendSelected) {\n // for (let data of this.legendCollection[legendIndex]['data']) {\n // mapElement = querySelector(\n // this.maps.element.id + '_LayerIndex_' + data['layerIndex'] +\n // '_ShapeIndex_' + data['shapeIndex'] + '_dataIndex_' + data['dataIndex'],\n // this.maps.element.id);\n // removeClass(mapElement);\n // }\n // removeClass(childElement);\n // } else {\n // this.select(legendIndex, targetEle);\n // }\n // }\n // }\n // private select(legendIndex: number, targetEle: Element): void {\n // let mapElement: Element;\n // let childElement: HTMLElement = targetEle.parentElement.childNodes[0] as HTMLElement;\n // for (let i: number = 0; i < this.legendCollection.length; i++) {\n // if (i === legendIndex && !childElement.getAttribute('class')) {\n // for (let data of this.legendCollection[i]['data']) {\n // mapElement = querySelector(\n // this.maps.element.id + '_LayerIndex_' + data['layerIndex'] +\n // '_ShapeIndex_' + data['shapeIndex'] + '_dataIndex_' + data['dataIndex'],\n // this.maps.element.id);\n // let eventArgs: IShapeSelectedEventArgs = {\n // cancel: false,\n // name: shapeSelected,\n // fill: this.maps.selectionSettings.fill,\n // opacity: this.maps.selectionSettings.opacity,\n // border: this.maps.selectionSettings.border\n // };\n // if (!document.getElementById('selectionMap')) {\n // document.body.appendChild(createStyle('selectionMap', 'selectionMapStyle', eventArgs));\n // }\n // mapElement.setAttribute('class', 'selectionMapStyle');\n // }\n // childElement.setAttribute('class', 'selectionMapStyle');\n // }\n // }\n // }\n Legend.prototype.removeEventListener = function () {\n if (this.maps.isDestroyed) {\n return;\n }\n this.maps.off(Browser.touchMoveEvent, this.interactiveHandler);\n this.maps.off(Browser.touchEndEvent, this.interactiveHandler);\n // this.maps.off(click, this.legendClick);\n };\n Legend.prototype.getLegendData = function (layerIndex, dataIndex, data, dataPath, layerData, shapePropertyPath, value) {\n var legendData = [];\n if (Object.prototype.toString.call(layerData) === '[object Array]') {\n for (var i = 0; i < layerData.length; i++) {\n var shapeData = layerData[i];\n if (shapeData['properties'][shapePropertyPath] === data[dataPath]) {\n legendData.push({\n layerIndex: layerIndex, shapeIndex: i, dataIndex: dataIndex,\n name: data[dataPath], value: value\n });\n }\n }\n }\n return legendData;\n };\n /**\n * Get module name.\n */\n Legend.prototype.getModuleName = function () {\n return 'Legend';\n };\n /**\n * To destroy the legend.\n * @return {void}\n * @private\n */\n Legend.prototype.destroy = function (maps) {\n /**\n * Destroy method performed here\n */\n this.removeEventListener();\n };\n return Legend;\n}());\nexport { Legend };\n","import { itemHighlight } from '../index';\nimport { Browser, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { getElementsByClassName, getElement, removeClass, createStyle, customizeStyle, getTargetElement } from '../utils/helper';\n/**\n * Highlight module class\n */\n/* tslint:disable:no-string-literal */\nvar Highlight = /** @class */ (function () {\n function Highlight(maps) {\n this.maps = maps;\n this.addEventListener();\n }\n /**\n * To bind events for highlight module\n */\n Highlight.prototype.addEventListener = function () {\n if (this.maps.isDestroyed) {\n return;\n }\n this.maps.on(Browser.touchMoveEvent, this.mouseMove, this);\n this.maps.on(Browser.touchStartEvent, this.mouseMove, this);\n };\n /**\n * To unbind events for highlight module\n */\n Highlight.prototype.removeEventListener = function () {\n if (this.maps.isDestroyed) {\n return;\n }\n this.maps.off(Browser.touchMoveEvent, this.mouseMove);\n this.maps.off(Browser.touchStartEvent, this.mouseMove);\n };\n /**\n * Public method for highlight module\n */\n Highlight.prototype.addHighlight = function (layerIndex, name, enable) {\n var targetEle = getTargetElement(layerIndex, name, enable, this.maps);\n if (enable) {\n this.mapHighlight(targetEle, null, null);\n }\n else {\n removeClass(targetEle);\n }\n };\n Highlight.prototype.mouseMove = function (e) {\n var targetEle = e.target;\n var layerIndex;\n var isTouch = e.pointerType === 'touch' || e.pointerType === '2' || (e.type.indexOf('touch') > -1);\n if ((targetEle.id.indexOf('LayerIndex') !== -1 || targetEle.id.indexOf('NavigationIndex') > -1) &&\n targetEle.getAttribute('class') !== 'ShapeselectionMapStyle' && !isTouch) {\n layerIndex = parseInt(targetEle.id.split('_LayerIndex_')[1].split('_')[0], 10);\n var shapeData = void 0;\n var data = void 0;\n var shapeIn = void 0;\n var dataIndex = void 0;\n if (targetEle.id.indexOf('ShapeIndex') > -1) {\n shapeIn = parseInt(targetEle.id.split('_ShapeIndex_')[1].split('_')[0], 10);\n shapeData = this.maps.layers[layerIndex].shapeData['features'] ?\n this.maps.layers[layerIndex].shapeData['features'][shapeIn]['properties'] : null;\n dataIndex = parseInt(targetEle.id.split('_dataIndex_')[1].split('_')[0], 10);\n data = isNullOrUndefined(dataIndex) ? null : this.maps.layers[layerIndex].dataSource[dataIndex];\n this.highlightSettings = this.maps.layers[layerIndex].highlightSettings;\n }\n else if (targetEle.id.indexOf('BubbleIndex') > -1) {\n var bubble = parseInt(targetEle.id.split('_BubbleIndex_')[1].split('_')[0], 10);\n dataIndex = parseInt(targetEle.id.split('_dataIndex_')[1].split('_')[0], 10);\n data = this.maps.layers[layerIndex].bubbleSettings[bubble].dataSource[dataIndex];\n this.highlightSettings = this.maps.layers[layerIndex].bubbleSettings[bubble].highlightSettings;\n }\n else if (targetEle.id.indexOf('MarkerIndex') > -1) {\n var marker = parseInt(targetEle.id.split('_MarkerIndex_')[1].split('_')[0], 10);\n dataIndex = parseInt(targetEle.id.split('_DataIndex_')[1].split('_')[0], 10);\n data = this.maps.layers[layerIndex].markerSettings[marker].dataSource[dataIndex];\n this.highlightSettings = this.maps.layers[layerIndex].markerSettings[marker].highlightSettings;\n }\n else {\n var index = parseInt(targetEle.id.split('_NavigationIndex_')[1].split('_')[0], 10);\n layerIndex = parseInt(targetEle.id.split('_LayerIndex_')[1].split('_')[0], 10);\n shapeData = null;\n data = {\n latitude: this.maps.layers[layerIndex].navigationLineSettings[index].latitude,\n longitude: this.maps.layers[layerIndex].navigationLineSettings[index].longitude\n };\n this.highlightSettings = this.maps.layers[layerIndex].navigationLineSettings[index].highlightSettings;\n }\n if (this.highlightSettings.enable) {\n this.mapHighlight(targetEle, shapeData, data);\n }\n else {\n var element = document.getElementsByClassName('highlightMapStyle')[0];\n if (!isNullOrUndefined(element)) {\n removeClass(element);\n if (element.id.indexOf('NavigationIndex') > -1) {\n var index = parseInt(element.id.split('_NavigationIndex_')[1].split('_')[0], 10);\n var layerIndex_1 = parseInt(element.parentElement.id.split('_layerIndex_')[1].split('_')[0], 10);\n element.setAttribute('stroke-width', this.maps.layers[layerIndex_1].navigationLineSettings[index].width.toString());\n element.setAttribute('stroke', this.maps.layers[layerIndex_1].navigationLineSettings[index].color);\n }\n }\n }\n }\n else if (getElementsByClassName('highlightMapStyle').length > 0) {\n targetEle = getElementsByClassName('highlightMapStyle')[0];\n if (targetEle.id.indexOf('NavigationIndex') > -1) {\n var index = parseInt(targetEle.id.split('_NavigationIndex_')[1].split('_')[0], 10);\n layerIndex = parseInt(targetEle.parentElement.id.split('_layerIndex_')[1].split('_')[0], 10);\n targetEle.setAttribute('stroke-width', this.maps.layers[layerIndex].navigationLineSettings[index].width.toString());\n targetEle.setAttribute('stroke', this.maps.layers[layerIndex].navigationLineSettings[index].color);\n }\n removeClass(targetEle);\n }\n };\n Highlight.prototype.mapHighlight = function (targetEle, shapeData, data) {\n var eventArgs = {\n opacity: this.highlightSettings.opacity,\n fill: targetEle.id.indexOf('NavigationIndex') === -1 ? this.highlightSettings.fill : 'none',\n border: { color: this.highlightSettings.border.color, width: this.highlightSettings.border.width },\n name: itemHighlight,\n target: targetEle.id,\n cancel: false,\n shapeData: shapeData,\n data: data\n };\n this.maps.trigger(itemHighlight, eventArgs);\n this.highlightMap(targetEle, eventArgs);\n };\n Highlight.prototype.highlightMap = function (targetEle, eventArgs) {\n var parentElement;\n var children;\n if (targetEle.getAttribute('class') === 'highlightMapStyle') {\n return;\n }\n else {\n if (getElementsByClassName('highlightMapStyle').length > 0) {\n var elem = getElementsByClassName('highlightMapStyle')[0];\n removeClass(elem);\n if (elem.id.indexOf('NavigationIndex') > -1) {\n var index = parseInt(elem.id.split('_NavigationIndex_')[1].split('_')[0], 10);\n var layerIndex = parseInt(elem.parentElement.id.split('_layerIndex_')[1].split('_')[0], 10);\n elem.setAttribute('stroke-width', this.maps.layers[layerIndex].navigationLineSettings[index].width.toString());\n elem.setAttribute('stroke', this.maps.layers[layerIndex].navigationLineSettings[index].color);\n }\n }\n if (!getElement('highlightMap')) {\n document.body.appendChild(createStyle('highlightMap', 'highlightMapStyle', eventArgs));\n }\n else {\n customizeStyle('highlightMap', 'highlightMapStyle', eventArgs);\n }\n targetEle.setAttribute('stroke-width', eventArgs.border.width.toString());\n targetEle.setAttribute('stroke', eventArgs.border.color);\n targetEle.setAttribute('class', 'highlightMapStyle');\n }\n };\n /**\n * Get module name.\n */\n Highlight.prototype.getModuleName = function () {\n return 'Highlight';\n };\n /**\n * To destroy the highlight.\n * @return {void}\n * @private\n */\n Highlight.prototype.destroy = function (maps) {\n /**\n * Destroy method performed here\n */\n this.removeEventListener();\n };\n return Highlight;\n}());\nexport { Highlight };\n","import { click, itemSelection } from '../index';\nimport { getElementsByClassName, getElement, createStyle, customizeStyle, removeClass, getTargetElement } from '../utils/helper';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * Selection module class\n */\nvar Selection = /** @class */ (function () {\n /* tslint:disable:no-string-literal */\n function Selection(maps) {\n this.maps = maps;\n this.addEventListener();\n }\n /**\n * For binding events to selection module\n */\n Selection.prototype.addEventListener = function () {\n if (this.maps.isDestroyed) {\n return;\n }\n this.maps.on(click, this.mouseClick, this);\n };\n /**\n * For removing events from selection modue\n */\n Selection.prototype.removeEventListener = function () {\n if (this.maps.isDestroyed) {\n return;\n }\n this.maps.off(click, this.mouseClick);\n };\n Selection.prototype.mouseClick = function (targetEle) {\n if (targetEle.id.indexOf('LayerIndex') > -1 || targetEle.id.indexOf('NavigationIndex') > -1) {\n var layerIndex = void 0;\n var shapeData = void 0;\n var data = void 0;\n var shapeIndex = void 0;\n var dataIndex = void 0;\n layerIndex = parseInt(targetEle.id.split('_LayerIndex_')[1].split('_')[0], 10);\n if (targetEle.id.indexOf('ShapeIndex') > -1) {\n shapeIndex = parseInt(targetEle.id.split('_ShapeIndex_')[1].split('_')[0], 10);\n shapeData = this.maps.layers[layerIndex].shapeData['features'] ?\n this.maps.layers[layerIndex].shapeData['features'][shapeIndex]['properties'] : null;\n dataIndex = parseInt(targetEle.id.split('_dataIndex_')[1].split('_')[0], 10);\n data = isNullOrUndefined(dataIndex) ? null : this.maps.layers[layerIndex].dataSource[dataIndex];\n this.selectionsettings = this.maps.layers[layerIndex].selectionSettings;\n this.selectionType = 'Shape';\n }\n else if (targetEle.id.indexOf('BubbleIndex') > -1) {\n var bubbleIndex = parseInt(targetEle.id.split('_BubbleIndex_')[1].split('_')[0], 10);\n dataIndex = parseInt(targetEle.id.split('_dataIndex_')[1].split('_')[0], 10);\n data = this.maps.layers[layerIndex].bubbleSettings[bubbleIndex].dataSource[dataIndex];\n this.selectionsettings = this.maps.layers[layerIndex].bubbleSettings[bubbleIndex].selectionSettings;\n this.selectionType = 'Bubble';\n }\n else if (targetEle.id.indexOf('MarkerIndex') > -1) {\n var markerIndex = parseInt(targetEle.id.split('_MarkerIndex_')[1].split('_')[0], 10);\n dataIndex = parseInt(targetEle.id.split('_DataIndex_')[1].split('_')[0], 10);\n data = this.maps.layers[layerIndex].markerSettings[markerIndex].dataSource[dataIndex];\n this.selectionsettings = this.maps.layers[layerIndex].markerSettings[markerIndex].selectionSettings;\n this.selectionType = 'Marker';\n }\n else {\n var index = parseInt(targetEle.id.split('_NavigationIndex_')[1].split('_')[0], 10);\n shapeData = null;\n data = {\n latitude: this.maps.layers[layerIndex].navigationLineSettings[index].latitude,\n longitude: this.maps.layers[layerIndex].navigationLineSettings[index].longitude\n };\n this.selectionsettings = this.maps.layers[layerIndex].navigationLineSettings[index].selectionSettings;\n this.selectionType = 'navigationline';\n }\n if (this.selectionsettings.enable) {\n this.selectMap(targetEle, shapeData, data);\n }\n }\n };\n /**\n * Public method for selection\n */\n Selection.prototype.addSelection = function (layerIndex, name, enable) {\n var targetEle = getTargetElement(layerIndex, name, enable, this.maps);\n if (enable) {\n this.selectMap(targetEle, null, null);\n }\n else {\n removeClass(targetEle);\n }\n };\n /**\n * Method for selection\n */\n Selection.prototype.selectMap = function (targetEle, shapeData, data) {\n var parentElement;\n var children;\n var selectionsettings = this.selectionsettings;\n var eventArgs = {\n opacity: this.selectionsettings.opacity,\n fill: this.selectionType !== 'navigationline' ? this.selectionsettings.fill : 'none',\n border: { color: this.selectionsettings.border.color, width: this.selectionsettings.border.width },\n name: itemSelection,\n target: targetEle.id,\n cancel: false,\n shapeData: shapeData,\n data: data\n };\n this.maps.trigger(itemSelection, eventArgs);\n // if (this.maps.legendSettings.visible && !this.maps.legendSettings.toggleVisibility && this.maps.legendSettings.legendSelection) {\n // this.removeLegendSelection(this.maps.legendModule.legendCollection, targetEle);\n // }\n if (targetEle.getAttribute('class') === this.selectionType + 'selectionMapStyle') {\n removeClass(targetEle);\n if (targetEle.id.indexOf('NavigationIndex') > -1) {\n var index = parseInt(targetEle.id.split('_NavigationIndex_')[1].split('_')[0], 10);\n var layerIndex = parseInt(targetEle.parentElement.id.split('_layerIndex_')[1].split('_')[0], 10);\n targetEle.setAttribute('stroke-width', this.maps.layers[layerIndex].navigationLineSettings[index].width.toString());\n targetEle.setAttribute('stroke', this.maps.layers[layerIndex].navigationLineSettings[index].color);\n }\n }\n else {\n if (!this.selectionsettings.enableMultiSelect && getElementsByClassName(this.selectionType + 'selectionMapStyle').length > 0) {\n var ele = getElementsByClassName(this.selectionType + 'selectionMapStyle')[0];\n removeClass(ele);\n if (ele.id.indexOf('NavigationIndex') > -1) {\n var index = parseInt(targetEle.id.split('_NavigationIndex_')[1].split('_')[0], 10);\n var layerIndex = parseInt(targetEle.parentElement.id.split('_layerIndex_')[1].split('_')[0], 10);\n ele.setAttribute('stroke-width', this.maps.layers[layerIndex].navigationLineSettings[index].width.toString());\n ele.setAttribute('stroke', this.maps.layers[layerIndex].navigationLineSettings[index].color);\n }\n }\n if (!getElement(this.selectionType + 'selectionMap')) {\n document.body.appendChild(createStyle(this.selectionType + 'selectionMap', this.selectionType + 'selectionMapStyle', eventArgs));\n }\n else {\n customizeStyle(this.selectionType + 'selectionMap', this.selectionType + 'selectionMapStyle', eventArgs);\n }\n targetEle.setAttribute('stroke-width', eventArgs.border.width.toString());\n targetEle.setAttribute('stroke', eventArgs.border.color);\n targetEle.setAttribute('class', this.selectionType + 'selectionMapStyle');\n }\n };\n /**\n * Remove legend selection\n */\n // private removeLegendSelection(legendCollection: Object[], targetEle: Element): void {\n // let shape: Element;\n // if (!this.selectionsettings.enableMultiSelect) {\n // for (let i: number = 0; i < legendCollection.length; i++) {\n // for (let data of legendCollection[i]['data']) {\n // shape = getElement(this.maps.element.id + '_LayerIndex_' + data['layerIndex'] +\n // '_ShapeIndex_' + data['shapeIndex'] + '_dataIndex_' + data['dataIndex']);\n // removeClass(shape);\n // }\n // }\n // }\n // }\n /**\n * Get module name.\n */\n Selection.prototype.getModuleName = function () {\n return 'Selection';\n };\n /**\n * To destroy the selection.\n * @return {void}\n * @private\n */\n Selection.prototype.destroy = function (maps) {\n /**\n * Destroy method performed here\n */\n this.removeEventListener();\n };\n return Selection;\n}());\nexport { Selection };\n","import { tooltipRender } from '../../index';\nimport { Tooltip } from '@syncfusion/ej2-popups';\nimport { setStyleAttribute, createElement, Browser, isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { getTemplateFunction, MapLocation, getElement, checkShapeDataFields, Internalize } from '../utils/helper';\n/**\n * Tooltip module class\n */\nvar MapsTooltip = /** @class */ (function () {\n function MapsTooltip(maps) {\n this.isTouch = false;\n this.touchDelay = 0;\n this.maps = maps;\n this.element = maps.element;\n this.addEventListener();\n this.ejTooltip = new Tooltip({\n opensOn: 'custom',\n position: 'TopCenter',\n beforeRender: this.onBeforeRender.bind(this),\n beforeOpen: this.tooltipCustomization.bind(this),\n openDelay: 0, closeDelay: 1,\n });\n this.ejTooltip.appendTo(this.element);\n }\n /**\n * To bind events for tooltip module\n */\n MapsTooltip.prototype.addEventListener = function () {\n if (this.maps.isDestroyed) {\n return;\n }\n this.maps.on(Browser.touchMoveEvent, this.mouseMove, this);\n this.maps.on(Browser.touchEndEvent, this.mouseMove, this);\n };\n /**\n * To unbind events for tooltip module\n */\n MapsTooltip.prototype.removeEventListener = function () {\n if (this.maps.isDestroyed) {\n return;\n }\n this.maps.off(Browser.touchMoveEvent, this.mouseMove);\n this.maps.off(Browser.touchEndEvent, this.mouseMove);\n };\n MapsTooltip.prototype.mouseMove = function (e) {\n if (this.isTouch && new Date().getTime() < this.touchDelay) {\n return;\n }\n this.setMouseXY(e);\n this.renderTooltip(e);\n };\n MapsTooltip.prototype.setMouseXY = function (e) {\n var pageX;\n var pageY;\n if (e.type.indexOf('touch') > -1) {\n this.isTouch = true;\n var touchArg = e;\n pageY = touchArg.changedTouches[0].clientY;\n pageX = touchArg.changedTouches[0].clientX;\n }\n else {\n this.isTouch = e.pointerType === 'touch' || e.pointerType === '2';\n pageX = e.clientX;\n pageY = e.clientY;\n }\n this.mouse = new MapLocation(pageX, pageY);\n this.touchDelay = new Date().getTime() + 100;\n };\n /**\n * Method to render the tooltip for maps.\n */\n MapsTooltip.prototype.renderTooltip = function (e) {\n if (this.previousId === e.target.id) {\n this.ejTooltip.refresh(this.appendTargetElement(this.mouse, 0));\n }\n else if (this.manipulateTarget(e.target)) {\n this.shapeColor = e.target.getAttribute('fill');\n if (document.querySelector('.e-tip-content') && !this.setTooltipContent(this.options) && !this.isTouch) {\n var args = {\n type: null, cancel: false, element: this.customTooltip, event: e,\n name: 'custom', target: this.tooltipEle\n };\n this.tooltipCustomization(args);\n return;\n }\n else {\n this.closeTooltip(1);\n }\n this.ejTooltip.open(this.appendTargetElement(this.mouse));\n }\n else {\n this.closeTooltip(1);\n }\n };\n MapsTooltip.prototype.getTargetElement = function (element) {\n var hoverElements = ['_ShapeIndex_', '_MarkerIndex_', '_BubbleIndex_'];\n if (!isNullOrUndefined(element.id) && element.id.length > 0 && element.id !== this.maps.element.id) {\n for (var i = 0; i < hoverElements.length; i++) {\n if (element.id.indexOf(hoverElements[i]) > -1) {\n this.tooltipEle = element;\n break;\n }\n else if (i === hoverElements.length - 1) {\n this.getTargetElement(element.parentNode);\n }\n }\n }\n else if (element.id !== this.maps.element.id) {\n this.getTargetElement(element.parentNode);\n }\n };\n /* tslint:disable:no-string-literal */\n MapsTooltip.prototype.closeTooltip = function (delay, duration, effect) {\n if (duration === void 0) { duration = 0; }\n if (effect === void 0) { effect = 'None'; }\n this.ejTooltip.closeDelay = duration;\n this.ejTooltip.close({ delay: delay, duration: duration, effect: effect });\n this.previousId = null;\n };\n /* tslint:disable:no-string-literal */\n MapsTooltip.prototype.manipulateTarget = function (currentTarget) {\n this.tooltipEle = null;\n this.getTargetElement(currentTarget);\n if (isNullOrUndefined(this.tooltipEle)) {\n return false;\n }\n var target = this.tooltipEle.id;\n this.previousId = target;\n var index = parseFloat(target.split('_')[2]);\n var layer = this.maps.layersCollection[index];\n if (target.indexOf('_ShapeIndex_') > -1) {\n this.options = layer.tooltipSettings;\n var shape = parseInt(target.split('_')[4], 10);\n if (isNullOrUndefined(layer.shapeData['features'])) {\n return false;\n }\n var value = layer.shapeData['features'][shape]['properties'];\n index = checkShapeDataFields(layer.dataSource, value, layer.shapeDataPath, layer.shapePropertyPath);\n if (this.options.visible && ((!isNullOrUndefined(index) && !isNaN(index)) || (!isNullOrUndefined(value)))) {\n this.currentData = layer.dataSource[index] || value;\n return true;\n }\n }\n else if (target.indexOf('_MarkerIndex_') > -1) {\n var markerIndex = parseInt(target.split('_')[4], 10);\n var dataIndex = parseInt(target.split('_')[6], 10);\n var marker = layer.markerSettings[markerIndex];\n this.options = marker.tooltipSettings;\n if (!isNaN(markerIndex) && this.options.visible) {\n this.currentData = marker.dataSource[dataIndex];\n return true;\n }\n }\n else if (target.indexOf('_BubbleIndex_') > -1) {\n var bubbleIndex = parseInt(target.split('_')[4], 10);\n var dataIndex = parseInt(target.split('_')[6], 10);\n this.options = layer.bubbleSettings[bubbleIndex].tooltipSettings;\n if (!isNaN(bubbleIndex) && this.options.visible) {\n this.currentData = layer.bubbleSettings[bubbleIndex].dataSource[dataIndex];\n return true;\n }\n }\n return false;\n };\n /**\n * Method to append the target element for tooltip\n */\n MapsTooltip.prototype.appendTargetElement = function (location, padding) {\n if (padding === void 0) { padding = 10; }\n var element = getElement(this.element.id + '_MapsTooltip');\n var svgRect = getElement(this.element.id + '_svg').getBoundingClientRect();\n location.x -= svgRect.left;\n location.y -= (padding + svgRect.top);\n this.position = location;\n if (element) {\n element.style.left = location.x + 'px';\n element.style.top = location.y + 'px';\n }\n else {\n element = createElement('div', {\n id: this.element.id + '_MapsTooltip',\n styles: 'position: absolute;left:' + location.x + 'px;top:' + location.y +\n 'px;width:2px;height:2px;background:transparent;pointer-events:none;'\n });\n getElement(this.element.id + '_Secondary_Element').appendChild(element);\n }\n return element;\n };\n MapsTooltip.prototype.formatter = function (format, data) {\n if (isNullOrUndefined(format)) {\n return null;\n }\n var keys = Object.keys(data);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n format = format.split('${' + key + '}').join(data[key]);\n }\n return format;\n };\n /**\n * Method to perform the tooltip for maps.\n */\n MapsTooltip.prototype.onBeforeRender = function (args) {\n args.cancel = this.setTooltipContent(this.options);\n this.ejTooltip.dataBind();\n };\n /**\n * To get content for the current toolitp\n */\n MapsTooltip.prototype.setTooltipContent = function (options) {\n if (options === void 0) { options = this.options; }\n var localData = extend({}, this.currentData, null, true);\n if (this.maps.format && !isNaN(parseFloat(localData[options.valuePath]))) {\n localData[options.valuePath] = Internalize(this.maps, parseFloat(localData[options.valuePath]));\n }\n var content = this.formatter(options.format, localData) || localData[options.valuePath];\n content = options.template ? this.joinElements(getTemplateFunction(options.template)(localData)) : content;\n this.textStyle = extend(options.textStyle, options.textStyle, null, true);\n this.textStyle.color = this.textStyle.color || this.shapeColor;\n var argsData = {\n cancel: false, name: tooltipRender,\n content: content,\n border: options.border,\n textStyle: this.textStyle,\n fill: options.fill,\n };\n this.maps.trigger(tooltipRender, argsData);\n this.border = argsData.border;\n this.shapeColor = argsData.fill;\n this.ejTooltip.content = argsData.content;\n return argsData.cancel || (isNullOrUndefined(argsData.content) || argsData.content === '');\n };\n MapsTooltip.prototype.joinElements = function (elements) {\n var elementString = '';\n [].forEach.call(elements, function (ele) {\n elementString += ele.outerHTML;\n });\n return elementString;\n };\n /**\n * Method to customize the tooltip elements for maps.\n */\n MapsTooltip.prototype.tooltipCustomization = function (args, options) {\n if (options === void 0) { options = this.options; }\n this.customTooltip = args.element;\n if (options.template) {\n setStyleAttribute(args.element, {\n 'backgroundColor': 'transparent', 'borderColor': 'transparent',\n 'borderWidth': '1px', 'pointer-events': 'none'\n });\n setStyleAttribute(args.element.querySelector('.e-arrow-tip'), {\n 'width': '0px', 'height': '0px'\n });\n if (this.isTouch) {\n this.closeTooltip(1, 1500, 'FadeOut');\n }\n return null;\n }\n var font = this.textStyle;\n var borderColor = this.border.color;\n var border = this.border.width;\n var pointerSize = 8;\n var arrowWidth = (pointerSize - border) + 'px';\n var outerWidth;\n var innerWidth;\n var arrowEle = args.element.querySelector('.e-arrow-tip');\n setStyleAttribute(args.element, {\n 'backgroundColor': this.shapeColor, 'borderColor': borderColor || '#212121',\n 'borderWidth': border + 'px', 'pointer-events': 'none', 'borderRadius': '5px', 'padding-left': '5px',\n 'padding-right': '5px', 'padding-top': '3px', 'padding-bottom': '3px'\n });\n setStyleAttribute(args.element.querySelector('.e-tip-content'), {\n 'color': font.color, 'fontFamily': font.fontFamily, 'fontSize': font.size,\n 'fontWeight': font.fontWeight, 'fontStyle': font.fontStyle, 'padding-left': '5px',\n 'padding-right': '5px', 'padding-top': '3px', 'padding-bottom': '3px'\n });\n setStyleAttribute(args.element.querySelector('.e-arrow-tip'), {\n 'width': 2 * (pointerSize + border) + 'px', 'height': pointerSize + border + 'px'\n });\n if (arrowEle.classList.contains('e-tip-top')) {\n outerWidth = pointerSize + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-outer'), {\n 'borderRightColor': 'transparent', 'borderLeftColor': 'transparent', 'borderBottomColor': borderColor,\n 'borderLeftWidth': outerWidth, 'borderRightWidth': outerWidth, 'borderBottomWidth': outerWidth,\n });\n innerWidth = (pointerSize - border) + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-inner'), {\n color: this.shapeColor, top: '0px'\n });\n }\n else if (arrowEle.classList.contains('e-tip-bottom')) {\n outerWidth = pointerSize + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-outer'), {\n 'borderRightColor': 'transparent', 'borderLeftColor': 'transparent', 'borderTopColor': borderColor,\n 'borderLeftWidth': outerWidth, 'borderRightWidth': outerWidth, 'borderTopWidth': outerWidth,\n });\n innerWidth = (pointerSize - border) + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-inner'), {\n color: this.shapeColor\n });\n }\n setStyleAttribute(args.element, {\n 'display': 'block', 'transitionProperty': 'left,top',\n 'transitionDuration': '1ms'\n });\n if (this.isTouch) {\n this.closeTooltip(1000, 1500, 'FadeOut');\n }\n };\n /**\n * Get module name.\n */\n MapsTooltip.prototype.getModuleName = function () {\n return 'MapsTooltip';\n };\n /**\n * To destroy the tooltip.\n * @return {void}\n * @private\n */\n MapsTooltip.prototype.destroy = function (maps) {\n this.removeEventListener();\n this.ejTooltip.destroy();\n };\n return MapsTooltip;\n}());\nexport { MapsTooltip };\n","import { doubleClick } from '../../index';\nimport { Point, getElementByID, PathOption, Rect, convertGeoToPoint, CircleOption, convertTileLatLongToPoint } from '../utils/helper';\nimport { RectOption, createTooltip, calculateScale, getTouchCenter, getTouches, targetTouches } from '../utils/helper';\nimport { MapLocation, zoomAnimate, smoothTranslate } from '../utils/helper';\nimport { isNullOrUndefined, EventHandler, Browser, remove, createElement } from '@syncfusion/ej2-base';\nimport { changeBorderWidth } from '../index';\n/**\n * Zoom module class\n */\n/* tslint:disable:max-line-length */\nvar Zoom = /** @class */ (function () {\n function Zoom(maps) {\n this.isPanning = false;\n this.mouseEnter = false;\n this.isTouch = false;\n this.rectZoomingStart = false;\n this.pinchRect = new Rect(0, 0, 0, 0);\n this.browserName = Browser.info.name;\n this.isPointer = Browser.isPointer;\n this.handled = false;\n this.pinchFactor = 1;\n this.startTouches = [];\n this.maps = maps;\n this.wheelEvent = this.browserName === 'mozilla' ? (this.isPointer ? 'mousewheel' : 'DOMMouseScroll') : 'mousewheel';\n this.cancelEvent = this.isPointer ? 'pointerleave' : 'mouseleave';\n this.selectionColor = this.maps.zoomSettings.selectionColor;\n this.fillColor = this.maps.zoomSettings.color;\n this.addEventListener();\n this.groupElements = [];\n }\n /* tslint:disable:no-string-literal */\n Zoom.prototype.performZooming = function (position, newZoomFactor, type) {\n var map = this.maps;\n var prevLevel = map.tileZoomLevel;\n var prevScale = map.scale;\n var maxZoom = map.zoomSettings.maxZoom;\n var minZoom = map.zoomSettings.minZoom;\n if ((!map.isTileMap) && (type === 'ZoomIn' ? newZoomFactor >= minZoom && newZoomFactor <= maxZoom : newZoomFactor >= minZoom)) {\n var availSize = map.mapAreaRect;\n var minBounds = map.baseMapRectBounds['min'];\n var maxBounds = map.baseMapRectBounds['max'];\n var mapTotalWidth = Math.abs(minBounds['x'] - maxBounds['x']);\n var mapTotalHeight = Math.abs(minBounds['y'] - maxBounds['y']);\n var point = map.translatePoint;\n var translatePointX = point.x - (((availSize.width / prevScale) - (availSize.width / newZoomFactor)) / (availSize.width / position.x));\n var translatePointY = point.y - (((availSize.height / prevScale) - (availSize.height / newZoomFactor)) / (availSize.height / position.y));\n var currentHeight = Math.abs(map.baseMapRectBounds['max']['y'] - map.baseMapRectBounds['min']['y']) * newZoomFactor;\n translatePointX = (currentHeight < map.mapAreaRect.height) ? (availSize.x + ((-(minBounds['x'])) + ((availSize.width / 2) - (mapTotalWidth / 2)))) : translatePointX;\n translatePointY = (currentHeight < map.mapAreaRect.height) ? (availSize.y + ((-(minBounds['y'])) + ((availSize.height / 2) - (mapTotalHeight / 2)))) : translatePointY;\n map.translatePoint = new Point(translatePointX, translatePointY);\n map.scale = newZoomFactor;\n }\n else if ((map.isTileMap) && (newZoomFactor >= minZoom && newZoomFactor <= maxZoom)) {\n this.getTileTranslatePosition(prevLevel, newZoomFactor, position);\n map.tileZoomLevel = newZoomFactor;\n map.scale = Math.pow(2, newZoomFactor - 1);\n map.mapLayerPanel.generateTiles(newZoomFactor, map.tileTranslatePoint);\n map.translatePoint.x = (map.tileTranslatePoint.x - (0.5 * map.scale)) / map.scale;\n map.translatePoint.y = (map.tileTranslatePoint.y - (0.5 * map.scale)) / map.scale;\n }\n this.applyTransform();\n map.trigger(doubleClick, this);\n };\n Zoom.prototype.getTileTranslatePosition = function (prevLevel, currentLevel, position) {\n var map = this.maps;\n var tileDefaultSize = 256;\n var bounds = getElementByID(this.maps.element.id).getBoundingClientRect();\n var prevSize = Math.pow(2, prevLevel) * 256;\n var totalSize = Math.pow(2, currentLevel) * 256;\n var x = ((position.x - map.tileTranslatePoint.x) / prevSize) * 100;\n var y = ((position.y - map.tileTranslatePoint.y) / prevSize) * 100;\n map.tileTranslatePoint.x = (currentLevel === 1) ? (bounds.width / 2) - ((tileDefaultSize * 2) / 2) :\n position.x - ((x * totalSize) / 100);\n map.tileTranslatePoint.y = (currentLevel === 1) ? (bounds.height / 2) - ((tileDefaultSize * 2) / 2) :\n position.y - ((y * totalSize) / 100);\n };\n Zoom.prototype.performRectZooming = function () {\n var map = this.maps;\n var size = map.availableSize;\n var prevLevel = map.tileZoomLevel;\n var zoomRect = this.zoomingRect;\n if (zoomRect.height > 0 && zoomRect.width > 0) {\n var x = this.zoomingRect.x + (this.zoomingRect.width / 2);\n var y = this.zoomingRect.y + (this.zoomingRect.height / 2);\n var zoomCalculationFactor = void 0;\n if (!map.isTileMap) {\n var scale = map.previousScale = map.scale;\n zoomCalculationFactor = scale + Math.round((((size.width / zoomRect.width) + (size.height / zoomRect.height)) / 2));\n var translatePoint = map.previousPoint = map.translatePoint;\n var translatePointX = translatePoint.x - (((size.width / scale) - (size.width / zoomCalculationFactor)) / (size.width / x));\n var translatePointY = translatePoint.y - (((size.height / scale) - (size.height / zoomCalculationFactor)) / (size.height / y));\n map.translatePoint = new Point(translatePointX, translatePointY);\n map.scale = zoomCalculationFactor;\n }\n else {\n zoomCalculationFactor = prevLevel + (Math.round(prevLevel + (((size.width / zoomRect.width) + (size.height / zoomRect.height)) / 2)));\n this.getTileTranslatePosition(prevLevel, zoomCalculationFactor, { x: x, y: y });\n map.tileZoomLevel = zoomCalculationFactor;\n map.mapLayerPanel.generateTiles(zoomCalculationFactor, map.tileTranslatePoint);\n map.translatePoint.x = (map.tileTranslatePoint.x - (0.5 * Math.pow(2, zoomCalculationFactor))) /\n (Math.pow(2, zoomCalculationFactor));\n map.translatePoint.y = (map.tileTranslatePoint.y - (0.5 * Math.pow(2, zoomCalculationFactor))) /\n (Math.pow(2, zoomCalculationFactor));\n map.scale = (Math.pow(2, zoomCalculationFactor));\n }\n this.applyTransform(true);\n this.zoomingRect = null;\n }\n };\n Zoom.prototype.setInteraction = function (newInteraction) {\n this.lastScale = 1;\n this.interaction = newInteraction;\n };\n Zoom.prototype.updateInteraction = function () {\n if (this.fingers === 2) {\n this.setInteraction('zoom');\n }\n else {\n this.setInteraction(null);\n }\n };\n Zoom.prototype.performPinchZooming = function (e) {\n var touches = null;\n var map = this.maps;\n var prevLevel = map.tileZoomLevel;\n var availSize = map.mapAreaRect;\n var scale = calculateScale(this.touchStartList, this.touchMoveList);\n var touchCenter = getTouchCenter(getTouches(this.touchMoveList, this.maps));\n var newScale = scale / this.lastScale;\n this.lastScale = scale;\n this.pinchFactor *= newScale;\n this.pinchFactor = Math.min(this.maps.zoomSettings.maxZoom, Math.max(this.pinchFactor, this.maps.zoomSettings.minZoom));\n var zoomCalculationFactor = this.pinchFactor;\n var translatePointX;\n var translatePointY;\n if (!map.isTileMap) {\n var minBounds = map.baseMapRectBounds['min'];\n var maxBounds = map.baseMapRectBounds['max'];\n var mapTotalWidth = Math.abs(minBounds['x'] - maxBounds['x']);\n var mapTotalHeight = Math.abs(minBounds['y'] - maxBounds['y']);\n var translatePoint = map.translatePoint;\n var currentHeight = Math.abs(map.baseMapRectBounds['max']['y'] - map.baseMapRectBounds['min']['y']) * zoomCalculationFactor;\n var translatePointX_1 = translatePoint.x - (((availSize.width / map.scale) - (availSize.width / zoomCalculationFactor)) / (availSize.width / touchCenter.x));\n var translatePointY_1 = translatePoint.y - (((availSize.height / map.scale) - (availSize.height / zoomCalculationFactor)) / (availSize.height / touchCenter.y));\n // translatePointX = (currentHeight < map.mapAreaRect.height) ? (availSize.x + ((-(minBounds['x'])) + ((availSize.width / 2) - (mapTotalWidth / 2)))) : translatePointX;\n //translatePointY = (currentHeight < map.mapAreaRect.height) ? (availSize.y + ((-(minBounds['y'])) + ((availSize.height / 2) - (mapTotalHeight / 2)))) : translatePointY;\n map.translatePoint = new Point(translatePointX_1, translatePointY_1);\n map.scale = zoomCalculationFactor;\n }\n else {\n var newTileFactor = zoomCalculationFactor;\n this.getTileTranslatePosition(prevLevel, newTileFactor, { x: touchCenter.x, y: touchCenter.y });\n map.tileZoomLevel = newTileFactor;\n map.mapLayerPanel.generateTiles(newTileFactor, map.tileTranslatePoint);\n map.translatePoint.x = (map.tileTranslatePoint.x - (0.5 * Math.pow(2, newTileFactor))) /\n (Math.pow(2, newTileFactor));\n map.translatePoint.y = (map.tileTranslatePoint.y - (0.5 * Math.pow(2, newTileFactor))) /\n (Math.pow(2, newTileFactor));\n map.scale = (Math.pow(2, newTileFactor));\n }\n this.applyTransform();\n };\n Zoom.prototype.drawZoomRectangle = function () {\n var map = this.maps;\n var down = this.mouseDownPoints;\n var move = this.mouseMovePoints;\n var x;\n var y;\n var width;\n var height;\n var border = { width: 1, color: '#009900' };\n width = Math.abs(move.x - down.x);\n height = Math.abs(move.y - down.y);\n x = ((move.x > down.x) ? down.x : down.x - width);\n y = ((move.y > down.y) ? down.y : down.y - height);\n var elementRect = getElementByID(map.element.id).getBoundingClientRect();\n if ((x > map.mapAreaRect.x && x < (map.mapAreaRect.x + map.mapAreaRect.width)) &&\n (y > map.mapAreaRect.y) && (y < map.mapAreaRect.y + map.mapAreaRect.height)) {\n this.zoomingRect = new Rect(x, y, width, height);\n var rectSVGObject = map.renderer.createSvg({\n id: map.element.id + '_Selection_Rect_Zooming',\n width: map.availableSize.width,\n height: map.availableSize.height,\n });\n var rectOption = new RectOption(map.element.id + '_ZoomRect', '#d3d3d3', border, 0.5, this.zoomingRect, 0, 0, '', '3');\n rectSVGObject.appendChild(map.renderer.drawRectangle(rectOption));\n getElementByID(map.element.id + '_Secondary_Element').appendChild(rectSVGObject);\n }\n };\n /**\n * To animate the zooming process\n */\n Zoom.prototype.animateTransform = function (element, animate, x, y, scale) {\n var duration = this.currentLayer.animationDuration;\n if (!animate || duration === 0) {\n element.setAttribute('transform', 'scale(' + (scale) + ') translate( ' + x + ' ' + y + ' )');\n return;\n }\n zoomAnimate(element, 0, duration, new MapLocation(x, y), scale, this.maps.mapAreaRect, this.maps);\n };\n Zoom.prototype.applyTransform = function (animate) {\n var layerIndex;\n this.templateCount = 0;\n var scale = this.maps.scale;\n var x = this.maps.translatePoint.x;\n var y = this.maps.translatePoint.y;\n var collection = [];\n if (this.layerCollectionEle) {\n for (var i = 0; i < this.layerCollectionEle.childElementCount; i++) {\n var layerElement = this.layerCollectionEle.childNodes[i];\n if (layerElement.tagName === 'g') {\n this.templateCount++;\n var index = parseFloat(layerElement.id.split('_')[2]);\n this.currentLayer = this.maps.layersCollection[index];\n var factor = this.maps.mapLayerPanel.calculateFactor(this.currentLayer);\n for (var j = 0; j < layerElement.childElementCount; j++) {\n var currentEle = layerElement.childNodes[j];\n if (!(currentEle.id.indexOf('_Markers_Group') > -1) && (!(currentEle.id.indexOf('_bubble_Group') > -1))\n && (!(currentEle.id.indexOf('_dataLableIndex_Group') > -1))) {\n if (this.maps.isTileMap && (currentEle.id.indexOf('_line_Group') > -1)) {\n currentEle.remove();\n layerElement.appendChild(this.maps.navigationLineModule.renderNavigation(this.currentLayer, this.maps.tileZoomLevel, index));\n }\n else {\n changeBorderWidth(currentEle, index, scale, this.maps);\n this.animateTransform(currentEle, animate, x, y, scale);\n }\n }\n else if (currentEle.id.indexOf('_Markers_Group') > -1) {\n for (var k = 0; k < currentEle.childElementCount; k++) {\n this.markerTranslate(currentEle.childNodes[k], factor, x, y, scale, 'Marker', animate);\n }\n }\n else if (currentEle.id.indexOf('_bubble_Group') > -1) {\n var childElement = void 0;\n for (var k = 0; k < currentEle.childElementCount; k++) {\n childElement = currentEle.childNodes[k];\n var bubbleTransform = childElement.getAttribute('transform');\n layerIndex = parseFloat(childElement.id.split('_')[2]);\n var bubleIndex = parseFloat(childElement.id.split('_')[4]);\n var dataIndex = parseFloat(childElement.id.split('_')[6]);\n for (var l = 0; l < this.maps.bubbleModule.bubbleCollection.length; l++) {\n var bubbleCollection = this.maps.bubbleModule.bubbleCollection[l];\n if (bubbleCollection['LayerIndex'] === layerIndex && bubbleCollection['BubbleIndex'] === bubleIndex &&\n bubbleCollection['DataIndex'] === dataIndex) {\n var centerX = bubbleCollection['center']['x'];\n var centerY = bubbleCollection['center']['y'];\n var currentX = ((centerX + x) * scale);\n var currentY = ((centerY + y) * scale);\n var duration = this.currentLayer.animationDuration;\n if (!animate || duration === 0) {\n childElement.setAttribute('transform', 'translate( ' + currentX + ' ' + currentY + ' )');\n }\n else {\n smoothTranslate(childElement, 0, duration, new MapLocation(currentX, currentY));\n }\n break;\n }\n }\n }\n }\n else if (currentEle.id.indexOf('_dataLableIndex_Group') > -1) {\n for (var k = 0; k < currentEle.childElementCount; k++) {\n this.dataLabelTranslate(currentEle.childNodes[k], factor, x, y, scale, 'DataLabel', animate);\n }\n }\n }\n }\n }\n if (!animate || this.currentLayer.animationDuration === 0) {\n this.processTemplate(x, y, scale, this.maps);\n }\n }\n };\n /**\n * To translate the layer template elements\n * @private\n */\n Zoom.prototype.processTemplate = function (x, y, scale, maps) {\n for (var i = 0; i < this.templateCount; i++) {\n this.currentLayer = maps.layersCollection[i];\n var factor = maps.mapLayerPanel.calculateFactor(this.currentLayer);\n var markerTemplateElement = getElementByID(maps.element.id + '_LayerIndex_' +\n i + '_Markers_Template_Group');\n var datalabelTemplateElemement = getElementByID(maps.element.id + '_LayerIndex_'\n + i + '_Label_Template_Group');\n if ((!isNullOrUndefined(markerTemplateElement)) && markerTemplateElement.childElementCount > 0) {\n for (var k = 0; k < markerTemplateElement.childElementCount; k++) {\n this.markerTranslate(markerTemplateElement.childNodes[k], factor, x, y, scale, 'Template');\n }\n }\n if ((!isNullOrUndefined(datalabelTemplateElemement)) && datalabelTemplateElemement.childElementCount > 0) {\n for (var k = 0; k < datalabelTemplateElemement.childElementCount; k++) {\n this.dataLabelTranslate(datalabelTemplateElemement.childNodes[k], factor, x, y, scale, 'Template');\n }\n }\n }\n };\n Zoom.prototype.dataLabelTranslate = function (element, factor, x, y, scale, type, animate) {\n if (animate === void 0) { animate = false; }\n var labelCollection = this.maps.dataLabelModule.dataLabelCollections;\n var layerIndex = parseFloat(element.id.split('_')[2]);\n var shapeIndex = parseFloat(element.id.split('_')[4]);\n var labelIndex = parseFloat(element.id.split('_')[6]);\n var duration = this.currentLayer.animationDuration;\n for (var l = 0; l < labelCollection.length; l++) {\n var label = labelCollection[l];\n if (label['layerIndex'] === layerIndex && label['shapeIndex'] === shapeIndex\n && label['labelIndex'] === labelIndex) {\n var labelX = label['location']['x'];\n var labelY = label['location']['y'];\n if (type === 'Template') {\n var layerEle = getElementByID(this.maps.element.id + '_Layer_Collections');\n labelX = ((Math.abs(this.maps.baseMapRectBounds['min']['x'] - labelX)) * scale);\n labelY = ((Math.abs(this.maps.baseMapRectBounds['min']['y'] - labelY)) * scale);\n var templateOffset = element.getBoundingClientRect();\n var layerOffset = layerEle.getBoundingClientRect();\n var elementOffset = element.parentElement.getBoundingClientRect();\n var x_1 = ((labelX) + (layerOffset.left - elementOffset.left) - (templateOffset.width / 2));\n var y_1 = ((labelY) + (layerOffset.top - elementOffset.top) - (templateOffset.height / 2));\n element.style.left = x_1 + 'px';\n element.style.top = y_1 + 'px';\n }\n else {\n labelX = ((labelX + x) * scale);\n labelY = ((labelY + y) * scale);\n if (!animate || duration === 0) {\n element.setAttribute('transform', 'translate( ' + labelX + ' ' + labelY + ' )');\n }\n else {\n smoothTranslate(element, 0, duration, new MapLocation(labelX, labelY));\n }\n }\n }\n }\n };\n Zoom.prototype.markerTranslate = function (element, factor, x, y, scale, type, animate) {\n if (animate === void 0) { animate = false; }\n var layerIndex = parseInt(element.id.split('_')[2], 10);\n var markerIndex = parseInt(element.id.split('_')[4], 10);\n var dataIndex = parseInt(element.id.split('_')[6], 10);\n var layer = this.maps.layersCollection[layerIndex];\n var marker = layer.markerSettings[markerIndex];\n if (!isNullOrUndefined(marker) && !isNullOrUndefined(marker.dataSource) && !isNullOrUndefined(marker.dataSource[dataIndex])) {\n var lng = marker.dataSource[dataIndex]['longitude'];\n var lat = marker.dataSource[dataIndex]['latitude'];\n var duration = this.currentLayer.animationDuration;\n var location_1 = (this.maps.isTileMap) ? convertTileLatLongToPoint(new Point(lng, lat), this.maps.tileZoomLevel, this.maps.tileTranslatePoint, true) : convertGeoToPoint(lat, lng, factor, layer, this.maps);\n if (this.maps.isTileMap) {\n if (type === 'Template') {\n var templateOffset = element.getBoundingClientRect();\n element.style.left = (location_1.x - (templateOffset.width / 2)) + 'px';\n element.style.top = (location_1.y - (templateOffset.height / 2)) + 'px';\n }\n else {\n element.setAttribute('transform', 'translate( ' + location_1.x + ' ' + location_1.y + ' )');\n }\n }\n else {\n if (type === 'Template') {\n location_1.x = ((Math.abs(this.maps.baseMapRectBounds['min']['x'] - location_1.x)) * scale);\n location_1.y = ((Math.abs(this.maps.baseMapRectBounds['min']['y'] - location_1.y)) * scale);\n var templateOffset = element.getBoundingClientRect();\n var layerOffset = getElementByID(this.maps.element.id + '_Layer_Collections').getBoundingClientRect();\n var elementOffset = element.parentElement.getBoundingClientRect();\n element.style.left = (((location_1.x) + (layerOffset.left - elementOffset.left) -\n (templateOffset.width / 2)) + marker.offset.x) + 'px';\n element.style.top = (((location_1.y) + (layerOffset.top - elementOffset.top)\n - (templateOffset.height / 2)) + marker.offset.y) + 'px';\n }\n else {\n location_1.x = (((location_1.x + x) * scale) + marker.offset.x);\n location_1.y = (((location_1.y + y) * scale) + marker.offset.y);\n if (!animate || duration === 0) {\n element.setAttribute('transform', 'translate( ' + location_1.x + ' ' + location_1.y + ' )');\n }\n else {\n smoothTranslate(element, 0, duration, location_1);\n }\n }\n }\n }\n };\n Zoom.prototype.panning = function () {\n var map = this.maps;\n var areaRect = map.mapAreaRect;\n var down = this.mouseDownPoints;\n var move = this.mouseMovePoints;\n var scale = map.scale;\n var translatePoint = map.translatePoint;\n var x;\n var y;\n var transY;\n var transX;\n if (!map.isTileMap) {\n var x_2 = translatePoint.x - (down.x - move.x) / scale;\n var y_2 = translatePoint.y - (down.y - move.y) / scale;\n var layerRect = getElementByID(map.element.id + '_Layer_Collections').getBoundingClientRect();\n var elementRect = getElementByID(map.element.id + '_svg').getBoundingClientRect();\n var panningXDirection = (((down.x - move.x) < 0 ? layerRect.left <= (elementRect.left + map.mapAreaRect.x) :\n ((layerRect.left + layerRect.width) >= (elementRect.left + elementRect.width) + map.mapAreaRect.x + map.margin.left)));\n var panningYDirection = (((down.y - move.y) < 0 ? layerRect.top <= (elementRect.top + map.mapAreaRect.y) :\n ((layerRect.top + layerRect.height) >= (elementRect.top + elementRect.height) + map.mapAreaRect.y + map.margin.top)));\n if (panningXDirection && panningYDirection) {\n map.translatePoint = new Point(x_2, y_2);\n this.applyTransform();\n }\n }\n else if (this.maps.tileZoomLevel > 1) {\n x = map.tileTranslatePoint.x - (down.x - move.x);\n y = map.tileTranslatePoint.y - (down.y - move.y);\n map.tileTranslatePoint.x = x;\n map.tileTranslatePoint.y = y;\n map.mapLayerPanel.generateTiles(map.tileZoomLevel, map.tileTranslatePoint);\n map.translatePoint.x = (map.tileTranslatePoint.x - (down.x - move.x)) / map.scale;\n map.translatePoint.y = (map.tileTranslatePoint.y - (down.y - move.y)) / map.scale;\n this.applyTransform();\n }\n this.mouseDownPoints = this.mouseMovePoints;\n };\n Zoom.prototype.toolBarZooming = function (zoomFactor, type) {\n var map = this.maps;\n var prevLevel = map.tileZoomLevel;\n var scale = map.previousScale = map.scale;\n var maxZoom = map.zoomSettings.maxZoom;\n var minZoom = map.zoomSettings.minZoom;\n var size = map.mapAreaRect;\n zoomFactor = (type === 'ZoomOut') ? (Math.round(zoomFactor) === 1 ? 1 : zoomFactor) : zoomFactor;\n if ((!map.isTileMap) && (type === 'ZoomIn' ? zoomFactor >= minZoom && zoomFactor <= maxZoom : zoomFactor >= minZoom)) {\n var translatePoint = map.previousPoint = map.translatePoint;\n var min = map.baseMapRectBounds['min'];\n var max = map.baseMapRectBounds['max'];\n var mapWidth = Math.abs(max['x'] - min['x']);\n var mapHeight = Math.abs(min['y'] - max['y']);\n var translatePointX = translatePoint.x - (((size.width / scale) - (size.width / zoomFactor)) / 2);\n var translatePointY = translatePoint.y - (((size.height / scale) - (size.height / zoomFactor)) / 2);\n var currentHeight = Math.abs(map.baseMapRectBounds['max']['y'] - map.baseMapRectBounds['min']['y']) * zoomFactor;\n translatePointX = (currentHeight < map.mapAreaRect.height) ? (size.x + ((-(min['x'])) + ((size.width / 2) - (mapWidth / 2))))\n : translatePointX;\n translatePointY = (currentHeight < map.mapAreaRect.height) ? (size.y + ((-(min['y'])) + ((size.height / 2) - (mapHeight / 2))))\n : translatePointY;\n map.translatePoint = new Point(translatePointX, translatePointY);\n map.scale = zoomFactor;\n }\n else if ((map.isTileMap) && (zoomFactor >= minZoom && zoomFactor <= maxZoom)) {\n var tileZoomFactor = zoomFactor;\n map.scale = Math.pow(2, tileZoomFactor - 1);\n map.tileZoomLevel = tileZoomFactor;\n var position = { x: map.availableSize.width / 2, y: map.availableSize.height / 2 };\n this.getTileTranslatePosition(prevLevel, tileZoomFactor, position);\n map.mapLayerPanel.generateTiles(tileZoomFactor, map.tileTranslatePoint);\n map.translatePoint.x = (map.tileTranslatePoint.x - (0.5 * map.scale)) / map.scale;\n map.translatePoint.y = (map.tileTranslatePoint.y - (0.5 * map.scale)) / map.scale;\n }\n this.applyTransform(true);\n };\n /* tslint:disable:max-func-body-length */\n Zoom.prototype.createZoomingToolbars = function () {\n var map = this.maps;\n this.toolBarGroup = map.renderer.createGroup({\n id: map.element.id + '_Zooming_KitCollection',\n opacity: 0.3,\n });\n var kitHeight = 16;\n var kitWidth = 16;\n var xSpacing = 15;\n var ySpacing = 15;\n var padding = 20;\n var orientation = map.zoomSettings.toolBarOrientation;\n var toolbarsCollection = map.zoomSettings.toolbars;\n var shadowElement = '';\n shadowElement += '';\n shadowElement += '';\n var toolBarLength = map.zoomSettings.toolbars.length;\n var toolWidth = (map.zoomSettings.toolBarOrientation === 'Horizontal') ? (toolBarLength * kitWidth) + (toolBarLength * padding) : (kitWidth * 2);\n var toolHeight = (map.zoomSettings.toolBarOrientation === 'Horizontal') ? (kitHeight * 2) : (toolBarLength * kitHeight) + (toolBarLength * padding);\n this.toolBarGroup.appendChild(map.renderer.drawRectangle(new RectOption(map.element.id + '_Zooming_Rect', 'transparent', { color: 'transparent', width: 1 }, 1, new Rect(0, 0, toolWidth, toolHeight), 0, 0)));\n var defElement = map.renderer.createDefs();\n defElement.innerHTML = shadowElement;\n this.toolBarGroup.appendChild(defElement);\n var outerElement = map.renderer.drawRectangle(new RectOption(map.element.id + '_Zooming_Rect', 'transparent', { color: 'transparent', width: 1 }, 0.1, new Rect(0, 0, toolWidth, toolHeight), 0, 0));\n outerElement.setAttribute('filter', 'url(#chart_shadow)');\n this.toolBarGroup.appendChild(outerElement);\n var performFunction;\n for (var i = 0; i < toolbarsCollection.length; i++) {\n var toolbar_1 = toolbarsCollection[i];\n var pathOptions = void 0;\n var polyOptions = void 0;\n this.currentToolbarEle = map.renderer.createGroup({\n id: map.element.id + '_Zooming_ToolBar_' + toolbar_1 + '_Group',\n transform: 'translate( ' + xSpacing + ' ' + ySpacing + ' ) '\n });\n this.currentToolbarEle.setAttribute('class', 'e-maps-toolbar');\n var fillColor = '';\n var direction = '';\n var polygonDirection = '';\n switch (toolbar_1.toLowerCase()) {\n case 'zoom':\n direction = 'M0.001,14.629L1.372,16l4.571-4.571v-0.685l0.228-0.274c1.051,0.868,2.423,1.417,3.885,1.417c3.291,0,';\n direction += '5.943-2.651,5.943-5.943S13.395,0,10.103,0S4.16,2.651,4.16,5.943c0,1.508,0.503,2.834,1.417,3.885l-0.274,0.228H4.571';\n direction = direction + 'L0.001,14.629L0.001,14.629z M5.943,5.943c0-2.285,1.828-4.114,4.114-4.114s4.114,1.828,4.114,';\n this.currentToolbarEle.appendChild(map.renderer.drawPath(new PathOption(map.element.id + '_Zooming_ToolBar_' + toolbar_1, this.fillColor, 1, this.fillColor, 1, null, direction + '4.114s-1.828,4.114-4.114,4.114S5.943,8.229,5.943,5.943z')));\n this.zoomElements = this.currentToolbarEle;\n this.wireEvents(this.currentToolbarEle, this.performToolBarAction);\n break;\n case 'zoomin':\n direction = 'M 8, 0 L 8, 16 M 0, 8 L 16, 8';\n this.currentToolbarEle.appendChild(map.renderer.drawPath(new PathOption(map.element.id + '_Zooming_ToolBar_' + toolbar_1 + '_Path', this.fillColor, 3, this.fillColor, 1, null, direction)));\n this.zoomInElements = this.currentToolbarEle;\n this.wireEvents(this.currentToolbarEle, this.performToolBarAction);\n break;\n case 'zoomout':\n direction = 'M 0, 8 L 16, 8';\n this.currentToolbarEle.appendChild(map.renderer.drawPath(new PathOption(map.element.id + '_Zooming_ToolBar_' + toolbar_1, this.fillColor, 3, this.fillColor, 1, null, direction)));\n this.zoomOutElements = this.currentToolbarEle;\n this.wireEvents(this.currentToolbarEle, this.performToolBarAction);\n break;\n case 'pan':\n direction = 'M5,3h2.3L7.275,5.875h1.4L8.65,3H11L8,0L5,3z M3,11V8.7l2.875,0.025v-1.4L3,7.35V5L0,8L3,';\n direction += '11z M11,13H8.7l0.025-2.875h-1.4L7.35,13H5l3,3L11,13z M13,5v2.3l-2.875-0.025v1.4L13,8.65V11l3-3L13,5z';\n this.currentToolbarEle.appendChild(map.renderer.drawPath(new PathOption(map.element.id + '_Zooming_ToolBar_' + toolbar_1, this.selectionColor, 1, this.selectionColor, 1, null, direction)));\n this.panColor = this.selectionColor;\n this.panElements = this.currentToolbarEle;\n this.wireEvents(this.currentToolbarEle, this.performToolBarAction);\n break;\n case 'reset':\n direction = 'M12.364,8h-2.182l2.909,3.25L16,8h-2.182c0-3.575-2.618-6.5-5.818-6.5c-1.128,0-2.218,0.366-3.091,';\n direction += '1.016l1.055,1.178C6.581,3.328,7.272,3.125,8,3.125C10.4,3.125,12.363,5.319,12.364,8L12.364,8z M11.091,';\n direction += '13.484l-1.055-1.178C9.419,12.672,8.728,12.875,8,12.875c-2.4,0-4.364-2.194-4.364-4.875h2.182L2.909,4.75L0,8h2.182c0,';\n this.currentToolbarEle.appendChild(map.renderer.drawPath(new PathOption(map.element.id + '_Zooming_ToolBar_' + toolbar_1, this.fillColor, null, null, 1, null, direction + '3.575,2.618,6.5,5.818,6.5C9.128,14.5,10.219,14.134,11.091,13.484L11.091,13.484z')));\n this.wireEvents(this.currentToolbarEle, this.performToolBarAction);\n break;\n }\n this.currentToolbarEle.appendChild(map.renderer.drawCircle(new CircleOption(map.element.id + '_Zooming_ToolBar_' + toolbar_1 + '_Rect', 'transparent', { color: this.fillColor, width: 1 }, 1, 8, 8, 16, '')));\n xSpacing = (orientation === 'Horizontal') ? (xSpacing + (kitWidth + padding)) : xSpacing;\n ySpacing = (orientation === 'Horizontal') ? ySpacing : (ySpacing + (kitHeight + padding));\n this.toolBarGroup.appendChild(this.currentToolbarEle);\n }\n };\n Zoom.prototype.performToolBarAction = function (e) {\n var target = e.target;\n e.stopImmediatePropagation();\n var isTouch = e.pointerType === 'touch' || e.pointerType === '2' || (e.type.indexOf('touch') > -1);\n var toolbar = target.id.split('_')[3];\n if (isTouch) {\n this.handled = true;\n this.performZoomingByToolBar(toolbar);\n }\n else if ((e.type === 'mousedown' || e.type === 'pointerdown') && !this.handled) {\n this.handled = false;\n this.performZoomingByToolBar(toolbar);\n }\n else {\n this.handled = false;\n }\n };\n /**\n *\n * @private\n */\n Zoom.prototype.performZoomingByToolBar = function (type) {\n var map = this.maps;\n switch (type.toLowerCase()) {\n case 'zoom':\n this.panColor = this.fillColor;\n this.zoomColor = this.selectionColor;\n this.applySelection(this.zoomElements, this.selectionColor);\n this.applySelection(this.panElements, this.fillColor);\n break;\n case 'pan':\n this.panColor = this.selectionColor;\n this.zoomColor = this.fillColor;\n this.applySelection(this.zoomElements, this.fillColor);\n this.applySelection(this.panElements, this.selectionColor);\n break;\n case 'zoomin':\n this.toolBarZooming((map.isTileMap ? map.tileZoomLevel : map.scale) + 1, 'ZoomIn');\n break;\n case 'zoomout':\n this.toolBarZooming((map.isTileMap ? map.tileZoomLevel : map.scale) - 1, 'ZoomOut');\n break;\n case 'reset':\n this.toolBarZooming(1, 'ZoomOut');\n this.applySelection(this.zoomElements, this.fillColor);\n this.applySelection(this.panElements, this.selectionColor);\n }\n this.panningStyle(type.toLowerCase());\n };\n Zoom.prototype.panningStyle = function (toolbar) {\n var svg = getElementByID(this.maps.element.id + '_svg');\n if (toolbar === 'pan' || this.isPanning) {\n svg.setAttribute('class', 'e-maps-panning');\n }\n else {\n svg.setAttribute('class', '');\n }\n };\n Zoom.prototype.applySelection = function (elements, color) {\n if (!elements) {\n return;\n }\n var childElement;\n for (var i = 0; i < elements.childElementCount; i++) {\n childElement = elements.childNodes[i];\n if (childElement.tagName !== 'circle') {\n childElement.setAttribute('fill', color);\n childElement.setAttribute('stroke', color);\n }\n }\n };\n Zoom.prototype.showTooltip = function (e) {\n var text = e.target.id.split('_')[3];\n if (!this.isTouch) {\n createTooltip('EJ2_Map_Toolbar_Tip', this.maps.getLocalizedLabel(text), (e.pageY + 10), (e.pageX + 10), '10px');\n }\n };\n Zoom.prototype.removeTooltip = function () {\n if (getElementByID('EJ2_Map_Toolbar_Tip')) {\n remove(getElementByID('EJ2_Map_Toolbar_Tip'));\n }\n };\n Zoom.prototype.alignToolBar = function () {\n var map = this.maps;\n var padding = 10;\n var element = createElement('div', { id: map.element.id + '_ToolBar', styles: 'position:absolute;z-index:2' });\n var rectSVGObject = map.renderer.createSvg({\n id: map.element.id + '_Zooming_ToolBar', width: 10, height: 10,\n });\n rectSVGObject.appendChild(this.toolBarGroup);\n element.appendChild(rectSVGObject);\n if (getElementByID(map.element.id + '_Secondary_Element')) {\n getElementByID(map.element.id + '_Secondary_Element').appendChild(element);\n }\n var toolBarSize = this.toolBarGroup.getBoundingClientRect();\n rectSVGObject.setAttribute('height', (toolBarSize.height + padding / 2).toString());\n rectSVGObject.setAttribute('width', (toolBarSize.width + padding / 2).toString());\n var size = map.mapAreaRect;\n var x = 0;\n var y = 0;\n switch (map.zoomSettings.verticalAlignment) {\n case 'Near':\n y = size.y;\n break;\n case 'Center':\n y = (size.height / 2) - (toolBarSize.height / 2);\n break;\n case 'Far':\n y = (size.height - toolBarSize.height) - padding;\n break;\n }\n switch (map.zoomSettings.horizontalAlignment) {\n case 'Near':\n x = size.x;\n break;\n case 'Center':\n x = (size.width / 2) - (toolBarSize.width / 2);\n break;\n case 'Far':\n x = (size.width - toolBarSize.width) - padding;\n break;\n }\n element.style.left = x + 'px';\n element.style.top = y + 'px';\n var color = this.maps.zoomSettings.highlightColor;\n var css = ' .e-maps-toolbar:hover > circle { stroke:' + color + '; } .e-maps-toolbar:hover > path { fill: ' + color + ' ; stroke: ' + color + '; }';\n var style = document.createElement('style');\n style.appendChild(document.createTextNode(css));\n element.appendChild(style);\n };\n /**\n * To bind events.\n * @return {void}\n * @private\n */\n Zoom.prototype.wireEvents = function (element, process) {\n EventHandler.add(element, Browser.touchStartEvent, process, this);\n EventHandler.add(element, 'mouseover', this.showTooltip, this);\n EventHandler.add(element, 'mouseout', this.removeTooltip, this);\n };\n Zoom.prototype.mapMouseWheel = function (e) {\n if (this.maps.zoomSettings.enable && this.maps.zoomSettings.mouseWheelZoom) {\n var position = this.getMousePosition(e.pageX, e.pageY);\n var map = this.maps;\n var size = map.availableSize;\n var prevLevel = map.tileZoomLevel;\n var prevScale = map.scale;\n var delta = 1;\n var value = (map.isTileMap) ? prevLevel : prevScale;\n if (((position.x > map.mapAreaRect.x) && (position.x < (map.mapAreaRect.x + map.mapAreaRect.width))) &&\n (position.y > map.mapAreaRect.y) && position.y < (map.mapAreaRect.y + map.mapAreaRect.height)) {\n e.preventDefault();\n var direction = (this.browserName === 'mozilla' && !this.isPointer) ?\n -(e.detail) / 3 > 0 ? 'ZoomIn' : 'ZoomOut' : (e.wheelDelta / 120) > 0 ? 'ZoomIn' : 'ZoomOut';\n if (direction === 'ZoomIn') {\n this.performZooming(position, (value + delta), direction);\n }\n else {\n this.performZooming(position, (value - delta), direction);\n }\n }\n }\n };\n Zoom.prototype.doubleClick = function (e) {\n var pageX = e.pageX;\n var pageY = e.pageY;\n var target = e.target;\n if (this.maps.zoomSettings.enable && this.maps.zoomSettings.doubleClickZoom) {\n var position = this.getMousePosition(pageX, pageY);\n var map = this.maps;\n var size = map.availableSize;\n var prevLevel = map.tileZoomLevel;\n var prevScale = map.scale;\n var value = (map.isTileMap) ? prevLevel : prevScale;\n if (((position.x > map.mapAreaRect.x) && (position.x < (map.mapAreaRect.x + map.mapAreaRect.width))) &&\n (position.y > map.mapAreaRect.y) && position.y < (map.mapAreaRect.y + map.mapAreaRect.height)) {\n this.performZooming(position, (value + 1), 'ZoomIn');\n }\n }\n };\n Zoom.prototype.mouseDownHandler = function (e) {\n var pageX;\n var pageY;\n var target;\n var touches = null;\n var element = e.target;\n if (e.type === 'touchstart') {\n this.isTouch = true;\n touches = e.touches;\n target = e.target;\n pageX = touches[0].clientX;\n pageY = touches[0].clientY;\n }\n else {\n pageX = e.pageX;\n pageY = e.pageY;\n target = e.target;\n }\n this.isPanning = this.panColor === this.selectionColor ? true : this.zoomColor !== this.selectionColor;\n this.rectZoomingStart = ((!this.isPanning) && this.maps.zoomSettings.enable);\n this.mouseDownPoints = this.getMousePosition(pageX, pageY);\n if (this.isTouch) {\n this.firstMove = true;\n this.pinchFactor = this.maps.scale;\n this.fingers = touches.length;\n }\n };\n Zoom.prototype.mouseMoveHandler = function (e) {\n var pageX;\n var pageY;\n var map = this.maps;\n var touchArg;\n var target;\n var touches = null;\n var zoom = this.maps.zoomSettings;\n if (e.type === 'touchmove') {\n this.isTouch = true;\n target = e.target;\n touches = e.touches;\n pageX = touches[0].clientX;\n pageY = touches[0].clientY;\n }\n else {\n pageX = e.pageX;\n pageY = e.pageY;\n target = e.target;\n }\n if (getElementByID(map.element.id + '_Zooming_KitCollection')) {\n if (target.id.indexOf('_Zooming_') > -1) {\n getElementByID(map.element.id + '_Zooming_KitCollection').setAttribute('opacity', '1');\n }\n else {\n getElementByID(map.element.id + '_Zooming_KitCollection').setAttribute('opacity', '0.3');\n }\n }\n if (this.isTouch) {\n if (this.maps.zoomSettings.pinchZooming) {\n if (this.firstMove && touches.length === 2) {\n this.rectZoomingStart = false;\n this.updateInteraction();\n this.touchStartList = targetTouches(e);\n }\n else if (this.touchStartList.length === 2 && touches.length === 2) {\n this.touchMoveList = targetTouches(e);\n e.preventDefault();\n this.rectZoomingStart = false;\n this.performPinchZooming(e);\n }\n this.firstMove = false;\n }\n }\n this.mouseMovePoints = this.getMousePosition(pageX, pageY);\n var targetId = e.target['id'];\n var targetEle = e.target;\n if (zoom.enable && this.isPanning) {\n e.preventDefault();\n this.maps.element.style.cursor = 'pointer';\n this.panning();\n }\n if (this.isTouch ? (touches.length === 1 && this.rectZoomingStart) : this.rectZoomingStart) {\n e.preventDefault();\n this.drawZoomRectangle();\n }\n };\n Zoom.prototype.mouseUpHandler = function (e) {\n var map = this.maps;\n this.rectZoomingStart = false;\n this.isPanning = false;\n this.isTouch = false;\n this.touchStartList = [];\n this.touchMoveList = [];\n this.lastScale = 1;\n this.maps.element.style.cursor = 'auto';\n var zoomRectElement = getElementByID(this.maps.element.id + '_Selection_Rect_Zooming');\n if (zoomRectElement && this.maps.zoomSettings.enable) {\n remove(zoomRectElement);\n this.performRectZooming();\n }\n };\n Zoom.prototype.mouseCancelHandler = function (e) {\n this.isPanning = false;\n this.isTouch = false;\n this.rectZoomingStart = false;\n var zoomRectElement = getElementByID(this.maps.element.id + '_Selection_Rect_Zooming');\n if (zoomRectElement && this.maps.zoomSettings.enable) {\n remove(zoomRectElement);\n this.performRectZooming();\n }\n };\n Zoom.prototype.click = function (e) {\n var map = this.maps;\n if (map.zoomSettings.zoomOnClick && e.target.id.indexOf('_ShapeIndex_') > -1 && !map.zoomSettings.doubleClickZoom\n && (this.zoomColor === this.selectionColor && this.zoomElements)) {\n var bounds = e.target.getBBox();\n var boundwidth = bounds.width;\n var boundHeight = bounds.height;\n var layerScale = void 0;\n var baseScale = 1;\n var availWidth = map.availableSize.width;\n var availHeight = map.availableSize.height;\n layerScale = ((availWidth - 100) / (availHeight - 100) > boundwidth / boundHeight) ? (availHeight - 100) / boundHeight :\n (availWidth - 100) / boundwidth;\n var zoomFactor = (layerScale - baseScale + 1);\n var leftPos = ((availWidth / 2) - ((boundwidth * map.scale) / 2)) / layerScale;\n var topPos = ((availHeight / 2) - ((boundHeight * map.scale) / 2)) / layerScale;\n var translatePointX = (-bounds.x) + leftPos;\n var translatePointY = (-bounds.y) + topPos;\n map.previousScale = map.scale;\n map.previousPoint = map.translatePoint;\n map.scale = layerScale;\n map.translatePoint = { x: translatePointX, y: translatePointY };\n this.applyTransform(true);\n }\n };\n Zoom.prototype.getMousePosition = function (pageX, pageY) {\n var map = this.maps;\n var elementRect = map.element.getBoundingClientRect();\n var pageXOffset = map.element.ownerDocument.defaultView.pageXOffset;\n var pageYOffset = map.element.ownerDocument.defaultView.pageYOffset;\n var clientTop = map.element.ownerDocument.documentElement.clientTop;\n var clientLeft = map.element.ownerDocument.documentElement.clientLeft;\n var positionX = elementRect.left + pageXOffset - clientLeft;\n var positionY = elementRect.top + pageYOffset - clientTop;\n return new Point((pageX - positionX), (pageY - positionY));\n };\n Zoom.prototype.addEventListener = function () {\n if (this.maps.isDestroyed) {\n return;\n }\n EventHandler.add(this.maps.element, this.wheelEvent, this.mapMouseWheel, this);\n EventHandler.add(this.maps.element, 'click', this.click, this);\n EventHandler.add(this.maps.element, 'dblclick', this.doubleClick, this);\n this.maps.on(Browser.touchMoveEvent, this.mouseMoveHandler, this);\n this.maps.on(Browser.touchStartEvent, this.mouseDownHandler, this);\n this.maps.on(Browser.touchEndEvent, this.mouseUpHandler, this);\n EventHandler.add(this.maps.element, this.cancelEvent, this.mouseCancelHandler, this);\n };\n Zoom.prototype.removeEventListener = function () {\n if (this.maps.isDestroyed) {\n return;\n }\n EventHandler.remove(this.maps.element, this.wheelEvent, this.mapMouseWheel);\n EventHandler.remove(this.maps.element, 'click', this.click);\n EventHandler.remove(this.maps.element, 'dblclick', this.doubleClick);\n this.maps.off(Browser.touchMoveEvent, this.mouseMoveHandler);\n this.maps.off(Browser.touchStartEvent, this.mouseDownHandler);\n this.maps.off(Browser.touchEndEvent, this.mouseUpHandler);\n this.maps.off(this.cancelEvent, this.mouseCancelHandler);\n };\n /**\n * Get module name.\n */\n Zoom.prototype.getModuleName = function () {\n return 'Zoom';\n };\n /**\n * To destroy the zoom.\n * @return {void}\n * @private\n */\n Zoom.prototype.destroy = function (maps) {\n this.removeEventListener();\n /**\n * Destroy method performed here\n */\n };\n return Zoom;\n}());\nexport { Zoom };\n","import * as index from '@syncfusion/ej2-maps';\nindex.Maps.Inject( index.Bubble,index.Legend,index.Marker,index.Highlight,index.Selection,index.MapsTooltip,index.Zoom,index.DataLabel,index.NavigationLine,index.Annotations);\nexport * from '@syncfusion/ej2-maps';\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, ChildProperty, NotifyPropertyChanges, Animation } from '@syncfusion/ej2-base';\nimport { Browser, isNullOrUndefined as isNOU, createElement, getUniqueID, formatUnit, EventHandler } from '@syncfusion/ej2-base';\nimport { Collection, Complex, setStyleAttribute, Event, detach } from '@syncfusion/ej2-base';\nimport { attributes, extend, closest, compile as templateCompiler, classList, isUndefined } from '@syncfusion/ej2-base';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { getZindexPartial } from '@syncfusion/ej2-popups';\nvar ROOT = 'e-toast';\nvar CONTAINER = 'e-toast-container';\nvar TITLE = 'e-toast-title';\nvar WIDTHFULL = 'e-toast-full-width';\nvar CONTENT = 'e-toast-content';\nvar MESSAGE = 'e-toast-message';\nvar ICON = 'e-toast-icon';\nvar PROGRESS = 'e-toast-progress';\nvar ACTIOBUTTONS = 'e-toast-actions';\nvar CLOSEBTN = 'e-toast-close-icon';\nvar RTL = 'e-rtl';\n/**\n * An object that is used to configure the Toast X Y positions.\n */\nvar ToastPosition = /** @class */ (function (_super) {\n __extends(ToastPosition, _super);\n function ToastPosition() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Left')\n ], ToastPosition.prototype, \"X\", void 0);\n __decorate([\n Property('Top')\n ], ToastPosition.prototype, \"Y\", void 0);\n return ToastPosition;\n}(ChildProperty));\nexport { ToastPosition };\n/**\n * An object that is used to configure the action button model properties and event.\n */\nvar ButtonModelProps = /** @class */ (function (_super) {\n __extends(ButtonModelProps, _super);\n function ButtonModelProps() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], ButtonModelProps.prototype, \"model\", void 0);\n __decorate([\n Property(null)\n ], ButtonModelProps.prototype, \"click\", void 0);\n return ButtonModelProps;\n}(ChildProperty));\nexport { ButtonModelProps };\n/**\n * An object that is used to configure the animation object of Toast.\n */\nvar ToastAnimations = /** @class */ (function (_super) {\n __extends(ToastAnimations, _super);\n function ToastAnimations() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('FadeIn')\n ], ToastAnimations.prototype, \"effect\", void 0);\n __decorate([\n Property(600)\n ], ToastAnimations.prototype, \"duration\", void 0);\n __decorate([\n Property('ease')\n ], ToastAnimations.prototype, \"easing\", void 0);\n return ToastAnimations;\n}(ChildProperty));\nexport { ToastAnimations };\n/**\n * An object that is used to configure the show/hide animation settings of Toast.\n */\nvar ToastAnimationSettings = /** @class */ (function (_super) {\n __extends(ToastAnimationSettings, _super);\n function ToastAnimationSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({ effect: 'FadeIn', duration: 600, easing: 'ease' }, ToastAnimations)\n ], ToastAnimationSettings.prototype, \"show\", void 0);\n __decorate([\n Complex({ effect: 'FadeOut', duration: 600, easing: 'ease' }, ToastAnimations)\n ], ToastAnimationSettings.prototype, \"hide\", void 0);\n return ToastAnimationSettings;\n}(ChildProperty));\nexport { ToastAnimationSettings };\n/**\n * The Toast is a notification pop-up that showing on desired position which can provide an information to the user.\n * * ```html\n *
    \n * \n * ```\n */\nvar Toast = /** @class */ (function (_super) {\n __extends(Toast, _super);\n /**\n * Initializes a new instance of the Toast class.\n * @param options - Specifies Toast model properties as options.\n * @param element - Specifies the element that is rendered as a Toast.\n */\n function Toast(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Gets the Component module name.\n * @private\n */\n Toast.prototype.getModuleName = function () {\n return 'toast';\n };\n /**\n * Gets the persisted state properties of the Component.\n */\n Toast.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers, attributes and classes.\n */\n Toast.prototype.destroy = function () {\n this.hide('All');\n this.element.classList.remove(CONTAINER);\n setStyleAttribute(this.element, { 'position': '', 'z-index': '' });\n _super.prototype.destroy.call(this);\n };\n /**\n * Initialize the event handler\n * @private\n */\n Toast.prototype.preRender = function () {\n //There is no event handler\n if (this.enableRtl) {\n this.element.classList.add(RTL);\n }\n };\n /**\n * Initialize the component rendering\n * @private\n */\n Toast.prototype.render = function () {\n this.progressObj = [];\n this.intervalId = [];\n this.titleTemplate = null;\n this.contentTemplate = null;\n this.toastTemplate = null;\n };\n /**\n * To show Toast element on screen.\n * @param {ToastModel} toastObj?\n * @returns void\n */\n Toast.prototype.show = function (toastObj) {\n if (!isNOU(toastObj)) {\n this.templateChanges(toastObj);\n extend(this, this, toastObj);\n }\n if (isNOU(this.toastContainer)) {\n this.toastContainer = this.getContainer();\n var target = typeof (this.target) === 'string' ? document.querySelector(this.target) : this.target;\n if (isNOU(target)) {\n return;\n }\n if (target.tagName === 'BODY') {\n this.toastContainer.style.position = 'fixed';\n }\n else {\n this.toastContainer.style.position = 'absolute';\n target.style.position = 'relative';\n }\n this.setPositioning(this.position);\n target.appendChild(this.toastContainer);\n }\n this.toastEle = createElement('div', { className: ROOT, id: getUniqueID('toast') });\n this.setWidthHeight();\n this.setCSSClass(this.cssClass);\n isNOU(this.template) || this.template.length === 0 ? this.personalizeToast() : this.templateRendering();\n this.setProgress();\n this.setCloseButton();\n this.setAria();\n this.appendToTarget();\n };\n Toast.prototype.templateChanges = function (toastObj) {\n if (!isUndefined(toastObj.content) && !isNOU(this.contentTemplate) && this.content !== toastObj.content) {\n this.clearContentTemplate();\n }\n if (!isUndefined(toastObj.title) && !isNOU(this.titleTemplate) && this.title !== toastObj.title) {\n this.clearTitleTemplate();\n }\n if (!isUndefined(toastObj.template) && !isNOU(this.toastTemplate) && this.template !== toastObj.template) {\n this.clearToastTemplate();\n }\n };\n Toast.prototype.setCSSClass = function (cssClass) {\n if (!isNOU(cssClass)) {\n var split = cssClass.indexOf(',') !== -1 ? ',' : ' ';\n classList(this.toastEle, cssClass.split(split), []);\n }\n };\n Toast.prototype.setWidthHeight = function () {\n if (this.width === '300px') {\n this.toastEle.style.width = formatUnit(this.width);\n }\n else if (this.width === '100%') {\n this.toastContainer.classList.add(WIDTHFULL);\n }\n else {\n this.toastEle.style.width = formatUnit(this.width);\n this.toastContainer.classList.remove(WIDTHFULL);\n }\n this.toastEle.style.height = formatUnit(this.height);\n };\n Toast.prototype.templateRendering = function () {\n this.fetchEle(this.toastEle, this.template, 'template');\n };\n Toast.prototype.hide = function (element) {\n if (isNOU(this.toastContainer) || this.toastContainer.childElementCount === 0) {\n return;\n }\n if (typeof element === 'string' && element === 'All') {\n for (var i = 0; i < this.toastContainer.childElementCount; i++) {\n this.destroyToast(this.toastContainer.children[i]);\n }\n return;\n }\n if (isNOU(element)) {\n element = (this.newestOnTop ? this.toastContainer.lastElementChild : this.toastContainer.firstElementChild);\n }\n this.destroyToast(element);\n };\n Toast.prototype.fetchEle = function (ele, value, prob) {\n var templateFn;\n var tempVar;\n var tempArray;\n prob === 'title' ? tempVar = this.titleTemplate : prob === 'content' ? tempVar = this.contentTemplate : tempVar = this.toastTemplate;\n if (!isNOU(tempVar)) {\n ele.appendChild(tempVar.cloneNode(true));\n return ele;\n }\n try {\n if (document.querySelectorAll(value).length > 0) {\n var elem = document.querySelector(value);\n ele.appendChild(elem);\n elem.style.display = '';\n var clo = elem.cloneNode(true);\n prob === 'title' ? this.titleTemplate = clo : prob === 'content' ? this.contentTemplate = clo : this.toastTemplate = clo;\n }\n }\n catch (e) {\n templateFn = templateCompiler(value);\n }\n if (!isNOU(templateFn)) {\n tempArray = templateFn({}, this, prob);\n }\n if (!isNOU(tempArray) && tempArray.length > 0 && !(isNOU(tempArray[0].tagName) && tempArray.length === 1)) {\n [].slice.call(tempArray).forEach(function (el) {\n if (!isNOU(el.tagName)) {\n el.style.display = '';\n }\n ele.appendChild(el);\n });\n }\n else if (ele.childElementCount === 0) {\n ele.innerHTML = value;\n }\n return ele;\n };\n Toast.prototype.clearProgress = function (intervalId) {\n if (!isNOU(this.intervalId[intervalId])) {\n clearInterval(this.intervalId[intervalId]);\n delete this.intervalId[intervalId];\n }\n if (!isNOU(this.progressObj[intervalId])) {\n clearInterval(this.progressObj[intervalId].intervalId);\n delete this.progressObj[intervalId];\n }\n };\n Toast.prototype.clearContainerPos = function () {\n var _this = this;\n if (this.customPosition) {\n setStyleAttribute(this.toastContainer, { 'left': '', 'top': '' });\n this.toastContainer = null;\n this.customPosition = false;\n }\n else {\n [ROOT + '-top-left',\n ROOT + '-top-right',\n ROOT + '-bottom-left',\n ROOT + '-bottom-right',\n ROOT + '-bottom-center',\n ROOT + '-top-center',\n ROOT + '-full-width'].forEach(function (pos) {\n if (!isNOU(_this.toastContainer) && _this.toastContainer.classList.contains(pos)) {\n _this.toastContainer.classList.remove(pos);\n }\n });\n this.toastContainer = null;\n }\n if (!isNOU(this.titleTemplate)) {\n this.clearTitleTemplate();\n }\n if (!isNOU(this.contentTemplate)) {\n this.clearContentTemplate();\n }\n if (!isNOU(this.toastTemplate)) {\n this.clearToastTemplate();\n }\n };\n Toast.prototype.clearTitleTemplate = function () {\n this.titleTemplate.style.display = 'none';\n document.body.appendChild(this.titleTemplate);\n this.titleTemplate = null;\n };\n Toast.prototype.clearContentTemplate = function () {\n this.contentTemplate.style.display = 'none';\n document.body.appendChild(this.contentTemplate);\n this.contentTemplate = null;\n };\n Toast.prototype.clearToastTemplate = function () {\n this.toastTemplate.style.display = 'none';\n document.body.appendChild(this.toastTemplate);\n this.toastTemplate = null;\n };\n Toast.prototype.destroyToast = function (toastEle) {\n var _this = this;\n var hideAnimate = this.animation.hide;\n var animate = {\n duration: hideAnimate.duration, name: hideAnimate.effect, timingFunction: hideAnimate.easing\n };\n var intervalId = parseInt(toastEle.id.split('toast_')[1], 10);\n var toastClose = {\n toastContainer: this.toastContainer,\n toastObj: this,\n };\n if (!isNOU(this.progressObj[intervalId]) && !isNOU(toastEle.querySelector('.' + PROGRESS))) {\n this.progressObj[intervalId].progressEle.style.width = '0%';\n }\n animate.end = function () {\n _this.clearProgress(intervalId);\n detach(toastEle);\n _this.trigger('close', toastClose);\n if (_this.toastContainer.childElementCount === 0) {\n _this.clearContainerPos();\n }\n };\n new Animation({}).animate(toastEle, animate);\n };\n Toast.prototype.personalizeToast = function () {\n this.setIcon();\n this.setTitle();\n this.setContent();\n this.actionButtons();\n };\n Toast.prototype.setAria = function () {\n attributes(this.toastEle, { 'role': 'alert' });\n };\n Toast.prototype.setPositioning = function (pos) {\n if (typeof (pos.X) === 'number' || typeof (pos.Y) === 'number' || pos.X.indexOf('%') !== -1 || pos.Y.indexOf('%') !== -1) {\n setStyleAttribute(this.toastContainer, { 'left': formatUnit(pos.X), 'top': formatUnit(pos.Y) });\n this.customPosition = true;\n }\n else {\n this.toastContainer.classList.add(ROOT + '-' + pos.Y.toString().toLowerCase() + '-' + pos.X.toString().toLowerCase());\n }\n };\n Toast.prototype.setCloseButton = function () {\n if (!this.showCloseButton) {\n return;\n }\n var closeBtn = createElement('div', { className: CLOSEBTN + ' e-icons ' });\n this.toastEle.appendChild(closeBtn);\n };\n Toast.prototype.setProgress = function () {\n if (this.timeOut > 0) {\n var id = parseInt(this.toastEle.id.split('toast_')[1], 10);\n this.intervalId[id] = window.setTimeout(this.destroyToast.bind(this, this.toastEle), this.timeOut);\n this.progressObj[id] = { hideEta: null, intervalId: null, maxHideTime: null, element: null, timeOutId: null, progressEle: null };\n this.progressObj[id].maxHideTime = parseFloat(this.timeOut + '');\n this.progressObj[id].hideEta = new Date().getTime() + this.progressObj[id].maxHideTime;\n this.progressObj[id].element = this.toastEle;\n if (this.extendedTimeout > 0) {\n EventHandler.add(this.toastEle, 'mouseover', this.toastHoverAction.bind(this, id));\n EventHandler.add(this.toastEle, 'mouseleave', this.delayedToastProgress.bind(this, id));\n this.progressObj[id].timeOutId = this.intervalId[id];\n }\n if (this.showProgressBar) {\n this.progressBarEle = createElement('div', { className: PROGRESS });\n this.toastEle.insertBefore(this.progressBarEle, this.toastEle.children[0]);\n this.progressObj[id].intervalId = setInterval(this.updateProgressBar.bind(this, this.progressObj[id]), 10);\n this.progressObj[id].progressEle = this.progressBarEle;\n }\n }\n };\n Toast.prototype.toastHoverAction = function (id) {\n clearTimeout(this.progressObj[id].timeOutId);\n clearInterval(this.progressObj[id].intervalId);\n this.progressObj[id].hideEta = 0;\n var toastEle = this.progressObj[id].element;\n if (!isNOU(toastEle.querySelector('.' + PROGRESS))) {\n this.progressObj[id].progressEle.style.width = '0%';\n }\n };\n Toast.prototype.delayedToastProgress = function (id) {\n var progress = this.progressObj[id];\n var toastEle = progress.element;\n progress.timeOutId = window.setTimeout(this.destroyToast.bind(this, toastEle), this.extendedTimeout);\n progress.maxHideTime = parseFloat(this.extendedTimeout + '');\n progress.hideEta = new Date().getTime() + progress.maxHideTime;\n if (!isNOU(toastEle.querySelector('.' + PROGRESS))) {\n progress.intervalId = setInterval(this.updateProgressBar.bind(this, progress), 10);\n }\n };\n Toast.prototype.updateProgressBar = function (progressObj) {\n var percentage = ((progressObj.hideEta - (new Date().getTime())) / progressObj.maxHideTime) * 100;\n progressObj.progressEle.style.width = percentage + '%';\n };\n Toast.prototype.setIcon = function () {\n if (isNOU(this.icon) || this.icon.length === 0) {\n return;\n }\n var iconEle = createElement('div', { className: ICON + ' e-icons ' + this.icon });\n this.toastEle.appendChild(iconEle);\n };\n Toast.prototype.setTitle = function () {\n if (isNOU(this.title) || this.title.length === 0) {\n return;\n }\n var titleEle = createElement('div', { className: TITLE });\n titleEle = this.fetchEle(titleEle, this.title, 'title');\n var msgContainer = createElement('div', { className: MESSAGE });\n msgContainer.appendChild(titleEle);\n this.toastEle.appendChild(msgContainer);\n };\n Toast.prototype.setContent = function () {\n if (isNOU(this.content) || this.content.length === 0) {\n return;\n }\n var contentEle = createElement('div', { className: CONTENT });\n contentEle = this.fetchEle(contentEle, this.content, 'content');\n this.appendMessageContainer(contentEle);\n };\n Toast.prototype.appendMessageContainer = function (element) {\n if (this.toastEle.querySelectorAll('.' + MESSAGE).length > 0) {\n this.toastEle.querySelector('.' + MESSAGE).appendChild(element);\n }\n else {\n var msgContainer = createElement('div', { className: MESSAGE });\n msgContainer.appendChild(element);\n this.toastEle.appendChild(msgContainer);\n }\n };\n Toast.prototype.actionButtons = function () {\n var actionBtnContainer = createElement('div', { className: ACTIOBUTTONS });\n [].slice.call(this.buttons).forEach(function (actionBtn) {\n if (isNOU(actionBtn.model)) {\n return;\n }\n var btnDom = createElement('button');\n btnDom.setAttribute('type', 'button');\n if (isNOU(actionBtn.model.cssClass) || actionBtn.model.cssClass.length === 0) {\n actionBtn.model.cssClass = 'e-primary';\n }\n btnDom.classList.add('e-small');\n new Button(actionBtn.model, btnDom);\n if (!isNOU(actionBtn.click) && typeof (actionBtn.click) === 'function') {\n EventHandler.add(btnDom, 'click', actionBtn.click);\n }\n actionBtnContainer.appendChild(btnDom);\n });\n if (actionBtnContainer.childElementCount > 0) {\n this.appendMessageContainer(actionBtnContainer);\n }\n };\n Toast.prototype.appendToTarget = function () {\n var toastBeforeOpen = {\n toastObj: this,\n element: this.toastEle,\n cancel: false\n };\n this.trigger('beforeOpen', toastBeforeOpen);\n if (toastBeforeOpen.cancel) {\n return;\n }\n this.toastEle.style.display = 'none';\n if (this.newestOnTop && this.toastContainer.childElementCount !== 0) {\n this.toastContainer.insertBefore(this.toastEle, this.toastContainer.children[0]);\n }\n else {\n this.toastContainer.appendChild(this.toastEle);\n }\n EventHandler.add(this.toastEle, 'click', this.clickHandler, this);\n this.toastContainer.style.zIndex = getZindexPartial(this.toastContainer) + '';\n this.displayToast(this.toastEle);\n };\n Toast.prototype.clickHandler = function (e) {\n var target = e.target;\n var toastEle = closest(target, '.' + ROOT);\n var clickArgs = {\n element: toastEle, cancel: false, clickToClose: false, originalEvent: e, toastObj: this\n };\n var isCloseIcon = target.classList.contains(CLOSEBTN);\n this.trigger('click', clickArgs);\n if ((isCloseIcon && !clickArgs.cancel) || clickArgs.clickToClose) {\n this.destroyToast(toastEle);\n }\n };\n Toast.prototype.displayToast = function (toastEle) {\n var _this = this;\n var showAnimate = this.animation.show;\n var animate = {\n duration: showAnimate.duration, name: showAnimate.effect, timingFunction: showAnimate.easing\n };\n var toastOpen = {\n toastObj: this,\n element: this.toastEle,\n };\n animate.begin = function () {\n toastEle.style.display = '';\n };\n animate.end = function () {\n _this.trigger('open', toastOpen);\n };\n new Animation(animate).animate(toastEle);\n };\n Toast.prototype.getContainer = function () {\n this.element.classList.add(CONTAINER);\n return this.element;\n };\n /**\n * Called internally if any of the property value changed.\n * @private\n */\n Toast.prototype.onPropertyChanged = function (newProp, oldProp) {\n var container = this.element;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'enableRtl':\n newProp.enableRtl ? container.classList.add(RTL) : container.classList.remove(RTL);\n break;\n }\n }\n };\n __decorate([\n Property((Browser.isDevice && screen.width < 768) ? '100%' : '300px')\n ], Toast.prototype, \"width\", void 0);\n __decorate([\n Property('auto')\n ], Toast.prototype, \"height\", void 0);\n __decorate([\n Property(null)\n ], Toast.prototype, \"title\", void 0);\n __decorate([\n Property(null)\n ], Toast.prototype, \"content\", void 0);\n __decorate([\n Property(null)\n ], Toast.prototype, \"icon\", void 0);\n __decorate([\n Property(null)\n ], Toast.prototype, \"cssClass\", void 0);\n __decorate([\n Property(null)\n ], Toast.prototype, \"template\", void 0);\n __decorate([\n Property(true)\n ], Toast.prototype, \"newestOnTop\", void 0);\n __decorate([\n Property(false)\n ], Toast.prototype, \"showCloseButton\", void 0);\n __decorate([\n Property(false)\n ], Toast.prototype, \"showProgressBar\", void 0);\n __decorate([\n Property(5000)\n ], Toast.prototype, \"timeOut\", void 0);\n __decorate([\n Property(1000)\n ], Toast.prototype, \"extendedTimeout\", void 0);\n __decorate([\n Complex({}, ToastAnimationSettings)\n ], Toast.prototype, \"animation\", void 0);\n __decorate([\n Complex({}, ToastPosition)\n ], Toast.prototype, \"position\", void 0);\n __decorate([\n Collection([{}], ButtonModelProps)\n ], Toast.prototype, \"buttons\", void 0);\n __decorate([\n Property(document.body)\n ], Toast.prototype, \"target\", void 0);\n __decorate([\n Event()\n ], Toast.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Toast.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], Toast.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], Toast.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], Toast.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], Toast.prototype, \"click\", void 0);\n Toast = __decorate([\n NotifyPropertyChanges\n ], Toast);\n return Toast;\n}(Component));\nexport { Toast };\n","/**\n * This is a file to perform common utility for OLAP and Relational datasource\n * @hidden\n */\nvar PivotUtil = /** @class */ (function () {\n function PivotUtil() {\n }\n PivotUtil.getType = function (value) {\n var val;\n val = (value && value.getDay) ? (value.getHours() > 0 || value.getMinutes() > 0 ||\n value.getSeconds() > 0 || value.getMilliseconds() > 0 ? 'datetime' : 'date') : typeof (value);\n return val;\n };\n return PivotUtil;\n}());\nexport { PivotUtil };\n","import { extend, Internationalization } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { PivotUtil } from './util';\n/**\n * PivotEngine is used to manipulate the relational or Multi-Dimensional data as pivoting values.\n */\n/** @hidden */\nvar PivotEngine = /** @class */ (function () {\n /**\n * Constructor for PivotEngine class\n * @param {DataOptions} dataSource?\n * @param {string} mode?\n * @hidden\n */\n function PivotEngine(dataSource, mode, savedFieldList) {\n /** @hidden */\n this.formatFields = {};\n /** @hidden */\n this.calculatedFields = {};\n /** @hidden */\n this.calculatedFormulas = {};\n this.valueMatrix = [];\n this.indexMatrix = [];\n var fields;\n var val;\n var filterRw;\n this.globalize = new Internationalization();\n this.enableSort = true;\n fields = dataSource.data[0];\n this.fields = Object.keys(fields);\n this.rows = dataSource.rows ? dataSource.rows : [];\n this.columns = dataSource.columns ? dataSource.columns : [];\n this.filters = dataSource.filters ? dataSource.filters : [];\n this.drilledMembers = dataSource.drilledMembers ? dataSource.drilledMembers : [];\n this.formats = dataSource.formatSettings ? dataSource.formatSettings : [];\n this.values = dataSource.values ? dataSource.values : [];\n this.calculatedFieldSettings = dataSource.calculatedFieldSettings ? dataSource.calculatedFieldSettings : [];\n this.enableSort = dataSource.enableSorting === undefined ? true : dataSource.enableSorting;\n this.isExpandAll = dataSource.expandAll;\n this.isMutiMeasures = this.values.length > 1 ? true : false;\n this.valueSortSettings = dataSource.valueSortSettings ||\n { sortOrder: 'None', headerDelimiter: '.', headerText: '', columnIndex: undefined };\n this.valueSortData = [];\n this.savedFieldList = savedFieldList;\n this.getFieldList(fields, this.enableSort);\n this.fillFieldMembers(dataSource.data, this.indexMatrix);\n this.updateSortSettings(dataSource.sortSettings, this.enableSort);\n this.pageSettings = dataSource.pageSettings;\n this.valueMatrix = this.generateValueMatrix(dataSource.data);\n this.filterMembers = [];\n this.updateFilterMembers(dataSource);\n this.generateGridData(dataSource);\n return this;\n }\n PivotEngine.prototype.sortByValue = function (valueSort, sortOrder, columnIndex) {\n var sort = false;\n var vlen = valueSort.length;\n for (var j = 0; j < vlen; j++) {\n for (var k = j; k < vlen; k++) {\n if (sortOrder === 'Descending') {\n sort = valueSort[j].rowData[columnIndex].value < valueSort[k].rowData[columnIndex].value;\n }\n else {\n sort = valueSort[j].rowData[columnIndex].value > valueSort[k].rowData[columnIndex].value;\n }\n if (sort) {\n var temp = {};\n temp = valueSort[j];\n valueSort[j] = valueSort[k];\n valueSort[k] = temp;\n }\n }\n if (valueSort[j].childMembers.length > 0) {\n this.sortByValue(valueSort[j].childMembers, sortOrder, columnIndex);\n }\n }\n };\n PivotEngine.prototype.iterateValueSortData = function (valueSort, data) {\n var vlen = valueSort.length;\n for (var j = 0; j < vlen; j++) {\n data[data.length] = (valueSort[j].rowData);\n if (valueSort[j].childMembers.length > 0) {\n this.iterateValueSortData(valueSort[j].childMembers, data);\n }\n }\n };\n PivotEngine.prototype.getFormattedFields = function (fields) {\n var cnt = this.formats.length;\n while (cnt--) {\n for (var len = 0, lnt = fields.length; len < lnt; len++) {\n if (fields[len] && fields[len].name === this.formats[cnt].name) {\n this.formatFields[fields[len].name] = this.formats[cnt];\n }\n }\n }\n };\n PivotEngine.prototype.getFieldList = function (fields, isSort) {\n var type;\n var keys = this.fields;\n var dataFields = extend([], this.rows, null, true);\n dataFields = dataFields.concat(this.columns, this.values, this.filters);\n this.getFormattedFields(dataFields);\n this.getCalculatedField(keys);\n var len = keys.length;\n if (this.savedFieldList) {\n this.fieldList = this.savedFieldList;\n while (len--) {\n var key = keys[len];\n if (this.fieldList[key]) {\n this.fieldList[key].isSelected = false;\n this.fieldList[key].index = len;\n this.fieldList[key].filter = [];\n }\n else {\n this.fieldList[key] = {\n id: key,\n caption: key,\n type: (type === undefined || type === 'undefined') ? 'number' : type,\n index: len,\n filter: [],\n sort: isSort ? 'Ascending' : 'None',\n isSelected: false\n };\n }\n }\n }\n else {\n while (len--) {\n var key = keys[len];\n type = PivotUtil.getType(fields[key]);\n if (!this.fieldList) {\n this.fieldList = {};\n }\n this.fieldList[key] = {\n id: key,\n caption: key,\n type: (type === undefined || type === 'undefined') ? 'number' : type,\n index: len,\n filter: [],\n sort: isSort ? 'Ascending' : 'None',\n isSelected: false\n };\n }\n }\n this.updateTreeViewData(dataFields);\n };\n PivotEngine.prototype.updateTreeViewData = function (fields) {\n var cnt = fields.length;\n var lnt = this.calculatedFieldSettings.length;\n while (cnt--) {\n if (this.fieldList[fields[cnt].name]) {\n this.fieldList[fields[cnt].name].caption = fields[cnt].caption ? fields[cnt].caption : fields[cnt].name;\n this.fieldList[fields[cnt].name].isSelected = true;\n this.fieldList[fields[cnt].name].aggregateType = fields[cnt].type;\n }\n }\n while (lnt--) {\n this.fieldList[this.calculatedFieldSettings[lnt].name].aggregateType = 'CalculatedField';\n this.fieldList[this.calculatedFieldSettings[lnt].name].formula = this.calculatedFieldSettings[lnt].formula;\n }\n };\n PivotEngine.prototype.getCalculatedField = function (keys) {\n for (var _i = 0, _a = this.calculatedFieldSettings; _i < _a.length; _i++) {\n var field = _a[_i];\n this.calculatedFields[field.name] = extend({}, field, null, true);\n this.calculatedFields[field.name].actualFormula = field.formula;\n }\n var fieldKeys = Object.keys(this.calculatedFields);\n for (var calc = 0, cnt = fieldKeys.length; calc < cnt; calc++) {\n var field = this.calculatedFields[fieldKeys[calc]];\n var calcProperties = field.properties;\n var actualFormula = (calcProperties ? calcProperties.formula : field.formula).replace(/ +/g, '');\n var formula = actualFormula.replace(/\"/g, '');\n field.formula = formula.indexOf('^') > -1 ? this.powerFunction(formula) : formula;\n field.name = calcProperties ? calcProperties.name : field.name;\n keys.push(field.name);\n var formulaType = actualFormula.split('\\\"');\n for (var len = 0, lmt = formulaType.length; len < lmt; len++) {\n var type = formulaType[len];\n var aggregateValue = type.split(/[ .:;?!~,`\"&|()<>{}\\[\\]\\r\\n/\\\\]+/);\n if (['Sum', 'Count', 'Min', 'Max', 'Avg'].indexOf(aggregateValue[0]) !== -1) {\n var index = keys.indexOf(aggregateValue[1]);\n if (!this.calculatedFormulas[field.name]) {\n this.calculatedFormulas[field.name] = [{\n index: index,\n type: aggregateValue[0],\n formula: type,\n }];\n }\n else {\n this.calculatedFormulas[field.name].push({\n index: index,\n type: aggregateValue[0],\n formula: type,\n });\n }\n }\n }\n }\n };\n PivotEngine.prototype.fillFieldMembers = function (data, indMat) {\n var keys = this.fields;\n var dlen = data.length;\n var fList = this.fieldList;\n var kLn = keys.length;\n for (var kl = 0; kl < kLn; kl++) {\n var key = keys[kl];\n if (!fList[key].members) {\n fList[key].members = {};\n }\n if (!fList[key].formattedMembers) {\n fList[key].formattedMembers = {};\n }\n if (!fList[key].dateMember) {\n fList[key].dateMember = [];\n }\n var members = fList[key].members;\n var isDataAvail = Object.keys(members).length > 0 ? true : false;\n var formattedMembers = fList[key].formattedMembers;\n var dateMember = fList[key].dateMember;\n //let sort: string[] = [];\n for (var dl = 0; dl < dlen; dl++) {\n var mkey = data[dl][key];\n if (!isDataAvail) {\n var fKey = mkey;\n var formattedValue = this.getFormattedValue(mkey, key);\n if (formattedValue.formattedText) {\n fKey = formattedValue.formattedText;\n }\n if (!members.hasOwnProperty(mkey)) {\n members[mkey] = {\n index: [dl], ordinal: Object.keys(members).length,\n isDrilled: this.isExpandAll ? true : false\n };\n dateMember.push({ formattedText: formattedValue.formattedText, actualText: formattedValue.actualText });\n //sort.push(mkey);\n }\n else {\n members[mkey].index.push(dl);\n }\n if (!formattedMembers.hasOwnProperty(fKey)) {\n formattedMembers[fKey] = {\n index: [dl], ordinal: Object.keys(formattedMembers).length,\n isDrilled: this.isExpandAll ? true : false\n };\n }\n else {\n formattedMembers[fKey].index.push(dl);\n }\n }\n if (!(indMat[dl])) {\n indMat[dl] = [];\n indMat[dl][kl] = members[mkey].ordinal;\n }\n else {\n indMat[dl][kl] = members[mkey].ordinal;\n }\n }\n /*sort = Object.keys(members).sort();\n let sortedMembers: Members = {};\n for (let sln: number = 0, slt: number = sort.length; sln < slt; sln++) {\n sortedMembers[sort[sln]] = members[sort[sln]];\n }\n fList[key].members = sortedMembers; */\n }\n this.fillDrilledInfo();\n };\n PivotEngine.prototype.fillDrilledInfo = function () {\n for (var key = 0; key < this.drilledMembers.length; key++) {\n var fieldName = this.drilledMembers[key].name;\n for (var mem = 0; mem < this.drilledMembers[key].items.length; mem++) {\n var memberName = this.drilledMembers[key].items[mem];\n var field = this.fieldList[fieldName];\n if (field && field.members[memberName]) {\n field.members[memberName].isDrilled = this.isExpandAll ? false : true;\n }\n }\n }\n };\n PivotEngine.prototype.generateValueMatrix = function (data) {\n var keys = this.fields;\n var len = data.length;\n var vMat = [];\n var keyLen = keys.length;\n var flList = this.fieldList;\n while (len--) {\n var record = data[len];\n var tkln = keyLen;\n //if (isNullOrUndefined(vMat[len])) {\n vMat[len] = [];\n //}\n while (tkln--) {\n var key = keys[tkln];\n vMat[len][tkln] = (flList[key].type === 'number') ? data[len][key] : 1;\n }\n }\n return vMat;\n };\n PivotEngine.prototype.updateSortSettings = function (sortSettings, isSort) {\n for (var sln = 0, slt = sortSettings ? sortSettings.length : 0; sln < slt && isSort; sln++) {\n this.fieldList[sortSettings[sln].name].sort = sortSettings[sln].order;\n }\n };\n PivotEngine.prototype.updateFilterMembers = function (source) {\n var filterRw = this.filterMembers;\n var list = {};\n //let eList: {[key: string] : number} = {};\n var isInclude = this.getFilters(source, list);\n //this.getFilterExcludeList(source.rows, flist);\n //this.getFilterExcludeList(source.columns, flist);\n //this.getFilterExcludeList(source.filters, flist);\n // let filters: Iterator = isInclude ? iList : eList;\n var dln = this.indexMatrix.length;\n if (isInclude) {\n var keys = list.include.index;\n for (var ln = 0; ln < keys.length; ln++) {\n if (list.exclude === undefined || list.exclude.indexObject[keys[ln]] === undefined) {\n filterRw.push(keys[ln]);\n }\n }\n }\n else {\n for (var ln = 0; ln < dln; ln++) {\n if (list.exclude === undefined || list.exclude.indexObject[ln] === undefined) {\n filterRw.push(ln);\n }\n }\n }\n };\n PivotEngine.prototype.getFilters = function (source, ilist) {\n var filterElements = source.filterSettings ? source.filterSettings : [];\n var filters = this.filters;\n var isInclude = false;\n var filter = [];\n //let type: string;\n for (var rln = 0, rlt = filterElements.length; rln < rlt; rln++) {\n filter = filterElements[rln] ? filterElements[rln].items : [];\n if (this.fieldList[filterElements[rln].name].isSelected) {\n if (filter.length && filterElements[rln].type && filterElements[rln].type === 'include') {\n this.frameFilterList(filter, filterElements[rln].name, ilist, 'include', isInclude);\n isInclude = true;\n }\n else {\n this.frameFilterList(filter, filterElements[rln].name, ilist, 'exclude');\n }\n }\n }\n /* for (let cln: number = 0, clt: number = cols.length; cln < clt; cln ++) {\n filter = cols[cln].filter ? cols[cln].filter.items : [];\n if (filter.length && cols[cln].filter.type && cols[cln].filter.type === 'include') {\n //type = cols[cln].filter.type;\n this.frameFilterList(filter, cols[cln].name, ilist, 'include', isInclude);\n isInclude = true;\n } else {\n this.frameFilterList(filter, cols[cln].name, ilist, 'exclude');\n }\n }\n for (let vln: number = 0, vlt: number = filters.length; vln < vlt; vln ++) {\n filter = filters[vln].filter ? filters[vln].filter.items : [];\n if (filter.length && filters[vln].filter.type && filters[vln].filter.type === 'include') {\n this.frameFilterList(filter, filters[vln].name, ilist, 'include', isInclude);\n isInclude = true;\n } else {\n this.frameFilterList(filter, filters[vln].name, ilist, 'exclude');\n }\n } */\n return isInclude;\n };\n PivotEngine.prototype.frameFilterList = function (filter, name, list, type, isInclude) {\n var _this = this;\n var updateFilter = function () {\n var fln = 0;\n var field = _this.fieldList[name];\n field.filter = filter;\n field.type = type;\n var members = field.formattedMembers;\n var allowFil = isInclude;\n var final = {};\n final[type] = { indexObject: {}, index: [] };\n while (filter[fln]) {\n var indx = members[filter[fln]].index;\n if (type === 'include') {\n for (var iln = 0, ilt = indx.length; iln < ilt; iln++) {\n if (!allowFil || list[type].indexObject[indx[iln]] !== undefined) {\n final[type].indexObject[indx[iln]] = indx[iln];\n final[type].index.push(indx[iln]);\n }\n }\n }\n else {\n for (var iln = 0, ilt = indx.length; iln < ilt; iln++) {\n if (list[type].indexObject[indx[iln]] === undefined) {\n list[type].indexObject[indx[iln]] = indx[iln];\n list[type].index.push(indx[iln]);\n }\n }\n }\n fln++;\n }\n if (type === 'include') {\n list[type] = final[type];\n }\n };\n if (!list[type]) {\n list[type] = { indexObject: {}, index: [] };\n updateFilter();\n }\n else {\n updateFilter();\n }\n // }\n };\n /** @hidden */\n PivotEngine.prototype.applyValueSorting = function () {\n var valueSortOrder = this.valueSortSettings.sortOrder;\n if (valueSortOrder !== 'None' && this.valueSortSettings.columnIndex) {\n this.sortByValue(this.valueSortData, valueSortOrder, this.valueSortSettings.columnIndex);\n var valueSortData = [];\n var len = this.values.length > 1 ? this.columns.length :\n this.columns.length === 0 ? 0 : this.columns.length - 1;\n for (var i = 0; i <= len; i++) {\n valueSortData[valueSortData.length] = this.pivotValues[i];\n }\n this.iterateValueSortData(this.valueSortData, valueSortData);\n valueSortData[valueSortData.length] = this.pivotValues[this.pivotValues.length - 1];\n this.pivotValues = valueSortData;\n }\n };\n /** @hidden */\n PivotEngine.prototype.generateGridData = function (dataSource) {\n var keys = this.fields;\n var columns = dataSource.columns ? dataSource.columns : [];\n var data = dataSource.data;\n var rows = dataSource.rows ? dataSource.rows : [];\n var paging = this.pageSettings;\n var size = 1;\n //let childrens: Field = this.fieldList[rows[0].name + ''];\n var rmembers;\n var cmembers;\n this.valueSortSettings.columnIndex = undefined;\n var st1 = new Date().getTime();\n rmembers = rows.length !== 0 ? this.getIndexedHeaders(rows, data, 0, this.filterMembers, 'row', '') : [];\n cmembers = columns.length !== 0 ? this.getIndexedHeaders(columns, data, 0, this.filterMembers, 'column', '') : [];\n /* If Paging enabled */\n if (paging !== undefined && paging.rowCurrentPage !== undefined && paging.rowSize !== undefined) {\n size = (paging.rowCurrentPage * paging.rowSize) - paging.rowSize;\n rmembers = rmembers.splice(paging.rowCurrentPage > 1 ? size : 0, paging.rowSize);\n }\n if (paging !== undefined && paging.columnCurrentPage !== undefined && paging.columnSize !== undefined) {\n size = (paging.columnCurrentPage * paging.columnSize) - paging.columnSize;\n cmembers = cmembers.splice(paging.columnCurrentPage > 1 ? size : 0, paging.columnSize);\n }\n /* inserting the row grant-total members */\n this.insertAllMember(rmembers, this.filterMembers, '', 'row');\n /* inserting the column gran-total members */\n this.insertAllMember(cmembers, this.filterMembers, '', 'column');\n this.pivotValues = [];\n var gridData = [];\n this.valueSortData = [];\n this.headerContent = [];\n this.valueContent = [];\n var rowheads = [];\n var colheads = [];\n var valuesCount = (this.values.length);\n this.getHeaderData(cmembers, colheads, this.pivotValues, 0, valuesCount);\n this.insertSubTotals();\n //this.getHeaderData(rmembers, rowheads, gridData, 0);\n this.getTableData(rmembers, rowheads, colheads, 0, this.pivotValues, valuesCount, this.valueSortData);\n this.applyValueSorting();\n this.isEngineUpdated = true;\n var st2 = new Date().getTime();\n // console.log(st1 - st2);\n };\n PivotEngine.prototype.insertSubTotals = function () {\n var rowLength = this.pivotValues.length;\n for (var rowCnt = 0; rowCnt < rowLength; rowCnt++) {\n var rowCells = this.pivotValues[rowCnt];\n if (rowCells) {\n var savedCell = void 0;\n var spanCnt = 1;\n var colLength = rowCells.length;\n for (var colCnt = colLength - 1; colCnt > 0; colCnt--) {\n var cell = rowCells[colCnt];\n if (cell) {\n if (savedCell) {\n savedCell.colSpan = spanCnt;\n savedCell.colIndex = savedCell.colIndex - (spanCnt - 1);\n }\n savedCell = extend({}, cell, null, true);\n var rowPos = rowCnt + 1;\n while (this.pivotValues[rowPos] && !this.pivotValues[rowPos][colCnt]) {\n var field = cell.formattedText + this.valueSortSettings.headerDelimiter + (cell.formattedText + ' Total');\n cell.valueSort[field] = 1;\n cell.valueSort.levelName = field;\n this.pivotValues[rowCnt][colCnt].rowSpan = rowPos - rowCnt;\n var cellType = (cell.type === 'sum' || cell.type === 'grand sum') ? cell.type : 'sum';\n this.pivotValues[rowPos][colCnt] = this.headerContent[rowPos][colCnt] = {\n type: cellType, formattedText: ((cell.type === 'sum' || cell.type === 'grand sum') ? cell.formattedText :\n (cell.formattedText + ' Total')),\n axis: 'column', level: -1, colIndex: colCnt, rowIndex: rowPos, valueSort: cell.valueSort\n };\n if (cell.valueSort && cell.valueSort[this.valueSortSettings.headerText]) {\n this.valueSortSettings.columnIndex = colCnt;\n }\n if (cellType === 'grand sum') {\n this.pivotValues[rowCnt][colCnt].rowSpan = (rowPos - rowCnt) + 1;\n savedCell.rowSpan = (rowPos - rowCnt) + 1;\n }\n else {\n this.pivotValues[rowCnt + 1][colCnt].rowSpan = rowPos - rowCnt;\n }\n rowPos++;\n }\n spanCnt = 1;\n }\n else {\n rowCells[colCnt] = this.headerContent[rowCnt][colCnt] = extend({}, savedCell, null, true);\n spanCnt++;\n rowCells[colCnt].colSpan = spanCnt;\n rowCells[colCnt].colIndex = rowCells[colCnt].colIndex - (spanCnt - 1);\n }\n if (colCnt === 1 && savedCell) {\n savedCell.colSpan = spanCnt;\n savedCell.colIndex = savedCell.colIndex - (spanCnt - 1);\n }\n }\n }\n }\n };\n PivotEngine.prototype.getIndexedHeaders = function (keys, data, keyInd, position, axis, parentMember) {\n var hierarchy = [];\n if (keys) {\n var rlen = keys.length;\n var decisionObj = {};\n var field = keys[keyInd].name;\n // let members: string[] = Object.keys(this.fieldList[field].members);\n var childrens = this.fieldList[field];\n for (var pos = 0, lt = position.length; pos < lt; pos++) {\n var member = {};\n member.hasChild = keyInd < rlen - 1;\n member.level = keyInd;\n member.axis = axis;\n member.colSpan = 1;\n var memInd = this.indexMatrix[position[pos]][childrens.index];\n var headerValue = data[position[pos]][field];\n member.isDrilled = member.hasChild ? childrens.members[headerValue].isDrilled : false;\n var formattedValue = this.getFormattedValue(headerValue, field);\n member.actualText = formattedValue.actualText;\n member.formattedText = formattedValue.formattedText;\n //member.name = members[memInd];\n // member.type = member.hasChild ? 'All' : 'Single';\n var pindx = void 0;\n if (!(decisionObj && decisionObj[memInd])) {\n decisionObj[memInd] = { index: [], indexObject: {} };\n member.index = decisionObj[memInd].index = [position[pos]];\n decisionObj[memInd].indexObject[position[pos]] = position[pos];\n member.indexObject = decisionObj[memInd].indexObject;\n member.ordinal = memInd;\n member.valueSort = {};\n if (keyInd !== 0) {\n member.valueSort.levelName = parentMember + this.valueSortSettings.headerDelimiter + member.formattedText;\n member.valueSort[parentMember + this.valueSortSettings.headerDelimiter + member.formattedText] = 1;\n }\n else {\n member.valueSort[member.formattedText] = 1;\n member.valueSort.levelName = member.formattedText;\n }\n //if (!member.members) {\n member.members = [];\n //}\n //let copyObj: AxisSet = Object.create(member);\n hierarchy.push(member);\n }\n else {\n decisionObj[memInd].index.push(position[pos]);\n decisionObj[memInd].indexObject[position[pos]] = position[pos];\n }\n }\n for (var iln = 0, ilt = hierarchy.length; iln < ilt; iln++) {\n if (rlen - 1 > keyInd && hierarchy[iln].isDrilled) {\n var level = null;\n if (hierarchy[iln].valueSort && hierarchy[iln].valueSort.levelName) {\n level = hierarchy[iln].valueSort.levelName;\n }\n parentMember = (level || hierarchy[iln].formattedText);\n hierarchy[iln].members = this.getIndexedHeaders(keys, data, keyInd + 1, hierarchy[iln].index, axis, parentMember);\n }\n }\n if (this.enableSort) {\n return new DataManager(hierarchy).executeLocal(new Query().sortBy('actualText', childrens.sort.toLowerCase()));\n }\n else {\n return hierarchy;\n }\n }\n else {\n return hierarchy;\n }\n };\n PivotEngine.prototype.insertAllMember = function (set, filter, customText, axis) {\n var len = set.length;\n customText = ' Total';\n set[len] = {\n hasChild: false,\n index: filter,\n level: 0,\n axis: axis,\n isDrilled: false,\n indexObject: {},\n members: [],\n formattedText: 'Grand' + customText,\n ordinal: len,\n type: 'grand sum',\n valueSort: {}\n };\n set[len].valueSort[set[len].formattedText] = 1;\n set[len].valueSort.levelName = set[len].formattedText;\n for (var ln = 0, lt = filter.length; ln < lt; ln++) {\n set[len].indexObject[filter[ln]] = filter[ln];\n }\n };\n PivotEngine.prototype.getTableData = function (rows, reformAxis, columns, tnum, data, vlt, valueSort) {\n for (var rlt = rows.length, rln = 0; rln < rlt; rln++) {\n tnum = data.length;\n reformAxis[tnum] = rows[rln];\n var actCnt = tnum - Number(Object.keys(reformAxis)[0]);\n //let rplus: number = rln + 1;\n //let lvl: number = rows[rln].level;\n var isLeastNode = !reformAxis[tnum].members.length;\n rows[rln].colIndex = 0;\n rows[rln].rowIndex = tnum;\n if (!data[tnum]) {\n data[tnum] = [];\n this.valueContent[actCnt] = {};\n //data[tnum][0] = rows[rln].name;\n data[tnum][0] = this.valueContent[actCnt][0] = rows[rln];\n }\n else {\n // data[tnum][0] = rows[rln].name;\n data[tnum][0] = this.valueContent[actCnt][0] = rows[rln];\n }\n for (var cln = 0, dln = 1, clt = columns.length; cln < clt; ++cln) {\n for (var vln = 0; vln < vlt; vln++) {\n var mPos = this.fieldList[this.values[vln].name].index;\n var aggregate = this.fieldList[this.values[vln].name].aggregateType;\n var field = this.values[vln].name;\n var value = 0;\n // let isLeast: boolean = isLeastNode && (vln === vlt - 1);\n value = this.getAggregateValue(rows[rln].index, columns[cln].indexObject, mPos, aggregate);\n var isSum = rows[rln].hasChild || columns[cln].hasChild ||\n rows[rln].type === 'grand sum' || columns[cln].type === 'grand sum';\n var formattedText = this.getFormattedValue(value, field).formattedText;\n data[tnum][dln] = this.valueContent[actCnt][dln] = {\n axis: 'value',\n formattedText: formattedText, value: value, rowIndex: tnum, colIndex: dln, isSum: isSum\n };\n dln = data[tnum].length;\n if (this.pageSettings !== undefined && this.pageSettings.columnSize !== undefined) {\n if (dln === (this.pageSettings.columnSize + 1)) {\n break;\n }\n }\n }\n }\n if (rows[rln].type !== 'grand sum') {\n valueSort.push({ rowData: data[tnum], childMembers: [] });\n }\n if (!isLeastNode) {\n this.getTableData(reformAxis[tnum].members, reformAxis, columns, tnum, data, vlt, valueSort[valueSort.length - 1].childMembers);\n }\n reformAxis[tnum].members = [];\n }\n /* for (let rlt: number = rows.length, rln: number = 0; rln < rlt; rln++) {\n if (!data[rln]) {\n data[rln] = [];\n data[rln][0] = rows[rln].name;\n } else {\n data[rln][0] = rows[rln].name;\n }\n for (let cln: number = 0, dln: number = 1, clt: number = columns.length; cln < clt; dln = ++cln) {\n data[rln][dln] = this.getAggregateValue(rows[rln].index, columns[cln].index, 11);\n }\n } */\n };\n PivotEngine.prototype.getHeaderData = function (axis, reformAxis, data, tnum, vcnt) {\n var rlt = axis.length;\n var colItmLn = this.columns.length;\n var sortText = this.valueSortSettings.headerText;\n //let valueLn: number = this.values.length;\n for (var rln = 0; rln < rlt; rln++) {\n if (axis[rln].members.length) {\n this.getHeaderData(axis[rln].members, reformAxis, data, tnum, vcnt);\n }\n tnum = reformAxis.length;\n reformAxis[tnum] = axis[rln];\n // let rplus: number = rln + 1;\n var lvl = axis[rln].level;\n axis[rln].rowIndex = lvl;\n axis[rln].colIndex = (tnum * vcnt) + vcnt;\n if (!data[lvl]) {\n data[lvl] = [];\n this.headerContent[lvl] = {};\n data[lvl][(tnum * vcnt) + vcnt] = this.headerContent[lvl][(tnum * vcnt) + vcnt] = axis[rln];\n }\n else {\n data[lvl][(tnum * vcnt) + vcnt] = this.headerContent[lvl][(tnum * vcnt) + vcnt] = axis[rln];\n }\n if (this.isMutiMeasures) {\n for (var vln = 0; vln < vcnt; vln++) {\n var name_1 = this.values[vln].caption ? this.values[vln].caption : this.values[vln].name;\n var calObj = {\n axis: 'column',\n formattedText: name_1,\n level: 0,\n valueSort: {},\n colIndex: (tnum * vcnt) + 1 + vln,\n rowIndex: colItmLn\n };\n if (!data[colItmLn]) {\n data[colItmLn] = [];\n this.headerContent[colItmLn] = {};\n data[colItmLn][(tnum * vcnt) + 1 + vln] = this.headerContent[colItmLn][(tnum * vcnt) + 1 + vln] = calObj;\n }\n else {\n data[colItmLn][(tnum * vcnt) + 1 + vln] = this.headerContent[colItmLn][(tnum * vcnt) + 1 + vln] = calObj;\n }\n var vData = data[colItmLn][(tnum * vcnt) + 1 + vln].valueSort;\n vData[axis[rln].valueSort.levelName + this.valueSortSettings.headerDelimiter + name_1] = 1;\n vData.levelName = axis[rln].valueSort.levelName + this.valueSortSettings.headerDelimiter + name_1;\n if (vData && vData[sortText]) {\n this.valueSortSettings.columnIndex = (tnum * vcnt) + 1 + vln;\n }\n if (this.pageSettings !== undefined && this.pageSettings.columnSize !== undefined) {\n if (data[colItmLn].length === (this.pageSettings.columnSize + 1)) {\n return null;\n }\n }\n }\n }\n else if (axis[rln].valueSort && axis[rln].valueSort[sortText]) {\n this.valueSortSettings.columnIndex = (tnum * vcnt) + 1;\n }\n reformAxis[tnum].members = [];\n }\n };\n PivotEngine.prototype.getAggregateValue = function (rowIndex, columnIndex, value, type) {\n //rowIndex = rowIndex.sort();\n //columnIndex = columnIndex.sort();\n var rlt = rowIndex.length;\n //let clt: number = columnIndex.length;\n var mirror = {};\n var ri = 0;\n var ci = 0;\n var cellValue = 0;\n var avgCnt = 0;\n if (type && type.toLowerCase() === 'count') {\n while (rowIndex[ri] !== undefined) {\n if (columnIndex[rowIndex[ri]] !== undefined) {\n cellValue += 1;\n }\n ri++;\n }\n }\n else if (type && type.toLowerCase() === 'min') {\n var isFirst = true;\n while (rowIndex[ri] !== undefined) {\n if (columnIndex[rowIndex[ri]] !== undefined) {\n if (isFirst) {\n cellValue = this.valueMatrix[rowIndex[ri]][value];\n isFirst = false;\n }\n else {\n cellValue = this.valueMatrix[rowIndex[ri]][value] < cellValue ? this.valueMatrix[rowIndex[ri]][value] : cellValue;\n }\n }\n ri++;\n }\n }\n else if (type && type.toLowerCase() === 'max') {\n var isMaxFirst = true;\n while (rowIndex[ri] !== undefined) {\n if (columnIndex[rowIndex[ri]] !== undefined) {\n if (isMaxFirst) {\n cellValue = this.valueMatrix[rowIndex[ri]][value];\n isMaxFirst = false;\n }\n else {\n cellValue = this.valueMatrix[rowIndex[ri]][value] > cellValue ? this.valueMatrix[rowIndex[ri]][value] : cellValue;\n }\n }\n ri++;\n }\n }\n else if (type && type.toLowerCase() === 'calculatedfield') {\n while (rowIndex[ri] !== undefined) {\n if (columnIndex[rowIndex[ri]] !== undefined) {\n var calcField = this.calculatedFields[this.fields[value]];\n var actualFormula = calcField.formula;\n var aggregateField = {};\n if (this.calculatedFormulas[calcField.name]) {\n var calculatedFormulas = this.calculatedFormulas[calcField.name];\n for (var len = 0, lmt = calculatedFormulas.length; len < lmt; len++) {\n var aggregatedValue = calculatedFormulas[len];\n var value_1 = aggregateField[aggregatedValue.formula];\n if (value_1 === undefined) {\n var type_1 = aggregatedValue.type;\n value_1 = this.getAggregateValue(rowIndex, columnIndex, aggregatedValue.index, type_1);\n aggregateField[aggregatedValue.formula] = value_1;\n }\n actualFormula = (actualFormula).replace(aggregatedValue.formula, value_1.toString());\n }\n }\n cellValue = this.evaluate(actualFormula);\n JSON.parse(cellValue.toString());\n }\n ri++;\n }\n }\n else {\n while (rowIndex[ri] !== undefined) {\n if (columnIndex[rowIndex[ri]] !== undefined) {\n //let cIndx: number = isLeastLevel ? columnIndex.splice(columnIndex.indexOf(rowIndex[ri]), 1)[0] : rowIndex[ri];\n cellValue += this.valueMatrix[rowIndex[ri]][value];\n avgCnt++;\n }\n ri++;\n }\n }\n /* if (rlt > clt) {\n this.makeMirrorObject(rowIndex, mirror);\n while (columnIndex[ci] !== undefined) {\n if (mirror[columnIndex[ci]]) {\n let cIndx: number = isLeastLevel ? columnIndex.splice(ci, 1)[0] : columnIndex[ci];\n //rowIndex.splice\n sum += this.valueMatrix[cIndx][value];\n }\n ci++;\n }\n } else {\n this.makeMirrorObject(columnIndex, mirror);\n while (rowIndex[ri] !== undefined) {\n if (mirror[rowIndex[ri]]) {\n let cIndx: number = isLeastLevel ? columnIndex.splice(columnIndex.indexOf(rowIndex[ri]), 1)[0] : rowIndex[ri];\n sum += this.valueMatrix[rowIndex[ri]][value];\n }\n ri++;\n }\n } */\n return (type && type.toLowerCase() === 'avg' ? (cellValue / avgCnt) : cellValue);\n };\n PivotEngine.prototype.getFormattedValue = function (value, fieldName) {\n var formattedValue = {\n formattedText: value !== undefined ? value === null ? 'null' : value.toString() : undefined,\n actualText: value !== undefined ? value === null ? 'null' : value : undefined\n };\n if (this.formatFields[fieldName] && value) {\n var formatSetting = extend({}, this.formatFields[fieldName], null, true);\n delete formatSetting.name;\n if (formatSetting.type) {\n formattedValue.formattedText = this.globalize.formatDate(new Date(value), formatSetting);\n }\n else {\n formattedValue.formattedText = this.globalize.formatNumber(value, formatSetting);\n }\n formattedValue.actualText = value;\n if (formatSetting.type && this.formatFields[fieldName].type === 'date') {\n formatSetting.format = 'yyyy/MM/dd/HH/mm/ss';\n formattedValue.actualText = this.globalize.formatDate(new Date(value), formatSetting);\n }\n }\n return formattedValue;\n };\n PivotEngine.prototype.powerFunction = function (formula) {\n if (formula.indexOf('^') > -1) {\n var items_1 = [];\n while (formula.indexOf('(') > -1) {\n formula = formula.replace(/(\\([^\\(\\)]*\\))/g, function (text, item) {\n items_1.push(item);\n return ('~' + (items_1.length - 1));\n });\n }\n items_1.push(formula);\n formula = '~' + (items_1.length - 1);\n while (formula.indexOf('~') > -1) {\n formula = formula.replace(new RegExp('~' + '(\\\\d+)', 'g'), function (text, index) {\n return items_1[index].replace(/(\\w*)\\^(\\w*)/g, 'Math.pow' + '($1,$2)');\n });\n }\n }\n return formula;\n };\n PivotEngine.prototype.evaluate = function (obj) {\n return Function('\"use strict\";return (' + obj + ')')();\n };\n ;\n return PivotEngine;\n}());\nexport { PivotEngine };\n","/**\n * Specifies pivot external events\n * @hidden\n */\n/** @hidden */\nexport var load = 'load';\n/** @hidden */\nexport var enginePopulating = 'enginePopulating';\n/** @hidden */\nexport var enginePopulated = 'enginePopulated';\n/** @hidden */\nexport var beforePivotTableRender = 'beforePivotTableRender';\n/** @hidden */\nexport var afterPivotTableRender = 'afterPivotTableRender';\n/** @hidden */\nexport var beforeExport = 'beforeExport';\n/** @hidden */\nexport var excelHeaderQueryCellInfo = 'excelHeaderQueryCellInfo';\n/** @hidden */\nexport var pdfHeaderQueryCellInfo = 'pdfHeaderQueryCellInfo';\n/** @hidden */\nexport var excelQueryCellInfo = 'excelQueryCellInfo';\n/** @hidden */\nexport var pdfQueryCellInfo = 'pdfQueryCellInfo';\n/** @hidden */\nexport var dataBound = 'dataBound';\n/** @hidden */\nexport var queryCellInfo = 'queryCellInfo';\n/** @hidden */\nexport var headerCellInfo = 'headerCellInfo';\n/** @hidden */\nexport var resizing = 'resizing';\n/** @hidden */\nexport var resizeStop = 'resizeStop';\n/** @hidden */\nexport var cellClick = 'cellClick';\n/**\n * Specifies pivot internal events\n */\n/** @hidden */\nexport var initialLoad = 'initial-load';\n/** @hidden */\nexport var uiUpdate = 'ui-update';\n/** @hidden */\nexport var scroll = 'scroll';\n/** @hidden */\nexport var contentReady = 'content-ready';\n/** @hidden */\nexport var dataReady = 'data-ready';\n/** @hidden */\nexport var initSubComponent = 'init-groupingbar';\n/** @hidden */\nexport var treeViewUpdate = 'tree-view-update';\n/** @hidden */\nexport var pivotButtonUpdate = 'pivot-button-update';\n/** @hidden */\nexport var initCalculatedField = 'init-calculatedfield';\n/** @hidden */\nexport var click = 'click';\n","/**\n * CSS Constants\n * @hidden\n */\n/** @hidden */\nexport var ROOT = 'e-pivotfieldlist';\n/** @hidden */\nexport var RTL = 'e-rtl';\n/** @hidden */\nexport var DEVICE = 'e-device';\n/** @hidden */\nexport var ICON = 'e-icons';\n/** @hidden */\nexport var ICON_DISABLE = 'e-disable';\n/** @hidden */\nexport var ICON_HIDDEN = 'e-hide';\n/** @hidden */\nexport var WRAPPER_CLASS = 'e-pivotfieldlist-wrapper';\n/** @hidden */\nexport var CONTAINER_CLASS = 'e-field-list-container';\n/** @hidden */\nexport var TOGGLE_FIELD_LIST_CLASS = 'e-toggle-field-list';\n/** @hidden */\nexport var STATIC_FIELD_LIST_CLASS = 'e-static';\n/** @hidden */\nexport var TOGGLE_SELECT_CLASS = 'e-select-table';\n/** @hidden */\nexport var FIELD_TABLE_CLASS = 'e-field-table';\n/** @hidden */\nexport var FIELD_LIST_CLASS = 'e-field-list';\n/** @hidden */\nexport var FIELD_LIST_TREE_CLASS = 'e-field-list-tree';\n/** @hidden */\nexport var FIELD_HEADER_CLASS = 'e-field-header';\n/** @hidden */\nexport var FIELD_LIST_TITLE_CLASS = 'e-field-list-title';\n/** @hidden */\nexport var FIELD_LIST_TITLE_CONTENT_CLASS = 'e-title-content';\n/** @hidden */\nexport var FIELD_LIST_FOOTER_CLASS = 'e-field-list-footer';\n/** @hidden */\nexport var CALCULATED_FIELD_CLASS = 'e-calculated-field';\n/** @hidden */\nexport var FLAT_CLASS = 'e-flat e-primary';\n/** @hidden */\nexport var OUTLINE_CLASS = 'e-outline';\n/** @hidden */\nexport var AXIS_TABLE_CLASS = 'e-axis-table';\n/** @hidden */\nexport var LEFT_AXIS_PANEL_CLASS = 'e-left-axis-fields';\n/** @hidden */\nexport var RIGHT_AXIS_PANEL_CLASS = 'e-right-axis-fields';\n/** @hidden */\nexport var AXIS_HEADER_CLASS = 'e-axis-header';\n/** @hidden */\nexport var AXIS_CONTENT_CLASS = 'e-axis-content';\n/** @hidden */\nexport var AXIS_PROMPT_CLASS = 'e-draggable-prompt';\n/** @hidden */\nexport var PIVOT_BUTTON_WRAPPER_CLASS = 'e-pvt-btn-div';\n/** @hidden */\nexport var PIVOT_BUTTON_CLASS = 'e-pivot-button';\n/** @hidden */\nexport var PIVOT_BUTTON_CONTENT_CLASS = 'e-content';\n/** @hidden */\nexport var DRAG_CLONE_CLASS = 'e-button-drag-clone';\n/** @hidden */\nexport var SORT_CLASS = 'e-sort';\n/** @hidden */\nexport var SORT_DESCEND_CLASS = 'e-descend';\n/** @hidden */\nexport var FILTER_COMMON_CLASS = 'e-btn-filter';\n/** @hidden */\nexport var FILTER_CLASS = 'e-pv-filter';\n/** @hidden */\nexport var FILTERED_CLASS = 'e-pv-filtered';\n/** @hidden */\nexport var REMOVE_CLASS = 'e-remove';\n/** @hidden */\nexport var DRAG_CLASS = 'e-drag';\n/** @hidden */\nexport var DROP_INDICATOR_CLASS = 'e-drop-indicator';\n/** @hidden */\nexport var INDICATOR_HOVER_CLASS = 'e-drop-hover';\n/** @hidden */\nexport var MEMBER_EDITOR_DIALOG_CLASS = 'e-member-editor-dialog';\n/** @hidden */\nexport var EDITOR_TREE_WRAPPER_CLASS = 'e-member-editor-wrapper';\n/** @hidden */\nexport var EDITOR_TREE_CONTAINER_CLASS = 'e-member-editor-container';\n/** @hidden */\nexport var CHECK_BOX_FRAME_CLASS = 'e-frame';\n/** @hidden */\nexport var NODE_CHECK_CLASS = 'e-check';\n/** @hidden */\nexport var NODE_STOP_CLASS = 'e-stop';\n/** @hidden */\nexport var OK_BUTTON_CLASS = 'e-ok-btn';\n/** @hidden */\nexport var CANCEL_BUTTON_CLASS = 'e-cancel-btn';\n/** @hidden */\nexport var ERROR_DIALOG_CLASS = 'e-pivot-error-dialog';\n/** @hidden */\nexport var DROPPABLE_CLASS = 'e-droppable';\n/** @hidden */\nexport var ROW_AXIS_CLASS = 'e-rows';\n/** @hidden */\nexport var COLUMN_AXIS_CLASS = 'e-columns';\n/** @hidden */\nexport var VALUE_AXIS_CLASS = 'e-values';\n/** @hidden */\nexport var FILTER_AXIS_CLASS = 'e-filters';\n/** @hidden */\nexport var GROUPING_BAR_CLASS = 'e-grouping-bar';\n/** @hidden */\nexport var VALUE_COLUMN_CLASS = 'e-value-column';\n/** @hidden */\nexport var GROUP_ROW_CLASS = 'e-group-rows';\n/** @hidden */\nexport var GROUP_COLUMN_CLASS = 'e-group-columns';\n/** @hidden */\nexport var GROUP_FLEX_CLASS = 'e-group-flex';\n/** @hidden */\nexport var GROUP_VALUE_CLASS = 'e-group-values';\n/** @hidden */\nexport var GROUP_FILTER_CLASS = 'e-group-filters';\n/** @hidden */\nexport var DIALOG_CLOSE_ICON_CLASS = 'e-icon-btn';\n/** @hidden */\nexport var NO_DRAG_CLASS = 'e-drag-restrict';\n/** @hidden */\nexport var SELECTED_NODE_CLASS = 'e-list-selected';\n/** @hidden */\nexport var TITLE_HEADER_CLASS = 'e-title-header';\n/** @hidden */\nexport var TITLE_CONTENT_CLASS = 'e-title-content';\n/** @hidden */\nexport var TEXT_CONTENT_CLASS = 'e-text-content';\n/** @hidden */\nexport var FOOTER_CONTENT_CLASS = 'e-footer-content';\n/** @hidden */\nexport var ADAPTIVE_CONTAINER_CLASS = 'e-adaptive-container';\n/** @hidden */\nexport var ADAPTIVE_FIELD_LIST_BUTTON_CLASS = 'e-field-list-btn';\n/** @hidden */\nexport var ADAPTIVE_CALCULATED_FIELD_BUTTON_CLASS = 'e-calculated-field-btn';\n/** @hidden */\nexport var BUTTON_SMALL_CLASS = 'e-small';\n/** @hidden */\nexport var BUTTON_ROUND_CLASS = 'e-round';\n/** @hidden */\nexport var ADD_ICON_CLASS = 'e-add-icon';\n/** @hidden */\nexport var BUTTON_FLAT_CLASS = 'e-flat';\n/** @hidden */\nexport var STATIC_CENTER_DIV_CLASS = 'e-center-div';\n/** @hidden */\nexport var STATIC_CENTER_HEADER_CLASS = 'e-center-title';\n/** @hidden */\nexport var ADAPTIVE_FIELD_LIST_DIALOG_CLASS = 'e-adaptive-field-list-dialog';\n/** @hidden */\nexport var LIST_TEXT_CLASS = 'e-list-text';\n/** @hidden */\nexport var LIST_SELECT_CLASS = 'e-selected-node';\n/** @hidden */\nexport var LIST_FRAME_CLASS = 'e-frame';\n/** @hidden */\nexport var COLLAPSE = 'e-collapse';\n/** @hidden */\nexport var EXPAND = 'e-expand';\n/** @hidden */\nexport var TABLE = 'e-table';\n/** @hidden */\nexport var BODY = 'e-body';\n/** @hidden */\nexport var PIVOTBODY = 'e-pivotbody';\n/** @hidden */\nexport var COLUMNSHEADER = 'e-columnsheader';\n/** @hidden */\nexport var ROWSHEADER = 'e-rowsheader';\n/** @hidden */\nexport var VALUESCONTENT = 'e-valuescontent';\n/** @hidden */\nexport var VALUECELL = 'e-valuecell';\n/** @hidden */\nexport var PIVOTHEADER = 'e-pivotheader';\n/** @hidden */\nexport var PGHEADERS = 'e-pgheaders';\n/** @hidden */\nexport var TOPHEADER = 'e-topheader';\n/** @hidden */\nexport var HEADERCELL = 'e-headercell';\n/** @hidden */\nexport var SUMMARY = 'e-summary';\n/** @hidden */\nexport var CELLVALUE = 'e-cellvalue';\n/** @hidden */\nexport var ROW = 'e-row';\n/** @hidden */\nexport var PIVOTTOOLTIP = 'e-pivottooltip';\n/** @hidden */\nexport var TOOLTIP_HEADER = 'e-tooltipheader';\n/** @hidden */\nexport var TOOLTIP_CONTENT = 'e-tooltipcontent';\n/** @hidden */\nexport var NEXTSPAN = 'e-nextspan';\n/** @hidden */\nexport var LASTSPAN = 'e-lastspan';\n/** @hidden */\nexport var EDITOR_SEARCH_WRAPPER_CLASS = 'e-editor-search-wrapper';\n/** @hidden */\nexport var EDITOR_SEARCH_CLASS = 'e-editor-search';\n/** @hidden */\nexport var SELECT_ALL_WRAPPER_CLASS = 'e-select-all-wrapper';\n/** @hidden */\nexport var SELECT_ALL_CLASS = 'e-select-all';\n/** @hidden */\nexport var PIVOTCALC = 'e-pivot-calc';\n/** @hidden */\nexport var CALCDIALOG = 'e-pivot-calc-dialog-div';\n/** @hidden */\nexport var CALCRADIO = 'e-pivot-calc-radio';\n/** @hidden */\nexport var CALCCHECK = 'e-pivot-calc-check';\n/** @hidden */\nexport var CALCINPUT = 'e-pivot-calc-input';\n/** @hidden */\nexport var CALCINPUTDIV = 'e-pivot-calc-input-div';\n/** @hidden */\nexport var CALCOUTERDIV = 'e-pivot-calc-outer-div';\n/** @hidden */\nexport var FLAT = 'e-flat';\n/** @hidden */\nexport var FORMAT = 'e-format';\n/** @hidden */\nexport var FORMULA = 'e-pivot-formula';\n/** @hidden */\nexport var TREEVIEW = 'e-pivot-treeview';\n/** @hidden */\nexport var TREEVIEWOUTER = 'e-pivot-treeview-outer';\n/** @hidden */\nexport var CALCCANCELBTN = 'e-pivot-cancel-button';\n/** @hidden */\nexport var CALCADDBTN = 'e-pivot-add-button';\n/** @hidden */\nexport var CALCOKBTN = 'e-pivot-ok-button';\n/** @hidden */\nexport var CALCACCORD = 'e-pivot-accord';\n/** @hidden */\nexport var CALCBUTTONDIV = 'e-pivot-button-div';\n/** @hidden */\nexport var AXIS_ICON_CLASS = 'e-axis';\n/** @hidden */\nexport var AXIS_ROW_CLASS = 'e-axis-row';\n/** @hidden */\nexport var AXIS_COLUMN_CLASS = 'e-axis-column';\n/** @hidden */\nexport var AXIS_VALUE_CLASS = 'e-axis-value';\n/** @hidden */\nexport var AXIS_FILTER_CLASS = 'e-axis-filter';\n/** @hidden */\nexport var AXIS_NAVIGATE_WRAPPER_CLASS = 'e-axis-nav-div';\n/** @hidden */\nexport var LEFT_NAVIGATE_WRAPPER_CLASS = 'e-left-nav-wrapper';\n/** @hidden */\nexport var RIGHT_NAVIGATE_WRAPPER_CLASS = 'e-right-nav-wrapper';\n/** @hidden */\nexport var LEFT_NAVIGATE_CLASS = 'e-left-nav-icon';\n/** @hidden */\nexport var RIGHT_NAVIGATE_CLASS = 'e-right-nav-icon';\n/** @hidden */\nexport var GRID_CLASS = 'e-grid';\n/** @hidden */\nexport var PIVOT_VIEW_CLASS = 'e-pivotview';\n/** @hidden */\nexport var PIVOT_ALL_FIELD_TITLE_CLASS = 'e-pivot-all-field-title';\n/** @hidden */\nexport var PIVOT_FORMULA_TITLE_CLASS = 'e-pivot-formula-title';\n/** @hidden */\nexport var PIVOT_CONTEXT_MENU_CLASS = 'e-pivot-context-menu';\n/** @hidden */\nexport var MENU_DISABLE = 'e-disabled';\n/** @hidden */\nexport var EMPTY_MEMBER_CLASS = 'e-member-prompt';\n/** @hidden */\nexport var CALC_EDIT = 'e-edit';\n/** @hidden */\nexport var CALC_EDITED = 'e-edited';\n/** @hidden */\nexport var EMPTY_FIELD = 'e-empty-field';\n","import { Reorder } from '@syncfusion/ej2-grids';\nimport { Grid, Resize, ExcelExport, PdfExport, ContextMenu, Freeze } from '@syncfusion/ej2-grids';\nimport { Selection } from '@syncfusion/ej2-grids';\nimport { createElement } from '@syncfusion/ej2-base';\nimport * as cls from '../../common/base/css-constant';\nimport * as events from '../../common/base/constant';\nimport { hideSpinner } from '@syncfusion/ej2-popups';\n/**\n * Module to render PivotGrid control\n */\n/** @hidden */\nvar Render = /** @class */ (function () {\n /** Constructor for render module */\n function Render(parent) {\n this.colPos = 0;\n this.parent = parent;\n this.engine = parent.engineModule;\n this.gridSettings = parent.gridSettings;\n this.formatList = this.getFormatList();\n }\n /** @hidden */\n /* tslint:enable */\n Render.prototype.render = function () {\n var parent = this.parent;\n var engine = this.parent.engineModule;\n this.injectGridModules(parent);\n this.rowStartPos = this.getRowStartPos();\n hideSpinner(this.parent.element);\n if (this.parent.grid && this.parent.grid.element && this.parent.element.querySelector('.e-grid')) {\n if (!engine.isEngineUpdated) {\n engine.headerContent = this.frameDataSource('header');\n engine.valueContent = this.frameDataSource('value');\n }\n else {\n if (this.parent.dataSource.valueSortSettings && this.parent.dataSource.valueSortSettings.sortOrder &&\n this.parent.dataSource.valueSortSettings.sortOrder !== 'None') {\n engine.valueContent = this.frameDataSource('value');\n }\n engine.isEngineUpdated = false;\n }\n /* tslint:disable */\n this.parent.grid.setProperties({\n columns: this.frameStackedHeaders(), dataSource: parent.dataSource.values.length > 0 ? engine.valueContent :\n this.frameDataSource('value')\n }, true);\n /* tslint:enable */\n this.parent.grid.notify('datasource-modified', {});\n this.parent.grid.refreshColumns();\n var e = this.parent.element.querySelector('.e-movablecontent');\n e.querySelector('colGroup').innerHTML =\n this.parent.grid.getHeaderContent().querySelector('.e-movableheader').querySelector('colgroup').innerHTML;\n this.parent.grid.width = this.calculateGridWidth();\n if (this.parent.height > (this.engine.valueContent.length * this.gridSettings.rowHeight)) {\n this.parent.grid.height = 'auto';\n }\n else {\n this.parent.grid.height = this.parent.height;\n }\n }\n else {\n this.parent.element.innerHTML = '';\n this.bindGrid(this.parent);\n this.parent.element.appendChild(createElement('div', { id: this.parent.element.id + '_grid' }));\n this.parent.grid.appendTo('#' + this.parent.element.id + '_grid');\n }\n };\n /* tslint:disable */\n Render.prototype.bindGrid = function (parent) {\n var _this = this;\n this.parent.grid = new Grid({\n frozenColumns: 1,\n frozenRows: 0,\n dataSource: this.frameDataSource('value'),\n columns: this.frameStackedHeaders(),\n height: parent.height > (this.engine.valueContent.length * this.gridSettings.rowHeight) ?\n 'auto' : parent.height,\n width: this.calculateGridWidth(),\n locale: parent.locale,\n enableRtl: parent.enableRtl,\n allowExcelExport: parent.allowExcelExport,\n allowPdfExport: parent.allowPdfExport,\n allowResizing: this.gridSettings.allowResizing,\n allowTextWrap: this.gridSettings.allowTextWrap,\n allowReordering: this.gridSettings.allowReordering,\n allowSelection: this.gridSettings.allowSelection,\n contextMenuItems: this.gridSettings.contextMenuItems,\n selectedRowIndex: this.gridSettings.selectedRowIndex,\n selectionSettings: this.gridSettings.selectionSettings,\n printMode: this.gridSettings.printMode,\n rowHeight: this.gridSettings.rowHeight,\n gridLines: this.gridSettings.gridLines,\n contextMenuClick: this.gridSettings.contextMenuClick ? this.gridSettings.contextMenuClick.bind(this.parent) : undefined,\n contextMenuOpen: this.gridSettings.contextMenuOpen ? this.gridSettings.contextMenuOpen.bind(this.parent) : undefined,\n beforeCopy: this.gridSettings.beforeCopy ? this.gridSettings.beforeCopy.bind(this.parent) : undefined,\n beforePrint: this.gridSettings.beforePrint ? this.gridSettings.beforePrint.bind(this.parent) : undefined,\n printComplete: this.gridSettings.printComplete ? this.gridSettings.printComplete.bind(this.parent) : undefined,\n rowSelecting: this.gridSettings.rowSelecting ? this.gridSettings.rowSelecting.bind(this.parent) : undefined,\n rowSelected: this.gridSettings.rowSelected ? this.gridSettings.rowSelected.bind(this.parent) : undefined,\n rowDeselecting: this.gridSettings.rowDeselecting ? this.gridSettings.rowDeselecting.bind(this.parent) : undefined,\n rowDeselected: this.gridSettings.rowDeselected ? this.gridSettings.rowDeselected.bind(this.parent) : undefined,\n cellSelecting: this.gridSettings.cellSelecting ? this.gridSettings.cellSelecting.bind(this.parent) : undefined,\n cellSelected: this.gridSettings.cellSelected ? this.gridSettings.cellSelected.bind(this.parent) : undefined,\n cellDeselecting: this.gridSettings.cellDeselecting ? this.gridSettings.cellDeselecting.bind(this.parent) : undefined,\n cellDeselected: this.gridSettings.cellDeselected ? this.gridSettings.cellDeselected.bind(this.parent) : undefined,\n resizeStart: this.gridSettings.resizeStart ? this.gridSettings.resizeStart.bind(this.parent) : undefined,\n columnDragStart: this.gridSettings.columnDragStart ? this.gridSettings.columnDragStart.bind(this) : undefined,\n columnDrag: this.gridSettings.columnDrag ? this.gridSettings.columnDrag.bind(this) : undefined,\n columnDrop: this.gridSettings.columnDrop ? this.gridSettings.columnDrop.bind(this) : undefined,\n resizing: this.setGroupWidth.bind(this),\n resizeStop: this.onResizeStop.bind(this),\n queryCellInfo: function (args) {\n parent.renderModule.rowCellBoundEvent(args);\n },\n dataBound: function (args) {\n if (parent.element.querySelector('.e-firstcell')) {\n if (parent.enableRtl) {\n parent.element.querySelector('.e-firstcell').style.borderRight = 'none';\n }\n else {\n parent.element.querySelector('.e-firstcell').style.borderLeft = 'none';\n }\n }\n _this.parent.grid.widthService.setWidthToTable();\n parent.notify(events.contentReady, {});\n },\n headerCellInfo: function (args) {\n parent.renderModule.columnCellBoundEvent(args);\n },\n excelHeaderQueryCellInfo: function (args) {\n parent.renderModule.excelColumnEvent(args);\n },\n pdfHeaderQueryCellInfo: function (args) {\n parent.renderModule.pdfColumnEvent(args);\n },\n excelQueryCellInfo: function (args) {\n parent.renderModule.excelRowEvent(args);\n },\n pdfQueryCellInfo: function (args) {\n parent.renderModule.pdfRowEvent(args);\n }\n });\n };\n Render.prototype.injectGridModules = function (parent) {\n Grid.Inject(Freeze);\n if (parent.allowExcelExport) {\n Grid.Inject(ExcelExport);\n }\n if (parent.allowPdfExport) {\n Grid.Inject(PdfExport);\n }\n if (this.gridSettings.allowSelection) {\n Grid.Inject(Selection);\n }\n if (this.gridSettings.allowReordering) {\n Grid.Inject(Reorder);\n }\n if (this.gridSettings.allowResizing) {\n Grid.Inject(Resize);\n }\n if (this.gridSettings.contextMenuItems) {\n Grid.Inject(ContextMenu);\n }\n };\n /** @hidden */\n Render.prototype.updateGridSettings = function () {\n this.injectGridModules(this.parent);\n this.parent.grid.allowResizing = this.gridSettings.allowResizing;\n this.parent.grid.allowTextWrap = this.gridSettings.allowTextWrap;\n this.parent.grid.allowReordering = this.gridSettings.allowReordering;\n this.parent.grid.allowSelection = this.gridSettings.allowSelection;\n this.parent.grid.contextMenuItems = this.gridSettings.contextMenuItems;\n this.parent.grid.selectedRowIndex = this.gridSettings.selectedRowIndex;\n this.parent.grid.selectionSettings = this.gridSettings.selectionSettings;\n this.parent.grid.printMode = this.gridSettings.printMode;\n this.parent.grid.rowHeight = this.gridSettings.rowHeight;\n this.parent.grid.gridLines = this.gridSettings.gridLines;\n };\n Render.prototype.appendValueSortIcon = function (cell, tCell, rCnt, cCnt) {\n var vSort = this.parent.pivotView.dataSource.valueSortSettings;\n var len = this.parent.pivotView.dataSource.values.length > 1 ? this.parent.pivotView.dataSource.columns.length :\n this.parent.pivotView.dataSource.columns.length === 0 ? 0 : this.parent.pivotView.dataSource.columns.length - 1;\n if (vSort !== undefined && cCnt === vSort.columnIndex && rCnt === len) {\n tCell.querySelector('.e-sortfilterdiv').classList.add(vSort.sortOrder === 'Descending' ? 'e-descending' : 'e-ascending');\n tCell.querySelector('.e-sortfilterdiv').classList.add(vSort.sortOrder === 'Descending' ?\n 'e-icon-descending' : 'e-icon-ascending');\n this.parent.pivotView.dataSource.valueSortSettings.headerText = cell.valueSort.levelName;\n }\n return tCell;\n };\n Render.prototype.onResizeStop = function (args) {\n this.parent.grid.headerModule.refreshUI();\n this.setGroupWidth(args);\n };\n Render.prototype.setGroupWidth = function (args) {\n if (this.parent.showGroupingBar && this.parent.groupingBarModule && this.parent.element.querySelector('.' + cls.GROUPING_BAR_CLASS)) {\n this.parent.groupingBarModule.refreshUI();\n if (this.parent.element.querySelector('.e-group-row').offsetWidth < 250) {\n args.cancel = true;\n this.parent.element.querySelector('.e-frozenheader').querySelector('col').style.width = '250px';\n this.parent.element.querySelector('.e-frozencontent').querySelector('col').style.width = '250px';\n }\n this.parent.element.querySelector('.e-group-values').style.width =\n this.parent.element.querySelector('.e-group-row').offsetWidth + 'px';\n this.parent.element.querySelector('.e-group-row').style.height =\n this.parent.element.querySelector('.e-headercontent').offsetHeight + 'px';\n }\n this.parent.trigger(args.e.type === 'touchend' || args.e.type === 'mouseup' ? events.resizeStop : events.resizing, args);\n };\n Render.prototype.rowCellBoundEvent = function (args) {\n var tCell = args.cell;\n if (tCell) {\n tCell.setAttribute('index', (Number(tCell.getAttribute('index')) + this.engine.headerContent.length).toString());\n var cell = args.data[0];\n if (tCell.getAttribute('aria-colindex') === '0') {\n tCell.innerText = '';\n var level = cell.level ? cell.level : 0;\n do {\n if (level > 0) {\n tCell.appendChild(createElement('span', {\n className: level === 0 ? '' : cls.NEXTSPAN,\n }));\n }\n level--;\n } while (level > -1);\n level = cell.level ? cell.level : 0;\n if (!cell.hasChild && level > 0) {\n tCell.appendChild(createElement('span', {\n className: cls.LASTSPAN,\n }));\n }\n var fieldName = (level > -1 && this.parent.dataSource.rows.length > 0) ?\n this.parent.dataSource.rows[level].name : '';\n tCell.setAttribute('fieldname', fieldName);\n var localizedText = cell.formattedText;\n if (cell.type) {\n if (cell.type === 'grand sum') {\n tCell.classList.add('e-gtot');\n localizedText = this.parent.localeObj.getConstant('grandTotal');\n }\n else {\n tCell.classList.add('e-stot');\n }\n }\n tCell.classList.add(cls.ROWSHEADER);\n if (cell.hasChild === true) {\n tCell.appendChild(createElement('div', {\n className: (cell.isDrilled === true ? cls.COLLAPSE : cls.EXPAND) + ' ' + cls.ICON,\n attrs: {\n 'title': cell.isDrilled === true ? this.parent.localeObj.getConstant('collapse') :\n this.parent.localeObj.getConstant('expand')\n }\n }));\n }\n tCell.appendChild(createElement('span', {\n className: cls.CELLVALUE,\n innerHTML: localizedText\n }));\n }\n else {\n var innerText = tCell.innerText.toString() === '0' ? '' : tCell.innerText;\n tCell.innerText = '';\n tCell.classList.add(cls.VALUESCONTENT);\n cell = args.data[Number(tCell.getAttribute('aria-colindex'))];\n if (cell.isSum) {\n tCell.classList.add(cls.SUMMARY);\n }\n tCell.appendChild(createElement('span', {\n className: cls.CELLVALUE,\n innerHTML: innerText\n }));\n }\n }\n this.parent.trigger(events.queryCellInfo, args);\n };\n Render.prototype.columnCellBoundEvent = function (args) {\n if (args.cell.column && args.cell.column.customAttributes) {\n var cell = args.cell.column.customAttributes.cell;\n var tCell = args.node;\n if (cell) {\n var level = cell.level ? cell.level : 0;\n if (cell.level === -1 && !cell.rowSpan && cell.rowIndex !== this.engine.headerContent.length - 1) {\n args.node.style.display = 'none';\n }\n else if (cell.rowSpan > 1) {\n args.node.setAttribute('rowspan', cell.rowSpan.toString());\n args.node.setAttribute('aria-rowspan', cell.rowSpan.toString());\n if ((cell.rowIndex + cell.rowSpan) === this.engine.headerContent.length) {\n args.node.style.borderBottomWidth = '0px';\n }\n }\n args.node.setAttribute('aria-colindex', cell.colIndex.toString());\n args.node.setAttribute('index', cell.rowIndex.toString());\n var fieldName = void 0;\n if (!(this.parent.dataSource.values && this.parent.dataSource.values.length > 1 &&\n (cell.rowIndex === this.engine.headerContent.length - 1)) && this.parent.dataSource.columns &&\n this.parent.dataSource.columns.length > 0) {\n fieldName = level > -1 ? this.parent.dataSource.columns[level].name : '';\n tCell.setAttribute('fieldname', fieldName);\n }\n if (cell.type) {\n tCell.classList.add(cell.type === 'grand sum' ? 'e-gtot' : 'e-stot');\n var localizedText = cell.type === 'grand sum' ? this.parent.localeObj.getConstant('grandTotal') :\n cell.formattedText.split('Total')[0] + this.parent.localeObj.getConstant('total');\n if (tCell.querySelector('.e-headertext') !== null) {\n tCell.querySelector('.e-headertext').innerText = localizedText;\n }\n else {\n tCell.querySelector('.e-stackedheadercelldiv').innerText = localizedText;\n }\n }\n tCell.classList.add(cls.COLUMNSHEADER);\n if (cell.hasChild === true) {\n var hdrdiv = tCell.querySelector('.e-headercelldiv');\n if (hdrdiv) {\n hdrdiv.style.height = 'auto';\n hdrdiv.style.lineHeight = 'normal';\n }\n var div = createElement('div', {\n className: (cell.isDrilled === true ? cls.COLLAPSE : cls.EXPAND) + ' ' + cls.ICON,\n attrs: {\n 'title': cell.isDrilled === true ? this.parent.localeObj.getConstant('collapse') :\n this.parent.localeObj.getConstant('expand')\n }\n });\n tCell.children[0].classList.add(cls.CELLVALUE);\n if (window.navigator.userAgent.indexOf('Edge') > -1 || window.navigator.userAgent.indexOf('Trident') > -1) {\n tCell.children[0].style.display = 'table';\n }\n else {\n tCell.children[0].style.display = 'block';\n }\n tCell.insertBefore(div, tCell.children[0]);\n }\n tCell = this.appendValueSortIcon(cell, tCell, cell.rowIndex, cell.colIndex);\n }\n }\n this.parent.trigger(events.headerCellInfo, args);\n };\n Render.prototype.getRowStartPos = function () {\n var pivotValues = this.parent.pivotValues;\n var rowPos;\n for (var rCnt = 0; rCnt < pivotValues.length; rCnt++) {\n if (pivotValues[rCnt] && pivotValues[rCnt][0] && pivotValues[rCnt][0].axis === 'row') {\n rowPos = rCnt;\n break;\n }\n }\n return rowPos;\n };\n Render.prototype.frameDataSource = function (type) {\n var dataContent = [];\n if (this.parent.dataSource.values.length > 0) {\n if ((this.parent.dataSource.valueSortSettings && this.parent.dataSource.valueSortSettings.sortOrder &&\n this.parent.dataSource.valueSortSettings.sortOrder !== 'None') || !this.engine.isEngineUpdated) {\n var rowCnt = 0;\n var pivotValues = this.parent.pivotValues;\n var start = type === 'value' ? this.rowStartPos : 0;\n var end = type === 'value' ? pivotValues.length : this.rowStartPos;\n for (var rCnt = start; rCnt < end; rCnt++) {\n if (pivotValues[rCnt]) {\n rowCnt = type === 'header' ? rCnt : rowCnt;\n dataContent[rowCnt] = {};\n for (var cCnt = 0; cCnt < pivotValues[rCnt].length; cCnt++) {\n if (pivotValues[rCnt][cCnt]) {\n dataContent[rowCnt][cCnt] = pivotValues[rCnt][cCnt];\n }\n }\n rowCnt++;\n }\n }\n }\n else {\n dataContent = type === 'value' ? this.engine.valueContent : this.engine.headerContent;\n }\n }\n else {\n dataContent = this.frameEmptyData();\n }\n return dataContent;\n };\n Render.prototype.frameEmptyData = function () {\n var dataContent = [{\n 0: { formattedText: this.parent.localeObj.getConstant('grandTotal') },\n 1: { formattedText: this.parent.localeObj.getConstant('emptyData') }\n }];\n return dataContent;\n };\n Render.prototype.calculateColWidth = function (colCount) {\n var parWidth = isNaN(this.parent.width) ? (this.parent.width.toString().indexOf('%') > -1 ?\n ((parseFloat(this.parent.width.toString()) / 100) * this.parent.element.offsetWidth) : this.parent.element.offsetWidth) :\n Number(this.parent.width);\n var colWidth = (colCount * this.gridSettings.columnWidth + 80) < parWidth ?\n (parWidth / colCount) : this.gridSettings.columnWidth;\n return colWidth;\n };\n Render.prototype.calculateGridWidth = function () {\n var colTotWidth = (this.engine.pivotValues[0].length * this.gridSettings.columnWidth + 80);\n var parWidth = this.parent.width;\n if (this.parent.width === 'auto' && this.parent.element.offsetWidth < colTotWidth) {\n parWidth = this.parent.element.offsetWidth;\n }\n return parWidth;\n };\n Render.prototype.frameStackedHeaders = function () {\n var integrateModel = [];\n if (this.parent.dataSource.values.length > 0) {\n var headerCnt = this.engine.headerContent.length;\n var headerSplit = [];\n var splitPos = [];\n var colWidth = this.calculateColWidth(this.engine.pivotValues[0].length);\n do {\n var columnModel = [];\n var actualCnt = 0;\n headerCnt--;\n var colField = this.engine.headerContent[headerCnt];\n if (colField) {\n for (var cCnt = 0; cCnt < Object.keys(colField).length + (colField[0] ? 0 : 1); cCnt++) {\n var colSpan = (colField[cCnt] && colField[cCnt].colSpan) ? colField[cCnt].colSpan : 1;\n var rowSpan = (colField[cCnt] && colField[cCnt].rowSpan) ? colField[cCnt].rowSpan : 1;\n if (headerCnt === this.engine.headerContent.length - 1) {\n columnModel[actualCnt] = {\n field: (cCnt + '.formattedText'),\n headerText: colField[cCnt] ? colField[cCnt].formattedText : '',\n customAttributes: { 'cell': colField[cCnt] },\n width: colWidth,\n minWidth: 30,\n format: cCnt === 0 ? '' : this.formatList[(cCnt - 1) % this.parent.dataSource.values.length]\n };\n }\n else if (headerSplit[cCnt]) {\n var tmpSpan = colSpan;\n var innerModel = [];\n var innerPos = cCnt;\n while (tmpSpan > 0) {\n if (columnModel[actualCnt]) {\n innerModel.push(integrateModel[splitPos[innerPos]]);\n }\n else {\n columnModel[actualCnt] = {\n headerText: colField[cCnt] ? colField[cCnt].formattedText : '',\n customAttributes: { 'cell': colField[cCnt] },\n width: colWidth,\n minWidth: 30\n };\n innerModel = [integrateModel[splitPos[innerPos]]];\n }\n tmpSpan = tmpSpan - headerSplit[innerPos];\n innerPos = innerPos + headerSplit[innerPos];\n }\n columnModel[actualCnt].columns = innerModel;\n }\n if (columnModel[actualCnt]) {\n columnModel[actualCnt].clipMode = this.gridSettings.clipMode;\n }\n headerSplit[cCnt] = colSpan;\n splitPos[cCnt] = actualCnt;\n actualCnt++;\n cCnt = cCnt + colSpan - 1;\n }\n }\n integrateModel = columnModel.length > 0 ? columnModel : integrateModel;\n } while (headerCnt > 0);\n integrateModel[0] = {\n field: (0 + '.formattedText'),\n width: (this.parent.showGroupingBar && this.parent.groupingBarModule) ? colWidth < 250 ? 250 : colWidth : colWidth < 200 ? 200 : colWidth,\n minWidth: 30,\n headerText: '',\n allowReordering: false\n };\n }\n else {\n integrateModel = this.frameEmptyColumns();\n }\n return integrateModel;\n };\n Render.prototype.frameEmptyColumns = function () {\n var columns = [];\n var colWidth = this.calculateColWidth(2);\n columns.push({ field: '0.formattedText', headerText: '', minWidth: 30, width: colWidth });\n columns.push({ field: '1.formattedText', headerText: this.parent.localeObj.getConstant('grandTotal'), minWidth: 30, width: colWidth });\n return columns;\n };\n /** @hidden */\n Render.prototype.getFormatList = function () {\n var formatArray = [];\n for (var vCnt = 0; vCnt < this.parent.dataSource.values.length; vCnt++) {\n var field = this.parent.dataSource.values[vCnt];\n if (this.parent.dataSource.formatSettings.length > 0) {\n var format = '';\n for (var fCnt = 0; fCnt < this.parent.dataSource.formatSettings.length; fCnt++) {\n var formatSettings = this.parent.dataSource.formatSettings[fCnt];\n if (field.name === formatSettings.name) {\n format = formatSettings.format;\n break;\n }\n else {\n continue;\n }\n }\n formatArray.push(format);\n }\n else {\n formatArray.push('N');\n }\n }\n return formatArray;\n };\n Render.prototype.excelColumnEvent = function (args) {\n args = this.exportHeaderEvent(args);\n this.parent.trigger(events.excelHeaderQueryCellInfo, args);\n };\n Render.prototype.pdfColumnEvent = function (args) {\n args = this.exportHeaderEvent(args);\n this.parent.trigger(events.pdfHeaderQueryCellInfo, args);\n };\n Render.prototype.excelRowEvent = function (args) {\n if (args.column.field === '0.formattedText') {\n this.colPos = 0;\n args.style = { hAlign: 'Left', indent: args.data[0].level * 2 };\n }\n else {\n this.colPos++;\n args.value = args.data[this.colPos].value || args.data[this.colPos].formattedText;\n }\n args = this.exportContentEvent(args);\n this.parent.trigger(events.excelQueryCellInfo, args);\n };\n /* tslint:disable:no-any */\n Render.prototype.pdfRowEvent = function (args) {\n args = this.exportContentEvent(args);\n if (args.column.field === '0.formattedText') {\n args.style = { paragraphIndent: args.data[0].level * 10 };\n }\n this.parent.trigger(events.pdfQueryCellInfo, args);\n };\n Render.prototype.exportHeaderEvent = function (args) {\n var rowSpan = 1;\n if (args.gridCell.column.customAttributes) {\n var cell = args.gridCell.column.customAttributes.cell;\n rowSpan = cell.rowSpan ? cell.rowSpan : 1;\n }\n else {\n rowSpan = Object.keys(this.engine.headerContent).length;\n }\n if (args.cell.rowSpan && args.cell.rowSpan !== rowSpan) {\n args.cell.rowSpan = rowSpan;\n }\n return args;\n };\n Render.prototype.exportContentEvent = function (args) {\n if (args.value === '0') {\n args.value = '';\n }\n return args;\n };\n return Render;\n}());\nexport { Render };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, Complex, Collection, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the fields in dataSource.\n */\nvar FieldOptions = /** @class */ (function (_super) {\n __extends(FieldOptions, _super);\n function FieldOptions() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], FieldOptions.prototype, \"name\", void 0);\n __decorate([\n Property()\n ], FieldOptions.prototype, \"caption\", void 0);\n __decorate([\n Property('Sum')\n ], FieldOptions.prototype, \"type\", void 0);\n __decorate([\n Property()\n ], FieldOptions.prototype, \"axis\", void 0);\n return FieldOptions;\n}(ChildProperty));\nexport { FieldOptions };\nvar FieldListFieldOptions = /** @class */ (function (_super) {\n __extends(FieldListFieldOptions, _super);\n function FieldListFieldOptions() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return FieldListFieldOptions;\n}(FieldOptions));\nexport { FieldListFieldOptions };\n/**\n * Configures the filter settings.\n */\nvar Filter = /** @class */ (function (_super) {\n __extends(Filter, _super);\n function Filter() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], Filter.prototype, \"name\", void 0);\n __decorate([\n Property()\n ], Filter.prototype, \"type\", void 0);\n __decorate([\n Property()\n ], Filter.prototype, \"items\", void 0);\n return Filter;\n}(ChildProperty));\nexport { Filter };\n/**\n * Configures the sort settings.\n */\nvar Sort = /** @class */ (function (_super) {\n __extends(Sort, _super);\n function Sort() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], Sort.prototype, \"name\", void 0);\n __decorate([\n Property('Ascending')\n ], Sort.prototype, \"order\", void 0);\n return Sort;\n}(ChildProperty));\nexport { Sort };\n/**\n * Configures the format settings of value fields.\n */\nvar FormatSettings = /** @class */ (function (_super) {\n __extends(FormatSettings, _super);\n function FormatSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], FormatSettings.prototype, \"name\", void 0);\n __decorate([\n Property()\n ], FormatSettings.prototype, \"minimumFractionDigits\", void 0);\n __decorate([\n Property()\n ], FormatSettings.prototype, \"maximumFractionDigits\", void 0);\n __decorate([\n Property()\n ], FormatSettings.prototype, \"minimumSignificantDigits\", void 0);\n __decorate([\n Property()\n ], FormatSettings.prototype, \"maximumSignificantDigits\", void 0);\n __decorate([\n Property()\n ], FormatSettings.prototype, \"useGrouping\", void 0);\n __decorate([\n Property()\n ], FormatSettings.prototype, \"skeleton\", void 0);\n __decorate([\n Property()\n ], FormatSettings.prototype, \"type\", void 0);\n __decorate([\n Property()\n ], FormatSettings.prototype, \"currency\", void 0);\n __decorate([\n Property()\n ], FormatSettings.prototype, \"minimumIntegerDigits\", void 0);\n __decorate([\n Property()\n ], FormatSettings.prototype, \"format\", void 0);\n return FormatSettings;\n}(ChildProperty));\nexport { FormatSettings };\n/**\n * Configures the calculatedfields settings.\n */\nvar CalculatedFieldSettings = /** @class */ (function (_super) {\n __extends(CalculatedFieldSettings, _super);\n function CalculatedFieldSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], CalculatedFieldSettings.prototype, \"name\", void 0);\n __decorate([\n Property()\n ], CalculatedFieldSettings.prototype, \"formula\", void 0);\n return CalculatedFieldSettings;\n}(ChildProperty));\nexport { CalculatedFieldSettings };\n/**\n * Configures the page settings.\n */\n/** @hidden */\nvar PageSettings = /** @class */ (function (_super) {\n __extends(PageSettings, _super);\n function PageSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], PageSettings.prototype, \"columnSize\", void 0);\n __decorate([\n Property()\n ], PageSettings.prototype, \"rowSize\", void 0);\n __decorate([\n Property()\n ], PageSettings.prototype, \"columnCurrentPage\", void 0);\n __decorate([\n Property()\n ], PageSettings.prototype, \"rowCurrentPage\", void 0);\n return PageSettings;\n}(ChildProperty));\nexport { PageSettings };\n/**\n * Configures drilled state of field members.\n */\nvar DrillOptions = /** @class */ (function (_super) {\n __extends(DrillOptions, _super);\n function DrillOptions() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], DrillOptions.prototype, \"name\", void 0);\n __decorate([\n Property()\n ], DrillOptions.prototype, \"items\", void 0);\n return DrillOptions;\n}(ChildProperty));\nexport { DrillOptions };\n/**\n * Configures value sort settings.\n */\nvar ValueSortSettings = /** @class */ (function (_super) {\n __extends(ValueSortSettings, _super);\n function ValueSortSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], ValueSortSettings.prototype, \"headerText\", void 0);\n __decorate([\n Property('.')\n ], ValueSortSettings.prototype, \"headerDelimiter\", void 0);\n __decorate([\n Property('None')\n ], ValueSortSettings.prototype, \"sortOrder\", void 0);\n __decorate([\n Property(undefined)\n ], ValueSortSettings.prototype, \"columnIndex\", void 0);\n return ValueSortSettings;\n}(ChildProperty));\nexport { ValueSortSettings };\n/**\n * Configures the settings of dataSource.\n */\nvar DataSource = /** @class */ (function (_super) {\n __extends(DataSource, _super);\n function DataSource() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], DataSource.prototype, \"data\", void 0);\n __decorate([\n Collection([], FieldOptions)\n ], DataSource.prototype, \"rows\", void 0);\n __decorate([\n Collection([], FieldOptions)\n ], DataSource.prototype, \"columns\", void 0);\n __decorate([\n Collection([], FieldOptions)\n ], DataSource.prototype, \"values\", void 0);\n __decorate([\n Collection([], FieldOptions)\n ], DataSource.prototype, \"filters\", void 0);\n __decorate([\n Property(true)\n ], DataSource.prototype, \"expandAll\", void 0);\n __decorate([\n Collection([], Filter)\n ], DataSource.prototype, \"filterSettings\", void 0);\n __decorate([\n Collection([], Sort)\n ], DataSource.prototype, \"sortSettings\", void 0);\n __decorate([\n Property(true)\n ], DataSource.prototype, \"enableSorting\", void 0);\n __decorate([\n Property([])\n ], DataSource.prototype, \"formatSettings\", void 0);\n __decorate([\n Complex({}, PageSettings)\n ], DataSource.prototype, \"pageSettings\", void 0);\n __decorate([\n Collection([], DrillOptions)\n ], DataSource.prototype, \"drilledMembers\", void 0);\n __decorate([\n Complex({}, ValueSortSettings)\n ], DataSource.prototype, \"valueSortSettings\", void 0);\n __decorate([\n Collection([], CalculatedFieldSettings)\n ], DataSource.prototype, \"calculatedFieldSettings\", void 0);\n return DataSource;\n}(ChildProperty));\nexport { DataSource };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, Event } from '@syncfusion/ej2-base';\n/**\n * Represents Pivot widget model class.\n */\nvar GridSettings = /** @class */ (function (_super) {\n __extends(GridSettings, _super);\n function GridSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Both')\n ], GridSettings.prototype, \"gridLines\", void 0);\n __decorate([\n Property(false)\n ], GridSettings.prototype, \"allowTextWrap\", void 0);\n __decorate([\n Property(false)\n ], GridSettings.prototype, \"allowReordering\", void 0);\n __decorate([\n Property(true)\n ], GridSettings.prototype, \"allowResizing\", void 0);\n __decorate([\n Property(null)\n ], GridSettings.prototype, \"rowHeight\", void 0);\n __decorate([\n Property(110)\n ], GridSettings.prototype, \"columnWidth\", void 0);\n __decorate([\n Property('Ellipsis')\n ], GridSettings.prototype, \"clipMode\", void 0);\n __decorate([\n Property(false)\n ], GridSettings.prototype, \"allowSelection\", void 0);\n __decorate([\n Property(-1)\n ], GridSettings.prototype, \"selectedRowIndex\", void 0);\n __decorate([\n Property({ mode: 'Row', cellSelectionMode: 'Flow', type: 'Single' })\n ], GridSettings.prototype, \"selectionSettings\", void 0);\n __decorate([\n Property('AllPages')\n ], GridSettings.prototype, \"printMode\", void 0);\n __decorate([\n Property()\n ], GridSettings.prototype, \"contextMenuItems\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"beforeCopy\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"printComplete\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"beforePrint\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"contextMenuOpen\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"contextMenuClick\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"queryCellInfo\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"headerCellInfo\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"rowSelecting\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"rowSelected\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"rowDeselecting\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"rowDeselected\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"cellSelecting\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"cellSelected\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"cellDeselecting\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"cellDeselected\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"resizeStart\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"resizing\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"resizeStop\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"pdfHeaderQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"pdfQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"excelHeaderQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"excelQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"columnDragStart\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"columnDrag\", void 0);\n __decorate([\n Event()\n ], GridSettings.prototype, \"columnDrop\", void 0);\n return GridSettings;\n}(ChildProperty));\nexport { GridSettings };\n","import { KeyboardEvents, closest, addClass } from '@syncfusion/ej2-base';\nimport * as cls from '../../common/base/css-constant';\n/**\n * PivotView Keyboard interaction\n */\n/** @hidden */\nvar KeyboardInteraction = /** @class */ (function () {\n /**\n * Constructor\n */\n function KeyboardInteraction(parent) {\n this.keyConfigs = {\n tab: 'tab',\n enter: 'enter',\n };\n this.parent = parent;\n this.parent.element.tabIndex = this.parent.element.tabIndex === -1 ? 0 : this.parent.element.tabIndex;\n this.pivotViewKeyboardModule = new KeyboardEvents(this.parent.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n }\n KeyboardInteraction.prototype.keyActionHandler = function (e) {\n switch (e.action) {\n case 'tab':\n this.processTab(e);\n break;\n case 'enter':\n this.processEnter(e);\n break;\n }\n };\n KeyboardInteraction.prototype.getNextButton = function (target) {\n var allPivotButtons = [].slice.call(this.parent.element.querySelectorAll('.' + cls.PIVOT_BUTTON_CLASS));\n var nextElement = target;\n if (this.parent.grid.element.querySelector('.' + cls.PIVOT_BUTTON_CLASS)) {\n var len = allPivotButtons.length;\n for (var i = 0; i < len; i++) {\n if (allPivotButtons[i].getAttribute('data-uid') === target.getAttribute('data-uid')) {\n nextElement = allPivotButtons[i + 1] ? allPivotButtons[i + 1] : nextElement;\n break;\n }\n }\n }\n return nextElement;\n };\n KeyboardInteraction.prototype.processTab = function (e) {\n var target = e.target;\n if (target && closest(target, '.' + cls.PIVOT_BUTTON_CLASS)) {\n var gridFocus = this.parent.grid.serviceLocator.getService('focus');\n var nextButton = this.getNextButton(target);\n if (nextButton.getAttribute('data-uid') !== target.getAttribute('data-uid')) {\n gridFocus.currentInfo.skipAction = true;\n nextButton.focus();\n }\n else {\n gridFocus.focus();\n var element = gridFocus.getFocusedElement();\n addClass([element], ['e-focused', 'e-focus']);\n element.setAttribute('tabindex', '0');\n }\n e.preventDefault();\n return;\n }\n else if (!this.parent.showGroupingBar && this.parent.showFieldList) {\n if (target && closest(target, '.' + cls.TOGGLE_FIELD_LIST_CLASS)) {\n var gridFocus = this.parent.grid.serviceLocator.getService('focus');\n gridFocus.focus();\n var element = gridFocus.getFocusedElement();\n addClass([element], ['e-focused', 'e-focus']);\n element.setAttribute('tabindex', '0');\n }\n }\n else if (!this.parent.showGroupingBar && !this.parent.showFieldList) {\n if (target && closest(target, '.' + cls.PIVOT_VIEW_CLASS)) {\n var gridFocus = this.parent.grid.serviceLocator.getService('focus');\n gridFocus.focus();\n var element = gridFocus.getFocusedElement();\n addClass([element], ['e-focused', 'e-focus']);\n element.setAttribute('tabindex', '0');\n }\n }\n };\n KeyboardInteraction.prototype.processEnter = function (e) {\n var target = e.target;\n if (target && closest(target, '.' + cls.GRID_CLASS) && target.querySelector('.' + cls.ICON)) {\n target.querySelector('.' + cls.ICON).click();\n e.preventDefault();\n return;\n }\n };\n /**\n * To destroy the keyboard module.\n * @return {void}\n * @private\n */\n KeyboardInteraction.prototype.destroy = function () {\n this.pivotViewKeyboardModule.destroy();\n };\n return KeyboardInteraction;\n}());\nexport { KeyboardInteraction };\n","import { createElement } from '@syncfusion/ej2-base';\nimport { addClass, removeClass } from '@syncfusion/ej2-base';\nimport * as cls from '../../common/base/css-constant';\nimport { ContextMenu } from '@syncfusion/ej2-navigations';\n/**\n * Module to render Pivot button\n */\n/** @hidden */\nvar PivotContextMenu = /** @class */ (function () {\n /** Constructor for render module */\n function PivotContextMenu(parent) {\n this.parent = parent;\n this.parent.contextMenuModule = this;\n }\n /**\n * Initialize the pivot table rendering\n * @returns void\n * @private\n */\n PivotContextMenu.prototype.render = function () {\n this.renderContextMenu();\n };\n PivotContextMenu.prototype.renderContextMenu = function () {\n var menuItems = [\n { text: this.parent.localeObj.getConstant('addToFilter'), id: 'Context_Filters' },\n { text: this.parent.localeObj.getConstant('addToRow'), id: 'Context_Rows' },\n { text: this.parent.localeObj.getConstant('addToColumn'), id: 'Context_Columns' },\n { text: this.parent.localeObj.getConstant('addToValue'), id: 'Context_Values' }\n ];\n var menuOptions = {\n cssClass: cls.PIVOT_CONTEXT_MENU_CLASS,\n items: menuItems,\n enableRtl: this.parent.enableRtl,\n beforeOpen: this.onBeforeMenuOpen.bind(this),\n select: this.onSelectContextMenu.bind(this)\n };\n this.parent.element.appendChild(createElement('ul', {\n id: this.parent.element.id + '_PivotContextMenu'\n }));\n this.menuObj = new ContextMenu(menuOptions);\n this.menuObj.appendTo('#' + this.parent.element.id + '_PivotContextMenu');\n };\n PivotContextMenu.prototype.onBeforeMenuOpen = function (args) {\n var items = [].slice.call(args.element.querySelectorAll('li'));\n var fieldType = this.fieldElement.querySelector('.' + cls.PIVOT_BUTTON_CONTENT_CLASS).getAttribute('data-type');\n removeClass(items, cls.MENU_DISABLE);\n if (fieldType === 'CalculatedField') {\n for (var _i = 0, items_1 = items; _i < items_1.length; _i++) {\n var item = items_1[_i];\n if (item.textContent !== this.parent.localeObj.getConstant('addToValue')) {\n addClass([item], cls.MENU_DISABLE);\n }\n }\n }\n };\n PivotContextMenu.prototype.onSelectContextMenu = function (menu) {\n if (menu.element.textContent !== null) {\n var fieldName = this.fieldElement.getAttribute('data-uid');\n var dropClass = menu.item.id.replace('Context_', '').toLowerCase();\n this.parent.pivotCommon.dataSourceUpdate.updateDataSource(fieldName, dropClass, -1);\n this.parent.updateDataSource(true);\n this.fieldElement = undefined;\n }\n };\n /**\n * To destroy the pivot button event listener\n * @return {void}\n * @hidden\n */\n PivotContextMenu.prototype.destroy = function () {\n if (!this.parent.isDestroyed) {\n return;\n }\n this.parent.contextMenuModule.destroy();\n };\n return PivotContextMenu;\n}());\nexport { PivotContextMenu };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, Browser, Event, Component } from '@syncfusion/ej2-base';\nimport { EventHandler, Complex, extend, ChildProperty } from '@syncfusion/ej2-base';\nimport { Internationalization, L10n, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { removeClass, addClass } from '@syncfusion/ej2-base';\nimport { PivotEngine } from '../../base/engine';\nimport { Tooltip, createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport * as events from '../../common/base/constant';\nimport * as cls from '../../common/base/css-constant';\nimport { Render } from '../renderer/render';\nimport { DataSource } from '../model/dataSource';\nimport { GridSettings } from '../model/gridsettings';\nimport { Grid, } from '@syncfusion/ej2-grids';\nimport { KeyboardInteraction } from '../actions/keyboard';\nimport { PivotContextMenu } from '../../common/popups/context-menu';\n/**\n * It holds the settings of Grouping Bar.\n */\nvar GroupingBarSettings = /** @class */ (function (_super) {\n __extends(GroupingBarSettings, _super);\n function GroupingBarSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], GroupingBarSettings.prototype, \"showFilterIcon\", void 0);\n __decorate([\n Property(true)\n ], GroupingBarSettings.prototype, \"showSortIcon\", void 0);\n __decorate([\n Property(true)\n ], GroupingBarSettings.prototype, \"showRemoveIcon\", void 0);\n return GroupingBarSettings;\n}(ChildProperty));\nexport { GroupingBarSettings };\n/**\n * Represents the PivotView component.\n * ```html\n *
    \n * \n * ```\n */\nvar PivotView = /** @class */ (function (_super) {\n __extends(PivotView, _super);\n /**\n * Constructor for creating the widget\n * @param {PivotViewModel} options?\n * @param {string|HTMLElement} element?\n */\n function PivotView(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.needsID = true;\n _this.pivotView = _this;\n return _this;\n }\n /**\n * To provide the array of modules needed for control rendering\n * @return {ModuleDeclaration[]}\n * @hidden\n */\n PivotView.prototype.requiredModules = function () {\n var modules = [];\n var isCommonRequire;\n if (this.allowCalculatedField) {\n isCommonRequire = true;\n modules.push({ args: [this], member: 'calculatedfield' });\n }\n if (this.showGroupingBar) {\n isCommonRequire = true;\n modules.push({ args: [this], member: 'grouping' });\n }\n if (this.showFieldList) {\n isCommonRequire = true;\n modules.push({ args: [this], member: 'fieldlist' });\n }\n if (this.allowExcelExport) {\n modules.push({ args: [this], member: 'excelExport' });\n }\n if (this.allowPdfExport) {\n modules.push({ args: [this], member: 'pdfExport' });\n }\n if (isCommonRequire) {\n modules.push({ args: [this], member: 'common' });\n }\n return modules;\n };\n /**\n * For internal use only - Initializing internal properties;\n * @private\n */\n PivotView.prototype.preRender = function () {\n this.initProperties();\n this.isAdaptive = Browser.isDevice;\n this.toolTip = new Tooltip({\n target: 'td.e-valuescontent',\n showTipPointer: false,\n enableRtl: this.enableRtl,\n beforeRender: this.setToolTip.bind(this),\n beforeOpen: this.onBeforeTooltipOpen\n });\n this.keyboardModule = new KeyboardInteraction(this);\n this.contextMenuModule = new PivotContextMenu(this);\n this.toolTip.appendTo(this.element);\n this.globalize = new Internationalization(this.locale);\n this.defaultLocale = {\n grandTotal: 'Grand Total',\n total: 'Total',\n value: 'Value',\n noValue: 'No value',\n row: 'Row',\n column: 'Column',\n collapse: 'Collapse',\n expand: 'Expand',\n rowAxisPrompt: 'Drop row here',\n columnAxisPrompt: 'Drop column here',\n valueAxisPrompt: 'Drop value here',\n filterAxisPrompt: 'Drop filter here',\n filter: 'Filter',\n filtered: 'Filtered',\n sort: 'Sort',\n filters: 'Filters',\n rows: 'Rows',\n columns: 'Columns',\n values: 'Values',\n close: 'Close',\n cancel: 'Cancel',\n delete: 'Delete',\n calculatedField: 'Calculated Field',\n createCalculatedField: 'Create Calculated Field',\n fieldName: 'Enter the field name',\n error: 'Error',\n invalidFormula: 'Invalid formula.',\n dropText: 'Example: (\"Sum(Order_Count)\" + \"Sum(In_Stock)\") * 250',\n dropTextMobile: 'Add fields and edit formula here.',\n dropAction: 'Calculated field cannot be place in any other region except value axis.',\n alert: 'Alert',\n warning: 'Warning',\n ok: 'OK',\n search: 'Search',\n drag: 'Drag',\n remove: 'Remove',\n sum: 'Sum',\n average: 'Average',\n count: 'Count',\n min: 'Min',\n max: 'Max',\n allFields: 'All Fields',\n formula: 'Formula',\n addToRow: 'Add to Row',\n addToColumn: 'Add to Column',\n addToValue: 'Add to Value',\n addToFilter: 'Add to Filter',\n emptyData: 'No records to display',\n fieldExist: 'A field already exists in this name. Please enter a different name.',\n confirmText: 'A calculation field already exists in this name. Do you want to replace it?',\n noMatches: 'No matches',\n format: 'Summaries values by',\n edit: 'Edit',\n clear: 'Clear',\n formulaField: 'Drag and drop fields to formula',\n dragField: 'Drag field to formula'\n };\n this.localeObj = new L10n(this.getModuleName(), this.defaultLocale, this.locale);\n this.isDragging = false;\n this.addInternalEvents();\n };\n PivotView.prototype.onBeforeTooltipOpen = function (args) {\n args.element.classList.add('e-pivottooltipwrap');\n };\n PivotView.prototype.initProperties = function () {\n this.setProperties({ pivotValues: [] }, true);\n this.queryCellInfo = this.gridSettings.queryCellInfo ? this.gridSettings.queryCellInfo.bind(this) : undefined;\n this.headerCellInfo = this.gridSettings.headerCellInfo ? this.gridSettings.headerCellInfo.bind(this) : undefined;\n this.resizing = this.gridSettings.resizing ? this.gridSettings.resizing.bind(this) : undefined;\n this.resizeStop = this.gridSettings.resizeStop ? this.gridSettings.resizeStop.bind(this) : undefined;\n this.pdfHeaderQueryCellInfo = this.gridSettings.pdfHeaderQueryCellInfo ?\n this.gridSettings.pdfHeaderQueryCellInfo.bind(this) : undefined;\n this.pdfQueryCellInfo = this.gridSettings.pdfQueryCellInfo ? this.gridSettings.pdfQueryCellInfo.bind(this) : undefined;\n this.excelHeaderQueryCellInfo = this.gridSettings.excelHeaderQueryCellInfo ?\n this.gridSettings.excelHeaderQueryCellInfo.bind(this) : undefined;\n this.excelQueryCellInfo = this.gridSettings.excelQueryCellInfo ?\n this.gridSettings.excelQueryCellInfo.bind(this) : undefined;\n this.columnDragStart = this.gridSettings.columnDragStart ? this.gridSettings.columnDragStart.bind(this) : undefined;\n this.columnDrag = this.gridSettings.columnDrag ? this.gridSettings.columnDrag.bind(this) : undefined;\n this.columnDrop = this.gridSettings.columnDrop ? this.gridSettings.columnDrop.bind(this) : undefined;\n if (this.gridSettings.rowHeight === null) {\n this.setProperties({ gridSettings: { rowHeight: this.isAdaptive ? 48 : 36 } }, true);\n }\n };\n /**\n * Initialize the control rendering\n * @returns void\n * @hidden\n */\n PivotView.prototype.render = function () {\n createSpinner({ target: this.element });\n this.trigger(events.load, { 'dataSource': this.dataSource });\n this.updateClass();\n this.notify(events.initSubComponent, {});\n this.notify(events.initialLoad, {});\n if (this.isAdaptive) {\n this.contextMenuModule.render();\n }\n };\n /**\n * Register the internal events.\n * @returns void\n * @hidden\n */\n PivotView.prototype.addInternalEvents = function () {\n this.on(events.initialLoad, this.generateData, this);\n this.on(events.dataReady, this.renderPivotGrid, this);\n this.on(events.contentReady, this.onContentReady, this);\n };\n /**\n * De-Register the internal events.\n * @returns void\n * @hidden\n */\n PivotView.prototype.removeInternalEvents = function () {\n this.off(events.initialLoad, this.generateData);\n this.off(events.dataReady, this.renderPivotGrid);\n this.off(events.contentReady, this.onContentReady);\n };\n /**\n * Get the Pivot widget properties to be maintained in the persisted state.\n * @returns {string}\n * @hidden\n */\n PivotView.prototype.getPersistData = function () {\n var keyEntity = ['dataSource', 'pivotValues', 'gridSettings'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * It returns the Module name.\n * @returns string\n * @hidden\n */\n PivotView.prototype.getModuleName = function () {\n return 'pivotview';\n };\n /**\n * Copy the selected rows or cells data into clipboard.\n * @param {boolean} withHeader - Specifies whether the column header text needs to be copied along with rows or cells.\n * @returns {void}\n * @hidden\n */\n PivotView.prototype.copy = function (withHeader) {\n this.grid.copy(withHeader);\n };\n /**\n * By default, prints all the pages of the Grid and hides the pager.\n * > You can customize print options using the\n * [`printMode`](./api-pivotgrid.html#printmode-string).\n * @returns {void}\n * @hidden\n */\n // public print(): void {\n // this.grid.print();\n // }\n /**\n * Called internally if any of the property value changed.\n * @returns void\n * @hidden\n */\n PivotView.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'dataSource':\n this.notify(events.initialLoad, {});\n break;\n case 'pivotValues':\n this.notify(events.dataReady, {});\n break;\n case 'gridSettings':\n this.renderModule.updateGridSettings();\n break;\n case 'locale':\n case 'currencyCode':\n this.toolTip.destroy();\n _super.prototype.refresh.call(this);\n break;\n case 'enableRtl':\n this.notify(events.dataReady, {});\n this.updateClass();\n break;\n case 'groupingBarSettings':\n this.axisFieldModule.render();\n break;\n }\n }\n };\n /**\n * Render the UI section of PivotView.\n * @returns void\n * @hidden\n */\n PivotView.prototype.renderPivotGrid = function () {\n this.renderModule = new Render(this);\n this.renderModule.render();\n this.notify(events.uiUpdate, this);\n this.trigger(events.dataBound);\n };\n /**\n * Updates the PivotEngine using dataSource from Pivot View component.\n * @method updateDataSource\n * @return {void}\n * @hidden\n */\n PivotView.prototype.updateDataSource = function (isRefreshGrid) {\n showSpinner(this.element);\n this.engineModule = new PivotEngine(this.dataSource, '', this.engineModule.fieldList);\n var eventArgs = {\n dataSource: this.dataSource,\n pivotValues: this.engineModule.pivotValues\n };\n this.trigger(events.enginePopulated, eventArgs);\n this.pivotCommon.engineModule = this.engineModule;\n this.pivotCommon.dataSource = this.dataSource;\n this.setProperties({ pivotValues: this.engineModule.pivotValues }, true);\n this.renderPivotGrid();\n };\n /**\n * To destroy the PivotView elements.\n * @returns void\n */\n PivotView.prototype.destroy = function () {\n this.removeInternalEvents();\n if (this.showGroupingBar && this.groupingBarModule) {\n this.groupingBarModule.destroy();\n }\n if (this.isAdaptive) {\n this.contextMenuModule.destroy();\n }\n if (this.keyboardModule) {\n this.keyboardModule.destroy();\n }\n this.unwireEvents();\n removeClass([this.element], cls.ROOT);\n removeClass([this.element], cls.RTL);\n removeClass([this.element], cls.DEVICE);\n this.element.innerHTML = '';\n _super.prototype.destroy.call(this);\n };\n /**\n * Export Pivot widget data to Excel file(.xlsx).\n * @param {ExcelExportProperties} excelExportProperties - Defines the export properties of the Grid.\n * @param {boolean} isMultipleExport - Define to enable multiple export.\n * @param {workbook} workbook - Defines the Workbook if multiple export is enabled.\n * @param {boolean} isBlob - If 'isBlob' set to true, then it will be returned as blob data.\n * @returns void\n */\n /* tslint:disable-next-line:no-any */\n PivotView.prototype.excelExport = function (excelExportProperties, isMultipleExport, workbook, isBlob) {\n this.grid.excelExport(excelExportProperties, isMultipleExport, workbook, isBlob);\n };\n /**\n * Export PivotGrid data to CSV file.\n * @param {ExcelExportProperties} excelExportProperties - Defines the export properties of the Grid.\n * @param {boolean} isMultipleExport - Define to enable multiple export.\n * @param {workbook} workbook - Defines the Workbook if multiple export is enabled.\n * @param {boolean} isBlob - If 'isBlob' set to true, then it will be returned as blob data.\n * @returns void\n */\n /* tslint:disable-next-line:no-any */\n PivotView.prototype.csvExport = function (excelExportProperties, isMultipleExport, workbook, isBlob) {\n this.grid.csvExport(excelExportProperties, isMultipleExport, workbook, isBlob);\n };\n /**\n * Export Pivot widget data to PDF document.\n * @param {pdfExportProperties} PdfExportProperties - Defines the export properties of the Grid.\n * @param {isMultipleExport} isMultipleExport - Define to enable multiple export.\n * @param {pdfDoc} pdfDoc - Defined the Pdf Document if multiple export is enabled.\n * @param {boolean} isBlob - If 'isBlob' set to true, then it will be returned as blob data.\n * @returns void\n */\n PivotView.prototype.pdfExport = function (pdfExportProperties, isMultipleExport, pdfDoc, isBlob) {\n this.grid.pdfExport(pdfExportProperties, isMultipleExport, pdfDoc, isBlob);\n };\n PivotView.prototype.onDrill = function (target) {\n var fieldName = target.parentElement.getAttribute('fieldname');\n var memberName = this.engineModule.pivotValues[Number(target.parentElement.getAttribute('index'))][Number(target.parentElement.getAttribute('aria-colindex'))].actualText;\n this.engineModule.fieldList[fieldName].members[memberName].isDrilled =\n target.classList.contains(cls.COLLAPSE) ? false : true;\n var dataSource = extend({}, this.dataSource, null, true);\n var fieldAvail = false;\n var prop = dataSource.properties;\n if (!prop.drilledMembers || prop.drilledMembers.length === 0) {\n prop.drilledMembers = [{ name: fieldName, items: [memberName] }];\n }\n else {\n for (var fCnt = 0; fCnt < prop.drilledMembers.length; fCnt++) {\n var field = prop.drilledMembers[fCnt];\n if (field.name === fieldName) {\n fieldAvail = true;\n var memIndex = field.items.indexOf(memberName);\n if (memIndex > -1) {\n field.items.splice(memIndex, 1);\n }\n else {\n field.items.push(memberName);\n }\n }\n else {\n continue;\n }\n }\n if (!fieldAvail) {\n prop.drilledMembers.push({ name: fieldName, items: [memberName] });\n }\n }\n this.setProperties({ dataSource: { drilledMembers: prop.drilledMembers } }, true);\n showSpinner(this.element);\n this.engineModule.generateGridData(this.dataSource);\n this.setProperties({ pivotValues: this.engineModule.pivotValues }, true);\n this.renderPivotGrid();\n };\n PivotView.prototype.onContentReady = function () {\n if (this.showFieldList) {\n hideSpinner(this.pivotFieldListModule.fieldListSpinnerElement);\n }\n else if (this.fieldListSpinnerElement) {\n hideSpinner(this.fieldListSpinnerElement);\n }\n this.element.style.minWidth = '500px';\n this.grid.element.style.minWidth = '500px';\n this.unwireEvents();\n this.wireEvents();\n };\n PivotView.prototype.setToolTip = function (args) {\n var colIndex = Number(args.target.getAttribute('aria-colindex'));\n var rowIndex = Number(args.target.getAttribute('index'));\n var cell = this.pivotValues[rowIndex][colIndex];\n this.toolTip.content = '';\n if (cell) {\n this.toolTip.content = '

    ' +\n this.localeObj.getConstant('row') + ':

    ' +\n this.getRowText(rowIndex, 0) +\n '


    ' +\n this.localeObj.getConstant('column') + ':

    ' +\n this.getColText(0, colIndex, rowIndex) + '


    ' + '

    ' +\n this.localeObj.getConstant('value') + ':

    ' +\n ((cell.formattedText === '0' ? this.localeObj.getConstant('noValue') : cell.formattedText)) + '

    ';\n }\n else {\n args.cancel = true;\n }\n };\n PivotView.prototype.getRowText = function (rowIndex, colIndex) {\n var cell = this.pivotValues[rowIndex][colIndex];\n var level = cell.level;\n var rowText = cell.type === 'grand sum' ? this.localeObj.getConstant('grandTotal') : cell.formattedText;\n while (level > 0) {\n rowIndex--;\n cell = this.pivotValues[rowIndex][colIndex];\n if (level > cell.level) {\n rowText = rowText + ' - ' + (cell.type === 'grand sum' ? this.localeObj.getConstant('grandTotal') :\n cell.formattedText);\n level = cell.level;\n }\n }\n return rowText.split(' - ').reverse().join(' - ');\n };\n PivotView.prototype.getColText = function (rowIndex, colIndex, limit) {\n var cell = this.pivotValues[0][colIndex];\n var axis = cell.axis;\n var colText = cell.type === 'grand sum' ? this.localeObj.getConstant('grandTotal') : cell.formattedText;\n while (axis !== 'value' && limit > rowIndex) {\n rowIndex++;\n if (this.pivotValues[rowIndex]) {\n cell = this.pivotValues[rowIndex][colIndex];\n axis = cell.axis;\n if (cell.type !== 'sum' && cell.type !== 'grand sum' && axis !== 'value') {\n colText = colText + ' - ' + cell.formattedText;\n }\n }\n }\n return colText;\n };\n PivotView.prototype.updateClass = function () {\n if (this.enableRtl) {\n addClass([this.element], cls.RTL);\n }\n else {\n removeClass([this.element], cls.RTL);\n }\n if (this.isAdaptive) {\n addClass([this.element], cls.DEVICE);\n }\n else {\n removeClass([this.element], cls.DEVICE);\n }\n };\n PivotView.prototype.wireEvents = function () {\n EventHandler.add(this.element, this.isAdaptive ? 'touchend' : 'click', this.mouseClickHandler, this);\n window.addEventListener('resize', this.onWindowResize.bind(this), true);\n };\n PivotView.prototype.mouseClickHandler = function (e) {\n var target = e.target;\n if ((target.classList.contains('e-headercell') ||\n target.classList.contains('e-headercelldiv') ||\n target.classList.contains('e-stackedheadercelldiv') ||\n target.classList.contains('e-headertext') ||\n target.classList.contains('e-ascending') ||\n target.classList.contains('e-descending')) && this.enableValueSorting &&\n this.dataSource.valueSortSettings && this.dataSource.valueSortSettings.sortOrder !== 'None') {\n var ele = null;\n if (target.classList.contains('e-headercell')) {\n ele = target;\n }\n else if (target.classList.contains('e-stackedheadercelldiv') || target.classList.contains('e-headercelldiv') ||\n target.classList.contains('e-ascending') || target.classList.contains('e-descending')) {\n ele = target.parentElement;\n }\n else if (target.classList.contains('e-headertext')) {\n ele = target.parentElement.parentElement;\n }\n this.CellClicked(target);\n if (ele.parentElement.parentElement.parentElement.parentElement.classList.contains('e-movableheader')) {\n /* tslint:disable */\n this.setProperties({\n dataSource: {\n valueSortSettings: {\n columnIndex: (Number(ele.getAttribute('aria-colindex')) +\n Number(ele.getAttribute('aria-colspan')) - 1),\n sortOrder: this.dataSource.valueSortSettings.sortOrder === 'Descending' ? 'Ascending' : 'Descending'\n }\n }\n }, true);\n /* tslint:enable */\n showSpinner(this.element);\n this.engineModule.applyValueSorting();\n this.setProperties({ pivotValues: this.engineModule.pivotValues }, true);\n this.renderPivotGrid();\n }\n }\n else if (target.classList.contains(cls.COLLAPSE) || target.classList.contains(cls.EXPAND)) {\n this.onDrill(target);\n }\n else {\n this.CellClicked(target);\n return;\n }\n };\n /** @hidden */\n PivotView.prototype.onWindowResize = function () {\n var _this = this;\n /* tslint:disable */\n clearTimeout(this.timeOutObj);\n this.timeOutObj = setTimeout(function () {\n if (_this.element && _this.element.classList.contains('e-pivotview')) {\n var colWidth = _this.renderModule.calculateColWidth(_this.dataSource.values.length > 0 ?\n _this.engineModule.pivotValues[0].length : 2);\n _this.grid.width = _this.renderModule.calculateGridWidth();\n for (var cCnt = 0; cCnt < _this.grid.columns.length; cCnt++) {\n if (cCnt === 0 && colWidth < (_this.showGroupingBar && _this.groupingBarModule ? 250 : 200)) {\n _this.grid.columns[cCnt].width = (_this.showGroupingBar && _this.groupingBarModule ? 250 : 200);\n }\n else {\n _this.grid.columns[cCnt].width = colWidth;\n }\n }\n _this.grid.headerModule.refreshUI();\n if (_this.showGroupingBar && _this.groupingBarModule && _this.element.querySelector('.' + cls.GROUPING_BAR_CLASS)) {\n _this.groupingBarModule.refreshUI();\n }\n }\n }, 500);\n /* tslint:enable */\n };\n PivotView.prototype.CellClicked = function (target) {\n var ele = null;\n if (target.classList.contains('e-headercell') || target.classList.contains('e-rowcell')) {\n ele = target;\n }\n else if (target.classList.contains('e-stackedheadercelldiv') || target.classList.contains('e-cellvalue') ||\n target.classList.contains('e-headercelldiv')) {\n ele = target.parentElement;\n }\n else if (target.classList.contains('e-headertext')) {\n ele = target.parentElement.parentElement;\n }\n if (ele) {\n if (this.cellClick) {\n this.trigger(events.cellClick, {\n currentCell: ele,\n data: this.pivotValues[Number(ele.getAttribute('index'))][Number(ele.getAttribute('aria-colindex'))]\n });\n }\n }\n };\n PivotView.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, this.isAdaptive ? 'touchend' : 'click', this.mouseClickHandler);\n window.removeEventListener('resize', this.onWindowResize.bind(this), true);\n };\n PivotView.prototype.generateData = function () {\n if (this.dataSource && this.dataSource.data && this.dataSource.data.length > 0) {\n showSpinner(this.element);\n this.trigger(events.enginePopulating, { 'dataSource': this.dataSource });\n this.engineModule = new PivotEngine(this.dataSource);\n this.setProperties({ pivotValues: this.engineModule.pivotValues }, true);\n this.trigger(events.enginePopulated, { 'pivotValues': this.pivotValues });\n this.notify(events.dataReady, {});\n }\n else {\n this.showFieldList = false;\n this.grid = new Grid({});\n this.grid.notify('showEmptyGrid', {});\n return;\n }\n };\n __decorate([\n Property('USD')\n ], PivotView.prototype, \"currencyCode\", void 0);\n __decorate([\n Property(false)\n ], PivotView.prototype, \"showFieldList\", void 0);\n __decorate([\n Complex({}, GridSettings)\n ], PivotView.prototype, \"gridSettings\", void 0);\n __decorate([\n Complex({}, GroupingBarSettings)\n ], PivotView.prototype, \"groupingBarSettings\", void 0);\n __decorate([\n Complex({}, DataSource)\n ], PivotView.prototype, \"dataSource\", void 0);\n __decorate([\n Property()\n ], PivotView.prototype, \"pivotValues\", void 0);\n __decorate([\n Property(false)\n ], PivotView.prototype, \"showGroupingBar\", void 0);\n __decorate([\n Property(false)\n ], PivotView.prototype, \"allowCalculatedField\", void 0);\n __decorate([\n Property(false)\n ], PivotView.prototype, \"enableValueSorting\", void 0);\n __decorate([\n Property('auto')\n ], PivotView.prototype, \"height\", void 0);\n __decorate([\n Property('auto')\n ], PivotView.prototype, \"width\", void 0);\n __decorate([\n Property(false)\n ], PivotView.prototype, \"allowExcelExport\", void 0);\n __decorate([\n Property(false)\n ], PivotView.prototype, \"allowPdfExport\", void 0);\n __decorate([\n Event()\n ], PivotView.prototype, \"queryCellInfo\", void 0);\n __decorate([\n Event()\n ], PivotView.prototype, \"headerCellInfo\", void 0);\n __decorate([\n Event()\n ], PivotView.prototype, \"resizing\", void 0);\n __decorate([\n Event()\n ], PivotView.prototype, \"resizeStop\", void 0);\n __decorate([\n Event()\n ], PivotView.prototype, \"pdfHeaderQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], PivotView.prototype, \"pdfQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], PivotView.prototype, \"excelHeaderQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], PivotView.prototype, \"excelQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], PivotView.prototype, \"columnDragStart\", void 0);\n __decorate([\n Event()\n ], PivotView.prototype, \"columnDrag\", void 0);\n __decorate([\n Event()\n ], PivotView.prototype, \"columnDrop\", void 0);\n __decorate([\n Event()\n ], PivotView.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], PivotView.prototype, \"enginePopulating\", void 0);\n __decorate([\n Event()\n ], PivotView.prototype, \"enginePopulated\", void 0);\n __decorate([\n Event()\n ], PivotView.prototype, \"dataBound\", void 0);\n __decorate([\n Event()\n ], PivotView.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], PivotView.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], PivotView.prototype, \"beforeExport\", void 0);\n __decorate([\n Event()\n ], PivotView.prototype, \"cellClick\", void 0);\n PivotView = __decorate([\n NotifyPropertyChanges\n ], PivotView);\n return PivotView;\n}(Component));\nexport { PivotView };\n","import { Workbook } from '@syncfusion/ej2-excel-export';\nimport * as events from '../../common/base/constant';\n/**\n * @hidden\n * `ExcelExport` module is used to handle the Excel export action.\n */\nvar ExcelExport = /** @class */ (function () {\n /**\n * Constructor for the PivotGrid Excel Export module.\n * @hidden\n */\n function ExcelExport(parent) {\n this.parent = parent;\n }\n /**\n * For internal use only - Get the module name.\n * @private\n */\n ExcelExport.prototype.getModuleName = function () {\n return 'excelExport';\n };\n /**\n * Method to perform excel export.\n * @hidden\n */\n ExcelExport.prototype.exportToExcel = function (type) {\n /** Event trigerring */\n var args = { fileName: 'default', header: '', footer: '', dataCollections: [this.parent.pivotValues] };\n this.parent.trigger(events.beforeExport, args);\n var fileName = args.fileName;\n var header = args.header;\n var footer = args.footer;\n var dataCollections = args.dataCollections;\n /** Fill data and export */\n /* tslint:disable-next-line:no-any */\n var workSheets = [];\n for (var dataColl = 0; dataColl < dataCollections.length; dataColl++) {\n var pivotValues = dataCollections[dataColl];\n var colLen = 0;\n var rowLen = pivotValues.length;\n var actualrCnt = 0;\n var formatList = this.parent.renderModule.getFormatList();\n var rows = [];\n var maxLevel = 0;\n for (var rCnt = 0; rCnt < rowLen; rCnt++) {\n if (pivotValues[rCnt]) {\n actualrCnt++;\n colLen = pivotValues[rCnt].length;\n var cells = [];\n for (var cCnt = 0; cCnt < colLen; cCnt++) {\n if (pivotValues[rCnt][cCnt]) {\n var pivotCell = pivotValues[rCnt][cCnt];\n if (!(pivotCell.level === -1 && !pivotCell.rowSpan)) {\n var cellValue = pivotCell.axis === 'value' ? pivotCell.value : pivotCell.formattedText;\n if (pivotCell.type === 'grand sum') {\n cellValue = this.parent.localeObj.getConstant('grandTotal');\n }\n else if (pivotCell.type === 'sum') {\n cellValue = cellValue.toString().replace('Total', this.parent.localeObj.getConstant('total'));\n }\n else {\n cellValue = cellValue === '0' ? '' : cellValue;\n }\n if (!(pivotCell.level === -1 && !pivotCell.rowSpan)) {\n cells.push({\n index: cCnt + 1, value: cellValue,\n colSpan: pivotCell.colSpan, rowSpan: pivotCell.rowSpan,\n });\n if (pivotCell.axis === 'value') {\n cells[cells.length - 1].style = {\n numberFormat: formatList[(cCnt - 1) % this.parent.dataSource.values.length],\n bold: false,\n wrapText: true\n };\n }\n else {\n cells[cells.length - 1].style = {\n bold: true,\n vAlign: 'Center',\n wrapText: true,\n indent: cCnt === 1 ? pivotCell.level * 10 : 0\n };\n if (pivotCell.axis === 'row' && cCnt === 0) {\n cells[cells.length - 1].style.hAlign = 'Left';\n cells[cells.length - 1].style.indent = pivotCell.level * 2;\n maxLevel = pivotCell.level > maxLevel ? pivotCell.level : maxLevel;\n }\n }\n cells[cells.length - 1].style.borders = { color: '#000000', lineStyle: 'Thin' };\n }\n }\n cCnt = cCnt + (pivotCell.colSpan ? (pivotCell.colSpan - 1) : 0);\n }\n else {\n cells.push({\n index: cCnt + 1, value: '', colSpan: 1, rowSpan: 1,\n });\n }\n }\n rows.push({ index: actualrCnt, cells: cells });\n }\n }\n var columns = [];\n for (var cCnt = 0; cCnt < colLen; cCnt++) {\n columns.push({ index: cCnt + 1, width: 100 });\n }\n if (maxLevel > 0) {\n columns[0].width = 100 + (maxLevel * 20);\n }\n workSheets.push({ columns: columns, rows: rows });\n }\n var book = new Workbook({ worksheets: workSheets }, type === 'Excel' ? 'xlsx' : 'csv');\n book.save(fileName + (type === 'Excel' ? '.xlsx' : '.csv'));\n };\n return ExcelExport;\n}());\nexport { ExcelExport };\n","import { PdfGrid, PdfPen, PointF, PdfDocument, PdfStandardFont, PdfFontFamily, PdfSolidBrush, PdfColor, PdfStringFormat, PdfVerticalAlignment, PdfTextAlignment, PdfFontStyle, PdfPageTemplateElement, RectangleF, PdfLayoutFormat } from '@syncfusion/ej2-pdf-export';\nimport * as events from '../../common/base/constant';\n/**\n * @hidden\n * `PDFExport` module is used to handle the PDF export action.\n */\nvar PDFExport = /** @class */ (function () {\n /**\n * Constructor for the PivotGrid PDF Export module.\n * @hidden\n */\n function PDFExport(parent) {\n this.parent = parent;\n }\n /**\n * For internal use only - Get the module name.\n * @private\n */\n PDFExport.prototype.getModuleName = function () {\n return 'pdfExport';\n };\n /**\n * Method to perform pdf export.\n * @hidden\n */\n PDFExport.prototype.exportToPDF = function () {\n var eventParams = this.applyEvent();\n /** Fill data and export */\n var dataCollIndex = 0;\n var gridResult;\n var pivotValues = eventParams.args.dataCollections[dataCollIndex];\n var colLength = pivotValues && pivotValues.length > 0 ? pivotValues[0].length : 0;\n var integratedCnt = 0;\n do {\n var pdfGrid = new PdfGrid();\n if (pivotValues && pivotValues.length > 0) {\n pdfGrid.columns.add(pivotValues[0].length - integratedCnt >= 6 ? 6 : pivotValues[0].length - integratedCnt);\n var rowLen = pivotValues.length;\n var actualrCnt = 0;\n var maxLevel = 0;\n for (var rCnt = 0; rCnt < rowLen; rCnt++) {\n if (pivotValues[rCnt]) {\n var isColHeader = !(pivotValues[rCnt][0] && pivotValues[rCnt][0].axis === 'row');\n var colLen = pivotValues[rCnt].length > (integratedCnt + 6) ? (integratedCnt + 6) :\n pivotValues[rCnt].length;\n if (isColHeader) {\n pdfGrid.headers.add(1);\n }\n var pdfGridRow = !isColHeader ? pdfGrid.rows.addRow() : pdfGrid.headers.getHeader(actualrCnt);\n var localCnt = 0;\n var isEmptyRow = true;\n for (var cCnt = integratedCnt; cCnt < colLen; cCnt++) {\n var isValueCell = false;\n if (pivotValues[rCnt][cCnt]) {\n var pivotCell = pivotValues[rCnt][cCnt];\n if (!(pivotCell.level === -1 && !pivotCell.rowSpan)) {\n var cellValue = pivotCell.formattedText;\n cellValue = pivotCell.type === 'grand sum' ? this.parent.localeObj.getConstant('grandTotal') :\n (pivotCell.type === 'sum' ?\n cellValue.toString().replace('Total', this.parent.localeObj.getConstant('total')) :\n (cellValue === '0' ? '' : cellValue));\n if (!(pivotCell.level === -1 && !pivotCell.rowSpan)) {\n pdfGridRow.cells.getCell(localCnt).columnSpan = pivotCell.colSpan ?\n (6 - localCnt < pivotCell.colSpan ? 6 - localCnt : pivotCell.colSpan) : 1;\n if (isColHeader && pivotCell.rowSpan && pivotCell.rowSpan > 1) {\n pdfGridRow.cells.getCell(localCnt).rowSpan = pivotCell.rowSpan ? pivotCell.rowSpan : 1;\n }\n pdfGridRow.cells.getCell(localCnt).value = cellValue.toString();\n }\n if (cellValue !== '') {\n isEmptyRow = false;\n }\n }\n maxLevel = pivotCell.level > maxLevel && cCnt === 0 ? pivotCell.level : maxLevel;\n isValueCell = pivotCell.axis === 'value';\n cCnt = cCnt + (pdfGridRow.cells.getCell(localCnt).columnSpan ?\n (pdfGridRow.cells.getCell(localCnt).columnSpan - 1) : 0);\n localCnt = localCnt + (pdfGridRow.cells.getCell(localCnt).columnSpan ?\n (pdfGridRow.cells.getCell(localCnt).columnSpan - 1) : 0);\n }\n else {\n pdfGridRow.cells.getCell(localCnt).value = '';\n if (cCnt === 0 && isColHeader && this.parent.dataSource.columns &&\n this.parent.dataSource.columns.length > 0) {\n pdfGrid.headers.getHeader(0).cells.getCell(0).rowSpan++;\n }\n }\n var stringFormat = new PdfStringFormat();\n stringFormat.paragraphIndent = (!isColHeader && cCnt === 0 && pivotValues[rCnt][cCnt]) ?\n pivotValues[rCnt][cCnt].level * 15 : 0;\n stringFormat.alignment = isValueCell ? PdfTextAlignment.Right : PdfTextAlignment.Left;\n stringFormat.lineAlignment = PdfVerticalAlignment.Middle;\n pdfGridRow.cells.getCell(localCnt).style.stringFormat = stringFormat;\n localCnt++;\n }\n if (isEmptyRow) {\n pdfGridRow.height = 16;\n }\n actualrCnt++;\n }\n }\n if (integratedCnt === 0) {\n pdfGrid.columns.getColumn(0).width = 100 + (maxLevel * 20);\n }\n }\n var layout = new PdfLayoutFormat();\n layout.paginateBounds = new RectangleF(0, 0, 0, 0);\n if (integratedCnt === 0 && this.parent.dataSource.columns && this.parent.dataSource.columns.length > 0) {\n pdfGrid.headers.getHeader(0).cells.getCell(0).rowSpan--;\n }\n if (gridResult) {\n gridResult = pdfGrid.draw(gridResult.page, new PointF(10, gridResult.bounds.y + gridResult.bounds.height + 10), layout);\n }\n else {\n gridResult = pdfGrid.draw(eventParams.page, new PointF(10, 20), layout);\n }\n integratedCnt = integratedCnt + 6;\n if (integratedCnt >= colLength && eventParams.args.dataCollections.length > (dataCollIndex + 1)) {\n dataCollIndex++;\n pivotValues = eventParams.args.dataCollections[dataCollIndex];\n colLength = pivotValues && pivotValues.length > 0 ? pivotValues[0].length : 0;\n integratedCnt = 0;\n }\n } while (integratedCnt < colLength);\n eventParams.document.save(eventParams.args.fileName + '.pdf');\n eventParams.document.destroy();\n };\n PDFExport.prototype.applyEvent = function () {\n /** Event trigerring */\n var args = { fileName: 'default', header: '', footer: '', dataCollections: [this.parent.pivotValues] };\n this.parent.trigger(events.beforeExport, args);\n var fileName = args.fileName;\n var header = args.header;\n var footer = args.footer;\n var dataCollections = args.dataCollections;\n var document = new PdfDocument();\n var page = document.pages.add();\n /** Header and Footer to be set */\n var font = new PdfStandardFont(PdfFontFamily.TimesRoman, 15, PdfFontStyle.Regular);\n var brush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n var pen = new PdfPen(new PdfColor(0, 0, 0), .5);\n var headerTemplate = new PdfPageTemplateElement(new RectangleF(0, 0, page.graphics.clientSize.width, 20));\n headerTemplate.graphics.drawString(header, font, pen, brush, 0, 0, new PdfStringFormat(PdfTextAlignment.Center));\n document.template.top = headerTemplate;\n var footerTemplate = new PdfPageTemplateElement(new RectangleF(0, 0, page.graphics.clientSize.width, 20));\n footerTemplate.graphics.drawString(footer, font, pen, brush, 0, 0, new PdfStringFormat(PdfTextAlignment.Center));\n document.template.bottom = footerTemplate;\n return { document: document, page: page, args: args };\n };\n return PDFExport;\n}());\nexport { PDFExport };\n","import { KeyboardEvents, closest } from '@syncfusion/ej2-base';\nimport * as cls from '../base/css-constant';\n/**\n * Keyboard interaction\n */\n/** @hidden */\nvar CommonKeyboardInteraction = /** @class */ (function () {\n /**\n * Constructor\n */\n function CommonKeyboardInteraction(parent) {\n this.keyConfigs = {\n ctrlF: 'ctrl+F',\n ctrlS: 'ctrl+S',\n delete: 'delete'\n };\n this.parent = parent;\n this.parent.element.tabIndex = this.parent.element.tabIndex === -1 ? 0 : this.parent.element.tabIndex;\n this.keyboardModule = new KeyboardEvents(this.parent.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n }\n CommonKeyboardInteraction.prototype.keyActionHandler = function (e) {\n switch (e.action) {\n case 'ctrlF':\n this.processFilter(e);\n break;\n case 'ctrlS':\n this.processSort(e);\n break;\n case 'delete':\n this.processDelete(e);\n break;\n }\n };\n CommonKeyboardInteraction.prototype.processSort = function (e) {\n var target = e.target;\n if (target && closest(target, '.' + cls.PIVOT_BUTTON_CLASS) &&\n !closest(target, '.' + cls.VALUE_AXIS_CLASS) && !closest(target, '.' + cls.AXIS_FILTER_CLASS)) {\n target.querySelector('.' + cls.SORT_CLASS).click();\n e.preventDefault();\n return;\n }\n };\n CommonKeyboardInteraction.prototype.processFilter = function (e) {\n var target = e.target;\n if (target && closest(target, '.' + cls.PIVOT_BUTTON_CLASS) && !closest(target, '.' + cls.VALUE_AXIS_CLASS)) {\n target.querySelector('.' + cls.FILTER_COMMON_CLASS).click();\n e.preventDefault();\n return;\n }\n };\n CommonKeyboardInteraction.prototype.processDelete = function (e) {\n var target = e.target;\n if (target && closest(target, '.' + cls.PIVOT_BUTTON_CLASS)) {\n target.querySelector('.' + cls.REMOVE_CLASS).click();\n e.preventDefault();\n return;\n }\n };\n /**\n * To destroy the keyboard module.\n * @return {void}\n * @private\n */\n CommonKeyboardInteraction.prototype.destroy = function () {\n this.keyboardModule.destroy();\n };\n return CommonKeyboardInteraction;\n}());\nexport { CommonKeyboardInteraction };\n","import { isNullOrUndefined, removeClass, addClass } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport * as cls from '../base/css-constant';\n/**\n * `EventBase` for active fields action.\n */\n/** @hidden */\nvar EventBase = /** @class */ (function () {\n /**\n * Constructor for the dialog action.\n * @hidden\n */\n function EventBase(parent) {\n this.parent = parent;\n }\n /**\n * Updates sorting order for the selected field.\n * @method updateSorting\n * @param {Event} args - Contains clicked element information to update dataSource.\n * @return {void}\n * @hidden\n */\n EventBase.prototype.updateSorting = function (args) {\n if (this.parent.filterDialog.dialogPopUp) {\n this.parent.filterDialog.dialogPopUp.close();\n }\n var target = args.target;\n var fieldName = target.parentElement.id;\n var isDescending = target.classList.contains(cls.SORT_DESCEND_CLASS);\n var sortObj = this.getSortItemByName(fieldName);\n if (!isNullOrUndefined(sortObj)) {\n sortObj.order = isDescending ? 'Ascending' : 'Descending';\n }\n else {\n var newSortObj = { name: fieldName, order: isDescending ? 'Ascending' : 'Descending' };\n this.parent.dataSource.sortSettings.push(newSortObj);\n }\n isDescending ? removeClass([target], cls.SORT_DESCEND_CLASS) : addClass([target], cls.SORT_DESCEND_CLASS);\n };\n /**\n * Updates sorting order for the selected field.\n * @method updateFiltering\n * @param {Event} args - Contains clicked element information to update dataSource.\n * @return {void}\n * @hidden\n */\n EventBase.prototype.updateFiltering = function (args) {\n var target = args.target;\n var fieldName = target.parentElement.id;\n var fieldCaption = target.parentElement.textContent;\n var isInclude = false;\n var filterItems = [];\n this.parent.engineModule.fieldList[fieldName].dateMember = new DataManager(this.parent.engineModule.\n fieldList[fieldName].dateMember).executeLocal(new Query().\n sortBy('actualText', this.parent.engineModule.fieldList[fieldName].sort.toLowerCase()));\n var filterObj = this.getFilterItemByName(fieldName);\n if (!isNullOrUndefined(filterObj)) {\n isInclude = filterObj.type === 'include' ? true : false;\n filterItems = filterObj.items;\n }\n var treeData = this.getTreeData(isInclude, this.parent.engineModule.fieldList[fieldName].dateMember, filterItems);\n if (this.parent.filterDialog.dialogPopUp) {\n this.parent.filterDialog.dialogPopUp.close();\n }\n var popupTarget;\n popupTarget = this.parent.moduleName !== 'pivotfieldlist' ?\n popupTarget = this.parent.element : popupTarget = document.getElementById(this.parent.parentID + '_Wrapper');\n this.parent.filterDialog.createFilterDialog(treeData, fieldName, fieldCaption, popupTarget);\n };\n /**\n * Gets sort object for the given field name from the dataSource.\n * @method getSortItemByName\n * @param {string} fieldName - Gets sort settings for the given field name.\n * @return {Sort}\n * @hidden\n */\n EventBase.prototype.getSortItemByName = function (fieldName) {\n var sortObjects = this.parent.dataSource.sortSettings;\n return new DataManager({ json: sortObjects }).executeLocal(new Query().where('name', 'equal', fieldName))[0];\n };\n /**\n * Gets filter object for the given field name from the dataSource.\n * @method getFilterItemByName\n * @param {string} fieldName - Gets filter settings for the given field name.\n * @return {Sort}\n * @hidden\n */\n EventBase.prototype.getFilterItemByName = function (fieldName) {\n var filterObjects = this.parent.dataSource.filterSettings;\n return new DataManager({ json: filterObjects }).executeLocal(new Query().where('name', 'equal', fieldName))[0];\n };\n /**\n * show tree nodes using search text.\n * @hidden\n */\n EventBase.prototype.searchTreeNodes = function (args, treeObj) {\n var searchList = [];\n var nonSearchList = [];\n var list = [].slice.call(treeObj.element.querySelectorAll('li'));\n for (var _i = 0, list_1 = list; _i < list_1.length; _i++) {\n var element = list_1[_i];\n if ((element.querySelector('.e-list-text').textContent.toLowerCase()).indexOf(args.value.toLowerCase()) > -1) {\n searchList.push(element);\n }\n else {\n nonSearchList.push(element);\n }\n }\n treeObj.enableNodes(searchList);\n treeObj.disableNodes(nonSearchList);\n };\n EventBase.prototype.getTreeData = function (isInclude, members, filterItems) {\n var list = [];\n for (var _i = 0, members_1 = members; _i < members_1.length; _i++) {\n var member = members_1[_i];\n var obj = {\n id: member.formattedText,\n name: member.formattedText,\n checkedStatus: isInclude ? false : true\n };\n if (filterItems.indexOf(member.formattedText) >= 0) {\n obj.checkedStatus = isInclude ? true : false;\n }\n list.push(obj);\n }\n return list;\n };\n return EventBase;\n}());\nexport { EventBase };\n","import { isNullOrUndefined, closest } from '@syncfusion/ej2-base';\nimport * as cls from '../base/css-constant';\n/**\n * `DialogAction` module is used to handle field list dialog related behaviour.\n */\n/** @hidden */\nvar NodeStateModified = /** @class */ (function () {\n /**\n * Constructor for the dialog action.\n * @hidden\n */\n function NodeStateModified(parent) {\n this.parent = parent;\n }\n /**\n * Updates the dataSource by drag and drop the selected field from either field list or axis table with dropped target position.\n * @method onStateModified\n * @param {DragEventArgs & DragAndDropEventArgs} args - Contains both pivot button and field list drag and drop information.\n * @param {string} fieldName - Defines dropped field name to update dataSource.\n * @return {void}\n * @hidden\n */\n NodeStateModified.prototype.onStateModified = function (args, fieldName) {\n var droppedClass = '';\n var nodeDropped = true;\n var target = closest(args.target, '.' + cls.DROPPABLE_CLASS);\n var droppedPosition = -1;\n if (target) {\n droppedClass = target.classList[1] === cls.ROW_AXIS_CLASS ?\n 'rows' : target.classList[1] === cls.COLUMN_AXIS_CLASS ? 'columns' : target.classList[1] === cls.VALUE_AXIS_CLASS ?\n 'values' : target.classList[1] === cls.FILTER_AXIS_CLASS ? 'filters' : '';\n }\n if (args.cancel && droppedClass === '') {\n nodeDropped = false;\n return nodeDropped;\n }\n if (droppedClass !== '') {\n if (this.parent.engineModule.fieldList[fieldName].aggregateType === 'CalculatedField' && droppedClass !== 'values') {\n var title = this.parent.localeObj.getConstant('warning');\n var description = this.parent.localeObj.getConstant('dropAction');\n this.parent.errorDialog.createErrorDialog(title, description);\n nodeDropped = false;\n return nodeDropped;\n }\n droppedPosition = this.getButtonPosition(args.target, droppedClass);\n }\n this.parent.dataSourceUpdate.updateDataSource(fieldName, droppedClass, droppedPosition);\n return nodeDropped;\n };\n NodeStateModified.prototype.getButtonPosition = function (target, droppedClass) {\n var droppedPosition = -1;\n var targetBtn = closest(target, '.' + cls.PIVOT_BUTTON_WRAPPER_CLASS);\n if (!isNullOrUndefined(targetBtn)) {\n targetBtn = targetBtn.querySelector('.' + cls.PIVOT_BUTTON_CLASS);\n var axisPanel = this.parent.element.querySelector('.e-' + droppedClass);\n var pivotButtons = [].slice.call(axisPanel.querySelectorAll('.' + cls.PIVOT_BUTTON_CLASS));\n for (var i = 0, n = pivotButtons.length; i < n; i++) {\n if (pivotButtons[i].id === targetBtn.id) {\n droppedPosition = i;\n break;\n }\n }\n }\n return droppedPosition;\n };\n return NodeStateModified;\n}());\nexport { NodeStateModified };\n","/**\n * `DataSourceUpdate` module is used to update the dataSource.\n */\n/** @hidden */\nvar DataSourceUpdate = /** @class */ (function () {\n /**\n * Constructor for the dialog action.\n * @hidden\n */\n function DataSourceUpdate(parent) {\n this.parent = parent;\n }\n /**\n * Updates the dataSource by adding the given field along with field dropped position to the dataSource.\n * @param {string} fieldName - Defines dropped field name to update dataSource.\n * @param {string} droppedClass - Defines dropped field axis name to update dataSource.\n * @param {number} fieldCaption - Defines dropped position to the axis based on field position.\n * @method updateDataSource\n * @return {void}\n * @hidden\n */\n DataSourceUpdate.prototype.updateDataSource = function (fieldName, droppedClass, droppedPosition) {\n var dataSourceItem = this.removeFieldFromReport(fieldName.toString());\n dataSourceItem = dataSourceItem ? dataSourceItem : this.getNewField(fieldName.toString());\n if (dataSourceItem.type === 'CalculatedField' && droppedClass !== '') {\n droppedClass = 'values';\n }\n if (dataSourceItem) {\n switch (droppedClass) {\n case 'filters':\n droppedPosition !== -1 ?\n this.parent.dataSource.filters.splice(droppedPosition, 0, dataSourceItem) :\n this.parent.dataSource.filters.push(dataSourceItem);\n break;\n case 'rows':\n droppedPosition !== -1 ?\n this.parent.dataSource.rows.splice(droppedPosition, 0, dataSourceItem) :\n this.parent.dataSource.rows.push(dataSourceItem);\n break;\n case 'columns':\n droppedPosition !== -1 ?\n this.parent.dataSource.columns.splice(droppedPosition, 0, dataSourceItem) :\n this.parent.dataSource.columns.push(dataSourceItem);\n break;\n case 'values':\n droppedPosition !== -1 ?\n this.parent.dataSource.values.splice(droppedPosition, 0, dataSourceItem) :\n this.parent.dataSource.values.push(dataSourceItem);\n break;\n }\n }\n };\n /**\n * Updates the dataSource by removing the given field from the dataSource.\n * @param {string} fieldName - Defines dropped field name to remove dataSource.\n * @method removeFieldFromReport\n * @return {void}\n * @hidden\n */\n DataSourceUpdate.prototype.removeFieldFromReport = function (fieldName) {\n var dataSourceItem;\n var isDataSource = false;\n var rows = this.parent.dataSource.rows;\n var columns = this.parent.dataSource.columns;\n var values = this.parent.dataSource.values;\n var filters = this.parent.dataSource.filters;\n var fields = [rows, columns, values, filters];\n for (var len = 0, lnt = fields.length; len < lnt; len++) {\n if (!isDataSource && fields[len]) {\n for (var i = 0, n = fields[len].length; i < n; i++) {\n if (fields[len][i].name === fieldName) {\n dataSourceItem = fields[len][i];\n fields[len].splice(i, 1);\n isDataSource = true;\n break;\n }\n }\n }\n }\n return dataSourceItem;\n };\n /**\n * Creates new field object given field name from the field list data.\n * @param {string} fieldName - Defines dropped field name to add dataSource.\n * @method getNewField\n * @return {void}\n * @hidden\n */\n DataSourceUpdate.prototype.getNewField = function (fieldName) {\n var field = this.parent.engineModule.fieldList[fieldName];\n var newField = {\n name: fieldName,\n caption: field.caption,\n type: field.aggregateType\n };\n return newField;\n };\n return DataSourceUpdate;\n}());\nexport { DataSourceUpdate };\n","import { createElement, remove } from '@syncfusion/ej2-base';\nimport * as cls from '../base/css-constant';\nimport { Dialog } from '@syncfusion/ej2-popups';\n/**\n * `ErrorDialog` module to create error dialog.\n */\n/** @hidden */\nvar ErrorDialog = /** @class */ (function () {\n /**\n * Constructor for the dialog action.\n * @hidden\n */\n function ErrorDialog(parent) {\n this.parent = parent;\n }\n /**\n * Creates the error dialog for the unexpected action done.\n * @method createErrorDialog\n * @return {void}\n * @hidden\n */\n ErrorDialog.prototype.createErrorDialog = function (title, description) {\n var errorDialog = createElement('div', {\n id: this.parent.parentID + '_ErrorDialog',\n className: cls.ERROR_DIALOG_CLASS\n });\n this.parent.element.appendChild(errorDialog);\n this.errorPopUp = new Dialog({\n animationSettings: { effect: 'Fade' },\n allowDragging: false,\n header: title,\n content: description,\n isModal: true,\n visible: true,\n showCloseIcon: true,\n enableRtl: this.parent.enableRtl,\n width: 'auto',\n height: 'auto',\n position: { X: 'center', Y: 'center' },\n buttons: [\n {\n click: this.closeErrorDialog.bind(this),\n buttonModel: { cssClass: cls.OK_BUTTON_CLASS, content: this.parent.localeObj.getConstant('ok'), isPrimary: true }\n }\n ],\n closeOnEscape: true,\n target: document.body,\n close: this.removeErrorDialog.bind(this)\n });\n this.errorPopUp.appendTo(errorDialog);\n };\n ErrorDialog.prototype.closeErrorDialog = function () {\n this.errorPopUp.hide();\n };\n ErrorDialog.prototype.removeErrorDialog = function () {\n remove(document.getElementById(this.parent.parentID + '_ErrorDialog').parentElement);\n };\n return ErrorDialog;\n}());\nexport { ErrorDialog };\n","import { createElement, removeClass, addClass, remove } from '@syncfusion/ej2-base';\nimport * as cls from '../base/css-constant';\nimport { TreeView } from '@syncfusion/ej2-navigations';\nimport { Dialog } from '@syncfusion/ej2-popups';\nimport { MaskedTextBox } from '@syncfusion/ej2-inputs';\n/**\n * `FilterDialog` module to create filter dialog.\n */\n/** @hidden */\nvar FilterDialog = /** @class */ (function () {\n /**\n * Constructor for the dialog action.\n * @hidden\n */\n function FilterDialog(parent) {\n this.parent = parent;\n }\n /**\n * Creates the member filter dialog for the selected field.\n * @method createFilterDialog\n * @return {void}\n * @hidden\n */\n FilterDialog.prototype.createFilterDialog = function (treeData, fieldName, fieldCaption, target) {\n var editorDialog = createElement('div', {\n id: this.parent.parentID + '_EditorTreeView',\n className: cls.MEMBER_EDITOR_DIALOG_CLASS\n });\n this.parent.element.appendChild(editorDialog);\n this.dialogPopUp = new Dialog({\n animationSettings: { effect: 'Fade' },\n allowDragging: true,\n header: fieldCaption,\n content: this.createTreeView(treeData, fieldCaption),\n isModal: this.parent.renderMode === 'Popup' ? true : this.parent.isAdaptive ? true : false,\n visible: true,\n showCloseIcon: false,\n enableRtl: this.parent.enableRtl,\n width: 'auto',\n height: '350px',\n position: { X: 'center', Y: 'center' },\n buttons: [{\n buttonModel: {\n cssClass: cls.OK_BUTTON_CLASS, content: this.parent.localeObj.getConstant('ok'), isPrimary: true\n }\n },\n {\n click: this.closeFilterDialog.bind(this),\n buttonModel: { cssClass: cls.CANCEL_BUTTON_CLASS, content: this.parent.localeObj.getConstant('cancel') }\n }],\n closeOnEscape: true,\n target: target,\n close: this.removeFilterDialog.bind(this)\n });\n this.dialogPopUp.appendTo(editorDialog);\n this.updateCheckedState();\n };\n FilterDialog.prototype.createTreeView = function (treeData, fieldCaption) {\n var _this = this;\n var editorTreeWrapper = createElement('div', {\n id: this.parent.parentID + 'EditorDiv',\n className: cls.EDITOR_TREE_WRAPPER_CLASS\n });\n var searchWrapper = createElement('div', {\n id: this.parent.parentID + '_SearchDiv', attrs: { 'tabindex': '-1' },\n className: cls.EDITOR_SEARCH_WRAPPER_CLASS\n });\n var editorSearch = createElement('input', { attrs: { 'type': 'text' } });\n searchWrapper.appendChild(editorSearch);\n var selectAllWrapper = createElement('div', {\n id: this.parent.parentID + '_AllDiv', attrs: { 'tabindex': '-1' },\n className: cls.SELECT_ALL_WRAPPER_CLASS\n });\n var selectAllContainer = createElement('div', { className: cls.SELECT_ALL_CLASS });\n var treeViewContainer = createElement('div', { className: cls.EDITOR_TREE_CONTAINER_CLASS });\n var promptDiv = createElement('div', {\n className: cls.EMPTY_MEMBER_CLASS + ' ' + cls.ICON_DISABLE,\n innerHTML: this.parent.localeObj.getConstant('noMatches')\n });\n selectAllWrapper.appendChild(selectAllContainer);\n editorTreeWrapper.appendChild(searchWrapper);\n editorTreeWrapper.appendChild(selectAllWrapper);\n editorTreeWrapper.appendChild(promptDiv);\n this.editorSearch = new MaskedTextBox({\n placeholder: this.parent.localeObj.getConstant('search') + ' ' + fieldCaption,\n enableRtl: this.parent.enableRtl,\n cssClass: cls.EDITOR_SEARCH_CLASS,\n change: function (e) {\n _this.parent.eventBase.searchTreeNodes(e, _this.memberTreeView);\n var filterDialog = _this.dialogPopUp.element;\n var liList = [].slice.call(_this.memberTreeView.element.querySelectorAll('li'));\n var disabledList = [].slice.call(_this.memberTreeView.element.querySelectorAll('.' + cls.ICON_DISABLE));\n if (liList.length === disabledList.length) {\n _this.allMemberSelect.disableNodes([_this.allMemberSelect.element.querySelector('li')]);\n filterDialog.querySelector('.' + cls.OK_BUTTON_CLASS).setAttribute('disabled', 'disabled');\n removeClass([promptDiv], cls.ICON_DISABLE);\n }\n else {\n _this.allMemberSelect.enableNodes([_this.allMemberSelect.element.querySelector('li')]);\n filterDialog.querySelector('.' + cls.OK_BUTTON_CLASS).removeAttribute('disabled');\n addClass([promptDiv], cls.ICON_DISABLE);\n }\n _this.updateCheckedState();\n }\n });\n this.editorSearch.appendTo(editorSearch);\n var data = [{ id: 'all', name: 'All', checkedStatus: true }];\n this.allMemberSelect = new TreeView({\n fields: { dataSource: data, id: 'id', text: 'name', isChecked: 'checkedStatus', },\n showCheckBox: true,\n enableRtl: this.parent.enableRtl,\n });\n this.allMemberSelect.appendTo(selectAllContainer);\n editorTreeWrapper.appendChild(treeViewContainer);\n this.memberTreeView = new TreeView({\n fields: { dataSource: treeData, id: 'id', text: 'name', isChecked: 'checkedStatus' },\n showCheckBox: true,\n enableRtl: this.parent.enableRtl,\n nodeChecking: this.validateTreeNode.bind(this),\n });\n this.memberTreeView.appendTo(treeViewContainer);\n return editorTreeWrapper;\n };\n FilterDialog.prototype.validateTreeNode = function (e) {\n if (e.node.classList.contains(cls.ICON_DISABLE)) {\n e.cancel = true;\n }\n else {\n return;\n }\n };\n /**\n * Update filter state while Member check/uncheck.\n * @hidden\n */\n FilterDialog.prototype.updateCheckedState = function () {\n var filterDialog = this.dialogPopUp.element;\n var list = [].slice.call(this.memberTreeView.element.querySelectorAll('li'));\n var visibleNodes = list.filter(function (node) {\n return (!node.classList.contains(cls.ICON_DISABLE));\n });\n var uncheckedNodes = this.getUnCheckedNodes(visibleNodes);\n var checkedNodes = this.getCheckedNodes(visibleNodes);\n var firstNode = this.allMemberSelect.element.querySelector('li').querySelector('span.' + cls.CHECK_BOX_FRAME_CLASS);\n if (checkedNodes.length > 0) {\n if (uncheckedNodes.length > 0) {\n removeClass([firstNode], cls.NODE_CHECK_CLASS);\n addClass([firstNode], cls.NODE_STOP_CLASS);\n }\n else if (uncheckedNodes.length === 0) {\n removeClass([firstNode], cls.NODE_STOP_CLASS);\n addClass([firstNode], cls.NODE_CHECK_CLASS);\n }\n filterDialog.querySelector('.' + cls.OK_BUTTON_CLASS).removeAttribute('disabled');\n }\n else if (uncheckedNodes.length > 0 && checkedNodes.length === 0) {\n removeClass([firstNode], [cls.NODE_CHECK_CLASS, cls.NODE_STOP_CLASS]);\n if (this.getCheckedNodes(list).length === checkedNodes.length) {\n filterDialog.querySelector('.' + cls.OK_BUTTON_CLASS).setAttribute('disabled', 'disabled');\n }\n }\n };\n FilterDialog.prototype.getCheckedNodes = function (treeNodes) {\n var checkeNodes = treeNodes.filter(function (node) {\n return (node.querySelector('.' + cls.CHECK_BOX_FRAME_CLASS).classList.contains(cls.NODE_CHECK_CLASS));\n });\n return checkeNodes;\n };\n FilterDialog.prototype.getUnCheckedNodes = function (treeNodes) {\n var unCheckeNodes = treeNodes.filter(function (node) {\n return (!node.querySelector('.' + cls.CHECK_BOX_FRAME_CLASS).classList.contains(cls.NODE_CHECK_CLASS));\n });\n return unCheckeNodes;\n };\n FilterDialog.prototype.closeFilterDialog = function () {\n this.dialogPopUp.hide();\n };\n FilterDialog.prototype.removeFilterDialog = function () {\n if (document.getElementById(this.parent.parentID + '_EditorTreeView')) {\n remove(document.getElementById(this.parent.parentID + '_EditorTreeView'));\n }\n };\n return FilterDialog;\n}());\nexport { FilterDialog };\n","import { CommonKeyboardInteraction } from '../actions/keyboard';\nimport { EventBase } from '../actions/event-base';\nimport { NodeStateModified } from '../actions/node-state-modified';\nimport { DataSourceUpdate } from '../actions/dataSource-update';\nimport { ErrorDialog } from '../popups/error-dialog';\nimport { FilterDialog } from '../popups/filter-dialog';\n/**\n * PivotCommon is used to manipulate the relational or Multi-Dimensional public methods by using their dataSource\n * @hidden\n */\n/** @hidden */\nvar PivotCommon = /** @class */ (function () {\n /**\n * Constructor for PivotEngine class\n * @param {PivotEngine} pivotEngine?\n * @param {DataOptions} dataSource?\n * @param {string} element?\n * @hidden\n */\n function PivotCommon(control) {\n this.element = control.element;\n this.moduleName = control.moduleName;\n this.dataSource = control.dataSource;\n this.engineModule = control.pivotEngine;\n this.enableRtl = control.enableRtl;\n this.isAdaptive = control.isAdaptive;\n this.renderMode = control.renderMode;\n this.parentID = control.id;\n this.localeObj = control.localeObj;\n this.nodeStateModified = new NodeStateModified(this);\n this.dataSourceUpdate = new DataSourceUpdate(this);\n this.eventBase = new EventBase(this);\n this.filterDialog = new FilterDialog(this);\n this.errorDialog = new ErrorDialog(this);\n this.keyboardModule = new CommonKeyboardInteraction(this);\n return this;\n }\n /**\n * To destroy the groupingbar\n * @return {void}\n * @hidden\n */\n PivotCommon.prototype.destroy = function () {\n this.keyboardModule.destroy();\n };\n return PivotCommon;\n}());\nexport { PivotCommon };\n","import { createElement, isNullOrUndefined, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { EventHandler, setStyleAttribute } from '@syncfusion/ej2-base';\nimport * as cls from '../../common/base/css-constant';\nimport { Dialog } from '@syncfusion/ej2-popups';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { Tab } from '@syncfusion/ej2-navigations';\nimport * as events from '../../common/base/constant';\n/**\n * Module to render Pivot Field List Dialog\n */\n/** @hidden */\nvar DialogRenderer = /** @class */ (function () {\n /** Constructor for render module */\n function DialogRenderer(parent) {\n this.parent = parent;\n }\n /**\n * Initialize the field list layout rendering\n * @returns void\n * @private\n */\n DialogRenderer.prototype.render = function () {\n var fieldListWrappper = createElement('div', {\n id: this.parent.element.id + '_Wrapper',\n className: this.parent.enableRtl ? cls.WRAPPER_CLASS + ' ' + cls.RTL : cls.WRAPPER_CLASS,\n styles: 'width:' + this.parent.element.style.width\n });\n if (this.parent.isAdaptive) {\n addClass([fieldListWrappper], cls.DEVICE);\n }\n else {\n removeClass([fieldListWrappper], cls.DEVICE);\n }\n if (this.parent.enableRtl) {\n addClass([fieldListWrappper], cls.RTL);\n }\n else {\n removeClass([fieldListWrappper], cls.RTL);\n }\n if (this.parent.cssClass) {\n addClass([fieldListWrappper], this.parent.cssClass);\n }\n this.parentElement = createElement('div', { className: cls.CONTAINER_CLASS });\n this.parent.element.appendChild(fieldListWrappper);\n if (this.parent.isAdaptive) {\n fieldListWrappper.removeAttribute('style');\n this.parentElement = createElement('div', { className: cls.ADAPTIVE_CONTAINER_CLASS });\n this.renderAdaptiveLayout(fieldListWrappper);\n }\n if (this.parent.renderMode === 'Popup') {\n this.renderFieldListDialog(fieldListWrappper);\n this.unWireDialogEvent(this.parent.element.querySelector('.' + cls.TOGGLE_FIELD_LIST_CLASS));\n this.wireDialogEvent(this.parent.element.querySelector('.' + cls.TOGGLE_FIELD_LIST_CLASS));\n }\n else {\n this.renderStaticLayout(fieldListWrappper);\n }\n };\n DialogRenderer.prototype.renderStaticLayout = function (fieldListWrappper) {\n if (!this.parent.isAdaptive) {\n var layoutHeader = createElement('div', {\n className: cls.FIELD_LIST_TITLE_CLASS\n });\n var headerContent = createElement('div', {\n className: cls.FIELD_LIST_TITLE_CONTENT_CLASS,\n innerHTML: this.parent.localeObj.getConstant('staticFieldList')\n });\n layoutHeader.appendChild(headerContent);\n layoutHeader.appendChild(this.createCalculatedButton());\n addClass([fieldListWrappper], cls.STATIC_FIELD_LIST_CLASS);\n fieldListWrappper.appendChild(layoutHeader);\n fieldListWrappper.appendChild(this.parentElement);\n }\n };\n DialogRenderer.prototype.renderFieldListDialog = function (fieldListWrappper) {\n var toggleFieldList = createElement('div', {\n className: cls.TOGGLE_FIELD_LIST_CLASS + ' ' + cls.ICON + ' ' + cls.TOGGLE_SELECT_CLASS,\n attrs: {\n 'tabindex': '0',\n title: this.parent.localeObj.getConstant('fieldList'),\n 'aria-disabled': 'false',\n 'aria-label': this.parent.localeObj.getConstant('fieldList')\n }\n });\n this.parent.element.appendChild(toggleFieldList);\n if (this.parent.isAdaptive) {\n this.fieldListDialog = new Dialog({\n animationSettings: { effect: 'Zoom' },\n content: this.parentElement,\n isModal: true,\n showCloseIcon: false,\n visible: false,\n allowDragging: false,\n closeOnEscape: false,\n enableRtl: this.parent.enableRtl,\n width: '100%',\n height: '100%',\n position: { X: 'center', Y: 'center' },\n buttons: [{\n click: this.showFieldListDialog.bind(this),\n buttonModel: {\n cssClass: cls.ADAPTIVE_FIELD_LIST_BUTTON_CLASS + ' ' + cls.BUTTON_SMALL_CLASS + ' ' + cls.BUTTON_ROUND_CLASS,\n iconCss: cls.ICON + ' ' + cls.ADD_ICON_CLASS,\n isPrimary: true\n }\n }, {\n click: this.showCalculatedField.bind(this),\n buttonModel: {\n cssClass: cls.ADAPTIVE_CALCULATED_FIELD_BUTTON_CLASS +\n ' ' + cls.BUTTON_SMALL_CLASS + ' ' + cls.BUTTON_ROUND_CLASS + ' ' + cls.ICON_DISABLE,\n iconCss: cls.ICON + ' ' + cls.ADD_ICON_CLASS,\n isPrimary: true\n }\n }, {\n click: this.onCloseFieldList.bind(this),\n buttonModel: {\n content: this.parent.localeObj.getConstant('close'),\n cssClass: cls.CANCEL_BUTTON_CLASS,\n }\n }],\n target: document.body,\n close: this.removeFieldListIcon.bind(this)\n });\n this.fieldListDialog.appendTo(fieldListWrappper);\n setStyleAttribute(fieldListWrappper.querySelector('#' + fieldListWrappper.id + '_dialog-content'), {\n 'padding': '0'\n });\n var footer = fieldListWrappper.querySelector('.' + cls.FOOTER_CONTENT_CLASS);\n addClass([footer], cls.FIELD_LIST_FOOTER_CLASS);\n removeClass([footer.querySelector('.' + cls.ADAPTIVE_CALCULATED_FIELD_BUTTON_CLASS)], cls.BUTTON_FLAT_CLASS);\n removeClass([footer.querySelector('.' + cls.ADAPTIVE_FIELD_LIST_BUTTON_CLASS)], cls.BUTTON_FLAT_CLASS);\n }\n else {\n var headerTemplate = '
    ' + this.parent.localeObj.getConstant('fieldList') + '
    ';\n this.fieldListDialog = new Dialog({\n animationSettings: { effect: 'Zoom' },\n header: headerTemplate,\n content: this.parentElement,\n isModal: false,\n showCloseIcon: false,\n visible: false,\n allowDragging: true,\n enableRtl: this.parent.enableRtl,\n width: this.parent.element.style.width,\n position: { X: 'center', Y: this.parent.element.offsetTop },\n buttons: [{\n click: this.onCloseFieldList.bind(this),\n buttonModel: {\n content: this.parent.localeObj.getConstant('close'), cssClass: cls.CANCEL_BUTTON_CLASS,\n isPrimary: true\n },\n }],\n closeOnEscape: true,\n target: !isNullOrUndefined(this.parent.target) ? ((typeof this.parent.target) === 'string') ?\n document.querySelector(this.parent.target) : this.parent.target : document.body,\n close: this.removeFieldListIcon.bind(this)\n });\n this.fieldListDialog.appendTo(fieldListWrappper);\n setStyleAttribute(fieldListWrappper.querySelector('#' + fieldListWrappper.id + '_title'), { 'width': '100%' });\n fieldListWrappper.querySelector('.' + cls.TITLE_HEADER_CLASS).appendChild(this.createCalculatedButton());\n }\n };\n /**\n * Called internally if any of the field added to axis.\n * @hidden\n */\n DialogRenderer.prototype.updateDataSource = function (selectedNodes) {\n var axis = ['filters', 'columns', 'rows', 'values'];\n for (var _i = 0, selectedNodes_1 = selectedNodes; _i < selectedNodes_1.length; _i++) {\n var field = selectedNodes_1[_i];\n var fieldName = field;\n var droppedClass = axis[this.adaptiveElement.selectedItem];\n this.parent.pivotCommon.dataSourceUpdate.updateDataSource(fieldName, droppedClass, -1);\n }\n this.parent.axisFieldModule.render();\n this.parent.updateDataSource(true);\n };\n DialogRenderer.prototype.renderAdaptiveLayout = function (fieldListWrappper) {\n var _this = this;\n var layoutFooter = createElement('div', {\n className: cls.FIELD_LIST_FOOTER_CLASS\n });\n fieldListWrappper.appendChild(this.parentElement);\n var items = [\n {\n header: { 'text': this.parent.localeObj.getConstant('filters') },\n content: this.createAxisTable('filters')\n },\n {\n header: { 'text': this.parent.localeObj.getConstant('columns') },\n content: this.createAxisTable('columns')\n },\n {\n header: { 'text': this.parent.localeObj.getConstant('rows') },\n content: this.createAxisTable('rows')\n },\n {\n header: { 'text': this.parent.localeObj.getConstant('values') },\n content: this.createAxisTable('values')\n },\n {\n header: { 'text': this.parent.localeObj.getConstant('createCalculatedField') },\n content: 'Calculated Field Related UI'\n }\n ];\n if (!this.parent.allowCalculatedField) {\n items.pop();\n }\n this.adaptiveElement = new Tab({\n heightAdjustMode: 'Auto',\n items: items,\n height: '100%',\n enableRtl: this.parent.enableRtl,\n selected: function (e) {\n if (fieldListWrappper.querySelector('.' + cls.ADAPTIVE_FIELD_LIST_BUTTON_CLASS)) {\n if (e.selectedIndex !== 4) {\n addClass([fieldListWrappper.querySelector('.' + cls.ADAPTIVE_CALCULATED_FIELD_BUTTON_CLASS)], cls.ICON_DISABLE);\n removeClass([fieldListWrappper.querySelector('.' + cls.ADAPTIVE_FIELD_LIST_BUTTON_CLASS)], cls.ICON_DISABLE);\n }\n else {\n removeClass([fieldListWrappper.querySelector('.' + cls.ADAPTIVE_CALCULATED_FIELD_BUTTON_CLASS)], cls.ICON_DISABLE);\n addClass([fieldListWrappper.querySelector('.' + cls.ADAPTIVE_FIELD_LIST_BUTTON_CLASS)], cls.ICON_DISABLE);\n }\n }\n if (e.selectedIndex === 4) {\n _this.adaptiveElement.items[4].content = '';\n _this.adaptiveElement.dataBind();\n _this.parent.notify(events.initCalculatedField, {});\n }\n else {\n _this.parent.axisFieldModule.render();\n }\n }\n });\n if (this.parent.renderMode === 'Fixed') {\n layoutFooter.appendChild(this.createAddButton());\n addClass([fieldListWrappper], cls.STATIC_FIELD_LIST_CLASS);\n this.adaptiveElement.appendTo(this.parentElement);\n this.parentElement.appendChild(layoutFooter);\n }\n else {\n this.adaptiveElement.appendTo(this.parentElement);\n }\n };\n DialogRenderer.prototype.createCalculatedButton = function () {\n var calculatedButton = createElement('div', {\n id: this.parent.element.id + '_CalculatedField'\n });\n var calculateField = new Button({\n cssClass: cls.CALCULATED_FIELD_CLASS + ' ' + cls.ICON_DISABLE,\n content: this.parent.localeObj.getConstant('calculatedField'),\n enableRtl: this.parent.enableRtl\n });\n calculateField.appendTo(calculatedButton);\n if (this.parent.calculatedFieldModule) {\n removeClass([calculatedButton], cls.ICON_DISABLE);\n }\n calculateField.element.onclick = this.showCalculatedField.bind(this);\n return calculatedButton;\n };\n DialogRenderer.prototype.createAddButton = function () {\n var footerContainer = createElement('div', {\n className: cls.FIELD_LIST_FOOTER_CLASS + '-content'\n });\n var fieldListButton = createElement('div', {});\n var calculatedButton = createElement('div', {});\n var calculateField = new Button({\n cssClass: cls.ADAPTIVE_CALCULATED_FIELD_BUTTON_CLASS +\n ' ' + cls.BUTTON_SMALL_CLASS + ' ' + cls.BUTTON_ROUND_CLASS + ' ' + cls.ICON_DISABLE,\n iconCss: cls.ICON + ' ' + cls.ADD_ICON_CLASS,\n enableRtl: this.parent.enableRtl\n });\n var fieldList = new Button({\n cssClass: cls.ADAPTIVE_FIELD_LIST_BUTTON_CLASS + ' ' + cls.BUTTON_SMALL_CLASS + ' ' + cls.BUTTON_ROUND_CLASS,\n iconCss: cls.ICON + ' ' + cls.ADD_ICON_CLASS,\n enableRtl: this.parent.enableRtl\n });\n fieldList.appendTo(fieldListButton);\n calculateField.appendTo(calculatedButton);\n footerContainer.appendChild(fieldListButton);\n footerContainer.appendChild(calculatedButton);\n calculateField.element.onclick = this.showCalculatedField.bind(this);\n fieldList.element.onclick = this.showFieldListDialog.bind(this);\n return footerContainer;\n };\n DialogRenderer.prototype.createAxisTable = function (axis) {\n var axisWrapper = createElement('div', {\n className: cls.FIELD_LIST_CLASS + '-' + axis\n });\n var axisContent = createElement('div', { className: cls.AXIS_CONTENT_CLASS + ' ' + 'e-' + axis });\n var axisPrompt = createElement('span', {\n className: cls.AXIS_PROMPT_CLASS,\n innerHTML: this.parent.localeObj.getConstant('addPrompt')\n });\n axisWrapper.appendChild(axisContent);\n axisWrapper.appendChild(axisPrompt);\n return axisWrapper;\n };\n DialogRenderer.prototype.showCalculatedField = function (event) {\n if (!this.parent.isAdaptive) {\n if (this.parent.dialogRenderer.fieldListDialog) {\n this.parent.dialogRenderer.fieldListDialog.hide();\n addClass([this.parent.element.querySelector('.' + cls.TOGGLE_FIELD_LIST_CLASS)], cls.ICON_HIDDEN);\n }\n }\n this.parent.notify(events.initCalculatedField, {});\n };\n DialogRenderer.prototype.showFieldListDialog = function (event) {\n var activeindex = this.adaptiveElement.selectedItem;\n this.parent.treeViewModule.render(activeindex);\n };\n DialogRenderer.prototype.onShowFieldList = function () {\n addClass([this.parent.element.querySelector('.' + cls.TOGGLE_FIELD_LIST_CLASS)], cls.ICON_HIDDEN);\n this.parent.dialogRenderer.fieldListDialog.show();\n this.parent.dialogRenderer.fieldListDialog.element.style.top =\n parseInt(this.parent.dialogRenderer.fieldListDialog.element.style.top, 10) < 0 ?\n '0px' : this.parent.dialogRenderer.fieldListDialog.element.style.top;\n };\n DialogRenderer.prototype.onCloseFieldList = function () {\n this.parent.dialogRenderer.fieldListDialog.hide();\n };\n DialogRenderer.prototype.removeFieldListIcon = function () {\n if (!document.getElementById(this.parent.element.id + 'calculateddialog')) {\n removeClass([this.parent.element.querySelector('.' + cls.TOGGLE_FIELD_LIST_CLASS)], cls.ICON_HIDDEN);\n }\n };\n DialogRenderer.prototype.keyPress = function (e) {\n var target = e.target;\n if (e.keyCode === 13 && e.target) {\n e.target.click();\n e.preventDefault();\n return;\n }\n };\n DialogRenderer.prototype.wireDialogEvent = function (element) {\n EventHandler.add(element, 'keydown', this.keyPress, this);\n EventHandler.add(element, 'click', this.onShowFieldList, this);\n };\n DialogRenderer.prototype.unWireDialogEvent = function (element) {\n EventHandler.remove(element, 'keydown', this.keyPress);\n EventHandler.remove(element, 'click', this.onShowFieldList);\n };\n return DialogRenderer;\n}());\nexport { DialogRenderer };\n","import { createElement, addClass, removeClass, prepend, remove } from '@syncfusion/ej2-base';\nimport { closest, extend } from '@syncfusion/ej2-base';\nimport * as cls from '../../common/base/css-constant';\nimport * as events from '../../common/base/constant';\nimport { TreeView } from '@syncfusion/ej2-navigations';\nimport { Dialog } from '@syncfusion/ej2-popups';\nimport { MaskedTextBox } from '@syncfusion/ej2-inputs';\n/**\n * Module to render Field List\n */\n/** @hidden */\nvar TreeViewRenderer = /** @class */ (function () {\n /** Constructor for render module */\n function TreeViewRenderer(parent) {\n this.selectedNodes = [];\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * Initialize the field list tree rendering\n * @returns void\n * @private\n */\n TreeViewRenderer.prototype.render = function (axis) {\n this.parentElement = this.parent.dialogRenderer.parentElement;\n if (!this.parent.isAdaptive) {\n var fieldTable = createElement('div', { className: cls.FIELD_TABLE_CLASS });\n var treeHeader = createElement('div', {\n className: cls.FIELD_HEADER_CLASS,\n innerHTML: this.parent.localeObj.getConstant('allFields')\n });\n this.treeViewElement = createElement('div', {\n id: this.parent.element.id + '_TreeView',\n className: cls.FIELD_LIST_CLASS\n });\n fieldTable.appendChild(treeHeader);\n fieldTable.appendChild(this.treeViewElement);\n this.parentElement.appendChild(fieldTable);\n if (this.parent.renderMode === 'Fixed') {\n var centerDiv = createElement('div', { className: cls.STATIC_CENTER_DIV_CLASS });\n var axisHeader = createElement('div', {\n className: cls.STATIC_CENTER_HEADER_CLASS,\n innerHTML: this.parent.localeObj.getConstant('centerHeader')\n });\n this.parentElement.appendChild(centerDiv);\n this.parentElement.appendChild(axisHeader);\n }\n this.renderTreeView();\n }\n else {\n this.renderTreeDialog(axis);\n }\n };\n TreeViewRenderer.prototype.renderTreeView = function () {\n this.fieldTable = new TreeView({\n fields: { dataSource: this.getTreeData(), id: 'id', text: 'caption', isChecked: 'isSelected' },\n nodeChecked: this.nodeStateChange.bind(this),\n cssClass: cls.FIELD_LIST_TREE_CLASS,\n showCheckBox: true,\n allowDragAndDrop: true,\n sortOrder: 'Ascending',\n enableRtl: this.parent.enableRtl,\n nodeDragStart: this.dragStart.bind(this),\n nodeDragStop: this.dragStop.bind(this)\n });\n this.treeViewElement.innerHTML = '';\n this.fieldTable.appendTo(this.treeViewElement);\n this.getTreeUpdate();\n };\n TreeViewRenderer.prototype.renderTreeDialog = function (axis) {\n var _this = this;\n var fieldListDialog = createElement('div', {\n id: this.parent.element.id + '_FieldListTreeView',\n className: cls.ADAPTIVE_FIELD_LIST_DIALOG_CLASS\n });\n this.parentElement.appendChild(fieldListDialog);\n this.fieldDialog = new Dialog({\n animationSettings: { effect: 'Fade' },\n allowDragging: false,\n header: this.parent.localeObj.getConstant('adaptiveFieldHeader'),\n content: this.createTreeView(this.getTreeData(axis)),\n isModal: true,\n visible: true,\n showCloseIcon: false,\n enableRtl: this.parent.enableRtl,\n width: 'auto',\n height: '350px',\n position: { X: 'center', Y: 'center' },\n buttons: [{\n click: this.closeTreeDialog.bind(this),\n buttonModel: {\n cssClass: cls.CANCEL_BUTTON_CLASS, content: this.parent.localeObj.getConstant('cancel')\n }\n }, {\n click: this.onFieldAdd.bind(this),\n buttonModel: {\n cssClass: cls.OK_BUTTON_CLASS, content: this.parent.localeObj.getConstant('add'),\n isPrimary: true\n }\n }],\n closeOnEscape: true,\n target: this.parentElement.parentElement,\n close: function () {\n if (document.getElementById(_this.parent.element.id + '_FieldListTreeView')) {\n remove(document.getElementById(_this.parent.element.id + '_FieldListTreeView'));\n }\n }\n });\n this.fieldDialog.appendTo(fieldListDialog);\n };\n TreeViewRenderer.prototype.createTreeView = function (treeData) {\n var _this = this;\n var editorTreeWrapper = createElement('div', {\n id: this.parent.element.id + 'EditorDiv',\n className: cls.EDITOR_TREE_WRAPPER_CLASS\n });\n var searchWrapper = createElement('div', {\n id: this.parent.element.id + '_SearchDiv', attrs: { 'tabindex': '-1' },\n className: cls.EDITOR_SEARCH_WRAPPER_CLASS\n });\n var editorSearch = createElement('input', { attrs: { 'type': 'text' } });\n searchWrapper.appendChild(editorSearch);\n var treeViewContainer = createElement('div', { className: cls.EDITOR_TREE_CONTAINER_CLASS });\n editorTreeWrapper.appendChild(searchWrapper);\n this.editorSearch = new MaskedTextBox({\n placeholder: this.parent.localeObj.getConstant('search'),\n enableRtl: this.parent.enableRtl,\n cssClass: cls.EDITOR_SEARCH_CLASS,\n change: function (e) {\n _this.parent.pivotCommon.eventBase.searchTreeNodes(e, _this.fieldTable);\n }\n });\n this.editorSearch.appendTo(editorSearch);\n editorTreeWrapper.appendChild(treeViewContainer);\n this.fieldTable = new TreeView({\n fields: { dataSource: treeData, id: 'id', text: 'caption', isChecked: 'isSelected' },\n showCheckBox: true,\n sortOrder: 'Ascending',\n enableRtl: this.parent.enableRtl,\n nodeChecked: this.addNode.bind(this),\n });\n this.fieldTable.appendTo(treeViewContainer);\n return editorTreeWrapper;\n };\n TreeViewRenderer.prototype.dragStart = function (args) {\n if (args.event.target.classList.contains(cls.DRAG_CLASS)) {\n this.parent.isDragging = true;\n addClass([args.draggedNode.querySelector('.' + cls.LIST_TEXT_CLASS)], cls.SELECTED_NODE_CLASS);\n var data = this.parent.engineModule.fieldList[args.draggedNode.getAttribute('data-uid')];\n var axis = [cls.ROW_AXIS_CLASS, cls.COLUMN_AXIS_CLASS, cls.FILTER_AXIS_CLASS];\n if (data && data.aggregateType === 'CalculatedField') {\n for (var _i = 0, axis_1 = axis; _i < axis_1.length; _i++) {\n var axisContent = axis_1[_i];\n addClass([this.parentElement.querySelector('.' + axisContent)], cls.NO_DRAG_CLASS);\n }\n }\n }\n else {\n args.cancel = true;\n }\n };\n TreeViewRenderer.prototype.dragStop = function (args) {\n args.cancel = true;\n this.parent.isDragging = false;\n var axis = [cls.ROW_AXIS_CLASS, cls.COLUMN_AXIS_CLASS, cls.FILTER_AXIS_CLASS];\n for (var _i = 0, axis_2 = axis; _i < axis_2.length; _i++) {\n var axisElement = axis_2[_i];\n removeClass([this.parentElement.querySelector('.' + axisElement)], cls.NO_DRAG_CLASS);\n }\n removeClass([args.draggedNode.querySelector('.' + cls.LIST_TEXT_CLASS)], cls.SELECTED_NODE_CLASS);\n if (this.parent.pivotCommon.filterDialog.dialogPopUp) {\n this.parent.pivotCommon.filterDialog.dialogPopUp.close();\n }\n var fieldName = args.draggedNodeData.id.toString();\n if (!this.isNodeDropped(args, fieldName)) {\n return;\n }\n if (this.parent.pivotCommon.nodeStateModified.onStateModified(args, fieldName)) {\n this.parent.updateDataSource();\n this.parent.axisFieldModule.render();\n }\n };\n TreeViewRenderer.prototype.isNodeDropped = function (args, targetID) {\n var isDropped = true;\n if (args.draggedNodeData.isChecked === 'true') {\n var target = this.getButton(targetID);\n var axisPanel = closest(target, '.' + cls.DROPPABLE_CLASS);\n var droppableElement = closest(args.target, '.' + cls.DROPPABLE_CLASS);\n if (target && axisPanel === droppableElement) {\n var pivotButtons = [].slice.call(axisPanel.querySelectorAll('.' + cls.PIVOT_BUTTON_CLASS));\n var dropTarget = closest(args.target, '.' + cls.PIVOT_BUTTON_WRAPPER_CLASS);\n var sourcePosition = void 0;\n var dropPosition = -1;\n for (var i = 0, n = pivotButtons.length; i < n; i++) {\n if (pivotButtons[i].id === target.id) {\n sourcePosition = i;\n }\n if (dropTarget) {\n var droppableButton = dropTarget.querySelector('.' + cls.PIVOT_BUTTON_CLASS);\n if (pivotButtons[i].id === droppableButton.id) {\n dropPosition = i;\n }\n }\n }\n if (sourcePosition === dropPosition || (sourcePosition === (pivotButtons.length - 1) && dropPosition === -1)) {\n var parentElement = document.getElementById(this.parent.element.id + '_Wrapper');\n removeClass([].slice.call(parentElement.querySelectorAll('.' + cls.DROP_INDICATOR_CLASS)), cls.INDICATOR_HOVER_CLASS);\n isDropped = false;\n }\n }\n }\n return isDropped;\n };\n TreeViewRenderer.prototype.getButton = function (fieldName) {\n var wrapperElement = document.getElementById(this.parent.element.id + '_Wrapper');\n var pivotButtons = [].slice.call(wrapperElement.querySelectorAll('.' + cls.PIVOT_BUTTON_CLASS));\n var buttonElement;\n for (var i = 0, n = pivotButtons.length; i < n; i++) {\n if (pivotButtons[i].id === fieldName) {\n buttonElement = pivotButtons[i];\n break;\n }\n }\n return buttonElement;\n };\n TreeViewRenderer.prototype.nodeStateChange = function (args) {\n if (this.parent.pivotCommon.filterDialog.dialogPopUp) {\n this.parent.pivotCommon.filterDialog.dialogPopUp.close();\n }\n var node = closest(args.node, '.' + cls.TEXT_CONTENT_CLASS);\n var list = this.parent.pivotFieldList;\n var selectedNode = list[args.data[0].id.toString()];\n if (args.action === 'check') {\n addClass([node.querySelector('.' + cls.LIST_TEXT_CLASS)], cls.LIST_SELECT_CLASS);\n var addNode = this.parent.pivotCommon.dataSourceUpdate.getNewField(args.data[0].id.toString());\n selectedNode.type === 'number' ?\n this.parent.dataSource.values.push(addNode) : this.parent.dataSource.rows.push(addNode);\n }\n else {\n removeClass([node.querySelector('.' + cls.LIST_TEXT_CLASS)], cls.LIST_SELECT_CLASS);\n this.parent.pivotCommon.dataSourceUpdate.removeFieldFromReport(args.data[0].id.toString());\n }\n this.parent.updateDataSource(true);\n this.parent.axisFieldModule.render();\n };\n TreeViewRenderer.prototype.addNode = function (args) {\n var fieldList = this.parent.pivotFieldList;\n var selectedNode = fieldList[args.data[0].id.toString()];\n if (args.action === 'check') {\n this.selectedNodes.push(selectedNode.id.toString());\n }\n else {\n var count = this.selectedNodes.length;\n while (count--) {\n if (this.selectedNodes[count] === selectedNode.id.toString()) {\n this.selectedNodes.splice(count, 1);\n break;\n }\n }\n }\n };\n TreeViewRenderer.prototype.getTreeUpdate = function () {\n var liElements = [].slice.call(this.treeViewElement.querySelectorAll('.' + cls.TEXT_CONTENT_CLASS));\n for (var _i = 0, liElements_1 = liElements; _i < liElements_1.length; _i++) {\n var liElement = liElements_1[_i];\n var dragElement = createElement('span', {\n attrs: {\n 'tabindex': '-1',\n title: this.parent.localeObj.getConstant('drag'),\n 'aria-disabled': 'false'\n },\n className: cls.ICON + ' ' + cls.DRAG_CLASS\n });\n prepend([dragElement], liElement);\n if (liElement.querySelector('.' + cls.NODE_CHECK_CLASS)) {\n addClass([liElement.querySelector('.' + cls.LIST_TEXT_CLASS)], cls.LIST_SELECT_CLASS);\n }\n }\n };\n TreeViewRenderer.prototype.refreshTreeView = function () {\n this.fieldTable.fields = { dataSource: this.getTreeData(), id: 'id', text: 'caption', isChecked: 'isSelected' };\n this.fieldTable.dataBind();\n this.getTreeUpdate();\n };\n TreeViewRenderer.prototype.getTreeData = function (axis) {\n var data = [];\n var keys = Object.keys(this.parent.pivotFieldList);\n var fieldList = extend({}, this.parent.pivotFieldList, null, true);\n if (this.parent.isAdaptive) {\n var fields = [this.parent.dataSource.filters, this.parent.dataSource.columns, this.parent.dataSource.rows,\n this.parent.dataSource.values];\n var currentFieldSet = fields[axis];\n var len = keys.length;\n while (len--) {\n fieldList[keys[len]].isSelected = false;\n }\n for (var _i = 0, currentFieldSet_1 = currentFieldSet; _i < currentFieldSet_1.length; _i++) {\n var item = currentFieldSet_1[_i];\n fieldList[item.name].isSelected = true;\n }\n }\n var list = fieldList;\n for (var _a = 0, keys_1 = keys; _a < keys_1.length; _a++) {\n var member = keys_1[_a];\n var obj = list[member];\n data.push(obj);\n }\n return data;\n };\n TreeViewRenderer.prototype.onFieldAdd = function (e) {\n this.parent.dialogRenderer.updateDataSource(this.selectedNodes);\n this.closeTreeDialog();\n };\n TreeViewRenderer.prototype.closeTreeDialog = function () {\n this.selectedNodes = [];\n this.fieldDialog.hide();\n };\n /**\n * @hidden\n */\n TreeViewRenderer.prototype.addEventListener = function () {\n this.parent.on(events.treeViewUpdate, this.refreshTreeView, this);\n };\n /**\n * @hidden\n */\n TreeViewRenderer.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.treeViewUpdate, this.refreshTreeView);\n };\n /**\n * To destroy the tree view event listener\n * @return {void}\n * @hidden\n */\n TreeViewRenderer.prototype.destroy = function () {\n this.removeEventListener();\n };\n return TreeViewRenderer;\n}());\nexport { TreeViewRenderer };\n","import { createElement, Droppable, EventHandler, removeClass, addClass } from '@syncfusion/ej2-base';\nimport * as cls from '../../common/base/css-constant';\n/**\n * Module to render Axis Field Table\n */\n/** @hidden */\nvar AxisTableRenderer = /** @class */ (function () {\n /** Constructor for render module */\n function AxisTableRenderer(parent) {\n this.parent = parent;\n }\n /**\n * Initialize the axis table rendering\n * @returns void\n * @private\n */\n AxisTableRenderer.prototype.render = function () {\n if (!this.parent.isAdaptive) {\n var axisTable = createElement('div', { className: cls.AXIS_TABLE_CLASS });\n this.leftAxisPanel = createElement('div', { className: cls.LEFT_AXIS_PANEL_CLASS });\n this.rightAxisPanel = createElement('div', { className: cls.RIGHT_AXIS_PANEL_CLASS });\n this.parent.dialogRenderer.parentElement.appendChild(axisTable);\n axisTable.appendChild(this.leftAxisPanel);\n axisTable.appendChild(this.rightAxisPanel);\n this.axisTable = axisTable;\n this.renderAxisTable();\n }\n else {\n return;\n }\n this.parent.axisFieldModule.render();\n };\n AxisTableRenderer.prototype.renderAxisTable = function () {\n var fieldLabels = ['filters', 'rows', 'columns', 'values'];\n for (var len = 0, lnt = fieldLabels.length; len < lnt; len++) {\n var axis = createElement('div', {\n className: cls.FIELD_LIST_CLASS + '-' + fieldLabels[len]\n });\n var axisTitleWrapper = createElement('div', {\n className: cls.AXIS_ICON_CLASS + '-wrapper'\n });\n var axisTitle = createElement('div', {\n className: cls.AXIS_HEADER_CLASS,\n innerHTML: this.parent.localeObj.getConstant(fieldLabels[len])\n });\n axisTitleWrapper.appendChild(this.getIconupdate(fieldLabels[len]));\n axisTitleWrapper.appendChild(axisTitle);\n var axisContent = createElement('div', { className: cls.AXIS_CONTENT_CLASS + ' ' + 'e-' + fieldLabels[len] });\n var localePrompt = void 0;\n if (fieldLabels[len] === 'rows') {\n localePrompt = this.parent.localeObj.getConstant('dropRowPrompt');\n }\n else if (fieldLabels[len] === 'columns') {\n localePrompt = this.parent.localeObj.getConstant('dropColPrompt');\n }\n else if (fieldLabels[len] === 'values') {\n localePrompt = this.parent.localeObj.getConstant('dropValPrompt');\n }\n else {\n localePrompt = this.parent.localeObj.getConstant('dropFilterPrompt');\n }\n var axisPrompt = createElement('span', {\n className: cls.AXIS_PROMPT_CLASS,\n innerHTML: localePrompt\n });\n var droppable = new Droppable(axisContent, {});\n axis.appendChild(axisTitleWrapper);\n axis.appendChild(axisContent);\n axis.appendChild(axisPrompt);\n if (len <= 1) {\n this.leftAxisPanel.appendChild(axis);\n }\n else {\n this.rightAxisPanel.appendChild(axis);\n }\n this.unWireEvent(axisContent);\n this.wireEvent(axisContent);\n }\n };\n AxisTableRenderer.prototype.getIconupdate = function (axis) {\n var axisWrapper = createElement('span', {\n attrs: { 'tabindex': '-1', 'aria-disabled': 'false' },\n className: cls.AXIS_ICON_CLASS + '-icon-wrapper'\n });\n var axisElement = createElement('span', {\n attrs: {\n 'tabindex': '-1', 'aria-disabled': 'false'\n },\n className: cls.ICON + ' ' + cls.AXIS_ICON_CLASS + '-' + axis\n });\n axisWrapper.appendChild(axisElement);\n return axisWrapper;\n };\n AxisTableRenderer.prototype.wireEvent = function (element) {\n EventHandler.add(element, 'mouseover', this.updateDropIndicator, this);\n EventHandler.add(element, 'mouseleave', this.updateDropIndicator, this);\n };\n AxisTableRenderer.prototype.unWireEvent = function (element) {\n EventHandler.remove(element, 'mouseover', this.updateDropIndicator);\n EventHandler.remove(element, 'mouseleave', this.updateDropIndicator);\n };\n AxisTableRenderer.prototype.updateDropIndicator = function (e) {\n var parentElement = this.parent.dialogRenderer.parentElement;\n if (this.parent.isDragging && e.target.classList.contains(cls.AXIS_CONTENT_CLASS) && e.type === 'mouseover') {\n removeClass([].slice.call(parentElement.querySelectorAll('.' + cls.DROP_INDICATOR_CLASS)), cls.INDICATOR_HOVER_CLASS);\n removeClass([].slice.call(parentElement.querySelectorAll('.' + cls.DROP_INDICATOR_CLASS + '-last')), cls.INDICATOR_HOVER_CLASS);\n var element = [].slice.call(e.target.querySelectorAll('.' + cls.PIVOT_BUTTON_WRAPPER_CLASS));\n if (element.length > 0) {\n addClass([element[element.length - 1].querySelector('.' + cls.DROP_INDICATOR_CLASS + '-last')], cls.INDICATOR_HOVER_CLASS);\n }\n }\n else if (e.type === 'mouseleave') {\n removeClass([].slice.call(parentElement.querySelectorAll('.' + cls.DROP_INDICATOR_CLASS)), cls.INDICATOR_HOVER_CLASS);\n removeClass([].slice.call(parentElement.querySelectorAll('.' + cls.DROP_INDICATOR_CLASS + '-last')), cls.INDICATOR_HOVER_CLASS);\n }\n };\n return AxisTableRenderer;\n}());\nexport { AxisTableRenderer };\n","import { createElement, Draggable, remove } from '@syncfusion/ej2-base';\nimport { EventHandler } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, addClass, removeClass, closest, Browser } from '@syncfusion/ej2-base';\nimport * as cls from '../../common/base/css-constant';\nimport * as events from '../../common/base/constant';\nimport { Button } from '@syncfusion/ej2-buttons';\n/**\n * Module to render Pivot button\n */\n/** @hidden */\nvar PivotButton = /** @class */ (function () {\n /** Constructor for render module */\n function PivotButton(parent) {\n this.parent = parent;\n this.parent.pivotButtonModule = this;\n this.addEventListener();\n }\n PivotButton.prototype.renderPivotButton = function (args) {\n var field = args.field;\n var axis = args.axis;\n var axisElement;\n this.parentElement = this.parent.getModuleName() === 'pivotview' ? this.parent.element :\n document.getElementById(this.parent.element.id + '_Wrapper');\n if (this.parent.getModuleName() === 'pivotfieldlist') {\n this.parentElement = document.getElementById(this.parent.element.id + '_Wrapper');\n if (this.parentElement.querySelector('.' + cls.FIELD_LIST_CLASS + '-' + axis)) {\n var axisPrompt = this.parentElement.querySelector('.' + cls.FIELD_LIST_CLASS + '-' + axis)\n .querySelector('.' + cls.AXIS_PROMPT_CLASS);\n if (field.length === 0) {\n removeClass([axisPrompt], cls.ICON_DISABLE);\n }\n else {\n addClass([axisPrompt], cls.ICON_DISABLE);\n }\n axisElement =\n this.parentElement.querySelector('.' + cls.FIELD_LIST_CLASS + '-' + axis).querySelector('.' + cls.AXIS_CONTENT_CLASS);\n }\n else {\n return;\n }\n }\n else {\n this.parentElement = this.parent.element;\n axisElement = this.parentElement.querySelector('.e-group-' + axis);\n }\n if (axisElement) {\n if (this.parent.getModuleName() === 'pivotview' && field.length === 0) {\n var axisPrompt = createElement('span', {\n className: cls.AXIS_PROMPT_CLASS,\n innerHTML: axis === 'rows' ? this.parent.localeObj.getConstant('rowAxisPrompt') :\n axis === 'columns' ? this.parent.localeObj.getConstant('columnAxisPrompt') :\n axis === 'values' ? this.parent.localeObj.getConstant('valueAxisPrompt') :\n this.parent.localeObj.getConstant('filterAxisPrompt')\n });\n axisElement.appendChild(axisPrompt);\n }\n else {\n for (var i = 0, cnt = field.length; i < cnt; i++) {\n var buttonWrapper = createElement('div', {\n className: cls.PIVOT_BUTTON_WRAPPER_CLASS + (i === 0 ? ' e-first-btn' : ''),\n attrs: { 'data-tag': axis + ':' + field[i].name }\n });\n var buttonElement = createElement('div', {\n id: field[i].name, className: cls.PIVOT_BUTTON_CLASS,\n attrs: {\n 'data-uid': field[i].name, 'tabindex': '0',\n 'aria-disabled': 'false', 'aria-label': field[i].caption ? field[i].caption : field[i].name\n }\n });\n var dropIndicatorElement = createElement('span', {\n attrs: { 'tabindex': '-1', 'aria-disabled': 'false' },\n className: cls.DROP_INDICATOR_CLASS\n });\n var dropLastIndicatorElement = createElement('span', {\n attrs: { 'tabindex': '-1', 'aria-disabled': 'false' },\n className: cls.DROP_INDICATOR_CLASS + '-last'\n });\n var dragWrapper = this.createButtonDragIcon(buttonElement);\n var contentElement = createElement('span', {\n attrs: {\n 'tabindex': '-1', 'aria-disabled': 'false', 'oncontextmenu': 'return false;',\n 'data-type': this.parent.engineModule.fieldList[field[i].name].aggregateType\n },\n className: cls.PIVOT_BUTTON_CONTENT_CLASS,\n innerHTML: field[i].caption ? field[i].caption : field[i].name\n });\n buttonElement.appendChild(contentElement);\n if (['filters', 'values'].indexOf(axis) === -1) {\n this.createSortOption(buttonElement, field[i].name);\n }\n if (axis !== 'values') {\n this.createFilterOption(buttonElement, field[i].name);\n }\n var removeElement = createElement('span', {\n attrs: { 'tabindex': '-1', 'aria-disabled': 'false' },\n className: cls.ICON + ' ' + cls.REMOVE_CLASS\n });\n if (this.parent.getModuleName() === 'pivotview') {\n if (this.parent.groupingBarSettings.showRemoveIcon) {\n removeClass([removeElement], cls.ICON_DISABLE);\n }\n else {\n addClass([removeElement], cls.ICON_DISABLE);\n }\n }\n buttonElement.appendChild(removeElement);\n buttonWrapper.appendChild(dropIndicatorElement);\n buttonWrapper.appendChild(buttonElement);\n buttonWrapper.appendChild(dropLastIndicatorElement);\n axisElement.appendChild(buttonWrapper);\n var pivotButton = new Button({ enableRtl: this.parent.enableRtl });\n pivotButton.appendTo(buttonElement);\n this.unWireEvent(buttonWrapper, axis);\n this.wireEvent(buttonWrapper, axis);\n if ((this.parent.getModuleName() === 'pivotview' && !this.parent.isAdaptive) ||\n this.parent.getModuleName() === 'pivotfieldlist') {\n this.createDraggable(this.parent.getModuleName() === 'pivotview' ? contentElement : dragWrapper);\n }\n }\n }\n }\n else {\n return;\n }\n };\n PivotButton.prototype.createDraggable = function (target) {\n this.draggable = new Draggable(target, {\n clone: true,\n enableTailMode: true,\n enableAutoScroll: true,\n helper: this.createDragClone.bind(this),\n dragStart: this.onDragStart.bind(this),\n drag: this.onDragging.bind(this),\n dragStop: this.onDragStop.bind(this)\n });\n };\n PivotButton.prototype.createButtonDragIcon = function (pivotButton) {\n var dragWrapper = createElement('span', {\n attrs: { 'tabindex': '-1', 'aria-disabled': 'false' }\n });\n var dragElement = createElement('span', {\n attrs: {\n 'tabindex': '-1', 'aria-disabled': 'false'\n },\n className: cls.ICON + ' ' + cls.DRAG_CLASS\n });\n dragWrapper.appendChild(dragElement);\n pivotButton.appendChild(dragWrapper);\n return dragWrapper;\n };\n PivotButton.prototype.createSortOption = function (pivotButton, fieldName) {\n var sortCLass = this.parent.engineModule.fieldList[fieldName].sort === 'Descending' ? cls.SORT_DESCEND_CLASS : '';\n var spanElement = createElement('span', {\n attrs: { 'tabindex': '-1', 'aria-disabled': 'false' },\n className: cls.ICON + ' ' + cls.SORT_CLASS + ' ' + sortCLass\n });\n if (this.parent.dataSource.enableSorting) {\n removeClass([spanElement], cls.ICON_DISABLE);\n }\n else {\n addClass([spanElement], cls.ICON_DISABLE);\n }\n if (this.parent.getModuleName() === 'pivotview') {\n if (this.parent.groupingBarSettings.showSortIcon) {\n removeClass([spanElement], cls.ICON_DISABLE);\n }\n else {\n addClass([spanElement], cls.ICON_DISABLE);\n }\n }\n pivotButton.appendChild(spanElement);\n return spanElement;\n };\n PivotButton.prototype.createFilterOption = function (pivotButton, fieldName) {\n var filterCLass = this.parent.engineModule.fieldList[fieldName].filter.length === 0 ? cls.FILTER_CLASS : cls.FILTERED_CLASS;\n var spanElement = createElement('span', {\n attrs: {\n 'tabindex': '-1', 'aria-disabled': 'false'\n },\n className: cls.FILTER_COMMON_CLASS + ' ' + cls.ICON + ' ' + filterCLass\n });\n if (this.parent.getModuleName() === 'pivotview') {\n if (this.parent.groupingBarSettings.showFilterIcon) {\n removeClass([spanElement], cls.ICON_DISABLE);\n }\n else {\n addClass([spanElement], cls.ICON_DISABLE);\n }\n }\n pivotButton.appendChild(spanElement);\n return spanElement;\n };\n PivotButton.prototype.createDragClone = function (args) {\n var element = closest(args.element, '.' + cls.PIVOT_BUTTON_CLASS);\n var cloneElement = createElement('div', {\n id: this.parent.element.id + '_DragClone',\n className: cls.DRAG_CLONE_CLASS\n });\n var contentElement = createElement('span', {\n className: cls.TEXT_CONTENT_CLASS,\n innerHTML: element.textContent\n });\n cloneElement.appendChild(contentElement);\n document.body.appendChild(cloneElement);\n return cloneElement;\n };\n PivotButton.prototype.onDragStart = function (e) {\n this.parent.isDragging = true;\n var element = closest(e.element, '.' + cls.PIVOT_BUTTON_CLASS);\n var data = this.parent.engineModule.fieldList[element.getAttribute('data-uid')];\n var axis = [cls.ROW_AXIS_CLASS, cls.COLUMN_AXIS_CLASS, cls.FILTER_AXIS_CLASS];\n addClass([element], cls.SELECTED_NODE_CLASS);\n if (data && data.aggregateType === 'CalculatedField') {\n for (var _i = 0, axis_1 = axis; _i < axis_1.length; _i++) {\n var axisContent = axis_1[_i];\n addClass([this.parentElement.querySelector('.' + axisContent)], cls.NO_DRAG_CLASS);\n }\n }\n };\n PivotButton.prototype.onDragging = function (e) {\n this.draggable.setProperties({ cursorAt: { top: (!isNOU(e.event.targetTouches) || Browser.isDevice) ? 60 : -20, } });\n // if (closest(e.event.srcElement, '.' + cls.PIVOT_BUTTON_WRAPPER_CLASS)) {\n // let droppableElement: HTMLElement = closest(e.event.srcElement, '.' + cls.DROPPABLE_CLASS) as HTMLElement;\n // let buttonElement: HTMLElement = closest(e.event.srcElement, '.' + cls.PIVOT_BUTTON_WRAPPER_CLASS) as HTMLElement;\n // if (droppableElement.offsetHeight < droppableElement.scrollHeight) {\n // let scrollPosition: number = (droppableElement.scrollHeight - buttonElement.offsetTop);\n // if (buttonElement.offsetTop >= droppableElement.offsetTop && scrollPosition > droppableElement.scrollTop) {\n // droppableElement.scrollTop += Math.abs(buttonElement.offsetHeight);\n // } else if (buttonElement.offsetTop <= droppableElement.offsetTop) {\n // droppableElement.scrollTop -= Math.abs(buttonElement.offsetHeight);\n // }\n // }\n // }\n };\n PivotButton.prototype.onDragStop = function (args) {\n this.parent.isDragging = false;\n var element = closest(args.element, '.' + cls.PIVOT_BUTTON_CLASS);\n removeClass([].slice.call(this.parentElement.querySelectorAll('.' + cls.PIVOT_BUTTON_CLASS)), cls.SELECTED_NODE_CLASS);\n removeClass([].slice.call(this.parentElement.querySelectorAll('.' + cls.DROP_INDICATOR_CLASS)), cls.INDICATOR_HOVER_CLASS);\n var axis = [cls.ROW_AXIS_CLASS, cls.COLUMN_AXIS_CLASS, cls.FILTER_AXIS_CLASS];\n for (var _i = 0, axis_2 = axis; _i < axis_2.length; _i++) {\n var axisContent = axis_2[_i];\n removeClass([this.parentElement.querySelector('.' + axisContent)], cls.NO_DRAG_CLASS);\n }\n if (this.parent.pivotCommon.filterDialog.dialogPopUp) {\n this.parent.pivotCommon.filterDialog.dialogPopUp.close();\n }\n remove(document.getElementById(this.parent.element.id + '_DragClone'));\n if (!this.isButtonDropped(args.target, element)) {\n return;\n }\n if (this.parent.pivotCommon.nodeStateModified.onStateModified(args, element.id)) {\n this.parent.updateDataSource();\n this.parent.axisFieldModule.render();\n }\n };\n PivotButton.prototype.isButtonDropped = function (dropTarget, target) {\n var axisPanel = closest(target, '.' + cls.DROPPABLE_CLASS);\n var droppableElement = closest(dropTarget, '.' + cls.DROPPABLE_CLASS);\n var isDropped = true;\n if (axisPanel === droppableElement) {\n var pivotButtons = [].slice.call(axisPanel.querySelectorAll('.' + cls.PIVOT_BUTTON_CLASS));\n var droppableTarget = closest(dropTarget, '.' + cls.PIVOT_BUTTON_WRAPPER_CLASS);\n var sourcePosition = void 0;\n var droppedPosition = -1;\n for (var i = 0, n = pivotButtons.length; i < n; i++) {\n if (pivotButtons[i].id === target.id) {\n sourcePosition = i;\n }\n if (droppableTarget) {\n var droppableButton = droppableTarget.querySelector('.' + cls.PIVOT_BUTTON_CLASS);\n if (pivotButtons[i].id === droppableButton.id) {\n droppedPosition = i;\n }\n }\n }\n if (sourcePosition === droppedPosition || (sourcePosition === (pivotButtons.length - 1) && droppedPosition === -1)) {\n removeClass([].slice.call(this.parentElement.querySelectorAll('.' + cls.DROP_INDICATOR_CLASS)), cls.INDICATOR_HOVER_CLASS);\n isDropped = false;\n }\n }\n return isDropped;\n };\n PivotButton.prototype.updateSorting = function (args) {\n if (((this.parent.getModuleName() === 'pivotview' && this.parent.enableValueSorting) ||\n (this.parent.getModuleName() === 'pivotfieldlist' && this.parent.pivotGridModule !== undefined &&\n this.parent.pivotGridModule.enableValueSorting)) &&\n args.target.parentElement.parentElement.getAttribute('data-tag').split(':')[0] === 'rows') {\n this.parent.dataSource.valueSortSettings.headerText = '';\n }\n this.parent.pivotCommon.eventBase.updateSorting(args);\n this.parent.updateDataSource(true);\n };\n PivotButton.prototype.updateFiltering = function (args) {\n this.parent.pivotCommon.eventBase.updateFiltering(args);\n var target = args.target;\n var fieldName = target.parentElement.id;\n this.dialogPopUp = this.parent.pivotCommon.filterDialog.dialogPopUp;\n this.memberTreeView = this.parent.pivotCommon.filterDialog.memberTreeView;\n this.parent.pivotCommon.filterDialog.memberTreeView.nodeChecked = this.nodeStateModified.bind(this);\n this.parent.pivotCommon.filterDialog.allMemberSelect.nodeChecked = this.nodeStateModified.bind(this);\n this.parent.pivotCommon.filterDialog.dialogPopUp.buttons[0].click = this.updateFilterState.bind(this, fieldName);\n };\n PivotButton.prototype.removeButton = function (args) {\n var target = args.target;\n var fieldName = target.parentElement.id;\n this.parent.pivotCommon.dataSourceUpdate.removeFieldFromReport(fieldName);\n if (this.parent.getModuleName() === 'pivotfieldlist') {\n this.parent.axisFieldModule.render();\n }\n this.parent.updateDataSource();\n };\n PivotButton.prototype.nodeStateModified = function (args) {\n var filterDialog = this.dialogPopUp.element;\n var target = args.node.parentElement.parentElement;\n if (target.getAttribute('data-uid') === 'all') {\n this.memberTreeView.nodeChecked = null;\n if (args.action === 'check') {\n this.memberTreeView.checkAll();\n }\n else {\n this.memberTreeView.uncheckAll();\n }\n this.memberTreeView.nodeChecked = this.nodeStateModified.bind(this);\n }\n this.parent.pivotCommon.filterDialog.updateCheckedState();\n };\n PivotButton.prototype.updateFilterState = function (fieldName, args) {\n var list = [].slice.call(this.memberTreeView.element.querySelectorAll('li'));\n var unCheckedNodeCount = 0;\n var filterItem = { items: [], name: fieldName, type: 'include' };\n for (var i = 0, cnt = list.length; i < cnt; i++) {\n if (list[i].querySelector('.' + cls.CHECK_BOX_FRAME_CLASS).classList.contains(cls.NODE_CHECK_CLASS)) {\n filterItem.items.push(list[i].getAttribute('data-uid'));\n }\n else {\n unCheckedNodeCount = unCheckedNodeCount + 1;\n }\n }\n var filterObject = this.parent.pivotCommon.eventBase.getFilterItemByName(fieldName);\n if (filterObject) {\n filterObject.items = filterItem.items;\n filterObject.type = filterItem.type;\n }\n else {\n this.parent.dataSource.filterSettings.push(filterItem);\n }\n this.refreshPivotButtonState(fieldName, (unCheckedNodeCount > 0) ? true : false);\n if (unCheckedNodeCount === 0) {\n this.removeDataSourceSettings(fieldName);\n }\n this.parent.updateDataSource(true);\n this.dialogPopUp.hide();\n };\n PivotButton.prototype.refreshPivotButtonState = function (fieldName, isFiltered) {\n var pivotButtons = [].slice.call(this.parentElement.querySelectorAll('.e-pivot-button'));\n var selectedButton;\n for (var _i = 0, pivotButtons_1 = pivotButtons; _i < pivotButtons_1.length; _i++) {\n var item = pivotButtons_1[_i];\n if (item.getAttribute('data-uid') === fieldName) {\n selectedButton = item.querySelector('.' + cls.FILTER_COMMON_CLASS);\n break;\n }\n }\n if (isFiltered) {\n removeClass([selectedButton], cls.FILTER_CLASS);\n addClass([selectedButton], cls.FILTERED_CLASS);\n selectedButton.setAttribute('title', this.parent.localeObj.getConstant('filtered'));\n }\n else {\n removeClass([selectedButton], cls.FILTERED_CLASS);\n addClass([selectedButton], cls.FILTER_CLASS);\n selectedButton.setAttribute('title', this.parent.localeObj.getConstant('filter'));\n }\n };\n PivotButton.prototype.removeDataSourceSettings = function (fieldName) {\n var filterSettings = this.parent.dataSource.filterSettings;\n for (var len = 0, lnt = filterSettings.length; len < lnt; len++) {\n if (filterSettings[len].name === fieldName) {\n filterSettings.splice(len, 1);\n break;\n }\n }\n };\n PivotButton.prototype.updateDropIndicator = function (e) {\n if (this.parent.isDragging) {\n removeClass([].slice.call(this.parentElement.querySelectorAll('.' + cls.DROP_INDICATOR_CLASS + '-last')), cls.INDICATOR_HOVER_CLASS);\n removeClass([].slice.call(this.parentElement.querySelectorAll('.' + cls.DROP_INDICATOR_CLASS)), cls.INDICATOR_HOVER_CLASS);\n var element = closest(e.target, '.' + cls.PIVOT_BUTTON_WRAPPER_CLASS);\n addClass([element.querySelector('.' + cls.DROP_INDICATOR_CLASS)], cls.INDICATOR_HOVER_CLASS);\n }\n };\n PivotButton.prototype.wireEvent = function (element, axis) {\n EventHandler.add(element, 'mouseover', this.updateDropIndicator, this);\n if (['filters', 'values'].indexOf(axis) === -1) {\n EventHandler.add(element.querySelector('.' + cls.SORT_CLASS), 'click', this.updateSorting, this);\n }\n if (axis !== 'values') {\n EventHandler.add(element.querySelector('.' + cls.FILTER_COMMON_CLASS), 'click', this.updateFiltering, this);\n }\n EventHandler.add(element.querySelector('.' + cls.REMOVE_CLASS), 'click', this.removeButton, this);\n };\n PivotButton.prototype.unWireEvent = function (element, axis) {\n EventHandler.remove(element, 'mouseover', this.updateDropIndicator);\n if (['filters', 'values'].indexOf(axis) === -1) {\n EventHandler.remove(element.querySelector('.' + cls.SORT_CLASS), 'click', this.updateSorting);\n }\n if (axis !== 'values') {\n EventHandler.remove(element.querySelector('.' + cls.FILTER_COMMON_CLASS), 'click', this.updateFiltering);\n }\n EventHandler.remove(element.querySelector('.' + cls.REMOVE_CLASS), 'click', this.removeButton);\n };\n /**\n * @hidden\n */\n PivotButton.prototype.addEventListener = function () {\n this.handlers = {\n load: this.renderPivotButton\n };\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.pivotButtonUpdate, this.handlers.load, this);\n };\n /**\n * @hidden\n */\n PivotButton.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.pivotButtonUpdate, this.handlers.load);\n };\n /**\n * To destroy the pivot button event listener\n * @return {void}\n * @hidden\n */\n PivotButton.prototype.destroy = function () {\n this.removeEventListener();\n };\n return PivotButton;\n}());\nexport { PivotButton };\n","import * as cls from '../../common/base/css-constant';\nimport * as events from '../../common/base/constant';\nimport { PivotButton } from '../../common/actions/pivot-button';\n/**\n * Module to render Axis Fields\n */\n/** @hidden */\nvar AxisFieldRenderer = /** @class */ (function () {\n /** Constructor for render module */\n function AxisFieldRenderer(parent) {\n this.parent = parent;\n }\n /**\n * Initialize the pivot button rendering\n * @returns void\n * @private\n */\n AxisFieldRenderer.prototype.render = function () {\n this.pivotButton = new PivotButton(this.parent);\n this.createPivotButtons();\n };\n AxisFieldRenderer.prototype.createPivotButtons = function () {\n var rows = this.parent.dataSource.rows;\n var columns = this.parent.dataSource.columns;\n var values = this.parent.dataSource.values;\n var filters = this.parent.dataSource.filters;\n var fields = [rows, columns, values, filters];\n var parentElement = this.parent.dialogRenderer.parentElement;\n if (parentElement.querySelector('.' + cls.FIELD_LIST_CLASS + '-filters')) {\n parentElement.querySelector('.' + cls.FIELD_LIST_CLASS + '-filters').querySelector('.' + cls.AXIS_CONTENT_CLASS).innerHTML = '';\n }\n if (parentElement.querySelector('.' + cls.FIELD_LIST_CLASS + '-rows')) {\n parentElement.querySelector('.' + cls.FIELD_LIST_CLASS + '-rows').querySelector('.' + cls.AXIS_CONTENT_CLASS).innerHTML = '';\n }\n if (parentElement.querySelector('.' + cls.FIELD_LIST_CLASS + '-columns')) {\n parentElement.querySelector('.' + cls.FIELD_LIST_CLASS + '-columns').querySelector('.' + cls.AXIS_CONTENT_CLASS).innerHTML = '';\n }\n if (parentElement.querySelector('.' + cls.FIELD_LIST_CLASS + '-values')) {\n parentElement.querySelector('.' + cls.FIELD_LIST_CLASS + '-values').querySelector('.' + cls.AXIS_CONTENT_CLASS).innerHTML = '';\n }\n var axis = ['rows', 'columns', 'values', 'filters'];\n for (var len = 0, lnt = fields.length; len < lnt; len++) {\n if (fields[len]) {\n var args = {\n field: fields[len],\n axis: axis[len].toString()\n };\n this.parent.notify(events.pivotButtonUpdate, args);\n }\n }\n };\n return AxisFieldRenderer;\n}());\nexport { AxisFieldRenderer };\n","import { DialogRenderer } from '../renderer/dialog-renderer';\nimport { TreeViewRenderer } from '../renderer/tree-renderer';\nimport { AxisTableRenderer } from '../renderer/axis-table-renderer';\nimport { AxisFieldRenderer } from './axis-field-renderer';\n/**\n * Module to render Pivot Table component\n */\n/** @hidden */\nvar Render = /** @class */ (function () {\n /** Constructor for render module */\n function Render(parent) {\n this.parent = parent;\n this.parent.dialogRenderer = new DialogRenderer(this.parent);\n this.parent.treeViewModule = new TreeViewRenderer(this.parent);\n this.parent.axisTableModule = new AxisTableRenderer(this.parent);\n this.parent.axisFieldModule = new AxisFieldRenderer(this.parent);\n }\n /**\n * Initialize the pivot table rendering\n * @returns void\n * @private\n */\n Render.prototype.render = function () {\n this.parent.dialogRenderer.render();\n if (!this.parent.isAdaptive) {\n this.parent.treeViewModule.render();\n }\n this.parent.axisTableModule.render();\n };\n return Render;\n}());\nexport { Render };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, Event, Component, Internationalization, extend } from '@syncfusion/ej2-base';\nimport { L10n, remove, addClass, Browser, Complex } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, removeClass } from '@syncfusion/ej2-base';\nimport { PivotEngine } from '../../base/engine';\nimport * as events from '../../common/base/constant';\nimport * as cls from '../../common/base/css-constant';\nimport { PivotCommon } from '../../common/base/pivot-common';\nimport { Render } from '../renderer/renderer';\nimport { DataSource } from '../../pivotview/model/dataSource';\nimport { createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\n/**\n * Represents the PivotFieldList component.\n * ```html\n *
    \n * \n * ```\n */\nvar PivotFieldList = /** @class */ (function (_super) {\n __extends(PivotFieldList, _super);\n /**\n * Constructor for creating the widget\n * @param {PivotFieldListModel} options?\n * @param {string|HTMLButtonElement} element?\n */\n function PivotFieldList(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * To provide the array of modules needed for control rendering\n * @return {ModuleDeclaration[]}\n * @hidden\n */\n PivotFieldList.prototype.requiredModules = function () {\n var modules = [];\n if (this.allowCalculatedField) {\n modules.push({ args: [this], member: 'calculatedfield' });\n }\n return modules;\n };\n /**\n * For internal use only - Initialize the event handler;\n * @private\n */\n PivotFieldList.prototype.preRender = function () {\n this.isAdaptive = Browser.isDevice;\n this.globalize = new Internationalization(this.locale);\n this.renderModule = new Render(this);\n this.defaultLocale = {\n staticFieldList: 'Pivot Field List',\n fieldList: 'Field List',\n dropFilterPrompt: 'Drop filter here',\n dropColPrompt: 'Drop column here',\n dropRowPrompt: 'Drop row here',\n dropValPrompt: 'Drop value here',\n addPrompt: 'Add field here',\n adaptiveFieldHeader: 'Choose field',\n centerHeader: 'Drag fields between axes below:',\n add: 'add',\n drag: 'Drag',\n filter: 'Filter',\n filtered: 'Filtered',\n sort: 'Sort',\n remove: 'Remove',\n filters: 'Filters',\n rows: 'Rows',\n columns: 'Columns',\n values: 'Values',\n calculatedField: 'Calculated Field',\n createCalculatedField: 'Create Calculated Field',\n fieldName: 'Enter the field name',\n error: 'Error',\n invalidFormula: 'Invalid formula.',\n dropText: 'Example: (\"Sum(Order_Count)\" + \"Sum(In_Stock)\") * 250',\n dropTextMobile: 'Add fields and edit formula here.',\n dropAction: 'Calculated field cannot be place in any other region except value axis.',\n search: 'Search',\n close: 'Close',\n cancel: 'Cancel',\n delete: 'Delete',\n alert: 'Alert',\n warning: 'Warning',\n ok: 'OK',\n sum: 'Sum',\n average: 'Average',\n count: 'Count',\n min: 'Min',\n max: 'Max',\n allFields: 'All Fields',\n formula: 'Formula',\n fieldExist: 'A field already exists in this name. Please enter a different name.',\n confirmText: 'A calculation field already exists in this name. Do you want to replace it?',\n noMatches: 'No matches',\n format: 'Summaries values by',\n edit: 'Edit',\n clear: 'Clear',\n formulaField: 'Drag and drop fields to formula',\n dragField: 'Drag field to formula'\n };\n this.localeObj = new L10n(this.getModuleName(), this.defaultLocale, this.locale);\n this.isDragging = false;\n this.captionData = [];\n this.wireEvent();\n };\n /**\n * Initialize the control rendering\n * @returns void\n * @private\n */\n PivotFieldList.prototype.render = function () {\n this.trigger(events.load, { 'dataSource': this.dataSource });\n addClass([this.element], cls.ROOT);\n if (this.enableRtl) {\n addClass([this.element], cls.RTL);\n }\n else {\n removeClass([this.element], cls.RTL);\n }\n if (this.isAdaptive) {\n addClass([this.element], cls.DEVICE);\n }\n else {\n removeClass([this.element], cls.DEVICE);\n }\n if (this.cssClass) {\n addClass([this.element], this.cssClass);\n }\n this.notify(events.initialLoad, {});\n };\n /**\n * Binding events to the Pivot Field List element.\n * @hidden\n */\n PivotFieldList.prototype.wireEvent = function () {\n this.on(events.initialLoad, this.generateData, this);\n this.on(events.dataReady, this.fieldListRender, this);\n };\n /**\n * Unbinding events from the element on widget destroy.\n * @hidden\n */\n PivotFieldList.prototype.unWireEvent = function () {\n if (this.pivotGridModule && this.pivotGridModule.isDestroyed) {\n return;\n }\n this.off(events.initialLoad, this.generateData);\n this.off(events.dataReady, this.fieldListRender);\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @return {string}\n * @hidden\n */\n PivotFieldList.prototype.getPersistData = function () {\n var keyEntity = ['dataSource'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Get component name.\n * @returns string\n * @private\n */\n PivotFieldList.prototype.getModuleName = function () {\n return 'pivotfieldlist';\n };\n /**\n * Called internally if any of the property value changed.\n * @hidden\n */\n PivotFieldList.prototype.onPropertyChanged = function (newProp, oldProp) {\n var requireRefresh = false;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'locale':\n this.refresh();\n break;\n case 'enableRtl':\n if (this.enableRtl) {\n addClass([this.element], cls.RTL);\n }\n else {\n removeClass([this.element], cls.RTL);\n }\n requireRefresh = true;\n break;\n }\n if (requireRefresh) {\n this.fieldListRender();\n }\n }\n };\n PivotFieldList.prototype.generateData = function () {\n this.pivotFieldList = {};\n if (this.dataSource && this.dataSource.data) {\n this.trigger(events.enginePopulating, { 'dataSource': this.dataSource });\n this.engineModule = new PivotEngine(this.dataSource);\n this.pivotFieldList = this.engineModule.fieldList;\n var eventArgs = {\n pivotFieldList: this.pivotFieldList,\n pivotValues: this.engineModule.pivotValues\n };\n this.trigger(events.enginePopulated, eventArgs);\n }\n this.notify(events.dataReady, {});\n this.trigger(events.dataBound);\n };\n PivotFieldList.prototype.fieldListRender = function () {\n this.element.innerHTML = '';\n if (this.renderMode === 'Popup' && this.dialogRenderer.fieldListDialog) {\n this.dialogRenderer.fieldListDialog.destroy();\n remove(document.getElementById(this.element.id + '_Wrapper'));\n }\n this.renderModule.render();\n this.fieldListSpinnerElement = this.renderMode === 'Popup' ?\n this.dialogRenderer.fieldListDialog.element : this.element.querySelector('.e-pivotfieldlist-wrapper');\n createSpinner({ target: this.fieldListSpinnerElement });\n var args = {\n pivotEngine: this.engineModule,\n dataSource: this.dataSource,\n id: this.element.id,\n element: document.getElementById(this.element.id + '_Wrapper'),\n moduleName: this.getModuleName(),\n enableRtl: this.enableRtl,\n isAdaptive: this.isAdaptive,\n renderMode: this.renderMode,\n localeObj: this.localeObj\n };\n this.pivotCommon = new PivotCommon(args);\n };\n PivotFieldList.prototype.getFieldCaption = function (dataSource) {\n this.getFields(dataSource);\n if (this.captionData.length > 0) {\n var lnt = this.captionData.length;\n while (lnt--) {\n if (this.captionData[lnt]) {\n for (var _i = 0, _a = this.captionData[lnt]; _i < _a.length; _i++) {\n var item = _a[_i];\n var obj = item.properties;\n if (obj) {\n if (this.engineModule.fieldList[obj.name] && obj.caption) {\n this.engineModule.fieldList[obj.name].caption = obj.caption;\n }\n else {\n this.engineModule.fieldList[obj.name].caption = obj.name;\n }\n }\n }\n }\n }\n }\n else {\n return;\n }\n };\n PivotFieldList.prototype.getFields = function (dataSource) {\n var fieldSets = extend({}, dataSource, null, true);\n var obj = fieldSets.properties;\n this.captionData = [obj.rows, obj.columns, obj.values, obj.filters];\n };\n /**\n * Updates the PivotEngine using dataSource from Pivot Field List component.\n * @method updateDataSource\n * @return {void}\n * @hidden\n */\n PivotFieldList.prototype.updateDataSource = function (isTreeViewRefresh) {\n if (this.pivotGridModule) {\n showSpinner(this.pivotGridModule.element);\n }\n showSpinner(this.fieldListSpinnerElement);\n this.engineModule = new PivotEngine(this.dataSource, '', this.pivotFieldList);\n this.getFieldCaption(this.dataSource);\n var eventArgs = {\n dataSource: this.dataSource,\n pivotFieldList: this.pivotFieldList,\n pivotValues: this.engineModule.pivotValues\n };\n this.trigger(events.enginePopulated, eventArgs);\n this.pivotCommon.engineModule = this.engineModule;\n this.pivotCommon.dataSource = this.dataSource;\n this.pivotFieldList = this.engineModule.fieldList;\n if (!isTreeViewRefresh && this.treeViewModule.fieldTable && !this.isAdaptive) {\n this.notify(events.treeViewUpdate, {});\n }\n this.updateView(this.pivotGridModule);\n if (!this.pivotGridModule) {\n hideSpinner(this.fieldListSpinnerElement);\n }\n else {\n this.pivotGridModule.fieldListSpinnerElement = this.fieldListSpinnerElement;\n }\n };\n /**\n * Updates the Pivot Field List component using dataSource from PivotView component.\n * @method updateControl\n * @return {void}\n * @hidden\n */\n PivotFieldList.prototype.update = function (control) {\n if (control) {\n this.setProperties({ dataSource: control.dataSource }, true);\n this.engineModule = control.engineModule;\n this.pivotFieldList = control.engineModule.fieldList;\n this.pivotGridModule = control;\n this.getFieldCaption(control.dataSource);\n this.pivotCommon.engineModule = this.engineModule;\n this.pivotCommon.dataSource = this.dataSource;\n if (this.treeViewModule.fieldTable && !this.isAdaptive) {\n this.notify(events.treeViewUpdate, {});\n }\n this.axisFieldModule.render();\n }\n };\n /**\n * Updates the PivotView component using dataSource from Pivot Field List component.\n * @method refreshTargetControl\n * @return {void}\n * @hidden\n */\n PivotFieldList.prototype.updateView = function (control) {\n if (control) {\n control.setProperties({ dataSource: this.dataSource }, true);\n control.engineModule = this.engineModule;\n control.pivotValues = this.engineModule.pivotValues;\n control.dataBind();\n }\n };\n /**\n * Destroys the Field Table component.\n * @method destroy\n * @return {void}\n */\n PivotFieldList.prototype.destroy = function () {\n this.unWireEvent();\n this.treeViewModule.destroy();\n this.pivotButtonModule.destroy();\n _super.prototype.destroy.call(this);\n this.element.innerHTML = '';\n removeClass([this.element], cls.ROOT);\n removeClass([this.element], cls.RTL);\n removeClass([this.element], cls.DEVICE);\n if (this.renderMode === 'Popup') {\n this.dialogRenderer.fieldListDialog.destroy();\n if (document.getElementById(this.element.id + '_Wrapper')) {\n remove(document.getElementById(this.element.id + '_Wrapper'));\n }\n }\n };\n __decorate([\n Complex({}, DataSource)\n ], PivotFieldList.prototype, \"dataSource\", void 0);\n __decorate([\n Property('Popup')\n ], PivotFieldList.prototype, \"renderMode\", void 0);\n __decorate([\n Property()\n ], PivotFieldList.prototype, \"target\", void 0);\n __decorate([\n Property('')\n ], PivotFieldList.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], PivotFieldList.prototype, \"allowCalculatedField\", void 0);\n __decorate([\n Event()\n ], PivotFieldList.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], PivotFieldList.prototype, \"enginePopulating\", void 0);\n __decorate([\n Event()\n ], PivotFieldList.prototype, \"enginePopulated\", void 0);\n __decorate([\n Event()\n ], PivotFieldList.prototype, \"dataBound\", void 0);\n __decorate([\n Event()\n ], PivotFieldList.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], PivotFieldList.prototype, \"destroyed\", void 0);\n PivotFieldList = __decorate([\n NotifyPropertyChanges\n ], PivotFieldList);\n return PivotFieldList;\n}(Component));\nexport { PivotFieldList };\n","import { Dialog } from '@syncfusion/ej2-popups';\nimport { Droppable, createElement, extend, remove, addClass, closest } from '@syncfusion/ej2-base';\nimport { prepend, append, KeyboardEvents, removeClass } from '@syncfusion/ej2-base';\nimport { Button, RadioButton, CheckBox } from '@syncfusion/ej2-buttons';\nimport { MaskedTextBox } from '@syncfusion/ej2-inputs';\nimport * as cls from '../../common/base/css-constant';\nimport { TreeView } from '@syncfusion/ej2-navigations';\nimport { ContextMenu as Menu } from '@syncfusion/ej2-navigations';\nimport * as events from '../../common/base/constant';\nimport { Accordion } from '@syncfusion/ej2-navigations';\n/**\n * Module to render Calculated Field Dialog\n */\nvar COUNT = 'Count';\nvar AVG = 'Avg';\nvar MIN = 'Min';\nvar MAX = 'Max';\nvar SUM = 'Sum';\nvar CALC = 'CalculatedField';\nvar AGRTYPE = 'AggregateType';\n/** @hidden */\nvar CalculatedField = /** @class */ (function () {\n /** Constructor for calculatedfield module */\n function CalculatedField(parent) {\n this.parent = parent;\n this.existingReport = null;\n this.parent.calculatedFieldModule = this;\n this.removeEventListener();\n this.addEventListener();\n this.parentID = this.parent.element.id;\n this.dialog = null;\n this.inputObj = null;\n this.treeObj = null;\n this.droppable = null;\n this.menuObj = null;\n this.newFields = null;\n this.isFieldExist = true;\n this.formulaText = null;\n this.fieldText = null;\n this.isEdit = false;\n this.currentFieldName = null;\n this.confirmPopUp = null;\n }\n /**\n * To get module name.\n * @returns string\n */\n CalculatedField.prototype.getModuleName = function () {\n return 'calculatedfield';\n };\n CalculatedField.prototype.keyActionHandler = function (e) {\n var node = e.currentTarget.querySelector('.e-hover.e-node-focus');\n if (node) {\n switch (e.action) {\n case 'moveRight':\n this.displayMenu(node.previousSibling);\n break;\n case 'enter':\n var field = node.getAttribute('data-field');\n var type = node.getAttribute('data-type');\n var dropField = this.dialog.element.querySelector('#' + this.parentID + 'droppable');\n if (dropField.value === '') {\n if (type === CALC) {\n dropField.value = node.getAttribute('data-uid');\n }\n else {\n dropField.value = '\"' + type + '(' + field + ')' + '\"';\n }\n }\n else if (dropField.value !== '') {\n if (type === CALC) {\n dropField.value = dropField.value + node.getAttribute('data-uid');\n }\n else {\n dropField.value = dropField.value + '\"' + type + '(' + field + ')' + '\"';\n }\n }\n break;\n }\n }\n };\n /**\n * Trigger while click treeview icon.\n * @param {MouseEvent} e\n * @returns void\n */\n CalculatedField.prototype.fieldClickHandler = function (e) {\n var node = e.event.target.parentElement;\n if (e.event.target.classList.contains(cls.FORMAT) ||\n e.event.target.classList.contains(cls.CALC_EDIT) ||\n e.event.target.classList.contains(cls.CALC_EDITED)) {\n this.displayMenu(node.parentElement);\n }\n };\n /**\n * To display context menu.\n * @param {HTMLElement} node\n * @returns void\n */\n CalculatedField.prototype.displayMenu = function (node) {\n if (document.querySelector('.' + this.parentID + 'calculatedmenu') !== null &&\n node.querySelector('.e-list-icon').classList.contains(cls.ICON) &&\n !node.querySelector('.e-list-icon').classList.contains(cls.CALC_EDITED) &&\n !node.querySelector('.e-list-icon').classList.contains(cls.CALC_EDIT) && node.tagName === 'LI') {\n this.menuObj.close();\n this.curMenu = node.querySelector('.' + cls.LIST_TEXT_CLASS);\n this.openContextMenu();\n }\n else if (node.querySelector('.e-list-icon').classList.contains(cls.CALC_EDIT) && node.tagName === 'LI') {\n addClass([node.querySelector('.e-list-icon')], cls.CALC_EDITED);\n removeClass([node.querySelector('.e-list-icon')], cls.CALC_EDIT);\n node.querySelector('.' + cls.CALC_EDITED).setAttribute('title', this.parent.localeObj.getConstant('clear'));\n this.isEdit = true;\n this.currentFieldName = node.getAttribute('data-field');\n this.inputObj.value = node.getAttribute('data-caption');\n this.dialog.element.querySelector('.' + cls.CALCINPUT).value = node.getAttribute('data-caption');\n document.querySelector('#' + this.parentID + 'droppable').value = node.getAttribute('data-uid');\n }\n else if (node.querySelector('.e-list-icon').classList.contains(cls.CALC_EDITED) && node.tagName === 'LI') {\n addClass([node.querySelector('.e-list-icon')], cls.CALC_EDIT);\n removeClass([node.querySelector('.e-list-icon')], cls.CALC_EDITED);\n node.querySelector('.' + cls.CALC_EDIT).setAttribute('title', this.parent.localeObj.getConstant('edit'));\n this.isEdit = false;\n this.inputObj.value = '';\n this.dialog.element.querySelector('.' + cls.CALCINPUT).value = '';\n document.querySelector('#' + this.parentID + 'droppable').value = '';\n }\n };\n /**\n * To set position for context menu.\n * @returns void\n */\n CalculatedField.prototype.openContextMenu = function () {\n var pos = this.curMenu.getBoundingClientRect();\n if (this.parent.enableRtl) {\n this.menuObj.open(pos.top + 30, pos.left - 100);\n }\n else {\n this.menuObj.open(pos.top + 30, pos.left + 150);\n }\n };\n /**\n * Triggers while select menu.\n * @param {MenuEventArgs} menu\n * @returns void\n */\n CalculatedField.prototype.selectContextMenu = function (menu) {\n if (menu.element.textContent !== null) {\n var field = closest(this.curMenu, '.e-list-item').getAttribute('data-caption');\n closest(this.curMenu, '.e-list-item').setAttribute('data-type', menu.element.textContent);\n this.curMenu.textContent = field + ' (' + menu.element.textContent + ')';\n addClass([this.curMenu.parentElement.parentElement], ['e-node-focus', 'e-hover']);\n this.curMenu.parentElement.parentElement.setAttribute('tabindex', '-1');\n this.curMenu.parentElement.parentElement.focus();\n }\n };\n /**\n * To create context menu.\n * @returns void\n */\n CalculatedField.prototype.createMenu = function () {\n var menuItems = [\n {\n text: COUNT,\n },\n {\n text: AVG\n },\n {\n text: MIN\n },\n {\n text: MAX\n },\n {\n text: SUM\n }\n ];\n var menuOptions = {\n cssClass: this.parentID + 'calculatedmenu',\n items: menuItems,\n enableRtl: this.parent.enableRtl,\n beforeOpen: this.beforeMenuOpen.bind(this),\n select: this.selectContextMenu.bind(this)\n };\n this.parent.element.appendChild(createElement('ul', {\n id: this.parentID + 'contextmenu'\n }));\n this.menuObj = new Menu(menuOptions);\n this.menuObj.appendTo('#' + this.parentID + 'contextmenu');\n };\n /**\n * Triggers while click OK button.\n * @returns void\n */\n CalculatedField.prototype.applyFormula = function () {\n var currentObj = this;\n var isExist = false;\n removeClass([document.getElementById(this.parentID + 'ddlelement')], cls.EMPTY_FIELD);\n Object.keys(currentObj.parent.engineModule.fieldList).forEach(function (key, index) {\n if (currentObj.inputObj.value && currentObj.inputObj.value === key &&\n currentObj.parent.engineModule.fieldList[key].aggregateType !== 'CalculatedField') {\n isExist = true;\n }\n });\n if (isExist) {\n currentObj.parent.pivotCommon.errorDialog.createErrorDialog(currentObj.parent.localeObj.getConstant('error'), currentObj.parent.localeObj.getConstant('fieldExist'));\n return;\n }\n this.newFields = extend([], this.parent.dataSource.calculatedFieldSettings, null, true);\n this.existingReport = extend({}, this.parent.dataSource, null, true);\n var report = this.parent.dataSource;\n var dropField = document.querySelector('#' + this.parentID + 'droppable');\n if (this.inputObj.value !== null && this.inputObj.value !== '' && dropField.value !== '') {\n var field = {\n name: this.inputObj.value,\n type: 'CalculatedField'\n };\n var cField = {\n name: this.inputObj.value,\n formula: dropField.value\n };\n this.isFieldExist = true;\n if (!this.isEdit) {\n for (var i = 0; i < report.values.length; i++) {\n if (report.values[i].type === CALC && report.values[i].name === field.name) {\n for (var j = 0; j < report.calculatedFieldSettings.length; j++) {\n if (report.calculatedFieldSettings[j].name === field.name) {\n this.createConfirmDialog(currentObj.parent.localeObj.getConstant('alert'), currentObj.parent.localeObj.getConstant('confirmText'));\n return;\n }\n }\n this.isFieldExist = false;\n }\n }\n }\n else {\n for (var i = 0; i < report.values.length; i++) {\n if (report.values[i].type === CALC && this.currentFieldName !== null &&\n report.values[i].name === this.currentFieldName && this.isEdit) {\n for (var j = 0; j < report.calculatedFieldSettings.length; j++) {\n if (report.calculatedFieldSettings[j].name === this.currentFieldName) {\n report.values[i].caption = this.inputObj.value;\n report.calculatedFieldSettings[j].formula = dropField.value;\n this.parent.engineModule.fieldList[this.currentFieldName].caption = this.inputObj.value;\n this.isFieldExist = false;\n }\n }\n }\n }\n }\n if (this.isFieldExist) {\n report.values.push(field);\n report.calculatedFieldSettings.push(cField);\n }\n this.addFormula(report, field.name);\n }\n else {\n if (this.inputObj.value === null || this.inputObj.value === '') {\n addClass([document.getElementById(this.parentID + 'ddlelement')], cls.EMPTY_FIELD);\n document.getElementById(this.parentID + 'ddlelement').focus();\n }\n else {\n this.parent.pivotCommon.errorDialog.createErrorDialog(this.parent.localeObj.getConstant('error'), this.parent.localeObj.getConstant('invalidFormula'));\n }\n }\n };\n CalculatedField.prototype.addFormula = function (report, field) {\n try {\n this.parent.setProperties({ dataSource: report }, true);\n this.parent.updateDataSource(false);\n this.isEdit = false;\n if (this.dialog) {\n this.dialog.close();\n }\n else {\n this.inputObj.value = '';\n this.formulaText = null;\n this.fieldText = null;\n this.parent.\n dialogRenderer.parentElement.querySelector('.' + cls.CALCINPUT).value = '';\n this.parent.\n dialogRenderer.parentElement.querySelector('#' + this.parentID + 'droppable').value = '';\n }\n }\n catch (exception) {\n if (this.parent.engineModule.fieldList[field]) {\n delete this.parent.engineModule.fieldList[field];\n }\n this.parent.pivotCommon.errorDialog.createErrorDialog(this.parent.localeObj.getConstant('error'), this.parent.localeObj.getConstant('invalidFormula'));\n this.parent.setProperties({ dataSource: this.existingReport }, true);\n this.parent.updateDataSource(false);\n }\n };\n /**\n * To get treeview data\n * @param {PivotGrid|PivotFieldList} parent\n * @returns Object\n */\n CalculatedField.prototype.getFieldListData = function (parent) {\n var fields = [];\n Object.keys(parent.engineModule.fieldList).forEach(function (key) {\n var type = null;\n if (parent.engineModule.fieldList[key].type === 'string' || parent.engineModule.fieldList[key].type === 'include' ||\n parent.engineModule.fieldList[key].type === 'exclude') {\n type = COUNT;\n }\n else {\n type = parent.engineModule.fieldList[key].aggregateType !== undefined ?\n parent.engineModule.fieldList[key].aggregateType : SUM;\n }\n fields.push({\n index: parent.engineModule.fieldList[key].index,\n name: parent.engineModule.fieldList[key].caption + ' (' + type + ')',\n type: type,\n icon: cls.FORMAT + ' ' + cls.ICON,\n formula: parent.engineModule.fieldList[key].formula,\n field: key,\n caption: parent.engineModule.fieldList[key].caption ? parent.engineModule.fieldList[key].caption : key\n });\n });\n return fields;\n };\n /**\n * Triggers before menu opens.\n * @param {BeforeOpenCloseMenuEventArgs} args\n * @returns void\n */\n CalculatedField.prototype.beforeMenuOpen = function (args) {\n args.element.style.zIndex = (this.dialog.zIndex + 1).toString();\n args.element.style.display = 'inline';\n };\n /**\n * Trigger while drop node in formula field.\n * @param {DragAndDropEventArgs} args\n * @returns void\n */\n CalculatedField.prototype.fieldDropped = function (args) {\n args.cancel = true;\n var field = args.draggedNode.getAttribute('data-field');\n var type = args.draggedNode.getAttribute('data-type');\n var dropField = this.dialog.element.querySelector('#' + this.parentID + 'droppable');\n if (args.target.id === this.parentID + 'droppable' && dropField.value === '') {\n if (type === CALC) {\n dropField.value = args.draggedNodeData.id.toString();\n }\n else {\n dropField.value = '\"' + type + '(' + field + ')' + '\"';\n }\n dropField.focus();\n }\n else if (args.target.id === (this.parentID + 'droppable') && dropField.value !== '') {\n var textCovered = void 0;\n var cursorPos = dropField.selectionStart;\n var currentValue = dropField.value;\n var textBeforeText = currentValue.substring(0, cursorPos);\n var textAfterText = currentValue.substring(cursorPos, currentValue.length);\n if (type === CALC) {\n textCovered = textBeforeText + args.draggedNodeData.id.toString();\n dropField.value = textBeforeText + args.draggedNodeData.id.toString() + textAfterText;\n }\n else {\n textCovered = textBeforeText + '\"' + type + '(' + field + ')' + '\"';\n dropField.value = textBeforeText + '\"' + type + '(' + field + ')' + '\"' + textAfterText;\n }\n dropField.focus();\n dropField.setSelectionRange(textCovered.length, textCovered.length);\n }\n else {\n args.cancel = true;\n }\n };\n /**\n * To create dialog.\n * @returns void\n */\n CalculatedField.prototype.createDialog = function () {\n var _this = this;\n if (document.querySelector('#' + this.parentID + 'calculateddialog') !== null) {\n remove(document.querySelector('#' + this.parentID + 'calculateddialog'));\n }\n this.parent.element.appendChild(createElement('div', {\n id: this.parentID + 'calculateddialog',\n className: cls.CALCDIALOG\n }));\n this.dialog = new Dialog({\n allowDragging: true,\n position: { X: 'center', Y: 'center' },\n buttons: [\n {\n 'click': function () { return _this.applyFormula(); },\n buttonModel: {\n content: this.parent.localeObj.getConstant('ok'),\n isPrimary: true\n }\n },\n {\n 'click': function () {\n _this.dialog.close();\n _this.isEdit = false;\n },\n buttonModel: {\n content: this.parent.localeObj.getConstant('cancel')\n }\n }\n ],\n close: function (args) {\n if (_this.parent.getModuleName() === 'pivotfieldlist') {\n _this.parent.axisFieldModule.render();\n if (_this.parent.renderMode !== 'Fixed') {\n addClass([_this.parent.element.querySelector('.' + cls.TOGGLE_FIELD_LIST_CLASS)], cls.ICON_HIDDEN);\n _this.parent.dialogRenderer.fieldListDialog.show();\n }\n }\n _this.treeObj.destroy();\n _this.dialog.destroy();\n _this.newFields = null;\n remove(document.getElementById(_this.parentID + 'calculateddialog'));\n remove(document.querySelector('.' + _this.parentID + 'calculatedmenu'));\n },\n beforeOpen: function (args) {\n _this.dialog.element.querySelector('.e-dlg-header').\n setAttribute('title', _this.parent.localeObj.getConstant('createCalculatedField'));\n },\n animationSettings: { effect: 'Zoom' },\n width: '25%',\n isModal: false,\n closeOnEscape: true,\n enableRtl: this.parent.enableRtl,\n showCloseIcon: true,\n header: this.parent.localeObj.getConstant('createCalculatedField'),\n target: document.body\n });\n this.dialog.appendTo('#' + this.parentID + 'calculateddialog');\n };\n /**\n * To render dialog elements.\n * @returns void\n */\n CalculatedField.prototype.renderDialogElements = function () {\n var outerDiv = createElement('div', { id: this.parentID + 'outerDiv', className: cls.CALCOUTERDIV });\n if (this.parent.getModuleName() === 'pivotfieldlist' && this.parent.\n dialogRenderer.parentElement.querySelector('.' + cls.FORMULA) !== null && this.parent.isAdaptive) {\n var accordDiv = createElement('div', { id: this.parentID + 'accordDiv', className: cls.CALCACCORD });\n outerDiv.appendChild(accordDiv);\n var buttonDiv = createElement('div', { id: this.parentID + 'buttonDiv', className: cls.CALCBUTTONDIV });\n var addBtn = createElement('button', {\n id: this.parentID + 'addBtn', innerHTML: 'ADD',\n className: cls.CALCADDBTN\n });\n var cancelBtn = createElement('button', {\n id: this.parentID + 'cancelBtn', innerHTML: 'CANCEL',\n className: cls.CALCCANCELBTN\n });\n buttonDiv.appendChild(cancelBtn);\n buttonDiv.appendChild(addBtn);\n outerDiv.appendChild(buttonDiv);\n }\n else {\n var inputDiv = createElement('div', { id: this.parentID + 'outerDiv', className: cls.CALCINPUTDIV });\n var inputObj = createElement('input', {\n id: this.parentID + 'ddlelement',\n attrs: { 'type': 'text', 'tabindex': '1' },\n className: cls.CALCINPUT\n });\n inputDiv.appendChild(inputObj);\n outerDiv.appendChild(inputDiv);\n if (!this.parent.isAdaptive) {\n var fieldTitle = createElement('div', {\n className: cls.PIVOT_ALL_FIELD_TITLE_CLASS,\n innerHTML: this.parent.localeObj.getConstant('formulaField')\n });\n outerDiv.appendChild(fieldTitle);\n }\n var wrapDiv = createElement('div', { id: this.parentID + 'control_wrapper', className: cls.TREEVIEWOUTER });\n wrapDiv.appendChild(createElement('div', { id: this.parentID + 'tree', className: cls.TREEVIEW }));\n outerDiv.appendChild(wrapDiv);\n if (!this.parent.isAdaptive) {\n var formulaTitle = createElement('div', {\n className: cls.PIVOT_FORMULA_TITLE_CLASS,\n innerHTML: this.parent.localeObj.getConstant('formula')\n });\n outerDiv.appendChild(formulaTitle);\n }\n var dropDiv = createElement('textarea', {\n id: this.parentID + 'droppable',\n className: cls.FORMULA,\n attrs: {\n 'placeholder': this.parent.isAdaptive ? this.parent.localeObj.getConstant('dropTextMobile') :\n this.parent.localeObj.getConstant('dropText')\n }\n });\n outerDiv.appendChild(dropDiv);\n if (this.parent.isAdaptive) {\n var buttonDiv = createElement('div', { id: this.parentID + 'buttonDiv', className: cls.CALCBUTTONDIV });\n var okBtn = createElement('button', {\n id: this.parentID + 'okBtn', innerHTML: 'APPLY',\n className: cls.CALCOKBTN\n });\n buttonDiv.appendChild(okBtn);\n outerDiv.appendChild(buttonDiv);\n }\n }\n return outerDiv;\n };\n /**\n * To create calculated field adaptive layout.\n * @returns void\n */\n CalculatedField.prototype.renderAdaptiveLayout = function () {\n if (document.querySelector('#' + this.parentID + 'droppable')) {\n this.formulaText = document.querySelector('#' + this.parentID + 'droppable').value;\n this.fieldText = this.inputObj.value;\n }\n this.renderMobileLayout(this.parent.dialogRenderer.adaptiveElement);\n };\n /**\n * To create treeview.\n * @returns void\n */\n CalculatedField.prototype.createTreeView = function () {\n var _this = this;\n this.treeObj = new TreeView({\n fields: { dataSource: this.getFieldListData(this.parent), id: 'formula', text: 'name', iconCss: 'icon' },\n allowDragAndDrop: true,\n enableRtl: this.parent.enableRtl,\n nodeCollapsing: function (args) {\n args.cancel = true;\n },\n nodeDragStart: function (args) {\n if (args.event.target.classList.contains(cls.DRAG_CLASS)) {\n var dragItem = document.querySelector('.e-drag-item.e-treeview');\n addClass([dragItem], cls.PIVOTCALC);\n dragItem.style.zIndex = (_this.dialog.zIndex + 1).toString();\n dragItem.style.display = 'inline';\n }\n else {\n args.cancel = true;\n }\n },\n nodeClicked: this.fieldClickHandler.bind(this),\n nodeDragStop: this.fieldDropped.bind(this),\n drawNode: this.drawTreeNode.bind(this),\n sortOrder: 'Ascending'\n });\n this.treeObj.appendTo('#' + this.parentID + 'tree');\n };\n /**\n * Trigger before treeview text append.\n * @param {DrawNodeEventArgs} args\n * @returns void\n */\n CalculatedField.prototype.drawTreeNode = function (args) {\n var field = args.nodeData.field;\n args.node.setAttribute('data-field', field);\n args.node.setAttribute('data-caption', args.nodeData.caption);\n args.node.setAttribute('data-type', args.nodeData.type);\n var dragElement = createElement('span', {\n attrs: { 'tabindex': '-1', 'aria-disabled': 'false', 'title': this.parent.localeObj.getConstant('dragField') },\n className: cls.ICON + ' e-drag'\n });\n prepend([dragElement], args.node.querySelector('.' + cls.TEXT_CONTENT_CLASS));\n append([args.node.querySelector('.' + cls.FORMAT)], args.node.querySelector('.' + cls.TEXT_CONTENT_CLASS));\n if (this.parent.engineModule.fieldList[field].type !== 'number' &&\n this.parent.engineModule.fieldList[field].aggregateType !== CALC) {\n removeClass([args.node.querySelector('.' + cls.FORMAT)], cls.ICON);\n }\n else {\n args.node.querySelector('.' + cls.FORMAT).setAttribute('title', this.parent.localeObj.getConstant('format'));\n }\n if (this.parent.engineModule.fieldList[field].aggregateType === CALC) {\n args.node.querySelector('.' + cls.FORMAT).setAttribute('title', this.parent.localeObj.getConstant('edit'));\n addClass([args.node.querySelector('.' + cls.FORMAT)], cls.CALC_EDIT);\n removeClass([args.node.querySelector('.' + cls.FORMAT)], cls.FORMAT);\n }\n };\n /**\n * To create radio buttons.\n * @param {string} key\n * @returns HTMLElement\n */\n CalculatedField.prototype.createTypeContainer = function (key) {\n var wrapDiv = createElement('div', { id: this.parentID + 'control_wrapper', className: cls.TREEVIEWOUTER });\n var type = [SUM, COUNT, AVG, MIN, MAX];\n for (var i = 0; i < 5; i++) {\n var input = createElement('input', {\n id: this.parentID + 'radio' + key + type[i],\n attrs: { 'type': 'radio', 'data-ftxt': key },\n className: cls.CALCRADIO\n });\n wrapDiv.appendChild(input);\n }\n return wrapDiv;\n };\n /**\n * To get Accordion Data.\n * @param {PivotView | PivotFieldList} parent\n * @returns AccordionItemModel\n */\n CalculatedField.prototype.getAccordionData = function (parent) {\n var _this = this;\n var data = [];\n Object.keys(parent.engineModule.fieldList).forEach(function (key, index) {\n data.push({\n header: '',\n content: parent.engineModule.fieldList[key].aggregateType === CALC ||\n _this.parent.engineModule.fieldList[key].type !== 'number' ? '' : _this.createTypeContainer(key).outerHTML\n });\n });\n return data;\n };\n /**\n * To render mobile layout.\n * @param {Tab} tabObj\n * @returns void\n */\n CalculatedField.prototype.renderMobileLayout = function (tabObj) {\n var _this = this;\n tabObj.items[4].content = this.renderDialogElements().outerHTML;\n tabObj.dataBind();\n var cancelBtn = new Button({ cssClass: cls.FLAT, isPrimary: true });\n cancelBtn.appendTo('#' + this.parentID + 'cancelBtn');\n if (cancelBtn.element) {\n cancelBtn.element.onclick = this.cancelBtnClick.bind(this);\n }\n if (this.parent.\n dialogRenderer.parentElement.querySelector('.' + cls.FORMULA) !== null && this.parent.isAdaptive) {\n var okBtn = new Button({ cssClass: cls.FLAT + ' ' + cls.OUTLINE_CLASS, isPrimary: true });\n okBtn.appendTo('#' + this.parentID + 'okBtn');\n this.inputObj = new MaskedTextBox({\n placeholder: this.parent.localeObj.getConstant('fieldName')\n });\n this.inputObj.appendTo('#' + this.parentID + 'ddlelement');\n if (this.formulaText !== null && this.parent.\n dialogRenderer.parentElement.querySelector('#' + this.parentID + 'droppable') !== null) {\n var drop = this.parent.\n dialogRenderer.parentElement.querySelector('#' + this.parentID + 'droppable');\n drop.value = this.formulaText;\n }\n if (this.fieldText !== null && this.parent.\n dialogRenderer.parentElement.querySelector('.' + cls.CALCINPUT) !== null) {\n this.parent.\n dialogRenderer.parentElement.querySelector('.' + cls.CALCINPUT).value = this.fieldText;\n this.inputObj.value = this.fieldText;\n }\n if (okBtn.element) {\n okBtn.element.onclick = this.applyFormula.bind(this);\n }\n }\n else if (this.parent.isAdaptive) {\n var accordion = new Accordion({\n items: this.getAccordionData(this.parent),\n enableRtl: this.parent.enableRtl,\n expanding: function (args) {\n if (args.element.querySelectorAll('.e-radio-wrapper').length === 0) {\n Object.keys(_this.parent.engineModule.fieldList).forEach(function (key) {\n var type = [SUM, COUNT, AVG, MIN, MAX];\n var radiobutton;\n if (key === args.element.querySelector('[data-field').getAttribute('data-field')) {\n for (var i = 0; i < 5; i++) {\n radiobutton = new RadioButton({\n label: type[i],\n name: AGRTYPE + key,\n change: function (args) {\n var type = args.event.target.parentElement.querySelector('.e-label').\n innerText;\n var field = args.event.target.closest('.e-acrdn-item').\n querySelector('[data-field').getAttribute('data-caption');\n args.event.target.\n closest('.e-acrdn-item').querySelector('.e-label').\n innerText = field + ' (' + type + ')';\n args.event.target.closest('.e-acrdn-item').\n querySelector('[data-type').setAttribute('data-type', type);\n },\n });\n radiobutton.appendTo('#' + _this.parentID + 'radio' + key + type[i]);\n }\n }\n });\n }\n },\n });\n var addBtn = new Button({ cssClass: cls.FLAT, isPrimary: true });\n addBtn.appendTo('#' + this.parentID + 'addBtn');\n accordion.appendTo('#' + this.parentID + 'accordDiv');\n Object.keys(this.parent.engineModule.fieldList).forEach(function (key, index) {\n var type = null;\n if (_this.parent.engineModule.fieldList[key].type === 'string' ||\n _this.parent.engineModule.fieldList[key].type === 'include' ||\n _this.parent.engineModule.fieldList[key].type === 'exclude') {\n type = COUNT;\n }\n else {\n type = _this.parent.engineModule.fieldList[key].aggregateType !== undefined ?\n _this.parent.engineModule.fieldList[key].aggregateType : SUM;\n }\n var checkbox = new CheckBox({\n label: _this.parent.engineModule.fieldList[key].caption + ' (' + type + ')'\n });\n checkbox.appendTo('#' + _this.parentID + '_' + index);\n document.querySelector('#' + _this.parentID + '_' + index).setAttribute('data-field', key);\n document.querySelector('#' + _this.parentID + '_' + index).setAttribute('data-type', type);\n });\n if (addBtn.element) {\n addBtn.element.onclick = this.addBtnClick.bind(this);\n }\n }\n };\n /**\n * Trigger while click cancel button.\n * @returns void\n */\n CalculatedField.prototype.cancelBtnClick = function () {\n this.renderMobileLayout(this.parent.dialogRenderer.adaptiveElement);\n };\n /**\n * Trigger while click add button.\n * @returns void\n */\n CalculatedField.prototype.addBtnClick = function () {\n var node = document.querySelectorAll('.e-accordion .e-check');\n var fieldText = '';\n var field = null;\n var type = null;\n for (var i = 0; i < node.length; i++) {\n field = node[i].parentElement.querySelector('[data-field]').getAttribute('data-field');\n type = node[i].parentElement.querySelector('[data-field]').getAttribute('data-type');\n if (type.indexOf(CALC) === -1) {\n fieldText = fieldText + ('\"' + type + '(' + field + ')' + '\"');\n }\n else {\n for (var j = 0; j < this.parent.dataSource.calculatedFieldSettings.length; j++) {\n if (this.parent.dataSource.calculatedFieldSettings[j].name === field) {\n fieldText = fieldText + this.parent.dataSource.calculatedFieldSettings[j].formula;\n break;\n }\n }\n }\n }\n this.formulaText = this.formulaText !== null ? (this.formulaText + fieldText) : fieldText;\n this.renderMobileLayout(this.parent.dialogRenderer.adaptiveElement);\n };\n /**\n * To create calculated field dialog elements.\n * @returns void\n * @hidden\n */\n CalculatedField.prototype.createCalculatedFieldDialog = function () {\n if (this.parent.isAdaptive && this.parent.getModuleName() === 'pivotfieldlist') {\n this.renderAdaptiveLayout();\n }\n else if (!this.parent.isAdaptive) {\n this.renderDialogLayout();\n this.dialog.element.style.top = parseInt(this.dialog.element.style.top, 10) < 0 ? '0px' : this.dialog.element.style.top;\n }\n };\n /**\n * To create calculated field desktop layout.\n * @returns void\n */\n CalculatedField.prototype.renderDialogLayout = function () {\n this.newFields = extend([], this.parent.dataSource.calculatedFieldSettings, null, true);\n this.createDialog();\n this.dialog.content = this.renderDialogElements();\n this.dialog.refresh();\n this.inputObj = new MaskedTextBox({\n placeholder: this.parent.localeObj.getConstant('fieldName')\n });\n this.inputObj.appendTo('#' + this.parentID + 'ddlelement');\n this.createTreeView();\n this.createMenu();\n this.droppable = new Droppable(this.dialog.element.querySelector('#' + this.parentID + 'droppable'));\n this.keyboardEvents = new KeyboardEvents(this.parent.calculatedFieldModule.dialog.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: { moveRight: 'rightarrow', enter: 'enter' },\n eventName: 'keydown'\n });\n };\n /**\n * Creates the error dialog for the unexpected action done.\n * @method createConfirmDialog\n * @return {void}\n * @hidden\n */\n CalculatedField.prototype.createConfirmDialog = function (title, description) {\n var errorDialog = createElement('div', {\n id: this.parentID + '_ErrorDialog',\n className: cls.ERROR_DIALOG_CLASS\n });\n this.parent.element.appendChild(errorDialog);\n this.confirmPopUp = new Dialog({\n animationSettings: { effect: 'Fade' },\n allowDragging: false,\n showCloseIcon: true,\n enableRtl: this.parent.enableRtl,\n width: 'auto',\n height: 'auto',\n position: { X: 'center', Y: 'center' },\n buttons: [\n {\n click: this.replaceFormula.bind(this),\n buttonModel: {\n cssClass: cls.OK_BUTTON_CLASS + ' ' + cls.OUTLINE_CLASS,\n content: this.parent.localeObj.getConstant('ok'), isPrimary: true\n }\n },\n {\n click: this.removeErrorDialog.bind(this),\n buttonModel: {\n cssClass: cls.CANCEL_BUTTON_CLASS,\n content: this.parent.localeObj.getConstant('cancel'), isPrimary: true\n }\n }\n ],\n header: title,\n content: description,\n isModal: true,\n visible: true,\n closeOnEscape: true,\n target: document.body,\n close: this.removeErrorDialog.bind(this)\n });\n this.confirmPopUp.appendTo(errorDialog);\n };\n CalculatedField.prototype.replaceFormula = function () {\n var report = this.parent.dataSource;\n var dropField = document.querySelector('#' + this.parentID + 'droppable');\n for (var i = 0; i < report.values.length; i++) {\n if (report.values[i].type === CALC && report.values[i].name === this.inputObj.value) {\n for (var j = 0; j < report.calculatedFieldSettings.length; j++) {\n if (report.calculatedFieldSettings[j].name === this.inputObj.value) {\n report.calculatedFieldSettings[j].formula = dropField.value;\n }\n }\n }\n }\n this.addFormula(report, this.inputObj.value);\n this.removeErrorDialog();\n };\n CalculatedField.prototype.removeErrorDialog = function () {\n if (document.getElementById(this.parentID + '_ErrorDialog')) {\n remove(document.getElementById(this.parentID + '_ErrorDialog').parentElement);\n }\n };\n /**\n * To add event listener.\n * @returns void\n * @hidden\n */\n CalculatedField.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.initCalculatedField, this.createCalculatedFieldDialog, this);\n };\n /**\n * To remove event listener.\n * @returns void\n * @hidden\n */\n CalculatedField.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initCalculatedField, this.createCalculatedFieldDialog);\n };\n /**\n * To destroy the calculated field dialog\n * @returns void\n * @hidden\n */\n CalculatedField.prototype.destroy = function () {\n this.removeEventListener();\n };\n return CalculatedField;\n}());\nexport { CalculatedField };\n","import * as events from '../../common/base/constant';\nimport * as cls from '../base/css-constant';\nimport { PivotFieldList } from '../../field-list/base/field-list';\nimport { createElement, setStyleAttribute, formatUnit, prepend, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { CalculatedField } from '../../common/calculatedfield/calculated-field';\nPivotFieldList.Inject(CalculatedField);\n/**\n * Module for Field List rendering\n */\n/** @hidden */\nvar FieldList = /** @class */ (function () {\n /** Constructor for Field List module */\n function FieldList(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n * @private\n */\n FieldList.prototype.getModuleName = function () {\n return 'fieldlist';\n };\n FieldList.prototype.initiateModule = function () {\n this.element = createElement('div', {\n id: this.parent.element.id + '_PivotFieldList',\n styles: 'height:0;width:' + this.parent.element.style.width\n });\n this.parent.element.parentElement.setAttribute('id', 'ContainerWrapper');\n this.parent.element.parentElement.appendChild(this.element);\n this.parent.element.parentElement.appendChild(this.parent.element);\n this.parent.pivotFieldListModule = new PivotFieldList({\n dataSource: {\n rows: [],\n columns: [],\n values: [],\n filters: []\n },\n renderMode: 'Popup',\n allowCalculatedField: this.parent.allowCalculatedField,\n enableRtl: this.parent.enableRtl,\n locale: this.parent.locale,\n target: this.parent.element.parentElement\n });\n this.parent.pivotFieldListModule.appendTo('#' + this.element.id);\n };\n FieldList.prototype.updateControl = function () {\n var _this = this;\n if (this.element) {\n prepend([this.element], this.parent.element);\n if (this.parent.grid && this.parent.showGroupingBar && this.parent.groupingBarModule) {\n clearTimeout(this.timeOutObj);\n this.timeOutObj = setTimeout(function () {\n if (_this.parent.grid && _this.parent.grid.element) {\n setStyleAttribute(_this.element.querySelector('.' + cls.TOGGLE_FIELD_LIST_CLASS), {\n left: formatUnit(_this.parent.enableRtl ?\n -Math.abs((_this.parent.isAdaptive ? 500 : _this.parent.grid.element.offsetWidth) -\n _this.element.querySelector('.' + cls.TOGGLE_FIELD_LIST_CLASS).offsetWidth) :\n (_this.parent.isAdaptive ? 500 : _this.parent.grid.element.offsetWidth) -\n _this.element.querySelector('.' + cls.TOGGLE_FIELD_LIST_CLASS).offsetWidth)\n });\n if (_this.parent.enableRtl) {\n addClass([_this.element.querySelector('.' + cls.TOGGLE_FIELD_LIST_CLASS)], 'e-fieldlist-left');\n }\n else {\n removeClass([_this.element.querySelector('.' + cls.TOGGLE_FIELD_LIST_CLASS)], 'e-fieldlist-left');\n }\n }\n });\n }\n else {\n if (this.parent.enableRtl) {\n removeClass([this.element.querySelector('.' + cls.TOGGLE_FIELD_LIST_CLASS)], 'e-fieldlist-left');\n }\n else {\n addClass([this.element.querySelector('.' + cls.TOGGLE_FIELD_LIST_CLASS)], 'e-fieldlist-left');\n }\n }\n setStyleAttribute(this.element, {\n width: formatUnit(this.parent.element.offsetWidth)\n });\n }\n this.parent.pivotFieldListModule.update(this.parent);\n };\n /**\n * @hidden\n */\n FieldList.prototype.addEventListener = function () {\n this.handlers = {\n load: this.initiateModule,\n update: this.updateControl\n };\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.initSubComponent, this.handlers.load, this);\n this.parent.on(events.uiUpdate, this.handlers.update, this);\n };\n /**\n * @hidden\n */\n FieldList.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initSubComponent, this.handlers.load);\n this.parent.off(events.uiUpdate, this.handlers.update);\n };\n /**\n * To destroy the Field List\n * @return {void}\n * @hidden\n */\n FieldList.prototype.destroy = function () {\n this.removeEventListener();\n this.parent.pivotFieldListModule.destroy();\n };\n return FieldList;\n}());\nexport { FieldList };\n","import * as events from '../../common/base/constant';\nimport { PivotCommon } from '../../common/base/pivot-common';\nimport { Browser } from '@syncfusion/ej2-base';\n/**\n * Module for PivotCommon rendering\n */\n/** @hidden */\nvar Common = /** @class */ (function () {\n /** Constructor for Common module */\n function Common(parent) {\n this.parent = parent;\n this.parent.commonModule = this;\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Common.prototype.getModuleName = function () {\n return 'common';\n };\n Common.prototype.initiateCommonModule = function () {\n var args = {\n pivotEngine: this.parent.engineModule,\n dataSource: this.parent.dataSource,\n id: this.parent.element.id,\n element: this.parent.element,\n moduleName: this.parent.getModuleName(),\n enableRtl: this.parent.enableRtl,\n isAdaptive: Browser.isDevice,\n renderMode: 'Popup',\n localeObj: this.parent.localeObj\n };\n this.parent.pivotCommon = new PivotCommon(args);\n };\n /**\n * @hidden\n */\n Common.prototype.addEventListener = function () {\n this.handlers = {\n load: this.initiateCommonModule\n };\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.uiUpdate, this.handlers.load, this);\n };\n /**\n * @hidden\n */\n Common.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.uiUpdate, this.handlers.load);\n };\n /**\n * To destroy the groupingbar\n * @return {void}\n * @hidden\n */\n Common.prototype.destroy = function () {\n this.removeEventListener();\n this.parent.pivotCommon.destroy();\n };\n return Common;\n}());\nexport { Common };\n","import { PivotButton } from '../actions/pivot-button';\nimport * as events from '../../common/base/constant';\nimport * as cls from '../../common/base/css-constant';\nimport { createElement, prepend } from '@syncfusion/ej2-base';\n/**\n * Module to render Axis Fields\n */\n/** @hidden */\nvar AxisFields = /** @class */ (function () {\n /** Constructor for render module */\n function AxisFields(parent) {\n this.parent = parent;\n }\n /**\n * Initialize the pivot button rendering\n * @returns void\n * @private\n */\n AxisFields.prototype.render = function () {\n this.pivotButton = new PivotButton(this.parent);\n this.createPivotButtons();\n var pivotButtons = [].slice.call(this.parent.element.querySelector('.' + cls.GROUP_ROW_CLASS)\n .querySelectorAll('.' + cls.PIVOT_BUTTON_WRAPPER_CLASS));\n var vlen = pivotButtons.length;\n for (var j = 0; j < vlen; j++) {\n var indentWidth = 24;\n var indentDiv = createElement('span', {\n className: 'e-indent-div',\n styles: 'width:' + j * indentWidth + 'px'\n });\n prepend([indentDiv], pivotButtons[j]);\n }\n };\n AxisFields.prototype.createPivotButtons = function () {\n var fields = [this.parent.dataSource.rows, this.parent.dataSource.columns, this.parent.dataSource.values, this.parent.dataSource.filters];\n this.parent.element.querySelector('.' + cls.GROUP_ROW_CLASS).innerHTML = '';\n this.parent.element.querySelector('.' + cls.GROUP_COLUMN_CLASS).innerHTML = '';\n this.parent.element.querySelector('.' + cls.GROUP_VALUE_CLASS).innerHTML = '';\n this.parent.element.querySelector('.' + cls.GROUP_FILTER_CLASS).innerHTML = '';\n var axis = ['rows', 'columns', 'values', 'filters'];\n var count = axis.length;\n for (var i = 0, lnt = fields.length; i < lnt; i++) {\n if (fields[i]) {\n var args = {\n field: fields[i],\n axis: axis[i].toString()\n };\n this.parent.notify(events.pivotButtonUpdate, args);\n }\n }\n };\n return AxisFields;\n}());\nexport { AxisFields };\n","import { createElement, prepend, remove, Droppable, setStyleAttribute, removeClass } from '@syncfusion/ej2-base';\nimport { EventHandler, Touch, closest, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { addClass, formatUnit } from '@syncfusion/ej2-base';\nimport { PivotView } from '../../pivotview/base/pivotview';\nimport { Common } from '../actions/common';\nimport * as events from '../../common/base/constant';\nimport * as cls from '../../common/base/css-constant';\nimport { AxisFields } from './axis-field-renderer';\nPivotView.Inject(Common);\n/**\n * Module for GroupingBar rendering\n */\n/** @hidden */\nvar GroupingBar = /** @class */ (function () {\n /** Constructor for GroupingBar module */\n function GroupingBar(parent) {\n this.parent = parent;\n this.parent.groupingBarModule = this;\n this.addEventListener();\n this.parent.axisFieldModule = new AxisFields(this.parent);\n this.touchObj = new Touch(this.parent.element, {\n tapHold: this.tapHoldHandler.bind(this)\n });\n }\n /**\n * For internal use only - Get the module name.\n * @private\n */\n GroupingBar.prototype.getModuleName = function () {\n return 'grouping';\n };\n GroupingBar.prototype.renderLayout = function () {\n this.groupingTable = createElement('div', { className: cls.GROUPING_BAR_CLASS });\n this.leftAxisPanel = createElement('div', { className: cls.LEFT_AXIS_PANEL_CLASS });\n this.rightAxisPanel = createElement('div', { className: cls.RIGHT_AXIS_PANEL_CLASS });\n var rowAxisPanel = createElement('div', { className: cls.AXIS_ROW_CLASS + ' ' + cls.AXIS_ICON_CLASS + 'wrapper' });\n var columnAxisPanel = createElement('div', {\n className: cls.AXIS_COLUMN_CLASS + ' ' + cls.AXIS_ICON_CLASS + 'wrapper'\n });\n var valueAxisPanel = createElement('div', {\n className: cls.AXIS_VALUE_CLASS + ' ' + cls.AXIS_ICON_CLASS + 'wrapper'\n });\n var filterAxisPanel = createElement('div', {\n className: cls.AXIS_FILTER_CLASS + ' ' + cls.AXIS_ICON_CLASS + 'wrapper'\n });\n this.rowPanel = createElement('div', { className: cls.GROUP_ROW_CLASS + ' ' + cls.ROW_AXIS_CLASS });\n this.columnPanel = createElement('div', { className: cls.GROUP_COLUMN_CLASS + ' ' + cls.COLUMN_AXIS_CLASS });\n this.valuePanel = createElement('div', { className: cls.GROUP_VALUE_CLASS + ' ' + cls.VALUE_AXIS_CLASS });\n this.filterPanel = createElement('div', { className: cls.GROUP_FILTER_CLASS + ' ' + cls.FILTER_AXIS_CLASS });\n rowAxisPanel.appendChild(this.rowPanel);\n columnAxisPanel.appendChild(this.columnPanel);\n valueAxisPanel.appendChild(this.valuePanel);\n filterAxisPanel.appendChild(this.filterPanel);\n this.rowAxisPanel = rowAxisPanel;\n this.columnAxisPanel = columnAxisPanel;\n this.valueAxisPanel = valueAxisPanel;\n this.filterAxisPanel = filterAxisPanel;\n this.leftAxisPanel.appendChild(valueAxisPanel);\n this.leftAxisPanel.appendChild(rowAxisPanel);\n this.rightAxisPanel.appendChild(filterAxisPanel);\n this.rightAxisPanel.appendChild(columnAxisPanel);\n this.groupingTable.appendChild(this.leftAxisPanel);\n this.groupingTable.appendChild(this.rightAxisPanel);\n var axisPanels = [this.rowPanel, this.columnPanel, this.valuePanel, this.filterPanel];\n for (var _i = 0, axisPanels_1 = axisPanels; _i < axisPanels_1.length; _i++) {\n var element = axisPanels_1[_i];\n new Droppable(element, {});\n this.unWireEvent(element);\n this.wireEvent(element);\n }\n };\n GroupingBar.prototype.appendToElement = function () {\n if (this.parent.element.querySelector('.' + cls.GROUPING_BAR_CLASS)) {\n remove(this.parent.element.querySelector('.' + cls.GROUPING_BAR_CLASS));\n }\n var colGroupElement = this.parent.element.querySelector('.e-frozenheader').querySelector('colgroup').children[0];\n this.filterPanel.removeAttribute('style');\n this.columnPanel.removeAttribute('style');\n this.rowPanel.removeAttribute('style');\n this.filterPanel.removeAttribute('style');\n var emptyRowCount = Object.keys(this.parent.engineModule.headerContent).length;\n if (emptyRowCount) {\n var emptyHeader = this.parent.element.querySelector('.e-frozenheader').querySelector('.e-columnheader');\n addClass([emptyHeader], 'e-row');\n emptyHeader.removeAttribute('style');\n addClass([emptyHeader.querySelector('.e-headercell')], 'e-group-row');\n emptyHeader.querySelector('.e-group-row').appendChild(this.rowAxisPanel);\n emptyHeader.querySelector('.e-group-row').querySelector('.e-headercelldiv').style.display = 'none';\n emptyHeader.querySelector('.e-group-row').querySelector('.e-sortfilterdiv').style.display = 'none';\n }\n prepend([this.groupingTable], this.parent.element);\n setStyleAttribute(this.groupingTable, { width: formatUnit(this.parent.isAdaptive ? 500 : this.parent.grid.width) });\n this.parent.axisFieldModule.render();\n // this.setGridRowWidth(colGroupElement);\n var rightAxisPanelWidth = formatUnit(this.groupingTable.offsetWidth - parseInt(colGroupElement.style.width, 10));\n setStyleAttribute(this.valuePanel, { width: colGroupElement.style.width });\n setStyleAttribute(this.rightAxisPanel, { width: rightAxisPanelWidth });\n var rightPanelHeight = (this.valuePanel.offsetHeight / 2);\n if (rightPanelHeight > this.columnPanel.offsetHeight) {\n setStyleAttribute(this.filterPanel, { height: formatUnit(rightPanelHeight) });\n setStyleAttribute(this.columnPanel, { height: formatUnit(rightPanelHeight + 1) });\n }\n var topLeftHeight = this.parent.element.querySelector('.e-headercontent').offsetHeight;\n setStyleAttribute(this.rowPanel, {\n height: topLeftHeight + 'px'\n });\n this.parent.element.querySelector('.e-frozenheader').querySelector('.e-rhandler').style.height =\n topLeftHeight + 'px';\n var colRows = [].slice.call(this.parent.element.querySelector('.e-movableheader').querySelector('thead').querySelectorAll('tr'));\n var columnRows = colRows.filter(function (trCell) {\n return (trCell.childNodes.length > 0);\n });\n var colHeight = topLeftHeight / columnRows.length;\n for (var _i = 0, columnRows_1 = columnRows; _i < columnRows_1.length; _i++) {\n var element = columnRows_1[_i];\n setStyleAttribute(element, { 'height': colHeight + 'px' });\n var rowHeader = [].slice.call(element.querySelectorAll('.e-rhandler'));\n for (var _a = 0, rowHeader_1 = rowHeader; _a < rowHeader_1.length; _a++) {\n var rhElement = rowHeader_1[_a];\n setStyleAttribute(rhElement, { 'height': colHeight + 'px' });\n }\n }\n };\n /**\n * @hidden\n */\n GroupingBar.prototype.refreshUI = function () {\n var _this = this;\n setStyleAttribute(this.groupingTable, { width: formatUnit(this.parent.isAdaptive ? 500 : this.parent.grid.width) });\n var colGroupElement = this.parent.element.querySelector('.e-frozenheader').querySelector('colgroup').children[0];\n var rightAxisWidth = formatUnit(this.groupingTable.offsetWidth - parseInt(colGroupElement.style.width, 10));\n setStyleAttribute(this.valuePanel, { width: colGroupElement.style.width });\n setStyleAttribute(this.rightAxisPanel, { width: rightAxisWidth });\n if (this.parent.showFieldList && this.parent.pivotFieldListModule && this.parent.pivotFieldListModule.element) {\n var element_1 = this.parent.pivotFieldListModule.element;\n clearTimeout(this.timeOutObj);\n this.timeOutObj = setTimeout(function () {\n setStyleAttribute(element_1.querySelector('.' + cls.TOGGLE_FIELD_LIST_CLASS), {\n left: formatUnit(_this.parent.enableRtl ?\n -Math.abs((_this.parent.isAdaptive ? 500 : _this.parent.grid.element.offsetWidth) -\n element_1.querySelector('.' + cls.TOGGLE_FIELD_LIST_CLASS).offsetWidth) :\n (_this.parent.isAdaptive ? 500 : _this.parent.grid.element.offsetWidth) -\n element_1.querySelector('.' + cls.TOGGLE_FIELD_LIST_CLASS).offsetWidth)\n });\n });\n }\n if (!this.parent.grid.element.querySelector('.e-group-row')) {\n var emptyRowHeader = this.parent.element.querySelector('.e-frozenheader').querySelector('.e-columnheader');\n addClass([emptyRowHeader], 'e-row');\n addClass([emptyRowHeader.querySelector('.e-headercell')], 'e-group-row');\n emptyRowHeader.querySelector('.e-group-row').appendChild(this.rowAxisPanel);\n setStyleAttribute(emptyRowHeader.querySelector('.e-group-row').querySelector('.e-headercelldiv'), {\n display: 'none'\n });\n setStyleAttribute(emptyRowHeader.querySelector('.e-group-row').querySelector('.e-sortfilterdiv'), {\n display: 'none'\n });\n var groupHeight = this.parent.element.querySelector('.e-headercontent').offsetHeight;\n setStyleAttribute(this.rowPanel, {\n height: groupHeight + 'px'\n });\n this.parent.element.querySelector('.e-frozenheader').querySelector('.e-rhandler').style.height =\n groupHeight + 'px';\n var colRowElements = [].slice.call(this.parent.element.querySelector('.e-movableheader').querySelector('thead').querySelectorAll('tr'));\n var columnRows = colRowElements.filter(function (trCell) {\n return (trCell.childNodes.length > 0);\n });\n var colHeight = groupHeight / columnRows.length;\n for (var _i = 0, columnRows_2 = columnRows; _i < columnRows_2.length; _i++) {\n var element = columnRows_2[_i];\n setStyleAttribute(element, { 'height': colHeight + 'px' });\n var rowHeader = [].slice.call(element.querySelectorAll('.e-rhandler'));\n for (var _a = 0, rowHeader_2 = rowHeader; _a < rowHeader_2.length; _a++) {\n var handlerElement = rowHeader_2[_a];\n setStyleAttribute(handlerElement, { 'height': colHeight + 'px' });\n }\n }\n }\n };\n // private setGridRowWidth(colGroupElement: HTMLElement): void {\n // if (this.rowPanel.querySelector('.' + cls.PIVOT_BUTTON_CLASS) && !this.parent.isAdaptive) {\n // let pivotButtons: HTMLElement[] = [].slice.call(this.rowPanel.querySelectorAll('.' + cls.PIVOT_BUTTON_WRAPPER_CLASS));\n // let lastButton: HTMLElement = pivotButtons[pivotButtons.length - 1];\n // let buttonWidth: string = formatUnit((lastButton.querySelector('.' + cls.PIVOT_BUTTON_CLASS) as HTMLElement).offsetWidth +\n // (lastButton.querySelector('.e-indent-div') as HTMLElement).offsetWidth + 20);\n // let rowHeaderTable: HTMLElement = this.parent.element.querySelector('.e-frozenheader').querySelector('table') as HTMLElement;\n // let rowContentTable: HTMLElement = \n // this.parent.element.querySelector('.e-frozencontent').querySelector('table') as HTMLElement;\n // let rowContent: HTMLElement =\n // this.parent.element.querySelector('.e-frozencontent').querySelector('colgroup').children[0] as HTMLElement;\n // rowHeaderTable.removeAttribute('style');\n // rowContentTable.removeAttribute('style');\n // colGroupElement.style.width = buttonWidth;\n // rowContent.style.width = buttonWidth;\n // rowHeaderTable.style.width = buttonWidth;\n // rowContentTable.style.width = buttonWidth;\n // setStyleAttribute(rowHeaderTable, { 'width': buttonWidth });\n // setStyleAttribute(rowContentTable, { 'width': buttonWidth });\n // }\n // }\n GroupingBar.prototype.wireEvent = function (element) {\n EventHandler.add(element, 'mouseover', this.dropIndicatorUpdate, this);\n EventHandler.add(element, 'mouseleave', this.dropIndicatorUpdate, this);\n };\n GroupingBar.prototype.unWireEvent = function (element) {\n EventHandler.remove(element, 'mouseover', this.dropIndicatorUpdate);\n EventHandler.remove(element, 'mouseleave', this.dropIndicatorUpdate);\n };\n GroupingBar.prototype.dropIndicatorUpdate = function (e) {\n if ((this.parent.isDragging && e.target.classList.contains(cls.DROPPABLE_CLASS) && e.type === 'mouseover') ||\n e.type === 'mouseleave') {\n removeClass([].slice.call(this.parent.element.querySelectorAll('.' + cls.DROP_INDICATOR_CLASS)), cls.INDICATOR_HOVER_CLASS);\n removeClass([].slice.call(this.parent.element.querySelectorAll('.' + cls.DROP_INDICATOR_CLASS + '-last')), cls.INDICATOR_HOVER_CLASS);\n }\n };\n GroupingBar.prototype.tapHoldHandler = function (e) {\n var target = closest(e.originalEvent.target, '.' + cls.PIVOT_BUTTON_CLASS);\n if (!isNullOrUndefined(target) && this.parent.isAdaptive) {\n var pos = target.getBoundingClientRect();\n this.parent.contextMenuModule.fieldElement = target;\n this.parent.contextMenuModule.menuObj.open(pos.top, pos.left);\n return;\n }\n };\n /**\n * @hidden\n */\n GroupingBar.prototype.addEventListener = function () {\n this.handlers = {\n load: this.renderLayout,\n end: this.appendToElement,\n };\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.initSubComponent, this.handlers.load, this); //For initial rendering\n this.parent.on(events.uiUpdate, this.handlers.end, this);\n };\n /**\n * @hidden\n */\n GroupingBar.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initSubComponent, this.handlers.end);\n this.parent.off(events.uiUpdate, this.handlers.load);\n };\n /**\n * To destroy the groupingbar\n * @return {void}\n * @hidden\n */\n GroupingBar.prototype.destroy = function () {\n this.removeEventListener();\n this.parent.pivotButtonModule.destroy();\n this.touchObj.destroy();\n };\n return GroupingBar;\n}());\nexport { GroupingBar };\n","import * as index from '@syncfusion/ej2-pivotview';\nindex.PivotView.Inject( index.GroupingBar,index.FieldList,index.CalculatedField);\nexport * from '@syncfusion/ej2-pivotview';\n","/**\n * Defines types of Render\n * @hidden\n */\nexport var RenderType;\n(function (RenderType) {\n /** Defines RenderType as Toolbar */\n RenderType[RenderType[\"Toolbar\"] = 0] = \"Toolbar\";\n /** Defines RenderType as Content */\n RenderType[RenderType[\"Content\"] = 1] = \"Content\";\n /** Defines RenderType as Content */\n RenderType[RenderType[\"Popup\"] = 2] = \"Popup\";\n /** Defines RenderType as LinkToolbar */\n RenderType[RenderType[\"LinkToolbar\"] = 3] = \"LinkToolbar\";\n /** Defines RenderType as TextToolbar */\n RenderType[RenderType[\"TextToolbar\"] = 4] = \"TextToolbar\";\n /** Defines RenderType as ImageToolbar */\n RenderType[RenderType[\"ImageToolbar\"] = 5] = \"ImageToolbar\";\n /** Defines RenderType as ImageToolbar */\n RenderType[RenderType[\"InlineToolbar\"] = 6] = \"InlineToolbar\";\n})(RenderType || (RenderType = {}));\nexport var ToolbarType;\n(function (ToolbarType) {\n /** Defines ToolbarType as Standard */\n ToolbarType[\"Expand\"] = \"Expand\";\n /** Defines ToolbarType as MultiRow */\n ToolbarType[\"MultiRow\"] = \"MultiRow\";\n})(ToolbarType || (ToolbarType = {}));\n","/** @hidden */\nexport var created = 'create';\n/** @hidden */\nexport var destroyed = 'destroy';\n/** @hidden */\nexport var load = 'load';\n/**\n * Specifies RichTextEditor internal events\n */\n/** @hidden */\nexport var initialLoad = 'initial-load';\n/** @hidden */\nexport var initialEnd = 'initial-end';\n/** @hidden */\nexport var iframeMouseDown = 'iframe-click';\n/** @hidden */\nexport var destroy = 'destroy';\n/** @hidden */\nexport var toolbarClick = 'toolbarClick';\n/** @hidden */\nexport var toolbarRefresh = 'toolbar-refresh';\n/** @hidden */\nexport var toolbarUpdated = 'toolbar-updated';\n/** @hidden */\nexport var bindOnEnd = 'bind-on-end';\n/** @hidden */\nexport var renderColorPicker = 'render-color-picker';\n/** @hidden */\nexport var htmlToolbarClick = 'html-toolbar-click';\n/** @hidden */\nexport var markdownToolbarClick = 'markdown-toolbar-click';\n/** @hidden */\nexport var destroyColorPicker = 'destroy-color-picker';\n/** @hidden */\nexport var modelChanged = 'model-changed';\n/** @hidden */\nexport var keyUp = 'keyUp';\n/** @hidden */\nexport var keyDown = 'keyDown';\n/** @hidden */\nexport var mouseUp = 'mouseUp';\n/** @hidden */\nexport var toolbarCreated = 'toolbarCreated';\n/** @hidden */\nexport var toolbarRenderComplete = 'toolbarRenderComplete';\n/** @hidden */\nexport var enableFullScreen = 'enableFullScreen';\n/** @hidden */\nexport var disableFullScreen = 'disableFullScreen';\n/** @hidden */\nexport var dropDownSelect = 'dropDownSelect';\n/** @hidden */\nexport var beforeDropDownItemRender = 'beforeDropDownItemRender';\n/** @hidden */\nexport var execCommandCallBack = 'execCommandCallBack';\n/** @hidden */\nexport var imageToolbarAction = 'image-toolbar-action';\n/** @hidden */\nexport var linkToolbarAction = 'link-toolbar-action';\n/** @hidden */\nexport var undo = 'undo';\n/** @hidden */\nexport var redo = 'redo';\n/** @hidden */\nexport var insertLink = 'insertLink';\n/** @hidden */\nexport var unLink = 'unLink';\n/** @hidden */\nexport var editLink = 'editLink';\n/** @hidden */\nexport var openLink = 'openLink';\n/** @hidden */\nexport var actionBegin = 'actionBegin';\n/** @hidden */\nexport var actionComplete = 'actionComplete';\n/** @hidden */\nexport var actionSuccess = 'actionSuccess';\n/** @hidden */\nexport var popupOpen = 'popupOpen';\n/** @hidden */\nexport var updateToolbarItem = 'updateToolbarItem';\n/** @hidden */\nexport var insertImage = 'insertImage';\n/** @hidden */\nexport var insertCompleted = 'insertCompleted';\n/** @hidden */\nexport var imageLeft = 'justifyLeft';\n/** @hidden */\nexport var imageRight = 'justifyRight';\n/** @hidden */\nexport var imageCenter = 'justifyCenter';\n/** @hidden */\nexport var imageBreak = 'break';\n/** @hidden */\nexport var imageInline = 'inline';\n/** @hidden */\nexport var imageLink = 'insertImgLink';\n/** @hidden */\nexport var imageAlt = 'imgAltText';\n/** @hidden */\nexport var imageDelete = 'delete';\n/** @hidden */\nexport var imageCaption = 'caption';\n/** @hidden */\nexport var imageSize = 'imageSize';\n/** @hidden */\nexport var sourceCode = 'sourceCode';\n/** @hidden */\nexport var updateSource = 'updateSource';\n/** @hidden */\nexport var toolbarOpen = 'toolbarOpen';\n/** @hidden */\nexport var beforeDropDownOpen = 'beforeDropDownOpen';\n/** @hidden */\nexport var selectionSave = 'selection-save';\n/** @hidden */\nexport var selectionRestore = 'selection-restore';\n/** @hidden */\nexport var expandPopupClick = 'expandPopupClick';\n/** @hidden */\nexport var count = 'count';\n/** @hidden */\nexport var contentFocus = 'contentFocus';\n/** @hidden */\nexport var contentBlur = 'contentBlur';\n/** @hidden */\nexport var mouseDown = 'mouseDown';\n/** @hidden */\nexport var sourceCodeMouseDown = 'sourceCodeMouseDown';\n/** @hidden */\nexport var editAreaClick = 'editAreaClick';\n/** @hidden */\nexport var scroll = 'scroll';\n/** @hidden */\nexport var colorPickerChanged = 'colorPickerChanged';\n/** @hidden */\nexport var focusChange = 'focusChange';\n/** @hidden */\nexport var selectAll = 'selectAll';\n/** @hidden */\nexport var selectRange = 'selectRange';\n/** @hidden */\nexport var getSelectedHtml = 'getSelectedHtml';\n/** @hidden */\nexport var renderInlineToolbar = 'renderInlineToolbar';\n","/**\n * RichTextEditor classes defined here.\n */\n/** @hidden */\nexport var CLS_RTE = 'e-richtexteditor';\n/** @hidden */\nexport var CLS_RTL = 'e-rtl';\n/** @hidden */\nexport var CLS_CONTENT = 'e-content';\n/** @hidden */\nexport var CLS_DISABLED = 'e-disabled';\n/** @hidden */\nexport var CLS_SCRIPT_SHEET = 'rte-iframe-script-sheet';\n/** @hidden */\nexport var CLS_STYLE_SHEET = 'rte-iframe-style-sheet';\n/** @hidden */\nexport var CLS_TOOLBAR = 'e-rte-toolbar';\n/** @hidden */\nexport var CLS_TB_FIXED = 'e-rte-tb-fixed';\n/** @hidden */\nexport var CLS_TB_FLOAT = 'e-rte-tb-float';\n/** @hidden */\nexport var CLS_INLINE = 'e-rte-inline';\n/** @hidden */\nexport var CLS_TB_INLINE = 'e-rte-tb-inline';\n/** @hidden */\nexport var CLS_RTE_EXPAND_TB = 'e-rte-tb-expand';\n/** @hidden */\nexport var CLS_FULL_SCREEN = 'e-rte-full-screen';\n/** @hidden */\nexport var CLS_QUICK_TB = 'e-rte-quick-toolbar';\n/** @hidden */\nexport var CLS_POP = 'e-rte-pop';\n/** @hidden */\nexport var CLS_QUICK_POP = 'e-rte-quick-popup';\n/** @hidden */\nexport var CLS_QUICK_DROPDOWN = 'e-quick-dropdown';\n/** @hidden */\nexport var CLS_IMAGE_POP = 'e-rte-image-popup';\n/** @hidden */\nexport var CLS_INLINE_POP = 'e-rte-inline-popup';\n/** @hidden */\nexport var CLS_INLINE_DROPDOWN = 'e-rte-inline-dropdown';\n/** @hidden */\nexport var CLS_DROPDOWN_POPUP = 'e-rte-dropdown-popup';\n/** @hidden */\nexport var CLS_DROPDOWN_ICONS = 'e-rte-dropdown-icons';\n/** @hidden */\nexport var CLS_DROPDOWN_ITEMS = 'e-rte-dropdown-items';\n/** @hidden */\nexport var CLS_DROPDOWN_BTN = 'e-rte-dropdown-btn';\n/** @hidden */\nexport var CLS_RTE_CONTENT = 'e-rte-content';\n/** @hidden */\nexport var CLS_TB_ITEM = 'e-toolbar-item';\n/** @hidden */\nexport var CLS_TB_EXTENDED = 'e-toolbar-extended';\n/** @hidden */\nexport var CLS_TB_WRAP = 'e-toolbar-wrapper';\n/** @hidden */\nexport var CLS_POPUP = 'e-popup';\n/** @hidden */\nexport var CLS_SEPARATOR = 'e-separator';\n/** @hidden */\nexport var CLS_MINIMIZE = 'e-minimize';\n/** @hidden */\nexport var CLS_MAXIMIZE = 'e-maximize';\n/** @hidden */\nexport var CLS_BACK = 'e-back';\n/** @hidden */\nexport var CLS_SHOW = 'e-show';\n/** @hidden */\nexport var CLS_HIDE = 'e-hide';\n/** @hidden */\nexport var CLS_VISIBLE = 'e-visible';\n/** @hidden */\nexport var CLS_FOCUS = 'e-focused';\n/** @hidden */\nexport var CLS_RM_WHITE_SPACE = 'e-remove-white-space';\n/** @hidden */\nexport var CLS_IMGRIGHT = 'e-imgright';\n/** @hidden */\nexport var CLS_IMGLEFT = 'e-imgleft';\n/** @hidden */\nexport var CLS_IMGCENTER = 'e-imgcenter';\n/** @hidden */\nexport var CLS_IMGBREAK = 'e-imgbreak';\n/** @hidden */\nexport var CLS_CAPTION = 'e-img-caption';\n/** @hidden */\nexport var CLS_CAPINLINE = 'e-caption-inline';\n/** @hidden */\nexport var CLS_IMGINLINE = 'e-imginline';\n/** @hidden */\nexport var CLS_COUNT = 'e-rte-character-count';\n/** @hidden */\nexport var CLS_WARNING = 'e-warning';\n/** @hidden */\nexport var CLS_ERROR = 'e-error';\n/** @hidden */\nexport var CLS_ICONS = 'e-icons';\n/** @hidden */\nexport var CLS_ACTIVE = 'e-active';\n/** @hidden */\nexport var CLS_EXPAND_OPEN = 'e-expand-open';\n/** @hidden */\nexport var CLS_RTE_ELEMENTS = 'e-rte-elements';\n/** @hidden */\nexport var CLS_TB_BTN = 'e-tbar-btn';\n/** @hidden */\nexport var CLS_HR_SEPARATOR = 'e-rte-horizontal-separator';\n/** @hidden */\nexport var CLS_TB_IOS_FIX = 'e-tbar-ios-fixed';\n/** @hidden */\nexport var CLS_TB_STATIC = 'e-tb-static';\n/** @hidden */\nexport var CLS_FORMATS_TB_BTN = 'e-formats-tbar-btn';\n/** @hidden */\nexport var CLS_FONT_NAME_TB_BTN = 'e-font-name-tbar-btn';\n/** @hidden */\nexport var CLS_FONT_SIZE_TB_BTN = 'e-font-size-tbar-btn';\n/** @hidden */\nexport var CLS_FONT_COLOR_TARGET = 'e-rte-fontcolor-element';\n/** @hidden */\nexport var CLS_BACKGROUND_COLOR_TARGET = 'e-rte-backgroundcolor-element';\n/** @hidden */\nexport var CLS_COLOR_CONTENT = 'e-rte-color-content';\n/** @hidden */\nexport var CLS_FONT_COLOR_DROPDOWN = 'e-rte-fontcolor-dropdown';\n/** @hidden */\nexport var CLS_BACKGROUND_COLOR_DROPDOWN = 'e-rte-backgroundcolor-dropdown';\n/** @hidden */\nexport var CLS_COLOR_PALETTE = 'e-rte-square-palette';\n/** @hidden */\nexport var CLS_FONT_COLOR_PICKER = 'e-rte-fontcolor-colorpicker';\n/** @hidden */\nexport var CLS_BACKGROUND_COLOR_PICKER = 'e-rte-backgroundcolor-colorpicker';\n/** @hidden */\nexport var CLS_RTE_READONLY = 'e-rte-readonly';\n","// tslint:disable\n/**\n * Export items model\n */\nexport var templateItems = ['alignments', 'formats', 'fontname', 'fontsize', 'fontcolor', 'backgroundcolor', 'align', 'display'];\nexport var tools = {\n 'alignments': {\n 'id': 'Alignments',\n 'icon': 'e-alignments',\n 'tooltip': 'Alignments',\n 'command': 'Alignments',\n 'subCommand': 'Alignments'\n },\n 'justifyleft': {\n 'id': 'JustifyLeft',\n 'icon': 'e-justify-left',\n 'tooltip': 'JustifyLeft',\n 'command': 'Alignments',\n 'subCommand': 'JustifyLeft'\n },\n 'justifycenter': {\n 'id': 'JustifyCenter',\n 'icon': 'e-justify-center',\n 'tooltip': 'JustifyCenter',\n 'command': 'Alignments',\n 'subCommand': 'JustifyCenter'\n },\n 'justifyright': {\n 'id': 'JustifyRight',\n 'icon': 'e-justify-right',\n 'tooltip': 'JustifyRight',\n 'command': 'Alignments',\n 'subCommand': 'JustifyRight'\n },\n 'justifyfull': {\n 'id': 'JustifyFull',\n 'icon': 'e-justify-full',\n 'tooltip': 'JustifyFull',\n 'command': 'Alignments',\n 'subCommand': 'JustifyFull'\n },\n 'fontname': {\n 'id': 'FontName',\n 'icon': 'e-font-name',\n 'tooltip': 'Font Name',\n 'command': 'Font',\n 'subCommand': 'FontName'\n },\n 'fontsize': {\n 'id': 'FontSize',\n 'icon': 'e-font-size',\n 'tooltip': 'Font Size',\n 'command': 'Font',\n 'subCommand': 'FontSize'\n },\n 'fontcolor': {\n 'id': 'FontColor',\n 'icon': 'e-font-color',\n 'tooltip': 'Font Color',\n 'command': 'Font',\n 'subCommand': 'FontColor',\n 'value': '#ff0000ff'\n },\n 'backgroundcolor': {\n 'id': 'BackgroundColor',\n 'icon': 'e-background-color',\n 'tooltip': 'Background Color',\n 'command': 'Font',\n 'subCommand': 'BackgroundColor',\n 'value': '#ffff00ff'\n },\n 'bold': {\n 'id': 'Bold',\n 'icon': 'e-bold',\n 'tooltip': 'Bold',\n 'command': 'Style',\n 'subCommand': 'Bold'\n },\n 'italic': {\n 'id': 'Italic',\n 'icon': 'e-italic',\n 'tooltip': 'Italic',\n 'command': 'Style',\n 'subCommand': 'Italic'\n },\n 'underline': {\n 'id': 'Underline',\n 'icon': 'e-underline',\n 'tooltip': 'Underline',\n 'command': 'Style',\n 'subCommand': 'Underline'\n },\n 'strikethrough': {\n 'id': 'StrikeThrough',\n 'icon': 'e-strike-through',\n 'tooltip': 'StrikeThrough',\n 'command': 'Style',\n 'subCommand': 'StrikeThrough'\n },\n 'clearformat': {\n 'id': 'ClearFormat',\n 'icon': 'e-clear-format',\n 'tooltip': 'Clear Format',\n 'command': 'Clear',\n 'subCommand': 'ClearFormat'\n },\n 'clearall': {\n 'id': 'ClearAll',\n 'icon': 'e-clear-all',\n 'tooltip': 'Clear All',\n 'command': 'Clear',\n 'subCommand': 'ClearAll'\n },\n 'cut': {\n 'id': 'Cut',\n 'icon': 'e-cut',\n 'tooltip': 'Cut',\n 'command': 'ClipBoard',\n 'subCommand': 'Cut'\n },\n 'copy': {\n 'id': 'Copy',\n 'icon': 'e-copy',\n 'tooltip': 'Copy',\n 'command': 'ClipBoard',\n 'subCommand': 'Copy'\n },\n 'paste': {\n 'id': 'Paste',\n 'icon': 'e-paste',\n 'tooltip': 'Paste',\n 'command': 'ClipBoard',\n 'subCommand': 'Paste'\n },\n 'unorderedlist': {\n 'id': 'UnorderedList',\n 'icon': 'e-unorder-list',\n 'tooltip': 'Bulleted List',\n 'command': 'Lists',\n 'subCommand': 'UL'\n },\n 'orderedlist': {\n 'id': 'OrderedList',\n 'icon': 'e-order-list',\n 'tooltip': 'Numbered List',\n 'command': 'Lists',\n 'subCommand': 'OL'\n },\n 'indent': {\n 'id': 'Indent',\n 'icon': 'e-indent',\n 'tooltip': 'Increase Indent',\n 'command': 'Indents',\n 'subCommand': 'Indent'\n },\n 'outdent': {\n 'id': 'Outdent',\n 'icon': 'e-outdent',\n 'tooltip': 'Decrease Indent',\n 'command': 'Indents',\n 'subCommand': 'Outdent'\n },\n 'undo': {\n 'id': 'Undo',\n 'icon': 'e-undo',\n 'tooltip': 'Undo',\n 'command': 'Actions',\n 'subCommand': 'Undo'\n },\n 'redo': {\n 'id': 'Redo',\n 'icon': 'e-redo',\n 'tooltip': 'Redo',\n 'command': 'Actions',\n 'subCommand': 'Redo'\n },\n 'superscript': {\n 'id': 'SuperScript',\n 'icon': 'e-super-script',\n 'tooltip': 'Superscript',\n 'command': 'Effects',\n 'subCommand': 'SuperScript'\n },\n 'subscript': {\n 'id': 'SubScript',\n 'icon': 'e-sub-script',\n 'tooltip': 'Subscript',\n 'command': 'Effects',\n 'subCommand': 'SubScript'\n },\n 'createlink': {\n 'id': 'CreateLink',\n 'icon': 'e-create-link',\n 'tooltip': 'Insert Hyperlink',\n 'command': 'Links',\n 'subCommand': 'CreateLink'\n },\n 'openlink': {\n 'id': 'OpenLink',\n 'icon': 'e-open-link',\n 'tooltip': 'Open Link',\n 'command': 'Links',\n 'subCommand': 'OpenLink'\n },\n 'editlink': {\n 'id': 'EditLink',\n 'icon': 'e-edit-link',\n 'tooltip': 'Edit Link',\n 'command': 'Links',\n 'subCommand': 'EditLink'\n },\n 'removelink': {\n 'id': 'RemoveLink',\n 'icon': 'e-remove-link',\n 'tooltip': 'Remove Link',\n 'command': 'Links',\n 'subCommand': 'RemoveLink'\n },\n 'image': {\n 'id': 'Image',\n 'icon': 'e-image',\n 'tooltip': 'Insert Image',\n 'command': 'Images',\n 'subCommand': 'Image'\n },\n 'replace': {\n 'id': 'Replace',\n 'icon': 'e-replace',\n 'tooltip': 'Replace',\n 'command': 'Images',\n 'subCommand': 'Replace'\n },\n 'align': {\n 'id': 'Align',\n 'icon': 'e-align',\n 'tooltip': 'Align',\n 'command': 'Images',\n 'subCommand': 'Align'\n },\n 'caption': {\n 'id': 'Caption',\n 'icon': 'e-caption',\n 'tooltip': 'Image Caption',\n 'command': 'Images',\n 'subCommand': 'Caption'\n },\n 'remove': {\n 'id': 'Remove',\n 'icon': 'e-remove',\n 'tooltip': 'Remove',\n 'command': 'Images',\n 'subCommand': 'Remove'\n },\n 'openimagelink': {\n 'id': 'OpenImageLink',\n 'icon': 'e-open-link',\n 'tooltip': 'Open Link',\n 'command': 'Images',\n 'subCommand': 'OpenImageLink'\n },\n 'editimagelink': {\n 'id': 'EditIamgeLink',\n 'icon': 'e-edit-link',\n 'tooltip': 'Edit Link',\n 'command': 'Images',\n 'subCommand': 'EditImageLink'\n },\n 'removeimagelink': {\n 'id': 'RemoveImageLink',\n 'icon': 'e-remove-link',\n 'tooltip': 'Remove Link',\n 'command': 'Images',\n 'subCommand': 'RemoveImageLink'\n },\n 'insertlink': {\n 'id': 'InsertLink',\n 'icon': 'e-insert-link',\n 'tooltip': 'Insert Link',\n 'command': 'Images',\n 'subCommand': 'InsertLink'\n },\n 'display': {\n 'id': 'Display',\n 'icon': 'e-display',\n 'tooltip': 'Display',\n 'command': 'Images',\n 'subCommand': 'Display'\n },\n 'alttext': {\n 'id': 'AltText',\n 'icon': 'e-alt-text',\n 'tooltip': 'Alternative Text',\n 'command': 'Images',\n 'subCommand': 'AltText'\n },\n 'dimension': {\n 'id': 'Dimension',\n 'icon': 'e-dimension',\n 'tooltip': 'Change Size',\n 'command': 'Images',\n 'subCommand': 'Dimension'\n },\n 'fullscreen': {\n 'id': 'Maximize',\n 'icon': 'e-maximize',\n 'tooltip': 'Maximize',\n 'command': 'View',\n 'subCommand': 'Maximize'\n },\n 'maximize': {\n 'id': 'Maximize',\n 'icon': 'e-maximize',\n 'tooltip': 'Maximize',\n 'command': 'FullScreen',\n 'subCommand': 'Maximize'\n },\n 'minimize': {\n 'id': 'Minimize',\n 'icon': 'e-minimize',\n 'tooltip': 'Minimize',\n 'command': 'FullScreen',\n 'subCommand': 'Minimize'\n },\n 'lowercase': {\n 'id': 'LowerCase',\n 'icon': 'e-lower-case',\n 'tooltip': 'Lower Case',\n 'command': 'Casing',\n 'subCommand': 'LowerCase'\n },\n 'uppercase': {\n 'id': 'UpperCase',\n 'icon': 'e-upper-case',\n 'tooltip': 'Upper Case',\n 'command': 'Casing',\n 'subCommand': 'UpperCase'\n },\n 'print': {\n 'id': 'Print',\n 'icon': 'e-print',\n 'tooltip': 'Print',\n 'command': 'Print',\n 'subCommand': 'Print'\n },\n 'formats': {\n 'id': 'Formats',\n 'icon': 'e-formats',\n 'tooltip': 'Formats',\n 'command': 'Formats',\n 'subCommand': 'Formats'\n },\n 'sourcecode': {\n 'id': 'SourceCode',\n 'icon': 'e-source-code',\n 'tooltip': 'Source Code',\n 'command': 'SourceCode',\n 'subCommand': 'SourceCode'\n },\n 'preview': {\n 'id': 'Preview',\n 'icon': 'e-preview',\n 'tooltip': 'Preview',\n 'command': 'Preview',\n 'subCommand': 'Preview'\n },\n 'viewside': {\n 'id': 'ViewSide',\n 'icon': 'e-view-side',\n 'tooltip': 'ViewSide',\n 'command': 'ViewSide',\n 'subCommand': 'ViewSide'\n },\n 'insertcode': {\n 'id': 'InsertCode',\n 'icon': 'e-insert-code',\n 'tooltip': 'Insert Code',\n 'command': 'InsertCode',\n 'subCommand': 'InsertCode'\n },\n};\nexport var alignmentItems = [\n { iconCss: 'e-icons e-justify-left', text: 'Align Left', command: 'Alignments', subCommand: 'JustifyLeft' },\n { iconCss: 'e-icons e-justify-center', text: 'Align Center', command: 'Alignments', subCommand: 'JustifyCenter' },\n { iconCss: 'e-icons e-justify-right', text: 'Align Right', command: 'Alignments', subCommand: 'JustifyRight' },\n { iconCss: 'e-icons e-justify-full', text: 'Align Justify', command: 'Alignments', subCommand: 'JustifyFull' }\n];\nexport var imageAlignItems = [\n { iconCss: 'e-icons e-justify-left', command: 'Images', subCommand: 'JustifyLeft' },\n { iconCss: 'e-icons e-justify-center', command: 'Images', subCommand: 'JustifyCenter' },\n { iconCss: 'e-icons e-justify-right', command: 'Images', subCommand: 'JustifyRight' },\n];\nexport var imageDisplayItems = [\n { text: 'Inline', class: 'e-inline', command: 'Images', subCommand: 'Inline' },\n { text: 'Break', class: 'e-break', command: 'Images', subCommand: 'Break' },\n];\n","// tslint:disable\n/**\n * Export default locale\n */\nexport var defaultLocale = {\n 'alignments': 'Alignments',\n 'justifyLeft': 'Align Left',\n 'justifyCenter': 'Align Center',\n 'justifyRight': 'Align Right',\n 'justifyFull': 'Align Justify',\n 'fontName': 'Font Name',\n 'fontSize': 'Font Size',\n 'fontColor': 'Font Color',\n 'backgroundColor': 'Background Color',\n 'bold': 'Bold',\n 'italic': 'Italic',\n 'underline': 'Underline',\n 'strikethrough': 'Strikethrough',\n 'clearFormat': 'Clear Format',\n 'clearAll': 'Clear All',\n 'cut': 'Cut',\n 'copy': 'Copy',\n 'paste': 'Paste',\n 'unorderedList': 'Bulleted List',\n 'orderedList': 'Numbered List',\n 'indent': 'Increase Indent',\n 'outdent': 'Decrease Indent',\n 'undo': 'Undo',\n 'redo': 'Redo',\n 'superscript': 'Superscript',\n 'subscript': 'Subscript',\n 'createLink': 'Insert Hyperlink',\n 'openLink': 'Open Link',\n 'editLink': 'Edit Link',\n 'removeLink': 'Remove Link',\n 'image': 'Insert Image',\n 'replace': 'Replace',\n 'align': 'Align',\n 'caption': 'Image Caption',\n 'remove': 'Remove',\n 'insertLink': 'Insert Link',\n 'display': 'Display',\n 'altText': 'Alternative Text',\n 'dimension': 'Change Size',\n 'fullscreen': 'Maximize',\n 'maximize': 'Maximize',\n 'minimize': 'Minimize',\n 'lowerCase': 'Lower Case',\n 'upperCase': 'Upper Case',\n 'print': 'Print',\n 'formats': 'Formats',\n 'sourcecode': 'Code View',\n 'preview': 'Preview',\n 'viewside': 'ViewSide',\n 'insertCode': 'Insert Code',\n 'linkText': 'Display Text',\n 'linkTooltipLabel': 'Tooltip',\n 'linkWebUrl': 'Web Address',\n 'linkurl': 'http://example.com',\n 'linkOpenInNewWindow': 'Open Link in New Window',\n 'linkHeader': 'Insert Link',\n 'dialogInsert': 'Insert',\n 'dialogCancel': 'Cancel',\n 'dialogUpdate': 'Update',\n 'imageHeader': 'Insert Image',\n 'imageLinkHeader': 'You can also provide a link from the web',\n 'mdimageLink': 'Please provide a URL for your image',\n 'imageUploadMessage': 'Drop image here or browse to upload',\n 'imageDeviceUploadMessage': 'Click here to upload',\n 'imageAlternateText': 'Alternate Text',\n 'alternateHeader': 'Alternative Text',\n 'browse': 'Browse',\n 'imageUrl': 'http://example.com/image.png',\n 'imageCaption': 'Caption',\n 'imageSizeHeader': 'Image Size',\n 'imageHeight': 'Height',\n 'imageWidth': 'Width',\n 'textPlaceholder': 'Enter Text'\n};\nexport var toolsLocale = {\n 'alignments': 'alignments',\n 'justifyleft': 'justifyLeft',\n 'justifycenter': 'justifyCenter',\n 'justifyright': 'justifyRight',\n 'justifyfull': 'justifyFull',\n 'fontname': 'fontName',\n 'fontsize': 'fontSize',\n 'fontcolor': 'fontColor',\n 'backgroundcolor': 'backgroundColor',\n 'bold': 'bold',\n 'italic': 'italic',\n 'underline': 'underline',\n 'strikethrough': 'strikethrough',\n 'clearformat': 'clearFormat',\n 'clearall': 'clearAll',\n 'cut': 'cut',\n 'copy': 'copy',\n 'paste': 'paste',\n 'unorderedlist': 'unorderedList',\n 'orderedlist': 'orderedList',\n 'indent': 'indent',\n 'outdent': 'outdent',\n 'undo': 'undo',\n 'redo': 'redo',\n 'superscript': 'superscript',\n 'subscript': 'subscript',\n 'createlink': 'createLink',\n 'openlink': 'openLink',\n 'editlink': 'editLink',\n 'removelink': 'removeLink',\n 'openimagelink': 'openLink',\n 'editimagelink': 'editLink',\n 'removeimagelink': 'removeLink',\n 'image': 'image',\n 'replace': 'replace',\n 'align': 'align',\n 'caption': 'caption',\n 'remove': 'remove',\n 'insertlink': 'insertLink',\n 'display': 'display',\n 'alttext': 'altText',\n 'dimension': 'dimension',\n 'fullscreen': 'fullscreen',\n 'maximize': 'maximize',\n 'minimize': 'minimize',\n 'lowercase': 'lowerCase',\n 'uppercase': 'upperCase',\n 'print': 'print',\n 'formats': 'formats',\n 'sourcecode': 'sourcecode',\n 'preview': 'preview',\n 'viewside': 'viewside',\n 'insertcode': 'insertCode'\n};\n","import { addClass, Browser, removeClass, EventHandler } from '@syncfusion/ej2-base';\nimport { getInstance, createElement, closest } from '@syncfusion/ej2-base';\nimport { Toolbar } from '@syncfusion/ej2-navigations';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport * as classes from '../base/classes';\nimport * as events from '../base/constant';\nimport { CLS_TOOLBAR, CLS_DROPDOWN_BTN, CLS_RTE_ELEMENTS, CLS_TB_BTN, CLS_INLINE_DROPDOWN, CLS_COLOR_CONTENT, CLS_FONT_COLOR_DROPDOWN, CLS_BACKGROUND_COLOR_DROPDOWN, CLS_COLOR_PALETTE, CLS_FONT_COLOR_PICKER, CLS_BACKGROUND_COLOR_PICKER } from '../base/classes';\nimport { isIDevice } from '../base/util';\nimport { ColorPicker } from '@syncfusion/ej2-inputs';\n/**\n * `Toolbar renderer` module is used to render toolbar in RichTextEditor.\n * @hidden\n */\nvar ToolbarRenderer = /** @class */ (function () {\n /**\n * Constructor for toolbar renderer module\n */\n function ToolbarRenderer(parent) {\n this.parent = parent;\n this.wireEvent();\n }\n ToolbarRenderer.prototype.wireEvent = function () {\n this.parent.on(events.destroy, this.unWireEvent, this);\n };\n ToolbarRenderer.prototype.unWireEvent = function () {\n this.parent.off(events.destroy, this.unWireEvent);\n if (this.popupOverlay) {\n EventHandler.remove(this.popupOverlay, 'click touchmove', this.onPopupOverlay);\n }\n };\n ToolbarRenderer.prototype.toolbarBeforeCreate = function (e) {\n if (this.mode === 'Extended') {\n e.enableCollision = false;\n }\n };\n ToolbarRenderer.prototype.toolbarCreated = function () {\n this.parent.notify(events.toolbarCreated, this);\n };\n ToolbarRenderer.prototype.toolbarClicked = function (args) {\n if (this.parent.readonly || !this.parent.enabled) {\n return;\n }\n this.parent.notify(events.toolbarClick, args);\n this.parent.trigger('toolbarClick', args);\n };\n ToolbarRenderer.prototype.dropDownSelected = function (args) {\n this.parent.notify(events.dropDownSelect, args);\n };\n ToolbarRenderer.prototype.beforeDropDownItemRender = function (args) {\n if (this.parent.readonly || !this.parent.enabled) {\n return;\n }\n this.parent.notify(events.beforeDropDownItemRender, args);\n };\n ToolbarRenderer.prototype.dropDownOpen = function (args) {\n this.parent.notify(events.selectionSave, args);\n };\n ToolbarRenderer.prototype.dropDownClose = function (args) {\n this.parent.notify(events.selectionRestore, args);\n };\n ToolbarRenderer.prototype.renderToolbar = function (args) {\n this.setPanel(args.target);\n this.renderPanel();\n this.mode = args.overflowMode;\n args.rteToolbarObj.toolbarObj = new Toolbar({\n items: args.items,\n width: '100%',\n overflowMode: args.overflowMode,\n beforeCreate: this.toolbarBeforeCreate.bind(this),\n created: this.toolbarCreated.bind(this),\n clicked: this.toolbarClicked.bind(this),\n enablePersistence: args.enablePersistence,\n enableRtl: args.enableRtl\n });\n args.rteToolbarObj.toolbarObj.appendTo(args.target);\n };\n ToolbarRenderer.prototype.renderDropDownButton = function (args) {\n var _this = this;\n var css;\n args.element.classList.add(CLS_DROPDOWN_BTN);\n css = args.cssClass + ' ' + CLS_RTE_ELEMENTS + ' ' + CLS_TB_BTN;\n if (this.parent.inlineMode.enable && Browser.isDevice) {\n css = css + ' ' + CLS_INLINE_DROPDOWN;\n }\n var proxy = this;\n var dropDown = new DropDownButton({\n items: args.items,\n iconCss: args.iconCss,\n cssClass: css,\n content: args.content,\n enablePersistence: this.parent.enablePersistence,\n enableRtl: this.parent.enableRtl,\n select: this.dropDownSelected.bind(this),\n beforeOpen: function (args) {\n if (proxy.parent.readonly || !proxy.parent.enabled) {\n args.cancel = true;\n return;\n }\n for (var index = 0; index < args.element.childNodes.length; index++) {\n var divNode = document.createElement('div');\n divNode.innerHTML = dropDown.content.trim();\n if (divNode.textContent.trim() !== ''\n && args.element.childNodes[index].textContent.trim() === divNode.textContent.trim()) {\n if (!args.element.childNodes[index].classList.contains('e-active')) {\n addClass([args.element.childNodes[index]], 'e-active');\n }\n }\n else {\n removeClass([args.element.childNodes[index]], 'e-active');\n }\n }\n proxy.parent.notify(events.beforeDropDownOpen, args);\n if (Browser.isDevice && !args.element.parentElement.classList.contains(classes.CLS_QUICK_DROPDOWN)) {\n var popupInst = getInstance(args.element.parentElement, Popup);\n popupInst.relateTo = document.body;\n popupInst.position = { X: 0, Y: 0 };\n popupInst.targetType = 'container';\n popupInst.collision = { X: 'none', Y: 'none' };\n popupInst.offsetY = 4;\n _this.setIsModel(args.element.parentElement);\n }\n },\n close: this.dropDownClose.bind(this),\n open: this.dropDownOpen.bind(this),\n beforeItemRender: this.beforeDropDownItemRender.bind(this)\n });\n dropDown.appendTo(args.element);\n args.element.tabIndex = -1;\n return dropDown;\n };\n ToolbarRenderer.prototype.onPopupOverlay = function (args) {\n closest(this.popupOverlay, '.e-popup-container').style.display = 'none';\n this.popupOverlay.style.display = 'none';\n removeClass([this.popupOverlay], 'e-popup-overlay');\n };\n ToolbarRenderer.prototype.setIsModel = function (element) {\n if (!closest(element, '.e-popup-container')) {\n var popupContainer = createElement('div', { className: 'e-popup-container e-center' });\n element.parentNode.insertBefore(popupContainer, element);\n popupContainer.appendChild(element);\n popupContainer.style.zIndex = element.style.zIndex;\n popupContainer.style.display = 'flex';\n element.style.position = 'relative';\n addClass([element], 'e-popup-modal');\n this.popupOverlay = createElement('div', { className: 'e-popup-overlay' });\n this.popupOverlay.style.zIndex = (parseInt(element.style.zIndex, null) - 1).toString();\n this.popupOverlay.style.display = 'block';\n popupContainer.appendChild(this.popupOverlay);\n EventHandler.add(this.popupOverlay, 'click touchmove', this.onPopupOverlay, this);\n }\n else {\n element.parentElement.style.display = 'flex';\n element.nextElementSibling.style.display = 'block';\n addClass([element.nextElementSibling], 'e-popup-overlay');\n }\n };\n ToolbarRenderer.prototype.paletteSelection = function (dropDownArgs, currentElement) {\n var ele = dropDownArgs.element.querySelector('.e-control.e-colorpicker');\n var colorbox = ele.parentElement.querySelectorAll('.e-tile');\n removeClass(colorbox, 'e-selected');\n var style = currentElement.querySelector('.' + CLS_RTE_ELEMENTS).style.borderBottomColor;\n for (var i = 0; i < colorbox.length; i++) {\n if (colorbox[i].style.backgroundColor === style) {\n addClass([colorbox[i]], 'e-selected');\n break;\n }\n }\n };\n ToolbarRenderer.prototype.renderColorPickerDropDown = function (args, item, colorPicker) {\n var _this = this;\n var proxy = this;\n var css = CLS_RTE_ELEMENTS + ' ' + CLS_TB_BTN + ((this.parent.inlineMode) ? (' ' + CLS_INLINE_DROPDOWN) : '');\n css += (' ' + ((item === 'backgroundcolor') ? CLS_BACKGROUND_COLOR_DROPDOWN : CLS_FONT_COLOR_DROPDOWN));\n var content = ('' +\n '');\n var dropDown = new DropDownButton({\n target: colorPicker.element.parentElement,\n cssClass: css,\n content: content,\n enablePersistence: this.parent.enablePersistence,\n enableRtl: this.parent.enableRtl,\n beforeOpen: function (dropDownArgs) {\n proxy.parent.notify(events.selectionRestore, {});\n if (proxy.parent.readonly || !proxy.parent.enabled) {\n dropDownArgs.cancel = true;\n return;\n }\n var element = (dropDownArgs.event) ? dropDownArgs.event.target : null;\n proxy.currentElement = dropDown.element;\n proxy.currentDropdown = dropDown;\n proxy.paletteSelection(dropDownArgs, proxy.currentElement);\n if (dropDownArgs.event && dropDownArgs.event.type === 'click' && (element.classList.contains(CLS_COLOR_CONTENT)\n || element.parentElement.classList.contains(CLS_COLOR_CONTENT))) {\n dropDownArgs.cancel = true;\n var colorpickerValue = element.classList.contains(CLS_RTE_ELEMENTS) ? element.style.borderBottomColor :\n element.querySelector('.' + CLS_RTE_ELEMENTS).style.borderBottomColor;\n proxy.parent.notify(events.colorPickerChanged, { item: { command: args.command, subCommand: args.subCommand,\n value: colorpickerValue } });\n return;\n }\n else {\n if (Browser.isDevice) {\n var popupInst = getInstance(dropDownArgs.element.parentElement, Popup);\n popupInst.relateTo = document.body;\n popupInst.position = { X: 0, Y: 0 };\n popupInst.targetType = 'container';\n popupInst.collision = { X: 'fit', Y: 'fit' };\n popupInst.offsetY = 4;\n _this.setIsModel(dropDownArgs.element.parentElement);\n }\n var ele = dropDownArgs.element.querySelector('.e-control.e-colorpicker');\n var inst = getInstance(ele, ColorPicker);\n inst.showButtons = (dropDownArgs.element.querySelector('.e-color-palette')) ? false : true;\n }\n dropDownArgs.element.onclick = function (args) {\n if (args.target.classList.contains('e-cancel')) {\n dropDown.toggle();\n }\n };\n },\n open: function (dropDownArgs) {\n var ele = dropDownArgs.element.querySelector('.e-control.e-colorpicker');\n var inst = getInstance(ele, ColorPicker);\n var focusEle;\n if (dropDownArgs.element.querySelector('.e-color-palette')) {\n focusEle = ele.parentElement.querySelector('.e-palette');\n }\n else {\n focusEle = ele.parentElement.querySelector('e-handler');\n }\n if (focusEle) {\n focusEle.focus();\n }\n },\n beforeClose: function (dropDownArgs) {\n var element = (dropDownArgs.event) ? dropDownArgs.event.target : null;\n if (dropDownArgs.event && dropDownArgs.event.type === 'click' && (element.classList.contains(CLS_COLOR_CONTENT)\n || element.parentElement.classList.contains(CLS_COLOR_CONTENT))) {\n var colorpickerValue = element.classList.contains(CLS_RTE_ELEMENTS) ? element.style.borderBottomColor :\n element.querySelector('.' + CLS_RTE_ELEMENTS).style.borderBottomColor;\n /* tslint:enable */\n proxy.parent.notify(events.colorPickerChanged, {\n item: {\n command: args.command,\n subCommand: args.subCommand,\n value: colorpickerValue\n }\n });\n return;\n }\n },\n close: function (dropDownArgs) {\n proxy.parent.notify(events.selectionRestore, {});\n var dropElement = closest(dropDownArgs.element.parentElement, '.e-popup-container');\n if (dropElement) {\n dropElement.style.display = 'none';\n dropElement.lastElementChild.style.display = 'none';\n removeClass([dropElement.lastElementChild], 'e-popup-overlay');\n }\n }\n });\n dropDown.appendTo(args.element);\n args.element.tabIndex = -1;\n dropDown.element.onmousedown = function () {\n proxy.parent.notify(events.selectionSave, {});\n };\n return dropDown;\n };\n ToolbarRenderer.prototype.renderColorPicker = function (args, item) {\n var proxy = this;\n var colorPicker = new ColorPicker({\n enablePersistence: this.parent.enablePersistence,\n enableRtl: this.parent.enableRtl,\n value: ((item === 'backgroundcolor') ? proxy.parent.backgroundColor.default : proxy.parent.fontColor.default),\n inline: true,\n mode: ((item === 'backgroundcolor') ? proxy.parent.backgroundColor.mode : proxy.parent.fontColor.mode),\n modeSwitcher: ((item === 'backgroundcolor') ? proxy.parent.backgroundColor.modeSwitcher : proxy.parent.fontColor.modeSwitcher),\n beforeTileRender: function (args) {\n args.element.classList.add(CLS_COLOR_PALETTE);\n },\n change: function (colorPickerArgs) {\n /* tslint:disable */\n var colorpickerValue = Browser.info.name === 'msie' || Browser.info.name === 'edge' || isIDevice() ? colorPickerArgs.currentValue.rgba : colorPickerArgs.currentValue.hex;\n /* tslint:enable */\n colorPickerArgs.item = {\n command: args.command,\n subCommand: args.subCommand,\n value: colorpickerValue\n };\n proxy.currentElement.querySelector('.' + CLS_RTE_ELEMENTS).style.borderBottomColor = colorpickerValue;\n proxy.parent.notify(events.colorPickerChanged, colorPickerArgs);\n proxy.currentDropdown.toggle();\n },\n beforeModeSwitch: function (args) {\n colorPicker.showButtons = args.mode === 'Palette' ? false : true;\n }\n });\n colorPicker.columns = (item === 'backgroundcolor') ? this.parent.backgroundColor.columns : this.parent.fontColor.columns;\n colorPicker.presetColors = (item === 'backgroundcolor') ? this.parent.backgroundColor.colorCode : this.parent.fontColor.colorCode;\n colorPicker.cssClass = (item === 'backgroundcolor') ? CLS_BACKGROUND_COLOR_PICKER : CLS_FONT_COLOR_PICKER;\n colorPicker.appendTo(document.body.querySelector(args.target));\n return colorPicker;\n };\n /**\n * The function is used to render RichTextEditor toolbar\n */\n ToolbarRenderer.prototype.renderPanel = function () {\n this.getPanel().classList.add(CLS_TOOLBAR);\n };\n /**\n * Get the toolbar element of RichTextEditor\n * @return {Element}\n */\n ToolbarRenderer.prototype.getPanel = function () {\n return this.toolbarPanel;\n };\n /**\n * Set the toolbar element of RichTextEditor\n * @param {Element} panel\n */\n ToolbarRenderer.prototype.setPanel = function (panel) {\n this.toolbarPanel = panel;\n };\n return ToolbarRenderer;\n}());\nexport { ToolbarRenderer };\n","import { createElement } from '@syncfusion/ej2-base';\nimport { RenderType } from '../base/enum';\nimport { CLS_HR_SEPARATOR } from '../base/classes';\nimport { getTooltipText } from '../base/util';\nimport { tools, templateItems } from '../models/items';\n/**\n * `Toolbar` module is used to handle Toolbar actions.\n */\nvar BaseToolbar = /** @class */ (function () {\n function BaseToolbar(parent, serviceLocator) {\n this.parent = parent;\n this.locator = serviceLocator;\n this.renderFactory = this.locator.getService('rendererFactory');\n }\n BaseToolbar.prototype.getTemplateObject = function (itemStr, container) {\n var tagName;\n switch (itemStr) {\n case 'fontcolor':\n case 'backgroundcolor':\n tagName = 'span';\n break;\n default:\n tagName = 'button';\n break;\n }\n return {\n command: tools[itemStr].command,\n subCommand: tools[itemStr].subCommand,\n template: createElement(tagName, { id: this.parent.getID() + '_' + container + '_' + tools[itemStr].id }).outerHTML,\n tooltipText: getTooltipText(itemStr, this.locator)\n };\n };\n BaseToolbar.prototype.getObject = function (item, container) {\n var itemStr = item.toLowerCase();\n if (templateItems.indexOf(itemStr) !== -1) {\n return this.getTemplateObject(itemStr, container);\n }\n else {\n switch (itemStr) {\n case '|':\n return { type: 'Separator' };\n case '-':\n return { type: 'Separator', cssClass: CLS_HR_SEPARATOR };\n default:\n return {\n id: this.parent.getID() + '_' + container + '_' + tools[itemStr].id,\n prefixIcon: tools[itemStr].icon,\n tooltipText: getTooltipText(itemStr, this.locator),\n command: tools[itemStr].command,\n subCommand: tools[itemStr].subCommand\n };\n }\n }\n };\n /**\n * @hidden\n */\n BaseToolbar.prototype.getItems = function (tbItems, container) {\n if (this.parent.toolbarSettings.items.length < 1) {\n return [];\n }\n var items = [];\n for (var _i = 0, tbItems_1 = tbItems; _i < tbItems_1.length; _i++) {\n var item = tbItems_1[_i];\n switch (typeof item) {\n case 'string':\n items.push(this.getObject(item, container));\n break;\n default:\n items.push(item);\n }\n }\n return items;\n };\n BaseToolbar.prototype.getToolbarOptions = function (args) {\n return {\n target: args.target,\n rteToolbarObj: this,\n items: this.getItems(args.items, args.container),\n overflowMode: args.mode,\n enablePersistence: this.parent.enablePersistence,\n enableRtl: this.parent.enableRtl\n };\n };\n BaseToolbar.prototype.render = function (args) {\n this.toolbarRenderer = this.renderFactory.getRenderer(RenderType.Toolbar);\n this.toolbarRenderer.renderToolbar(this.getToolbarOptions(args));\n };\n return BaseToolbar;\n}());\nexport { BaseToolbar };\n","import { addClass, removeClass, select } from '@syncfusion/ej2-base';\nimport { RenderType } from '../base/enum';\nimport { getIndex } from '../base/util';\nimport * as events from '../base/constant';\nimport * as classes from '../base/classes';\nimport { getDropDownValue, getFormattedFontSize, getTooltipText } from '../base/util';\nimport * as model from '../models/items';\nimport { dispatchEvent } from '../base/util';\n/**\n * `Toolbar` module is used to handle Toolbar actions.\n */\nvar DropDownButtons = /** @class */ (function () {\n function DropDownButtons(parent, serviceLocator) {\n this.parent = parent;\n this.locator = serviceLocator;\n this.renderFactory = this.locator.getService('rendererFactory');\n this.addEventListener();\n }\n DropDownButtons.prototype.initializeInstance = function () {\n this.toolbarRenderer = this.renderFactory.getRenderer(RenderType.Toolbar);\n };\n DropDownButtons.prototype.beforeRender = function (args) {\n var item = args.item;\n if (item.class) {\n addClass([args.element], item.class);\n }\n if (item.command === 'Alignments' || item.subCommand === 'JustifyLeft'\n || item.subCommand === 'JustifyRight' || item.subCommand === 'JustifyCenter') {\n args.element.setAttribute('title', getTooltipText(item.subCommand.toLocaleLowerCase(), this.locator));\n }\n };\n DropDownButtons.prototype.dropdownContent = function (width, type, content) {\n return ('' +\n '' + content + '');\n };\n DropDownButtons.prototype.renderDropDowns = function (args) {\n var _this = this;\n this.initializeInstance();\n var type = args.containerType;\n var tbElement = args.container;\n model.templateItems.forEach(function (item) {\n var targetElement = undefined;\n if (getIndex(item, args.items) !== -1) {\n switch (item) {\n case 'formats':\n targetElement = select('#' + _this.parent.getID() + '_' + type + '_Formats', tbElement);\n if (targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n var formatItem = _this.parent.format.types.slice();\n formatItem.forEach(function (item) {\n Object.defineProperties(item, {\n command: { value: 'Formats', enumerable: true }, subCommand: { value: item.value, enumerable: true }\n });\n });\n _this.formatDropDown = _this.toolbarRenderer.renderDropDownButton({\n iconCss: ((type === 'quick') ? 'e-formats e-icons' : ''),\n content: _this.dropdownContent(_this.parent.format.width, type, ((type === 'quick') ? '' : getDropDownValue(formatItem, _this.parent.format.default, 'text', 'text'))),\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ITEMS + ' ' + classes.CLS_FORMATS_TB_BTN,\n itemName: 'Formats',\n items: formatItem,\n element: targetElement\n });\n break;\n case 'fontname':\n targetElement = select('#' + _this.parent.getID() + '_' + type + '_FontName', tbElement);\n if (targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n var fontItem = _this.parent.fontFamily.items.slice();\n fontItem.forEach(function (item) {\n Object.defineProperties(item, {\n command: { value: 'Font', enumerable: true }, subCommand: { value: 'FontName', enumerable: true }\n });\n });\n _this.fontNameDropDown = _this.toolbarRenderer.renderDropDownButton({\n iconCss: ((type === 'quick') ? 'e-font-name e-icons' : ''),\n content: _this.dropdownContent(_this.parent.fontFamily.width, type, ((type === 'quick') ? '' : getDropDownValue(fontItem, _this.parent.fontFamily.default, 'text', 'text'))),\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ITEMS + ' ' + classes.CLS_FONT_NAME_TB_BTN,\n itemName: 'FontName',\n items: fontItem,\n element: targetElement\n });\n break;\n case 'fontsize':\n targetElement = select('#' + _this.parent.getID() + '_' + type + '_FontSize', tbElement);\n if (targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n var fontsize = _this.parent.fontSize.items.slice();\n fontsize.forEach(function (item) {\n Object.defineProperties(item, {\n command: { value: 'Font', enumerable: true }, subCommand: { value: 'FontSize', enumerable: true }\n });\n });\n _this.fontSizeDropDown = _this.toolbarRenderer.renderDropDownButton({\n content: _this.dropdownContent(_this.parent.fontSize.width, type, getFormattedFontSize(getDropDownValue(fontsize, _this.parent.fontSize.default, 'text', 'value'))),\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ITEMS + ' ' + classes.CLS_FONT_SIZE_TB_BTN,\n itemName: 'FontSize',\n items: fontsize,\n element: targetElement\n });\n break;\n case 'alignments':\n targetElement = select('#' + _this.parent.getID() + '_' + type + '_Alignments', tbElement);\n if (targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n _this.alignDropDown = _this.toolbarRenderer.renderDropDownButton({\n iconCss: 'e-justify-left e-icons',\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ITEMS,\n itemName: 'Alignments',\n items: model.alignmentItems,\n element: targetElement\n });\n break;\n case 'align':\n targetElement = select('#' + _this.parent.getID() + '_' + type + '_Align', tbElement);\n if (targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n _this.imageAlignDropDown = _this.toolbarRenderer.renderDropDownButton({\n iconCss: 'e-justify-left e-icons',\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ICONS + ' ' + classes.CLS_QUICK_DROPDOWN,\n itemName: 'Align',\n items: model.imageAlignItems,\n element: targetElement\n });\n break;\n case 'display':\n targetElement = select('#' + _this.parent.getID() + '_' + type + '_Display', tbElement);\n if (targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n _this.displayDropDown = _this.toolbarRenderer.renderDropDownButton({\n iconCss: 'e-display e-icons',\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ITEMS + ' ' + classes.CLS_QUICK_DROPDOWN,\n itemName: 'Display',\n items: model.imageDisplayItems,\n element: targetElement\n });\n break;\n }\n }\n });\n };\n DropDownButtons.prototype.removeDropDownClasses = function (target) {\n removeClass([target], [\n classes.CLS_DROPDOWN_BTN,\n classes.CLS_DROPDOWN_POPUP,\n classes.CLS_DROPDOWN_ICONS,\n classes.CLS_DROPDOWN_ITEMS\n ]);\n };\n DropDownButtons.prototype.destroyDropDowns = function () {\n if (this.formatDropDown) {\n this.removeDropDownClasses(this.formatDropDown.element);\n this.formatDropDown.destroy();\n }\n if (this.fontNameDropDown) {\n this.removeDropDownClasses(this.fontNameDropDown.element);\n this.fontNameDropDown.destroy();\n }\n if (this.fontSizeDropDown) {\n this.removeDropDownClasses(this.fontSizeDropDown.element);\n this.fontSizeDropDown.destroy();\n }\n if (this.alignDropDown) {\n this.removeDropDownClasses(this.alignDropDown.element);\n this.alignDropDown.destroy();\n }\n if (this.imageAlignDropDown) {\n this.removeDropDownClasses(this.imageAlignDropDown.element);\n this.imageAlignDropDown.destroy();\n }\n if (this.displayDropDown) {\n this.removeDropDownClasses(this.displayDropDown.element);\n this.displayDropDown.destroy();\n }\n };\n DropDownButtons.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.beforeDropDownItemRender, this.beforeRender, this);\n this.parent.on(events.iframeMouseDown, this.onIframeMouseDown, this);\n this.parent.on(events.destroy, this.removeEventListener, this);\n };\n DropDownButtons.prototype.onIframeMouseDown = function () {\n dispatchEvent(document, 'mousedown');\n };\n DropDownButtons.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.iframeMouseDown, this.onIframeMouseDown);\n this.parent.off(events.beforeDropDownItemRender, this.beforeRender);\n this.parent.off(events.destroy, this.removeEventListener);\n };\n return DropDownButtons;\n}());\nexport { DropDownButtons };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * ServiceLocator\n * @hidden\n */\nvar ServiceLocator = /** @class */ (function () {\n function ServiceLocator() {\n this.services = {};\n }\n ServiceLocator.prototype.register = function (name, type) {\n if (isNullOrUndefined(this.services[name])) {\n this.services[name] = type;\n }\n };\n ServiceLocator.prototype.getService = function (name) {\n if (isNullOrUndefined(this.services[name])) {\n throw \"The service \" + name + \" is not registered\";\n }\n return this.services[name];\n };\n return ServiceLocator;\n}());\nexport { ServiceLocator };\n","import { isNullOrUndefined, getEnumValue } from '@syncfusion/ej2-base';\nimport { RenderType } from '../base/enum';\n/**\n * RendererFactory\n * @hidden\n */\nvar RendererFactory = /** @class */ (function () {\n function RendererFactory() {\n this.rendererMap = {};\n }\n RendererFactory.prototype.addRenderer = function (name, type) {\n var rName = getEnumValue(RenderType, name);\n if (isNullOrUndefined(this.rendererMap[rName])) {\n this.rendererMap[rName] = type;\n }\n };\n RendererFactory.prototype.getRenderer = function (name) {\n var rName = getEnumValue(RenderType, name);\n if (isNullOrUndefined(this.rendererMap[rName])) {\n throw \"The renderer \" + rName + \" is not found\";\n }\n else {\n return this.rendererMap[rName];\n }\n };\n return RendererFactory;\n}());\nexport { RendererFactory };\n","import { isNullOrUndefined as isNOU } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { ServiceLocator } from '../services/service-locator';\nimport { RendererFactory } from '../services/renderer-factory';\n/**\n * `ToolbarAction` module is used to toolbar click action\n */\nvar ToolbarAction = /** @class */ (function () {\n function ToolbarAction(parent) {\n this.parent = parent;\n this.addEventListener();\n this.serviceLocator = new ServiceLocator;\n this.serviceLocator.register('rendererFactory', new RendererFactory);\n }\n ToolbarAction.prototype.addEventListener = function () {\n this.parent.on(events.toolbarClick, this.toolbarClick, this);\n this.parent.on(events.dropDownSelect, this.dropDownSelect, this);\n this.parent.on(events.colorPickerChanged, this.renderSelection, this);\n this.parent.on(events.destroy, this.removeEventListener, this);\n };\n ToolbarAction.prototype.toolbarClick = function (args) {\n if (isNOU(args.item)) {\n return;\n }\n if (!isNOU(args.item.controlParent)) {\n var activeEle = args.item.controlParent\n .activeEle;\n if (activeEle) {\n activeEle.tabIndex = -1;\n }\n }\n this.parent.notify(events.htmlToolbarClick, args);\n this.parent.notify(events.markdownToolbarClick, args);\n };\n ToolbarAction.prototype.dropDownSelect = function (e) {\n this.parent.notify(events.selectionRestore, {});\n if (!(document.body.contains(document.body.querySelector('.e-rte-quick-toolbar'))\n && e.item && (e.item.command === 'Images' || e.item.command === 'Display'))) {\n this.parent.formatter.process(this.parent, e, e.originalEvent, null);\n }\n this.parent.notify(events.selectionSave, {});\n };\n ToolbarAction.prototype.renderSelection = function (args) {\n this.parent.notify(events.selectionRestore, {});\n this.parent.formatter.process(this.parent, args, args.originalEvent, null);\n this.parent.notify(events.selectionSave, {});\n };\n ToolbarAction.prototype.removeEventListener = function () {\n this.parent.off(events.toolbarClick, this.toolbarClick);\n this.parent.off(events.dropDownSelect, this.dropDownSelect);\n this.parent.off(events.colorPickerChanged, this.renderSelection);\n this.parent.off(events.destroy, this.removeEventListener);\n };\n return ToolbarAction;\n}());\nexport { ToolbarAction };\n","import { addClass, Browser, EventHandler, detach, removeClass, select, selectAll, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { createElement as createEle, isNullOrUndefined as isNOU, closest } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport * as classes from '../base/classes';\nimport { RenderType, ToolbarType } from '../base/enum';\nimport { setToolbarStatus, updateUndoRedoStatus, getTBarItemsIndex, getCollection } from '../base/util';\nimport * as model from '../models/items';\nimport { ToolbarRenderer } from '../renderer/toolbar-renderer';\nimport { BaseToolbar } from './base-toolbar';\nimport { DropDownButtons } from './dropdown-buttons';\nimport { ToolbarAction } from './toolbar-action';\n/**\n * `Toolbar` module is used to handle Toolbar actions.\n */\nvar Toolbar = /** @class */ (function () {\n function Toolbar(parent, serviceLocator) {\n this.parent = parent;\n this.isToolbar = false;\n this.locator = serviceLocator;\n this.renderFactory = this.locator.getService('rendererFactory');\n this.renderFactory.addRenderer(RenderType.Toolbar, new ToolbarRenderer(this.parent));\n this.toolbarRenderer = this.renderFactory.getRenderer(RenderType.Toolbar);\n this.baseToolbar = new BaseToolbar(this.parent, this.locator);\n this.addEventListener();\n }\n Toolbar.prototype.initializeInstance = function () {\n this.contentRenderer = this.renderFactory.getRenderer(RenderType.Content);\n this.editableElement = this.contentRenderer.getEditPanel();\n this.editPanel = this.contentRenderer.getPanel();\n };\n Toolbar.prototype.toolbarBindEvent = function () {\n this.keyBoardModule = new KeyboardEvents(this.getToolbarElement(), {\n keyAction: this.toolBarKeyDown.bind(this), keyConfigs: this.parent.formatter.keyConfig, eventName: 'keydown'\n });\n };\n Toolbar.prototype.toolBarKeyDown = function (e) {\n switch (e.action) {\n case 'escape':\n this.parent.contentModule.getEditPanel().focus();\n break;\n }\n };\n Toolbar.prototype.createToolbarElement = function () {\n this.tbElement = createEle('div', { id: this.parent.getID() + '_toolbar' });\n if (!Browser.isDevice && this.parent.inlineMode.enable) {\n return;\n }\n else {\n if (this.parent.toolbarSettings.enableFloating && !this.parent.inlineMode.enable) {\n this.tbWrapper = createEle('div', {\n id: this.parent.getID() + '_toolbar_wrapper',\n innerHTML: this.tbElement.outerHTML,\n className: classes.CLS_TB_WRAP\n });\n this.tbElement = this.tbWrapper.firstElementChild;\n this.parent.element.insertBefore(this.tbWrapper, this.editPanel);\n }\n else {\n this.parent.element.insertBefore(this.tbElement, this.editPanel);\n }\n }\n };\n Toolbar.prototype.getToolbarMode = function () {\n var tbMode;\n switch (this.parent.toolbarSettings.type) {\n case ToolbarType.Expand:\n tbMode = 'Extended';\n break;\n default:\n tbMode = 'MultiRow';\n }\n return tbMode;\n };\n Toolbar.prototype.checkToolbarResponsive = function (ele) {\n if (!Browser.isDevice) {\n return false;\n }\n this.baseToolbar.render({\n container: ((this.parent.inlineMode.enable) ? 'quick' : 'toolbar'),\n items: this.parent.toolbarSettings.items,\n mode: 'MultiRow',\n target: ele\n });\n addClass([ele], ['e-rte-tb-mobile']);\n if (this.parent.inlineMode.enable) {\n this.addFixedTBarClass();\n }\n else {\n addClass([ele], [classes.CLS_TB_STATIC]);\n }\n this.wireEvents();\n this.dropDownModule.renderDropDowns({\n container: ele,\n containerType: ((this.parent.inlineMode.enable) ? 'quick' : 'toolbar'),\n items: this.parent.toolbarSettings.items\n });\n this.parent.notify(events.renderColorPicker, {\n container: this.tbElement,\n containerType: 'toolbar',\n items: this.parent.toolbarSettings.items\n });\n return true;\n };\n Toolbar.prototype.toggleFloatTBarOffset = function (action, top) {\n this.tbElement.style.top = ((action === 'add') ? (top + this.parent.floatingToolbarOffset) : 0) + 'px';\n };\n Toolbar.prototype.toggleFloatClass = function (e) {\n var topValue = 0;\n var floatOffset = this.parent.floatingToolbarOffset;\n var isBody = false;\n var scrollParent;\n var scrollParentRelativeTop = 0;\n var trg = this.parent.element;\n var trgHeight = trg.offsetHeight;\n var tbHeight = this.getToolbarHeight() + this.getExpandTBarPopHeight();\n if (e && e.target !== document) {\n scrollParent = e.target;\n }\n else {\n isBody = true;\n scrollParent = document.body;\n var bodyStyle = window.getComputedStyle(scrollParent);\n scrollParentRelativeTop = parseFloat(bodyStyle.marginTop.split('px')[0]) + parseFloat(bodyStyle.paddingTop.split('px')[0]);\n }\n var targetTop = trg.getBoundingClientRect().top;\n var scrollParentYOffset = (Browser.isMSPointer && isBody) ? window.pageYOffset : scrollParent.parentElement.scrollTop;\n var scrollParentRect = scrollParent.getBoundingClientRect();\n var scrollParentTop = (!isBody) ? scrollParentRect.top : (scrollParentRect.top + scrollParentYOffset);\n var isOutOfRange = ((targetTop - ((!isBody) ? scrollParentTop : 0)) + trgHeight > tbHeight + floatOffset) ? false : true;\n if (targetTop > (scrollParentTop + floatOffset) || targetTop < -trgHeight || ((targetTop < 0) ? isOutOfRange : false)) {\n this.tbElement.classList.remove(classes.CLS_TB_FLOAT);\n this.tbElement.style.width = '100%';\n this.toggleFloatTBarOffset('remove', topValue);\n }\n else if (targetTop < (scrollParentTop + floatOffset)) {\n if (targetTop < 0) {\n topValue = (-targetTop) + scrollParentTop;\n }\n else {\n topValue = scrollParentTop - targetTop;\n }\n topValue = (isBody) ? topValue - scrollParentRelativeTop : topValue;\n this.tbElement.classList.add(classes.CLS_TB_FLOAT);\n this.tbElement.style.width = this.parent.element.offsetWidth + 'px';\n this.toggleFloatTBarOffset('add', topValue);\n }\n };\n Toolbar.prototype.renderToolbar = function () {\n this.initializeInstance();\n this.createToolbarElement();\n if (this.checkToolbarResponsive(this.tbElement)) {\n return;\n }\n if (this.parent.inlineMode.enable) {\n this.parent.notify(events.renderInlineToolbar, {});\n }\n else {\n this.baseToolbar.render({\n container: 'toolbar',\n items: this.parent.toolbarSettings.items,\n mode: this.getToolbarMode(),\n target: this.tbElement\n });\n if (!this.parent.inlineMode.enable) {\n if (this.parent.toolbarSettings.enableFloating) {\n this.toggleFloatClass();\n }\n if (this.parent.toolbarSettings.type === ToolbarType.Expand) {\n addClass([this.parent.element], [classes.CLS_RTE_EXPAND_TB]);\n }\n }\n }\n this.wireEvents();\n if (this.parent.inlineMode.enable) {\n this.addFixedTBarClass();\n }\n if (!this.parent.inlineMode.enable) {\n this.dropDownModule.renderDropDowns({\n container: this.tbElement,\n containerType: 'toolbar',\n items: this.parent.toolbarSettings.items\n });\n this.parent.notify(events.renderColorPicker, {\n container: this.tbElement,\n containerType: 'toolbar',\n items: this.parent.toolbarSettings.items\n });\n this.refreshToolbarOverflow();\n }\n };\n Toolbar.prototype.addFixedTBarClass = function () {\n addClass([this.tbElement], [classes.CLS_TB_FIXED]);\n };\n Toolbar.prototype.removeFixedTBarClass = function () {\n removeClass([this.tbElement], [classes.CLS_TB_FIXED]);\n };\n Toolbar.prototype.showFixedTBar = function () {\n addClass([this.tbElement], [classes.CLS_SHOW]);\n if (Browser.isIos) {\n addClass([this.tbElement], [classes.CLS_TB_IOS_FIX]);\n }\n };\n Toolbar.prototype.hideFixedTBar = function () {\n (!this.isToolbar) ? removeClass([this.tbElement], [classes.CLS_SHOW, classes.CLS_TB_IOS_FIX]) : this.isToolbar = false;\n };\n Toolbar.prototype.updateItem = function (args) {\n var item = model.tools[args.updateItem.toLocaleLowerCase()];\n var trgItem = model.tools[args.targetItem.toLocaleLowerCase()];\n var index = getTBarItemsIndex(getCollection(trgItem.subCommand), args.baseToolbar.toolbarObj.items)[0];\n if (!isNOU(index)) {\n args.baseToolbar.toolbarObj.items[index].id = this.parent.getID() + '_' + item.id;\n args.baseToolbar.toolbarObj.items[index].prefixIcon = item.icon;\n args.baseToolbar.toolbarObj.items[index].tooltipText = item.tooltip;\n args.baseToolbar.toolbarObj.items[index].subCommand = item.subCommand;\n args.baseToolbar.toolbarObj.dataBind();\n }\n else {\n this.addTBarItem(args, 0);\n }\n };\n Toolbar.prototype.updateToolbarStatus = function (args) {\n var options = {\n args: args,\n dropDownModule: this.dropDownModule,\n parent: this.parent,\n tbElements: selectAll('.' + classes.CLS_TB_ITEM, this.tbElement),\n tbItems: this.baseToolbar.toolbarObj.items\n };\n if (this.parent.inlineMode.enable) {\n setToolbarStatus(options, true);\n }\n else {\n setToolbarStatus(options, false);\n }\n };\n Toolbar.prototype.fullScreen = function (e) {\n this.parent.fullScreenModule.showFullScreen(e);\n };\n Toolbar.prototype.hideScreen = function (e) {\n this.parent.fullScreenModule.hideFullScreen(e);\n };\n Toolbar.prototype.getBaseToolbar = function () {\n return this.baseToolbar;\n };\n Toolbar.prototype.addTBarItem = function (args, index) {\n args.baseToolbar.toolbarObj.addItems([args.baseToolbar.getObject(args.updateItem, 'toolbar')], index);\n };\n Toolbar.prototype.enableTBarItems = function (baseToolbar, items, isEnable) {\n var trgItems = getTBarItemsIndex(getCollection(items), baseToolbar.toolbarObj.items);\n this.tbItems = selectAll('.' + classes.CLS_TB_ITEM, baseToolbar.toolbarObj.element);\n for (var i = 0; i < trgItems.length; i++) {\n var item = this.tbItems[trgItems[i]];\n if (item) {\n baseToolbar.toolbarObj.enableItems(item, isEnable);\n }\n }\n if (!select('.e-rte-srctextarea', this.parent.element)) {\n updateUndoRedoStatus(baseToolbar, this.parent.formatter.editorManager.undoRedoManager.getUndoStatus());\n }\n };\n Toolbar.prototype.removeTBarItems = function (items) {\n var trgItems = getTBarItemsIndex(getCollection(items), this.baseToolbar.toolbarObj.items);\n this.tbItems = selectAll('.' + classes.CLS_TB_ITEM, this.parent.element);\n for (var i = 0; i < trgItems.length; i++) {\n this.baseToolbar.toolbarObj.removeItems(this.tbItems[trgItems[i]]);\n }\n };\n Toolbar.prototype.getExpandTBarPopHeight = function () {\n var popHeight = 0;\n if (this.parent.toolbarSettings.type === ToolbarType.Expand && this.tbElement.classList.contains('e-extended-toolbar')) {\n var expandPopup = select('.e-toolbar-extended', this.tbElement);\n if (expandPopup && this.tbElement.classList.contains('e-expand-open')\n || expandPopup && expandPopup.classList.contains('e-popup-open')) {\n addClass([expandPopup], [classes.CLS_VISIBLE]);\n popHeight = popHeight + expandPopup.offsetHeight;\n removeClass([expandPopup], [classes.CLS_VISIBLE]);\n }\n else {\n removeClass([this.tbElement], [classes.CLS_EXPAND_OPEN]);\n }\n }\n return popHeight;\n };\n Toolbar.prototype.getToolbarHeight = function () {\n return this.tbElement.offsetHeight;\n };\n Toolbar.prototype.getToolbarElement = function () {\n return select('.' + classes.CLS_TOOLBAR, this.parent.element);\n };\n Toolbar.prototype.refreshToolbarOverflow = function () {\n this.baseToolbar.toolbarObj.refreshOverflow();\n };\n Toolbar.prototype.isToolbarDestroyed = function () {\n return this.baseToolbar.toolbarObj && !this.baseToolbar.toolbarObj.isDestroyed;\n };\n Toolbar.prototype.destroyToolbar = function () {\n if (this.isToolbarDestroyed()) {\n this.parent.unWireScrollElementsEvents();\n this.unWireEvents();\n this.parent.notify(events.destroyColorPicker, {});\n this.dropDownModule.destroyDropDowns();\n this.baseToolbar.toolbarObj.destroy();\n this.removeEventListener();\n }\n };\n /**\n * Destroys the ToolBar.\n * @method destroy\n * @return {void}\n */\n Toolbar.prototype.destroy = function () {\n if (this.isToolbarDestroyed()) {\n this.destroyToolbar();\n if (this.keyBoardModule) {\n this.keyBoardModule.destroy();\n }\n }\n };\n Toolbar.prototype.scrollHandler = function (e) {\n if (this.parent.toolbarSettings.enableFloating) {\n this.toggleFloatClass(e.args);\n }\n };\n Toolbar.prototype.mouseDownHandler = function () {\n if (Browser.isDevice && this.parent.inlineMode.enable) {\n this.showFixedTBar();\n }\n };\n Toolbar.prototype.focusChangeHandler = function () {\n if (Browser.isDevice && this.parent.inlineMode.enable) {\n this.isToolbar = false;\n this.hideFixedTBar();\n }\n };\n Toolbar.prototype.dropDownBeforeOpenHandler = function () {\n this.isToolbar = true;\n };\n Toolbar.prototype.toolbarMouseDownHandler = function (e) {\n var trg = closest(e.target, '.e-hor-nav');\n if (trg && this.parent.toolbarSettings.type === ToolbarType.Expand && !isNOU(trg)) {\n if (!trg.classList.contains('e-nav-active')) {\n removeClass([this.tbElement], [classes.CLS_EXPAND_OPEN]);\n this.parent.setContentHeight('toolbar', false);\n }\n else {\n addClass([this.tbElement], [classes.CLS_EXPAND_OPEN]);\n this.parent.setContentHeight('toolbar', true);\n }\n }\n else if (Browser.isDevice || this.parent.inlineMode.enable) {\n this.isToolbar = true;\n }\n if (isNOU(trg) && this.parent.toolbarSettings.type === ToolbarType.Expand) {\n removeClass([this.tbElement], [classes.CLS_EXPAND_OPEN]);\n }\n };\n Toolbar.prototype.wireEvents = function () {\n EventHandler.add(this.tbElement, 'click mousedown', this.toolbarMouseDownHandler, this);\n };\n Toolbar.prototype.unWireEvents = function () {\n EventHandler.remove(this.tbElement, 'click mousedown', this.toolbarMouseDownHandler);\n };\n Toolbar.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.dropDownModule = new DropDownButtons(this.parent, this.locator);\n this.toolbarActionModule = new ToolbarAction(this.parent);\n this.parent.on(events.initialEnd, this.renderToolbar, this);\n if (!this.parent.inlineMode.enable) {\n this.parent.on(events.scroll, this.scrollHandler, this);\n this.parent.on(events.bindOnEnd, this.toolbarBindEvent, this);\n this.parent.on(events.toolbarUpdated, this.updateToolbarStatus, this);\n }\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.enableFullScreen, this.fullScreen, this);\n this.parent.on(events.disableFullScreen, this.hideScreen, this);\n this.parent.on(events.updateToolbarItem, this.updateItem, this);\n this.parent.on(events.beforeDropDownOpen, this.dropDownBeforeOpenHandler, this);\n this.parent.on(events.expandPopupClick, this.parent.setContentHeight, this.parent);\n this.parent.on(events.focusChange, this.focusChangeHandler, this);\n this.parent.on(events.mouseDown, this.mouseDownHandler, this);\n this.parent.on(events.sourceCodeMouseDown, this.mouseDownHandler, this);\n };\n Toolbar.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initialEnd, this.renderToolbar);\n if (!this.parent.inlineMode.enable) {\n this.parent.off(events.scroll, this.scrollHandler);\n this.parent.off(events.bindOnEnd, this.toolbarBindEvent);\n this.parent.off(events.toolbarUpdated, this.updateToolbarStatus);\n }\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.enableFullScreen, this.parent.fullScreenModule.showFullScreen);\n this.parent.off(events.disableFullScreen, this.parent.fullScreenModule.hideFullScreen);\n this.parent.off(events.updateToolbarItem, this.updateItem);\n this.parent.off(events.beforeDropDownOpen, this.dropDownBeforeOpenHandler);\n this.parent.off(events.expandPopupClick, this.parent.setContentHeight);\n this.parent.off(events.focusChange, this.focusChangeHandler);\n this.parent.off(events.mouseDown, this.mouseDownHandler);\n this.parent.off(events.sourceCodeMouseDown, this.mouseDownHandler);\n };\n /**\n * Called internally if any of the property value changed.\n * @hidden\n */\n Toolbar.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName()) {\n return;\n }\n var tbWrapper = select('.' + classes.CLS_TB_WRAP, this.parent.element);\n var tbElement = select('.' + classes.CLS_TOOLBAR, this.parent.element);\n if (tbElement) {\n this.destroyToolbar();\n detach(tbElement);\n if (tbWrapper) {\n detach(tbWrapper);\n }\n this.addEventListener();\n this.renderToolbar();\n this.parent.wireScrollElementsEvents();\n if (!select('.e-rte-srctextarea', this.parent.element)) {\n updateUndoRedoStatus(this.baseToolbar, this.parent.formatter.editorManager.undoRedoManager.getUndoStatus());\n }\n }\n };\n /**\n * For internal use only - Get the module name.\n */\n Toolbar.prototype.getModuleName = function () {\n return 'toolbar';\n };\n return Toolbar;\n}());\nexport { Toolbar };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, NotifyPropertyChanges, Event } from '@syncfusion/ej2-base';\nimport { Base } from '@syncfusion/ej2-base';\nvar keyCode = {\n 'backspace': 8,\n 'tab': 9,\n 'enter': 13,\n 'shift': 16,\n 'control': 17,\n 'alt': 18,\n 'pause': 19,\n 'capslock': 20,\n 'space': 32,\n 'escape': 27,\n 'pageup': 33,\n 'pagedown': 34,\n 'end': 35,\n 'home': 36,\n 'leftarrow': 37,\n 'uparrow': 38,\n 'rightarrow': 39,\n 'downarrow': 40,\n 'insert': 45,\n 'delete': 46,\n 'f1': 112,\n 'f2': 113,\n 'f3': 114,\n 'f4': 115,\n 'f5': 116,\n 'f6': 117,\n 'f7': 118,\n 'f8': 119,\n 'f9': 120,\n 'f10': 121,\n 'f11': 122,\n 'f12': 123,\n 'semicolon': 186,\n 'plus': 187,\n 'comma': 188,\n 'minus': 189,\n 'dot': 190,\n 'forwardslash': 191,\n 'graveaccent': 192,\n 'openbracket': 219,\n 'backslash': 220,\n 'closebracket': 221,\n 'singlequote': 222,\n ']': 221,\n '[': 219,\n '=': 187\n};\n/**\n * KeyboardEvents class enables you to bind key action desired key combinations for ex., Ctrl+A, Delete, Alt+Space etc.\n * ```html\n *
    ;\n * \n * ```\n */\nvar KeyboardEvents = /** @class */ (function (_super) {\n __extends(KeyboardEvents, _super);\n /**\n * Initializes the KeyboardEvents\n * @param {HTMLElement} element\n * @param {KeyboardEventsModel} options\n */\n function KeyboardEvents(element, options) {\n var _this = _super.call(this, options, element) || this;\n /**\n * To handle a key press event returns null\n */\n _this.keyPressHandler = function (e) {\n var isAltKey = e.altKey;\n var isCtrlKey = e.ctrlKey;\n var isShiftKey = e.shiftKey;\n var curkeyCode = e.which;\n var keys = Object.keys(_this.keyConfigs);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n var configCollection = _this.keyConfigs[key].split(',');\n for (var _a = 0, configCollection_1 = configCollection; _a < configCollection_1.length; _a++) {\n var rconfig = configCollection_1[_a];\n var rKeyObj = KeyboardEvents_1.getKeyConfigData(rconfig.trim());\n if (isAltKey === rKeyObj.altKey && isCtrlKey === rKeyObj.ctrlKey &&\n isShiftKey === rKeyObj.shiftKey && curkeyCode === rKeyObj.keyCode) {\n e.action = key;\n }\n }\n }\n if (_this.keyAction) {\n _this.keyAction(e);\n }\n };\n _this.bind();\n return _this;\n }\n KeyboardEvents_1 = KeyboardEvents;\n /**\n * Unwire bound events and destroy the instance.\n * @return {void}\n */\n KeyboardEvents.prototype.destroy = function () {\n this.unwireEvents();\n _super.prototype.destroy.call(this);\n };\n /**\n * Function can be used to specify certain action if a property is changed\n * @param newProp\n * @param oldProp\n * @returns {void}\n * @private\n */\n KeyboardEvents.prototype.onPropertyChanged = function (newProp, oldProp) {\n // No code are needed\n };\n ;\n KeyboardEvents.prototype.bind = function () {\n this.wireEvents();\n };\n /**\n * To get the module name, returns 'keyboard'.\n * @private\n */\n KeyboardEvents.prototype.getModuleName = function () {\n return 'keyboard';\n };\n /**\n * Wiring event handlers to events\n */\n KeyboardEvents.prototype.wireEvents = function () {\n this.element.addEventListener(this.eventName, this.keyPressHandler);\n };\n /**\n * Unwiring event handlers to events\n */\n KeyboardEvents.prototype.unwireEvents = function () {\n this.element.removeEventListener(this.eventName, this.keyPressHandler);\n };\n /**\n * To get the key configuration data\n * @param {string} config - configuration data\n * returns {KeyData}\n */\n KeyboardEvents.getKeyConfigData = function (config) {\n if (config in this.configCache) {\n return this.configCache[config];\n }\n var keys = config.toLowerCase().split('+');\n var keyData = {\n altKey: (keys.indexOf('alt') !== -1 ? true : false),\n ctrlKey: (keys.indexOf('ctrl') !== -1 ? true : false),\n shiftKey: (keys.indexOf('shift') !== -1 ? true : false),\n keyCode: null\n };\n if (keys[keys.length - 1].length > 1 && !!Number(keys[keys.length - 1])) {\n keyData.keyCode = Number(keys[keys.length - 1]);\n }\n else {\n keyData.keyCode = KeyboardEvents_1.getKeyCode(keys[keys.length - 1]);\n }\n KeyboardEvents_1.configCache[config] = keyData;\n return keyData;\n };\n // Return the keycode value as string \n KeyboardEvents.getKeyCode = function (keyVal) {\n return keyCode[keyVal] || keyVal.toUpperCase().charCodeAt(0);\n };\n KeyboardEvents.configCache = {};\n __decorate([\n Property({})\n ], KeyboardEvents.prototype, \"keyConfigs\", void 0);\n __decorate([\n Property('keyup')\n ], KeyboardEvents.prototype, \"eventName\", void 0);\n __decorate([\n Event()\n ], KeyboardEvents.prototype, \"keyAction\", void 0);\n KeyboardEvents = KeyboardEvents_1 = __decorate([\n NotifyPropertyChanges\n ], KeyboardEvents);\n return KeyboardEvents;\n var KeyboardEvents_1;\n}(Base));\nexport { KeyboardEvents };\n","import { createElement, detach, getUniqueID, append, closest, selectAll, select, isNullOrUndefined as isNOU } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, Browser, isNullOrUndefined, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { isCollide } from '@syncfusion/ej2-popups';\nimport * as events from '../base/constant';\nimport * as classes from '../base/classes';\nimport { RenderType } from '../base/enum';\nimport { setToolbarStatus, updateUndoRedoStatus } from '../base/util';\nimport { BaseToolbar } from './base-toolbar';\nimport { DropDownButtons } from './dropdown-buttons';\n/**\n * `Quick toolbar` module is used to handle Quick toolbar actions.\n */\nvar BaseQuickToolbar = /** @class */ (function () {\n function BaseQuickToolbar(parent, locator) {\n this.parent = parent;\n this.locator = locator;\n this.isDOMElement = false;\n this.renderFactory = this.locator.getService('rendererFactory');\n this.contentRenderer = this.renderFactory.getRenderer(RenderType.Content);\n this.popupRenderer = this.renderFactory.getRenderer(RenderType.Popup);\n this.dropDownButtons = new DropDownButtons(this.parent, this.locator);\n }\n BaseQuickToolbar.prototype.appendPopupContent = function () {\n this.toolbarElement = createElement('div', { className: classes.CLS_QUICK_TB });\n this.element.appendChild(this.toolbarElement);\n };\n BaseQuickToolbar.prototype.render = function (args) {\n var className;\n if (args.popupType === 'Image') {\n className = classes.CLS_IMAGE_POP;\n }\n else if (args.popupType === 'Inline') {\n className = classes.CLS_INLINE_POP;\n }\n else {\n className = '';\n }\n var popupId = getUniqueID(args.popupType + '_Quick_Popup');\n this.stringItems = args.toolbarItems;\n this.element = createElement('div', { id: popupId, className: className + ' ' + classes.CLS_RTE_ELEMENTS });\n this.appendPopupContent();\n this.createToolbar(args.toolbarItems, args.mode);\n this.popupRenderer.renderPopup(this);\n this.addEventListener();\n };\n BaseQuickToolbar.prototype.createToolbar = function (items, mode) {\n this.quickTBarObj = new BaseToolbar(this.parent, this.locator);\n this.quickTBarObj.render({\n container: 'quick',\n target: this.toolbarElement,\n items: items,\n mode: mode\n });\n this.quickTBarObj.toolbarObj.refresh();\n };\n BaseQuickToolbar.prototype.setPosition = function (e) {\n var x;\n var y;\n var imgWrapper = closest(e.target, '.e-img-caption');\n var target = !isNOU(imgWrapper) ? imgWrapper : e.target;\n addClass([this.toolbarElement], [classes.CLS_RM_WHITE_SPACE]);\n var targetOffsetTop = target.offsetTop;\n var parentOffsetTop = window.pageYOffset + e.parentData.top;\n if ((targetOffsetTop - e.editTop) > e.popHeight) {\n y = parentOffsetTop + e.tBarElementHeight + (targetOffsetTop - e.editTop) - e.popHeight - 5;\n }\n else if (((e.editTop + e.editHeight) - (targetOffsetTop + target.offsetHeight)) > e.popHeight) {\n y = parentOffsetTop + e.tBarElementHeight + (targetOffsetTop - e.editTop) + target.offsetHeight + 5;\n }\n else {\n y = e.y;\n }\n if (target.offsetWidth > e.popWidth) {\n x = (target.offsetWidth / 2) - (e.popWidth / 2) + e.parentData.left + target.offsetLeft;\n }\n else {\n x = e.parentData.left + target.offsetLeft;\n }\n this.popupObj.position.X = ((x + e.popWidth) > e.parentData.right) ? e.parentData.right - e.popWidth : x;\n this.popupObj.position.Y = y;\n this.popupObj.dataBind();\n removeClass([this.toolbarElement], [classes.CLS_RM_WHITE_SPACE]);\n };\n BaseQuickToolbar.prototype.checkCollision = function (e, viewPort, type) {\n var x;\n var y;\n var parentTop = e.parentData.top;\n var contentTop = e.windowY + parentTop + e.tBarElementHeight;\n var collision = [];\n if (viewPort === 'document') {\n collision = isCollide(e.popup);\n }\n else {\n collision = isCollide(e.popup, e.parentElement);\n }\n for (var i = 0; i < collision.length; i++) {\n switch (collision[i]) {\n case 'top':\n if (viewPort === 'document') {\n y = e.windowY;\n }\n else {\n y = (window.pageYOffset + parentTop) + e.tBarElementHeight;\n }\n break;\n case 'bottom':\n var posY = void 0;\n if (viewPort === 'document') {\n if (type === 'inline') {\n posY = (e.y - e.popHeight - 10);\n }\n else {\n if ((e.windowHeight - (parentTop + e.tBarElementHeight)) > e.popHeight) {\n if ((contentTop - e.windowHeight) > e.popHeight) {\n posY = (contentTop + (e.windowHeight - parentTop)) - e.popHeight;\n }\n else {\n posY = contentTop;\n }\n }\n else {\n posY = e.windowY + (parentTop + e.tBarElementHeight);\n }\n }\n }\n else {\n if (e.target.tagName !== 'IMG') {\n posY = (e.parentData.bottom + window.pageYOffset) - e.popHeight - 10;\n }\n else {\n posY = (e.parentData.bottom + window.pageYOffset) - e.popHeight - 5;\n }\n }\n y = posY;\n break;\n case 'right':\n if (type === 'inline') {\n x = e.windowWidth - (e.popWidth + e.bodyRightSpace + 10);\n }\n else {\n x = e.parentData.right - e.popWidth;\n }\n break;\n case 'left':\n if (type === 'inline') {\n x = 0;\n }\n else {\n x = e.parentData.left;\n }\n break;\n }\n }\n this.popupObj.position.X = (x) ? x : this.popupObj.position.X;\n this.popupObj.position.Y = (y) ? y : this.popupObj.position.Y;\n this.popupObj.dataBind();\n };\n BaseQuickToolbar.prototype.showPopup = function (x, y, target) {\n var editPanelTop;\n var editPanelHeight;\n var bodyStyle = window.getComputedStyle(window.top.document.body);\n var bodyRight = parseFloat(bodyStyle.marginRight.split('px')[0]) + parseFloat(bodyStyle.paddingRight.split('px')[0]);\n var windowHeight = window.innerHeight;\n var windowWidth = window.innerWidth;\n var parent = this.parent.element;\n var toolbarAvail = !isNullOrUndefined(this.parent.getToolbar());\n var tbHeight = toolbarAvail && this.parent.toolbarModule.getToolbarHeight();\n var expTBHeight = toolbarAvail && this.parent.toolbarModule.getExpandTBarPopHeight();\n var tBarHeight = (toolbarAvail) ? (tbHeight + expTBHeight) : 0;\n addClass([this.element], [classes.CLS_HIDE]);\n if (Browser.isDevice) {\n addClass([this.parent.getToolbar()], [classes.CLS_HIDE]);\n }\n if (this.parent.iframeSettings.enable) {\n var cntEle = this.contentRenderer.getPanel().contentWindow;\n editPanelTop = cntEle.pageYOffset;\n editPanelHeight = cntEle.innerHeight;\n }\n else {\n var cntEle = closest(target, '.' + classes.CLS_RTE_CONTENT);\n editPanelTop = (cntEle) ? cntEle.scrollTop : 0;\n editPanelHeight = (cntEle) ? cntEle.offsetHeight : 0;\n }\n if (!this.parent.inlineMode.enable) {\n this.parent.disableToolbarItem(this.parent.toolbarSettings.items);\n this.parent.enableToolbarItem(['Undo', 'Redo']);\n }\n append([this.element], document.body);\n this.popupObj.position.X = x + 20;\n this.popupObj.position.Y = y + ((this.parent.iframeSettings.enable) ? 35 : 20);\n this.popupObj.dataBind();\n this.popupObj.show();\n this.dropDownButtons.renderDropDowns({\n container: this.toolbarElement,\n containerType: 'quick',\n items: this.stringItems\n });\n var showPopupData = {\n x: x, y: y,\n target: target,\n editTop: editPanelTop,\n editHeight: editPanelHeight,\n popup: this.popupObj.element,\n popHeight: this.popupObj.element.offsetHeight,\n popWidth: this.popupObj.element.offsetWidth,\n parentElement: parent,\n bodyRightSpace: bodyRight,\n windowY: window.pageYOffset,\n windowHeight: windowHeight,\n windowWidth: windowWidth,\n parentData: parent.getBoundingClientRect(),\n tBarElementHeight: tBarHeight\n };\n if (target.tagName === 'IMG') {\n this.setPosition(showPopupData);\n }\n if (!this.parent.inlineMode.enable) {\n this.checkCollision(showPopupData, 'parent', '');\n }\n this.checkCollision(showPopupData, 'document', ((this.parent.inlineMode.enable) ? 'inline' : ''));\n this.popupObj.hide();\n removeClass([this.element], [classes.CLS_HIDE]);\n this.popupObj.show({ name: 'ZoomIn', duration: 400 });\n setStyleAttribute(this.element, {\n maxWidth: this.parent.element.offsetWidth + 'px'\n });\n addClass([this.element], [classes.CLS_POP]);\n this.isDOMElement = true;\n };\n BaseQuickToolbar.prototype.hidePopup = function () {\n if (Browser.isDevice) {\n removeClass([this.parent.getToolbar()], [classes.CLS_HIDE]);\n }\n if (!isNullOrUndefined(this.parent.getToolbar()) && !this.parent.inlineMode.enable) {\n this.parent.enableToolbarItem(this.parent.toolbarSettings.items);\n }\n this.removeEleFromDOM();\n this.isDOMElement = false;\n };\n /**\n * @hidden\n */\n BaseQuickToolbar.prototype.addQTBarItem = function (item, index) {\n this.quickTBarObj.toolbarObj.addItems(this.quickTBarObj.getItems(item, 'toolbar'), index);\n };\n /**\n * @hidden\n */\n BaseQuickToolbar.prototype.removeQTBarItem = function (index) {\n this.quickTBarObj.toolbarObj.removeItems(index);\n };\n BaseQuickToolbar.prototype.removeEleFromDOM = function () {\n var element = this.popupObj.element;\n if (this.isDOMElement) {\n this.dropDownButtons.destroyDropDowns();\n removeClass([this.element], [classes.CLS_POP]);\n detach(element);\n }\n };\n BaseQuickToolbar.prototype.updateStatus = function (args) {\n var options = {\n args: args,\n dropDownModule: this.dropDownButtons,\n parent: this.parent,\n tbElements: selectAll('.' + classes.CLS_TB_ITEM, this.element),\n tbItems: this.quickTBarObj.toolbarObj.items\n };\n setToolbarStatus(options, true);\n if (!select('.e-rte-srctextarea', this.parent.element)) {\n updateUndoRedoStatus(this.parent.getBaseToolbarObject(), this.parent.formatter.editorManager.undoRedoManager.getUndoStatus());\n }\n };\n /**\n * Destroys the Quick toolbar.\n * @method destroy\n * @return {void}\n */\n BaseQuickToolbar.prototype.destroy = function () {\n if (this.popupObj && !this.popupObj.isDestroyed) {\n this.popupObj.destroy();\n this.removeEleFromDOM();\n }\n this.removeEventListener();\n };\n BaseQuickToolbar.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.destroy, this.destroy, this);\n if (this.parent.inlineMode.enable) {\n this.parent.on(events.toolbarUpdated, this.updateStatus, this);\n }\n };\n BaseQuickToolbar.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.destroy, this.destroy);\n if (this.parent.inlineMode.enable) {\n this.parent.off(events.toolbarUpdated, this.updateStatus);\n }\n };\n return BaseQuickToolbar;\n}());\nexport { BaseQuickToolbar };\n","import { Popup } from '@syncfusion/ej2-popups';\nimport { CLS_QUICK_POP } from '../base/classes';\nimport { popupOpen } from '../base/constant';\n/**\n * `Popup renderer` module is used to render popup in RichTextEditor.\n * @hidden\n */\nvar PopupRenderer = /** @class */ (function () {\n /**\n * Constructor for popup renderer module\n */\n function PopupRenderer(parent) {\n this.parent = parent;\n }\n PopupRenderer.prototype.popupOpen = function () {\n this.parent.notify(popupOpen, this);\n };\n PopupRenderer.prototype.renderPopup = function (args) {\n this.setPanel(args.element);\n this.renderPanel();\n args.popupObj = new Popup(args.element, {\n targetType: 'relative',\n relateTo: this.parent.element,\n open: this.popupOpen.bind(this)\n });\n this.popupObj = args.popupObj;\n args.popupObj.hide();\n };\n /**\n * The function is used to add popup class in Quick Toolbar\n */\n PopupRenderer.prototype.renderPanel = function () {\n this.getPanel().classList.add(CLS_QUICK_POP);\n };\n /**\n * Get the popup element of RichTextEditor\n * @return {Element}\n */\n PopupRenderer.prototype.getPanel = function () {\n return this.popupPanel;\n };\n /**\n * Set the popup element of RichTextEditor\n * @param {Element} panel\n */\n PopupRenderer.prototype.setPanel = function (panel) {\n this.popupPanel = panel;\n };\n return PopupRenderer;\n}());\nexport { PopupRenderer };\n","import { select, isNullOrUndefined, Browser, addClass, removeClass, EventHandler } from '@syncfusion/ej2-base';\nimport { RenderType } from '../base/enum';\nimport * as events from '../base/constant';\nimport { pageYOffset, hasClass } from '../base/util';\nimport { BaseQuickToolbar } from './base-quick-toolbar';\nimport { PopupRenderer } from '../renderer/popup-renderer';\nimport { CLS_INLINE_POP, CLS_INLINE } from '../base/classes';\n/**\n * `Quick toolbar` module is used to handle Quick toolbar actions.\n */\nvar QuickToolbar = /** @class */ (function () {\n function QuickToolbar(parent, locator) {\n this.parent = parent;\n this.locator = locator;\n this.renderFactory = this.locator.getService('rendererFactory');\n this.renderFactory.addRenderer(RenderType.Popup, new PopupRenderer(this.parent));\n this.addEventListener();\n }\n QuickToolbar.prototype.formatItems = function (items) {\n var formattedItems = [];\n items.forEach(function (item) {\n if (typeof item === 'string') {\n switch (item.toLocaleLowerCase()) {\n case 'open':\n formattedItems.push('openLink');\n break;\n case 'edit':\n formattedItems.push('editLink');\n break;\n case 'unlink':\n formattedItems.push('removeLink');\n break;\n default:\n formattedItems.push(item);\n break;\n }\n }\n else {\n formattedItems.push(item);\n }\n });\n return formattedItems;\n };\n QuickToolbar.prototype.getQTBarOptions = function (popType, mode, items, type) {\n return {\n popupType: popType,\n toolbarItems: items,\n mode: mode,\n renderType: type\n };\n };\n QuickToolbar.prototype.createQTBar = function (popupType, mode, items, type) {\n if (items.length < 1) {\n return null;\n }\n var qTBar = new BaseQuickToolbar(this.parent, this.locator);\n qTBar.render(this.getQTBarOptions(popupType, mode, this.formatItems(items), type));\n return qTBar;\n };\n QuickToolbar.prototype.initializeQuickToolbars = function () {\n this.parent.quickToolbarModule = this;\n this.contentRenderer = this.renderFactory.getRenderer(RenderType.Content);\n };\n QuickToolbar.prototype.onMouseDown = function (e) {\n this.parent.isBlur = false;\n this.parent.isRTE = true;\n };\n QuickToolbar.prototype.renderQuickToolbars = function () {\n if (this.linkQTBar || this.imageQTBar || this.textQTBar) {\n return;\n }\n this.linkQTBar = this.createQTBar('Link', 'Scrollable', this.parent.quickToolbarSettings.link, RenderType.LinkToolbar);\n this.renderFactory.addRenderer(RenderType.LinkToolbar, this.linkQTBar);\n this.textQTBar = this.createQTBar('Text', 'Scrollable', this.parent.quickToolbarSettings.text, RenderType.TextToolbar);\n this.renderFactory.addRenderer(RenderType.TextToolbar, this.textQTBar);\n this.imageQTBar = this.createQTBar('Image', 'MultiRow', this.parent.quickToolbarSettings.image, RenderType.ImageToolbar);\n this.renderFactory.addRenderer(RenderType.ImageToolbar, this.imageQTBar);\n if (this.linkQTBar) {\n EventHandler.add(this.linkQTBar.element, 'mousedown', this.onMouseDown, this);\n }\n if (this.imageQTBar) {\n EventHandler.add(this.imageQTBar.element, 'mousedown', this.onMouseDown, this);\n }\n if (this.textQTBar) {\n EventHandler.add(this.textQTBar.element, 'mousedown', this.onMouseDown, this);\n }\n };\n QuickToolbar.prototype.renderInlineQuickToolbar = function () {\n addClass([this.parent.element], [CLS_INLINE]);\n this.inlineQTBar = this.createQTBar('Inline', 'MultiRow', this.parent.toolbarSettings.items, RenderType.InlineToolbar);\n this.renderFactory.addRenderer(RenderType.InlineToolbar, this.inlineQTBar);\n EventHandler.add(this.inlineQTBar.element, 'mousedown', this.onMouseDown, this);\n };\n QuickToolbar.prototype.showInlineQTBar = function (x, y, target) {\n this.inlineQTBar.showPopup(x, y, target);\n };\n QuickToolbar.prototype.hideInlineQTBar = function () {\n if (this.inlineQTBar && !hasClass(this.inlineQTBar.element, 'e-popup-close')) {\n this.inlineQTBar.hidePopup();\n }\n };\n QuickToolbar.prototype.hideQuickToolbars = function () {\n if (this.linkQTBar && !hasClass(this.linkQTBar.element, 'e-popup-close')) {\n this.linkQTBar.hidePopup();\n }\n if (this.textQTBar && !hasClass(this.textQTBar.element, 'e-popup-close')) {\n this.textQTBar.hidePopup();\n }\n if (this.imageQTBar && !hasClass(this.imageQTBar.element, 'e-popup-close')) {\n this.imageQTBar.hidePopup();\n }\n if (this.parent.inlineMode.enable && !Browser.isDevice) {\n this.hideInlineQTBar();\n }\n };\n QuickToolbar.prototype.deBounce = function (x, y, target) {\n var _this = this;\n clearTimeout(this.deBouncer);\n this.deBouncer = window.setTimeout(function () { _this.showInlineQTBar(x, y, target); }, 1000);\n };\n QuickToolbar.prototype.mouseUpHandler = function (e) {\n var args = e.args;\n var range = this.parent.getRange();\n var target = args.target;\n if (isNullOrUndefined(select('.' + CLS_INLINE_POP, window.top.document.body))) {\n this.hideInlineQTBar();\n this.offsetX = args.pageX;\n this.offsetY = pageYOffset(args, this.parent.element, this.parent.iframeSettings.enable);\n if (target.nodeName === 'TEXTAREA') {\n this.showInlineQTBar(this.offsetX, this.offsetY, target);\n }\n else {\n if (target.tagName !== 'IMG' && target.tagName !== 'A') {\n if (this.parent.inlineMode.onSelection && range.collapsed) {\n return;\n }\n this.target = target;\n this.showInlineQTBar(this.offsetX, this.offsetY, target);\n }\n }\n }\n };\n QuickToolbar.prototype.keyDownHandler = function () {\n if (!isNullOrUndefined(select('.' + CLS_INLINE_POP, window.top.document))) {\n this.hideInlineQTBar();\n }\n };\n QuickToolbar.prototype.inlineQTBarMouseDownHandler = function () {\n if (!isNullOrUndefined(select('.' + CLS_INLINE_POP, window.top.document))) {\n this.hideInlineQTBar();\n }\n };\n QuickToolbar.prototype.keyUpHandler = function (e) {\n if (this.parent.inlineMode.onSelection) {\n return;\n }\n var args = e.args;\n this.deBounce(this.offsetX, this.offsetY, args.target);\n };\n QuickToolbar.prototype.getInlineBaseToolbar = function () {\n return this.inlineQTBar && this.inlineQTBar.quickTBarObj;\n };\n /**\n * Destroys the ToolBar.\n * @method destroy\n * @return {void}\n */\n QuickToolbar.prototype.destroy = function () {\n if (this.linkQTBar) {\n EventHandler.remove(this.linkQTBar.element, 'mousedown', this.onMouseDown);\n this.linkQTBar.destroy();\n }\n if (this.textQTBar) {\n EventHandler.remove(this.textQTBar.element, 'mousedown', this.onMouseDown);\n this.textQTBar.destroy();\n }\n if (this.imageQTBar) {\n EventHandler.remove(this.imageQTBar.element, 'mousedown', this.onMouseDown);\n this.imageQTBar.destroy();\n }\n if (this.inlineQTBar) {\n EventHandler.remove(this.inlineQTBar.element, 'mousedown', this.onMouseDown);\n this.inlineQTBar.destroy();\n }\n this.removeEventListener();\n };\n QuickToolbar.prototype.wireInlineQTBarEvents = function () {\n this.parent.on(events.mouseUp, this.mouseUpHandler, this);\n this.parent.on(events.mouseDown, this.inlineQTBarMouseDownHandler, this);\n this.parent.on(events.keyDown, this.keyDownHandler, this);\n this.parent.on(events.keyUp, this.keyUpHandler, this);\n this.parent.on(events.sourceCodeMouseDown, this.mouseUpHandler, this);\n this.parent.on(events.renderInlineToolbar, this.renderInlineQuickToolbar, this);\n };\n QuickToolbar.prototype.unWireInlineQTBarEvents = function () {\n this.parent.off(events.mouseUp, this.mouseUpHandler);\n this.parent.off(events.mouseDown, this.inlineQTBarMouseDownHandler);\n this.parent.off(events.keyDown, this.keyDownHandler);\n this.parent.off(events.keyUp, this.keyUpHandler);\n this.parent.off(events.sourceCodeMouseDown, this.mouseUpHandler);\n this.parent.off(events.renderInlineToolbar, this.renderInlineQuickToolbar);\n };\n QuickToolbar.prototype.toolbarUpdated = function (args) {\n if (this.linkQTBar && !hasClass(this.linkQTBar.element, 'e-popup-close')) {\n this.linkQTBar.hidePopup();\n }\n if (this.imageQTBar && !hasClass(this.imageQTBar.element, 'e-popup-close')) {\n this.imageQTBar.hidePopup();\n }\n };\n QuickToolbar.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.initialEnd, this.initializeQuickToolbars, this);\n this.parent.on(events.mouseDown, this.renderQuickToolbars, this);\n this.parent.on(events.toolbarUpdated, this.toolbarUpdated, this);\n if (this.parent.inlineMode.enable && !Browser.isDevice) {\n this.wireInlineQTBarEvents();\n }\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n if (this.parent.quickToolbarSettings.actionOnScroll === 'hide') {\n this.parent.on(events.scroll, this.hideQuickToolbars, this);\n }\n this.parent.on(events.focusChange, this.hideQuickToolbars, this);\n this.parent.on(events.iframeMouseDown, this.onIframeMouseDown, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.keyDown, this.onKeyDown, this);\n };\n QuickToolbar.prototype.onKeyDown = function (e) {\n var args = e.args;\n if (args.which === 8 || args.which === 46) {\n if (this.imageQTBar && !hasClass(this.imageQTBar.element, 'e-popup-close')) {\n this.imageQTBar.hidePopup();\n }\n }\n };\n QuickToolbar.prototype.onIframeMouseDown = function () {\n this.hideQuickToolbars();\n this.hideInlineQTBar();\n };\n QuickToolbar.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initialEnd, this.initializeQuickToolbars);\n this.parent.off(events.mouseDown, this.renderQuickToolbars);\n this.parent.off(events.toolbarUpdated, this.toolbarUpdated);\n if (this.parent.inlineMode.enable && !Browser.isDevice) {\n this.unWireInlineQTBarEvents();\n }\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n if (this.parent.quickToolbarSettings.actionOnScroll === 'hide') {\n this.parent.off(events.scroll, this.hideQuickToolbars);\n }\n this.parent.off(events.focusChange, this.hideQuickToolbars);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.iframeMouseDown, this.onIframeMouseDown);\n this.parent.off(events.keyDown, this.onKeyDown);\n };\n /**\n * Called internally if any of the property value changed.\n * @hidden\n */\n QuickToolbar.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName()) {\n return;\n }\n if (this.inlineQTBar) {\n removeClass([this.parent.element], [CLS_INLINE]);\n this.unWireInlineQTBarEvents();\n this.hideInlineQTBar();\n if (this.parent.inlineMode.enable && !Browser.isDevice) {\n addClass([this.parent.element], [CLS_INLINE]);\n this.wireInlineQTBarEvents();\n }\n }\n };\n /**\n * For internal use only - Get the module name.\n */\n QuickToolbar.prototype.getModuleName = function () {\n return 'quickToolbar';\n };\n return QuickToolbar;\n}());\nexport { QuickToolbar };\n","import { createElement, detach } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { RenderType } from '../base/enum';\nimport { CLS_COUNT, CLS_WARNING, CLS_ERROR } from '../base/classes';\n/**\n * `Count` module is used to handle Count actions.\n */\nvar Count = /** @class */ (function () {\n function Count(parent, serviceLocator) {\n this.parent = parent;\n this.locator = serviceLocator;\n this.renderFactory = this.locator.getService('rendererFactory');\n this.addEventListener();\n }\n Count.prototype.initializeInstance = function () {\n this.contentRenderer = this.renderFactory.getRenderer(RenderType.Content);\n this.editPanel = this.contentRenderer.getEditPanel();\n };\n Count.prototype.renderCount = function () {\n this.initializeInstance();\n this.element = createElement('span', { className: CLS_COUNT });\n this.contentRenderer.getPanel().parentElement.appendChild(this.element);\n this.appendCount();\n if (this.parent.maxLength !== -1) {\n this.charCountBackground(this.htmlLength);\n }\n };\n Count.prototype.appendCount = function () {\n var htmlText = this.editPanel.textContent.trim();\n this.htmlLength = htmlText.length;\n var string = this.parent.maxLength === -1 ? this.htmlLength : this.htmlLength + ' / ' + this.parent.maxLength;\n this.element.innerHTML = string;\n };\n Count.prototype.charCountBackground = function (htmlLength) {\n var percentage = (htmlLength / this.parent.maxLength) * 100;\n if (percentage < 85) {\n this.element.classList.remove(CLS_WARNING);\n this.element.classList.remove(CLS_ERROR);\n }\n else if (percentage > 85 && percentage <= 90) {\n this.element.classList.remove(CLS_ERROR);\n this.element.classList.add(CLS_WARNING);\n }\n else if (percentage > 90) {\n this.element.classList.remove(CLS_WARNING);\n this.element.classList.add(CLS_ERROR);\n }\n };\n Count.prototype.refresh = function () {\n this.appendCount();\n if (this.parent.maxLength !== -1) {\n this.charCountBackground(this.htmlLength);\n }\n };\n Count.prototype.restrict = function (e) {\n if (this.parent.showCharCount) {\n var element = e.args.currentTarget.textContent.trim();\n var array = [8, 16, 17, 37, 38, 39, 40, 65];\n var arrayKey = void 0;\n for (var i = 0; i <= array.length - 1; i++) {\n if (e.args.which === array[i]) {\n if (e.args.ctrlKey && e.args.which === 65) {\n return;\n }\n else if (e.args.which !== 65) {\n arrayKey = array[i];\n return;\n }\n }\n }\n if ((element.length >= this.parent.maxLength && this.parent.maxLength !== -1) && e.args.which !== arrayKey) {\n e.args.preventDefault();\n }\n }\n };\n /**\n * Destroys the Count.\n * @method destroy\n * @return {void}\n */\n Count.prototype.destroy = function () {\n this.removeEventListener();\n };\n Count.prototype.toggle = function (e) {\n this.element.style.display = (e.member === 'viewSource') ? 'none' : 'block';\n };\n Count.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n if (this.parent.showCharCount) {\n this.parent.on(events.initialEnd, this.renderCount, this);\n this.parent.on(events.keyUp, this.refresh, this);\n this.parent.on(events.keyDown, this.restrict, this);\n this.parent.on(events.count, this.refresh, this);\n this.parent.on(events.mouseDown, this.refresh, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.sourceCode, this.toggle, this);\n this.parent.on(events.updateSource, this.toggle, this);\n }\n };\n Count.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n detach(this.element);\n this.parent.off(events.initialEnd, this.renderCount);\n this.parent.off(events.keyUp, this.refresh);\n this.parent.off(events.keyDown, this.restrict);\n this.parent.off(events.count, this.refresh);\n this.parent.off(events.mouseDown, this.refresh);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.sourceCode, this.toggle);\n this.parent.off(events.updateSource, this.toggle);\n };\n /**\n * For internal use only - Get the module name.\n */\n Count.prototype.getModuleName = function () {\n return 'count';\n };\n return Count;\n}());\nexport { Count };\n","import { select } from '@syncfusion/ej2-base';\nimport { RenderType } from '../base/enum';\nimport * as events from '../base/constant';\nimport * as classes from '../base/classes';\nimport { getIndex } from '../base/util';\nimport { templateItems, tools } from '../models/items';\n/**\n * `Color Picker` module is used to handle ColorPicker actions.\n */\nvar ColorPickerInput = /** @class */ (function () {\n function ColorPickerInput(parent, serviceLocator) {\n this.parent = parent;\n this.locator = serviceLocator;\n this.renderFactory = this.locator.getService('rendererFactory');\n this.addEventListener();\n }\n ColorPickerInput.prototype.initializeInstance = function () {\n this.toolbarRenderer = this.renderFactory.getRenderer(RenderType.Toolbar);\n };\n ColorPickerInput.prototype.renderColorPickerInput = function (args) {\n var _this = this;\n this.initializeInstance();\n var suffixID = args.containerType;\n var tbElement = args.container;\n templateItems.forEach(function (item) {\n if (getIndex(item, args.items) !== -1) {\n switch (item) {\n case 'fontcolor':\n var targetID = _this.parent.getID() + '_' + suffixID + '_FontColor_Target';\n var fontNode = document.createElement('input');\n fontNode.id = targetID;\n fontNode.classList.add(classes.CLS_FONT_COLOR_TARGET);\n document.body.appendChild(fontNode);\n var args_1 = {\n cssClass: tools[item].icon + ' ' + classes.CLS_RTE_ELEMENTS + ' ' + classes.CLS_ICONS,\n value: tools[item].value,\n command: tools[item].command,\n subCommand: tools[item].subCommand,\n element: select('#' + _this.parent.getID() + '_' + suffixID + '_FontColor', tbElement),\n target: ('#' + targetID)\n };\n _this.fontColorPicker = _this.toolbarRenderer.renderColorPicker(args_1, 'fontcolor');\n _this.fontColorDropDown = _this.toolbarRenderer.renderColorPickerDropDown(args_1, 'fontcolor', _this.fontColorPicker);\n break;\n case 'backgroundcolor':\n targetID = _this.parent.getID() + '_' + suffixID + '_BackgroundColor_Target';\n var backNode = document.createElement('input');\n backNode.id = targetID;\n backNode.classList.add(classes.CLS_BACKGROUND_COLOR_TARGET);\n document.body.appendChild(backNode);\n args_1 = {\n cssClass: tools[item].icon + ' ' + classes.CLS_RTE_ELEMENTS + ' ' + classes.CLS_ICONS,\n value: tools[item].value,\n command: tools[item].command,\n subCommand: tools[item].subCommand,\n element: select('#' + _this.parent.getID() + '_' + suffixID + '_BackgroundColor', tbElement),\n target: ('#' + targetID)\n };\n _this.backgroundColorPicker = _this.toolbarRenderer.renderColorPicker(args_1, 'backgroundcolor');\n _this.backgroundColorDropDown = _this.toolbarRenderer.renderColorPickerDropDown(args_1, 'backgroundcolor', _this.backgroundColorPicker);\n break;\n }\n }\n });\n };\n ColorPickerInput.prototype.destroy = function () {\n this.removeEventListener();\n this.destroyColorPicker();\n };\n ColorPickerInput.prototype.destroyColorPicker = function () {\n if (this.fontColorPicker && !this.fontColorPicker.isDestroyed) {\n this.fontColorPicker.destroy();\n }\n if (this.backgroundColorPicker && !this.backgroundColorPicker.isDestroyed) {\n this.backgroundColorPicker.destroy();\n }\n if (this.fontColorDropDown && !this.fontColorDropDown.isDestroyed) {\n this.fontColorDropDown.destroy();\n }\n if (this.backgroundColorDropDown && !this.backgroundColorDropDown.isDestroyed) {\n this.backgroundColorDropDown.destroy();\n }\n };\n ColorPickerInput.prototype.addEventListener = function () {\n this.parent.on(events.toolbarRenderComplete, this.renderColorPickerInput, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.destroyColorPicker, this.destroyColorPicker, this);\n };\n ColorPickerInput.prototype.removeEventListener = function () {\n this.parent.off(events.toolbarRenderComplete, this.renderColorPickerInput);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.destroyColorPicker, this.destroyColorPicker);\n };\n return ColorPickerInput;\n}());\nexport { ColorPickerInput };\n","/**\n * MarkdownSelection internal module\n * @hidden\n */\nvar MarkdownSelection = /** @class */ (function () {\n function MarkdownSelection() {\n }\n MarkdownSelection.prototype.getLineNumber = function (textarea, point) {\n return textarea.value.substr(0, point).split('\\n').length;\n };\n MarkdownSelection.prototype.getSelectedText = function (textarea) {\n var start = textarea.selectionStart;\n var end = textarea.selectionEnd;\n return textarea.value.substring(start, end);\n };\n MarkdownSelection.prototype.getAllParents = function (value) {\n return value.split('\\n');\n };\n MarkdownSelection.prototype.getSelectedLine = function (textarea) {\n var lines = this.getAllParents(textarea.value);\n var index = this.getLineNumber(textarea, textarea.selectionStart);\n return lines[index - 1];\n };\n MarkdownSelection.prototype.getLine = function (textarea, index) {\n var lines = this.getAllParents(textarea.value);\n return lines[index];\n };\n MarkdownSelection.prototype.getSelectedParentPoints = function (textarea) {\n var lines = this.getAllParents(textarea.value);\n var start = this.getLineNumber(textarea, textarea.selectionStart);\n var end = this.getLineNumber(textarea, textarea.selectionEnd);\n var parents = this.getSelectedText(textarea).split('\\n');\n var selectedPoints = [];\n var selectedLine = lines[start - 1];\n var startLength = lines.slice(0, start - 1).join('').length;\n var firstPoint = {};\n firstPoint.line = start - 1;\n firstPoint.start = startLength + firstPoint.line;\n firstPoint.end = selectedLine !== '' ? firstPoint.start +\n selectedLine.length + 1 : firstPoint.start + selectedLine.length;\n firstPoint.text = selectedLine;\n selectedPoints.push(firstPoint);\n if (parents.length > 1) {\n for (var i = 1; i < parents.length - 1; i++) {\n var points = {};\n points.line = selectedPoints[i - 1].line + 1;\n points.start = parents[i] !== '' ? selectedPoints[i - 1].end : selectedPoints[i - 1].end;\n points.end = points.start + parents[i].length + 1;\n points.text = parents[i];\n selectedPoints.push(points);\n }\n var lastPoint = {};\n lastPoint.line = selectedPoints[selectedPoints.length - 1].line + 1;\n lastPoint.start = selectedPoints[selectedPoints.length - 1].end;\n lastPoint.end = lastPoint.start + lines[end - 1].length + 1;\n lastPoint.text = lines[end - 1];\n selectedPoints.push(lastPoint);\n }\n return selectedPoints;\n };\n MarkdownSelection.prototype.setSelection = function (textarea, start, end) {\n textarea.setSelectionRange(start, end);\n textarea.focus();\n };\n MarkdownSelection.prototype.save = function (start, end) {\n this.selectionStart = start;\n this.selectionEnd = end;\n };\n MarkdownSelection.prototype.restore = function (textArea) {\n this.setSelection(textArea, this.selectionStart, this.selectionEnd);\n };\n MarkdownSelection.prototype.isStartWith = function (line, command) {\n var isStart = false;\n if (line) {\n var reg = line.trim() === command.trim() ?\n new RegExp('^(' + this.replaceSpecialChar(command.trim()) + ')', 'gim') :\n new RegExp('^(' + this.replaceSpecialChar(command) + ')', 'gim');\n isStart = reg.test(line.trim());\n }\n return isStart;\n };\n MarkdownSelection.prototype.replaceSpecialChar = function (value) {\n return value.replace(/[`~!@#$%^&*()_|+\\-=?;:'\",.<>\\{\\}\\[\\]\\\\\\/]/g, '\\\\$&');\n };\n MarkdownSelection.prototype.isClear = function (parents, regex) {\n var isClear = false;\n for (var i = 0; i < parents.length; i++) {\n if (new RegExp(regex, 'gim').test(parents[i].text)) {\n return true;\n }\n }\n return isClear;\n };\n MarkdownSelection.prototype.getRegex = function (syntax) {\n syntax = this.replaceSpecialChar(syntax);\n var regex = '^(' + syntax + ')|^(' + syntax.trim() + ')';\n return new RegExp(regex);\n };\n MarkdownSelection.prototype.getSelectedInlinePoints = function (textarea) {\n var start = textarea.selectionStart;\n var end = textarea.selectionEnd;\n var selection = this.getSelectedText(textarea);\n return { start: start, end: end, text: selection };\n };\n return MarkdownSelection;\n}());\nexport { MarkdownSelection };\n","import { MarkdownSelection } from '../../markdown-parser/plugin/markdown-selection';\nimport * as events from '../base/constant';\n/**\n * MarkdownToolbarStatus module for refresh the toolbar status\n */\nvar MarkdownToolbarStatus = /** @class */ (function () {\n function MarkdownToolbarStatus(parent) {\n this.toolbarStatus = {\n bold: false,\n italic: false,\n subscript: false,\n superscript: false,\n strikethrough: false,\n orderedlist: false,\n uppercase: false,\n inlinecode: false,\n unorderedlist: false,\n underline: false,\n alignments: null,\n backgroundcolor: null,\n fontcolor: null,\n fontname: null,\n fontsize: null,\n formats: null\n };\n this.selection = new MarkdownSelection();\n this.parent = parent;\n this.element = this.parent.contentModule.getEditPanel();\n this.addEventListener();\n }\n MarkdownToolbarStatus.prototype.addEventListener = function () {\n this.parent.on(events.toolbarRefresh, this.onRefreshHandler, this);\n this.parent.on(events.destroy, this.removeEventListener, this);\n };\n MarkdownToolbarStatus.prototype.removeEventListener = function () {\n this.parent.off(events.toolbarRefresh, this.onRefreshHandler);\n this.parent.off(events.destroy, this.onRefreshHandler);\n };\n MarkdownToolbarStatus.prototype.onRefreshHandler = function (args) {\n var parentsLines = this.selection.getSelectedParentPoints(this.element);\n this.toolbarStatus = {\n orderedlist: this.isListsApplied(parentsLines, 'OL'),\n unorderedlist: this.isListsApplied(parentsLines, 'UL'),\n formats: this.currentFormat(parentsLines),\n bold: this.parent.formatter.editorManager.mdSelectionFormats.isAppliedCommand('Bold'),\n italic: this.parent.formatter.editorManager.mdSelectionFormats.isAppliedCommand('Italic'),\n inlinecode: this.parent.formatter.editorManager.mdSelectionFormats.isAppliedCommand('InlineCode'),\n strikethrough: this.parent.formatter.editorManager.mdSelectionFormats.isAppliedCommand('StrikeThrough'),\n subscript: this.parent.formatter.editorManager.mdSelectionFormats.isAppliedCommand('SubScript'),\n superscript: this.parent.formatter.editorManager.mdSelectionFormats.isAppliedCommand('SuperScript'),\n uppercase: this.parent.formatter.editorManager.mdSelectionFormats.isAppliedCommand('UpperCase')\n };\n this.parent.notify(events.toolbarUpdated, this.toolbarStatus);\n };\n MarkdownToolbarStatus.prototype.isListsApplied = function (lines, type) {\n var isApply = true;\n for (var i = 0; i < lines.length; i++) {\n if (!this.selection.isStartWith(lines[i].text, this.parent.formatter.listTags[type])) {\n isApply = false;\n break;\n }\n }\n return isApply;\n };\n MarkdownToolbarStatus.prototype.currentFormat = function (lines) {\n var format = 'p';\n var keys = Object.keys(this.parent.formatter.formatTags);\n var direction = this.element.selectionDirection;\n var checkLine = direction === 'backward' ? lines[0].text : lines[lines.length - 1].text;\n for (var i = 0; i < keys.length; i++) {\n if (keys[i] !== 'pre' && this.selection.isStartWith(checkLine, this.parent.formatter.formatTags[keys[i]])) {\n format = keys[i];\n break;\n }\n else if (keys[i] === 'pre') {\n var parentLines = this.selection.getAllParents(this.element.value);\n var firstPrevText = parentLines[lines[0].line - 1];\n var lastNextText = parentLines[lines.length + 1];\n if (this.selection.isStartWith(firstPrevText, this.parent.formatter.formatTags[keys[i]].split('\\n')[0]) &&\n this.selection.isStartWith(lastNextText, this.parent.formatter.formatTags[keys[i]].split('\\n')[0])) {\n format = keys[i];\n break;\n }\n }\n }\n return format;\n };\n return MarkdownToolbarStatus;\n}());\nexport { MarkdownToolbarStatus };\n","import * as events from '../base/constant';\n/**\n * `ExecCommandCallBack` module is used to run the editor manager command\n */\nvar ExecCommandCallBack = /** @class */ (function () {\n function ExecCommandCallBack(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n ExecCommandCallBack.prototype.addEventListener = function () {\n this.parent.on(events.execCommandCallBack, this.commandCallBack, this);\n this.parent.on(events.destroy, this.removeEventListener, this);\n };\n ExecCommandCallBack.prototype.commandCallBack = function (args) {\n if (args.requestType !== 'Undo' && args.requestType !== 'Redo') {\n this.parent.formatter.saveData();\n }\n this.parent.notify(events.toolbarRefresh, args);\n this.parent.notify(events.count, {});\n };\n ExecCommandCallBack.prototype.removeEventListener = function () {\n this.parent.off(events.execCommandCallBack, this.commandCallBack);\n this.parent.off(events.destroy, this.removeEventListener);\n };\n return ExecCommandCallBack;\n}());\nexport { ExecCommandCallBack };\n","/**\n * Constant values for Common\n */\n/* Keydown event trigger\n * @hidden\n */\nexport var KEY_DOWN = 'keydown';\n/* Undo and Redo action HTML plugin events\n * @hidden\n */\nexport var ACTION = 'action';\n/* Formats plugin events\n * @hidden\n */\nexport var FORMAT_TYPE = 'format-type';\n/* Keydown handler event trigger\n * @hidden\n */\nexport var KEY_DOWN_HANDLER = 'keydown-handler';\n/* List plugin events\n * @hidden\n */\nexport var LIST_TYPE = 'list-type';\n/* Keyup handler event trigger\n * @hidden\n */\nexport var KEY_UP_HANDLER = 'keyup-handler';\n/* Keyup event trigger\n * @hidden\n */\nexport var KEY_UP = 'keyup';\n","import { extend, isNullOrUndefined, Browser } from '@syncfusion/ej2-base';\nimport * as CONSTANT from '../base/constant';\nimport { updateUndoRedoStatus } from '../base/util';\nimport { KEY_DOWN, KEY_UP } from './../../common/constant';\n/**\n * Formatter\n * @hidden\n */\nvar Formatter = /** @class */ (function () {\n function Formatter() {\n }\n /**\n * To execute the command\n * @param {IRichTextEditor} self\n * @param {ActionBeginEventArgs} args\n * @param {MouseEvent|KeyboardEvent} event\n * @param {NotifyArgs} value\n */\n Formatter.prototype.process = function (self, args, event, value) {\n var selection = self.contentModule.getDocument().getSelection();\n var range = (selection.rangeCount > 0) ? selection.getRangeAt(selection.rangeCount - 1) : null;\n if (!isNullOrUndefined(args)\n && args.item.command\n && args.item.command !== 'Actions'\n && args.item.command !== 'Links'\n && args.item.command !== 'Images'\n && range\n && !(self.contentModule.getEditPanel().contains(this.getAncestorNode(range.commonAncestorContainer))\n || self.contentModule.getEditPanel() === range.commonAncestorContainer\n || self.contentModule.getPanel() === range.commonAncestorContainer)) {\n return;\n }\n if (isNullOrUndefined(args)) {\n if (event.action !== 'tab' &&\n event.action !== 'enter' &&\n event.action !== 'space' &&\n event.action !== 'escape') {\n args = {};\n extend(args, args, { originalEvent: event, cancel: false, requestType: event.action }, true);\n self.trigger(CONSTANT.actionBegin, args);\n if (args.cancel) {\n if (event.action === 'paste') {\n event.preventDefault();\n }\n return;\n }\n }\n this.editorManager.observer.notify((event.type === 'keydown' ? KEY_DOWN : KEY_UP), {\n event: event,\n callBack: this.onSuccess.bind(this, self),\n value: value\n });\n }\n else if (!isNullOrUndefined(args) && args.item.command && args.item.subCommand && ((args.item.command !== args.item.subCommand\n && args.item.command !== 'Font')\n || ((args.item.subCommand === 'FontName' || args.item.subCommand === 'FontSize') && args.name === 'dropDownSelect')\n || ((args.item.subCommand === 'BackgroundColor' || args.item.subCommand === 'FontColor')\n && args.name === 'colorPickerChanged'))) {\n extend(args, args, { requestType: args.item.subCommand, cancel: false }, true);\n self.trigger(CONSTANT.actionBegin, args);\n if (args.cancel) {\n return;\n }\n if (this.getUndoRedoStack().length === 0 && args.item.command !== 'Links' && args.item.command !== 'Images') {\n this.saveData();\n }\n self.isBlur = false;\n self.contentModule.getEditPanel().focus();\n this.editorManager.execCommand(args.item.command, args.item.subCommand, event, this.onSuccess.bind(this, self), args.item.value, value);\n }\n this.enableUndo(self);\n };\n Formatter.prototype.getAncestorNode = function (node) {\n node = node.nodeType === 3 ? node.parentNode : node;\n return node;\n };\n Formatter.prototype.onKeyHandler = function (self, e) {\n var _this = this;\n this.editorManager.observer.notify(KEY_UP, {\n event: e, callBack: function () {\n _this.enableUndo(self);\n }\n });\n };\n Formatter.prototype.onSuccess = function (self, events) {\n this.enableUndo(self);\n self.notify(CONSTANT.execCommandCallBack, events);\n self.trigger(CONSTANT.actionComplete, events);\n if (events.requestType === 'Images' || events.requestType === 'Links' && self.editorMode === 'HTML') {\n var args = events;\n self.notify(CONSTANT.insertCompleted, {\n args: args.event, type: events.requestType, isNotify: true,\n elements: args.elements\n });\n }\n };\n /**\n * Save the data for undo and redo action.\n */\n Formatter.prototype.saveData = function (e) {\n this.editorManager.undoRedoManager.saveData(e);\n };\n Formatter.prototype.getUndoStatus = function () {\n return this.editorManager.undoRedoManager.getUndoStatus();\n };\n Formatter.prototype.getUndoRedoStack = function () {\n return this.editorManager.undoRedoManager.undoRedoStack;\n };\n Formatter.prototype.enableUndo = function (self) {\n var status = this.getUndoStatus();\n if (self.inlineMode.enable && !Browser.isDevice) {\n updateUndoRedoStatus(self.quickToolbarModule.inlineQTBar.quickTBarObj, status);\n }\n else {\n if (self.toolbarModule) {\n updateUndoRedoStatus(self.toolbarModule.baseToolbar, status);\n }\n }\n };\n return Formatter;\n}());\nexport { Formatter };\n","/**\n * Constant values for Markdown Parser\n */\n/* List plugin events\n * @hidden\n */\nexport var LISTS_COMMAND = 'lists-commands';\n/* selectioncommand plugin events\n * @hidden\n */\nexport var selectionCommand = 'command-type';\n/* Link plugin events\n * @hidden\n */\nexport var LINK_COMMAND = 'link-commands';\n/* Clear plugin events\n * @hidden\n */\nexport var CLEAR_COMMAND = 'clear-commands';\n","import * as CONSTANT from './../base/constant';\nimport { extend } from '@syncfusion/ej2-base';\nimport * as EVENTS from './../../common/constant';\n/**\n * Lists internal component\n * @hidden\n */\nvar MDLists = /** @class */ (function () {\n /**\n * Constructor for creating the Lists plugin\n * @hidden\n */\n function MDLists(options) {\n extend(this, this, options, true);\n this.selection = this.parent.markdownSelection;\n this.addEventListener();\n }\n MDLists.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.LISTS_COMMAND, this.applyListsHandler, this);\n this.parent.observer.on(EVENTS.KEY_DOWN_HANDLER, this.keyDownHandler, this);\n this.parent.observer.on(EVENTS.KEY_UP_HANDLER, this.keyUpHandler, this);\n };\n MDLists.prototype.keyDownHandler = function (event) {\n switch (event.event.which) {\n case 9:\n this.tabKey(event);\n break;\n }\n switch (event.event.action) {\n case 'ordered-list':\n this.applyListsHandler({ subCommand: 'OL', callBack: event.callBack });\n event.event.preventDefault();\n break;\n case 'unordered-list':\n this.applyListsHandler({ subCommand: 'UL', callBack: event.callBack });\n event.event.preventDefault();\n break;\n }\n };\n MDLists.prototype.keyUpHandler = function (event) {\n switch (event.event.which) {\n case 13:\n this.enterKey(event);\n break;\n }\n };\n MDLists.prototype.tabKey = function (event) {\n var textArea = this.parent.element;\n this.selection.save(textArea.selectionStart, textArea.selectionEnd);\n var start = textArea.selectionStart;\n var end = textArea.selectionEnd;\n var parents = this.selection.getSelectedParentPoints(textArea);\n var addedLength = 0;\n var isNotFirst = this.isNotFirstLine(textArea, parents[0]);\n if (!isNotFirst && !event.event.shiftKey) {\n this.restore(textArea, start, end + addedLength, event);\n return;\n }\n var regex = this.getListRegex();\n this.currentAction = this.getAction(parents[0].text);\n for (var i = 0; i < parents.length; i++) {\n var prevIndex = event.event.shiftKey ? parents[i].line : parents[i].line - 1;\n var prevLine = this.selection.getLine(textArea, prevIndex);\n if (prevLine && (!event.event.shiftKey && isNotFirst || (event.event.shiftKey && /^(\\t)/.test(prevLine)))) {\n prevLine = prevLine.trim();\n if (regex.test(prevLine)) {\n event.event.preventDefault();\n var tabSpace = '\\t';\n var tabSpaceLength = event.event.shiftKey ? -tabSpace.length : tabSpace.length;\n var splitTab = parents[i].text.split('\\t');\n parents[i].text = event.event.shiftKey ? splitTab.splice(1, splitTab.length).join('\\t') : tabSpace + parents[i].text;\n textArea.value = textArea.value.substr(0, parents[i].start) + parents[i].text + '\\n' +\n textArea.value.substr(parents[i].end, textArea.value.length);\n start = i === 0 ? start + tabSpaceLength : start;\n addedLength += tabSpaceLength;\n if (parents.length !== 1) {\n for (var j = i; j < parents.length; j++) {\n parents[j].start = j !== 0 ? parents[j].start + tabSpaceLength : parents[j].start;\n parents[j].end = parents[j].end + tabSpaceLength;\n }\n }\n }\n }\n }\n this.restore(textArea, start, end + addedLength, event);\n };\n MDLists.prototype.getTabSpace = function (line) {\n var split = line.split('\\t');\n var tabs = '';\n for (var i = 0; i < split.length; i++) {\n if (split[i] === '') {\n tabs += '\\t';\n }\n else {\n break;\n }\n }\n return tabs;\n };\n MDLists.prototype.isNotFirstLine = function (textArea, points) {\n var currentLine = points.text;\n var prevIndex = points.line - 1;\n var prevLine = this.selection.getLine(textArea, prevIndex);\n var regex = this.getListRegex();\n var isNotFirst = false;\n if (prevLine && regex.test(prevLine.trim())) {\n var curTabSpace = this.getTabSpace(currentLine);\n var prevTabSpace = this.getTabSpace(prevLine);\n isNotFirst = curTabSpace === prevTabSpace ? true : isNotFirst;\n for (; prevTabSpace.length > curTabSpace.length; null) {\n prevIndex = prevIndex - 1;\n prevLine = this.selection.getLine(textArea, prevIndex);\n if (regex.test(prevLine.trim())) {\n prevTabSpace = this.getTabSpace(prevLine);\n if (prevTabSpace.length <= curTabSpace.length) {\n isNotFirst = true;\n break;\n }\n }\n }\n }\n return isNotFirst;\n };\n MDLists.prototype.getAction = function (line) {\n var ol = line.trim().split(new RegExp('^(' + this.selection.replaceSpecialChar(this.syntax.OL) + ')'))[1];\n var ul = line.trim().split(new RegExp('^(' + this.selection.replaceSpecialChar(this.syntax.UL) + ')'))[1];\n return (ol ? 'OL' : 'UL');\n };\n MDLists.prototype.enterKey = function (event) {\n var textArea = this.parent.element;\n this.selection.save(textArea.selectionStart, textArea.selectionEnd);\n var start = textArea.selectionStart;\n var end = textArea.selectionEnd;\n var parents = this.selection.getSelectedParentPoints(textArea);\n var prevLine = this.selection.getLine(textArea, parents[0].line - 1);\n var regex = this.getListRegex();\n if (regex.test(prevLine.trim()) && prevLine.trim().replace(regex, '') !== '') {\n var addedLength = 0;\n var tabSpace = this.getTabSpace(prevLine);\n this.currentAction = this.getAction(prevLine);\n var prefix = this.syntax[this.currentAction];\n parents[0].text = tabSpace + prefix + parents[0].text;\n textArea.value = textArea.value.substr(0, parents[0].start) + parents[0].text +\n textArea.value.substr(parents[0].end, textArea.value.length);\n start = start + prefix.length + tabSpace.length;\n addedLength += prefix.length + tabSpace.length;\n this.restore(textArea, start, end + addedLength, event);\n }\n };\n MDLists.prototype.applyListsHandler = function (e) {\n var textArea = this.parent.element;\n this.selection.save(textArea.selectionStart, textArea.selectionEnd);\n this.currentAction = e.subCommand;\n var start = textArea.selectionStart;\n var end = textArea.selectionEnd;\n var addedLength = 0;\n var parents = this.selection.getSelectedParentPoints(textArea);\n var prefix = '';\n var regex = this.syntax[this.currentAction];\n for (var i = 0; i < parents.length; i++) {\n if (!this.selection.isStartWith(parents[i].text, regex)) {\n if (parents[i].text === '' && i === 0) {\n this.selection.save(start, end);\n if (parents.length !== 1) {\n for (var j = i; j < parents.length; j++) {\n parents[j].start = j !== 0 ? 1 + parents[j].start : parents[j].start;\n parents[j].end = 1 + parents[j].end;\n }\n }\n }\n var replace = this.appliedLine(parents[i].text);\n prefix = replace.line ? prefix : this.syntax[this.currentAction];\n parents[i].text = replace.line ? replace.line : prefix + parents[i].text;\n replace.space = replace.space ? replace.space : 0;\n textArea.value = textArea.value.substr(0, parents[i].start) + parents[i].text + '\\n' +\n textArea.value.substr(parents[i].end, textArea.value.length);\n start = i === 0 ? (start + prefix.length + replace.space) > 0 ?\n start + prefix.length + replace.space : 0 : start;\n addedLength += prefix.length + replace.space;\n if (parents.length !== 1) {\n for (var j = i; j < parents.length; j++) {\n parents[j].start = j !== 0 ? prefix.length +\n parents[j].start + replace.space : parents[j].start;\n parents[j].end = prefix.length + parents[j].end + replace.space;\n }\n }\n }\n }\n this.restore(textArea, start, end + addedLength, e);\n };\n MDLists.prototype.appliedLine = function (line) {\n var points = {};\n var regex = this.getListRegex();\n var isExist = regex.test(line.trim()) || line.trim() === this.syntax.OL.trim()\n || line.trim() === this.syntax.UL.trim();\n if (isExist) {\n var replace = void 0;\n var pattern = void 0;\n var space = 0;\n if (this.selection.getRegex(this.syntax.OL).test(line.trim())) {\n pattern = this.selection.getRegex(this.syntax.OL);\n replace = this.syntax.UL;\n points.space = this.syntax.UL.length - this.syntax.OL.length;\n }\n else {\n pattern = this.selection.getRegex(this.syntax.UL);\n replace = this.syntax.OL;\n points.space = this.syntax.OL.length - this.syntax.UL.length;\n }\n points.line = this.getTabSpace(line) + line.trim().replace(pattern, replace);\n }\n return points;\n };\n MDLists.prototype.restore = function (textArea, start, end, event) {\n this.selection.save(start, end);\n this.selection.restore(textArea);\n if (event && event.callBack) {\n event.callBack({\n requestType: this.currentAction,\n selectedText: this.selection.getSelectedText(textArea),\n editorMode: 'Markdown',\n event: event.event\n });\n }\n };\n MDLists.prototype.getListRegex = function () {\n var regex = '';\n var configKey = Object.keys(this.syntax);\n for (var j = 0; j < configKey.length; j++) {\n var syntax = this.selection.replaceSpecialChar(this.syntax[configKey[j]]);\n regex += regex === '' ? '^(' + syntax + ')|^(' + syntax.trim() + ')' :\n '|^(' + syntax + ')|^(' + syntax.trim() + ')';\n }\n return new RegExp(regex);\n };\n return MDLists;\n}());\nexport { MDLists };\n","import { extend } from '@syncfusion/ej2-base';\nimport * as EVENTS from './../../common/constant';\nimport * as CONSTANT from './../../markdown-parser/base/constant';\n/**\n * MDFormats internal plugin\n * @hidden\n */\nvar MDFormats = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\n */\n function MDFormats(options) {\n extend(this, this, options, true);\n this.selection = this.parent.markdownSelection;\n this.addEventListener();\n }\n MDFormats.prototype.addEventListener = function () {\n this.parent.observer.on(EVENTS.FORMAT_TYPE, this.applyFormats, this);\n };\n MDFormats.prototype.applyFormats = function (e) {\n e.subCommand = e.subCommand.toLowerCase();\n var textArea = this.parent.element;\n this.selection.save(textArea.selectionStart, textArea.selectionEnd);\n if (e.subCommand === 'p') {\n this.cleanFormat(textArea);\n this.restore(textArea, textArea.selectionStart, textArea.selectionEnd, e);\n return;\n }\n else {\n this.cleanFormat(textArea, e.subCommand);\n }\n var start = textArea.selectionStart;\n var end = textArea.selectionEnd;\n var addedLength = 0;\n var parents = this.selection.getSelectedParentPoints(textArea);\n if (e.subCommand === 'pre') {\n if (parents.length > 1) {\n this.applyCodeBlock(textArea, e, parents);\n }\n else {\n extend(e, e, { subCommand: 'InlineCode' }, true);\n this.parent.observer.notify(CONSTANT.selectionCommand, e);\n }\n return;\n }\n for (var i = 0; i < parents.length; i++) {\n if (parents[i].text !== '' && !this.selection.isStartWith(parents[i].text, '\\\\' + this.syntax[e.subCommand])) {\n parents[i].text = this.syntax[e.subCommand] + parents[i].text;\n textArea.value = textArea.value.substr(0, parents[i].start) + parents[i].text + '\\n' +\n textArea.value.substr(parents[i].end, textArea.value.length);\n start = i === 0 ? start + this.syntax[e.subCommand].length : start;\n addedLength += this.syntax[e.subCommand].length;\n if (parents.length !== 1) {\n for (var j = i; j < parents.length; j++) {\n parents[j].start = j !== 0 ?\n this.syntax[e.subCommand].length + parents[j].start : parents[j].start;\n parents[j].end = this.syntax[e.subCommand].length + parents[j].end;\n }\n }\n }\n else if (parents[i].text === '' && i === 0) {\n this.selection.save(start, end);\n if (parents.length !== 1) {\n for (var j = i; j < parents.length; j++) {\n parents[j].start = j !== 0 ? 1 + parents[j].start : parents[j].start;\n parents[j].end = 1 + parents[j].end;\n }\n }\n }\n }\n this.restore(textArea, start, end + addedLength, e);\n };\n MDFormats.prototype.clearRegex = function () {\n var regex = '';\n var configKey = Object.keys(this.syntax);\n for (var j = 0; j < configKey.length && configKey[j] !== 'pre' && configKey[j] !== 'p'; j++) {\n regex += regex === '' ? '^(' + this.selection.replaceSpecialChar(this.syntax[configKey[j]].trim()) + ')' :\n '|^(' + this.selection.replaceSpecialChar(this.syntax[configKey[j]].trim()) + ')';\n }\n return regex;\n };\n MDFormats.prototype.cleanFormat = function (textArea, command) {\n var parents = this.selection.getSelectedParentPoints(textArea);\n var start = textArea.selectionStart;\n var end = textArea.selectionEnd;\n var removeLength = 0;\n if (this.selection.isClear(parents, this.clearRegex())) {\n for (var i = 0; i < parents.length; i++) {\n var configKey = Object.keys(this.syntax);\n for (var j = 0; parents[i].text !== '' && j < configKey.length; j++) {\n var removeText = this.syntax[configKey[j]];\n if (configKey[j] === command) {\n continue;\n }\n var regex = new RegExp('^(' + this.selection.replaceSpecialChar(removeText) + ')', 'gim');\n if (regex.test(parents[i].text)) {\n parents[i].text = parents[i].text.replace(regex, '');\n textArea.value = textArea.value.substr(0, parents[i].start) + parents[i].text + '\\n' +\n textArea.value.substr(parents[i].end, textArea.value.length);\n start = i === 0 ? (start - (removeText.length)) > 0 ? start - (removeText.length) : 0 : start;\n removeLength += removeText.length;\n if (parents.length !== 1) {\n for (var k = 0; k < parents.length; k++) {\n parents[k].start = k !== 0 ?\n parents[k].start - removeText.length : parents[k].start;\n parents[k].end = parents[k].end - removeText.length;\n }\n }\n break;\n }\n }\n if (parents[i].text === '' && i === 0) {\n this.selection.save(start, end);\n if (parents.length !== 1) {\n for (var j = i; j < parents.length; j++) {\n parents[j].start = j !== 0 ? 1 + parents[j].start : parents[j].start;\n parents[j].end = 1 + parents[j].end;\n }\n }\n }\n }\n this.restore(textArea, start, end - removeLength);\n }\n };\n MDFormats.prototype.applyCodeBlock = function (textArea, event, parents) {\n var command = event.subCommand;\n var start = parents[0].start;\n var end = parents[parents.length - 1].end;\n var parentLines = this.selection.getAllParents(textArea.value);\n var firstPrevText = parentLines[parents[0].line - 1];\n var lastNextText = parentLines[(parents.length + 1) + 1];\n var addedLength = 0;\n if (!this.selection.isStartWith(firstPrevText, this.syntax.pre.split('\\n')[0]) &&\n !this.selection.isStartWith(lastNextText, this.syntax.pre.split('\\n')[0])) {\n var lines = textArea.value.substring(start, end).split('\\n');\n var lastLine = lines[lines.length - 1] === '' ? '' : '\\n';\n textArea.value = textArea.value.substr(0, start) + this.syntax[command] + textArea.value.substring(start, end) +\n lastLine + this.syntax[command] +\n textArea.value.substr(end, textArea.value.length);\n start += this.syntax[command].length;\n end += this.syntax[command].length - 1;\n }\n else {\n start = textArea.selectionStart;\n end = textArea.selectionEnd;\n }\n this.restore(textArea, start, end, event);\n };\n MDFormats.prototype.restore = function (textArea, start, end, event) {\n this.selection.save(start, end);\n this.selection.restore(textArea);\n if (event && event.callBack) {\n event.callBack({\n requestType: event.subCommand,\n selectedText: this.selection.getSelectedText(textArea),\n editorMode: 'Markdown',\n event: event.event\n });\n }\n };\n return MDFormats;\n}());\nexport { MDFormats };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport * as CONSTANT from './../base/constant';\nimport { extend } from '@syncfusion/ej2-base';\nimport * as EVENTS from './../../common/constant';\n/**\n * SelectionCommands internal component\n * @hidden\n */\nvar MDSelectionFormats = /** @class */ (function () {\n function MDSelectionFormats(parent) {\n extend(this, this, parent, true);\n this.selection = this.parent.markdownSelection;\n this.addEventListener();\n }\n MDSelectionFormats.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.selectionCommand, this.applyCommands, this);\n this.parent.observer.on(EVENTS.KEY_DOWN_HANDLER, this.keyDownHandler, this);\n };\n MDSelectionFormats.prototype.keyDownHandler = function (e) {\n switch (e.event.action) {\n case 'bold':\n this.applyCommands({ subCommand: 'Bold', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'italic':\n this.applyCommands({ subCommand: 'Italic', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'strikethrough':\n this.applyCommands({ subCommand: 'StrikeThrough', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'uppercase':\n this.applyCommands({ subCommand: 'UpperCase', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'lowercase':\n this.applyCommands({ subCommand: 'LowerCase', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'superscript':\n this.applyCommands({ subCommand: 'SuperScript', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'subscript':\n this.applyCommands({ subCommand: 'SubScript', callBack: e.callBack });\n e.event.preventDefault();\n break;\n }\n };\n MDSelectionFormats.prototype.isBold = function (text, cmd) {\n return text.search('\\\\' + cmd + '\\\\' + cmd + '') !== -1;\n };\n MDSelectionFormats.prototype.isItalic = function (text, cmd) {\n return text.search('\\\\' + cmd) !== -1;\n };\n MDSelectionFormats.prototype.isMatch = function (text, cmd) {\n var matchText = [''];\n switch (cmd) {\n case this.syntax.Italic:\n matchText = text.match(this.singleCharRegx(cmd));\n break;\n case this.syntax.InlineCode:\n matchText = text.match(this.singleCharRegx(cmd));\n break;\n case this.syntax.StrikeThrough:\n matchText = text.match(this.singleCharRegx(cmd));\n break;\n }\n return matchText;\n };\n MDSelectionFormats.prototype.multiCharRegx = function (cmd) {\n return new RegExp('(\\\\' + cmd + '\\\\' + cmd + ')', 'g');\n };\n MDSelectionFormats.prototype.singleCharRegx = function (cmd) {\n return new RegExp('(\\\\' + cmd + ')', 'g');\n };\n MDSelectionFormats.prototype.isAppliedCommand = function (cmd) {\n var selectCmd = '';\n var isFormat = false;\n var textArea = this.parent.element;\n var start = textArea.selectionStart;\n var splitAt = function (index) { return function (x) { return [x.slice(0, index), x.slice(index)]; }; };\n var splitText = splitAt(start)(textArea.value);\n var cmdB = this.syntax.Bold.substr(0, 1);\n var cmdI = this.syntax.Italic;\n var beforeText = textArea.value.substr(splitText[0].length - 1, 1);\n var afterText = splitText[1].substr(0, 1);\n if ((beforeText !== '' && afterText !== '' && beforeText.match(/[a-z]/i)) &&\n beforeText === beforeText.toUpperCase() && afterText === afterText.toUpperCase() && cmd === 'UpperCase') {\n return true;\n }\n if (!(this.isBold(splitText[0], cmdB)) && !(this.isItalic(splitText[0], cmdI)) && !(this.isBold(splitText[1], cmdB)) &&\n !(this.isItalic(splitText[1], cmdI))) {\n if ((!isNullOrUndefined(this.isMatch(splitText[0], this.syntax.StrikeThrough)) &&\n !isNullOrUndefined(this.isMatch(splitText[1], this.syntax.StrikeThrough))) &&\n (this.isMatch(splitText[0], this.syntax.StrikeThrough).length % 2 === 1 &&\n this.isMatch(splitText[1], this.syntax.StrikeThrough).length % 2 === 1) && cmd === 'StrikeThrough') {\n isFormat = true;\n }\n if ((!isNullOrUndefined(this.isMatch(splitText[0], this.syntax.InlineCode)) &&\n !isNullOrUndefined(this.isMatch(splitText[1], this.syntax.InlineCode))) &&\n (this.isMatch(splitText[0], this.syntax.InlineCode).length % 2 === 1 &&\n this.isMatch(splitText[1], this.syntax.InlineCode).length % 2 === 1) && cmd === 'InlineCode') {\n isFormat = true;\n }\n if ((!isNullOrUndefined(splitText[0].match(/\\/g)) && !isNullOrUndefined(splitText[1].match(/\\<\\/sub>/g))) &&\n (splitText[0].match(/\\/g).length % 2 === 1 &&\n splitText[1].match(/\\<\\/sub>/g).length % 2 === 1) && cmd === 'SubScript') {\n isFormat = true;\n }\n if ((!isNullOrUndefined(splitText[0].match(/\\/g)) && !isNullOrUndefined(splitText[1].match(/\\<\\/sup>/g))) &&\n (splitText[0].match(/\\/g).length % 2 === 1 && splitText[1].match(/\\<\\/sup>/g).length % 2 === 1) &&\n cmd === 'SuperScript') {\n isFormat = true;\n }\n }\n if ((this.isBold(splitText[0], cmdB) && this.isBold(splitText[1], cmdB)) &&\n (splitText[0].match(this.multiCharRegx(cmdB)).length % 2 === 1 &&\n splitText[1].match(this.multiCharRegx(cmdB)).length % 2 === 1) && cmd === 'Bold') {\n isFormat = true;\n }\n splitText[0] = this.isBold(splitText[0], cmdB) ? splitText[0].replace(this.multiCharRegx(cmdB), '$%@') : splitText[0];\n splitText[1] = this.isBold(splitText[1], cmdB) ? splitText[1].replace(this.multiCharRegx(cmdB), '$%@') : splitText[1];\n if ((!isNullOrUndefined(this.isMatch(splitText[0], this.syntax.Italic)) &&\n !isNullOrUndefined(this.isMatch(splitText[1], this.syntax.Italic))) &&\n (this.isMatch(splitText[0], this.syntax.Italic).length % 2 === 1 &&\n this.isMatch(splitText[1], this.syntax.Italic).length % 2 === 1) && cmd === 'Italic') {\n isFormat = true;\n }\n if ((!isNullOrUndefined(this.isMatch(splitText[0], this.syntax.StrikeThrough)) &&\n !isNullOrUndefined(this.isMatch(splitText[1], this.syntax.StrikeThrough))) &&\n (this.isMatch(splitText[0], this.syntax.StrikeThrough).length % 2 === 1 &&\n this.isMatch(splitText[1], this.syntax.StrikeThrough).length % 2 === 1) && cmd === 'StrikeThrough') {\n isFormat = true;\n }\n if ((!isNullOrUndefined(this.isMatch(splitText[0], this.syntax.InlineCode)) &&\n !isNullOrUndefined(this.isMatch(splitText[1], this.syntax.InlineCode))) &&\n (this.isMatch(splitText[0], this.syntax.InlineCode).length % 2 === 1 &&\n this.isMatch(splitText[1], this.syntax.InlineCode).length % 2 === 1) && cmd === 'InlineCode') {\n isFormat = true;\n }\n if ((!isNullOrUndefined(splitText[0].match(/\\/g)) && !isNullOrUndefined(splitText[1].match(/\\<\\/sub>/g))) &&\n (splitText[0].match(/\\/g).length % 2 === 1 && splitText[1].match(/\\<\\/sub>/g).length % 2 === 1) && cmd === 'SubScript') {\n isFormat = true;\n }\n if ((!isNullOrUndefined(splitText[0].match(/\\/g)) && !isNullOrUndefined(splitText[1].match(/\\<\\/sup>/g))) &&\n (splitText[0].match(/\\/g).length % 2 === 1 && splitText[1].match(/\\<\\/sup>/g).length % 2 === 1) && cmd === 'SuperScript') {\n isFormat = true;\n }\n return isFormat;\n };\n MDSelectionFormats.prototype.applyCommands = function (e) {\n this.currentAction = e.subCommand;\n var textArea = this.parent.element;\n this.selection.save(textArea.selectionStart, textArea.selectionEnd);\n var start = textArea.selectionStart;\n var end = textArea.selectionEnd;\n var addedLength = 0;\n var selection = this.parent.markdownSelection.getSelectedInlinePoints(textArea);\n if (selection.text !== '' && !this.isApplied(selection, e.subCommand)) {\n addedLength = (e.subCommand === 'UpperCase' || e.subCommand === 'LowerCase') ? 0 :\n this.syntax[e.subCommand].length;\n var repStart = textArea.value.substr(selection.start - this.syntax[e.subCommand].length, this.syntax[e.subCommand].length);\n var repEnd = void 0;\n if ((repStart === e.subCommand) || ((selection.start - this.syntax[e.subCommand].length ===\n textArea.value.indexOf(this.syntax[e.subCommand])) && (selection.end === textArea.value.lastIndexOf(this.syntax[e.subCommand]) || selection.end === textArea.value.lastIndexOf('/g, '').replace(/<\\/sub>/g, '');\n break;\n case 'SuperScript':\n text = text.replace(//g, '').replace(/<\\/sup>/g, '');\n break;\n }\n return text;\n };\n MDSelectionFormats.prototype.isApplied = function (line, command) {\n var regx = this.singleCharRegx(this.syntax[command]);\n switch (command) {\n case 'SubScript':\n case 'SuperScript':\n regx = this.singleCharRegx(this.syntax[command]);\n return regx.test(line.text);\n case 'Bold':\n case 'StrikeThrough':\n regx = this.multiCharRegx(this.syntax[command].substr(0, 1));\n return regx.test(line.text);\n case 'UpperCase':\n case 'LowerCase':\n regx = new RegExp('^[' + this.syntax[command] + ']*$', 'g');\n return regx.test(line.text);\n case 'Italic':\n var regTest = void 0;\n var regxB = this.multiCharRegx(this.syntax[command].substr(0, 1));\n if (regxB.test(line.text)) {\n var repText = line.text;\n repText = repText.replace(regxB, '$%#');\n regTest = regx.test(repText);\n }\n else {\n regTest = regx.test(line.text);\n }\n return regTest;\n case 'InlineCode':\n return regx.test(line.text);\n }\n };\n return MDSelectionFormats;\n}());\nexport { MDSelectionFormats };\n","/**\n * Default Markdown formats config for adapter\n */\nexport var markdownFormatTags = {\n 'h6': '###### ',\n 'h5': '##### ',\n 'h4': '#### ',\n 'h3': '### ',\n 'h2': '## ',\n 'h1': '# ',\n 'blockquote': '> ',\n 'pre': '```\\n',\n 'p': ''\n};\n/**\n * Default selection formats config for adapter\n */\nexport var markdownSelectionTags = {\n 'Bold': '**',\n 'Italic': '*',\n 'StrikeThrough': '~~',\n 'InlineCode': '`',\n 'SubScript': '',\n 'SuperScript': '',\n 'UpperCase': 'A-Z',\n 'LowerCase': 'a-z'\n};\n/**\n * Default Markdown lists config for adapter\n */\nexport var markdownListsTags = {\n 'OL': '1. ',\n 'UL': '- ',\n};\n/**\n * Default html key config for adapter\n */\nexport var htmlKeyConfig = {\n 'toolbar-focus': 'alt+f10',\n 'escape': '27',\n 'insert-link': 'ctrl+k',\n 'insert-image': 'ctrl+shift+i',\n 'undo': 'ctrl+z',\n 'redo': 'ctrl+y',\n 'copy': 'ctrl+c',\n 'cut': 'ctrl+x',\n 'paste': 'ctrl+v',\n 'bold': 'ctrl+b',\n 'italic': 'ctrl+i',\n 'underline': 'ctrl+u',\n 'strikethrough': 'ctrl+shift+s',\n 'uppercase': 'ctrl+shift+u',\n 'lowercase': 'ctrl+shift+l',\n 'superscript': 'ctrl+shift+=',\n 'subscript': 'ctrl+=',\n 'indents': 'ctrl+]',\n 'outdents': 'ctrl+[',\n 'html-source': 'ctrl+shift+h',\n 'full-screen': 'ctrl+shift+f',\n 'decrease-fontsize': 'ctrl+shift+<',\n 'increase-fontsize': 'ctrl+shift+>',\n 'justify-center': 'ctrl+e',\n 'justify-full': 'ctrl+j',\n 'justify-left': 'ctrl+l',\n 'justify-right': 'ctrl+r',\n 'clear-format': 'ctrl+shift+r',\n 'ordered-list': 'ctrl+shift+o',\n 'unordered-list': 'ctrl+alt+o',\n 'space': '32',\n 'enter': '13'\n};\n/**\n * Default markdown key config for adapter\n */\nexport var markdownKeyConfig = {\n 'toolbar-focus': 'alt+f10',\n 'escape': '27',\n 'insert-link': 'ctrl+k',\n 'insert-image': 'ctrl+shift+i',\n 'undo': 'ctrl+z',\n 'redo': 'ctrl+y',\n 'copy': 'ctrl+c',\n 'cut': 'ctrl+x',\n 'paste': 'ctrl+v',\n 'bold': 'ctrl+b',\n 'italic': 'ctrl+i',\n 'strikethrough': 'ctrl+shift+s',\n 'uppercase': 'ctrl+shift+u',\n 'lowercase': 'ctrl+shift+l',\n 'superscript': 'ctrl+shift+=',\n 'subscript': 'ctrl+=',\n 'full-screen': 'ctrl+shift+f',\n 'ordered-list': 'ctrl+shift+o',\n 'unordered-list': 'ctrl+alt+o'\n};\n","import { debounce, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport * as EVENTS from './../../common/constant';\n/**\n * `Undo` module is used to handle undo actions.\n */\nvar UndoRedoCommands = /** @class */ (function () {\n function UndoRedoCommands(parent, options) {\n this.undoRedoStack = [];\n this.parent = parent;\n this.undoRedoSteps = !isNullOrUndefined(options) ? options.undoRedoSteps : 30;\n this.undoRedoTimer = !isNullOrUndefined(options) ? options.undoRedoTimer : 300;\n this.selection = this.parent.markdownSelection;\n this.addEventListener();\n }\n UndoRedoCommands.prototype.addEventListener = function () {\n var debounceListener = debounce(this.keyUp, this.undoRedoTimer);\n this.parent.observer.on(EVENTS.KEY_UP_HANDLER, debounceListener, this);\n this.parent.observer.on(EVENTS.KEY_DOWN_HANDLER, this.keyDown, this);\n this.parent.observer.on(EVENTS.ACTION, this.onAction, this);\n };\n UndoRedoCommands.prototype.removeEventListener = function () {\n var debounceListener = debounce(this.keyUp, 300);\n this.parent.observer.off(EVENTS.KEY_UP_HANDLER, debounceListener);\n this.parent.observer.off(EVENTS.KEY_DOWN_HANDLER, this.keyDown);\n this.parent.observer.off(EVENTS.ACTION, this.onAction);\n };\n /**\n * Destroys the ToolBar.\n * @method destroy\n * @return {void}\n */\n UndoRedoCommands.prototype.destroy = function () {\n this.removeEventListener();\n };\n UndoRedoCommands.prototype.onAction = function (e) {\n if (e.subCommand === 'Undo') {\n this.undo(e);\n }\n else {\n this.redo(e);\n }\n };\n UndoRedoCommands.prototype.keyDown = function (e) {\n var event = e.event;\n var proxy = this;\n switch (event.action) {\n case 'undo':\n event.preventDefault();\n proxy.undo(e);\n break;\n case 'redo':\n event.preventDefault();\n proxy.redo(e);\n break;\n }\n };\n UndoRedoCommands.prototype.keyUp = function (e) {\n if (e.event.keyCode !== 17 && !e.event.ctrlKey) {\n this.saveData(e);\n }\n };\n /**\n * MD collection stored string format.\n * @method saveData\n * @return {void}\n */\n UndoRedoCommands.prototype.saveData = function (e) {\n var textArea = this.parent.element;\n this.selection.save(textArea.selectionStart, textArea.selectionEnd);\n var start = textArea.selectionStart;\n var end = textArea.selectionEnd;\n var textValue = this.parent.element.value;\n var changEle = { text: textValue, start: start, end: end };\n if (this.undoRedoStack.length >= this.steps) {\n this.undoRedoStack = this.undoRedoStack.slice(0, this.steps + 1);\n }\n if (this.undoRedoStack.length > 1 && (this.undoRedoStack[this.undoRedoStack.length - 1].start === start) &&\n (this.undoRedoStack[this.undoRedoStack.length - 1].end === end)) {\n return;\n }\n this.undoRedoStack.push(changEle);\n this.steps = this.undoRedoStack.length - 1;\n if (this.undoRedoStack.length > this.undoRedoSteps) {\n this.undoRedoStack.shift();\n }\n if (e && e.callBack) {\n e.callBack();\n }\n };\n /**\n * Undo the editable text.\n * @method undo\n * @return {void}\n */\n UndoRedoCommands.prototype.undo = function (e) {\n if (this.steps > 0) {\n this.currentAction = 'Undo';\n var start = this.undoRedoStack[this.steps - 1].start;\n var end = this.undoRedoStack[this.steps - 1].end;\n var removedContent = this.undoRedoStack[this.steps - 1].text;\n this.parent.element.value = removedContent;\n this.parent.element.focus();\n this.steps--;\n this.restore(this.parent.element, start, end, e);\n }\n };\n /**\n * Redo the editable text.\n * @method redo\n * @return {void}\n */\n UndoRedoCommands.prototype.redo = function (e) {\n if (this.undoRedoStack[this.steps + 1] != null) {\n this.currentAction = 'Redo';\n var start = this.undoRedoStack[this.steps + 1].start;\n var end = this.undoRedoStack[this.steps + 1].end;\n this.parent.element.value = this.undoRedoStack[this.steps + 1].text;\n this.parent.element.focus();\n this.steps++;\n this.restore(this.parent.element, start, end, e);\n }\n };\n UndoRedoCommands.prototype.restore = function (textArea, start, end, event) {\n this.selection.save(start, end);\n this.selection.restore(textArea);\n if (event && event.callBack) {\n event.callBack({\n requestType: this.currentAction,\n selectedText: this.selection.getSelectedText(textArea),\n editorMode: 'Markdown',\n event: event.event\n });\n }\n };\n UndoRedoCommands.prototype.getUndoStatus = function () {\n var status = { undo: false, redo: false };\n if (this.steps > 0) {\n status.undo = true;\n }\n if (this.undoRedoStack[this.steps + 1] != null) {\n status.redo = true;\n }\n return status;\n };\n return UndoRedoCommands;\n}());\nexport { UndoRedoCommands };\n","import * as CONSTANT from './../base/constant';\n/**\n * Link internal component\n * @hidden\n */\nvar MDLink = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\n */\n function MDLink(parent) {\n this.parent = parent;\n this.selection = this.parent.markdownSelection;\n this.addEventListener();\n }\n MDLink.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.LINK_COMMAND, this.createLink, this);\n };\n MDLink.prototype.createLink = function (e) {\n var textArea = this.parent.element;\n textArea.focus();\n var start = textArea.selectionStart;\n var end = textArea.selectionEnd;\n var text = (e.subCommand === 'Image') ? this.selection.getSelectedText(textArea) : e.item.text;\n var startOffset = (e.subCommand === 'Image') ? (start + 2) : (start + 1);\n var endOffset = (e.subCommand === 'Image') ? (end + 2) : (end + 1);\n text = (e.subCommand === 'Image') ? '![' + text + '](' + e.item.url + ')' : '[' + text + '](' + e.item.url + ')';\n textArea.value = textArea.value.substr(0, start)\n + text + textArea.value.substr(end, textArea.value.length);\n this.parent.markdownSelection.setSelection(textArea, startOffset, endOffset);\n this.restore(textArea, startOffset, endOffset, e);\n };\n MDLink.prototype.restore = function (textArea, start, end, event) {\n this.selection.save(start, end);\n this.selection.restore(textArea);\n if (event && event.callBack) {\n event.callBack({\n requestType: event.subCommand,\n selectedText: this.selection.getSelectedText(textArea),\n editorMode: 'Markdown',\n event: event.event\n });\n }\n };\n return MDLink;\n}());\nexport { MDLink };\n","import * as CONSTANT from './../base/constant';\n/**\n * Link internal component\n * @hidden\n */\nvar ClearFormat = /** @class */ (function () {\n /**\n * Constructor for creating the clear format plugin\n * @hidden\n */\n function ClearFormat(parent) {\n this.parent = parent;\n this.selection = this.parent.markdownSelection;\n this.addEventListener();\n }\n ClearFormat.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.CLEAR_COMMAND, this.clear, this);\n };\n ClearFormat.prototype.replaceRegex = function (data) {\n return data.replace(/\\*/ig, '\\\\*').replace(/\\&/ig, '\\\\&')\n .replace(/\\-/ig, '\\\\-').replace(/\\^/ig, '\\\\^')\n .replace(/\\$/ig, '\\\\$').replace(/\\./ig, '\\\\.')\n .replace(/\\|/ig, '\\\\|').replace(/\\?/ig, '\\\\?')\n .replace(/\\+/ig, '\\\\+').replace(/\\-/ig, '\\\\-')\n .replace(/\\&/ig, '\\\\&');\n };\n ClearFormat.prototype.clearSelectionTags = function (text) {\n var data = this.parent.selectionTags;\n var keys = Object.keys(data);\n for (var num = 0; num < keys.length; num++) {\n var key = keys[num];\n if (data.hasOwnProperty(key) && data[key] !== '') {\n var expString = this.replaceRegex(data[key]);\n var regExp = void 0;\n var startExp = void 0;\n var endExp = void 0;\n if (data[key] === '') {\n regExp = new RegExp('(.*?)<\\/sup>', 'ig');\n }\n else if (data[key] === '') {\n regExp = new RegExp('(.*?)<\\/sub>', 'ig');\n }\n else {\n regExp = new RegExp(expString + '(.*?)' + expString, 'ig');\n }\n startExp = data[key].length;\n endExp = (data[key] === '' || data[key] === '') ? data[key].length + 1 : data[key].length;\n var val = text.match(regExp);\n for (var index = 0; val && index < val.length && val[index] !== ''; index++) {\n text = text.replace(val[index], val[index].substr(startExp, val[index].length - endExp - startExp));\n }\n }\n }\n return text;\n };\n ClearFormat.prototype.clearFormatTags = function (text) {\n var lines = text.split('\\n');\n var tags = [this.parent.formatTags, this.parent.listTags];\n var str = '';\n for (var len = 0; len < lines.length; len++) {\n for (var num = 0; num < tags.length; num++) {\n var data = tags[num];\n var keys = Object.keys(data);\n for (var index = 0; index < keys.length; index++) {\n var key = keys[index];\n if (data.hasOwnProperty(key) && data[key] !== '') {\n if (lines[len].indexOf(data[key]) === 0) {\n lines[len] = lines[len].replace(data[key], '');\n }\n }\n }\n }\n str = str + lines[len] + ((len !== lines.length - 1) ? '\\n' : '');\n }\n return str;\n };\n ClearFormat.prototype.clear = function (e) {\n var textArea = this.parent.element;\n textArea.focus();\n var start = textArea.selectionStart;\n var end = textArea.selectionEnd;\n var text = this.selection.getSelectedText(textArea);\n text = this.clearSelectionTags(text);\n text = this.clearFormatTags(text);\n textArea.value = textArea.value.substr(0, start)\n + text + textArea.value.substr(end, textArea.value.length);\n this.parent.markdownSelection.setSelection(textArea, start, start + text.length);\n this.restore(textArea, start, start + text.length, e);\n };\n ClearFormat.prototype.restore = function (textArea, start, end, event) {\n this.selection.save(start, end);\n this.selection.restore(textArea);\n if (event && event.callBack) {\n event.callBack({\n requestType: event.subCommand,\n selectedText: this.selection.getSelectedText(textArea),\n editorMode: 'Markdown',\n event: event.event\n });\n }\n };\n return ClearFormat;\n}());\nexport { ClearFormat };\n","import { Observer } from '@syncfusion/ej2-base';\nimport * as CONSTANT from './constant';\nimport { MDLists } from './../plugin/lists';\nimport { MDFormats } from './../plugin/formats';\nimport { MDSelectionFormats } from './../plugin/md-selection-formats';\nimport { MarkdownSelection } from './../plugin/markdown-selection';\nimport { extend } from '@syncfusion/ej2-base';\nimport { markdownFormatTags, markdownListsTags, markdownSelectionTags } from './../../common/config';\nimport { UndoRedoCommands } from './../plugin/undo';\nimport { MDLink } from './../plugin/link';\nimport * as EVENTS from './../../common/constant';\nimport { ClearFormat } from './../plugin/clearformat';\n/**\n * MarkdownParser internal component\n * @hidden\n */\nvar MarkdownParser = /** @class */ (function () {\n /**\n * Constructor for creating the component\n * @hidden\n */\n function MarkdownParser(options) {\n this.initialize();\n extend(this, this, options, true);\n this.observer = new Observer(this);\n this.markdownSelection = new MarkdownSelection();\n this.listObj = new MDLists({ parent: this, syntax: this.listTags });\n this.formatObj = new MDFormats({ parent: this, syntax: this.formatTags });\n this.undoRedoManager = new UndoRedoCommands(this, options.options);\n this.mdSelectionFormats = new MDSelectionFormats({ parent: this, syntax: this.selectionTags });\n this.linkObj = new MDLink(this);\n this.clearObj = new ClearFormat(this);\n this.wireEvents();\n }\n MarkdownParser.prototype.initialize = function () {\n this.formatTags = markdownFormatTags;\n this.listTags = markdownListsTags;\n this.selectionTags = markdownSelectionTags;\n };\n MarkdownParser.prototype.wireEvents = function () {\n this.observer.on(EVENTS.KEY_DOWN, this.editorKeyDown, this);\n this.observer.on(EVENTS.KEY_UP, this.editorKeyUp, this);\n };\n MarkdownParser.prototype.editorKeyDown = function (e) {\n this.observer.notify(EVENTS.KEY_DOWN_HANDLER, e);\n };\n MarkdownParser.prototype.editorKeyUp = function (e) {\n this.observer.notify(EVENTS.KEY_UP_HANDLER, e);\n };\n MarkdownParser.prototype.execCommand = function (command, value, event, callBack, text, exeValue) {\n switch (command.toLocaleLowerCase()) {\n case 'lists':\n this.observer.notify(CONSTANT.LISTS_COMMAND, { subCommand: value, event: event, callBack: callBack });\n break;\n case 'formats':\n this.observer.notify(EVENTS.FORMAT_TYPE, { subCommand: value, event: event, callBack: callBack });\n break;\n case 'actions':\n this.observer.notify(EVENTS.ACTION, { subCommand: value, event: event, callBack: callBack });\n break;\n case 'style':\n case 'effects':\n case 'casing':\n this.observer.notify(CONSTANT.selectionCommand, { subCommand: value, event: event, callBack: callBack });\n break;\n case 'links':\n case 'images':\n this.observer.notify(CONSTANT.LINK_COMMAND, { subCommand: value, event: event, callBack: callBack, item: exeValue });\n break;\n case 'clear':\n this.observer.notify(CONSTANT.CLEAR_COMMAND, { subCommand: value, event: event, callBack: callBack });\n break;\n }\n };\n return MarkdownParser;\n}());\nexport { MarkdownParser };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Formatter } from './formatter';\nimport { MarkdownParser } from './../../markdown-parser/base/markdown-parser';\nimport { extend } from '@syncfusion/ej2-base';\nimport { markdownKeyConfig, markdownListsTags, markdownFormatTags, markdownSelectionTags } from './../../common/config';\n/**\n * Markdown adapter\n * @hidden\n */\nvar MarkdownFormatter = /** @class */ (function (_super) {\n __extends(MarkdownFormatter, _super);\n function MarkdownFormatter(options) {\n var _this = _super.call(this) || this;\n _this.initialize();\n extend(_this, _this, options, true);\n if (options && _this.element) {\n _this.updateFormatter(_this.element, document, options.options);\n }\n return _this;\n }\n MarkdownFormatter.prototype.initialize = function () {\n this.keyConfig = markdownKeyConfig;\n this.formatTags = markdownFormatTags;\n this.listTags = markdownListsTags;\n this.selectionTags = markdownSelectionTags;\n };\n /**\n * Update the formatter of RichTextEditor\n * @param {Element} editElement\n * @param {Document} doc\n */\n MarkdownFormatter.prototype.updateFormatter = function (editElement, doc, options) {\n if (editElement) {\n this.editorManager = new MarkdownParser({\n element: editElement,\n formatTags: this.formatTags,\n listTags: this.listTags,\n selectionTags: this.selectionTags,\n options: options\n });\n }\n };\n return MarkdownFormatter;\n}(Formatter));\nexport { MarkdownFormatter };\n","import { createElement } from '@syncfusion/ej2-base';\n/**\n * Markdown module is used to render RichTextEditor as Markdown editor content\n * @hidden\n */\nvar MarkdownRender = /** @class */ (function () {\n /**\n * Constructor for content renderer module\n */\n function MarkdownRender(parent) {\n this.parent = parent;\n this.rteID = this.parent.element.id;\n }\n /**\n * The function is used to render RichTextEditor content div\n */\n MarkdownRender.prototype.renderPanel = function () {\n var rteObj = this.parent;\n var div = createElement('div', { id: this.rteID + '_view', className: 'e-rte-content' });\n this.editableElement = createElement('textarea', {\n className: 'e-content',\n id: this.rteID + '_editable-content'\n });\n div.appendChild(this.editableElement);\n this.setPanel(div);\n rteObj.element.appendChild(div);\n };\n /**\n * Get the content div element of RichTextEditor\n * @return {Element}\n */\n MarkdownRender.prototype.getPanel = function () {\n return this.contentPanel;\n };\n /**\n * Get the editable element of RichTextEditor\n * @return {Element}\n */\n MarkdownRender.prototype.getEditPanel = function () {\n return this.editableElement;\n };\n /**\n * Set the content div element of RichTextEditor\n * @param {Element} panel\n */\n MarkdownRender.prototype.setPanel = function (panel) {\n this.contentPanel = panel;\n };\n /**\n * Get the document of RichTextEditor\n * @param {Document}\n */\n MarkdownRender.prototype.getDocument = function () {\n return this.getEditPanel().ownerDocument;\n };\n return MarkdownRender;\n}());\nexport { MarkdownRender };\n","import * as events from '../base/constant';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { MarkdownFormatter } from '../formatter/markdown-formatter';\nimport { RenderType } from '../base/enum';\nimport { MarkdownToolbarStatus } from './markdown-toolbar-status';\nimport { MarkdownRender } from '../renderer/markdown-renderer';\nimport { MarkdownSelection } from './../../markdown-parser/plugin/markdown-selection';\n/**\n * `MarkdownEditor` module is used to markdown editor\n */\nvar MarkdownEditor = /** @class */ (function () {\n function MarkdownEditor(parent, serviceLocator) {\n this.parent = parent;\n this.locator = serviceLocator;\n this.renderFactory = this.locator.getService('rendererFactory');\n this.addEventListener();\n }\n /**\n * Destroys the Markdown.\n * @method destroy\n * @return {void}\n */\n MarkdownEditor.prototype.destroy = function () {\n this.removeEventListener();\n };\n MarkdownEditor.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.saveSelection = new MarkdownSelection();\n this.parent.on(events.initialLoad, this.instantiateRenderer, this);\n this.parent.on(events.initialEnd, this.render, this);\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.markdownToolbarClick, this.onToolbarClick, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.selectAll, this.selectAll, this);\n this.parent.on(events.getSelectedHtml, this.getSelectedHtml, this);\n this.parent.on(events.selectionSave, this.onSelectionSave, this);\n this.parent.on(events.selectionRestore, this.onSelectionRestore, this);\n };\n MarkdownEditor.prototype.onSelectionSave = function () {\n var textArea = this.parent.contentModule.getEditPanel();\n this.saveSelection.save(textArea.selectionStart, textArea.selectionEnd);\n };\n MarkdownEditor.prototype.onSelectionRestore = function (e) {\n this.contentRenderer.getEditPanel().focus();\n var textArea = this.parent.contentModule.getEditPanel();\n this.saveSelection.restore(textArea);\n };\n MarkdownEditor.prototype.onToolbarClick = function (args) {\n var text;\n var startOffset;\n var endOffset;\n var item = args.item;\n if (this.parent.editorMode === 'Markdown') {\n var textArea = this.parent.contentModule.getEditPanel();\n textArea.focus();\n startOffset = textArea.selectionStart;\n endOffset = textArea.selectionEnd;\n text = textArea.value.substring(startOffset, endOffset);\n }\n switch (item.subCommand) {\n case 'Maximize':\n this.parent.notify(events.enableFullScreen, { args: args });\n break;\n case 'Minimize':\n this.parent.notify(events.disableFullScreen, { args: args });\n break;\n case 'CreateLink':\n this.parent.notify(events.insertLink, { member: 'link', args: args, text: text, module: 'Markdown' });\n break;\n case 'Image':\n this.parent.notify(events.insertImage, { member: 'image', args: args, text: text, module: 'Markdown' });\n break;\n default:\n this.parent.formatter.process(this.parent, args, args.originalEvent, null);\n break;\n }\n };\n MarkdownEditor.prototype.instantiateRenderer = function () {\n this.renderFactory.addRenderer(RenderType.Content, new MarkdownRender(this.parent));\n };\n MarkdownEditor.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initialEnd, this.render);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.markdownToolbarClick, this.onToolbarClick);\n this.parent.off(events.initialLoad, this.instantiateRenderer);\n this.parent.off(events.selectAll, this.selectAll);\n this.parent.off(events.getSelectedHtml, this.getSelectedHtml);\n this.parent.off(events.selectionSave, this.onSelectionSave);\n this.parent.off(events.selectionRestore, this.onSelectionRestore);\n };\n MarkdownEditor.prototype.render = function () {\n this.contentRenderer = this.renderFactory.getRenderer(RenderType.Content);\n var editElement = this.contentRenderer.getEditPanel();\n var option = { undoRedoSteps: this.parent.undoRedoSteps, undoRedoTimer: this.parent.undoRedoTimer };\n if (isNullOrUndefined(this.parent.formatter)) {\n this.parent.formatter = new MarkdownFormatter({\n element: editElement,\n options: option\n });\n }\n else {\n this.parent.formatter.updateFormatter(editElement, this.contentRenderer.getDocument(), option);\n }\n if (this.parent.toolbarSettings.enable) {\n this.toolbarUpdate = new MarkdownToolbarStatus(this.parent);\n }\n this.parent.notify(events.bindOnEnd, {});\n };\n /**\n * Called internally if any of the property value changed.\n * @hidden\n */\n MarkdownEditor.prototype.onPropertyChanged = function (e) {\n // On property code change here\n };\n /**\n * For internal use only - Get the module name.\n */\n MarkdownEditor.prototype.getModuleName = function () {\n return 'markdownEditor';\n };\n /**\n * For selecting all content in RTE\n * @private\n */\n MarkdownEditor.prototype.selectAll = function () {\n this.parent.formatter.editorManager.markdownSelection.setSelection(this.parent.contentModule.getEditPanel(), 0, this.parent.contentModule.getEditPanel().value.length);\n };\n /**\n * For get a selected text in RTE\n * @private\n */\n MarkdownEditor.prototype.getSelectedHtml = function (e) {\n e.callBack(this.parent.formatter.editorManager.markdownSelection.getSelectedText(this.parent.contentModule.getEditPanel()));\n };\n return MarkdownEditor;\n}());\nexport { MarkdownEditor };\n","/**\n * Constant values for EditorManager\n */\n/* Image plugin events\n * @hidden\n */\nexport var IMAGE = 'INSERT-IMAGE';\nexport var LINK = 'INSERT-LINK';\n/* Alignments plugin events\n * @hidden\n */\nexport var ALIGNMENT_TYPE = 'alignment-type';\n/* Indents plugin events\n * @hidden\n */\nexport var INDENT_TYPE = 'indent-type';\n/* Constant tag names\n */\n/** @hidden */\nexport var DEFAULT_TAG = 'p';\n/** @hidden */\nexport var BLOCK_TAGS = ['address', 'article', 'aside', 'audio', 'blockquote',\n 'canvas', 'details', 'dd', 'div', 'dl', 'dt', 'fieldset', 'figcaption', 'figure', 'footer',\n 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header', 'hgroup', 'hr', 'li', 'main', 'nav',\n 'noscript', 'ol', 'output', 'p', 'pre', 'section', 'table', 'tbody', 'td', 'tfoot', 'th',\n 'thead', 'tr', 'ul', 'video'];\n/* Selection plugin events\n * @hidden\n */\nexport var SELECTION_TYPE = 'selection-type';\n/* Insert HTML plugin events\n * @hidden\n */\nexport var INSERTHTML_TYPE = 'inserthtml-type';\n/* Clear Format HTML plugin events\n * @hidden\n */\nexport var CLEAR_TYPE = 'clear-type';\n","/**\n * `Selection` module is used to handle RTE Selections.\n */\nvar NodeSelection = /** @class */ (function () {\n function NodeSelection() {\n this.startNodeName = [];\n this.endNodeName = [];\n }\n NodeSelection.prototype.saveInstance = function (range, body) {\n this.range = range.cloneRange();\n this.rootNode = this.documentFromRange(range);\n this.body = body;\n this.startContainer = this.getNodeArray(range.startContainer, true);\n this.endContainer = this.getNodeArray(range.endContainer, false);\n this.startOffset = range.startOffset;\n this.endOffset = range.endOffset;\n this.html = this.body.innerHTML;\n return this;\n };\n NodeSelection.prototype.documentFromRange = function (range) {\n return (9 === range.startContainer.nodeType) ? range.startContainer : range.startContainer.ownerDocument;\n };\n NodeSelection.prototype.getRange = function (docElement) {\n var select = this.get(docElement);\n var range = select && select.rangeCount > 0 ? select.getRangeAt(select.rangeCount - 1) : docElement.createRange();\n return (range.startContainer !== docElement || range.endContainer !== docElement\n || range.startOffset || range.endOffset || (range.setStart(docElement.body, 0),\n range.collapse(!0)),\n range);\n };\n NodeSelection.prototype.get = function (docElement) {\n return docElement.defaultView.getSelection();\n };\n NodeSelection.prototype.save = function (range, docElement) {\n range = (range) ? range.cloneRange() : this.getRange(docElement);\n return this.saveInstance(range, docElement.body);\n };\n NodeSelection.prototype.getIndex = function (node) {\n var index;\n var num = 0;\n node = node.previousSibling;\n if (node) {\n for (var type = node.nodeType; node; null) {\n index = node.nodeType;\n num++;\n type = index;\n node = node.previousSibling;\n }\n }\n return num;\n };\n NodeSelection.prototype.isChildNode = function (nodeCollection, parentNode) {\n for (var index = 0; index < parentNode.childNodes.length; index++) {\n if (nodeCollection.indexOf(parentNode.childNodes[index]) > -1) {\n return true;\n }\n }\n return false;\n };\n NodeSelection.prototype.getNode = function (startNode, endNode, nodeCollection) {\n if (endNode === startNode &&\n (startNode.nodeType === 3 || !startNode.firstChild || nodeCollection.indexOf(startNode.firstChild) !== -1\n || this.isChildNode(nodeCollection, startNode))) {\n return null;\n }\n if (nodeCollection.indexOf(startNode.firstChild) === -1 && startNode.firstChild && !this.isChildNode(nodeCollection, startNode)) {\n return startNode.firstChild;\n }\n if (startNode.nextSibling) {\n return startNode.nextSibling;\n }\n if (!startNode.parentNode) {\n return null;\n }\n else {\n return startNode.parentNode;\n }\n };\n NodeSelection.prototype.getNodeCollection = function (range) {\n var startNode = range.startContainer.childNodes[range.startOffset]\n || range.startContainer;\n var endNode = range.endContainer.childNodes[(range.endOffset > 0) ? (range.endOffset - 1) : range.endOffset]\n || range.endContainer;\n if (startNode === endNode && startNode.childNodes.length === 0) {\n return [startNode];\n }\n var nodeCollection = [];\n do {\n if (nodeCollection.indexOf(startNode) === -1) {\n nodeCollection.push(startNode);\n }\n startNode = this.getNode(startNode, endNode, nodeCollection);\n } while (startNode);\n return nodeCollection;\n };\n NodeSelection.prototype.getParentNodeCollection = function (range) {\n return this.getParentNodes(this.getNodeCollection(range), range);\n };\n NodeSelection.prototype.getParentNodes = function (nodeCollection, range) {\n nodeCollection = nodeCollection.reverse();\n for (var index = 0; index < nodeCollection.length; index++) {\n if ((nodeCollection.indexOf(nodeCollection[index].parentNode) !== -1)\n || (nodeCollection[index].nodeType === 3 &&\n range.startContainer !== range.endContainer)) {\n nodeCollection.splice(index, 1);\n index--;\n }\n else if (nodeCollection[index].nodeType === 3) {\n nodeCollection[index] = nodeCollection[index].parentNode;\n }\n }\n return nodeCollection;\n };\n NodeSelection.prototype.getSelectionNodeCollection = function (range) {\n return this.getSelectionNodes(this.getNodeCollection(range));\n };\n NodeSelection.prototype.getSelectionNodes = function (nodeCollection) {\n nodeCollection = nodeCollection.reverse();\n for (var index = 0; index < nodeCollection.length; index++) {\n if (nodeCollection[index].nodeType !== 3 || nodeCollection[index].textContent.trim() === '') {\n nodeCollection.splice(index, 1);\n index--;\n }\n }\n return nodeCollection.reverse();\n };\n NodeSelection.prototype.getInsertNodeCollection = function (range) {\n return this.getInsertNodes(this.getNodeCollection(range));\n };\n NodeSelection.prototype.getInsertNodes = function (nodeCollection) {\n nodeCollection = nodeCollection.reverse();\n for (var index = 0; index < nodeCollection.length; index++) {\n if ((nodeCollection[index].childNodes.length !== 0 &&\n nodeCollection[index].nodeType !== 3) ||\n (nodeCollection[index].nodeType === 3 &&\n nodeCollection[index].textContent === '')) {\n nodeCollection.splice(index, 1);\n index--;\n }\n }\n return nodeCollection.reverse();\n };\n NodeSelection.prototype.getNodeArray = function (node, isStart, root) {\n var array = [];\n ((isStart) ? (this.startNodeName = []) : (this.endNodeName = []));\n for (; node !== (root ? root : this.rootNode); null) {\n (isStart) ? this.startNodeName.push(node.nodeName.toLowerCase()) : this.endNodeName.push(node.nodeName.toLowerCase());\n array.push(this.getIndex(node));\n node = node.parentNode;\n }\n return array;\n };\n NodeSelection.prototype.setRangePoint = function (range, isvalid, num, size) {\n var node = this.rootNode;\n var index = num.length;\n var constant = size;\n for (; index--; null) {\n node = node.childNodes[num[index]];\n }\n if (node && constant >= 0) {\n range[isvalid ? 'setStart' : 'setEnd'](node, constant);\n }\n return range;\n };\n NodeSelection.prototype.restore = function () {\n var range = this.range.cloneRange();\n range = this.setRangePoint(range, true, this.startContainer, this.startOffset);\n range = this.setRangePoint(range, false, this.endContainer, this.endOffset);\n this.selectRange(this.rootNode, range);\n return range;\n };\n NodeSelection.prototype.selectRange = function (docElement, range) {\n this.setRange(docElement, range);\n this.save(range, docElement);\n };\n NodeSelection.prototype.setRange = function (docElement, range) {\n var selection = this.get(docElement);\n selection.removeAllRanges();\n selection.addRange(range);\n };\n NodeSelection.prototype.setSelectionText = function (docElement, startNode, endNode, startIndex, endIndex) {\n var range = docElement.createRange();\n range.setStart(startNode, startIndex);\n range.setEnd(endNode, endIndex);\n this.setRange(docElement, range);\n };\n NodeSelection.prototype.setSelectionContents = function (docElement, element) {\n var range = docElement.createRange();\n range.selectNode(element);\n this.setRange(docElement, range);\n };\n NodeSelection.prototype.setSelectionNode = function (docElement, element) {\n var range = docElement.createRange();\n range.selectNodeContents(element);\n this.setRange(docElement, range);\n };\n NodeSelection.prototype.getSelectedNodes = function (docElement) {\n return this.getNodeCollection(this.getRange(docElement));\n };\n NodeSelection.prototype.Clear = function (docElement) {\n this.get(docElement).removeAllRanges();\n };\n NodeSelection.prototype.insertParentNode = function (docElement, newNode, range) {\n range.surroundContents(newNode);\n this.selectRange(docElement, range);\n };\n NodeSelection.prototype.setCursorPoint = function (docElement, element, point) {\n var range = docElement.createRange();\n var selection = docElement.defaultView.getSelection();\n range.setStart(element, point);\n range.collapse(true);\n selection.removeAllRanges();\n selection.addRange(range);\n };\n return NodeSelection;\n}());\nexport { NodeSelection };\n","import * as CONSTANT from './../base/constant';\nimport { append, detach } from '@syncfusion/ej2-base';\nimport { NodeSelection } from './../../selection/index';\nexport var markerClassName = {\n startSelection: 'e-editor-select-start',\n endSelection: 'e-editor-select-end'\n};\n/**\n * DOMNode internal plugin\n * @hidden\n */\nvar DOMNode = /** @class */ (function () {\n /**\n * Constructor for creating the DOMNode plugin\n * @hidden\n */\n function DOMNode(parent, currentDocument) {\n this.parent = parent;\n this.nodeSelection = new NodeSelection();\n this.currentDocument = currentDocument;\n }\n DOMNode.prototype.contents = function (element) {\n return (element && 'IFRAME' !== element.tagName ? Array.prototype.slice.call(element.childNodes || []) : []);\n };\n DOMNode.prototype.isBlockNode = function (element) {\n return (!!element && (element.nodeType === Node.ELEMENT_NODE && CONSTANT.BLOCK_TAGS.indexOf(element.tagName.toLowerCase()) >= 0));\n };\n DOMNode.prototype.isLink = function (element) {\n return (!!element && (element.nodeType === Node.ELEMENT_NODE && 'a' === element.tagName.toLowerCase()));\n };\n DOMNode.prototype.blockParentNode = function (element) {\n for (; element && element.parentNode !== this.parent && ((!element.parentNode ||\n !this.hasClass(element.parentNode, 'e-node-inner'))); null) {\n element = element.parentNode;\n if (this.isBlockNode(element)) {\n return element;\n }\n }\n return element;\n };\n DOMNode.prototype.rawAttributes = function (element) {\n var rawAttr = {};\n var attributes = element.attributes;\n if (attributes.length > 0) {\n for (var d = 0; d < attributes.length; d++) {\n var e = attributes[d];\n rawAttr[e.nodeName] = e.value;\n }\n }\n return rawAttr;\n };\n DOMNode.prototype.attributes = function (element) {\n if (!element) {\n return '';\n }\n var attr = '';\n var rawAttr = this.rawAttributes(element);\n var orderRawAttr = Object.keys(rawAttr).sort();\n for (var e = 0; e < orderRawAttr.length; e++) {\n var attrKey = orderRawAttr[e];\n var attrValue = rawAttr[attrKey];\n /* tslint:disable */\n if (attrValue.indexOf(\"'\") < 0 && attrValue.indexOf('\"') >= 0) {\n attr += ' ' + attrKey + \"='\" + attrValue + \"'\";\n }\n else if (attrValue.indexOf('\"') >= 0 && attrValue.indexOf(\"'\") >= 0) {\n /* tslint:enable */\n attrValue = attrValue.replace(/\"/g, '"');\n attr += ' ' + attrKey + '=\"' + attrValue + '\"';\n }\n else {\n attr += ' ' + attrKey + '=\"' + attrValue + '\"';\n }\n }\n return attr;\n };\n DOMNode.prototype.clearAttributes = function (element) {\n for (var attr = element.attributes, c = attr.length - 1; c >= 0; c--) {\n var key = attr[c];\n element.removeAttribute(key.nodeName);\n }\n };\n DOMNode.prototype.openTagString = function (element) {\n return '<' + element.tagName.toLowerCase() + this.attributes(element) + '>';\n };\n DOMNode.prototype.closeTagString = function (element) {\n return '';\n };\n DOMNode.prototype.createTagString = function (tagName, relativeElement, innerHTML) {\n return '<' + tagName.toLowerCase() + this.attributes(relativeElement) + '>' + innerHTML + '';\n };\n DOMNode.prototype.isList = function (element) {\n return !!element && ['UL', 'OL'].indexOf(element.tagName) >= 0;\n };\n DOMNode.prototype.isElement = function (element) {\n return element === this.parent;\n };\n DOMNode.prototype.isEditable = function (element) {\n return ((!element.getAttribute || element.getAttribute('contenteditable') === 'true')\n && ['STYLE', 'SCRIPT'].indexOf(element.tagName) < 0);\n };\n DOMNode.prototype.hasClass = function (element, className) {\n return element && element.classList && element.classList.contains(className);\n };\n DOMNode.prototype.replaceWith = function (element, value) {\n var parentNode = element.parentNode;\n parentNode.insertBefore(this.parseHTMLFragment(value), element);\n detach(element);\n };\n DOMNode.prototype.parseHTMLFragment = function (value) {\n /* tslint:disable */\n return document.createRange().createContextualFragment(value);\n /* tslint:enable */\n };\n DOMNode.prototype.wrap = function (element, wrapper) {\n element.parentNode.insertBefore(wrapper, element);\n return wrapper.appendChild(element);\n };\n DOMNode.prototype.insertAfter = function (newNode, referenceNode) {\n referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);\n };\n DOMNode.prototype.wrapInner = function (parent, wrapper) {\n parent.appendChild(wrapper);\n wrapper = parent.querySelector('.e-rte-wrap-inner');\n wrapper.classList.remove('e-rte-wrap-inner');\n if (wrapper.classList.length === 0) {\n wrapper.removeAttribute('class');\n }\n while (parent.firstChild !== wrapper) {\n wrapper.appendChild(parent.firstChild);\n }\n return wrapper;\n };\n DOMNode.prototype.unWrap = function (element) {\n var parent = element.parentNode;\n var unWrapNode = [];\n while (element.firstChild) {\n unWrapNode.push(element.firstChild);\n parent.insertBefore(element.firstChild, element);\n }\n unWrapNode = unWrapNode.length > 0 ? unWrapNode : [element.parentNode];\n parent.removeChild(element);\n return unWrapNode;\n };\n DOMNode.prototype.getSelectedNode = function (element, index) {\n if (element.nodeType === Node.ELEMENT_NODE && element.childNodes.length > 0 && element.childNodes[index]) {\n element = element.childNodes[index];\n }\n if (element.nodeType === Node.TEXT_NODE) {\n element = element.parentNode;\n }\n return element;\n };\n DOMNode.prototype.nodeFinds = function (element, elements) {\n var existNodes = [];\n for (var i = 0; i < elements.length; i++) {\n if (element.contains(elements[i]) && element !== elements[i]) {\n existNodes.push(elements[i]);\n }\n }\n return existNodes;\n };\n DOMNode.prototype.isEditorArea = function () {\n var range = this.getRangePoint(0);\n var element;\n for (element = range.commonAncestorContainer; element && !this.isElement(element); null) {\n element = element.parentNode;\n }\n return !!this.isElement(element);\n };\n DOMNode.prototype.getRangePoint = function (point) {\n var selection = this.getSelection();\n var ranges = [];\n if (selection && selection.getRangeAt && selection.rangeCount) {\n ranges = [];\n for (var f = 0; f < selection.rangeCount; f++) {\n ranges.push(selection.getRangeAt(f));\n }\n }\n else {\n ranges = [this.currentDocument.createRange()];\n }\n return 'undefined' !== typeof point ? ranges[point] : ranges;\n };\n DOMNode.prototype.getSelection = function () {\n return this.nodeSelection.get(this.currentDocument);\n };\n DOMNode.prototype.getPreviousNode = function (element) {\n element = element.previousSibling;\n for (; element && element.textContent === '\\n'; null) {\n element = element.previousSibling;\n }\n return element;\n };\n DOMNode.prototype.encode = function (value) {\n var divNode = document.createElement('div');\n divNode.innerText = value;\n return divNode.innerHTML.replace(//gi, '\\n');\n };\n DOMNode.prototype.saveMarker = function (save) {\n var start = this.parent.querySelector('.' + markerClassName.startSelection);\n var startTextNode;\n if (this.hasClass(start, markerClassName.startSelection) && start.classList.length > 1) {\n var replace = this.createTagString(CONSTANT.DEFAULT_TAG, start, this.encode(start.textContent));\n this.replaceWith(start, replace);\n start = this.parent.querySelector('.' + markerClassName.startSelection);\n start.classList.remove(markerClassName.startSelection);\n startTextNode = start.childNodes[0];\n }\n else {\n startTextNode = this.unWrap(start)[0];\n }\n var endTextNode;\n var end = this.parent.querySelector('.' + markerClassName.endSelection);\n if (this.hasClass(end, markerClassName.endSelection) && end.classList.length > 1) {\n var replace = this.createTagString(CONSTANT.DEFAULT_TAG, end, this.encode(end.textContent));\n this.replaceWith(end, replace);\n end = this.parent.querySelector('.' + markerClassName.endSelection);\n end.classList.remove(markerClassName.endSelection);\n endTextNode = end.childNodes[0];\n }\n else {\n endTextNode = end ? this.unWrap(end)[0] : startTextNode;\n }\n save.startContainer = save.getNodeArray(startTextNode, true);\n save.endContainer = save.getNodeArray(endTextNode, false);\n return save;\n };\n DOMNode.prototype.marker = function (className, textContent) {\n return '' + textContent + '';\n };\n DOMNode.prototype.setMarker = function (save) {\n var range = save.range;\n var start = (range.startContainer.childNodes[range.startOffset]\n || range.startContainer);\n var end = (range.endContainer.childNodes[(range.endOffset > 0) ? (range.endOffset - 1) : range.endOffset]\n || range.endContainer);\n if (start !== end) {\n this.replaceWith(start, this.marker(markerClassName.startSelection, this.encode(start.textContent)));\n this.replaceWith(end, this.marker(markerClassName.endSelection, this.encode(end.textContent)));\n }\n else {\n if (start.nodeType === 3) {\n this.replaceWith(start, this.marker(markerClassName.startSelection, this.encode(start.textContent)));\n }\n else {\n start = start.tagName === 'BR' ? start.parentNode : start;\n var marker = this.marker(markerClassName.startSelection, '');\n append([this.parseHTMLFragment(marker)], start);\n }\n }\n };\n DOMNode.prototype.blockNodes = function () {\n var collectionNodes = [];\n var selection = this.getSelection();\n if (this.isEditorArea() && selection.rangeCount) {\n var ranges = this.getRangePoint();\n for (var j = 0; j < ranges.length; j++) {\n var parentNode = void 0;\n var range = ranges[j];\n var startNode = this.getSelectedNode(range.startContainer, range.startOffset);\n var endNode = this.getSelectedNode(range.endContainer, range.endOffset);\n if (this.isBlockNode(startNode) && collectionNodes.indexOf(startNode) < 0) {\n collectionNodes.push(startNode);\n }\n parentNode = this.blockParentNode(startNode);\n if (parentNode && collectionNodes.indexOf(parentNode) < 0) {\n collectionNodes.push(parentNode);\n }\n var nodes = [];\n for (var node = startNode; node !== endNode && node !== this.parent; null) {\n if (nodes.indexOf(node) < 0 && node.children && node.children.length) {\n nodes.push(node);\n node = node.children[0];\n }\n else if (node.nextSibling) {\n node = node.nextSibling;\n }\n else if (node.parentNode) {\n node = node.parentNode;\n nodes.push(node);\n }\n if (this.isBlockNode(node) && nodes.indexOf(node) < 0 &&\n collectionNodes.indexOf(node) < 0 && (node !== endNode || range.endOffset > 0)) {\n collectionNodes.push(node);\n }\n }\n parentNode = this.blockParentNode(endNode);\n if (parentNode && collectionNodes.indexOf(parentNode) < 0) {\n collectionNodes.push(parentNode);\n }\n }\n }\n for (var i = collectionNodes.length - 1; i > 0; i--) {\n var nodes = this.nodeFinds(collectionNodes[i], collectionNodes);\n if (nodes.length) {\n var listNodes = collectionNodes[i].querySelectorAll('ul, ol');\n if (collectionNodes[i].tagName === 'LI' && listNodes.length > 0) {\n continue;\n }\n else {\n collectionNodes.splice(i, 1);\n }\n }\n }\n return collectionNodes;\n };\n return DOMNode;\n}());\nexport { DOMNode };\n","import * as CONSTANT from './../base/constant';\nimport { createElement, detach, prepend, append, attributes } from '@syncfusion/ej2-base';\nimport { markerClassName } from './dom-node';\nimport * as EVENTS from './../../common/constant';\n/**\n * Lists internal component\n * @hidden\n */\nvar Lists = /** @class */ (function () {\n /**\n * Constructor for creating the Lists plugin\n * @hidden\n */\n function Lists(parent) {\n this.parent = parent;\n this.domNode = this.parent.domNode;\n this.addEventListener();\n }\n Lists.prototype.addEventListener = function () {\n this.parent.observer.on(EVENTS.LIST_TYPE, this.applyListsHandler, this);\n this.parent.observer.on(EVENTS.KEY_DOWN_HANDLER, this.keyDownHandler, this);\n };\n Lists.prototype.keyDownHandler = function (e) {\n if (e.event.which === 9) {\n var range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n this.saveSelection = this.parent.nodeSelection.save(range, this.parent.currentDocument);\n var blockNodes = this.domNode.blockNodes();\n var startOffset = this.parent.nodeSelection.getRange(this.parent.currentDocument).startOffset;\n var endOffset = this.parent.nodeSelection.getRange(this.parent.currentDocument).endOffset;\n var nodes = [];\n var isNested = true;\n for (var i = 0; i < blockNodes.length; i++) {\n if (blockNodes[i].tagName === 'LI') {\n nodes.push(blockNodes[i]);\n }\n else if (blockNodes[i].parentNode.tagName === 'LI') {\n nodes.push(blockNodes[i].parentNode);\n }\n }\n if (nodes.length > 1 || nodes.length && ((startOffset === 0 && endOffset === 0) || e.ignoreDefault)) {\n e.event.preventDefault();\n e.event.stopPropagation();\n this.domNode.setMarker(this.saveSelection);\n this.currentAction = this.getAction(nodes[0]);\n if (e.event.shiftKey) {\n this.revertList(nodes);\n this.revertClean();\n }\n else {\n isNested = this.nestedList(nodes);\n }\n if (isNested) {\n this.cleanNode();\n this.parent.editableElement.focus();\n }\n this.saveSelection = this.domNode.saveMarker(this.saveSelection);\n this.saveSelection.restore();\n if (e.callBack) {\n e.callBack({\n requestType: this.currentAction,\n editorMode: 'HTML',\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.domNode.blockNodes(),\n event: e.event\n });\n }\n }\n }\n else {\n switch (e.event.action) {\n case 'ordered-list':\n this.applyListsHandler({ subCommand: 'OL', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'unordered-list':\n this.applyListsHandler({ subCommand: 'UL', callBack: e.callBack });\n e.event.preventDefault();\n break;\n }\n }\n };\n Lists.prototype.getAction = function (element) {\n var parentNode = element.parentNode;\n return (parentNode.nodeName === 'OL' ? 'OL' : 'UL');\n };\n Lists.prototype.revertClean = function () {\n var collectionNodes = this.parent.editableElement.querySelectorAll('ul, ol');\n for (var i = 0; i < collectionNodes.length; i++) {\n var listNodes = collectionNodes[i].querySelectorAll('ul, ol');\n if (listNodes.length > 0) {\n for (var j = 0; j < listNodes.length; j++) {\n var prevSibling = listNodes[j].previousSibling;\n if (prevSibling && prevSibling.tagName === 'LI') {\n prevSibling.appendChild(listNodes[j]);\n }\n }\n }\n }\n };\n Lists.prototype.nestedList = function (elements) {\n var isNested = false;\n for (var i = 0; i < elements.length; i++) {\n var prevSibling = this.domNode.getPreviousNode(elements[i]);\n if (prevSibling) {\n isNested = true;\n var siblingList = elements[i].querySelectorAll('ul, ol');\n var firstNode = siblingList[0];\n if (firstNode) {\n var nestedElement = createElement('li');\n prepend([nestedElement], firstNode);\n for (var h = this.domNode.contents(elements[i])[0]; h && !this.domNode.isList(h); null) {\n var nextSibling = h.nextSibling;\n nestedElement.appendChild(h);\n h = nextSibling;\n }\n append([firstNode], prevSibling);\n detach(elements[i]);\n }\n else {\n siblingList = prevSibling.querySelectorAll('ul, ol');\n firstNode = siblingList[0];\n if (firstNode) {\n append([elements[i]], firstNode);\n }\n else {\n var nestedElement = createElement(elements[i].parentNode.tagName);\n append([nestedElement], prevSibling);\n append([elements[i]], nestedElement);\n }\n }\n }\n }\n return isNested;\n };\n Lists.prototype.applyListsHandler = function (e) {\n var range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n this.saveSelection = this.parent.nodeSelection.save(range, this.parent.currentDocument);\n this.currentAction = e.subCommand;\n var listsNodes = this.domNode.blockNodes();\n for (var i = 0; i < listsNodes.length; i++) {\n if (listsNodes[i].tagName !== 'LI' && 'LI' === listsNodes[i].parentNode.tagName) {\n listsNodes[i] = listsNodes[i].parentNode;\n }\n }\n this.applyLists(listsNodes, this.currentAction);\n if (e.callBack) {\n e.callBack({\n requestType: this.currentAction,\n event: e.event,\n editorMode: 'HTML',\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.domNode.blockNodes()\n });\n }\n };\n Lists.prototype.applyLists = function (elements, type) {\n var isReverse = true;\n this.domNode.setMarker(this.saveSelection);\n if (this.isRevert(elements, type)) {\n this.revertList(elements);\n }\n else {\n this.checkLists(elements, type);\n for (var i = 0; i < elements.length; i++) {\n if ('LI' !== elements[i].tagName) {\n isReverse = false;\n var openTag = '<' + type + this.domNode.attributes(elements[i]) + '>';\n var closeTag = '';\n var newTag = 'li class=\"e-rte-replace-tag\"';\n var replaceHTML = (elements[i].tagName.toLowerCase() === CONSTANT.DEFAULT_TAG ? elements[i].innerHTML :\n elements[i].outerHTML);\n var innerHTML = this.domNode.createTagString(newTag, null, replaceHTML);\n var collectionString = openTag + innerHTML + closeTag;\n this.domNode.replaceWith(elements[i], collectionString);\n var element = this.parent.editableElement.querySelector('.e-rte-replace-tag');\n element.removeAttribute('class');\n }\n }\n }\n this.cleanNode();\n this.parent.editableElement.focus();\n this.saveSelection = this.domNode.saveMarker(this.saveSelection);\n this.saveSelection.restore();\n };\n Lists.prototype.isRevert = function (nodes, tagName) {\n var isRevert = true;\n for (var i = 0; i < nodes.length; i++) {\n if (nodes[i].tagName !== 'LI') {\n return false;\n }\n if (nodes[i].parentNode.tagName !== tagName) {\n isRevert = false;\n }\n }\n return isRevert;\n };\n Lists.prototype.checkLists = function (nodes, tagName) {\n var nodesTemp = [];\n for (var i = 0; i < nodes.length; i++) {\n var node = nodes[i].parentNode;\n if (nodes[i].tagName === 'LI' && node.tagName !== tagName && nodesTemp.indexOf(node) < 0) {\n nodesTemp.push(node);\n }\n }\n for (var j = nodesTemp.length - 1; j >= 0; j--) {\n var h = nodesTemp[j];\n var replace = '<' + tagName.toLowerCase() + ' '\n + this.domNode.attributes(h) + '>' + h.innerHTML + '';\n this.domNode.replaceWith(nodesTemp[j], replace);\n }\n };\n Lists.prototype.cleanNode = function () {\n var liParents = this.parent.editableElement.querySelectorAll('ol + ol, ul + ul');\n for (var c = 0; c < liParents.length; c++) {\n var node = liParents[c];\n if (this.domNode.isList(node.previousSibling) &&\n this.domNode.openTagString(node) === this.domNode.openTagString(node.previousSibling)) {\n var contentNodes = this.domNode.contents(node);\n for (var f = 0; f < contentNodes.length; f++) {\n node.previousSibling.appendChild(contentNodes[f]);\n }\n node.parentNode.removeChild(node);\n }\n }\n };\n Lists.prototype.revertList = function (elements) {\n for (var i = elements.length - 1; i >= 0; i--) {\n for (var j = i - 1; j >= 0; j--) {\n if (elements[j].contains((elements[i])) || elements[j] === elements[i]) {\n elements.splice(i, 1);\n break;\n }\n }\n }\n var viewNode = [];\n for (var i = 0; i < elements.length; i++) {\n var element = elements[i];\n var parentNode = elements[i].parentNode;\n var className = element.getAttribute('class');\n if (element.parentNode.insertBefore(this.closeTag(parentNode.tagName), element),\n 'LI' === parentNode.parentNode.tagName) {\n element.parentNode.insertBefore(this.closeTag('LI'), element);\n this.domNode.insertAfter(this.openTag('LI'), element);\n }\n else {\n var classAttr = '';\n if (className) {\n classAttr += ' class=\"' + className + '\"';\n }\n if (CONSTANT.DEFAULT_TAG && 0 === element.querySelectorAll(CONSTANT.BLOCK_TAGS.join(', ')).length) {\n var wrapper = '<' + CONSTANT.DEFAULT_TAG + classAttr + ' class=\"e-rte-wrap-inner\"' +\n this.domNode.attributes(parentNode) + '>';\n this.domNode.wrapInner(element, this.domNode.parseHTMLFragment(wrapper));\n }\n else if (this.domNode.contents(element)[0].nodeType === 3) {\n var replace = this.domNode.createTagString(CONSTANT.DEFAULT_TAG, parentNode, this.parent.domNode.encode(this.domNode.contents(element)[0].textContent));\n this.domNode.replaceWith(this.domNode.contents(element)[0], replace);\n }\n else if (this.domNode.contents(element)[0].classList.contains(markerClassName.startSelection) ||\n this.domNode.contents(element)[0].classList.contains(markerClassName.endSelection)) {\n var replace = this.domNode.createTagString(CONSTANT.DEFAULT_TAG, parentNode, this.domNode.contents(element)[0].outerHTML);\n this.domNode.replaceWith(this.domNode.contents(element)[0], replace);\n }\n else {\n var childNode = element.firstChild;\n className = childNode.getAttribute('class');\n attributes(childNode, this.domNode.rawAttributes(parentNode));\n if (className && childNode.getAttribute('class')) {\n attributes(childNode, { 'class': className + ' ' + childNode.getAttribute('class') });\n }\n }\n append([this.openTag('LI')], element);\n prepend([this.closeTag('LI')], element);\n }\n this.domNode.insertAfter(this.openTag(parentNode.tagName), element);\n if (parentNode.parentNode.tagName === 'LI') {\n parentNode = parentNode.parentNode.parentNode;\n }\n if (viewNode.indexOf(parentNode) < 0) {\n viewNode.push(parentNode);\n }\n }\n for (var i = 0; i < viewNode.length; i++) {\n var node = viewNode[i];\n var nodeInnerHtml = node.innerHTML;\n var closeTag = /<\\/span>/g;\n var openTag = /<\\/span>/g;\n nodeInnerHtml = nodeInnerHtml.replace(closeTag, '');\n nodeInnerHtml = nodeInnerHtml.replace(openTag, '<$1 ' + this.domNode.attributes(node) + '>');\n this.domNode.replaceWith(node, this.domNode.openTagString(node) + nodeInnerHtml.trim() + this.domNode.closeTagString(node));\n }\n var emptyLi = this.parent.editableElement.querySelectorAll('li:empty');\n for (var i = 0; i < emptyLi.length; i++) {\n detach(emptyLi[i]);\n }\n var emptyUl = this.parent.editableElement.querySelectorAll('ul:empty, ol:empty');\n for (var i = 0; i < emptyUl.length; i++) {\n detach(emptyUl[i]);\n }\n };\n Lists.prototype.openTag = function (type) {\n return this.domNode.parseHTMLFragment('');\n };\n Lists.prototype.closeTag = function (type) {\n return this.domNode.parseHTMLFragment('');\n };\n return Lists;\n}());\nexport { Lists };\n","import * as EVENTS from './../../common/constant';\n/**\n * Formats internal component\n * @hidden\n */\nvar Formats = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\n */\n function Formats(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n Formats.prototype.addEventListener = function () {\n this.parent.observer.on(EVENTS.FORMAT_TYPE, this.applyFormats, this);\n };\n Formats.prototype.getParentNode = function (node) {\n for (; node.parentNode && node.parentNode !== this.parent.editableElement; null) {\n node = node.parentNode;\n }\n return node;\n };\n Formats.prototype.applyFormats = function (e) {\n var range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n var save = this.parent.nodeSelection.save(range, this.parent.currentDocument);\n var formatsNodes = this.parent.domNode.blockNodes();\n if (e.subCommand.toLowerCase() === 'blockquote') {\n this.parent.domNode.setMarker(save);\n }\n for (var i = 0; i < formatsNodes.length; i++) {\n var parentNode = void 0;\n var replaceHTML = void 0;\n if (e.subCommand.toLowerCase() === 'blockquote') {\n parentNode = this.getParentNode(formatsNodes[i]);\n replaceHTML = this.parent.domNode.isList(parentNode) ? parentNode.outerHTML : parentNode.innerHTML;\n }\n else {\n parentNode = formatsNodes[i];\n replaceHTML = parentNode.innerHTML;\n }\n if (e.subCommand.toLowerCase() === parentNode.tagName.toLowerCase() || parentNode.tagName === 'LI') {\n continue;\n }\n this.cleanFormats(parentNode, e.subCommand);\n var replaceTag = this.parent.domNode.createTagString(e.subCommand, parentNode, replaceHTML.replace(/(?:\\r\\n|\\r|\\n)/g, ''));\n this.parent.domNode.replaceWith(parentNode, replaceTag);\n }\n this.parent.editableElement.focus();\n if (e.subCommand.toLowerCase() === 'blockquote') {\n save = this.parent.domNode.saveMarker(save);\n }\n save.restore();\n if (e.callBack) {\n e.callBack({\n requestType: e.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.domNode.blockNodes()\n });\n }\n };\n Formats.prototype.cleanFormats = function (element, tagName) {\n var ignoreAttr = ['display', 'font-size', 'margin-top', 'margin-bottom', 'margin-left', 'margin-right', 'font-weight'];\n tagName = tagName.toLowerCase();\n for (var i = 0; i < ignoreAttr.length && (tagName !== 'p' && tagName !== 'blockquote' && tagName !== 'pre'); i++) {\n element.style.removeProperty(ignoreAttr[i]);\n }\n };\n return Formats;\n}());\nexport { Formats };\n","/**\n * Node appending methods.\n * @hidden\n */\nvar InsertMethods = /** @class */ (function () {\n function InsertMethods() {\n }\n InsertMethods.WrapBefore = function (textNode, parentNode, isAfter) {\n parentNode.innerText = textNode.textContent;\n (!isAfter) ? this.AppendBefore(parentNode, textNode) : this.AppendBefore(parentNode, textNode, true);\n if (textNode.parentNode) {\n textNode.parentNode.removeChild(textNode);\n }\n return parentNode.childNodes[0];\n };\n InsertMethods.Wrap = function (childNode, parentNode) {\n this.AppendBefore(parentNode, childNode);\n parentNode.appendChild(childNode);\n return childNode;\n };\n InsertMethods.unwrap = function (node) {\n var parent = node.parentNode;\n var child = [];\n for (; node.firstChild; null) {\n child.push(parent.insertBefore(node.firstChild, node));\n }\n parent.removeChild(node);\n return child;\n };\n InsertMethods.AppendBefore = function (textNode, parentNode, isAfter) {\n return (parentNode.parentNode) ? ((!isAfter) ? parentNode.parentNode.insertBefore(textNode, parentNode)\n : parentNode.parentNode.insertBefore(textNode, parentNode.nextSibling)) :\n parentNode;\n };\n return InsertMethods;\n}());\nexport { InsertMethods };\n","import { NodeSelection } from './../../selection/index';\nimport { InsertMethods } from './insert-methods';\n/**\n * Split the Node based on selection\n * @hidden\n */\nvar NodeCutter = /** @class */ (function () {\n function NodeCutter() {\n this.position = -1;\n this.nodeSelection = new NodeSelection();\n }\n // Split Selection Node\n NodeCutter.prototype.GetSpliceNode = function (range, node) {\n node = this.SplitNode(range, node, true);\n node = this.SplitNode(range, node, false);\n return node;\n };\n NodeCutter.prototype.SplitNode = function (range, node, isCollapsed) {\n if (node) {\n var clone = range.cloneRange();\n var parent_1 = node.parentNode;\n var index = this.nodeSelection.getIndex(node);\n clone.collapse(isCollapsed);\n (isCollapsed) ? clone.setStartBefore(node) : clone.setEndAfter(node);\n var fragment = clone.extractContents();\n if (isCollapsed) {\n node = parent_1.childNodes[index];\n fragment = this.spliceEmptyNode(fragment, false);\n if (fragment && fragment.textContent !== '') {\n if (node) {\n InsertMethods.AppendBefore(fragment, node);\n }\n else {\n parent_1.appendChild(fragment);\n var divNode = document.createElement('div');\n divNode.innerHTML = '';\n node = divNode.firstChild;\n parent_1.appendChild(node);\n }\n }\n }\n else {\n node = parent_1.childNodes.length > 1 ? parent_1.childNodes[index] :\n parent_1.childNodes[0];\n fragment = this.spliceEmptyNode(fragment, true);\n if (fragment && fragment.textContent !== '') {\n if (node) {\n InsertMethods.AppendBefore(fragment, node, true);\n }\n else {\n parent_1.appendChild(fragment);\n var divNode = document.createElement('div');\n divNode.innerHTML = '';\n parent_1.insertBefore(divNode.firstChild, parent_1.firstChild);\n node = parent_1.firstChild;\n }\n }\n }\n return node;\n }\n else {\n return null;\n }\n };\n NodeCutter.prototype.spliceEmptyNode = function (fragment, isStart) {\n var len = fragment.childNodes.length - 1;\n if (len > -1 && !isStart) {\n this.spliceEmptyNode(fragment.childNodes[len], isStart);\n }\n else if (len > -1) {\n this.spliceEmptyNode(fragment.childNodes[0], isStart);\n }\n else if (fragment.nodeType !== 3 && fragment.nodeType !== 11) {\n fragment.parentNode.removeChild(fragment);\n }\n return fragment;\n };\n // Cursor Position split\n NodeCutter.prototype.GetCursorStart = function (indexes, index, isStart) {\n indexes = (isStart) ? indexes : indexes.reverse();\n var position = indexes[0];\n for (var num = 0; num < indexes.length && ((isStart) ? (indexes[num] < index) : (indexes[num] >= index)); num++) {\n position = indexes[num];\n }\n return position;\n };\n NodeCutter.prototype.GetCursorRange = function (docElement, range, node) {\n var cursorRange = docElement.createRange();\n var indexes = [];\n indexes.push(0);\n var str = this.TrimLineBreak(node.data);\n var index = str.indexOf(' ', 0);\n while (index !== -1) {\n if (indexes.indexOf(index) < 0) {\n indexes.push(index);\n }\n if (new RegExp('\\\\s').test(str[index - 1]) && (indexes.indexOf(index - 1) < 0)) {\n indexes.push(index - 1);\n }\n if (new RegExp('\\\\s').test(str[index + 1])) {\n indexes.push(index + 1);\n }\n index = str.indexOf(' ', (index + 1));\n }\n indexes.push(str.length);\n if ((indexes.indexOf(range.startOffset) >= 0)\n || ((indexes.indexOf(range.startOffset - 1) >= 0) && (range.startOffset !== 1\n || (range.startOffset === 1 && new RegExp('\\\\s').test(str[0])))\n || ((indexes[indexes.length - 1] - 1) === range.startOffset))) {\n cursorRange = range;\n this.position = 1;\n }\n else {\n var startOffset = this.GetCursorStart(indexes, range.startOffset, true);\n this.position = range.startOffset - startOffset;\n cursorRange.setStart(range.startContainer, startOffset);\n cursorRange.setEnd(range.startContainer, this.GetCursorStart(indexes, range.startOffset, false));\n }\n return cursorRange;\n };\n NodeCutter.prototype.GetCursorNode = function (docElement, range, node) {\n return this.GetSpliceNode(this.GetCursorRange(docElement, range, node), node);\n };\n NodeCutter.prototype.TrimLineBreak = function (line) {\n return line.replace(/(\\r\\n\\t|\\n|\\r\\t)/gm, ' ');\n };\n return NodeCutter;\n}());\nexport { NodeCutter };\n","import { NodeSelection } from './../../selection/index';\nimport { NodeCutter } from './nodecutter';\nimport { InsertMethods } from './insert-methods';\n/**\n * Insert a HTML Node or Text\n * @hidden\n */\nvar InsertHtml = /** @class */ (function () {\n function InsertHtml() {\n }\n InsertHtml.Insert = function (docElement, insertNode) {\n var node;\n if (typeof insertNode === 'string') {\n var divNode = document.createElement('div');\n divNode.innerHTML = insertNode;\n node = divNode.firstChild;\n }\n else {\n node = insertNode;\n }\n var nodeSelection = new NodeSelection();\n var nodeCutter = new NodeCutter();\n var range = nodeSelection.getRange(docElement);\n var isCollapsed = range.collapsed;\n if (!isCollapsed) {\n var nodes = nodeSelection.getInsertNodeCollection(range);\n var preNode = nodeCutter.GetSpliceNode(range, nodes[0]);\n var sibNode = preNode.previousSibling;\n var parentNode = preNode.parentNode;\n if (nodes.length === 1) {\n nodeSelection.setSelectionContents(docElement, preNode);\n range = nodeSelection.getRange(docElement);\n }\n else {\n var lasNode = nodeCutter.GetSpliceNode(range, nodes[nodes.length - 1]);\n nodeSelection.setSelectionText(docElement, preNode, lasNode, 0, (lasNode.nodeType === 3) ?\n lasNode.textContent.length : lasNode.childNodes.length);\n range = nodeSelection.getRange(docElement);\n }\n range.extractContents();\n for (var index = 0; index < nodes.length; index++) {\n if (nodes[index].nodeType !== 3 && nodes[index].parentNode != null) {\n nodes[index].parentNode.removeChild(nodes[index]);\n }\n }\n if (sibNode) {\n InsertMethods.AppendBefore(node, sibNode, true);\n }\n else {\n if (parentNode.firstChild) {\n InsertMethods.AppendBefore(node, parentNode.firstChild, false);\n }\n else {\n parentNode.appendChild(node);\n }\n }\n if (node.nodeType !== 3) {\n nodeSelection.setSelectionText(docElement, node, node, 0, node.childNodes.length);\n }\n else {\n nodeSelection.setSelectionText(docElement, node, node, 0, node.textContent.length);\n }\n }\n else {\n range.insertNode(node);\n if (node.nodeType !== 3 && node.childNodes.length > 0) {\n nodeSelection.setSelectionText(docElement, node, node, 1, 1);\n }\n else if (node.nodeType !== 3) {\n nodeSelection.setSelectionContents(docElement, node);\n }\n else {\n nodeSelection.setSelectionText(docElement, node, node, node.textContent.length, node.textContent.length);\n }\n }\n };\n return InsertHtml;\n}());\nexport { InsertHtml };\n","import { createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport * as CONSTANT from './../base/constant';\nimport { InsertHtml } from './inserthtml';\n/**\n * Link internal component\n * @hidden\n */\nvar LinkCommand = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\n */\n function LinkCommand(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n LinkCommand.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.LINK, this.createLink, this);\n };\n LinkCommand.prototype.createLink = function (e) {\n if (!isNullOrUndefined(e.item.selectParent) && e.item.selectParent[0].tagName === 'A') {\n var anchorEle = e.item.selectParent[0];\n anchorEle.setAttribute('href', e.item.url);\n anchorEle.setAttribute('title', e.item.title);\n anchorEle.innerHTML = e.item.text;\n anchorEle.setAttribute('target', e.item.target);\n e.item.selection.setSelectionText(this.parent.currentDocument, anchorEle, anchorEle, 1, 1);\n }\n else {\n var anchor = createElement('a', {\n className: 'e-rte-anchor', attrs: {\n href: e.item.url,\n target: e.item.target,\n title: e.item.title === '' ? e.item.url : e.item.title\n }\n });\n anchor.innerText = e.item.text === '' ? e.item.url : e.item.text;\n e.item.selection.restore();\n InsertHtml.Insert(this.parent.currentDocument, anchor);\n e.item.selection.setSelectionText(this.parent.currentDocument, anchor.childNodes[0], anchor.childNodes[0], 0, anchor.childNodes[0].textContent.length);\n }\n if (e.callBack) {\n e.callBack({\n requestType: 'Links',\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n return LinkCommand;\n}());\nexport { LinkCommand };\n","import * as CONSTANT from './../base/constant';\nimport { setStyleAttribute } from '@syncfusion/ej2-base';\nimport * as EVENTS from './../../common/constant';\n/**\n * Formats internal component\n * @hidden\n */\nvar Alignments = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\n */\n function Alignments(parent) {\n this.alignments = {\n 'JustifyLeft': 'left',\n 'JustifyCenter': 'center',\n 'JustifyRight': 'right',\n 'JustifyFull': 'justify'\n };\n this.parent = parent;\n this.addEventListener();\n }\n Alignments.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.ALIGNMENT_TYPE, this.applyAlignment, this);\n this.parent.observer.on(EVENTS.KEY_DOWN_HANDLER, this.onKeyDown, this);\n };\n Alignments.prototype.onKeyDown = function (e) {\n switch (e.event.action) {\n case 'justify-center':\n this.applyAlignment({ subCommand: 'JustifyCenter', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'justify-full':\n this.applyAlignment({ subCommand: 'JustifyFull', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'justify-left':\n this.applyAlignment({ subCommand: 'JustifyLeft', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'justify-right':\n this.applyAlignment({ subCommand: 'JustifyRight', callBack: e.callBack });\n e.event.preventDefault();\n break;\n }\n };\n Alignments.prototype.applyAlignment = function (e) {\n var range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n var save = this.parent.nodeSelection.save(range, this.parent.currentDocument);\n var alignmentNodes = this.parent.domNode.blockNodes();\n for (var i = 0; i < alignmentNodes.length; i++) {\n var parentNode = alignmentNodes[i];\n setStyleAttribute(parentNode, { 'text-align': this.alignments[e.subCommand] });\n }\n this.parent.editableElement.focus();\n save.restore();\n if (e.callBack) {\n e.callBack({\n requestType: e.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.domNode.blockNodes()\n });\n }\n };\n return Alignments;\n}());\nexport { Alignments };\n","import * as CONSTANT from './../base/constant';\nimport * as EVENTS from './../../common/constant';\n/**\n * Indents internal component\n * @hidden\n */\nvar Indents = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\n */\n function Indents(parent) {\n this.indentValue = 20;\n this.parent = parent;\n this.addEventListener();\n }\n Indents.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.INDENT_TYPE, this.applyIndents, this);\n this.parent.observer.on(EVENTS.KEY_DOWN_HANDLER, this.onKeyDown, this);\n };\n Indents.prototype.onKeyDown = function (e) {\n switch (e.event.action) {\n case 'indents':\n this.applyIndents({ subCommand: 'Indent', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'outdents':\n this.applyIndents({ subCommand: 'Outdent', callBack: e.callBack });\n e.event.preventDefault();\n break;\n }\n };\n Indents.prototype.applyIndents = function (e) {\n var range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n var save = this.parent.nodeSelection.save(range, this.parent.currentDocument);\n var indentsNodes = this.parent.domNode.blockNodes();\n var parentNodes = indentsNodes.slice();\n var listsNodes = [];\n for (var i = 0; i < parentNodes.length; i++) {\n if (parentNodes[i].tagName !== 'LI' && 'LI' === parentNodes[i].parentNode.tagName) {\n indentsNodes.splice(indentsNodes.indexOf(parentNodes[i]), 1);\n listsNodes.push(parentNodes[i].parentNode);\n }\n else if (parentNodes[i].tagName === 'LI') {\n indentsNodes.splice(indentsNodes.indexOf(parentNodes[i]), 1);\n listsNodes.push(parentNodes[i]);\n }\n }\n if (listsNodes.length > 0) {\n this.parent.observer.notify(EVENTS.KEY_DOWN_HANDLER, {\n event: {\n preventDefault: function () { return; },\n stopPropagation: function () { return; },\n shiftKey: (e.subCommand === 'Indent' ? false : true),\n which: 9\n },\n ignoreDefault: true\n });\n }\n for (var i = 0; i < indentsNodes.length; i++) {\n var parentNode = indentsNodes[i];\n var marginLeft = parentNode.style.marginLeft;\n var indentsValue = void 0;\n if (e.subCommand === 'Indent') {\n indentsValue = marginLeft === '' ? this.indentValue + 'px' : parseInt(marginLeft, null) + this.indentValue + 'px';\n parentNode.style.marginLeft = indentsValue;\n }\n else {\n indentsValue = (marginLeft === '' || marginLeft === '0px') ? '' : parseInt(marginLeft, null) - this.indentValue + 'px';\n parentNode.style.marginLeft = indentsValue;\n }\n }\n this.parent.editableElement.focus();\n save.restore();\n if (e.callBack) {\n e.callBack({\n requestType: e.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.domNode.blockNodes()\n });\n }\n };\n return Indents;\n}());\nexport { Indents };\n","import { createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport * as CONSTANT from './../base/constant';\nimport { InsertHtml } from './inserthtml';\n/**\n * Link internal component\n * @hidden\n */\nvar ImageCommand = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\n */\n function ImageCommand(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n ImageCommand.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.IMAGE, this.createImage, this);\n };\n ImageCommand.prototype.createImage = function (e) {\n if (!isNullOrUndefined(e.item.selectParent) && e.item.selectParent[0].tagName === 'IMG') {\n var imgEle = e.item.selectParent[0];\n imgEle.setAttribute('src', e.item.url);\n imgEle.setAttribute('alt', e.item.altText);\n }\n else {\n var imgElement = createElement('img', {\n className: 'e-rte-image e-imginline', attrs: {\n width: isNullOrUndefined(e.item.width) ? 'auto' : e.item.width,\n height: isNullOrUndefined(e.item.height) ? 'auto' : e.item.height,\n alt: (e.item.altText !== '') ? e.item.altText : ''\n }\n });\n imgElement.setAttribute('src', isNullOrUndefined(e.item.url) ? '' : e.item.url);\n if (!isNullOrUndefined(e.item.selection)) {\n e.item.selection.restore();\n }\n InsertHtml.Insert(this.parent.currentDocument, imgElement);\n }\n if (e.callBack) {\n e.callBack({\n requestType: 'Images',\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n return ImageCommand;\n}());\nexport { ImageCommand };\n","/**\n * Is formatted or not.\n * @hidden\n */\nvar IsFormatted = /** @class */ (function () {\n function IsFormatted() {\n }\n IsFormatted.prototype.getFormattedNode = function (node, format, endNode) {\n var parentNode = this.getFormatParent(node, format, endNode);\n if (parentNode !== null && parentNode !== endNode) {\n return parentNode;\n }\n return null;\n };\n IsFormatted.prototype.getFormatParent = function (node, format, endNode) {\n do {\n node = node.parentNode;\n } while (node && (node !== endNode) && !this.isFormattedNode(node, format));\n return node;\n };\n IsFormatted.prototype.isFormattedNode = function (node, format) {\n switch (format) {\n case 'bold':\n return IsFormatted.isBold(node);\n case 'italic':\n return IsFormatted.isItalic(node);\n case 'underline':\n return IsFormatted.isUnderline(node);\n case 'strikethrough':\n return IsFormatted.isStrikethrough(node);\n case 'superscript':\n return IsFormatted.isSuperscript(node);\n case 'subscript':\n return IsFormatted.isSubscript(node);\n case 'fontcolor':\n return this.isFontColor(node);\n case 'fontname':\n return this.isFontName(node);\n case 'fontsize':\n return this.isFontSize(node);\n case 'backgroundcolor':\n return this.isBackgroundColor(node);\n default:\n return false;\n }\n };\n IsFormatted.isBold = function (node) {\n var validTags = ['strong', 'b'];\n if (validTags.indexOf(node.nodeName.toLowerCase()) !== -1) {\n return true;\n }\n else if (this.inlineTags.indexOf(node.nodeName.toLowerCase()) !== -1 &&\n node.style && node.style.fontWeight === 'bold') {\n return true;\n }\n else {\n return false;\n }\n };\n IsFormatted.isItalic = function (node) {\n var validTags = ['em', 'i'];\n if (validTags.indexOf(node.nodeName.toLowerCase()) !== -1) {\n return true;\n }\n else if (this.inlineTags.indexOf(node.nodeName.toLowerCase()) !== -1 &&\n node.style && node.style.fontStyle === 'italic') {\n return true;\n }\n else {\n return false;\n }\n };\n IsFormatted.isUnderline = function (node) {\n var validTags = ['u'];\n if (validTags.indexOf(node.nodeName.toLowerCase()) !== -1) {\n return true;\n }\n else if (this.inlineTags.indexOf(node.nodeName.toLowerCase()) !== -1 &&\n node.style && node.style.textDecoration === 'underline') {\n return true;\n }\n else {\n return false;\n }\n };\n IsFormatted.isStrikethrough = function (node) {\n var validTags = ['del', 'strike'];\n if (validTags.indexOf(node.nodeName.toLowerCase()) !== -1) {\n return true;\n }\n else if (this.inlineTags.indexOf(node.nodeName.toLowerCase()) !== -1 &&\n node.style && node.style.textDecoration === 'line-through') {\n return true;\n }\n else {\n return false;\n }\n };\n IsFormatted.isSuperscript = function (node) {\n var validTags = ['sup'];\n if (validTags.indexOf(node.nodeName.toLowerCase()) !== -1) {\n return true;\n }\n else {\n return false;\n }\n };\n IsFormatted.isSubscript = function (node) {\n var validTags = ['sub'];\n if (validTags.indexOf(node.nodeName.toLowerCase()) !== -1) {\n return true;\n }\n else {\n return false;\n }\n };\n IsFormatted.prototype.isFontColor = function (node) {\n var color = node.style && node.style.color;\n if (IsFormatted.inlineTags.indexOf(node.nodeName.toLowerCase()) !== -1 &&\n color !== null && color !== '' && color !== undefined) {\n return true;\n }\n else {\n return false;\n }\n };\n IsFormatted.prototype.isBackgroundColor = function (node) {\n var backColor = node.style && node.style.backgroundColor;\n if (IsFormatted.inlineTags.indexOf(node.nodeName.toLowerCase()) !== -1 &&\n backColor !== null && backColor !== '' && backColor !== undefined) {\n return true;\n }\n else {\n return false;\n }\n };\n IsFormatted.prototype.isFontSize = function (node) {\n var size = node.style && node.style.fontSize;\n if (IsFormatted.inlineTags.indexOf(node.nodeName.toLowerCase()) !== -1 &&\n size !== null && size !== '' && size !== undefined) {\n return true;\n }\n else {\n return false;\n }\n };\n IsFormatted.prototype.isFontName = function (node) {\n var name = node.style && node.style.fontFamily;\n if (IsFormatted.inlineTags.indexOf(node.nodeName.toLowerCase()) !== -1 &&\n name !== null && name !== '' && name !== undefined) {\n return true;\n }\n else {\n return false;\n }\n };\n // Get Formatted Node\n IsFormatted.inlineTags = [\n 'a',\n 'abbr',\n 'acronym',\n 'b',\n 'bdo',\n 'big',\n 'cite',\n 'code',\n 'dfn',\n 'em',\n 'i',\n 'kbd',\n 'label',\n 'q',\n 'samp',\n 'small',\n 'span',\n 'strong',\n 'sub',\n 'sup',\n 'tt',\n 'u',\n 'var'\n ];\n return IsFormatted;\n}());\nexport { IsFormatted };\n","/**\n * `Selection` module is used to handle RTE Selections.\n */\nimport { NodeSelection } from './../../selection/index';\nimport { NodeCutter } from './nodecutter';\nimport { InsertMethods } from './insert-methods';\nimport { IsFormatted } from './isformatted';\nvar SelectionCommands = /** @class */ (function () {\n function SelectionCommands() {\n }\n SelectionCommands.applyFormat = function (docElement, format, endNode, value) {\n var validFormats = ['bold', 'italic', 'underline', 'strikethrough', 'superscript',\n 'subscript', 'uppercase', 'lowercase', 'fontcolor', 'fontname', 'fontsize', 'backgroundcolor'];\n if (validFormats.indexOf(format) > -1) {\n var domSelection = new NodeSelection();\n var nodeCutter = new NodeCutter();\n var isFormatted = new IsFormatted();\n var range = domSelection.getRange(docElement);\n var save = domSelection.save(range, docElement);\n var nodes = domSelection.getSelectionNodeCollection(range);\n var isCollapsed = false;\n var isFormat = false;\n var isCursor = false;\n var isFontStyle = (['fontcolor', 'fontname', 'fontsize', 'backgroundcolor'].indexOf(format) > -1);\n if (range.collapsed) {\n if (nodes.length > 0) {\n isCollapsed = true;\n range = nodeCutter.GetCursorRange(docElement, range, nodes[0]);\n }\n else {\n var cursorNode = this.insertCursorNode(domSelection, range, isFormatted, nodeCutter, format, value, endNode);\n domSelection.endContainer = domSelection.startContainer = domSelection.getNodeArray(cursorNode, true);\n domSelection.endOffset = domSelection.startOffset = 1;\n }\n }\n isCursor = range.collapsed;\n for (var index = 0; index < nodes.length; index++) {\n var formatNode = isFormatted.getFormattedNode(nodes[index], format, endNode);\n if (index === 0 && formatNode === null) {\n isFormat = true;\n }\n if (formatNode !== null && (!isFormat || isFontStyle)) {\n nodes[index] = this.removeFormat(nodes, index, formatNode, isCursor, isFormat, isFontStyle, range, nodeCutter, format, value, domSelection);\n }\n else {\n nodes[index] = this.insertFormat(nodes, index, formatNode, isCursor, isFormat, isFontStyle, range, nodeCutter, format, value);\n }\n domSelection = this.applySelection(nodes, domSelection, nodeCutter, index, isCollapsed);\n }\n save.restore();\n }\n };\n SelectionCommands.insertCursorNode = function (domSelection, range, isFormatted, nodeCutter, format, value, endNode) {\n var cursorNodes = domSelection.getNodeCollection(range);\n var cursorFormat = (cursorNodes.length > 0) ? isFormatted.getFormattedNode(cursorNodes[0], format, endNode) : null;\n var cursorNode = null;\n if (cursorFormat) {\n cursorNode = cursorNodes[0];\n InsertMethods.unwrap(cursorFormat);\n }\n else {\n cursorNode = this.getInsertNode(range, format, value).firstChild;\n }\n return cursorNode;\n };\n SelectionCommands.removeFormat = function (nodes, index, formatNode, isCursor, isFormat, isFontStyle, range, nodeCutter, format, value, domSelection) {\n var splitNode = null;\n if (!(range.startContainer === range.endContainer && range.startOffset === 0\n && range.endOffset === range.startContainer.length)) {\n var nodeIndex = [];\n var cloneNode = nodes[index];\n do {\n nodeIndex.push(domSelection.getIndex(cloneNode));\n cloneNode = cloneNode.parentNode;\n } while (cloneNode && (cloneNode !== formatNode));\n cloneNode = splitNode = nodeCutter.GetSpliceNode(range, formatNode);\n if (!isCursor) {\n while (cloneNode && cloneNode.childNodes.length > 0 && ((nodeIndex.length - 1) >= 0)\n && (cloneNode.childNodes.length > nodeIndex[nodeIndex.length - 1])) {\n cloneNode = cloneNode.childNodes[nodeIndex[nodeIndex.length - 1]];\n nodeIndex.pop();\n }\n if (cloneNode.nodeType === 3 && !(isCursor && cloneNode.nodeValue === '')) {\n nodes[index] = cloneNode;\n }\n else {\n var divNode = document.createElement('div');\n divNode.innerHTML = '';\n if (cloneNode.nodeType !== 3) {\n cloneNode.insertBefore(divNode.firstChild, cloneNode.firstChild);\n nodes[index] = cloneNode.firstChild;\n }\n else {\n cloneNode.parentNode.insertBefore(divNode.firstChild, cloneNode);\n nodes[index] = cloneNode.previousSibling;\n cloneNode.parentNode.removeChild(cloneNode);\n }\n }\n }\n else {\n var lastNode = splitNode;\n for (; lastNode.firstChild !== null && lastNode.firstChild.nodeType !== 3; null) {\n lastNode = lastNode.firstChild;\n }\n lastNode.innerHTML = '';\n nodes[index] = lastNode.firstChild;\n }\n }\n var child = InsertMethods.unwrap(formatNode);\n if (child.length > 0 && isFontStyle) {\n for (var num = 0; num < child.length; num++) {\n child[num] = InsertMethods.Wrap(child[num], this.GetFormatNode(format, value));\n }\n }\n return nodes[index];\n };\n SelectionCommands.insertFormat = function (nodes, index, formatNode, isCursor, isFormat, isFontStyle, range, nodeCutter, format, value) {\n if (!isCursor) {\n if ((formatNode === null && isFormat) || isFontStyle) {\n nodes[index] = nodeCutter.GetSpliceNode(range, nodes[index]);\n nodes[index].textContent = nodeCutter.TrimLineBreak(nodes[index].textContent);\n if (format === 'uppercase' || format === 'lowercase') {\n nodes[index].textContent = (format === 'uppercase') ? nodes[index].textContent.toLocaleUpperCase()\n : nodes[index].textContent.toLocaleLowerCase();\n }\n else if (!(isFontStyle === true && value === '')) {\n var element = this.GetFormatNode(format, value);\n nodes[index] = (index === (nodes.length - 1)) ? InsertMethods.Wrap(nodes[index], element)\n : InsertMethods.WrapBefore(nodes[index], element, true);\n nodes[index] = this.getChildNode(nodes[index], element);\n }\n }\n else {\n nodes[index] = nodeCutter.GetSpliceNode(range, nodes[index]);\n }\n }\n else {\n if (format !== 'uppercase' && format !== 'lowercase') {\n var element = this.getInsertNode(range, format, value);\n nodes[index] = element.firstChild;\n nodeCutter.position = 1;\n }\n else {\n nodeCutter.position = range.startOffset;\n }\n }\n return nodes[index];\n };\n SelectionCommands.getInsertNode = function (range, format, value) {\n var element = this.GetFormatNode(format, value);\n element.innerHTML = '';\n range.insertNode(element);\n return element;\n };\n SelectionCommands.getChildNode = function (node, element) {\n if (node === undefined || node === null) {\n element.innerHTML = '';\n node = element.firstChild;\n }\n return node;\n };\n SelectionCommands.applySelection = function (nodes, domSelection, nodeCutter, index, isCollapsed) {\n if (nodes.length === 1 && !isCollapsed) {\n domSelection.startContainer = domSelection.getNodeArray(nodes[index], true);\n domSelection.endContainer = domSelection.startContainer;\n domSelection.startOffset = 0;\n domSelection.endOffset = nodes[index].textContent.length;\n }\n else if (nodes.length === 1 && isCollapsed) {\n domSelection.startContainer = domSelection.getNodeArray(nodes[index], true);\n domSelection.endContainer = domSelection.startContainer;\n domSelection.startOffset = nodeCutter.position;\n domSelection.endOffset = nodeCutter.position;\n }\n else if (index === 0) {\n domSelection.startContainer = domSelection.getNodeArray(nodes[index], true);\n domSelection.startOffset = 0;\n }\n else if (index === nodes.length - 1) {\n domSelection.endContainer = domSelection.getNodeArray(nodes[index], false);\n domSelection.endOffset = nodes[index].textContent.length;\n }\n return domSelection;\n };\n SelectionCommands.GetFormatNode = function (format, value) {\n var node;\n switch (format) {\n case 'bold':\n return document.createElement('strong');\n case 'italic':\n return document.createElement('em');\n case 'underline':\n node = document.createElement('span');\n node.style.textDecoration = 'underline';\n return node;\n case 'strikethrough':\n node = document.createElement('span');\n node.style.textDecoration = 'line-through';\n return node;\n case 'superscript':\n return document.createElement('sup');\n case 'subscript':\n return document.createElement('sub');\n case 'fontcolor':\n node = document.createElement('span');\n node.style.color = value;\n return node;\n case 'fontname':\n node = document.createElement('span');\n node.style.fontFamily = value;\n return node;\n case 'fontsize':\n node = document.createElement('span');\n node.style.fontSize = value;\n return node;\n default:\n node = document.createElement('span');\n node.style.backgroundColor = value;\n return node;\n }\n };\n return SelectionCommands;\n}());\nexport { SelectionCommands };\n","import * as CONSTANT from './../base/constant';\nimport { SelectionCommands } from './selection-commands';\nimport * as EVENTS from './../../common/constant';\n/**\n * Selection EXEC internal component\n * @hidden\n */\nvar SelectionBasedExec = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\n */\n function SelectionBasedExec(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n SelectionBasedExec.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.SELECTION_TYPE, this.applySelection, this);\n this.parent.observer.on(EVENTS.KEY_DOWN_HANDLER, this.keyDownHandler, this);\n };\n SelectionBasedExec.prototype.keyDownHandler = function (e) {\n var validFormats = ['bold', 'italic', 'underline', 'strikethrough', 'superscript',\n 'subscript', 'uppercase', 'lowercase'];\n if (e.event.ctrlKey && validFormats.indexOf(e.event.action) > -1) {\n e.event.preventDefault();\n SelectionCommands.applyFormat(this.parent.currentDocument, e.event.action, this.parent.editableElement);\n this.callBack(e, e.event.action);\n }\n };\n SelectionBasedExec.prototype.applySelection = function (e) {\n SelectionCommands.applyFormat(this.parent.currentDocument, e.subCommand.toLocaleLowerCase(), this.parent.editableElement, e.value);\n this.callBack(e, e.subCommand);\n };\n SelectionBasedExec.prototype.callBack = function (event, action) {\n if (event.callBack) {\n event.callBack({\n requestType: action,\n event: event.event,\n editorMode: 'HTML',\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n return SelectionBasedExec;\n}());\nexport { SelectionBasedExec };\n","import * as CONSTANT from './../base/constant';\nimport { InsertHtml } from './inserthtml';\n/**\n * Selection EXEC internal component\n * @hidden\n */\nvar InsertHtmlExec = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\n */\n function InsertHtmlExec(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n InsertHtmlExec.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.INSERTHTML_TYPE, this.applyHtml, this);\n };\n InsertHtmlExec.prototype.applyHtml = function (e) {\n InsertHtml.Insert(this.parent.currentDocument, e.value);\n if (e.callBack) {\n e.callBack({\n requestType: e.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n return InsertHtmlExec;\n}());\nexport { InsertHtmlExec };\n","/**\n * `Clear Format` module is used to handle Clear Format.\n */\nimport { NodeSelection } from './../../selection/index';\nimport { NodeCutter } from './nodecutter';\nimport { InsertMethods } from './insert-methods';\nimport { IsFormatted } from './isformatted';\nvar ClearFormat = /** @class */ (function () {\n function ClearFormat() {\n }\n ClearFormat.clear = function (docElement, endNode) {\n var nodeSelection = new NodeSelection();\n var nodeCutter = new NodeCutter();\n var range = nodeSelection.getRange(docElement);\n var isCollapsed = range.collapsed;\n var nodes = nodeSelection.getInsertNodeCollection(range);\n var save = nodeSelection.save(range, docElement);\n if (!isCollapsed) {\n var preNode = nodeCutter.GetSpliceNode(range, nodes[0]);\n if (nodes.length === 1) {\n nodeSelection.setSelectionContents(docElement, preNode);\n range = nodeSelection.getRange(docElement);\n }\n else {\n var lasNode = nodeCutter.GetSpliceNode(range, nodes[nodes.length - 1]);\n nodeSelection.setSelectionText(docElement, preNode, lasNode, 0, (lasNode.nodeType === 3) ?\n lasNode.textContent.length : lasNode.childNodes.length);\n range = nodeSelection.getRange(docElement);\n }\n var exactNodes = nodeSelection.getNodeCollection(range);\n var cloneSelectNodes = exactNodes.slice();\n this.clearInlines(nodeSelection.getSelectionNodes(cloneSelectNodes), cloneSelectNodes, nodeSelection.getRange(docElement), nodeCutter, endNode);\n this.reSelection(docElement, save, exactNodes);\n range = nodeSelection.getRange(docElement);\n exactNodes = nodeSelection.getNodeCollection(range);\n var cloneParentNodes = exactNodes.slice();\n this.clearBlocks(docElement, cloneParentNodes, endNode, nodeCutter, nodeSelection);\n this.reSelection(docElement, save, exactNodes);\n }\n };\n ClearFormat.reSelection = function (docElement, save, exactNodes) {\n var selectionNodes = save.getInsertNodes(exactNodes);\n save.startContainer = save.getNodeArray(selectionNodes[0], true, docElement);\n save.startOffset = 0;\n save.endContainer = save.getNodeArray(selectionNodes[selectionNodes.length - 1], false, docElement);\n var endIndexNode = selectionNodes[selectionNodes.length - 1];\n save.endOffset = (endIndexNode.nodeType === 3) ? endIndexNode.textContent.length\n : endIndexNode.childNodes.length;\n save.restore();\n };\n ClearFormat.clearBlocks = function (docElement, nodes, endNode, nodeCutter, nodeSelection) {\n var parentNodes = [];\n for (var index = 0; index < nodes.length; index++) {\n if (this.BLOCK_TAGS.indexOf(nodes[index].nodeName.toLocaleLowerCase()) > -1\n && parentNodes.indexOf(nodes[index]) === -1) {\n parentNodes.push(nodes[index]);\n }\n else if ((this.BLOCK_TAGS.indexOf(nodes[index].parentNode.nodeName.toLocaleLowerCase()) > -1)\n && parentNodes.indexOf(nodes[index].parentNode) === -1\n && endNode !== nodes[index].parentNode) {\n parentNodes.push(nodes[index].parentNode);\n }\n }\n parentNodes = this.spliceParent(parentNodes, nodes)[0];\n parentNodes = this.removeParent(parentNodes);\n this.unWrap(docElement, parentNodes, nodeCutter, nodeSelection);\n };\n ClearFormat.spliceParent = function (parentNodes, nodes) {\n for (var index1 = 0; index1 < parentNodes.length; index1++) {\n var len = parentNodes[index1].childNodes.length;\n for (var index2 = 0; index2 < len; index2++) {\n if ((nodes.indexOf(parentNodes[index1].childNodes[index2]) > 0)\n && (parentNodes[index1].childNodes[index2].childNodes.length > 0)) {\n nodes = this.spliceParent([parentNodes[index1].childNodes[index2]], nodes)[1];\n }\n if ((nodes.indexOf(parentNodes[index1].childNodes[index2]) <= -1) &&\n (parentNodes[index1].childNodes[index2].textContent.trim() !== '')) {\n for (var index3 = 0; index3 < len; index3++) {\n if (nodes.indexOf(parentNodes[index1].childNodes[index3]) > -1) {\n nodes.splice(nodes.indexOf(parentNodes[index1].childNodes[index3]), 1);\n }\n }\n index2 = parentNodes[index1].childNodes.length;\n var parentIndex = parentNodes.indexOf(parentNodes[index1].parentNode);\n var nodeIndex = nodes.indexOf(parentNodes[index1].parentNode);\n if (parentIndex > -1) {\n parentNodes.splice(parentIndex, 1);\n }\n if (nodeIndex > -1) {\n nodes.splice(nodeIndex, 1);\n }\n var elementIndex = nodes.indexOf(parentNodes[index1]);\n if (elementIndex > -1) {\n nodes.splice(elementIndex, 1);\n }\n parentNodes.splice(index1, 1);\n index1--;\n }\n }\n }\n return [parentNodes, nodes];\n };\n ClearFormat.removeChild = function (parentNodes, parentNode) {\n var count = parentNode.childNodes.length;\n if (count > 0) {\n for (var index = 0; index < count; index++) {\n if (parentNodes.indexOf(parentNode.childNodes[index]) > -1) {\n parentNodes = this.removeChild(parentNodes, parentNode.childNodes[index]);\n parentNodes.splice(parentNodes.indexOf(parentNode.childNodes[index]), 1);\n }\n }\n }\n return parentNodes;\n };\n ClearFormat.removeParent = function (parentNodes) {\n for (var index = 0; index < parentNodes.length; index++) {\n if (parentNodes.indexOf(parentNodes[index].parentNode) > -1) {\n parentNodes = this.removeChild(parentNodes, parentNodes[index]);\n parentNodes.splice(index, 1);\n index--;\n }\n }\n return parentNodes;\n };\n ClearFormat.unWrap = function (docElement, parentNodes, nodeCutter, nodeSelection) {\n for (var index1 = 0; index1 < parentNodes.length; index1++) {\n if (this.NONVALID_TAGS.indexOf(parentNodes[index1].nodeName.toLowerCase()) > -1\n && parentNodes[index1].parentNode\n && this.NONVALID_PARENT_TAGS.indexOf(parentNodes[index1].parentNode.nodeName.toLowerCase()) > -1) {\n nodeSelection.setSelectionText(docElement, parentNodes[index1], parentNodes[index1], 0, parentNodes[index1].childNodes.length);\n InsertMethods.unwrap(nodeCutter.GetSpliceNode(nodeSelection.getRange(docElement), parentNodes[index1].parentNode));\n }\n if (parentNodes[index1].nodeName.toLocaleLowerCase() !== 'p') {\n if (this.NONVALID_PARENT_TAGS.indexOf(parentNodes[index1].nodeName.toLowerCase()) < 0\n && parentNodes[index1].parentNode.nodeName.toLocaleLowerCase() !== 'p'\n && !(parentNodes[index1].childNodes.length === 1\n && parentNodes[index1].childNodes[0].nodeName.toLocaleLowerCase() === 'p')) {\n InsertMethods.Wrap(parentNodes[index1], docElement.createElement('p'));\n }\n var childNodes = InsertMethods.unwrap(parentNodes[index1]);\n if (childNodes.length === 1\n && childNodes[0].parentNode.nodeName.toLocaleLowerCase() === 'p') {\n InsertMethods.Wrap(parentNodes[index1], docElement.createElement('p'));\n InsertMethods.unwrap(parentNodes[index1]);\n }\n for (var index2 = 0; index2 < childNodes.length; index2++) {\n if (this.NONVALID_TAGS.indexOf(childNodes[index2].nodeName.toLowerCase()) > -1) {\n this.unWrap(docElement, [childNodes[index2]], nodeCutter, nodeSelection);\n }\n }\n }\n else {\n InsertMethods.Wrap(parentNodes[index1], docElement.createElement('p'));\n InsertMethods.unwrap(parentNodes[index1]);\n }\n }\n };\n ClearFormat.clearInlines = function (textNodes, nodes, range, nodeCutter, endNode) {\n for (var index = 0; index < textNodes.length; index++) {\n if (textNodes[index].parentNode &&\n IsFormatted.inlineTags.indexOf(textNodes[index].parentNode.nodeName.toLocaleLowerCase()) > -1) {\n nodeCutter.GetSpliceNode(range, textNodes[index].parentNode);\n this.removeInlineParent(textNodes[index].parentNode);\n }\n }\n };\n ClearFormat.removeInlineParent = function (textNodes) {\n var nodes = InsertMethods.unwrap(textNodes);\n for (var index = 0; index < nodes.length; index++) {\n if (nodes[index].parentNode.childNodes.length === 1\n && IsFormatted.inlineTags.indexOf(nodes[index].parentNode.nodeName.toLocaleLowerCase()) > -1) {\n this.removeInlineParent(nodes[index].parentNode);\n }\n else if (IsFormatted.inlineTags.indexOf(nodes[index].nodeName.toLocaleLowerCase()) > -1) {\n this.removeInlineParent(nodes[index]);\n }\n }\n };\n ClearFormat.BLOCK_TAGS = ['address', 'article', 'aside', 'blockquote',\n 'details', 'dd', 'div', 'dl', 'dt', 'fieldset', 'figcaption', 'figure', 'footer',\n 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header', 'hgroup', 'li', 'main', 'nav',\n 'noscript', 'ol', 'p', 'pre', 'section', 'table', 'tbody', 'td', 'tfoot', 'th',\n 'thead', 'tr', 'ul'];\n ClearFormat.NONVALID_PARENT_TAGS = ['thead', 'tbody', 'ul', 'ol', 'table', 'tfoot'];\n ClearFormat.NONVALID_TAGS = ['thead', 'tbody', 'figcaption', 'td', 'tr',\n 'th', 'tfoot', 'figcaption', 'li'];\n return ClearFormat;\n}());\nexport { ClearFormat };\n","import * as CONSTANT from './../base/constant';\nimport { ClearFormat } from './clearformat';\nimport * as EVENTS from './../../common/constant';\n/**\n * Clear Format EXEC internal component\n * @hidden\n */\nvar ClearFormatExec = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\n */\n function ClearFormatExec(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n ClearFormatExec.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.CLEAR_TYPE, this.applyClear, this);\n this.parent.observer.on(EVENTS.KEY_DOWN_HANDLER, this.onKeyDown, this);\n };\n ClearFormatExec.prototype.onKeyDown = function (e) {\n switch (e.event.action) {\n case 'clear-format':\n this.applyClear({ subCommand: 'ClearFormat', callBack: e.callBack });\n e.event.preventDefault();\n break;\n }\n };\n ClearFormatExec.prototype.applyClear = function (e) {\n if (e.subCommand === 'ClearFormat') {\n ClearFormat.clear(this.parent.currentDocument, this.parent.editableElement);\n if (e.callBack) {\n e.callBack({\n requestType: e.subCommand,\n event: e.event,\n editorMode: 'HTML',\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n }\n };\n return ClearFormatExec;\n}());\nexport { ClearFormatExec };\n","import { debounce, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { NodeSelection } from './../../selection/selection';\nimport * as EVENTS from './../../common/constant';\n/**\n * `Undo` module is used to handle undo actions.\n */\nvar UndoRedoManager = /** @class */ (function () {\n function UndoRedoManager(parent, options) {\n this.undoRedoStack = [];\n this.parent = parent;\n this.undoRedoSteps = !isNullOrUndefined(options) ? options.undoRedoSteps : 30;\n this.undoRedoTimer = !isNullOrUndefined(options) ? options.undoRedoTimer : 300;\n this.addEventListener();\n }\n UndoRedoManager.prototype.addEventListener = function () {\n var debounceListener = debounce(this.keyUp, this.undoRedoTimer);\n this.parent.observer.on(EVENTS.KEY_UP_HANDLER, debounceListener, this);\n this.parent.observer.on(EVENTS.KEY_DOWN_HANDLER, this.keyDown, this);\n this.parent.observer.on(EVENTS.ACTION, this.onAction, this);\n };\n UndoRedoManager.prototype.removeEventListener = function () {\n this.parent.observer.off(EVENTS.KEY_UP_HANDLER, this.keyUp);\n this.parent.observer.off(EVENTS.KEY_DOWN_HANDLER, this.keyDown);\n this.parent.observer.off(EVENTS.ACTION, this.onAction);\n };\n UndoRedoManager.prototype.onAction = function (e) {\n if (e.subCommand === 'Undo') {\n this.undo(e);\n }\n else {\n this.redo(e);\n }\n };\n /**\n * Destroys the ToolBar.\n * @method destroy\n * @return {void}\n */\n UndoRedoManager.prototype.destroy = function () {\n this.removeEventListener();\n };\n UndoRedoManager.prototype.keyDown = function (e) {\n var event = e.event;\n var proxy = this;\n switch (event.action) {\n case 'undo':\n event.preventDefault();\n proxy.undo(e);\n break;\n case 'redo':\n event.preventDefault();\n proxy.redo(e);\n break;\n }\n };\n UndoRedoManager.prototype.keyUp = function (e) {\n if (e.event.keyCode !== 17 && !e.event.ctrlKey) {\n this.saveData(e);\n }\n };\n /**\n * RTE collection stored html format.\n * @method saveData\n * @return {void}\n */\n UndoRedoManager.prototype.saveData = function (e) {\n var range = new NodeSelection().getRange(this.parent.currentDocument);\n var save = new NodeSelection().save(range, this.parent.currentDocument);\n var htmlText = this.parent.editableElement.innerHTML;\n var changEle = { text: htmlText, range: save };\n if (this.undoRedoStack.length >= this.steps) {\n this.undoRedoStack = this.undoRedoStack.slice(0, this.steps + 1);\n }\n if (this.undoRedoStack.length > 1 && (this.undoRedoStack[this.undoRedoStack.length - 1].range.range.collapsed && range.collapsed) &&\n (this.undoRedoStack[this.undoRedoStack.length - 1].range.startOffset === save.range.startOffset) &&\n (this.undoRedoStack[this.undoRedoStack.length - 1].range.endOffset === save.range.endOffset)) {\n return;\n }\n this.undoRedoStack.push(changEle);\n this.steps = this.undoRedoStack.length - 1;\n if (this.undoRedoStack.length > this.undoRedoSteps) {\n this.undoRedoStack.shift();\n }\n if (e && e.callBack) {\n e.callBack();\n }\n };\n /**\n * Undo the editable text.\n * @method undo\n * @return {void}\n */\n UndoRedoManager.prototype.undo = function (e) {\n if (this.steps > 0) {\n var range = this.undoRedoStack[this.steps - 1].range;\n var removedContent = this.undoRedoStack[this.steps - 1].text;\n this.parent.editableElement.innerHTML = removedContent;\n this.parent.editableElement.focus();\n range.restore();\n this.steps--;\n if (e.callBack) {\n e.callBack({\n requestType: 'Undo',\n editorMode: 'HTML',\n range: range,\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument),\n event: e.event\n });\n }\n }\n };\n /**\n * Redo the editable text.\n * @method redo\n * @return {void}\n */\n UndoRedoManager.prototype.redo = function (e) {\n if (this.undoRedoStack[this.steps + 1] != null) {\n var range = this.undoRedoStack[this.steps + 1].range;\n this.parent.editableElement.innerHTML = this.undoRedoStack[this.steps + 1].text;\n this.parent.editableElement.focus();\n range.restore();\n this.steps++;\n if (e.callBack) {\n e.callBack({\n requestType: 'Redo',\n editorMode: 'HTML',\n range: range,\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument),\n event: e.event\n });\n }\n }\n };\n UndoRedoManager.prototype.getUndoStatus = function () {\n var status = { undo: false, redo: false };\n if (this.steps > 0) {\n status.undo = true;\n }\n if (this.undoRedoStack[this.steps + 1] != null) {\n status.redo = true;\n }\n return status;\n };\n return UndoRedoManager;\n}());\nexport { UndoRedoManager };\n","import { Observer } from '@syncfusion/ej2-base';\nimport * as CONSTANT from './constant';\nimport { Lists } from './../plugin/lists';\nimport { NodeSelection } from './../../selection/index';\nimport { DOMNode } from './../plugin/dom-node';\nimport { Formats } from './../plugin/formats';\nimport { LinkCommand } from './../plugin/link';\nimport { Alignments } from './../plugin/alignments';\nimport { Indents } from './../plugin/indents';\nimport { ImageCommand } from './../plugin/image';\nimport { SelectionBasedExec } from './../plugin/selection-exec';\nimport { InsertHtmlExec } from './../plugin/inserthtml-exec';\nimport { ClearFormatExec } from './../plugin/clearformat-exec';\nimport { UndoRedoManager } from './../plugin/undo';\nimport * as EVENTS from './../../common/constant';\n/**\n * EditorManager internal component\n * @hidden\n */\nvar EditorManager = /** @class */ (function () {\n /**\n * Constructor for creating the component\n * @hidden\n */\n function EditorManager(options) {\n this.currentDocument = options.document;\n this.editableElement = options.editableElement;\n this.nodeSelection = new NodeSelection();\n this.domNode = new DOMNode(this.editableElement, this.currentDocument);\n this.observer = new Observer(this);\n this.listObj = new Lists(this);\n this.formatObj = new Formats(this);\n this.alignmentObj = new Alignments(this);\n this.indentsObj = new Indents(this);\n this.linkObj = new LinkCommand(this);\n this.imgObj = new ImageCommand(this);\n this.selectionObj = new SelectionBasedExec(this);\n this.inserthtmlObj = new InsertHtmlExec(this);\n this.clearObj = new ClearFormatExec(this);\n this.undoRedoManager = new UndoRedoManager(this, options.options);\n this.wireEvents();\n }\n EditorManager.prototype.wireEvents = function () {\n this.observer.on(EVENTS.KEY_DOWN, this.editorKeyDown, this);\n this.observer.on(EVENTS.KEY_UP, this.editorKeyUp, this);\n };\n EditorManager.prototype.editorKeyDown = function (e) {\n this.observer.notify(EVENTS.KEY_DOWN_HANDLER, e);\n };\n EditorManager.prototype.editorKeyUp = function (e) {\n this.observer.notify(EVENTS.KEY_UP_HANDLER, e);\n };\n EditorManager.prototype.execCommand = function (command, value, event, callBack, text, exeValue) {\n switch (command.toLocaleLowerCase()) {\n case 'lists':\n this.observer.notify(EVENTS.LIST_TYPE, { subCommand: value, event: event, callBack: callBack });\n break;\n case 'formats':\n this.observer.notify(EVENTS.FORMAT_TYPE, { subCommand: value, event: event, callBack: callBack });\n break;\n case 'alignments':\n this.observer.notify(CONSTANT.ALIGNMENT_TYPE, { subCommand: value, event: event, callBack: callBack });\n break;\n case 'indents':\n this.observer.notify(CONSTANT.INDENT_TYPE, { subCommand: value, event: event, callBack: callBack });\n break;\n case 'links':\n this.observer.notify(CONSTANT.LINK, { item: exeValue, event: event, callBack: callBack });\n break;\n case 'images':\n this.observer.notify(CONSTANT.IMAGE, { item: exeValue, event: event, callBack: callBack });\n break;\n case 'font':\n case 'style':\n case 'effects':\n case 'casing':\n this.observer.notify(CONSTANT.SELECTION_TYPE, { subCommand: value, event: event, callBack: callBack, value: text });\n break;\n case 'inserthtml':\n this.observer.notify(CONSTANT.INSERTHTML_TYPE, { callBack: callBack, value: text });\n break;\n case 'clear':\n this.observer.notify(CONSTANT.CLEAR_TYPE, { subCommand: value, event: event, callBack: callBack });\n break;\n case 'actions':\n this.observer.notify(EVENTS.ACTION, { subCommand: value, event: event, callBack: callBack });\n break;\n }\n };\n return EditorManager;\n}());\nexport { EditorManager };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Formatter } from './formatter';\nimport { EditorManager } from './../../editor-manager/base/editor-manager';\nimport { extend } from '@syncfusion/ej2-base';\nimport { htmlKeyConfig } from './../../common/config';\n/**\n * HTML adapter\n * @hidden\n */\nvar HTMLFormatter = /** @class */ (function (_super) {\n __extends(HTMLFormatter, _super);\n function HTMLFormatter(options) {\n var _this = _super.call(this) || this;\n _this.initialize();\n extend(_this, _this, options, true);\n if (_this.currentDocument && _this.element) {\n _this.updateFormatter(_this.element, _this.currentDocument, options.options);\n }\n return _this;\n }\n HTMLFormatter.prototype.initialize = function () {\n this.keyConfig = htmlKeyConfig;\n };\n /**\n * Update the formatter of RichTextEditor\n * @param {Element} editElement\n * @param {Document} doc\n */\n HTMLFormatter.prototype.updateFormatter = function (editElement, doc, options) {\n if (editElement && doc) {\n this.editorManager = new EditorManager({\n document: doc,\n editableElement: editElement,\n options: options\n });\n }\n };\n return HTMLFormatter;\n}(Formatter));\nexport { HTMLFormatter };\n","import { IsFormatted } from './isformatted';\nimport * as CONSTANT from './../base/constant';\nimport { NodeSelection } from './../../selection/index';\n/**\n * Update Toolbar Status\n * @hidden\n */\nexport var statusCollection = {\n bold: false,\n italic: false,\n subscript: false,\n superscript: false,\n strikethrough: false,\n orderedlist: false,\n unorderedlist: false,\n underline: false,\n alignments: null,\n backgroundcolor: null,\n fontcolor: null,\n fontname: null,\n fontsize: null,\n formats: null,\n createlink: false\n};\nvar ToolbarStatus = /** @class */ (function () {\n function ToolbarStatus() {\n }\n ToolbarStatus.get = function (docElement, targetNode, formatNode, fontSize, fontName) {\n var formatCollection = JSON.parse(JSON.stringify(statusCollection));\n var nodeCollection = JSON.parse(JSON.stringify(statusCollection));\n var nodeSelection = new NodeSelection();\n var nodes = nodeSelection.getNodeCollection(nodeSelection.getRange(docElement));\n for (var index = 0; index < nodes.length; index++) {\n if (nodes[index].nodeType !== 3) {\n nodes.splice(index, 1);\n index--;\n }\n }\n for (var index = 0; index < nodes.length; index++) {\n formatCollection = this.getFormatParent(docElement, formatCollection, nodes[index], targetNode, formatNode, fontSize, fontName);\n if ((index === 0 && formatCollection.bold) || !formatCollection.bold) {\n nodeCollection.bold = formatCollection.bold;\n }\n if ((index === 0 && formatCollection.italic) || !formatCollection.italic) {\n nodeCollection.italic = formatCollection.italic;\n }\n if ((index === 0 && formatCollection.underline) || !formatCollection.underline) {\n nodeCollection.underline = formatCollection.underline;\n }\n if ((index === 0 && formatCollection.strikethrough) || !formatCollection.strikethrough) {\n nodeCollection.strikethrough = formatCollection.strikethrough;\n }\n if ((index === 0 && formatCollection.superscript) || !formatCollection.superscript) {\n nodeCollection.superscript = formatCollection.superscript;\n }\n if ((index === 0 && formatCollection.subscript) || !formatCollection.subscript) {\n nodeCollection.subscript = formatCollection.subscript;\n }\n if ((index === 0 && formatCollection.fontcolor) || !formatCollection.fontcolor) {\n nodeCollection.fontcolor = formatCollection.fontcolor;\n }\n if ((index === 0 && formatCollection.fontname) || !formatCollection.fontname) {\n nodeCollection.fontname = formatCollection.fontname;\n }\n if ((index === 0 && formatCollection.fontsize) || !formatCollection.fontsize) {\n nodeCollection.fontsize = formatCollection.fontsize;\n }\n if ((index === 0 && formatCollection.backgroundcolor) || !formatCollection.backgroundcolor) {\n nodeCollection.backgroundcolor = formatCollection.backgroundcolor;\n }\n if ((index === 0 && formatCollection.orderedlist) || !formatCollection.orderedlist) {\n nodeCollection.orderedlist = formatCollection.orderedlist;\n }\n if ((index === 0 && formatCollection.unorderedlist) || !formatCollection.unorderedlist) {\n nodeCollection.unorderedlist = formatCollection.unorderedlist;\n }\n if ((index === 0 && formatCollection.alignments) || !formatCollection.alignments) {\n nodeCollection.alignments = formatCollection.alignments;\n }\n if ((index === 0 && formatCollection.formats) || !formatCollection.formats) {\n nodeCollection.formats = formatCollection.formats;\n }\n if ((index === 0 && formatCollection.createlink) || !formatCollection.createlink) {\n nodeCollection.createlink = formatCollection.createlink;\n }\n formatCollection = JSON.parse(JSON.stringify(statusCollection));\n }\n return nodeCollection;\n };\n ToolbarStatus.getFormatParent = function (docElement, formatCollection, node, targetNode, formatNode, fontSize, fontName) {\n if (targetNode.contains(node)) {\n do {\n formatCollection = this.isFormattedNode(docElement, formatCollection, node, formatNode, fontSize, fontName);\n node = node.parentNode;\n } while (node && (node !== targetNode));\n }\n return formatCollection;\n };\n ToolbarStatus.isFormattedNode = function (docElement, formatCollection, node, formatNode, fontSize, fontName) {\n if (!formatCollection.bold) {\n formatCollection.bold = IsFormatted.isBold(node);\n }\n if (!formatCollection.italic) {\n formatCollection.italic = IsFormatted.isItalic(node);\n }\n if (!formatCollection.underline) {\n formatCollection.underline = IsFormatted.isUnderline(node);\n }\n if (!formatCollection.strikethrough) {\n formatCollection.strikethrough = IsFormatted.isStrikethrough(node);\n }\n if (!formatCollection.superscript) {\n formatCollection.superscript = IsFormatted.isSuperscript(node);\n }\n if (!formatCollection.subscript) {\n formatCollection.subscript = IsFormatted.isSubscript(node);\n }\n if (!formatCollection.fontcolor) {\n formatCollection.fontcolor = this.isFontColor(docElement, node);\n }\n if (!formatCollection.fontname) {\n formatCollection.fontname = this.isFontName(docElement, node, fontName);\n }\n if (!formatCollection.fontsize) {\n formatCollection.fontsize = this.isFontSize(node, fontSize);\n }\n if (!formatCollection.backgroundcolor) {\n formatCollection.backgroundcolor = this.isBackgroundColor(node);\n }\n if (!formatCollection.orderedlist) {\n formatCollection.orderedlist = this.isOrderedList(node);\n }\n if (!formatCollection.unorderedlist) {\n formatCollection.unorderedlist = this.isUnorderedList(node);\n }\n if (!formatCollection.alignments) {\n formatCollection.alignments = this.isAlignment(node);\n }\n if (!formatCollection.formats) {\n formatCollection.formats = this.isFormats(node, formatNode);\n }\n if (!formatCollection.createlink) {\n formatCollection.createlink = this.isLink(node);\n }\n return formatCollection;\n };\n ToolbarStatus.isFontColor = function (docElement, node) {\n var color = node.style && node.style.color;\n if ((color === null || color === undefined || color === '') && node.nodeType !== 3) {\n color = this.getComputedStyle(docElement, node, 'color');\n }\n if (color !== null && color !== '' && color !== undefined) {\n return color;\n }\n else {\n return null;\n }\n };\n ToolbarStatus.isLink = function (node) {\n if (node.nodeName.toLocaleLowerCase() === 'a') {\n return true;\n }\n else {\n return false;\n }\n };\n ToolbarStatus.isBackgroundColor = function (node) {\n var backColor = node.style && node.style.backgroundColor;\n if (backColor !== null && backColor !== '' && backColor !== undefined) {\n return backColor;\n }\n else {\n return null;\n }\n };\n ToolbarStatus.isFontSize = function (node, fontSize) {\n var size = node.style && node.style.fontSize;\n if ((size !== null && size !== '' && size !== undefined)\n && (fontSize === null || fontSize === undefined || (fontSize.indexOf(size) > -1))) {\n return size;\n }\n else {\n return null;\n }\n };\n ToolbarStatus.isFontName = function (docElement, node, fontName) {\n var name = node.style && node.style.fontFamily;\n if ((name === null || name === undefined || name === '') && node.nodeType !== 3) {\n name = this.getComputedStyle(docElement, node, 'font-family');\n }\n var index = null;\n if ((name !== null && name !== '' && name !== undefined)\n && (fontName === null || fontName === undefined || (fontName.filter(function (value, pos) {\n if (value.replace(/\"/g, '').replace(/ /g, '') === name.replace(/\"/g, '').replace(/ /g, '')) {\n index = pos;\n }\n }) && (index !== null)))) {\n return (index !== null) ? fontName[index] : name.replace(/\"/g, '');\n }\n else {\n return null;\n }\n };\n ToolbarStatus.isOrderedList = function (node) {\n if (node.nodeName.toLocaleLowerCase() === 'ol') {\n return true;\n }\n else {\n return false;\n }\n };\n ToolbarStatus.isUnorderedList = function (node) {\n if (node.nodeName.toLocaleLowerCase() === 'ul') {\n return true;\n }\n else {\n return false;\n }\n };\n ToolbarStatus.isAlignment = function (node) {\n var align = node.style && node.style.textAlign;\n if (align === 'left') {\n return 'justifyleft';\n }\n else if (align === 'center') {\n return 'justifycenter';\n }\n else if (align === 'right') {\n return 'justifyright';\n }\n else if (align === 'justify') {\n return 'justifyfull';\n }\n else {\n return null;\n }\n };\n ToolbarStatus.isFormats = function (node, formatNode) {\n if (((formatNode === undefined || formatNode === null)\n && CONSTANT.BLOCK_TAGS.indexOf(node.nodeName.toLocaleLowerCase()) > -1)\n || (formatNode !== null && formatNode !== undefined\n && formatNode.indexOf(node.nodeName.toLocaleLowerCase()) > -1)) {\n return node.nodeName.toLocaleLowerCase();\n }\n else {\n return null;\n }\n };\n ToolbarStatus.getComputedStyle = function (docElement, node, prop) {\n return docElement.defaultView.getComputedStyle(node, null).getPropertyValue(prop);\n };\n return ToolbarStatus;\n}());\nexport { ToolbarStatus };\n","import * as events from '../base/constant';\nimport { ToolbarStatus } from '../../editor-manager/plugin/toolbar-status';\n/**\n * HtmlToolbarStatus module for refresh the toolbar status\n */\nvar HtmlToolbarStatus = /** @class */ (function () {\n function HtmlToolbarStatus(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n HtmlToolbarStatus.prototype.addEventListener = function () {\n this.parent.on(events.toolbarRefresh, this.onRefreshHandler, this);\n this.parent.on(events.destroy, this.removeEventListener, this);\n };\n HtmlToolbarStatus.prototype.removeEventListener = function () {\n this.parent.off(events.toolbarRefresh, this.onRefreshHandler);\n };\n HtmlToolbarStatus.prototype.onRefreshHandler = function (args) {\n var fontsize = [];\n var fontName = [];\n var formats = [];\n this.parent.fontSize.items.forEach(function (item) { fontsize.push(item.value); });\n this.parent.fontFamily.items.forEach(function (item) { fontName.push(item.value); });\n this.parent.format.types.forEach(function (item) {\n formats.push(item.value.toLocaleLowerCase());\n });\n this.toolbarStatus = ToolbarStatus.get(this.parent.contentModule.getDocument(), this.parent.contentModule.getEditPanel(), formats, fontsize, fontName);\n this.parent.notify(events.toolbarUpdated, this.toolbarStatus);\n };\n return HtmlToolbarStatus;\n}());\nexport { HtmlToolbarStatus };\n","import { createElement } from '@syncfusion/ej2-base';\n/**\n * Content module is used to render RichTextEditor content\n * @hidden\n */\nvar ContentRender = /** @class */ (function () {\n /**\n * Constructor for content renderer module\n */\n function ContentRender(parent, serviceLocator) {\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n }\n /**\n * The function is used to render RichTextEditor content div\n */\n ContentRender.prototype.renderPanel = function () {\n var rteObj = this.parent;\n var div = createElement('div', { className: 'e-rte-content', id: this.parent.getID() + 'rte-view' });\n var rteContent = (rteObj.value !== null && rteObj.value !== '') ? rteObj.value : '


    ';\n this.editableElement = createElement('div', {\n className: 'e-content',\n id: this.parent.getID() + '_rte-edit-view',\n attrs: {\n 'contenteditable': 'true'\n },\n innerHTML: rteContent\n });\n div.appendChild(this.editableElement);\n this.setPanel(div);\n rteObj.element.appendChild(div);\n };\n /**\n * Get the content div element of RichTextEditor\n * @return {Element}\n */\n ContentRender.prototype.getPanel = function () {\n return this.contentPanel;\n };\n /**\n * Get the editable element of RichTextEditor\n * @return {Element}\n */\n ContentRender.prototype.getEditPanel = function () {\n return this.editableElement;\n };\n /**\n * Set the content div element of RichTextEditor\n * @param {Element} panel\n */\n ContentRender.prototype.setPanel = function (panel) {\n this.contentPanel = panel;\n };\n /**\n * Get the document of RichTextEditor\n * @return {Document}\n */\n ContentRender.prototype.getDocument = function () {\n return this.getEditPanel().ownerDocument;\n };\n return ContentRender;\n}());\nexport { ContentRender };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { createElement } from '@syncfusion/ej2-base';\nimport { ContentRender } from '../renderer/content-renderer';\n/* tslint:disable */\nvar IFRAMEHEADER = \"\\n \\n \\n \\n \\n \\n \";\n/* tslint:enable */\n/**\n * Content module is used to render RichTextEditor content\n * @hidden\n */\nvar IframeContentRender = /** @class */ (function (_super) {\n __extends(IframeContentRender, _super);\n function IframeContentRender() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * The function is used to render RichTextEditor iframe\n */\n IframeContentRender.prototype.renderPanel = function () {\n var rteObj = this.parent;\n var rteContent = (rteObj.value !== null && rteObj.value !== '') ? rteObj.value : '


    ';\n var iFrameBodyContent = '' +\n rteContent + '';\n var iFrameContent = IFRAMEHEADER + iFrameBodyContent;\n var iframe = createElement('iframe', {\n innerHTML: iFrameContent,\n id: this.parent.getID() + '_rte-view',\n className: 'e-rte-content'\n });\n this.setPanel(iframe);\n rteObj.element.appendChild(iframe);\n iframe.contentDocument.body.id = this.parent.getID() + '_rte-edit-view';\n iframe.contentDocument.open();\n iframe.contentDocument.write(iFrameContent);\n iframe.contentDocument.close();\n };\n /**\n * Get the editable element of RichTextEditor\n * @return {Element}\n */\n IframeContentRender.prototype.getEditPanel = function () {\n return this.contentPanel.contentDocument.body;\n };\n /**\n * Get the document of RichTextEditor\n * @param {Document}\n */\n IframeContentRender.prototype.getDocument = function () {\n return this.getEditPanel().ownerDocument;\n };\n return IframeContentRender;\n}(ContentRender));\nexport { IframeContentRender };\n","import * as events from '../base/constant';\nimport { isNullOrUndefined, closest, createElement } from '@syncfusion/ej2-base';\nimport { HTMLFormatter } from '../formatter/html-formatter';\nimport { RenderType } from '../base/enum';\nimport { HtmlToolbarStatus } from './html-toolbar-status';\nimport { IframeContentRender } from '../renderer/iframe-content-renderer';\nimport { ContentRender } from '../renderer/content-renderer';\nimport { ColorPickerInput } from './color-picker';\nimport { NodeSelection } from '../../selection/selection';\nimport { InsertHtml } from '../../editor-manager/plugin/inserthtml';\n/**\n * `HtmlEditor` module is used to HTML editor\n */\nvar HtmlEditor = /** @class */ (function () {\n function HtmlEditor(parent, serviceLocator) {\n this.rangeCollection = [];\n this.parent = parent;\n this.locator = serviceLocator;\n this.renderFactory = this.locator.getService('rendererFactory');\n this.addEventListener();\n }\n /**\n * Destroys the Markdown.\n * @method destroy\n * @return {void}\n */\n HtmlEditor.prototype.destroy = function () {\n this.removeEventListener();\n };\n HtmlEditor.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.nodeSelectionObj = new NodeSelection();\n this.colorPickerModule = new ColorPickerInput(this.parent, this.locator);\n this.parent.on(events.initialLoad, this.instantiateRenderer, this);\n this.parent.on(events.htmlToolbarClick, this.onToolbarClick, this);\n this.parent.on(events.keyDown, this.onKeyDown, this);\n this.parent.on(events.renderColorPicker, this.renderColorPicker, this);\n this.parent.on(events.initialEnd, this.render, this);\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.selectAll, this.selectAll, this);\n this.parent.on(events.selectRange, this.selectRange, this);\n this.parent.on(events.getSelectedHtml, this.getSelectedHtml, this);\n this.parent.on(events.selectionSave, this.onSelectionSave, this);\n this.parent.on(events.selectionRestore, this.onSelectionRestore, this);\n };\n HtmlEditor.prototype.onSelectionSave = function () {\n var currentDocument = this.contentRenderer.getDocument();\n var range = this.nodeSelectionObj.getRange(currentDocument);\n this.saveSelection = this.nodeSelectionObj.save(range, currentDocument);\n };\n HtmlEditor.prototype.onSelectionRestore = function (e) {\n this.parent.isBlur = false;\n this.contentRenderer.getEditPanel().focus();\n this.saveSelection.restore();\n };\n HtmlEditor.prototype.onKeyDown = function (e) {\n if (e.args.keyCode === 9 && this.parent.enableTabKey) {\n var range = this.nodeSelectionObj.getRange(this.contentRenderer.getDocument());\n var parentNode = this.nodeSelectionObj.getParentNodeCollection(range);\n if (!((parentNode[0].nodeName === 'LI' || parentNode[0].nodeName === 'BR' || closest(parentNode[0], 'li')) &&\n range.startOffset === 0)) {\n e.args.preventDefault();\n if (!e.args.shiftKey) {\n InsertHtml.Insert(this.contentRenderer.getDocument(), '    ');\n this.rangeCollection.push(this.nodeSelectionObj.getRange(this.contentRenderer.getDocument()));\n }\n else if (this.rangeCollection.length > 0 &&\n this.rangeCollection[this.rangeCollection.length - 1].startContainer.textContent.length === 4) {\n var textCont = this.rangeCollection[this.rangeCollection.length - 1].startContainer;\n this.nodeSelectionObj.setSelectionText(this.contentRenderer.getDocument(), textCont, textCont, 0, textCont.textContent.length);\n InsertHtml.Insert(this.contentRenderer.getDocument(), document.createTextNode(''));\n this.rangeCollection.pop();\n }\n }\n }\n if (e.args.action === 'space' ||\n e.args.action === 'enter') {\n this.spaceLink(e.args);\n }\n };\n HtmlEditor.prototype.spaceLink = function (e) {\n var range = this.nodeSelectionObj.getRange(this.contentRenderer.getDocument());\n var selectNodeEle = this.nodeSelectionObj.getParentNodeCollection(range);\n var text = range.startContainer.textContent;\n var splitText = text.split(' ');\n var urlText = splitText[splitText.length - 1];\n var regex = new RegExp(/[-a-zA-Z0-9@:%_\\+.~#?&//=]{2,256}\\.[a-z]{2,4}\\b(\\/[-a-zA-Z0-9@:%_\\+.~#?&//=]*)?/gi);\n if (selectNodeEle[0].nodeName !== 'A' && urlText.match(regex)) {\n var url = createElement('a', { attrs: { href: urlText } });\n url.innerHTML = urlText;\n InsertHtml.Insert(this.contentRenderer.getDocument(), url);\n range.startContainer.textContent = this.removeText(range.startContainer.textContent, urlText);\n }\n };\n HtmlEditor.prototype.removeText = function (text, val) {\n var arr = text.split(' ');\n for (var i = 0; i < arr.length; i++) {\n if (arr[i] === val) {\n arr.splice(i, 1);\n i--;\n }\n }\n return arr.join(' ');\n };\n HtmlEditor.prototype.onToolbarClick = function (args) {\n var save;\n var selectNodeEle;\n var selectParentEle;\n var item = args.item;\n var closestElement = closest(args.originalEvent.target, '.e-rte-quick-popup');\n if (closestElement && !closestElement.classList.contains('e-rte-inline-popup')) {\n if (!(item.subCommand === 'SourceCode' || item.subCommand === 'Preview')) {\n var range = this.nodeSelectionObj.getRange(this.parent.contentModule.getDocument());\n save = this.nodeSelectionObj.save(range, this.parent.contentModule.getDocument());\n selectNodeEle = this.nodeSelectionObj.getNodeCollection(range);\n selectParentEle = this.nodeSelectionObj.getParentNodeCollection(range);\n }\n if (item.command === 'Images') {\n this.parent.notify(events.imageToolbarAction, {\n member: 'image', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle\n });\n }\n if (item.command === 'Links') {\n this.parent.notify(events.linkToolbarAction, {\n member: 'link', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle\n });\n }\n }\n else {\n var linkDialog = this.parent.element.querySelector('#' + this.parent.getID() + '_rtelink');\n var imageDialog = this.parent.element.querySelector('#' + this.parent.getID() + '_image');\n if (!(item.subCommand === 'SourceCode' || item.subCommand === 'Preview')) {\n var range = this.nodeSelectionObj.getRange(this.parent.contentModule.getDocument());\n if (isNullOrUndefined(linkDialog) && isNullOrUndefined(imageDialog)) {\n save = this.nodeSelectionObj.save(range, this.parent.contentModule.getDocument());\n }\n selectNodeEle = this.nodeSelectionObj.getNodeCollection(range);\n selectParentEle = this.nodeSelectionObj.getParentNodeCollection(range);\n }\n switch (item.subCommand) {\n case 'Maximize':\n this.parent.notify(events.enableFullScreen, { args: args });\n break;\n case 'Minimize':\n this.parent.notify(events.disableFullScreen, { args: args });\n break;\n case 'CreateLink':\n this.parent.notify(events.insertLink, {\n member: 'link', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle\n });\n break;\n case 'Print':\n this.parent.print();\n break;\n case 'Image':\n this.parent.notify(events.insertImage, {\n member: 'image', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle\n });\n break;\n case 'SourceCode':\n this.parent.notify(events.sourceCode, { member: 'viewSource', args: args });\n break;\n case 'Preview':\n this.parent.notify(events.updateSource, { member: 'updateSource', args: args });\n break;\n case 'Copy':\n this.parent.onCopy();\n break;\n case 'Cut':\n this.parent.onCut();\n break;\n case 'Paste':\n this.parent.onPaste();\n break;\n case 'FontColor':\n case 'BackgroundColor':\n break;\n default:\n this.parent.formatter.process(this.parent, args, args.originalEvent, null);\n break;\n }\n }\n };\n HtmlEditor.prototype.renderColorPicker = function (args) {\n this.colorPickerModule.renderColorPickerInput(args);\n };\n HtmlEditor.prototype.instantiateRenderer = function () {\n if (this.parent.iframeSettings.enable) {\n this.renderFactory.addRenderer(RenderType.Content, new IframeContentRender(this.parent, this.locator));\n }\n else {\n this.renderFactory.addRenderer(RenderType.Content, new ContentRender(this.parent, this.locator));\n }\n };\n HtmlEditor.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initialEnd, this.render);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.parent.off(events.htmlToolbarClick, this.onToolbarClick);\n this.parent.off(events.renderColorPicker, this.renderColorPicker);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.keyDown, this.onKeyDown);\n this.parent.off(events.initialLoad, this.instantiateRenderer);\n this.parent.off(events.selectAll, this.selectAll);\n this.parent.off(events.selectRange, this.selectRange);\n this.parent.off(events.getSelectedHtml, this.getSelectedHtml);\n this.parent.off(events.selectionSave, this.onSelectionSave);\n this.parent.off(events.selectionRestore, this.onSelectionRestore);\n };\n HtmlEditor.prototype.render = function () {\n this.contentRenderer = this.renderFactory.getRenderer(RenderType.Content);\n var editElement = this.contentRenderer.getEditPanel();\n var option = { undoRedoSteps: this.parent.undoRedoSteps, undoRedoTimer: this.parent.undoRedoTimer };\n if (isNullOrUndefined(this.parent.formatter)) {\n this.parent.formatter = new HTMLFormatter({\n currentDocument: this.contentRenderer.getDocument(),\n element: editElement,\n options: option\n });\n }\n else {\n this.parent.formatter.updateFormatter(editElement, this.contentRenderer.getDocument(), option);\n }\n if (this.parent.toolbarSettings.enable) {\n this.toolbarUpdate = new HtmlToolbarStatus(this.parent);\n }\n this.parent.notify(events.bindOnEnd, {});\n };\n /**\n * Called internally if any of the property value changed.\n * @hidden\n */\n HtmlEditor.prototype.onPropertyChanged = function (e) {\n // On property code change here\n };\n /**\n * For internal use only - Get the module name.\n */\n HtmlEditor.prototype.getModuleName = function () {\n return 'htmlEditor';\n };\n /**\n * For selecting all content in RTE\n * @private\n */\n HtmlEditor.prototype.selectAll = function () {\n this.parent.formatter.editorManager.nodeSelection.setSelectionText(this.parent.contentModule.getDocument(), this.parent.contentModule.getEditPanel(), this.parent.contentModule.getEditPanel(), 0, this.parent.contentModule.getEditPanel().childNodes.length);\n };\n /**\n * For selecting all content in RTE\n * @private\n */\n HtmlEditor.prototype.selectRange = function (e) {\n this.parent.formatter.editorManager.nodeSelection.setRange(this.parent.contentModule.getDocument(), e.range);\n };\n /**\n * For get a selected text in RTE\n * @private\n */\n HtmlEditor.prototype.getSelectedHtml = function (e) {\n e.callBack(this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument()).toString());\n };\n return HtmlEditor;\n}());\nexport { HtmlEditor };\n","import { RenderType } from '../base/enum';\nimport * as events from '../base/constant';\n/**\n * Content module is used to render RichTextEditor content\n * @hidden\n */\nvar Render = /** @class */ (function () {\n /**\n * Constructor for render module\n */\n function Render(parent, locator) {\n this.parent = parent;\n this.locator = locator;\n this.renderer = this.locator.getService('rendererFactory');\n this.addEventListener();\n }\n /**\n * To initialize RichTextEditor header, content and footer rendering\n */\n Render.prototype.render = function () {\n var rteObj = this.parent;\n this.contentRenderer = this.renderer.getRenderer(RenderType.Content);\n this.contentRenderer.renderPanel();\n };\n /**\n * Refresh the entire RichTextEditor.\n * @return {void}\n */\n Render.prototype.refresh = function (e) {\n if (e === void 0) { e = { requestType: 'refresh' }; }\n this.parent.notify(e.requestType + \"-begin\", e);\n };\n /**\n * Destroy the entire RichTextEditor.\n * @return {void}\n */\n Render.prototype.destroy = function () {\n this.removeEventListener();\n };\n Render.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.modelChanged, this.refresh, this);\n this.parent.on(events.keyUp, this.keyUp, this);\n };\n Render.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.modelChanged, this.refresh);\n this.parent.off(events.keyUp, this.keyUp);\n };\n Render.prototype.keyUp = function (e) {\n if (this.parent.editorMode === 'HTML') {\n switch (e.args.which) {\n case 46:\n case 8:\n var childNodes = this.parent.contentModule.getEditPanel().childNodes;\n if ((childNodes.length === 0) ||\n (childNodes.length === 1 && ((childNodes[0].tagName === 'BR') ||\n (childNodes[0].tagName === 'P' &&\n (childNodes[0].childNodes.length === 0 || childNodes[0].textContent === ''))))) {\n var node = this.parent.contentModule.getEditPanel();\n node.innerHTML = '


    ';\n this.parent.formatter.editorManager.nodeSelection.setCursorPoint(this.parent.contentModule.getDocument(), node.childNodes[0], 0);\n }\n break;\n }\n }\n };\n return Render;\n}());\nexport { Render };\n","import { createElement, EventHandler, detach, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { closest, addClass, removeClass, Browser } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { CLS_RTE_ELEMENTS } from '../base/classes';\nimport { Dialog } from '@syncfusion/ej2-popups';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\nimport { RenderType } from '../base/enum';\nimport { dispatchEvent } from '../base/util';\n/**\n * `Link` module is used to handle undo actions.\n */\nvar Link = /** @class */ (function () {\n function Link(parent, serviceLocator) {\n this.parent = parent;\n this.rteID = parent.element.id;\n this.i10n = serviceLocator.getService('rteLocale');\n this.addEventListener();\n this.serviceLocator = serviceLocator;\n this.rendererFactory = serviceLocator.getService('rendererFactory');\n }\n Link.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.insertLink, this.linkDialog, this);\n this.parent.on(events.keyDown, this.onKeyDown, this);\n this.parent.on(events.insertCompleted, this.showLinkQuickToolbar, this);\n this.parent.on(events.linkToolbarAction, this.onToolbarAction, this);\n this.parent.on(events.iframeMouseDown, this.onIframeMouseDown, this);\n this.parent.on(events.unLink, this.removeLink, this);\n this.parent.on(events.editLink, this.editLink, this);\n this.parent.on(events.openLink, this.openLink, this);\n this.parent.on(events.editAreaClick, this.editAreaClickHandler, this);\n };\n Link.prototype.onToolbarAction = function (args) {\n var item = args.args.item;\n switch (item.subCommand) {\n case 'OpenLink':\n this.parent.notify(events.openLink, args);\n break;\n case 'EditLink':\n this.parent.notify(events.editLink, args);\n break;\n case 'RemoveLink':\n this.parent.notify(events.unLink, args);\n break;\n }\n };\n Link.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.insertLink, this.linkDialog);\n this.parent.off(events.keyDown, this.onKeyDown);\n this.parent.off(events.insertCompleted, this.showLinkQuickToolbar);\n this.parent.off(events.linkToolbarAction, this.onToolbarAction);\n this.parent.off(events.unLink, this.removeLink);\n this.parent.off(events.iframeMouseDown, this.onIframeMouseDown);\n this.parent.off(events.editLink, this.editLink);\n this.parent.off(events.openLink, this.openLink);\n this.parent.off(events.editAreaClick, this.editAreaClickHandler);\n };\n Link.prototype.onIframeMouseDown = function () {\n if (this.dialogObj) {\n this.dialogObj.hide({ returnValue: true });\n }\n };\n Link.prototype.showLinkQuickToolbar = function (e) {\n var pageX;\n var pageY;\n if (e.type !== 'Links' || isNullOrUndefined(this.parent.quickToolbarModule) ||\n isNullOrUndefined(this.parent.quickToolbarModule.linkQTBar)) {\n return;\n }\n this.quickToolObj = this.parent.quickToolbarModule;\n var parentTop = this.parent.element.getBoundingClientRect().top;\n var range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());\n var args = e.args;\n var target;\n [].forEach.call(e.elements, function (element, index) {\n if (index === 0) {\n target = ((element.nodeName === '#text') ? (element.parentNode) : element);\n }\n });\n if (e.isNotify) {\n pageX = target.getBoundingClientRect().left;\n var tbElement = this.parent.toolbarModule.getToolbarElement();\n var linkTop = target.getBoundingClientRect().top;\n var linkPos = linkTop - parentTop;\n var tbHeight = (tbElement) ? (tbElement.offsetHeight + this.parent.toolbarModule.getExpandTBarPopHeight()) : 0;\n pageY = window.pageYOffset + ((this.parent.iframeSettings.enable) ? (parentTop + tbHeight + linkTop) : (parentTop + linkPos));\n }\n else {\n pageX = args.pageX;\n pageY = (this.parent.iframeSettings.enable) ? window.pageYOffset + parentTop + args.clientY : args.pageY;\n }\n if (this.quickToolObj.linkQTBar) {\n this.quickToolObj.linkQTBar.showPopup(pageX, pageY, range.endContainer);\n }\n };\n Link.prototype.hideLinkQuickToolbar = function () {\n if (this.quickToolObj && this.quickToolObj.linkQTBar && document.body.contains(this.quickToolObj.linkQTBar.element)) {\n this.quickToolObj.linkQTBar.hidePopup();\n }\n };\n Link.prototype.editAreaClickHandler = function (e) {\n var args = e.args;\n if (args.which === 2 || args.which === 3) {\n return;\n }\n if (this.parent.editorMode === 'HTML' && this.parent.quickToolbarModule && this.parent.quickToolbarModule.linkQTBar) {\n this.quickToolObj = this.parent.quickToolbarModule;\n var target = args.target;\n this.contentModule = this.rendererFactory.getRenderer(RenderType.Content);\n var isPopupOpen = this.quickToolObj.linkQTBar.element.classList.contains('e-rte-pop');\n if (target.nodeName === 'A' && this.parent.quickToolbarModule) {\n if (isPopupOpen) {\n return;\n }\n this.showLinkQuickToolbar({\n args: args,\n isNotify: false,\n type: 'Links',\n elements: [args.target]\n });\n }\n else {\n this.hideLinkQuickToolbar();\n }\n }\n };\n Link.prototype.onKeyDown = function (event) {\n var originalEvent = event.args;\n switch (originalEvent.action) {\n case 'escape':\n if (!isNullOrUndefined(this.dialogObj)) {\n this.dialogObj.close();\n }\n break;\n case 'insert-link':\n if (this.parent.editorMode === 'HTML') {\n var range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());\n var save = this.parent.formatter.editorManager.nodeSelection.save(range, this.parent.contentModule.getDocument());\n var selectNodeEle = this.parent.formatter.editorManager.nodeSelection.getNodeCollection(range);\n var selectParentEle = this.parent.formatter.editorManager.nodeSelection.getParentNodeCollection(range);\n var eventArgs = {\n args: event.args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle\n };\n this.linkDialog(eventArgs);\n }\n else {\n var textArea = this.parent.contentModule.getEditPanel();\n this.parent.formatter.editorManager.markdownSelection.save(textArea.selectionStart, textArea.selectionEnd);\n this.linkDialog({\n args: {\n item: { command: 'Links', subCommand: 'Link' },\n originalEvent: originalEvent\n },\n member: 'link',\n text: this.parent.formatter.editorManager.markdownSelection.getSelectedText(this.parent.contentModule.getEditPanel()),\n module: 'Markdown',\n name: 'insertLink'\n });\n }\n originalEvent.preventDefault();\n break;\n }\n };\n Link.prototype.linkDialog = function (e, inputDetails) {\n var _this = this;\n if (this.dialogObj) {\n this.dialogObj.hide({ returnValue: true });\n return;\n }\n if (this.parent.editorMode === 'HTML' && (!isNullOrUndefined(e.selectParent[0].classList) &&\n e.selectParent[0].classList.contains('e-rte-anchor')) && isNullOrUndefined(inputDetails)) {\n this.editLink(e);\n return;\n }\n var selectText;\n var linkWebAddress = this.i10n.getConstant('linkWebUrl');\n var linkDisplayText = this.i10n.getConstant('linkText');\n var linkTooltip = this.i10n.getConstant('linkTooltipLabel');\n var urlPlace = this.i10n.getConstant('linkurl');\n var textPlace = this.i10n.getConstant('textPlaceholder');\n var linkDialogEle = createElement('div', { className: 'e-rte-link-dialog', id: this.rteID + '_rtelink' });\n this.parent.element.appendChild(linkDialogEle);\n var linkContent = createElement('div', { className: 'e-rte-linkcontent', id: this.rteID + '_linkContent' });\n var htmlTextbox = (this.parent.editorMode === 'HTML') ? '
    ' +\n '
    ' +\n '
    ' + '
    ' +\n '
    ' : '';\n var content = '
    ' + '
    ' +\n '
    ' +\n '
    ' + '
    ' +\n '' +\n '
    ' + htmlTextbox;\n var contentElem = document.createRange().createContextualFragment(content);\n linkContent.appendChild(contentElem);\n var linkTarget = linkContent.querySelector('.e-rte-linkTarget');\n var linkUrl = linkContent.querySelector('.e-rte-linkurl');\n var linkText = linkContent.querySelector('.e-rte-linkText');\n var linkTitle = linkContent.querySelector('.e-rte-linkTitle');\n var linkOpenLabel = this.i10n.getConstant('linkOpenInNewWindow');\n this.checkBoxObj = new CheckBox({ label: linkOpenLabel, checked: true, enableRtl: this.parent.enableRtl });\n this.checkBoxObj.appendTo(linkTarget);\n selectText = (this.parent.editorMode === 'HTML') ? e.selection.getRange(this.parent.contentModule.getDocument()).toString() :\n e.text;\n var linkInsert = this.i10n.getConstant('dialogInsert');\n var linkCancel = this.i10n.getConstant('dialogCancel');\n var selection = e.selection;\n var selectObj = { selfLink: this, selection: e.selection, selectParent: e.selectParent, args: e.args };\n this.dialogObj = new Dialog({\n header: this.i10n.getConstant('linkHeader'),\n content: linkContent,\n cssClass: CLS_RTE_ELEMENTS,\n enableRtl: this.parent.enableRtl,\n locale: this.parent.locale,\n showCloseIcon: true, closeOnEscape: true, width: (Browser.isDevice) ? '290px' : '310px', height: 'initial',\n isModal: Browser.isDevice,\n buttons: [{\n click: this.insertlink.bind(selectObj),\n buttonModel: { content: linkInsert, cssClass: 'e-flat e-insertLink', isPrimary: true }\n },\n { click: function (e) { _this.cancelDialog(e); }, buttonModel: { cssClass: 'e-flat', content: linkCancel } }],\n target: (Browser.isDevice) ? document.body : this.parent.element,\n animationSettings: { effect: 'None' },\n close: function (event) {\n _this.parent.isBlur = false;\n if (event && event.event.returnValue) {\n if (_this.parent.editorMode === 'HTML') {\n selection.restore();\n }\n else {\n _this.parent.formatter.editorManager.markdownSelection.restore(_this.parent.contentModule.getEditPanel());\n }\n }\n _this.dialogObj.destroy();\n detach(_this.dialogObj.element);\n _this.dialogObj = null;\n },\n });\n this.dialogObj.appendTo(linkDialogEle);\n linkDialogEle.style.maxHeight = 'initial';\n if (!isNullOrUndefined(inputDetails)) {\n linkUrl.value = inputDetails.url;\n linkText.value = inputDetails.text;\n linkTitle.value = inputDetails.title;\n (inputDetails.target) ? this.checkBoxObj.checked = true : this.checkBoxObj.checked = false;\n this.dialogObj.header = inputDetails.header;\n this.dialogObj.element.querySelector('.e-insertLink').textContent = inputDetails.btnText;\n }\n this.checkUrl(false);\n if ((this.parent.editorMode === 'HTML' && ((!isNullOrUndefined(selectText) && selectText !== '') &&\n (e.selection.range.startOffset === 0) || e.selection.range.startOffset !== e.selection.range.endOffset))\n || e.module === 'Markdown') {\n linkText.value = selectText;\n }\n EventHandler.add(document, 'mousedown', this.onDocumentClick, this);\n if (this.quickToolObj) {\n this.hideLinkQuickToolbar();\n if (this.quickToolObj.inlineQTBar && document.body.contains(this.quickToolObj.inlineQTBar.element)) {\n this.quickToolObj.inlineQTBar.hidePopup();\n }\n }\n };\n Link.prototype.insertlink = function (e) {\n var linkEle = this.selfLink.dialogObj.element;\n var linkUrl = linkEle.querySelector('.e-rte-linkurl').value;\n var linkText = linkEle.querySelector('.e-rte-linkText').value;\n var linkTitle;\n if (this.selfLink.parent.editorMode === 'HTML') {\n linkTitle = linkEle.querySelector('.e-rte-linkTitle').value;\n }\n var target = (this.selfLink.checkBoxObj.checked) ? '_blank' : '';\n if (!this.selfLink.isUrl(linkUrl)) {\n this.selfLink.checkUrl(true);\n return;\n }\n else {\n this.selfLink.checkUrl(false);\n }\n var proxy = this.selfLink;\n if (proxy.parent.editorMode === 'HTML' && isNullOrUndefined(closest(this.selection.range.startContainer.parentNode, '#' + proxy.parent.contentModule.getPanel().id))) {\n proxy.parent.contentModule.getEditPanel().focus();\n var range = proxy.parent.formatter.editorManager.nodeSelection.getRange(proxy.parent.contentModule.getDocument());\n this.selection = proxy.parent.formatter.editorManager.nodeSelection.save(range, proxy.parent.contentModule.getDocument());\n this.selectParent = proxy.parent.formatter.editorManager.nodeSelection.getParentNodeCollection(range);\n }\n var value = {\n url: linkUrl, text: linkText, title: linkTitle, target: target,\n selection: this.selection, selectParent: this.selectParent\n };\n if (proxy.parent.formatter.getUndoRedoStack().length === 0) {\n proxy.parent.formatter.saveData();\n }\n this.selfLink.parent.formatter.process(this.selfLink.parent, this.args, this.args.originalEvent, value);\n this.selfLink.dialogObj.hide({ returnValue: false });\n this.selfLink.parent.contentModule.getEditPanel().focus();\n };\n Link.prototype.isUrl = function (url) {\n var regexp = /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-\\/]))?/gi;\n return regexp.test(url);\n };\n Link.prototype.checkUrl = function (e) {\n var linkEle = this.dialogObj.element;\n var linkUrl = linkEle.querySelector('.e-rte-linkurl');\n if (e) {\n addClass([linkUrl], 'e-error');\n linkUrl.setSelectionRange(0, linkUrl.value.length);\n linkUrl.focus();\n }\n else {\n removeClass([linkUrl], 'e-error');\n }\n };\n Link.prototype.removeLink = function (e) {\n var parent = e.selectParent[0].parentNode;\n var child = [];\n if (this.parent.formatter.getUndoRedoStack().length === 0) {\n this.parent.formatter.saveData();\n }\n for (; e.selectParent[0].firstChild;) {\n child.push(parent.insertBefore(e.selectParent[0].firstChild, e.selectParent[0]));\n }\n parent.removeChild(e.selectParent[0]);\n if (child && child.length === 1) {\n e.selection.startContainer = e.selection.getNodeArray(child[child.length - 1], true);\n e.selection.endContainer = e.selection.startContainer;\n }\n e.selection.restore();\n this.contentModule.getEditPanel().focus();\n this.parent.formatter.saveData();\n this.hideLinkQuickToolbar();\n };\n Link.prototype.openLink = function (e) {\n if (e.selectParent[0].classList.contains('e-rte-anchor') || e.selectParent[0].tagName === 'A') {\n var target = e.selectParent[0].target === '' ? '_self' : '_blank';\n window.open(e.selectParent[0].href, target);\n }\n };\n Link.prototype.editLink = function (e) {\n if (e.selectParent[0].classList.contains('e-rte-anchor') || e.selectParent[0].tagName === 'A') {\n var selectParentEle = e.selectParent[0];\n var linkUpdate = this.i10n.getConstant('dialogUpdate');\n var inputDetails = {\n url: selectParentEle.href, text: selectParentEle.innerHTML,\n title: selectParentEle.title, target: selectParentEle.target,\n header: 'Edit Link', btnText: linkUpdate\n };\n this.linkDialog(e, inputDetails);\n }\n };\n Link.prototype.cancelDialog = function (e) {\n this.parent.isBlur = false;\n this.dialogObj.hide({ returnValue: true });\n this.parent.contentModule.getEditPanel().focus();\n };\n Link.prototype.onDocumentClick = function (e) {\n var target = e.target;\n if (!isNullOrUndefined(this.dialogObj) && ((!closest(target, '#' + this.dialogObj.element.id) && this.parent.toolbarSettings.enable &&\n this.parent.getToolbarElement() && !this.parent.getToolbarElement().contains(e.target)) ||\n (this.parent.getToolbarElement() && this.parent.getToolbarElement().contains(e.target) &&\n !closest(target, '#' + this.parent.getID() + '_toolbar_CreateLink') &&\n !target.querySelector('#' + this.parent.getID() + '_toolbar_CreateLink')))) {\n this.dialogObj.hide({ returnValue: true });\n this.parent.isBlur = true;\n dispatchEvent(this.parent.element, 'focusout');\n }\n };\n /**\n * Destroys the ToolBar.\n * @method destroy\n * @return {void}\n */\n Link.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * For internal use only - Get the module name.\n */\n Link.prototype.getModuleName = function () {\n return 'link';\n };\n return Link;\n}());\nexport { Link };\n","import { createElement, addClass, detach, EventHandler, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Browser, closest, removeClass } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport * as classes from '../base/classes';\nimport { Uploader, NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { Dialog } from '@syncfusion/ej2-popups';\nimport { Button, CheckBox } from '@syncfusion/ej2-buttons';\nimport { InsertHtml } from './../../editor-manager/plugin/inserthtml';\nimport { RenderType } from '../base/enum';\nimport { dispatchEvent } from '../base/util';\n/**\n * `Image` module is used to handle image actions.\n */\nvar Image = /** @class */ (function () {\n function Image(parent, serviceLocator) {\n this.parent = parent;\n this.rteID = parent.element.id;\n this.i10n = serviceLocator.getService('rteLocale');\n this.rendererFactory = serviceLocator.getService('rendererFactory');\n this.addEventListener();\n }\n Image.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.keyDown, this.onKeyDown, this);\n this.parent.on(events.insertImage, this.insertImage, this);\n this.parent.on(events.insertCompleted, this.showImageQuickToolbar, this);\n this.parent.on(events.imageToolbarAction, this.onToolbarAction, this);\n this.parent.on(events.imageCaption, this.caption, this);\n this.parent.on(events.imageDelete, this.deleteImg, this);\n this.parent.on(events.imageLink, this.insertImgLink, this);\n this.parent.on(events.imageAlt, this.insertAltText, this);\n this.parent.on(events.editAreaClick, this.editAreaClickHandler, this);\n this.parent.on(events.iframeMouseDown, this.onIframeMouseDown, this);\n this.parent.on(events.imageSize, this.imageSize, this);\n this.parent.on(events.dropDownSelect, this.alignmentSelect, this);\n this.parent.on(events.initialEnd, this.afterRender, this);\n };\n Image.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.keyDown, this.onKeyDown);\n this.parent.off(events.insertImage, this.insertImage);\n this.parent.off(events.insertCompleted, this.showImageQuickToolbar);\n this.parent.off(events.imageCaption, this.caption);\n this.parent.off(events.imageToolbarAction, this.onToolbarAction);\n this.parent.off(events.imageDelete, this.deleteImg);\n this.parent.off(events.imageLink, this.insertImgLink);\n this.parent.off(events.imageAlt, this.insertAltText);\n this.parent.off(events.editAreaClick, this.editAreaClickHandler);\n this.parent.off(events.iframeMouseDown, this.onIframeMouseDown);\n this.parent.off(events.imageSize, this.imageSize);\n this.parent.off(events.dropDownSelect, this.alignmentSelect);\n this.parent.off(events.initialEnd, this.afterRender);\n if (!isNullOrUndefined(this.contentModule)) {\n EventHandler.remove(this.contentModule.getEditPanel(), 'click', this.imageClick);\n }\n };\n Image.prototype.onIframeMouseDown = function () {\n if (this.dialogObj) {\n this.dialogObj.hide({ returnValue: true });\n }\n };\n Image.prototype.afterRender = function () {\n this.contentModule = this.rendererFactory.getRenderer(RenderType.Content);\n EventHandler.add(this.contentModule.getEditPanel(), 'click', this.imageClick, this);\n };\n Image.prototype.imageClick = function (e) {\n if (Browser.isDevice) {\n if ((e.target.tagName === 'IMG' &&\n e.target.parentElement.tagName === 'A') ||\n (e.target.tagName === 'IMG')) {\n this.contentModule.getEditPanel().setAttribute('contenteditable', 'false');\n }\n else {\n this.contentModule.getEditPanel().setAttribute('contenteditable', 'true');\n }\n }\n if (e.target.tagName === 'A' ||\n e.target.parentElement.tagName === 'A') {\n e.preventDefault();\n }\n };\n Image.prototype.onToolbarAction = function (args) {\n var item = args.args.item;\n switch (item.subCommand) {\n case 'Replace':\n this.parent.notify(events.insertImage, args);\n break;\n case 'Caption':\n this.parent.notify(events.imageCaption, args);\n break;\n case 'InsertLink':\n this.parent.notify(events.imageLink, args);\n break;\n case 'AltText':\n this.parent.notify(events.imageAlt, args);\n break;\n case 'Remove':\n this.parent.notify(events.imageDelete, args);\n break;\n case 'Dimension':\n this.parent.notify(events.imageSize, args);\n break;\n case 'OpenImageLink':\n this.openImgLink(args);\n break;\n case 'EditImageLink':\n this.editImgLink(args);\n break;\n case 'RemoveImageLink':\n this.removeImgLink(args);\n break;\n }\n };\n Image.prototype.openImgLink = function (e) {\n var target = e.selectParent[0].parentNode.target === '' ? '_self' : '_blank';\n window.open(e.selectParent[0].parentNode.href, target);\n };\n Image.prototype.editImgLink = function (e) {\n var selectParentEle = e.selectParent[0].parentNode;\n var linkUpdate = this.i10n.getConstant('dialogUpdate');\n var inputDetails = {\n url: selectParentEle.href, target: selectParentEle.target,\n header: 'Edit Link', btnText: linkUpdate\n };\n this.insertImgLink(e, inputDetails);\n };\n Image.prototype.removeImgLink = function (e) {\n e.selection.restore();\n detach(e.selectParent[0].parentElement);\n this.parent.contentModule.getEditPanel().focus();\n InsertHtml.Insert(this.parent.contentModule.getDocument(), e.selectNode[0]);\n this.parent.formatter.saveData();\n if (this.quickToolObj && document.body.contains(this.quickToolObj.imageQTBar.element)) {\n this.quickToolObj.imageQTBar.hidePopup();\n if (!isNullOrUndefined(e.selectParent)) {\n removeClass([e.selectParent[0]], 'e-img-focus');\n }\n }\n };\n Image.prototype.onKeyDown = function (event) {\n var originalEvent = event.args;\n var range;\n var save;\n var selectNodeEle;\n var selectParentEle;\n if (!isNullOrUndefined(this.parent.formatter.editorManager.nodeSelection)) {\n range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());\n save = this.parent.formatter.editorManager.nodeSelection.save(range, this.parent.contentModule.getDocument());\n selectNodeEle = this.parent.formatter.editorManager.nodeSelection.getNodeCollection(range);\n selectParentEle = this.parent.formatter.editorManager.nodeSelection.getParentNodeCollection(range);\n if ((originalEvent.key && originalEvent.key.length === 1 || originalEvent.action === 'enter') &&\n (selectParentEle[0].tagName === 'IMG') && selectParentEle[0].parentElement) {\n var prev = selectParentEle[0].parentElement.childNodes[0];\n this.parent.formatter.editorManager.nodeSelection.setSelectionText(this.contentModule.getDocument(), prev, prev, prev.textContent.length, prev.textContent.length);\n removeClass([selectParentEle[0]], 'e-img-focus');\n this.quickToolObj.imageQTBar.hidePopup();\n }\n }\n switch (originalEvent.action) {\n case 'escape':\n if (!isNullOrUndefined(this.dialogObj)) {\n this.dialogObj.close();\n }\n break;\n case 'insert-image':\n if (this.parent.editorMode === 'HTML') {\n this.insertImage({\n args: {\n item: { command: 'Images', subCommand: 'Image' },\n originalEvent: originalEvent\n },\n selectNode: selectNodeEle,\n selection: save,\n selectParent: selectParentEle\n });\n }\n else {\n this.insertImage({\n args: {\n item: { command: 'Images', subCommand: 'Image' },\n originalEvent: originalEvent\n },\n member: 'image',\n text: this.parent.formatter.editorManager.markdownSelection.getSelectedText(this.parent.contentModule.getEditPanel()),\n module: 'Markdown',\n name: 'insertImage'\n });\n }\n originalEvent.preventDefault();\n break;\n }\n };\n Image.prototype.alignmentSelect = function (e) {\n var item = e.item;\n if (!document.body.contains(document.body.querySelector('.e-rte-quick-toolbar')) || item.command !== 'Images') {\n return;\n }\n var range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());\n var selectNodeEle = this.parent.formatter.editorManager.nodeSelection.getNodeCollection(range);\n var args = { args: e, selectNode: selectNodeEle };\n switch (item.subCommand) {\n case 'JustifyLeft':\n this.justifyImageLeft(args);\n break;\n case 'JustifyCenter':\n this.justifyImageCenter(args);\n break;\n case 'JustifyRight':\n this.justifyImageRight(args);\n break;\n case 'Inline':\n this.inline(args);\n break;\n case 'Break':\n this.break(args);\n break;\n }\n if (this.quickToolObj && document.body.contains(this.quickToolObj.imageQTBar.element)) {\n this.quickToolObj.imageQTBar.hidePopup();\n removeClass([selectNodeEle[0]], 'e-img-focus');\n }\n };\n Image.prototype.imageWithLinkQTBarItemUpdate = function () {\n var separator;\n var items = this.quickToolObj.imageQTBar.toolbarElement.querySelectorAll('.e-toolbar-item');\n for (var i = 0; i < items.length; i++) {\n if (items[i].getAttribute('title') === this.i10n.getConstant('openLink') ||\n items[i].getAttribute('title') === this.i10n.getConstant('editLink') ||\n items[i].getAttribute('title') === this.i10n.getConstant('removeLink')) {\n addClass([items[i]], 'e-link-groups');\n items[i].style.display = 'none';\n }\n else if (items[i].getAttribute('title') === 'Insert Link') {\n items[i].style.display = '';\n }\n else if (items[i].classList.contains('e-rte-horizontal-separator')) {\n separator = items[i];\n detach(items[i]);\n }\n }\n var newItems = this.quickToolObj.imageQTBar.toolbarElement.querySelectorAll('.e-toolbar-item:not(.e-link-groups)');\n this.quickToolObj.imageQTBar.addQTBarItem(['-'], Math.round(newItems.length / 2));\n };\n Image.prototype.showImageQuickToolbar = function (e) {\n var _this = this;\n if (e.type !== 'Images' || isNullOrUndefined(this.parent.quickToolbarModule)\n || isNullOrUndefined(this.parent.quickToolbarModule.imageQTBar)) {\n return;\n }\n this.quickToolObj = this.parent.quickToolbarModule;\n var args = e.args;\n var target;\n [].forEach.call(e.elements, function (element, index) {\n if (index === 0) {\n target = element;\n }\n });\n if (target.parentElement && target.parentElement.tagName !== 'A') {\n this.imageWithLinkQTBarItemUpdate();\n }\n if (target.nodeName === 'IMG') {\n addClass([target], ['e-img-focus']);\n }\n var pageY = (this.parent.iframeSettings.enable) ? window.pageYOffset +\n this.parent.element.getBoundingClientRect().top + args.clientY : args.pageY;\n if (this.parent.quickToolbarModule.imageQTBar) {\n if (e.isNotify) {\n setTimeout(function () { _this.quickToolObj.imageQTBar.showPopup(args.pageX, pageY, target); }, 400);\n }\n else {\n this.quickToolObj.imageQTBar.showPopup(args.pageX, pageY, target);\n }\n }\n };\n Image.prototype.hideImageQuickToolbar = function () {\n if (!isNullOrUndefined(this.contentModule.getEditPanel().querySelector('.e-img-focus'))) {\n removeClass([this.contentModule.getEditPanel().querySelector('.e-img-focus')], 'e-img-focus');\n if (this.quickToolObj && this.quickToolObj.imageQTBar && document.body.contains(this.quickToolObj.imageQTBar.element)) {\n this.quickToolObj.imageQTBar.hidePopup();\n }\n }\n };\n Image.prototype.editAreaClickHandler = function (e) {\n var args = e.args;\n if (args.which === 2 || args.which === 3) {\n return;\n }\n if (this.parent.editorMode === 'HTML' && this.parent.quickToolbarModule && this.parent.quickToolbarModule.imageQTBar) {\n this.quickToolObj = this.parent.quickToolbarModule;\n var target = args.target;\n this.contentModule = this.rendererFactory.getRenderer(RenderType.Content);\n var isPopupOpen = this.quickToolObj.imageQTBar.element.classList.contains('e-rte-pop');\n if (target.nodeName === 'IMG' && this.parent.quickToolbarModule) {\n if (isPopupOpen) {\n return;\n }\n this.parent.formatter.editorManager.nodeSelection.Clear(this.contentModule.getDocument());\n this.parent.formatter.editorManager.nodeSelection.setSelectionContents(this.contentModule.getDocument(), target);\n addClass([target], 'e-img-focus');\n var items = this.quickToolObj.imageQTBar.toolbarElement.querySelectorAll('.e-toolbar-item');\n var separator = void 0;\n if (target.parentElement.tagName === 'A') {\n for (var i = 0; i < items.length; i++) {\n if (items[i].getAttribute('title') === this.i10n.getConstant('openLink') ||\n items[i].getAttribute('title') === this.i10n.getConstant('editLink') ||\n items[i].getAttribute('title') === this.i10n.getConstant('removeLink')) {\n items[i].style.display = '';\n removeClass([items[i]], 'e-link-groups');\n }\n else if (items[i].getAttribute('title') === 'Insert Link') {\n items[i].style.display = 'none';\n }\n else if (items[i].classList.contains('e-rte-horizontal-separator')) {\n separator = items[i];\n detach(items[i]);\n }\n }\n var newItems = this.quickToolObj.imageQTBar.toolbarElement.querySelectorAll('.e-toolbar-item:not(.e-link-groups)');\n this.quickToolObj.imageQTBar.addQTBarItem(['-'], Math.round(newItems.length / 2));\n }\n else if (target.parentElement.tagName !== 'A') {\n this.imageWithLinkQTBarItemUpdate();\n }\n this.showImageQuickToolbar({ args: args, type: 'Images', elements: [args.target] });\n }\n else {\n this.hideImageQuickToolbar();\n }\n }\n };\n Image.prototype.insertImgLink = function (e, inputDetails) {\n var _this = this;\n if (e.selectNode[0].nodeName !== 'IMG') {\n return;\n }\n this.imagDialog(e);\n if (!isNullOrUndefined(this.dialogObj)) {\n var linkWrap = createElement('div', { className: 'e-img-linkwrap' });\n var linkUrl = this.i10n.getConstant('linkurl');\n var content = '
    ' +\n '
    ' +\n '
    ' + '
    ' +\n '
    ';\n var contentElem = document.createRange().createContextualFragment(content);\n linkWrap.appendChild(contentElem);\n var linkTarget = linkWrap.querySelector('.e-rte-linkTarget');\n var inputLink = linkWrap.querySelector('.e-img-link');\n var target_1 = '';\n var linkOpenLabel = this.i10n.getConstant('linkOpenInNewWindow');\n this.checkBoxObj = new CheckBox({\n label: linkOpenLabel, checked: true, enableRtl: this.parent.enableRtl, change: function (e) {\n if (e.checked) {\n target_1 = '_blank';\n }\n else {\n target_1 = '';\n }\n }\n });\n this.checkBoxObj.appendTo(linkTarget);\n var linkUpdate = this.i10n.getConstant('dialogUpdate');\n var linkargs_1 = {\n selfImage: this, selection: e.selection,\n selectNode: e.selectNode, selectParent: e.selectParent, link: inputLink, target: target_1\n };\n this.dialogObj.setProperties({\n height: 'initial', width: '290px', header: 'Insert Link', content: linkWrap, position: { X: 'center', Y: 'center' },\n buttons: [{\n click: function (e) { _this.insertlink(linkargs_1); },\n buttonModel: {\n content: linkUpdate, cssClass: 'e-flat e-update-link', isPrimary: true\n }\n }]\n });\n if (!isNullOrUndefined(inputDetails)) {\n inputLink.value = inputDetails.url;\n (inputDetails.target) ? this.checkBoxObj.checked = true : this.checkBoxObj.checked = false;\n this.dialogObj.header = inputDetails.header;\n }\n this.dialogObj.content.querySelector('input').focus();\n }\n };\n Image.prototype.insertAltText = function (e) {\n var _this = this;\n if (e.selectNode[0].nodeName !== 'IMG') {\n return;\n }\n this.imagDialog(e);\n var altText = this.i10n.getConstant('altText');\n if (!isNullOrUndefined(this.dialogObj)) {\n var altWrap = createElement('div', { className: 'e-img-altwrap' });\n var altHeader = this.i10n.getConstant('alternateHeader');\n var linkUpdate = this.i10n.getConstant('dialogUpdate');\n var getAlt = (e.selectNode[0].getAttribute('alt') === null) ? '' :\n e.selectNode[0].getAttribute('alt');\n var content = '
    ' +\n '' +\n '
    ';\n var contentElem = document.createRange().createContextualFragment(content);\n altWrap.appendChild(contentElem);\n var inputAlt = altWrap.querySelector('.e-img-alt');\n var altArgs_1 = { selfImage: this, selection: e.selection, selectNode: e.selectNode, alt: inputAlt };\n this.dialogObj.setProperties({\n height: 'initial', width: '290px', header: altHeader, content: altWrap, position: { X: 'center', Y: 'center' },\n buttons: [{\n click: function (e) { _this.insertAlt(altArgs_1); },\n buttonModel: {\n content: linkUpdate, cssClass: 'e-flat e-update-alt', isPrimary: true\n }\n }]\n });\n this.dialogObj.content.querySelector('input').focus();\n }\n };\n Image.prototype.insertAlt = function (e) {\n if (!isNullOrUndefined(e.alt)) {\n var altText = e.alt.value;\n e.selectNode[0].setAttribute('alt', altText);\n e.selection.restore();\n this.parent.formatter.saveData();\n this.dialogObj.hide({ returnValue: false });\n }\n };\n Image.prototype.insertlink = function (e) {\n if (e.selectNode[0].nodeName !== 'IMG') {\n return;\n }\n var url = e.link.value;\n if (!this.isUrl(url)) {\n addClass([e.link], 'e-error');\n e.link.setSelectionRange(0, url.length);\n e.link.focus();\n return;\n }\n else {\n removeClass([e.link], 'e-error');\n }\n if (e.selectNode[0].parentElement.nodeName === 'A') {\n e.selectNode[0].parentElement.href = url;\n e.selectNode[0].parentElement.target = e.target;\n e.selfImage.parent.formatter.saveData();\n e.selfImage.dialogObj.hide({ returnValue: true });\n return;\n }\n e.selection.restore();\n var anchor = createElement('a', {\n attrs: {\n href: url,\n target: '_blank'\n }\n });\n anchor.appendChild(e.selectNode[0]);\n InsertHtml.Insert(this.contentModule.getDocument(), anchor);\n e.selfImage.parent.formatter.saveData();\n e.selfImage.dialogObj.hide({ returnValue: false });\n };\n Image.prototype.isUrl = function (url) {\n var regexp = /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-\\/]))?/gi;\n return regexp.test(url);\n };\n Image.prototype.deleteImg = function (e) {\n var selectNode = e.selectNode[0];\n if (e.selectNode[0].nodeName !== 'IMG') {\n return;\n }\n if (this.parent.formatter.getUndoRedoStack().length === 0) {\n this.parent.formatter.saveData();\n }\n if (selectNode.parentElement.tagName === 'A' && !selectNode.parentElement.parentElement.classList.contains(classes.CLS_CAPTION)) {\n detach(selectNode.parentElement);\n }\n else if (!isNullOrUndefined(closest(selectNode, '.' + classes.CLS_CAPTION))) {\n detach(closest(selectNode, '.' + classes.CLS_CAPTION));\n }\n else {\n detach(selectNode);\n }\n this.parent.formatter.saveData();\n if (this.quickToolObj && document.body.contains(this.quickToolObj.imageQTBar.element)) {\n this.quickToolObj.imageQTBar.hidePopup();\n }\n };\n Image.prototype.caption = function (e) {\n var selectNode = e.selectNode[0];\n if (selectNode.nodeName !== 'IMG') {\n return;\n }\n e.selection.restore();\n addClass([selectNode], 'e-rte-image');\n if (!isNullOrUndefined(closest(selectNode, '.' + classes.CLS_CAPTION))) {\n detach(closest(selectNode, '.' + classes.CLS_CAPTION));\n if (selectNode.parentElement.tagName === 'A') {\n InsertHtml.Insert(this.contentModule.getDocument(), selectNode.parentElement);\n }\n else {\n InsertHtml.Insert(this.contentModule.getDocument(), selectNode);\n }\n }\n else {\n this.captionEle = createElement('span', {\n className: classes.CLS_CAPTION,\n attrs: { contenteditable: 'false', draggable: 'false' }\n });\n var imgWrap = createElement('span', { className: 'e-img-wrap' });\n var imgInner = createElement('span', { className: 'e-img-inner', attrs: { contenteditable: 'true' } });\n imgWrap.appendChild(e.selectNode[0]);\n imgWrap.appendChild(imgInner);\n var imgCaption = this.i10n.getConstant('imageCaption');\n imgInner.innerHTML = imgCaption;\n this.captionEle.appendChild(imgWrap);\n if (selectNode.classList.contains(classes.CLS_IMGINLINE)) {\n addClass([this.captionEle], classes.CLS_CAPINLINE);\n }\n if (selectNode.classList.contains(classes.CLS_IMGBREAK)) {\n addClass([this.captionEle], classes.CLS_IMGBREAK);\n }\n if (selectNode.classList.contains(classes.CLS_IMGLEFT)) {\n addClass([this.captionEle], classes.CLS_IMGLEFT);\n }\n if (selectNode.classList.contains(classes.CLS_IMGRIGHT)) {\n addClass([this.captionEle], classes.CLS_IMGRIGHT);\n }\n if (selectNode.classList.contains(classes.CLS_IMGCENTER)) {\n addClass([this.captionEle], classes.CLS_IMGCENTER);\n }\n InsertHtml.Insert(this.contentModule.getDocument(), this.captionEle);\n this.parent.formatter.editorManager.nodeSelection.setSelectionText(this.contentModule.getDocument(), imgInner.childNodes[0], imgInner.childNodes[0], 0, imgInner.childNodes[0].textContent.length);\n }\n this.parent.formatter.saveData();\n if (this.quickToolObj && document.body.contains(this.quickToolObj.imageQTBar.element)) {\n this.quickToolObj.imageQTBar.hidePopup();\n removeClass([selectNode], 'e-img-focus');\n }\n };\n Image.prototype.imageSize = function (e) {\n if (e.selectNode[0].nodeName !== 'IMG') {\n return;\n }\n this.imagDialog(e);\n if (!isNullOrUndefined(this.dialogObj)) {\n var imgSizeHeader = this.i10n.getConstant('imageSizeHeader');\n var linkUpdate = this.i10n.getConstant('dialogUpdate');\n var dialogContent = this.imgsizeInput(e);\n var selectObj = { selfImage: this, selection: e.selection, selectNode: e.selectNode };\n this.dialogObj.setProperties({\n height: 'initial', width: '290px', header: imgSizeHeader, content: dialogContent, position: { X: 'center', Y: 'center' },\n buttons: [{\n click: this.insertSize.bind(selectObj),\n buttonModel: {\n content: linkUpdate, cssClass: 'e-flat e-update-size', isPrimary: true\n }\n }]\n });\n this.dialogObj.content.querySelector('input').focus();\n }\n };\n Image.prototype.break = function (e) {\n if (e.selectNode[0].nodeName !== 'IMG') {\n return;\n }\n var selectNode = e.selectNode[0];\n selectNode.removeAttribute('class');\n addClass([selectNode], classes.CLS_IMGBREAK);\n addClass([selectNode], 'e-rte-image');\n if (!isNullOrUndefined(closest(selectNode, '.' + classes.CLS_CAPTION))) {\n removeClass([closest(selectNode, '.' + classes.CLS_CAPTION)], classes.CLS_CAPINLINE);\n removeClass([closest(selectNode, '.' + classes.CLS_CAPTION)], classes.CLS_IMGCENTER);\n removeClass([closest(selectNode, '.' + classes.CLS_CAPTION)], classes.CLS_IMGLEFT);\n removeClass([closest(selectNode, '.' + classes.CLS_CAPTION)], classes.CLS_IMGRIGHT);\n addClass([closest(selectNode, '.' + classes.CLS_CAPTION)], classes.CLS_IMGBREAK);\n }\n this.parent.formatter.saveData();\n };\n Image.prototype.inline = function (e) {\n if (e.selectNode[0].nodeName !== 'IMG') {\n return;\n }\n var selectNode = e.selectNode[0];\n selectNode.removeAttribute('class');\n addClass([selectNode], 'e-rte-image');\n addClass([selectNode], classes.CLS_IMGINLINE);\n if (!isNullOrUndefined(closest(selectNode, '.' + classes.CLS_CAPTION))) {\n removeClass([closest(selectNode, '.' + classes.CLS_CAPTION)], classes.CLS_IMGBREAK);\n removeClass([closest(selectNode, '.' + classes.CLS_CAPTION)], classes.CLS_IMGCENTER);\n removeClass([closest(selectNode, '.' + classes.CLS_CAPTION)], classes.CLS_IMGLEFT);\n removeClass([closest(selectNode, '.' + classes.CLS_CAPTION)], classes.CLS_IMGRIGHT);\n addClass([closest(selectNode, '.' + classes.CLS_CAPTION)], classes.CLS_CAPINLINE);\n }\n this.parent.formatter.saveData();\n };\n Image.prototype.justifyImageLeft = function (e) {\n var selectNode = e.selectNode[0];\n selectNode.removeAttribute('class');\n addClass([selectNode], 'e-rte-image');\n if (!isNullOrUndefined(closest(selectNode, '.' + classes.CLS_CAPTION))) {\n removeClass([closest(selectNode, '.' + classes.CLS_CAPTION)], classes.CLS_IMGRIGHT);\n addClass([closest(selectNode, '.' + classes.CLS_CAPTION)], classes.CLS_IMGLEFT);\n }\n if (selectNode.parentElement.nodeName === 'A') {\n removeClass([selectNode.parentElement], classes.CLS_IMGRIGHT);\n addClass([selectNode.parentElement], classes.CLS_IMGLEFT);\n }\n else {\n addClass([selectNode], classes.CLS_IMGLEFT);\n }\n this.parent.formatter.saveData();\n };\n Image.prototype.justifyImageRight = function (e) {\n var selectNode = e.selectNode[0];\n selectNode.removeAttribute('class');\n addClass([selectNode], 'e-rte-image');\n if (!isNullOrUndefined(closest(selectNode, '.' + classes.CLS_CAPTION))) {\n removeClass([closest(selectNode, '.' + classes.CLS_CAPTION)], classes.CLS_IMGLEFT);\n addClass([closest(selectNode, '.' + classes.CLS_CAPTION)], classes.CLS_IMGRIGHT);\n }\n if (selectNode.parentElement.nodeName === 'A') {\n removeClass([selectNode.parentElement], classes.CLS_IMGLEFT);\n addClass([selectNode.parentElement], classes.CLS_IMGRIGHT);\n }\n else {\n addClass([selectNode], classes.CLS_IMGRIGHT);\n }\n this.parent.formatter.saveData();\n };\n Image.prototype.justifyImageCenter = function (e) {\n var selectNode = e.selectNode[0];\n selectNode.removeAttribute('class');\n addClass([selectNode], 'e-rte-image');\n if (!isNullOrUndefined(closest(selectNode, '.' + classes.CLS_CAPTION))) {\n removeClass([closest(selectNode, '.' + classes.CLS_CAPTION)], classes.CLS_IMGLEFT);\n removeClass([closest(selectNode, '.' + classes.CLS_CAPTION)], classes.CLS_IMGRIGHT);\n addClass([closest(selectNode, '.' + classes.CLS_CAPTION)], classes.CLS_IMGCENTER);\n }\n if (selectNode.parentElement.nodeName === 'A') {\n removeClass([selectNode.parentElement], classes.CLS_IMGLEFT);\n removeClass([selectNode.parentElement], classes.CLS_IMGRIGHT);\n addClass([selectNode.parentElement], classes.CLS_IMGCENTER);\n }\n else {\n addClass([selectNode], classes.CLS_IMGCENTER);\n }\n this.parent.formatter.saveData();\n };\n Image.prototype.imagDialog = function (e) {\n var _this = this;\n if (this.dialogObj) {\n this.dialogObj.hide({ returnValue: true });\n return;\n }\n var imgDialog = createElement('div', { className: 'e-rte-img-dialog', id: this.rteID + '_image' });\n this.parent.element.appendChild(imgDialog);\n var imgInsert = this.i10n.getConstant('dialogInsert');\n var imglinkCancel = this.i10n.getConstant('dialogCancel');\n var imgHeader = this.i10n.getConstant('imageHeader');\n var selection = e.selection;\n var selectObj = { selfImage: this, selection: e.selection, args: e.args };\n this.dialogObj = new Dialog({\n header: imgHeader,\n cssClass: classes.CLS_RTE_ELEMENTS,\n enableRtl: this.parent.enableRtl,\n locale: this.parent.locale,\n showCloseIcon: true, closeOnEscape: true, width: (Browser.isDevice) ? '290px' : '340px', height: 'initial',\n position: { X: 'center', Y: (Browser.isDevice) ? 'center' : 'top' },\n isModal: Browser.isDevice,\n buttons: [{\n click: this.insertImageUrl.bind(selectObj),\n buttonModel: { content: imgInsert, cssClass: 'e-flat e-insertImage', isPrimary: true }\n },\n {\n click: function (e) { _this.cancelDialog(e); },\n buttonModel: { cssClass: 'e-flat e-cancel', content: imglinkCancel }\n }],\n target: (Browser.isDevice) ? document.body : this.parent.element,\n animationSettings: { effect: 'None' },\n close: function (event) {\n _this.parent.isBlur = false;\n if (event && event.event.returnValue) {\n if (_this.parent.editorMode === 'HTML') {\n selection.restore();\n }\n else {\n _this.parent.formatter.editorManager.markdownSelection.restore(_this.parent.contentModule.getEditPanel());\n }\n }\n _this.dialogObj.destroy();\n detach(_this.dialogObj.element);\n _this.dialogObj = null;\n },\n });\n this.dialogObj.appendTo(imgDialog);\n imgDialog.style.maxHeight = 'none';\n EventHandler.add(document, 'mousedown', this.onDocumentClick, this);\n if (this.quickToolObj) {\n if (this.quickToolObj.imageQTBar && document.body.contains(this.quickToolObj.imageQTBar.element)) {\n this.quickToolObj.imageQTBar.hidePopup();\n if (!isNullOrUndefined(e.selectParent)) {\n removeClass([e.selectParent[0]], 'e-img-focus');\n }\n }\n if (this.quickToolObj.inlineQTBar && document.body.contains(this.quickToolObj.inlineQTBar.element)) {\n this.quickToolObj.inlineQTBar.hidePopup();\n }\n }\n };\n Image.prototype.cancelDialog = function (e) {\n this.parent.isBlur = false;\n this.dialogObj.hide({ returnValue: true });\n };\n Image.prototype.onDocumentClick = function (e) {\n var target = e.target;\n if (!isNullOrUndefined(this.dialogObj) && ((!closest(target, '#' + this.dialogObj.element.id) && this.parent.toolbarSettings.enable && this.parent.getToolbarElement() &&\n !this.parent.getToolbarElement().contains(e.target)) ||\n (this.parent.getToolbarElement() && this.parent.getToolbarElement().contains(e.target) &&\n !closest(target, '#' + this.parent.getID() + '_toolbar_Image') &&\n !target.querySelector('#' + this.parent.getID() + '_toolbar_Image')))) {\n this.dialogObj.hide({ returnValue: true });\n this.parent.isBlur = true;\n dispatchEvent(this.parent.element, 'focusout');\n }\n };\n Image.prototype.imageUrlPopup = function (e) {\n var imgUrl = createElement('div', { className: 'imgUrl' });\n var placeUrl = this.i10n.getConstant('imageUrl');\n this.inputUrl = createElement('input', { className: 'e-input e-img-url', attrs: { placeholder: placeUrl, spellcheck: 'false' } });\n imgUrl.appendChild(this.inputUrl);\n return imgUrl;\n };\n Image.prototype.insertImageUrl = function (e) {\n var proxy = this.selfImage;\n var url = proxy.inputUrl.value;\n if (proxy.parent.formatter.getUndoRedoStack().length === 0) {\n proxy.parent.formatter.saveData();\n }\n if (!isNullOrUndefined(proxy.uploadUrl) && proxy.uploadUrl.url !== '') {\n proxy.parent.formatter.process(proxy.parent, this.args, this.args.originalEvent, proxy.uploadUrl);\n proxy.dialogObj.hide({ returnValue: false });\n proxy.uploadUrl.url = '';\n }\n else if (url !== '') {\n if (proxy.parent.editorMode === 'HTML' && isNullOrUndefined(closest(this.selection.range.startContainer.parentNode, '#' + proxy.contentModule.getPanel().id))) {\n proxy.contentModule.getEditPanel().focus();\n var range = proxy.parent.formatter.editorManager.nodeSelection.getRange(proxy.contentModule.getDocument());\n this.selection = proxy.parent.formatter.editorManager.nodeSelection.save(range, proxy.contentModule.getDocument());\n this.selectParent = proxy.parent.formatter.editorManager.nodeSelection.getParentNodeCollection(range);\n }\n var regex = /[\\w-]+.(jpg|png|jpeg|gif)/g;\n var matchUrl = (!isNullOrUndefined(url.match(regex)) && proxy.parent.editorMode === 'HTML') ? url.match(regex)[0] : '';\n var value = {\n url: url, selection: this.selection, altText: matchUrl,\n selectParent: this.selectParent, width: proxy.parent.insertImageSettings.width,\n height: proxy.parent.insertImageSettings.height\n };\n proxy.parent.formatter.process(proxy.parent, this.args, this.args.originalEvent, value);\n proxy.dialogObj.hide({ returnValue: false });\n }\n };\n Image.prototype.imgsizeInput = function (e) {\n var selectNode = e.selectNode[0];\n var imgHeight = this.i10n.getConstant('imageHeight');\n var imgWidth = this.i10n.getConstant('imageWidth');\n var imgSizeWrap = createElement('div', { className: 'e-img-sizewrap' });\n var widthVal = (selectNode.getAttribute('width') === 'auto' ||\n isNullOrUndefined(selectNode.getAttribute('width'))) ? selectNode.width : selectNode.getAttribute('width');\n var heightVal = (selectNode.getAttribute('height') === 'auto' ||\n isNullOrUndefined(selectNode.getAttribute('height'))) ? selectNode.height : selectNode.getAttribute('height');\n var content = '
    ' +\n '
    ' + '
    ' +\n '
    ';\n var contentElem = document.createRange().createContextualFragment(content);\n imgSizeWrap.appendChild(contentElem);\n var widthNum = new NumericTextBox({ format: 'n0', enableRtl: this.parent.enableRtl, locale: this.parent.locale });\n widthNum.appendTo(imgSizeWrap.querySelector('#imgwidth'));\n var heightNum = new NumericTextBox({ format: 'n0', enableRtl: this.parent.enableRtl, locale: this.parent.locale });\n heightNum.appendTo(imgSizeWrap.querySelector('#imgheight'));\n return imgSizeWrap;\n };\n Image.prototype.insertSize = function (e) {\n var selectNode = this.selectNode[0];\n var dialogEle = this.selfImage.dialogObj.element;\n selectNode.style.height = '';\n selectNode.style.width = '';\n selectNode.width = parseFloat(dialogEle.querySelector('.e-img-width').value);\n selectNode.height = parseFloat(dialogEle.parentElement.querySelector('.e-img-height').value);\n this.selfImage.parent.formatter.saveData();\n this.selfImage.dialogObj.hide({ returnValue: true });\n };\n Image.prototype.insertImage = function (e) {\n this.imagDialog(e);\n if (!isNullOrUndefined(this.dialogObj)) {\n var dialogContent = createElement('div', { className: 'e-img-content' });\n if ((!isNullOrUndefined(this.parent.insertImageSettings.path) && this.parent.editorMode === 'Markdown')\n || this.parent.editorMode === 'HTML') {\n dialogContent.appendChild(this.imgUpload(e));\n }\n var linkHeader = createElement('div', { className: 'e-linkheader' });\n var linkHeaderText = this.i10n.getConstant('imageLinkHeader');\n if (this.parent.editorMode === 'HTML') {\n linkHeader.innerHTML = linkHeaderText;\n }\n else {\n linkHeader.innerHTML = this.i10n.getConstant('mdimageLink');\n }\n dialogContent.appendChild(linkHeader);\n dialogContent.appendChild(this.imageUrlPopup(e));\n if (e.selectNode && e.selectNode[0].nodeName === 'IMG') {\n this.dialogObj.setProperties({ header: 'Edit Image', content: dialogContent }, false);\n this.dialogObj.element.querySelector('.e-insertImage').textContent = 'Update';\n }\n else {\n this.dialogObj.setProperties({ content: dialogContent }, false);\n }\n this.dialogObj.element.style.maxHeight = 'none';\n if ((!isNullOrUndefined(this.parent.insertImageSettings.path) && this.parent.editorMode === 'Markdown')\n || this.parent.editorMode === 'HTML') {\n dialogContent.querySelector('#' + this.rteID + '_insertImage').focus();\n }\n else {\n dialogContent.querySelector('.e-img-url').focus();\n }\n }\n };\n Image.prototype.imgUpload = function (e) {\n var _this = this;\n var save;\n var selectParent;\n var proxy = this;\n if (proxy.parent.editorMode === 'HTML' &&\n isNullOrUndefined(closest(e.selection.range.startContainer.parentNode, '#' + this.contentModule.getPanel().id))) {\n this.contentModule.getEditPanel().focus();\n var range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());\n save = this.parent.formatter.editorManager.nodeSelection.save(range, this.parent.contentModule.getDocument());\n selectParent = this.parent.formatter.editorManager.nodeSelection.getParentNodeCollection(range);\n }\n else {\n save = e.selection;\n selectParent = e.selectParent;\n }\n var uploadParentEle = createElement('div', { className: 'e-img-uploadwrap e-droparea' });\n var deviceImgUpMsg = this.i10n.getConstant('imageDeviceUploadMessage');\n var imgUpMsg = this.i10n.getConstant('imageUploadMessage');\n var span = createElement('span', { className: 'e-droptext' });\n span.innerHTML = (Browser.isDevice) ? deviceImgUpMsg : imgUpMsg;\n var btnEle = createElement('button', {\n className: 'e-browsebtn', id: this.rteID + '_insertImage',\n attrs: { autofocus: 'true', type: 'button' }\n });\n span.appendChild(btnEle);\n uploadParentEle.appendChild(span);\n var browserMsg = this.i10n.getConstant('browse');\n var button = new Button({ content: browserMsg, enableRtl: this.parent.enableRtl });\n button.appendTo(btnEle);\n var btnClick = (Browser.isDevice) ? span : btnEle;\n EventHandler.add(btnClick, 'click', this.fileSelect, this);\n var uploadEle = createElement('input', {\n id: this.rteID + '_upload', attrs: { type: 'File', name: 'UploadFiles' }\n });\n uploadParentEle.appendChild(uploadEle);\n var altText;\n this.uploadObj = new Uploader({\n asyncSettings: {\n saveUrl: this.parent.insertImageSettings.saveUrl,\n },\n dropArea: span,\n multiple: false,\n enableRtl: this.parent.enableRtl,\n allowedExtensions: this.parent.insertImageSettings.allowedTypes.toString(),\n selected: function (e) {\n altText = e.filesData[0].name;\n if (_this.parent.editorMode === 'HTML' && isNullOrUndefined(_this.parent.insertImageSettings.path)) {\n var reader_1 = new FileReader();\n reader_1.addEventListener('load', function (e) {\n var url = URL.createObjectURL(proxy.url(reader_1.result));\n proxy.uploadUrl = {\n url: url, selection: save, altText: altText, selectParent: selectParent,\n width: proxy.parent.insertImageSettings.width, height: proxy.parent.insertImageSettings.height\n };\n proxy.inputUrl.setAttribute('disabled', 'true');\n });\n reader_1.readAsDataURL(e.filesData[0].rawFile);\n }\n },\n success: function (e) {\n if (!isNullOrUndefined(_this.parent.insertImageSettings.path)) {\n var url = _this.parent.insertImageSettings.path + e.file.name;\n var value = { url: url, selection: save };\n proxy.uploadUrl = {\n url: url, selection: save, altText: altText, selectParent: selectParent,\n width: proxy.parent.insertImageSettings.width, height: proxy.parent.insertImageSettings.height\n };\n proxy.inputUrl.setAttribute('disabled', 'true');\n }\n },\n removing: function () {\n proxy.inputUrl.removeAttribute('disabled');\n proxy.uploadUrl.url = '';\n }\n });\n this.uploadObj.appendTo(uploadEle);\n return uploadParentEle;\n };\n Image.prototype.fileSelect = function () {\n document.body.getElementsByClassName('e-file-select-wrap')[0].querySelector('button').click();\n return false;\n };\n Image.prototype.url = function (dataurl) {\n var arr = dataurl.split(',');\n var mime = arr[0].match(/:(.*?);/)[1];\n var bstr = atob(arr[1]);\n var n = bstr.length;\n var u8arr = new Uint8Array(n);\n while (n--) {\n u8arr[n] = bstr.charCodeAt(n);\n }\n return new Blob([u8arr], { type: mime });\n };\n /**\n * Destroys the ToolBar.\n * @method destroy\n * @return {void}\n */\n Image.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * For internal use only - Get the module name.\n */\n Image.prototype.getModuleName = function () {\n return 'image';\n };\n return Image;\n}());\nexport { Image };\n","import { createElement, removeClass, selectAll, isNullOrUndefined, EventHandler } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { CLS_EXPAND_OPEN, CLS_TB_ITEM, CLS_ACTIVE } from '../base/classes';\nimport * as CONSTANT from '../../common/constant';\nimport { RenderType } from '../base/enum';\nimport { KeyboardEvents } from '../actions/keyboard';\n/**\n * Content module is used to render RichTextEditor content\n * @hidden\n */\nvar ViewSource = /** @class */ (function () {\n /**\n * Constructor for view source module\n */\n function ViewSource(parent, locator) {\n this.parent = parent;\n var serviceLocator = locator;\n this.rendererFactory = serviceLocator.getService('rendererFactory');\n this.addEventListener();\n }\n ViewSource.prototype.addEventListener = function () {\n this.parent.on(events.sourceCode, this.sourceCode, this);\n this.parent.on(events.initialEnd, this.onInitialEnd, this);\n this.parent.on(events.updateSource, this.updateSourceCode, this);\n };\n ViewSource.prototype.onInitialEnd = function () {\n this.parent.formatter.editorManager.observer.on(CONSTANT.KEY_DOWN_HANDLER, this.onKeyDown, this);\n };\n ViewSource.prototype.removeEventListener = function () {\n this.unWireEvent();\n this.parent.off(events.sourceCode, this.sourceCode);\n this.parent.off(events.updateSource, this.updateSourceCode);\n this.parent.off(events.initialEnd, this.onInitialEnd);\n this.parent.formatter.editorManager.observer.off(CONSTANT.KEY_DOWN_HANDLER, this.onKeyDown);\n };\n ViewSource.prototype.getSourceCode = function () {\n return createElement('textarea', { className: 'e-rte-srctextarea' });\n };\n ViewSource.prototype.wireEvent = function (element) {\n this.keyboardModule = new KeyboardEvents(element, {\n keyAction: this.previewKeyDown.bind(this), keyConfigs: this.parent.formatter.keyConfig, eventName: 'keydown'\n });\n EventHandler.add(this.previewElement, 'mousedown', this.mouseDownHandler, this);\n };\n ViewSource.prototype.unWireEvent = function () {\n if (this.keyboardModule) {\n this.keyboardModule.destroy();\n }\n if (this.previewElement) {\n EventHandler.remove(this.previewElement, 'mousedown', this.mouseDownHandler);\n }\n };\n ViewSource.prototype.wireBaseKeyDown = function () {\n this.parent.keyboardModule = new KeyboardEvents(this.contentModule.getEditPanel(), {\n keyAction: this.parent.keyDown.bind(this.parent), keyConfigs: this.parent.formatter.keyConfig, eventName: 'keydown'\n });\n };\n ViewSource.prototype.unWireBaseKeyDown = function () {\n this.parent.keyboardModule.destroy();\n };\n ViewSource.prototype.mouseDownHandler = function (e) {\n this.parent.notify(events.sourceCodeMouseDown, { args: e });\n };\n ViewSource.prototype.previewKeyDown = function (event) {\n switch (event.action) {\n case 'html-source':\n this.updateSourceCode(event);\n event.preventDefault();\n break;\n }\n };\n ViewSource.prototype.onKeyDown = function (e) {\n switch (e.event.action) {\n case 'html-source':\n e.event.preventDefault();\n this.sourceCode(e);\n e.callBack({\n requestType: 'SourceCode',\n editorMode: 'HTML',\n event: e.event\n });\n break;\n }\n };\n ViewSource.prototype.sourceCode = function (args) {\n this.parent.isBlur = false;\n this.parent.trigger(events.actionBegin, { requestType: 'SourceCode', targetItem: 'SourceCode', args: args });\n var tbItems = selectAll('.' + CLS_TB_ITEM, this.parent.element);\n this.contentModule = this.rendererFactory.getRenderer(RenderType.Content);\n this.parent.notify(events.updateToolbarItem, {\n targetItem: 'SourceCode', updateItem: 'Preview',\n baseToolbar: this.parent.getBaseToolbarObject()\n });\n if (isNullOrUndefined(this.previewElement)) {\n this.previewElement = this.getSourceCode();\n }\n this.parent.updateValueData();\n if (this.parent.iframeSettings.enable) {\n var rteContent = void 0;\n if (isNullOrUndefined(this.parent.element.querySelector('#' + this.parent.element.id + '_source-view'))) {\n rteContent = createElement('div', { className: 'e-source-content', id: this.parent.element.id + '_source-view' });\n }\n else {\n rteContent = this.parent.element.querySelector('#' + this.parent.element.id + '_source-view');\n }\n rteContent.appendChild(this.previewElement);\n this.parent.element.appendChild(rteContent);\n rteContent.style.height = this.contentModule.getPanel().style.height;\n rteContent.style.marginTop = this.contentModule.getPanel().style.marginTop;\n this.getPanel().value = this.parent.value;\n this.contentModule.getPanel().style.display = 'none';\n rteContent.style.display = 'block';\n }\n else {\n this.contentModule.getPanel().appendChild(this.previewElement);\n this.getPanel().value = (this.contentModule.getEditPanel().innerHTML === '


    ' ||\n this.contentModule.getEditPanel().innerHTML.length === 12) ||\n (this.contentModule.getEditPanel().childNodes.length === 1 &&\n this.contentModule.getEditPanel().childNodes[0].tagName === 'P' &&\n this.contentModule.getEditPanel().innerHTML.length === 8) ? null : this.parent.value;\n this.contentModule.getEditPanel().style.display = 'none';\n this.previewElement.style.display = 'block';\n }\n this.parent.isBlur = false;\n this.parent.disableToolbarItem(this.parent.toolbarSettings.items);\n this.parent.enableToolbarItem('SourceCode');\n if (this.parent.getToolbar()) {\n removeClass([this.parent.getToolbar()], [CLS_EXPAND_OPEN]);\n }\n removeClass(tbItems, [CLS_ACTIVE]);\n this.parent.setContentHeight('sourceCode');\n this.wireEvent(this.previewElement);\n this.unWireBaseKeyDown();\n this.previewElement.focus();\n this.parent.updateValue();\n if (!isNullOrUndefined(this.parent.placeholder)) {\n var placeHolderWrapper = this.parent.element.querySelector('.rte-placeholder');\n placeHolderWrapper.style.display = 'none';\n }\n this.parent.trigger(events.actionComplete, { requestType: 'SourceCode', targetItem: 'SourceCode', args: args });\n this.parent.invokeChangeEvent();\n };\n ViewSource.prototype.updateSourceCode = function (args) {\n this.parent.isBlur = false;\n this.parent.trigger(events.actionBegin, { requestType: 'Preview', targetItem: 'Preview', args: args });\n var editHTML = this.getPanel();\n this.parent.notify(events.updateToolbarItem, {\n targetItem: 'Preview', updateItem: 'SourceCode',\n baseToolbar: this.parent.getBaseToolbarObject()\n });\n if (this.parent.iframeSettings.enable) {\n editHTML.parentElement.style.display = 'none';\n this.contentModule.getPanel().style.display = 'block';\n this.contentModule.getEditPanel().innerHTML = editHTML.value;\n }\n else {\n editHTML.style.display = 'none';\n this.contentModule.getEditPanel().style.display = 'block';\n this.contentModule.getEditPanel().innerHTML = editHTML.value;\n }\n this.parent.isBlur = false;\n this.parent.enableToolbarItem(this.parent.toolbarSettings.items);\n if (this.parent.getToolbar()) {\n removeClass([this.parent.getToolbar()], [CLS_EXPAND_OPEN]);\n }\n this.parent.setContentHeight();\n this.unWireEvent();\n this.wireBaseKeyDown();\n this.contentModule.getEditPanel().focus();\n this.parent.updateValue();\n if (!isNullOrUndefined(this.parent.placeholder) && this.contentModule.getEditPanel().innerText.length === 0) {\n var placeHolderWrapper = this.parent.element.querySelector('.rte-placeholder');\n placeHolderWrapper.style.display = 'block';\n }\n this.parent.trigger(events.actionComplete, { requestType: 'Preview', targetItem: 'Preview', args: args });\n this.parent.formatter.enableUndo(this.parent);\n this.parent.invokeChangeEvent();\n };\n ViewSource.prototype.getPanel = function () {\n return this.parent.element.querySelector('.e-rte-srctextarea');\n };\n /**\n * Destroy the entire RichTextEditor.\n * @return {void}\n */\n ViewSource.prototype.destroy = function () {\n this.removeEventListener();\n };\n return ViewSource;\n}());\nexport { ViewSource };\n","/** @hidden */\nexport var executeGroup = {\n 'bold': {\n command: 'style',\n subCommand: 'bold',\n value: 'strong'\n },\n 'italic': {\n command: 'style',\n subCommand: 'italic',\n value: 'em'\n },\n 'underline': {\n command: 'style',\n subCommand: 'underline',\n value: 'span'\n },\n 'strikeThrough': {\n command: 'style',\n subCommand: 'strikeThrough',\n value: 'span'\n },\n 'superscript': {\n command: 'effects',\n subCommand: 'superscript',\n value: 'sup'\n },\n 'subscript': {\n command: 'effects',\n subCommand: 'subscript',\n value: 'sub'\n },\n 'uppercase': {\n command: 'casing',\n subCommand: 'uppercase'\n },\n 'lowercase': {\n command: 'casing',\n subCommand: 'lowercase'\n },\n 'fontColor': {\n command: 'font',\n subCommand: 'fontcolor',\n value: '#ff0000'\n },\n 'fontName': {\n command: 'font',\n subCommand: 'fontname',\n value: 'Segoe UI'\n },\n 'fontSize': {\n command: 'font',\n subCommand: 'fontsize',\n value: '10pt'\n },\n 'backColor': {\n command: 'font',\n subCommand: 'backgroundcolor',\n value: '#ffff00'\n },\n 'justifyCenter': {\n command: 'Alignments',\n subCommand: 'JustifyCenter'\n },\n 'justifyFull': {\n command: 'Alignments',\n subCommand: 'JustifyFull'\n },\n 'justifyLeft': {\n command: 'Alignments',\n subCommand: 'JustifyLeft'\n },\n 'justifyRight': {\n command: 'Alignments',\n subCommand: 'JustifyRight'\n },\n 'undo': {\n command: 'Actions',\n subCommand: 'Undo'\n },\n 'redo': {\n command: 'Actions',\n subCommand: 'Redo'\n },\n 'createLink': {\n command: 'Links',\n subCommand: 'Links'\n },\n 'createImage': {\n command: 'Images',\n subCommand: 'Images'\n },\n 'formatBlock': {\n command: 'Formats',\n value: 'P'\n },\n 'heading': {\n command: 'Formats',\n value: 'H1'\n },\n 'indent': {\n command: 'Indents',\n subCommand: 'Indent'\n },\n 'outdent': {\n command: 'Indents',\n subCommand: 'Outdent'\n },\n 'insertHTML': {\n command: 'InsertHTML',\n subCommand: 'InsertHTML',\n value: ''\n },\n 'insertText': {\n command: 'InsertHTML',\n subCommand: 'InsertHTML',\n value: ''\n },\n 'insertHorizontalRule': {\n command: 'InsertHTML',\n subCommand: 'InsertHTML',\n value: '
    '\n },\n 'insertImage': {\n command: 'InsertHTML',\n subCommand: 'InsertHTML',\n value: ''\n },\n 'insertBrOnReturn': {\n command: 'InsertHTML',\n subCommand: 'InsertHTML',\n value: '
    '\n },\n 'insertOrderedList': {\n command: 'Formats',\n value: 'OL'\n },\n 'insertUnorderedList': {\n command: 'Formats',\n value: 'UL'\n },\n 'insertParagraph': {\n command: 'Formats',\n value: 'P'\n },\n 'removeFormat': {\n command: 'Clear',\n subCommand: 'ClearFormat'\n }\n};\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\nimport { ToolbarType } from '../base/enum';\nexport var predefinedItems = ['Bold', 'Italic', 'Underline', '|', 'Formats', 'Alignments',\n 'OrderedList', 'UnorderedList', '|', 'CreateLink', 'Image', '|', 'SourceCode', 'Undo', 'Redo'];\nexport var fontFamily = [\n { text: 'Segoe UI', value: 'Segoe UI', class: 'e-segoe-ui' },\n { text: 'Arial', value: 'Arial,Helvetica,sans-serif', class: 'e-arial' },\n { text: 'Georgia', value: 'Georgia,serif', class: 'e-georgia' },\n { text: 'Impact', value: 'Impact,Charcoal,sans-serif', class: 'e-impact' },\n { text: 'Tahoma', value: 'Tahoma,Geneva,sans-serif', class: 'e-tahoma' },\n { text: 'Times New Roman', value: 'Times New Roman,Times,serif', class: 'e-times-new-roman' },\n { text: 'Verdana', value: 'Verdana,Geneva,sans-serif', class: 'e-verdana' }\n];\nexport var fontSize = [\n { text: '8 pt', value: '8pt' },\n { text: '10 pt', value: '10pt' },\n { text: '12 pt', value: '12pt' },\n { text: '14 pt', value: '14pt' },\n { text: '18 pt', value: '18pt' },\n { text: '24 pt', value: '24pt' },\n { text: '36 pt', value: '36pt' }\n];\nexport var formatItems = [\n { text: 'Paragraph', value: 'P', class: 'e-paragraph' },\n { text: 'Code', value: 'Pre', class: 'e-code' },\n { text: 'Quotation', value: 'BlockQuote', class: 'e-quote' },\n { text: 'Heading 1', value: 'H1', class: 'e-h1' },\n { text: 'Heading 2', value: 'H2', class: 'e-h2' },\n { text: 'Heading 3', value: 'H3', class: 'e-h3' },\n { text: 'Heading 4', value: 'H4', class: 'e-h4' }\n];\nexport var fontColor = {\n 'Custom': [\n '', '#000000', '#e7e6e6', '#44546a', '#4472c4', '#ed7d31', '#a5a5a5', '#ffc000', '#70ad47', '#ff0000',\n '#f2f2f2', '#808080', '#cfcdcd', '#d5dce4', '#d9e2f3', '#fbe4d5', '#ededed', '#fff2cc', '#e2efd9', '#ffcccc',\n '#d9d9d9', '#595959', '#aeaaaa', '#acb9ca', '#b4c6e7', '#f7caac', '#dbdbdb', '#ffe599', '#c5e0b3', '#ff8080',\n '#bfbfbf', '#404040', '#747070', '#8496b0', '#8eaadb', '#f4b083', '#c9c9c9', '#ffd966', '#a8d08d', '#ff3333',\n '#a6a6a6', '#262626', '#3b3838', '#323e4f', '#2f5496', '#c45911', '#7b7b7b', '#bf8f00', '#538135', '#b30000',\n '#7f7f7f', '#0d0d0d', '#161616', '#212934', '#1f3763', '#823b0b', '#525252', '#7f5f00', '#375623', '#660000'\n ]\n};\nexport var backgroundColor = {\n 'Custom': [\n '', '#000000', '#ffff00', '#00ff00', '#00ffff', '#0000ff', '#ff0000', '#000080', '#800080', '#996633',\n '#f2f2f2', '#808080', '#ffffcc', '#b3ffb3', '#ccffff', '#ccccff', '#ffcccc', '#ccccff', '#ff80ff', '#f2e6d9',\n '#d9d9d9', '#595959', '#ffff80', '#80ff80', '#b3ffff', '#8080ff', '#ff8080', '#8080ff', '#ff00ff', '#dfbf9f',\n '#bfbfbf', '#404040', '#ffff33', '#33ff33', '#33ffff', '#3333ff', '#ff3333', '#0000b3', '#b300b3', '#c68c53',\n '#a6a6a6', '#262626', '#e6e600', '#00b300', '#009999', '#000099', '#b30000', '#000066', '#660066', '#86592d',\n '#7f7f7f', '#0d0d0d', '#999900', '#006600', '#006666', '#000066', '#660000', '#00004d', '#4d004d', '#734d26',\n ]\n};\n/**\n * Configures the toolbar settings of the RTE.\n */\nvar ToolbarSettings = /** @class */ (function (_super) {\n __extends(ToolbarSettings, _super);\n function ToolbarSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], ToolbarSettings.prototype, \"enable\", void 0);\n __decorate([\n Property(true)\n ], ToolbarSettings.prototype, \"enableFloating\", void 0);\n __decorate([\n Property(ToolbarType.Expand)\n ], ToolbarSettings.prototype, \"type\", void 0);\n __decorate([\n Property(predefinedItems)\n ], ToolbarSettings.prototype, \"items\", void 0);\n return ToolbarSettings;\n}(ChildProperty));\nexport { ToolbarSettings };\n/**\n * Configures the image settings of the RTE.\n */\nvar ImageSettings = /** @class */ (function (_super) {\n __extends(ImageSettings, _super);\n function ImageSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(['.jpeg', '.jpg', '.png'])\n ], ImageSettings.prototype, \"allowedTypes\", void 0);\n __decorate([\n Property('inline')\n ], ImageSettings.prototype, \"display\", void 0);\n __decorate([\n Property('auto')\n ], ImageSettings.prototype, \"width\", void 0);\n __decorate([\n Property('auto')\n ], ImageSettings.prototype, \"height\", void 0);\n __decorate([\n Property(null)\n ], ImageSettings.prototype, \"saveUrl\", void 0);\n __decorate([\n Property(null)\n ], ImageSettings.prototype, \"path\", void 0);\n return ImageSettings;\n}(ChildProperty));\nexport { ImageSettings };\n/**\n * Configures the quick toolbar settings of the RTE.\n */\nvar QuickToolbarSettings = /** @class */ (function (_super) {\n __extends(QuickToolbarSettings, _super);\n function QuickToolbarSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], QuickToolbarSettings.prototype, \"enable\", void 0);\n __decorate([\n Property('hide')\n ], QuickToolbarSettings.prototype, \"actionOnScroll\", void 0);\n __decorate([\n Property(['Open', 'Edit', 'UnLink'])\n ], QuickToolbarSettings.prototype, \"link\", void 0);\n __decorate([\n Property(['Replace', 'Align', 'Caption', 'Remove', '-', 'InsertLink', 'OpenImageLink', 'EditImageLink', 'RemoveImageLink', 'Display', 'AltText', 'Dimension'])\n ], QuickToolbarSettings.prototype, \"image\", void 0);\n __decorate([\n Property(['Cut', 'Copy', 'Paste'])\n ], QuickToolbarSettings.prototype, \"text\", void 0);\n return QuickToolbarSettings;\n}(ChildProperty));\nexport { QuickToolbarSettings };\n/**\n * Configures the font family settings of the RTE.\n */\nvar FontFamily = /** @class */ (function (_super) {\n __extends(FontFamily, _super);\n function FontFamily() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Segoe UI')\n ], FontFamily.prototype, \"default\", void 0);\n __decorate([\n Property('65px')\n ], FontFamily.prototype, \"width\", void 0);\n __decorate([\n Property(fontFamily)\n ], FontFamily.prototype, \"items\", void 0);\n return FontFamily;\n}(ChildProperty));\nexport { FontFamily };\n/**\n * Configures the font size settings of the RTE.\n */\nvar FontSize = /** @class */ (function (_super) {\n __extends(FontSize, _super);\n function FontSize() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('10 pt')\n ], FontSize.prototype, \"default\", void 0);\n __decorate([\n Property('35px')\n ], FontSize.prototype, \"width\", void 0);\n __decorate([\n Property(fontSize)\n ], FontSize.prototype, \"items\", void 0);\n return FontSize;\n}(ChildProperty));\nexport { FontSize };\n/**\n * Configures the format settings of the RTE.\n */\nvar Format = /** @class */ (function (_super) {\n __extends(Format, _super);\n function Format() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Paragraph')\n ], Format.prototype, \"default\", void 0);\n __decorate([\n Property('65px')\n ], Format.prototype, \"width\", void 0);\n __decorate([\n Property(formatItems)\n ], Format.prototype, \"types\", void 0);\n return Format;\n}(ChildProperty));\nexport { Format };\n/**\n * Configures the font Color settings of the RTE.\n */\nvar FontColor = /** @class */ (function (_super) {\n __extends(FontColor, _super);\n function FontColor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('#ff0000')\n ], FontColor.prototype, \"default\", void 0);\n __decorate([\n Property('Palette')\n ], FontColor.prototype, \"mode\", void 0);\n __decorate([\n Property(10)\n ], FontColor.prototype, \"columns\", void 0);\n __decorate([\n Property(fontColor)\n ], FontColor.prototype, \"colorCode\", void 0);\n __decorate([\n Property(false)\n ], FontColor.prototype, \"modeSwitcher\", void 0);\n return FontColor;\n}(ChildProperty));\nexport { FontColor };\n/**\n * Configures the background Color settings of the RTE.\n */\nvar BackgroundColor = /** @class */ (function (_super) {\n __extends(BackgroundColor, _super);\n function BackgroundColor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('#ffff00')\n ], BackgroundColor.prototype, \"default\", void 0);\n __decorate([\n Property('Palette')\n ], BackgroundColor.prototype, \"mode\", void 0);\n __decorate([\n Property(10)\n ], BackgroundColor.prototype, \"columns\", void 0);\n __decorate([\n Property(backgroundColor)\n ], BackgroundColor.prototype, \"colorCode\", void 0);\n __decorate([\n Property(false)\n ], BackgroundColor.prototype, \"modeSwitcher\", void 0);\n return BackgroundColor;\n}(ChildProperty));\nexport { BackgroundColor };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, Complex } from '@syncfusion/ej2-base';\n/**\n * Objects used for configuring the iframe resources properties.\n */\nvar Resources = /** @class */ (function (_super) {\n __extends(Resources, _super);\n function Resources() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property([])\n ], Resources.prototype, \"styles\", void 0);\n __decorate([\n Property([])\n ], Resources.prototype, \"scripts\", void 0);\n return Resources;\n}(ChildProperty));\nexport { Resources };\n/**\n * Configures the iframe settings of the RTE.\n */\nvar IFrameSettings = /** @class */ (function (_super) {\n __extends(IFrameSettings, _super);\n function IFrameSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], IFrameSettings.prototype, \"enable\", void 0);\n __decorate([\n Property(null)\n ], IFrameSettings.prototype, \"attributes\", void 0);\n __decorate([\n Complex({}, Resources)\n ], IFrameSettings.prototype, \"resources\", void 0);\n return IFrameSettings;\n}(ChildProperty));\nexport { IFrameSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the inlineMode property of the RTE.\n */\nvar InlineMode = /** @class */ (function (_super) {\n __extends(InlineMode, _super);\n function InlineMode() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], InlineMode.prototype, \"enable\", void 0);\n __decorate([\n Property(true)\n ], InlineMode.prototype, \"onSelection\", void 0);\n return InlineMode;\n}(ChildProperty));\nexport { InlineMode };\n","import { Browser, isNullOrUndefined, select, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { getScrollableParent } from '@syncfusion/ej2-popups';\nimport * as events from '../base/constant';\nimport * as classes from '../base/classes';\n/**\n * `FullScreen` module is used to maximize and minimize screen\n */\nvar FullScreen = /** @class */ (function () {\n function FullScreen(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n FullScreen.prototype.showFullScreen = function (event) {\n this.scrollableParent = getScrollableParent(this.parent.element);\n if (!this.parent.element.classList.contains(classes.CLS_FULL_SCREEN)) {\n this.parent.trigger(events.actionBegin, { requestType: 'Maximize', targetItem: 'Maximize', args: event });\n if (this.parent.toolbarSettings.enableFloating && this.parent.toolbarSettings.enable) {\n this.parent.getToolbarElement().style.width = '100%';\n this.parent.getToolbarElement().style.top = '0px';\n }\n this.parent.element.classList.add(classes.CLS_FULL_SCREEN);\n this.toggleParentOverflow(true);\n this.parent.setContentHeight();\n if (this.parent.toolbarModule) {\n if (Browser.isDevice) {\n this.parent.toolbarModule.removeFixedTBarClass();\n }\n this.parent.toolbarModule.updateItem({\n targetItem: 'Maximize',\n updateItem: 'Minimize',\n baseToolbar: this.parent.getBaseToolbarObject()\n });\n }\n this.parent.trigger(events.actionComplete, { requestType: 'Maximize', targetItem: 'Maximize', args: event });\n }\n };\n FullScreen.prototype.hideFullScreen = function (event) {\n if (this.parent.element.classList.contains(classes.CLS_FULL_SCREEN)) {\n this.parent.element.classList.remove(classes.CLS_FULL_SCREEN);\n this.parent.trigger(events.actionBegin, { requestType: 'Minimize', targetItem: 'Minimize', args: event });\n this.toggleParentOverflow(false);\n this.parent.setContentHeight();\n if (this.parent.toolbarModule) {\n this.parent.toolbarModule.updateItem({\n targetItem: 'Minimize',\n updateItem: 'Maximize',\n baseToolbar: this.parent.getBaseToolbarObject()\n });\n if (Browser.isDevice && this.parent.inlineMode.enable) {\n this.parent.toolbarModule.addFixedTBarClass();\n }\n }\n this.parent.trigger(events.actionComplete, { requestType: 'Minimize', targetItem: 'Minimize', args: event });\n }\n };\n FullScreen.prototype.toggleParentOverflow = function (isAdd) {\n if (isNullOrUndefined(this.scrollableParent)) {\n return;\n }\n var overflow = (isAdd) ? 'hidden' : '';\n for (var i = 0; i < this.scrollableParent.length; i++) {\n if (this.scrollableParent[i].nodeName === '#document') {\n setStyleAttribute(select('body', this.scrollableParent[i]), {\n overflow: overflow\n });\n }\n else {\n setStyleAttribute(this.scrollableParent[i], {\n overflow: overflow\n });\n }\n }\n };\n FullScreen.prototype.onKeyDown = function (event) {\n var originalEvent = event.args;\n switch (originalEvent.action) {\n case 'full-screen':\n this.showFullScreen(event.args);\n originalEvent.preventDefault();\n break;\n case 'escape':\n this.hideFullScreen(event.args);\n originalEvent.preventDefault();\n break;\n }\n };\n FullScreen.prototype.addEventListener = function () {\n this.parent.on(events.keyDown, this.onKeyDown, this);\n this.parent.on(events.destroy, this.destroy, this);\n };\n FullScreen.prototype.removeEventListener = function () {\n this.parent.on(events.keyDown, this.onKeyDown, this);\n this.parent.off(events.destroy, this.removeEventListener);\n };\n FullScreen.prototype.destroy = function () {\n if (this.parent.element.classList.contains(classes.CLS_FULL_SCREEN)) {\n this.toggleParentOverflow(false);\n }\n this.removeEventListener();\n };\n return FullScreen;\n}());\nexport { FullScreen };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, EventHandler, Complex, Browser, addClass, select } from '@syncfusion/ej2-base';\nimport { Property, NotifyPropertyChanges, formatUnit, L10n, closest } from '@syncfusion/ej2-base';\nimport { setStyleAttribute, Event, removeClass, print as printWindow, attributes, createElement } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, compile, append } from '@syncfusion/ej2-base';\nimport { getScrollableParent } from '@syncfusion/ej2-popups';\nimport * as events from '../base/constant';\nimport * as classes from '../base/classes';\nimport { Render } from '../renderer/render';\nimport { ViewSource } from '../renderer/view-source';\nimport { executeGroup } from './interface';\nimport { ServiceLocator } from '../services/service-locator';\nimport { RendererFactory } from '../services/renderer-factory';\nimport { RenderType, ToolbarType } from './enum';\nimport { ExecCommandCallBack } from '../actions/execute-command-callback';\nimport { KeyboardEvents } from '../actions/keyboard';\nimport { ToolbarSettings, ImageSettings, QuickToolbarSettings, FontFamily, FontSize, Format } from '../models/toolbar-settings';\nimport { FontColor, BackgroundColor } from '../models/toolbar-settings';\nimport { IFrameSettings } from '../models/iframe-settings';\nimport { InlineMode } from '../models/inline-mode';\nimport { defaultLocale } from '../models/default-locale';\nimport { setAttributes } from '../actions/html-attributes';\nimport { FullScreen } from '../actions/full-screen';\nimport * as CONSTANT from '../../common/constant';\nimport { dispatchEvent } from '../base/util';\n/**\n * Represents the RichTextEditor component.\n * ```html\n * \n * \n * ```\n */\nvar RichTextEditor = /** @class */ (function (_super) {\n __extends(RichTextEditor, _super);\n function RichTextEditor(options, element) {\n var _this = _super.call(this, options, element) || this;\n /**\n * @hidden\n */\n _this.isFocusOut = false;\n /**\n * @hidden\n */\n _this.isRTE = false;\n /**\n * @hidden\n */\n _this.isBlur = true;\n _this.needsID = true;\n return _this;\n }\n /**\n * To provide the array of modules needed for component rendering\n * @return {ModuleDeclaration[]}\n * @hidden\n */\n RichTextEditor.prototype.requiredModules = function () {\n var modules = [];\n if (this.toolbarSettings.enable) {\n modules.push({ member: 'toolbar', args: [this, this.serviceLocator] });\n modules.push({\n member: 'link',\n args: [this, this.serviceLocator]\n });\n modules.push({\n member: 'image',\n args: [this, this.serviceLocator]\n });\n }\n if (this.showCharCount) {\n modules.push({ member: 'count', args: [this, this.serviceLocator] });\n }\n if (this.editorMode === 'Markdown') {\n modules.push({ member: 'markdownEditor', args: [this, this.serviceLocator] });\n }\n if (this.editorMode === 'HTML') {\n modules.push({ member: 'htmlEditor', args: [this, this.serviceLocator] });\n }\n if (this.quickToolbarSettings.enable) {\n modules.push({ member: 'quickToolbar', args: [this, this.serviceLocator] });\n }\n return modules;\n };\n RichTextEditor.prototype.updateEnable = function () {\n if (this.enabled) {\n removeClass([this.element], classes.CLS_DISABLED);\n this.element.tabIndex = 0;\n this.element.setAttribute('aria-disabled', 'false');\n this.inputElement.setAttribute('tabindex', '0');\n }\n else {\n if (this.getToolbar()) {\n removeClass(this.getToolbar().querySelectorAll('.' + classes.CLS_ACTIVE), classes.CLS_ACTIVE);\n }\n addClass([this.element], classes.CLS_DISABLED);\n this.element.tabIndex = -1;\n this.element.setAttribute('aria-disabled', 'true');\n this.inputElement.setAttribute('tabindex', '-1');\n }\n };\n RichTextEditor.prototype.setEnable = function () {\n this.updateEnable();\n (this.enabled) ? this.eventInitializer() : this.unWireEvents();\n };\n /**\n * For internal use only - Initialize the event handler;\n * @private\n */\n RichTextEditor.prototype.preRender = function () {\n this.serviceLocator = new ServiceLocator;\n this.initializeServices();\n this.setContainer();\n setStyleAttribute(this.element, { 'width': formatUnit(this.width) });\n attributes(this.element, { role: 'application' });\n };\n RichTextEditor.prototype.setContainer = function () {\n this.originalElement = this.element.cloneNode(true);\n if (this.value === null || this.valueTemplate !== null) {\n this.setValue();\n this.element.innerHTML = '';\n }\n if (this.element.tagName === 'TEXTAREA') {\n var rteOutterWrapper = createElement('div', {\n className: 'e-control e-richtexteditor', id: this.getID()\n });\n rteOutterWrapper.innerHTML = this.element.value;\n this.element.parentElement.insertBefore(rteOutterWrapper, this.element);\n this.valueContainer = this.element;\n this.valueContainer.classList.remove('e-control', 'e-richtexteditor');\n this.valueContainer.id = this.getID() + '-value';\n this.element = rteOutterWrapper;\n }\n else {\n this.valueContainer = createElement('textarea', {\n id: this.getID() + '-value'\n });\n }\n this.valueContainer.name = this.getID();\n this.valueContainer.style.display = 'none';\n if (this.value !== null) {\n this.valueContainer.value = this.value;\n }\n this.element.appendChild(this.valueContainer);\n };\n RichTextEditor.prototype.getPersistData = function () {\n return this.addOnPersist(['value']);\n };\n /**\n * Focuses the RichTextEditor component\n * @public\n */\n RichTextEditor.prototype.focusIn = function () {\n this.inputElement.focus();\n };\n /**\n * Blurs the RichTextEditor component\n * @public\n */\n RichTextEditor.prototype.focusOut = function () {\n this.inputElement.blur();\n };\n /**\n * Selects all the content in RichTextEditor\n * @public\n */\n RichTextEditor.prototype.selectAll = function () {\n this.notify(events.selectAll, {});\n };\n /**\n * Selects a content range or an element\n * @public\n */\n RichTextEditor.prototype.selectRange = function (range) {\n this.notify(events.selectRange, { range: range });\n };\n /**\n * Retrieves the HTML markup content from currently selected content of RichTextEditor.\n * @public\n */\n RichTextEditor.prototype.getSelection = function () {\n var str = '';\n this.notify(events.getSelectedHtml, {\n callBack: function (txt) {\n str = txt;\n }\n });\n return str;\n };\n RichTextEditor.prototype.executeCommand = function (commandName, value) {\n var tool = executeGroup[commandName];\n this.formatter.editorManager.execCommand(tool.command, tool.subCommand ? tool.subCommand : (value ? value : tool.value), null, null, (value ? value : tool.value), (value ? value : tool.value));\n };\n RichTextEditor.prototype.encode = function (value) {\n var divNode = document.createElement('div');\n divNode.innerText = value.trim();\n return divNode.innerHTML.replace(//gi, '\\n');\n };\n RichTextEditor.prototype.decode = function (value) {\n return value.replace(/&/g, '&').replace(/&lt;/g, '<')\n .replace(/</g, '<').replace(/&gt;/g, '>')\n .replace(/>/g, '>').replace(/ /g, ' ')\n .replace(/&nbsp;/g, ' ').replace(/"/g, '');\n };\n /**\n * For internal use only - To Initialize the component rendering.\n * @private\n */\n RichTextEditor.prototype.render = function () {\n this.renderModule = new Render(this, this.serviceLocator);\n this.sourceCodeModule = new ViewSource(this, this.serviceLocator);\n this.notify(events.initialLoad, {});\n this.trigger(events.load);\n this.RTERender();\n var execCommandCallBack = new ExecCommandCallBack(this);\n this.notify(events.initialEnd, {});\n if (this.toolbarSettings.enable && this.toolbarSettings.type === 'Expand' && !isNOU(this.getToolbar()) &&\n (this.toolbarSettings.items.indexOf('Undo') > -1 && this.toolbarSettings.items.indexOf('Redo') > -1)) {\n this.disableToolbarItem(['Undo', 'Redo']);\n }\n this.setContentHeight();\n (this.readonly || !this.enabled) ? this.unWireEvents() : this.eventInitializer();\n };\n /**\n * For internal use only - Initialize the event handler\n * @private\n */\n RichTextEditor.prototype.eventInitializer = function () {\n this.wireEvents();\n };\n /**\n * For internal use only - keydown the event handler;\n * @private\n */\n RichTextEditor.prototype.keyDown = function (e) {\n this.notify(events.keyDown, { member: 'keydown', args: e });\n if (this.formatter.getUndoRedoStack().length === 0) {\n this.formatter.saveData();\n }\n if (e.action || e.which === 9) {\n this.formatter.process(this, null, e);\n switch (e.action) {\n case 'toolbar-focus':\n if (this.toolbarSettings.enable) {\n var selector = '.e-toolbar-item[aria-disabled=\"false\"][title] [tabindex]';\n this.toolbarModule.baseToolbar.toolbarObj.element.querySelector(selector).focus();\n }\n break;\n case 'escape':\n this.contentModule.getEditPanel().focus();\n break;\n }\n }\n if (!isNOU(this.placeholder)) {\n this.setPlaceHolder();\n }\n };\n RichTextEditor.prototype.keyUp = function (e) {\n this.notify(events.keyUp, { member: 'keyup', args: e });\n var allowedKeys = e.which === 32 || e.which === 13 || e.which === 8 || e.which === 46;\n if (((!e.shiftKey && !e.ctrlKey) && e.key.length === 1 || allowedKeys) || (this.editorMode === 'Markdown'\n && ((!e.shiftKey && !e.ctrlKey) && e.key.length === 1 || allowedKeys)) && !this.inlineMode.enable) {\n this.formatter.onKeyHandler(this, e);\n }\n if (this.inputElement && this.inputElement.textContent.length !== 0) {\n this.notify(events.toolbarRefresh, e);\n }\n if (!isNOU(this.placeholder)) {\n this.setPlaceHolder();\n }\n };\n RichTextEditor.prototype.updateValue = function (value) {\n if (isNOU(value)) {\n this.setProperties({ value: this.inputElement.innerHTML });\n }\n else {\n this.setProperties({ value: value });\n }\n };\n RichTextEditor.prototype.mouseUp = function (e) {\n this.notify(events.mouseUp, { member: 'mouseUp', args: e });\n if (this.inputElement && this.inputElement.textContent.length !== 0) {\n this.notify(events.toolbarRefresh, e);\n }\n };\n /**\n * @hidden\n */\n RichTextEditor.prototype.ensureModuleInjected = function (module) {\n return this.getInjectedModules().indexOf(module) >= 0;\n };\n RichTextEditor.prototype.onCopy = function () {\n this.contentModule.getDocument().execCommand('copy', false, null);\n };\n RichTextEditor.prototype.onCut = function () {\n this.contentModule.getDocument().execCommand('cut', false, null);\n };\n RichTextEditor.prototype.onPaste = function (e) {\n var _this = this;\n var args = { requestType: 'Paste', editorMode: this.editorMode, event: e };\n setTimeout(function () { _this.formatter.saveData(); _this.formatter.onSuccess(_this, args); }, 0);\n };\n /**\n * Destroys the component (detaches/removes all event handlers, attributes, classes, and empties the component element).\n * @method destroy\n * @return {void}\n */\n RichTextEditor.prototype.destroy = function () {\n this.notify(events.destroy, {});\n this.destroyDependentModules();\n this.unWireEvents();\n if (this.originalElement.tagName === 'TEXTAREA') {\n this.element.parentElement.insertBefore(this.valueContainer, this.element);\n this.valueContainer.id = this.getID();\n this.valueContainer.removeAttribute('name');\n this.element.remove();\n if (this.originalElement.innerHTML.trim() !== '') {\n this.valueContainer.value = this.originalElement.innerHTML.trim();\n }\n else {\n this.valueContainer.value = '';\n }\n }\n else {\n if (this.originalElement.innerHTML.trim() !== '') {\n this.element.innerHTML = this.originalElement.innerHTML.trim();\n }\n else {\n this.element.innerHTML = '';\n }\n }\n if (this.placeholder && this.placeHolderWrapper) {\n this.placeHolderWrapper.remove();\n }\n _super.prototype.destroy.call(this);\n };\n RichTextEditor.prototype.destroyDependentModules = function () {\n /* destroy dependent modules */\n this.renderModule.destroy();\n this.formatter.editorManager.undoRedoManager.destroy();\n this.sourceCodeModule.destroy();\n };\n /**\n * Returns the HTML or Text inside the RichTextEditor.\n * @return {Element}\n */\n RichTextEditor.prototype.getContent = function () {\n return this.contentModule.getPanel();\n };\n /**\n * Sets the new HTML or text inside the RichTextEditor.\n * @param {Element} element - Specifies the RichTextEditor content.\n * @return {void}\n */\n RichTextEditor.prototype.setContent = function (element) {\n this.contentModule.setPanel(element);\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n RichTextEditor.prototype.getModuleName = function () {\n return 'richtexteditor';\n };\n /**\n * Called internally if any of the property value changed.\n * @hidden\n */\n RichTextEditor.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'value':\n this.value = (this.enableHtmlEncode) ? this.encode(this.decode(newProp[prop])) : newProp[prop];\n this.updatePanelValue();\n this.setPlaceHolder();\n break;\n case 'width':\n this.setWidth(newProp[prop]);\n break;\n case 'height':\n this.setHeight(newProp[prop]);\n break;\n case 'readonly':\n this.setReadOnly();\n break;\n case 'cssClass':\n this.element.classList.remove(oldProp[prop]);\n this.setCssClass(newProp[prop]);\n break;\n case 'enabled':\n this.setEnable();\n break;\n case 'enableRtl':\n this.updateRTL();\n break;\n case 'placeholder':\n this.placeholder = newProp[prop];\n this.setPlaceHolder();\n break;\n case 'htmlAttributes':\n setAttributes(this.htmlAttributes, this, false);\n break;\n case 'iframeSettings':\n var frameSetting = oldProp[prop];\n if (frameSetting.resources) {\n var iframe = this.contentModule.getDocument();\n var header = iframe.querySelector('head');\n var files = void 0;\n if (frameSetting.resources.scripts) {\n files = header.querySelectorAll('.' + classes.CLS_SCRIPT_SHEET);\n this.removeSheets(files);\n }\n if (frameSetting.resources.styles) {\n files = header.querySelectorAll('.' + classes.CLS_STYLE_SHEET);\n this.removeSheets(files);\n }\n }\n this.setIframeSettings();\n break;\n case 'locale':\n _super.prototype.refresh.call(this);\n break;\n case 'inlineMode':\n this.notify(events.modelChanged, { module: 'quickToolbar' });\n this.setContentHeight();\n break;\n case 'toolbarSettings':\n this.notify(events.modelChanged, { module: 'toolbar' });\n this.setContentHeight();\n break;\n case 'showCharCount':\n if (newProp[prop] && this.countModule) {\n this.countModule.renderCount();\n }\n else if (newProp[prop] === false && this.countModule) {\n this.countModule.destroy();\n }\n break;\n case 'enableHtmlEncode':\n this.updateValueData();\n break;\n default:\n this.notify(events.modelChanged, { newProp: newProp, oldProp: oldProp });\n break;\n }\n }\n };\n /**\n * @hidden\n */\n RichTextEditor.prototype.updateValueData = function () {\n if (this.enableHtmlEncode) {\n this.setProperties({ value: this.encode(this.decode(this.inputElement.innerHTML)) });\n }\n else {\n this.setProperties({ value: this.decode(this.inputElement.innerHTML) });\n }\n };\n RichTextEditor.prototype.removeSheets = function (srcList) {\n var i;\n for (i = 0; i < srcList.length; i++) {\n srcList[i].remove();\n }\n };\n RichTextEditor.prototype.updatePanelValue = function () {\n var value;\n if (this.editorMode === 'HTML' && this.value) {\n value = this.value.replace(/\\n/g, '').replace(/\\>[\\t ]+\\<');\n }\n else {\n value = this.value;\n }\n value = (this.enableHtmlEncode && this.value) ? this.decode(value) : value;\n if (value) {\n if (this.valueContainer) {\n this.valueContainer.value = (this.enableHtmlEncode) ? this.value : value;\n }\n if (this.inputElement && this.inputElement.innerHTML.trim() !== value.trim()) {\n this.inputElement.innerHTML = value;\n }\n }\n else {\n if (this.editorMode === 'HTML') {\n this.inputElement.innerHTML = '


    ';\n }\n if (this.valueContainer) {\n this.valueContainer.value = '';\n }\n }\n };\n RichTextEditor.prototype.setHeight = function (height) {\n if (height !== 'auto') {\n this.element.style.height = formatUnit(height);\n }\n else {\n this.element.style.height = 'auto';\n }\n };\n RichTextEditor.prototype.setPlaceHolder = function () {\n if (this.inputElement && this.placeholder && this.iframeSettings.enable !== true) {\n if (!this.placeHolderWrapper) {\n this.placeHolderWrapper = createElement('span', { className: 'rte-placeholder' });\n if (this.inputElement) {\n this.inputElement.parentElement.insertBefore(this.placeHolderWrapper, this.inputElement);\n }\n attributes(this.placeHolderWrapper, {\n 'style': 'font-size: 16px; padding: 16px; margin-left: 0px; margin-right: 0px;'\n });\n }\n this.placeHolderWrapper.innerHTML = this.placeholder;\n if (this.inputElement.textContent.length !== 0) {\n this.placeHolderWrapper.style.display = 'none';\n }\n else {\n this.placeHolderWrapper.style.display = 'block';\n }\n }\n };\n RichTextEditor.prototype.setWidth = function (width) {\n if (width !== 'auto') {\n setStyleAttribute(this.element, { 'width': formatUnit(this.width) });\n }\n else {\n this.element.style.width = 'auto';\n }\n };\n RichTextEditor.prototype.setCssClass = function (cssClass) {\n if (!isNOU(cssClass)) {\n this.element.classList.add(cssClass);\n }\n };\n RichTextEditor.prototype.updateRTL = function () {\n if (this.enableRtl) {\n this.element.classList.add(classes.CLS_RTL);\n }\n else {\n this.element.classList.remove(classes.CLS_RTL);\n }\n };\n RichTextEditor.prototype.updateReadOnly = function () {\n if (this.editorMode !== 'Markdown') {\n if (this.readonly) {\n attributes(this.inputElement, { contenteditable: 'false' });\n addClass([this.element], classes.CLS_RTE_READONLY);\n }\n else {\n attributes(this.inputElement, { contenteditable: 'true' });\n removeClass([this.element], classes.CLS_RTE_READONLY);\n }\n }\n };\n RichTextEditor.prototype.setReadOnly = function () {\n this.updateReadOnly();\n (this.readonly) ? this.unWireEvents() : this.eventInitializer();\n };\n /**\n * By default, prints all the pages of the RichTextEditor.\n * @return {void}\n */\n RichTextEditor.prototype.print = function () {\n var printWind;\n var printArgs = {\n element: this.inputElement,\n requestType: 'print',\n cancel: false\n };\n this.trigger(events.actionBegin, printArgs);\n printWind = window.open('', 'print', 'height=' + window.outerHeight + ',width=' + window.outerWidth);\n if (Browser.info.name === 'msie') {\n printWind.resizeTo(screen.availWidth, screen.availHeight);\n }\n printWind = printWindow(this.inputElement, printWind);\n if (printArgs.cancel) {\n return;\n }\n var actionArgs = {\n requestType: 'print'\n };\n this.trigger(events.actionComplete, actionArgs);\n };\n /**\n * Applies all the pending property changes and render the component again.\n * @public\n */\n RichTextEditor.prototype.refresh = function () {\n this.renderModule.refresh();\n };\n /**\n * Shows the RichTextEditor component in full-screen mode.\n */\n RichTextEditor.prototype.showFullScreen = function () {\n if (this.readonly) {\n return;\n }\n this.fullScreenModule.showFullScreen();\n };\n /**\n * Enables the give toolbar items in the RichTextEditor component.\n * @public\n */\n RichTextEditor.prototype.enableToolbarItem = function (items) {\n this.toolbarModule.enableTBarItems(this.getBaseToolbarObject(), items, true);\n };\n /**\n * Disables the given toolbar items in the RichTextEditor component.\n * @public\n */\n RichTextEditor.prototype.disableToolbarItem = function (items) {\n this.toolbarModule.enableTBarItems(this.getBaseToolbarObject(), items, false);\n };\n /**\n * Removes the give toolbar items from the RichTextEditor component.\n * @public\n */\n RichTextEditor.prototype.removeToolbarItem = function (items) {\n this.toolbarModule.removeTBarItems(items);\n };\n /**\n * Get the selected range from the RichTextEditor's content.\n * @public\n */\n RichTextEditor.prototype.getRange = function () {\n return this.formatter.editorManager.nodeSelection.getRange(this.contentModule.getDocument());\n };\n RichTextEditor.prototype.initializeServices = function () {\n this.serviceLocator.register('rendererFactory', new RendererFactory);\n this.serviceLocator.register('rteLocale', this.localeObj = new L10n(this.getModuleName(), defaultLocale, this.locale));\n };\n RichTextEditor.prototype.RTERender = function () {\n var rendererFactory = this.serviceLocator.getService('rendererFactory');\n this.contentModule = rendererFactory.getRenderer(RenderType.Content);\n this.fullScreenModule = new FullScreen(this);\n this.renderModule.render();\n this.inputElement = this.contentModule.getEditPanel();\n this.setHeight(this.height);\n setAttributes(this.htmlAttributes, this, false);\n if (this.iframeSettings) {\n this.setIframeSettings();\n }\n this.setCssClass(this.cssClass);\n this.updateEnable();\n this.setPlaceHolder();\n this.updateRTL();\n this.updateReadOnly();\n this.updatePanelValue();\n if (this.enableHtmlEncode) {\n this.setProperties({ value: this.encode(this.decode(this.value)) });\n }\n };\n RichTextEditor.prototype.setIframeSettings = function () {\n if (this.iframeSettings.resources) {\n var styleSrc = this.iframeSettings.resources.styles;\n var scriptSrc = this.iframeSettings.resources.scripts;\n if (this.iframeSettings.resources.scripts.length > 0) {\n this.InjectSheet(true, scriptSrc);\n }\n if (this.iframeSettings.resources.styles.length > 0) {\n this.InjectSheet(false, styleSrc);\n }\n }\n if (this.iframeSettings.attributes) {\n setAttributes(this.iframeSettings.attributes, this, true);\n }\n };\n RichTextEditor.prototype.InjectSheet = function (scriptSheet, srcList) {\n try {\n if (srcList && srcList.length > 0) {\n var iFrame = this.contentModule.getDocument();\n var target = iFrame.querySelector('head');\n for (var i = 0; i < srcList.length; i++) {\n if (scriptSheet) {\n var scriptEle = this.createScriptElement();\n scriptEle.src = srcList[i];\n target.appendChild(scriptEle);\n }\n else {\n var styleEle = this.createStyleElement();\n styleEle.href = srcList[i];\n target.appendChild(styleEle);\n }\n }\n }\n }\n catch (e) {\n return;\n }\n };\n RichTextEditor.prototype.createScriptElement = function () {\n var scriptEle = createElement('script', {\n className: classes.CLS_SCRIPT_SHEET\n });\n scriptEle.type = 'text/javascript';\n return scriptEle;\n };\n RichTextEditor.prototype.createStyleElement = function () {\n var styleEle = createElement('link', {\n className: classes.CLS_STYLE_SHEET\n });\n styleEle.rel = 'stylesheet';\n return styleEle;\n };\n RichTextEditor.prototype.setValue = function () {\n if (this.valueTemplate) {\n if (typeof this.valueTemplate === 'string') {\n this.setProperties({ value: this.valueTemplate });\n }\n else {\n var compiledString = void 0;\n compiledString = compile(this.valueTemplate);\n var compiledTemplate = compiledString({});\n for (var i = 0; i < compiledTemplate.length; i++) {\n var item = compiledTemplate[i];\n append([item], this.element);\n }\n this.setProperties({ value: this.element.innerHTML.trim() });\n }\n }\n else if (this.element.innerHTML.trim() !== '') {\n this.setProperties({ value: this.element.innerHTML.trim() });\n }\n };\n RichTextEditor.prototype.setContentHeight = function (target, isExpand) {\n var heightValue;\n var topValue = 0;\n var cntEle = (this.sourceCodeModule.getPanel() &&\n this.sourceCodeModule.getPanel().parentElement.style.display === 'block') ? this.sourceCodeModule.getPanel().parentElement :\n this.contentModule.getPanel();\n var rteHeight = this.element.offsetHeight;\n var tbHeight = this.getToolbar() ? this.toolbarModule.getToolbarHeight() : 0;\n var expandPopHeight = this.getToolbar() ? this.toolbarModule.getExpandTBarPopHeight() : 0;\n if (this.toolbarSettings.type === ToolbarType.Expand && isExpand && target !== 'preview') {\n heightValue = (this.height === 'auto') ? 'auto' : rteHeight - (tbHeight + expandPopHeight) + 'px';\n topValue = (!this.toolbarSettings.enableFloating) ? expandPopHeight : 0;\n }\n else {\n if (this.height === 'auto') {\n heightValue = (this.element.classList.contains('e-rte-full-screen')) ? '100%' : 'auto';\n }\n else {\n heightValue = rteHeight - tbHeight + 'px';\n }\n }\n setStyleAttribute(cntEle, { height: heightValue, marginTop: topValue + 'px' });\n if (this.iframeSettings.enable && target === 'sourceCode') {\n var codeElement = select('.' + classes.CLS_RTE_CONTENT, this.element);\n setStyleAttribute(codeElement, { height: heightValue, marginTop: topValue + 'px' });\n }\n if (this.toolbarSettings.enableFloating && this.getToolbar() && !this.inlineMode.enable) {\n if (isExpand) {\n setStyleAttribute(this.getToolbar().parentElement, { height: (tbHeight + expandPopHeight) + 'px' });\n }\n else {\n setStyleAttribute(this.getToolbar().parentElement, { height: tbHeight + 'px' });\n }\n }\n };\n /**\n * Retrieves the HTML from RichTextEditor.\n * @public\n */\n RichTextEditor.prototype.getHtml = function () {\n return this.value;\n };\n /**\n * Shows the source HTML/MD markup.\n * @public\n */\n RichTextEditor.prototype.showSourceCode = function () {\n if (this.readonly) {\n return;\n }\n this.notify(events.sourceCode, {});\n };\n /**\n * @hidden\n */\n RichTextEditor.prototype.getBaseToolbarObject = function () {\n var tbObj;\n if (this.inlineMode.enable && !Browser.isDevice) {\n tbObj = this.quickToolbarModule && this.quickToolbarModule.getInlineBaseToolbar();\n }\n else {\n tbObj = this.toolbarModule && this.toolbarModule.getBaseToolbar();\n }\n return tbObj;\n };\n /**\n * @hidden\n */\n RichTextEditor.prototype.getToolbar = function () {\n return this.toolbarModule ? this.toolbarModule.getToolbarElement() : null;\n };\n /**\n * @hidden\n */\n RichTextEditor.prototype.getToolbarElement = function () {\n return this.toolbarModule && this.toolbarModule.getToolbarElement();\n };\n RichTextEditor.prototype.getID = function () {\n return this.element.id;\n };\n RichTextEditor.prototype.mouseDownHandler = function (e) {\n addClass([this.element], [classes.CLS_FOCUS]);\n this.preventDefaultResize(e);\n this.notify(events.mouseDown, {});\n };\n RichTextEditor.prototype.preventImgResize = function (e) {\n if (e.target.nodeName.toLocaleLowerCase() === 'img') {\n e.preventDefault();\n }\n };\n RichTextEditor.prototype.preventDefaultResize = function (e) {\n if (Browser.info.name === 'msie') {\n this.contentModule.getEditPanel().addEventListener('mscontrolselect', this.preventImgResize);\n }\n else if (Browser.info.name === 'mozilla') {\n this.contentModule.getDocument().execCommand('enableObjectResizing', false, 'false');\n this.contentModule.getDocument().execCommand('enableInlineTableEditing', false, 'false');\n }\n };\n RichTextEditor.prototype.defaultResize = function (e) {\n if (Browser.info.name === 'msie') {\n this.contentModule.getEditPanel().removeEventListener('mscontrolselect', this.preventImgResize);\n }\n else if (Browser.info.name === 'mozilla') {\n this.contentModule.getDocument().execCommand('enableObjectResizing', true, 'true');\n this.contentModule.getDocument().execCommand('enableInlineTableEditing', true, 'true');\n }\n };\n RichTextEditor.prototype.resizeHandler = function () {\n var isExpand = (this.toolbarSettings.type === ToolbarType.Expand) ? true : false;\n this.setContentHeight('', isExpand);\n };\n RichTextEditor.prototype.scrollHandler = function (e) {\n this.notify(events.scroll, { args: e });\n };\n RichTextEditor.prototype.editAreaClickHandler = function (e) {\n this.notify(events.editAreaClick, { member: 'editAreaClick', args: e });\n };\n RichTextEditor.prototype.focusHandler = function (e) {\n if (!this.isRTE || this.isFocusOut) {\n this.isRTE = this.isFocusOut ? false : true;\n this.isFocusOut = false;\n addClass([this.element], [classes.CLS_FOCUS]);\n if (this.editorMode === 'HTML') {\n this.cloneValue = (this.inputElement.innerHTML === '


    ') ? null : this.inputElement.innerHTML;\n }\n else {\n this.cloneValue = this.inputElement.value === '' ? null :\n this.inputElement.value;\n }\n if (document.activeElement === this.element) {\n this.contentModule.getEditPanel().focus();\n }\n this.preventDefaultResize(e);\n this.trigger('focus');\n EventHandler.add(document, 'mousedown', this.onDocumentClick, this);\n }\n };\n RichTextEditor.prototype.onDocumentClick = function (e) {\n var target = e.target;\n if (!this.element.contains(e.target) && document !== e.target && !closest(target, '.' + classes.CLS_RTE) &&\n !closest(target, '.' + classes.CLS_RTE_ELEMENTS)) {\n this.isBlur = true;\n this.isRTE = false;\n }\n };\n RichTextEditor.prototype.blurHandler = function (e) {\n var trg = e.relatedTarget;\n if (trg) {\n if (closest(trg, '.' + classes.CLS_RTE)) {\n this.isBlur = false;\n }\n else if (closest(trg, '.' + classes.CLS_RTE_ELEMENTS)) {\n this.isBlur = false;\n }\n else {\n this.isBlur = true;\n trg = null;\n }\n }\n if (this.isBlur && isNOU(trg)) {\n removeClass([this.element], [classes.CLS_FOCUS]);\n this.notify(events.focusChange, {});\n if (this.editorMode === 'HTML') {\n this.value = (this.inputElement.innerHTML === '


    ') ? null : this.inputElement.innerHTML;\n }\n else {\n this.value = this.inputElement.value === '' ? null :\n this.inputElement.value;\n }\n this.valueContainer.value = this.value;\n this.invokeChangeEvent();\n this.isFocusOut = true;\n this.isBlur = false;\n dispatchEvent(this.valueContainer, 'focusout');\n this.defaultResize(e);\n this.trigger('blur');\n EventHandler.remove(document, 'mousedown', this.onDocumentClick);\n }\n else {\n this.isRTE = true;\n }\n };\n RichTextEditor.prototype.invokeChangeEvent = function () {\n var eventArgs = {\n value: this.value\n };\n if (this.value !== this.cloneValue) {\n this.trigger('change', eventArgs);\n this.cloneValue = this.value;\n }\n };\n /**\n * @hidden\n */\n RichTextEditor.prototype.wireScrollElementsEvents = function () {\n this.scrollParentElements = getScrollableParent(this.element);\n for (var _i = 0, _a = this.scrollParentElements; _i < _a.length; _i++) {\n var element = _a[_i];\n EventHandler.add(element, 'scroll', this.scrollHandler, this);\n }\n };\n /**\n * @hidden\n */\n RichTextEditor.prototype.unWireScrollElementsEvents = function () {\n this.scrollParentElements = getScrollableParent(this.element);\n for (var _i = 0, _a = this.scrollParentElements; _i < _a.length; _i++) {\n var element = _a[_i];\n EventHandler.remove(element, 'scroll', this.scrollHandler);\n }\n };\n RichTextEditor.prototype.resetHandler = function () {\n this.value = null;\n };\n RichTextEditor.prototype.wireEvents = function () {\n this.keyboardModule = new KeyboardEvents(this.inputElement, {\n keyAction: this.keyDown.bind(this), keyConfigs: this.formatter.keyConfig, eventName: 'keydown'\n });\n var formElement = closest(this.valueContainer, 'form');\n if (formElement) {\n EventHandler.add(formElement, 'reset', this.resetHandler, this);\n }\n EventHandler.add(this.inputElement, 'keyup', this.keyUp, this);\n EventHandler.add(this.inputElement, 'paste', this.onPaste, this);\n EventHandler.add(this.inputElement, 'mouseup', this.mouseUp, this);\n EventHandler.add(this.inputElement, 'mousedown', this.mouseDownHandler, this);\n EventHandler.add(this.inputElement, 'click', this.editAreaClickHandler, this);\n this.formatter.editorManager.observer.on(CONSTANT.KEY_DOWN_HANDLER, this.editorKeyDown, this);\n this.element.addEventListener('focusin', this.focusHandler.bind(this), true);\n this.element.addEventListener('focusout', this.blurHandler.bind(this), true);\n window.addEventListener('resize', this.resizeHandler.bind(this), true);\n if (this.iframeSettings.enable) {\n EventHandler.add(this.inputElement, 'focusin', this.focusHandler, this);\n EventHandler.add(this.inputElement, 'focusout', this.blurHandler, this);\n EventHandler.add(this.inputElement.ownerDocument, 'mousedown', this.onIframeMouseDown, this);\n }\n this.wireScrollElementsEvents();\n };\n RichTextEditor.prototype.onIframeMouseDown = function (e) {\n this.isBlur = false;\n this.notify(events.iframeMouseDown, e);\n };\n RichTextEditor.prototype.editorKeyDown = function (e) {\n switch (e.event.action) {\n case 'copy':\n this.onCopy();\n break;\n case 'cut':\n this.onCut();\n break;\n }\n if (e.callBack && (e.event.action === 'copy' || e.event.action === 'cut')) {\n e.callBack({\n requestType: e.event.action,\n editorMode: 'HTML',\n event: e.event\n });\n }\n };\n RichTextEditor.prototype.unWireEvents = function () {\n if (this.keyboardModule) {\n this.keyboardModule.destroy();\n }\n var formElement = closest(this.valueContainer, 'form');\n if (formElement) {\n EventHandler.remove(formElement, 'reset', this.resetHandler);\n }\n EventHandler.remove(this.inputElement, 'keyup', this.keyUp);\n EventHandler.remove(this.inputElement, 'paste', this.onPaste);\n EventHandler.remove(this.inputElement, 'mouseup', this.mouseUp);\n EventHandler.remove(this.inputElement, 'mousedown', this.mouseDownHandler);\n EventHandler.remove(this.inputElement, 'click', this.editAreaClickHandler);\n if (this.formatter) {\n this.formatter.editorManager.observer.off(CONSTANT.KEY_DOWN_HANDLER, this.editorKeyDown);\n }\n this.element.removeEventListener('focusin', this.focusHandler.bind(this), false);\n this.element.removeEventListener('focusout', this.blurHandler.bind(this), false);\n window.removeEventListener('resize', this.resizeHandler.bind(this), false);\n if (this.iframeSettings.enable) {\n EventHandler.remove(this.inputElement, 'focusin', this.focusHandler);\n EventHandler.remove(this.inputElement, 'focusout', this.blurHandler);\n EventHandler.remove(this.inputElement.ownerDocument, 'mousedown', this.onIframeMouseDown);\n }\n this.unWireScrollElementsEvents();\n };\n __decorate([\n Complex({}, ToolbarSettings)\n ], RichTextEditor.prototype, \"toolbarSettings\", void 0);\n __decorate([\n Complex({}, QuickToolbarSettings)\n ], RichTextEditor.prototype, \"quickToolbarSettings\", void 0);\n __decorate([\n Complex({}, IFrameSettings)\n ], RichTextEditor.prototype, \"iframeSettings\", void 0);\n __decorate([\n Complex({}, ImageSettings)\n ], RichTextEditor.prototype, \"insertImageSettings\", void 0);\n __decorate([\n Property(0)\n ], RichTextEditor.prototype, \"floatingToolbarOffset\", void 0);\n __decorate([\n Complex({}, InlineMode)\n ], RichTextEditor.prototype, \"inlineMode\", void 0);\n __decorate([\n Property('100%')\n ], RichTextEditor.prototype, \"width\", void 0);\n __decorate([\n Property(false)\n ], RichTextEditor.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(false)\n ], RichTextEditor.prototype, \"enableRtl\", void 0);\n __decorate([\n Property({})\n ], RichTextEditor.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(null)\n ], RichTextEditor.prototype, \"placeholder\", void 0);\n __decorate([\n Property(false)\n ], RichTextEditor.prototype, \"readonly\", void 0);\n __decorate([\n Property(true)\n ], RichTextEditor.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], RichTextEditor.prototype, \"enableHtmlEncode\", void 0);\n __decorate([\n Property('auto')\n ], RichTextEditor.prototype, \"height\", void 0);\n __decorate([\n Property(null)\n ], RichTextEditor.prototype, \"cssClass\", void 0);\n __decorate([\n Property(null)\n ], RichTextEditor.prototype, \"value\", void 0);\n __decorate([\n Property(30)\n ], RichTextEditor.prototype, \"undoRedoSteps\", void 0);\n __decorate([\n Property(300)\n ], RichTextEditor.prototype, \"undoRedoTimer\", void 0);\n __decorate([\n Property('HTML')\n ], RichTextEditor.prototype, \"editorMode\", void 0);\n __decorate([\n Property(null)\n ], RichTextEditor.prototype, \"keyConfig\", void 0);\n __decorate([\n Property(false)\n ], RichTextEditor.prototype, \"showCharCount\", void 0);\n __decorate([\n Property(false)\n ], RichTextEditor.prototype, \"enableTabKey\", void 0);\n __decorate([\n Property(-1)\n ], RichTextEditor.prototype, \"maxLength\", void 0);\n __decorate([\n Complex({}, Format)\n ], RichTextEditor.prototype, \"format\", void 0);\n __decorate([\n Complex({}, FontFamily)\n ], RichTextEditor.prototype, \"fontFamily\", void 0);\n __decorate([\n Complex({}, FontSize)\n ], RichTextEditor.prototype, \"fontSize\", void 0);\n __decorate([\n Complex({}, FontColor)\n ], RichTextEditor.prototype, \"fontColor\", void 0);\n __decorate([\n Complex({}, BackgroundColor)\n ], RichTextEditor.prototype, \"backgroundColor\", void 0);\n __decorate([\n Property(null)\n ], RichTextEditor.prototype, \"valueTemplate\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"actionComplete\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"toolbarClick\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"change\", void 0);\n __decorate([\n Property(null)\n ], RichTextEditor.prototype, \"formatter\", void 0);\n RichTextEditor = __decorate([\n NotifyPropertyChanges\n ], RichTextEditor);\n return RichTextEditor;\n}(Component));\nexport { RichTextEditor };\n","import * as index from '@syncfusion/ej2-richtexteditor';\nindex.RichTextEditor.Inject( index.Toolbar,index.Link,index.Image,index.Count,index.QuickToolbar,index.HtmlEditor,index.MarkdownEditor);\nexport * from '@syncfusion/ej2-richtexteditor';\n","/**\n * Constants\n */\n/** @hidden */\nexport var cellClick = 'cellClick';\n/** @hidden */\nexport var cellDoubleClick = 'cellDoubleClick';\n/** @hidden */\nexport var actionBegin = 'actionBegin';\n/** @hidden */\nexport var actionComplete = 'actionComplete';\n/** @hidden */\nexport var actionFailure = 'actionFailure';\n/** @hidden */\nexport var navigating = 'navigating';\n/** @hidden */\nexport var renderCell = 'renderCell';\n/** @hidden */\nexport var eventClick = 'eventClick';\n/** @hidden */\nexport var eventRendered = 'eventRendered';\n/** @hidden */\nexport var dataBinding = 'dataBinding';\n/** @hidden */\nexport var dataBound = 'dataBound';\n/** @hidden */\nexport var popupOpen = 'popupOpen';\n/**\n * Specifies schedule internal events\n */\n/** @hidden */\nexport var initialLoad = 'initial-load';\n/** @hidden */\nexport var initialEnd = 'initial-end';\n/** @hidden */\nexport var dataReady = 'data-ready';\n/** @hidden */\nexport var contentReady = 'content-ready';\n/** @hidden */\nexport var scroll = 'scroll';\n/** @hidden */\nexport var scrollUiUpdate = 'scroll-ui-update';\n/** @hidden */\nexport var uiUpdate = 'ui-update';\n/** @hidden */\nexport var documentClick = 'document-click';\n/** @hidden */\nexport var cellMouseDown = 'cell-mouse-down';\n/** @hidden */\nexport var tapHoldReady = 'tap-hold-ready';\n","/**\n * CSS Constants\n */\n/** @hidden */\nexport var ROOT = 'e-schedule';\n/** @hidden */\nexport var RTL = 'e-rtl';\n/** @hidden */\nexport var DEVICE_CLASS = 'e-device';\n/** @hidden */\nexport var ICON = 'e-icons';\n/** @hidden */\nexport var ENABLE_CLASS = 'e-enable';\n/** @hidden */\nexport var DISABLE_CLASS = 'e-disable';\n/** @hidden */\nexport var TABLE_CONTAINER_CLASS = 'e-table-container';\n/** @hidden */\nexport var SCHEDULE_TABLE_CLASS = 'e-schedule-table';\n/** @hidden */\nexport var ALLDAY_CELLS_CLASS = 'e-all-day-cells';\n/** @hidden */\nexport var HEADER_POPUP_CLASS = 'e-header-popup';\n/** @hidden */\nexport var HEADER_CALENDAR_CLASS = 'e-header-calendar';\n/** @hidden */\nexport var ALLDAY_ROW_CLASS = 'e-all-day-row';\n/** @hidden */\nexport var CONTENT_TABLE_CLASS = 'e-content-table';\n/** @hidden */\nexport var WORK_CELLS_CLASS = 'e-work-cells';\n/** @hidden */\nexport var WORK_HOURS_CLASS = 'e-work-hours';\n/** @hidden */\nexport var POPUP_OPEN = 'e-popup-open';\n/** @hidden */\nexport var DATE_HEADER_WRAP_CLASS = 'e-date-header-wrap';\n/** @hidden */\nexport var DATE_HEADER_CONTAINER_CLASS = 'e-date-header-container';\n/** @hidden */\nexport var HEADER_CELLS_CLASS = 'e-header-cells';\n/** @hidden */\nexport var WORKDAY_CLASS = 'e-work-days';\n/** @hidden */\nexport var OTHERMONTH_CLASS = 'e-other-month';\n/** @hidden */\nexport var CURRENT_DAY_CLASS = 'e-current-day';\n/** @hidden */\nexport var CURRENTDATE_CLASS = 'e-current-date';\n/** @hidden */\nexport var CURRENT_PANEL_CLASS = 'e-current-panel';\n/** @hidden */\nexport var PREVIOUS_PANEL_CLASS = 'e-previous-panel';\n/** @hidden */\nexport var NEXT_PANEL_CLASS = 'e-next-panel';\n/** @hidden */\nexport var TRANSLATE_CLASS = 'e-translate';\n/** @hidden */\nexport var LEFT_INDENT_CLASS = 'e-left-indent';\n/** @hidden */\nexport var LEFT_INDENT_WRAP_CLASS = 'e-left-indent-wrap';\n/** @hidden */\nexport var TIME_CELLS_WRAP_CLASS = 'e-time-cells-wrap';\n/** @hidden */\nexport var TIME_CELLS_CLASS = 'e-time-cells';\n/** @hidden */\nexport var ALTERNATE_CELLS_CLASS = 'e-alternate-cells';\n/** @hidden */\nexport var CURRENT_TIME_CLASS = 'e-current-time';\n/** @hidden */\nexport var CURRENT_TIMELINE_CLASS = 'e-current-timeline';\n/** @hidden */\nexport var PREVIOUS_TIMELINE_CLASS = 'e-previous-timeline';\n/** @hidden */\nexport var HIDE_CHILDS_CLASS = 'e-hide-childs';\n/** @hidden */\nexport var SCROLL_CONTAINER_CLASS = 'e-scroll-container';\n/** @hidden */\nexport var WRAPPER_CLASS = 'e-wrapper';\n/** @hidden */\nexport var TIMELINE_WRAPPER_CLASS = 'e-timeline-wrapper';\n/** @hidden */\nexport var APPOINTMENT_WRAPPER_CLASS = 'e-appointment-wrapper';\n/** @hidden */\nexport var DAY_WRAPPER_CLASS = 'e-day-wrapper';\n/** @hidden */\nexport var TOOLBAR_CONTAINER = 'e-schedule-toolbar-container';\n/** @hidden */\nexport var RESOURCE_TOOLBAR_CONTAINER = 'e-schedule-resource-toolbar-container';\n/** @hidden */\nexport var HEADER_TOOLBAR = 'e-schedule-toolbar';\n/** @hidden */\nexport var RESOURCE_HEADER_TOOLBAR = 'e-schedule-resource-toolbar';\n/** @hidden */\nexport var SELECTED_CELL_CLASS = 'e-selected-cell';\n/** @hidden */\nexport var APPOINTMENT_WRAP_CLASS = 'e-appointment-wrap';\n/** @hidden */\nexport var WRAPPER_CONTAINER_CLASS = 'e-wrapper-container';\n/** @hidden */\nexport var APPOINTMENT_CONTAINER_CLASS = 'e-appointment-container';\n/** @hidden */\nexport var APPOINTMENT_CLASS = 'e-appointment';\n/** @hidden */\nexport var APPOINTMENT_BORDER = 'e-appointment-border';\n/** @hidden */\nexport var APPOINTMENT_DETAILS = 'e-appointment-details';\n/** @hidden */\nexport var SUBJECT_WRAP = 'e-subject-wrap';\n/** @hidden */\nexport var RESOURCE_NAME = 'e-resource-name';\n/** @hidden */\nexport var APPOINTMENT_TIME = 'e-time';\n/** @hidden */\nexport var TABLE_WRAP_CLASS = 'e-table-wrap';\n/** @hidden */\nexport var OUTER_TABLE_CLASS = 'e-outer-table';\n/** @hidden */\nexport var CONTENT_WRAP_CLASS = 'e-content-wrap';\n/** @hidden */\nexport var AGENDA_CELLS_CLASS = 'e-agenda-cells';\n/** @hidden */\nexport var AGENDA_CURRENT_DAY_CLASS = 'e-current-day';\n/** @hidden */\nexport var AGENDA_SELECTED_CELL = 'e-active-appointment-agenda';\n/** @hidden */\nexport var AGENDA_MONTH_HEADER_CLASS = 'e-month-header';\n/** @hidden */\nexport var AGENDA_HEADER_CLASS = 'e-day-date-header';\n/** @hidden */\nexport var AGENDA_RESOURCE_CLASS = 'e-resource-column';\n/** @hidden */\nexport var AGENDA_DATE_CLASS = 'e-date-column';\n/** @hidden */\nexport var NAVIGATE_CLASS = 'e-navigate';\n/** @hidden */\nexport var DATE_HEADER_CLASS = 'e-date-header';\n/** @hidden */\nexport var DAY_HEADER_CLASS = 'e-day-header';\n/** @hidden */\nexport var AGENDA_HIDDEN_CLASS = 'e-item-hide';\n/** @hidden */\nexport var AGENDA_ALIGN_CLASS = 'e-item-align';\n/** @hidden */\nexport var AGENDA_DAY_BORDER_CLASS = 'e-day-border';\n/** @hidden */\nexport var DATE_BORDER_CLASS = 'e-date-border';\n/** @hidden */\nexport var AGENDA_DAY_PADDING_CLASS = 'e-day-padding';\n/** @hidden */\nexport var DATE_TIME_CLASS = 'e-date-time';\n/** @hidden */\nexport var DATE_TIME_WRAPPER_CLASS = 'e-date-time-wrapper';\n/** @hidden */\nexport var AGENDA_EMPTY_EVENT_CLASS = 'e-empty-event';\n/** @hidden */\nexport var AGENDA_NO_EVENT_CLASS = 'e-no-event';\n/** @hidden */\nexport var APPOINTMENT_INDICATOR_CLASS = 'e-appointment-indicator';\n/** @hidden */\nexport var EVENT_INDICATOR_CLASS = 'e-indicator';\n/** @hidden */\nexport var EVENT_ICON_UP_CLASS = 'e-up-icon';\n/** @hidden */\nexport var EVENT_ICON_DOWN_CLASS = 'e-down-icon';\n/** @hidden */\nexport var EVENT_ICON_LEFT_CLASS = 'e-left-icon';\n/** @hidden */\nexport var EVENT_ICON_RIGHT_CLASS = 'e-right-icon';\n/** @hidden */\nexport var EVENT_RECURRENCE_ICON_CLASS = 'e-recurrence-icon';\n/** @hidden */\nexport var EVENT_RECURRENCE_EDIT_ICON_CLASS = 'e-recurrence-edit-icon';\n/** @hidden */\nexport var HEADER_ROW_CLASS = 'e-header-row';\n/** @hidden */\nexport var ALLDAY_APPOINTMENT_WRAPPER_CLASS = 'e-all-day-appointment-wrapper';\n/** @hidden */\nexport var ALLDAY_APPOINTMENT_CLASS = 'e-all-day-appointment';\n/** @hidden */\nexport var EVENT_COUNT_CLASS = 'e-appointment-hide';\n/** @hidden */\nexport var ROW_COUNT_WRAPPER_CLASS = 'e-row-count-wrapper';\n/** @hidden */\nexport var ALLDAY_APPOINTMENT_SECTION_CLASS = 'e-all-day-appointment-section';\n/** @hidden */\nexport var APPOINTMENT_ROW_EXPAND_CLASS = 'e-appointment-expand';\n/** @hidden */\nexport var APPOINTMENT_ROW_COLLAPSE_CLASS = 'e-appointment-collapse';\n/** @hidden */\nexport var MORE_INDICATOR_CLASS = 'e-more-indicator';\n/** @hidden */\nexport var SCHEDULE_INNER_CLASS = 'e-schedule-inner';\n/** @hidden */\nexport var QUICK_POPUP_ROOT_CLASS = 'e-schedule-quick-popup';\n/** @hidden */\nexport var CELL_POPUP_CLASS = 'e-cell-popup';\n/** @hidden */\nexport var EVENT_POPUP_CLASS = 'e-event-popup';\n/** @hidden */\nexport var MULTIPLE_EVENT_POPUP_CLASS = 'e-multiple-event-popup';\n/** @hidden */\nexport var POPUP_HEADER_CLASS = 'e-popup-header';\n/** @hidden */\nexport var POPUP_HEADER_ICON_WRAPPER = 'e-header-icon-wrapper';\n/** @hidden */\nexport var POPUP_CONTENT_CLASS = 'e-popup-content';\n/** @hidden */\nexport var POPUP_FOOTER_CLASS = 'e-popup-footer';\n/** @hidden */\nexport var DATE_TIME_DETAILS_CLASS = 'e-date-time-details';\n/** @hidden */\nexport var RECURRENCE_SUMMARY_CLASS = 'e-recurrence-summary';\n/** @hidden */\nexport var QUICK_POPUP_EVENT_DETAILS_CLASS = 'e-event-details';\n/** @hidden */\nexport var EVENT_CREATE_CLASS = 'e-event-create';\n/** @hidden */\nexport var EDIT_EVENT_CLASS = 'e-event-edit';\n/** @hidden */\nexport var DELETE_EVENT_CLASS = 'e-event-delete';\n/** @hidden */\nexport var TEXT_ELLIPSIS = 'e-text-ellipsis';\n/** @hidden */\nexport var MORE_POPUP_WRAPPER_CLASS = 'e-more-popup-wrapper';\n/** @hidden */\nexport var MORE_EVENT_POPUP_CLASS = 'e-more-event-popup';\n/** @hidden */\nexport var MORE_EVENT_HEADER_CLASS = 'e-more-event-header';\n/** @hidden */\nexport var MORE_EVENT_DATE_HEADER_CLASS = 'e-more-event-date-header';\n/** @hidden */\nexport var MORE_EVENT_HEADER_DAY_CLASS = 'e-header-day';\n/** @hidden */\nexport var MORE_EVENT_HEADER_DATE_CLASS = 'e-header-date';\n/** @hidden */\nexport var MORE_EVENT_CLOSE_CLASS = 'e-more-event-close';\n/** @hidden */\nexport var MORE_EVENT_CONTENT_CLASS = 'e-more-event-content';\n/** @hidden */\nexport var MORE_EVENT_WRAPPER_CLASS = 'e-more-appointment-wrapper';\n/** @hidden */\nexport var QUICK_DIALOG_CLASS = 'e-quick-dialog';\n/** @hidden */\nexport var DIALOG_FOOTER_CONTENT_CLASS = 'e-footer-content';\n/** @hidden */\nexport var QUICK_DIALOG_EDIT_EVENT_CLASS = 'e-quick-dialog-edit-event';\n/** @hidden */\nexport var QUICK_DIALOG_EDIT_SERIES_CLASS = 'e-quick-dialog-edit-series';\n/** @hidden */\nexport var QUICK_DIALOG_DELETE_CLASS = 'e-quick-dialog-delete';\n/** @hidden */\nexport var QUICK_DIALOG_CANCEL_CLASS = 'e-quick-dialog-cancel';\n/** @hidden */\nexport var QUICK_DIALOG_ALERT_BTN_CLASS = 'e-quick-dialog-alert-btn';\n/** @hidden */\nexport var EVENT_WINDOW_DIALOG_CLASS = 'e-schedule-dialog';\n/** @hidden */\nexport var FORM_CONTAINER_CLASS = 'e-form-container';\n/** @hidden */\nexport var FORM_CLASS = 'e-schedule-form';\n/** @hidden */\nexport var EVENT_WINDOW_ALLDAY_TZ_DIV_CLASS = 'e-all-day-time-zone-row';\n/** @hidden */\nexport var EVENT_WINDOW_ALL_DAY_CLASS = 'e-all-day';\n/** @hidden */\nexport var TIME_ZONE_CLASS = 'e-time-zone';\n/** @hidden */\nexport var TIME_ZONE_ICON_CLASS = 'e-time-zone-icon';\n/** @hidden */\nexport var TIME_ZONE_DETAILS_CLASS = 'e-time-zone-details';\n/** @hidden */\nexport var EVENT_WINDOW_REPEAT_DIV_CLASS = 'e-repeat-parent-row';\n/** @hidden */\nexport var EVENT_WINDOW_REPEAT_CLASS = 'e-repeat';\n/** @hidden */\nexport var EVENT_WINDOW_TITLE_LOCATION_DIV_CLASS = 'e-title-location-row';\n/** @hidden */\nexport var SUBJECT_CLASS = 'e-subject';\n/** @hidden */\nexport var LOCATION_CLASS = 'e-location';\n/** @hidden */\nexport var LOCATION_ICON_CLASS = 'e-location-icon';\n/** @hidden */\nexport var LOCATION_DETAILS_CLASS = 'e-location-details';\n/** @hidden */\nexport var EVENT_WINDOW_START_END_DIV_CLASS = 'e-start-end-row';\n/** @hidden */\nexport var EVENT_WINDOW_START_CLASS = 'e-start';\n/** @hidden */\nexport var EVENT_WINDOW_END_CLASS = 'e-end';\n/** @hidden */\nexport var EVENT_WINDOW_RESOURCES_DIV_CLASS = 'e-resources-row';\n/** @hidden */\nexport var DESCRIPTION_CLASS = 'e-description';\n/** @hidden */\nexport var DESCRIPTION_ICON_CLASS = 'e-description-icon';\n/** @hidden */\nexport var DESCRIPTION_DETAILS_CLASS = 'e-description-details';\n/** @hidden */\nexport var EVENT_WINDOW_TIME_ZONE_DIV_CLASS = 'e-time-zone-row';\n/** @hidden */\nexport var EVENT_WINDOW_START_TZ_CLASS = 'e-start-time-zone';\n/** @hidden */\nexport var EVENT_WINDOW_END_TZ_CLASS = 'e-end-time-zone';\n/** @hidden */\nexport var EVENT_WINDOW_BACK_ICON_CLASS = 'e-back-icon';\n/** @hidden */\nexport var EVENT_WINDOW_SAVE_ICON_CLASS = 'e-save-icon';\n/** @hidden */\nexport var EVENT_WINDOW_DELETE_BUTTON_CLASS = 'e-event-delete';\n/** @hidden */\nexport var EVENT_WINDOW_CANCEL_BUTTON_CLASS = 'e-event-cancel';\n/** @hidden */\nexport var EVENT_WINDOW_SAVE_BUTTON_CLASS = 'e-event-save';\n/** @hidden */\nexport var EVENT_WINDOW_DIALOG_PARENT_CLASS = 'e-dialog-parent';\n/** @hidden */\nexport var EVENT_WINDOW_TITLE_TEXT_CLASS = 'e-title-text';\n/** @hidden */\nexport var EVENT_WINDOW_ICON_DISABLE_CLASS = 'e-icon-disable';\n/** @hidden */\nexport var EDIT_CLASS = 'e-edit';\n/** @hidden */\nexport var EDIT_ICON_CLASS = 'e-edit-icon';\n/** @hidden */\nexport var DELETE_CLASS = 'e-delete';\n/** @hidden */\nexport var DELETE_ICON_CLASS = 'e-delete-icon';\n/** @hidden */\nexport var CLOSE_CLASS = 'e-close';\n/** @hidden */\nexport var CLOSE_ICON_CLASS = 'e-close-icon';\n/** @hidden */\nexport var ERROR_VALIDATION_CLASS = 'e-schedule-error';\n/** @hidden */\nexport var EVENT_TOOLTIP_ROOT_CLASS = 'e-schedule-event-tooltip';\n/** @hidden */\nexport var ALLDAY_ROW_ANIMATE_CLASS = 'e-animate';\n/** @hidden */\nexport var TIMESCALE_DISABLE = 'e-timescale-disable';\n/** @hidden */\nexport var DISABLE_DATE = 'e-disable-date';\n/** @hidden */\nexport var HIDDEN_CLASS = 'e-hidden';\n/** @hidden */\nexport var POPUP_WRAPPER_CLASS = 'e-quick-popup-wrapper';\n/** @hidden */\nexport var POPUP_TABLE_CLASS = 'e-popup-table';\n/** @hidden */\nexport var RESOURCE_MENU = 'e-resource-menu';\n/** @hidden */\nexport var RESOURCE_MENU_ICON = 'e-icon-menu';\n/** @hidden */\nexport var RESOURCE_LEVEL_TITLE = 'e-resource-level-title';\n/** @hidden */\nexport var RESOURCE_TREE = 'e-resource-tree';\n/** @hidden */\nexport var RESOURCE_TREE_POPUP_OVERLAY = 'e-resource-tree-popup-overlay';\n/** @hidden */\nexport var RESOURCE_TREE_POPUP = 'e-resource-tree-popup';\n/** @hidden */\nexport var RESOURCE_CLASS = 'e-resource';\n/** @hidden */\nexport var RESOURCE_ICON_CLASS = 'e-resource-icon';\n/** @hidden */\nexport var RESOURCE_DETAILS_CLASS = 'e-resource-details';\n/** @hidden */\nexport var DATE_TIME_ICON_CLASS = 'e-date-time-icon';\n","import { isNullOrUndefined, createElement, remove, closest, addClass, removeClass, extend } from '@syncfusion/ej2-base';\nimport { Toolbar } from '@syncfusion/ej2-navigations';\nimport { Calendar } from '@syncfusion/ej2-calendars';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport * as events from '../base/constant';\nimport * as util from '../base/util';\nimport * as cls from '../base/css-constant';\n/**\n * Header module\n */\nvar HeaderRenderer = /** @class */ (function () {\n /**\n * Constructor for render module\n */\n function HeaderRenderer(parent) {\n this.parent = parent;\n this.l10n = this.parent.localeObj;\n this.renderHeader();\n this.addEventListener();\n }\n HeaderRenderer.prototype.addEventListener = function () {\n this.parent.on(events.documentClick, this.closeHeaderPopup, this);\n };\n HeaderRenderer.prototype.removeEventListener = function () {\n this.parent.off(events.documentClick, this.closeHeaderPopup);\n };\n HeaderRenderer.prototype.closeHeaderPopup = function (e) {\n var closestEle = closest(e.event.target, '.e-date-range,.e-header-popup,.e-day,.e-selected');\n if (!isNullOrUndefined(closestEle)) {\n return;\n }\n this.hideHeaderPopup();\n };\n /** @hidden */\n HeaderRenderer.prototype.hideHeaderPopup = function () {\n if (this.headerPopup) {\n this.headerPopup.hide();\n }\n };\n HeaderRenderer.prototype.renderHeader = function () {\n this.element = createElement('div', { className: cls.TOOLBAR_CONTAINER });\n var toolbarEle = createElement('div', { className: cls.HEADER_TOOLBAR });\n this.element.appendChild(toolbarEle);\n this.parent.element.insertBefore(this.element, this.parent.element.firstElementChild);\n this.renderToolbar();\n };\n HeaderRenderer.prototype.renderToolbar = function () {\n var items = this.getItems();\n var args = { requestType: 'toolbarItemRendering', items: items };\n this.parent.trigger(events.actionBegin, args);\n this.toolbarObj = new Toolbar({\n items: args.items,\n overflowMode: 'Popup',\n clicked: this.toolbarClickHandler.bind(this),\n enableRtl: this.parent.enableRtl,\n locale: this.parent.locale\n });\n this.toolbarObj.appendTo(this.parent.element.querySelector('.' + cls.HEADER_TOOLBAR));\n var prevNavEle = this.toolbarObj.element.querySelector('.e-prev');\n if (prevNavEle) {\n prevNavEle.firstChild.setAttribute('title', this.l10n.getConstant('previous'));\n }\n var nextNavEle = this.toolbarObj.element.querySelector('.e-next');\n if (nextNavEle) {\n nextNavEle.firstChild.setAttribute('title', this.l10n.getConstant('next'));\n }\n this.updateActiveView();\n this.parent.trigger(events.actionComplete, { requestType: 'toolBarItemRendered', items: this.toolbarObj.items });\n };\n HeaderRenderer.prototype.updateItems = function () {\n if (this.toolbarObj) {\n var items = this.getItems();\n var args = { requestType: 'toolbarItemRendering', items: items };\n this.parent.trigger(events.actionBegin, args);\n this.toolbarObj.items = args.items;\n this.toolbarObj.dataBind();\n this.parent.trigger(events.actionComplete, {\n requestType: 'toolBarItemRendered',\n items: this.toolbarObj.items\n });\n }\n };\n HeaderRenderer.prototype.getPopUpRelativeElement = function () {\n if (this.parent.isAdaptive) {\n return this.toolbarObj.element;\n }\n return this.element.querySelector('.e-date-range');\n };\n HeaderRenderer.prototype.setDayOfWeek = function (index) {\n if (this.headerCalendar) {\n this.headerCalendar.firstDayOfWeek = index;\n this.headerCalendar.dataBind();\n }\n };\n HeaderRenderer.prototype.setCalendarDate = function (date) {\n if (this.headerCalendar) {\n this.headerCalendar.value = date;\n this.headerCalendar.dataBind();\n }\n };\n HeaderRenderer.prototype.getCalendarView = function () {\n if (this.parent.currentView === 'Month' || this.parent.currentView === 'MonthAgenda') {\n return 'Year';\n }\n return 'Month';\n };\n HeaderRenderer.prototype.setCalendarView = function () {\n if (this.headerCalendar) {\n var calendarView = this.getCalendarView();\n this.headerCalendar.depth = calendarView;\n this.headerCalendar.start = calendarView;\n this.headerCalendar.refresh();\n }\n };\n HeaderRenderer.prototype.setRtl = function (isRtl) {\n if (this.headerPopup) {\n this.headerPopup.enableRtl = isRtl;\n this.headerPopup.dataBind();\n }\n if (this.headerCalendar) {\n this.headerCalendar.enableRtl = isRtl;\n this.headerCalendar.dataBind();\n }\n this.toolbarObj.enableRtl = isRtl;\n this.toolbarObj.dataBind();\n };\n HeaderRenderer.prototype.updateActiveView = function () {\n var selEle = this.toolbarObj.element.querySelectorAll('.e-views');\n removeClass(selEle, ['e-active-view']);\n if (selEle.length > 0 && selEle[this.parent.viewIndex]) {\n addClass([selEle[this.parent.viewIndex]], ['e-active-view']);\n }\n };\n HeaderRenderer.prototype.updateDateRange = function (text) {\n if (text === void 0) { text = this.getDateRangeText(); }\n var selEle = this.toolbarObj.element.querySelector('.e-date-range');\n if (selEle) {\n selEle.setAttribute('aria-label', text);\n selEle.querySelector('.e-tbar-btn-text').innerHTML = text;\n this.toolbarObj.refreshOverflow();\n }\n };\n HeaderRenderer.prototype.getDateRangeText = function () {\n return this.parent.globalize.formatDate(this.parent.selectedDate, { format: 'MMMM y' });\n };\n HeaderRenderer.prototype.getItems = function () {\n var items = [];\n var showInPopup = this.parent.isAdaptive;\n items.push({\n align: 'Left', prefixIcon: 'e-icon-prev', tooltipText: 'Previous', overflow: 'Show',\n cssClass: 'e-prev', htmlAttributes: { 'aria-label': 'previous period' }\n });\n items.push({\n align: 'Left', prefixIcon: 'e-icon-next', tooltipText: 'Next', overflow: 'Show',\n cssClass: 'e-next', htmlAttributes: { 'aria-label': 'next period' }\n });\n items.push({\n align: 'Left', text: this.getDateRangeText(), suffixIcon: 'e-icon-down-arrow', cssClass: 'e-date-range',\n overflow: 'Show', htmlAttributes: { 'aria-atomic': 'true', 'aria-live': 'assertive', 'aria-label': 'title' }\n });\n if (this.parent.isAdaptive) {\n items.push({\n align: 'Right', showAlwaysInPopup: showInPopup, prefixIcon: 'e-icon-add', text: this.l10n.getConstant('newEvent'),\n cssClass: 'e-add', overflow: 'Show'\n });\n items.push({\n align: 'Right', showAlwaysInPopup: showInPopup, prefixIcon: 'e-icon-today', text: this.l10n.getConstant('today'),\n cssClass: 'e-today', overflow: 'Show'\n });\n }\n else {\n items.push({\n align: 'Right', showAlwaysInPopup: showInPopup, prefixIcon: 'e-icon-day', text: this.l10n.getConstant('today'),\n cssClass: 'e-today', overflow: 'Show'\n });\n if (this.parent.views.length > 1) {\n items.push({\n align: 'Right', type: 'Separator', cssClass: 'e-schedule-seperator'\n });\n }\n }\n if (this.parent.views.length > 1) {\n for (var _i = 0, _a = this.parent.views; _i < _a.length; _i++) {\n var item = _a[_i];\n typeof (item) === 'string' ? items.push(this.getItemObject(item.toLowerCase(), null)) :\n items.push(this.getItemObject(item.option.toLowerCase(), item.displayName));\n }\n }\n return items;\n };\n HeaderRenderer.prototype.getItemObject = function (viewName, displayName) {\n var view;\n var showInPopup = this.parent.isAdaptive;\n switch (viewName) {\n case 'day':\n view = {\n align: 'Right', showAlwaysInPopup: showInPopup, prefixIcon: 'e-icon-day',\n text: displayName || this.l10n.getConstant('day'), cssClass: 'e-views e-day'\n };\n break;\n case 'week':\n view = {\n align: 'Right', showAlwaysInPopup: showInPopup, prefixIcon: 'e-icon-week',\n text: displayName || this.l10n.getConstant('week'), cssClass: 'e-views e-week'\n };\n break;\n case 'workweek':\n view = {\n align: 'Right', showAlwaysInPopup: showInPopup, prefixIcon: 'e-icon-workweek',\n text: displayName || this.l10n.getConstant('workWeek'), cssClass: 'e-views e-work-week'\n };\n break;\n case 'month':\n view = {\n align: 'Right', showAlwaysInPopup: showInPopup, prefixIcon: 'e-icon-month',\n text: displayName || this.l10n.getConstant('month'), cssClass: 'e-views e-month'\n };\n break;\n case 'agenda':\n view = {\n align: 'Right', showAlwaysInPopup: showInPopup, prefixIcon: 'e-icon-agenda', text: this.l10n.getConstant('agenda'),\n cssClass: 'e-views e-agenda'\n };\n break;\n // case 'weekagenda':\n // view = {\n // align: 'Right', showAlwaysInPopup: showInPopup, prefixIcon: 'e-icon-week', text: this.l10n.getConstant('weekAgenda'),\n // cssClass: 'e-week-agenda'\n // };\n // break;\n // case 'workweekagenda':\n // view = {\n // align: 'Right', showAlwaysInPopup: showInPopup, prefixIcon: 'e-icon-workweek',\n // text: this.l10n.getConstant('workWeekAgenda'), cssClass: 'e-work-week-agenda'\n // };\n // break;\n case 'monthagenda':\n view = {\n align: 'Right', showAlwaysInPopup: showInPopup, prefixIcon: 'e-icon-month-agenda',\n text: this.l10n.getConstant('monthAgenda'), cssClass: 'e-views e-month-agenda'\n };\n break;\n }\n return view;\n };\n HeaderRenderer.prototype.renderHeaderPopup = function () {\n var headerPopupEle = createElement('div', { className: cls.HEADER_POPUP_CLASS });\n var headerCalendarEle = createElement('div', { className: cls.HEADER_CALENDAR_CLASS });\n headerPopupEle.appendChild(headerCalendarEle);\n this.element.appendChild(headerPopupEle);\n this.headerPopup = new Popup(headerPopupEle, {\n actionOnScroll: 'hide',\n targetType: 'relative',\n relateTo: this.getPopUpRelativeElement(),\n position: { X: 'left', Y: 'bottom' },\n enableRtl: this.parent.enableRtl\n });\n var calendarView = this.getCalendarView();\n this.headerCalendar = new Calendar({\n value: this.parent.selectedDate,\n firstDayOfWeek: this.parent.firstDayOfWeek,\n enableRtl: this.parent.enableRtl,\n locale: this.parent.locale,\n depth: calendarView,\n start: calendarView,\n change: this.calendarChange.bind(this)\n });\n this.headerCalendar.appendTo(headerCalendarEle);\n this.headerPopup.hide();\n };\n HeaderRenderer.prototype.calendarChange = function (args) {\n if (args.value.getTime() !== this.parent.selectedDate.getTime()) {\n this.parent.changeDate(args.value);\n }\n this.headerPopup.hide();\n };\n HeaderRenderer.prototype.calculateViewIndex = function (args) {\n var target = closest(args.originalEvent.target, '.e-views');\n var views = [].slice.call(this.element.querySelectorAll('.e-views'));\n return views.indexOf(target);\n };\n HeaderRenderer.prototype.toolbarClickHandler = function (args) {\n if (!args.item) {\n return;\n }\n var strClass = args.item.cssClass.replace('e-views ', '');\n switch (strClass) {\n case 'e-date-range':\n if (!this.headerPopup) {\n this.renderHeaderPopup();\n }\n if (this.headerPopup.element.classList.contains(cls.POPUP_OPEN)) {\n this.headerPopup.hide();\n }\n else {\n this.headerPopup.show();\n }\n break;\n case 'e-day':\n this.parent.changeView('Day', args.originalEvent, undefined, this.calculateViewIndex(args));\n break;\n case 'e-week':\n this.parent.changeView('Week', args.originalEvent, undefined, this.calculateViewIndex(args));\n break;\n case 'e-work-week':\n this.parent.changeView('WorkWeek', args.originalEvent, undefined, this.calculateViewIndex(args));\n break;\n case 'e-month':\n this.parent.changeView('Month', args.originalEvent, undefined, this.calculateViewIndex(args));\n break;\n case 'e-agenda':\n this.parent.changeView('Agenda', args.originalEvent, undefined, this.calculateViewIndex(args));\n break;\n // case 'e-week-agenda':\n // this.parent.changeView('weekAgenda', args.originalEvent);\n // break;\n // case 'e-work-week-agenda':\n // this.parent.changeView('workWeekAgenda', args.originalEvent);\n // break;\n case 'e-month-agenda':\n this.parent.changeView('MonthAgenda', args.originalEvent, undefined, this.calculateViewIndex(args));\n break;\n case 'e-today':\n if (!this.parent.isSelectedDate(util.resetTime(new Date()))) {\n this.parent.changeDate(util.resetTime(new Date()), args.originalEvent);\n }\n break;\n case 'e-prev':\n this.parent.changeDate(this.parent.activeView.getNextPreviousDate('previous'), args.originalEvent);\n break;\n case 'e-next':\n this.parent.changeDate(this.parent.activeView.getNextPreviousDate('next'), args.originalEvent);\n break;\n case 'e-add':\n var data = void 0;\n if (this.parent.activeCellsData) {\n data = this.parent.activeCellsData;\n }\n else {\n var interval = this.parent.activeViewOptions.timeScale.interval;\n var slotCount = this.parent.activeViewOptions.timeScale.slotCount;\n var msInterval = (interval * util.MS_PER_MINUTE) / slotCount;\n var startTime = new Date(this.parent.selectedDate.getTime());\n startTime.setHours(new Date().getHours(), (Math.round(startTime.getMinutes() / msInterval) * msInterval), 0);\n var endTime = new Date(new Date(startTime.getTime()).setMilliseconds(startTime.getMilliseconds() + msInterval));\n data = extend({ startTime: startTime, endTime: endTime, isAllDay: false }, { cancel: false, event: args.originalEvent });\n }\n this.parent.eventWindow.openEditor(data, 'Add');\n break;\n }\n var toolbarPopUp = this.toolbarObj.element.querySelector('.e-toolbar-pop');\n if (toolbarPopUp) {\n toolbarPopUp.ej2_instances[0].hide({ name: 'SlideUp', duration: 100 });\n }\n };\n HeaderRenderer.prototype.getHeaderElement = function () {\n return this.element;\n };\n HeaderRenderer.prototype.updateHeaderItems = function (classType) {\n var prevNavEle = this.toolbarObj.element.querySelector('.e-prev');\n var nextNavEle = this.toolbarObj.element.querySelector('.e-next');\n var dateRangeEle = this.toolbarObj.element.querySelector('.e-date-range');\n if (prevNavEle) {\n (classType === 'add') ? addClass([prevNavEle], cls.AGENDA_HIDDEN_CLASS) : removeClass([prevNavEle], cls.AGENDA_HIDDEN_CLASS);\n }\n if (nextNavEle) {\n (classType === 'add') ? addClass([nextNavEle], cls.AGENDA_HIDDEN_CLASS) : removeClass([nextNavEle], cls.AGENDA_HIDDEN_CLASS);\n }\n if (dateRangeEle) {\n (classType === 'add') ? addClass([dateRangeEle], cls.AGENDA_ALIGN_CLASS) : removeClass([dateRangeEle], cls.AGENDA_ALIGN_CLASS);\n }\n };\n /**\n * Get module name.\n */\n HeaderRenderer.prototype.getModuleName = function () {\n return 'headerbar';\n };\n /**\n * To destroy the headerbar.\n * @return {void}\n * @private\n */\n HeaderRenderer.prototype.destroy = function () {\n if (this.headerPopup) {\n this.headerPopup.destroy();\n }\n if (this.headerCalendar) {\n this.headerCalendar.destroy();\n }\n if (!this.toolbarObj.isDestroyed) {\n this.toolbarObj.destroy();\n this.removeEventListener();\n remove(this.element);\n }\n };\n return HeaderRenderer;\n}());\nexport { HeaderRenderer };\n","import { formatUnit } from '@syncfusion/ej2-base';\nimport { contentReady, uiUpdate, scrollUiUpdate } from '../base/constant';\n/**\n * `Scroll` module\n */\nvar Scroll = /** @class */ (function () {\n /**\n * Constructor for the scrolling.\n * @hidden\n */\n function Scroll(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Scroll.prototype.getModuleName = function () {\n return 'scroll';\n };\n /**\n * @hidden\n */\n Scroll.prototype.setWidth = function () {\n this.parent.element.style.width = formatUnit(this.parent.width);\n };\n /**\n * @hidden\n */\n Scroll.prototype.setHeight = function () {\n this.parent.element.style.height = formatUnit(this.parent.height);\n };\n /**\n * @hidden\n */\n Scroll.prototype.addEventListener = function () {\n this.parent.on(contentReady, this.setDimensions, this);\n this.parent.on(uiUpdate, this.onPropertyChanged, this);\n };\n /**\n * @hidden\n */\n Scroll.prototype.removeEventListener = function () {\n this.parent.off(contentReady, this.setDimensions);\n this.parent.off(uiUpdate, this.onPropertyChanged);\n };\n Scroll.prototype.setDimensions = function () {\n this.setWidth();\n this.setHeight();\n var cssProps = this.getCssProperties(this.parent.enableRtl);\n var data = { cssProperties: cssProps, module: this.getModuleName() };\n this.parent.notify(scrollUiUpdate, data);\n };\n /**\n * @hidden\n */\n Scroll.prototype.getCssProperties = function (enableRtl) {\n var css = {};\n css.border = enableRtl ? 'borderLeftWidth' : 'borderRightWidth';\n css.padding = enableRtl ? 'paddingLeft' : 'paddingRight';\n return css;\n };\n Scroll.prototype.onPropertyChanged = function (e) {\n this.setDimensions();\n };\n /**\n * @hidden\n */\n Scroll.prototype.destroy = function () {\n this.removeEventListener();\n };\n return Scroll;\n}());\nexport { Scroll };\n","import { addClass, removeClass, Touch, remove, EventHandler, Browser } from '@syncfusion/ej2-base';\nimport { closest, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport * as cls from '../base/css-constant';\n/**\n * `touch` module is used to handle touch interactions.\n */\nvar ScheduleTouch = /** @class */ (function () {\n function ScheduleTouch(parent) {\n this.parent = parent;\n this.element = this.parent.element.querySelector('.' + cls.TABLE_CONTAINER_CLASS);\n this.touchObj = new Touch(this.element, {\n scroll: this.scrollHandler.bind(this),\n swipe: this.swipeHandler.bind(this),\n tapHold: this.tapHoldHandler.bind(this),\n swipeSettings: { swipeThresholdDistance: 1 }\n });\n EventHandler.add(this.element, 'transitionend', this.onTransitionEnd, this);\n this.touchLeftDirection = this.parent.enableRtl ? 'Right' : 'Left';\n this.touchRightDirection = this.parent.enableRtl ? 'Left' : 'Right';\n }\n ScheduleTouch.prototype.scrollHandler = function (e) {\n if (this.parent.currentView === 'Agenda' ||\n (e.originalEvent && !isNullOrUndefined(closest(e.originalEvent.target, '.' + cls.APPOINTMENT_WRAP_CLASS)))) {\n return;\n }\n if (!this.timeStampStart) {\n this.timeStampStart = Date.now();\n }\n if (this.element.classList.contains(cls.TRANSLATE_CLASS)) {\n this.onTransitionEnd();\n }\n if (e.scrollDirection === 'Left' || e.scrollDirection === 'Right') {\n var args = { requestType: 'dateNavigate', cancel: false, event: e.originalEvent };\n this.parent.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n var scrollDiv = this.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);\n if (scrollDiv && scrollDiv.scrollWidth > scrollDiv.clientWidth) {\n return;\n }\n else {\n this.isScrollTriggered = true;\n e.originalEvent.preventDefault();\n e.originalEvent.stopPropagation();\n }\n }\n if (e.scrollDirection === this.touchLeftDirection) {\n if (!this.nextPanel) {\n this.renderPanel(cls.NEXT_PANEL_CLASS, 'next');\n this.nextPanel = {\n element: this.parent.activeView.getPanel(),\n selectedDate: new Date(this.parent.selectedDate.getTime())\n };\n this.setDimensions(this.nextPanel.element);\n }\n var x = this.parent.enableRtl ? e.distanceX : -e.distanceX;\n this.element.style.transform = 'translatex(' + (this.getTranslateX(this.element) + x) + 'px)';\n }\n else if (e.scrollDirection === this.touchRightDirection) {\n var prevWidth = 0;\n if (!this.previousPanel) {\n this.renderPanel(cls.PREVIOUS_PANEL_CLASS, 'previous');\n this.previousPanel = {\n element: this.parent.activeView.getPanel(),\n selectedDate: new Date(this.parent.selectedDate.getTime())\n };\n this.setDimensions(this.previousPanel.element);\n prevWidth = this.previousPanel.element.offsetWidth;\n }\n var x = this.parent.enableRtl ? prevWidth - e.distanceX : -prevWidth + e.distanceX;\n this.element.style.transform = 'translatex(' + (this.getTranslateX(this.element) + x) + 'px)';\n }\n };\n ScheduleTouch.prototype.swipeHandler = function (e) {\n if (!this.isScrollTriggered) {\n return;\n }\n this.isScrollTriggered = false;\n if (e.swipeDirection === 'Left' || e.swipeDirection === 'Right') {\n var time = Date.now() - this.timeStampStart;\n var offsetDist = (e.distanceX * (Browser.isDevice ? 6 : 1.66));\n if (offsetDist > time || (e.distanceX > (this.parent.element.offsetWidth / 2))) {\n this.swapPanels(e.swipeDirection);\n if (offsetDist > time && (e.distanceX > (this.parent.element.offsetWidth / 2))) {\n this.element.style.transitionDuration = ((offsetDist / time) / 10) + 's';\n }\n this.confirmSwipe(e.swipeDirection);\n }\n else {\n this.cancelSwipe();\n }\n var args = { requestType: 'dateNavigate', cancel: false, event: e.originalEvent };\n this.parent.trigger(events.actionComplete, args);\n }\n else {\n this.cancelSwipe();\n }\n this.timeStampStart = null;\n };\n ScheduleTouch.prototype.tapHoldHandler = function (e) {\n var target = closest(e.originalEvent.target, '.' + cls.APPOINTMENT_CLASS);\n if (!isNullOrUndefined(target)) {\n var event_1 = e.originalEvent;\n this.parent.notify(events.tapHoldReady, { event: event_1 });\n return;\n }\n target = closest(e.originalEvent.target, '.' + cls.WORK_CELLS_CLASS + ',.' + cls.ALLDAY_CELLS_CLASS + ',.'\n + cls.HEADER_CELLS_CLASS);\n if (!isNullOrUndefined(target)) {\n this.parent.activeCellsData = this.parent.getCellDetails(target);\n if (!this.parent.activeViewOptions.readonly) {\n this.parent.eventWindow.openEditor(this.parent.activeCellsData, 'Add');\n }\n return;\n }\n };\n ScheduleTouch.prototype.renderPanel = function (clsName, nextPrevType) {\n if (!this.currentPanel) {\n this.currentPanel = {\n element: this.parent.activeView.getPanel(),\n selectedDate: new Date(this.parent.selectedDate.getTime())\n };\n this.setDimensions(this.currentPanel.element);\n }\n else {\n this.parent.setProperties({ selectedDate: this.currentPanel.selectedDate }, true);\n }\n this.parent.setProperties({ selectedDate: this.parent.activeView.getNextPreviousDate(nextPrevType) }, true);\n this.parent.activeView.getRenderDates();\n this.parent.activeView.renderLayout(clsName);\n };\n ScheduleTouch.prototype.swapPanels = function (direction) {\n if (direction === this.touchLeftDirection) {\n var temp = this.nextPanel;\n this.nextPanel = this.currentPanel;\n this.currentPanel = temp;\n }\n else {\n var temp = this.previousPanel;\n this.previousPanel = this.currentPanel;\n this.currentPanel = temp;\n }\n };\n ScheduleTouch.prototype.confirmSwipe = function (swipeDirection) {\n var previousDate = swipeDirection === this.touchLeftDirection ? this.nextPanel.selectedDate : this.previousPanel.selectedDate;\n var navArgs = {\n action: 'date', cancel: false, previousDate: previousDate, currentDate: this.currentPanel.selectedDate\n };\n this.parent.trigger(events.navigating, navArgs);\n if (navArgs.cancel) {\n this.swapPanels(swipeDirection);\n this.cancelSwipe();\n return;\n }\n this.parent.activeView.setPanel(this.currentPanel.element);\n this.parent.setProperties({ selectedDate: this.currentPanel.selectedDate }, true);\n var translateX;\n if (this.parent.enableRtl) {\n translateX = swipeDirection === this.touchLeftDirection ?\n (this.previousPanel ? this.previousPanel.element.offsetLeft : this.currentPanel.element.offsetWidth) : 0;\n }\n else {\n translateX = swipeDirection === this.touchLeftDirection ? -this.currentPanel.element.offsetLeft : 0;\n }\n addClass([this.element], cls.TRANSLATE_CLASS);\n this.element.style.transform = 'translatex(' + (translateX) + 'px)';\n if (this.parent.headerModule) {\n this.parent.headerModule.updateDateRange(this.parent.activeView.getDateRangeText());\n }\n this.parent.renderModule.refreshDataManager();\n };\n ScheduleTouch.prototype.cancelSwipe = function () {\n this.parent.activeView.setPanel(this.currentPanel.element);\n this.parent.setProperties({ selectedDate: this.currentPanel.selectedDate }, true);\n this.parent.activeView.getRenderDates();\n this.parent.activeView.generateColumnLevels();\n addClass([this.element], cls.TRANSLATE_CLASS);\n var prevWidth = this.previousPanel ? this.previousPanel.element.offsetWidth : 0;\n this.element.style.transform = 'translatex(' + (this.parent.enableRtl ? prevWidth : -this.currentPanel.element.offsetLeft) + 'px)';\n };\n ScheduleTouch.prototype.onTransitionEnd = function () {\n removeClass([this.element], cls.TRANSLATE_CLASS);\n this.element.style.transitionDuration = '';\n this.element.style.transform = '';\n if (this.previousPanel) {\n remove(this.previousPanel.element);\n this.previousPanel = null;\n removeClass([this.currentPanel.element], cls.PREVIOUS_PANEL_CLASS);\n addClass([this.currentPanel.element], cls.CURRENT_PANEL_CLASS);\n }\n if (this.nextPanel) {\n remove(this.nextPanel.element);\n this.nextPanel = null;\n removeClass([this.currentPanel.element], cls.NEXT_PANEL_CLASS);\n addClass([this.currentPanel.element], cls.CURRENT_PANEL_CLASS);\n }\n this.currentPanel = null;\n this.parent.activeView.getPanel().style.width = '';\n };\n ScheduleTouch.prototype.getTranslateX = function (element) {\n var style = window.getComputedStyle(element);\n return new WebKitCSSMatrix(style.webkitTransform).m41;\n };\n ScheduleTouch.prototype.setDimensions = function (element) {\n element.style.width = (this.parent.element.clientWidth) + 'px';\n };\n ScheduleTouch.prototype.resetValues = function () {\n this.currentPanel = null;\n this.previousPanel = null;\n this.nextPanel = null;\n this.timeStampStart = null;\n this.element.style.transform = '';\n this.element.innerHTML = '';\n removeClass([this.element], cls.TRANSLATE_CLASS);\n };\n /**\n * @hidden\n */\n ScheduleTouch.prototype.destroy = function () {\n this.touchObj.destroy();\n EventHandler.remove(this.element, 'transitionend', this.onTransitionEnd);\n this.resetValues();\n };\n return ScheduleTouch;\n}());\nexport { ScheduleTouch };\n","import { KeyboardEvents, closest, EventHandler, extend } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, addClass } from '@syncfusion/ej2-base';\nimport * as event from '../base/constant';\nimport * as util from '../base/util';\nimport * as cls from '../base/css-constant';\n/**\n * Keyboard interaction\n */\nvar KeyboardInteraction = /** @class */ (function () {\n function KeyboardInteraction(parent) {\n this.selectedCells = [];\n this.keyConfigs = {\n downArrow: 'downarrow',\n upArrow: 'uparrow',\n rightArrow: 'rightarrow',\n leftArrow: 'leftarrow',\n shiftDownArrow: 'shift+downarrow',\n shiftUpArrow: 'shift+uparrow',\n shiftRightArrow: 'shift+rightarrow',\n shiftLeftArrow: 'shift+leftarrow',\n ctrlLeftArrow: 'ctrl+leftarrow',\n ctrlRightArrow: 'ctrl+rightarrow',\n altOne: 'alt+1',\n altTwo: 'alt+2',\n altThree: 'alt+3',\n altFour: 'alt+4',\n altFive: 'alt+5',\n altSix: 'alt+6',\n enter: 'enter',\n escape: 'escape',\n delete: 'delete',\n home: 'home',\n pageUp: 'pageup',\n pageDown: 'pagedown',\n tab: 'tab',\n shiftTab: 'shift+tab'\n };\n this.parent = parent;\n this.parent.element.tabIndex = this.parent.element.tabIndex === -1 ? 0 : this.parent.element.tabIndex;\n this.keyboardModule = new KeyboardEvents(this.parent.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n this.addEventListener();\n }\n KeyboardInteraction.prototype.keyActionHandler = function (e) {\n switch (e.action) {\n case 'downArrow':\n case 'shiftDownArrow':\n this.processDown(e, e.shiftKey);\n break;\n case 'upArrow':\n case 'shiftUpArrow':\n this.processUp(e, e.shiftKey);\n break;\n case 'leftArrow':\n case 'shiftLeftArrow':\n this.processLeft(e, e.shiftKey);\n break;\n case 'rightArrow':\n case 'shiftRightArrow':\n this.processRight(e, e.shiftKey);\n break;\n case 'ctrlLeftArrow':\n this.parent.changeDate(this.parent.activeView.getNextPreviousDate('previous'), e);\n if (this.parent.headerModule) {\n this.parent.headerModule.element.querySelector('.e-prev button').focus();\n }\n break;\n case 'ctrlRightArrow':\n this.parent.changeDate(this.parent.activeView.getNextPreviousDate('next'), e);\n if (this.parent.headerModule) {\n this.parent.headerModule.element.querySelector('.e-next button').focus();\n }\n break;\n case 'altOne':\n case 'altTwo':\n case 'altThree':\n case 'altFour':\n case 'altFive':\n case 'altSix':\n this.processViewNavigation(e);\n break;\n case 'enter':\n this.processEnter(e);\n break;\n case 'home':\n this.focusFirstCell();\n break;\n case 'tab':\n case 'shiftTab':\n this.processTab(e, e.shiftKey);\n break;\n case 'delete':\n this.processDelete(e);\n break;\n case 'escape':\n this.processEscape();\n }\n };\n KeyboardInteraction.prototype.addEventListener = function () {\n this.parent.on(event.cellMouseDown, this.onCellMouseDown, this);\n };\n KeyboardInteraction.prototype.removeEventListener = function () {\n this.parent.off(event.cellMouseDown, this.onCellMouseDown);\n };\n KeyboardInteraction.prototype.onCellMouseDown = function (e) {\n if (e.event.shiftKey) {\n return;\n }\n this.initialTarget = e.event.target;\n if (this.parent.activeViewOptions.readonly || this.parent.currentView === 'MonthAgenda') {\n return;\n }\n if (e.event.target.classList.contains(cls.WORK_CELLS_CLASS)) {\n EventHandler.add(this.parent.getContentTable(), 'mousemove', this.onMouseSelection, this);\n EventHandler.add(this.parent.getContentTable(), 'mouseup', this.onMoveup, this);\n }\n if (e.event.target.classList.contains(cls.ALLDAY_CELLS_CLASS)) {\n var allDayRow = this.parent.getAllDayRow();\n if (allDayRow) {\n EventHandler.add(allDayRow, 'mousemove', this.onMouseSelection, this);\n EventHandler.add(allDayRow, 'mouseup', this.onMoveup, this);\n }\n }\n };\n KeyboardInteraction.prototype.onMouseSelection = function (e) {\n var target = closest(e.target, '.' + cls.WORK_CELLS_CLASS + ',.' + cls.ALLDAY_CELLS_CLASS);\n if (target) {\n this.selectCells(true, target);\n }\n };\n KeyboardInteraction.prototype.onAppointmentSelection = function (e) {\n var target = closest(e.target, '.' + cls.APPOINTMENT_CLASS);\n var selectedElements = this.parent.eventBase.getSelectedEventElements(target);\n };\n KeyboardInteraction.prototype.onMoveup = function (e) {\n if (e.target.classList.contains(cls.WORK_CELLS_CLASS)) {\n EventHandler.remove(this.parent.getContentTable(), 'mousemove', this.onMouseSelection);\n EventHandler.remove(this.parent.getContentTable(), 'mouseup', this.onMoveup);\n }\n if (e.target.classList.contains(cls.ALLDAY_CELLS_CLASS)) {\n var allDayRow = this.parent.getAllDayRow();\n if (allDayRow) {\n EventHandler.remove(allDayRow, 'mousemove', this.onMouseSelection);\n EventHandler.remove(allDayRow, 'mouseup', this.onMoveup);\n }\n }\n };\n KeyboardInteraction.prototype.processEnter = function (e) {\n if (this.parent.activeViewOptions.readonly) {\n return;\n }\n var target = (e.target);\n if (closest(target, '.' + cls.POPUP_WRAPPER_CLASS)) {\n if (target.classList.contains(cls.QUICK_POPUP_EVENT_DETAILS_CLASS) ||\n target.classList.contains(cls.EVENT_CREATE_CLASS) ||\n target.classList.contains(cls.EDIT_EVENT_CLASS) ||\n target.classList.contains(cls.DELETE_EVENT_CLASS) ||\n target.classList.contains(cls.CLOSE_CLASS)) {\n target.click();\n e.preventDefault();\n }\n else if (target.classList.contains(cls.SUBJECT_CLASS)) {\n this.parent.element.querySelector('.' + cls.EVENT_CREATE_CLASS).click();\n e.preventDefault();\n }\n return;\n }\n if (target.classList.contains(cls.WORK_CELLS_CLASS) || target.classList.contains(cls.ALLDAY_CELLS_CLASS)) {\n if (this.selectedCells.length > 1) {\n var start = this.parent.getCellDetails(this.selectedCells[0]);\n var end = this.parent.getCellDetails(this.selectedCells[this.selectedCells.length - 1]);\n start.endTime = end.endTime;\n start.element = target;\n this.parent.activeCellsData = start;\n }\n else {\n this.parent.activeCellsData = this.parent.getCellDetails(target);\n }\n var args = extend(this.parent.activeCellsData, { cancel: false, event: e });\n this.parent.notify(event.cellClick, args);\n return;\n }\n if (target.classList.contains(cls.APPOINTMENT_CLASS) || target.classList.contains(cls.MORE_EVENT_CLOSE_CLASS) ||\n target.classList.contains(cls.ALLDAY_APPOINTMENT_SECTION_CLASS) || target.classList.contains(cls.MORE_INDICATOR_CLASS)) {\n target.click();\n return;\n }\n if (target.classList.contains(cls.MORE_EVENT_HEADER_DATE_CLASS)) {\n this.parent.setProperties({ selectedDate: new Date(parseInt(target.getAttribute('data-date'), 10)) }, true);\n this.parent.changeView('Day');\n this.processEscape();\n return;\n }\n };\n KeyboardInteraction.prototype.getCells = function (isInverseTable, start, end) {\n var tableEle = this.parent.getContentTable();\n var cells = [].slice.call(tableEle.querySelectorAll('td'));\n var maxRow = tableEle.rows.length;\n var maxColumn = tableEle.rows[0].cells.length;\n if (start.classList.contains(cls.ALLDAY_CELLS_CLASS)) {\n var allDayRow = this.parent.getAllDayRow();\n cells = [].slice.call(allDayRow.cells);\n maxRow = 1;\n maxColumn = allDayRow.cells.length;\n }\n var startIndex = cells.indexOf(start);\n var endIndex = cells.indexOf(end);\n var inverseCells = [];\n if (isInverseTable) {\n for (var i = 0; i < maxColumn; i++) {\n for (var j = 0; j < maxRow; j++) {\n inverseCells.push(cells[maxColumn * j + i]);\n }\n }\n startIndex = inverseCells.indexOf(start);\n endIndex = inverseCells.indexOf(end);\n }\n if (startIndex > endIndex) {\n var temp = startIndex;\n startIndex = endIndex;\n endIndex = temp;\n }\n var sCells = isInverseTable ? inverseCells : cells;\n return sCells.slice(startIndex, endIndex + 1);\n };\n KeyboardInteraction.prototype.focusFirstCell = function () {\n if (this.parent.currentView === 'Agenda') {\n var focusCell = this.parent.getContentTable().querySelector('.' + cls.AGENDA_CELLS_CLASS);\n focusCell.setAttribute('tabindex', '0');\n focusCell.focus();\n return;\n }\n this.parent.eventBase.removeSelectedAppointmentClass();\n this.selectCells(false, this.parent.getWorkCellElements()[0]);\n };\n KeyboardInteraction.prototype.isInverseTableSelect = function () {\n return this.parent.activeView.isInverseTableSelect;\n };\n /** @hidden */\n KeyboardInteraction.prototype.selectCells = function (isMultiple, target) {\n this.parent.removeSelectedClass();\n if (isMultiple) {\n var initialId = void 0;\n var selectedCells = this.getCells(this.isInverseTableSelect(), this.initialTarget, target);\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n initialId = this.initialTarget.getAttribute('data-group-index');\n var resourceSelectedCells = [];\n for (var i = 0; i < selectedCells.length; i++) {\n if (selectedCells[i].getAttribute('data-group-index') === initialId) {\n resourceSelectedCells.push(selectedCells[i]);\n }\n }\n selectedCells = resourceSelectedCells;\n }\n this.selectedCells = selectedCells;\n if (selectedCells.length > 2 && !target.classList.contains(cls.ALLDAY_CELLS_CLASS)) {\n var allDayCells = this.getAllDayCells(selectedCells);\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n var resourceAllDayCells = [];\n for (var i = 0; i < allDayCells.length; i++) {\n if (allDayCells[i].getAttribute('data-group-index') === initialId) {\n resourceAllDayCells.push(allDayCells[i]);\n }\n }\n allDayCells = resourceAllDayCells;\n }\n selectedCells = selectedCells.concat(allDayCells);\n }\n if ((target.getAttribute('data-group-index') !== initialId) && this.parent.activeViewOptions.group.resources.length > 0) {\n target = this.selectedCells[this.selectedCells.length - 1];\n }\n this.parent.addSelectedClass(selectedCells, target);\n }\n else {\n this.initialTarget = target;\n this.selectedCells = [target];\n this.parent.addSelectedClass([target], target);\n }\n };\n KeyboardInteraction.prototype.selectAppointment = function (isReverse, target, isMoreEvent) {\n if (isMoreEvent === void 0) { isMoreEvent = false; }\n var appointments;\n if (isMoreEvent) {\n var moreEventWrapper = this.parent.element.querySelector('.' + cls.MORE_EVENT_WRAPPER_CLASS);\n appointments = [].slice.call(moreEventWrapper.children);\n }\n else {\n appointments = this.getAppointmentElements();\n }\n if (appointments.length < 0) {\n return;\n }\n this.parent.eventBase.removeSelectedAppointmentClass();\n var nextAppEle;\n if (target.classList.contains(cls.APPOINTMENT_CLASS)) {\n var targetIndex = appointments.indexOf(target);\n nextAppEle = appointments[(isReverse ? targetIndex - 1 : targetIndex + 1)];\n }\n else {\n nextAppEle = isReverse ? appointments[appointments.length - 1] : appointments[0];\n }\n if (nextAppEle) {\n this.parent.eventBase.addSelectedAppointments([nextAppEle], nextAppEle);\n nextAppEle.focus();\n addClass([nextAppEle], cls.AGENDA_SELECTED_CELL);\n }\n };\n KeyboardInteraction.prototype.selectAppointmentElementFromWorkCell = function (isReverse, target) {\n var _this = this;\n this.parent.eventBase.removeSelectedAppointmentClass();\n this.parent.removeSelectedClass();\n if (target.classList.contains(cls.WORK_CELLS_CLASS) || target.classList.contains(cls.ALLDAY_CELLS_CLASS)) {\n var appointmentElements_1 = this.getUniqueAppointmentElements();\n var filteredElements_1 = [];\n var selectedDate_1 = parseInt(target.getAttribute('data-date'), 10);\n var selectedSeriesEvents = this.parent.eventsProcessed.filter(function (eventObject) {\n return (!isReverse ? (eventObject[_this.parent.eventFields.startTime].getTime() >= selectedDate_1) :\n (eventObject[_this.parent.eventFields.startTime].getTime() <= selectedDate_1));\n });\n selectedSeriesEvents.filter(function (event) {\n appointmentElements_1.filter(function (element) {\n if (JSON.stringify(event.Guid) === JSON.stringify(element.getAttribute('data-guid'))) {\n filteredElements_1.push(element);\n }\n });\n });\n if (filteredElements_1.length > 0) {\n var selectedElement = isReverse ? filteredElements_1[filteredElements_1.length - 1] : filteredElements_1[0];\n var focusElements = this.getAppointmentElementsByGuid(selectedElement.getAttribute('data-guid'));\n this.parent.eventBase.addSelectedAppointments(focusElements, focusElements[focusElements.length - 1]);\n (focusElements[focusElements.length - 1]).focus();\n }\n }\n };\n KeyboardInteraction.prototype.getAllDayCells = function (cells) {\n var allDayRow = this.parent.getAllDayRow();\n if (!allDayRow) {\n return [];\n }\n var startCell = cells[0];\n var endCell = cells[cells.length - 1];\n var start = this.parent.getCellDetails(startCell);\n var end = this.parent.getCellDetails(endCell);\n if (end.endTime.getTime() - start.startTime.getTime() >= util.MS_PER_DAY) {\n var allDayCells = [].slice.call(allDayRow.cells);\n return allDayCells.slice(startCell.cellIndex, endCell.cellIndex + 1);\n }\n return [];\n };\n KeyboardInteraction.prototype.getAppointmentElements = function () {\n return [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_CLASS));\n };\n KeyboardInteraction.prototype.getAppointmentElementsByGuid = function (guid) {\n return [].slice.call(this.parent.element.querySelectorAll('div[data-guid=\"' + guid + '\"]'));\n };\n KeyboardInteraction.prototype.getUniqueAppointmentElements = function () {\n var appointments = this.getAppointmentElements();\n var appointmentElements = [];\n appointments.map(function (value) {\n return value.getAttribute('data-guid');\n }).filter(function (value, index, self) {\n if (self.indexOf(value) === index) {\n appointmentElements.push(appointments[index]);\n }\n });\n return appointmentElements;\n };\n KeyboardInteraction.prototype.getWorkCellFromAppointmentElement = function (target) {\n var selectedObject = this.parent.eventBase.getEventByGuid(target.getAttribute('data-guid'));\n return this.parent.eventBase.selectWorkCellByTime([selectedObject]);\n };\n KeyboardInteraction.prototype.processViewNavigation = function (e) {\n var index = parseInt(e.key, 10) - 1;\n if (index < this.parent.views.length) {\n var view = this.parent.viewCollections[index].option;\n this.parent.changeView(view, e, undefined, index);\n if (this.parent.headerModule) {\n this.parent.headerModule.element.querySelector('.e-active-view button').focus();\n }\n }\n };\n KeyboardInteraction.prototype.processUp = function (e, isMultiple) {\n if ((isMultiple && this.parent.currentView === 'MonthAgenda')) {\n return;\n }\n var target = (e.target);\n var selectedElements = this.parent.getSelectedElements();\n var selectedEventElements = this.parent.eventBase.getSelectedAppointments();\n var moreEventWrapper = this.parent.element.querySelector('.' + cls.MORE_POPUP_WRAPPER_CLASS);\n var quickPopupWrapper = this.parent.element.querySelector('.' + cls.POPUP_WRAPPER_CLASS);\n if (selectedElements.length > 0 && !e.target.classList.contains(cls.WORK_CELLS_CLASS)) {\n target = selectedElements[selectedElements.length - 1];\n }\n if (selectedEventElements.length > 0 && !moreEventWrapper.classList.contains(cls.POPUP_OPEN) &&\n !quickPopupWrapper.classList.contains(cls.POPUP_OPEN) &&\n ['Day', 'Week', 'WorkWeek', 'Month'].indexOf(this.parent.currentView) !== -1) {\n target = this.getWorkCellFromAppointmentElement(selectedEventElements[selectedEventElements.length - 1]);\n this.parent.eventBase.removeSelectedAppointmentClass();\n }\n if (target.classList.contains(cls.WORK_CELLS_CLASS) && !this.parent.element.querySelector('.' + cls.POPUP_OPEN)) {\n var tableEle = this.parent.getContentTable();\n var curRowIndex = target.parentNode.sectionRowIndex;\n if (curRowIndex > 0 && curRowIndex < tableEle.rows.length) {\n this.selectCells(isMultiple, tableEle.rows[curRowIndex - 1].cells[target.cellIndex]);\n }\n }\n else if (this.parent.currentView === 'Agenda' || this.parent.currentView === 'MonthAgenda') {\n this.selectAppointment(true, target);\n }\n };\n KeyboardInteraction.prototype.processDown = function (e, isMultiple) {\n if ((isMultiple && this.parent.currentView === 'MonthAgenda')) {\n return;\n }\n var target = (e.target);\n var selectedCells = this.parent.getSelectedElements();\n var selectedElements = this.parent.eventBase.getSelectedAppointments();\n var moreEventWrapper = this.parent.element.querySelector('.' + cls.MORE_POPUP_WRAPPER_CLASS);\n var quickPopupWrapper = this.parent.element.querySelector('.' + cls.POPUP_WRAPPER_CLASS);\n if (selectedCells.length > 0 && !e.target.classList.contains(cls.WORK_CELLS_CLASS)) {\n target = selectedCells[selectedCells.length - 1];\n }\n if (selectedElements.length > 0 && !moreEventWrapper.classList.contains(cls.POPUP_OPEN) &&\n !quickPopupWrapper.classList.contains(cls.POPUP_OPEN) &&\n ['Day', 'Week', 'WorkWeek', 'Month'].indexOf(this.parent.currentView) !== -1) {\n target = this.getWorkCellFromAppointmentElement(selectedElements[selectedElements.length - 1]);\n this.parent.eventBase.removeSelectedAppointmentClass();\n }\n var tableEle = this.parent.getContentTable();\n if (target.classList.contains(cls.WORK_CELLS_CLASS) && !this.parent.element.querySelector('.' + cls.POPUP_OPEN)) {\n var curRowIndex = target.parentNode.sectionRowIndex;\n if (curRowIndex >= 0 && curRowIndex < tableEle.rows.length - 1) {\n this.selectCells(isMultiple, tableEle.rows[curRowIndex + 1].cells[target.cellIndex]);\n }\n }\n else if (this.parent.currentView === 'Agenda' || this.parent.currentView === 'MonthAgenda') {\n this.selectAppointment(false, target);\n }\n };\n KeyboardInteraction.prototype.processLeftRight = function (target, isMultiple) {\n var tableEle = this.parent.getContentTable();\n var curRowIndex = target.parentNode.sectionRowIndex;\n var key = {\n element: tableEle,\n rowIndex: curRowIndex,\n columnIndex: target.cellIndex,\n maxIndex: tableEle.rows[curRowIndex].cells.length\n };\n return key;\n };\n KeyboardInteraction.prototype.isCancelLeftRightAction = function (isMultiple) {\n if (this.parent.currentView === 'Agenda' || (isMultiple && this.parent.currentView === 'MonthAgenda')) {\n return true;\n }\n var moreEventWrapper = this.parent.element.querySelector('.' + cls.MORE_POPUP_WRAPPER_CLASS);\n var quickPopupWrapper = this.parent.element.querySelector('.' + cls.POPUP_WRAPPER_CLASS);\n if (moreEventWrapper.classList.contains(cls.POPUP_OPEN) || quickPopupWrapper.classList.contains(cls.POPUP_OPEN)) {\n return true;\n }\n return false;\n };\n KeyboardInteraction.prototype.processRight = function (e, isMultiple) {\n if (this.isCancelLeftRightAction(isMultiple)) {\n return;\n }\n var selectedCells = this.parent.getSelectedElements();\n var targetCell;\n var selectedAppointments = this.parent.eventBase.getSelectedAppointments();\n var target = (e.target);\n if (selectedCells.length > 0 && !target.classList.contains(cls.WORK_CELLS_CLASS) &&\n !target.classList.contains(cls.ALLDAY_CELLS_CLASS)) {\n target = selectedCells[selectedCells.length - 1];\n }\n if (selectedAppointments.length > 0) {\n target = this.getWorkCellFromAppointmentElement(selectedAppointments[selectedAppointments.length - 1]);\n this.parent.eventBase.removeSelectedAppointmentClass();\n }\n if (target.classList.contains(cls.WORK_CELLS_CLASS)) {\n var key = this.processLeftRight(target, isMultiple);\n if (key.columnIndex >= 0 && key.columnIndex < key.maxIndex - 1) {\n targetCell = this.calculateNextPrevDate(target, key.element.rows[key.rowIndex].cells[target.cellIndex + 1], 'right');\n if (!isNullOrUndefined(targetCell)) {\n this.selectCells(isMultiple, targetCell);\n }\n }\n else if (key.columnIndex === key.maxIndex - 1) {\n if (!this.isInverseTableSelect() && key.rowIndex < key.element.rows.length - 1) {\n targetCell = this.calculateNextPrevDate(target, key.element.rows[key.rowIndex + 1].cells[0], 'right');\n if (!isNullOrUndefined(targetCell)) {\n this.selectCells(isMultiple, targetCell);\n }\n }\n else if (!isMultiple) {\n var rowIndex = this.isInverseTableSelect() ? key.rowIndex : 0;\n this.parent.changeDate(this.parent.activeView.getNextPreviousDate('next'), e);\n var tableEle = this.parent.getContentTable();\n this.selectCells(false, tableEle.rows[rowIndex].cells[0]);\n }\n }\n }\n else if (target.classList.contains(cls.ALLDAY_CELLS_CLASS)) {\n var curColIndex = target.cellIndex;\n var allDayRow = this.parent.getAllDayRow();\n var maxColIndex = allDayRow.cells.length;\n if (curColIndex >= 0 && curColIndex < maxColIndex - 1) {\n this.selectCells(isMultiple, allDayRow.cells[curColIndex + 1]);\n }\n else if (curColIndex === maxColIndex - 1 && !isMultiple) {\n this.parent.changeDate(this.parent.activeView.getNextPreviousDate('next'), e);\n var allDayRow_1 = this.parent.getAllDayRow();\n this.selectCells(false, allDayRow_1.cells[0]);\n }\n }\n };\n KeyboardInteraction.prototype.processLeft = function (e, isMultiple) {\n if (this.isCancelLeftRightAction(isMultiple)) {\n return;\n }\n var target = (e.target);\n var selectedCells = this.parent.getSelectedElements();\n var targetCell;\n if (selectedCells.length > 0 && !target.classList.contains(cls.WORK_CELLS_CLASS) &&\n !target.classList.contains(cls.ALLDAY_CELLS_CLASS)) {\n target = selectedCells[selectedCells.length - 1];\n }\n var selectedElements = this.parent.eventBase.getSelectedAppointments();\n if (selectedElements.length > 0) {\n target = this.getWorkCellFromAppointmentElement(selectedElements[selectedElements.length - 1]);\n this.parent.eventBase.removeSelectedAppointmentClass();\n }\n var initialId = this.initialTarget.getAttribute('data-group-index');\n if (target.classList.contains(cls.WORK_CELLS_CLASS)) {\n var key = this.processLeftRight(target, isMultiple);\n if (key.columnIndex > 0 && key.columnIndex < key.maxIndex) {\n targetCell = this.calculateNextPrevDate(target, key.element.rows[key.rowIndex].cells[target.cellIndex - 1], 'left');\n if (!isNullOrUndefined(targetCell)) {\n this.selectCells(isMultiple, targetCell);\n }\n }\n else if (key.columnIndex === 0) {\n if (!this.isInverseTableSelect() && key.rowIndex > 0) {\n targetCell = this.calculateNextPrevDate(target, key.element.rows[key.rowIndex - 1].cells[key.maxIndex - 1], 'left');\n if (!isNullOrUndefined(targetCell)) {\n this.selectCells(isMultiple, targetCell);\n }\n }\n else if (!isMultiple) {\n this.parent.changeDate(this.parent.activeView.getNextPreviousDate('previous'), e);\n var tableEle = this.parent.getContentTable();\n var rowIndex = this.isInverseTableSelect() ? key.rowIndex : tableEle.rows.length - 1;\n this.selectCells(false, tableEle.rows[rowIndex].cells[key.maxIndex - 1]);\n }\n }\n }\n else if (target.classList.contains(cls.ALLDAY_CELLS_CLASS)) {\n var curColIndex = target.cellIndex;\n var allDayRow = this.parent.getAllDayRow();\n var maxColIndex = allDayRow.cells.length;\n if (curColIndex > 0 && curColIndex < maxColIndex) {\n this.selectCells(isMultiple, allDayRow.cells[curColIndex - 1]);\n }\n else if (curColIndex === 0 && !isMultiple) {\n this.parent.changeDate(this.parent.activeView.getNextPreviousDate('previous'), e);\n var allDayRow_2 = this.parent.getAllDayRow();\n this.selectCells(false, allDayRow_2.cells[maxColIndex - 1]);\n }\n }\n };\n KeyboardInteraction.prototype.calculateNextPrevDate = function (currentCell, target, type) {\n var initialId = this.initialTarget.getAttribute('data-group-index');\n if (this.parent.activeViewOptions.group.resources.length > 0 && this.parent.currentView === 'Month') {\n if (target.getAttribute('data-group-index') !== initialId) {\n var currentDate = new Date(parseInt(currentCell.getAttribute('data-date'), 10));\n var nextPrevDate = (type === 'right') ? new Date(currentDate.setDate(currentDate.getDate() + 1))\n : new Date(currentDate.setDate(currentDate.getDate() - 1));\n target = [].slice.call(this.parent.element.querySelectorAll('td[data-date=\"'\n + nextPrevDate.getTime().toString() + '\"]' + '[data-group-index=\"' + initialId + '\"]'))[0];\n }\n }\n return target;\n };\n KeyboardInteraction.prototype.getFocusableElements = function (container) {\n var queryString = 'a[href]:not([tabindex=\"-1\"]),input:not([disabled]):not([tabindex=\"-1\"]),' +\n 'textarea:not([disabled]):not([tabindex=\"-1\"]),button:not([disabled]):not([tabindex=\"-1\"]),' +\n 'select:not([disabled]):not([tabindex=\"-1\"]),[tabindex]:not([tabindex=\"-1\"]),[contentEditable=true]:not([tabindex=\"-1\"])';\n return [].slice.call(container.querySelectorAll(queryString));\n };\n KeyboardInteraction.prototype.processTabOnPopup = function (e, popupElement) {\n var _this = this;\n var focusableElements = this.getFocusableElements(popupElement);\n focusableElements = focusableElements.filter(function (element) {\n var footerEle = _this.parent.element.querySelector('.' + cls.POPUP_FOOTER_CLASS);\n if (footerEle && footerEle.offsetParent) {\n return !(element.classList.contains(cls.EDIT_CLASS) || element.classList.contains(cls.DELETE_CLASS));\n }\n else {\n return !(element.classList.contains(cls.EDIT_EVENT_CLASS) || element.classList.contains(cls.DELETE_EVENT_CLASS));\n }\n });\n var firstEle = focusableElements[0];\n var lastEle = focusableElements[focusableElements.length - 1];\n if (!isNullOrUndefined(lastEle) && document.activeElement === lastEle && !e.shiftKey) {\n e.preventDefault();\n firstEle.focus();\n }\n if (!isNullOrUndefined(firstEle) && document.activeElement === firstEle && e.shiftKey) {\n e.preventDefault();\n lastEle.focus();\n }\n };\n KeyboardInteraction.prototype.processTab = function (e, isReverse) {\n var target = e.target;\n if (closest(target, '.' + cls.MORE_POPUP_WRAPPER_CLASS)) {\n var moreEventWrapper = this.parent.element.querySelector('.' + cls.MORE_POPUP_WRAPPER_CLASS);\n if (isNullOrUndefined(moreEventWrapper) || !moreEventWrapper.classList.contains(cls.POPUP_OPEN)) {\n return;\n }\n this.parent.eventBase.removeSelectedAppointmentClass();\n this.processTabOnPopup(e, moreEventWrapper);\n return;\n }\n if (closest(target, '.' + cls.POPUP_WRAPPER_CLASS)) {\n var quickPopupWrapper = this.parent.element.querySelector('.' + cls.POPUP_WRAPPER_CLASS);\n if (isNullOrUndefined(quickPopupWrapper) || !quickPopupWrapper.classList.contains(cls.POPUP_OPEN)) {\n return;\n }\n this.processTabOnPopup(e, quickPopupWrapper);\n return;\n }\n if (target.classList.contains(cls.ROOT)) {\n this.parent.eventBase.removeSelectedAppointmentClass();\n return;\n }\n if (target.classList.contains(cls.APPOINTMENT_CLASS)) {\n var appointments = [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_CLASS));\n var selectedAppointments = this.parent.eventBase.getSelectedAppointments();\n if (selectedAppointments.length > 0) {\n target = selectedAppointments[selectedAppointments.length - 1];\n }\n this.parent.eventBase.removeSelectedAppointmentClass();\n if (!isReverse && target.getAttribute('data-guid') === appointments[appointments.length - 1].getAttribute('data-guid') ||\n isReverse && target.getAttribute('data-guid') === appointments[0].getAttribute('data-guid')) {\n return;\n }\n if (this.parent.currentView === 'Agenda' || this.parent.currentView === 'MonthAgenda') {\n this.selectAppointment(isReverse, target);\n e.preventDefault();\n }\n return;\n }\n var selectedCells = this.parent.getSelectedElements();\n if (selectedCells.length > 0 && !target.classList.contains(cls.APPOINTMENT_CLASS)) {\n target = selectedCells[selectedCells.length - 1];\n this.selectAppointmentElementFromWorkCell(isReverse, target);\n e.preventDefault();\n return;\n }\n };\n KeyboardInteraction.prototype.processDelete = function (e) {\n if (document.activeElement.classList.contains(cls.APPOINTMENT_CLASS)) {\n addClass([document.activeElement], cls.APPOINTMENT_BORDER);\n this.parent.activeEventData = this.parent.eventBase.getSelectedEvents();\n this.parent.quickPopup.deleteClick();\n }\n };\n KeyboardInteraction.prototype.processEscape = function () {\n this.parent.quickPopup.onClosePopup();\n this.parent.quickPopup.morePopup.hide();\n if (this.parent.headerModule) {\n this.parent.headerModule.hideHeaderPopup();\n }\n };\n /**\n * Get module name.\n */\n KeyboardInteraction.prototype.getModuleName = function () {\n return 'keyboard';\n };\n /**\n * To destroy the keyboard module.\n * @return {void}\n * @private\n */\n KeyboardInteraction.prototype.destroy = function () {\n this.removeEventListener();\n this.keyboardModule.destroy();\n };\n return KeyboardInteraction;\n}());\nexport { KeyboardInteraction };\n","import { Query, DataManager } from '@syncfusion/ej2-data';\n/**\n * data module is used to generate query and data source.\n * @hidden\n */\nvar Data = /** @class */ (function () {\n /**\n * Constructor for data module\n * @private\n */\n function Data(dataSource, query) {\n this.initDataManager(dataSource, query);\n }\n /**\n * The function used to initialize dataManager and query\n * @return {void}\n * @private\n */\n Data.prototype.initDataManager = function (dataSource, query) {\n this.dataManager = dataSource instanceof DataManager ? dataSource : new DataManager(dataSource);\n this.query = query instanceof Query ? query : new Query();\n };\n /**\n * The function used to generate updated Query from schedule model\n * @return {void}\n * @private\n */\n Data.prototype.generateQuery = function (startDate, endDate) {\n var query = this.query.clone();\n if (startDate) {\n query.addParams('StartDate', startDate.toISOString());\n }\n if (endDate) {\n query.addParams('EndDate', endDate.toISOString());\n }\n return query;\n };\n /**\n * The function used to get dataSource by executing given Query\n * @param {Query} query - A Query that specifies to generate dataSource\n * @return {void}\n * @private\n */\n Data.prototype.getData = function (query) {\n return this.dataManager.executeQuery(query);\n };\n return Data;\n}());\nexport { Data };\n","/**\n * Time zone\n */\nvar Timezone = /** @class */ (function () {\n function Timezone() {\n }\n Timezone.prototype.offset = function (date, timezone) {\n var localOffset = date.getTimezoneOffset();\n try {\n var convertedDate = new Date(date.toLocaleString('en-US', { timeZone: timezone }));\n if (!isNaN(convertedDate.getTime())) {\n return ((date.getTime() - convertedDate.getTime()) / 60000) + localOffset;\n }\n return 0;\n }\n catch (error) {\n return 0;\n }\n };\n Timezone.prototype.convert = function (date, fromOffset, toOffset) {\n if (typeof fromOffset === 'string') {\n fromOffset = this.offset(date, fromOffset);\n }\n if (typeof toOffset === 'string') {\n toOffset = this.offset(date, toOffset);\n }\n var fromLocalOffset = date.getTimezoneOffset();\n date = new Date(date.getTime() + (fromOffset - toOffset) * 60000);\n var toLocalOffset = date.getTimezoneOffset();\n return new Date(date.getTime() + (toLocalOffset - fromLocalOffset) * 60000);\n };\n Timezone.prototype.add = function (date, timezone) {\n return this.convert(date, date.getTimezoneOffset(), timezone);\n };\n Timezone.prototype.remove = function (date, timezone) {\n return this.convert(date, timezone, date.getTimezoneOffset());\n };\n Timezone.prototype.removeLocalOffset = function (date) {\n return new Date(+date - (date.getTimezoneOffset() * 60000));\n };\n return Timezone;\n}());\nexport { Timezone };\nexport var localTimezoneName = Intl.DateTimeFormat().resolvedOptions().timeZone || 'UTC';\nexport var timezoneData = [\n { Value: 'Pacific/Niue', Text: '(UTC-11:00) Niue' },\n { Value: 'Pacific/Pago_Pago', Text: '(UTC-11:00) Pago Pago' },\n { Value: 'Pacific/Honolulu', Text: '(UTC-10:00) Hawaii Time' },\n { Value: 'Pacific/Rarotonga', Text: '(UTC-10:00) Rarotonga' },\n { Value: 'Pacific/Tahiti', Text: '(UTC-10:00) Tahiti' },\n { Value: 'Pacific/Marquesas', Text: '(UTC-09:30) Marquesas' },\n { Value: 'America/Anchorage', Text: '(UTC-09:00) Alaska Time' },\n { Value: 'Pacific/Gambier', Text: '(UTC-09:00) Gambier' },\n { Value: 'America/Los_Angeles', Text: '(UTC-08:00) Pacific Time' },\n { Value: 'America/Tijuana', Text: '(UTC-08:00) Pacific Time - Tijuana' },\n { Value: 'America/Vancouver', Text: '(UTC-08:00) Pacific Time - Vancouver' },\n { Value: 'America/Whitehorse', Text: '(UTC-08:00) Pacific Time - Whitehorse' },\n { Value: 'Pacific/Pitcairn', Text: '(UTC-08:00) Pitcairn' },\n { Value: 'America/Denver', Text: '(UTC-07:00) Mountain Time' },\n { Value: 'America/Phoenix', Text: '(UTC-07:00) Mountain Time - Arizona' },\n { Value: 'America/Mazatlan', Text: '(UTC-07:00) Mountain Time - Chihuahua, Mazatlan' },\n { Value: 'America/Dawson_Creek', Text: '(UTC-07:00) Mountain Time - Dawson Creek' },\n { Value: 'America/Edmonton', Text: '(UTC-07:00) Mountain Time - Edmonton' },\n { Value: 'America/Hermosillo', Text: '(UTC-07:00) Mountain Time - Hermosillo' },\n { Value: 'America/Yellowknife', Text: '(UTC-07:00) Mountain Time - Yellowknife' },\n { Value: 'America/Belize', Text: '(UTC-06:00) Belize' },\n { Value: 'America/Chicago', Text: '(UTC-06:00) Central Time' },\n { Value: 'America/Mexico_City', Text: '(UTC-06:00) Central Time - Mexico City' },\n { Value: 'America/Regina', Text: '(UTC-06:00) Central Time - Regina' },\n { Value: 'America/Tegucigalpa', Text: '(UTC-06:00) Central Time - Tegucigalpa' },\n { Value: 'America/Winnipeg', Text: '(UTC-06:00) Central Time - Winnipeg' },\n { Value: 'America/Costa_Rica', Text: '(UTC-06:00) Costa Rica' },\n { Value: 'America/El_Salvador', Text: '(UTC-06:00) El Salvador' },\n { Value: 'Pacific/Galapagos', Text: '(UTC-06:00) Galapagos' },\n { Value: 'America/Guatemala', Text: '(UTC-06:00) Guatemala' },\n { Value: 'America/Managua', Text: '(UTC-06:00) Managua' },\n { Value: 'America/Cancun', Text: '(UTC-05:00) America Cancun' },\n { Value: 'America/Bogota', Text: '(UTC-05:00) Bogota' },\n { Value: 'Pacific/Easter', Text: '(UTC-05:00) Easter Island' },\n { Value: 'America/New_York', Text: '(UTC-05:00) Eastern Time' },\n { Value: 'America/Iqaluit', Text: '(UTC-05:00) Eastern Time - Iqaluit' },\n { Value: 'America/Toronto', Text: '(UTC-05:00) Eastern Time - Toronto' },\n { Value: 'America/Guayaquil', Text: '(UTC-05:00) Guayaquil' },\n { Value: 'America/Havana', Text: '(UTC-05:00) Havana' },\n { Value: 'America/Jamaica', Text: '(UTC-05:00) Jamaica' },\n { Value: 'America/Lima', Text: '(UTC-05:00) Lima' },\n { Value: 'America/Nassau', Text: '(UTC-05:00) Nassau' },\n { Value: 'America/Panama', Text: '(UTC-05:00) Panama' },\n { Value: 'America/Port-au-Prince', Text: '(UTC-05:00) Port-au-Prince' },\n { Value: 'America/Rio_Branco', Text: '(UTC-05:00) Rio Branco' },\n { Value: 'America/Halifax', Text: '(UTC-04:00) Atlantic Time - Halifax' },\n { Value: 'America/Barbados', Text: '(UTC-04:00) Barbados' },\n { Value: 'Atlantic/Bermuda', Text: '(UTC-04:00) Bermuda' },\n { Value: 'America/Boa_Vista', Text: '(UTC-04:00) Boa Vista' },\n { Value: 'America/Caracas', Text: '(UTC-04:00) Caracas' },\n { Value: 'America/Curacao', Text: '(UTC-04:00) Curacao' },\n { Value: 'America/Grand_Turk', Text: '(UTC-04:00) Grand Turk' },\n { Value: 'America/Guyana', Text: '(UTC-04:00) Guyana' },\n { Value: 'America/La_Paz', Text: '(UTC-04:00) La Paz' },\n { Value: 'America/Manaus', Text: '(UTC-04:00) Manaus' },\n { Value: 'America/Martinique', Text: '(UTC-04:00) Martinique' },\n { Value: 'America/Port_of_Spain', Text: '(UTC-04:00) Port of Spain' },\n { Value: 'America/Porto_Velho', Text: '(UTC-04:00) Porto Velho' },\n { Value: 'America/Puerto_Rico', Text: '(UTC-04:00) Puerto Rico' },\n { Value: 'America/Santo_Domingo', Text: '(UTC-04:00) Santo Domingo' },\n { Value: 'America/Thule', Text: '(UTC-04:00) Thule' },\n { Value: 'America/St_Johns', Text: '(UTC-03:30) Newfoundland Time - St. Johns' },\n { Value: 'America/Araguaina', Text: '(UTC-03:00) Araguaina' },\n { Value: 'America/Asuncion', Text: '(UTC-03:00) Asuncion' },\n { Value: 'America/Belem', Text: '(UTC-03:00) Belem' },\n { Value: 'America/Argentina/Buenos_Aires', Text: '(UTC-03:00) Buenos Aires' },\n { Value: 'America/Campo_Grande', Text: '(UTC-03:00) Campo Grande' },\n { Value: 'America/Cayenne', Text: '(UTC-03:00) Cayenne' },\n { Value: 'America/Cuiaba', Text: '(UTC-03:00) Cuiaba' },\n { Value: 'America/Fortaleza', Text: '(UTC-03:00) Fortaleza' },\n { Value: 'America/Godthab', Text: '(UTC-03:00) Godthab' },\n { Value: 'America/Maceio', Text: '(UTC-03:00) Maceio' },\n { Value: 'America/Miquelon', Text: '(UTC-03:00) Miquelon' },\n { Value: 'America/Montevideo', Text: '(UTC-03:00) Montevideo' },\n { Value: 'Antarctica/Palmer', Text: '(UTC-03:00) Palmer' },\n { Value: 'America/Paramaribo', Text: '(UTC-03:00) Paramaribo' },\n { Value: 'America/Punta_Arenas', Text: '(UTC-03:00) Punta Arenas' },\n { Value: 'America/Recife', Text: '(UTC-03:00) Recife' },\n { Value: 'Antarctica/Rothera', Text: '(UTC-03:00) Rothera' },\n { Value: 'America/Bahia', Text: '(UTC-03:00) Salvador' },\n { Value: 'America/Santiago', Text: '(UTC-03:00) Santiago' },\n { Value: 'Atlantic/Stanley', Text: '(UTC-03:00) Stanley' },\n { Value: 'America/Noronha', Text: '(UTC-02:00) Noronha' },\n { Value: 'America/Sao_Paulo', Text: '(UTC-02:00) Sao Paulo' },\n { Value: 'Atlantic/South_Georgia', Text: '(UTC-02:00) South Georgia' },\n { Value: 'Atlantic/Azores', Text: '(UTC-01:00) Azores' },\n { Value: 'Atlantic/Cape_Verde', Text: '(UTC-01:00) Cape Verde' },\n { Value: 'America/Scoresbysund', Text: '(UTC-01:00) Scoresbysund' },\n { Value: 'Africa/Abidjan', Text: '(UTC+00:00) Abidjan' },\n { Value: 'Africa/Accra', Text: '(UTC+00:00) Accra' },\n { Value: 'Africa/Bissau', Text: '(UTC+00:00) Bissau' },\n { Value: 'Atlantic/Canary', Text: '(UTC+00:00) Canary Islands' },\n { Value: 'Africa/Casablanca', Text: '(UTC+00:00) Casablanca' },\n { Value: 'America/Danmarkshavn', Text: '(UTC+00:00) Danmarkshavn' },\n { Value: 'Europe/Dublin', Text: '(UTC+00:00) Dublin' },\n { Value: 'Africa/El_Aaiun', Text: '(UTC+00:00) El Aaiun' },\n { Value: 'Atlantic/Faroe', Text: '(UTC+00:00) Faeroe' },\n { Value: 'Etc/UTC', Text: '(UTC+00:00) UTC (no daylight saving)' },\n { Value: 'Europe/Lisbon', Text: '(UTC+00:00) Lisbon' },\n { Value: 'Europe/London', Text: '(UTC+00:00) London' },\n { Value: 'Africa/Monrovia', Text: '(UTC+00:00) Monrovia' },\n { Value: 'Atlantic/Reykjavik', Text: '(UTC+00:00) Reykjavik' },\n { Value: 'UTC', Text: 'UTC' },\n { Value: 'Africa/Algiers', Text: '(UTC+01:00) Algiers' },\n { Value: 'Europe/Amsterdam', Text: '(UTC+01:00) Amsterdam' },\n { Value: 'Europe/Andorra', Text: '(UTC+01:00) Andorra' },\n { Value: 'Europe/Berlin', Text: '(UTC+01:00) Berlin' },\n { Value: 'Europe/Brussels', Text: '(UTC+01:00) Brussels' },\n { Value: 'Europe/Budapest', Text: '(UTC+01:00) Budapest' },\n { Value: 'Europe/Belgrade', Text: '(UTC+01:00) Central European Time - Belgrade' },\n { Value: 'Europe/Prague', Text: '(UTC+01:00) Central European Time - Prague' },\n { Value: 'Africa/Ceuta', Text: '(UTC+01:00) Ceuta' },\n { Value: 'Europe/Copenhagen', Text: '(UTC+01:00) Copenhagen' },\n { Value: 'Europe/Gibraltar', Text: '(UTC+01:00) Gibraltar' },\n { Value: 'Africa/Lagos', Text: '(UTC+01:00) Lagos' },\n { Value: 'Europe/Luxembourg', Text: '(UTC+01:00) Luxembourg' },\n { Value: 'Europe/Madrid', Text: '(UTC+01:00) Madrid' },\n { Value: 'Europe/Malta', Text: '(UTC+01:00) Malta' },\n { Value: 'Europe/Monaco', Text: '(UTC+01:00) Monaco' },\n { Value: 'Africa/Ndjamena', Text: '(UTC+01:00) Ndjamena' },\n { Value: 'Europe/Oslo', Text: '(UTC+01:00) Oslo' },\n { Value: 'Europe/Paris', Text: '(UTC+01:00) Paris' },\n { Value: 'Europe/Rome', Text: '(UTC+01:00) Rome' },\n { Value: 'Europe/Stockholm', Text: '(UTC+01:00) Stockholm' },\n { Value: 'Europe/Tirane', Text: '(UTC+01:00) Tirane' },\n { Value: 'Africa/Tunis', Text: '(UTC+01:00) Tunis' },\n { Value: 'Europe/Vienna', Text: '(UTC+01:00) Vienna' },\n { Value: 'Europe/Warsaw', Text: '(UTC+01:00) Warsaw' },\n { Value: 'Europe/Zurich', Text: '(UTC+01:00) Zurich' },\n { Value: 'Asia/Amman', Text: '(UTC+02:00) Amman' },\n { Value: 'Europe/Athens', Text: '(UTC+02:00) Athens' },\n { Value: 'Asia/Beirut', Text: '(UTC+02:00) Beirut' },\n { Value: 'Europe/Bucharest', Text: '(UTC+02:00) Bucharest' },\n { Value: 'Africa/Cairo', Text: '(UTC+02:00) Cairo' },\n { Value: 'Europe/Chisinau', Text: '(UTC+02:00) Chisinau' },\n { Value: 'Asia/Damascus', Text: '(UTC+02:00) Damascus' },\n { Value: 'Asia/Gaza', Text: '(UTC+02:00) Gaza' },\n { Value: 'Europe/Helsinki', Text: '(UTC+02:00) Helsinki' },\n { Value: 'Asia/Jerusalem', Text: '(UTC+02:00) Jerusalem' },\n { Value: 'Africa/Johannesburg', Text: '(UTC+02:00) Johannesburg' },\n { Value: 'Africa/Khartoum', Text: '(UTC+02:00) Khartoum' },\n { Value: 'Europe/Kiev', Text: '(UTC+02:00) Kiev' },\n { Value: 'Africa/Maputo', Text: '(UTC+02:00) Maputo' },\n { Value: 'Europe/Kaliningrad', Text: '(UTC+02:00) Moscow-01 - Kaliningrad' },\n { Value: 'Asia/Nicosia', Text: '(UTC+02:00) Nicosia' },\n { Value: 'Europe/Riga', Text: '(UTC+02:00) Riga' },\n { Value: 'Europe/Sofia', Text: '(UTC+02:00) Sofia' },\n { Value: 'Europe/Tallinn', Text: '(UTC+02:00) Tallinn' },\n { Value: 'Africa/Tripoli', Text: '(UTC+02:00) Tripoli' },\n { Value: 'Europe/Vilnius', Text: '(UTC+02:00) Vilnius' },\n { Value: 'Africa/Windhoek', Text: '(UTC+02:00) Windhoek' },\n { Value: 'Asia/Baghdad', Text: '(UTC+03:00) Baghdad' },\n { Value: 'Europe/Istanbul', Text: '(UTC+03:00) Istanbul' },\n { Value: 'Europe/Minsk', Text: '(UTC+03:00) Minsk' },\n { Value: 'Europe/Moscow', Text: '(UTC+03:00) Moscow+00 - Moscow' },\n { Value: 'Africa/Nairobi', Text: '(UTC+03:00) Nairobi' },\n { Value: 'Asia/Qatar', Text: '(UTC+03:00) Qatar' },\n { Value: 'Asia/Riyadh', Text: '(UTC+03:00) Riyadh' },\n { Value: 'Antarctica/Syowa', Text: '(UTC+03:00) Syowa' },\n { Value: 'Asia/Tehran', Text: '(UTC+03:30) Tehran' },\n { Value: 'Asia/Baku', Text: '(UTC+04:00) Baku' },\n { Value: 'Asia/Dubai', Text: '(UTC+04:00) Dubai' },\n { Value: 'Indian/Mahe', Text: '(UTC+04:00) Mahe' },\n { Value: 'Indian/Mauritius', Text: '(UTC+04:00) Mauritius' },\n { Value: 'Europe/Samara', Text: '(UTC+04:00) Moscow+01 - Samara' },\n { Value: 'Indian/Reunion', Text: '(UTC+04:00) Reunion' },\n { Value: 'Asia/Tbilisi', Text: '(UTC+04:00) Tbilisi' },\n { Value: 'Asia/Yerevan', Text: '(UTC+04:00) Yerevan' },\n { Value: 'Asia/Kabul', Text: '(UTC+04:30) Kabul' },\n { Value: 'Asia/Aqtau', Text: '(UTC+05:00) Aqtau' },\n { Value: 'Asia/Aqtobe', Text: '(UTC+05:00) Aqtobe' },\n { Value: 'Asia/Ashgabat', Text: '(UTC+05:00) Ashgabat' },\n { Value: 'Asia/Dushanbe', Text: '(UTC+05:00) Dushanbe' },\n { Value: 'Asia/Karachi', Text: '(UTC+05:00) Karachi' },\n { Value: 'Indian/Kerguelen', Text: '(UTC+05:00) Kerguelen' },\n { Value: 'Indian/Maldives', Text: '(UTC+05:00) Maldives' },\n { Value: 'Antarctica/Mawson', Text: '(UTC+05:00) Mawson' },\n { Value: 'Asia/Yekaterinburg', Text: '(UTC+05:00) Moscow+02 - Yekaterinburg' },\n { Value: 'Asia/Tashkent', Text: '(UTC+05:00) Tashkent' },\n { Value: 'Asia/Colombo', Text: '(UTC+05:30) Colombo' },\n { Value: 'Asia/Kolkata', Text: '(UTC+05:30) India Standard Time' },\n { Value: 'Asia/Katmandu', Text: '(UTC+05:45) Katmandu' },\n { Value: 'Asia/Almaty', Text: '(UTC+06:00) Almaty' },\n { Value: 'Asia/Bishkek', Text: '(UTC+06:00) Bishkek' },\n { Value: 'Indian/Chagos', Text: '(UTC+06:00) Chagos' },\n { Value: 'Asia/Dhaka', Text: '(UTC+06:00) Dhaka' },\n { Value: 'Asia/Omsk', Text: '(UTC+06:00) Moscow+03 - Omsk' },\n { Value: 'Asia/Thimphu', Text: '(UTC+06:00) Thimphu' },\n { Value: 'Antarctica/Vostok', Text: '(UTC+06:00) Vostok' },\n { Value: 'Indian/Cocos', Text: '(UTC+06:30) Cocos' },\n { Value: 'Asia/Yangon', Text: '(UTC+06:30) Rangoon' },\n { Value: 'Asia/Bangkok', Text: '(UTC+07:00) Bangkok' },\n { Value: 'Indian/Christmas', Text: '(UTC+07:00) Christmas' },\n { Value: 'Antarctica/Davis', Text: '(UTC+07:00) Davis' },\n { Value: 'Asia/Saigon', Text: '(UTC+07:00) Hanoi' },\n { Value: 'Asia/Hovd', Text: '(UTC+07:00) Hovd' },\n { Value: 'Asia/Jakarta', Text: '(UTC+07:00) Jakarta' },\n { Value: 'Asia/Krasnoyarsk', Text: '(UTC+07:00) Moscow+04 - Krasnoyarsk' },\n { Value: 'Asia/Brunei', Text: '(UTC+08:00) Brunei' },\n { Value: 'Asia/Shanghai', Text: '(UTC+08:00) China Time - Beijing' },\n { Value: 'Asia/Choibalsan', Text: '(UTC+08:00) Choibalsan' },\n { Value: 'Asia/Hong_Kong', Text: '(UTC+08:00) Hong Kong' },\n { Value: 'Asia/Kuala_Lumpur', Text: '(UTC+08:00) Kuala Lumpur' },\n { Value: 'Asia/Macau', Text: '(UTC+08:00) Macau' },\n { Value: 'Asia/Makassar', Text: '(UTC+08:00) Makassar' },\n { Value: 'Asia/Manila', Text: '(UTC+08:00) Manila' },\n { Value: 'Asia/Irkutsk', Text: '(UTC+08:00) Moscow+05 - Irkutsk' },\n { Value: 'Asia/Singapore', Text: '(UTC+08:00) Singapore' },\n { Value: 'Asia/Taipei', Text: '(UTC+08:00) Taipei' },\n { Value: 'Asia/Ulaanbaatar', Text: '(UTC+08:00) Ulaanbaatar' },\n { Value: 'Australia/Perth', Text: '(UTC+08:00) Western Time - Perth' },\n { Value: 'Asia/Pyongyang', Text: '(UTC+08:30) Pyongyang' },\n { Value: 'Asia/Dili', Text: '(UTC+09:00) Dili' },\n { Value: 'Asia/Jayapura', Text: '(UTC+09:00) Jayapura' },\n { Value: 'Asia/Yakutsk', Text: '(UTC+09:00) Moscow+06 - Yakutsk' },\n { Value: 'Pacific/Palau', Text: '(UTC+09:00) Palau' },\n { Value: 'Asia/Seoul', Text: '(UTC+09:00) Seoul' },\n { Value: 'Asia/Tokyo', Text: '(UTC+09:00) Tokyo' },\n { Value: 'Australia/Darwin', Text: '(UTC+09:30) Central Time - Darwin' },\n { Value: 'Antarctica/DumontDUrville', Text: '(UTC+10:00) Dumont D\"Urville' },\n { Value: 'Australia/Brisbane', Text: '(UTC+10:00) Eastern Time - Brisbane' },\n { Value: 'Pacific/Guam', Text: '(UTC+10:00) Guam' },\n { Value: 'Asia/Vladivostok', Text: '(UTC+10:00) Moscow+07 - Vladivostok' },\n { Value: 'Pacific/Port_Moresby', Text: '(UTC+10:00) Port Moresby' },\n { Value: 'Pacific / Chuuk', Text: '(UTC+10:00) Truk' },\n { Value: 'Australia/Adelaide', Text: '(UTC+10:30) Central Time - Adelaide' },\n { Value: 'Antarctica/Casey', Text: '(UTC+11:00) Casey' },\n { Value: 'Australia/Hobart', Text: '(UTC+11:00) Eastern Time - Hobart' },\n { Value: 'Australia/Sydney', Text: '(UTC+11:00) Eastern Time - Melbourne, Sydney' },\n { Value: 'Pacific/Efate', Text: '(UTC+11:00) Efate' },\n { Value: 'Pacific/Guadalcanal', Text: '(UTC+11:00) Guadalcanal' },\n { Value: 'Pacific/Kosrae', Text: '(UTC+11:00) Kosrae' },\n { Value: 'Asia/Magadan', Text: '(UTC+11:00) Moscow+08 - Magadan' },\n { Value: 'Pacific / Norfolk', Text: '(UTC+11:00) Norfolk' },\n { Value: 'Pacific/Noumea', Text: '(UTC+11:00) Noumea' },\n { Value: 'Pacific/Pohnpei', Text: '(UTC+11:00) Ponape' },\n { Value: 'Pacific/Funafuti', Text: '(UTC+12:00) Funafuti' },\n { Value: 'Pacific/Kwajalein', Text: '(UTC+12:00) Kwajalein' },\n { Value: 'Pacific/Majuro', Text: '(UTC+12:00) Majuro' },\n { Value: 'Asia/Kamchatka', Text: '(UTC+12:00) Moscow+09 - Petropavlovsk - Kamchatskiy' },\n { Value: 'Pacific / Nauru', Text: '(UTC+12:00) Nauru' },\n { Value: 'Pacific/Tarawa', Text: '(UTC+12:00) Tarawa' },\n { Value: 'Pacific/Wake', Text: '(UTC+12:00) Wake' },\n { Value: 'Pacific/Wallis', Text: '(UTC+12:00) Wallis' },\n { Value: 'Pacific/Auckland', Text: '(UTC+13:00) Auckland' },\n { Value: 'Pacific/Enderbury', Text: '(UTC+13:00) Enderbury' },\n { Value: 'Pacific/Fakaofo', Text: '(UTC+13:00) Fakaofo' },\n { Value: 'Pacific/Fiji', Text: '(UTC+13:00) Fiji' },\n { Value: 'Pacific/Tongatapu', Text: '(UTC+13:00) Tongatapu' },\n { Value: 'Pacific/Apia', Text: '(UTC+14:00) Apia' },\n { Value: 'Pacific/Kiritimati', Text: '(UTC+14:00) Kiritimati' }\n];\n","import { isNullOrUndefined, closest, addClass, extend, EventHandler, removeClass } from '@syncfusion/ej2-base';\nimport { DataManager, Query, Predicate } from '@syncfusion/ej2-data';\nimport { Timezone } from '../timezone/timezone';\nimport { generate } from '../../recurrence-editor/date-generator';\nimport * as util from '../base/util';\nimport * as cls from '../base/css-constant';\nimport * as event from '../base/constant';\n/**\n * EventBase for appointment rendering\n */\nvar EventBase = /** @class */ (function () {\n /**\n * Constructor for EventBase\n */\n function EventBase(parent) {\n this.slots = [];\n this.parent = parent;\n this.timezone = new Timezone();\n }\n EventBase.prototype.processData = function (events, timeZonePropChanged, oldTimezone) {\n var start = this.parent.activeView.startDate();\n var end = this.parent.activeView.endDate();\n var fields = this.parent.eventFields;\n this.parent.eventsProcessed = [];\n var processed = [];\n var temp = 1;\n var generateID = false;\n if (events.length > 0 && isNullOrUndefined(events[0][fields.id])) {\n generateID = true;\n }\n for (var _i = 0, events_1 = events; _i < events_1.length; _i++) {\n var event_1 = events_1[_i];\n if (generateID) {\n event_1[fields.id] = temp++;\n }\n if (typeof event_1[fields.startTime] === 'string') {\n event_1[fields.startTime] = util.getDateFromString(event_1[fields.startTime]);\n }\n if (typeof event_1[fields.endTime] === 'string') {\n event_1[fields.endTime] = util.getDateFromString(event_1[fields.endTime]);\n }\n if (timeZonePropChanged) {\n this.processTimezoneChange(event_1, oldTimezone);\n }\n else {\n this.processTimezone(event_1);\n }\n if (!isNullOrUndefined(event_1[fields.recurrenceRule]) && isNullOrUndefined(event_1[fields.recurrenceID])) {\n processed = processed.concat(this.generateOccurrence(event_1));\n }\n else {\n event_1.Guid = this.generateGuid();\n processed.push(event_1);\n }\n }\n this.parent.eventsProcessed = this.filterEvents(start, end, processed);\n return processed;\n };\n EventBase.prototype.timezonePropertyChange = function (oldTimezone) {\n var processed = this.processData(this.parent.eventsData, true, oldTimezone);\n this.parent.notify(event.dataReady, { processedData: processed });\n };\n EventBase.prototype.processTimezoneChange = function (event, oldTimezone) {\n var fields = this.parent.eventFields;\n if (oldTimezone && this.parent.timezone) {\n event[fields.startTime] = this.timezone.convert(event[fields.startTime], oldTimezone, this.parent.timezone);\n event[fields.endTime] = this.timezone.convert(event[fields.endTime], oldTimezone, this.parent.timezone);\n }\n else if (!oldTimezone && this.parent.timezone) {\n event[fields.startTime] = this.timezone.add(event[fields.startTime], this.parent.timezone);\n event[fields.endTime] = this.timezone.add(event[fields.endTime], this.parent.timezone);\n }\n else if (oldTimezone && !this.parent.timezone) {\n event[fields.startTime] = this.timezone.remove(event[fields.startTime], oldTimezone);\n event[fields.endTime] = this.timezone.remove(event[fields.endTime], oldTimezone);\n }\n };\n EventBase.prototype.processTimezone = function (event) {\n var fields = this.parent.eventFields;\n if (event[fields.startTimezone] || event[fields.endTimezone]) {\n var startTimezone = event[fields.startTimezone] || event[fields.endTimezone];\n var endTimezone = event[fields.endTimezone] || event[fields.startTimezone];\n event[fields.startTime] = this.timezone.add(event[fields.startTime], startTimezone);\n event[fields.endTime] = this.timezone.add(event[fields.endTime], endTimezone);\n if (this.parent.timezone) {\n var zone = this.parent.timezone;\n event[fields.startTime] = this.timezone.convert(event[fields.startTime], startTimezone, zone);\n event[fields.endTime] = this.timezone.convert(event[fields.endTime], endTimezone, zone);\n }\n }\n else if (this.parent.timezone) {\n event[fields.startTime] = this.timezone.add(event[fields.startTime], this.parent.timezone);\n event[fields.endTime] = this.timezone.add(event[fields.endTime], this.parent.timezone);\n }\n };\n EventBase.prototype.filterEvents = function (startDate, endDate, appointments, resourceTdData) {\n if (appointments === void 0) { appointments = this.parent.eventsProcessed; }\n var fieldMapping = this.parent.eventFields;\n var predicate = new Predicate(fieldMapping.startTime, 'greaterthanorequal', startDate).\n and(new Predicate(fieldMapping.endTime, 'greaterthanorequal', startDate)).\n and(new Predicate(fieldMapping.startTime, 'lessthan', endDate)).\n or(new Predicate(fieldMapping.startTime, 'lessthanorequal', startDate).\n and(new Predicate(fieldMapping.endTime, 'greaterthan', startDate)));\n var filter = new DataManager({ json: appointments }).executeLocal(new Query().where(predicate));\n if (resourceTdData) {\n filter = this.filterEventsByResource(resourceTdData, filter);\n }\n return this.sortByTime(filter);\n };\n EventBase.prototype.filterEventsByResource = function (resourceTdData, appointments) {\n if (appointments === void 0) { appointments = this.parent.eventsProcessed; }\n var predicate;\n var resourceCollection = this.parent.resourceBase.resourceCollection;\n for (var level = 0; level < resourceCollection.length; level++) {\n var operator = this.parent.activeViewOptions.group.allowGroupEdit && resourceCollection[level].allowMultiple ?\n 'contains' : 'equal';\n var tempPredicate = new Predicate(resourceCollection[level].field, operator, resourceTdData.groupOrder[level]);\n predicate = predicate ? predicate.and(tempPredicate) : tempPredicate;\n }\n return new DataManager({ json: appointments }).executeLocal(new Query().where(predicate));\n };\n EventBase.prototype.sortByTime = function (appointments) {\n var fieldMapping = this.parent.eventFields;\n appointments.sort(function (a, b) {\n var d1 = a[fieldMapping.startTime];\n var d2 = b[fieldMapping.startTime];\n return d1.getTime() - d2.getTime();\n });\n return appointments;\n };\n EventBase.prototype.sortByDateTime = function (appointments) {\n var fieldMapping = this.parent.eventFields;\n appointments.sort(function (object1, object2) {\n var d3 = object1[fieldMapping.startTime];\n var d4 = object2[fieldMapping.startTime];\n var d5 = object1[fieldMapping.endTime];\n var d6 = object2[fieldMapping.endTime];\n var d1 = d5.getTime() - d3.getTime();\n var d2 = d6.getTime() - d4.getTime();\n return (d3.getTime() - d4.getTime() || d2 - d1);\n });\n return appointments;\n };\n EventBase.prototype.getSmallestMissingNumber = function (array) {\n var large = Math.max.apply(Math, array);\n for (var i = 0; i < large; i++) {\n if (array.indexOf(i) === -1) {\n return i;\n }\n }\n return large + 1;\n };\n EventBase.prototype.splitEventByDay = function (event) {\n var eventFields = this.parent.eventFields;\n var data = [];\n var eventStartTime = event[eventFields.startTime];\n var eventEndTime = event[eventFields.endTime];\n var isDifferentDate = util.resetTime(new Date(eventStartTime.getTime())) <\n util.resetTime(new Date(eventEndTime.getTime()));\n if (isDifferentDate) {\n var start = new Date(eventStartTime.getTime());\n var end = util.addDays(util.resetTime(new Date(eventStartTime.getTime())), 1);\n var endDate = (eventEndTime.getHours() === 0 && eventEndTime.getMinutes() === 0) ?\n eventEndTime : util.addDays(eventEndTime, 1);\n var index = 1;\n var eventLength = util.getDaysCount(eventStartTime.getTime(), endDate.getTime());\n while (end <= eventEndTime) {\n var app = extend({}, event);\n app[eventFields.startTime] = start;\n app[eventFields.endTime] = end;\n app.data = { index: index, count: eventLength };\n app.Guid = this.generateGuid();\n app.isSpanned = true;\n data.push(app);\n start = end;\n if ((new Date(start.getTime()).setHours(0, 0, 0, 0) === new Date(eventEndTime.getTime()).setHours(0, 0, 0, 0))\n && !(end.getTime() === eventEndTime.getTime())) {\n end = new Date(new Date(start.getTime()).setHours(eventEndTime.getHours(), eventEndTime.getMinutes()));\n }\n else {\n end = util.addDays(util.resetTime(new Date(start.getTime())), 1);\n }\n index++;\n }\n }\n else {\n data.push(event);\n }\n return data;\n };\n EventBase.prototype.splitEvent = function (event, dateRender) {\n var fields = this.parent.eventFields;\n var start = util.resetTime(new Date(event[fields.startTime] + '')).getTime();\n var end = util.resetTime(new Date(event[fields.endTime] + '')).getTime();\n if (util.getDateInMs(event[fields.endTime]) <= 0) {\n var temp = util.addDays(util.resetTime(new Date(event[fields.endTime] + '')), -1).getTime();\n end = start > temp ? start : temp;\n }\n var orgStart = start;\n var orgEnd = end;\n var ranges = [];\n if (start !== end) {\n if (start < dateRender[0].getTime()) {\n start = dateRender[0].getTime();\n }\n if (end > dateRender[dateRender.length - 1].getTime()) {\n end = dateRender[dateRender.length - 1].getTime();\n }\n var cStart = start;\n for (var level = 0; level < this.slots.length; level++) {\n var slot = this.slots[level];\n var firstSlot = slot[0];\n cStart = (cStart <= firstSlot && end >= firstSlot) ? firstSlot : cStart;\n if (cStart > end || firstSlot > end) {\n break;\n }\n if (!this.parent.activeViewOptions.group.byDate && this.parent.activeViewOptions.showWeekend &&\n this.parent.currentView !== 'WorkWeek') {\n var startIndex = slot.indexOf(cStart);\n if (startIndex !== -1) {\n var endIndex = slot.indexOf(end);\n var hasBreak = endIndex !== -1;\n endIndex = hasBreak ? endIndex : slot.length - 1;\n var count = ((endIndex - startIndex) + 1);\n var isLeft = (slot[startIndex] !== orgStart);\n var isRight = (slot[endIndex] !== orgEnd);\n ranges.push(this.cloneEventObject(event, slot[startIndex], slot[endIndex], count, isLeft, isRight));\n if (hasBreak) {\n break;\n }\n }\n }\n else {\n if (this.dateInRange(cStart, slot[0], slot[slot.length - 1])) {\n var availSlot = [];\n for (var i = 0; i < slot.length; i++) {\n if (this.dateInRange(slot[i], orgStart, orgEnd)) {\n availSlot.push(slot[i]);\n }\n }\n if (availSlot.length > 0) {\n if (!this.parent.activeViewOptions.group.byDate) {\n var isLeft = (availSlot[0] !== orgStart);\n var isRight = (availSlot[availSlot.length - 1] !== orgEnd);\n ranges.push(this.cloneEventObject(event, availSlot[0], availSlot[availSlot.length - 1], availSlot.length, isLeft, isRight));\n }\n else {\n for (var _i = 0, availSlot_1 = availSlot; _i < availSlot_1.length; _i++) {\n var slot_1 = availSlot_1[_i];\n ranges.push(this.cloneEventObject(event, slot_1, slot_1, 1, (slot_1 !== orgStart), (slot_1 !== orgEnd)));\n }\n }\n }\n }\n }\n }\n }\n else {\n ranges.push(this.cloneEventObject(event, start, end, 1, false, false));\n }\n return ranges;\n };\n EventBase.prototype.cloneEventObject = function (event, start, end, count, isLeft, isRight) {\n var fields = this.parent.eventFields;\n var e = extend({}, event, null, true);\n var data = { count: count, isLeft: isLeft, isRight: isRight };\n data[fields.startTime] = event[fields.startTime];\n data[fields.endTime] = event[fields.endTime];\n e.data = data;\n e[fields.startTime] = new Date(start);\n e[fields.endTime] = new Date(end);\n return e;\n };\n EventBase.prototype.dateInRange = function (date, start, end) {\n return start <= date && date <= end;\n };\n EventBase.prototype.getSelectedEventElements = function (target) {\n this.removeSelectedAppointmentClass();\n if (this.parent.selectedElements.length <= 0) {\n this.parent.selectedElements.push(target);\n }\n else {\n var isAlreadySelected = this.parent.selectedElements.filter(function (element) {\n return element.getAttribute('data-guid') === target.getAttribute('data-guid');\n });\n if (isAlreadySelected.length <= 0) {\n var focusElements = [].slice.call(this.parent.element.\n querySelectorAll('div[data-guid=\"' + target.getAttribute('data-guid') + '\"]'));\n for (var _i = 0, focusElements_1 = focusElements; _i < focusElements_1.length; _i++) {\n var element = focusElements_1[_i];\n this.parent.selectedElements.push(element);\n }\n }\n else {\n var selectedElements = this.parent.selectedElements.filter(function (element) {\n return element.getAttribute('data-guid') !== target.getAttribute('data-guid');\n });\n this.parent.selectedElements = selectedElements;\n }\n }\n if (target && this.parent.selectedElements.length > 0) {\n this.addSelectedAppointments(this.parent.selectedElements, this.parent.selectedElements[0]);\n }\n return this.parent.selectedElements;\n };\n EventBase.prototype.getSelectedEvents = function () {\n var _this = this;\n var eventSelect = [];\n var elementSelect = [];\n var selectAppointments = [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_BORDER));\n selectAppointments.filter(function (element, index, selectAppointments) {\n eventSelect.push(_this.getEventByGuid(element.getAttribute('data-guid')));\n elementSelect.push(element);\n });\n return {\n event: eventSelect.length > 1 ? eventSelect : eventSelect[0],\n element: elementSelect.length > 1 ? elementSelect : elementSelect[0]\n };\n };\n EventBase.prototype.removeSelectedAppointmentClass = function () {\n var selectedAppointments = this.getSelectedAppointments();\n for (var _i = 0, selectedAppointments_1 = selectedAppointments; _i < selectedAppointments_1.length; _i++) {\n var appointment = selectedAppointments_1[_i];\n appointment.setAttribute('aria-selected', 'false');\n }\n removeClass(selectedAppointments, cls.APPOINTMENT_BORDER);\n if (this.parent.currentView === 'Agenda' || this.parent.currentView === 'MonthAgenda') {\n removeClass(selectedAppointments, cls.AGENDA_SELECTED_CELL);\n }\n };\n EventBase.prototype.addSelectedAppointments = function (cells, focusCell) {\n for (var _i = 0, cells_1 = cells; _i < cells_1.length; _i++) {\n var cell = cells_1[_i];\n cell.setAttribute('aria-selected', 'true');\n }\n addClass(cells, cls.APPOINTMENT_BORDER);\n };\n EventBase.prototype.getSelectedAppointments = function () {\n return [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_BORDER + ',.' + cls.APPOINTMENT_CLASS + ':focus'));\n };\n EventBase.prototype.focusElement = function () {\n var selectedCell = this.parent.getSelectedElements();\n if (selectedCell.length > 0) {\n if (this.parent.keyboardInteractionModule) {\n var target = (this.parent.activeCellsData.element ||\n selectedCell[selectedCell.length - 1]);\n this.parent.keyboardInteractionModule.selectCells(false, target);\n }\n return;\n }\n var selectedAppointments = this.getSelectedAppointments();\n if (selectedAppointments.length > 0) {\n selectedAppointments[selectedAppointments.length - 1].focus();\n return;\n }\n };\n EventBase.prototype.selectWorkCellByTime = function (eventsData) {\n var target;\n if (this.parent.currentView === 'Agenda' || this.parent.currentView === 'MonthAgenda') {\n return target;\n }\n if (eventsData.length > 0) {\n var selectedObject = eventsData[eventsData.length - 1];\n var eventStartTime = selectedObject[this.parent.eventFields.startTime];\n var nearestTime = new Date(+eventStartTime).setMinutes(0, 0, 0);\n var isAllDay = this.isAllDayAppointment(selectedObject);\n if (this.parent.currentView === 'Month' || isAllDay) {\n nearestTime = new Date(+eventStartTime).setHours(0, 0, 0, 0);\n }\n var targetArea = void 0;\n if (isAllDay && ['Day', 'Week', 'WorkWeek'].indexOf(this.parent.currentView) !== -1) {\n targetArea = this.parent.getAllDayRow();\n }\n else {\n targetArea = this.parent.getContentTable();\n }\n var queryString = '[data-date=\"' + nearestTime + '\"]';\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n queryString += '[data-group-index=\"' + this.getGroupIndexFromEvent(selectedObject) + '\"]';\n }\n target = targetArea.querySelector(queryString);\n if (target) {\n this.parent.activeCellsData = this.parent.getCellDetails(target);\n if (this.parent.keyboardInteractionModule) {\n this.parent.keyboardInteractionModule.selectCells(false, target);\n }\n return target;\n }\n }\n return target;\n };\n EventBase.prototype.getGroupIndexFromEvent = function (eventData) {\n var groupOrder = [];\n var groupIndex = 0;\n for (var _i = 0, _a = this.parent.resourceBase.resourceCollection; _i < _a.length; _i++) {\n var resourceData = _a[_i];\n groupOrder.push(eventData[resourceData.field]);\n }\n this.parent.resourceBase.lastResourceLevel.forEach(function (resource) {\n var count;\n var order = resource.groupOrder;\n order.forEach(function (resIndex, index) {\n var resValue = (groupOrder[index] instanceof Array) ? groupOrder[index][index] : groupOrder[index];\n if (resValue === resIndex) {\n count = count ? count + 1 : 1;\n }\n });\n if (order.length === count) {\n groupIndex = resource.groupIndex;\n }\n });\n return groupIndex;\n };\n EventBase.prototype.isAllDayAppointment = function (event) {\n var fieldMapping = this.parent.eventFields;\n var isAllDay = event[fieldMapping.isAllDay];\n var isFullDay = ((event[fieldMapping.endTime].getTime() - event[fieldMapping.startTime].getTime())\n / util.MS_PER_DAY) >= 1;\n return (isAllDay || isFullDay) ? true : false;\n };\n EventBase.prototype.addEventListener = function () {\n this.parent.on(event.documentClick, this.appointmentBorderRemove, this);\n };\n EventBase.prototype.appointmentBorderRemove = function (event) {\n var target = [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_CLASS));\n var element = event.event.target;\n if (closest(element, '.' + cls.APPOINTMENT_CLASS)) {\n this.parent.removeSelectedClass();\n }\n else if (!closest(element, '.' + cls.POPUP_OPEN)) {\n this.removeSelectedAppointmentClass();\n }\n };\n EventBase.prototype.wireAppointmentEvents = function (element) {\n EventHandler.add(element, 'click', this.eventClick, this);\n EventHandler.add(element, 'dblclick', this.eventDoubleClick, this);\n };\n EventBase.prototype.eventClick = function (eventData) {\n if (eventData.ctrlKey && eventData.which === 1 && this.parent.keyboardInteractionModule) {\n this.parent.quickPopup.quickPopup.hide();\n this.parent.selectedElements = [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_BORDER));\n this.parent.keyboardInteractionModule.onAppointmentSelection(eventData);\n return;\n }\n this.removeSelectedAppointmentClass();\n this.activeEventData(eventData);\n var args = extend(this.parent.activeEventData, { cancel: false });\n this.parent.trigger(event.eventClick, args);\n if (args.cancel) {\n this.removeSelectedAppointmentClass();\n return;\n }\n if (this.parent.currentView === 'Agenda' || this.parent.currentView === 'MonthAgenda') {\n addClass([args.element], cls.AGENDA_SELECTED_CELL);\n }\n this.parent.notify(event.eventClick, this.parent.activeEventData);\n };\n EventBase.prototype.eventDoubleClick = function (e) {\n this.parent.quickPopup.quickPopupHide(true);\n if (e.type === 'touchstart') {\n this.activeEventData(e);\n }\n this.removeSelectedAppointmentClass();\n var fieldMapping = this.parent.eventFields;\n if (!isNullOrUndefined(this.parent.activeEventData.event) &&\n isNullOrUndefined(this.parent.activeEventData.event[fieldMapping.recurrenceID])) {\n this.parent.currentAction = 'Save';\n this.parent.eventWindow.openEditor(this.parent.activeEventData.event, 'Save');\n }\n else {\n this.parent.currentAction = 'EditOccurrence';\n this.parent.quickPopup.openRecurrenceAlert();\n }\n };\n EventBase.prototype.getEventByGuid = function (guid) {\n return new DataManager({ json: this.parent.eventsProcessed }).executeLocal(new Query().where('Guid', 'equal', guid))[0];\n };\n EventBase.prototype.generateGuid = function () {\n return 'xyxxxxyx-xxxy-yxxx-xyxx-xxyxxxxyyxxx'.replace(/[xy]/g, function (c) {\n var r = Math.random() * 16 | 0;\n var v = (c === 'x') ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n };\n EventBase.prototype.getEventMaxId = function () {\n var fields = this.parent.eventFields;\n if (this.parent.eventsData.length < 1) {\n return 0;\n }\n return Math.max.apply(Math, this.parent.eventsData.map(function (event) { return event[fields.id]; }));\n };\n EventBase.prototype.activeEventData = function (eventData) {\n var target = closest(eventData.target, '.' + cls.APPOINTMENT_CLASS);\n var guid = target.getAttribute('data-guid');\n this.addSelectedAppointments([].slice.call(this.parent.element.querySelectorAll('div[data-guid=\"' + guid + '\"]')));\n var eventObject = this.getEventByGuid(guid);\n if (eventObject.isSpanned) {\n var fields_1 = this.parent.eventFields;\n eventObject = this.parent.eventsData.filter(function (obj) {\n return obj[fields_1.id] === eventObject[fields_1.id];\n })[0];\n }\n this.parent.activeEventData = { event: eventObject, element: target };\n };\n EventBase.prototype.generateOccurrence = function (event, viewDate) {\n var fields = this.parent.eventFields;\n var startDate = event[fields.startTime];\n var endDate = event[fields.endTime];\n var occurrenceCollection = [];\n var currentViewDate = isNullOrUndefined(viewDate) ? this.parent.activeView.startDate() : viewDate;\n var eventRule = event[fields.recurrenceRule];\n var dates = generate(startDate, eventRule, event[fields.recurrenceException], this.parent.firstDayOfWeek, undefined, currentViewDate);\n if (this.parent.currentView === 'Agenda' && eventRule.indexOf('COUNT') === -1 && eventRule.indexOf('UNTIL') === -1) {\n if (isNullOrUndefined(event.generatedDates)) {\n event.generatedDates = { start: new Date(dates[0]), end: new Date(dates[dates.length - 1]) };\n }\n else {\n if (dates[0] < event.generatedDates.start.getTime()) {\n event.generatedDates.start = new Date(dates[0]);\n }\n if (dates[dates.length - 1] > event.generatedDates.end.getTime()) {\n event.generatedDates.end = new Date(dates[dates.length - 1]);\n }\n }\n }\n var date = dates.shift();\n var duration = endDate.getTime() - startDate.getTime();\n while (date) {\n var clonedObject = extend({}, event, null, true);\n clonedObject[fields.startTime] = new Date(date);\n clonedObject[fields.endTime] = new Date(new Date(date).setMilliseconds(duration));\n clonedObject[fields.recurrenceID] = clonedObject[fields.id];\n clonedObject.Guid = this.generateGuid();\n occurrenceCollection.push(clonedObject);\n date = dates.shift();\n }\n return occurrenceCollection;\n };\n EventBase.prototype.getRecurrenceEvent = function (eventData) {\n var eventFields = this.parent.eventFields;\n var parentApp = new DataManager(this.parent.eventsData).\n executeLocal(new Query().where(eventFields.id, 'equal', eventData[eventFields.recurrenceID]));\n return parentApp[0];\n };\n EventBase.prototype.getOccurrencesByID = function (id) {\n var fields = this.parent.eventFields;\n var occurrenceCollection = [];\n var parentObject = this.parent.eventsData.filter(function (obj) { return obj[fields.id] === id; });\n for (var _i = 0, _a = parentObject; _i < _a.length; _i++) {\n var event_2 = _a[_i];\n if (!isNullOrUndefined(event_2[fields.recurrenceRule])) {\n occurrenceCollection = occurrenceCollection.concat(this.generateOccurrence(event_2));\n }\n }\n return occurrenceCollection;\n };\n EventBase.prototype.getOccurrencesByRange = function (startTime, endTime) {\n var fields = this.parent.eventFields;\n var occurrenceCollection = [];\n for (var _i = 0, _a = this.parent.eventsData; _i < _a.length; _i++) {\n var event_3 = _a[_i];\n if (!isNullOrUndefined(event_3[fields.recurrenceRule])) {\n occurrenceCollection = occurrenceCollection.concat(this.generateOccurrence(event_3));\n }\n }\n var filter = occurrenceCollection.filter(function (obj) {\n return obj[fields.startTime] >= startTime && obj[fields.endTime] <= endTime && !isNullOrUndefined(obj[fields.recurrenceID]);\n });\n return filter;\n };\n EventBase.prototype.applyResourceColor = function (element, eventData, type, groupOrder, alpha) {\n if (!this.parent.resourceBase) {\n return;\n }\n var alphaColor = function (color, alpha) {\n color = color.replace('#', '');\n var r = parseInt(color.substring(0, color.length / 3), 16);\n var g = parseInt(color.substring(color.length / 3, 2 * color.length / 3), 16);\n var b = parseInt(color.substring(2 * color.length / 3, 3 * color.length / 3), 16);\n return \"rgba(\" + r + \", \" + g + \", \" + b + \", \" + alpha + \")\";\n };\n var color = this.parent.resourceBase.getResourceColor(eventData, groupOrder);\n if (color) {\n // tslint:disable-next-line:no-any\n element.style[type] = !isNullOrUndefined(alpha) ? alphaColor(color, alpha) : color;\n }\n };\n return EventBase;\n}());\nexport { EventBase };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Query, DataManager, Predicate } from '@syncfusion/ej2-data';\nimport { getRecurrenceStringFromDate } from '../../recurrence-editor/date-generator';\nimport * as events from '../base/constant';\nimport { Timezone } from '../timezone/timezone';\n/**\n * Schedule CRUD operations\n */\nvar Crud = /** @class */ (function () {\n function Crud(parent) {\n this.parent = parent;\n this.timezone = new Timezone();\n }\n Crud.prototype.getQuery = function () {\n var start = this.parent.activeView.startDate();\n var end = this.parent.activeView.endDate();\n return this.parent.dataModule.generateQuery(start, end);\n };\n Crud.prototype.refreshData = function (args) {\n var _this = this;\n var actionArgs = { requestType: args.requestType, cancel: false, data: args.data };\n if (this.parent.dataModule.dataManager.dataSource.offline) {\n this.parent.trigger(events.actionComplete, actionArgs);\n this.parent.renderModule.refreshDataManager();\n return;\n }\n else {\n args.promise.then(function (e) {\n if (_this.parent.isDestroyed) {\n return;\n }\n _this.parent.trigger(events.actionComplete, actionArgs);\n if (actionArgs.cancel) {\n return;\n }\n _this.parent.renderModule.refreshDataManager();\n }).catch(function (e) {\n if (_this.parent.isDestroyed) {\n return;\n }\n _this.parent.trigger(events.actionFailure, { error: e });\n });\n }\n };\n Crud.prototype.addEvent = function (eventData) {\n var fields = this.parent.eventFields;\n var promise = null;\n var editParms = { addedRecords: [], changedRecords: [], deletedRecords: [] };\n var args = {\n cancel: false,\n data: (eventData instanceof Array) ? eventData : [eventData],\n requestType: 'eventCreate'\n };\n this.parent.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n if (eventData instanceof Array) {\n for (var _i = 0, _a = eventData; _i < _a.length; _i++) {\n var event_1 = _a[_i];\n this.processCrudTimezone(event_1);\n editParms.addedRecords.push(event_1);\n }\n promise = this.parent.dataModule.dataManager.saveChanges(editParms, fields.id, null, this.getQuery());\n }\n else {\n this.processCrudTimezone(eventData);\n promise = this.parent.dataModule.dataManager.insert(eventData, null, this.getQuery());\n }\n var crudArgs = { requestType: 'eventCreated', cancel: false, data: eventData, promise: promise };\n this.refreshData(crudArgs);\n };\n Crud.prototype.saveEvent = function (event, action) {\n var fields = this.parent.eventFields;\n var promise = null;\n var editParms = { addedRecords: [], changedRecords: [], deletedRecords: [] };\n var args = { requestType: 'eventChange', cancel: false };\n var dataObj = [];\n (event instanceof Array) ? dataObj = event : dataObj.push(event);\n var data = event;\n if (isNullOrUndefined(action)) {\n args.data = data;\n this.parent.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n this.processCrudTimezone(data);\n promise = this.parent.dataModule.dataManager.update(fields.id, event, null, this.getQuery());\n }\n else {\n var parentEvent = this.parent.eventBase.getRecurrenceEvent(data);\n switch (action) {\n case 'EditOccurrence':\n args.data = { occurrence: event, parent: parentEvent };\n this.parent.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n var exDate = this.excludeDateCheck(data[fields.startTime], parentEvent[fields.recurrenceException]);\n if (exDate !== parentEvent[fields.recurrenceException]) {\n parentEvent[fields.recurrenceException] = exDate;\n data[fields.recurrenceID] = parentEvent[fields.id];\n this.processCrudTimezone(parentEvent);\n editParms.changedRecords.push(parentEvent);\n this.processCrudTimezone(data);\n editParms.addedRecords.push(data);\n }\n else {\n this.processCrudTimezone(data);\n editParms.changedRecords.push(data);\n }\n break;\n case 'EditSeries':\n args.data = data;\n this.parent.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n var delApp = new DataManager(this.parent.eventsData).\n executeLocal(new Query().where(fields.recurrenceID, 'equal', parentEvent[fields.id]));\n data[fields.id] = parentEvent[fields.id];\n data[fields.recurrenceException] = null;\n data[fields.recurrenceID] = null;\n this.processCrudTimezone(data);\n editParms.changedRecords.push(data);\n for (var _i = 0, delApp_1 = delApp; _i < delApp_1.length; _i++) {\n var event_2 = delApp_1[_i];\n editParms.deletedRecords.push(event_2);\n }\n break;\n }\n promise = this.parent.dataModule.dataManager.saveChanges(editParms, fields.id, null, this.getQuery());\n }\n this.parent.eventBase.selectWorkCellByTime(dataObj);\n var crudArgs = { requestType: 'eventChanged', cancel: false, data: args.data, promise: promise };\n this.refreshData(crudArgs);\n };\n Crud.prototype.deleteEvent = function (id, action) {\n var fields = this.parent.eventFields;\n var editParms = { addedRecords: [], changedRecords: [], deletedRecords: [] };\n var dataObj = [];\n var normalEvent = [];\n var recEvent = [];\n switch (typeof id) {\n case 'string':\n case 'number':\n dataObj = new DataManager(this.parent.eventsData).\n executeLocal(new Query().where(fields.id, 'equal', id));\n break;\n case 'object':\n (id instanceof Array) ? dataObj = id : dataObj.push(id);\n break;\n }\n for (var _i = 0, dataObj_1 = dataObj; _i < dataObj_1.length; _i++) {\n var event_3 = dataObj_1[_i];\n (!isNullOrUndefined(event_3[fields.recurrenceRule])) ? recEvent.push(event_3) : normalEvent.push(event_3);\n }\n var args = { requestType: 'eventRemove', cancel: false };\n if (action !== 'DeleteOccurrence') {\n args.data = dataObj;\n this.parent.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n }\n if (isNullOrUndefined(action) || normalEvent.length > 0) {\n for (var _a = 0, normalEvent_1 = normalEvent; _a < normalEvent_1.length; _a++) {\n var event_4 = normalEvent_1[_a];\n editParms.deletedRecords.push(event_4);\n }\n }\n if (recEvent.length > 0) {\n switch (action) {\n case 'Delete':\n case 'DeleteOccurrence':\n for (var i = 0; i < recEvent.length; i++) {\n var parentEvent = this.parent.eventBase.getRecurrenceEvent(recEvent[i]);\n args.data = { occurrence: recEvent[i], parent: parentEvent };\n this.parent.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n parentEvent[fields.recurrenceException] =\n this.excludeDateCheck(recEvent[i][fields.startTime], parentEvent[fields.recurrenceException]);\n this.processCrudTimezone(parentEvent);\n editParms.changedRecords.push(parentEvent);\n if (recEvent[i][fields.id] !== parentEvent[fields.id]) {\n editParms.deletedRecords.push(recEvent[i]);\n }\n }\n break;\n case 'DeleteSeries':\n for (var _b = 0, recEvent_1 = recEvent; _b < recEvent_1.length; _b++) {\n var app = recEvent_1[_b];\n var predicate = new Predicate(fields.id, 'equal', (app[fields.recurrenceID] || id)).\n or(new Predicate(fields.recurrenceID, 'equal', (app[fields.recurrenceID] || id)));\n var delApp = new DataManager(this.parent.eventsData).executeLocal(new Query().where(predicate));\n for (var _c = 0, delApp_2 = delApp; _c < delApp_2.length; _c++) {\n var event_5 = delApp_2[_c];\n editParms.deletedRecords.push(event_5);\n }\n editParms.deletedRecords.push(app);\n }\n break;\n }\n }\n var promise;\n promise = this.parent.dataModule.dataManager.saveChanges(editParms, fields.id, null, this.getQuery());\n this.parent.eventBase.selectWorkCellByTime(dataObj);\n var crudArgs = { requestType: 'eventRemoved', cancel: false, data: args.data, promise: promise };\n this.refreshData(crudArgs);\n };\n Crud.prototype.processCrudTimezone = function (events) {\n var fields = this.parent.eventFields;\n if (events[fields.startTimezone] || events[fields.endTimezone]) {\n var startTimezone = events[fields.startTimezone] || events[fields.endTimezone];\n var endTimezone = events[fields.endTimezone] || events[fields.startTimezone];\n if (this.parent.timezone) {\n var zone = this.parent.timezone;\n events[fields.startTime] = this.timezone.convert(events[fields.startTime], startTimezone, zone);\n events[fields.endTime] = this.timezone.convert(events[fields.endTime], endTimezone, zone);\n events[fields.startTime] = this.timezone.remove(events[fields.startTime], zone);\n events[fields.endTime] = this.timezone.remove(events[fields.endTime], zone);\n }\n else {\n events[fields.startTime] = this.timezone.remove(events[fields.startTime], startTimezone);\n events[fields.endTime] = this.timezone.remove(events[fields.endTime], endTimezone);\n }\n }\n else if (this.parent.timezone) {\n events[fields.startTime] = this.timezone.remove(events[fields.startTime], this.parent.timezone);\n events[fields.endTime] = this.timezone.remove(events[fields.endTime], this.parent.timezone);\n }\n };\n Crud.prototype.excludeDateCheck = function (eventStartTime, exceptionDateList) {\n var exDate = getRecurrenceStringFromDate(eventStartTime);\n if (!isNullOrUndefined(exceptionDateList)) {\n if (exceptionDateList.indexOf(exDate) === -1) {\n exceptionDateList = !(isNullOrUndefined(exceptionDateList)) ? exceptionDateList + ',' + exDate : exDate;\n }\n }\n else {\n exceptionDateList = exDate;\n }\n return exceptionDateList;\n };\n return Crud;\n}());\nexport { Crud };\n","import { createElement, remove } from '@syncfusion/ej2-base';\nimport { FormValidator } from '@syncfusion/ej2-inputs';\nimport * as cls from '../base/css-constant';\n/**\n * Appointment window field validation\n */\nvar FieldValidator = /** @class */ (function () {\n function FieldValidator(parent) {\n this.parent = parent;\n }\n FieldValidator.prototype.renderFormValidator = function (form, rules, element) {\n var _this = this;\n this.element = element;\n this.formObj = new FormValidator(form, {\n customPlacement: function (inputElement, error) {\n _this.errorPlacement(inputElement, error);\n },\n rules: rules,\n validationComplete: function (args) {\n _this.validationComplete(args);\n }\n });\n };\n FieldValidator.prototype.validationComplete = function (args) {\n var elem = this.element.querySelector('#' + args.inputName + '_Error');\n if (elem) {\n elem.style.display = (args.status === 'failure') ? '' : 'none';\n }\n };\n FieldValidator.prototype.errorPlacement = function (inputElement, error) {\n var id = error.getAttribute('for');\n var elem = this.element.querySelector('#' + id + '_Error');\n if (!elem) {\n this.createTooltip(inputElement, error, id, '');\n }\n };\n FieldValidator.prototype.createTooltip = function (element, error, name, display) {\n var dlgContent;\n var client;\n var inputClient = element.getBoundingClientRect();\n if (this.element.classList.contains(cls.POPUP_WRAPPER_CLASS)) {\n dlgContent = this.element;\n client = this.element.getBoundingClientRect();\n }\n else {\n dlgContent = this.element.querySelector('.e-schedule-dialog .e-dlg-content');\n client = dlgContent.getBoundingClientRect();\n }\n var div = createElement('div', {\n className: 'e-tooltip-wrap e-popup ' + cls.ERROR_VALIDATION_CLASS,\n id: name + '_Error',\n styles: 'display:' + display + ';top:' +\n (inputClient.bottom - client.top + dlgContent.scrollTop + 9) + 'px;left:' +\n (inputClient.left - client.left + dlgContent.scrollLeft + inputClient.width / 2) + 'px;'\n });\n var content = createElement('div', { className: 'e-tip-content' });\n content.appendChild(error);\n var arrow = createElement('div', { className: 'e-arrow-tip e-tip-top' });\n arrow.appendChild(createElement('div', { className: 'e-arrow-tip-outer e-tip-top' }));\n arrow.appendChild(createElement('div', { className: 'e-arrow-tip-inner e-tip-top' }));\n div.appendChild(content);\n div.appendChild(arrow);\n dlgContent.appendChild(div);\n div.style.left = (parseInt(div.style.left, 10) - div.offsetWidth / 2) + 'px';\n };\n FieldValidator.prototype.destroyToolTip = function () {\n if (this.element) {\n var elements = [].slice.call(this.element.querySelectorAll('.' + cls.ERROR_VALIDATION_CLASS));\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var elem = elements_1[_i];\n remove(elem);\n }\n }\n if (this.formObj) {\n this.formObj.reset();\n }\n };\n /**\n * @hidden\n */\n FieldValidator.prototype.destroy = function () {\n if (this.formObj && !this.formObj.isDestroyed) {\n this.formObj.destroy();\n }\n };\n return FieldValidator;\n}());\nexport { FieldValidator };\n","import { closest, EventHandler, isNullOrUndefined, formatUnit } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, createElement, remove, extend } from '@syncfusion/ej2-base';\nimport { Dialog, Popup } from '@syncfusion/ej2-popups';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { Crud } from '../actions/crud';\nimport { FieldValidator } from './form-validator';\nimport * as event from '../base/constant';\nimport * as cls from '../base/css-constant';\nimport * as util from '../base/util';\n/**\n * Quick Popups interactions\n */\nvar QuickPopups = /** @class */ (function () {\n /**\n * Constructor for QuickPopups\n */\n function QuickPopups(parent) {\n this.isMultipleEventSelect = false;\n this.parent = parent;\n this.l10n = this.parent.localeObj;\n this.crudAction = new Crud(parent);\n this.fieldValidator = new FieldValidator(this.parent);\n this.render();\n this.addEventListener();\n }\n QuickPopups.prototype.render = function () {\n this.renderQuickPopup();\n this.renderMorePopup();\n this.renderQuickDialog();\n };\n QuickPopups.prototype.renderQuickPopup = function () {\n var quickPopupWrapper = createElement('div', { className: cls.POPUP_WRAPPER_CLASS + ' e-popup-close' });\n if (this.parent.isAdaptive) {\n document.body.appendChild(quickPopupWrapper);\n addClass([quickPopupWrapper], cls.DEVICE_CLASS);\n }\n else {\n this.parent.element.appendChild(quickPopupWrapper);\n }\n this.quickPopup = new Popup(quickPopupWrapper, {\n actionOnScroll: 'hide',\n targetType: (this.parent.isAdaptive ? 'container' : 'relative'),\n enableRtl: this.parent.enableRtl,\n open: this.quickPopupOpen.bind(this),\n close: this.quickPopupClose.bind(this),\n hideAnimation: (this.parent.isAdaptive ? { name: 'ZoomOut' } : { name: 'FadeOut', duration: 150 }),\n showAnimation: (this.parent.isAdaptive ? { name: 'ZoomIn' } : { name: 'FadeIn', duration: 150 }),\n collision: (this.parent.isAdaptive ? { X: 'fit', Y: 'fit' } : { X: 'fit', Y: 'flip' }),\n position: (this.parent.isAdaptive ? { X: 'left', Y: 'top' } : { X: 'center', Y: 'top' }),\n viewPortElement: (this.parent.isAdaptive ? document.body : this.parent.element),\n zIndex: (this.parent.isAdaptive ? 1000 : 1)\n });\n };\n QuickPopups.prototype.renderMorePopup = function () {\n var moreEventPopup = \"
    \" +\n (\"
    \") +\n (\"
    \") +\n (\"
    \");\n var moreEventWrapper = createElement('div', {\n className: cls.MORE_POPUP_WRAPPER_CLASS + ' e-popup-close',\n innerHTML: moreEventPopup\n });\n this.parent.element.appendChild(moreEventWrapper);\n this.morePopup = new Popup(moreEventWrapper, {\n targetType: 'relative',\n enableRtl: this.parent.enableRtl,\n hideAnimation: { name: 'ZoomOut', duration: 300 },\n showAnimation: { name: 'ZoomIn', duration: 300 },\n open: this.morePopupOpen.bind(this),\n close: this.morePopupClose.bind(this),\n collision: { X: 'flip', Y: 'flip' },\n viewPortElement: this.parent.element.querySelector('.' + cls.TABLE_CONTAINER_CLASS),\n zIndex: 0\n });\n var closeButton = this.morePopup.element.querySelector('.' + cls.MORE_EVENT_CLOSE_CLASS);\n this.renderButton('e-round', cls.ICON + ' ' + cls.CLOSE_ICON_CLASS, false, closeButton, this.closeClick);\n EventHandler.add(this.morePopup.element.querySelector('.' + cls.MORE_EVENT_HEADER_DATE_CLASS), 'click', this.navigationClick, this);\n };\n QuickPopups.prototype.renderQuickDialog = function () {\n this.quickDialog = new Dialog({\n animationSettings: { effect: 'Zoom' },\n buttons: [\n { buttonModel: { cssClass: 'e-quick-alertok e-flat', isPrimary: true }, click: this.dialogButtonClick.bind(this) },\n { buttonModel: { cssClass: 'e-quick-alertcancel e-flat', isPrimary: false }, click: this.dialogButtonClick.bind(this) }\n ],\n cssClass: cls.QUICK_DIALOG_CLASS,\n closeOnEscape: true,\n enableRtl: this.parent.enableRtl,\n beforeClose: this.beforeQuickDialogClose.bind(this),\n isModal: true,\n position: { X: 'center', Y: 'center' },\n showCloseIcon: true,\n target: document.body,\n visible: false,\n width: 'auto'\n });\n var dialogElement = createElement('div', { id: this.parent.element.id + 'QuickDialog' });\n this.parent.element.appendChild(dialogElement);\n this.quickDialog.appendTo(dialogElement);\n var okButton = this.quickDialog.element.querySelector('.e-quick-alertok');\n if (okButton) {\n okButton.setAttribute('aria-label', this.l10n.getConstant('occurrence'));\n }\n var cancelButton = this.quickDialog.element.querySelector('.e-quick-alertcancel');\n if (cancelButton) {\n cancelButton.setAttribute('aria-label', this.l10n.getConstant('series'));\n }\n };\n QuickPopups.prototype.renderButton = function (className, iconName, isDisabled, element, clickEvent) {\n new Button({ cssClass: className, disabled: isDisabled, enableRtl: this.parent.enableRtl, iconCss: iconName }, element);\n EventHandler.add(element, 'click', clickEvent, this);\n };\n QuickPopups.prototype.quickDialogClass = function (action) {\n var classList = [\n cls.QUICK_DIALOG_EDIT_EVENT_CLASS, cls.QUICK_DIALOG_EDIT_SERIES_CLASS, cls.QUICK_DIALOG_DELETE_CLASS,\n cls.QUICK_DIALOG_CANCEL_CLASS, cls.QUICK_DIALOG_ALERT_BTN_CLASS, cls.DISABLE_CLASS\n ];\n var okButton = this.quickDialog.element.querySelector('.e-quick-alertok');\n var cancelButton = this.quickDialog.element.querySelector('.e-quick-alertcancel');\n removeClass([okButton, cancelButton], classList);\n switch (action) {\n case 'Recurrence':\n addClass([okButton], cls.QUICK_DIALOG_EDIT_EVENT_CLASS);\n addClass([cancelButton], cls.QUICK_DIALOG_EDIT_SERIES_CLASS);\n break;\n case 'Delete':\n addClass([okButton], cls.QUICK_DIALOG_DELETE_CLASS);\n addClass([cancelButton], cls.QUICK_DIALOG_CANCEL_CLASS);\n break;\n case 'Alert':\n addClass([okButton], cls.QUICK_DIALOG_ALERT_BTN_CLASS);\n addClass([cancelButton], cls.DISABLE_CLASS);\n break;\n }\n };\n QuickPopups.prototype.applyFormValidation = function () {\n var form = this.quickPopup.element.querySelector('.' + cls.FORM_CLASS);\n var rules = {};\n rules[this.parent.eventSettings.fields.subject.name] = this.parent.eventSettings.fields.subject.validation;\n this.fieldValidator.renderFormValidator(form, rules, this.quickPopup.element);\n };\n QuickPopups.prototype.openRecurrenceAlert = function () {\n var editDeleteOnly = this.quickDialog.element.querySelector('.e-quick-alertok');\n if (editDeleteOnly) {\n editDeleteOnly.innerHTML = this.l10n.getConstant(this.parent.currentAction === 'Delete' ? 'deleteEvent' : 'editEvent');\n }\n var editDeleteSeries = this.quickDialog.element.querySelector('.e-quick-alertcancel');\n if (editDeleteSeries) {\n editDeleteSeries.innerHTML = this.l10n.getConstant(this.parent.currentAction === 'Delete' ? 'deleteSeries' : 'editSeries');\n }\n this.quickDialog.content =\n this.l10n.getConstant(this.parent.currentAction === 'Delete' ? 'deleteRecurrenceContent' : 'editContent');\n this.quickDialog.header = this.l10n.getConstant(this.parent.currentAction === 'Delete' ? 'deleteEvent' : 'editEvent');\n this.quickDialogClass('Recurrence');\n this.showQuickDialog('RecurrenceAlert');\n };\n QuickPopups.prototype.openRecurrenceValidationAlert = function (type) {\n var okButton = this.quickDialog.element.querySelector('.e-quick-alertok');\n removeClass([okButton], cls.QUICK_DIALOG_EDIT_EVENT_CLASS);\n okButton.innerHTML = this.l10n.getConstant('ok');\n var cancelButton = this.quickDialog.element.querySelector('.e-quick-alertcancel');\n cancelButton.innerHTML = this.l10n.getConstant('cancel');\n this.quickDialog.header = this.l10n.getConstant('alert');\n switch (type) {\n case 'wrongPattern':\n addClass([cancelButton], cls.DISABLE_CLASS);\n this.quickDialog.content = this.l10n.getConstant('wrongPattern');\n break;\n case 'dateValidation':\n removeClass([cancelButton], cls.DISABLE_CLASS);\n this.quickDialog.content = this.l10n.getConstant('recurrenceDateValidation');\n break;\n case 'createError':\n addClass([cancelButton], cls.DISABLE_CLASS);\n this.quickDialog.content = this.l10n.getConstant('createError');\n break;\n case 'sameDayAlert':\n addClass([cancelButton], cls.DISABLE_CLASS);\n this.quickDialog.content = this.l10n.getConstant('sameDayAlert');\n break;\n case 'seriesChangeAlert':\n removeClass([cancelButton], cls.DISABLE_CLASS);\n this.quickDialog.content = this.l10n.getConstant('seriesChangeAlert');\n break;\n }\n if (!cancelButton.classList.contains(cls.DISABLE_CLASS)) {\n addClass([cancelButton], 'e-quick-alert-cancelpresent');\n }\n this.showQuickDialog('RecurrenceValidationAlert');\n };\n QuickPopups.prototype.openDeleteAlert = function () {\n if (this.parent.activeViewOptions.readonly) {\n return;\n }\n var okButton = this.quickDialog.element.querySelector('.e-quick-alertok');\n if (okButton) {\n okButton.innerHTML = this.l10n.getConstant('delete');\n }\n var cancelButton = this.quickDialog.element.querySelector('.e-quick-alertcancel');\n if (cancelButton) {\n cancelButton.innerHTML = this.l10n.getConstant('cancel');\n }\n this.quickDialog.content = (this.parent.activeEventData.event.length > 1) ?\n this.l10n.getConstant('deleteMultipleContent') : this.l10n.getConstant('deleteContent');\n this.quickDialog.header = (this.parent.activeEventData.event.length > 1) ?\n this.l10n.getConstant('deleteMultipleEvent') : this.l10n.getConstant('deleteEvent');\n this.quickDialogClass('Delete');\n this.showQuickDialog('DeleteAlert');\n };\n QuickPopups.prototype.openValidationError = function (type) {\n this.quickDialog.header = this.l10n.getConstant('alert');\n this.quickDialog.content = this.l10n.getConstant(type);\n var okButton = this.quickDialog.element.querySelector('.e-quick-alertok');\n if (okButton) {\n okButton.innerHTML = this.l10n.getConstant('ok');\n }\n var cancelButton = this.quickDialog.element.querySelector('.e-quick-alertcancel');\n if (cancelButton) {\n cancelButton.innerHTML = this.l10n.getConstant('cancel');\n }\n this.quickDialogClass('Alert');\n this.showQuickDialog('ValidationAlert');\n };\n QuickPopups.prototype.showQuickDialog = function (popupType) {\n this.quickDialog.dataBind();\n var eventProp = {\n type: popupType, cancel: false, data: this.parent.activeEventData, element: this.quickDialog.element\n };\n this.parent.trigger(event.popupOpen, eventProp);\n if (eventProp.cancel) {\n return;\n }\n this.quickDialog.show();\n };\n QuickPopups.prototype.createMoreEventList = function (eventCollection, groupOrder, groupIndex) {\n var fields = this.parent.eventFields;\n var moreEventContentEle = createElement('div', { className: cls.MORE_EVENT_CONTENT_CLASS });\n var moreEventWrapperEle = createElement('div', { className: cls.MORE_EVENT_WRAPPER_CLASS });\n for (var _i = 0, eventCollection_1 = eventCollection; _i < eventCollection_1.length; _i++) {\n var eventData = eventCollection_1[_i];\n var eventText = (eventData[fields.subject] || this.parent.eventSettings.fields.subject.default ||\n this.l10n.getConstant('noTitle'));\n var appointmentEle = createElement('div', {\n id: '' + eventData[fields.id],\n className: cls.APPOINTMENT_CLASS,\n attrs: {\n 'data-guid': eventData.Guid, 'role': 'button', 'tabindex': '0', 'aria-readonly': 'false',\n 'aria-selected': 'false', 'aria-grabbed': 'true', 'aria-label': eventText\n }\n });\n appointmentEle.appendChild(createElement('div', { className: cls.SUBJECT_CLASS, innerHTML: eventText }));\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n appointmentEle.setAttribute('data-group-index', groupIndex);\n }\n if (!isNullOrUndefined(eventData[fields.recurrenceRule])) {\n var iconClass = (eventData[fields.id] === eventData[fields.recurrenceID]) ?\n cls.EVENT_RECURRENCE_ICON_CLASS : cls.EVENT_RECURRENCE_EDIT_ICON_CLASS;\n appointmentEle.appendChild(createElement('div', { className: cls.ICON + ' ' + iconClass }));\n }\n var args = { data: eventData, element: appointmentEle, cancel: false };\n this.parent.trigger(event.eventRendered, args);\n if (!args.cancel) {\n moreEventWrapperEle.appendChild(appointmentEle);\n this.parent.eventBase.wireAppointmentEvents(appointmentEle);\n this.parent.eventBase.applyResourceColor(appointmentEle, eventData, 'backgroundColor', groupOrder);\n }\n }\n moreEventContentEle.appendChild(moreEventWrapperEle);\n return moreEventContentEle;\n };\n QuickPopups.prototype.tapHoldEventPopup = function (args) {\n var target = closest(args.event.target, '.' + cls.APPOINTMENT_CLASS);\n this.isMultipleEventSelect = false;\n if (!isNullOrUndefined(target) && this.parent.isAdaptive) {\n this.parent.selectedElements = [];\n this.isMultipleEventSelect = true;\n var selectedElements = this.parent.eventBase.getSelectedEventElements(target);\n this.parent.activeEventData = this.parent.eventBase.getSelectedEvents();\n var guid = target.getAttribute('data-guid');\n var eventObj = this.parent.eventBase.getEventByGuid(guid);\n var eventTitle = (eventObj[this.parent.eventFields.subject] || this.l10n.getConstant('noTitle'));\n var eventTemplate = \"
    \" +\n (\"\") +\n (\"
    \" + eventTitle + \"
    \") +\n (\"\") +\n (\"
    \");\n this.quickPopup.element.innerHTML = eventTemplate;\n var closeIcon = this.quickPopup.element.querySelector('.' + cls.CLOSE_CLASS);\n this.renderButton('e-flat e-round e-small', cls.ICON + ' ' + cls.CLOSE_ICON_CLASS, false, closeIcon, this.closeClick);\n var editIcon = this.quickPopup.element.querySelector('.' + cls.EDIT_CLASS);\n this.renderButton('e-flat e-round e-small', cls.ICON + ' ' + cls.EDIT_ICON_CLASS, false, editIcon, this.editClick);\n var deleteIcon = this.quickPopup.element.querySelector('.' + cls.DELETE_CLASS);\n this.renderButton('e-flat e-round e-small', cls.ICON + ' ' + cls.DELETE_ICON_CLASS, false, deleteIcon, this.deleteClick);\n this.beforeQuickPopupOpen(target);\n }\n };\n QuickPopups.prototype.cellClick = function (args) {\n if (!this.parent.showQuickInfo || this.parent.currentView === 'MonthAgenda' || this.parent.isAdaptive) {\n this.quickPopupHide();\n return;\n }\n var target = closest(args.event.target, '.' + cls.WORK_CELLS_CLASS + ',.' + cls.ALLDAY_CELLS_CLASS + ',.' +\n cls.HEADER_CELLS_CLASS);\n if (isNullOrUndefined(target) || args.event.target.classList.contains(cls.MORE_INDICATOR_CLASS)) {\n return;\n }\n var timeDetails = this.parent.activeCellsData.isAllDay ? this.l10n.getConstant('allDay') :\n this.parent.getTimeString(this.parent.activeCellsData.startTime) + ' - ' +\n this.parent.getTimeString(this.parent.activeCellsData.endTime);\n var temp = {};\n temp[this.parent.eventFields.startTime] = this.parent.activeCellsData.startTime;\n temp[this.parent.eventFields.endTime] = this.parent.activeCellsData.endTime;\n temp[this.parent.eventFields.isAllDay] = this.parent.activeCellsData.isAllDay;\n var cellDetails = this.getFormattedString(temp, 'cell');\n var cellTemplate = \"
    \" +\n (\"
    \") +\n (\"
    \") +\n (\"
    \") +\n (\"
    \") +\n (\"
    \" + cellDetails.details + \"
    \") +\n ((this.parent.activeViewOptions.group.resources.length > 0 ? \"
    \" +\n (\"
    \" + this.getResourceText(args, 'cell') + \"
    \") : '') + \"
    \") +\n (\"
    \");\n var quickCellPopup = createElement('div', { className: cls.CELL_POPUP_CLASS, innerHTML: cellTemplate });\n Input.createInput({\n element: quickCellPopup.querySelector('.' + cls.SUBJECT_CLASS),\n properties: { placeholder: this.l10n.getConstant('addTitle') }\n });\n var closeIcon = quickCellPopup.querySelector('.' + cls.CLOSE_CLASS);\n this.renderButton('e-flat e-round e-small', cls.ICON + ' ' + cls.CLOSE_ICON_CLASS, false, closeIcon, this.quickPopupHide);\n var moreButton = quickCellPopup.querySelector('.' + cls.QUICK_POPUP_EVENT_DETAILS_CLASS);\n this.renderButton('e-flat', '', this.parent.activeViewOptions.readonly, moreButton, this.detailsClick);\n var saveButton = quickCellPopup.querySelector('.' + cls.EVENT_CREATE_CLASS);\n this.renderButton('e-flat e-primary', '', this.parent.activeViewOptions.readonly, saveButton, this.saveClick);\n this.quickPopup.content = quickCellPopup;\n this.quickPopup.dataBind();\n this.applyFormValidation();\n if (this.morePopup) {\n this.morePopup.hide();\n }\n var isSameTarget = this.quickPopup.relateTo === target;\n this.quickPopup.relateTo = target;\n if (!isSameTarget && !this.parent.isAdaptive) {\n this.beforeQuickPopupOpen(target);\n }\n else {\n quickCellPopup.querySelector('.' + cls.SUBJECT_CLASS).focus();\n }\n };\n QuickPopups.prototype.eventClick = function (events) {\n if (this.parent.eventTooltip) {\n this.parent.eventTooltip.close();\n }\n if (!this.parent.showQuickInfo) {\n return;\n }\n if (this.parent.isAdaptive && this.isMultipleEventSelect) {\n this.updateTapHoldEventPopup(closest(events.element, '.' + cls.APPOINTMENT_CLASS));\n }\n else {\n var eventData = events.event;\n var args = this.getFormattedString(eventData, 'event');\n var eventTemplate = \"
    \" +\n (\"\") +\n (\"\") +\n (\"
    \") +\n (\"
    \") +\n (args.eventSubject + \"
    \") +\n (\"
    \" + args.details + \"
    \") +\n ((eventData[this.parent.eventFields.recurrenceRule] ? \"
    \" + this.getRecurrenceSummary(eventData) + \"
    \") : '') + \"
    \") +\n (\"\" + (eventData[this.parent.eventFields.location] ? \"
    \") +\n (eventData[this.parent.eventFields.location] + \"
    \") : '') + (eventData[this.parent.eventFields.startTimezone] ||\n eventData[this.parent.eventFields.endTimezone] ? \"
    \") +\n (this.getTimezone(eventData) + \"
    \") : '')) +\n (\"\" + (eventData[this.parent.eventFields.description] ? \"
    \") +\n (eventData[this.parent.eventFields.description] + \"
    \") : '')) +\n ((this.parent.resources.length > 0 ? \"
    \") +\n (this.getResourceText(events, 'event') + \"
    \") : '') + \"
    \") +\n (\"
    \" + (this.parent.isAdaptive ? '' : \"\") +\n (\"\")) + \"
    \");\n var quickEventPopup = createElement('div', { className: cls.EVENT_POPUP_CLASS, innerHTML: eventTemplate });\n var readonly = this.parent.activeViewOptions.readonly;\n var editIcon = quickEventPopup.querySelector('.' + cls.EDIT_CLASS);\n this.renderButton('e-flat e-round e-small', cls.ICON + ' ' + cls.EDIT_ICON_CLASS, false, editIcon, this.editClick);\n var deleteIcon = quickEventPopup.querySelector('.' + cls.DELETE_CLASS);\n this.renderButton('e-flat e-round e-small', cls.ICON + ' ' + cls.DELETE_ICON_CLASS, readonly, deleteIcon, this.deleteClick);\n var closeIcon = quickEventPopup.querySelector('.' + cls.CLOSE_CLASS);\n this.renderButton('e-flat e-round e-small', cls.ICON + ' ' + cls.CLOSE_ICON_CLASS, false, closeIcon, this.quickPopupHide);\n if (!this.parent.isAdaptive) {\n var editButton = quickEventPopup.querySelector('.' + cls.EDIT_EVENT_CLASS);\n this.renderButton('e-flat e-primary', '', false, editButton, this.editClick);\n var deleteButton = quickEventPopup.querySelector('.' + cls.DELETE_EVENT_CLASS);\n this.renderButton('e-flat', '', readonly, deleteButton, this.deleteClick);\n }\n this.quickPopup.content = quickEventPopup;\n this.quickPopup.dataBind();\n if (this.morePopup && !closest(events.element, '.' + cls.MORE_EVENT_WRAPPER_CLASS)) {\n this.morePopup.hide();\n }\n var isSameTarget = this.quickPopup.relateTo === closest(events.element, '.' + cls.APPOINTMENT_CLASS);\n this.quickPopup.relateTo = this.parent.isAdaptive ? document.body :\n closest(events.element, '.' + cls.APPOINTMENT_CLASS);\n if (!isSameTarget) {\n this.beforeQuickPopupOpen(events.element);\n }\n else {\n editIcon.focus();\n if (!this.parent.isAdaptive) {\n var editButton = quickEventPopup.querySelector('.' + cls.EDIT_EVENT_CLASS);\n editButton.focus();\n }\n this.applyEventColor();\n }\n }\n };\n QuickPopups.prototype.getResourceText = function (args, type) {\n var resourceValue = '';\n if (this.parent.activeViewOptions.group.resources.length === 0) {\n var resourceCollection_1 = this.parent.resourceBase.resourceCollection.slice(-1)[0];\n var resourceData = resourceCollection_1.dataSource;\n var resourceIndex_1 = 0;\n if (type === 'event') {\n var eventData_1 = args.event;\n resourceData.forEach(function (resource, index) {\n if (resource[resourceCollection_1.idField] === eventData_1[resourceCollection_1.field]) {\n resourceIndex_1 = index;\n }\n });\n }\n resourceValue = resourceData[resourceIndex_1][resourceCollection_1.textField];\n }\n else {\n if (type === 'event') {\n var eventData = args.event;\n var resourceData_1 = eventData[this.parent.resourceBase.resourceCollection.slice(-1)[0].field];\n if (!Array.isArray(resourceData_1)) {\n resourceData_1 = [resourceData_1];\n }\n var resourceCollection_2 = this.parent.resourceBase.lastResourceLevel;\n if (!this.parent.activeViewOptions.group.byGroupID) {\n var resourceData_2 = this.parent.resourceBase.resourceCollection.slice(-1)[0]\n .dataSource;\n resourceCollection_2 = this.parent.resourceBase.lastResourceLevel.slice(0, resourceData_2.length);\n }\n resourceData_1.map(function (value, index) {\n return resourceCollection_2.forEach(function (obj) {\n if (obj.resourceData[obj.resource.idField] === value) {\n resourceValue += obj.resourceData[obj.resource.textField];\n if (resourceData_1.length !== index + 1) {\n resourceValue += ', ';\n }\n }\n });\n });\n }\n else {\n var argsData = args;\n var groupIndex = !isNullOrUndefined(argsData.groupIndex) ? argsData.groupIndex : 0;\n var resourceDetails = this.parent.resourceBase.lastResourceLevel[groupIndex];\n resourceValue = resourceDetails.resourceData[resourceDetails.resource.textField];\n }\n }\n return resourceValue;\n };\n QuickPopups.prototype.getFormattedString = function (eventData, type) {\n var fields = this.parent.eventFields;\n var eventSubject = (eventData[fields.subject] || this.l10n.getConstant('noTitle'));\n var startDate = eventData[fields.startTime];\n var endDate = eventData[fields.endTime];\n var startDateDetails = this.getDateFormat(startDate, 'long');\n var endDateDetails = (eventData[fields.isAllDay] && endDate.getHours() === 0 && endDate.getMinutes() === 0) ?\n this.getDateFormat(util.addDays(new Date(endDate.getTime()), -1), 'long') : this.getDateFormat(endDate, 'long');\n var startTimeDetail = this.parent.getTimeString(startDate);\n var endTimeDetail = this.parent.getTimeString(endDate);\n var details;\n var allDayLength = (endDate.getTime() - startDate.getTime()) / util.MS_PER_DAY;\n var spanLength = endDate.getDate() !== startDate.getDate() &&\n (endDate.getTime() - startDate.getTime()) / (60 * 60 * 1000) < 24 ? 1 : 0;\n if (eventData[fields.isAllDay] || allDayLength >= 1 || spanLength > 0) {\n details = startDateDetails + ' (' +\n (eventData[fields.isAllDay] ? this.l10n.getConstant('allDay') : startTimeDetail) + ')';\n if (allDayLength > 1 || spanLength > 0) {\n details += ' - ' + endDateDetails + ' (' +\n (eventData[fields.isAllDay] ? this.l10n.getConstant('allDay') : endTimeDetail) + ')';\n }\n }\n else {\n details = startDateDetails + ' (' + (startTimeDetail + ' - ' + endTimeDetail) + ')';\n }\n return { eventSubject: eventSubject, details: details };\n };\n QuickPopups.prototype.moreEventClick = function (data, groupIndex) {\n this.quickPopupHide(true);\n var moreEventContentEle = this.morePopup.element.querySelector('.' + cls.MORE_EVENT_CONTENT_CLASS);\n if (moreEventContentEle) {\n remove(moreEventContentEle);\n }\n var selectedDate = ((data.date).getTime()).toString();\n var target = closest(data.element, '.' + cls.MORE_INDICATOR_CLASS);\n this.morePopup.element.querySelector('.' + cls.MORE_EVENT_HEADER_DAY_CLASS).innerHTML = this.getDateFormat(data.date, 'E');\n var dateElement = this.morePopup.element.querySelector('.' + cls.MORE_EVENT_HEADER_DATE_CLASS);\n dateElement.innerHTML = this.getDateFormat(data.date, 'd');\n dateElement.setAttribute('data-date', selectedDate);\n var groupOrder;\n if (!isNullOrUndefined(groupIndex)) {\n dateElement.setAttribute('data-group-index', groupIndex);\n groupOrder = this.parent.resourceBase.lastResourceLevel[parseInt(groupIndex, 10)].groupOrder;\n }\n var moreEventElements = this.createMoreEventList(data.event, groupOrder, groupIndex);\n this.morePopup.element.querySelector('.' + cls.MORE_EVENT_POPUP_CLASS).appendChild(moreEventElements);\n removeClass(this.morePopup.element.querySelector('.' + cls.MORE_EVENT_DATE_HEADER_CLASS).children, cls.CURRENTDATE_CLASS);\n if (util.resetTime(data.date).getTime() === util.resetTime(new Date()).getTime()) {\n addClass(this.morePopup.element.querySelector('.' + cls.MORE_EVENT_DATE_HEADER_CLASS).children, cls.CURRENTDATE_CLASS);\n }\n this.morePopup.relateTo = closest(target, '.' + cls.WORK_CELLS_CLASS);\n var eventProp = { type: 'EventContainer', data: data, cancel: false, element: this.morePopup.element };\n this.parent.trigger(event.popupOpen, eventProp);\n if (eventProp.cancel) {\n return;\n }\n this.morePopup.show();\n };\n QuickPopups.prototype.saveClick = function () {\n if (!this.quickPopup.element.querySelector('.' + cls.FORM_CLASS).ej2_instances[0].validate()) {\n return;\n }\n var fields = this.parent.eventFields;\n var saveObj = {};\n saveObj[fields.id] = this.parent.eventBase.getEventMaxId() + 1;\n saveObj[fields.subject] = this.quickPopup.element.querySelector('.' + cls.SUBJECT_CLASS).value ||\n this.parent.eventSettings.fields.subject.default || this.parent.localeObj.getConstant('addTitle');\n saveObj[fields.startTime] = this.parent.activeCellsData.startTime;\n saveObj[fields.endTime] = this.parent.activeCellsData.endTime;\n saveObj[fields.isAllDay] = this.parent.activeCellsData.isAllDay;\n if (this.parent.resourceBase) {\n this.parent.resourceBase.setResourceValues(saveObj, true);\n }\n this.crudAction.addEvent(saveObj);\n this.quickPopupHide();\n };\n QuickPopups.prototype.detailsClick = function () {\n var subject = this.quickPopup.element.querySelector('.' + cls.SUBJECT_CLASS).value;\n if (subject !== '') {\n var args = extend(this.parent.activeCellsData, { subject: subject });\n }\n this.fieldValidator.destroyToolTip();\n this.quickPopupHide();\n this.parent.eventWindow.openEditor(this.parent.activeCellsData, 'Add');\n };\n QuickPopups.prototype.editClick = function (event) {\n this.quickPopupHide(true);\n var data = this.parent.activeEventData.event;\n this.parent.currentAction = 'EditSeries';\n if (!isNullOrUndefined(data[this.parent.eventFields.recurrenceRule])) {\n this.parent.currentAction = 'EditOccurrence';\n this.openRecurrenceAlert();\n }\n else {\n this.parent.eventWindow.openEditor(data, this.parent.currentAction);\n }\n };\n QuickPopups.prototype.deleteClick = function () {\n this.quickPopupHide(true);\n this.parent.currentAction = 'Delete';\n if (this.parent.activeEventData.event[this.parent.eventFields.recurrenceRule]) {\n this.openRecurrenceAlert();\n }\n else {\n this.openDeleteAlert();\n }\n };\n QuickPopups.prototype.updateMoreEventContent = function () {\n if (this.morePopup.element.classList.contains('e-popup-close')) {\n return;\n }\n var moreEventContentEle = this.morePopup.element.querySelector('.' + cls.MORE_EVENT_CONTENT_CLASS);\n if (moreEventContentEle) {\n remove(moreEventContentEle);\n }\n var dateElement = this.morePopup.element.querySelector('.' + cls.MORE_EVENT_HEADER_DATE_CLASS);\n var startDate = this.parent.getDateFromElement(dateElement);\n var endDate = util.addDays(startDate, 1);\n var groupIndex = dateElement.getAttribute('data-group-index');\n var data;\n var groupOrder;\n if (!isNullOrUndefined(groupIndex)) {\n data = this.parent.resourceBase.lastResourceLevel[parseInt(groupIndex, 10)];\n groupOrder = data.groupOrder;\n }\n var filteredEvents = this.parent.eventBase.filterEvents(startDate, endDate, this.parent.eventsProcessed, data);\n if (filteredEvents.length === 0) {\n this.morePopup.element.children[0].appendChild(createElement('div', {\n className: cls.MORE_EVENT_CONTENT_CLASS,\n innerHTML: this.l10n.getConstant('emptyContainer')\n }));\n }\n else {\n var moreElement = this.createMoreEventList(filteredEvents, groupOrder, groupIndex);\n this.morePopup.element.querySelector('.' + cls.MORE_EVENT_POPUP_CLASS).appendChild(moreElement);\n }\n };\n QuickPopups.prototype.closeClick = function () {\n this.quickPopupHide();\n this.morePopup.hide();\n };\n QuickPopups.prototype.dialogButtonClick = function (event) {\n var cancelButton = this.quickDialog.element.querySelector('.e-quick-alertcancel');\n if (event.target.classList.contains('e-quick-alertok') &&\n (cancelButton.classList.contains('e-quick-alert-cancelpresent'))) {\n removeClass([cancelButton], 'e-quick-alert-cancelpresent');\n this.parent.eventWindow.eventSave(this.l10n.getConstant('ok'));\n return;\n }\n this.quickDialog.hide();\n if (event.target.classList.contains(cls.QUICK_DIALOG_EDIT_EVENT_CLASS)) {\n this.parent.currentAction = (this.parent.currentAction === 'Delete') ? 'DeleteOccurrence' : 'EditOccurrence';\n switch (this.parent.currentAction) {\n case 'EditOccurrence':\n this.parent.eventWindow.openEditor(this.parent.activeEventData.event, this.parent.currentAction);\n break;\n case 'DeleteOccurrence':\n this.crudAction.deleteEvent(this.parent.activeEventData.event, this.parent.currentAction);\n break;\n }\n }\n else if (event.target.classList.contains(cls.QUICK_DIALOG_EDIT_SERIES_CLASS)) {\n this.parent.currentAction = (this.parent.currentAction === 'Delete') ? 'DeleteSeries' : 'EditSeries';\n switch (this.parent.currentAction) {\n case 'EditSeries':\n var parentEvent = this.parent.eventBase.getRecurrenceEvent(this.parent.activeEventData.event);\n this.parent.eventWindow.openEditor(parentEvent, this.parent.currentAction);\n break;\n case 'DeleteSeries':\n this.crudAction.deleteEvent(this.parent.activeEventData.event, this.parent.currentAction);\n break;\n }\n }\n else if (event.target.classList.contains(cls.QUICK_DIALOG_DELETE_CLASS)) {\n this.crudAction.deleteEvent(this.parent.activeEventData.event, this.parent.currentAction);\n }\n };\n QuickPopups.prototype.updateTapHoldEventPopup = function (target) {\n var selectedElements = this.parent.eventBase.getSelectedEventElements(target);\n this.parent.activeEventData = this.parent.eventBase.getSelectedEvents();\n if (selectedElements.length > 0) {\n var eventObj = this.parent.eventBase.getEventByGuid(selectedElements[0].getAttribute('data-guid'));\n var titleContent = (selectedElements.length === 1) ?\n (eventObj[this.parent.eventFields.subject] || this.l10n.getConstant('noTitle')) :\n '(' + selectedElements.length + ')' + ' ' + this.l10n.getConstant('selectedItems');\n this.quickPopup.element.querySelector('.' + cls.SUBJECT_CLASS).innerHTML = titleContent;\n if (selectedElements.length > 1) {\n addClass([this.quickPopup.element.querySelector('.' + cls.EDIT_ICON_CLASS)], cls.HIDDEN_CLASS);\n }\n else {\n removeClass([this.quickPopup.element.querySelector('.' + cls.EDIT_ICON_CLASS)], cls.HIDDEN_CLASS);\n }\n }\n else {\n this.parent.selectedElements = [];\n this.quickPopupHide();\n }\n };\n QuickPopups.prototype.getTimezone = function (event) {\n var zoneDetails = '';\n zoneDetails += event[this.parent.eventFields.startTimezone] || '';\n zoneDetails += zoneDetails === '' ? '' : ' - ';\n zoneDetails += event[this.parent.eventFields.endTimezone] || '';\n return zoneDetails;\n };\n QuickPopups.prototype.getRecurrenceSummary = function (event) {\n var recurrenceEditor = this.parent.eventWindow.getRecurrenceEditorInstance();\n var ruleSummary = recurrenceEditor.getRuleSummary(event[this.parent.eventFields.recurrenceRule]);\n return ruleSummary.charAt(0).toUpperCase() + ruleSummary.slice(1);\n };\n QuickPopups.prototype.getDateFormat = function (date, formatString) {\n return this.parent.globalize.formatDate(date, { skeleton: formatString });\n };\n QuickPopups.prototype.getDataFromTarget = function (target) {\n if (target.classList.contains(cls.APPOINTMENT_CLASS)) {\n return this.parent.activeEventData.event;\n }\n return this.parent.activeCellsData;\n };\n QuickPopups.prototype.beforeQuickDialogClose = function () {\n this.parent.eventBase.focusElement();\n };\n QuickPopups.prototype.beforeQuickPopupOpen = function (target) {\n var isEventPopup = this.quickPopup.element.querySelector('.' + cls.EVENT_POPUP_CLASS);\n var popupType = this.parent.isAdaptive ? isEventPopup ? 'ViewEventInfo' : 'EditEventInfo' : 'QuickInfo';\n var eventProp = {\n type: popupType, cancel: false, data: this.getDataFromTarget(target),\n target: target, element: this.quickPopup.element\n };\n this.parent.trigger(event.popupOpen, eventProp);\n if (eventProp.cancel) {\n this.destroyButtons();\n this.quickPopup.element.innerHTML = '';\n return;\n }\n var display = this.quickPopup.element.style.display;\n this.quickPopup.element.style.display = 'block';\n if (this.parent.isAdaptive) {\n this.quickPopup.element.removeAttribute('style');\n this.quickPopup.element.style.display = 'block';\n this.quickPopup.element.style.height = formatUnit((popupType === 'EditEventInfo') ? 65 : window.innerHeight);\n }\n else {\n this.quickPopup.offsetX = -(this.quickPopup.element.offsetWidth / 2);\n this.quickPopup.offsetY = -this.quickPopup.element.offsetHeight;\n }\n if (isEventPopup) {\n this.applyEventColor();\n }\n this.quickPopup.element.style.display = display;\n this.quickPopup.dataBind();\n this.quickPopup.show();\n };\n QuickPopups.prototype.applyEventColor = function () {\n var color = this.parent.activeEventData.element.style.backgroundColor;\n if (color === '') {\n return;\n }\n var colorEle = this.quickPopup.element.querySelector('.' + cls.POPUP_HEADER_CLASS);\n if (this.quickPopup.element.querySelector('.' + cls.POPUP_FOOTER_CLASS).offsetParent) {\n colorEle = this.quickPopup.element.querySelector('.' + cls.SUBJECT_CLASS);\n colorEle.style.borderLeftColor = color;\n color = \"rgba(\" + color.match(/\\d+/g).join() + \",0.3)\";\n }\n colorEle.style.backgroundColor = color;\n };\n QuickPopups.prototype.quickPopupOpen = function () {\n if (this.parent.isAdaptive) {\n return;\n }\n if (this.quickPopup.element.querySelector('.' + cls.CELL_POPUP_CLASS)) {\n var subjectElement = this.quickPopup.element.querySelector('.' + cls.SUBJECT_CLASS);\n if (subjectElement) {\n subjectElement.focus();\n }\n }\n else {\n var editElement = this.quickPopup.element.querySelector('.' + cls.EDIT_EVENT_CLASS);\n if (editElement) {\n editElement.focus();\n }\n var editIcon = this.quickPopup.element.querySelector('.' + cls.EDIT_CLASS);\n if (editIcon) {\n editIcon.focus();\n }\n }\n };\n QuickPopups.prototype.quickPopupClose = function () {\n this.parent.eventBase.focusElement();\n this.quickPopup.relateTo = cls.WORK_CELLS_CLASS;\n this.fieldValidator.destroyToolTip();\n this.destroyButtons();\n this.quickPopup.element.innerHTML = '';\n };\n QuickPopups.prototype.morePopupOpen = function (event) {\n this.morePopup.element.querySelector('.' + cls.MORE_EVENT_HEADER_DATE_CLASS).focus();\n this.morePopup.refreshPosition();\n };\n QuickPopups.prototype.morePopupClose = function (event) {\n var moreWrapper = this.parent.element.querySelector('.' + cls.MORE_EVENT_WRAPPER_CLASS);\n if (moreWrapper) {\n moreWrapper.remove();\n }\n };\n QuickPopups.prototype.quickPopupHide = function (hideAnimation) {\n if (this.quickPopup.element.classList.contains('e-popup-open')) {\n if (hideAnimation) {\n var animation = this.quickPopup.hideAnimation;\n this.quickPopup.hideAnimation = null;\n this.quickPopup.hide();\n this.quickPopup.hideAnimation = animation;\n }\n else {\n this.quickPopup.hide();\n }\n this.isMultipleEventSelect = false;\n }\n };\n QuickPopups.prototype.navigationClick = function (e) {\n var navigateEle = closest(e.target, '.' + cls.NAVIGATE_CLASS);\n if (!isNullOrUndefined(navigateEle)) {\n var date = this.parent.getDateFromElement(e.currentTarget);\n if (!isNullOrUndefined(date) && !this.parent.isAdaptive) {\n this.closeClick();\n this.parent.setProperties({ selectedDate: date }, true);\n this.parent.changeView('Day');\n }\n }\n };\n QuickPopups.prototype.documentClick = function (e) {\n var target = e.event.target;\n if (!closest(target, '.' + cls.POPUP_WRAPPER_CLASS + ',.e-header-cells,.e-all-day-cells,.e-work-cells,.e-appointment')) {\n this.quickPopupHide();\n }\n if (!closest(target, '.' + cls.MORE_POPUP_WRAPPER_CLASS) && !target.classList.contains(cls.MORE_INDICATOR_CLASS)\n && (!closest(target, '.' + cls.POPUP_OPEN))) {\n this.morePopup.hide();\n }\n };\n QuickPopups.prototype.onClosePopup = function () {\n this.quickPopupHide();\n this.parent.eventBase.focusElement();\n };\n QuickPopups.prototype.addEventListener = function () {\n this.parent.on(event.cellClick, this.cellClick, this);\n this.parent.on(event.eventClick, this.eventClick, this);\n this.parent.on(event.documentClick, this.documentClick, this);\n this.parent.on(event.dataReady, this.updateMoreEventContent, this);\n this.parent.on(event.tapHoldReady, this.tapHoldEventPopup, this);\n };\n QuickPopups.prototype.removeEventListner = function () {\n this.parent.off(event.cellClick, this.cellClick);\n this.parent.off(event.eventClick, this.eventClick);\n this.parent.off(event.documentClick, this.documentClick);\n this.parent.off(event.dataReady, this.updateMoreEventContent);\n this.parent.off(event.tapHoldReady, this.tapHoldEventPopup);\n };\n QuickPopups.prototype.destroyButtons = function () {\n var buttonCollections = [].slice.call(this.quickPopup.element.getElementsByTagName('button'));\n buttonCollections.forEach(function (button) {\n var instance = button.ej2_instances[0];\n if (instance) {\n instance.destroy();\n }\n });\n };\n QuickPopups.prototype.destroy = function () {\n this.fieldValidator.destroy();\n this.removeEventListner();\n this.destroyButtons();\n this.quickPopup.destroy();\n remove(this.quickPopup.element);\n this.morePopup.destroy();\n if (this.quickDialog.element) {\n this.quickDialog.destroy();\n remove(this.quickDialog.element);\n this.quickDialog.element = null;\n }\n };\n return QuickPopups;\n}());\nexport { QuickPopups };\n","import { isNullOrUndefined, append } from '@syncfusion/ej2-base';\nimport { Tooltip } from '@syncfusion/ej2-popups';\nimport * as cls from '../base/css-constant';\nimport * as util from '../base/util';\n/**\n * Tooltip on appointments in Schedule\n */\nvar EventTooltip = /** @class */ (function () {\n function EventTooltip(parent) {\n this.parent = parent;\n this.tooltipObj = new Tooltip({\n content: 'No title',\n position: 'BottomRight',\n offsetY: 10,\n mouseTrail: this.parent.isAdaptive ? false : true,\n showTipPointer: false,\n cssClass: this.parent.cssClass + ' ' + cls.EVENT_TOOLTIP_ROOT_CLASS,\n target: '.' + cls.APPOINTMENT_CLASS,\n beforeRender: this.onBeforeRender.bind(this),\n enableRtl: this.parent.enableRtl\n });\n this.tooltipObj.appendTo(this.parent.element);\n }\n EventTooltip.prototype.onBeforeRender = function (args) {\n if (!isNullOrUndefined(args.target.getAttribute('data-tooltip-id'))) {\n return;\n }\n var record = this.parent.eventBase.getEventByGuid(args.target.getAttribute('data-guid'));\n var content = '';\n if (!isNullOrUndefined(this.parent.eventSettings.tooltipTemplate)) {\n var ele = document.createElement('div');\n append([].slice.call(this.parent.getEventTooltipTemplate()(record)), ele);\n content = ele.innerHTML;\n }\n else {\n var globalize = this.parent.globalize;\n var fields = this.parent.eventFields;\n var eventStart = new Date('' + record[fields.startTime]);\n var eventEnd = new Date('' + record[fields.endTime]);\n eventEnd = (eventEnd.getHours() === 0 && eventEnd.getMinutes() === 0) ? new Date(eventEnd.setMilliseconds(-1000)) : eventEnd;\n var startDate = util.resetTime(new Date('' + eventStart));\n var endDate = util.resetTime(new Date('' + eventEnd));\n var tooltipSubject = (record[fields.subject] || this.parent.eventSettings.fields.subject.default ||\n this.parent.localeObj.getConstant('noTitle'));\n var tooltipLocation = !isNullOrUndefined(record[fields.location]) ? record[fields.location] : '';\n var startMonthDate = globalize.formatDate(eventStart, { type: 'date', skeleton: 'MMMd' });\n var endMonthDate = globalize.formatDate(eventEnd, { type: 'date', skeleton: 'MMMd' });\n var startMonthYearDate = globalize.formatDate(eventStart, { type: 'date', skeleton: 'yMMMd' });\n var endMonthYearDate = globalize.formatDate(eventEnd, { type: 'date', skeleton: 'yMMMd' });\n var startTime = globalize.formatDate(eventStart, { type: 'time', skeleton: 'short' });\n var endTime = globalize.formatDate(eventEnd, { type: 'time', skeleton: 'short' });\n var tooltipDetails = void 0;\n if (startDate.getTime() === endDate.getTime()) {\n tooltipDetails = globalize.formatDate(eventStart, { type: 'date', skeleton: 'long' });\n }\n else {\n tooltipDetails = (startDate.getFullYear() === endDate.getFullYear()) ? (startMonthDate + ' - ' + endMonthYearDate) :\n (startMonthYearDate + ' - ' + endMonthYearDate);\n }\n var tooltipTime = (record[fields.isAllDay]) ? this.parent.localeObj.getConstant('allDay') :\n (startTime + ' - ' + endTime);\n content = '
    ' + tooltipSubject + '
    ' +\n '
    ' + tooltipLocation + '
    ' +\n '
    ' + tooltipDetails + '
    ' +\n '
    ' + tooltipTime + '
    ';\n }\n this.tooltipObj.content = content;\n };\n EventTooltip.prototype.close = function () {\n this.tooltipObj.close();\n };\n /**\n * To destroy the event tooltip.\n * @return {void}\n * @private\n */\n EventTooltip.prototype.destroy = function () {\n this.tooltipObj.destroy();\n this.tooltipObj = null;\n };\n return EventTooltip;\n}());\nexport { EventTooltip };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, NotifyPropertyChanges, Event, Browser } from '@syncfusion/ej2-base';\nimport { getDefaultDateObject, getValue, cldrData, L10n, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { DatePicker } from '@syncfusion/ej2-calendars';\nimport { Button, RadioButton } from '@syncfusion/ej2-buttons';\nimport { EventHandler, classList } from '@syncfusion/ej2-base';\nimport { extractObjectFromRule, generate, generateSummary, getRecurrenceStringFromDate } from './date-generator';\nvar HEADER = 'e-editor';\nvar INPUTWARAPPER = 'e-input-wrapper';\nvar INPUTWARAPPERSIDE = 'e-input-wrapper-side';\nvar REPEATELEMENT = 'e-repeat-element';\nvar REPEATINTERVAL = 'e-repeat-interval';\nvar INTERVALCLASS = 'e-interval';\nvar DAYWRAPPER = 'e-days';\nvar WEEKWRAPPER = 'e-non-week';\nvar WEEKPOSITION = 'e-week-position';\nvar YEAREXPANDERWRAPPER = 'e-year-expander';\nvar YEAREXPANDERELEMENT = 'e-year-expander-element';\nvar MONETHEXPANDERWRAPPER = 'e-month-expander';\nvar MONETHEXPANDWRAPPER = 'e-month-expand-wrapper';\nvar MONTHEXPANDERELEMENT = 'e-month-expander-element';\nvar MONTHEXPANDERCHECKBOXWRAPPER = 'e-month-expander-checkbox-wrapper';\nvar FORMLEFT = 'e-form-left';\nvar FORMRIGHT = 'e-form-right';\nvar MONTHDAYWRAPPER = 'e-month-day';\nvar MONTHEXPANNDERELEM = 'e-month-expander-wrapper';\nvar MONTHPOS = 'e-month-pos';\nvar MONTHWEEK = 'e-month-week';\nvar ENDON = 'e-end-on';\nvar MONTHEXPANDERLABEL = 'e-month-expander-label';\nvar WEEKEXPANDERLABEL = 'e-week-expander-label';\nvar ENDONLABEL = 'e-end-on-label';\nvar ENDONLEFT = 'e-end-on-left';\nvar MONTHDAYELEMENT = 'e-monthday-element';\nvar ENDONELEMENT = 'e-end-on-element';\nvar ENDONDATE = 'e-end-on-date';\nvar UNTILDATE = 'e-until-date';\nvar ENDONCOUNTWRAPPER = 'e-end-on-count';\nvar ENDONCOUNT = 'e-recurrence-count';\nvar HIDEWRAPPER = 'e-hide-recurrence-element';\nvar RTLCLASS = 'e-rtl';\nvar PRIMARY = 'e-primary';\nvar ACTIVE = 'e-active';\nvar RECURRENCETABLE = 'e-recurrence-table';\nvar REPEATCONTENT = 'e-repeat-content';\nvar REPEATCONTENTWRAPPER = 'e-repeat-content-wrapper';\nvar NONE = 'none';\nvar DAILY = 'daily';\nvar WEEKLY = 'weekly';\nvar MONTHLY = 'monthly';\nvar YEARLY = 'yearly';\nvar NEVER = 'never';\nvar UNTIL = 'until';\nvar COUNT = 'count';\nvar TEXTFIELD = 'text';\nvar VALUEFIELD = 'value';\nvar LAST = 'last';\nvar REPEAT = 'repeat';\nvar REPEATEVERY = 'repeatEvery';\nvar ON = 'on';\nvar END = 'end';\nvar MONTH = 'month';\nvar RADIOLABEL = 'onDay';\nvar RULEUNTIL = 'UNTIL';\nvar RULEBYDAY = 'BYDAY';\nvar RULEBYMONTHDAY = 'BYMONTHDAY';\nvar RULEBYMONTH = 'BYMONTH';\nvar RULEBYYEARDAY = 'BYYEARDAY';\nvar RULEBYWEEKNO = 'BYWEEKNO';\nvar RULEINTERVAL = 'INTERVAL';\nvar RULECOUNT = 'COUNT';\nvar RULESETPOS = 'BYSETPOS';\nvar RULEFREQ = 'FREQ';\nvar RULEDAILY = 'DAILY';\nvar RULEWEEKLY = 'WEEKLY';\nvar RULEMONTHLY = 'MONTHLY';\nvar RULEYEARLY = 'YEARLY';\nvar RULESUNDAY = 'SU';\nvar RULEMONDAY = 'MO';\nvar RULETUESDAY = 'TU';\nvar RULEWEDNESDAY = 'WE';\nvar RULETHURSDAY = 'TH';\nvar RULEFRIDAY = 'FR';\nvar RULESATURDAY = 'SA';\nvar KEYSUNDAY = 'sun';\nvar KEYMONDAY = 'mon';\nvar KEYTUESDAY = 'tue';\nvar KEYWEDNESDAY = 'wed';\nvar KEYTHURSDAY = 'thu';\nvar KEYFRIDAY = 'fri';\nvar KEYSATURDAY = 'sat';\nvar EQUAL = '=';\nvar SEMICOLON = ';';\nvar COMMA = ',';\nvar FIRST = 'first';\nvar SECOND = 'second';\nvar THIRD = 'third';\nvar FOURTH = 'fourth';\nvar DAYS = '';\nvar MONTHS = 'months';\nvar YEARS = 'years';\nvar contentType = {\n none: '',\n daily: 'days',\n weekly: 'weeks',\n monthly: 'months',\n yearly: 'years'\n};\nvar valueData = {\n 'sun': RULESUNDAY,\n 'mon': RULEMONDAY,\n 'tue': RULETUESDAY,\n 'wed': RULEWEDNESDAY,\n 'thu': RULETHURSDAY,\n 'fri': RULEFRIDAY,\n 'sat': RULESATURDAY\n};\nvar neverClassList = [DAYWRAPPER, WEEKWRAPPER, ENDON, INTERVALCLASS, YEAREXPANDERWRAPPER, MONETHEXPANDERWRAPPER];\nvar weekClassList = [WEEKWRAPPER];\nvar monthClassList = [DAYWRAPPER, YEAREXPANDERWRAPPER];\nvar yearClassList = [DAYWRAPPER];\nvar dailyClassList = [DAYWRAPPER, WEEKWRAPPER, YEAREXPANDERWRAPPER, MONETHEXPANDERWRAPPER];\nvar noEndClassList = [ENDONDATE, ENDONCOUNTWRAPPER];\nvar endOnCountClassList = [ENDONDATE];\nvar endOnDateClassList = [ENDONCOUNTWRAPPER];\n/**\n * Represents the RecurrenceEditor component.\n * ```html\n *
    \n * ```\n * ```typescript\n * \n * ```\n */\nvar RecurrenceEditor = /** @class */ (function (_super) {\n __extends(RecurrenceEditor, _super);\n /**\n * Constructor for creating the widget\n * @param {object} options?\n */\n function RecurrenceEditor(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.defaultLocale = {\n none: 'None',\n daily: 'Daily',\n weekly: 'Weekly',\n monthly: 'Monthly',\n month: 'Month',\n yearly: 'Yearly',\n never: 'Never',\n until: 'Until',\n count: 'Count',\n first: 'First',\n second: 'Second',\n third: 'Third',\n fourth: 'Fourth',\n last: 'Last',\n repeat: 'Repeat',\n repeatEvery: 'Repeat every',\n on: 'Repeat On',\n end: 'End',\n onDay: 'Day',\n days: 'Day(s)',\n weeks: 'Week(s)',\n months: 'Month(s)',\n years: 'Year(s)',\n every: 'every',\n summaryTimes: 'time(s)',\n summaryOn: 'on',\n summaryUntil: 'until',\n summaryRepeat: 'Repeats',\n summaryDay: 'day(s)',\n summaryWeek: 'week(s)',\n summaryMonth: 'month(s)',\n summaryYear: 'year(s)',\n monthWeek: 'Month Week',\n monthPosition: 'Month Position',\n monthExpander: 'Month Expander',\n yearExpander: 'Year Expander',\n repeatInterval: 'Repeat Interval'\n };\n _this.renderStatus = false;\n _this.destroyStatus = false;\n _this.dayButtons = [];\n _this.monthButtons = [];\n return _this;\n }\n RecurrenceEditor.prototype.startState = function (freq, endOn, startDate) {\n this.showFormElement();\n this.updateForm(freq);\n this.freshOnEndForm();\n this.updateEndOnForm(endOn);\n this.selectMonthDay(startDate);\n this.updateUntilDate(startDate);\n this.onMonthDay.setProperties({ checked: true });\n };\n RecurrenceEditor.prototype.preRender = function () {\n this.localeObj = new L10n(this.getModuleName(), this.defaultLocale, this.locale);\n // pre render code snippets\n };\n RecurrenceEditor.prototype.applyCustomClass = function (cssClass) {\n if (cssClass) {\n this.element.classList.add(cssClass);\n }\n };\n RecurrenceEditor.prototype.initialize = function () {\n this.destroyStatus = false;\n this.renderComponent();\n if (!isNullOrUndefined(this.value)) {\n this.setRecurrenceRule(this.value);\n }\n this.startState(this.repeatType.value.toString().toUpperCase(), NEVER, this.startDate);\n this.updateForm(this.repeatType.value.toString());\n this.applyCustomClass(this.cssClass);\n };\n RecurrenceEditor.prototype.triggerChangeEvent = function () {\n if (this.renderStatus) {\n var value = this.getRecurrenceRule();\n this.trigger('change', { value: value });\n this.setProperties({ value: value }, false);\n }\n };\n RecurrenceEditor.prototype.resetDayButton = function () {\n var elements = this.element.querySelectorAll('.' +\n DAYWRAPPER + ' button');\n for (var index = 0; index < elements.length; index++) {\n elements[index].classList.remove(ACTIVE);\n elements[index].classList.remove(PRIMARY);\n }\n };\n RecurrenceEditor.prototype.daySelection = function (dayIndex) {\n this.resetDayButton();\n var days = [0, 1, 2, 3, 4, 5, 6];\n this.rotateArray(days, this.firstDayOfWeek);\n var element = this.element.querySelector('.' + DAYWRAPPER + ' button[data-index=\"' + days.indexOf(dayIndex) + '\"]');\n if (element) {\n element.classList.add(ACTIVE);\n element.classList.add(PRIMARY);\n }\n };\n RecurrenceEditor.prototype.rtlClass = function (status) {\n if (status) {\n this.element.classList.add(RTLCLASS);\n }\n else {\n this.element.classList.remove(RTLCLASS);\n }\n };\n RecurrenceEditor.prototype.updateUntilDate = function (date) {\n var tempDate = new Date(date.getTime());\n tempDate.setDate(tempDate.getDate() + 60);\n this.untilDateObj.setProperties({ value: tempDate });\n };\n RecurrenceEditor.prototype.selectMonthDay = function (date) {\n var weekday = [KEYSUNDAY, KEYMONDAY, KEYTUESDAY, KEYWEDNESDAY, KEYTHURSDAY, KEYFRIDAY, KEYSATURDAY];\n this.monthDate.setProperties({ value: date.getDate() });\n this.monthWeekDays.setProperties({ value: valueData[weekday[date.getDay()]] });\n this.monthValue.setProperties({ value: '' + (date.getMonth() + 1) });\n this.monthWeekPos.setProperties({ value: this.getDayPosition(date) });\n this.daySelection(date.getDay());\n };\n RecurrenceEditor.prototype.updateForm = function (state) {\n var elements;\n var btn;\n this.repeatType.setProperties({ value: state });\n var end = this.element.querySelector('.e-end-on');\n if (state === DAILY) {\n classList(end, [FORMLEFT], [FORMRIGHT]);\n }\n else {\n classList(end, [FORMRIGHT], [FORMLEFT]);\n }\n switch (state) {\n case NONE:\n for (var index = 0; index < neverClassList.length; index++) {\n btn = this.element.querySelector('.' + neverClassList[index]);\n btn.classList.add(HIDEWRAPPER);\n }\n break;\n case WEEKLY:\n for (var index = 0; index < weekClassList.length; index++) {\n btn = this.element.querySelector('.' + weekClassList[index]);\n btn.classList.add(HIDEWRAPPER);\n }\n break;\n case MONTHLY:\n for (var index = 0; index < monthClassList.length; index++) {\n btn = this.element.querySelector('.' + monthClassList[index]);\n btn.classList.add(HIDEWRAPPER);\n }\n break;\n case YEARLY:\n for (var index = 0; index < yearClassList.length; index++) {\n btn = this.element.querySelector('.' + yearClassList[index]);\n btn.classList.add(HIDEWRAPPER);\n }\n break;\n case DAILY:\n for (var index = 0; index < dailyClassList.length; index++) {\n btn = this.element.querySelector('.' + dailyClassList[index]);\n btn.classList.add(HIDEWRAPPER);\n }\n break;\n }\n };\n RecurrenceEditor.prototype.updateEndOnForm = function (state) {\n var element;\n this.endType.setProperties({ value: state });\n switch (state) {\n case NEVER:\n for (var index = 0; index < noEndClassList.length; index++) {\n element = this.element.querySelector('.' + noEndClassList[index]);\n element.classList.add(HIDEWRAPPER);\n }\n break;\n case UNTIL:\n for (var index = 0; index < endOnDateClassList.length; index++) {\n element = this.element.querySelector('.' + endOnDateClassList[index]);\n element.classList.add(HIDEWRAPPER);\n }\n break;\n case COUNT:\n for (var index = 0; index < endOnCountClassList.length; index++) {\n element = this.element.querySelector('.' + endOnCountClassList[index]);\n element.classList.add(HIDEWRAPPER);\n }\n break;\n }\n };\n RecurrenceEditor.prototype.freshOnEndForm = function () {\n var btn;\n for (var index = 0; index < noEndClassList.length; index++) {\n btn = this.element.querySelector('.' + noEndClassList[index]);\n if (btn) {\n btn.classList.remove(HIDEWRAPPER);\n }\n }\n };\n RecurrenceEditor.prototype.showFormElement = function () {\n var btn;\n var elements = this.element.querySelectorAll('.' + HIDEWRAPPER);\n for (var index = 0; index < neverClassList.length; index++) {\n btn = this.element.querySelector('.' + neverClassList[index]);\n btn.classList.remove(HIDEWRAPPER);\n }\n };\n RecurrenceEditor.prototype.renderDropdowns = function () {\n var _this = this;\n var self = this;\n this.repeatType = new DropDownList({\n //set the data to dataSource property\n dataSource: this.getRepeatData(),\n floatLabelType: 'Always',\n enableRtl: this.enableRtl,\n index: this.selectedType,\n fields: {\n text: TEXTFIELD,\n value: VALUEFIELD\n },\n placeholder: this.localeObj.getConstant(REPEAT),\n htmlAttributes: { 'title': this.localeObj.getConstant(REPEAT) },\n change: function (args) {\n if (self.destroyStatus) {\n return;\n }\n self.setProperties({ selectedType: args.value }, false);\n self.element.querySelector('.' + REPEATCONTENT).innerHTML =\n self.localeObj.getConstant(contentType[args.value]);\n self.showFormElement();\n self.updateForm(args.value);\n self.resetFormValues();\n self.triggerChangeEvent();\n }\n });\n // set placeholder to DropDownList input element\n this.repeatType.appendTo(this.element.querySelector('.' + REPEATELEMENT));\n this.endType = new DropDownList({\n dataSource: this.getEndData(),\n popupWidth: this.getPopupWidth(),\n enableRtl: this.enableRtl,\n index: 1,\n fields: {\n text: TEXTFIELD,\n value: VALUEFIELD\n },\n change: function (args) {\n if (self.destroyStatus) {\n return;\n }\n self.freshOnEndForm();\n self.updateEndOnForm(args.value);\n self.resetFormValues();\n self.triggerChangeEvent();\n }\n });\n this.endType.appendTo(this.element.querySelector('.' + ENDONELEMENT));\n var renderDropDownList = function (dropDownData) {\n return new DropDownList({\n dataSource: dropDownData,\n popupWidth: _this.getPopupWidth(),\n enableRtl: _this.enableRtl,\n fields: {\n text: TEXTFIELD,\n value: VALUEFIELD\n },\n index: 1,\n change: function (args) {\n if (self.destroyStatus) {\n return;\n }\n self.onWeekDay.setProperties({ checked: true });\n self.resetFormValues();\n self.triggerChangeEvent();\n }\n });\n };\n this.monthWeekPos = renderDropDownList(this.getMonthPosData());\n this.monthWeekPos.appendTo(this.element.querySelector('.' + MONTHPOS));\n this.monthWeekDays = renderDropDownList(this.getDayData('wide'));\n this.monthWeekDays.appendTo(this.element.querySelector('.' + MONTHWEEK));\n this.monthValue = new DropDownList({\n dataSource: this.getMonthData(),\n fields: {\n text: TEXTFIELD,\n value: VALUEFIELD\n },\n floatLabelType: 'Always',\n enableRtl: this.enableRtl,\n index: 7,\n change: function (args) {\n if (self.destroyStatus) {\n return;\n }\n self.onWeekDay.setProperties({ checked: true });\n self.resetFormValues();\n self.triggerChangeEvent();\n }\n });\n this.monthValue.appendTo(this.element.querySelector('.' + YEAREXPANDERELEMENT));\n };\n RecurrenceEditor.prototype.setDefaultValue = function () {\n var formelement = [].slice.call(this.element.querySelectorAll('.e-control .e-numerictextbox'));\n for (var index = 0, len = formelement.length; index < len; index++) {\n var element = formelement[index];\n var value = void 0;\n var instance = element.ej2_instances[0];\n if (instance.element.classList.contains(REPEATINTERVAL)) {\n instance.value = 1;\n instance.dataBind();\n }\n else if (instance.element.classList.contains(ENDONCOUNT)) {\n instance.value = 10;\n instance.dataBind();\n }\n }\n };\n RecurrenceEditor.prototype.resetFormValues = function () {\n var recurreneElement = [].slice.call(this.element.querySelectorAll('.e-control [type=\"text\"]'));\n for (var index = 0, len = recurreneElement.length; index < len; index++) {\n var element = recurreneElement[index];\n var value = void 0;\n if (element.classList.contains('e-datepicker')) {\n var instance = element.ej2_instances[0];\n if (instance.value) {\n instance.value = instance.value;\n instance.dataBind();\n }\n else {\n this.updateUntilDate(this.startDate);\n }\n }\n else if (element.classList.contains('e-dropdownlist')) {\n var instance = element.ej2_instances[0];\n instance.index = instance.index || 0;\n instance.dataBind();\n }\n else if (element.classList.contains('e-numerictextbox')) {\n var instance = element.ej2_instances[0];\n var value_1 = void 0;\n if (instance.element.classList.contains(REPEATINTERVAL)) {\n value_1 = 1;\n }\n else if (instance.element.classList.contains(ENDONCOUNT)) {\n value_1 = 10;\n }\n else {\n value_1 = this.startDate.getDate();\n }\n instance.value = instance.value || value_1;\n instance.dataBind();\n }\n }\n };\n RecurrenceEditor.prototype.getPopupWidth = function () {\n return Browser.isDevice ? '100%' : 'auto';\n };\n RecurrenceEditor.prototype.renderDatePickers = function () {\n var self = this;\n this.untilDateObj = new DatePicker({\n enableRtl: this.enableRtl,\n min: this.minDate,\n max: this.maxDate,\n change: function (args) {\n if (args.value) {\n self.triggerChangeEvent();\n }\n }\n });\n this.untilDateObj.appendTo(this.element.querySelector('.' + UNTILDATE));\n };\n RecurrenceEditor.prototype.dayButtonRender = function () {\n var _this = this;\n var btns = this.element.querySelectorAll('.' +\n DAYWRAPPER + ' button');\n var btn;\n var self = this;\n for (var index = 0; index < btns.length; index++) {\n btn = btns[index];\n var button = new Button({\n isToggle: true,\n enableRtl: this.enableRtl\n });\n button.appendTo(btn);\n this.dayButtons.push(button);\n EventHandler.add(btn, 'click', function (args) {\n var btns = _this.element.querySelectorAll('.' +\n DAYWRAPPER + ' button.' + PRIMARY);\n var element = args.target;\n if (!element.classList.contains(PRIMARY)) {\n element.classList.add(PRIMARY);\n self.triggerChangeEvent();\n }\n else if (btns.length > 1) {\n element.classList.remove(PRIMARY);\n self.triggerChangeEvent();\n }\n });\n }\n };\n RecurrenceEditor.prototype.radioButtonRender = function () {\n var self = this;\n this.onMonthDay = new RadioButton({\n label: this.localeObj.getConstant(RADIOLABEL),\n enableRtl: this.enableRtl,\n name: 'monthType',\n value: 'day',\n change: function (args) {\n self.resetFormValues();\n self.triggerChangeEvent();\n }\n });\n this.onMonthDay.appendTo(this.element.querySelector('.' + MONTHEXPANDERELEMENT));\n this.monthButtons.push(this.onMonthDay);\n this.onWeekDay = new RadioButton({\n label: '',\n name: 'monthType',\n enableRtl: this.enableRtl,\n value: 'daypos',\n change: function (args) {\n self.resetFormValues();\n self.triggerChangeEvent();\n }\n });\n this.onWeekDay.appendTo(this.element.querySelector('.' + MONTHEXPANNDERELEM));\n this.monthButtons.push(this.onWeekDay);\n };\n RecurrenceEditor.prototype.numericTextboxRender = function () {\n var self = this;\n this.recurrenceCount = new NumericTextBox({\n value: 10,\n format: '#',\n enableRtl: this.enableRtl,\n floatLabelType: 'Always',\n min: 1,\n change: function (args) {\n self.triggerChangeEvent();\n }\n });\n this.recurrenceCount.appendTo(this.element.querySelector('.' + ENDONCOUNT));\n this.monthDate = new NumericTextBox({\n value: 1,\n format: '#',\n enableRtl: this.enableRtl,\n min: 1,\n max: 31,\n change: function (args) {\n self.onMonthDay.setProperties({ checked: true });\n self.triggerChangeEvent();\n }\n });\n this.monthDate.appendTo(this.element.querySelector('.' + MONTHDAYWRAPPER));\n this.repeatInterval = new NumericTextBox({\n value: 1,\n format: '#',\n min: 1,\n enableRtl: this.enableRtl,\n floatLabelType: 'Always',\n placeholder: this.localeObj.getConstant(REPEATEVERY),\n change: function (args) {\n self.triggerChangeEvent();\n }\n });\n this.repeatInterval.appendTo(this.element.querySelector('.' + REPEATINTERVAL));\n };\n RecurrenceEditor.prototype.renderComponent = function () {\n this.setTemplate();\n this.renderDropdowns();\n this.renderDatePickers();\n this.dayButtonRender();\n this.radioButtonRender();\n this.numericTextboxRender();\n };\n RecurrenceEditor.prototype.rotateArray = function (data, count) {\n var temp;\n for (var index = 0; index < count; index++) {\n temp = data.shift();\n data.push(temp);\n }\n };\n RecurrenceEditor.prototype.getEndData = function () {\n var endData = [NEVER, UNTIL, COUNT];\n var self = this;\n var dataSource = [];\n endData.forEach(function (data) {\n dataSource.push({ text: self.localeObj.getConstant(data), value: data });\n });\n return dataSource;\n };\n RecurrenceEditor.prototype.getDayPosition = function (date) {\n var temp = new Date(date.getTime());\n var endDate = new Date(date.getTime());\n var day = date.getDay();\n var positionCollection = [];\n temp.setDate(1);\n endDate.setDate(1);\n endDate.setMonth(endDate.getMonth() + 1);\n while (temp < endDate) {\n if (temp.getDay() === day) {\n positionCollection.push(temp.getTime());\n }\n temp.setDate(temp.getDate() + 1);\n }\n if (positionCollection.indexOf(date.getTime()) === positionCollection.length - 1) {\n return -1;\n }\n return (positionCollection.indexOf(date.getTime()) + 1);\n };\n RecurrenceEditor.prototype.getRepeatData = function () {\n var data = [];\n var self = this;\n this.frequencies.forEach(function (element) {\n var textValue = (element === NONE) ? NEVER : element;\n data.push({ text: self.localeObj.getConstant(textValue), value: element });\n });\n return data;\n };\n RecurrenceEditor.prototype.getMonthPosData = function () {\n var monthpos = [FIRST, SECOND, THIRD, FOURTH, LAST];\n var monthposValue = {\n first: 1,\n second: 2,\n third: 3,\n fourth: 4,\n last: -1\n };\n var self = this;\n var dataSource = [];\n monthpos.forEach(function (data) {\n dataSource.push({ text: self.localeObj.getConstant(data), value: monthposValue[data] });\n });\n return dataSource;\n };\n RecurrenceEditor.prototype.getDayData = function (format) {\n var weekday = [KEYSUNDAY, KEYMONDAY, KEYTUESDAY, KEYWEDNESDAY, KEYTHURSDAY, KEYFRIDAY, KEYSATURDAY];\n var dayData = [];\n var cldrObj;\n var temp = ((format === 'narrow') ? 'narrow' : 'wide');\n this.rotateArray(weekday, this.firstDayOfWeek);\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrObj = (getValue('days.stand-alone.' + temp, getDefaultDateObject()));\n }\n else {\n cldrObj = (getValue('main.' + '' + this.locale + '.dates.calendars.gregorian.days.stand-alone.' + temp, cldrData));\n }\n for (var _i = 0, weekday_1 = weekday; _i < weekday_1.length; _i++) {\n var obj = weekday_1[_i];\n dayData.push({ text: getValue(obj, cldrObj), value: valueData[obj] });\n }\n return dayData;\n };\n RecurrenceEditor.prototype.getMonthData = function () {\n var monthData = [];\n var cldrObj;\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrObj = (getValue('months.stand-alone.wide', getDefaultDateObject()));\n }\n else {\n cldrObj = (getValue('main.' + '' + this.locale + '.dates.calendars.gregorian.months.stand-alone.wide', cldrData));\n }\n for (var _i = 0, _a = Object.keys(cldrObj); _i < _a.length; _i++) {\n var obj = _a[_i];\n monthData.push({\n text: getValue(obj, cldrObj),\n value: obj\n });\n }\n return monthData;\n };\n RecurrenceEditor.prototype.setTemplate = function () {\n var dayData = this.getDayData('narrow');\n this.element.innerHTML = '
    ' +\n '
    ' +\n '' +\n '
    ' +\n '' +\n '' +\n '
    ' +\n '
    ' + this.localeObj.getConstant(ON) + '
    ' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '
    ' +\n '
    ' +\n '
    ' + this.localeObj.getConstant(ON) + '
    ' +\n '
    ' +\n '' +\n '
    ' +\n '
    ' +\n '' +\n '' +\n '' +\n '' +\n '
    ' +\n '
    ' +\n '' +\n '
    ' +\n '' +\n '
    ' +\n '
    ' +\n '' +\n '
    ' +\n '' +\n '
    ' +\n '' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' + this.localeObj.getConstant(END) + '
    ' +\n '
    ' +\n '' +\n '
    ' +\n '
    ' +\n '' +\n '
    ' +\n '
    ' +\n '' +\n '
    ' +\n '
    ';\n };\n RecurrenceEditor.prototype.getSelectedDaysData = function () {\n var ruleData = RULEBYDAY + EQUAL;\n var elements = this.element.querySelectorAll('.' + DAYWRAPPER + ' button.' + PRIMARY);\n var weekday = [RULESUNDAY, RULEMONDAY, RULETUESDAY, RULEWEDNESDAY, RULETHURSDAY, RULEFRIDAY, RULESATURDAY];\n this.rotateArray(weekday, this.firstDayOfWeek);\n for (var index = 0; index < elements.length; index++) {\n ruleData += weekday[parseInt(elements[index].getAttribute('data-index'), 10)] + (index === (elements.length - 1) ? '' : COMMA);\n }\n return ruleData + SEMICOLON;\n };\n RecurrenceEditor.prototype.getSelectedMonthData = function () {\n var ruleData;\n if (this.onWeekDay.checked) {\n ruleData = RULEBYDAY + EQUAL + this.monthWeekDays.value + SEMICOLON\n + RULESETPOS + EQUAL + this.monthWeekPos.value + SEMICOLON;\n }\n else {\n ruleData = RULEBYMONTHDAY + EQUAL + this.monthDate.value + SEMICOLON;\n }\n return ruleData;\n };\n RecurrenceEditor.prototype.getIntervalData = function () {\n return RULEINTERVAL + EQUAL + this.repeatInterval.value + SEMICOLON;\n };\n RecurrenceEditor.prototype.getEndOnCount = function () {\n return RULECOUNT + EQUAL + this.recurrenceCount.value + SEMICOLON;\n };\n RecurrenceEditor.prototype.getYearMonthRuleData = function () {\n return RULEBYMONTH + EQUAL + this.monthValue.value + SEMICOLON;\n };\n RecurrenceEditor.prototype.updateWeekButton = function (keys) {\n var weekday = [RULESUNDAY, RULEMONDAY, RULETUESDAY, RULEWEDNESDAY, RULETHURSDAY, RULEFRIDAY, RULESATURDAY];\n this.rotateArray(weekday, this.firstDayOfWeek);\n var index;\n for (var _i = 0, _a = this.dayButtons; _i < _a.length; _i++) {\n var obj = _a[_i];\n index = parseInt(obj.element.getAttribute('data-index'), 10);\n if (keys.indexOf(weekday[index]) !== -1) {\n obj.setProperties({ isPrimary: true });\n }\n else {\n obj.setProperties({ isPrimary: false });\n }\n }\n };\n RecurrenceEditor.prototype.updateMonthUI = function () {\n if (this.ruleObject.monthDay.length) {\n this.monthDate.setProperties({ value: this.ruleObject.monthDay[0] });\n this.onMonthDay.setProperties({ checked: true });\n }\n else {\n this.onWeekDay.setProperties({ checked: true });\n this.monthWeekPos.setProperties({ value: this.ruleObject.setPosition });\n for (var _i = 0, _a = Object.keys(valueData); _i < _a.length; _i++) {\n var key = _a[_i];\n if (valueData[key] === this.ruleObject.day[0]) {\n this.monthWeekDays.setProperties({ value: this.ruleObject.day[0] });\n break;\n }\n }\n }\n };\n RecurrenceEditor.prototype.updateUI = function (repeat, state) {\n this.repeatInterval.setProperties({ value: this.ruleObject.interval });\n switch (state) {\n case UNTIL:\n this.untilDateObj.setProperties({ value: this.ruleObject.until });\n break;\n case COUNT:\n this.recurrenceCount.setProperties({ value: this.ruleObject.count });\n break;\n }\n switch (repeat) {\n case WEEKLY:\n this.updateWeekButton(this.ruleObject.day);\n break;\n case YEARLY:\n this.monthValue.setProperties({ index: (this.ruleObject.month[0] - 1) });\n this.updateMonthUI();\n break;\n case MONTHLY:\n this.updateMonthUI();\n break;\n }\n };\n RecurrenceEditor.prototype.getUntilData = function () {\n var tempStr = getRecurrenceStringFromDate(this.untilDateObj.value);\n return RULEUNTIL + EQUAL + tempStr + SEMICOLON;\n };\n RecurrenceEditor.prototype.destroyComponents = function () {\n if (!this.recurrenceCount.isDestroyed) {\n this.recurrenceCount.destroy();\n }\n if (!this.monthDate.isDestroyed) {\n this.monthDate.destroy();\n }\n if (!this.repeatInterval.isDestroyed) {\n this.repeatInterval.destroy();\n }\n if (!this.untilDateObj.isDestroyed) {\n this.untilDateObj.destroy();\n }\n if (!this.repeatType.isDestroyed) {\n this.repeatType.destroy();\n }\n if (!this.endType.isDestroyed) {\n this.endType.destroy();\n }\n if (!this.monthWeekPos.isDestroyed) {\n this.monthWeekPos.destroy();\n }\n if (!this.monthWeekDays.isDestroyed) {\n this.monthWeekDays.destroy();\n }\n if (!this.monthValue.isDestroyed) {\n this.monthValue.destroy();\n }\n this.dayButtons.forEach(function (element) {\n element.destroy();\n });\n this.dayButtons = [];\n this.monthButtons.forEach(function (element) {\n element.destroy();\n });\n this.monthButtons = [];\n };\n RecurrenceEditor.prototype.resetFields = function () {\n this.startState(NONE, NEVER, this.startDate);\n this.setDefaultValue();\n };\n RecurrenceEditor.prototype.getRuleSummary = function (rule) {\n if (rule === void 0) { rule = this.getRecurrenceRule(); }\n return generateSummary(rule, this.localeObj, this.locale);\n };\n RecurrenceEditor.prototype.getRecurrenceDates = function (startDate, rule, excludeDate, maximumCount, viewDate) {\n viewDate = isNullOrUndefined(viewDate) ? this.startDate : viewDate;\n return generate(startDate, rule, excludeDate, this.firstDayOfWeek, maximumCount, viewDate);\n };\n RecurrenceEditor.prototype.getRecurrenceRule = function () {\n var ruleData = RULEFREQ + EQUAL;\n switch (this.repeatType.value) {\n case DAILY:\n ruleData += RULEDAILY + SEMICOLON;\n break;\n case WEEKLY:\n ruleData += RULEWEEKLY + SEMICOLON + this.getSelectedDaysData();\n break;\n case MONTHLY:\n ruleData += RULEMONTHLY + SEMICOLON + this.getSelectedMonthData();\n break;\n case YEARLY:\n ruleData += RULEYEARLY + SEMICOLON + this.getSelectedMonthData() + this.getYearMonthRuleData();\n break;\n case NONE:\n return '';\n }\n ruleData += this.getIntervalData();\n switch (this.endType.value) {\n case UNTIL:\n ruleData += this.getUntilData();\n break;\n case COUNT:\n ruleData += this.getEndOnCount();\n break;\n }\n return ruleData;\n };\n RecurrenceEditor.prototype.setRecurrenceRule = function (rule, startDate) {\n if (startDate === void 0) { startDate = this.startDate; }\n if (!rule) {\n this.repeatType.setProperties({ value: NONE });\n }\n this.ruleObject = extractObjectFromRule(rule);\n var endon = this.ruleObject.count ? COUNT : (this.ruleObject.until ? UNTIL : NEVER);\n switch (this.ruleObject.freq) {\n case RULEDAILY:\n this.startState(DAILY, endon, startDate);\n this.updateUI(DAILY, endon);\n break;\n case RULEWEEKLY:\n this.startState(WEEKLY, endon, startDate);\n this.updateUI(WEEKLY, endon);\n break;\n case RULEMONTHLY:\n this.startState(MONTHLY, endon, startDate);\n this.updateUI(MONTHLY, endon);\n break;\n case RULEYEARLY:\n this.startState(YEARLY, endon, startDate);\n this.updateUI(YEARLY, endon);\n break;\n }\n };\n /**\n * Destroys the widget.\n * @returns void\n */\n RecurrenceEditor.prototype.destroy = function () {\n this.destroyStatus = true;\n this.destroyComponents();\n this.element.innerHTML = '';\n };\n /**\n * Get component name.\n * @returns string\n * @private\n */\n RecurrenceEditor.prototype.getModuleName = function () {\n return 'recurrenceeditor';\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @returns string\n */\n RecurrenceEditor.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * Initialize the control rendering\n * @returns void\n * @private\n */\n RecurrenceEditor.prototype.render = function () {\n this.initialize();\n this.rtlClass(this.enableRtl);\n this.renderStatus = true;\n };\n /**\n * Called internally, if any of the property value changed.\n * @private\n */\n RecurrenceEditor.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'startDate':\n this.selectMonthDay(newProp.startDate);\n this.updateUntilDate(newProp.startDate);\n this.endType.setProperties({ index: 0 });\n break;\n case 'enableRtl':\n this.rtlClass(newProp.enableRtl);\n break;\n case 'cssClass':\n this.applyCustomClass(newProp.cssClass);\n break;\n case 'selectedType':\n this.repeatType.setProperties({ index: this.selectedType });\n break;\n case 'minDate':\n this.untilDateObj.setProperties({ minDate: this.minDate });\n break;\n case 'maxDate':\n this.untilDateObj.setProperties({ maxDate: this.maxDate });\n break;\n case 'value':\n if (this.getRecurrenceRule() !== this.value) {\n this.setRecurrenceRule(this.value);\n }\n break;\n case 'locale':\n case 'frequencies':\n case 'firstDayOfWeek':\n this.refresh();\n break;\n }\n }\n };\n __decorate([\n Property(['none', 'daily', 'weekly', 'monthly', 'yearly'])\n ], RecurrenceEditor.prototype, \"frequencies\", void 0);\n __decorate([\n Property(0)\n ], RecurrenceEditor.prototype, \"firstDayOfWeek\", void 0);\n __decorate([\n Property(new Date())\n ], RecurrenceEditor.prototype, \"startDate\", void 0);\n __decorate([\n Property()\n ], RecurrenceEditor.prototype, \"dateFormat\", void 0);\n __decorate([\n Property('en-US')\n ], RecurrenceEditor.prototype, \"locale\", void 0);\n __decorate([\n Property()\n ], RecurrenceEditor.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], RecurrenceEditor.prototype, \"enableRtl\", void 0);\n __decorate([\n Property()\n ], RecurrenceEditor.prototype, \"value\", void 0);\n __decorate([\n Property(new Date(1900, 1, 1))\n ], RecurrenceEditor.prototype, \"minDate\", void 0);\n __decorate([\n Property(new Date(2099, 12, 31))\n ], RecurrenceEditor.prototype, \"maxDate\", void 0);\n __decorate([\n Property(0)\n ], RecurrenceEditor.prototype, \"selectedType\", void 0);\n __decorate([\n Event()\n ], RecurrenceEditor.prototype, \"change\", void 0);\n RecurrenceEditor = __decorate([\n NotifyPropertyChanges\n ], RecurrenceEditor);\n return RecurrenceEditor;\n}(Component));\nexport { RecurrenceEditor };\n","import { createElement, isNullOrUndefined, addClass, remove, EventHandler, extend, append } from '@syncfusion/ej2-base';\nimport { cldrData, removeClass, getValue, getDefaultDateObject } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { CheckBox, Button } from '@syncfusion/ej2-buttons';\nimport { Dialog } from '@syncfusion/ej2-popups';\nimport { DropDownList, MultiSelect } from '@syncfusion/ej2-dropdowns';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { DateTimePicker } from '@syncfusion/ej2-calendars';\nimport { Timezone, localTimezoneName, timezoneData } from '../timezone/timezone';\nimport { FieldValidator } from './form-validator';\nimport { RecurrenceEditor } from '../../recurrence-editor/recurrence-editor';\nimport * as cls from '../base/css-constant';\nimport * as event from '../base/constant';\nimport * as util from '../base/util';\nvar EVENT_FIELD = 'e-field';\nvar REPEAT_CONTAINER_CLASS = 'e-recurrence-container';\nvar REPEAT_BUTTON_ICON_CLASS = 'e-recurrence-edit';\nvar REPEAT_BUTTON_CLASS = 'e-recurrence-edit-button';\nvar REPEAT_DIALOG_CLASS = 'e-recurrence-dialog';\nvar HIDE_STYLE_CLASS = 'e-hide';\n/**\n * Event editor window\n */\nvar EventWindow = /** @class */ (function () {\n /**\n * Constructor for event window\n */\n function EventWindow(parent) {\n this.parent = parent;\n this.l10n = this.parent.localeObj;\n this.fields = this.parent.eventFields;\n this.fieldValidator = new FieldValidator(this.parent);\n this.timezone = new Timezone();\n this.renderEventWindow();\n }\n EventWindow.prototype.renderEventWindow = function () {\n var dialogContent = this.getEventWindowContent();\n this.element = createElement('div', { id: this.parent.element.id + '_dialog_wrapper' });\n this.parent.element.appendChild(this.element);\n if (this.parent.isAdaptive) {\n this.dialogObject = new Dialog({\n animationSettings: { effect: 'Zoom' },\n content: dialogContent,\n cssClass: cls.EVENT_WINDOW_DIALOG_CLASS + ' ' + cls.DEVICE_CLASS,\n enableRtl: this.parent.enableRtl,\n header: '
    ' +\n this.l10n.getConstant('newEvent') + '
    ',\n height: '100%',\n isModal: true,\n showCloseIcon: false,\n target: document.body,\n visible: false,\n beforeOpen: this.onBeforeOpen.bind(this),\n beforeClose: this.onBeforeClose.bind(this)\n });\n }\n else {\n this.dialogObject = new Dialog({\n animationSettings: { effect: 'Zoom' },\n buttons: [{\n buttonModel: { content: this.l10n.getConstant('deleteButton'), cssClass: cls.EVENT_WINDOW_DELETE_BUTTON_CLASS },\n click: this.eventDelete.bind(this)\n }, {\n buttonModel: {\n content: this.l10n.getConstant('saveButton'), cssClass: 'e-primary ' + cls.EVENT_WINDOW_SAVE_BUTTON_CLASS,\n isPrimary: true\n },\n click: this.eventSave.bind(this)\n }, {\n buttonModel: { cssClass: cls.EVENT_WINDOW_CANCEL_BUTTON_CLASS, content: this.l10n.getConstant('cancelButton') },\n click: this.dialogClose.bind(this)\n }],\n content: dialogContent,\n cssClass: cls.EVENT_WINDOW_DIALOG_CLASS,\n enableRtl: this.parent.enableRtl,\n header: '
    ' + this.l10n.getConstant('newEvent') + '
    ',\n isModal: true,\n showCloseIcon: true,\n target: document.body,\n visible: false,\n width: '500px',\n beforeOpen: this.onBeforeOpen.bind(this),\n beforeClose: this.onBeforeClose.bind(this)\n });\n }\n this.dialogObject.appendTo(this.element);\n addClass([this.element.parentElement], cls.EVENT_WINDOW_DIALOG_CLASS + '-container');\n if (this.parent.isAdaptive) {\n EventHandler.add(this.element.querySelector('.' + cls.EVENT_WINDOW_BACK_ICON_CLASS), 'click', this.dialogClose, this);\n EventHandler.add(this.element.querySelector('.' + cls.EVENT_WINDOW_SAVE_ICON_CLASS), 'click', this.eventSave, this);\n }\n this.applyFormValidation();\n };\n EventWindow.prototype.openEditor = function (data, type) {\n this.parent.quickPopup.quickPopupHide(true);\n if (!this.parent.isAdaptive && isNullOrUndefined(this.parent.editorTemplate)) {\n removeClass([this.dialogObject.element.querySelector('.e-recurrenceeditor')], cls.DISABLE_CLASS);\n }\n switch (type) {\n case 'Add':\n this.cellClickAction = true;\n this.onCellDetailsUpdate(data);\n break;\n case 'Save':\n case 'EditOccurrence':\n case 'EditSeries':\n if (type === 'EditOccurrence' && !this.parent.isAdaptive && isNullOrUndefined(this.parent.editorTemplate)) {\n addClass([this.dialogObject.element.querySelector('.e-recurrenceeditor')], cls.DISABLE_CLASS);\n }\n this.cellClickAction = false;\n this.onEventDetailsUpdate(data);\n break;\n }\n };\n EventWindow.prototype.setDialogContent = function () {\n this.dialogObject.content = this.getEventWindowContent();\n this.dialogObject.dataBind();\n };\n EventWindow.prototype.onBeforeOpen = function (args) {\n var eventProp = {\n type: 'Editor',\n data: this.eventData,\n cancel: false,\n element: this.element,\n target: (this.cellClickAction ? this.parent.activeCellsData.element : this.parent.activeEventData.element)\n };\n if (this.cellClickAction) {\n eventProp.duration = this.getSlotDuration();\n }\n this.parent.trigger(event.popupOpen, eventProp);\n args.cancel = eventProp.cancel;\n this.refreshDateTimePicker(this.cellClickAction ? eventProp.duration : null);\n if (this.cellClickAction && eventProp.duration !== this.getSlotDuration() && isNullOrUndefined(this.parent.editorTemplate)) {\n var startObj = this.getInstance(cls.EVENT_WINDOW_START_CLASS);\n var endObj = this.getInstance(cls.EVENT_WINDOW_END_CLASS);\n endObj.value = new Date(startObj.value.getTime() + (util.MS_PER_MINUTE * eventProp.duration));\n endObj.dataBind();\n }\n };\n EventWindow.prototype.onBeforeClose = function (args) {\n this.parent.eventBase.focusElement();\n };\n EventWindow.prototype.getEventWindowContent = function () {\n var container = createElement('div', { className: cls.FORM_CONTAINER_CLASS });\n var form = createElement('form', {\n id: this.parent.element.id + 'EditForm',\n className: cls.FORM_CLASS,\n attrs: { onsubmit: 'return false;' }\n });\n if (!isNullOrUndefined(this.parent.editorTemplate)) {\n var templeteEle = this.parent.getEditorTemplate()();\n append([].slice.call(templeteEle), form);\n }\n else {\n var content = this.getDefaultEventWindowContent();\n form.appendChild(content);\n }\n container.appendChild(form);\n return container;\n };\n EventWindow.prototype.getDefaultEventWindowContent = function () {\n var parentDiv = this.createDivElement('e-dialog-parent');\n var titleLocationDiv = this.createDivElement(cls.EVENT_WINDOW_TITLE_LOCATION_DIV_CLASS);\n var titleDiv = this.renderTextBox(cls.SUBJECT_CLASS);\n var locationDiv = this.renderTextBox(cls.LOCATION_CLASS);\n titleLocationDiv.appendChild(titleDiv);\n titleLocationDiv.appendChild(locationDiv);\n var startEndDateTimeDiv = this.createDivElement(cls.EVENT_WINDOW_START_END_DIV_CLASS);\n var startDateTimeDiv = this.renderDateTimePicker(cls.EVENT_WINDOW_START_CLASS, this.onTimeChange.bind(this));\n var endDateTimeDiv = this.renderDateTimePicker(cls.EVENT_WINDOW_END_CLASS);\n startEndDateTimeDiv.appendChild(startDateTimeDiv);\n startEndDateTimeDiv.appendChild(endDateTimeDiv);\n var timezoneParentDiv = this.createDivElement(cls.EVENT_WINDOW_TIME_ZONE_DIV_CLASS);\n var startTimezoneDiv = this.renderDropDown(cls.EVENT_WINDOW_START_TZ_CLASS);\n var endTimezoneDiv = this.renderDropDown(cls.EVENT_WINDOW_END_TZ_CLASS);\n timezoneParentDiv.appendChild(startTimezoneDiv);\n timezoneParentDiv.appendChild(endTimezoneDiv);\n var allDayTimezoneDiv = this.createDivElement(cls.EVENT_WINDOW_ALLDAY_TZ_DIV_CLASS);\n var allDayDiv = this.renderCheckBox(cls.EVENT_WINDOW_ALL_DAY_CLASS);\n var timezoneDiv = this.renderCheckBox(cls.TIME_ZONE_CLASS);\n allDayTimezoneDiv.appendChild(allDayDiv);\n allDayTimezoneDiv.appendChild(timezoneDiv);\n var repeatParentDiv = this.createDivElement(cls.EVENT_WINDOW_REPEAT_DIV_CLASS);\n var repeatDiv = this.renderCheckBox(cls.EVENT_WINDOW_REPEAT_CLASS);\n var repeatEditConainer = createElement('span', {\n className: REPEAT_CONTAINER_CLASS\n });\n var button = createElement('button', {\n className: REPEAT_BUTTON_CLASS,\n attrs: { type: 'button', 'title': this.l10n.getConstant('editRecurrence') }\n });\n this.buttonObj = new Button({ iconCss: REPEAT_BUTTON_ICON_CLASS + ' e-icons', cssClass: 'e-medium ' + this.parent.cssClass });\n repeatEditConainer.appendChild(button);\n this.buttonObj.appendTo(button);\n repeatDiv.appendChild(repeatEditConainer);\n repeatParentDiv.appendChild(repeatDiv);\n var description = this.createDivElement(cls.DESCRIPTION_CLASS + '-row');\n var descriptionDiv = this.renderTextBox(cls.DESCRIPTION_CLASS);\n description.appendChild(descriptionDiv);\n parentDiv.appendChild(titleLocationDiv);\n parentDiv.appendChild(startEndDateTimeDiv);\n parentDiv.appendChild(allDayTimezoneDiv);\n parentDiv.appendChild(timezoneParentDiv);\n parentDiv.appendChild(repeatParentDiv);\n if (!this.parent.isAdaptive) {\n this.createRecurrenceEditor(parentDiv);\n }\n else {\n EventHandler.add(button, 'click', this.loadRecurrenceEditor, this);\n }\n if (this.parent.activeViewOptions.group.resources.length > 0 || this.parent.resources.length > 0) {\n var resourceParentDiv = this.createDivElement(cls.EVENT_WINDOW_RESOURCES_DIV_CLASS);\n for (var i = 0; i < this.parent.resourceBase.resourceCollection.length; i++) {\n var resourceDiv = this.renderMultiSelect(i);\n resourceParentDiv.appendChild(resourceDiv);\n }\n parentDiv.appendChild(resourceParentDiv);\n }\n parentDiv.appendChild(description);\n var submit = createElement('button', {\n attrs: { type: 'hidden', title: 'submit', style: 'display:none' }\n });\n parentDiv.appendChild(submit);\n return parentDiv;\n };\n EventWindow.prototype.createRecurrenceEditor = function (parentDiv) {\n var rec = createElement('div');\n parentDiv.appendChild(rec);\n this.recurrenceEditor = this.renderRecurrenceEditor();\n this.recurrenceEditor.appendTo(rec);\n };\n EventWindow.prototype.createDivElement = function (className) {\n return createElement('div', { className: className });\n };\n EventWindow.prototype.createInputElement = function (className, fieldName, type) {\n return createElement(type || 'input', {\n className: className, attrs: {\n type: 'text', name: fieldName, value: '',\n title: ((this.l10n.getConstant(fieldName.charAt(0).toLowerCase() + fieldName.slice(1))) === '') ?\n fieldName : this.l10n.getConstant(fieldName.charAt(0).toLowerCase() + fieldName.slice(1))\n }\n });\n };\n EventWindow.prototype.getSlotDuration = function () {\n return this.parent.activeViewOptions.timeScale.interval / this.parent.activeViewOptions.timeScale.slotCount;\n };\n EventWindow.prototype.renderDateTimePicker = function (value, changeEvent) {\n var dateTimeDiv = this.createDivElement(value + '-container');\n var fieldName = this.getFieldName(value);\n var dateTimeInput = this.createInputElement(value + ' ' + EVENT_FIELD, fieldName);\n dateTimeDiv.appendChild(dateTimeInput);\n var dateTimePicker = new DateTimePicker({\n change: changeEvent,\n cssClass: this.parent.cssClass,\n enableRtl: this.parent.enableRtl,\n floatLabelType: 'Always',\n format: (isNullOrUndefined(this.parent.dateFormat) ?\n this.getFormat('dateFormats') : this.parent.dateFormat) + ' ' + this.getFormat('timeFormats'),\n placeholder: this.getFieldLabel(value),\n step: this.getSlotDuration(),\n value: new Date(), width: '100%'\n });\n dateTimePicker.appendTo(dateTimeInput);\n return dateTimeDiv;\n };\n EventWindow.prototype.refreshDateTimePicker = function (duration) {\n var _this = this;\n var startEndElement = [].slice.call(this.element.querySelectorAll('.' + cls.EVENT_WINDOW_START_CLASS + ',.' +\n cls.EVENT_WINDOW_END_CLASS));\n startEndElement.forEach(function (element) {\n var instance = element.ej2_instances[0];\n instance.step = duration || _this.getSlotDuration();\n instance.dataBind();\n });\n };\n EventWindow.prototype.onTimeChange = function (args) {\n var startObj = this.getInstance(cls.EVENT_WINDOW_START_CLASS);\n if (startObj.element.parentElement.classList.contains('e-input-focus')) {\n var endObj = this.getInstance(cls.EVENT_WINDOW_END_CLASS);\n var duration = 0;\n if (this.cellClickAction) {\n duration = util.MS_PER_MINUTE * this.getSlotDuration();\n }\n else {\n var eventData = this.parent.activeEventData.event;\n duration = eventData[this.fields.endTime].getTime() - eventData[this.fields.startTime].getTime();\n }\n endObj.value = new Date(startObj.value.getTime() + duration);\n endObj.dataBind();\n }\n };\n EventWindow.prototype.renderMultiSelect = function (index) {\n var labelValue;\n var resourceData = this.parent.resourceBase.resourceCollection[index];\n var fieldName = resourceData.field;\n var value = 'e-' + fieldName;\n labelValue = resourceData.title;\n var resourceDiv = this.createDivElement(value + '-container' + ' ' + 'e-resources');\n var resourceInput = this.createInputElement(value + ' ' + EVENT_FIELD, fieldName);\n resourceDiv.appendChild(resourceInput);\n var resourceTemplate = '
    ${' + resourceData.textField + '}
    ';\n if (resourceData.allowMultiple) {\n var listObj = new MultiSelect({\n cssClass: this.parent.cssClass || '',\n dataSource: resourceData.dataSource,\n change: this.onMultiselectResourceChange.bind(this),\n itemTemplate: resourceTemplate,\n fields: {\n text: resourceData.textField,\n value: resourceData.idField\n },\n htmlAttributes: { 'title': labelValue, 'name': fieldName },\n floatLabelType: 'Always',\n placeholder: labelValue,\n popupHeight: '230px',\n mode: 'Box'\n });\n listObj.appendTo(resourceInput);\n }\n else {\n var drowDownList = new DropDownList({\n cssClass: this.parent.cssClass || '',\n change: this.onDropdownResourceChange.bind(this),\n dataSource: resourceData.dataSource,\n enableRtl: this.parent.enableRtl,\n fields: {\n text: resourceData.textField,\n value: resourceData.idField\n },\n htmlAttributes: { 'title': labelValue, 'name': fieldName },\n floatLabelType: 'Always',\n placeholder: labelValue,\n popupHeight: '230px',\n itemTemplate: resourceTemplate\n });\n drowDownList.appendTo(resourceInput);\n }\n return resourceDiv;\n };\n EventWindow.prototype.renderDropDown = function (value) {\n var fieldName = this.getFieldName(value);\n var timezoneDiv = this.createDivElement(value + '-container');\n var timezoneInput = this.createInputElement(value + ' ' + EVENT_FIELD, fieldName);\n timezoneDiv.appendChild(timezoneInput);\n var drowDownList = new DropDownList({\n allowFiltering: true,\n change: this.onTimezoneChange,\n cssClass: this.parent.cssClass || '',\n dataSource: timezoneData,\n enableRtl: this.parent.enableRtl,\n fields: { text: 'Text', value: 'Value' },\n filterBarPlaceholder: 'Search Timezone',\n filtering: function (e) {\n var query = new Query();\n query = (e.text !== '') ? query.where('Text', 'contains', e.text, true) : query;\n e.updateData(timezoneData, query);\n },\n htmlAttributes: { 'title': this.getFieldLabel(value), 'name': fieldName },\n floatLabelType: 'Always',\n placeholder: this.getFieldLabel(value),\n popupHeight: '230px',\n });\n drowDownList.appendTo(timezoneInput);\n return timezoneDiv;\n };\n EventWindow.prototype.onMultiselectResourceChange = function (args) {\n if (this.parent.activeViewOptions.group.byGroupID && this.parent.activeViewOptions.group.resources.length > 0) {\n for (var i = 0; i < this.parent.resourceBase.resourceCollection.length; i++) {\n if (this.parent.resourceBase.resourceCollection[i].field === args.element.getAttribute('name')\n && i < this.parent.resourceBase.resourceCollection.length - 1) {\n var resObject = this.createInstance(i);\n var datasource = [];\n for (var j = 0; j < args.value.length; j++) {\n var filter = new DataManager({\n json: this.parent.resourceBase.resourceCollection[i + 1].dataSource\n }).executeLocal(new Query().\n where(this.parent.resourceBase.resourceCollection[i + 1].groupIDField, 'equal', args.value[j]))[0];\n var groupId = filter[this.parent.resourceBase.resourceCollection[i].idField];\n var filterRes = this.filterDatasource(i, groupId);\n for (var k = 0; k < filterRes.length; k++) {\n datasource.push(filterRes[k]);\n }\n }\n resObject.dataSource = datasource;\n resObject.dataBind();\n }\n }\n }\n };\n EventWindow.prototype.createInstance = function (index) {\n var resourceData = this.parent.resourceBase.resourceCollection[index + 1];\n var resObject = this.element.querySelector('.e-' + resourceData.field).ej2_instances[0];\n return resObject;\n };\n EventWindow.prototype.onDropdownResourceChange = function (args) {\n if (this.parent.activeViewOptions.group.resources.length > 0 && this.parent.activeViewOptions.group.byGroupID) {\n for (var i = 0; i < this.parent.resourceBase.resourceCollection.length; i++) {\n if ((i < this.parent.resourceBase.resourceCollection.length - 1) &&\n this.parent.resourceBase.resourceCollection[i].field === args.element.getAttribute('name')) {\n var resObj = this.createInstance(i);\n var groupId = args.itemData[this.parent.resources[i].idField];\n resObj.dataSource = this.filterDatasource(i, groupId);\n resObj.dataBind();\n resObj.value = (this.parent.resourceBase.resourceCollection[i + 1].allowMultiple) ?\n [resObj.dataSource[0][this.parent.resources[i + 1].idField]] :\n resObj.dataSource[0][this.parent.resources[i + 1].idField];\n }\n }\n }\n };\n EventWindow.prototype.filterDatasource = function (index, groupId) {\n var resourceData = this.parent.resourceBase.resourceCollection[index + 1];\n var datas = resourceData.dataSource;\n var filter = new DataManager({ json: datas }).executeLocal(new Query().where(resourceData.groupIDField, 'equal', groupId));\n return filter;\n };\n EventWindow.prototype.onTimezoneChange = function () {\n if (this.element.getAttribute('name') === 'StartTimezone') {\n var startTimezoneObj = document.querySelector('.' + cls.EVENT_WINDOW_START_TZ_CLASS).ej2_instances[0];\n var endTimezoneObj = document.querySelector('.' + cls.EVENT_WINDOW_END_TZ_CLASS).ej2_instances[0];\n endTimezoneObj.value = startTimezoneObj.value;\n endTimezoneObj.dataBind();\n }\n };\n EventWindow.prototype.renderCheckBox = function (value) {\n var checkBoxDiv = this.createDivElement(value + '-container');\n var fieldName = this.getFieldName(value);\n var checkBoxInput = this.createInputElement(value + ' ' + EVENT_FIELD, fieldName);\n checkBoxDiv.appendChild(checkBoxInput);\n var checkBox = new CheckBox({\n change: this.onChange.bind(this),\n cssClass: value + ' ' + this.parent.cssClass,\n enableRtl: this.parent.enableRtl,\n label: this.getFieldLabel(value)\n });\n checkBox.appendTo(checkBoxInput);\n checkBoxInput.setAttribute('name', fieldName);\n if (fieldName === 'Repeat') {\n this.repeatStatus = checkBox;\n }\n return checkBoxDiv;\n };\n EventWindow.prototype.renderTextBox = function (value) {\n var textBoxDiv = this.createDivElement(value + '-container');\n var fieldName = this.getFieldName(value);\n var elementType = (value === cls.DESCRIPTION_CLASS) ? 'textarea' : 'input';\n var textBoxInput = this.createInputElement(value + ' ' + EVENT_FIELD, fieldName, elementType);\n textBoxDiv.appendChild(textBoxInput);\n Input.createInput({\n element: textBoxInput,\n floatLabelType: 'Always',\n properties: {\n enableRtl: this.parent.enableRtl,\n placeholder: this.getFieldLabel(value)\n }\n });\n return textBoxDiv;\n };\n EventWindow.prototype.getFieldName = function (name) {\n var fieldName;\n if (name === cls.SUBJECT_CLASS) {\n fieldName = this.fields.subject;\n }\n else if (name === cls.LOCATION_CLASS) {\n fieldName = this.fields.location;\n }\n else if (name === cls.EVENT_WINDOW_START_CLASS) {\n fieldName = this.fields.startTime;\n }\n else if (name === cls.EVENT_WINDOW_END_CLASS) {\n fieldName = this.fields.endTime;\n }\n else if (name === cls.DESCRIPTION_CLASS) {\n fieldName = this.fields.description;\n }\n else if (name === cls.EVENT_WINDOW_ALL_DAY_CLASS) {\n fieldName = this.fields.isAllDay;\n }\n else if (name === cls.EVENT_WINDOW_START_TZ_CLASS) {\n fieldName = this.fields.startTimezone;\n }\n else if (name === cls.EVENT_WINDOW_END_TZ_CLASS) {\n fieldName = this.fields.endTimezone;\n }\n else if (name === cls.TIME_ZONE_CLASS) {\n fieldName = 'Timezone';\n }\n else if (name === cls.EVENT_WINDOW_REPEAT_CLASS) {\n fieldName = 'Repeat';\n }\n return fieldName;\n };\n EventWindow.prototype.getFieldLabel = function (fieldName) {\n var labelText = '';\n switch (fieldName) {\n case cls.SUBJECT_CLASS:\n labelText = this.parent.editorTitles.subject;\n break;\n case cls.LOCATION_CLASS:\n labelText = this.parent.editorTitles.location;\n break;\n case cls.DESCRIPTION_CLASS:\n labelText = this.parent.editorTitles.description;\n break;\n case cls.EVENT_WINDOW_START_CLASS:\n labelText = this.parent.editorTitles.startTime;\n break;\n case cls.EVENT_WINDOW_END_CLASS:\n labelText = this.parent.editorTitles.endTime;\n break;\n case cls.EVENT_WINDOW_START_TZ_CLASS:\n labelText = this.parent.editorTitles.startTimezone;\n break;\n case cls.EVENT_WINDOW_END_TZ_CLASS:\n labelText = this.parent.editorTitles.endTimezone;\n break;\n case cls.EVENT_WINDOW_REPEAT_CLASS:\n labelText = this.parent.editorTitles.recurrenceRule;\n break;\n case cls.EVENT_WINDOW_ALL_DAY_CLASS:\n labelText = this.parent.editorTitles.isAllDay;\n break;\n case cls.TIME_ZONE_CLASS:\n labelText = this.l10n.getConstant('timezone');\n break;\n }\n return labelText;\n };\n EventWindow.prototype.onChange = function (args) {\n var target = (args.event.target);\n if (target.classList.contains(cls.EVENT_WINDOW_ALL_DAY_CLASS)) {\n this.onAllDayChange(args.checked);\n }\n else if (target.classList.contains(cls.TIME_ZONE_CLASS)) {\n this.timezoneChangeStyle(args.checked);\n }\n else if (target.classList.contains(cls.EVENT_WINDOW_REPEAT_CLASS)) {\n this.onRepeatChange(args.checked);\n }\n };\n EventWindow.prototype.renderRepeatDialog = function () {\n var element = createElement('div');\n this.repeatDialogObject = new Dialog({\n header: this.l10n.getConstant('recurrence'),\n visible: false,\n content: '
    ',\n closeOnEscape: true,\n width: '90%',\n buttons: [{\n click: this.repeatSaveDialog.bind(this),\n buttonModel: { content: this.l10n.getConstant('save'), cssClass: 'e-save', isPrimary: true }\n },\n { click: this.repeatCancelDialog.bind(this), buttonModel: { cssClass: 'e-cancel', content: this.l10n.getConstant('cancel') } }],\n target: this.element,\n animationSettings: { effect: 'Zoom' },\n enableRtl: this.parent.enableRtl,\n isModal: true,\n cssClass: REPEAT_DIALOG_CLASS,\n open: this.repeatOpenDialog.bind(this)\n });\n this.element.appendChild(element);\n this.repeatDialogObject.appendTo(element);\n this.createRecurrenceEditor(this.repeatDialogObject.element.querySelector('.e-dlg-content'));\n };\n EventWindow.prototype.loadRecurrenceEditor = function () {\n this.repeatDialogObject.show();\n if (this.recurrenceEditor && this.repeatRule) {\n this.recurrenceEditor.setRecurrenceRule(this.repeatRule);\n }\n };\n EventWindow.prototype.onRepeatChange = function (state) {\n if (state) {\n if (!this.repeatDialogObject) {\n this.renderRepeatDialog();\n }\n this.recurrenceEditor.setProperties({ startDate: this.repeatStartDate, selectedType: 0 });\n this.loadRecurrenceEditor();\n }\n else {\n if (this.repeatDialogObject) {\n this.repeatDialogObject.hide();\n }\n this.repeatRule = '';\n if (this.recurrenceEditor) {\n this.recurrenceEditor.setRecurrenceRule(this.repeatRule);\n this.updateRepeatLabel(this.repeatRule);\n }\n var element = this.element.querySelector('.' + REPEAT_CONTAINER_CLASS);\n addClass([element], HIDE_STYLE_CLASS);\n }\n };\n EventWindow.prototype.repeatSaveDialog = function () {\n this.repeatRule = this.recurrenceEditor.getRecurrenceRule();\n var element = this.element.querySelector('.' + REPEAT_CONTAINER_CLASS);\n if (this.recurrenceEditor.getRecurrenceRule()) {\n removeClass([element], HIDE_STYLE_CLASS);\n }\n else {\n addClass([element], HIDE_STYLE_CLASS);\n this.repeatStatus.setProperties({ checked: false });\n }\n this.updateRepeatLabel(this.repeatRule);\n this.closeRepeatDialog();\n };\n EventWindow.prototype.closeRepeatDialog = function () {\n this.repeatDialogObject.hide();\n };\n EventWindow.prototype.repeatCancelDialog = function () {\n this.closeRepeatDialog();\n if (this.recurrenceEditor) {\n this.recurrenceEditor.setRecurrenceRule(this.repeatTempRule);\n }\n if (!this.repeatTempRule) {\n this.repeatStatus.setProperties({ checked: false });\n }\n };\n EventWindow.prototype.repeatOpenDialog = function () {\n this.repeatTempRule = this.recurrenceEditor.getRecurrenceRule();\n };\n EventWindow.prototype.onCellDetailsUpdate = function (args) {\n this.element.querySelector('.' + cls.FORM_CLASS).removeAttribute('data-id');\n var event = args;\n this.element.querySelector('.' + cls.EVENT_WINDOW_TITLE_TEXT_CLASS).innerHTML = this.l10n.getConstant('newEvent');\n var eventObj = {};\n if (event.subject) {\n eventObj[this.fields.subject] = event.subject;\n }\n eventObj[this.fields.startTime] = event.startTime;\n eventObj[this.fields.endTime] = event.endTime;\n eventObj[this.fields.isAllDay] = event.isAllDay;\n eventObj.Timezone = false;\n this.repeatStartDate = eventObj[this.fields.startTime];\n this.repeatRule = '';\n if (this.parent.resources.length > 0 || this.parent.activeViewOptions.group.resources.length > 0) {\n this.parent.resourceBase.setResourceValues(eventObj, false);\n }\n this.showDetails(eventObj);\n var deleteButton = this.element.querySelector('.' + cls.EVENT_WINDOW_DELETE_BUTTON_CLASS);\n if (deleteButton) {\n addClass([deleteButton], cls.DISABLE_CLASS);\n }\n if (this.recurrenceEditor) {\n this.recurrenceEditor.setProperties({ startDate: event.startTime, selectedType: 0 });\n }\n if (this.parent.isAdaptive && isNullOrUndefined(this.parent.editorTemplate)) {\n var element = this.element.querySelector('.' + REPEAT_CONTAINER_CLASS);\n addClass([element], HIDE_STYLE_CLASS);\n this.updateRepeatLabel(this.repeatRule);\n }\n this.dialogObject.show();\n };\n EventWindow.prototype.applyFormValidation = function () {\n var form = this.element.querySelector('.' + cls.FORM_CLASS);\n var rules = {};\n rules[this.parent.eventSettings.fields.subject.name] = this.parent.eventSettings.fields.subject.validation;\n rules[this.parent.eventSettings.fields.location.name] = this.parent.eventSettings.fields.location.validation;\n rules[this.parent.eventSettings.fields.startTime.name] = this.parent.eventSettings.fields.startTime.validation;\n rules[this.parent.eventSettings.fields.endTime.name] = this.parent.eventSettings.fields.endTime.validation;\n rules[this.parent.eventSettings.fields.description.name] = this.parent.eventSettings.fields.description.validation;\n this.fieldValidator.renderFormValidator(form, rules, this.element);\n };\n EventWindow.prototype.showDetails = function (eventData) {\n var eventObj = extend({}, eventData, null, true);\n if (eventObj[this.fields.isAllDay]) {\n var temp = util.addDays(new Date(+eventObj[this.fields.endTime]), -1).getTime();\n eventObj[this.fields.endTime] = (+eventObj[this.fields.startTime] > temp) ? eventObj[this.fields.endTime] : new Date(temp);\n }\n this.eventData = eventObj;\n var formelement = this.getFormElements();\n var keyNames = Object.keys(eventObj);\n for (var index = 0, len = formelement.length; index < len; index++) {\n var curElement = formelement[index];\n var columnName = curElement.name;\n var isCustomElement = (curElement.classList.contains('e-multiselect') ||\n curElement.classList.contains('e-dropdownlist'));\n if (!isNullOrUndefined(columnName) || isCustomElement) {\n if (columnName === '' && isCustomElement) {\n columnName = this.getColumnName(curElement);\n curElement.setAttribute('name', columnName);\n }\n if (keyNames.indexOf(columnName) !== -1) {\n this.setValueToElement(curElement, eventObj[columnName]);\n }\n else {\n this.setDefaultValueToElement(curElement);\n }\n }\n }\n if (isNullOrUndefined(this.parent.editorTemplate)) {\n this.onAllDayChange(eventObj[this.fields.isAllDay]);\n var timezoneObj = this.getInstance(cls.TIME_ZONE_CLASS + '.' + EVENT_FIELD);\n if (!(isNullOrUndefined(eventObj[this.fields.startTimezone]) && isNullOrUndefined(eventObj[this.fields.endTimezone]))) {\n timezoneObj.checked = true;\n timezoneObj.dataBind();\n }\n this.timezoneChangeStyle(timezoneObj.checked);\n delete eventObj.Timezone;\n }\n };\n EventWindow.prototype.getColumnName = function (element) {\n var isDropDownList = element.classList.contains('e-dropdownlist');\n var inputCollection = isDropDownList ? [].slice.call(element.parentElement.children) :\n [].slice.call(element.parentElement.parentElement.children);\n var collection = inputCollection.filter(function (item) { return item.name; });\n return (collection.length > 0) ? collection[0].name : '';\n };\n EventWindow.prototype.onAllDayChange = function (allDayStatus) {\n var startObj = this.getInstance(cls.EVENT_WINDOW_START_CLASS);\n var endObj = this.getInstance(cls.EVENT_WINDOW_END_CLASS);\n var timezoneDiv = this.element.querySelector('.e-time-zone-container');\n var format;\n if (allDayStatus) {\n format = (isNullOrUndefined(this.parent.dateFormat)) ? this.getFormat('dateFormats') : this.parent.dateFormat;\n addClass(this.element.querySelectorAll('.e-time-icon'), cls.EVENT_WINDOW_ICON_DISABLE_CLASS);\n addClass([timezoneDiv], cls.DISABLE_CLASS);\n if (this.element.querySelector('.e-time-zone-row')) {\n removeClass([this.element.querySelector('.e-time-zone-row')], cls.ENABLE_CLASS);\n }\n startObj.format = endObj.format = format;\n }\n else {\n format = (isNullOrUndefined(this.parent.dateFormat)) ? this.getFormat('dateFormats') + ' ' + this.getFormat('timeFormats') :\n this.parent.dateFormat + ' ' + this.getFormat('timeFormats');\n removeClass(this.element.querySelectorAll('.e-time-icon'), cls.EVENT_WINDOW_ICON_DISABLE_CLASS);\n removeClass([timezoneDiv], cls.DISABLE_CLASS);\n if (this.element.querySelector('.e-checkbox-wrapper .e-time-zone').checked) {\n addClass([this.element.querySelector('.e-time-zone-row')], cls.ENABLE_CLASS);\n }\n startObj.format = endObj.format = format;\n }\n if (this.cellClickAction) {\n this.updateDateTime(allDayStatus, startObj, endObj);\n }\n startObj.dataBind();\n endObj.dataBind();\n };\n EventWindow.prototype.updateDateTime = function (allDayStatus, startObj, endObj) {\n var startDate;\n var endDate;\n if (allDayStatus) {\n startDate = util.resetTime(new Date(this.parent.activeCellsData.startTime.getTime()));\n endDate = this.parent.activeCellsData.isAllDay ?\n util.addDays(new Date(this.parent.activeCellsData.endTime.getTime()), -1) :\n util.resetTime(new Date(this.parent.activeCellsData.startTime.getTime()));\n }\n else {\n startDate = new Date(this.parent.activeCellsData.startTime.getTime());\n if (this.parent.currentView === 'Month' || this.parent.currentView === 'MonthAgenda' || this.parent.activeCellsData.isAllDay) {\n var startHour = this.parent.globalize.parseDate(this.parent.workHours.start, { skeleton: 'Hm' });\n startDate.setHours(startHour.getHours(), startHour.getMinutes(), startHour.getSeconds());\n endDate = new Date(startDate.getTime());\n endDate.setMilliseconds(util.MS_PER_MINUTE * this.getSlotDuration());\n }\n else {\n endDate = new Date(this.parent.activeCellsData.endTime.getTime());\n }\n }\n startObj.value = startDate;\n endObj.value = endDate;\n startObj.dataBind();\n endObj.dataBind();\n };\n EventWindow.prototype.getFormat = function (formatType) {\n var format;\n if (this.parent.locale === 'en' || this.parent.locale === 'en-US') {\n format = getValue(formatType + '.short', getDefaultDateObject());\n }\n else {\n format = getValue('main.' + '' + this.parent.locale + '.dates.calendars.gregorian.' + formatType + '.short', cldrData);\n }\n return format;\n };\n EventWindow.prototype.onEventDetailsUpdate = function (eventObj) {\n if (!this.parent.isAdaptive) {\n removeClass([this.element.querySelector('.' + cls.EVENT_WINDOW_DELETE_BUTTON_CLASS)], cls.DISABLE_CLASS);\n }\n this.element.querySelector('.' + cls.EVENT_WINDOW_TITLE_TEXT_CLASS).innerHTML = this.l10n.getConstant('editEvent');\n this.element.querySelector('.' + cls.FORM_CLASS).setAttribute('data-id', eventObj[this.fields.id].toString());\n if (isNullOrUndefined(this.parent.editorTemplate)) {\n eventObj = extend({}, eventObj, null, true);\n var timezoneObj = this.getInstance(cls.TIME_ZONE_CLASS + '.' + EVENT_FIELD);\n var timezoneValue = void 0;\n if (eventObj[this.fields.startTimezone] || eventObj[this.fields.endTimezone]) {\n timezoneValue = true;\n eventObj[this.fields.startTimezone] = eventObj[this.fields.startTimezone] || eventObj[this.fields.endTimezone];\n eventObj[this.fields.endTimezone] = eventObj[this.fields.endTimezone] || eventObj[this.fields.startTimezone];\n if (this.parent.timezone) {\n var startTz = eventObj[this.fields.startTimezone];\n var endTz = eventObj[this.fields.endTimezone];\n eventObj[this.fields.startTime] =\n this.timezone.convert(eventObj[this.fields.startTime], this.parent.timezone, startTz);\n eventObj[this.fields.endTime] =\n this.timezone.convert(eventObj[this.fields.endTime], this.parent.timezone, endTz);\n }\n }\n else {\n timezoneValue = false;\n }\n eventObj.Timezone = timezoneValue;\n timezoneObj.checked = timezoneValue;\n timezoneObj.dataBind();\n }\n this.showDetails(eventObj);\n if (eventObj[this.fields.recurrenceRule] && this.recurrenceEditor) {\n this.recurrenceEditor.setRecurrenceRule(eventObj[this.fields.recurrenceRule], eventObj[this.fields.startTime]);\n }\n else if (!this.parent.isAdaptive && this.recurrenceEditor) {\n this.recurrenceEditor.setRecurrenceRule('');\n }\n this.repeatStartDate = eventObj[this.fields.startTime];\n this.repeatRule = '';\n if (eventObj[this.fields.recurrenceRule]) {\n if (this.recurrenceEditor) {\n this.recurrenceEditor.setRecurrenceRule(eventObj[this.fields.recurrenceRule], eventObj[this.fields.startTime]);\n }\n this.repeatRule = eventObj[this.fields.recurrenceRule];\n }\n if (this.parent.isAdaptive && isNullOrUndefined(this.parent.editorTemplate)) {\n var element = this.element.querySelector('.' + REPEAT_CONTAINER_CLASS);\n if (eventObj[this.fields.recurrenceRule]) {\n removeClass([element], HIDE_STYLE_CLASS);\n this.repeatStatus.setProperties({ checked: true });\n }\n else {\n addClass([element], HIDE_STYLE_CLASS);\n this.repeatStatus.setProperties({ checked: false });\n }\n this.updateRepeatLabel(this.repeatRule);\n }\n if (this.parent.readonly && !this.parent.isAdaptive) {\n var saveButton = this.element.querySelector('.' + cls.EVENT_WINDOW_SAVE_BUTTON_CLASS);\n saveButton.ej2_instances[0].disabled = true;\n var deleteButton = this.element.querySelector('.' + cls.EVENT_WINDOW_DELETE_BUTTON_CLASS);\n deleteButton.ej2_instances[0].disabled = true;\n }\n this.dialogObject.show();\n };\n EventWindow.prototype.refreshResourceDataSource = function () {\n var _this = this;\n if (this.parent.resources.length === 0 || !isNullOrUndefined(this.parent.editorTemplate)) {\n return;\n }\n this.parent.resourceBase.resourceCollection.forEach(function (resource, index) {\n var instance = _this.createInstance(index - 1);\n instance.dataSource = resource.dataSource;\n instance.dataBind();\n });\n };\n EventWindow.prototype.renderRecurrenceEditor = function () {\n return new RecurrenceEditor({\n cssClass: this.parent.cssClass,\n dateFormat: this.parent.dateFormat,\n enableRtl: this.parent.enableRtl,\n firstDayOfWeek: this.parent.firstDayOfWeek,\n locale: this.parent.locale\n });\n };\n EventWindow.prototype.updateRepeatLabel = function (repeatRule) {\n if (this.parent.isAdaptive && !this.repeatDialogObject) {\n this.renderRepeatDialog();\n }\n var data = repeatRule ?\n (this.l10n.getConstant('repeats') + ' ' + this.recurrenceEditor.getRuleSummary(repeatRule)) : this.l10n.getConstant('repeat');\n this.repeatStatus.setProperties({ label: data });\n };\n EventWindow.prototype.dialogClose = function (args) {\n this.dialogObject.hide();\n this.fieldValidator.destroyToolTip();\n this.resetFormFields();\n if (!this.parent.isAdaptive && this.recurrenceEditor) {\n this.recurrenceEditor.resetFields();\n }\n };\n EventWindow.prototype.timezoneChangeStyle = function (value) {\n var timezoneDiv = this.element.querySelector('.' + cls.EVENT_WINDOW_TIME_ZONE_DIV_CLASS);\n if (value) {\n addClass([timezoneDiv], cls.ENABLE_CLASS);\n var startTimezoneObj = this.getInstance(cls.EVENT_WINDOW_START_TZ_CLASS);\n var endTimezoneObj = this.getInstance(cls.EVENT_WINDOW_END_TZ_CLASS);\n var timezone = startTimezoneObj.dataSource;\n if (!startTimezoneObj.value || !this.parent.timezone) {\n var found = timezone.some(function (tz) { return tz.Value === localTimezoneName; });\n if (!found) {\n var obj = {};\n obj = { Value: localTimezoneName, Text: localTimezoneName };\n timezone.push(obj);\n startTimezoneObj.dataSource = timezone;\n endTimezoneObj.dataSource = timezone;\n startTimezoneObj.dataBind();\n endTimezoneObj.dataBind();\n }\n }\n startTimezoneObj.value = startTimezoneObj.value || this.parent.timezone || localTimezoneName;\n endTimezoneObj.value = endTimezoneObj.value || this.parent.timezone || localTimezoneName;\n startTimezoneObj.dataBind();\n endTimezoneObj.dataBind();\n }\n else {\n removeClass([timezoneDiv], cls.ENABLE_CLASS);\n }\n };\n EventWindow.prototype.resetFormFields = function () {\n var formelement = this.getFormElements();\n for (var index = 0, len = formelement.length; index < len; index++) {\n var columnName = formelement[index].name;\n if (!isNullOrUndefined(columnName) && columnName !== '') {\n this.setDefaultValueToElement(formelement[index]);\n }\n }\n };\n EventWindow.prototype.eventSave = function (alert) {\n var alertType;\n var formElement = this.element.querySelector('.' + cls.FORM_CLASS);\n if (formElement && formElement.classList.contains('e-formvalidator') &&\n !formElement.ej2_instances[0].validate()) {\n return;\n }\n var eventObj = {};\n var formelement = this.getFormElements();\n for (var index = 0, len = formelement.length; index < len; index++) {\n var currentElement = formelement[index];\n var columnName = currentElement.name;\n var isCustomElement = (currentElement.classList.contains('e-dropdownlist') ||\n currentElement.classList.contains('e-multiselect'));\n if (!isNullOrUndefined(columnName) && columnName !== '' || isCustomElement) {\n if (isCustomElement && columnName === '') {\n columnName = this.getColumnName(currentElement);\n currentElement.setAttribute('name', columnName);\n }\n eventObj[columnName] = this.getValueFromElement(currentElement);\n }\n }\n if (!eventObj.Timezone) {\n eventObj[this.fields.startTimezone] = null;\n eventObj[this.fields.endTimezone] = null;\n }\n if (isNullOrUndefined(this.parent.editorTemplate)) {\n delete eventObj.Timezone;\n delete eventObj.Repeat;\n if (!eventObj[this.fields.startTime] || !eventObj[this.fields.endTime]) {\n this.parent.quickPopup.openValidationError('invalidDateError');\n return;\n }\n if (eventObj[this.fields.startTime] > eventObj[this.fields.endTime]) {\n this.parent.quickPopup.openValidationError('startEndError');\n return;\n }\n if (this.recurrenceEditor && this.recurrenceEditor.value && this.recurrenceEditor.value !== '') {\n alertType = this.recurrenceValidation(eventObj[this.fields.startTime], eventObj[this.fields.endTime], alert);\n if (!isNullOrUndefined(alertType)) {\n this.parent.quickPopup.openRecurrenceValidationAlert(alertType);\n return;\n }\n }\n }\n var eventId = this.getEventIdFromForm();\n if (!isNullOrUndefined(eventObj[this.fields.subject])) {\n eventObj[this.fields.subject] = eventObj[this.fields.subject] !== '' ?\n eventObj[this.fields.subject] : this.parent.eventSettings.fields.subject.default;\n }\n if (eventObj[this.fields.isAllDay]) {\n eventObj[this.fields.startTime] = util.resetTime(eventObj[this.fields.startTime]);\n eventObj[this.fields.endTime] = util.addDays(util.resetTime(eventObj[this.fields.endTime]), 1);\n }\n var ruleData = this.recurrenceEditor ? this.recurrenceEditor.getRecurrenceRule() : null;\n eventObj[this.fields.recurrenceRule] = ruleData ? ruleData : undefined;\n if (!isNullOrUndefined(eventId)) {\n var editedData = new DataManager({ json: this.parent.eventsData }).\n executeLocal(new Query().where(this.fields.id, 'equal', parseInt(eventId, 10)))[0];\n eventObj = extend({}, editedData, eventObj);\n if (!isNullOrUndefined(editedData[this.fields.recurrenceRule])) {\n if (this.parent.currentAction === 'EditOccurrence') {\n if (!eventObj[this.fields.recurrenceID]) {\n eventObj[this.fields.id] = this.parent.eventBase.getEventMaxId() + 1;\n }\n if (this.editOccurrenceValidation(eventId, eventObj)) {\n this.parent.quickPopup.openRecurrenceValidationAlert('sameDayAlert');\n return;\n }\n }\n if (this.parent.currentAction === 'EditSeries' || eventObj[this.fields.id] !==\n editedData[this.fields.id]) {\n eventObj[this.fields.recurrenceID] = editedData[this.fields.id];\n }\n if ((this.parent.activeViewOptions.group.resources.length > 0 || this.parent.resources.length > 0)\n && !this.parent.activeViewOptions.group.allowGroupEdit) {\n this.resourceSaveEvent(eventObj, 'save', this.parent.currentAction);\n }\n else {\n this.parent.saveEvent(eventObj, this.parent.currentAction);\n }\n }\n else {\n if ((this.parent.activeViewOptions.group.resources.length > 0 || this.parent.resources.length > 0)\n && !this.parent.activeViewOptions.group.allowGroupEdit) {\n this.resourceSaveEvent(eventObj, 'save');\n }\n else {\n this.parent.saveEvent(eventObj);\n }\n }\n }\n else {\n if ((this.parent.activeViewOptions.group.resources.length > 0 || this.parent.resources.length > 0)\n && !this.parent.activeViewOptions.group.allowGroupEdit) {\n this.resourceSaveEvent(eventObj, 'add');\n }\n else {\n eventObj[this.fields.id] = this.parent.eventBase.getEventMaxId() + 1;\n this.parent.addEvent(eventObj);\n }\n }\n this.dialogObject.hide();\n };\n EventWindow.prototype.recurrenceValidation = function (startDate, endDate, alert) {\n var alertMessage;\n var recEditor = this.recurrenceEditor;\n var event = this.eventData;\n var interval = this.getInstance('e-repeat-interval.e-numerictextbox').value;\n if (alert !== this.l10n.getConstant('ok')) {\n if (this.parent.currentAction === 'EditSeries' && !isNullOrUndefined(event[this.parent.eventFields.recurrenceException])) {\n alertMessage = 'seriesChangeAlert';\n }\n if (this.getInstance('e-end-on-left .e-ddl .e-dropdownlist').value === 'until' &&\n this.getInstance('e-end-on-date .e-datepicker').value\n < recEditor.startDate) {\n alertMessage = 'wrongPattern';\n }\n if (isNullOrUndefined(alertMessage)) {\n switch (recEditor.value.split(';')[0].split('=')[1]) {\n case 'DAILY':\n if (((endDate.getTime() - startDate.getTime()) / (1000 * 3600) >= (interval * 24))) {\n alertMessage = 'createError';\n }\n break;\n case 'WEEKLY':\n var types = recEditor.value.split(';')[1].split('=')[1].split(',');\n var obj = { 'SU': 0, 'MO': 1, 'TU': 2, 'WE': 3, 'TH': 4, 'FR': 5, 'SA': 6 };\n var temp = [];\n var tempDiff = [];\n for (var index = 0; index < types.length * (interval + 1); index++) {\n temp[index] =\n (types.length > index) ? obj[types[index]] : temp[index - types.length] + (7 * interval);\n }\n var tempvalue = temp.sort(function (a, b) { return a - b; });\n for (var index = 1; index < tempvalue.length; index++) {\n tempDiff.push(tempvalue[index] - tempvalue[index - 1]);\n }\n if (((endDate.getTime() - startDate.getTime()) / (1000 * 3600) >= Math.min.apply(Math, tempDiff) * 24)) {\n alertMessage = 'createError';\n }\n break;\n case 'MONTHLY':\n if (this.getInstance('e-month-expander-checkbox-wrapper .e-radio').checked\n && [29, 30, 31].indexOf(parseInt(recEditor.value.split(';')[1].split('=')[1], 10)) !== -1) {\n alertMessage = 'dateValidation';\n }\n else if (endDate.getTime() >= new Date(+startDate).setMonth(startDate.getMonth() + interval)) {\n alertMessage = 'createError';\n }\n break;\n case 'YEARLY':\n if (endDate.getTime() >= new Date(+startDate).setFullYear(startDate.getFullYear() + interval)) {\n alertMessage = 'createError';\n }\n break;\n }\n }\n }\n else {\n if (endDate.getTime() >= new Date(+startDate).setMonth(startDate.getMonth() + interval)) {\n alertMessage = 'createError';\n }\n if (isNullOrUndefined(alertMessage)) {\n this.parent.quickPopup.quickDialog.hide();\n }\n }\n return alertMessage;\n };\n EventWindow.prototype.getRecurrenceIndex = function (recColl, event) {\n var recIndex;\n for (var index = 0; index < recColl.length; index++) {\n if (event[this.fields.startTime].valueOf() === recColl[index][this.fields.startTime].valueOf()) {\n recIndex = index;\n break;\n }\n }\n return recIndex;\n };\n EventWindow.prototype.editOccurrenceValidation = function (eventId, eventObj) {\n var recurColl = this.parent.getOccurrencesByID(parseInt(eventId, 10));\n var index = this.getRecurrenceIndex(recurColl, this.eventData);\n if (isNullOrUndefined(index)) {\n return false;\n }\n if (index === 0) {\n if (!isNullOrUndefined(recurColl[index + 1])) {\n if (!(new Date(+recurColl[index + 1][this.fields.startTime]).getTime() >=\n new Date(+eventObj[this.fields.endTime]).getTime())) {\n return true;\n }\n }\n }\n else {\n if (index === recurColl.length - 1) {\n if (!(new Date(+recurColl[index - 1][this.fields.endTime]).getTime()\n <= new Date(+eventObj[this.fields.startTime]).getTime())) {\n return true;\n }\n }\n else if (!((new Date(+recurColl[index - 1][this.fields.endTime]).getTime() <=\n new Date(+eventObj[this.fields.startTime]).getTime()) &&\n (new Date(+recurColl[index + 1][this.fields.startTime]).getTime() >=\n new Date(+eventObj[this.fields.endTime]).getTime()))) {\n return true;\n }\n }\n return false;\n };\n EventWindow.prototype.resourceSaveEvent = function (eventObj, action, currentAction) {\n var _this = this;\n var lastResouceData = this.parent.resourceBase.resourceCollection.slice(-1)[0];\n var resourceData = eventObj[lastResouceData.field];\n resourceData = (resourceData instanceof Array) ? resourceData : [resourceData];\n var lastlevel = this.parent.resourceBase.lastResourceLevel;\n var eventList = [];\n var temp;\n var _loop_1 = function (i) {\n var events = extend({}, eventObj, null, true);\n events[this_1.fields.id] = this_1.parent.eventBase.getEventMaxId() + 1;\n temp = [];\n var addValues = function () {\n if (action === 'save' && i === resourceData.length - 1) {\n if (temp.length > 0) {\n temp[0][_this.fields.id] = eventObj[_this.fields.id];\n for (var k = 1; k < temp.length; k++) {\n temp[k][_this.fields.id] = _this.parent.eventBase.getEventMaxId() + 1 + i;\n eventList.push(temp[k]);\n _this.parent.saveEvent(temp[0], currentAction);\n }\n }\n else {\n events[_this.fields.id] = eventObj[_this.fields.id];\n _this.parent.saveEvent(events, currentAction);\n }\n }\n else {\n if (temp.length > 0) {\n for (var j = 0; j < temp.length; j++) {\n temp[j][_this.fields.id] = _this.parent.eventBase.getEventMaxId() + 1 + j;\n eventList.push(temp[j]);\n }\n }\n else {\n events[_this.fields.id] = _this.parent.eventBase.getEventMaxId() + 1 + i;\n eventList.push(events);\n }\n }\n };\n if (this_1.parent.activeViewOptions.group.byGroupID && (!isNullOrUndefined(lastlevel))) {\n var filter = lastlevel.filter(function (obj) {\n return obj.resourceData[lastResouceData.idField] === resourceData[i];\n })[0];\n var groupOrder = filter.groupOrder;\n for (var index = 0; index < this_1.parent.resourceBase.resourceCollection.length; index++) {\n var field = this_1.parent.resourceBase.resourceCollection[index].field;\n events[field] = (groupOrder[index] instanceof Array) ? groupOrder[index][0] : groupOrder[index];\n }\n addValues();\n }\n else {\n for (var index = 0; index < this_1.parent.resourceBase.resourceCollection.length - 1; index++) {\n var field = this_1.parent.resourceBase.resourceCollection[index].field;\n if (events[field] instanceof Array && events[field].length > 1) {\n for (var k = 0; k < events[field].length; k++) {\n var event_1 = extend({}, events, null, true);\n event_1[field] = eventObj[field][k];\n event_1[lastResouceData.field] = resourceData[i];\n temp.push(event_1);\n }\n }\n else {\n if (temp.length === 0) {\n events[field] = (eventObj[field] instanceof Array) ?\n eventObj[field][0] : eventObj[field];\n events[lastResouceData.field] = resourceData[i];\n }\n else {\n for (var l = 0; l < temp.length; l++) {\n temp[l][field] = (eventObj[field] instanceof Array) ?\n eventObj[field][0] : eventObj[field];\n }\n }\n }\n }\n events[lastResouceData.field] = resourceData[i];\n addValues();\n }\n };\n var this_1 = this;\n for (var i = 0; i < resourceData.length; i++) {\n _loop_1(i);\n }\n if (eventList.length > 0) {\n for (var _i = 0, eventList_1 = eventList; _i < eventList_1.length; _i++) {\n var event_2 = eventList_1[_i];\n event_2[this.fields.recurrenceException] = null;\n event_2[this.fields.recurrenceID] = null;\n }\n this.parent.addEvent(eventList);\n }\n };\n EventWindow.prototype.getEventIdFromForm = function () {\n return this.element.querySelector('.' + cls.FORM_CLASS).getAttribute('data-id');\n };\n EventWindow.prototype.getFormElements = function () {\n return [].slice.call(this.element.querySelectorAll('.' + EVENT_FIELD));\n };\n EventWindow.prototype.getValueFromElement = function (element) {\n var value;\n if (element.classList.contains('e-datepicker')) {\n value = element.ej2_instances[0].value;\n }\n else if (element.classList.contains('e-datetimepicker')) {\n value = element.ej2_instances[0].value;\n }\n else if (element.classList.contains('e-dropdownlist')) {\n value = element.ej2_instances[0].value;\n }\n else if (element.classList.contains('e-multiselect')) {\n value = element.ej2_instances[0].value;\n }\n else if (element.classList.contains('e-checkbox')) {\n value = element.ej2_instances[0].checked;\n }\n else {\n if (element.type === 'checkbox') {\n value = element.checked;\n }\n else {\n value = element.value;\n }\n }\n return value;\n };\n EventWindow.prototype.setValueToElement = function (element, value) {\n if (element.classList.contains('e-datepicker')) {\n var instance = element.ej2_instances[0];\n instance.value = value;\n instance.dataBind();\n }\n else if (element.classList.contains('e-datetimepicker')) {\n var instance = element.ej2_instances[0];\n instance.value = value;\n instance.dataBind();\n }\n else if (element.classList.contains('e-dropdownlist')) {\n var instance = element.ej2_instances[0];\n instance.value = value;\n instance.dataBind();\n }\n else if (element.classList.contains('e-multiselect')) {\n var instance = element.ej2_instances[0];\n instance.value = [];\n instance.value = ((value instanceof Array) ? value : [value]);\n instance.dataBind();\n }\n else if (element.classList.contains('e-checkbox')) {\n var instance = element.ej2_instances[0];\n instance.checked = value;\n instance.dataBind();\n }\n else {\n if (element.type !== 'checkbox') {\n element.value = value || '';\n }\n else {\n element.checked = value;\n }\n }\n };\n EventWindow.prototype.setDefaultValueToElement = function (element) {\n if (element.classList.contains('e-datepicker')) {\n var instance = element.ej2_instances[0];\n instance.value = new Date();\n instance.dataBind();\n }\n else if (element.classList.contains('e-datetimepicker')) {\n var instance = element.ej2_instances[0];\n instance.value = new Date();\n instance.dataBind();\n }\n else if (element.classList.contains('e-dropdownlist')) {\n var instance = element.ej2_instances[0];\n instance.value = null;\n instance.dataBind();\n }\n else if (element.classList.contains('e-multiselect')) {\n var instance = element.ej2_instances[0];\n instance.value = [];\n instance.dataBind();\n }\n else if (element.classList.contains('e-checkbox')) {\n var instance = element.ej2_instances[0];\n instance.checked = false;\n instance.dataBind();\n }\n else {\n if (element.type === 'checkbox') {\n element.checked = false;\n }\n else {\n element.value = '';\n }\n }\n };\n EventWindow.prototype.getInstance = function (className) {\n return this.element.querySelector('.' + className).ej2_instances[0];\n };\n EventWindow.prototype.eventDelete = function (args) {\n switch (this.parent.currentAction) {\n case 'EditOccurrence':\n var fields = this.parent.eventFields;\n if (!isNullOrUndefined(this.parent.activeEventData.event[fields.recurrenceRule])) {\n this.parent.currentAction = 'DeleteOccurrence';\n }\n else {\n this.parent.currentAction = 'Delete';\n }\n break;\n case 'EditSeries':\n this.parent.currentAction = 'DeleteSeries';\n break;\n }\n this.dialogObject.hide();\n this.parent.quickPopup.openDeleteAlert();\n };\n EventWindow.prototype.getRecurrenceEditorInstance = function () {\n if (this.parent.isAdaptive && !this.repeatDialogObject) {\n this.renderRepeatDialog();\n }\n return this.recurrenceEditor;\n };\n EventWindow.prototype.destroyComponents = function () {\n var formelement = this.getFormElements();\n for (var _i = 0, formelement_1 = formelement; _i < formelement_1.length; _i++) {\n var element = formelement_1[_i];\n var instance = void 0;\n if (element.classList.contains('e-datetimepicker')) {\n instance = element.ej2_instances[0];\n }\n else if (element.classList.contains('e-datepicker')) {\n instance = element.ej2_instances[0];\n }\n else if (element.classList.contains('e-checkbox')) {\n instance = element.ej2_instances[0];\n }\n else if (element.classList.contains('e-dropdownlist')) {\n instance = element.ej2_instances[0];\n }\n else if (element.classList.contains('e-multiselect')) {\n instance = element.ej2_instances[0];\n }\n if (instance) {\n instance.destroy();\n }\n }\n if (this.buttonObj) {\n this.buttonObj.destroy();\n }\n };\n /**\n * To destroy the event window.\n * @return {void}\n * @private\n */\n EventWindow.prototype.destroy = function () {\n this.fieldValidator.destroy();\n if (this.recurrenceEditor) {\n this.recurrenceEditor.destroy();\n }\n this.destroyComponents();\n if (this.repeatDialogObject) {\n this.repeatDialogObject.destroy();\n remove(this.repeatDialogObject.element);\n }\n if (this.dialogObject) {\n this.dialogObject.destroy();\n this.dialogObject = null;\n }\n if (this.element) {\n remove(this.element);\n this.element = null;\n }\n };\n return EventWindow;\n}());\nexport { EventWindow };\n","import { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport * as cls from '../base/css-constant';\n/**\n * Schedule DOM rendering\n */\nvar Render = /** @class */ (function () {\n /**\n * Constructor for render\n */\n function Render(parent) {\n this.parent = parent;\n }\n Render.prototype.render = function (viewName, isDataRefresh) {\n if (isDataRefresh === void 0) { isDataRefresh = true; }\n this.initializeLayout(viewName);\n if (isDataRefresh) {\n this.refreshDataManager();\n }\n };\n Render.prototype.initializeLayout = function (viewName) {\n if (this.parent.activeView) {\n this.parent.activeView.removeEventListener();\n this.parent.activeView.destroy();\n }\n switch (viewName) {\n case 'Day':\n this.parent.activeView = this.parent.dayModule;\n break;\n case 'Week':\n this.parent.activeView = this.parent.weekModule;\n break;\n case 'WorkWeek':\n this.parent.activeView = this.parent.workWeekModule;\n break;\n case 'Month':\n this.parent.activeView = this.parent.monthModule;\n break;\n case 'Agenda':\n this.parent.activeView = this.parent.agendaModule;\n break;\n // case 'weekAgenda':\n // this.parent.activeView = this.parent.weekAgendaModule;\n // break;\n // case 'workWeekAgenda':\n // this.parent.activeView = this.parent.workWeekAgendaModule;\n // break;\n case 'MonthAgenda':\n this.parent.activeView = this.parent.monthAgendaModule;\n break;\n }\n if (isNullOrUndefined(this.parent.activeView)) {\n var firstView = this.parent.viewCollections[0].option;\n if (firstView) {\n this.parent.setProperties({ currentView: firstView }, true);\n if (this.parent.headerModule) {\n this.parent.headerModule.updateActiveView();\n this.parent.headerModule.setCalendarView();\n }\n return this.initializeLayout(firstView);\n }\n throw Error('Inject required modules');\n }\n this.updateLabelText(viewName);\n this.parent.activeView.addEventListener();\n this.parent.activeView.getRenderDates();\n this.parent.uiStateValues.isGroupAdaptive = this.parent.isAdaptive && this.parent.activeViewOptions.group.resources.length > 0 &&\n this.parent.activeViewOptions.group.enableCompactView;\n this.parent.activeView.renderLayout(cls.CURRENT_PANEL_CLASS);\n if (this.parent.headerModule) {\n this.parent.headerModule.updateDateRange(this.parent.activeView.getDateRangeText());\n }\n this.parent.adjustEventWrapper();\n };\n Render.prototype.updateLabelText = function (view) {\n var content = this.parent.activeView.getLabelText(view);\n this.parent.element.setAttribute('role', 'main');\n this.parent.element.setAttribute('aria-label', content);\n };\n Render.prototype.refreshDataManager = function () {\n var _this = this;\n var start = this.parent.activeView.startDate();\n var end = this.parent.activeView.endDate();\n var dataManager = this.parent.dataModule.getData(this.parent.dataModule.generateQuery(start, end));\n dataManager.then(function (e) { return _this.dataManagerSuccess(e); })\n .catch(function (e) { return _this.dataManagerFailure(e); });\n };\n Render.prototype.dataManagerSuccess = function (e) {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.trigger(events.dataBinding, e);\n this.parent.eventsData = extend([], e.result, null, true);\n var processed = this.parent.eventBase.processData(this.parent.eventsData);\n this.parent.notify(events.dataReady, { processedData: processed });\n this.parent.trigger(events.dataBound);\n this.parent.hideSpinner();\n };\n Render.prototype.dataManagerFailure = function (e) {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.trigger(events.actionFailure, { error: e });\n this.parent.hideSpinner();\n };\n return Render;\n}());\nexport { Render };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configuration of options related to working hours on Schedule.\n */\nvar WorkHours = /** @class */ (function (_super) {\n __extends(WorkHours, _super);\n function WorkHours() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], WorkHours.prototype, \"highlight\", void 0);\n __decorate([\n Property('09:00')\n ], WorkHours.prototype, \"start\", void 0);\n __decorate([\n Property('18:00')\n ], WorkHours.prototype, \"end\", void 0);\n return WorkHours;\n}(ChildProperty));\nexport { WorkHours };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configuration of options related to timescale on Schedule.\n */\nvar TimeScale = /** @class */ (function (_super) {\n __extends(TimeScale, _super);\n function TimeScale() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], TimeScale.prototype, \"enable\", void 0);\n __decorate([\n Property(60)\n ], TimeScale.prototype, \"interval\", void 0);\n __decorate([\n Property(2)\n ], TimeScale.prototype, \"slotCount\", void 0);\n __decorate([\n Property()\n ], TimeScale.prototype, \"minorSlotTemplate\", void 0);\n __decorate([\n Property()\n ], TimeScale.prototype, \"majorSlotTemplate\", void 0);\n return TimeScale;\n}(ChildProperty));\nexport { TimeScale };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * A Class that holds the collection of event fields that requires to be mapped with the dataSource\n * fields along with its available configuration settings. Each field in it accepts both string and Object\n * data type. When each of the field is assigned with simple `string` value, it is assumed that the dataSource field\n * name is mapped with it. If the `object` type is defined on each fields, then the validation related settings and mapping of\n * those fields with dataSource can be given altogether within it.\n */\nvar Field = /** @class */ (function (_super) {\n __extends(Field, _super);\n function Field() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Id')\n ], Field.prototype, \"id\", void 0);\n __decorate([\n Property({ name: 'Subject', default: 'Add title' })\n ], Field.prototype, \"subject\", void 0);\n __decorate([\n Property({ name: 'StartTime' })\n ], Field.prototype, \"startTime\", void 0);\n __decorate([\n Property({ name: 'EndTime' })\n ], Field.prototype, \"endTime\", void 0);\n __decorate([\n Property({ name: 'StartTimezone' })\n ], Field.prototype, \"startTimezone\", void 0);\n __decorate([\n Property({ name: 'EndTimezone' })\n ], Field.prototype, \"endTimezone\", void 0);\n __decorate([\n Property({ name: 'Location' })\n ], Field.prototype, \"location\", void 0);\n __decorate([\n Property({ name: 'Description' })\n ], Field.prototype, \"description\", void 0);\n __decorate([\n Property({ name: 'IsAllDay' })\n ], Field.prototype, \"isAllDay\", void 0);\n __decorate([\n Property({ name: 'RecurrenceID' })\n ], Field.prototype, \"recurrenceID\", void 0);\n __decorate([\n Property({ name: 'RecurrenceRule' })\n ], Field.prototype, \"recurrenceRule\", void 0);\n __decorate([\n Property({ name: 'RecurrenceException' })\n ], Field.prototype, \"recurrenceException\", void 0);\n return Field;\n}(ChildProperty));\nexport { Field };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, Complex } from '@syncfusion/ej2-base';\nimport { Field } from './fields';\n/**\n * Holds the configuration of event related options and dataSource binding to Schedule.\n */\nvar EventSettings = /** @class */ (function (_super) {\n __extends(EventSettings, _super);\n function EventSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], EventSettings.prototype, \"template\", void 0);\n __decorate([\n Property([])\n ], EventSettings.prototype, \"dataSource\", void 0);\n __decorate([\n Property()\n ], EventSettings.prototype, \"query\", void 0);\n __decorate([\n Complex({}, Field)\n ], EventSettings.prototype, \"fields\", void 0);\n __decorate([\n Property(false)\n ], EventSettings.prototype, \"enableTooltip\", void 0);\n __decorate([\n Property()\n ], EventSettings.prototype, \"tooltipTemplate\", void 0);\n __decorate([\n Property()\n ], EventSettings.prototype, \"resourceColorField\", void 0);\n return EventSettings;\n}(ChildProperty));\nexport { EventSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * A class that holds the resource grouping related configurations on Schedule.\n */\nvar Group = /** @class */ (function (_super) {\n __extends(Group, _super);\n function Group() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], Group.prototype, \"byDate\", void 0);\n __decorate([\n Property(true)\n ], Group.prototype, \"byGroupID\", void 0);\n __decorate([\n Property(false)\n ], Group.prototype, \"allowGroupEdit\", void 0);\n __decorate([\n Property([])\n ], Group.prototype, \"resources\", void 0);\n __decorate([\n Property(true)\n ], Group.prototype, \"enableCompactView\", void 0);\n return Group;\n}(ChildProperty));\nexport { Group };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * A class that represents the resource related configurations and its data binding options.\n */\nvar Resources = /** @class */ (function (_super) {\n __extends(Resources, _super);\n function Resources() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], Resources.prototype, \"field\", void 0);\n __decorate([\n Property()\n ], Resources.prototype, \"title\", void 0);\n __decorate([\n Property()\n ], Resources.prototype, \"name\", void 0);\n __decorate([\n Property(false)\n ], Resources.prototype, \"allowMultiple\", void 0);\n __decorate([\n Property([])\n ], Resources.prototype, \"dataSource\", void 0);\n __decorate([\n Property()\n ], Resources.prototype, \"query\", void 0);\n __decorate([\n Property('Id')\n ], Resources.prototype, \"idField\", void 0);\n __decorate([\n Property('Text')\n ], Resources.prototype, \"textField\", void 0);\n __decorate([\n Property('GroupID')\n ], Resources.prototype, \"groupIDField\", void 0);\n __decorate([\n Property('Color')\n ], Resources.prototype, \"colorField\", void 0);\n __decorate([\n Property('StartHour')\n ], Resources.prototype, \"startHourField\", void 0);\n __decorate([\n Property('EndHour')\n ], Resources.prototype, \"endHourField\", void 0);\n __decorate([\n Property('WorkDays')\n ], Resources.prototype, \"workDaysField\", void 0);\n __decorate([\n Property('CssClass')\n ], Resources.prototype, \"cssClassField\", void 0);\n return Resources;\n}(ChildProperty));\nexport { Resources };\n","import { extend, isNullOrUndefined, createElement, EventHandler, addClass, removeClass, remove, closest } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { TreeView } from '@syncfusion/ej2-navigations';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { Data } from '../actions/data';\nimport * as cls from '../base/css-constant';\nimport * as events from '../base/constant';\nimport * as util from '../base/util';\nvar ResourceBase = /** @class */ (function () {\n function ResourceBase(parent) {\n this.resourceCollection = [];\n this.parent = parent;\n }\n ResourceBase.prototype.renderResourceHeader = function () {\n var resourceWrapper = createElement('div', { className: cls.RESOURCE_TOOLBAR_CONTAINER });\n resourceWrapper.innerHTML = '
    ' +\n '
    ';\n if (this.parent.currentView === 'MonthAgenda') {\n var target = this.parent.activeView.getPanel().querySelector('.' + cls.CONTENT_WRAP_CLASS);\n target.insertBefore(resourceWrapper, target.children[1]);\n }\n else {\n this.parent.element.insertBefore(resourceWrapper, this.parent.element.children[2]);\n }\n this.renderResourceHeaderText();\n EventHandler.add(resourceWrapper.querySelector('.' + cls.RESOURCE_MENU_ICON), 'click', this.menuClick, this);\n };\n ResourceBase.prototype.renderResourceTree = function () {\n this.popupOverlay = createElement('div', { className: cls.RESOURCE_TREE_POPUP_OVERLAY });\n var treeWrapper = createElement('div', { className: cls.RESOURCE_TREE_POPUP + ' e-popup-close' });\n if (this.parent.currentView === 'MonthAgenda') {\n var target = this.parent.activeView.getPanel().querySelector('.' + cls.WRAPPER_CONTAINER_CLASS);\n target.insertBefore(treeWrapper, target.children[0]);\n target.appendChild(this.popupOverlay);\n }\n else {\n this.parent.element.querySelector('.' + cls.TABLE_CONTAINER_CLASS).appendChild(treeWrapper);\n this.parent.element.querySelector('.' + cls.TABLE_CONTAINER_CLASS).appendChild(this.popupOverlay);\n }\n var resourceTree = createElement('div', { className: cls.RESOURCE_TREE });\n treeWrapper.appendChild(resourceTree);\n this.treeViewObj = new TreeView({\n cssClass: this.parent.cssClass,\n enableRtl: this.parent.enableRtl,\n fields: {\n dataSource: this.generateTreeData(),\n id: 'resourceId',\n text: 'resourceName',\n child: 'resourceChild'\n },\n nodeTemplate: this.parent.resourceHeaderTemplate,\n nodeClicked: this.resourceClick.bind(this)\n });\n this.treeViewObj.appendTo(resourceTree);\n this.treeViewObj.expandAll();\n this.treePopup = new Popup(treeWrapper, {\n targetType: 'relative',\n content: this.treeViewObj.element,\n enableRtl: this.parent.enableRtl,\n hideAnimation: { name: 'SlideLeftOut', duration: 500 },\n showAnimation: { name: 'SlideLeftIn', duration: 500 },\n viewPortElement: this.parent.element.querySelector('.' + (this.parent.currentView === 'MonthAgenda' ?\n cls.WRAPPER_CONTAINER_CLASS : cls.TABLE_CONTAINER_CLASS))\n });\n this.parent.on(events.documentClick, this.documentClick, this);\n };\n ResourceBase.prototype.generateTreeData = function () {\n var _this = this;\n var treeCollection = [];\n this.resourceTreeLevel.forEach(function (resTree, index) {\n var treeHandler = function (treeLevel, index, levelId) {\n var resource = _this.resourceCollection[index];\n var treeArgs = {\n resourceId: levelId,\n resourceName: treeLevel.resourceData[resource.textField]\n };\n if (treeLevel.child.length > 0) {\n treeArgs.resourceChild = [];\n }\n var count = 1;\n for (var _i = 0, _a = treeLevel.child; _i < _a.length; _i++) {\n var tree = _a[_i];\n treeArgs.resourceChild.push(treeHandler(tree, index + 1, levelId + '-' + count));\n count += 1;\n }\n return treeArgs;\n };\n treeCollection.push(treeHandler(resTree, 0, (index + 1).toString()));\n });\n return treeCollection;\n };\n ResourceBase.prototype.renderResourceHeaderText = function () {\n var _this = this;\n var resource = this.lastResourceLevel[this.parent.uiStateValues.groupIndex];\n var headerCollection = [];\n resource.groupOrder.forEach(function (level, index) {\n var resourceLevel = _this.resourceCollection[index];\n var resourceText = resourceLevel.dataSource.filter(function (resData) {\n return resData[resourceLevel.idField] === level;\n });\n var resourceName = createElement('div', {\n className: cls.RESOURCE_NAME,\n innerHTML: resourceText[0][resourceLevel.textField]\n });\n headerCollection.push(resourceName);\n var levelIcon = createElement('div', { className: 'e-icons e-icon-next' });\n headerCollection.push(levelIcon);\n });\n headerCollection.pop();\n var target = (this.parent.currentView === 'MonthAgenda') ? this.parent.activeView.getPanel() : this.parent.element;\n var headerWrapper = target.querySelector('.' + cls.RESOURCE_LEVEL_TITLE);\n headerWrapper.innerHTML = '';\n headerCollection.forEach(function (element) { return headerWrapper.appendChild(element); });\n if (this.lastResourceLevel.length === 1) {\n addClass([this.parent.element.querySelector('.' + cls.RESOURCE_MENU)], cls.DISABLE_CLASS);\n }\n };\n ResourceBase.prototype.menuClick = function (event) {\n if (this.parent.element.querySelector('.' + cls.RESOURCE_TREE_POPUP).classList.contains('e-popup-open')) {\n this.treePopup.hide();\n removeClass([this.popupOverlay], 'e-enable');\n }\n else {\n var treeNodes = this.treeViewObj.element.querySelectorAll('.e-list-item:not(.e-has-child)');\n removeClass(treeNodes, 'e-active');\n addClass([treeNodes[this.parent.uiStateValues.groupIndex]], 'e-active');\n this.treePopup.show();\n addClass([this.popupOverlay], 'e-enable');\n }\n };\n ResourceBase.prototype.resourceClick = function (event) {\n if (!event.node.classList.contains('e-has-child')) {\n this.treePopup.hide();\n var treeNodes = [].slice.call(this.treeViewObj.element.querySelectorAll('.e-list-item:not(.e-has-child)'));\n this.parent.uiStateValues.groupIndex = treeNodes.indexOf(event.node);\n this.parent.renderModule.render(this.parent.currentView, false);\n var processed = this.parent.eventBase.processData(this.parent.eventsData);\n this.parent.notify(events.dataReady, { processedData: processed });\n }\n event.event.preventDefault();\n };\n ResourceBase.prototype.documentClick = function (args) {\n if (closest(args.event.target, '.' + cls.RESOURCE_TREE_POPUP)) {\n return;\n }\n var treeWrapper = this.parent.element.querySelector('.' + cls.RESOURCE_TREE_POPUP);\n if (treeWrapper && treeWrapper.classList.contains('e-popup-open')) {\n this.treePopup.hide();\n removeClass([this.popupOverlay], 'e-enable');\n }\n };\n ResourceBase.prototype.bindResourcesData = function (isSetModel) {\n var _this = this;\n this.parent.showSpinner();\n var promises = [];\n for (var i = 0; i < this.parent.resources.length; i++) {\n var dataModule = new Data(this.parent.resources[i].dataSource, this.parent.resources[i].query);\n promises.push(dataModule.getData(dataModule.generateQuery()));\n }\n Promise.all(promises).then(function (e) { return _this.dataManagerSuccess(e, isSetModel); })\n .catch(function (e) { return _this.dataManagerFailure(e); });\n };\n ResourceBase.prototype.dataManagerSuccess = function (e, isSetModel) {\n if (this.parent.isDestroyed) {\n return;\n }\n for (var i = 0, length_1 = e.length; i < length_1; i++) {\n this.parent.resources[i].dataSource = e[i].result;\n }\n this.parent.setProperties({ resources: this.parent.resources }, true);\n this.parent.renderElements(isSetModel);\n if (isSetModel) {\n this.parent.eventWindow.refreshResourceDataSource();\n }\n };\n ResourceBase.prototype.setResourceCollection = function () {\n var requiredResources = [];\n this.resourceCollection = [];\n this.colorIndex = null;\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n for (var _i = 0, _a = this.parent.activeViewOptions.group.resources; _i < _a.length; _i++) {\n var resource = _a[_i];\n var index_1 = util.findIndexInData(this.parent.resources, 'name', resource);\n if (index_1 >= 0) {\n requiredResources.push(this.parent.resources[index_1]);\n }\n }\n }\n else if (this.parent.resources.length > 0) {\n requiredResources = this.parent.resources;\n }\n var index = 0;\n for (var _b = 0, requiredResources_1 = requiredResources; _b < requiredResources_1.length; _b++) {\n var resource = requiredResources_1[_b];\n var resources = {\n field: resource.field,\n title: resource.title,\n name: resource.name,\n allowMultiple: resource.allowMultiple,\n dataSource: resource.dataSource,\n idField: resource.idField,\n textField: resource.textField,\n groupIDField: resource.groupIDField,\n colorField: resource.colorField,\n startHourField: resource.startHourField,\n endHourField: resource.endHourField,\n workDaysField: resource.workDaysField,\n cssClassField: resource.cssClassField\n };\n if (resource.name === this.parent.eventSettings.resourceColorField) {\n this.colorIndex = index;\n }\n index++;\n this.resourceCollection.push(resources);\n }\n if (isNullOrUndefined(this.colorIndex)) {\n this.colorIndex = this.resourceCollection.length - 1;\n }\n if (this.parent.uiStateValues.isGroupAdaptive &&\n isNullOrUndefined(this.resourceCollection.slice(-1)[0].dataSource[this.parent.uiStateValues.groupIndex])) {\n this.parent.uiStateValues.groupIndex = 0;\n }\n };\n ResourceBase.prototype.generateResourceLevels = function (innerDates) {\n var _this = this;\n var resources = this.resourceCollection;\n var resTreeGroup = [];\n var lastColumnDates = [];\n var group = function (resources, index, prevResource, prevResourceData, prevOrder) {\n var resTree = [];\n var resource = resources[0];\n if (resource) {\n var data = void 0;\n if (prevResourceData && _this.parent.activeViewOptions.group.byGroupID) {\n var id = prevResourceData[prevResource.idField];\n data = new DataManager(resource.dataSource).executeLocal(new Query().where(resource.groupIDField, 'equal', id));\n }\n else {\n data = resource.dataSource;\n }\n for (var i = 0; i < data.length; i++) {\n var groupOrder = [];\n if (prevOrder && prevOrder.length > 0) {\n groupOrder = groupOrder.concat(prevOrder);\n }\n groupOrder.push(data[i][resource.idField]);\n var items = group(resources.slice(1), index + 1, resource, data[i], groupOrder);\n // Here validate child item empty top level resource only\n if (index === 0 && items.length === 0 && _this.resourceCollection.length > 1) {\n continue;\n }\n var dateCol = [];\n var renderDates = _this.parent.activeView.renderDates;\n var resWorkDays = void 0;\n if (!_this.parent.activeViewOptions.group.byDate && index + 1 === _this.resourceCollection.length) {\n var workDays = data[i][resource.workDaysField];\n var resStartHour = data[i][resource.startHourField];\n var resEndHour = data[i][resource.endHourField];\n if (workDays && workDays.length > 0) {\n renderDates = _this.parent.activeView.getRenderDates(workDays);\n resWorkDays = workDays;\n dateCol = _this.parent.activeView.getDateSlots(renderDates, workDays);\n }\n else {\n resWorkDays = _this.parent.activeViewOptions.workDays;\n dateCol = innerDates;\n }\n var dateSlots = _this.generateCustomHours(dateCol, resStartHour, resEndHour, groupOrder);\n lastColumnDates = lastColumnDates.concat(dateSlots);\n }\n var resCssClass = data[i][resource.cssClassField];\n var slotData = {\n type: 'resourceHeader', className: ['e-resource-cells'],\n resourceLevelIndex: index, groupOrder: groupOrder,\n resource: resource, resourceData: data[i],\n colSpan: _this.parent.activeViewOptions.group.byDate ? 1 : dateCol.length,\n renderDates: renderDates, workDays: resWorkDays, cssClass: resCssClass,\n child: items\n };\n resTree.push(slotData);\n }\n if (!resTreeGroup[index]) {\n resTreeGroup[index] = [];\n }\n resTreeGroup[index].push(resTree);\n return resTree;\n }\n return [];\n };\n this.resourceTreeLevel = group(resources, 0);\n return this.generateHeaderLevels(resTreeGroup, lastColumnDates, innerDates);\n };\n ResourceBase.prototype.generateCustomHours = function (renderDates, startHour, endHour, groupOrder) {\n var dateSlots = extend([], renderDates, null, true);\n for (var _i = 0, dateSlots_1 = dateSlots; _i < dateSlots_1.length; _i++) {\n var dateSlot = dateSlots_1[_i];\n if (startHour) {\n dateSlot.startHour = this.parent.globalize.parseDate(startHour, { skeleton: 'Hm' });\n }\n if (endHour) {\n dateSlot.endHour = this.parent.globalize.parseDate(endHour, { skeleton: 'Hm' });\n }\n if (groupOrder) {\n dateSlot.groupOrder = groupOrder;\n }\n }\n return dateSlots;\n };\n ResourceBase.prototype.generateHeaderLevels = function (resTreeGroup, lastColumnDates, headerDates) {\n var headerLevels = [];\n for (var i = resTreeGroup.length - 1; i >= 0; i--) {\n var temp = 0;\n for (var _i = 0, _a = resTreeGroup[i]; _i < _a.length; _i++) {\n var currentLevelChilds = _a[_i];\n for (var _b = 0, currentLevelChilds_1 = currentLevelChilds; _b < currentLevelChilds_1.length; _b++) {\n var currentLevelChild = currentLevelChilds_1[_b];\n if (resTreeGroup[i + 1]) {\n var nextLevelChilds = resTreeGroup[i + 1][temp];\n var colSpan = 0;\n for (var _c = 0, nextLevelChilds_1 = nextLevelChilds; _c < nextLevelChilds_1.length; _c++) {\n var nextLevelChild = nextLevelChilds_1[_c];\n if (!this.parent.activeViewOptions.group.byGroupID || (this.parent.activeViewOptions.group.byGroupID &&\n nextLevelChild.resourceData[nextLevelChild.resource.groupIDField] ===\n currentLevelChild.resourceData[currentLevelChild.resource.idField])) {\n colSpan += nextLevelChild.colSpan;\n }\n }\n currentLevelChild.colSpan = colSpan;\n }\n currentLevelChild.groupIndex = temp;\n temp++;\n headerLevels[currentLevelChild.resourceLevelIndex] = headerLevels[currentLevelChild.resourceLevelIndex] || [];\n headerLevels[currentLevelChild.resourceLevelIndex].push(currentLevelChild);\n }\n }\n }\n this.lastResourceLevel = headerLevels.slice(-1)[0];\n if (!this.parent.activeViewOptions.group.byDate) {\n var index = 0;\n for (var _d = 0, _e = this.lastResourceLevel; _d < _e.length; _d++) {\n var lastLevelResource = _e[_d];\n for (var i = 0; i < lastLevelResource.colSpan; i++) {\n lastColumnDates[index].groupIndex = lastLevelResource.groupIndex;\n index++;\n }\n }\n headerLevels.push(lastColumnDates);\n return headerLevels;\n }\n var dateHeaderLevels = [];\n var levels = extend([], headerLevels, null, true);\n var dateColSpan = 0;\n for (var _f = 0, _g = levels[0]; _f < _g.length; _f++) {\n var firstRowTd = _g[_f];\n dateColSpan += firstRowTd.colSpan;\n }\n var datesColumn = [];\n for (var _h = 0, headerDates_1 = headerDates; _h < headerDates_1.length; _h++) {\n var headerDate = headerDates_1[_h];\n headerDate.colSpan = dateColSpan;\n datesColumn.push(headerDate);\n var resGroup = extend([], levels, null, true);\n for (var k = 0, length_2 = resGroup.length; k < length_2; k++) {\n if (k === resGroup.length - 1) {\n for (var _j = 0, _k = resGroup[k]; _j < _k.length; _j++) {\n var resTd = _k[_j];\n resTd.date = headerDate.date;\n resTd.workDays = headerDate.workDays;\n resTd.startHour = headerDate.startHour;\n resTd.endHour = headerDate.endHour;\n }\n }\n if (!dateHeaderLevels[k]) {\n dateHeaderLevels[k] = [];\n }\n dateHeaderLevels[k] = dateHeaderLevels[k].concat(resGroup[k]);\n }\n }\n dateHeaderLevels.unshift(datesColumn);\n return dateHeaderLevels;\n };\n ResourceBase.prototype.setResourceValues = function (eventObj, isCrud) {\n var _this = this;\n var setValues = function (index, field, value) {\n if (_this.resourceCollection[index].allowMultiple && (!isCrud || isCrud && _this.parent.activeViewOptions.group.allowGroupEdit)) {\n eventObj[field] = [value];\n }\n else {\n eventObj[field] = value;\n }\n };\n var groupIndex = this.parent.uiStateValues.isGroupAdaptive ? this.parent.uiStateValues.groupIndex :\n this.parent.activeCellsData.groupIndex;\n if (this.parent.activeViewOptions.group.resources.length > 0 && !isNullOrUndefined(groupIndex)) {\n var groupOrder = this.lastResourceLevel[groupIndex].groupOrder;\n for (var index = 0; index < this.resourceCollection.length; index++) {\n setValues(index, this.resourceCollection[index].field, groupOrder[index]);\n }\n }\n else if (this.parent.resources.length > 0) {\n for (var index = 0; index < this.resourceCollection.length; index++) {\n var data = this.resourceCollection[index].dataSource[0];\n setValues(index, this.resourceCollection[index].field, data[this.resourceCollection[index].idField]);\n }\n }\n };\n ResourceBase.prototype.getResourceColor = function (eventObj, groupOrder) {\n var resource = this.resourceCollection[this.colorIndex];\n if (isNullOrUndefined(groupOrder) && this.parent.activeViewOptions.group.allowGroupEdit && resource.allowMultiple) {\n return undefined;\n }\n var id = isNullOrUndefined(groupOrder) ? eventObj[resource.field] : groupOrder[this.colorIndex];\n var data = this.filterData(resource.dataSource, resource.idField, 'equal', id);\n if (data.length > 0) {\n return data[0][resource.colorField];\n }\n return undefined;\n };\n ResourceBase.prototype.getCssClass = function (eventObj) {\n var resource = this.resourceCollection.slice(-1)[0];\n if (this.parent.activeViewOptions.group.allowGroupEdit && resource.allowMultiple) {\n return undefined;\n }\n var data = this.filterData(resource.dataSource, resource.idField, 'equal', eventObj[resource.field]);\n if (data.length > 0) {\n return data[0][resource.cssClassField];\n }\n return undefined;\n };\n ResourceBase.prototype.filterData = function (dataSource, field, operator, value) {\n return new DataManager(dataSource).executeLocal(new Query().where(field, operator, value));\n };\n ResourceBase.prototype.dataManagerFailure = function (e) {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.trigger(events.actionFailure, { error: e });\n this.parent.hideSpinner();\n };\n ResourceBase.prototype.addResource = function (resources, name, index) {\n for (var i = 0, length_3 = this.parent.resources.length; i < length_3; i++) {\n var resource = this.parent.resources[i];\n if (resource.name === name) {\n resource.dataSource.splice(index, 0, resources);\n break;\n }\n }\n this.bindResourcesData(true);\n };\n ResourceBase.prototype.removeResource = function (resourceId, name) {\n var _this = this;\n var _loop_1 = function (i, length_4) {\n var resource = this_1.parent.resources[i];\n if (resource.name === name) {\n resource.dataSource.forEach(function (data, index) {\n if (data[resource.idField] === resourceId) {\n _this.parent.resources[i].dataSource.splice(index, 1);\n }\n });\n return \"break\";\n }\n };\n var this_1 = this;\n for (var i = 0, length_4 = this.parent.resources.length; i < length_4; i++) {\n var state_1 = _loop_1(i, length_4);\n if (state_1 === \"break\")\n break;\n }\n this.bindResourcesData(true);\n };\n ResourceBase.prototype.destroy = function () {\n this.parent.off(events.documentClick, this.documentClick);\n if (this.treeViewObj) {\n this.treeViewObj.destroy();\n this.treeViewObj = null;\n }\n if (this.treePopup) {\n this.treePopup.destroy();\n this.treePopup = null;\n remove(this.parent.element.querySelector('.' + cls.RESOURCE_TREE_POPUP));\n remove(this.parent.element.querySelector('.' + cls.RESOURCE_TREE_POPUP_OVERLAY));\n }\n var resToolBarEle = this.parent.element.querySelector('.' + cls.RESOURCE_TOOLBAR_CONTAINER);\n if (resToolBarEle) {\n remove(resToolBarEle);\n }\n };\n return ResourceBase;\n}());\nexport { ResourceBase };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, Event, Animation, Collection } from '@syncfusion/ej2-base';\nimport { EventHandler, Browser, Internationalization, getDefaultDateObject, cldrData, L10n } from '@syncfusion/ej2-base';\nimport { getValue, compile, extend, isNullOrUndefined, NotifyPropertyChanges, Complex } from '@syncfusion/ej2-base';\nimport { removeClass, addClass, createElement } from '@syncfusion/ej2-base';\nimport { createSpinner, hideSpinner, showSpinner } from '@syncfusion/ej2-popups';\nimport { HeaderRenderer } from '../renderer/header-renderer';\nimport { Scroll } from '../actions/scroll';\nimport { ScheduleTouch } from '../actions/touch';\nimport { KeyboardInteraction } from '../actions/keyboard';\nimport { Data } from '../actions/data';\nimport { EventBase } from '../event-renderer/event-base';\nimport { QuickPopups } from '../popups/quick-popups';\nimport { EventTooltip } from '../popups/event-tooltip';\nimport { EventWindow } from '../popups/event-window';\nimport { Render } from '../renderer/renderer';\nimport { WorkHours } from '../models/work-hours';\nimport { TimeScale } from '../models/time-scale';\nimport { Crud } from '../actions/crud';\nimport { EventSettings } from '../models/event-settings';\nimport { Group } from '../models/group';\nimport { Resources } from '../models/resources';\nimport { ResourceBase } from '../base/resource';\nimport * as events from '../base/constant';\nimport * as cls from '../base/css-constant';\nimport * as util from '../base/util';\n/**\n * Represents the Schedule component that displays a list of events scheduled against specific date and timings,\n * thus helping us to plan and manage it properly.\n * ```html\n *
    \n * ```\n * ```typescript\n * \n * ```\n */\nvar Schedule = /** @class */ (function (_super) {\n __extends(Schedule, _super);\n /**\n * Constructor for creating the Schedule widget\n * @hidden\n */\n function Schedule(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Core method that initializes the control rendering.\n * @private\n */\n Schedule.prototype.render = function () {\n addClass([this.element], cls.ROOT);\n if (this.enableRtl) {\n addClass([this.element], cls.RTL);\n }\n else {\n removeClass([this.element], cls.RTL);\n }\n if (this.isAdaptive) {\n addClass([this.element], cls.DEVICE_CLASS);\n }\n else {\n removeClass([this.element], cls.DEVICE_CLASS);\n }\n if (this.cssClass) {\n addClass([this.element], this.cssClass);\n }\n this.validateDate();\n this.eventTooltipTemplateFn = this.templateParser(this.eventSettings.tooltipTemplate);\n this.editorTemplateFn = this.templateParser(this.editorTemplate);\n createSpinner({ target: this.element });\n this.scrollModule = new Scroll(this);\n this.scrollModule.setWidth();\n this.scrollModule.setHeight();\n this.renderModule = new Render(this);\n this.eventBase = new EventBase(this);\n this.initializeDataModule();\n this.initializeResources();\n };\n Schedule.prototype.initializeResources = function (isSetModel) {\n if (isSetModel === void 0) { isSetModel = false; }\n if (this.resources.length > 0) {\n this.resourceBase = new ResourceBase(this);\n this.resourceBase.bindResourcesData(isSetModel);\n }\n else {\n this.resourceBase = null;\n this.renderElements(isSetModel);\n }\n };\n Schedule.prototype.renderElements = function (isLayoutOnly) {\n if (isLayoutOnly) {\n this.initializeView(this.currentView);\n return;\n }\n if (this.showHeaderBar) {\n this.headerModule = new HeaderRenderer(this);\n }\n this.element.appendChild(createElement('div', { className: cls.TABLE_CONTAINER_CLASS }));\n if (Browser.isDevice || Browser.isTouch) {\n this.scheduleTouchModule = new ScheduleTouch(this);\n }\n this.initializeView(this.currentView);\n this.initializePopups();\n this.wireEvents();\n };\n Schedule.prototype.validateDate = function () {\n // persist the selected date value\n this.setProperties({ selectedDate: new Date('' + this.selectedDate) }, true);\n };\n Schedule.prototype.getViewIndex = function (viewName) {\n for (var item = 0; item < this.viewCollections.length; item++) {\n var checkIndex = this.viewCollections[item].option;\n if (checkIndex === viewName) {\n return item;\n }\n }\n return -1;\n };\n Schedule.prototype.setViewOptions = function (isModuleLoad) {\n if (isModuleLoad === void 0) { isModuleLoad = false; }\n this.viewOptions = {};\n this.viewCollections = [];\n var viewName;\n var selectedView;\n var count = 0;\n this.viewIndex = -1;\n for (var _i = 0, _a = this.views; _i < _a.length; _i++) {\n var view = _a[_i];\n var isOptions = (typeof view === 'string') ? false : true;\n if (typeof view === 'string') {\n viewName = view;\n if (this.currentView === viewName) {\n selectedView = viewName;\n this.viewIndex = count;\n }\n }\n else {\n viewName = view.option;\n if (view.isSelected) {\n selectedView = viewName;\n this.viewIndex = count;\n }\n }\n var obj = extend({ option: viewName }, isOptions ? view : {});\n var fieldViewName = viewName.charAt(0).toLowerCase() + viewName.slice(1);\n this.viewCollections.push(obj);\n if (isNullOrUndefined(this.viewOptions[fieldViewName])) {\n this.viewOptions[fieldViewName] = [obj];\n }\n else {\n this.viewOptions[fieldViewName].push(obj);\n }\n count++;\n }\n if (!isModuleLoad && selectedView) {\n this.setProperties({ currentView: selectedView }, true);\n }\n if (this.viewIndex === -1) {\n var currentIndex = this.getViewIndex(this.currentView);\n this.viewIndex = (currentIndex === -1) ? 0 : currentIndex;\n }\n };\n Schedule.prototype.getActiveViewOptions = function (viewName) {\n var timeScale = {\n enable: this.timeScale.enable,\n interval: this.timeScale.interval,\n slotCount: this.timeScale.slotCount,\n majorSlotTemplate: this.timeScale.majorSlotTemplate,\n minorSlotTemplate: this.timeScale.minorSlotTemplate\n };\n var group = {\n byDate: this.group.byDate,\n byGroupID: this.group.byGroupID,\n allowGroupEdit: this.group.allowGroupEdit,\n resources: this.group.resources,\n enableCompactView: this.group.enableCompactView\n };\n var scheduleOptions = {\n dateFormat: this.dateFormat,\n endHour: this.endHour,\n isSelected: false,\n option: null,\n readonly: this.readonly,\n startHour: this.startHour,\n allowVirtualScrolling: true,\n cellTemplate: this.cellTemplate,\n eventTemplate: this.eventSettings.template,\n dateHeaderTemplate: this.dateHeaderTemplate,\n resourceHeaderTemplate: this.resourceHeaderTemplate,\n workDays: this.workDays,\n showWeekend: this.showWeekend,\n displayName: null,\n interval: 1,\n timeScale: timeScale,\n group: group\n };\n return extend(scheduleOptions, this.viewCollections[this.viewIndex], undefined, true);\n };\n Schedule.prototype.initializeDataModule = function () {\n this.eventFields = {\n id: this.eventSettings.fields.id,\n subject: this.eventSettings.fields.subject.name,\n startTime: this.eventSettings.fields.startTime.name,\n endTime: this.eventSettings.fields.endTime.name,\n startTimezone: this.eventSettings.fields.startTimezone.name,\n endTimezone: this.eventSettings.fields.endTimezone.name,\n location: this.eventSettings.fields.location.name,\n description: this.eventSettings.fields.description.name,\n isAllDay: this.eventSettings.fields.isAllDay.name,\n recurrenceID: this.eventSettings.fields.recurrenceID.name,\n recurrenceRule: this.eventSettings.fields.recurrenceRule.name,\n recurrenceException: this.eventSettings.fields.recurrenceException.name\n };\n this.editorTitles = {\n subject: this.eventSettings.fields.subject.title || this.localeObj.getConstant('title'),\n startTime: this.eventSettings.fields.startTime.title || this.localeObj.getConstant('start'),\n endTime: this.eventSettings.fields.endTime.title || this.localeObj.getConstant('end'),\n isAllDay: this.eventSettings.fields.isAllDay.title || this.localeObj.getConstant('allDay'),\n startTimezone: this.eventSettings.fields.startTimezone.title || this.localeObj.getConstant('startTimezone'),\n endTimezone: this.eventSettings.fields.endTimezone.title || this.localeObj.getConstant('endTimezone'),\n location: this.eventSettings.fields.location.title || this.localeObj.getConstant('location'),\n description: this.eventSettings.fields.description.title || this.localeObj.getConstant('description'),\n recurrenceRule: this.eventSettings.fields.recurrenceRule.title || this.localeObj.getConstant('repeat')\n };\n this.dataModule = new Data(this.eventSettings.dataSource, this.eventSettings.query);\n this.crudModule = new Crud(this);\n };\n Schedule.prototype.initializeView = function (viewName) {\n this.showSpinner();\n this.activeViewOptions = this.getActiveViewOptions(viewName);\n if (this.resourceBase) {\n this.resourceBase.setResourceCollection();\n }\n this.initializeTemplates();\n this.renderModule.render(viewName);\n };\n Schedule.prototype.initializeTemplates = function () {\n this.cellTemplateFn = this.templateParser(this.activeViewOptions.cellTemplate);\n this.dateHeaderTemplateFn = this.templateParser(this.activeViewOptions.dateHeaderTemplate);\n this.majorSlotTemplateFn = this.templateParser(this.activeViewOptions.timeScale.majorSlotTemplate);\n this.minorSlotTemplateFn = this.templateParser(this.activeViewOptions.timeScale.minorSlotTemplate);\n this.appointmentTemplateFn = this.templateParser(this.activeViewOptions.eventTemplate);\n this.resourceHeaderTemplateFn = this.templateParser(this.activeViewOptions.resourceHeaderTemplate);\n };\n Schedule.prototype.initializePopups = function () {\n if (this.eventSettings.enableTooltip) {\n this.eventTooltip = new EventTooltip(this);\n }\n this.eventWindow = new EventWindow(this);\n this.quickPopup = new QuickPopups(this);\n };\n Schedule.prototype.getDayNames = function (type) {\n var culShortNames = [];\n var cldrObj;\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrObj = (getValue('days.stand-alone.' + type, getDefaultDateObject()));\n }\n else {\n cldrObj = (getValue('main.' + '' + this.locale + '.dates.calendars.gregorian.days.format.' + type, cldrData));\n }\n for (var _i = 0, _a = Object.keys(cldrObj); _i < _a.length; _i++) {\n var obj = _a[_i];\n culShortNames.push(getValue(obj, cldrObj));\n }\n return culShortNames;\n };\n Schedule.prototype.setCldrTimeFormat = function () {\n if (this.locale === 'en' || this.locale === 'en-US') {\n this.timeFormat = (getValue('timeFormats.short', getDefaultDateObject()));\n }\n else {\n this.timeFormat = (getValue('main.' + '' + this.locale + '.dates.calendars.gregorian.timeFormats.short', cldrData));\n }\n };\n Schedule.prototype.getTimeString = function (date) {\n return this.globalize.formatDate(date, { format: this.timeFormat, type: 'time' });\n };\n Schedule.prototype.changeView = function (view, event, muteOnChange, index) {\n if (isNullOrUndefined(index)) {\n index = this.getViewIndex(view);\n }\n if (!muteOnChange && index === this.viewIndex || index < 0) {\n return;\n }\n this.viewIndex = index;\n var args = { requestType: 'viewNavigate', cancel: false, event: event };\n this.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n var navArgs = { action: 'view', cancel: false, previousView: this.currentView, currentView: view };\n this.trigger(events.navigating, navArgs);\n if (navArgs.cancel) {\n return;\n }\n this.setProperties({ currentView: view }, true);\n if (this.headerModule) {\n this.headerModule.updateActiveView();\n this.headerModule.setCalendarView();\n }\n this.initializeView(this.currentView);\n this.animateLayout();\n args = { requestType: 'viewNavigate', cancel: false, event: event };\n this.trigger(events.actionComplete, args);\n };\n Schedule.prototype.changeDate = function (selectedDate, event) {\n var args = { requestType: 'dateNavigate', cancel: false, event: event };\n this.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n var navArgs = {\n action: 'date', cancel: false, previousDate: this.selectedDate, currentDate: selectedDate\n };\n this.trigger(events.navigating, navArgs);\n if (navArgs.cancel) {\n return;\n }\n this.setProperties({ selectedDate: selectedDate }, true);\n if (this.headerModule) {\n this.headerModule.setCalendarDate(selectedDate);\n }\n this.initializeView(this.currentView);\n this.animateLayout();\n args = { requestType: 'dateNavigate', cancel: false, event: event };\n this.trigger(events.actionComplete, args);\n };\n Schedule.prototype.isSelectedDate = function (date) {\n return date.setHours(0, 0, 0, 0) === new Date('' + this.selectedDate).setHours(0, 0, 0, 0);\n };\n Schedule.prototype.animateLayout = function () {\n new Animation({ duration: 600, name: 'FadeIn', timingFunction: 'easeIn' }).animate(this.activeView.element);\n };\n /**\n * To provide the array of modules needed for control rendering\n * @return {ModuleDeclaration[]}\n * @hidden\n */\n Schedule.prototype.requiredModules = function () {\n var modules = [];\n this.setViewOptions(true);\n for (var _i = 0, _a = Object.keys(this.viewOptions); _i < _a.length; _i++) {\n var view = _a[_i];\n modules.push({\n member: view,\n args: [this]\n });\n }\n return modules;\n };\n /**\n * Initializes the values of private members.\n * @private\n */\n Schedule.prototype.preRender = function () {\n this.isAdaptive = Browser.isDevice;\n this.globalize = new Internationalization(this.locale);\n this.uiStateValues = { expand: false, isInitial: true, left: 0, top: 0, isGroupAdaptive: false, groupIndex: 0 };\n this.activeCellsData = { startTime: new Date(), endTime: new Date(), isAllDay: false };\n this.activeEventData = { event: undefined, element: undefined };\n this.defaultLocale = {\n day: 'Day',\n week: 'Week',\n workWeek: 'Work Week',\n month: 'Month',\n agenda: 'Agenda',\n weekAgenda: 'Week Agenda',\n workWeekAgenda: 'Work Week Agenda',\n monthAgenda: 'Month Agenda',\n today: 'Today',\n noEvents: 'No events',\n emptyContainer: 'There are no events scheduled on this day.',\n allDay: 'All day',\n start: 'Start',\n end: 'End',\n more: 'more',\n close: 'Close',\n cancel: 'Cancel',\n noTitle: '(No Title)',\n delete: 'Delete',\n deleteEvent: 'Delete Event',\n deleteMultipleEvent: 'Delete Multiple Events',\n selectedItems: 'Items selected',\n deleteSeries: 'Delete Series',\n edit: 'Edit',\n editSeries: 'Edit Series',\n editEvent: 'Edit Event',\n createEvent: 'Create',\n subject: 'Subject',\n addTitle: 'Add title',\n moreDetails: 'More Details',\n save: 'Save',\n editContent: 'Do you want to edit only this event or entire series?',\n deleteRecurrenceContent: 'Do you want to delete only this event or entire series?',\n deleteContent: 'Are you sure you want to delete this event?',\n deleteMultipleContent: 'Are you sure you want to delete the selected events?',\n newEvent: 'New Event',\n title: 'Title',\n location: 'Location',\n description: 'Description',\n timezone: 'Timezone',\n startTimezone: 'Start Timezone',\n endTimezone: 'End Timezone',\n repeat: 'Repeat',\n saveButton: 'Save',\n cancelButton: 'Cancel',\n deleteButton: 'Delete',\n recurrence: 'Recurrence',\n wrongPattern: 'The recurrence pattern is not valid.',\n seriesChangeAlert: 'The changes made to specific instances of this series will be cancelled ' +\n 'and those events will match the series again.',\n createError: 'The duration of the event must be shorter than how frequently it occurs. ' +\n 'Shorten the duration, or change the recurrence pattern in the recurrence event editor.',\n recurrenceDateValidation: 'Some months have fewer than the selected date. For these months, ' +\n 'the occurrence will fall on the last date of the month.',\n sameDayAlert: 'Two occurrences of the same event cannot occur on the same day.',\n editRecurrence: 'Edit Recurrence',\n repeats: 'Repeats',\n alert: 'Alert',\n startEndError: 'The selected end date occurs before the start date.',\n invalidDateError: 'The entered date value is invalid.',\n ok: 'Ok',\n occurrence: 'Occurrence',\n series: 'Series',\n previous: 'Previous',\n next: 'Next'\n };\n this.localeObj = new L10n(this.getModuleName(), this.defaultLocale, this.locale);\n this.setCldrTimeFormat();\n this.eventsData = [];\n this.eventsProcessed = [];\n this.currentAction = null;\n this.selectedElements = [];\n this.setViewOptions();\n };\n /**\n * Binding events to the Schedule element.\n * @hidden\n */\n Schedule.prototype.wireEvents = function () {\n var resize = 'onorientationchange' in window ? 'orientationchange' : 'resize';\n EventHandler.add(window, resize, this.onScheduleResize, this);\n EventHandler.add(document, Browser.touchStartEvent, this.onDocumentClick, this);\n if (this.allowKeyboardInteraction) {\n this.keyboardInteractionModule = new KeyboardInteraction(this);\n }\n };\n Schedule.prototype.removeSelectedClass = function () {\n var selectedCells = this.getSelectedElements();\n for (var _i = 0, selectedCells_1 = selectedCells; _i < selectedCells_1.length; _i++) {\n var cell = selectedCells_1[_i];\n cell.setAttribute('aria-selected', 'false');\n cell.removeAttribute('tabindex');\n }\n removeClass(selectedCells, cls.SELECTED_CELL_CLASS);\n };\n Schedule.prototype.addSelectedClass = function (cells, focusCell) {\n for (var _i = 0, cells_1 = cells; _i < cells_1.length; _i++) {\n var cell = cells_1[_i];\n cell.setAttribute('aria-selected', 'true');\n }\n addClass(cells, cls.SELECTED_CELL_CLASS);\n focusCell.setAttribute('tabindex', '0');\n focusCell.focus();\n };\n Schedule.prototype.selectCell = function (element) {\n this.removeSelectedClass();\n this.addSelectedClass([element], element);\n };\n Schedule.prototype.getSelectedElements = function () {\n return [].slice.call(this.element.querySelectorAll('.' + cls.SELECTED_CELL_CLASS));\n };\n Schedule.prototype.getAllDayRow = function () {\n return this.element.querySelector('.' + cls.ALLDAY_ROW_CLASS);\n };\n Schedule.prototype.getContentTable = function () {\n return this.element.querySelector('.' + cls.CONTENT_TABLE_CLASS + ' tbody');\n };\n Schedule.prototype.getWorkCellElements = function () {\n return [].slice.call(this.element.querySelectorAll('.' + cls.WORK_CELLS_CLASS));\n };\n Schedule.prototype.getIndexOfDate = function (collection, date) {\n return collection.map(Number).indexOf(+date);\n };\n Schedule.prototype.isAllDayCell = function (td) {\n if (this.currentView === 'Month' || td.classList.contains(cls.ALLDAY_CELLS_CLASS) ||\n td.classList.contains(cls.HEADER_CELLS_CLASS) || !this.activeViewOptions.timeScale.enable) {\n return true;\n }\n return false;\n };\n Schedule.prototype.getDateFromElement = function (td) {\n if (!isNullOrUndefined(td.getAttribute('data-date'))) {\n var dateInMS = parseInt(td.getAttribute('data-date'), 10);\n return new Date(dateInMS);\n }\n return undefined;\n };\n Schedule.prototype.getCellTemplate = function () {\n return this.cellTemplateFn;\n };\n Schedule.prototype.getDateHeaderTemplate = function () {\n return this.dateHeaderTemplateFn;\n };\n Schedule.prototype.getMajorSlotTemplate = function () {\n return this.majorSlotTemplateFn;\n };\n Schedule.prototype.getMinorSlotTemplate = function () {\n return this.minorSlotTemplateFn;\n };\n Schedule.prototype.getAppointmentTemplate = function () {\n return this.appointmentTemplateFn;\n };\n Schedule.prototype.getEventTooltipTemplate = function () {\n return this.eventTooltipTemplateFn;\n };\n Schedule.prototype.getEditorTemplate = function () {\n return this.editorTemplateFn;\n };\n Schedule.prototype.getResourceHeaderTemplate = function () {\n return this.resourceHeaderTemplateFn;\n };\n Schedule.prototype.onDocumentClick = function (args) {\n this.notify(events.documentClick, { event: args });\n };\n Schedule.prototype.onScheduleResize = function (args) {\n if (this.quickPopup) {\n this.quickPopup.onClosePopup();\n }\n if (this.currentView === 'Month') {\n this.notify(events.dataReady, {});\n }\n this.adjustEventWrapper();\n };\n Schedule.prototype.templateParser = function (template) {\n if (template) {\n var error = void 0;\n try {\n if (document.querySelectorAll(template).length) {\n return compile(document.querySelector(template).innerHTML.trim());\n }\n }\n catch (error) {\n return compile(template);\n }\n }\n return undefined;\n };\n /**\n * Unbinding events from the element on widget destroy.\n * @hidden\n */\n Schedule.prototype.unwireEvents = function () {\n var resize = 'onorientationchange' in window ? 'orientationchange' : 'resize';\n EventHandler.remove(window, resize, this.onScheduleResize);\n EventHandler.remove(document, Browser.touchStartEvent, this.onDocumentClick);\n if (this.keyboardInteractionModule) {\n this.keyboardInteractionModule.destroy();\n }\n };\n /**\n * Core method to return the component name.\n * @private\n */\n Schedule.prototype.getModuleName = function () {\n return 'schedule';\n };\n /**\n * Returns the properties to be maintained in the persisted state.\n * @private\n */\n Schedule.prototype.getPersistData = function () {\n return this.addOnPersist(['currentView', 'selectedDate']);\n };\n /**\n * Called internally, if any of the property value changed.\n * @private\n */\n Schedule.prototype.onPropertyChanged = function (newProp, oldProp) {\n var requireRefresh = false;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'width':\n case 'height':\n this.notify(events.uiUpdate, {\n module: 'scroll',\n properties: { width: newProp.width, height: newProp.height }\n });\n break;\n case 'views':\n this.setViewOptions();\n if (this.headerModule) {\n this.headerModule.updateItems();\n }\n this.changeView(this.currentView, null, true);\n break;\n case 'currentView':\n this.changeView(newProp.currentView, null, true);\n break;\n case 'selectedDate':\n this.changeDate(newProp.selectedDate);\n break;\n case 'dateFormat':\n this.activeViewOptions = this.getActiveViewOptions(this.currentView);\n if (this.headerModule) {\n this.headerModule.updateDateRange(this.activeView.getDateRangeText());\n }\n break;\n case 'showHeaderBar':\n if (this.headerModule) {\n this.headerModule.destroy();\n this.headerModule = null;\n }\n if (newProp.showHeaderBar) {\n this.headerModule = new HeaderRenderer(this);\n }\n var cssProps = this.enableRtl ? { border: 'borderLeftWidth', padding: 'paddingLeft' } :\n { border: 'borderRightWidth', padding: 'paddingRight' };\n var uiArgs = { cssProperties: cssProps };\n this.notify(events.scrollUiUpdate, uiArgs);\n break;\n case 'showWeekend':\n case 'workDays':\n case 'startHour':\n case 'endHour':\n case 'workHours':\n case 'readonly':\n requireRefresh = true;\n break;\n case 'locale':\n this.setCldrTimeFormat();\n this.refresh();\n break;\n case 'firstDayOfWeek':\n if (this.headerModule) {\n this.headerModule.setDayOfWeek(newProp.firstDayOfWeek);\n }\n requireRefresh = true;\n break;\n case 'showTimeIndicator':\n if (this.activeViewOptions.timeScale.enable) {\n this.activeView.highlightCurrentTime();\n }\n break;\n case 'cellTemplate':\n this.activeViewOptions.cellTemplate = newProp.cellTemplate;\n this.cellTemplateFn = this.templateParser(this.activeViewOptions.cellTemplate);\n requireRefresh = true;\n break;\n case 'dateHeaderTemplate':\n this.activeViewOptions.dateHeaderTemplate = newProp.dateHeaderTemplate;\n this.dateHeaderTemplateFn = this.templateParser(this.activeViewOptions.dateHeaderTemplate);\n requireRefresh = true;\n break;\n case 'timezone':\n this.eventBase.timezonePropertyChange(oldProp.timezone);\n break;\n case 'enableRtl':\n if (this.headerModule) {\n this.headerModule.setRtl(this.enableRtl);\n }\n if (this.enableRtl) {\n addClass([this.element], cls.RTL);\n }\n else {\n removeClass([this.element], cls.RTL);\n }\n requireRefresh = true;\n break;\n default:\n this.extendedPropertyChange(prop, newProp, oldProp);\n break;\n }\n }\n if (requireRefresh) {\n this.initializeView(this.currentView);\n }\n };\n Schedule.prototype.extendedPropertyChange = function (prop, newProp, oldProp) {\n switch (prop) {\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([this.element], oldProp.cssClass);\n }\n if (newProp.cssClass) {\n addClass([this.element], newProp.cssClass);\n }\n break;\n case 'hideEmptyAgendaDays':\n case 'agendaDaysCount':\n this.activeViewOptions = this.getActiveViewOptions(this.currentView);\n this.changeView(this.currentView, null, true);\n break;\n case 'eventSettings':\n this.onEventSettingsPropertyChanged(newProp.eventSettings, oldProp.eventSettings);\n break;\n case 'allowKeyboardInteraction':\n if (this.keyboardInteractionModule) {\n this.keyboardInteractionModule.destroy();\n this.keyboardInteractionModule = null;\n }\n if (newProp.allowKeyboardInteraction) {\n this.keyboardInteractionModule = new KeyboardInteraction(this);\n }\n break;\n case 'editorTemplate':\n if (!isNullOrUndefined(this.editorTemplate)) {\n this.editorTemplateFn = this.templateParser(this.editorTemplate);\n }\n this.eventWindow.setDialogContent();\n break;\n case 'group':\n this.initializeView(this.currentView);\n break;\n case 'resources':\n this.initializeResources(true);\n break;\n case 'timeScale':\n this.activeViewOptions.timeScale.interval = newProp.timeScale.interval || this.activeViewOptions.timeScale.interval;\n this.activeViewOptions.timeScale.slotCount = newProp.timeScale.slotCount || this.activeViewOptions.timeScale.slotCount;\n this.eventWindow.refreshDateTimePicker();\n this.initializeView(this.currentView);\n break;\n }\n };\n Schedule.prototype.onEventSettingsPropertyChanged = function (newProp, oldProp) {\n var requireRefresh = false;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'dataSource':\n case 'query':\n case 'fields':\n this.initializeDataModule();\n requireRefresh = true;\n break;\n case 'template':\n this.activeViewOptions.eventTemplate = newProp.template;\n this.appointmentTemplateFn = this.templateParser(this.activeViewOptions.eventTemplate);\n requireRefresh = true;\n break;\n case 'enableTooltip':\n if (this.eventTooltip) {\n this.eventTooltip.destroy();\n this.eventTooltip = null;\n }\n if (newProp.enableTooltip) {\n this.eventTooltip = new EventTooltip(this);\n }\n break;\n case 'tooltipTemplate':\n this.eventTooltipTemplateFn = this.templateParser(this.eventSettings.tooltipTemplate);\n break;\n case 'resourceColorField':\n if (this.resourceBase) {\n this.resourceBase.setResourceCollection();\n }\n requireRefresh = true;\n break;\n }\n }\n if (requireRefresh) {\n this.renderModule.refreshDataManager();\n }\n };\n /**\n * Allows to show the spinner on schedule at the required scenarios.\n */\n Schedule.prototype.showSpinner = function () {\n showSpinner(this.element);\n };\n /**\n * When the spinner is shown manually using `showSpinner` method, it can be hidden using this `hideSpinner` method.\n */\n Schedule.prototype.hideSpinner = function () {\n hideSpinner(this.element);\n };\n /**\n * Sets different working hours on the required working days by accepting the required start and end time as well as the date collection\n * as its parameters.\n * @method setWorkHours\n * @param {date} dates Collection of dates on which the given start and end hour range needs to be applied.\n * @param {string} start Defines the work start hour.\n * @param {string} end Defines the work end hour.\n * @param {number} groupIndex Defines the resource index from last level.\n * @returns {void}\n */\n Schedule.prototype.setWorkHours = function (dates, start, end, groupIndex) {\n var startHour = this.globalize.parseDate(start, { skeleton: 'Hm' });\n var endHour = this.globalize.parseDate(end, { skeleton: 'Hm' });\n var tableEle = this.getContentTable();\n if (isNullOrUndefined(startHour) || isNullOrUndefined(endHour) || !tableEle) {\n return;\n }\n startHour.setMilliseconds(0);\n endHour.setMilliseconds(0);\n var viewStartHour = this.activeView.getStartHour();\n if (startHour < viewStartHour) {\n startHour = viewStartHour;\n }\n if (endHour > this.activeView.getEndHour()) {\n endHour = this.activeView.getEndHour();\n }\n var msMajorInterval = this.activeViewOptions.timeScale.interval * util.MS_PER_MINUTE;\n var msInterval = msMajorInterval / this.activeViewOptions.timeScale.slotCount;\n var startIndex = Math.round((util.getDateInMs(startHour) - util.getDateInMs(viewStartHour)) / msInterval);\n var endIndex = Math.ceil((util.getDateInMs(endHour) - util.getDateInMs(viewStartHour)) / msInterval);\n var cells = [];\n for (var _i = 0, dates_1 = dates; _i < dates_1.length; _i++) {\n var date = dates_1[_i];\n util.resetTime(date);\n var renderDates = this.activeView.renderDates;\n if (!isNullOrUndefined(groupIndex) && this.resourceBase) {\n renderDates = this.resourceBase.lastResourceLevel[groupIndex].renderDates;\n }\n var colIndex = this.getIndexOfDate(renderDates, date);\n if (colIndex >= 0) {\n for (var i = startIndex; i < endIndex; i++) {\n if (!isNullOrUndefined(groupIndex)) {\n var tds = [].slice.call(tableEle.rows[i].querySelectorAll('.' + cls.WORK_CELLS_CLASS + '[data-group-index=\"' + groupIndex + '\"]'));\n cells.push(tds[colIndex]);\n }\n else {\n cells.push(tableEle.rows[i].cells[colIndex]);\n }\n }\n }\n }\n addClass(cells, cls.WORK_HOURS_CLASS);\n };\n /**\n * Retrieves the start and end time information of the specific cell element.\n * @method getCellDetails\n * @param {Element} td The cell element whose start and end time details are to be retrieved.\n * @returns {CellClickEventArgs} Object An object holding the startTime, endTime and all-day information along with the target HTML\n * element will be returned.\n */\n Schedule.prototype.getCellDetails = function (td) {\n var startTime = this.getDateFromElement(td);\n if (isNullOrUndefined(startTime)) {\n return undefined;\n }\n var endTime;\n if (!this.activeViewOptions.timeScale.enable || td.classList.contains(cls.ALLDAY_CELLS_CLASS) ||\n td.classList.contains(cls.HEADER_CELLS_CLASS)) {\n endTime = util.addDays(new Date(startTime.getTime()), 1);\n }\n else {\n endTime = this.activeView.getEndDateFromStartDate(startTime);\n }\n var data = {\n startTime: startTime,\n endTime: endTime,\n isAllDay: this.isAllDayCell(td),\n element: td\n };\n var groupIndex = td.getAttribute('data-group-index');\n if (!isNullOrUndefined(groupIndex)) {\n data.groupIndex = parseInt(groupIndex, 10);\n }\n return data;\n };\n /**\n * Retrieves the resource details based on the provided resource index.\n * @param {number} index index of the resources at the last level.\n * @returns {ResourceDetails} Object An object holding the details of resource and resourceData.\n */\n Schedule.prototype.getResourcesByIndex = function (index) {\n if (this.resourceBase && this.resourceBase.lastResourceLevel) {\n if (index < 0 || index >= this.resourceBase.lastResourceLevel.length) {\n return undefined;\n }\n var data = this.resourceBase.lastResourceLevel[index];\n return { resource: data.resource, resourceData: data.resourceData };\n }\n return undefined;\n };\n /**\n * Scrolls the Schedule content area to the specified time.\n * @method scrollTo\n * @param {string} hour Accepts the time value in the skeleton format of 'Hm'.\n * @returns {void}\n */\n Schedule.prototype.scrollTo = function (hour) {\n if (this.activeView.scrollToHour) {\n this.activeView.scrollToHour(hour);\n }\n };\n /**\n * Adds the newly created event into the Schedule dataSource.\n * @method addEvent\n * @param {Object | Object[]} data Single or collection of event objects to be added into Schedule.\n * @returns {void}\n */\n Schedule.prototype.addEvent = function (data) {\n this.crudModule.addEvent(data);\n };\n /**\n * Updates the changes made in the event object by passing it as an parameter into the dataSource.\n * @method saveEvent\n * @param {[key: string]: Object} data Single or collection of event objects to be saved into Schedule.\n * @param {CurrentAction} currentAction Denotes the action that takes place either for editing occurrence or series.\n * The valid current action names are `EditOccurrence` or `EditSeries`.\n * @returns {void}\n */\n Schedule.prototype.saveEvent = function (data, currentAction) {\n this.crudModule.saveEvent(data, currentAction);\n };\n /**\n * Deletes the events based on the provided ID or event collection in the argument list.\n * @method deleteEvent\n * @param {{[key: string]: Object}} id Single event objects to be removed from the Schedule.\n * @param {{[key: string]: Object }[]} id Collection of event objects to be removed from the Schedule.\n * @param {string | number} id Accepts the ID of the event object which needs to be removed from the Schedule.\n * @param {CurrentAction} currentAction Denotes the delete action that takes place either on occurrence or series events.\n * The valid current action names are `Delete`, `DeleteOccurrence` or `DeleteSeries`.\n * @returns {void}\n */\n Schedule.prototype.deleteEvent = function (id, currentAction) {\n this.crudModule.deleteEvent(id, currentAction);\n };\n /**\n * Retrieves the entire collection of events bound to the Schedule.\n * @method getEvents\n * @returns {Object[]} Returns the collection of event objects from the Schedule.\n */\n Schedule.prototype.getEvents = function () {\n return this.eventsData;\n };\n /**\n * Retrieves the occurrences of a single recurrence event based on the provided parent ID.\n * @method getOccurrencesByID\n * @param {number} eventID ID of the parent recurrence data from which the occurrences are fetched.\n * @returns {Object[]} Returns the collection of occurrence event objects.\n */\n Schedule.prototype.getOccurrencesByID = function (eventID) {\n var occurrenceObj = this.eventBase.getOccurrencesByID(eventID);\n return occurrenceObj;\n };\n /**\n * Retrieves all the occurrences that lies between the specific start and end time range.\n * @method getOccurrencesByRange\n * @param {Date} startTime Denotes the start time range.\n * @param {Date} endTime Denotes the end time range.\n * @returns {Object[]} Returns the collection of occurrence event objects that lies between the provided start and end time.\n */\n Schedule.prototype.getOccurrencesByRange = function (startTime, endTime) {\n var occurrenceObj = this.eventBase.getOccurrencesByRange(startTime, endTime);\n return occurrenceObj;\n };\n /**\n * Retrieves the dates that lies on active view of Schedule.\n * @method getCurrentViewDates\n * @returns {Date[]} Returns the collection of dates.\n */\n Schedule.prototype.getCurrentViewDates = function () {\n return this.activeView.renderDates;\n };\n /**\n * Retrieves the events that lies on the current date range of the active view of Schedule.\n * @method getCurrentViewEvents\n * @returns {Object[]} Returns the collection of events.\n */\n Schedule.prototype.getCurrentViewEvents = function () {\n return this.eventsProcessed;\n };\n /**\n * Refreshes the event dataSource. This method may be useful when the events alone in the schedule needs to be re-rendered.\n * @method refreshEvents\n * @returns {void}\n */\n Schedule.prototype.refreshEvents = function () {\n this.renderModule.refreshDataManager();\n };\n /**\n * To retrieve the appointment object from element.\n * @method getEventDetails\n * @param {Element} element Denotes the event UI element on the Schedule.\n * @returns {Object} Returns the event details.\n */\n Schedule.prototype.getEventDetails = function (element) {\n var guid = element.getAttribute('data-guid');\n if (guid) {\n return this.eventBase.getEventByGuid(guid);\n }\n return {};\n };\n /**\n * To check whether the given time range slots are available for event creation or already occupied by other events.\n * @method isSlotAvailable\n * @param {Date} startTime Denotes the start time of the slot.\n * @param {Date} endTime Denotes the end time of the slot.\n * @param {number} groupIndex Defines the resource index from last level.\n * @returns {boolean} Returns true, if the slot that lies in the provided time range does not contain any other events.\n */\n Schedule.prototype.isSlotAvailable = function (startTime, endTime, groupIndex) {\n var eventCollection = this.eventBase.filterEvents(startTime, endTime);\n if (!isNullOrUndefined(groupIndex) && this.resourceBase && this.resourceBase.lastResourceLevel.length > 0) {\n eventCollection = this.eventBase.filterEventsByResource(this.resourceBase.lastResourceLevel[groupIndex], eventCollection);\n }\n return (eventCollection.length > 0) ? false : true;\n };\n /**\n * To manually open the event editor on specific time or on certain events.\n * @method openEditor\n * @param {Object} data It can be either cell data or event data.\n * @param {CurrentAction} action Defines the action for which the editor needs to be opened such as either for new event creation or\n * for editing of existing events. The applicable action names that can be used here are `Add`, `Save`, `EditOccurrence`\n * and `EditSeries`.\n * @returns {void}\n */\n Schedule.prototype.openEditor = function (data, action) {\n this.eventWindow.openEditor(data, action);\n };\n /**\n * This method has been added to adjust the size of the outer event wrapper class that holds the collection of events,\n * while trying to set manual height and width to the Schedule cells.\n * @method adjustEventWrapper\n * @returns {void}\n */\n Schedule.prototype.adjustEventWrapper = function () {\n this.activeView.adjustEventWrapper();\n };\n /**\n * Adds the resources to the specified index.\n * @param resources\n * @param {string} name Name of the resource defined in resources collection.\n * @param {number} index Index or position where the resource should be added.\n */\n Schedule.prototype.addResource = function (resources, name, index) {\n this.resourceBase.addResource(resources, name, index);\n };\n /**\n * Removes the specified resource.\n * @param resourceId Specifies the resource id to be removed.\n * @param name Specifies the resource name from which the id should be referred.\n */\n Schedule.prototype.removeResource = function (resourceId, name) {\n this.resourceBase.removeResource(resourceId, name);\n };\n /**\n * Destroys the Schedule component.\n * @method destroy\n * @return {void}\n */\n Schedule.prototype.destroy = function () {\n if (this.quickPopup) {\n this.quickPopup.destroy();\n this.quickPopup = null;\n }\n if (this.eventWindow) {\n this.eventWindow.destroy();\n this.eventWindow = null;\n }\n this.unwireEvents();\n if (this.headerModule) {\n this.headerModule.destroy();\n this.headerModule = null;\n }\n if (this.scrollModule) {\n this.scrollModule.destroy();\n this.scrollModule = null;\n }\n if (this.activeView) {\n this.activeView.removeEventListener();\n this.activeView.destroy();\n this.activeView = null;\n }\n if (this.scheduleTouchModule) {\n this.scheduleTouchModule.destroy();\n this.scheduleTouchModule = null;\n }\n _super.prototype.destroy.call(this);\n this.element.innerHTML = '';\n removeClass([this.element], cls.ROOT);\n };\n __decorate([\n Property('auto')\n ], Schedule.prototype, \"width\", void 0);\n __decorate([\n Property('auto')\n ], Schedule.prototype, \"height\", void 0);\n __decorate([\n Property(true)\n ], Schedule.prototype, \"showHeaderBar\", void 0);\n __decorate([\n Property(true)\n ], Schedule.prototype, \"showTimeIndicator\", void 0);\n __decorate([\n Property('Week')\n ], Schedule.prototype, \"currentView\", void 0);\n __decorate([\n Property(['Day', 'Week', 'WorkWeek', 'Month', 'Agenda'])\n ], Schedule.prototype, \"views\", void 0);\n __decorate([\n Property(new Date())\n ], Schedule.prototype, \"selectedDate\", void 0);\n __decorate([\n Property()\n ], Schedule.prototype, \"dateFormat\", void 0);\n __decorate([\n Property(true)\n ], Schedule.prototype, \"showWeekend\", void 0);\n __decorate([\n Property(0)\n ], Schedule.prototype, \"firstDayOfWeek\", void 0);\n __decorate([\n Property([1, 2, 3, 4, 5])\n ], Schedule.prototype, \"workDays\", void 0);\n __decorate([\n Property('00:00')\n ], Schedule.prototype, \"startHour\", void 0);\n __decorate([\n Property('24:00')\n ], Schedule.prototype, \"endHour\", void 0);\n __decorate([\n Complex({}, WorkHours)\n ], Schedule.prototype, \"workHours\", void 0);\n __decorate([\n Complex({}, TimeScale)\n ], Schedule.prototype, \"timeScale\", void 0);\n __decorate([\n Property(true)\n ], Schedule.prototype, \"allowKeyboardInteraction\", void 0);\n __decorate([\n Property()\n ], Schedule.prototype, \"dateHeaderTemplate\", void 0);\n __decorate([\n Property()\n ], Schedule.prototype, \"cellTemplate\", void 0);\n __decorate([\n Property(false)\n ], Schedule.prototype, \"readonly\", void 0);\n __decorate([\n Property(true)\n ], Schedule.prototype, \"showQuickInfo\", void 0);\n __decorate([\n Property()\n ], Schedule.prototype, \"editorTemplate\", void 0);\n __decorate([\n Property(7)\n ], Schedule.prototype, \"agendaDaysCount\", void 0);\n __decorate([\n Property(true)\n ], Schedule.prototype, \"hideEmptyAgendaDays\", void 0);\n __decorate([\n Property()\n ], Schedule.prototype, \"timezone\", void 0);\n __decorate([\n Complex({}, EventSettings)\n ], Schedule.prototype, \"eventSettings\", void 0);\n __decorate([\n Property()\n ], Schedule.prototype, \"resourceHeaderTemplate\", void 0);\n __decorate([\n Complex({}, Group)\n ], Schedule.prototype, \"group\", void 0);\n __decorate([\n Collection([], Resources)\n ], Schedule.prototype, \"resources\", void 0);\n __decorate([\n Property()\n ], Schedule.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], Schedule.prototype, \"enableRtl\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"cellClick\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"cellDoubleClick\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"actionComplete\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"actionFailure\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"navigating\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"renderCell\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"eventClick\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"eventRendered\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"dataBinding\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"popupOpen\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"dataBound\", void 0);\n Schedule = __decorate([\n NotifyPropertyChanges\n ], Schedule);\n return Schedule;\n}(Component));\nexport { Schedule };\n","import { createElement, append, prepend, isNullOrUndefined, getValue, getDefaultDateObject, cldrData } from '@syncfusion/ej2-base';\nimport { getDateInMs, addDays, resetTime, WEEK_LENGTH } from '../base/util';\nimport * as cls from '../base/css-constant';\nimport * as util from '../base/util';\n/**\n * view base\n */\nvar ViewBase = /** @class */ (function () {\n /**\n * Constructor\n */\n function ViewBase(parent) {\n var _this = this;\n this.customHelper = {\n getDayName: function (dt) {\n return _this.parent.getDayNames('abbreviated')[dt.getDay()];\n },\n getDate: function (dt) {\n return _this.parent.globalize.formatDate(dt, { format: 'd' });\n },\n getTime: function (dt) {\n if (_this.parent.isAdaptive) {\n return _this.parent.globalize.formatDate(dt, { skeleton: 'h' });\n }\n return _this.parent.getTimeString(dt);\n }\n };\n this.parent = parent;\n }\n ViewBase.prototype.createTableLayout = function (className) {\n var clsName = className || '';\n var table = createElement('table', { className: cls.SCHEDULE_TABLE_CLASS + ' ' + clsName });\n var tbody = createElement('tbody');\n table.appendChild(tbody);\n return table;\n };\n ViewBase.prototype.renderPanel = function (type) {\n if (type === cls.PREVIOUS_PANEL_CLASS) {\n prepend([this.element], this.parent.element.querySelector('.' + cls.TABLE_CONTAINER_CLASS));\n }\n else {\n this.parent.element.querySelector('.' + cls.TABLE_CONTAINER_CLASS).appendChild(this.element);\n }\n };\n ViewBase.prototype.setPanel = function (panel) {\n this.element = panel;\n };\n ViewBase.prototype.getPanel = function () {\n return this.element;\n };\n ViewBase.prototype.adjustEventWrapper = function () {\n // Here adjust the events wrapper width based in work cells\n };\n ViewBase.prototype.getDateSlots = function (renderDates, workDays) {\n // Here getDateSlots only need in vertical and month views\n return [];\n };\n ViewBase.prototype.generateColumnLevels = function () {\n // Here generateColumnLevels only need in vertical and month views\n return [];\n };\n ViewBase.prototype.highlightCurrentTime = function () {\n // Here showTimeIndicator functionalities\n };\n ViewBase.prototype.startDate = function () {\n return this.renderDates[0];\n };\n ViewBase.prototype.endDate = function () {\n return addDays(this.renderDates[this.renderDates.length - 1], 1);\n };\n ViewBase.prototype.getStartHour = function () {\n var startHour = this.parent.globalize.parseDate(this.parent.activeViewOptions.startHour, { skeleton: 'Hm' });\n if (isNullOrUndefined(startHour)) {\n startHour = new Date(2000, 0, 0, 0);\n }\n return startHour;\n };\n ViewBase.prototype.getEndHour = function () {\n var endHour = this.parent.globalize.parseDate(this.parent.activeViewOptions.endHour, { skeleton: 'Hm' });\n if (isNullOrUndefined(endHour)) {\n endHour = new Date(2000, 0, 0, 0);\n }\n return endHour;\n };\n ViewBase.prototype.isCurrentDate = function (date) {\n return date.setHours(0, 0, 0, 0) === new Date().setHours(0, 0, 0, 0);\n };\n ViewBase.prototype.isCurrentMonth = function (date) {\n return date.getFullYear() === new Date().getFullYear() && date.getMonth() === new Date().getMonth();\n };\n ViewBase.prototype.isWorkDay = function (date, workDays) {\n if (workDays === void 0) { workDays = this.parent.activeViewOptions.workDays; }\n if (workDays.indexOf(date.getDay()) >= 0) {\n return true;\n }\n return false;\n };\n ViewBase.prototype.isWorkHour = function (date, startHour, endHour, workDays) {\n if (isNullOrUndefined(startHour) || isNullOrUndefined(endHour)) {\n return false;\n }\n startHour.setMilliseconds(0);\n endHour.setMilliseconds(0);\n if (getDateInMs(date) < getDateInMs(startHour) || getDateInMs(date) >= getDateInMs(endHour) || !this.isWorkDay(date, workDays)) {\n return false;\n }\n return true;\n };\n ViewBase.prototype.getRenderDates = function (workDays) {\n var renderDates = [];\n for (var i = 0, length_1 = this.parent.activeViewOptions.interval; i < length_1; i++) {\n renderDates.push(util.addDays(resetTime(this.parent.selectedDate), i));\n }\n if (!workDays) {\n this.renderDates = renderDates;\n }\n return renderDates;\n };\n ViewBase.prototype.getNextPreviousDate = function (type) {\n if (type === 'next') {\n return addDays(this.parent.selectedDate, WEEK_LENGTH * this.parent.activeViewOptions.interval);\n }\n else {\n return addDays(this.parent.selectedDate, -WEEK_LENGTH * this.parent.activeViewOptions.interval);\n }\n };\n ViewBase.prototype.getLabelText = function (view) {\n return this.parent.localeObj.getConstant(view) + ' of ' +\n this.parent.globalize.formatDate(this.parent.selectedDate, { skeleton: 'long' });\n };\n ViewBase.prototype.getDateRangeText = function () {\n if (this.parent.isAdaptive) {\n return this.parent.globalize.formatDate(this.parent.selectedDate, { format: 'MMMM y' });\n }\n return this.formatDateRange(this.renderDates[0], this.renderDates[this.renderDates.length - 1]);\n };\n ViewBase.prototype.formatDateRange = function (startDate, endDate) {\n var globalize = this.parent.globalize;\n if (!isNullOrUndefined(this.parent.activeViewOptions.dateFormat)) {\n if (!endDate) {\n return globalize.formatDate(startDate, { format: this.parent.activeViewOptions.dateFormat });\n }\n return globalize.formatDate(startDate, { format: this.parent.activeViewOptions.dateFormat }) + ' - ' +\n globalize.formatDate(endDate, { format: this.parent.activeViewOptions.dateFormat });\n }\n var formattedStr;\n var longDateFormat;\n if (this.parent.locale === 'en' || this.parent.locale === 'en-US') {\n longDateFormat = getValue('dateFormats.long', getDefaultDateObject());\n }\n else {\n longDateFormat = getValue('main.' + '' + this.parent.locale + '.dates.calendars.gregorian.dateFormats.long', cldrData);\n }\n if (!endDate) {\n return globalize.formatDate(startDate, { format: longDateFormat });\n }\n var dateFormat = longDateFormat.trim().toLocaleLowerCase();\n if (dateFormat.substr(0, 1) === 'd') {\n if (startDate.getFullYear() === endDate.getFullYear()) {\n if (startDate.getMonth() === endDate.getMonth()) {\n formattedStr = globalize.formatDate(startDate, { format: 'dd' }) + ' - ' +\n globalize.formatDate(endDate, { format: 'dd MMMM yyyy' });\n }\n else {\n formattedStr = globalize.formatDate(startDate, { format: 'dd MMM' }) + ' - ' +\n globalize.formatDate(endDate, { format: 'dd MMM yyyy' });\n }\n }\n else {\n formattedStr = globalize.formatDate(startDate, { format: 'dd MMM yyyy' }) + ' - ' +\n globalize.formatDate(endDate, { format: 'dd MMM yyyy' });\n }\n }\n else if (dateFormat.substr(0, 1) === 'm') {\n if (startDate.getFullYear() === endDate.getFullYear()) {\n if (startDate.getMonth() === endDate.getMonth()) {\n formattedStr = globalize.formatDate(startDate, { format: 'MMMM dd' }) + ' - ' +\n globalize.formatDate(endDate, { format: 'dd, yyyy' });\n }\n else {\n formattedStr = globalize.formatDate(startDate, { format: 'MMM dd' }) + ' - ' +\n globalize.formatDate(endDate, { format: 'MMM dd, yyyy' });\n }\n }\n else {\n formattedStr = globalize.formatDate(startDate, { format: 'MMM dd, yyyy' }) + ' - ' +\n globalize.formatDate(endDate, { format: 'MMM dd, yyyy' });\n }\n }\n else {\n formattedStr = globalize.formatDate(startDate, { format: longDateFormat }) + ' - ' +\n globalize.formatDate(endDate, { format: longDateFormat });\n }\n return formattedStr;\n };\n ViewBase.prototype.getMobileDateElement = function (date, className) {\n var wrap = createElement('div', {\n className: className,\n innerHTML: '
    ' + this.parent.globalize.formatDate(date, { format: 'd' }) + '
    ' +\n '
    ' + this.parent.globalize.formatDate(date, { format: 'E' }) + '
    '\n });\n return wrap;\n };\n ViewBase.prototype.setResourceHeaderContent = function (tdElement, tdData, className) {\n if (className === void 0) { className = 'e-text-ellipsis'; }\n if (this.parent.activeViewOptions.resourceHeaderTemplate) {\n var cntEle = void 0;\n var data = {\n resource: tdData.resource,\n resourceData: tdData.resourceData\n };\n cntEle = this.parent.getResourceHeaderTemplate()(data);\n if (cntEle && cntEle.length) {\n append([].slice.call(cntEle), tdElement);\n }\n }\n else {\n tdElement.appendChild(createElement('div', {\n className: className, innerHTML: tdData.resourceData[tdData.resource.textField]\n }));\n }\n };\n ViewBase.prototype.renderResourceMobileLayout = function () {\n this.parent.resourceBase.renderResourceHeader();\n this.parent.resourceBase.renderResourceTree();\n };\n return ViewBase;\n}());\nexport { ViewBase };\n","import { extend, closest, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport * as event from '../base/constant';\nimport * as cls from '../base/css-constant';\n/**\n * Work cell interactions\n */\nvar WorkCellInteraction = /** @class */ (function () {\n function WorkCellInteraction(parent) {\n this.parent = parent;\n }\n WorkCellInteraction.prototype.cellMouseDown = function (e) {\n this.parent.notify(event.cellMouseDown, { event: e });\n };\n WorkCellInteraction.prototype.cellClick = function (e) {\n if (closest(e.target, '.' + cls.APPOINTMENT_CLASS)) {\n return;\n }\n var navigateEle = closest(e.target, '.' + cls.NAVIGATE_CLASS);\n if (isNullOrUndefined(navigateEle) || isNullOrUndefined(this.parent.viewOptions.day) || (this.parent.currentView === 'Day')) {\n if (this.parent.activeViewOptions.readonly) {\n this.parent.quickPopup.quickPopupHide();\n return;\n }\n var target = e.currentTarget;\n var isWorkCell = target.classList.contains(cls.WORK_CELLS_CLASS) || target.classList.contains(cls.ALLDAY_CELLS_CLASS);\n if (isWorkCell && e.shiftKey && e.which === 1 && this.parent.keyboardInteractionModule) {\n this.parent.keyboardInteractionModule.onMouseSelection(e);\n return;\n }\n this.parent.activeCellsData = this.parent.getCellDetails(target);\n var args = extend(this.parent.activeCellsData, { cancel: false, event: e, name: 'cellClick' });\n this.parent.trigger(event.cellClick, args);\n if (args.cancel) {\n return;\n }\n if (isWorkCell) {\n this.parent.selectCell(target);\n }\n this.parent.notify(event.cellClick, args);\n }\n else {\n var date = this.parent.getDateFromElement(e.currentTarget);\n if (!isNullOrUndefined(date) && !this.parent.isAdaptive) {\n this.parent.setProperties({ selectedDate: date }, true);\n this.parent.changeView('Day');\n }\n }\n };\n WorkCellInteraction.prototype.cellDblClick = function (e) {\n var target = closest(e.target, '.' + cls.APPOINTMENT_CLASS);\n if (!isNullOrUndefined(target) || this.parent.activeViewOptions.readonly) {\n return;\n }\n var args = extend(this.parent.activeCellsData, { cancel: false, event: e, name: 'cellDoubleClick' });\n this.parent.trigger(event.cellDoubleClick, args);\n if (args.cancel) {\n return;\n }\n this.parent.eventWindow.openEditor(this.parent.activeCellsData, 'Add');\n };\n return WorkCellInteraction;\n}());\nexport { WorkCellInteraction };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { append, createElement, extend, EventHandler, prepend, Animation } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, setStyleAttribute, remove, removeClass, addClass } from '@syncfusion/ej2-base';\nimport { DataManager, Query, Predicate } from '@syncfusion/ej2-data';\nimport { EventBase } from './event-base';\nimport * as util from '../base/util';\nimport * as events from '../base/constant';\nimport * as cls from '../base/css-constant';\n/**\n * Vertical view appointment rendering\n */\nvar VerticalEvent = /** @class */ (function (_super) {\n __extends(VerticalEvent, _super);\n /**\n * Constructor for vertical view\n */\n function VerticalEvent(parent) {\n var _this = _super.call(this, parent) || this;\n _this.dateRender = [];\n _this.renderedEvents = [];\n _this.renderedAllDayEvents = [];\n _this.overlapEvents = [];\n _this.moreEvents = [];\n _this.overlapList = [];\n _this.allDayEvents = [];\n _this.slotCount = _this.parent.activeViewOptions.timeScale.slotCount;\n _this.interval = _this.parent.activeViewOptions.timeScale.interval;\n _this.allDayLevel = 0;\n _this.startHour = _this.parent.activeView.getStartHour();\n _this.endHour = _this.parent.activeView.getEndHour();\n _this.element = _this.parent.activeView.getPanel();\n _this.fields = _this.parent.eventFields;\n _this.animation = new Animation({ progress: _this.animationUiUpdate.bind(_this) });\n _this.addEventListener();\n return _this;\n }\n VerticalEvent.prototype.renderAppointments = function () {\n var _this = this;\n var wrapperElements = [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_CLASS + ',.' + cls.ROW_COUNT_WRAPPER_CLASS));\n wrapperElements.forEach(function (element) { return remove(element); });\n this.allDayElement = [].slice.call(this.element.querySelectorAll('.' + cls.ALLDAY_CELLS_CLASS + ':first-child'));\n this.setAllDayRowHeight(0);\n if (this.parent.eventsProcessed.length === 0) {\n return;\n }\n var expandCollapse = this.element.querySelector('.' + cls.ALLDAY_APPOINTMENT_SECTION_CLASS);\n EventHandler.remove(expandCollapse, 'click', this.rowExpandCollapse);\n EventHandler.add(expandCollapse, 'click', this.rowExpandCollapse, this);\n this.renderedEvents = [];\n this.renderedAllDayEvents = [];\n this.resources = (this.parent.activeViewOptions.group.resources.length > 0) ? this.parent.uiStateValues.isGroupAdaptive ?\n [this.parent.resourceBase.lastResourceLevel[this.parent.uiStateValues.groupIndex]] :\n this.parent.resourceBase.lastResourceLevel : [];\n this.cellHeight = this.element.querySelector('.' + cls.WORK_CELLS_CLASS).offsetHeight;\n this.dateRender[0] = this.parent.activeView.renderDates;\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n this.resources.forEach(function (resource, index) { return _this.dateRender[index] = resource.renderDates; });\n }\n this.renderEvents('normalEvents');\n if (this.allDayEvents.length > 0) {\n this.allDayEvents = this.allDayEvents.filter(function (item, index, arr) {\n return index === arr.map(function (item) { return item.Guid; }).indexOf(item.Guid);\n });\n removeClass(this.allDayElement, cls.ALLDAY_ROW_ANIMATE_CLASS);\n this.slots.push(this.parent.activeView.renderDates.map(function (date) { return +date; }));\n this.renderEvents('allDayEvents');\n }\n this.parent.notify(events.contentReady, {});\n addClass(this.allDayElement, cls.ALLDAY_ROW_ANIMATE_CLASS);\n };\n VerticalEvent.prototype.renderEvents = function (eventType) {\n removeClass(this.allDayElement, cls.ALLDAY_ROW_ANIMATE_CLASS);\n var eventCollection = (eventType === 'allDayEvents') ? this.sortByDateTime(this.allDayEvents) : undefined;\n var resources = this.getResourceList();\n var dateCount = 0;\n for (var _i = 0, resources_1 = resources; _i < resources_1.length; _i++) {\n var resource = resources_1[_i];\n var renderDates = this.dateRender[resource];\n for (var day = 0, length_1 = renderDates.length; day < length_1; day++) {\n this.renderedEvents = [];\n var startDate = new Date(renderDates[day].getTime());\n var endDate = util.addDays(renderDates[day], 1);\n var filterEvents = this.filterEvents(startDate, endDate, eventCollection, this.resources[resource]);\n for (var _a = 0, filterEvents_1 = filterEvents; _a < filterEvents_1.length; _a++) {\n var event_1 = filterEvents_1[_a];\n if (this.parent.resourceBase) {\n this.setValues(event_1, resource);\n }\n if (eventType === 'allDayEvents') {\n this.renderAllDayEvents(event_1, day, resource, dateCount);\n }\n else {\n if (this.isAllDayAppointment(event_1)) {\n this.allDayEvents.push(extend({}, event_1, null, true));\n }\n else {\n this.renderNormalEvents(event_1, day, resource, dateCount);\n }\n }\n this.cssClass = null;\n this.groupOrder = null;\n }\n dateCount += 1;\n }\n }\n };\n VerticalEvent.prototype.setValues = function (event, resourceIndex) {\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n this.cssClass = this.resources[resourceIndex].cssClass;\n this.groupOrder = this.resources[resourceIndex].groupOrder;\n }\n else {\n this.cssClass = this.parent.resourceBase.getCssClass(event);\n }\n };\n VerticalEvent.prototype.getResourceList = function () {\n var resources = Array.apply(null, {\n length: (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) ?\n this.resources.length : 1\n }).map(function (value, index) { return index; });\n return resources;\n };\n VerticalEvent.prototype.createAppointmentElement = function (record, isAllDay, data, resource) {\n var fieldMapping = this.parent.eventFields;\n var recordSubject = (record[fieldMapping.subject] || this.parent.eventSettings.fields.subject.default ||\n this.parent.localeObj.getConstant('addTitle'));\n var appointmentWrapper = createElement('div', {\n id: 'Appointment_' + record[fieldMapping.id],\n className: cls.APPOINTMENT_CLASS,\n attrs: {\n 'data-guid': record.Guid,\n 'role': 'button',\n 'tabindex': '0',\n 'aria-readonly': 'false',\n 'aria-selected': 'false',\n 'aria-grabbed': 'true',\n 'aria-label': recordSubject\n }\n });\n var appointmentDetails = createElement('div', { className: cls.APPOINTMENT_DETAILS });\n appointmentWrapper.appendChild(appointmentDetails);\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n var resourceIndex = this.parent.isAdaptive ? this.parent.uiStateValues.groupIndex : resource;\n appointmentWrapper.setAttribute('data-group-index', resourceIndex.toString());\n }\n var templateElement;\n var eventData = data;\n if (!isNullOrUndefined(this.parent.activeViewOptions.eventTemplate)) {\n templateElement = this.parent.getAppointmentTemplate()(record);\n }\n else {\n var appointmentSubject = createElement('div', { className: cls.SUBJECT_CLASS, innerHTML: recordSubject });\n if (isAllDay) {\n if (record[fieldMapping.isAllDay]) {\n templateElement = [appointmentSubject];\n }\n else {\n templateElement = [];\n var appointmentStartTime = createElement('div', {\n className: cls.APPOINTMENT_TIME + (this.parent.isAdaptive ? ' ' + cls.DISABLE_CLASS : ''),\n innerHTML: this.parent.getTimeString(record[fieldMapping.startTime])\n });\n var appointmentEndTime = createElement('div', {\n className: cls.APPOINTMENT_TIME + (this.parent.isAdaptive ? ' ' + cls.DISABLE_CLASS : ''),\n innerHTML: this.parent.getTimeString(record[fieldMapping.endTime]),\n });\n addClass([appointmentSubject], 'e-text-center');\n if (!eventData.isLeft) {\n templateElement.push(appointmentStartTime);\n }\n templateElement.push(appointmentSubject);\n if (!eventData.isRight) {\n templateElement.push(appointmentEndTime);\n }\n }\n }\n else {\n var timeStr = this.parent.getTimeString(record[fieldMapping.startTime]) + ' - ' +\n this.parent.getTimeString(record[fieldMapping.endTime]);\n var appointmentTime = createElement('div', {\n className: cls.APPOINTMENT_TIME + (this.parent.isAdaptive ? ' ' + cls.DISABLE_CLASS : ''),\n innerHTML: timeStr,\n });\n var appointmentLocation = createElement('div', {\n className: cls.LOCATION_CLASS,\n innerHTML: (record[fieldMapping.location] || this.parent.eventSettings.fields.location.default || '')\n });\n templateElement = [appointmentSubject, appointmentTime, appointmentLocation];\n }\n }\n append([].slice.call(templateElement), appointmentDetails);\n if (!isNullOrUndefined(record[fieldMapping.recurrenceRule])) {\n var iconClass = (record[fieldMapping.id] === record[fieldMapping.recurrenceID]) ?\n cls.EVENT_RECURRENCE_ICON_CLASS : cls.EVENT_RECURRENCE_EDIT_ICON_CLASS;\n var recurrenceIcon = createElement('div', {\n className: cls.ICON + ' ' + iconClass + (this.parent.isAdaptive ? ' ' + cls.DISABLE_CLASS : '')\n });\n isAllDay ? appointmentDetails.appendChild(recurrenceIcon) : appointmentWrapper.appendChild(recurrenceIcon);\n }\n if (isAllDay) {\n this.renderSpannedIcon(appointmentDetails, eventData, isAllDay);\n }\n else {\n this.renderSpannedIcon(appointmentWrapper, eventData, isAllDay);\n }\n if (!isNullOrUndefined(this.cssClass)) {\n addClass([appointmentWrapper], this.cssClass);\n }\n this.applyResourceColor(appointmentWrapper, record, 'backgroundColor', this.groupOrder);\n return appointmentWrapper;\n };\n VerticalEvent.prototype.createMoreIndicator = function (allDayRow, count, currentDay) {\n var countWrapper = allDayRow[currentDay + count];\n if (countWrapper.childElementCount <= 0) {\n var innerCountWrap = createElement('div', {\n className: cls.ROW_COUNT_WRAPPER_CLASS,\n id: cls.ROW_COUNT_WRAPPER_CLASS + '-' + (currentDay + count).toString()\n });\n var moreIndicatorElement = createElement('div', {\n className: cls.MORE_INDICATOR_CLASS,\n attrs: { 'tabindex': '0', 'data-index': (currentDay + count).toString(), 'data-count': '1' },\n innerHTML: '+1 ' + (this.parent.isAdaptive ? '' : this.parent.localeObj.getConstant('more'))\n });\n innerCountWrap.appendChild(moreIndicatorElement);\n countWrapper.appendChild(innerCountWrap);\n EventHandler.add(moreIndicatorElement, 'click', this.rowExpandCollapse, this);\n }\n else {\n var countCell = countWrapper.firstChild;\n countCell.firstChild.setAttribute('data-count', (parseInt(countCell.firstChild.getAttribute('data-count'), 10) + 1).toString());\n countCell.firstChild.innerHTML =\n '+' + (parseInt(countCell.firstChild.getAttribute('data-count'), 10)).toString() + ' ' +\n (this.parent.isAdaptive ? '' : this.parent.localeObj.getConstant('more'));\n }\n };\n VerticalEvent.prototype.renderSpannedIcon = function (element, spanEvent, isAllDay) {\n if (isAllDay) {\n if (spanEvent.isLeft) {\n var iconLeft = createElement('div', {\n className: cls.EVENT_INDICATOR_CLASS + ' ' + cls.ICON + ' ' + cls.EVENT_ICON_LEFT_CLASS\n });\n prepend([iconLeft], element);\n }\n if (spanEvent.isRight) {\n var iconRight = createElement('div', {\n className: cls.EVENT_INDICATOR_CLASS + ' ' + cls.ICON + ' ' + cls.EVENT_ICON_RIGHT_CLASS\n });\n append([iconRight], element);\n }\n }\n else {\n if (spanEvent.isTop) {\n var iconTop = createElement('div', {\n className: cls.EVENT_INDICATOR_CLASS + ' ' + cls.ICON + ' ' + cls.EVENT_ICON_UP_CLASS\n });\n prepend([iconTop], element);\n }\n if (spanEvent.isBottom) {\n var iconBottom = createElement('div', {\n className: cls.EVENT_INDICATOR_CLASS + ' ' + cls.ICON + ' ' + cls.EVENT_ICON_DOWN_CLASS\n });\n append([iconBottom], element);\n }\n }\n };\n VerticalEvent.prototype.isSpannedEvent = function (record, day, resource) {\n var currentDate = util.resetTime(this.dateRender[resource][day]);\n var fieldMapping = this.parent.eventFields;\n var startEndHours = util.getStartEndHours(currentDate, this.startHour, this.endHour);\n var event = extend({}, record, null, true);\n event.isSpanned = { isBottom: false, isTop: false };\n if (record[fieldMapping.startTime].getTime() < startEndHours.startHour.getTime()) {\n event[fieldMapping.startTime] = startEndHours.startHour;\n event.isSpanned.isTop = true;\n }\n if (record[fieldMapping.endTime].getTime() > startEndHours.endHour.getTime()) {\n event[fieldMapping.endTime] = startEndHours.endHour;\n event.isSpanned.isBottom = true;\n }\n return event;\n };\n VerticalEvent.prototype.renderAllDayEvents = function (eventObj, dayIndex, resource, dayCount) {\n var _this = this;\n var currentDates = this.dateRender[resource];\n if (this.parent.activeViewOptions.group.byDate) {\n this.slots[0] = currentDates = [this.dateRender[resource][dayIndex]];\n }\n var record = this.splitEvent(eventObj, currentDates)[0];\n var allDayRowCell = this.element.querySelector('.' + cls.ALLDAY_CELLS_CLASS + ':first-child');\n var cellTop = allDayRowCell.offsetTop;\n var eStart = new Date(record[this.parent.eventFields.startTime].getTime());\n var eEnd = new Date(record[this.parent.eventFields.endTime].getTime());\n var appWidth = 0;\n var appLeft = '0%';\n var topValue = 1;\n var appLevel = 0;\n var isDateRange = currentDates[0].getTime() <= eStart.getTime() &&\n util.addDays(currentDates.slice(-1)[0], 1).getTime() >= eStart.getTime();\n if (eStart <= eEnd && isDateRange) {\n var isAlreadyRendered = [];\n if (this.renderedAllDayEvents[resource]) {\n isAlreadyRendered = this.renderedAllDayEvents[resource].filter(function (event) {\n return event.Guid === eventObj.Guid;\n });\n if (this.parent.activeViewOptions.group.byDate) {\n isAlreadyRendered = isAlreadyRendered.filter(function (event) {\n return event[_this.parent.eventFields.startTime] >= currentDates[dayIndex] &&\n event[_this.parent.eventFields.endTime] <= util.addDays(new Date(+currentDates[dayIndex]), 1);\n });\n }\n }\n if (isAlreadyRendered.length === 0) {\n var allDayDifference = record.data.count;\n var allDayIndex = this.getOverlapIndex(record, dayIndex, true, resource);\n record.Index = allDayIndex;\n this.allDayLevel = (this.allDayLevel < allDayIndex) ? allDayIndex : this.allDayLevel;\n var widthAdjustment = record.data.isRight ? 0 :\n this.parent.currentView === 'Day' ? 4 : 7;\n if (allDayDifference >= 0) {\n appWidth = (allDayDifference * 100) - widthAdjustment;\n }\n if (isNullOrUndefined(this.renderedAllDayEvents[resource])) {\n this.renderedAllDayEvents[resource] = [extend({}, record, null, true)];\n }\n else {\n this.renderedAllDayEvents[resource].push(extend({}, record, null, true));\n }\n var allDayRow = [].slice.call(this.element.querySelector('.' + cls.ALLDAY_ROW_CLASS).children);\n var wIndex = this.parent.activeViewOptions.group.byDate ? (this.resources.length * dayIndex) + resource : dayCount;\n var eventWrapper = this.element.querySelector('.' + cls.ALLDAY_APPOINTMENT_WRAPPER_CLASS +\n ':nth-child(' + (wIndex + 1) + ')');\n var appointmentElement = this.createAppointmentElement(eventObj, true, record.data, resource);\n addClass([appointmentElement], cls.ALLDAY_APPOINTMENT_CLASS);\n var args = { data: eventObj, element: appointmentElement, cancel: false };\n this.parent.trigger(events.eventRendered, args);\n if (!args.cancel) {\n eventWrapper.appendChild(appointmentElement);\n }\n var appHeight = appointmentElement.offsetHeight;\n topValue += (allDayIndex === 0 ? cellTop : (cellTop + (allDayIndex * appHeight))) + 1;\n setStyleAttribute(appointmentElement, { 'width': appWidth + '%', 'top': topValue + 'px' });\n if (allDayIndex > 1) {\n this.moreEvents.push(appointmentElement);\n for (var count = 0, length_2 = allDayDifference; count < length_2; count++) {\n this.createMoreIndicator(allDayRow, count, wIndex);\n }\n }\n allDayRowCell.setAttribute('data-count', this.allDayLevel.toString());\n var allDayRowHeight = ((!this.parent.uiStateValues.expand && this.allDayLevel > 2) ?\n (3 * appHeight) : ((this.allDayLevel + 1) * appHeight)) + 4;\n this.setAllDayRowHeight(allDayRowHeight);\n this.addOrRemoveClass();\n this.wireAppointmentEvents(appointmentElement);\n }\n }\n };\n VerticalEvent.prototype.renderNormalEvents = function (eventObj, dayIndex, resource, dayCount) {\n var record = this.isSpannedEvent(eventObj, dayIndex, resource);\n var eStart = record[this.fields.startTime];\n var eEnd = record[this.fields.endTime];\n var appWidth = '0%';\n var appLeft = '0%';\n var topValue = 0;\n var appLevel = 0;\n var currentDates = this.dateRender[resource];\n var isDateRange = currentDates[0].getTime() <= eStart.getTime() &&\n util.addDays(currentDates.slice(-1)[0], 1).getTime() >= eStart.getTime();\n if (eStart <= eEnd && isDateRange) {\n var appHeight = 0;\n var startEndHours = util.getStartEndHours(util.resetTime(currentDates[dayIndex]), this.startHour, this.endHour);\n if (startEndHours.endHour.getTime() <= eEnd.getTime() && startEndHours.startHour.getTime() >= eStart.getTime()) {\n appHeight = this.getAppointmentHeight(this.cellHeight, startEndHours.startHour, startEndHours.endHour);\n }\n else if (startEndHours.endHour.getTime() <= eEnd.getTime()) {\n appHeight = this.getAppointmentHeight(this.cellHeight, eStart, startEndHours.endHour);\n }\n else if (startEndHours.startHour.getTime() >= eStart.getTime()) {\n appHeight = this.getAppointmentHeight(this.cellHeight, startEndHours.startHour, eEnd);\n }\n else {\n appHeight = (eEnd.getTime() - eStart.getTime()) / (60 * 1000) * (this.cellHeight * this.slotCount) / this.interval;\n }\n appHeight = (appHeight < this.cellHeight) ? this.cellHeight : appHeight;\n if (eStart.getTime() > startEndHours.startHour.getTime()) {\n topValue = this.getTopValue(eStart, dayIndex, resource);\n }\n var appIndex = this.getOverlapIndex(record, dayIndex, false, resource);\n record.Index = appIndex;\n this.overlapList.push(record);\n if (this.overlapList.length > 1) {\n (isNullOrUndefined(this.overlapEvents[appIndex])) ? this.overlapEvents[appIndex] = [record] :\n this.overlapEvents[appIndex].push(record);\n }\n else {\n this.overlapEvents = [];\n this.overlapEvents.push([record]);\n }\n var width = this.parent.currentView === 'Day' ? 97 : 94;\n appWidth = ((width - this.overlapEvents.length) / this.overlapEvents.length) + '%';\n var argsData = {\n index: appIndex, left: appLeft, width: appWidth,\n day: dayIndex, dayIndex: dayCount, record: record, resource: resource\n };\n var tempData = this.adjustOverlapElements(argsData);\n appWidth = (tempData.appWidth);\n if (isNullOrUndefined(this.renderedEvents[resource])) {\n this.renderedEvents[resource] = [extend({}, record, null, true)];\n }\n else {\n this.renderedEvents[resource].push(extend({}, record, null, true));\n }\n var appointmentWrap = [].slice.call(this.element.querySelectorAll('.' + cls.APPOINTMENT_WRAPPER_CLASS));\n var appointmentElement = this.createAppointmentElement(eventObj, false, record.isSpanned, resource);\n setStyleAttribute(appointmentElement, { 'width': tempData.appWidth, 'height': appHeight + 'px', 'top': topValue + 'px' });\n var iconHeight = appointmentElement.querySelectorAll('.' + cls.EVENT_INDICATOR_CLASS).length * 15;\n var maxHeight = appHeight - 40 - iconHeight;\n if (!this.parent.isAdaptive && appointmentElement.querySelector('.' + cls.SUBJECT_CLASS)) {\n appointmentElement.querySelector('.' + cls.SUBJECT_CLASS).style.maxHeight = maxHeight + 'px';\n }\n if (this.parent.enableRtl) {\n setStyleAttribute(appointmentElement, { 'right': tempData.appLeft });\n }\n else {\n setStyleAttribute(appointmentElement, { 'left': tempData.appLeft });\n }\n var index = this.parent.activeViewOptions.group.byDate ? (this.resources.length * dayIndex) + resource : dayCount;\n var args = { data: eventObj, element: appointmentElement, cancel: false };\n this.parent.trigger(events.eventRendered, args);\n if (!args.cancel) {\n appointmentWrap[index].appendChild(appointmentElement);\n }\n this.wireAppointmentEvents(appointmentElement);\n }\n };\n VerticalEvent.prototype.getTopValue = function (date, day, resource) {\n var startEndHours = util.getStartEndHours(util.resetTime(this.dateRender[resource][day]), this.startHour, this.endHour);\n var startHour = startEndHours.startHour;\n var diffInMinutes = ((date.getHours() - startHour.getHours()) * 60) + (date.getMinutes() - startHour.getMinutes());\n return (diffInMinutes * this.cellHeight * this.slotCount) / this.interval;\n };\n VerticalEvent.prototype.getAppointmentHeight = function (cellHeight, startDate, endDate) {\n return (((endDate.getTime() - startDate.getTime()) / (1000 * 60)) / (this.interval / this.slotCount)) * cellHeight;\n };\n VerticalEvent.prototype.getOverlapIndex = function (record, day, isAllDay, resource) {\n var _this = this;\n var fieldMapping = this.parent.eventFields;\n var predicate;\n var eventsList = [];\n var appIndex = -1;\n this.overlapEvents = [];\n if (isAllDay) {\n if (!isNullOrUndefined(this.renderedAllDayEvents[resource])) {\n var date_1 = util.resetTime(new Date(this.dateRender[resource][day].getTime()));\n eventsList = this.renderedAllDayEvents[resource].filter(function (app) {\n return util.resetTime(app[fieldMapping.startTime]).getTime() <= date_1.getTime() &&\n util.resetTime(app[fieldMapping.endTime]).getTime() >= date_1.getTime();\n });\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n eventsList = this.filterEventsByResource(this.resources[resource], eventsList);\n }\n }\n }\n else {\n var appointmentList_1 = !isNullOrUndefined(this.renderedEvents[resource]) ? this.renderedEvents[resource] : [];\n var appointment_1 = [];\n predicate = new Predicate(fieldMapping.endTime, 'greaterthan', record[fieldMapping.startTime]).\n and(new Predicate(fieldMapping.startTime, 'lessthan', record[fieldMapping.endTime]));\n this.overlapList = new DataManager({ json: appointmentList_1 }).executeLocal(new Query().where(predicate));\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n this.overlapList = this.filterEventsByResource(this.resources[resource], this.overlapList);\n }\n this.overlapList.forEach(function (obj) {\n predicate = new Predicate(fieldMapping.endTime, 'greaterthanorequal', obj[fieldMapping.startTime]).\n and(new Predicate(fieldMapping.startTime, 'lessthanorequal', obj[fieldMapping.endTime]));\n var filterList = new DataManager({ json: appointmentList_1 }).executeLocal(new Query().where(predicate));\n if (_this.parent.activeViewOptions.group.resources.length > 0) {\n filterList = _this.filterEventsByResource(_this.resources[resource], filterList);\n }\n var collection = _this.overlapList.filter(function (val) { return filterList.indexOf(val) === -1; });\n return appointment_1.concat(collection);\n });\n this.overlapList = this.overlapList.concat(appointment_1);\n eventsList = this.overlapList;\n for (var _i = 0, eventsList_1 = eventsList; _i < eventsList_1.length; _i++) {\n var event_2 = eventsList_1[_i];\n var record_1 = event_2;\n var index = record_1.Index;\n (isNullOrUndefined(this.overlapEvents[index])) ? this.overlapEvents[index] = [event_2] :\n this.overlapEvents[index].push(event_2);\n }\n }\n if (eventsList.length > 0) {\n var appLevel = eventsList.map(function (obj) { return obj.Index; });\n appIndex = (appLevel.length > 0) ? this.getSmallestMissingNumber(appLevel) : 0;\n }\n return (appIndex === -1) ? 0 : appIndex;\n };\n VerticalEvent.prototype.adjustOverlapElements = function (args) {\n var data = { appWidth: args.width, appLeft: args.left };\n for (var i = 0, length1 = this.overlapEvents.length; i < length1; i++) {\n if (!isNullOrUndefined(this.overlapEvents[i])) {\n for (var j = 0, length2 = this.overlapEvents[i].length; j < length2; j++) {\n var dayCount = this.parent.activeViewOptions.group.byDate ? (this.resources.length * args.day) + args.resource :\n args.dayIndex;\n var element = this.element.querySelector('#e-appointment-wrapper-' + dayCount);\n if (element.childElementCount > 0) {\n var eleGuid = this.overlapEvents[i][j].Guid;\n if (element.querySelectorAll('div[data-guid=\"' + eleGuid + '\"]').length > 0 && eleGuid !== args.record.Guid) {\n var apps = element.querySelector('div[data-guid=\"' + eleGuid + '\"]');\n if (parseFloat(args.width) <= parseFloat(apps.style.width)) {\n (this.parent.enableRtl) ? apps.style.right = ((parseFloat(args.width) + 1) * i) + '%' :\n apps.style.left = ((parseFloat(args.width) + 1) * i) + '%';\n apps.style.width = ((parseFloat(args.width))) + '%';\n data.appWidth = apps.style.width;\n }\n }\n else {\n var appWidth = args.width;\n if (isNullOrUndefined(this.overlapEvents[i - 1])) {\n var width = this.parent.currentView === 'Day' ? 97 : 94;\n appWidth = ((width - this.overlapEvents.length) / this.overlapEvents.length) + '%';\n }\n var leftPosition = ((parseInt(appWidth, 0) + 1) * args.index) + '%';\n data.appWidth = appWidth;\n data.appLeft = leftPosition;\n }\n }\n }\n }\n }\n return data;\n };\n VerticalEvent.prototype.setAllDayRowHeight = function (height) {\n for (var _i = 0, _a = this.allDayElement; _i < _a.length; _i++) {\n var element = _a[_i];\n element.style.height = (height / 12) + 'em';\n }\n this.animation.animate(this.allDayElement[0]);\n };\n VerticalEvent.prototype.addOrRemoveClass = function () {\n var _this = this;\n this.moreEvents.filter(function (element) {\n if (!_this.parent.uiStateValues.expand && _this.allDayLevel > 2) {\n addClass([element], cls.EVENT_COUNT_CLASS);\n element.setAttribute('tabindex', '-1');\n }\n else {\n removeClass([element], cls.EVENT_COUNT_CLASS);\n element.setAttribute('tabindex', '0');\n }\n });\n var moreEventCount = this.element.querySelector('.' + cls.ALLDAY_APPOINTMENT_SECTION_CLASS);\n if (this.parent.uiStateValues.expand) {\n removeClass([moreEventCount], cls.APPOINTMENT_ROW_EXPAND_CLASS);\n addClass([moreEventCount], cls.APPOINTMENT_ROW_COLLAPSE_CLASS);\n }\n else {\n removeClass([moreEventCount], cls.APPOINTMENT_ROW_COLLAPSE_CLASS);\n addClass([moreEventCount], cls.APPOINTMENT_ROW_EXPAND_CLASS);\n }\n (this.allDayLevel > 2) ? removeClass([moreEventCount], cls.DISABLE_CLASS) : addClass([moreEventCount], cls.DISABLE_CLASS);\n var countCell = [].slice.call(this.element.querySelectorAll('.' + cls.ROW_COUNT_WRAPPER_CLASS));\n countCell.filter(function (element) {\n (!_this.parent.uiStateValues.expand && _this.allDayLevel > 2) ? removeClass([element], cls.DISABLE_CLASS) :\n addClass([element], cls.DISABLE_CLASS);\n });\n };\n VerticalEvent.prototype.getEventHeight = function () {\n var eventElement = createElement('div', { className: cls.APPOINTMENT_CLASS, styles: 'visibility:hidden' });\n var eventWrapper = this.element.querySelector('.' + cls.ALLDAY_APPOINTMENT_WRAPPER_CLASS + ':first-child');\n eventWrapper.appendChild(eventElement);\n var height = eventElement.offsetHeight;\n eventElement.remove();\n return height;\n };\n VerticalEvent.prototype.rowExpandCollapse = function (event) {\n var target = this.element.querySelector('.' + cls.ALLDAY_APPOINTMENT_SECTION_CLASS);\n this.parent.uiStateValues.expand = target.classList.contains(cls.APPOINTMENT_ROW_EXPAND_CLASS);\n var rowHeight;\n if (this.parent.uiStateValues.expand) {\n target.setAttribute('title', 'Collapse-all-day-section');\n target.setAttribute('aria-label', 'Collapse section');\n rowHeight = ((this.allDayLevel + 1) * this.getEventHeight()) + 4;\n }\n else {\n target.setAttribute('title', 'Expand-all-day-section');\n target.setAttribute('aria-label', 'Expand section');\n rowHeight = (3 * this.getEventHeight()) + 4;\n }\n this.setAllDayRowHeight(rowHeight);\n this.addOrRemoveClass();\n this.animation.animate(target);\n };\n VerticalEvent.prototype.animationUiUpdate = function () {\n this.parent.notify(events.contentReady, {});\n };\n return VerticalEvent;\n}(EventBase));\nexport { VerticalEvent };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { append, prepend, createElement, extend, EventHandler, closest, addClass } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, setStyleAttribute, remove } from '@syncfusion/ej2-base';\nimport { EventBase } from './event-base';\nimport * as cls from '../base/css-constant';\nimport * as events from '../base/constant';\nimport * as util from '../base/util';\nvar EVENT_GAP = 0;\n/**\n * Month view events render\n */\nvar MonthEvent = /** @class */ (function (_super) {\n __extends(MonthEvent, _super);\n /**\n * Constructor for month events\n */\n function MonthEvent(parent) {\n var _this = _super.call(this, parent) || this;\n _this.renderedEvents = [];\n _this.element = _this.parent.activeView.getPanel();\n _this.fields = _this.parent.eventFields;\n _this.addEventListener();\n return _this;\n }\n MonthEvent.prototype.renderAppointments = function () {\n var _this = this;\n var appointmentWrapper = [].slice.call(this.element.querySelectorAll('.' + cls.APPOINTMENT_WRAPPER_CLASS));\n for (var _i = 0, appointmentWrapper_1 = appointmentWrapper; _i < appointmentWrapper_1.length; _i++) {\n var wrap = appointmentWrapper_1[_i];\n remove(wrap);\n }\n this.eventHeight = this.getElementHeightFromClass(this.element, cls.APPOINTMENT_CLASS);\n if (this.parent.currentView === 'Month') {\n this.monthHeaderHeight = this.getOuterHeight(this.element.querySelector('.' + cls.DATE_HEADER_CLASS));\n }\n else {\n this.monthHeaderHeight = 0;\n }\n var renderEventsHandler = function (dateRender, workDays, resData) {\n _this.renderedEvents = [];\n var eventsList;\n var resIndex = 0;\n if (resData) {\n resIndex = resData.groupIndex;\n _this.cssClass = resData.cssClass;\n _this.groupOrder = resData.groupOrder;\n eventsList = _this.parent.eventBase.filterEventsByResource(resData);\n _this.workCells = [].slice.call(_this.element.querySelectorAll('.' + cls.WORK_CELLS_CLASS + '[data-group-index=\"' + resIndex + '\"]'));\n }\n else {\n eventsList = _this.parent.eventsProcessed;\n _this.workCells = [].slice.call(_this.element.querySelectorAll('.' + cls.WORK_CELLS_CLASS));\n }\n _this.sortByDateTime(eventsList);\n _this.cellWidth = _this.workCells.slice(-1)[0].offsetWidth;\n _this.cellHeight = _this.workCells.slice(-1)[0].offsetHeight;\n _this.dateRender = dateRender;\n var dates = _this.dateRender.map(function (date) { return +date; });\n _this.slots = [];\n var noOfDays = _this.parent.activeViewOptions.showWeekend ? util.WEEK_LENGTH : workDays.length;\n while (dates.length > 0) {\n _this.slots.push(dates.splice(0, noOfDays));\n }\n for (var _i = 0, eventsList_1 = eventsList; _i < eventsList_1.length; _i++) {\n var event_1 = eventsList_1[_i];\n if (_this.parent.resourceBase && !resData) {\n _this.cssClass = _this.parent.resourceBase.getCssClass(event_1);\n }\n var splittedEvents = _this.splitEvent(event_1, _this.dateRender);\n for (var _a = 0, splittedEvents_1 = splittedEvents; _a < splittedEvents_1.length; _a++) {\n var event_2 = splittedEvents_1[_a];\n _this.renderAppointmentMonth(event_2, resIndex);\n }\n }\n _this.cssClass = null;\n _this.groupOrder = null;\n };\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n var resources = this.parent.uiStateValues.isGroupAdaptive ?\n [this.parent.resourceBase.lastResourceLevel[this.parent.uiStateValues.groupIndex]] :\n this.parent.resourceBase.lastResourceLevel;\n for (var _a = 0, resources_1 = resources; _a < resources_1.length; _a++) {\n var slotData = resources_1[_a];\n renderEventsHandler(slotData.renderDates, slotData.workDays, slotData);\n }\n }\n else {\n renderEventsHandler(this.parent.activeView.renderDates, this.parent.activeViewOptions.workDays);\n }\n };\n MonthEvent.prototype.getElementHeightFromClass = function (container, elementClass) {\n var height = 0;\n var el = createElement('div', { className: elementClass }).cloneNode();\n el.style.visibility = 'hidden';\n el.style.position = 'absolute';\n container.appendChild(el);\n height = this.getOuterHeight(el);\n remove(el);\n return height;\n };\n MonthEvent.prototype.getOuterHeight = function (element) {\n var style = getComputedStyle(element);\n return element.offsetHeight + (parseInt(style.marginTop, 10) || 0) + (parseInt(style.marginBottom, 10) || 0);\n };\n MonthEvent.prototype.createAppointmentElement = function (record, resIndex) {\n var eventSubject = (record[this.fields.subject] || this.parent.eventSettings.fields.subject.default ||\n this.parent.localeObj.getConstant('addTitle'));\n var appointmentWrapper = createElement('div', {\n id: 'Appointment_' + record[this.fields.id],\n className: cls.APPOINTMENT_CLASS,\n attrs: {\n 'data-guid': record.Guid, 'role': 'button', 'tabindex': '0',\n 'aria-readonly': 'false', 'aria-selected': 'false', 'aria-grabbed': 'true',\n 'aria-label': eventSubject\n }\n });\n if (!isNullOrUndefined(this.cssClass)) {\n addClass([appointmentWrapper], this.cssClass);\n }\n var appointmentDetails = createElement('div', { className: cls.APPOINTMENT_DETAILS });\n appointmentWrapper.appendChild(appointmentDetails);\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n appointmentWrapper.setAttribute('data-group-index', resIndex.toString());\n }\n var templateElement;\n var eventData = record.data;\n if (!isNullOrUndefined(this.parent.activeViewOptions.eventTemplate)) {\n templateElement = this.parent.getAppointmentTemplate()(record);\n }\n else {\n var eventLocation = (record[this.fields.location] || this.parent.eventSettings.fields.location.default || '');\n var appointmentSubject = createElement('div', {\n className: cls.SUBJECT_CLASS,\n innerHTML: (eventSubject ? eventSubject + (eventLocation ? '; ' : '') : '') + (eventLocation ? eventLocation : '')\n });\n var appointmentStartTime = createElement('div', {\n className: cls.APPOINTMENT_TIME + (this.parent.isAdaptive ? ' ' + cls.DISABLE_CLASS : ''),\n innerHTML: this.parent.getTimeString(eventData[this.fields.startTime])\n });\n var appointmentEndTime = createElement('div', {\n className: cls.APPOINTMENT_TIME + (this.parent.isAdaptive ? ' ' + cls.DISABLE_CLASS : ''),\n innerHTML: this.parent.getTimeString(eventData[this.fields.endTime])\n });\n if (this.parent.currentView === 'Month') {\n if (record[this.fields.isAllDay]) {\n templateElement = [appointmentSubject];\n addClass([appointmentSubject], 'e-text-center');\n }\n else if (eventData.count <= 1 && !eventData.isLeft && !eventData.isRight) {\n templateElement = [appointmentStartTime, appointmentSubject];\n }\n else {\n templateElement = [];\n addClass([appointmentSubject], 'e-text-center');\n if (!eventData.isLeft) {\n templateElement.push(appointmentStartTime);\n }\n templateElement.push(appointmentSubject);\n if (!eventData.isRight) {\n templateElement.push(appointmentEndTime);\n }\n }\n }\n else {\n var innerElement = void 0;\n if (record[this.fields.isAllDay]) {\n var allDayString = createElement('div', { className: cls.SUBJECT_CLASS, innerHTML: 'All day' });\n innerElement = [appointmentSubject, allDayString];\n }\n else {\n var timeString = this.parent.getTimeString(eventData[this.fields.startTime])\n + ' - ' + this.parent.getTimeString(eventData[this.fields.endTime]);\n var appTime = createElement('div', {\n className: cls.APPOINTMENT_TIME + (this.parent.isAdaptive ? ' ' + cls.DISABLE_CLASS : ''), innerHTML: timeString,\n });\n var appLocation = createElement('div', {\n className: cls.LOCATION_CLASS, innerHTML: eventData[this.fields.location]\n });\n innerElement = [appointmentSubject, appTime, appLocation];\n }\n var wrap = createElement('div', { className: 'e-inner-wrap' });\n append(innerElement, wrap);\n templateElement = [wrap];\n }\n }\n append([].slice.call(templateElement), appointmentDetails);\n this.appendEventIcons(record, appointmentDetails);\n return appointmentWrapper;\n };\n MonthEvent.prototype.appendEventIcons = function (record, appointmentDetails) {\n var eventData = record.data;\n if (!isNullOrUndefined(record[this.fields.recurrenceRule])) {\n var iconClass = (record[this.fields.id] === record[this.fields.recurrenceID]) ?\n cls.EVENT_RECURRENCE_ICON_CLASS : cls.EVENT_RECURRENCE_EDIT_ICON_CLASS;\n appointmentDetails.appendChild(createElement('div', {\n className: cls.ICON + ' ' + iconClass + (this.parent.isAdaptive ? ' ' + cls.DISABLE_CLASS : '')\n }));\n }\n if (eventData.isLeft) {\n var iconLeft = createElement('div', {\n className: cls.EVENT_INDICATOR_CLASS + ' ' + cls.ICON + ' ' + cls.EVENT_ICON_LEFT_CLASS\n });\n prepend([iconLeft], appointmentDetails);\n }\n if (eventData.isRight) {\n var iconRight = createElement('div', {\n className: cls.EVENT_INDICATOR_CLASS + ' ' + cls.ICON + ' ' + cls.EVENT_ICON_RIGHT_CLASS\n });\n append([iconRight], appointmentDetails);\n }\n };\n MonthEvent.prototype.renderAppointmentMonth = function (event, resIndex) {\n var startTime = event[this.fields.startTime];\n var endTime = event[this.fields.endTime];\n var day = this.parent.getIndexOfDate(this.dateRender, util.resetTime(startTime));\n if (day < 0) {\n return;\n }\n var overlapCount = this.getIndex(event, startTime);\n event.Index = overlapCount;\n var moreIndicatorHeight = 19;\n var appHeight = this.eventHeight;\n this.renderedEvents.push(extend({}, event, null, true));\n var diffInDays = event.data.count;\n if (startTime.getTime() <= endTime.getTime()) {\n var appWidth = (diffInDays * this.cellWidth) - 1;\n var cellTd = this.workCells[day];\n var appTop = (overlapCount * (appHeight + EVENT_GAP));\n if (this.cellHeight > this.monthHeaderHeight + ((overlapCount + 1) * (appHeight + EVENT_GAP)) + moreIndicatorHeight) {\n var appointmentElement = this.createAppointmentElement(event, resIndex);\n this.applyResourceColor(appointmentElement, event, 'backgroundColor', this.groupOrder);\n this.wireAppointmentEvents(appointmentElement);\n setStyleAttribute(appointmentElement, { 'width': appWidth + 'px', 'top': appTop + 'px' });\n var args = { data: event, element: appointmentElement, cancel: false };\n this.parent.trigger(events.eventRendered, args);\n if (args.cancel) {\n this.renderedEvents.pop();\n return;\n }\n if (cellTd.querySelector('.' + cls.APPOINTMENT_WRAPPER_CLASS)) {\n cellTd.querySelector('.' + cls.APPOINTMENT_WRAPPER_CLASS).appendChild(appointmentElement);\n }\n else {\n var wrapper = createElement('div', { className: cls.APPOINTMENT_WRAPPER_CLASS });\n wrapper.appendChild(appointmentElement);\n cellTd.appendChild(wrapper);\n }\n }\n else {\n for (var i = 0; i < diffInDays; i++) {\n var cellTd_1 = this.workCells[day + i];\n if (cellTd_1 && isNullOrUndefined(cellTd_1.querySelector('.' + cls.MORE_INDICATOR_CLASS))) {\n var startDate = new Date(this.dateRender[day + i].getTime());\n var endDate = util.addDays(this.dateRender[day + i], 1);\n var groupIndex = cellTd_1.getAttribute('data-group-index');\n var filterEvents = this.getFilteredEvents(startDate, endDate, groupIndex);\n var appArea = this.cellHeight - this.monthHeaderHeight - moreIndicatorHeight;\n var renderedAppCount = Math.floor(appArea / (appHeight + EVENT_GAP));\n var count = (filterEvents.length - renderedAppCount) <= 0 ? 1 : (filterEvents.length - renderedAppCount);\n var moreIndicatorElement = createElement('div', {\n className: cls.MORE_INDICATOR_CLASS,\n innerHTML: '+' + count + ' ' + (this.parent.isAdaptive ? '' : this.parent.localeObj.getConstant('more')),\n attrs: {\n 'tabindex': '0',\n 'data-start-date': startDate.getTime().toString(),\n 'data-end-date': endDate.getTime().toString()\n }\n });\n if (!isNullOrUndefined(groupIndex)) {\n moreIndicatorElement.setAttribute('data-group-index', groupIndex);\n }\n moreIndicatorElement.style.top = appArea + 'px';\n moreIndicatorElement.style.width = cellTd_1.offsetWidth + 'px';\n if (cellTd_1.querySelector('.' + cls.APPOINTMENT_WRAPPER_CLASS)) {\n cellTd_1.querySelector('.' + cls.APPOINTMENT_WRAPPER_CLASS).appendChild(moreIndicatorElement);\n }\n else {\n var wrapper = createElement('div', { className: cls.APPOINTMENT_WRAPPER_CLASS });\n wrapper.appendChild(moreIndicatorElement);\n cellTd_1.appendChild(wrapper);\n }\n EventHandler.add(moreIndicatorElement, 'click', this.moreIndicatorClick, this);\n }\n }\n }\n }\n };\n MonthEvent.prototype.getFilteredEvents = function (startDate, endDate, groupIndex) {\n var filteredEvents;\n if (isNullOrUndefined(groupIndex)) {\n filteredEvents = this.filterEvents(startDate, endDate);\n }\n else {\n var data = this.parent.resourceBase.lastResourceLevel[parseInt(groupIndex, 10)];\n filteredEvents = this.filterEvents(startDate, endDate, undefined, data);\n }\n return filteredEvents;\n };\n MonthEvent.prototype.getIndex = function (record, date) {\n var appIndex = -1;\n var appointments = this.renderedEvents;\n if (appointments.length > 0) {\n var appointmentsList = [];\n for (var _i = 0, appointments_1 = appointments; _i < appointments_1.length; _i++) {\n var app = appointments_1[_i];\n if ((util.resetTime(app[this.fields.startTime]).getTime() <= util.resetTime(date).getTime()) &&\n (util.resetTime(app[this.fields.endTime]).getTime() >= util.resetTime(date).getTime())) {\n appointmentsList.push(app);\n }\n }\n var appLevel = appointmentsList.map(function (obj) { return obj.Index; });\n appIndex = (appLevel.length > 0) ? this.getSmallestMissingNumber(appLevel) : 0;\n }\n return (appIndex === -1) ? 0 : appIndex;\n };\n MonthEvent.prototype.moreIndicatorClick = function (event) {\n var target = closest(event.target, '.' + cls.MORE_INDICATOR_CLASS);\n var startDate = new Date(parseInt(target.getAttribute('data-start-date'), 10));\n if (!isNullOrUndefined(startDate) && this.parent.isAdaptive) {\n this.parent.setProperties({ selectedDate: startDate }, true);\n this.parent.changeView('Day');\n }\n else {\n var endDate = new Date(parseInt(target.getAttribute('data-end-date'), 10));\n var groupIndex = target.getAttribute('data-group-index');\n var filteredEvents = this.getFilteredEvents(startDate, endDate, groupIndex);\n var moreEventArgs = { date: startDate, event: filteredEvents, element: event.target };\n this.parent.quickPopup.moreEventClick(moreEventArgs, groupIndex);\n }\n };\n return MonthEvent;\n}(EventBase));\nexport { MonthEvent };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { compile, isNullOrUndefined, extend, EventHandler, formatUnit } from '@syncfusion/ej2-base';\nimport { createElement, remove, addClass, removeClass, append, prepend } from '@syncfusion/ej2-base';\nimport { WorkCellInteraction } from '../actions/work-cells';\nimport { ViewBase } from './view-base';\nimport { VerticalEvent } from '../event-renderer/vertical-view';\nimport { MonthEvent } from '../event-renderer/month';\nimport * as util from '../base/util';\nimport * as event from '../base/constant';\nimport * as cls from '../base/css-constant';\nvar DATE_HEADER_TEMPLATE = '
    ${getDayName(date)}
    ' +\n '
    ${getDate(date)}
    ';\nvar MAJOR_SLOT_TEMPLATE = '${getTime(date)}';\nvar MINOR_SLOT_TEMPLATE = ' ';\n/**\n * vertical view\n */\nvar VerticalView = /** @class */ (function (_super) {\n __extends(VerticalView, _super);\n /**\n * Constructor for vertical view\n */\n function VerticalView(parent) {\n var _this = _super.call(this, parent) || this;\n _this.currentDateIndex = [];\n _this.viewClass = 'e-day-view';\n _this.isInverseTableSelect = true;\n _this.workCellAction = new WorkCellInteraction(parent);\n return _this;\n }\n VerticalView.prototype.addEventListener = function () {\n this.parent.on(event.scrollUiUpdate, this.scrollUiUpdate, this);\n this.parent.on(event.dataReady, this.renderEvents, this);\n };\n VerticalView.prototype.removeEventListener = function () {\n this.parent.off(event.scrollUiUpdate, this.scrollUiUpdate);\n this.parent.off(event.dataReady, this.renderEvents);\n };\n VerticalView.prototype.renderEvents = function () {\n if (this.parent.activeViewOptions.timeScale.enable) {\n var appointment = new VerticalEvent(this.parent);\n appointment.renderAppointments();\n }\n else {\n var appointment = new MonthEvent(this.parent);\n appointment.renderAppointments();\n }\n };\n VerticalView.prototype.onContentScroll = function (e) {\n var target = e.target;\n if (this.parent.activeViewOptions.timeScale.enable) {\n this.getTimeCellsElement().scrollTop = target.scrollTop;\n }\n this.getDatesHeaderElement().firstChild.scrollLeft = target.scrollLeft;\n this.parent.uiStateValues.top = target.scrollTop;\n this.parent.uiStateValues.left = target.scrollLeft;\n this.parent.quickPopup.quickPopupHide();\n };\n VerticalView.prototype.scrollUiUpdate = function (args) {\n var headerBarHeight = 0;\n if (this.parent.headerModule) {\n headerBarHeight += this.parent.headerModule.getHeaderElement().offsetHeight;\n }\n if (this.parent.uiStateValues.isGroupAdaptive) {\n headerBarHeight += this.parent.element.querySelector('.' + cls.RESOURCE_HEADER_TOOLBAR).offsetHeight;\n }\n var timecells = this.getTimeCellsElement();\n var content = this.getScrollableElement();\n var header = this.getDatesHeaderElement();\n var scrollerHeight = formatUnit(this.parent.element.offsetHeight - headerBarHeight - header.offsetHeight - 2);\n if (this.parent.isAdaptive) {\n content.style.height = scrollerHeight;\n }\n else {\n if (this.parent.activeViewOptions.timeScale.enable) {\n timecells.style.height = scrollerHeight;\n }\n content.style.height = scrollerHeight;\n }\n var scrollBarWidth = util.getScrollBarWidth();\n // tslint:disable:no-any\n if (content.offsetWidth - content.clientWidth > 0) {\n header.firstChild.style[args.cssProperties.border] = scrollBarWidth > 0 ? '1px' : '0px';\n header.style[args.cssProperties.padding] = scrollBarWidth > 0 ? scrollBarWidth - 1 + 'px' : '0px';\n }\n else {\n header.firstChild.style[args.cssProperties.border] = '';\n header.style[args.cssProperties.padding] = '';\n }\n // tslint:enable:no-any\n if (this.parent.activeViewOptions.timeScale.enable) {\n timecells.style.paddingBottom = (content.offsetHeight - content.clientHeight > 0) ? formatUnit(scrollBarWidth) : '';\n }\n if (this.parent.uiStateValues.isInitial) {\n this.scrollToWorkHour();\n this.parent.uiStateValues.isInitial = false;\n }\n else {\n this.getScrollableElement().scrollTop = this.parent.uiStateValues.top;\n }\n };\n VerticalView.prototype.scrollToWorkHour = function () {\n if (this.parent.workHours.highlight) {\n var firstWorkHourCell = this.element.querySelector('.' + cls.WORK_HOURS_CLASS);\n if (firstWorkHourCell) {\n this.getScrollableElement().scrollTop = firstWorkHourCell.offsetTop;\n this.parent.uiStateValues.top = firstWorkHourCell.offsetTop;\n this.parent.uiStateValues.left = 0;\n }\n }\n };\n VerticalView.prototype.scrollToHour = function (hour) {\n var date = this.parent.globalize.parseDate(hour, { skeleton: 'Hm' });\n if (isNullOrUndefined(date)) {\n return;\n }\n this.getScrollableElement().scrollTop = this.getTopFromDateTime(date);\n };\n VerticalView.prototype.generateColumnLevels = function () {\n var level = this.getDateSlots(this.renderDates, this.parent.activeViewOptions.workDays);\n var columnLevels = [];\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n columnLevels = this.parent.resourceBase.generateResourceLevels(level);\n if (this.parent.uiStateValues.isGroupAdaptive) {\n var resourceLevel = this.parent.resourceBase.lastResourceLevel[this.parent.uiStateValues.groupIndex];\n var resStartHour = resourceLevel.resourceData[resourceLevel.resource.startHourField];\n var resEndHour = resourceLevel.resourceData[resourceLevel.resource.endHourField];\n var dateSlots = this.getDateSlots(resourceLevel.renderDates, resourceLevel.workDays, resStartHour, resEndHour);\n columnLevels = [dateSlots];\n }\n }\n else {\n columnLevels.push(level);\n }\n this.colLevels = columnLevels;\n return columnLevels;\n };\n VerticalView.prototype.getDateSlots = function (renderDates, workDays, workStartHour, workEndHour) {\n if (workStartHour === void 0) { workStartHour = this.parent.workHours.start; }\n if (workEndHour === void 0) { workEndHour = this.parent.workHours.end; }\n var dateCol = [];\n var start = this.parent.globalize.parseDate(workStartHour, { skeleton: 'Hm' });\n var end = this.parent.globalize.parseDate(workEndHour, { skeleton: 'Hm' });\n for (var _i = 0, renderDates_1 = renderDates; _i < renderDates_1.length; _i++) {\n var col = renderDates_1[_i];\n var classList = [cls.HEADER_CELLS_CLASS];\n if (this.isCurrentDate(col)) {\n classList.push(cls.CURRENT_DAY_CLASS);\n }\n dateCol.push({\n date: col, type: 'dateHeader', className: classList, colSpan: 1,\n workDays: workDays, startHour: new Date(+start), endHour: new Date(+end)\n });\n }\n return dateCol;\n };\n VerticalView.prototype.isWorkHourRange = function (date) {\n return (this.getStartHour().getTime() <= date.getTime()) && (this.getEndHour().getTime() >= date.getTime());\n };\n VerticalView.prototype.highlightCurrentTime = function () {\n var _this = this;\n if (this.parent.showTimeIndicator && this.isWorkHourRange(new Date())) {\n var flag = false;\n this.currentDateIndex = [];\n if (!isNullOrUndefined(this.parent.resourceBase) && (this.parent.activeViewOptions.group.resources.length > 0) &&\n !this.parent.uiStateValues.isGroupAdaptive) {\n var count = 0;\n for (var _i = 0, _a = this.parent.resourceBase.lastResourceLevel; _i < _a.length; _i++) {\n var resource = _a[_i];\n var index = this.parent.getIndexOfDate(resource.renderDates, util.resetTime(new Date()));\n if (index >= 0) {\n var resIndex = this.parent.activeViewOptions.group.byDate ?\n (this.parent.resourceBase.lastResourceLevel.length * index) + count : count + index;\n this.currentDateIndex.push(resIndex);\n flag = true;\n }\n count += this.parent.activeViewOptions.group.byDate ? 1 : resource.renderDates.length;\n }\n }\n else {\n var renderDates = (this.parent.uiStateValues.isGroupAdaptive) ?\n this.parent.resourceBase.lastResourceLevel[this.parent.uiStateValues.groupIndex].renderDates : this.renderDates;\n var index = this.parent.getIndexOfDate(renderDates, util.resetTime(new Date()));\n if (index >= 0) {\n this.currentDateIndex.push(index);\n flag = true;\n }\n }\n if (flag) {\n this.changeCurrentTimePosition();\n if (isNullOrUndefined(this.currentTimeIndicatorTimer)) {\n this.currentTimeIndicatorTimer = window.setInterval(function () { _this.changeCurrentTimePosition(); }, util.MS_PER_MINUTE);\n }\n }\n else {\n this.clearCurrentTimeIndicatorTimer();\n }\n }\n else {\n this.clearCurrentTimeIndicatorTimer();\n }\n };\n VerticalView.prototype.clearCurrentTimeIndicatorTimer = function () {\n if (!isNullOrUndefined(this.currentTimeIndicatorTimer)) {\n window.clearInterval(this.currentTimeIndicatorTimer);\n this.currentTimeIndicatorTimer = null;\n this.removeCurrentTimeIndicatorElements();\n }\n };\n VerticalView.prototype.removeCurrentTimeIndicatorElements = function () {\n var currentTimeEle = this.element.querySelector('.' + cls.CURRENT_TIME_CLASS);\n var timelineEle = this.element.querySelector('.' + cls.TIMELINE_WRAPPER_CLASS);\n if (currentTimeEle) {\n remove(currentTimeEle);\n }\n if (timelineEle) {\n remove(timelineEle);\n }\n };\n VerticalView.prototype.changeCurrentTimePosition = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeCurrentTimeIndicatorElements();\n var firstRow = this.parent.getContentTable().rows[0];\n var firstCell = firstRow.cells[0];\n var currentCell = firstRow.cells[this.currentDateIndex[0]];\n var cellWidth = 100 / firstRow.cells.length;\n var prevLineWidth = (cellWidth * (currentCell.cellIndex - firstCell.cellIndex)) + '%';\n var currentLineWidth = cellWidth + '%';\n var top = this.getTopFromDateTime(new Date());\n var topInPx = formatUnit(top);\n var timeCellsWrap = this.getTimeCellsElement();\n var rowIndex = Math.floor(top / firstCell.offsetHeight);\n if (isNullOrUndefined(rowIndex)) {\n return;\n }\n removeClass(timeCellsWrap.querySelectorAll('.' + cls.HIDE_CHILDS_CLASS), cls.HIDE_CHILDS_CLASS);\n addClass([timeCellsWrap.querySelectorAll('tr')[rowIndex].lastChild], cls.HIDE_CHILDS_CLASS);\n var timelineWrap = createElement('div', { className: cls.TIMELINE_WRAPPER_CLASS });\n var timelineEle = [];\n var previousDateTimelineEle = createElement('div', {\n className: cls.PREVIOUS_TIMELINE_CLASS,\n styles: 'width:' + formatUnit(prevLineWidth) + '; left: 0; right: 0; top:' + topInPx\n });\n timelineEle.push(previousDateTimelineEle);\n for (var _i = 0, _a = this.currentDateIndex; _i < _a.length; _i++) {\n var dateIndex = _a[_i];\n currentCell = firstRow.cells[dateIndex];\n prevLineWidth = (cellWidth * (currentCell.cellIndex - firstCell.cellIndex)) + '%';\n var currentDateTimelineEle = createElement('div', {\n className: cls.CURRENT_TIMELINE_CLASS,\n styles: 'width:' + currentLineWidth + '; ' +\n (this.parent.enableRtl ? 'right:' : 'left:') + prevLineWidth + ';top:' + topInPx\n });\n timelineEle.push(currentDateTimelineEle);\n }\n var currentTimeEle = createElement('div', {\n innerHTML: this.parent.getTimeString(new Date()),\n className: cls.CURRENT_TIME_CLASS,\n styles: 'width: 100%; position: absolute; left: 0; right: 0; top:' + topInPx\n });\n prepend([currentTimeEle], timeCellsWrap);\n currentTimeEle.style.top = formatUnit(currentTimeEle.offsetTop - (currentTimeEle.offsetHeight / 2));\n prepend(timelineEle, timelineWrap);\n prepend([timelineWrap], this.getContentAreaElement().querySelector('.' + cls.WRAPPER_CLASS));\n };\n VerticalView.prototype.getTopFromDateTime = function (date) {\n var startHour = this.getStartHour();\n var diffInMinutes = ((date.getHours() - startHour.getHours()) * 60) + (date.getMinutes() - startHour.getMinutes());\n return (diffInMinutes * this.getWorkCellHeight() * this.parent.activeViewOptions.timeScale.slotCount) /\n this.parent.activeViewOptions.timeScale.interval;\n };\n VerticalView.prototype.getWorkCellHeight = function () {\n return this.element.querySelector('.e-work-cells').offsetHeight;\n };\n VerticalView.prototype.getTdContent = function (date, type, groupIndex) {\n var cntEle;\n switch (type) {\n case 'dateHeader':\n if (this.parent.activeViewOptions.dateHeaderTemplate) {\n var args = { date: date, type: type };\n cntEle = this.parent.getDateHeaderTemplate()(args);\n }\n else {\n cntEle = compile(DATE_HEADER_TEMPLATE, this.customHelper)({ date: date });\n }\n break;\n case 'majorSlot':\n if (this.parent.activeViewOptions.timeScale.majorSlotTemplate) {\n var args = { date: date, type: type };\n cntEle = this.parent.getMajorSlotTemplate()(args);\n }\n else {\n cntEle = compile(MAJOR_SLOT_TEMPLATE, this.customHelper)({ date: date });\n }\n break;\n case 'minorSlot':\n if (this.parent.activeViewOptions.timeScale.minorSlotTemplate) {\n var args = { date: date, type: type };\n cntEle = this.parent.getMinorSlotTemplate()(args);\n }\n else {\n cntEle = compile(MINOR_SLOT_TEMPLATE, this.customHelper)({ date: date });\n }\n break;\n case 'alldayCells':\n if (this.parent.cellTemplate) {\n var args = { date: date, type: type, groupIndex: groupIndex };\n cntEle = this.parent.getCellTemplate()(args);\n }\n break;\n }\n return cntEle;\n };\n VerticalView.prototype.renderLayout = function (type) {\n this.setPanel(createElement('div', { className: cls.TABLE_WRAP_CLASS }));\n var clsList = ['e-vertical-view', this.viewClass];\n clsList.push(type);\n if (this.parent.activeViewOptions.group.byDate) {\n clsList.push('e-by-date');\n }\n if (!this.parent.activeViewOptions.timeScale.enable) {\n addClass([this.element], [cls.TIMESCALE_DISABLE, this.viewClass]);\n }\n this.renderPanel(type);\n addClass([this.element], clsList);\n this.element.appendChild(this.createTableLayout(cls.OUTER_TABLE_CLASS));\n this.colLevels = this.generateColumnLevels();\n this.renderHeader();\n this.renderContent();\n if (this.parent.activeViewOptions.timeScale.enable) {\n this.highlightCurrentTime();\n }\n if (this.parent.uiStateValues.isGroupAdaptive && !this.parent.element.querySelector('.' + cls.RESOURCE_TOOLBAR_CONTAINER)) {\n this.renderResourceMobileLayout();\n }\n this.parent.notify(event.contentReady, {});\n };\n VerticalView.prototype.renderHeader = function () {\n var tr = createElement('tr');\n var dateTd = createElement('td');\n dateTd.appendChild(this.renderDatesHeader());\n if (this.parent.activeViewOptions.timeScale.enable) {\n var indentTd = createElement('td', { className: cls.LEFT_INDENT_CLASS });\n indentTd.appendChild(this.renderLeftIndent());\n tr.appendChild(indentTd);\n }\n tr.appendChild(dateTd);\n prepend([tr], this.element.querySelector('tbody'));\n };\n VerticalView.prototype.renderContent = function () {\n var tr = createElement('tr');\n var workTd = createElement('td');\n if (this.parent.isAdaptive) {\n workTd.setAttribute('colspan', (this.parent.activeViewOptions.timeScale.enable ? '2' : '1'));\n var scrollContainer = createElement('div', { className: cls.SCROLL_CONTAINER_CLASS });\n if (this.parent.activeViewOptions.timeScale.enable) {\n scrollContainer.appendChild(this.renderTimeCells());\n }\n scrollContainer.appendChild(this.renderContentArea());\n workTd.appendChild(scrollContainer);\n tr.appendChild(workTd);\n }\n else {\n workTd.appendChild(this.renderContentArea());\n if (this.parent.activeViewOptions.timeScale.enable) {\n var timesTd = createElement('td');\n timesTd.appendChild(this.renderTimeCells());\n tr.appendChild(timesTd);\n }\n tr.appendChild(workTd);\n }\n this.element.querySelector('tbody').appendChild(tr);\n };\n VerticalView.prototype.renderLeftIndent = function () {\n var wrap = createElement('div', { className: cls.LEFT_INDENT_WRAP_CLASS });\n var tbl = this.createTableLayout();\n var trEle = createElement('tr');\n var rowCount = this.colLevels.length;\n for (var i = 0; i < rowCount; i++) {\n var ntr_1 = trEle.cloneNode();\n var data_1 = { className: [this.colLevels[i][0].className[0]], type: 'emptyCells' };\n ntr_1.appendChild(this.createTd(data_1));\n tbl.querySelector('tbody').appendChild(ntr_1);\n }\n var ntr = trEle.cloneNode();\n var appointmentExpandCollapse = createElement('div', {\n attrs: { 'tabindex': '0', title: 'Expand-all-day-section', 'aria-disabled': 'false', 'aria-label': 'Expand section' },\n className: cls.ALLDAY_APPOINTMENT_SECTION_CLASS + ' ' + cls.APPOINTMENT_ROW_EXPAND_CLASS + ' ' +\n cls.ICON + ' ' + cls.DISABLE_CLASS,\n });\n var data = { className: [cls.ALLDAY_CELLS_CLASS], type: 'emptyCells' };\n var nth = this.createTd(data);\n nth.appendChild(appointmentExpandCollapse);\n ntr.appendChild(nth);\n tbl.querySelector('tbody').appendChild(ntr);\n wrap.appendChild(tbl);\n return wrap;\n };\n VerticalView.prototype.renderDatesHeader = function () {\n var container = createElement('div', { className: cls.DATE_HEADER_CONTAINER_CLASS });\n var wrap = createElement('div', { className: cls.DATE_HEADER_WRAP_CLASS });\n container.appendChild(wrap);\n var tbl = this.createTableLayout();\n var trEle = createElement('tr');\n var rowCount = this.colLevels.length;\n var lastLevel = this.colLevels[rowCount - 1];\n var colGroupEle = createElement('colgroup');\n for (var i = 0; i < lastLevel.length; i++) {\n colGroupEle.appendChild(createElement('col'));\n }\n tbl.appendChild(colGroupEle);\n for (var i = 0; i < rowCount; i++) {\n var ntr_2 = trEle.cloneNode();\n addClass([ntr_2], cls.HEADER_ROW_CLASS);\n var level = this.colLevels[i];\n for (var j = 0; j < level.length; j++) {\n ntr_2.appendChild(this.createTd(level[j]));\n }\n tbl.querySelector('tbody').appendChild(ntr_2);\n }\n var ntr = trEle.cloneNode();\n addClass([ntr], cls.ALLDAY_ROW_CLASS);\n for (var j = 0; j < lastLevel.length; j++) {\n var td = extend({}, lastLevel[j]);\n td.className = [cls.ALLDAY_CELLS_CLASS];\n td.type = 'alldayCells';\n var ntd = this.createTd(td);\n ntd.setAttribute('data-date', td.date.getTime().toString());\n if (!isNullOrUndefined(td.groupIndex)) {\n ntd.setAttribute('data-group-index', '' + td.groupIndex);\n }\n this.wireCellEvents(ntd);\n ntr.appendChild(ntd);\n }\n tbl.querySelector('tbody').appendChild(ntr);\n prepend([this.createEventWrapper('allDay')], tbl);\n wrap.appendChild(tbl);\n return container;\n };\n VerticalView.prototype.createTd = function (td) {\n var tdEle = createElement('th');\n if (td.colSpan) {\n tdEle.setAttribute('colspan', td.colSpan.toString());\n }\n if (td.className) {\n addClass([tdEle], td.className);\n }\n if (td.date && td.type) {\n var ele = this.getTdContent(td.date, td.type, td.groupIndex);\n if (ele && ele.length) {\n append([].slice.call(ele), tdEle);\n }\n }\n if (td.type === 'resourceHeader') {\n this.setResourceHeaderContent(tdEle, td);\n }\n if (td.type === 'dateHeader' && td.className.indexOf(cls.HEADER_CELLS_CLASS) >= 0) {\n tdEle.setAttribute('data-date', td.date.getTime().toString());\n if (!isNullOrUndefined(td.groupIndex)) {\n tdEle.setAttribute('data-group-index', '' + td.groupIndex);\n }\n EventHandler.add(tdEle, 'click', this.workCellAction.cellClick, this);\n EventHandler.add(tdEle, 'dblclick', this.workCellAction.cellDblClick, this);\n }\n var args = { elementType: td.type, element: tdEle, date: td.date, groupIndex: td.groupIndex };\n this.parent.trigger(event.renderCell, args);\n return tdEle;\n };\n VerticalView.prototype.wireCellEvents = function (element) {\n EventHandler.add(element, 'mousedown', this.workCellAction.cellMouseDown, this);\n EventHandler.add(element, 'click', this.workCellAction.cellClick, this);\n EventHandler.add(element, 'dblclick', this.workCellAction.cellDblClick, this);\n };\n VerticalView.prototype.renderTimeCells = function () {\n var _this = this;\n var wrap = createElement('div', { className: cls.TIME_CELLS_WRAP_CLASS });\n var tbl = this.createTableLayout();\n var trEle = createElement('tr');\n var handler = function (r) {\n r.type = r.first ? 'majorSlot' : 'minorSlot';\n r.className = r.last ? [cls.TIME_CELLS_CLASS] : [];\n var ntr = trEle.cloneNode();\n var data = { date: r.date, type: r.type, className: r.className };\n ntr.appendChild(_this.createTd(data));\n tbl.querySelector('tbody').appendChild(ntr);\n return r;\n };\n this.getTimeSlotRows(handler);\n wrap.appendChild(tbl);\n return wrap;\n };\n VerticalView.prototype.renderContentArea = function () {\n var _this = this;\n var wrap = createElement('div', { className: cls.CONTENT_WRAP_CLASS });\n var innerWrap = createElement('div', { className: cls.WRAPPER_CLASS });\n wrap.appendChild(innerWrap);\n var tbl = this.createTableLayout(cls.CONTENT_TABLE_CLASS);\n var tr = createElement('tr', { attrs: { role: 'row' } });\n var td = createElement('td', { attrs: { role: 'gridcell', 'aria-selected': 'false' } });\n var tbody = tbl.querySelector('tbody');\n var colGroupEle = createElement('colgroup');\n for (var _i = 0, _a = this.colLevels.slice(-1)[0]; _i < _a.length; _i++) {\n var col = _a[_i];\n colGroupEle.appendChild(createElement('col'));\n }\n tbl.appendChild(colGroupEle);\n var handler = function (r) {\n var ntr = tr.cloneNode();\n for (var _i = 0, _a = _this.colLevels[_this.colLevels.length - 1]; _i < _a.length; _i++) {\n var tdData = _a[_i];\n var ntd = td.cloneNode();\n var clsName = r.last ? [cls.WORK_CELLS_CLASS] : [cls.WORK_CELLS_CLASS, cls.ALTERNATE_CELLS_CLASS];\n var cellDate = util.resetTime(new Date('' + tdData.date));\n util.setTime(cellDate, util.getDateInMs(r.date));\n if (_this.parent.workHours.highlight && ((_this.parent.activeViewOptions.timeScale.enable &&\n _this.isWorkHour(cellDate, tdData.startHour, tdData.endHour, tdData.workDays)) ||\n (!_this.parent.activeViewOptions.timeScale.enable && _this.isWorkDay(cellDate, tdData.workDays)))) {\n clsName.push(cls.WORK_HOURS_CLASS);\n }\n addClass([ntd], clsName);\n if (_this.parent.cellTemplate) {\n var args_1 = { date: cellDate, type: 'workCells', groupIndex: tdData.groupIndex };\n append([].slice.call(_this.parent.getCellTemplate()(args_1)), ntd);\n }\n ntd.setAttribute('data-date', cellDate.getTime().toString());\n if (!isNullOrUndefined(tdData.groupIndex) || _this.parent.uiStateValues.isGroupAdaptive) {\n var groupIndex = _this.parent.uiStateValues.isGroupAdaptive ? _this.parent.uiStateValues.groupIndex :\n tdData.groupIndex;\n ntd.setAttribute('data-group-index', '' + groupIndex);\n }\n _this.wireCellEvents(ntd);\n var args = { elementType: 'workCells', element: ntd, date: cellDate, groupIndex: tdData.groupIndex };\n _this.parent.trigger(event.renderCell, args);\n ntr.appendChild(ntd);\n }\n tbody.appendChild(ntr);\n return r;\n };\n this.getTimeSlotRows(handler);\n prepend([this.createEventWrapper()], tbl);\n wrap.appendChild(tbl);\n EventHandler.add(wrap, 'scroll', this.onContentScroll, this);\n return wrap;\n };\n VerticalView.prototype.createEventWrapper = function (type) {\n if (type === void 0) { type = ''; }\n var thead = createElement('thead');\n var tr = createElement('tr', { attrs: { role: 'row' } });\n this.colLevels.slice(-1)[0].forEach(function (col, day) {\n var appointmentWrap = createElement('td', {\n className: (type === 'allDay') ? cls.ALLDAY_APPOINTMENT_WRAPPER_CLASS : cls.DAY_WRAPPER_CLASS,\n attrs: { role: 'gridcell', 'aria-selected': 'false' }\n });\n if (type !== 'allDay') {\n var innerWrapper = createElement('div', {\n id: cls.APPOINTMENT_WRAPPER_CLASS + '-' + day.toString(),\n className: cls.APPOINTMENT_WRAPPER_CLASS\n });\n appointmentWrap.appendChild(innerWrapper);\n }\n tr.appendChild(appointmentWrap);\n });\n thead.appendChild(tr);\n return thead;\n };\n VerticalView.prototype.getScrollableElement = function () {\n if (this.parent.isAdaptive) {\n return this.element.querySelector('.' + cls.SCROLL_CONTAINER_CLASS);\n }\n else {\n return this.getContentAreaElement();\n }\n };\n VerticalView.prototype.getDatesHeaderElement = function () {\n return this.element.querySelector('.' + cls.DATE_HEADER_CONTAINER_CLASS);\n };\n VerticalView.prototype.getTimeCellsElement = function () {\n return this.element.querySelector('.' + cls.TIME_CELLS_WRAP_CLASS);\n };\n VerticalView.prototype.getContentAreaElement = function () {\n return this.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);\n };\n VerticalView.prototype.getEndDateFromStartDate = function (start) {\n var msMajorInterval = this.parent.activeViewOptions.timeScale.interval * util.MS_PER_MINUTE;\n var msInterval = msMajorInterval / this.parent.activeViewOptions.timeScale.slotCount;\n var end = new Date(start.getTime());\n end.setMilliseconds(end.getMilliseconds() + msInterval);\n return end;\n };\n VerticalView.prototype.adjustEventWrapper = function () {\n var tblWidth = this.element.querySelector('.' + cls.CONTENT_TABLE_CLASS).offsetWidth;\n this.element.querySelector('.' + cls.WRAPPER_CLASS).style.width = tblWidth + 'px';\n this.element.querySelector('.' + cls.ALLDAY_APPOINTMENT_WRAPPER_CLASS).style.width = tblWidth + 'px';\n };\n VerticalView.prototype.getTimeSlotRows = function (handler) {\n var rows = [];\n var startHour = this.getStartHour();\n var endHour = this.getEndHour();\n var msMajorInterval = this.parent.activeViewOptions.timeScale.interval * util.MS_PER_MINUTE;\n var msInterval = msMajorInterval / this.parent.activeViewOptions.timeScale.slotCount;\n var length = Math.round(util.MS_PER_DAY / msInterval);\n var msStartHour = startHour.getTime();\n var msEndHour = endHour.getTime();\n if (msStartHour !== msEndHour) {\n length = Math.round((msEndHour - msStartHour) / msInterval);\n }\n if (!this.parent.activeViewOptions.timeScale.enable) {\n length = 1;\n }\n var dt = new Date(msStartHour);\n for (var i = 0; i < length; i++) {\n var majorTickDivider = i % (msMajorInterval / msInterval);\n var row = {\n date: new Date('' + dt),\n first: (majorTickDivider === 0),\n middle: (majorTickDivider < this.parent.activeViewOptions.timeScale.slotCount - 1),\n last: (majorTickDivider === this.parent.activeViewOptions.timeScale.slotCount - 1),\n type: ''\n };\n if (handler) {\n handler(row);\n }\n rows.push(row);\n dt.setMilliseconds(msInterval);\n }\n return rows;\n };\n /**\n * Get module name.\n */\n VerticalView.prototype.getModuleName = function () {\n return 'verticalView';\n };\n /**\n * To destroy the vertical view.\n * @return {void}\n * @private\n */\n VerticalView.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.clearCurrentTimeIndicatorTimer();\n if (this.element) {\n EventHandler.remove(this.getContentAreaElement(), 'scroll', this.onContentScroll);\n if (this.parent.resourceBase) {\n this.parent.resourceBase.destroy();\n }\n remove(this.element);\n this.element = null;\n if (this.parent.scheduleTouchModule) {\n this.parent.scheduleTouchModule.resetValues();\n }\n }\n };\n return VerticalView;\n}(ViewBase));\nexport { VerticalView };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { VerticalView } from './vertical-view';\nimport * as util from '../base/util';\n/**\n * day view\n */\nvar Day = /** @class */ (function (_super) {\n __extends(Day, _super);\n /**\n * Constructor for day view\n */\n function Day(parent) {\n var _this = _super.call(this, parent) || this;\n _this.viewClass = 'e-day-view';\n return _this;\n }\n Day.prototype.getNextPreviousDate = function (type) {\n var daysCount = (type === 'next') ? this.parent.activeViewOptions.interval : -(this.parent.activeViewOptions.interval);\n if (this.parent.activeViewOptions.showWeekend) {\n return util.addDays(this.parent.selectedDate, daysCount);\n }\n else {\n var date = util.addDays(this.parent.selectedDate, daysCount);\n while (!this.isWorkDay(date)) {\n date = util.addDays(date, daysCount);\n }\n return date;\n }\n };\n Day.prototype.getDateRangeText = function () {\n if (this.parent.isAdaptive) {\n return this.parent.globalize.formatDate(this.parent.selectedDate, { format: 'MMMM y' });\n }\n if (this.parent.activeViewOptions.interval > 1) {\n return this.formatDateRange(this.renderDates[0], this.renderDates[this.renderDates.length - 1]);\n }\n return this.formatDateRange(this.parent.selectedDate);\n };\n /**\n * Get module name.\n */\n Day.prototype.getModuleName = function () {\n return 'day';\n };\n return Day;\n}(VerticalView));\nexport { Day };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { VerticalView } from './vertical-view';\nimport * as util from '../base/util';\n/**\n * week view\n */\nvar Week = /** @class */ (function (_super) {\n __extends(Week, _super);\n /**\n * Constructor for week view\n */\n function Week(parent) {\n var _this = _super.call(this, parent) || this;\n _this.viewClass = 'e-week-view';\n return _this;\n }\n Week.prototype.getRenderDates = function (workDays) {\n var renderDates = [];\n var selectedDate = util.resetTime(this.parent.selectedDate);\n var start = util.getWeekFirstDate(selectedDate, this.parent.firstDayOfWeek);\n for (var i = 0, length_1 = util.WEEK_LENGTH * this.parent.activeViewOptions.interval; i < length_1; i++) {\n if (this.parent.activeViewOptions.showWeekend) {\n renderDates.push(start);\n }\n else {\n if (this.isWorkDay(start, workDays)) {\n renderDates.push(start);\n }\n }\n start = util.addDays(start, 1);\n }\n if (!workDays) {\n this.renderDates = renderDates;\n }\n return renderDates;\n };\n /**\n * Get module name.\n */\n Week.prototype.getModuleName = function () {\n return 'week';\n };\n return Week;\n}(VerticalView));\nexport { Week };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { VerticalView } from './vertical-view';\nimport * as util from '../base/util';\n/**\n * work week view\n */\nvar WorkWeek = /** @class */ (function (_super) {\n __extends(WorkWeek, _super);\n /**\n * Constructor for work week view\n */\n function WorkWeek(par) {\n var _this = _super.call(this, par) || this;\n _this.viewClass = 'e-work-week-view';\n return _this;\n }\n WorkWeek.prototype.getRenderDates = function (workDays) {\n var renderDates = [];\n var start = util.getWeekFirstDate(util.resetTime(this.parent.selectedDate), this.parent.firstDayOfWeek);\n for (var i = 0, length_1 = util.WEEK_LENGTH * this.parent.activeViewOptions.interval; i < length_1; i++) {\n if (this.isWorkDay(start, workDays)) {\n renderDates.push(start);\n }\n start = util.addDays(start, 1);\n }\n if (!workDays) {\n this.renderDates = renderDates;\n }\n return renderDates;\n };\n /**\n * Get module name.\n */\n WorkWeek.prototype.getModuleName = function () {\n return 'workWeek';\n };\n return WorkWeek;\n}(VerticalView));\nexport { WorkWeek };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { EventHandler, formatUnit, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { createElement, remove, addClass, append, prepend } from '@syncfusion/ej2-base';\nimport { WorkCellInteraction } from '../actions/work-cells';\nimport { ViewBase } from './view-base';\nimport * as util from '../base/util';\nimport * as event from '../base/constant';\nimport * as cls from '../base/css-constant';\nimport { MonthEvent } from '../event-renderer/month';\n/**\n * month view\n */\nvar Month = /** @class */ (function (_super) {\n __extends(Month, _super);\n /**\n * Constructor for month view\n */\n function Month(parent) {\n var _this = _super.call(this, parent) || this;\n _this.dayNameFormat = 'wide';\n _this.viewClass = 'e-month-view';\n _this.isInverseTableSelect = false;\n _this.monthDates = {};\n _this.workCellAction = new WorkCellInteraction(parent);\n return _this;\n }\n Month.prototype.addEventListener = function () {\n this.parent.on(event.scrollUiUpdate, this.onScrollUiUpdate, this);\n this.parent.on(event.dataReady, this.onDataReady, this);\n this.parent.on(event.cellClick, this.onCellClick, this);\n };\n Month.prototype.removeEventListener = function () {\n this.parent.off(event.scrollUiUpdate, this.onScrollUiUpdate);\n this.parent.off(event.dataReady, this.onDataReady);\n this.parent.off(event.cellClick, this.onCellClick);\n };\n Month.prototype.onDataReady = function (args) {\n var monthEvent = new MonthEvent(this.parent);\n monthEvent.renderAppointments();\n };\n Month.prototype.onCellClick = function (event) {\n // Here cell click\n };\n Month.prototype.onContentScroll = function (e) {\n this.getDatesHeaderElement().firstChild.scrollLeft = e.target.scrollLeft;\n };\n Month.prototype.onScrollUiUpdate = function (args) {\n var headerHeight = 0;\n if (this.parent.headerModule) {\n headerHeight += this.parent.headerModule.getHeaderElement().offsetHeight;\n }\n if (this.parent.uiStateValues.isGroupAdaptive && this.parent.currentView !== 'MonthAgenda') {\n headerHeight += this.parent.element.querySelector('.' + cls.RESOURCE_HEADER_TOOLBAR).offsetHeight;\n }\n var header = this.getDatesHeaderElement();\n var content = this.getContentAreaElement();\n content.style.height = 'auto';\n content.style.height = formatUnit(this.parent.element.offsetHeight - headerHeight - header.offsetHeight - 2);\n // tslint:disable:no-any\n if (content.offsetWidth - content.clientWidth > 0) {\n var scrollBarWidth = util.getScrollBarWidth();\n header.firstChild.style[args.cssProperties.border] = scrollBarWidth > 0 ? '1px' : '0px';\n header.style[args.cssProperties.padding] = scrollBarWidth > 0 ? scrollBarWidth - 1 + 'px' : '0px';\n }\n else {\n header.firstChild.style[args.cssProperties.border] = '';\n header.style[args.cssProperties.padding] = '';\n }\n // tslint:enable:no-any\n };\n Month.prototype.generateColumnLevels = function () {\n var colLevels = [];\n var level = this.getDateSlots(this.renderDates, this.parent.activeViewOptions.workDays);\n if (this.parent.activeViewOptions.group.resources.length > 0) {\n colLevels = this.parent.resourceBase.generateResourceLevels(level);\n if (this.parent.currentView === 'MonthAgenda') {\n colLevels = [level];\n }\n if (this.parent.uiStateValues.isGroupAdaptive) {\n var resourceLevel = this.parent.resourceBase.lastResourceLevel[this.parent.uiStateValues.groupIndex];\n colLevels = [this.getDateSlots(resourceLevel.renderDates, resourceLevel.workDays)];\n }\n }\n else {\n colLevels.push(level);\n }\n this.colLevels = colLevels;\n return colLevels;\n };\n Month.prototype.getDateSlots = function (renderDates, workDays) {\n var count = this.parent.activeViewOptions.showWeekend ? util.WEEK_LENGTH : workDays.length;\n var dateSlots = [];\n for (var col = 0; col < count; col++) {\n var classList = [cls.HEADER_CELLS_CLASS];\n if (this.isCurrentMonth(this.parent.selectedDate) && new Date().getDay() === col) {\n classList.push(cls.CURRENT_DAY_CLASS);\n }\n dateSlots.push({\n date: this.renderDates[col], type: 'monthHeader', className: classList,\n colSpan: 1, workDays: workDays\n });\n }\n return dateSlots;\n };\n Month.prototype.getDayNameFormat = function () {\n if (this.parent.isAdaptive || this.parent.activeViewOptions.group.resources.length > 0) {\n return 'abbreviated';\n }\n return 'wide';\n };\n Month.prototype.renderLayout = function (type) {\n this.dayNameFormat = this.getDayNameFormat();\n this.setPanel(createElement('div', { className: cls.TABLE_WRAP_CLASS }));\n var clsList = [this.viewClass];\n clsList.push(type);\n if (this.parent.activeViewOptions.group.byDate) {\n clsList.push('e-by-date');\n }\n addClass([this.element], clsList);\n this.renderPanel(type);\n this.element.appendChild(this.createTableLayout(cls.OUTER_TABLE_CLASS));\n this.colLevels = this.generateColumnLevels();\n this.renderHeader();\n this.renderContent();\n var target = (this.parent.currentView === 'MonthAgenda') ? this.parent.activeView.getPanel() : this.parent.element;\n if (this.parent.uiStateValues.isGroupAdaptive && !target.querySelector('.' + cls.RESOURCE_TOOLBAR_CONTAINER)) {\n this.renderResourceMobileLayout();\n }\n this.parent.notify(event.contentReady, {});\n };\n Month.prototype.wireCellEvents = function (element) {\n EventHandler.add(element, 'mousedown', this.workCellAction.cellMouseDown, this);\n EventHandler.add(element, 'click', this.workCellAction.cellClick, this);\n EventHandler.add(element, 'dblclick', this.workCellAction.cellDblClick, this);\n };\n Month.prototype.renderHeader = function () {\n var tr = createElement('tr');\n var dateTd = createElement('td');\n dateTd.appendChild(this.renderDatesHeader());\n tr.appendChild(dateTd);\n prepend([tr], this.element.querySelector('tbody'));\n };\n Month.prototype.renderContent = function () {\n var tr = createElement('tr');\n var workTd = createElement('td');\n workTd.appendChild(this.renderContentArea());\n tr.appendChild(workTd);\n this.element.querySelector('tbody').appendChild(tr);\n this.renderAppointmentContainer();\n };\n Month.prototype.renderAppointmentContainer = function () {\n //Here needs to render mobile view appointment details on selected date\n };\n Month.prototype.renderDatesHeader = function () {\n var container = createElement('div', { className: cls.DATE_HEADER_CONTAINER_CLASS });\n var wrap = createElement('div', { className: cls.DATE_HEADER_WRAP_CLASS });\n container.appendChild(wrap);\n var table = this.createTableLayout();\n var trEle = createElement('tr');\n var colGroupEle = createElement('colgroup');\n for (var i = 0; i < this.colLevels[this.colLevels.length - 1].length; i++) {\n colGroupEle.appendChild(createElement('col'));\n }\n table.appendChild(colGroupEle);\n for (var i = 0; i < this.colLevels.length; i++) {\n var level = this.colLevels[i];\n var ntr = trEle.cloneNode();\n for (var j = 0; j < level.length; j++) {\n var td = level[j];\n ntr.appendChild(this.createHeaderCell(td));\n }\n table.querySelector('tbody').appendChild(ntr);\n }\n wrap.appendChild(table);\n return container;\n };\n Month.prototype.createHeaderCell = function (td) {\n var tdEle = createElement('th');\n if (td.colSpan) {\n tdEle.setAttribute('colspan', td.colSpan.toString());\n }\n if (td.className) {\n addClass([tdEle], td.className);\n }\n if (td.type === 'monthHeader') {\n var ele = createElement('span', { innerHTML: this.parent.getDayNames(this.dayNameFormat)[td.date.getDay()] });\n tdEle.appendChild(ele);\n }\n if (td.type === 'resourceHeader') {\n this.setResourceHeaderContent(tdEle, td);\n }\n var args = { elementType: td.type, element: tdEle, date: td.date, groupIndex: td.groupIndex };\n this.parent.trigger(event.renderCell, args);\n return tdEle;\n };\n Month.prototype.isOtherMonth = function (date) {\n return date.getTime() < this.monthDates.start.getTime() || date.getTime() > this.monthDates.end.getTime();\n };\n Month.prototype.renderContentArea = function () {\n var wrap = createElement('div', { className: cls.CONTENT_WRAP_CLASS });\n var tbl = this.createTableLayout(cls.CONTENT_TABLE_CLASS);\n var tbody = tbl.querySelector('tbody');\n var tr = createElement('tr', { attrs: { role: 'row' } });\n var td = createElement('td', { attrs: { role: 'gridcell', 'aria-selected': 'false' } });\n var monthDate = new Date(this.parent.selectedDate.getTime());\n this.monthDates = {\n start: util.firstDateOfMonth(monthDate),\n end: util.lastDateOfMonth(util.addMonths(monthDate, this.parent.activeViewOptions.interval - 1))\n };\n var slotDatas = [];\n var prepareSlots = function (rowIndex, renderDate, resData, classList) {\n var data = {\n date: new Date(+renderDate), groupIndex: resData.groupIndex, workDays: resData.workDays,\n type: 'monthCells', className: classList || [cls.WORK_CELLS_CLASS]\n };\n if (!slotDatas[rowIndex]) {\n slotDatas[rowIndex] = [];\n }\n slotDatas[rowIndex].push(data);\n };\n var includeResource = this.parent.currentView !== 'MonthAgenda' &&\n this.parent.activeViewOptions.group.resources.length > 0;\n if (includeResource && !this.parent.uiStateValues.isGroupAdaptive && !this.parent.activeViewOptions.group.byDate) {\n for (var _i = 0, _a = this.colLevels[this.colLevels.length - 2]; _i < _a.length; _i++) {\n var res = _a[_i];\n var dates = res.renderDates.map(function (date) { return new Date(+date); });\n var count = this.parent.activeViewOptions.showWeekend ? util.WEEK_LENGTH : res.workDays.length;\n for (var i = 0; i < (res.renderDates.length / count); i++) {\n var colDates = dates.splice(0, count);\n for (var _b = 0, colDates_1 = colDates; _b < colDates_1.length; _b++) {\n var colDate = colDates_1[_b];\n prepareSlots(i, colDate, res);\n }\n }\n }\n }\n else {\n var dates = this.renderDates.map(function (date) { return new Date(+date); });\n var count = this.parent.activeViewOptions.showWeekend ? util.WEEK_LENGTH :\n this.parent.activeViewOptions.workDays.length;\n for (var i = 0; i < (this.renderDates.length / count); i++) {\n var colDates = dates.splice(0, count);\n for (var _c = 0, colDates_2 = colDates; _c < colDates_2.length; _c++) {\n var colDate = colDates_2[_c];\n if (includeResource) {\n var lastRow = this.colLevels[(this.colLevels.length - 1)];\n var resourcesTd = lastRow.slice(0, lastRow.length / count);\n for (var resIndex = 0; resIndex < resourcesTd.length; resIndex++) {\n var clsList = void 0;\n if (resIndex !== 0) {\n clsList = [cls.WORK_CELLS_CLASS, cls.DISABLE_DATE];\n }\n prepareSlots(i, colDate, resourcesTd[resIndex], clsList);\n }\n }\n else {\n prepareSlots(i, colDate, this.colLevels[this.colLevels.length - 1][0]);\n }\n }\n }\n }\n for (var row = 0; row < slotDatas.length; row++) {\n var ntr = tr.cloneNode();\n for (var col = 0; col < slotDatas[row].length; col++) {\n var data = slotDatas[row][col];\n var ntd = td.cloneNode();\n if (this.isOtherMonth(data.date)) {\n data.className.push(cls.OTHERMONTH_CLASS);\n }\n if (this.parent.workHours.highlight && this.isWorkDay(data.date, data.workDays)) {\n data.className.push(cls.WORKDAY_CLASS);\n }\n if (this.isCurrentDate(data.date)) {\n data.className.push(cls.CURRENTDATE_CLASS);\n }\n if (this.parent.currentView === 'MonthAgenda' && this.parent.isSelectedDate(data.date)) {\n data.className.push(cls.SELECTED_CELL_CLASS);\n }\n addClass([ntd], data.className);\n ntd.setAttribute('data-date', data.date.getTime().toString());\n if (!isNullOrUndefined(data.groupIndex) || this.parent.uiStateValues.isGroupAdaptive) {\n var groupIndex = this.parent.uiStateValues.isGroupAdaptive ? this.parent.uiStateValues.groupIndex :\n data.groupIndex;\n ntd.setAttribute('data-group-index', '' + groupIndex);\n }\n this.renderDateHeaderElement(data, ntd);\n if (this.parent.cellTemplate) {\n var args_1 = { date: data.date, type: data.type, groupIndex: data.groupIndex };\n append([].slice.call(this.parent.getCellTemplate()(args_1)), ntd);\n }\n this.wireCellEvents(ntd);\n var args = { elementType: data.type, element: ntd, date: data.date, groupIndex: data.groupIndex };\n this.parent.trigger(event.renderCell, args);\n ntr.appendChild(ntd);\n }\n tbody.appendChild(ntr);\n }\n wrap.appendChild(tbl);\n EventHandler.add(wrap, 'scroll', this.onContentScroll, this);\n return wrap;\n };\n Month.prototype.getDatesHeaderElement = function () {\n return this.element.querySelector('.' + cls.DATE_HEADER_CONTAINER_CLASS);\n };\n Month.prototype.getContentAreaElement = function () {\n return this.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);\n };\n Month.prototype.renderDateHeaderElement = function (data, ntd) {\n var dateHeader = createElement('div', { className: cls.DATE_HEADER_CLASS });\n dateHeader.innerHTML = (data.date.getDate() === 1 && !this.isCurrentDate(data.date) && !this.parent.isAdaptive) ?\n this.parent.globalize.formatDate(data.date, { format: 'MMM d' }) :\n this.parent.globalize.formatDate(data.date, { skeleton: 'd' });\n ntd.appendChild(dateHeader);\n if (this.getModuleName() === 'month') {\n addClass([dateHeader], cls.NAVIGATE_CLASS);\n }\n };\n Month.prototype.getRenderDates = function (workDays) {\n var renderDates = [];\n var currentDate = util.resetTime(this.parent.selectedDate);\n var monthStart = util.getWeekFirstDate(util.firstDateOfMonth(currentDate), this.parent.firstDayOfWeek);\n var endDate = util.addMonths(currentDate, this.parent.activeViewOptions.interval - 1);\n var lastWeekOfMonth = util.getWeekFirstDate(util.lastDateOfMonth(endDate), this.parent.firstDayOfWeek);\n var monthEnd = util.addDays(lastWeekOfMonth, util.WEEK_LENGTH - 1);\n var start = new Date(monthStart.getFullYear(), monthStart.getMonth(), monthStart.getDate());\n do {\n if (this.parent.activeViewOptions.showWeekend) {\n renderDates.push(start);\n }\n else {\n if (this.isWorkDay(start, workDays)) {\n renderDates.push(start);\n }\n }\n start = util.addDays(start, 1);\n } while (start.getTime() <= monthEnd.getTime());\n if (!workDays) {\n this.renderDates = renderDates;\n }\n return renderDates;\n };\n Month.prototype.getNextPreviousDate = function (type) {\n if (type === 'next') {\n return util.addMonths(this.parent.selectedDate, this.parent.activeViewOptions.interval);\n }\n else {\n return util.addMonths(this.parent.selectedDate, -(this.parent.activeViewOptions.interval));\n }\n };\n Month.prototype.getEndDateFromStartDate = function (start) {\n return util.addDays(new Date(start.getTime()), 1);\n };\n Month.prototype.getDateRangeText = function () {\n if (this.parent.isAdaptive || isNullOrUndefined(this.parent.activeViewOptions.dateFormat)) {\n if (this.parent.activeViewOptions.interval > 1) {\n var endDate = util.addMonths(util.lastDateOfMonth(this.parent.selectedDate), this.parent.activeViewOptions.interval - 1);\n if (this.parent.selectedDate.getFullYear() === endDate.getFullYear()) {\n var monthNames = (this.parent.globalize.formatDate(this.parent.selectedDate, { format: 'MMMM' }))\n + ' - ' + (this.parent.globalize.formatDate(endDate, { format: 'MMMM ' })) + endDate.getFullYear();\n return monthNames;\n }\n return (this.parent.globalize.formatDate(this.parent.selectedDate, { format: 'MMMM' })) + ' ' +\n this.parent.selectedDate.getFullYear() + ' - ' + (this.parent.globalize.formatDate(endDate, { format: 'MMMM ' })) +\n endDate.getFullYear();\n }\n return this.parent.globalize.formatDate(this.parent.selectedDate, { format: 'MMMM y' });\n }\n return this.formatDateRange(this.parent.selectedDate);\n };\n Month.prototype.getLabelText = function (view) {\n return this.parent.localeObj.getConstant(view) + ' of ' +\n this.parent.globalize.formatDate(this.parent.selectedDate, { format: 'MMMM y' });\n };\n /**\n * Get module name.\n */\n Month.prototype.getModuleName = function () {\n return 'month';\n };\n /**\n * To destroy the month.\n * @return {void}\n * @private\n */\n Month.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n if (this.element) {\n if (this.parent.resourceBase) {\n this.parent.resourceBase.destroy();\n }\n remove(this.element);\n this.element = null;\n if (this.parent.scheduleTouchModule) {\n this.parent.scheduleTouchModule.resetValues();\n }\n }\n };\n return Month;\n}(ViewBase));\nexport { Month };\n","import { isNullOrUndefined, addClass, createElement, append, EventHandler, extend, remove } from '@syncfusion/ej2-base';\nimport { ListBase } from '@syncfusion/ej2-lists';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { ViewBase } from '../renderer/view-base';\nimport * as util from '../base/util';\nimport * as cls from '../base/css-constant';\nimport * as event from '../base/constant';\nvar AgendaBase = /** @class */ (function () {\n /**\n * Constructor for AgendaBase\n */\n function AgendaBase(parent) {\n this.parent = parent;\n this.viewBase = new ViewBase(parent);\n }\n AgendaBase.prototype.createAgendaContentElement = function (type, listData, aTd, groupOrder, groupIndex) {\n var listElement;\n if (type === 'noEvents') {\n var noEvents = [{ 'subject': this.parent.localeObj.getConstant('noEvents') }];\n listElement = ListBase.createList(noEvents, {\n moduleName: 'agenda',\n listClass: this.parent.activeView.viewClass,\n itemClass: this.parent.activeView.viewClass,\n template: '
    ${subject}
    '\n });\n }\n else {\n listElement = ListBase.createList(listData, {\n moduleName: 'agenda',\n listClass: this.parent.activeView.viewClass,\n itemClass: this.parent.activeView.viewClass\n });\n for (var li = 0, length_1 = listData.length; li < length_1; li++) {\n var appWrapper = createElement('div', {\n id: 'Appointment_' + listData[li][this.parent.eventFields.id],\n className: cls.APPOINTMENT_CLASS, attrs: {\n 'data-guid': listData[li].Guid,\n 'role': 'button',\n 'tabindex': '0',\n 'aria-readonly': 'false',\n 'aria-selected': 'false',\n 'aria-grabbed': 'true',\n 'aria-label': (listData[li][this.parent.eventFields.subject] || this.parent.eventSettings.fields.subject.default ||\n this.parent.localeObj.getConstant('addTitle'))\n }\n });\n if (!isNullOrUndefined(groupIndex)) {\n appWrapper.setAttribute('data-group-index', groupIndex.toString());\n }\n this.parent.eventBase.applyResourceColor(appWrapper, listData[li], 'borderColor', groupOrder);\n var templateEle = void 0;\n if (!isNullOrUndefined(this.parent.activeViewOptions.eventTemplate)) {\n templateEle = this.parent.getAppointmentTemplate()(listData[li]);\n }\n else {\n templateEle = this.createAppointment(listData[li]);\n }\n append([].slice.call(templateEle), appWrapper);\n listElement.children[li].innerHTML = appWrapper.outerHTML;\n var args = { data: listData[li], element: listElement.children[li], cancel: false };\n this.parent.trigger(event.eventRendered, args);\n if (args.cancel) {\n remove(listElement.children[li]);\n }\n }\n }\n aTd.appendChild(listElement);\n if ((this.parent.currentView === 'MonthAgenda' && this.parent.activeViewOptions.group.resources.length > 0)\n || this.parent.currentView === 'Agenda') {\n addClass([aTd], cls.AGENDA_DAY_BORDER_CLASS);\n }\n return aTd;\n };\n AgendaBase.prototype.createAppointment = function (event) {\n var fieldMapping = this.parent.eventFields;\n var recordSubject = (event[fieldMapping.subject] || this.parent.eventSettings.fields.subject.default ||\n this.parent.localeObj.getConstant('addTitle'));\n var appSubjectWrap = createElement('div', { className: cls.SUBJECT_WRAP });\n if (!isNullOrUndefined(event[fieldMapping.location]) && event[fieldMapping.location] !== '') {\n recordSubject += ',';\n }\n appSubjectWrap.appendChild(createElement('div', {\n className: cls.SUBJECT_CLASS,\n innerHTML: recordSubject\n }));\n if (!isNullOrUndefined(event[fieldMapping.location])) {\n appSubjectWrap.appendChild(createElement('div', {\n className: cls.LOCATION_CLASS,\n innerHTML: event[fieldMapping.location]\n }));\n }\n if (!isNullOrUndefined(event[fieldMapping.recurrenceRule])) {\n var iconClass = (event[fieldMapping.id] === event[fieldMapping.recurrenceID]) ?\n cls.EVENT_RECURRENCE_ICON_CLASS : cls.EVENT_RECURRENCE_EDIT_ICON_CLASS;\n appSubjectWrap.appendChild(createElement('div', { className: cls.ICON + ' ' + iconClass }));\n }\n var strDate = event[fieldMapping.startTime];\n var endDate = event[fieldMapping.endTime];\n var isAllDay = event[fieldMapping.isAllDay];\n var allDayStr = this.parent.localeObj.getConstant('allDay');\n var timeStr = this.parent.getTimeString(strDate) + ' - ' + this.parent.getTimeString(endDate);\n if (!isNullOrUndefined(event.data)) {\n var eventString = (endDate.getTime() - strDate.getTime()) / util.MS_PER_DAY >= 1 ? allDayStr : timeStr;\n allDayStr = eventString + ' (' + this.parent.localeObj.getConstant('day') + ' '\n + event.data.index + '/' + event.data.count + ')';\n }\n var appDateTime = createElement('div', {\n className: cls.DATE_TIME_CLASS,\n innerHTML: (!isNullOrUndefined(event.data) || isAllDay) ? allDayStr : timeStr\n });\n return [appSubjectWrap, appDateTime];\n };\n AgendaBase.prototype.processAgendaEvents = function (events) {\n var eventsProcessed = [];\n for (var _i = 0, events_1 = events; _i < events_1.length; _i++) {\n var event_1 = events_1[_i];\n var splited = this.parent.eventBase.splitEventByDay(event_1);\n eventsProcessed = eventsProcessed.concat(splited.length > 1 ? splited : event_1);\n }\n return eventsProcessed;\n };\n AgendaBase.prototype.wireEventActions = function () {\n var eventElement = [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_CLASS));\n for (var _i = 0, eventElement_1 = eventElement; _i < eventElement_1.length; _i++) {\n var element = eventElement_1[_i];\n this.parent.eventBase.wireAppointmentEvents(element);\n }\n var dateHeaderElement = [].slice.call(this.parent.element.querySelectorAll('.e-m-date'));\n for (var _a = 0, dateHeaderElement_1 = dateHeaderElement; _a < dateHeaderElement_1.length; _a++) {\n var element = dateHeaderElement_1[_a];\n EventHandler.add(element, 'click', this.parent.agendaModule.dayNavigationClick, this);\n }\n };\n AgendaBase.prototype.calculateResourceTableElement = function (tBody, noOfDays, agendaDate) {\n if (isNullOrUndefined(this.parent.resourceBase.lastResourceLevel)) {\n var level = this.viewBase.getDateSlots(this.viewBase.renderDates, this.parent.activeViewOptions.workDays);\n this.parent.resourceBase.generateResourceLevels(level);\n }\n var agendaLastDate = util.addDays(new Date(agendaDate.getTime()), noOfDays);\n var days = (this.parent.activeViewOptions.group.byDate || this.parent.currentView === 'MonthAgenda') ? noOfDays : 1;\n var resColl = this.parent.resourceBase.resourceCollection;\n var resData = this.parent.resourceBase.lastResourceLevel;\n var initialDate = agendaDate;\n for (var i = 0; i < days; i++) {\n var lastLevelInfo = [];\n var tempLastLevelInfo = [];\n var tempIndex = 0;\n var eventObj = void 0;\n var dateObj = void 0;\n var firstDate = util.addDays(initialDate, i);\n var finalDate = (this.parent.activeViewOptions.group.byDate || this.parent.currentView === 'MonthAgenda')\n ? util.addDays(firstDate, 1) : agendaLastDate;\n var agendaCollection = this.parent.eventBase.filterEvents(firstDate, finalDate);\n if (agendaCollection.length > 0 || !this.parent.hideEmptyAgendaDays || this.parent.currentView === 'MonthAgenda') {\n for (var res = 0; res < resData.length; res++) {\n noOfDays = (!this.parent.activeViewOptions.group.byDate || this.parent.currentView === 'MonthAgenda') ? noOfDays : 1;\n var data = [];\n agendaDate = firstDate;\n var resDataCollection = this.parent.eventBase.filterEvents(agendaDate, agendaLastDate, agendaCollection, resData[res]);\n if (resDataCollection.length > 0 || !this.parent.hideEmptyAgendaDays || this.parent.currentView === 'MonthAgenda') {\n for (var r = 0; r < noOfDays; r++) {\n var resDayCollection = this.parent.eventBase.filterEvents(agendaDate, util.addDays(agendaDate, 1), resDataCollection, undefined);\n if (resDayCollection.length > 0 || !this.parent.hideEmptyAgendaDays ||\n this.parent.currentView === 'MonthAgenda') {\n data.push(resDayCollection[0]);\n eventObj = {\n rowSpan: 1, type: 'eventColumn', resource: resColl[resColl.length - 1],\n groupIndex: resData[res].groupIndex, groupOrder: resData[res].groupOrder,\n resourceData: resData[res].resourceData, eventData: resDayCollection, date: agendaDate\n };\n dateObj = {\n rowSpan: 1, type: 'dateColumn', resource: resColl[resColl.length - 1],\n groupOrder: resData[res].groupOrder, resourceData: resData[res].resourceData,\n date: agendaDate, text: ''\n };\n if (!lastLevelInfo[tempIndex]) {\n lastLevelInfo[tempIndex] = [];\n }\n lastLevelInfo[tempIndex].push(eventObj);\n lastLevelInfo[tempIndex].push(dateObj);\n tempIndex++;\n }\n agendaDate = util.addDays(agendaDate, 1);\n if (agendaDate.getTime() >= agendaLastDate.getTime() || this.parent.activeViewOptions.group.byDate\n || this.parent.currentView === 'MonthAgenda') {\n lastLevelInfo[lastLevelInfo.length - 1][1].text = 'lastRow';\n var tempObj = {\n rowSpan: data.length, type: 'resourceColumn', resource: resColl[resColl.length - 1],\n groupOrder: resData[res].groupOrder.slice(0, -1), resourceData: resData[res].resourceData,\n groupIndex: (lastLevelInfo.length - data.length), className: [cls.RESOURCE_NAME],\n date: agendaDate\n };\n lastLevelInfo[lastLevelInfo.length - data.length].push(tempObj);\n tempLastLevelInfo.push(extend({}, tempObj, null, true));\n break;\n }\n }\n }\n }\n var topResources = resColl.slice(0, -1);\n var tempGroupedData = [];\n var totalRowSpan = 0;\n for (var y = 0; y < topResources.length; y++) {\n var data = topResources[topResources.length - (y + 1)]\n .dataSource;\n for (var x = 0; x < data.length; x++) {\n var z = 0;\n for (var u = 0; u < tempLastLevelInfo.length; u++) {\n if (tempLastLevelInfo[u].groupOrder[topResources.length - (y + 1)] === data[x][topResources[topResources.length - (y + 1)].idField]) {\n totalRowSpan = totalRowSpan + tempLastLevelInfo[u].rowSpan;\n tempGroupedData.push(extend({}, tempLastLevelInfo[u], null, true));\n }\n if (++z === tempLastLevelInfo.length && tempGroupedData.length > 0) {\n tempGroupedData[0].rowSpan = totalRowSpan;\n tempGroupedData[0].type = 'parentColumnLevel_' + (y + 1);\n tempGroupedData[0].resource = topResources[topResources.length - (y + 1)];\n tempGroupedData[0].resourceData = data[x];\n tempGroupedData[0].date = agendaDate;\n lastLevelInfo[tempGroupedData[0].groupIndex].push(tempGroupedData[0]);\n tempGroupedData = [];\n totalRowSpan = 0;\n }\n }\n }\n }\n this.createResourceTableRow(lastLevelInfo, tBody);\n }\n }\n var totalCollection = this.parent.eventBase.filterEvents(initialDate, agendaLastDate);\n if (totalCollection.length === 0 && !this.parent.activeViewOptions.allowVirtualScrolling && this.parent.hideEmptyAgendaDays) {\n this.renderEmptyContent(tBody, initialDate);\n }\n };\n AgendaBase.prototype.createResourceTableRow = function (tContent, tBody) {\n var tr = createElement('tr', { attrs: { role: 'row' } });\n var ntr;\n var td = createElement('td', { attrs: { role: 'gridcell', 'aria-selected': 'false' } });\n var tempData;\n var rowSpan = 0;\n var level;\n if (this.parent.activeViewOptions.group.byDate || this.parent.currentView === 'MonthAgenda') {\n var tContentCollection = [];\n var parentCollection = this.parent.resourceBase.resourceCollection.slice(0, -1);\n for (var w = 0; w < tContent.length; w++) {\n tContentCollection = tContentCollection.concat(tContent[w]);\n }\n if (parentCollection.length > 0) {\n level = 'parentColumnLevel_' + parentCollection.length.toString();\n }\n else {\n level = 'resourceColumn';\n }\n var rowSpanCollection = new DataManager({ json: tContentCollection }).executeLocal(new Query()\n .where('type', 'equal', level));\n for (var x = 0; x < rowSpanCollection.length; x++) {\n rowSpan = rowSpan + rowSpanCollection[x].rowSpan;\n }\n }\n for (var row = 0; row < tContent.length; row++) {\n ntr = tr.cloneNode();\n for (var col = tContent[row].length - 1; col >= 0; col--) {\n var className = void 0;\n var data = tContent[row][col];\n var ntd = td.cloneNode();\n if (data.type === 'dateColumn') {\n if (this.parent.activeViewOptions.group.byDate || this.parent.currentView === 'MonthAgenda') {\n tempData = tContent[row][col];\n continue;\n }\n ntd.setAttribute('data-date', data.date.getTime().toString());\n ntd.appendChild(this.createDateHeaderElement(data.date));\n className = [cls.AGENDA_CELLS_CLASS, cls.AGENDA_DATE_CLASS];\n if (data.text === 'lastRow') {\n className.push(cls.AGENDA_DAY_BORDER_CLASS);\n }\n addClass([ntd], className);\n ntr.appendChild(ntd);\n }\n else if (data.type === 'eventColumn') {\n var elementType = (data.eventData.length === 0) ? 'noEvents' : 'data';\n ntd = this.createAgendaContentElement(elementType, data.eventData, ntd, data.groupOrder, data.groupIndex);\n ntd.setAttribute('data-date', data.date.getTime().toString());\n if (this.parent.activeViewOptions.group.byDate || this.parent.currentView === 'MonthAgenda') {\n className = [cls.AGENDA_CELLS_CLASS, cls.AGENDA_DAY_PADDING_CLASS];\n addClass([ntd], className);\n }\n ntr.appendChild(ntd);\n }\n else {\n ntd.setAttribute('rowspan', data.rowSpan.toString());\n addClass([ntd], cls.AGENDA_RESOURCE_CLASS);\n this.viewBase.setResourceHeaderContent(ntd, data, data.className[0]);\n ntr.appendChild(ntd);\n }\n }\n if (this.parent.activeViewOptions.group.byDate && row === 0 && this.parent.currentView !== 'MonthAgenda') {\n var ntd = td.cloneNode();\n ntd.setAttribute('data-date', tempData.date.getTime().toString());\n ntd.setAttribute('rowspan', rowSpan.toString());\n ntd.appendChild(this.createDateHeaderElement(tempData.date));\n var className = [cls.AGENDA_CELLS_CLASS, cls.AGENDA_DATE_CLASS, cls.DATE_BORDER_CLASS];\n addClass([ntd], className);\n var daysCount = util.getDaysCount(this.parent.selectedDate.getTime(), tempData.date.getTime());\n ntr.setAttribute('aria-rowindex', daysCount.toString());\n if (this.parent.element.querySelector('.e-agenda-view tr[aria-rowindex=\"' +\n parseInt(ntr.getAttribute('aria-rowindex'), 10) + '\"]')) {\n break;\n }\n ntr.insertBefore(ntd, ntr.childNodes[0]);\n }\n tBody.appendChild(ntr);\n }\n };\n AgendaBase.prototype.createDateHeaderElement = function (date) {\n var dateHeader;\n if (this.parent.activeViewOptions.dateHeaderTemplate) {\n dateHeader = createElement('div', { className: cls.AGENDA_HEADER_CLASS });\n var templateArgs = { date: date, type: 'dateHeader' };\n var template = this.parent.getDateHeaderTemplate()(templateArgs);\n append([].slice.call(template), dateHeader);\n }\n else {\n dateHeader = this.viewBase.getMobileDateElement(date, cls.AGENDA_HEADER_CLASS);\n }\n return dateHeader;\n };\n AgendaBase.prototype.renderEmptyContent = function (tBody, agendaDate) {\n var eTr = this.createTableRowElement(agendaDate, 'noEvents');\n var eTd = eTr.children[0];\n var noEvents = createElement('div', {\n className: cls.AGENDA_EMPTY_EVENT_CLASS,\n innerHTML: this.parent.localeObj.getConstant('noEvents')\n });\n eTd.appendChild(noEvents);\n tBody.appendChild(eTr);\n };\n AgendaBase.prototype.createTableRowElement = function (date, type) {\n var daysCount = util.getDaysCount(this.parent.selectedDate.getTime(), date.getTime());\n var tr = createElement('tr', { attrs: { 'role': 'row', 'aria-rowindex': daysCount.toString() } });\n var td = createElement('td', {\n attrs: {\n 'class': (type === 'monthHeader') ? cls.AGENDA_MONTH_HEADER_CLASS : cls.AGENDA_CELLS_CLASS,\n 'role': 'gridcell',\n 'aria-selected': 'false',\n 'aria-colindex': daysCount.toString(),\n 'data-date': date.getTime().toString()\n }\n });\n var dTd = td.cloneNode();\n var aTd = td.cloneNode();\n tr.appendChild(dTd);\n if (type !== 'noEvents') {\n tr.appendChild(aTd);\n }\n return tr;\n };\n return AgendaBase;\n}());\nexport { AgendaBase };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { formatUnit, isNullOrUndefined, closest, extend } from '@syncfusion/ej2-base';\nimport { createElement, remove, addClass, EventHandler } from '@syncfusion/ej2-base';\nimport { AgendaBase } from '../event-renderer/agenda-base';\nimport { ViewBase } from './view-base';\nimport * as util from '../base/util';\nimport * as event from '../base/constant';\nimport * as cls from '../base/css-constant';\n/**\n * agenda view\n */\nvar Agenda = /** @class */ (function (_super) {\n __extends(Agenda, _super);\n /**\n * Constructor for agenda view\n */\n function Agenda(parent) {\n var _this = _super.call(this, parent) || this;\n _this.viewClass = 'e-agenda-view';\n _this.isInverseTableSelect = false;\n _this.agendaDates = {};\n _this.virtualScrollTop = 1;\n _this.minDate = new Date(1900, 0, 1);\n _this.maxDate = new Date(2099, 11, 31);\n _this.agendaBase = new AgendaBase(parent);\n return _this;\n }\n /**\n * Get module name.\n */\n Agenda.prototype.getModuleName = function () {\n return 'agenda';\n };\n Agenda.prototype.renderLayout = function () {\n this.agendaDates = {};\n this.element = createElement('div', { className: cls.TABLE_WRAP_CLASS });\n addClass([this.element], this.viewClass);\n this.element.appendChild(this.createTableLayout(cls.OUTER_TABLE_CLASS));\n this.parent.element.querySelector('.' + cls.TABLE_CONTAINER_CLASS).appendChild(this.element);\n var eTr = createElement('tr');\n this.element.querySelector('tbody').appendChild(eTr);\n var workTd = createElement('td');\n eTr.appendChild(workTd);\n var wrap = createElement('div', { className: cls.CONTENT_WRAP_CLASS });\n workTd.appendChild(wrap);\n var tbl = this.createTableLayout(cls.CONTENT_TABLE_CLASS);\n wrap.appendChild(tbl);\n var tBody = tbl.querySelector('tbody');\n var agendaDate = util.resetTime(this.parent.selectedDate);\n this.agendaBase.renderEmptyContent(tBody, agendaDate);\n this.wireEvents();\n if (this.parent.uiStateValues.isGroupAdaptive && !this.parent.element.querySelector('.' + cls.RESOURCE_TOOLBAR_CONTAINER)) {\n this.parent.resourceBase.generateResourceLevels([{ renderDates: this.parent.activeView.renderDates }]);\n this.renderResourceMobileLayout();\n }\n this.parent.notify(event.contentReady, {});\n };\n Agenda.prototype.eventLoad = function (args) {\n this.dataSource = extend([], this.parent.eventsData, null, true);\n for (var _i = 0, _a = this.parent.eventsData; _i < _a.length; _i++) {\n var event_1 = _a[_i];\n delete event_1.generatedDates;\n }\n var eventCollection = args.processedData;\n if (this.parent.uiStateValues.isGroupAdaptive) {\n var resource = this.parent.resourceBase.lastResourceLevel[this.parent.uiStateValues.groupIndex];\n this.dataSource = this.parent.eventBase.filterEventsByResource(resource, this.dataSource);\n eventCollection = this.parent.eventBase.filterEventsByResource(resource, eventCollection);\n }\n this.parent.eventsProcessed = this.agendaBase.processAgendaEvents(eventCollection);\n var agendaDate = util.resetTime(this.parent.selectedDate);\n var tBody = this.parent.getContentTable();\n tBody.innerHTML = '';\n this.renderContent(tBody, agendaDate);\n this.agendaBase.wireEventActions();\n var contentArea = closest(tBody, '.' + cls.CONTENT_WRAP_CLASS);\n contentArea.scrollTop = 1;\n };\n Agenda.prototype.refreshEvent = function (refreshDate) {\n var processedData = [];\n for (var _i = 0, _a = this.dataSource; _i < _a.length; _i++) {\n var eventData = _a[_i];\n var fields = this.parent.eventFields;\n var data = eventData;\n if (isNullOrUndefined(data[fields.recurrenceID]) && !isNullOrUndefined(data[fields.recurrenceRule]) &&\n !isNullOrUndefined(data.generatedDates) && refreshDate >= data.generatedDates.end) {\n processedData = processedData.concat(this.parent.eventBase.generateOccurrence(data, refreshDate));\n }\n }\n this.parent.eventsProcessed = this.parent.eventsProcessed.concat(this.agendaBase.processAgendaEvents(processedData));\n };\n Agenda.prototype.renderContent = function (tBody, agendaDate) {\n var fieldMapping = this.parent.eventFields;\n var firstDate = new Date(agendaDate.getTime());\n var lastDate = this.getEndDateFromStartDate(firstDate);\n var isObject = this.appointmentFiltering(firstDate, lastDate);\n if (isObject.length === 0) {\n lastDate = firstDate;\n firstDate = new Date(this.minDate.getTime());\n isObject = this.appointmentFiltering(firstDate, lastDate);\n if (isObject.length === 0) {\n firstDate = lastDate;\n lastDate = new Date(this.maxDate.getTime());\n isObject = this.appointmentFiltering(firstDate, lastDate);\n }\n }\n if (isObject.length > 0) {\n var appoint = isObject;\n agendaDate = appoint[0][fieldMapping.startTime];\n agendaDate = new Date(new Date(agendaDate.getTime()).setHours(0, 0, 0, 0));\n this.updateHeaderText(appoint[0][fieldMapping.startTime]);\n }\n var endDate;\n if (!this.parent.hideEmptyAgendaDays || (this.parent.agendaDaysCount > 0 && isObject.length > 0)) {\n var noOfDays = (!this.parent.hideEmptyAgendaDays || !this.parent.activeViewOptions.allowVirtualScrolling ||\n this.parent.agendaDaysCount < isObject.length) ? this.parent.agendaDaysCount : isObject.length;\n if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {\n var date = agendaDate;\n if (!this.parent.activeViewOptions.group.byDate) {\n this.parent.activeViewOptions.allowVirtualScrolling = false;\n date = firstDate;\n if (this.parent.headerModule) {\n this.parent.headerModule.updateDateRange(this.parent.activeView.getDateRangeText());\n this.parent.headerModule.updateHeaderItems('remove');\n }\n }\n this.agendaBase.calculateResourceTableElement(tBody, this.parent.agendaDaysCount, date);\n }\n else {\n for (var day = 0; day < noOfDays; day++) {\n var filterData = [];\n filterData = this.appointmentFiltering(agendaDate);\n var nTr = this.agendaBase.createTableRowElement(agendaDate, 'data');\n if (this.element.querySelector('tr[aria-rowindex=\"' + parseInt(nTr.getAttribute('aria-rowindex'), 10)\n + '\"]')) {\n continue;\n }\n // if (this.isMonthFirstDate(agendaDate)) {\n // tBody.appendChild(this.renderMonthHeader(this.createTableRowElement(agendaDate, 'monthHeader')));\n // }\n var dTd = nTr.children[0];\n var aTd = nTr.children[1];\n if (filterData.length > 0 || (!this.parent.hideEmptyAgendaDays && filterData.length === 0)) {\n var elementType = (!this.parent.hideEmptyAgendaDays && filterData.length === 0) ? 'noEvents' : 'data';\n dTd.appendChild(this.agendaBase.createDateHeaderElement(agendaDate));\n nTr.appendChild(dTd);\n var cTd = this.agendaBase.createAgendaContentElement(elementType, filterData, aTd);\n nTr.appendChild(cTd);\n if (cTd.querySelectorAll('li').length > 0) {\n tBody.appendChild(nTr);\n }\n }\n else if (this.parent.activeViewOptions.allowVirtualScrolling) {\n day--;\n }\n if (this.isCurrentDate(new Date(agendaDate.getTime()))) {\n addClass(dTd.children, cls.AGENDA_CURRENT_DAY_CLASS);\n }\n agendaDate = util.addDays(agendaDate, 1);\n if (agendaDate.getTime() > lastDate.getTime()) {\n break;\n }\n }\n }\n endDate = new Date(agendaDate.getTime() - util.MS_PER_DAY);\n }\n else {\n this.agendaBase.renderEmptyContent(tBody, agendaDate);\n endDate = util.addDays(agendaDate, this.parent.agendaDaysCount - 1);\n }\n this.agendaDates = { start: firstDate, end: endDate };\n };\n // private renderMonthHeader(mTr: Element): Element {\n // mTr.removeAttribute('aria-rowindex');\n // for (let td of [].slice.call(mTr.childNodes)) {\n // td.removeAttribute('aria-colindex');\n // }\n // let headerDate: Date = new Date(parseInt(mTr.children[0].getAttribute('data-date'), 10));\n // let div: Element = createElement('div', {\n // className: cls.DATE_HEADER_CLASS,\n // innerHTML: headerDate.toLocaleString(this.parent.locale, { month: 'long' }) + ' ' + headerDate.getFullYear()\n // });\n // mTr.lastElementChild.appendChild(div);\n // return mTr;\n // }\n Agenda.prototype.agendaScrolling = function (event) {\n this.parent.quickPopup.quickPopupHide();\n if (this.parent.activeViewOptions.allowVirtualScrolling) {\n this.virtualScrolling(event);\n }\n };\n Agenda.prototype.virtualScrolling = function (event) {\n var target = event.target;\n var scrollTop = target.scrollTop;\n var scrollHeight = target.scrollHeight;\n var offsetHeight = target.clientHeight;\n var totalHeight = scrollTop + offsetHeight;\n var direction = (this.virtualScrollTop < scrollTop) ? 'next' : 'previous';\n var tBody = target.querySelector('tbody');\n var emptyTBody = createElement('tbody');\n var topElement = this.getElementFromScrollerPosition(event, direction);\n var scrollDate = new Date(parseInt(topElement.getAttribute('data-date'), 0));\n var filterDate;\n var filterData;\n if (scrollTop === 0) {\n filterDate = this.getPreviousNextDate(util.addDays(scrollDate, -1), direction);\n filterData = this.appointmentFiltering(filterDate.start, filterDate.end);\n if (filterData.length > 0 || !this.parent.hideEmptyAgendaDays) {\n this.renderContent(emptyTBody, filterDate.start);\n tBody.innerHTML = emptyTBody.innerHTML + tBody.innerHTML;\n this.agendaBase.wireEventActions();\n for (var s = 0, element = tBody.children; s < element.length; s++) {\n if (element[s].getAttribute('aria-rowindex') === topElement.getAttribute('aria-colindex')) {\n var scrollToValue = element[s].offsetTop -\n this.element.querySelector('.e-agenda-item').offsetHeight;\n target.scrollTop = scrollToValue;\n break;\n }\n }\n this.updateHeaderText(scrollDate);\n }\n }\n else if (totalHeight === scrollHeight) {\n filterDate = this.getPreviousNextDate(util.addDays(scrollDate, 1), direction);\n filterData = this.appointmentFiltering(filterDate.start, filterDate.end);\n if (filterData.length > 0 || !this.parent.hideEmptyAgendaDays) {\n this.renderContent(emptyTBody, filterDate.start);\n tBody.innerHTML += emptyTBody.innerHTML;\n this.agendaBase.wireEventActions();\n this.updateHeaderText(scrollDate);\n }\n }\n else {\n this.updateHeaderText(scrollDate);\n }\n this.virtualScrollTop = scrollTop;\n var selectedElements = this.parent.eventBase.getSelectedAppointments();\n if (selectedElements.length > 0) {\n selectedElements[selectedElements.length - 1].focus();\n }\n };\n Agenda.prototype.getElementFromScrollerPosition = function (event, direction) {\n var filterElement;\n var target = event.target;\n var scrollTop = target.scrollTop;\n var scrollHeight = target.scrollHeight;\n var offsetHeight = target.clientHeight;\n var totalHeight = scrollTop + offsetHeight;\n var liCollection = [].slice.call(target.querySelectorAll('.e-agenda-item'));\n var li;\n var liDetails;\n if (liCollection.length > 0) {\n if (scrollTop === 0) {\n li = liCollection[0];\n filterElement = closest(li, '.' + cls.AGENDA_CELLS_CLASS);\n }\n else if (totalHeight === scrollHeight) {\n li = liCollection[liCollection.length - 1];\n filterElement = closest(li, '.' + cls.AGENDA_CELLS_CLASS);\n }\n else {\n for (var a = 0, length_1 = liCollection.length; a < length_1; a++) {\n li = liCollection[a];\n liDetails = li.getBoundingClientRect();\n if (liDetails.top >= 0) {\n filterElement = closest(li, '.' + cls.AGENDA_CELLS_CLASS);\n break;\n }\n }\n }\n }\n return filterElement;\n };\n Agenda.prototype.updateHeaderText = function (date) {\n if (this.parent.showHeaderBar) {\n this.parent.headerModule.updateDateRange(this.getDateRangeText(date));\n }\n };\n Agenda.prototype.getPreviousNextDate = function (date, type) {\n var currentDate = new Date(date.getTime());\n var firstDate = this.getStartDateFromEndDate(date);\n var lastDate = this.getEndDateFromStartDate(date);\n var daysCount = 0;\n do {\n var filterData = this.appointmentFiltering(currentDate);\n if (filterData.length > 0 || !this.parent.hideEmptyAgendaDays) {\n daysCount++;\n }\n currentDate = util.addDays(currentDate, (type === 'next') ? 1 : -1);\n if (currentDate < firstDate || currentDate > lastDate) {\n break;\n }\n } while (daysCount !== this.parent.agendaDaysCount);\n var endDate = util.addDays(currentDate, (type === 'next') ? -1 : 1);\n return (type === 'next') ? { start: date, end: util.addDays(endDate, 1) } : { start: endDate, end: util.addDays(date, 1) };\n };\n Agenda.prototype.appointmentFiltering = function (startDate, endDate) {\n var dateStart;\n var dateEnd;\n if (!isNullOrUndefined(startDate) && isNullOrUndefined(endDate)) {\n dateStart = util.resetTime(new Date(startDate.getTime()));\n dateEnd = util.setTime(new Date(dateStart.getTime()), util.MS_PER_DAY);\n }\n else {\n dateStart = new Date(startDate.getTime());\n dateEnd = new Date(endDate.getTime());\n }\n var filterData = this.parent.eventBase.filterEvents(dateStart, dateEnd);\n if (filterData.length === 0) {\n this.refreshEvent(startDate);\n filterData = this.parent.eventBase.filterEvents(dateStart, dateEnd);\n }\n return filterData;\n };\n Agenda.prototype.getStartDateFromEndDate = function (endDate) {\n var filterDate;\n var fieldMapping = this.parent.eventFields;\n if (this.parent.eventsProcessed.length > 0) {\n var firstDate = Math.min.apply(Math, this.parent.eventsProcessed.map(function (a) {\n var date = a[fieldMapping.startTime];\n return date.getTime();\n }));\n filterDate = this.parent.hideEmptyAgendaDays ? new Date(firstDate) : this.minDate;\n }\n else {\n filterDate = this.parent.hideEmptyAgendaDays ? util.addMonths(endDate, -1) : this.minDate;\n }\n return util.resetTime(filterDate);\n };\n Agenda.prototype.getEndDateFromStartDate = function (startDate) {\n var filterDate;\n var fieldMapping = this.parent.eventFields;\n if (this.parent.eventsProcessed.length > 0) {\n var lastDate = Math.max.apply(Math, this.parent.eventsProcessed.map(function (a) {\n var date = a[fieldMapping.endTime];\n return date.getTime();\n }));\n filterDate = this.parent.hideEmptyAgendaDays ? new Date(lastDate) : this.maxDate;\n }\n else {\n filterDate = this.parent.hideEmptyAgendaDays ? util.addMonths(startDate, 1) : this.maxDate;\n }\n return util.resetTime(util.addDays(filterDate, 1));\n };\n Agenda.prototype.getNextPreviousDate = function (type) {\n var noOfDays = (type === 'next') ? 1 : -1;\n return util.addDays(this.parent.selectedDate, noOfDays);\n };\n Agenda.prototype.startDate = function () {\n return util.resetTime(this.parent.selectedDate);\n };\n Agenda.prototype.endDate = function () {\n if (this.parent.activeViewOptions.allowVirtualScrolling) {\n return this.getEndDateFromStartDate(this.startDate());\n }\n else {\n return util.addDays(this.startDate(), this.parent.agendaDaysCount);\n }\n };\n Agenda.prototype.getDateRangeText = function (date) {\n var formatDate = (this.parent.activeViewOptions.dateFormat) ? this.parent.activeViewOptions.dateFormat : 'MMMM y';\n if (this.parent.activeViewOptions.allowVirtualScrolling || this.parent.isAdaptive) {\n var currentDate = isNullOrUndefined(date) ? this.parent.selectedDate : date;\n return this.parent.globalize.formatDate(currentDate, { format: formatDate });\n }\n else {\n var startDate = this.parent.selectedDate;\n var endDate = util.addDays(startDate, this.parent.agendaDaysCount - 1);\n return this.formatDateRange(startDate, endDate);\n }\n };\n Agenda.prototype.dayNavigationClick = function (e) {\n var date = this.parent.getDateFromElement(closest(e.currentTarget, '.' + cls.AGENDA_CELLS_CLASS));\n if (!isNullOrUndefined(date) && !this.parent.isAdaptive) {\n this.parent.setProperties({ selectedDate: date }, true);\n this.parent.changeView('Day');\n }\n };\n // private isMonthFirstDate(date: Date): boolean {\n // return date.getDate() === 1;\n // }\n Agenda.prototype.wireEvents = function () {\n EventHandler.add(this.element.querySelector('.' + cls.CONTENT_WRAP_CLASS), event.scroll, this.agendaScrolling, this);\n };\n Agenda.prototype.unWireEvents = function () {\n EventHandler.remove(this.element.querySelector('.' + cls.CONTENT_WRAP_CLASS), event.scroll, this.agendaScrolling);\n var dateHeaderElement = [].slice.call(this.element.querySelectorAll('.e-m-date'));\n for (var _i = 0, dateHeaderElement_1 = dateHeaderElement; _i < dateHeaderElement_1.length; _i++) {\n var element = dateHeaderElement_1[_i];\n EventHandler.remove(element, 'click', this.dayNavigationClick);\n }\n };\n Agenda.prototype.addEventListener = function () {\n this.parent.on(event.scrollUiUpdate, this.onAgendaScrollUiUpdate, this);\n this.parent.on(event.dataReady, this.eventLoad, this);\n };\n Agenda.prototype.removeEventListener = function () {\n this.parent.off(event.scrollUiUpdate, this.onAgendaScrollUiUpdate);\n this.parent.off(event.dataReady, this.eventLoad);\n };\n Agenda.prototype.onAgendaScrollUiUpdate = function (args) {\n var headerHeight = 2;\n if (this.parent.headerModule) {\n headerHeight += this.parent.headerModule.getHeaderElement().offsetHeight;\n if (this.parent.activeViewOptions.allowVirtualScrolling) {\n this.parent.headerModule.updateHeaderItems('add');\n }\n else {\n this.parent.headerModule.updateHeaderItems('remove');\n }\n }\n if (this.parent.uiStateValues.isGroupAdaptive) {\n headerHeight += this.parent.element.querySelector('.' + cls.RESOURCE_HEADER_TOOLBAR).offsetHeight;\n }\n var contentArea = this.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);\n contentArea.style.height = formatUnit(this.parent.element.offsetHeight - headerHeight);\n };\n /**\n * To destroy the agenda.\n * @return {void}\n * @private\n */\n Agenda.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n if (this.element) {\n this.unWireEvents();\n if (this.parent.resourceBase) {\n this.parent.resourceBase.destroy();\n }\n remove(this.element);\n this.element = null;\n if (this.parent.headerModule && this.parent.activeViewOptions.allowVirtualScrolling) {\n this.parent.headerModule.updateHeaderItems('remove');\n }\n }\n };\n return Agenda;\n}(ViewBase));\nexport { Agenda };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { createElement, addClass, formatUnit, remove } from '@syncfusion/ej2-base';\nimport { AgendaBase } from '../event-renderer/agenda-base';\nimport { Month } from './month';\nimport * as util from '../base/util';\nimport * as cls from '../base/css-constant';\n/**\n * month agenda view\n */\nvar MonthAgenda = /** @class */ (function (_super) {\n __extends(MonthAgenda, _super);\n /**\n * Constructor\n */\n function MonthAgenda(parent) {\n var _this = _super.call(this, parent) || this;\n _this.dayNameFormat = 'narrow';\n _this.viewClass = 'e-month-agenda-view';\n _this.agendaDates = {};\n _this.agendaBase = new AgendaBase(parent);\n return _this;\n }\n MonthAgenda.prototype.renderAppointmentContainer = function () {\n var contentArea = this.getContentAreaElement();\n var wrapperContainer = createElement('div', { className: cls.WRAPPER_CONTAINER_CLASS });\n contentArea.appendChild(wrapperContainer);\n var appWrap = createElement('div', { className: cls.APPOINTMENT_WRAP_CLASS });\n wrapperContainer.appendChild(appWrap);\n this.appendAppContainer(appWrap);\n this.setEventWrapperHeight();\n };\n MonthAgenda.prototype.getDayNameFormat = function () {\n if (this.parent.isAdaptive) {\n return 'narrow';\n }\n return 'abbreviated';\n };\n MonthAgenda.prototype.setEventWrapperHeight = function () {\n var headerHeight = (this.parent.headerModule ? this.parent.headerModule.getHeaderElement().offsetHeight : 0) + 2;\n var resourceWrapper = this.parent.element.querySelector('.' + cls.RESOURCE_HEADER_TOOLBAR);\n if (resourceWrapper) {\n headerHeight += resourceWrapper.offsetHeight;\n }\n var contentArea = this.getContentAreaElement().firstChild;\n var dateHeader = this.element.querySelector('.' + cls.DATE_HEADER_WRAP_CLASS);\n var availableHeight = this.parent.element.offsetHeight - headerHeight - dateHeader.offsetHeight - contentArea.offsetHeight;\n var wrapperContainer = this.element.querySelector('.' + cls.WRAPPER_CONTAINER_CLASS);\n var eventWrapper = this.element.querySelector('.' + cls.APPOINTMENT_WRAP_CLASS);\n wrapperContainer.style.height = eventWrapper.style.height = formatUnit(availableHeight);\n };\n MonthAgenda.prototype.onDataReady = function (args) {\n this.setEventWrapperHeight();\n this.clearElements();\n var eventCollection = args.processedData;\n if (this.parent.uiStateValues.isGroupAdaptive) {\n var resource = this.parent.resourceBase.lastResourceLevel[this.parent.uiStateValues.groupIndex];\n eventCollection = this.parent.eventBase.filterEventsByResource(resource, eventCollection);\n }\n this.parent.eventsProcessed = this.agendaBase.processAgendaEvents(eventCollection);\n var count = 0;\n for (var _i = 0, _a = this.renderDates; _i < _a.length; _i++) {\n var date = _a[_i];\n var filterData = this.appointmentFiltering(date);\n var workCell = this.element.querySelectorAll('.' + cls.WORK_CELLS_CLASS)[count];\n if (filterData.length > 0) {\n if (!workCell.querySelector('.' + cls.APPOINTMENT_INDICATOR_CLASS)) {\n workCell.appendChild(createElement('div', { className: cls.APPOINTMENT_INDICATOR_CLASS }));\n }\n if (date.getTime() === util.resetTime(new Date(this.parent.selectedDate.getTime())).getTime()) {\n this.onEventRender(filterData, date);\n }\n }\n count++;\n }\n };\n MonthAgenda.prototype.onCellClick = function (event) {\n this.parent.quickPopup.quickPopupHide();\n var filterData = this.appointmentFiltering(event.startTime);\n this.onEventRender(filterData, event.startTime);\n this.parent.setProperties({ selectedDate: new Date('' + event.startTime) }, true);\n };\n MonthAgenda.prototype.onEventRender = function (events, date) {\n var appWrap = this.element.querySelector('.' + cls.APPOINTMENT_WRAP_CLASS);\n appWrap.innerHTML = '';\n if (this.parent.activeViewOptions.group.resources.length === 0 || this.parent.uiStateValues.isGroupAdaptive) {\n if (events.length > 0) {\n var appContainer = createElement('div', { className: cls.APPOINTMENT_CONTAINER_CLASS });\n appWrap.appendChild(this.agendaBase.\n createAgendaContentElement('data', events, appContainer));\n }\n else {\n this.appendAppContainer(appWrap);\n }\n }\n else {\n if (events.length > 0) {\n var table = this.createTableLayout();\n var tBody = table.querySelector('tbody');\n this.agendaBase.calculateResourceTableElement(tBody, 1, date);\n table.appendChild(tBody);\n appWrap.appendChild(table);\n }\n else {\n this.appendAppContainer(appWrap);\n }\n }\n this.agendaBase.wireEventActions();\n };\n MonthAgenda.prototype.appointmentFiltering = function (date) {\n var dateStart = util.resetTime(new Date(date.getTime()));\n var dateEnd = util.setTime(new Date(dateStart.getTime()), util.MS_PER_DAY);\n return this.parent.eventBase.filterEvents(dateStart, dateEnd);\n };\n MonthAgenda.prototype.clearElements = function () {\n var appointmentIndicators = [].slice.call(this.element.querySelectorAll('.' + cls.APPOINTMENT_INDICATOR_CLASS));\n for (var _i = 0, appointmentIndicators_1 = appointmentIndicators; _i < appointmentIndicators_1.length; _i++) {\n var appointmentIndicator = appointmentIndicators_1[_i];\n remove(appointmentIndicator);\n }\n this.appendAppContainer(this.element.querySelector('.' + cls.APPOINTMENT_WRAP_CLASS));\n };\n MonthAgenda.prototype.appendAppContainer = function (appWrap) {\n var app = createElement('div', { className: cls.APPOINTMENT_CONTAINER_CLASS });\n addClass([app], cls.AGENDA_NO_EVENT_CLASS);\n app.innerHTML = this.parent.localeObj.getConstant('noEvents');\n appWrap.innerHTML = '';\n appWrap.appendChild(app);\n };\n /**\n * Get module name.\n */\n MonthAgenda.prototype.getModuleName = function () {\n return 'monthAgenda';\n };\n return MonthAgenda;\n}(Month));\nexport { MonthAgenda };\n","import * as index from '@syncfusion/ej2-schedule';\nindex.Schedule.Inject( index.Day,index.Week,index.WorkWeek,index.Month,index.Agenda,index.MonthAgenda);\nexport * from '@syncfusion/ej2-schedule';\n","/**\n * Maps Themes doc\n */\nexport var Theme;\n(function (Theme) {\n /** @private */\n Theme.mapsTitleFont = {\n size: '14px',\n fontWeight: 'Medium',\n color: '#424242',\n fontStyle: 'Medium',\n fontFamily: 'Roboto, Noto, Sans-serif'\n };\n})(Theme || (Theme = {}));\n","import { addClass, createElement } from '@syncfusion/ej2-base';\nimport { Button } from '@syncfusion/ej2-buttons';\n/**\n * Initialize ButtonGroup CSS component with specified properties.\n * ```html\n *
    \n * \n * \n * \n *
    \n * ```\n * ```typescript\n * createButtonGroup('#buttongroup', {\n * cssClass: 'e-outline',\n * buttons: [\n * { content: 'Day' },\n * { content: 'Week' },\n * { content: 'Work Week'}\n * ]\n * });\n * ```\n * @param {string} selector\n * @param {CreateButtonGroupModel} options\n * @returns HTMLElement\n */\nexport function createButtonGroup(selector, options) {\n if (options === void 0) { options = {}; }\n var child;\n var btnElem;\n var nextChild;\n var btnModel;\n var wrapper = document.querySelector(selector);\n addClass([wrapper], ['e-btn-group']);\n wrapper.setAttribute('role', 'group');\n var childs = wrapper.children;\n options.buttons = options.buttons || [];\n for (var i = 0, j = 0; j < childs.length; i++, j++) {\n child = childs[j];\n btnModel = options.buttons[i];\n if (btnModel !== null) {\n if (child.tagName === 'BUTTON') {\n btnElem = child;\n }\n else {\n btnElem = createElement('label');\n nextChild = childs[j + 1];\n if (nextChild) {\n wrapper.insertBefore(btnElem, nextChild);\n }\n else {\n wrapper.appendChild(btnElem);\n }\n if (child.id) {\n btnElem.setAttribute('for', child.id);\n }\n if (btnModel && btnModel.disabled) {\n child.disabled = true;\n }\n j++;\n }\n if (options.cssClass && btnModel && !btnModel.cssClass) {\n btnModel.cssClass = options.cssClass;\n }\n new Button(btnModel || {}, btnElem);\n }\n }\n return wrapper;\n}\n","/**\n * TreeMap constants doc\n */\n/**\n * Specifies TreeMap load event name.\n * @private\n */\nexport var load = 'load';\n/**\n * Specifies TreeMap loaded event name.\n * @private\n */\nexport var loaded = 'loaded';\n/**\n * Specifies TreeMap beforePrint event name.\n * @private\n */\nexport var beforePrint = 'beforePrint';\n/**\n * Specifies the itemRendering event name.\n * @private\n */\nexport var itemRendering = 'itemRendering';\n/**\n * Specifies the drilldown start event name.\n * @private\n */\nexport var drillStart = 'drillStart';\n/**\n * Specifies the drilldown end event name.\n * @private\n */\nexport var drillEnd = 'drillEnd';\n/**\n * Specifies the item selected event name.\n * @private\n */\nexport var itemSelected = 'itemSelected';\n/**\n * Specifies the item highlight event name.\n * @private\n */\nexport var itemHighlight = 'itemHighlight';\n/**\n * Specifies the tooltip rendering event name.\n * @private\n */\nexport var tooltipRendering = 'tooltipRendering';\n/**\n * Specifies the item click event name.\n * @private\n */\nexport var itemClick = 'itemClick';\n/**\n * Specifies the item move event name.\n * @private\n */\nexport var itemMove = 'itemMove';\n/**\n * Specifies the mouse click event name.\n * @private\n */\nexport var click = 'click';\n/**\n * Specifies the mouse move event name.\n * @private\n */\nexport var mouseMove = 'mouseMove';\n/**\n * Specifies legend item rendering event name.\n * @private\n */\nexport var legendItemRendering = 'legendItemRendering';\n/**\n * Specifies treemap resize event name.\n * @private\n */\nexport var resize = 'resize';\n/**\n * Specifies the font family\n * @private\n */\nexport var defaultFont = 'Roboto, Segoe UI, Noto, Sans-serif';\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/**\n * Maps base doc\n */\nimport { Property, ChildProperty, Complex, Collection } from '@syncfusion/ej2-base';\nimport { defaultFont } from './constants';\nvar Border = /** @class */ (function (_super) {\n __extends(Border, _super);\n function Border() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('#808080')\n ], Border.prototype, \"color\", void 0);\n __decorate([\n Property(0)\n ], Border.prototype, \"width\", void 0);\n return Border;\n}(ChildProperty));\nexport { Border };\n/**\n * Configures the treemap margin.\n */\nvar Margin = /** @class */ (function (_super) {\n __extends(Margin, _super);\n function Margin() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(10)\n ], Margin.prototype, \"left\", void 0);\n __decorate([\n Property(10)\n ], Margin.prototype, \"right\", void 0);\n __decorate([\n Property(10)\n ], Margin.prototype, \"top\", void 0);\n __decorate([\n Property(10)\n ], Margin.prototype, \"bottom\", void 0);\n return Margin;\n}(ChildProperty));\nexport { Margin };\n/**\n * Configures the fonts in treemap.\n */\nvar Font = /** @class */ (function (_super) {\n __extends(Font, _super);\n function Font() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Font.prototype, \"size\", void 0);\n __decorate([\n Property(null)\n ], Font.prototype, \"color\", void 0);\n __decorate([\n Property(defaultFont)\n ], Font.prototype, \"fontFamily\", void 0);\n __decorate([\n Property('Normal')\n ], Font.prototype, \"fontWeight\", void 0);\n __decorate([\n Property('Normal')\n ], Font.prototype, \"fontStyle\", void 0);\n __decorate([\n Property(1)\n ], Font.prototype, \"opacity\", void 0);\n return Font;\n}(ChildProperty));\nexport { Font };\n/**\n * To configure title of the maps.\n */\nvar CommonTitleSettings = /** @class */ (function (_super) {\n __extends(CommonTitleSettings, _super);\n function CommonTitleSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], CommonTitleSettings.prototype, \"text\", void 0);\n __decorate([\n Property('')\n ], CommonTitleSettings.prototype, \"description\", void 0);\n return CommonTitleSettings;\n}(ChildProperty));\nexport { CommonTitleSettings };\n/**\n * To configure subtitle of the maps.\n */\nvar SubTitleSettings = /** @class */ (function (_super) {\n __extends(SubTitleSettings, _super);\n function SubTitleSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({ size: '14px' }, Font)\n ], SubTitleSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Property('Center')\n ], SubTitleSettings.prototype, \"alignment\", void 0);\n return SubTitleSettings;\n}(CommonTitleSettings));\nexport { SubTitleSettings };\n/**\n * To configure title of the maps.\n */\nvar TitleSettings = /** @class */ (function (_super) {\n __extends(TitleSettings, _super);\n function TitleSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({ size: '15px' }, Font)\n ], TitleSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Property('Center')\n ], TitleSettings.prototype, \"alignment\", void 0);\n __decorate([\n Complex({}, SubTitleSettings)\n ], TitleSettings.prototype, \"subtitleSettings\", void 0);\n return TitleSettings;\n}(CommonTitleSettings));\nexport { TitleSettings };\nvar ColorMapping = /** @class */ (function (_super) {\n __extends(ColorMapping, _super);\n function ColorMapping() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], ColorMapping.prototype, \"from\", void 0);\n __decorate([\n Property(null)\n ], ColorMapping.prototype, \"to\", void 0);\n __decorate([\n Property(null)\n ], ColorMapping.prototype, \"color\", void 0);\n __decorate([\n Property(null)\n ], ColorMapping.prototype, \"label\", void 0);\n __decorate([\n Property(null)\n ], ColorMapping.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], ColorMapping.prototype, \"minOpacity\", void 0);\n __decorate([\n Property(null)\n ], ColorMapping.prototype, \"maxOpacity\", void 0);\n return ColorMapping;\n}(ChildProperty));\nexport { ColorMapping };\n/**\n * Configures the legend settings.\n */\nvar LegendSettings = /** @class */ (function (_super) {\n __extends(LegendSettings, _super);\n function LegendSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], LegendSettings.prototype, \"visible\", void 0);\n __decorate([\n Property('Default')\n ], LegendSettings.prototype, \"mode\", void 0);\n __decorate([\n Property('transparent')\n ], LegendSettings.prototype, \"background\", void 0);\n __decorate([\n Property('Circle')\n ], LegendSettings.prototype, \"shape\", void 0);\n __decorate([\n Property('')\n ], LegendSettings.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], LegendSettings.prototype, \"height\", void 0);\n __decorate([\n Complex({ size: '13px' }, Font)\n ], LegendSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Property(null)\n ], LegendSettings.prototype, \"fill\", void 0);\n __decorate([\n Property(15)\n ], LegendSettings.prototype, \"shapeWidth\", void 0);\n __decorate([\n Property(15)\n ], LegendSettings.prototype, \"shapeHeight\", void 0);\n __decorate([\n Property(10)\n ], LegendSettings.prototype, \"shapePadding\", void 0);\n __decorate([\n Property(null)\n ], LegendSettings.prototype, \"imageUrl\", void 0);\n __decorate([\n Complex({ color: '#000000', width: 0 }, Border)\n ], LegendSettings.prototype, \"border\", void 0);\n __decorate([\n Complex({ color: '#000000', width: 0 }, Border)\n ], LegendSettings.prototype, \"shapeBorder\", void 0);\n __decorate([\n Complex({}, CommonTitleSettings)\n ], LegendSettings.prototype, \"title\", void 0);\n __decorate([\n Complex({ size: '14px' }, Font)\n ], LegendSettings.prototype, \"titleStyle\", void 0);\n __decorate([\n Property('Bottom')\n ], LegendSettings.prototype, \"position\", void 0);\n __decorate([\n Property('None')\n ], LegendSettings.prototype, \"orientation\", void 0);\n __decorate([\n Property(false)\n ], LegendSettings.prototype, \"invertedPointer\", void 0);\n __decorate([\n Property('After')\n ], LegendSettings.prototype, \"labelPosition\", void 0);\n __decorate([\n Property('None')\n ], LegendSettings.prototype, \"labelDisplayMode\", void 0);\n __decorate([\n Property('Center')\n ], LegendSettings.prototype, \"alignment\", void 0);\n __decorate([\n Property({ x: 0, y: 0 })\n ], LegendSettings.prototype, \"location\", void 0);\n return LegendSettings;\n}(ChildProperty));\nexport { LegendSettings };\nvar InitialDrillSettings = /** @class */ (function (_super) {\n __extends(InitialDrillSettings, _super);\n function InitialDrillSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], InitialDrillSettings.prototype, \"groupIndex\", void 0);\n __decorate([\n Property(null)\n ], InitialDrillSettings.prototype, \"groupName\", void 0);\n return InitialDrillSettings;\n}(ChildProperty));\nexport { InitialDrillSettings };\nvar LeafItemSettings = /** @class */ (function (_super) {\n __extends(LeafItemSettings, _super);\n function LeafItemSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('#808080')\n ], LeafItemSettings.prototype, \"fill\", void 0);\n __decorate([\n Property(false)\n ], LeafItemSettings.prototype, \"autoFill\", void 0);\n __decorate([\n Complex({}, Border)\n ], LeafItemSettings.prototype, \"border\", void 0);\n __decorate([\n Property(0)\n ], LeafItemSettings.prototype, \"gap\", void 0);\n __decorate([\n Property(10)\n ], LeafItemSettings.prototype, \"padding\", void 0);\n __decorate([\n Property(1)\n ], LeafItemSettings.prototype, \"opacity\", void 0);\n __decorate([\n Property(true)\n ], LeafItemSettings.prototype, \"showLabels\", void 0);\n __decorate([\n Property(null)\n ], LeafItemSettings.prototype, \"labelPath\", void 0);\n __decorate([\n Property(null)\n ], LeafItemSettings.prototype, \"labelFormat\", void 0);\n __decorate([\n Property('TopLeft')\n ], LeafItemSettings.prototype, \"labelPosition\", void 0);\n __decorate([\n Complex({ color: null, size: '12px' }, Font)\n ], LeafItemSettings.prototype, \"labelStyle\", void 0);\n __decorate([\n Property(null)\n ], LeafItemSettings.prototype, \"labelTemplate\", void 0);\n __decorate([\n Property('Center')\n ], LeafItemSettings.prototype, \"templatePosition\", void 0);\n __decorate([\n Property('Trim')\n ], LeafItemSettings.prototype, \"interSectAction\", void 0);\n __decorate([\n Collection([], ColorMapping)\n ], LeafItemSettings.prototype, \"colorMapping\", void 0);\n return LeafItemSettings;\n}(ChildProperty));\nexport { LeafItemSettings };\nvar TooltipSettings = /** @class */ (function (_super) {\n __extends(TooltipSettings, _super);\n function TooltipSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], TooltipSettings.prototype, \"visible\", void 0);\n __decorate([\n Property('')\n ], TooltipSettings.prototype, \"template\", void 0);\n __decorate([\n Property(null)\n ], TooltipSettings.prototype, \"format\", void 0);\n __decorate([\n Property('#000816')\n ], TooltipSettings.prototype, \"fill\", void 0);\n __decorate([\n Property(0.75)\n ], TooltipSettings.prototype, \"opacity\", void 0);\n __decorate([\n Property(['Circle'])\n ], TooltipSettings.prototype, \"markerShapes\", void 0);\n __decorate([\n Complex({}, Border)\n ], TooltipSettings.prototype, \"border\", void 0);\n __decorate([\n Complex({ fontFamily: defaultFont, size: '13px' }, Font)\n ], TooltipSettings.prototype, \"textStyle\", void 0);\n return TooltipSettings;\n}(ChildProperty));\nexport { TooltipSettings };\nvar SelectionSettings = /** @class */ (function (_super) {\n __extends(SelectionSettings, _super);\n function SelectionSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], SelectionSettings.prototype, \"enable\", void 0);\n __decorate([\n Property('#808080')\n ], SelectionSettings.prototype, \"fill\", void 0);\n __decorate([\n Property('0.5')\n ], SelectionSettings.prototype, \"opacity\", void 0);\n __decorate([\n Complex({}, Border)\n ], SelectionSettings.prototype, \"border\", void 0);\n __decorate([\n Property('Item')\n ], SelectionSettings.prototype, \"mode\", void 0);\n return SelectionSettings;\n}(ChildProperty));\nexport { SelectionSettings };\nvar HighlightSettings = /** @class */ (function (_super) {\n __extends(HighlightSettings, _super);\n function HighlightSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], HighlightSettings.prototype, \"enable\", void 0);\n __decorate([\n Property('#808080')\n ], HighlightSettings.prototype, \"fill\", void 0);\n __decorate([\n Property('0.5')\n ], HighlightSettings.prototype, \"opacity\", void 0);\n __decorate([\n Complex({}, Border)\n ], HighlightSettings.prototype, \"border\", void 0);\n __decorate([\n Property('Item')\n ], HighlightSettings.prototype, \"mode\", void 0);\n return HighlightSettings;\n}(ChildProperty));\nexport { HighlightSettings };\n/**\n * Options for customizing the tree map levels.\n */\nvar LevelSettings = /** @class */ (function (_super) {\n __extends(LevelSettings, _super);\n function LevelSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], LevelSettings.prototype, \"groupPath\", void 0);\n __decorate([\n Property(0)\n ], LevelSettings.prototype, \"groupGap\", void 0);\n __decorate([\n Property(10)\n ], LevelSettings.prototype, \"groupPadding\", void 0);\n __decorate([\n Complex({}, Border)\n ], LevelSettings.prototype, \"border\", void 0);\n __decorate([\n Property('#808080')\n ], LevelSettings.prototype, \"fill\", void 0);\n __decorate([\n Property(false)\n ], LevelSettings.prototype, \"autoFill\", void 0);\n __decorate([\n Property(1)\n ], LevelSettings.prototype, \"opacity\", void 0);\n __decorate([\n Property(true)\n ], LevelSettings.prototype, \"showHeader\", void 0);\n __decorate([\n Property(20)\n ], LevelSettings.prototype, \"headerHeight\", void 0);\n __decorate([\n Property(null)\n ], LevelSettings.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property(null)\n ], LevelSettings.prototype, \"headerFormat\", void 0);\n __decorate([\n Property('Near')\n ], LevelSettings.prototype, \"headerAlignment\", void 0);\n __decorate([\n Complex({ color: null, size: '13px' }, Font)\n ], LevelSettings.prototype, \"headerStyle\", void 0);\n __decorate([\n Property('TopLeft')\n ], LevelSettings.prototype, \"templatePosition\", void 0);\n __decorate([\n Collection([], ColorMapping)\n ], LevelSettings.prototype, \"colorMapping\", void 0);\n return LevelSettings;\n}(ChildProperty));\nexport { LevelSettings };\n","import { Rect, itemsToOrder, TextOption, measureText, textTrim, hide, wordWrap, textWrap, getTemplateFunction, convertElement, findLabelLocation, PathOption, textFormatter, colorNameToHex, convertHexToColor, colorMap, measureElement, convertToContainer, convertToRect, getShortestEdge, getArea, orderByArea, isParentItem } from '../utils/helper';\nimport { isNullOrUndefined, createElement, extend } from '@syncfusion/ej2-base';\nimport { Location, findChildren, renderTextElement } from '../utils/helper';\nimport { itemRendering } from '../model/constants';\n/**\n * To calculate and render the shape layer\n */\nvar LayoutPanel = /** @class */ (function () {\n function LayoutPanel(treemap) {\n this.treemap = treemap;\n }\n /* tslint:disable:no-string-literal */\n LayoutPanel.prototype.processLayoutPanel = function () {\n var data;\n var totalRect;\n if (this.treemap.levelsOfData && this.treemap.levelsOfData.length > 0) {\n data = (!isNullOrUndefined(this.treemap.initialDrillDown.groupIndex) &&\n !isNullOrUndefined(this.treemap.initialDrillDown.groupName)) ?\n this.getDrilldownData(this.treemap.levelsOfData[0], [])[0] : this.treemap.levelsOfData[0];\n totalRect = extend({}, this.treemap.areaRect, totalRect, false);\n this.calculateLayoutItems(data || this.treemap.levelsOfData[0], totalRect);\n this.renderLayoutItems(data || this.treemap.levelsOfData[0]);\n }\n };\n LayoutPanel.prototype.getDrilldownData = function (data, drillData) {\n var treemap = this.treemap;\n var newData = {};\n var child = findChildren(data)['values'];\n if (child && child.length > 0 && drillData.length === 0) {\n for (var i = 0; i < child.length; i++) {\n if (child[i]['groupIndex'] === treemap.initialDrillDown.groupIndex &&\n child[i]['name'] === treemap.initialDrillDown.groupName) {\n child[i]['isDrilled'] = true;\n newData[child[i]['groupName']] = [child[i]];\n drillData.push(newData);\n }\n }\n for (var j = 0; j < child.length; j++) {\n this.getDrilldownData(child[j], drillData);\n }\n }\n return drillData;\n };\n LayoutPanel.prototype.calculateLayoutItems = function (data, rect) {\n this.renderItems = [];\n this.parentData = [];\n if (!isNullOrUndefined(this.treemap.weightValuePath)) {\n if (this.treemap.layoutType.indexOf('SliceAndDice') > -1) {\n this.computeSliceAndDiceDimensional(data, rect);\n }\n else {\n rect.height = rect.height + rect.y;\n rect.width = rect.width + rect.x;\n this.computeSquarifyDimensional(data, rect);\n }\n }\n };\n LayoutPanel.prototype.computeSliceAndDiceDimensional = function (data, coords) {\n var leafItem = this.treemap.leafItemSettings;\n var rect;\n var groups = this.treemap.levels;\n var groupIndex;\n var isLeafItem = false;\n var children = findChildren(data)['values'];\n var gap;\n var headerHeight;\n if (children && children.length > 0) {\n this.sliceAndDiceProcess(children, coords);\n if (this.treemap.levels.length > 0) {\n for (var i = 0; i < children.length; i++) {\n groupIndex = children[i]['groupIndex'];\n isLeafItem = (groups.length === 0 || groupIndex === groups.length);\n gap = isLeafItem ? leafItem.gap : groups[groupIndex].groupGap;\n headerHeight = groups.length === 0 ? 0 : groups[groupIndex] ? groups[groupIndex].showHeader ?\n groups[groupIndex].headerHeight : 0 : groups[groupIndex - 1].showHeader ? groups[groupIndex - 1].headerHeight : 0;\n rect = children[i]['rect'];\n rect = new Rect(rect.x + (gap / 2), rect.y + (headerHeight + (gap / 2)), rect.width - gap, Math.abs(rect.height - (gap + headerHeight)));\n this.computeSliceAndDiceDimensional(children[i], rect);\n }\n }\n }\n return data;\n };\n LayoutPanel.prototype.sliceAndDiceProcess = function (processData, rect) {\n var parentArea = rect.height * rect.width;\n var levels = this.treemap.levels;\n var childValue;\n var alottedValue = 0;\n var totalWeight = 0;\n processData.forEach(function (data) { totalWeight += data['weight']; });\n processData.forEach(function (child) {\n child['weightArea'] = parentArea * child['weight'] / totalWeight;\n });\n var isHorizontal = (this.treemap.layoutType === 'SliceAndDiceAuto') ? (rect.width > rect.height) :\n (this.treemap.layoutType === 'SliceAndDiceHorizontal');\n processData.sort(itemsToOrder);\n for (var i = 0; i < processData.length; i++) {\n var item = processData[i];\n item['isLeafItem'] = (levels.length === 0) || ((this.treemap.isHierarchicalData ||\n isNullOrUndefined(this.treemap.leafItemSettings.labelPath)) ?\n item['groupIndex'] === levels.length - 1 : item['groupIndex'] === this.treemap.levels.length);\n if (isHorizontal) {\n childValue = ((parentArea / totalWeight) * processData[i]['weight']) / rect.height;\n if (alottedValue <= rect.width) {\n processData[i]['rect'] = new Rect(alottedValue + rect.x, rect.y, childValue, rect.height);\n }\n }\n else {\n childValue = ((parentArea / totalWeight) * processData[i]['weight']) / rect.width;\n if (alottedValue <= rect.height) {\n processData[i]['rect'] = new Rect(rect.x, alottedValue + rect.y, rect.width, childValue);\n }\n }\n alottedValue += childValue;\n this.renderItems.push(processData[i]);\n }\n };\n LayoutPanel.prototype.computeSquarifyDimensional = function (data, coords) {\n var leaf = this.treemap.leafItemSettings;\n var rect;\n var levels = this.treemap.levels;\n var groupIndex;\n var isLeafItem = false;\n var item;\n var child = findChildren(data)['values'];\n var index;\n var gap;\n var padding;\n var headerHeight;\n if (child && child.length > 0) {\n if (this.parentData.length === 0) {\n this.parentData = [];\n this.parentData.push(child);\n }\n this.calculateChildrenLayout(data, child, coords);\n if (this.treemap.levels.length > 0) {\n for (var i = 0; i < child.length; i++) {\n item = child[i];\n index = item['groupIndex'];\n rect = item['rect'];\n gap = (item['isLeafItem'] ? leaf.gap : levels[index].groupGap) / 2;\n padding = (item['isLeafItem'] ? leaf.padding : levels[index].groupPadding) / 2;\n headerHeight = this.treemap.isHierarchicalData ? index === 0 && item['isLeafItem'] ? 0 : levels[index] ?\n levels[index].showHeader ? levels[index].headerHeight : 0 : 0 : (levels.length === 0) ? 0 : levels[index] ?\n levels[index].showHeader ? levels[index].headerHeight : 0 : 0;\n rect = new Rect(rect.x + padding, rect.y + (headerHeight + padding), rect.width - padding, rect.height - padding);\n if (!item['isLeafItem'] && item['weight'] > 0) {\n this.computeSquarifyDimensional(child[i], rect);\n }\n }\n }\n }\n };\n LayoutPanel.prototype.calculateChildrenLayout = function (parent, children, coords) {\n this.computeTotalArea(children, getArea(coords));\n children.sort(orderByArea);\n this.performRowsLayout(children, [], coords, []);\n };\n LayoutPanel.prototype.performRowsLayout = function (data, currentRow, rect, stack) {\n var dataLength = data.length;\n if (dataLength === 0) {\n var newCoordinates = this.getCoordinates(currentRow, rect);\n var newStack = stack.concat(newCoordinates);\n return newStack;\n }\n var width = getShortestEdge(rect);\n var nextDatum = data[0];\n var restData = data.slice(1, dataLength);\n if (this.aspectRatio(currentRow, nextDatum, width)) {\n var newRow = currentRow.concat(nextDatum);\n return this.performRowsLayout(restData, newRow, rect, stack);\n }\n else {\n var currentRowLength = currentRow.length;\n var valueSum = 0;\n for (var i = 0; i < currentRowLength; i += 1) {\n valueSum += currentRow[i]['itemArea'];\n }\n var newContainer = this.cutArea(rect, valueSum);\n var newCoordinates = this.getCoordinates(currentRow, rect);\n var newStack = stack.concat(newCoordinates);\n return this.performRowsLayout(data, [], newContainer, newStack);\n }\n };\n LayoutPanel.prototype.aspectRatio = function (currentRow, nextDatum, length) {\n if (currentRow.length === 0) {\n return true;\n }\n else {\n var newRow = currentRow.concat(nextDatum);\n var currentMaxAspectRatio = this.findMaxAspectRatio(currentRow, length);\n var newMaxAspectRatio = this.findMaxAspectRatio(newRow, length);\n return (currentMaxAspectRatio >= newMaxAspectRatio);\n }\n };\n LayoutPanel.prototype.findMaxAspectRatio = function (row, length) {\n var rowLength = row.length;\n var minArea = Infinity;\n var maxArea = -Infinity;\n var sumArea = 0;\n for (var i = 0; i < rowLength; i += 1) {\n var area = row[i]['itemArea'];\n if (area < minArea) {\n minArea = area;\n }\n if (area > maxArea) {\n maxArea = area;\n }\n sumArea += area;\n }\n var result = Math.max((Math.pow(length, 2)) * maxArea / (Math.pow(sumArea, 2)), (Math.pow(sumArea, 2)) /\n ((Math.pow(length, 2)) * minArea));\n return result;\n };\n LayoutPanel.prototype.cutArea = function (rect, area) {\n var newContainer = convertToContainer(rect);\n var width = newContainer.width;\n var height = newContainer.height;\n var xOffset = newContainer.x;\n var yOffset = newContainer.y;\n if (width >= height) {\n var areaWidth = area / height;\n var newWidth = width - areaWidth;\n var container = {\n x: xOffset + areaWidth,\n y: yOffset,\n width: newWidth,\n height: height,\n };\n return convertToRect(container);\n }\n else {\n var areaHeight = area / width;\n var newHeight = height - areaHeight;\n var container = {\n x: xOffset,\n y: yOffset + areaHeight,\n width: width,\n height: newHeight,\n };\n return convertToRect(container);\n }\n };\n LayoutPanel.prototype.getCoordinates = function (row, rect) {\n var container = convertToContainer(rect);\n var headerHeight;\n var width = container.width;\n var height = container.height;\n var xOffset = container.x;\n var yOffset = container.y;\n var rowLength = row.length;\n var levels = this.treemap.levels;\n var leaf = this.treemap.leafItemSettings;\n var index;\n var valueSum = 0;\n for (var i = 0; i < rowLength; i += 1) {\n valueSum += row[i]['itemArea'];\n }\n var areaWidth = valueSum / height;\n var areaHeight = valueSum / width;\n var subXOffset = xOffset;\n var subYOffset = yOffset;\n var padding;\n var coordinates = [];\n var isParent;\n var gap;\n var parentRect;\n for (var i = 0; i < rowLength; i += 1) {\n var item = row[i];\n index = item['groupIndex'];\n item['isLeafItem'] = (levels.length === 0) || (this.treemap.isHierarchicalData ? index === levels.length :\n isNullOrUndefined(leaf.labelPath) ? false : index === levels.length);\n isParent = isParentItem(this.parentData[0], item);\n parentRect = isParent ? this.treemap.areaRect : item['parent'].rect;\n padding = item['isLeafItem'] ? leaf.padding : levels[index].groupPadding;\n if (width >= height) {\n var y1 = subYOffset + item['itemArea'] / areaWidth;\n item['rect'] = {\n x: subXOffset,\n y: subYOffset,\n width: subXOffset + areaWidth,\n height: y1,\n };\n subYOffset = y1;\n }\n else {\n var x1 = subXOffset + item['itemArea'] / areaHeight;\n item['rect'] = {\n x: subXOffset,\n y: subYOffset,\n width: x1,\n height: subYOffset + areaHeight,\n };\n subXOffset = x1;\n }\n if (item['weight'] > 0 && (isParent || (Math.round(rect.y + (padding / 2)) <=\n Math.round(parentRect.y + (parentRect.height - parentRect.y)) && Math.round(rect.x + (padding / 2)) <=\n Math.round(parentRect.x + (parentRect.width - parentRect.x))))) {\n this.renderItems.push(item);\n coordinates.push(item);\n }\n }\n return coordinates;\n };\n LayoutPanel.prototype.computeTotalArea = function (data, area) {\n var dataLength = data.length;\n var dataSum = 0;\n var result = [];\n for (var i = 0; i < dataLength; i += 1) {\n var dataLength_1 = data.length;\n var dataSum_1 = 0;\n for (var i_1 = 0; i_1 < dataLength_1; i_1 += 1) {\n dataSum_1 += data[i_1]['weight'];\n }\n var multiplier = area / dataSum_1;\n var datum = void 0;\n for (var j = 0; j < dataLength_1; j++) {\n datum = data[j];\n datum['itemArea'] = datum['weight'] * multiplier;\n result.push(datum);\n }\n }\n return result;\n };\n /* tslint:disable-next-line:max-func-body-length */\n LayoutPanel.prototype.renderLayoutItems = function (renderData) {\n var textCollection = [];\n var position;\n var treeMap = this.treemap;\n var colorMapping;\n var txtVisible;\n var getItemColor;\n var eventArgs;\n this.renderer = treeMap.renderer;\n var trimHeader;\n var textLocation = new Location(0, 0);\n var pathOptions;\n var elementID = treeMap.element.id;\n var index;\n var templatePosition;\n var mode = treeMap.layoutType;\n var rect;\n var format;\n var interSectAction = this.treemap.leafItemSettings.interSectAction;\n var textSize;\n var fill;\n var item;\n var renderText;\n var opacity;\n var padding = 5;\n var rectPath = '';\n var isRender;\n var secondaryEle = document.getElementById(treeMap.element.id + '_Secondary_Element');\n var groupId;\n var textOptions;\n var templateEle;\n var gap;\n var textStyle;\n var levels = treeMap.levels;\n this.layoutGroup = this.renderer.createGroup({ id: elementID + '_TreeMap_' + mode + '_Layout' });\n var itemGroup;\n var level;\n var template;\n var border;\n var templateGroup = createElement('div', {\n id: treeMap.element.id + '_Label_Template_Group',\n className: 'template',\n styles: 'overflow: hidden; position: absolute;pointer-events: none;' +\n 'top:' + treeMap.areaRect.y + 'px;' +\n 'left:' + treeMap.areaRect.x + 'px;' +\n 'height:' + treeMap.areaRect.height + 'px;' +\n 'width:' + treeMap.areaRect.width + 'px;'\n });\n var isLeafItem = false;\n var leaf = treeMap.leafItemSettings;\n var childItems;\n for (var i = 0; i < this.renderItems.length; i++) {\n item = this.renderItems[i];\n index = item['groupIndex'];\n rect = item['rect'];\n isLeafItem = item['isLeafItem'];\n groupId = elementID + '_Level_Index_' + index + '_Item_Index_' + i;\n itemGroup = this.renderer.createGroup({ id: groupId + '_Group' });\n gap = (isLeafItem ? leaf.gap : levels[index].groupGap) / 2;\n if (treeMap.layoutType === 'Squarified') {\n rect.width = Math.abs(rect.x - rect.width) - gap;\n rect.height = Math.abs(rect.y - rect.height) - gap;\n }\n colorMapping = isLeafItem ? leaf.colorMapping : levels[index].colorMapping;\n getItemColor = this.getItemColor(isLeafItem, item);\n fill = getItemColor['fill'];\n opacity = getItemColor['opacity'];\n format = isLeafItem ? leaf.labelFormat : (levels[index]).headerFormat;\n txtVisible = isLeafItem ? leaf.showLabels : (levels[index]).showHeader;\n renderText = textFormatter(format, item['data'], this.treemap) || item['name'];\n childItems = findChildren(item)['values'];\n renderText = !isLeafItem && childItems && childItems.length > 0 && this.treemap.enableDrillDown ?\n !item['isDrilled'] ? '[+] ' + renderText : '[-] ' + renderText : renderText;\n textStyle = (isLeafItem ? leaf.labelStyle : levels[index].headerStyle);\n border = isLeafItem ? leaf.border : levels[index].border;\n position = !isLeafItem ? (levels[index].headerAlignment) === 'Near' ? 'TopLeft' : (levels[index].headerAlignment) === 'Center' ?\n 'TopCenter' : 'TopRight' : leaf.labelPosition;\n templatePosition = isLeafItem ? leaf.templatePosition : levels[index].templatePosition;\n template = isLeafItem ? leaf.labelTemplate : levels[index].headerTemplate;\n item['options'] = { border: border, opacity: opacity, fill: fill };\n eventArgs = {\n cancel: false, name: itemRendering, treemap: this.treemap,\n currentItem: item, RenderItems: this.renderItems, options: item['options']\n };\n this.treemap.trigger(itemRendering, eventArgs);\n if (!eventArgs.cancel) {\n rectPath = ' M ' + rect.x + ' ' + rect.y + ' L ' + (rect.x + rect.width) + ' ' + rect.y +\n ' L ' + (rect.x + rect.width) + ' ' + (rect.y + rect.height) + ' L ' + rect.x + ' ' + (rect.y + rect.height) + 'z';\n pathOptions = new PathOption(groupId + '_RectPath', fill, border.width, border.color, opacity, null, rectPath);\n var path = this.renderer.drawPath(pathOptions);\n itemGroup.appendChild(path);\n if (txtVisible) {\n this.renderItemText(renderText.toString(), itemGroup, textStyle, rect, interSectAction, groupId, fill, position);\n }\n if (template) {\n templateEle = this.renderTemplate(secondaryEle, groupId, rect, templatePosition, template, item);\n templateGroup.appendChild(templateEle);\n }\n itemGroup.setAttribute('aria-label', item['name']);\n itemGroup.setAttribute('tabindex', (this.treemap.tabIndex + i + 2).toString());\n this.layoutGroup.appendChild(itemGroup);\n }\n }\n if (templateGroup.childNodes.length > 0) {\n secondaryEle.appendChild(templateGroup);\n }\n this.treemap.svgObject.appendChild(this.layoutGroup);\n };\n LayoutPanel.prototype.renderItemText = function (text, parentElement, textStyle, rect, interSectAction, groupId, fill, position) {\n var level;\n var textOptions;\n var headerPosition;\n var secondaryEle = document.getElementById(this.treemap.element.id + '_Secondary_Element');\n var leaf = this.treemap.leafItemSettings;\n var padding = 5;\n var textSize;\n var textLocation;\n var textCollection = [];\n var customText;\n var templateEle;\n var tspanText = [];\n var height = 0;\n var textName;\n textCollection = ((text.indexOf('
    ')) !== -1) ? text.split('
    ') : null;\n customText = this.labelInterSectAction(rect, text, textStyle, interSectAction);\n textSize = measureText(textCollection && textCollection[0] || customText[0], textStyle);\n textLocation = findLabelLocation(rect, position, textSize, 'Text', this.treemap);\n if (!isNullOrUndefined(textCollection)) {\n var collection = [];\n var texts = null;\n var maxNumber = [];\n for (var i = 0; i < textCollection.length; i++) {\n texts = textTrim((rect.width - 5), textCollection[i], textStyle);\n textSize = measureText(texts, textStyle);\n height += textSize.height;\n maxNumber.push(textSize.width);\n collection.push(texts);\n }\n customText = collection;\n textSize.width = Math.max.apply(null, maxNumber);\n textSize.height = height;\n }\n if (interSectAction === 'WrapByWord' || interSectAction === 'Wrap' || interSectAction === 'Trim') {\n for (var j = 0; j < customText.length; j++) {\n textSize = measureText(customText[j], textStyle);\n height += textSize.height;\n if ((rect.height - padding) > height) {\n tspanText.push(customText[j]);\n }\n }\n if (interSectAction === 'Wrap' && customText.length !== tspanText.length && tspanText.length) {\n var collectionLength = tspanText.length - 1;\n var stringText = tspanText[collectionLength];\n stringText = stringText.substring(0, (stringText.length - 1)) + '...';\n tspanText.splice(collectionLength);\n if (stringText !== '...') {\n tspanText.push(stringText);\n }\n }\n }\n else {\n textName = customText;\n tspanText.push(textName);\n }\n textOptions = new TextOption(groupId + '_Text', textLocation.x, textLocation.y, 'start', tspanText);\n renderTextElement(textOptions, textStyle, textStyle.color || this.getSaturatedColor(fill), parentElement);\n };\n LayoutPanel.prototype.getItemColor = function (isLeafItem, item) {\n var treemap = this.treemap;\n var itemFill = isLeafItem ? treemap.leafItemSettings.fill : treemap.levels[item['groupIndex']].fill;\n var itemOpacity = isLeafItem ? treemap.leafItemSettings.opacity : treemap.levels[item['groupIndex']].opacity;\n var parentData = findChildren(treemap.levelsOfData[0])['values'];\n var colorMapping = isLeafItem ? treemap.leafItemSettings.colorMapping :\n treemap.levels[item['groupIndex']].colorMapping;\n if (colorMapping.length > 0) {\n var option = colorMap(colorMapping, item['data'][this.treemap.equalColorValuePath], item['data'][this.treemap.rangeColorValuePath], item['data'][this.treemap.weightValuePath]);\n itemFill = option['fill'];\n itemOpacity = option['opacity'];\n }\n else {\n for (var i = 0; i < parentData.length; i++) {\n if (parentData[i]['levelOrderName'] === item['levelOrderName'].split('_')[0]) {\n itemFill = treemap.palette.length > 0 ? treemap.palette[i % treemap.palette.length] : itemFill;\n }\n }\n }\n return { fill: itemFill, opacity: itemOpacity };\n };\n /**\n * To find saturated color for datalabel\n */\n LayoutPanel.prototype.getSaturatedColor = function (color) {\n var saturatedColor = color;\n saturatedColor = (saturatedColor === 'transparent') ? window.getComputedStyle(document.body, null).backgroundColor : saturatedColor;\n var rgbValue = convertHexToColor(colorNameToHex(saturatedColor));\n var contrast = Math.round((rgbValue.r * 299 + rgbValue.g * 587 + rgbValue.b * 114) / 1000);\n return contrast >= 128 ? 'black' : 'white';\n };\n LayoutPanel.prototype.renderTemplate = function (secondaryEle, groupId, rect, position, template, item) {\n var templateElement;\n var labelEle;\n var templateSize;\n var templateFn;\n var templateLocation;\n var keys = Object.keys(item['data']);\n for (var i = 0; i < keys.length; i++) {\n template = template.replace(new RegExp('{{:' + keys[i] + '}}', 'g'), item['data'][keys[i].toString()]);\n }\n templateFn = getTemplateFunction(template);\n templateElement = templateFn(this.treemap);\n labelEle = convertElement(templateElement, groupId + '_Template', item['data']);\n templateSize = measureElement(labelEle, secondaryEle);\n templateLocation = findLabelLocation(rect, position, templateSize, 'Template', this.treemap);\n labelEle.style.left = templateLocation.x + 'px';\n labelEle.style.top = templateLocation.y + 'px';\n return labelEle;\n };\n LayoutPanel.prototype.labelInterSectAction = function (rect, text, textStyle, alignment) {\n var textValue;\n var maxWidth = rect.width - 10;\n switch (alignment) {\n case 'Hide':\n textValue = [hide(maxWidth, rect.height, text, textStyle)];\n break;\n case 'Trim':\n textValue = [textTrim((maxWidth + 3), text, textStyle)];\n break;\n case 'WrapByWord':\n textValue = wordWrap(maxWidth, text, textStyle);\n break;\n case 'Wrap':\n textValue = textWrap(maxWidth, text, textStyle);\n break;\n }\n return textValue;\n };\n return LayoutPanel;\n}());\nexport { LayoutPanel };\n","import { print as printWindow, createElement, isNullOrUndefined, Browser } from '@syncfusion/ej2-base';\nimport { getElement } from '../utils/helper';\nimport { beforePrint } from '../model/constants';\nimport { PdfPageOrientation, PdfDocument, PdfBitmap } from '@syncfusion/ej2-pdf-export';\n/**\n * Annotation Module handles the Annotation for Maps\n */\nvar ExportUtils = /** @class */ (function () {\n /**\n * Constructor for Maps\n * @param control\n */\n function ExportUtils(control) {\n this.control = control;\n }\n /**\n * To print the Maps\n * @param elements\n */\n ExportUtils.prototype.print = function (elements) {\n this.printWindow = window.open('', 'print', 'height=' + window.outerHeight + ',width=' + window.outerWidth + ',tabbar=no');\n this.printWindow.moveTo(0, 0);\n this.printWindow.resizeTo(screen.availWidth, screen.availHeight);\n var argsData = {\n cancel: false, htmlContent: this.getHTMLContent(elements), name: beforePrint\n };\n this.control.trigger(beforePrint, argsData);\n if (!argsData.cancel) {\n printWindow(argsData.htmlContent, this.printWindow);\n }\n };\n /**\n * To get the html string of the Maps\n * @param elements\n * @private\n */\n ExportUtils.prototype.getHTMLContent = function (elements) {\n var div = createElement('div');\n if (elements) {\n if (elements instanceof Array) {\n elements.forEach(function (value) {\n div.appendChild(getElement(value).cloneNode(true));\n });\n }\n else if (elements instanceof Element) {\n div.appendChild(elements.cloneNode(true));\n }\n else {\n div.appendChild(getElement(elements).cloneNode(true));\n }\n }\n else {\n div.appendChild(this.control.element.cloneNode(true));\n }\n return div;\n };\n /**\n * To export the file as image/svg format\n * @param type\n * @param fileName\n */\n ExportUtils.prototype.export = function (type, fileName, orientation) {\n var _this = this;\n var element = createElement('canvas', {\n id: 'ej2-canvas',\n attrs: {\n 'width': this.control.availableSize.width.toString(),\n 'height': this.control.availableSize.height.toString()\n }\n });\n var isDownload = !(Browser.userAgent.toString().indexOf('HeadlessChrome') > -1);\n orientation = isNullOrUndefined(orientation) ? PdfPageOrientation.Landscape : orientation;\n var svgData = '' +\n this.control.svgObject.outerHTML +\n '';\n var url = window.URL.createObjectURL(new Blob(type === 'SVG' ? [svgData] :\n [(new XMLSerializer()).serializeToString(this.control.svgObject)], { type: 'image/svg+xml' }));\n if (type === 'SVG') {\n this.triggerDownload(fileName, type, url, isDownload);\n }\n else {\n var image_1 = new Image();\n var ctx_1 = element.getContext('2d');\n image_1.onload = (function () {\n ctx_1.drawImage(image_1, 0, 0);\n window.URL.revokeObjectURL(url);\n if (type === 'PDF') {\n var document_1 = new PdfDocument();\n var imageString = element.toDataURL('image/jpeg').replace('image/jpeg', 'image/octet-stream');\n document_1.pageSettings.orientation = orientation;\n imageString = imageString.slice(imageString.indexOf(',') + 1);\n document_1.pages.add().graphics.drawImage(new PdfBitmap(imageString), 0, 0, (_this.control.availableSize.width - 60), _this.control.availableSize.height);\n if (isDownload) {\n document_1.save(fileName + '.pdf');\n document_1.destroy();\n }\n }\n else {\n _this.triggerDownload(fileName, type, element.toDataURL('image/png').replace('image/png', 'image/octet-stream'), isDownload);\n }\n });\n image_1.src = url;\n }\n };\n /**\n * To trigger the download element\n * @param fileName\n * @param type\n * @param url\n */\n ExportUtils.prototype.triggerDownload = function (fileName, type, url, isDownload) {\n createElement('a', {\n attrs: {\n 'download': fileName + '.' + type.toLocaleLowerCase(),\n 'href': url\n }\n }).dispatchEvent(new MouseEvent(isDownload ? 'click' : 'move', {\n view: window,\n bubbles: false,\n cancelable: true\n }));\n };\n return ExportUtils;\n}());\nexport { ExportUtils };\n","/**\n * Tree Map Component\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, NotifyPropertyChanges, Property, extend, Ajax } from '@syncfusion/ej2-base';\nimport { Complex, Collection } from '@syncfusion/ej2-base';\nimport { Event, Internationalization } from '@syncfusion/ej2-base';\nimport { SvgRenderer, isNullOrUndefined, createElement, EventHandler, Browser, remove } from '@syncfusion/ej2-base';\nimport { Border, Margin, TitleSettings, LegendSettings, InitialDrillSettings } from './model/base';\nimport { SelectionSettings, TooltipSettings, LevelSettings, LeafItemSettings, HighlightSettings, } from './model/base';\nimport { Size, stringToNumber, RectOption, Rect, textTrim, measureText, findChildren, removeClassNames } from '../treemap/utils/helper';\nimport { findPosition, TextOption, renderTextElement, isContainsData, TreeMapAjax } from '../treemap/utils/helper';\nimport { load, loaded, drillStart, drillEnd } from '../treemap/model/constants';\nimport { itemClick, itemMove, click, mouseMove, resize } from '../treemap/model/constants';\nimport { LayoutPanel } from './layout/render-panel';\nimport { ExportUtils } from '../treemap/utils/export';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\n/**\n * Represents the TreeMap control.\n * ```html\n *
    \n * \n * ```\n */\nvar TreeMap = /** @class */ (function (_super) {\n __extends(TreeMap, _super);\n /**s\n * Constructor for TreeMap component.\n */\n function TreeMap(options, element) {\n var _this = _super.call(this, options, element) || this;\n /** @private */\n _this.orientation = 'Horizontal';\n /** @private */\n _this.drilledItems = [];\n /** @private */\n _this.isHierarchicalData = false;\n return _this;\n }\n TreeMap.prototype.preRender = function () {\n this.trigger(load, { treemap: this });\n this.initPrivateVariable();\n this.unWireEVents();\n this.createSvg();\n this.wireEVents();\n this.setCulture();\n };\n TreeMap.prototype.render = function () {\n this.themeEffect();\n this.createSecondaryElement();\n this.addTabIndex();\n this.renderBorder();\n this.renderTitle(this.titleSettings, 'title', null, null);\n this.processDataManager();\n };\n /* tslint:disable:no-string-literal */\n /* tslint:disable:no-eval */\n TreeMap.prototype.processDataManager = function () {\n var _this = this;\n var dataModule;\n var queryModule;\n var ajaxModule;\n var localAjax;\n if (this.dataSource instanceof DataManager) {\n dataModule = this.dataSource;\n queryModule = this.query instanceof Query ? this.query : new Query();\n var dataManager = dataModule.executeQuery(queryModule);\n dataManager.then(function (e) {\n _this.dataSource = e['result'];\n _this.renderTreeMapElements();\n });\n }\n else if (this.dataSource instanceof TreeMapAjax) {\n localAjax = this.dataSource;\n ajaxModule = new Ajax(localAjax.dataOptions, localAjax.type, localAjax.async, localAjax.contentType);\n ajaxModule.onSuccess = function (args) {\n _this.dataSource = JSON.parse('[' + args + ']')[0];\n _this.renderTreeMapElements();\n };\n ajaxModule.send(localAjax.sendData);\n }\n else {\n this.renderTreeMapElements();\n }\n };\n TreeMap.prototype.renderTreeMapElements = function () {\n this.processingData();\n if (this.treeMapLegendModule && this.legendSettings.visible) {\n this.treeMapLegendModule.renderLegend();\n }\n this.layout.processLayoutPanel();\n this.element.appendChild(this.svgObject);\n this.elementChange();\n this.trigger(loaded, { treemap: this });\n };\n TreeMap.prototype.createSvg = function () {\n if (this.svgObject) {\n while (this.svgObject.childNodes.length > 0) {\n this.svgObject.removeChild(this.svgObject.firstChild);\n }\n if (!this.svgObject.hasChildNodes() && this.svgObject.parentNode) {\n remove(this.svgObject);\n }\n }\n var containerWidth = this.element.clientWidth;\n var containerHeight = this.element.clientHeight;\n this.availableSize = new Size(stringToNumber(this.width, containerWidth) || containerWidth || 600, stringToNumber(this.height, containerHeight) || containerHeight || 450);\n this.svgObject = this.renderer.createSvg({\n id: this.element.id + '_svg',\n width: this.availableSize.width,\n height: this.availableSize.height\n });\n };\n /**\n * To initilize the private varibales of treemap.\n */\n TreeMap.prototype.initPrivateVariable = function () {\n this.renderer = new SvgRenderer(this.element.id);\n this.layout = new LayoutPanel(this);\n };\n /**\n * To change font styles of map based on themes\n */\n TreeMap.prototype.themeEffect = function () {\n switch (this.theme) {\n case 'Material':\n case 'Bootstrap':\n case 'Fabric':\n this.setTextStyle('#424242');\n break;\n case 'Highcontrast':\n this.setTextStyle('#FFFFFF');\n break;\n }\n };\n TreeMap.prototype.setTextStyle = function (color) {\n this.titleSettings.textStyle.color = this.titleSettings.textStyle.color || color;\n this.titleSettings.subtitleSettings.textStyle.color = this.titleSettings.subtitleSettings.textStyle.color || color;\n this.legendSettings.textStyle.color = this.legendSettings.textStyle.color || color;\n this.legendSettings.titleStyle.color = this.legendSettings.titleStyle.color || color;\n };\n TreeMap.prototype.createSecondaryElement = function () {\n var secondaryEle = document.getElementById(this.element.id + '_Secondary_Element');\n if (secondaryEle && secondaryEle.childElementCount > 0) {\n secondaryEle.remove();\n }\n if (isNullOrUndefined(document.getElementById(this.element.id + '_Secondary_Element'))) {\n var secondaryElement = createElement('div', {\n id: this.element.id + '_Secondary_Element',\n styles: 'position: absolute;z-index:1;'\n });\n this.element.appendChild(secondaryElement);\n }\n };\n TreeMap.prototype.elementChange = function () {\n if (this.treeMapLegendModule && this.legendSettings.visible && this.treeMapLegendModule.legendGroup && this.layout.layoutGroup) {\n this.svgObject.insertBefore(this.layout.layoutGroup, this.treeMapLegendModule.legendGroup);\n }\n };\n /**\n * @private\n * Render the treemap border\n */\n TreeMap.prototype.renderBorder = function () {\n var width = this.border.width;\n var color = this.theme === 'Highcontrast' ? '#000000' : '#FFFFFF';\n this.background = this.background ? this.background : color;\n var borderElement = document.getElementById(this.element.id + '_TreeMap_Border');\n if (isNullOrUndefined(borderElement)) {\n var borderRect = new RectOption(this.element.id + '_TreeMap_Border', this.background, this.border, 1, new Rect(width / 2, width / 2, this.availableSize.width - width, this.availableSize.height - width));\n this.svgObject.appendChild(this.renderer.drawRectangle(borderRect));\n }\n else {\n borderElement.setAttribute('fill', this.background);\n }\n };\n TreeMap.prototype.renderTitle = function (title, type, bounds, groupEle) {\n var style = title.textStyle;\n var height;\n var titlePadding = 10;\n var width = (this.availableSize.width - this.margin.right - this.margin.left);\n if (title.text) {\n if (isNullOrUndefined(groupEle)) {\n groupEle = this.renderer.createGroup({ id: this.element.id + '_Title_Group' });\n }\n var trimmedTitle = textTrim(width, title.text, style);\n var elementSize = measureText(trimmedTitle, style);\n var rect = (isNullOrUndefined(bounds)) ? new Rect(this.margin.left, this.margin.top, this.availableSize.width, this.availableSize.height) : bounds;\n var location_1 = findPosition(rect, title.alignment, elementSize, type);\n var options = new TextOption(this.element.id + '_TreeMap_' + type, location_1.x, location_1.y, 'start', trimmedTitle);\n var titleBounds = new Rect(location_1.x, location_1.y, elementSize.width, elementSize.height);\n var element = renderTextElement(options, style, style.color, groupEle);\n element.setAttribute('aria-label', title.description || title.text);\n element.setAttribute('tabindex', (this.tabIndex + (type === 'title' ? 1 : 2)).toString());\n if ((type === 'title' && !title.subtitleSettings.text) || (type === 'subtitle')) {\n height = (this.availableSize.height - titleBounds.y - titlePadding - this.margin.bottom);\n this.areaRect = new Rect(this.margin.left, titleBounds.y + titlePadding, width, height);\n }\n if (type !== 'subtitle' && title.subtitleSettings.text) {\n this.renderTitle(title.subtitleSettings, 'subtitle', titleBounds, groupEle);\n }\n else {\n this.svgObject.appendChild(groupEle);\n }\n }\n else {\n height = (this.availableSize.height - this.margin.top - this.margin.bottom);\n this.areaRect = new Rect(this.margin.left, this.margin.top, width, height);\n }\n };\n TreeMap.prototype.processingData = function () {\n var _this = this;\n var path;\n this.dataSource = this.dataSource;\n if (!isNullOrUndefined(this.dataSource) && this.dataSource.length > 0 && this.weightValuePath) {\n this.levelsOfData = [];\n this.dataSource.map(function (data) {\n data[_this.weightValuePath] = (data[_this.weightValuePath]) ? data[_this.weightValuePath].toString() :\n data[_this.weightValuePath];\n });\n this.leafItemSettings.labelPath = this.leafItemSettings.labelPath || this.weightValuePath;\n this.checkIsHierarchicalData();\n if (this.levels.length === 0) {\n var data_1 = new Object();\n data_1['level'] = 0;\n path = this.leafItemSettings.labelPath;\n data_1[path] = [];\n for (var i = 0; i < this.dataSource.length; i++) {\n var child = findChildren(this.dataSource[i])['values'];\n if (this.isHierarchicalData && child && child.length > 0) {\n child.forEach(function (currentData, dataIndex) {\n if (currentData[path]) {\n data_1[path].push({\n groupIndex: 0, name: currentData[path], levelOrderName: currentData[path].toString(),\n data: currentData, weight: currentData[_this.weightValuePath]\n });\n }\n });\n }\n else {\n if (this.dataSource[i][path]) {\n data_1[path].push({\n groupIndex: 0, name: this.dataSource[i][path], levelOrderName: this.dataSource[i][path].toString(), data: this.dataSource[i],\n weight: this.dataSource[i][this.weightValuePath]\n });\n }\n }\n }\n this.levelsOfData.push(data_1);\n }\n else {\n if (this.isHierarchicalData) {\n this.hierarchyData = [];\n this.hierarchyData = extend([], this.dataSource, this.hierarchyData, true);\n for (var i = 0; i < this.hierarchyData.length; i++) {\n this.processHierarchicalData(this.hierarchyData[i], i);\n }\n this.levelsOfData = this.hierarchyData;\n }\n else {\n this.processFlatJsonData();\n if (this.levelsOfData.length > 1) {\n this.reOrderLevelData(this.levelsOfData.length - 1);\n }\n }\n path = this.levels[0].groupPath;\n }\n if (!this.isHierarchicalData) {\n this.findTotalWeight(this.levelsOfData[0][path], 'Parent');\n }\n }\n };\n TreeMap.prototype.checkIsHierarchicalData = function () {\n var child;\n this.dataSource = this.dataSource;\n for (var i = 0; i < this.dataSource.length; i++) {\n child = findChildren(this.dataSource[i])['values'];\n if (child && child.length) {\n this.isHierarchicalData = true;\n break;\n }\n else if (i === this.dataSource.length - 1) {\n this.isHierarchicalData = false;\n }\n }\n };\n TreeMap.prototype.processHierarchicalData = function (data, dataCount) {\n var _this = this;\n var childData;\n var levelData = [];\n var newData = new Object();\n var levelIndex;\n var path = this.leafItemSettings.labelPath ? this.leafItemSettings.labelPath : this.weightValuePath;\n var currentData = new Object();\n var level;\n var key;\n newData = findChildren(data);\n childData = newData ? newData['values'] : null;\n if (childData && childData.length > 0) {\n key = newData['key'];\n for (var i = 0; i < this.levels.length; i++) {\n if (key === this.levels[i].groupPath) {\n level = this.levels[i];\n levelIndex = i;\n }\n }\n for (var j = 0; j < childData.length; j++) {\n childData[j]['name'] = childData[j][path];\n childData[j]['levelOrderName'] = (levelIndex === 0 ? childData[j]['name'] :\n data['levelOrderName'] + '_' + childData[j]['name']) + '';\n childData[j]['groupIndex'] = isNullOrUndefined(levelIndex) ? this.levels.length : levelIndex;\n if (levelIndex !== 0) {\n childData[j]['parent'] = data;\n }\n childData[j]['groupName'] = key;\n childData[j]['data'] = childData[j];\n childData[j]['isDrilled'] = false;\n childData[j]['weight'] = childData[j][this.weightValuePath];\n }\n childData.forEach(function (currentData) {\n _this.processHierarchicalData(currentData, dataCount);\n });\n }\n if (dataCount === this.hierarchyData.length - 1) {\n var mainData_1 = this.hierarchyData[0][this.levels[0].groupPath];\n for (var k = 0; k < this.hierarchyData.length; k++) {\n childData = findChildren(this.hierarchyData[k])['values'];\n if (k !== 0 && childData) {\n childData.forEach(function (currentData) { mainData_1.push(currentData); });\n this.hierarchyData.splice(k, 1);\n k -= 1;\n }\n }\n mainData_1 = this.hierarchyData[0][this.levels[0].groupPath];\n for (var l = 0; l < mainData_1.length; l++) {\n newData[this.levels[0].groupPath] = mainData_1;\n mainData_1[l]['parent'] = newData;\n }\n }\n };\n /**\n * Handles the print method for chart control.\n */\n TreeMap.prototype.print = function (id) {\n var exportChart = new ExportUtils(this);\n exportChart.print(id);\n };\n /**\n * Handles the export method for chart control.\n * @param type\n * @param fileName\n */\n TreeMap.prototype.export = function (type, fileName, orientation) {\n var exportMap = new ExportUtils(this);\n exportMap.export(type, fileName, orientation);\n };\n /* tslint:disable:no-string-literal */\n TreeMap.prototype.processFlatJsonData = function () {\n this.dataSource = this.dataSource;\n var groupPath;\n var childGroupPath;\n var orderNames = [];\n var process = false;\n for (var i = 0; i < this.levels.length + 1; i++) {\n groupPath = this.levels[i] ? this.levels[i].groupPath : this.leafItemSettings.labelPath;\n var level = new Object();\n level['level'] = i;\n level[groupPath] = [];\n this.levelsOfData.push(level);\n for (var j = 0; j < this.dataSource.length; j++) {\n var currentData = {};\n var childName = '';\n if (this.dataSource[j][groupPath]) {\n var name_1 = this.dataSource[j][groupPath];\n if (i !== 0) {\n for (var k = 0; k <= i; k++) {\n var childGroupPath_1 = this.levels[k] ? this.levels[k].groupPath : groupPath;\n childName += (this.dataSource[j][childGroupPath_1]) + ((k === i) ? '' : '_');\n }\n }\n if (!(orderNames.length > 0 ? orderNames.indexOf(childName ?\n childName : name_1) !== -1 : false)) {\n currentData['name'] = name_1;\n currentData['levelOrderName'] = ((childName) ? childName : name_1) + '';\n currentData['groupIndex'] = i;\n currentData['isDrilled'] = false;\n currentData['groupName'] = groupPath;\n currentData['data'] = this.dataSource[j];\n this.levelsOfData[this.levelsOfData.length - 1][groupPath].push(currentData);\n orderNames.push((childName) ? childName : name_1);\n }\n }\n }\n }\n };\n TreeMap.prototype.reOrderLevelData = function (start) {\n var currentName;\n var currentPath = this.levels[start] ? this.levels[start].groupPath : this.leafItemSettings.labelPath;\n var prevPath = this.levels[start - 1].groupPath;\n var currentData = this.levelsOfData[start][currentPath];\n var previousData = this.levelsOfData[start - 1][prevPath];\n for (var i = 0; i < currentData.length; i++) {\n currentName = currentData[i]['levelOrderName'];\n for (var j = 0; j < previousData.length; j++) {\n previousData[j][currentPath] = isNullOrUndefined(previousData[j][currentPath]) ? [] : previousData[j][currentPath];\n if (currentName.indexOf(previousData[j]['levelOrderName']) !== -1) {\n if (isNullOrUndefined(currentData[i]['parent'])) {\n currentData[i]['parent'] = previousData[j];\n }\n previousData[j][currentPath].push(currentData[i]);\n break;\n }\n }\n }\n this.findTotalWeight(this.levelsOfData[this.levelsOfData.length - 1][currentPath], 'Child');\n this.levelsOfData.splice(start, 1);\n if ((start - 1) > 0) {\n this.reOrderLevelData(start - 1);\n }\n };\n TreeMap.prototype.findTotalWeight = function (processData, type) {\n var _this = this;\n var totalWeight;\n var childData;\n var levelName;\n var start = 0;\n var split;\n var groupName;\n var groupObj = new Object();\n var _loop_1 = function (i) {\n totalWeight = 0;\n groupName = processData[i]['groupName'];\n split = processData[i]['levelOrderName'].split('_');\n this_1.dataSource.forEach(function (data) {\n if (isContainsData(split, processData[i]['levelOrderName'], data, _this)) {\n totalWeight += parseFloat(data[_this.weightValuePath]);\n }\n });\n if (type === 'Parent') {\n groupObj[groupName] = processData;\n processData[i]['parent'] = groupObj;\n }\n processData[i]['weight'] = totalWeight;\n };\n var this_1 = this;\n for (var i = 0; i < processData.length; i++) {\n _loop_1(i);\n }\n };\n /**\n * To unbind event handlers for treemap.\n */\n TreeMap.prototype.unWireEVents = function () {\n EventHandler.remove(this.element, 'click', this.clickOnTreeMap);\n // EventHandler.remove(this.element, 'dblclick', this.doubleClick);\n EventHandler.remove(this.element, Browser.touchStartEvent, this.mouseDownOnTreeMap);\n EventHandler.remove(this.element, Browser.touchMoveEvent, this.mouseMoveOnTreeMap);\n EventHandler.remove(this.element, Browser.touchEndEvent, this.mouseEndOnTreeMap);\n EventHandler.remove(this.element, 'pointerleave mouseleave', this.mouseLeaveOnTreeMap);\n window.removeEventListener('resize', this.resizeOnTreeMap);\n };\n /**\n * To bind event handlers for treemap.\n */\n TreeMap.prototype.wireEVents = function () {\n EventHandler.add(this.element, 'click', this.clickOnTreeMap, this);\n //EventHandler.add(this.element, 'dblclick', this.doubleClick, this);\n EventHandler.add(this.element, Browser.touchStartEvent, this.mouseDownOnTreeMap, this);\n EventHandler.add(this.element, Browser.touchMoveEvent, this.mouseMoveOnTreeMap, this);\n EventHandler.add(this.element, Browser.touchEndEvent, this.mouseEndOnTreeMap, this);\n EventHandler.add(this.element, 'pointerleave mouseleave', this.mouseLeaveOnTreeMap, this);\n window.addEventListener('resize', this.resizeOnTreeMap.bind(this));\n };\n /**\n * Method to set culture for maps\n */\n TreeMap.prototype.setCulture = function () {\n this.intl = new Internationalization();\n };\n /**\n * To add tab index for treemap element\n */\n TreeMap.prototype.addTabIndex = function () {\n this.element.setAttribute('aria-label', this.description || 'TreeMap Element');\n this.element.setAttribute('tabindex', this.tabIndex.toString());\n };\n /**\n * To handle the window resize event on treemap.\n */\n TreeMap.prototype.resizeOnTreeMap = function (e) {\n var _this = this;\n var args = {\n name: resize,\n cancel: false,\n previousSize: this.availableSize,\n currentSize: new Size(0, 0),\n treemap: this\n };\n if (this.resizeTo) {\n clearTimeout(this.resizeTo);\n }\n if (this.element.classList.contains('e-treemap')) {\n this.resizeTo = setTimeout(function () {\n _this.unWireEVents();\n _this.createSvg();\n _this.refreshing = true;\n _this.wireEVents();\n args.currentSize = _this.availableSize;\n _this.trigger(resize, args);\n _this.render();\n }, 500);\n }\n };\n TreeMap.prototype.clickOnTreeMap = function (e) {\n var targetEle = e.target;\n var targetId = targetEle.id;\n var eventArgs;\n var itemIndex;\n var clickArgs = { cancel: false, name: click, treemap: this, mouseEvent: e };\n this.trigger(click, clickArgs);\n if (targetId.indexOf('_Item_Index') > -1) {\n e.preventDefault();\n itemIndex = parseFloat(targetId.split('_')[6]);\n eventArgs = { cancel: false, name: itemClick, treemap: this, item: this.layout.renderItems[itemIndex], mouseEvent: e };\n this.trigger(itemClick, eventArgs);\n }\n };\n /* tslint:disable-next-line:max-func-body-length */\n TreeMap.prototype.mouseDownOnTreeMap = function (e) {\n var targetEle = e.target;\n var startEvent;\n var endEvent;\n var targetId = targetEle.id;\n var totalRect;\n var index;\n var newDrillItem = new Object();\n var item;\n var process = true;\n var layoutID = this.element.id + '_TreeMap_' + this.layoutType + '_Layout';\n if (targetId.indexOf('_Item_Index') > -1 && this.enableDrillDown) {\n e.preventDefault();\n index = parseFloat(targetId.split('_')[6]);\n item = this.layout.renderItems[index];\n if (this.levels.length !== 0 && !item['isLeafItem'] && findChildren(item)['values'] &&\n findChildren(item)['values'].length > 0) {\n if (this.drilledItems.length > 0) {\n for (var i = 0; i < this.drilledItems.length; i++) {\n if (item['levelOrderName'] === this.drilledItems[i]['name']) {\n if (item['groupIndex'] === 0 && item['parent'][item['groupName']] instanceof Array) {\n item['isDrilled'] = !(item['isDrilled']);\n if (!item['isDrilled']) {\n newDrillItem = item['parent'];\n }\n else {\n newDrillItem[item['groupName']] = [item];\n }\n }\n else {\n item['isDrilled'] = false;\n item['parent']['isDrilled'] = true;\n item = item['parent'];\n newDrillItem[item['groupName']] = [item];\n }\n this.drilledItems.splice(i, 1);\n i -= 1;\n break;\n }\n else if (i === this.drilledItems.length - 1) {\n item['isDrilled'] = true;\n newDrillItem[item['groupName']] = [item];\n }\n }\n }\n else {\n item['isDrilled'] = true;\n newDrillItem[item['groupName']] = [item];\n }\n startEvent = { cancel: false, name: drillStart, treemap: this, item: newDrillItem, element: targetEle };\n this.trigger(drillStart, startEvent);\n if (!startEvent.cancel) {\n if (document.getElementById(layoutID)) {\n document.getElementById(layoutID).remove();\n }\n totalRect = extend({}, this.areaRect, totalRect, true);\n this.layout.calculateLayoutItems(newDrillItem, totalRect);\n this.layout.renderLayoutItems(newDrillItem);\n }\n endEvent = { cancel: false, name: drillEnd, treemap: this, renderItems: this.layout.renderItems };\n this.trigger(drillEnd, endEvent);\n if (process) {\n this.drilledItems.push({ name: item['levelOrderName'], data: item });\n }\n }\n }\n this.notify(Browser.touchStartEvent, e);\n };\n TreeMap.prototype.mouseMoveOnTreeMap = function (e) {\n var targetEle = e.target;\n var targetId = targetEle.id;\n var eventArgs;\n var item;\n var moveArgs = { cancel: false, name: mouseMove, treemap: this, mouseEvent: e };\n this.trigger(mouseMove, moveArgs);\n var childItems;\n if (targetId.indexOf('_Item_Index') > -1) {\n item = this.layout.renderItems[parseFloat(targetId.split('_')[6])];\n childItems = findChildren(item)['values'];\n this.element.style.cursor = (!item['isLeafItem'] && childItems && childItems.length > 0 && this.enableDrillDown) ?\n 'pointer' : 'auto';\n eventArgs = { cancel: false, name: itemMove, treemap: this, item: item, mouseEvent: e };\n this.trigger(itemMove, eventArgs);\n }\n this.notify(Browser.touchMoveEvent, e);\n };\n TreeMap.prototype.mouseEndOnTreeMap = function (e) {\n this.notify(Browser.touchEndEvent, e);\n };\n TreeMap.prototype.mouseLeaveOnTreeMap = function (e) {\n if (this.treeMapTooltipModule) {\n this.treeMapTooltipModule.removeTooltip();\n }\n if (this.treeMapLegendModule) {\n this.treeMapLegendModule.removeInteractivePointer();\n }\n removeClassNames(document.getElementsByClassName('treeMapHighLight'), 'treeMapHighLight', this);\n };\n /**\n * To provide the array of modules needed for maps rendering\n * @return {ModuleDeclaration[]}\n * @private\n */\n TreeMap.prototype.requiredModules = function () {\n var modules = [];\n if (this.tooltipSettings.visible) {\n modules.push({\n member: 'treeMapTooltip',\n args: [this]\n });\n }\n if (this.highlightSettings.enable) {\n modules.push({\n member: 'treeMapHighlight',\n args: [this]\n });\n }\n if (this.selectionSettings.enable) {\n modules.push({\n member: 'treeMapSelection',\n args: [this]\n });\n }\n if (this.legendSettings.visible) {\n modules.push({\n member: 'treeMapLegend',\n args: [this]\n });\n }\n return modules;\n };\n TreeMap.prototype.onPropertyChanged = function (newProp, oldProp) {\n var render = false;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'background':\n this.renderBorder();\n break;\n case 'height':\n case 'width':\n render = true;\n break;\n }\n }\n if (render) {\n this.createSvg();\n this.render();\n }\n };\n /**\n * Get component name\n */\n TreeMap.prototype.getModuleName = function () {\n return 'treemap';\n };\n /**\n * To destroy the treemap control.\n */\n TreeMap.prototype.destroy = function () {\n this.unWireEVents();\n _super.prototype.destroy.call(this);\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @private\n */\n TreeMap.prototype.getPersistData = function () {\n return '';\n };\n __decorate([\n Property(null)\n ], TreeMap.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], TreeMap.prototype, \"height\", void 0);\n __decorate([\n Complex({}, Border)\n ], TreeMap.prototype, \"border\", void 0);\n __decorate([\n Complex({}, Margin)\n ], TreeMap.prototype, \"margin\", void 0);\n __decorate([\n Property(null)\n ], TreeMap.prototype, \"background\", void 0);\n __decorate([\n Property('Material')\n ], TreeMap.prototype, \"theme\", void 0);\n __decorate([\n Complex({}, TitleSettings)\n ], TreeMap.prototype, \"titleSettings\", void 0);\n __decorate([\n Property('Squarified')\n ], TreeMap.prototype, \"layoutType\", void 0);\n __decorate([\n Property(null)\n ], TreeMap.prototype, \"dataSource\", void 0);\n __decorate([\n Property(null)\n ], TreeMap.prototype, \"query\", void 0);\n __decorate([\n Property(null)\n ], TreeMap.prototype, \"weightValuePath\", void 0);\n __decorate([\n Property('')\n ], TreeMap.prototype, \"rangeColorValuePath\", void 0);\n __decorate([\n Property('')\n ], TreeMap.prototype, \"equalColorValuePath\", void 0);\n __decorate([\n Property([])\n ], TreeMap.prototype, \"palette\", void 0);\n __decorate([\n Property(false)\n ], TreeMap.prototype, \"enableDrillDown\", void 0);\n __decorate([\n Complex({}, InitialDrillSettings)\n ], TreeMap.prototype, \"initialDrillDown\", void 0);\n __decorate([\n Complex({}, LeafItemSettings)\n ], TreeMap.prototype, \"leafItemSettings\", void 0);\n __decorate([\n Collection([], LevelSettings)\n ], TreeMap.prototype, \"levels\", void 0);\n __decorate([\n Complex({}, HighlightSettings)\n ], TreeMap.prototype, \"highlightSettings\", void 0);\n __decorate([\n Complex({}, SelectionSettings)\n ], TreeMap.prototype, \"selectionSettings\", void 0);\n __decorate([\n Complex({}, TooltipSettings)\n ], TreeMap.prototype, \"tooltipSettings\", void 0);\n __decorate([\n Complex({}, LegendSettings)\n ], TreeMap.prototype, \"legendSettings\", void 0);\n __decorate([\n Property(false)\n ], TreeMap.prototype, \"useGroupingSeparator\", void 0);\n __decorate([\n Property(null)\n ], TreeMap.prototype, \"description\", void 0);\n __decorate([\n Property(1)\n ], TreeMap.prototype, \"tabIndex\", void 0);\n __decorate([\n Property(null)\n ], TreeMap.prototype, \"format\", void 0);\n __decorate([\n Event()\n ], TreeMap.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], TreeMap.prototype, \"beforePrint\", void 0);\n __decorate([\n Event()\n ], TreeMap.prototype, \"loaded\", void 0);\n __decorate([\n Event()\n ], TreeMap.prototype, \"itemRendering\", void 0);\n __decorate([\n Event()\n ], TreeMap.prototype, \"drillStart\", void 0);\n __decorate([\n Event()\n ], TreeMap.prototype, \"drillEnd\", void 0);\n __decorate([\n Event()\n ], TreeMap.prototype, \"itemSelected\", void 0);\n __decorate([\n Event()\n ], TreeMap.prototype, \"itemHighlight\", void 0);\n __decorate([\n Event()\n ], TreeMap.prototype, \"tooltipRendering\", void 0);\n __decorate([\n Event()\n ], TreeMap.prototype, \"itemClick\", void 0);\n __decorate([\n Event()\n ], TreeMap.prototype, \"itemMove\", void 0);\n __decorate([\n Event()\n ], TreeMap.prototype, \"click\", void 0);\n __decorate([\n Event()\n ], TreeMap.prototype, \"mouseMove\", void 0);\n __decorate([\n Event()\n ], TreeMap.prototype, \"resize\", void 0);\n TreeMap = __decorate([\n NotifyPropertyChanges\n ], TreeMap);\n return TreeMap;\n}(Component));\nexport { TreeMap };\n","import { findChildren, Location, Rect, Size, measureText, TextOption, PathOption, RectOption, drawSymbol, orderByArea } from '../utils/helper';\nimport { Browser, isNullOrUndefined, EventHandler } from '@syncfusion/ej2-base';\nimport { renderTextElement, textTrim } from '../utils/helper';\nimport { legendItemRendering } from '../model/constants';\n/**\n * Legend module class\n */\nvar TreeMapLegend = /** @class */ (function () {\n function TreeMapLegend(treemap) {\n this.page = 0;\n this.legendBorderRect = new Rect(0, 0, 0, 0);\n this.currentPage = 0;\n this.heightIncrement = 0;\n this.widthIncrement = 0;\n this.textMaxWidth = 0;\n this.legendItemRect = new Rect(0, 0, 0, 0);\n this.treemap = treemap;\n this.addEventListener();\n }\n TreeMapLegend.prototype.renderLegend = function () {\n this.legendRenderingCollections = [];\n this.legendCollections = [];\n this.legendNames = [];\n this.totalPages = [];\n this.gradientCount = 1;\n this.defsElement = this.treemap.renderer.createDefs();\n this.treemap.svgObject.appendChild(this.defsElement);\n this.calculateLegendBounds();\n this.drawLegend();\n };\n /* tslint:disable:no-string-literal */\n /* tslint:disable-next-line:max-func-body-length */\n TreeMapLegend.prototype.calculateLegendBounds = function () {\n var _this = this;\n var treemap = this.treemap;\n var legend = treemap.legendSettings;\n this.findColorMappingLegendItems(treemap.levelsOfData[0]);\n if (this.treemap.palette.length > 0 && this.legendCollections.length === 0) {\n this.findPaletteLegendItems(this.treemap.levelsOfData[0], 'Parent');\n }\n if (this.legendCollections.length > 0) {\n var defaultSize = 25;\n var textPadding = 10;\n var position = legend.position;\n var legendTitle = legend.title.text;\n var titleTextStyle = legend.titleStyle;\n var legendMode = legend.mode;\n var shapeX = 0;\n var shapeY = 0;\n var textX = 0;\n var textY = 0;\n var shapeHeight = legend.shapeHeight;\n var shapeWidth = legend.shapeWidth;\n var shapeLocation = [];\n var textLocation = [];\n var orientation_1 = (legend.orientation === 'None') ? ((position === 'Top' || position === 'Bottom')\n ? 'Horizontal' : 'Vertical') : legend.orientation;\n var leftPadding = 10;\n var topPadding = 10;\n var spacing = 10;\n var legendWidth = (legend.width.length > 1) ? (legend.width.indexOf('%') > -1) ? (treemap.availableSize.width / 100)\n * parseFloat(legend.width) : parseFloat(legend.width) : null;\n var legendHeight = (legend.height.length > 1) ? (legend.height.indexOf('%') > -1) ?\n (treemap.availableSize.height / 100) * parseFloat(legend.height) : parseFloat(legend.height) : null;\n var legendTitleSize = measureText(legendTitle, titleTextStyle);\n var startX_1 = 0;\n var startY_1 = 0;\n var shapePadding = legend.shapePadding;\n var rectWidth = void 0;\n var rectHeight = void 0;\n var itemTextStyle = legend.textStyle;\n var legendLength = this.legendCollections.length;\n if (legendMode === 'Default') {\n legendWidth = (isNullOrUndefined(legendWidth)) ? treemap.areaRect.width : legendWidth;\n legendHeight = (isNullOrUndefined(legendHeight)) ? treemap.areaRect.height : legendHeight;\n var j = 0;\n for (var i = 0; i < this.legendCollections.length; i++) {\n var legendItem = this.legendCollections[i];\n if (isNullOrUndefined(this.totalPages[this.page])) {\n this.totalPages[this.page] = { Page: (this.page + 1), Collection: [] };\n }\n var legendTextSize = measureText(legendItem['legendName'], legend.textStyle);\n this.textMaxWidth = Math.max(this.textMaxWidth, legendTextSize.width);\n if (i === 0) {\n startX_1 = shapeX = (leftPadding + (shapeWidth / 2));\n startY_1 = shapeY = topPadding + legendTitleSize.height + (shapeHeight > legendTextSize.height ? shapeHeight / 2\n : (legendTextSize.height / 4));\n }\n else {\n var maxSize = (legendTextSize.height > shapeHeight) ? legendTextSize.height : shapeHeight;\n if (orientation_1 === 'Horizontal') {\n var prvePositionX = (textLocation[j - 1].x + textLocation[j - 1].width) + textPadding + shapeWidth;\n if ((prvePositionX + shapePadding + legendTextSize.width) > legendWidth) {\n var nextPositionY = (textLocation[j - 1].y > (shapeLocation[j - 1].y + (shapeHeight / 2)) ?\n textLocation[j - 1].y : (shapeLocation[j - 1].y + (shapeHeight / 2))) + topPadding;\n if ((nextPositionY + maxSize) > legendHeight) {\n this.getPageChanged();\n j = 0;\n shapeLocation = [];\n textLocation = [];\n shapeX = startX_1;\n shapeY = startY_1;\n }\n else {\n shapeX = (shapeLocation[0].x);\n shapeY = (nextPositionY + (maxSize / 2));\n }\n }\n else {\n shapeX = (prvePositionX - (shapeWidth / 2));\n shapeY = (shapeLocation[j - 1]).y;\n }\n }\n else {\n var prevPositionY = textLocation[j - 1].y > shapeLocation[j - 1].y + (shapeHeight / 2) ?\n textLocation[j - 1].y : shapeLocation[j - 1].y + (shapeHeight / 2);\n if ((prevPositionY + topPadding + maxSize) > legendHeight) {\n var nextPositionX = (textLocation[j - 1].x + this.textMaxWidth + textPadding);\n if ((nextPositionX + shapePadding + legendTextSize.width) > legendWidth) {\n shapeX = startX_1;\n shapeY = startY_1;\n textLocation = [];\n shapeLocation = [];\n this.getPageChanged();\n j = 0;\n }\n else {\n shapeX = nextPositionX + (shapeWidth / 2);\n shapeY = (shapeLocation[0].y);\n }\n }\n else {\n shapeX = shapeLocation[j - 1].x;\n shapeY = prevPositionY + topPadding + (shapeHeight / 2);\n }\n }\n }\n textX = shapeX + (shapeWidth / 2) + shapePadding;\n textY = shapeY + (legendTextSize.height / 4);\n shapeLocation.push({ x: shapeX, y: shapeY });\n textLocation.push({ x: textX, y: textY, width: legendTextSize.width, height: (legendTextSize.height / 2) });\n this.totalPages[this.page]['Collection'].push({\n DisplayText: legendItem['legendName'],\n Shape: { x: shapeX, y: shapeY },\n Text: { x: textX, y: textY },\n Fill: legendItem['legendFill'],\n Data: legendItem['legendData'],\n Rect: {\n x: shapeLocation[j].x - (shapeWidth / 2),\n y: (shapeLocation[j].y - (shapeHeight / 2)) < (textY - legendTextSize.height) ?\n (shapeLocation[j].y - (shapeHeight / 2)) : (textY - legendTextSize.height),\n width: Math.abs((shapeLocation[j].x - (shapeWidth / 2)) - (textX + legendTextSize.width)),\n height: ((shapeHeight > legendTextSize.height) ? shapeHeight : legendTextSize.height)\n }\n });\n j++;\n }\n var collection = this.totalPages[0]['Collection'];\n collection.forEach(function (legendObj, index) {\n var legendRect = new Rect(legendObj['Rect']['x'], legendObj['Rect']['y'], legendObj['Rect']['width'], legendObj['Rect']['height']);\n if (index === 0) {\n startX_1 = legendRect.x;\n startY_1 = legendRect.y;\n }\n _this.widthIncrement = Math.max(_this.widthIncrement, Math.abs(startX_1 - (legendRect.x + legendRect.width)));\n _this.heightIncrement = Math.max(_this.heightIncrement, Math.abs(startY_1 - (legendRect.y + legendRect.height)));\n });\n legendWidth = ((this.widthIncrement < legendWidth) ? this.widthIncrement : legendWidth);\n legendHeight = ((this.heightIncrement < legendHeight) ? this.heightIncrement : legendHeight);\n this.legendItemRect = {\n x: collection[0]['Rect']['x'], y: collection[0]['Rect']['y'],\n width: legendWidth, height: legendHeight\n };\n }\n else {\n var itemTextStyle_1 = legend.textStyle;\n var rectWidth_1;\n var rectHeight_1;\n var legendLength_1 = this.legendCollections.length;\n rectWidth_1 = (orientation_1 === 'Horizontal') ? (isNullOrUndefined(legendWidth)) ? (treemap.areaRect.width / legendLength_1) :\n (legendWidth / legendLength_1) : (isNullOrUndefined(legendWidth)) ? defaultSize : legendWidth;\n rectHeight_1 = (orientation_1 === 'Horizontal') ? (isNullOrUndefined(legendHeight)) ? defaultSize : legendHeight :\n (isNullOrUndefined(legendHeight)) ? (treemap.areaRect.height / legendLength_1) : (legendHeight / legendLength_1);\n startX_1 = 0;\n startY_1 = legendTitleSize.height + spacing;\n var textPadding_1 = 10;\n var placement = legend.labelPosition;\n var itemStartX = 0;\n var itemStartY = 0;\n var labelAction = legend.labelDisplayMode;\n var maxTextHeight = 0;\n var maxTextWidth = 0;\n for (var i = 0; i < this.legendCollections.length; i++) {\n startX_1 = (orientation_1 === 'Horizontal') ? (startX_1 + rectWidth_1) : startX_1;\n startY_1 = (orientation_1 === 'Horizontal') ? startY_1 : (startY_1 + rectHeight_1);\n var legendText = this.legendCollections[i]['legendName'];\n var itemTextSize = new Size(0, 0);\n if (labelAction === 'None') {\n itemTextSize = measureText(legendText, itemTextStyle_1);\n }\n else if (labelAction === 'Trim') {\n legendText = textTrim((orientation_1 === 'Horizontal' ? rectWidth_1 : rectHeight_1), legendText, itemTextStyle_1);\n itemTextSize = measureText(legendText, itemTextStyle_1);\n }\n else {\n legendText = '';\n }\n maxTextHeight = Math.max(maxTextHeight, itemTextSize.height);\n maxTextWidth = Math.max(maxTextWidth, itemTextSize.width);\n if (itemTextSize.width > 0 && itemTextSize.height > 0) {\n if (orientation_1 === 'Horizontal') {\n textX = startX_1 + (rectWidth_1 / 2);\n textY = (placement === 'After') ? (startY_1 + rectHeight_1 + (itemTextSize.height / 2)) + textPadding_1 :\n (startY_1 - textPadding_1);\n }\n else {\n textX = (placement === 'After') ? startX_1 - (itemTextSize.width / 2) - textPadding_1\n : (startX_1 + rectWidth_1 + itemTextSize.width / 2) + textPadding_1;\n textY = startY_1 + (rectHeight_1 / 2) + (itemTextSize.height / 4);\n }\n }\n if (i === 0) {\n itemStartX = (orientation_1 === 'Horizontal') ? startX_1 : (placement === 'After') ?\n textX - (itemTextSize.width / 2) : startX_1;\n itemStartY = (orientation_1 === 'Horizontal') ? (placement === 'After') ? startY_1 :\n textY - (itemTextSize.height / 2) : startY_1;\n }\n if (i === legendLength_1 - 1) {\n legendWidth = (orientation_1 === 'Horizontal') ? Math.abs((startX_1 + rectWidth_1) - itemStartX) :\n (rectWidth_1 + maxTextWidth + textPadding_1);\n legendHeight = (orientation_1 === 'Horizontal') ? (rectHeight_1 + (maxTextHeight / 2) + textPadding_1) :\n Math.abs((startY_1 + rectHeight_1) - itemStartY);\n }\n this.legendRenderingCollections.push({\n fill: this.legendCollections[i]['legendFill'], x: startX_1, y: startY_1,\n width: rectWidth_1, height: rectHeight_1, element: this.legendCollections[i]['gradientElement'],\n text: legendText, textX: textX, textY: textY,\n textWidth: itemTextSize.width, textHeight: itemTextSize.height,\n data: this.legendCollections[i]['legendData']\n });\n }\n this.legendItemRect = { x: itemStartX, y: itemStartY, width: legendWidth, height: legendHeight };\n }\n }\n };\n TreeMapLegend.prototype.getPageChanged = function () {\n this.page++;\n if (isNullOrUndefined(this.totalPages[this.page])) {\n this.totalPages[this.page] = { Page: (this.page + 1), Collection: [] };\n }\n };\n TreeMapLegend.prototype.findColorMappingLegendItems = function (data) {\n var child = findChildren(data)['values'];\n if (child && child.length > 0) {\n this.calculateLegendItems(child);\n if (this.treemap.levels.length > 0) {\n for (var i = 0; i < child.length; i++) {\n this.findColorMappingLegendItems(child[i]);\n }\n }\n }\n };\n TreeMapLegend.prototype.findPaletteLegendItems = function (data, type) {\n var child = findChildren(data)['values'];\n if (child && child.length > 0) {\n for (var i = 0; i < child.length; i++) {\n this.legendCollections.push({\n legendName: child[i]['name'],\n legendFill: this.treemap.palette[i % this.treemap.palette.length],\n legendData: [],\n itemArea: child[i]['weight']\n });\n }\n this.legendCollections.sort(orderByArea);\n for (var j = 0; j < this.legendCollections.length; j++) {\n this.legendCollections[j]['legendFill'] = this.treemap.palette[j % this.treemap.palette.length];\n }\n }\n };\n TreeMapLegend.prototype.calculateLegendItems = function (data) {\n var isAddData;\n var fill;\n var rangeValue;\n var currentData;\n var legendText;\n var itemValue;\n var isLeafItem;\n var colorMapProcess = false;\n var colorMapping;\n var groupIndex;\n var leaf = this.treemap.leafItemSettings;\n var levels = this.treemap.levels;\n var equalValue;\n var position = this.treemap.legendSettings.position;\n var gradientElement;\n var x2;\n var y2;\n for (var i = 0; i < data.length; i++) {\n currentData = data[i]['data'];\n groupIndex = data[i]['groupIndex'];\n isLeafItem = (this.treemap.levels.length === 0 || groupIndex === this.treemap.levels.length);\n colorMapping = isLeafItem ? leaf.colorMapping : levels[groupIndex].colorMapping;\n for (var _i = 0, colorMapping_1 = colorMapping; _i < colorMapping_1.length; _i++) {\n var colorMap = colorMapping_1[_i];\n rangeValue = Number(currentData[this.treemap.rangeColorValuePath]);\n equalValue = currentData[this.treemap.equalColorValuePath];\n colorMap.value = !isNullOrUndefined(colorMap.value) ? colorMap.value.toString() : colorMap.value;\n if (!isNullOrUndefined(colorMap.from) && !isNullOrUndefined(colorMap.to) &&\n rangeValue >= colorMap.from && rangeValue <= colorMap.to) {\n colorMapProcess = true;\n legendText = !isNullOrUndefined(colorMap.label) ? colorMap.label : colorMap.from + ' - ' + colorMap.to;\n fill = isNullOrUndefined(colorMap.color) ? fill : colorMap.color;\n isAddData = this.isAddNewLegendData(legendText);\n }\n else if (!isNullOrUndefined(colorMap.value) && equalValue === colorMap.value) {\n colorMapProcess = true;\n legendText = !isNullOrUndefined(colorMap.label) ? colorMap.label : colorMap.value.toString();\n fill = isNullOrUndefined(colorMap.color) ? fill : colorMap.color;\n isAddData = this.isAddNewLegendData(legendText);\n }\n if (colorMapProcess && colorMap.maxOpacity && colorMap.minOpacity && this.treemap.legendSettings.mode === 'Interactive') {\n var colors = [];\n var gradient = void 0;\n var stop1Color = { colorStop: '0%', color: fill };\n var stop2Color = { colorStop: '100%', color: fill };\n x2 = position === 'Top' || position === 'Bottom' ? '100%' : '0%';\n y2 = position === 'Top' || position === 'Bottom' ? '0%' : '100%';\n colors.push(stop1Color);\n colors.push(stop2Color);\n gradient = {\n id: 'groupIndex_' + groupIndex + '_colorIndex_' + this.gradientCount, x1: '0%', y1: '0%', x2: x2, y2: y2\n };\n gradientElement = this.treemap.renderer.drawGradient('linearGradient', gradient, colors).childNodes[0];\n gradientElement.childNodes[0].setAttribute('stop-opacity', colorMap.minOpacity.toString());\n gradientElement.childNodes[1].setAttribute('stop-opacity', colorMap.maxOpacity.toString());\n this.defsElement.appendChild(gradientElement);\n this.gradientCount++;\n }\n if (isAddData && isAddData['process'] && colorMapProcess) {\n colorMapProcess = false;\n this.legendCollections.push({\n legendName: legendText, legendFill: fill, legendData: [], gradientElement: gradientElement\n });\n this.legendCollections[this.legendCollections.length - 1]['legendData'].push(data[i]);\n }\n else if (colorMapProcess) {\n colorMapProcess = false;\n this.legendCollections[isAddData['value']]['legendData'].push(data[i]);\n }\n }\n }\n };\n TreeMapLegend.prototype.isAddNewLegendData = function (legendText) {\n var newDataProcess;\n var itemValue;\n if (this.legendCollections.length === 0) {\n newDataProcess = true;\n }\n else {\n for (var j = 0; j < this.legendCollections.length; j++) {\n if (legendText === this.legendCollections[j]['legendName']) {\n newDataProcess = false;\n itemValue = j;\n break;\n }\n else if (j === this.legendCollections.length - 1) {\n newDataProcess = true;\n }\n }\n }\n return { process: newDataProcess, value: itemValue };\n };\n TreeMapLegend.prototype.drawLegend = function () {\n var treemap = this.treemap;\n var legend = treemap.legendSettings;\n var render = treemap.renderer;\n var fill;\n var textOptions;\n var gradientElement;\n var textFont = legend.textStyle;\n this.legendGroup = render.createGroup({ id: treemap.element.id + '_Legend_Group' });\n this.renderLegendBorder();\n this.renderLegendTitle();\n if (legend.mode === 'Default') {\n this.drawLegendItem(this.currentPage);\n }\n else {\n for (var i = 0; i < this.legendRenderingCollections.length; i++) {\n var itemId = treemap.element.id + '_Legend_Index_' + i;\n var textId = treemap.element.id + '_Legend_Index_' + i + '_Text';\n var item = this.legendRenderingCollections[i];\n gradientElement = item['element'];\n fill = gradientElement ? 'url(#' + gradientElement.id + ')' : item['fill'];\n var bounds = new Rect(item['x'], item['y'], item['width'], item['height']);\n var textLocation = new Location(item['textX'], item['textY']);\n var rectOptions = new RectOption(itemId, fill, legend.shapeBorder, 1, bounds);\n textOptions = new TextOption(textId, textLocation.x, textLocation.y, 'middle', item['text'], '', '');\n renderTextElement(textOptions, textFont, textFont.color, this.legendGroup);\n this.legendGroup.appendChild(render.drawRectangle(rectOptions));\n }\n }\n };\n TreeMapLegend.prototype.drawLegendItem = function (page) {\n var treemap = this.treemap;\n var legend = treemap.legendSettings;\n var spacing = 10;\n var shapeSize = new Size(legend.shapeWidth, legend.shapeHeight);\n var textOptions;\n var renderOptions;\n var render = treemap.renderer;\n var shapeBorder = legend.shapeBorder;\n var eventArgs;\n if (page >= 0 && page < this.totalPages.length) {\n if (document.getElementById(this.legendGroup.id)) {\n document.getElementById(this.legendGroup.id).remove();\n }\n var isLineShape = (legend.shape === 'HorizontalLine' || legend.shape === 'VerticalLine' || legend.shape === 'Cross');\n var strokeColor = isLineShape ? isNullOrUndefined(legend.fill) ? '#000000' : legend.fill : shapeBorder.color;\n var strokeWidth = isLineShape ? (shapeBorder.width === 0) ? 1 : shapeBorder.width : shapeBorder.width;\n for (var i = 0; i < this.totalPages[page]['Collection'].length; i++) {\n var collection = this.totalPages[page]['Collection'][i];\n var legendElement = render.createGroup({ id: treemap.element.id + '_Legend_Index_' + i });\n var legendText = collection['DisplayText'];\n var shapeId = treemap.element.id + '_Legend_Shape_Index_' + i;\n var textId = treemap.element.id + '_Legend_Text_Index_' + i;\n var shapeLocation = collection['Shape'];\n var textLocation = collection['Text'];\n eventArgs = {\n cancel: false, name: legendItemRendering, treemap: treemap, fill: collection['Fill'],\n shape: legend.shape, imageUrl: legend.imageUrl\n };\n var renderOptions_1 = new PathOption(shapeId, eventArgs.fill, strokeWidth, isLineShape ? collection['Fill'] : strokeColor, 1, '');\n legendElement.appendChild(drawSymbol(shapeLocation, eventArgs.shape, shapeSize, eventArgs.imageUrl, renderOptions_1, legendText));\n textOptions = new TextOption(textId, textLocation.x, textLocation.y, 'start', legendText, '', '');\n renderTextElement(textOptions, legend.textStyle, legend.textStyle.color, legendElement);\n this.legendGroup.appendChild(legendElement);\n }\n var pagingGroup = void 0;\n var width = spacing;\n var height = (spacing / 2);\n if (this.page !== 0) {\n var pagingText = (page + 1) + '/' + this.totalPages.length;\n var pagingFont = legend.textStyle;\n var pagingTextSize = measureText(pagingText, pagingFont);\n var leftPageX = (this.legendItemRect.x + this.legendItemRect.width) - pagingTextSize.width -\n (width * 2) - spacing;\n var rightPageX = (this.legendItemRect.x + this.legendItemRect.width);\n var locY = (this.legendItemRect.y + this.legendItemRect.height) + (height / 2) + spacing;\n var pageTextX = rightPageX - width - (pagingTextSize.width / 2) - (spacing / 2);\n pagingGroup = render.createGroup({ id: treemap.element.id + '_Legend_Paging_Group' });\n var leftPageElement = render.createGroup({ id: treemap.element.id + '_Legend_Left_Paging_Group' });\n var rightPageElement = render.createGroup({ id: treemap.element.id + '_Legend_Right_Paging_Group' });\n var rightPath = ' M ' + rightPageX + ' ' + locY + ' L ' + (rightPageX - width) + ' ' + (locY - height) +\n ' L ' + (rightPageX - width) + ' ' + (locY + height) + ' z ';\n var leftPath = ' M ' + leftPageX + ' ' + locY + ' L ' + (leftPageX + width) + ' ' + (locY - height) +\n ' L ' + (leftPageX + width) + ' ' + (locY + height) + ' z ';\n var leftPageOptions = new PathOption(treemap.element.id + '_Left_Page', '#a6a6a6', 0, '#a6a6a6', 1, '', leftPath);\n leftPageElement.appendChild(render.drawPath(leftPageOptions));\n var leftRectPageOptions = new RectOption(treemap.element.id + '_Left_Page_Rect', 'transparent', {}, 1, new Rect(leftPageX - (width / 2), (locY - (height * 2)), width * 2, spacing * 2), '');\n leftPageElement.appendChild(render.drawRectangle(leftRectPageOptions));\n this.wireEvents(leftPageElement);\n var rightPageOptions = new PathOption(treemap.element.id + '_Right_Page', '#a6a6a6', 0, '#a6a6a6', 1, '', rightPath);\n rightPageElement.appendChild(render.drawPath(rightPageOptions));\n var rightRectPageOptions = new RectOption(treemap.element.id + '_Right_Page_Rect', 'transparent', {}, 1, new Rect((rightPageX - width), (locY - height), width, spacing), '');\n rightPageElement.appendChild(render.drawRectangle(rightRectPageOptions));\n this.wireEvents(rightPageElement);\n pagingGroup.appendChild(leftPageElement);\n pagingGroup.appendChild(rightPageElement);\n var pageTextOptions = {\n 'id': treemap.element.id + '_Paging_Text',\n 'x': pageTextX,\n 'y': locY + (pagingTextSize.height / 4),\n 'fill': '#a6a6a6',\n 'font-size': '14px',\n 'font-style': pagingFont.fontStyle,\n 'font-family': pagingFont.fontFamily,\n 'font-weight': pagingFont.fontWeight,\n 'text-anchor': 'middle',\n 'transform': '',\n 'opacity': 1,\n 'dominant-baseline': ''\n };\n pagingGroup.appendChild(render.createText(pageTextOptions, pagingText));\n this.legendGroup.appendChild(pagingGroup);\n }\n }\n };\n TreeMapLegend.prototype.renderLegendBorder = function () {\n var treemap = this.treemap;\n var legend = treemap.legendSettings;\n var legendTitle = legend.title.text;\n var spacing = 10;\n var textStyle = legend.titleStyle;\n var textOptions;\n var title = textTrim((this.legendItemRect.width + (spacing * 2)), legendTitle, textStyle);\n var textSize = measureText(title, textStyle);\n this.legendBorderRect = new Rect((this.legendItemRect.x - spacing), (this.legendItemRect.y - spacing - textSize.height), (this.legendItemRect.width) + (spacing * 2), (this.legendItemRect.height) + (spacing * 2) + textSize.height +\n (legend.mode === 'Interactive' ? 0 : (this.page !== 0) ? spacing : 0));\n var renderOptions = new RectOption(treemap.element.id + '_Legend_Border', legend.background, legend.border, 1, this.legendBorderRect, '');\n var legendBorder = treemap.renderer.drawRectangle(renderOptions);\n legendBorder.style.pointerEvents = 'none';\n this.legendGroup.appendChild(legendBorder);\n this.getLegendAlignment(treemap, this.legendBorderRect.width, this.legendBorderRect.height, legend);\n this.legendGroup.setAttribute('transform', 'translate( ' + (this.translate.x + (-(this.legendBorderRect.x))) + ' ' +\n (this.translate.y + (-(this.legendBorderRect.y))) + ' )');\n treemap.svgObject.appendChild(this.legendGroup);\n };\n TreeMapLegend.prototype.renderLegendTitle = function () {\n var treemap = this.treemap;\n var legend = treemap.legendSettings;\n var textStyle = legend.titleStyle;\n var legendTitle = legend.title.text;\n var textOptions;\n var spacing = 10;\n var trimTitle = textTrim((this.legendItemRect.width + (spacing * 2)), legendTitle, textStyle);\n var textSize = measureText(trimTitle, textStyle);\n if (legendTitle) {\n textOptions = new TextOption(treemap.element.id + '_LegendTitle', (this.legendItemRect.x) + (this.legendItemRect.width / 2), this.legendItemRect.y - (textSize.height / 2), 'middle', trimTitle, '');\n renderTextElement(textOptions, textStyle, textStyle.color, this.legendGroup);\n }\n };\n TreeMapLegend.prototype.renderInteractivePointer = function (e) {\n var treemap = this.treemap;\n var target = e.target;\n var interactiveId = treemap.element.id + '_Interactive_Legend';\n target = !(e.type.indexOf('touch') > -1) ? target :\n document.elementFromPoint(e.changedTouches[0].clientX, e.changedTouches[0].clientY);\n var targetItem;\n var legend = treemap.legendSettings;\n if (target.id.indexOf('_Item_Index') > -1 && legend.visible && this.legendRenderingCollections.length > 0) {\n var currentData = void 0;\n var legendRect = void 0;\n var rect = void 0;\n var data = void 0;\n var fill = void 0;\n var stroke = void 0;\n var strokeWidth = void 0;\n var legendElement = void 0;\n targetItem = treemap.layout.renderItems[parseFloat(target.id.split('_')[6])];\n var svgRect = treemap.svgObject.getBoundingClientRect();\n for (var i = 0; i < this.legendCollections.length; i++) {\n currentData = this.legendCollections[i];\n legendElement = document.getElementById(treemap.element.id + '_Legend_Index_' + i);\n legendRect = legendElement.getBoundingClientRect();\n var rect_1 = new Rect(Math.abs(legendRect.left - svgRect.left), Math.abs(legendRect.top - svgRect.top), legendRect.width, legendRect.height);\n fill = legendElement.getAttribute('fill');\n stroke = legend.shapeBorder.color;\n strokeWidth = legend.shapeBorder.width;\n if (!isNullOrUndefined(currentData['legendData'])) {\n data = currentData['legendData'];\n for (var j = 0; j < data.length; j++) {\n if (data[j]['levelOrderName'] === targetItem['levelOrderName']) {\n this.drawInteractivePointer(legend, fill, stroke, interactiveId, strokeWidth, rect_1);\n break;\n }\n }\n }\n }\n }\n else {\n this.removeInteractivePointer();\n }\n };\n TreeMapLegend.prototype.drawInteractivePointer = function (legend, fill, stroke, id, strokeWidth, rect) {\n var path;\n var pathOptions;\n var locX;\n var locY;\n var height = 10;\n var width = 10;\n var direction = (legend.orientation === 'None') ? (legend.position === 'Top' || legend.position === 'Bottom')\n ? 'Horizontal' : 'Vertical' : legend.orientation;\n if (direction === 'Horizontal') {\n if (!legend.invertedPointer) {\n locX = rect.x + (rect.width / 2);\n locY = rect.y;\n path = ' M ' + locX + ' ' + locY + ' L ' + (locX - width) + ' ' + (locY - height) +\n ' L ' + (locX + width) + ' ' + (locY - height) + ' Z ';\n }\n else {\n locX = rect.x + (rect.width / 2);\n locY = rect.y + (rect.height);\n path = ' M ' + locX + ' ' + locY + ' L ' + (locX - width) + ' ' + (locY + height) +\n ' L ' + (locX + width) + ' ' + (locY + height) + ' Z ';\n }\n }\n else {\n if (!legend.invertedPointer) {\n locX = rect.x + (rect.width);\n locY = rect.y + (rect.height / 2);\n path = ' M ' + locX + ' ' + locY + ' L ' + (locX + width) + ' ' + (locY - height) +\n ' L ' + (locX + width) + ' ' + (locY + height) + ' z ';\n }\n else {\n locX = rect.x;\n locY = rect.y + (rect.height / 2);\n path = ' M ' + locX + ' ' + locY + ' L ' + (locX - width) + ' ' + (locY - height) +\n ' L ' + (locX - width) + ' ' + (locY + height) + ' z ';\n }\n }\n pathOptions = new PathOption(id, fill, strokeWidth, stroke, 1, '', path);\n this.treemap.svgObject.appendChild(this.treemap.renderer.drawPath(pathOptions));\n };\n TreeMapLegend.prototype.getLegendAlignment = function (treemap, width, height, legend) {\n var x;\n var y;\n var spacing = 10;\n var areaX = treemap.areaRect.x;\n var areaY = treemap.areaRect.y;\n var areaHeight = treemap.areaRect.height;\n var areaWidth = treemap.areaRect.width;\n var totalWidth = treemap.availableSize.width;\n var totalHeight = treemap.availableSize.height;\n if (legend.position === 'Float') {\n this.translate = legend.location;\n }\n else {\n switch (legend.position) {\n case 'Top':\n case 'Bottom':\n treemap.areaRect.height = (areaHeight - height);\n x = (totalWidth / 2) - (width / 2);\n y = (legend.position === 'Top') ? areaY : (areaY + treemap.areaRect.height);\n treemap.areaRect.y = (legend.position === 'Top') ? areaY + height + spacing : areaY;\n break;\n case 'Left':\n case 'Right':\n treemap.areaRect.width = (areaWidth - width);\n x = (legend.position === 'Left') ? areaX : areaX + treemap.areaRect.width;\n y = (totalHeight / 2) - (height / 2);\n treemap.areaRect.x = (legend.position === 'Left') ? areaX + width : areaX;\n break;\n }\n switch (legend.alignment) {\n case 'Near':\n if (legend.position === 'Top' || legend.position === 'Bottom') {\n x = treemap.areaRect.x;\n }\n else {\n y = treemap.areaRect.y;\n }\n break;\n case 'Far':\n if (legend.position === 'Top' || legend.position === 'Bottom') {\n x = totalWidth - width;\n }\n else {\n y = totalHeight - height;\n }\n break;\n }\n this.translate = new Location(x, y);\n }\n };\n TreeMapLegend.prototype.mouseUpHandler = function (e) {\n this.renderInteractivePointer(e);\n clearTimeout(this.clearTimeout);\n this.clearTimeout = setTimeout(this.removeInteractivePointer.bind(this), 3000);\n };\n TreeMapLegend.prototype.removeInteractivePointer = function () {\n if (document.getElementById(this.treemap.element.id + '_Interactive_Legend')) {\n document.getElementById(this.treemap.element.id + '_Interactive_Legend').remove();\n }\n };\n TreeMapLegend.prototype.changeNextPage = function (e) {\n this.currentPage = (e.target.id.indexOf('_Left_Page_') > -1) ? (this.currentPage - 1) :\n (this.currentPage + 1);\n this.drawLegend();\n };\n TreeMapLegend.prototype.wireEvents = function (element) {\n EventHandler.add(element, Browser.touchStartEvent, this.changeNextPage, this);\n };\n TreeMapLegend.prototype.addEventListener = function () {\n if (this.treemap.isDestroyed) {\n return;\n }\n this.treemap.on(Browser.touchMoveEvent, this.renderInteractivePointer, this);\n this.treemap.on(Browser.touchEndEvent, this.mouseUpHandler, this);\n };\n TreeMapLegend.prototype.removeEventListener = function () {\n if (this.treemap.isDestroyed) {\n return;\n }\n this.treemap.off(Browser.touchMoveEvent, this.renderInteractivePointer);\n this.treemap.off(Browser.touchEndEvent, this.mouseUpHandler);\n };\n /**\n * Get module name.\n */\n TreeMapLegend.prototype.getModuleName = function () {\n return 'treeMapLegend';\n };\n /**\n * To destroy the legend.\n * @return {void}\n * @private\n */\n TreeMapLegend.prototype.destroy = function (treemap) {\n /**\n * Destroy method performed here\n */\n this.removeEventListener();\n };\n return TreeMapLegend;\n}());\nexport { TreeMapLegend };\n","import { Browser } from '@syncfusion/ej2-base';\nimport { itemHighlight, itemSelected } from '../model/constants';\nimport { findHightLightItems, removeClassNames, applyOptions } from '../utils/helper';\n/**\n * Performing treemap highlight\n */\nvar TreeMapHighlight = /** @class */ (function () {\n function TreeMapHighlight(treeMap) {\n this.treemap = treeMap;\n this.addEventListener();\n }\n /* tslint:disable:no-string-literal */\n TreeMapHighlight.prototype.mouseMove = function (e) {\n var treemap = this.treemap;\n var processHighlight;\n var targetId = e.target.id;\n var eventArgs;\n var items = [];\n var highlight = this.treemap.highlightSettings;\n var item;\n var highLightElements = [];\n var process;\n var treeMapElement;\n var element;\n var orders;\n if (targetId.indexOf('_Item_Index') > -1) {\n if (this.highLightId !== targetId) {\n treeMapElement = document.getElementById(treemap.element.id + '_TreeMap_' + treemap.layoutType + '_Layout');\n var selectionElements = document.getElementsByClassName('treeMapSelection');\n item = this.treemap.layout.renderItems[parseFloat(targetId.split('_')[6])];\n orders = findHightLightItems(item, [], highlight.mode, treemap);\n for (var i = 0; i < treeMapElement.childElementCount; i++) {\n element = treeMapElement.childNodes[i];\n process = true;\n item = treemap.layout.renderItems[element.id.split('_')[6]];\n for (var j = 0; j < selectionElements.length; j++) {\n if (element.id === selectionElements[j].id) {\n process = false;\n break;\n }\n }\n if (orders.indexOf(item['levelOrderName']) > -1 && process) {\n highLightElements.push(element);\n items.push(item);\n }\n }\n removeClassNames(document.getElementsByClassName('treeMapHighLight'), 'treeMapHighLight', treemap);\n for (var k = 0; k < highLightElements.length; k++) {\n element = highLightElements[k];\n applyOptions(element.childNodes[0], { border: highlight.border, fill: highlight.fill, opacity: highlight.opacity });\n element.classList.add('treeMapHighLight');\n this.highLightId = targetId;\n }\n eventArgs = { cancel: false, name: itemHighlight, treemap: treemap, items: items, elements: highLightElements };\n treemap.trigger(itemHighlight, eventArgs);\n }\n else {\n processHighlight = false;\n }\n }\n else {\n removeClassNames(document.getElementsByClassName('treeMapHighLight'), 'treeMapHighLight', treemap);\n processHighlight = false;\n }\n return processHighlight;\n };\n /**\n * To bind events for highlight\n */\n TreeMapHighlight.prototype.addEventListener = function () {\n if (this.treemap.isDestroyed) {\n return;\n }\n this.treemap.on(Browser.touchMoveEvent, this.mouseMove, this);\n };\n /**\n * To unbind events for highlight\n */\n TreeMapHighlight.prototype.removeEventListener = function () {\n if (this.treemap.isDestroyed) {\n return;\n }\n this.treemap.off(Browser.touchMoveEvent, this.mouseMove);\n };\n /**\n * Get module name.\n */\n TreeMapHighlight.prototype.getModuleName = function () {\n return 'treeMapHighlight';\n };\n /**\n * To destroy the hightlight.\n * @return {void}\n * @private\n */\n TreeMapHighlight.prototype.destroy = function (treeMap) {\n this.removeEventListener();\n };\n return TreeMapHighlight;\n}());\nexport { TreeMapHighlight };\nvar TreeMapSelection = /** @class */ (function () {\n function TreeMapSelection(treeMap) {\n this.treemap = treeMap;\n this.addEventListener();\n }\n /* tslint:disable:no-string-literal */\n TreeMapSelection.prototype.mouseDown = function (e) {\n var targetEle = e.target;\n var eventArgs;\n var treemap = this.treemap;\n var items = [];\n var targetId = targetEle.id;\n var item;\n var selectionElements = [];\n var opacity;\n var treeMapElement;\n var element;\n var orders;\n var selection = treemap.selectionSettings;\n var layoutID = treemap.element.id + '_TreeMap_' + treemap.layoutType + '_Layout';\n if (targetId.indexOf('_Item_Index') > -1) {\n e.preventDefault();\n if (this.selectionId !== targetId) {\n treeMapElement = document.getElementById(layoutID);\n item = treemap.layout.renderItems[parseFloat(targetId.split('_')[6])];\n orders = findHightLightItems(item, [], selection.mode, treemap);\n for (var i = 0; i < treeMapElement.childElementCount; i++) {\n element = treeMapElement.childNodes[i];\n item = treemap.layout.renderItems[element.id.split('_')[6]];\n if (orders.indexOf(item['levelOrderName']) > -1) {\n selectionElements.push(element);\n items.push(item);\n }\n }\n removeClassNames(document.getElementsByClassName('treeMapSelection'), 'treeMapSelection', treemap);\n this.selectionId = targetId;\n var highLightElements = document.getElementsByClassName('treeMapHighLight');\n for (var k = 0; k < selectionElements.length; k++) {\n element = selectionElements[k];\n if (highLightElements.length > 0) {\n for (var j = 0; j < highLightElements.length; j++) {\n if (highLightElements[j].id === element.id) {\n highLightElements[j].classList.remove('treeMapHighLight');\n }\n applyOptions(element.childNodes[0], { border: selection.border, fill: selection.fill, opacity: selection.opacity });\n element.classList.add('treeMapSelection');\n }\n }\n else {\n applyOptions(element.childNodes[0], { border: selection.border, fill: selection.fill, opacity: selection.opacity });\n element.classList.add('treeMapSelection');\n }\n eventArgs = { cancel: false, name: itemSelected, treemap: treemap, items: items, elements: selectionElements };\n treemap.trigger(itemSelected, eventArgs);\n }\n }\n else {\n removeClassNames(document.getElementsByClassName('treeMapSelection'), 'treeMapSelection', treemap);\n this.selectionId = '';\n }\n }\n else {\n removeClassNames(document.getElementsByClassName('treeMapSelection'), 'treeMapSelection', treemap);\n this.selectionId = '';\n }\n };\n /**\n * To bind events for selection\n */\n TreeMapSelection.prototype.addEventListener = function () {\n if (this.treemap.isDestroyed) {\n return;\n }\n this.treemap.on(Browser.touchStartEvent, this.mouseDown, this);\n };\n /**\n * To unbind events for selection\n */\n TreeMapSelection.prototype.removeEventListener = function () {\n if (this.treemap.isDestroyed) {\n return;\n }\n this.treemap.off(Browser.touchStartEvent, this.mouseDown);\n };\n /**\n * Get module name.\n */\n TreeMapSelection.prototype.getModuleName = function () {\n return 'treeMapSelection';\n };\n /**\n * To destroy the selection.\n * @return {void}\n * @private\n */\n TreeMapSelection.prototype.destroy = function (treeMap) {\n this.removeEventListener();\n };\n return TreeMapSelection;\n}());\nexport { TreeMapSelection };\n","import { Tooltip } from '@syncfusion/ej2-svg-base';\nimport { Browser, createElement } from '@syncfusion/ej2-base';\nimport { getMousePosition, textFormatter, formatValue } from '../utils/helper';\nimport { tooltipRendering } from '../model/constants';\n/**\n * Render Tooltip\n */\nvar TreeMapTooltip = /** @class */ (function () {\n function TreeMapTooltip(treeMap) {\n this.treemap = treeMap;\n this.tooltipSettings = this.treemap.tooltipSettings;\n this.tooltipId = this.treemap.element.id + '_TreeMapTooltip';\n this.addEventListener();\n }\n /* tslint:disable:no-string-literal */\n TreeMapTooltip.prototype.renderTooltip = function (e) {\n var pageX;\n var pageY;\n var target;\n var touchArg;\n var tootipArgs;\n if (e.type.indexOf('touch') !== -1) {\n this.isTouch = true;\n touchArg = e;\n pageX = touchArg.changedTouches[0].pageX;\n pageY = touchArg.changedTouches[0].pageY;\n target = touchArg.target;\n }\n else {\n this.isTouch = e.pointerType === 'touch';\n pageX = e.pageX;\n pageY = e.pageY;\n target = e.target;\n }\n var formatFunction;\n var value;\n var targetId = target.id;\n var item = {};\n var tooltipEle;\n var location;\n var toolTipHeader;\n var toolTipData = {};\n var tooltipContent = [];\n var markerFill;\n if (targetId.indexOf('_Item_Index') > -1) {\n item = this.treemap.layout.renderItems[parseFloat(targetId.split('_')[6])];\n toolTipHeader = item['name'];\n value = item['weight'];\n this.currentTime = new Date().getTime();\n toolTipData = item['data'];\n markerFill = item['options']['fill'];\n tooltipContent = [textFormatter(this.tooltipSettings.format, toolTipData, this.treemap) ||\n this.treemap.weightValuePath.toString() + ' : ' + formatValue(value, this.treemap)];\n if (document.getElementById(this.tooltipId)) {\n tooltipEle = document.getElementById(this.tooltipId);\n }\n else {\n tooltipEle = createElement('div', {\n id: this.treemap.element.id + '_TreeMapTooltip',\n className: 'EJ2-TreeMap-Tooltip',\n styles: 'position: absolute;pointer-events:none;'\n });\n document.getElementById(this.treemap.element.id + '_Secondary_Element').appendChild(tooltipEle);\n }\n location = getMousePosition(pageX, pageY, this.treemap.svgObject);\n location.y = (this.tooltipSettings.template) ? location.y + 10 : location.y;\n tootipArgs = {\n cancel: false, name: tooltipRendering, item: item,\n options: {\n location: location, text: tooltipContent, data: toolTipData,\n textStyle: this.tooltipSettings.textStyle, template: this.tooltipSettings.template\n },\n treemap: this.treemap,\n element: target, eventArgs: e\n };\n this.treemap.trigger(tooltipRendering, tootipArgs);\n if (!tootipArgs.cancel) {\n this.svgTooltip = new Tooltip({\n enable: true,\n header: '',\n data: tootipArgs.options['data'],\n template: tootipArgs.options['template'],\n content: tootipArgs.options['text'],\n shapes: [],\n location: tootipArgs.options['location'],\n palette: [markerFill],\n areaBounds: this.treemap.areaRect,\n textStyle: tootipArgs.options['textStyle'],\n theme: this.treemap.theme\n });\n this.svgTooltip.appendTo(tooltipEle);\n }\n else {\n this.removeTooltip();\n }\n }\n else {\n this.removeTooltip();\n }\n };\n TreeMapTooltip.prototype.mouseUpHandler = function (e) {\n this.renderTooltip(e);\n clearTimeout(this.clearTimeout);\n this.clearTimeout = setTimeout(this.removeTooltip.bind(this), 2000);\n };\n TreeMapTooltip.prototype.removeTooltip = function () {\n if (document.getElementsByClassName('EJ2-TreeMap-Tooltip').length > 0) {\n document.getElementsByClassName('EJ2-TreeMap-Tooltip')[0].remove();\n }\n };\n /**\n * To bind events for tooltip module\n */\n TreeMapTooltip.prototype.addEventListener = function () {\n if (this.treemap.isDestroyed) {\n return;\n }\n this.treemap.on(Browser.touchMoveEvent, this.renderTooltip, this);\n this.treemap.on(Browser.touchEndEvent, this.mouseUpHandler, this);\n };\n /**\n * To unbind events for tooltip module\n */\n TreeMapTooltip.prototype.removeEventListener = function () {\n if (this.treemap.isDestroyed) {\n return;\n }\n this.treemap.off(Browser.touchMoveEvent, this.renderTooltip);\n this.treemap.off(Browser.touchEndEvent, this.mouseUpHandler);\n };\n /**\n * Get module name.\n */\n TreeMapTooltip.prototype.getModuleName = function () {\n return 'treeMapTooltip';\n };\n /**\n * To destroy the tooltip.\n * @return {void}\n * @private\n */\n TreeMapTooltip.prototype.destroy = function (treeMap) {\n /**\n * Destroy method performed here\n */\n this.removeEventListener();\n };\n return TreeMapTooltip;\n}());\nexport { TreeMapTooltip };\n","import * as index from '@syncfusion/ej2-treemap';\nindex.TreeMap.Inject( index.TreeMapTooltip,index.TreeMapLegend,index.TreeMapHighlight,index.TreeMapSelection);\nexport * from '@syncfusion/ej2-treemap';\n"],"names":["createInstance","classFunction","params","arrayParam","unshift","undefined","Function","prototype","bind","apply","setImmediate","handler","unbind","num","Uint16Array","window","msCrypto","crypto","getRandomValues","secret","ret","i","combineArray","messageHandler","event","source","data","length","addEventListener","postMessage","removeEventListener","getValue","nameSpace","obj","value","splits","split","isUndefined","setValue","key","keys","start","fromObj","isNullOrUndefined","deleteObject","isObject","constructor","getEnumValue","enumObject","enumValue","merge","destination","temrObj","tempProp","_i","keys_1","Object","indexOf","Array","isArray","extend","copied","first","second","deep","result","arguments","_loop_1","arguments_1","obj1","forEach","clone","src","copy","getUniqueID","definedName","uid","debounce","eventFunction","delay","out","_this","this","args","clearTimeout","setTimeout","compareElementParent","child","parent","node","document","parentNode","throwError","message","Error","e","stack","print","element","printWindow","div","createElement","links","slice","call","getElementsByTagName","querySelectorAll","reference","open","appendChild","cloneNode","len","outerHTML","write","innerHTML","close","focus","interval","setInterval","ready","clearInterval","formatUnit","getInstance","component","elem","querySelector","instances","_a","inst","uniqueID","tagName","properties","SVG_REG","test","createElementNS","className","id","styles","setAttribute","attrs","attributes","addClass","elements","classes","classList","getClassList","ele","_b","classList_1","contains","add","removeClass","classList_2","remove","push","isVisible","style","visibility","offsetWidth","prepend","fromElements","toElement","docFrag","createDocumentFragment","insertBefore","firstElementChild","append","detach","removeChild","EventHandler","clearEvents","select","selector","context","selectAll","closest","el","nodeType","matches","setStyleAttribute","addClasses","removeClasses","msMatchesSelector","webkitMatchesSelector","getObject","instance","curKey","defaultValue","type","hasOwnProperty","getObjectArray","isSetter","isFactory","curType","setProperties","propertyGetter","Property","target","propertyDescriptor","set","newValue","oldVal","saveChanges","propertySetter","get","enumerable","configurable","defineProperty","addPropertyCollection","Complex","complexSetter","complexGetter","ComplexFactory","complexFactorySetter","complexFactoryGetter","Collection","oldValueCollection","newValCollection","complexArraySetter","defCollection","complexArrayGetter","CollectionFactory","complexArrayFactorySetter","complexArrayFactoryGetter","Event","eventDescriptor","oldValue","finalContext","getParentContext","prefix","NotifyPropertyChanges","classConstructor","propertyType","propList","props","complexProps","colProps","events","propNames","complexPropNames","colPropNames","eventNames","propertyName","getBuilderProperties","builderObject","propCollections","isPropertyArray","rex","prop","childType","tempValue","_c","curText","rippleEffect","rippleOptions","done","rippleModel","ignore","rippleFlag","isCenterRipple","duration","getRippleModel","isRippleEnabled","rippleHandler","rippleUpHandler","rippleLeaveHandler","Browser","isPointer","removeAttribute","offset","getBoundingClientRect","offsetX","pageX","body","scrollLeft","offsetY","pageY","scrollTop","documentElement","Math","max","abs","left","right","top","bottom","radius","sqrt","diameter","x","y","rippleElement","toString","getComputedStyle","getPropertyValue","transform","removeRipple","eventArgs","rippleElements","opacity","getElementsByClassName","setCulture","cultureName","defaultCulture","onIntlChange","notify","locale","getNumericObject","numObject","IntlBase","getDependables","cldrData","mapper","dateObject","numSystem","symbPattern","pattern","getSymbolPattern","getFormatData","dateSeparator","getDateSeparator","getDefaultDateObject","compile","template","helper","fnCode","str","varCOunt","localKeys","replace","LINES","DBL_QUOTED_STR","exp","match","cnt","matchStr","CALL_FUNCTION","rlStr","ELSEIF_STMT","WORD","trim","addNameSpace","QUOTES","IF_STMT","strs","FOR_STMT","rlStr_1","mtc","fnStr","fNameSpace","ELSE_STMT","IF_OR_FOR","evalExp","addNS","ignoreList","NOT_NUMBER","templateString","compiler","engineObj","propName","HAS_SVG","childNodes","HAS_ROW","wrapperInitialize","tag","WRAPPER","role","ejInstance","input","wrapper","aria-checked","index","nodeName","nodeValue","getTextNode","childnode","destroy","ejInst","checked","preRender","proxy","control","moduleName","getAttribute","createCheckBox","enableRipple","options","cssClass","enableRtl","rippleSpan","frameSpan","label","labelSpan","rippleMouseHandler","event_1","createEvent","initEvent","dispatchEvent","calculateRelativeBasedPosition","anchor","fixedElement","anchorPos","tempAnchor","offsetParent","position","offsetLeft","offsetTop","parentElement","calculatePosition","currentElement","positionX","positionY","targetValues","popupRect","fixedParent","parentDocument","ownerDocument","posX","posY","pos","elementRect","setPosx","getElementHCenter","setPosy","getElementTop","getElementRight","getElementVCenter","getElementLeft","getElementBottom","updatePosition","toLowerCase","getBodyScrollTop","getBodyScrollLeft","height","width","fit","viewPortElement","axis","X","Y","elemData","targetContainer","containerWidth","getTargetContainerWidth","getViewPortWidth","containerLeft","ContainerLeft","containerRight","ContainerRight","overLeft","overRight","containerHeight","getTargetContainerHeight","getViewPortHeight","containerTop","ContainerTop","containerBottom","ContainerBottom","overTop","overBottom","isCollide","elemOffset","yAxis","topCollideCheck","xAxis","leftCollideCheck","topSide","rightSide","leftSide","bottomSide","flip","tEdge","TL","TR","BL","BR","eEdge","edge","updateElementData","setPosition","leftFlip","topFlip","setPopup","eStatus","deepCheck","collideSide","getTargetContainerLeft","getTargetContainerTop","innerHeight","innerWidth","getScrollableParent","eleStyle","scrollParents","overflowRegex","parentStyle","overflow","overflowY","overflowX","getZindexPartial","parentZindex","defaultView","childrenZindex","children","isEqualNode","finalValue","concat","createSpinner","container","spinnerContainer","CLS_SPINWRAP","spinnerInnerContainer","CLS_SPININWRAP","wrap","inner_wrap","create_spinner_container","spinTemplate","theme","getTheme","defaultSize","DEFT_MAT_WIDTH","DEFT_FAB_WIDTH","DEFT_BOOT_WIDTH","parseFloat","calculateRadius","setTheme","labelEle","CLS_SPINLABEL","textContent","createLabel","CLS_SPINTEMPLATE","replaceContent","spinCSSClass","CLS_HIDESPIN","createMaterialSpinner","random_generator","globalTimeOut","timeOut","innerContainer","svgMaterial","CLS_MATERIALSPIN","matCirclePath","CLS_SPINCIRCLE","firstChild","create_material_element","svg","path","strokeSize","getStrokeSize","transformOrigin","drawArc","PI","getDashOffset","mat_calculate_attributes","create_fabric_element","CLS_FABRICSPIN","fb_calculate_attributes","createFabricSpinner","svgBoot","CLS_BOOTSPIN","item","bootCircle","defaultRadius","create_bootstrap_element","startArc","defineArcPoints","circleEle","boot_calculate_attributes","createBootstrapSpinner","CLS_HIGHCONTRASTSPIN","createHighContrastSpinner","generateSeries","begin","stop","formSeries","series","end","count","increment","toFixed","random","combine","charAt","floor","themeClass","svgFabric","fabricCirclePath","fabricCircleArc","CLS_SPINARC","animateMaterial","spinnerInfo","easing","mat_animation","currentTime","min","Date","getTime","startTime","updatePath","change","globalInfo","previousId","getSize","rotate","createCircle","easeAnimation","current","timestamp","timecount","innerConainer","trgClass","centerX","centerY","circle","join","defineCircle","endArc","defineArc","angle","radians","cos","sin","showSpinner","showHideSpinner","isHide","spinnerWrap","inner","CLS_SHOWSPIN","svgEle","isAnimate","globalObject","globalVariables","timeOutVar","startMatAnimate","boot_animate","rotation","animateBootstrap","hideSpinner","getModel","model","createMask","autocomplete","autocorrect","autocapitalize","spellcheck","aria-live","aria-valuenow","mask","splitMask","splitInnerMask","j","pushIntoRegExpCollec","chkSpace","customRegExpCollec","hiddenMask","promptChar","escapeMaskValue","promptMask","customCharacters","RegExp","escapeNumber","substring","aria-invalid","applyMask","setElementValue","setMaskValue","wireEvents","maskInputKeyDownHandler","maskInputKeyPressHandler","maskInputKeyUpHandler","maskInputHandler","maskInputFocusHandler","maskInputBlurHandler","maskInputPasteHandler","maskInputCutHandler","maskInputDropHandler","enabled","bindClearEvent","unwireEvents","showClearButton","inputObj","clearButton","resetHandler","preventDefault","redoCollec","startIndex","selectionStart","endIndex","selectionEnd","triggerMaskChangeEvent","setSelectionRange","unstrippedValue","strippedValue","maskValues","k","checkMask","maskValue","regExpCollec","focusEventArgs","trigger","isFocus","isDevice","info","version","isIos","placeholder","floatLabelType","labelElement","TOPLABEL","sIndex_1","eIndex_1","oldValue_1","_callPasteHandler","maskKeyPress","validateValue","i_1","sIndex_2","eIndex","undoCollec","value_1","ctrlKey","keyCode","removeMaskInputValues","addedValues","val","prevValue","startValue","collec","splice","mobileRemoveFunction","sIndex","oldEventVal","isRemove","isDeleted","initStartIndex","initEndIndex","curMask","multipleDel","prompt_1","elementValue","code","String","fromCharCode","isIosInvalid","changeEventArgs","maskedValue","isInteraction","removeMaskError","val_1","startIndex_1","isSpace","isAndroid","preventUnsupportedValues","temp_1","mobileValidation","isCtrlKey","eventOldVal","allowText","prevSupport","isEqualVal","keyValue","customValArr","curVal","caseCount","toUpperCase","addMaskErrorClass","sIdx","idx","ctrl","chkSupport","timer","INPUTGROUP","FLOATINPUT","ERROR","BOTTOMLABEL","Input","getMaskInput","UTILMASK","inputEle","regularExpressions","getUtilMaskEle","getFieldValues","dataItem","fields","fieldData","isHeader","field","property","validateNullOrUndefined","defaultToString","getTooltipThemeColor","tooltipFill","tooltipBoldLabel","tooltipLightLabel","tooltipHeaderLine","measureText","text","font","htmlObject","getElementById","fontSize","size","fontWeight","fontStyle","fontFamily","whiteSpace","lineHeight","Size","clientWidth","clientHeight","getElement","removeElement","drawSymbol","location","shape","url","renderer","SvgRenderer","temp","functionName","locX","locY","rx","ry","cx","cy","d","xValue","yValue","href","renderOption","calculateShapes","getSeriesColor","palette","getThemeColor","axisLabel","axisTitle","axisLine","majorGridLine","minorGridLine","majorTickLine","minorTickLine","chartTitle","legendLabel","background","areaBorder","errorBar","crosshairLine","crosshairFill","crosshairLabel","markerShadow","selectionRectFill","selectionRectStroke","selectionCircleStroke","getScrollbarThemeColor","scrollStyle","backRect","thumb","circleHover","arrow","grip","arrowHover","backRectBorder","rotateTextSize","chart","box","font-size","font-style","font-family","font-weight","text-anchor","createText","delayRedraw","svgObject","logBase","base","log","showTooltip","areaWidth","isTouch","tooltip","inside","range","withIn","logWithIn","valueType","withInRange","previousPoint","currentPoint","nextPoint","mX2","mX1","mX3","xStart","visibleRange","xEnd","ceil","sum","values","values_1","subArraySum","last","yName","subtractThickness","rect","thickness","subtractRect","degreeToLocation","degree","center","radian","ChartLocation","getAngle","point","atan2","subArray","valueToCoefficient","isInversed","TransformToVisible","isInverted","labelPlacement","CoefficientToVector","valueToPolarCoefficient","primaryXAxis","startAngle","clipRect","indexFinder","isPoint","ids","Index","parseInt","coefficient","delta","dateTimeInterval","visibleLabels","createTooltip","createZoomingLabels","isVertical","arrowLocation","direction","opposedPosition","chartRect","availableSize","scrollBarHeight","zoomingScrollBar","endLabel","startLabel","labelStyle","findDirection","Rect","drawPath","PathOption","themeStyle","textElement","TextOption","color","withInBounds","bounds","getValueXByPoint","getValueYByPoint","findClipRect","requireInvertedAxis","firstToLowerCase","substr","getMinPointsDelta","seriesCollection","xValues","minVal","minDelta","Number","MAX_VALUE","visible","name","xAxisName","points","map","sort","xMin","getAnimationFunction","effect","linear","endValue","markerAnimate","pointIndex","isLabel","Animation","animate","progress","timeStamp","triggerLabelRender","tempInterval","argsData","cancel","axisLabelRender","VisibleLabels","setRange","minimum","maximum","getActualDesiredIntervalsCount","orientation","desiredIntervals","desiredIntervalsCount","maximumLabels","templateAnimate","calculateLegendShapes","getRectLocation","startLocation","endLocation","outerRect","minMax","getTemplateFunction","templateFn","templateComplier","createTemplate","childElement","content","templateElement","getFontStyle","measureElementRect","findlElement","length_1","getPoint","xLength","yLength","appendElement","hasChildNodes","getDraggedRectLocation","x1","y1","x2","y2","checkBounds","getLabelText","labelFormat","customLabelFormat","seriesType","high","low","median","upperQuartile","lowerQuartile","outliers","liers","format","stopTimer","collections","currentRect","some","isOverlap","containsRect","calculateRect","textSize","margin","convertToHexCode","componentToHex","r","g","b","hex","convertHexToColor","exec","ColorValue","colorNameToHex","isRGBValue","getSaturationColor","factor","colorCode","rgb","round","getMedian","half","fill","space","stroke","mode","cartesianlarge","cartesiansmall","getAccumulationLegend","textTrim","maxWidth","stringToNumber","containerSize","rX","rY","arrowPadding","tipX","tipY","tipRadius","startX","startY","isMinus","tspanElement","renderOptions","dominant-baseline","baseLine","createTSpan","calculateSize","marginHeight","getModuleName","tooltipSpace","enable","periodHeight","periodSelectorSettings","periods","labelSize","enableGrouping","disableRangeSelector","createSvg","getTitle","title","titleCollection","textOverflow","textWrap","titlePositionX","chartSize","leftPadding","rightPadding","titleStyle","textAlignment","currentLabel","maximumWidth","textCollection","labelCollection","getSeriesFromIndex","visibleSeries","visibleSeries_1","pointByIndex","points_1","rangeValueToCoefficient","inversed","getXLocation","getRangeValueXByPoint","getExactData","selectedData","getNearestValue","reduce","prev","curr","getRangeThemeColor","thumbSize","navigatorStyleSettings","thumbWidth","thumbHeight","gridLineColor","axisLineColor","labelFontColor","unselectedRectColor","thumpLineColor","thumbBackground","gripColor","thumbHoverColor","selectedRegionColor","tooltipBackground","tooltipFontColor","smithchart","SmithchartSize","maxwidth","convertElementFromLabel","labelId","templateHtml","_getEpsilonValue","reverselinear","renderTextElement","sparkline","appendShape","drawCircle","drawRectangle","topLeft","topRight","bottomLeft","bottomRight","calculateRoundedRectPath","textOptions","getIdElement","toPixel","maxDimension","setStyles","border","stroke-width","appendPath","gauge","calculateSum","from","to","getAngleFromValue","maximumValue","minimumValue","endAngle","isClockWise","isCompleteAngle","getDegree","getValueFromAngle","totalAngle","getAngleFromLocation","getLocationFromAngle","GaugeLocation","getPathArc","startWidth","endWidth","startRadius","endRadius","arcRadius","getRangePath","getCirclePath","innerStart","innerEnd","clockWise","getCompleteArc","innerRadius","getCompletePath","getPointer","targetId","tempString","axisIndex","pointerIndex","getLabelFormat","getRangeColor","ranges","currentRange","filter","rangeColor","processPathData","collection","arrayCollection","parsePathData","ob","char","command","l","s","r1","r2","largeArc","sweep","tokenizer","commands","lastIndex","isExponential","getRectanglePath","cornerRadius","point2","next","corners","corner","getPolygonPath","seg","pathSegmentCollection","x0","y0","segments","cpt2","newSeg","transformPath","arr","sX","sY","bX","bY","iX","iY","scalePathData","updatedSegment","getPathString","segment","isScale","scaleFactor","oldOffset","newOffset","splitArrayCollection","getNewString","getString","string","cmd","ang","identityMatrix","Matrix","MatrixTypes","Identity","transformPointByMatrix","matrix","pt","Translation","Scaling","m11","m22","m21","num2","m12","multiplyPoint","transformPointsByMatrix","transformedPoints","rotateMatrix","multiplyMatrix","Unknown","setMatrix","createRotationRadians","scaleMatrix","scaleX","scaleY","createScaling","translateMatrix","matrix1","matrix2","type2","assignMatrix","mat","randomId","chars","getBounds","actualSize","pivot","toBounds","rotateAngle","parentTransform","cloneObject","additionalProp","newObject","sourceObject","customProperties","propAdditional","getFunction","internalProp","getInternalProperties","properties_1","cloneArray","HTMLElement","innerHtml","sourceArray","clonedArray","extendObject","childObject","extendeArray","extendArray","extendedObject","childArray","reset","textAlignToString","state","wordBreakToString","bBoxText","measureElement","bold","bBox","getBBox","middleElement","overFlow","middle","t","whiteSpaceToString","rotateSize","minX","minY","maxX","maxY","rotatePoint","pivotX","pivotY","getOffset","desiredSize","findSegmentPoints","sample","sampleLength","pts","pathNode","setAttributeNS","pathData","newPathString","absoluteBounds","pathLength","getTotalLength","getPointAtLength","measurePath","svgBounds","wrapSvgText","textValue","txtValue","bounds1","breakWord","dy","words","newText","existingWidth","existingText","eachLine","wordWrapping","measureHtmlText","italic","textWrapping","wordBreak","offsetHeight","wrapBounds","strokeColor","strokeWidth","dashArray","strokeDashArray","shadow","gradient","description","textDecoration","doWrap","textAlign","getTextOptions","txtWidth","wrapSvgTextAlign","getDiagramLayerSvg","diagramId","elementcoll","getDiagramElement","getAdornerLayerSvg","getSelectorElement","getAdornerLayer","getPortLayerSvg","getNativeLayerSvg","getGridLayerSvg","getBackgroundLayerSvg","getBackgroundLayer","getNativeLayer","getHTMLLayer","createHtmlElement","elementType","attribute","setAttributeHtml","createSvgElement","setAttributeSvg","parentsUntil","isID","hasClass","animVal","addTouchPointer","touchList","touches","clientX","clientY","pointerId","elementId","contentId","getContent","isHtml","compiledString","createMeasureElements","usageCount","divElement","imageElement","createTextNode","tSpan","getBasicShape","basicShapes","getPortShape","portShapes","getDecoratorShape","decorator","decoratorShapes","getIconShape","icon","getFlowShape","flowShapes","initTooltip","diagram","tooltipOption","Tooltip","updateTooltipContent","beforeCollision","beforeOpen","opensOn","appendTo","display","collidedPosition","updateTooltip","tooltipObject","showTipPointer","animation","findConnectorPoints","layoutOrientation","intermeditatePoints","sourcePoint","sourceWrapper","srcPoint","sourcePortWrapper","srcPort","srcNode","getPortDirection","sourceID","targetWrapper","sPoint","tPoint","getIntersection","getSourcePoint","tarPoint","sourceNode","targetNode","sourcePort","targetPort","targetPortWrapper","srcCorner","srcDir","tarCorner","tarDir","port","tarPortPt","getDirection","topCenter","bottomCenter","middleRight","middleLeft","equals","containsPoint","sPt","tPt","refPoint","sourceEle","targetEle","tarPort","srcCor","tarCor","isInterSect","sourceSegment","createSegmentsCollection","targetSegment","srcSegment","tarSegmet","intersect3","checkSourceAndTargetIntersect","findPoint","findEndPoint","checkLastSegmentasTerminal","Point","isEmptyPoint","vector1","distance","vector2","intermeditatePointsForStraight","removeSegment","getOppositeDirection","checkConsectiveSegmentAsSame","updateSegmentPoints","checkSourcePointInTarget","nodeOrPortToNode","pointToPort","checkPreviousSegment","checkPortdirection","returnIntermeditatePoints","findIntermeditatePoints","OrthogonalSegment","extra","swap","getSwapping","swapPoints","diffY","NoOfSegments","One","Three","Five","getRightToLeftSegmentCount","sourceObj","targetObj","diffX","getRightToRightSegmentCount","Two","Four","getRightToTopSegmentCount","getRightToBottomSegmentCount","getBottomToTopSegmentCount","difX","getBottomToBottomSegmentCount","getBottomToLeftSegmentCount","getLeftToLeftSegmentCount","getLeftToTopSegmentCount","getTopToTopSegmentCount","segLength","tar","orthoConnection2Segment","orthoConnection3Segment","prevDir","orthoConnection4Segment","segmentValue","sLeft","sRight","sBottom","sTop","tLeft","tRight","tBottom","tTop","addLineSegment","orthoConnection5Segment","addOrthoSegments","findOrthoSegments","defaultOrthoConnection","fixedPoint","nodeMargin","nodeConnectingPoint","nodeDirection","source_1","target_1","segmentPoint","connectToOneEnd","seg_1","lastSegment","pointToNode","pointToPoint","findPointToPointOrtho","terminateConnection","targetPoint","setLineEndPoint","segPoint","portdirection","findSourceDirection","addPoints","update","portDir","findSegmentDirection","endPoint","isTarget","reverse","pointsFromNodeToPoint","tPoints","connector","actualSegment","actualLastPoint","distancePoints","getPoints","X1","Y1","X2","Y2","createLineSegment","dir","BezierSegment","StraightSegment","length_3","lastPoint","nodeCorners","top_1","shortes","findAngle","re","findLength","es","asin","cor","isTar","segmentPoints","constValue","angle_2","angle_3","PathElement","getIntersectionPoints","thisSegment","minimal","intersection","intersectSegment","isNaN","intersect","dist","segment1","segment2","a1","a2","b1","b2","c1","c2","r3","r4","denom","x3","y3","x4","y4","sameSign","a","point1","allow","diffx","diffy","interPt","getLeftLength","getRightLength","preDir","getTopLength","getBottomLength","getOrtho3Seg","point3","gap","closeEdge","boundsValue","one","two","three","four","fourty5","one35","two25","three15","getOuterBounds","outerBounds","sourceDecorator","uniteRect","targetDecorator","excludeBounds","part","isEmptyVector","getBezierPoints","getBezierBounds","startPoint","controlPoint1","controlPoint2","minx","miny","maxx","maxy","bezierPoints","canSelect","Connector","constraints","ConnectorConstraints","Select","NodeConstraints","canMove","Drag","Selector","canEnablePointerEvents","PointerEvents","canDragSourceEnd","DragSourceEnd","canDragTargetEnd","DragTargetEnd","canDragSegmentThumb","DragSegmentThumb","canRotate","Rotate","canShadow","Shadow","canInConnect","Node","InConnect","canOutConnect","OutConnect","canResize","returnValue","ResizeSouthEast","ResizeEast","ResizeNorthEast","ResizeSouth","ResizeNorth","ResizeSouthWest","ResizeWest","ResizeNorthWest","canAllowDrop","AllowDrop","canSingleSelect","tool","DiagramTools","SingleSelect","canZoomPan","ZoomPan","canContinuousDraw","ContinuousDraw","canDrawOnce","DrawOnce","defaultTool","MultipleSelect","canUserInteract","DiagramConstraints","UserInteraction","canPageEditable","ApiUpdate","canApiInteract","diagramActions","DiagramAction","ToolAction","canDraw","PortConstraints","Draw","canDrag","renderRuler","isHorizontal","rulerSize","getRulerSize","rulerGeometry","getRulerGeometry","diagramRuler","rulerSettings","horizontalRuler","verticalRuler","ruler","Ruler","segmentWidth","hRuler","vRuler","rulerObj","updateRuler","hOffset","scroller","horizontalOffset","vOffset","verticalOffset","showRulers","updateRulerDimension","removeRulerElements","viewPortHeight","viewPortWidth","updateRulerDiv","updateRulerSpace","scale","currentZoom","arrangeTick","dataBind","marginLeft","hRulerOffset","marginTop","vRulerOffset","completeRegion","region","selectedObjects","findObjectType","drawingObject","findNearestPoint","shortestPoint","angleBWStAndEnd","angleBWStAndRef","vaAngle","isPointOverConnector","intermediatePoints","bezierPoint1","bezierPoint2","pointsForBezier","Inflate","hitPadding","intersectinPt","intersectDetails","intersectPt","rect_1","lineUtil1","lineUtil2","l1","l2","na","nb","ua","ub","line","getTooltipOffset","mousePosition","inheritTooltip","InheritTooltip","objectTooltip","isMouseBased","offsetPoint","tooltipOffset","relativeMode","bound","objects","getAnnotationPosition","annotation","getloop","getOffsetOfConnector","alignednumber","getAlignedPosition","offsetLength","prevLength","kCount","lengths","cnst","alignment","alignLabelOnSegments","vAlign","hAlign","getBezierDirection","serialize","clonedObject","getCustomProperty","JSON","stringify","deserialize","clear","protectPropertyChange","dataSourceSettings","doBinding","nodeTemp","setNodeTemplate","getDescription","commandManager","execute","canExecute","arrangeTickHorizontal","arrangeTickVertical","getLayoutInfo","layout","getBranch","nodeDefaults","getNodeDefaults","connectorDefaults","getConnectorDefaults","dataObj","parse","contextMenuSettings","bridgeDirection","pageSettings","addInfo","scrollSettings","layers","backgroundColor","basicElements","connectors","nodes","snapSettings","isLoading","views","refresh","Diagram","selectedNodes","getCollection","selectedItems","selcectedConnectors","objNodes","diagramNodes","diagramNodes_1","updateStyle","changedObject","StrokeStyle","TextElement","refreshTextElement","updateHyperlink","actualAnnotation","hyperlink","link","updateShapeContent","actualObject","minHeight","maxHeight","minWidth","horizontalAlignment","verticalAlignment","Text","updateShape","oldObject","DiagramElement","pathContent","imageContent","ImageElement","imageAlign","align","imageScale","flowShapeElement","nativeContent","DiagramNativeElement","htmlContent","DiagramHtmlElement","updateContent","newValues","nativeElement","htmlElement","flowshapedata","basicShapeData","removeItem","array","updateConnector","anglePoint","srcDecorator","tarDecorator","updateSegmentElement","firstSegment","clipDecorators","updateDecoratorElement","updateShapeElement","getUserHandlePosition","selectorItem","handle","side","connectorOffset","getPointloop","canResizeCorner","selectorConstraints","action","thumbsConstraints","SelectorConstraints","ThumbsConstraints","canShowCorner","checkPortRestriction","portVisibility","findAnnotation","annotationId","annotations","findPortIndex","ports","getObjectFromCollection","scaleElement","sw","sh","refObject","Container","newPosition","insertObject","mid","findToolToActivate","touchStart","touchMove","currentSymbol","hasSelection","userHandles","obj_1","paddedBounds","selectorBnds","hasSingleConnection","conn_1","sourcePaddingValue","targetPaddingValue","conn","connectorEditingToolModule","checkForConnectorSegment","ten","rotateThumb","forty","checkForResizeHandles","PointPort","findPortToolToActivate","isSelected","PortVisibility","Hover","Visible","sourcePortID","currentDrawingObject","padding","firstLevel","nameTable","parentId","getCursor","cursor","cursors","getBpmnShapePathData","bpmnShapes","getBpmnTriggerShapePathData","bpmnTriggerShapes","getBpmnGatewayShapePathData","bpmnGatewayShapes","getBpmnTaskShapePathData","bpmnTaskShapes","getBpmnLoopShapePathData","bpmnLoopShapes","getGraphBounds","collectionContains","coll","incrementalSearch","items","selectedIndex","ignoreCase","queryString","prevString","activeClass","listItems","strLength","innerText","Search","inputVal","searchType","itemData","queryStr","toLocaleLowerCase","itemsData","highlightSearch","query","ignoreRegex","replaceQuery","createFloatLabel","overAllWrapper","searchWrapper","inputElement","floatLinelement","floatLabelElement","FLOATLINE","FLOATTEXT","aria-labelledby","LABELTOP","LABELBOTTOM","updateFloatLabelState","setPlaceHolder","doesImplementInterface","checkFor","valueAccessor","column","getUpdateUsingRaf","updateFunction","callBack","requestAnimationFrame","iterateArrayOrObject","predicate","pred","templateCompiler","baseTemplateComplier","setStyleAndAttributes","customAttributes","copyAttr","literals","baseExtend","exclude","moved","prepareColumns","columns","autoWidth","c","Column","headerText","foreignKeyValue","foreignKeyField","setCssInGridPopUp","popUp","isBottomTail","popUpSpan","targetPosition","changedTouches","popup","getPosition","getPopupLeftPosition","getActualProperties","ChildProperty","getElementIndex","inArray","getActualPropFromColl","getUid","appendChildren","parents","calculateAggregate","customAggregate","DataUtil","aggregates","getScrollBarWidth","scrollWidth","divNode","cssText","getRowHeight","rowHeight","table","isComplexField","getComplexFieldID","fieldName","getComplexValue","rowData","complexValue","isEditable","col","row","isOldRow","isIdentity","isPrimaryKey","allowEditing","isActionPrevent","dlg","editSettings","showConfirmDialog","changeButtonType","elements_1","setFormatter","serviceLocator","fmtr","getService","getFormatFunction","skeleton","setParser","getParserFunction","addRemoveActiveClasses","cells","distinctStringValues","res","getFilterMenuPostion","dialogObj","grid","elementVisible","newpos","dlgWidth","leftPos","getZIndexCalcualtion","zIndex","toogleCheckbox","span","createCboxWithWrap","removeAddCboxClasses","refreshForeignData","getForeignData","foreignKeyData","cell","isForeignKey","lValue","fField","Query","fdata","dataSource","DataManager","offline","json","columnData","getDay","where","getDatePredicate","operator","matchCase","executeLocal","getColumnByForeignKeyValue","filterObject","datePredicate","prevDate","nextDate","prevObj","nextObj","setHours","predicateSt","Predicate","predicateEnd","and","or","ejpredicate","renderMovable","frzCols","mEle","childElementCount","setStateAndProperties","summaryIterator","callback","titlePositionY","heatmapSize","topPadding","bottomPadding","textNone","increaseDateTimeInterval","intervalType","setFullYear","getFullYear","setMonth","getMonth","setDate","getDate","getHours","setMinutes","getMinutes","getTooltipText","tooltipCollection","xPosition","yPosition","RgbColor","R","G","B","convertPixelToValue","pointerElement","pointerRect","lineBounds","newSize","divideVal","getPathToRect","tempDiv","svgRect","isPointerDrag","axes","pointerEnable","pointers","pointer","enableDrag","getElementOffset","calculateNiceInterval","currentInterval","niceInterval","minInterval","pow","intervalDivs_1","interior","getRangePalette","placement","getBox","boxName","rectWidth","rectHeight","bottomRadius","topRadius","addValue","y1_1","locHeight","x1_1","locWidth","maps","degreesToRadians","deg","radiansToDegrees","convertGeoToPoint","latitude","longitude","layer","mapModel","lat","lng","mapSize","mapAreaRect","longitudeMinMax","baseMapBounds","latitudeMinMax","latRadian","lngRadian","projectionType","geometryType","pixelOrigin","sinY","calculateBound","aitoff","tan","Infinity","roundTo","xToCoordinate","yToCoordinate","convertTileLatLongToPoint","zoomLevel","tileTranslatePoint","isMapCoordinates","sinLatitude","pixelX","pixelY","mapObject","totalSize","baseSize","cosy","sincia","sinci","acos","convertElement","markerId","mapObj","markerEle","tempGroup","drawBalloon","balloon","createGroup","checkShapeDataFields","dataPath","propertyPath","pointObject","findMidPointOfPolygon","startX1","startY1","xSum","ySum","rightMinPoint","rightMaxPoint","leftMinPoint","leftMaxPoint","bottomMinPoint","bottomMaxPoint","topMinPoint","topMaxPoint","rightMin","rightMax","leftMin","leftMax","topMax","topMin","bottomMax","bottomMin","isCustomPath","layerData","customPath","findPosition","getTranslate","zoomFactor","zoomSettings","baseMapRectBounds","mapWidth","mapHeight","centerPosition","leftPosition","topPosition","mapLayerPanel","calculateFactor","getElementByID","Internalize","formatFunction","intl","getNumberFormat","useGrouping","useGroupingSeparator","getShapeData","layerIndex","shapeIndex","shapeData","shapeDataPath","shapePropertyPath","triggerShapeEvent","selection","eventName","elementSelector","getTargetElement","createStyle","customizeStyle","elementAnimate","animationComplete","timeout","areaHeight","demo","size1","wordWrap","changeBorderWidth","childNode","changeNavaigationLineWidth","currentStroke","layersCollection","shapeSettings","m","navigationLineSettings","targetTouches","calculateScale","startTouches","endTouches","startDistance","getDistance","getTouches","posTop","pageXOffset","posLeft","pageYOffset","touch","getTouchCenter","zoomAnimate","previousLocation","preScale","previousScale","diffScale","currentLocation","MapLocation","currentScale","slopeFactor","slope","slopeIntersection","slopeValue","intercept","horizontalDifference","verticalDifference","translatePoint","zoomModule","processTemplate","process","clearAnimation","startAnimation","cancelAnimationFrame","smoothTranslate","getIndex","getDropDownValue","returnType","subCommand","isNOU","iconCss","getFormattedFontSize","i10n","itemLocale","toolsLocale","getConstant","setToolbarStatus","isPopToolbar","dropDown","dropDownModule","tbItems","itemStr","tbElements","classes.CLS_ACTIVE","toolbarSettings","formatDropDown","types","alignDropDown","model.alignmentItems","fontNameDropDown","name_1","fontSizeDropDown","getTBarItemsIndex","toolbarItems","itemsIndex","updateUndoRedoStatus","baseToolbar","undoRedoStatus","trgItems","undoRedoItems","toolbarObj","classes.CLS_TB_ITEM","keys_2","enableItems","evt","setAttributes","htmlAttributes","rte","isFrame","contentModule","getDocument","htmlAttr","setEnable","readonly","setReadOnly","valueContainer","getWeekFirstDate","date1","firstDayOfWeek","date","firstDateOfMonth","lastDateOfMonth","dt","setTime","time","tzOffsetBefore","getTimezoneOffset","tzOffsetDiff","MS_PER_DAY","resetTime","getDateInMs","addDays","addMonths","day","getMaxDays","getStartEndHours","startHour","endHour","setSeconds","getSeconds","date2","getDaysCount","startDate","endDate","strTime","getDateFromString","findIndexInData","getMonthSummary","ruleObject","cldrObj","localeObj","summary","monthDay","WEEKPOS","DAYINDEXOBJECT","generate","rule","excludeDate","startDayOfWeek","maximumCount","viewDate","MAXOCCURRENCE","cacheDate","extractObjectFromRule","modifiedDate","tempViewDate","until","maxOccurrence","dayIndex","setFirstDayOfWeek","DAYINDEX","tempExcludeDate","parsedDate","getDateFromRecurrenceDateString","freq","tempDate","expectedCount","compareDates","validateRules","excludeDateHandler","dailyType","getStartDateForWeek","expectedDays","dayCycleData","processWeekDays","weeklyType","monthlyType","yearDay","weekNo","checkYearlyType","startDay","firstWeekSpan","maxDate","minDate","stDate","weekNos","processWeekNo","LEAPYEAR","getMaxYearDay","processYearDay","yearlyType","recDateString","zeroIndex","validateMonthlyRuleType","month","beginDate","monthCollection","weekCollection","monthInit","currentMonthDate","datas","week","dayData","chDate","setNextValidDate","monthlyDayTypeProcess","mainDate","validateProperDate","monthlyDateTypeProcess","NORMALYEAR","monthData","rules","validRules","splitData","dayCycle","checkYear","expectedyearDay","currentDate","startDateCollection","diff","getYearDay","shift","days","expectedMonth","expectedDate","checkDayIndex","checkMonth","checkDate","getRecurrenceStringFromDate","getUTCFullYear","roundDateValues","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","measureObject","Location","itemsToOrder","isContainsData","pathName","processData","treemap","isExist","leaf","leafItemSettings","levels","groupPath","labelPath","weightValuePath","findChildren","findHightLightItems","treeMap","parentName","currentItem","renderItems","findLabelLocation","areaRect","getArea","getShortestEdge","convertToContainer","convertToRect","xOffset","yOffset","getMousePosition","clientTop","clientLeft","colorMap","colorMapping","equalValue","paths","minOpacity","maxOpacity","deSaturationColor","rangeValue","dataLabel","resultText","currentLength","totalWidth","totalLength","sliceString","hide","orderByArea","removeClassNames","applyOptions","textFormatter","formatValue","svgRenderer","renderLegendShape","renderPath","shapeWidth","shapeHeight","shapeX","shapeY","isParentItem","headerRegex","defaultType","Ajax","async","contentType","emitError","send","Promise","resolve","reject","httpRequest","XMLHttpRequest","onreadystatechange","stateChange","onLoad","onload","onProgress","onprogress","onAbort","onabort","onError","onerror","onUploadProgress","upload","setRequestHeader","beforeSend","successHandler","onSuccess","failureHandler","reason","onFailure","responseText","dataType","error","readyState","status","statusText","getResponseHeader","responseHeaders","header","headers","getAllResponseHeaders","addOrGetEventData","__eventList","listener","bindTo","intDebounce","debounceListener","eventData","copyData","eventProp","eventData_1","Observer","ranArray","boundedEvents","on","cntxt","notExist","isHandlerPresent","off","curObject","indexLocation","argument","curObject_1","cur","boundedEvents_1","Base","isProtectedOnChange","changedProperties","oldProperties","refreshing","finalUpdate","childChangedProperties","modelObserver","addInstance","isDestroyed","muteOnChange","prevDetection","callChildDataBind","clearChanges","getOwnPropertyNames","newChanges","oldChanges","onPropertyChanged","moduleClass","ej2_instances","REGX_MOBILE","REGX_IE","REGX_IE11","REGX_IOS","REGX_IOS7","REGX_ANDROID","REGX_WINDOWS","REGX_VERSION","REGX_BROWSER","OPERA","EDGE","CHROME","PANTHOMEJS","SAFARI","WEBKIT","MSIE","MOZILLA","browserDetails","extractBrowserDetail","browserInfo","culture","clientInfo","userAgent","language","navigator","getEvent","move","getTouchStartEvent","getTouchEndEvent","getTouchMoveEvent","getTouchCancelEvent","regX","uA","isMSPointer","isWebView","cordova","PhoneGap","phonegap","forge","touchStartEvent","touchMoveEvent","touchEndEvent","touchCancelEvent","__extends","extendStatics","setPrototypeOf","__proto__","p","__","create","__decorate","decorators","desc","getOwnPropertyDescriptor","Reflect","decorate","_super","ease","easeIn","easeOut","easeInOut","elasticInOut","elasticIn","elasticOut","Animation_1","element_1","delayAnimation","animationId","frameId","applyAnimation","step","timerId","prevTimeStamp","avg","timingFunction","performance","now","fail","newProp","oldProp","CanvasRenderer","rootID","rootId","getOptionValue","createCanvas","canvasObj","ctx","getContext","setCanvasSize","lineWidth","dashArrayString","setLineDash","strokeStyle","drawLine","save","beginPath","moveTo","lineTo","restore","dataUrl","toDataURL","canvasCtx","globalAlpha","drawCornerRadius","fillStyle","fillRect","arcTo","closePath","canvasTranslate","dataSplit","borderWidth","flag","translate","innerR","c3","c4","bezierCurveTo","arc","counterClockWise","drawText","baseline","textBaseline","labelRotation","fillText","drawPolyline","drawEllipse","circumference","drawImage","imageObj","Image","createLinearGradient","colors","myGradient","colorStop","setGradientValues","createRadialGradient","colorName","newColorStop","stopColor","addColorStop","setElementAttributes","updateCanvasAttributes","img_1","ModuleLoader","loadedModules","inject","requiredModules","moduleList","reqLength","clearUnusedModule","modl","moduleList_1","module","modName","member","isModuleLoaded","moduleObject","memberName","getMemberName","isProperty","loadedModule","clean","modules","usedModules","arg","removableModule_1","mod","parentObj","controlParent","isParentArray","updateChange","updateTimeOut","changeTime_1","curIndex","defaultNumberingSystem","latn","_digits","_type","defaultNumberSymbols","decimal","group","percentSign","plusSign","minusSign","infinity","nan","exponential","latnNumberSystem","ParserBase","getMainObject","cName","getNumberingSystem","numberingSystems","reverseObject","propKeys_1","getSymbolRegex","regexStr","getSymbolMatch","matchKeys_1","constructRegex","convertValueParts","regex","getDefaultNumberingSystem","nSystem","getCurrentNumericOptions","curObj","numberSystem","needSymbols","digits","numericPair","numberParseRegex","numericRegex","symbolNumberSystem","symbolMatch","getNumberMapper","isNumber","numberSymbols","timeSeparator","latnNumberSystem_1","nPair","nRegex","errorText","ms","ls","mf","lf","NumberFormat","numberFormatter","option","cldr","symbolPattern","fOptions","cOptions","dOptions","dependable","numberMapper","parser","parserObject","currencySymbol","getCurrencySymbol","numericObject","currency","defaultCurrencyCode","percentSymbol","minusSymbol","symbols","formatRegex","customFormat","getProperNumericSkeleton","isCurrency","isPercent","isAccount","groupOne","checkValueRange","maximumSignificantDigits","minimumSignificantDigits","maximumFractionDigits","minimumFractionDigits","fractionDigits","defaultCurrency","nData","pData","groupSeparator","groupData","getGroupingDetails","minimumFraction","mval","maximumFraction","mfrac","lfrac","isFinite","intNumberFormatter","negativeDataRegex","pattern_1","lastIndexOf","primary","secondary","val1","val2","checkbothExist","isFraction","decide","dint","str1","str2","checkRange","curData","zeroData","fValue","processSignificantDigits","processFraction","minimumIntegerDigits","processMinimumIntegers","toExponential","groupNumbers","latnParseRegex","nlead","nend","toPrecision","level1","sep","decimalSymbol","level2","lead","getResultantPattern","resPattern","iType","basicPatterns","dPattern","tPattern","defaultObject","patternMatcher","needFraction","cSymbol","fractionOnly","customRegex","changeCurrencySymbol","groupPattern","fraction","fmatch","fractionRegex","sym","currencyCode","isCurrencyPercent","parts","actual","symbol","loc","typeMapper","patternRegex","patternMatch","M","L","H","'"," a","yy","EEEE","E","currencyFormatRegex","curWithoutNumberRegex","$","%","-","0","1","dateParseRegex","dates","calendars","gregorian","months","stand-alone","abbreviated","2","3","4","5","6","7","8","9","10","11","12","narrow","wide","sun","mon","tue","wed","thu","fri","sat","short","dayPeriods","am","pm","eras","eraNames","0-alt-variant","1-alt-variant","eraAbbr","eraNarrow","dateFormats","full","long","medium","timeFormats","dateTimeFormats","availableFormats","Ed","Ehm","EHm","Ehms","EHms","Gy","GyMMM","GyMMMd","GyMMMEd","h","hm","Hm","hms","Hms","hmsv","Hmsv","hmv","Hmv","Md","MEd","MMM","MMMd","MMMEd","MMMMd","yM","yMd","yMEd","yMMM","yMMMd","yMMMEd","yMMMM","timeZoneNames","hourFormat","gmtFormat","gmtZeroFormat","numbers","currencies","USD","displayName","symbol-alt-narrow","EUR","GBP","minimumGroupingDigits","symbols-numberSystem-latn","list","superscriptingExponent","perMille","decimalFormats-numberSystem-latn","standard","percentFormats-numberSystem-latn","currencyFormats-numberSystem-latn","accounting","scientificFormats-numberSystem-latn","monthIndex","C","P","N","A","formatSplit","integerPart","fractionPart","customNumberFormat","dateObj","getActualDateTimeFormat","isExcelFormat","actualPattern","tLength","timeZonePattern","options_1","timeZone","numMapper","timezone","DateFormat","getTimeZoneValue","getActualNumberFormat","minFrac","parseOptions","custom","curMatch","curCode","hasNegativePattern","minDigits","maxDigits","fractionDigitsPattern","integer","minimumIntegerPattern","no","groupingPattern","cPattern","lastPageID","abbreviateRegexGlobal","weekdayKey","timeSetter","datePartMatcher","z","Z","dateFormat","formatOptions","dateSeperator","patternMatch_1","weekday","designator","eText","era","intDateFormatter","matches_1","curval","processNumber","curstr","desig","dec","checkTwodigitNumber","tVal","curPattern","ishour","latnRegex","minute","hour","DateParser","dateParser","hourOnly","numOptions","regexString","evalposition","gmtCorrection","zCorrectTemp","isgmtTraversed","nRegx","canUpdate","charKey","optional","weekObject","hour12","tzone","hpattern","parseTimeZoneRegx","parserRegex","parsedDateParts","internalDateParse","getDateObject","setMilliseconds","year","tKeys_1","tValue","pDate","lDate","lastDay","tzValue","retOptions","props_1","matchString","internalNumberParser","tmatch","getZoneValue","tZone","splitStr","cRegex","ival","parseRegex","groupRegex","NumberParser","numberParser","symbolRegex","symbolpattern","getParsedNumber","isNegative","NaN","exponent","rightToLeft","Internationalization","getDateFormat","getCulture","getDateParser","getNumberParser","formatNumber","formatDate","parseDate","parseNumber","getDatePattern","getNumberPattern","componentCount","lastHistoryLen","Component","needsID","moduleLoader","localObserver","detectFunction","enablePersistence","setPersistData","injectModules","render","mergePersistData","event_2","getInjectedModules","injectedModules","Inject","localStorage","getItem","setItem","getPersistData","clearTemplate","templateName","isHistoryChanged","pageID","history","hash","charCodeAt","addOnPersist","persistObj","objValue","ignoreOnPersist","iterateJsonProperties","newObj","newList","this_1","defaultPosition","Position","Draggable","dragLimit","Draggable_1","getDefaultPosition","droppables","toggleEvents","isIE","scope","isUnWire","initialize","currentTarget","abort","intCoord","getCoordinates","initialPosition","relativeXPosition","relativeYPosition","intDragStart","intDestroy","isChangeTouch","intCordinate","styleProp","marginRight","marginBottom","dragTarget","intClosest","calculateParentPosition","getHelperElement","dragTargetElement","helperElement","parentClientRect","dragStart","curTarget","getProperTargetElement","dragArea","setDragArea","enableTailMode","posValue","getProcessedPositionValue","getDragPosition","intDrag","intDragStop","setGlobalDroppables","elementInViewport","queryPositionInfo","docHeight","getDocumentWidthHeight","docWidth","drag","eleObj","checkTargetElement","dragData","intOver","hoverObject","intOut","pagex","pagey","dLeft","dTop","skipDistanceCheck","helperWidth","helperHeight","iTop","iLeft","dragValue","enableAutoScroll","scrollIntoView","docBody","docEle","dragStop","dragStopCalled","intDrop","eleWidthBound","eleHeightBound","elementArea","tborder","tpadding","lowerKey","prevStyle","elementFromPoint","cursorAt","sender","draggable","draggedElement","dropIns","getDropInstance","parent_1","drop","eleInst","eleInst_1","Droppable","mouseOver","area","accept","isDrag","isDropArea","canDrop","droppedElement","coord","backspace","tab","enter","alt","pause","capslock","escape","pageup","pagedown","home","leftarrow","uparrow","rightarrow","downarrow","insert","delete","f1","f2","f3","f4","f5","f6","f7","f8","f9","f10","f11","f12","semicolon","plus","comma","minus","dot","forwardslash","graveaccent","openbracket","backslash","closebracket","singlequote","KeyboardEvents","keyPressHandler","isAltKey","altKey","isShiftKey","shiftKey","curkeyCode","which","keyConfigs","configCollection_1","rconfig","rKeyObj","KeyboardEvents_1","getKeyConfigData","keyAction","config","configCache","keyData","getKeyCode","keyVal","L10n","controlName","localeStrings","setLocale","intLocale","intGetControlConstant","currentLocale","load","localeObject","svgLink","svgObj","setSVGSize","rectangle","polyline","ellipse","drawPolygon","polygon","img","preserveAspectRatio","createTitle","createDefs","createClipPath","clipPath","createForeignObject","foreignObject","createPattern","newOptions","fx","fy","drawGradient","gradientType","defs","stop_1","drawClipPath","drawCircularClipPath","SwipeSettings","swipeRegex","Touch","touchAction","tapCount","startEvent","isTouchMoved","movedDirection","lastMovedPoint","startEventData","hScrollLocked","vScrollLocked","tStampStart","timeOutTapHold","tapHoldEvent","tapHoldThreshold","moveEvent","endEvent","cancelEvent","movedPoint","eScrollArgs","calcScrollPoints","startEvents","originalEvent","distanceX","distanceY","scrollDirection","velocity","getVelocity","timeOutTap","swipeFn","tap","tapThreshold","modeclear","calcPoints","swipeArgs","swipeDirection","eSwipeArgs","tDistance","swipeSettings","swipeThresholdDistance","defaultArgs","canTrigger","scrollBool","isScrollable","checkSwipe","modeClear","lastTapTime","eTapArgs","pnt","newX","newY","newT","xDist","yDist","Engine","isRipple","comp","data_1","builderFunction","classObj","encodeURIComponent","siblings","childNodes_1","curNode","ELEMENT_NODE","attrVal","cssClassName","Button","isPrimary","setIconCss","disabled","controlStatus","removeRippleEffect","iconPosition","isToggle","btnClickHandler","unWireEvents","DISABLED","RIPPLE","RIPPLECHECK","RIPPLEINDETERMINATE","CheckBox","isKeyPressed","changeState","ariaState","getWrapper","indeterminate","clickHandler","focusOutHandler","focusHandler","setDisabled","initWrapper","for","labelPosition","setText","keyDownHandler","labelMouseHandler","mouseDownHandler","labelWrap","RadioButton","RadioButton_1","changeHandler","radioGrp","radioWrap","getLabel","nextElementSibling","labelRippleHandler","textLabel","rippleLabel","Switch","bar","onLabel","offLabel","setLabel","switchInner","rippleTouchHandler","eventType","onText","offText","switchFocusHandler","switchMouseUp","toggle","PositionData","CLASSNAMES","Popup","setEnableRtl","refreshPosition","setContent","actionOnScroll","wireScrollEvents","unwireScrollEvents","orientationOnChange","getRelateToElement","scrollRefresh","parent_2","relateToElement","relateTo","targetVisible","isElementOnViewport","targetInvisibleStatus","scrollElement","parent_3","isElementVisible","parent_4","win","windowView","scrollY","scrollX","outerWidth","outerHeight","reposition","checkFixedParent","checkCollision","getAnchorPosition","anchorEle","eleRect","anchorRect","targetType","callFlip","param","callFit","viewPortRect","horz","collision","vert","show","animationOptions","showAnimation","hideAnimation","ButtonProps","AnimationSettings","ROOT","DLG_HEADER_CONTENT","MODAL_DLG","DLG_CLOSE_ICON","SCROLL_DISABLED","FULLSCREEN","DLG_CLOSE_ICON_BTN","Dialog","initRender","headerContent","classArray","clonedEle","closeIconClickEventHandler","dlgOverlayClickEventHandler","l10n","prevOnChange","keyDown","isModal","buttonObj","btnObj","activeElement","focusableElements","isTagName","isContentEdit","hasAttribute","closeOnEscape","primaryButtonEle","buttonIndex_1","buttons","buttonModel","click","setCSSClass","setMaxHeight","initialRender","setTargetContent","setHeader","showCloseIcon","renderCloseIcon","footerTemplate","setButton","setFooterTemplate","allowDragging","setAllowDragging","aria-modal","setIsModal","dlgContainer","popupObj","focusContent","unBindEvent","closeArgs","storeActiveElement","positionChange","setEnableRTL","setOverlayZindex","dlgOverlay","zIndexValue","setPopupPosition","dragObj","buttonContent","btn","ftrTemplateContent","aria-describedby","contentEle","innerContentElement","setTemplate","isContent","headerEle","createHeaderContent","closeIcon","closeIconBtnObj","closeIconTitle","oldCSSClass","getValidFocusNode","u","tabIndex","disableElement","getAutoFocusNode","validNode","elementMatch","Element","bindEvent","updateIsModal","isFullScreen","fullScreen","openAnimation","animationSettings","dialogOpen","closeAnimation","ARROW_TIP","ARROW_TIP_OUTER","ARROW_TIP_INNER","TIP_BOTTOM","TIP_RIGHT","POPUP_OPEN","POPUP_CLOSE","formatPosition","tooltipPositionY","tooltipPositionX","renderArrow","setTipClass","tip","tipClass","tooltipEle","renderPopup","elePos","mouseTrail","getTooltipPosition","openPopupHandler","closePopupHandler","offsetPos","calculateTooltipOffset","collisionFlipFit","tooltipEventArgs","tooltipEleWidth","tooltipEleHeight","arrowEle","tipWidth","tipHeight","tipAdjust","tipHeightAdjust","tipWidthAdjust","updateTipPosition","selEle","adjustArrow","leftValue","topValue","tooltipWidth","tooltipHeight","arrowInnerELe","tipPosExclude","tipPointerPosition","POINTER_ADJUST","renderContent","tooltipContent","templateFunction","isSticky","tipClose","ICON","onStickyClose","addDescribedBy","describedby","data-tooltip-id","removeDescribedBy","orgdescribedby","tapHoldHandler","autoCloseTimer","targetHover","touchEndHandler","targetClick","hideTooltip","targetList_1","ctrlId","restoreElement","wireMouseEvents","showTimer","hideTimer","isHidden","TOOLTIP_WRAP","aria-hidden","PopupAnimation","openDelay","horizontal","vertical","affectedPos","eleOffset","arrowleft","targetElement","closeAnimation_1","closeDelay","unwireMouseEvents","onMouseOut","onMouseMove","eventPageX","eventPageY","colpos","touchEnd","scrollHandler","triggerList_1","getTriggerList","wireFocusEvents","touchModule","tapHold","targetList_2","triggerList_2","unwireFocusEvents","targetList_3","triggerList_3","trgt","Item","classNames","DropDownButton","canOpen","openPopUp","closePopup","createPopup","getPopUpElement","createItems","li","showIcon","hasIcon","ul","tabindex","separator","createAnchor","button","setIconPositionTop","appendArrowSpan","setActiveElem","iconSpan","activeElem","popupEle","getULElement","popupElement","delegateMousedownHandler","mousedownHandler","keyBoardHandler","rippleFn","upDownKeyHandler","keyEventHandler","defaultIdx","liIdx","removeCustomSelection","isValidLI","selectedLi","getLI","beforeOpenArgs","openArgs","focusEle","beforeCloseArgs","btnModel","TAGNAME","SplitButton","createPrimaryButton","createSecondaryButton","secondaryBtnObj","setAria","primaryBtnObj","btnElem","dropDownBtnModel","beforeItemRender","beforeClose","aria-expanded","aria-haspopup","aria-label","aria-owns","primaryBtnClickHandler","btnKeyBoardHandler","altdownarrow","RTL","DISABLE","INPUT","CLEARICON","CLEARICONHIDE","NOFLOATLABEL","INPUTCUSTOMTAG","FLOATCUSTOMTAG","_focusFn","getParentNode","_blurFn","createFloatingInput","inputObject","wireFloatingEvents","createInputContainer","customTag","updateLabelState","updateIconState","createClearButton","initial","insertAdjacentElement","readOnly","wireClearBtnEvents","validateLabel","tagClass","setCssClass","oldClass","setPlaceholder","aria-placeholder","setReadonly","isReadonly","isRtl","setEnabled","isEnable","disabledAttrs","aria-disabled","removeAttributes","addAttributes","setClearButton","isClear","_internalRipple","argsButton","_onMouseDownRipple","_onMouseUpRipple","parentEle","_onMouseRipple","appendSpan","iconClass","createInput","setPropertyValue","removeFloating","unwireFloatingEvents","addFloating","iconEle","floatLine","floatText","setRipple","ErrorOption","SPINICON","INCREMENT","DECREMENT","INTREGEXP","NumericTextBox","isPrevFocused","decimalSeparator","intRegExp","isCalled","cloneElement","angularTagName","incrementTitle","decrementTitle","isValidState","inputStyle","inputName","cultureInfo","initCultureInfo","initCultureFunc","checkAttributes","validateMinMax","validateStep","updatePlaceholder","createWrapper","showSpinButton","spinBtnCreation","changeValue","strictMode","trimValue","decimals","roundNumber","attributes_1","inputWrapper","aria-readonly","hiddenInput","validateHidden","spinDown","spinUp","wireSpinBtnEvents","formattedValue","aria-valuemin","aria-valuemax","operation","isInteract","isFocused","performAction","raiseChangeEvent","checkErrorClass","focusIn","focusOut","keyUpHandler","inputHandler","pasteHandler","mouseDownOnSpinner","mouseUpOnSpinner","touchMoveOnSpinner","unwireSpinBtnEvents","parsedInput","updateValue","previousValue","beforeUpdate","preventHandler","iOS","platform","currentPos","prevPos","ignoreKeyCode","valArray","prevVal","nextEle","cursorPosChanged","updatedValue","correctRounding","floatExp","floatValue","floatStep","valueCount","stepCount","roundValue","precision","divide","updateCurrency","propVal","numberOfDecimals","decimalPart","modifyText","validateState","result1","result2","metaKey","currentChar","stopPropagation","fractionRule","validateDecimalOnType","mouseWheel","rawEvent","wheelDelta","detail","formatValue_1","ele_1","getElementData","mouseUpClick","floatLabelTypeUpdate","decrement","getText","propValue","#","?","&","MaskUndo","MaskedTextBox","isInitial","resetMaskedTextBox","setMaskPlaceholder","setWidth","setVal","dynamicPlaceholder","strippedValue_1","strippedVal","getMaskedValue","TicksData","LimitData","TooltipData","Slider","horDir","verDir","transition","rangeBar","transitionOnMaterialTooltip","scaleTransform","customAriaText","isElementFocused","tickElementCollection","tooltipFormatInfo","ticksFormatInfo","internationalization","ticks","formatString","formatInfo","makeRoundNumber","elementVal","fractionalToInteger","noOfDecimals","tens","setZindex","tooltipElement","firstTooltipElement","secondTooltipElement","sliderContainer","showOn","sliderTrack","isMaterial","isBootstrap","setHandler","createRangeBar","limits","createLimitBar","setOrientClass","class","showButtons","setButtons","rangeValueUpdate","previousVal","checkHandleValue","previousChanged","setLimitBar","renderScale","renderTooltip","firstElementClassName","limitBarFirst","limitBarSecond","firstHandle","secondHandle","setAriaAttributes","customValues","createSecondHandle","secondMaterialHandle","createFirstHandle","firstMaterialHandle","wireFirstHandleEvt","handleFocus","transitionEnd","handleOver","handleLeave","wireSecondHandleEvt","handleStart","activeHandle","handlePos1","handlePos2","getHandle","tooltipObj","firstTooltipObj","secondTooltipObj","refreshTooltip","openMaterialTooltip","tooltipAnimation","closeTooltip","handleFocusOut","tooltipValue","setTooltipContent","addTooltipClass","setAriaAttrValue","formatContent","handleVal1","ariaContent","handle1","handle2","handleVal2","count_1","getTooltipTransformProperties","previousTooltipClass","tooltipPlacement","tooltipPosition","tooltipBeforeOpen","transformProperties","bootstrapCollisionArgs","wireMaterialTooltipEvent","sliderDown","tooltipPositionCalculation","checkTooltipPosition","firstHandleTooltipPosition","secondHandleTooltipPosition","tooltipClass","tooltipPointer","afterClose","tooltipAfterClose","firstBtn","secondBtn","buttonTitle","enabledRTL","buttonFocusOut","repeatButton","openTooltip","hVal","handleValueUpdate","getLimitCorrectedValues","changeHandleValue","refreshTooltipOnMove","repeatHandlerMouse","buttonClick","repeatInterval","materialChange","repeatHandlerUp","changeEvent","customTickCounter","bigNum","tickCount","orien","smallStep","showSmallTicks","largeStep","steps","customStep","islargeTick","tickWidth","largestep","repeat","createTick","formatTicksValue","decimalPoints","tickesAlignment","lastChild","lastElementChild","ticksWrapper","tickElements","scaleAlignment","tickText","tickElement","tickValuePosition","other","otherChild","ariaValueText","isTickFormatted","valuenow","aria-valuetext","getLimitValueAndPosition","minStart","minEnd","maxStart","maxEnd","focusSliderElement","buttonUp","setRangeBar","checkValidValueAndPos","checkHandlePosition","setLimitBarPositions","fromMinPostion","fromMaxpostion","toMinPostion","toMaxpostion","fromPosition","toPosition","currentValue","minValue","maxValue","limitBar","preHandlePos1","setHandlePosition","validateRangeValue","setRangeValue","modifyZindex","updateRangeValue","previous","setPreviousVal","rtl","preHandlePos2","tempStartEnd","onResize","startHandleFixed","endHandleFixed","xyToPosition","stepValueCalculation","percentStep","remain","addition","f","positionToValue","sliderBarClick","handlepos","handleVal","focusedElement","checkRepeatedValue","xPostion","yPostion","firstPartRemain","secondPartRemain","minDiff","dragRangeBarMove","dragRangeBarUp","sliderBarMove","sliderBarUp","handleValueAdjust","handleValue","assignValue","handleNumber","valueAndPostion","wireButtonEvt","sliderFocusOut","onresize","keyUp","hover","relatedTarget","transformProperties_1","hiddenHandle_1","handle_1","blur","changeSliderType","updateConfig","changeRtl","changeOrientation","limitsPropertyChange","setMinMaxValue","setTooltip","VALIDATE_EMAIL","VALIDATE_URL","VALIDATE_DATE_ISO","VALIDATE_DIGITS","VALIDATE_PHONE","VALIDATE_CREDITCARD","ListBase","FormValidator","validated","errorRules","allowSubmit","required","infoElement","selectQuery","defaultMessages","email","dateIso","creditcard","number","maxLength","minLength","rangeLength","tel","equalTo","inputElements","createHTML5Rules","FormValidator_1","addRules","removeRules","validate","selected","rules_1","clearForm","getInputElement","errorClass","validClass","elements_2","getErrorElement","hideMessage","defRules","acceptedTypes","allRule","defRules_1","defRule","annotationRule","ruleCon","ruleName","rulesList","ruleFirstName","ruleSecondName","minvalue","maxvalue","annotationMessage","isCheckable","submitHandler","hiddenType","validateHiddenType","vhPos","hPos","rules_2","errorMessage","getErrorMessage","errorRule","isValid","removeErrorRules","showMessage","createErrorElement","errorElement","currentRule","formElement","checkValidator","ruleValue","formats","errorOption","Message","errorContainer","containerId","customPlacement","nextSibling","checkRequired","inputType","compareTo","Label","FILE","STATUS","CLEAR_ICON","REMOVE_ICON","ABORT_ICON","RETRY_ICON","DRAG_HOVER","PROGRESS_WRAPPER","PROGRESSBAR","PROGRESSBAR_TEXT","UPLOAD_INPROGRESS","UPLOAD_SUCCESS","UPLOAD_FAILED","TEXT_CONTAINER","VALIDATION_FAILS","ICON_FOCUSED","PAUSE_UPLOAD","RESUME_UPLOAD","FilesProp","ButtonsProps","AsyncSettings","Uploader","initialAttr","multiple","fileList","filesData","uploadedFilesData","isForm","allTypes","pausedData","uploadMetaData","setExtensions","allowedExtensions","clearAll","setControlStatus","setMultipleSelection","setRTL","reRenderFileList","browse","renderButtonTemplates","unBindDropEvents","setDropArea","renderPreLoadFiles","setLocalizedTexts","preLocaleObj","browseButton","localizedTexts","uploadWrapper","updateFileList","getKeyValue","autoUpload","uploadButton","listParent","createFileList","actionButtons","removeActionButtons","renderActionButtons","checkActionButtonStatus","localeText","Browse","Clear","Upload","dropFilesHint","invalidMaxFileSize","invalidMinFileSize","invalidFileType","uploadFailedMessage","uploadSuccessMessage","removedSuccessMessage","removedFailedMessage","inProgress","readyToUploadMessage","pauseUpload","resume","retry","fileUploadCancel","checkHTMLAttributes","asyncSettings","saveUrl","removeUrl","isPureReactComponent","renderBrowseButton","initializeUpload","wireActionButtonEvents","uploadButtonClick","clearButtonClick","unwireActionButtonEvents","uploadText","clearText","dropAreaWrapper","fileDropArea","aria-activedescendant","files","clearData","files_1","fileData","rawFile","validationMessages","minSize","maxSize","statusCode","showFileList","dropTextArea","dropArea","dropZoneElement","enableDropText","bindDropEvents","newAttr","createAttribute","setAttributeNode","checkAutoUpload","browseButtonClick","onSelectFiles","removeFocus","keyboardModule","keyActionHandler","resetForm","setTabFocus","setReverseFocus","metaData","getCurrentMetaData","file","abortUpload","resumeUpload","chunkUpload","removeFiles","fileInfo","targetMetaData","iconElements","iconElement","dropElement","dragHover","onDragLeave","selectedElement","liElement","spinnerTarget","removeFilesData","customTemplate","getLiElement","removeUploadedFile","removeDirectly","selectedFiles","ajax","formData","FormData","currentRequest","postRawFile","updateFormData","customFormData","removeCompleted","removeFailed","customData","updateStatus","rootElement","statusElement","targetFiles","dataTransfer","sortFileList","eventArgs_1","getFileType","validatedFileSize","isModified","modifiedFilesData","progressInterval","checkExtension","dataFiles","updateSortedFileList","singleUpload","previousListClone","added","removedList_1","oldList","createParentUL","dropFiles","extensions_1","extension","fileSize","minSizeError","maxSizeError","minFileSize","maxFileSize","createCustomfileList","fileData_1","listItem","data-file-name","uploadTemplateFn","fileData_2","textContainer","getFileNameOnly","fileExtension","rtlContainer","bytesToSize","truncateName","nameElement","dataset","tail","setInitialAttributes","filterfileList","filterFiles","createProgressBar","progressbarWrapper","progressBar","progressbarInnerWrapper","progressbarText","updateProgressbar","loaded","total","changeProgressValue","progressValue","uploadInProgress","customUI","request","removecanceledFile","updateProgressBarClasses","renderFailureState","removeProgressbar","deleteIcon","pauseButton","reloadcanceledFile","uploadComplete","raiseSuccessEvent","uploadFailed","callType","progressAnimation","animateProgressBar","extensions","uploadTemplate","exception","chunkSize","chunkIndex","blob","retryCount","sendRequest","totalChunk","chunkUploadComplete","chunkUploadInProgress","eventCancelByArgs","chunkUploadFailed","checkChunkUpload","response","updateMetaData","eventArgs_2","sendNextRequest","name_2","removeChunkFile","removeChunkProgressBar","pauseIcon","chunkCount","cancelButton","retryRequest","retryAfterDelay","checkPausePlayAction","retryUpload","fromcanceledStage","retryElement","clearIcon","loadedSize","bytes","fileNames","sortedFilesData","sortedFileNames_1","name_3","uploadFiles","validateFileType","chunkEnabled","name_4","validUrl","removeFiles_1","getFilesData","fileDataFiles","pauseUploading","getFiles","resumeFiles","retryFailedFiles","cancelUpload","CTRLBTN","CTRLSWITCH","FORMATSWITCH","HSVAREA","INPUTWRAPPER","MODESWITCH","NOCOLOR","PALETTES","PALETTECONTENT","PICKERCONTENT","PREVIEW","PREVIOUS","SELECT","SPLITPREVIEW","TOHSV","presets","ColorPicker","Apply","Cancel","ModeSwitcher","inline","createWidget","createSplitBtn","tileRipple","ctrlBtnRipple","createPalette","firstPaletteFocus","createPicker","getDragHandler","isPicker","createCtrlBtn","toggleDisabled","refreshPopupPos","splitButton","splitBtn","beforeOpenFn","onOpen","popupClose","rgba","convertToRgbString","hexToRgb","preview","getPopupEle","popupInst","getPopupInst","modal","destroyOtherComp","presetColors","paletteGroup","appendPalette","modeSwitcher","noColor","setNoColor","borderBottomWidth","hsv","rgbToHsv","refEle","tile","aria-selected","presetName","addTileSelection","noColorEle","attr","insertPos","hsvContainer","dragHandler","setHsvContainerBg","setHandlerPosition","createSlider","createDragTooltip","getHsvContainer","hsvToRgb","hsvArea","sliderPreviewWrapper","createPreview","sliderWrapper","slider","hueSlider","hueChange","opacitySlider","opacityChange","opacityBgTrack","updateOpacitySliderBg","convertToOtherFormat","pValue","rgbToHex","cValue","updatePreview","triggerEvent","previewContainer","colorValue","getNumericTextBoxModel","inputWrap","hexInput","maxlength","clsName","btnWrapper","controlBtnWrapper","appendModeSwitchBtn","getTooltipInst","setTooltipOffset","convertToHsvString","updateHsv","isKey","updateInput","removeTileSelection","convertRgbToNumberArray","n","pickerKeyDown","handlerDown","addCtrlSwitchEvent","addvalueEventHandler","previewHandler","paletteClickHandler","paletteKeyDown","addInputEvent","formatSwitchHandler","handlerDragPosition","enterKeyHandler","triggerChangeEvent","prob","setHsv","handlerMove","handlerEnd","switchToPalette","ctrlBtnClick","noColorTile","switchToPicker","grpEle","selectedEle","tiles","prevSelectedEle","pop","tilePosition","keySelectionChanges","newEle","cIdx","emptyCount","inputValueChange","isPopupOpen","tooltipInst","len_1","bigInt","v","q","changeModeSwitcherProp","ctrlSwitchWrapper","changeShowBtnProps","ctrlBtnWrapper","changeValueProp","setInputEleProps","changeDisabledProp","changeCssClassProps","popupWrapper","changeRtlProps","changePaletteProps","cls","subQuery","isChild","queries","fKey","fromTable","lookups","expands","sortedColumns","groupedColumns","setKey","using","dataManager","always","executeQuery","cloned","subQuerySelector","isCountRequired","tableName","addParams","fn","expand","tables","ignoreAccent","search","searchKey","fieldNames","comparer","fnOperators","sortBy","isFromGroup","sorts","order","endsWith","fnSort","filterQueries","sortByDesc","page","pageIndex","pageSize","take","nos","skip","hierarchy","selectorFn","foreignKey","requiresCount","aggregate","filterQueryLists","singles","filtered","isComplex","processOperator","condition","predicates","combinePredicates","fromJson","fromJSONData","record","isAnd","toJson","preds","consts","GroupGuid","startsWith","fnAscending","fnDescending","localeCompare","extractFields","jsonArray","newData","level","groupDs","jsonData","indx","childLevels","grouped","groupedArray","records","_loop_2","this_2","getVal","tempObj","_loop_3","aggs","buildHierarchy","lookup","pKey","grp","fKeyData","getFieldList","copyObj","ds","ignoreDiacritics","diacritics","callAdaptorFunction","adaptor","fnName","param1","param2","isPlainObject","isCors","xhr","getGuid","rand","Uint8Array","isNull","getItemFromComparer","castRequired","distinct","requiresCompleteRecord","tmp","serverTimezoneOffset","average","truecount","falsecount","operatorSymbols","<",">","<=",">=","==","!=","*=","$=","^=","odBiOperator","lessthan","lessthanorequal","greaterthan","greaterthanorequal","equal","notequal","odUniOperator","endswith","startswith","odv4UniOperator","Ⓐ","A","À","Á","Â","Ầ","Ấ","Ẫ","Ẩ","Ã","Ā","Ă","Ằ","Ắ","Ẵ","Ẳ","Ȧ","Ǡ","Ä","Ǟ","Ả","Å","Ǻ","Ǎ","Ȁ","Ȃ","Ạ","Ậ","Ặ","Ḁ","Ą","Ⱥ","Ɐ","Ꜳ","Æ","Ǽ","Ǣ","Ꜵ","Ꜷ","Ꜹ","Ꜻ","Ꜽ","Ⓑ","B","Ḃ","Ḅ","Ḇ","Ƀ","Ƃ","Ɓ","Ⓒ","C","Ć","Ĉ","Ċ","Č","Ç","Ḉ","Ƈ","Ȼ","Ꜿ","Ⓓ","D","Ḋ","Ď","Ḍ","Ḑ","Ḓ","Ḏ","Đ","Ƌ","Ɗ","Ɖ","Ꝺ","DZ","DŽ","Dz","Dž","Ⓔ","E","È","É","Ê","Ề","Ế","Ễ","Ể","Ẽ","Ē","Ḕ","Ḗ","Ĕ","Ė","Ë","Ẻ","Ě","Ȅ","Ȇ","Ẹ","Ệ","Ȩ","Ḝ","Ę","Ḙ","Ḛ","Ɛ","Ǝ","Ⓕ","F","Ḟ","Ƒ","Ꝼ","Ⓖ","G","Ǵ","Ĝ","Ḡ","Ğ","Ġ","Ǧ","Ģ","Ǥ","Ɠ","Ꞡ","Ᵹ","Ꝿ","Ⓗ","H","Ĥ","Ḣ","Ḧ","Ȟ","Ḥ","Ḩ","Ḫ","Ħ","Ⱨ","Ⱶ","Ɥ","Ⓘ","I","Ì","Í","Î","Ĩ","Ī","Ĭ","İ","Ï","Ḯ","Ỉ","Ǐ","Ȉ","Ȋ","Ị","Į","Ḭ","Ɨ","Ⓙ","J","Ĵ","Ɉ","Ⓚ","K","Ḱ","Ǩ","Ḳ","Ķ","Ḵ","Ƙ","Ⱪ","Ꝁ","Ꝃ","Ꝅ","Ꞣ","Ⓛ","L","Ŀ","Ĺ","Ľ","Ḷ","Ḹ","Ļ","Ḽ","Ḻ","Ł","Ƚ","Ɫ","Ⱡ","Ꝉ","Ꝇ","Ꞁ","LJ","Lj","Ⓜ","M","Ḿ","Ṁ","Ṃ","Ɱ","Ɯ","Ⓝ","N","Ǹ","Ń","Ñ","Ṅ","Ň","Ṇ","Ņ","Ṋ","Ṉ","Ƞ","Ɲ","Ꞑ","Ꞥ","NJ","Nj","Ⓞ","O","Ò","Ó","Ô","Ồ","Ố","Ỗ","Ổ","Õ","Ṍ","Ȭ","Ṏ","Ō","Ṑ","Ṓ","Ŏ","Ȯ","Ȱ","Ö","Ȫ","Ỏ","Ő","Ǒ","Ȍ","Ȏ","Ơ","Ờ","Ớ","Ỡ","Ở","Ợ","Ọ","Ộ","Ǫ","Ǭ","Ø","Ǿ","Ɔ","Ɵ","Ꝋ","Ꝍ","Ƣ","Ꝏ","Ȣ","Ⓟ","P","Ṕ","Ṗ","Ƥ","Ᵽ","Ꝑ","Ꝓ","Ꝕ","Ⓠ","Q","Ꝗ","Ꝙ","Ɋ","Ⓡ","R","Ŕ","Ṙ","Ř","Ȑ","Ȓ","Ṛ","Ṝ","Ŗ","Ṟ","Ɍ","Ɽ","Ꝛ","Ꞧ","Ꞃ","Ⓢ","S","ẞ","Ś","Ṥ","Ŝ","Ṡ","Š","Ṧ","Ṣ","Ṩ","Ș","Ş","Ȿ","Ꞩ","Ꞅ","Ⓣ","T","Ṫ","Ť","Ṭ","Ț","Ţ","Ṱ","Ṯ","Ŧ","Ƭ","Ʈ","Ⱦ","Ꞇ","Ꜩ","Ⓤ","U","Ù","Ú","Û","Ũ","Ṹ","Ū","Ṻ","Ŭ","Ü","Ǜ","Ǘ","Ǖ","Ǚ","Ủ","Ů","Ű","Ǔ","Ȕ","Ȗ","Ư","Ừ","Ứ","Ữ","Ử","Ự","Ụ","Ṳ","Ų","Ṷ","Ṵ","Ʉ","Ⓥ","V","Ṽ","Ṿ","Ʋ","Ꝟ","Ʌ","Ꝡ","Ⓦ","W","Ẁ","Ẃ","Ŵ","Ẇ","Ẅ","Ẉ","Ⱳ","Ⓧ","X","Ẋ","Ẍ","Ⓨ","Y","Ỳ","Ý","Ŷ","Ỹ","Ȳ","Ẏ","Ÿ","Ỷ","Ỵ","Ƴ","Ɏ","Ỿ","Ⓩ","Z","Ź","Ẑ","Ż","Ž","Ẓ","Ẕ","Ƶ","Ȥ","Ɀ","Ⱬ","Ꝣ","ⓐ","a","ẚ","à","á","â","ầ","ấ","ẫ","ẩ","ã","ā","ă","ằ","ắ","ẵ","ẳ","ȧ","ǡ","ä","ǟ","ả","å","ǻ","ǎ","ȁ","ȃ","ạ","ậ","ặ","ḁ","ą","ⱥ","ɐ","ꜳ","æ","ǽ","ǣ","ꜵ","ꜷ","ꜹ","ꜻ","ꜽ","ⓑ","b","ḃ","ḅ","ḇ","ƀ","ƃ","ɓ","ⓒ","c","ć","ĉ","ċ","č","ç","ḉ","ƈ","ȼ","ꜿ","ↄ","ⓓ","d","ḋ","ď","ḍ","ḑ","ḓ","ḏ","đ","ƌ","ɖ","ɗ","ꝺ","dz","dž","ⓔ","e","è","é","ê","ề","ế","ễ","ể","ẽ","ē","ḕ","ḗ","ĕ","ė","ë","ẻ","ě","ȅ","ȇ","ẹ","ệ","ȩ","ḝ","ę","ḙ","ḛ","ɇ","ɛ","ǝ","ⓕ","f","ḟ","ƒ","ꝼ","ⓖ","g","ǵ","ĝ","ḡ","ğ","ġ","ǧ","ģ","ǥ","ɠ","ꞡ","ᵹ","ꝿ","ⓗ","h","ĥ","ḣ","ḧ","ȟ","ḥ","ḩ","ḫ","ẖ","ħ","ⱨ","ⱶ","ɥ","ƕ","ⓘ","i","ì","í","î","ĩ","ī","ĭ","ï","ḯ","ỉ","ǐ","ȉ","ȋ","ị","į","ḭ","ɨ","ı","ⓙ","j","ĵ","ǰ","ɉ","ⓚ","k","ḱ","ǩ","ḳ","ķ","ḵ","ƙ","ⱪ","ꝁ","ꝃ","ꝅ","ꞣ","ⓛ","l","ŀ","ĺ","ľ","ḷ","ḹ","ļ","ḽ","ḻ","ſ","ł","ƚ","ɫ","ⱡ","ꝉ","ꞁ","ꝇ","lj","ⓜ","m","ḿ","ṁ","ṃ","ɱ","ɯ","ⓝ","n","ǹ","ń","ñ","ṅ","ň","ṇ","ņ","ṋ","ṉ","ƞ","ɲ","ʼn","ꞑ","ꞥ","nj","ⓞ","o","ò","ó","ô","ồ","ố","ỗ","ổ","õ","ṍ","ȭ","ṏ","ō","ṑ","ṓ","ŏ","ȯ","ȱ","ö","ȫ","ỏ","ő","ǒ","ȍ","ȏ","ơ","ờ","ớ","ỡ","ở","ợ","ọ","ộ","ǫ","ǭ","ø","ǿ","ɔ","ꝋ","ꝍ","ɵ","ƣ","ȣ","ꝏ","ⓟ","p","ṕ","ṗ","ƥ","ᵽ","ꝑ","ꝓ","ꝕ","ⓠ","q","ɋ","ꝗ","ꝙ","ⓡ","r","ŕ","ṙ","ř","ȑ","ȓ","ṛ","ṝ","ŗ","ṟ","ɍ","ɽ","ꝛ","ꞧ","ꞃ","ⓢ","s","ß","ś","ṥ","ŝ","ṡ","š","ṧ","ṣ","ṩ","ș","ş","ȿ","ꞩ","ꞅ","ẛ","ⓣ","t","ṫ","ẗ","ť","ṭ","ț","ţ","ṱ","ṯ","ŧ","ƭ","ʈ","ⱦ","ꞇ","ꜩ","ⓤ","u","ù","ú","û","ũ","ṹ","ū","ṻ","ŭ","ü","ǜ","ǘ","ǖ","ǚ","ủ","ů","ű","ǔ","ȕ","ȗ","ư","ừ","ứ","ữ","ử","ự","ụ","ṳ","ų","ṷ","ṵ","ʉ","ⓥ","v","ṽ","ṿ","ʋ","ꝟ","ʌ","ꝡ","ⓦ","w","ẁ","ẃ","ŵ","ẇ","ẅ","ẘ","ẉ","ⱳ","ⓧ","x","ẋ","ẍ","ⓨ","y","ỳ","ý","ŷ","ỹ","ȳ","ẏ","ÿ","ỷ","ẙ","ỵ","ƴ","ɏ","ỿ","ⓩ","z","ź","ẑ","ż","ž","ẓ","ẕ","ƶ","ȥ","ɀ","ⱬ","ꝣ","Ά","Έ","Ή","Ί","Ϊ","Ό","Ύ","Ϋ","Ώ","ά","έ","ή","ί","ϊ","ΐ","ό","ύ","ϋ","ΰ","ω","ς","expected","notnull","isnull","processSymbols","parseJson","jsonText","jsonReviver","iterateAndReviveArray","iterateAndReviveJson","dupValue","dateParse","toTimeZone","isJson","isGuid","replacer","jsonReplacer","arrayReplacer","keys_3","addSelfOffset","toJSON","toUTC","utc","unix","Adaptor","requestType","pvt","processResponse","JsonAdaptor","processQuery","countFlg","agg","batchRequest","dm","changes","addedRecords","changedRecords","deletedRecords","onWhere","onAggregates","onSearch","onSortBy","fnCompare","onGroup","aggQuery","onPage","onRange","onTake","onSkip","onSelect","keyField","UrlAdaptor","hierarchyFilters","getQueryRequest","groups","filters","searches","getFiltersFrom","req","getRequestQuery","reqParams","pvtData","convertToQueryString","request1","requests","getAggregateResult","batchUrl","crudUrl","changed","deleted","insertUrl","keyColumn","updateUrl","predicats","aggregateData","ODataAdaptor","multipartAccept","batch","changeSet","batchPre","batchContent","changeSetContent","batchChangeSetContentType","onPredicate","requiresCast","guid","getField","onComplexPredicate","onEachWhere","onEachSearch","onEachSort","onCount","settings","overrideMimeType","dataCopy","results","emptyAndBatch","processBatchResponse","versionCheck","requiresFormat","keys_4","initialGuid","cid","cSet","generateInsertRequest","generateUpdateRequest","generateDeleteRequest","generateBodyContent","method","stat","jsonObj","exVal","changeGuid","ODataV4Adaptor","getModulename","isDate","WebApiAdaptor","Count","Items","WebMethodAdaptor","RemoteSaveAdaptor","CacheAdaptor","isCrudAction","isInsertAction","cacheAdaptor","guidId","forDel","requestTime","generateKey","currentFilter","newQuery","cachedItems","crossDomain","timeTillExpiration","cachingPageSize","enableCaching","jsonp","defaultQuery","isDataAvailable","then","setDefaultQuery","deffered","Deferred","nextTick","getDeferedArgs","makeRequest","promise","extendRequest","fnSuccess","fnFail","cache","isSelector","virtualSelectRecords","fnQueryChild","subDeffer","childArgs","subUrl","childReq","subData","virtualRecords","catch","all","pResult","cResult","deff","doAjaxRequest","defer","check","expanded","hasChild","collapsible","image","iconWrapper","createListFromArray","isSingleLevel","generateUL","createListItemFromArray","subChild","curOpt","defaultListBaseOptions","getModuleClass","generateId","itemCreating","generateSingleLevelLI","generateLI","itemCreated","createListItemFromJson","defaultMappedFields","ariaAttributes","defaultAriaAttributes","typeofData","curItem","innerEle","showCheckBox","itemClass","imageUrl","imageAttributes","subDS","hasChildren","processSubChild","subLi","createListFromJson","expandCollapse","expandElement","expandIconPosition","expandIconClass","listClass","elementArray","addSorting","sortOrder","getDataSource","createJsonFromElement","curEle","jsonAr","childs","getAllAttributes","urlAttributes","typeof","elementAttributes","innerElements","grpLI","elementID","groupItemRole","itemRole","anchorTag","uID","groupTemplate","innerDiv","wrapperRole","itemText","ulElement","listRole","isChecked","groupBy","headerTemplate","createList","getSiblingLI","isPrevious","siblingLI","liIndex","liCollections","groupDataSource","cusQuery","itemObj","grpItem","renderContentTemplate","liCollection","renderGroupTemplate","headerItems","category","headerItems_1","headerData","generateIcon","TimePickerBase","effectsConfig","None","SlideLeft","SlideDown","Zoom","Fade","effectsRTLConfig","root","focused","parentItem","listIcon","listItemText","groupListItem","view","headerTemplateText","disable","backIcon","checkboxWrapper","checkbox","checklist","checkboxIcon","checkboxRight","checkboxLeft","listviewCheckbox","itemCheckList","FieldSettings","ListView","setHTMLAttribute","setSize","listBaseOption","enableVirtualization","virtualizationModule","reRenderUiVirtualization","reRender","curDSLevel","headerTitle","contentContainer","setCheckbox","curViewDS","getSubDS","resetCurrentList","isWindow","enableElement","isEnabled","showBack","showHeader","innerHeaderEle","textEle","hedBackButton","headerTemplateEle","switchView","fromView","toView","fPos_1","overflow_1","anim","aniObj","curUL","renderCheckbox","initialization","animateOptions","currentLiElements","isNestedList","selectedId","checkboxElement","frameElement_1","checkInternally","checkBoxPosition","checkItem","toggleCheckBase","HTMLLIElement","getLiFromObjOrElement","setSelectedItemData","uncheckItem","checkAllItems","toggleAllCheckBase","uncheckAllItems","checkIcon","checkedItem","args_1","getItemData","back","selectEventData","removeHover","removeSelect","setSelectLI","setCheckboxLI","hoverHandler","curLi","setHoverLI","leaveHandler","homeKeyHandler","onArrowKeyDown","arrowKeyHandler","elementTop","elementHeight","firstItemBounds","heightDiff","groupItemBounds","siblingTop","siblingHeight","scrollTo","uiFirstIndex","onUIScrolled","listItemHeight","topHeight","headerBounds","spaceKeyHandler","tabFocus","swipeActionHandler","focusout","swipe","focusedLI_1","hoverLI","selectedLI_1","renderSubList","selectedItem","isInteracted","selectedLI","lastLi","hoverSiblingLI","curLIs","levelKeys","localData","levelKeys_1","curDSJSON","findItemFromDS","curDS","getElementUID","resultJSON","getQuery","setViewDataSource","isInAnimation","setLocalData","renderList","renderIntoDom","createUIItem","uiVirtualization","classAr","pID","toUL","fromUL","selectItem","selectMultipleItems","getParentId","getSelectedItems","liTextCollection","liDataCollection","dataParent","tempData","findItem","enableItem","setItemState","disableItem","showItem","showHideItem","hideItem","addItem","addListItem","removeItemFromList","dsIndex","removeMultipleItems","Virtualization","listViewInstance","firstDs","expectedDomItemCount","ValidateItemCount","domItemCount","uiLastIndex","wireScrollEvent","otherDs","topElement","bottomElement","totalHeight","topElementHeight","bottomElementHeight","listDiff","uiIndicesInitialization","onVirtualScroll","onVirtualUiScroll","dataSourceLength","itemCount","uiIndices","activeIndices","disabledItemIndices","hiddenItemIndices","getscrollerHeight","startingHeight","scrollPosition","scroll","onLongScroll","onNormalScroll","isScrollingDown","updateUI","previousElementSibling","updateUiContent","curViewDs","checkListWrapper","changeElementAttributes","checklistElement","activeIndex","findDSAndIndexFromId","dataCollection_1","textCollection_1","curViewDS_1","curViewDS_2","text_1","resutJSON","removeUiItem","addUiItem","changeUiIndices","liItem","previousSibling","commonTemplate","templateElements","groupTemplateElements","templateData","flatTemplateNodes","groupTemplateNodes","compileTemplate","textProperty","classProperty","attributeProperty","onChange","listElement","updateContextData","regexMatch","resultantOutput","classNameMatch","subNode","bindedvalue","attributeNames","attributeName","attributeNameFunction","attributeValueFunction","attrNameMatch","attrValueMatch","subNode_1","attrName","attributeValue","isChildHasTextContent","textPropertyMatch","textFunction","OTHERMONTH","OVERLAY","WEEKNUMBER","SELECTED","FOCUSEDDATE","OTHERMONTHROW","ZOOMIN","CalendarBase","controlUp","controlDown","moveDown","moveUp","moveLeft","moveRight","pageUp","pageDown","shiftPageUp","shiftPageDown","controlHome","controlEnd","altUpArrow","spacebar","globalize","todayDisabled","todayDate","data-role","calendarElement","createHeader","createContent","validateDate","checkDateValue","minMaxUpdate","headerElement","iconContainer","previousIcon","nextIcon","headerTitleElement","aria-atomic","contentElement","createContentHeader","createContentBody","showTodayButton","createContentFooter","getCultureValues","culShortNames","getCultureObjects","shortNames","html","tableHeadElement","weekNumber","shiftArray","renderYears","renderDecades","renderMonths","updateFooter","todayElement","l10","today","footer","todayButtonClick","navigateTitle","keyActionHandle","currentView","depth","getViewNumber","navigateTo","focusedDate","tableBodyElement","selectedDate","depthValue","levelRestrict","KeyboardNavigate","selectDate","contentClick","firstDay","addYears","isMinMaxRange","addDay","navigatePreviousHandler","navigatePrevious","navigateNextHandler","navigateNext","navigateHandler","triggerNavigate","minMaxDate","localDate","numCells","tdEles","renderDays","renderTemplate","currentMonth","titleUpdate","getMilliseconds","setStartDate","weekEle","weekAnchor","getWeek","dateFormatOptions","tdEle","dayCell","dayLink","renderDayCellArgs","isDisabled","isOutOfRange","renderDayCellEvent","otherMnthBool","disabledCls","getDateVal","removeTableHeadElement","valueUtil","curDate","yr","curYrs","minYr","minMonth","maxYr","maxMonth","localMonth","localYr","startYr","endYr","startHdrYr","endHdrYr","startYear","rowIterator","valueOf","lastDate","timeOffset","findLastDay","classNm","trEle","iconHandler","setAriaActiveDescendant","clickEventEmitter","eve","getIdValue","setValueUpdate","setActiveDescendant","focusedEle","previousIconHandler","compareMonth","nextIconHandler","compareYear","compareDecade","stringVal","ld","tzOffset","dateString","setDateDecade","setDateYear","navigatedEvent","navigatedArgs","compare","modifier","findNextTD","tmpDate","Calendar","form","formResetHandler","changedArgs","triggerChange","previousDate","INPUTFOCUS","ACTIVE","DatePicker","previousElementValue","isDateIconClicked","altDownArrow","calendarKeyConfigs","bindEvents","ariaAttrs","isCalendar","disabledDates","dateOptions","dateTimeFormat","minMaxUpdates","dateValue","tempFormat","dateIconHandler","inputFocusHandler","inputBlurHandler","inputChangeHandler","resetFormHandler","keyboardModules","inputKeyActionHandle","CalendarKeyActionHandle","focusArguments","strictModeUpdate","changeTrigger","blurArguments","calendarKeyboardModules","documentHandler","createCalendar","modelHeader","yearHeading","h2","daySpan","monthSpan","selectCalendar","prevent_1","outOfRange","preventArgs","prevent_2","ensureInputAttribute","ngTag","inputEleCopy","validationAttribute","checkHtmlAttributes","nameAttribute","valueCopy","previousValCopy","dateIdString","isDisabledDate","LEFTCALENDER","RIGHTCALENDER","STARTDATE","ENDDATE","RANGEHOVER","STARTLABEL","ENDLABEL","CALENDAR","HEADER","TITLE","ICONCONTAINER","RANGECONTAINER","FOCUSDATE","CONTENT","DAYSPAN","DATEDISABLED","ICONDISABLED","LISTCLASS","ListBaseClasses","HOVER","OVERFLOW","Presets","DateRangePicker","isCustomRange","isCustomWindow","presetsItem","previousEleValue","isKeyPopup","dateDisabled","isRangeIconClicked","isMaxDaysClicked","disabledDays","preventBlur","preventFocus","setModelValue","presetKeyConfig","keyInputConfigs","defaultConstant","customRange","applyText","cancelText","selectedDays","isMobile","matchMedia","angularTag","initProperty","navNextFunction","navNextMonth","navPrevFunction","navPrevMonth","deviceNavNextFunction","deviceNavNext","deviceNavPrevFunction","deviceNavPrevious","initStartDate","initEndDate","shiftTab","processPresets","rangeIconHandler","inputKeyboardModule","clearRange","applyButton","removeSelection","applyFunction","leftCalendar","calendarFocus","minDays","maxDays","isPreset","createPresets","listRippleEffect","renderControl","createControl","bindCalendarEvents","updateRange","rightCalendar","disabledDateRender","updateHeader","clearCalendarEvents","leftCalPrevIcon","leftCalNextIcon","rightCalPrevIcon","rightCalNextIcon","updateNavIcons","compareMonths","leftCalCurrentDate","rightCalCurrentDate","calendarIconEvent","deviceCalendarEvent","startButton","deviceHeaderClick","endButton","calendarIconRipple","leftKeyboardModule","keyInputHandler","rightKeyboardModule","bindCalendarCellEvents","removeFocusedDate","calendar","updateDeviceCalendar","deviceNavigation","deviceCalendar","removeClassDisabled","updateMinMaxDays","selectableDates","refreshControl","previousStartValue","previousEndValue","inputStr","isDateDisabled","keyCalendarUpdate","isLeftCalendar","updateCalendarElement","navInCalendar","leftLimit","rightLimit","keyNavigation","rightDateLimit","leftDateLimit","selectRange","yearDate","presetElement","checkMinMaxDays","presetHeight","tdCells_1","hoverSelection","focusedDate_1","tdCells_2","isDisabledCell","eleDate","startDateValue","elementCollection","elementCollection_1","tdCells_3","eleDateValue","addSelectedAttributes","rangeArgs","inputValue","otherMonthSelect","isStartDate","sameDate","tdCell","MouseEvent","TouchEvent","endEle","endEle_1","endEle_2","ele_2","removeSelectedAttributes","tdCells","tdCells_4","tdCells_5","startMonth","maxEle","tdCells_6","calendar_1","tdCells_7","disabledDayCnt","start_1","end_1","updateControl","createRangeHeader","labelContainer","endBtn","startBtn","changeIcon","disableInput","validateRangeStrict","validateMinMaxDays","validateRange","renderCalendar","isSameMonth","startMonthCurrentDate","selectNextMonth","selectStartMonth","calendarContainer","prevIcon","leftTitle","leftContainer","rightContainer","leftNavTitle","rightTitle","rightNavTitle","controlContainer","headerContainer","footerSection","cancelBtn","CANCEL","applyBtn","cancelFunction","deviceHeaderUpdate","popupKeyboardModule","popupKeyActionHandle","onMouseClick","isClick","setListSelection","onMouseOver","onMouseLeave","renderCustomPopup","removeListSelection","applyPresetRange","modelValue","listTag","wireListEvents","unWireListEvents","popupWidth","btnKeyboardModule","presetKeyboardModule","presetKeyActionHandler","popupKeyBoardHandler","popupCloseHandler","rangeContainer","listMoveDown","setScrollPosition","listMoveUp","hvrItem","getHoverLI","actItem","getActiveLI","listHeight","active","liHeight","setEleWidth","virtualRenderCellArgs","virtualRenderCellEvent","isStartDisabled","isEndDisabled","isBlur","getSelectedRange","refreshChange","enableInput","clearModelvalue","DAY","MONTH","YEAR","NAVIGATION","FOCUS","createListItems","timeFormat","timeCollections","TimePicker","disableItemCollection","keyConfigure","down","up","createInputElement","validateInterval","validateDisable","getFormattedValue","setMinMax","initMin","initMax","popupCreation","valueIsDisable","resetState","initValue","isNavigate","isPreventBlur","isTextSelected","valueWithMinutes","aria-autocomplete","isNullOrEmpty","unBindEvents","ariaAttribute","generateList","listWrapper","addSelection","getPopupHeight","popupHeight","popupCalculation","firstItem","isEmptyList","textIndent","paddingRight","paddingLeft","containerStyle","setPopupWidth","createDateObj","checkErrorState","disableTimeIcon","selectInputText","getMeridianText","getCursorSelection","getActiveElement","borderLeftWidth","setScrollTo","findScrollTop","initialTime","scrollTime","cldrTimeFormat","cldrDateFormat","getCultureDateObject","getCultureTimeObject","dateToNumeric","getExactDateTime","checkValue","compareFormatChange","updatePlaceHolder","popupHandler","mouseUpHandler","curPos","cursorDetails","focusSelection","isSeparator","keyHandler","objToString","previousState","setSelection","animModel","documentClickHandler","checkValueChange","isNavigation","valueProcess","currentLi","setHover","maxVal","dateVal","strictOperation","setCurrentDate","clearHandler","inputEvent","setZIndex","getTextFormat","strArray","newval","findNextElement","textVal","timeVal","validLiElement","backward","elementIndex","isCheck","nextItem","offsetValue","lastItemOffsetValue","ulPadding","paddingTop","isUpdate","hoveredItem","getHoverItem","setActiveClass","TimeParse","listBaseOptions","getProperty","HOUR","MINUTE","SECOND","MILLISECOND","DATETIMEPOPUPWRAPPER","DateTimePicker","previousDateTime","blurHandler","isTimePopupOpen","popupObject","dateTimeWrapper","keyboardHandler","unBindInputEvents","timekeyConfigure","cldrDateTimeFormat","bindInputEvents","validateMinMaxRange","isDateObject","disablePopupButton","checkValidState","isDisable","timeIcon","renderTimeIcon","timeHandler","dateHandler","inputKeyAction","getCldrFormat","isDatePopupOpen","listCreation","endTime","listDetails","wireTimeListEvents","addTimeSelection","setTimeScrollPosition","openPopup","timeModal","TimeKeyActionHandle","unWireTimeListEvents","setDimension","setTimeHover","removeTimeHover","setInputValue","getFullDateTime","tempVal","combineDateTime","minutes","seconds","timeValue","setTimeActiveClass","setTimeActiveDescendant","removeTimeSelection","getTimeHoverItem","calculateStartEnd","hours","milliseconds","tempStartValue","tempMin","tempEndValue","tempMax","getTimeActiveElement","status_1","millisecond","findNextTimeElement","dateTimeVal","listCount","timeElementValue","setTimeValue","timeKeyHandler","nextItemValue","Save","fileName","buffer","mimeType","getMimeType","Blob","isMicrosoftBrowser","msSaveBlob","downloadLink","saveInternal","hasDownloadAttribute","download","dataUrl_1","URL","createObjectURL","revokeObjectURL","reader_1","FileReader","onloadend","readAsDataURL","XmlWriter","contentPos","bufferText","bufferBlob","currentState","namespaceStack","Namespace","elementStack","XmlElement","attributeStack","flush","writeProcessingInstruction","checkName","writeStartDocument","writeProcessingInstructionInternal","standalone","rawText","writeEndDocument","writeEndElement","writeStartElement","localName","namespace","startElementContent","lookupPrefix","lookupNamespace","writeStartElementInternal","writeEndElementInternal","previousTop","writeElementString","writeString","writeAttributeString","writeStartAttribute","writeStringInternal","writeEndAttribute","writeInternal","writeRaw","isRawString","writeStartAttributePrefixAndNameSpace","writeStartAttributeSpecialAttribute","skipPushAndWrite","pushNamespaceExplicit","pushNamespaceImplicit","writeStartAttributeInternal","namespaceName","writeNamespaceDeclaration","namespaceUri","writeStartNamespaceDeclaration","inAttributeValue","kind","addNamespace","ns","lookupNamespaceIndex","existingNsIndex","addAttribute","XmlAttribute","isDuplicate","Encoding","includeBom","emitBOM","encodingType","initBOM","getByteCount","utf8Len","getByteCountInternal","codePoint","isHighSurrogate","codeUnit","toCodepoint","highCodeUnit","lowCodeUnit","charIndex","charCount","byteCount","isUtf8","charCode","getBytes","RangeError","ArrayBuffer","getBytesOfUtf8Encoding","getBytesOfUnicodeEncoding","getBytesOfAnsiEncoding","byteLength","byteCal","getStringOfUtf8Encoding","byteUnicode","getStringofUnicodeEncoding","bufview","charcode","uint","uint16","byteUni","byte16","StreamWriter","encoding","init","enc","setBomByte","arrayUnicode","uint8","arrayUtf8","utf8","bufferArray","writeLine","arrLiteralCodes","Int16Array","arrLiteralLengths","arrDistanceCodes","arrDistanceLengths","CompressedStreamWriter","noWrap","pendingBuffer","pendingBufLength","pendingBufCache","pendingBufBitsInCache","bufferPosition","extraBits","currentHash","matchStart","matchLength","matchPrevAvail","blockStart","stringStart","lookAhead","totalBytesIn","inputOffset","inputEnd","windowSize","windowMask","hashSize","hashMask","hashShift","maxDist","checkSum","treeLiteral","CompressorHuffmanTree","treeDistances","treeCodeLengths","arrDistances","arrLiterals","stream","dataWindow","hashHead","hashPrevious","writeZLibHeader","compressedString","encode","inputBuffer","ChecksumCalculator","checksumUpdate","pendingBufferFlush","compressData","headerDate","pendingBufferWriteShortBytes","finish","success","fillWindow","canFlush","compressSlow","lookAheadCompleted","slideWindow","prevMatch","prevLen","discardMatch","matchPreviousBest","matchPreviousAvailable","huffmanIsFull","insertString","findLongestMatch","huffmanTallyLit","huffmanTallyDist","huffmanFlushBlock","lastBlock","more","subarray","updateHash","chainLen","niceLen","scan","bestEnd","bestLength","limit","stringEnd","scanEnd1","scanEnd","literal","codeFrequencies","lc","huffmanLengthCode","dc","huffmanDistanceCode","stored","storedOffset","storedLength","buildTree","calculateBLFreq","blTreeCodes","codeLengths","huffCodeLengthOrders","opt_len","getEncodedLength","static_len","huffmanFlushStoredBlock","pendingBufferWriteBits","setStaticCodes","huffmanCompressBlock","huffmanReset","huffmanSendAllTrees","pendingBufferAlignToByte","pendingBufferWriteShort","pendingBufferWriteByteBlock","buildCodes","treeLength","rank","writeTree","literalLen","writeCodeToStream","bits","Uint32Array","pendingBufferFlushBits","isClose","writer","elementCount","minCodes","codeMinCount","codeFrequency","lengthCount","Int32Array","codeCount","codeLength","codes","lengthTemp","nextCode","bitsCount","bitReverse","reverseBits","blTree","maxCount","minCount","curLen","nextLen","maxRepeatCount","minRepeatCount","currentRepeatCount","currentCodeLength","codesCount","arrTree","pPos","nodesCount","iIndex","constructHuffmanTree","buildLength","lastVal","minDepth","numNodes","numLeafs","calculateOptimalCodeLength","iIncreasableLength","recreateTree","nodePtr","childPtr","childIndex","bitLength","checksum","checksum_uint","s1","s2","checkSumBitOffset","checksumIterationCount","checksumBase","crc32Table","ZipArchive","ZipArchiveItem","addDirectory","directoryName","zipArchive","saveAsBlob","skipFileSave","zipData","dirLength","getCompressedData","constructZippedObject","isDirectory","writeZippedContent","crc32Value","compressedData","compressedSize","uncompressedDataSize","compressionType","calculateCrc32Value","readAsArrayBuffer","compressor","currentIndex","nextIndex","zipParts","extFileAttr","writeHeader","localHeader","centralDir","writeCentralDirectory","zipHeader","getModifiedTime","getModifiedDate","localDirLen","cenDirLen","getArrayBuffer","writeFooter","externalFileAttribute","centralLength","localLength","modTime","modiDate","itemName","InternalEnum","Dictionary","toStringFunction","nElements","toStr","pair","previousElement","keysArray","namesOfKeys","index1","pair1","valuesArray","namesOfValues","index2","pair2","containsKey","PdfName","stringStartMark","internalValue","isSaving6","position6","normalizeValue","status6","index6","escapeString","crossTable","newName","stringValue","ch","delimiters","replacements","Operators","forTest","endObj","slash","newLine","endStream","xref","trailer","startxref","eof","beginText","endText","appendLineSegment","fillEvenOdd","fillStroke","fillStrokeEvenOdd","appendbeziercurve","appendRectangle","saveState","restoreState","paintXObject","modifyCtm","modifyTM","setLineWidth","setLineCapStyle","setLineJoinStyle","setDashPattern","setFlatnessTolerance","closeStrokePath","closeFillStrokePath","setCharacterSpace","setWordSpace","setHorizontalScaling","setTextLeading","setFont","setRenderingMode","setTextRise","setTextScaling","setCoords","goToNextLine","setTextWithFormatting","setTextOnNewLine","selectcolorspaceforstroking","selectcolorspacefornonstroking","setrbgcolorforstroking","setrbgcolorfornonstroking","setcmykcolorforstroking","setcmykcolorfornonstroking","setgraycolorforstroking","setgraycolorfornonstroking","clipPathEvenOdd","endPath","setGraphicsState","comment","evenOdd","setMiterLimit","DictionaryProperties","pages","kids","resources","mediaBox","decodeParms","type1","baseFont","subtype","contents","procset","colorSpace","extGState","xObject","bitsPerComponent","dctdecode","blackIs1","predictor","deviceRgb","annot","uri","annots","ca","CA","xyz","dest","BM","flatedecode","w","cIDFontType2","cIDToGIDMap","identity","dw","fontDescriptor","cIDSystemInfo","fontName","flags","fontBBox","missingWidth","stemV","italicAngle","capHeight","ascent","descent","leading","avgWidth","fontFile2","xHeight","stemH","registry","ordering","supplement","type0","identityH","toUnicode","descendantFonts","PdfDictionary","dictionary","position7","primitiveItems","suffix","object","archive","isFont","encrypt","dictionaryProperties","freezeChanges","status7","isSaving7","index7","getArchive","setArchive","setEncrypt","modify","getEncrypt","freezer","bChanged","onBeginSave","beginSave","onFontDictionaryBeginSave","fontDictionaryBeginSave","onDescendantFontBeginSave","descendantFontBeginSave","onTemplateBeginSave","pageBeginDrawTemplate","pageBeginSave","onBeginAnnotationSave","annotationBeginSave","onSectionBeginSave","saveEvent","sectionBeginSave","bRaiseEvent","saveItems","SaveSectionCollectionEventHandler","SaveDescendantFontEventHandler","SaveFontDictionaryEventHandler","SaveAnnotationEventHandler","SaveSectionEventHandler","SaveTemplateEventHandler","PdfNumber","position5","status5","isSaving5","index5","intValue","floatToString","returnString","PdfArray","startMark","endMark","position9","clonedObject9","internalElements","tempArray","tempNumberArray","pdfNumber","status9","isSaving9","index9","pdfCrossTable","markedChange","tempElement","getItems","newArray","fromRectangle","tempElements","markChanged","removeAt","PdfStream","dicPrefix","dicSuffix","clonedObject2","bCompress","isImageStream","isFontStream","dataStream2","bCompress2","clearStream","internalStream","writeBytes","onCmapBeginSave","cmapBeginSave","onFontProgramBeginSave","fontProgramBeginSave","compressContent","byteArray","dataArray","getCompressedString","addFilter","filterName","PdfReferenceHolder","isImage","bytesToString","output","SaveCmapEventHandler","SaveFontProgramEventHandler","ForceEncoding","SourceType","PdfHorizontalAlignment","PdfString","bHex","position1","clonedObject1","bDecrypted","isParentDecrypted","isPacked","isFormField","isColorSpace","isHexString","status1","isSaving1","bConverted","bForceEncoding","bytesToHex","Ascii","pdfEncode","stringMark","escapeSymbols","currentData","CrossTable","newString","toUnicodeArray","bAddPrefix","byteToString","hexStringMark","hexFormatPattern","PdfReference","objNumber","genNumber","index3","position3","status3","isSaving3","obj2","index4","position4","objectIndex","primitiveObject","status4","isSaving4","pdfReference","cTable","isSaving","getReference","PdfAction","pdfDictionary","PdfUriAction","uniformResourceIdentifier","PdfVerticalAlignment","PdfTextAlignment","TextRenderingMode","PdfLineJoin","PdfLineCap","PdfDashStyle","PdfFillMode","PdfColorSpace","PdfBlendMode","PdfGraphicsUnit","PdfGridImagePosition","PdfFontStyle","PdfColor","color1","color2","color3","color4","redColor","greenColor","blueColor","grayColor","gray","alpha","filled","maxColourChannelValue","cyanColor","magentaColor","yellowColor","blackColor","assignCMYK","red","green","blue","black","cyan","magenta","yellow","isEmpty","rgbToString","ifStroking","colour","rgbStrings","toArray","Rgb","grayStringsSroke","grayStringsFill","PointF","SizeF","RectangleF","arg1","arg2","arg3","arg4","pointf","sizef","Rectangle","PdfBrush","PdfSolidBrush","pdfColor","monitorChanges","brush","streamWriter","getResources","currentColorSpace","setColorAndSpace","resetChanges","PdfFontFamily","PdfFontType","PdfWordWrapType","PdfSubSuperScript","FontEncoding","TtfCmapFormat","TtfCmapEncoding","TtfPlatformID","TtfMicrosoftEncodingID","TtfMacintoshEncodingID","FontDescriptorFlags","TtfCompositeGlyphFlags","LineType","PdfStringFormat","scalingFactor","internalLineLimit","wordWrapType","Word","Top","isRightToLeft","internalCharacterSpacing","internalWordSpacing","clip","pdfSubSuperScript","internalParagraphIndent","firstLineIndent","trailingSpaces","isNoClip","initialLineIndent","StringTokenizer","currentPosition","getCharsCount","numSymbols","readLine","text2","peekLine","readWord","peekWord","word","read","peek","spaces","whiteSpacePattern","PdfStringLayouter","isOverloadWithPosition","arg5","arg6","arg7","clientSize","doLayout","rectSize","pageHeight","reader","PdfStringLayoutResult","lineResult","lines","lineIndent","getLineIndent","layoutLine","numSymbolsInserted","returnedValue","copyToResult","numInserted","finalizeResult","firstLine","paragraphIndent","getLineHeight","lineSpacing","getLineWidth","layoutLineHeight","lineType","FirstParagraphLine","addToLineResult","NewLineBreak","builder","curLine","curIndent","isSingleWord","curLineWidth","getWrapType","Character","ln","LayoutBreak","LastParagraphLine","layoutLines","breakType","LineInfo","lineLimit","expHeight","trimLine","size_1","textRemainder","empty","ObjectStatus","PdfFont","Regular","setStyle","metrics","getHeight","Bold","Italic","Strikeout","Underline","fontMetrics","pdfFontInternals","measureString","temparg2","layoutArea","temparg3","equalsTo","equalsToFont","getInternals","setInternals","internals","applyFormatSettings","realWidth","characterSpacing","wordSpacing","charSizeMultiplier","syncObject","PdfWriter","pdfDocument","overload","tempOverload","ObjectType","PdfMainObjectCollection","objectCollections","mainObjectCollection","primitiveObjectCollection","isNew","objInfo","ObjectInfo","Registered","lookFor","wasNew","trySetReference","found","setReference","pdfObject","objectCollectionIndex","PdfDocumentBase","isStreamCopied","PdfDocument","currentSavingObject","pdfCatalog","setMainObjectCollection","setCrossTable","setCatalog","catalog","filename","SW","encoding_1","SW_1","blobData","docSave","PdfPageOrientation","PdfCatalog","sections","tempDictionaryProperties","PdfCrossTable","maxGenNumIndex","objectCount","merging","internalTrailer","pdfObjects","saveHead","mappedReferences","markTrailerReferences","saveObjects","saveCount","xrefPos","registerObject","saveSections","saveTrailer","saveTheEndess","objectCollection","prevXRef","objectNum","prepareSubsection","saveSubsection","Free","generation","isFree","addOffsetLength","addGenNumberLength","generateFileVersion","bNew","getSubReference","objnumber","nextObjNumber","tempIndex","tempkey","tempvalue","bForceNew","saveIndirectObject","currentSavingObj","doSaveObject","free","RegisteredObject","dereference","tempOffset","offsetNumber","tempReference","Normal","PdfPageSize","letter","note","legal","a0","a3","a4","a5","a6","a7","a8","a9","a10","b0","b3","b4","b5","archE","archD","archC","archB","archA","flsa","halfLetter","letter11x17","ledger","PdfPageRotateAngle","PdfNumberStyle","PdfDockStyle","PdfAlignmentStyle","TemplateType","ImageFormat","PdfMargins","pdfMargin","setMargins","leftMargin","topMargin","rightMargin","bottomMargin","margin1","margin2","margin3","margin4","PdfPageSettings","margins","pageMargins","RotateAngle0","pageOrientation","Portrait","pageOrigin","isRotation","updateSize","Landscape","getActualSize","PdfStreamWriter","dictionaryName","writeOperator","executeObject","useEvenOddRule","fillStrokePath","fillPath","closeFillPath","textScaling","strokePath","restoreGraphicsState","saveGraphicsState","startNextLine","writePoint","showText","checkTextParam","writeText","setLeading","setTextRenderingMode","renderingMode","setCharacterSpacing","charSpacing","setWordSpacing","showNextLineText","setColorSpace","temparg1","op","opcode","updateY","writeComment","forStroking","setLineDashPattern","patternOffset","setLineDashPatternHelper","tempPattern","miterLimit","setLineCap","lineCapStyle","setLineJoin","lineJoinStyle","PdfPen","dashOffsetValue","penDashPattern","pdfDashStyle","Solid","pdfLineCap","pdfLineJoin","penWidth","internalMiterLimit","setBrush","Custom","Dash","Dot","DashDot","DashDotDot","sBrush","pdfBrush","currentPen","dashControl","lineJoin","lineCap","pen","getPattern","dashOffset","dashPattern","PdfTransformationMatrix","radDegFactor","transformationMatrix","multiply","degreesX","degRadFactor","metrixElements","tempMatrix","dispose","ProcedureSets","pdf","imageB","imageC","imageI","TemporaryDictionary","mKeys","mValues","ReferenceError","PdfTransparency","PdfAutomaticFieldInfoCollection","automaticFieldsInformation","fieldInfo","automaticFields","PdfGraphicsElement","drawHelper","graphics","bNeedSave","gState","translateTransform","drawInternal","PdfAutomaticField","internalBounds","internalTemplateSize","internalFont","internalBrush","internalPen","internalStringFormat","performDrawHelper","scalingX","scalingY","getFont","stringFormat","draw","location_1","PdfAutomaticFieldInfo","getBrush","defaultFont","getPageFromGraphics","currentPage","pageNumberFieldLocation","pageNumberField","ByteArray","mPosition","dataView","DataView","readByte","getBuffer","writeFromBase64String","base64","encodedString","chr1","chr2","chr3","enc2","enc3","keyStr","resultIndex","PdfBoolean","objectStatus","saving","boolToStr","PdfLayoutType","ImageDecoder","mFormat","mbitsPerComponent","mStream","mHeight","mWidth","mImageData","internalBuffer","checkIfJpeg","Jpeg","parseJpegImage","imgData","mJpegHeader","getImageDictionary","imageData","imageStream","decodedString","imageDataAsNumberArray","compress","getColorSpace","getDecodeParams","decodeParams","mPngHeader","GIF_HEADER","BMP_HEADER","PdfUnitConverter","dpi","updateProportionsHelper","convertUnits","convertFromPixels","convertToPixels","proportions","pixelPerInch","horizontalResolution","verticalResolution","PdfImage","imageWidth","imageHeight","imagePhysicalDimension","getPointSize","dpiX","dpiY","ucX","ucY","ptWidth","Pixel","ptHeight","PdfBitmap","imageStatus","loadImage","initializeAsync","decoder","TtfTableInfo","TtfNameTable","TtfNameRecord","TtfHeadTable","TtfMetrics","macStyle","TtfHorizontalHeaderTable","TtfOS2Table","TtfPostTable","TtfLongHorMetric","TtfCmapSubTable","TtfCmapTable","TtfGlyphInfo","glyph","TtfLocaTable","TtfAppleCmapSubTable","TtfMicrosoftCmapSubTable","TtfTrimmedCmapSubTable","TtfGlyphHeader","BigEndianWriter","capacity","int32Size","int16Size","int64Size","bufferLength","internalPosition","writeShort","writeInt","writeUInt","buff","TtfReader","fontData","isTtcFont","isMacTtf","metricsName","isMacTTF","missedGlyphs","tableNames","entrySelectors","macintoshDictionary","microsoftDictionary","internalMacintoshGlyphs","internalMicrosoftGlyphs","readFontDictionary","readNameTable","headTable","readHeadTable","initializeFontName","checkPreambula","numTables","readInt16","tableDirectory","tableKey","readString","readInt32","lowestPosition","fixOffsets","minOffset","tableKeys","tableInfo","getTable","formatSelector","readUInt16","recordsCount","nameRecords","platformID","encodingID","languageID","nameID","unicode","readFixed","fontRevision","checkSumAdjustment","readUInt32","magicNumber","unitsPerEm","created","readInt64","modified","yMin","xMax","yMax","lowestReadableSize","fontDirectionHint","indexToLocalFormat","glyphDataFormat","readHorizontalHeaderTable","ascender","descender","lineGap","advanceWidthMax","minLeftSideBearing","minRightSideBearing","xMaxExtent","caretSlopeRise","caretSlopeRun","metricDataFormat","numberOfHMetrics","readOS2Table","xAvgCharWidth","usWeightClass","usWidthClass","fsType","ySubscriptXSize","ySubscriptYSize","ySubscriptXOffset","ySubscriptYOffset","ySuperscriptXSize","ySuperscriptYSize","ySuperscriptXOffset","ySuperscriptYOffset","yStrikeoutSize","yStrikeoutPosition","sFamilyClass","panose","readBytes","ulUnicodeRange1","ulUnicodeRange2","ulUnicodeRange3","ulUnicodeRange4","vendorIdentifier","fsSelection","usFirstCharIndex","usLastCharIndex","sTypoAscender","sTypoDescender","sTypoLineGap","usWinAscent","usWinDescent","ulCodePageRange1","ulCodePageRange2","sxHeight","sCapHeight","usDefaultChar","usBreakChar","usMaxContext","readPostTable","formatType","underlinePosition","underlineThickness","isFixedPitch","minType42","maxType42","minType1","maxType1","readWidthTable","glyphCount","advanceWidth","lsb","glyphWidth","readCmapTable","tablesCount","subTables","subTable","readCmapSubTable","getCmapEncoding","Macintosh","Microsoft","Apple","readAppleCmapTable","readMicrosoftCmapTable","Trimmed","readTrimmedCmapTable","maxMacIndex","glyphInfo","getWidth","macintosh","addGlyph","Unicode","microsoft","segCountX2","searchRange","entrySelector","rangeShift","segCount","endCount","readUshortArray","reservedPad","startCount","idDelta","idRangeOffset","glyphID","codeOffset","Symbol","firstCode","entryCount","postScriptName","glyphCode","Undefined","Roman","microsoftGlyphs","macintoshGlyphs","initializeMetrics","horizontalHeadTable","os2Table","postTable","cmapTables","bSymbol","isSymbol","winAscent","macAscent","winDescent","macDescent","fontBox","widthTable","updateWidth","subScriptSizeFactor","superscriptSizeFactor","getGlyph","byteToProcess","getDefaultGlyph","readLocaTable","bShort","offsets","updateGlyphChars","glyphChars","locaTable","glyphCharKeys","nextKey","processCompositeGlyph","glyphOffset","glyphHeader","numberOfContours","skipBytes","glyphIndex","MoreComponents","Arg1And2AreWords","WeHaveScale","WeHaveAnXyScale","WeHaveTwoByTwo","generateGlyphTable","newLocaTable","newGlyphTable","activeGlyphs","glyphSize","glyphSizeAligned","nextGlyphOffset","nextGlyphIndex","oldGlyphOffset","oldNextGlyphOffset","glyphTableSize","updateLocaTable","bLocaIsShort","newLocaTableOut","newLocaUpdated","newLocaSize","getFontProgram","locaTableSize","getFontProgramLength","fontProgramLength","writeCheckSums","writeGlyphs","usedTablesSize","nextTableSize","calculateCheckSum","byte1","byte2","byte3","byte4","setOffset","createInternals","bIsLocaShort","isFontPresent","getGlyphChars","charKeys","getAllGlyphs","allGlyphInfo","readFontProgram","convertString","getCharWidth","isUnicode","i1","i2","i3","i4","written","PdfFontMetrics","getAscent","getDescent","getLineGap","clearTypeFonts","clearTypeFontCollection","subSuperScript","SubScript","SuperScript","WidthTable","internalWidthTable","StandardWidthTable","widths","UnicodeTrueTypeFont","base64String","nameString","isCompress","cmapPrefix","cmapEndCodespaceRange","cmapBeginRange","cmapEndRange","cmapSuffix","fontString","Initialize","ttfReader","ttfMetrics","fontDictionary","fontProgram","cmap","descendantFont","subsetName","getFontName","createDescendantFont","createCmap","createFontDictionary","createFontProgram","isBold","formatName","createFontDescriptor","systemInfo","createSystemInfo","descriptor","getDescriptorFlags","getBoundBox","descFonts","usedChars","getDescendantWidth","generateCmap","generateFontProgram","chLen","firstGlyphIndex","lastGlyphIndex","firstGlyphIndexWasSet","widthDetails","middlePart","toHexString","nextRange","FixedPitch","Symbolic","Nonsymbolic","isItalic","ForceBold","isCaseChange","setSymbols","PdfGraphics","previousTextRenderingMode","Fill","previousCharacterSpacing","previousWordSpacing","previousTextScaling","procedureSets","isNormalRender","isUseFontSize","isEmfTextScaled","isEmf","isEmfPlus","isBaselineFormat","emfScalingFactor","colorSpaceChanged","isPointOverload","currentColorSpaces","isImageOptimized","graphicsState","istransparencySet","internalAutomaticFields","startCutIndex","pdfStreamWriter","canvasSize","pdfStringLayoutResult","internalMediaBoxUpperRightBound","clipBounds","pageLayer","bStateSaved","currentBrush","currentFont","bCSInitialized","currentStringFormat","requireProcedureSet","drawPdfTemplate","bNeedScale","getTranslateTransform","getScaleTransform","getName","newLocation","drawString","arg8","arg9","temparg4","temparg5","temparg6","temparg7","temparg8","temparg9","checkCorrectLayoutRectangle","drawStringLayoutResult","stateControl","Winding","isPen","isBrush","isEvenOdd","Alternate","physicalDimension","setResources","resource","getLineBounds","lineIndex","layoutRectangle","lineCount","getTextVerticalAlignShift","hShift","getHorizontalAlignShift","shouldJustify","layoutedRectangle","Center","Right","lineAlignment","Middle","Bottom","setLayer","pageSave","performDraw","applyStringSettings","horizontalScalingFactor","resultHeight","remainingString","drawLayoutResult","underlineStrikeoutText","getNextPage","section","getPages","setClip","tm","getTextRenderingMode","cs","ws","textHeight","boundsHeight","vAlignShift","ttfFont","isEmbedFont","lineInfo","hAlignShift","drawUnicodeLine","drawAsciiLine","useWordSpace","Justify","justifyLine","breakUnicodeLine","blocks","tokens","drawUnicodeBlocks","token","convertToUnicode","getUnicodeString","xShift","spaceWidth","tokenWidth","converted","fontInternal","boundsWidth","hasWordSpacing","whitespacesCount","wordSpace","initializeCoordinates","justifyStyle","goodWidth","hasSpaces","goodLineBreakStyle","underline","strikeout","linePen","createUnderlineStikeoutPen","vShift","underlineYOffset","strikeoutYOffset","FillStroke","Stroke","ClipFlag","layoutBounds","firstParagraphLine","Left","lastDocumentCS","lastGraphicsCS","initCurrentColorSpace","penControl","brushControl","fontControl","colorspace","curSubSuper","prevSubSuper","setTransparency","trasparencies","transp","td","TransparencyData","clipTranslateMargins","clipArea","rotateTransform","getRotateTransform","mediaBoxUpperRightBound","cropBox","PdfGraphicsState","textRenderingMode","doRestoreState","pathTypesValuesMask","transparencyObject","GetResourceEventHandler","internalTextRenderingMode","internalTextScaling","pdfColorSpace","pdfGraphics","pdfPen","pdfFont","alphaPen","alphaBrush","blendMode","PdfPageLayer","streamClipPageTemplates","sublayer","contentLength","pdfPage","clipPageTemplates","layerid","layerName","initializeGraphics","PdfPageLayerCollection","sign","oPage","gr","sc","isSame","origin","getActualBounds","PdfCollection","parentLayerCount","optionalContent","PdfPageBase","lPage","parseLayers","firstArgument","secondArgument","addLayer","insertLayer","loadedPage","saveStream","restoreStream","saveData","PdfTemplate","writeTransformation","tempSize","templateSize","PdfResources","addType","addSubType","baseDictionary","getNames","primitive","names","sName","generateName","pdfNames","fonts","procedureSetName","procSets","removeFont","Guid","getNewGuidString","xobjects","savable","transDic","parentXObjects","hasSameImageStream","oldReference","randomString","randomNumber","defLayerIndex","pageDictionary","pdfSection","defaultLayerIndex","layerCollection","PdfAnnotationCollection","alreadyExistsAnnotationError","missingAnnotationException","internalAnnotations","lists","doAdd","setPage","layoutResult","lastPosition","setColor","colours","PdfPage","annotationCollection","defaultLayer","setSection","resetProgress","isProgressOn","getClientSize","doc","drawPageTemplates","containsTemplates","backLayer","drawTemplates","frontLayer","PageAddedEventArgs","PdfSectionPageCollection","PdfDocumentTemplate","leftTemplate","checkElement","topTemplate","rightTemplate","bottomTemplate","evenLeft","evenTop","evenRight","evenBottom","oddLeft","oddTop","oddRight","oddBottom","getLeft","isEven","EvenLeft","OddLeft","getTop","EvenTop","OddTop","getRight","EvenRight","OddRight","getBottom","EvenBottom","OddBottom","pageCollectionIndex","PdfSectionTemplate","rightValue","bottomValue","stampValue","PdfSection","pageAdded","pdfPages","initialSettings","sectionCollection","pagesReferences","pageTemplate","pagesCollection","pointToNativePdf","setPageSettings","PageSettingsState","pageCount","foreground","documentHeaders","getDocumentTemplates","documentTemplates","templates","applyDocumentTopTemplate","applyDocumentBottomTemplate","applyDocumentLeftTemplate","applyDocumentRightTemplate","page_1","checkPresence","pageAddedMethod","rh","onPageAdded","document_1","getLeftIndentWidth","getTopIndentHeight","getRightIndentWidth","getBottomIndentHeight","includeMargins","templateWidth","docTemplateWidth","templateHeight","docTemplateHeight","temproaryPages","applyPageSettings","parentSettings","PdfSectionCollection","rotateFactor","drawTemplatesHelper","pageRotate","sectionCount","pdfSectionCollection","section_1","checkSection","countPages","PdfDocumentPageCollection","pdfPageCollectionIndex","previousPageOrientation","getLastSection","getPageByIndex","getPage","sectionStartIndex","numPages","PdfCacheCollection","referenceObjects","pdfFontCollection","getGroup","createNewGroup","tGroup","representative","removeGroup","isMerging","defaultMargin","documentPageCollection","cacheCollection","defaultStandardFont","PdfStandardFont","Helvetica","isCacheEnabled","Cmyk","GrayScale","checkPagesPresence","PdfStandardFontMetricsFactory","getMetrics","getHelveticaMetrics","Courier","getCourierMetrics","TimesRoman","getTimesMetrics","getSymbolMetrics","ZapfDingbats","getZapfDingbatsMetrics","subSuperScriptFactor","helveticaBoldItalicAscent","helveticaBoldItalicDescent","helveticaBoldItalicName","arialBoldWidth","helveticaBoldAscent","helveticaBoldDescent","helveticaBoldName","helveticaItalicAscent","helveticaItalicDescent","helveticaItalicName","arialWidth","helveticaAscent","helveticaDescent","helveticaName","courierBoldItalicAscent","courierBoldItalicDescent","courierBoldItalicName","fixedWidth","courierBoldAscent","courierBoldDescent","courierBoldName","courierItalicAscent","courierItalicDescent","courierItalicName","courierAscent","courierDescent","courierName","timesBoldItalicAscent","timesBoldItalicDescent","timesBoldItalicName","timesRomanBoldItalicWidths","timesBoldAscent","timesBoldDescent","timesBoldName","timesRomanBoldWidth","timesItalicAscent","timesItalicDescent","timesItalicName","timesRomanItalicWidth","timesAscent","timesDescent","timesName","timesRomanWidth","symbolAscent","symbolDescent","symbolName","symbolWidth","zapfDingbatsAscent","zapfDingbatsDescent","zapfDingbatsName","zapfDingbatsWidth","fontFamilyPrototype","encodings","pdfFontFamily","checkStyle","initializeInternals","convert","getCharWidthInternal","stFont","fontFamilyEqual","lineReducer","styleEqual","WinAnsiEncoding","charOffset","PdfAnnotation","textBrush","textFont","internalColor","darkness","nativeRectangle","initialHeight","tempLoacation","PdfLinkAnnotation","PdfActionLinkAnnotation","pdfAction","getSetAction","PdfDocumentLinkAnnotation","pdfDestination","PdfLayoutBreakType","PdfDestinationMode","ElementLayouter","layoutElement","isBoundsChanged","layoutInternal","PdfLayoutFormat","baseFormat","break","paginateBounds","boundsSet","usePaginateBounds","layoutType","Paginate","FitPage","layoutPaginateBounds","PdfLayoutParams","layoutFormat","PdfLayoutResult","PdfLayoutElement","bEmbedFonts","TextLayouter","currentBounds","pageResult","TextPageLayoutResult","remainder","layoutOnPage","getLayoutResult","PdfTextLayoutResult","lastLineBounds","checkCorrectBounds","stringResult","textFinished","FitElement","PdfTextWebLink","getTextPageBounds","verticalShift","remainderText","lastLineTextBounds","PdfTextElement","hasPointOverload","isPdfTextElement","stringLayoutResult","previousPosition","calculateResultBounds","lineSize","startPosition","PdfUriAnnotation","pdfUriAction","uriAction","uniformResourceLocator","uriAnnotation","recalculateBounds","defaultBorder","previousFontStyle","calculateBounds","drawMultipleLineWithPoint","drawMultipleLineWithBounds","PdfNumbersConvertor","intArabic","numberStyle","Numeric","LowerLatin","arabicToLetter","LowerRoman","arabicToRoman","UpperLatin","UpperRoman","retval","generateNumber","arabic","convertToLetter","appendChar","magnitude","numberstring","letterLimit","acsiiStartIndex","PdfTemplateValuePair","pdfTemplate","PdfMultipleValueField","drawLocation","PdfPageNumberField","internalNumberStyle","internalGetValue","PdfCompositeField","internalText","automaticField","PdfSingleValueField","painterGraphics","PdfPageCountField","PdfBorderOverlapStyle","PdfDestination","destinationMode","destinationLocation","initializePrimitive","simplePage","FitToPage","PdfTrueTypeFont","createFontInternal","codeWidth","calculateStyle","iStyle","equalFont","enableCache","isEmbed","isUnicodeFont","PdfPageTemplateElement","dockStyle","resetAlignment","alignmentStyle","setAlignment","isForeground","templateType","updateDocking","dock","canBeSet","TopLeft","MiddleLeft","BottomLeft","TopCenter","TopRight","MiddleRight","BottomRight","BottomCenter","MiddleCenter","getAlignmentBounds","getDockBounds","getSimpleAlignmentBounds","getTemplateAlignmentBounds","actualBounds","getSimpleDockBounds","getTemplateDockBounds","PdfBorders","defaultBorderPenLeft","dashStyle","defaultBorderPenRight","defaultBorderPenTop","defaultBorderPenBottom","leftPen","rightPen","topPen","bottomPen","PdfPaddings","leftPad","rightPad","topPad","bottomPad","PdfHorizontalOverflowType","PdfGridStyleBase","gridBackgroundBrush","gridTextBrush","gridTextPen","gridFont","PdfGridStyle","gridBorderOverlapStyle","Overlap","bAllowHorizontalOverflow","gridHorizontalOverflowType","LastPage","gridCellSpacing","gridCellPadding","PdfGridCellStyle","gridCellBorders","default","PdfGridRowStyle","gridRowBackgroundBrush","setBackgroundBrush","getCell","backgroundBrush","gridRowTextBrush","setTextBrush","gridRowTextPen","setTextPen","textPen","gridRowFont","gridRowBorder","setBorder","borders","setParent","Theme","PdfGridCell","cellWidth","cellHeight","finsh","rowSpanRemainingHeight","gridRowSpan","colSpan","gridRow","internalIsCellMergeContinue","internalIsRowMergeContinue","internalIsCellMergeStart","internalIsRowMergeStart","remaining","objectValue","rowSpanExists","cellStyle","measureHeight","columnSpanExists","isComplete","measureWidth","layouter","getTextFont","webLink","cellPadding","cellSpacing","drawCellBackground","getBackgroundBrush","adjustContentLayoutArea","returnBounds","rowSpan","cancelSubsequentSpans","allowHorizontalOverflow","rowOverflowIndex","adjustOuterLayoutArea","getTextPen","getTextBrush","strFormat","getStringFormat","innerLayoutArea","imageBounds","drawCellBorders","borderOverlapStyle","Inside","p1","p2","Square","currentColIndex","columnSpan","compWidth","getColumn","currentRowIndex","rows","rowCollection","getHeader","getRow","rowMergeComplete","calculateWidth","cellIndex","PdfGridCellCollection","tempcell","PdfGridColumn","columnWidth","isCustomWidth","PdfGridColumnCollection","internalColumns","measureColumnsWidth","initialWidth","isPageWidth","getDefaultWidths","subFactor","PdfGridRow","gridRowOverflowIndex","isRowHeightSet","isRowMergeComplete","pdfGrid","bRowSpanExists","gridCells","rowStyle","gridRowBreakHeight","bColumnSpanExists","PdfGridRowCollection","addRow","temprow","PdfGridHeaderCollection","PdfGridLayoutFormat","PdfGrid","gridSize","isRearranged","pageBounds","listOfNavigatePages","columnRanges","breakRow","beginCellDraw","endCellDraw","beginPageLayout","endPageLayout","bRepeatHeader","gridColumns","gridRows","gridHeaders","gridInitialWidth","gridStyle","pageWidth","childGrid","measure","isGridLayouter","setSpan","gridLocation","currentCellIndex","rowCount","colCount","isCellMergeContinue","isRowMergeContinue","isCellMergeStart","isRowMergeStart","getFormat","currentPageBounds","currentGraphics","isChildGrid","hType","horizontalOverflowType","determineColumnDrawRanges","rowWidth","internalWidth","internalHeight","isCorrectWidth","isCorrectHeight","startColumn","endColumn","cellWidths","availableWidth","subWidths","layoutedPages","startPage","cellBounds","cellStartIndex","cellEndIndex","returnObject","raiseBeforePageLayout","drawRow","repeatRow","originalHeight","repeatRowIndex","rowResult","isFinish","OnePage","repeatHeader","i_2","maximumCellBoundsWidth","rowLayoutBoundsWidth","NextPage","reArrangePages","raisePageLayouted","nextPage","pageindex","PdfGridLayoutResult","ReCalculateHeight","currentRow","raiseBeginPageLayout","PdfGridBeginPageLayoutEventArgs","startRowIndex","PdfGridEndPageLayoutEventArgs","raiseEndPageLayout","result_1","RowLayoutResult","rowHeightWithSpan","maxSpan","currRowIndex","rowMaxHeight","nextRow","calculatedHeight","rowBreakHeight","location_2","cancelSpans","CheckIfDefaultFormat","cellstyle","RaiseBeforeCellDraw","RaiseAfterCellDraw","defaultFormat","measureTrailingSpaces","noClip","rowIndex","raiseBeginCellDraw","PdfGridBeginCellDrawEventArgs","raiseEndCellDraw","PdfGridEndCellDrawEventArgs","GridCellEventArgs","gridRowIndex","gridCellIndex","gridBounds","bSkip","PdfCancelEventArgs","isCancel","BeginPageLayoutEventArgs","EndPageLayoutEventArgs","nextPdfPage","startRow","layoutedBounds","bIsFinished","Side","isRight","isBottom","CustomizeOption","TooltipLocation","TextStyle","TooltipBorder","AreaBounds","ToolLocation","initPrivateVariable","removeSVG","formattedText","isFirst","markerPoint","templateObject","fadeOuted","updateTemplateFn","areaBounds","renderText","markerSide","renderTooltipElement","drawMarker","markerSize","textElements","shared","groupElement","pathElement","shapes","shapeOption","markerGroup","marginX","tooltipDiv","tipLocation","isTop","isLeft","elementSize","marginY","sharedTooltipLocation","tooltipLocation","inverted","headerSize","textStyle","pathElement_1","pointRect","enableAnimation","updateDiv","animateTooltipDiv","enableShadow","defElement","changeText","findFormattedText","isRender","tspanOption","subWidth","tspanStyle","headerSpace","isRow","isColumn","markerPadding","pointsLength","k_1","width_1","firstElement","tooltipRect","symbolLocation","markerHeight","clipX","clipY","boundsX","boundsY","currenDiff","fadeOut","tooltipGroup_1","opacity_1","endAnimation","tooltipGroup","CLS_DISABLE","CLS_HSCROLLNAV","HScroll","browser","browserCheck","ieCheck","uniqueId","touchHandler","createNavIcon","scrollEle","buildTag","scrollDiv","innerEle_1","scrollItems","nav","navEles","clsRight","navItem","CLS_NAVRIGHTARROW","clsLeft","navEle","navLeftItem","CLS_NAVLEFTARROW","eventBinding","onKeyPress","keyTimer","keyTimeout","eleScrolling","onKeyUp","tabHoldHandler","repeatScroll","clickEventHandler","scrollDis","rootEle","scrlLeft","scrollStep","arrowDisabling","addDisable","removeDisable","navLeftEle","navRightEle","disEle","CLS_ITEMS","CLS_ITEM","CLS_SEPARATOR","CLS_POPUPICON","CLS_POPUPDOWN","CLS_TBARTEXT","CLS_TBAROVERFLOW","CLS_POPOVERFLOW","CLS_TBARNAV","CLS_TBARPOS","CLS_POPUPCLASS","CLS_POPUP","CLS_TBARNAVACT","CLS_TBARIGNORE","CLS_POPPRI","CLS_MULTIROW_SEPARATOR","CLS_EXTENDABLE_SEPARATOR","Toolbar","popupOpen","trgtEle","ctrlTem","clearProperty","popObj","tbarAlign","attrb","enableCollision","scrollModule","tbarItemsCol","popupPriCount","resize","keyModule","docKeyDown","popCheck","overflowMode","destroyHScroll","docEvent","tbarEle","tbarAlgEle","lefts","centers","rights","popEle","destroyItems","tbarItems","destroyMode","popupRefresh","elementFocus","fChild","activeEleSwitch","clstElement","tbrNavChk","keyHandling","clst","navChk","scrollChk","popAnimate","eleFocus","popupCheck","popFrstEle","activeEle","activeEleRemove","tbarScrollChk","sib","skipEle","clsList","isPopupElement","popupNav","popupClickHandler","CLS_RTL","aria-orientation","renderOverflowMode","itemPositioning","checkPopupRefresh","initHScroll","innerItems","checkOverflow","itemWidthCal","innerItem","eleWidth","itemWidth","popNav","scrollNav","refreshOverflow","priorityCheck","offsetWid","removePositioning","createPopupEle","eleInlineItem","eleItem","multiVar","extendVar","innerNav","createPopupIcon","checkPriority","removeProperty","pushingPoppedEle","tbarObj","popupPri","eleHeight","sepHeight","nodeIndex","nodePri","tbResize","tbarElement","sepItem","extendEle","popupInit","toolEle","popupElePos","popIcon","scrollVal","overflowHeight","inEle","pre","popPriority","eleWid","sepCheck","itemPopCount","checkClass","rVal","mrgn","fstEleCheck","tbarEleMrgn","eleWid_1","sepEle","popedEle","tbarPriRef","sepPri","des","elWid","wid","ig","ignoreCount","priEleCnt","eleSep","ignoreCheck","eleSepWidth","prevSep","popupEleWidth","popupEleRefresh","ignoreEleFetch","ignoreEle","ignoreInx","tbarWidth","tbarItemsWid","elWidth","btnText","eleSplice","sepBeforePri_1","refreshPositioning","tbarWid","popWid","tbarItemAlign","itemEle","showAlwaysInPopup","alignDiv","alignEle","leftAlign_1","ctrlTemplate","itemEleDom","innerPos","renderSubComponent","setAttr","addItems","itemsDiv","itemAgn","items_1","algIndex","removeItems","removeItemByIndex","eleIdx","indexAgn","templateRender","templateProp","isComponent","itemType","tempStr","buttonRendering","dom","iconPos","textStr","btnTxt","prefixIcon","suffixIcon","tooltipText","itemClick","showTextOn","sTxt","itemsRerender","tEle","changedProb","newProperty","popupPriCheck","booleanCheck","CLS_ACRDN_ROOT","CLS_HEADER","CLS_HEADERCTN","CLS_CONTENT","CLS_CTENT","CLS_TOOGLEICN","CLS_CTNHIDE","CLS_SLCTED","CLS_ACTIVE","CLS_TOGANIMATE","CLS_EXPANDSTATE","AccordionActionSettings","AccordionAnimationSettings","AccordionItem","Accordion","isDestroy","templateEle","eleStr","nested","isNested","expandedItems","initExpand","aria-multiselectable","expandMode","initItemExpand","innerEles","aria-level","toggleIconGenerate","tglIcon","hdrColIcon","expandItem","renderInnerItem","acrdnItem","acrdnHdr","acrdnCtn","acrdnCtnItem","acrdActive","getIndexByItem","contentRendering","ariaAttrUpdate","cntclkCheck","acrdAniEle","acrdAniEle_1","sameContentCheck","sameHeader","acrdnCtn_1","expandState","collapse","eleMoveFocus","clstItem","headerEleGenerate","ctnEle","hdrEle","fetchElement","hdr","hdrIcnEle","hdrIcon","temString","eleVal","itemcnt","ctn","trgtItemEle","isExpanded","eff","expandedItemsPush","expandProgress","expandAnimation","ef","icn","expandedItemsPop","collapseProgress","collapseAnimation","trgtItEl","trgtHeight","itemHeight","itemAttribUpdate","itemLen","innerItemEle","expandedItemRefresh","eleHeader","isExpand","itemExpand","updateItem","acrdn","changedProp","newVal","DOWNARROW","FOCUSED","SEPARATOR","HIDE","MenuItem","ContextMenu","navIdx","isTapHold","ngElement","targetElems","cmenuHandler","moverHandler","delegateClickHandler","closeMenu","rightEnterKeyHandler","leftEscKeyHandler","cul","fliIdx","fli","getLIByClass","getIdx","cli","openMenu","sli","ulIndex","isMenuVisible","toggleAnimation","ICONS","hdata","hli","toggleVisiblity","collide","xCollision","hasField","toRawObject","menuItems","showItemOnClick","cliWrapper","isInstLI","setLISelected","showSubMenu","cliIdx","culIdx","classname","skipHdr","getChangedItemIndex","insertAfter","uls","isMenuOpen","isUniqueId","isCallBack","showItems","showHideItems","hideItems","ishide","iitems","insertItems","isAfter","menuitem","CLS_HIDDEN","CLS_ICON_CLOSE","CLS_WRAP","CLS_TB_ITEMS","CLS_TB_ITEM","CLS_TB_POPUP","CLS_PROGRESS","TabActionSettings","TabAnimationSettings","Header","TabItem","Tab","prevIndex","animObj","tbObj","expTemplateContent","isTemplate","cntEle","isPopup","isSwipeed","css","renderContainer","setOrientation","headerPlacement","renderHeader","bdrLine","CLS_INDICATOR","scrCnt","setContentHeight","tabItems","btnCls","CLS_ICONS","hdrItems","aria-controls","cont","parseObject","clicked","setCloseButton","showCloseButton","hdrItem","inHTML","tbCount","tItems","txt","isReplace","tHtml","txtEmpty","wrapAttrs","tCont","tItem","removeActiveClass","hdrActEle","extIndex","findEle","checkPopupOverflow","tbPop","tbrItems","ripEle","tbItem","actEleId","prevEle","trg","refreshActElePosition","prevCtnAnimation","triggerPrevAnimation","oldCnt","animateObj","triggerAnimation","prevActiveEle","newCnt","getTrgContent","idNo","openEff","clsEff","setActiveBorder","keyPressed","trgParent","trgIndex","getEleIndex","templateCompile","tempEle","templateFUN","place","heightAdjustMode","hsCnt","tbWidth","setActive","trg_1","eleTrg","curActItem","refreshItemVisibility","eventArg","previousItem","prevItem","previousIndex","isSwiped","setItems","refreshActiveBorder","spaceKeyDown","swipeHandler","tabKeyModule","removeTab","actEle","nxtSib","scrBar","scrStart","scrEnd","eleStart","eleEnd","eleViewRange","closeButtonTitle","enableTab","addTab","addedItems","removingArgs","removedItem","removedIndex","cntTrg","removedArgs","hideTab","cntItem","tempHdrEle","COLLAPSIBLE","EXPANDABLE","LISTITEM","LISTTEXT","PARENTITEM","LOAD","PROCESS","TEXTWRAP","TREEINPUT","SIBLING","DROPNEXT","FULLROW","EXPANDED","NODECOLLAPSED","CHECK","CHECKBOXWRAP","CHECKBOXFRAME","treeAriaAttr","treeRole","FieldsSettings","ActionSettings","NodeAnimationSettings","TreeView","mouseDownStatus","TreeView_1","checkActionNodes","dragStartAction","ctrlDown","ctrlUp","ctrlEnter","ctrlHome","ctrlEnd","ctrlA","shiftDown","shiftUp","shiftEnter","shiftHome","shiftEnd","csDown","csUp","csEnter","csHome","csEnd","beforeNodeCreate","updateListProp","treeList","isLoaded","setTouchClass","checkedNodes","setDataBinding","setExpandOnType","wireEditingEvents","setDragAndDrop","allowDragAndDrop","setFullRow","fullRowSelect","nodeTemplateFn","nodeTemplate","iconModel","rippleIconFn","setMultiSelect","firstUl","treeData","isNumberTypeId","getType","setRootData","finalize","rootData","parentID","getDataType","groupedData","getGroupedData","rootItems","getChildNodes","isSorted","getSortedData","finalizeNode","checkboxEle","touchClass","addCheck","frame","frameMouseHandler","createFullRow","allowMultiSelection","addActionClass","nodeData","actionValue","iNodes","sNodes","selectNode","cNodes","eNodes","renderChildNodes","updateList","updateCheckedProp","nodes_1","ensureParentCheckState","checkBoxEle","parentUL","currentParent","ensureChildCheckState","checkBoxes","checkedState","currentLoadData","isNodeChecked","doCheckBoxAction","doCheck","liEle","checkBox","validateCheckNode","isPrevent","isAdd","currLi","getCheckEvent","removeCheck","getNodeData","firstNode","updateIdAttr","doSelectionAction","sUids","sNode","selectGivenNodes","preventContextMenu","setFocusElement","checkWrapper","triggerClickEvent","expandAction","collapseNode","toggleSelect","nodeCheckingEvent","nodeCheckedEvent","expandNode","setHeight","expandedNode","animateHeight","expandArgs","getExpandEvent","colArgs","currentHeight","parentLi","expandChild","eicon","childItems","mapper_1","getChildFields","getNodeObject","ensureCheckNode","renderSubChild","getFields","nodeLevel","dataLevel","getChildMapper","isRoot","getChildGroup","objlen","dataId","cIcons","multiSelect","isActive","unselectNode","getSelectEvent","removeSelectAll","startNode","liList","currNode","addSelect","focusedNode","getFocusedNode","expandOnType","expandOn","expandHandler","expandCollapseAction","inpEle","oldText","checkNode","openNode","shiftKeySelect","navigateNode","navigateRootNode","createTextbox","navigateToFocus","isUp","focusNode","getScrollParent","parentPos","isVisibleInViewport","txtWrap","scrollHeight","isTowards","nextNode","getNextNode","getPrevNode","checkWrap","toBeOpened","focusNextNode","setFocus","isBackwards","rootNode","getRootNode","getEndNode","fNode","prevNode","endNode","preNode","hoveredNode","fromDS","pNode","pid","reRenderNodes","newClass","editingHandler","oldInpEle","updateOldText","getEditEvent","wireInputEvents","editData","editFields","inputFocusOut","txtEle","appendNewText","isInput","getChildNodeObject","childData","toBind","initializeDrag","destroyDrag","virtualEle","dragRoot","dragWrap","dragLi","isSameNode","cloneEle","DRAGITEM","nLen","cNode","getDragEvent","draggedNode","dragAction","removeVirtualEle","dropTarget","dropRoot","dropObj","over","dropAction","dropWrap","dropLi","isDescendant","virEle","renderVirtualEle","dragInstance","appendNode","dropAsSiblingNode","dropAsChildNode","dropUl","dragParentUl","dragParentLi","updateElement","updateAriaLevel","updateInstance","dropParentUl","expandParent","dropIcon","dragIcon","updateChildAriaLevel","sibEle","dragNode","dropData","draggedNodeData","droppedNode","droppedNodeData","addFullRow","toAdd","rowDiv","addMultiSelect","liEles_1","liEles_2","collapseByLevel","excludeHiddenNodes","getVisibleNodes","collapseAllNodes","expandByLevel","expandAllNodes","eIcons","vNodes","removeNode","updateSelectedNodes","doGivenAction","toExpand","addGivenNodes","isRemote","updateMapper","refNode","navigateUrl","doDisableAction","doEnableAction","proxy_1","touchEditObj","wireClickEvent","proxy_2","touchClickObj","wireExpandOnEvent","proxy_3","touchExpandObj","matched","setCheckedNodes","uncheckAll","checkAll","addNodes","beginEdit","collapseAll","disableNodes","enableNodes","ensureVisible","expandAll","getNode","moveNodes","sourceNodes","removeNodes","updateNode","CLOSE","OPEN","TRASITION","VISIBILITY","DISABLEANIMATION","CONTEXT","SIDEBARABSOLUTE","Sidebar","setTarget","enableDock","setDock","isOpen","setMediaQuery","setType","setCloseOnDocumentClick","closeOnDocumentClick","documentclickHandler","dockSize","z-index","classELement","destroyBackDrop","sibling","showBackdrop","closeArguments","changeArguments","setAnimation","openArguments","createBackDrop","getState","mediaQuery","enableGestureHandler","setEnableGestures","enableGestures","mainContentEle","sidebarEle","margin-left","margin-right","elementWidth","axisLabelFont","axisTitleFont","chartTitleFont","crosshairLabelFont","tooltipLabelFont","legendLabelFont","stripLineLabelFont","RangeNavigatorTheme","Font","Border","ChartArea","Margin","Indexes","CornerRadius","seriesIndex","EmptyPointSettings","TooltipSettings","DoubleRange","mStart","mEnd","Double","calculateNumericNiceInterval","actualDesiredIntervalsCount","intervalDivs","getActualRange","initializeDoubleRange","actualRange","doubleRange","POSITIVE_INFINITY","NEGATIVE_INFINITY","calculateRangeAndInterval","calculateRange","applyRangePadding","calculateVisibleLabels","series_1","paddingInterval","rangePadding","findMinMax","getRangePadding","findAdditional","findNormal","updateActualRange","calculateVisibleRange","zoomPosition","enableAutoIntervalOnZooming","triggerRangeRender","isCustom","getMaxLabelWidth","isStack100","legendRender","textRender","pointRender","seriesRender","axisRangeCalculated","axisMultiLabelRender","tooltipRender","chartMouseMove","chartMouseClick","chartMouseLeave","chartMouseDown","chartMouseUp","zoomComplete","dragComplete","annotationRender","ChartAnnotationSettings","LabelBorder","MultiLevelCategories","StripLineSettings","MultiLevelLabels","Row","nearSizes","farSizes","computeSize","findTickSize","crossInAxis","findLabelSize","lineStyle","MajorGridLines","MinorGridLines","AxisLine","MajorTickLines","MinorTickLines","CrosshairTooltip","Axis","axisBottomLine","crossAt","updatedRect","multiLevelLabelHeight","isChart","crossAxis","tickPosition","isInside","majorTickLines","innerPadding","titleSize","maxLabelSize","placeNextToAxisLine","findDifference","updateCrossValue","baseRange","pointX","previousEnd","isIntersect","labelIntersectAction","rotatedLabel","edgeLabelPlacement","findMultiRows","multiLevelLabelModule","multiLevelLabels","getMultilevelLabelsHeight","currentX","store","getModule","baseModule","originalText","Mean","verticalStandardMean","verticalSquareRoot","horizontalStandardMean","horizontalSquareRoot","verticalMean","horizontalMean","PolarArc","currentXPosition","StackValues","startValues","endValues","RectOption","CircleOption","PolygonOption","Thickness","PointData","lierIndex","AccPointData","ControlPoints","CartesianAxisLayoutPanel","chartModule","measureAxis","seriesClipRect","initialClipRect","leftSize","rightSize","topSize","bottomSize","measureRowAxis","measureColumnAxis","calculateAxisSize","refreshAxis","calculateRowSize","arrangeAxis","measureDefinition","computedHeight","calculateColumnSize","computedWidth","definition","axis_1","scrollBarModule","enableScrollbar","isZoomed","nearCount","farCount","len_2","computedTop","plotOffset","len_3","len_4","computedLeft","actualIndex","axisCollections","axis_2","verticalAxes","getActualRow","pushAxis","horizontalAxes","getActualColumn","crossesAt","isTransposed","crossesInAxis","updateCrossAt","primaryYAxis","dateFormatter","labels","axisCollection","actualLength","columnIndex","rowTop","remainingHeight","columnLeft","remainingWidth","renderAxes","outsideElement","axisElement","axisLineElement","findAxisPosition","drawAxisLine","majorGridLines","drawXAxisGridLine","drawXAxisLabels","drawXAxisBorder","drawXAxisTitle","drawYAxisGridLine","drawYAxisLabels","drawYAxisBorder","drawYAxisTitle","renderScrollbar","drawBottomLine","isScrollUI","currentScrollSvg","replaceChild","definitionName","optionsLine","plotX","plotY","stroke-dasharray","minorDirection","pointY","majorGrid","majorTick","minorGird","minorTick","tickSize","axisLineSize","ticksbwtLabel","isTickInside","isBorder","minorGridLines","minorTickLines","minorTicksPerInterval","drawAxisMinorLine","renderGridLine","renderTickLine","chartArea","isLabelInside","isOpposed","createZoomingLabel","endY","labelBorder","endX","createAxisBorderElement","renderYAxisMultiLevelLabels","labelIndex","logStart","coor","logInterval","logPosition","ticksX","ticksY","findLogNumeric","labelPadding","diffHeight","yLocation","intervalLength","islabelInside","anglePadding","findAxisLabel","axisRect","length_2","renderXAxisMultiLevelLabels","borderElement","findParentNode","zoomElement","ChartData","currentPoints","previousPoints","getData","drawType","isRectSeries","marker","mouseX","mouseY","getRectPoint","selectionMode","selectionModule","rectPoints","fromCenterX","fromCenterY","clickAngle","distanceFromCenter","arcAngle","regionData","regions","chartAreaType","checkRegionContainsPoint","regionRect","getClosest","xData","xData_1","getClosestX","DataLabelSettings","MarkerSettings","Points","symbolLocations","Trendline","setDataSource","trendLineModule","initDataSource","visibleSeriesCount","ErrorBarCapSettings","ChartSegment","ErrorBarSettings","SeriesBase","currentViewData","processJsonData","xName","Series","textMappingName","processInternalData","sizeMax","getSeriesType","dataPoint","pushCategoryData","pushData","setEmptyPoint","isArea","findSplinePoint","volume","pointColorMapping","findVisibility","emptyPointSettings","yData","getAverage","yValues","setXYMinMax","setHiloMinMax","isIndexed","refreshDataManager","dataModule","generateQuery","dataManagerSuccess","isRemoteData","refreshChart","refreshTechnicalIndicator","trendlines","refreshBound","drawPoints","delayedAnimation","refreshAxisLabel","findSeriesCollection","isStack","rowSeries","_d","_e","_f","_g","rectSeriesInChart","calculateStackedValue","isStacking100","columnItem","calculateStackingValues","stackingGroup","lastValue","lastPositive","lastNegative","frequencies","findFrequencies","seriesCollection_1","percent","stackedValues","seriesCollection_2","renderSeries","createSeriesElements","errorBarModule","dataLabelModule","appendSeriesElement","seriesElements","performAnimation","explodeValue","markerWidth","clipRectElement","symbolElement","seriesElement","clip-path","errorBarElement","dataLabelElements","shapeElement","animateSeries","doAnimation","doErrorBarAnimation","markerRender","doMarkerAnimation","doDataLabelAnimation","setPointColor","setBorderColor","Data","initDataManager","MarkerExplode","mouseMoveHandler","crosshair","markerMove","startMove","explodeSeries","chartAxisLayoutPanel","pointData","chartSeries","enableTooltip","removeHighlightedMarker","markerExplode","drawTrackBall","seriesMarker","symbolId","borderColor","Marker","renderMarker","isBoxPlot","markerClipRect","getRangeLowPoint","markerElements","incFactor","lowPoint","LegendSettings","BaseLegend","columnCount","pageButtonSize","pageXCollections","maxColumns","isTrimmed","legend","legendSettings","legendID","isChartControl","calculateLegendBounds","legendBounds","library","getLegendBounds","getLocation","setBounds","maxItemHeight","legendHeight","legendWidth","alignLegend","legendSize","renderLegend","firstLegend","findFirstLegendPosition","legendCollections","legendGroup","legendTranslateGroup","createLegendElements","legendSeriesGroup","totalPages","textPadding","shapePadding","previousLegend","legendOption","getRenderPoint","renderSymbol","toggleVisibility","isPaging","renderPagingElements","legendCollection","legendCollection_1","legendItemsGroup","clippath","symbolColor","markerShape","symbolOption","markerVisibility","legendShape","fontcolor","textOption","paginggroup","iconSize","clipPathHeight","pageTextElement","translatePage","pagingText","pageNumber","changePage","pageText","clearTooltip","LegendOptions","TechnicalIndicator","targetSeries","ExportUtils","resizeTo","screen","availWidth","availHeight","getHTMLContent","export","controls","controlValue","getControlsValue","isDownload","svgData","XMLSerializer","serializeToString","triggerDownload","image_1","ctx_1","imageString","msSaveOrOpenBlob","msToBlob","bubbles","cancelable","groupEle","CrosshairSettings","ZoomSettings","Chart","chartid","refreshDefinition","tooltipModule","createChartSvg","calculateAreaType","calculateVisibleSeries","initTechnicalIndicators","initTrendLines","calculateVisibleAxis","getLocalizedLabel","legendModule","getLegendOptions","isCalculateStacking","rectCount","renderElements","renderBorder","renderTitle","renderAreaBorder","renderSeriesElements","applyZoomkit","performSelection","setSecondaryElementPosition","renderAnnotation","yAxisElements","stripLineModule","renderStripLine","initializeModuleElements","dataLabelCollections","indicators","indicatorElements","hasTrendlines","trendLineElements","isTrendline","initializeIndicator","initializeTrendLine","appendElementsAfterSeries","indicator","createIndicatorElements","getTrendLineElements","enablePan","performedUI","applyZoomToolkit","annotationModule","renderAnnotations","selectedDataIndexes","invokeSelection","redrawSelection","initializeDataModule","techIndicator","titleHeight","exportChart","trendIndex","trendLine","sourceIndex","initSeriesCollection","yAxisName","polarSeriesModule","radarSeriesModule","isPanning","isAxisZoomed","series_2","initAxis","injectTo","isSeries","seriesName","palettes","addSeries","removeSeries","removeSvg","stopEvent","chartOnMouseDown","mouseMove","mouseEnd","chartOnMouseClick","chartRightClick","mouseLeave","chartResize","longPress","crosshairModule","pointerType","zooming","disableScroll","enableSelectionZooming","enablePinchZooming","msTouchAction","msContentZooming","msUserSelect","webkitUserSelect","isOrientation","setMouseXY","currentSize","previousSize","touchArg","chartOnMouseMove","chartOnMouseLeave","isChartDrag","pointClick","triggerPointEvent","pointMove","titleTooltip","axisTooltip","texts","categories","mouseDownX","previousMouseMoveX","mouseDownY","previousMouseMoveY","isDoubleTap","threshold","chartOnMouseUp","setLocaleConstants","defaultLocalConstants","setAnnotationValue","annotationIndex","processAnnotation","ZoomIn","ZoomOut","Pan","Reset","ResetZoom","enableAnnotation","errorBarVisible","dataLabelEnable","isLegend","currentModule","findIndicatorModules","findTrendLineModules","findAxisModule","enableMouseWheelZooming","datetimeEnabled","categoryEnabled","logarithmicEnabled","striplineEnabled","dateTimeCategoryEnabled","multiLevelEnabled","axisCollections_1","findStriplineVisibility","stripLines","macdEnable","bandEnable","isLine","isSpline","markerEnable","trendline","striplines","striplines_1","removeLength","pinchTarget","definitions","definitions_1","axisChange","refreshBounds","crosshairTooltip","seriesRefresh","isMultiSelect","NiceInterval","calculateDateTimeNiceInterval","totalDays","actualIntervalType","getSkeleton","DateTime","datetimeInterval","getYear","getHour","endMinute","endSecond","endYear","endMonth","endDay","alignRangeStart","skeletonType","sDate","intervalSize","sResult","Category","Logarithmic","logEnd","calculateLogNiceInterval","axisFormat","isCustomFormat","DateTimeCategory","axisSize","sameInterval","sameValue","StripLine","measureStripLine","stripline","actualStart","actualEnd","getFromTovalue","startFromAxis","findValue","getToValue","striplineGroup","axes_1","renderRectangle","textMid","ty","tx","getTextStart","invertAlignment","xy","LineBase","improveChartPerformance","tempPoints","xVisibleRange","yVisibleRange","seriesPoints","xTolerance","yTolerance","prevXValue","prevYValue","xVal","yVal","seriesPoints_1","currentPoint_1","getLineDirection","firstPoint","secondPoint","getPointLocation","appendLinePath","doProgressiveAnimation","storePointLocation","doLinearAnimation","xCenter","yCenter","LineSeries","prevPoint","isPolar","isDrop","getCoordinate","visiblePoints","visiblePoints_1","isClosed","ColumnBase","getSideBySideInfo","enableSideBySidePlacement","getSideBySidePositions","seriesSpacing","columnSpacing","pointSpacing","getRectangle","findRectPosition","vSeries","updateSymbolLocation","updateYRegion","updateXRegion","histogramValues","binWidth","rectElements","animateRect","isPlot","ColumnSeries","sideBySideInfo","pointColumn","MultiColoredSeries","getAreaPathDirection","startPath","getAreaEmptyDirection","isXSegment","getAxisValue","sortSegments","chartSegments","segmentAxis","access","applySegmentAxis","includeSegment","createClipRect","isX","isRequired","startPointLocation","endPointLocation","AreaSeries","currentXValue","isDropMode","BarSeries","pointBar","PolarRadarPanel","drawYAxisLine","vector","minorGirdLine","xLoc","yLoc","tickXSize","tickYSize","labelText","firstLabelX","lastLabelX","textAnchor","tickOptions","gridOptions","PolarSeries","columnDrawTypeRender","itemCurrentXPos","pointStartAngle","pointEndAngle","dStartX","dStartY","dEndX","dEndY","sumofYValues","rangeInterval","getSeriesPosition","doPolarRadarAnimation","animateElement","chartcenterX","chartcenterY","RadarSeries","StackingBarSeries","stackedValue","pointStack","CandleSeries","centerRegion","tickRegion","triggerPointRenderEvent","drawCandle","getCandleColor","enableSolidCandles","bullFillColor","bearFillColor","topRect","midRect","candleElement","StackingColumnSeries","StepLineSeries","pathOptions","lineLength","StepAreaSeries","StackingAreaSeries","polarAreaType","lineDirection","stackedvalue","previousSeries","getPreviousSeries","ScatterSeries","RangeColumnSeries","rangePoint","WaterfallSeries","originValue","prevEndValue","currentEndValue","prevRegion","intermediateOrigin","isSum","isIntermediateSum","totalSum","isSumIndex","currentRegion","prevLeft","currentLeft","prevBottom","currentBottom","intermediateSumIndexes","sumIndexes","summaryFillColor","negativeFillColor","intermediateSum","sumIndex","HiloSeries","HiloOpenCloseSeries","highLowRect","updateTickRegion","open_1","close_1","drawHiloOpenClosePath","RangeAreaSeries","closed","highPoint","closeRangeAreaPath","BubbleSeries","segmentRadius","percentChange","maxRadius","minRadius","maximumSize","bubblePoint","SplineBase","splinePoints","filterEmptyPoints","findSplineCoefficients","getPreviousIndex","getControlPoints","getNextIndex","coefficient1","coefficient2","coefficient3","dy1","dy2","interPoint","slopeLength","ySpline","ySplineDuplicate","dx","cardinalSplineTension","splineType","ySpline1","ySpline2","ySplineDuplicate1","ySplineDuplicate2","deltaX2","SplineSeries","pt1","pt2","bpt1","bpt2","HistogramSeries","showNormalDistribution","renderNormalDistribution","calculateBinInterval","mean","sumValue","yValues_1","sDValue","binInterval","updatedData","yCount","pointLocation","distributionLine","yValuesCount","del","SplineAreaSeries","controlPt1","controlPt2","startPoint1","TechnicalAnalysis","signalLine","setSeriesProperties","indicatorElement","getDataPoint","macdPositiveColor","macdNegativeColor","getRangePoint","setSeriesRange","SmaIndicator","smaPoints","validData","signalSeries","period","EmaIndicator","emaPoints","prevAverage","TmaIndicator","tmaPoints","signalSeries_1","validData_1","smaValues","AccumulationDistributionIndicator","sourceSeries","adPoints","calculateADPoints","AtrIndicator","calculateATRPoints","highLow","highClose","lowClose","trueRange","MomentumIndicator","upperLine","upperCollection","signalCollection","upperSeries","RsiIndicator","showZones","lowerLine","lowerCollection","overBought","overSold","prevClose","gain","loss","close_2","StochasticIndicator","periodLine","lowerSeries","periodCollection","calculatePeriod","kPeriod","smaCalculation","dPeriod","pointCollection","lowValues","highValues","closeValues","modifiedSource","mins","maxs","MIN_VALUE","BollingerBands","rangeArea","bandColor","enableBand","bandCollection","rangeAreaSeries","deviationSum","multiplier","standardDeviation","deviations","bollingerPoints","sma","lowerBand","upperBand","j_1","mb","lb","MacdIndicator","macdType","macdSeries","macdLine","histogramSeries","macdLineSeries","fastPeriod","slowPeriod","macdCollection","histogramCollection","shortEMA","calculateEMAValues","longEMA","macdValues","getMACDVales","getMACDPoints","signalEMA","getSignalPoints","getHistogramPoints","initialEMA","emaValues","emaPercent","emaAvg","macdPoints","dataMACDIndex","macdIndex","signalEma","dataSignalIndex","signalIndex","shortEma","longEma","dataHistogramIndex","histogramIndex","Trendlines","trendLineSeries","createTrendLineElements","trendLineElement","trendPoint","findSlopeIntercept","xAvg","yAvg","xyAvg","xxAvg","yyAvg","trendlineSeries","setLinearRange","setExponentialRange","setMovingAverageRange","setPolynomialRange","setPowerRange","setLogarithmicRange","splineSeriesModule","slopeIntercept","getExponentialPoints","xLogValue","yLogValue","xPointsLgr","getLogarithmicPoints","xPolyValues","yPolyValues","getPolynomialPoints","powerPoints","getPowerPoints","getLinearPoints","xAvgValues","getMovingAveragePoints","slopeInterceptLog","midPoint","x1Log","backwardForecast","y1Log","x2Log","y2Log","x3Log","forwardForecast","y3Log","slopeInterceptPower","polynomialOrder","polynomialSlopes","subIndex","numArray","newIndex","nIndex","nIndex2","nnIndex","nnIndex2","gaussJordanElimination","nullCount","slopeInterceptLinear","x1Linear","y1Linear","x2Linear","y2Linear","slopeInterceptExp","ptsExp","getPolynomialYValue","slopes","numArray1","numArray2","numArray3","num1","index4_1","num3","num4","iindex4","iandex4","iindex1","iindex2","Crosshair","mouseLeaveHandler","removeCrosshair","isIos7","disableTrackTooltip","horizontalCross","verticalCross","crossGroup","stopAnimation","valueX","valueY","axisTooltipGroup","renderCrosshairLine","renderAxisTooltip","axisGroup","textElem","getAxisText","labelValue","crosshairInterval","BaseTooltip","getTooltipElement","isTooltip","removeHighlight","highlightPoint","highlight","highlightPoints","clipLocation","extraPoints","templatePoint","accumulationTooltipModule","svgTooltip","SVGTooltip","findPalette","updatePreviousPoint","findColor","svgElement","firstText","removeText","toolTipInterval","removeTooltip","renderGroupedTooltip","renderSeriesTooltip","findHeader","parseTemplate","findShapes","findData","getSymbolLocation","findMarkerHeight","getTemplateText","findMouseValue","getBoxLocation","getWaterfallRegion","getRangeArea","formatPointValue","findSharedLocation","dataValue","getPrototypeOf","isXPoint","isYPoint","getIndicatorTooltipFormat","textX","Toolkit","selectionColor","fillColor","createPanButton","panElements","pan","createZoomButton","zoomElements","zoom","createZoomInButton","polygonDirection","zoomInElements","elementOpacity","zoomIn","createZoomOutButton","zoomOutElements","zoomOut","createResetButton","toolkitElements","touchMoveList","touchStartList","zoomInOutCalculation","applySelection","zoomFactor_1","zoomPosition_1","cumulative_1","browserName","wheelEvent","toolkit","zoomingRect","zoomAxes","zoomkitOpacity","isIOS","renderZooming","calculateZoomAxesRange","doPan","drawZoomingRectangle","translateX","translateY","enableDeferredZooming","setTransform","performZoomRedraw","doZoom","previousZF","previousZP","currentZF","currentZP","zoomRect","previousZoomFactor","previousZoomPosition","currentZoomFactor","currentZoomPosition","performMouseWheelZooming","cumulative","performPinchZooming","translateXValue","translateYValue","pinchRect","elementOffset","touchDown","touch0StartX","touch0StartY","touch0EndX","touch0EndY","touch1StartX","touch1StartY","touch1EndX","touch1EndY","calculatePinchZoomFactor","selectionMin","selectionMax","rangeMin","rangeMax","axisTrans","actualMin","actualDelta","transX","transY","isPinch","xAxisLoc","yAxisLoc","axisRange","showZoomingToolkit","outerElement","toolboxItems","shadowElement","zoomToolkitMove","zoomToolkitLeave","showToolkit","chartMouseWheel","mouseCancelHandler","BaseSelection","seriesStyles","seriesclass","styleId","selectionStyle","unselected","concatIndexes","userIndexes","localIndexes","checkVisibility","selectedIndexes","uniqueSeries","selectedIndexes_1","uniqueSeries_1","addSvgClass","elementClassName","removeSvgClass","getChildren","Selection","completeSelection","calculateSelectedElements","mousedown","initPrivateVariables","closeIconId","draggedRectGroup","draggedRect","isSeriesMode","selectDataIndex","generateStyle","indexes","indexes_1","getElementByIndex","getClusterElements","clusters","findElements","getSeriesElements","blurEffect","clusterSelection","selectedElements","removeMultiSelectEelments","getSelectionClass","removeStyles","addOrRemoveIndex","applyStyles","toEquals","chartId","checkSelectionElements","parentClassName","selectElement","checkSeriesOnly","oldMode","removeSelectedElements","legendSelection","seriesStyle","isBlurEffectNeeded","elements_3","seriesElements_1","calculateDragSelectedElements","dragRect","axisOffset","removeOffset","selectedPointValues","selectedSeriesValues","xAxisOffset_1","yAxisOffset_1","isCurrentPoint","createCloseButton","selectedDataValues","drawDraggingRect","cartesianLayout","dragGroup","removeDraggedElements","changeCursorStyle","resizingSelectionRect","tapped","findResizeMode","resizing","chartSvgObject","cursorStyle","resizeMode","resizeEdges","isResize","rectelement","seriesElements_2","draggedRectMoved","grabbedPoint","doDrawing","dragging","rectGrabbing","getDragRect","DataLabel","errorHeight","commonId","calculateErrorHeight","chartBackground","positiveHeight","negativeHeight","rgbValue","contrast","yAxisInversed","labelLength","fontBackground","isDataLabelShape","createDataLabelTemplate","calculateTextPosition","isShape","vAxis","hAxis","labelRegion","getLabelLocation","locationY","alignmentValue","calculateAlignment","calculateRectPosition","locationX","calculatePathPosition","calculatePolarRectPosition","columnRadius","labelLocation","textLength","extraSpace","calculateRectActualPosition","calculateTopAndOuterPosition","calculatePathActualPosition","labelRect","isOverLap","finalPosition","updateLabelLocation","positionIndex","intersectY","shapeElements","textNode","ErrorBar","renderErrorBar","capId","errorbar","errorBarCap","errorDirection","point_1","errorX","errorY","verticalError","horizontalError","capOption","capPath","findLocation","horizontalPositiveError","verticalPositiveError","horizontalNegativeError","verticalNegativeError","getErrorDirection","calculateFixedValue","calculatePercentageValue","calculateStandardDeviationValue","getMean","meanCalculation","calculateStandardErrorValue","calculateCustomValue","getHorizontalDirection","errorMode","capLength","capDirection","getVerticalDirection","getBothDirection","pathH","pathV","verStandardMean","horStandardMean","verSquareRoot","horSquareRoot","sumOfX","sumOfY","errorBarClipRect","errorBarElements","Legend","visibleSeriesCollection","visibleSeriesCollection_1","extraHeight","extraWidth","legendEventArgs","columnHeight","prevLegend","previousBound","availwidth","LegendClick","refreshSeries","legendItemsId_1","AnnotationBase","setAnnotationPixelValue","accumulationBound","setAnnotationPointValue","isLog","xAnnotation","setAccumulationPointValue","annotationElement","coordinateUnits","setElementStyle","accPoint","setAlignmentValue","ChartAnnotation","BoxAndWhiskerSeries","centerRegion_1","findBoxPlotValues","boxPlotMode","updateTipRegion","renderBoxAndWhisker","tipRegion","updateTipSize","midWidth","midHeight","topWidth","showMean","quartile","getExclusiveQuartileValue","getInclusiveQuartileValue","getQuartileValues","getMinMaxOutlier","percentile","integerRank","fractionRank","isEvenList","halfLength","lowerQuartileArray","upperQuartileArray","rangeIQR","MultiColoredAreaSeries","startRegion","rendered","generatePathOption","MultiColoredLineSeries","MultiLevelLabel","xAxisPrevHeight","xAxisMultiLabelHeight","yAxisPrevHeight","yAxisMultiLabelHeight","multiLevelLabelsHeight","prevHeight","axisValue","multiLevel","categoryLabel","maximumTextWidth","pathRect","isOutside","triggerMultiLabelRender","renderXAxisLabelBorder","multiElements","createBorderElement","padding1","padding2","value1","groupLabel","renderYAxisLabelBorder","clipId","axisId","borderIndex","ScrollElements","scrollGroup","backRectGroup","thumbGroup","renderCircle","arrows","thumbGrip","scrollbarThemeStyle","backRectEle","leftArrowEle","rightArrowEle","setArrowDirection","thumbRectX","thumbRectWidth","leftDirection","circleRadius","rightDirection","shadowGroup","leftCircleEle","rightCircleEle","sidePadding","gripCircle","gripWidth","ScrollBar","scrollElements","mouseMoveListener","scrollMouseMove","mouseUpListener","scrollMouseUp","animateDuration","getMouseXY","scrollMouseDown","scrollMouseWheel","isResizeLeft","isResizeRight","previousXY","previousWidth","previousRectX","isThumbDrag","moveLength","isWithIn","positionThumb","setZoomFactorPosition","mouseXY","thumbX","currentWidth","currentScrollWidth","setCursor","resizeThumb","getDefaults","removeScrollSvg","scrollbar","isHorizontalAxis","createScrollSvg","isLeftHover","isRightHover","isAxis","isCurrentAxis","AccumulationAnnotationSettings","AccumulationDataLabelSettings","AccPoints","labelVisible","AccumulationSeries","sumOfPoints","accumulation","resultData","seriesCounts","findSumOfPoints","sumOfClub","clubValue","groupTo","setPoints","isClub","pushPoints","lastGroupTo","clubPoint","groupMode","setAccEmptyPoint","seriesGroup","renderPoints","datalabelGroup","accumulationDataLabelModule","renderDataLabel","findMaxBounds","labelBound","pieSeriesModule","accumulationLegendModule","explodeDistance","pointId","renderPoint","getSeriesElement","findAreaRect","totalbound","AccumulationBase","pieCenter","pieRadius","pieLabelRadius","labelRadius","isCircular","processExplode","explodePoints","deExplodeAll","invokeExplode","explodeAll","explodeIndex","accumulationSelectionModule","deExplodeSlice","explode","midAngle","isExplode","explodeSlice","sliceId","setTranslate","setElementTransform","PieBase","initProperties","initAngles","connectorStyle","explodeOffset","findCenter","defaultLabelBound","accumulationRect","getSeriesBound","accumulationRectCenter","getRectFromAngle","nextQuandrant","lastQuadrant","getDoughnutPath","getPiePath","PieSeries","getPathOption","groupId","clipslice","AccumulationChart","accBaseModule","isIE11Pointer","accumulationMouseMove","accumulationMouseEnd","accumulationMouseStart","accumulationOnMouseClick","accumulationRightClick","accumulationMouseLeave","accumulationResize","createPieSvg","createSecondaryElement","doGrouppingProcess","processSelection","tooltipParent","getSmartLegendLocation","refreshPoints","findDatalabelVisibility","refreshElements","TriangularBase","actualChartArea","triangleSize","neckSize","neckWidth","neckHeight","initializeSizeRatio","gapRatio","coEff","spacing","yRatio","heightRatio","setLabelLocation","labelOffset","findPath","locations","FunnelSeries","getSegmentData","endTop","endBottom","endMin","bottomY","emptySpaceAtLeft","seriesTop","line3","line6","PyramidSeries","pyramidMode","calculateSurfaceSegments","sumOfValues","gapHeight","preSum","getSurfaceHeight","currY","coef","surface","solveQuadraticEquation","root1","root2","sd","AccumulationLegend","titleRect","totalRowCount","getMaxColumn","maxPageColumn","maxColumnWidth","columns_1","getAvailWidth","legendX","availablewidth","legendBound","getTitleRect","legendByIndex","legendCollections_1","legendItemsId","currentSeries","AccumulationDataLabel","getDataLabelPosition","getLabelDistance","getLabelRegion","marginValue","labelAngle","enableSmartLabels","getSmartLabel","circular","findPreviousPoint","isOverlapping","isConnectorLineOverlapping","setOuterSmartLabel","setPointVisibileFalse","textTrimming","textsize","getOverlappedAngle","setSmartLabelForSegments","textRegion","overlapHeight","getEdgeOfLabel","previousstart","previousend","isLineRectangleIntersect","line1","line2","isLinesIntersect","point11","point12","lies","getConnectorPath","getConnectorStartPoint","getPolyLinePath","controlPoints","getBezierPoint","p0","labelshape","getTemplateSize","correctLabelRegion","setTemplateStyle","getSaturatedColor","clientRect","labelColor","doTemplateAnimation","saturatedColor","getLabelBackground","AccumulationTooltip","getPieData","AccumulationSelection","indexes_2","checkEquals","pieId","checkPointVisibility","elementClass","parentClass","selectedDataIndexes_1","AccumulationAnnotation","pie","DataPoint","RangeSeries","renderChart","seriesLength","rangeSlider","processDataSource","viewData","processXAxis","calculateGroupingBounds","processYAxis","axisModule","doubleModule","chartGroup","createSeriesElement","drawSeriesBorder","labelHeight","chartElement","navigatorBorder","RangeNavigatorAxis","firstLevelLabels","secondLevelLabels","rangeNavigator","renderGridLines","chartAxis","disabledColor","gridLines","tick","findAxisLabels","lowerValues","renderAxisLabels","firstLevelElement","secondLevelElement","secondaryAxis","findLabelY","placeAxisLabels","getSecondaryLabelType","nextInterval","changedText","isFirstLevel","isSecondary","tickHeight","prevLabel","pointXGrid","maxLabels","prevX","intervalInTime","findSuitableFormat","secondaryLabelAlignment","findAlignment","prevWidth","every","nextLabel","RangeNavigatorSeries","ThumbSettings","StyleSettings","Periods","PeriodSelectorSettings","RangeTooltipSettings","RangeSlider","thumbVisible","thumpPadding","thumbColor","sliderGroup","unselectedRegionColor","leftUnSelectedElement","rightUnSelectedElement","leftSlider","rightSlider","createThump","thump","tickLength","lineColor","thumpY","sliderY","setSlider","isLeightWeight","selectedX","sliderWidth","leftX","rightX","leftRect","rightRect","currentStart","currentEnd","rangeTooltipModule","renderLeftTooltip","renderRightTooltip","getCurrentSlider","currentSlider","getRangeValue","previousMoveX","enableDeferredUpdate","hoverColor","periodSelectorModule","endbledTooltip","difference","secondLabel","rangeAxis","allowSnapping","setAllowSnapping","datePicker","isDeffered","animationDuration","RangeNavigator","lineSeriesModule","setSliderValue","isDateTime","createRangeSvg","renderChartBackground","periodSelectorSize","periodSelectorY","deductHeight","renderPeriodSelector","renderSlider","displayMode","renderSelectorElement","renderSelector","rangeOnMouseDown","rangeOnMouseClick","rangeResize","setMouseX","refreshRange","PeriodSelector","periodSelectorDiv","selectorElement","calendarId","selctorArgs","enableCustomFormat","toolbar","changedRange","setSelectedStyle","datePickerElement","onclick","updatedStart","updatedEnd","clickedEle","RangeTooltip","fadeOutTooltip","getTooltipContent","contentWidth","getContentSize","leftTooltip","rightTooltip","dateTimeModule","SmithchartFont","SmithchartMargin","SmithchartBorder","SmithchartRect","LabelCollection","LegendSeries","LabelRegion","HorizontalLabelCollection","RadialLabelCollections","LineSegment","PointRegion","ClosestPoint","MarkerOptions","SmithchartLabelPosition","Direction","counterclockwise","clockwise","DataLabelTextOptions","LabelOption","GridArcPoints","smithchartTitleFont","smithchartSubtitleFont","dataLabelFont","LegendTitle","LegendLocation","LegendItemStyleBorder","LegendItemStyle","LegendBorder","SmithchartLegendSettings","SmithchartMajorGridLines","SmithchartMinorGridLines","SmithchartAxisLine","SmithchartAxis","Subtitle","Title","SeriesTooltipBorder","SeriesTooltip","SeriesMarkerBorder","SeriesMarkerDataLabelBorder","SeriesMarkerDataLabelConnectorLine","SeriesMarkerDataLabel","SeriesMarker","SmithchartSeries","calculateAreaBounds","rightSpace","spaceValue","getLegendSpace","elementSpacing","subtitleHeight","modelsubTitleHeight","modelTitleHeight","legendBorder","leftLegendWidth","rightLegendWidth","topLegendHeight","bottomLegendHeight","ltheight","subtitle","AxisRender","radialLabels","radialLabelCollections","horizontalLabelCollections","labelCollections","renderArea","calculateChartArea","calculateCircleMargin","calculateXAxisRange","calculateRAxisRange","measureHorizontalAxis","measureRadialAxis","horizontalAxis","updateHAxis","radialAxis","updateRAxis","drawHAxisLabels","drawRAxisLabels","updateHMajorGridLines","updateHMinorGridLines","updateHAxisLine","updateRMajorGridLines","updateRMinorGridLines","updateRAxisLine","measureHMajorGridLines","measureHMinorGridLines","measureRMajorGridLines","measureRMinorGridLines","chartAreaWidth","chartAreaHeight","maxLabelWidth","maximumLabelLength","labelMargin","actualRadius","circleCoefficient","areaRadius","circleLeftX","circleTopY","circleCenterX","circleCenterY","calculateAxisLabels","previousR","isOverlap1","isOverlap2","staticlabels","spacingBetweenGridLines","coeff","horizontalAxisLabels","circleStartX","renderType","arcCy","radialPoint1","radialPoint2","arcPoints","majorHGridArcPoints","circlePoint","calculateHMajorArcStartEndPoints","intersectingCirclePoints","rotationAngle","sweepDirection","isLargeArc","epsilon","radialPoint","innerInterSectPoint","outerInterSectPoint","outterInterSectAngle","majorRGridArcPoints","calculateMajorArcStartEndPoints","circleXYRadianValue","outterX","outterY","calValue1","calValue2","arcHPoints","calculateMinorArcStartEndPoints","marcHPoints","midRadius","radiusSquare","radiusSquare2","gx","ix1","ix2","gy","iy1","iy2","calculateGridLinesPath","haxismgoptions","raxismgoptions","circleAxis","curLabelBounds","curWidth","curX","preLabelBounds","preWidth","preX","calculateRegion","axisLabelRenderEventArgs","textPosition","curY","curHeight","preY","preHeight","interSectPoint","rAxis","circlePointPosition","setLabelsOutsidePosition","setLabelsInsidePosition","textPositionX","textPositionY","minorHGridArcPoints","haxismioptions","minorGridArcPoints","raxismioptions","pathSegment","sb","arcCx","nextAngle","betweenAngle","arcStartX","arcStartY","arcStartPoint","centerValue","minorGridLineArcIntersectCircle","calValue","px","py","mx","my","seriesindex","pointsRegion","gmEle","seriesColors","circleOptions","labelOptions","allPoints","drawDataLabel","reactance","xPos","yPos","textY","connectorFlag","labelOption","drawDatalabelSymbol","calculateSmartLabels","compareDataLabels","resetValues","dataLabel1","dataLabel2","drawConnectorLines","connectorDirection","connectorLineValues","connectorLine","labelTemplateElement","SeriesRender","lineSegments","resistance","axisRender","resistantCx","reactanceCy","chartAreaRadius","chartAreaCx","chartAreaCy","resistantCy","reactanceCx","resistantR","reactanceR","drawSeries","gdlcEle","gdEle","rectOptions","dataEle","textRenderEventArgs","element_2","animateDataLabelTemplate","gsEle","seriesEventArgs","gspEle","reveffect","smithchartPrint","svgElements","exportType","canvas","Smithchart","titleText","maxTitleWidth","titleWidthEnable","enableTrim","titleEventArgs","titleLocation","renderSubtitle","subTitle","subTitleSize","subTitleText","maxSubTitleWidth","subtitleEventArgs","borderRect","unWireEVents","wireEVents","smithchartLegendModule","seriesrender","secondaryElement","svgClientRect","smithchartOnClick","smithchartOnResize","tooltipRenderModule","smithchartMouseMove","tooltipElement_1","fadeoutTo","circleElement","legendText","legendSeries","TooltipRender","closestPoint","closestPointXY","pointindex","chartPoint","closePoint","SmithchartLegend","_drawLegend","legendActualBounds","allowItems","legendSizeHeight","legendSizeWidth","itemPadding","legendItemWidth","legendItemHeight","svgObjectWidth","maxRowWidth","totalRowHeight","curRowWidth","curRowHeight","itemsCountRow","legendsize","_getLegendSize","itemStyle","symbolHeight","legendPosition","titleFont","smithchartTitleHeight","smithchartSubtitleHeight","svgObjectHeight","legendTitleHeight","borderSize","svgWidth","svgHeight","gLegendEle","legendItemGroup","currentY","drawLegendTitle","drawLegendItem","drawLegendBorder","titleWidth","legendBoundsWidth","drawLegendShape","SparklineBorder","SparklineFont","TrackLineSettings","SparklineTooltipSettings","ContainerArea","LineSettings","RangeBandSettings","AxisSettings","Padding","SparklineMarkerSettings","LabelOffset","SparklineDataLabelSettings","tl","tr","bl","br","SparklineRenderer","sparklineData","axisCalculation","processCategory","processDateTime","spark","drawAxis","rangeBandSettings","axisSettings","startRange","endRange","rangeBand","renderLabel","stValue","edValue","stHeight","unitY","edHeight","pathOption","renderLine","renderPie","stRad","edRad","highPointColor","lowPointColor","pointsYvalues","negativePointIndexes","stDeg","edDeg","eX","eY","pathArc","getPieSpecialPoint","pointArgs","triggerPointRender","diffRadian","negativePointColor","startPointColor","startPointIndex","endPointColor","endPointIndex","highPointIndex","lowPointIndex","axisHeight","renderColumn","lowPos","highPos","pointsYPos","markerPosition","paletteLength","getSpecialPoint","renderWinLoss","tiePointColor","markerSettings","markerArgs","dataLabelSettings","textId","rectId","formatter","labelArgs","getLabelVisible","findRanges","getInterval","maxPointsLength","sumofValues","isNumericArray","x_1","lineSettings","axisColor","axisWidth","unitX","colWidth","z1","Sparkline","sparklineRenderer","createSVG","renderSparkline","createDiv","containerArea","sparklineTooltipModule","removeTooltipElements","tooltipSettings","trackLineSettings","sparklineMove","sparklineMouseLeave","sparklineMouseEnd","sparklineResize","sparklineClick","setSparklineMouseXY","isPointRegion","startId","index_1","refreshSparkline","SparklineTooltip","processTooltip","removeTracker","trackerPositions","renderTrackerLine","tracker","pathEle","toDateString","tooltipEvent","index.Chart","index.LineSeries","index.ScatterSeries","index.ColumnSeries","index.SplineSeries","index.SplineAreaSeries","index.StripLine","index.AreaSeries","index.ScrollBar","index.StepLineSeries","index.StepAreaSeries","index.StackingColumnSeries","index.StackingAreaSeries","index.BarSeries","index.StackingBarSeries","index.RangeColumnSeries","index.BubbleSeries","index.Tooltip","index.Crosshair","index.Category","index.DateTime","index.Logarithmic","index.Legend","index.Zoom","index.DataLabel","index.Selection","index.ChartAnnotation","index.HiloSeries","index.HiloOpenCloseSeries","index.WaterfallSeries","index.RangeAreaSeries","index.CandleSeries","index.PolarSeries","index.RadarSeries","index.SmaIndicator","index.TmaIndicator","index.EmaIndicator","index.AccumulationDistributionIndicator","index.MacdIndicator","index.AtrIndicator","index.RsiIndicator","index.MomentumIndicator","index.StochasticIndicator","index.BollingerBands","index.BoxAndWhiskerSeries","index.HistogramSeries","index.ErrorBar","index.Trendlines","index.DateTimeCategory","index.MultiColoredLineSeries","index.MultiColoredAreaSeries","index.MultiLevelLabel","index.AccumulationChart","index.PieSeries","index.FunnelSeries","index.PyramidSeries","index.AccumulationTooltip","index.AccumulationLegend","index.AccumulationSelection","index.AccumulationDataLabel","index.AccumulationAnnotation","index.RangeNavigator","index.RangeTooltip","index.PeriodSelector","index.Sparkline","index.SparklineTooltip","index.Smithchart","index.SmithchartLegend","index.TooltipRender","isDescending","sortData","tickLineColor","pointerColor","Line","Range","Tick","Cap","NeedleTail","Annotation","Pointer","Annotations","autoAngle","updateLocation","currentRadius","GaugeTooltip","borderStyle","ejTooltip","beforeRender","onBeforeRender","tooltipCustomization","currentPointer","currentAxis","appendTargetElement","tooltipFormat","pointerSize","borderRightColor","borderLeftColor","borderBottomColor","borderRightWidth","borderTopColor","borderTopWidth","transitionProperty","transitionDuration","AxisRenderer","drawAxisOuterLine","setRangeColor","drawAxisLabels","nearSize","farSize","hiddenLabel","findAnchor","useRangeColor","drawMinorTickLines","minorTickElements","minorLineStyle","minorTicks","minorInterval","isRangeColor","majorValues","calculateTicks","drawMajorTickLines","majorTickElements","majorLineStyle","majorTicks","axisLineWidth","drawAxisRange","rangeElement","rangeIndex","calculateRangeRadius","rangeColors","PointerRenderer","drawPointers","calculatePointerRadius","setPointerValue","doPointerAnimation","drawNeedlePointer","pointerRadius","rectDirection","pointerWidth","needleTail","cap","drawMarkerPointer","drawRangeBarPointer","animatePointer","performRangeBarAnimation","performNeedleAnimation","sweepAngle","pointAngle","minAngle","AxisLayoutPanel","axisRenderer","pointerRenderer","measureAxisSize","calculateAxesRadius","totalRadius","rangeMaximumRadius","calculateNumericInterval","calculateAxisValues","isMajorTickOutside","isMinorTickOutside","isLabelOutside","majorTickOffset","minorTickOffset","axesElements","annotationsModule","CircularGauge","themeEffect","setThemeColors","labelcolor","others","gaugeOnMouseDown","gaugeRightClick","gaugeResize","setGaugeStyle","getMouseArgs","dragArgs","activePointer","enablePointerDrag","activeAxis","pointerDrag","gaugeAxisLayoutPanel","calculateSvgSize","isElementExist","annotationEnable","refreshWithoutAnimation","index.CircularGauge","index.GaugeTooltip","index.Annotations","adjustPoint","isStart","rect1","rect2","unitePoint","intersects","renderGradient","grd","stops","radial","renderShadow","rotateContext","parseDashArray","setFontStyle","dashes","splittedDashes_1","segs","quadraticCurveTo","xAxisRotation","cp","currp","cpp","centp","ad","ra","sx","sy","labelAlign","startPointX","startPointY","endPointX","endPointY","alignOptions","srcWidth","srcHeight","destinationW","destinationH","resultWidth","xalign","yalign","getSliceOffset","sWidth","sHeight","dWidth","dHeight","canvas1","srcRatio","destRatio","getMeetOffset","labelX","labelY","pointx","pointy","parentSvg","tX","tY","svgContainer","onlyRect","ariaLabel","setSvgStyle","updateSelectionRegion","gElement","createGElement","enableSelector","classval","setSvgFontStyle","svgLabelAlign","text-decoration","imgAlign","aspectRatio","drawHTMLContent","drawNativeContent","setNativTransform","contentSize","contentHeight","templatePosition","clipWidth","clipHeight","offset_1","stopElement","lineargradient","radialgradient","wrapBound","SnapConstraints","AnnotationConstraints","Transform","RenderMode","KeyModifiers","Keys","DiagramEvent","isDirt","Self","Parent","isSvgRender","staticSize","isRectElement","unitMode","float","floatingBounds","setOffsetWithRespectToBounds","getAbsolutePosition","validateDesiredSize","arrange","updateBounds","absolutePath","pointTimer","translatedPts","translatePoints","imageSource","stretch","measureImage","textNodes","textWrapBounds","getGradientType","LinearGradient","RadialGradient","Stop","Gradient","ShapeStyle","desiredBounds","measureChildren","prevRotateAngle","childBounds","desired","force","GetChildrenBounds","offsetPt","newPoint","stretchChildren","applyPadding","findChildOffsetFromCenter","childSize","nativeSVG","measureNativeContent","getAvailableSize","measureNativeSvg","Canvas","childX","childY","alignChildBasedOnParent","alignChildBasedOnaPoint","parentSize","Ellipse","Hexagon","Parallelogram","Triangle","Plus","Star","Pentagon","Heptagon","Octagon","Trapezoid","Decagon","RightTriangle","Cylinder","Diamond","Port","Connect","Hyperlink","InheritReadOnly","ShapeAnnotation","PathAnnotation","Circle","OpenArrow","Fletch","OpenFetch","IndentedArrow","OutdentedArrow","DoubleArrow","Arrow","Process","Decision","Document","PreDefinedProcess","Terminator","PaperTap","DirectData","SequentialData","Sort","MultiDocument","Collate","SummingJunction","Or","InternalStorage","Extract","ManualOperation","Merge","OffPageReference","SequentialAccessStorage","Annotation2","Card","Delay","Preparation","Display","ManualInput","LoopLimit","StoredData","IconShape","DiagramTooltip","NodeBase","getConnectorType","BpmnFlow","ConnectorShape","getSegmentType","Decorator","Vector","ConnectorSegment","bridges","bpmnElement","getSegmentElement","getConnectorPoints","flow","getBpmnSequenceFlow","getBpmnAssociationFlow","getBpmnMessageFlow","updateShapePosition","anglePoints","getDecoratorElement","wrapperContent","getAnnotationElement","pathseqData","pathseq","segmentMessage","sourcePt","targetPt","beginningpoint","transferpoint","startpoint1","endpoint1","textele","updateAnnotation","pivotPoint","horizor","verzor","displacement","newPoints","clipDecorator","isSource","segmentPath","getSegmentPath","connectorSegment","segmentElement","adjacentPoint","decEle","bridgePath","bridge","segmentPointIndex","getPath","getPt","st","j_2","targetID","targetPortID","j_3","connWidth","connHeight","Default","UserHandle","All","getShapeType","BasicShape","FlowShape","Path","BpmnShape","Native","Html","Shape","BpmnGateway","BpmnDataObject","BpmnTask","BpmnEvent","BpmnSubEvent","BpmnTransactionSubProcess","BpmnSubProcess","BpmnActivity","BpmnAnnotation","processId","outEdges","inEdges","basicshape","basicshapedata","flowshape","bpmnModule","initBPMNContent","subProcess","activity","processes","children_1","collapsed","updateElementVisibility","initContainer","initPorts","accessibilityContent","initPortWrapper","contentAccessibility","getIconOffet","initIcons","expandIcon","collapseIcon","initIconSymbol","initAnnotations","initAnnotationWrapper","portContent","pathdata","annotationcontent","initIconContainer","iconContent","iconContentBounds","updateRulerGeometry","renderRulerSpace","cssFloat","getRulerSVG","unitLength","unitOffset","updateSegments","run","trans","rulerSegment","getNewSegment","updateSegment","segWidth","updateSegmentWidth","defStartValue","updateTickLabel","isRightOrBottom","tickAlignment","createNewTicks","createTickLabel","tickInterval","getLinePoint","linePoint","multiples","createMarkerLine","rulerSvg","drawRulerMarker","rulerSvgElements","markerColor","rulerSpace","getObjectType","DiagramRenderer","svgRender","isSvgMode","setLayers","iconSvgLayer","adornerSvgLayer","nativeSvgLayer","diagramSvgLayer","getParentSvg","getParentElement","defaultParent","layerGElement","getGroupElement","nativeSvg","renderElement","htmlLayer","createParent","renderImageElement","renderPathElement","renderNativeElement","renderHTMLElement","renderRect","drawSelectionRectangle","adornerLayer","renderHighlighter","renderResizeHandle","canMask","enableNode","renderPivotLine","renderRotateThumb","nodeWidth","nodeHeight","renderCircularHandle","renderEndPointHandle","connectedSource","connectedTarget","isSegmentEditing","ConnectorSource","ConnectorTarget","renderOrthogonalThumbs","segment_1","bezierPoint","renderBezierLine","renderOrthogonalThumb","getBaseAttributes","connected","renderUserHandler","pathSize","pathColor","renderSvgGridlines","gridSvg","ShowHorizontalLines","ShowVerticalLines","hWidth","hHeight","hSegmentwidth","vSegmentwidth","isRulerGrid","dynamicGrid","horizontalGridlines","scaledIntervals","verticalGridlines","lineIntervals","scaleSnapInterval","patternUnits","horizontalSvgGridlines","verticalSvgGridlines","hLine","intervals","lineDashArray","updateLineIntervals","vLine","updateGrid","svgGrid","newInterval","snapIntervals","gridlines","nativeLayer","sourceWidth","sourceHeight","widthRatio","ratio","svgParent","hasNativeParent","svgNativeParent","svgParent_1","parentG","drawRect","renderSvgBackGroundImage","diagramElement","bgimageLayer","getBackgroundImageLayer","transformLayers","svgMode","getDiagramLayer","getGridLayer","getPortsLayer","getExpandCollapseLayer","diagramElementsLayer","Background","PageSettings","ScrollSettings","ServiceLocator","services","register","Gridlines","SnapSettings","DiagramRuler","RulerSettings","DataSource","Layout","PortDraw","ConnectorSourceEnd","ConnectorTargetEnd","BezierSourceThumb","BezierTargetThumb","OrthoThumb","SegmentEnd","PortDrag","ToolBase","protectChange","commandHandler","inAction","isProtectChange","blocked","isTooltipVisible","childTable","undoElement","undoParentElement","startAction","mouseDown","prevPosition","startTransaction","mouseUp","endTransaction","endAction","SelectTool","doRubberBandSelection","arrayNodes","getSelectedObject","clickCount","unSelect","selectObjects","clearSelection","ConnectTool","ConnectorDrawingTool","segmentpoint1","segmentpoint2","selectedSegment","updateSelector","removeSnap","entry","redoObject","undoObject","addHistoryEntry","oldValues","targetPortName","targetNodeNode","findTarget","sourcePointChange","targetPointChange","removeTerminalSegment","snapConnectorEnd","targetPortId","targetNodeId","dragConnectorEnds","canDisconnect","disConnect","connect","canEnableDefaultTooltip","MoveTool","objType","objectType","selectedObject","getSubProcess","initialOffset","historyAdded","allowDrop","startGroupAction","entry_1","snapPoint","removeHighlighter","isDroppable","endGroupAction","dragOverElement","oldValues_1","snappedPoint","removeChildFromBPmn","arg_1","dragSelectedObjects","drawHighlighter","portDrag","RotateTool","getAllDescendants","cloneChild","rotateChange","arg_2","snapAngle","rotateSelectedItems","ResizeTool","initialBounds","sizeChange","entry_2","getChanges","getPivot","horizontalsnap","snapped","verticalsnap","difx","dify","snapEnabled","snappingModule","canSnap","snapLine","getLayer","deltaWidth","deltaHeight","snapLeft","snapRight","snapTop","snapBottom","scaleObjects","AspectRatio","scaleSelectedItems","NodeDrawingTool","checkBoundaryConstraints","drawObject","updateNodeDimension","addObjectToDiagram","TextDrawingTool","drawingNode","addText","ZoomPanTool","moveTouches","startTouch0","startTouch1","moveTouch0","moveTouch1","focusPoint","updateTouch","difY","touch1","touch2","startTouch","moveTouch","ExpandTool","LabelTool","PolygonDrawingTool","dblClickArgs","ConnectorEditing","segmentIndex","dragOrthogonalSegment","dragControlPoint","addOrRemoveSegment","updateLastSegment","removePrevSegment","removeNextSegment","updateEndPoint","updateSeg","findIndex","newseg","intersectingSegs","addSegments","insertFirstSegment","addTerminalSegment","updateAdjacentSegments","segmentDirection","segValues","insertseg","nextseg","isNextUpdate","updatePreviousSegment","nextSegment","updateNextSegment","sec","lastseg","updatePortSegment","isSourceNode","updateFirstSegment","changeSegmentDirection","insertfirst","removeCurrentPrev","nextNext","line1Start","line1End","line2Start","line2End","firstSegPoint","lastSegPoint","DiagramEventHandler","currentAction","isBlocked","isMouseDown","doingAutoScroll","objectFinder","ObjectFinder","TextEdit","boundingRect","diagramCanvas","windowResize","updateViewPortSize","setViewPortSize","getSizeValue","canHideResizers","updateCursor","isForeignObject","isTextBox","foreignobject","isMetaKey","isDeleteKey","checkEditBoxAsTarget","updatePortVisibility","hoverElement","getMouseEventArgs","endEdit","findObjectsUnderMouse","findObjectUnderMouse","sourceElement","findElementUnderMouse","findActionToBeDone","getTool","initialEventArgs","mouseMoveExtend","canAutoScroll","checkAutoScroll","isNode","hoverNode","drawRulerMarkers","elementLeave","elementEnter","autoScrollPosition","startAutoScroll","timeOutValue","diagram_1","doAutoScroll","isMultipleSelect","markers","removeRulerMarkers","keycode","gesture","keyModifiers","altKeyPressed","shiftKeyPressed","ctrlKeyPressed","keyDownEventArgs","KeyboardEvent","parameter","movingPosition","autoScrollBorder","autoScroll","elementOver","isPrivateTooltip","canEnableToolTip","keyModifier","Alt","Control","Shift","scrolled","updateScrollOffset","doubleClick","getObjectLayer","lock","startTextEdit","inputChange","fontsize","textWrapper","textBounds","transforms","editTextBox","editTextBoxDiv","activeLabel","isAddTextNode","findTargetObjectUnderMouse","resetTool","findElementUnderSelectedItem","findTargetUnderMouse","actions","actualTarget","layerTarger","layerObjTable","objArray_1","spatialSearch","findObjects","findInteractableObject","actualTarget_1","portElement","findTargetElement","Layer","objectZIndex","zIndexTable","CommandHandler","clipboardData","connectorsTable","processTable","parentTable","layoutAnimateModule","backup","pointerEvents","toolName","ToolTip","connectionChange","dragOverArg","dragOver","connectorEnd","connectorPropertyChange","updateDiagramObject","nodeEndId","portEndId","connectionEventChange","nodeId","portId","argsTarget","transaction","failure","portEnd","oldNodeId","oldPortId","cut","pasteIndex","undoRedoModule","historyList","clipObject","copyObjects","refreshDiagramLayer","layerZIndexTable","activeLayer","objectName","removeLayer","layerId","layerObject","moveObjects","targetLayer","setActiveLayer","targerNodes","objects_1","cloneLayer","cloneObject_1","newlayer","paste","copyProcesses","tempNode","selectedItems_1","sortByZIndex","processes_1","protectedChange","Group","unGroup","UndoRedo","deleteChild","addChild","copiedItems","getNewObject","groupAction","objectTable","keyTable","copiedItems_1","clonedObj","cloneConnector","newNode","edges","edges_1","newConnector","edges_2","newobjs","translateObject","cloneGroup","cloneSubProcesses","innerChild","addProcess","connector_1","clonedNode","connectorTable","newChildren","childObj","initObject","removeFromAQuad","removeObjectsFromLayer","multipleSelection","cause","selectionChange","canDoMultipleSelection","canMultiSelect","canDoSingleSelection","findParent","selectGroup","selectProcesses","selectBpmnSubProcesses","hasProcesses","preventUpdate","hasLayer","selectorModel","objArray","selectormodel","getChildElements","moveSvgNode","diagramDiv","backNode","sendLayerBackward","currentLayerObject","targetObject","currentLayerObject_1","bringLayerForward","currentLayerObject_2","sendToBack","objectId","layerNum","refreshCanvasLayers","bringToFront","tabelLength","diagramLayer","diagramRenderer","nodeArray","sortID","sendForward","intersectArray","overlapObject","currentObject","sendBackward","temp_3","initSelectorWrapper","clearSelectionRectangle","selArray","rubberArray","getNodesConnectors","rubberBandSelectionMode","checkBezierThumb","dragSourceEnd","dragTargetEnd","triggerAction","clearSelectorLayer","nodePropertyChange","hasEnds","isDragSource","changeSegmentLength","translateBezierPoints","secPoint","nextDirection","changeSourceEndToPort","changeSourceEndToNode","secondSegment","segValues1","isTerminal","changeTerminal","sourcePoint2","boundaryConstraints","segmentNumber","rotateObjects","includeParent","objects_2","getChildrenBound","updateSubProcessess","rotatePoints","SnapToLines","scaleObject","updateGroupOffset","refWrapper","oldleft","oldtop","changedvalues","nodeBounds","selectorBounds","top_2","propChange","fixedNode","updateIcon","organizationalChartModule","isAnimation","newTarget","oldTarget","nodeCollection","removeChildFromBPMN","targetNodes","connectHighlighter","tgt","tgtWrap","towardsLeft","towardsTop","SnapToObject","removeGuidelines","dropBPMNchild","undoObj","redoObj","storeObject","distribute","top_3","btt","undoSelectorObj","redoSelectorObj","sameSize","selectorObject","panx","PanX","canPanX","pany","PanY","canPanY","clearHighlighter","DiagramScroller","vPortWidth","vPortHeight","currentZoomFActor","hScrollSize","vScrollSize","updateScrollOffsets","getPageBounds","setScrollOffset","viewWidth","viewHeight","actualRight","currentRight","actualBottom","scrollerWidth","diagramWidth","diagramHeight","negwidth","negheight","multiplePage","getPageBreak","widthCount","heightCount","deltaX","deltaY","canZoom","canPan","minZoom","maxZoom","targetMatrix","applyScrollLimit","fitToPage","canZoomIn","customBounds","bringIntoView","hoffset","voffset","bringToCenter","actualbounds","scrollLimit","scrollableArea","allowedRight","allowed","allowedBottom","Quad","spatialSearching","findQuads","currentViewPort","quads","third","fourth","selectQuad","quadSet","getQuad","halfWidth","halfHeight","childRight","childBottom","newQuad","childTop","childLeft","isContained","addIntoAQuad","quadAddition","setCurrentNode","quad","isAdded","parentQuad","newParent","isempty","newWidth","newHeight","SpatialSearch","quadSize","pageLeft","pageRight","pageTop","pageBottom","quadTable","updateQuad","nodBounds","isWithinPageBounds","leftElement","rightElement","findLeft","findTop","findBottom","findRight","quads_1","originX","originY","KeyGesture","Command","CommandManager","ContextMenuSettings","groupTable","isGroup","renderTimer","clearCollection","isConnector","clearObjects","objectArray","refreshLayout","refereshColelction","eventHandler","updateView","excludeFromLayout","updateBridging","intOffPageBackground","validatePageSize","updatePage","updateSnapSettings","initCommands","initObjects","updateRulerSettings","updateLayer","updateScrollSettings","propertyChange","canLogChange","modelChanged","resetDiagramActions","renderRulers","initializePrivateVariables","initializeServices","initDiagram","initViews","defaultLocale","Copy","Cut","Paste","Undo","Redo","SelectAll","Grouping","UnGroup","Order","BringToFront","MoveForward","SendToBack","SendBackward","layerZIndex","initHistory","initLayers","initializeDiagramLayers","renderPageBreaks","Render","droppable","tooltipelement","initDroppables","getObjectsOfLayer","updateViewPort","cutCommand","removeProcess","pasteCommand","copyCommand","moveForward","getActiveLayer","nudgeCommand","nudge","updateAnnotationDrag","getCustomTool","getCustomCursor","historyChangeTrigger","changeType","historyChange","undo","redo","PublicMethod","focusedPoint","zoomTo","canAdd","collectionChange","updateEdges","getTextAnnotationConn","initConnectors","updateDocks","updateSvgNodes","updateProcesses","processes_2","addTextAnnotation","addAnnotation","spliceConnectorEdges","removeDependentConnector","objIndex","removeElements","currentObj","removeElement_1","removeCommand","Delete","canDelete","checkAndRemoveAnnotations","deleteGroup","removeBpmnProcesses","updateNodeEdges","startEditCommad","bpmnAnnotation","getTextAnnotationWrapper","addLabels","ReadOnly","enableReadOnly","textEditing","textarea","focusOutEdit","viewPort","updateLayout","mindMapChartModule","radialTreeModule","symmetricalLayoutModule","maxIteration","springLength","springFactor","complexHierarchicalTreeModule","updateDefaultLayoutIcons","connection","saveDiagram","loadDiagram","exportDiagram","printandExportModule","addPorts","removeLabels","removePorts","real","overlap","renderOverlapElement","renderBackgroundLayer","commonStyle","bgLayer","backgroundImage","renderGridLayer","svgGridSvg","renderDiagramLayer","diagramLayerDiv","diagramSvg","transformationLayer","scrollerSize","outer","widthNoScroll","widthWithScroll","getScrollerWidth","renderHTMLLayer","renderPortsExpandLayer","renderNativeLayer","renderAdornerLayer","svgAdornerSvg","svgSelector","svgPortsSvg","svgPortsLayer","svgExpandLayer","htmlLayerDiv","nativeLayerSvg","isLoad","initData","initLayerObjects","hasLayers","tempTabel","bpmnTable","addToLayer","initNodes","_h","_j","textAnnotationConnectors","_k","_l","_m","groups_1","_o","connectors_1","layerObject_1","hPan","vPan","VerticalOffset","HorizontalOffset","ViewportHeight","ViewportWidth","CurrentZoom","scrollChange","dataBindingModule","initSource","independentObj","currentLayer","defaults","initNode","getEndNodeWrapper","updateDefaultLayoutIcon","portContainer","newCommands","V","nudgeUp","Up","nudgeRight","nudgeDown","Down","nudgeLeft","startEdit","F2","endEditCommand","Escape","focusToNextItem","focusToPreviousItem","selectFocusedItem","Enter","initCommandManager","overrideCommands","newCommand","updateIconVisibility","updateDiagramContainerVisibility","refreshDiagram","refreshCanvasDiagramLayer","objectArray_1","refreshSvgDiagramLayer","renderBasicElement","clearCanvas","renderDiagramElements","inverse","bridgingModule","clearRect","adornerSVG","gridLayer","removePageBreaks","backgroundLayer","showPageBreaks","setOverview","overview","renderDocument","renderNodes","updateThumbConstraints","hideRotate","hideResize","thumbConstraints","adornerSvg","highlighter","selectionRect","getPortContainer","containsMargin","isBpmnTextAnnotation","textEdit","updateTextAnnotationContent","deleteNode","isAction","tempNode_1","updateObject","oldNode","oldConnector","actualSourcePoint","actualTargetPoint","nodePropertyChangeExtend","connectorSegmentChange","existingInnerBounds","segmentChange","isLayout","existingBounds","updateMargin","updateBPMN","actualPort","updatePort","checkSelectedItem","updateTextAnnotationProp","updateConnectorEdges","updateGroupSize","connectorProprtyChangeExtend","updateBPMNConnector","disableBridging","oldSource","annotationWrapper","updateAnnotations","updateNodeProperty","selItems","canUpdateSize","isMeasure","portWrapper","iconRect","iconShape","selectedSymbol","paletteId","selectedSymbols","dragEnter","dragLeave","PrintAndExport","fileType","buffers","getDiagramBounds","setCanvas","diagramAsSvg","pom","initMouseEvent","images","setScaleValueforCanvas","diagramAsCanvas","getMultipleImage","exportImage","image1","byteString","atob","intArray","htmlElement_1","urlLink","mouseEvent_1","getObjectsBound","nodebounds","diagramLayerSVG","bgColor","bgImg","proportionX","proportionY","exportable","isImageExportable","proportion","brColor","brWidth","strokeRect","getPrintCanvasStyle","isExport","imageArray","mLeft","mTop","mRight","mBottom","drawnX","drawnY","imgHeight","imgWidth","printImage","pageWidth_1","pageHeight_1","pageSize_1","printWind","StackPanel","updateHorizontalStack","updateVerticalStack","measureStackPanel","arrangeHorizontalStack","arrangeVerticalStack","arrangeStackPanel","applyChildMargin","rotatedSize","parenBounds","DataBinding","dataTable","applyDataSource","nextLevel","rootNodes","updateMultipleRootNodes","applyNodeTemplate","nodeModel","rtNodes","canBreak","containsConnector","applyConnectorTemplate","tNode","connModel","menuClass","grouping","DiagramContextMenu","service","defaultItems","disableItems","hiddenItems","setLocaleKey","contextMenu","Menu","getMenuItems","contextMenuItemClick","contextMenuBeforeOpen","contextMenuOpen","onClose","contextMenuOnClose","orderItems","groupItems","showCustomMenuOnly","getDefaultItems","buildDefaultItems","orderGroup","customItem","getKeyFromId","updateItemStatus","getLocaleText","ensureItems","ensureTarget","diagramArgs","newItem","selectedLength","canUndo","canRedo","generateID","menuItem","bringToFrontOrder","moveForwardOrder","sendToBackOrder","sendBackwardOrder","BpmnDiagrams","annotationObjects","getBPMNEventShape","getBPMNGatewayShape","getBPMNDataObjectShape","getBPMNShapes","getBPMNActivityShape","getBPMNTextAnnotation","bpmnShape","bpmnShapeData","gatewayshape","gatewayNode","gatewayTypeNode","gatewayTypeNodeShapeData","shapeType","gateway","setSizeForBPMNGateway","dataObjectshape","dataObject","dataobjNode","dataobjTypeNode","dataobjCollectionNode","getBPMNTaskShape","task","taskShapes","taskNode","childCount","getTaskChildCount","childSpace","taskTypeNodeData","taskTypeNode","childNode2data","loopType","loop","taskLoopNode","taskCompNode","getBPMNCompensationShape","compensation","subEvent","sub","eventshape","shapeEvent","shapeActivity","innerEvtNode","outerEvtNode","triggerNode","triggerNodeData","setSizeForBPMNEvents","setEventVisibility","setSubProcessVisibility","eventLength","elementWrapper","adhoc","getBPMNSubProcessShape","subProcessShapes","subprocessAdhoc","subProcessLoopShapes","subChildCount","getSubprocessChildCount","subprocessNode","getBPMNSubProcessTransaction","collapsedShape","getBPMNSubEvent","getBPMNSubProcessLoopShape","subChildSpace","boundary","getBPMNAdhocShape","subprocessComp","eventContainer","getBPMNSubprocessEvent","innerRect","transactionEvents","subprocessLoopData","subprocessLoop","redoElement","sources","processTable_1","processIndex","excludeChild","compensationNode","subProcessEventsShapes","adhocNode","annotationContainer","annotationPath","annotationNode","setAnnotationPath","annotationConnector","bpmnShapeContent","annotationObj","clearAnnotations","removeAnnotationObjects","nodeContent","parentBounds","getAnnotationPathAngle","parentNodeId","newShape","actualShape","sizeChanged","updateBPMNGateway","updateBPMNDataObject","updateBPMNActivity","updateBPMNEvent","bpmnshapeGatewaydata","elementWrapperChild1","elementWrapperChild2","setSizeForBPMNDataObjects","child0","child1","child2","updateEventVisibility","elementWrapperChild0","updateBPMNEventTrigger","bpmnshapeTriggerdata","actualObjectProp","updateBPMNActivityTask","updateBPMNActivityTaskLoop","updateBPMNActivitySubProcess","setSizeForBPMNActivity","bpmnshapeTaskdata","bpmnshapeLoopdata","updateChildMargin","updateBPMNSubProcessEvent","updateBPMNSubProcessAdhoc","updateBPMNSubProcessBoundary","updateBPMNSubProcessCollapsed","updateBPMNSubProcessCompensation","updateBPMNSubProcessLoop","updateBPMNSubProcessTransaction","eventIndex","eventWrapper","actualEvent","updateBPMNSubEvent","newEvent","getEventSize","wrapperChild","currentNode","flowType","sequence","getSequence","association","getAssociation","getMessage","offLength","eventNode","checkAnnotation","SubProcess","Timer","Escalation","Compensation","Conditional","Link","Signal","Terminate","Multiple","Parallel","Exclusive","Inclusive","EventBased","ExclusiveEventBased","ParallelEventBased","Service","Receive","Send","InstantiatingReceive","Manual","BusinessRule","User","Script","Standard","ParallelMultiInstance","SequenceMultiInstance","ConnectorBridging","lastBridge","Bridging","InheritBridging","canBridge","points1","bridgeSpacing","bridgeSpace","bgedir","connector1","points2","intersectsRect","intersectPts","getLengthAtFractionPoint","lengthFractionIndex","fullLength","stBridge","enBridge","angleCalculation","fix","lengthCalculation","var1","insertAt","arcSeg","createSegment","bridgeStartPoint","arcs","bgseg","stPoints","firstBridge","bridgeList","subBridge","createBridgeSegment","startPt","endPt","angle1","self","zOrder","inter1","intersect2","checkForHorizontalLine","roundedAngle","start1","end1","start2","end2","getLineSegment","pointAt","confirm","lengthAtFractionPt","previouspt2","suspect","getSlope","delX","delY","lhs","rhs","xDiff","yDiff","Snapping","horizontallysnapped","verticallysnapped","snapObject","roundedRight","roundedLeft","roundedTop","roundedBottom","currentright","currentbottom","SnapToVerticalLines","SnapToHorizontalLines","cutoff","bal","horizontalSnap","verticalSnap","ended","lengthY","hTarget","vTarget","lengthX","objectsAtLeft","objectsAtRight","objectsAtTop","objectsAtBottom","snapObjDistance","snapObjectDistance","hIntersectRect","vIntersectRect","targetBounds","findNodes","canBeTarget","canConsider","createSnapObject","createGuidelines","createHSpacingLines","createVSpacingLines","snapSize","sameWidth","sameHeight","hintersectedrect","vintersectedrect","nodesInView","targetBounds_1","targetBounds_2","actualDiff","addSameWidthLines","addSameHeightLines","initialBoundsT","actualTop","initialBound","initialBoundsB","actualLeft","initialRect","renderAlignmentLines","sortByDistance","nearestleft","nearestright","equaldistance","equallySpaced","findEquallySpacedNodesAtLeft","adjustablevalue","findEquallySpacedNodesAtRight","addHSpacingLines","deltaHorizontal","nearesttop","nearestbottom","findEquallySpacedNodesAtTop","findEquallySpacedNodesAtBottom","addVSpacingLines","deltaVertical","crnt","renderSpacingLines","equallySpacedObjects","sameWidths","sameSizes","sameHeights","snap","nd","ascending","equalDistance","prevBounds","actualDistance","groupUndo","currentEntry","canLog","undoStack","redoStack","entryObject","getHistoryList","getUndoEntry","endGroupActionCount","undoEntry","undoGroupAction","currEntry","getHistroyObject","addObject","recordPositionChanged","recordSizeChanged","recordRotationChanged","recordConnectionChanged","recordPropertyChanged","isUndo","recordCollectionChanged","recordLabelCollectionChanged","recordPortCollectionChanged","recordSegmentChanged","historyEntry","ignoreProperty","isRedo","segmentChanged","positionChanged","connectionChanged","scaleWidth","scaleHeight","selectorObj","rotationChanged","getRedoEntry","startGroupActionCount","redoEntry","redoGroupAction","hList","entryCurrent","LayoutAnimation","setIntervalObject","layoutAnimation","setIntervalObjects_1","updateOpacity","layoutTimer","differenceX","differenceY","HierarchicalTree","layoutProp","viewport","anchorX","anchorY","firstLevelNodes","centerNode","maxLevel","graphNodes","horizontalSpacing","verticalSpacing","setUpLayoutInfo","tree","hasSubTree","updateTree","rootInfo","updateAnchor","updateNodes","updateConnectors","dontupdate","dimensions","lev","getDimensions","assistants","treeBounds","levelBounds","asstBounds","setDepthSpaceForAssitants","updateHorizontalTreeWithMultipleRows","updateVerticalTree","updateHorizontalTree","setBreadthSpaceForAssistants","canMoveBy","treeWidth","translateInfo","shapeBounds","dim","translateSubTree","subTreeTranslation","updateLeafNode","enableRouting","asstDif","firstChildInfo","findIntersectingLevels","actualLevel","treeIntersect","spaceLeftFromPrevSubTree","translated","shiftSubordinates","rBounds","updateRearBounds","bnds","lastLevel","isLastLeaf","findLevel","vSpace","asstHeight","asstElement","asst","asstWidth","uniteRects","shape1","childWidth","childHeight","actBounds","oldActBounds","childInfo","canMoveValue","translateSibilingsBy","leftCenter","rightCenter","minTranslation","splitChildrenInRows","unique","leftTree","rightTree","splitRows","treeInfo","rightMost","updateLeftTree","rightBounds","alignRowsToCenter","leftBounds","centered","centerObjct","childDimension","centeredX","centeredY","updateRearBoundsOfTree","childBnds","dontUpdate","oddBounds","evenBounds","oddLevels","findOffset","canMoveBy_1","dummy","treeType","dif","intersectingLevels","layoutInfo","viewPortBounds","visited","getConnectorSegments","get3Points","updateSegmentsForHorizontalOrientation","updateSegmentsForBalancedTree","get5Points","relative","getSegmentsForMultipleRows","startingPoint","getSegmentsFromPoints","MindMap","checkRoot","fistLevelNodes","findFirstLevelNodes","leftNodes","rightNodes","getMindmapBranch","fistLevelNodes_1","updateMindMapBranch","nodes_2","excludeNodes","newCollection","newCollection_1","outEdge","RadialTree","layoutNodes","depthFirstAllignment","populateLevels","transformToCircleLayout","nodeInfo","segmentOffset","stages","newlevel","nodeInfo1","nodeInfo2","actualCircumference","GraphForceNode","gnNode","velocityX","velocityY","graphNode","applyChanges","SymmetricLayout","cdCOEF","cfMAXVELOCITY","cnMAXITERACTION","cnSPRINGLENGTH","mszMaxForceVelocity","doGraphLayout","graphLayoutManager","graph","selectedNode","Bounds","getModelBounds","lstGraphNodes","GraphNodes","lstNodes","convertGraphNodes","preLayoutNodes","nLenght","makeSymmetricLayout","appendForces","resetGraphPosition","rcBounds","fMaxSize","ptCenter","dRotateAngle","dAngle","getForceNode","forceNode","gnChild","calcNodesForce","vtx1","vtx2","normalDistance","calcRelatesForce","updateNeigbour","gfnNode","ptPoint","szMin","ptLocation","lstToReturn","vtSource","vtTarget","pointDistance","lineAngle","calcForce","vx","vy","atan","symmetricLayout","GraphLayoutManager","minDist","fOffset","visitedStack","cycleEdgesCollection","graphObjects","passedNodes","selectionList","mhelperSelectedNode","nodeCollection_1","nodeGraphObject","graphType","connectorGraphObject","updateLayout1","modelBounds","trnsX","lNodes","nodesToLayout","detectCyclesInGraph","cycleConnColln","nodeSymbols","isCycleEdge","dictionaryLength","getNodesToPosition","selectNodes","nodeGraph","exploreGraphEdge","addNode","isConnectedToAnotherNode","LeftMargin","TopMargin","selectConnectedNodes","dictionaryContains","Added","getConnectedRelatives","exploreRelatives","addGraphNode","exploreRelatives1","relativesToExplore","fromNode","toNode","getConnectedParents","getConnectedChildren","keyObj","gnNodeChildren","setNode","findNode","fullName","nLength","nodeHelper","bFoundConnectedNode","searchEdgeCollection","edgesToSearchThrough","connectionDirection","nodeLink","nodeToAdd","collectionToAdd","vertex","currentStack","getUnVisitedChildNodes","currentEdge","con","ComplexHierarchicalTree","HierarchicalLayoutUtil","crossReduction","CrossReduction","createVertex","geometry","getEdges","findRoots","vertices","roots","best","maxDiff","conns","getVisibleTerminal","terminalCache","traverse","directed","currentComp","hierarchyVertices","filledVertices","vertexID","edgeIsSource","netCount","isSource2","filledVertexSet","candidateRoots","vertexSet","MultiParentModel","cycleStage","layeringStage","crossingStage","placementStage","clnode","dnode","coordinateAssignment","widestRankValue","placementStageExecute","plalementChange","calculateWidestRank","lastRankMaxCellSize","rankSizes","rankOffset","rankValue","maxRank","maxCellSize","ranks","localOffset","isVertex","numEdges","setXY","setTempVariable","widestRank","distanceToNextRank","minRank","isY","rankCoordinates","stage","maxOffset","initialCoords","facade","isAncestor","otherNode","hashCode","weightedCellSorter","weightedValue","rankIndex","minNode","nodeList","nodeWrapper","setDictionaryForSorter","maxTries","cellWrapper","nextLayerConnectedCells","getConnectedCellsOnLayer","previousLayerConnectedCells","nextConnectedCount","prevConnectedCount","medianNextLevel","medianXValue","medianPreviousLevel","numConnectedNeighbours","getTempVariable","cellMedian","leftCell","intraCellSpacing","rightCell","updateNodeList","connectedCell","connectedCellWrapper","getDictionaryForSorter","connectedCells","medianValues","medianPoint","jettyPositions","currentYDelta","currentXDelta","bestOffsetDelta","maxIterations","setCellLocations","getValues","vertexMapper","setVertexLocation","garphModelsetVertexLocation","realCell","initialRank","fixRanks","startNodes","internalNodes","getDictionaryValues","startNodesCopy","layerDeterminingEdges","internalNode","connectsAsTarget","edgesToBeMarked","connectsAsSource","allEdgesScanned","minimumLayer","internalEdge","removedCell","currentMaxLayer","seenNodes","unseenNodesArray","unseenNodes","rootsArray","modelRoots","getDictionary","visit","seenNodesCopy","invert","connectingEdge","isReversed","getEdgesBetween","dlayout","multiObjectIdentityCounter","dfsCount","hierarchicalUtil","internalVertices","hierarchicalLayout","createInternalCells","realEdges","realEdge","targetCell","internalTargetCell","setDictionary","undirectedEdges","directedEdges","rankList","oldRootsArray","updateMinMaxRank","seen","dic","layoutObjectId","visitor","dfsRoots","trackAncestors","extendedDfs","depthFirstSearch","updateConnectionRank","outgoingEdges","traversedList","removeConnectionEdge","cHash","hashCodeLength","transients","shallow","calculateCrossings","numRanks","totalCrossings","calculateRankCrossing","previousRank","tmpIndices","rankPosition","nodeIndices","connectedNode","otherCellRankPosition","indices","firstIndex","treeSize","treeIndex","nestedBestRanks","iterationsWithoutImprovement","currentBestCrossings","weightedMedian","candidateCrossings","iteration","downwardSweep","medianRank","connectedlayer","connectedAs","medianValue","arrayCount","leftMedian","rightMedian","numCellsForRank","reservedPositions","sorterEntry","nextLevelConnectedCells","nextRankValue","Palette","SymbolPreview","SymbolPalette","symbolTable","clonedElement","getSymbolPreview","enableSearch","accordionElement","refreshPalettes","accordionDiv","updatePalettes","allowDrag","measureElemnt","initSymbols","symbolGroup","prepareSymbol","renderPalette","paletteDiv","renderSymbols","addPaletteItem","paletteName","paletteSymbol","symbolPaletteGroup","getSymbolContainer","removePaletteItem","stackPanel","symbolContainer","getSymbolTemplate","symbolInfo","getSymbolInfo","actualWidth","actualHeight","symbolMargin","scaleSymbol","getSymbolDescription","parentDiv","symbolPreviewWidth","symbolPreviewHeight","symbolPreview","measureAndArrangeSymbol","getHtmlSymbol","updateSymbolSize","getSymbolSize","HTMLCanvasElement","isPreview","highlightedSymbol","srcElement","searchPalette","palette_1","HTMLInputElement","initDraggable","symGroup","searchDiv","textBox","filterSymbols","createSearchPalette","symbolGroup_1","emptyDiv","Overview","actionName","viewPortRatio","renderCanvas","oldparent","removeDocument","getDiagram","documentMouseUp","xlink","eWidth","eHeight","bRect","screenX","screenY","renderHtmlLayer","addOverviewRectPanel","htmlDiv","ovw","innerrect","renderOverviewCorner","transrect","updateOverviewRectangle","resizeDirection","updateHelper","difx_1","dify_1","updateOverviewrect","updateOverviewCorner","transattr","rectname","translateOverviewRectangle","offwidth","offheight","updateParentView","renderOverviewRect","viewwidth","viewheight","scrollOverviewRect","scaled","delx","dely","webkitTransform","widthratio","heightratio","initHelper","shape-rendering","index.Diagram","index.HierarchicalTree","index.MindMap","index.RadialTree","index.ComplexHierarchicalTree","index.DataBinding","index.Snapping","index.PrintAndExport","index.BpmnDiagrams","index.SymmetricLayout","index.ConnectorBridging","index.UndoRedo","index.LayoutAnimation","index.DiagramContextMenu","index.ConnectorEditing","dropDownBaseClasses","noData","fixedHead","DropDownBase","getPropObject","oldProperty","getValueByText","listData","checkValueCase","isTextByValue","typeOfData","dataSource_1","checkingAccent","checkIgnoreCase","getItemValue","checkNonIgnoreCase","itemValue","stringTrim","textItem","typedText","l10nUpdate","actionFailure","noRecordsTemplate","actionFailureTemplate","getTextByValue","enableRtlElements","jsonElement","resetList","renderItemsBySelect","setListData","getJSONfromOption","optionGroup","scrollTimer","isRequested","onActionComplete","onActionFailure","postRender","focusItem","listEle","getSortedDataSource","listOption","setFloatingHeader","fixedHeaderElement","setFixedHeader","scrollStop","topIndex","itemTemplate","templateListItem","liWidth","firstLi","textField","getIndexByValue","setFields","updateSelection","updateDataSource","setUpdateInitial","isEmptyData","rippleFun","wrapperElement","itemIndex","itemsCount","selectedItemValue","updateActionCompleteData","tempLi","hidden","getDataByValue","dropDownListClasses","inputFocus","iconAnimation","device","filterBarClearIcon","filterInput","filterParent","mobileFilter","clearIconHide","popupFullScreen","disableIcon","hiddenElement","DropDownList","initializeData","isDocumentClick","isFilterFocus","beforePopupOpen","initRemoteRender","isNotSearchList","isTyped","preventAutoFill","isValidKey","typedString","isEscapeKey","isTabKey","actionCompleteData","isUpdated","prevSelectPoints","isSelectCustom","isDropDownClick","preventAltUp","isCustomFilter","isSecondClick","floatLabelChange","floatElement","onChangeEvent","resetFocusElement","resetSelection","allowFiltering","valueTempElement","setHTMLAttributes","getAriaAttributes","hidePopup","preventTabIndex","getNgDirective","getElementByText","getElementByValue","listItems_1","updateValues","setHiddenValue","onBlur","isFilterLayout","focusOutAction","onFocusOut","onFocus","resetValueHandler","wireEvent","dropDownClick","bindCommonEvent","unBindCommonEvent","searchKeyEvent","spinnerElement","filterInputObj","preventAction","preventHomeEnd","isEditTextBox","isTabAction","isSelectFocusItem","pageUpSelection","getPageCount","pageDownSelection","showPopup","focusDropDown","selectCurrentItem","unWireEvent","onDocumentClick","activeStateChange","cloneElements","updateSelectedItem","preventSelect","detachChanges","focusedItem","activeItem","previousItemData","previousSelectedLI","valueTemplate","setValueTemplate","dataText","detachChangeEvent","defineProperties","preItems","onFilterUp","searchLists","onFilterDown","getSelectionPoints","removeFillSelection","isFiltering","preventDefaultAction","updateData","filteringAction","baseEventArgs","filterQuery","focusIndexItem","setSearchBox","filterBarPlaceholder","clearIconElement","searchKeyModule","onInput","addNewItem","newElement","highlightedItem","refreshPopup","searchBox","setHeaderTemplate","searchBoxHeight","getOffsetValue","getFocusElement","setSearchBoxPosition","backIconElement","clickOnBackIcon","scrollParentElements_1","listScroll","popupStyles","borderTop","borderBottom","destroyPopup","clearElement","popupOffset","lastItem","paddingBottom","scrollBottom","currentOffset","nextBottom","nextOffset","boxRange","isPopupButton","scrollableParentElements_1","onselect","stopImmediatePropagation","onchange","setOldText","setOldValue","ddlProps","onpopstate","pushState","ComboBox","targetFocus","customValue","allowCustom","valueMuteChange","aria-hasPopup","setHoverList","inlineSearch","autofill","setAutoFill","isHover","currentFillValue","isAndroidAutoFill","setAutoFillSelection","prevEnd","curEnd","prevStart","curStart","isKeyNavigate","changeData","comboProps","isEscape","searchItem","AutoComplete","isFiltered","filterType","mapping","suggestionCount","isDownUpKey","filterAction","postBackAction","fieldsSettings","itemCreated_1","showPopupButton","atcProps","HIDE_LIST","CHIP","CHIP_CLOSE","CHIP_SELECTED","ZERO_SIZE","CLOSEICON_CLASS","CLOSE_ICON_HIDE","MultiSelect","scrollFocusStatus","keyDownStatus","enableRTL","allowCustomValue","hideSelectedItem","closePopupOnSelect","updateHTMLAttribute","updateReadonly","updateClearButton","overAllClear","componentWrapper","updateCssClass","onPopupShown","focusAtFirstListItem","isFirstClick","mainList","refreshListItems","addListFocus","focusAtLastListItem","updateListARIA","disableStatus","removelastSelection","chipCollectionWrapper","tempValues","removeValue","removeChipSelection","updateDelimeter","delimiterChar","makeTextBoxEmpty","mainData","refreshSelection","targetInputElement","showSelectAll","mainListCollection","remoteCustomValue","checkForCustomValue","tempQuery","unwireListEvents","setInitialValue","selectAllAction","setDynValue","initialValueUpdate","initialUpdate","refreshPlaceHolder","updateValueState","hideGroupItem","ariaValue","checkSelectAll","checkMaxSelection","element1","temp1","searchCount","searchActiveCount","openClick","openOnClick","KeyUp","expandTextbox","showOverAllClear","checkTextLength","remoteFilterAction","dataUpdater","backCommand","dataChecks","wrapperClick","updateDelimView","removeChipFocus","refreshInputHight","floatLabelBlur","validateValues","initStatus","getPagingCount","showDelimWrapper","viewWrapper","floatLabelFocus","delimiterWrapper","hideDelimWrapper","mobFilter","calcPopupWidth","popupKeyActions","updateAriaAttribute","onKeyDown","moveByList","selectByKey","escapeAction","enableSelectionOrder","checkBackCommand","moveBy","removeSelectedChip","selectListByKey","hideOverAllClear","maximumSelectionLength","updateListSelection","selectedElem","addChipSelection","moveByTop","chipClick","onChipRemove","setFloatLabelType","updateMainList","removeChip","updateChipStatus","element2","addListSelection","addChip","dispatchSelect","isNotTrigger","getChip","closeElements","onMobileChipInteraction","chipElem","chipClose","chip","data-value","chipContent","setClass","mouseIn","mouseOut","fieldProperty","listCurrentOptions","overAllHeight","selectAllHeight","onListMouseDown","ClearAll","delim","indexItem","selectItems","mainlist","addListHover","ariaCheck","delimChar","wrapperleng","remainContent","overflowCountTemplate","raminElement","remainSize","overAllContainer","remainValue","newTemp","selectAllItem","onLoadSelect","dropDownIcon","msProps","mainLiLength","liLength","DELIMITER_VIEW","checkAutoFocus","placeholderText","placeholderElement","showDropDownIcon","CheckBoxSelection","activeLi","listSelection","setSelectAll","setDeviceSearchBox","getFocus","setReorder","getActiveList","checboxCreate","checkAllParent","selectAllSpan","selectAllText","unSelectAllText","activeLiCount","ulEle","keysInternal","valuesInternal","WUniqueFormat","referenceCount","uniqueFormatType","propertiesHash","isEqual","modifiedValue","isBorderEqual","isCharacterFormatEqual","isParagraphFormatEqual","isCellFormatEqual","isShadingEqual","isRowFormatEqual","isListFormatEqual","isTableFormatEqual","isListLevelEqual","isSectionFormatEqual","isNotEqual","modifiedProperty","targetValue","getPropertyType","sourceValue","getBorderPropertyType","getCharacterFormatPropertyType","getParaFormatPropertyType","getCellFormatPropertyType","getShadingPropertyType","getRowFormatType","getListFormatType","getTableFormatType","getListLevelType","getSectionFormatType","cloneItems","mergeProperties","cloneProperties","WUniqueFormats","addUniqueFormat","matchedFormat","updateUniqueFormat","uniqueFormat","DocumentEditor","enableHeaderFooterIn","isShiftingEnabled","isLayoutEnabled","isPastingContent","disableHistoryIn","findResultsList","documentName","tablePropertiesDialogModule","bordersAndShadingDialogModule","cellOptionsDialogModule","tableOptionsDialogModule","paragraphDialogModule","imageResizerModule","useCtrlClickToFollowHyperlink","pageOutline","enableCursorOnReadOnly","enableLocalPaste","Table","Cell","Ok","Preferred Width","Percent","Measure in","Alignment","Indent from Left","Borders and Shading","Options","Specify height","At least","Exactly","Row height is","Allow row to break across pages","Repeat as header row at the top of each page","Vertical alignment","Default Cell Margins","Default Cell Spacing","Allow Spacing Between Cells","Cell Margins","Same as the whole table","Borders","Single","DashSmallGap","DashLargeGap","Triple","ThinThickSmallGap","ThickThinSmallGap","ThinThickThinSmallGap","ThinThickMediumGap","ThickThinMediumGap","ThinThickThinMediumGap","ThinThickLargeGap","ThickThinLargeGap","ThinThickThinLargeGap","SingleWavy","DoubleWavy","DashDotStroked","Emboss3D","Engrave3D","Outset","Inset","Thick","Style","Width","Height","Letter","Tabloid","Legal","Statement","Executive","A3","A4","A5","B4","B5","Custom Size","Different odd and even","Different first page","From edge","Footer","Paper","Orientation","Table Of Contents","Show page numbers","Right align page numbers","(none)","Nothing","....................","-------------------","____________","Tab leader:","Show levels:","Use hyperlinks instead of page numbers","Build table of contents from:","Styles","Available Styles:","TOC level:","Heading 1","Heading 2","Heading 3","Heading 4","Heading 5","Heading 6","Heading 7","Heading 8","Heading 9","List Paragraph","Outline levels","Table entry fields","Styles:","Modify","Color","Setting","Box","Preview","Shading","Apply To","Table Properties","Cell Options","Table Options","Insert Table","Column Size","Row Size","Text to display","Address","Insert Hyperlink","Edit Hyperlink","Insert","General","Indentation","Before Text","Special","First Line","Hanging","After Text","By","Before","Line Spacing","After","At","Spacing","List","List Level","Choose Level to Modify","Level 1","Level 2","Level 3","Level 4","Level 5","Level 6","Level 7","Level 8","Level 9","Number Format","Number Style for this level","Formatting for number","Start at","Restart by","Indents","Text indent at","Aligned at","Follow number with","Space","Arabic","UpRoman","LowRoman","UpLetter","LowLetter","Leading zero","Bullet","Ordinal","Ordinal Text","For East","No Restart","Font Style","Font Color","Effects","Strikethrough","Superscript","Subscript","Double Strikethrough","BoldItalic","Open Hyperlink","Copy Hyperlink","Edit Hyperlink...","Remove Hyperlink","Paragraph","Merge Cells","Insert Above","Insert Below","Insert Left","Insert Right","Delete Table","Delete Row","Delete Column","File Name","Format Type","Navigation","Results","Replace","Replace All","We replaced all ","Find","No matches","All Done!","Result "," of "," instances of \"","\" with \"","Click to follow link","Continue Numbering","Bookmark name:","Close","Restart At","Properties","Name","Style type","Style based on","Style for following paragraph","Formatting","Numbering and Bullets","Numbering","Update Field","Edit Field","Bookmark","Page Setup","No bookmarks found","listInfo","Format","Font..","Paragraph..","Numbering..","Create New Style","Modify Style","New","Bullets","Use bookmarks","Table of Contents","viewer","PageLayoutViewer","SfdtReader","DocumentEditor_1","updateScrollBars","isDocumentLoaded","editorModule","editorHistoryModule","contextMenuModule","isDocumentLoadedIn","enableEditorHistory","getDocumentStart","getDocumentEnd","isReadOnly","enableImageResizer","initializeComponents","openBlank","localizeDialogs","optionsPaneModule","isOptionsPaneShow","showHideOptionsPane","initOptionsPane","initParagraphDialog","pageSetupDialogModule","initPageSetupDialog","fontDialogModule","initFontDialog","hyperlinkDialogModule","initHyperlinkDialog","initContextMenu","listDialogModule","initListDialog","initTablePropertyDialog","initBordersAndShadingsDialog","initCellMarginsDialog","initTableOptionsDialog","tableDialogModule","initTableDialog","styleDialogModule","initStyleDialog","tableOfContentsDialogModule","initTableOfContentDialog","clearPreservedCollectionsInViewer","LayoutViewer","clearDocumentItems","getDocumentEditorElement","fireContentChange","fireDocumentChange","fireSelectionChange","isCompositionStart","predictText","fireZoomFactorChange","fireViewChange","visiblePages","endPage","showParagraphDialog","paragraphFormat","isReadOnlyMode","showPageSetupDialog","showFontDialog","characterFormat","showCellOptionsDialog","showTableOptionsDialog","showTableDialog","showTableOfContentsDialog","showStyleDialog","showHyperlinkDialog","showBookmarkDialog","bookmarkDialogModule","showStylesDialog","stylesDialogModule","showListDialog","showTablePropertiesDialog","showBordersAndShadingDialog","enablePrint","enableSfdtExport","enableWordExport","enableTextExport","enableSelection","enableEditor","enableContextMenu","enableOptionsPane","enableHyperlinkDialog","enableTableDialog","enableBookmarkDialog","enableTableOfContentsDialog","enablePageSetupDialog","enableStyleDialog","enableListDialog","enableParagraphDialog","enableFontDialog","enableTablePropertiesDialog","enableBordersAndShadingDialog","enableTableOptionsDialog","sfdtText","abstractLists","WStyles","onDocumentChanged","convertJsonToDocument","intializeDefaultStyles","scrollToPage","enableAllModules","Print","SfdtExport","WordExport","TextExport","Editor","ImageResizer","EditorHistory","OptionsPane","HyperlinkDialog","TableDialog","BookmarkDialog","TableOfContentsDialog","PageSetupDialog","StyleDialog","ListDialog","ParagraphDialog","BulletsAndNumberingDialog","FontDialog","TablePropertiesDialog","BordersAndShadingDialog","TableOptionsDialog","CellOptionsDialog","StylesDialog","updateViewerSize","updateFocus","fitPage","pageFitType","printModule","sfdtExportModule","wordExportModule","textExportModule","jsonString","BodyWidget","sectionFormat","WSectionFormat","paragraph","ParagraphWidget","WParagraphFormat","WCharacterFormat","childWidgets","containerWidget","hfs","parseHeaderFooter","evenHeader","evenFooter","firstPageHeader","firstPageFooter","headersFooters","findByName","baseStyle","listFormat","getStyleNames","styleType","getStyles","showDialog","dialogType","showOptionsPane","destroyDependentModules","searchModule","browserUserAgent","getPageHeight","getPageWidth","printElement","generatePrintContent","htmlString","boundingRectangle","isPrinting","renderWidgets","canvasURL","pageCanvas","uniqueSectionFormat","ownerBase","uniqueSectionFormats","hasValue","getPropertyDefaultValue","initializeUniqueSectionFormat","uniqueSectionFormatTemp","addUniqueSectionFormat","copyFormat","isUndoing","isRedoing","updateUniqueSectionFormat","cloneFormat","WLevelOverride","overrideListLevel","levelNumber","startAt","WList","listId","sourceListId","abstractListId","abstractList","levelOverrides","getListLevel","levelOverride","getLevelOverride","mergeList","WListFormat","uniqueListFormat","baseListStyle","basedOn","listLevelNumber","WParagraphStyle","initializeUniqueListFormat","uniqueListFormats","uniqueListFormatTemp","addUniqueListFormat","clearFormat","ApplyStyle","mergeFormat","WTabStop","positionIn","deletePositionIn","justification","leader","deletePosition","tabJustification","uniqueParagraphFormat","tabs","getUpdatedTabs","inTabs","tabStops","hasTabStop","getListFormatParagraphFormat","listLevel","ifListFormat","getDefaultValue","docParagraphFormat","documentParagraphFormat","bodyWidget","initializeUniqueParagraphFormat","uniqueParagraphFormats","uniqueParaFormatTemp","addUniqueParaFormat","updateUniqueParagraphFormat","leftIndent","rightIndent","beforeSpacing","afterSpacing","lineSpacingType","outlineLevel","uniqueCharacterFormat","baseCharStyle","charStyleValue","checkCharacterStyle","baseStyleValue","checkBaseStyle","docCharacterFormat","documentCharacterFormat","returnPropertyType","initializeUniqueCharacterFormat","uniqueCharacterFormats","uniqueCharFormatTemp","addUniqueCharacterFormat","isEqualFormat","baselineAlignment","fontColor","strikethrough","highlightColor","isSameFormat","updateUniqueCharacterFormat","HelperMethods","spanText","indexOfAny","wordSplitCharacter","lastIndexOfAny","addCssStyle","getHighlightColorCode","convertPointToPixel","convertPixelToPoint","pixel","isLinkedFieldCharacter","FieldElementBox","fieldType","fieldEnd","fieldBegin","removeSpace","trimStart","trimEnd","writeCharacterFormat","isInline","styleName","decimalDigits","wordBefore","wordAfter","wordSplitCharacters","xIn","yIn","WStyle","copyStyle","paraStyle","WCharacterStyle","charStyle","returnStyle","styleObjects","styles_1","returnStyleObject","WBorder","uniqueBorderFormat","initializeUniqueBorder","uniqueBorderFormats","uniqueBorderFormatTemp","addUniqueBorderFormat","lineArray","getBorderLineWidthArray","borderLineArray","getBorderWeight","weight","numberOfLines","getNumberOfLines","borderNumber","getBorderNumber","getPrecedence","WBorders","leftIn","rightIn","topIn","bottomIn","horizontalIn","verticalIn","diagonalUpIn","diagonalDownIn","lineWidthIn","diagonalDown","diagonalUp","valueIn","WShading","uniqueShadingFormat","initializeUniqueShading","uniqueShadingFormats","uniqueShadingTemp","addUniqueShading","shading","foregroundColor","textureStyle","WTableFormat","owner","uniqueTableFormat","assignTableMarginValue","initializeUniqueTableFormat","uniqueTableFormats","uniqueTableFormatTemp","addUniqueTableFormat","initializeTableBorders","tableFormat","tableAlignment","preferredWidth","preferredWidthType","WRowFormat","uniqueRowFormat","beforeWidth","afterWidth","heightType","initializeUniqueRowFormat","uniqueRowFormats","uniqueRowFormatTemp","addUniqueRowFormat","allowBreakAcrossPages","gridBefore","gridBeforeWidth","gridBeforeWidthType","gridAfter","gridAfterWidth","gridAfterWidthType","WCellFormat","uniqueCellFormat","initializeUniqueCellFormat","uniqueCellFormats","uniqueCellFormatTemp","addUniqueCellFormat","containsMargins","Widget","bodyWidgets","widget","indexInOwner","previousPage","previousContainer","TableCellWidget","getPreviousSplitWidget","TableRowWidget","HeaderFooterWidget","previousRenderedWidget","nextContainer","getNextSplitWidget","nextRenderedWidget","BlockWidget","getPreviousSplitWidgets","widgets","previousSplitWidget","getSplitWidgets","nextSplitWidget","combineWidget","splitWidget","TableWidget","combineRows","addWidgets","destroyInternal","LineWidget","BlockContainer","sectionFormatIn","getHierarchicalIndex","hierarchicalIndex","headerFooterType","getTableCellWidget","touchPoint","tableCellWidget","chilgWidget","headerWidget","footerWidget","headerFooter","block","ownerTable","ownerRow","getContainerWidth","isInsideTable","associatedCell","cellFormat","inlineElement","TextElementBox","ImageElementBox","BookmarkElementBox","getInline","indexInInline","isStarted","splittedWidget","ListTextElementBox","getLength","cloneLine","leftBorderWidth","rightBorderWidth","topBorderWidth","bottomBorderWidth","tableHolder","WTableHolder","spannedRowCollection","combineCells","tableCell","getOwnerWidth","isBasedOnViewer","getTableWidth","getTableClientWidth","tableWidth","getCellWidth","getMinimumPreferredWidth","fitCellsToClientArea","rowFormat","calculateGrid","tempGrid","spannedCells","currOffset","startOffset","removeSpannedCell","updateColumnSpans","getGridCount","buildTableColumns","isGridUpdated","resetColumns","rowSpannedCells","isAutoWidth","addColumns","rowSpannedCell","minWidth_1","ownerColumn","validateColumnWidths","fitColumns","setWidthToCells","rw","getMaxRowWidth","totalPreferredWidth","getTotalWidth","convertPointToPercent","tablePreferredWidth","ownerWidth","getTableOf","getRowOf","fitChildToClientArea","getColumnCellsForSelection","startCell","endCell","splitWidthToTableCells","tableClientWidth","splitWidthToRowCells","insertTableRowsInternal","tableRows","updateRowIndex","tableGrids","headerHeight","getCellOf","tableGrid","prevOffset","getCellOffset","gridStartIndex","getOffsetIndex","updateRowBySpannedCells","getPreviousRowSpannedCells","spannedCell","include","previousWidget","cellWidget","getContainerTable","previousCell","nextCell","cellPreferredWidth","getCellLeftBorder","leftBorder","cellBorder","rowBorders","tableBorders","getLeftBorderToRenderByHierarchy","prevCell","previousRow","prevRowCell","getPreviousCellLeftBorder","getLeftBorderWidth","getRightBorderWidth","getCellSpacing","actualCellSpacing","hasNoneStyle","prevCellRightBorder","getBorderBasedOnPriority","adjacentBorder","borderWeight","adjacentBorderWeight","borderPriority","adjacentBorderPriority","borderColInRGB","convertHexToRGB","R1","G1","B1","adjacentBorderColInRGB","R2","G2","B2","borderBrightness","adjacentBorderBrightness","getCellRightBorder","rightBorder","getRightBorderToRenderByHierarchy","nextWidget","getAdjacentCellRightBorder","nextCellLeftBorder","getCellTopBorder","topBorder","getTopBorderToRenderByHierarchy","prevTopCell","prevRow","getPreviousCellTopBorder","previousTopCell","prevTopCellBottomBorder","getCellBottomBorder","bottomBorder","getBottomBorderToRenderByHierarchy","nextBottomCell","getAdjacentCellBottomBorder","prevBottomCellTopBorder","colCodeNo","paragraphWidget","splitParagraph","isFirstLine","isLastLine","textIndex","getEndOffset","previousLine","elementBox","ElementBox","linkFieldCharacter","linkFieldTraversingForward","linkFieldTraversingBackwardSeparator","fieldSeparator","isFieldEnd","linkFieldTraversingBackward","previousNode","prevParagraph","nextLine","lineWidget","objectCharacter","hasFieldEnd","fieldBeginInternal","fieldSeparatorInternal","fieldEndInternal","baselineOffset","FieldTextElementBox","fieldText","TabElementBox","tabText","tabLeader","bookmarkTypeIn","refereneceIn","nameIn","bookmarkType","isInlineImage","imageStr","imgElement","isInlineImageIn","isMetaFile","isListFollowCharacter","isFollowCharacter","Page","repeatHeaderRowTableWidget","removePage","tableColumns","getPreviousSpannedCellWidth","previousColumnIndex","curColumnIndex","currentColumnIndex","WColumn","endOffset","isFitColumns","preferredTableWidth","totalColumnWidth","CONTEXTMENU_COPY","CONTEXTMENU_CUT","CONTEXTMENU_PASTE","CONTEXTMENU_UPDATE_FIELD","CONTEXTMENU_EDIT_FIELD","CONTEXTMENU_HYPERLINK","CONTEXTMENU_OPEN_HYPERLINK","CONTEXTMENU_COPY_HYPERLINK","CONTEXTMENU_REMOVE_HYPERLINK","CONTEXTMENU_EDIT_HYPERLINK","CONTEXTMENU_FONT_DIALOG","CONTEXTMENU_PARAGRAPH","CONTEXTMENU_TABLE","CONTEXTMENU_INSERT_TABLE","CONTEXTMENU_DELETE_TABLE","CONTEXTMENU_INSERT_ABOVE","CONTEXTMENU_INSERT_BELOW","CONTEXTMENU_INSERT_RIGHT","CONTEXTMENU_INSERT_LEFT","CONTEXTMENU_COMPLETE_DELETE_TABLE","CONTEXTMENU_DELETE_ROW","CONTEXTMENU_DELETE_COLUMN","CONTEXTMENU_MERGE_CELL","CONTEXTMENU_CONTINUE_NUMBERING","CONTEXTMENU_RESTART_AT","contextMenuInstance","onContextMenuInternal","showHideElements","localValue","listStyle","oncontextmenu","disableBrowserContextmenu","menuOptions","handleContextMenuItem","caret","showCaret","editor","pasteInternal","updateToc","navigateHyperlink","copyHyperlink","removeHyperlink","mergeCells","insertRow","insertColumn","deleteTable","deleteRow","deleteColumn","applyContinueNumbering","applyRestartNumbering","updateField","editField","tableProperties","insertTable","openHyperlink","editHyperlink","continueNumbering","restartAt","hideToolTip","copiedData","contextType","listLevelPattern","isCellSelected","getHyperlinkField","isImageField","canMergeCells","WAbstractList","abstractListIdIn","WListLevel","uniqueListLevel","followCharacter","numberFormat","restartLevel","initializeUniqueWListLevel","uniqueListLevels","uniqueListLevelTemp","addUniqueWListLevel","dotBullet","squareBullet","arrowBullet","circleBullet","allowLayout","isInitialLoad","maxTextHeight","maxBaseline","maxTextBaseline","isFieldCode","layoutItems","createNewPage","addBodyWidget","clientActiveArea","prevPage","sectionIndex","insertPage","layoutSection","updateFieldElements","ownerWidget","nextBlock","updateClientAreaForBlock","layoutBlock","layoutHeaderFooter","headerFooterWidget","getCurrentPageHeaderFooter","updateHFClientArea","layoutHeaderFooterItems","updateHeaderFooterToParent","typeIndex","getHeaderFooter","clearTableWidget","linkFieldInHeaderFooter","linkFieldInParagraph","linkFieldInTable","updateClientAreaLocation","pargaraph","shiftChildLocation","clientArea","shiftTop","childWidget","shiftChildLocationForTableWidget","tableWidget","shiftChildLocationForTableRowWidget","rowWidget","shiftChildLocationForTableCellWidget","moveToLine","layoutParagraph","layoutTable","addParagraphWidget","textHelper","getParagraphMarkWidth","addLineWidget","layoutListItems","layoutEmptyLineWidget","updateClientWidth","updateWidgetToPage","clearLineMeasures","moveElementFromNextLine","nextElement","layoutFieldCharacters","moveToNextLine","getFieldResult","checkAndSplitTabOrLineBreakCharacter","getTextSize","getTabWidth","moveToNextPage","updateFieldText","cutClientWidth","addElementToLine","currentLine","addSplittedLineWidget","splitTextForClientArea","checkLineWidgetWithClientArea","splitElementForClientArea","moveLineFromSplittedParagraph","character","splitByLineBreakOrTab","splitCurrentWidget","cutFromLeft","splitTextElementWordByWord","fieldStacks","isEmptyLine","isShiftEnter","paragraphMarkSize","getParagraphMarkSize","getBeforeSpacing","getLineSpacing","BaselineOffset","cutFromTop","getListById","clearListElementBox","layoutList","currentListLevel","getListNumber","updateTextSize","addListLevels","getListLevelPattern","splittedElementBox","movedElementBox","newLineWidget","splitByWord","getSplitIndexByWord","splitByCharacter","getTextSplitIndexByCharacter","splitWidth","measureTextExcludingSpaceAtEnd","splittedElement","getTextIndexAfterSpace","splittedText","isSplitByWord","textWidth","characterUptoWS","checkPreviousElement","spiltBy","inlineIndex","newSpan","paraFormat","isParagraphStart","isParagraphEnd","maxDescent","updateLineWidget","measurement","whiteSpaceCount","getWidthAndSpace","getSubWidth","spaceCount","addSubWidth","alignElements","alignLineElements","nextBody","moveBlocksToNextPage","updateClientArea","nextParagraph","insertIndex","isLastElement","getCellContentHeight","enableHeaderAndFooter","shiftFooterChildLocation","footerDistance","lastTextElement","updateListValues","getListText","getListStartValue","renderedLists","getAbstractListById","startVal","listAdv","listText","levelKey","getListTextListLevel","getAsLetter","quotient","listValue","getAsRoman","getAsLeadingZero","levelOverrideAdv","fposition","isCustomTab","defaultTabWidth","tabPosition","tabwidth","getRightTabWidth","clientActiveWidth","totalClientWidth","clientActiveAreaWidth","justify","trimSpace","lineText","elementText","isParagraphFirstLine","isParagraphLastLine","lastLineWidget","lastInline","moveNextWidgetsToTable","rowWidgets","moveFromNext","currentTable","nextWidgets","addTableCellWidget","maxCellMarginTop","maxCellMarginBottom","prevColumnIndex","cellspace","prevSpannedCellWidth","addWidgetToTable","tableCollection","endRowWidget","prevWidget","rowWidgetIndex","addTableWidget","updateRowHeightBySpannedCell","updateRowHeightByCellSpacing","updateHeightForRowWidget","updateSpannedRowCollection","prevRowWidget","updateRowHeight","mergedCellHeight","isRowSpanEnd","splittedCellWidgets","splittedCell","isVerticalMergedCellContinue","colIndex","splitWidgets","tableRowWidget","isFirstLineFitForRow","getSplittedWidgetForRow","insertSplittedCellWidgets","getSplittedWidget","updateWidgetLocation","updateWidgetsToTable","tableWidgets","isAllowBreakAcrossPages","moveRowToNextTable","continueHeader","updateWidgetsToPage","prevBodyWidget","curretTable","currentRenderingPage","updateChildLocationForRow","getHeaderHeight","row_1","updateWidgetToRow","lastWidget","isUpdateVerticalPosition","isLayouted","cellspacing","currentRowWidgetIndex","rowSpanWidgetEndIndex","splitSpannedCellWidget","spanEndRowWidget","childWidget_1","updateHeightForCellWidget","updateCellVerticalPosition","updateHeightForTableWidget","previousRowIndex","insertRowSpannedWidget","insertEmptySplittedCellWidget","previousLeft","emptyCellWidget","createCellWidget","splitMinimalWidget","splittedPara","getSplittedWidgetForPara","tableCol","tableHeight","splittedTable","getSplittedWidgetForTable","createTableWidget","newTable","lineBottom","rowBottom","splittedRow","allowRowBreakAcrossPages","isFirstLineFitForPara","paraWidget","cellwidget","isFirstLineFitInShiftWidgets","containerCellWidget","isFirstLineFitForTable","isFit","isFirstLineFitForCell","updateChildLocationForTable","updateChildLocationForCell","isUpdateToTop","getDisplacement","updateCellContentVerticalPosition","updateTableWidgetLocation","cellContentHeight","getTableLeftBorder","getTableRightBorder","getTableTopBorder","getTableBottomBorder","getCellDiagonalUpBorder","getCellDiagonalDownBorder","layoutNextItemsBlock","blockAdv","blockToShift","updateNextBlockList","currentWidget","updateContainerWidget","getFirstParagraphInFirstCell","updateWholeListItems","updateListItemsTillEnd","updateClientAreaForLine","startLineWidget","getParentTable","reLayoutParagraph","elementBoxIndex","layoutBodyWidgetCollection","reLayoutTable","reLayoutLine","isInHeaderFooter","updateHCFClientAreaWithTop","isBlockInHeader","block_1","clearPosition","clearHeight","clearRowWidget","clearCellWidget","blockIndex","shiftNextWidget","curretBlock","checkAndGetBlock","currentParagraph","shiftNextWidgets","tableView","updateClientAreaTopOrLeft","layoutRow","addTableRowWidget","updateClientAreaForRow","layoutCell","getMaxTopOrBottomCellMargin","topOrBottom","updateClientAreaForCell","shiftLayoutedItems","reLayoutOrShiftWidgets","removeEmptyPages","fieldCode","getFieldCode","shiftWidgetsBlock","updateRenderedListItems","shiftWidgetsForPara","shiftWidgetsForTable","prevBodyObj","getBodyWidgetOfPreviousBlock","shiftToPreviousWidget","isFitInClientArea","isSplittedToNewPage","shiftTableWidget","shiftRowWidget","shiftCellWidget","shiftParagraphWidget","updateVerticalPositionToTop","combinedTable","isUpdateTop","tablewidget","previousBodyWidget","maxElementHeight","getMaxElementHeight","paragraphView","nextBodyWidget","widgetIndex","updateParagraphWidgetInternal","activeArea","createOrGetNextBodyWidget","lastLine","newParagraphWidget","destroyAndScroll","scrollToBottom","previousBlock","createSplitBody","newBody","lineToLayout","Renderer","pageCanvasIn","containerCanvas","selectionCanvas","getColor","pageContext","setPageSize","renderHFWidgets","renderHeaderSeparator","selectionContext","dpr","devicePixelRatio","headFootWidget","renderWidget","getScaledValue","renderDashLine","getHeaderFooterType","renderHeaderFooterMark","renderHeaderFooterMarkText","footerHeight","differentFirstPage","differentOddAndEvenPages","renderParagraphWidget","renderTableWidget","renderTableCellWidget","renderTableRowWidget","renderTableOutline","visibleBounds","selectedWidgets","addSelectionHighlightTable","renderTableCellOutline","addSelectionHighlight","searchHighlighters","widgetInfo","toSkipFieldCode","underlineY","getUnderlineYPosition","renderListTextElementBox","renderImageElementBox","renderTextElementBox","breakCharacterFormat","renderUnderline","renderStrikeThrough","isHeightType","scaledWidth","tabElement","getTabLeader","tabString","getTabLeaderString","renderedHeight","underlineHeight","widgetWidth","isClipped","containerWid","renderSingleBorder","cellTopMargin","cellBottomMargin","cellLeftMargin","cellRightMargin","renderCellBackground","nextRowIsInCurrentTableWidget","nextRowWidget","TextHelper","containerContext","paragraphMark","textTrimEndWidth","getFormatText","heightInfoCollection","sizeInfo","getHeightInternal","formatText","spanElement","applyStyle","textTopVal","lineBreakMark","listCharacterFormat","onMouseWheelInternal","viewerContainer","pageContainer","wheel","setZoomFactor","onZoomFactorChanged","updateCaretPosition","updateTouchMarkPosition","updateImageResizerPosition","clearContent","handleZoom","selectionStartPageIn","selectionEndPageIn","tableLefts","isTimerStarted","preZoomFactor","preDifference","fieldEndParagraph","fieldToLayout","isSelectionChangedOnMouseMoved","isControlPressed","isTouchInput","useTouchSelectionMark","touchDownOnSelectionMark","isCompositionUpdated","isCompositionCanceled","isCompositionEnd","preDefinedStyles","isRowOrCellResizing","isMouseDownInFooterRegion","pageFitTypeIn","fieldCollection","isPageField","mouseDownOffset","zoomFactorInternal","compositionStart","compositionUpdated","compositionEnd","onImageResizer","isImageResizerVisible","isImageResizing","onMouseUpInternal","onTouchUpInternal","onTextInputInternal","editableDiv","onPaste","hideCaret","vtHeight","onWindowResize","resizeTimer","updateViewerSizeInternal","onContextMenu","onMouseDownInternal","isLeftButtonPressed","enableImageResizerMode","selectedResizeElement","cursorPoint","findFocusedPage","isCursorInsidePageRect","isCursorInFooterRegion","tableResize","isInCellResizerArea","isInRowResizerArea","handleResize","checkCursorIsInSelection","getLineWidget","onMouseMoveInternal","isImageMoveToNextPage","handleImageResizingOnMouse","handleResizing","updateTextPositionForSelection","touchY","touchPoint_1","moveTextPosition","checkForCursorVisibility","onDoubleTap","checkAndEnableHeaderFooter","selectCurrentWord","isListTextSelected","updateResizingHistory","isImageSelected","navigateHyperLinkOnEvent","isSelectionInListText","selectListText","mouseUpInternal","scrollToPosition","updateHistoryForImageResizer","imageResizer","onTouchStartInternal","zoomX","zoomY","getTouchOffsetValue","resizeObj","getImagePointOnTouch","getCaretBottom","onTouchMoveInternal","handleImageResizingOnTouch","currentDiff","onPinchOutInternal","onPinchInInternal","onKeyUpInternal","getSelection","anchorOffset","setEditableDivCaretPosition","onKeyDownInternal","isHandled","initalizeStyles","bookmarks","containerCanvasIn","selectionCanvasIn","visibleBoundsIn","dialogInternal","initDialog","dialogInternal2","initDialog2","onPageFitTypeChanged","getListLevelNumber","getBookmarks","includeHidden","bookmark","outline","contentEditable","initializeImageResizer","initTouchEllipse","initCaret","dialogTarget","tocStyles","tocBookmarkId","editorHistory","documentStart","pageGap","getLeftValue","isInsideRect","selectionLineWidget","touchOffsetValues","updatedZoomFactor","optionsRect","optionsPane","beforeLayout","headerDistance","updateClientAreaForTable","updateTextPosition","selectCurrentParagraph","endPosition","getLineWidgetInternal","prevLineWidget","prevTop","caretInfo","updateCaretSize","caretHeight","updateCaretToPage","scrollBarWidth","isMouseDragged","getPageTop","getLineWidgetBodyWidget","clearSelectionHighlight","clearSelectionHighlightInSelectedWidgets","scrollToLastPage","fieldCodes","fieldCategory","fieldPattern","getFieldText","hyperlinkField","isRowResize","isCellResize","resizePosition","getImagePoint","lineLeft","getLineStartLeft","getHyperLinkFieldInCurrentSelection","updateTextPositionIn","setHyperlinkContentToToolTip","updateCurrentPage","prevScaleFactor","verticalHeight","horizontalWidth","horWidth","prevPageTop","prevY","getCurrentHeaderFooter","createHeaderFooterWidget","viewerWidth","viewerHeight","displayPixelRatio","updateScrollBarPosition","updateVisiblePages","pageH","left_1","addVisiblePage","setImageResizerPositions","renderPage","renderVisiblePages","jsonObject","parseCharacterFormat","parseParagraphFormat","parseAbstractList","parseList","parseStyles","parseSections","parseStyle","wStyle","basedStyle","getStyle","styleString","linkStyle","charaStyle","nextStyleString","abstract","parseListLevel","listCollection","parseLevelOverride","parseSectionFormat","parseTextBody","oddHeader","oddFooter","parseBody","styleObj","inlines","parseParagraph","parseTable","parseTableFormat","tableRow","parseRowFormat","parseRowGridValues","parseCellFormat","writeInlineFormat","lineWidgetCount","bookmarkStart","sourceFormat","parseBorders","parseShading","isSamePaddingAsTable","parseCellMargin","sourceBorders","destBorder","parseBorder","sourceBorder","sourceShading","destShading","texture","inlineFormat","parseListFormat","parseTabStop","wTabs","tabStop","SelectionCharacterFormat","boldIn","italicIn","underlineIn","strikeThroughIn","baselineAlignmentIn","highlightColorIn","fontSizeIn","fontColorIn","notifyPropertyChanged","fontFamilyIn","isCleared","isRetrieveFormatting","propertyValue","onApplyCharacterFormat","combineFormat","selectionCharacterFormat","SelectionParagraphFormat","leftIndentIn","rightIndentIn","beforeSpacingIn","afterSpacingIn","textAlignmentIn","firstLineIndentIn","lineSpacingIn","lineSpacingTypeIn","listLevelNumberIn","levelPattern","onApplyListInternal","onApplyParagraphFormat","copyToFormat","getList","currentAbstractList","cloneListLevel","cloneLevelOverride","setList","onApplyList","history_1","setOffsetValue","updateListChangesInHistory","updateListParagraphs","applyListChanges","layoutWholeDocument","updateSelectionTextPosition","currentBaseHistoryInfo","modifiedProperties","updateHistory","SelectionSectionFormat","differentFirstPageIn","differentOddAndEvenPagesIn","pageHeightIn","pageWidthIn","leftMarginIn","bottomMarginIn","topMarginIn","rightMarginIn","headerDistanceIn","footerDistanceIn","getPropertyvalue","onApplySectionFormat","SelectionTableFormat","backgroundIn","tableAlignmentIn","cellSpacingIn","preferredWidthIn","tableIn","preferredWidthTypeIn","onApplyTableFormat","SelectionCellFormat","verticalAlignmentIn","onApplyTableCellFormat","clearCellFormat","SelectionRowFormat","heightIn","heightTypeIn","isHeaderIn","allowRowBreakAcrossPagesIn","onApplyTableRowFormat","clearRowFormat","SelectionImageFormat","updateImageFormat","onImageFormat","copyImageFormat","clearImageFormat","HtmlExport","fieldCheck","writeHtml","serializeSection","serializeParagraph","serializeTable","blockStyle","tagAttributes","serializeParagraphStyle","createAttributesTag","serializeInlines","endTag","serializeImageContainer","serializeInlineStyle","serializeSpan","spanClass","decodeHtmlNames","imageStyle","serializeCell","cellHtml","serializeCellBordersStyle","createTableStartTag","serializeRow","createTableEndTag","createRowStartTag","isList","paragraphClass","serializeCharacterFormat","serializeParagraphFormat","serializeTableBorderStyle","convertBorderLineStyle","serializeBorderStyle","borderPosition","tagValue","localProperties","createTag","tableStyle","createRowEndTag","htmlText","TextPosition","isUpdateLocation","getStartOffset","getHierarchicalIndexInternal","setPositionForSelection","physicalLocation","isLastRenderedInline","getParagraphLength","setPositionFromLine","positionAtStart","updatePhysicalPosition","setPositionInternal","setPositionForCurrentIndex","getParagraphWidget","setPositionParagraph","moveNextLine","getPhysicalPositionInternal","isAtSamePosition","isInSameParagraph","isExistBefore","isExistAfter","startParagraph","endParagraph","offsetInLine","setPositionForLineWidget","getLineLength","nextLineWidget","getNextRenderedBlock","prevLine","curretOffSet","moveNextPosition","getNextStartInline","moveNextPositionInternal","fieldEndOffset","fieldEndIndex","isForwardSelection","moveToInline","getNextValidOffset","nextValidInline","getNextValidElement","getStartLineOffset","inlineObj","updateOffsetToNextParagraph","moveToPreviousParagraphInTable","previousParagraph","currentPara","getPreviousSelectionCell","getPreviousParagraphBlock","isHighlight","getNextSelectionBlock","getContainerCellOf","getNextParagraphBlock","updateOffsetToPrevPosition","inlineInfo","getPreviousValidOffset","getPreviousSelectionBlock","previousInline","getPreviousValidElement","moveToNextParagraphStartInternal","movePreviousPosition","movePreviousPositionInternal","hasValidInline","moveBackward","nextInline","getNextRenderedElementBox","fieldBeginOffset","fieldBeginIndex","selectionStartIndex","selectionStartInlineObj","selectionStartInline","inlineObj_1","moveToWordStartInternal","getPreviousWordOffset","calculateOffset","getNextWordOffset","isInField","endSelection","excludeSpace","getNextWordOffsetSpan","getNextWordOffsetImage","getNextWordOffsetFieldBegin","getNextWordOffsetFieldSeperator","getNextWordOffsetFieldEnd","wordEndIndex","getPreviousWordOffsetSpan","getPreviousWordOffsetImage","getPreviousWordOffsetFieldBegin","getPreviousWordOffsetFieldSeparator","getPreviousWordOffsetFieldEnd","getPreviousWordOffsetBookMark","wordStartIndex","setPreviousWordOffset","validateForwardFieldSelection","selectionEndIndex","isPositionMoved","validateBackwardFieldSelection","paragraphStartInternal","moveToPreviousParagraph","moveToNextParagraphInTableCheck","paragraphValue","moveToParagraphStartInternal","moveToParagraphEndInternal","moveToNextParagraph","splittedParagraph","moveToNextParagraphInTable","moveToLineStartInternal","getFirstCellInRegion","lastParagraph","getLastParagraph","prevBlock","getLastBlockInLastCell","getLineWidgetParagraph","upDownSelectionLength","getLastCellInRegion","updateTextPositionWidget","moveToLineEndInternal","getFirstParagraph","getFirstBlockInFirstCell","moveToPreviousLine","getFirstElementInternal","getIndexInInline","prevInline","moveToWordEndInternal","incrementValue","getNextSelectionCell","moveUpInTable","lineStart","lastElement","isMoveToLineEnd","moveDownInTable","firstItemWidth","getLeftInternal","isPositionUpdated","isBackwardSelection","containerCell","getSelectedCell","isInContainerCell","containsCell","isContainerCellSelected","isAtParagraphStart","getContainerCell","isForward","SelectionWidgetInfo","widthIn","fieldBeginAdv","linkInternal","localRef","opensNewWindow","parseFieldValues","typeInternal","isLocalRef","parseFieldValue","setLinkType","endChar","navigationLink","imageContainer","documentEditor","isSkipLayouting","contextTypeInternal","skipFormatRetrieval","isMoveDownOrMoveUp","characterFormatIn","paragraphFormatIn","rowFormatIn","cellFormatIn","tableFormatIn","imageFormatInternal","htmlWriterIn","startInternal","endInternal","selectionStartPage","selectionEndPage","goToHeader","enableHeadersFootersRegion","goToFooter","closeHeaderFooter","disableHeaderFooter","goToPage","updateTextPositionForBlockContainer","selectTable","selectTableInternal","selectRow","selectTableRow","selectColumn","selectColumnInternal","selectCell","selectTableCell","toggleBold","toggleItalic","toggleUnderline","toggleStrikethrough","toggleHighlightColor","toggleSubscript","toggleSuperscript","toggleTextAlignment","increaseIndent","decreaseIndent","fireRequestNavigate","linkType","localReference","navigateBookmark","hyperLinkField","linkText","getLinkText","copyToClipboard","highlightSelection","isSelectionChanged","hideImageResizer","highlightSelectedContent","createHighlightBorder","selectionWidget","clipSelection","createHighlightBorderInsideTable","isVisiblePage","canvasContext","removeSelectionHighlight","pageRect","selectCurrentWordRange","fireSelectionChanged","wordStart","extendToParagraphStart","extendToParagraphEnd","updateForwardSelection","updateBackwardSelection","extendToPreviousLine","extendToLineEnd","extendToLineStart","firstrow","firstcell","selectionLength","isMovePrevious","cellStart","getCellLeft","cellEnd","cellLeft","firstBlock","getFirstParagraphBlock","lastrow","lastcell","moveToLineStart","moveToLineEnd","setPositionForBlock","lastPage","handleControlEndKey","documentEnd","selectContent","handleControlHomeKey","handleControlLeftKey","extendToWordStart","handleControlRightKey","extendToWordEnd","handleControlDownKey","handleControlUpKey","handleShiftLeftKey","extendBackward","handleShiftUpKey","handleShiftRightKey","extendForward","handleShiftDownKey","extendToNextLine","handleControlShiftLeftKey","handleControlShiftUpKey","handleControlShiftRightKey","handleControlShiftDownKey","handleLeftKey","handleUpKey","handleRightKey","handleEndKey","handleHomeKey","handleDownKey","handleShiftEndKey","handleShiftHomeKey","handleControlShiftEndKey","handleControlShiftHomeKey","handleTabKey","isNavigateInCell","isShiftTab","selectPreviousCell","selectNextCell","handleTextInput","updateListLevel","selectTableCellInternal","clearMultiSelection","firstParagraph","selectParagraph","firstLineWidget","firstPara","lastPara","getLastParagraphBlock","selectPosition","startTextPos","endTextPos","columnCells","startCellColumnCells","endCellColumnCells","startPos","endPos","getContainerWidget","extendToWordStartEnd","getTextPosition","includeObject","getTextInternal","startInlineObj","elementInfo","getRenderedInline","endInlineObj","endInline","getTextInline","nextParagraphWidget","endParagraphWidget","startLineIndex","getFieldCodeInternal","getTocFieldInternal","getNextParagraph","getPreviousParagraph","getFirstParagraphInCell","getLastParagraphInLastCell","getLastParagraphInFirstRow","getPreviousTextInline","getNextTextInline","cell1","cell2","isExistBeforeInline","currentInline","isExistAfterInline","getPreviousRenderedBlock","getNextParagraphCell","getFirstBlockInNextHeaderFooter","getLastBlockInPreviousHeaderFooter","getPreviousParagraphCell","endLine","getLineInfo","childLength","getElementInfo","getPreviousParagraphSelection","getFirstParagraphInLastRow","getPreviousSelectionRow","getNextParagraphSelection","getNextSelection","getNextSelectionRow","getCellInTable","getPreviousSelection","selLength","isMovePrev","validOffset","maxBaselineOffset","getPhysicalPositionInline","startInline","fieldValue","elementBoxObj","getElementBoxInternal","positionImageResizer","showImageResizer","highlightCell","startElement","endElement","endLineWidget","startLineObj","getStartLineWidget","endLineObj","getEndLineWidget","highlightParagraph","highlightNextBlock","highlightTable","getLineWidgetInternalInline","linewidget","highlightCells","endCellLeft","endCellRight","tableWidgetCollection","startTableIndex","endTableIndex","highlightRow","endRowIndex","highlightInternal","getNextParagraphRow","getPreviousParagraphRow","containsRow","highlightCellWidget","sourceCell","getSelectedCells","highlightContainer","previousValidInline","validateTextPosition","getElementBox","getFieldCharacterPosition","getNextLineWidget","getPreviousTextElement","getNextTextElement","measureObj","firstInline","getNextValidElementForField","getEndPosition","getRenderedField","elementObj","getCaretHeight","isEmptySelection","getFieldCharacterHeight","heightElement","maxLineHeight","paragarph","textSizeInfo","charHeight","isNonEmptySelection","clearChildSelectionHighlight","clearSelectionHighlightLineWidget","getLineWidgetParaWidget","getLineWidgetTableWidget","getLineWidgetRowWidget","leftCellSpacing","rightCellSpacing","topCellSpacing","bottomCellSpacing","getLineWidgetCellWidget","getFirstBlock","caretPosition","isImageSelectedObj","selectInternal","includeParagraphMark","elementValues","getFirstElement","textMetrics","isLineEnd","updatePositionObj","selectFirstBlock","selects","skipSelectionChange","retrieveCurrentFormatProperties","retrieveImageFormat","retrieveCharacterFormat","retrieveParagraphFormat","retrieveSectionFormat","retrieveTableFormat","imageFormat","setCurrentContextType","contextIsinImage","contextIsinTable","isInHeader","tableAdv","retrieveCellFormat","retrieveRowFormat","getCellFormat","getRowFormat","tempTableRow","startTable","endTable","startParaSection","endParaSection","startPageIndex","endPageIndex","getParagraphFormatForSelection","getParagraphFormatInternalInParagraph","getParagraphFormatInternalInCell","getParagraphFormatInternalInBlock","getParagraphFormatInternalInTable","getParagraphFormatInCell","getParagraphFormatInBlock","getParagraphFormatInParagraph","getParagraphFormatInTable","cellAdv","getParagraphFormatInRow","getParaFormatForCell","startCellIn","endCellIn","para","elemInfo","getCharacterFormatForSelection","getCharacterFormatInTableCell","getCharacterFormat","getCharacterFormatForTableRow","tableRowAdv","getCharacterFormatForSelectionCell","getCharacterFormatForBlock","getCharacterFormatInternalInTable","startIn","endIn","setCharacterFormat","isFieldStartSelected","fieldInline","getCharacterFormatInternal","inlineAndIndex","getNextValidCharacterFormatOfField","getNextValidCharacterFormat","getCharacterFormatInTable","top_4","copySelectionParagraphFormat","getHyperlinkDisplayText","isNestedField","displayText","toolTipElement","toolTipText","widgetTop","top_5","showToolTip","toolTipField","toolTipObject","cursorPosition","lineStartLeft","checkedFields","getHyperLinkFields","getHyperLinkFieldInternal","paragraphIsInFieldResult","inlineIsInFieldResult","getBlock","bodyIndex","getBlockInternal","fieldParagraph","selectionIndex","highlightListText","updateImageSize","getSelectedCellsInTable","startColumnIndex","endColumnIndex","startRowindex","copySelectedContent","isCut","htmlWriter","handleCut","removeAllRanges","createRange","selectNodeContents","addRange","copySuccess","execCommand","caretLeft","caretStartLeft","caretEndLeft","getSelectionPage","setStart","skipUpdate","paragraphInfo","caretHeightInfo","clearSearchHighlight","pagePoint","isCursorInHeaderRegion","moveToStart","bookmrkElmnt","bookmrkEnd","endoffset","selectBookmark","getTocField","tocPara","isTocStyle","TextSearchResult","TextSearchResults","innerList","addResult","textSearchResult","clearResults","TextSearch","find","findOption","findNext","hierarchicalPosition","stringToRegex","findDocument","currentSearchResult","textToFind","isPatternEmpty","wordEmpty","patternRegExp","findAll","isFirstMatch","hierachicalPosition","findInline","inlineEle","stringBuilder","spans","matchObject","spanKeys","spanLength","SearchWidgetInfo","leftInternal","widthInternal","textSearch","textSearchResults","findOptions","navigate","replaceAllInternal","textToReplace","replaceAll","replaceInternal","highlightResult","highlightSearchResult","addSearchResultItems","addFindResultView","addFindResultViewForSearch","suffixtext","boxObj","boxIndex","shiftIndex","replaceText","insertText","startTextPosition","endTextPosition","initComplexHistory","currentHistoryInfo","updateComplexHistory","updateComplexWithoutHistory","layoutViewer","wholeWord","regular","searchText","resultsText","messageDivText","replaceButtonText","replaceAllButtonText","occurrenceDivText","focusedIndex","isOptionsPane","replacePaneText","findPaneText","matchDivReplaceText","matchDivReplaceAllText","tabInstance","selectedTabItem","previousTab","nextTab","onFindPane","onReplacePane","searchOptionChange","clearSearchResultItems","inputText","searchInput","navigateSearchResult","messageDiv","localeValue","resultContainer","resultsListBlock","clearFocusElement","wholeWordsChange","matchInput","wholeInput","matchChange","onWireEvents","searchIcon","searchIconClickInternal","navigateToNextResult","navigateNextResultButtonClick","navigateToPreviousResult","navigatePreviousResultButtonClick","onEnableDisableReplaceButton","resultListBlockClick","closeButton","replaceButton","onReplaceButtonClick","replaceAllButton","onReplaceAllButtonClick","replaceDiv","occurrenceDiv","matchDiv","replaceTabContentDiv","findDiv","findTabButtonHeader","replaceTabButtonHeader","getMessageDivHeight","replaceWith","onKeyDownOnOptionPane","focusIndex","findText","selectionText","patterns","resultsContainerHeight","currentelement","listElementsDiv","listElements","currentlist","list_1","closeSpan","findTab","tabHeader","findTabButton","replaceTabButton","tabContent","findTabContent","findTabContentDiv","searchTextBoxContainer","replaceTabContent","createReplacePane","replaceHeader","replaceButtonDiv","emptyDiv6","currentIndexValue","optionPaneContainer","selectedText","resultListBox","addSearchHighlightBorder","highlighters","searchHighlight","highlightSearchResultParaWidget","findHighLight","regularInput","TableResizer","resizeNode","resizerPosition","currentResizingTable","initResizingHistory","getRowReSizerPosition","getCellReSizerPosition","getTableWidget","startingPointX","resizerBoundaryWidth","getCellReSizerPositionInternal","childTableWidget","getTableWidgetFromWidget","childCellWidget","getActualWidth","resizeTableCellColumn","resizeTableRow","reLayout","selectionFlag","setPreferredWidth","newIndent","resizeColumnWithSelection","rightColumn","prevDragValue","dragOffset","updateCellPreferredWidths","updateGridValue","resizeColumnAtLastColumnIndex","resizeCellAtMiddle","selectedCells","resizeColumnAtStart","leftColumnCollection","getColumnCells","increaseOrDecreaseWidth","updateRowsGridAfterWidth","rightColumnCollection","isColumnResizing","isColumnSelected","changeWidthOfCells","selectedRow","newGridBefore","updateGridBefore","leastGridBefore","getLeastGridBefore","updateWidthForCells","hasTableWidth","leftColumn","isContinue","isLeftSideCollection","ignoreRow","isIncrease","minimumWidth","isSelection","currentRowWidth","getRowWidth","toUpdateGridAfter","leftColumnCells","rightColumnCells","columnCell","applyProperties","tableHistoryInfo","isAutoFit","updateGridBeforeWidth","updateGridAfterWidth","editHyperlinkInternal","isHandledComplex","refListNumber","incrementListNumber","removedBookmarkElements","pageRefFields","isBordersAndShadingDialog","nbsp","lineFeed","textBoxText","handleBackKey","insertField","fieldCodeSpan","fieldResultSpan","pasteContentsInternal","getPrefixAndSuffix","boxInfo","spaceIndex","prefixAdded","endInlineInfo","suffixAdded","toggleBaselineAlignment","acceptTab","handleEnterKey","handleDelete","handleShiftEnter","onBackSpace","onDelete","onEnter","animationTimer","copyInsertFormat","insertFormat","sFormat","insertPosition","isRemoved","getParagraphInfo","editPosition","removeSelectedContents","updateInsertPosition","insertTextInline","tempSpan","splittedSpan","updateEndPosition","isSelectionOnHyperlink","checkAndConvertList","checkAndConvertToHyperlink","isTab","convertList","isLeadingZero","tabValue","previousText","checkNumberFormat","checkLeadingZero","deleteSelectedContents","leadingZeroText","autoConvertList","newAbstractList","isBullet","isZero","getPageFromBlockWidget","insertImageText","insertFieldBeginText","insertFieldSeparatorText","insertFieldEndText","insertBookMarkText","spanObj","spanIndex","previousInlineObj","nextInlineObj","isEnter","tabCharIndex","lowerCaseText","containsURL","atIndex","dotIndex","autoFormatHyperlink","blockInfo","createHyperlinkElement","appylingHyperlinkFormat","updateCharacterFormatWithUpdate","initInsertInline","insertHyperlinkfield","isBookmark","unLinkFieldCharacter","fieldIndex","insertHyperlink","insertHyperlinkInternal","fieldStartPosition","insertHyperlinkByFormat","insertElement","insertInlineInSelection","insertElementInCurrentLine","isReLayout","checkIsNotRedoing","checkEndPosition","updateHistoryPosition","fieldResult","fieldObj","newFieldBegin","insertInlineInternal","removedNodes","insertClonedFieldResult","getClonedFieldResultWithSel","getClonedFieldResult","insertParagraph","insertBlock","curParagraph","fieldSeparatorPosition","pasteWindow","pasteLocal","pasteContents","getBlocks","pasteContent","insertParaFormat","removeSelectedContentInternal","pasteCopiedData","newParagraph","insertTableRows","insertBlockInternal","insertTableInternal","moveRows","removeBlock","updateNextBlocksIndex","insertBlockTable","moveInlines","checkInsertPosition","deleteSelectedContent","curInline","insertElementInternal","prevElement","relayout","startPara","insertNewParagraphWidget","insertImage","insertPicture","createTable","startLine","above","rowPlacement","getOwnerCell","cloneTableToHistoryInfo","getRowCountToInsert","isAffectedByRowSpannedCell","cellCountInfo","updateRowspan","newRow","createRowAndColumn","updateCellFormatForInsertedRow","cellFormats","isCellIncluded","isRowSpanned","clonedRowIndex","columnPlacement","newCell","getColumnCountToInsert","createColumn","isCellInserted","rowCell","getOwnerRow","endRow","getOwnerTable","mergeSelectedCellsInTable","startOwnerCell","endOwnerCell","mergedCell","mergeSelectedCells","cellInfo","updateSelectedCellsInTable","rowStartIndex","mergeBorders","updateBlockIndexAfterMerge","mergedCellborders","cellBorders","startCellIndex","canMergeSelectedCellsInTable","startLeft","endLeft","selectionLeft","selectionRight","isRowLeftWithinSel","isRowRightWithinSel","rowLeft","rowRight","checkCellWithInSelection","isPrevCellWithinSel","checkPrevOrNextCellIsWithinSel","isNextCellWithinSel","isNoRowSpan","isCellWithInSel","checkCurrentCell","checkCellWidth","isPrev","prevOrNextCell","isPrevCellWithInSel","cellOwner","spannedCellOwner","checkRowSpannedCells","insertIndex_1","isMoved","moveContent","removeEmptyLine","updateHeaderFooterWidget","isHandledComplexHistory","updateHeaderFooterWidgetToPage","shiftPageContent","isEvenPage","updateHeaderFooterWidgetToPageInternal","hfWidget","headerOrFooter","checkAndShiftFromBottom","applyCharacterFormatForListText","updateSelectionCharacterFormatting","applyListCharacterFormatByValue","applyCharFormatValue","updateListCharacterFormat","updateListTextSelRange","startPositionInternal","endPositionInternal","initHistoryPosition","startSelectionReLayouting","currentList","clearList","applyBullet","bullet","applyBulletOrNumbering","applyNumbering","baseAlignment","updateProperty","clearFormatting","initializeHistory","updateParagraphFormatInternal","currentUnderline","script","getCompleteStyles","completeStylesString","existingStyles","styleNames_1","getUniqueStyleName","uniqueName","getUniqueName","matchArray","updateCharacterFormat","applyCharFormatSelectedContent","applyCharFormat","applyCharFormatCell","applyCharFormatForSelectedPara","splittedLastParagraph","splittedWidets","getNextParagraphForCharacterFormatting","widgetCollection","applyCharFormatForTable","inlineLength","applyCharFormatInline","getCurrentSelectionValue","updateFontSize","fontsizeCollection","formatInline","getCharacterFormatValueOfCell","applyCharFormatForSelectedCell","applyCharFormatRow","applyCharFormatForTableCell","applyCharFormatForSelTable","startCellLeft","startCellRight","applyCharFormatValueInternal","copyInlineCharacterFormat","destFormat","addModifiedProperties","modifiedFormat","getIndentIncrementValue","applyParaFormatProperty","layoutItemBlock","updateSelectionParagraphFormatting","increaseLevel","incrementFactor","currentParagraphIndent","getIndentIncrementValueInternal","fPosition","updateParagraphFormat","applyParaFormatSelectedContent","applyCharacterStyle","applyParaFormat","applyParaFormatInCell","addModifiedPropertiesForParagraphFormat","copyParagraphFormat","copyFromListLevelParagraphFormat","onListFormatChange","updateListParagraphFormat","listlevel","oldFormat","newFormat","applyContinueNumberingInternal","numberingInfo","getContinueNumberingInfo","getParagraphFormat","listPattern","changeListId","revertContinueNumbering","levelNum","listType","baseHistoryInfo","addModifiedPropertiesForContinueNumbering","checkNumberArabic","restartListAt","createListLevels","restartListAtInternal","changeRestartNumbering","addModifiedPropertiesForRestartNumbering","levelPatterns","indexOfLevelPattern","getNextParagraphForFormatting","cellContainer","getParaFormatValueInCell","applyParaFormatCellInternal","applyParagraphFormatRow","applyParaFormatTableCell","wCell","applyParagraphFormatTableInternal","wRow","applyParaFormatTable","updateSectionFormat","startSectionIndex","endSectionIndex","applyPropertyValueForSection","getTableFormatAction","applyTablePropertyValue","updateSelectionTableFormat","getRowAction","applyRowPropertyValue","getTableCellAction","applyCellPropertyValue","addModifiedPropertiesForSection","startInfo","endInfo","combineSection","nextSection","combineSectionChild","updateTableFormat","updateCellFormat","updateRowFormat","tableStartPosition","newStartPosition","updateFormatForCell","rowStartPosition","rowEndPosition","applyRowFormat","reLayoutSelectionOfTable","reLayoutSelection","isEnded","reLayoutSelectionOfBlock","removeSelectedContent","editAction","deletePara","deleteTableCell","getParagraphForSelection","deleteCells","removeRow","updateTable","paragraphStart","endParagraphStartOffset","isCombineNextParagraph","lastLinelength","isEndInAdjacentTable","isStartParagraph","removeInlines","deleteBlock","insertParagraphPaste","addRemovedNodes","checkAndInsertBlock","paragraphAdv","removeField","deleteTableBlock","deletePreviousBlock","updateEditPosition","deleteCellsInTable","deleteCell","deleteContainer","isDeleteCells","cell_1","setActionInternal","copyChildToClipboard","checkClearCells","deleteContent","splitTable","splitEndRow","enableHistoryMode","clonedTable","deleteParagraphMark","removeContent","copyListLevel","listParagraphs","updateListParagraphsInBlock","startListLevel","tempList","abstractListAdv","listName","bulletCharacters","initialStart","splitParagraphInternal","increaseIndex","currentSectionIndex","updateIndex","singleBackspace","skipBackSpace","insertRemoveBookMarkElements","bookMark","bookMarkStart","bookMarkEnd","isBackSpace","deleteSelectedContentInternal","getParagraph","historyInfo","startBlockInfo","endBlockInfo","currentLineWidget","setPositionForHistory","removeAtOffset","singleDelete","nextRenderedInline","bookMarkBegin","paraEndOffset","singleDeleteInternal","updateEditPositionOnMerge","imageElementBox","insertPictureInternal","fitImageToPage","onPortrait","onLandscape","copyValues","changeMarginValue","onPaperSize","currentBlock","updateListItems","updateListItemsForPara","updateListItemsForTable","updateListItemsForRow","updateListItemsForCell","updateRenderedListItemsForPara","updateRenderedListItemsForTable","updateRenderedListItemsForRow","updateRenderedListItemsForCell","getParagraphInfoInternal","lineOffset","insertPageNumber","createFields","insertPageCount","fieldtext","insertBookmark","bookmarkEnd","insertElements","updateComplexHistoryInternal","deleteBookmark","bookmarkName","setBookmarkInfo","deleteBookmarkInternal","getSelectionInfo","startElementInfo","endElementInfo","endElements","startElements","insertElementsInternal","hfString","getBodyWidget","getBlockByIndex","blockObj","getParagraphInternal","getHeaderFooterWidget","getBodyWidgetInternal","isInsertPosition","applyBorders","getBorder","clearAllBorderValues","selectedCell","getTopBorderCellsOnSelection","getLeftBorderCellsOnSelection","getRightBorderCellsOnSelection","getBottomBorderCellsOnSelection","getAdjacentCellToApplyBottomBorder","clearBorder","getAdjacentCellToApplyRightBorder","applyAllBorders","applyInsideBorders","updateGridForTableDialog","borderType","isLastSelectedRow","isLastRightCell","nextRowIndex","getAdjacentBottomBorderOnEmptyCells","rightBorderCells","getSelectedCellsNextWidgets","topBorderCells","leftBorderCells","bottomBorderCells","nextCellColIndex","isSingleCell","startPosIn","endPosIn","applyBordersInternal","applyBorder","applyShading","onTableFormat","applyTableFormat","addModifiedTableProperties","handleTableFormat","applyFormat","shiftNextItem","onRowFormat","rowStartPos","rowEndPos","addModifiedRowProperties","handleRowFormat","onCellFormat","updateCellMargins","cellStartPosition","cellEndPosition","applyCellmarginsValue","getSelectedCellInColumn","rowEndIndex","addModifiedCellProperties","handleCellFormat","isTocField","tocField","insertTableOfContents","validateTocSettings","getTocSettings","tocSettings","includePageNumber","rightAlign","startLevel","endLevel","swtiches","swtch","includeHyperlink","includeOutlineLevels","decodeTSwitch","tSwitch","levelSettings","tableOfContentsSettings","constructTocFieldCode","buildToc","tocLastPara","tocLastLine","appendEndField","appendEmptyPara","updatePageRef","emptyPara","emptyLine","tocFieldCode","constructTSwitch","isFirstPara","tocDomBody","createHeadingLevels","createOutlineLevels","isHeadingStyle","isOutlineLevelStyle","insertTocBookmark","createTOCWidgets","levelStyle","headingStyle","createTocFieldElement","tocLine","headingStyleName","tocStyleName","insertTocHyperlink","pageField","insertTocPageNumber","bookMarkname","isRightAlign","pageRef","generateBookmarkName","ModifiedLevel","ownerListLevelIn","modifiedListLevelIn","ownerListLevel","modifiedListLevel","ModifiedParagraphFormat","ownerFormat","ownerFormatIn","modifiedFormatIn","RowHistoryFormat","rowHeightType","revertChanges","currentRowHeightType","TableHistoryInfo","TableFormatHistoryInfo","copyProperties","RowFormatHistoryInfo","CellFormatHistoryInfo","tableHierarchicalIndex","CellHistoryFormat","BaseHistoryInfo","ownerIn","modifiedPropertiesIn","modifiedNodeLength","removedNodesIn","actionIn","selectionStartIn","selectionEndIn","insertPositionIn","endPositionIn","revertBookmark","bookmarkInfo","recordChanges","revert","selectionStartTextPosition","selectionEndTextPosition","revertModifiedProperties","deletedNodes","insertTextPosition","isRemoveContent","isRedoAction","revertModifiedNodes","isDelete","revertResizing","revertTableDialogProperties","revertProperties","redoAction","lastNode","insertRemovedNodes","prevTableHistoryInfo","tableHistoryInfoCurrent","currentPropertyIndex","applyTableOptionsHelper","previousFormat","currentFormat","skipRemove","nextFormat","addModifiedPropertiesForList","previousLevel","modifiedLevel","updateListChanges","addModifiedCellOptions","copyCellOptions","addModifiedTableOptions","copyTableOptions","getCharacterPropertyValue","previousTableFormat","resizeContainerDiv","topLeftRect","topMiddleRect","topRightRect","bottomLeftRect","bottomMiddleRect","bottomRightRect","leftMiddleRect","rightMiddleRect","topLeftRectParent","topMiddleRectParent","topRightRectParent","bottomLeftRectParent","bottomMiddleRectParent","bottomRightRectParent","leftMiddleRectParent","rightMiddleRectParent","resizeMarkSizeIn","selectedImageWidget","imageResizerPoints","ImageResizingPoints","imageResizerDiv","currentImageElementBoxIn","imageResizerDivElement","resizeDiv","initResizeMarks","currentImageElementBox","currentPageDiv","currentPageDivWidth","currentPageDivHeight","imageResizerDivWidth","imageResizerDivHeight","resizeMarkSize","setImageResizerPosition","selectedImageInfo","SelectedImageInfo","initResizeContainerDiv","setImageResizingPoints","applyPropertiesForTouch","applyPropertiesForMouse","resizeRectElement","boxShadow","handleImageResizing","topRightResizing","topLeftResizing","topMiddleResizing","bottomRightResizing","bottomLeftResizing","leftMiddleResizing","widgetHeight","initHistoryForImageResizer","getOuterResizingPoint","getInnerResizingPoint","touchEvent","imageResizingPoints","bottomMiddle","topMiddle","rightMiddle","leftMiddle","touchPoints","imageResizingPointsOnTouch","HistoryInfo","isChildHistoryInfo","modifiedActions","addModifiedAction","undoStackIn","redoStackIn","historyInfoStack","modifiedParaFormats","undoLimitIn","redoLimitIn","rowHistoryFormat","cellHistoryFormat","redoLimit","undoLimit","clearRedoStack","hasAction","modifiedLevelsInternal","modifiedCollection","revertListChanges","clearHistory","clearUndoStack","documentPath","stylePath","numberingPath","settingsPath","headerPath","footerPath","imagePath","appPath","corePath","contentTypesPath","generalRelationPath","wordRelationPath","headerRelationPath","footerRelationPath","xmlContentType","fontContentType","documentContentType","settingsContentType","footerContentType","headerContentType","numberingContentType","stylesContentType","webSettingsContentType","appContentType","coreContentType","customContentType","customXmlContentType","relationContentType","tableStyleContentType","settingsRelType","footerRelType","headerRelType","documentRelType","numberingRelType","stylesRelType","fontRelType","tableStyleRelType","coreRelType","appRelType","customRelType","imageRelType","hyperlinkRelType","controlRelType","packageRelType","customXmlRelType","customUIRelType","attachedTemplateRelType","wNamespace","wpNamespace","pictureNamespace","aNamespace","a14Namespace","rNamespace","rpNamespace","vNamespace","oNamespace","xmlNamespace","w10Namespace","cpNamespace","dcNamespace","docPropsNamespace","veNamespace","mNamespace","wneNamespace","customPropsNamespace","vtNamespace","chartNamespace","slNamespace","dtNamespace","wmlNamespace","w14Namespace","wpCanvasNamespace","wpDrawingNamespace","wpGroupNamespace","wpInkNamespace","wpShapeNamespace","w15Namespace","diagramNamespace","eNamespace","pNamespace","certNamespace","cRelationshipsTag","cRelationshipTag","cIdTag","cTypeTag","cTargetTag","cUserShapesTag","cExternalData","twipsInOnePoint","twentiethOfPoint","borderMultiplier","percentageFactor","emusPerPoint","cConditionalTableStyleTag","cTableFormatTag","cTowFormatTag","cCellFormatTag","cParagraphFormatTag","cCharacterFormatTag","packageType","relsPartPath","documentRelsPartPath","webSettingsPath","wordMLDocumentPath","wordMLStylePath","wordMLNumberingPath","wordMLSettingsPath","wordMLHeaderPath","wordMLFooterPath","wordMLCommentsPath","wordMLImagePath","wordMLFootnotesPath","wordMLEndnotesPath","wordMLAppPath","wordMLCorePath","wordMLCustomPath","wordMLFontTablePath","wordMLChartsPath","wordMLDefaultEmbeddingPath","wordMLEmbeddingPath","wordMLDrawingPath","wordMLThemePath","wordMLFontsPath","wordMLDiagramPath","wordMLControlPath","wordMLVbaProject","wordMLVbaData","wordMLVbaProjectPath","wordMLVbaDataPath","wordMLWebSettingsPath","wordMLCustomItemProp1Path","wordMLFootnoteRelPath","wordMLEndnoteRelPath","wordMLSettingsRelPath","wordMLNumberingRelPath","wordMLFontTableRelPath","wordMLCustomXmlPropsRelType","wordMLControlRelType","wordMLDiagramContentType","lastSection","mRelationShipID","mDocPrID","mDifferentFirstPage","mBookmarks","mDocumentImages","mExternalLinkImages","mHeaderFooterImages","mHeaderFooterColl","mArchive","clearDocument","setDocument","compressionLevel","mVerticalMerge","mGridSpans","serializeDocument","serializeStyles","serializeNumberings","serializeSettings","serializeCoreProperties","serializeAppProperties","serializeFontTable","contenttype","serializeSettingsRelation","serializeHeaderFooters","serializeDocumentRelations","serializeGeneralRelations","serializeContentTypes","mSections","mLists","mAbstractLists","defCharacterFormat","defParagraphFormat","defaultTabWidthValue","mStyles","blockOwner","writeCommonAttributeStrings","serializeDocumentBody","archiveItem","writeCustom","writeDup","serializeBodyItems","serializeSectionProperties","serializeHFReference","serializeSectionType","serializePageSetup","serializeColumns","pageSetup","serializePageSize","serializePageMargins","roundToTwoDecimal","sectionBreakCode","hfId","hf","getNextRelationShipID","addHeaderFooter","hfType","hfColl","blockCollection","isLastSection","serializeBodyItem","serializeParagraphItems","paraItems","serializeFieldCharacter","serializePicture","serializeBookMark","serializeTextRange","bookmarkId","getBookmarkId","serializeDrawing","serializeInlinePicture","serializeDrawingGraphics","sourceString","startString","picture","updateShapeId","documentImages","externalImages","tOwner","updateHFImageRels","addImageRelation","imageCollection","relationId","headerId","hfKeys","headerImages","headerFooterImages","serializeTableFormat","serializeTableGrid","serializeTableRows","serializeGridColumns","serializeRowFormat","serializeCells","pointWidth","serializeCellFormat","serializeCellWidth","serializeCellMerge","serializeGridSpan","serializeBorders","serializeShading","serializeTableCellDirection","serializeCellVerticalAlign","cf","collKey","isserialized","createMerge","serializeColumnSpan","checkMergeCell","gridValue","serializeTableWidth","serializeTableAlignment","serializeCellSpacing","serializeTableIndentation","serializeTableBorders","serializeTblLayout","getTextureStyle","multipler","serializeBorder","sz","getBorderStyle","tableIndent","isField","serializeListFormat","serializeParagraphSpacing","serializeIndentation","serializeParagraphAlignment","serializeTabs","serializeTab","getTabJustification","txtAlignment","serializeDefaultStyles","serializeDocumentStyles","zipArchiveItem","serializeBoolProperty","getHighlightColor","getUnderlineStyle","underlineStyle","serializeAbstractListStyles","serializeListInstances","listStyles","generateHex","ilvl","serializeListLevel","levelIndex","getLevelPattern","serializeLevelFollow","serializeLevelText","patternType","lvlIndex","fc","tabWidth","serializeHeaderFooter","headerFooterPath","headerFooterRelsPath","serializeHeader","serializeFooter","writeHFCommonAttributes","serializeHFRelations","serializeImagesRelations","serializeRelationShip","serializeHeaderFooterRelations","base64ImageString","formatClippedString","imageBlob","enc4","serializeExternalLinkImages","serializeHFRelation","relType","relationshipID","relationshipType","targetPath","resetRelationShipID","serializeDefaultContentType","serializeOverrideContentType","serializeHFContentTypes","serializeHeaderFootersContentType","partName","curSectionIndex","inField","updateLastParagraph","writeBody","writeNewLine","writeSectionEnd","writeHeadersFooters","bodyItemsCount","bodyItem","isLastPara","writeParagraph","writeTable","paragraphs","pCount","writeInlineStyles","writeParagraphFormat","endPara","createSection","createParagraph","writeBodyWidget","writeStyles","writeLists","writeHeaderFooters","writeBlock","writeHeaderFooter","writeNextBlock","writeLines","writeInlines","writeInline","isEnd","started","writeListFormat","writeTabs","listIdValue","writeRow","createRow","writeCell","createCell","writeTableFormat","writeRowFormat","writeCellFormat","writeShading","wShading","writeBorder","wBorder","writeBorders","wBorders","wCellFormat","wRowFormat","wTableFormat","writeStyle","writeList","writeAbstractList","wAbstractList","writeListLevel","wList","wListLevel","navigationUrl","bookmarkDropdown","bookmarkCheckbox","onKeyUpOnUrlBox","urlValue","urlTextBox","displayTextBox","enableOrDisableInsertButton","onInsertHyperlink","onKeyUpOnDisplayBox","onInsertButtonClick","onCancelButtonClick","dialog","clearValue","loadHyperlinkDialog","localObj","bookmarkDiv","addressText","insertButton","closeHyperlinkDialog","onUseBookmarkChange","onBookmarkchange","autofocus","bookmarkText","bookmarkTextElement","bookmarkValue","bookmarkCheckDiv","bookmarkCheck","address","keyUpInsertTable","rowsCountBox","columnsCountBox","onInsertTableClick","rowValueTextBox","columnValueTexBox","columnContainer","columnValue","rowContainer","rowValue","addBookmark","textBoxInput","selectHandler","gotoBookmark","initBookmarkDialog","dlgFields","commonDiv","textBoxDiv","listviewDiv","listviewInstance","buttonDiv","addbuttonDiv","addButtonElement","deleteButtonDiv","deleteButtonElement","gotoButtonDiv","gotoButtonElement","removeObjects","loadTableofContentDialog","showLevel","closeTableOfContentDialog","unWireEventsAndBindings","changeShowLevelValue","changeByValue","headings","heading1","heading2","heading3","heading4","heading5","heading6","heading7","heading8","heading9","normal","changeStyle","headingValue","getElementValue","checkLevel","changeHeadingStyle","changePageNumberValue","changeRightAlignValue","changeStyleValue","applyTableOfContentProperties","applyLevelSetting","ownerId","generalDiv","genLabel","leftGeneralDiv","rightGeneralDiv","leftBottomGeneralDiv","rightBottomGeneralDiv","pageNumberDiv","rightAlignDiv","tabDiv","tabLeaderLabelDiv","tabLeaderLabel","tabLeaderDiv","showDiv","showLevelLabelDiv","showLevelLabel","showLevelDiv","buildTableDiv","buildTableLabel","tr1","td1","availableLabel","td2","tocLabel","tableDiv","table1","tr2","td3","heading1Label","td4","tr3","td5","heading2Label","td6","tr4","td7","heading3Label","td8","tr5","td9","heading4Label","td10","tr6","td11","heading5Label","td12","tr7","td13","heading6Label","td14","tr8","td15","heading7Label","td16","tr9","td17","heading8Label","td18","tr10","td19","heading9Label","td20","tr12","td23","normalLabel","td24","stylesLevelDiv","fieldsDiv","outDiv","outlineDiv","resetButtonDiv","resetElement","tocStylesDiv","tocStylesLabel","listViewDiv","modifyButtonDiv","modifyElement","getHeadingLevel","newStartLevel","newEndLevel","isEndLevel","isPortrait","loadPageSetupDialog","topMarginBox","leftMarginBox","bottomMarginBox","rightMarginBox","widthBox","heightBox","checkBox1","checkBox2","headerBox","footerBox","landscape","portrait","closePageSetupDialog","keyUpInsertPageSettings","applyPageSetupProperties","changeByPaperSize","paperSize","ejtabContainer","marginTab","paperTab","layoutTab","ejtab","marginHeader","paperHeader","layoutHeader","marginContent","paperContent","layoutContent","initMarginProperties","initPaperSizeProperties","initLayoutProperties","tabObj","marginDiv","leftMarginDiv","rightMarginDiv","topLabel","topTextBox","bottomBoxLabel","bottomTextBox","leftBoxLabel","leftTextBox","rightLabel","rightTextBox","orientationDiv","orientationLabeldiv","orientationPropDiv","portraitDiv","landscapeDiv","sizeDiv","leftSizeDiv","rightSizeDiv","widthLabel","widthTextBox","heightLabel","heightTextBox","paperSizeDiv","layoutDiv","firstPageDiv","oddOrEvenDiv","textLabelDiv","propertyDiv","leftLayoutDiv","rightLayoutDiv","headerLabel","footerLabel","keyUpParagraphSettings","applyParagraphFormat","changeBeforeSpacing","changeAfterSpacing","changeLeftIndent","changeRightIndent","changeLineSpacingValue","changeFirstLineIndent","changeByTextAlignment","special","byIn","changeBySpacing","atIn","loadParagraphDialog","selectionFormat","alignValue","lineSpaceValue","isApply","onParagraphFormat","closeParagraphDialog","alignLabel","indentionDiv","leftIndentionDiv","rightIndentionDiv","spacingDiv","leftSpacingDiv","rightSpacingDiv","indentLabel","beforeTextLabel","specialLabel","afterTextLabel","byLabel","by","spaceLabel","beforeLabel","lineSpaceLabel","afterLabel","atLabel","lineSpacingAt","local","ListViewModel","listIn","levelNumberIn","listLevelAdv","viewModel","alignedAt","listLevelElement","followNumberWith","restartBy","isListCharacterFormat","onTextIndentChanged","onStartValueChanged","onListLevelValueChanged","updateDialogValues","updateRestartLevelBox","onNumberFormatChanged","onAlignedAtValueChanged","onFollowCharacterValueChanged","onLevelPatternValueChanged","numberFormatTextBox","loadListDialog","dialog2","disposeBindingForListUI","closeListDialog","listLevelDiv","numberStyleDiv","numberFormatDiv","indentsDiv","startAtTextBox","textIndentAtTextBox","alignedAtTextBox","followCharacterElement","numberStyleEle","restartElement","formatInfoToolTip","option_1","listPatternConverter","followCharacterConverter","styleBasedOn","styleParagraph","onlyThisDocument","openDialog","showNumberingBulletDialog","setBoldProperty","fontButtonClicked","setItalicProperty","setUnderlineProperty","fontSizeUpdate","fontFamilyChanged","fontColorUpdate","setLeftAlignment","setRightAlignment","setCenterAlignment","setJustifyAlignment","increaseBeforeAfterSpacing","decreaseBeforeAfterSpacing","updateNextStyle","typedName","getTypeValue","isUserNextParaUpdated","isEdit","editStyleName","updateOkButton","enableOrDisableOkButton","styleTypeChange","toggleDisable","updateStyleNames","styleBasedOnChange","styleParagraphChange","numberingBulletDialog","showNumberBulletDialog","onOkButtonClick","styleNameElement","createLinkStyle","loadStyleDialog","okButton","closeStyleDialog","styleNameTypeDiv","nameWholeDiv","nameValue","styleTypeWholeDiv","styleTypeDivElement","styleTypeValue","styleBasedParaDiv","styleBasedOnWholeDiv","styleBasedOnDivElement","styleBasedOnValue","styleParagraphWholeDiv","styleParagraphDivElement","styleParagraphValue","formatting","optionsDiv","fontOptionsDiv","createFontOptions","paragraphOptionsDiv","createParagraphOptions","createFormatDropdown","formatBtn","dropDownbtn","fontFamilyElement","fontSizeElement","fontGroupButton","createButtonElement","fontColorElement","alignmentDiv","leftAlign","centerAlign","lineSpacingDiv","singleLineSpacing","onePointFiveLineSpacing","doubleLineSpacing","indentingDiv","buttonElement","paragraphFOrmat","nxtName","basedOnIndex","numberListClick","setActiveElement","bulletListClick","loadNumberingBulletDialog","closeNumberingBulletDialog","initNumberingBulletDialog","tabTarget","createNumberList","createBulletList","numberListDiv","ulTag","numberedNone","createNumberNoneListTag","numberedNumberDot","createNumberListTag","numberedNumberBrace","numberedUpRoman","numberedUpLettter","numberedLowLetterDot","numberedLowLetterBrace","numberedLowRoman","text1","text3","liTag","liInnerDiv","createBulletListTag","liNextDiv","bulletListDiv","bulletNone","bulletDot","bulletCircle","bulletSquare","bulletFlower","bulletArrow","bulletTick","fontStyleInternal","fontNameList","fontStyleText","fontSizeText","colorPicker","underlineDrop","strikethroughBox","doublestrikethrough","superscript","subscript","loadFontDialog","closeFontDialog","onInsertFontFormat","onCharacterFormat","fontStyleUpdate","fontFamilyUpdate","underlineUpdate","singleStrikeUpdate","enableCheckBoxProperty","doubleStrikeUpdate","superscriptUpdate","subscriptUpdate","effectLabel","strikeThroughElement","superScriptElement","subScriptElement","doubleStrikeThroughElement","fontDiv","getFontDiv","getFontSizeDiv","colorDiv","fontColorDiv","fontColorLabel","fontEffectsDiv","fontEffectSubDiv1","fontEffectSubDiv2","sizeSubDiv1","sizeLabel","underlineElement","sizeSubDiv2","underlineLabel","fontSubDiv1","fontNameLabel","fontNameValues","fontSubDiv2","fontStyleLabel","fontStyleValues","hasCellWidth","isTableBordersAndShadingUpdated","isCellBordersAndShadingUpdated","isCellOptionsUpdated","isTableOptionsUpdated","onBeforeOpen","loadTableProperties","onCloseTablePropertyDialog","applyTableProperties","preferCheckBox","rowHeightCheckBox","preferredCellWidthCheckBox","rowHeightValue","closeTablePropertiesDialog","applyTableSubProperties","applySubCellOptions","applySubTableOptions","tableWidthBox","tableWidthType","leftIndentBox","rowHeightBox","allowRowBreak","cellWidthBox","cellWidthType","changeTableCheckBox","changeTableAlignment","updateClassForAlignmentProperties","tableTab","getTableAlignment","changeTableRowCheckBox","changeTableCellCheckBox","changeCellAlignment","updateClassForCellAlignment","cellTab","getCellAlignment","showBordersShadingsPropertiesDialog","rowFormatInternal","rowTab","separatorLine","tableHeader","rowHeader","cellHeader","tableContent","rowContent","cellContent","initTableProperties","initTableRowProperties","initTableCellProperties","alignMentButtons","cellAlignment","calculateGridValue","setTableProperties","setTableRowProperties","setTableCellProperties","bordersAndShadingButton","tableOptionButton","cellOptionButton","onTableWidthChange","onTableWidthTypeChange","onLeftIndentChange","onRowHeightChange","onRowHeightTypeChange","onAllowBreakAcrossPage","onRepeatHeader","onCellWidthChange","onCellWidthTypeChange","sizeHeader","parentContainer","childContainer1","childContainer2","childContainer3","controlDiv","labeltext","alignmentHeader","alignmentContainer","classDivName","leftAlignDiv","centerAlignDiv","leftlabel","centerlabel","rightlabel","leftIndenetContainer","leftIndentLabel","tableOptionContiner","formatNumericTextBox","tableHasWidth","groupButtons","groupButton","sizeLabeldiv","childDiv1","childdiv2","child3","child4","allowRowContainer","repeatHeaderContaniner","enableRowHeight","parentdiv","childdiv1","preferredCellWidth","divAlignment","divStyle","topAlignDiv","cellTopAlign","cellCenterAlign","bottomAlignDiv","cellBottomAlign","centerLabel","bottomLabel","cellAlignments","applyBordersShadingsProperties","tablePropertiesDialog","checkClassName","previewDivTopTop","previewDivTopBottom","previewDivTopCenter","previewDivBottomcenter","previewDivBottomLeft","previewDivBottomRight","previewDivDiagonalRight","previewDivLeftDiagonal","shadingColorPicker","ulelementShading","applyTo","noneDiv","currentTableFormat","closeDialog","closeBordersShadingsDialog","handleSettingCheckBoxAction","tableBorderDialogId","updateClassForSettingDivElements","setSettingPreviewDivElement","boxDiv","allDiv","customDiv","handlePreviewCheckBoxAction","compareClass","handlePreviewCheckBoxShowHide","showHidePreviewDivElements","applyTableCellPreviewBoxes","previewDivBottomcenterContainer","previewDivTopCenterContainer","previewVerticalDiv","previewHorizontalDiv","previewDivBottomRightContainer","applyPreviewTableBackgroundColor","previewDiv","applyPreviewTableBorderColor","previewRightDiagonalDiv","previewLeftDiagonalDiv","settingsContiner","styleContainer","previewContiner","styleText","dropDownList","widthText","widthNumeric","colorText","borderColorPickerElement","settingText","noneDivContainer","noneDivLabel","boxDivContainer","boxDivLabel","allDivContainer","allDivLabel","customDivContainer","customDivLabel","noneDivTransparent","boxDivTransparent","allDivTransparent","customDivTransparent","previewText","previewDivTopTopContainer","previewDivTopBottomContainer","previewDivLeftDiagonalContainer","previewDivBottomLeftContainer","previewDivDiagonalRightContainer","previewDivTopTopTransParent","previewDivTopCenterTransParent","previewDivTopBottomTransParent","previewDivLeftDiagonalTransParent","previewDivBottomLeftTransparent","previewDivBottomcenterTransparent","previewDivBottomRightTransparent","previewDivDiagonalRightTransparent","shadingContiner","shadingText","shadings","shadingColorPickerElement","shdApply","divsion","borderColorPicker","loadBordersShadingsPropertiesDialog","settingDivs","tempClassName","isShowHidePreviewTableElements","settingDiv","compareElementClass","setElement","compareElement","setPropertyPreviewDivElement","getLineStyle","colorPickerEvent","fillColorEvent","applyTableCellProperties","cellSpaceTextBox","applyTableOptions","closeCellMarginsDialog","changeAllowSpaceCheckBox","allowSpaceCheckBox","removeEvents","innerDivLabel","getCellMarginDialogElements","cellSpaceLabel","table2","cellspacingTextBox","divBtn","loadCellMarginsDialog","applyTableOptionsHistory","applySubTableOptionsHelper","documentLocale","changeSameAsTable","sameAsTableCheckBox","localizeValue","sameAsTable","loadCellProperties","enableTextBox","enableCheckBox","applyCellMarginsInternal","applyCellMarginsForCells","rowCells","iterateCells","applySubCellMargins","leftLabel","modifyStyles","addNewStyles","initStylesDialog","newButtonDiv","newButtonElement","modifybuttonDiv","modifyButtonElement","hideObjects","index.DocumentEditor","index.Print","index.SfdtExport","index.WordExport","index.TextExport","index.Search","index.Editor","index.EditorHistory","index.OptionsPane","index.ContextMenu","index.ImageResizer","index.HyperlinkDialog","index.TableDialog","index.BookmarkDialog","index.TableOfContentsDialog","index.PageSetupDialog","index.ParagraphDialog","index.ListDialog","index.StyleDialog","index.StylesDialog","index.BulletsAndNumberingDialog","index.FontDialog","index.TablePropertiesDialog","index.BordersAndShadingDialog","index.TableOptionsDialog","index.CellOptionsDialog","index.MultiSelect","index.CheckBoxSelection","CellType","CellStyle","numFmtId","backColor","wrapText","indent","isGlobalStyle","CellXfs","CellStyleXfs","CellStyles","xfId","NumFmt","formatCode","mLine","mColor","Cells","inserted","Rows","Worksheets","Worksheet","isSummaryRowBelow","HyperLink","FreezePane","MergeCell","MergeCells","mergeCell","mCell","isIntersecting","intersectingCell","ref","ValueFormatter","CsvHelper","csvStr","globalStyles","Map","worksheets","parseWorksheet","parseRows","rows_1","parseRow","parseCell","csv","parseCellValue","has","dwlLink","BlobHelper","getBlob","Workbook","saveType","currencyString","sharedStringCount","unitsProportions","hyperlinkStyle","mSaveType","sharedString","mFonts","mBorders","printTitles","cellStyles","mNumFmt","mFills","mCellXfs","mCellStyleXfs","parserCellStyle","cellStylesIn","tFormat","parserWorksheets","builtInProperties","BuiltInProperties","parserBuiltInProperties","csvHelper","jsonBuiltInProperties","author","comments","company","manager","subject","createdDate","tags","jsonSheet","sheet","mergedCellsStyle","mHyperLinks","parserColumns","parserRows","freeze","parserFreezePanes","printTitle","parserPrintTitle","hyperLinks","mergeOptions","sourceJson","destJson","getCellName","getColumnName","strColumnName","iCurrentDigit","titleRowName","printTitleName","fromRow","toRow","titleColName","fromColumn","toColumn","freezePanes","columnsLength","rowsLength","rowId","parserRow","insertMergedCellsStyle","rowToInsert","styleIndex","cellToInsert","refName","parseGrouping","parseCells","isCollapsed","cellsLength","spanMin","spanMax","cellId","jsonCell","hyperLink","getCellValueType","rId","parseCellType","processMergeCells","applyGlobalStyle","cellType","defStyleIndex","parserBorder","processCellStyle","switchNumberFormat","numFmt","cellStyleXfs","cellXfs","returnFormat","processNumFormatId","compareResult","compareStyle","isNewFont","toCompareStyle","isNewBorder","bStyle","isAllBorder","toCompareBorder","allBorderStyle","toOADate","blobSaveType","proxyUrl","xlsxMatch","csvMatch","saveWorkbook","saveWorksheets","saveSharedString","saveStyles","saveApp","saveCore","saveContentType","saveTopLevelRelation","saveWorkbookRelation","workbookTemp","sheets","printTitle_1","addToArchive","saveWorksheet","sheetBlob","sheetString","saveFreezePanes","colString","pixelsToColumnWidth","rowString","pixelsToRowHeight","hLink","saveSheetRelations","pixels","dDigitWidth","trunc","relStr","paneString","sstStart","si","processString","updateCellXfsStyleXfs","styleTemp","saveNumberFormats","saveFonts","saveFills","saveBorders","saveCellStyleXfs","saveCellXfs","saveCellStyles","compareFontResult","fontId","fillId","borderId","applyAlignment","numFmtStyle_1","fillsStyle","bordersStyle","cellStyleString","cellXfsStyle","cellStyleXf","saveAlignment","cellXf","alignString","appString","coreString","toISOString","wbRelation","contentTypeString","sheetsOverride","xmlString","updatedMergedCellStyles","sCell","eCell","dateToTicks","isLeapYear","timeToTicks","daysTo1899","allowSorting","allowResizing","allowGrouping","allowReordering","showColumnMenu","enableGroupByFormat","showInColumnChooser","edit","sortDirection","valueFormatter","commandsTemplate","headerTemplateFn","fltrTemplateFn","isForeignColumn","editType","sortComparer","a_1","getSortDirection","setSortDirection","getFormatter","formatFn","getParser","parserFn","getColumnTemplate","getHeaderTemplate","getFilterItemTemplate","getDomSetter","disableHtmlEncode","queryCellInfo","headerCellInfo","actionBegin","actionComplete","dataBound","rowSelecting","rowSelected","rowDeselecting","rowDeselected","cellSelecting","cellSelected","cellDeselecting","cellDeselected","columnDragStart","columnDrag","columnDrop","rowDragStart","rowDrag","rowDrop","printComplete","detailDataBound","batchAdd","batchCancel","batchDelete","beforeDataBound","beforeOpenColumnChooser","filterChoiceRequest","filterAfterOpen","filterBeforeOpen","initialLoad","initialEnd","dataReady","contentReady","uiUpdate","onEmpty","inBoundModelChanged","colGroupRefresh","headerRefreshed","pageComplete","sortComplete","filterComplete","searchComplete","reorderComplete","rowDragAndDropComplete","groupComplete","ungroupComplete","cellSelectionComplete","beforeCellFocused","cellFocused","columnVisibilityChanged","columnWidthChanged","columnPositionChanged","rowsAdded","rowsRemoved","columnDragStop","headerDrop","dataSourceModified","refreshVirtualBlock","dblclick","toolbarRefresh","autoCol","tooltipDestroy","saveComplete","deleteComplete","preventBatch","dialogDestroy","crudAction","addDeleteAction","destroyForm","doubleTap","excelExportComplete","excelHeaderQueryCellInfo","pdfExportComplete","pdfHeaderQueryCellInfo","freezeRender","filterOpen","filterDialogCreated","filterMenuClose","initForeignKeyColumn","getForeignKeyData","showEmptyGrid","dataStateChange","dataSourceChanged","rtlUpdated","beforeFragAppend","frozenHeight","RenderType","ToolbarItem","CheckBoxFilter","filterSettings","existingPredicate","filterState","cBoxTrue","cBoxFalse","searchHandler","searchBoxKeyUp","searchBoxClick","sInput","refreshCheckboxes","updateSearchIcon","sIcon","updateModel","actualPredicate","filteredColumns","sortSettings","allowCaseSensitive","getAndSetChkElem","sBox","hideSearchbox","spinner","cBox","events.filterBeforeOpen","filterModel","columnName","columnType","events.actionBegin","btnClick","isExcel","dialogCreated","getAllData","events.filterDialogCreated","events.filterMenuClose","clearFilter","filterCollection","fltrBtnHandler","optr","caseSen","itemsCnt","fObj","initiateFilter","fColl","firstVal","parsed","predicte","filterChoiceCount","filterEvent","processSearch","getPredicateFromCols","getPredicate","predicateList","fPredicate","foreignColumn","getForeignKeyColumns","events.generateQuery","events.filterChoiceRequest","processDataOperation","eventPromise","dataSuccess","getStateEventArgument","def","events.dataStateChange","adaptr","allPromise","runArray","fullData","cols","getDistinct","filteredData","events.filterAfterOpen","events.actionComplete","updateResult","createFilterItems","updateAllCBoxes","updateIndeterminatenBtn","cBoxes_1","createCheckbox","cBoxes","isColFiltered","getCheckedState","generatePredicate","updateDateFilter","getCaseValue","dataState","isPending","resolver","events.rowsAdded","addRows","events.rowsRemoved","removeRows","events.dataSourceModified","events.destroy","events.updateData","crudActions","events.addDeleteAction","gObj","skipPage","searchQuery","aggregateQuery","sortQuery","pageQuery","groupQuery","isForeign","allowPaging","groupSettings","getColumnByField","isGrpFmt","formatGroupColumn","sortGrp","sSettings","searchSettings","getColumns","fGeneratePredicate","skipFoerign","actualFilter","colType","checkBoxCols","defaultFltrCols","excelPredicate","defaultFltrCols_1","column_1","sType","events.showEmptyGrid","getKey","getPrimaryKeyFieldNames","crud","deferred_1","events.crudAction","setState","events.dataSourceChanged","toIndex","dataArgs","isDataChanged","editArgs","isSpanned","CellMergeRender","cellArgs","cellRenderer","getCellRenderer","cellSpan","aria-colSpan","enableColumnVirtualization","backupMergeCells","fName","setMergeCells","generteKey","fname","splitKey","getMergeCells","updateVirtualCells","mCells","getIndexFromAllColumns","vColumnIndices","getColumnIndexesInView","getVisibleColumns","RowRenderer","rowTemplate","refreshRow","isChanged","refreshMergeCells","cells_1","rowArgs","attrCopy","chekBoxEnable","isDataRow","getSelectedRowIndexes","isCheckBoxSelection","checkAllRows","buildAttributeFromRow","cellRendererFact","DetailExpand","Filter","CommandColumn","summarycell","isAltRow","RowModelGenerator","generateRows","generateRow","ensureColumns","detailTemplate","generateCell","enableAltRow","refreshForeignKeyRow","generateCells","oIndex","opt","isDataCell","rowID","getColumnIndexByField","refreshRows","SummaryModelGenerator","groupFooterTemplate","groupCaptionTemplate","columnSelector","buildSummaryData","getGeneratedRow","summaryRow","raw","indents","getIndentByLevel","isDetailGridAlone","indentLength","getGeneratedCell","getCellType","Indent","sColumn","scolumn","single","disp","Summary","GroupSummaryModelGenerator","GroupSummary","CaptionSummaryModelGenerator","CaptionSummary","GroupModelGenerator","summaryModelGen","captionModelGen","getGroupedRecords","generateDataRows","generateCaptionRow","getCaptionRowCells","visibles","groupedLen","generateIndentCell","Expand","captionCells","cIndex_1","wFlag","tmpFlag","GroupCaption","GroupCaptionEmpty","cRow","ContentRender","freezeRows","movableRows","events.columnDrop","rafCallback","ariaService","setBusy","getPanel","getFrozenColumns","isFrozen","events.contentReady","events.dataBound","allowTextWrap","events.freezeRender","case","generator","getModelGenerator","events.columnVisibilityChanged","setVisible","events.colGroupRefresh","events.uiUpdate","enableAfterRender","renderPanel","setOptions","busy","setPanel","renderTable","contentDiv","createContentTable","setTable","multiselectable","selectionSettings","initializeContentDrop","frozenRows","getHeaderContent","setColGroup","getColGroup","freezeRowElements","rowElements","refreshContentRows","hdrTbody","frag","hdrfrag","fCont","mCont","modelData","registeredTemplate","destroyTemplate","tbody","getRowTemplate","isTR","colcount","getHeaderTable","events.beforeFragAppend","appendContent","contentPanel","panel","contentTable","getRows","getMovableRows","getRowElements","getMovableRowElements","setRowElements","colgroup","colGroup","fRows","mRows","rowLen","cellLen","testRow","clen","getNormalizedColumnIndex","canSkip","displayVal","renderEmpty","getRowByIndex","getDataRows","getVirtualRowIndex","getMovableRowByIndex","getMovableDataRows","HeaderRender","frzIdx","visualElement","headercelldiv","getStackedHeaderColumnByHeaderText","getColumnByUid","events.columnDragStart","events.columnDrag","events.columnDragStop","events.headerDrop","widthService","events.columnPositionChanged","colPosRefresh","headerDiv","createHeaderTable","initializeHeaderDrag","initializeHeaderDrop","events.headerRefreshed","headerPanel","headerTable","tHead","findHeaderRow","thead","caption","bodyCell","rowBody","updateColGroup","colHeader","rowRenderer","headerRow","colDepth","getObjDepth","getHeaderCells","HeaderIndent","DetailHeader","appendCells","isFirstObj","isFirstCol","isLastCol","isMovable","lastCol","getCellCnt","frzObj","refreshFrozenHdr","isPartial","isComp","frozenColumns","StackedHeader","getColSpan","getColumnIndexByUid","frozenCnt","frzCol","refreshUI","setWidthToColumns","updateDefaultCursor","gCells","textWrapSettings","wrapMode","checkDepth","showDropArea","headerRows","CellRenderer","locator","rowChkBox","localizer","getGui","evaluate","fData","dummyData","invokeFormatter","refreshCell","refreshTD","displayAsCheckBox","localeStr","fromFormatter","appendHtml","persistSelection","buildAttributeFromCell","clipMode","isCheckBoxType","AriaService","setExpand","setSort","isBusy","invalid","setGrabbed","isGrabbed","grabbed","setDropTarget","dropeffect","haspopup","HeaderCellRenderer","hTxtEle","sortEle","gui","chkAllBox","fltrMenuEle","prepareHeader","ariaAttr","innerDIV","e-mappinguid","checkAllWrap","matchFlColumns","extendPrepareHeader","gridObj","headerTextAlign","matchFilteredColumns","StackedHeaderCellRenderer","toolTip","IndentCellRenderer","GroupCaptionCellRenderer","fKeyValue","captionTemplate","GroupCaptionEmptyCellRenderer","ExpandCellRenderer","HeaderIndentCellRenderer","DetailHeaderIndentCellRenderer","DetailExpandCellRenderer","emptyGrid","headerRenderer","getRenderer","contentRenderer","Content","emptyRow","refreshComplete","isFActon","isNeedForeignAction","getFData","events.actionFailure","deffered_1","events.getForeignKeyData","disablePageWiseAggregates","validateGroupRecords","dataManagerFailure","deferred","sendBulkRequest","dmSuccess","dmFailure","renderEmptyRow","isTrigger","colspan","events.onEmpty","dynamicColumnChange","getCurrentViewRecords","updateColumnType","isColTypeDef","events.beforeDataBound","events.tooltipDestroy","prevPageMoving","totalRecordsCount","updatesOnInitialRender","events.dataReady","alert","events.toolbarRefresh","buildColumns","events.autoCol","instantiateRenderer","addRenderer","cellrender","addCellRenderer","events.initialLoad","events.modelChanged","group0","groupN","addWhere","curFilter","rPredicate","updateGroupInfo","untouched","uGroup","itemGroup","uGroupItem","CellRendererFactory","cellRenderMap","RendererFactory","rendererMap","rName","ColumnWidthService","setColumnWidth","cWidth","setWidthToTable","headerCol","getContentTable","fWidth","mHdr","contentCol","getSiblingsHeight","getHeightFromDirection","tWidth","setWidthToFrozenTable","freezeWidth","setWidthToMovableTable","movableWidth","FocusStrategy","currentInfo","oneTime","forget","skipFocus","focusByClick","prevIndexes","focusCheck","validator","passiveFocus","skipAction","getFocusInfo","elementToFocus","onClick","clearOutline","beforeArgs","byKey","byClick","clickArgs","event.beforeCellFocused","skipOn","keyArgs","bValue","swapInfo","jump","toHeader","toFrozen","getNextCurrent","setActiveByKey","clearIndicator","getFocusedElement","fContent","fHeader","setFocusedElement","addFocus","event.cellFocused","isJump","getInfo","focusedColumnUid","getColumnByIndex","refreshMatrix","FixedContentFocus","ContentFocus","FixedHeaderFocus","HeaderFocus","cFocus","updateRow","handlerInstance","passiveHandler","event.keyPressed","event.click","event.contentReady","event.headerRefreshed","restoreFocus","event.batchAdd","event.batchCancel","event.batchDelete","event.detailDataBound","event.onEmpty","internalCellFocus","getPrevIndexes","forgetPrevious","getFocusable","inValid","rIndex","cIndex","keyActions","rightArrow","leftArrow","upArrow","downArrow","shiftRight","shiftLeft","indexesByKey","getCurrentFromAction","isPresent","shouldFocusChange","rN","cN","oRowIndex","oCellIndex","isDirty","frozenSwap","enterFrozen","optionals","defaultLen","isData","isSelectable","current1","current2","current3","SearchBox","searchFocus","searchBlur","__assign","assign","selectedRowIndexes","selectedRowCellIndexes","selectedRecords","isMultiShiftRequest","isMultiCtrlRequest","enableSelectMultiTouch","selectedRowState","chkAllCollec","isCheckedOnAdd","persistSelectedData","isCancelDeSelect","isPreventCellSelect","disableUI","factory","initializeSelection","onActionBegin","fDataUpdate","rowObj","getRowObj","hidePopUp","isEditing","editModule","formObj","isPersistSelection","getSelectedMovableRow","selectedMovableRow","selectData","isRowType","isCtrlPressed","isShiftPressed","prevRowIndex","addMovableArgs","events.rowSelecting","clearRow","updateRowSelection","selectedRowIndex","updateRowProps","events.rowSelected","mRow","mObj","previousMovRow","selectRowsByRange","selectRows","getCollectionFromIndexes","rowIndexes","isSingleSel","rowIndexes_1","rowIdx","addRowsToSelection","rowIndexes_2","isUnSelected","rowDeselect","events.rowDeselecting","addRemoveClassesForRow","events.rowDeselected","clearRowSelection","isRowSelected","updatePersistCollection","chkState","pKey_1","primaryKey","updatePersistDelete","updateCheckBoxes","chkBox","checkedTarget","setCheckAllState","clearCellSelection","movableRow","rowDeselectObj","getRowObjectFromUID","getSelectedMovableCell","getMovableCellFromIndex","getColIndex","isCellType","getCellFromIndex","prevCIdxs","currentCell","previousRowCellIndex","prevECIdxs","previousRowCell","getCellIndex","events.cellSelecting","clearCell","updateCellSelection","updateCellProps","selectedRowCellIndex","events.cellSelected","rIdx","selectCellsByRange","cellIndexes","stIndex","edIndex","cellSelectionMode","getLastColIndex","selectCells","rowCellIndexes","addRowCellIndex","addCellsToSelection","getMovableRowsObject","cellIndexes_1","selectedCellIdx","cellDeselect","events.cellDeselecting","events.cellDeselected","rowCellIndex","isRowAvail","getSelectedCellsElement","cLen","addMovableRows","gBRect","isDragged","isCellDrag","selectLikeExcel","gridElement","allowRowDragAndDrop","postion","clearSelAfterRefresh","events.initialEnd","events.cellSelectionComplete","events.inBoundModelChanged","events.cellFocused","onCellFocused","actionBeginFunction","actionCompleteFunction","refreshHeader","addEventListener_checkbox","removeEventListener_checkbox","getCheckAllBox","checkBoxSelectionChanged","initPerisistSelection","gobj","checkboxColumn","chkField","ensureCheckboxFieldSelection","getDataModule","refreshPersistSelection","setRowSelection","checkState","editChkBox","onDataBound","checkSelectAllAction","cRenderer","editForm","stateStr","getCheckAllStatus","triggerChkChangeEvent","checkSelect","rowCellSelectionHandler","moveIntoUncheckCollection","updateSelectedRowIndex","selectedVal","checkedLen","spanEle","popUpClickHandler","chkSelect","checkboxOnly","headerAction","thLen","applyDownUpKey","applyRightLeftKey","shiftDownKey","applyShiftLeftRightKey","applyHomeEndKey","applyCtrlHomeEndKey","ctrlPlusA","applySpaceSelection","applyUpDown","getSelectedRecords","getRowsObject","onDataBoundFunction","actionCompleteFunc","actionCompleteHandler","events.click","searchString","events.preventBatch","refreshSearch","events.searchComplete","onSearchComplete","ShowHide","showBy","getToggleFields","hideBy","getKeyBy","allowSelection","Scroll","lastScrollTop","previousValues","oneTimeReady","toolbarModule","mHdrHeight","ensureOverflow","setPadding","getThreshold","cssProps","getCssProperties","removePadding","onContentScroll","scrollTarget","isPreventScrollEvent","isFooter","onFreezeContentScroll","onWheelScroll","deltaMode","onTouchScroll","pageXY","getPointXY","setPageXY","getFooterContent","isAsyncPrint","printing","renderPrintGrid","isPrintGrid","printGridModel","printGridProp","printMode","printGrid","Grid","selectedRows","removeColGroup","waitingPop","events.printComplete","groupCaption","colGroups","AggregateColumn","getTemplate","setPropertiesSilent","AggregateRow","Clipboard","copyContent","isSelect","events.keyPressed","clipBoardTextArea","setCopyData","withHeader","headerTextArray","getCopyData","checkBoxSelection","colIndexes","getColumnHeaderByIndex","isCell","isElement","queryCommandSupported","rowCellIndxes","getSelectedRowCellIndexes","SortDescriptor","SortSettings","FilterSettings","SelectionSettings","SearchSettings","RowDropSettings","TextWrapSettings","GroupSettings","EditSettings","inViewIndexes","freezeRefresh","mergePersistGridData","keyEntity","ignoreInArrays","ignoreOnColumn","ignoreInColumn","allowExcelExport","allowPdfExport","isDetail","toolbarTemplate","isCommandColumn","allowAdding","allowDeleting","extendRequiredModules","contextMenuItems","showColumnChooser","isForeignKeyEnabled","mediaCol","filterOperators","greaterThan","greaterThanOrEqual","lessThan","lessThanOrEqual","notEqual","EmptyRecord","True","False","InvalidFilterMessage","GroupDropArea","GroupDisable","FilterbarTitle","EmptyDataSourceError","Add","Edit","Update","Pdfexport","Excelexport","Wordexport","Csvexport","Columnchooser","EditOperationAlert","DeleteOperationAlert","SaveButton","OKButton","CancelButton","EditFormTitle","AddFormTitle","BatchSaveConfirm","BatchSaveLostChanges","ConfirmDelete","CancelEdit","ChooseColumns","SearchColumns","Matchs","FilterButton","ClearButton","StartsWith","EndsWith","Contains","Equal","NotEqual","LessThan","LessThanOrEqual","GreaterThan","GreaterThanOrEqual","ChooseDate","EnterValue","Ungroup","autoFitAll","autoFit","Export","FirstPage","PreviousPage","SortAscending","SortDescending","EditRecord","DeleteRecord","FilterMenu","Blanks","FilterTrue","FilterFalse","NoResult","ClearFilter","NumberFilter","TextFilter","DateFilter","MatchCase","Between","CustomFilter","CustomFilterPlaceHolder","CustomFilterDatePlaceHolder","AND","OR","ShowRowsWhere","ctrlAltPageUp","ctrlAltPageDown","altPageUp","altPageDown","ctrlDownArrow","ctrlUpArrow","ctrlPlusP","ctrlPlusC","ctrlShiftPlusH","renderModule","getMediaColumns","processModel","gridRender","addListener","updateStackedFilter","gcol","getShowHideService","hideAtMedia","media","mediaQueryUpdate","showHider","refreshMediaCol","eventInitializer","removeListener","toolTipObj","focusModule","checkCursor","requireRefresh","requireGridRefresh","updateColumnObject","headerModule","rowTemplateFn","detailTemplateFn","extendedPropertyChange","updateRTL","getToolbar","getContextMenu","columnMenuModule","getColumnMenu","events.rtlUpdated","updateResizeLines","updateGridLines","columnMenuItems","applyTextWrap","removeTextWrap","isModeChg","pending_1","gResult_1","enableHover","filterModule","refreshFilter","headerRows_1","updateColumnModel","columnModel","updateFrozenColumns","isRefresh","inview","vLen","stackedHeader","individualColumn","stackedColumn","getLocaleConstants","setColumnIndexesInView","setGridHeaderContent","setGridContentTable","setGridContent","setGridHeaderTable","footerElement","getFooterContentTable","getPager","gridPager","setGridPager","getRowInfo","rowsObject","mrows","dRows","setCellValue","fieldIdx","pkName","rowObjects","events.queryCellInfo","setRowData","rowObject","getColumnHeaderByField","getColumnHeaderByUid","getUidByColumnField","getColumnFieldNames","columnNames","getDetailTemplate","getSelectedRows","showColumns","hideColumns","getFrozenCount","getVisibleFrozenColumns","getVisibleFrozenColumnsCount","getVisibleFrozenCount","visibleFrozenColumns","pageNo","pagerModule","updateExternalMessage","sortColumn","isMultiSort","sortModule","clearSorting","removeSortColumn","filterByColumn","filterOperator","filterValue","actualFilterValue","actualOperator","clearFiltering","removeFilteredColsByField","isClearFilterBar","deleteRecord","fieldname","closeEdit","addRecord","clipboardModule","recalcIndentWidth","indentWidth","perPixel","events.columnWidthChanged","reorderColumns","fromFName","toFName","reorderModule","autoFitColumns","resizeModule","createColumnchooser","columnChooserModule","renderColumnChooser","valueFormatterService","gCols","sCols","sLen","showGroupedColumn","parentDetails","parentKeyFieldValue","initForeignColumn","events.initForeignKeyColumn","rendererFactory","createGridPopUpElement","getTooltipStatus","htable","ctable","isEllipsisTooltip","myTableDiv","mySubDiv","myTable","myTr","mytd","mouseClickHandler","dblClickHandler","allowKeyboard","dataBoundFunction","checkEdit","events.dblclick","filterClear","keyPress","saveCell","mergeColumns","storedColumn","ind","localCol","setInjectedModules","refreshColumns","excelExport","excelExportProperties","isMultipleExport","workbook","isBlob","excelExportModule","csvExport","pdfExport","pdfExportProperties","pdfDoc","pdfExportModule","groupColumn","groupModule","ungroupColumn","isContextMenuOpen","ensureModuleInjected","propertyNames","contentRefresh","isModelChanged","aria","sortedColumn","getSortedColsIndexByField","sortedCols","sCol","getSortColumnFromField","lastSortedCol","allowMultiSorting","removeSortIcons","updateSortedCols","refreshSortSettings","addSortIcons","events.sortComplete","refreshSortIcons","colObj","initiateSort","showPopUp","allowUnsort","enableSortMultiTouch","filterElement","updateAriaAttr","NumericContainer","pagerElement","renderNumericContainer","refreshNumericLinks","updateTotalPages","updateLinksHtml","updateStyles","pagerObj","renderFirstNPrev","renderPrevPagerSet","renderNextPagerSet","renderNextNLast","pagerContainer","prevPager","PP","nextPager","NP","previousPageNo","currentPageSet","customText","updateFirstNPrevStyles","updatePrevPagerSetStyles","updateNextPagerSetStyles","updateNextNLastStyles","firstPage","firstPageDisabled","prevPageDisabled","lastPageDisabled","nextPageDisabled","PagerMessage","pageNoMsgElem","pageCountMsgElem","regx","Pager","defaultConstants","currentPageInfo","totalItemsInfo","firstPageTooltip","lastPageTooltip","nextPageTooltip","previousPageTooltip","nextPagerTooltip","previousPagerTooltip","pagerDropDown","containerModule","pagerMessageModule","enableExternalMessage","checkpagesizes","pagerTemplate","initLocalization","renderFirstPrevDivForDevice","enablePagerMessage","renderNextLastDivForDevice","pagerdropdownModule","addAriaLabel","externalMessageModule","checkGoToPage","currentPageChanged","setDropDownValue","pageSizes","newPageNo","oldPageNo","enableQueryString","updateQueryString","getPagerTemplate","updatedUrl","getUpdatedURL","PagerDropDown","pagerDropDownDiv","dropDownDiv","defaultTextDiv","pagerCons","pageSizesModule","pageSizesArray","dropDownListObject","ExternalMessage","externalMessage","Global","pagerDestroy","gridExtend","dropDownChanged","addAriaAttr","numericContainerNew","numericContainer","numericContainerDiv","isForceCancel","appendToElement","handlers","complete","inboundChange","events.pageComplete","FilterCellRenderer","filterBarTemplate","templateWrite","FlMenuOptrUI","customFltrOperators","customFilterOperators","renderOperatorUI","dlgConetntEle","dlgObj","optrData","customOptr","operators","dropDatasource","selectedValue","dropSelectedVal","optrDiv","optrInput","dropOptr","dropDownOpen","selValue","selectedField","getFlOperator","StringFilterUI","serLocator","actObj","getAutoCompleteOptions","getOptrInstance","localizeText","filteredValue","filterOptr","filterObj","actuiObj","NumberFilterUI","numericTxtObj","BooleanFilterUI","dropInstance","drpuiObj","DateFilterUI","fltrSettings","colFormat","inputElem","datePickerObj","FilterMenuRenderer","fltrObj","isDialogOpen","colTypes","boolean","datetime","flMuiObj","renderDlgContent","mainDiv","dlgDiv","filterBtnClick","clearBtnClick","renderFilterUI","writeMethod","renderFlValueUI","valueDiv","instanceofFilterUI","ui","dlgContentEle","flValue","flOptrValue","targ","flIcon","ExcelFilter","getCMenuDS","unwireExEvents","cmenu","createMenu","isCheckIcon","menu","createMenuElem","ensureTextFilter","iconName","isSubMenu","wireExEvents","clickExHandler","destroyCMenu","menuObj","submenu","isCMenuOpen","selectedMenu","preventClose","client","contextRect","getContextBounds","getCMenuYPosition","getSelectedText","contextWidth","filterLength","renderDialogue","overlayClick","removeDialog","createdDialog","renderCustomFilter","fieldSet","checkBoxValue","fOperator","sValue","sOperator","andRadio","firstOperator","firstValue","secondOperator","secondValue","mPredicate","fpred","fieldElement","xlfloptr","menuText","getSelectedValue","renderRadioButton","radioDiv","frstpredicate","secndpredicate","renderMatchCase","orRadio","valueInput","renderAutoComplete","renderNumericTextBox","renderDate","matchCaseDiv","matchCaseInput","completeAction","nextFlMenuOpen","Excel","fltrDlgDetails","getLocalizedCustomOperators","fltrElem","updateFilterMsg","filterBarElement","currentFilterObject","getFilteredColsIndexByField","currentFilteringColumn","events.filterComplete","events.filterOpen","columnMenuFilter","filterIconClickHandler","filterCell","checkForSkipInput","filterStatusMsg","applyColumnFormat","addFilteredClass","checkAlreadyColFiltered","getFlvalue","setFormatForFlColumn","refreshFilterSettings","updateFilter","getFilterBarElement","fltrElement","filterDialogOpen","customOperators","filterHandler","localizedStrings","currentFilterColumn","closeHeaderEle","processFilter","updateCrossIcon","getFormatFlValue","showFilterBarStatus","isSkip","skipInput","startTimer","onTimerTick","immediateModeDelay","templateRead","validateFilterValue","getOperator","singleOp","multipleOp","=","!","numOptr","stringOperator","numberOperator","dateOperator","datetimeOperator","booleanOperator","gClient","fClient","datepickerEle","targetText","filterIconElement","refreshFilterIcon","resizeClassList","suppress","Resize","isDblClk","findColumn","resizeColumn","headerTextClone","contentTextClone","indentWidthClone","contentText","wHeader","wContent","columnbyindex","calcTableWidth","offsetWidthValue","refreshHeight","setHandlerHeight","getResizeHandlers","resizeStart","callAutoFit","getTargetColumn","refreshColumnWidth","parentElementWidth","appendHelper","getPointX","minMove","removeHelper","cancelResizeAction","resizeEnd","setHelperHeight","mousemove","colData","isFrozenColResized","doubleTapEvent","calcPos","fLeft","parentOffset","getUserAgent","timeoutHandler","Reorder","events.reorderComplete","createReorderElement","chkDropPosition","srcElem","destElem","closestElement","targetParentContainerIndex","chkDropAllCols","isFound","findColParent","getColumnsModel","subCols","uId","destElemUid","destColumn","sourceUid_1","colMatchIndex_1","destUid_1","moveColumns","oldIdx","column_2","destIndex","getColParent","srcIdx","fromIndex","flatColumns","fTh","mTh","fHeaders","fColumn","setDisplay","updateScrollPostion","updateArrowPosition","draggableType","cliRect","cliRectBaseLeft","cliRectBaseRight","scrollElem","setScrollLeft","cliRectBase","RowDD","events.rowDragStart","dropElem","rowDropSettings","isDragStop","getElementFromPosition","events.rowDrag","events.rowDrop","events.rowDragAndDropComplete","getTargetIdx","targetRow","srcControl","targetIndex","isAppliedGroup","isAppliedUnGroup","events.groupComplete","events.ungroupComplete","grpRow","expandCollapseRows","applySortFromTarget","unGroupFromTarget","toogleGroupFromHeader","showToggleButton","gHeader","cellIdx","rowNodes","expandElem","renderGroupDropArea","initDragAndDrop","refreshToggleBtn","groupElem","updateGroupDropArea","dragLabel","initializeGHeaderDrop","initializeGHeaderDrag","colName","addColToGroupDrop","groupAddSortingQuery","removeColFromGroupDrop","groupedColumn","childDiv","ej-mappingname","headerCell","showUngroupButton","getGHeaderCell","updateGroupedColumn","updateButtonVisibility","clearGrouping","DetailRow","toogleExpandcollapse","uid_1","isDetailRow","detailRow","detailCell","parentPrimaryKeys","parentKeyField","parentRowData","injectedModues","gridElem","idx_1","events.detailDataBound","detailElement","getTDfromIndex","predefinedItems","gridID","preItems_1","localeName","ColumnChooser","createToolbar","toolbarClickHandler","viewStr","searchElement","refreshToolbarItems","updateSearchBox","hasData","toolbarItems_1","getItemObject","itemObject","gID","tarElement","searchBoxObj","FooterRenderer","gridModule","modelGenerator","movableContent","fDiv","mDiv","frozenContent","tFoot","freezeTable","renderSummaryContent","cStart","cEnd","summaries","dummies","fragment","rowrenderer","srow","frozenDiv","onScroll","refreshCol","mheaderCol","fheaderCol","onWidthChange","getColFromIndex","updateFooterTableWidth","fCol","SummaryCellRenderer","Aggregate","initiateRender","cellFac","footerRenderer","prepareSummaryInfo","getFormatFromType","cModel","InterSectionObserver","fromWheel","sentinelInfo","containerRect","entered","observe","onEnterCallback","virtualScrollHandler","debounced100","debounced50","sentinel","setPageHeight","VirtualRowModelGenerator","cOffsets","rowModelGenerator","notifyArgs","virtualInfo","loadNext","loadSelf","nextInfo","getBlockIndexes","loadedBlocks","checkAndResetCache","blockIndexes","isBlockAvailable","getStartIndex","updateGroupRow","columnIndexes","blk","even","getColumnIndexes","calWidth","iOffset","offsetVal","refreshColOffsets","gLen","currentFirst","iterateGroup","oRow","VirtualContentRenderer","preventEvent","tmpOffsets","VirtualElementHandler","offsetKeys","eventListener","vgenerator","renderWrapper","renderPlaceHolder","debounceEvent","getBlockHeight","observer","adjustTable","scrollListener","scrollArgs","viewInfo","getInfoFromView","prevInfo","tempBlocks","infoType","getPageFromTop","ensureBlocks","mIdx","old","isEndBlock","getTotalBlocks","newChild","cBlock","cOffset","getColumnOffset","refreshOffsets","getTranslateY","setWrapperWidth","setVirtualHeight","onDataReady","maxPage","resetScrollPosition","cHeight","isOnenter","endTranslate","blockHeight","maxBlock","onEntered","getBlockSize","totalBlocks","startIdx","bSize","rem","refreshVirtualElement","VirtualHeaderRenderer","gen","VirtualScroll","ensurePageSize","blockSize","InlineEditRender","addNew","mTbody","getEditElement","renderMovableform","events.frozenHeight","updateFreezeEdit","fHdr","tdElement","refreshFreezeEdit","fCls","mTd","updateFrozenCont","td_1","BatchEditRender","columnObject","DialogEditRender","events.dialogDestroy","setLocaleObj","createDialog","primaryKeyValue","dialogClose","events.destroyForm","dataCell","EditRender","Inline","Batch","getEditElements","convertWidget","fForm","cols_1","focusElement","tArgs","complexFieldName","BooleanEditCell","activeClasses","selectChkBox","isAddRow","editRow","checkBoxChange","DropDownEditCell","ddActionComplete","dlgElement","NumericEditCell","DefaultEditCell","NormalEdit","allowEditOnDblClick","editComplete","editRowIndex","primaryKeys","primaryKeyValues","previousData","applyFormValidation","mFormObj","editedData","getCurrentEditedData","mForm","destroyElements","addedRowIndex","stopEditStatus","destroyWidgets","editHandler","edSucc","edFail","editSuccess","editFailure","updateCurrentViewData","dataLen","tmpRecord","contained","mElem","editMElem","events.doubleTap","events.deleteComplete","events.saveComplete","InlineEdit","BatchEdit","cellDetails","events.beforeCellFocused","onBeforeCellFocused","setCellIdx","editCell","validateFormObj","editCellFromIndex","mTr","removeRowObjectFromUID","events.batchCancel","refreshRowIdx","bulkDelete","bulkAddRow","batchSave","getBatchChanges","batchChanges","mergeBatchChanges","addRowObject","getIndexFromData","events.batchDelete","nonMovableRows","defaultData","getDefaultData","events.batchAdd","findNextEditableCell","args1","checkNPCell","dValues","mRowData","colIdx","getDataByIndex","getCellIdx","validationRules","isColored","updateCell","setChanges","rowcell","isForceSave","cloneEditedData","cloneComplexData","visibleColumns","DialogEdit","DatePickerEditCell","editCellType","dropdownedit","numericedit","datepickeredit","booleanedit","defaultedit","updateEditObj","createAlertDlg","createConfirmDlg","updateColTypeObj","tapEvent","alertDObj","refreshToolbar","showDeleteConfirmDialog","endEditing","editFormValidate","getCurrentEditCellData","getValueFromType","destroyToolTip","dlgWidget","dlgOk","dlgCancel","alertClick","btnOptions","executeAction","inputs","preventObj","mRules","cols_2","createFormObj","validationComplete","valErrorPlacement","getElemTable","isFHdr","gcontent","isScroll","inputClient","showColumn","hideColumn","isDlgOpen","dlghide","initialOpenDlg","stateChangeColumns","isInitialOpen","isCustomizeOpenCC","rtlUpdate","enableAfterRenderEle","hideDialog","clearActions","refreshCheckboxState","columnChooserSearch","removeCancelIcon","addcancelIcon","events.beforeOpenColumnChooser","mOpenDlg","openColumnChooser","renderChooserList","customDialogOpen","customDialogClose","columnChooserManualSearch","confirmDlgBtnClick","ccsearchele","ccsearchicon","conDiv","innerDivContent","refreshCheckboxList","columnStateChange","dialogInstance","stateColumns","colUid","currentCol","checkstatecolumn","coluid","searchVal","fltrCol","clearSearch","nMatchele","checkBoxClickHandler","checkstate","columnUid","refreshCheckboxButton","searchValue","gdCol","columnUID","cbox","cclist","hideColState","showColState","cccheckboxlist","ExportHelper","hideColumnInclude","getColumnData","columnPromise","fColumns","getHeaders","isHideColumnInclude","measureColumnDepth","actualColumns","processColumns","processHeaderCells","removeCellFromRow","generateActualColumns","getConvertedWidth","getCellCount","resultCells","appendGridCells","isFirstColumn","isLastColumn","isIgnoreFirstCell","gridColumn","ExportValueFormatter","returnFormattedValue","formatCellValue","ExcelExport","book","workSheet","rowLength","expType","includeHiddenColumn","isCsvExport","isElementIdChanged","isExporting","exportValueFormatter","exportProperties","isCsv","processRecords","processInnerRecords","blankRows","multipleExport","processExcelHeader","groupIndent","processHeaderContent","processRecordContent","events.excelExportComplete","blobPromise","currentViewRecords","processRecordRows","processGroupedRows","processAggregates","processExcelFooter","getCaptionThemeStyle","groupCaptionSummaryRows","fillAggregates","lIndex","hIndex","tCell","rLen","excelCellArgs","getColumnStyle","rec","byGroup","summaryModel","groupSummaryRows","sRows","customIndex","cells_2","Sum","Average","Max","Min","TrueCount","FalseCount","getAggreateValue","wholeText","JSON1","JSON2","attrname","gridCell","getHeaderThemeStyle","excelHeaderCellArgs","events.excelHeaderQueryCellInfo","getRecordThemeStyle","updateThemeStyle","themestyle","noRows","updatedCellIndex","footerRows","spannedCells_1","PdfExport","customDataSource","isGrouping","processExport","events.pdfExportComplete","gridTheme","processExportProperties","headerThemeStyle","headerFont","headerBrush","processGridHeaders","setColumnProperties","captionThemeStyle","getSummaryCaptionThemeStyle","processGroupedRecords","processRecord","penBrushColor","groupIndex","dataSourceItems","captionSummaryModel","gridHeader","events.pdfHeaderQueryCellInfo","getHorizontalAlignment","getVerticalAlignment","pdfPageSettings","getPageSize","fromTop","drawPageTemplate","fromBottom","processContentValidation","drawPageNumber","getBrushFromContent","textPenColor","penColor","setContentFormat","documentHeader","textBrushColor","brushColor","getPageNumberStyle","pageNumberType","compositeField","getPenFromContent","penSize","getDashStyle","isCaption","captionRow","sRows_1","leastCaptionSummaryIndex","getSummaryWithoutTemplate","setRecordThemeStyle","verticalAlign","getFontFamily","bigint","CommandColumnRenderer","unbounDiv","renderButton","buttonOption","commandType","commandClickHandler","batchEdit","editIcon","pager","ungroup","excel","fPage","nPage","pPage","descending","groupHeader","touchPop","enableAfterRenderMenu","exportItems","exportGroup","getLastPage","totalpage","targetColumn","closestGrid","dItem","ensureDisabledStatus","ensureFrozenHeader","AutoFitAll","AutoFit","CsvExport","PrevPage","FreezeRowModelGenerator","isFrzLoad","FreezeContentRender","setFrozenContent","setMovableContent","getMovableContent","getFrozenContent","mTbl","FreezeRender","refreshFreeze","setFrozenHeight","rfshMovable","updateColgroup","setFrozenHeader","setMovableHeader","getMovableHeader","getFrozenHeader","refreshStackedHdrHgt","addMovableFirstCls","movablefirstcell","filterRow","hdrClassList","setWrapHeight","updateResizeHandler","isContReset","isStackedHdr","fRowHgt","mRowHgt","isWrap","tBody","movableContentHeight","fRowSpan","mRowSpan","fTr","getRowSpan","updateStackedHdrRowHgt","rSpan","minRowSpan","maxRowSpan","frozenHeader","movableHeader","mTable","Freeze","ColumnMenu","GROUP","UNGROUP","ASCENDING","DESCENDING","FILTER","POP","WRAP","CHOOSER","getColumnMenuHandlers","columnMenuHandlerDown","columnMenu","unwireFilterEvents","columnMenuHandlerClick","getHeaderCell","openColumnMenu","isFilterItemAdded","filterPosition","columnMenuItemClick","columnMenuBeforeOpen","columnMenuOnClose","beforeMenuItemRender","columnMenuBeforeClose","wireFilterEvents","appendFilter","isChooserItem","colChooser","getFilter","isFilterPopupOpen","defultItems_1","getDefault","getDefaultItem","createChooserItems","filterPopup","getFilterPop","gridPos","liPos","ForeignKey","initForeignKeyColumns","generateQueryFormData","foreignColumns","genarateColumnQuery","genarateQuery","responses","fromData","needQuery","queryColumn","isTrue","filterColumn","destroyEvent","index.Grid","index.Filter","index.Page","index.Sort","index.Group","index.Reorder","index.RowDD","index.DetailRow","index.Toolbar","index.Aggregate","index.VirtualScroll","index.Edit","index.Resize","index.ExcelExport","index.PdfExport","index.CommandColumn","index.Freeze","index.ColumnMenu","index.ColumnChooser","index.ForeignKey","PaletteCollection","ColorCollection","LegendColorCollection","PaletteSettings","CellColor","heatMap","convertToRGB","previousOffset","previousColor","getEqualColor","nextColor","getPercentageColor","convertToHex","itemColor","colorSplit","prevColor","getPercentage","getColorCollection","colorCollection","legendColorCollection","emptyPointColor","paletteSettings","emptyCellColor","tempcolorMapping","orderbyOffset","isCompact","dataSourceMaxValue","dataSourceMinValue","updateLegendColorCollection","returnCollection","PaletterColor","getColorByValue","rbg","compareValue","fontModel","CurrentRect","basic","TextBasic","LineOption","strokewidth","dasharray","DrawSvgCanvas","heatmap","enableCanvasRendering","drawCanvasRectangle","canvasRenderer","canvasDrawText","createWrapText","GradientColor","CanvasTooltip","GradientPointer","pathX1","pathY1","pathX2","pathY2","pathX3","pathY3","heatMapTitleFont","rectLabelFont","axisLabels","tooltipLabels","axisLabelSize","axisLabelInterval","getTitleSize","getMaxLabelSize","calculateNumericAxisLabels","adaptorMin","adaptorMax","adaptorModule","isCellData","adaptiveXMinMax","adaptiveYMinMax","calculateCategoryAxisLabels","calculateDateTimeAxisLabel","getTotalLabelLength","AxisHelper","drawSvgCanvas","drawXAxisLine","compactInterval","axisInterval","tempintervel","lableStrtX","lableRect","lableStartY","CellSettings","cellColor","renderRectSeries","containerRectObject","cellSettings","showLabel","containerTextObject","tempBorder","tempX","tempY","dataXIndex","dataYIndex","tempWidth","tempHeight","tempRectPosition","rectPositionCollection","checkLabelYDisplay","tempMaxString","getFormatedText","checkLabelXDisplay","clonedDataSource","rectPosition","themeCellTextStyle","highlightSvgRect","tempID","tempRectHoverClass","enableCellHighlighting","oldElement","getCurrentRect","firstRectDetails","heatMapSeries","rectX","rectY","hoverXAxisLabel","hoverXAxisValue","hoverYAxisLabel","hoverYAxisValue","TwoDimensional","tempCloneData","completeDataSource","tempVariable","dataLength","cloneDataIndex","minMaxDatasource","checkmin","maxLegendLabelSize","gradientScaleSize","positionCollections","previousOptions","listPerPage","numberOfPages","listWidth","legendRect","lastList","navigationCollections","pagingRect","listInterval","legendLabelTooltip","labelXCollections","labelYCollections","legendXCollections","legendYCollections","renderLegendItems","rectItems","legendRectScale","rectItemsSvg","horizontalGradient","legendMinValue","legendMaxValue","gradientOptions","gradientColor","cgradientColors","gradientPercentage","linearGradient","rectItems_1","renderColorAxisGrid","renderLegendLabel","legendScale","listRect","translategroup","calculateListPerPage","renderListLegendMode","dominantBaseline","textWrapWidth","previousSegmentWidth","nextSegmentWidth","legendRectPadding","textBasic","renderGradientPointer","legendPath","cellValue","removeGradientPointer","gradientPointer","calculateListLegendBounds","perListWidth","numberOfRows","calculateLegendSize","legendTop","axisTitlePadding","titleSettings","calculateGradientScale","measureListLegendBound","rightArrowX","rightArrowY","pagingTextRect","rightArrowRect","leftArrowRect","leftOption","rightOption","calculateColorAxisGrid","legendPart","maxTextWrapLength","segmentCollections","legendElement","renderLegendLabelTooltip","legendY","division","isNext","HeatMap","heatMapAxis","twoDimensional","tempTooltipRectId","processInitData","calculateMaxLength","completeAdaptDataSource","showHideTooltip","reRenderDatasource","constructDatasource","setRenderMode","renderSecondaryElement","createTooltipDiv","heatMapTitle","isHeatmapRect","lastRectDetails","cellTextColor","heatMapMouseClick","heatMapMouseMove","heatMapMouseLeave","heatMapResize","xAxisMax","yAxisMax","svgCanvasRect","xLabel","yLabel","cellElement","isheatmapRect","showGradientPointer","tooltipTimer","isFadeout","gradientTimer","main","AdaptiveMinMax","reconstructedXAxis","reconstructedYAxis","adaptData","isJsonData","adaptorType","processJsonTableData","processJsonCellData","getMinMaxValue","constructAdaptiveAxis","processCellData","getNumericAxisCollection","getDateAxisCollection","loopIndex","tempAxisColl","dataIndex","adaptordata","tempDataCollection","xLabels","yLabels","currentDataXIndex","currentDataYIndex","reconstructData","xindex","xDataMapping","yDataMapping","valueMapping","isShow","tempTooltipText","hetmapSeries","argData","index.HeatMap","index.Adaptor","VisibleRange","Align","calculateAxesBounds","containerBounds","checkThermometer","checkAlign","calculateLineBounds","calculateTickBounds","calculateLabelBounds","calculatePointerBounds","calculateRangesBounds","labelBounds","prevAxis","checkPreviousAxes","major","minor","majorInterval","majorTickBounds","minorTickBounds","calculateMarkerBounds","calculateBarBounds","endVal","rangePalettes","Animations","performMarkerAnimation","markerElement","markerType","currentPath","performBarAnimation","value2","clipVal","clipElement","lineY","pointerValue","startPointerVal","roundedCornerRadius","axisElements","axisObject","drawRanges","drawTicks","axisAlign","tranX","nearAxisWidth","farAxisWidth","containerObject","tickID","tickBounds","tickPath","pointesGroup","pointerClipRectGroup","pointerID","gaugeResized","drawBarPointer","renderAnnotationElements","secondaryID","annotationGroup","createAnnotationTemplate","getTooltipLocation","lineX","lineId","pointer-events","borderRadius","padding-left","padding-right","padding-top","padding-bottom","LinearGauge","renderGaugeElements","renderAxisElements","appendSecondaryElement","titleBounds","actualRect","moveOnPointer","mouseElement","gaugeOnMouseMove","svgPath","markerDrag","triggerDragEvent","barDrag","elementExist","index.LinearGauge","index.ListView","index.Virtualization","MinMax","GeoLocation","PolylineOption","PatternOptions","patternContentUnits","patternTransform","MapAjax","sendData","dataOptions","mapsTitleFont","mapsSubTitleFont","legendTitleFont","FabricTheme","BootstrapTheme","HighContrastTheme","ColorMappingSettings","HighlightSettings","NavigationLineSettings","showArrow","BubbleSettings","CommonTitleSettings","SubTitleSettings","TitleSettings","ShapeSettings","LayerSettings","isBaseLayer","Tile","MapsAreaSettings","layerRendering","shapeRendering","markerRendering","markerMouseMove","bubbleRendering","bubbleMouseMove","legendRendering","annotationRendering","itemSelection","itemHighlight","BingMap","getBingMap","subDomains","subDomain","quadKey","tileZoomLevel","digit","ColorMapping","getShapeColorMapping","colorValuePath","valuePath","shapeColor","colorMapping_1","LayerPanel","ajaxProcessCount","ajaxModule","ajaxResponse","measureLayerPanel","secondaryEle","isTileMap","tileSvgObject","layerGroup","processLayers","renderTileLayer","bing","currentFactor","panTileMap","generateTiles","markerModule","navigationLineModule","renderNavigation","translateLayerElements","layerType","bing_1","bingMapType","featureData","bbox","calculateRectBounds","calculatePathCollection","bubbleCalculation","bubbleSettings","bubbledata","renderData","groupElements","rectBounds","geometryData","coords","generatePoints","labelTemplateEle","currentShapeData","polyLineOptions","shapeID","drawingType","generateMultiPolygonPath","lineData","bubbleG","bubbleModule","bubble_1","bubbleData","renderBubble","bubbleIndex","coordinates","calculatePolygonBox","multiPolygonDatas","horFactor","verFactor","layerElement","baseTranslatePoint","baseScale","calculateRectBox","currentCoords","userLang","xcount","ycount","baseLayer","baseLayerIndex","urlTemplate","proxTiles","proxTiles_1","baseTile","subtile","arrangeTiles","tileElment","tiles_1","factorX","factorY","availSize","annotationXValue","annotationYValue","Maps","baseTileTranslatePoint","setTextStyle","setBackgroundValue","subtitleSettings","setLabelFont","mapsArea","layers_1","findBaseAndSubLayers","addTabIndex","processRequestJsonData","serverProcess","queryModule","processResponseJsonData","processAjaxRequest","localAjax","processType","renderMap","createTile","createZoomingToolbars","arrangeTemplate","zoomingChange","layerCollectionEle","tileRect","tileSvgRect","markerTemplateElements","templateGroupEle","toolBarGroup","alignToolBar","applyTransform","layerOffset","currentTemplate","templateOffset","mainLayer","parentRect","baseIndex","mainLayers","subLayers","subLayer","subLayerIndex","trimmedTitle","mapsOnClick","mapsOnDoubleClick","mouseDownOnMap","mouseMoveOnMap","mouseEndOnMap","mapsOnResize","markerClick","bubbleClick","bubbleMove","zoomByPosition","performZooming","addMarker","currentMarker","findVisibleLayers","isBubbleVisible","isMarkersVisible","isDataLabelVisible","isNavigationVisible","getBubbleVisible","isLayerVisible","isBubblevisible","istooltipVisible","layers_2","navigationLine_1","navigation","highlightSettings","markers_1","bubbles_1","bubble","Bubble","bubbleCollection","bubbleValue","getRatioOfBubble","shapePoints","midIndex","layer_1","bubbleElement","bubbleType","LayerIndex","BubbleIndex","DataIndex","transPoint","animationDelay","bubbleRadius","getbubble","trackElements","markerSVGObject","markerTemplateEle","markerIndex","markerData","markerID","shapeCustom","getMarker","rightWidth","leftWidth","heightTop","heightBottom","getDataLabel","shapeName","datasrcObj","labelpath","shapePoint","textLocation","eventargs","datalabel","trimmedLable","location1","xpositionEnds","xpositionStart","smartLabelMode","intersectionAction","border_1","NavigationLine","navigationEle","arrowColor","arrowSize","arrowSettings","arrowPosition","startArrow","endArrow","offSet","offSetValue","navigationGroup","arcId_1","radius_1","convertRadius","triId","legendBorderRect","interactiveLocation","legendItemRect","heightIncrement","widthIncrement","textMaxWidth","drawLegend","legendRenderingCollections","getLegends","getMarkersLegendCollections","legendTitle","titleTextStyle","legendItemStartX_1","legendItemStartY_1","legendMode","shapeLocation","labelAction","labelDisplayMode","arrangement","legendtitleSize","itemTextStyle","legendLength","position_1","textX_1","textY_1","itemStartX","itemStartY","maxTextWidth","itemTextSize","legendItem","legendTextSize","prvePositionX","nextPositionY","getPageChanged","prevPositionY","nextPositionX","DisplayText","ImageSrc","legendObj","getRangeLegendCollection","getEqualLegendCollection","getDataLegendCollection","shapeBorder","itemId","renderLegendBorder","shapeSize","shapeId","renderOptions_1","pagingGroup","pagingFont","pagingTextSize","leftPageX","rightPageX","pageTextX","leftPageElement","rightPageElement","rightPath","leftPath","leftPageOptions","leftRectPageOptions","rightPageOptions","rightRectPageOptions","pageTextOptions","trimTitle","getLegendAlignment","changeNextPage","imageSrc","rangeData_1","colorMapProcess_1","getLegendData","legendFill","getOverallLegendItemsCollection","legendData","newColllection","equalData_1","eqaulColorProcess_1","colorMapping_2","interactiveHandler","hoverId","renderInteractivePointer","invertedPointer","Highlight","addHighlight","mapHighlight","shapeIn","layerIndex_1","highlightMap","mouseClick","selectionsettings","selectionType","selectMap","enableMultiSelect","MapsTooltip","touchDelay","mouse","manipulateTarget","customTooltip","hoverElements","joinElements","elementString","mouseEnter","rectZoomingStart","handled","pinchFactor","newZoomFactor","prevLevel","prevScale","minBounds","maxBounds","mapTotalWidth","mapTotalHeight","translatePointX","translatePointY","getTileTranslatePosition","currentLevel","prevSize","performRectZooming","zoomCalculationFactor","setInteraction","newInteraction","lastScale","interaction","updateInteraction","fingers","touchCenter","newScale","newTileFactor","translatePointX_1","translatePointY_1","drawZoomRectangle","mouseDownPoints","mouseMovePoints","rectSVGObject","rectOption","animateTransform","templateCount","currentEle","markerTranslate","bubleIndex","dataLabelTranslate","markerTemplateElement","datalabelTemplateElemement","layerEle","y_1","panning","x_2","y_2","layerRect","panningXDirection","panningYDirection","toolBarZooming","tileZoomFactor","xSpacing","ySpacing","toolBarOrientation","toolbarsCollection","toolbars","toolBarLength","toolWidth","toolHeight","toolbar_1","currentToolbarEle","performToolBarAction","panColor","performZoomingByToolBar","zoomColor","panningStyle","toolBarSize","mapMouseWheel","mouseWheelZoom","doubleClickZoom","firstMove","pinchZooming","zoomRectElement","zoomOnClick","boundwidth","boundHeight","layerScale","topPos","index.Maps","index.Bubble","index.Marker","index.Highlight","index.MapsTooltip","index.NavigationLine","fields_1","MESSAGE","PROGRESS","ToastPosition","ButtonModelProps","ToastAnimations","ToastAnimationSettings","Toast","progressObj","intervalId","titleTemplate","contentTemplate","toastTemplate","toastObj","templateChanges","toastContainer","getContainer","setPositioning","toastEle","setWidthHeight","personalizeToast","templateRendering","setProgress","appendToTarget","clearContentTemplate","clearTitleTemplate","clearToastTemplate","fetchEle","newestOnTop","destroyToast","tempVar","clo","clearProgress","clearContainerPos","customPosition","hideAnimate","toastClose","progressEle","setIcon","setTitle","closeBtn","CLOSEBTN","hideEta","maxHideTime","timeOutId","extendedTimeout","toastHoverAction","delayedToastProgress","showProgressBar","progressBarEle","updateProgressBar","percentage","titleEle","msgContainer","appendMessageContainer","actionBtnContainer","actionBtn","btnDom","toastBeforeOpen","displayToast","clickToClose","isCloseIcon","showAnimate","toastOpen","PivotUtil","PivotEngine","savedFieldList","formatFields","calculatedFields","calculatedFormulas","valueMatrix","indexMatrix","enableSort","drilledMembers","formatSettings","calculatedFieldSettings","enableSorting","isExpandAll","isMutiMeasures","valueSortSettings","headerDelimiter","valueSortData","fillFieldMembers","updateSortSettings","generateValueMatrix","filterMembers","updateFilterMembers","generateGridData","sortByValue","valueSort","vlen","childMembers","iterateValueSortData","getFormattedFields","lnt","isSort","dataFields","getCalculatedField","fieldList","updateTreeViewData","aggregateType","formula","actualFormula","fieldKeys","calc","calcProperties","powerFunction","formulaType","lmt","aggregateValue","indMat","dlen","fList","kLn","kl","members","formattedMembers","dateMember","isDataAvail","dl","mkey","ordinal","isDrilled","actualText","fillDrilledInfo","mem","vMat","keyLen","flList","tkln","sln","slt","filterRw","isInclude","getFilters","dln","indexObject","ilist","filterElements","rln","rlt","frameFilterList","fln","allowFil","final","iln","ilt","applyValueSorting","valueSortOrder","pivotValues","rmembers","cmembers","paging","getIndexedHeaders","rowCurrentPage","rowSize","columnCurrentPage","columnSize","insertAllMember","valueContent","colheads","valuesCount","getHeaderData","insertSubTotals","getTableData","isEngineUpdated","rowCnt","savedCell","spanCnt","colCnt","rowPos","levelName","keyInd","parentMember","rlen","decisionObj","childrens","lt","memInd","headerValue","reformAxis","tnum","vlt","actCnt","isLeastNode","cln","clt","vln","mPos","getAggregateValue","vcnt","colItmLn","sortText","lvl","calObj","vData","ri","avgCnt","isMaxFirst","calcField","aggregateField","aggregatedValue","type_1","formatSetting","enginePopulating","enginePopulated","beforeExport","initSubComponent","treeViewUpdate","pivotButtonUpdate","initCalculatedField","DEVICE","ICON_DISABLE","WRAPPER_CLASS","TOGGLE_FIELD_LIST_CLASS","FIELD_LIST_CLASS","FIELD_LIST_FOOTER_CLASS","RIGHT_AXIS_PANEL_CLASS","AXIS_CONTENT_CLASS","AXIS_PROMPT_CLASS","PIVOT_BUTTON_WRAPPER_CLASS","PIVOT_BUTTON_CLASS","SORT_DESCEND_CLASS","FILTER_COMMON_CLASS","FILTERED_CLASS","DROP_INDICATOR_CLASS","INDICATOR_HOVER_CLASS","EDITOR_TREE_WRAPPER_CLASS","EDITOR_TREE_CONTAINER_CLASS","NODE_CHECK_CLASS","OK_BUTTON_CLASS","CANCEL_BUTTON_CLASS","ERROR_DIALOG_CLASS","DROPPABLE_CLASS","COLUMN_AXIS_CLASS","FILTER_AXIS_CLASS","GROUPING_BAR_CLASS","GROUP_ROW_CLASS","NO_DRAG_CLASS","SELECTED_NODE_CLASS","TEXT_CONTENT_CLASS","ADAPTIVE_FIELD_LIST_BUTTON_CLASS","ADAPTIVE_CALCULATED_FIELD_BUTTON_CLASS","ADD_ICON_CLASS","LIST_TEXT_CLASS","LIST_SELECT_CLASS","COLLAPSE","TOOLTIP_HEADER","TOOLTIP_CONTENT","EDITOR_SEARCH_WRAPPER_CLASS","CALCINPUT","FORMAT","FORMULA","TREEVIEWOUTER","CALC_EDITED","colPos","engine","engineModule","gridSettings","formatList","getFormatList","injectGridModules","getRowStartPos","frameDataSource","frameStackedHeaders","calculateGridWidth","bindGrid","contextMenuClick","beforeCopy","beforePrint","setGroupWidth","resizeStop","onResizeStop","rowCellBoundEvent","borderRight","borderLeft","columnCellBoundEvent","excelColumnEvent","pdfColumnEvent","excelQueryCellInfo","excelRowEvent","pdfQueryCellInfo","pdfRowEvent","updateGridSettings","appendValueSortIcon","rCnt","cCnt","vSort","pivotView","showGroupingBar","groupingBarModule","cls.GROUPING_BAR_CLASS","localizedText","cls.COLLAPSE","cls.ICON","hdrdiv","dataContent","frameEmptyData","calculateColWidth","parWidth","colTotWidth","integrateModel","headerCnt","headerSplit","splitPos","actualCnt","colField","tmpSpan","innerModel","frameEmptyColumns","formatArray","vCnt","fCnt","exportHeaderEvent","exportContentEvent","FieldOptions","FieldListFieldOptions","CalculatedFieldSettings","FormatSettings","DrillOptions","ValueSortSettings","GridSettings","KeyboardInteraction","pivotViewKeyboardModule","processTab","processEnter","getNextButton","allPivotButtons","cls.PIVOT_BUTTON_CLASS","gridFocus","nextButton","showFieldList","cls.TOGGLE_FIELD_LIST_CLASS","PivotContextMenu","renderContextMenu","onBeforeMenuOpen","onSelectContextMenu","dropClass","pivotCommon","dataSourceUpdate","GroupingBarSettings","PivotView","isCommonRequire","allowCalculatedField","isAdaptive","setToolTip","onBeforeTooltipOpen","grandTotal","noValue","rowAxisPrompt","columnAxisPrompt","valueAxisPrompt","filterAxisPrompt","calculatedField","createCalculatedField","invalidFormula","dropText","dropTextMobile","warning","ok","allFields","addToRow","addToColumn","addToValue","addToFilter","emptyData","fieldExist","confirmText","noMatches","formulaField","dragField","isDragging","addInternalEvents","updateClass","events.initSubComponent","generateData","renderPivotGrid","onContentReady","removeInternalEvents","axisFieldModule","isRefreshGrid","events.enginePopulated","cls.ROOT","cls.DEVICE","onDrill","fieldAvail","memIndex","pivotFieldListModule","fieldListSpinnerElement","cls.TOOLTIP_HEADER","cls.TOOLTIP_CONTENT","getRowText","getColText","rowText","colText","enableValueSorting","CellClicked","timeOutObj","cellClick","events.enginePopulating","exportToExcel","dataCollections","events.beforeExport","workSheets","dataColl","colLen","actualrCnt","pivotCell","PDFExport","exportToPDF","gridResult","eventParams","applyEvent","dataCollIndex","colLength","integratedCnt","isColHeader","pdfGridRow","localCnt","isEmptyRow","isValueCell","CommonKeyboardInteraction","ctrlF","ctrlS","processSort","processDelete","cls.FILTER_COMMON_CLASS","EventBase","updateSorting","filterDialog","dialogPopUp","cls.SORT_DESCEND_CLASS","sortObj","getSortItemByName","newSortObj","updateFiltering","fieldCaption","filterItems","getFilterItemByName","getTreeData","popupTarget","createFilterDialog","sortObjects","filterObjects","searchTreeNodes","treeObj","searchList","nonSearchList","members_1","checkedStatus","NodeStateModified","onStateModified","droppedClass","nodeDropped","cls.DROPPABLE_CLASS","droppedPosition","cls.COLUMN_AXIS_CLASS","cls.FILTER_AXIS_CLASS","errorDialog","createErrorDialog","getButtonPosition","targetBtn","cls.PIVOT_BUTTON_WRAPPER_CLASS","axisPanel","pivotButtons","DataSourceUpdate","dataSourceItem","removeFieldFromReport","getNewField","isDataSource","ErrorDialog","cls.ERROR_DIALOG_CLASS","errorPopUp","closeErrorDialog","cls.OK_BUTTON_CLASS","removeErrorDialog","FilterDialog","editorDialog","createTreeView","renderMode","closeFilterDialog","cls.CANCEL_BUTTON_CLASS","removeFilterDialog","updateCheckedState","editorTreeWrapper","cls.EDITOR_TREE_WRAPPER_CLASS","cls.EDITOR_SEARCH_WRAPPER_CLASS","editorSearch","selectAllWrapper","selectAllContainer","treeViewContainer","cls.EDITOR_TREE_CONTAINER_CLASS","promptDiv","cls.EMPTY_MEMBER_CLASS","cls.ICON_DISABLE","eventBase","memberTreeView","disabledList","allMemberSelect","nodeChecking","validateTreeNode","visibleNodes","uncheckedNodes","getUnCheckedNodes","getCheckedNodes","cls.NODE_CHECK_CLASS","treeNodes","PivotCommon","pivotEngine","nodeStateModified","DialogRenderer","fieldListWrappper","cls.WRAPPER_CLASS","renderAdaptiveLayout","renderFieldListDialog","unWireDialogEvent","wireDialogEvent","renderStaticLayout","createCalculatedButton","toggleFieldList","fieldListDialog","showFieldListDialog","cls.ADAPTIVE_FIELD_LIST_BUTTON_CLASS","cls.ADD_ICON_CLASS","showCalculatedField","cls.ADAPTIVE_CALCULATED_FIELD_BUTTON_CLASS","onCloseFieldList","removeFieldListIcon","cls.FIELD_LIST_FOOTER_CLASS","selectedNodes_1","adaptiveElement","layoutFooter","createAxisTable","events.initCalculatedField","createAddButton","calculatedButton","calculateField","cls.CALCULATED_FIELD_CLASS","calculatedFieldModule","footerContainer","fieldListButton","axisWrapper","cls.FIELD_LIST_CLASS","axisContent","cls.AXIS_CONTENT_CLASS","axisPrompt","cls.AXIS_PROMPT_CLASS","dialogRenderer","activeindex","treeViewModule","onShowFieldList","TreeViewRenderer","renderTreeDialog","fieldTable","treeHeader","treeViewElement","centerDiv","axisHeader","renderTreeView","nodeChecked","nodeStateChange","nodeDragStart","nodeDragStop","getTreeUpdate","fieldDialog","closeTreeDialog","onFieldAdd","cls.LIST_TEXT_CLASS","cls.SELECTED_NODE_CLASS","cls.NO_DRAG_CLASS","isNodeDropped","isDropped","getButton","droppableElement","sourcePosition","dropPosition","droppableButton","cls.DROP_INDICATOR_CLASS","cls.INDICATOR_HOVER_CLASS","cls.TEXT_CONTENT_CLASS","pivotFieldList","cls.LIST_SELECT_CLASS","liElements_1","refreshTreeView","currentFieldSet","currentFieldSet_1","events.treeViewUpdate","AxisTableRenderer","axisTable","leftAxisPanel","rightAxisPanel","cls.RIGHT_AXIS_PANEL_CLASS","renderAxisTable","fieldLabels","axisTitleWrapper","cls.AXIS_ICON_CLASS","getIconupdate","localePrompt","updateDropIndicator","PivotButton","pivotButtonModule","renderPivotButton","buttonWrapper","data-tag","data-uid","dropIndicatorElement","dropLastIndicatorElement","dragWrapper","createButtonDragIcon","data-type","createSortOption","createFilterOption","groupingBarSettings","showRemoveIcon","createDraggable","createDragClone","onDragStart","onDragging","onDragStop","pivotButton","dragElement","showSortIcon","filterCLass","cls.FILTERED_CLASS","showFilterIcon","isButtonDropped","droppableTarget","pivotGridModule","updateFilterState","removeButton","unCheckedNodeCount","filterItem","refreshPivotButtonState","removeDataSourceSettings","selectedButton","pivotButtons_1","events.pivotButtonUpdate","AxisFieldRenderer","createPivotButtons","axisTableModule","PivotFieldList","staticFieldList","dropFilterPrompt","dropColPrompt","dropRowPrompt","dropValPrompt","addPrompt","adaptiveFieldHeader","centerHeader","captionData","fieldListRender","getFieldCaption","isTreeViewRefresh","CALC","CalculatedField","existingReport","newFields","isFieldExist","formulaText","currentFieldName","confirmPopUp","displayMenu","dropField","fieldClickHandler","cls.FORMAT","cls.CALC_EDITED","cls.CALCINPUT","curMenu","openContextMenu","selectContextMenu","beforeMenuOpen","applyFormula","report","cField","createConfirmDialog","addFormula","getFieldListData","fieldDropped","textCovered","cursorPos","textBeforeText","textAfterText","renderDialogElements","outerDiv","cls.FORMULA","accordDiv","addBtn","inputDiv","fieldTitle","wrapDiv","cls.TREEVIEWOUTER","formulaTitle","dropDiv","okBtn","renderMobileLayout","nodeCollapsing","dragItem","nodeClicked","drawNode","drawTreeNode","createTypeContainer","data-ftxt","getAccordionData","cancelBtnClick","cls.FLAT","accordion","expanding","addBtnClick","createCalculatedFieldDialog","renderDialogLayout","keyboardEvents","replaceFormula","FieldList","initiateModule","Common","commonModule","initiateCommonModule","AxisFields","cls.GROUP_ROW_CLASS","GroupingBar","touchObj","renderLayout","groupingTable","rowAxisPanel","cls.AXIS_ROW_CLASS","columnAxisPanel","cls.AXIS_COLUMN_CLASS","valueAxisPanel","cls.AXIS_VALUE_CLASS","filterAxisPanel","cls.AXIS_FILTER_CLASS","rowPanel","columnPanel","cls.GROUP_COLUMN_CLASS","valuePanel","cls.GROUP_VALUE_CLASS","filterPanel","cls.GROUP_FILTER_CLASS","axisPanels_1","colGroupElement","emptyHeader","rightAxisPanelWidth","rightPanelHeight","topLeftHeight","columnRows","trCell","colHeight","columnRows_1","rowHeader_1","rightAxisWidth","emptyRowHeader","groupHeight","columnRows_2","rowHeader_2","dropIndicatorUpdate","index.PivotView","index.GroupingBar","index.FieldList","index.CalculatedField","replaceTheme","ensureTemplate","iframeMouseDown","toolbarClick","toolbarUpdated","bindOnEnd","renderColorPicker","htmlToolbarClick","markdownToolbarClick","destroyColorPicker","toolbarRenderComplete","enableFullScreen","disableFullScreen","dropDownSelect","beforeDropDownItemRender","execCommandCallBack","imageToolbarAction","linkToolbarAction","insertLink","updateToolbarItem","insertCompleted","imageLink","imageAlt","imageSize","sourceCode","updateSource","beforeDropDownOpen","selectionSave","selectionRestore","expandPopupClick","sourceCodeMouseDown","editAreaClick","colorPickerChanged","focusChange","getSelectedHtml","renderInlineToolbar","CLS_SCRIPT_SHEET","CLS_STYLE_SHEET","CLS_TOOLBAR","CLS_INLINE","CLS_FULL_SCREEN","CLS_QUICK_DROPDOWN","CLS_INLINE_POP","CLS_INLINE_DROPDOWN","CLS_DROPDOWN_POPUP","CLS_DROPDOWN_ICONS","CLS_DROPDOWN_ITEMS","CLS_DROPDOWN_BTN","CLS_RM_WHITE_SPACE","CLS_IMGRIGHT","CLS_IMGLEFT","CLS_IMGCENTER","CLS_IMGBREAK","CLS_CAPTION","CLS_CAPINLINE","CLS_EXPAND_OPEN","CLS_RTE_ELEMENTS","CLS_COLOR_CONTENT","ToolbarType","templateItems","tools","alignments","justifyleft","justifycenter","justifyright","justifyfull","fontname","backgroundcolor","clearformat","clearall","unorderedlist","orderedlist","outdent","createlink","openlink","editlink","removelink","openimagelink","editimagelink","removeimagelink","insertlink","alttext","dimension","fullscreen","maximize","minimize","lowercase","uppercase","sourcecode","viewside","insertcode","alignmentItems","imageAlignItems","imageDisplayItems","justifyLeft","justifyCenter","justifyRight","justifyFull","unorderedList","orderedList","createLink","openLink","editLink","removeLink","altText","lowerCase","upperCase","insertCode","linkTooltipLabel","linkWebUrl","linkurl","linkOpenInNewWindow","linkHeader","dialogInsert","dialogCancel","dialogUpdate","imageHeader","imageLinkHeader","mdimageLink","imageUploadMessage","imageDeviceUploadMessage","imageAlternateText","alternateHeader","imageCaption","imageSizeHeader","textPlaceholder","ToolbarRenderer","popupOverlay","onPopupOverlay","toolbarBeforeCreate","toolbarCreated","toolbarClicked","events.toolbarClick","dropDownSelected","events.dropDownSelect","events.beforeDropDownItemRender","events.selectionSave","dropDownClose","events.selectionRestore","renderToolbar","rteToolbarObj","beforeCreate","renderDropDownButton","inlineMode","events.beforeDropDownOpen","classes.CLS_QUICK_DROPDOWN","setIsModel","popupContainer","paletteSelection","dropDownArgs","colorbox","renderColorPickerDropDown","currentDropdown","colorpickerValue","events.colorPickerChanged","onmousedown","beforeTileRender","colorPickerArgs","iosDevices","isIDevice","beforeModeSwitch","toolbarPanel","BaseToolbar","renderFactory","getTemplateObject","getID","tbItems_1","getToolbarOptions","toolbarRenderer","DropDownButtons","initializeInstance","dropdownContent","renderDropDowns","containerType","tbElement","model.templateItems","classes.CLS_DROPDOWN_BTN","formatItem","classes.CLS_DROPDOWN_POPUP","classes.CLS_DROPDOWN_ITEMS","fontItem","imageAlignDropDown","classes.CLS_DROPDOWN_ICONS","model.imageAlignItems","displayDropDown","model.imageDisplayItems","removeDropDownClasses","destroyDropDowns","events.iframeMouseDown","onIframeMouseDown","ToolbarAction","renderSelection","events.htmlToolbarClick","events.markdownToolbarClick","isToolbar","editableElement","getEditPanel","editPanel","toolbarBindEvent","keyBoardModule","getToolbarElement","toolBarKeyDown","keyConfig","createToolbarElement","createEle","enableFloating","tbWrapper","getToolbarMode","tbMode","checkToolbarResponsive","addFixedTBarClass","events.renderColorPicker","toggleFloatTBarOffset","floatingToolbarOffset","toggleFloatClass","scrollParent","floatOffset","isBody","scrollParentRelativeTop","trgHeight","tbHeight","getToolbarHeight","getExpandTBarPopHeight","bodyStyle","targetTop","scrollParentYOffset","scrollParentRect","scrollParentTop","events.renderInlineToolbar","refreshToolbarOverflow","removeFixedTBarClass","showFixedTBar","hideFixedTBar","model.tools","targetItem","addTBarItem","updateToolbarStatus","fullScreenModule","showFullScreen","hideScreen","hideFullScreen","getBaseToolbar","enableTBarItems","editorManager","undoRedoManager","getUndoStatus","removeTBarItems","popHeight","expandPopup","classes.CLS_EXPAND_OPEN","classes.CLS_TOOLBAR","isToolbarDestroyed","destroyToolbar","unWireScrollElementsEvents","events.destroyColorPicker","focusChangeHandler","dropDownBeforeOpenHandler","toolbarMouseDownHandler","toolbarActionModule","events.bindOnEnd","events.toolbarUpdated","events.enableFullScreen","events.disableFullScreen","events.updateToolbarItem","events.expandPopupClick","events.focusChange","events.mouseDown","events.sourceCodeMouseDown","wireScrollElementsEvents","]","[","BaseQuickToolbar","isDOMElement","popupRenderer","dropDownButtons","appendPopupContent","toolbarElement","popupType","classes.CLS_INLINE_POP","popupId","stringItems","classes.CLS_RTE_ELEMENTS","quickTBarObj","imgWrapper","classes.CLS_RM_WHITE_SPACE","targetOffsetTop","parentOffsetTop","parentData","editTop","tBarElementHeight","editHeight","popWidth","parentTop","contentTop","windowY","windowHeight","windowWidth","bodyRightSpace","editPanelTop","editPanelHeight","bodyRight","toolbarAvail","expTBHeight","tBarHeight","iframeSettings","contentWindow","disableToolbarItem","enableToolbarItem","showPopupData","removeEleFromDOM","addQTBarItem","removeQTBarItem","getBaseToolbarObject","PopupRenderer","popupPanel","QuickToolbar","formatItems","formattedItems","getQTBarOptions","popType","createQTBar","qTBar","initializeQuickToolbars","quickToolbarModule","onMouseDown","isRTE","renderQuickToolbars","linkQTBar","imageQTBar","textQTBar","quickToolbarSettings","LinkToolbar","TextToolbar","ImageToolbar","renderInlineQuickToolbar","inlineQTBar","InlineToolbar","showInlineQTBar","hideInlineQTBar","hideQuickToolbars","deBounce","deBouncer","getRange","isIFrame","onSelection","inlineQTBarMouseDownHandler","getInlineBaseToolbar","wireInlineQTBarEvents","events.keyDown","unWireInlineQTBarEvents","renderCount","appendCount","charCountBackground","htmlLength","restrict","showCharCount","arrayKey","events.sourceCode","events.updateSource","ColorPickerInput","renderColorPickerInput","suffixID","fontNode","fontColorPicker","fontColorDropDown","backgroundColorPicker","backgroundColorDropDown","events.toolbarRenderComplete","MarkdownSelection","getLineNumber","getAllParents","getSelectedLine","getLine","getSelectedParentPoints","selectedPoints","selectedLine","startLength","textArea","isStartWith","replaceSpecialChar","getRegex","syntax","getSelectedInlinePoints","MarkdownToolbarStatus","toolbarStatus","inlinecode","onRefreshHandler","parentsLines","isListsApplied","mdSelectionFormats","isAppliedCommand","listTags","formatTags","checkLine","selectionDirection","parentLines","firstPrevText","lastNextText","ExecCommandCallBack","events.execCommandCallBack","commandCallBack","FORMAT_TYPE","KEY_DOWN_HANDLER","KEY_UP_HANDLER","Formatter","rangeCount","getRangeAt","getAncestorNode","commonAncestorContainer","CONSTANT.actionBegin","getUndoRedoStack","enableUndo","onKeyHandler","CONSTANT.execCommandCallBack","CONSTANT.actionComplete","editorMode","CONSTANT.insertCompleted","isNotify","undoRedoStack","LISTS_COMMAND","selectionCommand","LINK_COMMAND","CLEAR_COMMAND","MDLists","markdownSelection","CONSTANT.LISTS_COMMAND","applyListsHandler","EVENTS.KEY_DOWN_HANDLER","EVENTS.KEY_UP_HANDLER","tabKey","enterKey","addedLength","isNotFirst","isNotFirstLine","getListRegex","getAction","tabSpaceLength","splitTab","getTabSpace","curTabSpace","prevTabSpace","ol","OL","UL","tabSpace","appliedLine","configKey","MDFormats","EVENTS.FORMAT_TYPE","applyFormats","cleanFormat","applyCodeBlock","CONSTANT.selectionCommand","clearRegex","MDSelectionFormats","applyCommands","isMatch","matchText","InlineCode","StrikeThrough","singleCharRegx","multiCharRegx","isFormat","splitText","splitAt","cmdB","cmdI","beforeText","afterText","isApplied","textReplace","repStart","repEnd","repStartText","replaceAt","repEndText","regxB","repText","regxTemp","regTest","markdownFormatTags","h6","h5","h4","h3","h1","blockquote","markdownSelectionTags","UpperCase","LowerCase","markdownListsTags","htmlKeyConfig","toolbar-focus","insert-link","insert-image","outdents","html-source","full-screen","decrease-fontsize","increase-fontsize","justify-center","justify-full","justify-left","justify-right","clear-format","ordered-list","unordered-list","markdownKeyConfig","UndoRedoCommands","undoRedoSteps","undoRedoTimer","onAction","changEle","removedContent","MDLink","CONSTANT.LINK_COMMAND","ClearFormat","CONSTANT.CLEAR_COMMAND","replaceRegex","clearSelectionTags","selectionTags","expString","regExp","startExp","endExp","clearFormatTags","MarkdownParser","listObj","formatObj","linkObj","clearObj","editorKeyDown","editorKeyUp","exeValue","MarkdownFormatter","updateFormatter","editElement","MarkdownRender","rteID","rteObj","MarkdownEditor","saveSelection","onToolbarClick","events.selectAll","events.getSelectedHtml","onSelectionSave","onSelectionRestore","events.insertLink","events.insertImage","toolbarUpdate","IMAGE","ALIGNMENT_TYPE","BLOCK_TAGS","SELECTION_TYPE","INSERTHTML_TYPE","NodeSelection","startNodeName","endNodeName","saveInstance","cloneRange","documentFromRange","startContainer","getNodeArray","endContainer","docElement","isChildNode","getNodeCollection","getParentNodeCollection","getParentNodes","getSelectionNodeCollection","getSelectionNodes","getInsertNodeCollection","getInsertNodes","setRangePoint","isvalid","constant","setSelectionText","setEnd","setSelectionContents","setSelectionNode","getSelectedNodes","insertParentNode","surroundContents","setCursorPoint","markerClassName","startSelection","DOMNode","currentDocument","nodeSelection","isBlockNode","CONSTANT.BLOCK_TAGS","isLink","blockParentNode","rawAttributes","rawAttr","orderRawAttr","attrKey","attrValue","clearAttributes","openTagString","closeTagString","createTagString","relativeElement","parseHTMLFragment","createContextualFragment","referenceNode","wrapInner","unWrap","unWrapNode","getSelectedNode","TEXT_NODE","nodeFinds","existNodes","isEditorArea","getPreviousNode","saveMarker","startTextNode","endTextNode","setMarker","blockNodes","collectionNodes","listNodes","Lists","domNode","ignoreDefault","revertList","revertClean","nestedList","cleanNode","prevSibling","siblingList","nestedElement","listsNodes","applyLists","isRevert","checkLists","openTag","closeTag","replaceHTML","collectionString","nodesTemp","liParents","contentNodes","viewNode","classAttr","nodeInnerHtml","emptyLi","emptyUl","Formats","formatsNodes","cleanFormats","replaceTag","ignoreAttr","InsertMethods","WrapBefore","AppendBefore","Wrap","unwrap","NodeCutter","GetSpliceNode","SplitNode","setStartBefore","setEndAfter","extractContents","spliceEmptyNode","GetCursorStart","GetCursorRange","cursorRange","TrimLineBreak","GetCursorNode","InsertHtml","insertNode","nodeCutter","sibNode","lasNode","LinkCommand","selectParent","Alignments","JustifyLeft","JustifyCenter","JustifyRight","JustifyFull","CONSTANT.ALIGNMENT_TYPE","alignmentNodes","text-align","indentValue","applyIndents","indentsNodes","parentNodes","indentsValue","ImageCommand","CONSTANT.IMAGE","createImage","imgEle","IsFormatted","getFormattedNode","getFormatParent","isFormattedNode","isUnderline","isStrikethrough","isSuperscript","isSubscript","isFontColor","isFontName","isFontSize","isBackgroundColor","inlineTags","SelectionCommands","domSelection","isFormatted","isCursor","isFontStyle","cursorNode","insertCursorNode","formatNode","removeFormat","cursorNodes","cursorFormat","getInsertNode","splitNode","GetFormatNode","toLocaleUpperCase","getChildNode","SelectionBasedExec","CONSTANT.SELECTION_TYPE","InsertHtmlExec","CONSTANT.INSERTHTML_TYPE","applyHtml","exactNodes","cloneSelectNodes","clearInlines","reSelection","cloneParentNodes","clearBlocks","selectionNodes","endIndexNode","spliceParent","removeParent","parentIndex","NONVALID_TAGS","NONVALID_PARENT_TAGS","removeInlineParent","ClearFormatExec","applyClear","UndoRedoManager","EditorManager","alignmentObj","indentsObj","imgObj","selectionObj","inserthtmlObj","HTMLFormatter","statusCollection","ToolbarStatus","formatCollection","isOrderedList","isUnorderedList","isAlignment","isFormats","HtmlToolbarStatus","rteContent","contenteditable","IframeContentRender","iFrameContent","iframe","contentDocument","HtmlEditor","rangeCollection","nodeSelectionObj","colorPickerModule","events.selectRange","enableTabKey","textCont","spaceLink","selectNodeEle","urlText","selectParentEle","events.imageToolbarAction","events.linkToolbarAction","linkDialog","imageDialog","onCopy","onCut","events.insertCompleted","showLinkQuickToolbar","onToolbarAction","events.editAreaClick","editAreaClickHandler","quickToolObj","linkTop","linkPos","hideLinkQuickToolbar","inputDetails","selectText","linkWebAddress","linkDisplayText","linkTooltip","urlPlace","textPlace","linkDialogEle","linkContent","contentElem","linkTarget","linkUrl","linkTitle","linkOpenLabel","checkBoxObj","linkInsert","linkCancel","selectObj","selfLink","cancelDialog","checkUrl","linkEle","isUrl","linkUpdate","showImageQuickToolbar","deleteImg","events.imageLink","insertImgLink","events.imageAlt","insertAltText","events.imageSize","alignmentSelect","afterRender","imageClick","openImgLink","editImgLink","removeImgLink","justifyImageLeft","justifyImageCenter","justifyImageRight","imageWithLinkQTBarItemUpdate","newItems","hideImageQuickToolbar","imagDialog","linkWrap","inputLink","linkargs_1","selfImage","altWrap","altHeader","inputAlt","altArgs_1","insertAlt","classes.CLS_CAPTION","captionEle","imgWrap","imgInner","imgCaption","classes.CLS_CAPINLINE","classes.CLS_IMGBREAK","classes.CLS_IMGLEFT","classes.CLS_IMGRIGHT","classes.CLS_IMGCENTER","imgSizeHeader","dialogContent","imgsizeInput","insertSize","imgDialog","imgInsert","imglinkCancel","imgHeader","insertImageUrl","imageUrlPopup","imgUrl","placeUrl","inputUrl","uploadUrl","matchUrl","insertImageSettings","imgSizeWrap","dialogEle","imgUpload","linkHeaderText","uploadParentEle","deviceImgUpMsg","imgUpMsg","btnEle","browserMsg","fileSelect","uploadEle","uploadObj","allowedTypes","removing","dataurl","mime","bstr","u8arr","ViewSource","onInitialEnd","updateSourceCode","CONSTANT.KEY_DOWN_HANDLER","getSourceCode","previewKeyDown","previewElement","wireBaseKeyDown","unWireBaseKeyDown","updateValueData","invokeChangeEvent","editHTML","executeGroup","strikeThrough","formatBlock","heading","insertHTML","insertHorizontalRule","insertBrOnReturn","insertOrderedList","insertUnorderedList","ToolbarSettings","ImageSettings","QuickToolbarSettings","FontFamily","FontSize","FontColor","BackgroundColor","Resources","IFrameSettings","InlineMode","FullScreen","scrollableParent","classes.CLS_FULL_SCREEN","toggleParentOverflow","RichTextEditor","isFocusOut","updateEnable","setContainer","originalElement","rteOutterWrapper","executeCommand","commandName","decode","sourceCodeModule","RTERender","allowedKeys","placeHolderWrapper","updatePanelValue","frameSetting","scripts","classes.CLS_SCRIPT_SHEET","removeSheets","classes.CLS_STYLE_SHEET","setIframeSettings","countModule","enableHtmlEncode","srcList","updateReadOnly","printArgs","removeToolbarItem","styleSrc","scriptSrc","InjectSheet","scriptSheet","scriptEle","createScriptElement","styleEle","createStyleElement","rel","compiledTemplate","heightValue","rteHeight","expandPopHeight","getHtml","showSourceCode","preventDefaultResize","preventImgResize","defaultResize","resizeHandler","cloneValue","scrollParentElements","index.RichTextEditor","index.Link","index.Image","index.Count","index.QuickToolbar","index.HtmlEditor","index.MarkdownEditor","navigating","renderCell","eventClick","eventRendered","scrollUiUpdate","documentClick","cellMouseDown","tapHoldReady","DISABLE_CLASS","TABLE_CONTAINER_CLASS","ALLDAY_CELLS_CLASS","ALLDAY_ROW_CLASS","CONTENT_TABLE_CLASS","WORK_CELLS_CLASS","WORK_HOURS_CLASS","DATE_HEADER_WRAP_CLASS","DATE_HEADER_CONTAINER_CLASS","HEADER_CELLS_CLASS","CURRENTDATE_CLASS","CURRENT_PANEL_CLASS","PREVIOUS_PANEL_CLASS","TRANSLATE_CLASS","HIDE_CHILDS_CLASS","APPOINTMENT_WRAPPER_CLASS","RESOURCE_TOOLBAR_CONTAINER","RESOURCE_HEADER_TOOLBAR","SELECTED_CELL_CLASS","APPOINTMENT_WRAP_CLASS","WRAPPER_CONTAINER_CLASS","APPOINTMENT_CONTAINER_CLASS","APPOINTMENT_CLASS","APPOINTMENT_BORDER","APPOINTMENT_DETAILS","TABLE_WRAP_CLASS","OUTER_TABLE_CLASS","CONTENT_WRAP_CLASS","AGENDA_CELLS_CLASS","AGENDA_SELECTED_CELL","NAVIGATE_CLASS","AGENDA_HIDDEN_CLASS","APPOINTMENT_INDICATOR_CLASS","EVENT_INDICATOR_CLASS","EVENT_RECURRENCE_ICON_CLASS","EVENT_RECURRENCE_EDIT_ICON_CLASS","ALLDAY_APPOINTMENT_WRAPPER_CLASS","ROW_COUNT_WRAPPER_CLASS","ALLDAY_APPOINTMENT_SECTION_CLASS","APPOINTMENT_ROW_EXPAND_CLASS","APPOINTMENT_ROW_COLLAPSE_CLASS","MORE_INDICATOR_CLASS","POPUP_HEADER_CLASS","POPUP_HEADER_ICON_WRAPPER","POPUP_FOOTER_CLASS","DATE_TIME_DETAILS_CLASS","QUICK_POPUP_EVENT_DETAILS_CLASS","EVENT_CREATE_CLASS","EDIT_EVENT_CLASS","DELETE_EVENT_CLASS","TEXT_ELLIPSIS","MORE_POPUP_WRAPPER_CLASS","MORE_EVENT_POPUP_CLASS","MORE_EVENT_DATE_HEADER_CLASS","MORE_EVENT_HEADER_DATE_CLASS","MORE_EVENT_CLOSE_CLASS","MORE_EVENT_CONTENT_CLASS","MORE_EVENT_WRAPPER_CLASS","QUICK_DIALOG_EDIT_EVENT_CLASS","QUICK_DIALOG_EDIT_SERIES_CLASS","QUICK_DIALOG_DELETE_CLASS","QUICK_DIALOG_CANCEL_CLASS","QUICK_DIALOG_ALERT_BTN_CLASS","EVENT_WINDOW_DIALOG_CLASS","FORM_CLASS","EVENT_WINDOW_ALL_DAY_CLASS","TIME_ZONE_CLASS","SUBJECT_CLASS","LOCATION_CLASS","EVENT_WINDOW_START_CLASS","DESCRIPTION_CLASS","EVENT_WINDOW_START_TZ_CLASS","EVENT_WINDOW_END_TZ_CLASS","EVENT_WINDOW_DELETE_BUTTON_CLASS","EDIT_ICON_CLASS","DELETE_CLASS","CLOSE_CLASS","CLOSE_ICON_CLASS","EVENT_TOOLTIP_ROOT_CLASS","POPUP_WRAPPER_CLASS","RESOURCE_LEVEL_TITLE","RESOURCE_TREE_POPUP_OVERLAY","RESOURCE_TREE_POPUP","HeaderRenderer","events.documentClick","closeHeaderPopup","hideHeaderPopup","headerPopup","toolbarEle","prevNavEle","nextNavEle","updateActiveView","updateItems","getPopUpRelativeElement","setDayOfWeek","headerCalendar","setCalendarDate","getCalendarView","setCalendarView","calendarView","setRtl","viewIndex","updateDateRange","getDateRangeText","showInPopup","viewName","renderHeaderPopup","headerPopupEle","headerCalendarEle","calendarChange","changeDate","calculateViewIndex","cls.POPUP_OPEN","changeView","isSelectedDate","util.resetTime","activeView","getNextPreviousDate","activeCellsData","msInterval","activeViewOptions","timeScale","slotCount","isAllDay","eventWindow","openEditor","toolbarPopUp","getHeaderElement","updateHeaderItems","classType","dateRangeEle","cls.AGENDA_HIDDEN_CLASS","setDimensions","cssProperties","ScheduleTouch","cls.TABLE_CONTAINER_CLASS","onTransitionEnd","touchLeftDirection","touchRightDirection","cls.APPOINTMENT_WRAP_CLASS","timeStampStart","cls.TRANSLATE_CLASS","cls.CONTENT_WRAP_CLASS","isScrollTriggered","nextPanel","getTranslateX","previousPanel","cls.PREVIOUS_PANEL_CLASS","offsetDist","swapPanels","confirmSwipe","cancelSwipe","cls.APPOINTMENT_CLASS","cls.WORK_CELLS_CLASS","cls.ALLDAY_CELLS_CLASS","cls.HEADER_CELLS_CLASS","getCellDetails","events.tapHoldReady","nextPrevType","currentPanel","getRenderDates","navArgs","events.navigating","generateColumnLevels","cls.CURRENT_PANEL_CLASS","WebKitCSSMatrix","m41","shiftDownArrow","shiftUpArrow","shiftRightArrow","shiftLeftArrow","ctrlLeftArrow","ctrlRightArrow","altOne","altTwo","altThree","altFour","altFive","altSix","processDown","processUp","processLeft","processRight","processViewNavigation","focusFirstCell","processEscape","event.cellMouseDown","onCellMouseDown","initialTarget","onMouseSelection","onMoveup","allDayRow","getAllDayRow","onAppointmentSelection","getSelectedEventElements","cls.POPUP_WRAPPER_CLASS","cls.QUICK_POPUP_EVENT_DETAILS_CLASS","cls.EVENT_CREATE_CLASS","cls.EDIT_EVENT_CLASS","cls.DELETE_EVENT_CLASS","cls.CLOSE_CLASS","cls.SUBJECT_CLASS","event.cellClick","cls.MORE_EVENT_CLOSE_CLASS","cls.ALLDAY_APPOINTMENT_SECTION_CLASS","cls.MORE_INDICATOR_CLASS","cls.MORE_EVENT_HEADER_DATE_CLASS","getCells","isInverseTable","tableEle","maxRow","maxColumn","inverseCells","focusCell","cls.AGENDA_CELLS_CLASS","removeSelectedAppointmentClass","getWorkCellElements","isInverseTableSelect","isMultiple","removeSelectedClass","initialId","resourceSelectedCells","allDayCells","getAllDayCells","resourceAllDayCells","addSelectedClass","selectAppointment","isReverse","isMoreEvent","appointments","moreEventWrapper","cls.MORE_EVENT_WRAPPER_CLASS","getAppointmentElements","nextAppEle","addSelectedAppointments","cls.AGENDA_SELECTED_CELL","selectAppointmentElementFromWorkCell","appointmentElements_1","getUniqueAppointmentElements","filteredElements_1","selectedDate_1","eventsProcessed","eventObject","eventFields","focusElements","getAppointmentElementsByGuid","util.MS_PER_DAY","appointmentElements","getWorkCellFromAppointmentElement","getEventByGuid","selectWorkCellByTime","viewCollections","getSelectedElements","selectedEventElements","getSelectedAppointments","cls.MORE_POPUP_WRAPPER_CLASS","quickPopupWrapper","curRowIndex","sectionRowIndex","processLeftRight","maxIndex","isCancelLeftRightAction","selectedAppointments","calculateNextPrevDate","curColIndex","maxColIndex","allDayRow_1","allDayRow_2","nextPrevDate","getFocusableElements","processTabOnPopup","firstEle","footerEle","cls.POPUP_FOOTER_CLASS","cls.DELETE_CLASS","lastEle","cls.APPOINTMENT_BORDER","activeEventData","getSelectedEvents","quickPopup","deleteClick","onClosePopup","morePopup","Timezone","convertedDate","toLocaleString","fromOffset","toOffset","fromLocalOffset","toLocalOffset","removeLocalOffset","localTimezoneName","Intl","DateTimeFormat","resolvedOptions","timezoneData","Value","TIMES","ON","EVERY","UNTIL","DAYS","WEEKS","MONTHS","YEARS","SU","MO","TU","WE","TH","FR","SA","slots","timeZonePropChanged","oldTimezone","processed","events_1","util.getDateFromString","processTimezoneChange","processTimezone","recurrenceRule","recurrenceID","generateOccurrence","generateGuid","filterEvents","timezonePropertyChange","eventsData","event.dataReady","processedData","startTimezone","endTimezone","zone","resourceTdData","fieldMapping","filterEventsByResource","sortByTime","resourceCollection","resourceBase","allowGroupEdit","allowMultiple","tempPredicate","groupOrder","d1","d2","sortByDateTime","object1","object2","d3","d4","d5","d6","getSmallestMissingNumber","large","splitEventByDay","eventStartTime","eventEndTime","util.addDays","util.getDaysCount","app","splitEvent","dateRender","util.getDateInMs","orgStart","orgEnd","slot","firstSlot","byDate","showWeekend","hasBreak","cloneEventObject","dateInRange","availSlot","availSlot_1","slot_1","focusElements_1","eventSelect","elementSelect","selectAppointments","selectedAppointments_1","keyboardInteractionModule","nearestTime","isAllDayAppointment","targetArea","getGroupIndexFromEvent","resourceData","lastResourceLevel","resIndex","isFullDay","event.documentClick","appointmentBorderRemove","wireAppointmentEvents","eventDoubleClick","event.eventClick","quickPopupHide","openRecurrenceAlert","getEventMaxId","occurrenceCollection","currentViewDate","eventRule","recurrenceException","generatedDates","getRecurrenceEvent","getOccurrencesByID","getOccurrencesByRange","event_3","applyResourceColor","getResourceColor","alphaColor","Crud","refreshData","actionArgs","addEvent","editParms","processCrudTimezone","crudArgs","parentEvent","occurrence","exDate","excludeDateCheck","delApp","delApp_1","deleteEvent","normalEvent","recEvent","dataObj_1","normalEvent_1","event_4","recEvent_1","delApp_2","event_5","exceptionDateList","FieldValidator","renderFormValidator","errorPlacement","dlgContent","QuickPopups","isMultipleEventSelect","fieldValidator","renderQuickPopup","renderMorePopup","renderQuickDialog","quickPopupOpen","quickPopupClose","moreEventPopup","cls.MORE_EVENT_POPUP_CLASS","cls.MORE_EVENT_DATE_HEADER_CLASS","cls.NAVIGATE_CLASS","morePopupOpen","morePopupClose","cls.CLOSE_ICON_CLASS","closeClick","navigationClick","quickDialog","dialogButtonClick","beforeQuickDialogClose","dialogElement","clickEvent","quickDialogClass","cls.QUICK_DIALOG_EDIT_EVENT_CLASS","cls.QUICK_DIALOG_EDIT_SERIES_CLASS","cls.QUICK_DIALOG_DELETE_CLASS","cls.QUICK_DIALOG_CANCEL_CLASS","cls.QUICK_DIALOG_ALERT_BTN_CLASS","cls.DISABLE_CLASS","cls.FORM_CLASS","eventSettings","validation","editDeleteOnly","editDeleteSeries","showQuickDialog","openRecurrenceValidationAlert","openDeleteAlert","openValidationError","event.popupOpen","createMoreEventList","eventCollection","moreEventContentEle","cls.MORE_EVENT_CONTENT_CLASS","moreEventWrapperEle","eventCollection_1","eventText","appointmentEle","data-guid","aria-grabbed","cls.EVENT_RECURRENCE_ICON_CLASS","cls.EVENT_RECURRENCE_EDIT_ICON_CLASS","event.eventRendered","tapHoldEventPopup","eventTitle","eventTemplate","cls.POPUP_HEADER_CLASS","cls.EDIT_ICON_CLASS","editClick","beforeQuickPopupOpen","showQuickInfo","getTimeString","getFormattedString","quickCellPopup","cls.POPUP_HEADER_ICON_WRAPPER","cls.DATE_TIME_DETAILS_CLASS","cls.TEXT_ELLIPSIS","details","getResourceText","moreButton","detailsClick","saveButton","saveClick","isSameTarget","eventTooltip","updateTapHoldEventPopup","quickEventPopup","eventSubject","getRecurrenceSummary","cls.TIME_ZONE_CLASS","getTimezone","cls.DESCRIPTION_CLASS","editButton","deleteButton","applyEventColor","resourceValue","resourceCollection_1","resourceIndex_1","idField","resourceData_1","resourceCollection_2","byGroupID","resourceData_2","resourceDetails","startDateDetails","endDateDetails","startTimeDetail","endTimeDetail","allDayLength","moreEventClick","dateElement","moreEventElements","cls.CURRENTDATE_CLASS","saveObj","setResourceValues","updateMoreEventContent","getDateFromElement","filteredEvents","moreElement","eventSave","eventObj","titleContent","zoneDetails","ruleSummary","getRecurrenceEditorInstance","getRuleSummary","getDataFromTarget","isEventPopup","destroyButtons","colorEle","subjectElement","moreWrapper","event.tapHoldReady","removeEventListner","EventTooltip","cls.EVENT_TOOLTIP_ROOT_CLASS","tooltipTemplate","eventStart","eventEnd","tooltipSubject","startMonthDate","startMonthYearDate","endMonthYearDate","getEventTooltipTemplate","INPUTWARAPPER","INPUTWARAPPERSIDE","REPEATELEMENT","REPEATINTERVAL","DAYWRAPPER","WEEKWRAPPER","YEAREXPANDERWRAPPER","YEAREXPANDERELEMENT","MONETHEXPANDERWRAPPER","MONTHEXPANDERELEMENT","MONTHEXPANDERCHECKBOXWRAPPER","FORMLEFT","FORMRIGHT","MONTHEXPANNDERELEM","ENDONDATE","ENDONCOUNTWRAPPER","ENDONCOUNT","HIDEWRAPPER","PRIMARY","none","daily","weekly","monthly","yearly","valueData","neverClassList","weekClassList","monthClassList","yearClassList","dailyClassList","noEndClassList","endOnCountClassList","endOnDateClassList","RecurrenceEditor","never","repeatEvery","onDay","weeks","years","summaryTimes","summaryOn","summaryUntil","summaryRepeat","summaryDay","summaryWeek","summaryMonth","summaryYear","monthWeek","monthPosition","monthExpander","yearExpander","renderStatus","destroyStatus","dayButtons","monthButtons","startState","endOn","showFormElement","updateForm","freshOnEndForm","updateEndOnForm","selectMonthDay","updateUntilDate","onMonthDay","applyCustomClass","renderComponent","setRecurrenceRule","repeatType","getRecurrenceRule","resetDayButton","daySelection","rotateArray","rtlClass","untilDateObj","monthDate","monthWeekDays","monthValue","monthWeekPos","getDayPosition","endType","renderDropdowns","getRepeatData","selectedType","resetFormValues","getEndData","getPopupWidth","renderDropDownList","dropDownData","onWeekDay","getMonthPosData","getDayData","getMonthData","setDefaultValue","formelement","recurreneElement","renderDatePickers","dayButtonRender","btns","radioButtonRender","numericTextboxRender","recurrenceCount","positionCollection","monthposValue","weekday_1","getSelectedDaysData","ruleData","RULEBYDAY","getSelectedMonthData","RULEBYMONTHDAY","getIntervalData","RULEINTERVAL","getEndOnCount","RULECOUNT","getYearMonthRuleData","RULEBYMONTH","updateWeekButton","updateMonthUI","getUntilData","RULEUNTIL","destroyComponents","resetFields","cldrObj1","generateSummary","getRecurrenceDates","RULEFREQ","RULEDAILY","RULEWEEKLY","RULEMONTHLY","RULEYEARLY","endon","EVENT_FIELD","REPEAT_CONTAINER_CLASS","EventWindow","renderEventWindow","getEventWindowContent","dialogObject","cls.EVENT_WINDOW_DIALOG_CLASS","onBeforeClose","cls.EVENT_WINDOW_DELETE_BUTTON_CLASS","eventDelete","editorTemplate","cellClickAction","onCellDetailsUpdate","onEventDetailsUpdate","setDialogContent","getSlotDuration","refreshDateTimePicker","startObj","cls.EVENT_WINDOW_START_CLASS","onsubmit","getDefaultEventWindowContent","templeteEle","getEditorTemplate","createDivElement","titleLocationDiv","titleDiv","renderTextBox","locationDiv","cls.LOCATION_CLASS","startEndDateTimeDiv","startDateTimeDiv","renderDateTimePicker","onTimeChange","endDateTimeDiv","timezoneParentDiv","startTimezoneDiv","renderDropDown","cls.EVENT_WINDOW_START_TZ_CLASS","endTimezoneDiv","cls.EVENT_WINDOW_END_TZ_CLASS","allDayTimezoneDiv","allDayDiv","renderCheckBox","cls.EVENT_WINDOW_ALL_DAY_CLASS","timezoneDiv","repeatParentDiv","repeatDiv","repeatEditConainer","REPEAT_BUTTON_ICON_CLASS","descriptionDiv","loadRecurrenceEditor","createRecurrenceEditor","resourceParentDiv","resourceDiv","renderMultiSelect","submit","recurrenceEditor","renderRecurrenceEditor","dateTimeDiv","getFieldName","dateTimeInput","getFieldLabel","resourceInput","resourceTemplate","colorField","onMultiselectResourceChange","onDropdownResourceChange","timezoneInput","onTimezoneChange","filtering","resObject","datasource","groupIDField","filterRes","filterDatasource","resObj","startTimezoneObj","endTimezoneObj","checkBoxDiv","checkBoxInput","repeatStatus","editorTitles","onAllDayChange","timezoneChangeStyle","onRepeatChange","renderRepeatDialog","repeatDialogObject","repeatSaveDialog","repeatCancelDialog","repeatOpenDialog","repeatRule","repeatStartDate","updateRepeatLabel","closeRepeatDialog","repeatTempRule","showDetails","getFormElements","keyNames","curElement","isCustomElement","setValueToElement","setDefaultValueToElement","timezoneObj","allDayStatus","updateDateTime","workHours","timezoneValue","startTz","endTz","refreshResourceDataSource","resetFormFields","tz","alertType","getValueFromElement","Repeat","recurrenceValidation","eventId","getEventIdFromForm","resourceSaveEvent","editOccurrenceValidation","alertMessage","recEditor","tempDiff","getRecurrenceIndex","recColl","recIndex","recurColl","lastResouceData","lastlevel","eventList","addValues","eventList_1","formelement_1","isDataRefresh","initializeLayout","dayModule","weekModule","workWeekModule","monthModule","agendaModule","monthAgendaModule","firstView","updateLabelText","uiStateValues","isGroupAdaptive","enableCompactView","adjustEventWrapper","WorkHours","TimeScale","Field","EventSettings","ResourceBase","renderResourceHeader","resourceWrapper","cls.RESOURCE_TOOLBAR_CONTAINER","cls.RESOURCE_HEADER_TOOLBAR","cls.RESOURCE_LEVEL_TITLE","renderResourceHeaderText","menuClick","renderResourceTree","cls.RESOURCE_TREE_POPUP_OVERLAY","treeWrapper","cls.RESOURCE_TREE_POPUP","cls.WRAPPER_CONTAINER_CLASS","resourceTree","treeViewObj","generateTreeData","resourceHeaderTemplate","resourceClick","treePopup","treeCollection","resourceTreeLevel","resTree","treeHandler","treeLevel","levelId","treeArgs","resourceId","resourceName","resourceChild","headerCollection","resourceLevel","resData","levelIcon","headerWrapper","bindResourcesData","isSetModel","promises","setResourceCollection","requiredResources","colorIndex","util.findIndexInData","requiredResources_1","startHourField","endHourField","workDaysField","cssClassField","resourceColorField","generateResourceLevels","innerDates","resTreeGroup","lastColumnDates","prevResource","prevResourceData","prevOrder","dateCol","renderDates","resWorkDays","workDays","resStartHour","resEndHour","getDateSlots","dateSlots","generateCustomHours","resCssClass","slotData","resourceLevelIndex","generateHeaderLevels","dateSlots_1","dateSlot","headerDates","headerLevels","currentLevelChilds_1","currentLevelChild","nextLevelChilds_1","nextLevelChild","lastLevelResource","dateHeaderLevels","dateColSpan","datesColumn","headerDates_1","resGroup","resTd","isCrud","setValues","filterData","getCssClass","addResource","removeResource","length_4","resToolBarEle","Schedule","eventTooltipTemplateFn","templateParser","editorTemplateFn","initializeResources","isLayoutOnly","initializeView","showHeaderBar","scheduleTouchModule","initializePopups","getViewIndex","setViewOptions","isModuleLoad","viewOptions","selectedView","isOptions","fieldViewName","getActiveViewOptions","majorSlotTemplate","minorSlotTemplate","allowVirtualScrolling","cellTemplate","dateHeaderTemplate","crudModule","initializeTemplates","cellTemplateFn","dateHeaderTemplateFn","majorSlotTemplateFn","minorSlotTemplateFn","appointmentTemplateFn","resourceHeaderTemplateFn","getDayNames","setCldrTimeFormat","previousView","animateLayout","workWeek","agenda","weekAgenda","workWeekAgenda","monthAgenda","noEvents","emptyContainer","allDay","noTitle","deleteMultipleEvent","deleteSeries","editSeries","editEvent","addTitle","moreDetails","editContent","deleteRecurrenceContent","deleteMultipleContent","recurrence","wrongPattern","seriesChangeAlert","createError","recurrenceDateValidation","sameDayAlert","editRecurrence","repeats","startEndError","invalidDateError","onScheduleResize","allowKeyboardInteraction","selectedCells_1","cls.SELECTED_CELL_CLASS","cls.ALLDAY_ROW_CLASS","cls.CONTENT_TABLE_CLASS","getIndexOfDate","isAllDayCell","dateInMS","getCellTemplate","getDateHeaderTemplate","getMajorSlotTemplate","getMinorSlotTemplate","getAppointmentTemplate","getResourceHeaderTemplate","uiArgs","events.scrollUiUpdate","highlightCurrentTime","onEventSettingsPropertyChanged","setWorkHours","viewStartHour","getStartHour","getEndHour","dates_1","tds","cls.WORK_HOURS_CLASS","getEndDateFromStartDate","getResourcesByIndex","scrollToHour","getEvents","eventID","getCurrentViewDates","getCurrentViewEvents","refreshEvents","getEventDetails","isSlotAvailable","ViewBase","customHelper","getDayName","createTableLayout","cls.SCHEDULE_TABLE_CLASS","isCurrentDate","isCurrentMonth","isWorkDay","isWorkHour","formatDateRange","longDateFormat","getMobileDateElement","setResourceHeaderContent","tdData","renderResourceMobileLayout","WorkCellInteraction","isWorkCell","cellDblClick","VerticalEvent","renderedEvents","renderedAllDayEvents","overlapEvents","moreEvents","overlapList","allDayEvents","allDayLevel","animationUiUpdate","renderAppointments","cls.ROW_COUNT_WRAPPER_CLASS","allDayElement","setAllDayRowHeight","rowExpandCollapse","renderEvents","dateCount","resources_1","getResourceList","filterEvents_1","renderAllDayEvents","renderNormalEvents","resourceIndex","createAppointmentElement","recordSubject","appointmentWrapper","appointmentDetails","cls.APPOINTMENT_DETAILS","appointmentSubject","appointmentStartTime","appointmentEndTime","timeStr","recurrenceIcon","renderSpannedIcon","createMoreIndicator","currentDay","countWrapper","innerCountWrap","moreIndicatorElement","data-index","data-count","countCell","spanEvent","cls.EVENT_INDICATOR_CLASS","isSpannedEvent","startEndHours","util.getStartEndHours","dayCount","currentDates","allDayRowCell","cellTop","eStart","eEnd","appWidth","isDateRange","isAlreadyRendered","allDayDifference","allDayIndex","getOverlapIndex","widthAdjustment","wIndex","cls.ALLDAY_APPOINTMENT_WRAPPER_CLASS","appointmentElement","events.eventRendered","appHeight","allDayRowHeight","addOrRemoveClass","getAppointmentHeight","getTopValue","appIndex","adjustOverlapElements","appointmentWrap","cls.APPOINTMENT_WRAPPER_CLASS","appLeft","eventsList","date_1","appointmentList_1","appointment_1","filterList","eventsList_1","appLevel","length1","length2","eleGuid","apps","moreEventCount","cls.APPOINTMENT_ROW_EXPAND_CLASS","cls.APPOINTMENT_ROW_COLLAPSE_CLASS","getEventHeight","eventElement","MonthEvent","appointmentWrapper_1","eventHeight","getElementHeightFromClass","monthHeaderHeight","getOuterHeight","renderEventsHandler","workCells","noOfDays","splittedEvents_1","renderAppointmentMonth","eventLocation","innerElement","timeString","appendEventIcons","overlapCount","diffInDays","cellTd","appTop","cellTd_1","getFilteredEvents","appArea","renderedAppCount","data-start-date","data-end-date","moreIndicatorClick","appointmentsList","appointments_1","moreEventArgs","VerticalView","currentDateIndex","viewClass","workCellAction","event.scrollUiUpdate","getTimeCellsElement","getDatesHeaderElement","headerBarHeight","timecells","getScrollableElement","scrollerHeight","util.getScrollBarWidth","scrollToWorkHour","firstWorkHourCell","getTopFromDateTime","columnLevels","colLevels","workStartHour","workEndHour","renderDates_1","isWorkHourRange","showTimeIndicator","changeCurrentTimePosition","currentTimeIndicatorTimer","clearCurrentTimeIndicatorTimer","removeCurrentTimeIndicatorElements","currentTimeEle","timelineEle","firstRow","firstCell","prevLineWidth","currentLineWidth","topInPx","timeCellsWrap","cls.HIDE_CHILDS_CLASS","timelineWrap","previousDateTimelineEle","dateIndex","currentDateTimelineEle","getContentAreaElement","getWorkCellHeight","getTdContent","cls.TABLE_WRAP_CLASS","cls.OUTER_TABLE_CLASS","dateTd","renderDatesHeader","indentTd","renderLeftIndent","workTd","scrollContainer","renderTimeCells","renderContentArea","timesTd","tbl","ntr_1","createTd","ntr","appointmentExpandCollapse","nth","cls.DATE_HEADER_CONTAINER_CLASS","cls.DATE_HEADER_WRAP_CLASS","colGroupEle","ntr_2","ntd","wireCellEvents","createEventWrapper","event.renderCell","getTimeSlotRows","innerWrap","cellDate","util.setTime","innerWrapper","tblWidth","msMajorInterval","msStartHour","msEndHour","majorTickDivider","Day","daysCount","Week","util.getWeekFirstDate","WorkWeek","par","Month","dayNameFormat","monthDates","onScrollUiUpdate","onCellClick","getDayNameFormat","renderAppointmentContainer","createHeaderCell","isOtherMonth","util.firstDateOfMonth","util.lastDateOfMonth","util.addMonths","slotDatas","prepareSlots","includeResource","colDates_2","colDate","lastRow","resourcesTd","colDates_1","renderDateHeaderElement","dateHeader","monthStart","monthEnd","util.WEEK_LENGTH","AgendaBase","viewBase","createAgendaContentElement","aTd","appWrapper","createAppointment","appSubjectWrap","strDate","allDayStr","processAgendaEvents","splited","wireEventActions","eventElement_1","dateHeaderElement_1","dayNavigationClick","calculateResourceTableElement","agendaDate","agendaLastDate","resColl","initialDate","lastLevelInfo","tempLastLevelInfo","firstDate","finalDate","agendaCollection","hideEmptyAgendaDays","resDataCollection","resDayCollection","topResources","tempGroupedData","totalRowSpan","createResourceTableRow","renderEmptyContent","tContent","tContentCollection","parentCollection","rowSpanCollection","createDateHeaderElement","templateArgs","eTr","createTableRowElement","eTd","aria-rowindex","aria-colindex","data-date","dTd","Agenda","agendaDates","virtualScrollTop","agendaBase","eventLoad","refreshEvent","refreshDate","appointmentFiltering","appoint","updateHeaderText","agendaDaysCount","nTr","cTd","agendaScrolling","virtualScrolling","filterDate","emptyTBody","getElementFromScrollerPosition","scrollDate","getPreviousNextDate","scrollToValue","getStartDateFromEndDate","dateStart","dateEnd","onAgendaScrollUiUpdate","MonthAgenda","contentArea","wrapperContainer","appWrap","appendAppContainer","setEventWrapperHeight","availableHeight","clearElements","workCell","cls.APPOINTMENT_INDICATOR_CLASS","onEventRender","appContainer","cls.APPOINTMENT_CONTAINER_CLASS","appointmentIndicators_1","index.Schedule","index.Day","index.Week","index.WorkWeek","index.Month","index.Agenda","index.MonthAgenda","nextChild","itemRendering","itemSelected","tooltipRendering","legendItemRendering","InitialDrillSettings","LeafItemSettings","LevelSettings","TreeMapAjax","LayoutPanel","processLayoutPanel","totalRect","levelsOfData","initialDrillDown","groupName","getDrilldownData","calculateLayoutItems","renderLayoutItems","drillData","computeSliceAndDiceDimensional","computeSquarifyDimensional","leafItem","sliceAndDiceProcess","groupGap","childValue","parentArea","alottedValue","totalWeight","isHierarchicalData","calculateChildrenLayout","groupPadding","computeTotalArea","performRowsLayout","newCoordinates","newStack","nextDatum","restData","currentRowLength","valueSum","newContainer","cutArea","findMaxAspectRatio","minArea","maxArea","sumArea","isParent","subXOffset","subYOffset","dataLength_1","dataSum_1","datum","txtVisible","getItemColor","interSectAction","rectPath","layoutGroup","templateGroup","isLeafItem","headerFormat","showLabels","enableDrillDown","headerStyle","labelTemplate","RenderItems","renderItemText","textName","tspanText","labelInterSectAction","maxNumber","collectionLength","stringText","itemFill","itemOpacity","equalColorValuePath","rangeColorValuePath","templateLocation","TreeMap","drilledItems","processDataManager","renderTreeMapElements","processingData","treeMapLegendModule","elementChange","checkIsHierarchicalData","levelOrderName","hierarchyData","processHierarchicalData","processFlatJsonData","reOrderLevelData","findTotalWeight","dataCount","mainData_1","orderNames","childName","childGroupPath_1","currentName","prevPath","groupObj","clickOnTreeMap","mouseDownOnTreeMap","mouseMoveOnTreeMap","mouseEndOnTreeMap","mouseLeaveOnTreeMap","resizeOnTreeMap","mouseEvent","newDrillItem","layoutID","moveArgs","treeMapTooltipModule","removeInteractivePointer","TreeMapLegend","legendNames","gradientCount","defsElement","findColorMappingLegendItems","findPaletteLegendItems","orientation_1","legendTitleSize","startX_1","startY_1","rectWidth_1","rectHeight_1","itemTextStyle_1","legendLength_1","calculateLegendItems","legendName","itemArea","isAddData","gradientElement","colorMapProcess","isAddNewLegendData","stop1Color","stop2Color","newDataProcess","renderLegendTitle","isLineShape","interactiveId","drawInteractivePointer","areaX","areaY","TreeMapHighlight","processHighlight","treeMapElement","orders","highLightElements","highLightId","selectionElements","TreeMapSelection","selectionId","TreeMapTooltip","tooltipId","tootipArgs","markerFill","toolTipData","index.TreeMap","index.TreeMapTooltip","index.TreeMapLegend","index.TreeMapHighlight","index.TreeMapSelection"],"mappings":"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ACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,I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AK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAM/E5B,EAA8BqD,iBAC1B,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,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AAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,EAAG,IAAK,EAAG,IAAK,IAAK,IAAK,IAAM,IAAK,IAAK,IAAK,IAAM,IAAK,IAAK,IAAK,EACzE,IAAK,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAM,IAAK,IAAM,IAAK,IAAK,IAAK,EACzE,IAAK,IAAK,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EACzE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,KAMTzC,EAA8ByD,aAC1B,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,IAAK,IAAK,IAAK,IAAK,IAClE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAM,IAAK,IAClE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,KAAM,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAClE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,GAMxCzD,EAA8B6D,mBAC1B,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,IAAK,IAAK,IAAK,IAAK,IAClE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,KAEtB7D,KCllBPj6L,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAuCxCs5L,GAAiC,SAAU94L,GAE3C,SAAS84L,EAAgBoE,EAAqBv7P,EAAMpoB,GAChD,IAAI3E,EAAQorF,EAAO7pF,KAAKtB,KAAM8sB,EAAMpoB,IAAU1E,KA4B9C,OAvBAD,EAAMmvO,qBAAuB,IAAIjE,GAMjClrO,EAAMuoR,WAAa,UAAW,mBAAoB,mBAAoB,oBAClE,kBAAmB,iBAAkB,aACL,iBAAxBD,QAAuD,IAAV3jR,EACrD3E,EAAMnC,YAAYyqR,EAAqBv7P,EAAM8rN,GAAasJ,SAErB,iBAAxBmmC,QAAuD,IAAV3jR,IAC1D3E,EAAQorF,EAAO7pF,KAAKtB,KAAM8sB,EAAMpoB,IAAU1E,MACpCuoR,cAAgBF,EACtBtoR,EAAMyoR,aACNzoR,EAAM0oR,uBAEAJ,aAA+BpE,QAAsC,IAAVv/Q,EACjE3E,EAAMnC,YAAYyqR,EAAoBp7P,WAAYH,EAAMu7P,EAAoB3jR,OAEtE2jR,aAA+BpE,QAAsC,IAAVv/Q,GACjE3E,EAAMnC,YAAYyqR,EAAoBp7P,WAAYH,EAAMpoB,GAErD3E,EA6HX,OA3JAuqF,GAAU25L,EAAiB94L,GAgC3B7sF,OAAOuJ,eAAeo8Q,EAAgB5oR,UAAW,cAM7CqM,IAAK,WACD,OAAO1H,KAAKuoR,eAEhB5gR,YAAY,EACZC,cAAc,IAOlBq8Q,EAAgB5oR,UAAUmtR,WAAa,WACnC,GAAIxoR,KAAKitB,aAAekvN,GAAcsnB,QAAUzjQ,KAAKitB,aAAekvN,GAAc4oC,aAAc,CAC5F,IAAIrgR,EAAQ1E,KAAK0E,MACjBA,KAAWk0O,GAAa0J,KAAO1J,GAAa2J,QAC5CviP,KAAKmiP,SAASz9O,KAOtBu/Q,EAAgB5oR,UAAUklP,aAAe,SAAUzyL,EAAM9xB,GACrD,GAAY,MAAR8xB,EACA,MAAM,IAAIltD,MAAM,8BAKpB,IAAK,IAHDoV,EAAQ,EAGH7Z,GAFE6D,KAAKy3B,KAEH,GAAG51B,GADhBisD,EAAOm2N,EAAgByE,QAAQ56N,IACJrxD,OAAQN,EAAI0F,EAAK1F,IAAK,CAC7C,IAAImrO,EAAKx5K,EAAK3xD,GAEd6Z,GADgBhW,KAAK2oR,qBAAqBrhD,EAAItrM,GAGlD,IAAIlP,EAAO9sB,KAAKoiP,QAAQ7hO,QAAQyb,GAGhC,OAFAhmB,GAAUisO,GAAQwB,mBAAqB32N,EACvC9W,EAAQhW,KAAKqjP,oBAAoBv1L,EAAM9xB,EAAQhmB,IAOnDiuQ,EAAgB5oR,UAAU4nP,aAAe,SAAUv2N,GAC/C,IAAIqpI,GAAQ,EACR6yH,EAASl8P,EACb,GAAc,MAAVk8P,EAAgB,CAChB,IAAIC,EAAmB7oR,KAAKitB,aAAe27P,EAAO37P,WAC9C67P,IAAiBlwC,GAAa6J,UAAY7J,GAAa4J,WACvDumC,GAAc/oR,KAAK0E,MAAQokR,KAAkBF,EAAOlkR,MAAQokR,GAChE/yH,EAAS8yH,GAAmBE,EAEhC,OAAOhzH,GAMXkuH,EAAgB5oR,UAAUotR,oBAAsB,WAGhCxjC,GAAYhxD,MAAM7kC,OAAOpvJ,MAErC,IAAIojP,EAAY,KAGZhB,EAAUmiC,GAA8BC,WAAWxkR,KAAKuoR,cAAevoR,KAAK0E,MAAO1E,KAAK8sB,MAC5F9sB,KAAKoiP,QAAUA,EACfgB,EAAYpjP,KAAKsoQ,kBACjBtoQ,KAAKmjP,aAAaC,IAMtB6gC,EAAgB5oR,UAAUitQ,gBAAkB,WACxC,IAAI55B,EAAa,IAAID,GAIrB,GAHAC,EAAWj0K,MAAMr9D,SAAS4C,KAAKkvO,qBAAqBxoO,KAAM,IAAIggO,GAAQ1mO,KAAKkvO,qBAAqBxiN,OAChGgiN,EAAWj0K,MAAMr9D,SAAS4C,KAAKkvO,qBAAqBzD,QAAS,IAAI/E,GAAQ1mO,KAAKkvO,qBAAqB3D,QACnGmD,EAAWj0K,MAAMr9D,SAAS4C,KAAKkvO,qBAAqB1D,SAAU,IAAI9E,GAAQ1mO,KAAKoiP,QAAQwhB,iBACnF5jQ,KAAKitB,aAAekvN,GAAcsnB,QAAUzjQ,KAAKitB,aAAekvN,GAAc4oC,aAAc,CAC5F,IAAIhtD,EAAW/3N,KAAKsoR,UAAU/rC,GAAaysC,iBAC3Ct6C,EAAWj0K,MAAMr9D,SAAS4C,KAAKkvO,qBAAqBnX,SAAU,IAAI2O,GAAQ3O,IAE9E,OAAO2W,GAMXu1C,EAAgB5oR,UAAUstR,qBAAuB,SAAU/xD,EAAU56L,GACjE,IACI/S,EAAO,EACXA,EAAO2tM,EAAS7pH,WAAW,GACT,MAAd/sG,KAAKy3B,MAA8B,MAAdz3B,KAAKy3B,MAA8B,MAAdz3B,KAAKy3B,MACjC,MAAdz3B,KAAKy3B,MAA8B,MAAdz3B,KAAKy3B,OAC1BxO,GAAcg7P,EAAgBgF,YAElChgQ,EAAQA,GAAQ,GAAc,MAATA,EAAgBA,EAAO,EAI5C,OAHcjpB,KAAKoiP,QACM0iB,WACNrqM,MAAMxxC,IAO7Bg7P,EAAgByE,QAAU,SAAUj8P,GAChC,OAAOA,GAOXw3P,EAAgBgF,WAAa,GACtBhF,GACThiC,IClLEinC,GAA+B,WAC/B,SAASA,EAAchuC,GAMnBl7O,KAAKkvO,qBAAuB,IAAIjE,GAKhCjrO,KAAK27O,SAAW,IAAI9C,GAAS,IAAK,IAAK,KAKvC74O,KAAKo4G,UAAY,IAAI6iI,GAAW,EAAG,EAAG,EAAG,GAKzCj7O,KAAKs4Q,QAAU,KAMft4Q,KAAKmpR,UAAY,IAAIztC,GAAc,IAAI7C,GAAS,EAAG,EAAG,IAMtD74O,KAAKopR,SAAW,IAAInF,GAAgB9nC,GAAcyoC,WAAY,IAM9D5kR,KAAKg8B,OAAS,IAAIghN,GAAgB9E,GAAiB49B,MAKnD91Q,KAAKo6B,QAAU,GAKfp6B,KAAK83O,cAAgB,IAAIrJ,GAKzBzuO,KAAKqpR,cAAgB,IAAIxwC,GAMzB74O,KAAKspR,SAAW,OACI,IAATpuC,EACPl7O,KAAKmuG,cAGLnuG,KAAKmuG,aACLnuG,KAAK02B,OAASwkN,GAsLtB,OAnLA58O,OAAOuJ,eAAeqhR,EAAc7tR,UAAW,SAM3CqM,IAAK,WACD,OAAO1H,KAAK27O,UAEhBt0O,IAAK,SAAUrK,GACXgD,KAAK27O,SAAW3+O,GAEpB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeqhR,EAAc7tR,UAAW,cAK3CqM,IAAK,WACD,OAAO1H,KAAKqpR,eAEhBhiR,IAAK,SAAUrK,GACXgD,KAAKqpR,cAAgBrsR,GAEzB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeqhR,EAAc7tR,UAAW,UAK3CqM,IAAK,WACD,OAAO1H,KAAKo4G,WAEhB/wG,IAAK,SAAUrK,GACXgD,KAAKo4G,UAAYp7G,GAErB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeqhR,EAAc7tR,UAAW,QAK3CqM,IAAK,WACD,OAAO1H,KAAKs4Q,SAEhB3wQ,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeqhR,EAAc7tR,UAAW,QAK3CqM,IAAK,WACD,OAAO1H,KAAKopR,UAEhB/hR,IAAK,SAAUrK,GACXgD,KAAKopR,SAAWpsR,GAEpB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeqhR,EAAc7tR,UAAW,gBAK3CqM,IAAK,WACD,OAAO1H,KAAKg8B,QAEhB30B,IAAK,SAAUrK,GACXgD,KAAKg8B,OAASh/B,GAElB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeqhR,EAAc7tR,UAAW,SAK3CqM,IAAK,WACD,OAAO1H,KAAKmpR,WAEhB9hR,IAAK,SAAUrK,GACXgD,KAAKmpR,UAAYnsR,GAErB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeqhR,EAAc7tR,UAAW,QAK3CqM,IAAK,WACD,OAAO1H,KAAKo6B,SAEhB/yB,IAAK,SAAUrK,GACXgD,KAAKo6B,QAAUp9B,EACfgD,KAAK0uO,WAAWj0K,MAAMr9D,SAAS4C,KAAKkvO,qBAAqBxD,SAAU,IAAIsJ,GAAUh1O,KAAKo6B,WAE1FzyB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeqhR,EAAc7tR,UAAW,cAK3CqM,IAAK,WACD,OAAO1H,KAAK83O,eAEhBzwO,IAAK,SAAUrK,GACXgD,KAAK83O,cAAgB96O,GAEzB2K,YAAY,EACZC,cAAc,IAOlBshR,EAAc7tR,UAAU8yG,WAAa,WACjCnuG,KAAK83O,cAActH,oBAAsB,IAAIS,GAA2BjxO,MACxEA,KAAK83O,cAAcr9K,MAAMr9D,SAAS4C,KAAKkvO,qBAAqBxoO,KAAM,IAAIggO,GAAQ1mO,KAAKkvO,qBAAqB9C,SAM5G88C,EAAc7tR,UAAUmhR,QAAU,SAAUvsH,GACxCjwJ,KAAKs4Q,QAAUroH,EACfjwJ,KAAK83O,cAAcr9K,MAAMr9D,SAAS4C,KAAKkvO,qBAAqBxkJ,EAAG,IAAI6pJ,GAAmBv0O,KAAKs4Q,WAM/F4Q,EAAc7tR,UAAU00O,UAAY,WAChC/vO,KAAKytF,QAOTy7L,EAAc7tR,UAAUoyF,KAAO,WAC3B,IAAI87L,EAAkB,IAAItuC,GAAWj7O,KAAKo4G,UAAUrrG,EAAG/M,KAAKo4G,UAAUprG,EAAGhN,KAAKo4G,UAAUpiG,MAAOhW,KAAKo4G,UAAUriG,QAC1G28P,EAAU1yQ,KAAKs4Q,QAAQ5F,QACvB8W,EAAgBD,EAAgBxzQ,OAChC0zQ,EAAgB/W,EAAQ0N,iBAAiBpgR,KAAKiwJ,KAAM,IAAI8qF,GAAOwuC,EAAgBx8Q,EAAGw8Q,EAAgBv8Q,IACtGu8Q,EAAgBx8Q,EAAI08Q,EAAc18Q,EAClCw8Q,EAAgBvzQ,MAAQyzQ,EAAc18Q,EAAIw8Q,EAAgBvzQ,MAC1DuzQ,EAAgBv8Q,EAAKy8Q,EAAcz8Q,EAAIhN,KAAKiwJ,KAAKzvJ,SAAS+wD,aAAao6L,QAAQj/O,IAC/E68Q,EAAgBxzQ,OAASwzQ,EAAgBv8Q,EAAIw8Q,EAC7CxpR,KAAK83O,cAAcr9K,MAAMr9D,SAAS4C,KAAKkvO,qBAAqB77M,KAAMu+M,GAASiB,cAAc02C,IACzFvpR,KAAK0uO,WAAWj0K,MAAMr9D,SAAS4C,KAAKkvO,qBAAqB3C,GAAI,IAAI6E,GAAUpxO,KAAKspR,YAEpFhrR,OAAOuJ,eAAeqhR,EAAc7tR,UAAW,WAO3CqM,IAAK,WACD,OAAO1H,KAAK83O,eAEhBnwO,YAAY,EACZC,cAAc,IAEXshR,KC3QP5+L,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAgBxC++L,GAAmC,SAAUv+L,GAE7C,SAASu+L,EAAkBtxK,GAQvB,YANyB,IAAdA,EACCjtB,EAAO7pF,KAAKtB,OAASA,KAGrBmrF,EAAO7pF,KAAKtB,KAAMo4G,IAAcp4G,KAahD,OApBAsqF,GAAUo/L,EAAmBv+L,GAgB7Bu+L,EAAkBruR,UAAU8yG,WAAa,WACrChjB,EAAO9vF,UAAU8yG,WAAW7sG,KAAKtB,MACjCA,KAAK0uO,WAAWj0K,MAAMr9D,SAAS4C,KAAKkvO,qBAAqBzD,QAAS,IAAI/E,GAAQ1mO,KAAKkvO,qBAAqB/7K,QAErGu2N,GACTR,ICtCE5+L,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAexCg/L,GAAyC,SAAUx+L,GAOnD,SAASw+L,EAAwBvxK,GAC7B,IAAIr4G,EAAQorF,EAAO7pF,KAAKtB,KAAMo4G,IAAcp4G,KAQ5C,OADAD,EAAM6pR,UAAY,KACX7pR,EAeX,OA9BAuqF,GAAUq/L,EAAyBx+L,GAsBnCw+L,EAAwBtuR,UAAUwuR,aAAe,SAAU7sR,GACvD,QAAqB,IAAVA,EACP,OAAOgD,KAAK4pR,UAGZ5pR,KAAK4pR,UAAY5sR,GAGlB2sR,GACTD,IC/CEp/L,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAuCxCm/L,GAA2C,SAAU3+L,GAErD,SAAS2+L,EAA0B1xK,EAAWn6G,GAC1C,IAAI8B,EAAQorF,EAAO7pF,KAAKtB,KAAMo4G,IAAcp4G,KAW5C,OAJAD,EAAMgqR,eAAiB,UACI,IAAhB9rR,IACP8B,EAAM9B,YAAcA,GAEjB8B,EAmEX,OAhFAuqF,GAAUw/L,EAA2B3+L,GAerC7sF,OAAOuJ,eAAeiiR,EAA0BzuR,UAAW,eA+BvDqM,IAAK,WACD,OAAO1H,KAAK+pR,gBAEhB1iR,IAAK,SAAUrK,GAEXgD,KAAK+pR,eAAiB/sR,GAG1B2K,YAAY,EACZC,cAAc,IAOlBkiR,EAA0BzuR,UAAUoyF,KAAO,WACvCtC,EAAO9vF,UAAUoyF,KAAKnsF,KAAKtB,MACA,MAAvBA,KAAK+pR,gBACL/pR,KAAK0uO,WAAWj0K,MAAMr9D,SAAS4C,KAAKkvO,qBAAqBxC,KAAM1sO,KAAK+pR,eAAe/oR,UAO3F8oR,EAA0BzuR,UAAUgE,MAAQ,WACxC,IAAI+sO,EAAQ,IAAI09C,EAA0B9pR,KAAK02B,OAAQ12B,KAAK/B,aAK5D,OAJAmuO,EAAM51M,MAAQx2B,KAAKw2B,MACnB41M,EAAMyP,MAAQ77O,KAAK67O,MACnBzP,EAAMnuO,YAAc+B,KAAK/B,YACzBmuO,EAAM1/M,KAAO1sB,KAAK0sB,KACX0/M,GAEJ09C,GACTJ,KhDpHF,SAAW70B,GAKPA,EAAcA,EAAwB,SAAI,GAAK,WAK/CA,EAAcA,EAAuB,QAAI,GAAK,UAVlD,CAWGA,KAAkBA,QAKrB,IAAWm1B,IACX,SAAWA,GAKPA,EAAmBA,EAA4B,QAAI,GAAK,UAKxDA,EAAmBA,EAA+B,WAAI,GAAK,aAK3DA,EAAmBA,EAAqC,iBAAI,GAAK,mBAfrE,CAgBGA,KAAuBA,QiD7B1B,ICLWC,GDKPC,GAAiC,WAMjC,SAASA,EAAgBlpR,GACrBhB,KAAKmqR,cAAgBnpR,EAsCzB,OApCA1C,OAAOuJ,eAAeqiR,EAAgB7uR,UAAW,YAM7CqM,IAAK,WACD,OAAO1H,KAAKmqR,eAEhBxiR,YAAY,EACZC,cAAc,IAMlBsiR,EAAgB7uR,UAAUkyB,WAAa,WACnC,OAAOvtB,KAAKmqR,eAEhBD,EAAgB7uR,UAAUw1D,OAAS,SAAU8yD,EAAOymK,GAChD,MAA+B,kBAApBA,IAAqD,IAApBA,EACjCpqR,KAAKqqR,eAAe1mK,GAAO,GAG3B3jH,KAAKqqR,eAAe1mK,IAOnCumK,EAAgB7uR,UAAUo3Q,YAAc,SAAUnf,GAG9C,OAFcA,EAAYof,QACHtuQ,OAGpB8lR,KAGPI,GAAiC,WACjC,SAASA,EAAgBC,QACK,IAAfA,IAIPvqR,KAAKwqR,MAAQD,EAAWC,MACxBxqR,KAAK6wD,OAAS05N,EAAW15N,OACzB7wD,KAAKyqR,eAAiBF,EAAWE,eACjCzqR,KAAK0qR,UAAYH,EAAWI,mBAsEpC,OAnEArsR,OAAOuJ,eAAeyiR,EAAgBjvR,UAAW,UAM7CqM,IAAK,WAID,YAH+B,IAApB1H,KAAK4qR,YAAiD,MAAnB5qR,KAAK4qR,aAC/C5qR,KAAK4qR,WAAa/1B,GAAcg2B,UAE7B7qR,KAAK4qR,YAEhBvjR,IAAK,SAAUrK,GACXgD,KAAK4qR,WAAa5tR,GAEtB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeyiR,EAAgBjvR,UAAW,SAK7CqM,IAAK,WAID,YAH8B,IAAnB1H,KAAKwhP,WAA+C,MAAlBxhP,KAAK0qR,YAC9C1qR,KAAKwhP,UAAYwoC,GAAmBc,SAEjC9qR,KAAKwhP,WAEhBn6O,IAAK,SAAUrK,GACXgD,KAAKwhP,UAAYxkP,GAErB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeyiR,EAAgBjvR,UAAW,kBAK7CqM,IAAK,WAID,YAHyC,IAA9B1H,KAAK+qR,sBAAqE,MAA7B/qR,KAAK+qR,uBACzD/qR,KAAK+qR,qBAAuB,IAAI9vC,GAAW,EAAG,EAAG,EAAG,IAEjDj7O,KAAK+qR,sBAEhB1jR,IAAK,SAAUrK,GACXgD,KAAK+qR,qBAAuB/tR,EAC5BgD,KAAK0qR,WAAY,GAErB/iR,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeyiR,EAAgBjvR,UAAW,qBAK7CqM,IAAK,WAID,YAH8B,IAAnB1H,KAAK0qR,WAA+C,MAAlB1qR,KAAK0qR,YAC9C1qR,KAAK0qR,WAAY,GAEd1qR,KAAK0qR,WAEhB/iR,YAAY,EACZC,cAAc,IAEX0iR,KAGPU,GAAiC,WACjC,SAASA,KA6CT,OA3CA1sR,OAAOuJ,eAAemjR,EAAgB3vR,UAAW,QAM7CqM,IAAK,WACD,OAAO1H,KAAKs4Q,SAEhBjxQ,IAAK,SAAUrK,GACXgD,KAAKs4Q,QAAUt7Q,GAEnB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAemjR,EAAgB3vR,UAAW,UAK7CqM,IAAK,WACD,OAAO,IAAIuzO,GAAWj7O,KAAK41Q,aAAa7oQ,EAAG/M,KAAK41Q,aAAa5oQ,EAAGhN,KAAK41Q,aAAa5/P,MAAOhW,KAAK41Q,aAAa7/P,SAE/G1O,IAAK,SAAUrK,GACXgD,KAAK41Q,aAAe54Q,GAExB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAemjR,EAAgB3vR,UAAW,UAK7CqM,IAAK,WACD,OAAO1H,KAAKirR,cAEhB5jR,IAAK,SAAUrK,GACXgD,KAAKirR,aAAejuR,GAExB2K,YAAY,EACZC,cAAc,IAEXojR,KAGPE,GAAiC,WAMjC,SAASA,EAAgBj7H,EAAMv5H,GAC3B12B,KAAKs4Q,QAAUroH,EACfjwJ,KAAK41Q,aAAel/O,EAyBxB,OAvBAp4B,OAAOuJ,eAAeqjR,EAAgB7vR,UAAW,QAM7CqM,IAAK,WACD,OAAO1H,KAAKs4Q,SAEhB3wQ,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeqjR,EAAgB7vR,UAAW,UAK7CqM,IAAK,WACD,OAAO1H,KAAK41Q,cAEhBjuQ,YAAY,EACZC,cAAc,IAEXsjR,KEvNPC,GAAkC,WAClC,SAASA,KAmCT,OAjCAA,EAAiB9vR,UAAUy2P,WAAa,SAAU3W,EAAMC,EAAMC,EAAM2D,GAChE,GAAI5D,aAAgBL,SAAgC,IAAfK,EAAKplO,YAAyC,IAATolO,EACtE,OAAOp7O,KAAK8xP,WAAW3W,EAAMC,EAAKruO,EAAGquO,EAAKpuO,GAEzC,GAAoB,iBAATouO,GAAqC,iBAATC,QAAqC,IAAT2D,EACpE,OAAOh/O,KAAK8xP,WAAW3W,EAAMC,EAAMC,EAAM,MAExC,GAAID,aAAgBH,SAAoC,IAAfG,EAAKplO,YAAyC,IAATqlO,EAC/E,OAAOr7O,KAAK8xP,WAAW3W,EAAMC,EAAM,MAElC,GAAIA,aAAgBL,SAAgC,IAAfK,EAAKplO,OAAyBqlO,aAAgBivC,GACpF,OAAOtqR,KAAK8xP,WAAW3W,EAAMC,EAAKruO,EAAGquO,EAAKpuO,EAAGquO,GAE5C,GAAoB,iBAATD,GAAqC,iBAATC,IAAsB2D,aAAgBsrC,IAA2B,MAARtrC,GAAe,CAChH,IAAIhpO,EAASmlO,EAAK4W,SAAS5S,WAAWnpO,MAAQolO,EAC1Cg2B,EAAkB,IAAIn2B,GAAWG,EAAMC,EAAMrlO,EAAO,GACxD,OAAOhW,KAAK8xP,WAAW3W,EAAMi2B,EAAiBpyB,GAE7C,GAAI5D,aAAgBH,SAAoC,IAAfG,EAAKplO,OAAyC,kBAATqlO,EAE/E,OADAr7O,KAAKorR,YAAc/vC,EACZr7O,KAAK8xP,WAAW3W,EAAMC,EAAM,MAGnC,IAAIz3H,EAAQ,IAAIqnK,GACZjoC,EAAW3H,EACX60B,EAAW50B,EACf13H,EAAMssC,KAAOkrF,EACbx3H,EAAMjtF,OAASqsN,EACfp/H,EAAM3nF,OAAsB,MAAZi0O,EAAoBA,EAAW,IAAIqa,GAEnD,OADatqR,KAAK6wD,OAAO8yD,IAI1BwnK,KC1CP7gM,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAuBxC0gM,GAA8B,SAAUlgM,GAOxC,SAASkgM,EAAarqR,GAClB,OAAOmqF,EAAO7pF,KAAKtB,KAAMgB,IAAYhB,KAuGzC,OA9GAsqF,GAAU+gM,EAAclgM,GASxB7sF,OAAOuJ,eAAewjR,EAAahwR,UAAW,WAK1CqM,IAAK,WACD,OAAOyjF,EAAO9vF,UAAUkyB,WAAWjsB,KAAKtB,OAE5C2H,YAAY,EACZC,cAAc,IAOlByjR,EAAahwR,UAAUgvR,eAAiB,SAAU1mK,GAE9C3jH,KAAKg8B,OAAwC,OAA9Bh8B,KAAKgB,QAAQ+xP,mBAA8D,IAA9B/yP,KAAKgB,QAAQ+xP,aAAgC/yP,KAAKgB,QAAQ+xP,aAAe,KACrI,IAAIO,EAAc3vI,EAAMssC,KACpBq7H,EAAgB3nK,EAAMjtF,OACtBjK,EAAOzsB,KAAKgB,QAAQhE,MACpB+B,EAAS,KACTwsR,EAAa,IAAIC,GAGrB,IAFAD,EAAWt7H,KAAOqjG,EAClBi4B,EAAWE,UAAYh/P,IACd,CACL8+P,EAAavrR,KAAK0rR,aAAaj/P,EAAM6mO,EAAag4B,EAAe3nK,GACjE5kH,EAASiB,KAAK2rR,gBAAgBJ,GAC9B,MAGJ,OAAOxsR,GAMXssR,EAAahwR,UAAUswR,gBAAkB,SAAUJ,GAE/C,OADa,IAAIK,GAAoBL,EAAWt7H,KAAMs7H,EAAW70P,OAAQ60P,EAAWE,UAAWF,EAAWM,iBAQ9GR,EAAahwR,UAAUqwR,aAAe,SAAUj/P,EAAM6mO,EAAag4B,EAAe3nK,GAC9E,IAAI5kH,EAAS,IAAIysR,GACjBzsR,EAAO0sR,UAAYh/P,EACnB1tB,EAAOkxJ,KAAOqjG,EACdg4B,EAAgBtrR,KAAK8rR,mBAAmBx4B,EAAag4B,GACrD,IACIS,GADW,IAAIjtC,IACSjuL,OAAOpkC,EAAMzsB,KAAKgB,QAAQ0rB,KAAM1sB,KAAKg8B,OAAQsvP,EAAeh4B,EAAY6pB,gBAAgBpnQ,QAAQ,EAAO,IAAIilO,GAAM,EAAG,IAC5IgxC,EAA0C,MAA1BD,EAAaN,UAI7B15B,GAHapuI,EAAM3nF,OAAOwuP,QAAUR,GAAmBiC,YAC9BF,EAAahqC,MAE3BuR,EAAYvB,UACvBlW,EAAQ77O,KAAKgB,QAAQmyP,WACrBnzP,KAAKgB,mBAAmBkrR,KACxBrwC,EAAMrlN,MAAQ,IAAIqiN,GAAS,EAAG,EAAG,MAErCkZ,EAASye,uBAAuBub,EAAc/rR,KAAKgB,QAAQ0rB,KAAM1sB,KAAKgB,QAAQkvP,IAAKrU,EAAOyvC,EAAetrR,KAAKg8B,QAC/F+vP,EAAarsC,MAAMqsC,EAAa1a,UAAY,GAK3D,OAJAtyQ,EAAO8sR,eAAiB95B,EAASmf,cAAc6a,EAAa1a,UAAY,EAAG0a,EAAc/rR,KAAKgB,QAAQ0rB,KAAM4+P,EAAetrR,KAAKg8B,QAChIj9B,EAAO23B,OAAS12B,KAAKmsR,kBAAkB74B,EAAag4B,EAAeS,GACnEhtR,EAAO0sR,UAAYM,EAAaN,UAChC1sR,EAAO8f,MACA9f,GAOXssR,EAAahwR,UAAUywR,mBAAqB,SAAUx4B,EAAag4B,GAC/D,IAAIn7H,EAAWmjG,EAAYvB,SAAS5S,WAEpC,OADAmsC,EAAcv1Q,OAAUu1Q,EAAcv1Q,OAAS,EAAKu1Q,EAAcv1Q,OAASo6I,EAASp6I,OAASu1Q,EAAct+Q,EACpGs+Q,GAOXD,EAAahwR,UAAU8wR,kBAAoB,SAAU74B,EAAag4B,EAAeS,GAC7E,IAAIvvP,EAAWuvP,EAAar/O,WACxB3/B,EAAIu+Q,EAAcv+Q,EAClBC,EAAIs+Q,EAAct+Q,EAClBgJ,EAASs1Q,EAAct1Q,MAAQ,EAAKs1Q,EAAct1Q,MAAQwmB,EAASxmB,MACnED,EAASymB,EAASzmB,OAGtBhJ,EAFkBumP,EAAYvB,SAASwe,4BAA4B/zO,EAAU8uP,EAAcv+Q,EAAGu+Q,EAAct+Q,EAAGhN,KAAKg8B,QAEpGjvB,EAEhB,IAAIq/Q,EAAgB94B,EAAYvB,SAASuf,0BAA0B90O,EAASzmB,OAAQu1Q,EAAcv1Q,OAAQ/V,KAAKg8B,QAG/G,OADa,IAAIi/M,GAAWluO,EAD5BC,GAAKo/Q,EAC6Bp2Q,EAAOD,IAGtCs1Q,GACTnB,IAEEsB,GAAsC,WAGtC,OAFA,gBAKAI,GAAqC,SAAUzgM,GAO/C,SAASygM,EAAoB37H,EAAMv5H,EAAQ+0P,EAAWI,GAClD,IAAI9rR,EAAQorF,EAAO7pF,KAAKtB,KAAMiwJ,EAAMv5H,IAAW12B,KAG/C,OAFAD,EAAMssR,cAAgBZ,EACtB1rR,EAAMusR,mBAAqBT,EACpB9rR,EAyBX,OAnCAuqF,GAAUshM,EAAqBzgM,GAY/B7sF,OAAOuJ,eAAe+jR,EAAoBvwR,UAAW,aAMjDqM,IAAK,WACD,OAAO1H,KAAKqsR,eAEhB1kR,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe+jR,EAAoBvwR,UAAW,kBAKjDqM,IAAK,WACD,OAAO1H,KAAKssR,oBAEhB3kR,YAAY,EACZC,cAAc,IAEXgkR,GACTV,ICpLE5gM,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GA+BxC4hM,GAAgC,SAAUphM,GAE1C,SAASohM,EAAerxC,EAAMC,EAAMC,EAAMC,EAAM2D,GAC5C,IAAIj/O,EAAQorF,EAAO7pF,KAAKtB,OAASA,KA6DjC,OAvDAD,EAAMq6B,QAAU,GAKhBr6B,EAAMipB,aAAe,GAMrBjpB,EAAMysR,kBAAmB,EAMzBzsR,EAAM0sR,kBAAmB,OACL,IAATvxC,IAGc,iBAATA,QAAqC,IAATC,IACxCp7O,EAAQorF,EAAO7pF,KAAKtB,OAASA,MACvBo6B,QAAU8gN,EAChBn7O,EAAMipB,aAAekyN,GAEA,iBAATA,GAAqBC,aAAgB8G,SAA2B,IAAT7G,IACnEr7O,EAAQorF,EAAO7pF,KAAKtB,OAASA,MACvBo6B,QAAU8gN,EAChBn7O,EAAMipB,aAAekyN,EACrBn7O,EAAM+3Q,QAAU38B,GAEK,iBAATD,GAAqBC,aAAgB8G,IAAW7G,aAAgByT,SAA0B,IAATxT,IAC7Ft7O,EAAQorF,EAAO7pF,KAAKtB,OAASA,MACvBo6B,QAAU8gN,EAChBn7O,EAAMipB,aAAekyN,EACrBn7O,EAAM+3Q,QAAU38B,EAChBp7O,EAAM83Q,OAASz8B,GAEM,iBAATF,GAAqBC,aAAgB8G,IAAW7G,aAAgBK,SAA4B,IAATJ,IAC/Ft7O,EAAQorF,EAAO7pF,KAAKtB,OAASA,MACvBo6B,QAAU8gN,EAChBn7O,EAAMipB,aAAekyN,EACrBn7O,EAAM+3Q,QAAU38B,EAChBp7O,EAAM8vP,SAAWzU,KAGjBr7O,EAAQorF,EAAO7pF,KAAKtB,OAASA,MACvBo6B,QAAU8gN,EAChBn7O,EAAMipB,aAAekyN,EACrBn7O,EAAM+3Q,QAAU38B,EAChBp7O,EAAM83Q,OAASz8B,EACfr7O,EAAM8vP,SAAWxU,EACjBt7O,EAAMi8B,OAASgjN,IAEZj/O,EAiUX,OAhYAuqF,GAAUiiM,EAAgBphM,GAiE1B7sF,OAAOuJ,eAAe0kR,EAAelxR,UAAW,QA6B5CqM,IAAK,WACD,OAAO1H,KAAKo6B,SAEhB/yB,IAAK,SAAUrK,GACXgD,KAAKgpB,aAAehsB,EACpBgD,KAAKo6B,QAAUp9B,GAEnB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe0kR,EAAelxR,UAAW,SAM5CqM,IAAK,WACD,OAAO1H,KAAKgpB,cAEhBrhB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe0kR,EAAelxR,UAAW,OAM5CqM,IAAK,WACD,OAAO1H,KAAK63Q,QAGhBxwQ,IAAK,SAAUrK,GACXgD,KAAK63Q,OAAS76Q,GAElB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe0kR,EAAelxR,UAAW,SAM5CqM,IAAK,WACD,OAAO1H,KAAK6vP,UAGhBxoP,IAAK,SAAUrK,GACXgD,KAAK6vP,SAAW7yP,GAEpB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe0kR,EAAelxR,UAAW,QA6B5CqM,IAAK,WACD,OAAO1H,KAAK83Q,SAEhBzwQ,IAAK,SAAUrK,GACXgD,KAAK83Q,QAAU96Q,EACXgD,KAAK83Q,mBAAmBmM,IAAmC,MAAhBjkR,KAAKo6B,QAChDp6B,KAAKgpB,aAAei7P,GAAgByE,QAAQ1oR,KAAKo6B,SAGjDp6B,KAAKgpB,aAAehpB,KAAKo6B,SAGjCzyB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe0kR,EAAelxR,UAAW,gBAK5CqM,IAAK,WACD,OAAO1H,KAAKg8B,QAEhB30B,IAAK,SAAUrK,GACXgD,KAAKg8B,OAASh/B,GAElB2K,YAAY,EACZC,cAAc,IAOlB2kR,EAAelxR,UAAU83P,SAAW,WAChC,OAAyB,MAAjBnzP,KAAK6vP,eAA6C,IAAlB7vP,KAAK6vP,SAA4B,IAAInU,GAAc,IAAI7C,GAAS,EAAG,EAAG,IAAM74O,KAAK6vP,UAa7H08B,EAAelxR,UAAUw1D,OAAS,SAAU8yD,GAGxC,OAFe,IAAI0nK,GAAarrR,MACV6wD,OAAO8yD,IAGjC4oK,EAAelxR,UAAU6zF,SAAW,SAAUisJ,EAAMC,EAAMC,EAAM2D,GAC5D,GAAI5D,aAAgBL,SAAgC,IAAfK,EAAKplO,YAAyC,IAATqlO,EAEtE,OADAr7O,KAAKwsR,kBAAmB,EACjBxsR,KAAKkvF,SAASisJ,EAAMC,EAAKruO,EAAGquO,EAAKpuO,GAEvC,GAAoB,iBAATouO,GAAqC,iBAATC,QAAqC,IAAT2D,EAEpE,OADAh/O,KAAKwsR,kBAAmB,EACjBxsR,KAAKkvF,SAASisJ,EAAMC,EAAMC,EAAM,MAEtC,GAAID,aAAgBH,SAAoC,IAAfG,EAAKplO,YAAyC,IAATqlO,EAC/E,OAAOr7O,KAAKkvF,SAASisJ,EAAMC,EAAM,MAEhC,GAAIA,aAAgBL,SAAgC,IAAfK,EAAKplO,OAAyBqlO,aAAgBivC,GAEpF,OADAtqR,KAAKwsR,kBAAmB,EACjBxsR,KAAKkvF,SAASisJ,EAAMC,EAAKruO,EAAGquO,EAAKpuO,EAAGquO,GAE1C,GAAoB,iBAATD,GAAqC,iBAATC,IAAsB2D,aAAgBsrC,IAA2B,MAARtrC,GAAe,CAChHh/O,KAAKwsR,kBAAmB,EACxB,IAAIx2Q,EAASmlO,EAAK4W,SAAS5S,WAAWnpO,MAAQolO,EAC1Cg2B,EAAkB,IAAIn2B,GAAWG,EAAMC,EAAMrlO,EAAO,GACxD,OAAOhW,KAAKkvF,SAASisJ,EAAMi2B,EAAiBpyB,GAE3C,GAAI5D,aAAgBH,SAAoC,IAAfG,EAAKplO,OAAyC,kBAATqlO,EAC/E,OAAOr7O,KAAKkvF,SAASisJ,EAAMC,EAAM,MAGjC,IAAIvqL,EAAS,IAAIiuL,GACjB,GAAI9+O,KAAKwsR,iBAAkB,CACvB,IAAIE,EAAqB77N,EAAOA,OAAO7wD,KAAKhD,MAAOgD,KAAK0sB,KAAM1sB,KAAK+yP,aAAc,IAAI/X,GAAOG,EAAK4W,SAAS5S,WAAWnpO,MAAQolO,EAAKruO,EAAI,IAAI,EAAMouO,EAAK4W,SAAS5S,YAC1Js9B,OAAe,EAEf15B,EAAW3H,EACX60B,EAAW50B,EAKf,IAPI13H,EAAQ,IAAIqnK,IAGV/6H,KAAOkrF,EACbx3H,EACMjtF,OAASqsN,EACfp/H,EAAM3nF,OAAsB,MAAZi0O,EAAoBA,EAAW,IAAIqa,GAC/CoC,EAAmBhtC,MAAMjjP,OAAS,EAAG,CAErC,GADAuD,KAAKysB,KAAOigQ,EAAmBnrC,YAAY,GAAG90N,KAC1Ck3F,EAAMjtF,OAAO1pB,GAAK22G,EAAMssC,KAAK8hG,SAAS5S,WAAWppO,OAAQ,CACzD,IAAI42Q,EAAmB,IAAI5xC,GAAOp3H,EAAMjtF,OAAO3pB,EAAG42G,EAAMjtF,OAAO1pB,GAC/DyvQ,EAAez8Q,KAAK6wD,OAAO8yD,GAE3B,IACK,IAFDjtF,EAAS,IAAIukN,GAAW,EAAGwhC,EAAa/lP,OAAO1pB,EAAI0/Q,EAAmBv/P,WAAYguN,EAAK4W,SAAS5S,WAAWnpO,MAAO02Q,EAAmBv/P,YAEhIhxB,EAAI,EAAGA,EAAIuwR,EAAmBhtC,MAAMjjP,OAAQN,IAgBjD,GAfAwnH,EAAMssC,KAAOwsH,EAAaxsH,KAC1BtsC,EAAMjtF,OAAS,IAAIukN,GAAW,IAAIF,GAAOrkN,EAAO3pB,EAAG2pB,EAAO1pB,GAAI,IAAIguO,GAAMtkN,EAAO1gB,MAAO0gB,EAAO3gB,SAC7F/V,KAAKysB,KAAOigQ,EAAmBnrC,YAAYplP,GAAGswB,KAC1CiK,EAAO1pB,EAAI0/Q,EAAmBv/P,WAAasvP,EAAaxsH,KAAK8hG,SAAS5S,WAAWppO,SACjF4tG,EACMssC,KAAOtsC,EAAMssC,KAAK8hG,SAAS0gB,cAE7B/7O,EADAi2P,EAAiB3/Q,EAAKyvQ,EAAaxsH,KAAK8hG,SAAS5S,WAAWppO,OAAS0mQ,EAAa/lP,OAAO3gB,OAChF,IAAIklO,GAAW,EAAGwhC,EAAa/lP,OAAO3gB,OAAQ0mQ,EAAaxsH,KAAK8hG,SAAS5S,WAAWnpO,MAAO02Q,EAAmBv/P,YAG9G,IAAI8tN,GAAW,EAAG,EAAGwhC,EAAaxsH,KAAK8hG,SAAS5S,WAAWnpO,MAAO02Q,EAAmBv/P,YAElGw2F,EAAMjtF,OAASA,GAEnB+lP,EAAez8Q,KAAK6wD,OAAO8yD,GACvBxnH,IAAOuwR,EAAmBhtC,MAAMjjP,OAAS,EACzCi6B,EAAS,IAAIukN,GAAW,EAAGwhC,EAAa/lP,OAAO1pB,EAAI0/Q,EAAmBv/P,WAAYsvP,EAAaxsH,KAAK8hG,SAAS5S,WAAWnpO,MAAO02Q,EAAmBv/P,gBAEjJ,CACD,IAAIigE,EAAYptF,KAAK0sB,KAAKk2N,cAAc5iP,KAAKysB,KAAMzsB,KAAKg8B,QAAQhmB,MAChEymQ,EAAez8Q,KAAK4sR,sBAAsBnQ,EAAcrvL,EAAWqvL,EAAaxsH,KAAK8hG,SAAS5S,WAAWnpO,MAAO,IAI5H,OAAOymQ,EAGP,IAAIoQ,EAAW7sR,KAAK0sB,KAAKk2N,cAAc5iP,KAAKysB,KAAMzsB,KAAKg8B,QAKvD,OAJI2nF,EAAMjtF,OAAO1pB,GAAK22G,EAAMssC,KAAK8hG,SAAS5S,WAAWppO,SACjD0mQ,EAAez8Q,KAAK6wD,OAAO8yD,GAC3B84J,EAAez8Q,KAAK4sR,sBAAsBnQ,EAAcoQ,EAAS72Q,MAAOymQ,EAAaxsH,KAAK8hG,SAAS5S,WAAWnpO,MAAO,IAElHymQ,EAIPA,EAAe5rN,EAAOA,OAAO7wD,KAAKhD,MAAOgD,KAAK0sB,KAAM1sB,KAAK+yP,aAAc,IAAI/X,GAAMI,EAAKplO,MAAO,IAAI,EAAOmlO,EAAK4W,SAAS5S,YAA1H,IAEIx7H,EADA5kH,OAAS,EAETgkP,EAAW3H,EACX60B,EAAW50B,EAIf,IANI13H,EAAQ,IAAIqnK,IAGV/6H,KAAOkrF,EACbx3H,EAAMjtF,OAASqsN,EACfp/H,EAAM3nF,OAAsB,MAAZi0O,EAAoBA,EAAW,IAAIqa,GAC/C7N,EAAa/8B,MAAMjjP,OAAS,EAAG,CAE/B,GADAuD,KAAKysB,KAAOgwP,EAAal7B,YAAY,GAAG90N,KACpCk3F,EAAMjtF,OAAO1pB,GAAK22G,EAAMssC,KAAK8hG,SAAS5S,WAAWppO,OAAQ,CACrD42Q,EAAmB,IAAI5xC,GAAOp3H,EAAMjtF,OAAO3pB,EAAG42G,EAAMjtF,OAAO1pB,GAC/DjO,EAASiB,KAAK6wD,OAAO8yD,GAErB,IADIjtF,EAAS,IAAIukN,GAAW8H,EAASh2O,EAAGhO,EAAO23B,OAAO1pB,EAAIyvQ,EAAatvP,WAAY41N,EAAS/sO,MAAOymQ,EAAatvP,YAEvGhxB,EAAI,EAAGA,EAAIsgR,EAAa/8B,MAAMjjP,OAAQN,IAgB3C,GAfAwnH,EAAMssC,KAAOlxJ,EAAOkxJ,KACpBtsC,EAAMjtF,OAAS,IAAIukN,GAAWvkN,EAAO3pB,EAAG2pB,EAAO1pB,EAAG0pB,EAAO1gB,MAAO0gB,EAAO3gB,QACvE/V,KAAKysB,KAAOgwP,EAAal7B,YAAYplP,GAAGswB,KACpCiK,EAAO1pB,EAAIyvQ,EAAatvP,WAAapuB,EAAOkxJ,KAAK8hG,SAAS5S,WAAWppO,SACrE4tG,EACMssC,KAAOtsC,EAAMssC,KAAK8hG,SAAS0gB,cAE7B/7O,EADAi2P,EAAiB3/Q,EAAKjO,EAAOkxJ,KAAK8hG,SAAS5S,WAAWppO,OAAShX,EAAO23B,OAAO3gB,OACpE,IAAIklO,GAAW8H,EAASh2O,EAAG0vQ,EAAatvP,WAAY41N,EAAS/sO,MAAOymQ,EAAatvP,YAGjF,IAAI8tN,GAAW8H,EAASh2O,EAAG,EAAGg2O,EAAS/sO,MAAOymQ,EAAatvP,YAExEw2F,EAAMjtF,OAASA,GAEnB33B,EAASiB,KAAK6wD,OAAO8yD,GACjBxnH,IAAOsgR,EAAa/8B,MAAMjjP,OAAS,EACnCi6B,EAAS,IAAIukN,GAAW8H,EAASh2O,EAAGhO,EAAO23B,OAAO1pB,EAAIyvQ,EAAatvP,WAAY41N,EAAS/sO,MAAOymQ,EAAatvP,gBAE3G,CACGigE,EAAYptF,KAAK0sB,KAAKk2N,cAAc5iP,KAAKysB,KAAMzsB,KAAKg8B,QAAQhmB,MAChEjX,EAASiB,KAAK4sR,sBAAsB7tR,EAAQquF,EAAW21J,EAAS/sO,MAAO+sO,EAASh2O,IAI5F,OAAOhO,EAGH8tR,EAAW7sR,KAAK0sB,KAAKk2N,cAAc5iP,KAAKysB,KAAMzsB,KAAKg8B,QAKvD,OAJI2nF,EAAMjtF,OAAO1pB,GAAK22G,EAAMssC,KAAK8hG,SAAS5S,WAAWppO,SACjDhX,EAASiB,KAAK6wD,OAAO8yD,GACrB5kH,EAASiB,KAAK4sR,sBAAsB7tR,EAAQ8tR,EAAS72Q,MAAO+sO,EAAS/sO,MAAO+sO,EAASh2O,IAElFhO,GAKvBwtR,EAAelxR,UAAUuxR,sBAAwB,SAAU7tR,EAAQquF,EAAWvsD,EAAcisP,GAkBxF,OAhByB,MAArB9sR,KAAK+yP,mBAAqD,IAAtB/yP,KAAK+yP,cAAgC/yP,KAAK+yP,aAAa1jM,YAAc6oL,GAAiBy5B,QAC1H5yQ,EAAO23B,OAAO3pB,EAAI+/Q,GAAiBjsP,EAAeusD,GAAa,EAC/DruF,EAAO23B,OAAO1gB,MAAQo3E,GAEI,MAArBptF,KAAK+yP,mBAAqD,IAAtB/yP,KAAK+yP,cAAgC/yP,KAAK+yP,aAAa1jM,YAAc6oL,GAAiB05B,OAC/H7yQ,EAAO23B,OAAO3pB,EAAI+/Q,GAAiBjsP,EAAeusD,GAClDruF,EAAO23B,OAAO1gB,MAAQo3E,GAEI,MAArBptF,KAAK+yP,mBAAqD,IAAtB/yP,KAAK+yP,cAAgC/yP,KAAK+yP,aAAa1jM,YAAc6oL,GAAiBy7B,SAC/H50Q,EAAO23B,OAAO3pB,EAAI+/Q,EAClB/tR,EAAO23B,OAAO1gB,MAAQ6qB,IAGtB9hC,EAAO23B,OAAO1gB,MAAQ82Q,EACtB/tR,EAAO23B,OAAO1gB,MAAQo3E,GAEnBruF,GAEJwtR,GACTpB,ICjaE7gM,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAiBxCoiM,GAAkC,SAAU5hM,GAE5C,SAAS4hM,EAAiB30K,EAAWi0H,GACjC,IAAItsO,EAAQorF,EAAO7pF,KAAKtB,KAAMo4G,IAAcp4G,KAI5C,YAHmB,IAARqsO,IACPtsO,EAAMssO,IAAMA,GAETtsO,EA2DX,OAjEAuqF,GAAUyiM,EAAkB5hM,GAQ5B7sF,OAAOuJ,eAAeklR,EAAiB1xR,UAAW,aAK9CqM,IAAK,WAID,YAHiC,IAAtB1H,KAAKgtR,eACZhtR,KAAKgtR,aAAe,IAAIj1C,IAErB/3O,KAAKgtR,cAEhBrlR,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeklR,EAAiB1xR,UAAW,OAM9CqM,IAAK,WACD,OAAO1H,KAAKitR,UAAU5gD,KAE1BhlO,IAAK,SAAUrK,GACPgD,KAAKitR,UAAU5gD,MAAQrvO,IACvBgD,KAAKitR,UAAU5gD,IAAMrvO,IAG7B2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeklR,EAAiB1xR,UAAW,UAK9CqM,IAAK,WACD,OAAO1H,KAAK6pR,gBAEhBxiR,IAAK,SAAUrK,GACXgD,KAAK6pR,aAAa7sR,GAClBgD,KAAKitR,UAAU3kP,KAAOtrC,GAE1B2K,YAAY,EACZC,cAAc,IAOlBmlR,EAAiB1xR,UAAU8yG,WAAa,WACpChjB,EAAO9vF,UAAU8yG,WAAW7sG,KAAKtB,MACjCA,KAAK0uO,WAAWj0K,MAAMr9D,SAAS4C,KAAKkvO,qBAAqBzD,QAAS,IAAI/E,GAAQ1mO,KAAKkvO,qBAAqB/7K,OACpFnzD,KAAKitR,UAAUjsR,QACnChB,KAAK0uO,WAAWj0K,MAAMr9D,SAAS4C,KAAKkvO,qBAAqB/rL,EAAGnjD,KAAKitR,UAAUjsR,UAExE+rR,GACTpD,ICpFEr/L,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GA8CxCuhM,GAAgC,SAAU/gM,GAO1C,SAAS+gM,IACL,IAAInsR,EAAQorF,EAAO7pF,KAAKtB,OAASA,KAOjCD,EAAMmtR,uBAAyB,GAM/BntR,EAAMotR,cAAgB,KAOtBptR,EAAMqtR,mBAAoB,EAC1BrtR,EAAMstR,cAAgB,IAAIz7C,GAC1B,IAAK,IAAIz1O,EAAI,EAAGA,EAAI,EAAGA,IACnB4D,EAAMstR,cAAcjpR,IAAI,IAAIgtO,GAAU,IAE1C,OAAOrxO,EAwLX,OAxNAuqF,GAAU4hM,EAAgB/gM,GAkC1B7sF,OAAOuJ,eAAeqkR,EAAe7wR,UAAW,OA6B5CqM,IAAK,WACD,OAAO1H,KAAKktR,wBAEhB7lR,IAAK,SAAUrK,GACX,GAAqB,IAAjBA,EAAMP,OACN,MAAM,IAAImE,MAAM,qDAEpBZ,KAAKktR,uBAAyBlwR,GAElC2K,YAAY,EACZC,cAAc,IAElBskR,EAAe7wR,UAAU23P,KAAO,SAAU9X,EAAMC,GAC5C,GAAID,aAAgB2hC,GAAS,CACzB,IAAIhsN,EAAS,IAAIiuL,GACbwuC,EAAoBttR,KAAK0sB,KAAKhoB,MAClC,GAAIy2O,aAAgBJ,GAAQ,CACxB/6O,KAAKotR,mBAAoB,EACzBptR,KAAK0sB,KAAKhoB,MAAQk0O,GAAa6J,UAE/B,GAAkC,KAD9Bg6B,EAAe5rN,EAAOA,OAAO7wD,KAAKhD,MAAOgD,KAAK0sB,KAAM1sB,KAAK+yP,aAAc,IAAI/X,GAAOE,EAAK6W,SAAS5S,WAAWnpO,MAAQmlO,EAAKpuO,EAAI,IAAI,EAAMmuO,EAAK6W,SAAS5S,aACvIO,MAAMjjP,OAAc,CACjC,IAAI+/B,EAAWx8B,KAAK0sB,KAAKk2N,cAAc5iP,KAAKhD,OACxCq2B,EAAO,IAAI4nN,GAAWE,EAAM3+M,GAChCnJ,EAAOrzB,KAAKutR,gBAAgBl6P,EAAMmJ,EAASxmB,MAAOklO,EAAK6W,SAAS5S,WAAWnpO,MAAOmlO,EAAKpuO,GACvF/M,KAAKmtR,cAAgB,IAAIJ,GAAiB15P,EAAMrzB,KAAK4tB,KACrD5tB,KAAKmtR,cAAcz+C,WAAWj0K,MAAMr9D,SAAS,SAAU4C,KAAKqtR,eAC5DnyC,EAAKtkL,YAAYxyD,IAAIpE,KAAKmtR,eAC1B,IAAIpuR,EAASiB,KAAKkvF,SAASgsJ,EAAMC,GAEjC,OADAn7O,KAAK0sB,KAAKhoB,MAAQ4oR,EACXvuR,EAGHA,EAASiB,KAAKwtR,0BAA0B/Q,EAAcvhC,EAAMC,GAEhE,OADAn7O,KAAK0sB,KAAKhoB,MAAQ4oR,EACXvuR,EAIX,IAAI09Q,EAAe5rN,EAAOA,OAAO7wD,KAAKhD,MAAOgD,KAAK0sB,KAAM1sB,KAAK+yP,aAAc,IAAI/X,GAAMG,EAAKnlO,MAAO,IAAI,EAAO,IAAIglO,GAAM,EAAG,IAEzH,GADAh7O,KAAK0sB,KAAKhoB,MAAQk0O,GAAa6J,UACG,IAA9Bg6B,EAAa/8B,MAAMjjP,OAAc,CAC7B+/B,EAAWx8B,KAAK0sB,KAAKk2N,cAAc5iP,KAAKhD,OACxCq2B,EAAO,IAAI4nN,GAAW,IAAIF,GAAOI,EAAKpuO,EAAGouO,EAAKnuO,GAAIwvB,GACtDnJ,EAAOrzB,KAAKutR,gBAAgBl6P,EAAMmJ,EAASxmB,MAAOmlO,EAAKnlO,MAAOmlO,EAAKpuO,GACnE/M,KAAKmtR,cAAgB,IAAIJ,GAAiB15P,EAAMrzB,KAAK4tB,KACrD5tB,KAAKmtR,cAAcz+C,WAAWj0K,MAAMr9D,SAAS,SAAU4C,KAAKqtR,eAC5DnyC,EAAKtkL,YAAYxyD,IAAIpE,KAAKmtR,eAC1B,IAAI3lO,EAAcxnD,KAAKkvF,SAASgsJ,EAAMC,GAEtC,OADAn7O,KAAK0sB,KAAKhoB,MAAQ4oR,EACX9lO,EAGHA,EAAcxnD,KAAKytR,2BAA2BhR,EAAcvhC,EAAMC,GAEtE,OADAn7O,KAAK0sB,KAAKhoB,MAAQ4oR,EACX9lO,EAKf,IAAIyoG,EAAO,IAAI4sH,GAEf,OADA5sH,EAAOirF,EAAKjrF,KACLjwJ,KAAKgzP,KAAK/iG,EAAMkrF,IAS/B+wC,EAAe7wR,UAAUmyR,0BAA4B,SAAUzuR,EAAQkxJ,EAAMviI,GAEzE,IAAK,IADD+uP,EACKtgR,EAAI,EAAGA,EAAI4C,EAAOwiP,YAAY9kP,OAAQN,IAAK,CAChD,IAAI2wB,EAAO9sB,KAAK0sB,KAAKk2N,cAAc7jP,EAAO2gP,MAAMvjP,GAAGswB,MAC/CiK,EAAS,IAAIukN,GAAWvtN,EAAUZ,GAKtC,GAJU,IAAN3wB,IACAu6B,EAAO3pB,EAAI,GAEf/M,KAAKysB,KAAO1tB,EAAO2gP,MAAMvjP,GAAGswB,KACxBiK,EAAO1pB,EAAI8f,EAAK/W,OAASk6I,EAAK8hG,SAAS5S,WAAWppO,OAAQ,CAC1D,GAAU,IAAN5Z,EAMA,MALA8zJ,EAAOA,EAAK8hG,SAAS0gB,cACrB/7O,EAAS,IAAIukN,GAAW,EAAG,EAAGhrF,EAAK8hG,SAAS5S,WAAWnpO,MAAO8W,EAAK/W,QACnE2X,EAAS1gB,EAAI,EAMrB0pB,EAAS12B,KAAKutR,gBAAgB72P,EAAQ5J,EAAK9W,MAAOi6I,EAAK8hG,SAAS5S,WAAWnpO,MAAO0gB,EAAO3pB,GACzF/M,KAAKmtR,cAAgB,IAAIJ,GAAiBr2P,EAAQ12B,KAAK4tB,KACvD5tB,KAAKmtR,cAAcz+C,WAAWj0K,MAAMr9D,SAAS,SAAU4C,KAAKqtR,eAC5Dp9H,EAAKr5F,YAAYxyD,IAAIpE,KAAKmtR,eAEtB1Q,EADM,IAANtgR,EACe6D,KAAKkvF,SAAS+gE,EAAM,IAAI8qF,GAAO,EAAGrkN,EAAO1pB,IAGzChN,KAAKkvF,SAAS+gE,EAAMv5H,EAAO3pB,EAAG2pB,EAAO1pB,GAExD0gB,EAAS1gB,GAAK8f,EAAK/W,OAEvB,OAAO0mQ,GAMXyP,EAAe7wR,UAAUoyR,2BAA6B,SAAU1uR,EAAQkxJ,EAAMv5H,GAE1E,IAAK,IADD+lP,EACKtgR,EAAI,EAAGA,EAAI4C,EAAOwiP,YAAY9kP,OAAQN,IAAK,CAChD,IAAI2wB,EAAO9sB,KAAK0sB,KAAKk2N,cAAc7jP,EAAO2gP,MAAMvjP,GAAGswB,MAC/C4lO,EAAiB,IAAIpX,GAAW,IAAIF,GAAOrkN,EAAO3pB,EAAG2pB,EAAO1pB,GAAI8f,GAGpE,GAFAulO,EAAiBryP,KAAKutR,gBAAgBl7B,EAAgBvlO,EAAK9W,MAAO0gB,EAAO1gB,MAAO0gB,EAAO3pB,GACvF/M,KAAKysB,KAAO1tB,EAAO2gP,MAAMvjP,GAAGswB,KACxBiK,EAAO1pB,EAAI8f,EAAK/W,OAASk6I,EAAK8hG,SAAS5S,WAAWppO,OAAQ,CAC1D,GAAU,IAAN5Z,EAMA,MALA8zJ,EAAOA,EAAK8hG,SAAS0gB,cACrB/7O,EAAS,IAAIukN,GAAWvkN,EAAO3pB,EAAG,EAAG2pB,EAAO1gB,MAAO8W,EAAK/W,QACxDs8O,EAAerlP,EAAI,EAM3BhN,KAAKmtR,cAAgB,IAAIJ,GAAiB16B,EAAgBryP,KAAK4tB,KAC/D5tB,KAAKmtR,cAAcz+C,WAAWj0K,MAAMr9D,SAAS,SAAU4C,KAAKqtR,eAC5Dp9H,EAAKr5F,YAAYxyD,IAAIpE,KAAKmtR,eAC1B1Q,EAAez8Q,KAAKkvF,SAAS+gE,EAAMv5H,GACnCA,EAAO1pB,GAAK8f,EAAK/W,OAErB,OAAO0mQ,GAGXyP,EAAe7wR,UAAUkyR,gBAAkB,SAAUjC,EAAel+L,EAAWvsD,EAAcisP,GAkBzF,OAhByB,MAArB9sR,KAAK+yP,mBAAqD,IAAtB/yP,KAAK+yP,cAAgC/yP,KAAK+yP,aAAa1jM,YAAc6oL,GAAiBy5B,QAC1H2Z,EAAcv+Q,EAAI+/Q,GAAiBjsP,EAAeusD,GAAa,EAC/Dk+L,EAAct1Q,MAAQo3E,GAEI,MAArBptF,KAAK+yP,mBAAqD,IAAtB/yP,KAAK+yP,cAAgC/yP,KAAK+yP,aAAa1jM,YAAc6oL,GAAiB05B,OAC/H0Z,EAAcv+Q,EAAI+/Q,GAAiBjsP,EAAeusD,GAClDk+L,EAAct1Q,MAAQo3E,GAEI,MAArBptF,KAAK+yP,mBAAqD,IAAtB/yP,KAAK+yP,cAAgC/yP,KAAK+yP,aAAa1jM,YAAc6oL,GAAiBy7B,SAC/H2X,EAAcv+Q,EAAI+/Q,EAClBxB,EAAct1Q,MAAQ6qB,IAGtByqP,EAAct1Q,MAAQ82Q,EACtBxB,EAAct1Q,MAAQo3E,GAEnBk+L,GAEJY,GACTK,IC/PEmB,GAAqC,WACrC,SAASA,KA0HT,OAnHAA,EAAoBhF,QAAU,SAAUiF,EAAWC,GAC/C,IAAI7uR,EAAS,GACb,OAAQ6uR,GACJ,KAAKljC,GAAehwD,KAChB37L,EAAS,GACT,MACJ,KAAK2rP,GAAemjC,QAChB9uR,EAAS4uR,EAAUzgR,WACnB,MACJ,KAAKw9O,GAAeojC,WAChB/uR,EAASiB,KAAK+tR,eAAeJ,GAAW/3Q,cACxC,MACJ,KAAK80O,GAAesjC,WAChBjvR,EAASiB,KAAKiuR,cAAcN,GAAW/3Q,cACvC,MACJ,KAAK80O,GAAewjC,WAChBnvR,EAASiB,KAAK+tR,eAAeJ,GAC7B,MACJ,KAAKjjC,GAAeyjC,WAChBpvR,EAASiB,KAAKiuR,cAAcN,GAGpC,OAAO5uR,GAMX2uR,EAAoBO,cAAgB,SAAUN,GAC1C,IAAIS,EAAS,GAcb,OAbAA,GAAUpuR,KAAKquR,eAAeV,EAAW,IAAM,KAC/CS,GAAUpuR,KAAKquR,eAAeV,EAAW,IAAK,MAC9CS,GAAUpuR,KAAKquR,eAAeV,EAAW,IAAK,KAC9CS,GAAUpuR,KAAKquR,eAAeV,EAAW,IAAK,MAC9CS,GAAUpuR,KAAKquR,eAAeV,EAAW,IAAK,KAC9CS,GAAUpuR,KAAKquR,eAAeV,EAAW,GAAI,MAC7CS,GAAUpuR,KAAKquR,eAAeV,EAAW,GAAI,KAC7CS,GAAUpuR,KAAKquR,eAAeV,EAAW,GAAI,MAC7CS,GAAUpuR,KAAKquR,eAAeV,EAAW,GAAI,KAC7CS,GAAUpuR,KAAKquR,eAAeV,EAAW,EAAG,MAC5CS,GAAUpuR,KAAKquR,eAAeV,EAAW,EAAG,KAC5CS,GAAUpuR,KAAKquR,eAAeV,EAAW,EAAG,OAC5CS,GAAUpuR,KAAKquR,eAAeV,EAAW,EAAG,MAC9BzgR,YAMlBwgR,EAAoBK,eAAiB,SAAUO,GAG3C,IAFA,IAAIxtR,EAAQd,KAAKuuR,gBAAgBD,GAC7BvvR,EAAS,GACN+B,EAAMrE,OAAS,GAAG,CACrB,IAAId,EAAMmF,EAAMsrJ,MAChBrtJ,EAASiB,KAAKwuR,WAAWzvR,EAAQpD,GAErC,OAAOoD,EAAOmO,YAMlBwgR,EAAoBW,eAAiB,SAAUrxR,EAAOyxR,EAAWzlC,GAE7D,IADA,IAAI0lC,EAAe,GACZ1xR,GAASyxR,GACZzxR,GAASyxR,EACTC,GAAgB1lC,EAEpB,OAAO0lC,EAAaxhR,YAMxBwgR,EAAoBa,gBAAkB,SAAUD,GAC5C,GAAIA,GAAU,EACV,MAAM1tR,MAAM,+DAGhB,IADA,IAAIE,KACGwtR,EAAStuR,KAAK2uR,aAAa,CAC9B,IAAIlD,EAAY6C,EAAStuR,KAAK2uR,YACZ,IAAdlD,GACA6C,EAASA,EAAStuR,KAAK2uR,YAAc,EACrClD,EAAYzrR,KAAK2uR,aAGjBL,GAAUtuR,KAAK2uR,YAEnB7tR,EAAM0D,KAAKinR,GAGf,OADA3qR,EAAM0D,KAAK8pR,GACJxtR,GAMX4sR,EAAoBc,WAAa,SAAU3tC,EAAS7jP,GAGhD,OADA6jP,GADa33N,OAAOC,aAAaukQ,EAAoBkB,gBAAkB5xR,IAU3E0wR,EAAoBiB,YAAc,GAMlCjB,EAAoBkB,mBACblB,KChIPmB,GAAsC,WACtC,SAASA,EAAqB5/Q,EAAUjS,GAOpCgD,KAAK8uR,YAAc,KAKnB9uR,KAAKo6B,QAAU,QACS,IAAbnrB,IAIPjP,KAAKiP,SAAWA,EAChBjP,KAAKhD,MAAQA,GAgCrB,OA7BAsB,OAAOuJ,eAAegnR,EAAqBxzR,UAAW,YAMlDqM,IAAK,WACD,OAAO1H,KAAK8uR,aAEhBznR,IAAK,SAAUrK,GACXgD,KAAK8uR,YAAc9xR,GAEvB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAegnR,EAAqBxzR,UAAW,SAKlDqM,IAAK,WACD,OAAO1H,KAAKo6B,SAEhB/yB,IAAK,SAAUrK,GACXgD,KAAKo6B,QAAUp9B,GAEnB2K,YAAY,EACZC,cAAc,IAEXinR,KCvDPvkM,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAqBxCokM,GAAuC,SAAU5jM,GAEjD,SAAS4jM,IACL,IAAIhvR,EAAQorF,EAAO7pF,KAAKtB,OAASA,KAOjC,OADAD,EAAM8iG,KAAO,IAAIuuJ,GACVrxP,EAeX,OAxBAuqF,GAAUykM,EAAuB5jM,GAajC4jM,EAAsB1zR,UAAU62Q,YAAc,SAAUngB,EAAUrkO,EAAUklO,EAAUC,GAClF1nK,EAAO9vF,UAAUs3P,kBAAkBrxP,KAAKtB,KAAM+xP,EAAUrkO,EAAUklO,EAAUC,GAC5E,IAAI71P,EAAQgD,KAAKnD,SAASk1P,GACtB9iP,EAAW,IAAIgrQ,GAAYj6Q,KAAKugB,WACpCvgB,KAAK6iG,KAAKzlG,SAAS20P,EAAU,IAAI88B,GAAqB5/Q,EAAUjS,IAChE,IACI8vB,EAAO9sB,KAAKugB,UAChBtR,EAAS8iP,SAAS+d,WAAW9yQ,EAAOgD,KAAK8yP,UAAW9yP,KAAKkwP,IAAKlwP,KAAKmzP,WAAY,EAAG,EAAGrmO,EAAK9W,MAAO8W,EAAK/W,OAAQ/V,KAAK+yP,cACnH,IAAIi8B,EAAe,IAAIj0C,GAAOrtN,EAAS3gB,EAAI/M,KAAK0tB,SAAS3gB,EAAG2gB,EAAS1gB,EAAIhN,KAAK0tB,SAAS1gB,GACvF+kP,EAASyd,gBAAgBvgQ,EAAU+/Q,EAAc,IAAIh0C,GAAM/rO,EAAS+G,MAAQ48O,EAAU3jP,EAAS8G,OAAS88O,KAErGk8B,GACT38B,IC/CE9nK,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAkBxCskM,GAAoC,SAAU9jM,GAE9C,SAAS8jM,EAAmBviQ,EAAMyuN,GAC9B,IAAIp7O,EAAQorF,EAAO7pF,KAAKtB,OAASA,KAkBjC,OAZAD,EAAMmvR,oBAAsBxkC,GAAemjC,aACvB,IAAT1yC,EACPp7O,EAAM2sB,KAAOA,EAERyuN,aAAgBM,IACrB17O,EAAM2sB,KAAOA,EACb3sB,EAAM87O,MAAQV,IAGdp7O,EAAM2sB,KAAOA,EACb3sB,EAAM22B,OAASykN,GAEZp7O,EAoCX,OAxDAuqF,GAAU2kM,EAAoB9jM,GAsB9B7sF,OAAOuJ,eAAeonR,EAAmB5zR,UAAW,eAMhDqM,IAAK,WACD,OAAO1H,KAAKkvR,qBAEhB7nR,IAAK,SAAUrK,GACXgD,KAAKkvR,oBAAsBlyR,GAE/B2K,YAAY,EACZC,cAAc,IAMlBqnR,EAAmB5zR,UAAUwB,SAAW,SAAUk1P,GAC9C,IACI9hG,EAAOjwJ,KAAKqzP,oBAAoBtB,GAEpC,OADS/xP,KAAKmvR,iBAAiBl/H,IAOnCg/H,EAAmB5zR,UAAU8zR,iBAAmB,SAAUl/H,GACtD,IACIC,EADWD,EAAKzvJ,SACK0qO,MAAM3sO,QAAQ0xJ,GAAQ,EAC/C,OAAOy9H,GAAoBhF,QAAQx4H,EAAWlwJ,KAAK4tR,cAEhDqB,GACTF,IC5EEzkM,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAiBxCykM,GAAmC,SAAUjkM,GAU7C,SAASikM,EAAkB1iQ,EAAMmvN,EAAOpvN,GAEpC,IAAK,IADDo2E,KACKzkG,EAAK,EAAGA,EAAKY,UAAUvC,OAAQ2B,IACpCykG,EAAKzkG,EAAK,GAAKY,UAAUZ,GAE7B,IAAI2B,EAAQorF,EAAO7pF,KAAKtB,OAASA,KAgBjC,OAVAD,EAAM2uQ,wBAA0B,KAKhC3uQ,EAAMsvR,aAAe,GACrBtvR,EAAM2sB,KAAOA,EACb3sB,EAAM87O,MAAQA,EACd97O,EAAM0sB,KAAOA,EACb1sB,EAAM6xP,gBAAkB/uJ,EACjB9iG,EA+CX,OA7EAuqF,GAAU8kM,EAAmBjkM,GAgC7B7sF,OAAOuJ,eAAeunR,EAAkB/zR,UAAW,QAM/CqM,IAAK,WACD,OAAO1H,KAAKqvR,cAEhBhoR,IAAK,SAAUrK,GACXgD,KAAKqvR,aAAeryR,GAExB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeunR,EAAkB/zR,UAAW,mBAK/CqM,IAAK,WACD,OAAO1H,KAAK0uQ,yBAEhBrnQ,IAAK,SAAUrK,GACXgD,KAAK0uQ,wBAA0B1xQ,GAEnC2K,YAAY,EACZC,cAAc,IAOlBwnR,EAAkB/zR,UAAUwB,SAAW,SAAUk1P,GAC7C,IACItlO,EAAOzsB,KAAKysB,KAAKvf,WACrB,QAAoC,IAAzBlN,KAAK4xP,iBAA2D,MAAxB5xP,KAAK4xP,iBAA2B5xP,KAAK4xP,gBAAgBn1P,OAAS,EAC7G,IAAK,IAAIN,EAAI,EAAGA,EAAI6D,KAAK4xP,gBAAgBn1P,OAAQN,IAAK,CAClD,IAAImzR,EAAiBtvR,KAAK4xP,gBAAgBz1P,GAC1CswB,EAAOA,EAAKld,QAAQ,IAAMpT,EAAI,IAAKmzR,EAAezyR,SAASk1P,IAGnE,OAAOtlO,GAEJ2iQ,GACTL,IChGEzkM,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAqBxC4kM,GAAqC,SAAUpkM,GAG/C,SAASokM,IACL,IAAIxvR,EAAQorF,EAAO7pF,KAAKtB,OAASA,KAMjC,OAHAD,EAAM8iG,KAAO,IAAIuuJ,GAEjBrxP,EAAMyvR,mBACCzvR,EAyBX,OAlCAuqF,GAAUilM,EAAqBpkM,GAW/BokM,EAAoBl0R,UAAU62Q,YAAc,SAAUngB,EAAUrkO,EAAUklO,EAAUC,GAChF1nK,EAAO9vF,UAAUs3P,kBAAkBrxP,KAAKtB,KAAM+xP,EAAUrkO,EAAUklO,EAAUC,GAC5E,IACIryP,EADOR,KAAKqzP,oBAAoBtB,GAChBvxP,SAChBmwC,EAAY3wC,KAAKnD,SAASk1P,GAE9B,GAAI/xP,KAAK6iG,KAAK4jI,YAAYjmO,GAAW,CACjC,IAAIulO,EAAO/lO,KAAK6iG,KAAKhmG,SAAS2D,GAC1BwuR,EAAe,IAAIj0C,GAAOrtN,EAAS3gB,EAAI/M,KAAK0tB,SAAS3gB,EAAG2gB,EAAS1gB,EAAIhN,KAAK0tB,SAAS1gB,GACvF+kP,EAASyd,gBAAgBzpC,EAAK92N,SAAU+/Q,EAAc,IAAIh0C,GAAMjV,EAAK92N,SAAS+G,MAAQ48O,EAAU7sB,EAAK92N,SAAS8G,OAAS88O,IACvH7yP,KAAKwvR,gBAAgBhrR,KAAKutP,OAEzB,CACD,IAAIjlO,EAAO9sB,KAAKugB,UACZtR,EAAW,IAAIgrQ,GAAYntP,GAC/B9sB,KAAK6iG,KAAKzlG,SAASoD,EAAU,IAAIquR,GAAqB5/Q,EAAU0hC,IAChE1hC,EAAS8iP,SAAS+d,WAAWn/N,EAAW3wC,KAAK8yP,UAAW9yP,KAAKkwP,IAAKlwP,KAAKmzP,WAAY,EAAG,EAAGrmO,EAAK9W,MAAO8W,EAAK/W,OAAQ/V,KAAK+yP,cACnHi8B,EAAe,IAAIj0C,GAAOrtN,EAAS3gB,EAAI/M,KAAK0tB,SAAS3gB,EAAG2gB,EAAS1gB,EAAIhN,KAAK0tB,SAAS1gB,GACvF+kP,EAASyd,gBAAgBvgQ,EAAU+/Q,EAAc,IAAIh0C,GAAM/rO,EAAS+G,MAAQ48O,EAAU3jP,EAAS8G,OAAS88O,IACxG7yP,KAAKwvR,gBAAgBhrR,KAAKutP,KAI3Bw9B,GACTn9B,ICzDE9nK,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAoBxC8kM,GAAmC,SAAUtkM,GAE7C,SAASskM,EAAkB/iQ,EAAMyuN,GAC7B,IAAIp7O,EAAQorF,EAAO7pF,KAAKtB,OAASA,KAkBjC,OAZAD,EAAMmvR,oBAAsBxkC,GAAemjC,aACvB,IAAT1yC,EACPp7O,EAAM2sB,KAAOA,EAERyuN,aAAgBM,IACrB17O,EAAM2sB,KAAOA,EACb3sB,EAAM87O,MAAQV,IAGdp7O,EAAM2sB,KAAOA,EACb3sB,EAAM22B,OAASykN,GAEZp7O,EA8BX,OAlDAuqF,GAAUmlM,EAAmBtkM,GAsB7B7sF,OAAOuJ,eAAe4nR,EAAkBp0R,UAAW,eAM/CqM,IAAK,WACD,OAAO1H,KAAKkvR,qBAEhB7nR,IAAK,SAAUrK,GACXgD,KAAKkvR,oBAAsBlyR,GAE/B2K,YAAY,EACZC,cAAc,IAOlB6nR,EAAkBp0R,UAAUwB,SAAW,SAAUk1P,GAC7C,IAGIjzO,EAFO9e,KAAKqzP,oBAAoBtB,GAChB2gB,QAAQpyQ,OAAOE,SACd0qO,MAAMpsN,MAE3B,OADS4uQ,GAAoBhF,QAAQ5pQ,EAAO9e,KAAK4tR,cAG9C6B,GACTF,KZnEF,SAAWtF,GAKPA,EAAmBA,EAA6B,SAAI,GAAK,WAKzDA,EAAmBA,EAA8B,UAAI,GAAK,YAK1DA,EAAmBA,EAAyB,KAAI,GAAK,OAfzD,CAgBGA,KAAuBA,QaT1B,ICRWyF,GDQPC,GAAgC,WAChC,SAASA,EAAez0C,EAAMC,GAmC1B,GA7BAn7O,KAAKkvO,qBAAuB,IAAIjE,GAKhCjrO,KAAK4vR,gBAAkB3F,GAAmBtrM,SAM1C3+E,KAAKouE,WAAa,EAMlBpuE,KAAK6vR,oBAAsB,IAAI90C,GAAO,EAAG,GAMzC/6O,KAAK02B,OAAS,IAAIukN,GAKlBj7O,KAAKi1D,MAAQ,IAAI28K,QACG,IAATuJ,EAAsB,CACjBsP,GAAmBoB,aAC/B7rP,KAAK6vR,oBAAsB,IAAI90C,GAAO,EAAG/6O,KAAK6vR,oBAAoB7iR,GAClEhN,KAAKs4Q,QAAUp9B,OAEVC,aAAgBJ,IACrB/6O,KAAKpC,YAAYs9O,GACjBl7O,KAAK6vR,oBAAsB10C,IAG3Bn7O,KAAKpC,YAAYs9O,GACjBl7O,KAAK02B,OAASykN,GA0GtB,OAvGA78O,OAAOuJ,eAAe8nR,EAAet0R,UAAW,QAM5CqM,IAAK,WACD,OAAO1H,KAAKouE,YAEhB/mE,IAAK,SAAUrK,GACXgD,KAAKouE,WAAapxE,EAClBgD,KAAK8vR,uBAETnoR,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe8nR,EAAet0R,UAAW,QAK5CqM,IAAK,WACD,OAAO1H,KAAKs4Q,SAEhBjxQ,IAAK,SAAUrK,GACXgD,KAAKs4Q,QAAUt7Q,EACfgD,KAAK8vR,uBAETnoR,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe8nR,EAAet0R,UAAW,QAK5CqM,IAAK,WACD,OAAO1H,KAAK4vR,iBAEhBvoR,IAAK,SAAUrK,GACXgD,KAAK4vR,gBAAkB5yR,EACvBgD,KAAK8vR,uBAETnoR,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe8nR,EAAet0R,UAAW,YAK5CqM,IAAK,WACD,OAAO1H,KAAK6vR,qBAEhBxoR,IAAK,SAAUrK,GACXgD,KAAK6vR,oBAAsB7yR,EAC3BgD,KAAK8vR,uBAETnoR,YAAY,EACZC,cAAc,IAMlB+nR,EAAet0R,UAAU+kR,iBAAmB,SAAUnwH,EAAMn8H,GAExD,OADcm8H,EAAKyiH,QACJ0N,iBAAiBnwH,EAAMn8H,IAM1C67P,EAAet0R,UAAUy0R,oBAAsB,WAG3C,OAFA9vR,KAAKi1D,MAAMjF,QACXhwD,KAAKi1D,MAAM7wD,IAAI,IAAImwO,GAAmBv0O,KAAKs4Q,UACnCt4Q,KAAK4vR,iBACT,KAAK3F,GAAmBtrM,SACpB,IAAIoxM,EAAa/vR,KAAKs4Q,QAClBxkP,EAAQ,IAAIinN,GAChBjnN,EAAQ9zB,KAAKogR,iBAAiB2P,EAAY/vR,KAAK6vR,qBAC/C7vR,KAAKi1D,MAAM7wD,IAAI,IAAIsiO,GAAQ1mO,KAAKkvO,qBAAqBzC,MACrDzsO,KAAKi1D,MAAM7wD,IAAI,IAAIgtO,GAAUt9M,EAAM/mB,IACnC/M,KAAKi1D,MAAM7wD,IAAI,IAAIgtO,GAAUt9M,EAAM9mB,IACnChN,KAAKi1D,MAAM7wD,IAAI,IAAIgtO,GAAUpxO,KAAKouE,aAClC,MACJ,KAAK67M,GAAmB+F,UACpBhwR,KAAKi1D,MAAM7wD,IAAI,IAAIsiO,GAAQ1mO,KAAKkvO,qBAAqBj5N,QAIjE3X,OAAOuJ,eAAe8nR,EAAet0R,UAAW,WAK5CqM,IAAK,WAED,OADA1H,KAAK8vR,sBACE9vR,KAAKi1D,OAEhBttD,YAAY,EACZC,cAAc,IAEX+nR,KErKPrlM,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAkBxCslM,GAAiC,SAAU9kM,GAE3C,SAAS8kM,EAAgB7lB,EAAct9O,EAAMpoB,GACzC,IAAI3E,EAAQorF,EAAO7pF,KAAKtB,KAAM8sB,IAAS9sB,KAiBvC,OAZAD,EAAMszQ,aAAc,EAKpBtzQ,EAAMipQ,WAAY,OACJ7tQ,IAAVuJ,EACA3E,EAAMmwR,mBAAmB9lB,EAAc1lQ,GAGvC3E,EAAMmwR,mBAAmB9lB,EAAcxxB,GAAasJ,SAEjDniP,EAgFX,OAnGAuqF,GAAU2lM,EAAiB9kM,GAqB3B8kM,EAAgB50R,UAAU4nP,aAAe,SAAUv2N,GAG/C,OAFa,GAIjBujQ,EAAgB50R,UAAUklP,aAAe,SAAUzyL,EAAM9xB,GAMrD,OALY,GAUhBi0P,EAAgB50R,UAAU0tQ,aAAe,SAAUnyC,EAAU56L,GACzD,IAAIm0P,EAAYnwR,KAAKw0Q,aAAazL,aAAanyC,GAG/C,OADAu5D,GAAc,KADHnwR,KAAKoiP,QAAQ7hO,QAAQyb,IAKpCi0P,EAAgB50R,UAAU60R,mBAAqB,SAAU9lB,EAAc1lQ,GACnE1E,KAAKw0Q,aAAe,IAAIrK,GAAoBC,EAAcpqQ,KAAK8sB,MAC/D9sB,KAAKowR,eAAe1rR,GACpB1E,KAAKyoR,uBAETwH,EAAgB50R,UAAU+0R,eAAiB,SAAU1rR,GACjD,IAAI2rR,EAASrwR,KAAKw0Q,aAAazJ,WAAWxS,SACD,IAApC7zP,EAAQk0O,GAAa6J,aACtB4tC,GAAUz3C,GAAa6J,WAEc,IAApC/9O,EAAQk0O,GAAa4J,aACtB6tC,GAAUz3C,GAAa4J,WAE3BxiP,KAAKmiP,SAASkuC,IAElBJ,EAAgB50R,UAAUotR,oBAAsB,WAC5C,IAAI6H,EAAY,KACZrrC,GAAYsrC,cAEZD,EAAYrrC,GAAYhxD,MAAM7kC,OAAOpvJ,OAEzC,IAAIojP,EAAY,KAEhB,GAAkB,OAAdktC,QAAoCn1R,IAAdm1R,EAAyB,CAE/CltC,EAAYktC,EAAUptC,eACtB,IAAId,EAAUkuC,EAAUluC,SACxBA,EAAUA,EAAQ/iP,SACVytB,KAAO9sB,KAAK8sB,KACpB9sB,KAAKoiP,QAAUA,EACfpiP,KAAKw0Q,aAAe8b,EAAU9b,kBAGb,MAAb8b,IACItwR,KAAKw0Q,wBAAwBrK,KAC7BnqQ,KAAKw0Q,aAAagc,QAAUxwR,KAAKqzQ,aAErCrzQ,KAAKw0Q,aAAalM,kBAClBllB,EAAYpjP,KAAKw0Q,aAAatxB,eAC9BljP,KAAKoiP,QAAUpiP,KAAKw0Q,aAAapyB,SAGzCpiP,KAAKoiP,QAAQquC,eAAgB,EAC7BzwR,KAAKmjP,aAAaC,IAMtB6sC,EAAgB50R,UAAUgyQ,WAAa,SAAU5gP,GAC7C,IAAI8lO,EAAevyP,KAAKw0Q,aACJ,MAAhBjiB,GACAA,EAAa8a,WAAW5gP,IAGzBwjQ,GACThuC,IC5GEyuC,GAAwC,WAExC,SAASA,EAAuBx1C,EAAMC,EAAMC,EAAMC,EAAM2D,GAChD9D,aAAgBD,SAA8B,IAATE,EACrCn7O,KAAKpC,YAAYs9O,EAAKnuO,EAAGmuO,EAAKluO,EAAGkuO,EAAKllO,MAAOklO,EAAKnlO,QAE7CmlO,aAAgBD,IAAcE,aAAgB0hC,SAA2B,IAATzhC,EACrEp7O,KAAKpC,YAAYs9O,EAAKnuO,EAAGmuO,EAAKluO,EAAGkuO,EAAKllO,MAAOklO,EAAKnlO,OAAQolO,GAErDD,aAAgBH,IAAUI,aAAgBH,SAAyB,IAATI,EAC/Dp7O,KAAKpC,YAAYs9O,EAAKnuO,EAAGmuO,EAAKluO,EAAGmuO,EAAKnlO,MAAOmlO,EAAKplO,QAE7CmlO,aAAgBH,IAAUI,aAAgBH,IAASI,aAAgByhC,SAA2B,IAATxhC,EAC1Fr7O,KAAKpC,YAAYs9O,EAAKnuO,EAAGmuO,EAAKluO,EAAGmuO,EAAKnlO,MAAOmlO,EAAKplO,OAAQqlO,GAErDF,aAAgBF,SAAyB,IAATG,EACrCn7O,KAAKpC,YAAYs9O,EAAKllO,MAAOklO,EAAKnlO,QAEb,iBAATmlO,GAAqC,iBAATC,QAAqC,IAATC,EACpEp7O,KAAKpC,YAAY,EAAG,EAAGs9O,EAAMC,GAER,iBAATD,GAAqC,iBAATC,GAAqBC,aAAgByhC,SAA2B,IAATxhC,EAC/Fr7O,KAAKpC,YAAY,EAAG,EAAGs9O,EAAMC,EAAMC,IAGnCp7O,KAAK+M,EAAImuO,EACTl7O,KAAKgN,EAAImuO,EACTn7O,KAAK8uR,YAAc,IAAI7U,GAAY7+B,EAAMC,IAilBjD,OAvkBA/8O,OAAOuJ,eAAe6oR,EAAuBr1R,UAAW,QAMpDqM,IAAK,WACD,OAAO1H,KAAK2wR,WAEhBtpR,IAAK,SAAUrK,GAEXgD,KAAK2wR,UAAY3zR,EAEjBgD,KAAK4wR,kBAGTjpR,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe6oR,EAAuBr1R,UAAW,aAKpDqM,IAAK,WACD,OAAO1H,KAAK6wR,gBAEhBxpR,IAAK,SAAUrK,GAEXgD,KAAK8wR,aAAa9zR,IAGtB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe6oR,EAAuBr1R,UAAW,cAKpDqM,IAAK,WACD,OAAO1H,KAAK+wR,cAEhB1pR,IAAK,SAAUrK,GAEXgD,KAAK+wR,aAAe/zR,GAGxB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe6oR,EAAuBr1R,UAAW,cAKpDqM,IAAK,WACD,OAAQ1H,KAAK+wR,cAEjB1pR,IAAK,SAAUrK,GACXgD,KAAK+wR,cAAgB/zR,GAEzB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe6oR,EAAuBr1R,UAAW,YAKpDqM,IAAK,WACD,OAAO1H,KAAKmyE,iBAEhB9qE,IAAK,SAAUrK,GACPgD,KAAK0G,OAASmkP,GAAanwD,OAC3B16L,KAAKmyE,gBAAkBn1E,IAM/B2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe6oR,EAAuBr1R,UAAW,KAKpDqM,IAAK,WAED,YAD6C,IAAzB1H,KAAKmyE,gBAAmCnyE,KAAKmyE,gBAAgBplE,EAAI,GAGzF1F,IAAK,SAAUrK,GACPgD,KAAK0G,OAASmkP,GAAanwD,OAC3B16L,KAAKmyE,gBAAgBplE,EAAI/P,IAMjC2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe6oR,EAAuBr1R,UAAW,KAKpDqM,IAAK,WAED,YAD6C,IAAzB1H,KAAKmyE,gBAAmCnyE,KAAKmyE,gBAAgBnlE,EAAI,GAGzF3F,IAAK,SAAUrK,GACPgD,KAAK0G,OAASmkP,GAAanwD,OAC3B16L,KAAKmyE,gBAAgBnlE,EAAIhQ,IAMjC2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe6oR,EAAuBr1R,UAAW,QAKpDqM,IAAK,WACD,OAAO1H,KAAKiP,SAAS6d,MAEzBzlB,IAAK,SAAUrK,GACPgD,KAAK0G,OAASmkP,GAAanwD,MAC3B16L,KAAKiP,SAASm/B,MAAMpxC,IAG5B2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe6oR,EAAuBr1R,UAAW,SAKpDqM,IAAK,WACD,OAAO1H,KAAKiP,SAAS+G,OAEzB3O,IAAK,SAAUrK,GACX,GAAIgD,KAAKiP,SAAS+G,QAAUhZ,GAASgD,KAAK0G,OAASmkP,GAAanwD,KAAM,CAClE,IAAI5tK,EAAO9sB,KAAKiP,SAAS6d,KACzBA,EAAK9W,MAAQhZ,EACbgD,KAAKiP,SAASm/B,MAAMthB,KAG5BnlB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe6oR,EAAuBr1R,UAAW,UAKpDqM,IAAK,WACD,OAAO1H,KAAKiP,SAAS8G,QAEzB1O,IAAK,SAAUrK,GACX,GAAIgD,KAAKiP,SAAS8G,SAAW/Y,GAASgD,KAAK0G,OAASmkP,GAAanwD,KAAM,CACnE,IAAI5tK,EAAO9sB,KAAKiP,SAAS6d,KACzBA,EAAK/W,OAAS/Y,EACdgD,KAAKiP,SAASm/B,MAAMthB,KAG5BnlB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe6oR,EAAuBr1R,UAAW,YAKpDqM,IAAK,WACD,OAAO1H,KAAKiP,SAAS8iP,UAEzBpqP,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe6oR,EAAuBr1R,UAAW,YAKpDqM,IAAK,WAID,OAAO1H,KAAK8uR,aAEhBnnR,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe6oR,EAAuBr1R,UAAW,QAKpDqM,IAAK,WACD,OAAO1H,KAAKgxR,cAEhB3pR,IAAK,SAAUrK,GACXgD,KAAKixR,cAAcj0R,GACnBgD,KAAKgxR,aAAeh0R,GAExB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe6oR,EAAuBr1R,UAAW,UAKpDqM,IAAK,WACD,OAAO,IAAIuzO,GAAW,IAAIF,GAAO/6O,KAAK+M,EAAG/M,KAAKgN,GAAIhN,KAAK8sB,OAE3DzlB,IAAK,SAAUrK,GACPgD,KAAK0G,OAASmkP,GAAanwD,OAC3B16L,KAAK0tB,SAAW,IAAIqtN,GAAO/9O,EAAM+P,EAAG/P,EAAMgQ,GAC1ChN,KAAK8sB,KAAO,IAAIkuN,GAAMh+O,EAAMgZ,MAAOhZ,EAAM+Y,UAGjDpO,YAAY,EACZC,cAAc,IAMlB8oR,EAAuBr1R,UAAU41R,cAAgB,SAAUvqR,GACvD,GAAIA,IAASmkP,GAAanwD,KAAM,CAC5B,OAAQh0L,GACJ,KAAKmkP,GAAaxN,IACdr9O,KAAKkxR,KAAOvmC,GAAatN,IACzB,MACJ,KAAKwN,GAAaknB,OACd/xQ,KAAKkxR,KAAOvmC,GAAaonB,OACzB,MACJ,KAAKlnB,GAAairB,KACd91Q,KAAKkxR,KAAOvmC,GAAamrB,KACzB,MACJ,KAAKjrB,GAAa+mB,MACd5xQ,KAAKkxR,KAAOvmC,GAAainB,MAGjC5xQ,KAAK4wR,mBAObF,EAAuBr1R,UAAUu1R,eAAiB,WAC9C5wR,KAAKqvD,UAAYu7L,GAAkBlwD,MAMvCg2F,EAAuBr1R,UAAUy1R,aAAe,SAAUzhO,GACtD,GAAIrvD,KAAKkxR,OAASvmC,GAAajwD,KAC3B16L,KAAK6wR,eAAiBxhO,MAErB,CAED,IAAI8hO,GAAW,EACf,OAAQnxR,KAAKkxR,MACT,KAAKvmC,GAAamrB,KACdqb,EAAY9hO,IAAcu7L,GAAkBwmC,SAAW/hO,IAAcu7L,GAAkBymC,YACnFhiO,IAAcu7L,GAAkB0mC,YAAcjiO,IAAcu7L,GAAkBlwD,KAClF,MACJ,KAAKiwD,GAAatN,IACd8zC,EAAY9hO,IAAcu7L,GAAkBwmC,SAAW/hO,IAAcu7L,GAAkB2mC,WACnFliO,IAAcu7L,GAAkB4mC,UAAYniO,IAAcu7L,GAAkBlwD,KAChF,MACJ,KAAKiwD,GAAainB,MACduf,EAAY9hO,IAAcu7L,GAAkB4mC,UAAYniO,IAAcu7L,GAAkB6mC,aACpFpiO,IAAcu7L,GAAkB8mC,aAAeriO,IAAcu7L,GAAkBlwD,KACnF,MACJ,KAAKiwD,GAAaonB,OACdof,EAAY9hO,IAAcu7L,GAAkB0mC,YAAcjiO,IAAcu7L,GAAkB+mC,cACnFtiO,IAAcu7L,GAAkB8mC,aAAeriO,IAAcu7L,GAAkBlwD,KACtF,MACJ,KAAKiwD,GAAa6iB,KACd2jB,EAAY9hO,IAAcu7L,GAAkBgnC,cAAgBviO,IAAcu7L,GAAkBlwD,KAGhGy2F,IACAnxR,KAAK6wR,eAAiBxhO,KAQlCqhO,EAAuBr1R,UAAU23P,KAAO,SAAUtpL,EAAOlpE,GACrD,IAAIyvJ,EAAOvmF,EAAMumF,KACbv5H,EAAS12B,KAAKutR,gBAAgBt9H,EAAMzvJ,IACtB,IAAdk2B,EAAO3pB,IACP2pB,EAAO3pB,EAAI,GAEf28D,EAAMqoL,SAASyd,gBAAgBxvQ,KAAKiP,SAAU,IAAI8rO,GAAOrkN,EAAO3pB,EAAG2pB,EAAO1pB,GAAI,IAAIguO,GAAMtkN,EAAO1gB,MAAO0gB,EAAO3gB,UAMjH26Q,EAAuBr1R,UAAUkyR,gBAAkB,SAAUt9H,EAAMzvJ,GAC/D,IAAIzB,EAASiB,KAAK02B,OAOlB,OANI12B,KAAK6wR,iBAAmBjmC,GAAkBlwD,KAC1C37L,EAASiB,KAAK6xR,mBAAmB5hI,EAAMzvJ,GAElCR,KAAK2wR,YAAchmC,GAAajwD,OACrC37L,EAASiB,KAAK8xR,cAAc7hI,EAAMzvJ,IAE/BzB,GAMX2xR,EAAuBr1R,UAAUw2R,mBAAqB,SAAU5hI,EAAMzvJ,GACrDR,KAAK02B,OAOlB,OANI12B,KAAK0G,OAASmkP,GAAanwD,KAClB16L,KAAK+xR,yBAAyB9hI,EAAMzvJ,GAGpCR,KAAKgyR,2BAA2B/hI,EAAMzvJ,IAQvDkwR,EAAuBr1R,UAAU02R,yBAA2B,SAAU9hI,EAAMzvJ,GACxE,IAAIk2B,EAAS12B,KAAK02B,OAEdu7P,EADahiI,EAAKyiH,QACQwG,gBAAgB14Q,EAAUyvJ,GAAM,GAC1DljJ,EAAI/M,KAAK+M,EACTC,EAAIhN,KAAKgN,EACb,OAAQhN,KAAK6wR,gBACT,KAAKjmC,GAAkBwmC,QACnBrkR,EAAI,EACJC,EAAI,EACJ,MACJ,KAAK49O,GAAkB2mC,UACnBxkR,GAAKklR,EAAaj8Q,MAAQhW,KAAKgW,OAAS,EACxChJ,EAAI,EACJ,MACJ,KAAK49O,GAAkB4mC,SACnBzkR,EAAIklR,EAAaj8Q,MAAQhW,KAAKgW,MAC9BhJ,EAAI,EACJ,MACJ,KAAK49O,GAAkBymC,WACnBtkR,EAAI,EACJC,GAAKilR,EAAal8Q,OAAS/V,KAAK+V,QAAU,EAC1C,MACJ,KAAK60O,GAAkBgnC,aACnB7kR,GAAKklR,EAAaj8Q,MAAQhW,KAAKgW,OAAS,EACxChJ,GAAKilR,EAAal8Q,OAAS/V,KAAK+V,QAAU,EAC1C,MACJ,KAAK60O,GAAkB6mC,YACnB1kR,EAAIklR,EAAaj8Q,MAAQhW,KAAKgW,MAC9BhJ,GAAKilR,EAAal8Q,OAAS/V,KAAK+V,QAAU,EAC1C,MACJ,KAAK60O,GAAkB0mC,WACnBvkR,EAAI,EACJC,EAAIilR,EAAal8Q,OAAS/V,KAAK+V,OAC/B,MACJ,KAAK60O,GAAkB+mC,aACnB5kR,GAAKklR,EAAaj8Q,MAAQhW,KAAKgW,OAAS,EACxChJ,EAAIilR,EAAal8Q,OAAS/V,KAAK+V,OAC/B,MACJ,KAAK60O,GAAkB8mC,YACnB3kR,EAAIklR,EAAaj8Q,MAAQhW,KAAKgW,MAC9BhJ,EAAIilR,EAAal8Q,OAAS/V,KAAK+V,OAKvC,OAFA2gB,EAAO3pB,EAAIA,EACX2pB,EAAO1pB,EAAIA,EACJ0pB,GAMXg6P,EAAuBr1R,UAAU22R,2BAA6B,SAAU/hI,EAAMzvJ,GAC1E,IAAIzB,EAASiB,KAAK02B,OACdg8O,EAAUziH,EAAKyiH,QACfuf,EAAevf,EAAQwG,gBAAgB14Q,EAAUyvJ,GAAM,GACvDljJ,EAAI/M,KAAK+M,EACTC,EAAIhN,KAAKgN,EACb,OAAQhN,KAAK6wR,gBACT,KAAKjmC,GAAkBwmC,QACfpxR,KAAK0G,OAASmkP,GAAairB,MAC3B/oQ,GAAKklR,EAAallR,EAClBC,EAAI,GAEChN,KAAK0G,OAASmkP,GAAaxN,MAChCtwO,GAAKklR,EAAallR,EAClBC,GAAKilR,EAAajlR,GAEtB,MACJ,KAAK49O,GAAkB2mC,UACnBxkR,GAAKklR,EAAaj8Q,MAAQhW,KAAKgW,OAAS,EACxChJ,GAAKilR,EAAajlR,EAClB,MACJ,KAAK49O,GAAkB4mC,SACfxxR,KAAK0G,OAASmkP,GAAa+mB,OAC3B7kQ,EAAIklR,EAAaj8Q,MAAQ08P,EAAQ+O,oBAAoBjhR,EAAUyvJ,GAAM,GAASjwJ,KAAKgW,MACnFhJ,EAAI,GAEChN,KAAK0G,OAASmkP,GAAaxN,MAChCtwO,EAAIklR,EAAaj8Q,MAAQ08P,EAAQ+O,oBAAoBjhR,EAAUyvJ,GAAM,GAASjwJ,KAAKgW,MACnFhJ,GAAKilR,EAAajlR,GAEtB,MACJ,KAAK49O,GAAkBymC,WACnBtkR,GAAKklR,EAAallR,EAClBC,GAAKilR,EAAal8Q,OAAS/V,KAAK+V,QAAU,EAC1C,MACJ,KAAK60O,GAAkBgnC,aACnB7kR,GAAKklR,EAAaj8Q,MAAQhW,KAAKgW,OAAS,EACxChJ,GAAKilR,EAAal8Q,OAAS/V,KAAK+V,QAAU,EAC1C,MACJ,KAAK60O,GAAkB6mC,YACnB1kR,EAAIklR,EAAaj8Q,MAAQ08P,EAAQ+O,oBAAoBjhR,EAAUyvJ,GAAM,GAASjwJ,KAAKgW,MACnFhJ,GAAKilR,EAAal8Q,OAAS/V,KAAK+V,QAAU,EAC1C,MACJ,KAAK60O,GAAkB0mC,WACftxR,KAAK0G,OAASmkP,GAAairB,MAC3B/oQ,GAAKklR,EAAallR,EAClBC,EAAIilR,EAAal8Q,OAAS/V,KAAK+V,QAE1B/V,KAAK0G,OAASmkP,GAAaknB,SAChChlQ,GAAKklR,EAAallR,EAClBC,EAAIilR,EAAal8Q,OAAS28P,EAAQgP,sBAAsBlhR,EAAUyvJ,GAAM,GAASjwJ,KAAK+V,QAE1F,MACJ,KAAK60O,GAAkB+mC,aACnB5kR,GAAKklR,EAAaj8Q,MAAQhW,KAAKgW,OAAS,EACxChJ,EAAIilR,EAAal8Q,OAAS28P,EAAQgP,sBAAsBlhR,EAAUyvJ,GAAM,GAASjwJ,KAAK+V,OACtF,MACJ,KAAK60O,GAAkB8mC,YACf1xR,KAAK0G,OAASmkP,GAAa+mB,OAC3B7kQ,EAAIklR,EAAaj8Q,MAAQ08P,EAAQ+O,oBAAoBjhR,EAAUyvJ,GAAM,GAASjwJ,KAAKgW,MACnFhJ,EAAIilR,EAAal8Q,OAAS/V,KAAK+V,QAE1B/V,KAAK0G,OAASmkP,GAAaknB,SAChChlQ,EAAIklR,EAAaj8Q,MAAQ08P,EAAQ+O,oBAAoBjhR,EAAUyvJ,GAAM,GAASjwJ,KAAKgW,MACnFhJ,EAAIilR,EAAal8Q,OAAS28P,EAAQgP,sBAAsBlhR,EAAUyvJ,GAAM,GAASjwJ,KAAK+V,QAMlG,OAFAhX,EAAOgO,EAAIA,EACXhO,EAAOiO,EAAIA,EACJjO,GAMX2xR,EAAuBr1R,UAAUy2R,cAAgB,SAAU7hI,EAAMzvJ,GAChDR,KAAK02B,OAOlB,OANI12B,KAAK0G,OAASmkP,GAAanwD,KAClB16L,KAAKkyR,oBAAoBjiI,EAAMzvJ,GAG/BR,KAAKmyR,sBAAsBliI,EAAMzvJ,IAQlDkwR,EAAuBr1R,UAAU62R,oBAAsB,SAAUjiI,EAAMzvJ,GACtDR,KAAK02B,OAAlB,IAEIu7P,EADUhiI,EAAKyiH,QACQwG,gBAAgB14Q,EAAUyvJ,GAAM,GACvDljJ,EAAI/M,KAAK+M,EACTC,EAAIhN,KAAKgN,EACTgJ,EAAQhW,KAAKgW,MACbD,EAAS/V,KAAK+V,OAClB,OAAQ/V,KAAK2wR,WACT,KAAKhmC,GAAamrB,KACd/oQ,EAAI,EACJC,EAAI,EACJgJ,EAAQhW,KAAKgW,MACbD,EAASk8Q,EAAal8Q,OACtB,MACJ,KAAK40O,GAAatN,IACdtwO,EAAI,EACJC,EAAI,EACJgJ,EAAQi8Q,EAAaj8Q,MACrBD,EAAS/V,KAAK+V,OACd,MACJ,KAAK40O,GAAainB,MACd7kQ,EAAIklR,EAAaj8Q,MAAQhW,KAAKgW,MAC9BhJ,EAAI,EACJgJ,EAAQhW,KAAKgW,MACbD,EAASk8Q,EAAal8Q,OACtB,MACJ,KAAK40O,GAAaonB,OACdhlQ,EAAI,EACJC,EAAIilR,EAAal8Q,OAAS/V,KAAK+V,OAC/BC,EAAQi8Q,EAAaj8Q,MACrBD,EAAS/V,KAAK+V,OACd,MACJ,KAAK40O,GAAa6iB,KACdzgQ,EAAI,EACJA,EAAI,EACJiJ,EAAQi8Q,EAAaj8Q,MACrBD,EAASk8Q,EAAal8Q,OAI9B,OADS,IAAIklO,GAAWluO,EAAGC,EAAGgJ,EAAOD,IAOzC26Q,EAAuBr1R,UAAU82R,sBAAwB,SAAUliI,EAAMzvJ,GACxDR,KAAK02B,OAAlB,IACIg8O,EAAUziH,EAAKyiH,QACfuf,EAAevf,EAAQwG,gBAAgB14Q,EAAUyvJ,GAAM,GACvDvjH,EAAagmO,EAAQnhN,aAAa66L,gBAClCr/O,EAAI/M,KAAK+M,EACTC,EAAIhN,KAAKgN,EACTgJ,EAAQhW,KAAKgW,MACbD,EAAS/V,KAAK+V,OAClB,OAAQ/V,KAAK2wR,WACT,KAAKhmC,GAAamrB,KACd/oQ,GAAKklR,EAAallR,EAClBC,EAAI,EACJgJ,EAAQhW,KAAKgW,MACbD,EAASk8Q,EAAal8Q,OACtB,MACJ,KAAK40O,GAAatN,IACdtwO,GAAKklR,EAAallR,EAClBC,GAAKilR,EAAajlR,EAClBgJ,EAAQ02B,EAAW12B,MACnBD,EAAS/V,KAAK+V,OACVk8Q,EAAal8Q,OAAS,IACtB/I,GAAKilR,EAAajlR,EAAI0/B,EAAW32B,QAErC,MACJ,KAAK40O,GAAainB,MACd7kQ,EAAIklR,EAAaj8Q,MAAQ08P,EAAQ+O,oBAAoBjhR,EAAUyvJ,GAAM,GAASjwJ,KAAKgW,MACnFhJ,EAAI,EACJgJ,EAAQhW,KAAKgW,MACbD,EAASk8Q,EAAal8Q,OACtB,MACJ,KAAK40O,GAAaonB,OACdhlQ,GAAKklR,EAAallR,EAClBC,EAAIilR,EAAal8Q,OAAS28P,EAAQgP,sBAAsBlhR,EAAUyvJ,GAAM,GAASjwJ,KAAK+V,OACtFC,EAAQ02B,EAAW12B,MACnBD,EAAS/V,KAAK+V,OACVk8Q,EAAal8Q,OAAS,IACtB/I,GAAK0/B,EAAW32B,QAEpB,MACJ,KAAK40O,GAAa6iB,KACdzgQ,EAAI,EACJA,EAAI,EACJiJ,EAAQi8Q,EAAaj8Q,MACrBD,EAASk8Q,EAAal8Q,OAI9B,OADS,IAAIklO,GAAWluO,EAAGC,EAAGgJ,EAAOD,IAGlC26Q,KC9mBP0B,GAA4B,WAM5B,SAASA,IACL,IAAIC,EAAuB,IAAIxjC,GAAO,IAAIhW,GAAS,EAAG,EAAG,IACzDw5C,EAAqBC,UAAYh6C,GAAa2W,MAC9C,IAAIsjC,EAAwB,IAAI1jC,GAAO,IAAIhW,GAAS,EAAG,EAAG,IAC1D05C,EAAsBD,UAAYh6C,GAAa2W,MAC/C,IAAIujC,EAAsB,IAAI3jC,GAAO,IAAIhW,GAAS,EAAG,EAAG,IACxD25C,EAAoBF,UAAYh6C,GAAa2W,MAC7C,IAAIwjC,EAAyB,IAAI5jC,GAAO,IAAIhW,GAAS,EAAG,EAAG,IAC3D45C,EAAuBH,UAAYh6C,GAAa2W,MAChDjvP,KAAK0yR,QAAUL,EACfryR,KAAK2yR,SAAWJ,EAChBvyR,KAAK4yR,OAASJ,EACdxyR,KAAK6yR,UAAYJ,EA4FrB,OA1FAn0R,OAAOuJ,eAAeuqR,EAAW/2R,UAAW,QAMxCqM,IAAK,WACD,OAAO1H,KAAK0yR,SAEhBrrR,IAAK,SAAUrK,GACXgD,KAAK0yR,QAAU11R,GAEnB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeuqR,EAAW/2R,UAAW,SAKxCqM,IAAK,WACD,OAAO1H,KAAK2yR,UAEhBtrR,IAAK,SAAUrK,GACXgD,KAAK2yR,SAAW31R,GAEpB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeuqR,EAAW/2R,UAAW,OAKxCqM,IAAK,WACD,OAAO1H,KAAK4yR,QAEhBvrR,IAAK,SAAUrK,GACXgD,KAAK4yR,OAAS51R,GAElB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeuqR,EAAW/2R,UAAW,UAKxCqM,IAAK,WACD,OAAO1H,KAAK6yR,WAEhBxrR,IAAK,SAAUrK,GACXgD,KAAK6yR,UAAY71R,GAErB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeuqR,EAAW/2R,UAAW,OAKxCgM,IAAK,SAAUrK,GACXgD,KAAK0yR,QAAU1yR,KAAK2yR,SAAW3yR,KAAK4yR,OAAS5yR,KAAK6yR,UAAY71R,GAElE2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeuqR,EAAW/2R,UAAW,SAKxCqM,IAAK,WACD,OAAS1H,KAAK0yR,UAAY1yR,KAAK2yR,UAAc3yR,KAAK0yR,UAAY1yR,KAAK4yR,QAAY5yR,KAAK0yR,UAAY1yR,KAAK6yR,WAEzGlrR,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeuqR,EAAY,WAK9B1qR,IAAK,WACD,OAAO,IAAI0qR,GAEfzqR,YAAY,EACZC,cAAc,IAEXwqR,KAGPU,GAA6B,WAC7B,SAASA,EAAYtmR,EAAMC,EAAOC,EAAKC,QACf,IAATH,GAEPxM,KAAK+yR,QAAU/yR,KAAKgzR,SAAW,KAE/BhzR,KAAK2M,OAAS3M,KAAKizR,OAAS,KAG5BjzR,KAAK+yR,QAAUvmR,EACfxM,KAAKgzR,SAAWvmR,EAChBzM,KAAKizR,OAASvmR,EACd1M,KAAKkzR,UAAYvmR,GAuEzB,OApEArO,OAAOuJ,eAAeirR,EAAYz3R,UAAW,QAMzCqM,IAAK,WACD,OAAO1H,KAAK+yR,SAEhB1rR,IAAK,SAAUrK,GACXgD,KAAK+yR,QAAU/1R,GAEnB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeirR,EAAYz3R,UAAW,SAKzCqM,IAAK,WACD,OAAO1H,KAAKgzR,UAEhB3rR,IAAK,SAAUrK,GACXgD,KAAKgzR,SAAWh2R,GAEpB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeirR,EAAYz3R,UAAW,OAKzCqM,IAAK,WACD,OAAO1H,KAAKizR,QAEhB5rR,IAAK,SAAUrK,GACXgD,KAAKizR,OAASj2R,GAElB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeirR,EAAYz3R,UAAW,UAKzCqM,IAAK,WACD,OAAO1H,KAAKkzR,WAEhB7rR,IAAK,SAAUrK,GACXgD,KAAKkzR,UAAYl2R,GAErB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeirR,EAAYz3R,UAAW,OAKzCgM,IAAK,SAAUrK,GACXgD,KAAK+yR,QAAU/yR,KAAKgzR,SAAWhzR,KAAKizR,OAASjzR,KAAKkzR,UAAYl2R,GAElE2K,YAAY,EACZC,cAAc,IAEXkrR,MHxMX,SAAWpD,GAKPA,EAAsBA,EAA+B,QAAI,GAAK,UAK9DA,EAAsBA,EAA8B,OAAI,GAAK,SAVjE,CAWGA,KAA0BA,QIhB7B,IAyXWyD,GAzXP7oM,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAexCyoM,GAAkC,WAClC,SAASA,KA2DT,OAzDA90R,OAAOuJ,eAAeurR,EAAiB/3R,UAAW,mBAM9CqM,IAAK,WACD,OAAO1H,KAAKqzR,qBAEhBhsR,IAAK,SAAUrK,GACXgD,KAAKqzR,oBAAsBr2R,GAE/B2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeurR,EAAiB/3R,UAAW,aAK9CqM,IAAK,WACD,OAAO1H,KAAKszR,eAEhBjsR,IAAK,SAAUrK,GACXgD,KAAKszR,cAAgBt2R,GAEzB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeurR,EAAiB/3R,UAAW,WAK9CqM,IAAK,WACD,OAAO1H,KAAKuzR,aAEhBlsR,IAAK,SAAUrK,GACXgD,KAAKuzR,YAAcv2R,GAEvB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeurR,EAAiB/3R,UAAW,QAK9CqM,IAAK,WACD,OAAO1H,KAAKwzR,UAEhBnsR,IAAK,SAAUrK,GACXgD,KAAKwzR,SAAWx2R,GAEpB2K,YAAY,EACZC,cAAc,IAEXwrR,KAMPK,GAA8B,SAAUtoM,GAOxC,SAASsoM,IACL,IAAI1zR,EAAQorF,EAAO7pF,KAAKtB,OAASA,KAIjC,OAHAD,EAAM2zR,uBAAyBhE,GAAsBiE,QACrD5zR,EAAM6zR,0BAA2B,EACjC7zR,EAAM8zR,2BAA6BV,GAA0BW,SACtD/zR,EAqFX,OAhGAuqF,GAAUmpM,EAActoM,GAaxB7sF,OAAOuJ,eAAe4rR,EAAap4R,UAAW,eAM1CqM,IAAK,WAID,YAHoC,IAAzB1H,KAAK+zR,kBACZ/zR,KAAK+zR,gBAAkB,GAEpB/zR,KAAK+zR,iBAEhB1sR,IAAK,SAAUrK,GACXgD,KAAK+zR,gBAAkB/2R,GAE3B2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4rR,EAAap4R,UAAW,0BAK1CqM,IAAK,WACD,OAAO1H,KAAK6zR,4BAEhBxsR,IAAK,SAAUrK,GACXgD,KAAK6zR,2BAA6B72R,GAEtC2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4rR,EAAap4R,UAAW,2BAK1CqM,IAAK,WACD,OAAO1H,KAAK4zR,0BAEhBvsR,IAAK,SAAUrK,GACXgD,KAAK4zR,yBAA2B52R,GAEpC2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4rR,EAAap4R,UAAW,eAK1CqM,IAAK,WAID,YAHoC,IAAzB1H,KAAKg0R,kBACZh0R,KAAKg0R,gBAAkB,IAAIlB,IAExB9yR,KAAKg0R,iBAEhB3sR,IAAK,SAAUrK,QACyB,IAAzBgD,KAAKg0R,iBACZh0R,KAAKg0R,gBAAkB,IAAIlB,GAC3B9yR,KAAKg0R,gBAAkBh3R,GAGvBgD,KAAKg0R,gBAAkBh3R,GAG/B2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4rR,EAAap4R,UAAW,sBAK1CqM,IAAK,WACD,OAAO1H,KAAK0zR,wBAEhBrsR,IAAK,SAAUrK,GACXgD,KAAK0zR,uBAAyB12R,GAElC2K,YAAY,EACZC,cAAc,IAEX6rR,GACTL,IAKEa,GAAkC,SAAU9oM,GAM5C,SAAS8oM,IACL,IAAIl0R,EAAQorF,EAAO7pF,KAAKtB,OAASA,KAMjC,OADAD,EAAMm0R,gBAAkB9B,GAAW+B,QAC5Bp0R,EAgDX,OA5DAuqF,GAAU2pM,EAAkB9oM,GAc5B7sF,OAAOuJ,eAAeosR,EAAiB54R,UAAW,gBAM9CqM,IAAK,WACD,OAAO1H,KAAKg8B,QAEhB30B,IAAK,SAAUrK,GACXgD,KAAKg8B,OAASh/B,GAElB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeosR,EAAiB54R,UAAW,WAK9CqM,IAAK,WACD,OAAO1H,KAAKk0R,iBAEhB7sR,IAAK,SAAUrK,GACXgD,KAAKk0R,gBAAkBl3R,GAE3B2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeosR,EAAiB54R,UAAW,eAK9CqM,IAAK,WACD,OAAO1H,KAAKg0R,iBAEhB3sR,IAAK,SAAUrK,GACiB,MAAxBgD,KAAKg0R,sBAA2D,IAAzBh0R,KAAKg0R,kBAC5Ch0R,KAAKg0R,gBAAkB,IAAIlB,IAE/B9yR,KAAKg0R,gBAAkBh3R,GAE3B2K,YAAY,EACZC,cAAc,IAEXqsR,GACTb,IAKEgB,GAAiC,WAMjC,SAASA,KAiHT,OA9GA91R,OAAOuJ,eAAeusR,EAAgB/4R,UAAW,mBAU7CqM,IAAK,WACD,OAAO1H,KAAKq0R,wBAEhB1sR,YAAY,EACZC,cAAc,IAElBwsR,EAAgB/4R,UAAUi5R,mBAAqB,SAAUt3R,GAErD,GADAgD,KAAKq0R,uBAAyBr3R,OACH,IAAhBgD,KAAKM,OACZ,IAAK,IAAInE,EAAI,EAAGA,EAAI6D,KAAKM,OAAOwhE,MAAMhjD,MAAO3iB,IACzC6D,KAAKM,OAAOwhE,MAAMyyN,QAAQp4R,GAAGuI,MAAM8vR,gBAAkBx3R,GAIjEsB,OAAOuJ,eAAeusR,EAAgB/4R,UAAW,aAK7CqM,IAAK,WACD,OAAO1H,KAAKy0R,kBAEhB9sR,YAAY,EACZC,cAAc,IAElBwsR,EAAgB/4R,UAAUq5R,aAAe,SAAU13R,GAE/C,GADAgD,KAAKy0R,iBAAmBz3R,OACG,IAAhBgD,KAAKM,OACZ,IAAK,IAAInE,EAAI,EAAGA,EAAI6D,KAAKM,OAAOwhE,MAAMhjD,MAAO3iB,IACzC6D,KAAKM,OAAOwhE,MAAMyyN,QAAQp4R,GAAGuI,MAAMykR,UAAYnsR,GAI3DsB,OAAOuJ,eAAeusR,EAAgB/4R,UAAW,WAK7CqM,IAAK,WACD,OAAO1H,KAAK20R,gBAEhBhtR,YAAY,EACZC,cAAc,IAElBwsR,EAAgB/4R,UAAUu5R,WAAa,SAAU53R,GAE7C,GADAgD,KAAK20R,eAAiB33R,OACK,IAAhBgD,KAAKM,OACZ,IAAK,IAAInE,EAAI,EAAGA,EAAI6D,KAAKM,OAAOwhE,MAAMhjD,MAAO3iB,IACzC6D,KAAKM,OAAOwhE,MAAMyyN,QAAQp4R,GAAGuI,MAAMmwR,QAAU73R,GAIzDsB,OAAOuJ,eAAeusR,EAAgB/4R,UAAW,QAK7CqM,IAAK,WACD,OAAO1H,KAAK80R,aAEhBntR,YAAY,EACZC,cAAc,IAElBwsR,EAAgB/4R,UAAUsuO,QAAU,SAAU3sO,GAE1C,GADAgD,KAAK80R,YAAc93R,OACQ,IAAhBgD,KAAKM,OACZ,IAAK,IAAInE,EAAI,EAAGA,EAAI6D,KAAKM,OAAOwhE,MAAMhjD,MAAO3iB,IACzC6D,KAAKM,OAAOwhE,MAAMyyN,QAAQp4R,GAAGuI,MAAMgoB,KAAO1vB,GAItDsB,OAAOuJ,eAAeusR,EAAgB/4R,UAAW,UAK7CqM,IAAK,WAID,YAHkC,IAAvB1H,KAAK+0R,eACZ/0R,KAAKg1R,UAAU,IAAI5C,IAEhBpyR,KAAK+0R,eAEhBptR,YAAY,EACZC,cAAc,IAElBwsR,EAAgB/4R,UAAU25R,UAAY,SAAUh4R,GAE5C,GADAgD,KAAK+0R,cAAgB/3R,OACM,IAAhBgD,KAAKM,OACZ,IAAK,IAAInE,EAAI,EAAGA,EAAI6D,KAAKM,OAAOwhE,MAAMhjD,MAAO3iB,IACzC6D,KAAKM,OAAOwhE,MAAMyyN,QAAQp4R,GAAGuI,MAAMuwR,QAAUj4R,GAQzDo3R,EAAgB/4R,UAAU65R,UAAY,SAAU50R,GAC5CN,KAAKM,OAASA,GAEX8zR,MAQX,SAAWjB,GAKPA,EAA0BA,EAAoC,SAAI,GAAK,WAKvEA,EAA0BA,EAAoC,SAAI,GAAK,WAV3E,CAWGA,KAA8BA,QCtXjC,I7MZWgC,G6MYPC,GAA6B,WAC7B,SAASA,EAAY10N,GAMjB1gE,KAAKq1R,UAAY,EAMjBr1R,KAAKs1R,WAAa,EAMlBt1R,KAAKu1R,OAAQ,EAMbv1R,KAAKw1R,uBAAyB,OACX,IAAR90N,GACP1gE,KAAKy1R,YAAc,EACnBz1R,KAAK01R,QAAU,IAGf11R,KAAKpC,cACLoC,KAAK21R,QAAUj1N,GAyjBvB,OAtjBApiE,OAAOuJ,eAAeutR,EAAY/5R,UAAW,uBAEzCqM,IAAK,WACD,OAAO1H,KAAK41R,6BAEhBvuR,IAAK,SAAUrK,GACXgD,KAAK41R,4BAA8B54R,GAEvC2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeutR,EAAY/5R,UAAW,sBACzCqM,IAAK,WACD,OAAO1H,KAAK61R,4BAEhBxuR,IAAK,SAAUrK,GACXgD,KAAK61R,2BAA6B74R,GAEtC2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeutR,EAAY/5R,UAAW,oBACzCqM,IAAK,WACD,OAAO1H,KAAK81R,0BAEhBzuR,IAAK,SAAUrK,GACXgD,KAAK81R,yBAA2B94R,GAEpC2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeutR,EAAY/5R,UAAW,mBACzCqM,IAAK,WACD,OAAO1H,KAAK+1R,yBAEhB1uR,IAAK,SAAUrK,GACXgD,KAAK+1R,wBAA0B/4R,GAEnC2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeutR,EAAY/5R,UAAW,mBAKzCqM,IAAK,WACD,OAAO1H,KAAKg2R,WAEhB3uR,IAAK,SAAUrK,GACXgD,KAAKg2R,UAAYh5R,GAErB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeutR,EAAY/5R,UAAW,gBAKzCqM,IAAK,WAID,OAHmB,MAAf1H,KAAKg8B,SACLh8B,KAAKg8B,OAAS,IAAIghN,IAEfh9O,KAAKg8B,QAEhB30B,IAAK,SAAUrK,GACXgD,KAAKg8B,OAASh/B,GAElB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeutR,EAAY/5R,UAAW,OAKzCqM,IAAK,WACD,OAAO1H,KAAK21R,SAEhBtuR,IAAK,SAAUrK,GACXgD,KAAK21R,QAAU34R,GAEnB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeutR,EAAY/5R,UAAW,SAKzCqM,IAAK,WACD,OAAO1H,KAAKi2R,aAEhB5uR,IAAK,SAAUrK,GACXgD,KAAKi2R,YAAcj5R,GAEvB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeutR,EAAY/5R,UAAW,WAKzCqM,IAAK,WACD,OAAO1H,KAAKy1R,aAEhBpuR,IAAK,SAAUrK,GACX,GAAIA,EAAQ,EACR,MAAM,IAAI4D,MAAM,kFAGhBZ,KAAKy1R,YAAcz4R,EACnBgD,KAAK0gE,IAAIw1N,eAAgB,GAGjCvuR,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeutR,EAAY/5R,UAAW,SAKzCqM,IAAK,WAID,OAHsB,MAAlB1H,KAAKm2R,YACLn2R,KAAKm2R,UAAY,IAAIlC,IAElBj0R,KAAKm2R,WAEhB9uR,IAAK,SAAUrK,GACXgD,KAAKm2R,UAAYn5R,GAErB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeutR,EAAY/5R,UAAW,UAKzCqM,IAAK,WAID,OAHwB,IAApB1H,KAAKs1R,aACLt1R,KAAKs1R,WAAat1R,KAAKo2R,iBAEpBp2R,KAAKs1R,YAEhBjuR,IAAK,SAAUrK,GACXgD,KAAKs1R,WAAat4R,GAEtB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeutR,EAAY/5R,UAAW,cAKzCqM,IAAK,WACD,OAAO1H,KAAK01R,SAEhBruR,IAAK,SAAUrK,GACX,GAAIA,EAAQ,EACR,MAAM4D,MAAM,8DAGZZ,KAAK01R,QAAU14R,EACfgD,KAAK0gE,IAAI21N,kBAAmB,GAGpC1uR,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeutR,EAAY/5R,UAAW,SAKzCqM,IAAK,WAID,OAHuB,IAAnB1H,KAAKq1R,WAAmBr1R,KAAK0gE,IAAIyB,KAAKm0N,cACtCt2R,KAAKq1R,UAAYr1R,KAAKu2R,gBAEnBv2R,KAAKq1R,WAEhBhuR,IAAK,SAAUrK,GACXgD,KAAKq1R,UAAYr4R,GAErB2K,YAAY,EACZC,cAAc,IAOlBwtR,EAAY/5R,UAAUk7R,aAAe,WAGjC,IAAIvgR,EAAQ,EACRwgR,EAAW,IAAI13C,GACnB,GAAgC,iBAArB9+O,KAAKi2R,YAA0B,CAGtCjgR,GADUwgR,EAAS3lO,OAAO7wD,KAAKi2R,YAAaj2R,KAAKy2R,cAAez2R,KAAK+yP,aAAc,IAAI/X,GAAM,EAAG,IAAI,EAAO,IAAIA,GAAM,EAAG,IAC3GtuM,WAAW12B,MACxBA,GAA4E,GAAlEhW,KAAK0E,MAAMuwR,QAAQzoR,KAAKwJ,MAAQhW,KAAK0E,MAAMuwR,QAAQxoR,MAAMuJ,YAElE,GAAIhW,KAAKi2R,uBAAuBh/B,IAAYj3P,KAAKi2R,uBAAuBp+B,GACzE7hP,GAAShW,KAAKi2R,YAAYjgR,WAEzB,GAAIhW,KAAKi2R,uBAAuB/J,GAAgB,CACjD,IAAIwK,EAAU12R,KAAKi2R,YAGnBjgR,GAFawgR,EAAS3lO,OAAO6lO,EAAQjqQ,KAAMiqQ,EAAQhqQ,KAAMgqQ,EAAQ3jC,aAAc,IAAI/X,GAAM,EAAG,IAAI,EAAO,IAAIA,GAAM,EAAG,IAEpGtuM,WAAW12B,MAC3BA,GAA4E,GAAlEhW,KAAK0E,MAAMuwR,QAAQzoR,KAAKwJ,MAAQhW,KAAK0E,MAAMuwR,QAAQxoR,MAAMuJ,OAIvE,OAFAA,GAAUhW,KAAK0gE,IAAIyB,KAAKz9D,MAAMiyR,YAAYnqR,KAAOxM,KAAK0gE,IAAIyB,KAAKz9D,MAAMiyR,YAAYlqR,MACjFuJ,GAAShW,KAAK0gE,IAAIyB,KAAKz9D,MAAMkyR,aAOjCxB,EAAY/5R,UAAUw7R,mBAAqB,SAAU9kC,EAAUr7N,GAC3D,IAAI89P,EAAkBx0R,KAAK82R,qBACJ,MAAnBtC,GACAziC,EAASpuN,cAAc6wP,EAAiB99P,EAAO3pB,EAAG2pB,EAAO1pB,EAAG0pB,EAAO1gB,MAAO0gB,EAAO3gB,SAQzFq/Q,EAAY/5R,UAAU07R,wBAA0B,SAAUrgQ,GAEtD,IAAIsgQ,EAAe,IAAI/7C,GAAWvkN,EAAO3pB,EAAG2pB,EAAO1pB,EAAG0pB,EAAO1gB,MAAO0gB,EAAO3gB,QAuB3E,YAtBsC,IAA3B/V,KAAK0E,MAAMiyR,aAAyD,MAA1B32R,KAAK0E,MAAMiyR,aAC5DK,EAAajqR,GAAK/M,KAAK21R,QAAQxzN,KAAKz9D,MAAMiyR,YAAYnqR,KAAOxM,KAAKm2R,UAAUlB,QAAQzoR,KAAKwJ,MACzFghR,EAAahqR,GAAKhN,KAAK21R,QAAQxzN,KAAKz9D,MAAMiyR,YAAYjqR,IAAM1M,KAAKm2R,UAAUlB,QAAQvoR,IAAIsJ,MACvFghR,EAAahhR,OAAUhW,KAAK21R,QAAQxzN,KAAKz9D,MAAMiyR,YAAYlqR,MAAQzM,KAAK21R,QAAQxzN,KAAKz9D,MAAMiyR,YAAYnqR,KACvGwqR,EAAahhR,OAAUhW,KAAKm2R,UAAUlB,QAAQzoR,KAAKwJ,MAAQhW,KAAKm2R,UAAUlB,QAAQxoR,MAAMuJ,MACxFghR,EAAajhR,QAAW/V,KAAK21R,QAAQxzN,KAAKz9D,MAAMiyR,YAAYhqR,OAAS3M,KAAK21R,QAAQxzN,KAAKz9D,MAAMiyR,YAAYjqR,IACzGsqR,EAAajhR,QAAW/V,KAAKm2R,UAAUlB,QAAQvoR,IAAIsJ,MAAQhW,KAAKm2R,UAAUlB,QAAQtoR,OAAOqJ,MACpE,IAAjBhW,KAAKi3R,UACLD,EAAahhR,OAAUhW,KAAK0E,MAAMuwR,QAAQzoR,KAAU,SAIxDwqR,EAAajqR,GAAK/M,KAAK0E,MAAMiyR,YAAYnqR,KAAOxM,KAAKm2R,UAAUlB,QAAQzoR,KAAKwJ,MAC5EghR,EAAahqR,GAAKhN,KAAK0E,MAAMiyR,YAAYjqR,IAAM1M,KAAKm2R,UAAUlB,QAAQvoR,IAAIsJ,MAC1EghR,EAAahhR,OAAUhW,KAAK0E,MAAMiyR,YAAYlqR,MAAQzM,KAAK0E,MAAMiyR,YAAYnqR,KAC7EwqR,EAAahhR,OAAUhW,KAAKm2R,UAAUlB,QAAQzoR,KAAKwJ,MAAQhW,KAAKm2R,UAAUlB,QAAQxoR,MAAMuJ,MACxFghR,EAAajhR,QAAW/V,KAAK0E,MAAMiyR,YAAYhqR,OAAS3M,KAAK0E,MAAMiyR,YAAYjqR,IAC/EsqR,EAAajhR,QAAW/V,KAAKm2R,UAAUlB,QAAQvoR,IAAIsJ,MAAQhW,KAAKm2R,UAAUlB,QAAQtoR,OAAOqJ,MACpE,IAAjBhW,KAAKi3R,UACLD,EAAahhR,OAAUhW,KAAK0E,MAAMuwR,QAAQzoR,KAAU,QAGrDwqR,GAMX5B,EAAY/5R,UAAU23P,KAAO,SAAUjB,EAAUr7N,EAAQwgQ,GACrD,IACIn4R,EAAS,KACb,GAAIiB,KAAK41R,6BAA+B51R,KAAK61R,2BAA4B,CACrE,IAAI71R,KAAK41R,8BAA+B51R,KAAK0gE,IAAIyB,KAAKz9D,MAAMyyR,wBAMxD,OAAOp4R,EALP,GAAKiB,KAAK0gE,IAAI02N,iBAAmB,GAAMp3R,KAAK0gE,IAAIoB,MAAMvjE,QAAQyB,OAASA,KAAK0gE,IAAI02N,iBAAmB,GAAqC,GAA7Bp3R,KAAK0gE,IAAI02N,kBAAyBp3R,KAAK41R,4BAC9I,OAAO72R,EAQnB23B,EAAS12B,KAAKq3R,sBAAsB3gQ,EAAQq7N,GAC5C,IAAI8iC,EAAU70R,KAAKs3R,aACfnO,EAAYnpR,KAAKu3R,oBACE,IAAZ1C,QAAgD,IAAd1L,IACzCA,EAAY,IAAIztC,GAAc,IAAI7C,GAAS,EAAG,EAAG,KAErD,IAAInsN,EAAO1sB,KAAKy2R,cACZe,EAAYx3R,KAAKy3R,kBACjBC,EAAkB13R,KAAK+2R,wBAAwBrgQ,GAEnD,GADA12B,KAAK62R,mBAAmB9kC,EAAUr7N,GACF,iBAArB12B,KAAKi2R,aAAsD,iBAAnBj2R,KAAKg2R,UAAwB,CAC5E,IAAIjoQ,OAAO,EACXA,EAA0B,KAAnB/tB,KAAKg2R,UAAmBh2R,KAAKg2R,UAAYh2R,KAAKi2R,YACrDlkC,EAAS+d,WAAW/hP,EAAMrB,EAAMmoQ,EAAS1L,EAAWuO,EAAgB3qR,EAAG2qR,EAAgB1qR,EAAG0qR,EAAgB1hR,MAAO0hR,EAAgB3hR,OAAQyhR,GACzIz4R,EAASgzP,EAAS26B,wBAEjB,GAAI1sR,KAAKi2R,uBAAuBh/B,IAAYj3P,KAAKi2R,uBAAuBp+B,GAAW,CACpF,IAAI8/B,OAAc,EAEdA,EADA33R,KAAKi2R,YAAYjgR,OAAS0hR,EAAgB1hR,MAC5B,IAAIilO,GAAWy8C,EAAgB3qR,EAAG2qR,EAAgB1qR,EAAGhN,KAAKi2R,YAAYjgR,MAAO0hR,EAAgB3hR,QAG7F2hR,EAElB3lC,EAASriK,UAAU1vF,KAAKi2R,YAAa0B,EAAY5qR,EAAG4qR,EAAY3qR,EAAG2qR,EAAY3hR,MAAO2hR,EAAY5hR,aAE7F/V,KAAKi2R,uBAAuB/J,IACjClsR,KAAKi2R,YAAYjjC,KAAKjB,EAASuB,YAAaokC,GAKhD,OAH0B,MAAtB13R,KAAK0E,MAAMuwR,SACXj1R,KAAK43R,gBAAgB7lC,EAAUr7N,GAE5B33B,GAOXq2R,EAAY/5R,UAAUu8R,gBAAkB,SAAU7lC,EAAUr7N,GACpD12B,KAAK0gE,IAAIyB,KAAKz9D,MAAMmzR,qBAAuBnI,GAAsBoI,SACjEphQ,EAAO3pB,GAAK/M,KAAK0E,MAAMuwR,QAAQzoR,KAAKwJ,MACpC0gB,EAAO1pB,GAAKhN,KAAK0E,MAAMuwR,QAAQvoR,IAAIsJ,MACnC0gB,EAAO1gB,OAAShW,KAAK0E,MAAMuwR,QAAQxoR,MAAMuJ,MACzC0gB,EAAO3gB,QAAU/V,KAAK0E,MAAMuwR,QAAQtoR,OAAOqJ,OAE/C,IAAI+hR,EAAK,IAAIh9C,GAAOrkN,EAAO3pB,EAAG2pB,EAAO1pB,EAAI0pB,EAAO3gB,QAC5CiiR,EAAK,IAAIj9C,GAAOrkN,EAAO3pB,EAAG2pB,EAAO1pB,GACjCkjP,EAAMlwP,KAAKm2R,UAAUlB,QAAQzoR,KAC7BxM,KAAKm2R,UAAUlB,QAAQzoR,KAAK8lR,YAAch6C,GAAa2W,QACvDiB,EAAID,QAAU5X,GAAW4/C,QAG7BlmC,EAASvkK,SAAS0iK,EAAK6nC,EAAIC,GAC3BD,EAAK,IAAIh9C,GAAOrkN,EAAO3pB,EAAI2pB,EAAO1gB,MAAO0gB,EAAO1pB,GAChDgrR,EAAK,IAAIj9C,GAAOrkN,EAAO3pB,EAAI2pB,EAAO1gB,MAAO0gB,EAAO1pB,EAAI0pB,EAAO3gB,QAC3Dm6O,EAAMlwP,KAAKm2R,UAAUlB,QAAQxoR,MACxBiqB,EAAO3pB,EAAI2pB,EAAO1gB,MAAU+7O,EAAS5S,WAAWnpO,MAASk6O,EAAIl6O,MAAQ,IACtE+hR,EAAK,IAAIh9C,GAAOgX,EAAS5S,WAAWnpO,MAASk6O,EAAIl6O,MAAQ,EAAI0gB,EAAO1pB,GACpEgrR,EAAK,IAAIj9C,GAAOgX,EAAS5S,WAAWnpO,MAASk6O,EAAIl6O,MAAQ,EAAI0gB,EAAO1pB,EAAI0pB,EAAO3gB,SAE/E/V,KAAKm2R,UAAUlB,QAAQxoR,MAAM6lR,YAAch6C,GAAa2W,QACxDiB,EAAID,QAAU5X,GAAW4/C,QAE7BlmC,EAASvkK,SAAS0iK,EAAK6nC,EAAIC,GAC3BD,EAAK,IAAIh9C,GAAOrkN,EAAO3pB,EAAG2pB,EAAO1pB,GACjCgrR,EAAK,IAAIj9C,GAAOrkN,EAAO3pB,EAAI2pB,EAAO1gB,MAAO0gB,EAAO1pB,GAChDkjP,EAAMlwP,KAAKm2R,UAAUlB,QAAQvoR,IACzB1M,KAAKm2R,UAAUlB,QAAQvoR,IAAI4lR,YAAch6C,GAAa2W,QACtDiB,EAAID,QAAU5X,GAAW4/C,QAE7BlmC,EAASvkK,SAAS0iK,EAAK6nC,EAAIC,GAC3BD,EAAK,IAAIh9C,GAAOrkN,EAAO3pB,EAAI2pB,EAAO1gB,MAAO0gB,EAAO1pB,EAAI0pB,EAAO3gB,QAC3DiiR,EAAK,IAAIj9C,GAAOrkN,EAAO3pB,EAAG2pB,EAAO1pB,EAAI0pB,EAAO3gB,QAC5Cm6O,EAAMlwP,KAAKm2R,UAAUlB,QAAQtoR,OAKzB3M,KAAKm2R,UAAUlB,QAAQtoR,OAAO2lR,YAAch6C,GAAa2W,QACzDiB,EAAID,QAAU5X,GAAW4/C,QAE7BlmC,EAASvkK,SAAS0iK,EAAK6nC,EAAIC,IAO/B5C,EAAY/5R,UAAUg8R,sBAAwB,SAAU3gQ,EAAQmG,GAC5D,IAAI/Q,GAAW,EACX8qQ,EAAc52R,KAAK0gE,IAAIyB,KAAKz9D,MAAMkyR,YAClCA,EAAc,IACdlgQ,EAAS,IAAIukN,GAAWvkN,EAAO3pB,EAAI6pR,EAAalgQ,EAAO1pB,EAAI4pR,EAAalgQ,EAAO1gB,MAAQ4gR,EAAalgQ,EAAO3gB,OAAS6gR,IAExH,IAAIsB,EAAkBl4R,KAAK0gE,IAAIoB,MAAMvjE,QAAQyB,MAC7C,GAAIA,KAAKm4R,WAAa,EAAG,CAGrB,IAAK,IAFDx1N,EAAO3iE,KAAKm4R,WACZ/2M,EAAa,EACRjlF,EAAI+7R,EAAiB/7R,EAAI+7R,EAAkBv1N,EAAMxmE,IAAK,CAC3D,GAAI6D,KAAK0gE,IAAIyB,KAAKz9D,MAAMyyR,wBAAyB,CAC7C,IACIiB,EAAYp4R,KAAK0gE,IAAIyB,KAAKr1C,KAAK9W,MAAQ6mB,EAAEsiN,WAAWnpO,MAAQhW,KAAK0gE,IAAIyB,KAAKr1C,KAAK9W,MAAQ6mB,EAAEsiN,WAAWnpO,MAOxG,IANIhW,KAAK0gE,IAAIyB,KAAKr1C,KAAK9W,MAAQ6mB,EAAEsiN,WAAWnpO,MAChC0gB,EAAO3pB,EAAIq0E,EAAaphF,KAAK0gE,IAAIyB,KAAKpE,QAAQs6N,UAAUl8R,GAAG6Z,MAG3DorE,EAAaphF,KAAK0gE,IAAIyB,KAAKpE,QAAQs6N,UAAUl8R,GAAG6Z,OAEhDoiR,EACR,MAGRh3M,GAAcphF,KAAK0gE,IAAIyB,KAAKpE,QAAQs6N,UAAUl8R,GAAG6Z,MAErDorE,GAAcphF,KAAK0gE,IAAIyB,KAAKz9D,MAAMkyR,YAClClgQ,EAAO1gB,MAAQorE,EAEnB,GAAIphF,KAAKi3R,QAAU,GAAKj3R,KAAK0gE,IAAIw1N,cAAe,CACxCvzN,EAAO3iE,KAAKi3R,QAAhB,IACIqB,EAAkBt4R,KAAK0gE,IAAIyB,KAAKo2N,KAAKC,cAAcj6R,QAAQyB,KAAK0gE,MAC5C,GAApB43N,IAEwB,IADxBA,EAAkBt4R,KAAK0gE,IAAIyB,KAAK0iB,QAAQtmF,QAAQyB,KAAK0gE,QAEjD50C,GAAW,GAKd,IAFDw5K,EAAc,EAClB,IACSnpM,EAAIm8R,EAAiBn8R,EAAIm8R,EAAkB31N,EAAMxmE,IAAK,CAC3DmpM,GAAgBx5K,EAAW9rB,KAAK0gE,IAAIyB,KAAK0iB,QAAQ4zM,UAAUt8R,GAAG4Z,OAAS/V,KAAK0gE,IAAIyB,KAAKo2N,KAAKG,OAAOv8R,GAAG4Z,OACpG,IAAI2qD,EAAM1gE,KAAK0gE,IAAIyB,KAAKo2N,KAAKG,OAAOv8R,GACrB6D,KAAK0gE,IAAIyB,KAAKo2N,KAAKC,cAAcj6R,QAAQmiE,GAE5C1gE,KAAK0gE,IAAIoB,MAAMvjE,QAAQyB,MACvCslM,GAAetlM,KAAK0gE,IAAIyB,KAAKz9D,MAAMkyR,YAMnClgQ,EAAO3gB,OAASuvL,EAEXtlM,KAAK0gE,IAAIi4N,mBACVjiQ,EAAO3gB,OAASuvL,GAGxB,OAAO5uK,GAOX0+P,EAAY/5R,UAAUo7R,YAAc,WAChC,YAA+B,IAApBz2R,KAAK0E,MAAMgoB,MAA2C,MAAnB1sB,KAAK0E,MAAMgoB,KAC9C1sB,KAAK0E,MAAMgoB,UAEkB,IAAxB1sB,KAAK0gE,IAAIh8D,MAAMgoB,MAA+C,MAAvB1sB,KAAK0gE,IAAIh8D,MAAMgoB,KAC3D1sB,KAAK0gE,IAAIh8D,MAAMgoB,UAEmB,IAA7B1sB,KAAK0gE,IAAIyB,KAAKz9D,MAAMgoB,MAAoD,MAA5B1sB,KAAK0gE,IAAIyB,KAAKz9D,MAAMgoB,KACrE1sB,KAAK0gE,IAAIyB,KAAKz9D,MAAMgoB,KAGpBu4N,GAAYmO,aAO3BgiC,EAAY/5R,UAAUk8R,aAAe,WACjC,YAAoC,IAAzBv3R,KAAK0E,MAAMykR,WAAqD,MAAxBnpR,KAAK0E,MAAMykR,UACnDnpR,KAAK0E,MAAMykR,eAEuB,IAA7BnpR,KAAK0gE,IAAIh8D,MAAMykR,WAAyD,MAA5BnpR,KAAK0gE,IAAIh8D,MAAMykR,UAChEnpR,KAAK0gE,IAAIh8D,MAAMykR,UAGfnpR,KAAK0gE,IAAIyB,KAAKz9D,MAAMykR,WAOnCiM,EAAY/5R,UAAUi8R,WAAa,WAC/B,YAAkC,IAAvBt3R,KAAK0E,MAAMmwR,SAAiD,MAAtB70R,KAAK0E,MAAMmwR,QACjD70R,KAAK0E,MAAMmwR,aAEqB,IAA3B70R,KAAK0gE,IAAIh8D,MAAMmwR,SAAqD,MAA1B70R,KAAK0gE,IAAIh8D,MAAMmwR,QAC9D70R,KAAK0gE,IAAIh8D,MAAMmwR,QAGf70R,KAAK0gE,IAAIyB,KAAKz9D,MAAMmwR,SAOnCO,EAAY/5R,UAAUy7R,mBAAqB,WACvC,YAA0C,IAA/B92R,KAAK0E,MAAM8vR,iBAAiE,MAA9Bx0R,KAAK0E,MAAM8vR,gBACzDx0R,KAAK0E,MAAM8vR,qBAE6B,IAAnCx0R,KAAK0gE,IAAIh8D,MAAM8vR,iBAAqE,MAAlCx0R,KAAK0gE,IAAIh8D,MAAM8vR,gBACtEx0R,KAAK0gE,IAAIh8D,MAAM8vR,gBAGfx0R,KAAK0gE,IAAIyB,KAAKz9D,MAAM8vR,iBAOnCY,EAAY/5R,UAAUo8R,gBAAkB,WACpC,YAAuC,IAA5Bz3R,KAAK0E,MAAMquP,cAA2D,MAA3B/yP,KAAK0E,MAAMquP,aACtD/yP,KAAK0E,MAAMquP,aAGX/yP,KAAK+yP,cAOpBqiC,EAAY/5R,UAAU+6R,cAAgB,WAGlC,IAAIpgR,EAAQhW,KAAK44R,iBAEa,MAA1B54R,KAAK0E,MAAMiyR,kBAAyD,IAA3B32R,KAAK0E,MAAMiyR,aACpD3gR,GAAUhW,KAAK21R,QAAQxzN,KAAKz9D,MAAMiyR,YAAYlqR,MAAQzM,KAAK21R,QAAQxzN,KAAKz9D,MAAMiyR,YAAYnqR,KAC1FwJ,GAAUhW,KAAK0E,MAAMuwR,QAAQzoR,KAAKwJ,MAAQhW,KAAK0E,MAAMuwR,QAAQxoR,MAAMuJ,QAGnEA,GAAUhW,KAAK0E,MAAMiyR,YAAYlqR,MAAQzM,KAAK0E,MAAMiyR,YAAYnqR,KAChEwJ,GAAUhW,KAAK0E,MAAMuwR,QAAQzoR,KAAKwJ,MAAQhW,KAAK0E,MAAMuwR,QAAQxoR,MAAMuJ,OAEvE,IAAID,EAAS,EACTygR,EAAW,IAAI13C,GACnB,GAAgC,iBAArB9+O,KAAKi2R,aAA4D,iBAAzBj2R,KAAKsyQ,gBAA8B,CAClF,IAAIzoI,EAAe7pI,KAAKi2R,YAIxBlgR,GAFUygR,EAAS3lO,OAAOg5E,EAAc7pI,KAAKy2R,cAAez2R,KAAK+yP,aAAc,IAAI/X,GAAMhlO,EAAO,IAAI,EAAO,IAAIglO,GAAM,EAAG,IAE1GtuM,WAAW32B,YAExB,GAAI/V,KAAKi2R,uBAAuBh/B,IAAYj3P,KAAKi2R,uBAAuBp+B,GACzE9hP,GAAU/V,KAAKi2R,YAAYlgR,YAE1B,GAAI/V,KAAKi2R,uBAAuB/J,GAAgB,CACjD,IAAIwK,EAAU12R,KAAKi2R,YAInBlgR,GAFUygR,EAAS3lO,OAAO6lO,EAAQjqQ,KAAMiqQ,EAAQhqQ,KAAMgqQ,EAAQ3jC,aAAc,IAAI/X,GAAMhlO,EAAO,IAAI,EAAO,IAAIglO,GAAM,EAAG,IAEvGtuM,WAAW32B,OAW7B,OATAA,GAA6E,GAAlE/V,KAAK0E,MAAMuwR,QAAQvoR,IAAIsJ,MAAQhW,KAAK0E,MAAMuwR,QAAQtoR,OAAOqJ,OAEtC,MAA1BhW,KAAK0E,MAAMiyR,kBAAyD,IAA3B32R,KAAK0E,MAAMiyR,YACpD5gR,GAAW/V,KAAK0gE,IAAIyB,KAAKz9D,MAAMiyR,YAAYjqR,IAAM1M,KAAK0gE,IAAIyB,KAAKz9D,MAAMiyR,YAAYhqR,OAGjFoJ,GAAW/V,KAAK0E,MAAMiyR,YAAYjqR,IAAM1M,KAAK0E,MAAMiyR,YAAYhqR,OAEnEoJ,GAAU/V,KAAK0gE,IAAIyB,KAAKz9D,MAAMkyR,aAOlCxB,EAAY/5R,UAAUu9R,eAAiB,WAInC,IAAK,IAHDC,EAAY74R,KAAK0gE,IAAIoB,MAAMvjE,QAAQyB,MACnCm4R,EAAan4R,KAAKm4R,WAClBniR,EAAQ,EACH7Z,EAAI,EAAGA,EAAIg8R,EAAYh8R,IAC5B6Z,GAAShW,KAAK0gE,IAAIyB,KAAKpE,QAAQs6N,UAAUQ,EAAY18R,GAAG6Z,MAE5D,OAAOA,GAEJo/Q,KAQP0D,GAAuC,WAMvC,SAASA,EAAsBp4N,GAK3B1gE,KAAK8hE,SACL9hE,KAAK21R,QAAUj1N,EA0CnB,OAnCAo4N,EAAsBz9R,UAAUk5R,QAAU,SAAUtiR,GAChD,GAAIA,EAAQ,GAAKA,GAASjS,KAAK8e,MAC3B,MAAM,IAAIle,MAAM,4BAEpB,OAAOZ,KAAK8hE,MAAM7vD,IAEtB3T,OAAOuJ,eAAeixR,EAAsBz9R,UAAW,SAKnDqM,IAAK,WACD,OAAO1H,KAAK8hE,MAAMrlE,QAEtBkL,YAAY,EACZC,cAAc,IAElBkxR,EAAsBz9R,UAAU+I,IAAM,SAAU6+D,GAC5C,QAAoB,IAATA,EAAsB,CAC7B,IAAI81N,EAAW,IAAI3D,GAEnB,OADAp1R,KAAKoE,IAAI20R,GACF91N,EAGPA,EAAKvC,IAAM1gE,KAAK21R,QAChB31R,KAAK8hE,MAAMt9D,KAAKy+D,IAOxB61N,EAAsBz9R,UAAUkD,QAAU,SAAU0kE,GAChD,OAAOjjE,KAAK8hE,MAAMvjE,QAAQ0kE,IAEvB61N,KCjqBPE,GAA+B,WAM/B,SAASA,EAAc72N,GAMnBniE,KAAKi5R,YAAc,EACnBj5R,KAAKmiE,KAAOA,EAkChB,OAhCA7jE,OAAOuJ,eAAemxR,EAAc39R,UAAW,SAK3CqM,IAAK,WACD,OAAO1H,KAAKi5R,aAEhB5xR,IAAK,SAAUrK,GACXgD,KAAKk5R,eAAgB,EACrBl5R,KAAKi5R,YAAcj8R,GAEvB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAemxR,EAAc39R,UAAW,UAK3CqM,IAAK,WAID,OAHyB,MAArB1H,KAAK+yP,eACL/yP,KAAK+yP,aAAe,IAAI/V,IAErBh9O,KAAK+yP,cAEhB1rP,IAAK,SAAUrK,GACXgD,KAAK+yP,aAAe/1P,GAExB2K,YAAY,EACZC,cAAc,IAEXoxR,KAQPG,GAAyC,WAOzC,SAASA,EAAwBh3N,GAK7BniE,KAAKo5R,mBAKLp5R,KAAKi5R,YAAc,EACnBj5R,KAAKmiE,KAAOA,EACZniE,KAAKo5R,mBA0HT,OAnHAD,EAAwB99R,UAAU+I,IAAM,SAAU0a,GAI9C,IAAK,IAAI3iB,EAAI,EAAGA,EAAI2iB,EAAO3iB,IAAK,CAC5B6D,KAAKo5R,gBAAgB50R,KAAK,IAAIw0R,GAAch5R,KAAKmiE,OACjD,IAAK,IAAIlwD,EAAQ,EAAGA,EAAQjS,KAAKmiE,KAAKo2N,KAAKz5Q,MAAO7M,IAAS,CACvD,IAAIyuD,EAAM1gE,KAAKmiE,KAAKo2N,KAAKG,OAAOzmR,GAC5BgxD,EAAO,IAAImyN,GACfnyN,EAAKjmE,MAAQ,GACb0jE,EAAIoB,MAAM19D,IAAI6+D,MAS1B3kE,OAAOuJ,eAAesxR,EAAwB99R,UAAW,SAKrDqM,IAAK,WACD,OAAO1H,KAAKo5R,gBAAgB38R,QAEhCkL,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAesxR,EAAwB99R,UAAW,SAKrDqM,IAAK,WAQD,OAPyB,IAArB1H,KAAKi5R,cACLj5R,KAAKi5R,YAAcj5R,KAAKq5R,uBAEG,IAA3Br5R,KAAKmiE,KAAKm3N,cAAsBt5R,KAAKi5R,cAAgBj5R,KAAKmiE,KAAKm3N,cAAiBt5R,KAAKmiE,KAAKz9D,MAAMyyR,0BAChGn3R,KAAKi5R,YAAcj5R,KAAKmiE,KAAKm3N,aAC7Bt5R,KAAKmiE,KAAKo3N,aAAc,GAErBv5R,KAAKi5R,aAEhBtxR,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAesxR,EAAwB99R,UAAW,WAKrDqM,IAAK,WACD,OAAO1H,KAAKo5R,iBAEhBzxR,YAAY,EACZC,cAAc,IAMlBuxR,EAAwB99R,UAAUg9R,UAAY,SAAUpmR,GACpD,GAAIA,GAAS,GAAKA,GAASjS,KAAK+9D,QAAQthE,OACpC,OAAOuD,KAAK+9D,QAAQ9rD,GAGpB,MAAMrR,MAAM,0CAA4CqR,IAQhEknR,EAAwB99R,UAAUg+R,oBAAsB,WAGpD,IAAK,IAFDj4M,EAAa,EAERjlF,EAAI,EAAG2iB,EAAQ9e,KAAKo5R,gBAAgB38R,OAAQN,EAAI2iB,EAAO3iB,IAC5DilF,GAAcphF,KAAKo5R,gBAAgBj9R,GAAG6Z,MAE1C,OAAOorE,GAMX+3M,EAAwB99R,UAAUm+R,iBAAmB,SAAUp4M,GAI3D,IAAK,IAHD8oL,KAEAuvB,EAAYz5R,KAAK8e,MACZ3iB,EAAI,EAAGA,EAAI6D,KAAK8e,MAAO3iB,IACxB6D,KAAKmiE,KAAKo3N,aAAen4M,GAAc,IAAMphF,KAAKo5R,gBAAgBj9R,GAAG+8R,cACrEl5R,KAAKo5R,gBAAgBj9R,GAAG6Z,MAAQ,GAGhCk0P,EAAO/tQ,GAAK6D,KAAKo5R,gBAAgBj9R,GAAG6Z,MAChChW,KAAKo5R,gBAAgBj9R,GAAG6Z,MAAQ,GAAKhW,KAAKo5R,gBAAgBj9R,GAAG+8R,eAC7D93M,GAAcphF,KAAKo5R,gBAAgBj9R,GAAG6Z,MACtCyjR,KAGAvvB,EAAO/tQ,GAAK,GAIxB,IAASA,EAAI,EAAGA,EAAI6D,KAAK8e,MAAO3iB,IAAK,CACjC,IAAI6Z,EAAQorE,EAAaq4M,EACrBvvB,EAAO/tQ,IAAM,IACb+tQ,EAAO/tQ,GAAK6Z,GAGpB,OAAOk0P,GAEJivB,KCpMPO,GAA4B,WAM5B,SAASA,EAAWv3N,GAKhBniE,KAAK25R,qBAAuB,EAM5B35R,KAAK45R,gBAAiB,EAMtB55R,KAAK65R,oBAAqB,EAC1B75R,KAAK85R,QAAU33N,EA2MnB,OAzMA7jE,OAAOuJ,eAAe6xR,EAAWr+R,UAAW,iBAMxCqM,IAAK,WACD,OAAO1H,KAAK+5R,gBAEhB1yR,IAAK,SAAUrK,GACXgD,KAAK+5R,eAAiB/8R,GAE1B2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe6xR,EAAWr+R,UAAW,SAKxCqM,IAAK,WAID,OAHsB,MAAlB1H,KAAKg6R,YACLh6R,KAAKg6R,UAAY,IAAIlB,GAAsB94R,OAExCA,KAAKg6R,WAEhBryR,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe6xR,EAAWr+R,UAAW,QAKxCqM,IAAK,WACD,OAAO1H,KAAK85R,SAEhBzyR,IAAK,SAAUrK,GACXgD,KAAK85R,QAAU98R,GAEnB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe6xR,EAAWr+R,UAAW,SAKxCqM,IAAK,WAKD,YAJ6B,IAAlB1H,KAAKi6R,WACZj6R,KAAKi6R,SAAW,IAAI7F,GACpBp0R,KAAKi6R,SAAS/E,UAAUl1R,OAErBA,KAAKi6R,UAEhB5yR,IAAK,SAAUrK,GACXgD,KAAKi6R,SAAWj9R,EAChB,IAAK,IAAIb,EAAI,EAAGA,EAAI6D,KAAK8hE,MAAMhjD,MAAO3iB,IAClC6D,KAAK8hE,MAAMyyN,QAAQp4R,GAAGuI,MAAMuwR,QAAUj4R,EAAMsnC,YAClB,IAAftnC,EAAM0vB,OACb1sB,KAAK8hE,MAAMyyN,QAAQp4R,GAAGuI,MAAMgoB,KAAO1vB,EAAM0vB,WAER,IAA1B1vB,EAAMw3R,kBACbx0R,KAAK8hE,MAAMyyN,QAAQp4R,GAAGuI,MAAM8vR,gBAAkBx3R,EAAMw3R,sBAEzB,IAApBx3R,EAAMmsR,YACbnpR,KAAK8hE,MAAMyyN,QAAQp4R,GAAGuI,MAAMykR,UAAYnsR,EAAMmsR,gBAErB,IAAlBnsR,EAAM63R,UACb70R,KAAK8hE,MAAMyyN,QAAQp4R,GAAGuI,MAAMmwR,QAAU73R,EAAM63R,UAIxDltR,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe6xR,EAAWr+R,UAAW,kBAKxCqM,IAAK,WAID,YAHuC,IAA5B1H,KAAKk6R,qBACZl6R,KAAKk6R,mBAAqB,GAEvBl6R,KAAKk6R,oBAEhB7yR,IAAK,SAAUrK,GACXgD,KAAKk6R,mBAAqBl9R,GAE9B2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe6xR,EAAWr+R,UAAW,oBACxCqM,IAAK,WACD,OAAO1H,KAAK25R,sBAEhBtyR,IAAK,SAAUrK,GACXgD,KAAK25R,qBAAuB38R,GAEhC2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe6xR,EAAWr+R,UAAW,UAKxCqM,IAAK,WAID,OAHK1H,KAAK45R,iBACN55R,KAAKggE,UAAYhgE,KAAKo2R,iBAEnBp2R,KAAKggE,WAEhB34D,IAAK,SAAUrK,GACXgD,KAAKggE,UAAYhjE,EACjBgD,KAAK45R,gBAAiB,GAE1BjyR,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe6xR,EAAWr+R,UAAW,oBAKxCqM,IAAK,WACD,OAAO1H,KAAKm6R,mBAEhB9yR,IAAK,SAAUrK,GACXgD,KAAKm6R,kBAAoBn9R,GAE7B2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe6xR,EAAWr+R,UAAW,oBAKxCqM,IAAK,WACD,OAAO1H,KAAK65R,oBAEhBxyR,IAAK,SAAUrK,GACXgD,KAAK65R,mBAAqB78R,GAE9B2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe6xR,EAAWr+R,UAAW,YAKxCqM,IAAK,WACD,OAAO1H,KAAKmiE,KAAKo2N,KAAKC,cAAcj6R,QAAQyB,OAEhD2H,YAAY,EACZC,cAAc,IAOlB8xR,EAAWr+R,UAAU+6R,cAAgB,WACjC,IACIp2N,EADAw1N,EAAyB,EAEzBjiO,EAAY,EAIhByM,EAAYhgE,KAAK8hE,MAAMyyN,QAAQ,GAAGx+Q,OAElC,IAAK,IAAI5Z,EAAI,EAAGA,EAAI6D,KAAK8hE,MAAMhjD,MAAO3iB,IAAK,CACvC,IAAI8mE,EAAOjjE,KAAK8hE,MAAMyyN,QAAQp4R,GAE1B8mE,EAAKuyN,uBAAyBA,IAC9BA,EAAyBvyN,EAAKuyN,wBAMlCx1R,KAAK24R,kBAAmB,EACpB11N,EAAKg0N,QAAU,EACX1jO,EAAY0P,EAAKltD,SACjBw9C,EAAY0P,EAAKltD,QAIzBiqD,EAAY3zD,KAAKC,IAAI0zD,EAAWiD,EAAKltD,QAQzC,OANkB,IAAdiqD,EACAA,EAAYzM,EAEPiiO,EAAyB,IAC9Bx1N,GAAaw1N,GAEVx1N,GAEJ05N,KAOPU,GAAsC,WAMtC,SAASA,EAAqBj4N,GAC1BniE,KAAKu4R,QACLv4R,KAAKmiE,KAAOA,EAoDhB,OAlDA7jE,OAAOuJ,eAAeuyR,EAAqB/+R,UAAW,SAMlDqM,IAAK,WACD,OAAO1H,KAAKu4R,KAAK97R,QAErBkL,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeuyR,EAAqB/+R,UAAW,iBAMlDqM,IAAK,WACD,OAAO1H,KAAKu4R,MAEhB5wR,YAAY,EACZC,cAAc,IAElBwyR,EAAqB/+R,UAAUg/R,OAAS,SAAUtoM,GAC9C,QAAmB,IAARA,EAAqB,CAC5B,IAAIuoM,EAAU,IAAIZ,GAAW15R,KAAKmiE,MAElC,OADAniE,KAAKq6R,OAAOC,GACLA,EAOP,GAJAvoM,EAAIrtF,MAAM4vR,mBAAmBt0R,KAAKmiE,KAAKz9D,MAAM8vR,iBAC7CziM,EAAIrtF,MAAMilO,QAAQ3pO,KAAKmiE,KAAKz9D,MAAMgoB,MAClCqlE,EAAIrtF,MAAMgwR,aAAa10R,KAAKmiE,KAAKz9D,MAAMykR,WACvCp3L,EAAIrtF,MAAMkwR,WAAW50R,KAAKmiE,KAAKz9D,MAAMmwR,SACb,IAApB9iM,EAAIjwB,MAAMhjD,MACV,IAAK,IAAI3iB,EAAI,EAAGA,EAAI6D,KAAKmiE,KAAKpE,QAAQj/C,MAAO3iB,IACzC41F,EAAIjwB,MAAM19D,IAAI,IAAIgxR,IAG1Bp1R,KAAKu4R,KAAK/zR,KAAKutF,IAOvBqoM,EAAqB/+R,UAAUq9R,OAAS,SAAUzmR,GAC9C,OAAOjS,KAAKu4R,KAAKtmR,IAEdmoR,KAOPG,GAAyC,WAMzC,SAASA,EAAwBp4N,GAK7BniE,KAAKu4R,QACLv4R,KAAKmiE,KAAOA,EACZniE,KAAKu4R,QA2CT,OApCAgC,EAAwBl/R,UAAUo9R,UAAY,SAAUxmR,GAIpD,OAAQjS,KAAKu4R,KAAKtmR,IAEtB3T,OAAOuJ,eAAe0yR,EAAwBl/R,UAAW,SAKrDqM,IAAK,WACD,OAAO1H,KAAKu4R,KAAK97R,QAErBkL,YAAY,EACZC,cAAc,IAElB2yR,EAAwBl/R,UAAU+I,IAAM,SAAU2tF,GAC9C,GAAmB,iBAARA,EAAkB,CAEzB,IAAK,IADDrxB,OAAM,EACDvkE,EAAI,EAAGA,EAAI41F,EAAK51F,IAAK,CAC1BukE,EAAM,IAAIg5N,GAAW15R,KAAKmiE,MAC1B,IAAK,IAAI5+C,EAAI,EAAGA,EAAIvjB,KAAKmiE,KAAKpE,QAAQj/C,MAAOyE,IACzCm9C,EAAIoB,MAAM19D,IAAI,IAAIgxR,IAEtBp1R,KAAKu4R,KAAK/zR,KAAKk8D,GAEnB,OAAO1gE,KAAKu4R,KAGZv4R,KAAKu4R,KAAK/zR,KAAKutF,IAGvBwoM,EAAwBl/R,UAAUkD,QAAU,SAAUmiE,GAClD,OAAO1gE,KAAKu4R,KAAKh6R,QAAQmiE,IAEtB65N,KC1WPjwM,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GA2BxC6vM,GAAqC,SAAUrvM,GAM/C,SAASqvM,EAAoBjQ,GAQzB,YAN0B,IAAfA,EACCp/L,EAAO7pF,KAAKtB,OAASA,KAGrBmrF,EAAO7pF,KAAKtB,KAAMuqR,IAAevqR,KAIjD,OAfAsqF,GAAUkwM,EAAqBrvM,GAexBqvM,GACTlQ,IAEEmQ,GAAyB,SAAUtvM,GAOnC,SAASsvM,IACL,IAAI16R,EAAQorF,EAAO7pF,KAAKtB,OAASA,KAyCjC,OApCAD,EAAM26R,SAAW,IAAI1/C,GAAM,EAAG,GAK9Bj7O,EAAM46R,cAAe,EAKrB56R,EAAM66R,WAAa,IAAI3/C,GAKvBl7O,EAAM86R,uBAKN96R,EAAM2uF,MAAO,EAKb3uF,EAAM+6R,gBAKN/6R,EAAMoyE,gBAAkB,IAAI4oK,GAAO,EAAG,GAKtCh7O,EAAMg7R,UAAW,EACVh7R,EA84BX,OA97BAuqF,GAAUmwM,EAAStvM,GAkDnB7sF,OAAOuJ,eAAe4yR,EAAQp/R,UAAW,sBAMrCqM,IAAK,WACD,YAAsC,IAAvB1H,KAAKg7R,eAA+D,cAAvBh7R,KAAKg7R,eAErErzR,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4yR,EAAQp/R,UAAW,oBAKrCqM,IAAK,WACD,YAAoC,IAArB1H,KAAKi7R,aAA2D,cAArBj7R,KAAKi7R,aAEnEtzR,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4yR,EAAQp/R,UAAW,wBAKrCqM,IAAK,WACD,YAAwC,IAAzB1H,KAAKk7R,iBAExBvzR,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4yR,EAAQp/R,UAAW,sBAKrCqM,IAAK,WACD,YAAsC,IAAvB1H,KAAKm7R,eAExBxzR,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4yR,EAAQp/R,UAAW,gBAKrCqM,IAAK,WAID,OAH0B,MAAtB1H,KAAKo7R,oBAAuD,IAAvBp7R,KAAKo7R,gBAC1Cp7R,KAAKo7R,eAAgB,GAElBp7R,KAAKo7R,eAEhB/zR,IAAK,SAAUrK,GACXgD,KAAKo7R,cAAgBp+R,GAEzB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4yR,EAAQp/R,UAAW,4BAKrCqM,IAAK,WACD,OAAO1H,KAAK+6R,UAEhB1zR,IAAK,SAAUrK,GACXgD,KAAK+6R,SAAW/9R,GAEpB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4yR,EAAQp/R,UAAW,WAKrCqM,IAAK,WAID,OAHwB,MAApB1H,KAAKq7R,kBAAmD,IAArBr7R,KAAKq7R,cACxCr7R,KAAKq7R,YAAc,IAAIlC,GAAwBn5R,OAE5CA,KAAKq7R,aAEhB1zR,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4yR,EAAQp/R,UAAW,QAKrCqM,IAAK,WAID,OAHqB,MAAjB1H,KAAKs7R,WACLt7R,KAAKs7R,SAAW,IAAIlB,GAAqBp6R,OAEtCA,KAAKs7R,UAEhB3zR,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4yR,EAAQp/R,UAAW,WAKrCqM,IAAK,WAID,OAHwB,MAApB1H,KAAKu7R,kBAAmD,IAArBv7R,KAAKu7R,cACxCv7R,KAAKu7R,YAAc,IAAIhB,GAAwBv6R,OAE5CA,KAAKu7R,aAEhB5zR,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4yR,EAAQp/R,UAAW,gBAKrCqM,IAAK,WACD,OAAO1H,KAAKw7R,kBAEhBn0R,IAAK,SAAUrK,GACXgD,KAAKw7R,iBAAmBx+R,GAE5B2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4yR,EAAQp/R,UAAW,SAKrCqM,IAAK,WAID,OAHsB,MAAlB1H,KAAKy7R,YACLz7R,KAAKy7R,UAAY,IAAIhI,IAElBzzR,KAAKy7R,WAEhBp0R,IAAK,SAAUrK,GACW,MAAlBgD,KAAKy7R,YACLz7R,KAAKy7R,UAAYz+R,IAGzB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4yR,EAAQp/R,UAAW,eAKrCqM,IAAK,WACD,OAAO1H,KAAK07R,WAEhBr0R,IAAK,SAAUrK,GACXgD,KAAK07R,UAAY1+R,GAErB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4yR,EAAQp/R,UAAW,eAKrCqM,IAAK,WACD,OAAO1H,KAAK27R,WAEhBt0R,IAAK,SAAUrK,GACXgD,KAAK27R,UAAY3+R,GAErB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4yR,EAAQp/R,UAAW,QAKrCqM,IAAK,WACD,OAA4B,IAAxB1H,KAAK06R,SAAS1kR,OAAwC,IAAzBhW,KAAK06R,SAAS3kR,QAC3C/V,KAAK06R,SAAW16R,KAAK47R,UACd57R,KAAK06R,UAGL16R,KAAK06R,UAGpBrzR,IAAK,SAAUrK,GACXgD,KAAK06R,SAAW19R,GAEpB2K,YAAY,EACZC,cAAc,IAElB6yR,EAAQp/R,UAAU23P,KAAO,SAAU9X,EAAMC,EAAMC,EAAMC,GACjD,GAAIF,aAAgBJ,SAAgC,IAAfI,EAAKnlO,YAAyC,IAATolO,EACtE,OAAOp7O,KAAK8xP,WAAW5W,EAAMC,EAAKpuO,EAAGouO,EAAKnuO,GAEzC,GAAoB,iBAATmuO,GAAqC,iBAATC,QAAqC,IAATC,EACpE,OAAOr7O,KAAK8xP,WAAW5W,EAAMC,EAAMC,EAAM,MAExC,GAAID,aAAgBF,SAAoC,IAAfE,EAAKnlO,YAAyC,IAATolO,EAC/E,OAAOp7O,KAAK8xP,WAAW5W,EAAMC,EAAM,MAElC,GAAIA,aAAgBJ,SAAgC,IAAfI,EAAKnlO,OAAyBolO,aAAgBkvC,GACpF,OAAOtqR,KAAK8xP,WAAW5W,EAAMC,EAAKpuO,EAAGouO,EAAKnuO,EAAGouO,GAE5C,GAAoB,iBAATD,GAAqC,iBAATC,IAAsBC,aAAgBivC,IAA2B,MAARjvC,GAAe,CAChH,IAAIrlO,EAASklO,EAAK6W,SAAS5S,WAAWnpO,MAAQmlO,EAC1Ci2B,EAAkB,IAAIn2B,GAAWE,EAAMC,EAAMplO,EAAO,GACxD,OAAOhW,KAAK8xP,WAAW5W,EAAMk2B,EAAiB/1B,GAE7C,OAAIF,aAAgBF,SAAoC,IAAfE,EAAKnlO,OAAyC,kBAATolO,EACxEp7O,KAAK8xP,WAAW5W,EAAMC,EAAM,MAG5Bn7O,KAAK8xP,WAAW5W,EAAMC,EAAMC,IAO3Cq/C,EAAQp/R,UAAUugS,QAAU,WAGxB,IAAK,IAFD7lR,EAAS,EACTC,EAAQhW,KAAK+9D,QAAQ/nD,MAChB7Z,EAAI,EAAGA,EAAI6D,KAAK6kF,QAAQ/lE,MAAO3iB,IAAK,CAEzC4Z,GADU/V,KAAK6kF,QAAQ4zM,UAAUt8R,GACnB4Z,OAElB,IAAS5Z,EAAI,EAAGA,EAAI6D,KAAKu4R,KAAKz5Q,MAAO3iB,IAAK,CAEtC4Z,GADU/V,KAAKu4R,KAAKG,OAAOv8R,GACb4Z,OAElB,OAAO,IAAIilO,GAAMhlO,EAAOD,IAE5B0kR,EAAQp/R,UAAUw1D,OAAS,SAAU8yD,EAAOk4K,GACxC,QAA8B,IAAnBA,EAAgC,CACvC77R,KAAK87R,UACL97R,KAAKirR,aAAetnK,EAAM3nF,OAC1Bh8B,KAAK+7R,aAAep4K,EAAMjtF,OAE1B,OADa12B,KAAK6wD,OAAO8yD,GAAO,GAIhC,OAAO3jH,KAAKqqR,eAAe1mK,IAGnC82K,EAAQp/R,UAAUygS,QAAU,WAMxB,IAAK,IALDpG,EAEAsG,EADA/E,EAAU,EAEVqB,EAAkB,EAClB2D,EAAWj8R,KAAK6kF,QAAQ/lE,MACnB3iB,EAAI,EAAGA,EAAI8/R,EAAU9/R,IAG1B,IAAK,IAFDukE,EAAM1gE,KAAK6kF,QAAQ4zM,UAAUt8R,GAC7B+/R,EAAWx7N,EAAIoB,MAAMhjD,MAChByE,EAAI,EAAGA,EAAI24Q,EAAU34Q,IAAK,CAC/B,IAAI0/C,EAAOvC,EAAIoB,MAAMyyN,QAAQhxQ,GAE7B,IAAK0/C,EAAKk5N,sBAAwBl5N,EAAKm5N,qBAAuBn5N,EAAKk1N,WAAa,GAAKl1N,EAAKg0N,QAAU,GAAI,CACpG,GAAIh0N,EAAKk1N,WAAa50Q,EAAIm9C,EAAIoB,MAAMhjD,MAChC,MAAM,IAAIle,MAAM,iCAAmC2iB,EAAErW,WAAa,WAAa/Q,EAAE+Q,YAErF,GAAI+1D,EAAKg0N,QAAU96R,EAAI6D,KAAK6kF,QAAQ/lE,MAChC,MAAM,IAAIle,MAAM,oCAAsC2iB,EAAErW,WAAa,WAAa/Q,EAAE+Q,YAKxF,GAAI+1D,EAAKk1N,WAAa,GAAKl1N,EAAKg0N,QAAU,EAAG,CAQzC,IAPAvB,EAAUzyN,EAAKk1N,WACflB,EAAUh0N,EAAKg0N,QACf+E,EAAmBz4Q,EACnB+0Q,EAAkBn8R,EAClB8mE,EAAKo5N,kBAAmB,EACxBp5N,EAAKq5N,iBAAkB,EAEhB5G,EAAU,GACbsG,IACAt7N,EAAIoB,MAAMyyN,QAAQyH,GAAkBG,qBAAsB,EAC1Dz7N,EAAIoB,MAAMyyN,QAAQyH,GAAkBI,oBAAqB,EACzD17N,EAAIoB,MAAMyyN,QAAQyH,GAAkB/E,QAAUA,EAC9CvB,IAKJ,IAHAsG,EAAmBz4Q,EACnBmyQ,EAAUzyN,EAAKk1N,WAERlB,EAAU,GAAG,CAKhB,IAJAqB,IACAt4R,KAAK6kF,QAAQ4zM,UAAUH,GAAiBx2N,MAAMyyN,QAAQhxQ,GAAG64Q,oBAAqB,EAC9Ep8R,KAAK6kF,QAAQ4zM,UAAUH,GAAiBx2N,MAAMyyN,QAAQyH,GAAkBI,oBAAqB,EAC7FnF,IACOvB,EAAU,GACbsG,IACAh8R,KAAK6kF,QAAQ4zM,UAAUH,GAAiBx2N,MAAMyyN,QAAQyH,GAAkBG,qBAAsB,EAC9Fn8R,KAAK6kF,QAAQ4zM,UAAUH,GAAiBx2N,MAAMyyN,QAAQyH,GAAkBI,oBAAqB,EAC7F1G,IAEJA,EAAUzyN,EAAKk1N,WACf6D,EAAmBz4Q,QAGtB,GAAI0/C,EAAKk1N,WAAa,GAAsB,IAAjBl1N,EAAKg0N,QAKjC,IAJAvB,EAAUzyN,EAAKk1N,WACf6D,EAAmBz4Q,EACnB0/C,EAAKo5N,kBAAmB,EAEjB3G,EAAU,GACbsG,IACAt7N,EAAIoB,MAAMyyN,QAAQyH,GAAkBG,qBAAsB,EAC1DzG,SAGH,GAAwB,IAApBzyN,EAAKk1N,YAAoBl1N,EAAKg0N,QAAU,EAI7C,IAHAA,EAAUh0N,EAAKg0N,QACfqB,EAAkBn8R,EAEX86R,EAAU,GACbqB,IACAt4R,KAAK6kF,QAAQ4zM,UAAUH,GAAiBx2N,MAAMyyN,QAAQhxQ,GAAG64Q,oBAAqB,EAC9EnF,OAWxBwD,EAAQp/R,UAAUkhS,UAAY,SAAUvgQ,GAEpC,OADQA,GAOZy+P,EAAQp/R,UAAUgvR,eAAiB,SAAU1mK,GACzC3jH,KAAKs5R,aAAe31K,EAAMjtF,OAAO1gB,MACpBhW,KAAKu8R,UAAU54K,EAAM3nF,QAElC,GADAh8B,KAAKszP,YAAc3vI,EAAMssC,KACA,OAArBjwJ,KAAKszP,YAML,MAAM1yP,MAAM,4BALKZ,KAAKszP,YAAY6pB,gBAAgBpnQ,OAClC/V,KAAKszP,YAAY6pB,gBAAgBnnQ,MACjDhW,KAAKw8R,kBAAoBx8R,KAAKszP,YAAY6pB,gBAK9Cn9Q,KAAKy8R,gBAAkBz8R,KAAKszP,YAAYvB,SACxC,IAAI9/O,EAAQ,EAIZ,GAHAA,EAAQjS,KAAKy8R,gBAAgBxsI,KAAKyiH,QAAQn0Q,QAAQyB,KAAKy8R,gBAAgBxsI,MACvEjwJ,KAAK66R,oBAAoBr2R,KAAKyN,GAC9BjS,KAAKsrR,cAAgB,IAAIrwC,GAAW,IAAIF,GAAOp3H,EAAMjtF,OAAO3pB,EAAG42G,EAAMjtF,OAAO1pB,GAAIhN,KAAKy8R,gBAAgBt9C,YAC7E,IAApBn/O,KAAKu4R,KAAKz5Q,MACV9e,KAAKsrR,cAAct1Q,MAAS2tG,EAAMjtF,OAAO1gB,MAAQ,EAAK2tG,EAAMjtF,OAAO1gB,MAC9DhW,KAAKsrR,cAAct1Q,MAAQhW,KAAKu4R,KAAKG,OAAO,GAAG52N,MAAMyyN,QAAQ,GAAG7vR,MAAMuwR,QAAQzoR,KAAKwJ,MAAQ,MAE/F,CAAA,GAA2B,IAAvBhW,KAAK6kF,QAAQ/lE,MAIlB,MAAMle,MAAM,sCAHZZ,KAAKsrR,cAAct1Q,MAAQ2tG,EAAMjtF,OAAO1gB,MAK5ChW,KAAK25B,cAAgB,IAAIohN,GAAOp3H,EAAMjtF,OAAO3pB,EAAG42G,EAAMjtF,OAAO1pB,GACzD22G,EAAMjtF,OAAO3gB,OAAS,IAAM/V,KAAK08R,cACjC18R,KAAKsrR,cAAcv1Q,OAAS4tG,EAAMjtF,OAAO3gB,QAE7C/V,KAAK28R,MAAQ38R,KAAK0E,MAAMk4R,uBACnB58R,KAAK0E,MAAMyyR,yBAKZn3R,KAAKq5R,sBACLr5R,KAAK68R,8BALL78R,KAAKq5R,oBAAoBr5R,KAAKsrR,eAC9BtrR,KAAK86R,aAAat2R,MAAM,EAAGxE,KAAK+9D,QAAQj/C,MAAQ,KAOpD,OADa9e,KAAK0rR,aAAa/nK,IAGnC82K,EAAQp/R,UAAUg+R,oBAAsB,SAAU3iQ,GAC9C,QAAsB,IAAXA,EAGP,IAAK,IAFDwzO,EAASlqQ,KAAK+9D,QAAQy7N,iBAAiB9iQ,EAAO1gB,OAEzC7Z,GADO6D,KAAK+9D,QAAQs6N,UAAU,GAAGriR,MAC7B,GAAG8I,EAAQ9e,KAAK+9D,QAAQj/C,MAAO3iB,EAAI2iB,EAAO3iB,IACnD6D,KAAK+9D,QAAQs6N,UAAUl8R,GAAG6Z,MAAQk0P,EAAO/tQ,OAG5C,CACG+tQ,KAAJ,IACImrB,EAAY,EAChB,GACIr1R,KAAK6kF,QAAQ/lE,MAAQ,EAGhB,CAAA,IAFDo9Q,EAAWl8R,KAAK6kF,QAAQ4zM,UAAU,GAAG32N,MAAMhjD,MAC3Cm9Q,EAAWj8R,KAAK6kF,QAAQ/lE,MAC5B,IAAS3iB,EAAI,EAAGA,EAAI+/R,EAAU//R,IAAK,CAC/Bk5R,EAAY,EACZ,IAAK,IAAI9xQ,EAAI,EAAGA,EAAI04Q,EAAU14Q,IAAK,CAC/B,IAAIu5Q,EAAWzwR,KAAK0T,IAAI/f,KAAKs5R,aAAct5R,KAAK6kF,QAAQ4zM,UAAUl1Q,GAAGu+C,MAAMyyN,QAAQp4R,GAAG6Z,OACtFq/Q,EAAYhpR,KAAKC,IAAI+oR,EAAWyH,GAEpC5yB,EAAO/tQ,GAAKk5R,QAMhB,IAFI6G,EAAWl8R,KAAKu4R,KAAKG,OAAO,GAAG52N,MAAMhjD,MACrCm9Q,EAAWj8R,KAAKu4R,KAAKz5Q,MAChB3iB,EAAI,EAAGA,EAAI+/R,EAAU//R,IAAK,CAC/Bk5R,EAAY,EACZ,IAAS9xQ,EAAI,EAAGA,EAAI04Q,EAAU14Q,IAAK,CAC3Bu5Q,EAAWzwR,KAAK0T,IAAI/f,KAAKs5R,aAAct5R,KAAKu4R,KAAKG,OAAOn1Q,GAAGu+C,MAAMyyN,QAAQp4R,GAAG6Z,OAChFq/Q,EAAYhpR,KAAKC,IAAI+oR,EAAWyH,GAEpC5yB,EAAO/tQ,GAAKk5R,EAGpBA,EAAY,EACZ,IAASl5R,EAAI,EAAG+/R,EAAWl8R,KAAK+9D,QAAQj/C,MAAO3iB,EAAI+/R,EAAU//R,IAAK,CAC9D,IAASonB,EAAI,EAAG04Q,EAAWj8R,KAAKu4R,KAAKz5Q,MAAOyE,EAAI04Q,EAAU14Q,IACtD,GAAuD,GAAnDvjB,KAAKu4R,KAAKG,OAAOn1Q,GAAGu+C,MAAMyyN,QAAQp4R,GAAGg8R,YAAkE,OAA/Cn4R,KAAKu4R,KAAKG,OAAOn1Q,GAAGu+C,MAAMyyN,QAAQp4R,GAAGa,OAAkBgD,KAAKu4R,KAAKG,OAAOn1Q,GAAGu+C,MAAMyyN,QAAQp4R,GAAG86R,SAAW,EAAG,CAClK,GAAmD,OAA/Cj3R,KAAKu4R,KAAKG,OAAOn1Q,GAAGu+C,MAAMyyN,QAAQp4R,GAAGa,QACpCgD,KAAKu4R,KAAKG,OAAOn1Q,GAAG4+C,KAAKz9D,MAAMyyR,wBAAyB,CACzD,IAAIn6R,EAAQgD,KAAKu4R,KAAKG,OAAOn1Q,GAAG4+C,KAAKz9D,MAAMiyR,YAAYlqR,MACnDzM,KAAKu4R,KAAKG,OAAOn1Q,GAAG4+C,KAAKz9D,MAAMiyR,YAAYnqR,KACzCxM,KAAKu4R,KAAKG,OAAOn1Q,GAAGu+C,MAAMyyN,QAAQp4R,GAAGuI,MAAMuwR,QAAQzoR,KAAKwJ,MAAQ,EAChEhW,KAAK+7R,aAAahvR,EACxB/M,KAAKu4R,KAAKG,OAAOn1Q,GAAGu+C,MAAMyyN,QAAQp4R,GAAGa,MAAMs8R,aAAet5R,KAAKs5R,aAAet8R,EAE9E8/R,EAAW,EAAf,IACIC,EAAgB/8R,KAAKu4R,KAAKG,OAAOn1Q,GAAGu+C,MAAMyyN,QAAQp4R,GAAG6Z,MACzD+mR,GAAiB/8R,KAAKu4R,KAAKG,OAAOn1Q,GAAGu+C,MAAMyyN,QAAQp4R,GAAGuI,MAAMuwR,QAAQzoR,KAAKwJ,MACzE+mR,GAAiB/8R,KAAKu4R,KAAKG,OAAOn1Q,GAAGu+C,MAAMyyN,QAAQp4R,GAAGuI,MAAMuwR,QAAQxoR,MAAMuJ,MAC1E,IAAIgnR,EAAiBh9R,KAAKu4R,KAAKG,OAAOn1Q,GAAGu+C,MAAMyyN,QAAQp4R,GAAG4Z,OAC1DinR,GAAmBh9R,KAAKu4R,KAAKG,OAAOn1Q,GAAGu+C,MAAMyyN,QAAQp4R,GAAGuI,MAAMuwR,QAAQvoR,IAAS,MAC/EswR,GAAmBh9R,KAAKu4R,KAAKG,OAAOn1Q,GAAGu+C,MAAMyyN,QAAQp4R,GAAGuI,MAAMuwR,QAAQtoR,OAAY,MAClF,IAAIswR,EAAkBF,EAAgB/8R,KAAK+7R,aAAahvR,EAAK/M,KAAKy8R,gBAAgBt9C,WAAWnpO,MACzFknR,EAAmBF,EAAiBh9R,KAAK+7R,aAAa/uR,EAAKhN,KAAKy8R,gBAAgBt9C,WAAWppO,OAC/F,GAAIknR,GAAkBC,EAClB,MAAMt8R,MAAM,yEAEhBk8R,EAAWzwR,KAAK0T,IAAI/f,KAAKs5R,aAAct5R,KAAKu4R,KAAKG,OAAOn1Q,GAAGu+C,MAAMyyN,QAAQp4R,GAAG6Z,OAC5Eq/Q,EAAYhpR,KAAKC,IAAI49P,EAAO/tQ,GAAIkQ,KAAKC,IAAI+oR,EAAWyH,IACpDzH,EAAYhpR,KAAKC,IAAItM,KAAK+9D,QAAQs6N,UAAUl8R,GAAG6Z,MAAOq/Q,GAG9DnrB,EAAO/tQ,GAAKk5R,EACZA,EAAY,EAEhB,IAASl5R,EAAI,EAAG2iB,EAAQ9e,KAAK+9D,QAAQj/C,MAAO3iB,EAAI2iB,EAAO3iB,IACnD6D,KAAK+9D,QAAQs6N,UAAUl8R,GAAG6Z,MAAQk0P,EAAO/tQ,KASrDs+R,EAAQp/R,UAAUwhS,0BAA4B,WAK1C,IAAK,IAJDM,EAAc,EACdC,EAAY,EACZC,EAAa,EACbC,EAAiBt9R,KAAKy8R,gBAAgBt9C,WAAWnpO,MAAQhW,KAAKsrR,cAAcv+Q,EACvE5Q,EAAI,EAAGA,EAAI6D,KAAK+9D,QAAQj/C,MAAO3iB,IAEpC,IADAkhS,GAAcr9R,KAAK+9D,QAAQs6N,UAAUl8R,GAAG6Z,QACtBsnR,EAAgB,CAE9B,IAAK,IADDC,EAAY,EACPh6Q,EAAI45Q,EAAa55Q,GAAKpnB,MAC3BohS,GAAav9R,KAAK+9D,QAAQs6N,UAAU90Q,GAAGvN,OACvBsnR,GAFc/5Q,IAK9B65Q,EAAY75Q,EAEhBvjB,KAAK86R,aAAat2R,MAAM24R,EAAaC,IAGrCC,GADAD,EADAD,EAAcC,EAAY,IAECjhS,EAAK6D,KAAK+9D,QAAQs6N,UAAUl8R,GAAG6Z,MAAQ,EAI1EhW,KAAK86R,aAAat2R,MAAM24R,EAAan9R,KAAK+9D,QAAQj/C,MAAQ,KAO9D27Q,EAAQp/R,UAAUqwR,aAAe,SAAU/nK,GAEvC3jH,KAAK46R,WAAW7tR,EAAI42G,EAAMjtF,OAAO3pB,EACjC/M,KAAK46R,WAAW5tR,EAAI22G,EAAMjtF,OAAO1pB,EACjChN,KAAK46R,WAAW7kR,OAAS4tG,EAAMjtF,OAAO3gB,OAQtC,IAAK,IAPDimB,EAASh8B,KAAKu8R,UAAU54K,EAAM3nF,QAE9Bj9B,EAAS,KACTy+R,EAAgB,IAAIpsC,GACpBqsC,EAAY95K,EAAMssC,KAElBytI,KACKzrR,EAAQ,EAAGA,EAAQjS,KAAK86R,aAAar+R,OAAQwV,IAAS,CAC3D,IAAI8f,EAAQ/xB,KAAK86R,aAAa7oR,GAC9BjS,KAAK29R,eAAiB5rQ,EAAM,GAC5B/xB,KAAK49R,aAAe7rQ,EAAM,GAC1B,IAAI8rQ,EAAe79R,KAAK89R,sBAAsB99R,KAAKszP,YAAatzP,KAAKsrR,cAAetrR,KAAKs4R,iBACzFt4R,KAAKsrR,cAAgBuS,EAAavS,cAClCtrR,KAAKs4R,gBAAkBuF,EAAavF,gBAMpC,IACK,IAAI9wQ,EAAM,EAAGA,EAAMxnB,KAAK6kF,QAAQ/lE,MAAO0I,IACxC,CAAA,IAAIk5C,EAAM1gE,KAAK6kF,QAAQ4zM,UAAUjxQ,GACdxnB,KAAKsrR,cAAct+Q,EAEnBhN,KAAK+9R,QAAQr9N,GAUpC,IAAIvkE,EAAI,EAEJ6hS,GADWh+R,KAAKu4R,KAAKz5Q,WACT,GAChB4+Q,KAKA,IAAK,IAAIn6Q,EAAI,EAAGA,EAAIvjB,KAAKu4R,KAAKz5Q,MAAOyE,IAAK,CAClCm9C,EAAM1gE,KAAKu4R,KAAKG,OAAOn1Q,GAC3BpnB,IACA6D,KAAKs4R,gBAAkBn8R,EAAI,EAC3B,IAAI8hS,EAAiBj+R,KAAKsrR,cAAct+Q,EACxCywR,EAAYz9R,KAAKszP,YACjBmnC,EAAQyD,gBAAkB,EAC1B,IAAIC,EAAYn+R,KAAK+9R,QAAQr9N,GAW7B,GAVAg9N,EAAWl5R,KAAK25R,EAAUznQ,OAAO1gB,OAE7BioR,IAAmBj+R,KAAKsrR,cAAct+Q,GACtCgxR,GAAY,EACZvD,EAAQyD,eAAiBl+R,KAAKu4R,KAAKC,cAAcj6R,QAAQmiE,KAGzDs9N,GAAY,EACZvD,EAAQyD,gBAAkB,IAEzBC,EAAUC,UAA0B,OAAdX,GAAsBzhQ,EAAO60B,SAAWgkM,GAAcwpC,SAAWL,EAAW,CAsBnG,GApBAh+R,KAAK25B,cAAc5sB,EAAI/M,KAAKsrR,cAAcv+Q,EAC1C/M,KACKszP,YAActzP,KAAKyyQ,YAAYz2O,GACd,OAAjB2nF,EAAM3nF,SAAqB2nF,EAAM3nF,OAAO2uP,mBAAsC,OAAjBhnK,EAAMjtF,QACpEitF,EAAMjtF,OAAO3gB,OAAS,IAAM/V,KAAK08R,cACjC18R,KAAKsrR,cAAcv1Q,OAAS4tG,EAAMjtF,OAAO3gB,QAEvB,OAAjB4tG,EAAM3nF,SAAqB2nF,EAAM3nF,OAAO2uP,mBAAsC,OAAjBhnK,EAAMjtF,QACpEitF,EAAMjtF,OAAO1pB,EAAI,IAAMhN,KAAK08R,cAC5B18R,KAAKsrR,cAAct+Q,EAAI22G,EAAMjtF,OAAO1pB,GAExChN,KAAK25B,cAAc3sB,EAAIhN,KAAKsrR,cAAct+Q,EACrCgvB,EAAOyuP,eAAe19Q,IAAMivB,EAAOyuP,eAAez9Q,GAClDgvB,EAAOyuP,eAAez9Q,IAAMgvB,EAAOyuP,eAAe10Q,QAClDimB,EAAOyuP,eAAe10Q,SAAWimB,EAAOyuP,eAAez0Q,OAA2C,IAAhCgmB,EAAOyuP,eAAez0Q,QACzFhW,KAAKsrR,cAAcv+Q,GAAK/M,KAAK25B,cAAc5sB,GAE3C/M,KAAKsrR,cAAcv+Q,IAAMqlR,GAAW+B,QAAQ3nR,KAAKwJ,MAAQ,IACzDhW,KAAKsrR,cAAct+Q,GAAKhN,KAAK25B,cAAc5sB,GAE3C/M,KAAKs+R,aACL,IAAK,IAAIC,EAAM,EAAGA,EAAMv+R,KAAK6kF,QAAQ/lE,MAAOy/Q,IAAO,CAC/C,IAAI35M,EAAS5kF,KAAK6kF,QAAQ4zM,UAAU8F,GACpCv+R,KAAK+9R,QAAQn5M,GAGrB5kF,KAAK+9R,QAAQr9N,GACY,OAArB1gE,KAAKszP,aAAyBkqC,EAAc/2D,YAAYzmO,KAAKszP,cAC7DkqC,EAAcp5R,IAAIpE,KAAKszP,YAAavhO,IAIhD,IACIysQ,EAAyB,EACzBd,EAAWjhS,OAAS,IACpB+hS,EAAyBd,EAAW,IAGxC,GAAkBA,EAAWjhS,OAAS,EAAG,CACrC,IAAK,IAAIwhE,EAAI,EAAGA,EAAI9hE,EAAI,EAAG8hE,IACnBugO,EAAyBd,EAAWz/N,KACpCugO,EAAyBd,EAAWz/N,IAG5Cj+D,KAAKy+R,qBAAuBD,OAG5Bx+R,KAAKy+R,qBAVoB,EAYzBz+R,KAAK86R,aAAar+R,OAAS,IAAMwV,GAASjS,KAAK86R,aAAar+R,OAAS,GAAKu/B,EAAO60B,SAAWgkM,GAAcwpC,UAC1Gr+R,KAAKszP,YAActzP,KAAKyyQ,YAAYz2O,GAC/BA,EAAOyuP,eAAe19Q,IAAMivB,EAAOyuP,eAAez9Q,GAAOgvB,EAAOyuP,eAAez9Q,IAAMgvB,EAAOyuP,eAAe10Q,QACxGimB,EAAOyuP,eAAe10Q,SAAWimB,EAAOyuP,eAAez0Q,OAA2C,IAAhCgmB,EAAOyuP,eAAez0Q,QAC5FhW,KAAKsrR,cAAcv+Q,GAAK/M,KAAK25B,cAAc5sB,EAC3C/M,KAAKsrR,cAAct+Q,GAAKhN,KAAK25B,cAAc3sB,IAUvD,OALAjO,EAASiB,KAAK2rR,kBACV3rR,KAAK0E,MAAMyyR,yBAA2Bn3R,KAAK0E,MAAMk4R,wBAA0BzJ,GAA0BuL,UACrG1+R,KAAK2+R,eAAenB,GAExBx9R,KAAK4+R,kBAAkB7/R,GAChBA,GAMX07R,EAAQp/R,UAAUo3Q,YAAc,SAAUz2O,GACtC,IAAI02O,EAAU1yQ,KAAKszP,YAAYof,QAC3BmsB,EAAW,KACX5sR,EAAQygQ,EAAQn0Q,QAAQyB,KAAKszP,aACjCtzP,KAAK0uF,MAAO,EAERmwM,EADA5sR,IAAUygQ,EAAQ5zP,MAAQ,EACf4zP,EAAQtuQ,MAGRsuQ,EAAQC,WAAW1gQ,EAAQ,GAE1CjS,KAAKy8R,gBAAkBoC,EAAS9sC,SAChC,IAAI+sC,EAAY9+R,KAAKy8R,gBAAgBxsI,KAAKyiH,QAAQn0Q,QAAQyB,KAAKy8R,gBAAgBxsI,MAW/E,OAVuD,IAAjDjwJ,KAAK66R,oBAAoBt8R,QAAQugS,IACnC9+R,KAAK66R,oBAAoBr2R,KAAKs6R,GAElC9+R,KAAKsrR,cAAgB,IAAIrwC,GAAW,IAAIF,GAAO,EAAG,GAAI8jD,EAAS1hB,iBAOxD0hB,GAMXpE,EAAQp/R,UAAUswR,gBAAkB,WAChC,IAAIj1P,EAIJ,OAFAA,EAAS,IAAIukN,GAAWj7O,KAAK25B,cAAe,IAAIqhN,GAAMh7O,KAAKsrR,cAAct1Q,MAAOhW,KAAKsrR,cAAct+Q,EAAIhN,KAAK25B,cAAc3sB,IAEnH,IAAI+xR,GAAoB/+R,KAAKszP,YAAa58N,IAMrD+jQ,EAAQp/R,UAAU2jS,kBAAoB,SAAUt+N,EAAK3qD,GAQjD,OAAO1J,KAAKC,IAAIyJ,EAPA,IAapB0kR,EAAQp/R,UAAUyiS,sBAAwB,SAAUxqC,EAAag4B,EAAe2T,GAC5E,IAAIpmQ,GAAS,EACb,GAAI74B,KAAKk/R,qBAAsB,CAC3B,IAAIj/R,EAAO,IAAIk/R,GAAgC7T,EAAeh4B,EAAa2rC,GAC3Ej/R,KAAKk7R,gBAAgBl7R,KAAMC,GAQ3B44B,EAAS54B,EAAK44B,OACdyyP,EAAgBrrR,EAAKy2B,OACrBuoQ,EAAah/R,EAAKm/R,cAEtB,OAAS53O,YAAa3uB,EAAQyyP,cAAeA,EAAegN,gBAAiB2G,IAMjFxE,EAAQp/R,UAAUujS,kBAAoB,SAAU7/R,GAC5C,IAAIkB,EAAO,IAAIo/R,GAA8BtgS,GAI7C,OAHIiB,KAAKs/R,oBACLt/R,KAAKm7R,cAAcn7R,KAAMC,GAEtBA,GAEXw6R,EAAQp/R,UAAU0iS,QAAU,SAAUr9N,EAAK3hE,EAAQgX,GAC/C,QAAsB,IAAXhX,EAAwB,CAG/B,IAAIwgS,EAAW,IAAIC,GACfC,EAAoB,EAEpB3yQ,EAAO,IAAIkuN,GAAM,EAAG,GACpBlvN,GAAW,EACf,GAAI40C,EAAIw1N,cAAe,CACnB,IAAIwJ,EAAU,EACVC,EAAe3/R,KAAKu4R,KAAKC,cAAcj6R,QAAQmiE,IAC7B,IAAlBi/N,IAEsB,KADtBA,EAAe3/R,KAAK6kF,QAAQtmF,QAAQmiE,MAEhC50C,GAAW,GAGnB,IAAK,IAAI3vB,EAAI,EAAGA,EAAIukE,EAAIoB,MAAMhjD,MAAO3iB,IAAK,CACtC,IAAI8mE,EAAOvC,EAAIoB,MAAMyyN,QAAQp4R,GAC7BujS,EAAUrzR,KAAKC,IAAIozR,EAASz8N,EAAKg0N,SAErC,IAAS96R,EAAIwjS,EAAcxjS,EAAIwjS,EAAeD,EAASvjS,IACnDsjS,GAAsB3zQ,EAAW9rB,KAAK6kF,QAAQ4zM,UAAUt8R,GAAG4Z,OAAS/V,KAAKu4R,KAAKG,OAAOv8R,GAAG4Z,OAGvF,IADD6pR,EAAeH,EACnB,IAAStjS,EAAI,EAAGA,EAAIukE,EAAIoB,MAAMhjD,MAAO3iB,IACjCyjS,EAAeA,EAAel/N,EAAIoB,MAAMyyN,QAAQp4R,GAAG4Z,OAAS6pR,EAAel/N,EAAIoB,MAAMyyN,QAAQp4R,GAAG4Z,OAI/F,IAFD8pR,EAAU7/R,KAAK6kF,QAAQ4zM,UAAUz4R,KAAK6kF,QAAQtmF,QAAQmiE,GAAO,GAC7DguB,GAAO,EACX,IAASvyF,EAAI,EAAGA,EAAI0jS,EAAQ/9N,MAAMhjD,MAAO3iB,IACrC,GAAuC,KAAnC0jS,EAAQ/9N,MAAMyyN,QAAQp4R,GAAGa,YAAmD7B,IAAnC0kS,EAAQ/9N,MAAMyyN,QAAQp4R,GAAGa,MAAqB,CACvF0xF,GAAO,EACP,MAGHkxM,EAAeH,GAAsB/wM,IACtChuB,EAAI3qD,QAAW6pR,EAAeH,GAGtC,IAAIK,EAAmBp/N,EAAIq/N,eAAiB,EAAMr/N,EAAIq/N,eAAiBr/N,EAAI3qD,OAqB3E,OApBI/V,KAAKsrR,cAAct+Q,EAAI8yR,EAAmB9/R,KAAKw8R,kBAAkBzmR,QACjE/V,KAAKsrR,cAAct+Q,EAAI8yR,EAAoB9/R,KAAKsrR,cAAcv1Q,OAAS/V,KAAK25B,cAAc3sB,GAC1FhN,KAAKsrR,cAAct+Q,EAAIyyR,EAAoBz/R,KAAKw8R,kBAAkBzmR,OAWlEwpR,EAASnB,UAAW,GAIpBmB,EAASnB,UAAW,EACpBp+R,KAAK+9R,QAAQr9N,EAAK6+N,EAAUO,IAEzBP,EAGP,IACIS,EAAa,IAAIjlD,GAAO/6O,KAAKsrR,cAAcv+Q,EAAG/M,KAAKsrR,cAAct+Q,GACrEjO,EAAO23B,OAAS,IAAIukN,GAAW+kD,EAAY,IAAIhlD,GAAM,EAAG,IACxDjlO,EAAS/V,KAAKg/R,kBAAkBt+N,EAAK3qD,GACrC,IAAS5Z,EAAI6D,KAAK29R,eAAgBxhS,GAAK6D,KAAK49R,aAAczhS,IAAK,CAC3D,IAAI8jS,EAAgB9jS,EAAI6D,KAAK49R,aAAe,GAAOl9N,EAAIoB,MAAMyyN,QAAQp4R,GAAGg8R,WAAa,EAErF,IAAK8H,EACD,IAAK,IAAI18Q,EAAI,EAAGA,EAAIm9C,EAAIoB,MAAMyyN,QAAQp4R,GAAGg8R,WAAY50Q,IACjDm9C,EAAIoB,MAAMyyN,QAAQp4R,EAAIonB,GAAG44Q,qBAAsB,EAGnDrvQ,EAAO,IAAIkuN,GAAMh7O,KAAK+9D,QAAQs6N,UAAUl8R,GAAG6Z,MAAOD,IAUjD/V,KAAKkgS,qBAAqBlgS,KAAK+9D,QAAQs6N,UAAUl8R,GAAG6/B,SACrDh8B,KAAKkgS,qBAAqBx/N,EAAIoB,MAAMyyN,QAAQp4R,GAAG42P,gBAC/CryL,EAAIoB,MAAMyyN,QAAQp4R,GAAG42P,aAAe/yP,KAAK+9D,QAAQs6N,UAAUl8R,GAAG6/B,QAElE,IAAImkQ,EAAYz/N,EAAIoB,MAAMyyN,QAAQp4R,GAAGuI,MACjC8F,EAAoD,iBAA/Bk2D,EAAIoB,MAAMyyN,QAAQp4R,GAAGa,OACX,OAA/B0jE,EAAIoB,MAAMyyN,QAAQp4R,GAAGa,MAAkB0jE,EAAIoB,MAAMyyN,QAAQp4R,GAAGa,MAAQ,GACxE0jE,EAAIoB,MAAMyyN,QAAQp4R,GAAGuI,MAAQ1E,KAAKogS,oBAAoBpgS,KAAKy8R,gBAAiBz8R,KAAKs4R,gBAAiBn8R,EAAG,IAAI8+O,GAAW+kD,EAAYlzQ,GAAOtiB,EAAW21R,GAGlJ,IAAIpU,EAAerrN,EAAIoB,MAAMyyN,QAAQp4R,GAAG62P,KAAKhzP,KAAKy8R,gBAAiB,IAAIxhD,GAAW+kD,EAAYlzQ,GAAOmzQ,GACjGv/N,EAAIyB,KAAKz9D,MAAMyyR,0BAA4Bz2N,EAAIoB,MAAMyyN,QAAQp4R,GAAGg8R,WAAan4R,KAAK49R,cAAgBzhS,EAAIukE,EAAIoB,MAAMyyN,QAAQp4R,GAAGg8R,WAAan4R,KAAK49R,aAAe,IAAM59R,KAAK49R,aAAel9N,EAAIoB,MAAMhjD,MAAQ,IACxM4hD,EAAI02N,iBAAmBp3R,KAAK49R,cAE5Bl9N,EAAIyB,KAAKz9D,MAAMyyR,yBAA4Bz2N,EAAI02N,iBAAmB,IAAM12N,EAAIoB,MAAMyyN,QAAQp4R,GAAGg8R,WAAan4R,KAAK49R,cAAgBzhS,EAAIukE,EAAIoB,MAAMyyN,QAAQp4R,GAAGg8R,WAAan4R,KAAK49R,aAAe,IAAOl9N,EAAIoB,MAAMyyN,QAAQp4R,GAAGg8R,WAAan4R,KAAK49R,aAAezhS,EAAI,EAAI,IAC9PukE,EAAIoB,MAAMyyN,QAAQ7zN,EAAI02N,iBAAmB,GAAGp6R,MAAyB,OAAjB+uR,QAAoD5wR,IAA3B4wR,EAAaN,UAA2BM,EAAaN,UAAiB,GACnJ/qN,EAAIoB,MAAMyyN,QAAQ7zN,EAAI02N,iBAAmB,GAAGrkC,aAAeryL,EAAIoB,MAAMyyN,QAAQp4R,GAAG42P,aAChFryL,EAAIoB,MAAMyyN,QAAQ7zN,EAAI02N,iBAAmB,GAAG1yR,MAAQg8D,EAAIoB,MAAMyyN,QAAQp4R,GAAGuI,MACzEg8D,EAAIoB,MAAMyyN,QAAQ7zN,EAAI02N,iBAAmB,GAAGe,WAAaz3N,EAAIoB,MAAMyyN,QAAQp4R,GAAGg8R,WAAan4R,KAAK49R,aAAezhS,EAAI,GAIvHqO,EAAoD,iBAA/Bk2D,EAAIoB,MAAMyyN,QAAQp4R,GAAGa,OACP,OAA/B0jE,EAAIoB,MAAMyyN,QAAQp4R,GAAGa,MAAkB0jE,EAAIoB,MAAMyyN,QAAQp4R,GAAGa,MAAQ,GACxEgD,KAAKqgS,mBAAmBrgS,KAAKy8R,gBAAiBz8R,KAAKs4R,gBAAiBn8R,EAAG,IAAI8+O,GAAW+kD,EAAYlzQ,GAAOtiB,EAAWk2D,EAAIoB,MAAMyyN,QAAQp4R,GAAGuI,OACzIs7R,EAAWjzR,GAAK/M,KAAK+9D,QAAQs6N,UAAUl8R,GAAG6Z,MAG9ChW,KAAKsrR,cAAct+Q,GAAK+I,EAExBhX,EAAO23B,OAAS,IAAIukN,GAAW,IAAIF,GAAOh8O,EAAO23B,OAAO3pB,EAAGhO,EAAO23B,OAAO1pB,GAAI,IAAIguO,GAAMglD,EAAWjzR,EAAGizR,EAAWhzR,KAOxHytR,EAAQp/R,UAAU6kS,qBAAuB,SAAUlkQ,GAC/C,IAAIskQ,EAAgB,IAAItjD,GACxB,OAAQhhN,EAAOqzB,YAAcixO,EAAcjxO,WAAarzB,EAAOunN,mBAAqB+8C,EAAc/8C,kBAC9FvnN,EAAO88E,WAAawnL,EAAcxnL,UAAY98E,EAAO4hN,kBAAoB0iD,EAAc1iD,iBACvF5hN,EAAOo2O,0BAA4BkuB,EAAcluB,yBACjDp2O,EAAO61O,gBAAkByuB,EAAczuB,eACpC71O,EAAO0lN,YAAc4+C,EAAc5+C,WAAa1lN,EAAOskN,cAAgBggD,EAAchgD,aACxFtkN,EAAOukQ,wBAA0BD,EAAcC,uBAAyBvkQ,EAAOwkQ,SAAWF,EAAcE,QACxGxkQ,EAAOokN,kBAAoBkgD,EAAclgD,iBAAmBpkN,EAAOyuE,cAAgB61L,EAAc71L,aACjGzuE,EAAO4tO,iBAAmB02B,EAAc12B,gBAAkB5tO,EAAOwnN,cAAgB88C,EAAc98C,aAC/FxnN,EAAOw0C,WAAa8vN,EAAc9vN,UAM1CiqN,EAAQp/R,UAAU+kS,oBAAsB,SAAUruC,EAAU0uC,EAAU5H,EAAWniQ,EAAQ15B,EAAO0H,GAC5F,IAAIzE,EAAO,KAMX,OALID,KAAK0gS,qBACLzgS,EAAO,IAAI0gS,GAA8B5uC,EAAU0uC,EAAU5H,EAAWniQ,EAAQ15B,EAAO0H,GACvF1E,KAAKg7R,cAAch7R,KAAMC,GACzByE,EAAQzE,EAAKyE,OAEVA,GAMX+1R,EAAQp/R,UAAUglS,mBAAqB,SAAUtuC,EAAU0uC,EAAU5H,EAAWniQ,EAAQ15B,EAAOmjS,GAC3F,IAAIlgS,EAAO,KACPD,KAAK4gS,mBACL3gS,EAAO,IAAI4gS,GAA4B9uC,EAAU0uC,EAAU5H,EAAWniQ,EAAQ15B,EAAOmjS,GACrFngS,KAAKi7R,YAAYj7R,KAAMC,KAO/Bw6R,EAAQp/R,UAAUsjS,eAAiB,SAAUnB,GAKzC,IAAK,IAJDh9R,EAAWR,KAAKszP,YAAY9yP,SAC5B0qO,KACA5tO,EAAOkgS,EAAclgS,OAEhBnB,GADIqhS,EAAczqQ,SACd,GAAG52B,EAAImB,EAAKb,OAAQN,IAAK,EAC9B8zJ,EAAO3yJ,EAAKnB,IACXu2Q,QAAU,KACfxnC,EAAM1mO,KAAKyrJ,GACXzvJ,EAAS0qO,MAAM3mO,OAAO0rJ,GAG1B,IAAS9zJ,EAAI,EAAGA,EAAIqhS,EAAc1wQ,OAAQ3wB,IACtC,IACK,IAAIonB,EAAIpnB,EAAGsoI,EAAW+4J,EAAc1wQ,OAAS9sB,KAAK86R,aAAar+R,OAAS8mB,EAAIi6Q,EAAc1wQ,OAAQvJ,GAAKkhH,EAAS,CACjH,IAAIwrB,EAAOi7E,EAAM3nN,IACqB,IAAlC/iB,EAAS0qO,MAAM3sO,QAAQ0xJ,IACvBzvJ,EAAS0qO,MAAM9mO,IAAI6rJ,KAUnCwqI,EAAQyD,gBAAkB,EACnBzD,GACTtP,IAKE2V,GAAmC,WAMnC,SAASA,EAAkB/uC,EAAU0uC,EAAU5H,EAAWniQ,EAAQ15B,GAC9DgD,KAAK+gS,aAAeN,EACpBzgS,KAAKghS,cAAgBnI,EACrB74R,KAAK4mO,cAAgB5pO,EACrBgD,KAAKihS,WAAavqQ,EAClB12B,KAAK43Q,YAAc7lB,EA0DvB,OAxDAzzP,OAAOuJ,eAAei5R,EAAkBzlS,UAAW,YAM/CqM,IAAK,WACD,OAAO1H,KAAK+gS,cAEhBp5R,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAei5R,EAAkBzlS,UAAW,aAK/CqM,IAAK,WACD,OAAO1H,KAAKghS,eAEhBr5R,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAei5R,EAAkBzlS,UAAW,SAK/CqM,IAAK,WACD,OAAO1H,KAAK4mO,eAEhBj/N,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAei5R,EAAkBzlS,UAAW,UAK/CqM,IAAK,WACD,OAAO1H,KAAKihS,YAEhBt5R,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAei5R,EAAkBzlS,UAAW,YAK/CqM,IAAK,WACD,OAAO1H,KAAK43Q,aAEhBjwQ,YAAY,EACZC,cAAc,IAEXk5R,KAMPH,GAA+C,SAAUx1M,GAOzD,SAASw1M,EAA8B5uC,EAAU0uC,EAAU5H,EAAWniQ,EAAQ15B,EAAO0H,GACjF,IAAI3E,EAAQorF,EAAO7pF,KAAKtB,KAAM+xP,EAAU0uC,EAAU5H,EAAWniQ,EAAQ15B,IAAUgD,KAE/E,OADAD,EAAM2E,MAAQA,EACP3E,EA+BX,OAxCAuqF,GAAUq2M,EAA+Bx1M,GAWzC7sF,OAAOuJ,eAAe84R,EAA8BtlS,UAAW,QAM3DqM,IAAK,WACD,OAAO1H,KAAKkhS,OAEhB75R,IAAK,SAAUrK,GACXgD,KAAKkhS,MAAQlkS,GAEjB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe84R,EAA8BtlS,UAAW,SAK3DqM,IAAK,WACD,OAAO1H,KAAKm2R,WAEhB9uR,IAAK,SAAUrK,GACXgD,KAAKm2R,UAAYn5R,GAErB2K,YAAY,EACZC,cAAc,IAEX+4R,GACTG,IAKED,GAA6C,SAAU11M,GAOvD,SAAS01M,EAA4B9uC,EAAU0uC,EAAU5H,EAAWniQ,EAAQ15B,EAAO0H,GAC/E,IAAI3E,EAAQorF,EAAO7pF,KAAKtB,KAAM+xP,EAAU0uC,EAAU5H,EAAWniQ,EAAQ15B,IAAUgD,KAE/E,OADAD,EAAMo2R,UAAYzxR,EACX3E,EAcX,OAvBAuqF,GAAUu2M,EAA6B11M,GAWvC7sF,OAAOuJ,eAAeg5R,EAA4BxlS,UAAW,SAMzDqM,IAAK,WACD,OAAO1H,KAAKm2R,WAEhBxuR,YAAY,EACZC,cAAc,IAEXi5R,GACTC,IAKEK,GAAoC,WACpC,SAASA,KAiBT,OAfA7iS,OAAOuJ,eAAes5R,EAAmB9lS,UAAW,UAMhDqM,IAAK,WACD,OAAO1H,KAAKohS,UAEhB/5R,IAAK,SAAUrK,GACXgD,KAAKohS,SAAWpkS,GAEpB2K,YAAY,EACZC,cAAc,IAEXu5R,KAMPE,GAA0C,SAAUl2M,GAOpD,SAASk2M,EAAyB3qQ,EAAQu5H,GACtC,IAAIlwJ,EAAQorF,EAAO7pF,KAAKtB,OAASA,KAGjC,OAFAD,EAAM22B,OAASA,EACf32B,EAAMu4Q,QAAUroH,EACTlwJ,EA4BX,OAtCAuqF,GAAU+2M,EAA0Bl2M,GAYpC7sF,OAAOuJ,eAAew5R,EAAyBhmS,UAAW,UAMtDqM,IAAK,WACD,OAAO1H,KAAK09R,YAEhBr2R,IAAK,SAAUrK,GACXgD,KAAK09R,WAAa1gS,GAEtB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAew5R,EAAyBhmS,UAAW,QAKtDqM,IAAK,WACD,OAAO1H,KAAKs4Q,SAEhB3wQ,YAAY,EACZC,cAAc,IAEXy5R,GACTF,IAKEG,GAAwC,SAAUn2M,GAOlD,SAASm2M,EAAuBviS,GAC5B,IAAIgB,EAAQorF,EAAO7pF,KAAKtB,OAASA,KAEjC,OADAD,EAAM08Q,aAAe19Q,EACdgB,EA4BX,OArCAuqF,GAAUg3M,EAAwBn2M,GAWlC7sF,OAAOuJ,eAAey5R,EAAuBjmS,UAAW,UAMpDqM,IAAK,WACD,OAAO1H,KAAKy8Q,cAEhB90Q,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAey5R,EAAuBjmS,UAAW,YAKpDqM,IAAK,WACD,OAAO1H,KAAKuhS,aAEhBl6R,IAAK,SAAUrK,GACXgD,KAAKuhS,YAAcvkS,GAEvB2K,YAAY,EACZC,cAAc,IAEX05R,GACTH,IAKEhC,GAAiD,SAAUh0M,GAO3D,SAASg0M,EAAgCzoQ,EAAQu5H,EAAMuxI,GACnD,IAAIzhS,EAAQorF,EAAO7pF,KAAKtB,KAAM02B,EAAQu5H,IAASjwJ,KAE/C,OADAD,EAAMyhS,SAAWA,EACVzhS,EAcX,OAvBAuqF,GAAU60M,EAAiCh0M,GAW3C7sF,OAAOuJ,eAAes3R,EAAgC9jS,UAAW,iBAM7DqM,IAAK,WACD,OAAO1H,KAAKwhS,UAEhB75R,YAAY,EACZC,cAAc,IAEXu3R,GACTkC,IAKEhC,GAA+C,SAAUl0M,GAOzD,SAASk0M,EAA8BtgS,GACnC,OAAOosF,EAAO7pF,KAAKtB,KAAMjB,IAAWiB,KAExC,OATAsqF,GAAU+0M,EAA+Bl0M,GASlCk0M,GACTiC,IAKE9B,GAAiC,WAMjC,SAASA,IACLx/R,KAAKyhS,eAAiB,IAAIxmD,GAAW,EAAG,EAAG,EAAG,GA8BlD,OA5BA38O,OAAOuJ,eAAe23R,EAAgBnkS,UAAW,YAK7CqM,IAAK,WACD,OAAO1H,KAAK0hS,aAEhBr6R,IAAK,SAAUrK,GACXgD,KAAK0hS,YAAc1kS,GAEvB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe23R,EAAgBnkS,UAAW,UAK7CqM,IAAK,WACD,OAAO1H,KAAKyhS,gBAEhBp6R,IAAK,SAAUrK,GACXgD,KAAKyhS,eAAiBzkS,GAE1B2K,YAAY,EACZC,cAAc,IAEX43R,KAMPT,GAAqC,SAAU5zM,GAO/C,SAAS4zM,EAAoB9uI,EAAMv5H,GAC/B,OAAOy0D,EAAO7pF,KAAKtB,KAAMiwJ,EAAMv5H,IAAW12B,KAE9C,OATAsqF,GAAUy0M,EAAqB5zM,GASxB4zM,GACT7T,IjNh2CE5gM,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAmHxCv9D,GAAsB,WAKtB,OAJA,SAAcpX,EAAOD,GACjB/V,KAAKgW,MAAQA,EACbhW,KAAK+V,OAASA,MAMlBmgB,GAAsB,WAOtB,OANA,SAAcnpB,EAAGC,EAAGgJ,EAAOD,GACvB/V,KAAK+M,EAAIA,EACT/M,KAAKgN,EAAIA,EACThN,KAAKgW,MAAQA,EACbhW,KAAK+V,OAASA,MAKlB4rR,GAAsB,WAKtB,OAJA,SAAch1R,EAAQF,GAClBzM,KAAK4hS,QAAUn1R,EACfzM,KAAK6hS,SAAWl1R,MAMpBm1R,GAAiC,WAIjC,OAHA,SAAyBx+R,GACrBtD,KAAKsD,GAAKA,MAMdizB,GAA4B,SAAU40D,GAEtC,SAAS50D,EAAWjzB,EAAIyJ,EAAGC,EAAG6G,EAAQ4Y,EAAMpf,EAAW8xB,QACjC,IAAd9xB,IAAwBA,EAAY,IACxC,IAAItN,EAAQorF,EAAO7pF,KAAKtB,KAAMsD,IAAOtD,KASrC,OARAD,EAAMsN,UAAY,GAClBtN,EAAMo/B,SAAW,OACjBp/B,EAAMgN,EAAIA,EACVhN,EAAMiN,EAAIA,EACVjN,EAAM8T,OAASA,EACf9T,EAAM0sB,KAAOA,EACb1sB,EAAMsN,UAAYA,EAClBtN,EAAMo/B,SAAWA,EACVp/B,EAEX,OAdAuqF,GAAU/zD,EAAY40D,GAcf50D,GACTurQ,IA2GE1rQ,GAA4B,SAAU+0D,GAEtC,SAAS/0D,EAAW9yB,EAAIs6B,EAAM5nB,EAAOwgB,EAAO/oB,EAASqkC,EAAWvjB,GAC5D,IAAIxuB,EAAQorF,EAAO7pF,KAAKtB,KAAMsD,IAAOtD,KAOrC,OANAD,EAAM0N,QAAUA,EAChB1N,EAAM69B,KAAOA,EACb79B,EAAM+9B,OAAStH,EACfz2B,EAAM,gBAAkBiW,EACxBjW,EAAM,oBAAsB+xC,EAC5B/xC,EAAMwuB,EAAIA,EACHxuB,EAEX,OAXAuqF,GAAUl0D,EAAY+0D,GAWf/0D,GACT0rQ,IA6BEC,GAAiC,WAKjC,OAJA,SAAyBh1R,EAAGC,GACxBhN,KAAK+M,EAAIA,EACT/M,KAAKgN,EAAIA,MkN/Tbs9E,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAY5DolQ,GAA2B,SAAU72M,GAErC,SAAS62M,IACL,OAAkB,OAAX72M,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAoB/D,OAtBAsqF,GAAU03M,EAAW72M,GAIrBN,IACI3jF,EAAS,OACV86R,EAAU3mS,UAAW,YAAQ,GAChCwvF,IACI3jF,EAAS,KACV86R,EAAU3mS,UAAW,aAAS,GACjCwvF,IACI3jF,EAAS,aACV86R,EAAU3mS,UAAW,kBAAc,GACtCwvF,IACI3jF,EAAS,WACV86R,EAAU3mS,UAAW,kBAAc,GACtCwvF,IACI3jF,EAAS,WACV86R,EAAU3mS,UAAW,iBAAa,GACrCwvF,IACI3jF,EAAS,IACV86R,EAAU3mS,UAAW,eAAW,GAC5B2mS,GACThjO,IAMEijO,GAA+B,SAAU92M,GAEzC,SAAS82M,IACL,OAAkB,OAAX92M,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVAsqF,GAAU23M,EAAe92M,GAIzBN,IACI3jF,EAAS,KACV+6R,EAAc5mS,UAAW,aAAS,GACrCwvF,IACI3jF,EAAS,IACV+6R,EAAc5mS,UAAW,aAAS,GAC9B4mS,GACTjjO,IAMEkjO,GAA4B,SAAU/2M,GAEtC,SAAS+2M,IACL,OAAkB,OAAX/2M,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAc/D,OAhBAsqF,GAAU43M,EAAY/2M,GAItBN,IACI3jF,EAAS,IACVg7R,EAAW7mS,UAAW,SAAK,GAC9BwvF,IACI3jF,EAAS,IACVg7R,EAAW7mS,UAAW,SAAK,GAC9BwvF,IACI3jF,EAAS,IACVg7R,EAAW7mS,UAAW,aAAS,GAClCwvF,IACI3jF,EAAS,IACVg7R,EAAW7mS,UAAW,cAAU,GAC5B6mS,GACTljO,IAMEmjO,GAA8B,SAAUh3M,GAExC,SAASg3M,IACL,OAAkB,OAAXh3M,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVAsqF,GAAU63M,EAAch3M,GAIxBN,IACI3jF,EAAS,IACVi7R,EAAa9mS,UAAW,SAAK,GAChCwvF,IACI3jF,EAAS,IACVi7R,EAAa9mS,UAAW,SAAK,GACzB8mS,GACTnjO,IAaEhpB,GAAyB,SAAUm1C,GAMnC,SAASn1C,EAAQhjC,EAAShS,GACtB,OAAOmqF,EAAO7pF,KAAKtB,KAAMgT,EAAShS,IAAYhB,KAqkBlD,OA3kBAsqF,GAAUt0C,EAASm1C,GAYnBn1C,EAAQ36C,UAAUoX,UAAY,WAC1BzS,KAAKoiS,sBACLpiS,KAAKqiS,YACLriS,KAAKmB,iBAET60C,EAAQ36C,UAAU+mS,oBAAsB,WACpCpiS,KAAK6tB,SAAW,IAAIC,GAAY9tB,KAAKgB,QAAQsC,IAC7CtD,KAAKq2B,WAAalK,GAAqBnsB,KAAKkb,OAC5Clb,KAAKsiS,iBACLtiS,KAAKo5D,QAAU,EACfp5D,KAAKuiS,SAAU,EACfviS,KAAKwiS,gBAETxsP,EAAQ36C,UAAUgnS,UAAY,WAC1B,IAAI/wQ,EAAY9wB,SAASosB,eAAe5sB,KAAKgB,QAAQsC,GAAK,QACtDm/R,EAAiBjiS,SAASosB,eAAe5sB,KAAKgB,QAAQsC,GAAK,mBAC3DguB,GAAaA,EAAU7wB,YACvB8D,EAAO+sB,GAEPmxQ,GAAkBA,EAAehiS,YACjC8D,EAAOk+R,IAMfzsP,EAAQ36C,UAAU0wG,OAAS,WAEvB,GADA/rG,KAAK0iS,WAAY,EACZ1iS,KAAKiP,SAUNjP,KAAK2iS,mBACL3iS,KAAKk6B,eAAel6B,KAAK4iS,WAAY5iS,KAAK0tB,cAX1B,CAChB1tB,KAAK6iS,WAAW7iS,KAAKuiS,SACrB,IAAI3pQ,GACAC,QAAQ,EAAOpB,KAAM,gBAAiB5F,QAAS7xB,MAEnDA,KAAKwmB,QAAQ,gBAAiBoS,GAC9B,IAAIkqQ,EAAa9iS,KAAK+iS,qBAAqB/iS,KAAK4iS,WAAY5iS,KAAK0tB,UACjE1tB,KAAKgjS,WAAWF,EAAWjB,SAAUiB,EAAWlB,QAAS5hS,KAAKijS,YAMlEjjS,KAAKwmB,QAAQ,UAAYqL,QAAS7xB,QAEtCg2C,EAAQ36C,UAAU8F,cAAgB,WAE9B,GADAnB,KAAKkjS,iBACAljS,KAAKiP,UAAYjP,KAAKmjS,OAAQ,CAE/B,IAAI7xQ,EAAYtxB,KAAK6tB,SAASmS,WAAY18B,GAAItD,KAAKgB,QAAQsC,GAAK,SAChEtD,KAAKgB,QAAQW,YAAY2vB,GAEzB,IAAI8xQ,EAAepjS,KAAK6tB,SAASw+C,aAAc/oE,GAAItD,KAAKgB,QAAQsC,GAAK,WACrEguB,EAAU3vB,YAAYyhS,GACtB,IAAIC,EAAcrjS,KAAK6tB,SAASsI,UAC5B7yB,GAAMtD,KAAKgB,QAAQsC,GAAK,QAASihC,eAAgBvkC,KAAKskC,OAAOtuB,MAC7D4nB,KAAQ59B,KAAK49B,MAAQ59B,KAAKq2B,WAAWjK,YAAa3e,QAAWzN,KAAKyN,QAClEqwB,OAAU99B,KAAKskC,OAAO9N,QAE1B4sQ,EAAazhS,YAAY0hS,KAGjCrtP,EAAQ36C,UAAU2nS,WAAa,SAAUnB,EAAUD,EAAS90Q,GACxD,GAAI9sB,KAAKsjS,OAAO7mS,QAAU,EACtB,OAAO,KAOX,IAAK,IALD8mS,EACAzkR,EAAQ,EACR0kR,EAAcxjS,KAAK6tB,SAASw+C,aAAc/oE,GAAItD,KAAKgB,QAAQsC,GAAK,qBAChE8/R,EAAe71Q,GAAWvtB,KAAKgB,QAAQsC,GAAK,UAC5CyJ,EAAoB,EAAf/M,KAAKyjS,QAAgB32Q,EAAO,GAAM80Q,EAAU5hS,KAAKy+B,aAAe,GAChErgC,EAAK,EAAGyE,EAAK7C,KAAKsjS,OAAQllS,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACrD,IAAIuvB,EAAQ9qB,EAAGzE,GACfmlS,EAAc,IAAIntQ,GAAWp2B,KAAKgB,QAAQsC,GAAK,cAAgBwb,EAAO9e,KAAK8uB,QAAQhQ,GAAQ,EAAG,UAAW,EAAG,MAC5G0kR,EAAY7hS,YAAY8rB,GAAW,IAAIs0Q,GAAgBh1R,EAAG/M,KAAKwiS,YAAY1jR,GAAS9e,KAAKo5D,SAAWyoO,EAAW7hS,KAAKy+B,aAAe,IAAK9Q,EAAO,IAAIP,GAAKN,EAAMA,GAAO,GAAIy2Q,EAAa,OACtLzkR,IAEJskR,EAAazhS,YAAY6hS,IAE7BxtP,EAAQ36C,UAAU0nS,qBAAuB,SAAUH,EAAYl1Q,GAC3D,IAOI2F,EAPAqwQ,EAAan2Q,GAAWvtB,KAAKgB,QAAQsC,IACrCiyB,EAAgB,IAAIwsQ,GAAgB,EAAG,GACvC4B,EAAc,IAAI5B,GAAgB,EAAG,GAErCzwQ,EAAY/D,GAAWvtB,KAAKgB,QAAQsC,GAAK,QACzC8/R,EAAe71Q,GAAWvtB,KAAKgB,QAAQsC,GAAK,UAC5C+/R,EAAc91Q,GAAWvtB,KAAKgB,QAAQsC,GAAK,SAE3CsgS,GAAQ,EACRC,GAAS,EACThC,GAAW,EACX90R,EAAI,EACJC,EAAI,EAqBR,GApBAhN,KAAK4+B,UAAY,EACG,KAAhB5+B,KAAK4kF,SACL5kF,KAAK8jS,YAAY/tR,QAAU/V,KAAK+jS,SAEhC/jS,KAAKo6B,QAAQ39B,OAAS,GACtB42B,EAAOrzB,KAAKgkS,sBAAsBpB,EAAY5iS,KAAK0tB,SAAS3gB,EAAG/M,KAAK0tB,SAAS1gB,GAC7E42R,GAAQ,IAGRvwQ,EAAOrzB,KAAKikS,gBAAgBrB,EAAYl1Q,EAAU6H,EAAeouQ,GAC5D3jS,KAAKkkS,SAONn3R,GADA82R,EAAUxwQ,EAAKtmB,EAAK2gB,EAAS3gB,EAAI/M,KAAKgvQ,WAAWjiQ,GACnC,EAAI/M,KAAKy+B,cALvBojQ,IADA+B,EAASvwQ,EAAKrmB,EAAK0gB,EAAS1gB,EAAIhN,KAAKgvQ,WAAWhiQ,GAEhDA,EAAK42R,EAAQ,EAAI5jS,KAAKy+B,eAOV,KAAhBz+B,KAAK4kF,OAAe,CACpB,IAAIu/M,EAAa33Q,GAAYxsB,KAAK4kF,OAAQ5kF,KAAKokS,WAAWruR,OAAyB,EAAf/V,KAAK+jS,SACpElC,EAAW7hS,KAAKy+B,aAAe,GAEhCjJ,EAAY,MADc,EAAfx1B,KAAKyjS,SAAiBI,GAAWD,GAAU/B,EAA+B,EAApB7hS,KAAKy+B,eACzC,IAAM0lQ,EACnC,MAAQ9wQ,EAAKrd,OAAU6tR,GAAWD,GAAU/B,EAA+B,EAApB7hS,KAAKy+B,cAAoC,EAAfz+B,KAAKyjS,SACtF,IAAMU,EACNE,EAAgBrkS,KAAK6tB,SAASsI,UAC9B7yB,GAAMtD,KAAKgB,QAAQsC,GAAK,eAAgBihC,eAAgB,EACxD3G,KAAQ,KAAMnwB,QAAW,GAAKqwB,OAAU99B,KAAKq2B,WAAW9J,kBAAmBgC,EAAKiH,IAEpF4tQ,EAAazhS,YAAY0iS,GAE7B,IAAI9mS,EAAQyC,KAAKskC,OAAOtuB,MAAQ,EAC5BsuR,EAAY,IAAIpuQ,GAAK34B,EAAQwP,EAAGxP,EAAQyP,EAAGqmB,EAAKrd,MAAQzY,EAAO81B,EAAKtd,OAASxY,GAYjF,GAXA6lS,EAAa5/R,aAAa,UAAW,MACjCxD,KAAKukS,iBAAoBvkS,KAAKmjS,QAAWnjS,KAAKuiS,QAI9CviS,KAAKwkS,UAAUd,EAAYrwQ,EAAKtmB,EAAGsmB,EAAKrmB,GAHxChN,KAAKykS,kBAAkBf,EAAYrwQ,GAKvC/B,EAAU9tB,aAAa,UAAW6vB,EAAKtd,OAAS/V,KAAKskC,OAAOtuB,OAAahW,KAAKkkS,SAAa,EAAIlkS,KAAKy+B,eAAevxB,YACnHokB,EAAU9tB,aAAa,SAAU6vB,EAAKrd,MAAQhW,KAAKskC,OAAOtuB,OAAYhW,KAAKkkS,SAAiBlkS,KAAKy+B,aAAT,IAAwBvxB,YAChHokB,EAAU9tB,aAAa,UAAW,KAClC6/R,EAAY7/R,aAAa,IlNxOjC,SAA8B+6B,EAAIC,EAAInL,EAAMkC,EAAekJ,EAAc/xB,EAAKC,EAAQH,EAAMkyB,EAAMC,EAAMC,GACpG,IAAIpJ,EAAY,GACZqJ,EAASxL,EAAKtmB,EACd+xB,EAASzL,EAAKrmB,EACdgJ,EAAQqd,EAAKtmB,EAAIsmB,EAAKrd,MACtBD,EAASsd,EAAKrmB,EAAIqmB,EAAKtd,OAmE3B,OAlEA6oB,EAAYA,GAAwB,EAChClyB,GAKA8oB,GAJAA,EAAYA,EAAUjb,OAAO,OAAuB,KAAOukB,EAASN,GAAM,MAAQK,EAAS,IACrFC,EAAS,KAAOD,EAASN,GAAM,IAAMO,EAAS,QAClC9oB,EAAQuoB,GAAM,MAAiB,MAAQvoB,EAAQ,IAC3D8oB,EAAS,MAAgB,KAAOA,EAASN,KACzBjkB,OAAO,QAAuB,KAAOxE,EAASyoB,GAAM,MAAQxoB,EAAQ,MACzE,KAAOA,EAAQuoB,GAAM,OACjB,IAAjBE,IAEAjJ,GADAA,EAAYA,EAAUjb,OAAO,OAAcgb,EAAcxoB,EAAI0xB,EAAe,GAAK,QAC3DlkB,OAAO,OAAcmkB,EAAOE,GAAa,KAAO7oB,EAAS0oB,EAAeG,IAC9FpJ,GAAa,QAAsB,KAAOzf,EAAS0oB,GAAgB,KAAOC,EAAOE,GAC7E,KAAO7oB,EAAS0oB,EAAeG,IAGnCpJ,EADCD,EAAcxoB,EAAI0xB,EAAe,EAAKI,EAC3BrJ,EAAUjb,OAAO,OAAcgb,EAAcxoB,EAAI0xB,EAAe,GAAK,IAAM1oB,EACnF,OAAc8oB,EAASN,GAAM,IAAMxoB,EAAS,MAAQ8oB,EAAS,IAC3D9oB,EAAS,MAAiB,KAAOA,EAASyoB,GAAM,MAGjC,IAAjBC,EACYjJ,EAAUjb,OAAO,OAAcskB,EAASN,GAAM,IAAMxoB,EAAS,MAAQ8oB,EAAS,IACpF9oB,EAAS,MAAiB,KAAOA,EAASyoB,GAAM,MAG1ChJ,EAAUjb,OAAO,QAAwB,KAAOxE,EAASyoB,GAAM,OAI9E7xB,GAGL6oB,GAFAA,EAAYA,EAAUjb,OAAO,OAAuB,KAAOukB,EAASN,GAAM,MAAQK,EAAS,MAC1E,KAAOA,EAASN,GAAM,MAAiB,OAAchJ,EAAcxoB,EAAI0xB,EAAe,GAAK,QACtFlkB,OAAO,OAAcmkB,EAAOE,GAAa,KAAOrJ,EAAcvoB,EAAI4xB,IAIxFpJ,GAFAA,GADAA,GAAa,QAAsB,IAAOD,EAAe,EAAI,KAAOmJ,EAAOE,GAAa,KAAOrJ,EAAcvoB,EAAI4xB,IAC3FrkB,OAAO,OAAcgb,EAAcxoB,EAAI0xB,EAAe,GAAK,MAAiB,OAC3FzoB,EAAQuoB,GAAM,MAAiB,QAAkB,MAAiB,MAAgB,KAAOO,EAASN,KACnFjkB,OAAO,QAAuB,KAAOxE,EAASyoB,GAAM,QAAkB,MAC3E,KAAOxoB,EAAQuoB,GAAM,MAClC,OAAcM,EAASN,GAAM,MAAiB,QAAmB,MACpD,MAAiB,KAAOxoB,EAASyoB,GAAM,OAEnDhyB,GAKLgpB,GAFAA,GAFAA,EAAYA,EAAUjb,OAAO,OAAuB,KAAOukB,EAASN,GAAM,MAAQK,EAAS,MAC1E,KAAOA,EAASN,GAAM,QACjBhkB,OAAO,OAAcvE,EAAQuoB,GAAM,MAAiB,QAAkB,MAC3E,MAAgB,KAAOO,EAASN,GAAM,QAAuB,KAAOjJ,EAAcvoB,EAAIyxB,EAAe,KAChGlkB,OAAO,OAAcvE,EAAQyoB,EAAeG,GAAa,KAAOD,EAAOC,IAI7FpJ,GAFAA,GADAA,GAAa,OAASxf,EAAQyoB,GAAgB,MAAe,KAAOzoB,EAAQyoB,EAAeG,GAAa,KAAOD,EAAOC,IAChGrkB,OAAO,QAAuB,KAAOgb,EAAcvoB,EAAIyxB,EAAe,GACxF,QAAuB,KAAO1oB,EAASyoB,GAAM,MAAQxoB,EAAQ,MAAiB,KAAOA,EAAQuoB,GAAM,QACjFhkB,OAAO,OAAcskB,EAASN,GAAM,MAAiB,MAAQM,EAAS,MAC3E,MAAiB,KAAO9oB,EAASyoB,GAAM,QAKxDhJ,GAFAA,EAAYA,EAAUjb,OAAO,MAAaskB,EAASN,GAAM,MAAiB,QAAmB,MAC5E,MAAiB,KAAOO,EAASN,GAAM,QAAwB,KAAOjJ,EAAcvoB,EAAIyxB,EAAe,KAClGlkB,OAAO,OAAcskB,EAASJ,EAAeG,GAAa,KAAOD,EAAOC,IAK9FpJ,GAHAA,GADAA,GAAa,OAASqJ,EAASJ,GAAgB,MAAe,KAAOI,EAASJ,EAAeG,GAAa,KAAOD,EAAOC,IAClGrkB,OAAO,QAAwB,KAAOgb,EAAcvoB,EAAIyxB,EAAe,GACzF,QAAwB,KAAO1oB,EAASyoB,GAAM,MAAQK,EAAS,MAClD,KAAOA,EAASN,GAAM,QACjBhkB,OAAO,OAAcvE,EAAQuoB,GAAM,MAAiB,MAAQvoB,EAAQ,MACzE,MAAgB,KAAOD,EAASyoB,GAC7C,QAAuB,KAAOM,EAASN,GAAM,MAAQxoB,EAAQ,MAChD,KAAOA,EAAQuoB,GAAM,MAAiB,OAEpD/I,EkNgK2BS,CAAcj2B,KAAKmuB,GAAInuB,KAAKouB,GAAIk2Q,EAAW/uQ,EAAev1B,KAAKy+B,aAAcmlQ,EAAO/B,EAAUgC,EAAQF,EAAY52R,EAAG42R,EAAY32R,EAAGhN,KAAK4+B,YACnK5+B,KAAK0kS,aAAc,CACnBrB,EAAY7/R,aAAa,SAAUgI,GAAQwiG,KAAO,GAAK,8BACvD,IAAIh8D,EAAS,sGACbA,GAAU,yGACVA,GAAU,oGACV,IAAI2yP,EAAa3kS,KAAK6tB,SAAS+qF,aAC/B+rL,EAAWnhS,aAAa,KAAM,0BAC9B4/R,EAAazhS,YAAYgjS,GACzBA,EAAW3iS,UAAYgwC,EAI3B,OAFAqxP,EAAY7/R,aAAa,SAAUxD,KAAKskC,OAAO9N,OAC/Cx2B,KAAK4kS,WAAW,IAAI7C,GAAgBh1R,EAAGC,GAAI60R,GAAWgC,IAAWD,IAAU/B,EAAUxuQ,GAC9E,IAAIsuQ,GAAKE,GAAWgC,IAAWD,IAAU/B,IAEpD7rP,EAAQ36C,UAAUupS,WAAa,SAAU9wQ,EAAO+tQ,EAAUD,EAASvuQ,GAC/D,IAAIryB,EAAUR,SAASosB,eAAe5sB,KAAKgB,QAAQsC,GAAK,SACpDu+R,GACA7gS,EAAQwC,aAAa,YAAa,eAAiBxD,KAAKy+B,aAAe,KAEvEmjQ,GACA5gS,EAAQwC,aAAa,YAAa,aAAexD,KAAKy+B,aAAe,QAG7EuX,EAAQ36C,UAAUwpS,kBAAoB,WAClC7kS,KAAKsiS,iBACgE,KAAjEtiS,KAAK4kF,OAAOr1E,QAAQ,OAAQ,IAAIA,QAAQ,SAAU,IAAIW,SACtDlQ,KAAKsiS,cAAgBtiS,KAAKsiS,cAAc/nR,OAAOva,KAAK4kF,SAExD5kF,KAAKsiS,cAAgBtiS,KAAKsiS,cAAc/nR,OAAOva,KAAKo6B,UAExD4b,EAAQ36C,UAAUwnS,WAAa,SAAUiC,GACrC,IAIIplD,EAIA1gN,EAEA8uB,EACAi3O,EAXAhvR,EAAS,EACTC,EAAQ,EACRgvR,EAAW,EAIXt4Q,EAAOhuB,KAAWsB,KAAKokS,UAAW,MAAM,GAAS,WACjDhB,EAAe71Q,GAAWvtB,KAAKgB,QAAQsC,GAAK,UAE5C2hS,EAAa,GAGjBjlS,KAAK6kS,oBACL,IAAI7/K,EAAgBhlH,KAAK4kF,OAAOr1E,QAAQ,OAAQ,IAAIA,QAAQ,SAAU,IAAIW,OACtEg1R,EAAiC,KAAlBlgL,EAAwBhlH,KAAK+jS,QAAU,EACtDoB,GAAQ,EACRC,GAAW,EACfplS,KAAKwiS,eACL,IAAIS,EAAcjjS,KAAKsjS,OAAO7mS,OAAS,EAAK,GAAK,EAC7C4oS,EAAiBrlS,KAAKsjS,OAAO7mS,OAAS,EAAK,EAAI,EAG/Cs0C,EAAM,GAAKv1B,WADA,QACyBA,WAAWkR,EAAKI,MACnDg4Q,IACDt3Q,GAAcxtB,KAAKgB,QAAQsC,GAAK,SAChCkqB,GAAcxtB,KAAKgB,QAAQsC,GAAK,gBAChCkqB,GAAcxtB,KAAKgB,QAAQsC,GAAK,oBAChCkqB,GAAc,2BAIlB,IAAK,IAFDxa,EAAU,IAAIujB,GAAWv2B,KAAKgB,QAAQsC,GAAK,QAAwB,EAAftD,KAAKyjS,QAA6B,EAAfzjS,KAAK+jS,QAA6B,EAAf/jS,KAAKo5D,SAAgC,IAAjBp5D,KAAK+jS,QAAgB,EAAI,GAAK,QAAS,IACrJ1vR,ElN5CZ,SAA4BrB,EAAS0Z,EAAM8J,EAAOl2B,GAC9C,IACIqsB,EAGAF,EAJAwS,KAGApR,EAAW,IAAIC,GAAY,IAoB/B,OAlBAmR,GAEI37B,GAAM0P,EAAQ1P,GACdyJ,EAAKiG,EAAQjG,EACbC,EAAKgG,EAAQhG,EACb4wB,KAAQpH,EACRzF,YAAarE,EAAKI,KAClBkE,aAActE,EAAKM,UACnBiE,cAAevE,EAAKO,WACpBiE,cAAexE,EAAKK,WACpBoE,cAAene,EAAQa,OACvBxG,UAAa2F,EAAQ3F,UACrBI,QAAWif,EAAKjf,QAChByxB,oBAAqBlsB,EAAQmsB,UAEjC1S,EAA+B,iBAAjBzZ,EAAQyZ,KAAoBzZ,EAAQyZ,KAAOzZ,EAAQyZ,KAAK,GACtEE,EAAakB,EAASuD,WAAW6N,EAAexS,GAChDnsB,EAAOqB,YAAYgrB,GACZA,EkNoBiB2J,CAAYtjB,EAAS0Z,EAAM,KAAM02Q,GAC5Cj9Q,EAAI,EAAGm/Q,EAAetlS,KAAKsiS,cAAc7lS,OAAQ0pB,EAAIm/Q,EAAcn/Q,IAAK,CAC7E,IAAI2a,EAAiB9gC,KAAKsiS,cAAcn8Q,GAAG5W,QAAQ,gBAAiB,OAC/DA,QAAQ,kBAAmB,QAC3BrS,MAAM,YACJsvB,GAAYxsB,KAAKsiS,cAAcn8Q,GAAIuG,GAC/B,IAANvG,GAA+B,KAAlB6+F,GACdhlH,KAAKwiS,YAAYh+R,MAAwB,KAAlBwgH,EAAwBhlH,KAAY,QAAI,GAAKgT,EAAQhG,EAAI+I,GAEpF,IAAK,IAAI5Z,EAAI,EAAG0F,EAAMi/B,EAAerkC,OAAQN,EAAI0F,EAAK1F,IAAK,CAEvD6oS,EAAW,EACXI,GAAW,EACXrvR,GAAUg7B,EACV,IAAK,IAAIw0P,EAAM,EAAG14I,GAJlB6yF,EAAQ5+M,EAAe3kC,GAAGoT,QAAQ,OAAQ,WAAWA,QAAQ,SAAU,YAAYrS,MAAM,SAIzDT,OAAQ8oS,EAAM14I,EAAO04I,IAEa,MAD9Dz3O,EAAO4xL,EAAM6lD,IACJh2R,QAAQ,OAAQ,IAAIA,QAAQ,SAAU,IAAIW,SAC/C80R,GA3BC,EA4BGI,IAAaD,GACbJ,GAAgBh4R,EAAmB,EAAf/M,KAAKyjS,SAAgBR,EAAaoC,GAClDt0P,GAAIA,GAAM,EAAam0P,EAAc,GAAItnQ,KAAM,IACnDsnQ,EAAc,MAIVH,EADAI,GAASC,GACOr4R,EAAsB,KAAlBi4G,EAAyC,EAAfhlH,KAAKyjS,SAAgBR,EAAaoC,GACtD,EAAfrlS,KAAKyjS,YAMxB2B,GAAW,EACXpmQ,EAAeh/B,KAAK6tB,SAASuR,YAAY2lQ,EAAa,IACtD1wR,EAAc1S,YAAYq9B,GACtB8uB,EAAKvvD,QAAQ,QAAU,GACvB0mS,EAAa,mBACbv4Q,EAAKK,WAAa,OAClB,EAAevpB,aAAa,OAAQxD,KAAKokS,UAAU5tQ,OAASx2B,KAAKq2B,WAAWhK,oBAG5E44Q,EAAa,GACbv4Q,EAAKK,WAAa,SAClB,EAAevpB,aAAa,OAAQxD,KAAKokS,UAAU5tQ,OAASx2B,KAAKq2B,WAAW/J,oBAEhF,EAAezQ,YAAciyC,EAAOA,EAAKv+C,QAAQ,wBAAyB,IAC1Ey1R,GAAYx4Q,GAAYshC,EAAMphC,GAAM1W,MACjB,KAAfivR,GACAjmQ,EAAax7B,aAAa,QAASyhS,GAEvCE,GAAQ,GAGhBH,GA/DS,EAgEThvR,EAAQ3J,KAAKC,IAAI0J,EAAOgvR,IAGhChlS,KAAK8jS,YAAc,IAAI12Q,GAAKpX,GAASA,EAAQ,EAAK,EAAIhW,KAAKyjS,QAAW,GAAI1tR,GAC1E/V,KAAK8jS,YAAY9tR,OAAUitR,EAAaoC,EACxC,IAAIrkS,EAAWqT,EAAc9C,WAAW,GACxC,GAAsB,KAAlByzG,GAAwBhkH,EAAS,CACjC0rB,EAAKK,WAAa,OAClB,IAAIy4Q,GAAWxlS,KAAK8jS,YAAY9tR,MAAS,EAAIhW,KAAKo5D,SAAY,EAAI5sC,GAAYw4F,EAAet4F,GAAM1W,MAAQ,EAC3GhV,EAAQwC,aAAa,IAAKgiS,EAAQt4R,cAG1C8oC,EAAQ36C,UAAU6+B,eAAiB,SAAU0oQ,EAAYl1Q,GACrD,IAAIkL,GAAaC,QAAQ,EAAOpB,KAAM,gBAAiB5F,QAAS7xB,MAChEA,KAAKwmB,QAAQ,gBAAiBoS,GAC9B,IAAIt4B,EAASE,SAASosB,eAAe5sB,KAAKgB,QAAQsC,IAC9CmiS,EAAenlS,EAAO6E,kBAI1B,GAHIsgS,GACAA,EAAalhS,SAEZq0B,EAASC,OAmBVtL,GAAWvtB,KAAKgB,QAAQsC,GAAK,YAAYiB,aAnBvB,CAGlB,IAFA,IAAI81B,EAAkBr6B,KAAKg6B,WAAWh6B,KAAKxD,MACvCkG,EAAOvB,EAAc,OAASmC,GAAItD,KAAKgB,QAAQsC,GAAK,oBACjD+2B,GAAmBA,EAAgB59B,OAAS,GAC/CiG,EAAKf,YAAY04B,EAAgB,IAErC/5B,EAAOqB,YAAYe,GACnB,IAAI2wB,EAAOrzB,KAAKgB,QAAQ4K,wBACxB5L,KAAKo5D,QAAU,EACfp5D,KAAK8jS,YAAc,IAAI12Q,GAAKiG,EAAKrd,MAAOqd,EAAKtd,QAC7C,IAAI2vR,EAAc1lS,KAAKikS,gBAAgBrB,EAAYl1Q,EAAU,IAAIq0Q,GAAgB,EAAG,GAAI,IAAIA,GAAgB,EAAG,KAC3G/hS,KAAKukS,iBAAoBvkS,KAAKmjS,QAAWnjS,KAAKuiS,QAI9CviS,KAAKwkS,UAAUxkS,KAAKgB,QAAS0kS,EAAY34R,EAAG24R,EAAY14R,GAHxDhN,KAAKykS,kBAAkBzkS,KAAKgB,QAAS0kS,KAUjD1vP,EAAQ36C,UAAU2oS,sBAAwB,SAAUttQ,EAAQ3pB,EAAGC,GAC3D,IAAIgJ,EAAQhW,KAAK8jS,YAAY9tR,MAAS,EAAIhW,KAAKyjS,QAC3C1tR,EAAS/V,KAAK8jS,YAAY/tR,OAAU,EAAI/V,KAAK+jS,QAC7C2B,EAAc,IAAIxvQ,GAAKnpB,EAAI,EAAI/M,KAAKo5D,QAASpsD,EAAI+I,EAAS/V,KAAKo5D,QAASpjD,EAAOD,GAOnF,OANI2vR,EAAY14R,EAAI0pB,EAAO1pB,IACvB04R,EAAY14R,GAAM04R,EAAY3vR,OAAS,EAAI/V,KAAKo5D,SAEhDssO,EAAY34R,EAAI24R,EAAY1vR,MAAQ0gB,EAAO3pB,EAAI2pB,EAAO1gB,QACtD0vR,EAAY34R,GAAM24R,EAAY1vR,MAAQ,EAAIhW,KAAKo5D,SAE5CssO,GAEX1vP,EAAQ36C,UAAU4oS,gBAAkB,SAAUvtQ,EAAQivQ,EAAgBpwQ,EAAeouQ,GACjF,IAAIj2Q,EAAW,IAAIq0Q,GAAgB4D,EAAe54R,EAAG44R,EAAe34R,GAChEgJ,EAAQhW,KAAK8jS,YAAY9tR,MAAS,EAAIhW,KAAKyjS,QAC3C1tR,EAAS/V,KAAK8jS,YAAY/tR,OAAU,EAAI/V,KAAK+jS,QAC7C6B,EAAe5lS,KAAK2L,OACpBk6R,EAAQ7lS,KAAKgvQ,WAAWjiQ,EACxB+4R,EAAQ9lS,KAAKgvQ,WAAWhiQ,EACxB+4R,EAAUrvQ,EAAO3pB,EACjBi5R,EAAUtvQ,EAAO1pB,EAgErB,OA/DKhN,KAAKkkS,UAiCNx2Q,EAAW,IAAIq0Q,GAAgBr0Q,EAAS3gB,EAAI84R,EAAQD,EAAcl4Q,EAAS1gB,EAAI84R,EAAQ9lS,KAAK8jS,YAAY/tR,OAAS,EAAK/V,KAAY,SAClIu1B,EAAcvoB,EAAI22R,EAAY32R,EAAI+I,EAAS,GACtC2X,EAAS3gB,EAAIiJ,EAAQhW,KAAKy+B,aAAesnQ,EAAUrvQ,EAAO1gB,OAAWhW,KAAe,cACrF0tB,EAAS3gB,GAAK44R,EAAe54R,EAAI2pB,EAAO1gB,MAAQ0gB,EAAO1gB,MAAQ2vR,EAAe54R,GACxE84R,EAAQD,GAAgB5vR,EAAQhW,KAAKy+B,eAE3C/Q,EAAS3gB,EAAIg5R,IACbr4Q,EAAS3gB,GAAK44R,EAAe54R,EAAI,EAAI,EAAI44R,EAAe54R,GAAK84R,EAAQD,GAErEl4Q,EAAS1gB,GAAKg5R,IACdzwQ,EAAcvoB,GAAMg5R,EAAUt4Q,EAAS1gB,EACvC22R,EAAY32R,GAAMg5R,EAAUt4Q,EAAS1gB,EACrC0gB,EAAS1gB,EAAIg5R,GAEbt4Q,EAAS1gB,EAAI+I,GAAUiwR,EAAUtvQ,EAAO3gB,SACxCwf,EAAcvoB,GAAO0gB,EAAS1gB,EAAI+I,GAAWiwR,EAAUtvQ,EAAO3gB,QAC9D4tR,EAAY32R,GAAO0gB,EAAS1gB,EAAI+I,GAAWiwR,EAAUtvQ,EAAO3gB,QAC5D2X,EAAS1gB,GAAO0gB,EAAS1gB,EAAI+I,GAAWiwR,EAAUtvQ,EAAO3gB,SAEzDwf,EAAcvoB,EAAIhN,KAAKy+B,aAAe,EAAI1oB,EAAS/V,KAAKouB,KACxDmH,EAAcvoB,EAAI+I,EAAS/V,KAAKouB,GAAKpuB,KAAKy+B,aAAe,EACzDklQ,EAAY32R,EAAI+I,EAChB/V,KAAK4+B,UAAY,GAEjBrJ,EAAcvoB,EAAIhN,KAAKy+B,aAAe,EAAIz+B,KAAKouB,KAC/CmH,EAAcvoB,EAAIhN,KAAKouB,GAAKpuB,KAAKy+B,aAAe,EAChDklQ,EAAY32R,EAAI,EAChBhN,KAAK4+B,UAAY,KA3DrBlR,EAAW,IAAIq0Q,GAAgBr0Q,EAAS3gB,EAAI84R,EAAQ7lS,KAAK8jS,YAAY9tR,MAAQ,EAAIhW,KAAKo5D,QAAS1rC,EAAS1gB,EAAI84R,EAAQ9lS,KAAK8jS,YAAY/tR,OAAU,EAAI/V,KAAKo5D,QAAWp5D,KAAKy+B,aAAemnQ,GACvLrwQ,EAAcxoB,EAAI42R,EAAY52R,EAAIiJ,EAAQ,GACtC0X,EAAS1gB,EAAIg5R,GAAYhmS,KAAe,cACxC0tB,EAAS1gB,GAAK24R,EAAe34R,EAAI,EAAI,EAAI24R,EAAe34R,GAAK84R,EAAQF,GAErEl4Q,EAAS1gB,EAAI+I,EAAS/V,KAAKy+B,aAAeunQ,EAAUtvQ,EAAO3gB,SAC3D2X,EAAS1gB,GAAK24R,EAAe34R,EAAI0pB,EAAO3gB,OAAS2gB,EAAO3gB,OAAS4vR,EAAe34R,GAC1E84R,EAAQ9lS,KAAK8jS,YAAY/tR,OAAU,EAAI/V,KAAKo5D,QAAWp5D,KAAKy+B,aAAemnQ,GAErFjC,EAAY52R,EAAIiJ,EAAQ,EACpB0X,EAAS3gB,EAAIg5R,IACbxwQ,EAAcxoB,GAAMg5R,EAAUr4Q,EAAS3gB,EACvC42R,EAAY52R,GAAMg5R,EAAUr4Q,EAAS3gB,EACrC2gB,EAAS3gB,EAAIg5R,GAEbr4Q,EAAS3gB,EAAIiJ,EAAQ+vR,EAAUrvQ,EAAO1gB,QACtCuf,EAAcxoB,GAAO2gB,EAAS3gB,EAAIiJ,GAAU+vR,EAAUrvQ,EAAO1gB,OAC7D2tR,EAAY52R,GAAO2gB,EAAS3gB,EAAIiJ,GAAU+vR,EAAUrvQ,EAAO1gB,OAC3D0X,EAAS3gB,GAAO2gB,EAAS3gB,EAAIiJ,GAAU+vR,EAAUrvQ,EAAO1gB,QAExDuf,EAAcxoB,EAAI/M,KAAKy+B,aAAe,EAAIzoB,EAAQhW,KAAKmuB,KACvDoH,EAAcxoB,EAAIiJ,EAAQhW,KAAKmuB,GAAKnuB,KAAKy+B,aAAe,EACxDklQ,EAAY52R,EAAIiJ,EAChBhW,KAAK4+B,UAAY,GAEjBrJ,EAAcxoB,EAAI/M,KAAKy+B,aAAe,EAAIz+B,KAAKmuB,KAC/CoH,EAAcxoB,EAAI/M,KAAKmuB,GAAKnuB,KAAKy+B,aAAe,EAChDklQ,EAAY52R,EAAI,EAChB/M,KAAK4+B,UAAY,IAkClB,IAAI1I,GAAKxI,EAAS3gB,EAAG2gB,EAAS1gB,EAAGgJ,EAAOD,IAEnDigC,EAAQ36C,UAAUopS,kBAAoB,SAAUf,EAAYrwQ,GACxD,IAGI4yQ,EAHAlmS,EAAQC,KACR+M,EAAIyO,WAAWkoR,EAAWh/R,MAAM8H,MAChCQ,EAAIwO,WAAWkoR,EAAWh/R,MAAMgI,KAEpC,IAAI4rB,OAAcC,QAAQmrQ,GACtBx4R,SAAU,IACVstB,SAAU,SAAUv4B,GAChBgmS,EAAchmS,EAAKw4B,UAAYx4B,EAAKiL,SACpCw4R,EAAWh/R,MAAMiyC,UAAY,KAC7B+sP,EAAWh/R,MAAM8H,KAAQO,EAAIk5R,GAAc5yQ,EAAKtmB,EAAIA,GAAM,KAC1D22R,EAAWh/R,MAAMgI,IAAOM,EAAIi5R,GAAc5yQ,EAAKrmB,EAAIA,GAAM,MAE7D6R,IAAK,SAAU+D,GACX7iB,EAAMykS,UAAUd,EAAYrwQ,EAAKtmB,EAAGsmB,EAAKrmB,GACzCjN,EAAMymB,QAAQ,qBAAuBqL,QAAS9xB,QAI1Di2C,EAAQ36C,UAAUmpS,UAAY,SAAUd,EAAY32R,EAAGC,GACnD02R,EAAWh/R,MAAM8H,KAAOO,EAAI,KAC5B22R,EAAWh/R,MAAMgI,IAAMM,EAAI,MAE/BgpC,EAAQ36C,UAAUsnS,iBAAmB,WACjC,GAAI3iS,KAAKiP,SACL,IAEQzO,SAASgB,iBAAiBxB,KAAKiP,UAAUxS,SACzCuD,KAAKg6B,WAAaC,GAAiBz5B,SAASmC,cAAc3C,KAAKiP,UAAUjN,UAAUkO,SAG3F,MAAOrP,GACHb,KAAKg6B,WAAaC,GAAiBj6B,KAAKiP,YAKpD+mC,EAAQ36C,UAAU6qS,QAAU,WACxB,IAAInmS,EAAQC,KACR0gI,EAAiBnzG,GAAWvtB,KAAKgB,QAAQsC,IAC7C,GAAIo9H,EAAgB,CAChB,IAAIylK,EAAiBzlK,EAAe9jH,WAChCwpR,EAAY5qR,WAAW2qR,EAAetzR,aAAa,aAAe,EACtE,IAAIylB,OAAcC,QAAQ4tQ,GACtBj7R,SAAU,IACVstB,SAAU,SAAUv4B,GAEhBF,EAAM6gJ,kBAAkBulJ,EAAgBC,EAAYnmS,EAAKw4B,UAAYx4B,EAAKiL,WAE9E2T,IAAK,SAAU+D,GACX7iB,EAAM2iS,WAAY,EAClB3iS,EAAMsmS,aAAaF,QAKnCnwP,EAAQ36C,UAAUulJ,kBAAoB,SAAU0lJ,EAAc74R,EAASgrB,GACnE6tQ,EAAa5hS,MAAMiyC,UAAY,GAC/B2vP,EAAa9iS,aAAa,WAAYiK,EAAUgrB,GAAWvrB,aAK/D8oC,EAAQ36C,UAAUgrS,aAAe,SAAUC,GACvCA,EAAa9iS,aAAa,UAAW,KACjCxD,KAAKiP,WAAajP,KAAKmjS,SACvBmD,EAAa5hS,MAAM4xC,QAAU,QAEjCt2C,KAAKwmB,QAAQ,qBAAuBqL,QAAS7xB,QAMjDg2C,EAAQ36C,UAAUmxG,eAAiB,WAE/B,OAAOxsG,KAAKgtG,kBAMhBh3D,EAAQ36C,UAAUkkC,cAAgB,WAC9B,MAAO,WAMXyW,EAAQ36C,UAAUiX,QAAU,WACxB64E,EAAO9vF,UAAUiX,QAAQhR,KAAKtB,MAC9BA,KAAKgB,QAAQ8C,UAAUS,OAAO,cAOlCyxC,EAAQ36C,UAAUmsF,kBAAoB,SAAUiF,EAASC,GACrD1sF,KAAKuiS,SAAU,EACfviS,KAAK+rG,UAETlhB,IACI3jF,GAAS,IACV8uC,EAAQ36C,UAAW,cAAU,GAChCwvF,IACI3jF,GAAS,IACV8uC,EAAQ36C,UAAW,cAAU,GAChCwvF,IACI3jF,GAAS,IACV8uC,EAAQ36C,UAAW,oBAAgB,GACtCwvF,IACI3jF,EAAS,OACV8uC,EAAQ36C,UAAW,YAAQ,GAC9BwvF,IACI3jF,EAAS,KACV8uC,EAAQ36C,UAAW,cAAU,GAChCwvF,IACI3jF,EAAS,MACV8uC,EAAQ36C,UAAW,eAAW,GACjCwvF,IACI9iF,GAAU+kB,KAAM,OAAQC,WAAY,SAAUyJ,MAAO,KAAMxJ,UAAW,SAAUC,WAAY,YAAc+0Q,KAC3GhsP,EAAQ36C,UAAW,iBAAa,GACnCwvF,IACI3jF,EAAS,OACV8uC,EAAQ36C,UAAW,gBAAY,GAClCwvF,IACI3jF,GAAS,IACV8uC,EAAQ36C,UAAW,uBAAmB,GACzCwvF,IACI3jF,GAAS,IACV8uC,EAAQ36C,UAAW,gBAAY,GAClCwvF,IACI3jF,GAAS,IACV8uC,EAAQ36C,UAAW,kBAAc,GACpCwvF,IACI9iF,GAAUyuB,MAAO,UAAWxgB,MAAO,IAAOisR,KAC3CjsP,EAAQ36C,UAAW,cAAU,GAChCwvF,IACI3jF,OACD8uC,EAAQ36C,UAAW,eAAW,GACjCwvF,IACI3jF,EAAS,KACV8uC,EAAQ36C,UAAW,kBAAc,GACpCwvF,IACI9iF,GAAUgF,EAAG,EAAGC,EAAG,GAAKm1R,KACzBnsP,EAAQ36C,UAAW,kBAAc,GACpCwvF,IACI3jF,OACD8uC,EAAQ36C,UAAW,eAAW,GACjCwvF,IACI3jF,OACD8uC,EAAQ36C,UAAW,cAAU,GAChCwvF,IACI9iF,GAAUgF,EAAG,EAAGC,EAAG,GAAKm1R,KACzBnsP,EAAQ36C,UAAW,gBAAY,GAClCwvF,IACI3jF,EAAS,IACV8uC,EAAQ36C,UAAW,cAAU,GAChCwvF,IACI3jF,EAAS,IACV8uC,EAAQ36C,UAAW,UAAM,GAC5BwvF,IACI3jF,EAAS,IACV8uC,EAAQ36C,UAAW,UAAM,GAC5BwvF,IACI3jF,EAAS,IACV8uC,EAAQ36C,UAAW,eAAW,GACjCwvF,IACI3jF,EAAS,IACV8uC,EAAQ36C,UAAW,eAAW,GACjCwvF,IACI3jF,EAAS,KACV8uC,EAAQ36C,UAAW,oBAAgB,GACtCwvF,IACI3jF,EAAS,OACV8uC,EAAQ36C,UAAW,YAAQ,GAC9BwvF,IACI3jF,EAAS,aACV8uC,EAAQ36C,UAAW,aAAS,GAC/BwvF,IACI9iF,GAAUgF,EAAG,EAAGC,EAAG,EAAGgJ,MAAO,EAAGD,OAAQ,GAAKmsR,KAC9ClsP,EAAQ36C,UAAW,kBAAc,GACpCwvF,IACI/hF,KACDktC,EAAQ36C,UAAW,qBAAiB,GACvCwvF,IACI/hF,KACDktC,EAAQ36C,UAAW,cAAU,GAChCwvF,IACI/hF,KACDktC,EAAQ36C,UAAW,yBAAqB,GAC3C26C,EAAU60C,IACNzhF,GACD4sC,IAELu1D,ICxsBEjhB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAM5D2pQ,GAAc,YAMdC,GAAiB,eAgBjBC,GAAyB,SAAUt7M,GAOnC,SAASs7M,EAAQzzR,EAAShS,GACtB,OAAOmqF,EAAO7pF,KAAKtB,KAAMgT,EAAShS,IAAYhB,KAuSlD,OA9SAsqF,GAAUm8M,EAASt7M,GAanBs7M,EAAQprS,UAAUoX,UAAY,WAC1BzS,KAAK0mS,QAAUl7R,GAAQmb,KAAK8Q,KAC5Bz3B,KAAK2mS,aAAgC,YAAjB3mS,KAAK0mS,QACzB1mS,KAAK0mB,SAAWlb,GAAQkb,SACxB,IAAI1lB,EAAUhB,KAAKgB,QACnBhB,KAAK4mS,QAA2B,SAAjB5mS,KAAK0mS,SAAuC,SAAjB1mS,KAAK0mS,QAC/C1mS,KAAKmuG,aACc,KAAfntG,EAAQsC,KACRtC,EAAQsC,GAAK9D,EAAY,WACzBQ,KAAK6mS,UAAW,GAEpB7lS,EAAQ0D,MAAM4xC,QAAU,QACpBt2C,KAAKkT,WACLlS,EAAQ8C,UAAUM,IAlDhB,UAyDVqiS,EAAQprS,UAAU0wG,OAAS,WACvB/rG,KAAK2vH,YAAc,IAAI9V,GAAM75G,KAAKgB,SAAWslM,OAAQtmM,KAAK8mS,aAAaxrS,KAAK0E,QACvEA,KAAK0mB,SAKN1mB,KAAKgB,QAAQ8C,UAAUM,IAtDlB,oBAkDLpE,KAAK+mS,cAAc/mS,KAAKgB,SACxBuE,GAAanB,IAAIpE,KAAKgnS,UAAW,SAAUhnS,KAAKuvH,cAAevvH,QAMvEymS,EAAQprS,UAAU8yG,WAAa,WAC3B,IAAI64L,EAAYC,EAAS,OAAS5jS,UAjErB,sBAkET6jS,EAAYD,EAAS,OAAS5jS,UAnErB,kBAoEb6jS,EAAU1jS,aAAa,WAAY,MAGnC,IAAK,IAFDQ,EAAMhE,KAAKgB,QAEN5C,EAAK,EAAG+oS,KADC9lS,MAAMC,KAAK0C,EAAIoW,UACOhc,EAAK+oS,EAAW1qS,OAAQ2B,IAAM,CAClE,IAAIw/H,EAAQupK,EAAW/oS,GACvB4oS,EAAUrlS,YAAYi8H,GAE1BspK,EAAUvlS,YAAYqlS,GACtBhjS,EAAIrC,YAAYulS,GAChBA,EAAUxiS,MAAMqV,UAAY,SAC5B/Z,KAAKgnS,UAAYE,EACjBlnS,KAAKonS,YAAcJ,GAEvBP,EAAQprS,UAAUmxG,eAAiB,WAE/B,OAAOxsG,KAAKgtG,cADK,gBAQrBy5L,EAAQprS,UAAUkkC,cAAgB,WAC9B,MAAO,WAMXknQ,EAAQprS,UAAUiX,QAAU,WACxB,IAAItO,EAAMhE,KAAKgB,QACfgD,EAAIU,MAAM4xC,QAAU,GACpBtyC,EAAIF,UAAUS,OAvGP,aAyGP,IAAK,IADD8iS,EAAMzhS,EAAU,MAAQ5B,EAAIV,GAAK,QAAUkjS,GAAgBxiS,GACtD5F,EAAK,EAAGyE,KAAQxB,MAAMC,KAAKtB,KAAKonS,YAAYhtR,UAAWhc,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAClF,IAAIsE,EAAOG,EAAGzE,GACd4F,EAAIrC,YAAYe,GAEhB1C,KAAK6mS,UACL7mS,KAAKgB,QAAQ0K,gBAAgB,MAEjCrG,EAAOrF,KAAKgnS,WACRK,EAAI5qS,OAAS,IACb4I,EAAOgiS,EAAI,IACXhiS,EAAOgiS,EAAI,KAEf9hS,GAAahB,OAAOvE,KAAKgnS,UAAW,SAAUhnS,KAAKuvH,eACnDvvH,KAAK2vH,YAAYr9G,UACjBtS,KAAK2vH,YAAc,KACnBxkC,EAAO9vF,UAAUiX,QAAQhR,KAAKtB,OAQlCymS,EAAQprS,UAAUmgM,QAAU,SAAUx+L,GAClC,IAAIsqS,EAAU1hS,EAAU,gCAA2C5F,KAAKgB,SACxEhE,EAAQgD,KAAKgB,QAAQ8C,UAAUM,IAAImiS,IAAevmS,KAAKgB,QAAQ8C,UAAUS,OAAOgiS,IAChFe,EAAQloS,QAAQ,SAAU0G,GACtBA,EAAGtC,aAAa,WAAaxG,EAAc,KAAN,QAG7CypS,EAAQprS,UAAU0rS,cAAgB,SAAU/lS,GACxC,IAAIsC,EAAKtC,EAAQsC,GAAGiX,OAAO,QACvBgtR,EAAW,KAAOvmS,EAAQsC,GAAGiX,OAAO,QAAUisR,GAAiB,uBAC/Da,EAAMJ,EAAS,OAAS3jS,GAAIA,EAAGiX,OAAO,UAAWlX,UAAWkkS,IAChEF,EAAI7jS,aAAa,gBAAiB,SAClC,IAAIgkS,EAAUP,EAAS,OAAS5jS,UAAWokS,0CACvCC,EAAU,KAAO1mS,EAAQsC,GAAGiX,OAAO,QAAUisR,GAAiB,sBAC9DmB,EAASV,EAAS,OAAS3jS,GAAIA,EAAGiX,OAAO,SAAUlX,UAAWqkS,EAAU,IAAMnB,KAClFoB,EAAOnkS,aAAa,gBAAiB,QACrC,IAAIokS,EAAcX,EAAS,OAAS5jS,UAAWwkS,yCAC/CF,EAAOhmS,YAAYimS,GACnBP,EAAI1lS,YAAY6lS,GAChBH,EAAI7jS,aAAa,WAAY,KAC7BxC,EAAQW,YAAY0lS,GACpBrmS,EAAQkE,aAAayiS,EAAQ3mS,EAAQ4b,YACjC5c,KAAK4mS,UACLS,EAAIvjS,UAAUM,IAAI,cAClBujS,EAAO7jS,UAAUM,IAAI,eAEzBpE,KAAK8nS,cAAcT,EAAKM,KAE5BlB,EAAQprS,UAAU0sS,WAAa,SAAUlnS,GACrC,IAAId,EAAQC,KACZ,GAAc,UAAVa,EAAExD,IAAiB,CAKnB2C,KAAKgoS,SAAWnsS,OAAOsE,WAAW,WAH9BJ,EAAMkoS,YAAa,EACnBloS,EAAMmoS,aAAa,GAAIrnS,EAAEsG,SAI1B,OAGXs/R,EAAQprS,UAAU8sS,QAAU,SAAUtnS,GACpB,UAAVA,EAAExD,MAGF2C,KAAKioS,WACLjoS,KAAKioS,YAAa,EAGlBpnS,EAAEsG,OAAOk/G,QAEbnmH,aAAaF,KAAKgoS,YAEtBvB,EAAQprS,UAAUysS,aAAe,SAAU9jS,GACvC,IAAIjE,EAAQC,KACZgE,EAAI5E,QAAQ,SAAU0G,GAClB,IAAI+zG,GAAM/zG,GAAM8pH,QAAS7vH,EAAMqoS,eAAe9sS,KAAKyE,GAAQ26G,iBAAkB,MAC7E50G,EAAGpJ,iBAAiB,UAAWqD,EAAMgoS,WAAWzsS,KAAKyE,IACrD+F,EAAGpJ,iBAAiB,QAASqD,EAAMooS,QAAQ7sS,KAAKyE,IAChD+F,EAAGpJ,iBAAiB,UAAWqD,EAAMsoS,aAAa/sS,KAAKyE,IACvD+F,EAAGpJ,iBAAiB,WAAYqD,EAAMsoS,aAAa/sS,KAAKyE,IACxD+F,EAAGpJ,iBAAiB,cAAe,SAAUmE,GACzCA,EAAE2kB,mBAENjgB,GAAanB,IAAI0B,EAAI,QAAS/F,EAAMuoS,kBAAmBvoS,MAG/D0mS,EAAQprS,UAAUgtS,aAAe,WAC7B/lS,cAActC,KAAKowE,UAEvBq2N,EAAQprS,UAAU+sS,eAAiB,SAAUvnS,GACzC,IAAId,EAAQC,KACRkwH,EAAOrvH,EAAEq6G,cAAc/zG,OAC3B+oH,EAAOlwH,KAAKmE,SAAS+rH,EAAMs2K,IAAkBt2K,EAAK/qH,kBAAoB+qH,EAKtElwH,KAAKowE,QAAUv0E,OAAOuG,YAAY,WAF9BrC,EAAMmoS,aAFM,GAEkBh4K,IAI/B,KAEPu2K,EAAQprS,UAAU8I,SAAW,SAAUH,EAAKX,GACxC,OAAOW,EAAIF,UAAUK,SAASd,IAElCojS,EAAQprS,UAAU6sS,aAAe,SAAUK,EAAWr4K,GAClD,IAAIlvH,EAAUhB,KAAKgnS,UACfwB,EAAUxoS,KAAKgB,QACf8C,EAAYosH,EAAKpsH,UACjBA,EAAUK,SAASqiS,MACnB1iS,EAAYosH,EAAKvtH,cAAc,gBAAoBmB,WAEnD9D,KAAKmE,SAASqkS,EA1NZ,UA0NiCxoS,KAAK2mS,eACxC4B,GAAaA,GAEjB,IAAIE,EAAWznS,EAAQgL,YACjBhM,KAAKmE,SAASqkS,EA9Nd,UA8NmCxoS,KAAK2mS,cAAiB3mS,KAAK4mS,QAC5D9iS,EAAUK,SA1NF,qBA2NRnD,EAAQgL,WAAay8R,EAAWF,EAGhCvnS,EAAQgL,WAAay8R,EAAWF,EAIhCzkS,EAAUK,SAjOH,oBAkOPnD,EAAQgL,WAAay8R,EAAWF,EAGhCvnS,EAAQgL,WAAay8R,EAAWF,GAI5C9B,EAAQprS,UAAUitS,kBAAoB,SAAUznS,GAC5Cb,KAAKkoS,aAAaloS,KAAK0oS,WAAY7nS,EAAEsG,SAEzCs/R,EAAQprS,UAAUyrS,aAAe,SAAUjmS,GACvC,IACIw5C,EADAr2C,EAAMhE,KAAKgnS,UAEf3sP,EAAWx5C,EAAEs6G,UACRn7G,KAAY,SAAKA,KAAKmE,SAASnE,KAAKgB,QAtPnC,WAuPFq5C,GAAYA,GAEU,SAAtBx5C,EAAEw6G,gBACFr3G,EAAIgI,WAAahI,EAAIgI,WAAaquC,EAEP,UAAtBx5C,EAAEw6G,kBACPr3G,EAAIgI,WAAahI,EAAIgI,WAAaquC,IAG1CosP,EAAQprS,UAAUstS,eAAiB,SAAUC,EAAYC,GACrDD,EAAW9kS,UAAUM,IAAImiS,IACzBqC,EAAWplS,aAAa,gBAAiB,QACzColS,EAAWl9R,gBAAgB,YAC3BpJ,cAActC,KAAKowE,SACnBy4N,EAAc/kS,UAAUS,OAAOgiS,IAC/BsC,EAAcrlS,aAAa,gBAAiB,SAC5CqlS,EAAcrlS,aAAa,WAAY,KACvCxD,KAAKqoS,gBAET5B,EAAQprS,UAAUk0H,cAAgB,SAAU1uH,GACxC,IAAIsG,EAAStG,EAAEsG,OACX6O,EAAQ7O,EAAOvC,YACf4jS,EAAUxoS,KAAKgB,QACf8nS,EAAa9oS,KAAKgB,QAAQ2B,cAAc,sBACxComS,EAAc/oS,KAAKgB,QAAQ2B,cAAc,uBACzCqJ,EAAa7E,EAAO6E,WAIxB,GAHIA,GAAc,IACdA,GAAcA,GAEC,IAAfA,GACMhM,KAAKmE,SAASqkS,EArRlB,UAqRuCxoS,KAAK2mS,cAAiB3mS,KAAK4mS,QAChE5mS,KAAK2oS,eAAeG,EAAYC,GAGhC/oS,KAAK2oS,eAAeI,EAAaD,QAGpC,GAAIz8R,KAAKwmB,KAAK7c,EAAQhK,EAAa,KAAO7E,EAAOy4D,aAC5C5/D,KAAKmE,SAASqkS,EA7RlB,UA6RuCxoS,KAAK2mS,cAAiB3mS,KAAK4mS,QAChE5mS,KAAK2oS,eAAeI,EAAaD,GAGjC9oS,KAAK2oS,eAAeG,EAAYC,OAGnC,CACD,IAAIC,EAAShpS,KAAKgB,QAAQ2B,cAAc,IAAM6jS,GAAiB,IAAMD,IACjEyC,IACAA,EAAOllS,UAAUS,OAAOgiS,IACxByC,EAAOxlS,aAAa,gBAAiB,SACrCwlS,EAAOxlS,aAAa,WAAY,QAW5CijS,EAAQprS,UAAUmsF,kBAAoB,SAAUiF,EAASC,GACrD,IAAK,IAAItuF,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKmvF,GAAUruF,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAE9D,OADWyE,EAAGzE,IAEV,IAAK,aACD,MACJ,IAAK,YACDquF,EAAQv5E,UAAYlT,KAAKgB,QAAQ8C,UAAUM,IA3TjD,SA2TgEpE,KAAKgB,QAAQ8C,UAAUS,OA3TvF,YAgUVsmF,IACI3jF,EAAS,KACVu/R,EAAQprS,UAAW,kBAAc,GACpCorS,EAAU57M,IACNzhF,GACDq9R,IAELl7L,IC1VEjhB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAW5DqsQ,GAAY,kBACZC,GAAW,iBAEXC,GAAgB,cAChBC,GAAgB,kBAChBC,GAAgB,oBAEhB9C,GAAc,YAEd+C,GAAe,eACfC,GAAmB,kBACnBC,GAAkB,kBAElBC,GAAc,YAKdC,GAAc,aAGdC,GAAiB,gBACjBC,GAAY,kBAEZC,GAAiB,eACjBC,GAAiB,WACjBC,GAAa,gBAGbC,GAAyB,uBAEzBC,GAA2B,uBAO3B95K,GAAsB,SAAUhlC,GAEhC,SAASglC,IACL,OAAkB,OAAXhlC,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KA4C/D,OA9CAsqF,GAAU6lC,EAAMhlC,GAIhBN,IACI3jF,EAAS,KACVipH,EAAK90H,UAAW,UAAM,GACzBwvF,IACI3jF,EAAS,KACVipH,EAAK90H,UAAW,YAAQ,GAC3BwvF,IACI3jF,EAAS,SACVipH,EAAK90H,UAAW,aAAS,GAC5BwvF,IACI3jF,EAAS,KACVipH,EAAK90H,UAAW,gBAAY,GAC/BwvF,IACI3jF,GAAS,IACVipH,EAAK90H,UAAW,yBAAqB,GACxCwvF,IACI3jF,EAAS,KACVipH,EAAK90H,UAAW,kBAAc,GACjCwvF,IACI3jF,EAAS,KACVipH,EAAK90H,UAAW,kBAAc,GACjCwvF,IACI3jF,EAAS,SACVipH,EAAK90H,UAAW,gBAAY,GAC/BwvF,IACI3jF,EAAS,KACVipH,EAAK90H,UAAW,gBAAY,GAC/BwvF,IACI3jF,EAAS,WACVipH,EAAK90H,UAAW,YAAQ,GAC3BwvF,IACI3jF,EAAS,SACVipH,EAAK90H,UAAW,kBAAc,GACjCwvF,IACI3jF,EAAS,OACVipH,EAAK90H,UAAW,sBAAkB,GACrCwvF,IACI3jF,EAAS,KACVipH,EAAK90H,UAAW,mBAAe,GAClCwvF,IACI3jF,EAAS,SACVipH,EAAK90H,UAAW,aAAS,GACrB80H,GACTnxD,IAYEkrO,GAAyB,SAAU/+M,GAOnC,SAAS++M,EAAQl3R,EAAShS,GACtB,IAAIjB,EAAQorF,EAAO7pF,KAAKtB,KAAMgT,EAAShS,IAAYhB,KAenD,OAXAD,EAAM62G,YACF4zF,SAAU,YACVC,UAAW,aACXF,OAAQ,UACRD,SAAU,YACV6/F,UAAW,QACX9jJ,WAAY,SACZvyC,IAAK,MACLQ,KAAM,OACNz1F,IAAK,OAEF9e,EAkjDX,OAxkDAuqF,GAAU4/M,EAAS/+M,GA4BnB++M,EAAQ7uS,UAAUiX,QAAU,WACxB,IAAIvS,EAAQC,KACRgE,EAAMhE,KAAKgB,QAGf,IAFAmqF,EAAO9vF,UAAUiX,QAAQhR,KAAKtB,MAC9BA,KAAKmlB,eACEnhB,EAAI4Y,YACP5Y,EAAIsB,YAAYtB,EAAI4Y,YAEpB5c,KAAKoqS,SACLpmS,EAAIrC,YAAY3B,KAAKqqS,SAEzBrqS,KAAKsqS,gBACLtqS,KAAKuqS,OAAS,KACdvqS,KAAKwqS,UAAY,KACjBxqS,KAAKuE,OAAOvE,KAAKgB,QAAS,aAC1BgD,EAAI0H,gBAAgB,UACnB,gBAAiB,mBAAoB,gBAAiB,QAAQtM,QAAQ,SAAUqrS,GAC7E1qS,EAAMiB,QAAQ0K,gBAAgB++R,MAOtCP,EAAQ7uS,UAAUoX,UAAY,WAC1B,IAAIlF,GAAcm9R,iBAAiB,GACnC1qS,KAAKwmB,QAAQ,eAAgBjZ,GAC7BvN,KAAK0qS,gBAAkBn9R,EAAUm9R,gBACjC1qS,KAAK2qS,aAAe,KACpB3qS,KAAKuqS,OAAS,KACdvqS,KAAK4qS,aAAe5qS,KAAKy6D,MACzBz6D,KAAK6qS,cAAgB,EACjB7qS,KAAKkT,WACLlT,KAAKoE,IAAIpE,KAAKgB,QA9JZ,UAiKVkpS,EAAQ7uS,UAAUkpB,WAAa,WAC3Bhf,GAAanB,IAAIpE,KAAKgB,QAAS,QAAShB,KAAKm/G,aAAcn/G,MAC3DnE,OAAOa,iBAAiB,SAAUsD,KAAK8qS,OAAOxvS,KAAK0E,OACnDA,KAAK+qS,UAAY,IAAI30L,GAAep2G,KAAKgB,SACrCk2G,UAAWl3G,KAAKg6I,iBAAiB1+I,KAAK0E,MACtC42G,WAAY52G,KAAK42G,aAErBrxG,GAAanB,IAAIpE,KAAKgB,QAAS,UAAWhB,KAAKgrS,WAAYhrS,MAC3DA,KAAKgB,QAAQwC,aAAa,WAAY,MAE1C0mS,EAAQ7uS,UAAU2vS,WAAa,SAAUnqS,GACrC,GAAyB,UAArBA,EAAEsG,OAAOnE,QAAb,CAGA,IAAIioS,GAAYx3N,EAAMzzE,KAAKuqS,SAAW9lS,EAAUzE,KAAKuqS,OAAOvpS,UAAkC,aAAtBhB,KAAKkrS,aAC3D,IAAdrqS,EAAEinB,UAA8D,IAA7CjnB,EAAEsG,OAAOrD,UAAUK,SAAS,cAAyB8mS,GACxEjrS,KAAKuqS,OAAOhpN,MAAO9pD,KAAM,UAAWvsB,SAAU,OAEpB,KAAdrK,EAAEinB,SAAgC,KAAdjnB,EAAEinB,SAAgC,KAAdjnB,EAAEinB,SAAgC,KAAdjnB,EAAEinB,UAE1EjnB,EAAE2kB,mBAGV0kR,EAAQ7uS,UAAU8pB,aAAe,WAC7B5f,GAAahB,OAAOvE,KAAKgB,QAAS,QAAShB,KAAKm/G,cAChDn/G,KAAKmrS,iBACLnrS,KAAK+qS,UAAUz4R,UACf/M,GAAahB,OAAO/D,SAAU,SAAUR,KAAKorS,UAC7C7lS,GAAahB,OAAOvE,KAAKgB,QAAS,UAAWhB,KAAKgrS,YAClDzlS,GAAahB,OAAO/D,SAAU,QAASR,KAAKorS,WAEhDlB,EAAQ7uS,UAAUivS,cAAgB,WAC9BtqS,KAAKqrS,WACLrrS,KAAKsrS,YAAeC,SAAWC,WAAaC,YAEhDvB,EAAQ7uS,UAAU+vS,SAAW,SAAUvqS,GACnC,IAAI6qS,EAAS7lS,EAAQhF,EAAEsG,OAAQ,YAC3BnH,KAAKuqS,QAAU9lS,EAAUzE,KAAKuqS,OAAOvpS,WAAa0qS,GAAgC,UAAtB1rS,KAAKkrS,cACjElrS,KAAKuqS,OAAOhpN,MAAO9pD,KAAM,UAAWvsB,SAAU,OAGtDg/R,EAAQ7uS,UAAU8vS,eAAiB,WAC3BnrS,KAAK2qS,eACD3qS,KAAKwqS,WACLxqS,KAAKoE,IAAIpE,KAAK2qS,aAAa3pS,QAAS0oS,IAExC1pS,KAAK2qS,aAAar4R,UAClBtS,KAAK2qS,aAAe,OAG5BT,EAAQ7uS,UAAUswS,aAAe,cAC1BtqS,MAAMC,KAAKtB,KAAKgB,QAAQQ,iBAAiB,IAAM0nS,KAAW9pS,QAAQ,SAAU0G,GAC3ET,EAAOS,KAEX,IAAI8lS,EAAY5rS,KAAKgB,QAAQ2B,cAAc,IAAMsmS,IAC7CjpS,KAAKwqS,eACFnpS,MAAMC,KAAKsqS,EAAUxxR,UAAUhb,QAAQ,SAAU0G,GAChDT,EAAOS,KAEX9F,KAAKwqS,WAAY,EACjBxqS,KAAKuE,OAAOqnS,EAAWlC,KAE3B1pS,KAAKsqS,iBAETJ,EAAQ7uS,UAAUwwS,YAAc,WACxB7rS,KAAK2qS,eACL3qS,KAAKuE,OAAOvE,KAAK2qS,aAAa3pS,QAnO5B,SAoOFhB,KAAKmrS,kBAELnrS,KAAKuqS,QACLvqS,KAAK8rS,aAAa9rS,KAAKuqS,OAAOvpS,SAAS,IAG/CkpS,EAAQ7uS,UAAU+I,IAAM,SAAUJ,EAAKikB,GACnCjkB,EAAIF,UAAUM,IAAI6jB,IAEtBiiR,EAAQ7uS,UAAUkJ,OAAS,SAAUP,EAAKikB,GACtCjkB,EAAIF,UAAUS,OAAO0jB,IAEzBiiR,EAAQ7uS,UAAU0wS,aAAe,SAAU/nS,GACvC,IAAIgoS,EAAShoS,EAAImB,kBACb6mS,GACAA,EAAO9pS,QACPlC,KAAKisS,gBAAgBjoS,IAGrBA,EAAI9B,SAGZgoS,EAAQ7uS,UAAU6wS,YAAc,SAAUC,EAAWj8K,GAWjD,OATIi8K,GAAansS,KAAKuqS,QAAU9lS,EAAUzE,KAAKuqS,OAAOvpS,SAC3ChB,KAAKuqS,OAAOvpS,QAAQ2B,cAAc,IAAMumS,IAE1ClpS,KAAKgB,UAAYkvH,GAAQi8K,EACvBnsS,KAAKgB,QAAQ2B,cAAc,IAAMumS,GAAW,SAAW3C,GAAc,WAAa4C,GAAgB,MAGlGtjS,EAAQqqH,EAAM,IAAMg5K,KAInCgB,EAAQ7uS,UAAU+wS,YAAc,SAAUC,EAAMxrS,EAAGqvH,EAAMo8K,EAAQC,GAC7D,IAAIhC,EAASvqS,KAAKuqS,OACd/B,EAAUxoS,KAAKgB,QACfwrS,GAAe/0Q,KAAM,UAAWvsB,SAAU,KAC9C,OAAQrK,EAAEs1D,QACN,IAAK,YACGqyO,IAAYt4K,EACZlwH,KAAK+rS,aAAaM,GAEZC,GACNtsS,KAAKysS,SAASJ,EAAM,QAExB,MACJ,IAAK,WACIC,GACDtsS,KAAKysS,SAASJ,EAAM,YAExB,MACJ,IAAK,OACL,IAAK,MACD,IAAIroS,OAAM,EACN8tD,OAAQ,EACZ,GAAIu6O,EAAM,CACN,IAAIK,EAAa7mS,EAAQwmS,EAAM,YAC3BK,EACIjoS,EAAUzE,KAAKuqS,OAAOvpS,WACtB8wD,EAAQ46O,EAAWtyR,SAEfpW,EADa,SAAbnD,EAAEs1D,OACIrE,EAAM,GAGNA,EAAMA,EAAMr1D,OAAS,KAKnCq1D,EAAQ9xD,KAAKgB,QAAQQ,iBAAiB,IAAMynS,GAAY,KAAOC,IAE3DllS,EADa,SAAbnD,EAAEs1D,OACIrE,EAAM,GAGNA,EAAMA,EAAMr1D,OAAS,IAG/BuH,GACAhE,KAAK+rS,aAAa/nS,GAG1B,MACJ,IAAK,SACL,IAAK,WACD,IAAIhH,EAAqB,WAAb6D,EAAEs1D,OAAsB,WAAa,OACjD,GAAIo0O,GAAU1kS,EAAQqqH,EAAM,YAAa,CACrC,IAAIw7K,EAASnB,EAAOvpS,QAChB2rS,EAAajB,EAAOvmS,kBACxB,GAAe,aAAVnI,GAAwB2vS,IAAeN,GAAoB,SAAVrvS,GAAoB0uS,EAAO3jK,mBAAqBskK,EAClG,OAGArsS,KAAKysS,SAASJ,EAAMrvS,OAGN,aAAb6D,EAAEs1D,QAAyBo0O,GAAU9lS,EAAU8lS,EAAOvpS,UAC3DhB,KAAK+rS,aAAaM,GAEtB,MACJ,IAAK,MACD,IAAKE,IAAcD,EAAQ,CACvB,IAAI1uK,EAAQyuK,EAAKlnS,kBACbqjS,IAAYt4K,IACRlwH,KAAK4sS,UACL5sS,KAAK4sS,UAAU1qS,SAGflC,KAAK6sS,gBAAgBjvK,GACrBA,EAAM17H,SAEVlC,KAAKgB,QAAQ0K,gBAAgB,aAGrC,MACJ,IAAK,aACG6+R,GAAgC,aAAtBvqS,KAAKkrS,cACfX,EAAOhpN,KAAKirN,GAEhB,MACJ,IAAK,YACD,IAAKF,EACD,OAEA/B,IAAW9lS,EAAU8lS,EAAOvpS,UAC5BupS,EAAOvpS,QAAQ0D,MAAMgI,IAAM87R,EAAQ92P,aAAe,KAClD64P,EAAOtmL,MAAOxsF,KAAM,SAAUvsB,SAAU,OAGxCq/R,EAAOhpN,KAAKirN,KAK5BtC,EAAQ7uS,UAAU2+I,iBAAmB,SAAUn5I,GAC3C,IAAIqvH,EAAOrvH,EAAEsG,OACb,GAAqB,UAAjB+oH,EAAKltH,SAAwC,aAAjBktH,EAAKltH,UAA0BhD,KAAKgB,QAAQ8C,UAAUK,SAASoiS,IAA/F,CAGA1lS,EAAE2kB,iBACF,IAAI6mR,EACAF,EAAYj8K,EAAKpsH,UAAUK,SAASslS,IACpCqD,EAAgB58K,EAAKpsH,UAAUK,SAvWrB,kBAwWdkoS,EAAOrsS,KAAKksS,YAAYC,EAAWj8K,KACvB48K,IACR9sS,KAAKosS,YAAYC,EAAMxrS,EAAGqvH,EAAMi8K,EAAWW,KASnD5C,EAAQ7uS,UAAUmgM,QAAU,SAAUx+L,GAClC,IAAIwrS,EAAUxoS,KAAKgB,QACnBhE,EAAQwrS,EAAQ1kS,UAAUM,IAAImiS,IAAeiC,EAAQ1kS,UAAUS,OAAOgiS,IACtEiC,EAAQhlS,aAAa,WAAaxG,EAAc,KAAN,KACtCgD,KAAK4sS,WACL5sS,KAAK4sS,UAAUppS,aAAa,WAAaxG,EAAc,KAAN,KAEjDgD,KAAK2qS,cACL3qS,KAAK2qS,aAAanvG,QAAQx+L,GAE1BgD,KAAKuqS,SACD9lS,EAAUzE,KAAKuqS,OAAOvpS,UAAkC,aAAtBhB,KAAKkrS,cACvClrS,KAAKuqS,OAAOhpN,OAEhBinN,EAAQ7lS,cAAc,IAAM6lS,EAAQllS,GAAK,QAAQE,aAAa,WAAaxG,EAAc,KAAN,OAG3FktS,EAAQ7uS,UAAUoxS,SAAW,SAAU5mS,EAASoP,GAC5C,IAAI83R,EAAMzuS,OAAOuH,GAASoP,EAAM,kBAC5B9Q,EAAW,SAAU2B,GACrB,OAAOA,EAAGhC,UAAUK,SAASglS,KAAkBrjS,EAAGhC,UAAUK,SAASoiS,KAEzE,GAAIwG,EAAK,CACL,IAAIC,EAAU7oS,EAAS4oS,GACvB,GAAIC,EAAS,CACT,IAAI1uS,OAAOyuS,GAAK93R,EAAM,kBASlB,OANA,GAFA83R,EAAMzuS,OAAOyuS,GAAK93R,EAAM,kBACxB+3R,EAAU7oS,EAAS4oS,GAGf,YADA/sS,KAAKysS,SAASM,EAAK93R,GAQ/BjV,KAAK+rS,aAAagB,QAEjB,GAAI/sS,KAAKwqS,UAAW,CACrB,IAAI9nS,EAAOpE,OAAOuH,EAAQwO,eAAeY,EAAM,kBAI/C,GAHKw+D,EAAM/wE,IAAkC,IAAzBA,EAAK0X,SAAS3d,SAC9BiG,EAAOpE,OAAOoE,GAAMuS,EAAM,oBAEzBw+D,EAAM/wE,IAASA,EAAK0X,SAAS3d,OAAS,EACvC,GAAY,SAARwY,EAAgB,CAEZ9Q,EADA2B,EAAKpD,EAAKC,cAAc,IAAMumS,KAE9BlpS,KAAKysS,SAAS3mS,EAAImP,IAGlBnP,EAAGX,kBAAkBjD,QACrBlC,KAAKisS,gBAAgBnmS,QAGxB,CACD,IAAIA,EACA3B,EADA2B,EAAKpD,EAAKqlI,kBAEV/nI,KAAKysS,SAAS3mS,EAAImP,GAGlBjV,KAAK+rS,aAAajmS,MAMtCokS,EAAQ7uS,UAAU8jH,aAAe,SAAUt+G,GACvC,IAAIqvH,EAAOrvH,EAAEsG,OACT8lS,EAAU/8K,EAAKpsH,UACfE,EAAMhE,KAAKgB,QACXksS,GAAkBz5N,EAAM5tE,EAAQqqH,EAAM,IAAMy5K,KAC5CwD,EAAWtnS,EAAQqqH,EAAO,IAAMu5K,IAC/B0D,IACDA,EAAWj9K,IAEVlsH,EAAIoW,SAAS,GAAGtW,UAAUK,SAAS,cAAiB8oS,EAAQ9oS,SAASslS,MACtEwD,EAAU/8K,EAAKvtH,cAAc,YAAYmB,YAEzCmpS,EAAQ9oS,SAASilS,KAAkB6D,EAAQ9oS,SAASklS,MACpDrpS,KAAKotS,kBAAkBppS,EAAKmpS,EA/c1B,SAidN,IAAIrzG,EACAuyG,EAAOxmS,EAAQhF,EAAEsG,OAAQ,IAAM+hS,IACnC,IAAKz1N,EAAM44N,KAASA,EAAKvoS,UAAUK,SAASoiS,KAAkB4G,EAASrpS,UAAUK,SAASslS,IAA1F,CAGI4C,IACAvyG,EAAU95L,KAAKy6D,MAAMz6D,KAAKqrS,QAAQ9sS,QAAQ8tS,KAE9C,IAAI9+R,GAAc2tG,cAAer6G,EAAGgd,KAAMi8K,GAC1C95L,KAAKwmB,QAAQ,UAAWjZ,GACpB2/R,IAAmB3/R,EAAUsrB,QAAgC,UAAtB74B,KAAKkrS,cAC5ClrS,KAAKuqS,OAAOhpN,MAAO9pD,KAAM,UAAWvsB,SAAU,QAItDg/R,EAAQ7uS,UAAU+xS,kBAAoB,SAAUppS,EAAKmpS,EAAUE,GAC3D,IAAI9C,EAASvqS,KAAKuqS,OACd9lS,EAAU8lS,EAAOvpS,UACjBmsS,EAASrpS,UAAUS,OAAOslS,IAC1BU,EAAOhpN,MAAO9pD,KAAM,UAAWvsB,SAAU,QAGrClH,EAAIF,UAAUK,SAASkpS,KACvB9C,EAAOr3R,WAAY,EACnBq3R,EAAOr2R,UAAakC,EAAG,OAAQC,EAAG,QAEf,IAAnBk0R,EAAO1+R,SAAkB7H,EAAIF,UAAUK,SAASkpS,KAChD9C,EAAOr3R,WAAY,EACnBq3R,EAAOr2R,UAAakC,EAAG,QAASC,EAAG,QAEvCk0R,EAAO3+O,WACP2+O,EAAO7oL,kBACP6oL,EAAOvpS,QAAQ0D,MAAMgI,IAAM1M,KAAKgB,QAAQ0wC,aAAe,KAC7B,aAAtB1xC,KAAKkrS,eACLX,EAAOvpS,QAAQ0D,MAAM4uD,UAAY,OAErC65O,EAASrpS,UAAUM,IAAIylS,IACvBU,EAAOtmL,MAAOxsF,KAAM,SAAUvsB,SAAU,QAOhDg/R,EAAQ7uS,UAAU0wG,OAAS,WACvB/rG,KAAKmuG,aACLnuG,KAAKw7M,gBACLx7M,KAAKixH,YACLjxH,KAAKukB,cAET2lR,EAAQ7uS,UAAU8yG,WAAa,WAC3B,IAAIn4F,EAAQzT,EAAWvC,KAAKgW,OACxBD,EAASxT,EAAWvC,KAAK+V,QACH,SAAtBvK,GAAQmb,KAAK8Q,MAAmC,SAAhBz3B,KAAK+V,QAA2C,aAAtB/V,KAAKkrS,cAC/D/oD,EAASniP,KAAKgB,SAAW+U,OAAUA,IAEvCosO,EAASniP,KAAKgB,SAAWgV,MAASA,IAIlCtS,EAAW1D,KAAKgB,SAFZ4Q,KAAQ,UAAWskH,gBAAiB,QAASzC,gBAAiB,QAAS65K,mBAAoB,gBAInGpD,EAAQ7uS,UAAUmgN,cAAgB,WAC9Bx7M,KAAKoqS,QAAWpqS,KAAKgB,QAAQoZ,SAAS3d,OAAS,EAAKuD,KAAKgB,QAAQ2B,cAAc,OAAS,KACxF3C,KAAKsrS,YAAeC,SAAWC,WAAaC,WAC5CzrS,KAAK6/E,cACL7/E,KAAKutS,qBACDvtS,KAAKwqS,WACLxqS,KAAKwtS,kBAELxtS,KAAKuqS,QAAUvqS,KAAKuqS,OAAOvpS,QAAQmkE,kBAAoB,GAAKnlE,KAAKytS,kBAAkBztS,KAAKgB,QAAShB,KAAKuqS,OAAOvpS,UAC7GhB,KAAK8rS,aAAa9rS,KAAKuqS,OAAOvpS,SAAS,IAG/CkpS,EAAQ7uS,UAAUqyS,YAAc,SAAU1sS,EAAS2sS,IAC1C3tS,KAAK2qS,cAAgB3qS,KAAK4tS,cAAc5sS,EAAS2sS,EAAW,MACzD3tS,KAAKwqS,WACLxqS,KAAKgB,QAAQ2B,cAAc,IAAMsmS,GAAY,sBAAuBv9R,gBAAgB,SAExF1L,KAAK2qS,aAAe,IAAIlE,IAAUiC,WAAY,GAAIx1R,UAAWlT,KAAKkT,WAAay6R,EAAW,IAC1F3tS,KAAKuE,OAAOvE,KAAK2qS,aAAa3pS,QAAS0oS,IACvCvnD,EAASniP,KAAKgB,SAAW6Y,SAAU,aAG3CqwR,EAAQ7uS,UAAUwyS,aAAe,SAAUpzO,GACvC,IACI/1D,EADAsR,EAAQ,EAQZ,SANG3U,MAAMC,KAAKsE,EAAU,IAAMsjS,GAAUzuO,IAAQr7D,QAAQ,SAAU0G,GAC1DrB,EAAUqB,KACVpB,EAAQ7I,OAAOsR,iBAAiBrH,GAChCkQ,GAAUlQ,EAAGlB,YAAc4W,WAAW9W,EAAMsqG,aAAexzF,WAAW9W,EAAMmnD,eAG7E71C,GAEXk0R,EAAQ7uS,UAAUuyS,cAAgB,SAAU5sS,EAAS8sS,GACjD,GAAIr6N,EAAMzyE,IAAYyyE,EAAMq6N,KAAerpS,EAAUzD,GACjD,OAAO,EAEX,IAAI+sS,EAAW/sS,EAAQ4D,YACnBopS,EAAYF,EAAUlpS,aACtB5E,KAAKwqS,WAAaxqS,KAAK2qS,cAAiBoD,IAAaC,KACrDA,EAAYhuS,KAAK6tS,aAAa7tS,KAAK2qS,aAAemD,EAAUnrS,cAAc,sBAAwBmrS,IAEtG,IAAIG,EAASjtS,EAAQ2B,cAAc,IAAM8mS,IACrCyE,EAAYltS,EAAQ2B,cAAc,iBACtC,OAAIqrS,EAAYD,GAAYE,EAASA,EAAOrpS,YAAespS,EAAoC,EAAxBA,EAAUtpS,YAAkB,IAQvGslS,EAAQ7uS,UAAU8yS,gBAAkB,WAChCnuS,KAAK8qS,UAETZ,EAAQ7uS,UAAUkyS,mBAAqB,WACnC,IAAIvpS,EAAMhE,KAAKgB,QACX2sS,EAAa3pS,EAAIrB,cAAc,IAAMsmS,IACrCmF,EAAgBpuS,KAAK6qS,cAAgB,EACzC,GAAI7mS,GAAOA,EAAIoW,SAAS3d,OAAS,EAM7B,OALAuD,KAAKquS,UAAYrqS,EAAIY,YACrB5E,KAAKuE,OAAOvE,KAAKgB,QAAS,aACA,SAAtBwK,GAAQmb,KAAK8Q,MAAmC,SAAhBz3B,KAAK+V,SACrC/R,EAAIU,MAAMqR,OAAS,IAEf/V,KAAKkrS,cACT,IAAK,aACDlrS,KAAKmrS,iBACLnrS,KAAK0tS,YAAY1pS,EAAKA,EAAI0J,uBAAuBu7R,KACjD,MACJ,IAAK,QACDjpS,KAAKoE,IAAIpE,KAAKgB,QAAS,aACnBhB,KAAKwqS,WACLxqS,KAAKsuS,qBAELtuS,KAAK4tS,cAAc5pS,EAAK2pS,IAAeS,KACvCpuS,KAAKuuS,eAAevqS,KAAQ3C,MAAMC,KAAKsE,EAAU,IAAMqjS,GAAY,KAAOC,GAAUllS,KACpFhE,KAAKgB,QAAQ2B,cAAc,IAAM8mS,IAAajmS,aAAa,WAAY,MAEvExD,KAAKwqS,YACLxqS,KAAKoE,IAAIupS,EAAYjE,IACrB1pS,KAAKwtS,mBAET,MACJ,IAAK,WACDxtS,KAAKoE,IAAIupS,EA1kBV,sBA2kB4B,WAAvB3pS,EAAIU,MAAMmV,WACV7V,EAAIU,MAAMmV,SAAW,IAEC,SAAtBrO,GAAQmb,KAAK8Q,MAAwC,SAArBzzB,EAAIU,MAAMqR,SAC1C/R,EAAIU,MAAMqR,OAAS,QAEvB,MACJ,IAAK,WACD/V,KAAKoE,IAAIpE,KAAKgB,QA/kBJ,uBAglBNhB,KAAK4tS,cAAc5pS,EAAK2pS,IAAeS,KACvCpuS,KAAKuuS,eAAevqS,KAAQ3C,MAAMC,KAAKsE,EAAU,IAAMqjS,GAAY,KAAOC,GAAUllS,KACpFhE,KAAKgB,QAAQ2B,cAAc,IAAM8mS,IAAajmS,aAAa,WAAY,QAK3F0mS,EAAQ7uS,UAAU41H,UAAY,WAC1B,IAEIu9K,EAFAxtS,EAAUhB,KAAKgB,QACfytS,KAAaptS,MAAMC,KAAKN,EAAQQ,iBAAiB,IAAM2nS,KAEvDuF,EAAW1tS,EAAQ2B,cAAc,IAAMqnS,IACvC2E,EAAY3tS,EAAQ2B,cAAc,IAAMsnS,IAEtB,QADtBuE,EAAsC,aAAtBxuS,KAAKkrS,aAA8BwD,EAAWC,KAEhC,aAAtB3uS,KAAKkrS,aACLsD,EAAc1qS,UAAUS,OAAOylS,IAEJ,aAAtBhqS,KAAKkrS,cACVsD,EAAc1qS,UAAUS,OAAO0lS,KAGvC,IAAK,IAAI9tS,EAAI,EAAGA,GAAKsyS,EAAQhyS,OAAS,EAAGN,IACjCsyS,EAAQtyS,GAAGgY,WAAa,IAAgC,IAA1Bs6R,EAAQtyS,GAAGgY,aACf,aAAtBnU,KAAKkrS,aACLuD,EAAQtyS,GAAG2H,UAAUM,IAAI4lS,IAEE,aAAtBhqS,KAAKkrS,cACVuD,EAAQtyS,GAAG2H,UAAUM,IAAI6lS,MAKzCC,EAAQ7uS,UAAUkzS,eAAiB,SAAUvqS,EAAK2yL,GAC9C,IAAIi4G,EAAW5qS,EAAIrB,cAAc,IAAM8mS,IAClCmF,GACD5uS,KAAK6uS,gBAAgB7qS,GAEzB4qS,EAAW5qS,EAAIrB,cAAc,IAAM8mS,IACnC,IAAIsE,EAAY/pS,EAAIY,YAAegqS,EAAoB,YACvD5uS,KAAKgB,QAAQ8C,UAAUS,OAAO,SAC9B49O,EAASniP,KAAKgB,SAAWw0B,UAAW,YACpCx1B,KAAK8uS,cAAc9qS,EAAK2yL,EAAUo3G,GAAU,GACxC/tS,KAAKkT,WACLlT,KAAKgB,QAAQ8C,UAAUM,IAAI,SAE/BpE,KAAKgB,QAAQ0D,MAAMqqS,eAAe,aAClC/uS,KAAKywH,eAETy5K,EAAQ7uS,UAAU2zS,iBAAmB,SAAUC,EAASC,EAAUlrS,EAAKmrS,EAAWC,GAC9E,IAAIpuS,EAAUiuS,EAAQjuS,QAClB8wD,EAAQlsD,EAAU,IAAM2jS,GAAkBvlS,GAC1CqrS,EAAY,EAEZC,EAAU,KADKjuS,MAAMC,KAAKsE,EAAU,IAAMgkS,GAAW5oS,EAAQ2B,cAAc,IAAMsmS,MAE3E7pS,QAAQ,SAAU0G,EAAImM,GAC5B6/C,EAAQlsD,EAAU,IAAM2jS,GAAkBvlS,GACtC8B,EAAGhC,UAAUK,SAASolS,KAAqBz3O,EAAMr1D,OAAS,EACtDwyS,EAAQM,UAAYz9O,EAAMr1D,OAASwV,GACnCjO,EAAIkB,aAAaY,EAAIgsD,EAAM7/C,MACzBq9R,IAGFtrS,EAAIkB,aAAaY,EAAI9B,EAAIoW,SAAS03C,EAAMr1D,WACtC6yS,GAGDxpS,EAAGhC,UAAUK,SAASolS,KAC3BvlS,EAAIkB,aAAaY,EAAI9B,EAAI4Y,cACvB0yR,GAEGL,EAAQM,UAAYzpS,EAAGhC,UAAUK,SAASqlS,KAAoBxlS,EAAIoW,SAAS3d,OAAS,GAAsB,IAAjBq1D,EAAMr1D,QACpGuH,EAAIkB,aAAaY,EAAI9B,EAAI4Y,cACvB0yR,GAEGxpS,EAAGhC,UAAUK,SAASqlS,IAC3B0F,EAAS1qS,KAAKsB,GAETmpS,EAAQM,UACbvrS,EAAIkB,aAAaY,EAAI9B,EAAIuN,WAAW89R,EAAYC,MAC9CD,GAGFrrS,EAAIrC,YAAYmE,GAEhBA,EAAGhC,UAAUK,SAASglS,IACtBhnD,EAASr8O,GAAMwwC,QAAS,GAAIvgC,OAAQq5R,EAAY,OAGhDjtD,EAASr8O,GAAMwwC,QAAS,GAAIvgC,OAAQo5R,EAAY,SAGxDD,EAAS9vS,QAAQ,SAAU0G,GACvB9B,EAAIrC,YAAYmE,KAGpB,IAAK,IADDulS,EAAUzlS,EAAU,IAAMsjS,GAAUloS,EAAQ2B,cAAc,IAAMsmS,KAC3D9sS,EAAIkvS,EAAQ5uS,OAAS,EAAGN,GAAK,EAAGA,IAAK,CAC1C,IAAIqzS,EAAcnE,EAAQlvS,GAC1B,IAAIqzS,EAAY1rS,UAAUK,SAASglS,KAAwC,aAAtBnpS,KAAKkrS,aAItD,MAHA/oD,EAASqtD,GAAel5P,QAAS,WAO7C4zP,EAAQ7uS,UAAUo1H,YAAc,WAC5B,IACI0+K,EACAV,EACAW,EACAK,EAJAzuS,EAAUhB,KAAKgB,QAKO,aAAtBhB,KAAKkrS,eACLuE,EAAUzuS,EAAQ2B,cAAc,IAAMwmS,GAAgB,SAAWS,GAAY,MAC7EwF,EAAsC,SAAzBpuS,EAAQ0D,MAAMqR,QAA8C,KAAzB/U,EAAQ0D,MAAMqR,OAAiB,KAAO05R,EAAQ/9P,cAElG+8P,EAAUztS,EAAQ2B,cAAc,IAAMumS,GAAW,SAAWC,GAAgB,WAAaS,GAAY,MACrGuF,EAAsC,SAAzBnuS,EAAQ0D,MAAMqR,QAA8C,KAAzB/U,EAAQ0D,MAAMqR,OAAiB,KAAO04R,EAAQ/8P,aAC9F,IAAI1tC,EAEJ,GAAIhD,EAAQ2B,cAAc,IAAM3B,EAAQsC,GAAK,UAAYqmS,IACrD3lS,EAAMhD,EAAQ2B,cAAc,IAAM3B,EAAQsC,GAAK,UAAYqmS,QAE1D,CACD,IAAI+F,EAAYzI,EAAS,OAAS3jS,GAAItC,EAAQsC,GAAK,SAAUD,UAAWsmS,GAAiB,wBACrFl4K,EAAWw1K,EAAS,OAAS3jS,GAAItC,EAAQsC,GAAK,SAAUD,UAAWsmS,KACvE3lS,EAA4B,aAAtBhE,KAAKkrS,aAA8BwE,EAAYj+K,EAEzDzxH,KAAKgvS,iBAAiBhvS,QAAgBgE,EAAKmrS,EAAWC,GACtDpvS,KAAK2vS,UAAU3uS,EAASgD,IAE5BkmS,EAAQ7uS,UAAUs0S,UAAY,SAAU3uS,EAASgD,GAC7C,GAAKhE,KAAKuqS,OAoBL,CACD,IAAI94K,EAAWzxH,KAAKuqS,OAAOvpS,QAC3BmhP,EAAS1wH,GAAYl+D,UAAW,GAAIjd,QAAS,UAC7C6rM,EAAS1wH,GAAYl+D,UAAWk+D,EAAS//E,aAAe,KAAM4E,QAAS,SAvBzD,CACdt1C,EAAQW,YAAYqC,GACpBm+O,EAASniP,KAAKgB,SAAW6Y,SAAU,KACnC,IAAI+kD,EAAQ,IAAI4iD,GAAM,MAClBY,SAAUpiH,KAAKgB,QACfiL,QAAUjL,EAAoB,aAC9BkS,UAAWlT,KAAKkT,UAChBxR,KAAM1B,KAAKmqS,UAAU7uS,KAAK0E,MAC1BiC,MAAOjC,KAAKqmJ,WACZtiC,WAAa1tG,EAAGrW,KAAK0qS,gBAAkB,OAAS,QAChDx2R,SAAUlU,KAAKkT,WAAckD,EAAG,OAAQC,EAAG,QAAYD,EAAG,QAASC,EAAG,SAE1EuoD,EAAMvoB,SAASryC,GACfuB,GAAanB,IAAI5D,SAAU,SAAUR,KAAKorS,SAAS9vS,KAAK0E,OACxDuF,GAAanB,IAAI5D,SAAU,SAAUR,KAAKorS,SAAS9vS,KAAK0E,OACxD4+D,EAAM59D,QAAQ0D,MAAM6uD,UAAYqL,EAAM59D,QAAQ0wC,aAAe,KAC7DktB,EAAM2iB,OACNvhF,KAAKuqS,OAAS3rO,EACd5+D,KAAKgB,QAAQwC,aAAa,gBAAiB,UAQnD0mS,EAAQ7uS,UAAU8uS,UAAY,SAAUtpS,GACpC,IAAI0pS,EAASvqS,KAAKuqS,OACd94K,EAAWzxH,KAAKuqS,OAAOvpS,QACvB4uS,EAAU5vS,KAAKuqS,OAAOvpS,QAAQqT,cAC9B84R,EAAWyC,EAAQjtS,cAAc,IAAM8mS,IAC3CtnD,EAASooD,EAAOvpS,SAAW+U,OAAQ,OAAQw9C,UAAW,KACtDg3O,EAAOvpS,QAAQ0D,MAAM6uD,UAAYg3O,EAAOvpS,QAAQ0wC,aAAe,KACrC,aAAtB1xC,KAAKkrS,eACLX,EAAOvpS,QAAQ0D,MAAM4uD,UAAY,IAErC,IAAIu8O,EAAcp+K,EAASr9G,UAAYq9G,EAAS//E,aAAep9B,GAAkBs7R,GAASljS,IACtFojS,EAAU3C,EAAShoS,kBACvBgoS,EAASrpS,UAAUM,IAAIylS,IACvB/lS,EAAUgsS,GAAU1G,KAAiBC,KACrC,IAAI0G,EAAYt8N,EAAM53E,OAAOinH,SAAW,EAAIjnH,OAAOinH,QACnD,GAAMjnH,OAAOyd,YAAcy2R,EAAaF,GAAiB7vS,KAAKgB,QAAQoT,UAAYq9G,EAAS//E,aAAe,CACtG,IAAIs+P,EAAkBv+K,EAAS//E,cAAiBm+P,EAAch0S,OAAOyd,YAAcy2R,EAAa,GAChGxF,EAAOx0R,OAASi6R,EAAiB,KACjC,IAAK,IAAI7zS,EAAI,EAAGA,GAAKs1H,EAAStsD,kBAAmBhpE,IAAK,CAClD,IAAI6H,EAAMytH,EAASr3G,SAASje,GAC5B,GAAI6H,EAAIoQ,UAAYpQ,EAAI0tC,aAAes+P,EAAgB,CACnDA,EAAiBhsS,EAAIoQ,UACrB,OAGR+tO,EAASooD,EAAOvpS,SAAWuyD,UAAWy8O,EAAiB,SAG/D9F,EAAQ7uS,UAAUgrJ,WAAa,SAAUxlJ,GACrC,IACIssS,EADUntS,KAAKgB,QAAQqT,cACJ1R,cAAc,IAAM8mS,IACvCqG,EAAU3C,EAAShoS,kBACvBgoS,EAASrpS,UAAUS,OAAOslS,IAC1B/lS,EAAUgsS,GAAUzG,KAAiBD,MAEzCc,EAAQ7uS,UAAUyzS,cAAgB,SAAU9qS,EAAKisS,EAAOlC,EAAUmC,GAgB9D,IAAK,IAfDC,EAAcnwS,KAAK6qS,cAAgB,EAEnCuF,EAASrC,EACTsC,EAAW,EACXvqG,EAAY,EACZwqG,EAAe,EACfC,EAAa,SAAUvsS,EAAKikB,GAC5B,IAAIuoR,GAAO,EAMX,OALAvoR,EAAI7oB,QAAQ,SAAUwuJ,GACd5pJ,EAAIF,UAAUK,SAASypJ,KACvB4iJ,GAAO,KAGRA,GAEFr0S,EAdC8zS,EAAMxzS,OAcG,EAAGN,GAAK,EAAGA,IAAK,CAC/B,IAAIs0S,EAAOj1R,WAAY3f,OAAOsR,iBAAiB8iS,EAAM9zS,IAAK6yG,aAC1DyhM,GAAQj1R,WAAY3f,OAAOsR,iBAAiB8iS,EAAM9zS,IAAK0vD,YACvD,IAAI6kP,EAAcT,EAAM9zS,KAAO6D,KAAKqrS,QAAQ,GACxCqF,IACA1wS,KAAK2wS,YAAcF,GAEvB,IAAIG,EAAWF,EAAeT,EAAM9zS,GAAGyI,YAAc6rS,EAAQR,EAAM9zS,GAAGyI,YAMtE,GALI2rS,EAAWN,EAAM9zS,IAAK4tS,MAAgBoG,IACtCF,EAAM9zS,GAAG2H,UAAUM,IAAIwlS,IACvBznD,EAAS8tD,EAAM9zS,IAAMm6C,QAAS,OAAQkd,SAAUo9O,EAAW,OAC3DN,KAECL,EAAM9zS,GAAGgY,WAAa87R,EAAM9zS,GAAGyI,YAAc6rS,EAAQ1C,EAAU,CAChE,GAAIkC,EAAM9zS,GAAG2H,UAAUK,SAASglS,KAC5B,GAA0B,aAAtBnpS,KAAKkrS,aAA6B,CAClC,GAAIplG,IAAcwqG,EAAc,CAExBC,EADAM,EAASZ,EAAM9zS,IACKgtS,GAAeW,OACnCmG,EAAM9zS,GAAG2H,UAAUM,IAAIwlS,IACvB0G,KAGRxqG,SAEC,GAA0B,UAAtB9lM,KAAKkrS,aAA0B,CACpC,GAAImF,EAAW,GAAKvqG,IAAcwqG,EAAc,CAC5C,IAAIO,EACAN,EADAM,EAASZ,EAAM9zS,EAAI2pM,GAAauqG,EAAW,KACvBlH,GAAeW,MACnC3nD,EAAS0uD,GAAUv6P,QAAS,SAGpC+5P,IACAvqG,EAAY,EACZwqG,EAAe,QAInBxqG,IAEAmqG,EAAM9zS,GAAG2H,UAAUK,SAASolS,KAAqB2G,EACjDnC,GAAakC,EAAM9zS,GAAGyI,cAEhB2rS,EAAWN,EAAM9zS,IAAKgtS,GAAeW,KAM3CiE,GAAakC,EAAM9zS,GAAGyI,eALtBqrS,EAAM9zS,GAAG2H,UAAUM,IAAIwlS,IACvBznD,EAAS8tD,EAAM9zS,IAAMm6C,QAAS,OAAQkd,SAAUo9O,EAAW,OAC3DN,MAOZ,GAAIJ,EAAK,CACL,IAAIY,EAAWlrS,EAAU,IAAMsjS,GAAW,SAAWU,GAAY,IAAK5pS,KAAKgB,SAC3EhB,KAAK8uS,cAAc9qS,EAAK8sS,EAAUV,GAAQ,KAGlDlG,EAAQ7uS,UAAUwzS,gBAAkB,SAAU7tS,GAC1C,IAAIsC,EAAKtC,EAAQsC,GAAGiX,OAAO,QACvBlX,EAAY,KAAOrC,EAAQsC,GAAGiX,OAAO,kBAErC8sR,EAAMJ,EAAS,OAAS3jS,GAAIA,EAAID,UADpCA,EAAkC,aAAtBrD,KAAKkrS,aAA8B7nS,EAAY,kBAAwBA,IAEzD,SAAtBmI,GAAQmb,KAAK8Q,MAAyC,SAAtBjsB,GAAQmb,KAAK8Q,MAC7C4vQ,EAAIvjS,UAAUM,IAAI,cAEtB,IAAIojS,EAAUP,EAAS,OAAS5jS,UAAWgmS,GAAgB,aAC3DhC,EAAI1lS,YAAY6lS,GAChBH,EAAI7jS,aAAa,WAAY,KAC7BxC,EAAQW,YAAY0lS,IAExB6C,EAAQ7uS,UAAU01S,WAAa,SAAUd,EAAO39I,EAAM0+I,EAAQlrS,EAAImrS,EAAKC,EAAOC,EAAKC,GAC/E,IAAIC,EAAcD,EACd1F,EAAS1rS,KAAKuqS,OAAOvpS,QAErBswS,EAAY1rS,EAAU,IAAMgkS,GAAY,SAAWL,GAAmB,IAAKmC,GAAQjvS,OACnF8zS,EAAa,SAAUvsS,EAAKikB,GAC5B,OAAOjkB,EAAIF,UAAUK,SAAS8jB,IAElC,GAAuC,IAAnCriB,EALQ,0DAKSqqS,GAAOxzS,OAAc,CACtC,IAAI80S,EAAStB,EAAM71R,SAASk4I,GAAQA,EAAO0+I,GAAU,GACjDQ,GAAgB/9N,EAAM89N,IAAWhB,EAAWgB,EAAQzH,IACxD,IAAMr2N,EAAM89N,IAAWhB,EAAWgB,EAAQpI,MAAmB1kS,EAAU8sS,IAAYC,EAAa,CAE5FD,EAAO7sS,MAAM4xC,QAAU,UACvB,IAAIm7P,EAAcF,EAAO3sS,YAAyE,EAA1D4W,WAAW3f,OAAOsR,iBAAiBokS,GAAQviM,aAC/E0iM,EAAUH,EAAO5qG,uBAChBuqG,EAAQO,EAAeN,GAAOF,GAC/BhB,EAAM/qS,aAAaY,EAAImqS,EAAM71R,SAAUk4I,EAAO++I,GAAgB/+I,EAAO0+I,KAChEv9N,EAAMi+N,KACPA,EAAQhtS,MAAM4xC,QAAU,KAIxBo7P,EAAQ5tS,UAAUK,SAASglS,MAC3BuI,EAAQhtS,MAAM4xC,QAZL,QAejBi7P,EAAO7sS,MAAM4xC,QAAU,QAGvB25P,EAAM/qS,aAAaY,EAAImqS,EAAM71R,SAAUk4I,EAAO++I,GAAgB/+I,EAAO0+I,UAIzEf,EAAM/qS,aAAaY,EAAImqS,EAAM71R,SAAUk4I,EAAO++I,EAAeC,KAGrEpH,EAAQ7uS,UAAUywS,aAAe,SAAUr6K,EAAUn/G,GACjD,IAAIvS,EAAQC,KACRgE,EAAMhE,KAAKgB,QACXitS,EAASjqS,EAAIrB,cAAc,IAAM8mS,IACjC9yG,EAAW3yL,EAAIrB,cAAc,IAAMsmS,IACvC,IAAIx1N,EAAMw6N,GAAV,CAGAt3G,EAASjrL,gBAAgB,SACzB+lH,EAAS/sH,MAAM4xC,QAAU,QACzB,IAAItgC,EAAQhS,EAAIY,aAAeqpS,EAAOrpS,YAAc+xL,EAAS/xL,aACzD+sS,EAAgB,KACjBtwS,MAAMC,KAAKmwH,EAASr3G,UAAUhb,QAAQ,SAAU0G,GAC/C6rS,GAAiB5xS,EAAM4xS,cAAc7rS,GACrCq8O,EAASr8O,GAAMoO,SAAY,OAE1B8B,EAAQi4R,EAAOrpS,eAAyD,IAAvB5E,KAAK6qS,gBACvDv4R,GAAU,GAEdtS,KAAK4xS,gBAAgB57R,EAAOy7G,EAAUn/G,GACtCm/G,EAAS/sH,MAAM4xC,QAAU,GACQ,IAA7Bm7E,EAASr3G,SAAS3d,QAAgBwxS,GAAUjuS,KAAKuqS,SACjDllS,EAAO4oS,GACPA,EAAS,KACTjuS,KAAKuqS,OAAOj4R,UACZjN,EAAOrF,KAAKuqS,OAAOvpS,SACnBhB,KAAKuqS,OAAS,KACdvmS,EAAIR,aAAa,gBAAiB,SAClCQ,EAAIF,UAAUS,OAAO,gBAG7B2lS,EAAQ7uS,UAAUw2S,eAAiB,SAAU5/R,EAAO0kL,GAChD,IAAIm7G,KAAezwS,MAAMC,KAAKq1L,EAASn1L,iBAAiB,IAAMsoS,KAC1DiI,KACAjzR,EAAQ,EACZ,OAAIgzR,EAAUr1S,OAAS,GACnBq1S,EAAU1yS,QAAQ,SAAU4E,GACxB+tS,EAAUvtS,QAAQnD,MAAMC,KAAKq1L,EAASv8K,UAAU7b,QAAQyF,MAMhE+tS,EAAU3yS,QAAQ,SAAU6oB,GACpBA,GAAOhW,GACP6M,MAGDA,GAPI,GASforR,EAAQ7uS,UAAUoyS,kBAAoB,SAAUzyG,EAAM0wG,GAClDA,EAAOhnS,MAAM4xC,QAAU,QACvB,IAAI46P,EAAQlxS,KAAK2xS,cAAcjG,EAAOvmS,mBACtCumS,EAAOvmS,kBAAkBT,MAAMqqS,eAAe,YAC9C,IAAIiD,EAAYh3G,EAAKp2L,YAAco2L,EAAKr4L,cAAc,IAAM8mS,IAAa7kS,YACrEqtS,EAAej3G,EAAKr4L,cAAc,IAAMsmS,IAAWrkS,YAEvD,OADA8mS,EAAOhnS,MAAMqqS,eAAe,WACxBiD,EAAad,EAAQe,GAK7B/H,EAAQ7uS,UAAUs2S,cAAgB,SAAU7rS,GACxCA,EAAGpB,MAAMwP,SAAW,WACpB,IAAIg+R,EAAUpsS,EAAGlB,YACbutS,EAAUrsS,EAAGnD,cAAc,oBAC/B,GAAImD,EAAGhC,UAAUK,SAAS,iBAAmB2B,EAAGhC,UAAUK,SAASmlS,IAAe,CAC9E,IAAIphL,EAAMpiH,EAAGsU,SAAS,IACjBq5D,EAAM0+N,IAAYrsS,EAAGhC,UAAUK,SAASmlS,IACzC6I,EAAQztS,MAAM4xC,QAAU,QAElBm9B,EAAM0+N,IAAYrsS,EAAGhC,UAAUK,SA5+BjC,oBA6+BJguS,EAAQztS,MAAM4xC,QAAU,SAE5B4xE,EAAIxjH,MAAM8uD,SAAW,KACrB0+O,EAAU12R,WAAW1V,EAAGpB,MAAM8uD,UAC9B00D,EAAIxjH,MAAM8uD,SAAW,GAChBigB,EAAM0+N,KACPA,EAAQztS,MAAM4xC,QAAU,IAGhC,OAAO47P,GAEXhI,EAAQ7uS,UAAUu2S,gBAAkB,SAAU57R,EAAOy7G,EAAUn/G,GA8D3D,IAAK,IA3DDg/R,EACAr/R,EAHAk+R,EAAcnwS,KAAK6qS,cAAgB,EACnCuH,EAAYpyS,KAAKqrS,QAIjB10G,EAAW32L,KAAKgB,QAAQ2B,cAAc,IAAMsmS,IAC5CoI,EAAc,EACdpyS,EAAU,SAAU6G,GACpB,GAAIA,EAAGhC,UAAUK,SAAS4lS,KAAeoG,IAAgB79R,EACrD,MAAO,WAEX,IAAI4/R,EAAU3kM,EAAOokM,cAAc7rS,GAKnC,GAJIA,IAAOynG,EAAO89L,QAAQ,KACtB6G,GAAW3kM,EAAOojM,aAEtB7qS,EAAGpB,MAAMwP,SAAW,KAChBg+R,EAAUl8R,GAAS1D,GAyCnB,MAAO,QAnCP,GALAxM,EAAGpB,MAAM8uD,SAAW,GACf1tD,EAAGhC,UAAUK,SAASqlS,KACvB1jS,EAAGhC,UAAUS,OAAOqlS,IAExB33R,EAAQs7F,EAAO89L,QAAQ9sS,QAAQuH,GAC3BynG,EAAOi9L,UAAW,CAClB,IAAIv1R,EAAMs4F,EAAO9yC,MAAMxoD,GAAOkiD,MAC9BliD,EAAQs7F,EAAO+9L,YAAYr2R,EAAM,KAAKW,eAAerX,QAAQuH,GAC7DssS,EAAY7kM,EAAO+9L,YAAYr2R,EAAM,KAAKW,eAC1C+gL,EAAWppF,EAAOvsG,QAAQ2B,cAAc,IAAMsmS,GAAY,eAAsBh0R,EAAIW,eAExF,IAAIy8R,EAAiB,EACO,aAAxB9kM,EAAO29L,cACPkH,EAAU/wS,MAAM,EAAG4Q,GAAO7S,QAAQ,SAAU0G,IACpCA,EAAGhC,UAAUK,SAASolS,KAAqBzjS,EAAGhC,UAAUK,SAASglS,OAC7DrjS,EAAGhC,UAAUK,SAASglS,MACtBrjS,EAAGpB,MAAM4xC,QAAU,GACnBtgC,GAASlQ,EAAGlB,aAEhBytS,OAIZhB,EAAc9jM,EAAOskM,eAAe5/R,EAAO0kL,GACvC7wL,EAAGhC,UAAUK,SAASolS,KACtBh8L,EAAOwjM,WAAWp6G,EAAU1kL,EAAOogS,EAAgBvsS,EAAIwM,EAAS4/R,EAASl8R,EAAOq7R,GAChFr7R,GAASlQ,EAAGlB,aAEG,IAAVqN,GACL0kL,EAASzxL,aAAaY,EAAI6wL,EAAS/5K,YACnC5G,GAASlQ,EAAGlB,cAGZ0sS,EAAY1rS,EAAU,IAAM2jS,GAAkBh8L,EAAOg9L,OAAOvpS,SAASvE,OACrEk6L,EAASzxL,aAAaY,EAAI6wL,EAASv8K,SAAUnI,EAAQo/R,EAAeC,IACpEt7R,GAASlQ,EAAGlB,aAEhBkB,EAAGpB,MAAMqR,OAAS,IAMtBw3F,EAASvtG,KACJ5B,EAAK,EAAGyE,KAAQxB,MAAMC,KAAKmwH,EAASr3G,UAAWhc,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAG1E,GAAgB,UADFa,EADL4D,EAAGzE,IAGR,MAEQ4B,KAAK4tS,cAAc5tS,KAAKgB,QAAShB,KAAKgB,QAAQ0M,uBAAuBu7R,IAAW,MAC1E32R,GAClBtS,KAAKutS,sBAGbrD,EAAQ7uS,UAAUizS,kBAAoB,WAClC,IAAIzwR,EAAO7d,KAAKgB,QAAQ2B,cAAc,IAAMsmS,IAC5C,IAAIx1N,EAAM51D,IAAUA,EAAK/Z,UAAUK,SAASulS,IAA5C,CAGA1pS,KAAKuE,OAAOsZ,EAAM6rR,IAClB,IAAIoE,KAAezsS,MAAMC,KAAKuc,EAAKtM,YACnCu8R,EAAU,GAAGpiS,gBAAgB,SAC7BoiS,EAAU,GAAGpiS,gBAAgB,WAEjCw+R,EAAQ7uS,UAAUi3S,mBAAqB,WACnC,IAAIz0R,EAAO7d,KAAKgB,QAAQ2B,cAAc,IAAMsmS,IAC5CjpS,KAAKoE,IAAIyZ,EAAM6rR,IACf1pS,KAAKwtS,mBAETtD,EAAQ7uS,UAAUmyS,gBAAkB,WAChC,IAAI3vR,EAAO7d,KAAKgB,QAAQ2B,cAAc,IAAMsmS,IAC5C,IAAIx1N,EAAM51D,IAAUA,EAAK/Z,UAAUK,SAASulS,IAA5C,CAGA,IACIoE,EADAX,EAAWntS,KAAKgB,QAAQ2B,cAAc,IAAM8mS,IAQ5ChtQ,GALAqxQ,EADA9tS,KAAK2qS,gBACUtpS,MAAMC,KAAKuc,EAAKlb,cAAc,sBAAsByX,aAGpD/Y,MAAMC,KAAKuc,EAAKtM,aAEZ,GAAG3M,YAAckpS,EAAU,GAAGlpS,YACjD2tS,EAAUvyS,KAAKgB,QAAQ4D,YAC3B,GAAIuoS,EAAU,CACVoF,GAAWpF,EAASvoS,YACpB,IAAI4tS,EAASrF,EAASvoS,YAAc,KACpCkpS,EAAU,GAAGpiS,gBAAgB,SAC7B1L,KAAKkT,UAAY46R,EAAU,GAAGppS,MAAM8H,KAAOgmS,EAAS1E,EAAU,GAAGppS,MAAM+H,MAAQ+lS,EAEnF,KAAID,GAAW91Q,GAAf,CAGA,IAAIz/B,GAAWu1S,EAAU91Q,EAAWqxQ,EAAU,GAAGlpS,aAAe,EAChEkpS,EAAU,GAAGpiS,gBAAgB,SAC7B,IAAI+kS,EAAQ3C,EAAU,GAAGlpS,YAAc5H,EAAS,KAChDgD,KAAKkT,UAAY46R,EAAU,GAAGppS,MAAMsqG,YAAcyhM,EAAO3C,EAAU,GAAGppS,MAAMmnD,WAAa4kP,KAE7FvG,EAAQ7uS,UAAUo3S,cAAgB,SAAU50R,EAAM60R,EAASz9R,GACvD,IAAIlV,EAAQC,KACZ,IAAI6d,EAAK80R,mBAAuC,SAAlB90R,EAAKhE,SAAnC,CAGA,IAAI+4R,KAIJ,GAHAA,EAASpuS,KAAKyiS,EAAS,OAAS5jS,UA3mCrB,oBA4mCXuvS,EAASpuS,KAAKyiS,EAAS,OAAS5jS,UA3mCnB,sBA4mCbuvS,EAASpuS,KAAKyiS,EAAS,OAAS5jS,UA9mCpB,qBA+mCA,IAAR4R,GAA4B,SAAf4I,EAAKs2C,MAClBy+O,EAASxzS,QAAQ,SAAU4E,GACvB0uS,EAAQ/wS,YAAYqC,KAExBhE,KAAKwqS,WAAY,EACjBxqS,KAAKoE,IAAIsuS,EAAShJ,SAEjB,GAAmB,SAAf7rR,EAAKs2C,MAAkB,CAC5B,IAAI0+O,EAAWH,EAAQnhS,WACnBuhS,EAAcF,EAAS,MACxBvxS,MAAMC,KAAKuxS,GAAUzzS,QAAQ,SAAU0G,GACtC/F,EAAMurS,WAAWC,MAAM/mS,KAAKsB,GAC5BgtS,EAAYnxS,YAAYmE,KAE5B4sS,EAAQ/wS,YAAYmxS,GACpBJ,EAAQ/wS,YAAYixS,EAAS,IAC7BF,EAAQ/wS,YAAYixS,EAAS,IAC7B5yS,KAAKwqS,WAAY,EACjBxqS,KAAKoE,IAAIsuS,EAAShJ,OAG1BQ,EAAQ7uS,UAAU03S,aAAe,WAC7B,IAAIhzS,EAAQC,KACZA,KAAKqqS,QAAUrqS,KAAKoqS,QAAQxoS,WAAU,GACtC5B,KAAKoE,IAAIpE,KAAKoqS,QAASnB,IACvBjpS,KAAKqrS,cACahqS,MAAMC,KAAKtB,KAAKoqS,QAAQhwR,UACjChb,QAAQ,SAAU4E,GACH,QAAhBA,EAAIhB,UACJjD,EAAMsrS,QAAQ7mS,KAAKR,GACnBA,EAAIR,aAAa,gBAAiB,SAClCzD,EAAMqE,IAAIJ,EAAKklS,QAI3BgB,EAAQ7uS,UAAUwkF,YAAc,WAC5B,IACImzN,EACAlF,EACAmF,EAHAjvS,EAAMhE,KAAKgB,QAIXy5D,EAAQz6D,KAAKy6D,MAIjB,GAHIz2D,GAAOA,EAAIoW,SAAS3d,OAAS,IAC7Bu2S,EAAahvS,EAAIrB,cAAc,IAAMsmS,KAErB,MAAhBjpS,KAAKoqS,QACLpqS,KAAK+yS,oBAEJ,GAAI/uS,GAAOy2D,EAAMh+D,OAAS,EAAG,CACzBu2S,IACDA,EAAa/L,EAAS,OAAS5jS,UAAW4lS,MAE9C,IAAK,IAAI9sS,EAAI,EAAGA,EAAIs+D,EAAMh+D,OAAQN,IAC9B2xS,EAAY9tS,KAAKkzS,mBAAmBz4O,EAAMt+D,KACD,IAArC6D,KAAKqrS,QAAQ9sS,QAAQuvS,IACrB9tS,KAAKqrS,QAAQ7mS,KAAKspS,GAEjB9tS,KAAKwqS,WACNxqS,KAAKyyS,cAAch4O,EAAMt+D,GAAI62S,EAAY72S,IAE7C82S,EAAWD,EAAWrwS,cAAc,cAAgB83D,EAAMt+D,GAAGg4D,MAAMv+C,iBAEzD6kD,EAAMt+D,GAAGw2S,mBAA2C,SAAtBl4O,EAAMt+D,GAAG0d,UACzC7Z,KAAKsrS,YAAY7wO,EAAMt+D,GAAGg4D,MAAQ,KAAKv+C,eAAepR,KAAKspS,GAE/DmF,EAAStxS,YAAYmsS,IAGrBkF,EAAWrxS,YAAYmsS,GAG/B9pS,EAAIrC,YAAYqxS,KAGxB9I,EAAQ7uS,UAAU83S,QAAU,SAAUrrJ,EAAM9mJ,GAGxC,IAAK,IADDu2G,EADAl6G,EAAMiB,OAAOhB,KAAKwqJ,GAEb3rJ,EAAI,EAAGA,EAAIkB,EAAIZ,OAAQN,IAEjB,WADXo7G,EAASl6G,EAAIlB,IACQ6D,KAAKoE,IAAIpD,EAAS8mJ,EAAKvwC,IAAWv2G,EAAQwC,aAAa+zG,EAAQuwC,EAAKvwC,KAUjG2yL,EAAQ7uS,UAAUs6E,YAAc,SAAUlb,EAAOu7D,GAC7C,IAAIpyH,EAAW62D,EACX54D,EAAM+B,EAASnH,OACfg3E,EAAMuiD,KACNA,GAAW,GAEf,IAAIv2F,EAAS,SAAUu2F,EAAUhyH,GACzBgyH,GACAhyH,EAAIF,UAAUS,OAAOgiS,IACrBviS,EAAIR,aAAa,gBAAiB,WAGlCQ,EAAIF,UAAUM,IAAImiS,IAClBviS,EAAIR,aAAa,gBAAiB,UAG1C,GAAI3B,GAAOA,EAAM,EAAG,CAChB,IAAK,IAAIzD,EAAK,EAAGyE,KAAQxB,MAAMC,KAAKsC,GAAWxF,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAEjEqhC,EAAOu2F,EADGnzH,EAAGzE,IAGjB43H,EAAW3xH,EAAYT,EAAU2iS,IAAe5iS,EAASC,EAAU2iS,QAElE,CAGD9mQ,EAAOu2F,EADAn0H,GAAe,IAARA,EAAa+B,EAAS,GAAK62D,KAUjDyvO,EAAQ7uS,UAAU+3S,SAAW,SAAU34O,EAAOxoD,GAC1C,IAAI07R,EAEAh3G,EADA08G,EAAWrzS,KAAKgB,QAAQ2B,cAAc,IAAMsmS,IAE5CqK,EAAU,OACV7/N,EAAMxhE,KACNA,EAAQ,GAEZwoD,EAAMr7D,QAAQ,SAAUyB,GACf4yE,EAAM5yE,EAAEszD,QAAsB,SAAZtzD,EAAEszD,OAAgC,SAAZm/O,IACzCA,EAAUzyS,EAAEszD,SAGpB,IAAK,IAAI/1D,EAAK,EAAGm1S,EAAU94O,EAAOr8D,EAAKm1S,EAAQ92S,OAAQ2B,IAAM,CACzD,IAAIyf,EAAO01R,EAAQn1S,GAOnB,GANIq1E,EAAM51D,EAAKnX,QACXmX,EAAKnX,KAAO,UAEhBinS,EAAa/nS,EAAU,IAAMsjS,GAAUlpS,KAAKgB,SAC5C6c,EAAKs2C,MAAQm/O,EACb38G,EAAW32L,KAAKkzS,mBAAmBr1R,GAC/B7d,KAAKqrS,QAAQ5uS,QAAUwV,GAAS07R,EAAWlxS,QAAU,EAAG,CACxDuD,KAAK6rS,cACL,IAAI2H,EAA6B,MAAlB31R,EAAKs2C,MAAM,GAAa,EAAsB,MAAlBt2C,EAAKs2C,MAAM,GAAa,EAAI,EACnEnwD,OAAM,EACLhE,KAAKwqS,WAAyB,SAAZ8I,EAQdtzS,KAAKwqS,YACVxmS,EAAM6B,EAAQ8nS,EAAW,GAAI,IAAM1E,IAAW7uR,SAASo5R,IACnDtuS,aAAayxL,EAAU3yL,EAAIoW,SAASnI,IACxCjS,KAAKsrS,YAAYztR,EAAKs2C,MAAQ,KAAKv+C,eAAeyS,OAAOpW,EAAO,EAAG0kL,GACnE32L,KAAKsyS,sBAEsB,IAAtB3E,EAAWlxS,QAChBkxS,EAAa/nS,EAAU,IAAMqjS,GAAWjpS,KAAKgB,UAClC,GAAGW,YAAYg1L,GAG1Bg3G,EAAW,GAAGltS,WAAWyE,aAAayxL,EAAUg3G,EAAW17R,KAlB3DjS,KAAKyyS,cAAc50R,EAAMw1R,EAAU,GACnCrzS,KAAKwqS,WAAY,GACjBxmS,EAAM6B,EAAQ8nS,EAAW,GAAI,IAAM1E,IAAW7uR,SAASo5R,IACnD7xS,YAAYg1L,GAChB32L,KAAKsrS,YAAYztR,EAAKs2C,MAAQ,KAAKv+C,eAAepR,KAAKmyL,GACvD32L,KAAKsyS,sBAeTtyS,KAAKy6D,MAAMpyC,OAAOpW,EAAO,EAAG4L,GAC5B7d,KAAKqrS,QAAQhjR,OAAOpW,EAAO,EAAG0kL,GAC9B1kL,IACAjS,KAAKquS,UAAYgF,EAASzuS,aAGlCyuS,EAAS3uS,MAAMsR,MAAQ,GACvBhW,KAAKutS,sBAQTrD,EAAQ7uS,UAAUo4S,YAAc,SAAUxzS,GACtC,IACIgS,EADArO,EAAW3D,EAEX0tS,KAAgBtsS,MAAMC,KAAKsE,EAAU,IAAMsjS,GAAUlpS,KAAKgB,UAC9D,GAA0B,mBACtBiR,EAAQ8iB,SAAS90B,EAAKiN,WAAY,IAClClN,KAAK0zS,kBAAkBzhS,EAAO07R,QAG9B,GAAI/pS,GAAYA,EAASnH,OAAS,EAC9B,IAAK,IAAI2B,EAAK,EAAGyE,KAAQxB,MAAMC,KAAKsC,GAAWxF,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACjE,IAAI4F,EAAMnB,EAAGzE,GACb6T,EAAQjS,KAAKqrS,QAAQ9sS,QAAQyF,GAC7BhE,KAAK0zS,kBAAkBzhS,EAAO07R,GAC9BA,EAAa/nS,EAAU,IAAMsjS,GAAUlpS,KAAKgB,aAG/C,CACGgD,EAAOJ,GAAYA,EAASnH,QAA8B,IAApBmH,EAASnH,OAAgBmH,EAAS,GAAK3D,EACjFgS,EAAQ07R,EAAWpvS,QAAQyF,GAC3BhE,KAAK0zS,kBAAkBzhS,EAAO07R,GAGtC3tS,KAAK8qS,UAETZ,EAAQ7uS,UAAUq4S,kBAAoB,SAAUzhS,EAAO07R,GACnD,GAAI3tS,KAAKqrS,QAAQp5R,IAAU07R,EAAW17R,GAAQ,CAC1C,IAAI0hS,EAAS3zS,KAAKqrS,QAAQ9sS,QAAQovS,EAAW17R,IAC7C,GAAIjS,KAAKwqS,UAAW,CAChB,IAAIoJ,OAAW,EACfA,EAAW5zS,KAAKsrS,YAAYtrS,KAAKy6D,MAAMk5O,GAAQx/O,MAAQ,KAAKv+C,eAAerX,QAAQyB,KAAKqrS,QAAQsI,IAChG3zS,KAAKsrS,YAAYtrS,KAAKy6D,MAAMk5O,GAAQx/O,MAAQ,KAAKv+C,eAAeyS,OAAOurR,EAAU,GAErFvuS,EAAOsoS,EAAW17R,IAClBjS,KAAKy6D,MAAMpyC,OAAOsrR,EAAQ,GAC1B3zS,KAAKqrS,QAAQhjR,OAAOsrR,EAAQ,KAGpCzJ,EAAQ7uS,UAAUw4S,eAAiB,SAAUC,EAAcn9G,EAAU94K,GACjE,IAEIk2R,EAFAC,EAAWn2R,EAAKnX,KAChBiqG,EAASmjM,EAKb,GAH8B,qBAC1BC,EAA2C,mBAArBpjM,EAAe,UAEX,oBAAaojM,GA8BtC,GAAiB,UAAbC,EAAsB,CACvBhwS,EAAMijS,EAAS,SACnBppR,EAAKva,GAAMU,EAAIV,GAAKua,EAAKva,GAAOU,EAAIV,GAAK9D,EAAY,WACrDm3L,EAASh1L,YAAYqC,GACrB2sG,EAAOt6D,SAASryC,QAlCoC,CACpD,IAAIg2B,OAAa,EACb/R,EAAM6rR,EACV7rR,EAAiC,mBAAY6rR,EAAa5jS,OAAS4jS,EACnE,IAEI,GAAItzS,SAASgB,iBAAiBymB,GAAKxrB,OAAQ,CACvC,IAAIuH,EACAiwS,GADAjwS,EAAMxD,SAASmC,cAAcslB,IACfnmB,UAAUoO,OAC5B8pB,EAAaqjC,GAAiB42O,GAC9B5uS,EAAOrB,GACP6Z,EAAK5O,SAAWglS,GAGxB,MAAOpzS,GACHm5B,EAAaqjC,GAAiBp1C,GAElC,IAAIiqN,OAAY,EACXz+J,EAAMz5C,KACPk4M,EAAYl4M,KAAeh6B,KAAM,cAEhCyzE,EAAMy+J,IAAcA,EAAUz1O,OAAS,MACrC4E,MAAMC,KAAK4wO,GAAW9yO,QAAQ,SAAU4E,GAClCyvE,EAAMzvE,EAAIhB,WACXgB,EAAIU,MAAM4xC,QAAU,IAExBqgJ,EAASh1L,YAAYqC,KAUjChE,KAAKoE,IAAIuyL,EAj4CE,cAk4CX32L,KAAKqrS,QAAQ7mS,KAAKmyL,IAEtBuzG,EAAQ7uS,UAAU64S,gBAAkB,SAAUr2R,EAAM84K,GAChD,IAAIw9G,EAAMlN,EAAS,UAAY5jS,UA/3CrB,eAg4CV8wS,EAAI3wS,aAAa,OAAQ,UACzB,IACIkwE,EACA0gO,EAFAC,EAAUx2R,EAAK4O,KAGnB5O,EAAKva,GAAM6wS,EAAI7wS,GAAKua,EAAKva,GAAM6wS,EAAI7wS,GAAK9D,EAAY,aACpD,IAAI80S,EAASrN,EAAS,OAAS5jS,UAAW,oBAuB1C,OAtBIgxS,GACAC,EAAOtyS,UAAYqyS,EACnBF,EAAIxyS,YAAY2yS,GAChBH,EAAIrwS,UAAUM,IAAI,eAGlBpE,KAAKoE,IAAIuyL,EAAU,iBAEnB94K,EAAK02R,YAAc12R,EAAK22R,cACnB32R,EAAK02R,YAAc12R,EAAK22R,YAAe32R,EAAK02R,YAC7C7gO,EAAU71D,EAAK02R,WAAa,WAC5BH,EAAU,SAGV1gO,EAAU71D,EAAK22R,WAAa,WAC5BJ,EAAU,UAGlB,IAAIr2L,IAASrqC,QAASA,EAAS2qC,aAAc+1L,GAAWD,GACpDt2R,EAAK7H,OACLmsO,EAASgyD,GAAOn+R,MAASzT,EAAWsb,EAAK7H,SAEtCm+R,GAEXjK,EAAQ7uS,UAAU63S,mBAAqB,SAAUr1R,GAC7C,IAAI84K,EACAw9G,EAeJ,IAdAx9G,EAAWswG,EAAS,OAAS5jS,UAAW6lS,MAC/B1lS,aAAa,gBAAiB,SAClCxD,KAAKqrS,UACNrrS,KAAKqrS,YAELxtR,EAAKi4D,gBACL91E,KAAKmzS,QAAQt1R,EAAKi4D,eAAgB6gH,GAElC94K,EAAK42R,aACL99G,EAASnzL,aAAa,QAASqa,EAAK42R,aAEpC52R,EAAK5K,WACL0jL,EAAStzL,UAAYszL,EAAStzL,UAAY,IAAMwa,EAAK5K,UAErD4K,EAAK5O,SACLjP,KAAK6zS,eAAeh2R,EAAK5O,SAAU0nL,EAAU94K,QAG7C,OAAQA,EAAKnX,MACT,IAAK,UACDytS,EAAMn0S,KAAKk0S,gBAAgBr2R,EAAM84K,IAC7BnzL,aAAa,WAAY,MAC7BmzL,EAASh1L,YAAYwyS,GACrBx9G,EAASj6L,iBAAiB,QAASsD,KAAK00S,UAAUp5S,KAAK0E,OACvD,MACJ,IAAK,YACDA,KAAKoE,IAAIuyL,EAAUwyG,IAI/B,GAAItrR,EAAK82R,WAAY,CACjB,IAAIC,EAAO/2R,EAAK82R,WACH,YAATC,GACA50S,KAAKoE,IAAIuyL,EAt8CL,kBAu8CJ32L,KAAKoE,IAAIuyL,EAAU,iBAEL,aAATi+G,GACL50S,KAAKoE,IAAIuyL,EAAU2yG,IAG3B,GAAIzrR,EAAKhE,SAAU,CACf,IAAIA,EAAWgE,EAAKhE,SACH,SAAbA,EACA7Z,KAAKoE,IAAIuyL,EAAU4yG,IAED,SAAb1vR,IACA88K,EAAS7yL,UAAUK,SAASglS,KAC7BnpS,KAAKoE,IAAIuyL,EAAU6yG,KAQ/B,MAJsB,SAAlB3rR,EAAKhE,UAAuBgE,EAAK80R,oBAAsBh8G,EAAS7yL,UAAUK,SAASglS,MACnFnpS,KAAKoE,IAAIuyL,EAAUozG,IACnB/pS,KAAK6qS,iBAEFl0G,GAEXuzG,EAAQ7uS,UAAUq5S,UAAY,SAAU7zS,GACpCb,KAAKisS,gBAAgBprS,EAAEutG,gBAE3B87L,EAAQ7uS,UAAU4wS,gBAAkB,SAAUjoS,GAC1ChE,KAAK6sS,gBAAgB7oS,EAAImB,mBACzBnF,KAAK4sS,UAAU1qS,SAEnBgoS,EAAQ7uS,UAAUwxS,gBAAkB,SAAU90G,GACrCtkH,EAAMzzE,KAAK4sS,YACZ5sS,KAAK4sS,UAAUppS,aAAa,WAAY,MAE5CxD,KAAK4sS,UAAY70G,EACbtkH,EAAMzzE,KAAKoqS,WAAaryG,EAAO1jL,cAAcvQ,UAAUK,SA5+ChD,cA6+CP4zL,EAAOrsL,gBAAgB,YAGvB1L,KAAK4sS,UAAUppS,aAAa,WAAY,MAGhD0mS,EAAQ7uS,UAAUmxG,eAAiB,WAC/B,OAAOxsG,KAAKgtG,kBAOhBk9L,EAAQ7uS,UAAUkkC,cAAgB,WAC9B,MAAO,WAEX2qQ,EAAQ7uS,UAAUw5S,cAAgB,SAAUpoN,GACxCzsF,KAAKy6D,MAAQz6D,KAAK4qS,aAClB5qS,KAAK6rS,cACL7rS,KAAK2rS,eACL3rS,KAAKy6D,MAAQgyB,EACbzsF,KAAK4qS,aAAe5qS,KAAKy6D,MACzBz6D,KAAK6/E,cACL7/E,KAAKutS,sBAETrD,EAAQ7uS,UAAUyvS,OAAS,WACvB,IAAI9mS,EAAMhE,KAAKgB,QACfhB,KAAKuvS,UAAW,EACZvvS,KAAKwqS,WACLxqS,KAAKwtS,kBAELxtS,KAAKuqS,QAAgC,UAAtBvqS,KAAKkrS,cACpBlrS,KAAKuqS,OAAOhpN,OAEhB,IAAIqsN,EAAgB5tS,KAAK4tS,cAAc5pS,EAAKA,EAAI0J,uBAAuBu7R,IAAW,IAC7E2E,GACD5tS,KAAKmrS,iBAELyC,GAAiB5tS,KAAK2qS,cAAiB3qS,KAAKquS,YAAcrqS,EAAIY,eAG9D5E,KAAKquS,UAAYrqS,EAAIY,aAAegpS,IACpC5tS,KAAKutS,qBAELvtS,KAAKuqS,SACDvqS,KAAKwqS,WACLxqS,KAAKsuS,oBAETtuS,KAAK8rS,aAAa9rS,KAAKuqS,OAAOvpS,SAAS,GACnChB,KAAKwqS,WACLxqS,KAAKsyS,sBAGbtyS,KAAKquS,UAAYrqS,EAAIY,YACrB5E,KAAKuvS,UAAW,EAChBvvS,KAAKixH,cASTi5K,EAAQ7uS,UAAUmsF,kBAAoB,SAAUiF,EAASC,GAErD,IAAK,IADDooN,EAAO90S,KAAKgB,QACP5C,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKmvF,GAAUruF,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAE9D,OADWyE,EAAGzE,IAEV,IAAK,QACD,GAAMquF,EAAQhyB,iBAAiBj8D,OAASkuF,EAAQjyB,iBAAiBj8D,MA4B7DwB,KAAK60S,cAAcpoN,EAAQhyB,YA1B3B,IAAK,IADDs6O,EAAcz2S,OAAOhB,KAAKmvF,EAAQhyB,OAC7Bt+D,EAAI,EAAGA,EAAI44S,EAAYt4S,OAAQN,IAAK,CACzC,IAAI8V,EAAQ8iB,SAASz2B,OAAOhB,KAAKmvF,EAAQhyB,OAAOt+D,GAAI,IAChD6vB,EAAW1tB,OAAOhB,KAAKmvF,EAAQhyB,MAAMxoD,IAAQ,GAE7C+iS,GADc12S,OAAOouF,EAAQjyB,MAAMxoD,IAAQ+Z,GAC7B1tB,OAAOmuF,EAAQhyB,MAAMxoD,IAAQ+Z,IAC/C,GAAIhsB,KAAKwqS,WAA0B,UAAbx+Q,EAAsB,CACxChsB,KAAKkyD,UACL,MAEJ,IAAI+iP,EAA6B,sBAAbjpR,IAAqCgpR,EACrDE,EAA4B,aAAblpR,GAAkD,IAAvBhsB,KAAK6qS,eAC/C,GAAoB7qS,KAAKy6D,MAAMxoD,GAAwB,mBAAKijS,MAC1Dl1S,KAAK6qS,cAEX7qS,KAAK6rS,cAELxmS,KADiBhE,MAAMC,KAAKsE,EAAU,IAAMqjS,GAAY,KAAOC,GAAU4L,IAC1D7iS,IACfjS,KAAKqrS,QAAQhjR,OAAOpW,EAAO,GAC3BjS,KAAKozS,UAAUpzS,KAAKy6D,MAAMxoD,IAASA,GACnCjS,KAAKy6D,MAAMpyC,OAAOpW,EAAO,GACrBjS,KAAKy6D,MAAMxoD,GAAOhD,UAClBjP,KAAKqrS,QAAQhjR,OAAOroB,KAAKy6D,MAAMh+D,OAAQ,GAOnD,MACJ,IAAK,QACD,IAAI00S,EAAM2D,EAAKlwS,YACfu9O,EAAS2yD,GAAQ9+R,MAASzT,EAAWkqF,EAAQz2E,SAC7ChW,KAAKutS,qBACDvtS,KAAKuqS,QAAU4G,EAAM2D,EAAKlwS,aAC1B5E,KAAK8rS,aAAa9rS,KAAKuqS,OAAOvpS,SAAS,GAE3C,MACJ,IAAK,SACDmhP,EAASniP,KAAKgB,SAAW+U,OAAUxT,EAAWkqF,EAAQ12E,UACtD,MACJ,IAAK,eACD/V,KAAK6rS,cACL7rS,KAAKutS,qBACDvtS,KAAKkT,WACLlT,KAAKoE,IAAI0wS,EAtmDnB,SAwmDM90S,KAAKmuS,kBACL,MACJ,IAAK,YACD1hN,EAAQv5E,UAAYlT,KAAKoE,IAAI0wS,EA3mDnC,SA2mDoD90S,KAAKuE,OAAOuwS,EA3mDhE,SA4mDWrhO,EAAMzzE,KAAK2qS,gBACZl+M,EAAQv5E,UAAYlT,KAAKoE,IAAIpE,KAAK2qS,aAAa3pS,QA7mDzD,SA6mD6EhB,KAAKuE,OAAOvE,KAAK2qS,aAAa3pS,QA7mD3G,UA+mDWyyE,EAAMzzE,KAAKuqS,UACZ99M,EAAQv5E,UAAYlT,KAAKoE,IAAIpE,KAAKuqS,OAAOvpS,QAhnDnD,SAgnDuEhB,KAAKuE,OAAOvE,KAAKuqS,OAAOvpS,QAhnD/F,UAknDUhB,KAAKwqS,WACLxqS,KAAKwtS,qBAYzBtD,EAAQ7uS,UAAUgpM,SAAW,SAAUpyL,EAAOjV,GAC1C,GAAIgD,KAAKqrS,QAAQp5R,GAAQ,CACrB,IAAI07R,KAAgBtsS,MAAMC,KAAKsE,EAAU,IAAMsjS,GAAUlpS,KAAKgB,WAChD,IAAVhE,EACA2wS,EAAW17R,GAAOnO,UAAUM,IA1mD3B,YA6mDDupS,EAAW17R,GAAOnO,UAAUS,OA7mD3B,YA+mDLvE,KAAKmuS,oBAGbtjN,IACIxiF,KAAe8nH,KAChB+5K,EAAQ7uS,UAAW,aAAS,GAC/BwvF,IACI3jF,EAAS,SACVgjS,EAAQ7uS,UAAW,aAAS,GAC/BwvF,IACI3jF,EAAS,SACVgjS,EAAQ7uS,UAAW,cAAU,GAChCwvF,IACI3jF,EAAS,eACVgjS,EAAQ7uS,UAAW,oBAAgB,GACtCwvF,IACI3jF,GAAS,IACVgjS,EAAQ7uS,UAAW,iBAAa,GACnCwvF,IACI/hF,KACDohS,EAAQ7uS,UAAW,eAAW,GACjCwvF,IACI/hF,KACDohS,EAAQ7uS,UAAW,eAAW,GACjCwvF,IACI/hF,KACDohS,EAAQ7uS,UAAW,iBAAa,GACnCwvF,IACI/hF,KACDohS,EAAQ7uS,UAAW,oBAAgB,GACtC6uS,EAAUr/M,IACNzhF,GACD8gS,IAEL3+L,ICrsDEjhB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAQ5Du4Q,GAAiB,eAEjBjM,GAAW,eAGXkM,GAAa,iBAEbC,GAAgB,yBAChBC,GAAc,gBACdC,GAAY,kBACZC,GAAgB,gBAIhBC,GAAc,iBAEdC,GAAa,aACbC,GAAa,WAEbpP,GAAc,YACdqP,GAAiB,qBAEjBC,GAAkB,iBAClBC,GAAyC,SAAU3qN,GAEnD,SAAS2qN,IACL,OAAkB,OAAX3qN,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbAsqF,GAAUwrN,EAAyB3qN,GAInCN,IACI3jF,EAAS,cACV4uS,EAAwBz6S,UAAW,cAAU,GAChDwvF,IACI3jF,EAAS,MACV4uS,EAAwBz6S,UAAW,gBAAY,GAClDwvF,IACI3jF,EAAS,WACV4uS,EAAwBz6S,UAAW,cAAU,GACzCy6S,GACT92O,IAEE+2O,GAA4C,SAAU5qN,GAEtD,SAAS4qN,IACL,OAAkB,OAAX5qN,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVAsqF,GAAUyrN,EAA4B5qN,GAItCN,IACI9iF,GAAUiwB,OAAQ,UAAW9sB,SAAU,IAAK0U,OAAQ,UAAYk2R,KACjEC,EAA2B16S,UAAW,gBAAY,GACrDwvF,IACI9iF,GAAUiwB,OAAQ,YAAa9sB,SAAU,IAAK0U,OAAQ,UAAYk2R,KACnEC,EAA2B16S,UAAW,cAAU,GAC5C06S,GACT/2O,IAKEg3O,GAA+B,SAAU7qN,GAEzC,SAAS6qN,IACL,OAAkB,OAAX7qN,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAiB/D,OAnBAsqF,GAAU0rN,EAAe7qN,GAIzBN,IACI3jF,OAAS/L,IACV66S,EAAc36S,UAAW,eAAW,GACvCwvF,IACI3jF,OAAS/L,IACV66S,EAAc36S,UAAW,cAAU,GACtCwvF,IACI3jF,OAAS/L,IACV66S,EAAc36S,UAAW,gBAAY,GACxCwvF,IACI3jF,OAAS/L,IACV66S,EAAc36S,UAAW,eAAW,GACvCwvF,IACI3jF,GAAS,IACV8uS,EAAc36S,UAAW,gBAAY,GACjC26S,GACTh3O,IAYEi3O,GAA2B,SAAU9qN,GAOrC,SAAS8qN,EAAUjjS,EAAShS,GACxB,IAAIjB,EAAQorF,EAAO7pF,KAAKtB,KAAMgT,EAAShS,IAAYhB,KAYnD,OARAD,EAAM62G,YACF2zF,OAAQ,UACRD,SAAU,YACVv2F,MAAO,QACPl2E,MAAO,QACPy2E,KAAM,OACNz1F,IAAK,OAEF9e,EAo3BX,OAv4BAuqF,GAAU2rN,EAAW9qN,GAyBrB8qN,EAAU56S,UAAUiX,QAAU,WAC1B,IAAIvS,EAAQC,KACRgE,EAAMhE,KAAKgB,QAOf,IANAmqF,EAAO9vF,UAAUiX,QAAQhR,KAAKtB,MAC9BA,KAAKmlB,eACLnlB,KAAKk2S,WAAY,EACjBl2S,KAAKm2S,YAAY/2S,QAAQ,SAAUg3S,GAC/B51S,SAASuL,KAAKpK,YAAY5B,EAAMiB,QAAQ2B,cAAcyzS,IAAS1xS,MAAM4xC,QAAU,SAE5EtyC,EAAI4Y,YACP5Y,EAAIsB,YAAYtB,EAAI4Y,YAExB,GAAI5c,KAAKoqS,QACL,KAAOpqS,KAAKqqS,QAAQztR,YAChB5Y,EAAIrC,YAAY3B,KAAKqqS,QAAQztR,YAGrC5Y,EAAI0H,gBAAgB,UACnB,gBAAiB,uBAAwB,QAAQtM,QAAQ,SAAUqrS,GAChE1qS,EAAMiB,QAAQ0K,gBAAgB++R,MAGtCwL,EAAU56S,UAAUoX,UAAY,WAC5B,IAAI4jS,EAASxwS,EAAQ7F,KAAKgB,QAAS,IAAMs0S,IACzCt1S,KAAKs2S,UAAW,EAChBt2S,KAAKm2S,eACAn2S,KAAKk2S,YACNl2S,KAAKk2S,WAAY,GAEhBziO,EAAM4iO,GAKPr2S,KAAKgB,QAAQ8C,UAAUM,IAAI+wS,KAJ3BkB,EAAOvyS,UAAUM,IA7Hd,YA8HHpE,KAAKs2S,UAAW,GAKhBt2S,KAAKkT,WACLlT,KAAKoE,IAAIpE,KAAKgB,QA5IZ,SA8IDhB,KAAK4rG,oBAAqBn4B,EAAMzzE,KAAKu2S,iBACtCv2S,KAAKu2S,mBAGbN,EAAU56S,UAAU+I,IAAM,SAAUJ,EAAKikB,GACrCjkB,EAAIF,UAAUM,IAAI6jB,IAEtBguR,EAAU56S,UAAUkJ,OAAS,SAAUP,EAAKikB,GACxCjkB,EAAIF,UAAUS,OAAO0jB,IAMzBguR,EAAU56S,UAAU0wG,OAAS,WACzB/rG,KAAKmuG,aACLnuG,KAAKw7M,gBACLx7M,KAAKukB,cAET0xR,EAAU56S,UAAU8yG,WAAa,WAC7B,IAAIn4F,EAAQzT,EAAWvC,KAAKgW,OACxBD,EAASxT,EAAWvC,KAAK+V,QAC7BosO,EAASniP,KAAKgB,SAAWgV,MAASA,EAAOD,OAAUA,IAI/C/V,KAAKu2S,cAAc95S,OAAS,IAC5BuD,KAAKw2S,WAAax2S,KAAKu2S,eAE3B7yS,EAAW1D,KAAKgB,SALZk1H,gBAAiB,QAAStkH,KAAQ,eAAgB6kS,uBAAwB,SAMtD,WAApBz2S,KAAK02S,YACL12S,KAAKgB,QAAQwC,aAAa,uBAAwB,UAG1DyyS,EAAU56S,UAAUmgN,cAAgB,WAChCx7M,KAAKoqS,QAAWpqS,KAAKgB,QAAQoZ,SAAS3d,OAAS,EAAKgJ,EAAO,MAAOzF,KAAKgB,SAAW,KAClFhB,KAAK6/E,cACL7/E,KAAK22S,kBAETV,EAAU56S,UAAU8pB,aAAe,WAC/B5f,GAAahB,OAAOvE,KAAKgB,QAAS,QAAShB,KAAKm/G,cAC3C1rC,EAAMzzE,KAAK+qS,YACZ/qS,KAAK+qS,UAAUz4R,WAGvB2jS,EAAU56S,UAAUkpB,WAAa,WAC7Bhf,GAAanB,IAAIpE,KAAKgB,QAAS,QAAShB,KAAKm/G,aAAcn/G,MACtDA,KAAKs2S,UAAat2S,KAAKk2S,WACxBvrS,EAAa3K,KAAKgB,SAAW0E,SAAU,IAAM0vS,KAE5Cp1S,KAAKs2S,WACNt2S,KAAK+qS,UAAY,IAAI30L,GAAep2G,KAAKgB,SACrCk2G,UAAWl3G,KAAKg6I,iBAAiB1+I,KAAK0E,MACtC42G,WAAY52G,KAAK42G,WACjB/mC,UAAW,cAIvBomO,EAAU56S,UAAUo/H,QAAU,SAAU55H,GACpCA,EAAEsG,OAAOkN,cAAcvQ,UAAUM,IAnNrB,iBAqNhB6xS,EAAU56S,UAAUq/H,SAAW,SAAU75H,GACrCA,EAAEsG,OAAOkN,cAAcvQ,UAAUS,OAtNrB,iBAwNhB0xS,EAAU56S,UAAU03S,aAAe,WAC/B,IAAIhzS,EAAQC,KACZA,KAAKqqS,QAAUrqS,KAAKgB,QAAQY,WAAU,GACtC,IACIw4B,EADAw8Q,EAAY52S,KAAKgB,QAAQoZ,SAE7BzW,EAASizS,GAAY1N,QAClB7nS,MAAMC,KAAKs1S,GAAWx3S,QAAQ,SAAU0G,GAEvC,GADAA,EAAGxC,GAAK9D,EAAY,cAChBsG,EAAGsU,SAAS3d,OAAS,EAAG,CACxBsD,EAAMqE,IAAI0B,EAAGsU,SAAS,GAAIg7R,IAC1B,IAAIxwN,EAAS9+E,EAAGsU,SAAS,GACzB1W,EAAWkhF,GAAUosC,SAAY,IAAKp/G,KAAQ,UAAWilS,aAAcD,EAAUn6S,OAAOyQ,aACxF03E,EAAOthF,GAAK9D,EAAY,gBACxB+F,GAAanB,IAAIwgF,EAAQ,QAAS7kF,EAAM06H,QAAS16H,GACjDwF,GAAanB,IAAIwgF,EAAQ,OAAQ7kF,EAAM26H,SAAU36H,GACjD,IAAI0oH,EAAY7jC,EAAOz/E,kBACnBsjH,GACAA,EAAU3kH,UAAUM,IAAIixS,KAE5Bj7Q,EAAUt0B,EAAGsU,SAAS,MAElBggB,EAAQ92B,GAAK9D,EAAY,eACzBolF,EAAOphF,aAAa,gBAAiB42B,EAAQ92B,IAC7C82B,EAAQ11B,MAAM4xC,QAAU,GACxBxwC,EAAGhC,UAAUM,IApOlB,YAqOK0B,EAAGsU,SAAS,GAAGzY,YAAY5B,EAAM+2S,sBACjChzS,EAAUs2B,GAAUk7Q,GAAaG,QACjC/xS,EAAW02B,GAAWiiC,kBAAmBuoB,EAAOthF,GAAI+qH,cAAe,UACnEj0F,EAAUA,EAAQj1B,qBAEdi1B,EAAQt2B,UAAUM,IAAImxS,IACtBn7Q,EAAQ11B,MAAM4xC,QAAU,SAM5C2/P,EAAU56S,UAAUy7S,mBAAqB,WACrC,IAAIC,EAAU9P,EAAS,OAAS5jS,UAAWmyS,KACvCwB,EAAa/P,EAAS,QAAU5jS,UAvPtB,gCAyPd,OADA0zS,EAAQp1S,YAAYq1S,GACbD,GAEXd,EAAU56S,UAAUs7S,eAAiB,WACjC,IAAI90S,EAAM7B,KAAKw2S,WAAW/5S,OAC1B,GAAY,IAARoF,EAGJ,GAAwB,WAApB7B,KAAK02S,WACL12S,KAAKi3S,YAAW,EAAMj3S,KAAKw2S,WAAW30S,EAAM,SAG5C,IAAK,IAAI1F,EAAI,EAAGA,EAAI0F,EAAK1F,IACrB6D,KAAKi3S,YAAW,EAAMj3S,KAAKw2S,WAAWr6S,KAIlD85S,EAAU56S,UAAUwkF,YAAc,WAC9B,IAEIiuN,EAFA/tS,EAAQC,KACRgE,EAAMhE,KAAKgB,QAEXyyE,EAAMzzE,KAAKw2S,cACXx2S,KAAKw2S,eAET,IAAI/7O,EAAQz6D,KAAKy6D,MACZgZ,EAAMzzE,KAAKoqS,SAGPpmS,GAAOy2D,EAAMh+D,OAAS,GAC3Bg+D,EAAMr7D,QAAQ,SAAUye,EAAM5L,GAC1B67R,EAAY/tS,EAAMm3S,gBAAgBr5R,EAAM5L,GACxCjO,EAAIrC,YAAYmsS,GACZA,EAAU3oO,kBAAoB,IAC9B5/D,GAAanB,IAAI0pS,EAAUnrS,cAAc,IAAMyyS,IAAa,QAASr1S,EAAM06H,QAAS16H,GACpFwF,GAAanB,IAAI0pS,EAAUnrS,cAAc,IAAMyyS,IAAa,OAAQr1S,EAAM26H,SAAU36H,MAR5FC,KAAK+yS,gBAabkD,EAAU56S,UAAU8jH,aAAe,SAAUt+G,GACzC,IAGIoR,EACA8kS,EAJAh3S,EAAQC,KACRkwH,EAAOrvH,EAAEsG,OACToG,KAIJ,GADc1H,EAAQqqH,EAAM,kBACZlwH,KAAKgB,QAArB,CAGAkvH,EAAKpsH,UAAUM,IAAI,YACnB,IAAI+yS,EAAYtxS,EAAQqqH,EAAM,IAAMg5K,IAChCkO,EAAWvxS,EAAQqqH,EAAM,IAAMklL,IAC/BiC,EAAWxxS,EAAQqqH,EAAM,IAAMolL,IAC/B6B,IAAc1jO,EAAM2jO,IAAa3jO,EAAM4jO,MACvCD,EAAWD,EAAU/8R,SAAS,GAC9Bi9R,EAAWF,EAAU/8R,SAAS,IAE9Bg9R,IACAL,EAAUtxS,EAAO,IAAM+vS,GAAe4B,IAE1C,IAAIE,EACAD,IACAC,EAAezxS,EAAQwxS,EAAU,IAAMnO,KAE3C,IAAIqO,KACJtlS,EAAQjS,KAAKw3S,eAAeL,GACxBG,IACA/pS,EAAUsQ,KAAO7d,KAAKy6D,MAAMz6D,KAAKw3S,eAAeF,KAEpD/pS,EAAU2tG,cAAgBr6G,KACV4yE,EAAMsjO,IAAYtjO,EAAMzzE,KAAKoqS,UAAY+M,EAAUhyO,mBAAqB,KACvEsO,EAAM4jO,IAAc5jO,EAAMhuE,EAAO,IAAM2vS,GAAa,KAAOI,GAAe8B,MACvFH,EAAUx1S,YAAY3B,KAAKy3S,iBAAiBxlS,IAC5CjS,KAAK03S,eAAeP,IAExBn3S,KAAKwmB,QAAQ,UAAWjZ,GACxB,IAAIoqS,EAAeN,IAAa5jO,EAAMhuE,EAAO,YAAa4xS,IAG1D,GAFAM,EAAcA,IAAgBlkO,EAAMhuE,EAAO,eAAgB4xS,OAAgBxxS,EAAQqqH,EAAM,kBAAoBlwH,KAAKgB,UAClHkvH,EAAKpsH,UAAUS,OAAO,cAClB2rH,EAAKpsH,UAAUK,SAASmxS,KAAgBplL,EAAKpsH,UAAUK,SAASoxS,KAAcoC,GAAlF,IAGGt2S,MAAMC,KAAKtB,KAAKgB,QAAQoZ,UAAUhb,QAAQ,SAAU0G,GAC/CA,EAAGhC,UAAUK,SAASwxS,KACtB4B,EAAW/yS,KAAKsB,KAGxB,IAAI8xS,KAAgBv2S,MAAMC,KAAKtB,KAAKgB,QAAQQ,iBAAiB,IAAM0nS,GAAW,iBAC9E,GAAI0O,EAAWn7S,OAAS,EACpB,IAAK,IAAI2B,EAAK,EAAGy5S,EAAeD,EAAYx5S,EAAKy5S,EAAap7S,OAAQ2B,IAAM,CACxE,IAAI0H,EAAK+xS,EAAaz5S,GACtBm5S,EAAW/yS,KAAKsB,EAAGuO,eAG3B,IAAIyjS,GAAyD,IAAtCP,EAAWh5S,QAAQ+4S,IAA+D,SAAvCD,EAASxkS,aAAa,aACpFklS,GAAa,EACjB,IAAKtkO,EAAM0jO,KAAe1jO,EAAM2jO,GAAW,CACvC,IAAIY,EAAavyS,EAAO,IAAM6vS,GAAa6B,GAEvCc,EADYpyS,EAAQsxS,EAAW,IAAMhC,IACbxyS,cAAc,IAAMkzS,IAChD,GAAIpiO,EAAMukO,GACN,OAEJD,EAAcE,IAAgBd,GAC1B1yS,EAAUuzS,IAAiBF,IAAoBR,EAAaxzS,UAAUK,SAASuxS,KAI1E6B,EAAW96S,OAAS,GAA0B,WAApBuD,KAAK02S,aAA4BoB,GAC5DP,EAAWn4S,QAAQ,SAAU0G,GACzB/F,EAAMm4S,SAASzyS,EAAO,IAAM6vS,GAAaxvS,IACzCA,EAAGhC,UAAUS,OAAOsxS,MAG5B71S,KAAKivJ,OAAO+oJ,IATZh4S,KAAKk4S,SAASF,GAWbvkO,EAAMwkO,IAAiBF,GACxBE,EAAYn0S,UAAUS,OAAOsxS,QAIzCI,EAAU56S,UAAU88S,aAAe,SAAUhiP,EAAQ6kI,EAAM9qE,GACvD,IAAIm8K,EACA+L,EAAWvyS,EAAQqqH,EAAM,IAAMg5K,IAC/Bh5K,IAAS8qE,EACTqxG,GAAoB,WAAXl2O,EAAsB+5D,EAAK6X,iBAAmB7X,GAAMvtH,cAAc,IAAMyyS,IAE5EllL,EAAKpsH,UAAUK,SAASixS,MAC7BgD,EAAuB,WAAXjiP,EAAsBiiP,EAASzxG,uBAAyByxG,EAAS/3L,sBAEzEgsL,EAAO5mS,EAAO,IAAM2vS,GAAYgD,IAGpC/L,GACAA,EAAKnqS,SAGb+zS,EAAU56S,UAAU2+I,iBAAmB,SAAUn5I,GAC7C,IAAIqvH,EAAOrvH,EAAEsG,OACb,GAAqB,UAAjB+oH,EAAKltH,SAAwC,aAAjBktH,EAAKltH,QAArC,CAGAnC,EAAE2kB,iBACF,IAEI4U,EADA4gK,EAAOh7L,KAAKgB,QAEhB,OAAQH,EAAEs1D,QACN,IAAK,SAGL,IAAK,WACDn2D,KAAKm4S,aAAat3S,EAAEs1D,OAAQ6kI,EAAM9qE,GAClC,MACJ,IAAK,QACL,IAAK,SAEIz8C,EADLr5C,EAAU81F,EAAK7P,qBACQjmF,EAAQt2B,UAAUK,SAASmxS,IACJ,SAAtCl7Q,EAAQvnB,aAAa,cACrBq9G,EAAK7J,QAIT6J,EAAK7J,QAET,MACJ,IAAK,OACL,IAAK,OACmB,SAAbxlH,EAAEs1D,OAAoB6kI,EAAK71L,kBAAkBiV,SAAS,GAAK4gL,EAAKjzD,iBAAiB3tH,SAAS,IAC5FlY,WAIjB+zS,EAAU56S,UAAUg9S,kBAAoB,WACpC,IAAIzzN,EAASqiN,EAAS,OAAS5jS,UAAW+xS,GAAY9xS,GAAI9D,EAAY,kBAMtE,OADAkE,EAAWkhF,GAHPosC,SAAY,IAAKp/G,KAAQ,UAAW4hH,gBAAiB,QAASk0B,gBAAiB,QAC/ExxB,gBAAiB,QAAS2gL,aAAc72S,KAAKy6D,MAAMh+D,OAAOyQ,aAGvD03E,GAEXqxN,EAAU56S,UAAU67S,gBAAkB,SAAUr5R,EAAM5L,GAClD,IAAI0kL,EAGJ,GAFAA,EAAWswG,EAAS,OAAS5jS,UAAW6lS,KACxCvyG,EAASrzL,GAAK9D,EAAY,cACtBqe,EAAK+mE,OAAQ,CACb,IAAI0zN,EAASt4S,KAAKq4S,oBACdE,EAAStR,EAAS,OAAS5jS,UAAWgyS,KAC1CiD,EAAO32S,YAAY42S,GACnBD,EAAO32S,YAAY3B,KAAKw4S,aAAaD,EAAQ16R,EAAK+mE,OAAQ3yE,GAAO,IACjE0kL,EAASh1L,YAAY22S,GAEzB,IAAIG,EAAMhzS,EAAO,IAAM2vS,GAAYz+G,GASnC,IARI94K,EAAKs3K,UAAa1hH,EAAMxhE,IAAYjS,KAAK4rG,oBACD,IAApC5rG,KAAKw2S,WAAWj4S,QAAQ0T,IACxBjS,KAAKw2S,WAAWhyS,KAAKyN,GAGzB4L,EAAK5K,UACL0jL,EAAS7yL,UAAUM,IAAIyZ,EAAK5K,UAE5B4K,EAAK61D,QAAS,CACd,IAAIglO,EAAYzR,EAAS,OAAS5jS,UAvc1B,wBAwcJqyC,EAAOuxP,EAAS,QAAU5jS,UAAWwa,EAAK61D,QAAU,aACxDglO,EAAU/2S,YAAY+zC,GAClB+9B,EAAMglO,KACNA,EAAMz4S,KAAKq4S,qBACP12S,YAAY+2S,GAChB/hH,EAASh1L,YAAY82S,IAGrBA,EAAIvzS,aAAawzS,EAAWD,EAAIlnS,WAAW,IAGnD,GAAIsM,EAAKuc,QAAS,CACd,IAAIu+Q,EAAU34S,KAAK82S,qBACfrjO,EAAMglO,KACNA,EAAMz4S,KAAKq4S,oBACX1hH,EAASh1L,YAAY82S,IAEzBA,EAAI92S,YAAYg3S,GAChB34S,KAAKoE,IAAIuyL,EAjdN,YAmdP,OAAOA,GAEXs/G,EAAU56S,UAAUm9S,aAAe,SAAUx0S,EAAKhH,EAAOiV,EAAO6Z,GAC5D,IAAIkO,EACA4+Q,EACJ,IACI,GAAIp4S,SAASgB,iBAAiBxE,GAAOP,OAAQ,CACzC,IAAIo8S,EAASr4S,SAASmC,cAAc3F,GACpC47S,EAAYC,EAAO/2S,UAAUoO,OAC7BlM,EAAIrC,YAAYk3S,GAChBA,EAAOn0S,MAAM4xC,QAAU,IAG/B,MAAOz1C,GACHm5B,EAAaqjC,GAAiBrgE,GAElC,IAAIk1O,EAkBJ,OAjBKz+J,EAAMz5C,KACPk4M,EAAYl4M,KAEXy5C,EAAMy+J,MAAcA,EAAUz1O,OAAS,IAAOg3E,EAAMy+J,EAAU,GAAGlvO,UAAiC,IAArBkvO,EAAUz1O,OAQzD,IAA1BuH,EAAImhE,oBACTnhE,EAAIhC,UAAYhF,MARbqE,MAAMC,KAAK4wO,GAAW9yO,QAAQ,SAAU0G,GAClC2tE,EAAM3tE,EAAG9C,WACV8C,EAAGpB,MAAM4xC,QAAU,IAEvBtyC,EAAIrC,YAAYmE,KAMnB2tE,EAAMmlO,IACP54S,KAAKm2S,YAAY3xS,KAAKxH,GAEnBgH,GAEXiyS,EAAU56S,UAAUq8S,eAAiB,SAAUhF,GAC3C,IAAI9tN,EAASn/E,EAAO,IAAM2vS,GAAY1C,GAClCt4Q,EAAU30B,EAAO,IAAM6vS,GAAa5C,GACxC9tN,EAAOphF,aAAa,gBAAiB42B,EAAQ92B,IAC7C82B,EAAQ52B,aAAa,kBAAmBohF,EAAOthF,KAEnD2yS,EAAU56S,UAAUo8S,iBAAmB,SAAUxlS,GAC7C,IAAImoB,EAAUp6B,KAAKy6D,MAAMxoD,GAAOmoB,QAC5B0+Q,EAAU7R,EAAS,OAAS5jS,UAAWiyS,GAAc,IAAMG,GAAanyS,GAAI9D,EAAY,iBAC5FkE,EAAWo1S,GAAWzqL,cAAe,SACrC,IAAI0qL,EAAM9R,EAAS,OAAS5jS,UAAWkyS,KAEvC,OADAuD,EAAQn3S,YAAY3B,KAAKw4S,aAAaO,EAAK3+Q,EAASnoB,GAAO,IACpD6mS,GAEX7C,EAAU56S,UAAU4zJ,OAAS,SAAU/+B,GACnC,IAAI3iH,EACAyrS,EAAcnzS,EAAQqqH,EAAM,IAAMg5K,IACtC,KAAIz1N,EAAMy8C,IAAUzrH,EAAUyrH,IAA4C,SAAnCA,EAAKr9G,aAAa,cAA4BmmS,EAAYl1S,UAAUK,SAASoiS,KAApH,CAGA,IACI0R,EADYpyS,EAAQmzS,EAAa,IAAM7D,IACfxyS,cAAc,IAAMkzS,IAC5Cl/P,GACAlf,KAAMz3B,KAAK22C,UAAUs4G,OAAOj3H,OAC5B9sB,SAAUlL,KAAK22C,UAAUs4G,OAAO/jJ,SAChCmhF,eAAgBrsF,KAAK22C,UAAUs4G,OAAOrvI,QAEtC81B,EAAOjwC,EAAO,IAAM+vS,GAAewD,GAAa7zS,kBACpDoI,GAAcvM,QAASg4S,EACnBn7R,KAAM7d,KAAKy6D,MAAMz6D,KAAKw3S,eAAewB,IACrCC,YAAY,GAChB,IAAIC,EAAMviQ,EAAUlf,KAEpB,GADAz3B,KAAKwmB,QAAQ,YAAajZ,IACtBA,EAAUsrB,OAAd,CASA,GANA6c,EAAK5xC,UAAUM,IAAIwxS,IACnB51S,KAAKm5S,kBAAkBH,GAClBvlO,EAAMwkO,IACPA,EAAYn0S,UAAUS,OAAOsxS,IAEjCmD,EAAYl1S,UAAUM,IAAIyxS,IACF,SAAnBl/P,EAAUlf,KAGX,OAFAz3B,KAAKo5S,eAAe,QAAS1jQ,EAAMw6E,EAAM8oL,EAAazrS,QACtDvN,KAAKo5S,eAAe,MAAO1jQ,EAAMw6E,EAAM8oL,EAAazrS,GAGxDvN,KAAKq5S,gBAAgBH,EAAKxjQ,EAAMw6E,EAAM8oL,EAAariQ,EAAWppC,MAElE0oS,EAAU56S,UAAUg+S,gBAAkB,SAAUC,EAAIC,EAAKrpL,EAAM8oL,EAAazgR,EAASt4B,GACjF,IACI8V,EADAhW,EAAQC,KAGD,cAAPs5S,GACA/gR,EAAQ9Z,MAAQ,WACZ1e,EAAMq5S,eAAe,QAASG,EAAKrpL,EAAM8oL,EAAa/4S,GACtDiwH,EAAKxrH,MAAMwP,SAAW,WACtB6B,EAASijS,EAAYtnQ,aACXw+E,EAAKx+E,aACfw+E,EAAKxrH,MAAM6uD,UAAa28D,EAAiB,aAAI,KAC7C8oL,EAAYt0S,MAAM6uD,UAAY,IAElCh7B,EAAQC,SAAW,WACfwgR,EAAYt0S,MAAM4uD,UAAav9C,EAASm6G,EAAKx+E,aAAgB,MAEjEnZ,EAAQ1Z,IAAM,WACVsjO,EAASjyH,GAAQh8G,SAAY,GAAIq/C,UAAa,KAC9CylP,EAAYt0S,MAAM4uD,UAAY,GAC9BvzD,EAAMq5S,eAAe,MAAOG,EAAKrpL,EAAM8oL,EAAa/4S,MAIxDs4B,EAAQ9Z,MAAQ,WACZ1e,EAAMq5S,eAAe,QAASG,EAAKrpL,EAAM8oL,EAAa/4S,IAE1Ds4B,EAAQ1Z,IAAM,WACV9e,EAAMq5S,eAAe,MAAOG,EAAKrpL,EAAM8oL,EAAa/4S,KAG5D,IAAIq4B,GAAUC,GAASA,QAAQ23F,IAEnC+lL,EAAU56S,UAAU+9S,eAAiB,SAAU5gR,EAAUkd,EAAMw6E,EAAM8oL,EAAazrS,GAC9EvN,KAAKuE,OAAO2rH,EAAMulL,IAClBz1S,KAAKoE,IAAI40S,EAAatD,IACtB11S,KAAKoE,IAAIsxC,EA9kBG,iBA+kBK,QAAbld,IACAx4B,KAAKoE,IAAI40S,EAAarD,IACtBzlL,EAAK1sH,aAAa,cAAe,SACjCE,EAAWwsH,EAAKy2E,wBAA0Bj/C,gBAAiB,OAAQl0B,gBAAiB,SACpF99E,EAAK5xC,UAAUS,OAAOqxS,IACtB51S,KAAKwmB,QAAQ,WAAYjZ,KAGjC0oS,EAAU56S,UAAU89S,kBAAoB,SAAUt7R,GAC9C,IAAI5L,EAAQjS,KAAKw3S,eAAe35R,IACW,IAAvC7d,KAAKu2S,cAAch4S,QAAQ0T,IAC3BjS,KAAKu2S,cAAc/xS,KAAKyN,IAGhCgkS,EAAU56S,UAAUm8S,eAAiB,SAAU35R,GAC3C,SAAUxc,MAAMC,KAAKtB,KAAKgB,QAAQoZ,UAAU7b,QAAQsf,IAExDo4R,EAAU56S,UAAUm+S,iBAAmB,SAAU37R,GAC7C,IAAI5L,EAAQjS,KAAKw3S,eAAe35R,GAChC7d,KAAKu2S,cAAcluR,OAAOroB,KAAKu2S,cAAch4S,QAAQ0T,GAAQ,IAEjEgkS,EAAU56S,UAAU68S,SAAW,SAAUhoL,GACrC,IAAI3iH,EACAyrS,EAAcnzS,EAAQqqH,EAAM,IAAMg5K,IACtC,IAAIz1N,EAAMy8C,IAAUzrH,EAAUyrH,KAAS8oL,EAAYl1S,UAAUK,SAASoiS,IAAtE,CAGA,IAAI5vP,GACAlf,KAAMz3B,KAAK22C,UAAUuhQ,SAASlgR,OAC9B9sB,SAAUlL,KAAK22C,UAAUuhQ,SAAShtS,SAClCmhF,eAAgBrsF,KAAK22C,UAAUuhQ,SAASt4R,QAExC81B,EAAOjwC,EAAO,IAAM+vS,GAAewD,GAAa7zS,kBACpDoI,GAAcvM,QAASg4S,EACnBn7R,KAAM7d,KAAKy6D,MAAMz6D,KAAKw3S,eAAewB,IACrCC,YAAY,GAChB,IAAIC,EAAMviQ,EAAUlf,KAEpB,GADAz3B,KAAKwmB,QAAQ,YAAajZ,IACtBA,EAAUsrB,OAAd,CAMA,GAHA74B,KAAKw5S,iBAAiBR,GACtBA,EAAYl1S,UAAUM,IAAIyxS,IAC1BngQ,EAAK5xC,UAAUM,IAAIwxS,IACK,SAAnBj/P,EAAUlf,KAGX,OAFAz3B,KAAKy5S,iBAAiB,QAAS/jQ,EAAMw6E,EAAM8oL,EAAazrS,QACxDvN,KAAKy5S,iBAAiB,MAAO/jQ,EAAMw6E,EAAM8oL,EAAazrS,GAG1DvN,KAAK05S,kBAAkBR,EAAKhpL,EAAM8oL,EAAatjQ,EAAMiB,EAAWppC,MAEpE0oS,EAAU56S,UAAUq+S,kBAAoB,SAAUJ,EAAIppL,EAAMypL,EAAUJ,EAAKhhR,EAASt4B,GAChF,IACI8V,EACA6jS,EACAC,EACA3uK,EAJAnrI,EAAQC,KAKD,YAAPs5S,GACA/gR,EAAQ9Z,MAAQ,WACZo7R,EAAaF,EAASjoQ,aACtBioQ,EAASj1S,MAAM4uD,UAAYumP,EAAa,KACxC3pL,EAAKxrH,MAAMwP,SAAW,WACtB6B,EAAS4jS,EAASjoQ,aAClBkoQ,EAAa1pL,EAAKx+E,aAClBw+E,EAAKxrH,MAAM6uD,UAAYqmP,EAAa,KACpC75S,EAAM05S,iBAAiB,QAASF,EAAKrpL,EAAMypL,EAAU15S,IAEzDs4B,EAAQC,SAAW,YACf0yG,EAAWn1H,GAAU6jS,EAAa1pL,EAAKx+E,eAC1BmoQ,IACTF,EAASj1S,MAAM4uD,UAAY43E,EAAS,OAG5C3yG,EAAQ1Z,IAAM,WACVqxG,EAAKxrH,MAAM4xC,QAAU,OACrBv2C,EAAM05S,iBAAiB,MAAOF,EAAKrpL,EAAMypL,EAAU15S,GACnD05S,EAASj1S,MAAM4uD,UAAY,GAC3B6uL,EAASjyH,GAAQh8G,SAAY,GAAIq/C,UAAa,GAAIjd,QAAW,QAIjE/d,EAAQ9Z,MAAQ,WACZ1e,EAAM05S,iBAAiB,QAASF,EAAKrpL,EAAMypL,EAAU15S,IAEzDs4B,EAAQ1Z,IAAM,WACV9e,EAAM05S,iBAAiB,MAAOF,EAAKrpL,EAAMypL,EAAU15S,KAG3D,IAAIq4B,GAAUC,GAASA,QAAQ23F,IAEnC+lL,EAAU56S,UAAUo+S,iBAAmB,SAAUjhR,EAAUkd,EAAMw6E,EAAM8oL,EAAazrS,GAChFvN,KAAKuE,OAAOmxC,EA1qBA,iBA2qBZ11C,KAAKuE,OAAOy0S,EAAatD,IACR,QAAbl9Q,IACAx4B,KAAKoE,IAAI8rH,EAAMulL,IACf//P,EAAK5xC,UAAUS,OAAOqxS,IACtB51S,KAAKuE,OAAOy0S,EAAarD,IACzBzlL,EAAK1sH,aAAa,cAAe,QACjCE,EAAWwsH,EAAKy2E,wBAA0Bj/C,gBAAiB,QAASl0B,gBAAiB,UACrFxzH,KAAKwmB,QAAQ,WAAYjZ,KAQjC0oS,EAAU56S,UAAUkkC,cAAgB,WAChC,MAAO,aAEX02Q,EAAU56S,UAAUy+S,iBAAmB,WACnC,IAAIpH,KAAarxS,MAAMC,KAAKtB,KAAKgB,QAAQoZ,UACrC2/R,EAAU/5S,KAAKy6D,MAAMh+D,OACzBi2S,EAAQtzS,QAAQ,SAAU4E,GACtByB,EAAO,IAAM2vS,GAAYpxS,GAAKR,aAAa,aAAc,GAAKu2S,MAUtE9D,EAAU56S,UAAUipM,QAAU,SAAUzmL,EAAM5L,GAC1C,IAAIjO,EAAMhE,KAAKgB,QAIf,GAHIyyE,EAAMxhE,KACNA,EAAQjS,KAAKy6D,MAAMh+D,QAEnBuH,EAAImhE,mBAAqBlzD,EAAO,CAChCjS,KAAKy6D,MAAMpyC,OAAOpW,EAAO,EAAG4L,GAC5B,IAAIm8R,EAAeh6S,KAAKk3S,gBAAgBr5R,EAAM5L,GAC1CjO,EAAImhE,oBAAsBlzD,EAC1BjO,EAAIrC,YAAYq4S,GAGhBh2S,EAAIkB,aAAa80S,EAAch2S,EAAIoW,SAASnI,IAEhD1M,GAAanB,IAAI41S,EAAar3S,cAAc,IAAMyyS,IAAa,QAASp1S,KAAKy6H,QAASz6H,MACtFuF,GAAanB,IAAI41S,EAAar3S,cAAc,IAAMyyS,IAAa,OAAQp1S,KAAK06H,SAAU16H,MACtFA,KAAK85S,mBAET95S,KAAKu2S,iBACLv2S,KAAKi6S,oBAAoBj2S,GACrB6Z,EAAKs3K,UACLn1L,KAAKi3S,YAAW,EAAMhlS,IAG9BgkS,EAAU56S,UAAU4+S,oBAAsB,SAAUj2S,GAChD,IAAIjE,EAAQC,QACTqB,MAAMC,KAAK0C,EAAIoW,UAAUhb,QAAQ,SAAU0G,GACtCA,EAAGhC,UAAUK,SAASuxS,KACtB31S,EAAMo5S,kBAAkBrzS,MASpCmwS,EAAU56S,UAAU25D,WAAa,SAAU/iD,GACvC,IAAIjO,EAAMhE,KAAKgB,QAAQoZ,SAASnI,GAC5BwhE,EAAMzvE,KAGVqB,EAAOrB,GACPhE,KAAKy6D,MAAMpyC,OAAOpW,EAAO,GACzBjS,KAAK85S,mBACL95S,KAAKu2S,iBACLv2S,KAAKi6S,oBAAoBj6S,KAAKgB,WAOlCi1S,EAAU56S,UAAUoK,OAAS,SAAUwM,GACnC,IAAIjO,EAAMhE,KAAKgB,QAAQoZ,SAASnI,GAC5BwhE,EAAMzvE,IAAQyvE,EAAMhuE,EAAO,IAAM2vS,GAAYpxS,KAGjDA,EAAIoW,SAAS,GAAGlY,SASpB+zS,EAAU56S,UAAUgpM,SAAW,SAAUpyL,EAAOk8G,GAC5C,IAAInqH,EAAMhE,KAAKgB,QAAQoZ,SAASnI,GAC5BwhE,EAAMzvE,KAGNyvE,EAAM06C,KACNA,GAAW,GAEfA,EAAWnuH,KAAKoE,IAAIJ,EA9xBT,UA8xB8BhE,KAAKuE,OAAOP,EA9xB1C,YAuyBfiyS,EAAU56S,UAAU2oM,WAAa,SAAU/xL,EAAO+jH,GAC9C,IAAIhyH,EAAMhE,KAAKgB,QAAQoZ,SAASnI,GAChC,IAAIwhE,EAAMzvE,GAAV,CAGA,IAAIk2S,EAAYl2S,EAAImB,kBAChB6wH,GACAh2H,KAAKuE,OAAOP,EAAKuiS,IACjB7iS,EAAWw2S,GAAalpL,SAAY,IAAKkF,gBAAiB,UAC1DgkL,EAAUh4S,UAGN8B,EAAIF,UAAUK,SAASwxS,MACvB31S,KAAKi3S,YAAW,EAAOhlS,GACvBjS,KAAKm4S,aAAa,WAAYn4S,KAAKgB,QAASk5S,IAEhDl6S,KAAKoE,IAAIJ,EAAKuiS,IACd2T,EAAU12S,aAAa,gBAAiB,QACxC02S,EAAUxuS,gBAAgB,eAUlCuqS,EAAU56S,UAAU47S,WAAa,SAAUkD,EAAUloS,GACjD,IAAIlS,EAAQC,KACRg7L,EAAOh7L,KAAKgB,QAChB,GAAIyyE,EAAMxhE,GACN,GAAwB,WAApBjS,KAAK02S,YAA2ByD,EAAU,CAC1C,IAAIn2S,EAAMg3L,EAAK5gL,SAAS4gL,EAAK71H,kBAAoB,GACjDnlE,KAAKo6S,WAAWD,EAAUn2S,EAAKhE,KAAKw3S,eAAexzS,WAGhD3C,MAAMC,KAAKtB,KAAKgB,QAAQoZ,UAAUhb,QAAQ,SAAU0G,GACnD/F,EAAMq6S,WAAWD,EAAUr0S,EAAI/F,EAAMy3S,eAAe1xS,UAI3D,CAED,GAAI2tE,EADAzvE,EAAMhE,KAAKgB,QAAQoZ,SAASnI,MACbjO,EAAIF,UAAUK,SAx0B9B,aAw0BqDH,EAAIF,UAAUK,SAASwxS,KAAewE,EAC1F,OAGwB,WAApBn6S,KAAK02S,YACL12S,KAAKi3S,YAAW,GAEpBj3S,KAAKo6S,WAAWD,EAAUn2S,EAAKiO,KAI3CgkS,EAAU56S,UAAU++S,WAAa,SAAUD,EAAUn2S,EAAKiO,GACtD,IAAI8mS,EAAM/0S,EAAIoW,SAAS,GACvB,IAAIpW,EAAIF,UAAUK,SAASoiS,IAA3B,CAGA,GAAI9yN,EAAMslO,IAAQoB,EACdpB,EAAM/4S,KAAKy3S,iBAAiBxlS,GAC5BjO,EAAIrC,YAAYo3S,GAChB/4S,KAAK03S,eAAe1zS,QAEnB,GAAIyvE,EAAMslO,GACX,OAEJoB,EAAWn6S,KAAKivJ,OAAO8pJ,GAAO/4S,KAAKk4S,SAASa,KAEhD9C,EAAU56S,UAAUswS,aAAe,cAC5BtqS,MAAMC,KAAKtB,KAAKgB,QAAQQ,iBAAiB,IAAM0nS,KAAW9pS,QAAQ,SAAU0G,GAAMT,EAAOS,MAEhGmwS,EAAU56S,UAAUg/S,WAAa,SAAUx8R,EAAM5L,GAC7C,IAAKwhE,EAAM51D,GAAO,CACd,IAAIi8K,EAAU95L,KAAKy6D,MAAMxoD,GACzBjS,KAAKy6D,MAAMpyC,OAAOpW,EAAO,GACzB5M,EAAOwY,GACP7d,KAAKskM,QAAQxK,EAAS7nL,KAG9BgkS,EAAU56S,UAAUmxG,eAAiB,WAEjC,OAAOxsG,KAAKgtG,cADK,mBAUrBipM,EAAU56S,UAAUmsF,kBAAoB,SAAUiF,EAASC,GAEvD,IAAK,IADD4tN,EAAQt6S,KAAKgB,QACR5C,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKmvF,GAAUruF,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAE9D,OADWyE,EAAGzE,IAEV,IAAK,QACD,GAAMquF,EAAQhyB,iBAAiBj8D,OAASkuF,EAAQjyB,iBAAiBj8D,MAwB7DwB,KAAK2rS,eACL3rS,KAAK6/E,cACL7/E,KAAK22S,sBAxBL,IAAK,IADD4D,EAAcj8S,OAAOhB,KAAKmvF,EAAQhyB,OAC7Bl3C,EAAI,EAAGA,EAAIg3R,EAAY99S,OAAQ8mB,IAAK,CACzC,IAAItR,EAAQ8iB,SAASz2B,OAAOhB,KAAKmvF,EAAQhyB,OAAOl3C,GAAI,IAChDyI,EAAW1tB,OAAOhB,KAAKmvF,EAAQhyB,MAAMxoD,IAAQ,GAC7C4L,EAAOjY,EAAU,IAAMsjS,GAAUlpS,KAAKgB,SAASiR,GAC/C1K,EAASjJ,OAAOouF,EAAQjyB,MAAMxoD,IAAQ+Z,GACtCwuR,EAASl8S,OAAOmuF,EAAQhyB,MAAMxoD,IAAQ+Z,GACzB,WAAbA,GAAsC,YAAbA,GAAuC,aAAbA,GACnDhsB,KAAKq6S,WAAWx8R,EAAM5L,GAET,aAAb+Z,GAA4BynD,EAAM51D,KAClCA,EAAK/Z,UAAUS,OAAOgD,GACtBsW,EAAK/Z,UAAUM,IAAIo2S,IAEN,YAAbxuR,GAA2BynD,EAAM51D,IAAkC,IAAzBA,EAAKzD,SAAS3d,SACpDohB,EAAK/Z,UAAUK,SAASuxS,KACxB11S,KAAKi3S,YAAW,EAAOhlS,GAE3B5M,EAAOwY,EAAKlb,cAAc,IAAM2yS,MAS5C,MACJ,IAAK,YACD7oN,EAAQv5E,UAAYlT,KAAKoE,IAAIk2S,EA95BnC,SA85BqDt6S,KAAKuE,OAAO+1S,EA95BjE,SA+5BM,MACJ,IAAK,SACDn4D,EAASniP,KAAKgB,SAAW+U,OAAUxT,EAAWkqF,EAAQ12E,UACtD,MACJ,IAAK,QACDosO,EAASniP,KAAKgB,SAAWgV,MAASzT,EAAWkqF,EAAQz2E,SACrD,MACJ,IAAK,aAC0B,WAAvBy2E,EAAQiqN,YACR12S,KAAKgB,QAAQwC,aAAa,uBAAwB,SAC9CxD,KAAKu2S,cAAc95S,OAAS,GAC5BuD,KAAKi3S,YAAW,IAIpBj3S,KAAKgB,QAAQwC,aAAa,uBAAwB,WAMtEqnF,IACIxiF,KAAe2tS,KAChBC,EAAU56S,UAAW,aAAS,GACjCwvF,IACI3jF,EAAS,SACV+uS,EAAU56S,UAAW,aAAS,GACjCwvF,IACI3jF,EAAS,SACV+uS,EAAU56S,UAAW,cAAU,GAClCwvF,IACI3jF,EAAS,aACV+uS,EAAU56S,UAAW,kBAAc,GACtCwvF,IACI9iF,KAAYguS,KACbE,EAAU56S,UAAW,iBAAa,GACrCwvF,IACI/hF,KACDmtS,EAAU56S,UAAW,eAAW,GACnCwvF,IACI/hF,KACDmtS,EAAU56S,UAAW,iBAAa,GACrCwvF,IACI/hF,KACDmtS,EAAU56S,UAAW,gBAAY,GACpCwvF,IACI/hF,KACDmtS,EAAU56S,UAAW,eAAW,GACnCwvF,IACI/hF,KACDmtS,EAAU56S,UAAW,iBAAa,GACrC46S,EAAYprN,IACRzhF,GACD6sS,IAEL1qM,ICz/BEjhB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAS5D69Q,GAAY,YAGZC,GAAU,YACVjjG,GAAS,gBAIT1N,GAAW,aACX4wG,GAAY,cAEZhpS,GAAU,wBAIVipS,GAAO,cAKPC,GAA0B,SAAU1vN,GAEpC,SAAS0vN,IACL,OAAkB,OAAX1vN,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAoB/D,OAtBAsqF,GAAUuwN,EAAU1vN,GAIpBN,IACI3jF,EAAS,KACV2zS,EAASx/S,UAAW,eAAW,GAClCwvF,IACI3jF,EAAS,KACV2zS,EAASx/S,UAAW,UAAM,GAC7BwvF,IACI3jF,GAAS,IACV2zS,EAASx/S,UAAW,iBAAa,GACpCwvF,IACIxiF,KAAewyS,IAChBA,EAASx/S,UAAW,aAAS,GAChCwvF,IACI3jF,EAAS,KACV2zS,EAASx/S,UAAW,YAAQ,GAC/BwvF,IACI3jF,EAAS,KACV2zS,EAASx/S,UAAW,WAAO,GACvBw/S,GACT77O,IAcE87O,GAA6B,SAAU3vN,GAMvC,SAAS2vN,EAAY9nS,EAAShS,GAC1B,IAAIjB,EAAQorF,EAAO7pF,KAAKtB,KAAMgT,EAAShS,IAAYhB,KAInD,OAHAD,EAAM42C,UAAY,IAAIre,OACtBv4B,EAAMg7S,UACNh7S,EAAMi7S,WAAY,EACXj7S,EA89BX,OAx+BAuqF,GAAUwwN,EAAa3vN,GAgBvB2vN,EAAYz/S,UAAUoX,UAAY,WAC9B,GAA6B,oBAAzBzS,KAAKgB,QAAQgC,QAA+B,CAC5ChD,KAAKgB,QAAQ0D,MAAM4xC,QAAU,OAC7Bt2C,KAAKgB,QAAQ8C,UAAUS,OAAO,KAAOvE,KAAKu/B,iBAC1Cv/B,KAAKgB,QAAQ8C,UAAUS,OAAO,aAC9B,IAAIgO,EAAS1V,EAAS,gBAAiBmD,KAAKgB,SACxC+vH,EAAK5vH,EAAc,MACvBnB,KAAKi7S,UAAYj7S,KAAKgB,QACtBhB,KAAKgB,QAAU+vH,EACf/wH,KAAKgB,QAAQ8C,UAAUM,IAAI,aAC3BpE,KAAKgB,QAAQ8C,UAAUM,IAAI,KAAOpE,KAAKu/B,iBACvCniC,EAAS,gBAAiBmV,EAAQvS,KAAKgB,SAClChB,KAAKgB,QAAQsC,KACdtD,KAAKgB,QAAQsC,GAAK9D,EAAYQ,KAAKu/B,oBAQ/Cu7Q,EAAYz/S,UAAU0wG,OAAS,WAC3B/rG,KAAKu/G,cACLv/G,KAAK6/E,cACL7/E,KAAKukB,cAETu2R,EAAYz/S,UAAUkkH,YAAc,WAChC,IAAIxtG,EAAU/R,KAAKi/G,aACdltG,IACDA,EAAU5Q,EAAc,OAASkC,UAAWsO,KAC5CnR,SAASuL,KAAKpK,YAAYoQ,IAE1B/R,KAAKiT,UACLlB,EAAQjO,UAAUM,IAAIpE,KAAKiT,UAE3BjT,KAAKkT,WACLnB,EAAQjO,UAAUM,IAxGpB,SA0GFV,EAAW1D,KAAKgB,SAAW4Q,KAAQ,OAAQo/G,SAAY,MACvDj/G,EAAQpQ,YAAY3B,KAAKgB,SACzBhB,KAAKgB,QAAQ0D,MAAM+9D,OAASzoD,GAAiBha,KAAKgB,SAASkM,YAE/D4tS,EAAYz/S,UAAUwkF,YAAc,WAC3B7/E,KAAKy6D,MAAMh+D,SACZuD,KAAKy6D,MAAQuzE,GAAS8pD,sBAAsB93L,KAAKgB,SACjDhB,KAAKgB,QAAQgB,UAAY,IAE7B,IAAI+uH,EAAK/wH,KAAK2wH,YAAY3wH,KAAKy6D,OAC/Br1D,EAAO5G,MAAMnD,UAAUgG,MAAMC,KAAKyvH,EAAG32G,UAAWpa,KAAKgB,SACrDhB,KAAKgB,QAAQ8C,UAAUM,IAAI,kBAE/B02S,EAAYz/S,UAAUkpB,WAAa,WAC/B,IAAIxS,EAAU/R,KAAKi/G,aACnB,GAAIj/G,KAAKmH,OAAQ,CAGb,IAAK,IAFDA,OAAS,EACT+zS,EAAct1S,EAAU5F,KAAKmH,QACxBhL,EAAI,EAAG0F,EAAMq5S,EAAYz+S,OAAQN,EAAI0F,EAAK1F,IAC/CgL,EAAS+zS,EAAY/+S,GACjBqP,GAAQqb,MACR,IAAIgzF,GAAM1yG,GAAUyoH,QAAS5vH,KAAK8mS,aAAaxrS,KAAK0E,QAGpDuF,GAAanB,IAAI+C,EAAQ,cAAenH,KAAKm7S,aAAcn7S,MAGnEA,KAAK6uH,cAAgB1nH,EACrB,IAAK,IAAI/I,EAAK,EAAGyE,EAAK2W,GAAoBxZ,KAAK6uH,eAAgBzwH,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACjF,IAAI40G,EAAWnwG,EAAGzE,GAClBmH,GAAanB,IAAI4uG,EAAU,SAAUhzG,KAAKuvH,cAAevvH,OAG5DwL,GAAQkb,WACTnhB,GAAanB,IAAI2N,EAAS,YAAa/R,KAAKo7S,aAAcp7S,MAC1DuF,GAAanB,IAAI5D,SAAU,YAAaR,KAAK6/G,iBAAkB7/G,OAEnEA,KAAKq7S,qBAAuBr7S,KAAKm/G,aAAa7jH,KAAK0E,MACnDuF,GAAanB,IAAI5D,SAAU,QAASR,KAAKq7S,qBAAsBr7S,MAC/D,IAAIo2G,GAAerkG,GACfmlG,UAAWl3G,KAAK8xH,gBAAgBx2H,KAAK0E,MACrC42G,YACIlC,UAAW+lM,GACXjmM,QAlJF,UAmJET,MA5JJ,QA6JIQ,UAzJA,YA0JAE,WAzJC,aA0JDN,OA9JH,YAiKLxpG,EAAaoH,GAAWrM,SAAU,kBAEtCo1S,EAAYz/S,UAAUwkH,iBAAmB,SAAUh/G,GAC3CgF,EAAQhF,EAAEsG,OAAQ,IAAMwK,MAAa3R,KAAKi/G,cAC1Cj/G,KAAKs7S,UAAUt7S,KAAK+6S,OAAOt+S,OAAQoE,IAG3Ci6S,EAAYz/S,UAAUy2H,gBAAkB,SAAUjxH,GAE9C,OADAA,EAAE2kB,iBACM3kB,EAAEs1D,QACN,KAAKskP,GACL,IApKE,UAqKEz6S,KAAKgyH,iBAAiBnxH,GACtB,MACJ,IA3KK,aA4KDb,KAAKu7S,qBAAqB16S,GAC1B,MACJ,IA/KI,YAgLAb,KAAKw7S,kBAAkB36S,GACvB,MACJ,IAtLA,QAuLIb,KAAKu7S,qBAAqB16S,GAC1B,MACJ,IAxLC,SAyLGb,KAAKw7S,kBAAkB36S,KAInCi6S,EAAYz/S,UAAU22H,iBAAmB,SAAUnxH,GAC/C,IACI46S,EADUz7S,KAAKi/G,aACD7kG,SAASpa,KAAK+6S,OAAOt+S,QACnCy1H,EAAarxH,EAAEs1D,SAAWskP,GAAY,EAAIgB,EAAIt2O,kBAAoB,EAClEu2O,EAASxpL,EACTypL,EAAM37S,KAAK47S,aAAaH,EAAKf,IAC7BiB,IACAD,EAAS17S,KAAK67S,OAAOJ,EAAKE,GAC1BA,EAAI73S,UAAUS,OAAOm2S,IACrB75S,EAAEs1D,SAAWskP,GAAYiB,IAAWA,IAChCA,KAAY76S,EAAEs1D,SAAWskP,GAAYgB,EAAIt2O,mBAAqB,KAC9Du2O,EAASxpL,IAGjB,IAAI4pL,EAAML,EAAIrhS,SAASshS,GACvBA,EAAS17S,KAAKqyH,UAAUypL,EAAKJ,EAAQ76S,EAAEs1D,QACvCslP,EAAIrhS,SAASshS,GAAQ53S,UAAUM,IAAIs2S,IACnCe,EAAIrhS,SAASshS,GAAQx5S,SAEzB44S,EAAYz/S,UAAUg3H,UAAY,SAAUypL,EAAK7pS,EAAOkkD,GACpD,IACIslP,EADUz7S,KAAKi/G,aACD7kG,SAASpa,KAAK+6S,OAAOt+S,QAQvC,OAPIq/S,EAAIh4S,UAAUK,SAASw2S,KAAcmB,EAAIh4S,UAAUK,SAvMhD,eAuMsE23S,EAAIh4S,UAAUK,SAASy2S,OAC9FzkP,IAAWskP,IAhNR,eAgNuBtkP,EAA0BlkD,IAAUA,OAEpE6pS,EAAML,EAAIrhS,SAASnI,IACXnO,UAAUK,SAASw2S,KAAcmB,EAAIh4S,UAAUK,SA3MhD,eA2MsE23S,EAAIh4S,UAAUK,SAASy2S,OAChG3oS,EAAQjS,KAAKqyH,UAAUypL,EAAK7pS,EAAOkkD,IAEhClkD,GAEX6oS,EAAYz/S,UAAUkgT,qBAAuB,SAAU16S,GACnD,IAAI0M,EACAwE,EAAU/R,KAAKi/G,aACfw8L,EAAM1pS,EAAQqI,SAASpa,KAAK+6S,OAAOt+S,QACnCk/S,EAAM37S,KAAK47S,aAAaH,EAAKf,IACjC,GAAIiB,EAAK,CACL,IAAID,EAAS17S,KAAK67S,OAAOJ,EAAKE,GAC1BZ,EAAS/6S,KAAK+6S,OAAOxgS,OAAOmhS,GAC5BzpS,OAAQ,EACR4L,EAAO7d,KAAKssG,QAAQyuM,GACpBl9R,EAAK48C,MAAMh+D,QACXuD,KAAK+6S,OAAOv2S,KAAKk3S,GACjB17S,KAAK+7S,SAASJ,EAAK99R,EAAM,KAAM,KAAMhd,GACrC86S,EAAI73S,UAAUS,OAAOm2S,IACrBiB,EAAI73S,UAAUM,IAAI2lM,IA3OtB,UA4OQlpM,EAAEs1D,SACF5oD,GAAcvM,QAAS26S,EAAK99R,KAAMA,GAClC7d,KAAKwmB,QAAQ,SAAUjZ,IAE3BouS,EAAIz5S,QACJu5S,EAAM1pS,EAAQqI,SAASpa,KAAK+6S,OAAOt+S,QACnCwV,EAAQjS,KAAKqyH,UAAUopL,EAAIrhS,SAAS,GAAI,EAAGvZ,EAAEs1D,QAC7CslP,EAAIrhS,SAASnI,GAAOnO,UAAUM,IAAIs2S,IAClCe,EAAIrhS,SAASnI,GAAO/P,SApPxB,UAuPQrB,EAAEs1D,SACFwlP,EAAI73S,UAAUS,OAAOm2S,IACrBiB,EAAI73S,UAAUM,IAAI2lM,IAClBx8L,GAAcvM,QAAS26S,EAAK99R,KAAMA,GAClC7d,KAAKwmB,QAAQ,SAAUjZ,GACvBvN,KAAKs7S,UAAU,KAAMz6S,MAKrCi6S,EAAYz/S,UAAUmgT,kBAAoB,SAAU36S,GAChD,GAAIb,KAAK+6S,OAAOt+S,OAAQ,CACpB,IAAIsV,EAAU/R,KAAKi/G,aACnBj/G,KAAKs7S,UAAUt7S,KAAK+6S,OAAOt+S,OAAQoE,GACnC,IAAI46S,EAAM1pS,EAAQqI,SAASpa,KAAK+6S,OAAOt+S,QACnCu/S,EAAMh8S,KAAK47S,aAAaH,EAAK1xG,IAC7BiyG,IACAA,EAAIx4S,aAAa,gBAAiB,SAClCw4S,EAAIl4S,UAAUS,OAAOwlM,IACrBiyG,EAAIl4S,UAAUM,IAAIs2S,IAClBsB,EAAI95S,aA1QP,WA8QGrB,EAAEs1D,QACFn2D,KAAKs7S,UAAU,KAAMz6S,IAIjCi6S,EAAYz/S,UAAUk0H,cAAgB,SAAU1uH,GAC5Cb,KAAKs7S,UAAU,KAAMz6S,IAEzBi6S,EAAYz/S,UAAUyrS,aAAe,SAAUjmS,GAC3Cb,KAAKg7S,WAAY,EACjBh7S,KAAKm7S,aAAat6S,EAAEq6G,gBAExB4/L,EAAYz/S,UAAU8/S,aAAe,SAAUt6S,GAC3CA,EAAE2kB,iBACFxlB,KAAKs7S,UAAU,KAAMz6S,GACjBb,KAAKswH,QAAQzvH,EAAEsG,UACXtG,EAAE89D,eACF3+D,KAAK+7S,SAAS,KAAM,KAAMl7S,EAAE89D,eAAe,GAAGzyD,MAAQ,EAAGrL,EAAE89D,eAAe,GAAG7yD,MAAQ,EAAGjL,GAGxFb,KAAK+7S,SAAS,KAAM,KAAMl7S,EAAEqL,MAAQ,EAAGrL,EAAEiL,MAAQ,EAAGjL,KAOhEi6S,EAAYz/S,UAAU4G,MAAQ,WAC1BjC,KAAKs7S,aAETR,EAAYz/S,UAAUigT,UAAY,SAAUW,EAASp7S,GAGjD,QAFgB,IAAZo7S,IAAsBA,EAAU,QAC1B,IAANp7S,IAAgBA,EAAI,MACpBb,KAAKk8S,gBAOL,IAAK,IANDnrL,OAAK,EACLlzG,OAAO,EACP48C,OAAQ,EACR+sD,OAAY,EACZmL,OAAkB,EAClB5gH,EAAU/R,KAAKi/G,aACVrvG,EAAMmC,EAAQozD,kBAAmBv1D,EAAMqsS,EAASrsS,IAErD6qD,GADA58C,EAAO7d,KAAK+6S,OAAOt+S,OAASuD,KAAKssG,QAAQtsG,KAAK+6S,QAAU,MACzCl9R,EAAK48C,MAAQz6D,KAAKy6D,MAEjCk4D,GAAoB3xH,QADpB+vH,EAAKh/G,EAAQqI,SAASxK,EAAM,GACKsrL,WAAYr9K,EAAM48C,MAAOA,EAAOn+D,MAAOuE,EAAGg4B,QAAQ,GACnF74B,KAAKwmB,QAAQ,cAAemsG,GACvBA,EAAgB95F,SACjB74B,KAAKm8S,gBAAgBprL,GAAI,GACzB/wH,KAAK+6S,OAAOt+S,OAASw/S,EAAUA,EAAU,EAAIA,EAC7Cz0L,GAAcxmH,QAAS+vH,EAAImqE,WAAYr9K,EAAM48C,MAAOA,GACpDz6D,KAAKwmB,QAAQ,UAAWghG,KAKxCszL,EAAYz/S,UAAU6gT,cAAgB,WAClC,OAAQl8S,KAAK+6S,OAAOt+S,OAAS,GAAMuD,KAAKgB,QAAQ8C,UAAUK,SAAS,kBAAoBM,EAAUzE,KAAKgB,SAASywM,WAEnHqpG,EAAYz/S,UAAUi1H,QAAU,SAAUnpH,GACtC,IAAImpH,GAAU,EACd,GAAItwH,KAAKgnC,OAAQ,CACbspF,GAAU,EAEV,IAAK,IADDtpF,EAAShnC,KAAKgnC,OAAO9pC,MAAM,KACtBf,EAAI,EAAG0F,EAAMsF,EAAOrD,UAAUrH,OAAQN,EAAI0F,EAAK1F,IACpD,GAAI6qC,EAAOzoC,QAAQ4I,EAAOrD,UAAU3H,KAAO,EAAG,CAC1Cm0H,GAAU,EACV,OAIZ,OAAOA,GAQXwqL,EAAYz/S,UAAUqG,KAAO,SAAUgL,EAAKF,GACxCxM,KAAK+7S,SAAS,KAAM,KAAMrvS,EAAKF,IAEnCsuS,EAAYz/S,UAAU0gT,SAAW,SAAUnrL,EAAI/yG,EAAMnR,EAAKF,EAAM3L,QAChD,IAAR6L,IAAkBA,EAAM,QACf,IAATF,IAAmBA,EAAO,QACpB,IAAN3L,IAAgBA,EAAI,MACxB,IAAIkwH,EAEAh/G,EAAU/R,KAAKi/G,aACnB,GAAI2R,EAAI,CAEJ,GADAG,EAAK/wH,KAAK2wH,YAAY9yG,EAAK48C,OACvBjvD,GAAQkb,SAAU,CAClB3U,EAAQ+1H,UAAUpjI,MAAM4xC,QAAU,OAClC,IAAI95C,GAASiwB,KAAM5O,EAAK4O,KAAMinD,QAAS0oO,sBACnCC,EAAQ,IAAIxB,GAAS76S,KAAKy6D,MAAM,GAAI,KAAMj+D,GAAM,GAChD8/S,EAAMt8S,KAAK2wH,aAAa0rL,IAAQjiS,SAAS,GAC7CkiS,EAAIx4S,UAAUM,IAAIqzM,IAClB1mF,EAAG7rH,aAAao3S,EAAKvrL,EAAG32G,SAAS,IAErC22G,EAAGrsH,MAAM+9D,OAASziE,KAAKgB,QAAQ0D,MAAM+9D,OACrC1wD,EAAQpQ,YAAYovH,QAGpBA,EAAK/wH,KAAKgB,QAELhB,KAAKqzE,SAASu9C,EAAKA,EAAGttH,GAAK,MAAM,GAC1C,IACIiK,GAAcvM,QAAS+vH,EAAIt2D,MADnBm2D,EAAK/yG,EAAK48C,MAAQz6D,KAAKy6D,MACUygI,WAAYr9K,EAAMvhB,MAAOuE,EAAGg4B,QAAQ,GACjF74B,KAAKwmB,QAAQ,aAAcjZ,GACvBA,EAAUsrB,OACV74B,KAAK+6S,OAAO3uJ,OAGZpsJ,KAAK6Y,YAAY+3G,EAAIG,EAAIrkH,EAAKF,GAC9BxM,KAAKm8S,gBAAgBprL,KAG7B+pL,EAAYz/S,UAAUwd,YAAc,SAAU+3G,EAAIG,EAAIrkH,EAAKF,GAGvD,GADAxM,KAAKu8S,gBAAgBxrL,GACjBA,IAAO/wH,KAAKgB,QAAS,CAKrB,IAJIw7S,EAAU9kS,GAAUq5G,EAAI,KAAMvkH,EAAME,IAC5BnO,QAAQ,UAAY,IAC5BiO,GAAcukH,EAAGnsH,aAEjB43S,EAAQj+S,QAAQ,WAAa,EAAG,CAEhCmO,GADIf,EAASsK,GAAI86G,EAAI,MAAQ36G,GAAG,EAAOC,GAAG,IAAU3J,IAAKA,EAAKF,KAAMA,KACvDE,IAAM,GAGvB,IADA8vS,EAAU9kS,GAAUq5G,EAAI,KAAMvkH,EAAME,IACxBnO,QAAQ,SAAW,EAAG,CAE9BiO,GADIb,EAASsK,GAAI86G,EAAI,MAAQ36G,GAAG,EAAMC,GAAG,IAAW3J,IAAKA,EAAKF,KAAMA,KACtDA,WAIlB,GAAIhB,GAAQkb,SACRha,EAAM4qB,OAAOt3B,KAAKgB,QAAQ0D,MAAMgI,IAAI6C,QAnBnC,KAmB+C,KAChD/C,EAAO8qB,OAAOt3B,KAAKgB,QAAQ0D,MAAM8H,KAAK+C,QApBrC,KAoBiD,SAEjD,CACD,IACI5D,EACJe,GADIf,EAAS2I,GAAkBs8G,EADvB5wH,KAAKkT,UAAY,OAAS,QACI,QACzBxG,IACbF,EAAOb,EAAOa,KACd,IAAIgwS,EACAC,GADAD,EAAU9kS,GAAUq5G,EAAI,KAAM/wH,KAAKkT,UAAY1G,EAAOukH,EAAGnsH,YAAc4H,EAAME,IACxDnO,QAAQ,SAAW,GAAKi+S,EAAQj+S,QAAQ,UAAY,EACzEk+S,IAEAjwS,GADAb,EAAS2I,GAAkBs8G,EAAI5wH,KAAKkT,UAAY,QAAU,OAAQ,QACpD1G,OAEdxM,KAAKkT,WAAaupS,KAClBjwS,EAAQxM,KAAKkT,WAAaupS,EAAcjwS,EAAOA,EAAOukH,EAAGnsH,aAEzD43S,EAAQj+S,QAAQ,WAAa,IAE7BmO,GADAf,EAASsK,GAAI86G,EAAI,MAAQ36G,GAAG,EAAOC,GAAG,IAAU3J,IAAKA,EAAKF,KAAMA,KACnDE,KAIzB1M,KAAKu8S,gBAAgBxrL,GAAI,GACzBA,EAAGrsH,MAAMgI,IAAMA,EA3CN,KA4CTqkH,EAAGrsH,MAAM8H,KAAOA,EA5CP,MA8CbsuS,EAAYz/S,UAAUkhT,gBAAkB,SAAUxrL,EAAItsH,QAChC,IAAdA,IAAwBA,GAAY,GACxCssH,EAAGrsH,MAAMC,WAAaF,EAAY,SAAW,GAC7CssH,EAAGrsH,MAAM4xC,QAAU7xC,EAAY,QAAU,QAE7Cq2S,EAAYz/S,UAAUs1H,YAAc,SAAUl2D,GAC1C,IAAI16D,EAAQC,KACR6wH,EAAW7wH,KAAK08S,SAASjiP,EAAO,WAChC8xJ,GACA17F,SAAUA,EACVj+G,WAAY,OACZqjL,aAAc,SAAUh2L,GACfA,EAAKw5F,QAAQn2F,KACdrD,EAAKw5F,QAAQn2F,GAAK9D,EAAY,aAElCS,EAAKw5F,QAAQ3jB,gBACTlkE,KAAM,WACNo/G,SAAU,OAGlBolE,YAAa,SAAUn2L,GAQnB,GAPIA,EAAKw5F,QAAQw3B,YACbhxH,EAAK4d,KAAK/Z,UAAUM,IAAIu2S,IACxB16S,EAAK4d,KAAKnS,gBAAgB,UAE1BmlH,GAAa5wH,EAAKw5F,QAAQ/lB,SAAYzzE,EAAKw5F,QAAQw3B,WACnDhxH,EAAK4d,KAAK/Z,UAAUM,IAAI,eAExBnE,EAAKw5F,QAAQh/B,OAASx6D,EAAKw5F,QAAQh/B,MAAMh+D,OAAQ,CACjD,IAAIkmE,EAAOxhE,EAAc,QAAUkC,UAAW+4S,oBAC9Cn8S,EAAK4d,KAAKlc,YAAYghE,GACtB1iE,EAAK4d,KAAKra,aAAa,gBAAiB,QACxCvD,EAAK4d,KAAKra,aAAa,gBAAiB,SACxCvD,EAAK4d,KAAKnS,gBAAgB,QAC1BzL,EAAK4d,KAAK/Z,UAAUM,IAAI,qBAE5B,IAAImJ,GAAcsQ,KAAM5d,EAAKw5F,QAASz4F,QAASf,EAAK4d,MACpD9d,EAAMymB,QAAQ,mBAAoBjZ,KAGtCwjH,EAAKid,GAASsrD,WAAWt5L,KAAK28S,YAAYliP,EAAMp5D,SAAUkrN,GAAiB,GAE/E,OADAx7F,EAAGvtH,aAAa,WAAY,KACrButH,GAEX+pL,EAAYz/S,UAAUshT,YAAc,SAAUliP,GAG1C,IAAK,IAFD58C,EACA++R,KACKzgT,EAAI,EAAG0F,EAAM44D,EAAMh+D,OAAQN,EAAI0F,EAAK1F,IACzC0hB,EAAO48C,EAAMt+D,GAAG8G,WAChB25S,EAAUp4S,KAAKqZ,GAEnB,OAAO++R,GAEX9B,EAAYz/S,UAAU+/S,aAAe,SAAUv6S,GAC3C,IAAIkR,EAAU/R,KAAKi/G,aACfiR,EAAOrvH,EAAEsG,OACT20S,EAAM97S,KAAKuyH,MAAMrC,GACrB,GAAI4rL,GAAOj2S,EAAQi2S,EAAK,IAAMnqS,IAAU,CACpC,IAAIgqS,EAAMl2S,EAAO,IAAMi1S,GAAS3oS,GAC5B4pS,GACAA,EAAI73S,UAAUS,OAAOm2S,IAEzBoB,EAAIh4S,UAAUM,IAAIs2S,IACb16S,KAAK68S,iBACN78S,KAAKm/G,aAAat+G,KAI9Bi6S,EAAYz/S,UAAUqhT,SAAW,SAAUjiP,EAAO1uC,GAC9C,IAAK,IAAI5vB,EAAI,EAAG0F,EAAM44D,EAAMh+D,OAAQN,EAAI0F,EAAK1F,IACzC,GAAIs+D,EAAMt+D,GAAG4vB,GACT,OAAO,EAGf,OAAO,GAEX+uR,EAAYz/S,UAAU4jH,WAAa,WAC/B,OAAOp5G,EAAQ7F,KAAKgB,QAAS,IAAM2Q,KAEvCmpS,EAAYz/S,UAAU8jH,aAAe,SAAUt+G,GAC3C,GAAIb,KAAKg7S,UACLh7S,KAAKg7S,WAAY,MAEhB,CACD,IAAIjpS,EAAU/R,KAAKi/G,aACfiR,EAAOrvH,EAAEsG,OACT20S,EAAM97S,KAAKuyH,MAAMrC,GACjB4sL,EAAahB,EAAMj2S,EAAQi2S,EAAK,IAAMnqS,IAAW,KACjDorS,EAAWjB,GAAOgB,GAAc/qS,EAAQ5M,kBAAkB7B,KAAOw5S,EAAW33S,kBAAkB7B,GAClG,GAAIy5S,GAAuB,UAAXl8S,EAAE6F,OAAqBo1S,EAAIh4S,UAAUK,SAASszM,IAAS,CACnEz3M,KAAKg9S,cAAclB,GACnB,IAAIf,EAAS/6S,KAAKqzE,SAASyoO,EAAIx4S,IAAI,GAE/BiK,GAAcvM,QAAS86S,EAAKj+R,KAD5BA,EAAO7d,KAAKssG,QAAQyuM,IAExB/6S,KAAKwmB,QAAQ,SAAUjZ,GAE3B,GAAIwvS,IAAwB,cAAXl8S,EAAE6F,MAAwB8E,GAAQkb,UAAY1mB,KAAK68S,iBAAkB,CAClF,IAAI9rL,OAAK,EACT,GAAI+qL,EAAIh4S,UAAUK,SAASszM,IAAS,CAChC1mF,EAAKh/G,EAAQqI,SAASpa,KAAK+6S,OAAOt+S,OAAS,GAC3CuD,KAAKm8S,gBAAgBprL,IACjBirL,EAAMh8S,KAAK47S,aAAa7qL,EAAIg5E,MAE5BiyG,EAAIl4S,UAAUS,OAAOwlM,IAEzB1kM,EAAOy2S,EAAIr7S,YACXT,KAAK+6S,OAAO3uJ,WAGZ,IAAK0vJ,EAAIh4S,UAAUK,SAASw2S,IAAY,CACpC,IAAIsC,GAAc,EACdxB,EAAMK,EAAIr7S,WACVy8S,EAASl9S,KAAK67S,OAAOJ,EAAKK,GAC9B,IAAKtwS,GAAQkb,SAAU,CACnB,IAAIy2R,EAASn9S,KAAK67S,OAAO9pS,EAAS0pS,GAIlC,GAHIz7S,KAAK+6S,OAAOoC,KAAYD,IACxBD,GAAc,GAEdE,IAAWn9S,KAAK+6S,OAAOt+S,SAAsB,cAAXoE,EAAE6F,MAAwBu2S,GAAc,CAC1E,IAAIjB,GAAAA,EAAMh8S,KAAK47S,aAAaH,EAAK1xG,MAE7BiyG,EAAIl4S,UAAUS,OAAOwlM,IAEzB/pM,KAAKs7S,UAAU6B,EAAS,EAAGt8S,IAGnC,GAAIo8S,EAAa,CACb,IACIp/R,EADA+M,EAAM5qB,KAAK+6S,OAAOxgS,OAAO2iS,IACzBr/R,EAAO7d,KAAKssG,QAAQ1hF,IACf6vC,MAAMh+D,QACI,cAAXoE,EAAE6F,MACF1G,KAAKg9S,cAAclB,GAEvBA,EAAIt4S,aAAa,gBAAiB,QAClCxD,KAAK+6S,OAAOv2S,KAAK04S,GACjBl9S,KAAK+7S,SAASD,EAAKj+R,EAAM,KAAM,KAAMhd,IAGtB,cAAXA,EAAE6F,MACF1G,KAAKs7S,UAAU,KAAMz6S,SAQpB,OAAjBqvH,EAAKltH,SAAoBktH,EAAK77G,gBAAkBtC,GAC3C+pS,GAAQA,EAAIn5S,cAAc,aAC3B3C,KAAKs7S,UAAU,KAAMz6S,KAMzCi6S,EAAYz/S,UAAU2hT,cAAgB,SAAUpsL,GAC5C,IAAIorL,EAAMh8S,KAAK47S,aAAahrL,EAAGv8G,cAAe01L,IAC1CiyG,GACAA,EAAIl4S,UAAUS,OAAOwlM,IAEzBn5E,EAAG9sH,UAAUS,OAAOm2S,IACpB9pL,EAAG9sH,UAAUM,IAAI2lM,KAErB+wG,EAAYz/S,UAAUugT,aAAe,SAAU7qL,EAAIqsL,GAC/C,IAAK,IAAIjhT,EAAI,EAAG0F,EAAMkvH,EAAG32G,SAAS3d,OAAQN,EAAI0F,EAAK1F,IAC/C,GAAI40H,EAAG32G,SAASje,GAAG2H,UAAUK,SAASi5S,GAClC,OAAOrsL,EAAG32G,SAASje,GAG3B,OAAO,MAEX2+S,EAAYz/S,UAAUixG,QAAU,SAAUyuM,GAEtC,IAAInwR,GADJmwR,EAASA,EAAO15S,SACC+qJ,MAEjB,OADYpsJ,KAAK2yO,SAASooE,GACbnwR,IAEjBkwR,EAAYz/S,UAAUs3O,SAAW,SAAUooE,GAEvC,IAAK,IADDtgP,EAAQz6D,KAAKy6D,MACRt+D,EAAI,EAAGA,EAAI4+S,EAAOt+S,OAAQN,IAC/Bs+D,EAAQA,EAAMsgP,EAAO5+S,IAAIs+D,MAE7B,OAAOA,GAEXqgP,EAAYz/S,UAAUwgT,OAAS,SAAU9qL,EAAIH,EAAIysL,QAC7B,IAAZA,IAAsBA,GAAU,GACpC,IAAIzyR,EAAMpsB,MAAMnD,UAAUkD,QAAQ+C,KAAKyvH,EAAG32G,SAAUw2G,GAIpD,OAHIysL,GAAWtsL,EAAG32G,SAAS,GAAGtW,UAAUK,SAASszM,KAC7C7sL,IAEGA,GAEXkwR,EAAYz/S,UAAUk3H,MAAQ,SAAU7vH,GACpC,MAAqB,OAAjBA,EAAKM,QACEN,EAEJmD,EAAQnD,EAAM,OASzBo4S,EAAYz/S,UAAUmsF,kBAAoB,SAAUiF,EAASC,GAEzD,IAAK,IADD36E,EAAU/R,KAAKi/G,aACV7gH,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKmvF,GAAUruF,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAE9D,OADWyE,EAAGzE,IAEV,IAAK,WACGsuF,EAAQz5E,UACRlB,EAAQjO,UAAUS,OAAOmoF,EAAQz5E,UAEjCw5E,EAAQx5E,UACRlB,EAAQjO,UAAUM,IAAIqoF,EAAQx5E,UAElC,MACJ,IAAK,YACDlB,EAAQjO,UAAUu9G,OAvoB5B,SAwoBU,MACJ,IAAK,SACDrhH,KAAKs7S,YACLt7S,KAAKgnC,OAASylD,EAAQzlD,OACtB,MACJ,IAAK,kBACDhnC,KAAKw+G,eACLx+G,KAAK68S,gBAAkBpwN,EAAQowN,gBAC/B78S,KAAKukB,aACL,MACJ,IAAK,SACDvkB,KAAKw+G,eACLx+G,KAAKmH,OAASslF,EAAQtlF,OACtBnH,KAAKukB,aACL,MACJ,IAAK,QAKD,IAAK,IAJDqG,OAAM,EACNmwR,OAAS,EACTl9R,OAAO,EACPvgB,EAAOgB,OAAOhB,KAAKmvF,EAAQhyB,OACtBt+D,EAAI,EAAGA,EAAImB,EAAKb,OAAQN,KAC7B4+S,EAAS/6S,KAAKs9S,oBAAoB7wN,KAAan1D,OAAOh6B,EAAKnB,MAChDM,QAAUuD,KAAKi/G,aAAa7kG,SAAS3d,SAC5CmuB,EAAMmwR,EAAO3uJ,MACbvuI,EAAO7d,KAAK2yO,SAASooE,GACrB/6S,KAAKu9S,aAAa1/R,EAAK+M,IAAO/M,EAAK+M,GAAK6B,MACxCzsB,KAAKg1D,WAAWn3C,EAAMk9R,EAAQnwR,IAElCmwR,EAAOt+S,OAAS,KAMpCq+S,EAAYz/S,UAAUiiT,oBAAsB,SAAU7wN,EAASx6E,EAAO2Y,GAClE3Y,EAAMzN,KAAKomB,GACX,IAAIvtB,EAAMiB,OAAOhB,KAAKmvF,EAAQhyB,MAAM7vC,IAAMwhI,MAC1C,GAAY,UAAR/uJ,EAAiB,CACjB,IAAIwgB,EAAO4uE,EAAQhyB,MAAM7vC,GACzB5qB,KAAKs9S,oBAAoBz/R,EAAM5L,EAAOqlB,OAAOh5B,OAAOhB,KAAKugB,EAAK48C,OAAO2xF,YAGzD,kBAAR/uJ,GAA2B4U,EAAMxV,OAAS,GAC1CwV,EAAMm6I,MAGd,OAAOn6I,GAEX6oS,EAAYz/S,UAAU25D,WAAa,SAAUn3C,EAAMk9R,EAAQnwR,GACvD/M,EAAKwK,OAAOuC,EAAK,GACjB,IAAI4yR,EAAMx9S,KAAKi/G,aAAa7kG,SACxB2gS,EAAOt+S,OAAS+gT,EAAI/gT,QACpB4I,EAAOm4S,EAAIzC,EAAOt+S,QAAQ2d,SAASwQ,KAO3CkwR,EAAYz/S,UAAUmjH,aAAe,WACjC,IAAIzsG,EAAU/R,KAAKi/G,aACnB,GAAIj/G,KAAKmH,OAAQ,CAIb,IAAK,IAHDA,OAAS,EACTwoH,OAAc,EACdurL,EAAct1S,EAAU5F,KAAKmH,QACxBhL,EAAI,EAAG0F,EAAMq5S,EAAYz+S,OAAQN,EAAI0F,EAAK1F,IAC/CgL,EAAS+zS,EAAY/+S,GACjBqP,GAAQqb,OACR8oG,EAAcntH,EAAY2E,EAAQ0yG,MAE9B8V,EAAYr9G,UAIhB/M,GAAahB,OAAO4C,EAAQ,cAAenH,KAAKm7S,cAGxD,IAAK,IAAI/8S,EAAK,EAAGyE,EAAK2W,GAAoBxZ,KAAK6uH,eAAgBzwH,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACjF,IAAI8jH,EAAWr/G,EAAGzE,GAClBmH,GAAahB,OAAO29G,EAAU,SAAUliH,KAAKuvH,gBAGhD/jH,GAAQkb,WACTnhB,GAAahB,OAAOwN,EAAS,YAAa/R,KAAKo7S,cAC/C71S,GAAahB,OAAO/D,SAAU,YAAaR,KAAK6/G,mBAEpDt6G,GAAahB,OAAO/D,SAAU,QAASR,KAAKq7S,sBAC5C,IAAIthK,EAAiBv3I,EAAYuP,EAASqkG,IACtC2jC,GACAA,EAAeznI,WAGvBwoS,EAAYz/S,UAAU8gT,gBAAkB,SAAUprL,EAAI0sL,GAClD,IAAI19S,EAAQC,UACO,IAAfy9S,IAAyBA,GAAa,GACJ,SAAlCz9S,KAAK4pH,kBAAkB5xF,QAAsBylR,EAI7Cz9S,KAAK22C,UAAUpe,QAAQw4F,GACnBt5F,KAAMz3B,KAAK4pH,kBAAkB5xF,OAC7B9sB,SAAUlL,KAAK4pH,kBAAkB1+G,SACjCmhF,eAAgBrsF,KAAK4pH,kBAAkBhqG,OACvCnB,MAAO,SAAUzL,GACbA,EAAQhS,QAAQ0D,MAAM4xC,QAAU,QAChCtjC,EAAQhS,QAAQ0D,MAAM6uD,UAAYvgD,EAAQhS,QAAQ4K,wBAAwBmK,OAAS,MAEvF8I,IAAK,SAAU7L,GACXjT,EAAM8e,IAAI7L,EAAQhS,QAASy8S,MAZnCz9S,KAAK6e,IAAIkyG,EAAI0sL,IAiBrB3C,EAAYz/S,UAAUwjB,IAAM,SAAUkyG,EAAI0sL,GACtC,GAAIA,EAAY,CACZ1sL,EAAGrsH,MAAM4xC,QAAU,QACnBy6E,EAAGrsH,MAAM6uD,UAAY,GACrB,IAAI11C,EAAO7d,KAAK+6S,OAAOt+S,OAASuD,KAAKssG,QAAQtsG,KAAK+6S,QAAU,KACxDxtS,GAAcvM,QAAS+vH,EAAImqE,WAAYr9K,EAAM48C,MAAO58C,EAAOA,EAAK48C,MAAQz6D,KAAKy6D,OAEjF,GADAz6D,KAAKwmB,QAAQ,SAAUjZ,GACnBwjH,EAAGpuH,cAAc,IAAM+3S,IACvB3pL,EAAGpuH,cAAc,IAAM+3S,IAASx4S,YAE/B,CACD,IAAI8B,OAAM,GACVA,EAAMhE,KAAKi/G,aAAa7kG,SAASpa,KAAK67S,OAAO77S,KAAKi/G,aAAc8R,GAAM,IAElE/sH,EAAIrB,cAAc,IAAMonM,IAAU7nM,QAGlClC,KAAKgB,QAAQkB,cAKrB,GAAI6uH,IAAO/wH,KAAKgB,QAAS,CACrB,IAAI26S,EAAM37S,KAAK47S,aAAa57S,KAAKgB,QAAS05S,IACtCiB,GACAA,EAAI73S,UAAUS,OAAOm2S,IAEzB,IAAIsB,EAAMh8S,KAAK47S,aAAa57S,KAAKgB,QAAS+oM,IACtCiyG,GACAA,EAAIl4S,UAAUS,OAAOwlM,IAEzBh5E,EAAGrsH,MAAM4xC,QAAU,YAGnBjxC,EAAO0rH,IAQnB+pL,EAAYz/S,UAAUmxG,eAAiB,WACnC,MAAO,IAOXsuM,EAAYz/S,UAAUkkC,cAAgB,WAClC,MAAO,eAEXu7Q,EAAYz/S,UAAUg4E,SAAW,SAAU72E,EAAMkhT,EAAYjjP,EAAOsgP,EAAQ4C,QAC1D,IAAVljP,IAAoBA,EAAQz6D,KAAKy6D,YACtB,IAAXsgP,IAAqBA,WACN,IAAf4C,IAAyBA,GAAa,GAE1C,IAAK,IADD9/R,EACK1hB,EAAI,EAAG0F,EAAM44D,EAAMh+D,OAAQN,EAAI0F,EAAK1F,IAAK,CAE9C,GADA0hB,EAAO48C,EAAMt+D,IACRuhT,EAAa7/R,EAAKva,GAAKua,EAAK4O,QAAUjwB,EAAM,CAC7Cu+S,EAAOv2S,KAAKrI,GACZ,MAEC,GAAI0hB,EAAK48C,MAAMh+D,OAAQ,CAExB,IAAmC,KADnCs+S,EAAS/6S,KAAKqzE,SAAS72E,EAAMkhT,EAAY7/R,EAAK48C,MAAOsgP,GAAQ,IAClDA,EAAOt+S,OAAS,GAKtB,CACDs+S,EAAO7/S,QAAQiB,GACf,MANIA,IAAM0F,EAAM,GACZk5S,EAAO3uJ,WASXjwJ,IAAM0F,EAAM,GACZk5S,EAAOv2S,MAAM,GAIzB,OAASm5S,IAA6B,IAAf5C,EAAO,GAAkBA,MAQpDD,EAAYz/S,UAAUs6E,YAAc,SAAUlb,EAAOh7B,EAAQi+Q,QAC1C,IAAXj+Q,IAAqBA,GAAS,GAMlC,IAAK,IALDsxF,EACAnmG,EACAmwR,EACA78L,EAj1BG,aAk1BHnsG,EAAU/R,KAAKi/G,aACV9iH,EAAI,EAAGA,EAAIs+D,EAAMh+D,OAAQN,IAE9ByuB,GADAmwR,EAAS/6S,KAAKqzE,SAAS5Y,EAAMt+D,GAAIuhT,IACpBtxJ,OACbr7B,EAAKh/G,EAAQqI,SAAS2gS,EAAOt+S,WAErBgjC,EACIj0B,GAAQkb,WAAaqqG,EAAGjtH,UAAUK,SAAS,iBAC3C4sH,EAAG32G,SAASwQ,EAAM,GAAG9mB,UAAUS,OAAO25G,GAGtC6S,EAAG32G,SAASwQ,GAAK9mB,UAAUS,OAAO25G,GAIlC1yG,GAAQkb,WAAaqqG,EAAGjtH,UAAUK,SAAS,iBAC3C4sH,EAAG32G,SAASwQ,EAAM,GAAG9mB,UAAUM,IAAI85G,GAGnC6S,EAAG32G,SAASwQ,GAAK9mB,UAAUM,IAAI85G,KAWnD48L,EAAYz/S,UAAUuiT,UAAY,SAAUnjP,EAAOijP,GAC/C19S,KAAK69S,cAAcpjP,GAAO,EAAOijP,IAOrC5C,EAAYz/S,UAAUyiT,UAAY,SAAUrjP,EAAOijP,GAC/C19S,KAAK69S,cAAcpjP,GAAO,EAAMijP,IAEpC5C,EAAYz/S,UAAUwiT,cAAgB,SAAUpjP,EAAOsjP,EAAQL,GAK3D,IAAK,IAJD3sL,EACA9+G,EACA8oS,EACAhpS,EAAU/R,KAAKi/G,aACV9iH,EAAI,EAAGA,EAAIs+D,EAAMh+D,OAAQN,IAE9B8V,GADA8oS,EAAS/6S,KAAKqzE,SAAS5Y,EAAMt+D,GAAIuhT,IAClBtxJ,OACfr7B,EAAKh/G,EAAQqI,SAAS2gS,EAAOt+S,WAErBshT,EACIvyS,GAAQkb,WAAaqqG,EAAGjtH,UAAUK,SAAS,iBAC3C4sH,EAAG32G,SAASnI,EAAQ,GAAGnO,UAAUM,IAAIw2S,IAGrC7pL,EAAG32G,SAASnI,GAAOnO,UAAUM,IAAIw2S,IAIjCpvS,GAAQkb,WAAaqqG,EAAGjtH,UAAUK,SAAS,iBAC3C4sH,EAAG32G,SAASnI,EAAQ,GAAGnO,UAAUS,OAAOq2S,IAGxC7pL,EAAG32G,SAASnI,GAAOnO,UAAUS,OAAOq2S,MAWxDE,EAAYz/S,UAAUo4S,YAAc,SAAUh5O,EAAOijP,GAIjD,IAAK,IAHD9yR,EACAmwR,EACAiD,EACK7hT,EAAI,EAAGA,EAAIs+D,EAAMh+D,OAAQN,IAE9ByuB,GADAmwR,EAAS/6S,KAAKqzE,SAAS5Y,EAAMt+D,GAAIuhT,IACpBtxJ,MACb4xJ,EAASh+S,KAAK2yO,SAASooE,GACvB/6S,KAAKg1D,WAAWgpP,EAAQjD,EAAQnwR,IASxCkwR,EAAYz/S,UAAUkiT,YAAc,SAAU9iP,EAAOhuC,EAAMixR,GACvD19S,KAAKi+S,YAAYxjP,EAAOhuC,EAAMixR,IAQlC5C,EAAYz/S,UAAU6J,aAAe,SAAUu1D,EAAOhuC,EAAMixR,GACxD19S,KAAKi+S,YAAYxjP,EAAOhuC,EAAMixR,GAAY,IAE9C5C,EAAYz/S,UAAU4iT,YAAc,SAAUxjP,EAAOhuC,EAAMixR,EAAYQ,QACnD,IAAZA,IAAsBA,GAAU,GAOpC,IAAK,IANDttL,EACAhmG,EACAmwR,EACAiD,EACAG,EAEKhiT,EAAI,EAAGA,EAAIs+D,EAAMh+D,OAAQN,IAAK,CAEnCyuB,GADAmwR,EAAS/6S,KAAKqzE,SAAS5mD,EAAMixR,IAChBtxJ,MACb4xJ,EAASh+S,KAAK2yO,SAASooE,GACvBoD,EAAW,IAAItD,GAASmD,EAAO,GAAI,QAASvjP,EAAMt+D,IAAI,GACtD6hT,EAAO31R,OAAO61R,EAAUtzR,EAAM,EAAIA,EAAK,EAAGuzR,GAC1C,IAAIX,EAAMx9S,KAAKi/G,aAAa7kG,SACxB2gS,EAAOt+S,OAAS+gT,EAAI/gT,SACpBmuB,EAAMszR,EAAUtzR,EAAM,EAAIA,EACf5qB,KAAK08S,SAASsB,EAAQ,WACjCptL,EAAK5wH,KAAK2wH,YAAYqtL,GAAQ5jS,SAASwQ,GACvC4yR,EAAIzC,EAAOt+S,QAAQyI,aAAa0rH,EAAI4sL,EAAIzC,EAAOt+S,QAAQ2d,SAASwQ,OAQ5EkwR,EAAYz/S,UAAUiX,QAAU,WAC5B,IAAIvS,EAAQC,KACR+R,EAAU/R,KAAKi/G,aACfltG,IACAo5E,EAAO9vF,UAAUiX,QAAQhR,KAAKtB,MAC9BA,KAAKw+G,eACDx+G,KAAKi7S,UACLj7S,KAAKi7S,UAAUv2S,MAAM4xC,QAAU,SAG/Bt2C,KAAKs7S,YACLt7S,KAAKgB,QAAQgB,UAAY,IACxB,MAAO,OAAQ,UAAW,WAAW5C,QAAQ,SAAU/B,GACpD0C,EAAMiB,QAAQ0D,MAAMqqS,eAAe1xS,MAEtC,OAAQ,WAAY,QAAS,SAAS+B,QAAQ,SAAU/B,IACZ,KAApC,QAAS,SAASkB,QAAQlB,IAAgB0C,EAAMiB,QAAQ6R,aAAaxV,IACtE0C,EAAMiB,QAAQ0K,gBAAgBrO,KAGtC0U,EAAQtR,WAAWyE,aAAalF,KAAKgB,QAAS+Q,IAElD1M,EAAO0M,KAGf84E,IACI3jF,EAAS,KACV4zS,EAAYz/S,UAAW,gBAAY,GACtCwvF,IACI3jF,EAAS,KACV4zS,EAAYz/S,UAAW,cAAU,GACpCwvF,IACI3jF,GAAS,IACV4zS,EAAYz/S,UAAW,uBAAmB,GAC7CwvF,IACIxiF,KAAewyS,KAChBC,EAAYz/S,UAAW,aAAS,GACnCwvF,IACI3jF,EAAS,KACV4zS,EAAYz/S,UAAW,cAAU,GACpCwvF,IACI3jF,GAAWgE,SAAU,IAAK0U,OAAQ,OAAQoY,OAAQ,eACnD8iR,EAAYz/S,UAAW,yBAAqB,GAC/CwvF,IACI/hF,KACDgyS,EAAYz/S,UAAW,wBAAoB,GAC9CwvF,IACI/hF,KACDgyS,EAAYz/S,UAAW,kBAAc,GACxCwvF,IACI/hF,KACDgyS,EAAYz/S,UAAW,cAAU,GACpCwvF,IACI/hF,KACDgyS,EAAYz/S,UAAW,mBAAe,GACzCwvF,IACI/hF,KACDgyS,EAAYz/S,UAAW,eAAW,GACrCwvF,IACI/hF,KACDgyS,EAAYz/S,UAAW,cAAU,GACpCy/S,EAAcjwN,IACVzhF,GACD0xS,IAELvvM,IC3jCEjhB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAS5Dw4Q,GAAa,eACbE,GAAc,YAGdpM,GAAW,SAGXyM,GAAa,WACbpP,GAAc,YACd6X,GAAa,WAIbC,GAAiB,eAIjBC,GAAW,aAGXC,GAAe,kBACfC,GAAc,iBAEdC,GAAe,kBAGfC,GAAe,aAGfC,GAAmC,SAAUxzN,GAE7C,SAASwzN,IACL,OAAkB,OAAXxzN,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbAsqF,GAAUq0N,EAAmBxzN,GAI7BN,IACI3jF,EAAS,gBACVy3S,EAAkBtjT,UAAW,cAAU,GAC1CwvF,IACI3jF,EAAS,MACVy3S,EAAkBtjT,UAAW,gBAAY,GAC5CwvF,IACI3jF,EAAS,SACVy3S,EAAkBtjT,UAAW,cAAU,GACnCsjT,GACT3/O,IAEE4/O,GAAsC,SAAUzzN,GAEhD,SAASyzN,IACL,OAAkB,OAAXzzN,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVAsqF,GAAUs0N,EAAsBzzN,GAIhCN,IACI9iF,GAAUiwB,OAAQ,cAAe9sB,SAAU,IAAK0U,OAAQ,QAAU++R,KACnEC,EAAqBvjT,UAAW,gBAAY,GAC/CwvF,IACI9iF,GAAUiwB,OAAQ,eAAgB9sB,SAAU,IAAK0U,OAAQ,QAAU++R,KACpEC,EAAqBvjT,UAAW,YAAQ,GACpCujT,GACT5/O,IAKE6/O,GAAwB,SAAU1zN,GAElC,SAAS0zN,IACL,OAAkB,OAAX1zN,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbAsqF,GAAUu0N,EAAQ1zN,GAIlBN,IACI3jF,EAAS,KACV23S,EAAOxjT,UAAW,YAAQ,GAC7BwvF,IACI3jF,EAAS,KACV23S,EAAOxjT,UAAW,eAAW,GAChCwvF,IACI3jF,EAAS,SACV23S,EAAOxjT,UAAW,oBAAgB,GAC9BwjT,GACT7/O,IAKE8/O,GAAyB,SAAU3zN,GAEnC,SAAS2zN,IACL,OAAkB,OAAX3zN,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAc/D,OAhBAsqF,GAAUw0N,EAAS3zN,GAInBN,IACI9iF,KAAY82S,KACbC,EAAQzjT,UAAW,cAAU,GAChCwvF,IACI3jF,EAAS,KACV43S,EAAQzjT,UAAW,eAAW,GACjCwvF,IACI3jF,EAAS,KACV43S,EAAQzjT,UAAW,gBAAY,GAClCwvF,IACI3jF,GAAS,IACV43S,EAAQzjT,UAAW,gBAAY,GAC3ByjT,GACT9/O,IAaE+/O,GAAqB,SAAU5zN,GAO/B,SAAS4zN,EAAI/rS,EAAShS,GAClB,IAAIjB,EAAQorF,EAAO7pF,KAAKtB,KAAMgT,EAAShS,IAAYhB,KAuBnD,OAtBAD,EAAMi/S,UAAY,EAClBj/S,EAAMkkH,MAASxsF,KAAM,YAAavsB,SAAU,KAC5CnL,EAAMwhF,MAAS9pD,KAAM,UAAWvsB,SAAU,KAC1CnL,EAAMs+L,kBACNt+L,EAAMk/S,QAAU,IAAI3mR,GAAUv4B,EAAMs+L,gBACpCt+L,EAAMwzD,UAAY,EAClBxzD,EAAMmgC,MAAQ,QAIdngC,EAAM62G,YACF9C,IAAK,MACLQ,KAAM,OACNz1F,IAAK,MACLk1F,MAAO,QACPl2E,MAAO,QACP+2E,OAAQ,SACR41F,SAAU,YACVC,UAAW,aACXF,OAAQ,UACRD,SAAU,aAEPvqM,EA+rCX,OA7tCAuqF,GAAUy0N,EAAK5zN,GAoCf4zN,EAAI1jT,UAAUiX,QAAU,WACpB,IAAIvS,EAAQC,KASZ,GARKyzE,EAAMzzE,KAAKk/S,QACZl/S,KAAKk/S,MAAM5sS,UAEftS,KAAKw+G,gBACJ,OAAQ,gBAAiB,wBAAyB,WAAY,oBAAoBp/G,QAAQ,SAAU6oB,GACjGloB,EAAMiB,QAAQ0K,gBAAgBuc,KAElCjoB,KAAKm/S,qBACAn/S,KAAKo/S,WAGL,CACD,IAAIC,EAAS55S,EAAO,aAAyB6vS,GAAat1S,KAAKgB,SAC/DhB,KAAKgB,QAAQ8C,UAAUS,OAjKhB,cAkKFkvE,EAAM4rO,KACPA,EAAOr9S,UAAYhC,KAAK4P,UAN5B5P,KAAKgB,QAAQgB,UAAY,GAS7BmpF,EAAO9vF,UAAUiX,QAAQhR,KAAKtB,MAC9BA,KAAKwmB,QAAQ,cAMjBu4R,EAAI1jT,UAAUoX,UAAY,WACtB,IAAI4jS,EAASxwS,EAAQ7F,KAAKgB,QAAS,IAAMs0S,IACzCt1S,KAAKs2S,UAAW,EAChBt2S,KAAKs/S,SAAU,EACft/S,KAAK+kH,YAAa,EAClB/kH,KAAKu/S,WAAY,EACjBv/S,KAAKm2S,eACA1iO,EAAM4iO,KACPA,EAAOhiS,cAAcvQ,UAAUM,IAxL5B,YAyLHpE,KAAKs2S,UAAW,GAEpB,IAAI7+Q,EAAOjsB,GAAQmb,KAAK8Q,KACpB+nR,EAAgB,SAAT/nR,EAAmB,OAAmB,SAATA,EAAmB,SAAqB,WAATA,EAAqB,WAAa,GACzG0qN,EAASniP,KAAKgB,SAAWgV,MAASzT,EAAWvC,KAAKgW,OAAQD,OAAUxT,EAAWvC,KAAK+V,UACpF/V,KAAKw1H,YAAYx1H,KAAKgB,QAAShB,KAAKiT,UAAU,GAC9CvP,EAAW1D,KAAKgB,SAAW4Q,KAAM,UAAWskH,gBAAiB,QAASsiB,wBAAyB,KAC/Fx4I,KAAKw1H,YAAYx1H,KAAKgB,QAASw+S,GAAK,IAMxCT,EAAI1jT,UAAU0wG,OAAS,WACnB/rG,KAAKy/S,kBACLz/S,KAAKukB,aACLvkB,KAAK+kH,YAAa,GAEtBg6L,EAAI1jT,UAAUokT,gBAAkB,WAC5B,IAAIz7S,EAAMhE,KAAKgB,QACf,GAAIhB,KAAKy6D,MAAMh+D,OAAS,GAA6B,IAAxBuH,EAAIoW,SAAS3d,OACtCuH,EAAIrC,YAAYslS,EAAS,OAAS5jS,UAAWiyS,MAC7Ct1S,KAAK0/S,eAAe1/S,KAAK2/S,gBAAiB1Y,EAAS,OAAS5jS,UAAW+xS,MACvEp1S,KAAKo/S,YAAa,OAEjB,GAAIp/S,KAAKgB,QAAQoZ,SAAS3d,OAAS,EAAG,CACvCuD,KAAKo/S,YAAa,EAClBp7S,EAAIF,UAAUM,IAjNP,cAkNP,IAAIwgF,EAAS5gF,EAAIrB,cAAc,IAAMyyS,IACjCxwN,GAAmC,WAAzB5kF,KAAK2/S,iBACf3/S,KAAK0/S,eAAe1/S,KAAK2/S,gBAAiB/6N,GAGlD,IAAKnR,EAAMhuE,EAAO,IAAM2vS,GAAYp1S,KAAKgB,YAAcyyE,EAAMhuE,EAAO,IAAM6vS,GAAat1S,KAAKgB,UAAW,CAOnG,GANAhB,KAAK4/S,eACL5/S,KAAKo0E,QAAU3uE,EAAO,IAAM2vS,GAAa,KAAOmJ,GAAcv+S,KAAKgB,SAC9DyyE,EAAMzzE,KAAKo0E,UACZzpE,EAAa3K,KAAKo0E,SAAW1uE,SAAU,gBAE3C1F,KAAK2sH,gBACD/mH,EAAU,IAAM44S,GAAax+S,KAAKgB,SAASvE,OAAS,EAAG,CACvDuD,KAAKo0E,QAAU3uE,EAAO,IAAM2vS,GAAa,KAAOmJ,GAAcv+S,KAAKgB,SACnEhB,KAAK6/S,QAAU5Y,EAAS,OAAS5jS,UAAWy8S,kCAC5C,IAAIC,EAASt6S,EAAO,qBAAsBzF,KAAKo0E,SAC1CX,EAAMssO,GAIP//S,KAAKo0E,QAAQlvE,aAAalF,KAAK6/S,QAAS7/S,KAAKo0E,QAAQx3D,YAHrDmjS,EAAO76S,aAAalF,KAAK6/S,QAASE,EAAOnjS,YAK7C5c,KAAKggT,kBAAiB,GACtBhgT,KAAKyF,OAAOzF,KAAK6hM,cAErB7hM,KAAKi1I,OAAOj1I,KAAKkT,aAGzB6rS,EAAI1jT,UAAUukT,aAAe,WACzB,IAAI7/S,EAAQC,KACRigT,KAGJ,GAFAjgT,KAAKu4S,OAAS9yS,EAAO,IAAM2vS,GAAYp1S,KAAKgB,SAC5ChB,KAAKkgT,OAASjZ,EAAS,QAAU5jS,UAAW88S,WAAkB9B,GAAgB56S,OAASy8B,MAAOlgC,KAAKkgC,SAAWp+B,UACzG9B,KAAKo/S,WAGL,CAGD,IAAK,IAFDtgS,EAAQ9e,KAAKu4S,OAAOn+R,SAAS3d,OAC7B2jT,KACKjkT,EAAI,EAAGA,EAAI2iB,EAAO3iB,IACvBikT,EAAS57S,KAAKxE,KAAKu4S,OAAOn+R,SAASyD,KAAK1hB,GAAG6F,WAE3C8c,EAAQ,IACR9e,KAAKu4S,OAAOv2S,UAAY,GACxBhC,KAAKu4S,OAAO52S,YAAYslS,EAAS,OAAS5jS,UAhQ1C,aAiQA+8S,EAAShhT,QAAQ,SAAUye,EAAM5L,GAC7B,IAAI61I,GACAzkJ,UAAW6lS,GAAU5lS,GAAI4lS,UAAiBj3R,EAC1CxO,OAASmO,KAAM,MAAOyuS,gBAAiB/K,GAAc,IAAMrjS,EAAOy1I,gBAAiB,UAGnF44J,EAAOrZ,EAAS,OAAS5jS,UAxP7B,cAwPuDrB,UAD7CilS,EAAS,QAAU5jS,UA1PlC,aA0PuDrB,UAAW6b,EAAMpa,OAASmO,KAAQ,kBAAoB9P,UAChC/B,EAAMmgT,SAAUp+S,UACpFgZ,EAAOmsR,EAAS,OAAS5jS,UAAWi7S,GAAUt8S,UAAWs+S,EAAM78S,OAASwlH,SAAU,QACtFxjH,EAAO,WAAiB1F,EAAMiB,SAASW,YAAYslS,EAAS,MAAOn/I,IACnEliJ,EAAU,UAAgB7F,EAAMiB,SAASiR,GAAOtQ,YAAYmZ,WApBpEmlS,EAAWjgT,KAAKugT,YAAYvgT,KAAKy6D,MAAO,GAwB5Cz6D,KAAKk/S,MAAQ,IAAIhV,IACbl0R,MAAO,OACPk1R,aAAclrS,KAAKkrS,aACnBzwO,MAA4B,IAApBwlP,EAASxjT,OAAgBwjT,KACjCO,QAASxgT,KAAKm/G,aAAa7jH,KAAK0E,QAEpCA,KAAKk/S,MAAM7oQ,SAASr2C,KAAKu4S,QACzB70S,EAAW1D,KAAKgB,SAAWssS,mBAAoB,eAC/CttS,KAAKygT,eAAezgT,KAAK0gT,iBACzB1gT,KAAKgH,eAAgB24S,gBAAkB3/S,KAAKgB,QAAQoZ,SAASyD,KAAK,GAAG/Z,UAAUK,SAASixS,IAAe,MAAQ,WAAY,IAE/H2J,EAAI1jT,UAAUsxH,cAAgB,WAC1B3sH,KAAKq/S,OAAS55S,EAAO,IAAM6vS,GAAat1S,KAAKgB,SAC7C,IAAI2/S,EAAU/6S,EAAU,IAAM44S,GAAax+S,KAAKgB,SAChD,GAAIhB,KAAKo/S,WAAY,CACjBp/S,KAAK4P,IAAO5P,KAAKq/S,OAAOjlS,SAAS3d,OAAS,EAAKuD,KAAKq/S,OAAOr9S,UAAY,GAEvE,IAAK,IADD0pO,EAAW1rO,KAAKq/S,OAAOjlS,SAClBje,EAAI,EAAGA,EAAIwkT,EAAQlkT,OAAQN,IAC5BuvO,EAASjvO,OAAS,GAAKN,IACvBuvO,EAAS7tN,KAAK1hB,GAAGkH,WAAa6lS,GAC9BxlS,EAAWgoO,EAAS7tN,KAAK1hB,IAAMyV,KAAQ,WAAYyqD,kBAAmB6sO,UAAiB/sS,IACvFuvO,EAAS7tN,KAAK1hB,GAAGmH,GAAKgyS,GAAc,IAAMn5S,KAK1D4iT,EAAI1jT,UAAUklT,YAAc,SAAU9lP,EAAOxoD,GACzC,IAAIlS,EAAQC,KACR4gT,EAAS,GACTC,EAAUj7S,EAAU,IAAM44S,GAAax+S,KAAKgB,SAASvE,OACrDqkT,KAuCJ,OAtCArmP,EAAMr7D,QAAQ,SAAUye,EAAM1hB,GAC1B,IAAI8Y,EAAOw+D,EAAM51D,EAAK+mE,OAAOy5B,cAAiB,GAAKxgG,EAAK+mE,OAAOy5B,aAC3DmhM,EAAO/rO,EAAM51D,EAAK+mE,OAAOlR,SAAY,GAAK71D,EAAK+mE,OAAOlR,QACtDqtO,EAAMljS,EAAK+mE,OAAOn4D,KAClBnpB,EAAmB,IAAZu9S,EAAiB1kT,GAAyB,IAApB4D,EAAMihT,UAAuB7kT,EAAI8V,EAAS4uS,EAAU1kT,EACjF+hH,EAAYrgG,EAAa,SAAI,uBAAwC,GACrEojS,EAAUF,aAAeziT,OAAUyiT,EAAIj/S,UAAYi/S,EACnDG,GAAaztO,EAAMwtO,IAAoB,KAAVA,EAC7BnM,EAAO,EAAa7N,EAAS,OAC7B5jS,UA1SD,aA0SsBrB,UAAWi/S,EAAOx9S,OAASmO,KAAQ,kBACzD9P,UAAY,GACX4zC,EAAOuxP,EAAS,QAChB5jS,UAAW88S,6BAAwDlrS,EAAM,IAAMuqS,IAChF19S,UACH,GAAa,KAARi/S,QAAsB5lT,IAAR4lT,GAA8B,KAARvB,EAAzC,CAKQoB,EADS,KAARG,QAAsB5lT,IAAR4lT,GAA8B,KAARvB,EACnB,SAARvqS,GAA0B,QAARA,EAAiBygC,EAAO,GAAKo/P,EAAOA,EAAO,GAAKp/P,EAG1D,KAAR8pQ,EAAc1K,EAAOp/P,EAGvC,IAAIyrQ,EAAatjS,EAAa,aAAWorG,SAAU,MAC/Cm4L,EAAQna,EAAS,OAAS5jS,UAxTtB,cAwTgDrB,UAAW4+S,EAAS,GAAK7gT,EAAMmgT,SAAUp+S,UAK7Fu/S,GAAUvrO,gBAFVxyE,GAAI4lS,UAAiB5lS,EAAIsO,KAAM,MAAO81I,gBAAiB,SAEpBz4I,SAJ5Bg4R,EAAS,OAAS5jS,UAAWi7S,GAAUt8S,UAAWo/S,EAAO39S,MAAO09S,IAIrBr/S,WACtDu/S,EAAMpuS,SAAW4K,EAAK5K,SAAW,IAAMirG,EAAW,KAAgB,KAARshM,EAAc,MAAQvqS,EAAM,IAAM,KAASisS,EAAuB,GApUzH,UAqUS,QAARjsS,GAAyB,WAARA,GACjBlV,EAAMiB,QAAQ8C,UAAUM,IAAI,mBAEhC08S,EAAOt8S,KAAK68S,MAETP,GAEX/B,EAAI1jT,UAAUimT,kBAAoB,SAAUh+S,GACxC,IAAIi+S,EAAY37S,EAAU,UAAYwvS,GAAa,KAAOoJ,GAAc,IAAM7I,GAAY31S,KAAKgB,SAAS,GAIxG,GAH6B,WAAzBhB,KAAK2/S,kBACL4B,EAAY37S,EAAU,UAAYwvS,GAAa,KAAOoJ,GAAc,IAAM7I,GAAY31S,KAAKgB,QAAQoZ,SAAS,IAAI,KAE/Gq5D,EAAM8tO,GAAY,CACnBA,EAAUz9S,UAAUS,OAAOoxS,IAC3B,IAAIpwM,EAAKvlG,KAAKwhT,SAASD,EAAUj+S,IACvBtD,KAAKyhT,QAAQh8S,EAAO,IAAM6vS,GAAat1S,KAAKgB,SAASoZ,SAAUk7R,GAAc,IAAM/vM,KAGrGw5M,EAAI1jT,UAAUqmT,mBAAqB,SAAU19S,GACzChE,KAAK2hT,MAAQl8S,EAAO,iBAAkBzF,KAAKgB,SAC3C,IAAI8uS,EAAUrqS,EAAO,aAAczF,KAAKgB,SACpC4gT,EAAWn8S,EAAO,IAAM84S,GAAcv+S,KAAKgB,SAO/C,OANKhB,KAAKkT,WAAe48R,EAAQ37R,WAAa27R,EAAQlrS,YAAeg9S,EAASztS,aACrEnU,KAAKkT,WAAa48R,EAAQ37R,WAAaytS,EAASh9S,eACrDZ,EAAIF,UAAUM,IAAIq6S,IAClBz+S,KAAK2hT,MAAMz8S,aAAalB,EAAIpC,WAAU,GAAOgE,EAAU,IAAM64S,GAAcz+S,KAAK2hT,OAAO,IACvF39S,EAAIlC,UAAY,KAEb,GAEXi9S,EAAI1jT,UAAUsuN,aAAe,SAAUxiN,GACnC,IAAI06S,EAAS16S,EAAOxE,cAAc,qBAC7B8wE,EAAMouO,KACPA,EAAO//S,UAAY,GACnBqF,EAAOxE,cAAc,IAAM27S,IAAUx6S,UAAUS,OAAO,aAE1DvE,KAAK8hT,OAASl8S,EAAU,IAAM24S,GAAe,KAAOC,GAAax+S,KAAKu4S,QACtE,IAAIzwK,EAAY9nI,KAAK8hT,OAAO9hT,KAAK8hT,OAAOrlT,OAAS,GACjD,GAA2B,IAAvBuD,KAAK8hT,OAAOrlT,OAAc,CAK1B,GAJA0K,EAAOrD,UAAUS,OAAOk6S,IACxBz+S,KAAKo0E,QAAQzyE,YAAYwF,EAAOvF,WAAU,IAC1C5B,KAAK+hT,SAAW56S,EAAO7D,GACvB6D,EAAOrF,UAAY,GACf9B,KAAK0hT,mBAAmB55K,GAAY,CACpC,IAAIk6K,EAAUhiT,KAAKo0E,QAAQ0zD,UAAU6+D,uBACrC3mM,KAAK0hT,mBAAmBM,GAE5BhiT,KAAKs/S,SAAU,EAEnB,OAAO15S,EAAU,IAAM44S,GAAax+S,KAAKo0E,SAAS33E,OAAS,GAE/DsiT,EAAI1jT,UAAUolT,eAAiB,SAAUx4R,GACrC,IAAIg6R,EAAMx8S,EAAO,IAAM2vS,GAAYp1S,KAAKgB,UAC/B,IAARinB,EAAgBg6R,EAAIn+S,UAAUM,IAxXlB,gBAwXwC69S,EAAIn+S,UAAUS,OAxXtD,gBAyXbvE,KAAKk/S,MAAM/Q,kBACXnuS,KAAKkiT,yBAETnD,EAAI1jT,UAAU8mT,iBAAmB,SAAUtgR,EAAMlhB,GAE9B3gB,KAAKkT,WAAalT,KAAKgB,QAAQ8C,UAAUK,SAtYlD,SAyZN,OAlBInE,KAAKs/S,SAAWz9Q,GAAQlhB,EACe,gBAAnC3gB,KAAK22C,UAAU4zF,SAASvyG,QACVP,KAAM,eAChBvsB,SAAUlL,KAAK22C,UAAU4zF,SAASr/H,SAAUmhF,eAAgBrsF,KAAK22C,UAAU4zF,SAAS3qH,QAG5E,KAImB,iBAA/B5f,KAAK22C,UAAUrO,KAAKtQ,QACNP,KAAM,gBAChBvsB,SAAUlL,KAAK22C,UAAUrO,KAAKp9B,SAAUmhF,eAAgBrsF,KAAK22C,UAAUrO,KAAK1oB,QAGpE,MAKxBm/R,EAAI1jT,UAAU+mT,qBAAuB,SAAUC,EAAQrD,GACnD,IAAIj/S,EAAQC,KACRsiT,EAAatiT,KAAKmiT,iBAAiBnD,EAAWh/S,KAAK6hM,cAClDpuH,EAAM6uO,GAmBPD,EAAOv+S,UAAUS,OAAOoxS,KAlBxB2M,EAAW7jS,MAAQ,WACf0jO,EAASkgE,GAAUnuS,SAAY,aAC/BmuS,EAAOv+S,UAAUM,IAAIs6S,IACrB2D,EAAOv+S,UAAUM,IAAI,WAEzBk+S,EAAWzjS,IAAM,WACbwjS,EAAO39S,MAAM4xC,QAAU,OACvB+rQ,EAAOv+S,UAAUS,OAAOoxS,IACxB0M,EAAOv+S,UAAUS,OAAOm6S,IACxB2D,EAAOv+S,UAAUS,OAAO,UACxB49O,EAASkgE,GAAU/rQ,QAAW,GAAIpiC,SAAY,KACb,IAA7BmuS,EAAOl9O,mBAA4BplE,EAAMq/S,YACzC/5S,EAAOg9S,IAGf,IAAI/pR,GAAUgqR,GAAY/pR,QAAQ8pR,KAM1CtD,EAAI1jT,UAAUknT,iBAAmB,SAAUj/S,EAAItG,GAC3C,IAGIqlT,EAHAtiT,EAAQC,KACRg/S,EAAYh/S,KAAKg/S,aACG39S,MAAMC,KAAKtB,KAAKgB,QAAQ2B,cAAc,IAAM2yS,IAAal7R,UAElEhb,QAAQ,SAAUye,GACzBA,EAAKva,KAAOvD,EAAMyiT,gBAClBH,EAASxkS,KAGjB,IAAImkS,EAAUhiT,KAAK8hT,OAAO9C,GACtBz5M,EAAKvlG,KAAKwhT,SAASxhT,KAAK8hT,OAAO9hT,KAAK6hM,cAAcv+L,IAClDm/S,EAASziT,KAAK0iT,cAAc1iT,KAAKq/S,OAAQ95M,GAC7C,GAAI9xB,EAAM4uO,KAAY5uO,EAAMuuO,GAAU,CAClC,IAAIW,EAAO3iT,KAAKwhT,SAASQ,EAAQ1+S,IACjC++S,EAASriT,KAAK0iT,cAAc1iT,KAAKq/S,OAAQsD,GAE7C,GAAI3iT,KAAK+kH,aAAwB,IAAV/nH,GAAmBgD,KAAK22C,gBAAoB88B,EAAMzzE,KAAK22C,WACtE0rQ,GAAUA,IAAWI,GACrBJ,EAAOv+S,UAAUS,OAAOoxS,QAFhC,CAMA,IACI2M,EADA1yS,EAAMnK,EAAO,IAAM6vS,GAAat1S,KAAKgB,SAEzC,GAAIhB,KAAKg/S,UAAYh/S,KAAK6hM,eAAiB7hM,KAAKs/S,QAAS,CACrD,IAAIsD,EAAU5iT,KAAK22C,UAAU4zF,SAASvyG,OACtCsqR,GACI7qR,KAAoB,SAAZmrR,EAAsB,GAAmB,gBAAZA,EAA6BA,EAAU,cAC5E13S,SAAUlL,KAAK22C,UAAU4zF,SAASr/H,SAClCmhF,eAAgBrsF,KAAK22C,UAAU4zF,SAAS3qH,aAG3C,GAAI5f,KAAKs/S,SAAWt/S,KAAKg/S,UAAYh/S,KAAK6hM,cAAgB7hM,KAAKg/S,YAAch/S,KAAK6hM,aAAc,CACjG,IAAIghH,EAAS7iT,KAAK22C,UAAUrO,KAAKtQ,OACjCsqR,GACI7qR,KAAmB,SAAXorR,EAAqB,GAAkB,iBAAXA,EAA6BA,EAAS,eAC1E33S,SAAUlL,KAAK22C,UAAUrO,KAAKp9B,SAC9BmhF,eAAgBrsF,KAAK22C,UAAUrO,KAAK1oB,QAG5C0iS,EAAW9pR,SAAW,WAClB5oB,EAAI9L,UAAUM,IAAIs6S,IAClB3+S,EAAM+iT,mBAEVR,EAAWzjS,IAAM,WACbjP,EAAI9L,UAAUS,OAAOm6S,IACrB+D,EAAO3+S,UAAUM,IAAIuxS,KAEpB31S,KAAK+kH,YACN/kH,KAAKoiT,qBAAqBC,EAAQrD,GAEtCh/S,KAAKwiT,cAAgBC,EAAOn/S,GAC5BtD,KAAKs/S,SAAU,EACS,KAApBgD,EAAW7qR,KACXgrR,EAAO3+S,UAAUM,IAAIuxS,IAGrB,IAAIr9Q,GAAUgqR,GAAY/pR,QAAQkqR,KAG1C1D,EAAI1jT,UAAU0nT,WAAa,SAAUd,GACjC,IAAIe,EAAYn9S,EAAQo8S,EAAK,IAAM7M,GAAa,KAAOoJ,IACnDyE,EAAWjjT,KAAKkjT,YAAYF,IAC3BvvO,EAAMzzE,KAAK0rS,SAAWuW,EAAIn+S,UAAUK,SAAS,aAC7CnE,KAAK0rS,OAAO5nS,UAAUK,SAned,gBAme0CnE,KAAKuqS,OAAOhpN,KAAKvhF,KAAKuhF,MAAQvhF,KAAKuqS,OAAOtmL,KAAKjkH,KAAKikH,MAElGg+L,EAAIn+S,UAAUK,SAAS,gBAC5B89S,EAAI57L,QAGC5yC,EAAMuvO,KAA2D,IAA7CA,EAAUl/S,UAAUK,SAASwxS,MAClD31S,KAAKyF,OAAOw9S,GACPxvO,EAAMzzE,KAAK0rS,SACZ1rS,KAAKuqS,OAAOhpN,KAAKvhF,KAAKuhF,QAKtCw9N,EAAI1jT,UAAU6nT,YAAc,SAAUrlS,GAClC,OAAOrf,MAAMnD,UAAUkD,QAAQ+C,KAAKsE,EAAU,IAAMwvS,GAAa,KAAOoJ,GAAax+S,KAAKgB,SAAU6c,IAExGkhS,EAAI1jT,UAAUmmT,SAAW,SAAUl+S,GAC/B,OAAOA,EAAGiM,QAAQ25R,UAAgB,KAEtC6V,EAAI1jT,UAAU8jT,mBAAqB,WAC/B,IAAIp/S,EAAQC,KACZA,KAAKm2S,YAAY/2S,QAAQ,SAAUg3S,GAC1B3iO,EAAM1zE,EAAMiB,QAAQ2B,cAAcyzS,MACnC51S,SAASuL,KAAKpK,YAAY5B,EAAMiB,QAAQ2B,cAAcyzS,IAAS1xS,MAAM4xC,QAAU,WAI3FyoQ,EAAI1jT,UAAU8nT,gBAAkB,SAAUn/S,EAAK4L,GAC3C,IAAIwzS,EAAUnc,EAAS,OACnBjtQ,EAAahrB,GAAQY,GACrByzS,EAAcrpR,KACby5C,EAAMz5C,IAAeqpR,EAAY5mT,OAAS,OACxC4E,MAAMC,KAAK+hT,GAAajkT,QAAQ,SAAU0G,GACzCs9S,EAAQzhT,YAAYmE,KAExB9B,EAAIrC,YAAYyhT,KAGxBrE,EAAI1jT,UAAUo5C,WAAa,SAAUzwC,EAAKiO,EAAO0uI,GAC7C,IAAIy1J,EACAxmS,EAAM5P,KAAKy6D,MAAMnjC,OAAOrlB,IAAQmoB,QACpC,GAAmB,iBAARxqB,GAAoB6jE,EAAM7jE,EAAI5N,WACrC,GAAe,MAAX4N,EAAI,IAAyB,MAAXA,EAAI,GACtB,GAAIpP,SAASgB,iBAAiBoO,GAAKnT,OAAQ,CACvC,IAAIo8S,EAASr4S,SAASmC,cAAciN,GACpCwmS,EAASyC,EAAO/2S,UAAUoO,OACT,UAAbywI,EACA38I,EAAIrC,YAAYk3S,EAAOj3S,WAAU,KAGjCoC,EAAIrC,YAAYk3S,GAChBA,EAAOn0S,MAAM4xC,QAAU,SAI3Bt2C,KAAKmjT,gBAAgBn/S,EAAK4L,QAI9B5P,KAAKmjT,gBAAgBn/S,EAAK4L,QAI9B5L,EAAIrC,YAAYiO,GAEf6jE,EAAM2iO,KAC2C,IAA9Cp2S,KAAKm2S,YAAY53S,QAAQqR,EAAI1C,aAC7BlN,KAAKm2S,YAAY3xS,KAAKoL,EAAI1C,aAItC6xS,EAAI1jT,UAAUqnT,cAAgB,SAAUrD,EAAQ95M,GAQ5C,OANIvlG,KAAKgB,QAAQ8C,UAAUK,SAnkBpB,YAokBGsB,EAAO,sCAAoE8/F,EAAIvlG,KAAKgB,SAGpFhB,KAAKyhT,QAAQpC,EAAOjlS,SAAUk7R,GAAc,IAAM/vM,IAIhEw5M,EAAI1jT,UAAUomT,QAAU,SAAUhnP,EAAOp9D,GAErC,IAAK,IADD2G,EACK7H,EAAI,EAAGA,EAAIs+D,EAAMh+D,OAAQN,IAC9B,GAAIs+D,EAAMt+D,GAAGmH,KAAOjG,EAAK,CACrB2G,EAAMy2D,EAAMt+D,GACZ,MAGR,OAAO6H,GAEX+6S,EAAI1jT,UAAUqkT,eAAiB,SAAU4D,EAAOt/S,GACjC,WAAVs/S,EAAsBtjT,KAAKgB,QAAQW,YAAYqC,GAAOhE,KAAKgB,QAAQkE,aAAalB,EAAKyB,EAAO,IAAM6vS,GAAat1S,KAAKgB,WAEzH+9S,EAAI1jT,UAAUm6H,YAAc,SAAUxxH,EAAK4pJ,EAAK3lI,GAC5C,GAAY,KAAR2lI,EAIJ,IAAK,IADD/qD,EAAO+qD,EAAI1wJ,MAAM,KACZf,EAAI,EAAGA,EAAI0mG,EAAKpmG,OAAQN,IACzB8rB,EACAjkB,EAAIF,UAAUM,IAAIy+F,EAAK1mG,IAGvB6H,EAAIF,UAAUS,OAAOs+F,EAAK1mG,KAItC4iT,EAAI1jT,UAAU2kT,iBAAmB,SAAU/3R,GACvC,IAAIwrD,EAAMzzE,KAAKq/S,QAAf,CAGA,IACI9G,EAAS9yS,EAAO,IAAM2vS,GAAYp1S,KAAKgB,SAC3C,GAA8B,SAA1BhB,KAAKujT,iBAA6B,CAClC,GAAoB,SAAhBvjT,KAAK+V,OACL,OAGAosO,EAASniP,KAAKq/S,QAAUtpS,OAAW/V,KAAKgB,QAAQ0wC,aAAe6mQ,EAAO7mQ,aAAgB,YAGzF,GAA8B,SAA1B1xC,KAAKujT,iBACVphE,EAASniP,KAAKgB,SAAW+U,OAAU,SACnCosO,EAASniP,KAAKq/S,QAAUtpS,OAAU,cAEjC,GAA8B,SAA1B/V,KAAKujT,iBAA6B,CACvC,IAAI3zS,EAAMhK,EAAU,uBAAuC5F,KAAKgB,SAChE,IAAwB,IAApBhB,KAAKo/S,WACL,IAAK,IAAIjjT,EAAI,EAAGA,EAAIyT,EAAInT,OAAQN,IAC5ByT,EAAIzT,GAAGqH,aAAa,QAAS,sCAC7BxD,KAAKuzD,UAAYlnD,KAAKC,IAAItM,KAAKuzD,UAAWvzD,KAAKqiP,UAAUzyO,EAAIzT,KAC7DyT,EAAIzT,GAAGuI,MAAMqqS,eAAe,WAC5Bn/R,EAAIzT,GAAGuI,MAAMqqS,eAAe,kBAG/B,CACD/uS,KAAKq/S,OAAS55S,EAAO,IAAM6vS,GAAat1S,KAAKgB,UACjC,IAARinB,GACAjoB,KAAKq/S,OAAO19S,YAAYslS,EAAS,OAC7B3jS,GAAKgyS,GAAc,KAAUjyS,UAAW6lS,UAAiByM,GACzDlyS,OAASmO,KAAQ,WAAYyqD,kBAAmB6sO,eAInD,IADDllS,EAAMhE,KAAKq/S,OAAOjlS,SAASyD,KAAK,GACpC,IAAS1hB,EAAI,EAAGA,EAAI6D,KAAKy6D,MAAMh+D,OAAQN,IACnC6D,KAAKy0C,WAAWzwC,EAAK7H,EAAG,SACxB6D,KAAKuzD,UAAYlnD,KAAKC,IAAItM,KAAKuzD,UAAWvzD,KAAKqiP,UAAUr+O,IACzDA,EAAIhC,UAAY,GAEpBhC,KAAKm2S,eACLn2S,KAAKy0C,WAAWzwC,EAAK,EAAG,UACxBA,EAAIF,UAAUS,OAAOoxS,IAEzBxzD,EAASniP,KAAKq/S,QAAUtpS,OAAU/V,KAAKuzD,UAAY,YAGnD4uL,EAASniP,KAAKq/S,QAAUtpS,OAAU,WAG1CgpS,EAAI1jT,UAAUgnP,UAAY,SAAUr+O,GAChC,IAAI+uQ,EAAKl3Q,OAAOsR,iBAAiBnJ,GACjC,OAAOA,EAAI0tC,aAAel2B,WAAWu3P,EAAG3lQ,iBAAiB,gBAAkBoO,WAAWu3P,EAAG3lQ,iBAAiB,mBACtGoO,WAAWu3P,EAAG3lQ,iBAAiB,eAAiBoO,WAAWu3P,EAAG3lQ,iBAAiB,mBAEvF2xS,EAAI1jT,UAAUynT,gBAAkB,WAC5B,IAAIb,EAAMx8S,EAAO,IAAM+4S,GAAc,IAAM7I,GAAY31S,KAAKgB,SAI5D,GAH6B,WAAzBhB,KAAK2/S,kBACLsC,EAAMx8S,EAAO,IAAM+4S,GAAc,IAAM7I,GAAY31S,KAAKgB,QAAQoZ,SAAS,KAEjE,OAAR6nS,EAAJ,CAGA,IAAIjnH,EAAOn1L,EAAQo8S,EAAK,UACxB,GAAIjiT,KAAKgB,UAAYg6L,EAArB,CAGA,IAAIwoH,EAAQ/9S,EAAO,IAAM2vS,GAAa,KAAOmJ,GAAe,sBAAuBv+S,KAAKgB,QAAQoZ,SAAS,IACzGpa,KAAKo0E,QAAU3uE,EAAO,IAAM2vS,GAAa,KAAOmJ,GAAcv+S,KAAKgB,SACnE,IAAI0/G,EAAMj7G,EAAO,IAAM2vS,GAAa,gBAAsBp1S,KAAKgB,SAClC,WAAzBhB,KAAK2/S,kBACL6D,EAAQ/9S,EAAO,IAAM2vS,GAAa,KAAOmJ,GAAe,sBAAuBv+S,KAAKgB,QAAQoZ,SAAS,KAEzG,IAAIqpS,EAAWhwO,EAAM+vO,GAAUxjT,KAAKo0E,QAAQxvE,YAAc4+S,EAAM5+S,YAE5Du9O,EAASzhI,EADG,IAAZ+iM,GACgBj3S,KAAQy1S,EAAI9tS,WAAa,KAAM1H,MAASg3S,GAAWxB,EAAI9tS,WAAa8tS,EAAIr9S,aAAe,OAGvF4H,KAAQ,OAAQC,MAAS,SAExCgnE,EAAMzzE,KAAK6/S,UACZ7/S,KAAK6/S,QAAQ/7S,UAAUS,OAAO65S,OAGtCW,EAAI1jT,UAAUqoT,UAAY,SAAU1mT,GAChCgD,KAAK8hT,OAASl8S,EAAU,IAAMwvS,GAAa,KAAOoJ,GAAax+S,KAAKgB,SACpE,IAAIihT,EAAMjiT,KAAK8hT,OAAO9kT,GAItB,GAHIA,GAAS,GACTgD,KAAKgH,eAAgB66L,aAAc7kM,IAAS,KAE5CA,EAAQ,GAAKglD,MAAMhlD,IAAiC,IAAvBgD,KAAK8hT,OAAOrlT,QAG7C,GAAIwlT,EAAIn+S,UAAUK,SAASwxS,IACvB31S,KAAK8iT,sBADT,CAIA,IAAK9iT,KAAKo/S,WAAY,CAClB,IAAIv9Q,EAAO7hC,KAAK8hT,OAAO9hT,KAAKg/S,WACvBvrO,EAAM5xC,IACPA,EAAKn2B,gBAAgB,iBAEzBhI,EAAWu+S,GAAO5B,gBAAiB/K,GAAc,IAAMt4S,IAE3D,IAAIsG,EAAK2+S,EAAI3+S,GACbtD,KAAKshT,kBAAkBh+S,GACvB2+S,EAAIn+S,UAAUM,IAAIuxS,IAClBsM,EAAIz+S,aAAa,gBAAiB,QAClC,IAAI+hG,EAAKjuE,OAAOt3B,KAAKwhT,SAASl+S,IAE9B,GADAI,EAAW1D,KAAKgB,SAAWw3I,wBAAyBl1I,IAChDtD,KAAKo/S,YACL,GAAI35S,EAAO,IAAM6vS,GAAat1S,KAAKgB,SAASoZ,SAAS3d,OAAS,EAAG,CAC7D,IAAIknT,EAAQ3jT,KAAKyhT,QAAQh8S,EAAO,IAAM6vS,GAAat1S,KAAKgB,SAASoZ,SAAUk7R,GAAc,IAAM/vM,GAC1F9xB,EAAMkwO,IACPA,EAAM7/S,UAAUM,IAAIuxS,IAExB31S,KAAKuiT,iBAAiBj/S,EAAItD,KAAKukS,sBAGlC,CACDvkS,KAAKq/S,OAAS55S,EAAO,aAAyB6vS,GAAat1S,KAAKgB,SAChE,IAAI6c,EAAO7d,KAAK0iT,cAAc1iT,KAAKq/S,OAAQr/S,KAAKwhT,SAASl+S,IACzD,GAAImwE,EAAM51D,GAAO,CACb7d,KAAKq/S,OAAO19S,YAAYslS,EAAS,OAC7B3jS,GAAIgyS,GAAc,IAAMt1S,KAAKwhT,SAASl+S,GAAKD,UAAW6lS,UAAiByM,GACvElyS,OAASmO,KAAM,WAAYyqD,kBAAmB6sO,UAAiBlpS,KAAKwhT,SAASl+S,OAEjF,IAAIsgT,EAAS5jT,KAAK0iT,cAAc1iT,KAAKq/S,OAAQr/S,KAAKwhT,SAASl+S,IAC3DtD,KAAKy0C,WAAWmvQ,EAAQtsR,OAAOt3B,KAAKwhT,SAASl+S,IAAM,eAGnDua,EAAK/Z,UAAUM,IAAIuxS,IAEvB31S,KAAKuiT,iBAAiBj/S,EAAItD,KAAKukS,iBAEnCvkS,KAAK8iT,kBACL,IAAIe,EAAap+S,EAAO,IAAM2vS,GAAa,KAAO9xS,EAAItD,KAAKgB,SAC3DhB,KAAK8jT,sBAAsBD,GAC3BA,EAAWjnS,WAAW1a,QACtB,IAAI6hT,GACAC,aAAchkT,KAAKikT,SACnBC,cAAelkT,KAAKg/S,UACpBn9G,aAAcogH,EACdvnP,cAAe19D,EACfmnT,SAAUnkT,KAAKu/S,WAEnBv/S,KAAKwmB,QAAQ,WAAYu9R,KAE7BhF,EAAI1jT,UAAU+oT,SAAW,SAAU3pP,GAC/Bz6D,KAAKghT,WAAY,EACjBhhT,KAAKo0E,QAAU3uE,EAAO,IAAM2vS,GAAa,KAAOmJ,GAAcv+S,KAAKgB,SACnEhB,KAAKk/S,MAAMzkP,MAAQz6D,KAAKugT,YAAY9lP,EAAO,GAC3Cz6D,KAAKk/S,MAAMtzP,WACX5rD,KAAKghT,WAAY,GAErBjC,EAAI1jT,UAAU45I,OAAS,SAAUj4I,GAC7BgD,KAAKk/S,MAAMhsS,UAAYlW,EACvBgD,KAAKk/S,MAAMtzP,WACX5rD,KAAKw1H,YAAYx1H,KAAKgB,QAlwBhB,QAkwBkChE,GACxCgD,KAAKqkT,uBAETtF,EAAI1jT,UAAUgpT,oBAAsB,WAC3B5wO,EAAMzzE,KAAK6/S,UACZ7/S,KAAK6/S,QAAQ/7S,UAAUM,IAAIg6S,IAE/Bp+S,KAAK8iT,mBAET/D,EAAI1jT,UAAUkpB,WAAa,WACvB1oB,OAAOa,iBAAiB,SAAUsD,KAAKkiT,sBAAsB5mT,KAAK0E,OAClEuF,GAAanB,IAAIpE,KAAKgB,QAAS,YAAahB,KAAKggM,aAAchgM,MAC/DuF,GAAanB,IAAIpE,KAAKgB,QAAS,UAAWhB,KAAKskT,aAActkT,MACxDyzE,EAAMzzE,KAAKq/S,UACZr/S,KAAK2vH,YAAc,IAAI9V,GAAM75G,KAAKq/S,QAAU79G,MAAOxhM,KAAKukT,aAAajpT,KAAK0E,SAE9EA,KAAK+qS,UAAY,IAAI30L,GAAep2G,KAAKgB,SAAWk2G,UAAWl3G,KAAKiqN,WAAW3uN,KAAK0E,MAAO42G,WAAY52G,KAAK42G,aAC5G52G,KAAKwkT,aAAe,IAAIpuM,GAAep2G,KAAKgB,SACxCk2G,UAAWl3G,KAAKiqN,WAAW3uN,KAAK0E,MAChC42G,YAAc+3G,UAAW,YAAa76G,IAAK,MAAO2mG,SAAU,aAC5D5qI,UAAW,aAGnBkvO,EAAI1jT,UAAUmjH,aAAe,WACzBx+G,KAAK+qS,UAAUz4R,UACftS,KAAKwkT,aAAalyS,UACbmhE,EAAMzzE,KAAKq/S,SACZr/S,KAAK2vH,YAAYr9G,UAErBzW,OAAOe,oBAAoB,SAAUoD,KAAKkiT,sBAAsB5mT,KAAK0E,OACrEA,KAAKgB,QAAQpE,oBAAoB,YAAaoD,KAAKggM,aAAa1kM,KAAK0E,QAEzE++S,EAAI1jT,UAAU8jH,aAAe,SAAUl/G,GACnCD,KAAKgB,QAAQ8C,UAAUS,OA/xBf,aAgyBR,IAAI09S,EAAMhiT,EAAKi7G,cAAc/zG,OACzB67S,EAAYn9S,EAAQo8S,EAAK,IAAMzD,IAC/ByE,EAAWjjT,KAAKkjT,YAAYF,GAC5Bf,EAAIn+S,UAAUK,SAASk6S,IACvBr+S,KAAKykT,UAAUxB,IAGfjjT,KAAKs/S,SAAU,EACV7rO,EAAMuvO,IAAcC,IAAajjT,KAAK6hM,cACvC7hM,KAAKyF,OAAOw9S,KAIxBlE,EAAI1jT,UAAUkpT,aAAe,SAAU1jT,GACnC,KAAIA,EAAEy6G,SAAW,GAAK7nC,EAAM5yE,EAAEq6G,cAAcv8C,iBAA5C,CAIA,GADA3+D,KAAKu/S,WAAY,EACQ,UAArB1+S,EAAEk7G,gBAAoD,IAAtB/7G,KAAK6hM,cACrC,IAAK,IAAI17K,EAAInmB,KAAK6hM,aAAe,EAAG17K,GAAK,EAAGA,IACxC,IAAKnmB,KAAK8hT,OAAO37R,GAAGriB,UAAUK,SAAS,YAAa,CAChDnE,KAAKyF,OAAO0gB,GACZ,YAIP,GAAyB,SAArBtlB,EAAEk7G,gBAA8B/7G,KAAK6hM,eAAiBj8L,EAAU,IAAM44S,GAAax+S,KAAKgB,SAASvE,OAAS,EAC/G,IAAK,IAAIN,EAAI6D,KAAK6hM,aAAe,EAAG1lM,EAAI6D,KAAK8hT,OAAOrlT,OAAQN,IACxD,IAAK6D,KAAK8hT,OAAO3lT,GAAG2H,UAAUK,SAAS,YAAa,CAChDnE,KAAKyF,OAAOtJ,GACZ,MAIZ6D,KAAKu/S,WAAY,IAErBR,EAAI1jT,UAAUipT,aAAe,SAAUzjT,GACnC,GAAmB,KAAdA,EAAEinB,SAA8B,KAAZjnB,EAAE81G,OAAgC,KAAd91G,EAAEinB,SAA8B,KAAZjnB,EAAE81G,MAAe,CAEzEljC,EADU5tE,EAAQhF,EAAEsG,OAAQ,IAAMiuS,MAEnCv0S,EAAE2kB,mBAIdu5R,EAAI1jT,UAAU4uN,WAAa,SAAUppN,GACjC,IAAIb,KAAKgB,QAAQ8C,UAAUK,SAASoiS,IAApC,CAGAvmS,KAAKgB,QAAQ8C,UAAUM,IAh1Bf,aAi1BR,IAAI69S,EAAMphT,EAAEsG,OACRu9S,EAASj/S,EAAO,IAAM2vS,GAAa,KAAOO,GAAY31S,KAAKgB,SACjD4E,EAAU,IAAM44S,GAAc,SAAWC,GAAe,IAAKz+S,KAAKgB,SAKhF,OAJAhB,KAAK0rS,OAASjmS,EAAO,iBAAkBzF,KAAKgB,SACvCyyE,EAAMzzE,KAAK0rS,UACZ1rS,KAAKuqS,OAASvqS,KAAK0rS,OAAOhkN,cAAc,IAEpC7mF,EAAEs1D,QACN,IAAK,QACL,IAAK,QACD,GAAI8rP,EAAI5tS,cAAcvQ,UAAUK,SAASoiS,IACrC,OAEJ,GAAiB,UAAb1lS,EAAEs1D,QAAsB8rP,EAAIn+S,UAAUK,SAAS,aAC/C,MAEJnE,KAAK+iT,WAAWd,GAChB,MACJ,IAAK,MACL,IAAK,WACGA,EAAIn+S,UAAUK,SAASm6S,MAC+C,IAAnEz4S,EAAQo8S,EAAK,IAAMzD,IAAa16S,UAAUK,SAASwxS,KACtDsM,EAAIz+S,aAAa,WAAY,MAE7BxD,KAAKuqS,QAAU9lS,EAAUzE,KAAKuqS,OAAOvpS,UACrChB,KAAKuqS,OAAOhpN,KAAKvhF,KAAKuhF,MAE1BmjO,EAAOtqS,SAASyD,KAAK,GAAGra,aAAa,WAAY,KACjD,MACJ,IAAK,WACL,IAAK,YACD,IAAIqa,EAAOhY,EAAQrF,SAASmlH,cAAe,IAAM64L,IAC5C/qO,EAAM51D,IACP7d,KAAK8jT,sBAAsBjmS,GAE/B,MACJ,IAAK,YACDhd,EAAE2kB,kBACGiuD,EAAMzzE,KAAK0rS,SAAW1rS,KAAK0rS,OAAO5nS,UAAUK,SAx2B3C,kBAy2BFnE,KAAKuqS,OAAOtmL,KAAKjkH,KAAKikH,MAE1B,MACJ,IAAK,SACD,IAAI++L,EAAYn9S,EAAQo8S,EAAK,IAAMzD,IACnC,IAA6B,IAAzBx+S,KAAK0gT,kBAA6BjtO,EAAMuvO,GAAY,CACpD,IAAI2B,EAAS3B,EAAUxwK,aAClB/+D,EAAMkxO,IAAWA,EAAO7gT,UAAUK,SAASq6S,KAC5CmG,EAAO/nS,WAAW1a,QAEtBlC,KAAKykT,UAAUzkT,KAAKkjT,YAAYF,IAEpChjT,KAAK8iT,qBAIjB/D,EAAI1jT,UAAU6mT,sBAAwB,WAClC,IAAItV,EAAYnnS,EAAO,IAAM+4S,GAAc,IAAMC,GAAe,IAAM9I,GAAY31S,KAAKgB,SAClFyyE,EAAMm5N,IACP5sS,KAAKyF,OAAOzF,KAAKkjT,YAAYtW,IAEjC5sS,KAAKqkT,uBAETtF,EAAI1jT,UAAUyoT,sBAAwB,SAAU38S,GAE5C,IAAKssE,EADQhuE,EAAO,qBAAsBzF,KAAKo0E,UAC/C,CACI,IAAIwwO,EAASn/S,EAAO,iBAAkBzF,KAAKo0E,SACvCywO,EAAWD,EAAO54S,WAClB84S,EAASD,EAAWD,EAAOhgT,YAC3BmgT,EAAW59S,EAAOgN,WAClB45R,EAAW5mS,EAAOvC,YAClBogT,EAAS79S,EAAOgN,WAAahN,EAAOvC,YACxC,GAAKigT,EAAWE,GAAcD,EAASE,EAAS,CAC5C,IAAIC,EAAeH,EAASC,EAC5BH,EAAO54S,WAAa64S,GAAY9W,EAAWkX,QAG3C,GAAKJ,EAAWE,GAAcD,EAASE,EAAS,CACxCC,EAAeD,EAASH,EAC5BD,EAAO54S,WAAa64S,GAAY9W,EAAWkX,MAQ3DlG,EAAI1jT,UAAU2kM,aAAe,SAAUn/L,GACnC,IAAIohT,EAAMphT,EAAEsG,QACPssE,EAAMwuO,EAAIn+S,YAAcm+S,EAAIn+S,UAAUK,SAASk6S,KAChD4D,EAAIz+S,aAAa,QAAS,IAAIg0G,GAAK,OAAS0tM,iBAAkBllT,KAAKkgC,OAASlgC,KAAKgO,QAAQ+lE,YAAY,sBAU7GgrO,EAAI1jT,UAAU8pT,UAAY,SAAUlzS,EAAOjV,GACvC,IAAIo3E,EAAUxuE,EAAU,IAAM44S,GAAax+S,KAAKgB,SAASiR,GACrDwhE,EAAMW,MAGI,IAAVp3E,GACAo3E,EAAQtwE,UAAUS,OAAOgiS,GAx6BnB,aAy6BNnyN,EAAQx3D,WAAWpZ,aAAa,WAAY,QAG5C4wE,EAAQtwE,UAAUM,IAAImiS,GA56BhB,aA66BNnyN,EAAQx3D,WAAWlR,gBAAgB,YAC/B0oE,EAAQtwE,UAAUK,SAASwxS,KAC3B31S,KAAKyF,OAAOwM,EAAQ,IAG5BmiE,EAAQ5wE,aAAa,iBAA4B,IAAVxG,EAAkB,QAAU,UAQvE+hT,EAAI1jT,UAAU+pT,OAAS,SAAU3qP,EAAOxoD,GACpC,IAAIlS,EAAQC,KAKZ,GAJAA,KAAKwmB,QAAQ,UAAY6+R,WAAY5qP,IACjCgZ,EAAMxhE,KACNA,EAAQrM,EAAU,IAAM44S,IAAa/hT,OAAS,MAE1B,IAApBuD,KAAKo/S,YAAuBx5S,EAAU,IAAM44S,IAAa/hT,OAASwV,GAASA,EAAQ,GAAK+vC,MAAM/vC,IAAlG,CAGAjS,KAAK6/S,QAAQ/7S,UAAUM,IAAIg6S,IAC3Bp+S,KAAKo0E,QAAU3uE,EAAO,IAAM2vS,GAAa,KAAOmJ,GAAcv+S,KAAKgB,SACnE,IAAIi/S,EAAWjgT,KAAKugT,YAAY9lP,EAAOxoD,GACvCwoD,EAAMr7D,QAAQ,SAAUye,EAAMylS,GAC1B,IAAwB,IAApBvjT,EAAMihT,UAAoB,CAE1B37S,EADcI,EAAO,IAAM84S,GAAe,KAAOrV,GAAW,IAAMj3R,EAAOlS,EAAMiB,UAE/EjB,EAAM06D,MAAMpyC,OAAQpW,EAAQqxS,EAAQ,EAAGzlS,QAGvC9d,EAAM06D,MAAMj2D,KAAKqZ,KAGzB7d,KAAKk/S,MAAM9L,SAAS6M,EAAUhuS,GAC9BjS,KAAKwmB,QAAQ,SAAW6+R,WAAY5qP,IAChCz6D,KAAK6hM,eAAiB5vL,EACtBjS,KAAKyF,OAAOwM,GAGZjS,KAAK8iT,oBAQb/D,EAAI1jT,UAAUopT,UAAY,SAAUxyS,GAChC,IAAIgwS,EAAMr8S,EAAU,IAAM44S,GAAax+S,KAAKgB,SAASiR,GACjDqzS,GAAiBC,YAAatD,EAAKuD,aAAcvzS,GAErD,GADAjS,KAAKwmB,QAAQ,WAAY8+R,IACrB7xO,EAAMwuO,GAAV,CAGAjiT,KAAKk/S,MAAMzL,YAAYxhS,GACvBjS,KAAKqkT,sBACL,IAAI9+M,EAAKvlG,KAAKwhT,SAASS,EAAI3+S,IACvBmiT,EAASzlT,KAAKyhT,QAAQh8S,EAAO,IAAM6vS,GAAat1S,KAAKgB,SAASoZ,SAAUk7R,GAAc,IAAM/vM,GAC3F9xB,EAAMgyO,KACPA,EAAO3jT,UAAY,IAEvB,IAAI4jT,GAAgBH,YAAatD,EAAKuD,aAAcvzS,GACpDjS,KAAKwmB,QAAQ,UAAWk/R,GACpBzD,EAAIn+S,UAAUK,SAASwxS,MACvB1jS,EAASA,EAAQrM,EAAU,IAAM44S,GAAc,SAAWC,GAAe,IAAKz+S,KAAKgB,SAASvE,OAAS,EAAKwV,EAAQ,EAAIA,EACtHjS,KAAKukS,iBAAkB,EACvBvkS,KAAK6hM,aAAe5vL,EACpBjS,KAAKyF,OAAOwM,IAE0C,IAAtDrM,EAAU,IAAM44S,GAAax+S,KAAKgB,SAASvE,SAC3CuD,KAAKu4S,OAAO7zS,MAAM4xC,QAAU,QAEhCt2C,KAAKukS,iBAAkB,IAQ3Bwa,EAAI1jT,UAAUsqT,QAAU,SAAU1zS,EAAOjV,GACrC,IAAI6gB,EAAOjY,EAAU,IAAM44S,GAAax+S,KAAKgB,SAASiR,GACtD,IAAIwhE,EAAM51D,GAAV,CAOA,GAJI41D,EAAMz2E,KACNA,GAAQ,GAEZgD,KAAK6/S,QAAQ/7S,UAAUM,IAAIg6S,KACb,IAAVphT,GAEA,GADA6gB,EAAK/Z,UAAUM,IAAIg6S,IACfvgS,EAAK/Z,UAAUK,SAASwxS,IACxB,GAAc,IAAV1jS,EACA,IAAK,IAAI9V,EAAI8V,EAAQ,EAAG9V,GAAK,EAAGA,IAAK,CACjC,IAAK6D,KAAK8hT,OAAO3lT,GAAG2H,UAAUK,SAAS,YAAa,CAChDnE,KAAKyF,OAAOtJ,GACZ,MAEC,GAAU,IAANA,EACL,IAAK,IAAIgqB,EAAIlU,EAAQ,EAAGkU,EAAInmB,KAAK8hT,OAAOrlT,OAAQ0pB,IAC5C,IAAKnmB,KAAK8hT,OAAO37R,GAAGriB,UAAUK,SAAS,YAAa,CAChDnE,KAAKyF,OAAO0gB,GACZ,YAOhB,IAASA,EAAIlU,EAAQ,EAAGkU,EAAInmB,KAAK8hT,OAAOrlT,OAAQ0pB,IAC5C,IAAKnmB,KAAK8hT,OAAO37R,GAAGriB,UAAUK,SAAS,YAAa,CAChDnE,KAAKyF,OAAO0gB,GACZ,YAOhBtI,EAAK/Z,UAAUS,OAAO65S,IAE1Bp+S,KAAK8iT,kBACLjlS,EAAKra,aAAa,cAAe,GAAKxG,KAO1C+hT,EAAI1jT,UAAUoK,OAAS,SAAUxF,GAC7BD,KAAKo0E,QAAU3uE,EAAO,IAAM2vS,GAAa,KAAOmJ,GAAcv+S,KAAKgB,SACnEhB,KAAK8hT,OAASl8S,EAAU,IAAMwvS,GAAa,KAAOoJ,GAAax+S,KAAKgB,SACpEhB,KAAKikT,SAAWjkT,KAAK8hT,OAAO9hT,KAAKg/S,WAC5BvrO,EAAMzzE,KAAKikT,WAAcjkT,KAAKikT,SAASngT,UAAUK,SAASoiS,KAC3DvmS,KAAKikT,SAAS7pS,SAASyD,KAAK,GAAGra,aAAa,WAAY,MAE5D,IAAIugT,GACAC,aAAchkT,KAAKikT,SACnBC,cAAelkT,KAAKg/S,UACpBn9G,aAAc7hM,KAAK8hT,OAAO9hT,KAAK6hM,cAC/BnnI,cAAe16D,KAAK6hM,aACpBsiH,SAAUnkT,KAAKu/S,WAGnB,GADAv/S,KAAKwmB,QAAQ,YAAau9R,IACtBA,EAASlrR,OAGb,GAAoB,iBAAT54B,EAAmB,CAC1B,IAAKwzE,EAAMzzE,KAAK8hT,OAAO7hT,KAAUD,KAAK8hT,OAAO7hT,GAAM6D,UAAUK,SAASoiS,IAClE,IAAK,IAAIpqS,EAAI8D,EAAO,EAAG9D,EAAI6D,KAAKy6D,MAAMh+D,OAAQN,IAAK,CAC/C,IAA+B,IAA3B6D,KAAKy6D,MAAMt+D,GAAG+hH,SAAoB,CAClCj+G,EAAO9D,EACP,MAGA8D,EAAO,EAInB,GAAID,KAAK8hT,OAAOrlT,OAASwD,GAAQA,GAAQ,IAAM+hD,MAAM/hD,GAAO,CACxD,GAAKD,KAAK8hT,OAAO9hT,KAAK6hM,cAAc/9L,UAAUK,SAAS,aAInD,IAAShI,EAAI6D,KAAK6hM,aAAc1lM,GAAK,EAAGA,IACpC,IAAK6D,KAAK8hT,OAAO3lT,GAAG2H,UAAUK,SAAS,YAAa,CAChDnE,KAAKg/S,UAAY7iT,EACjB,YANR6D,KAAKg/S,UAAYh/S,KAAK6hM,aAUtB7hM,KAAK8hT,OAAO7hT,GAAM6D,UAAUK,SAASs6S,IACrCz+S,KAAK0jT,UAAU1jT,KAAK2pN,aAAa3pN,KAAK8hT,OAAO7hT,KAG7CD,KAAK0jT,UAAUzjT,QAInBD,KAAK0jT,UAAU,QAGdzjT,0BACLD,KAAK0jT,UAAU1jT,KAAKkjT,YAAYjjT,KASxC8+S,EAAI1jT,UAAUmgM,QAAU,SAAUx+L,GAC9BgD,KAAKw1H,YAAYx1H,KAAKgB,QAASulS,GAAavpS,GAC5CgD,KAAKgB,QAAQwC,aAAa,gBAAiB,GAAKxG,IAMpD+hT,EAAI1jT,UAAUmxG,eAAiB,WAC3B,OAAOxsG,KAAKgtG,cAAc,eAAgB,cAO9C+xM,EAAI1jT,UAAUkkC,cAAgB,WAC1B,MAAO,OASXw/Q,EAAI1jT,UAAUmsF,kBAAoB,SAAUiF,EAASC,GACjD,IAAK,IAAItuF,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKmvF,GAAUruF,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAE9D,OADWyE,EAAGzE,IAEV,IAAK,QACD+jP,EAASniP,KAAKgB,SAAWgV,MAAOzT,EAAWkqF,EAAQz2E,SACnD,MACJ,IAAK,SACDmsO,EAASniP,KAAKgB,SAAW+U,OAAQxT,EAAWkqF,EAAQ12E,UACpD/V,KAAKggT,kBAAiB,GACtB,MACJ,IAAK,WACDhgT,KAAKw1H,YAAYx1H,KAAKgB,QAASyrF,EAAQx5E,UAAU,GACjD,MACJ,IAAK,QACD,GAAMw5E,EAAQhyB,iBAAiBj8D,OAASkuF,EAAQjyB,iBAAiBj8D,MAiDzDi1E,EAAMzzE,KAAKk/S,QACXl/S,KAAKy/S,kBACAhsO,EAAMzzE,KAAKq/S,UACZr/S,KAAK2vH,YAAc,IAAI9V,GAAM75G,KAAKq/S,QAAU79G,MAAOxhM,KAAKukT,aAAajpT,KAAK0E,WAI9EA,KAAKokT,SAAS33N,EAAQhyB,OAClBz6D,KAAKm2S,YAAY15S,OAAS,GAC1BuD,KAAKm/S,qBAETn/S,KAAKm2S,eACL1wS,EAAO,aAAyB6vS,GAAat1S,KAAKgB,SAASgB,UAAY,GACvEhC,KAAKyF,OAAOzF,KAAK6hM,oBA5DrB,IAAK,IADD04G,EAAcj8S,OAAOhB,KAAKmvF,EAAQhyB,OAC7Bt+D,EAAI,EAAGA,EAAIo+S,EAAY99S,OAAQN,IAAK,CACzC,IAAI8V,EAAQ8iB,SAASz2B,OAAOhB,KAAKmvF,EAAQhyB,OAAOt+D,GAAI,IAChD6vB,EAAW1tB,OAAOhB,KAAKmvF,EAAQhyB,MAAMxoD,IAAQ,GAC7C1K,EAASjJ,OAAOouF,EAAQjyB,MAAMxoD,IAAQ+Z,GACtCwuR,EAASl8S,OAAOmuF,EAAQhyB,MAAMxoD,IAAQ+Z,GACtC20R,EAAUl7S,EAAO,IAAM84S,GAAe,KAAOrV,GAAW,IAAMj3R,EAAOjS,KAAKgB,SAC1E4kT,EAAUngT,EAAO,yBAA+CwM,EAAOjS,KAAKgB,SAChF,GAAiB,WAAbgrB,EAAuB,CACvB,IAAIkd,KACJA,EAAI1kC,KAAKxE,KAAKy6D,MAAMxoD,IACpBjS,KAAKy6D,MAAMpyC,OAAOpW,EAAO,GACzBjS,KAAKk/S,MAAMzkP,MAAMpyC,OAAOpW,EAAO,GAC/BjS,KAAKghT,WAAY,EACjBhhT,KAAKolT,OAAOl8Q,EAAKj3B,GACjBjS,KAAKghT,WAAY,EAErB,GAAiB,YAAbh1R,IAA2BynD,EAAMmyO,GAAU,CAE3C,IAD+B,iBAAXpL,GAAuB/mO,EAAM+mO,EAAOx4S,cAC3B,MAAdw4S,EAAO,IAA4B,MAAdA,EAAO,KAAeA,EAAO/9S,OAAQ,CACrE,IAAIo8S,EAASr4S,SAASmC,cAAc63S,GACpCoL,EAAQjkT,YAAYk3S,GACpBA,EAAOn0S,MAAM4xC,QAAU,OAEP,KAAXkkQ,GAA+B,MAAdjzS,EAAO,IAC7B/G,SAASuL,KAAKpK,YAAY3B,KAAKgB,QAAQ2B,cAAc4E,IAAS7C,MAAM4xC,QAAU,OAC9EsvQ,EAAQ5jT,UAAYw4S,GAGpBoL,EAAQ5jT,UAAYw4S,EAGX,aAAbxuR,IACKynD,EAAMktO,KACPA,EAAQ78S,UAAUS,OAAOgD,GACzBo5S,EAAQ78S,UAAUM,IAAIo2S,IAErB/mO,EAAMmyO,KACPA,EAAQ9hT,UAAUS,OAAOgD,GACzBq+S,EAAQ9hT,UAAUM,IAAIo2S,KAGb,aAAbxuR,GACAhsB,KAAKmlT,UAAUlzS,GAAoB,IAAXuoS,GAqBpC,MACJ,IAAK,kBACDx6S,KAAKygT,eAAeh0N,EAAQi0N,iBAC5B,MACJ,IAAK,eACD1gT,KAAK6hM,aAAen1G,EAAQm1G,aAC5B7hM,KAAKyF,OAAOgnF,EAAQo1G,cACpB,MACJ,IAAK,kBACD,IAAIgkH,EAAapgT,EAAO,IAAM2vS,GAAYp1S,KAAKgB,SAC/ChB,KAAK0/S,eAAejzN,EAAQkzN,gBAAiBkG,GAC7C7lT,KAAKyF,OAAOzF,KAAK6hM,cACjB,MACJ,IAAK,YACD7hM,KAAKi1I,OAAOxoD,EAAQv5E,WACpB,MACJ,IAAK,eACDlT,KAAKk/S,MAAMhU,aAAez+M,EAAQy+M,aAClClrS,KAAKk/S,MAAMtzP,WACX5rD,KAAKkiT,wBACL,MACJ,IAAK,mBACDliT,KAAKggT,kBAAiB,GACtBhgT,KAAKyF,OAAOzF,KAAK6hM,iBAKjCh3G,IACIxiF,KAAey2S,KAChBC,EAAI1jT,UAAW,aAAS,GAC3BwvF,IACI3jF,EAAS,SACV63S,EAAI1jT,UAAW,aAAS,GAC3BwvF,IACI3jF,EAAS,SACV63S,EAAI1jT,UAAW,cAAU,GAC5BwvF,IACI3jF,EAAS,KACV63S,EAAI1jT,UAAW,gBAAY,GAC9BwvF,IACI3jF,EAAS,IACV63S,EAAI1jT,UAAW,oBAAgB,GAClCwvF,IACI3jF,EAAS,QACV63S,EAAI1jT,UAAW,uBAAmB,GACrCwvF,IACI3jF,EAAS,YACV63S,EAAI1jT,UAAW,wBAAoB,GACtCwvF,IACI3jF,EAAS,eACV63S,EAAI1jT,UAAW,oBAAgB,GAClCwvF,IACI3jF,GAAS,IACV63S,EAAI1jT,UAAW,iBAAa,GAC/BwvF,IACI3jF,GAAS,IACV63S,EAAI1jT,UAAW,yBAAqB,GACvCwvF,IACI3jF,GAAS,IACV63S,EAAI1jT,UAAW,uBAAmB,GACrCwvF,IACI9iF,KAAY62S,KACbG,EAAI1jT,UAAW,iBAAa,GAC/BwvF,IACI/hF,KACDi2S,EAAI1jT,UAAW,eAAW,GAC7BwvF,IACI/hF,KACDi2S,EAAI1jT,UAAW,cAAU,GAC5BwvF,IACI/hF,KACDi2S,EAAI1jT,UAAW,aAAS,GAC3BwvF,IACI/hF,KACDi2S,EAAI1jT,UAAW,iBAAa,GAC/BwvF,IACI/hF,KACDi2S,EAAI1jT,UAAW,gBAAY,GAC9BwvF,IACI/hF,KACDi2S,EAAI1jT,UAAW,gBAAY,GAC9BwvF,IACI/hF,KACDi2S,EAAI1jT,UAAW,eAAW,GAC7BwvF,IACI/hF,KACDi2S,EAAI1jT,UAAW,iBAAa,GAC/B0jT,EAAMl0N,IACFzhF,GACD21S,IAELxzM,ICx2CEjhB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAc5D2nF,GAAO,aAEPuhM,GAAc,qBACdC,GAAa,oBACbC,GAAW,cACXC,GAAW,cACXC,GAAa,gBACb9tG,GAAQ,UACRrE,GAAS,WACToyG,GAAO,kBACPC,GAAU,YACVp5L,GAAO,UACPq5L,GAAW,iBAGXC,GAAY,eAMZC,GAAU,YAEVC,GAAW,cAIXC,GAAU,YACV18G,GAAW,aACX28G,GAAW,aACXC,GAAgB,mBAKhBC,GAAQ,UAERC,GAAe,qBACfC,GAAgB,UAEhBjhG,GAAQ,eAIRkhG,IACAC,SAAU,OACVtuH,SAAU,WACVQ,SAAU,QACVF,SAAU,GACVD,YAAa,IAKbkuH,GAAgC,SAAU97N,GAE1C,SAAS87N,IACL,OAAkB,OAAX97N,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAkD/D,OApDAsqF,GAAU28N,EAAgB97N,GAI1BN,IACI3jF,EAAS,UACV+/S,EAAe5rT,UAAW,aAAS,GACtCwvF,IACI3jF,OACD+/S,EAAe5rT,UAAW,kBAAc,GAC3CwvF,IACI3jF,EAAS,aACV+/S,EAAe5rT,UAAW,gBAAY,GACzCwvF,IACI3jF,EAAS,gBACV+/S,EAAe5rT,UAAW,mBAAe,GAC5CwvF,IACI3jF,EAAS,mBACV+/S,EAAe5rT,UAAW,sBAAkB,GAC/CwvF,IACI3jF,EAAS,YACV+/S,EAAe5rT,UAAW,eAAW,GACxCwvF,IACI3jF,EAAS,OACV+/S,EAAe5rT,UAAW,UAAM,GACnCwvF,IACI3jF,EAAS,aACV+/S,EAAe5rT,UAAW,gBAAY,GACzCwvF,IACI3jF,EAAS,cACV+/S,EAAe5rT,UAAW,iBAAa,GAC1CwvF,IACI3jF,EAAS,aACV+/S,EAAe5rT,UAAW,gBAAY,GACzCwvF,IACI3jF,EAAS,OACV+/S,EAAe5rT,UAAW,aAAS,GACtCwvF,IACI3jF,EAAS,aACV+/S,EAAe5rT,UAAW,gBAAY,GACzCwvF,IACI3jF,EAAS,OACV+/S,EAAe5rT,UAAW,iBAAa,GAC1CwvF,IACI3jF,EAAS,SACV+/S,EAAe5rT,UAAW,YAAQ,GACrCwvF,IACI3jF,EAAS,YACV+/S,EAAe5rT,UAAW,eAAW,GACxCwvF,IACI3jF,EAAS,gBACV+/S,EAAe5rT,UAAW,mBAAe,GACrC4rT,GACTjoP,IAKEkoP,GAAgC,SAAU/7N,GAE1C,SAAS+7N,IACL,OAAkB,OAAX/7N,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbAsqF,GAAU48N,EAAgB/7N,GAI1BN,IACI3jF,EAAS,cACVggT,EAAe7rT,UAAW,cAAU,GACvCwvF,IACI3jF,EAAS,MACVggT,EAAe7rT,UAAW,gBAAY,GACzCwvF,IACI3jF,EAAS,WACVggT,EAAe7rT,UAAW,cAAU,GAChC6rT,GACTloP,IAKEmoP,GAAuC,SAAUh8N,GAEjD,SAASg8N,IACL,OAAkB,OAAXh8N,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVAsqF,GAAU68N,EAAuBh8N,GAIjCN,IACI9iF,GAAUiwB,OAAQ,UAAW9sB,SAAU,IAAK0U,OAAQ,UAAYsnS,KACjEC,EAAsB9rT,UAAW,gBAAY,GAChDwvF,IACI9iF,GAAUiwB,OAAQ,YAAa9sB,SAAU,IAAK0U,OAAQ,UAAYsnS,KACnEC,EAAsB9rT,UAAW,cAAU,GACvC8rT,GACTnoP,IAaEooP,GAA0B,SAAUj8N,GAEpC,SAASi8N,EAASp0S,EAAShS,GACvB,IAAIjB,EAAQorF,EAAO7pF,KAAKtB,KAAMgT,EAAShS,IAAYhB,KAEnD,OADAD,EAAMsnT,iBAAkB,EACjBtnT,EAm/EX,OAv/EAuqF,GAAU88N,EAAUj8N,GAMpBm8N,EAAaF,EAMbA,EAAS/rT,UAAUkkC,cAAgB,WAC/B,MAAO,YAKX6nR,EAAS/rT,UAAUoX,UAAY,WAC3B,IAAI1S,EAAQC,KACZA,KAAKunT,oBACLvnT,KAAKwnT,iBAAkB,EACvBxnT,KAAKkiB,WAAY,EACjBliB,KAAK42G,YACDzC,OAAQ,SACRt1F,IAAK,MACLk1F,MAAO,QACPe,GAAI,KACJR,KAAM,OACNg2F,SAAU,YACVE,SAAU,YACVC,UAAW,aACXF,OAAQ,UACRk9G,SAAU,iBACVC,OAAQ,eACRC,UAAW,aACXC,SAAU,YACVC,QAAS,WACTC,MAAO,SACPC,UAAW,kBACXC,QAAS,gBACTC,WAAY,cACZC,UAAW,aACXC,SAAU,YACVC,OAAQ,uBACRC,KAAM,qBACNC,QAAS,mBACTC,OAAQ,kBACRC,MAAO,iBACP3qR,MAAO,SAEX79B,KAAKs8L,gBACDjF,gBAAgB,EAChBxmE,UAAU,EACV2mE,gBAAiBuuH,GACjBxvH,eAAgBwwH,GAChBxvH,mBAAoB,OACpBnB,YAAa,SAAUv1L,GACnBd,EAAM0oT,iBAAiB5nT,KAG/Bb,KAAK0oT,eAAe1oT,KAAK4rB,QACzB5rB,KAAKi+L,OAAS,IAAI3lK,OAClBt4B,KAAK2oT,YACL3oT,KAAK4oT,UAAW,EAChB5oT,KAAK6oT,gBACDp1O,EAAMzzE,KAAKoyD,gBACXpyD,KAAKgH,eAAgBorD,mBAAqB,GAE1CqhB,EAAMzzE,KAAK8oT,eACX9oT,KAAKgH,eAAgB8hT,kBAAoB,IAQjD1B,EAAS/rT,UAAUmxG,eAAiB,WAEhC,OAAOxsG,KAAKgtG,cADK,gBAAiB,kBAOtCo6M,EAAS/rT,UAAU0wG,OAAS,WACxB/rG,KAAKkiB,WAAY,EACjBliB,KAAKmuG,aACLnuG,KAAK+oT,iBACL/oT,KAAKgpT,kBACLhpT,KAAKu3H,YACLv3H,KAAKipT,kBAAkBjpT,KAAK8gE,cAC5B9gE,KAAKkpT,eAAelpT,KAAKmpT,kBACzBnpT,KAAKukB,cAET6iS,EAAS/rT,UAAU8yG,WAAa,WAC5BnuG,KAAKgB,QAAQwC,aAAa,OAAQ,QAClCxD,KAAKgB,QAAQwC,aAAa,WAAY,KACtCxD,KAAKgB,QAAQwC,aAAa,wBAAyBxD,KAAKgB,QAAQsC,GAAK,WACrEtD,KAAKw1H,YAAY,KAAMx1H,KAAKiT,UAC5BjT,KAAKyhH,eACLzhH,KAAKopT,WAAWppT,KAAKqpT,eACrBrpT,KAAKspT,eAAiBtpT,KAAKi6B,iBAAiBj6B,KAAKupT,eAErDnC,EAAS/rT,UAAUomH,aAAe,WAC9BzhH,KAAKkT,UAAYvP,GAAU3D,KAAKgB,SAxP9B,SAwP+CqD,GAAarE,KAAKgB,SAxPjE,UA0PNomT,EAAS/rT,UAAUk8H,UAAY,WAC3B,IACIzsH,GACApF,SAFU,6BAGVqF,OAAQ,IAAMs7S,GAAW,OAASr5L,GAAO,8BAA2C65L,IAExF7mT,KAAK+xH,SAAWpnH,EAAa3K,KAAKgB,QAAS8J,GAC3C,IAAI0+S,GACA9jT,SAAU,IAAM2gT,GAAW,OAASr5L,GACpC/hH,gBAAgB,GAEpBjL,KAAKypT,aAAe9+S,EAAa3K,KAAKgB,QAASwoT,IAEnDpC,EAAS/rT,UAAU+tT,WAAa,SAAUhsH,GACtCA,EAAYz5L,GAAU3D,KAAKgB,SA/PjB,kBA+P0CqD,GAAarE,KAAKgB,SA/P5D,mBAiQdomT,EAAS/rT,UAAUquT,eAAiB,SAAUtsH,GAC1C,IAAIusH,EAAUlkT,EAAO,IAAMygT,GAAYlmT,KAAKgB,SACxCo8L,EACAusH,EAAQnmT,aAAa,uBAAwB,QAG7CmmT,EAAQj+S,gBAAgB,yBAGhC07S,EAAS/rT,UAAU4+B,iBAAmB,SAAUhrB,GAC5C,GAAIA,EACA,IAEI,GAAIzO,SAASgB,iBAAiByN,GAAUxS,OACpC,OAAOuS,GAAQxO,SAASmC,cAAcsM,GAAUjN,UAAUkO,QAGlE,MAAOrP,GACH,OAAOmO,GAAQC,KAK3Bm4S,EAAS/rT,UAAU0tT,eAAiB,WAChC,IAAIhpT,EAAQC,KACZA,KAAK2oT,SAASnkT,KAAK,SACfxE,KAAK4rB,OAAO23C,sBAAsBC,GAClCxjE,KAAK4rB,OAAO23C,WAAWmrF,aAAa1uJ,KAAK2iM,SAAS3iM,KAAK4rB,SAAS0nK,KAAK,SAAUzyL,GAC3Ed,EAAM4oT,SAASv8J,MACfrsJ,EAAM6pT,SAAW/oT,EAAE9B,OACnBgB,EAAM8pT,eAAiB9pT,EAAM+pT,UAC7B/pT,EAAMgqT,cACNhqT,EAAM8/E,aAAY,GACY,IAA1B9/E,EAAM4oT,SAASlsT,QAAiBsD,EAAM6oT,UACtC7oT,EAAMiqT,cAKdhqT,KAAK2oT,SAASv8J,MACV34E,EAAMzzE,KAAK4rB,OAAO23C,YAClBvjE,KAAKiqT,SAAWjqT,KAAK4pT,aAGrB5pT,KAAK4pT,SAAW5pT,KAAK4rB,OAAO23C,WAC5BvjE,KAAK+pT,eAET/pT,KAAK6/E,aAAY,IAEQ,IAAzB7/E,KAAK2oT,SAASlsT,QAAiBuD,KAAK4oT,UACpC5oT,KAAKgqT,YAGb5C,EAAS/rT,UAAUsnM,SAAW,SAAUr0L,EAAQtR,QAC9B,IAAVA,IAAoBA,EAAQ,MAChC,IACI0+D,EADAqC,KAEJ,GAAKzvD,EAAOotD,MAgBRA,EAAQptD,EAAOotD,MAAMr8D,YAhBN,CACfq8D,EAAQ,IAAI2H,GAEZ,IAAK,IADD/4D,EAAOtK,KAAK++D,oBAAoBzwD,GAC3BlQ,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKgN,GAAOlM,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC3D,IAAIqiE,EAAM59D,EAAGzE,GACD,eAARqiE,GAAgC,cAARA,GAA+B,UAARA,GAAqBnyD,EAAOmyD,KACtC,IAAlC1C,EAAQx/D,QAAQ+P,EAAOmyD,KAC1B1C,EAAQv5D,KAAK8J,EAAOmyD,IAG5B/E,EAAMj2D,OAAOs4D,GACTzzD,EAAK3D,eAAe,cACpB+0D,EAAM/2B,KAAKr2B,EAAOwgJ,WAU1B,OAJA9gB,GAAS2pD,WAAW33L,KAAK43L,UAAWtpL,EAAOme,KAAMivC,GAC5C+X,EAAMz2E,IAAWy2E,EAAMnlE,EAAO47S,WAC/BxuP,EAAMmI,MAAMv1D,EAAO47S,SAAU,QAAUlqT,KAAK6pT,eAAiBruS,WAAWxe,GAASA,GAE9E0+D,GAEX0rP,EAAS/rT,UAAUyuT,QAAU,WACzB,QAAO9pT,KAAK4pT,SAAS,IAA6D,iBAA/C/sT,EAASmD,KAAK4rB,OAAOtoB,GAAItD,KAAK4pT,SAAS,KAE9ExC,EAAS/rT,UAAU0uT,YAAc,WAE7B,GADA/pT,KAAKqkF,SAAWrkF,KAAKmqT,YAAYnqT,KAAK4pT,SAAU5pT,KAAK4rB,QAC/B,IAAlB5rB,KAAKqkF,SAAgB,CACrBrkF,KAAKoqT,YAAcpqT,KAAKqqT,eAAerqT,KAAK4pT,SAAU5pT,KAAK4rB,OAAOs+R,UAClE,IAAII,EAAYtqT,KAAKuqT,cAAcvqT,KAAK4pT,cAAUzuT,GAAW,GACzDs4E,EAAM62O,GACNtqT,KAAKiqT,YAGLjqT,KAAKiqT,SAAWK,OAIpBtqT,KAAKiqT,SAAWjqT,KAAK4pT,UAG7BxC,EAAS/rT,UAAUwkF,YAAc,SAAU2qO,GACvCxqT,KAAKs8L,eAAe/F,eAAepkC,MAAQ,EAC3CnyJ,KAAKi5L,UAAYjrD,GAASsrD,WAAWkxH,EAAWxqT,KAAKiqT,SAAWjqT,KAAKyqT,cAAczqT,KAAKiqT,UAAWjqT,KAAKs8L,gBACxGt8L,KAAKgB,QAAQW,YAAY3B,KAAKi5L,WAC9Bj5L,KAAK0qT,aAAa1qT,KAAKgB,UAE3BomT,EAAS/rT,UAAUotT,iBAAmB,SAAU5nT,GAC5C,GAAIb,KAAK42L,aAAc,CACnB,IAAI+zH,EAAc73S,IAAe,GAAQG,SAAUjT,KAAK4qT,aACpDl1Q,EAAOjwC,EAAO,cAAe5E,EAAEgd,MAC/Bva,EAAKzC,EAAEgd,KAAKhL,aAAa,YAC7BhS,EAAEgd,KAAKtM,WAAW,GAAGrM,aAAaylT,EAAa9pT,EAAEgd,KAAKtM,WAAW,GAAGA,WAAWkiE,EAAM/9B,GAAQ,EAAI,IACjG,IAAI8zK,EAAa3sN,EAASgE,EAAE+qB,OAAOutK,UAAWt4L,EAAE44F,SAC5Cz5F,KAAK8oT,aAAavqT,QAAQ+E,IAAO,GACjCmC,EAAO,WAAqBklT,GAAa7mT,UAAUM,IAAIwiT,IACvD+D,EAAYnnT,aAAa,eAAgB,QACzCxD,KAAK6qT,SAAShqT,EAAEgd,OAEV41D,EAAM+1I,IAAyC,SAA1BA,EAAWt8M,WAMtCy9S,EAAYnnT,aAAa,eAAgB,UALzCiC,EAAO,WAAqBklT,GAAa7mT,UAAUM,IAAIwiT,IACvD+D,EAAYnnT,aAAa,eAAgB,QACzCxD,KAAK6qT,SAAShqT,EAAEgd,OAKpB,IAAIitS,EAAQrlT,EAAO,WAAqBklT,GACxCplT,GAAanB,IAAI0mT,EAAO,YAAa9qT,KAAK+qT,kBAAmB/qT,MAC7DuF,GAAanB,IAAI0mT,EAAO,UAAW9qT,KAAK+qT,kBAAmB/qT,MAE3DA,KAAKqpT,eACLrpT,KAAKgrT,cAAcnqT,EAAEgd,MAErB7d,KAAKirT,sBAAwBpqT,EAAEgd,KAAK/Z,UAAUK,SAAS4lM,KACvDlpM,EAAEgd,KAAKra,aAAa,gBAAiB,SAEzC,IAAIooB,EAAS/qB,EAAE+qB,OAGf,GAFA5rB,KAAKkrT,eAAerqT,EAAG+qB,EAAO4jH,SAAUu6D,IACxC/pM,KAAKkrT,eAAerqT,EAAG+qB,EAAOupK,SAAUuxH,KACnCjzO,EAAMzzE,KAAKspT,gBAAiB,CAC7B,IAAI9rH,EAAU38L,EAAEgd,KAAKlb,cAAc,IAAMsjT,IACzCzoH,EAAQx7L,UAAY,GACpBoD,EAAOpF,KAAKspT,eAAezoT,EAAE44F,SAAU+jG,GAE3C,IAAIjwL,GACAhN,KAAMM,EAAEgd,KACRstS,SAAUtqT,EAAE44F,QACZhtE,KAAM5rB,EAAE4rB,MAEZzsB,KAAKwmB,QAAQ,WAAYjZ,IAE7B65S,EAAS/rT,UAAU0vT,kBAAoB,SAAUlqT,GAE7C0S,GAAmB1S,EADF4E,EAAO,sBAAsB5E,EAAEsG,OAAOkN,iBAG3D+yS,EAAS/rT,UAAU6vT,eAAiB,SAAUrqT,EAAGs1D,EAAQljD,GACrD,IACIm4S,EAAcvuT,EAASs5D,EADhBt1D,EAAE44F,SAERhmB,EAAM23O,IAA2C,UAA3BA,EAAYl+S,YACnCrM,EAAEgd,KAAK/Z,UAAUM,IAAI6O,IAG7Bm0S,EAAS/rT,UAAU8uT,YAAc,SAAU32J,EAAIllJ,GAC3C,GAAItO,KAAK4rB,OAAO23C,sBAAsBC,GAAa,CAC/C,IAAK,IAAIrnE,EAAI,EAAGA,EAAIq3J,EAAG/2J,OAAQN,IAC3B,GAA6B,iBAAjBmS,EAAOjO,OAAuBozE,EAAM52E,EAASyR,EAAOjO,MAAOmzJ,EAAGr3J,KACtE,OAAO,EAGf,OAAO,EAEFA,EAAI,EAAb,IAAK,IAAW0F,EAAM2xJ,EAAG/2J,OAAQN,EAAI0F,EAAK1F,IAAK,CAC3C,GAA6B,iBAAjBmS,EAAOjO,QAAwBozE,EAAM52E,EAASyR,EAAOjO,MAAOmzJ,EAAGr3J,KACvE,OAAO,EAEX,IAAKs3E,EAAM52E,EAASyR,EAAO47S,SAAU12J,EAAGr3J,OAASs3E,EAAM52E,EAASyR,EAAO2oL,YAAazjC,EAAGr3J,KACnF,OAAO,EAGf,OAAO,GAEXirT,EAAS/rT,UAAUgvT,eAAiB,SAAU9mP,EAAY61H,GAItD,IAAK,IAHDS,GAAW,IAAIx2H,IAAQ0vB,MAAMqmG,GAC7B5lC,EAAKxlB,GAAS6pD,cAAct0H,EAAYs2H,GACxCE,KACKx2K,EAAI,EAAGA,EAAIiwI,EAAG/2J,OAAQ8mB,IAAK,CAChC,IAAIu2K,EAAUtmC,EAAGjwI,GAAGk3C,MACpBs/H,EAAQv1L,KAAKs1L,GAEjB,OAAOC,GAEXqtH,EAAS/rT,UAAUovT,cAAgB,SAAU5nN,GAIzC,OAHIA,GAA2B,SAAnB7iG,KAAK43L,YACb/0F,EAAOmrC,GAAS6pD,cAAch1F,EAAMmrC,GAAS2pD,WAAW33L,KAAK43L,UAAW53L,KAAK4rB,OAAOa,QAEjFo2E,GAEXukN,EAAS/rT,UAAUqvT,aAAe,SAAU1pT,GAExC,IAAK,IADDqqT,EAASzlT,EAAU,cAAa5E,GAC3BmlB,EAAI,EAAGA,EAAIklS,EAAO5uT,OAAQ0pB,IAC/BklS,EAAOllS,GAAG3iB,aAAa,MA1bvB,cA4bJ,GAAIxD,KAAK4oT,SAAU,CAEf,IAAK,IADD0C,EAAS1lT,EAAU,IAAMmkM,GAAU/oM,GAC9B7E,EAAI,EAAGA,EAAImvT,EAAO7uT,OAAQN,IAAK,CACpC6D,KAAKurT,WAAWD,EAAOnvT,GAAI,MAC3B,MAEJkI,EAAYinT,EAAQvhH,IAGxB,IAAK,IADDyhH,EAAS5lT,EAAU,IAAMogT,GAAW,SAAWU,GAAW,IAAK1lT,GAC1DuiB,EAAI,EAAGA,EAAIioS,EAAO/uT,OAAQ8mB,IAAK,CACpC,IAAImyB,EAAOjwC,EAAO,cAAe+lT,EAAOjoS,IACpCmyB,GAAQA,EAAK5xC,UAAUK,SAAS4hT,MAChCyF,EAAOjoS,GAAG/f,aAAa,gBAAiB,SACxCG,GAAU6nT,EAAOjoS,IAAKojS,KAIzB,IADD8E,EAAS7lT,EAAU,IAAM8gT,GAAU1lT,GACvC,IAAS7E,EAAI,EAAGA,EAAIsvT,EAAOhvT,OAAQN,IAC/B6D,KAAK0rT,iBAAiBD,EAAOtvT,IAEjCkI,EAAYonT,EAAQ/E,IACpB1mT,KAAK2rT,aACD3rT,KAAK4oT,UACL5oT,KAAK4rT,qBAGbxE,EAAS/rT,UAAUuwT,kBAAoB,WACnC,IAAI7rT,EAAQC,KACZ,GAAIA,KAAK42L,aAAc,CACnB,IAAIi1H,KAAatxS,UAAWva,KAAK8oT,cACjC9oT,KAAK8oT,aAAa1pT,QAAQ,SAAUpC,EAAOiV,GAEnCwhE,EADW1zE,EAAMiB,QAAQ2B,cAAc,cAAgB3F,EAAQ,SAE/D6uT,EAAUA,EAAQ7kR,OAAO,SAAUnmC,GAAK,OAAOA,IAAM7D,OAG7DgD,KAAKgH,eAAgB8hT,aAAc+C,IAAW,KAGtDzE,EAAS/rT,UAAUywT,uBAAyB,SAAU9qT,GAClD,IAAKyyE,EAAMzyE,GAAU,CACjB,GAAIA,EAAQ8C,UAAUK,SAASogH,IAC3B,OAEJ,IAAI00E,EAAYj4L,EACZA,EAAQ8C,UAAUK,SAAS6hT,MAC3B/sH,EAAYxzL,EAAO,IAAMygT,GAAYllT,IAEzC,IAAI8nT,EAAeljT,EAAU,WAAaqzL,GACtCnnI,EAAQlsD,EAAU,IAAMogT,GAAU/sH,GAClC8yH,EAAc/qT,EAAQ0M,uBAAuBm5S,IAAc,GAC3D/0P,EAAMr1D,SAAWqsT,EAAarsT,OAC9BuD,KAAK++G,YAAYgtM,EAAa,QAAS,MAAM,GAAM,GAE9CjD,EAAarsT,OAAS,EAC3BuD,KAAK++G,YAAYgtM,EAAa,gBAAiB,MAAM,GAAM,GAE9B,IAAxBjD,EAAarsT,QAClBuD,KAAK++G,YAAYgtM,EAAa,UAAW,MAAM,GAAM,GAEzD,IAAIC,EAAWnmT,EAAQ7E,EAAS,IAAMklT,IACtC,IAAKzyO,EAAMu4O,GAAW,CAClB,IAAIC,EAAgBpmT,EAAQmmT,EAAU,IAAMhG,IAC5ChmT,KAAK8rT,uBAAuBG,MAIxC7E,EAAS/rT,UAAU6wT,sBAAwB,SAAUlrT,EAASH,GAC1D,IAAK4yE,EAAMzyE,GAAU,CACjB,IAAIm5B,EAAe10B,EAAO,IAAMygT,GAAYllT,GACxCmrT,OAAa,EACjB,IAAK14O,EAAMt5C,GAAe,CACtBgyR,EAAavmT,EAAU,IAAMihT,GAAc1sR,GAG3C,IAAK,IAFDg/J,EAAYn4L,EAAQ0M,uBAAuBo5S,IAAe,GAAGhjT,UAAUK,SAASyiT,IAChFwF,OAAe,EACVn6S,EAAQ,EAAGA,EAAQk6S,EAAW1vT,OAAQwV,IAAS,CACpD,GAAKwhE,EAAMzzE,KAAKqsT,kBAAqB54O,EAAM52E,EAASmD,KAAK4rB,OAAOutK,UAAWn5L,KAAKqsT,gBAAgBp6S,KAG3F,CACD,IAAIq6S,EAAgBH,EAAWl6S,GAAOvE,uBAAuBo5S,IAAe,GAAGhjT,UAAUK,SAASyiT,IAClGwF,GAAiBpsT,KAAK4oT,UAAY0D,EAAiB,QAAWnzH,EAAY,QAAU,eAJpFizH,EAAevvT,EAASmD,KAAK4rB,OAAOutK,UAAWn5L,KAAKqsT,gBAAgBp6S,IAAU,QAAU,UAM5FjS,KAAK++G,YAAYotM,EAAWl6S,GAAQm6S,EAAcvrT,GAAG,GAAM,OAK3EumT,EAAS/rT,UAAUkxT,iBAAmB,SAAUz6P,EAAO06P,GACnD,GAAK/4O,EAAM3hB,GAYP,IAAK,IADDq6P,EAAavmT,EAAU,IAAMihT,GAAc7mT,KAAKgB,SAC3CiR,EAAQ,EAAGA,EAAQk6S,EAAW1vT,OAAQwV,IAC3CjS,KAAK++G,YAAYotM,EAAWl6S,GAAQu6S,EAAU,QAAU,gBAZ5D,IAAK,IAAIrwT,EAAI,EAAG0F,EAAMiwD,EAAMr1D,OAAQN,EAAI0F,EAAK1F,IAAK,CAC9C,IAAIswT,EAAQzsT,KAAKutB,WAAWukC,EAAM31D,IAClC,IAAIs3E,EAAMg5O,GAAV,CAGA,IAAIC,EAAWjnT,EAAO,IAAMygT,GAAa,KAAOW,GAAc4F,GAC9DzsT,KAAK2sT,kBAAkBD,GAAWF,EAASC,EAAO,SAU9DrF,EAAS/rT,UAAU0jH,YAAc,SAAUhtG,EAASu8B,EAAOztC,EAAG+rT,EAAWC,GACrE,IAAI7tM,EACAzxG,EACAu/S,EAASjnT,EAAQkM,EAAS,IAAMi0S,IACpC,GAAK4G,IACD5sT,KAAKunT,oBACLh6S,EAAYvN,KAAK+sT,cAAcD,EAAQx+Q,EAAOztC,GAC9Cb,KAAKwmB,QAAQ,eAAgBjZ,IACzBA,EAAUsrB,QAJlB,CAQA,IAAIzlB,EAAYrB,EAAQrE,uBAAuBo5S,IAAe,GAsB9D,GArBc,UAAVx4Q,GAAsBl7B,EAAUtP,UAAUK,SAASyiT,IAMpC,YAAVt4Q,IAAwBl7B,EAAUtP,UAAUK,SAASyiT,KAAUxzS,EAAUtP,UAAUK,SA9jBhF,YA+jBRE,GAAa+O,IAAawzS,GA/jBlB,WAgkBR5mT,KAAKgtT,YAAYF,GACjB9tM,EAAY,SAEG,kBAAV1wE,GAA8Bl7B,EAAUtP,UAAUK,SAnkB/C,YAokBRiP,EAAUtP,UAAUS,OAAOqiT,IAC3BxzS,EAAUtP,UAAUM,IArkBZ,UAskBRpE,KAAKgtT,YAAYF,GACjB9tM,EAAY,UAdZ5rG,EAAUtP,UAAUS,OAzjBZ,UA0jBR6O,EAAUtP,UAAUM,IAAIwiT,IACxB5mT,KAAK6qT,SAASiC,GACd9tM,EAAY,QAahBA,EAAsB,UAAV1wE,EAAoB,OAAmB,YAAVA,EAAsB,QAAU0wE,EACpEvrC,EAAMurC,IACPjtG,EAAQvO,aAAa,eAAgBw7G,GAErC6tM,EAAO,CACP,IAAIrwT,KAAU+d,UAAWva,KAAKunT,kBAC9Bh6S,EAAYvN,KAAK+sT,cAAcD,EAAQx+Q,EAAOztC,GAC1C1D,EAAYyvT,KACZr/S,EAAU/Q,KAAOA,GAGpBowT,GACIn5O,EAAMurC,KACPjtG,EAAQvO,aAAa,eAAgBw7G,GACrCzxG,EAAU/Q,KAAK,GAAGgW,QAAUwsG,EAC5Bh/G,KAAKwmB,QAAQ,cAAejZ,GAC5BvN,KAAKunT,uBAIjBH,EAAS/rT,UAAUwvT,SAAW,SAAU4B,GACpC,IAAInpT,EAAKmpT,EAAM55S,aAAa,YACvB4gE,EAAMnwE,KAA0C,IAAnCtD,KAAK8oT,aAAavqT,QAAQ+E,IACxCtD,KAAK8oT,aAAatkT,KAAKlB,IAG/B8jT,EAAS/rT,UAAU2xT,YAAc,SAAUP,GACvC,IAAIx6S,EAAQjS,KAAK8oT,aAAavqT,QAAQkuT,EAAM55S,aAAa,aACrDZ,GAAS,GACTjS,KAAK8oT,aAAazgS,OAAOpW,EAAO,IAGxCm1S,EAAS/rT,UAAU0xT,cAAgB,SAAUD,EAAQ32P,EAAQt1D,GACzDb,KAAKunT,iBAAiB/iT,KAAKxE,KAAKitT,YAAYH,IAC5C,IAAI3B,EAAWnrT,KAAKunT,iBACpB,OAASpxP,OAAQA,EAAQt9B,QAAQ,EAAOipK,cAAcruH,EAAM5yE,GAAmBN,KAAMusT,EAAQtwT,KAAM2uT,IAEvG/D,EAAS/rT,UAAU2uT,SAAW,WACZvkT,EAAO,IAAMygT,GAAYlmT,KAAKgB,SACpCwC,aAAa,OAAQujT,GAAaC,UAC1ChnT,KAAK0pT,eAAe1pT,KAAKirT,qBACzB,IAAIiC,EAAYznT,EAAO,IAAMugT,GAAUhmT,KAAKgB,SACxCksT,IACAvpT,GAAUupT,GAAYrnG,IACtB7lN,KAAKmtT,aAAa,KAAMD,IAE5BltT,KAAKotT,oBACLptT,KAAK4rT,oBACL5rT,KAAK4oT,UAAW,EAChB5oT,KAAKkiB,WAAY,EACjB,IAAI3U,GAAc/Q,KAAMwD,KAAK4pT,UAC7B5pT,KAAKwmB,QAAQ,YAAajZ,IAE9B65S,EAAS/rT,UAAU+xT,kBAAoB,WACnC,IAAI9B,EAAS1lT,EAAU,IAAMmkM,GAAU/pM,KAAKgB,SACxCqsT,EAAQrtT,KAAKoyD,cACjB,GAAIi7P,EAAM5wT,OAAS,EAAG,CAClBuD,KAAKgH,eAAgBorD,mBAAqB,GAC1C,IAAK,IAAIj2D,EAAI,EAAGA,EAAIkxT,EAAM5wT,OAAQN,IAAK,CACnC,IAAImxT,EAAQ7nT,EAAO,cAAgB4nT,EAAMlxT,GAAK,KAAM6D,KAAKgB,SAEzD,GADAhB,KAAKurT,WAAW+B,EAAO,MAAM,IACxBttT,KAAKirT,oBACN,YAKRjrT,KAAKutT,iBAAiBjC,GAE1BjnT,EAAYinT,EAAQvhH,KAExBq9G,EAAS/rT,UAAUkyT,iBAAmB,SAAUjC,GAC5C,IAAK,IAAInvT,EAAI,EAAGA,EAAImvT,EAAO7uT,SAClB6uT,EAAOnvT,GAAG2H,UAAUK,SAAS,cAC9BnE,KAAKurT,WAAWD,EAAOnvT,GAAI,MAAM,GAEhC6D,KAAKirT,qBAJqB9uT,OASvCirT,EAAS/rT,UAAU8jH,aAAe,SAAU7iH,GACxC,IAAI6K,EAAS7K,EAAM4+G,cAAc/zG,OAEjC,GADA5B,GAAahB,OAAOvE,KAAKgB,QAAS,cAAehB,KAAKwtT,oBACjDrmT,IAAUnH,KAAKwnT,gBAApB,CAII,IAAI1jT,EAAYqD,EAAOrD,UACnB8sH,EAAK/qH,EAAQsB,EAAQ,IAAM6+S,IAC/B,GAAKp1L,EAAL,CAMI,GAFA5wH,KAAK4/L,cACL5/L,KAAKytT,gBAAgB78L,GACjB5wH,KAAK42L,eAAiBhmE,EAAG9sH,UAAUK,SAAS,aAAc,CAC1D,IAAIupT,EAAe7nT,EAAQsB,EAAQ,IAAM0/S,IACzC,IAAKpzO,EAAMi6O,GAAe,CACtB,IAAI5vC,EAAer4Q,EAAO,WAAqBioT,GAG/C,OAFA1tT,KAAK2sT,kBAAkBe,EAAc5vC,EAAah6Q,UAAUK,SAASyiT,IAAQh2L,EAAIt0H,EAAM4+G,oBACvFl7G,KAAK2tT,kBAAkBrxT,EAAM4+G,cAAe0V,IAIhD9sH,EAAUK,SAAS4hT,IACnB/lT,KAAK4tT,aAAah9L,EAAIzpH,EAAQ7K,GAEzBwH,EAAUK,SAAS2hT,IACxB9lT,KAAK6tT,aAAaj9L,EAAIzpH,EAAQ7K,GAGzBwH,EAAUK,SAAS+hT,KAAgBpiT,EAAUK,SAAS6hT,KACvDhmT,KAAK8tT,aAAal9L,EAAIt0H,EAAM4+G,eAAe,GAGnDl7G,KAAK2tT,kBAAkBrxT,EAAM4+G,cAAe0V,MAIxDw2L,EAAS/rT,UAAU0yT,kBAAoB,SAAUh8S,EAAS65M,EAAS/qN,GAC/D,IAAIisT,EAASjnT,EAAQkM,EAAS,IAAMi0S,IACpChmT,KAAKunT,oBACL,IAAIvoM,EAAa4sG,EAAmB,QAAT,OACtBn4I,EAAMurC,IACPjtG,EAAQvO,aAAa,eAAgBw7G,GAEzC,IAAIzxG,EAAYvN,KAAK+sT,cAAcD,EAAQlhG,EAAU,UAAY,QAAS/qN,GAE1E,OADAb,KAAKwmB,QAAQ,eAAgBjZ,GACtBA,GAEX65S,EAAS/rT,UAAU2yT,iBAAmB,SAAUj8S,EAAS65M,EAAS/qN,GACjDgF,EAAQkM,EAAS,IAAMi0S,IAApC,IACIz4S,EAAYvN,KAAK+sT,cAAch7S,EAAS65M,EAAU,UAAY,QAAS/qN,GAC3E0M,EAAU/Q,KAAO+Q,EAAU/Q,KAAK6rB,OAAO,EAAG9a,EAAU/Q,KAAKC,OAAS,GAClEuD,KAAKwmB,QAAQ,cAAejZ,IAEhC65S,EAAS/rT,UAAUsyT,kBAAoB,SAAU9sT,EAAG+vH,GAChD,IAAIrjH,GACAjR,MAAOuE,EACPN,KAAMqwH,GAEV5wH,KAAKwmB,QAAQ,cAAejZ,IAEhC65S,EAAS/rT,UAAU4yT,WAAa,SAAUnB,EAAQp3Q,GAC9C,IAAI31C,EAAQC,KACR01C,EAAK5xC,UAAUK,SAASgiT,KACxBnmT,KAAK0iB,YAAYgzB,GAErBrxC,GAAaqxC,GAAOqwQ,IACpBpiT,GAAU+xC,GAAOowQ,IACjB,IAAIvoT,EAAQ,EACRshB,EAAM,EACNnM,EAAQ1S,KACR+wH,EAAKtrH,EAAO,IAAMygT,GAAY4G,GAC9BL,EAAQK,EACZ9sT,KAAKkuT,UAAUzB,EAAO17L,GACjB/wH,KAAKkiB,UAqBNliB,KAAKmuT,aAAa1B,EAAO17L,EAAIr7E,GApB7B11C,KAAKi+L,OAAO1lK,QAAQw4F,GAChBt5F,KAAMz3B,KAAK22C,UAAUs4G,OAAOj3H,OAC5B9sB,SAAUlL,KAAK22C,UAAUs4G,OAAO/jJ,SAChCmhF,eAAgBrsF,KAAK22C,UAAUs4G,OAAOrvI,OACtCnB,MAAO,SAAUxe,GACbwsT,EAAM/nT,MAAMmV,SAAW,SACvBtc,EAAQkvT,EAAM/6Q,aACd7yB,EAAMpZ,EAAO,IAAM4gT,GAAUyG,GAAQp7Q,cAEzClZ,SAAU,SAAUv4B,GAChBA,EAAKe,QAAQ0D,MAAM4xC,QAAU,QAC7B5jC,EAAM07S,cAAcnuT,EAAM1C,EAAOshB,IAErCA,IAAK,SAAU5e,GACXA,EAAKe,QAAQ0D,MAAM4xC,QAAU,QAC7Bv2C,EAAMouT,aAAa1B,EAAO17L,EAAIr7E,OAQ9C0xQ,EAAS/rT,UAAU8yT,aAAe,SAAUrB,EAAQ/7L,EAAIr7E,GACpDq7E,EAAGrsH,MAAM4xC,QAAU,QACnBw2Q,EAAOpoT,MAAM4xC,QAAU,QACvBw2Q,EAAOpoT,MAAMmV,SAAW,GACxBizS,EAAOpoT,MAAMqR,OAAS,GACtB1R,GAAaqxC,GAAO0wQ,IACpB0G,EAAOtpT,aAAa,gBAAiB,QACrCa,GAAayoT,GAASnG,IAClB3mT,KAAK4oT,UAAY5oT,KAAKquT,aACtBruT,KAAKquT,WAAaruT,KAAKsuT,eAAexB,EAAQ,MAC9C9sT,KAAKwmB,QAAQ,eAAgBxmB,KAAKquT,cAG1CjH,EAAS/rT,UAAUwyT,aAAe,SAAUf,EAAQp3Q,EAAM70C,GACtD,IAAId,EAAQC,KACZ,IAAI01C,EAAK5xC,UAAUK,SAASiiT,IAA5B,CAIIziT,GAAU+xC,GAAO0wQ,IAErB,IAAImI,EACJ,GAAIvuT,KAAK4oT,WACL2F,EAAUvuT,KAAKsuT,eAAexB,EAAQjsT,GACtCb,KAAKwmB,QAAQ,iBAAkB+nS,GAC3BA,EAAQ11R,QACRx0B,GAAaqxC,GAAO0wQ,QAJ5B,CAQA/hT,GAAaqxC,GAAOowQ,IACpBniT,GAAU+xC,GAAOqwQ,IACjB,IAAIxoT,EAAQ,EACRshB,EAAM,EACNnM,EAAQ1S,KACR+wH,EAAKtrH,EAAO,IAAMygT,GAAY4G,GAC9BL,EAAQK,EACZnpT,GAAUmpT,GAASnG,IACnB3mT,KAAKi+L,OAAO1lK,QAAQw4F,GAChBt5F,KAAMz3B,KAAK22C,UAAUuhQ,SAASlgR,OAC9B9sB,SAAUlL,KAAK22C,UAAUuhQ,SAAShtS,SAClCmhF,eAAgBrsF,KAAK22C,UAAUuhQ,SAASt4R,OACxCnB,MAAO,SAAUxe,GACbwsT,EAAM/nT,MAAMmV,SAAW,SACvBtc,EAAQkI,EAAO,IAAM4gT,GAAUyG,GAAQp7Q,aACvC7yB,EAAM4tS,EAAM/6Q,cAEhBlZ,SAAU,SAAUv4B,GAChByS,EAAM07S,cAAcnuT,EAAM1C,EAAOshB,IAErCA,IAAK,SAAU5e,GACXwsT,EAAM/nT,MAAMmV,SAAW,GACvB5Z,EAAKe,QAAQ0D,MAAM4xC,QAAU,OAC7Bm2Q,EAAM/nT,MAAMqR,OAAS,GACrB1R,GAAaqxC,GAAO0wQ,IACpB0G,EAAOtpT,aAAa,gBAAiB,SACjCzD,EAAM6oT,UACN7oT,EAAMymB,QAAQ,gBAAiB+nS,SAK/CnH,EAAS/rT,UAAU6yT,UAAY,SAAUpB,EAAQ/7L,GAC7CA,EAAGrsH,MAAM4xC,QAAU,QACnBy6E,EAAGrsH,MAAMC,WAAa,SACtBmoT,EAAOpoT,MAAMqR,OAAS+2S,EAAOp7Q,aAAe,KAC5Cq/E,EAAGrsH,MAAM4xC,QAAU,OACnBy6E,EAAGrsH,MAAMC,WAAa,IAE1ByiT,EAAS/rT,UAAU+yT,cAAgB,SAAUnuT,EAAM1C,EAAOshB,GACtD,IACI2vS,GAAiB3vS,EAAMthB,KADV0C,EAAKiL,SAAWjL,EAAKw4B,WAAax4B,EAAKiL,UACR3N,EAChD0C,EAAKe,QAAQqT,cAAc3P,MAAMqR,OAASy4S,EAAgB,MAE9DpH,EAAS/rT,UAAUqwT,iBAAmB,SAAU+C,EAAUC,GACtD,IAAI3uT,EAAQC,KACR2uT,EAAQlpT,EAAO,cAAegpT,GAClC,IAAIh7O,EAAMk7O,GAAV,CAGA3uT,KAAK2hB,YAAYgtS,GACjB,IAAIC,EACJ,GAAI5uT,KAAK4rB,OAAO23C,sBAAsBC,GAAa,CAC/C,IAAI2uF,EAAQnyJ,KAAKs/D,QAAQmvP,EAAU,IAAMvI,IAAYzpT,OACjDoyT,EAAW7uT,KAAK8uT,eAAe9uT,KAAK4rB,OAAQumI,EAAO,GACvD,GAAI1+E,EAAMo7O,IAAap7O,EAAMo7O,EAAStrP,YAGlC,OAFAl+D,EAAOspT,QACPF,EAAS/iT,gBAAgB,iBAG7B1L,KAAK2oT,SAASnkT,KAAK,SACnBqqT,EAAStrP,WAAWmrF,aAAa1uJ,KAAK2iM,SAASksH,EAAUJ,EAAS57S,aAAa,cAAcygL,KAAK,SAAUzyL,GAIxG,GAHAd,EAAM4oT,SAASv8J,MACfwiK,EAAa/tT,EAAE9B,OACfgB,EAAMssT,gBAAkBuC,EACpBn7O,EAAMm7O,IAAqC,IAAtBA,EAAWnyT,OAChC4I,EAAOspT,GACPF,EAAS/iT,gBAAgB,qBAExB,CACD3L,EAAM2oT,eAAemG,GACrB,IAAIvrT,EAAKmrT,EAAS57S,aAAa,YAC3Bs4S,EAAWprT,EAAMgvT,cAAczrT,GACnClG,EAAS,QAASwxT,EAAYzD,GAC9BprT,EAAMu8L,eAAe/F,eAAepkC,MAAQ32I,WAAWizS,EAAS57S,aAAa,eAAiB,EAC9F47S,EAAS9sT,YAAYqsI,GAASsrD,WAAWs1H,EAAY7uT,EAAMu8L,iBAC3Dv8L,EAAMkuT,WAAWQ,EAAUE,GAC3B5uT,EAAMivT,gBAAgBP,GACtB1uT,EAAM2qT,aAAa+D,GACnB1uT,EAAMkvT,eAAeR,EAAUC,GAEL,IAA1B3uT,EAAM4oT,SAASlsT,QAAiBsD,EAAM6oT,UACtC7oT,EAAMiqT,iBAIb,CAGD,GAFA4E,EAAa5uT,KAAKuqT,cAAcvqT,KAAK4pT,SAAU6E,EAAS57S,aAAa,aACrE7S,KAAKqsT,gBAAkBuC,EACnBn7O,EAAMm7O,IAAqC,IAAtBA,EAAWnyT,OAGhC,OAFA4I,EAAOspT,QACPF,EAAS/iT,gBAAgB,iBAIzB1L,KAAKs8L,eAAe/F,eAAepkC,MAAQ32I,WAAWizS,EAAS57S,aAAa,eAAiB,EAC7F47S,EAAS9sT,YAAYqsI,GAASsrD,WAAWt5L,KAAKyqT,cAAcmE,GAAa5uT,KAAKs8L,iBAC9Et8L,KAAKiuT,WAAWQ,EAAUE,GAC1B3uT,KAAKgvT,gBAAgBP,GACrBzuT,KAAK0qT,aAAa+D,GAClBzuT,KAAKivT,eAAeR,EAAUC,MAI1CtH,EAAS/rT,UAAU2zT,gBAAkB,SAAUhuT,GACvChB,KAAK42L,eACL52L,KAAKksT,sBAAsBlrT,GAC3BhB,KAAK8rT,uBAAuB9qT,IAEhChB,KAAKqsT,gBAAkB,MAE3BjF,EAAS/rT,UAAU6zT,UAAY,SAAU5gT,EAAQ6gT,EAAWC,GACxD,OAAID,IAAcC,EACP9gT,EAGAtO,KAAKkvT,UAAUlvT,KAAKqvT,eAAe/gT,GAAS6gT,EAAWC,EAAY,IAGlFhI,EAAS/rT,UAAUyzT,eAAiB,SAAUxgT,EAAQ6gT,EAAWC,GAC7D,OACID,IAAcC,EACPpvT,KAAKqvT,eAAe/gT,GAGpBtO,KAAK8uT,eAAe9uT,KAAKqvT,eAAe/gT,GAAS6gT,EAAWC,EAAY,IAGvFhI,EAAS/rT,UAAUg0T,eAAiB,SAAU/gT,GAC1C,MAAgC,iBAAjBA,EAAOjO,OAAsBozE,EAAMnlE,EAAOjO,OAAUiO,EAASA,EAAOjO,OAEvF+mT,EAAS/rT,UAAUkvT,cAAgB,SAAUxtT,EAAKw8D,EAAU+1P,QACzC,IAAXA,IAAqBA,GAAS,GAClC,IAAI/9S,EACJ,GAAIkiE,EAAM12E,GACN,OAAOwU,EAEN,GAAsB,IAAlBvR,KAAKqkF,SACV,OAAOrkF,KAAKuvT,cAAcvvT,KAAKoqT,YAAa7wP,EAAU+1P,GAGtD,GAAiC,iBAAtBtvT,KAAK4rB,OAAOvrB,MACnB,IAAK,IAAIlE,EAAI,EAAGqzT,EAASzyT,EAAIN,OAAQN,EAAIqzT,EAAQrzT,IAAK,CAClD,IAAIszT,EAAS5yT,EAASmD,KAAK4rB,OAAOtoB,GAAIvG,EAAIZ,IAC1C,GAAIszT,GAAUA,EAAOviT,aAAeqsD,EAChC,OAAO18D,EAASmD,KAAK4rB,OAAOvrB,MAAOtD,EAAIZ,IAEtC,IAAKs3E,EAAM52E,EAASmD,KAAK4rB,OAAOvrB,MAAOtD,EAAIZ,WAEzBhB,KADnBoW,EAAavR,KAAKuqT,cAAc1tT,EAASmD,KAAK4rB,OAAOvrB,MAAOtD,EAAIZ,IAAKo9D,IAEjE,MAMpB,OAAOhoD,GAEX61S,EAAS/rT,UAAUk0T,cAAgB,SAAU/yT,EAAM+8D,EAAU+1P,GAEzD,IAAI77O,EAAMj3E,GAGV,IAAK,IAAIL,EAAI,EAAGqzT,EAAShzT,EAAKC,OAAQN,EAAIqzT,EAAQrzT,IAAK,CACnD,GAAKs3E,EAAMj3E,EAAKL,GAAG,KAAQs3E,EAAM52E,EAASmD,KAAK4rB,OAAOs+R,SAAU1tT,EAAKL,GAAG,KAKnE,OAAImzT,EACE9yT,EAAKL,MALZ,GAAIU,EAASmD,KAAK4rB,OAAOs+R,SAAU1tT,EAAKL,GAAG,IAAI+Q,aAAeqsD,EAC1D,OAAO/8D,EAAKL,KAY5BirT,EAAS/rT,UAAU4zT,eAAiB,SAAUjuT,EAAS0tT,GACnD,GAAIA,EAEA,IAAK,IADDgB,EAAS9pT,EAAU,IAAMmgT,GAAY/kT,GAChC7E,EAAI,EAAG0F,EAAM6tT,EAAOjzT,OAAQN,EAAI0F,EAAK1F,IAAK,CAC/C,IACI8jM,EAAQp6L,EADD6pT,EAAOvzT,GACQ,IAAM6pT,IAChChmT,KAAKquT,WAAaruT,KAAKsuT,eAAeruH,EAAO,MAC7CjgM,KAAKwmB,QAAQ,gBAAiBxmB,KAAKquT,YACnCruT,KAAK0rT,iBAAiBzrH,EAAOyuH,KAIzCtH,EAAS/rT,UAAUyyT,aAAe,SAAUl9L,EAAI/vH,EAAG8uT,GAC1C/+L,EAAG9sH,UAAUK,SAAS,eACnBnE,KAAKirT,sBAAyBpqT,GAAKA,EAAEgnB,SAAY8nS,IAAgB3vT,KAAK4vT,SAASh/L,GAC/E5wH,KAAK6vT,aAAaj/L,EAAI/vH,GAGtBb,KAAKurT,WAAW36L,EAAI/vH,EAAG8uT,KAInCvI,EAAS/rT,UAAUu0T,SAAW,SAAUh/L,GACpC,QAAOA,EAAG9sH,UAAUK,SAAS4vM,KAEjCqzG,EAAS/rT,UAAUkwT,WAAa,SAAU36L,EAAI/vH,EAAG8uT,GAC7C,GAAIl8O,EAAMm9C,KAAS5wH,KAAKirT,qBAAuBjrT,KAAK4vT,SAASh/L,KAAQn9C,EAAM5yE,GACvEb,KAAKytT,gBAAgB78L,OADzB,CAIA,IAAIrjH,EACJ,IAAIvN,KAAK4oT,WACLr7S,EAAYvN,KAAK8vT,eAAel/L,EAAI,SAAU/vH,GAC9Cb,KAAKwmB,QAAQ,gBAAiBjZ,IAC1BA,EAAUsrB,QAHlB,CAUA,GAHK74B,KAAKirT,sBAAyB0E,GAAiB9uT,KAAMA,GAAMA,EAAEgnB,WAC9D7nB,KAAK+vT,kBAEL/vT,KAAKirT,qBAAuBpqT,GAAKA,EAAE41G,SAAU,CACxCz2G,KAAKgwT,YACNhwT,KAAKgwT,UAAYp/L,GAErB,IAAIlrG,EAAa1lB,KAAKiwT,OAAO1xT,QAAQyB,KAAKgwT,WACtCpqS,EAAW5lB,KAAKiwT,OAAO1xT,QAAQqyH,GACnC,GAAIlrG,EAAaE,EAAU,CACvB,IAAImI,EAAOrI,EACXA,EAAaE,EACbA,EAAWmI,EAEf,IAAK,IAAI5xB,EAAIupB,EAAYvpB,GAAKypB,EAAUzpB,IAAK,CACzC,IAAI+zT,EAAWlwT,KAAKiwT,OAAO9zT,GACvBsI,EAAUyrT,KAAcA,EAASpsT,UAAUK,SAAS,cACpDnE,KAAKmwT,UAAUD,SAKvBlwT,KAAKgwT,UAAYp/L,EACjB5wH,KAAKmwT,UAAUv/L,GAEnB5wH,KAAKytT,gBAAgB78L,GACjB5wH,KAAK4oT,UACL5oT,KAAKwmB,QAAQ,eAAgBjZ,MAGrC65S,EAAS/rT,UAAUw0T,aAAe,SAAUj/L,EAAI/vH,GAC5C,IAAI0M,EACAvN,KAAK4oT,WACLr7S,EAAYvN,KAAK8vT,eAAel/L,EAAI,YAAa/vH,GACjDb,KAAKwmB,QAAQ,gBAAiBjZ,GAC1BA,EAAUsrB,UAIlB74B,KAAK6/L,aAAajvE,GAClB5wH,KAAKytT,gBAAgB78L,GACjB5wH,KAAK4oT,UACL5oT,KAAKwmB,QAAQ,eAAgBjZ,KAGrC65S,EAAS/rT,UAAUoyT,gBAAkB,SAAU78L,GAC3C,IAAKn9C,EAAMm9C,GAAK,CACZ,IAAIw/L,EAAcpwT,KAAKqwT,iBACnBD,GACA/rT,GAAa+rT,GAAcvqG,IAE/BliN,GAAUitH,GAAKi1F,IACf7lN,KAAKmtT,aAAaiD,EAAax/L,KAGvCw2L,EAAS/rT,UAAU80T,UAAY,SAAU1D,GACrCA,EAAMjpT,aAAa,gBAAiB,QACpCG,GAAU8oT,GAAQ14G,IAClB,IAAIzwM,EAAKmpT,EAAM55S,aAAa,YACvB4gE,EAAMnwE,KAA2C,IAApCtD,KAAKoyD,cAAc7zD,QAAQ+E,IACzCtD,KAAKoyD,cAAc5tD,KAAKlB,IAGhC8jT,EAAS/rT,UAAUwkM,aAAe,SAAU4sH,GACpCzsT,KAAKirT,oBACLwB,EAAMjpT,aAAa,gBAAiB,SAGpCipT,EAAM/gT,gBAAgB,iBAE1BrH,GAAaooT,GAAQ14G,IACrB,IAAI9hM,EAAQjS,KAAKoyD,cAAc7zD,QAAQkuT,EAAM55S,aAAa,aACtDZ,GAAS,GACTjS,KAAKoyD,cAAc/pC,OAAOpW,EAAO,IAGzCm1S,EAAS/rT,UAAU00T,gBAAkB,WAEjC,IAAK,IADDhuH,EAAa/hM,KAAKgB,QAAQQ,iBAAiB,IAAMuyM,IAC5C31M,EAAK,EAAGujM,EAAeI,EAAY3jM,EAAKujM,EAAallM,OAAQ2B,IAAM,CACxE,IAAI4F,EAAM29L,EAAavjM,GACnB4B,KAAKirT,oBACLjnT,EAAIR,aAAa,gBAAiB,SAGlCQ,EAAI0H,gBAAgB,iBAG5BrH,EAAY09L,EAAYgS,IACxB/zM,KAAKgH,eAAgBorD,mBAAqB,IAE9Cg1P,EAAS/rT,UAAUy0T,eAAiB,SAAUhD,EAAQ32P,EAAQt1D,GAC1D,IAAIsqT,EAAWnrT,KAAKitT,YAAYH,GAChC,OAAS32P,OAAQA,EAAQt9B,QAAQ,EAAOipK,cAAcruH,EAAM5yE,GAAmBN,KAAMusT,EAAQ3B,SAAUA,IAE3G/D,EAAS/rT,UAAU2tT,gBAAkB,WACjChpT,KAAKswT,aAAkC,SAAlBtwT,KAAKuwT,SAAwB/kT,GAAQkb,SAAW,QAAU,WAAc1mB,KAAKuwT,UAEtGnJ,EAAS/rT,UAAUm1T,cAAgB,SAAU3vT,GACzC,IAAIsG,EAAStG,EAAEq6G,cAAc/zG,QACxBA,GAAUA,EAAOrD,UAAUK,SA9mC5B,YA8mC+CgD,EAAOrD,UAAUK,SAASogH,KACzEp9G,EAAOrD,UAAUK,SAAS+hT,KAAe/+S,EAAOrD,UAAUK,SAAS6hT,KACnE7+S,EAAOrD,UAAUK,SAAS6oH,KAAShtH,KAAK42L,cAAgB/wL,EAAQsB,EAAQ,IAAM0/S,KAI9E7mT,KAAKywT,qBAAqB5qT,EAAQsB,EAAQ,IAAM6+S,IAAWnlT,IAGnEumT,EAAS/rT,UAAUo1T,qBAAuB,SAAU3D,EAAQjsT,GACxD,IAAI60C,EAAOjwC,EAAO,cAAeqnT,GACjC,GAAKp3Q,IAAQA,EAAK5xC,UAAUK,SAASiiT,IAArC,CAIoB1wQ,EAAK5xC,UACPK,SAAS4hT,IACnB/lT,KAAK4tT,aAAad,EAAQp3Q,EAAM70C,GAGhCb,KAAK6tT,aAAaf,EAAQp3Q,EAAM70C,KAI5CumT,EAAS/rT,UAAUuyT,aAAe,SAAUd,EAAQp3Q,EAAM70C,EAAG6tT,GACzD,IAAIh5Q,EAAK5xC,UAAUK,SAASiiT,IAM5B,GAFIziT,GAAU+xC,GAAO0wQ,IAEjBpmT,KAAK4oT,WACL5oT,KAAKquT,WAAaruT,KAAKsuT,eAAexB,EAAQjsT,GAC9Cb,KAAKwmB,QAAQ,gBAAiBxmB,KAAKquT,YAC/BruT,KAAKquT,WAAWx1R,QAChBx0B,GAAaqxC,GAAO0wQ,QAJ5B,CAQA,IAAIr1L,EAAKtrH,EAAO,IAAMygT,GAAY4G,GAC9B/7L,GAAsB,OAAhBA,EAAG7+G,SACTlS,KAAKiuT,WAAWnB,EAAQp3Q,GAGxB11C,KAAK0rT,iBAAiBoB,EAAQ4B,KAGtCtH,EAAS/rT,UAAU2+I,iBAAmB,SAAUn5I,GAC5C,IAAIsG,EAAStG,EAAEsG,OACXipT,EAAcpwT,KAAKqwT,iBACvB,GAAIlpT,GAAUA,EAAOrD,UAAUK,SAhqC3B,WAgqCJ,CACI,IAAIusT,EAASvpT,EACI,UAAbtG,EAAEs1D,QACFu6P,EAAOxjL,OACPltI,KAAKgB,QAAQkB,QACbyB,GAAUysT,GAAch4G,KAEN,WAAbv3M,EAAEs1D,SACPu6P,EAAO1zT,MAAQgD,KAAK2wT,QACpBD,EAAOxjL,OACPltI,KAAKgB,QAAQkB,QACbyB,GAAUysT,GAAch4G,SAXhC,CAeAv3M,EAAE2kB,iBACF,IAAIjY,GACAsrB,QAAQ,EACRv8B,MAAOuE,EACPN,KAAM6vT,GAGV,GADApwT,KAAKwmB,QAAQ,WAAYjZ,IACrBA,EAAUsrB,OAGd,OAAQh4B,EAAEs1D,QACN,IAAK,QACGn2D,KAAK42L,cACL52L,KAAK4wT,UAAU/vT,GAEnB,MACJ,IAAK,YACDb,KAAK6wT,UAAS7wT,KAAKkT,UAA0BrS,GAC7C,MACJ,IAAK,WACDb,KAAK6wT,WAAS7wT,KAAKkT,UAA0BrS,GAC7C,MACJ,IAAK,YACDb,KAAK8wT,gBAAe,EAAMjwT,GAC1B,MACJ,IAAK,WACL,IAAK,WACL,IAAK,SACDb,KAAK+wT,cAAa,GAClB,MACJ,IAAK,UACD/wT,KAAK8wT,gBAAe,EAAOjwT,GAC3B,MACJ,IAAK,SACL,IAAK,SACL,IAAK,OACDb,KAAK+wT,cAAa,GAClB,MACJ,IAAK,OACL,IAAK,YACL,IAAK,WACL,IAAK,SACD/wT,KAAKgxT,kBAAiB,GACtB,MACJ,IAAK,MACL,IAAK,WACL,IAAK,UACL,IAAK,QACDhxT,KAAKgxT,kBAAiB,GACtB,MACJ,IAAK,QACL,IAAK,YACL,IAAK,aACL,IAAK,UACDhxT,KAAK8tT,aAAasC,EAAavvT,GAC/B,MACJ,IAAK,KACGb,KAAK8gE,eAAiBsvP,EAAYtsT,UAAUK,SAAS,cACrDnE,KAAKixT,cAAcb,EAAavvT,GAEpC,MACJ,IAAK,QACD,GAAIb,KAAKirT,oBAAqB,CAC1B,IAAIK,EAAS1lT,EAAU,8BAA0C5F,KAAKgB,SACtEhB,KAAKutT,iBAAiBjC,OAKtClE,EAAS/rT,UAAU61T,gBAAkB,SAAUC,GAC3C,IAAIC,EAAYpxT,KAAKqwT,iBAAiB1tT,cAAc,IAAM0jT,IACtDpxS,EAAMm8S,EAAUxlT,wBAChBtL,EAASN,KAAKqxT,gBAAgBrxT,KAAKgB,SACvC,IAAKyyE,EAAMnzE,GAAS,CAChB,IAAIgxT,EAAYhxT,EAAOsL,wBACnBqJ,EAAItI,OAAS2kT,EAAU3kT,OACvBrM,EAAO6L,WAAa8I,EAAItI,OAAS2kT,EAAU3kT,OAEtCsI,EAAIvI,IAAM4kT,EAAU5kT,MACzBpM,EAAO6L,WAAamlT,EAAU5kT,IAAMuI,EAAIvI,KAGhC1M,KAAKuxT,oBAAoBH,IAErCA,EAAUx/M,eAAeu/M,IAGjC/J,EAAS/rT,UAAUk2T,oBAAsB,SAAUC,GAC/C,IAAIv8S,EAAMu8S,EAAQ5lT,wBAClB,OAAQqJ,EAAIvI,KAAO,GAAKuI,EAAIzI,MAAQ,GAAKyI,EAAItI,SAAW9Q,OAAOyd,aAAe9Y,SAAS4L,gBAAgBkhB,eACnGrY,EAAIxI,QAAU5Q,OAAO0d,YAAc/Y,SAAS4L,gBAAgBihB,cAEpE+5R,EAAS/rT,UAAUg2T,gBAAkB,SAAU9wT,GAC3C,OAAIkzE,EAAMlzE,GACC,KAEHA,EAAKkxT,aAAelxT,EAAK+sB,aAAgB/sB,EAAOP,KAAKqxT,gBAAgB9wT,EAAK8T,gBAEtF+yS,EAAS/rT,UAAUy1T,eAAiB,SAAUY,EAAW7wT,GACrD,GAAIb,KAAKirT,oBAAqB,CAC1B,IAAImF,EAAcpwT,KAAKqwT,iBACnBsB,EAAWD,EAAY1xT,KAAK4xT,YAAYxB,GAAepwT,KAAK6xT,YAAYzB,GAC5EpwT,KAAK4/L,cACL5/L,KAAKytT,gBAAgBkE,GACrB3xT,KAAK8tT,aAAa6D,EAAU9wT,GAAG,GAC/Bb,KAAKkxT,iBAAiBQ,QAGtB1xT,KAAK+wT,aAAaW,IAG1BtK,EAAS/rT,UAAUu1T,UAAY,SAAU/vT,GACrC,IAAIuvT,EAAcpwT,KAAKqwT,iBACnByB,EAAYrsT,EAAO,IAAMohT,GAAcuJ,GACvCj3H,EAAY1zL,EAAO,YAAsBqsT,GAAWhuT,UAAUK,SAASyiT,IACtEwJ,EAAYtsT,UAAUK,SAAS,cAChCnE,KAAK2sT,kBAAkBmF,EAAW34H,EAAWi3H,EAAavvT,IAGlEumT,EAAS/rT,UAAUsxT,kBAAoB,SAAUmF,EAAWlmG,EAASh7F,EAAI/vH,GACrDb,KAAK+tT,kBAAkB+D,EAAWlmG,EAAS/qN,GAC7Cg4B,SAGd74B,KAAK++G,YAAY+yM,EAAWlmG,EAAU,UAAY,QAAS/qN,GAAG,GAC9Db,KAAKksT,sBAAsBt7L,GAC3B5wH,KAAK8rT,uBAAuBjmT,EAAQA,EAAQ+qH,EAAI,IAAMs1L,IAAa,IAAMF,KACzEhmT,KAAKguT,iBAAiB8D,EAAWlmG,EAAS/qN,KAE9CumT,EAAS/rT,UAAUw1T,SAAW,SAAUkB,EAAYlxT,GAChD,IAAIuvT,EAAcpwT,KAAKqwT,iBACnB36Q,EAAOjwC,EAAO,cAAe2qT,GACjC,GAAI2B,EAAY,CACZ,IAAKr8Q,EACD,OAEKA,EAAK5xC,UAAUK,SAAS4hT,IAC7B/lT,KAAK4tT,aAAawC,EAAa16Q,EAAM70C,GAGrCb,KAAKgyT,cAAc5B,GAAa,QAIpC,GAAI16Q,GAAQA,EAAK5xC,UAAUK,SAAS2hT,IAChC9lT,KAAK6tT,aAAauC,EAAa16Q,EAAM70C,OAEpC,CACD,IAAI4tT,EAAW5oT,EAAQA,EAAQuqT,EAAa,IAAMlK,IAAa,IAAMF,IACrE,IAAKyI,EACD,OAGKA,EAAS3qT,UAAUK,SAAS,eAC7BnE,KAAKiyT,SAAS7B,EAAa3B,GAC3BzuT,KAAKkxT,iBAAgB,MAMzC9J,EAAS/rT,UAAU01T,aAAe,SAAUW,GACxC,IAAItB,EAAcpwT,KAAKqwT,iBACvBrwT,KAAKgyT,cAAc5B,EAAasB,IAEpCtK,EAAS/rT,UAAU21T,iBAAmB,SAAUkB,GAC5C,IAAI9B,EAAcpwT,KAAKqwT,iBACnB8B,EAAWD,EAAclyT,KAAKoyT,cAAgBpyT,KAAKqyT,aAClDF,EAASruT,UAAUK,SAAS,eAC7BnE,KAAKiyT,SAAS7B,EAAa+B,GAC3BnyT,KAAKkxT,gBAAgBgB,KAG7B9K,EAAS/rT,UAAUg1T,eAAiB,WAChC,IAAIiC,EAAQ7sT,EAAO,IAAMugT,GAAW,IAAMngG,GAAO7lN,KAAKgB,SACtD,OAAOyyE,EAAM6+O,GAAS7sT,EAAO,IAAMugT,GAAUhmT,KAAKgB,SAAWsxT,GAEjElL,EAAS/rT,UAAU22T,cAAgB,SAAUphM,EAAI8gM,GAC7C,IAAIC,EAAWD,EAAY1xT,KAAK4xT,YAAYhhM,GAAM5wH,KAAK6xT,YAAYjhM,GAGnE,GAFA5wH,KAAKiyT,SAASrhM,EAAI+gM,GAClB3xT,KAAKkxT,iBAAiBQ,GAClBC,EAAS7tT,UAAUK,SAAS,aAAc,CAC1C,IAAI2jI,EAAY6pL,EAAS7pL,UACO,MAA5B6pL,EAAS9pH,iBAA2B8pH,EAAS7tT,UAAUK,SAAS,aAChEnE,KAAKgyT,cAAcL,GAAU,GAEA,MAAxBA,EAASn/K,aAAuBm/K,EAAS7tT,UAAUK,SAAS,oBACjEnE,KAAKgyT,cAAcL,GAAU,GAEA,MAAxBA,EAASn/K,aAAuB1K,EAAUhkI,UAAUK,SAAS,kBAClEnE,KAAKgyT,cAAcL,GAAU,GAG7B3xT,KAAKgyT,cAAcL,EAAUD,KAIzCtK,EAAS/rT,UAAUu2T,YAAc,SAAUhhM,GACvC,IACI+gM,EADA1/S,EAAQjS,KAAKiwT,OAAO1xT,QAAQqyH,GAEhC,GAGI,GAFA3+G,IACA0/S,EAAW3xT,KAAKiwT,OAAOh+S,GACnBwhE,EAAMk+O,GACN,OAAO/gM,SAELnsH,EAAUktT,IACpB,OAAOA,GAEXvK,EAAS/rT,UAAUw2T,YAAc,SAAUjhM,GACvC,IACI2hM,EADAtgT,EAAQjS,KAAKiwT,OAAO1xT,QAAQqyH,GAEhC,GAGI,GAFA3+G,IACAsgT,EAAWvyT,KAAKiwT,OAAOh+S,GACnBwhE,EAAM8+O,GACN,OAAO3hM,SAELnsH,EAAU8tT,IACpB,OAAOA,GAEXnL,EAAS/rT,UAAU+2T,YAAc,WAC7B,IACID,EADAlgT,EAAQ,EAEZ,GACIkgT,EAAWnyT,KAAKiwT,OAAOh+S,GACvBA,WACMxN,EAAU0tT,IACpB,OAAOA,GAEX/K,EAAS/rT,UAAUg3T,WAAa,WAC5B,IACIG,EADAvgT,EAAQjS,KAAKiwT,OAAOxzT,OAAS,EAEjC,GACI+1T,EAAUxyT,KAAKiwT,OAAOh+S,GACtBA,WACMxN,EAAU+tT,IACpB,OAAOA,GAEXpL,EAAS/rT,UAAU42T,SAAW,SAAUQ,EAASd,GAC7CttT,GAAaouT,IAAWr6G,GAAOyN,KAC1B8rG,EAAS7tT,UAAUK,SAAS,eAC7BR,GAAUguT,IAAYv5G,GAAOyN,KAC7B7lN,KAAKmtT,aAAasF,EAASd,KAGnCvK,EAAS/rT,UAAU8xT,aAAe,SAAUsF,EAASd,GACjD3xT,KAAKgB,QAAQ0K,gBAAgB,yBACzB+mT,GACAA,EAAQ/mT,gBAAgB,MAE5BimT,EAASnuT,aAAa,KAAMxD,KAAKgB,QAAQsC,GAAK,WAC9CtD,KAAKgB,QAAQwC,aAAa,wBAAyBxD,KAAKgB,QAAQsC,GAAK,YAEzE8jT,EAAS/rT,UAAUo/H,QAAU,WACpBz6H,KAAKqnT,iBACN1jT,GAAU3D,KAAKqwT,kBAAmBj4G,IAEtCp4M,KAAKqnT,iBAAkB,GAE3BD,EAAS/rT,UAAUq/H,SAAW,WAC1Br2H,GAAarE,KAAKqwT,kBAAmBj4G,KAEzCgvG,EAAS/rT,UAAUgoN,YAAc,SAAUxiN,GACvC,IAAIsG,EAAStG,EAAEsG,OACXrD,EAAYqD,EAAOrD,UACnB4mN,EAAY7kN,EAAQsB,EAAQ,IAAM6+S,KACjCt7F,GAAa5mN,EAAUK,SAAS+hT,KAAepiT,EAAUK,SAAS6hT,IACnEhmT,KAAK4/L,cAID8qB,IAAcA,EAAU5mN,UAAUK,SAAS,cAC3CnE,KAAK2qN,SAASD,IAI1B08F,EAAS/rT,UAAUsvN,SAAW,SAAU/5F,GAC/BA,EAAG9sH,UAAUK,SAASi0M,MACvBp4M,KAAK4/L,cACLj8L,GAAUitH,GAAKwnF,MAIvBgvG,EAAS/rT,UAAUioN,aAAe,SAAUziN,GACxCb,KAAK4/L,eAETwnH,EAAS/rT,UAAUukM,YAAc,WAC7B,IAAI8yH,EAAc9sT,EAAU,WAAa5F,KAAKgB,SAC1C0xT,GAAeA,EAAYj2T,QAC3B4H,EAAYquT,EAAat6G,KAIjCgvG,EAAS/rT,UAAU4xT,YAAc,SAAUH,EAAQ6F,GAC/C,IAAKl/O,EAAMq5O,IAAWA,EAAOhpT,UAAUK,SAAS6hT,KAAangT,EAAQinT,EAAQ,cAAehpT,UAAUK,SAASogH,IAAO,CAClH,IAAIjhH,EAAKwpT,EAAOj6S,aAAa,YACzB4Z,EAAOzsB,KAAKi+H,QAAQ6uL,EAAQ6F,GAC5BC,EAAQ/sT,EAAQinT,EAAOrsT,WAAY,IAAMulT,IACzC6M,EAAMD,EAAQA,EAAM//S,aAAa,YAAc,KAC/C28H,EAAWs9K,EAAOhpT,UAAUK,SAAS4vM,IACrC5e,EAAqD,SAAzC23H,EAAOj6S,aAAa,iBAChCL,EAAU,KAId,OAHIxS,KAAK42L,eACLpkL,EAAU/M,EAAO,IAAMohT,GAAciG,GAAQj6S,aAAa,kBAErDvP,GAAIA,EAAImpB,KAAMA,EAAMy9R,SAAU2I,EAAKrjL,SAAUA,EAAU2lD,SAAUA,EAAUgE,UAAW3mL,GAEnG,OAASlP,GAAI,GAAImpB,KAAM,GAAIy9R,SAAU,GAAI16K,SAAU,GAAI2lD,SAAU,GAAIgE,UAAW,KAEpFiuH,EAAS/rT,UAAU4iI,QAAU,SAAU6uL,EAAQ6F,GAC3C,GAAIA,EAAQ,CACR,IAAIxH,EAAWnrT,KAAK+uT,cAAcjC,EAAOj6S,aAAa,aAClDs/I,EAAQ32I,WAAWsxS,EAAOj6S,aAAa,eAE3C,OAAOhW,EADUmD,KAAKkvT,UAAUlvT,KAAK4rB,OAAQumI,EAAO,GACzB1lI,KAAM0+R,GAErC,OAAO1lT,EAAO,IAAMwgT,GAAU6G,GAAQjxS,aAE1CurS,EAAS/rT,UAAUizT,eAAiB,SAAUxB,EAAQjsT,GAClD,IAAIsqT,EAAWnrT,KAAKitT,YAAYH,GAChC,OAASj0R,QAAQ,EAAOipK,cAAcruH,EAAM5yE,GAAmBN,KAAMusT,EAAQ3B,SAAUA,EAAU7uT,MAAOuE,IAE5GumT,EAAS/rT,UAAUy3T,cAAgB,WAC/B9yT,KAAKgB,QAAQgB,UAAY,GACzBhC,KAAK6oT,gBACL7oT,KAAKgH,eAAgBorD,iBAAmB02P,kBAAoB,GAC5D9oT,KAAK4oT,UAAW,EAChB5oT,KAAK+oT,kBAET3B,EAAS/rT,UAAUm6H,YAAc,SAAUC,EAAUs9L,GAC5Ct/O,EAAMgiD,IAA0B,KAAbA,GACpBpxH,GAAarE,KAAKgB,SAAUy0H,EAASv4H,MAAM,MAE1Cu2E,EAAMs/O,IAA0B,KAAbA,GACpBpvT,GAAU3D,KAAKgB,SAAU+xT,EAAS71T,MAAM,OAGhDkqT,EAAS/rT,UAAU23T,eAAiB,SAAUnyT,GAC1C,IAAIsG,EAAStG,EAAEsG,OACf,MAAKA,GAAUA,EAAOrD,UAAUK,SAASogH,KAASp9G,EAAOrD,UAAUK,SAAS+hT,KACxE/+S,EAAOrD,UAAUK,SAAS6hT,KAAa7+S,EAAOrD,UAAUK,SAAS6oH,KACjE7lH,EAAOrD,UAAUK,SArgDjB,YAqgDoCgD,EAAOrD,UAAUK,SApgDhD,kBAkgDT,CAMI,IAAIsoT,EAAQ5mT,EAAQsB,EAAQ,IAAM6+S,IAClChmT,KAAKixT,cAAcxE,EAAO5rT,KAGlCumT,EAAS/rT,UAAU41T,cAAgB,SAAUxE,EAAO5rT,GAChD,IAAIoyT,EAAYxtT,EAAO,IAAM6gT,GAAWtmT,KAAKgB,SACzCiyT,GACAA,EAAU/lL,OAEd,IAAIswD,EAAU/3L,EAAO,IAAMwgT,GAAUwG,GACrCzsT,KAAKkzT,cAAczG,GACnB,IAAI91H,EAAWx1L,EAAc,SAAWkC,UAAWijT,GAAW7iT,OAASzG,MAAOgD,KAAK2wT,WAC/EpjT,EAAYvN,KAAKmzT,aAAa1G,EAAO,KAAM91H,EAAS70L,WAExD,GADA9B,KAAKwmB,QAAQ,cAAejZ,IACxBA,EAAUsrB,OAAd,CAGA,IACIn0B,EAAQ,UADG84L,EAAQ54L,YAAc,GACH,KAClCjB,GAAU8oT,GAzhDJ,aA0hDNjvH,EAAQx7L,UAAYuL,EAAUogC,UAC9B,IAAI+iR,EAASjrT,EAAO,IAAM6gT,GAAW9oH,GACrCx9L,KAAKqlB,SAAW+F,GAAM2rG,aAClB/1H,QAAS0vT,EACTztT,YACIiQ,UAAWlT,KAAKkT,aAGxBlT,KAAKqlB,SAAS5K,UAAUjX,aAAa,QAASkB,GAC9CgsT,EAAOxuT,QACP,IAAIqpB,EAAWmlS,EACfnlS,EAASxF,kBAAkB,EAAGwF,EAASvuB,MAAMP,QAC7CuD,KAAKozT,gBAAgB1C,KAEzBtJ,EAAS/rT,UAAU63T,cAAgB,SAAUzG,GACzC,IAAInpT,EAAKmpT,EAAM55S,aAAa,YAC5B7S,KAAKqzT,SAAWrzT,KAAK+uT,cAAczrT,GACnC,IAAI6uJ,EAAQ32I,WAAWixS,EAAM55S,aAAa,eAC1C7S,KAAKszT,WAAatzT,KAAKkvT,UAAUlvT,KAAK4rB,OAAQumI,EAAO,GACrDnyJ,KAAK2wT,QAAU9zT,EAASmD,KAAKszT,WAAW7mS,KAAMzsB,KAAKqzT,WAEvDjM,EAAS/rT,UAAUk4T,cAAgB,SAAU1yT,GACzC,GAAK4E,EAAO,IAAM6gT,GAAWtmT,KAAKgB,SAAlC,CAGA,IAAImG,EAAStG,EAAEsG,OACX8pC,EAAU9pC,EAAOnK,MACjBw2T,EAAS3tT,EAAQsB,EAAQ,IAAM8+S,IAC/BwG,EAAQ5mT,EAAQsB,EAAQ,IAAM6+S,IAClC3gT,EAAOrF,KAAKqlB,SAAS5K,WACrBza,KAAKyzT,cAAchH,EAAO+G,EAAQviR,GAAS,KAE/Cm2Q,EAAS/rT,UAAUo4T,cAAgB,SAAUhH,EAAO+G,EAAQviR,EAASyiR,GACjE,IAAInmT,EAAYvN,KAAKmzT,aAAa1G,EAAOx7Q,EAAS,MAClDjxC,KAAKwmB,QAAQ,aAAcjZ,GAC3B0jC,EAAU1jC,EAAUsrB,OAAStrB,EAAUojT,QAAUpjT,EAAU0jC,QAC3D,IAAIihH,EAAU90J,EAAS4C,KAAKszT,WAAW7mS,KAAMwkB,EAASjxC,KAAKqzT,UACtD5/O,EAAMzzE,KAAKspT,gBAKZkK,EAAOxxT,UAAYivC,GAJnBuiR,EAAOxxT,UAAY,GACnBoD,EAAOpF,KAAKspT,eAAep3J,GAAUshK,IAKrCE,IACArvT,GAAaooT,GAvkDX,aAwkDF+G,EAAOtxT,UAGfklT,EAAS/rT,UAAUkyB,WAAa,SAAUvpB,GACtC,OAAIyvE,EAAMzvE,GACC,KAEa,iBAARA,EACLhE,KAAKgB,QAAQ2B,cAAc,cAAgBqB,EAAM,MAEpC,iBAARA,EACLA,EAGA,MAGfojT,EAAS/rT,UAAU83T,aAAe,SAAU1G,EAAOx7Q,EAASy/Q,GAExD,OAAS73R,QAAQ,EAAOoY,QAASA,EAAS1wC,KAAMksT,EAAOtB,SAD5CnrT,KAAKitT,YAAYR,GAC2CkE,QAAS3wT,KAAK2wT,QAAShjR,UAAW+iR,IAE7GtJ,EAAS/rT,UAAU0zT,cAAgB,SAAUzrT,GAEzC,IAAImwE,EAAMnwE,GAAV,CAGK,GAAsB,IAAlBtD,KAAKqkF,SASV,OAAOrkF,KAAK2zT,mBAAmB3zT,KAAK4pT,SAAU5pT,KAAK4rB,OAAQtoB,GAR3D,IAAK,IAAInH,EAAI,EAAGqzT,EAASxvT,KAAK4pT,SAASntT,OAAQN,EAAIqzT,EAAQrzT,IAAK,CAC5D,IAAIszT,EAAS5yT,EAASmD,KAAK4rB,OAAOtoB,GAAItD,KAAK4pT,SAASztT,IACpD,IAAKs3E,EAAMzzE,KAAK4pT,SAASztT,MAAQs3E,EAAMg8O,IAAWA,EAAOviT,aAAe5J,EACpE,OAAOtD,KAAK4pT,SAASztT,MASrCirT,EAAS/rT,UAAUs4T,mBAAqB,SAAU52T,EAAKuR,EAAQhL,GAC3D,IAAIgqG,EACJ,GAAI75B,EAAM12E,GACN,OAAOuwG,EAEX,IAAK,IAAInxG,EAAI,EAAGqzT,EAASzyT,EAAIN,OAAQN,EAAIqzT,EAAQrzT,IAAK,CAClD,IAAIszT,EAAS5yT,EAASyR,EAAOhL,GAAIvG,EAAIZ,IACrC,GAAIY,EAAIZ,IAAMszT,GAAUA,EAAOviT,aAAe5J,EAC1C,OAAOvG,EAAIZ,GAEV,GAA4B,iBAAjBmS,EAAOjO,OAAuBozE,EAAM52E,EAASyR,EAAOjO,MAAOtD,EAAIZ,MAO1E,GAAI6D,KAAK4rB,OAAO23C,sBAAsBC,KAAgBiQ,EAAM52E,EAAS,QAASE,EAAIZ,KAAM,CAGzF,QAAgBhB,KADhBmyG,EAAUttG,KAAK2zT,mBAAmB92T,EADtB,QACsCE,EAAIZ,IAAK6D,KAAKqvT,eAAe/gT,GAAShL,IAEpF,WAX6E,CACjF,IAAIswT,EAAY/2T,EAASyR,EAAOjO,MAAOtD,EAAIZ,IAE3C,QAAgBhB,KADhBmyG,EAAUttG,KAAK2zT,mBAAmBC,EAAW5zT,KAAKqvT,eAAe/gT,GAAShL,IAEtE,OAWZ,OAAOgqG,GAEX85M,EAAS/rT,UAAU6tT,eAAiB,SAAU2K,GACtCA,EACA7zT,KAAK8zT,iBAGL9zT,KAAK+zT,eAGb3M,EAAS/rT,UAAUy4T,eAAiB,WAChC,IACIE,EADAj0T,EAAQC,KAEZA,KAAKgoH,QAAU,IAAIta,GAAU1tG,KAAKgB,SAC9B8uG,gBAAgB,EAChB6B,kBAAkB,EAClBzC,WAAY,IAAMm3M,GAClBn3S,OAAQ,SAAUrO,GACdd,EAAMmvG,WAAaruG,EAAE8xG,OAAOxrG,OAC5B,IAAI8sT,EAAWpuT,EAAQ9F,EAAMmvG,WAAY,IAAMqV,IAC3C2vM,EAAWruT,EAAQ9F,EAAMmvG,WAAY,IAAMm3M,IAK/C,GAJAtmT,EAAMo0T,OAAStuT,EAAQ9F,EAAMmvG,WAAY,IAAM82M,IAC3CjmT,EAAMspT,gBAAkB6K,GAAYn0T,EAAMmvG,WAAWprG,UAAUK,SAASsiT,MACxEyN,EAAWn0T,EAAMmvG,WAAWmR,qBAE3BtgH,EAAMmvG,aAAeruG,EAAEG,QAAQozT,WAAWH,KAAcC,GACzDn0T,EAAMmvG,WAAWprG,UAAUK,SAASogH,KAASxkH,EAAMmvG,WAAWprG,UAAUK,SAAS+hT,KACjFnmT,EAAMmvG,WAAWprG,UAAUK,SAAS6hT,KAAajmT,EAAMo0T,OAAOrwT,UAAUK,SAAS,aACjF,OAAO,EAEX,IAAIkwT,EAAYH,EAAStyT,WAAU,GACnC,GAAI6xE,EAAMhuE,EAAO,cAAe4uT,IAAY,CACxC,IAAI3+Q,EAAOv0C,EAAc,OAASkC,UAAW2pH,WAAa+4L,KAC1DsO,EAASnvT,aAAawwC,EAAM2+Q,EAASj6S,SAAS,IAElD,IAAInH,EAAWqhT,0BAA8Bv0T,EAAMkT,SAAW,KAAOlT,EAAMmT,UA1qDjF,QA0qDmG,KAC7F8gT,EAAa7yT,EAAc,OAASkC,UAAW4P,KACpCtR,YAAY0yT,GACvB,IAAIE,EAAOx0T,EAAMqyD,cAAc31D,OAC/B,GAAI83T,EAAO,GAAKx0T,EAAMkrT,qBAAuBlrT,EAAMo0T,OAAOrwT,UAAUK,SAAS4vM,IAAS,CAClF,IAAIygH,EAAQrzT,EAAc,QAAUkC,UA9pDxC,eA8pD8DrB,UAAW,GAAKuyT,IAC1EP,EAAWryT,YAAY6yT,GAK3B,OAHAh0T,SAASuL,KAAKpK,YAAYqyT,GAC1BxzT,SAASuL,KAAKrH,MAAM+0D,OAAS,GAC7B15D,EAAM8wG,SAAW9wG,EAAMktT,YAAYltT,EAAMo0T,QAClCH,GAEXvkN,UAAW,SAAU5uG,GACjB8C,GAAU5D,EAAMiB,SArrDjB,cAsrDC,IAAIuM,EAAYxN,EAAM00T,aAAa5zT,EAAEvE,MAAOyD,EAAO,KAAMc,EAAEsG,QACvDoG,EAAUmnT,YAAY5wT,UAAUK,SA3rDtC,aA4rDMoJ,EAAUsrB,QAAS,EAGnB94B,EAAMymB,QAAQ,gBAAiBjZ,GAE/BA,EAAUsrB,QACVxzB,EAAO2uT,GACP3vT,GAAatE,EAAMiB,SA/rDxB,cAgsDKjB,EAAMynT,iBAAkB,GAGxBznT,EAAMynT,iBAAkB,GAGhC92M,KAAM,SAAU7vG,GACZd,EAAMioH,QAAQhhH,eAAgB0rG,UAAYhmG,KAAO+mE,EAAM5yE,EAAEvE,MAAM20E,gBAAkBzlE,GAAQkb,SAAY,IAAM,MAC3G3mB,EAAM40T,WAAW9zT,EAAGmzT,IAExBjiN,SAAU,SAAUlxG,GAChBwD,GAAatE,EAAMiB,SA3sDpB,cA4sDCjB,EAAM60T,mBACN,IAAIC,EAAah0T,EAAEsG,OACf2tT,EAAYjvT,EAAQgvT,EAAY,gBAC/BA,GAAeC,IAAYD,EAAW/wT,UAAUK,SAASogH,MAC1Dl/G,EAAOxE,EAAEqO,QACT1O,SAASuL,KAAKrH,MAAM+0D,OAAS,IAEjC,IAAIlsD,EAAYxN,EAAM00T,aAAa5zT,EAAEvE,MAAOyD,EAAO80T,EAAYA,GAC/D90T,EAAMymB,QAAQ,eAAgBjZ,GAC1BA,EAAUsrB,SACNh4B,EAAEqO,OAAOzO,YACT4E,EAAOxE,EAAEqO,QAEb1O,SAASuL,KAAKrH,MAAM+0D,OAAS,IAEjC15D,EAAMynT,iBAAkB,KAGhCxnT,KAAK+0T,QAAU,IAAI3hN,GAAUpzG,KAAKgB,SAC9BlB,IAAK,SAAUe,GACN4yE,EAAM5yE,IAAOA,EAAEsG,OAAOrD,UAAUK,SAASoiT,MAC1C/lT,SAASuL,KAAKrH,MAAM+0D,OAAS,gBAGrCu7P,KAAM,SAAUn0T,GACZL,SAASuL,KAAKrH,MAAM+0D,OAAS,IAEjCw5C,KAAM,SAAUpyG,GACZd,EAAMk1T,WAAWp0T,OAI7BumT,EAAS/rT,UAAUs5T,WAAa,SAAU9zT,EAAGmzT,GACzC,IAAIc,EAAWjvT,EAAQhF,EAAEsG,OAAQ,gBAC7B+tT,EAAWrvT,EAAQhF,EAAEsG,OAAQ,IAAMk/S,IACnC3wQ,EAAOjwC,EAAO,cAAeuuT,GACjC3vT,GAAaqxC,IA9uDR,YA8uDwB8wQ,GA5uDvB,aACD,cA4uDLxmT,KAAK40T,mBACLp0T,SAASuL,KAAKrH,MAAM+0D,OAAS,GAC7B,IAAI31D,EAAYjD,EAAEsG,OAAOrD,UAIzB,GAHI9D,KAAKqpT,gBAAkB6L,IAAazhP,EAAM3vE,IAAcA,EAAUK,SAASsiT,MAC3EyO,EAAWr0T,EAAEsG,OAAOk5G,oBAEpBy0M,EAAU,CACV,IAAIK,EAAStvT,EAAQhF,EAAEsG,OAAQ,IAAM6+S,IACrC,IAAK8O,EAAShxT,UAAUK,SAASogH,KAAU2wM,IACrCC,EAAOf,WAAWp0T,KAAKm0T,UAAYn0T,KAAKo1T,aAAap1T,KAAKm0T,OAAQgB,GACpE,GAAIA,GAAUt0T,GAAMA,EAAEvE,MAAM2P,QAAU,EAAI,CACtCtI,GAAU+xC,GAAO8wQ,IACjB,IAAI6O,EAASl0T,EAAc,OAASkC,UAAWkjT,KAC3Ct0S,EAAQjS,KAAKqpT,kBACjB8L,EAAOjwT,aAAamwT,EAAQF,EAAO/6S,SAASnI,SAE3C,GAAIkjT,GAAUt0T,GAAMA,EAAEsG,OAAOuqC,aAAe,GAAK7wC,EAAEvE,MAAM2P,QAAWpL,EAAEsG,OAAOuqC,aAAe,GAAM,CACnG/tC,GAAU+xC,GAAO8wQ,IACb6O,EAASl0T,EAAc,OAASkC,UAAWkjT,KAC3Ct0S,EAAQjS,KAAKqpT,kBACjB8L,EAAOjwT,aAAamwT,EAAQF,EAAO/6S,SAASnI,SAG5CtO,GAAU+xC,GAtwDjB,iBAywD8B,OAAtB70C,EAAEsG,OAAO+K,UAAuBijT,EAAOf,WAAWp0T,KAAKm0T,SAAYn0T,KAAKo1T,aAAap1T,KAAKm0T,OAAQgB,GAIlGt0T,EAAEsG,OAAOrD,UAAUK,SAASoiT,IACjC5iT,GAAU+xC,GAAO8wQ,IAGjB7iT,GAAU+xC,GA/wDZ,eAwwDE/xC,GAAU+xC,GAAO8wQ,IACjBxmT,KAAKs1T,iBAAiBz0T,SAU1B8C,GAAU+xC,GAlxDT,aAmxDDl1C,SAASuL,KAAKrH,MAAM+0D,OAAS,cAEjCz5D,KAAKwmB,QAAQ,eAAgBxmB,KAAKy0T,aAAa5zT,EAAEvE,MAAO0D,KAAMa,EAAEsG,OAAQtG,EAAEsG,UAE9EigT,EAAS/rT,UAAU45T,WAAa,SAAUp0T,GAKtC,IAAK,IAFDmnH,EAFA/7G,EAAUpL,EAAEvE,MAAM2P,QAClB4oT,EAAah0T,EAAEsG,OAEfouT,EAAe10T,EAAEgwG,SAAS+B,UACrBz2G,EAAI,EAAGA,EAAIo5T,EAAa7tO,cAAcjrF,OAAQN,IACnD,GAAIo5T,EAAa7tO,cAAcvrF,aAAcmrT,EAAY,CACrDt/L,EAAUutM,EAAa7tO,cAAcvrF,GACrC,MAGR,GAAI6rH,GAAWA,EAAQ9Y,WAAY,CAC/B,IACIilN,EAAUtuT,EADGmiH,EAAQ9Y,WACS,IAAM82M,IACpCmP,EAAUtvT,EAAQgvT,EAAY,IAAM7O,IAGxC,GAFA3gT,EAAOxE,EAAE8yG,gBACTnzG,SAASuL,KAAKrH,MAAM+0D,OAAS,IACxB07P,GAAUA,EAAOf,WAAWD,IAAWn0T,KAAKo1T,aAAajB,EAAQgB,GAClE,OAEJ,GAAIntM,EAAQijM,sBAAwBkJ,EAAOrwT,UAAUK,SAAS4vM,KAAY9nM,EAAU,GAC/EpL,EAAEsG,OAAOuqC,aAAe,GAAKzlC,EAAWpL,EAAEsG,OAAOuqC,aAAe,IAE5D,CAAA,IADD45Q,EAAS1lT,EAAU,IAAMmuM,GAAQ/rF,EAAQhnH,SAC7C,IAAS7E,EAAI,EAAGA,EAAImvT,EAAO7uT,OAAQN,IAC3Bg5T,EAAOf,WAAW9I,EAAOnvT,KAAO6D,KAAKo1T,aAAa9J,EAAOnvT,GAAIg5T,IAGjEn1T,KAAKw1T,WAAWX,EAAYvJ,EAAOnvT,GAAIg5T,EAAQt0T,EAAGmnH,EAAS/7G,QAI/DjM,KAAKw1T,WAAWX,EAAYV,EAAQgB,EAAQt0T,EAAGmnH,EAAS/7G,GAGhEjM,KAAKwmB,QAAQ,cAAexmB,KAAKy0T,aAAa5zT,EAAEvE,MAAO0rH,EAAS6sM,EAAYh0T,EAAEsG,OAAQtG,EAAEgwG,SAASgC,kBAErGu0M,EAAS/rT,UAAUm6T,WAAa,SAAUX,EAAYV,EAAQgB,EAAQt0T,EAAGmnH,EAAS/7G,GACzEkoT,EAAOrwT,UAAUK,SAAS,cAAiBgxT,EAAOrxT,UAAUK,SAAS,eAC1C,OAAxB0wT,EAAW3iT,SACXlS,KAAKy1T,kBAAkBtB,EAAQgB,EAAQt0T,EAAGmnH,GAG1ChoH,KAAK01T,gBAAgBvB,EAAQgB,EAAQntM,EAAS,KAAMnnH,EAAGoL,KAInEm7S,EAAS/rT,UAAUo6T,kBAAoB,SAAUtB,EAAQgB,EAAQt0T,EAAGmnH,GAChE,IAGIkoL,EAHAylB,EAAS9vT,EAAQsvT,EAAQ,IAAMjP,IAC/B0P,EAAe/vT,EAAQsuT,EAAQ,IAAMjO,IACrC2P,EAAehwT,EAAQ+vT,EAAc,IAAM5P,IAE3CnlT,EAAEsG,OAAOuqC,aAAe,GAAK7wC,EAAEvE,MAAM2P,QAAUpL,EAAEsG,OAAOuqC,aAAe,EACvEw+P,GAAM,EAEDrvS,EAAEvE,MAAM2P,QAAU,IACvBikS,GAAM,GAEVylB,EAAOzwT,aAAaivT,EAAQjkB,EAAMrvS,EAAEsG,OAAStG,EAAEsG,OAAOk5G,oBACtDrgH,KAAK81T,cAAcF,EAAcC,GACjC71T,KAAK+1T,gBAAgB5B,GACjBnsM,EAAQhnH,QAAQsC,KAAOtD,KAAKgB,QAAQsC,GACpCtD,KAAK2rT,cAGL3jM,EAAQguM,iBACRh2T,KAAKg2T,mBAGb5O,EAAS/rT,UAAUq6T,gBAAkB,SAAUvB,EAAQgB,EAAQntM,EAAS/1G,EAAOpR,EAAGoU,GAC9E,IAAI2gT,EAAe/vT,EAAQsuT,EAAQ,IAAMjO,IACrC2P,EAAehwT,EAAQ+vT,EAAc,IAAM5P,IAC3CiQ,EAAepwT,EAAQsvT,EAAQ,IAAMjP,IACzC,GAAIrlT,GAAMoU,EAAM,EACZghT,EAAa/wT,aAAaivT,EAAQgB,QAEjC,GAAIt0T,GAAMA,EAAEsG,OAAOuqC,aAAe,GAAKz8B,EAAOpU,EAAEsG,OAAOuqC,aAAe,GACvEukR,EAAa/wT,aAAaivT,EAAQgB,EAAO90M,wBAExC,CACD,IAAIs1M,EAAS31T,KAAKk2T,aAAaf,GAC/BQ,EAAOzwT,aAAaivT,EAAQwB,EAAOpkT,WAAWU,IAElDjS,KAAK81T,cAAcF,EAAcC,GACjC71T,KAAK+1T,gBAAgB5B,GACjBnsM,EAAQhnH,QAAQsC,KAAOtD,KAAKgB,QAAQsC,GACpCtD,KAAK2rT,cAGL3jM,EAAQguM,iBACRh2T,KAAKg2T,mBAGb5O,EAAS/rT,UAAU66T,aAAe,SAAUf,GACxC,IAAIgB,EAAW1wT,EAAO,cAAe0vT,GACjCgB,GAAYA,EAASryT,UAAUK,SAAS4hT,KACxC/lT,KAAK4tT,aAAauH,EAAQgB,EAAU,MAExC,IAAIR,EAASlwT,EAAO,IAAMygT,GAAYiP,GACtC,GAAI1hP,EAAMkiP,GAAS,CACf31T,KAAKwmB,QAAQ,gBAAiBxmB,KAAKsuT,eAAe6G,EAAQ,OACtD1hP,EAAM0iP,IACNnoL,GAASusD,aAAa46H,EAAQrP,GAAa9lT,KAAKs8L,gBAGpDj4L,GADWoB,EAAO,cAAe0vT,IACbpP,IACpB4P,EAAS3nL,GAAS0nD,cAAe,KAAM11L,KAAKs8L,gBAC5C64H,EAAOxzT,YAAYg0T,GACnBR,EAAO3xT,aAAa,gBAAiB,QACrCa,GAAa8wT,GAASxO,IACtB3mT,KAAKwmB,QAAQ,eAAgBxmB,KAAKsuT,eAAe6G,EAAQ,OAE7D,OAAOQ,GAEXvO,EAAS/rT,UAAUy6T,cAAgB,SAAUF,EAAcC,GACvD,GAAIA,GAAmD,IAAnCD,EAAazwP,kBAAyB,CACtD,IAAIixP,EAAW3wT,EAAO,cAAeowT,GACrCxwT,EAAOuwT,GACPvwT,EAAO+wT,GACPP,EAAanqT,gBAAgB,mBAGrC07S,EAAS/rT,UAAU06T,gBAAkB,SAAU5B,GAC3C,IAAIhiK,EAAQnyJ,KAAKs/D,QAAQ60P,EAAQ,IAAMjO,IAAYzpT,OACnD03T,EAAO3wT,aAAa,aAAc,GAAK2uJ,GACvCnyJ,KAAKq2T,qBAAqB5wT,EAAO,IAAMygT,GAAYiO,GAAShiK,EAAQ,IAExEi1J,EAAS/rT,UAAUg7T,qBAAuB,SAAUr1T,EAASmxJ,GACzD,IAAK1+E,EAAMzyE,GAEP,IAAK,IADDwqT,EAASxqT,EAAQuQ,WACZpV,EAAI,EAAG0F,EAAM2pT,EAAO/uT,OAAQN,EAAI0F,EAAK1F,IAAK,CAC/C,IAAIswT,EAAQjB,EAAOrvT,GACnBswT,EAAMjpT,aAAa,aAAc,GAAK2uJ,GACtCnyJ,KAAKq2T,qBAAqB5wT,EAAO,IAAMygT,GAAYuG,GAAQt6J,EAAQ,KAI/Ei1J,EAAS/rT,UAAUi6T,iBAAmB,SAAUz0T,GAC5C,IAAIqvS,EACArvS,EAAEvE,MAAM2P,QAAUpL,EAAEsG,OAAOuqC,aAAe,EAC1Cw+P,GAAM,EAEDrvS,EAAEvE,MAAM2P,QAAU,IACvBikS,GAAM,GAEV,IAAImlB,EAASl0T,EAAc,OAASkC,UAAWkjT,KAC3Ct0S,EAAQjS,KAAKqpT,cAAiBnZ,EAAM,EAAI,EAAMA,EAAM,EAAI,EAC5DrvS,EAAEsG,OAAOjC,aAAamwT,EAAQx0T,EAAEsG,OAAOiT,SAASnI,KAEpDm1S,EAAS/rT,UAAUu5T,iBAAmB,WAClC,IAAI0B,EAAS7wT,EAAO,IAAM8gT,IACtB+P,GACAjxT,EAAOixT,IAGflP,EAAS/rT,UAAU04T,YAAc,WACzB/zT,KAAKgoH,SAAWhoH,KAAK+0T,UACrB/0T,KAAKgoH,QAAQ11G,UACbtS,KAAK+0T,QAAQziT,YAGrB80S,EAAS/rT,UAAUo5T,aAAe,SAAUn4T,EAAOS,EAAK83T,EAAY1tT,EAAQovT,GACxE,IAAIpB,EAASN,EAAahvT,EAAQgvT,EAAY,IAAM7O,IAAY,KAC5DwQ,EAAWrB,EAASn1T,KAAKitT,YAAYkI,GAAU,KAGnD,OACIt8R,QAAQ,EACRv8B,MAAOA,EACPo4T,YALc33T,EAAMA,EAAIo3T,OAASoC,EAMjCE,gBALkB15T,EAAMA,EAAI8zG,SAAW,KAMvC6lN,YAAavB,EACbwB,gBAAiBH,EACjBrvT,OAAQA,IAGhBigT,EAAS/rT,UAAUu7T,WAAa,SAAUC,GACtC,IAAIh1T,EAAM7B,KAAKiwT,OAAOxzT,OACtB,GAAIo6T,EACA,IAAK,IAAI16T,EAAI,EAAGA,EAAI0F,EAAK1F,IACrB6D,KAAKgrT,cAAchrT,KAAKiwT,OAAO9zT,SAInC,IAASA,EAAI,EAAGA,EAAI0F,EAAK1F,IAAK,CAE1BkJ,EADaI,EAAO,IAAMghT,GAASzmT,KAAKiwT,OAAO9zT,OAK3DirT,EAAS/rT,UAAU2vT,cAAgB,SAAUntS,GACzC,IAAIi5S,EAAS31T,EAAc,OAASkC,UAAWojT,KAC/C5oS,EAAK3Y,aAAa4xT,EAAQj5S,EAAKtM,WAAW,KAE9C61S,EAAS/rT,UAAU07T,eAAiB,SAAUF,GAC1C,GAAIA,EAEA,IAAK,IAAIz4T,EAAK,EAAG44T,EADJpxT,EAAU,IAAMogT,GAAW,+BAAgChmT,KAAKgB,SACzC5C,EAAK44T,EAASv6T,OAAQ2B,IAAM,CAClD44T,EAAS54T,GACfoF,aAAa,gBAAiB,cAKtC,IAAK,IAAIX,EAAK,EAAGo0T,EADJrxT,EAAU,IAAMogT,GAAW,0BAA2BhmT,KAAKgB,SACpC6B,EAAKo0T,EAASx6T,OAAQoG,IAAM,CAClDo0T,EAASp0T,GACf6I,gBAAgB,mBAIhC07S,EAAS/rT,UAAU67T,gBAAkB,SAAUl2T,EAASmxJ,EAAOglK,GAC3D,GAAIhlK,EAAQ,IAAM1+E,EAAMzyE,GAEpB,IAAK,IADDwqT,EAASxrT,KAAKo3T,gBAAgBD,EAAoBn2T,EAAQuQ,YACrDpV,EAAI,EAAG0F,EAAM2pT,EAAO/uT,OAAQN,EAAI0F,EAAK1F,IAAK,CAC/C,IAAIswT,EAAQjB,EAAOrvT,GACfu5C,EAAOjwC,EAAO,IAAMqgT,GAAargT,EAAO,IAAM4gT,GAAUoG,IACvDh5O,EAAM/9B,IACP11C,KAAK6tT,aAAapB,EAAO/2Q,EAAM,MAEnC11C,KAAKk3T,gBAAgBzxT,EAAO,IAAMygT,GAAYuG,GAAQt6J,EAAQ,EAAGglK,KAI7E/P,EAAS/rT,UAAUg8T,iBAAmB,SAAUF,GAE5C,IAAK,IADDzH,EAAS1vT,KAAKo3T,gBAAgBD,EAAoBvxT,EAAU,IAAMkgT,GAAa9lT,KAAKgB,UAC/E7E,EAAI,EAAG0F,EAAM6tT,EAAOjzT,OAAQN,EAAI0F,EAAK1F,IAAK,CAC/C,IAAIu5C,EAAOg6Q,EAAOvzT,GACdswT,EAAQ5mT,EAAQ6vC,EAAM,IAAMswQ,IAChChmT,KAAK6tT,aAAapB,EAAO/2Q,EAAM,QAGvC0xQ,EAAS/rT,UAAUi8T,cAAgB,SAAUt2T,EAASmxJ,EAAOglK,GACzD,GAAIhlK,EAAQ,IAAM1+E,EAAMzyE,GAEpB,IAAK,IADDyqT,EAASzrT,KAAKo3T,gBAAgBD,EAAoBn2T,EAAQuQ,YACrDpV,EAAI,EAAG0F,EAAM4pT,EAAOhvT,OAAQN,EAAI0F,EAAK1F,IAAK,CAC/C,IAAIswT,EAAQhB,EAAOtvT,GACfu5C,EAAOjwC,EAAO,IAAMsgT,GAAYtgT,EAAO,IAAM4gT,GAAUoG,IACtDh5O,EAAM/9B,IACP11C,KAAK4tT,aAAanB,EAAO/2Q,EAAM,MAEnC11C,KAAKs3T,cAAc7xT,EAAO,IAAMygT,GAAYuG,GAAQt6J,EAAQ,EAAGglK,KAI3E/P,EAAS/rT,UAAUk8T,eAAiB,SAAUJ,GAE1C,IAAK,IADDK,EAASx3T,KAAKo3T,gBAAgBD,EAAoBvxT,EAAU,IAAMmgT,GAAY/lT,KAAKgB,UAC9E7E,EAAI,EAAG0F,EAAM21T,EAAO/6T,OAAQN,EAAI0F,EAAK1F,IAAK,CAC/C,IAAIu5C,EAAO8hR,EAAOr7T,GACdswT,EAAQ5mT,EAAQ6vC,EAAM,IAAMswQ,IAChChmT,KAAK4tT,aAAanB,EAAO/2Q,EAAM,MAAM,KAG7C0xQ,EAAS/rT,UAAU+7T,gBAAkB,SAAUD,EAAoBrlQ,GAC/D,IAAI2lQ,EAASj5T,MAAMnD,UAAUgG,MAAMC,KAAKwwD,GACxC,GAAIqlQ,EACA,IAAK,IAAIh7T,EAAI,EAAGA,EAAIs7T,EAAOh7T,OAAQN,IAC1BsI,EAAUgzT,EAAOt7T,MAClBs7T,EAAOpvS,OAAOlsB,EAAG,GACjBA,KAIZ,OAAOs7T,GAEXrQ,EAAS/rT,UAAUq8T,WAAa,SAAUn3T,GACtC,IAAIq1T,EAAe/vT,EAAQtF,EAAM,IAAM2lT,IACnC2P,EAAehwT,EAAQ+vT,EAAc,IAAM5P,IAC/C3gT,EAAO9E,GACPP,KAAK81T,cAAcF,EAAcC,GACjC71T,KAAKg2T,kBAET5O,EAAS/rT,UAAU26T,eAAiB,WAChCh2T,KAAK2rT,aACL3rT,KAAK23T,uBAETvQ,EAAS/rT,UAAUswT,WAAa,WAC5B3rT,KAAKiwT,OAASzxT,MAAMnD,UAAUgG,MAAMC,KAAKsE,EAAU,IAAMogT,GAAUhmT,KAAKgB,WAE5EomT,EAAS/rT,UAAUs8T,oBAAsB,WACrC33T,KAAKgH,eAAgBorD,mBAAqB,GAC1C,IAAIk5P,EAAS1lT,EAAU,IAAMmuM,GAAQ/zM,KAAKgB,SAC1ChB,KAAKutT,iBAAiBjC,IAE1BlE,EAAS/rT,UAAUu8T,cAAgB,SAAU9lQ,EAAOpsD,EAAUmyT,GAC1D,IAAK,IAAI17T,EAAI,EAAG0F,EAAMiwD,EAAMr1D,OAAQN,EAAI0F,EAAK1F,IAAK,CAC9C,IAAIswT,EAAQzsT,KAAKutB,WAAWukC,EAAM31D,IAClC,IAAIs3E,EAAMg5O,GAAV,CAGA,IAAI/2Q,EAAOjwC,EAAO,IAAMC,EAAUD,EAAO,IAAM4gT,GAAUoG,IACpDh5O,EAAM/9B,KACPmiR,EAAW73T,KAAK4tT,aAAanB,EAAO/2Q,EAAM,MAAQ11C,KAAK6tT,aAAapB,EAAO/2Q,EAAM,UAI7F0xQ,EAAS/rT,UAAUy8T,cAAgB,SAAUhmQ,EAAOqjQ,EAAQljT,EAAO8lT,GAC/D,IAAI5lK,EAAQgjK,EAAS35S,WAAW25S,EAAOtiT,aAAa,eAAiB,EAAI,EACrEklT,GACA/3T,KAAKg4T,aAAa7lK,GAKtB,IAAK,IAHDvhC,EAAKod,GAASqoD,uBAAuBvkI,EAAO9xD,KAAKs8L,eAAgBnqC,GACjEwjK,EAASR,EAASn1T,KAAKk2T,aAAaf,GAAU1vT,EAAO,IAAMygT,GAAYlmT,KAAKgB,SAC5Ei3T,EAAUtC,EAAOpkT,WAAWU,GACvB9V,EAAI,EAAGA,EAAIy0H,EAAGn0H,OAAQN,IAC3Bw5T,EAAOzwT,aAAa0rH,EAAGz0H,GAAI87T,GAE/Bj4T,KAAK0qT,aAAaiL,IAEtBvO,EAAS/rT,UAAU28T,aAAe,SAAU7lK,GACxC,IAAI7jJ,EAAoB,IAAV6jJ,EAAenyJ,KAAK4rB,OAAS5rB,KAAK8uT,eAAe9uT,KAAK4rB,OAAQumI,EAAQ,EAAG,GACvFnyJ,KAAK0oT,eAAep6S,IAExB84S,EAAS/rT,UAAUqtT,eAAiB,SAAUp6S,GAC1C,IAAIhE,EAAOtK,KAAK++D,oBAAoBzwD,GACpCtO,KAAKs8L,eAAe1wK,OAASthB,EAC7BtK,KAAKs8L,eAAe1wK,OAAOgC,IAAMtjB,EAAK3D,eAAe,eAAiB2D,EAAK4tT,YAAc,eAE7F9Q,EAAS/rT,UAAU88T,gBAAkB,SAAUrmQ,GAC3C,IAAK,IAAI31D,EAAI,EAAG0F,EAAMiwD,EAAMr1D,OAAQN,EAAI0F,EAAK1F,IAAK,CAC9C,IAAIswT,EAAQzsT,KAAKutB,WAAWukC,EAAM31D,IAC9Bs3E,EAAMg5O,KAGVA,EAAMjpT,aAAa,gBAAiB,QACpCG,GAAU8oT,GAplER,gBAulEVrF,EAAS/rT,UAAU+8T,eAAiB,SAAUtmQ,GAC1C,IAAK,IAAI31D,EAAI,EAAG0F,EAAMiwD,EAAMr1D,OAAQN,EAAI0F,EAAK1F,IAAK,CAC9C,IAAIswT,EAAQzsT,KAAKutB,WAAWukC,EAAM31D,IAC9Bs3E,EAAMg5O,KAGVA,EAAM/gT,gBAAgB,iBACtBrH,GAAaooT,GA9lEX,gBAimEVrF,EAAS/rT,UAAUwtT,cAAgB,WAC/B,IAAI7kT,EAAM6B,EAAQ7F,KAAKgB,QAAS,aAChChB,KAAK4qT,WAAan3O,EAAMzvE,GAAO,GAvlE3B,WAylERojT,EAAS/rT,UAAU+3T,gBAAkB,SAAU1C,GAC3CnrT,GAAanB,IAAIssT,EAAQ,OAAQ1wT,KAAKuzT,cAAevzT,OAEzDonT,EAAS/rT,UAAU4tT,kBAAoB,SAAU4K,GAC7C,GAAIA,EAAQ,CACR,IAAIwE,EAAUr4T,KACdA,KAAKs4T,aAAe,IAAIz+M,GAAM75G,KAAKgB,SAC/B06G,IAAK,SAAU76G,GACQ,IAAfA,EAAEk5G,WACFl5G,EAAEq6G,cAAc11F,iBAChB6yS,EAAQrF,eAAenyT,EAAEq6G,wBAMjCl7G,KAAKs4T,cACLt4T,KAAKs4T,aAAahmT,WAI9B80S,EAAS/rT,UAAUk9T,eAAiB,SAAU1E,GAC1C,GAAIA,EAAQ,CACR,IAAI2E,EAAUx4T,KACdA,KAAKy4T,cAAgB,IAAI5+M,GAAM75G,KAAKgB,SAChC06G,IAAK,SAAU76G,GACX23T,EAAQr5M,aAAat+G,WAKzBb,KAAKy4T,eACLz4T,KAAKy4T,cAAcnmT,WAI/B80S,EAAS/rT,UAAUq9T,kBAAoB,SAAU7E,GAC7C,IAAI9zT,EAAQC,KACZ,GAAI6zT,EAAQ,CACR,IAAI8E,EAAU34T,KACdA,KAAK44T,eAAiB,IAAI/+M,GAAM75G,KAAKgB,SACjC06G,IAAK,SAAU76G,IACgB,UAAvBd,EAAMuwT,cAAoD,aAAvBvwT,EAAMuwT,cAA8C,IAAfzvT,EAAEk5G,WAC1E4+M,EAAQnI,cAAc3vT,WAM9Bb,KAAK44T,gBACL54T,KAAK44T,eAAetmT,WAIhC80S,EAAS/rT,UAAUwkH,iBAAmB,SAAUh/G,GAC5Cb,KAAKqnT,iBAAkB,GACnBxmT,EAAE41G,UAAY51G,EAAEgnB,UAChBhnB,EAAE2kB,iBAEF3kB,EAAEgnB,SAAW7nB,KAAKirT,qBAClB1lT,GAAanB,IAAIpE,KAAKgB,QAAS,cAAehB,KAAKwtT,mBAAoBxtT,OAI/EonT,EAAS/rT,UAAUmyT,mBAAqB,SAAU3sT,GAC9CA,EAAE2kB,kBAEN4hS,EAAS/rT,UAAUkpB,WAAa,WAC5Bhf,GAAanB,IAAIpE,KAAKgB,QAAS,YAAahB,KAAK6/G,iBAAkB7/G,MACnEA,KAAKu4T,gBAAe,GACpBv4T,KAAK04T,mBAAkB,GACvBnzT,GAAanB,IAAIpE,KAAKgB,QAAS,QAAShB,KAAKy6H,QAASz6H,MACtDuF,GAAanB,IAAIpE,KAAKgB,QAAS,OAAQhB,KAAK06H,SAAU16H,MACtDuF,GAAanB,IAAIpE,KAAKgB,QAAS,YAAahB,KAAKqjN,YAAarjN,MAC9DuF,GAAanB,IAAIpE,KAAKgB,QAAS,WAAYhB,KAAKsjN,aAActjN,MAC9DA,KAAK+5I,eAAiB,IAAI3jC,GAAep2G,KAAKgB,SAC1Ck2G,UAAWl3G,KAAKg6I,iBAAiB1+I,KAAK0E,MACtC42G,WAAY52G,KAAK42G,WACjB/mC,UAAW,aAGnBu3O,EAAS/rT,UAAUmjH,aAAe,WAC9Bj5G,GAAahB,OAAOvE,KAAKgB,QAAS,YAAahB,KAAK6/G,kBACpD7/G,KAAKu4T,gBAAe,GACpBv4T,KAAK04T,mBAAkB,GACvBnzT,GAAahB,OAAOvE,KAAKgB,QAAS,QAAShB,KAAKy6H,SAChDl1H,GAAahB,OAAOvE,KAAKgB,QAAS,OAAQhB,KAAK06H,UAC/Cn1H,GAAahB,OAAOvE,KAAKgB,QAAS,YAAahB,KAAKqjN,aACpD99M,GAAahB,OAAOvE,KAAKgB,QAAS,WAAYhB,KAAKsjN,cACnDtjN,KAAK+5I,eAAeznI,WAExB80S,EAAS/rT,UAAUikE,QAAU,SAAUt+D,EAAS0E,GAG5C,IAFA,IAAImzT,KACA/yT,EAAK9E,EAAQP,YACTgzE,EAAM3tE,IACNE,EAAQF,EAAIJ,IACZmzT,EAAQr0T,KAAKsB,GAEjBA,EAAKA,EAAGrF,WAEZ,OAAOo4T,GAEXzR,EAAS/rT,UAAU+5T,aAAe,SAAU90T,EAAQD,GAEhD,IADA,IAAIE,EAAOF,EAAMI,YACTgzE,EAAMlzE,IAAO,CACjB,GAAIA,IAASD,EACT,OAAO,EAEXC,EAAOA,EAAKE,WAEhB,OAAO,GAEX2mT,EAAS/rT,UAAUsmB,YAAc,SAAU3gB,GACvC2C,GAAU3C,GAAUmlT,IACpB3rS,IACIrT,OAAQnG,EACRgV,MAAOxK,GAAQkb,SAAW,GAAK,KAEnC/E,GAAY3gB,IAEhBomT,EAAS/rT,UAAUqnB,YAAc,SAAU1hB,GACvC0hB,GAAY1hB,GACZA,EAAQgB,UAAY,GACpBqC,GAAarD,GAAUmlT,KAE3BiB,EAAS/rT,UAAUy9T,gBAAkB,SAAUhnQ,GAC3CA,EAAQjC,KAAKuB,MAAMvB,KAAKC,UAAUgC,IAClC9xD,KAAK+4T,WAAW/4T,KAAK8oT,cACjBh3P,EAAMr1D,OAAS,GACfuD,KAAKg5T,SAASlnQ,IAUtBs1P,EAAS/rT,UAAUmsF,kBAAoB,SAAUiF,EAASC,GACtD,IAAK,IAAItuF,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKmvF,GAAUruF,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAE9D,OADWyE,EAAGzE,IAEV,IAAK,mBACD4B,KAAKkpT,eAAelpT,KAAKmpT,kBACzB,MACJ,IAAK,eACDnpT,KAAKipT,kBAAkBjpT,KAAK8gE,cAC5B,MACJ,IAAK,sBACD,GAAI9gE,KAAKoyD,cAAc31D,OAAS,EAAG,CAC/B,IAAI6wT,EAAQttT,KAAKutB,WAAWvtB,KAAKoyD,cAAc,IAC/CpyD,KAAK4oT,UAAW,EAChB5oT,KAAK+vT,kBACL/vT,KAAKurT,WAAW+B,EAAO,MACvBttT,KAAK4oT,UAAW,EAEpB5oT,KAAK0pT,eAAe1pT,KAAKirT,qBACzBjrT,KAAK+2T,eAAe/2T,KAAKirT,qBACzB,MACJ,IAAK,eACGjrT,KAAK42L,eACL52L,KAAK8oT,aAAep8N,EAAQo8N,aAC5B9oT,KAAK84T,gBAAgBrsO,EAAQq8N,eAEjC,MACJ,IAAK,WACD9oT,KAAKw1H,YAAY9oC,EAAQz5E,SAAUw5E,EAAQx5E,UAC3C,MACJ,IAAK,YACDjT,KAAKyhH,eACL,MACJ,IAAK,WACDzhH,KAAK04T,mBAAkB,GACvB14T,KAAKgpT,kBACLhpT,KAAK04T,mBAAkB,GACvB,MACJ,IAAK,SACD14T,KAAK0oT,eAAe1oT,KAAK4rB,QACzB5rB,KAAK8yT,gBACL,MACJ,IAAK,gBACD9yT,KAAKopT,WAAWppT,KAAKqpT,eACrBrpT,KAAK42T,WAAW52T,KAAKqpT,eACrB,MACJ,IAAK,eACDrpT,KAAKspT,eAAiBtpT,KAAKi6B,iBAAiBj6B,KAAKupT,cACjDvpT,KAAK8yT,gBACL,MACJ,IAAK,gBACD9yT,KAAK+vT,kBACL/vT,KAAKgH,eAAgBorD,cAAeq6B,EAAQr6B,gBAAiB,GAC7DpyD,KAAKotT,oBACL,MACJ,IAAK,eAGL,IAAK,YACDptT,KAAK8yT,mBAQrB1L,EAAS/rT,UAAUiX,QAAU,WACzBtS,KAAKgB,QAAQ0K,gBAAgB,yBAC7B1L,KAAKgB,QAAQ0K,gBAAgB,YAC7B1L,KAAKw+G,eACLx+G,KAAKipT,mBAAkB,GACvBjpT,KAAK+xH,WACL/xH,KAAKypT,eACLzpT,KAAKw1H,YAAYx1H,KAAKiT,SAAU,MAChCjT,KAAKkpT,gBAAe,GACpBlpT,KAAKopT,YAAW,GAChBppT,KAAKgB,QAAQgB,UAAY,GACzBmpF,EAAO9vF,UAAUiX,QAAQhR,KAAKtB,OASlConT,EAAS/rT,UAAU49T,SAAW,SAAUnnQ,EAAO3qD,EAAQ8K,GACnD,IAAIwhE,EAAM3hB,GAAV,CAGA,IAAIqjQ,EAASn1T,KAAKutB,WAAWpmB,GAE7B,GADA2qD,EAAQ9xD,KAAKyqT,cAAc34P,GACvB9xD,KAAK4rB,OAAO23C,sBAAsBC,GAClCxjE,KAAK83T,cAAchmQ,EAAOqjQ,EAAQljT,GAAO,QAExC,GAAsB,IAAlBjS,KAAKqkF,SACVrkF,KAAK83T,cAAchmQ,EAAOqjQ,EAAQljT,QAGlC,GAAIkjT,EACAn1T,KAAK83T,cAAchmQ,EAAOqjQ,EAAQljT,QAGlC,IAAK,IAAI9V,EAAI,EAAGA,EAAI21D,EAAMr1D,OAAQN,IAAK,CACnC,IAAI02T,EAAMh2T,EAASmD,KAAK4rB,OAAOs+R,SAAUp4P,EAAM31D,IAC/Cg5T,EAAStC,EAAM7yT,KAAKutB,WAAWslS,EAAI3lT,YAAc2lT,EACjD7yT,KAAK83T,eAAehmQ,EAAM31D,IAAKg5T,EAAQljT,MAWvDm1S,EAAS/rT,UAAU69T,UAAY,SAAU34T,GACrC,IAAIyD,EAAMhE,KAAKutB,WAAWhtB,GACrBkzE,EAAMzvE,IACPhE,KAAKixT,cAAcjtT,EAAK,OAQhCojT,EAAS/rT,UAAU29T,SAAW,SAAUlnQ,GAChC9xD,KAAK42L,cACL52L,KAAKusT,iBAAiBz6P,GAAO,IAWrCs1P,EAAS/rT,UAAU89T,YAAc,SAAUrnQ,EAAOqgG,EAAOglK,GAChD1jP,EAAM3hB,GAIHqgG,EAAQ,EACRnyJ,KAAKk3T,gBAAgBzxT,EAAO,IAAMygT,GAAYlmT,KAAKgB,SAAUmxJ,EAAOglK,GAGpEn3T,KAAKq3T,iBAAiBF,GAP1Bn3T,KAAK43T,cAAc9lQ,EAAOg0P,IAAa,IAe/CsB,EAAS/rT,UAAU+9T,aAAe,SAAUtnQ,GACnC2hB,EAAM3hB,IACP9xD,KAAKm4T,gBAAgBrmQ,IAO7Bs1P,EAAS/rT,UAAUg+T,YAAc,SAAUvnQ,GAClC2hB,EAAM3hB,IACP9xD,KAAKo4T,eAAetmQ,IAS5Bs1P,EAAS/rT,UAAUi+T,cAAgB,SAAU/4T,GACzC,IAAIksT,EAAQzsT,KAAKutB,WAAWhtB,GAC5B,IAAIkzE,EAAMg5O,GAAV,CAGA,IAAIntP,EAAUt/D,KAAKs/D,QAAQmtP,EAAO,IAAMzG,IACxChmT,KAAKu5T,UAAUj6P,GACfn/D,WAAW,WAAcssT,EAAM76M,gBAAe,IAAU,OAU5Dw1M,EAAS/rT,UAAUk+T,UAAY,SAAUznQ,EAAOqgG,EAAOglK,GAC9C1jP,EAAM3hB,GAIHqgG,EAAQ,EACRnyJ,KAAKs3T,cAAc7xT,EAAO,IAAMygT,GAAYlmT,KAAKgB,SAAUmxJ,EAAOglK,GAGlEn3T,KAAKu3T,eAAeJ,GAPxBn3T,KAAK43T,cAAc9lQ,EAAOi0P,IAAY,IAe9CqB,EAAS/rT,UAAUm+T,QAAU,SAAUj5T,GACnC,IAAIyD,EAAMhE,KAAKutB,WAAWhtB,GAC1B,OAAOP,KAAKitT,YAAYjpT,GAAK,IAQjCojT,EAAS/rT,UAAUo+T,UAAY,SAAUC,EAAavyT,EAAQ8K,GAC1D,IAAIkjT,EAASn1T,KAAKutB,WAAWpmB,GAC7B,IAAIssE,EAAM0hP,GAGV,IAAK,IAAIh5T,EAAI,EAAGA,EAAIu9T,EAAYj9T,OAAQN,IAAK,CACzC,IAAIg4T,EAASn0T,KAAKutB,WAAWmsS,EAAYv9T,IACrCs3E,EAAM0gP,IAAWgB,EAAOf,WAAWD,IAAWn0T,KAAKo1T,aAAajB,EAAQgB,IAG5En1T,KAAK01T,gBAAgBvB,EAAQgB,EAAQn1T,KAAMiS,KAOnDm1S,EAAS/rT,UAAUs+T,YAAc,SAAU7nQ,GACvC,IAAK2hB,EAAM3hB,GACP,IAAK,IAAI31D,EAAI,EAAG0F,EAAMiwD,EAAMr1D,OAAQN,EAAI0F,EAAK1F,IAAK,CAC9C,IAAIswT,EAAQzsT,KAAKutB,WAAWukC,EAAM31D,IAC9Bs3E,EAAMg5O,IAGVzsT,KAAK03T,WAAWjL,KAS5BrF,EAAS/rT,UAAUu+T,WAAa,SAAUzyT,EAAQ8pC,GAC9C,IAAIwiC,EAAMtsE,KAAWssE,EAAMxiC,IAAajxC,KAAK8gE,aAA7C,CAGA,IAAI2rP,EAAQzsT,KAAKutB,WAAWpmB,GAC5B,IAAIssE,EAAMg5O,GAAV,CAGA,IAAI+G,EAAS/tT,EAAO,IAAMwgT,GAAUwG,GACpCzsT,KAAKkzT,cAAczG,GACnB,IAAIl/S,EAAYvN,KAAKmzT,aAAa1G,EAAO,KAAM,MAC/CzsT,KAAKwmB,QAAQ,cAAejZ,GACxBA,EAAUsrB,QAGd74B,KAAKyzT,cAAchH,EAAO+G,EAAQviR,GAAS,MAO/Cm2Q,EAAS/rT,UAAU09T,WAAa,SAAUjnQ,GAClC9xD,KAAK42L,cACL52L,KAAKusT,iBAAiBz6P,GAAO,IAGrC+4B,IACI3jF,GAAS,IACVkgT,EAAS/rT,UAAW,wBAAoB,GAC3CwvF,IACI3jF,GAAS,IACVkgT,EAAS/rT,UAAW,oBAAgB,GACvCwvF,IACI3jF,GAAS,IACVkgT,EAAS/rT,UAAW,2BAAuB,GAC9CwvF,IACI9iF,KAAYo/S,KACbC,EAAS/rT,UAAW,iBAAa,GACpCwvF,IACI3jF,KACDkgT,EAAS/rT,UAAW,oBAAgB,GACvCwvF,IACI3jF,EAAS,KACVkgT,EAAS/rT,UAAW,gBAAY,GACnCwvF,IACI3jF,GAAS,IACVkgT,EAAS/rT,UAAW,yBAAqB,GAC5CwvF,IACI3jF,GAAS,IACVkgT,EAAS/rT,UAAW,iBAAa,GACpCwvF,IACI3jF,EAAS,SACVkgT,EAAS/rT,UAAW,gBAAY,GACnCwvF,IACI9iF,KAAYk/S,KACbG,EAAS/rT,UAAW,cAAU,GACjCwvF,IACI3jF,GAAS,IACVkgT,EAAS/rT,UAAW,qBAAiB,GACxCwvF,IACI3jF,KACDkgT,EAAS/rT,UAAW,oBAAgB,GACvCwvF,IACI3jF,KACDkgT,EAAS/rT,UAAW,qBAAiB,GACxCwvF,IACI3jF,EAAS,SACVkgT,EAAS/rT,UAAW,iBAAa,GACpCwvF,IACI3jF,GAAS,IACVkgT,EAAS/rT,UAAW,oBAAgB,GACvCwvF,IACI/hF,KACDs+S,EAAS/rT,UAAW,eAAW,GAClCwvF,IACI/hF,KACDs+S,EAAS/rT,UAAW,iBAAa,GACpCwvF,IACI/hF,KACDs+S,EAAS/rT,UAAW,gBAAY,GACnCwvF,IACI/hF,KACDs+S,EAAS/rT,UAAW,iBAAa,GACpCwvF,IACI/hF,KACDs+S,EAAS/rT,UAAW,gBAAY,GACnCwvF,IACI/hF,KACDs+S,EAAS/rT,UAAW,mBAAe,GACtCwvF,IACI/hF,KACDs+S,EAAS/rT,UAAW,oBAAgB,GACvCwvF,IACI/hF,KACDs+S,EAAS/rT,UAAW,mBAAe,GACtCwvF,IACI/hF,KACDs+S,EAAS/rT,UAAW,qBAAiB,GACxCwvF,IACI/hF,KACDs+S,EAAS/rT,UAAW,sBAAkB,GACzCwvF,IACI/hF,KACDs+S,EAAS/rT,UAAW,oBAAgB,GACvCwvF,IACI/hF,KACDs+S,EAAS/rT,UAAW,qBAAiB,GACxCwvF,IACI/hF,KACDs+S,EAAS/rT,UAAW,oBAAgB,GACvCwvF,IACI/hF,KACDs+S,EAAS/rT,UAAW,mBAAe,GACtCwvF,IACI/hF,KACDs+S,EAAS/rT,UAAW,kBAAc,GACrCwvF,IACI/hF,KACDs+S,EAAS/rT,UAAW,mBAAe,GACtCwvF,IACI/hF,KACDs+S,EAAS/rT,UAAW,oBAAgB,GACvCwvF,IACI/hF,KACDs+S,EAAS/rT,UAAW,qBAAiB,GACxCwvF,IACI/hF,KACDs+S,EAAS/rT,UAAW,oBAAgB,GACvCwvF,IACI/hF,KACDs+S,EAAS/rT,UAAW,qBAAiB,GACxC+rT,EAAWE,EAAaz8N,IACpBzhF,GACDg+S,GAEH,IAAIE,GACN/7M,ICprFEjhB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAQ5Di9R,GAAQ,UACRC,GAAO,SACPC,GAAY,eASZC,GAAa,eAEbC,GAAmB,sBACnBC,GAAU,oBACVC,GAAkB,qBAelBC,GAAyB,SAAUjvO,GAEnC,SAASivO,EAAQpnT,EAAShS,GACtB,OAAOmqF,EAAO7pF,KAAKtB,KAAMgT,EAAShS,IAAYhB,KA6gBlD,OA/gBAsqF,GAAU8vO,EAASjvO,GAInBivO,EAAQ/+T,UAAUoX,UAAY,WAC1BzS,KAAK2+H,YAETy7L,EAAQ/+T,UAAU0wG,OAAS,WACvB/rG,KAAKmuG,aACLnuG,KAAKukB,cAET61S,EAAQ/+T,UAAU8yG,WAAa,WAC3BnuG,KAAKq6T,YACLr6T,KAAK2D,WACL3D,KAAKygI,YACDzgI,KAAKs6T,YACLt6T,KAAKu6T,UAELv6T,KAAKw6T,OACLx6T,KAAKikH,OAGLjkH,KAAKy6T,gBAETz6T,KAAK06T,QAAQ16T,KAAK0G,MAClB1G,KAAK26T,0BACL36T,KAAK2nH,gBAETyyM,EAAQ/+T,UAAUssH,aAAe,WAC7B3nH,KAAKkT,UAAavP,GAAU3D,KAAKgB,SAvD/B,SAwDGqD,GAAarE,KAAKgB,SAxDrB,UA0DNo5T,EAAQ/+T,UAAUg/T,UAAY,WACG,iBAAjBr6T,KAAW,QACnBA,KAAKgH,eAAgBG,OAAQ3G,SAASmC,cAAc3C,KAAKmH,UAAW,GAEpEnH,KAAKmH,SACLnH,KAAKmH,OAAOguH,sBAAsB,aAAcn1H,KAAKgB,SACrD2C,GAAU3D,KAAKgB,SAAUm5T,IACzBx2T,GAAU3D,KAAKmH,QAAS+yT,MAGhCE,EAAQ/+T,UAAUs/T,wBAA0B,WACpC36T,KAAK46T,qBACLr1T,GAAanB,IAAI5D,SAAU,uBAAwBR,KAAK66T,qBAAsB76T,MAG9EuF,GAAahB,OAAO/D,SAAU,uBAAwBR,KAAK66T,uBAGnET,EAAQ/+T,UAAUsjI,SAAW,WACrB3+H,KAAKs6T,YAAgC,SAAlBt6T,KAAKkU,SACxBiuO,EAASniP,KAAKgB,SAAWgV,MAAShW,KAAK+uN,aAAa/uN,KAAK86T,YAEpD96T,KAAKs6T,YAAgC,UAAlBt6T,KAAKkU,SAC7BiuO,EAASniP,KAAKgB,SAAWgV,MAAShW,KAAK+uN,aAAa/uN,KAAK86T,YAEnD96T,KAAKs6T,YACXn4E,EAASniP,KAAKgB,SAAWgV,MAAShW,KAAK+uN,aAAa/uN,KAAKgW,UAGjEokT,EAAQ/+T,UAAU0zN,aAAe,SAAU/4M,GAUvC,OARIA,EADiB,iBAAVA,EACCzT,EAAWyT,GAEG,iBAAVA,EACHA,EAAMrG,MAAM,WAAcqG,EAAQzT,EAAWyT,GAG9C,QAIhBokT,EAAQ/+T,UAAUolI,UAAY,WAC1B0hH,EAASniP,KAAKgB,SAAW+5T,UAAW,GAAK/6T,KAAKyiE,UAElD23P,EAAQ/+T,UAAUsI,SAAW,WACzB,IAAIq3T,EAAex6T,SAASmC,cAAc,mBACrClF,EAAmBu9T,GACpBh7T,KAAKgB,QAAQq/G,qBACb18G,GAAUq3T,GAAgBh7T,KAAKgB,QAAQq/G,qBAnGxB,wBAqGdrgH,KAAKs6T,YAA4B,SAAdt6T,KAAK0G,MACzB/C,GAAU3D,KAAKgB,UAAWg5T,KAE9B31T,GAAarE,KAAKgB,UAAW84T,GAAMD,GA9G/B,UACD,SAGC,UADD,SADA,WA6GH75T,KAAKgB,QAAQ8C,UAAUM,IAvHpB,aAwHHT,GAAU3D,KAAKgB,SAA6B,UAAlBhB,KAAKkU,SAhH3B,UACD,UAgHe,SAAdlU,KAAK0G,MAAoB8E,GAAQkb,UAAa1mB,KAAKs6T,WAInD32T,GAAU3D,KAAKgB,SAAU64T,IAHzBl2T,GAAU3D,KAAKgB,SAAU84T,KAMjCM,EAAQ/+T,UAAU4/T,gBAAkB,WAChC,IAAIC,EAAU16T,SAASmC,cAAc,oBACjC3C,KAAKgB,QAAQq/G,mBACbrgH,KAAKmH,QAAUnH,KAAKm7T,cAAgBD,EACpC72T,GAAa62T,GA9HH,cAgILl7T,KAAKm7T,cAAgBn7T,KAAK6mJ,QAC/B7mJ,KAAK6mJ,MAAMniJ,MAAM4xC,QAAU,OAC3Bt2C,KAAK6mJ,MAAM/kJ,UAAY,GACvB9B,KAAK6mJ,MAAQ,OAOrBuzK,EAAQ/+T,UAAUkmF,KAAO,WACrB,IAAI65O,GAAmBx4S,MAAO5iB,KAAMgB,QAAShB,KAAKgB,QAAS63B,QAAQ,GAEnE,GADA74B,KAAKwmB,QAAQ,QAAS40S,IACjBA,EAAeviS,OAAQ,CACxB,GAAI74B,KAAKgB,QAAQ8C,UAAUK,SAAS01T,IAChC,OAEJ,GAAI75T,KAAKgB,QAAQ8C,UAAUK,SAAS21T,IAAO,CACvC,IAAIuB,GAAoB5jS,KAAM,SAAUz2B,QAAShB,KAAKgB,SACtDhB,KAAKwmB,QAAQ,SAAU60S,GAE3B13T,GAAU3D,KAAKgB,SAAU64T,IACzBx1T,GAAarE,KAAKgB,SAAU84T,IAC5B95T,KAAKs6T,WAAan4E,EAASniP,KAAKgB,SAAWgV,MAASzT,EAAWvC,KAAK86T,YAChE34E,EAASniP,KAAKgB,SAAWgV,MAASzT,EAAWvC,KAAKgW,SACtDhW,KAAKu6T,UACLv6T,KAAK06T,QAAQ16T,KAAK0G,MAClB,IAAIw0T,EAAU16T,SAASmC,cAAc,oBACjC3C,KAAKgB,QAAQq/G,oBACZrgH,KAAKs6T,YAAcY,IACpBA,EAAQx2T,MAAM2I,UAAY,kBACR,SAAlBrN,KAAKkU,SAAsBgnT,EAAQx2T,MAAMmnD,WAAa,MAAQqvQ,EAAQx2T,MAAMsqG,YAAc,OAE9FhvG,KAAKi7T,kBACLj7T,KAAK26T,0BACL36T,KAAKs7T,eACa,UAAdt7T,KAAK0G,MACLlG,SAASuL,KAAKjI,UAAUS,OAAO,sBAEnCvE,KAAKgH,eAAgBwzT,QAAQ,IAAS,KAO9CJ,EAAQ/+T,UAAU4oH,KAAO,WACrB,IAAIs3M,GAAkB34S,MAAO5iB,KAAMgB,QAAShB,KAAKgB,QAAS63B,QAAQ,GAElE,GADA74B,KAAKwmB,QAAQ,OAAQ+0S,IAChBA,EAAc1iS,OAAQ,CAEvB,GADAx0B,GAAarE,KAAKgB,SAAUg5T,IACxBh6T,KAAKgB,QAAQ8C,UAAUK,SAAS21T,IAChC,OAEJ,GAAI95T,KAAKgB,QAAQ8C,UAAUK,SAAS01T,IAAQ,CACxC,IAAIwB,GAAoB5jS,KAAM,SAAUz2B,QAAShB,KAAKgB,SACtDhB,KAAKwmB,QAAQ,SAAU60S,GAE3B13T,GAAU3D,KAAKgB,UAAW84T,GAAMC,KAChC53E,EAASniP,KAAKgB,SAAWqM,UAAa,KACtChJ,GAAarE,KAAKgB,SAAU64T,IAC5B13E,EAASniP,KAAKgB,SAAWgV,MAASzT,EAAWvC,KAAKgW,SAC/BhW,KAAKgB,QAAQ4K,wBAAwBoK,MACxDhW,KAAK06T,QAAQ16T,KAAK0G,MAClB1G,KAAKw7T,iBACLx7T,KAAK26T,0BACL36T,KAAKs7T,eACa,UAAdt7T,KAAK0G,MACLlG,SAASuL,KAAKjI,UAAUM,IAAI,sBAEhCpE,KAAKgH,eAAgBwzT,QAAQ,IAAQ,KAG7CJ,EAAQ/+T,UAAUigU,aAAe,WACzBt7T,KAAKu4B,QACLl0B,GAAarE,KAAKgB,SAAUi5T,IAG5Bt2T,GAAU3D,KAAKgB,SAAUi5T,KAGjCG,EAAQ/+T,UAAUk/T,QAAU,WACpBv6T,KAAKs6T,YAAgC,SAAlBt6T,KAAKkU,WAAwBlU,KAAKy7T,WACrDt5E,EAASniP,KAAKgB,SAAWqM,UAAa,gCAA0CrN,KAAK+uN,aAAa/uN,KAAK86T,UAAY,MAE9G96T,KAAKs6T,YAAgC,UAAlBt6T,KAAKkU,WAAyBlU,KAAKy7T,YAC3Dt5E,EAASniP,KAAKgB,SAAWqM,UAAa,gCAA+CrN,KAAK+uN,aAAa/uN,KAAK86T,UAAY,MAExH96T,KAAKgB,QAAQ8C,UAAUK,SAAS01T,KAAU75T,KAAKs6T,YAC/Cn4E,EAASniP,KAAKgB,SAAWgV,MAAShW,KAAK+uN,aAAa/uN,KAAK86T,aAGjEV,EAAQ/+T,UAAUmgU,eAAiB,WAC/B,GAAIx7T,KAAKmH,QAAUnH,KAAKm7T,aAAc,CAGlCx3T,GAFcnD,SAASmC,cAAc,oBACjC3C,KAAKgB,QAAQq/G,oBA/NP,mBAkOLrgH,KAAKm7T,eAAiBn7T,KAAK6mJ,OAAS7mJ,KAAKy7T,aAC9Cz7T,KAAK6mJ,MAAQ1lJ,EAAc,OAC3BnB,KAAK6mJ,MAAMxjJ,UArOD,oBAsOVrD,KAAK6mJ,MAAMniJ,MAAM4xC,QAAU,QAC3B91C,SAASuL,KAAKpK,YAAY3B,KAAK6mJ,SAGvCuzK,EAAQ/+T,UAAUmxG,eAAiB,WAC/B,OAAOxsG,KAAKgtG,cAAc,OAAQ,WAAY,YAOlDotN,EAAQ/+T,UAAUkkC,cAAgB,WAC9B,MAAO,WAMX66R,EAAQ/+T,UAAUgmH,OAAS,SAAUxgH,GACjCb,KAAKgB,QAAQ8C,UAAUK,SAAS21T,IAAQ95T,KAAKuhF,OAASvhF,KAAKikH,QAE/Dm2M,EAAQ/+T,UAAUogU,SAAW,WACzB,QAAOz7T,KAAKgB,QAAQ8C,UAAUK,SAAS21T,KAE3CM,EAAQ/+T,UAAUo/T,cAAgB,WAC1Bz6T,KAAK07T,YAAc17T,KAAK07T,WAAW11T,QACnChG,KAAKikH,OAEAjkH,KAAK07T,YAAc17T,KAAKy7T,YAC7Bz7T,KAAKuhF,QAGb64O,EAAQ/+T,UAAUyvS,OAAS,SAAUjqS,GACf,SAAdb,KAAK0G,OACD8E,GAAQkb,SACR/iB,GAAU3D,KAAKgB,SArQpB,UAwQK2C,GAAU3D,KAAKgB,SAvQpB,WA0QHhB,KAAKy6T,iBAETL,EAAQ/+T,UAAUw/T,qBAAuB,SAAUh6T,GAC3CgF,EAAQhF,EAAEsG,OAAQ,yBAGtBnH,KAAKuhF,QAET64O,EAAQ/+T,UAAUsgU,qBAAuB,SAAU17T,GACzB,SAAlBD,KAAKkU,UAA+C,UAAxBjU,EAAK87G,gBAChC97G,EAAK4+B,QAAU,IAAM5+B,EAAKk7G,WAAa,IAAMl7G,EAAKq7G,UAAY,GAC/Dt7G,KAAKikH,OAEkB,SAAlBjkH,KAAKkU,UAA+C,SAAxBjU,EAAK87G,eACtC/7G,KAAKuhF,OAEkB,UAAlBvhF,KAAKkU,UAAgD,UAAxBjU,EAAK87G,eACvC/7G,KAAKuhF,OAEkB,UAAlBvhF,KAAKkU,UAAgD,SAAxBjU,EAAK87G,gBACnClgH,OAAO0d,WAAatZ,EAAK4+B,QAAU,IAAM5+B,EAAKk7G,WAAa,IAAMl7G,EAAKq7G,UAAY,IACtFt7G,KAAKikH,QAGbm2M,EAAQ/+T,UAAUugU,kBAAoB,WAC9B57T,KAAK67T,gBACL77T,KAAK87T,eAAiB,IAAIjiN,GAAMr5G,SAASuL,MAAQy1L,MAAOxhM,KAAK27T,qBAAqBrgU,KAAK0E,QACvFA,KAAK+7T,WAAa,IAAIliN,GAAM75G,KAAKgB,SAAWwgM,MAAOxhM,KAAK27T,qBAAqBrgU,KAAK0E,SAG9EA,KAAK87T,gBAAkB97T,KAAK+7T,aAC5B/7T,KAAK87T,eAAexpT,UACpBtS,KAAK+7T,WAAWzpT,YAI5B8nT,EAAQ/+T,UAAUkpB,WAAa,WAC3BvkB,KAAK47T,oBACL//T,OAAOa,iBAAiB,SAAUsD,KAAK8qS,OAAOxvS,KAAK0E,QAEvDo6T,EAAQ/+T,UAAUmjH,aAAe,WAC7B3iH,OAAOe,oBAAoB,SAAUoD,KAAK8qS,OAAOxvS,KAAK0E,OACtDuF,GAAahB,OAAO/D,SAAU,uBAAwBR,KAAK66T,sBACvD76T,KAAK87T,gBACL97T,KAAK87T,eAAexpT,UAEpBtS,KAAK+7T,YACL/7T,KAAK+7T,WAAWzpT,WAGxB8nT,EAAQ/+T,UAAUmsF,kBAAoB,SAAUiF,EAASC,GAGrD,IAAK,IAFDwuO,EAAU16T,SAASmC,cAAc,oBACjC3C,KAAKgB,QAAQq/G,mBACRjiH,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKmvF,GAAUruF,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAE9D,OADWyE,EAAGzE,IAEV,IAAK,SACD4B,KAAKw6T,OAASx6T,KAAKikH,OAASjkH,KAAKuhF,OACjC,MACJ,IAAK,QACDvhF,KAAK2+H,WACA3+H,KAAKy7T,YACNz7T,KAAKu6T,UAET,MACJ,IAAK,UACDv6T,KAAKs7T,eACL,MACJ,IAAK,OACDj3T,GAAarE,KAAKgB,UAAWg5T,KAC7Bh6T,KAAK2D,WACL3D,KAAK06T,QAAQ16T,KAAK0G,MAClB,MACJ,IAAK,WACD1G,KAAKgB,QAAQ0D,MAAM2I,UAAY,GAC/BrN,KAAKu6T,UACDW,IACkB,SAAlBl7T,KAAKkU,SAAsBgnT,EAAQx2T,MAAMsqG,YAAc,MAAQksN,EAAQx2T,MAAMmnD,WAAa,OAExE,UAAlB7rD,KAAKkU,UACL7P,GAAarE,KAAKgB,SA5V/B,UA6Va2C,GAAU3D,KAAKgB,SA9V3B,aAiWYqD,GAAarE,KAAKgB,SAjW9B,WAkWY2C,GAAU3D,KAAKgB,SAjW5B,WAmWShB,KAAK06T,QAAQ16T,KAAK0G,MAClB,MACJ,IAAK,eACG1G,KAAKm7T,aACLn7T,KAAKw7T,iBAGDx7T,KAAK6mJ,QACL7mJ,KAAK6mJ,MAAMniJ,MAAM4xC,QAAU,OAC3Bt2C,KAAK6mJ,MAAM/kJ,UAAY,GACvB9B,KAAK6mJ,MAAQ,MAGrB,MACJ,IAAK,SAC4B,iBAAjB7mJ,KAAW,QACnBA,KAAKgH,eAAgBG,OAAQ3G,SAASmC,cAAc3C,KAAKmH,UAAW,GAEpE1J,EAAkBuC,KAAKmH,SACvB9C,GAAarE,KAAKgB,SAAUm5T,IAC5B91T,GAAaqoF,EAAQvlF,QAAS+yT,IAC9B/3E,EAAS+4E,GAAWc,cAAe,EAAGC,eAAgB,IACtDz7T,SAASuL,KAAKopH,sBAAsB,aAAcn1H,KAAKgB,UAGvDmqF,EAAO9vF,UAAU62D,QAAQ5wD,KAAKtB,MAElC,MACJ,IAAK,uBACDA,KAAK26T,0BACL,MACJ,IAAK,aACI36T,KAAKy7T,YACNz7T,KAAKu6T,UAET,MACJ,IAAK,SACDv6T,KAAKygI,YACL,MACJ,IAAK,aACDzgI,KAAKy6T,gBACL,MACJ,IAAK,iBACDz6T,KAAK47T,oBACL,MACJ,IAAK,YACD57T,KAAK2nH,kBAKrByyM,EAAQ/+T,UAAUq/T,QAAU,SAAUh0T,GAClC,IAAIw1T,EAAel8T,KAAKgB,QAAQ4K,wBAAwBoK,MACxDhW,KAAKygI,YACDzgI,KAAKs6T,YACL32T,GAAU3D,KAAKgB,SAlad,UAoaL,IAAIk6T,EAAU16T,SAASmC,cAAc,oBACjC3C,KAAKgB,QAAQq/G,mBACb66M,IACAA,EAAQx2T,MAAM2I,UAAY,kBACrB7B,GAAQkb,UAA0B,SAAd1mB,KAAK0G,OACR,SAAlB1G,KAAKkU,SAAsBgnT,EAAQx2T,MAAMmnD,WAAa,MAAQqvQ,EAAQx2T,MAAMsqG,YAAc,QAGlG,IAAIvyE,GAASz8B,KAAKkU,SAAsBgoT,EAAe,MACnDnuB,EAA6B,SAAlB/tS,KAAKkU,SAAsBgoT,KAE1C,OADA73T,GAAarE,KAAKgB,UApaf,SADA,SAEC,YAoaI0F,GACJ,IAAK,OACD/C,GAAU3D,KAAKgB,UAvapB,WAwaSk6T,IAAYl7T,KAAKs6T,YAAct6T,KAAKgB,QAAQ8C,UAAUK,SAAS21T,OAC7C,SAAlB95T,KAAKkU,SAAsBgnT,EAAQx2T,MAAMmnD,WAAapvB,EAASy+R,EAAQx2T,MAAMsqG,YAAcvyE,GAE/F,MACJ,IAAK,QACD94B,GAAU3D,KAAKgB,UA5anB,YA6aQk6T,IAAYl7T,KAAKs6T,YAAct6T,KAAKgB,QAAQ8C,UAAUK,SAAS21T,OAC/DoB,EAAQx2T,MAAM2I,UAAY,cAAgB0gS,EAAW,OAEzD,MACJ,IAAK,OACDpqS,GAAU3D,KAAKgB,UApbpB,WAqbShB,KAAKs6T,YAAct6T,KAAKgB,QAAQ8C,UAAUK,SAAS01T,KAC/CqB,IACkB,SAAlBl7T,KAAKkU,SAAsBgnT,EAAQx2T,MAAMmnD,WAAapvB,EAASy+R,EAAQx2T,MAAMsqG,YAAcvyE,GAGnG,MACJ,IAAK,OACD94B,GAAU3D,KAAKgB,UAAW+4T,KACtBvuT,GAAQkb,SACJw0S,GAAYl7T,KAAe,aAAMA,KAAKy7T,YACpB,SAAlBz7T,KAAKkU,SAAsBgnT,EAAQx2T,MAAMmnD,WAAapvB,EAASy+R,EAAQx2T,MAAMsqG,YAAcvyE,EAC3F94B,GAAU3D,KAAKgB,SA/b5B,WAkca2C,GAAU3D,KAAKgB,SAnc5B,WAucS2C,GAAU3D,KAAKgB,SAtcxB,UAucak6T,IAAYl7T,KAAKs6T,YAAct6T,KAAKgB,QAAQ8C,UAAUK,SAAS21T,OAC7C,SAAlB95T,KAAKkU,SAAsBgnT,EAAQx2T,MAAMmnD,WAAapvB,EAASy+R,EAAQx2T,MAAMsqG,YAAcvyE,GAE/Fz8B,KAAKgH,eAAgBwzT,QAAQ,IAAQ,IAEzCx6T,KAAKw7T,mBAOjBpB,EAAQ/+T,UAAUiX,QAAU,WACxB64E,EAAO9vF,UAAUiX,QAAQhR,KAAKtB,MAC9BqE,GAAarE,KAAKgB,UAAW84T,GAAMD,GArdhC,SACC,UAFD,SADA,SADC,UAwdsEE,KACtE/5T,KAAKmH,SACL9C,GAAarE,KAAKgB,SAAUm5T,IAC5B91T,GAAarE,KAAKmH,QAAS+yT,KAE/Bl6T,KAAKi7T,kBACLj7T,KAAKgB,QAAQ0D,MAAMsR,MAAQ,GAC3BhW,KAAKgB,QAAQ0D,MAAM+9D,OAAS,GAC5BziE,KAAKgB,QAAQ0D,MAAM2I,UAAY,GAC/B,IAAI6tT,EAAU16T,SAASmC,cAAc,oBAC9B3C,KAAKgB,QAAQq/G,mBACf5iH,EAAkBy9T,KACnBA,EAAQx2T,MAAM+3B,OAAS,GACvBy+R,EAAQx2T,MAAM2I,UAAY,IAE9BrN,KAAKw+G,gBAET3zB,IACI3jF,EAAS,SACVkzT,EAAQ/+T,UAAW,gBAAY,GAClCwvF,IACI3jF,EAAS,OACVkzT,EAAQ/+T,UAAW,kBAAc,GACpCwvF,IACI3jF,GAAS,IACVkzT,EAAQ/+T,UAAW,kBAAc,GACpCwvF,IACI3jF,GAAS,IACVkzT,EAAQ/+T,UAAW,sBAAkB,GACxCwvF,IACI3jF,GAAS,IACVkzT,EAAQ/+T,UAAW,cAAU,GAChCwvF,IACI3jF,GAAS,IACVkzT,EAAQ/+T,UAAW,iBAAa,GACnCwvF,IACI3jF,GAAS,IACVkzT,EAAQ/+T,UAAW,eAAW,GACjCwvF,IACI3jF,EAAS,SACVkzT,EAAQ/+T,UAAW,cAAU,GAChCwvF,IACI3jF,GAAS,IACVkzT,EAAQ/+T,UAAW,4BAAwB,GAC9CwvF,IACI3jF,EAAS,SACVkzT,EAAQ/+T,UAAW,gBAAY,GAClCwvF,IACI3jF,EAAS,OACVkzT,EAAQ/+T,UAAW,cAAU,GAChCwvF,IACI3jF,GAAS,IACVkzT,EAAQ/+T,UAAW,oBAAgB,GACtCwvF,IACI3jF,EAAS,SACVkzT,EAAQ/+T,UAAW,YAAQ,GAC9BwvF,IACI3jF,EAAS,SACVkzT,EAAQ/+T,UAAW,aAAS,GAC/BwvF,IACI3jF,EAAS,MACVkzT,EAAQ/+T,UAAW,cAAU,GAChCwvF,IACI/hF,KACDsxT,EAAQ/+T,UAAW,eAAW,GACjCwvF,IACI/hF,KACDsxT,EAAQ/+T,UAAW,aAAS,GAC/BwvF,IACI/hF,KACDsxT,EAAQ/+T,UAAW,YAAQ,GAC9BwvF,IACI/hF,KACDsxT,EAAQ/+T,UAAW,cAAU,GAChCwvF,IACI/hF,KACDsxT,EAAQ/+T,UAAW,iBAAa,GACnC++T,EAAUvvO,IACNzhF,GACDgxT,IAEL7uN,KxNjkBF,SAAW4pL,GAEPA,EAAMgnC,eACFrvS,KAAM,OACNC,WAAY,SACZyJ,MAAO,KACPxJ,UAAW,SACXC,WAAY,YAGhBkoQ,EAAMinC,eACFtvS,KAAM,OACNC,WAAY,SACZyJ,MAAO,KACPxJ,UAAW,SACXC,WAAY,YAGhBkoQ,EAAMknC,gBACFvvS,KAAM,OACNC,WAAY,MACZyJ,MAAO,KACPxJ,UAAW,SACXC,WAAY,YAGhBkoQ,EAAMmnC,oBACFxvS,KAAM,OACNC,WAAY,SACZyJ,MAAO,KACPxJ,UAAW,SACXC,WAAY,YAGhBkoQ,EAAMonC,kBACFzvS,KAAM,OACNC,WAAY,SACZyJ,MAAO,KACPxJ,UAAW,SACXC,WAAY,YAGhBkoQ,EAAMqnC,iBACF1vS,KAAM,OACNC,WAAY,SACZyJ,MAAO,KACPxJ,UAAW,SACXC,WAAY,YAGhBkoQ,EAAMsnC,oBACF3vS,KAAM,OACNC,WAAY,UACZyJ,MAAO,UACPxJ,UAAW,SACXC,WAAY,YAvDpB,CAyDGkoQ,KAAUA,QyN7Db,IrNIWunC,GqNJPpyO,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAO5DkpB,GAA2B,SAAUqlC,GAErC,SAASrlC,IACL,OAAkB,OAAXqlC,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAiB/D,OAnBAsqF,GAAUxkC,EAAWqlC,GAIrBN,IACI3jF,EAAS,SACV4+C,EAAUzqD,UAAW,YAAQ,GAChCwvF,IACI3jF,EAAS,OACV4+C,EAAUzqD,UAAW,aAAS,GACjCwvF,IACI3jF,EAAS,IACV4+C,EAAUzqD,UAAW,aAAS,GACjCwvF,IACI3jF,EAAS,OACV4+C,EAAUzqD,UAAW,cAAU,GAClCwvF,IACI3jF,EAAS,KACV4+C,EAAUzqD,UAAW,iBAAa,GAC9ByqD,GACTkZ,IAKE29P,GAAsB,SAAUxxO,GAEhC,SAASwxO,IACL,OAAkB,OAAXxxO,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KA0B/D,OA5BAsqF,GAAUqyO,EAAMxxO,GAIhBN,IACI3jF,EAAS,SACVy1T,EAAKthU,UAAW,YAAQ,GAC3BwvF,IACI3jF,EAAS,KACVy1T,EAAKthU,UAAW,aAAS,GAC5BwvF,IACI3jF,EAAS,aACVy1T,EAAKthU,UAAW,kBAAc,GACjCwvF,IACI3jF,EAAS,WACVy1T,EAAKthU,UAAW,kBAAc,GACjCwvF,IACI3jF,EAAS,WACVy1T,EAAKthU,UAAW,iBAAa,GAChCwvF,IACI3jF,EAAS,IACVy1T,EAAKthU,UAAW,eAAW,GAC9BwvF,IACI3jF,EAAS,WACVy1T,EAAKthU,UAAW,qBAAiB,GACpCwvF,IACI3jF,EAAS,SACVy1T,EAAKthU,UAAW,oBAAgB,GAC5BshU,GACT39P,IAKE49P,GAAwB,SAAUzxO,GAElC,SAASyxO,IACL,OAAkB,OAAXzxO,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVAsqF,GAAUsyO,EAAQzxO,GAIlBN,IACI3jF,EAAS,KACV01T,EAAOvhU,UAAW,aAAS,GAC9BwvF,IACI3jF,EAAS,IACV01T,EAAOvhU,UAAW,aAAS,GACvBuhU,GACT59P,IAKE69P,GAA2B,SAAU1xO,GAErC,SAAS0xO,IACL,OAAkB,OAAX1xO,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbAsqF,GAAUuyO,EAAW1xO,GAIrBN,IACI9iF,KAAY60T,KACbC,EAAUxhU,UAAW,cAAU,GAClCwvF,IACI3jF,EAAS,gBACV21T,EAAUxhU,UAAW,kBAAc,GACtCwvF,IACI3jF,EAAS,IACV21T,EAAUxhU,UAAW,eAAW,GAC5BwhU,GACT79P,IAKE89P,GAAwB,SAAU3xO,GAElC,SAAS2xO,IACL,OAAkB,OAAX3xO,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAc/D,OAhBAsqF,GAAUwyO,EAAQ3xO,GAIlBN,IACI3jF,EAAS,KACV41T,EAAOzhU,UAAW,YAAQ,GAC7BwvF,IACI3jF,EAAS,KACV41T,EAAOzhU,UAAW,aAAS,GAC9BwvF,IACI3jF,EAAS,KACV41T,EAAOzhU,UAAW,WAAO,GAC5BwvF,IACI3jF,EAAS,KACV41T,EAAOzhU,UAAW,cAAU,GACxByhU,GACT99P,IAKE1mC,GAA2B,SAAU6yD,GAErC,SAAS7yD,IACL,OAAkB,OAAX6yD,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbAsqF,GAAUhyD,EAAW6yD,GAIrBN,IACI3jF,GAAS,IACVoxB,EAAUj9B,UAAW,cAAU,GAClCwvF,IACI3jF,EAAS,MACVoxB,EAAUj9B,UAAW,gBAAY,GACpCwvF,IACI3jF,EAAS,IACVoxB,EAAUj9B,UAAW,aAAS,GAC1Bi9B,GACT0mC,IAGE+9P,GAAyB,SAAU5xO,GAEnC,SAAS4xO,IACL,OAAkB,OAAX5xO,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVAsqF,GAAUyyO,EAAS5xO,GAInBN,IACI3jF,EAAS,IACV61T,EAAQ1hU,UAAW,cAAU,GAChCwvF,IACI3jF,EAAS,IACV61T,EAAQ1hU,UAAW,aAAS,GACxB0hU,GACT/9P,IAKEg+P,GAA8B,SAAU7xO,GAExC,SAAS6xO,IACL,OAAkB,OAAX7xO,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAc/D,OAhBAsqF,GAAU0yO,EAAc7xO,GAIxBN,IACI3jF,EAAS,IACV81T,EAAa3hU,UAAW,eAAW,GACtCwvF,IACI3jF,EAAS,IACV81T,EAAa3hU,UAAW,gBAAY,GACvCwvF,IACI3jF,EAAS,IACV81T,EAAa3hU,UAAW,kBAAc,GACzCwvF,IACI3jF,EAAS,IACV81T,EAAa3hU,UAAW,mBAAe,GACnC2hU,GACTh+P,IAKElqC,GAAuB,WAKvB,OAJA,SAAemoS,EAAa7kS,GACxBp4B,KAAK4e,OAASq+S,EACdj9T,KAAK8zB,MAAQsE,MAQjB8kS,GAAoC,SAAU/xO,GAE9C,SAAS+xO,IACL,OAAkB,OAAX/xO,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbAsqF,GAAU4yO,EAAoB/xO,GAI9BN,IACI3jF,EAAS,OACVg2T,EAAmB7hU,UAAW,YAAQ,GACzCwvF,IACI9iF,GAAUyuB,MAAO,cAAexgB,MAAO,GAAK4mT,KAC7CM,EAAmB7hU,UAAW,cAAU,GAC3CwvF,IACI3jF,EAAS,QACVg2T,EAAmB7hU,UAAW,YAAQ,GAClC6hU,GACTl+P,IAKEm+P,GAAiC,SAAUhyO,GAE3C,SAASgyO,IACL,OAAkB,OAAXhyO,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAgC/D,OAlCAsqF,GAAU6yO,EAAiBhyO,GAI3BN,IACI3jF,GAAS,IACVi2T,EAAgB9hU,UAAW,cAAU,GACxCwvF,IACI3jF,GAAS,IACVi2T,EAAgB9hU,UAAW,cAAU,GACxCwvF,IACI3jF,EAAS,OACVi2T,EAAgB9hU,UAAW,YAAQ,GACtCwvF,IACI3jF,EAAS,OACVi2T,EAAgB9hU,UAAW,cAAU,GACxCwvF,IACI3jF,EAAS,MACVi2T,EAAgB9hU,UAAW,eAAW,GACzCwvF,IACI9iF,EAAQotR,GAAMonC,iBAAkBI,KACjCQ,EAAgB9hU,UAAW,iBAAa,GAC3CwvF,IACI3jF,EAAS,OACVi2T,EAAgB9hU,UAAW,cAAU,GACxCwvF,IACI3jF,EAAS,OACVi2T,EAAgB9hU,UAAW,gBAAY,GAC1CwvF,IACI3jF,GAAS,IACVi2T,EAAgB9hU,UAAW,uBAAmB,GACjDwvF,IACI9iF,GAAUyuB,MAAO,UAAWxgB,MAAO,IAAO4mT,KAC3CO,EAAgB9hU,UAAW,cAAU,GACjC8hU,GACTn+P,ICvQEo+P,GAA6B,WAC7B,SAASA,EAAY7/T,EAAOshB,GAOpBthB,EAAQshB,GACR7e,KAAKq9T,OAAS9/T,EACdyC,KAAKs9T,KAAOz+S,IAGZ7e,KAAKq9T,OAASx+S,EACd7e,KAAKs9T,KAAO//T,GAwCpB,OArCAe,OAAOuJ,eAAeu1T,EAAY/hU,UAAW,SAGzCqM,IAAK,WACD,OAAO1H,KAAKq9T,QAEhB11T,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeu1T,EAAY/hU,UAAW,OAEzCqM,IAAK,WACD,OAAO1H,KAAKs9T,MAEhB31T,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeu1T,EAAY/hU,UAAW,SAMzCqM,IAAK,WACD,OAAQ1H,KAAKs9T,KAAOt9T,KAAKq9T,QAE7B11T,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeu1T,EAAY/hU,UAAW,UAEzCqM,IAAK,WACD,OAAO1H,KAAKq9T,QAAUr9T,KAAKs9T,KAAOt9T,KAAKq9T,QAAU,GAErD11T,YAAY,EACZC,cAAc,IAEXw1T,KCnDPG,GAAwB,WAKxB,SAASA,EAAO1sS,GACZ7wB,KAAK6wB,MAAQA,EAqQjB,OA/PA0sS,EAAOliU,UAAUmiU,6BAA+B,SAAUrnT,EAAM8e,EAAOnI,GACnE,IAAI2wS,EAA8BtkS,GAA+BrM,EAAM3W,GACnE8xD,EAAehzC,EAAQwoS,EAC3B,IAAKhgU,EAAkB0Y,EAAKkjB,kBACxB,OAAO4uC,EAGX,IAAK,IADDC,EAAc77D,KAAK87D,IAAI,GAAI97D,KAAK+S,MAAMmS,GAAQ02C,EAAc,MACvD7pE,EAAK,EAAGyE,EAAKsT,EAAKunT,aAAct/T,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC3D,IACI4pE,EAAkBE,EADPrlE,EAAGzE,GAElB,GAAIq/T,EAA+BxoS,EAAQ+yC,EACvC,MAEJC,EAAeD,EAEnB,OAAOC,GAMXs1P,EAAOliU,UAAUsiU,eAAiB,SAAUxnT,EAAM2W,GAC9C9sB,KAAK49T,sBAAsBznT,GAC3BA,EAAK0nT,YAAY17T,SAAWgU,EAAKhU,UAAYnC,KAAKw9T,6BAA6BrnT,EAAMA,EAAK2nT,YAAY7oS,MAAOnI,GAC7G3W,EAAK0nT,YAAY99S,IAAM5J,EAAK2nT,YAAYvgU,MACxC4Y,EAAK0nT,YAAYvxT,IAAM6J,EAAK2nT,YAAYj/S,KAM5C0+S,EAAOliU,UAAUuiU,sBAAwB,SAAUznT,GAE1B,OAAjBA,EAAK8iB,QACLj5B,KAAK+f,IAAM5J,EAAK8iB,QAEE,OAAbj5B,KAAK+f,KAAgB/f,KAAK+f,MAAQuX,OAAOymS,oBAC9C/9T,KAAK+f,IAAM,GAGM,OAAjB5J,EAAK+iB,QACLl5B,KAAKsM,IAAM6J,EAAK+iB,QAEE,OAAbl5B,KAAKsM,KAAgBtM,KAAKsM,MAAQgrB,OAAO0mS,oBAC9Ch+T,KAAKsM,IAAM,GAEXtM,KAAK+f,MAAQ/f,KAAKsM,MAClBtM,KAAKsM,IAAM6J,EAAK+b,UAAU3zB,QAAQ,aAAe,EAAIyB,KAAKsM,IAAMtM,KAAK+f,IAAM,GAE/E5J,EAAK2nT,YAAc,IAAIV,GAAYp9T,KAAK+f,IAAK/f,KAAKsM,KAClD6J,EAAK0nT,gBAOTN,EAAOliU,UAAU4iU,0BAA4B,SAAUnxS,EAAM3W,GACzDnW,KAAKk+T,eAAe/nT,EAAM2W,GAC1B9sB,KAAK29T,eAAexnT,EAAM2W,GAC1B9sB,KAAKm+T,kBAAkBhoT,EAAM2W,GAC7B9sB,KAAKo+T,uBAAuBjoT,EAAMnW,KAAK6wB,QAM3C0sS,EAAOliU,UAAU6iU,eAAiB,SAAU/nT,EAAM2W,GAK9C,GAHA9sB,KACK+f,IAAM,KACX/f,KAAKsM,IAAM,MACN0sB,GAAS7iB,GACV,IAAK,IAAI/X,EAAK,EAAGyE,EAAKsT,EAAKyI,OAAQxgB,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACrD,IAAIigU,EAAWx7T,EAAGzE,GACbigU,EAAS7mS,UAGdx3B,KAAKs+T,gBAAkB,IACjBD,EAAS33T,KAAKnI,QAAQ,WAAa,GAAK8/T,EAAS33T,KAAKnI,QAAQ,cAAgB,IAA2B,eAArB4X,EAAKijB,aACvFilS,EAAS33T,KAAKnI,QAAQ,QAAU,GAA0B,aAArB4X,EAAKijB,eACZ,WAA7BilS,EAASvmT,MAAMoa,WAAuD,aAA7BmsS,EAASvmT,MAAMoa,WACtB,SAAhCmsS,EAASvmT,MAAMymT,eAClBv+T,KAAKs+T,gBAAkBrnS,GAAkBonS,EAASvmT,MAAO3B,EAAKyI,QAAU,IAIvD,eAArBzI,EAAKijB,cACDp5B,KAAK6wB,MAAMiG,oBACX92B,KAAKw+T,WAAWH,EAASphE,KAAMohE,EAASlhE,MAGxCn9P,KAAKw+T,WAAWH,EAASvmS,KAAO93B,KAAKs+T,gBAAiBD,EAASnhE,KAAOl9P,KAAKs+T,kBAI1D,aAArBnoT,EAAKijB,cACDp5B,KAAK6wB,MAAMiG,oBACX92B,KAAKw+T,WAAWH,EAASvmS,KAAO93B,KAAKs+T,gBAAiBD,EAASnhE,KAAOl9P,KAAKs+T,iBAG3Et+T,KAAKw+T,WAAWH,EAASphE,KAAMohE,EAASlhE,UAM5DogE,EAAOliU,UAAUmjU,WAAa,SAAUz+S,EAAKzT,IACxB,OAAbtM,KAAK+f,KAAgB/f,KAAK+f,IAAMA,KAChC/f,KAAK+f,IAAMA,IAEE,OAAb/f,KAAKsM,KAAgBtM,KAAKsM,IAAMA,KAChCtM,KAAKsM,IAAMA,IAOnBixT,EAAOliU,UAAU8iU,kBAAoB,SAAUhoT,EAAM2W,GACjD,IACIvvB,EAAQ4Y,EAAK0nT,YAAY99S,IACzBlB,EAAM1I,EAAK0nT,YAAYvxT,IAC3B,IAAK0sB,GAAS7iB,GAAO,CACjB,IAAIhU,EAAWgU,EAAK0nT,YAAY17T,SAC5Bi3D,EAAUjjD,EAAKsoT,gBAAgBz+T,KAAK6wB,OACxB,eAAZuoC,GAAwC,UAAZA,EAC5Bp5D,KAAK0+T,eAAevoT,EAAM5Y,EAAOshB,EAAK1c,GAErB,WAAZi3D,EACLp5D,KAAK2+T,WAAWxoT,EAAM5Y,EAAOshB,EAAK1c,EAAU2qB,GAG5C9sB,KAAK4+T,kBAAkBzoT,EAAM5Y,EAAOshB,EAAK1c,GAGjDgU,EAAK0nT,YAAY5oS,MAAQ9e,EAAK0nT,YAAYvxT,IAAM6J,EAAK0nT,YAAY99S,IACjE/f,KAAK6+T,sBAAsB/xS,EAAM3W,IAErConT,EAAOliU,UAAUujU,kBAAoB,SAAUzoT,EAAM8iB,EAASC,EAAS/2B,GACnEgU,EAAK0nT,YAAY99S,IAAsB,MAAhB5J,EAAK8iB,QAAkB9iB,EAAK8iB,QAAUA,EAC7D9iB,EAAK0nT,YAAYvxT,IAAsB,MAAhB6J,EAAK+iB,QAAkB/iB,EAAK+iB,QAAUA,EAC7D/iB,EAAK0nT,YAAY17T,SAA4B,MAAjBgU,EAAKhU,SAAmBgU,EAAKhU,SAAWA,GAExEo7T,EAAOliU,UAAUqjU,eAAiB,SAAUvoT,EAAM5Y,EAAOshB,EAAK1c,GAC1D,IAAI82B,EACAC,EACJD,EAAU5sB,KAAK+S,MAAM7hB,EAAQ4E,GAAYA,EACzC+2B,EAAU7sB,KAAKwmB,KAAKhU,EAAM1c,GAAYA,EACZ,eAAtBgU,EAAKooT,eACLtlS,GAAW92B,EACX+2B,GAAW/2B,GAEfnC,KAAK4+T,kBAAkBzoT,EAAM8iB,EAASC,EAAS/2B,IAEnDo7T,EAAOliU,UAAUsjU,WAAa,SAAUxoT,EAAM5Y,EAAOshB,EAAK1c,EAAU2qB,GAChE,IACImM,EACAC,EACA/Q,EAAa5qB,EACbA,EAAQ,GACR4qB,EAAa,EAGR,KAAQhmB,GADDA,GADZ82B,EAAU17B,EAASA,EAAQ,IACO4E,IAE9B82B,GAAW92B,GAEX82B,EAAU92B,EAAW,IACrB82B,EAAWA,EAAU92B,EAAa82B,EAAU92B,KAIhD82B,EAAU17B,EAAU,EAAM,EAAOshB,EAAO,EAAKthB,GAASshB,EAAMthB,GAAS,GACvD4E,EAAW,IACrB82B,GAAYA,EAAU92B,GAKzB,KAAQA,GADDA,GADZ+2B,EAAWra,EAAM,EAAMA,GAAOA,EAAMsJ,GAAc,GAAOtJ,GAAOA,EAAMsJ,GAAc,IAClDhmB,IAE9B+2B,GAAW/2B,GAEX+2B,EAAU/2B,EAAW,IACrB+2B,EAAWA,EAAU/2B,EAAa+2B,EAAU/2B,GAEhDgU,EAAK2nT,YAAc,IAAIV,GAAYnkS,EAASC,GAC5B,IAAZD,IACA92B,EAAWnC,KAAKw9T,6BAA6BrnT,EAAMA,EAAK2nT,YAAY7oS,MAAOnI,GAC3EoM,EAAU7sB,KAAKwmB,KAAKqG,EAAU/2B,GAAYA,GAE9CnC,KAAK4+T,kBAAkBzoT,EAAM8iB,EAASC,EAAS/2B,IAMnDo7T,EAAOliU,UAAUwjU,sBAAwB,SAAU/xS,EAAM3W,GACrDA,EAAKwc,cACDrmB,IAAK6J,EAAK0nT,YAAYvxT,IAAKyT,IAAK5J,EAAK0nT,YAAY99S,IACjDkV,MAAO9e,EAAK0nT,YAAY5oS,MAAO9yB,SAAUgU,EAAK0nT,YAAY17T,WAE1DgU,EAAKi4D,WAAa,GAAKj4D,EAAK2oT,aAAe,KAC3C3oT,EAAK0oT,sBAAsB/xS,GAC3B3W,EAAKwc,aAAaxwB,SAAYgU,EAAK4oT,6BAAkD,aAAnB5oT,EAAK+b,UACnElyB,KAAKw9T,6BAA6BrnT,EAAMA,EAAK2nT,YAAY7oS,MAAOnI,GAC9D3W,EAAKwc,aAAaxwB,UAE5BgU,EAAK6oT,mBAAmBh/T,KAAK6wB,MAAO1a,EAAKwc,aAAa5S,IAAK5J,EAAKwc,aAAarmB,IAAK6J,EAAKwc,aAAaxwB,WAMxGo7T,EAAOliU,UAAU+iU,uBAAyB,SAAUjoT,EAAM0a,GAEtD1a,EAAKgf,iBACL,IAAIwD,EAAexiB,EAAKwc,aAAa5S,KACjC5J,EAAKi4D,WAAa,GAAKj4D,EAAK2oT,aAAe,GAAK9+T,KAAKs+T,mBACrD3lS,EAAexiB,EAAKwc,aAAa5S,IAAO5J,EAAKwc,aAAa5S,IAAM5J,EAAKwc,aAAaxwB,UAEtF,IAAI65B,EAASh8B,KAAKu8R,UAAUpmR,GACxB8oT,EAAuC,OAA5BjjS,EAAOrsB,MAAM,WAO5B,IANAwG,EAAK6lB,OAASnL,EAAMo+C,KAAKC,iBACrBlzC,OAAQijS,EAAW,GAAKjjS,EACxBmzC,YAAat+C,EAAMu+C,uBAEvBj5D,EAAK4f,WAAa5f,EAAK6lB,OAAO7lB,EAAKwc,aAAa5S,KAChD5J,EAAK2f,SAAW3f,EAAK6lB,OAAO7lB,EAAKwc,aAAarmB,KACvCqsB,GAAgBxiB,EAAKwc,aAAarmB,IAAKqsB,GAAgBxiB,EAAKwc,aAAaxwB,SACxE6vB,GAAO2G,EAAcxiB,EAAKwc,eAC1B+F,GAAmB7H,EAAO8H,EAAc34B,KAAK4hF,YAAYzrE,EAAM8oT,EAAUjjS,EAAQrD,GAAexiB,EAAK6f,WAAY7f,GAGrHA,EAAK+oT,kBACL/oT,EAAK+oT,iBAAiBl/T,KAAK6wB,QAOnC0sS,EAAOliU,UAAUkhS,UAAY,SAAUpmR,GACnC,OAAIA,EAAKmlB,YACEnlB,EAAKmlB,YAETnlB,EAAKgpT,WAAa,WAAa,IAM1C5B,EAAOliU,UAAUumF,YAAc,SAAUzrE,EAAM8oT,EAAUjjS,EAAQrD,GAC7D,OAAOsmS,EAAWjjS,EAAOzsB,QAAQ,UAAW4G,EAAK6lB,OAAOrD,IAClDxiB,EAAK6lB,OAAOrD,IAEf4kS,KCxQA6B,GAAe,eAEfC,GAAa,aAEbC,GAAc,cAEdC,GAAe,eAEfzmS,GAAkB,kBAElB0mS,GAAsB,sBAEtBC,GAAuB,uBAEvBC,GAAgB,gBAEhBC,GAAiB,iBAEjBC,GAAkB,kBAMlBC,GAAkB,kBAElBC,GAAiB,iBAEjBC,GAAe,eAEfC,GAAe,eAEfC,GAAe,eAMfC,GAAmB,mBChD1B51O,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAQ5DujS,GAAyC,SAAUh1O,GAEnD,SAASg1O,IACL,OAAkB,OAAXh1O,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAgC/D,OAlCAsqF,GAAU61O,EAAyBh1O,GAInCN,IACI3jF,EAAS,MACVi5T,EAAwB9kU,UAAW,SAAK,GAC3CwvF,IACI3jF,EAAS,MACVi5T,EAAwB9kU,UAAW,SAAK,GAC3CwvF,IACI3jF,EAAS,OACVi5T,EAAwB9kU,UAAW,eAAW,GACjDwvF,IACI3jF,EAAS,WACVi5T,EAAwB9kU,UAAW,2BAAuB,GAC7DwvF,IACI3jF,EAAS,UACVi5T,EAAwB9kU,UAAW,uBAAmB,GACzDwvF,IACI3jF,EAAS,UACVi5T,EAAwB9kU,UAAW,cAAU,GAChDwvF,IACI3jF,EAAS,WACVi5T,EAAwB9kU,UAAW,yBAAqB,GAC3DwvF,IACI3jF,EAAS,OACVi5T,EAAwB9kU,UAAW,iBAAa,GACnDwvF,IACI3jF,EAAS,OACVi5T,EAAwB9kU,UAAW,iBAAa,GACnDwvF,IACI3jF,EAAS,OACVi5T,EAAwB9kU,UAAW,mBAAe,GAC9C8kU,GACTnhQ,IAKEohQ,GAA6B,SAAUj1O,GAEvC,SAASi1O,IACL,OAAkB,OAAXj1O,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbAsqF,GAAU81O,EAAaj1O,GAIvBN,IACI3jF,EAAS,KACVk5T,EAAY/kU,UAAW,aAAS,GACnCwvF,IACI3jF,EAAS,IACVk5T,EAAY/kU,UAAW,aAAS,GACnCwvF,IACI3jF,EAAS,cACVk5T,EAAY/kU,UAAW,YAAQ,GAC3B+kU,GACTphQ,IAKEqhQ,GAAsC,SAAUl1O,GAEhD,SAASk1O,IACL,OAAkB,OAAXl1O,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAc/D,OAhBAsqF,GAAU+1O,EAAsBl1O,GAIhCN,IACI3jF,EAAS,OACVm5T,EAAqBhlU,UAAW,aAAS,GAC5CwvF,IACI3jF,EAAS,OACVm5T,EAAqBhlU,UAAW,WAAO,GAC1CwvF,IACI3jF,EAAS,KACVm5T,EAAqBhlU,UAAW,YAAQ,GAC3CwvF,IACI3jF,EAAS,OACVm5T,EAAqBhlU,UAAW,wBAAoB,GAChDglU,GACTrhQ,IAKEshQ,GAAmC,SAAUn1O,GAE7C,SAASm1O,IACL,OAAkB,OAAXn1O,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KA4C/D,OA9CAsqF,GAAUg2O,EAAmBn1O,GAI7BN,IACI3jF,GAAS,IACVo5T,EAAkBjlU,UAAW,eAAW,GAC3CwvF,IACI3jF,GAAS,IACVo5T,EAAkBjlU,UAAW,qBAAiB,GACjDwvF,IACI3jF,EAAS,OACVo5T,EAAkBjlU,UAAW,aAAS,GACzCwvF,IACI3jF,EAAS,OACVo5T,EAAkBjlU,UAAW,WAAO,GACvCwvF,IACI3jF,EAAS,OACVo5T,EAAkBjlU,UAAW,YAAQ,GACxCwvF,IACI3jF,EAAS,YACVo5T,EAAkBjlU,UAAW,aAAS,GACzCwvF,IACI9iF,GAAUyuB,MAAO,cAAexgB,MAAO,GAAK4mT,KAC7C0D,EAAkBjlU,UAAW,cAAU,GAC1CwvF,IACI3jF,EAAS,KACVo5T,EAAkBjlU,UAAW,YAAQ,GACxCwvF,IACI3jF,EAAS,OACVo5T,EAAkBjlU,UAAW,gBAAY,GAC5CwvF,IACI3jF,EAAS,WACVo5T,EAAkBjlU,UAAW,2BAAuB,GACvDwvF,IACI3jF,EAAS,WACVo5T,EAAkBjlU,UAAW,yBAAqB,GACrDwvF,IACI9iF,EAAQotR,GAAMsnC,mBAAoBE,KACnC2D,EAAkBjlU,UAAW,iBAAa,GAC7CwvF,IACI3jF,EAAS,WACVo5T,EAAkBjlU,UAAW,cAAU,GAC1CwvF,IACI3jF,EAAS,IACVo5T,EAAkBjlU,UAAW,eAAW,GACpCilU,GACTthQ,IAKEuhQ,GAAkC,SAAUp1O,GAE5C,SAASo1O,IACL,OAAkB,OAAXp1O,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAiB/D,OAnBAsqF,GAAUi2O,EAAkBp1O,GAI5BN,IACI3jF,EAAS,WACVq5T,EAAiBllU,UAAW,iBAAa,GAC5CwvF,IACI3jF,EAAS,SACVq5T,EAAiBllU,UAAW,gBAAY,GAC3CwvF,IACI9iF,EAAQotR,GAAMgnC,cAAeQ,KAC9B4D,EAAiBllU,UAAW,iBAAa,GAC5CwvF,IACI9iF,GAAUyuB,MAAO,KAAMxgB,MAAO,EAAGtP,KAAM,aAAe05T,KACvDG,EAAiBllU,UAAW,cAAU,GACzCwvF,IACIxiF,KAAeg4T,KAChBE,EAAiBllU,UAAW,kBAAc,GACtCklU,GACTvhQ,ICpLEsrB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAe5D4jS,GAAqB,SAAUr1O,GAE/B,SAASq1O,IAML,IAAIzgU,EAAmB,OAAXorF,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAOhE,OALAD,EAAM0nE,QAEN1nE,EAAM0gU,aAEN1gU,EAAM2gU,YACC3gU,EA2BX,OAzCAuqF,GAAUk2O,EAAKr1O,GAqBfq1O,EAAInlU,UAAUslU,YAAc,SAAUxqT,EAAMue,EAAUkB,GAClD,IAAI5f,EAAQ,EAERG,EAAKqhB,UACLxhB,GAAUG,EAAKyqT,aAAazqT,EAAK0qT,aAAejrS,EAC5Czf,EAAK2qT,cAAc3qT,EAAK0qT,YAHb,GAG0C1qT,EAAK4qT,UAAU/qT,MAAQ,GAEhFG,EAAKsf,gBACLz1B,KAAK0gU,SAASl8T,KAAKwR,GAGnBhW,KAAKygU,UAAUj8T,KAAKwR,IAG5B60E,IACI3jF,EAAS,SACVs5T,EAAInlU,UAAW,cAAU,GAC5BwvF,IACI9iF,KAAY60T,KACb4D,EAAInlU,UAAW,cAAU,GACrBmlU,GACTxhQ,IAKEd,GAAwB,SAAUitB,GAElC,SAASjtB,IAML,IAAIn+D,EAAmB,OAAXorF,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAShE,OAPAD,EAAM0nE,QAEN1nE,EAAM0gU,aAEN1gU,EAAM2gU,YAEN3gU,EAAMq5D,QAAU,EACTr5D,EA2BX,OA3CAuqF,GAAUpsB,EAAQitB,GAuBlBjtB,EAAO7iE,UAAUslU,YAAc,SAAUxqT,EAAMue,EAAUkB,GACrD,IAAI7f,EAAS,EAETI,EAAKqhB,UACLzhB,GAAWI,EAAKyqT,aAAazqT,EAAK0qT,aAAejrS,EAC7Czf,EAAK2qT,cAAc3qT,EAAK0qT,YAHb,GAG0C1qT,EAAK4qT,UAAU/qT,MAAQ,GAEhFG,EAAKsf,gBACLz1B,KAAK0gU,SAASl8T,KAAKuR,GAGnB/V,KAAKygU,UAAUj8T,KAAKuR,IAG5B80E,IACI3jF,EAAS,SACVg3D,EAAO7iE,UAAW,aAAS,GAC9BwvF,IACI9iF,KAAY60T,KACb1+P,EAAO7iE,UAAW,cAAU,GACxB6iE,GACTc,IAKEgiQ,GAAgC,SAAU71O,GAE1C,SAAS61O,IACL,OAAkB,OAAX71O,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbAsqF,GAAU02O,EAAgB71O,GAI1BN,IACI3jF,EAAS,IACV85T,EAAe3lU,UAAW,aAAS,GACtCwvF,IACI3jF,EAAS,KACV85T,EAAe3lU,UAAW,iBAAa,GAC1CwvF,IACI3jF,EAAS,OACV85T,EAAe3lU,UAAW,aAAS,GAC/B2lU,GACThiQ,IAKEiiQ,GAAgC,SAAU91O,GAE1C,SAAS81O,IACL,OAAkB,OAAX91O,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbAsqF,GAAU22O,EAAgB91O,GAI1BN,IACI3jF,EAAS,KACV+5T,EAAe5lU,UAAW,aAAS,GACtCwvF,IACI3jF,EAAS,KACV+5T,EAAe5lU,UAAW,iBAAa,GAC1CwvF,IACI3jF,EAAS,OACV+5T,EAAe5lU,UAAW,aAAS,GAC/B4lU,GACTjiQ,IAKEkiQ,GAA0B,SAAU/1O,GAEpC,SAAS+1O,IACL,OAAkB,OAAX/1O,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbAsqF,GAAU42O,EAAU/1O,GAIpBN,IACI3jF,EAAS,IACVg6T,EAAS7lU,UAAW,aAAS,GAChCwvF,IACI3jF,EAAS,KACVg6T,EAAS7lU,UAAW,iBAAa,GACpCwvF,IACI3jF,EAAS,OACVg6T,EAAS7lU,UAAW,aAAS,GACzB6lU,GACTliQ,IAKEmiQ,GAAgC,SAAUh2O,GAE1C,SAASg2O,IACL,OAAkB,OAAXh2O,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbAsqF,GAAU62O,EAAgBh2O,GAI1BN,IACI3jF,EAAS,IACVi6T,EAAe9lU,UAAW,aAAS,GACtCwvF,IACI3jF,EAAS,IACVi6T,EAAe9lU,UAAW,cAAU,GACvCwvF,IACI3jF,EAAS,OACVi6T,EAAe9lU,UAAW,aAAS,GAC/B8lU,GACTniQ,IAKEoiQ,GAAgC,SAAUj2O,GAE1C,SAASi2O,IACL,OAAkB,OAAXj2O,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbAsqF,GAAU82O,EAAgBj2O,GAI1BN,IACI3jF,EAAS,KACVk6T,EAAe/lU,UAAW,aAAS,GACtCwvF,IACI3jF,EAAS,IACVk6T,EAAe/lU,UAAW,cAAU,GACvCwvF,IACI3jF,EAAS,OACVk6T,EAAe/lU,UAAW,aAAS,GAC/B+lU,GACTpiQ,IAKEqiQ,GAAkC,SAAUl2O,GAE5C,SAASk2O,IACL,OAAkB,OAAXl2O,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbAsqF,GAAU+2O,EAAkBl2O,GAI5BN,IACI3jF,GAAS,IACVm6T,EAAiBhmU,UAAW,cAAU,GACzCwvF,IACI3jF,EAAS,OACVm6T,EAAiBhmU,UAAW,YAAQ,GACvCwvF,IACI9iF,EAAQotR,GAAMmnC,mBAAoBK,KACnC0E,EAAiBhmU,UAAW,iBAAa,GACrCgmU,GACTriQ,IAKEsiQ,GAAsB,SAAUn2O,GAEhC,SAASm2O,IAIL,IAAIvhU,EAAmB,OAAXorF,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAuBhE,OArBAD,EAAMo1B,iBAENp1B,EAAM6e,UAEN7e,EAAMszB,KAAO,IAAI6C,QAAK/6B,OAAWA,EAAW,EAAG,GAE/C4E,EAAMwhU,eAAiB,KAEvBxhU,EAAM29T,cAAgB,GAAI,EAAG,EAAG,GAEhC39T,EAAMwhB,MAAQxhB,EAAMsvF,cAEpBtvF,EAAMo/T,YAAa,EAEnBp/T,EAAMyhU,QAAU,KAEhBzhU,EAAM0hU,YAAc,KAEpB1hU,EAAM2hU,sBAAwB,EAE9B3hU,EAAM4hU,SAAU,EACT5hU,EAybX,OArdAuqF,GAAUg3O,EAAMn2O,GAmChBm2O,EAAKjmU,UAAUulU,aAAe,SAAUgB,GACpC,MAA0B,WAAtB5hU,KAAK6hU,aACE,GAEPD,GAAeA,EAAUjvS,eAAgB3yB,KAAK8hU,SAASF,EAAUjvS,cAG9D3yB,KAAK+hU,eAAehsT,OAFhB,GASfurT,EAAKjmU,UAAUymU,SAAW,SAAU/vS,GAChC,OAAQD,GAAO9xB,KAAKwhU,QAASzvS,KACvB/xB,KAAKy1B,iBAAmBz1B,KAAKwhU,SAAWzvS,EAAMzlB,KAAStM,KAAKy1B,iBAAmBz1B,KAAKwhU,SAAWzvS,EAAMhS,KAO/GuhT,EAAKjmU,UAAUylU,cAAgB,SAAUc,EAAWI,GAChD,IAAIC,EAAY,EAIhB,GAHIjiU,KAAKkgC,QACL+hS,EAAYz1S,GAAYxsB,KAAKkgC,MAAOlgC,KAAK0gC,YAAY3qB,OAASisT,GAEvC,WAAvBhiU,KAAKy/G,cACL,OAAOwiN,EAAYD,EAEvB,IAAIvkP,EACAzgF,EACA6iC,EAAYoiS,EAAYD,EAnSlB,IAoSiB,aAArBhiU,KAAKo5B,YAA8Bp5B,KAAKkiU,aAAalsT,MAAQhW,KAAKkiU,aAAansT,QAAU/V,KAAK0hU,sBACpG,GAAIE,GAAa5hU,KAAKmiU,oBAAqB,CACvC,IAAIpwS,EAAQ6vS,EAAUjvS,aAClB7F,EAAkC,eAA1B80S,EAAUxoS,YAAgCwoS,EAAUvuS,KAAKrd,MAAQ4rT,EAAUvuS,KAAKtd,OAC5F,IAAKgc,IAAUjF,EACX,OAAO,EAEF9sB,KAAK8hU,SAAS/vS,KAInB8N,GADA49C,GAFAzgF,EAAQgD,KAAKoiU,eAAeR,MAET90S,IADnB2wD,EAAO,GAAW3wD,EAAOiF,EAAMkD,QACG4K,EAAaA,EAAY49C,EAAQ,IAAM1rD,EAAMkD,QAC3D4K,EAAcA,EAAY49C,EAAQ,GAG9D,OAAO59C,GAOXyhS,EAAKjmU,UAAUgnU,iBAAmB,SAAUxxS,GACxC,IAAI7zB,EAAQgD,KAAKwhU,QACjB,GAAc,OAAVxkU,IAAmBgD,KAAK8hU,SAAS9hU,KAAK6gU,YAAYluS,cAElD,OADA3yB,KAAKyhU,YAAczhU,KAAKqzB,KACjB,KAEX,IAAItB,EAAQ/xB,KAAK6gU,YAAYluS,aACxB3yB,KAAKy1B,gBAMFz1B,KAAKwhU,QAAUzvS,EAAMhS,MACrB/iB,EAAQ+0B,EAAMhS,KANd/f,KAAKwhU,QAAUzvS,EAAMzlB,MACrBtP,EAAQ+0B,EAAMzlB,KAQtBtM,KAAKyhU,YAAc/iU,KAAWsB,KAAKqzB,KAAM,MAAM,GACtB,eAArBrzB,KAAKo5B,aACLp8B,EAAQgD,KAAK6gU,YAAYxtS,KAAKtd,OAAUke,GAAmBj3B,EAAOgD,KAAK6gU,aAAe7gU,KAAK6gU,YAAYxtS,KAAKtd,OAC5G/V,KAAKyhU,YAAYz0T,EAAIhN,KAAK6gU,YAAYxtS,KAAKrmB,EAAIhQ,IAG/CA,EAAQi3B,GAAmBj3B,EAAOgD,KAAK6gU,aAAe7gU,KAAK6gU,YAAYxtS,KAAKrd,MAC5EhW,KAAKyhU,YAAY10T,EAAI/M,KAAK6gU,YAAYxtS,KAAKtmB,EAAI/P,IAGvDskU,EAAKjmU,UAAU+mU,eAAiB,SAAUR,GACtC,IAAI5kU,EAAQ,EAOZ,OALIA,EADAgD,KAAKy1B,gBACGmsS,EAAU1tS,WAAa0tS,EAAUjvS,aAAa5S,IAAM6hT,EAAUjvS,aAAarmB,IAG3Es1T,EAAU1tS,WAAa0tS,EAAUjvS,aAAarmB,IAAMs1T,EAAUjvS,aAAa5S,IAEhF1T,KAAKE,IAAIvM,KAAKwhU,QAAUxkU,IAOnCskU,EAAKjmU,UAAUwjU,sBAAwB,SAAU/xS,GAC7C,GAAI9sB,KAAKouE,WAAa,GAAKpuE,KAAK8+T,aAAe,EAAG,CAC9C,IAAIwD,EAAYtiU,KAAK69T,YACjBtgU,OAAQ,EACRshB,OAAM,EAONA,EANC7e,KAAKk0B,YAKN32B,EAAQyC,KAAK69T,YAAYvxT,IAAOtM,KAAK8+T,aAAe9+T,KAAK69T,YAAY5oS,OACtDj1B,KAAKouE,WAAapuE,KAAK69T,YAAY5oS,OALlD13B,EAAQyC,KAAK69T,YAAY99S,IAAM/f,KAAK8+T,aAAe9+T,KAAK69T,YAAY5oS,OACtDj1B,KAAKouE,WAAapuE,KAAK69T,YAAY5oS,MAMjD13B,EAAQ+kU,EAAUviT,MAClBlB,GAAayjT,EAAUviT,IAAMxiB,EAC7BA,EAAQ+kU,EAAUviT,KAElBlB,EAAMyjT,EAAUh2T,MAChB/O,GAAiBshB,EAAMyjT,EAAUh2T,IACjCuS,EAAMyjT,EAAUh2T,KAEpBtM,KAAK89T,YAAc,IAAIV,GAAY7/T,EAAOshB,GAC1C7e,KAAK2yB,aAAa5S,IAAM/f,KAAK89T,YAAYvgU,MACzCyC,KAAK2yB,aAAarmB,IAAMtM,KAAK89T,YAAYj/S,IACzC7e,KAAK2yB,aAAasC,MAAQj1B,KAAK89T,YAAY7oS,QAQnDqsS,EAAKjmU,UAAU2jU,mBAAqB,SAAUnuS,EAAOoI,EAASC,EAAS/2B,GACnE,IAAIy2B,EACJA,GACIC,QAAQ,EAAOpB,KAAM+nS,GAAqBrpT,KAAMnW,KAChDi5B,QAASA,EAASC,QAASA,EAAS/2B,SAAUA,GAElD0uB,EAAMrK,QAAQg5S,GAAqB5mS,GAC9BA,EAASC,SACV74B,KAAK2yB,aAAa5S,IAAM6Y,EAASK,QACjCj5B,KAAK2yB,aAAarmB,IAAMssB,EAASM,QACjCl5B,KAAK2yB,aAAaxwB,SAAWy2B,EAASz2B,SACtCnC,KAAK2yB,aAAasC,MAAQ2D,EAASM,QAAUN,EAASK,UAQ9DqoS,EAAKjmU,UAAUojU,gBAAkB,SAAU5tS,GACvC,IAAIuoC,EAAUp5D,KAAKu+T,aACnB,GAAgB,SAAZnlQ,EACA,OAAOA,EAEX,OAAQp5D,KAAKo5B,aACT,IAAK,aAEGggC,EADAvoC,EAAMiG,oBACK92B,KAAKm/T,WAAa,QAAU,SAG7B,OAEd,MACJ,IAAK,WAKG/lQ,EAJCvoC,EAAMiG,oBAIG,OAHC92B,KAAKm/T,WAAa,QAAU,SAOnD,OAAO/lQ,GAOXkoQ,EAAKjmU,UAAU6jU,iBAAmB,SAAUruS,GACxC,IAEI0xS,EACAC,EAAc,EACdC,GAAc,EAClBziU,KAAKuhB,MAAQvhB,KAAKqvF,cAClBrvF,KAAKkiU,aAAe,IAAI90S,GAAK,EAAG,GAGhC,IAAK,IADD/Z,EADA8iD,EAASn2D,KAAK0iU,qBAETvmU,EAAI,EAAGA,EAAI6D,KAAKm1B,cAAc14B,OAAQN,IAU3C,GATAkX,EAAQrT,KAAKm1B,cAAch5B,GAC3BkX,EAAMyZ,KAAON,GAAYnZ,EAAMoZ,KAAMzsB,KAAKg2B,YACtC3iB,EAAMyZ,KAAK9W,MAAQhW,KAAKkiU,aAAalsT,QACrChW,KAAKkiU,aAAalsT,MAAQ3C,EAAMyZ,KAAK9W,MACrChW,KAAK2iU,aAAetvT,EAAMoZ,MAE1BpZ,EAAMyZ,KAAK/W,OAAS/V,KAAKkiU,aAAansT,SACtC/V,KAAKkiU,aAAansT,OAAS1C,EAAMyZ,KAAK/W,QAE3B,SAAXogD,GAAgC,SAAXA,GAAgC,SAAXA,IAG9B,SAAXA,GAAqBn2D,KAAKuhB,MAAQ,KAAQ,IAA2B,eAArBvhB,KAAKo5B,aACtDp5B,KAAKqzB,KAAKrd,MAAQ,IAAMysT,EAAa,CAWrC,OAVAF,EAAUtuS,GAAmB5gB,EAAMrW,MAAOgD,MAAQA,KAAKqzB,KAAKrd,MAAShW,KAAKqzB,KAAKtmB,EAC/Ew1T,GAAUlvT,EAAMyZ,KAAK9W,MAAQ,EACG,UAA5BhW,KAAK4iU,qBACK,IAANzmU,GAAWomU,EAASviU,KAAKqzB,KAAKtmB,IAC9Bw1T,EAASviU,KAAKqzB,KAAKtmB,GAEnB5Q,IAAM6D,KAAKm1B,cAAc14B,OAAS,GAAO8lU,EAASlvT,EAAMyZ,KAAK9W,MAAUhW,KAAKqzB,KAAKtmB,EAAI/M,KAAKqzB,KAAKrd,QAC/FusT,EAASviU,KAAKqzB,KAAKtmB,EAAI/M,KAAKqzB,KAAKrd,MAAQ3C,EAAMyZ,KAAK9W,QAGpDmgD,GACJ,IAAK,eACGh6D,EAAI,GACJ6D,KAAK6iU,cAAc1mU,EAAGomU,EAAQlvT,GAElC,MACJ,IAAK,WACL,IAAK,WACGlX,EAAI,IAAO6D,KAAKk0B,WAAqCquS,EAASlvT,EAAMyZ,KAAK9W,OAASwsT,EAArDD,GAAUC,KACvCxiU,KAAKuhB,MAAoB,aAAX40C,EAAyB,GAAK,GAC5CssQ,GAAc,GAElB,MACJ,QACIpvT,EAAMoZ,KAAO4T,GAAShtB,EAAMoZ,KAAMzsB,KAAKqzB,KAAKrd,MAAQhW,KAAKm1B,cAAc14B,OAAQuD,KAAKg2B,YACpF,IAAIjgB,EAAU1C,EAAMyZ,KAAK/W,OAAS1C,EAAMoZ,KAAKhwB,OACzCsZ,EAAS/V,KAAKkiU,aAAansT,SAC3B/V,KAAKkiU,aAAansT,OAASA,GAIvCysT,EAAcxiU,KAAKk0B,WAAaquS,EAASA,EAASlvT,EAAMyZ,KAAK9W,MAGlD,IAAfhW,KAAKuhB,OAAoC,eAArBvhB,KAAKo5B,cACzBp5B,KAAKkiU,aAAetxS,GAAe5wB,KAAKg2B,WAAYh2B,KAAK2iU,aAAc3iU,KAAKuhB,MAAOsP,IAEnFA,EAAMiyS,uBAAyB9iU,KAAK+iU,iBAAiBtmU,OAAS,GAC9Do0B,EAAMiyS,sBAAsBE,0BAA0BhjU,OAO9DshU,EAAKjmU,UAAUwnU,cAAgB,SAAUpmU,EAAQwmU,EAAUriS,GAKvD,IAAK,IAJDvtB,EACAkvT,EACAW,KAEK/mU,EAAIM,EAAS,EAAGN,GAAK,EAAGA,IAE7BomU,EAAUtuS,IADV5gB,EAAQrT,KAAKm1B,cAAch5B,IACQa,MAAOgD,MAAQA,KAAKqzB,KAAKrd,MAAShW,KAAKqzB,KAAKtmB,GAChE/M,KAAKk0B,WAChB+uS,EAAWriS,EAAa9T,KAAK9W,MAASusT,EAASlvT,EAAMyZ,KAAK9W,MAAQ,EADrCitT,EAAYV,EAASlvT,EAAMyZ,KAAK9W,MAAQ,IAGrEktT,EAAM1+T,KAAK6O,EAAMpB,OACjB2uB,EAAa3uB,MAAS2uB,EAAa3uB,MAAQoB,EAAMpB,MAAS2uB,EAAa3uB,MAAQoB,EAAMpB,MAAQ,GAG7F2uB,EAAa3uB,MAAQixT,EAAM3kU,QAAQ8U,EAAMpB,QAAU,EAAI2uB,EAAa3uB,MAAQoB,EAAMpB,MAG1F,IAAI8D,EAAU6qB,EAAa9T,KAAK/W,OAAS6qB,EAAa3uB,MAAU,GAAK2uB,EAAa3uB,MAAQ,GACtF8D,EAAS/V,KAAKkiU,aAAansT,SAC3B/V,KAAKkiU,aAAansT,OAASA,IAQnCurT,EAAKjmU,UAAU8nU,UAAY,SAAUtyS,GACV,WAAnB7wB,KAAKkyB,UACLlyB,KAAKojU,WAAa,IAAI7F,GAAO1sS,GAG7B7wB,KAAKojU,WAAavyS,EAAMkG,GAAiB/2B,KAAKkyB,WAAa,WAGnE24D,IACI9iF,EAAQotR,GAAMgnC,cAAeQ,KAC9B2E,EAAKjmU,UAAW,kBAAc,GACjCwvF,IACI9iF,KAAYs5T,KACbC,EAAKjmU,UAAW,wBAAoB,GACvCwvF,IACI3jF,EAAS,KACVo6T,EAAKjmU,UAAW,aAAS,GAC5BwvF,IACI9iF,EAAQotR,GAAMinC,cAAeO,KAC9B2E,EAAKjmU,UAAW,kBAAc,GACjCwvF,IACI3jF,EAAS,KACVo6T,EAAKjmU,UAAW,mBAAe,GAClCwvF,IACI3jF,EAAS,KACVo6T,EAAKjmU,UAAW,gBAAY,GAC/BwvF,IACI3jF,EAAS,aACVo6T,EAAKjmU,UAAW,oBAAgB,GACnCwvF,IACI3jF,EAAS,IACVo6T,EAAKjmU,UAAW,kBAAc,GACjCwvF,IACI3jF,GAAS,IACVo6T,EAAKjmU,UAAW,iBAAa,GAChCwvF,IACI3jF,EAAS,KACVo6T,EAAKjmU,UAAW,eAAW,GAC9BwvF,IACI3jF,EAAS,IACVo6T,EAAKjmU,UAAW,mBAAe,GAClCwvF,IACI3jF,EAAS,IACVo6T,EAAKjmU,UAAW,gBAAY,GAC/BwvF,IACI3jF,EAAS,IACVo6T,EAAKjmU,UAAW,YAAQ,GAC3BwvF,IACI3jF,EAAS,OACVo6T,EAAKjmU,UAAW,wBAAoB,GACvCwvF,IACI3jF,EAAS,IACVo6T,EAAKjmU,UAAW,qBAAiB,GACpCwvF,IACI3jF,EAAS,IACVo6T,EAAKjmU,UAAW,kBAAc,GACjCwvF,IACI3jF,EAAS,IACVo6T,EAAKjmU,UAAW,oBAAgB,GACnCwvF,IACI3jF,GAAS,IACVo6T,EAAKjmU,UAAW,uBAAmB,GACtCwvF,IACI3jF,GAAS,IACVo6T,EAAKjmU,UAAW,mCAA+B,GAClDwvF,IACI3jF,EAAS,SACVo6T,EAAKjmU,UAAW,oBAAgB,GACnCwvF,IACI3jF,EAAS,WACVo6T,EAAKjmU,UAAW,iBAAa,GAChCwvF,IACI3jF,EAAS,SACVo6T,EAAKjmU,UAAW,0BAAsB,GACzCwvF,IACI3jF,EAAS,SACVo6T,EAAKjmU,UAAW,oBAAgB,GACnCwvF,IACI3jF,EAAS,iBACVo6T,EAAKjmU,UAAW,sBAAkB,GACrCwvF,IACI3jF,EAAS,YACVo6T,EAAKjmU,UAAW,oBAAgB,GACnCwvF,IACI3jF,EAAS,YACVo6T,EAAKjmU,UAAW,qBAAiB,GACpCwvF,IACI3jF,EAAS,KACVo6T,EAAKjmU,UAAW,YAAQ,GAC3BwvF,IACI3jF,GAAS,IACVo6T,EAAKjmU,UAAW,eAAW,GAC9BwvF,IACI3jF,EAAS,IACVo6T,EAAKjmU,UAAW,6BAAyB,GAC5CwvF,IACI3jF,EAAS,IACVo6T,EAAKjmU,UAAW,qBAAiB,GACpCwvF,IACI3jF,EAAS,OACVo6T,EAAKjmU,UAAW,iBAAa,GAChCwvF,IACI3jF,GAAS,IACVo6T,EAAKjmU,UAAW,2BAAuB,GAC1CwvF,IACI3jF,EAAS,OACVo6T,EAAKjmU,UAAW,qBAAiB,GACpCwvF,IACI3jF,EAAS,OACVo6T,EAAKjmU,UAAW,eAAW,GAC9BwvF,IACI3jF,EAAS,OACVo6T,EAAKjmU,UAAW,eAAW,GAC9BwvF,IACI3jF,EAAS,OACVo6T,EAAKjmU,UAAW,gBAAY,GAC/BwvF,IACI9iF,KAAYo5T,KACbG,EAAKjmU,UAAW,sBAAkB,GACrCwvF,IACI9iF,KAAYq5T,KACbE,EAAKjmU,UAAW,sBAAkB,GACrCwvF,IACI9iF,KAAYi5T,KACbM,EAAKjmU,UAAW,sBAAkB,GACrCwvF,IACI9iF,KAAYk5T,KACbK,EAAKjmU,UAAW,sBAAkB,GACrCwvF,IACI9iF,KAAYm5T,KACbI,EAAKjmU,UAAW,iBAAa,GAChCwvF,IACI3jF,EAAS,SACVo6T,EAAKjmU,UAAW,4BAAwB,GAC3CwvF,IACI3jF,GAAS,IACVo6T,EAAKjmU,UAAW,kBAAc,GACjCwvF,IACI3jF,EAAS,MACVo6T,EAAKjmU,UAAW,mBAAe,GAClCwvF,IACI3jF,EAAS,IACVo6T,EAAKjmU,UAAW,kBAAc,GACjCwvF,IACI3jF,EAAS,OACVo6T,EAAKjmU,UAAW,mBAAe,GAClCwvF,IACI3jF,EAAS,IACVo6T,EAAKjmU,UAAW,gBAAY,GAC/BwvF,IACIxiF,KAAei4T,KAChBgB,EAAKjmU,UAAW,kBAAc,GACjCwvF,IACIxiF,KAAek4T,KAChBe,EAAKjmU,UAAW,wBAAoB,GACvCwvF,IACI9iF,GAAUyuB,MAAO,KAAMxgB,MAAO,EAAGtP,KAAM,aAAe05T,KACvDkB,EAAKjmU,UAAW,cAAU,GACtBimU,GACTtiQ,IAGEjmC,GAA+B,WAW/B,OAVA,SAAuBtM,EAAMzvB,EAAOg5B,EAAYlJ,EAAM7a,QACrC,IAAT6a,IAAmBA,EAAO,IAAIM,GAAK,EAAG,SAC5B,IAAVnb,IAAoBA,EAAQ,GAChCjS,KAAKysB,KAAOA,EACZzsB,KAAKqjU,aAAe52S,EACpBzsB,KAAKhD,MAAQA,EACbgD,KAAKg2B,WAAaA,EAClBh2B,KAAK8sB,KAAOA,EACZ9sB,KAAKiS,MAAQ,M7N1tBjBq4E,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GA8SxC24O,GAAsB,WAStB,OARA,SAAcC,EAAsBC,EAAoBC,EAAwBC,EAAsBC,EAAcC,GAChH5jU,KAAKujU,qBAAuBA,EAC5BvjU,KAAKyjU,uBAAyBA,EAC9BzjU,KAAKwjU,mBAAqBA,EAC1BxjU,KAAK0jU,qBAAuBA,EAC5B1jU,KAAK2jU,aAAeA,EACpB3jU,KAAK4jU,eAAiBA,MAM1BC,GAA0B,WAQ1B,OAPA,SAAkBpvS,EAAYuQ,EAAUqB,EAAaz5B,EAAQk3T,GACzD9jU,KAAKy0B,WAAaA,EAClBz0B,KAAKglC,SAAWA,EAChBhlC,KAAKqmC,YAAcA,EACnBrmC,KAAK4M,OAASA,EACd5M,KAAK8jU,iBAAmBA,MAi7B5BhiC,GAAiC,WAIjC,OAHA,SAAyBx+R,GACrBtD,KAAKsD,GAAKA,MAMdygU,GAA6B,WAK7B,OAJA,SAAqB57S,EAAY+P,GAC7Bl4B,KAAKgkU,YAAc77S,EACnBnoB,KAAKikU,UAAY/rS,MAMrB3B,GAA4B,SAAU40D,GAEtC,SAAS50D,EAAWjzB,EAAIyJ,EAAGC,EAAG6G,EAAQ4Y,EAAMpf,EAAW8xB,QACjC,IAAd9xB,IAAwBA,EAAY,IACxC,IAAItN,EAAQorF,EAAO7pF,KAAKtB,KAAMsD,IAAOtD,KASrC,OARAD,EAAMsN,UAAY,GAClBtN,EAAMo/B,SAAW,OACjBp/B,EAAMgN,EAAIA,EACVhN,EAAMiN,EAAIA,EACVjN,EAAM8T,OAASA,EACf9T,EAAM0sB,KAAOA,EACb1sB,EAAMsN,UAAYA,EAClBtN,EAAMo/B,SAAWA,EACVp/B,EAEX,OAdAuqF,GAAU/zD,EAAY40D,GAcf50D,GACTurQ,IAGE1rQ,GAA4B,SAAU+0D,GAEtC,SAAS/0D,EAAW9yB,EAAIs6B,EAAM5nB,EAAOwgB,EAAO/oB,EAASqkC,EAAWvjB,GAC5D,IAAIxuB,EAAQorF,EAAO7pF,KAAKtB,KAAMsD,IAAOtD,KAOrC,OANAD,EAAM0N,QAAUA,EAChB1N,EAAM69B,KAAOA,EACb79B,EAAM+9B,OAAStH,EACfz2B,EAAM,gBAAkBiW,EACxBjW,EAAM,oBAAsB+xC,EAC5B/xC,EAAMwuB,EAAIA,EACHxuB,EAEX,OAXAuqF,GAAUl0D,EAAY+0D,GAWf/0D,GACT0rQ,IAGEoiC,GAA4B,SAAU/4O,GAEtC,SAAS+4O,EAAW5gU,EAAIs6B,EAAM0G,EAAQ72B,EAAS4lB,EAAMlF,EAAIC,EAAI/gB,EAAWykC,GACpE,IAAI/xC,EAAQorF,EAAO7pF,KAAKtB,KAAMsD,EAAIs6B,EAAM0G,EAAOtuB,MAAOsuB,EAAO9N,MAAO/oB,EAASqkC,IAAc9xC,KAQ3F,OAPAD,EAAMiN,EAAIqmB,EAAKrmB,EACfjN,EAAMgN,EAAIsmB,EAAKtmB,EACfhN,EAAMgW,OAASsd,EAAKtd,OACpBhW,EAAMiW,MAAQqd,EAAKrd,MACnBjW,EAAMouB,GAAKA,GAAU,EACrBpuB,EAAMquB,GAAKA,GAAU,EACrBruB,EAAMsN,UAAYA,GAAwB,GACnCtN,EAEX,OAZAuqF,GAAU45O,EAAY/4O,GAYf+4O,GACT9tS,IAGE+tS,GAA8B,SAAUh5O,GAExC,SAASg5O,EAAa7gU,EAAIs6B,EAAM0G,EAAQ72B,EAAS4gB,EAAIC,EAAIsO,GACrD,IAAI78B,EAAQorF,EAAO7pF,KAAKtB,KAAMsD,EAAIs6B,EAAM0G,EAAOtuB,MAAOsuB,EAAO9N,MAAO/oB,IAAYzN,KAIhF,OAHAD,EAAMuuB,GAAKA,EACXvuB,EAAMsuB,GAAKA,EACXtuB,EAAM68B,EAAIA,EACH78B,EAEX,OARAuqF,GAAU65O,EAAch5O,GAQjBg5O,GACT/tS,IAGEguS,GAA+B,WAM/B,OALA,SAAuB9gU,EAAIq0B,EAAQiG,GAC/B59B,KAAKsD,GAAKA,EACVtD,KAAK23B,OAASA,EACd33B,KAAK49B,KAAOA,MAMhBxQ,GAAsB,WAKtB,OAJA,SAAcpX,EAAOD,GACjB/V,KAAKgW,MAAQA,EACbhW,KAAK+V,OAASA,MAMlBmgB,GAAsB,WAOtB,OANA,SAAcnpB,EAAGC,EAAGgJ,EAAOD,GACvB/V,KAAK+M,EAAIA,EACT/M,KAAKgN,EAAIA,EACThN,KAAKgW,MAAQA,EACbhW,KAAK+V,OAASA,MAMlB6d,GAA+B,WAK/B,OAJA,SAAuB7mB,EAAGC,GACtBhN,KAAK+M,EAAIA,EACT/M,KAAKgN,EAAIA,MAMbq3T,GAA2B,WAO3B,OANA,SAAmB73T,EAAMC,EAAOC,EAAKC,GACjC3M,KAAKwM,KAAOA,EACZxM,KAAKyM,MAAQA,EACbzM,KAAK0M,IAAMA,EACX1M,KAAK2M,OAASA,MAMlBuwB,GAA4B,WAM5B,OALA,SAAoBN,EAAGC,EAAGC,GACtB98B,KAAK48B,EAAIA,EACT58B,KAAK68B,EAAIA,EACT78B,KAAK88B,EAAIA,MAMbwnS,GAA2B,WAO3B,OANA,SAAmBxwS,EAAOlV,EAAQ3M,QAChB,IAAVA,IAAoBA,EAAQ,GAChCjS,KAAK8zB,MAAQA,EACb9zB,KAAK4e,OAASA,EACd5e,KAAKukU,UAAYtyT,MAMrBuyT,GAA8B,WAM9B,OALA,SAAsB1wS,EAAOlV,EAAQ3M,QACnB,IAAVA,IAAoBA,EAAQ,GAChCjS,KAAK8zB,MAAQA,EACb9zB,KAAK4e,OAASA,MAMlB6lT,GAA+B,WAK/B,OAJA,SAAuBn/Q,EAAeC,GAClCvlD,KAAKslD,cAAgBA,EACrBtlD,KAAKulD,cAAgBA,M8N/4CzBm/Q,GAA0C,WAE1C,SAASA,EAAyBC,GAC9B3kU,KAAK6wB,MAAQ8zS,EACb3kU,KAAKo5D,QAAU,EAyjCnB,OAljCAsrQ,EAAyBrpU,UAAUupU,YAAc,SAAUvxS,GACvD,IAAIxC,EAAQ7wB,KAAK6wB,MACjB7wB,KAAKwhU,QAAQ3wS,GACb7wB,KAAK6kU,eAAiB,IAAI3uS,GAAK7C,EAAKtmB,EAAGsmB,EAAKrmB,EAAGqmB,EAAKrd,MAAOqd,EAAKtd,QAChE/V,KAAK8kU,gBAAkBzxS,EACvBrzB,KAAK+kU,SAAW,EAChB/kU,KAAKglU,UAAY,EACjBhlU,KAAKilU,QAAU,EACfjlU,KAAKklU,WAAa,EAElBllU,KAAKmlU,eAAet0S,EAAO7wB,KAAK8kU,iBAChC9kU,KAAK8kU,gBAAkB1xS,GAAkBpzB,KAAK8kU,gBAAiB,IAAIT,GAAUrkU,KAAK+kU,SAAU/kU,KAAKglU,UAAW,EAAG,IAC/GhlU,KAAKolU,kBAAkBv0S,EAAO7wB,KAAK8kU,iBACnC9kU,KAAK8kU,gBAAkB1xS,GAAkBpzB,KAAK8kU,gBAAiB,IAAIT,GAAU,EAAG,EAAGrkU,KAAKilU,QAASjlU,KAAKklU,aACjGllU,KAAK6wB,MAAMQ,aACZrxB,KAAKqlU,kBAAkBrlU,KAAK8kU,iBAEhC9kU,KAAK+kU,SAAW,EAChB/kU,KAAKglU,UAAY,EACjBhlU,KAAKilU,QAAU,EACfjlU,KAAKklU,WAAa,EAElBllU,KAAKmlU,eAAet0S,EAAO7wB,KAAK8kU,iBAChC9kU,KAAK6kU,eAAiBzxS,GAAkBpzB,KAAK6kU,eAAgB,IAAIR,GAAUrkU,KAAK+kU,SAAU/kU,KAAKglU,UAAW,EAAG,IAC7GhlU,KAAKolU,kBAAkBv0S,EAAO7wB,KAAK8kU,iBACnC9kU,KAAK6kU,eAAiBzxS,GAAkBpzB,KAAK6kU,eAAgB,IAAIR,GAAU,EAAG,EAAGrkU,KAAKilU,QAASjlU,KAAKklU,aAC/FllU,KAAK6wB,MAAMQ,cACZR,EAAMy0S,cACNtlU,KAAKqlU,kBAAkBrlU,KAAK6kU,kBAGpCH,EAAyBrpU,UAAU8pU,eAAiB,SAAUt0S,EAAOwC,GACjE,IAAIqtC,EACJ1gE,KAAKulU,iBAAiBlyS,GACtB,IAAK,IAAIj1B,EAAK,EAAGyE,EAAKguB,EAAM0nQ,KAAMn6R,EAAKyE,EAAGpG,OAAQ2B,IAAM,EAEpDsiE,EADW79D,EAAGzE,IAEVqiU,aACJ//P,EAAIggQ,YACJ1gU,KAAKwlU,YAAY9kQ,GACjB1gE,KAAKylU,kBAAkB/kQ,EAAK7vC,EAAO,IAAIzD,GAAKyD,EAAM8E,cAAc3f,MAAO0qD,EAAIglQ,gBAAiBryS,GACxFrzB,KAAK+kU,SAAWjyS,GAAI4tC,EAAI+/P,aACxBzgU,KAAK+kU,SAAWjyS,GAAI4tC,EAAI+/P,YAExBzgU,KAAKglU,UAAYlyS,GAAI4tC,EAAIggQ,YACzB1gU,KAAKglU,UAAYlyS,GAAI4tC,EAAIggQ,aAIrCgE,EAAyBrpU,UAAU+pU,kBAAoB,SAAUv0S,EAAOwC,GACpE,IAAIwpC,EACJ78D,KAAK2lU,oBAAoBtyS,GACzB,IAAK,IAAIj1B,EAAK,EAAGyE,EAAKguB,EAAMktC,QAAS3/D,EAAKyE,EAAGpG,OAAQ2B,IAAM,EAEvDy+D,EADWh6D,EAAGzE,IAEPsiU,YACP7jQ,EAAO4jQ,aACPzgU,KAAKwlU,YAAY3oQ,GACjB78D,KAAKylU,kBAAkB5oQ,EAAQhsC,EAAO,IAAIzD,GAAKyvC,EAAO+oQ,cAAe/0S,EAAM8E,cAAc5f,QAASsd,GAC9FrzB,KAAKklU,WAAapyS,GAAI+pC,EAAO4jQ,aAC7BzgU,KAAKklU,WAAapyS,GAAI+pC,EAAO4jQ,YAE7BzgU,KAAKilU,QAAUnyS,GAAI+pC,EAAO6jQ,YAC1B1gU,KAAKilU,QAAUnyS,GAAI+pC,EAAO6jQ,aAStCgE,EAAyBrpU,UAAUoqU,kBAAoB,SAAUI,EAAYh1S,EAAO/D,EAAM4H,GACtF,IAEK,IAAIt2B,EAAK,EAAGyE,EAAKgjU,EAAWp+P,KAAMrpE,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACzD,IAAI0nU,EAASjjU,EAAGzE,GAChB0nU,EAAOlwS,gBAAkB/E,EAAMk1S,iBAAmBl1S,EAAMw9C,aAAa23P,iBAAmBn1S,EAAMiiD,WAAWmzP,WACjGH,EAAO13P,WAAa,GAAK03P,EAAOhH,aAAe,GAAK,GAAK,EACjEgH,EAAOlwS,gBAAkB/E,EAAMQ,YAAey0S,EAAOjwS,kBAAoBiwS,EAAOjwS,iBAAiBvE,WAC7Fw0S,EAAOjwS,iBAAiBvE,UAAU6zC,kBAAqB,GAAK,EAAI2gQ,EAAOlwS,gBAC3EkwS,EAAO3C,UAAUtyS,GACjBi1S,EAAO1C,WAAWnF,0BAA0BnxS,EAAMg5S,GAClDD,EAAWlF,YAAYmF,EAAQpxS,EAAUoxS,EAAOlwS,iBAEhDiwS,EAAWnF,SAASjkU,OAAS,IAC7BopU,EAAWnF,SAASmF,EAAWnF,SAASjkU,OAAS,IAlG3C,IAoGNopU,EAAWpF,UAAUhkU,OAAS,IAC9BopU,EAAWpF,UAAUoF,EAAWpF,UAAUhkU,OAAS,IArG7C,KA6GdioU,EAAyBrpU,UAAUgqU,kBAAoB,SAAUhyS,GAC7D,IACIqtC,EACA7D,EACAgpQ,EACA1vT,EAIApJ,EACAC,EATA6jB,EAAQ7wB,KAAK6wB,MAKbq1S,EAAY,EACZC,EAAW,EACXr5S,EAAO,EAGX9sB,KAAKulU,iBAAiBlyS,GACtB,IAAK,IAAIl3B,EAAI,EAAG0F,EAAMgvB,EAAM0nQ,KAAK97R,OAAQN,EAAI0F,EAAK1F,IAAK,CAEnD+pU,EAAY,EACZC,EAAW,EACX,IAAK,IAAI5iT,EAAI,EAAGspI,GAHhBnsF,EAAM7vC,EAAM0nQ,KAAKp8R,IAGWsrE,KAAKhrE,OAAQ8mB,EAAIspI,EAAOtpI,IAAK,CAErD,GAAyB,KADzBpN,EAAOuqD,EAAI+G,KAAKlkD,IACP8P,KAAKtd,OAAc,CACxBI,EAAKkd,KAAKtd,OAAS2qD,EAAIglQ,eACvB54S,EAAO,EACP,IAAK,IAAI3G,EAAIhqB,EAAI,EAAGiqU,EAAQjqU,EAAIga,EAAKwsD,KAAMx8C,EAAIigT,EAAOjgT,IAElD2G,IADA+4S,EAAah1S,EAAM0nQ,KAAKpyQ,IACLu/S,eAEvBvvT,EAAKkd,KAAKrmB,EAAK0zD,EAAI2lQ,YAAcv5S,EAAQ3W,EAAKmwT,WAC9CnwT,EAAKkd,KAAKtd,OAAUI,EAAKkd,KAAKtd,OAAS+W,EAAS,EAAI3W,EAAKmwT,WACzDnwT,EAAKkd,KAAKrd,MAAQ,EAElBG,EAAKsf,iBACL1oB,EAAIsmB,EAAKtmB,EAAIsmB,EAAKrd,MAAQ8c,GAAIkB,GAAS0sC,EAAIggQ,SAAUyF,IACrDhwT,EAAKkd,KAAKtmB,EAAIoJ,EAAKkd,KAAKtmB,GAAKA,EAAIoJ,EAAKkd,KAAKtmB,EAAIA,EAC/Co5T,MAGAp5T,EAAIsmB,EAAKtmB,EAAI+lB,GAAIkB,GAAS0sC,EAAI+/P,UAAWyF,IACzC/vT,EAAKkd,KAAKtmB,EAAIoJ,EAAKkd,KAAKtmB,GAAKA,EAAIoJ,EAAKkd,KAAKtmB,EAAIA,EAC/Cm5T,MAIZlmU,KAAK2lU,oBAAoBtyS,GACzB,IAASl3B,EAAI,EAAG0F,EAAMgvB,EAAMktC,QAAQthE,OAAQN,EAAI0F,EAAK1F,IAAK,CAEtD+pU,EAAY,EACZC,EAAW,EACF5iT,EAAI,EAAb,IAAK,IAAWgjT,GAHhB1pQ,EAAShsC,EAAMktC,QAAQ5hE,IAGQsrE,KAAKhrE,OAAQ8mB,EAAIgjT,EAAOhjT,IAAK,CAExD,GAAwB,KADxBpN,EAAO0mD,EAAO4K,KAAKlkD,IACV8P,KAAKrd,MAAa,CACdmQ,EAAIhqB,EAAb,IAAK,IAAWqqU,EAASrqU,EAAIga,EAAKwsD,KAAOx8C,EAAIqgT,EAAOrgT,IAChD0/S,EAAah1S,EAAMktC,QAAQ53C,GAC3BhQ,EAAKkd,KAAKrd,OAAS6vT,EAAWD,cAElCzvT,EAAKkd,KAAKtmB,EAAI8vD,EAAO4pQ,aAAetwT,EAAKmwT,WACzCnwT,EAAKkd,KAAKrd,OAAU,EAAIG,EAAKmwT,WAC7BnwT,EAAKkd,KAAKtd,OAAS,EAEnBI,EAAKsf,iBACLzoB,EAAIqmB,EAAKrmB,EAAI8lB,GAAIkB,GAAS6oC,EAAO6jQ,SAAUyF,IAC3ChwT,EAAKkd,KAAKrmB,EAAImJ,EAAKkd,KAAKrmB,GAAKA,EAAImJ,EAAKkd,KAAKrmB,EAAIA,EAC/Cm5T,MAGAn5T,EAAIqmB,EAAKrmB,EAAIqmB,EAAKtd,OAAS+c,GAAIkB,GAAS6oC,EAAO4jQ,UAAWyF,IAC1D/vT,EAAKkd,KAAKrmB,EAAImJ,EAAKkd,KAAKrmB,GAAKA,EAAImJ,EAAKkd,KAAKrmB,EAAIA,EAC/Ck5T,QAUhBxB,EAAyBrpU,UAAUugS,QAAU,WAQzC,IACK,IAPDl7N,EACA7D,EACAgpQ,EAEAa,EACA/jQ,EANA9xC,EAAQ7wB,KAAK6wB,MAQRzyB,EAAK,EAAGyE,EAAKguB,EAAM81S,gBAAiBvoU,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC/D,IAAIwoU,EAAS/jU,EAAGzE,GAEhB,GAA2B,aAAvBwoU,EAAOxtS,YAA4B,CACnCvI,EAAMg2S,aAAariU,KAAKoiU,GACxBF,EAAc1mU,KAAK8mU,aAAaF,GAChClmQ,EAAM7vC,EAAM0nQ,KAAKmuC,GACjB1mU,KAAK+mU,SAASrmQ,EAAKkmQ,GACnBjkQ,EAAS+jQ,EAAcE,EAAOjkQ,KAAQ9xC,EAAM0nQ,KAAK97R,OAASo0B,EAAM0nQ,KAAK97R,OAAUiqU,EAAcE,EAAOjkQ,KACpG,IAAK,IAAIp/C,EAAImjT,EAAc,EAAGnjT,EAAIo/C,EAAMp/C,KACpCsiT,EAAah1S,EAAM0nQ,KAAKh1Q,IACbkkD,KAAK/G,EAAI+G,KAAKhrE,OAAS,GAAKmqU,EACvC/1S,EAAM0nQ,KAAKh1Q,GAAKsiT,EAEpBh1S,EAAM0nQ,KAAKmuC,GAAehmQ,MAEzB,CACD7vC,EAAMm2S,eAAexiU,KAAKoiU,GAC1BF,EAAc1mU,KAAKinU,gBAAgBL,GACnC/pQ,EAAShsC,EAAMktC,QAAQ2oQ,GACvB1mU,KAAK+mU,SAASlqQ,EAAQ+pQ,GACtBjkQ,EAAS+jQ,EAAcE,EAAOjkQ,KAAQ9xC,EAAMktC,QAAQthE,OAASo0B,EAAMktC,QAAQthE,OAAUiqU,EAAcE,EAAOjkQ,KAC1G,IAASp/C,EAAImjT,EAAc,EAAGnjT,EAAIo/C,EAAMp/C,KACpCsiT,EAAah1S,EAAMktC,QAAQx6C,IAChBkkD,KAAK5K,EAAO4K,KAAKhrE,OAAS,GAAKmqU,EAC1C/1S,EAAMktC,QAAQx6C,GAAKsiT,EAEvBh1S,EAAMktC,QAAQ2oQ,GAAe7pQ,KAIzC6nQ,EAAyBrpU,UAAUmmU,QAAU,SAAU3wS,GACnD,IAAK,IAAIzyB,EAAK,EAAGyE,EAAKguB,EAAM81S,gBAAiBvoU,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC/D,IAAI+X,EAAOtT,EAAGzE,GACd,GAAuB,OAAnB+X,EAAK+wT,UAAT,CAGmBr2S,EAAMs2S,aACzB,GAAKhxT,EAAKixT,cAWN,IAAK,IAAIjrU,EAAI,EAAG0F,EAAMgvB,EAAM81S,gBAAgBlqU,OAAQN,EAAI0F,EAAK1F,IACrDga,EAAKixT,gBAAkBv2S,EAAM81S,gBAAgBxqU,GAAGs7B,OAChDthB,EAAK0qT,YAAchwS,EAAM81S,gBAAgBxqU,GACzCga,EAAKqrT,QAAUxhU,KAAKqnU,cAAclxT,EAAK0qT,YAAa1qT,EAAK+wT,iBAb7Dr2S,EAAMiG,oBACN3gB,EAAK0qT,YAAqC,eAArB1qT,EAAKijB,YAAiCvI,EAAM2D,aAAe3D,EAAMy2S,aAGtFnxT,EAAK0qT,YAAqC,eAArB1qT,EAAKijB,YAAiCvI,EAAMy2S,aAAez2S,EAAM2D,aAE1Fre,EAAKqrT,QAAUxhU,KAAKqnU,cAAclxT,EAAK0qT,YAAa1qT,EAAK+wT,cAcrExC,EAAyBrpU,UAAUgsU,cAAgB,SAAUlxT,EAAMqrT,GAC/D,OAAQrrT,EAAK+b,WACT,IAAK,WACD,IAAI6jE,GACAr0B,SAAU,OACVh7D,KAAM,YAEN8gG,EAAaxnG,KAAK6wB,MAAMo+C,KAAK47B,cAAc9U,GAC3CwxO,EAAgBvnU,KAAK6wB,MAAMo+C,KAAK07B,cAAc5U,GAClD,OAAO/1E,KAAKoxC,MAAMo2C,EAAW+/N,EAAc,IAAIvnT,KAAKy/C,GAASrO,MAAM45H,WAAY/iK,IAAKu5S,IAAWv5S,QACnG,IAAK,WACD,OAAOzM,WAAWgmT,GAAWhmT,WAAWgmT,GAAWrrT,EAAKqxT,OAAOjpU,QAAQijU,GAC3E,IAAK,cACD,OAAOjwS,GAAQiwS,EAASrrT,EAAKob,SACjC,QACI,OAAOiwS,IAGnBkD,EAAyBrpU,UAAU0rU,SAAW,SAAUlB,EAAY1vT,GAChE,IAAK,IAAIha,EAAI,EAAG0F,EAAMgkU,EAAWp+P,KAAKhrE,OAAQN,GAAK0F,EAAK1F,IACpD,IAAK0pU,EAAWp+P,KAAKtrE,GAAI,CACrB0pU,EAAWp+P,KAAKtrE,GAAKga,EACrB,QAIZuuT,EAAyBrpU,UAAUmqU,YAAc,SAAUK,GAEvD,IAAK,IADD4B,KACKtrU,EAAI,EAAG0F,EAAMgkU,EAAWp+P,KAAKhrE,OAAQN,GAAK0F,EAAK1F,IAChD0pU,EAAWp+P,KAAKtrE,IAChBsrU,EAAejjU,KAAKqhU,EAAWp+P,KAAKtrE,IAG5C0pU,EAAWp+P,KAAOggQ,GAEtB/C,EAAyBrpU,UAAU4rU,gBAAkB,SAAU9wT,GAC3D,IAAIuxT,EAAe1nU,KAAK6wB,MAAMktC,QAAQthE,OAClCwY,EAAMkB,EAAKwxT,YAEf,OADa1yT,GAAOyyT,EAAeA,EAAe,EAAKzyT,EAAM,EAAI,EAAIA,GAGzEyvT,EAAyBrpU,UAAUyrU,aAAe,SAAU3wT,GACxD,IAAIuxT,EAAe1nU,KAAK6wB,MAAM0nQ,KAAK97R,OAC/BwY,EAAMkB,EAAKsqR,SAEf,OADaxrR,GAAOyyT,EAAeA,EAAe,EAAKzyT,EAAM,EAAI,EAAIA,GAOzEyvT,EAAyBrpU,UAAUkqU,iBAAmB,SAAUlyS,GAO5D,IAAK,IAJDqtC,EADA7vC,EAAQ7wB,KAAK6wB,MAEb+2S,EAASv0S,EAAKrmB,EAAIqmB,EAAKtd,OACvBA,EAAS,EACT8xT,EAAkBx7T,KAAKC,IAAI,EAAG+mB,EAAKtd,QAC9B5Z,EAAI,EAAG0F,EAAMgvB,EAAM0nQ,KAAK97R,OAAQN,EAAI0F,EAAK1F,IAG1C4Z,GAD6B,KADjC2qD,EAAM7vC,EAAM0nQ,KAAKp8R,IACT4Z,OAAOxX,QAAQ,KACV8N,KAAK0T,IAAI8nT,EAAkBx0S,EAAKtd,OAASgf,SAAS2rC,EAAI3qD,OAAQ,IAAM,KAGpE1J,KAAK0T,IAAI8nT,EAAiB9yS,SAAS2rC,EAAI3qD,OAAQ,KAE5DA,EAAU5Z,IAAO0F,EAAM,EAAMkU,EAAS8xT,EACtCnnQ,EAAIglQ,eAAiB3vT,EACrB6xT,GAAU7xT,EACV2qD,EAAI2lQ,YAAcuB,EAClBC,GAAmB9xT,GAO3B2uT,EAAyBrpU,UAAUsqU,oBAAsB,SAAUtyS,GAO/D,IAAK,IAJDwpC,EADAhsC,EAAQ7wB,KAAK6wB,MAEbi3S,EAAaz0S,EAAKtmB,EAClBiJ,EAAQ,EACR+xT,EAAiB17T,KAAKC,IAAI,EAAG+mB,EAAKrd,OAC7B7Z,EAAI,EAAG0F,EAAMgvB,EAAMktC,QAAQthE,OAAQN,EAAI0F,EAAK1F,IAG7C6Z,GAD+B,KADnC6mD,EAAShsC,EAAMktC,QAAQ5hE,IACZ6Z,MAAMzX,QAAQ,KACb8N,KAAK0T,IAAIgoT,EAAiB10S,EAAKrd,MAAQ+e,SAAS8nC,EAAO7mD,MAAO,IAAM,KAGpE3J,KAAK0T,IAAIgoT,EAAgBhzS,SAAS8nC,EAAO7mD,MAAO,KAE5DA,EAAS7Z,IAAO0F,EAAM,EAAMmU,EAAQ+xT,EACpClrQ,EAAO+oQ,cAAgB5vT,EACvB6mD,EAAO4pQ,aAAeqB,EACtBA,GAAc9xT,EACd+xT,GAAkB/xT,GAQ1B0uT,EAAyBrpU,UAAU2sU,WAAa,WAO5C,IAAK,IALD7xT,EAGA8xT,EACAnG,EALAjxS,EAAQ7wB,KAAK6wB,MAEbq3S,EAAcr3S,EAAMhD,SAASw+C,aAAc/oE,GAAIutB,EAAM7vB,QAAQsC,GAAK,yBAClE6kU,EAAkBt3S,EAAMhD,SAASw+C,aAAc/oE,GAAIutB,EAAM7vB,QAAQsC,GAAK,0BAGjEnH,EAAI,EAAG0F,EAAMgvB,EAAM81S,gBAAgBlqU,OAAQN,EAAI0F,EAAK1F,IACzDga,EAAO0a,EAAM81S,gBAAgBxqU,GAC7B6D,KAAKgB,QAAU6vB,EAAMhD,SAASw+C,aAAc/oE,GAAIutB,EAAM7vB,QAAQsC,GAAK,YAAcnH,EAAI,WACrF8rU,EAAiBp3S,EAAMhD,SAASw+C,aAAc/oE,GAAIutB,EAAM7vB,QAAQsC,GAAK,YAAcnH,EAAI,YACvF2lU,EAAW9hU,KAAKooU,iBAAiBjyT,GACR,eAArBA,EAAKijB,aACLjjB,EAAKksT,iBAAiBxxS,GAClB1a,EAAKqhB,SAAWrhB,EAAK4qT,UAAU/qT,MAAQ,GACvChW,KAAKqoU,aAAalyT,EAAMha,EAAGga,EAAKmwT,WAAY,EAAGxE,EAAWmG,EAAiBjoU,KAAKgB,QAASmV,EAAKsrT,cAE9FtrT,EAAKmyT,eAAetyT,MAAQ,GAAKG,EAAK4rT,eAAe/rT,MAAQ,IAC7DhW,KAAKuoU,kBAAkBpyT,EAAMha,EAAI2lU,GAAkC,WAAtB3rT,EAAK0rT,aAA6BoG,EAAiBjoU,KAAKgB,QAASmV,EAAKsrT,aAEnHtrT,EAAKqhB,UACLx3B,KAAKwoU,gBAAgBryT,EAAMha,EAAI2lU,GAAmC,WAAvB3rT,EAAKspG,cAA8BwoN,EAAiBjoU,KAAKgB,QAAUmV,EAAKgsT,oBAAsBhsT,EAAKsrT,YAActrT,EAAKkd,MACjKrzB,KAAKyoU,gBAAgBtyT,EAAMha,EAAI2lU,GAAmC,WAAvB3rT,EAAKspG,cAA8BwoN,EAAiBjoU,KAAKgB,QAAUmV,EAAKgsT,oBAAsBhsT,EAAKsrT,YAActrT,EAAKkd,MACjKrzB,KAAK0oU,eAAevyT,EAAMha,EAAG2lU,EAAWmG,EAAiBjoU,KAAKgB,QAAUmV,EAAKgsT,oBAAsBhsT,EAAKsrT,YAActrT,EAAKkd,SAI/Hld,EAAKksT,iBAAiBxxS,GAClB1a,EAAKqhB,SAAWrhB,EAAK4qT,UAAU/qT,MAAQ,GACvChW,KAAKqoU,aAAalyT,EAAMha,EAAG,EAAGga,EAAKmwT,WAAYxE,EAAWmG,EAAiBjoU,KAAKgB,QAASmV,EAAKsrT,cAE9FtrT,EAAKmyT,eAAetyT,MAAQ,GAAKG,EAAK4rT,eAAe/rT,MAAQ,IAC7DhW,KAAK2oU,kBAAkBxyT,EAAMha,EAAI2lU,GAAkC,WAAtB3rT,EAAK0rT,aAA6BoG,EAAiBjoU,KAAKgB,QAASmV,EAAKsrT,aAEnHtrT,EAAKqhB,UACLx3B,KAAK4oU,gBAAgBzyT,EAAMha,EAAI2lU,GAAmC,WAAvB3rT,EAAKspG,cAA8BwoN,EAAiBjoU,KAAKgB,QAAUmV,EAAKgsT,oBAAsBhsT,EAAKsrT,YAActrT,EAAKkd,MACjKrzB,KAAK6oU,gBAAgB1yT,EAAMha,EAAI2lU,GAAmC,WAAvB3rT,EAAKspG,cAA8BwoN,EAAiBjoU,KAAKgB,QAAUmV,EAAKgsT,oBAAsBhsT,EAAKsrT,YAActrT,EAAKkd,MACjKrzB,KAAK8oU,eAAe3yT,EAAMha,EAAG2lU,EAAWmG,EAAiBjoU,KAAKgB,QAAUmV,EAAKgsT,oBAAsBhsT,EAAKsrT,YAActrT,EAAKkd,QAGnI60S,EAAYvmU,YAAY3B,KAAKgB,SACzBinU,GAAkBA,EAAe12T,WAAW9U,OAAS,GACrD0rU,EAAgBxmU,YAAYsmU,GAE5Bp3S,EAAMk1S,iBAAmBl1S,EAAMw9C,aAAa23P,iBAC5ChmU,KAAK+oU,gBAAgBl4S,EAAO1a,GAGpCnW,KAAKgB,QAAU6vB,EAAMhD,SAASw+C,aAAc/oE,GAAIutB,EAAM7vB,QAAQsC,GAAK,mBAC9D,IAAIigB,EAAI,EAAb,IAAgB1hB,EAAMgvB,EAAM0nQ,KAAK97R,OAAQ8mB,EAAI1hB,EAAK0hB,IAAK,CACnD,IAAIm9C,EAAM7vC,EAAM0nQ,KAAKh1Q,GACjBm9C,EAAIp8B,OAAO9N,OACXx2B,KAAKgpU,eAAetoQ,EAAKn9C,GAAG,GAGpC,IAASA,EAAI,EAAG1hB,EAAMgvB,EAAMktC,QAAQthE,OAAQ8mB,EAAI1hB,EAAK0hB,IAAK,CACtD,IAAIs5C,EAAShsC,EAAMktC,QAAQx6C,GACvBs5C,EAAOv4B,OAAO9N,OACdx2B,KAAKgpU,eAAensQ,EAAQt5C,GAAG,GAKvC,OAFA2kT,EAAYvmU,YAAY3B,KAAKgB,SAC7B6vB,EAAMS,UAAU3vB,YAAYumU,GACrBC,GAOXzD,EAAyBrpU,UAAU0tU,gBAAkB,SAAUl4S,EAAO1a,GAClE,GAAI0a,EAAMiiD,WAAWmzP,WAAa9vT,EAAKi4D,WAAa,GAAKj4D,EAAK2oT,aAAe,KAAO3oT,EAAK0f,iBAAiBozS,WAAY,CAClH,IAAIC,EAAmB/yT,EAAK0f,iBAAiBvE,UACzC43S,GAAoBA,EAAiB/jQ,kBACrCt0C,EAAM2xF,cAAc2mN,aAAahzT,EAAK0f,iBAAiBk2E,SAAUm9N,IAG5Dr4S,EAAM2xF,gBACP3xF,EAAM2xF,cAAgBrhH,EAAc,OAASmC,GAAIutB,EAAM7vB,QAAQsC,GAAK,oBAExEutB,EAAM2xF,cAAc7gH,YAAYwU,EAAK0f,iBAAiBk2E,gBAGjC,IAApB51F,EAAKi4D,YAA0C,IAAtBj4D,EAAK2oT,cAAsB3oT,EAAK0f,iBAAiBvE,WAC/Enb,EAAK0f,iBAAiBvjB,UAEtB6D,EAAK0f,iBAAiBozS,aACtB9yT,EAAK0f,iBAAiBozS,YAAa,IAG3CvE,EAAyBrpU,UAAU+sU,iBAAmB,SAAUjyT,GAC5D,OAAwB,OAAjBA,EAAKqrT,SAAoBrrT,EAAK2rT,SAAS3rT,EAAK0qT,YAAYluS,eAEnE+xS,EAAyBrpU,UAAU2tU,eAAiB,SAAUnD,EAAY5zT,EAAOkzR,GAC7E,IAEInqQ,EACAE,EACAD,EACAE,EACAiuS,EANAv4S,EAAQ7wB,KAAK6wB,MACbw4S,KAMAlkC,GAEAlqQ,EAAKE,GADL0qS,EAAaA,GACQQ,YAAcR,EAAWH,eAE9CxqS,GADAF,EAAKh7B,KAAK6kU,eAAe93T,GACf/M,KAAK6kU,eAAe7uT,MAC9BozT,EAAiB,QAIjBpuS,EAAKE,GADL2qS,EAAaA,GACQY,aAErBtrS,GADAF,EAAKj7B,KAAK6kU,eAAe73T,GACfhN,KAAK6kU,eAAe9uT,OAC9BqzT,EAAiB,UAErBC,GACI/lU,GAAMutB,EAAM7vB,QAAQsC,GAAK,eAAiB8lU,EAAiBn3T,EAC3D+oB,GAAIA,EACJC,GAAIA,EACJC,GAAIA,EACJC,GAAIA,EACJoJ,eAAgBshS,EAAWvhS,OAAOtuB,MAClC8nB,OAAU+nS,EAAWvhS,OAAO9N,OAEhCx2B,KAAK2sB,WAAakE,EAAMhD,SAAS2/D,SAAS67O,GAC1CrpU,KAAKgB,QAAQW,YAAY3B,KAAK2sB,aAElC+3S,EAAyBrpU,UAAUgtU,aAAe,SAAUlyT,EAAMlE,EAAOq3T,EAAOC,EAAOjpU,EAAQ+yB,GAC3F,IAAIxC,EAAQ7wB,KAAK6wB,MACbw4S,KACJA,GACI/lU,GAAMutB,EAAM7vB,QAAQsC,GAAK,YAAc2O,EACvC+oB,GAAI3H,EAAKtmB,EAAIu8T,EACbruS,GAAI5H,EAAKrmB,EAAIu8T,EACbruS,GAAI7H,EAAKtmB,EAAIsmB,EAAKrd,MAAQszT,EAC1BnuS,GAAI9H,EAAKrmB,EAAIqmB,EAAKtd,OAASwzT,EAC3BC,mBAAoBrzT,EAAK4qT,UAAUjvR,UACnCvN,eAAgBpuB,EAAK4qT,UAAU/qT,MAC/B8nB,OAAU3nB,EAAK4qT,UAAUvqS,OAAS3F,EAAMwF,WAAWnH,UAEvDlvB,KAAK2sB,WAAakE,EAAMhD,SAAS2/D,SAAS67O,GAC1C/oU,EAAOqB,YAAY3B,KAAK2sB,aAE5B+3S,EAAyBrpU,UAAUstU,kBAAoB,SAAUxyT,EAAMlE,EAAO3R,EAAQ+yB,GACtErzB,KAAK6wB,MAAjB,IACI8H,EAMA8wS,EALAC,EAAS,EACTC,EAAY,GACZC,EAAY,GACZC,EAAY,GACZC,EAAY,GAEZC,EAAW5zT,EAAKsf,gBAAkBtf,EAAK4rT,eAAehsT,QAAUI,EAAK4rT,eAAehsT,OACpFi0T,EAAgB7zT,EAAoB,gBAAIA,EAAK4qT,UAAU/qT,MAAQ,GAAKG,EAAK4qT,UAAU/qT,MAAQ,EAC3Fi0T,EAAoC,aAAnB9zT,EAAK+b,WAAoD,iBAAxB/b,EAAKke,eACvD,GAAM,EACNuB,EAAkBn4B,EAAkB0Y,EAAK+wT,WAAa/wT,EAAKsf,gBAAkBtf,EAAKyf,iBACjFzf,EAAKyf,gBAAkB,EACxBs0S,EAAqC,WAAtB/zT,EAAK0rT,aACpB5hM,EAAQiqM,EAAgB72S,EAAKtmB,EAAIg9T,EAAWC,EAAiB32S,EAAKtmB,EAAIg9T,EAAWC,EAAep0S,EAChGn5B,EAAS0Z,EAAKgf,cAAc14B,OAC5B0Z,EAAK+b,UAAU3zB,QAAQ,aAAuC,iBAAxB4X,EAAKke,gBAAqC53B,EAAS,IACzFA,GAAU,GAGd,IAAK,IAAIN,EAAI,EAAGA,EAAIM,EAAQN,KAIxButU,GAAoB,GADpBA,EAASz1S,GAFT0E,EAAgBxiB,EAAKgf,cAAch5B,GAC7Bga,EAAKgf,cAAch5B,GAAGa,MAAQitU,EADK9zT,EAAKgf,cAAch5B,EAAI,GAAGa,MAAQmZ,EAAKwc,aAAaxwB,SAAY8nU,EAE/D9zT,GAAQkd,EAAKtd,SAC7Bsd,EAAKrmB,EAAIqmB,EAAKtd,UAC1Bsd,EAAKrmB,GAAMqmB,EAAKrmB,EAAIqmB,EAAKtd,QAAW2zT,KACzC53S,GAAO6G,EAAcxiB,EAAKwc,eAAkB3yB,KAAKmqU,SAASh0T,EAAMha,EAAGutU,MACpEC,EAAYA,EAAUpvT,OAAO,KAAOva,KAAK6kU,eAAe93T,EAAI,MACxD,OAAS/M,KAAK6kU,eAAe93T,EAAI/M,KAAK6kU,eAAe7uT,OAAS,IAAM0zT,EAAS,MAErFE,EAAYA,EAAUrvT,OAAO,MAAQ8Y,EAAKtmB,EAAIi9T,GAAgBE,EAAet0S,EAAkB,IAAM,IAAM8zS,EACvG,QAAkB,IAAMA,EAAS,OAEpCvzT,EAAKi0T,eAAep0T,MAAQ,GAAKG,EAAKk0T,eAAer0T,MAAQ,IAAMG,EAAKm0T,sBAAwB,IAEjGT,GADAJ,EAAiBzpU,KAAKuqU,kBAAkBp0T,EAAMwiB,EAAckxS,EAAWC,EAAWz2S,EAAMl3B,IAC7D,GAC3B2tU,EAAYL,EAAe,IAGnCzpU,KAAKwqU,eAAer0T,EAAMlE,EAAO03T,EAAWE,GAC5C7pU,KAAKyqU,eAAet0T,EAAMlE,EAAO23T,EAAWE,EAAWxpU,IAE3DokU,EAAyBrpU,UAAU8uU,SAAW,SAAUh0T,EAAMlE,EAAOjV,GACjE,IACIsnC,EADQtkC,KAAK6wB,MACE65S,UAAUpmS,OACzBjR,EAAOrzB,KAAK6kU,eACZzrS,EAAcjjB,EAAKijB,YACnB77B,EAAyB,eAAhB67B,EAAgC/F,EAAKtmB,EAAIsmB,EAAKrmB,EACvD8f,EAAwB,eAAhBsM,EAAgC/F,EAAKrd,MAAQqd,EAAKtd,OAC1D2P,EAA8B,eAAhB0T,EAAgC,EAAIjjB,EAAKgf,cAAc14B,OAAS,EAC9EmpB,EAA4B,eAAhBwT,EAAgCjjB,EAAKgf,cAAc14B,OAAS,EAAI,EAChF,OAAI0Z,EAAKmwT,WAAa,KAGZtpU,IAAUO,GAASP,IAAWO,EAAQuvB,KAAWwX,EAAOtuB,OAAS,GAAsB,gBAAjBsuB,EAAO9N,SAG7Ex5B,IAAUO,GAAS0U,IAAUyT,GAAgB1oB,IAAWO,EAAQuvB,GAAS7a,IAAU2T,KAUjG8+S,EAAyBrpU,UAAUutU,gBAAkB,SAAUzyT,EAAMlE,EAAO3R,EAAQ+yB,GAChF,IAGIywQ,EACA9wR,EAJA6d,EAAQ7wB,KAAK6wB,MACb0xS,EAAS,EACTmH,EAAS,EAGTiB,EAAuC,WAAvBx0T,EAAKspG,cAErBmrN,GADez0T,EAAK0rT,aACR1rT,EAAKsf,iBAEjB2jC,GADYjjD,EAAKspG,gBAAkBtpG,EAAK0rT,aAAe1rT,EAAK4rT,eAAehsT,OAAS,GAC9D/V,KAAKo5D,QAAUjjD,EAAK4qT,UAAU/qT,MAAQ,EAChEojD,EAAWjjD,EAAoB,gBAAIijD,GAAWA,EAI9C,IAAK,IAHDvlD,EAAW+2T,GAAaD,IAAoBC,IAAcD,EAAkB,MAAQ,QACpF3jT,EAAe6J,EAAMhD,SAASw+C,aAAc/oE,GAAIutB,EAAM7vB,QAAQsC,GAAK,aAAe2O,IAClF2jB,EAAkBn4B,EAAkB0Y,EAAK+wT,WAAa/wT,EAAKyf,iBAAmBg1S,EAAY,GAAK,GAAK,EAC/FzuU,EAAI,EAAG0F,EAAMsU,EAAKgf,cAAc14B,OAAQN,EAAI0F,EAAK1F,IAAK,CAM3D,GALAomU,EAASoI,EAAiBt3S,EAAKtmB,EAAIqsD,EAAY/lC,EAAKtmB,EAAIqsD,EAAUxjC,EAClEkuQ,EAAc3tR,EAAKgf,cAAch5B,GAAG2wB,KACpC48S,EAASz1S,GAAmB9d,EAAKgf,cAAch5B,GAAGa,MAAOmZ,GAAQkd,EAAKtd,OACtE2zT,EAASr9T,KAAK+S,OAAiB,EAAVsqT,GAAgBr2S,EAAKrmB,EAAIqmB,EAAKtd,SACnD/C,EAAU,IAAIujB,GAAW1F,EAAM7vB,QAAQsC,GAAK2O,EAAQ,cAAgB9V,EAAGomU,EAAQmH,EAAU5lC,EAAY/tR,OAAS,EAAIlC,EAAQsC,EAAKgf,cAAch5B,GAAGswB,MAC5ItW,EAAKysT,mBACL,OAAQzsT,EAAKysT,oBACT,IAAK,OACD,MACJ,IAAK,SACW,IAANzmU,GAAYga,EAAK+d,YAAc/3B,IAAM0F,EAAM,IAAOmR,EAAQhG,EAAIqmB,EAAKrmB,EAAIqmB,EAAKtd,SAC3E5Z,IAAM0F,EAAM,GAAOsU,EAAK+d,YAAoB,IAAN/3B,IAAa6W,EAAQhG,EAAI82R,EAAY/tR,OAAS,EAAIsd,EAAKrmB,KAChGgG,EAAQyZ,KAAO,IAEnB,MACJ,IAAK,SACU,IAANtwB,GAAYga,EAAK+d,YAAc/3B,IAAM0F,EAAM,IAAOmR,EAAQhG,EAAIqmB,EAAKrmB,EAAIqmB,EAAKtd,OAC7E/C,EAAQhG,EAAI08T,EAASr2S,EAAKrmB,EAAIqmB,EAAKtd,QAE5B5Z,IAAM0F,EAAM,GAAOsU,EAAK+d,YAAoB,IAAN/3B,IAAc6W,EAAQhG,EAAI82R,EAAY/tR,OAAS,EAAIsd,EAAKrmB,IACrGgG,EAAQhG,EAAI08T,EAASr2S,EAAKrmB,EAAI82R,EAAY/tR,OAAS,GAKnEugB,GAAYtjB,EAASmD,EAAK6f,WAAY7f,EAAK6f,WAAWQ,OAAS3F,EAAMwF,WAAWrH,UAAWhI,GAE1F6J,EAAMQ,YAGFlb,EAAKqhB,SACVx3B,KAAK6qU,mBAAmB7qU,KAAK6wB,MAAO7J,EAAc7Q,EAAMlE,EAAOohB,GAH/D/yB,EAAOqB,YAAYqlB,IAW3B09S,EAAyBrpU,UAAUwtU,gBAAkB,SAAU1yT,EAAMlE,EAAO3R,EAAQ+yB,GAChF,GAAIld,EAAKmuB,OAAOtuB,MAAQ,EAAG,CACvB,IAAI8oB,OAAS,EACT4qS,OAAS,EACT9zS,EAAyC,YAAvBzf,EAAKspG,cAA8BtpG,EAAKyf,gBAAkB,EAChFA,GAAmBzf,EAAKsf,gBAAkB,GAAK,GAAKG,EAUpD,IAAK,IATDouB,EAAO3wB,EAAKtd,OAASI,EAAKwc,aAAasC,OAA6B,aAAnB9e,EAAK+b,UAA2B/b,EAAK+e,iBACpF/e,EAAKwc,aAAaxwB,UACpB2oU,OAAO,EACPrwS,EAAWtkB,EAAK+rT,aAAalsT,MAAQ,IAAOG,EAAK0rT,eAAiB1rT,EAAKspG,cACvEtpG,EAAK4rT,eAAehsT,OAAS,GAC7Bg1T,EAAc,GACdd,EAAoC,aAAnB9zT,EAAK+b,WAAoD,iBAAxB/b,EAAKke,gBAAsC,GAAM,EACnG22S,EAAS70T,EAAKsf,iBAA0C,WAAvBtf,EAAKspG,gBAAiCtpG,EAAKsf,iBAClD,YAAvBtf,EAAKspG,cAAgCpsF,EAAKtmB,EAAI0tB,EAAW7E,EAAkBvC,EAAKtmB,EAAI0tB,EAAW7E,EAC7Fz5B,EAAI,EAAGA,EAAIga,EAAKgf,cAAc14B,OAAQN,IAW3C,OAVAutU,EAASz1S,GAAmB9d,EAAKgf,cAAch5B,GAAGa,MAAQitU,EAAe9zT,GACzEuzT,GAAUvzT,EAAK+d,WAAc,EAAIw1S,EAAUA,GAAUr2S,EAAKtd,OACnC,aAAnBI,EAAK+b,WAAoD,iBAAxB/b,EAAKke,gBACtCyK,EAASzyB,KAAK+S,OAAiB,EAAVsqT,GAAgBr2S,EAAKrmB,EAAIqmB,EAAKtd,SACnD+0T,EAAOz+T,KAAK+S,OAAiB,EAAVsqT,KAAwBr2S,EAAKrmB,EAAIqmB,EAAKtd,WAGzD+oB,EAASzyB,KAAK+S,OAAiB,EAAVsqT,EAAe1lR,EAAM,GAAK3wB,EAAKrmB,EAAIqmB,EAAKtd,SAC7D+0T,EAAOz+T,KAAK+S,OAAiB,EAAVsqT,EAAe1lR,EAAM,GAAK3wB,EAAKrmB,EAAIqmB,EAAKtd,UAEvDI,EAAKmuB,OAAO59B,MAChB,IAAK,YACL,IAAK,mBACGo4B,EAAUzL,EAAKrmB,EAAIqmB,EAAKtd,OACxBg1T,GAAgB,KAAYC,EAAO,KAAO33S,EAAKrmB,EAAIqmB,EAAKtd,QAAU,MAAkBi1T,EAAO,IAAMF,EAAO,IAEnGz+T,KAAK+S,MAAMiU,EAAKrmB,KACrB+9T,GAAgB,MAAa13S,EAAKtmB,EAAI6oB,GAAmB,IAAMkJ,EAAS,MAAkBksS,EACpF,IAAMlsS,EAAS,MAAkBksS,EAAO,IAAO33S,EAAM,EAAI,KAG/D03S,GAAgB,MAAa13S,EAAKtmB,EAAI6oB,GAAmB,IAAMkJ,EAAS,MAAkBksS,EACtF,IAAMlsS,EAAS,MAAkBksS,EAAO,IAAMF,EAAO,IACrD3uU,IAAMga,EAAKgf,cAAc14B,OAAS,IAClCsuU,GAAgB,MAAa13S,EAAKtmB,EAAI6oB,GAAmB,IAAMk1S,EAAO,MAClEE,EAAO,IAAMF,EAAO,MAGhC,MACJ,IAAK,4BACKhsS,EAASzL,EAAKrmB,EAAIqmB,EAAKtd,QAAa,EAAS1J,KAAK+S,MAAMiU,EAAKrmB,KAC/D+9T,GAAgB,MAAa13S,EAAKtmB,EAAI6oB,GAAmB,IAAMkJ,EAAS,MAAkBksS,EACtF,IAAMlsS,EAAS,MAAkBksS,EAAO,IAAMF,EAAO,OACxCz3S,EAAKtmB,EAAI6oB,GAAmB,IAAMk1S,GAO/C,MAFpBC,GAAqC,cAArB50T,EAAKmuB,OAAO59B,KAAyB,MAAa2sB,EAAKtmB,EAAI6oB,GAAmB,IAAMvC,EAAKrmB,EAAI,OACxGqmB,EAAKtmB,EAAI6oB,GAAmB,KAAOvC,EAAKrmB,EAAIqmB,EAAKtd,QAAU,IAAO,KAEnE/V,KAAKirU,wBAAwB90T,EAAMlE,EAAO84T,EAAazqU,GAG3D6V,EAAK4sT,iBAAiBtmU,OAAS,GAAKuD,KAAK6wB,MAAMiyS,uBAC/C9iU,KAAK6wB,MAAMiyS,sBAAsBoI,4BAA4B/0T,EAAMlE,EAAO3R,EAAQ+yB,IAG1FqxS,EAAyBrpU,UAAUytU,eAAiB,SAAU3yT,EAAMlE,EAAO3R,EAAQ+yB,GAC/E,IAAIxC,EAAQ7wB,KAAK6wB,MACbw+D,EAAiBl5E,EAAoB,gBAAI,IAAM,GAE/CijD,GADc5sC,GAAYrW,EAAK+pB,MAAO/pB,EAAKuqB,aACV,WAAtBvqB,EAAK0rT,aAA4B,EAAI1rT,EAAK4rT,eAAehsT,OAAS/V,KAAKo5D,UAC1D,WAAvBjjD,EAAKspG,cAA6B,EAC9BtpG,EAAK+rT,aAAalsT,MAAQG,EAAKurT,sBAAwB1hU,KAAKo5D,UACrEA,EAAUjjD,EAAKsf,gBAAkB2jC,EAAUjjD,EAAKyf,iBAAmBwjC,EAAUjjD,EAAKyf,gBAClF,IAAI7oB,EAAIsmB,EAAKtmB,EAAIqsD,EACbpsD,EAAIqmB,EAAKrmB,EAAIqmB,EAAKtd,OAAS,EAE3B/U,EAAUs1B,GADA,IAAIC,GAAW1F,EAAM7vB,QAAQsC,GAAK,cAAgB2O,EAAOlF,EAAGC,EAAIhN,KAAKo5D,QAAS,SAAUjjD,EAAK+pB,MAAO,UAAYmvD,EAAgB,MAAY,MAAY,KACnIl5E,EAAKuqB,WAAYvqB,EAAKuqB,WAAWlK,OAAS3F,EAAMwF,WAAWpH,UAAW3uB,GACzGU,EAAQwC,aAAa,aAAc2S,EAAK+7B,aAAe/7B,EAAK+pB,OAC5Dl/B,EAAQwC,aAAa,WAAY2S,EAAK8yG,SAAS/7G,aAEnDw3T,EAAyBrpU,UAAUktU,kBAAoB,SAAUpyT,EAAMlE,EAAO3R,EAAQ+yB,GACtErzB,KAAK6wB,MAAjB,IACI8H,EAMA8wS,EALAlH,EAAS,EACToH,EAAY,GACZC,EAAY,GACZC,EAAY,GACZC,EAAY,GAEZC,EAAY5zT,EAAoB,iBAAKA,EAAK4rT,eAAehsT,OAASI,EAAK4rT,eAAehsT,OACtFi0T,EAAgB7zT,EAAoB,iBAAKA,EAAK4qT,UAAU/qT,MAAQ,EAAIG,EAAK4qT,UAAU/qT,MAAQ,EAC3F4f,EAAkBn4B,EAAkB0Y,EAAK+wT,WAAa/wT,EAAKsf,iBAAmBtf,EAAKyf,gBACnFzf,EAAKyf,gBAAkB,EACvBq0S,EAAiB9zT,EAAK+b,UAAU3zB,QAAQ,aAAe,GAA6B,iBAAxB4X,EAAKke,eACjE,GAAM,EACN53B,EAAS0Z,EAAKgf,cAAc14B,OAC5BytU,EAAqC,WAAtB/zT,EAAK0rT,aACpB5hM,EAAQiqM,EAAgB72S,EAAKrmB,EAAI+8T,EAAWC,EAAiB32S,EAAKrmB,EAAI+8T,EAAWC,EAAep0S,EAChGzf,EAAK+b,UAAU3zB,QAAQ,aAAe,GAAK9B,EAAS,GAA6B,iBAAxB0Z,EAAKke,iBAC9D53B,GAAU,GAGd,IAAK,IAAIN,EAAI,EAAGA,EAAIM,EAAQN,KASxBomU,EAAUtuS,GAPN0E,EADmB,qBAAnBxiB,EAAK+b,UACU/b,EAAKgf,cAAch5B,GAAKga,EAAKgf,cAAch5B,GAAGa,MAAQitU,EAC9D9zT,EAAKgf,cAAch5B,EAAI,GAAGa,MAAQmZ,EAAKwc,aAAaxwB,SAAY8nU,EAGxD9zT,EAAKgf,cAAch5B,GAC9Bga,EAAKgf,cAAch5B,GAAGa,MAAQitU,EAAgB9zT,EAAKwc,aAAarmB,IAE7B6J,GAAQkd,EAAKrd,MAASqd,EAAKtmB,IACxDsmB,EAAKtmB,GAAMsmB,EAAKtmB,EAAIsmB,EAAKrd,OAAUusT,KACzCzwS,GAAO6G,EAAcxiB,EAAKwc,eAAiB3yB,KAAKmqU,SAASh0T,EAAMha,EAAGomU,MAClEoH,EAAYA,EAAUpvT,OAAO,KAAOgoT,EAAS,KAAOviU,KAAK6kU,eAAe73T,EAAIhN,KAAK6kU,eAAe9uT,QAC5F,MAAQwsT,EAAS,IAAMviU,KAAK6kU,eAAe73T,EAAI,MAEvD48T,EAAYA,EAAUrvT,OAAO,OAAkB,KAAO8Y,EAAKrmB,EAAIg9T,GAAgBE,EAAet0S,EAAkB,IAC1G,QAAmB,IAAMqqG,EAAQ,MAEvC9pH,EAAKm0T,sBAAwB,IAAMn0T,EAAKi0T,eAAep0T,MAAQ,GAAKG,EAAKk0T,eAAer0T,MAAQ,KAEhG6zT,GADAJ,EAAiBzpU,KAAKuqU,kBAAkBp0T,EAAMwiB,EAAckxS,EAAWC,EAAWz2S,EAAMl3B,IAC7D,GAC3B2tU,EAAYL,EAAe,IAGnCzpU,KAAKwqU,eAAer0T,EAAMlE,EAAO03T,EAAWE,GAC5C7pU,KAAKyqU,eAAet0T,EAAMlE,EAAO23T,EAAWE,EAAWxpU,IAE3DokU,EAAyBrpU,UAAUkvU,kBAAoB,SAAUp0T,EAAMwiB,EAAckxS,EAAWC,EAAWz2S,EAAM83S,GAC7G,IAOIC,EAPApuU,EAAQ27B,EACR0yS,EAAO,EACPn3T,EAAW,EACX6d,EAAQ5b,EAAKwc,aACbu3S,EAAqC,WAAtB/zT,EAAK0rT,aACpBrsS,KACAu0S,EAAW5zT,EAAKsf,iBAAmBtf,EAAKk0T,eAAet0T,OAASI,EAAKk0T,eAAet0T,OAGpFu1T,EAAc,EACdC,EAAc,EACdC,EAAStB,EAAgB72S,EAAKrmB,EAAI+8T,EAAa12S,EAAKrmB,EAAI+8T,EACxD0B,EAASvB,EAAgB72S,EAAKtmB,EAAIg9T,EAAa12S,EAAKtmB,EAAIg9T,EAO5D,GANuB,gBAAnB5zT,EAAK+b,YAILq5S,GAHAH,EAAW/+T,KAAK87D,IAAIhyD,EAAKob,QAASv0B,EAAQ+0B,EAAM5vB,YAEhDmpU,GADSj/T,KAAK87D,IAAIhyD,EAAKob,QAASv0B,GACRouU,IAAaj1T,EAAKm0T,sBAAwB,KAG7C,eAArBn0T,EAAKijB,YACL,IAAK,IAAI7V,EAAI,EAAGA,EAAIpN,EAAKm0T,sBAAuB/mT,IAC5CvmB,EAAQgD,KAAK0rU,eAAev1T,EAAMo1T,EAAaD,EAAatuU,EAAOmuU,GACnEI,GAAeD,EACXx5S,GAAO90B,EAAO+0B,KACd7d,GAAalX,EAAQ+0B,EAAMhS,MAAQgS,EAAMzlB,IAAMylB,EAAMhS,KACrD7L,EAAW7H,KAAKwmB,MAAM1c,EAAK+d,WAAc,EAAIhgB,EAAYA,GAAYmf,EAAKrd,OAC1Eq1T,EAAQh/T,KAAK+S,MAAMlL,EAAWmf,EAAKtmB,GACnC88T,EAAYA,EAAUtvT,OAAO,KAAY8wT,EAAO,IAAOrrU,KAAK6kU,eAAgB,EACtE,KAAOwG,EAAO,KAAOrrU,KAAK6kU,eAAe73T,EAAIhN,KAAK6kU,eAAe9uT,SACvEs1T,EAAQh/T,KAAK+S,MAAMlL,EAAWmf,EAAKtmB,GACnC+8T,EAAYA,EAAUvvT,OAAO,KAAY8wT,EAAO,IAAOh4S,EAAM,EACvD,KAAOg4S,EAAO,IAAMG,QAIjC,CACDzB,EAAW5zT,EAAKsf,gBAAkBtf,EAAKk0T,eAAet0T,QAAUI,EAAKk0T,eAAet0T,OACpF,IAASwN,EAAI,EAAGA,EAAIpN,EAAKm0T,sBAAuB/mT,IAExCuO,GADJ90B,EAAQgD,KAAK0rU,eAAev1T,EAAMo1T,EAAaD,EAAatuU,EAAOmuU,GACjDp5S,KACd7d,GAAuF,EAA5E7H,KAAKwmB,MAAO71B,EAAQ+0B,EAAMhS,MAAQgS,EAAMzlB,IAAMylB,EAAMhS,KAAQsT,EAAKtd,QAC5Es1T,EAAQh/T,KAAK+S,MAAMlL,EAAWmf,EAAKrmB,EAAIqmB,EAAKtd,QAC5C8zT,EAAYA,EAAUtvT,OAAO,KAAava,KAAK6kU,eAAgB,EAAI,IAAMwG,EACnE,MAAQrrU,KAAK6kU,eAAe93T,EAAI/M,KAAK6kU,eAAe7uT,OAAS,IAAMq1T,GACzEA,EAAQh/T,KAAK+S,MAAMlL,EAAWmf,EAAKrmB,EAAIqmB,EAAKtd,QAC5C+zT,EAAYA,EAAUvvT,OAAO,KAAY8Y,EAAKtmB,EAAI,IAAMs+T,EAAO,KAAOI,EAAS,IAAMJ,IAEzFE,GAAeD,EAKvB,OAFA91S,EAAUhxB,KAAKqlU,GACfr0S,EAAUhxB,KAAKslU,GACRt0S,GAEXkvS,EAAyBrpU,UAAUqwU,eAAiB,SAAUv1T,EAAMo1T,EAAaD,EAAatuU,EAAOmuU,GACjG,IAAIp5S,EAAQ5b,EAAKwc,aACjB,GAAuB,gBAAnBxc,EAAK+b,UACLl1B,EAAQu0B,GAAQg6S,EAAap1T,EAAKob,cAEjC,GAAuB,aAAnBpb,EAAK+b,UACVl1B,GAASmZ,EAAK+e,kBAAoB/e,EAAKm0T,sBAAwB,QAE9D,GAAuB,qBAAnBn0T,EAAK+b,UAAkC,CAC5C,IAAIknC,EAAkC,iBAAxBjjD,EAAKke,eAAoC,GAAM,EAC7Dr3B,KAAWmZ,EAAKgf,cAAcg2S,EAAa,GACvCh1T,EAAKgf,cAAcg2S,EAAa,GAAGnuU,MAAQo8D,EAAUjjD,EAAKwc,aAAarmB,MACtE6J,EAAKgf,cAAcg2S,GAChBh1T,EAAKgf,cAAcg2S,GAAYnuU,MAAQo8D,EAAUjjD,EAAKwc,aAAa5S,OACtE5J,EAAKm0T,sBAAwB,QAGlCttU,GAAS+0B,EAAM5vB,UAAYgU,EAAKm0T,sBAAwB,GAE5D,OAAOttU,GAOX0nU,EAAyBrpU,UAAUmtU,gBAAkB,SAAUryT,EAAMlE,EAAO3R,EAAQ+yB,GA0BhF,IAAK,IAtBDywQ,EAOA6nC,EAEAz8R,EACA08R,EACArqT,EAEAvO,EACA64T,EAIAC,EACAz4T,EAtBAwd,EAAQ7wB,KAAK6wB,MACb0xS,EAAS,EACTmH,EAAS,EAET1iT,EAAe6J,EAAMhD,SAASw+C,aAAc/oE,GAAIutB,EAAM7vB,QAAQsC,GAAK,aAAe2O,IAElF85T,GADgB51T,EAAKspG,cACkB,WAAvBtpG,EAAKspG,eAErBmrN,GADez0T,EAAK0rT,aACR1rT,EAAKsf,iBAGjB2jC,GAFYjjD,EAAKspG,gBAAkBtpG,EAAK0rT,aAAe1rT,EAAK4rT,eAAehsT,OAAS,GAE9D/V,KAAKo5D,QAAUjjD,EAAK4qT,UAAU/qT,MAAQ,EAI5Dg2T,EAAgC,KAAf71T,EAAKoL,QAAgC,KAAhBpL,EAAKoL,OAAmB,EAAI,EAGlEihT,EAAcrsT,EAAK+d,WAAcb,EAAKtmB,EAAIsmB,EAAKrd,MAASqd,EAAKtmB,EAC7DiJ,EAAQ,EACRvZ,EAAS0Z,EAAKgf,cAAc14B,OAG5Bm5B,GAAmBm2S,GAAiBtuU,EAAkB0Y,EAAK+wT,aAAe/wT,EAAKi4D,WAAa,GAAKj4D,EAAK2oT,aAAe,GACnH3oT,EAAKyf,gBAAkB,EACpBz5B,EAAI,EAAG0F,EAAMpF,EAAQN,EAAI0F,EAAK1F,IAAK,CAoBxC,GAnBAkX,EAAQ8C,EAAKgf,cAAch5B,GAC3BomU,EAAUtuS,GAAmB5gB,EAAMrW,MAAOmZ,GAAQkd,EAAKrd,MAASqd,EAAKtmB,EACrE+2R,EAAczwR,EAAMyZ,KACpBg/S,EAAiBz4S,EAAKrd,MAAQvZ,EAC9BuZ,GAAwC,SAA9BG,EAAKusT,sBAAiE,SAA9BvsT,EAAKusT,uBAChD5+B,EAAY9tR,MAAQ81T,EAAkBA,EAAiBhoC,EAAY9tR,MAC1EusT,GAAUvsT,EAAQ,EACd+1T,GAAiB51T,EAAKoL,MACtBmoT,EAASkB,EAAav3S,EAAKrmB,EAAIosD,EAAY/lC,EAAKrmB,EAAIosD,GAGpDuyQ,EAAgBf,IAAcmB,IAAoBnB,GAAamB,IACzD3yQ,EAAUxjC,GAAmBzf,EAAKoL,MAAcuiR,EAAY/tR,OAAS,EAA1B,EAAgC,EAAII,EAAK+rT,aAAansT,OAAS,EACvG1C,EAAMpB,MAAQ,EAAU6xR,EAAY/tR,OAAS,EAA1B,EAAgC,IACtDqjD,EAAUxjC,GAAmBzf,EAAKoL,MAAcuiR,EAAY/tR,OAAS,EAA1B,EAAiC,EAAII,EAAK+rT,aAAansT,OAAS,EACjG+tR,EAAY/tR,OAAS,EAA1B,GACX2zT,EAAUr2S,EAAKrmB,EAAK2+T,EAAet4T,EAAMpB,OAE7Ce,EAAU,IAAIujB,GAAW1F,EAAM7vB,QAAQsC,GAAK2O,EAAQ,cAAgB9V,EAAGomU,EAAQmH,EAAQ,IACnFvzT,EAAKysT,mBACL,OAAQzsT,EAAKysT,oBACT,IAAK,OACD,MACJ,IAAK,OACD,IAAY,IAANzmU,GAAYga,EAAK+d,YAAc/3B,IAAM0F,EAAM,IAAOmR,EAAQjG,EAAIsmB,EAAKtmB,IACnE5Q,IAAM0F,EAAM,GAAMsU,EAAK+d,YAAoB,IAAN/3B,IAAc6W,EAAQjG,EAAIiJ,EAAQqd,EAAKtmB,EAAIsmB,EAAKrd,MACvF,SAEJ,MACJ,IAAK,SACU,IAAN7Z,GAAYga,EAAK+d,YAAc/3B,IAAM0F,EAAM,IAAOmR,EAAQjG,EAAIsmB,EAAKtmB,GACpE++T,GAAmBz4S,EAAKtmB,EAAIiG,EAAQjG,EACpCiG,EAAQjG,EAAIw1T,EAASlvS,EAAKtmB,IAEpB5Q,IAAM0F,EAAM,GAAMsU,EAAK+d,YAAoB,IAAN/3B,IAAe6W,EAAQjG,EAAIiJ,EAASqd,EAAKtmB,EAAIsmB,EAAKrd,QACzF8tR,EAAY9tR,MAAQ81T,GAAgD,SAA9B31T,EAAKusT,qBAC3CoJ,GAAmB94T,EAAQjG,EAAIiJ,GAASqd,EAAKtmB,EAAIsmB,EAAKrd,OAGtD81T,EAAiB91T,EAErBhD,EAAQjG,EAAIw1T,EAASlvS,EAAKtmB,EAAIsmB,EAAKrd,MAAQ81T,GAK3D94T,EAAQyZ,KAAOzsB,KAAKisU,cAAc91T,EAAM9C,EAAMoZ,KAAMq/S,GAChD31T,EAAKoL,MAAQ,KAAQ,GAAmC,SAA9BpL,EAAKusT,sBAAyC,IAANvmU,IAChEga,EAAK+d,WAAwClhB,EAAQjG,EAAIiJ,GAASwsT,EAAhDxvT,EAAQjG,GAAKy1T,KAGrCA,EAAcrsT,EAAK+d,WAAalhB,EAAQjG,EAAIiG,EAAQjG,EAAIiJ,EACrC,IAAfG,EAAKoL,QACLA,EAASpL,EAAKoL,MAAQ,IAAOpL,EAAKoL,MAAQ,IAAMpL,EAAKoL,MACrD2tB,EAAate,GAAeza,EAAK6f,WAAY3iB,EAAMoZ,KAAMlL,EAAOsP,GAChE+6S,EAAaG,EAAgB78R,EAAWn5B,OACpCI,EAAK+rT,aAAansT,OAAS1J,KAAKwmB,KAAKqc,EAAWn5B,OAAS+tR,EAAY/tR,QACzE81T,EAAY11T,EAAKsf,gBAAkBm2S,EAAa,GAAKA,EAAa,EAClE54T,EAAQ3F,UAAY,UAAYkU,EAAQ,KAAOghT,EAASvsT,EAAQ,EAAIg2T,GAAgB,KAC7EtC,EAASmC,GAAa,IAC7B74T,EAAQhG,GAAK6+T,GAEjBv1S,GAAYtjB,EAASmD,EAAK6f,WAAY7f,EAAK6f,WAAWQ,OAAS3F,EAAMwF,WAAWrH,UAAWhI,EAAe7Q,EAAKsf,mBAA4C,WAAvBtf,EAAKspG,gBAA8Bj8G,aAAa,QAAS,oBAE5LqtB,EAAMQ,YAGFlb,EAAKqhB,SACVx3B,KAAK6qU,mBAAmB7qU,KAAK6wB,MAAO7J,EAAc7Q,EAAMlE,EAAOohB,GAH/D/yB,EAAOqB,YAAYqlB,IAW3B09S,EAAyBrpU,UAAUotU,gBAAkB,SAAUtyT,EAAMlE,EAAO3R,EAAQ4rU,GAChF,GAAI/1T,EAAKmuB,OAAOtuB,MAAQ,EAAG,CAgBvB,IAAK,IAfD4f,EAAyC,YAAvBzf,EAAKspG,cAA8BtpG,EAAKyf,gBAAkB,EAC5EiJ,OAAS,EACTC,EAASotS,EAASl/T,GAAMmJ,EAAKsf,iBAAmB,EAAI,GAAKG,EAEzD2sS,OAAS,EACTv+Q,EAAOkoR,EAASl2T,MAAQG,EAAKwc,aAAasC,OAA6B,aAAnB9e,EAAK+b,UAA2B/b,EAAK+e,iBACvF/e,EAAKwc,aAAaxwB,UACpB6oU,OAAO,EACPmB,EAAWh2T,EAAK+rT,aAAansT,QAC3BI,EAAK0rT,eAAiB1rT,EAAKspG,cAAiBtpG,EAAK4rT,eAAehsT,OAAS,GAC3Eg1T,EAAc,GACdd,EAAoC,aAAnB9zT,EAAK+b,WAAoD,iBAAxB/b,EAAKke,gBAAsC,GAAM,EACnGy2S,EAAS30T,EAAKsf,iBAA0C,WAAvBtf,EAAKspG,gBACpCtpG,EAAKsf,iBAA0C,YAAvBtf,EAAKspG,cAC9BysN,EAASl/T,EAAIm/T,EAXJ,GAWyBv2S,EAAoBs2S,EAASl/T,EAAIm/T,EAX1D,GAW+Ev2S,EACpFz5B,EAAI,EAAGA,EAAIga,EAAKgf,cAAc14B,OAAQN,IAW3C,OAVAomU,EAAStuS,GAAmB9d,EAAKgf,cAAch5B,GAAGa,MAAQitU,EAAe9zT,GACzEosT,GAAUpsT,EAAK+d,WAAc,EAAIquS,EAAUA,GAAU2J,EAASl2T,MACvC,aAAnBG,EAAK+b,WAAoD,iBAAxB/b,EAAKke,gBACtCwK,EAAS0jS,EAAS2J,EAASn/T,EAC3Bi+T,EAAOzI,IAAiB2J,EAASn/T,IAGjC8xB,EAAS0jS,EAASv+Q,EAAM,EAAIkoR,EAASn/T,EACrCi+T,EAAOzI,EAASv+Q,EAAM,EAAIkoR,EAASn/T,GAE/BoJ,EAAKmuB,OAAO59B,MAChB,IAAK,YACL,IAAK,mBACGm4B,EAASqtS,EAASn/T,EAClBg+T,GAAgB,KAAYmB,EAASn/T,EAAI,IAAM+9T,EAAO,MAAkBE,EAAO,IAAMF,EAAO,IAEvFz+T,KAAK+S,MAAM4rT,GAAQkB,EAASl2T,MAAQk2T,EAASn/T,EAClDg+T,GAAgB,KAAYlsS,EAAS,IAAMC,EAAS,MAAkBD,EAAS,IAAMisS,EAAO,OAC3EoB,EAASl2T,MAAQk2T,EAASn/T,GAAK,IAAM+9T,EAAO,KAG7DC,GAAgB,KAAYlsS,EAAS,IAAMC,EAAS,MAAkBD,EAAS,IAC3EisS,EAAO,MAAkBE,EAAO,IAAMF,EAAO,IAC7C3uU,IAAMga,EAAKgf,cAAc14B,OAAS,IAClCsuU,GAAgB,KAAYC,EAAO,IAAMlsS,EAAS,MAAkBksS,EAAO,IAAMF,EAAO,MAC7EE,EAAO,IAAMF,EAAO,OAASoB,EAASl2T,MAAQk2T,EAASn/T,GAAK,IAAM+9T,IAGrF,MACJ,IAAK,4BACKjsS,EAASqtS,EAASn/T,GAAQV,KAAK+S,MAAM4rT,GAAQkB,EAASl2T,MAAQk2T,EAASn/T,IACzEg+T,GAAgB,KAAYlsS,EAAS,IAAMC,EAAS,MAAkBD,EAAS,IAAMisS,EAAO,MACjFE,EAAO,IAAMlsS,EAAS,MAAQksS,EAAO,IAAMF,GAOlD,MAFpBC,GAAqC,cAArB50T,EAAKmuB,OAAO59B,KAAwB,MAAawlU,EAASn/T,EAAI,IAAM+xB,EAAS,MACxFotS,EAASn/T,EAAIm/T,EAASl2T,OAAS,IAAM8oB,EAAU,KAEhD9+B,KAAKirU,wBAAwB90T,EAAMlE,EAAO84T,EAAazqU,GAG3DN,KAAK6wB,MAAMiyS,uBAAyB3sT,EAAK4sT,iBAAiBtmU,OAAS,GACnEuD,KAAK6wB,MAAMiyS,sBAAsBsJ,4BAA4Bj2T,EAAMlE,EAAO3R,EAAQ4rU,IAQ1FxH,EAAyBrpU,UAAU4vU,wBAA0B,SAAU90T,EAAMlE,EAAO84T,EAAazqU,GAC7F,IAAI+rU,EAAgBrsU,KAAK6wB,MAAMhD,SAASsI,SAAS,IAAIC,GAAWp2B,KAAK6wB,MAAM7vB,QAAQsC,GAAK,eAAiB2O,EAAO,cAAekE,EAAKmuB,OAAOtuB,MAAOG,EAAKmuB,OAAO9N,OAASx2B,KAAK6wB,MAAMwF,WAAWnH,SAAU,EAAG,GAAI67S,IAC9MsB,EAAc7oU,aAAa,QAAS,wBACpClD,EAAOqB,YAAY0qU,IAEvB3H,EAAyBrpU,UAAU4wU,cAAgB,SAAU91T,EAAM9C,EAAO2C,GACtE,OAAQG,EAAKusT,sBACT,IAAK,OACD,OAAOvkS,GAASnoB,EAAO3C,EAAO8C,EAAK6f,YACvC,QACI,OAAO3iB,IAGnBqxT,EAAyBrpU,UAAUqtU,eAAiB,SAAUvyT,EAAMlE,EAAO3R,EAAQ+yB,GAC/E,IAAIxC,EAAQ7wB,KAAK6wB,MACbizQ,EAAct3Q,GAAYrW,EAAK+pB,MAAO/pB,EAAKuqB,YAC3C9K,EAAkBn4B,EAAkB0Y,EAAK+wT,WAAa/wT,EAAKyf,gBAAkB,EAC7EwjC,GAAiC,WAAtBjjD,EAAK0rT,aAA4B,EAAI1rT,EAAK4rT,eAAehsT,OAAS/V,KAAKo5D,UAC1D,WAAvBjjD,EAAKspG,cAA6B,EAC/BtpG,EAAK+rT,aAAansT,OAASI,EAAKurT,sBAAwB1hU,KAAKo5D,SACrEA,EAAUjjD,EAAKsf,kBAAoB2jC,EAAU0qO,EAAY/tR,OAAS,EAAI6f,GAAoBwjC,EAAW,EACjG0qO,EAAY/tR,OAAS,EAAK6f,EAC9B,IACI50B,EAAUs1B,GADA,IAAIC,GAAW1F,EAAM7vB,QAAQsC,GAAK,cAAgB2O,EAAOohB,EAAKtmB,EAAIsmB,EAAKrd,MAAQ,EAAGqd,EAAKrmB,EAAIosD,EAAS,SAAUjjD,EAAK+pB,OAC9F/pB,EAAKuqB,WAAYvqB,EAAKuqB,WAAWlK,OAAS3F,EAAMwF,WAAWpH,UAAW3uB,GACzGU,EAAQwC,aAAa,aAAc2S,EAAK+7B,aAAe/7B,EAAK+pB,OAC5Dl/B,EAAQwC,aAAa,WAAY2S,EAAK8yG,SAAS/7G,aAEnDw3T,EAAyBrpU,UAAUovU,eAAiB,SAAUt0T,EAAMlE,EAAO23T,EAAWE,EAAWxpU,GAC7F,IAAI0S,EACA6d,EAAQ7wB,KAAK6wB,MACb1a,EAAK4rT,eAAe/rT,MAAQ,GAAKG,EAAKqhB,UACtCxkB,EAAU,IAAIojB,GAAWvF,EAAM7vB,QAAQsC,GAAK,kBAAoB2O,EAAO,cAAekE,EAAK4rT,eAAe/rT,MAAOG,EAAK4rT,eAAevrS,OAAS3F,EAAMwF,WAAWhH,cAAe,KAAM,KAAMu6S,GAC1L5pU,KAAK2sB,WAAakE,EAAMhD,SAASsI,SAASnjB,GAC1C1S,EAAOqB,YAAY3B,KAAK2sB,aAExBxW,EAAKk0T,eAAer0T,MAAQ,GAAKG,EAAKqhB,UACtCxkB,EAAU,IAAIojB,GAAWvF,EAAM7vB,QAAQsC,GAAK,kBAAoB2O,EAAO,cAAekE,EAAKk0T,eAAer0T,MAAOG,EAAKk0T,eAAe7zS,OAAS3F,EAAMwF,WAAW/G,cAAe,KAAM,KAAMw6S,GAC1L9pU,KAAK2sB,WAAakE,EAAMhD,SAASsI,SAASnjB,GAC1C1S,EAAOqB,YAAY3B,KAAK2sB,cAGhC+3S,EAAyBrpU,UAAUmvU,eAAiB,SAAUr0T,EAAMlE,EAAO03T,EAAWE,GAClF,IACI72T,EADA6d,EAAQ7wB,KAAK6wB,MAEb1a,EAAKmyT,eAAetyT,MAAQ,IAC5BhD,EAAU,IAAIojB,GAAWvF,EAAM7vB,QAAQsC,GAAK,kBAAoB2O,EAAO,cAAekE,EAAKmyT,eAAetyT,MAAOG,EAAKmyT,eAAe9xS,OAAS3F,EAAMwF,WAAWlH,cAAe,KAAMhZ,EAAKmyT,eAAex2R,UAAW63R,GACnN3pU,KAAK2sB,WAAakE,EAAMhD,SAASsI,SAASnjB,GAC1ChT,KAAKgB,QAAQW,YAAY3B,KAAK2sB,aAE9BxW,EAAKi0T,eAAep0T,MAAQ,IAC5BhD,EAAU,IAAIojB,GAAWvF,EAAM7vB,QAAQsC,GAAK,kBAAoB2O,EAAO,cAAekE,EAAKi0T,eAAep0T,MAAOG,EAAKi0T,eAAe5zS,OAAS3F,EAAMwF,WAAWjH,cAAe,KAAMjZ,EAAKi0T,eAAet4R,UAAW+3R,GACnN7pU,KAAK2sB,WAAakE,EAAMhD,SAASsI,SAASnjB,GAC1ChT,KAAKgB,QAAQW,YAAY3B,KAAK2sB,cAGtC+3S,EAAyBrpU,UAAUixU,eAAiB,SAAUz7S,EAAOxd,EAAO8C,EAAMlE,GAC9E,OAAqB,OAAjBkE,EAAKqrT,QACEhhU,SAASosB,eAAeiE,EAAM7vB,QAAQsC,GAAK,YAAc2O,EAAQ,UAExEzR,SAASosB,eAAeiE,EAAM7vB,QAAQsC,GAAK,YAAc2O,EAAQ,UAAU9N,SAAS3D,SAASosB,eAAevZ,EAAM/P,KAC3G9C,SAASosB,eAAeiE,EAAM7vB,QAAQsC,GAAK,YAAc2O,EAAQ,UAGjEzR,SAASosB,eAAeiE,EAAM7vB,QAAQsC,GAAK,YAAc2O,EAAQ,YAGhFyyT,EAAyBrpU,UAAUwvU,mBAAqB,SAAUh6S,EAAO7J,EAAc7Q,EAAMlE,EAAOohB,GAChG,IAAI5yB,EAAaT,KAAKssU,eAAez7S,EAAO7J,EAAc7Q,EAAMlE,GAChE+U,EAAaxjB,aAAa,UAAW,OACrC,IAAI+oU,EAAc17S,EAAMhD,SAASw+C,aAC7B/oE,GAAIutB,EAAM7vB,QAAQsC,GAAK,kBAAoB2O,IAE/Cs6T,EAAcl3S,GAAoBxE,EAAO1a,EAAMo2T,EAAat6T,EAA4B,aAArBkE,EAAKijB,YAA4B/F,GACpG5yB,EAAW0oU,aAAaniT,EAAcxmB,SAASosB,eAAe5F,EAAa1jB,KACvEiqB,GAAWsD,EAAM7vB,QAAQsC,GAAK,kBAAoB2O,GAClDxR,EAAW0oU,aAAaoD,EAAa/rU,SAASosB,eAAe2/S,EAAYjpU,KAGzE7C,EAAWkB,YAAY4qU,IAGxB7H,KCjkCP8H,GAA2B,WAK3B,SAASA,EAAU37S,GAEf7wB,KAAKysU,iBAELzsU,KAAK0sU,kBACL1sU,KAAK6wB,MAAQA,EACb7wB,KAAKukU,UAAY,EAmHrB,OA7GAiI,EAAUnxU,UAAUsxU,QAAU,WAM1B,IAAK,IAFD32T,EACAD,EAJA8a,EAAQ7wB,KAAK6wB,MACbiD,EAAQ,KACRlV,EAAS,KAG8BziB,EAA5B00B,EAAMoQ,cAAcxkC,OAAkB,EAAGN,GAAK,EAAGA,IAS5D,GARAyiB,EAASiS,EAAMoQ,cAAc9kC,GAC7B6Z,EAAyB,YAAhB4I,EAAOlY,MAA0C,YAApBkY,EAAOguT,WAA4BhuT,EAAOiuT,cAAgBjuT,EAAOkuT,OAAOt1S,SACvG5Y,EAAOkuT,OAAO/2T,OAAS,GAAK,EAAI,EACvCA,EAA0B,YAAhB6I,EAAOlY,MAA0C,YAApBkY,EAAOguT,WAA4BhuT,EAAOiuT,cAAgBjuT,EAAOkuT,OAAOt1S,SACxG5Y,EAAOkuT,OAAO92T,MAAQ,GAAK,EAAI,EAClC4I,EAAO4Y,SAAWf,GAAa5F,EAAMk8S,OAAQl8S,EAAMm8S,OAAQpuT,EAAO8V,SAAU1e,EAAOD,KACnF+d,EAAQ9zB,KAAKitU,aAAaruT,EAAQA,EAAO8V,SAAU7D,EAAMk8S,OAAQl8S,EAAMm8S,SAEvEl5S,EACA,OAAO,IAAIwwS,GAAUxwS,EAAOlV,GAGpC,OAAO,IAAI0lT,GAAUxwS,EAAOlV,IAEhC4tT,EAAUnxU,UAAUy9D,WAAa,SAAUjoC,GACvC,OAAQA,EAAMq8S,cAAc3uU,QAAQ,SAAW,GAAKsyB,EAAMs8S,iBAAwD,OAArCt8S,EAAMs8S,gBAAgBC,YAEvGZ,EAAUnxU,UAAU4xU,aAAe,SAAUruT,EAAQyU,EAAMtmB,EAAGC,GAS1D,IAAK,IAPDqgU,EACAC,EACAC,EAEA94S,EACAuQ,EACAwoS,EAHAC,EAAW,EAINrvU,EAAK,EAAGyE,EAAK+b,EAAO+Y,OAAQv5B,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvD,IAAI01B,EAAQjxB,EAAGzE,GACf,GAAK01B,EAAM45S,YACF55S,EAAM65S,SAAY75S,EAAM65S,QAAQlxU,OAIzC,GAAIq3B,EAAM45S,YAA2C,eAA7B1tU,KAAK6wB,MAAM+8S,eAAkChvT,EAAOguT,SAASruU,QAAQ,WAAa,GAetG,GAdA8uU,EAActgU,GAAK6R,EAAO8V,SAAS1e,MAAQ,EAAI4I,EAAO8V,SAAS3nB,GAC/DugU,EAActgU,GAAK4R,EAAO8V,SAAS3e,OAAS,EAAI6I,EAAO8V,SAAS1nB,GAChEygU,EAAW,EAAIphU,KAAK+Q,IAAM0W,EAAM45S,WAAW5J,iBAAmB,EAAI,EAAIhwS,EAAM45S,WAAW5J,iBACjFhwS,EAAM45S,WAAW5J,kBACvByJ,GAAclhU,KAAK0nB,MAAMu5S,EAAaD,GAAe,GAAMhhU,KAAK+Q,GAAKqwT,IAAa,EAAIphU,KAAK+Q,IAC3FmwT,EAAaA,EAAa,EAAI,EAAIlhU,KAAK+Q,GAAKmwT,EAAaA,EACzDA,GAA0B,EAAIlhU,KAAK+Q,GAAKwB,EAAOiS,MAAM2D,aAAaC,WAClEA,EAAaX,EAAM45S,WAAWj5S,WAC9BA,GAAcg5S,EACdh5S,EAAaA,EAAa,EAAI,EAAIpoB,KAAK+Q,GAAKqX,EAAaA,EACzDuQ,EAAWlR,EAAM45S,WAAW1oS,SAC5BA,GAAYyoS,EACZzoS,EAAWA,EAAW,EAAI,EAAI34B,KAAK+Q,GAAK4nB,EAAWA,EACnDwoS,EAAqBnhU,KAAKQ,KAAKR,KAAK87D,IAAI97D,KAAKE,IAAI8gU,GAAc,GAAKhhU,KAAK87D,IAAI97D,KAAKE,IAAI+gU,GAAc,IAChGC,GAAc94S,GAAc84S,GAAcvoS,IACvCwoS,GAAsB15S,EAAM45S,WAAWrnS,aAAemnS,GAAsB15S,EAAM45S,WAAW9gU,QAC3F4gU,GAAsB15S,EAAM45S,WAAWrnS,aAAemnS,GAAsB15S,EAAM45S,WAAW9gU,SAC3F4gU,GAAsB5uT,EAAOiS,MAAMjkB,OAC1C,OAAOknB,OAGV,GAAI9zB,KAAK6tU,yBAAyB/5S,EAAM65S,QAASt6S,EAAMtmB,EAAGC,GAC3D,OAAO8mB,EAGf,OAAO,MAKX04S,EAAUnxU,UAAUwyU,yBAA2B,SAAUC,EAAYz6S,EAAMtmB,EAAGC,GAC1E,IAAIjN,EAAQC,KACZ,OAAO8tU,EAAW1xS,KAAK,SAAU8vB,EAAQj6C,GAErC,OADAlS,EAAMwkU,UAAYtyT,EACXwkB,GAAa1pB,EAAGC,EAAG,IAAIkpB,IAAoC,cAA9Bn2B,EAAM8wB,MAAM+8S,cAAgCv6S,EAAKtmB,EAAI,GAAKm/C,EAAOn/C,GAAkC,cAA9BhN,EAAM8wB,MAAM+8S,cAAgCv6S,EAAKrmB,EAAI,GAAKk/C,EAAOl/C,EAAGk/C,EAAOl2C,MAAOk2C,EAAOn2C,YAG1My2T,EAAUnxU,UAAU0yU,WAAa,SAAUnvT,EAAQ5hB,GAC/C,IACI6I,EADAmoU,EAAQpvT,EAAOovT,MAEnB,GAAIhxU,GAAS4hB,EAAOkZ,KAAO,IAAO96B,GAAS4hB,EAAOs+O,KAAO,GACrD,IAAK,IAAI9+P,EAAK,EAAG6vU,EAAUD,EAAO5vU,EAAK6vU,EAAQxxU,OAAQ2B,IAAM,CACzD,IAAI5B,EAAOyxU,EAAQ7vU,IACJ,MAAXyH,GAAmBwG,KAAKE,IAAI/P,EAAOQ,GAASqP,KAAKE,IAAI1G,EAAU7I,MAC/D6I,EAAUrJ,GAItB,OAAOqJ,GAEX2mU,EAAUnxU,UAAU6yU,YAAc,SAAUr9S,EAAOjS,GAC/C,IAAI5hB,EACAq2B,EAAOzU,EAAO8V,SAKd13B,EAJC6zB,EAAMiG,oBAICF,GAAiB/F,EAAMm8S,OAAS35S,EAAKrmB,EAAGqmB,EAAKtd,OAAQ6I,EAAO9G,OAH5D6e,GAAiB9F,EAAMk8S,OAAS15S,EAAKtmB,EAAGsmB,EAAKrd,MAAO4I,EAAO9G,OAMvE,IAAK,IADDjS,EAAU7F,KAAK+tU,WAAWnvT,EAAQ5hB,GAC7BoB,EAAK,EAAGyE,EAAK+b,EAAO+Y,OAAQv5B,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvD,IAAI01B,EAAQjxB,EAAGzE,GACf,GAAIyH,IAAYiuB,EAAMtF,QAAUsF,EAAM0D,QAClC,OAAO,IAAI8sS,GAAUxwS,EAAOlV,GAGpC,OAAO,MAEJ4tT,KCnIPliP,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAY5DuxS,GAAmC,SAAUhjP,GAE7C,SAASgjP,IACL,OAAkB,OAAXhjP,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAsC/D,OAxCAsqF,GAAU6jP,EAAmBhjP,GAI7BN,IACI3jF,GAAS,IACVinU,EAAkB9yU,UAAW,eAAW,GAC3CwvF,IACI3jF,EAAS,OACVinU,EAAkB9yU,UAAW,YAAQ,GACxCwvF,IACI3jF,EAAS,gBACVinU,EAAkB9yU,UAAW,YAAQ,GACxCwvF,IACI3jF,EAAS,IACVinU,EAAkB9yU,UAAW,eAAW,GAC3CwvF,IACI3jF,EAAS,SACVinU,EAAkB9yU,UAAW,gBAAY,GAC5CwvF,IACI3jF,EAAS,IACVinU,EAAkB9yU,UAAW,UAAM,GACtCwvF,IACI3jF,EAAS,IACVinU,EAAkB9yU,UAAW,UAAM,GACtCwvF,IACI3jF,EAAS,WACVinU,EAAkB9yU,UAAW,iBAAa,GAC7CwvF,IACI9iF,GAAUiO,MAAO,KAAMwgB,MAAO,MAAQomS,KACvCuR,EAAkB9yU,UAAW,cAAU,GAC1CwvF,IACI9iF,GAAUyE,KAAM,EAAGC,MAAO,EAAGC,IAAK,EAAGC,OAAQ,GAAKmwT,KACnDqR,EAAkB9yU,UAAW,cAAU,GAC1CwvF,IACI9iF,GAAU+kB,KAAM,OAAQ0J,MAAO,MAAQmmS,KACxCwR,EAAkB9yU,UAAW,YAAQ,GACxCwvF,IACI3jF,EAAS,OACVinU,EAAkB9yU,UAAW,gBAAY,GACrC8yU,GACTnvQ,IAKEovQ,GAAgC,SAAUjjP,GAE1C,SAASijP,IACL,OAAkB,OAAXjjP,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KA6B/D,OA/BAsqF,GAAU8jP,EAAgBjjP,GAI1BN,IACI3jF,GAAS,IACVknU,EAAe/yU,UAAW,eAAW,GACxCwvF,IACI3jF,EAAS,WACVknU,EAAe/yU,UAAW,aAAS,GACtCwvF,IACI3jF,EAAS,KACVknU,EAAe/yU,UAAW,gBAAY,GACzCwvF,IACI3jF,EAAS,IACVknU,EAAe/yU,UAAW,cAAU,GACvCwvF,IACI3jF,EAAS,IACVknU,EAAe/yU,UAAW,aAAS,GACtCwvF,IACI9iF,GAAUiO,MAAO,EAAGwgB,MAAO,MAAQomS,KACpCwR,EAAe/yU,UAAW,cAAU,GACvCwvF,IACI3jF,EAAS,OACVknU,EAAe/yU,UAAW,YAAQ,GACrCwvF,IACI3jF,EAAS,IACVknU,EAAe/yU,UAAW,eAAW,GACxCwvF,IACI9iF,KAAYomU,KACbC,EAAe/yU,UAAW,iBAAa,GACnC+yU,GACTpvQ,IAMEqvQ,GAAwB,WASxB,OARA,WACIruU,KAAKsuU,gBAAkB,KACvBtuU,KAAK2tU,QAAU,KACf3tU,KAAK0tU,WAAa,KAClB1tU,KAAK8sU,QACDt1S,SAAS,OASjB+2S,GAA2B,SAAUpjP,GAErC,SAASojP,IACL,IAAIxuU,EAAmB,OAAXorF,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAGhE,OADAD,EAAM20B,SAAW,IAAIwB,GAAK,EAAG,EAAG,EAAG,GAC5Bn2B,EAkDX,OAvDAuqF,GAAUikP,EAAWpjP,GAQrBojP,EAAUlzU,UAAUmzU,cAAgB,SAAU5vT,EAAQiS,GAC9CjS,IACA5e,KAAK23B,OAAS/Y,EAAO+Y,QAEdZ,GAAiB/2B,KAAK0G,MACjCmqB,EAAM49S,gBAAgBC,eAAe1uU,KAAM6wB,GAC3CA,EAAM89S,sBAEV9jP,IACI3jF,EAAS,KACVqnU,EAAUlzU,UAAW,YAAQ,GAChCwvF,IACI3jF,EAAS,WACVqnU,EAAUlzU,UAAW,YAAQ,GAChCwvF,IACI3jF,EAAS,IACVqnU,EAAUlzU,UAAW,cAAU,GAClCwvF,IACI3jF,EAAS,IACVqnU,EAAUlzU,UAAW,uBAAmB,GAC3CwvF,IACI3jF,EAAS,IACVqnU,EAAUlzU,UAAW,wBAAoB,GAC5CwvF,IACI3jF,EAAS,IACVqnU,EAAUlzU,UAAW,uBAAmB,GAC3CwvF,IACI9iF,KAAYuwB,KACbi2S,EAAUlzU,UAAW,iBAAa,GACrCwvF,IACI9iF,KAAYqmU,KACbG,EAAUlzU,UAAW,cAAU,GAClCwvF,IACI3jF,GAAS,IACVqnU,EAAUlzU,UAAW,qBAAiB,GACzCwvF,IACI3jF,EAAS,OACVqnU,EAAUlzU,UAAW,iBAAa,GACrCwvF,IACI3jF,EAAS,KACVqnU,EAAUlzU,UAAW,YAAQ,GAChCwvF,IACI3jF,EAAS,IACVqnU,EAAUlzU,UAAW,aAAS,GACjCwvF,IACI3jF,EAAS,eACVqnU,EAAUlzU,UAAW,mBAAe,GAChCkzU,GACTvvQ,IAKE4vQ,GAAqC,SAAUzjP,GAE/C,SAASyjP,IACL,OAAkB,OAAXzjP,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAc/D,OAhBAsqF,GAAUskP,EAAqBzjP,GAI/BN,IACI3jF,EAAS,IACV0nU,EAAoBvzU,UAAW,aAAS,GAC3CwvF,IACI3jF,EAAS,KACV0nU,EAAoBvzU,UAAW,cAAU,GAC5CwvF,IACI3jF,EAAS,OACV0nU,EAAoBvzU,UAAW,aAAS,GAC3CwvF,IACI3jF,EAAS,IACV0nU,EAAoBvzU,UAAW,eAAW,GACtCuzU,GACT5vQ,IAEE6vQ,GAA8B,SAAU1jP,GAExC,SAAS0jP,IACL,OAAkB,OAAX1jP,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbAsqF,GAAUukP,EAAc1jP,GAIxBN,IACI3jF,EAAS,OACV2nU,EAAaxzU,UAAW,aAAS,GACpCwvF,IACI3jF,EAAS,OACV2nU,EAAaxzU,UAAW,aAAS,GACpCwvF,IACI3jF,EAAS,MACV2nU,EAAaxzU,UAAW,iBAAa,GACjCwzU,GACT7vQ,IAEE8vQ,GAAkC,SAAU3jP,GAE5C,SAAS2jP,IACL,OAAkB,OAAX3jP,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAyC/D,OA3CAsqF,GAAUwkP,EAAkB3jP,GAI5BN,IACI3jF,GAAS,IACV4nU,EAAiBzzU,UAAW,eAAW,GAC1CwvF,IACI3jF,EAAS,UACV4nU,EAAiBzzU,UAAW,YAAQ,GACvCwvF,IACI3jF,EAAS,SACV4nU,EAAiBzzU,UAAW,iBAAa,GAC5CwvF,IACI3jF,EAAS,aACV4nU,EAAiBzzU,UAAW,YAAQ,GACvCwvF,IACI3jF,EAAS,OACV4nU,EAAiBzzU,UAAW,aAAS,GACxCwvF,IACI3jF,EAAS,IACV4nU,EAAiBzzU,UAAW,qBAAiB,GAChDwvF,IACI3jF,EAAS,IACV4nU,EAAiBzzU,UAAW,aAAS,GACxCwvF,IACI3jF,EAAS,IACV4nU,EAAiBzzU,UAAW,uBAAmB,GAClDwvF,IACI3jF,EAAS,IACV4nU,EAAiBzzU,UAAW,6BAAyB,GACxDwvF,IACI3jF,EAAS,IACV4nU,EAAiBzzU,UAAW,6BAAyB,GACxDwvF,IACI3jF,EAAS,IACV4nU,EAAiBzzU,UAAW,+BAA2B,GAC1DwvF,IACI3jF,EAAS,IACV4nU,EAAiBzzU,UAAW,+BAA2B,GAC1DwvF,IACI9iF,EAAQ,KAAM6mU,KACfE,EAAiBzzU,UAAW,mBAAe,GACvCyzU,GACT9vQ,IAKE+vQ,GAA4B,SAAU5jP,GAEtC,SAAS4jP,IAML,IAAIhvU,EAAmB,OAAXorF,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAOhE,OALAD,EAAMivU,mBAENjvU,EAAM20B,SAAW,IAAIwB,GAAK,EAAG,EAAG,EAAG,GAEnCn2B,EAAMy7B,WAAa,KACZz7B,EA2VX,OAzWAuqF,GAAUykP,EAAY5jP,GAoBtB4jP,EAAW1zU,UAAU4zU,gBAAkB,WACnC,IAAI9yU,EAAI,EACJ23B,EAAQ,IAAIu6S,GACZa,EAASlvU,gBAAgBmvU,IAAwB,cAAdnvU,KAAK0G,KAAwB,IAAM1G,KAAKkvU,MAC3EE,EAAkBpvU,gBAAgBmvU,IAAUnvU,KAAK8sU,OAAO7rP,UAAUxpD,KAClEz3B,KAAK8sU,OAAO7rP,UAAUxpD,KAAO,GAC7Bz3B,gBAAgBmvU,KAAyB,cAAdnvU,KAAK0G,MAAsC,cAAd1G,KAAK0G,QAC7D1G,KAAKgvU,gBAAkBhvU,KAAK6wB,MAAMkG,GAAiB/2B,KAAK0G,MAAQ,gBAC5D2oU,oBAAoBrvU,KAAKgvU,gBAAiBhvU,OAElD,IAAI6B,EAAMvD,OAAOhB,KAAK0C,KAAKgvU,iBAAiBvyU,OAQ5C,GAPAuD,KAAK23B,UACL33B,KAAK83B,KAAO8yC,EAAAA,EACZ5qE,KAAKk9P,MAAQtyL,EAAAA,EACb5qE,KAAKi9P,KAAOryL,EAAAA,EACZ5qE,KAAKm9P,MAAQvyL,EAAAA,EACb5qE,KAAKsvU,SAAW1kQ,EAAAA,EAChB5qE,KAAKuvU,gBACwB,aAAzBvvU,KAAK8X,MAAMoa,UACX,KAAO/1B,EAAI0F,GACPiyB,EAAQ9zB,KAAKwvU,UAAUrzU,EAAGizU,EAAiBF,GAC3ClvU,KAAKyvU,iBAAiB37S,EAAO33B,EAAG23B,EAAM/mB,GACtC/M,KAAK0vU,SAAS57S,EAAO33B,GACrB6D,KAAK2vU,cAAc77S,EAAO33B,GAC1BA,SAGH,GAAI6D,KAAK8X,MAAMoa,UAAU3zB,QAAQ,aAAe,EAOjD,IANA,IAAIw3F,GACAr0B,SAAU,OACVh7D,KAAM,YAEN8gG,EAAaxnG,KAAK6wB,MAAMo+C,KAAK47B,cAAc9U,GAC3CwxO,EAAgBvnU,KAAK6wB,MAAMo+C,KAAK07B,cAAc5U,GAC3C55F,EAAI0F,IACPiyB,EAAQ9zB,KAAKwvU,UAAUrzU,EAAGizU,EAAiBF,IACrCniU,EAAI,IAAIiT,KAAKy/C,GAASrO,MAAM45H,WAAY/iK,IAAK6L,EAAM/mB,IAAKkb,KACjC,aAAzBjoB,KAAK8X,MAAMoa,UACX4B,EAAMtF,OAASxO,KAAKoxC,MAAMo2C,EAAW+/N,EAAczzS,EAAM/mB,KAGzD/M,KAAKyvU,iBAAiB37S,EAAO33B,EAAG6jB,KAAKoxC,MAAMo2C,EAAW+/N,EAAczzS,EAAM/mB,KAAKG,YAEnFlN,KAAK0vU,SAAS57S,EAAO33B,GACrB6D,KAAK2vU,cAAc77S,EAAO33B,GAC1BA,SAIJ,KAAOA,EAAI0F,IACPiyB,EAAQ9zB,KAAKwvU,UAAUrzU,EAAGizU,EAAiBF,IACrC1gT,OAASsF,EAAM/mB,EACrB/M,KAAK0vU,SAAS57S,EAAO33B,GACrB6D,KAAK2vU,cAAc77S,EAAO33B,GAC1BA,IAGR,GAAI6D,gBAAgBmvU,KACZnvU,KAAK0G,KAAKnI,QAAQ,WAAa,GAAMyB,KAAK4sU,SAASruU,QAAQ,WAAa,GAAkC,eAA7ByB,KAAK6wB,MAAM+8S,eAAiC,CACzH,IAAIgC,EAAU5vU,KAAK0G,KAAKnI,QAAQ,SAAW,GAAuB,SAAlByB,KAAK4sU,SACrD5sU,KAAK6wB,MAAM,UAAY++S,EAAS,OAAS,IAAM,gBAAgBC,gBAAgB7vU,QAI3F+uU,EAAW1zU,UAAUq0U,SAAW,SAAU57S,EAAO33B,GAC7C23B,EAAM7hB,MAAQ9V,EACd23B,EAAMrF,OAASqF,EAAM9mB,EAErBhN,KAAK83B,KAAOzrB,KAAK0T,IAAI/f,KAAK83B,KAAMhE,EAAMtF,QACtCxuB,KAAKk9P,KAAO7wP,KAAKC,IAAItM,KAAKk9P,KAAMppO,EAAMtF,QACtCxuB,KAAKguU,MAAMxpU,KAAKsvB,EAAMtF,SAG1BugT,EAAW1zU,UAAUm0U,UAAY,SAAUrzU,EAAGizU,EAAiBF,GAC3D,IAAIp7S,EACJ9zB,KAAK23B,OAAOx7B,GAAK,IAAIkyU,GACrBv6S,EAAQ9zB,KAAK23B,OAAOx7B,GACpB,IAAI6yU,EAAkBhvU,KAAKgvU,gBAa3B,OAZAl7S,EAAM/mB,EAAIlQ,EAASqyU,EAAOF,EAAgB7yU,IAC1C23B,EAAM2H,KAAO5+B,EAASmD,KAAKy7B,KAAMuzS,EAAgB7yU,IACjD23B,EAAM4H,IAAM7+B,EAASmD,KAAK07B,IAAKszS,EAAgB7yU,IAC/C23B,EAAMpyB,KAAO7E,EAASmD,KAAK0B,KAAMstU,EAAgB7yU,IACjD23B,EAAM7xB,MAAQpF,EAASmD,KAAKiC,MAAO+sU,EAAgB7yU,IACnD23B,EAAMg8S,OAASjzU,EAASmD,KAAK8vU,OAAQd,EAAgB7yU,IACrD23B,EAAMu0C,SAAWxrE,EAASmD,KAAK+vU,kBAAmBf,EAAgB7yU,IAC9D6D,gBAAgBmvU,KAChBr7S,EAAM9mB,EAAInQ,EAASmD,KAAKmzB,MAAO67S,EAAgB7yU,IAC/C23B,EAAMhH,KAAOjwB,EAASmD,KAAK8sB,KAAMkiT,EAAgB7yU,IACjD23B,EAAMrH,KAAO5vB,EAASuyU,EAAiBJ,EAAgB7yU,KAEpD23B,GAMXi7S,EAAW1zU,UAAUs0U,cAAgB,SAAU77S,EAAO33B,GAClD,IAAK6D,KAAKgwU,eAAel8S,GAErB,OADAA,EAAM0D,SAAU,EACT,KAEX1D,EAAMwmN,SAAU,EAEhB,OADWt6O,gBAAgBmvU,GAASnvU,KAAKiwU,mBAAmBlyS,KAAO,QAE/D,IAAK,OACDjK,EAAM0D,SAAU,EACZx3B,gBAAgBmvU,IAAUnvU,KAAKw7B,WAAWj9B,QAAQ,YAAc,GAChEu1B,EAAM2H,KAAO3H,EAAM4H,IAAM,EACrB17B,KAAKw7B,WAAWj9B,QAAQ,qBAAuB,IAC/Cu1B,EAAMpyB,KAAOoyB,EAAM7xB,MAAQ,IAI/B6xB,EAAM9mB,EAAI8mB,EAAMrF,OAASzuB,KAAKkwU,MAAM/zU,GAAK,EAE7C,MACJ,IAAK,UACG6D,gBAAgBmvU,KACZnvU,KAAKw7B,WAAWj9B,QAAQ,YAAc,GACtCu1B,EAAM2H,KAAQh+B,EAAkBq2B,EAAM2H,OAASumB,OAAOluB,EAAM2H,MAASz7B,KAAKmwU,WAAWnwU,KAAKy7B,KAAMt/B,GAAK23B,EAAM2H,KAC3G3H,EAAM4H,IAAOj+B,EAAkBq2B,EAAM4H,MAAQsmB,OAAOluB,EAAM4H,KAAQ17B,KAAKmwU,WAAWnwU,KAAK07B,IAAKv/B,GAAK23B,EAAM4H,IACnG17B,KAAKw7B,WAAWj9B,QAAQ,qBAAuB,IAC/Cu1B,EAAMpyB,KAAQjE,EAAkBq2B,EAAMpyB,OAASsgD,OAAOluB,EAAMpyB,MAAS1B,KAAKmwU,WAAWnwU,KAAK0B,KAAMvF,GAAK23B,EAAMpyB,KAC3GoyB,EAAM7xB,MAASxE,EAAkBq2B,EAAM7xB,QAAU+/C,OAAOluB,EAAM7xB,OAAUjC,KAAKmwU,WAAWnwU,KAAKiC,MAAO9F,GAChG23B,EAAM7xB,QAId6xB,EAAM9mB,EAAI8mB,EAAMrF,OAASzuB,KAAKkwU,MAAM/zU,GAAK6D,KAAKmwU,WAAWnwU,KAAKmzB,MAAOh3B,IAG7E23B,EAAM0D,SAAU,EAChB,MACJ,IAAK,OACL,IAAK,MACDx3B,KAAKkwU,MAAM/zU,GAAK,KAChB23B,EAAM0D,SAAU,IAI5Bu3S,EAAW1zU,UAAU20U,eAAiB,SAAUl8S,GAC5C,IACIs8S,EACJ,OAFWpwU,gBAAgBmvU,GAASnvU,KAAKw7B,WAAa,oBAGlD,IAAK,KAOD,OANAx7B,KAAKqwU,YAAYv8S,EAAMrF,QACvBzuB,KAAKkwU,MAAM1rU,KAAKsvB,EAAMrF,QAClBzuB,gBAAgBmvU,IAAwB,WAAdnvU,KAAK0G,OAC/B1G,KAAKsvU,QAAUjjU,KAAKC,IAAItM,KAAKsvU,QAAU7xU,EAAkBq2B,EAAMhH,OAASk1B,OAAOluB,EAAMhH,MAAS9sB,KAAKsvU,QAC7Fx7S,EAAMhH,OAETrvB,EAAkBq2B,EAAM/mB,IAAOtP,EAAkBq2B,EAAM9mB,IAAMg1C,OAAOluB,EAAM9mB,GACrF,IAAK,UAED,OADAhN,KAAKswU,cAAcx8S,EAAM2H,KAAM3H,EAAM4H,KAC9Bj+B,EAAkBq2B,EAAM/mB,IAAOtP,EAAkBq2B,EAAM4H,MAAQsmB,OAAOluB,EAAM4H,MAC9Ej+B,EAAkBq2B,EAAM2H,OAASumB,OAAOluB,EAAM2H,MACvD,IAAK,mBAED,OADAz7B,KAAKswU,cAAcx8S,EAAM2H,KAAM3H,EAAM4H,KAC9Bj+B,EAAkBq2B,EAAM/mB,IAAOtP,EAAkBq2B,EAAM4H,MAAQsmB,OAAOluB,EAAM4H,MAC9Ej+B,EAAkBq2B,EAAMpyB,OAASsgD,OAAOluB,EAAMpyB,OAAWjE,EAAkBq2B,EAAM7xB,QAAU+/C,OAAOluB,EAAM7xB,QACrGxE,EAAkBq2B,EAAM2H,OAASumB,OAAOluB,EAAM2H,MAC1D,IAAK,UASD,OARA20S,GAAWt8S,EAAM9mB,IAAM,OAAOg6B,OAAO,SAAUhqC,GAC3C,OAAQS,EAAkBT,KAAWglD,MAAMhlD,KAC5C66B,KAAK,SAAUsrB,EAAGrmB,GACjB,OAAOqmB,EAAIrmB,IAEfhJ,EAAM9mB,EAAIojU,EACVpwU,KAAKi9P,KAAO5wP,KAAK0T,IAAI/f,KAAKi9P,KAAM5wP,KAAK0T,IAAIxkB,MAAM8Q,KAAM+jU,IACrDpwU,KAAKm9P,KAAO9wP,KAAKC,IAAItM,KAAKm9P,KAAM9wP,KAAKC,IAAI/Q,MAAM8Q,KAAM+jU,KAC7CA,EAAQ3zU,SAM5BsyU,EAAW1zU,UAAUg1U,YAAc,SAAU5hT,GACzCzuB,KAAKi9P,KAAO5wP,KAAK0T,IAAI/f,KAAKi9P,KAAOx/P,EAAkBgxB,IAAWuzB,MAAMvzB,GAAWzuB,KAAKi9P,KAAOxuO,GAC3FzuB,KAAKm9P,KAAO9wP,KAAKC,IAAItM,KAAKm9P,KAAO1/P,EAAkBgxB,IAAWuzB,MAAMvzB,GAAWzuB,KAAKm9P,KAAO1uO,IAK/FsgT,EAAW1zU,UAAUi1U,cAAgB,SAAU70S,EAAMC,GACjD17B,KAAKi9P,KAAO5wP,KAAK0T,IAAI/f,KAAKi9P,KAAM5wP,KAAK0T,IAAKtiB,EAAkBi+B,IAAQsmB,MAAMtmB,GAAQ17B,KAAKi9P,KAAOvhO,EAAMj+B,EAAkBg+B,IAASumB,MAAMvmB,GAASz7B,KAAKi9P,KAAOxhO,IAC1Jz7B,KAAKm9P,KAAO9wP,KAAKC,IAAItM,KAAKm9P,KAAM9wP,KAAKC,IAAK7O,EAAkBi+B,IAAQsmB,MAAMtmB,GAAQ17B,KAAKm9P,KAAOzhO,EAAMj+B,EAAkBg+B,IAASumB,MAAMvmB,GAASz7B,KAAKm9P,KAAO1hO,KAM9JszS,EAAW1zU,UAAUk0U,cAAgB,WACjC,IAAI7oU,EACJ,GAAI1G,gBAAgBmvU,GAAQ,CACxB,IAAI3zS,EAA0C,eAA7Bx7B,KAAK6wB,MAAM+8S,cAAiC5tU,KAAK4sU,SAAW5sU,KAAK0G,KAClF,GAAI80B,EACA,OAAQA,GACJ,IAAK,cACL,IAAK,YACL,IAAK,OACD90B,EAAO,UACP,MACJ,IAAK,gBACL,IAAK,SACDA,EAAO,mBACP,MACJ,IAAK,gBACDA,EAAO,UACP,MACJ,QACIA,EAAO,MAIvB1G,KAAKw7B,WAAa90B,GAGtBqoU,EAAW1zU,UAAUo0U,iBAAmB,SAAU37S,EAAO7hB,EAAOswT,GACvDviU,KAAK8X,MAAMy4T,WAOZvwU,KAAK8X,MAAM0vT,OAAOv1T,GAASjS,KAAK8X,MAAM0vT,OAAOv1T,IAAU,KAAOswT,EAC1DviU,KAAK8X,MAAM0vT,OAAOhjU,KAAK+9T,GAC3BzuS,EAAMtF,OAASvc,IARXjS,KAAK8X,MAAM0vT,OAAOjpU,QAAQgkU,GAAU,GACpCviU,KAAK8X,MAAM0vT,OAAOhjU,KAAK+9T,GAE3BzuS,EAAMtF,OAASxuB,KAAK8X,MAAM0vT,OAAOjpU,QAAQgkU,KAWjDwM,EAAW1zU,UAAU80U,WAAa,SAAU9+O,EAAQl1F,EAAGK,QACtC,IAATA,IAAmBA,EAAOwD,KAAKgvU,iBAGnC,QAFexyU,EAAKL,EAAI,GAAMK,EAAKL,EAAI,GAAGk1F,IAAW,EAAK,IAC/C70F,EAAKL,EAAI,GAAMK,EAAKL,EAAI,GAAGk1F,IAAW,EAAK,IAC3B,GAO/B09O,EAAW1zU,UAAUm1U,mBAAqB,SAAU3/S,GAChD,IAAI9wB,EAAQC,KAEZ,GADAA,KAAK6wB,MAAQA,GACTpzB,EAAkBuC,KAAK07D,QAAWj+D,EAAkBuC,KAAKujE,YAA7D,CAIkBvjE,KAAKywU,WAAW9D,QAAQ3sU,KAAKywU,WAAWC,gBAAgBhgL,iBAC9D4iC,KAAK,SAAUzyL,GAAK,OAAOd,EAAM4wU,mBAAmB9vU,EAAGgwB,UAJ/D7wB,KAAK2wU,oBAAqB5xU,OAAQiB,KAAKujE,WAAYzkD,MAAO9e,KAAKujE,WAAW9mE,QAAUo0B,GAAO,IAMnGk+S,EAAW1zU,UAAUs1U,mBAAqB,SAAU9vU,EAAGgwB,EAAO+/S,GAG1D,QAFqB,IAAjBA,IAA2BA,GAAe,GAC9C5wU,KAAKgvU,gBAA+B,KAAbnuU,EAAE9B,OAAgB8B,EAAE9B,UACvCiB,gBAAgBmvU,GAAQ,CACxB,IAAIv2S,GACAnB,KAAM8nS,GAAc3gT,OAAQ5e,KAAMxD,KAAMwD,KAAKgvU,gBAAiBpxS,KAAM59B,KAAKqoE,UAE7EroE,KAAK6wB,MAAMrK,QAAQ+4S,GAAc3mS,GACjC54B,KAAKqoE,SAAWzvC,EAASgF,KACzB59B,KAAKgvU,gBAAkBp2S,EAASp8B,KAEpCwD,KAAKivU,kBACLjvU,KAAKi8P,aAAep7P,EAAEie,MACtB9e,KAAK6wU,aAAaD,IAEtB7B,EAAW1zU,UAAUw1U,aAAe,SAAUD,GAC1C,IAAI//S,EAAQ7wB,KAAK6wB,MAKjB,GAJI7wB,gBAAgBmvU,KAChBt+S,EAAM89S,oBAAsBiC,EAAe,EAAI,GAEnD//S,EAAMigT,0BAA0B9wU,MAC5BA,gBAAgBmvU,IAA4B,cAAlBnvU,KAAKo6L,SAC/B,IAAK,IAAIh8L,EAAK,EAAGyE,EAAK7C,KAAK+wU,WAAY3yU,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACzCyE,EAAGzE,GACTowU,cAAcxuU,KAAM6wB,GAIlCA,EAAMoQ,cAAcxkC,SAAYo0B,EAAwB,qBACxDA,EAAMmgT,eACNngT,EAAMrK,QAAQ,UAAYqK,MAAOA,KAEjC7wB,gBAAgBmvU,KAChBt+S,EAAM89S,oBAAsBiC,EAAe,EAAI,IAGvD/lP,IACI3jF,EAAS,KACV6nU,EAAW1zU,UAAW,aAAS,GAClCwvF,IACI3jF,EAAS,KACV6nU,EAAW1zU,UAAW,YAAQ,GACjCwvF,IACI3jF,EAAS,KACV6nU,EAAW1zU,UAAW,WAAO,GAChCwvF,IACI3jF,EAAS,KACV6nU,EAAW1zU,UAAW,YAAQ,GACjCwvF,IACI3jF,EAAS,KACV6nU,EAAW1zU,UAAW,aAAS,GAClCwvF,IACI3jF,EAAS,KACV6nU,EAAW1zU,UAAW,cAAU,GACnCwvF,IACI3jF,EAAS,KACV6nU,EAAW1zU,UAAW,yBAAqB,GAC9CwvF,IACI3jF,EAAS,OACV6nU,EAAW1zU,UAAW,iBAAa,GACtCwvF,IACI3jF,EAAS,OACV6nU,EAAW1zU,UAAW,iBAAa,GACtCwvF,IACI9iF,EAAQ,KAAMuwB,KACfy2S,EAAW1zU,UAAW,iBAAa,GACtCwvF,IACI3jF,EAAS,OACV6nU,EAAW1zU,UAAW,YAAQ,GACjCwvF,IACI3jF,EAAS,IACV6nU,EAAW1zU,UAAW,aAAS,GAClCwvF,IACI3jF,EAAS,MACV6nU,EAAW1zU,UAAW,iBAAa,GACtCwvF,IACI3jF,EAAS,KACV6nU,EAAW1zU,UAAW,kBAAc,GACvCwvF,IACI3jF,KACD6nU,EAAW1zU,UAAW,aAAS,GAClCwvF,IACIxiF,KAAewmU,KAChBE,EAAW1zU,UAAW,gBAAY,GACrCwvF,IACI3jF,EAAS,MACV6nU,EAAW1zU,UAAW,mBAAe,GACjC0zU,GACT/vQ,IAKEmwQ,GAAwB,SAAUhkP,GAGlC,SAASgkP,EAAO7uU,EAAQ+Q,EAAU5K,EAAchI,GAC5C,IAAIsB,EAAQorF,EAAO7pF,KAAKtB,KAAMM,EAAQ+Q,EAAU5K,EAAchI,IAAYuB,KAU1E,OATAD,EAAM4uU,mBAAqB,EAE3B5uU,EAAMq6L,SAAW,SAEjBr6L,EAAM8sU,cAAe,EAErB9sU,EAAMkxU,cAENlxU,EAAMmxU,kBAAmB,EAClBnxU,EA6ZX,OA1aAuqF,GAAU6kP,EAAQhkP,GAoBlBgkP,EAAO9zU,UAAU81U,iBAAmB,WAChC,GAA6B,aAAzBnxU,KAAK8X,MAAMoa,UACX,OAAO,KAEXlyB,KAAK8X,MAAM0vT,UACX,IAAK,IAAIppU,EAAK,EAAGyE,EAAK7C,KAAK8X,MAAM8G,OAAQxgB,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC3D,IAAIyf,EAAOhb,EAAGzE,GACd,GAAIyf,EAAK2Z,QAAS,CACd3Z,EAAKia,KAAO8yC,EAAAA,EACZ/sD,EAAKq/O,MAAQtyL,EAAAA,EACb,IAAK,IAAI3mE,EAAK,EAAGwG,EAAKoT,EAAK8Z,OAAQ1zB,EAAKwG,EAAGhO,OAAQwH,IAAM,CACrD,IAAI6vB,EAAQrpB,EAAGxG,GACf4Z,EAAK4xT,iBAAiB37S,EAAOA,EAAM7hB,MAAO6hB,EAAM/mB,GAChD8Q,EAAKia,KAAOzrB,KAAK0T,IAAIlC,EAAKia,KAAMhE,EAAMtF,QACtC3Q,EAAKq/O,KAAO7wP,KAAKC,IAAIuR,EAAKq/O,KAAMppO,EAAMtF,YAUtD2gT,EAAO9zU,UAAU+1U,qBAAuB,SAAUv0Q,EAAQ6D,EAAK2wQ,GAE3D,IAAK,IADDn6S,KACK94B,EAAK,EAAGyE,EAAK69D,EAAI+G,KAAMrpE,EAAKyE,EAAGpG,OAAQ2B,IAE5C,IAAK,IAAI6F,EAAK,EAAGwG,EADH5H,EAAGzE,GACawgB,OAAQ3a,EAAKwG,EAAGhO,OAAQwH,IAElD,IAAK,IADDqtU,EAAY7mU,EAAGxG,GACVstU,EAAK,EAAGC,EAAK30Q,EAAO4K,KAAM8pQ,EAAKC,EAAG/0U,OAAQ80U,IAE/C,IAAK,IAAIE,EAAK,EAAGC,EADNF,EAAGD,GACa3yT,OAAQ6yT,EAAKC,EAAGj1U,OAAQg1U,IAAM,CACrD,IAAI7yT,EAAS8yT,EAAGD,GACZ7yT,IAAW0yT,GAAa1yT,EAAO4Y,SAAWx3B,KAAK2xU,kBAAkB/yT,EAAQyyT,IACzEn6S,EAAiB1yB,KAAKoa,GAM1C,OAAOsY,GAOXi4S,EAAO9zU,UAAUs2U,kBAAoB,SAAU/yT,EAAQyyT,GACnD,IAAI3qU,EAAQkY,EAAW,KAAEhJ,cACzB,OAAoC,IAA5BlP,EAAKnI,QAAQ,YAA6C,IAAzBmI,EAAKnI,QAAQ,SAAgD,IAA/BmI,EAAKnI,QAAQ,eAC7C,IAAnCmI,EAAKnI,QAAQ,mBAAuD,IAA5BmI,EAAKnI,QAAQ,YAC3B,IAA1BmI,EAAKnI,QAAQ,UAAyD,IAAvCqgB,EAAOguT,SAASruU,QAAQ,YACxB,IAA/BmI,EAAKnI,QAAQ,eAA0D,IAAnCmI,EAAKnI,QAAQ,kBAA2B8yU,GAOpFlC,EAAO9zU,UAAUu2U,sBAAwB,SAAUC,EAAehhT,GAC9D,IACK,IAAIzyB,EAAK,EAAGyE,EAAKguB,EAAMktC,QAAS3/D,EAAKyE,EAAGpG,OAAQ2B,IAEjD,IAAK,IADD0zU,EAAajvU,EAAGzE,GACX6F,EAAK,EAAGwG,EAAKomB,EAAM0nQ,KAAMt0R,EAAKwG,EAAGhO,OAAQwH,IAAM,CACpD,IAAI4Z,EAAOpT,EAAGxG,GACdjE,KAAK+xU,wBAAwB/xU,KAAKoxU,qBAAqBU,EAAYj0T,GAAM,GAAOg0T,KAI5F1C,EAAO9zU,UAAU02U,wBAA0B,SAAU76S,EAAkB26S,GACnE,IAAI7N,EACAC,EAIA+N,EACAC,EACAj1U,EALAozU,KACA8B,KACAC,KAIAC,KACAP,IACAO,EAAcpyU,KAAKqyU,gBAAgBn7S,IAEvC,IAAK,IAAI94B,EAAK,EAAGk0U,EAAqBp7S,EAAkB94B,EAAKk0U,EAAmB71U,OAAQ2B,IAAM,CAC1F,IAAIwgB,EAAS0zT,EAAmBl0U,GAChC,IAAyC,IAArCwgB,EAAOlY,KAAKnI,QAAQ,cAAgE,IAAzCqgB,EAAOguT,SAASruU,QAAQ,aACnC,eAA/BqgB,EAAOiS,MAAM+8S,cAAkC,CAE3CsE,EADLF,GAA0D,IAAzCpzT,EAAOlY,KAAKnI,QAAQ,gBAA0B,kBAAoBqgB,EAAOozT,iBAEtFE,EAAaF,MACbG,EAAaH,OAEjB5B,EAAUxxT,EAAOsxT,MACjBlM,KACAC,KACA,IAAK,IAAI1gT,EAAI,EAAG+hR,EAAe1mR,EAAO+Y,OAAOl7B,OAAQ8mB,EAAI+hR,EAAc/hR,IACnE0uT,EAAY,EACZj1U,EAAQozU,EAAQ7sT,QAC6CpoB,IAAzD+2U,EAAaF,GAAepzT,EAAO+Y,OAAOpU,GAAGiL,UAC7C0jT,EAAaF,GAAepzT,EAAO+Y,OAAOpU,GAAGiL,QAAU,QAEErzB,IAAzDg3U,EAAaH,GAAepzT,EAAO+Y,OAAOpU,GAAGiL,UAC7C2jT,EAAaH,GAAepzT,EAAO+Y,OAAOpU,GAAGiL,QAAU,GAEvDqjT,IACA70U,EAAQA,EAAQo1U,EAAYJ,GAAepzT,EAAO+Y,OAAOpU,GAAGiL,QAAU,IACtExxB,EAASglD,MAAMhlD,GAAiB,EAARA,EACxB4hB,EAAO+Y,OAAOpU,GAAGgvT,QAAUv1U,EAAMgiB,QAAQ,IAEzChiB,GAAS,GACTi1U,EAAYC,EAAaF,GAAepzT,EAAO+Y,OAAOpU,GAAGiL,QACzD0jT,EAAaF,GAAepzT,EAAO+Y,OAAOpU,GAAGiL,SAAWxxB,IAGxDi1U,EAAYE,EAAaH,GAAepzT,EAAO+Y,OAAOpU,GAAGiL,QACzD2jT,EAAaH,GAAepzT,EAAO+Y,OAAOpU,GAAGiL,SAAWxxB,GAE5DgnU,EAAYx/T,KAAKytU,GACjBhO,EAAUz/T,KAAKxH,EAAQi1U,GACnBJ,GAAkB5N,EAAU1gT,GAAK,MACjC0gT,EAAU1gT,GAAK,KAGvB3E,EAAO4zT,cAAgB,IAAIzO,GAAYC,EAAaC,GACpDrlT,EAAOq+O,KAAO5wP,KAAK0T,IAAIxkB,MAAM,EAAGyoU,GAChCplT,EAAOu+O,KAAO9wP,KAAKC,IAAI/Q,MAAM,EAAG0oU,GAC5BrlT,EAAOq+O,KAAO5wP,KAAK0T,IAAIxkB,MAAM,EAAG0oU,KAChCrlT,EAAOq+O,KAAO,GAAmB,IAAM5wP,KAAK0T,IAAIxkB,MAAM,EAAG0oU,IAEzDrlT,EAAOu+O,KAAO9wP,KAAKC,IAAI/Q,MAAM,EAAGyoU,KAChCplT,EAAOu+O,KAAO,MAK9BgyE,EAAO9zU,UAAUg3U,gBAAkB,SAAUn7S,GAGzC,IAAK,IADD86S,EADAI,KAEKh0U,EAAK,EAAGq0U,EAAqBv7S,EAAkB94B,EAAKq0U,EAAmBh2U,OAAQ2B,IAAM,CAC1F,IAAIwgB,EAAS6zT,EAAmBr0U,GAEhC,GADAwgB,EAAOhH,MAAMunT,YAA6C,IAAhCvgT,EAAOlY,KAAKnI,QAAQ,QACL,IAArCqgB,EAAOlY,KAAKnI,QAAQ,YAAoB,CAEnC6zU,EADLJ,GAA0D,IAAzCpzT,EAAOlY,KAAKnI,QAAQ,gBAA0B,kBAAoBqgB,EAAOozT,iBAEtFI,EAAYJ,OAEhB,IAAK,IAAIzuT,EAAI,EAAG+hR,EAAe1mR,EAAO+Y,OAAOl7B,OAAQ8mB,EAAI+hR,EAAc/hR,SACPpoB,IAAxDi3U,EAAYJ,GAAepzT,EAAO+Y,OAAOpU,GAAGiL,UAC5C4jT,EAAYJ,GAAepzT,EAAO+Y,OAAOpU,GAAGiL,QAAU,GAEtD5P,EAAOsxT,MAAM3sT,GAAK,EAClB6uT,EAAYJ,GAAepzT,EAAO+Y,OAAOpU,GAAGiL,SAAW5P,EAAOsxT,MAAM3sT,GAGpE6uT,EAAYJ,GAAepzT,EAAO+Y,OAAOpU,GAAGiL,SAAW5P,EAAOsxT,MAAM3sT,IAKpF,OAAO6uT,GAOXjD,EAAO9zU,UAAUq3U,aAAe,SAAU7hT,EAAO5e,GAC7C,IAAIupB,EAAazE,GAAiB/2B,KAAK0G,OACJ,IAA/B80B,EAAWj9B,QAAQ,SACnBi9B,EAAaA,EAAWjsB,QAAQ,MAAO,KAEvCshB,EAAM2K,EAAa,kBACG,cAAlBx7B,KAAKo6L,UAA8C,cAAlBp6L,KAAKo6L,UACtCp6L,KAAK2yU,qBAAqB9hT,GAE9BA,EAAM2K,EAAa,gBAAgBuwE,OAAO/rG,KAAMA,KAAK8X,MAAO9X,KAAK4X,MAAOiZ,EAAMiG,qBACxD,cAAlB92B,KAAKo6L,WACDp6L,KAAK2vB,SAAS6H,SACdx3B,KAAK6wB,MAAM+hT,eAAe7mO,OAAO/rG,MAEjCA,KAAK8sU,OAAO7rP,UAAUzpD,SACtB3G,EAAMgiT,gBAAgB9mO,OAAO/rG,KAAMA,KAAK6wB,MAAO7wB,KAAK8sU,OAAO7rP,WAE/DjhF,KAAK8yU,oBAAoBjiT,EAAMkiT,eAAgBliT,IAEnD7wB,KAAKgzU,iBAAiBniT,EAAO2K,EAAYx7B,KAAK2vB,SAAU3vB,KAAK8sU,OAAQ9sU,KAAK8sU,OAAO7rP,aAQzFkuP,EAAO9zU,UAAUs3U,qBAAuB,SAAU9hT,GAC9C,GAAsB,cAAlB7wB,KAAKo6L,SAA0B,CAC/B,IAAI7lJ,EAAY1jB,EAAM7vB,QAAQsC,GAG1B2vU,GAFYjzU,KAAK8X,MAAMub,KAERrzB,KAAK8sU,OAAOxoS,OAAOtuB,MAAQ,EAAI,GAG9C+1F,GAFY/rG,KAAK4X,MAAMyb,KACdrzB,KAAK8sU,OACLj8S,EAAMhD,UACf5b,EAAQjS,KAAKiS,MACb2zR,EAA8B,YAAd5lS,KAAK0G,MAAuB1G,KAAK8sU,OAAO/2T,OAASk9T,GAAgB,EAAI,EACrFC,EAA6B,YAAdlzU,KAAK0G,MAAuB1G,KAAK8sU,OAAO92T,MAAQi9T,GAAgB,EAAI,EAC3D,eAAxBpiT,EAAM+8S,cACN5tU,KAAKmzU,gBAAkBpnO,EAAO2N,qBAAqB,IAAIyqN,GAAa5vR,EAAY,wBAA0BtiC,EAAO,eAAiB+D,MAAO,EAAGwgB,MAAO,QAAU,EAAGx2B,KAAK00B,SAAS1e,MAAQ,EAAIhW,KAAK00B,SAAS3nB,EAAG/M,KAAK00B,SAAS3e,OAAS,EAAI/V,KAAK00B,SAAS1nB,EAAG6jB,EAAMjkB,SAG7P5M,KAAKmzU,gBAAkBpnO,EAAO0N,aAAa,IAAIyqN,GAAW3vR,EAAY,wBAA0BtiC,EAAO,eAAiB+D,MAAO,EAAGwgB,MAAO,QAAU,GAC/IzpB,GAAImmU,EAAalmU,GAAI44R,EACrB5vR,MAAOhW,KAAK00B,SAAS1e,MAAsB,EAAdk9T,EAC7Bn9T,OAAQ/V,KAAK00B,SAAS3e,OAAwB,EAAf6vR,KAGvC,IAAIv4R,OAAY,EAChBA,EAAoC,cAAxBwjB,EAAM+8S,cAAgC,aAAe5tU,KAAK00B,SAAS3nB,EAAI,IAAO/M,KAAK00B,SAAU,EAAI,IAAM,GACnH10B,KAAKozU,cAAgB,KACrBpzU,KAAKqzU,cAAgBtnO,EAAO1/B,aACxB/oE,GAAMixC,EAAY,cAAgBtiC,EAClC5E,UAAaA,EACbimU,YAAa,QAAU/+R,EAAY,wBAA0BtiC,EAAQ,MAEzEjS,KAAKqzU,cAAc1xU,YAAY3B,KAAKmzU,mBAQ5ChE,EAAO9zU,UAAUy3U,oBAAsB,SAAU9xU,EAAS6vB,GACtD,IAAIi8S,EAAS9sU,KAAK8sU,OACd7rP,EAAY6rP,EAAO7rP,UACvB,GAAsB,cAAlBjhF,KAAKo6L,SAA0B,CAC/BvpK,EAAMkiT,eAAepxU,YAAY3B,KAAKqzU,eACvBrzU,KAAK2vB,SACP6H,UACmB,eAAxB3G,EAAM+8S,cACN/8S,EAAMkiT,eAAepxU,YAAY3B,KAAKqzU,eAGtCxiT,EAAMkiT,eAAepxU,YAAY3B,KAAKuzU,kBAG5B,YAAdvzU,KAAK0G,MAAoC,WAAd1G,KAAK0G,MAChCmqB,EAAMkiT,eAAepxU,YAAY3B,KAAKqzU,gBAG1CvG,EAAOt1S,UAAqC,cAAxB3G,EAAM+8S,eAAmC5tU,KAAK6sU,cAA8B,kBAAd7sU,KAAK0G,QAChE,YAAlB1G,KAAK4sU,UAA2B5sU,KAAK6sU,cAAyC,eAAxBh8S,EAAM+8S,gBACnD,YAAd5tU,KAAK0G,MAAoC,WAAd1G,KAAK0G,MAChCmqB,EAAMkiT,eAAepxU,YAAY3B,KAAKozU,eAEtCnyP,EAAUzpD,UACV3G,EAAM2iT,kBAAkB7xU,YAAY3B,KAAKyzU,cACzC5iT,EAAM2iT,kBAAkB7xU,YAAY3B,KAAKs2B,cAEzCzF,EAAM2iT,kBAAkB14S,iBACxBjK,EAAMkiT,eAAepxU,YAAYkvB,EAAM2iT,oBAQ/CrE,EAAO9zU,UAAU23U,iBAAmB,SAAUniT,EAAOnqB,EAAMipB,EAAUm9S,EAAQ7rP,GACrEjhF,KAAK22C,UAAUlX,QAAU5O,EAAM6iT,gBAC/B7iT,EAAMnqB,EAAO,gBAAgBitU,YAAY3zU,MACrC2vB,EAAS6H,SACT3G,EAAM+hT,eAAegB,oBAAoB5zU,MAEzC8sU,EAAOt1S,SACP3G,EAAMgjT,aAAaC,kBAAkB9zU,MAErCihF,EAAUzpD,SACV3G,EAAMgiT,gBAAgBkB,qBAAqB/zU,QAQvDmvU,EAAO9zU,UAAU24U,cAAgB,SAAUlgT,EAAO0C,GAE9C,OADAA,EAAQ1C,EAAMu0C,UAAY7xC,EACnB1C,EAAMwmN,QAAWt6O,KAAKiwU,mBAAmBryS,MAAQpH,EAASA,GAMrE24S,EAAO9zU,UAAU44U,eAAiB,SAAUngT,EAAOwQ,GAG/C,OAFAA,EAAOtuB,MAAQ8d,EAAMwmN,QAAWt6O,KAAKiwU,mBAAmB3rS,OAAOtuB,OAASsuB,EAAOtuB,MAASsuB,EAAOtuB,MAC/FsuB,EAAO9N,MAAQ1C,EAAMwmN,QAAWt6O,KAAKiwU,mBAAmB3rS,OAAO9N,OAAS8N,EAAO9N,MAAS8N,EAAO9N,MACxF8N,GAEXumD,IACI3jF,EAAS,KACVioU,EAAO9zU,UAAW,YAAQ,GAC7BwvF,IACI3jF,EAAS,KACVioU,EAAO9zU,UAAW,aAAS,GAC9BwvF,IACI3jF,EAAS,SACVioU,EAAO9zU,UAAW,gBAAY,GACjCwvF,IACI3jF,GAAS,IACVioU,EAAO9zU,UAAW,gBAAY,GACjCwvF,IACI3jF,EAAS,YACVioU,EAAO9zU,UAAW,qBAAiB,GACtCwvF,IACI3jF,EAAS,YACVioU,EAAO9zU,UAAW,qBAAiB,GACtCwvF,IACI3jF,GAAS,IACVioU,EAAO9zU,UAAW,0BAAsB,GAC3CwvF,IACI3jF,EAAS,KACVioU,EAAO9zU,UAAW,YAAQ,GAC7BwvF,IACI3jF,EAAS,OACVioU,EAAO9zU,UAAW,mBAAe,GACpCwvF,IACI3jF,GAAS,IACVioU,EAAO9zU,UAAW,8BAA0B,GAC/CwvF,IACI3jF,EAAS,KACVioU,EAAO9zU,UAAW,qBAAiB,GACtCwvF,IACI3jF,GAAS,IACVioU,EAAO9zU,UAAW,eAAW,GAChCwvF,IACI9iF,GAAUyuB,MAAO,cAAexgB,MAAO,GAAK4mT,KAC7CuS,EAAO9zU,UAAW,cAAU,GAC/BwvF,IACI3jF,EAAS,IACVioU,EAAO9zU,UAAW,eAAW,GAChCwvF,IACI3jF,EAAS,SACVioU,EAAO9zU,UAAW,YAAQ,GAC7BwvF,IACI9iF,EAAQ,KAAM+mU,KACfK,EAAO9zU,UAAW,gBAAY,GACjCwvF,IACI9iF,EAAQ,KAAMqmU,KACfe,EAAO9zU,UAAW,cAAU,GAC/BwvF,IACIxiF,KAAekmU,KAChBY,EAAO9zU,UAAW,kBAAc,GACnCwvF,IACI3jF,GAAS,IACVioU,EAAO9zU,UAAW,qBAAiB,GACtCwvF,IACI3jF,EAAS,eACVioU,EAAO9zU,UAAW,mBAAe,GACpCwvF,IACI3jF,EAAS,OACVioU,EAAO9zU,UAAW,sBAAkB,GACvCwvF,IACI3jF,EAAS,IACVioU,EAAO9zU,UAAW,iBAAa,GAClCwvF,IACI3jF,EAAS,IACVioU,EAAO9zU,UAAW,iBAAa,GAClCwvF,IACI3jF,EAAS,YACVioU,EAAO9zU,UAAW,kBAAc,GACnCwvF,IACI3jF,EAAS,KACVioU,EAAO9zU,UAAW,6BAAyB,GAC9CwvF,IACI9iF,EAAQ,KAAMm1T,KACfiS,EAAO9zU,UAAW,0BAAsB,GAC3CwvF,IACI3jF,GAAS,IACVioU,EAAO9zU,UAAW,gBAAY,GACjCwvF,IACI3jF,EAAS,WACVioU,EAAO9zU,UAAW,mBAAe,GACpCwvF,IACI3jF,EAAS,OACVioU,EAAO9zU,UAAW,mBAAe,GACpCwvF,IACI3jF,EAAS,IACVioU,EAAO9zU,UAAW,qBAAiB,GACtCwvF,IACI3jF,EAAS,YACVioU,EAAO9zU,UAAW,yBAAqB,GAC1CwvF,IACI3jF,EAAS,YACVioU,EAAO9zU,UAAW,wBAAoB,GACzCwvF,IACI3jF,KACDioU,EAAO9zU,UAAW,8BAA0B,GAC/CwvF,IACI3jF,KACDioU,EAAO9zU,UAAW,kBAAc,GACnCwvF,IACI9iF,GAAUyuB,MAAO,QAASxgB,MAAO,GAAK8vC,KACvCqpR,EAAO9zU,UAAW,iBAAa,GAClCwvF,IACI9iF,EAAQ,KAAMi1T,KACfmS,EAAO9zU,UAAW,oBAAgB,GAC9B8zU,GACTJ,IC5iCEmF,GAAsB,WAKtB,SAASA,EAAK3wQ,EAAY7H,GACtB17D,KAAKm0U,gBAAgB5wQ,EAAY7H,GA6BrC,OAtBAw4Q,EAAK74U,UAAU84U,gBAAkB,SAAU5wQ,EAAY7H,GACnD17D,KAAKwuJ,YAAcjrF,aAAsBC,GAAcD,EAAa,IAAIC,GAAYD,GACpFvjE,KAAK07D,MAAQA,aAAiB2H,GAAQ3H,EAAQ,IAAI2H,IAOtD6wQ,EAAK74U,UAAUq1U,cAAgB,WAE3B,OADY1wU,KAAK07D,MAAMr8D,SAS3B60U,EAAK74U,UAAUsxU,QAAU,SAAUjxQ,GAC/B,OAAO17D,KAAKwuJ,YAAYE,aAAahzF,IAElCw4Q,KCvCP5pP,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAkBxCypP,GAA+B,SAAUjpP,GAMzC,SAASipP,EAAcvjT,GACnB,IAAI9wB,EAAQorF,EAAO7pF,KAAKtB,KAAM6wB,IAAU7wB,KAGxC,OAFAD,EAAMrD,mBACNqD,EAAMw0C,UAAY1jB,EAAM7vB,QAAQsC,GACzBvD,EAoJX,OA7JAuqF,GAAU8pP,EAAejpP,GAczBipP,EAAc/4U,UAAUqB,iBAAmB,WACnCsD,KAAK6wB,MAAMm2D,cAGfhnF,KAAK6wB,MAAM+0D,GAAGp6E,GAAQ2+E,eAAgBnqF,KAAKq0U,iBAAkBr0U,MAC7DA,KAAK6wB,MAAM+0D,GAAGp6E,GAAQ4+E,cAAepqF,KAAK4pN,eAAgB5pN,QAY9Do0U,EAAc/4U,UAAUuuN,eAAiB,WACrC,IAAI/4L,EAAQ7wB,KAAK6wB,OACbA,EAAMe,SAAYf,EAAMyjT,UAAU70S,QAAWz/B,KAAK84D,WAAWjoC,IAC7D7wB,KAAKu0U,YAAW,IAMxBH,EAAc/4U,UAAUg5U,iBAAmB,WACvC,IAAIxjT,EAAQ7wB,KAAK6wB,MACXA,EAAMyjT,UAAU70S,SAAW5O,EAAMgB,QAAc,QAAQhB,EAAMe,UAAWf,EAAM2jT,WAAex0U,KAAK84D,WAAWjoC,IAC/G7wB,KAAKu0U,YAAW,IAGxBH,EAAc/4U,UAAUk5U,WAAa,SAAUhwU,GAC3C,IAAIxE,EAAQC,KACR6wB,EAAQ7wB,KAAK6wB,MACjB7wB,KAAKysU,iBACL,IAAIjwU,EACA+tI,EACAkqM,EACJ,GAAK5jT,EAAMgB,QAAQsxQ,QAAWtyQ,EAAMgB,QAAQ4N,OAWvC,CACD,IAAKhJ,GAAa5F,EAAMk8S,OAAQl8S,EAAMm8S,OAAQn8S,EAAM6jT,qBAAqB7P,gBACrE,OAAO,KAEX,GAAIh0S,EAAMgB,QAAQ4N,OAEd,IAAK,IADDk1S,EAAoC,eAAxB9jT,EAAM+8S,cAAiC5tU,KAAK2sU,UAAY,KAC/DvuU,EAAK,EAAGyE,EAAKguB,EAAMoQ,cAAe7iC,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC7D,IAAIw2U,EAAc/xU,EAAGzE,GAChBw2U,EAAYC,eAA0C,cAAzBD,EAAYx6I,WAGlB,cAAxBvpK,EAAM+8S,eAAiCgH,EAAYp9S,QACnDh7B,EAAOwD,KAAKkuU,YAAYr9S,EAAO+jT,GAEF,eAAxB/jT,EAAM+8S,eAAkCgH,EAAYp9S,SAA+B,OAApBm9S,EAAU7gT,QAC9Et3B,EAAO,IAAI8nU,GAAUsQ,EAAYj9S,OAAOg9S,EAAU7gT,MAAM7hB,OAAQ2iU,IAEhEp4U,IACAwD,KAAKysU,cAAcjoU,KAAKhI,GACxBA,EAAO,aA7BnBA,EAAOwD,KAAK2sU,UACZpiM,EAAWvqI,KAAK0sU,eAAe,GAC/B+H,EAAgBj4U,EAAKoiB,SAAgC,kBAArBpiB,EAAKoiB,OAAOlY,MAAiD,WAArBlK,EAAKoiB,OAAOlY,MAA8C,YAAzBlK,EAAKoiB,OAAOguT,UACzF,YAArBpwU,EAAKoiB,OAAOlY,OAAwBlK,EAAKoiB,OAAOiuT,cAAgBrwU,EAAKoiB,OAAOkuT,OAAOt1S,SAC1Fh7B,EAAK+nU,UAAYvkU,KAAKukU,UAClB/nU,EAAKs3B,OAAS2gT,KAAoBlqM,GAAaA,EAASz2G,QAAUt3B,EAAKs3B,OACtEy2G,GAAYA,EAASg6L,UAAY,GAAKh6L,EAASg6L,YAAcvkU,KAAKukU,YACnEvkU,KAAKysU,cAAcjoU,KAAKhI,GA2BhC,IAAIC,EAASuD,KAAK0sU,eAAejwU,OACjC,GAAIuD,KAAKysU,cAAchwU,OAAS,IACb,IAAXA,GAAiBA,EAAS,GAAKuD,KAAK0sU,eAAe,GAAG54S,QAAU9zB,KAAKysU,cAAc,GAAG34S,OAAQ,CAC1F9zB,KAAK0sU,eAAejwU,OAAS,GAC7BuD,KAAK80U,0BAeT,IAAK,IAbD71U,EAAU,SAAUo+G,IAChBA,IAAUA,EAAOvpF,OACfupF,EAAOz+F,OAAOiuT,cAAuC,kBAAvBxvN,EAAOz+F,OAAOlY,OAC9Cu1B,GAAUsxE,EAAOwnO,eACjBxnO,EAAO9kF,UAAW,EAClB40F,EAAOvpF,MAAMw6S,gBAAgB12S,IAAI,SAAUlK,EAAUzb,GAC7CorG,EAAOvpF,MAAMg5S,OAAOt1S,SACpBz3B,EAAMi1U,cAAc33N,EAAOz+F,OAAQy+F,EAAOvpF,MAAOpG,EAAUzb,OAKvEs7F,EAASvtG,KACJiE,EAAK,EAAGwG,EAAKzK,KAAKysU,cAAexoU,EAAKwG,EAAGhO,OAAQwH,IAAM,CAE5DhF,EADawL,EAAGxG,IAGpBjE,KAAK0sU,eAAiBhuU,KAAWsB,KAAKysU,cAAe,MAAM,GAG9D57S,EAAMgB,QAAQ4N,UAA0C,IAA9Bz/B,KAAKysU,cAAchwU,QAAgBuD,KAAKyoB,UAAclkB,GAAUvE,KAAKyoB,WAC/FgO,GAAa5F,EAAMk8S,OAAQl8S,EAAMm8S,OAAQn8S,EAAM6jT,qBAAqB7P,kBACrE7kU,KAAKyoB,UAAW,EAChBzoB,KAAK+0U,cAAgB50U,WAAW,WAC5BJ,EAAM+0U,2BACP,MAEP90U,KAAKysU,kBAET2H,EAAc/4U,UAAU25U,cAAgB,SAAUp2T,EAAQkV,EAAOpG,EAAUzb,GAgBvE,IAAK,IAfD66T,EAASh5S,EAAMg5S,OACfmI,EAAer2T,EAAOkuT,OACtBn/S,EAAQm/S,EAAOn/S,OAASsnT,EAAatnT,MACrC3sB,EAAU4d,EAAOw0T,eAAiBx0T,EAAOy0T,cACzC6B,EAAWl1U,KAAKu0C,UAAY,WAAa31B,EAAO3M,MAAQ,UAAY6hB,EAAM7hB,MAAQ,cACjFA,GAAgB,IACjB6a,EAAO,IAAIM,IAAM0/S,EAAO92T,OAASi/T,EAAaj/T,OAAS,GAAI82T,EAAO/2T,QAAUk/T,EAAal/T,QAAU,GACnGuuB,EAAUwoS,EAAOxoS,QAAU1lB,EAAO0lB,OAClCmwS,EAAiC,kBAAhB71T,EAAOlY,MAA4C,WAAhBkY,EAAOlY,MAAqC,YAAhBkY,EAAOlY,KACvFyuU,EAAe7wS,EAAO9N,OAA0B,gBAAjB8N,EAAO9N,MAA2B8N,EAAO9N,MACxEs2S,EAAOlvS,MAAQ9J,EAAMu0C,WAAaosQ,EAAgB3gT,EAAM0C,MAAQ5X,EAAOypD,UACvEqhF,EAAa1sH,GAAkBG,GAAeg4S,IAC9C1mP,EAAcq+O,EAAOxoS,OAASwoS,EAAOxoS,OAAOtuB,MAAQi/T,EAAa3wS,OAAOtuB,MACxE+Z,EAAenR,EAAOiS,MAAMwF,WAAWtG,cACvC,QAAU25H,EAAW9sH,EAAI,IAAM8sH,EAAW7sH,EAAI,IAAM6sH,EAAW5sH,EAAI,QAC9D3gC,EAAI,EAAGA,EAAI,EAAGA,IAAK,CACxB,IAAI6W,EAAU,IAAIojB,GAAW8+S,EAAW,IAAM/4U,EAAGA,EAAK2wU,EAAOlvS,MAAQ9J,EAAM0C,QAAUi+S,EAAgB71T,EAAOypD,SAAW,WAAc,cAAeomB,GAAetyF,EAAI,EAAI,GAAIA,EAAIg5U,EAAcplT,EAAe+8S,EAAOr/T,SAAWwnU,EAAaxnU,QAAU,KAAM,MAC3PwuF,EAASxuE,GAAWC,EAAUC,EAAOb,EAAMmoT,EAAan+I,SAAU9jL,EAAS,IAC/EipF,EAAOz4F,aAAa,QAAS,uBAC7By4F,EAAOz4F,aAAa,QAAS,iBAC7BxC,EAAQW,YAAYs6F,KAM5Bm4O,EAAc/4U,UAAUy5U,wBAA0B,WAE9C,IAAK,IADDlxU,EAAWpD,SAASkN,uBAAuB,iBACtCvR,EAAI,EAAG0F,EAAM+B,EAASnH,OAAQN,EAAI0F,EAAK1F,IAC5CoI,EAAOX,EAAS,IAEpB5D,KAAK0sU,mBAEF0H,GACT5H,ICjLEliP,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAmBxCyqP,GAAwB,SAAUjqP,GAMlC,SAASiqP,EAAOvkT,GACZ,IAAI9wB,EAAQorF,EAAO7pF,KAAKtB,KAAM6wB,IAAU7wB,KAExC,OADAD,EAAMrD,mBACCqD,EA4JX,OApKAuqF,GAAU8qP,EAAQjqP,GAelBiqP,EAAO/5U,UAAU0wG,OAAS,SAAUntF,GAChC,IAAI7e,EAAQC,KACZA,KAAKmB,cAAcyd,GAQnB,IAAK,IAPD3f,EAAU,SAAU60B,GAChBA,EAAM0D,SAAW1D,EAAMw6S,gBAAgB7xU,QACvCq3B,EAAMw6S,gBAAgB12S,IAAI,SAAUlK,EAAUzb,GAC1ClS,EAAMs1U,aAAaz2T,EAAQkV,EAAOpG,EAAUzb,MAI/C7T,EAAK,EAAGyE,EAAK+b,EAAO+Y,OAAQv5B,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAEvDa,EADY4D,EAAGzE,MAIvBg3U,EAAO/5U,UAAUg6U,aAAe,SAAUz2T,EAAQkV,EAAOpG,EAAUzb,GAC/D,IAOIijU,EACA3xC,EAGA3qQ,EAXAqkS,EAAcr+S,EAAO3M,MACrB66T,EAASluT,EAAOkuT,OAChBxoS,GACA9N,MAAOs2S,EAAOxoS,OAAO9N,MACrBxgB,MAAO82T,EAAOxoS,OAAOtuB,OAErBm/T,EAAcrI,EAAOxoS,OAAO9N,MAG5B8+S,EAA4B,kBAAhB12T,EAAOlY,KACnBk3B,EAAOkvS,EAAOlvS,OAAS03S,EAAYxhT,EAAMu0C,UAAYzpD,EAAOypD,SAAW,WAEvEh0D,EAAgBihU,EAChB96S,GAAa5b,EAAOy0T,cAAc9hU,WAAY,UAAYqN,EAAO3M,MAAQ,UAAY6hB,EAAM7hB,OACzF2M,EAAOw0T,cAqBb,GApBA9uS,EAAO9N,MAAQ2+S,GAAev2T,EAAOo1T,cAAclgT,EAAOlV,EAAOypD,UACjE6sQ,EAAWl1U,KAAKu0C,UAAY,WAAa0oR,EAAc,UAAYnpS,EAAM7hB,MAAQ,WAC5EA,GAAgB,IACrB2mB,GACIC,QAAQ,EAAOpB,KAAM6nS,GAAa1gT,OAAQA,EAAQkV,MAAOA,EACzD8J,KAAM9J,EAAMwmN,QAAW17N,EAAOqxT,mBAAmBryS,MAAQA,EAAQA,EACjE0G,QACI9N,MAAuB,kBAAhB5X,EAAOlY,KACRjJ,EAAkB03U,IAAgC,gBAAhBA,EAChC93S,GAAmBO,GAAO,IADuCu3S,EAEnE7wS,EAAO9N,MACbxgB,MAAOsuB,EAAOtuB,OAElBD,OAAQ+2T,EAAO/2T,OACfC,MAAO82T,EAAO92T,MACd2X,MAAOm/S,EAAOn/S,OAElBiL,EAAS0L,OAAS1lB,EAAOq1T,eAAengT,GAAS9d,MAAO4iB,EAAS0L,OAAOtuB,MAAOwgB,MAAOoC,EAAS0L,OAAO9N,QACtGx2B,KAAK6wB,MAAMrK,QAAQ84S,GAAa1mS,GAChC9E,EAAM0C,MAAQoC,EAASgF,KAClBhF,EAASC,OAyBVnL,EAAW,KACXoG,EAAMg5S,QACFt1S,SAAS,OA3BK,CAClB,IAAIxqB,OAAI,EAEJA,EADgB,cAAhB4R,EAAOlY,KACHuL,EAAQ6hB,EAAM4H,IAAM5H,EAAM2H,KAEzB65S,EACDxhT,EAAMgI,SAAS7pB,GAGf6hB,EAAM9mB,EAEdu2R,EAAc,IAAIntQ,GAAW8+S,EAAUt8S,EAASgF,KAAMhF,EAAS0L,OAAOtuB,MAAO4iB,EAAS0L,OAAO9N,MAAOs2S,EAAOr/T,QAAS,WAC9FtS,IAAlBkZ,GAAiD,OAAlBA,GAC/BA,EAAc1S,YAAY8rB,GAAWC,EAAUkL,EAASjL,MAAO,IAAIP,GAAKwL,EAAS5iB,MAAO4iB,EAAS7iB,QAAS+2T,EAAOh2I,SAAUysG,EAAazvQ,EAAM/mB,EAAEG,WAAa,IAAMF,EAAEE,aAEzK4mB,EAAMg5S,QACFxoS,OAAQ1L,EAAS0L,OACjB1G,KAAMhF,EAASgF,KACf7nB,OAAQ6iB,EAAS7iB,OACjByhB,SAAS,EACT7J,MAAOiL,EAASjL,MAChB3X,MAAO4iB,EAAS5iB,SAU5Bo/T,EAAO/5U,UAAU8F,cAAgB,SAAUyd,GACvC,IAAI22T,EAKAloU,EAJAy/T,EAASluT,EAAOkuT,OAEhBmG,EAAenG,EAAOxoS,OAAOtuB,MAAQ,EAAI,EACzC+1F,EAASntF,EAAOiS,MAAMhD,SAG1B,GADAxgB,EAA2C,cAA/BuR,EAAOiS,MAAM+8S,cAAgC,aAAehvT,EAAO8V,SAAS3nB,EAAI,IAAO6R,EAAO8V,SAAU,EAAI,IAAM,GAC1Ho4S,EAAOt1S,QAAS,CAChB,IAAIouQ,GAAgBknC,EAAO/2T,OAASk9T,GAAgB,EAChDC,GAAepG,EAAO92T,MAAQi9T,GAAgB,EAE9CsC,EAD+B,cAA/B32T,EAAOiS,MAAM+8S,cACI7hO,EAAO0N,aAAa,IAAIyqN,GAAWlkU,KAAKu0C,UAAY,wBAA0B31B,EAAO3M,MAAO,eAAiB+D,MAAO,EAAGwgB,MAAO,QAAU,GACrJzpB,GAAImmU,EAAalmU,GAAI44R,EACrB5vR,MAAO4I,EAAO8V,SAAS1e,MAAsB,EAAdk9T,EAC/Bn9T,OAAQ6I,EAAO8V,SAAS3e,OAAwB,EAAf6vR,KAIpB75L,EAAO2N,qBAAqB,IAAIyqN,GAAankU,KAAKu0C,UAAY,wBAA0B31B,EAAO3M,MAAO,eAAiB+D,MAAO,EAAGwgB,MAAO,QAAU,EAAG5X,EAAO8V,SAAS1e,MAAQ,EAAI4I,EAAO8V,SAAS3nB,EAAG6R,EAAO8V,SAAS3e,OAAS,EAAI6I,EAAO8V,SAAS1nB,EAAG4R,EAAOiS,MAAMjkB,OAASP,KAAKC,IAAIs5R,EAAcstC,KAEtTt0T,EAAOw0T,cAAgBrnO,EAAO1/B,aAC1B/oE,GAAMtD,KAAKu0C,UAAY,cAAgB31B,EAAO3M,MAC9C5E,UAAaA,EACbimU,YAAa,QAAUtzU,KAAKu0C,UAAY,wBAA0B31B,EAAO3M,MAAQ,MAErF2M,EAAOw0T,cAAczxU,YAAY4zU,KAGzCH,EAAO/5U,UAAUm6U,iBAAmB,SAAUtpR,EAAQttC,GAClD,IAAI7R,EAAIm/C,EAAOn/C,EACXC,EAAIk/C,EAAOl/C,EASf,OARI4R,EAAOiS,MAAMiG,qBACb9pB,GAAKk/C,EAAOn2C,OAAS,EACrBhJ,GAAK6R,EAAOhH,MAAMsc,WAAag4B,EAAOl2C,MAAQ,IAG9ChJ,GAAK4R,EAAOhH,MAAMsc,WAAa,EAAIg4B,EAAOn2C,OAC1ChJ,GAAKm/C,EAAOl2C,MAAQ,IAEfjJ,EAAGA,EAAGC,EAAGA,IAOtBooU,EAAO/5U,UAAUy4U,kBAAoB,SAAUl1T,GAC3C,KAAMA,EAAOiuT,cAAgC,YAAhBjuT,EAAOlY,MAAsC,WAAhBkY,EAAOlY,MAC7B,eAA/BkY,EAAOiS,MAAM+8S,gBAAuD,YAApBhvT,EAAOguT,UAA0BhuT,EAAOguT,SAASruU,QAAQ,WAAa,IAKvH,IAAK,IAJDk3U,EAAiB72T,EAAOw0T,cAAc7hU,WACtC1R,EAAQ+e,EAAO+3B,UAAU92C,MAAQ+e,EAAO+3B,UAAUzrC,SAClDqY,EAAI,EACJmyT,EAA4B,cAAhB92T,EAAOlY,KAAuB,EAAI,EACzCvK,EAAI,EAAGA,EAAIyiB,EAAO+Y,OAAOl7B,OAAQN,IACtC,GAAKyiB,EAAO+Y,OAAOx7B,GAAGmyU,gBAAgB7xU,QAAWg5U,EAAelyT,GAAhE,CAIA,GADA4U,GAAcs9S,EAAelyT,GAAI1jB,EAAO,IAAK+e,EAAQziB,EAAGyiB,EAAO+Y,OAAOx7B,GAAGmyU,gBAAgB,IAAI,GAC3E,IAAdoH,EAAiB,CACjB,IAAIC,EAAW31U,KAAKw1U,iBAAiB52T,EAAO+Y,OAAOx7B,GAAGwxU,QAAQ,GAAI/uT,GAClEuZ,GAAcs9S,EAAelyT,EAAI,GAAI1jB,EAAO,IAAK+e,EAAQziB,EAAGw5U,GAAU,GAE1EpyT,GAAKmyT,IAIVN,GACThB,ICzLE9pP,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAU5D+hD,GAA0B,SAAUwM,GAEpC,SAASxM,IACL,OAAkB,OAAXwM,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVAsqF,GAAU3L,EAAUwM,GAIpBN,IACI3jF,EAAS,IACVy3E,EAAStjF,UAAW,SAAK,GAC5BwvF,IACI3jF,EAAS,IACVy3E,EAAStjF,UAAW,SAAK,GACrBsjF,GACT3f,IAKE42Q,GAAgC,SAAUzqP,GAE1C,SAASyqP,IACL,OAAkB,OAAXzqP,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAqD/D,OAvDAsqF,GAAUsrP,EAAgBzqP,GAI1BN,IACI3jF,GAAS,IACV0uU,EAAev6U,UAAW,eAAW,GACxCwvF,IACI3jF,EAAS,OACV0uU,EAAev6U,UAAW,cAAU,GACvCwvF,IACI3jF,EAAS,OACV0uU,EAAev6U,UAAW,aAAS,GACtCwvF,IACI9iF,GAAUgF,EAAG,EAAGC,EAAG,GAAK2xE,KACzBi3P,EAAev6U,UAAW,gBAAY,GACzCwvF,IACI3jF,EAAS,SACV0uU,EAAev6U,UAAW,gBAAY,GACzCwvF,IACI3jF,EAAS,IACV0uU,EAAev6U,UAAW,eAAW,GACxCwvF,IACI3jF,EAAS,WACV0uU,EAAev6U,UAAW,iBAAa,GAC1CwvF,IACI9iF,EAAQotR,GAAMqnC,gBAAiBG,KAChCiZ,EAAev6U,UAAW,iBAAa,GAC1CwvF,IACI3jF,EAAS,KACV0uU,EAAev6U,UAAW,mBAAe,GAC5CwvF,IACI3jF,EAAS,KACV0uU,EAAev6U,UAAW,kBAAc,GAC3CwvF,IACI9iF,KAAY60T,KACbgZ,EAAev6U,UAAW,cAAU,GACvCwvF,IACI3jF,EAAS,IACV0uU,EAAev6U,UAAW,oBAAgB,GAC7CwvF,IACI3jF,EAAS,gBACV0uU,EAAev6U,UAAW,kBAAc,GAC3CwvF,IACI3jF,EAAS,IACV0uU,EAAev6U,UAAW,eAAW,GACxCwvF,IACI3jF,GAAS,IACV0uU,EAAev6U,UAAW,wBAAoB,GACjDwvF,IACI3jF,EAAS,OACV0uU,EAAev6U,UAAW,mBAAe,GAC5CwvF,IACI3jF,EAAS,IACV0uU,EAAev6U,UAAW,gBAAY,GAClCu6U,GACT52Q,IAME62Q,GAA4B,WAK5B,SAASA,EAAWhlT,GAChB7wB,KAAKi8R,SAAW,EAChBj8R,KAAK81U,YAAc,EACnB91U,KAAK+1U,eAAiB,EACtB/1U,KAAKg2U,oBACLh2U,KAAKi2U,WAAa,EAClBj2U,KAAKk2U,WAAY,EACjBl2U,KAAKo+B,SAAW,EAChBp+B,KAAKszP,YAAc,EACnBtzP,KAAK6wB,MAAQA,EACb7wB,KAAKm2U,OAAStlT,EAAMulT,eACpBp2U,KAAKq2U,SAAWxlT,EAAM7vB,QAAQsC,GAAK,gBACnCtD,KAAKs2U,eAA4C,UAA1BzlT,EAAM0O,gBAoUjC,OA7TAs2S,EAAWx6U,UAAUk7U,sBAAwB,SAAUljT,EAAMsC,GACzD,IAAIwgT,EAASn2U,KAAKm2U,OAClBn2U,KAAK6+D,YAAYs3Q,EAAOjiU,SAAUyhB,GAClC31B,KAAKw2U,aAAe,IAAItgT,GAAK7C,EAAKtmB,EAAGsmB,EAAKrmB,EAAG,EAAG,GAChDhN,KAAKs1B,WAAgC,SAAlBt1B,KAAKkU,UAAyC,UAAlBlU,KAAKkU,SAChDlU,KAAKs1B,YACLt1B,KAAKw2U,aAAazgU,OAASsoB,GAAe83S,EAAOpgU,OAAQ4f,EAAc5f,QAAUsd,EAAKrmB,EAAIhN,KAAK6wB,MAAM4L,OAAO/vB,OAAS2mB,EAAKtd,OAC1H/V,KAAKw2U,aAAaxgU,MAAQqoB,GAAe83S,EAAOngU,OAAS,MAAO2f,EAAc3f,SAG9EhW,KAAKw2U,aAAaxgU,MAAQqoB,GAAe83S,EAAOngU,MAAO2f,EAAc3f,QAAUqd,EAAKrd,MACpFhW,KAAKw2U,aAAazgU,OAASsoB,GAAe83S,EAAOpgU,QAAU,MAAO4f,EAAc5f,SAEpF/V,KAAKy2U,QAAQC,gBAAgB/gT,EAAe31B,KAAKw2U,aAAcL,GAC/Dn2U,KAAK22U,YAAY32U,KAAKkU,SAAUiiU,EAAO9mR,UAAWrvD,KAAKw2U,aAAcnjT,EAAMsC,IAK/EkgT,EAAWx6U,UAAUwjE,YAAc,SAAU3qD,EAAUyhB,GAC/C31B,KAAKs2U,eACLt2U,KAAKkU,SAAyB,SAAbA,EAAuBA,EAAW,UAGlC,SAAbA,IAAuBlU,KAAK6wB,MAAMoQ,eACI,WAArCjhC,KAAK6wB,MAAMoQ,cAAc,GAAGv6B,MAA0D,YAArC1G,KAAK6wB,MAAMoQ,cAAc,GAAGv6B,OAC9EwN,EAAW,OAEflU,KAAKkU,SAAyB,SAAbA,EAAuBA,EACnCyhB,EAAc3f,MAAQ2f,EAAc5f,OAAS,QAAU,WAMpE8/T,EAAWx6U,UAAUu7U,UAAY,SAAUhR,EAAeF,EAAgByQ,EAAQK,GAC9E5Q,EAAgBA,EAAgB4Q,EAAaxgU,MAAQ4vT,EAAgB4Q,EAAaxgU,MAClF0vT,EAAiBA,EAAiB8Q,EAAazgU,OAAS2vT,EAAiB8Q,EAAazgU,OACtFygU,EAAaxgU,MAASmgU,EAAOngU,MAAwBwgU,EAAaxgU,MAA7B4vT,EACrC4Q,EAAazgU,OAAUogU,EAAOpgU,OAA0BygU,EAAazgU,OAA9B2vT,EACvC1lU,KAAKi8R,SAAW5vR,KAAKC,IAAI,EAAGD,KAAKwmB,MAAM2jT,EAAazgU,OAASogU,EAAO/8Q,UAAYp5D,KAAK62U,cAAgBV,EAAO/8Q,YAKhHy8Q,EAAWx6U,UAAUs7U,YAAc,SAAUziU,EAAUm7C,EAAWmnR,EAAcnjT,EAAMsC,GAClF,IAAIyjC,EAAUp5D,KAAKm2U,OAAO7xS,OAAOtuB,MAC7B8gU,EAAeN,EAAazgU,OAASqjD,EACrC29Q,EAAcP,EAAaxgU,MAAQojD,EACnC61C,EAAejvG,KAAK6wB,MAAM4L,OAAO9vB,OACpB,WAAbuH,GACAsiU,EAAazpU,EAAI/M,KAAKg3U,YAAYR,EAAazpU,EAAG4oB,EAAc3f,MAAOwgU,EAAaxgU,MAAOq5C,GAC3FmnR,EAAaxpU,EAAIqmB,EAAKrmB,GAAKqmB,EAAKtd,OAAS+gU,GAAgB19Q,EACzDhmC,GAAkBC,EAAM,IAAIgxS,GAAU,EAAG,EAAG,EAAGyS,KAE7B,QAAb5iU,GACLsiU,EAAazpU,EAAI/M,KAAKg3U,YAAYR,EAAazpU,EAAG4oB,EAAc3f,MAAOwgU,EAAaxgU,MAAOq5C,GAC3FmnR,EAAaxpU,EAAIqmB,EAAKrmB,EAAIosD,EAC1BhmC,GAAkBC,EAAM,IAAIgxS,GAAU,EAAG,EAAGyS,EAAc,KAExC,UAAb5iU,GACLsiU,EAAazpU,EAAIsmB,EAAKtmB,GAAKsmB,EAAKrd,MAAQwgU,EAAaxgU,OACrDwgU,EAAaxpU,EAAIqmB,EAAKrmB,EAAIhN,KAAKg3U,YAAY,EAAGrhT,EAAc5f,QAAUsd,EAAKrmB,EAAIiiG,GAAeunO,EAAazgU,OAAQs5C,GACnHj8B,GAAkBC,EAAM,IAAIgxS,GAAU,EAAG0S,EAAa,EAAG,KAEvC,SAAb7iU,GACLsiU,EAAaxpU,EAAIqmB,EAAKrmB,EAAIhN,KAAKg3U,YAAY,EAAGrhT,EAAc5f,QAAUsd,EAAKrmB,EAAIiiG,GAAeunO,EAAazgU,OAAQs5C,GACnHj8B,GAAkBC,EAAM,IAAIgxS,GAAU0S,EAAa,EAAG,EAAG,MAGzDP,EAAazpU,EAAI/M,KAAKm2U,OAAOzoT,SAAS3gB,EACtCypU,EAAaxpU,EAAIhN,KAAKm2U,OAAOzoT,SAAS1gB,EACtComB,GAAkBC,EAAM,IAAIgxS,GAAU,EAAG,EAAG,EAAG,MAMvDwR,EAAWx6U,UAAU27U,YAAc,SAAUz5U,EAAOuvB,EAAMmqT,EAAY5nR,GAClE,OAAQA,GACJ,IAAK,MACD9xD,EAASuvB,EAAOmqT,EAAc15U,EAC9B,MACJ,IAAK,SACDA,GAAUuvB,EAAOmqT,GAAc,EAGvC,OAAO15U,GAOXs4U,EAAWx6U,UAAU67U,aAAe,SAAUrmT,EAAOslT,EAAQK,GACzD,IAAIW,EAAcn3U,KAAKo3U,wBAAwBp3U,KAAKq3U,mBAChDj+Q,EAAU+8Q,EAAO/8Q,QACrBp5D,KAAK62U,cAAgBxqU,KAAKC,IAAItM,KAAKq3U,kBAAkB,GAAG76S,SAASzmB,OAAQogU,EAAOl0P,aAChF,IAAIq1P,EAAczmT,EAAMhD,SAASw+C,aAAc/oE,GAAItD,KAAKq2U,SAAW,OAC/DkB,EAAuBv3U,KAAKw3U,qBAAqB3mT,EAAO2lT,EAAcc,EAAanB,EAAQn2U,KAAKq2U,UACpG,GAAIc,IAAgBn3U,KAAKq3U,kBAAkB56U,OAAQ,CAC/C,IAAIg7U,OAAoB,EACpBl6U,OAAQ,EACZA,EAAQ,IAAIq2B,GAAc4iT,EAAazpU,EAAIqsD,EAAW+8Q,EAAOn0P,WAAa,EAAIw0P,EAAaxpU,EAAIosD,EAAUp5D,KAAK62U,cAAgB,GAC9H,IAAI5yS,EAAc,IAAI1N,GAAW,GAAIh5B,EAAMwP,EAAGxP,EAAMyP,EAAG,SAEvDhN,KAAK03U,WAAa13U,KAAKs2U,eAAiBt2U,KAAK03U,WAAa,EAC1D,IAAIC,EAAcxB,EAAOyB,aAAex+Q,EAAU+8Q,EAAOn0P,WACrDljE,EAAQ,EACZ9e,KAAKg2U,oBACLh2U,KAAKq3U,kBAAkBF,GAAazpT,SAAWnwB,EAE/C,IAAK,IADDs6U,EAAiB73U,KAAKq3U,kBAAkBF,GACnC/4U,EAAK,EAAGyE,EAAK7C,KAAKq3U,kBAAmBj5U,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAChE,IAAI05U,EAAej1U,EAAGzE,GAClB05U,EAAa/rO,QAAgC,KAAtB+rO,EAAarrT,QACpCgrT,EAAoB5mT,EAAMhD,SAASw+C,aAC/B/oE,GAAItD,KAAKq2U,SAAWr2U,KAAKg2L,WAAW8hJ,EAAc,MAAOh5T,MAE3Ctb,aAAa,WAAY2yU,EAAOltN,SAAS/7G,YAC3DuqU,EAAkBj0U,aAAa,aAAc2yU,EAAOjkS,aAAe,6BAA+B4lS,EAAarrT,KAAO,WACtHzsB,KAAKy2U,QAAQsB,eAAeD,EAAcv6U,EAAOo6U,EAAaE,EAAgBrB,EAAc13T,EAAOq4T,GACnGn3U,KAAKg4U,aAAaF,EAAcL,EAAmB34T,GACnD9e,KAAK6iS,WAAWhyQ,EAAOinT,EAAcL,EAAmBxzS,EAAanlB,GACrE24T,EAAkBj0U,aAAa,QAAS,YAAgB2yU,EAAO8B,kBAA4C,SAAxBpnT,EAAMq8S,cAAqC,UAAT,SACrHqK,EAAqB51U,YAAY81U,GACjCI,EAAiBC,GAErBh5T,IAEA9e,KAAKk4U,UACLl4U,KAAKm4U,qBAAqBtnT,EAAO2lT,EAAcvyS,EAAaqzS,GAGpEzmT,EAAMS,UAAU3vB,YAAY21U,IAKhCzB,EAAWx6U,UAAU+7U,wBAA0B,SAAUgB,GAErD,IAAK,IADDt5T,EAAQ,EACH1gB,EAAK,EAAGi6U,EAAqBD,EAAkBh6U,EAAKi6U,EAAmB57U,OAAQ2B,IAAM,CAC1F,IAAI+3U,EAASkC,EAAmBj6U,GAChC,GAAI+3U,EAAOpqO,QAA0B,KAAhBoqO,EAAO1pT,KACxB,MAEJ3N,IAEJ,OAAOA,GAKX+2T,EAAWx6U,UAAUm8U,qBAAuB,SAAU3mT,EAAO2lT,EAAcc,EAAanB,EAAQ7yU,GAC5F,IAAI81D,EAAU+8Q,EAAO/8Q,QACjBpmD,EAAU,IAAIkxT,GAAW5gU,EAAK,WAAY6yU,EAAO1mT,WAAY0mT,EAAO7xS,OAAQ6xS,EAAO1oU,QAAS+oU,GAChGc,EAAY31U,YAAYkvB,EAAMhD,SAAS8V,cAAc3wB,IACrD,IAAIslU,EAAmBznT,EAAMhD,SAASw+C,aAAc/oE,GAAIA,EAAK,iBAC7Dg0U,EAAY31U,YAAY22U,GACxBt4U,KAAKu3U,qBAAuB1mT,EAAMhD,SAASw+C,aAAc/oE,GAAIA,EAAK,iBAClEg1U,EAAiB32U,YAAY3B,KAAKu3U,sBAClC,IAAIgB,EAAW1nT,EAAMhD,SAASgrF,gBAAiBv1G,GAAIA,EAAK,cAQxD,OAPA0P,EAAQhG,GAAKosD,EACbpmD,EAAQ1P,IAAM,iBACd0P,EAAQgD,OAAUhW,KAAKs2U,gBAAkBt2U,KAAKs1B,WAAct1B,KAAKo+B,SAAWg7B,EAAUo9Q,EAAaxgU,MACnGhW,KAAK00B,SAAW7D,EAAMhD,SAAS8V,cAAc3wB,GAC7CulU,EAAS52U,YAAY3B,KAAK00B,UAC1B7D,EAAMS,UAAU3vB,YAAY42U,GAC5BD,EAAiB90U,aAAa,QAAS,kBAAoB+0U,EAASj1U,GAAK,KAClEtD,KAAKu3U,sBAKhB1B,EAAWx6U,UAAU28U,aAAe,SAAUF,EAAc/kP,EAAO52F,GAC/D,IAAIq8U,EAAcV,EAAatgT,QAAUsgT,EAAal6S,KAAO,UACzDjQ,EAAgC,eAAvBmqT,EAAanqT,MAA0BmqT,EAAapxU,KAAOoxU,EAAanqT,MACrFA,EAAkB,YAAVA,EAAsBmqT,EAAaW,YAAc9qT,EACzD,IAAI+qT,EAAe,IAAItiT,GAAWp2B,KAAKq2U,SAAWr2U,KAAKg2L,WAAW8hJ,EAAc,UAAW37U,GAAIq8U,EAAa,EAAGA,EAAa,EAAG,GAAI,IACnIzlP,EAAMpxF,YAAY8rB,GAAWqqT,EAAapqT,SAAUC,EAAO,IAAIP,GAAKptB,KAAKm2U,OAAOn0P,WAAYhiF,KAAKm2U,OAAOl0P,aAAc,GAAIy2P,EAAc,6BAA+BZ,EAAarrT,KAAO,aAC7K,SAAVkB,GAAoBmqT,EAAaa,kBAAiD,UAA7Bb,EAAaW,aAC3C,aAAtBX,EAAapxU,MAA4D,eAArC1G,KAAK6wB,MAAMjS,OAAO,GAAGg6T,eAC1DF,EAAap1U,GAAKtD,KAAKq2U,SAAWr2U,KAAKg2L,WAAW8hJ,EAAc,iBAAkB37U,GAClFwxB,EAA8B,aAAtBmqT,EAAapxU,KAAsB,SAAWoxU,EAAaW,YACnEC,EAAa96S,KAA6B,aAAtBk6S,EAAapxU,KAAsB,UAAYgyU,EAAa96S,KAChFm1D,EAAMpxF,YAAY8rB,GAAWqqT,EAAapqT,SAAUC,EAAO,IAAIP,GAAKptB,KAAKm2U,OAAOn0P,WAAa,EAAGhiF,KAAKm2U,OAAOl0P,YAAc,GAAI,GAAIy2P,EAAc,6BAA+BZ,EAAarrT,KAAO,cAM3MopT,EAAWx6U,UAAUwnS,WAAa,SAAUhyQ,EAAOinT,EAAc/kP,EAAO9uD,EAAa9nC,GACjF,IAAIg6U,EAAStlT,EAAMulT,eAEnBnyS,EAAY3gC,GAAKtD,KAAKq2U,SAAWr2U,KAAKg2L,WAAW8hJ,EAAc,SAAU37U,GACzE,IAAI08U,EAAYf,EAAatgT,QAAU2+S,EAAO/xC,UAAU5tQ,OAAS3F,EAAMwF,WAAW7G,YAFhE,UAGlByU,EAAYxX,KAAOqrT,EAAarrT,KAChCwX,EAAYl3B,EAAI+qU,EAAapqT,SAAS3gB,EAAKopU,EAAOn0P,WAAa,EAAKm0P,EAAOyB,aAC3E3zS,EAAYj3B,EAAI8qU,EAAapqT,SAAS1gB,EAAIhN,KAAK62U,cAAgB,EACjDvgT,GAAY2N,EAAakyS,EAAO/xC,UAAWy0C,EAAW9lP,GAC5DvvF,aAAa,aAAc2yU,EAAOjkS,aAAe,6BAA+B4lS,EAAarrT,KAAO,YAKhHopT,EAAWx6U,UAAU88U,qBAAuB,SAAUtnT,EAAO6F,EAAQoiT,EAAYxB,GAC7E,IAAIyB,EAAcloT,EAAMhD,SAASw+C,aAAc/oE,GAAItD,KAAKq2U,SAAW,gBACnEiB,EAAY31U,YAAYo3U,GACxB,IACI5C,EAAStlT,EAAMulT,eAEfp2U,KAAKs2U,iBAAmBt2U,KAAKs1B,WAC7Bt1B,KAAK03U,WAAarrU,KAAKwmB,KAAK7yB,KAAK03U,WAAarrU,KAAKC,IAAI,EAAGtM,KAAKi8R,SAAW,IAG1Ej8R,KAAK03U,WAAarrU,KAAKwmB,KAAK7yB,KAAK03U,WAAa13U,KAAKi2U,YAEvD,IAAIyC,EAAe,IAAItiT,GAAWp2B,KAAKq2U,SAAW,UAAW,cAAe,EAT5D,UAS0E,EAAG,GAAI,IAC7F2C,EAAWh5U,KAAK+1U,eACpBgD,EAAYv1U,aAAa,QAAS,mBAElCxD,KAAKi5U,gBAAkBj5U,KAAKi8R,SAAW,IAAMj8R,KAAK62U,cAAgBV,EAAO/8Q,SACzEp5D,KAAK00B,SAASlxB,aAAa,SAAUxD,KAAKi5U,eAAe/rU,YACzD,IAAIH,EAAI2pB,EAAO3pB,EAAIisU,EAAW,EAC1BhsU,EAAI0pB,EAAO1pB,EAAIhN,KAAKi5U,gBAAmBviT,EAAO3gB,OAAS/V,KAAKi5U,gBAAkB,EAClFF,EAAYp3U,YAAY8rB,IAAa1gB,EAAGA,EAAGC,EAAGA,GAAK,YAAa,IAAIogB,GAAK4rT,EAAUA,GAAW,GAAIN,EAAc,cAEhHI,EAAW/rU,EAAIA,EAAKisU,EAAW,EAjBjB,EAkBd,IAAIlsT,EAAON,GAAYxsB,KAAK03U,WAAa,IAAM13U,KAAK03U,WAAYvB,EAAO/xC,WACvE00C,EAAW9rU,EAAIA,EAAK8f,EAAK/W,OAAS,EAClC+iU,EAAWx1U,GAAKtD,KAAKq2U,SAAW,cAChCyC,EAAWrsT,KAAO,KAAOzsB,KAAK03U,WAC9B,IAAIwB,EAAkB5iT,GAAYwiT,EAAY3C,EAAO/xC,UAAW+xC,EAAO/xC,UAAU5tQ,MAAOuiT,GAExFhsU,EAAK+rU,EAAW/rU,EAxBF,EAwBiBisU,EAAW,EAAKlsT,EAAK9W,MACpD0iU,EAAap1U,GAAKtD,KAAKq2U,SAAW,YAClC0C,EAAYp3U,YAAY8rB,IAAa1gB,EAAGA,EAAGC,EAAGA,GAAK,aAAc,IAAIogB,GAAK4rT,EAAUA,GAAW,GAAIN,EAAc,eAEjHK,EAAYv1U,aAAa,YAAa,cAAgBkzB,EAAO1gB,OAAS,GAAKgjU,EA5B7D,GAAA,EA6BAlsT,EAAK9W,QAAU,QAC7BhW,KAAKm5U,cAAcD,EAAiBl5U,KAAKszP,YAAc,EAAGtzP,KAAKszP,cAKnEuiF,EAAWx6U,UAAU89U,cAAgB,SAAUC,EAAYnpL,EAAMopL,GAC7D,IAAIvsT,EAAQ9sB,KAAmB,eAAIiwJ,EAC/BthE,EAAY,gBAAkB7hE,EAAO,IACzC,IAAK9sB,KAAKs2U,gBAAkBt2U,KAAKs1B,WAAY,CACjBt1B,KAAKi2U,WAG7BtnP,EAAY,eADZ7hE,GADAA,EAAO9sB,KAAKg2U,iBAAiB/lL,EAAOjwJ,KAAKi2U,YAAcj2U,KAAKw2U,aAAazpU,GAC3D,EAAI,EAAI+f,GACa,MAEvC9sB,KAAKu3U,qBAAqB/zU,aAAa,YAAamrF,GACpDyqP,EAAWv9T,YAAc,EAAe,IAAM7b,KAAK03U,WACnD13U,KAAKszP,YAAc+lF,GAKvBxD,EAAWx6U,UAAUi+U,WAAa,SAAUh9U,EAAOouM,GAC/C,IAAI6uI,EAAW/4U,SAASosB,eAAe5sB,KAAKq2U,SAAW,eACnDpmL,EAAOl7H,SAASwkT,EAAS19T,YAAY3e,MAAM,KAAK,GAAI,IACpDwtM,GAAUz6C,EAAO,EACjBjwJ,KAAKm5U,cAAcI,EAAWtpL,EAAO,EAAKA,EAAO,IAE3Cy6C,GAAUz6C,EAAOjwJ,KAAK03U,YAC5B13U,KAAKm5U,cAAcI,EAAUtpL,EAAOA,EAAO,IAOnD4lL,EAAWx6U,UAAU26L,WAAa,SAAUjgG,EAAQ5sF,EAAQ2V,GACxD,OAAI9e,KAAKs2U,eACEntU,EAAS2V,EAGT3V,EAAS4sF,EAAO39D,YAQ/By9S,EAAWx6U,UAAUguF,KAAO,SAAU/sF,GAClC,IAAIyD,EAAQC,KACR+M,EAAI/M,KAAK6wB,MAAMk8S,OACf//T,EAAIhN,KAAK6wB,MAAMm8S,OACnB,GAAI1wU,EAAM6K,OAAO0U,YAAYtd,QAAQ,QAAU,EAAG,CAC9C,IAAIioC,EAAWlqC,EAAM6K,OAAO7D,GAAGpG,MAAM8C,KAAKq2U,SAAW,UACrD,GAAwB,IAApB7vS,EAAS/pC,OAAc,CACvB,IAAIwV,EAAQ8iB,SAASyR,EAAS,GAAI,IAC9BxlC,EAAUhB,KAAK6wB,MAAM7vB,QACpBghD,MAAM/vC,KACHjS,KAAK6wB,MAAMe,SACXpE,GAAcxtB,KAAK6wB,MAAM7vB,QAAQsC,GAAK,uBAEtCtD,KAAKs2U,eACL5kT,GAAY1xB,KAAK6wB,MAAMjS,OAAO3M,GAAOwlB,KAAM1qB,EAAGC,EAAGhM,EAAQ4D,YAAa5D,EAAQsC,GAAK,sBAAuBiqB,GAAWvtB,KAAK6wB,MAAM7vB,QAAQsC,GAAK,uBAG7IouB,GAAY1xB,KAAK6wB,MAAMoQ,cAAc,GAAGtJ,OAAO1lB,GAAOlF,EAAEG,WAAYH,EAAI,GAAIC,EAAI,GAAIhM,EAAQ4D,YAAa5D,EAAQsC,GAAK,sBAAuBiqB,GAAWvtB,KAAK6wB,MAAM7vB,QAAQsC,GAAK,8BAM5LkqB,GAAcxtB,KAAK6wB,MAAM7vB,QAAQsC,GAAK,uBAEtCtD,KAAK6wB,MAAMe,UACX1xB,aAAaF,KAAKw5U,cAClBx5U,KAAKw5U,aAAer5U,WAAW,WAAcqtB,GAAcztB,EAAM8wB,MAAM7vB,QAAQsC,GAAK,wBAA2B,OAGhHuyU,KAOP4D,GAA+B,WAa/B,OAZA,SAAuBhtT,EAAMmR,EAAMjQ,EAAO6J,EAAS9wB,EAAM+xU,EAAaE,EAAkBvgT,EAAY6kS,GAChGj9T,KAAK0tB,UAAa3gB,EAAG,EAAGC,EAAG,GAC3BhN,KAAKysB,KAAOA,EACZzsB,KAAK49B,KAAOA,EACZ59B,KAAK2tB,MAAQA,EACb3tB,KAAKw3B,QAAUA,EACfx3B,KAAK0G,KAAOA,EACZ1G,KAAK24U,iBAAmBA,EACxB34U,KAAKy4U,YAAcA,EACnBz4U,KAAKo4B,WAAaA,EAClBp4B,KAAKi9T,YAAcA,MC/cvB3yO,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAU5D88S,GAAoC,SAAUvuP,GAE9C,SAASuuP,IACL,IAAI35U,EAAmB,OAAXorF,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAGhE,OADAD,EAAM20B,SAAW,IAAIwB,GAAK,EAAG,EAAG,EAAG,GAC5Bn2B,EAyEX,OA9EAuqF,GAAUovP,EAAoBvuP,GAQ9BuuP,EAAmBr+U,UAAUmzU,cAAgB,SAAU5vT,EAAQiS,GACvDjS,IACA5e,KAAKguU,MAAQpvT,EAAOovT,MACpBhuU,KAAKkwU,MAAQtxT,EAAOsxT,MACpBlwU,KAAK23B,OAAS/Y,EAAO+Y,QAGzB9G,EADWkG,GAAiB/2B,KAAK0G,MACpB,mBAAmBgoU,eAAe1uU,KAAM6wB,GACrDA,EAAM89S,oBAAsB3uU,KAAK25U,aAAal9U,QAElDouF,IACI3jF,EAAS,QACVwyU,EAAmBr+U,UAAW,YAAQ,GACzCwvF,IACI3jF,EAAS,KACVwyU,EAAmBr+U,UAAW,cAAU,GAC3CwvF,IACI3jF,EAAS,KACVwyU,EAAmBr+U,UAAW,eAAW,GAC5CwvF,IACI3jF,EAAS,IACVwyU,EAAmBr+U,UAAW,eAAW,GAC5CwvF,IACI3jF,EAAS,KACVwyU,EAAmBr+U,UAAW,kBAAc,GAC/CwvF,IACI3jF,EAAS,KACVwyU,EAAmBr+U,UAAW,gBAAY,GAC7CwvF,IACI3jF,EAAS,IACVwyU,EAAmBr+U,UAAW,yBAAqB,GACtDwvF,IACI3jF,EAAS,UACVwyU,EAAmBr+U,UAAW,aAAS,GAC1CwvF,IACI3jF,EAAS,KACVwyU,EAAmBr+U,UAAW,kBAAc,GAC/CwvF,IACI3jF,EAAS,KACVwyU,EAAmBr+U,UAAW,kBAAc,GAC/CwvF,IACI3jF,GAAS,IACVwyU,EAAmBr+U,UAAW,iBAAa,GAC9CwvF,IACI9iF,GAAUyuB,MAAO,UAAWxgB,MAAO,GAAK8vC,KACzC4zR,EAAmBr+U,UAAW,gBAAY,GAC7CwvF,IACI3jF,EAAS,SACVwyU,EAAmBr+U,UAAW,gBAAY,GAC7CwvF,IACI3jF,EAAS,YACVwyU,EAAmBr+U,UAAW,yBAAqB,GACtDwvF,IACI3jF,EAAS,YACVwyU,EAAmBr+U,UAAW,yBAAqB,GACtDwvF,IACI3jF,EAAS,2BACVwyU,EAAmBr+U,UAAW,iBAAa,GAC9CwvF,IACI9iF,GAAUyuB,MAAO,UAAWxgB,MAAO,GAAK8vC,KACzC4zR,EAAmBr+U,UAAW,iBAAa,GAC9CwvF,IACI9iF,GAAUyuB,MAAO,UAAWxgB,MAAO,GAAK8vC,KACzC4zR,EAAmBr+U,UAAW,iBAAa,GAC9CwvF,IACI9iF,GAAUyuB,MAAO,UAAWxgB,MAAO,GAAK8vC,KACzC4zR,EAAmBr+U,UAAW,kBAAc,GAC/CwvF,IACI3jF,EAAS,KACVwyU,EAAmBr+U,UAAW,kBAAc,GACxCq+U,GACT3K,ICpGE6K,GAA6B,WAK7B,SAASA,EAAYjnU,GACjB3S,KAAK2S,QAAUA,EAqJnB,OA/IAinU,EAAYv+U,UAAU0F,MAAQ,SAAU6C,GACpC5D,KAAKiB,YAAcpF,OAAO6F,KAAK,GAAI,QAAS,UAAY7F,OAAOonH,YAAc,UAAYpnH,OAAOmnH,WAAa,cAC7GhjH,KAAKiB,YAAY0sF,OAAO,EAAG,GAC3B3tF,KAAKiB,YAAY44U,SAASC,OAAOC,WAAYD,OAAOE,aACpD,IAAIphT,GACAC,QAAQ,EAAO27B,YAAax0D,KAAKi6U,eAAer2U,GAAW6zB,KXyB9C,eWvBjBz3B,KAAK2S,QAAQ6T,QXuBI,cWvBiBoS,GAC7BA,EAASC,QACV53B,EAAY23B,EAAS47B,YAAax0D,KAAKiB,cAQ/C24U,EAAYv+U,UAAU4+U,eAAiB,SAAUr2U,GAC7C,IAAI1C,EAAMC,EAAc,OAiBxB,OAhBIyC,EACIA,aAAoBpF,MACpBoF,EAASxE,QAAQ,SAAUpC,GACvBkE,EAAIS,YAAY4rB,GAAWvwB,GAAO4E,WAAU,MAG3CgC,aAAoB0lH,QACzBpoH,EAAIS,YAAYiC,EAAShC,WAAU,IAGnCV,EAAIS,YAAY4rB,GAAW3pB,GAAUhC,WAAU,IAInDV,EAAIS,YAAY3B,KAAK2S,QAAQ3R,QAAQY,WAAU,IAE5CV,GAOX04U,EAAYv+U,UAAU6+U,OAAS,SAAUxzU,EAAMqqN,EAAU33L,EAAa+gT,EAAUnkU,EAAOD,GACnF,IAAIhW,EAAQC,KACRo6U,EAAep6U,KAAKq6U,iBAAiBF,GACzCnkU,EAAQA,GAAgBokU,EAAapkU,MACrCD,EAASA,GAAkBqkU,EAAarkU,OACxC,IAAI/U,EAAUG,EAAc,UACxBmC,GAAI,aACJG,OACIuS,MAASA,EAAM9I,WACf6I,OAAUA,EAAO7I,cAGrBotU,IAAe9uU,GAAQy9E,UAAU/7E,WAAW3O,QAAQ,mBAAqB,GAC7E66B,EAAc37B,EAAkB27B,GAAe0sN,GAAmBqG,UAAY/yN,EAC9E,IAAImhT,EAAU,sFACVH,EAAat9T,IAAIhb,UACjB,SACA8rB,EAAM/xB,OAAO81N,IAAIC,gBAAgB,IAAIT,KAAc,QAATzqN,GAAkB6zU,KAC3D,IAAKC,eAAiBC,kBAAkBL,EAAat9T,OAASpW,KAAM,mBACzE,GAAa,QAATA,EACA1G,KAAK06U,gBAAgB3pH,EAAUrqN,EAAMknB,EAAK0sT,OAEzC,CACD,IAAIK,EAAU,IAAI/qP,MACdgrP,EAAQ55U,EAAQksF,WAAW,MAC/BytP,EAAQv3P,kBAGJ,GAFAw3P,EAAMlrP,UAAUirP,EAAS,EAAG,GAC5B9+U,OAAO81N,IAAIE,gBAAgBjkM,GACd,QAATlnB,EAAgB,CAChB,IAAI46Q,EAAa,IAAIr8B,GACjB41F,EAAc75U,EAAQ+sF,UAAU,cAAcx+E,QAAQ,aAAc,sBACxE+xQ,EAAW/vN,aAAan4B,YAAcA,EACtCyhT,EAAcA,EAAYx5U,MAAMw5U,EAAYt8U,QAAQ,KAAO,GAC3D+iR,EAAWp2C,MAAM9mO,MAAM2tP,SAASriK,UAAU,IAAImoK,GAAUgjF,GAAc,EAAG,EAAG7kU,EAAOD,GAC/EukU,IACAh5D,EAAW7zL,KAAKsjI,EAAW,QAC3BuwD,EAAWhvQ,gBAIXzW,OAAOstF,UAAU2xP,iBACjBj/U,OAAOstF,UAAU2xP,iBAAiB95U,EAAQ+5U,WAAYhqH,EAAW,IAAMrqN,EAAK60D,qBAG5Ex7D,EAAM26U,gBAAgB3pH,EAAUrqN,EAAM1F,EAAQ+sF,UAAU,aAAax+E,QAAQ,YAAa,sBAAuB+qU,IAI7HK,EAAQr7U,IAAMsuB,IAStBgsT,EAAYv+U,UAAUq/U,gBAAkB,SAAU3pH,EAAUrqN,EAAMknB,EAAK0sT,GACnEn5U,EAAc,KACVsC,OACIguN,SAAYV,EAAW,IAAMrqN,EAAK60D,oBAClC7sC,KAAQd,KAEbja,cAAc,IAAIosM,WAAWu6H,EAAa,QAAU,QACnDh/I,KAAMz/L,OACNm/U,SAAS,EACTC,YAAY,MAQpBrB,EAAYv+U,UAAUg/U,iBAAmB,SAAUF,GAC/C,IAAInkU,EAAQ,EACRD,EAAS,EACTqkB,EAAU,GACV9I,EAAY,IAAIxD,GAAY,IAAIkS,WAChC18B,GAAI,qBACJ0S,MAAO,IAAKD,OAAQ,MAexB,OAbAokU,EAASviT,IAAI,SAAUjlB,GACnB,IAAImK,EAAMnK,EAAQ2e,UAAU1vB,WAAU,GAClCs5U,EAAWvoU,EAAQkb,SAASw+C,aAC5B3nE,MAAO,yBAA2BqR,EAAS,QAE/CmlU,EAASv5U,YAAYmb,GACrB9G,EAAQ3J,KAAKC,IAAIqG,EAAQgjB,cAAc3f,MAAOA,GAC9CD,GAAUpD,EAAQgjB,cAAc5f,OAChCqkB,GAAWznB,EAAQ2e,UAAUxvB,UAC7BwvB,EAAU3vB,YAAYu5U,KAE1B5pT,EAAU9tB,aAAa,QAASwS,EAAQ,IACxCsb,EAAU9tB,aAAa,SAAUuS,EAAS,KAEtCC,MAASA,EACTD,OAAUA,EACV+G,IAAOwU,IAGRsoT,KC/JPtvP,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GA6B5Du+S,GAAmC,SAAUhwP,GAE7C,SAASgwP,IACL,OAAkB,OAAXhwP,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbAsqF,GAAU6wP,EAAmBhwP,GAI7BN,IACI3jF,GAAS,IACVi0U,EAAkB9/U,UAAW,cAAU,GAC1CwvF,IACI9iF,GAAUyuB,MAAO,KAAMxgB,MAAO,GAAK4mT,KACpCue,EAAkB9/U,UAAW,YAAQ,GACxCwvF,IACI3jF,EAAS,SACVi0U,EAAkB9/U,UAAW,gBAAY,GACrC8/U,GACTn8Q,IAKEo8Q,GAA8B,SAAUjwP,GAExC,SAASiwP,IACL,OAAkB,OAAXjwP,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KA0B/D,OA5BAsqF,GAAU8wP,EAAcjwP,GAIxBN,IACI3jF,GAAS,IACVk0U,EAAa//U,UAAW,8BAA0B,GACrDwvF,IACI3jF,GAAS,IACVk0U,EAAa//U,UAAW,0BAAsB,GACjDwvF,IACI3jF,GAAS,IACVk0U,EAAa//U,UAAW,+BAA2B,GACtDwvF,IACI3jF,GAAS,IACVk0U,EAAa//U,UAAW,6BAAyB,GACpDwvF,IACI3jF,EAAS,OACVk0U,EAAa//U,UAAW,YAAQ,GACnCwvF,IACI3jF,GAAU,OAAQ,SAAU,UAAW,MAAO,WAC/Ck0U,EAAa//U,UAAW,oBAAgB,GAC3CwvF,IACI3jF,GAAS,IACVk0U,EAAa//U,UAAW,iBAAa,GACxCwvF,IACI3jF,GAAS,IACVk0U,EAAa//U,UAAW,uBAAmB,GACvC+/U,GACTp8Q,IAYEq8Q,GAAuB,SAAUlwP,GAMjC,SAASkwP,EAAMroU,EAAShS,GACpB,IAAIjB,EAAQorF,EAAO7pF,KAAKtB,KAAMgT,EAAShS,IAAYhB,KAInD,OAFAD,EAAM6tU,cAAgB,YACtB7tU,EAAMu7U,QAAU,MACTv7U,EA4gDX,OAthDAuqF,GAAU+wP,EAAOlwP,GAejBkwP,EAAMhgV,UAAUoX,UAAY,WACxBzS,KAAKw+G,eACLx+G,KAAKoiS,sBACLpiS,KAAK2N,aACL3N,KAAKukB,cAET82T,EAAMhgV,UAAU+mS,oBAAsB,WAWlC,GAVApiS,KAAK0zU,eAAgB,EACrB1zU,KAAKqxB,aAAc,EACnBrxB,KAAKgnU,kBACLhnU,KAAK6mU,gBACL7mU,KAAKslU,cACLtlU,KAAKu7U,kBAAkBv7U,KAAKu4R,MAC5Bv4R,KAAKu7U,kBAAkBv7U,KAAK+9D,SACxB/9D,KAAKw7U,gBACLx7U,KAAKw7U,cAAc9O,mBAEC,KAApB1sU,KAAKgB,QAAQsC,GAAW,CACxB,IAAI6jC,EAAa3mC,SAASkN,uBAAuB,WAAWjR,OAC5DuD,KAAKgB,QAAQsC,GAAK,SAAWtD,KAAKs7U,QAAU,IAAMn0S,IAM1Dk0S,EAAMhgV,UAAU0wG,OAAS,WACrB/rG,KAAKwmB,QZ7IK,QY6IWqK,MAAO7wB,OAC5BA,KAAKy7U,iBACLz7U,KAAK0b,WACL1b,KAAK6zU,aAAe,IAAIuB,GAAOp1U,MAC/BA,KAAK07U,oBACL17U,KAAK27U,yBACL37U,KAAK47U,0BACL57U,KAAK67U,iBACL77U,KAAK87U,uBACL97U,KAAK++E,eAOTs8P,EAAMhgV,UAAU0gV,kBAAoB,SAAU1+U,GAC1C,OAAO2C,KAAKg4G,aAAajkC,YAAY12E,IAMzCg+U,EAAMhgV,UAAU21U,aAAe,WACvBhxU,KAAKg8U,cAAgBh8U,KAAKo2U,eAAe5+S,SACzCx3B,KAAKg8U,aAAaC,iBAAiBj8U,KAAKihC,cAAejhC,MAI3D,IAAK,IADD4e,EADAs9T,GAAsB,EAEjB//U,EAAI,EAAG0F,EAAM7B,KAAKihC,cAAcxkC,OAAQN,EAAI0F,EAAK1F,KACtDyiB,EAAS5e,KAAKihC,cAAc9kC,IACrB+X,SAAW0K,EAAOu9T,eAAYhhV,GACM,IAArCyjB,EAAOlY,KAAKnI,QAAQ,eAAiE,IAAzCqgB,EAAOguT,SAASruU,QAAQ,aAC5C,eAAvByB,KAAK4tU,gBAAqCsO,IAC7Ct9T,EAAOgzT,sBAAsBhzT,EAAOlY,KAAKnI,QAAQ,QAAU,EAAGyB,MAC9Dk8U,GAAsB,GAG9Bl8U,KAAKutR,kBACLvtR,KAAKo8U,kBAETf,EAAMhgV,UAAU+gV,eAAiB,WAC7Bp8U,KAAKq8U,eACLr8U,KAAKs8U,cACLt8U,KAAKu8U,mBACL,IAAIrU,EAAcloU,KAAKgoU,aACvBhoU,KAAKw8U,qBAAqBtU,GAC1BloU,KAAKk3U,eACLl3U,KAAKy8U,eACLz8U,KAAK08U,mBACL18U,KAAK28U,8BACL38U,KAAK48U,oBAKTvB,EAAMhgV,UAAU2sU,WAAa,WACzBhoU,KAAK68U,cAAgB78U,KAAK6tB,SAASw+C,aAAc/oE,GAAItD,KAAKgB,QAAQsC,GAAK,oBACvE,IAAI4kU,EAOJ,OANIloU,KAAKu4R,KAAK97R,OAAS,GAAKuD,KAAK+9D,QAAQthE,OAAS,IAC9CyrU,EAAcloU,KAAK00U,qBAAqB1M,cAExChoU,KAAK88U,iBACL98U,KAAK88U,gBAAgBC,gBAAgB/8U,KAAM,SAAUA,KAAK2mU,iBAEvDuB,GAKXmT,EAAMhgV,UAAU67U,aAAe,WACvBl3U,KAAKg8U,cAAgBh8U,KAAKg8U,aAAa3E,kBAAkB56U,QACzDuD,KAAKg8U,aAAa9E,aAAal3U,KAAMA,KAAKo2U,eAAgBp2U,KAAKg8U,aAAaxF,cAEhFx2U,KAAKgB,QAAQW,YAAY3B,KAAKsxB,YAKlC+pT,EAAMhgV,UAAUshV,4BAA8B,WAC1C,IAAI37U,EAAUusB,GAAWvtB,KAAKgB,QAAQsC,GAAK,sBAC3C,GAAKtC,EAAL,CAGA,IAAIqyB,EAAOrzB,KAAKgB,QAAQ4K,wBACpB27D,EAAUh6C,GAAWvtB,KAAKgB,QAAQsC,GAAK,QAAQsI,wBACnD5K,EAAQ0D,MAAM8H,KAAOH,KAAKC,IAAIi7D,EAAQ/6D,KAAO6mB,EAAK7mB,KAAM,GAAK,KAC7DxL,EAAQ0D,MAAMgI,IAAML,KAAKC,IAAIi7D,EAAQ76D,IAAM2mB,EAAK3mB,IAAK,GAAK,OAE9D2uU,EAAMhgV,UAAU2hV,yBAA2B,WACvCh9U,KAAKi9U,wBACLj9U,KAAK+yU,eAAiB/yU,KAAK6tB,SAASw+C,aAAc/oE,GAAItD,KAAKgB,QAAQsC,GAAK,qBACpEtD,KAAKk9U,WAAWzgV,SAChBuD,KAAKm9U,kBAAoBn9U,KAAK6tB,SAASw+C,aAAc/oE,GAAItD,KAAKgB,QAAQsC,GAAK,yBAE3EtD,KAAKo9U,kBACLp9U,KAAKq9U,kBAAoBr9U,KAAK6tB,SAASw+C,aAAc/oE,GAAItD,KAAKgB,QAAQsC,GAAK,yBAE/EtD,KAAKwzU,kBAAoBxzU,KAAK6tB,SAASw+C,aAAc/oE,GAAItD,KAAKgB,QAAQsC,GAAK,yBAE/E+3U,EAAMhgV,UAAU+hV,cAAgB,WAE5B,IAAK,IADDE,EACKl/U,EAAK,EAAGyE,EAAK7C,KAAK4e,OAAQxgB,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAGrD,GADAk/U,IADaz6U,EAAGzE,GACK2yU,WAAWt0U,OAE5B,MAGR,OAAO6gV,GAEXjC,EAAMhgV,UAAUmhV,qBAAuB,SAAUtU,GAE7CloU,KAAKg9U,2BACL,IAAIt5C,EAAaljS,SAASW,cAAc,OACxCuiS,EAAWpgS,GAAKtD,KAAKgB,QAAQsC,GAAK,qBAClCogS,EAAWlgS,aAAa,QAAS,sBACjCxD,KAAKgB,QAAQW,YAAY+hS,GAErB1jS,KAAK6xB,QAAQ4N,QACbz/B,KAAKsxB,UAAU3vB,YAAY3B,KAAK6tB,SAASw+C,aAAc/oE,GAAItD,KAAKgB,QAAQsC,GAAK,mBAAoBoB,MAAO,0BAExG1E,KAAKu4R,KAAK97R,OAAS,GAAKuD,KAAK+9D,QAAQthE,OAAS,IAC9CuD,KAAKu9U,sBACLv9U,KAAKw9U,sBACLx9U,KAAK0yU,eACL1yU,KAAKy9U,0BAA0BvV,KAGvCmT,EAAMhgV,UAAUq3U,aAAe,WAC3B,IAAK,IAAIt0U,EAAK,EAAGyE,EAAK7C,KAAKihC,cAAe7iC,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC5D,IAAIyf,EAAOhb,EAAGzE,GACVyf,EAAK2Z,UACLX,GAAahZ,GACbA,EAAK60T,aAAa1yU,KAAM6d,EAAK5L,QAGrC,IAAIyiB,EAAW10B,KAAK6tB,SAAS4rF,cACzBn2G,GAAMtD,KAAKgB,QAAQsC,GAAK,sBACxByJ,EAAK/M,KAAK00U,qBAAqB7P,eAAe93T,EAC9CC,EAAKhN,KAAK00U,qBAAqB7P,eAAe73T,EAC9CgJ,MAAShW,KAAK00U,qBAAqB7P,eAAe7uT,MAClDD,OAAU/V,KAAK00U,qBAAqB7P,eAAe9uT,OACnD6nB,KAAQ,cACR2G,eAAgB,EAChBzG,OAAU,SAEd99B,KAAK+yU,eAAepxU,YAAY+yB,GAChC10B,KAAKsxB,UAAU3vB,YAAY3B,KAAK+yU,iBAEpCsI,EAAMhgV,UAAUkiV,oBAAsB,WAClC,IAAK,IAAIn/U,EAAK,EAAGyE,EAAK7C,KAAKk9U,WAAY9+U,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACzD,IAAIs/U,EAAY76U,EAAGzE,GACf4B,KAAK+2B,GAAiB2mT,EAAUh3U,MAAQ,oBACxC1G,KAAK+2B,GAAiB2mT,EAAUh3U,MAAQ,mBAAmBi3U,wBAAwB39U,KAAM09U,EAAWA,EAAUzrU,OAGlHjS,KAAKm9U,mBACLn9U,KAAKsxB,UAAU3vB,YAAY3B,KAAKm9U,oBAGxC9B,EAAMhgV,UAAUmiV,oBAAsB,WAClC,IAAK,IAAIp/U,EAAK,EAAGyE,EAAK7C,KAAKihC,cAAe7iC,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC5D,IAAIwgB,EAAS/b,EAAGzE,GACZwgB,EAAOmyT,WAAWt0U,QAClBuD,KAAKyuU,gBAAgBmP,qBAAqBh/T,EAAQ5e,MAGtDA,KAAKq9U,mBACLr9U,KAAKsxB,UAAU3vB,YAAY3B,KAAKq9U,oBAGxChC,EAAMhgV,UAAUoiV,0BAA4B,SAAUvV,GACvB,eAAvBloU,KAAK4tU,eACL5tU,KAAKsxB,UAAU3vB,YAAY3B,KAAK68U,eAEpC78U,KAAKsxB,UAAU3vB,YAAYumU,GACvBloU,KAAK8yE,YAAc9yE,KAAKquE,aAAa23P,iBAAmBhmU,KAAKwiH,cAAcr9C,mBAC3E53C,GAAWvtB,KAAKgB,QAAQsC,GAAK,sBAAsB3B,YAAY3B,KAAKwiH,eAEpExiH,KAAK88U,iBACL98U,KAAK88U,gBAAgBC,gBAAgB/8U,KAAM,OAAQA,KAAK2mU,iBAEvD3mU,KAAK6xB,QAAQ4N,QACdz/B,KAAKsxB,UAAU3vB,YAAY3B,KAAK6tB,SAASw+C,aAAc/oE,GAAItD,KAAKgB,QAAQsC,GAAK,mBAAoBoB,MAAO,2BAGhH22U,EAAMhgV,UAAUohV,aAAe,WACvBz8U,KAAK8yE,YAAc9yE,KAAK8yE,WAAWmzP,YAAcjmU,KAAKquE,aAAawvQ,WAAa79U,KAAK8yE,WAAWgrQ,cAChG99U,KAAK8yE,WAAWirQ,iBAAiB/9U,KAAMA,KAAK2mU,kBAGpD0U,EAAMhgV,UAAUuhV,iBAAmB,WAC3B58U,KAAKg+U,kBACLh+U,KAAKg+U,iBAAiBC,kBAAkB1wT,GAAWvtB,KAAKgB,QAAQsC,GAAK,wBAG7E+3U,EAAMhgV,UAAUqhV,iBAAmB,WAC/B,IAAIwB,KACAl+U,KAAKmtU,kBACL+Q,EAAsBx/U,KAAWsB,KAAKmtU,gBAAgB+Q,oBAAqB,MAAM,GACjFl+U,KAAKmtU,gBAAgBgR,gBAAgBn+U,OAErCk+U,EAAoBzhV,OAAS,IAC7BuD,KAAKmtU,gBAAgB+Q,oBAAsBA,EAC3Cl+U,KAAKmtU,gBAAgBiR,gBAAgBp+U,KAAMA,KAAKktU,iBAGxDmO,EAAMhgV,UAAU0jF,YAAc,SAAUgtB,QACrB,IAAXA,IAAqBA,GAAS,GAClC/rG,KACK2uU,mBAAqB,EAE1B,IAAK,IADDz5I,GAAQ,EACH92L,EAAK,EAAGyE,EAAK7C,KAAKihC,cAAe7iC,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC5D,IAAIigU,EAAWx7T,EAAGzE,GACbigU,EAAS7mS,SAAYx3B,KAAKo2U,eAAe5+S,QAIpB,cAAtB6mS,EAASjkI,UAAkD,cAAtBikI,EAASjkI,UAC9Cp6L,KAAKq+U,qBAAqBhgB,GAJ1Br+T,KAAK2uU,qBAOb,IAAK,IAAI1qU,EAAK,EAAGwG,EAAKzK,KAAKk9U,WAAYj5U,EAAKwG,EAAGhO,OAAQwH,IAAM,CACzD,IAAIy5U,EAAYjzU,EAAGxG,GACnB,GAAIy5U,EAAUn6Q,WAAY,CACtB,IAAI+6Q,EAAgBZ,EACpB19U,KAAKq+U,qBAAqBC,GAC1BppJ,GAAQ,GAGZnpF,KAAY/rG,KAAKihC,cAAcxkC,QAAUuD,KAAK2uU,qBAAuB3uU,KAAKihC,cAAcxkC,QAAUy4L,KAClGl1L,KAAKgxU,eACLhxU,KAAKwmB,QAAQ,UAAYqK,MAAO7wB,SAGxCq7U,EAAMhgV,UAAUgjV,qBAAuB,SAAUz/T,GAC7CA,EAAOovT,SACPpvT,EAAOsxT,SACPtxT,EAAO6xT,WAAa,IAAIyD,GAAKt1T,EAAO2kD,WAAY3kD,EAAO88C,OACvD98C,EAAO+Y,UACP/Y,EAAO4xT,mBAAmBxwU,OAE9Bq7U,EAAMhgV,UAAUkyR,gBAAkB,WAC9B,IAAI9wP,EAASz8B,KAAKy8B,OAEd8hT,EAAc,EAEd/xU,EAAOiwB,EAAOjwB,KACdwJ,EAAQhW,KAAK21B,cAAc3f,MAAQxJ,EAAOiwB,EAAOhwB,MAAQzM,KAAKskC,OAAOtuB,MACzEhW,KAAKmgC,mBACDngC,KAAKkgC,QACLlgC,KAAKmgC,gBAAkBF,GAASjgC,KAAKkgC,MAAOlgC,KAAK0gC,WAAY1qB,GAC7DuoU,EAAe/xT,GAAYxsB,KAAKkgC,MAAOlgC,KAAK0gC,YAAY3qB,OAAS/V,KAAKmgC,gBAAgB1jC,OAN5E,IAQd,IAAIiQ,EAAM+vB,EAAO/vB,IAAM6xU,EAAcv+U,KAAK0qU,UAAUpmS,OAAOtuB,MAAQ,EAC/DD,EAAS/V,KAAK21B,cAAc5f,OAASrJ,EAAM1M,KAAKskC,OAAOtuB,MAAQymB,EAAO9vB,OAC1E3M,KAAK8kU,gBAAkB,IAAI5uS,GAAK1pB,EAAME,EAAKsJ,EAAOD,GAC9C/V,KAAKg8U,cACLh8U,KAAKg8U,aAAazF,sBAAsBv2U,KAAK8kU,gBAAiB9kU,KAAK21B,eAEvE31B,KAAK00U,qBAAqB9P,YAAY5kU,KAAK8kU,kBAK/CuW,EAAMhgV,UAAU0F,MAAQ,SAAUuC,GACZ,IAAIs2U,GAAY55U,MACtBe,MAAMuC,IAOtB+3U,EAAMhgV,UAAU6+U,OAAS,SAAUxzU,EAAMqqN,EAAU33L,EAAa+gT,EAAUnkU,EAAOD,GAC7E,IAAIyoU,EAAc,IAAI5E,GAAY55U,MAClCm6U,EAAWA,IAAuBn6U,MAClCw+U,EAAYtE,OAAOxzU,EAAMqqN,EAAU33L,EAAa+gT,EAAUnkU,EAAOD,IAKrEslU,EAAMhgV,UAAUwgV,eAAiB,WAC7B,IAAK,IAAIz9U,EAAK,EAAGyE,EAAK7C,KAAKihC,cAAe7iC,EAAKyE,EAAGpG,OAAQ2B,IAGtD,IAAK,IAFDwgB,EAAS/b,EAAGzE,GACZqgV,EAAa,EACRx6U,EAAK,EAAGwG,EAAKmU,EAAOmyT,WAAY9sU,EAAKwG,EAAGhO,OAAQwH,IAAM,CAC3D,IACIy6U,EADYj0U,EAAGxG,GAER8yB,GAAiB2nT,EAAUh4U,MAClC1G,KAAKyuU,kBACLiQ,EAAUzsU,MAAQwsU,EAClBC,EAAUC,YAAc//T,EAAO3M,MAC/BjS,KAAKyuU,gBAAgBmQ,qBAAqBF,EAAW1+U,MACjD0+U,EAAU/E,eACV+E,EAAU/E,aAAajiT,UAAY9Y,EAAO8Y,UAC1CgnT,EAAU/E,aAAakF,UAAYjgU,EAAOigU,UAC1C7+U,KAAKihC,cAAcz8B,KAAKk6U,EAAU/E,gBAG1C8E,MAIZpD,EAAMhgV,UAAUqgV,kBAAoB,WAChC,IAAI98T,EAAS5e,KAAK4e,OAAO,GACrBA,IACA5e,KAAK82B,qBAAwD,IAAhClY,EAAOlY,KAAKnI,QAAQ,SAAmByB,KAAKmnU,eACnC,IAAhCvoT,EAAOlY,KAAKnI,QAAQ,QAAkByB,KAAKmnU,cAAuC,eAAvBnnU,KAAK4tU,eAE1E5tU,KAAK00U,qBAA8C,eAAvB10U,KAAK4tU,cAAkC5tU,KAAK8+U,mBAAqB9+U,KAAK++U,kBAC5F,IAAIra,GAAyB1kU,OAEvCq7U,EAAMhgV,UAAUygV,qBAAuB,WACnC,IAAI3lU,EAEAsxD,GAAQznE,KAAKw0B,aAAcx0B,KAAKsnU,cACpC7/P,EAA8B,cAAvBznE,KAAK4tU,cAAgCnmQ,EAAKltD,OAAOva,KAAKynE,MAAQA,EACrEznE,KAAK2mU,mBACD3mU,KAAK8yE,aACL9yE,KAAK8yE,WAAWksQ,UAAYh/U,KAAK8yE,WAAWmsQ,aAAax3Q,IAASznE,KAAKquE,aAAawvQ,UACpF79U,KAAKsxB,UAAU9tB,aAAa,SAAUxD,KAAK8yE,WAAWksQ,UAAY,UAAY,QAC1Eh/U,KAAK+lU,kBACL/lU,KAAK+lU,gBAAgBt+P,KAAOA,IAGpC,IAAK,IAAItrE,EAAI,EAAG0F,EAAM4lE,EAAKhrE,OAAQN,EAAI0F,EAAK1F,IAAK,EAC7Cga,EAAOsxD,EAAKtrE,IACPyiB,UACLzI,EAAKqxT,UACL,IAAK,IAAIppU,EAAK,EAAGyE,EAAK7C,KAAKihC,cAAe7iC,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC5D,IAAI8gV,EAAWr8U,EAAGzE,GAClB4B,KAAKm/U,SAASD,EAAU/oU,GAAM,GAElC,IAAK,IAAIlS,EAAK,EAAGwG,EAAKzK,KAAKk9U,WAAYj5U,EAAKwG,EAAGhO,OAAQwH,IAAM,CACzD,IAAIy5U,EAAYjzU,EAAGxG,GACnBjE,KAAKm/U,SAASzB,EAAWvnU,GAAM,GAE/BnW,KAAK+lU,iBACL/lU,KAAK+lU,gBAAgBqZ,SAASjpU,EAAMnW,MAEhB,MAApBmW,EAAKijB,aACLp5B,KAAK2mU,gBAAgBniU,KAAK2R,GAG9BnW,KAAKu4R,KAAK97R,OAAS,GAAKuD,KAAK+9D,QAAQthE,OAAS,GAC9CuD,KAAK00U,qBAAqB94C,WAGlCy/C,EAAMhgV,UAAU8jV,SAAW,SAAUvgU,EAAQzI,EAAMkpU,GAC3CzgU,EAAO8Y,YAAcvhB,EAAKshB,MAA6B,MAApB7Y,EAAO8Y,WAAmC,iBAAdvhB,EAAKshB,MACpEthB,EAAKijB,YAAcp5B,KAAK82B,oBAAsB,WAAa,aAC3DlY,EAAO9G,MAAQ3B,EACXkpU,GACAlpU,EAAKyI,OAAOpa,KAAKoa,KAGhBA,EAAOigU,YAAc1oU,EAAKshB,MAA6B,MAApB7Y,EAAOigU,WAAmC,iBAAd1oU,EAAKshB,QACzEthB,EAAKijB,YAAcp5B,KAAK82B,oBAAsB,aAAe,WAC7DlY,EAAOhH,MAAQzB,EACXkpU,GACAlpU,EAAKyI,OAAOpa,KAAKoa,KAI7By8T,EAAMhgV,UAAUugV,wBAA0B,WAEtC,IAAK,IADDz/U,EAAI,EACCiC,EAAK,EAAGyE,EAAK7C,KAAKk9U,WAAY9+U,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACzD,IAAIs/U,EAAY76U,EAAGzE,GACfkgV,EAAgBZ,EAChBh3U,EAAOqwB,GAAiBunT,EAAc53U,MAC1C,GAAI1G,KAAK0G,EAAO,mBAAoB,CAChC43U,EAAcrsU,MAAQ9V,EACtB6D,KAAK0G,EAAO,mBAAmBk4U,qBAAqBN,EAAet+U,MACnE,IAAK,IAAIiE,EAAK,EAAGwG,EAAK6zU,EAAc3E,aAAc11U,EAAKwG,EAAGhO,OAAQwH,IAAM,CACpE,IAAI01U,EAAelvU,EAAGxG,IAClBy5U,EAAU4B,YAAc5B,EAAUn6Q,aAClCvjE,KAAKihC,cAAcz8B,KAAKm1U,IAIpCx9U,MAIRk/U,EAAMhgV,UAAUy1U,0BAA4B,SAAUlyT,GAClD,GAAI5e,KAAKk9U,WAAWzgV,OAAQ,CAExB,GAAImiB,aAAkBuwT,IAA8B,cAApBvwT,EAAOw7K,SACnC,IAAK,IAAIh8L,EAAK,EAAGyE,EAAK7C,KAAKk9U,WAAY9+U,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACzD,IAAIs/U,EAAY76U,EAAGzE,GACfs/U,EAAU4B,aAAe1gU,EAAO6Y,MAASimT,EAAUn6Q,YACjCm6Q,EACFlP,cAAc5vT,EAAQ5e,WAIzC4e,aAAkB86T,IACL96T,EACF4vT,cAAc5vT,aAAkBuwT,GAASvwT,EAAS,KAAM5e,QAIpFq7U,EAAMhgV,UAAUsgV,uBAAyB,WACrC,IAAI/8T,EACJ5e,KAAKihC,iBAGL,IAAK,IAFD6uD,EAAS9vF,KAAKu/U,SAAS9iV,OAASuD,KAAKu/U,SAAW1wT,GAAe7uB,KAAKkb,OACpE4D,EAAQgxE,EAAOrzF,OACVN,EAAI,EAAG0F,EAAM7B,KAAK4e,OAAOniB,OAAQN,EAAI0F,EAAK1F,IAAK,CAIpD,OAHAyiB,EAAS5e,KAAK4e,OAAOziB,GACrByiB,EAAO3M,MAAQ9V,EACfyiB,EAAOypD,SAAWzpD,EAAOgf,MAAQkyD,EAAO3zF,EAAI2iB,GACpCF,EAAOlY,MACX,IAAK,MACL,IAAK,cACL,IAAK,iBACD,IAA4C,IAAxC1G,KAAK4e,OAAO,GAAGlY,KAAKnI,QAAQ,OAC5B,SAEJ,MACJ,IAAK,QACL,IAAK,QACD,GAA2B,eAAvByB,KAAK4tU,cACL,SAEJ,GAA2B,eAAvB5tU,KAAK4tU,gBAAyD,OAArBhvT,EAAO8Y,WAA2C,OAArB9Y,EAAOigU,WACvD,OAArBjgU,EAAO8Y,WAA2C,OAArB9Y,EAAOigU,WACf,OAArBjgU,EAAO8Y,WAA2C,OAArB9Y,EAAOigU,WACrC,SAEJ,MACJ,QACI,GAA2B,eAAvB7+U,KAAK4tU,eAAkC5tU,KAAK4e,OAAO,GAAGlY,KAAKnI,QAAQ,QAAU,EAC7E,SAIZyB,KAAKihC,cAAcz8B,KAAKoa,GACxB5e,KAAK4e,OAAOziB,GAAKyiB,IAGzBy8T,EAAMhgV,UAAUihV,YAAc,WAC1B,GAAIt8U,KAAKkgC,MAAO,CACZ,IAAIrsB,EAA2C,SAAlC7T,KAAK0gC,WAAWC,cAA2B,QAClB,QAAlC3gC,KAAK0gC,WAAWC,cAA0B,MAAQ,SACtD3gC,KAAK8jS,YAAct3Q,GAAYxsB,KAAKkgC,MAAOlgC,KAAK0gC,YAChD,IACI1/B,EAAUs1B,GADA,IAAIC,GAAWv2B,KAAKgB,QAAQsC,GAAK,cAAeg9B,GAAetgC,KAAK21B,cAAe31B,KAAKy8B,OAAOjwB,KAAMxM,KAAKy8B,OAAOhwB,MAAOzM,KAAK0gC,YAAa1gC,KAAKy8B,OAAO/vB,IAAmC,EAA3B1M,KAAK8jS,YAAkB,OAAQ,EAAIjwR,EAAQ7T,KAAKmgC,gBAAiB,GAAI,QAC9MngC,KAAK0gC,WAAY1gC,KAAK0gC,WAAWlK,OAASx2B,KAAKq2B,WAAW9G,WAAYvvB,KAAKsxB,WAC9GtwB,EAAQwC,aAAa,aAAcxD,KAAKkyC,aAAelyC,KAAKkgC,OAC5Dl/B,EAAQwC,aAAa,WAAYxD,KAAKipH,SAAS/7G,cAGvDmuU,EAAMhgV,UAAUghV,aAAe,WAC3B,IAAIrmU,EAAQhW,KAAKskC,OAAOtuB,MACpBqd,EAAO,IAAI6wS,GAAWlkU,KAAKgB,QAAQsC,GAAK,eAAgBtD,KAAKyvB,YAAczvB,KAAKq2B,WAAW5G,WAAYzvB,KAAKskC,OAAQ,EAAG,IAAIpO,GAAKlgB,EAAQ,EAAGA,EAAQ,EAAGhW,KAAK21B,cAAc3f,MAAQA,EAAOhW,KAAK21B,cAAc5f,OAASC,IACxNhW,KAAK2sB,WAAa3sB,KAAK6tB,SAAS8V,cAActQ,GAC9CrzB,KAAKsxB,UAAU3vB,YAAY3B,KAAK2sB,aAEpC0uT,EAAMhgV,UAAUkhV,iBAAmB,WAC/B,GAA2B,eAAvBv8U,KAAK4tU,cACL,OAAO,KAGP,IAAIv6S,EAAO,IAAI6wS,GAAWlkU,KAAKgB,QAAQsC,GAAK,mBAAoBtD,KAAK0qU,UAAUj7S,YAAczZ,MAAOhW,KAAK0qU,UAAUpmS,OAAOtuB,MAAOwgB,MAAOx2B,KAAK0qU,UAAUpmS,OAAO9N,OAASx2B,KAAKq2B,WAAW3G,YAAc1vB,KAAK0qU,UAAUj9T,QAASzN,KAAK00U,qBAAqB7P,gBACvP7kU,KAAK2sB,WAAa3sB,KAAK6tB,SAAS8V,cAActQ,GAC9CrzB,KAAKsxB,UAAU3vB,YAAY3B,KAAK2sB,aAQxC0uT,EAAMhgV,UAAUmkV,UAAY,SAAUtoT,GAClC,IAAK,IAAI94B,EAAK,EAAGk0U,EAAqBp7S,EAAkB94B,EAAKk0U,EAAmB71U,OAAQ2B,IAAM,CAC1F,IAAIwgB,EAAS0zT,EAAmBl0U,GAChCwgB,EAAS,IAAIuwT,GAAOnvU,KAAM,SAAU4e,GACpC5e,KAAK4e,OAAOpa,KAAKoa,GAErB5e,KAAKkyD,WAOTmpR,EAAMhgV,UAAUokV,aAAe,SAAUxtU,GACrCjS,KAAK4e,OAAOyJ,OAAOpW,EAAO,GAC1BjS,KAAKkyD,WAQTmpR,EAAMhgV,UAAUiX,QAAU,WAClBtS,KAAK+lU,iBACL/lU,KAAK+lU,gBAAgBzzT,UAEzBtS,KAAKw+G,eACLrzB,EAAO9vF,UAAUiX,QAAQhR,KAAKtB,MAC9BA,KAAKgB,QAAQ8C,UAAUS,OAAO,YAKlC82U,EAAMhgV,UAAUkkC,cAAgB,WAC5B,MAAO,SAMX87S,EAAMhgV,UAAUmxG,eAAiB,WAE7B,OAAOxsG,KAAKgtG,cADK,SAAU,uBAM/BquO,EAAMhgV,UAAUogV,eAAiB,WAC7Bz7U,KAAK0/U,YACL1/S,GAAUhgC,OAKdq7U,EAAMhgV,UAAUmjH,aAAe,WAE3B,IAAIxE,EAAaxuG,GAAQ0+E,gBACrBywB,EAAYnvG,GAAQ2+E,eACpBw1P,EAAYn0U,GAAQ4+E,cACpBywB,EAAcrvG,GAAQC,UAAY,eAAiB,aAEvDlG,GAAahB,OAAOvE,KAAKgB,QAASg5G,EAAYh6G,KAAK4/U,kBACnDr6U,GAAahB,OAAOvE,KAAKgB,QAAS25G,EAAW36G,KAAK6/U,WAClDt6U,GAAahB,OAAOvE,KAAKgB,QAAS2+U,EAAW3/U,KAAK8/U,UAClDv6U,GAAahB,OAAOvE,KAAKgB,QAAS,QAAShB,KAAK+/U,mBAChDx6U,GAAahB,OAAOvE,KAAKgB,QAAS,cAAehB,KAAKggV,iBACtDz6U,GAAahB,OAAOvE,KAAKgB,QAAS65G,EAAa76G,KAAKigV,YACpDpkV,OAAOe,oBAAqB4O,GAAQomB,SAAY,gBAAiB/1B,QAAU,wBAAyBA,OAAW,oBAAsB,SAAUmE,KAAKkgV,cAExJ7E,EAAMhgV,UAAUkpB,WAAa,WAEzB,IAAIs2F,EAAcrvG,GAAQC,UAAY,eAAiB,aAEvDlG,GAAanB,IAAIpE,KAAKgB,QAASwK,GAAQ0+E,gBAAiBlqF,KAAK4/U,iBAAkB5/U,MAC/EuF,GAAanB,IAAIpE,KAAKgB,QAASwK,GAAQ2+E,eAAgBnqF,KAAK6/U,UAAW7/U,MACvEuF,GAAanB,IAAIpE,KAAKgB,QAASwK,GAAQ4+E,cAAepqF,KAAK8/U,SAAU9/U,MACrEuF,GAAanB,IAAIpE,KAAKgB,QAAS,QAAShB,KAAK+/U,kBAAmB//U,MAChEuF,GAAanB,IAAIpE,KAAKgB,QAAS,cAAehB,KAAKggV,gBAAiBhgV,MACpEuF,GAAanB,IAAIpE,KAAKgB,QAAS65G,EAAa76G,KAAKigV,WAAYjgV,MAC7DnE,OAAOa,iBAAkB8O,GAAQomB,SAAY,gBAAiB/1B,QAAU,wBAAyBA,OAAW,oBAAsB,SAAUmE,KAAKkgV,YAAY5kV,KAAK0E,OAClKA,KAAKmgV,UAAYngV,KAAKmgV,UAAU7kV,KAAK0E,MACrC,IAAI65G,GAAM75G,KAAKgB,SAAW4uH,QAAS5vH,KAAKmgV,UAAWzlO,iBAAkB,MAErE16G,KAAKmiP,SAASniP,KAAKgB,UAEvBq6U,EAAMhgV,UAAU2kV,gBAAkB,SAAU1jV,GACxC,OAAI0D,KAAKs0U,UAAU70S,SAAUz/B,KAAKogV,iBACX,IAAlB9jV,EAAM6pH,SAAiC,IAAhB7pH,EAAMq6G,OAAqC,UAAtBr6G,EAAM+jV,cACnD/jV,EAAMkpB,iBACNlpB,EAAM8gI,mBACC,IAIfi+M,EAAMhgV,UAAU8mP,SAAW,SAAUnhP,GACjC,IAAIs/U,EAAUtgV,KAAKquE,aACfkyQ,EAAgBD,EAAQE,wBAA0BF,EAAQG,oBACnC,SAAvBzgV,KAAKktU,eAA4BltU,KAAKs0U,UAAU70S,OACpDz+B,EAAQ0D,MAAMo1G,YAAcymO,EAAgB,OAAS,UACrDv/U,EAAQ0D,MAAMg8U,cAAgBH,EAAgB,OAAS,UACvDv/U,EAAQ0D,MAAMi8U,iBAAmB,OACjC3/U,EAAQ0D,MAAMk8U,aAAe,OAC7B5/U,EAAQ0D,MAAMm8U,iBAAmB,OACjC7/U,EAAQ0D,MAAMwP,SAAW,WACzBlT,EAAQ0D,MAAM4xC,QAAU,SAO5B+kS,EAAMhgV,UAAUylV,cAAgB,WAC5B,MAAQ,gBAAiBjlV,QAAU,wBAAyBA,QAOhEw/U,EAAMhgV,UAAU8kV,UAAY,SAAUt/U,GAMlC,OALAb,KAAK+sU,OAAUlsU,GAAKA,EAAEq6G,cAAcv8C,eAAmB99D,EAAEq6G,cAAcv8C,eAAe,GAAU,QAAI,EACpG3+D,KAAKgtU,OAAUnsU,GAAKA,EAAEq6G,cAAcv8C,eAAmB99D,EAAEq6G,cAAcv8C,eAAe,GAAU,QAAI,EACpG3+D,KAAKw0U,WAAY,EACjBx0U,KAAK+gV,WAAW/gV,KAAK+sU,OAAQ/sU,KAAKgtU,QAClChtU,KAAK+N,OAAO,UAAWlN,IAChB,GAKXw6U,EAAMhgV,UAAU0lV,WAAa,SAAUj1U,EAAOI,GAC1C,IAAIq7D,EAAUh6C,GAAWvtB,KAAKgB,QAAQsC,GAAK,QAAQsI,wBAC/CynB,EAAOrzB,KAAKgB,QAAQ4K,wBACxB5L,KAAKgtU,OAAU9gU,EAAQmnB,EAAK3mB,IAAOL,KAAKC,IAAIi7D,EAAQ76D,IAAM2mB,EAAK3mB,IAAK,GACpE1M,KAAK+sU,OAAUjhU,EAAQunB,EAAK7mB,KAAQH,KAAKC,IAAIi7D,EAAQ/6D,KAAO6mB,EAAK7mB,KAAM,IAO3E6uU,EAAMhgV,UAAU6kV,YAAc,SAAUr/U,GACpC,IAAId,EAAQC,KACZA,KAAK0zU,eAAgB,EACrB,IAAI3hP,GACAlhE,MAAO7wB,KACPy3B,KZptBS,UYqtBTupT,YAAa,IAAI5zT,GAAK,EAAG,GACzB6zT,aAAc,IAAI7zT,GAAKptB,KAAK21B,cAAc3f,MAAOhW,KAAK21B,cAAc5f,SAiBxE,OAfI/V,KAAK65U,UACL35U,aAAaF,KAAK65U,UAEtB75U,KAAK65U,SAAW15U,WAAW,WACnBJ,EAAMinF,YACN9mF,aAAaH,EAAM85U,WAGvB95U,EAAM07U,iBACN1pP,EAAIivP,YAAcjhV,EAAM41B,cACxB51B,EAAMymB,QZluBG,UYkuBcurE,GACvBhyF,EAAMulU,cACNvlU,EAAMixU,eACNjxU,EAAMymB,QAAQ,UAAYqK,MAAO9wB,MAClC,MACI,GAOXs7U,EAAMhgV,UAAUwkV,UAAY,SAAUh/U,GAClC,IAAIiL,EACAI,EACAg1U,EAcJ,MAbe,cAAXrgV,EAAE6F,MACF1G,KAAK4xB,SAAU,EAEf9lB,GADAo1U,EAAWrgV,GACM89D,eAAe,GAAGvqB,QACnCloC,EAAQg1U,EAASviR,eAAe,GAAGtqB,UAGnCr0C,KAAK4xB,QAA4B,UAAlB/wB,EAAEw/U,aAA6C,MAAlBx/U,EAAEw/U,aAAuBrgV,KAAK4xB,QAC1E9lB,EAAQjL,EAAEuzC,QACVloC,EAAQrL,EAAEwzC,SAEdr0C,KAAK+gV,WAAWj1U,EAAOI,GACvBlM,KAAKmhV,iBAAiBtgV,IACf,GAOXw6U,EAAMhgV,UAAU4kV,WAAa,SAAUp/U,GACnC,IAAIiL,EACAI,EACAg1U,EAcJ,MAbe,eAAXrgV,EAAE6F,MACF1G,KAAK4xB,SAAU,EAEf9lB,GADAo1U,EAAWrgV,GACM89D,eAAe,GAAGvqB,QACnCloC,EAAQg1U,EAASviR,eAAe,GAAGtqB,UAGnCr0C,KAAK4xB,QAA4B,UAAlB/wB,EAAEw/U,aAA6C,MAAlBx/U,EAAEw/U,YAC9Cv0U,EAAQjL,EAAEuzC,QACVloC,EAAQrL,EAAEwzC,SAEdr0C,KAAK+gV,WAAWj1U,EAAOI,GACvBlM,KAAKohV,kBAAkBvgV,IAChB,GAOXw6U,EAAMhgV,UAAU+lV,kBAAoB,SAAUvgV,GAC1C,IAAIG,EAAUH,EAAEsG,OACZ0zG,EAAcrvG,GAAQC,UAAY,eAAiB,aAIvD,OAHAzL,KAAKwmB,QAAQq5S,IAAmB14T,OAAQnG,EAAQsC,GAAIyJ,EAAG/M,KAAK+sU,OAAQ//T,EAAGhN,KAAKgtU,SAC5EhtU,KAAKqhV,aAAc,EACnBrhV,KAAK+N,OAAO8sG,EAAah6G,IAClB,GAOXw6U,EAAMhgV,UAAU0kV,kBAAoB,SAAUl/U,GAC1C,IAAIG,EAAUH,EAAEsG,OAMhB,OALAnH,KAAKwmB,QAAQo5S,IAAmBz4T,OAAQnG,EAAQsC,GAAIyJ,EAAG/M,KAAK+sU,OAAQ//T,EAAGhN,KAAKgtU,SACxEhtU,KAAKshV,YACLthV,KAAKuhV,kBZ7zBO,cY+zBhBvhV,KAAK+N,OAAO,QAASlN,IACd,GAEXw6U,EAAMhgV,UAAUkmV,kBAAoB,SAAUjlV,GAC1C,IACIq4U,EADO,IAAInI,GAAUxsU,MACJ2sU,UACjBgI,EAAU/1T,QAAU+1T,EAAU7gT,OAC9B9zB,KAAKwmB,QAAQlqB,GACTsiB,OAAQ+1T,EAAU/1T,OAClBkV,MAAO6gT,EAAU7gT,MACjBmpS,YAAa0X,EAAU/1T,OAAO3M,MAAOmmB,WAAYu8S,EAAU7gT,MAAM7hB,MACjElF,EAAG/M,KAAK+sU,OAAQ//T,EAAGhN,KAAKgtU,UASpCqO,EAAMhgV,UAAU8lV,iBAAmB,SAAUtgV,GACzC,IAAIG,EAAUH,EAAEsG,OAYhB,OAXAnH,KAAKwmB,QAAQm5S,IAAkBx4T,OAAQnG,EAAQsC,GAAIyJ,EAAG/M,KAAK+sU,OAAQ//T,EAAGhN,KAAKgtU,SACvEhtU,KAAKwhV,WACLxhV,KAAKuhV,kBZr1BM,aYw1BVvhV,KAAK4xB,UACN5xB,KAAKyhV,aAAa5gV,EAAGb,KAAK+sU,OAAQ/sU,KAAKgtU,QACvChtU,KAAK0hV,YAAY7gV,EAAGb,KAAK+sU,OAAQ/sU,KAAKgtU,SAE1ChtU,KAAK+N,OAAOvC,GAAQ2+E,eAAgBtpF,GACpCb,KAAK4xB,SAAU,GACR,GAEXypT,EAAMhgV,UAAUomV,aAAe,SAAUnlV,EAAOyQ,EAAGC,EAAG4kB,GACnCt1B,EAAM6K,OAAO7D,KACTtD,KAAKgB,QAAQsC,GAAK,eAAoBhH,EAAM6K,OAAO0U,YAAYtd,QAAQ,QAAU,EAChGmzB,GAAY1xB,KAAKkgC,MAAOnzB,EAAGC,EAAGhN,KAAKgB,QAAQ4D,YAAa5E,KAAKgB,QAAQsC,GAAK,qBAAsBiqB,GAAWvtB,KAAKgB,QAAQsC,GAAK,sBAAuBsuB,GAGpJpE,GAAcxtB,KAAKgB,QAAQsC,GAAK,uBAGxC+3U,EAAMhgV,UAAUqmV,YAAc,SAAUplV,EAAOyQ,EAAGC,EAAG4kB,GACjD,IAAI4U,EAAWlqC,EAAM6K,OAAO7D,IACtBkjC,EAASjoC,QAAQ,cAAgB,GAAMioC,EAASjoC,QAAQ,yBAA2B,IACpFjC,EAAM6K,OAAO0U,YAAYtd,QAAQ,QAAU,EAC5CmzB,GAAY1xB,KAAKisU,cAAczlS,GAAWz5B,EAAGC,EAAGhN,KAAKgB,QAAQ4D,YAAa5E,KAAKgB,QAAQsC,GAAK,yBAA0BiqB,GAAWvtB,KAAKgB,QAAQsC,GAAK,sBAAuBsuB,GAG1KpE,GAAcxtB,KAAKgB,QAAQsC,GAAK,2BAGxC+3U,EAAMhgV,UAAU4wU,cAAgB,SAAUx/S,GACtC,IAAIk1T,EACJ,OAAIl1T,EAAKluB,QAAQ,cAAgB,GAC7BojV,EAAUl1T,EAAKld,QAAQvP,KAAKgB,QAAQsC,GAAI,IAAKiM,QAAQ,aAAc,IAAKrS,MAAM,KACvE8C,KAAK2mU,gBAAgB5xS,SAAS4sT,EAAM,GAAI,KAAKxsT,cAAcJ,SAAS4sT,EAAM,GAAI,KAAKte,eAG1Fse,EAAUl1T,EAAKld,QAAQvP,KAAKgB,QAAQsC,GAAI,IAAKiM,QAAQ,8BAA+B,IAAIA,QAAQ,QAAS,IAAKrS,MAAM,KAC5G8C,KAAK2mU,gBAAgB5xS,SAAS4sT,EAAM,GAAI,KAAK5e,iBAAiBhuS,SAAS4sT,EAAM,GAAI,KACpFC,WAAW7sT,SAAS4sT,EAAM,GAAI,KAAS,OAQpDtG,EAAMhgV,UAAUukV,iBAAmB,SAAU/+U,GACzC,IAAIiL,EACAI,EACA/E,EACA+5U,EACAv1U,EAASH,GAAQkb,SAAW,GAAK,GACjC2M,EAAOrzB,KAAKgB,QAAQ4K,wBACpB5K,EAAUH,EAAEsG,OAChBnH,KAAKwmB,QAAQs5S,IAAkB34T,OAAQnG,EAAQsC,GAAIyJ,EAAG/M,KAAK+sU,OAAQ//T,EAAGhN,KAAKgtU,SAC5D,eAAXnsU,EAAE6F,MACF1G,KAAK4xB,SAAU,EAEf9lB,GADAo1U,EAAWrgV,GACM89D,eAAe,GAAGvqB,QACnCloC,EAAQg1U,EAASviR,eAAe,GAAGtqB,QACnCltC,EAAS+5U,EAAS/5U,SAGlBnH,KAAK4xB,QAA4B,UAAlB/wB,EAAEw/U,YACjBv0U,EAAQjL,EAAEuzC,QACVloC,EAAQrL,EAAEwzC,QACVltC,EAAStG,EAAEsG,QAEf,IAAIogE,EAAUh6C,GAAWvtB,KAAKgB,QAAQsC,GAAK,QAAQsI,wBAWnD,OAVA5L,KAAK6hV,WAAa7hV,KAAK8hV,mBAAsBh2U,EAAQunB,EAAK7mB,KAAQH,KAAKC,IAAIi7D,EAAQ/6D,KAAO6mB,EAAK7mB,KAAM,GACrGxM,KAAK+hV,WAAa/hV,KAAKgiV,mBAAsB91U,EAAQmnB,EAAK3mB,IAAOL,KAAKC,IAAIi7D,EAAQ76D,IAAM2mB,EAAK3mB,IAAK,GAC9F1M,KAAK4xB,UACL5xB,KAAKiiV,aAAe,IAAIjiU,MAAOC,UAAYjgB,KAAKkiV,YAAmE,IAAtD/6U,EAAO7D,GAAG/E,QAAQyB,KAAKgB,QAAQsC,GAAK,eAC5FtD,KAAK6hV,WAAal2U,GAAU3L,KAAK+sU,QAAU/sU,KAAK6hV,WAAal2U,GAAU3L,KAAK+sU,UAC5E/sU,KAAK+hV,WAAap2U,GAAU3L,KAAKgtU,QAAUhtU,KAAK+hV,WAAap2U,GAAU3L,KAAKgtU,UAC5EhtU,KAAK+sU,OAASphU,GAAU3L,KAAK6hV,YAAc7hV,KAAK+sU,OAASphU,GAAU3L,KAAK6hV,cACxE7hV,KAAKgtU,OAASrhU,GAAU3L,KAAK+hV,YAAc/hV,KAAKgtU,OAASrhU,GAAU3L,KAAK+hV,aAEjF/hV,KAAK+N,OAAOvC,GAAQ0+E,gBAAiBrpF,IAC9B,GAOXw6U,EAAMhgV,UAAUykV,SAAW,SAAUj/U,GACjC,IAAIqL,EACAJ,EACAo1U,EAcJ,MAbe,aAAXrgV,EAAE6F,MAEFoF,GADAo1U,EAAWrgV,GACM89D,eAAe,GAAGvqB,QACnCp0C,KAAK4xB,SAAU,EACf1lB,EAAQg1U,EAASviR,eAAe,GAAGtqB,UAGnCnoC,EAAQrL,EAAEwzC,QACVvoC,EAAQjL,EAAEuzC,QACVp0C,KAAK4xB,QAA4B,UAAlB/wB,EAAEw/U,aAA6C,MAAlBx/U,EAAEw/U,aAElDrgV,KAAK+gV,WAAWj1U,EAAOI,GACvBlM,KAAKmiV,eAAethV,IACb,GAOXw6U,EAAMhgV,UAAU8mV,eAAiB,SAAUthV,GACvC,IAAIG,EAAUH,EAAEsG,OAUhB,OATAnH,KAAKwmB,QAAQu5S,IAAgB54T,OAAQnG,EAAQsC,GAAIyJ,EAAG/M,KAAK+sU,OAAQ//T,EAAGhN,KAAKgtU,SACzEhtU,KAAKqhV,aAAc,EACfrhV,KAAK4xB,UACL5xB,KAAKyhV,aAAa5gV,EAAGb,KAAK+sU,OAAQ/sU,KAAKgtU,OAAQhtU,KAAK4xB,SACpD5xB,KAAK0hV,YAAY7gV,EAAGb,KAAK+sU,OAAQ/sU,KAAKgtU,OAAQhtU,KAAK4xB,SACnD5xB,KAAKkiV,WAAY,IAAIliU,MAAOC,UAAY,KAE5CjgB,KAAK+yU,eAAernU,gBAAgB,aACpC1L,KAAK+N,OAAOvC,GAAQ4+E,cAAevpF,IAC5B,GAKXw6U,EAAMhgV,UAAUsS,WAAa,WACzB3N,KAAKivE,KAAO,IAAIy7B,GAChB1qG,KAAKoiV,qBACLpiV,KAAKg4G,aAAe,IAAIR,GAAKx3G,KAAKu/B,gBAAiBv/B,KAAKqiV,sBAAuBriV,KAAKgO,SAKxFqtU,EAAMhgV,UAAUinV,mBAAqB,SAAUC,EAAiBnoT,GAC5D,IAEIp5B,EAFAP,EAAa8sB,GAAWvtB,KAAKgB,QAAQsC,GAAK,2BAC1CqrD,EAAa3uD,KAAK42D,YAAY2rR,GAElB,OAAZnoT,IACAu0B,EAAWv0B,QAAUA,EACjB35B,GACA+sB,GAAcxtB,KAAKgB,QAAQsC,GAAK,eAAiBi/U,GACjDvhV,EAAUG,EAAc,OACxBnB,KAAKg+U,iBAAiBwE,kBAAkB7zR,EAAY4zR,EAAiBvhV,GACrEP,EAAWkB,YAAYX,EAAQoZ,SAAS,KAGxCpa,KAAKg+U,iBAAiBC,kBAAkB1wT,GAAWvtB,KAAKgB,QAAQsC,GAAK,yBAOjF+3U,EAAMhgV,UAAU+mV,mBAAqB,WACjCpiV,KAAKqiV,uBACDI,OAAQ,SACR5nJ,KAAM,OACN6nJ,QAAS,UACTC,IAAK,MACLC,MAAO,QACPC,UAAW,eAMnBxH,EAAMhgV,UAAUqgB,SAAW,WAEvB1b,KAAKq2B,WAAatH,GAAc/uB,KAAKkb,QAOzCmgU,EAAMhgV,UAAUw1F,gBAAkB,WAC9B,IAIIj+E,EAJA7S,EAAQC,KACR6xF,KACAjzE,EAAS5e,KAAK4e,OACdkkU,GAAmB,EAEnBC,GAAkB,EAClBC,GAAkB,EAClB1C,EAAUtgV,KAAKquE,aAoFnB,OAnFAruE,KAAK4tU,cAAiBhvT,EAAOniB,OAAS,IAAyB,UAAnBmiB,EAAO,GAAGlY,MAAuC,UAAnBkY,EAAO,GAAGlY,MAAqB,aAAe,YACpH1G,KAAK6xB,QAAQ4N,QACboyD,EAAQrtF,MACJ6sF,OAAQ,UACRpxF,MAAOD,QAGf4e,EAAOgZ,IAAI,SAAU56B,GACjB+C,EAAMkjV,SAAYljV,EAAMq2U,eAAe5+S,UAA4B,KAAfx6B,EAAMy6B,QAAkB13B,EAAMkjV,UAClFrwU,GAA4C,IAA/B5V,EAAM0J,KAAKnI,QAAQ,OAAgBvB,EAAM0J,KAAK6I,QAAQ,MAAO,IAAM,SAAWvS,EAAM0J,KAAO,SACxGq8U,EAAkB/lV,EAAM2yB,SAAS6H,SAAWurT,EAC5CC,EAAkBhmV,EAAM8vU,OAAO7rP,UAAUzpD,SAAWwrT,EAC/CnxP,EAAQz1D,KAAK,SAAU8mT,GACxB,OAAOA,EAAc7xP,SAAWz+E,KAEhCi/E,EAAQrtF,MACJ6sF,OAAQz+E,EACR3S,MAAOF,EAAO6e,KAGM,eAAxB7e,EAAM6tU,eACN/7O,EAAQrtF,MACJ6sF,OAAQr0F,EAAM4vU,SAAW,SACzB3sU,MAAOF,EAAO6e,OAI1B5e,KAAKmjV,qBAAqBtxP,GAC1B7xF,KAAKojV,qBAAqBvxP,GAC1BA,EAAU7xF,KAAKqjV,eAAexxP,GAC9BixP,EAAmB9iV,KAAK42D,YAAYx6B,KAAK,SAAUp/B,GAC/C,OAA0B,OAAlBA,EAAMo9B,UAEd2oT,GACAlxP,EAAQrtF,MACJ6sF,OAAQ,WACRpxF,MAAOD,KAAM4e,KAGjB5e,KAAKijV,UACLpxP,EAAQrtF,MACJ6sF,OAAQ,SACRpxF,MAAOD,QAGY,eAAvBA,KAAK4tU,gBAAmC0S,EAAQE,wBAC7CF,EAAQgD,yBAA2BhD,EAAQG,oBAAsBH,EAAQzC,aAC5EhsP,EAAQrtF,MACJ6sF,OAAQ,OACRpxF,MAAOD,KAAMA,KAAKquE,gBAElBiyQ,EAAQta,iBACRn0O,EAAQrtF,MACJ6sF,OAAQ,YACRpxF,MAAOD,SAIQ,SAAvBA,KAAKktU,eAAqD,eAAvBltU,KAAK4tU,eACxC5tU,KAAKktU,cAAc3uU,QAAQ,SAAW,GACtCszF,EAAQrtF,MACJ6sF,OAAQ,YACRpxF,MAAOD,QAGXgjV,GACAnxP,EAAQrtF,MACJ6sF,OAAQ,YACRpxF,MAAOD,KAAM4e,KAGjBkkU,GACAjxP,EAAQrtF,MACJ6sF,OAAQ,aACRpxF,MAAOD,QAGY,eAAvBA,KAAK4tU,eAAkC5tU,KAAKs0U,UAAU70S,QACtDoyD,EAAQrtF,MACJ6sF,OAAQ,YACRpxF,MAAOD,QAGR6xF,GAEXwpP,EAAMhgV,UAAUgoV,eAAiB,SAAUxxP,GACvC,IAAI80O,KACJA,EAAgBniU,KAAKxE,KAAKw0B,cAC1BmyS,EAAgBniU,KAAKxE,KAAKsnU,cAQ1B,IAAK,IANDic,GAAkB,EAClBC,GAAkB,EAClBC,GAAqB,EACrBC,GAAmB,EACnBC,GAA0B,EAC1BC,GAAoB,EACfxlV,EAAK,EAAGylV,EAPjBld,EAAkBA,EAAgBpsT,OAAOva,KAAKynE,MAOQrpE,EAAKylV,EAAkBpnV,OAAQ2B,IAAM,CACvF,IAAI+X,EAAO0tU,EAAkBzlV,GAC7BmlV,EAAqC,aAAnBptU,EAAK+b,WAA4BqxT,EACnDC,EAAqC,aAAnBrtU,EAAK+b,WAA4BsxT,EACnDC,EAAwC,gBAAnBttU,EAAK+b,WAA+BuxT,EACzDE,EAA6C,qBAAnBxtU,EAAK+b,WAAoCyxT,EACnED,EAAmB1jV,KAAK8jV,wBAAwB3tU,EAAK4tU,aAAeL,EACpEE,EAAoBztU,EAAK4sT,iBAAiBtmU,OAAS,GAAKmnV,EAsC5D,OApCIL,GACA1xP,EAAQrtF,MACJ6sF,OAAQ,WACRpxF,MAAOD,QAGXwjV,GACA3xP,EAAQrtF,MACJ6sF,OAAQ,WACRpxF,MAAOD,QAGXyjV,GACA5xP,EAAQrtF,MACJ6sF,OAAQ,cACRpxF,MAAOD,QAGX0jV,GACA7xP,EAAQrtF,MACJ6sF,OAAQ,YACRpxF,MAAOD,QAGX4jV,GACA/xP,EAAQrtF,MACJ6sF,OAAQ,kBACRpxF,MAAOD,QAGX2jV,GACA9xP,EAAQrtF,MACJ6sF,OAAQ,mBACRpxF,MAAOD,QAGR6xF,GAEXwpP,EAAMhgV,UAAU8nV,qBAAuB,SAAUtxP,GAC7C,IAAImyP,EACAC,EACA/G,EAAal9U,KAAKk9U,WACtB,GAAIl9U,KAAKk9U,WAAWzgV,OAAQ,CACxBo1F,EAAQrtF,MACJ6sF,OAAQ,aACRpxF,MAAOD,QAEXk9U,EAAWtlT,IAAI,SAAU8lT,GACrBsG,EAAaA,GAAiC,SAAnBtG,EAAUh3U,KACrCu9U,EAAaA,GAAiC,mBAAnBvG,EAAUh3U,OAErCs9U,GACAnyP,EAAQrtF,MACJ6sF,OAAQ,eACRpxF,MAAOD,QAGXikV,GACApyP,EAAQrtF,MACJ6sF,OAAQ,kBACRpxF,MAAOD,QAGf,IAAK,IAAI5B,EAAK,EAAGyE,EAAK7C,KAAKk9U,WAAY9+U,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACzD,IAAIs/U,EAAY76U,EAAGzE,GACnByzF,EAAQrtF,MACJ6sF,OAAQqsP,EAAUh3U,KAAO,YACzBzG,MAAOD,WAKvBq7U,EAAMhgV,UAAU+nV,qBAAuB,SAAUvxP,GAkB7C,IAAK,IAjBDqyP,EACAC,EACAllV,EAAU,SAAU2f,GACpB,IAAIwlU,EACJxlU,EAAOmyT,WAAWn5S,IAAI,SAAUysT,GAC5BD,EAAeA,GAAgBC,EAAUvX,OAAOt1S,QAChD0sT,KAASA,GAA8B,WAAnBG,EAAU39U,MAAwC,kBAAnB29U,EAAU39U,MAC7Dy9U,KAAWA,GAAaD,KAExBE,GACAvyP,EAAQrtF,MACJ6sF,OAAQ,SACRpxF,MAAOstG,EAAQ3uF,MAIvB2uF,EAASvtG,KACJ5B,EAAK,EAAGyE,EAAK7C,KAAK4e,OAAQxgB,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAErDa,EADa4D,EAAGzE,KAGhB8lV,GAAUC,IACVtyP,EAAQrtF,MACJ6sF,OAAQ,YACRpxF,MAAOD,QAGXkkV,GACAryP,EAAQrtF,MACJ6sF,OAAQ,aACRpxF,MAAOD,QAGXmkV,GACAtyP,EAAQrtF,MACJ6sF,OAAQ,eACRpxF,MAAOD,SAInBq7U,EAAMhgV,UAAUyoV,wBAA0B,SAAUQ,GAEhD,IAAK,IADD9sT,GAAU,EACLp5B,EAAK,EAAGmmV,EAAeD,EAAYlmV,EAAKmmV,EAAa9nV,OAAQ2B,IAAM,CAExE,GADgBmmV,EAAanmV,GACfo5B,QAAS,CACnBA,GAAU,EACV,OAGR,OAAOA,GAOX6jT,EAAMhgV,UAAUqkV,UAAY,WACpBl/U,SAASosB,eAAe5sB,KAAKgB,QAAQsC,GAAK,uBAC1CiB,EAAO/D,SAASosB,eAAe5sB,KAAKgB,QAAQsC,GAAK,uBAErD,IAAIkhV,EAAe,EAOnB,GANIxkV,KAAK8yE,YAAc9yE,KAAK8yE,WAAW2xQ,cACnCzkV,KAAK8yE,WAAW2xQ,YAAYnhV,GAAK,GACjCtD,KAAK8yE,WAAW2xQ,YAAYjhV,aAAa,UAAW,KACpDxD,KAAKsxB,UAAU3vB,YAAY3B,KAAK8yE,WAAW2xQ,aAC3CD,EAAe,GAEfxkV,KAAKsxB,UAAW,CAChB,KAAOtxB,KAAKsxB,UAAU/f,WAAW9U,OAAS+nV,GACtCxkV,KAAKsxB,UAAUhsB,YAAYtF,KAAKsxB,UAAU1U,aAEzC5c,KAAKsxB,UAAUwJ,iBAAmB96B,KAAKsxB,UAAU7wB,YAClD8D,EAAOvE,KAAKsxB,aAIxB+pT,EAAMhgV,UAAUkgV,kBAAoB,SAAUmJ,GAC1C,IAAK,IAAItmV,EAAK,EAAGumV,EAAgBD,EAAatmV,EAAKumV,EAAcloV,OAAQ2B,IAAM,CAChEumV,EAAcvmV,GACpBqpE,UAQb4zQ,EAAMhgV,UAAUiqU,YAAc,WAC1B,IAAInvT,EAAOnW,KAAKw0B,aAChBre,EAAKkd,KAAO,IAAI6C,QAAK/6B,OAAWA,EAAW,EAAG,IAC9Cgb,EAAOnW,KAAKsnU,cACPnI,YAAa,EAClBhpT,EAAKkd,KAAO,IAAI6C,QAAK/6B,OAAWA,EAAW,EAAG,GAC9C,IAAK,IAAIiD,EAAK,EAAGyE,EAAK7C,KAAKynE,KAAMrpE,EAAKyE,EAAGpG,OAAQ2B,IAAM,EAEnD+X,EADWtT,EAAGzE,IAETi1B,KAAO,IAAI6C,QAAK/6B,OAAWA,EAAW,EAAG,GAC9Cgb,EAAKgpT,YAAa,IAG1Bkc,EAAMhgV,UAAUupV,WAAa,SAAUzuU,GACnC,SAAKA,EAAKshB,OAASthB,EAAK+b,aAGxBlyB,KAAKu7U,kBAAkBv7U,KAAK+9D,SAC5B/9D,KAAKu7U,kBAAkBv7U,KAAKu4R,MAC5Bv4R,KAAK87U,uBACL97U,KAAK++E,eACE,IAOXs8P,EAAMhgV,UAAUmsF,kBAAoB,SAAUiF,EAASC,GACnD,IAAI7+D,GAAW,EACXg3T,GAAgB,EACpB,IAAoC,IAAhCvmV,OAAOhB,KAAKmvF,GAAShwF,QAA4C,eAA5B6B,OAAOhB,KAAKmvF,GAAS,MAI9DzsF,KAAK0zU,eAAgB,GAChB1zU,KAAKqxB,aAAa,CACnB,IAAK,IAAIjzB,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKmvF,GAAUruF,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAE9D,OADWyE,EAAGzE,IAEV,IAAK,eACDymV,EAAgB7kV,KAAK4kV,WAAWn4P,EAAQj4D,cACpCi4D,EAAQj4D,aAAaouS,qBACrB/0S,GAAW,GAEV4+D,EAAQj4D,aAAaswT,mBACtBD,GAAgB,GAEpB,MACJ,IAAK,eACDA,EAAgB7kV,KAAK4kV,WAAWn4P,EAAQ66O,cACpC76O,EAAQ66O,aAAa1E,qBACrB/0S,GAAW,GAEV4+D,EAAQ66O,aAAawd,mBACtBD,GAAgB,GAEpB,MACJ,IAAK,OACD,IAAK,IAAI5gV,EAAK,EAAGwG,EAAKnM,OAAOhB,KAAKmvF,EAAQhlB,MAAOxjE,EAAKwG,EAAGhO,OAAQwH,IAAM,CACnE,IAAIgO,EAAQxH,EAAGxG,GACf4gV,EAAgBA,GAAiB7kV,KAAK4kV,WAAWn4P,EAAQhlB,KAAKx1D,IACzDw6E,EAAQhlB,KAAKx1D,GAAO6yU,mBACrBD,GAAgB,GAGxB,MACJ,IAAK,SACL,IAAK,QACD7kV,KAAKy7U,iBACLoJ,GAAgB,EAChB,MACJ,IAAK,QACDA,GAAgB,EAChB,MACJ,IAAK,aACGp4P,EAAQ/rD,aAAe+rD,EAAQ/rD,WAAW5T,MAAQ2/D,EAAQ/rD,WAAWN,cACrEykT,GAAgB,EAGhBh3T,GAAW,EAEf,MACJ,IAAK,SACDA,GAAW,EACX,MACJ,IAAK,SAID,IAAK,IAHDhsB,EAAM7B,KAAK4e,OAAOniB,OAClBsoV,GAAgB,EAChBnmU,OAAS,EACJziB,EAAI,EAAGA,EAAI0F,EAAK1F,KACrByiB,EAAS6tE,EAAQ7tE,OAAOziB,MACTyiB,EAAO2kD,YAAc3kD,EAAOswT,OAAStwT,EAAOuU,OAASvU,EAAOkO,MACvElO,EAAO6c,MAAQ7c,EAAO8c,KAAO9c,EAAOld,MAAQkd,EAAO3c,SACnD8iV,GAAgB,GAGpBA,IACA/kV,KAAK++E,aAAY,GACjB8lQ,GAAgB,GAEpB,MACJ,IAAK,gBACGp4P,EAAQpe,aAAa23P,iBAAmBt5O,EAAQre,aAAa23P,mBAC7D6e,GAAgB,GAEpBh3T,GAAW,EACX,MACJ,IAAK,aACDA,GAAW,EACX,MACJ,IAAK,YACG4+D,EAAQi+O,UAAUpmS,QAAUmoD,EAAQi+O,UAAUpmS,OAAOtuB,QACrD6uU,GAAgB,GAEpBh3T,GAAW,EACX,MACJ,IAAK,iBACI4+D,EAAQ2pP,eAAe3mT,YAAeg9D,EAAQ2pP,eAAe3oU,UAC9Do3U,GAAgB,GAEpBh3T,GAAW,EACX,MACJ,IAAK,WACD7tB,KAAK27U,yBACL9tT,GAAW,EACX,MACJ,IAAK,sBACL,IAAK,gBACG7tB,KAAKmtU,iBAAmB1gP,EAAQygP,gBAA4D,IAA3CzgP,EAAQygP,cAAc3uU,QAAQ,SAC/EyB,KAAKmtU,gBAAgBiR,gBAAgBp+U,KAAM0sF,EAAQwgP,eAEvD,MACJ,IAAK,gBACGltU,KAAKmtU,kBAAoB1gP,EAAQu4P,eAAiBhlV,KAAKmtU,gBAAgB+Q,oBAAoBzhV,OAAS,GACpGuD,KAAKmtU,gBAAgBiR,gBAAgBp+U,KAAM0sF,EAAQwgP,eAEvD,MACJ,IAAK,QACDltU,KAAK0zU,eAAgB,EACrB,MACJ,IAAK,SACL,IAAK,eACDvoP,EAAO9vF,UAAU62D,QAAQ5wD,KAAKtB,MAC9B,MACJ,IAAK,UACDA,KAAKw7U,cAAc9O,oBAI1BmY,GAAiBh3T,IAClB7tB,KAAK0/U,YACL1/U,KAAKo8U,iBACLp8U,KAAKwmB,QAAQ,UAAYqK,MAAO7wB,QAEhC6kV,IACA7kV,KAAK0/U,YACL1/U,KAAKslU,cACLtlU,KAAKgxU,eACLhxU,KAAKwmB,QAAQ,UAAYqK,MAAO7wB,UAI5C6qF,IACI3jF,EAAS,OACVm0U,EAAMhgV,UAAW,aAAS,GAC7BwvF,IACI3jF,EAAS,OACVm0U,EAAMhgV,UAAW,cAAU,GAC9BwvF,IACI3jF,EAAS,KACVm0U,EAAMhgV,UAAW,aAAS,GAC7BwvF,IACI9iF,EAAQotR,GAAMknC,eAAgBM,KAC/B0e,EAAMhgV,UAAW,kBAAc,GAClCwvF,IACI9iF,KAAY+0T,KACbue,EAAMhgV,UAAW,cAAU,GAC9BwvF,IACI9iF,GAAUyuB,MAAO,UAAWxgB,MAAO,GAAK4mT,KACzCye,EAAMhgV,UAAW,cAAU,GAC9BwvF,IACI3jF,EAAS,OACVm0U,EAAMhgV,UAAW,kBAAc,GAClCwvF,IACI9iF,GAAUu8B,QAAU9N,MAAO,KAAMxgB,MAAO,IAAOyZ,WAAY,eAAiBotS,KAC7Ewe,EAAMhgV,UAAW,iBAAa,GACjCwvF,IACI9iF,GAAU0vB,KAAM,gBAAkB6pS,KACnC+Z,EAAMhgV,UAAW,oBAAgB,GACpCwvF,IACI9iF,GAAU0vB,KAAM,gBAAkB6pS,KACnC+Z,EAAMhgV,UAAW,oBAAgB,GACpCwvF,IACIxiF,OAAiBm4T,KAClB6a,EAAMhgV,UAAW,YAAQ,GAC5BwvF,IACIxiF,OAAiB61D,KAClBm9Q,EAAMhgV,UAAW,eAAW,GAC/BwvF,IACIxiF,OAAiBi5T,KAClB+Z,EAAMhgV,UAAW,YAAQ,GAC5BwvF,IACIxiF,OAAiB8mU,KAClBkM,EAAMhgV,UAAW,cAAU,GAC9BwvF,IACIxiF,OAAiB83T,KAClBkb,EAAMhgV,UAAW,mBAAe,GACnCwvF,IACI3jF,OACDm0U,EAAMhgV,UAAW,gBAAY,GAChCwvF,IACI3jF,EAAS,aACVm0U,EAAMhgV,UAAW,aAAS,GAC7BwvF,IACI9iF,KAAYo1T,KACbke,EAAMhgV,UAAW,eAAW,GAC/BwvF,IACI9iF,KAAYozU,KACbE,EAAMhgV,UAAW,iBAAa,GACjCwvF,IACI9iF,KAAY6tU,KACbyF,EAAMhgV,UAAW,sBAAkB,GACtCwvF,IACI9iF,KAAYqzU,KACbC,EAAMhgV,UAAW,oBAAgB,GACpCwvF,IACI3jF,EAAS,SACVm0U,EAAMhgV,UAAW,qBAAiB,GACrCwvF,IACI3jF,GAAS,IACVm0U,EAAMhgV,UAAW,qBAAiB,GACrCwvF,IACIxiF,KAAe00T,KAChBse,EAAMhgV,UAAW,2BAAuB,GAC3CwvF,IACI3jF,GAAS,IACVm0U,EAAMhgV,UAAW,4BAAwB,GAC5CwvF,IACI3jF,GAAS,IACVm0U,EAAMhgV,UAAW,oBAAgB,GACpCwvF,IACIxiF,KAAeqxU,KAChB2B,EAAMhgV,UAAW,kBAAc,GAClCwvF,IACI3jF,EAAS,OACVm0U,EAAMhgV,UAAW,mBAAe,GACnCwvF,IACI3jF,EAAS,IACVm0U,EAAMhgV,UAAW,gBAAY,GAChCwvF,IACI3jF,GAAS,IACVm0U,EAAMhgV,UAAW,iCAA6B,GACjDwvF,IACI/hF,KACDuyU,EAAMhgV,UAAW,eAAW,GAC/BwvF,IACI/hF,KACDuyU,EAAMhgV,UAAW,wBAAoB,GACxCwvF,IACI/hF,KACDuyU,EAAMhgV,UAAW,mBAAe,GACnCwvF,IACI/hF,KACDuyU,EAAMhgV,UAAW,cAAU,GAC9BwvF,IACI/hF,KACDuyU,EAAMhgV,UAAW,YAAQ,GAC5BwvF,IACI/hF,KACDuyU,EAAMhgV,UAAW,yBAAqB,GACzCwvF,IACI/hF,KACDuyU,EAAMhgV,UAAW,oBAAgB,GACpCwvF,IACI/hF,KACDuyU,EAAMhgV,UAAW,kBAAc,GAClCwvF,IACI/hF,KACDuyU,EAAMhgV,UAAW,mBAAe,GACnCwvF,IACI/hF,KACDuyU,EAAMhgV,UAAW,oBAAgB,GACpCwvF,IACI/hF,KACDuyU,EAAMhgV,UAAW,uBAAmB,GACvCwvF,IACI/hF,KACDuyU,EAAMhgV,UAAW,2BAAuB,GAC3CwvF,IACI/hF,KACDuyU,EAAMhgV,UAAW,4BAAwB,GAC5CwvF,IACI/hF,KACDuyU,EAAMhgV,UAAW,qBAAiB,GACrCwvF,IACI/hF,KACDuyU,EAAMhgV,UAAW,sBAAkB,GACtCwvF,IACI/hF,KACDuyU,EAAMhgV,UAAW,uBAAmB,GACvCwvF,IACI/hF,KACDuyU,EAAMhgV,UAAW,kBAAc,GAClCwvF,IACI/hF,KACDuyU,EAAMhgV,UAAW,iBAAa,GACjCwvF,IACI/hF,KACDuyU,EAAMhgV,UAAW,uBAAmB,GACvCwvF,IACI/hF,KACDuyU,EAAMhgV,UAAW,sBAAkB,GACtCwvF,IACI/hF,KACDuyU,EAAMhgV,UAAW,oBAAgB,GACpCwvF,IACI/hF,KACDuyU,EAAMhgV,UAAW,oBAAgB,GACpCwvF,IACI/hF,KACDuyU,EAAMhgV,UAAW,oBAAgB,GACpCwvF,IACI3jF,EAAS,QACVm0U,EAAMhgV,UAAW,oBAAgB,GACpCggV,EAAQxwP,IACJzhF,GACDiyU,IAEL9vO,ICjoDEjhB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAexCs6P,GAA8B,SAAU95P,GAExC,SAAS85P,IACL,OAAkB,OAAX95P,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAuH/D,OAzHAsqF,GAAU26P,EAAc95P,GAOxB85P,EAAa5pV,UAAU6pV,8BAAgC,SAAU/uU,EAAM2W,EAAMvvB,EAAOshB,EAAK8iT,QACrE,IAAZA,IAAsBA,GAAU,GACpC,IAKIx/T,EAJA+1E,EAAY,IAAIl4D,KAAKziB,GACrB46E,EAAU,IAAIn4D,KAAKnB,GAEnBsmU,EAAa94U,KAAKE,KAAK2rE,EAAUj4D,UAAYk4D,EAAQl4D,WAJ5C,OAMb9J,EAAKivU,mBAAqBjvU,EAAK0vD,aAE/B,OADW1vD,EAAK0vD,cAEZ,IAAK,QACD1jE,EAAWnC,KAAKw9T,6BAA6BrnT,EAAMgvU,EAAY,IAAKr4T,GACpE,MACJ,IAAK,UACD3qB,EAAWnC,KAAKw9T,6BAA6BrnT,EAAOgvU,EAAY,IAAO,EAAGr4T,GAC1E,MACJ,IAAK,SACD3qB,EAAWnC,KAAKw9T,6BAA6BrnT,EAAMgvU,EAAY,GAAIr4T,GACnE,MACJ,IAAK,QACD3qB,EAAWnC,KAAKw9T,6BAA6BrnT,EAAMgvU,EAAY,EAAGr4T,GAClE,MACJ,IAAK,OACD3qB,EAAWnC,KAAKw9T,6BAA6BrnT,EAAMgvU,EAAWr4T,GAC9D,MACJ,IAAK,QACD3qB,EAAWnC,KAAKw9T,6BAA6BrnT,EAAkB,GAAZgvU,EAAgBr4T,GACnE,MACJ,IAAK,UACD3qB,EAAWnC,KAAKw9T,6BAA6BrnT,EAAkB,GAAZgvU,EAAiB,GAAIr4T,GACxE,MACJ,IAAK,UACD3qB,EAAWnC,KAAKw9T,6BAA6BrnT,EAAkB,GAAZgvU,EAAiB,GAAK,GAAIr4T,GAC7E,MACJ,IAAK,OAED,OADA3qB,EAAWnC,KAAKw9T,6BAA6BrnT,EAAMgvU,EAAY,IAAKr4T,KACpD,GACZ3W,EAAKivU,mBAAqB,QACnBjjV,IAEXA,EAAWnC,KAAKw9T,6BAA6BrnT,EAAOgvU,EAAY,IAAO,EAAGr4T,KAC1D,IAAM60S,GAClBxrT,EAAKivU,mBAAqB,UACnBjjV,IAEXA,EAAWnC,KAAKw9T,6BAA6BrnT,EAAMgvU,EAAY,GAAIr4T,KACnD,GACZ3W,EAAKivU,mBAAqB,SACnBjjV,IAEXA,EAAWnC,KAAKw9T,6BAA6BrnT,EAAMgvU,EAAY,EAAGr4T,KAClD,IAAM60S,GAClBxrT,EAAKivU,mBAAqB,QACnBjjV,IAEXA,EAAWnC,KAAKw9T,6BAA6BrnT,EAAMgvU,EAAWr4T,KAC9C,GACZ3W,EAAKivU,mBAAqB,OACnBjjV,IAEXA,EAAWnC,KAAKw9T,6BAA6BrnT,EAAkB,GAAZgvU,EAAgBr4T,KACnD,GACZ3W,EAAKivU,mBAAqB,QACnBjjV,IAEXA,EAAWnC,KAAKw9T,6BAA6BrnT,EAAkB,GAAZgvU,EAAiB,GAAIr4T,KACxD,GACZ3W,EAAKivU,mBAAqB,UACnBjjV,IAEXA,EAAWnC,KAAKw9T,6BAA6BrnT,EAAkB,GAAZgvU,EAAiB,GAAK,GAAIr4T,GAC7E3W,EAAKivU,mBAAqB,UACnBjjV,GAEf,OAAOA,GAOX8iV,EAAa5pV,UAAUgqV,YAAc,SAAUlvU,GAC3C,IACI0vD,EAAe1vD,EAAKivU,mBACxB,OAAIjvU,EAAKurD,SACEvrD,EAAKurD,SAEK,UAAjBmE,EACW1vD,EAAKwrT,QAAU,OAAS,IAEb,YAAjB97P,EACM,OAEW,WAAjBA,EACM1vD,EAAKwrT,QAAU,OAAS,MAEb,UAAjB97P,EACM,MAEW,SAAjBA,EACM1vD,EAAKwrT,QAAU,MAAQ,OAEZ,UAAjB97P,EACM1vD,EAAKwrT,QAAU,MAAQ,IAEZ,YAAjB97P,EACM1vD,EAAKwrT,QAAU,MAAQ,KAGvBxrT,EAAKwrT,QAAU,MAAQ,OAInCsjB,GACT1nB,IC1IEjzO,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAkBxC26P,GAA0B,SAAUn6P,GAMpC,SAASm6P,EAASz0T,GACd,OAAOs6D,EAAO7pF,KAAKtB,KAAM6wB,IAAU7wB,KAuSvC,OA7SAsqF,GAAUg7P,EAAUn6P,GAYpBm6P,EAASjqV,UAAU4iU,0BAA4B,SAAUnxS,EAAM3W,GAC3DnW,KAAKk+T,eAAe/nT,EAAM2W,GAC1B9sB,KAAK29T,eAAexnT,EAAM2W,GAC1B9sB,KAAKm+T,kBAAkBhoT,EAAM2W,GAC7B9sB,KAAKo+T,uBAAuBjoT,EAAMnW,KAAK6wB,QAM3Cy0T,EAASjqV,UAAUsiU,eAAiB,SAAUxnT,EAAM2W,GAChD,IAAIipE,GACAr0B,SAAU,OACVh7D,KAAM,YAEN8gG,EAAaxnG,KAAK6wB,MAAMo+C,KAAK47B,cAAc9U,GAC3CwxO,EAAgBvnU,KAAK6wB,MAAMo+C,KAAK07B,cAAc5U,GAE3B,OAAlB5/E,EAAY,QACbnW,KAAK+f,IAAMC,KAAKoxC,MAAMo2C,EAAW+/N,EAAc,IAAIvnT,KAAKy/C,GAASrO,MAAM45H,WAAY/iK,IAAK9R,EAAK8iB,UAAWhR,QAEtF,OAAbjoB,KAAK+f,KAAgB/f,KAAK+f,MAAQuX,OAAOymS,oBAC9C/9T,KAAK+f,IAAMC,KAAKoxC,MAAMo2C,EAAW+/N,EAAc,IAAIvnT,KAAK,KAAM,EAAG,OAG9C,OAAlB7J,EAAY,QACbnW,KAAKsM,IAAM0T,KAAKoxC,MAAMo2C,EAAW+/N,EAAc,IAAIvnT,KAAKy/C,GAASrO,MAAM45H,WAAY/iK,IAAK9R,EAAK+iB,UAAWjR,QAEtF,OAAbjoB,KAAKsM,KAAgBtM,KAAKsM,MAAQgrB,OAAO0mS,oBAC9Ch+T,KAAKsM,IAAM0T,KAAKoxC,MAAMo2C,EAAW+/N,EAAc,IAAIvnT,KAAK,KAAM,EAAG,OAEjEhgB,KAAK+f,MAAQ/f,KAAKsM,MAClBtM,KAAKsM,IAAMtM,KAAKsM,IAAM,OACtBtM,KAAK+f,IAAM/f,KAAK+f,IAAM,QAE1B5J,EAAK0nT,eACL1nT,EAAK2nT,YAAc,IAAIV,GAAYp9T,KAAK+f,IAAK/f,KAAKsM,KAClD,IAAIi5U,EAAmBvlV,KAAKklV,8BAA8B/uU,EAAM2W,EAAM3W,EAAK2nT,YAAYvgU,MAAO4Y,EAAK2nT,YAAYj/S,KAC1G1I,EAAKhU,SAINgU,EAAK0nT,YAAY17T,SAAWgU,EAAKhU,SAHjCgU,EAAK0nT,YAAY17T,SAAWojV,EAKhCpvU,EAAK0nT,YAAY99S,IAAM5J,EAAK2nT,YAAYvgU,MACxC4Y,EAAK0nT,YAAYvxT,IAAM6J,EAAK2nT,YAAYj/S,KAM5CymU,EAASjqV,UAAU8iU,kBAAoB,SAAUhoT,EAAM2W,GACnD9sB,KAAK+f,IAAO5J,EAAK0nT,YAAe,IAChC79T,KAAKsM,IAAO6J,EAAK0nT,YAAe,IAChC,IAAI5kS,EACAC,EACA/2B,EAAWgU,EAAK0nT,YAAY17T,SAChC,IAAK62B,GAAS7iB,GAAO,CACjB,IAAIooT,EAAepoT,EAAKsoT,gBAAgBz+T,KAAK6wB,OAC7CoI,EAAU,IAAIjZ,KAAKhgB,KAAK+f,KACxBmZ,EAAU,IAAIlZ,KAAKhgB,KAAKsM,KACxB,IAAIu5D,EAAe1vD,EAAKivU,mBACxB,GAAqB,SAAjB7mB,EACAv+T,KAAK+f,IAAMkZ,EAAQhZ,UACnBjgB,KAAKsM,IAAM4sB,EAAQjZ,eAElB,GAAqB,eAAjBs+S,GAAkD,UAAjBA,EACtC,OAAQ14P,GACJ,IAAK,QACD7lE,KAAKwlV,QAAQvsT,EAASC,EAASqlS,EAAcp8T,GAC7C,MACJ,IAAK,SACDnC,KAAKimE,SAAShtC,EAASC,EAASqlS,EAAcp8T,GAC9C,MACJ,IAAK,OACDnC,KAAK4jE,OAAO3qC,EAASC,EAASqlS,EAAcp8T,GAC5C,MACJ,IAAK,QACDnC,KAAKylV,QAAQxsT,EAASC,EAASqlS,EAAcp8T,GAC7C,MACJ,IAAK,UACD,IAAIklG,EAAUpuE,EAAQqtC,aAAenkE,EAAYA,EAC7CujV,EAAYxsT,EAAQotC,cAAgBrtC,EAAQqtC,aAAe+gC,GAC1C,UAAjBk3N,GACAv+T,KAAK+f,IAAM,IAAKC,KAAKiZ,EAAQ8sC,cAAe9sC,EAAQgtC,WAAYhtC,EAAQktC,UAAWltC,EAAQmtC,WAAYihC,EAAQ,GAAIpnF,UACnHjgB,KAAKsM,IAAM,IAAK0T,KAAKkZ,EAAQ6sC,cAAe7sC,EAAQ+sC,WAAY/sC,EAAQitC,UAAWjtC,EAAQktC,WAAYs/Q,EAAW,IAAKzlU,YAGvHjgB,KAAK+f,IAAM,IAAKC,KAAKiZ,EAAQ8sC,cAAe7sC,EAAQ+sC,WAAYhtC,EAAQktC,UAAWltC,EAAQmtC,WAAYihC,GAAWllG,EAAW,GAAI8d,UACjIjgB,KAAKsM,IAAM,IAAK0T,KAAKkZ,EAAQ6sC,cAAe7sC,EAAQ+sC,WAAY/sC,EAAQitC,UAAWjtC,EAAQktC,WAAYs/Q,IAAwB,GAAIzlU,WAEvI,MACJ,IAAK,UACD,IAAIphB,EAAUo6B,EAAQ8+C,aAAe51E,EAAYA,EAC7CwjV,EAAYzsT,EAAQ6+C,cAAgB9+C,EAAQ8+C,aAAel5E,GAC1C,UAAjB0/T,GACAv+T,KAAK+f,IAAM,IAAKC,KAAKiZ,EAAQ8sC,cAAe9sC,EAAQgtC,WAAYhtC,EAAQktC,UAAWltC,EAAQmtC,WAAYntC,EAAQqtC,aAAcznE,EAAQ,GAAIohB,UACzIjgB,KAAKsM,IAAM,IAAK0T,KAAKkZ,EAAQ6sC,cAAe7sC,EAAQ+sC,WAAY/sC,EAAQitC,UAAWjtC,EAAQktC,WAAYltC,EAAQotC,aAAcq/Q,EAAW,GAAI1lU,YAG5IjgB,KAAK+f,IAAM,IAAKC,KAAKiZ,EAAQ8sC,cAAe9sC,EAAQgtC,WAAYhtC,EAAQktC,UAAWltC,EAAQmtC,WAAYntC,EAAQqtC,aAAcznE,GAAWsD,EAAW,GAAI8d,UACvJjgB,KAAKsM,IAAM,IAAK0T,KAAKkZ,EAAQ6sC,cAAe7sC,EAAQ+sC,WAAY/sC,EAAQitC,UAAWjtC,EAAQktC,WAAYltC,EAAQotC,aAAcq/Q,IAAwB,GAAI1lU,YAM7K9J,EAAK0nT,YAAY99S,KAAO5J,EAAK8iB,QAAmBj5B,KAAK+f,KACrD5J,EAAK0nT,YAAYvxT,KAAO6J,EAAK+iB,QAAmBl5B,KAAKsM,KACrD6J,EAAK0nT,YAAY5oS,MAAS9e,EAAK0nT,YAAYvxT,IAAM6J,EAAK0nT,YAAY99S,IAClE5J,EAAK2nT,YAAc,IAAIV,GAAYjnT,EAAK0nT,YAAY99S,IAAK5J,EAAK0nT,YAAYvxT,KAC1EtM,KAAK6+T,sBAAsB/xS,EAAM3W,IAErCmvU,EAASjqV,UAAUmqV,QAAU,SAAUvsT,EAASC,EAASqlS,EAAcp8T,GACnE,IAAIovM,EAAYt4K,EAAQ8sC,cACpB6/Q,EAAU1sT,EAAQ6sC,cACD,eAAjBw4P,GACAv+T,KAAK+f,IAAM,IAAKC,KAAKuxL,EAAYpvM,EAAU,EAAG,EAAG,EAAG,EAAG,GAAI8d,UAC3DjgB,KAAKsM,IAAM,IAAK0T,KAAK4lU,EAAUzjV,EAAU,EAAG,EAAG,EAAG,EAAG,GAAI8d,YAGzDjgB,KAAK+f,IAAM,IAAIC,KAAKuxL,EAAW,EAAG,EAAG,EAAG,EAAG,GAAGtxL,UAC9CjgB,KAAKsM,IAAM,IAAI0T,KAAK4lU,EAAS,GAAI,GAAI,GAAI,GAAI,IAAI3lU,YAGzDqlU,EAASjqV,UAAU4qE,SAAW,SAAUhtC,EAASC,EAASqlS,EAAcp8T,GACpE,IAAI65E,EAAQ/iD,EAAQgtC,WAChB4/Q,EAAW3sT,EAAQ+sC,WACF,UAAjBs4P,GACAv+T,KAAK+f,IAAM,IAAKC,KAAKiZ,EAAQ8sC,cAAeiW,EAAO,EAAG,EAAG,EAAG,GAAI/7D,UAChEjgB,KAAKsM,IAAM,IAAK0T,KAAKkZ,EAAQ6sC,cAAe8/Q,EAAU,IAAI7lU,KAAKkZ,EAAQ6sC,cAAe7sC,EAAQ+sC,WAAY,GAAGE,UAAW,GAAI,GAAI,IAAKlmD,YAGrIjgB,KAAK+f,IAAM,IAAKC,KAAKiZ,EAAQ8sC,cAAeiW,GAAU75E,EAAW,EAAG,EAAG,EAAG,GAAI8d,UAC9EjgB,KAAKsM,IAAM,IAAK0T,KAAKkZ,EAAQ6sC,cAAe8/Q,IAAoC,IAAbA,EAAiB,GAAK,GAAI,EAAG,EAAG,GAAI5lU,YAG/GqlU,EAASjqV,UAAUuoE,OAAS,SAAU3qC,EAASC,EAASqlS,EAAcp8T,GAClE,IAAIs1E,EAAMx+C,EAAQktC,UACd2/Q,EAAS5sT,EAAQitC,UACA,UAAjBo4P,GACAv+T,KAAK+f,IAAM,IAAKC,KAAKiZ,EAAQ8sC,cAAe9sC,EAAQgtC,WAAYwR,EAAK,EAAG,EAAG,GAAIx3D,UAC/EjgB,KAAKsM,IAAM,IAAK0T,KAAKkZ,EAAQ6sC,cAAe7sC,EAAQ+sC,WAAY6/Q,EAAQ,GAAI,GAAI,IAAK7lU,YAGrFjgB,KAAK+f,IAAM,IAAKC,KAAKiZ,EAAQ8sC,cAAe9sC,EAAQgtC,WAAYwR,GAAQt1E,EAAW,EAAG,EAAG,GAAI8d,UAC7FjgB,KAAKsM,IAAM,IAAK0T,KAAKkZ,EAAQ6sC,cAAe7sC,EAAQ+sC,WAAY6/Q,IAAqB,EAAG,EAAG,GAAI7lU,YAGvGqlU,EAASjqV,UAAUoqV,QAAU,SAAUxsT,EAASC,EAASqlS,EAAcp8T,GACnE,IAAImlG,EAAQruE,EAAQmtC,WAAajkE,EAAYA,EACzC01E,EAAU3+C,EAAQktC,YAAcntC,EAAQmtC,WAAakhC,GACpC,UAAjBi3N,GACAv+T,KAAK+f,IAAM,IAAKC,KAAKiZ,EAAQ8sC,cAAe9sC,EAAQgtC,WAAYhtC,EAAQktC,UAAWmhC,EAAM,EAAG,GAAIrnF,UAChGjgB,KAAKsM,IAAM,IAAK0T,KAAKkZ,EAAQ6sC,cAAe7sC,EAAQ+sC,WAAY/sC,EAAQitC,UAAW0R,EAAS,GAAI,IAAK53D,YAGrGjgB,KAAK+f,IAAM,IAAKC,KAAKiZ,EAAQ8sC,cAAe9sC,EAAQgtC,WAAYhtC,EAAQktC,UAAWmhC,GAASnlG,EAAW,EAAG,GAAI8d,UAC9GjgB,KAAKsM,IAAM,IAAK0T,KAAKkZ,EAAQ6sC,cAAe7sC,EAAQ+sC,WAAY/sC,EAAQitC,UAAW0R,IAAsB,EAAG,GAAI53D,YAOxHqlU,EAASjqV,UAAUwjU,sBAAwB,SAAU/xS,EAAM3W,GACvDA,EAAKwc,cACD5S,IAAK5J,EAAK0nT,YAAY99S,IACtBzT,IAAK6J,EAAK0nT,YAAYvxT,IACtBnK,SAAUgU,EAAK0nT,YAAY17T,SAC3B8yB,MAAO9e,EAAK0nT,YAAY5oS,QAExB9e,EAAKi4D,WAAa,GAAKj4D,EAAK2oT,aAAe,KAC3C3oT,EAAK0oT,sBAAsB/xS,GAC3B3W,EAAKwc,aAAaxwB,SAAYgU,EAAgC,4BAC1DnW,KAAKklV,8BAA8B/uU,EAAM2W,EAAM3W,EAAKwc,aAAa5S,IAAK5J,EAAKwc,aAAarmB,KACtF6J,EAAKwc,aAAaxwB,UAE5BgU,EAAK+e,iBAAmBl1B,KAAK4lE,yBAAyBzvD,EAAMA,EAAKwc,aAAa5S,IAAK5J,EAAKwc,aAAaxwB,UAAU8d,UACzG9J,EAAKwc,aAAa5S,IACxB5J,EAAK6oT,mBAAmBh/T,KAAK6wB,MAAO1a,EAAKwc,aAAa5S,IAAK5J,EAAKwc,aAAarmB,IAAK6J,EAAKwc,aAAaxwB,WAMxGmjV,EAASjqV,UAAU+iU,uBAAyB,SAAUjoT,EAAM0a,GACxD1a,EAAKgf,iBACL,IAAIwD,EAAexiB,EAAKwc,aAAa5S,IASrC,IARKiZ,GAAS7iB,KACVwiB,EAAe34B,KAAK+lV,gBAAgB5vU,EAAMwiB,EAAcxiB,EAAKwc,aAAaxwB,SAAUgU,EAAKivU,oBAAoBnlU,WAEjH9J,EAAK6lB,OAASnL,EAAMo+C,KAAK07B,eACrB3uE,OAAQ7lB,EAAKmlB,YAAa50B,KAAMqwB,GAAiB5gB,EAAK6vU,cAAetkR,SAAU1hE,KAAKqlV,YAAYlvU,KAEpGA,EAAK4f,WAAa5f,EAAK6lB,OAAO,IAAIhc,KAAK7J,EAAKwc,aAAa5S,MACzD5J,EAAK2f,SAAW3f,EAAK6lB,OAAO,IAAIhc,KAAK7J,EAAKwc,aAAarmB,MAChDqsB,GAAgBxiB,EAAKwc,aAAarmB,KACjC0lB,GAAO2G,EAAcxiB,EAAKwc,eAC1B+F,GAAmB7H,EAAO8H,EAAcxiB,EAAK6lB,OAAO,IAAIhc,KAAK2Y,IAAgBxiB,EAAK6f,WAAY7f,GAElGwiB,EAAe34B,KAAK4lE,yBAAyBzvD,EAAMwiB,EAAcxiB,EAAKwc,aAAaxwB,UAAU8d,UAE7F9J,EAAK+oT,kBACL/oT,EAAK+oT,iBAAiBl/T,KAAK6wB,QAInCy0T,EAASjqV,UAAUuqE,yBAA2B,SAAUzvD,EAAMnZ,EAAOmF,GACjE,IAAIpD,EAAS,IAAIihB,KAAKhjB,GACtBmF,EAAWkK,KAAKwmB,KAAK1wB,GAErB,OADmBgU,EAAKivU,oBAEpB,IAAK,QAED,OADArmV,EAAO+mE,YAAY/mE,EAAOgnE,cAAgB5jE,GACnCpD,EACX,IAAK,UAED,OADAA,EAAOinE,SAASjnE,EAAOknE,WAAc,EAAI9jE,GAClCpD,EACX,IAAK,SAED,OADAA,EAAOinE,SAASjnE,EAAOknE,WAAa9jE,GAC7BpD,EACX,IAAK,QAED,OADAA,EAAOmnE,QAAQnnE,EAAOonE,UAAwB,EAAXhkE,GAC5BpD,EACX,IAAK,OAED,OADAA,EAAOmnE,QAAQnnE,EAAOonE,UAAYhkE,GAC3BpD,EACX,IAAK,QAED,OADAA,EAAO0lE,SAAS1lE,EAAOqnE,WAAajkE,GAC7BpD,EACX,IAAK,UAED,OADAA,EAAOsnE,WAAWtnE,EAAOunE,aAAenkE,GACjCpD,EACX,IAAK,UAED,OADAA,EAAO+4E,WAAW/4E,EAAOg5E,aAAe51E,GACjCpD,EAEf,OAAOA,GAEXumV,EAASjqV,UAAU0qV,gBAAkB,SAAU5vU,EAAM8vU,EAAOC,EAAcrgR,GACtE,IAAIsgR,EAAU,IAAInmU,KAAKimU,GACvB,OAAQ9vU,EAAKivU,oBACT,IAAK,QACD,IAAIt8O,EAAOz8F,KAAK+S,MAAM/S,KAAK+S,MAAM+mU,EAAQpgR,cAAgBmgR,GAAgBA,GAEzE,OADAC,EAAU,IAAInmU,KAAK8oF,EAAMq9O,EAAQlgR,WAAYkgR,EAAQhgR,UAAW,EAAG,EAAG,GAE1E,IAAK,SACD,IAAI6V,EAAQ3vE,KAAK+S,MAAM/S,KAAK+S,MAAO+mU,EAAQlgR,WAAcigR,GAAgBA,GAEzE,OADAC,EAAU,IAAInmU,KAAKmmU,EAAQpgR,cAAeiW,EAAOmqQ,EAAQhgR,UAAW,EAAG,EAAG,GAE9E,IAAK,OACD,IAAIsR,EAAMprE,KAAK+S,MAAM/S,KAAK+S,MAAO+mU,EAAQhgR,UAAa+/Q,GAAgBA,GAEtE,OADAC,EAAU,IAAInmU,KAAKmmU,EAAQpgR,cAAeogR,EAAQlgR,WAAYwR,EAAK,EAAG,EAAG,GAE7E,IAAK,QACD,IAAI6vB,EAAOj7F,KAAK+S,MAAM/S,KAAK+S,MAAO+mU,EAAQ//Q,WAAc8/Q,GAAgBA,GAExE,OADAC,EAAU,IAAInmU,KAAKmmU,EAAQpgR,cAAeogR,EAAQlgR,WAAYkgR,EAAQhgR,UAAWmhC,EAAM,EAAG,GAE9F,IAAK,UACD,IAAIgoH,EAAUjjN,KAAK+S,MAAM/S,KAAK+S,MAAO+mU,EAAQ7/Q,aAAgB4/Q,GAAgBA,GAE7E,OADAC,EAAU,IAAInmU,KAAKmmU,EAAQpgR,cAAeogR,EAAQlgR,WAAYkgR,EAAQhgR,UAAWggR,EAAQ//Q,WAAYkpJ,EAAS,EAAG,GAErH,IAAK,UACD,IAAIC,EAAUljN,KAAK+S,MAAM/S,KAAK+S,MAAO+mU,EAAQpuQ,aAAgBmuQ,GAAgBA,GAE7E,OADAC,EAAU,IAAInmU,KAAKmmU,EAAQpgR,cAAeogR,EAAQlgR,WAAYkgR,EAAQhgR,UAAWggR,EAAQ//Q,WAAY+/Q,EAAQ7/Q,aAAcipJ,EAAS,GAG5I,OAAO42H,GAKXb,EAASjqV,UAAUkkC,cAAgB,WAI/B,MAAO,YAOX+lT,EAASjqV,UAAUiX,QAAU,SAAUue,KAKhCy0T,GACTL,ICjUE36P,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAiBxCy7P,GAA0B,SAAUj7P,GAMpC,SAASi7P,EAASv1T,GACd,OAAOs6D,EAAO7pF,KAAKtB,KAAM6wB,IAAU7wB,KA0FvC,OAhGAsqF,GAAU87P,EAAUj7P,GAYpBi7P,EAAS/qV,UAAU4iU,0BAA4B,SAAUnxS,EAAM3W,GAC3DnW,KAAKk+T,eAAe/nT,EAAM2W,GAC1B9sB,KAAK29T,eAAexnT,EAAM2W,GAC1B9sB,KAAKm+T,kBAAkBhoT,EAAM2W,GAC7B9sB,KAAKo+T,uBAAuBjoT,IAMhCiwU,EAAS/qV,UAAUsiU,eAAiB,SAAUxnT,EAAM2W,GAChD9sB,KAAK49T,sBAAsBznT,GAE3BA,EAAK0nT,eACA1nT,EAAKhU,SAINgU,EAAK0nT,YAAY17T,SAAWkK,KAAKwmB,KAAK1c,EAAKhU,UAH3CgU,EAAK0nT,YAAY17T,SAAWkK,KAAKC,IAAI,EAAGD,KAAK+S,MAAMjJ,EAAK2nT,YAAY7oS,MAAQkE,GAA+BrM,EAAM3W,KAKrHA,EAAK0nT,YAAY99S,IAAM5J,EAAK2nT,YAAYvgU,MACxC4Y,EAAK0nT,YAAYvxT,IAAM6J,EAAK2nT,YAAYj/S,IACxC1I,EAAK0nT,YAAY5oS,MAAQ9e,EAAK2nT,YAAY7oS,OAM9CmxT,EAAS/qV,UAAU8iU,kBAAoB,SAAUhoT,EAAM2W,GACnD,IAAImzG,EAAiC,iBAAxB9pH,EAAKke,gBAAkE,eAA7Br0B,KAAK6wB,MAAM+8S,cAAkC,GAAM,EACtG3tM,EAAQ,GACR9pH,EAAK0nT,YAAY99S,KAAOkgH,EACxB9pH,EAAK0nT,YAAYvxT,KAAO2zH,GAGxB9pH,EAAK0nT,YAAYvxT,KAAO6J,EAAK0nT,YAAYvxT,IAAM,EAAI,GAEvD6J,EAAK2nT,YAAc,IAAIV,GAAYjnT,EAAK0nT,YAAY99S,IAAK5J,EAAK0nT,YAAYvxT,KAC1E6J,EAAK0nT,YAAY5oS,MAAQ9e,EAAK2nT,YAAY7oS,MAC1Cj1B,KAAK6+T,sBAAsB/xS,EAAM3W,IAMrCiwU,EAAS/qV,UAAU+iU,uBAAyB,SAAUjoT,GAElDA,EAAKgf,iBACL,IAAIwD,EAAetsB,KAAKwmB,KAAK1c,EAAKwc,aAAa5S,MAC3C5J,EAAKi4D,WAAa,GAAKj4D,EAAK2oT,aAAe,KAC3CnmS,EAAexiB,EAAKwc,aAAa5S,IAAO5J,EAAKwc,aAAa5S,IAAM5J,EAAKwc,aAAaxwB,UAEtF,IAAI+R,EAGJ,IAFAiC,EAAK4f,WAAa5f,EAAKqxT,OAAOn7T,KAAKoxB,MAAMtnB,EAAKwc,aAAa5S,MAC3D5J,EAAK2f,SAAW3f,EAAKqxT,OAAOn7T,KAAK+S,MAAMjJ,EAAKwc,aAAarmB,MAClDqsB,GAAgBxiB,EAAKwc,aAAarmB,IAAKqsB,GAAgBxiB,EAAKwc,aAAaxwB,SACxE6vB,GAAO2G,EAAcxiB,EAAKwc,eAAiBxc,EAAKqxT,OAAO/qU,OAAS,IAChEyX,EAAW7H,KAAKoxB,MAAM9E,GACtBD,GAAmB14B,KAAK6wB,MAAO3c,EAAUiC,EAAKqxT,OAAOtzT,GAAYiC,EAAKqxT,OAAOtzT,GAAYA,EAAShH,WAAYiJ,EAAK6f,WAAY7f,IAGnIA,EAAK+oT,kBACL/oT,EAAK+oT,iBAAiBl/T,KAAK6wB,QAMnCu1T,EAAS/qV,UAAUkkC,cAAgB,WAI/B,MAAO,YAOX6mT,EAAS/qV,UAAUiX,QAAU,SAAUue,KAKhCu1T,GACTnB,ICnHE36P,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAgBxC07P,GAA6B,SAAUl7P,GAMvC,SAASk7P,EAAYx1T,GACjB,OAAOs6D,EAAO7pF,KAAKtB,KAAM6wB,IAAU7wB,KAgHvC,OAtHAsqF,GAAU+7P,EAAal7P,GAYvBk7P,EAAYhrV,UAAU4iU,0BAA4B,SAAUnxS,EAAM3W,GAC9DnW,KAAKk+T,eAAe/nT,EAAM2W,GAC1B9sB,KAAK29T,eAAexnT,EAAM2W,GAC1B9sB,KAAK6+T,sBAAsB/xS,EAAM3W,GACjCnW,KAAKo+T,uBAAuBjoT,EAAMnW,KAAK6wB,QAM3Cw1T,EAAYhrV,UAAUsiU,eAAiB,SAAUxnT,EAAM2W,GACnD9sB,KAAK49T,sBAAsBznT,GAC3BnW,KAAK+f,IAAM/f,KAAK+f,IAAM,EAAI,EAAI/f,KAAK+f,IACnC,IAAIqrT,EAAW75S,GAAQvxB,KAAK+f,IAAK5J,EAAKob,SACtC65S,EAAW3yO,SAAS2yO,GAAYA,EAAWprU,KAAK+f,IAChD,IAAIumU,EAAS/0T,GAAQvxB,KAAKsM,IAAK6J,EAAKob,SACpC+0T,EAAS7tP,SAAS2yO,GAAYkb,EAAStmV,KAAKsM,IAC5CtM,KAAK+f,IAAM1T,KAAK+S,MAAMgsT,EAAW,GACjCprU,KAAKsM,IAAMD,KAAKwmB,KAAKyzT,EAAS,GAC9BnwU,EAAK0nT,YAAY17T,SAAWgU,EAAKhU,UAAYnC,KAAKumV,yBAAyBvmV,KAAKsM,IAAMtM,KAAK+f,IAAK+M,EAAM3W,GACtGA,EAAK0nT,YAAY99S,IAAM/f,KAAK+f,IAC5B5J,EAAK0nT,YAAYvxT,IAAMtM,KAAKsM,IAC5B6J,EAAK0nT,YAAY5oS,MAAQj1B,KAAKsM,IAAMtM,KAAK+f,KAM7CsmU,EAAYhrV,UAAUwjU,sBAAwB,SAAU/xS,EAAM3W,GAC1DA,EAAKwc,cACDxwB,SAAUgU,EAAK0nT,YAAY17T,SAAUmK,IAAK6J,EAAK0nT,YAAYvxT,IAC3DyT,IAAK5J,EAAK0nT,YAAY99S,IAAKkV,MAAO9e,EAAK0nT,YAAY5oS,QAEnD9e,EAAKi4D,WAAa,GAAKj4D,EAAK2oT,aAAe,KAC3C3oT,EAAK0oT,sBAAsB/xS,GAC3B3W,EAAKwc,aAAaxwB,SAAYgU,EAAgC,4BAC1DnW,KAAKumV,yBAAyBpwU,EAAK2nT,YAAY7oS,MAAOnI,EAAM3W,GAC1DA,EAAKwc,aAAaxwB,SACxBgU,EAAKwc,aAAaxwB,SAAsD,IAA3CkK,KAAK+S,MAAMjJ,EAAKwc,aAAaxwB,UAAkB,EAAIkK,KAAK+S,MAAMjJ,EAAKwc,aAAaxwB,UAC7GgU,EAAK6oT,mBAAmBh/T,KAAK6wB,MAAO1a,EAAKwc,aAAa5S,IAAK5J,EAAKwc,aAAarmB,IAAK6J,EAAKwc,aAAaxwB,YAO5GkkV,EAAYhrV,UAAUkrV,yBAA2B,SAAUtxT,EAAOnI,EAAM3W,GAIpE,IAAK,IAHDsnT,EAA8BtkS,GAA+BrM,EAAM3W,GACnE8xD,EAAehzC,EACfizC,EAAc77D,KAAK87D,IAAI,GAAI97D,KAAK+S,MAAMmS,GAAQ02C,EAAc,MACvD1kD,EAAI,EAAG1hB,EAAMsU,EAAKunT,aAAajhU,OAAQ8mB,EAAI1hB,EAAK0hB,IAAK,CAC1D,IAAIykD,EAAkBE,EAAc/xD,EAAKunT,aAAan6S,GACtD,GAAIk6S,EAA+BxoS,EAAQ+yC,EACvC,MAEJC,EAAeD,EAEnB,OAAOC,GAMXo+Q,EAAYhrV,UAAU+iU,uBAAyB,SAAUjoT,EAAM0a,GAE3D,IAAI8H,EAAexiB,EAAKwc,aAAa5S,IACrC5J,EAAKgf,kBACDhf,EAAKi4D,WAAa,GAAKj4D,EAAK2oT,aAAe,KAC3CnmS,EAAexiB,EAAKwc,aAAa5S,IAAO5J,EAAKwc,aAAa5S,IAAM5J,EAAKwc,aAAaxwB,UAEtF,IAAIqkV,EAAaxmV,KAAKu8R,UAAUpmR,GAC5BswU,EAAiD,OAAhCD,EAAW72U,MAAM,WAOtC,IANAwG,EAAK6lB,OAASnL,EAAMo+C,KAAKC,iBACrBlzC,OAAQyqT,EAAiB,GAAKD,EAC9Br3Q,YAAat+C,EAAMu+C,uBAEvBj5D,EAAK4f,WAAa5f,EAAK6lB,OAAO3vB,KAAK87D,IAAIhyD,EAAKob,QAASpb,EAAKwc,aAAa5S,MACvE5J,EAAK2f,SAAW3f,EAAK6lB,OAAO3vB,KAAK87D,IAAIhyD,EAAKob,QAASpb,EAAKwc,aAAarmB,MAC9DqsB,GAAgBxiB,EAAKwc,aAAarmB,IAAKqsB,GAAgBxiB,EAAKwc,aAAaxwB,SACxE6vB,GAAO2G,EAAcxiB,EAAKwc,eAC1B+F,GAAmB14B,KAAK6wB,MAAO8H,EAAc34B,KAAK4hF,YAAYzrE,EAAMswU,EAAgBD,EAAYn6U,KAAK87D,IAAIhyD,EAAKob,QAASoH,IAAgBxiB,EAAK6f,WAAY7f,GAG5JA,EAAK+oT,kBACL/oT,EAAK+oT,iBAAiBl/T,KAAK6wB,QAMnCw1T,EAAYhrV,UAAUkkC,cAAgB,WAIlC,MAAO,eAOX8mT,EAAYhrV,UAAUiX,QAAU,SAAUue,KAKnCw1T,GACT9oB,ICxIEjzO,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAgBxC+7P,GAAkC,SAAUv7P,GAM5C,SAASu7P,EAAiB71T,GACtB,OAAOs6D,EAAO7pF,KAAKtB,KAAM6wB,IAAU7wB,KAkGvC,OAxGAsqF,GAAUo8P,EAAkBv7P,GAa5Bu7P,EAAiBrrV,UAAU4iU,0BAA4B,SAAUnxS,EAAM3W,GACnEnW,KAAK2mV,SAAW75T,EAChB9sB,KAAKk+T,eAAe/nT,EAAM2W,GAC1B9sB,KAAK29T,eAAexnT,EAAM2W,GAC1B9sB,KAAKm+T,kBAAkBhoT,EAAM2W,GAC7B9sB,KAAKo+T,uBAAuBjoT,IAMhCuwU,EAAiBrrV,UAAU+iU,uBAAyB,SAAUjoT,GAE1DA,EAAKgf,iBACL,IAAIikC,EAAkC,iBAAxBjjD,EAAKke,eAAoC,GAAM,EACnC,SAAtBle,EAAK0vD,aACL7lE,KAAKklV,8BAA8B/uU,EAAMnW,KAAK2mV,SAAU5xT,SAAS5e,EAAKqxT,OAAO,GAAI,IAAKzyS,SAAS5e,EAAKqxT,OAAOrxT,EAAKqxT,OAAO/qU,OAAS,GAAI,KAGpI0Z,EAAKivU,mBAAqBjvU,EAAK0vD,aAEnC1vD,EAAK6lB,OAASh8B,KAAK6wB,MAAMo+C,KAAK07B,eAC1B3uE,OAAQ7lB,EAAKmlB,YAAa50B,KAAMqwB,GAAiB5gB,EAAK6vU,cAAetkR,SAAU1hE,KAAKqlV,YAAYlvU,KAEpG,IAAK,IAAIha,EAAI,EAAGA,EAAIga,EAAKqxT,OAAO/qU,OAAQN,IAC/B6D,KAAK4mV,aAAazwU,EAAKqxT,OAAO5vS,IAAIN,QAAQn7B,GAAIga,EAAKqxT,OAAO5vS,IAAIN,QAAQn7B,EAAI,GAAIga,EAAKivU,mBAAoBjpV,IACpG61B,GAAO71B,EAAIi9D,EAASjjD,EAAKwc,eACzB+F,GAAmB14B,KAAK6wB,MAAO10B,EAAGga,EAAK6lB,OAAO,IAAIhc,KAAK7J,EAAKqxT,OAAO5vS,IAAIN,QAAQn7B,KAAMga,EAAK6f,WAAY7f,GAI9GA,EAAK+oT,kBACL/oT,EAAK+oT,iBAAiBl/T,KAAK6wB,QAMnC61T,EAAiBrrV,UAAUurV,aAAe,SAAUrpQ,EAAas2H,EAAcntM,EAAMuL,GACjF,IAAI40U,EACJ,GAAc,IAAV50U,EACA40U,GAAY,OAGZ,OAAQngV,GACJ,IAAK,QACDmgV,EAAY,IAAI7mU,KAAKu9D,GAAaxX,gBAAkB,IAAI/lD,KAAK6zL,GAAc9tI,cAC3E,MACJ,IAAK,SACD8gR,EAAY,IAAI7mU,KAAKu9D,GAAaxX,gBAAkB,IAAI/lD,KAAK6zL,GAAc9tI,eACvE,IAAI/lD,KAAKu9D,GAAatX,aAAe,IAAIjmD,KAAK6zL,GAAc5tI,WAChE,MACJ,IAAK,OACD4gR,EAAax6U,KAAKE,IAAIgxE,EAAcs2H,GAAgB,OAChD,IAAI7zL,KAAKu9D,GAAa3Z,WAAa,IAAI5jD,KAAK6zL,GAAcjwI,SAC9D,MACJ,IAAK,QACDijR,EAAax6U,KAAKE,IAAIgxE,EAAcs2H,GAAgB,MAChD,IAAI7zL,KAAKu9D,GAAa3Z,WAAa,IAAI5jD,KAAK6zL,GAAcjwI,SAC9D,MACJ,IAAK,UACDijR,EAAax6U,KAAKE,IAAIgxE,EAAcs2H,GAAgB,KAChD,IAAI7zL,KAAKu9D,GAAajX,eAAiB,IAAItmD,KAAK6zL,GAAcvtI,aAClE,MACJ,IAAK,UACDugR,EAAax6U,KAAKE,IAAIgxE,EAAcs2H,GAAgB,KAChD,IAAI7zL,KAAKu9D,GAAa3Z,WAAa,IAAI5jD,KAAK6zL,GAAcjwI,SAI1E,OAAOijR,GAKXH,EAAiBrrV,UAAUkkC,cAAgB,WAIvC,MAAO,oBAOXmnT,EAAiBrrV,UAAUiX,QAAU,SAAUue,KAKxC61T,GACTN,IClHEU,GAA2B,WAC3B,SAASA,KA2JT,OAzJAA,EAAUzrV,UAAU0rV,iBAAmB,SAAU5wU,EAAM6wU,EAAWniB,GAC9D,IAAIoiB,EACAC,EACJ,GAAuB,qBAAnB/wU,EAAK+b,UAAkC,CACvC,IAAI30B,EAAQypV,EAAUzpV,MAClBshB,EAAMmoU,EAAUnoU,IACpBooU,EAAc1pV,EAAQ4Y,EAAKqxT,OAAOjpU,QAAQhB,EAAM0iB,UAAU/S,YAAc,KACxEg6U,EAAYroU,EAAM1I,EAAKqxT,OAAOjpU,QAAQsgB,EAAIoB,UAAU/S,YAAc,UAGlE+5U,EAAcD,EAAUzpV,MACxB2pV,EAAYF,EAAUnoU,IAE1B,IAAIwU,EAAOrzB,KAAKmnV,eAAeF,EAAaC,EAAWF,EAAUl6T,KAAMk6T,EAAUI,cAAejxU,GAC5FJ,EAA+B,aAArBI,EAAKijB,aAA+B/F,EAAKuR,GAAKvR,EAAKsR,MAAQxuB,EAAKkd,KAAKtd,OAAS8uT,EAAe9uT,OACvGC,EAA8B,eAArBG,EAAKijB,aAAiC/F,EAAKuR,GAAKvR,EAAKsR,MAAQxuB,EAAKkd,KAAKrd,MAAQ6uT,EAAe7uT,MACvGjJ,EAA0B,aAArBoJ,EAAKijB,YAA8ByrS,EAAe93T,EAAMsmB,EAAKsR,KAAOxuB,EAAKkd,KAAKrd,MAASG,EAAKkd,KAAKtmB,EACtGC,EAA0B,eAArBmJ,EAAKijB,YAAgCyrS,EAAe73T,EAAKmJ,EAAKkd,KAAKrmB,EAAImJ,EAAKkd,KAAKtd,OACrFsd,EAAKuR,GAAKzuB,EAAKkd,KAAKtd,OACzB,OAAe,IAAXA,GAA0B,IAAVC,EACT,IAAIkgB,GAAKnpB,EAAGC,EAAGgJ,EAAOD,GAE1B,IAAImgB,GAAK,EAAG,EAAG,EAAG,IAK7B4wT,EAAUzrV,UAAU8rV,eAAiB,SAAU5pV,EAAOshB,EAAKiO,EAAMs6T,EAAejxU,GAC5E,IAAIwuB,EAAOyiT,EAAgBjxU,EAAKwc,aAAa5S,IAAM/f,KAAKqnV,UAAUh7U,KAAK0T,IAAIxiB,EAAOE,EAAkBohB,GAAOthB,EAAQshB,GAAM1I,GACrHyuB,EAAK5kC,KAAKqnV,UAAUrnV,KAAKsnV,WAAWj7U,KAAKC,IAAI/O,EAAOE,EAAkBohB,GAAOthB,EAAQshB,GAAM8lB,EAAM7X,EAAM3W,EAAM0I,GAAM1I,GACvH,OAASwuB,KAAM1Q,GAAmB9d,EAAK+d,WAAa0Q,EAAKD,EAAMxuB,GAAOyuB,GAAI3Q,GAAmB9d,EAAK+d,WAAayQ,EAAOC,EAAIzuB,KAE9H2wU,EAAUzrV,UAAUisV,WAAa,SAAU1iT,EAAID,EAAM7X,EAAM3W,EAAM0I,GAC7D,MAAuB,aAAnB1I,EAAK+b,UACGz0B,EAAkBohB,GAAO,IAAImB,KAAK,IAAIA,KAAK2kB,GAAM1kB,UAAY6M,GAAQ8X,EAGtEnnC,EAAkBohB,IAA2B,gBAAnB1I,EAAK+b,UAA8B7lB,KAAK87D,IAAIhyD,EAAKob,QAASoT,GAAQA,GAAQ7X,EAAO8X,GAG1HkiT,EAAUzrV,UAAUgsV,UAAY,SAAUrqV,EAAOmZ,GAU7C,MATuB,gBAAnBA,EAAK+b,YACLl1B,EAAQu0B,GAAQv0B,EAAOmZ,EAAKob,UAE5Bv0B,EAAQmZ,EAAKwc,aAAa5S,IAC1B/iB,EAAQmZ,EAAKwc,aAAa5S,IAErB/iB,EAAQmZ,EAAKwc,aAAarmB,MAC/BtP,EAAQmZ,EAAKwc,aAAarmB,KAEvBtP,GASX8pV,EAAUzrV,UAAU0hV,gBAAkB,SAAUlsT,EAAO3c,EAAUuzD,GAM7D,IAAK,IAFDp0C,EAHA/vB,EAAKutB,EAAM7vB,QAAQsC,GAAK,cAAgB4Q,EAAW,IACnDqzU,EAAiB12T,EAAMhD,SAASw+C,aAAc/oE,GAAIA,EAAK,gBACvDuhU,EAAiBh0S,EAAM6jT,qBAAqB7P,eAE5C/lT,EAAQ,EACH1gB,EAAK,EAAGopV,EAAS//Q,EAAMrpE,EAAKopV,EAAO/qV,OAAQ2B,IAEhD,IAAK,IADD+X,EAAOqxU,EAAOppV,GACTyE,EAAK,EAAGoB,EAAKkS,EAAK4tU,WAAYlhV,EAAKoB,EAAGxH,OAAQoG,IAAM,CACzD,IAAImkV,EAAY/iV,EAAGpB,GACfmkV,EAAUxvT,SAAWwvT,EAAUvkR,SAAWvuD,IAC1Cmf,EAAOrzB,KAAK+mV,iBAAiB5wU,EAAM6wU,EAAWniB,GAC9C7kU,KAAKynV,gBAAgBT,EAAW3zT,EAAM/vB,EAAK,QAAUwb,EAAOyoU,EAAgB12T,GAC5E7wB,KAAK6iS,WAAWmkD,EAAW3zT,EAAM/vB,EAAK,QAAUwb,EAAOyoU,EAAgB12T,EAAO1a,GAC9E2I,KAIZ+R,EAAMS,UAAU3vB,YAAY4lV,IAEhCT,EAAUzrV,UAAUosV,gBAAkB,SAAUT,EAAW3zT,EAAM/vB,EAAIhD,EAAQuwB,GACzEvwB,EAAOqB,YAAYkvB,EAAMhD,SAAS8V,cAAc,IAAIugS,GAAW5gU,EAAI0jV,EAAUxwT,MAAOwwT,EAAU1iT,OAAQ0iT,EAAUv5U,QAAS4lB,EAAM,EAAG,EAAG,GAAI,OAE7IyzT,EAAUzrV,UAAUwnS,WAAa,SAAUmkD,EAAW3zT,EAAM/vB,EAAIhD,EAAQuwB,EAAO1a,GAC3E,IAKIk5C,EAJAq4R,EADWl7T,GAAYw6T,EAAUv6T,KAAMu6T,EAAU5iD,WACzBruR,OAAS,EAAvB,EACV4xU,EAAKt0T,EAAKrmB,EAAKqmB,EAAKtd,OAAS,EAAK2xU,EAClCllU,EAAmC,OAAvBwkU,EAAUxkU,SAA4C,aAArBrM,EAAKijB,YAA8B,GAAK,GAAM4tT,EAAUxkU,SACrGolU,EAAKv0T,EAAKtmB,EAAKsmB,EAAKrd,MAAQ,EAIP,eAArBG,EAAKijB,aACLwuT,EAAK5nV,KAAK6nV,aAAaD,EAAMF,EAAU1nV,KAAKs9B,OAAO0pT,EAAUvzR,qBAAuBpgC,EAAKrd,MAAOgxU,EAAUvzR,qBAC1Gk0R,EAAK3nV,KAAK6nV,aAAaF,EAAKD,EAASr0T,EAAKtd,OAAQixU,EAAUtzR,mBAC5DrE,EAAYrvD,KAAK8nV,gBAAgBd,EAAUvzR,uBAG3Cm0R,EAAK5nV,KAAK6nV,aAAaD,EAAIv0T,EAAKrd,MAAOgxU,EAAUvzR,qBACjDk0R,EAAK3nV,KAAK6nV,aAAaF,EAAMD,EAAU1nV,KAAKs9B,OAAO0pT,EAAUtzR,mBARnD,EAQkFrgC,EAAKtd,OAAQixU,EAAUtzR,mBACnHrE,EAAY23R,EAAUtzR,mBAG1Bp9B,GAAY,IAAIC,GAAWjzB,EAAIskV,EAAID,EAD1Bt4R,EACsC23R,EAAUv6T,KAAM,UAAYjK,EAAW,IAAMolU,EAAK,IAAMD,EAAK,IAAK,UAAWX,EAAU5iD,UAAW4iD,EAAU5iD,UAAU5tQ,MAAOl2B,IAEhLwmV,EAAUzrV,UAAUysV,gBAAkB,SAAUj0U,GAC5C,OAAQA,GACJ,IAAK,QACDA,EAAS,QACT,MACJ,IAAK,MACDA,EAAS,MAGjB,OAAOA,GAEXizU,EAAUzrV,UAAUiiC,OAAS,SAAUzpB,GACnC,IAAIypB,EAAS,EACb,OAAQzpB,GACJ,IAAK,QACDypB,EAAS,EACT,MACJ,IAAK,MACDA,GAAU,EAGlB,OAAOA,GAEXwpT,EAAUzrV,UAAUwsV,aAAe,SAAUE,EAAIj7T,EAAM6T,GAEnD,OAAQA,GACJ,IAAK,QACDonT,EAAKA,EAAMj7T,EAAO,EAHZ,EAIN,MACJ,IAAK,MACDi7T,EAAKA,EAAMj7T,EAAO,EANZ,EASd,OAAOi7T,GAMXjB,EAAUzrV,UAAUkkC,cAAgB,WAChC,MAAO,aAMXunT,EAAUzrV,UAAUiX,QAAU,aAGvBw0U,KC/JPkB,GAA0B,WAE1B,SAASA,EAASrjB,GACd3kU,KAAK6wB,MAAQ8zS,EACb3kU,KAAKo5D,QAAU,EA0JnB,OAnJA4uR,EAAS3sV,UAAU4sV,wBAA0B,SAAUrpU,GAYnD,IACK,IAZDspU,KACAC,EAAgBvpU,EAAO9G,MAAM6a,aAC7By1T,EAAgBxpU,EAAOhH,MAAM+a,aAC7B01T,EAAezpU,EAAO+Y,OACtBirQ,EAAahkR,EAAO8V,SACpB4zT,EAAaj8U,KAAKE,IAAI47U,EAAclzT,MAAQ2tQ,EAAW5sR,OACvDuyU,EAAal8U,KAAKE,IAAI67U,EAAcnzT,MAAQ2tQ,EAAW7sR,QACvDyyU,EAAcH,EAAa,IAAMA,EAAa,GAAGt7U,EAAIu7U,EAAc,EAAIA,EACvEG,EAAcJ,EAAa,IAAMA,EAAa,GAAGr7U,EAAIu7U,EAAc,EAAIA,EACvEG,EAAO,EACPC,EAAO,EAEFvqV,EAAK,EAAGwqV,EAAiBP,EAAcjqV,EAAKwqV,EAAensV,OAAQ2B,IAAM,CAC9E,IAAIyqV,EAAiBD,EAAexqV,GACpCyqV,EAAeva,mBACfoa,EAAOG,EAAer6T,OAASq6T,EAAer6T,OAAS25T,EAAcpoU,IACrE4oU,EAAOE,EAAep6T,OAASo6T,EAAep6T,OAAS25T,EAAcroU,KACjE1T,KAAKE,IAAIi8U,EAAaE,IAASJ,GAAcj8U,KAAKE,IAAIk8U,EAAaE,IAASJ,KAC5EL,EAAW1jV,KAAKqkV,GAChBL,EAAaE,EACbD,EAAaE,GAGrB,OAAOT,GAWXF,EAAS3sV,UAAUytV,iBAAmB,SAAUC,EAAYC,EAAapqU,EAAQwV,EAAY60T,EAAkB5jS,GAC3G,IAAI7vB,EAAY,GAChB,GAAkB,MAAduzT,EAAoB,CACpB,IAAI3lS,EAAS6lS,EAAiBF,EAAWv6T,OAAQu6T,EAAWt6T,OAAQ7P,EAAO9G,MAAO8G,EAAOhH,MAAOwc,EAAYxV,GACxGypB,EAAS4gT,EAAiBD,EAAYx6T,OAAQw6T,EAAYv6T,OAAQ7P,EAAO9G,MAAO8G,EAAOhH,MAAOwc,EAAYxV,GAC9G4W,EAAY6vB,EAAa,IAAOjC,EAAQ,EAAI,IAAOA,EAAQ,EAAI,MAC9C/a,EAAQ,EAAI,IAAOA,EAAQ,EAAI,IAEpD,OAAO7S,GAOXwyT,EAAS3sV,UAAU6tV,eAAiB,SAAUl2U,EAAS4L,EAAQ8V,GAC3D,IAAI/H,EAAa/N,EAAOiS,MAAMhD,SAASsI,SAASnjB,GAChD2Z,EAAWnpB,aAAa,YAAakxB,GACrC9V,EAAOykR,YAAc12Q,EACrB/N,EAAOy0T,cAAc1xU,YAAYgrB,GACjC/N,EAAOiuT,cAAe,GAO1Bmb,EAAS3sV,UAAUg6U,aAAe,SAAUz2T,GACpCA,EAAOkuT,QAAUluT,EAAOkuT,OAAOt1S,SAC/B5Y,EAAOiS,MAAMgjT,aAAa9nO,OAAOntF,IAQzCopU,EAAS3sV,UAAU8tV,uBAAyB,SAAUvqU,EAAQm3E,GAC1D,IAIIj2E,EAJA62B,EAAY,IAAIre,OAChBvb,EAAO6B,EAAOykR,YACdtxP,EAAkBh1B,EAAKlK,aAAa,oBACpCw9B,EAAazxB,EAAOykR,YAAY/yP,iBAEpCvzB,EAAKrY,MAAMC,WAAa,SACxBgyC,EAAUpe,QAAQxb,GACd7R,SAAU6qF,EAAO7qF,SACjBrL,MAAOk2F,EAAOl2F,MACd24B,SAAU,SAAUv4B,GACZA,EAAKw4B,WAAax4B,EAAKJ,QACvBkd,EAAKrY,MAAMC,WAAa,UACxBmb,EAAczT,KAAKE,IAAIF,KAAKoxB,OAAQx9B,EAAKw4B,UAAYx4B,EAAKJ,OAASwwC,EAAcpwC,EAAKiL,WACtF6R,EAAKvZ,aAAa,mBAAoBsc,EAAc,IAAMuwB,KAGlExxB,IAAK,SAAU+D,GACX7F,EAAKvZ,aAAa,mBAAoBuuC,GACtCnzB,EAAOiS,MAAMrK,QAAQ,qBAAuB5H,OAAQA,QAWhEopU,EAAS3sV,UAAU+tV,mBAAqB,SAAUt1T,EAAOlV,EAAQwV,EAAYuiT,GACzE,IAAIzD,EAAet0T,EAAOkuT,QAAUluT,EAAOkuT,OAAO92T,MAAS4I,EAAOkuT,OAAO92T,MAAQ,EAC7E4vR,EAAgBhnR,EAAOkuT,QAAUluT,EAAOkuT,OAAO/2T,OAAU6I,EAAOkuT,OAAO/2T,OAAS,EACpF+d,EAAMw6S,gBAAgB9pU,KAAKmyU,EAAY7iT,EAAMtF,OAAQsF,EAAMrF,OAAQ7P,EAAO9G,MAAO8G,EAAOhH,MAAOwc,EAAYxV,IAC3GkV,EAAM65S,QAAQnpU,KAAK,IAAI0xB,GAAKpC,EAAMw6S,gBAAgB,GAAGvhU,EAAImmU,EAAap/S,EAAMw6S,gBAAgB,GAAGthU,EAAI44R,EAAc,EAAIstC,EAAa,EAAIttC,KAO1IoiD,EAAS3sV,UAAUguV,kBAAoB,SAAUzqU,EAAQ+3B,GACrD,IAOI35C,EAPA03B,EAAW9V,EAAOu0T,gBAAgB5hU,WAAW,GAAGA,WAAW,GAC3DymB,EAASD,GAAqB,UAC9ByoK,GAAiB9rK,EAAS7hB,aAAa,UACvCqpT,GAAgBxnS,EAAS7hB,aAAa,SACtCy2U,GAAW50T,EAAS7hB,aAAa,KACjC02U,EAAU3qU,EAAOiS,MAAMiG,qBAAuBpC,EAAS7hB,aAAa,YAAa6hB,EAAS7hB,aAAa,MACtG6hB,EAAS7hB,aAAa,KAE3B6hB,EAAShwB,MAAMC,WAAa,SAC5B,IAAI2zB,OAAcC,QAAQ7D,GACtBxpB,SAAUyrC,EAAUzrC,SACpBrL,MAAO82C,EAAU92C,MACjB24B,SAAU,SAAUv4B,GACZA,EAAKw4B,WAAax4B,EAAKJ,QACvB60B,EAAShwB,MAAMC,WAAa,UACxBia,EAAOiS,MAAMiG,qBACb95B,EAAQg7B,EAAO/3B,EAAKw4B,UAAYx4B,EAAKJ,MAAO,EAAG2gM,EAAevgM,EAAKiL,UACnEwpB,EAASlxB,aAAa,YAAa,aAAe8lV,EAAU,IAAMC,EAC9D,aAAgBvsV,EAAQwjM,EAAiB,gBAAmB8oJ,EAAW,KAAQC,EAAW,OAG9FvsV,EAAQg7B,EAAO/3B,EAAKw4B,UAAYx4B,EAAKJ,MAAO,EAAGq8T,EAAcj8T,EAAKiL,UAClEwpB,EAASlxB,aAAa,YAAa,aAAe8lV,EAAU,IAAMC,EAC9D,WAAcvsV,EAAQk/T,EAAgB,mBAAsBotB,EAAW,KAAQC,EAAW,QAI1G1qU,IAAK,SAAU+D,GACX8R,EAASlxB,aAAa,YAAa,kBACnCob,EAAOiS,MAAMrK,QAAQ,qBAAuB5H,OAAQA,QAIzDopU,KCnKP19P,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAexC6+P,GAA4B,SAAUr+P,GAEtC,SAASq+P,IACL,OAAkB,OAAXr+P,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KA2E/D,OA7EAsqF,GAAUk/P,EAAYr+P,GAStBq+P,EAAWnuV,UAAU0wG,OAAS,SAAUntF,EAAQ9G,EAAOF,EAAOwc,GAW1D,IAAK,IAVDgvB,EACA/a,EAIAr1B,EAHAwiB,EAAY,GACZi0T,EAAY,KACZpkS,EAAa,IAEbqkS,EAAW9qU,EAAOiS,OAAwC,eAA/BjS,EAAOiS,MAAM+8S,cACxC+b,EAAU/qU,EAAOqxT,oBAAyD,SAAnCrxT,EAAOqxT,mBAAmBlyS,KACjE6rT,EAAgBF,EAAUv1T,GAAqBuG,GAC/CmvT,EAAgB7pV,KAAKioV,wBAAwBrpU,GACxCxgB,EAAK,EAAG0rV,EAAkBD,EAAezrV,EAAK0rV,EAAgBrtV,OAAQ2B,IAAM,CACjF,IAAI01B,EAAQg2T,EAAgB1rV,GAC5B01B,EAAM65S,WACF75S,EAAM0D,SAAWrF,GAAY03T,EAAc/1T,EAAM7hB,MAAQ,GAAI6hB,EAAO+1T,EAAc/1T,EAAM7hB,MAAQ,GAAI2M,IACpG4W,GAAax1B,KAAK8oV,iBAAiBW,EAAW31T,EAAOlV,EAAQwV,EAAYw1T,EAAevkS,GACxFA,EAAaokS,EAAY,IAAMpkS,EAC/BokS,EAAY31T,EACZ9zB,KAAKopV,mBAAmBt1T,EAAOlV,EAAQwV,EAAYw1T,KAGnDH,EAAYE,EAASF,EAAY,KACjCpkS,EAAaskS,EAAStkS,EAAa,IACnCvxB,EAAMw6S,oBAGVob,GACI9qU,EAAOmrU,WACP1hT,EAASuhT,EAAcC,EAAcA,EAAcptV,OAAS,GAAG+xB,OAAQq7T,EAAcA,EAAcptV,OAAS,GAAGgyB,OAAQ3W,EAAOF,EAAOwc,EAAYxV,GACjJwkC,EAASwmS,EAAcC,EAAc,GAAGr7T,OAAQq7T,EAAc,GAAGp7T,OAAQ3W,EAAOF,EAAOwc,EAAYxV,GACnG4W,EAAYA,EAAUjb,OAAO8qC,EAAa,IAAMhd,EAAOt7B,EAAI,IAAMs7B,EAAOr7B,EAAI,MAAkBo2C,EAAOr2C,EAAI,IAAMq2C,EAAOp2C,IAG9H,IAAIyqB,EAA2B,cAApB7Y,EAAOw7K,SAA2Bx7K,EAAOiS,MAAM7vB,QAAQsC,GAAK,cAAgBsb,EAAO3M,MAAQ,IAAM2M,EAAO6Y,KAC3F,cAApB7Y,EAAOw7K,SAA2Bx7K,EAAOiS,MAAM7vB,QAAQsC,GAAK,WAAasb,EAAO+/T,YAAc,cAAgB//T,EAAO3M,MACjH2M,EAAOiS,MAAM7vB,QAAQsC,GAAK,WAAasb,EAAO3M,MACtDe,EAAU,IAAIojB,GAAWqB,EAAM,OAAQ7Y,EAAO5I,MAAO4I,EAAOypD,SAAUzpD,EAAOnR,QAASmR,EAAOkzB,UAAWtc,GACxGx1B,KAAKkpV,eAAel2U,EAAS4L,EAAQ,IACrC5e,KAAKq1U,aAAaz2T,IAOtB4qU,EAAWnuV,UAAUs4U,YAAc,SAAU/0T,GACzC,IAAIm3E,EAASn3E,EAAO+3B,UACpB32C,KAAKmpV,uBAAuBvqU,EAAQm3E,IAKxCyzP,EAAWnuV,UAAUkkC,cAAgB,WAIjC,MAAO,cAOXiqT,EAAWnuV,UAAUiX,QAAU,SAAUue,KAKlC24T,GACTxB,ICtFEgC,GAA4B,WAC5B,SAASA,KA+RT,OAxRAA,EAAW3uV,UAAU4uV,kBAAoB,SAAUrrU,GAC3CA,EAAOiS,MAAMq5T,4BAA8BtrU,EAAO1K,UAClDlU,KAAKmqV,uBAAuBvrU,GAEhC,IAAI1K,EAAY0K,EAAOiS,MAAMq5T,0BAAgCtrU,EAAO1K,SAAX,EACrDioU,EAAav9T,EAAOiS,MAAMq5T,0BAAgCtrU,EAAOu9T,UAAX,EAC1Dv9T,EAAOiuT,cAAe,EACtB,IAMIjgU,EANAq0B,EAAgBriB,EAAOiS,MAAMoQ,cAC7BmpT,EAAgBxrU,EAAOiS,MAAMq5T,0BAA4BtrU,EAAOyrU,cAAgB,EAChFC,EAAuC,OAAvB1rU,EAAOq6Q,YAA0C,cAAhBr6Q,EAAOlY,KAAwB,EAAI,GACpFkY,EAAOq6Q,YAEPjjR,EADoBihB,GAAkBrY,EAAO9G,MAAOmpB,GACxBqpT,EAE5B58T,EAAW,EAAayuT,EAAY,GACpCre,EAAc,IAAIV,GAAY1vS,EAAUA,EAAY,EAAIyuT,GAM5D,OALMn6R,MAAM87Q,EAAYvgU,QAAUykD,MAAM87Q,EAAYj/S,OAEhDjS,EAASw9U,GADTtsB,EAAc,IAAIV,GAAYU,EAAYvgU,MAAQyY,EAAO8nT,EAAYj/S,IAAM7I,IACtCif,MACrC6oS,EAAc,IAAIV,GAAYU,EAAYvgU,MAAQqP,EAAS,EAAGkxT,EAAYj/S,IAAMjS,EAAS,IAEtFkxT,GAOXksB,EAAW3uV,UAAUkvV,aAAe,SAAUvvT,EAAIC,EAAIC,EAAIC,EAAIvc,GAC1D,IAAIwkC,EAAS1oB,GAASM,EAAIC,EAAIrc,EAAO9G,MAAO8G,EAAOhH,MAAOgH,EAAOiS,MAAMiG,qBACnEuR,EAAS3N,GAASQ,EAAIC,EAAIvc,EAAO9G,MAAO8G,EAAOhH,MAAOgH,EAAOiS,MAAMiG,qBACvE,OAAO,IAAIZ,GAAK7pB,KAAK0T,IAAIqjC,EAAOr2C,EAAGs7B,EAAOt7B,GAAIV,KAAK0T,IAAIqjC,EAAOp2C,EAAGq7B,EAAOr7B,GAAIX,KAAKE,IAAI87B,EAAOt7B,EAAIq2C,EAAOr2C,GAAIV,KAAKE,IAAI87B,EAAOr7B,EAAIo2C,EAAOp2C,KAO1Ig9U,EAAW3uV,UAAU8uV,uBAAyB,SAAUvrU,GAEpD,IACK,IAFDiS,EAAQjS,EAAOiS,MAEVzyB,EAAK,EAAGyE,EAAKguB,EAAMktC,QAAS3/D,EAAKyE,EAAGpG,OAAQ2B,IAEjD,IAAK,IADD0zU,EAAajvU,EAAGzE,GACX6F,EAAK,EAAGwG,EAAKomB,EAAM0nQ,KAAMt0R,EAAKwG,EAAGhO,OAAQwH,IAAM,CACpD,IAAI4Z,EAAOpT,EAAGxG,GACdjE,KAAKwqV,iBAAiB5rU,EAAOwyT,qBAAqBU,EAAYj0T,GAAM,MAIhFmsU,EAAW3uV,UAAUmvV,iBAAmB,SAAUtzT,GAC9C,IAAI86S,KACAyY,GAAYtO,UAAW,EAAGjoU,SAAU,MACxCgjB,EAAiB93B,QAAQ,SAAUpC,IACS,IAApCA,EAAM0J,KAAKnI,QAAQ,YACfvB,EAAMg1U,mBACqC72U,IAAvC62U,EAAch1U,EAAMg1U,gBACpBh1U,EAAMkX,SAAWu2U,EAAQtO,UACzBnK,EAAch1U,EAAMg1U,eAAiByY,EAAQtO,aAG7Cn/U,EAAMkX,SAAW89T,EAAch1U,EAAMg1U,eAIhB,OAArByY,EAAQv2U,UACRlX,EAAMkX,SAAWu2U,EAAQtO,UACzBsO,EAAQv2U,SAAWu2U,EAAQtO,aAG3Bn/U,EAAMkX,SAAWu2U,EAAQv2U,SAKjClX,EAAMkX,SAAWu2U,EAAQtO,cAGjCjlT,EAAiB93B,QAAQ,SAAUpC,GAC/BA,EAAMm/U,UAAYsO,EAAQtO,aAQlC6N,EAAW3uV,UAAUqvV,qBAAuB,SAAU52T,EAAOT,EAAMzU,GAC1DA,EAAOiS,MAAMiG,oBAId92B,KAAK2qV,cAAc72T,EAAOT,EAAMzU,GAHhC5e,KAAK4qV,cAAc92T,EAAOT,EAAMzU,GAKhB,cAAhBA,EAAOlY,OACPotB,EAAMmF,SAAWnF,EAAM/mB,EAAI6R,EAAOisU,gBAAgBC,SAAW,EAC7Dh3T,EAAMoF,SAAWpF,EAAM/mB,EAAI6R,EAAOisU,gBAAgBC,SAAW,IAQrEd,EAAW3uV,UAAUuvV,cAAgB,SAAU92T,EAAOT,EAAMzU,GACxDkV,EAAM65S,QAAQnpU,KAAK6uB,GACnBS,EAAMw6S,gBAAgB9pU,MAClBuI,EAAGsmB,EAAKtmB,EAAKsmB,EAAU,MAAI,EAC3BrmB,EAA0B,YAAtB4R,EAAO4c,aAAsE,IAA1C5c,EAAO4c,WAAWj9B,QAAQ,YAC5Du1B,EAAMrF,QAAU,IAAO7P,EAAOhH,MAAMsc,WAAeb,EAAKrmB,EAAKqmB,EAAKrmB,EAAIqmB,EAAKtd,UAQxFi0U,EAAW3uV,UAAUsvV,cAAgB,SAAU72T,EAAOT,EAAMzU,GACxDkV,EAAM65S,QAAQnpU,KAAK6uB,GACnBS,EAAMw6S,gBAAgB9pU,MAClBuI,EAA0B,YAAtB6R,EAAO4c,aAAsE,IAA1C5c,EAAO4c,WAAWj9B,QAAQ,YAC5Du1B,EAAMrF,QAAU,IAAO7P,EAAOhH,MAAMsc,WAAeb,EAAKtmB,EAAIsmB,EAAKrd,MAAQqd,EAAKtmB,EACnFC,EAAGqmB,EAAKrmB,EAAIqmB,EAAKtd,OAAS,KAQlCi0U,EAAW3uV,UAAUmuJ,aAAe,SAAU5qI,EAAQkV,EAAO8J,EAAM0G,GAC/D,IAAI1L,GACAC,QAAQ,EAAOpB,KAAM6nS,GAAa1gT,OAAQA,EAAQkV,MAAOA,EACzD8J,KAAMhf,EAAOo1T,cAAclgT,EAAO8J,GAClC0G,OAAQ1lB,EAAOq1T,eAAengT,EAAOwQ,IAIzC,OAFA1lB,EAAOiS,MAAMrK,QAAQ84S,GAAa1mS,GAClC9E,EAAM0C,MAAQoC,EAASgF,KAChBhF,GAOXoxT,EAAW3uV,UAAUsoC,cAAgB,SAAU/kB,EAAQkV,EAAOT,EAAMuF,GAEhE,IADYha,EAAOiS,MAAMiG,oBAAsBzD,EAAKtd,OAASsd,EAAKrd,QACrD,EACT,OAAO,KAEX,IAAIwf,EAAYx1B,KAAKgkC,yBAAyB3Q,EAAMzU,EAAOwpB,aAAaxE,QAAShlB,EAAOwpB,aAAavE,SAAUjlB,EAAOwpB,aAAatE,WAAYllB,EAAOwpB,aAAarE,aAC/JtM,EAA2B,cAApB7Y,EAAOw7K,SAA2Bx7K,EAAOiS,MAAM7vB,QAAQsC,GAAK,cAAgBsb,EAAO3M,MAAQ,IAAM2M,EAAO6Y,KAC/G,UAAY3D,EAAM7hB,MAAQ2M,EAAOiS,MAAM7vB,QAAQsC,GAAK,WAAasb,EAAO3M,MAAQ,UAAY6hB,EAAM7hB,MAClGe,EAAU,IAAIojB,GAAWqB,EAAMmB,EAASgF,KAAMhF,EAAS0L,OAAOtuB,MAAO4iB,EAAS0L,OAAO9N,MAAO5X,EAAOnR,QAASmR,EAAOkzB,UAAWtc,GAC9Hx0B,EAAU4d,EAAOiS,MAAMhD,SAASsI,SAASnjB,GAC7C,OAAQ4L,EAAO4c,YACX,IAAK,KACDx6B,EAAQwC,aAAa,aAAcswB,EAAM/mB,EAAEG,WAAa,IAAM4mB,EAAMrF,OAAOvhB,YAC3E,MACJ,IAAK,UACDlM,EAAQwC,aAAa,aAAcswB,EAAM/mB,EAAEG,WAAa,IAAM4mB,EAAM2H,KAAKvuB,WAAa,IAAM4mB,EAAM4H,IAAIxuB,YAG9G0R,EAAOy0T,cAAc1xU,YAAYX,IAOrCgpV,EAAW3uV,UAAUk9B,QAAU,SAAU3Z,GAGrC,IAAK,IAFDmsU,EAAensU,EAAOy0T,cAAc9hU,WACpCuN,EAA4B,cAApBF,EAAOw7K,SAA2B,EAAI,EACzCh8L,EAAK,EAAGyE,EAAK+b,EAAO+Y,OAAQv5B,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvD,IAAI01B,EAAQjxB,EAAGzE,IACV01B,EAAMw6S,gBAAgB7xU,QAA4B,kBAAhBmiB,EAAOlY,MAA4BotB,EAAM65S,QAAQlxU,UAGxFuD,KAAKgrV,YAAYD,EAAajsU,GAAQF,EAAQkV,GAC9ChV,OAQRkrU,EAAW3uV,UAAU2vV,YAAc,SAAUhqV,EAAS4d,EAAQkV,GAC1D,IAGI/mB,EACAC,EAGAgU,EACAC,EARA80E,EAASn3E,EAAO+3B,UAChB3e,EAASD,GAAqB,UAC9BkzT,EAASn3T,EAAMrF,OAAS,EAGxB+xK,GAAiB1sK,EAAM65S,QAAQ,GAAG53T,OAClCmmT,GAAgBpoS,EAAM65S,QAAQ,GAAG33T,MAGhC4I,EAAOiS,MAAMiG,qBAed9pB,GAAK8mB,EAAM65S,QAAQ,GAAG3gU,EAClB4R,EAAOlY,KAAKnI,QAAQ,aAAe,GACnCwO,EAAKknB,GAAmB,EAAGrV,EAAOhH,OAAUgH,EAAOhH,MAAMyb,KAAKrd,MAC9DgL,EAAUjU,EACVkU,EAAUjU,IAGVD,GAAK+mB,EAAM65S,QAAQ,GAAG5gU,EACtBkU,EAAUgqU,EAASj+U,EAAIA,EAAIwzL,EAC3Bx/K,GAAqD,IAA1CpC,EAAO4c,WAAWj9B,QAAQ,aAA2D,IAAtCqgB,EAAOlY,KAAKnI,QAAQ,aAAuBwO,EAAImvT,EAAe,EACnH+uB,IAAWrsU,EAAOhH,MAAMsc,WAAcnnB,EAAImvT,EAAenvT,KAxBlEA,GAAK+mB,EAAM65S,QAAQ,GAAG5gU,EAClB6R,EAAOlY,KAAKnI,QAAQ,aAAe,GACnCyO,GAAK,EAAIinB,GAAmB,EAAGrV,EAAOhH,QAAWgH,EAAOhH,MAAMyb,KAAW,OACzErS,EAAUjU,EACVkU,EAAUjU,IAGVA,GAAK8mB,EAAM65S,QAAQ,GAAG3gU,EACtBiU,GAAqD,IAA1CrC,EAAO4c,WAAWj9B,QAAQ,aAA2D,IAAtCqgB,EAAOlY,KAAKnI,QAAQ,aAAuByO,EAAIwzL,EAAgB,EACpHyqJ,IAAWrsU,EAAOhH,MAAMsc,WAAclnB,EAAIA,EAAIwzL,EACnDx/K,EAAUiqU,EAASl+U,EAAIA,EAAImvT,IAiBnC,IAAIl/T,EACJgE,EAAQ0D,MAAMC,WAAa,SAC3B,IAAI2zB,OAAcC,QAAQv3B,GACtBkK,SAAU6qF,EAAO7qF,SACjBrL,MAAOk2F,EAAOl2F,MACd24B,SAAU,SAAUv4B,GACZA,EAAKw4B,WAAax4B,EAAKJ,QACvBmB,EAAQ0D,MAAMC,WAAa,UACtBia,EAAOiS,MAAMiG,qBAOdolS,EAAeA,GAA8B,EAC7Cl/T,EAAQg7B,EAAO/3B,EAAKw4B,UAAYx4B,EAAKJ,MAAO,EAAGq8T,EAAcj8T,EAAKiL,UAClElK,EAAQwC,aAAa,YAAa,aAAewd,EAAU,IAAMC,EAC7D,WAAcjkB,EAAQk/T,EAAgB,mBAAsBl7S,EAAW,KAAQC,EAAW,OAT9Fu/K,EAAgBA,GAAgC,EAChDxjM,EAAQg7B,EAAO/3B,EAAKw4B,UAAYx4B,EAAKJ,MAAO,EAAG2gM,EAAevgM,EAAKiL,UACnElK,EAAQwC,aAAa,YAAa,aAAewd,EAAU,IAAMC,EAC7D,aAAgBjkB,EAAQwjM,EAAiB,gBAAmBx/K,EAAW,KAAQC,EAAW,QAU1GpC,IAAK,SAAU+D,GACX5hB,EAAQwC,aAAa,YAAa,kBAClC,IAAI6vU,EAAgBz0T,EAAOy0T,cAC3B,IAAIryU,IAAYqyU,EAActrM,kBAAoBj0G,EAAM7hB,QAAU2M,EAAO+Y,OAAOl7B,OAAS,GACpE,cAAhBmiB,EAAOlY,MAAwB1F,IAAYqyU,EAAcj5T,SAASi5T,EAAcluQ,kBAAoB,MACrGvmD,EAAOiS,MAAMrK,QAAQ,qBAAuB5H,OAAQA,IAChC,cAAhBA,EAAOlY,MAEP,IAAK,IADDqkV,EAAe1X,EAAc9hU,WACxBpV,EAAI,EAAGA,EAAI4uV,EAAatuV,OAAQN,KACY,IAA7C4uV,EAAa5uV,GAAGmH,GAAG/E,QAAQ,eAC3BwsV,EAAa5uV,GAAGuI,MAAMC,WAAa,UACnComV,EAAa5uV,GAAGqH,aAAa,YAAa,uBAWtEwmV,EAAW3uV,UAAU2oC,yBAA2B,SAAU3Q,EAAMuQ,EAASC,EAAUC,EAAYC,GAC3F,MAAO,KAAY1Q,EAAKtmB,EAAI,KAAO62B,EAAUvQ,EAAKrmB,GAC9C,MAAQqmB,EAAKtmB,EAAI,IAAMsmB,EAAKrmB,EAAI,KAAOqmB,EAAKtmB,EAAI62B,GAAW,IAC3DvQ,EAAKrmB,EAAI,OAAmBqmB,EAAKtmB,EAAIsmB,EAAKrd,MAAQ6tB,GAAY,IAAMxQ,EAAKrmB,EACzE,OAASqmB,EAAKtmB,EAAIsmB,EAAKrd,OAAS,IAAMqd,EAAKrmB,EAAI,KAC9CqmB,EAAKtmB,EAAIsmB,EAAKrd,OAAS,KAAOqd,EAAKrmB,EAAI62B,GAAY,OACnDxQ,EAAKtmB,EAAIsmB,EAAKrd,OAAS,KAAOqd,EAAKrmB,EAAIqmB,EAAKtd,OAASguB,GACpD,OAAS1Q,EAAKtmB,EAAIsmB,EAAKrd,OAAS,KAAOqd,EAAKrmB,EAAIqmB,EAAKtd,QAAU,KAAOsd,EAAKtmB,EAAIsmB,EAAKrd,MAAQ+tB,GAAe,KAC5G1Q,EAAKrmB,EAAIqmB,EAAKtd,QAAU,OAAcsd,EAAKtmB,EAAI+2B,GAAc,KAAOzQ,EAAKrmB,EAAIqmB,EAAKtd,QAAU,MAAQsd,EAAKtmB,EAAI,KAC7GsmB,EAAKrmB,EAAIqmB,EAAKtd,QAAU,IAAMsd,EAAKtmB,EAAI,KAAOsmB,EAAKrmB,EAAIqmB,EAAKtd,OAAS+tB,GAAc,MAAkBzQ,EAAKtmB,EAAI,KAC9G62B,EAAUvQ,EAAKrmB,GAAK,MAEtBg9U,KCxSP1/P,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAexCugQ,GAA8B,SAAU//P,GAExC,SAAS+/P,IACL,OAAkB,OAAX//P,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAsD/D,OAxDAsqF,GAAU4gQ,EAAc//P,GASxB+/P,EAAa7vV,UAAU0wG,OAAS,SAAUntF,GAKtC,IAAK,IAJDyU,EAGAuF,EAFAuyT,EAAiBnrV,KAAKiqV,kBAAkBrrU,GACxCq6P,EAAS5sQ,KAAKC,IAAIsS,EAAOhH,MAAM+a,aAAa5S,IAAK,GAE5C3hB,EAAK,EAAGyE,EAAK+b,EAAO+Y,OAAQv5B,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvD,IAAIgtV,EAAcvoV,EAAGzE,GAGrB,GAFAgtV,EAAY9c,mBACZ8c,EAAYzd,WACRyd,EAAY5zT,SAAWrF,GAAYvT,EAAO+Y,OAAOyzT,EAAYn5U,MAAQ,GAAIm5U,EAAaxsU,EAAO+Y,OAAOyzT,EAAYn5U,MAAQ,GAAI2M,GAAS,CACrIyU,EAAOrzB,KAAKuqV,aAAaa,EAAY58T,OAAS28T,EAAe5tV,MAAO6tV,EAAY38T,OAAQ28T,EAAY58T,OAAS28T,EAAetsU,IAAKo6P,EAAQr6P,GACzI,IAAI4X,EAA4B,cAApB5X,EAAOw7K,SAA2BgxJ,EAAY50T,MAAQ5X,EAAOypD,UACzEzvC,EAAW54B,KAAKwpJ,aAAa5qI,EAAQwsU,EAAa50T,GAASxgB,MAAO4I,EAAO0lB,OAAOtuB,MAAOwgB,MAAO5X,EAAO0lB,OAAO9N,SAC9FqC,SACV74B,KAAK0qV,qBAAqBU,EAAa/3T,EAAMzU,GAC7C5e,KAAK2jC,cAAc/kB,EAAQwsU,EAAa/3T,EAAMuF,OAU9DsyT,EAAa7vV,UAAUs4U,YAAc,SAAU/0T,GAC3C5e,KAAKu4B,QAAQ3Z,IAKjBssU,EAAa7vV,UAAUkkC,cAAgB,WACnC,MAAO,gBAUX2rT,EAAa7vV,UAAUiX,QAAU,SAAUue,KAKpCq6T,GACTlB,ICzEE1/P,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAiBxC0gQ,GAAoC,SAAUlgQ,GAE9C,SAASkgQ,IACL,OAAkB,OAAXlgQ,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAmL/D,OArLAsqF,GAAU+gQ,EAAoBlgQ,GAc9BkgQ,EAAmBhwV,UAAUiwV,qBAAuB,SAAU98T,EAAQC,EAAQ7P,EAAQwV,EAAY60T,EAAkB5jS,EAAYkmS,GAC5H,IACIxC,EADAvzT,EAAY,GAMhB,OAJmB,OAAf6vB,IAEA7vB,GAAc+1T,EAAY,KAD1BxC,EAAaE,EAAiBz6T,EAAQC,EAAQ7P,EAAO9G,MAAO8G,EAAOhH,MAAOwc,EAAYxV,IACzC,EAAI,IAAOmqU,EAAY,EAAI,KAErEvzT,GAUX61T,EAAmBhwV,UAAUmwV,sBAAwB,SAAUzC,EAAYC,EAAapqU,EAAQwV,EAAY60T,GACxG,IAAIzzT,EAAY,GAGhB,OAFAA,GAAax1B,KAAKsrV,qBAAqBvC,EAAWh8U,EAAGg8U,EAAW/7U,EAAG4R,EAAQwV,EAAY60T,EAAkB,KAAM,KAC/GzzT,GAAax1B,KAAKsrV,qBAAqBtC,EAAYj8U,EAAGi8U,EAAYh8U,EAAG4R,EAAQwV,EAAY60T,EAAkB,KAAM,MAOrHoC,EAAmBhwV,UAAU24U,cAAgB,SAAU3hT,EAAck4G,EAAU3rH,EAAQ6sU,EAAY3iT,GAC/F,GAAiC,KAA7BlqB,EAAOmxT,kBAA0B,CAGjC,IAAK,IAFDnmS,OAAU,EAELztC,EAAI,EAAGA,EAAI2sC,EAASrsC,OAAQN,IAGjC,GAFAytC,EAAUd,EAAS3sC,IACXsvV,EAAap5T,EAAa7D,OAAS6D,EAAa5D,SAC3CzuB,KAAK0rV,aAAa9hT,EAAQ5sC,MAAOyuV,EAAa7sU,EAAO9G,MAAQ8G,EAAOhH,MAAOgH,EAAOiS,SAAW+Y,EAAQ5sC,MAAO,CACrHq1B,EAAag2C,SAAWz+B,EAAQpT,MAChC,MAMR,OAH6B,MAAzBnE,EAAag2C,WACbh2C,EAAag2C,SAAWzpD,EAAOypD,WAE5B,EAGP,QAAIkiE,GACO3rH,EAAOo1T,cAAc3hT,EAAczT,EAAOypD,YAAczpD,EAAOo1T,cAAczpM,EAAU3rH,EAAOypD,WAOjHgjR,EAAmBhwV,UAAUswV,aAAe,SAAU/sU,EAAQgtU,GAC1D,IAAIz1U,EAA8B,MAAvByI,EAAOitU,YAAsBjtU,EAAO9G,MAAQ8G,EAAOhH,MAE1Dk0U,EAAS9rV,KACb,SAFkBua,OAAOqxU,GAET/zT,KAAK,SAAUsrB,EAAGrmB,GAC9B,OAAOgvT,EAAOJ,aAAavoS,EAAEnmD,MAAOmZ,EAAMyI,EAAOiS,OAASi7T,EAAOJ,aAAa5uT,EAAE9/B,MAAOmZ,EAAMyI,EAAOiS,UAS5Gw6T,EAAmBhwV,UAAU0wV,iBAAmB,SAAUntU,EAAQ5L,EAAS81B,GACvE,IAAI/oC,EAAQC,KACZ,GAAiC,KAA7B4e,EAAOmxT,kBAIP,OAHA/8T,EAAQ4kB,IAAI,SAAUm+D,GAClBh2F,EAAMmpV,eAAenzP,EAAQn3E,EAAQ,MAElC,KAEX,IAGIgrB,EAHA6hT,EAAoC,MAAvB7sU,EAAOitU,YACpB11U,EAAOs1U,EAAa7sU,EAAO9G,MAAQ8G,EAAOhH,MAC1CiZ,EAAQjS,EAAOiS,MAEnB7wB,KAAKgsV,eAAeljT,EAAU3yB,EAAMyI,EAAQkqB,EAASrsC,QAyBrD,IAAK,IAvBDO,EACA87G,EAFAr8G,EAASqsC,EAASrsC,OAGlBwC,EAAU,SAAUgT,GACpB23B,EAAUd,EAAS72B,GACnBjV,EAAQuwG,EAAOm+O,aAAa9hT,EAAQ5sC,MAAOmZ,EAAMyI,EAAOiS,QACxDioF,EAAWvL,EAAO0+O,eAAeh6U,EAAQs7F,EAAOm+O,aAAa5iT,EAAS72B,EAAQ,GAAGjV,MAAOmZ,EAAMyI,EAAOiS,OAC/F1a,EAAKwc,aAAa5S,IAAK/iB,EAAO4hB,EAAQ3M,EAAOw5U,KAE/Cz4U,EAAQ4kB,IAAI,SAAUm+D,GAClBn3E,EAAOy0T,cAAc1xU,YAAYkvB,EAAMhD,SAASsI,UAC5Cm9S,YAAax6N,EACb0wN,mBAAoB5/R,EAAQkI,UAC5BrkC,QAAWsoF,EAAOtoF,QAClBqwB,OAAUlf,EAAOlY,KAAKnI,QAAQ,SAAW,EAAIqrC,EAAQpT,OAAS5X,EAAOypD,SAAWzpD,EAAO0lB,OAAO9N,MAC9F+N,eAAgBwxD,EAAO,gBACvBn4D,KAAQhf,EAAOlY,KAAKnI,QAAQ,SAAW,EAAI,OAASqrC,EAAQpT,OAAS5X,EAAOypD,SAC5E/kE,GAAMyyF,EAAOzyF,GAAK,YAAc2O,EAChCsc,EAAKwnE,EAAOxnE,QAKxBg/E,EAASvtG,KACJiS,EAAQ,EAAGA,EAAQxV,EAAQwV,IAChChT,EAAQgT,IAGhBo5U,EAAmBhwV,UAAU2wV,eAAiB,SAAUljT,EAAU3yB,EAAMyI,EAAQniB,GAC5E,GAAIA,GAAU,EAEV,OADAqsC,EAAStkC,MAAOxH,MAAOmZ,EAAKwc,aAAarmB,IAAKkqB,MAAO5X,EAAOypD,WACrD,KAEProE,KAAK0rV,aAAa5iT,EAASrsC,EAAS,GAAGO,MAAOmZ,EAAMyI,EAAOiS,OAAS1a,EAAKwc,aAAarmB,KACtFw8B,EAAStkC,MAAOxH,MAAOmZ,EAAKwc,aAAarmB,IAAKkqB,MAAO5X,EAAOypD,YAYpEgjR,EAAmBhwV,UAAU4wV,eAAiB,SAAU9jU,EAAY+P,EAAUtZ,EAAQ3M,EAAOi6U,GACzF,IAAIC,EAAavtU,EAAOiS,MAAMiG,oBAC1Bs1T,EAAqB1xT,GAASwxT,EAAM/jU,EAAavJ,EAAO9G,MAAM6a,aAAa5S,IAAKmsU,EAAMttU,EAAOhH,MAAM+a,aAAarmB,IAAM4rB,EAAUtZ,EAAO9G,MAAO8G,EAAOhH,MAAOu0U,GAC5JE,EAAmB3xT,GAASwxT,EAAMh0T,EAAWtZ,EAAO9G,MAAM6a,aAAarmB,IAAK4/U,EAAMttU,EAAOhH,MAAM+a,aAAa5S,IAAMoI,EAAYvJ,EAAO9G,MAAO8G,EAAOhH,MAAOu0U,GAG9J,OAFAE,EAAmBF,GACdC,EAAoBA,EAAqBC,GAAkB,GAAKA,GAC/Ct/U,EAAIq/U,EAAmBr/U,EAAI,GAAOs/U,EAAiBr/U,EAAIo/U,EAAmBp/U,EAAI,GAChG4R,EAAOy0T,cAAc1xU,YAAYid,EAAOiS,MAAMhD,SAAS4rF,aAAa,IAAIyqN,GAAWtlT,EAAOiS,MAAM7vB,QAAQsC,GAAK,yBAA2B2O,EAAO,eAAiB+D,MAAO,EAAGwgB,MAAO,QAAU,GACvLzpB,EAAGq/U,EAAmBr/U,EACtBC,EAAGo/U,EAAmBp/U,EACtBgJ,MAAOq2U,EAAiBt/U,EAAIq/U,EAAmBr/U,EAC/CgJ,OAAQs2U,EAAiBr/U,EAAIo/U,EAAmBp/U,MAE7C,QAAU4R,EAAOiS,MAAM7vB,QAAQsC,GAAK,yBAA2B2O,EAAQ,KAE3E,MAQXo5U,EAAmBhwV,UAAUqwV,aAAe,SAAUvuS,EAAchnC,EAAM0a,GAItE,GAHqB,OAAjBssB,IACAA,EAAehnC,EAAKwc,aAAarmB,KAEd,aAAnB6J,EAAK+b,UAA0B,CAC/B,IAAI6jE,GAAWr0B,SAAU,OAAQh7D,KAAM,YACvC,OAAOsZ,KAAKoxC,MAAMvgC,EAAMo+C,KAAK47B,cAAc9U,EAAzBllE,CAAiCA,EAAMo+C,KAAK07B,cAAc5U,EAAzBllE,CAAiC,IAAI7Q,KAAKy/C,GAASrO,MAAM45H,WAAY/iK,IAAKk1B,IAAgBl1B,QAE5I,GAAI9R,EAAK+b,UAAU3zB,QAAQ,aAAe,EAAG,CAC9C,IAAIiwB,EAA4B,qBAAnBrY,EAAK+b,UACbirB,EAAal9B,UAAW/S,WACzBiwC,EACJ,OAAQhnC,EAAKqxT,OAAOjpU,QAAQiwB,GAAU,GAAM2uB,EAAehnC,EAAKqxT,OAAOjpU,QAAQiwB,GAG/E,OAAQ2uB,GAGTkuS,GACTrD,ICxME19P,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAexC2hQ,GAA4B,SAAUnhQ,GAEtC,SAASmhQ,IACL,OAAkB,OAAXnhQ,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAkE/D,OApEAsqF,GAAUgiQ,EAAYnhQ,GAStBmhQ,EAAWjxV,UAAU0wG,OAAS,SAAUntF,EAAQ9G,EAAOF,EAAOwc,GAC1D,IAKIm4T,EALAxsV,EAAQC,KACRqlD,EAAa,KACb7vB,EAAY,GACZyjP,EAAwC,eAA/Br6P,EAAOiS,MAAM+8S,cAAiChvT,EAAO+Y,OAAO,GAAGlJ,OACxEpiB,KAAKC,IAAIsS,EAAOhH,MAAM+a,aAAa5S,IAAK,GAExCysU,EAAc5tU,EAAOqxT,oBAAyD,SAAnCrxT,EAAOqxT,mBAAmBlyS,KACrE0wD,EAAc7vE,EAAO0lB,OAAS1lB,EAAO0lB,OAAOtuB,MAAQ,EACpDm/T,EAAcv2T,EAAO0lB,OAAS1lB,EAAO0lB,OAAO9N,MAAQ,cACpDozT,EAA+C,eAA/BhrU,EAAOiS,MAAM+8S,cAAiCz5S,GAAqBuG,GACvF9b,EAAO+Y,OAAOC,IAAI,SAAU9D,EAAO33B,EAAGksV,GAClCkE,EAAgBz4T,EAAMtF,OACtBsF,EAAMw6S,mBACNx6S,EAAM65S,WACF75S,EAAM0D,SAAWrF,GAAYk2T,EAAalsV,EAAI,GAAI23B,EAAOu0T,EAAalsV,EAAI,GAAIyiB,KAC9E4W,GAAaz1B,EAAMurV,qBAAqBiB,EAAetzE,EAAQr6P,EAAQwV,EAAYw1T,EAAevkS,EAAY,KAC9GA,EAAaA,GAAc,IAAIzxB,GAAc24T,EAAetzE,GAE5DzjP,GAAaz1B,EAAMurV,qBAAqBiB,EAAez4T,EAAMrF,OAAQ7P,EAAQwV,EAAYw1T,EAAe,KAAM,MAC1GvB,EAAalsV,EAAI,IAAOksV,EAAalsV,EAAI,GAAGq7B,SAAYg1T,IACxDh3T,GAAaz1B,EAAMyrV,uBAAwBz+U,EAAKw/U,EAAev/U,EAAKisQ,GAAU5zN,EAAYzmC,EAAQwV,EAAYw1T,GAC9GvkS,EAAa,MAEjBtlD,EAAMqpV,mBAAmBt1T,EAAOlV,EAAQwV,EAAYw1T,MAG5D5pV,KAAKkpV,eAAe,IAAI9yT,GAAWxX,EAAOiS,MAAM7vB,QAAQsC,GAAK,WAAasb,EAAO3M,MAAO2M,EAAOypD,SAAUomB,EAAa0mP,EAAav2T,EAAOnR,QAASmR,EAAOkzB,UAAYlzB,EAAO+Y,OAAOl7B,OAAS,EAAK+4B,EAAYx1B,KAAKsrV,qBAAqB1sU,EAAO+Y,OAAO/Y,EAAO+Y,OAAOl7B,OAAS,GAAG+xB,OAAuC,eAA/B5P,EAAOiS,MAAM+8S,cACjShvT,EAAO+Y,OAAO/Y,EAAO+Y,OAAOl7B,OAAS,GAAGgyB,OAASwqP,EAAQr6P,EAAQwV,EAAYw1T,EAAe,KAAM,KAAQ,IAAMhrU,EAAQ,IAC5H5e,KAAKq1U,aAAaz2T,IAOtB0tU,EAAWjxV,UAAUiX,QAAU,SAAUue,KAQzCy7T,EAAWjxV,UAAUkkC,cAAgB,WAIjC,MAAO,cAOX+sT,EAAWjxV,UAAUs4U,YAAc,SAAU/0T,GACzC,IAAIm3E,EAASn3E,EAAO+3B,UACpB32C,KAAKqpV,kBAAkBzqU,EAAQm3E,IAE5Bu2P,GACTjB,ICrFE/gQ,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAexC8hQ,GAA2B,SAAUthQ,GAErC,SAASshQ,IACL,OAAkB,OAAXthQ,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAkD/D,OApDAsqF,GAAUmiQ,EAAWthQ,GASrBshQ,EAAUpxV,UAAU0wG,OAAS,SAAUntF,GAKnC,IAAK,IAFDyU,EACAuF,EAHAqgP,EAAS5sQ,KAAKC,IAAIsS,EAAOhH,MAAM+a,aAAa5S,IAAK,GACjDorU,EAAiBnrV,KAAKiqV,kBAAkBrrU,GAGnCxgB,EAAK,EAAGyE,EAAK+b,EAAO+Y,OAAQv5B,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvD,IAAIsuV,EAAW7pV,EAAGzE,GAClBsuV,EAASpe,mBACToe,EAAS/e,WACL+e,EAASl1T,SAAWrF,GAAYvT,EAAO+Y,OAAO+0T,EAASz6U,MAAQ,GAAIy6U,EAAU9tU,EAAO+Y,OAAO+0T,EAASz6U,MAAQ,GAAI2M,KAChHyU,EAAOrzB,KAAKuqV,aAAamC,EAASl+T,OAAS28T,EAAe5tV,MAAOmvV,EAASj+T,OAAQi+T,EAASl+T,OAAS28T,EAAetsU,IAAKo6P,EAAQr6P,IAChIga,EAAW54B,KAAKwpJ,aAAa5qI,EAAQ8tU,EAAU9tU,EAAOypD,UAAYryD,MAAO4I,EAAO0lB,OAAOtuB,MAAOwgB,MAAO5X,EAAO0lB,OAAO9N,SACrGqC,SACV74B,KAAK0qV,qBAAqBgC,EAAUr5T,EAAMzU,GAC1C5e,KAAK2jC,cAAc/kB,EAAQ8tU,EAAUr5T,EAAMuF,OAU3D6zT,EAAUpxV,UAAUs4U,YAAc,SAAU/0T,GACxC5e,KAAKu4B,QAAQ3Z,IAOjB6tU,EAAUpxV,UAAUiX,QAAU,SAAUue,KAQxC47T,EAAUpxV,UAAUkkC,cAAgB,WAChC,MAAO,aAEJktT,GACTzC,ICrEE1/P,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAkBxCgiQ,GAAiC,SAAUxhQ,GAE3C,SAASwhQ,IACL,OAAkB,OAAXxhQ,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAyX/D,OA3XAsqF,GAAUqiQ,EAAiBxhQ,GAS3BwhQ,EAAgBtxV,UAAUupU,YAAc,SAAUvxS,GAC9C,IAAIxC,EAAQ7wB,KAAK6wB,MACjB7wB,KAAK8kU,gBAAkBzxS,EACvBrzB,KAAK6kU,eAAiB,IAAI3uS,GAAK7C,EAAKtmB,EAAGsmB,EAAKrmB,EAAGqmB,EAAKrd,MAAOqd,EAAKtd,QAEhE/V,KAAKmlU,eAAet0S,EAAO7wB,KAAK8kU,iBAChC9kU,KAAKolU,kBAAkBv0S,EAAO7wB,KAAK8kU,iBACnC9kU,KAAKqlU,qBAETsnB,EAAgBtxV,UAAU8pU,eAAiB,SAAUt0S,EAAOwC,GACxDrzB,KAAKulU,iBAAiBlyS,GACtB,IAAIqtC,EAAM7vC,EAAM0nQ,KAAK,GACrBv4R,KAAKylU,kBAAkB/kQ,EAAK7vC,EAAO,IAAIzD,GAAKyD,EAAM8E,cAAc3f,MAAO0qD,EAAIglQ,gBAAiBryS,IAEhGs5T,EAAgBtxV,UAAU+pU,kBAAoB,SAAUv0S,EAAOwC,GAC3DrzB,KAAK2lU,oBAAoBtyS,GACzB,IAAIwpC,EAAShsC,EAAMktC,QAAQ,GAC3B/9D,KAAKylU,kBAAkB5oQ,EAAQhsC,EAAO,IAAIzD,GAAKyvC,EAAO+oQ,cAAe/0S,EAAM8E,cAAc5f,QAASsd,IAOtGs5T,EAAgBtxV,UAAUoqU,kBAAoB,SAAUI,EAAYh1S,EAAO/D,EAAM4H,GAC7E,IAAK,IAAIt2B,EAAK,EAAGyE,EAAKgjU,EAAWp+P,KAAMrpE,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACzD,IAAI+X,EAAOtT,EAAGzE,GACd+X,EAAKgtT,UAAUtyS,GACf1a,EAAKitT,WAAWnF,0BAA0BnxS,EAAM3W,KAQxDw2U,EAAgBtxV,UAAUgqU,kBAAoB,WAC1C,IAAIx0S,EAAQ7wB,KAAK6wB,MAGjB7wB,KAAKghB,QAAuC,GAA7BhhB,KAAK8kU,gBAAgB9uT,MAAchW,KAAK8kU,gBAAgB/3T,EACvE/M,KAAKihB,QAAwC,GAA9BjhB,KAAK8kU,gBAAgB/uT,OAAe/V,KAAK8kU,gBAAgB93T,EACxE6jB,EAAMjkB,OAASP,KAAK0T,IAAI/f,KAAK8kU,gBAAgB9uT,MAAOhW,KAAK8kU,gBAAgB/uT,QAAU,EAHrE,EAIV8a,EAAM2D,aAAautS,eAAehsT,OAAS8a,EAAM2D,aAAa0tS,aAAansT,OAC/E8a,EAAMjkB,OAAUikB,EAAM2D,aAAaQ,YAAcnE,EAAMjkB,OAAU,IACjE5M,KAAK6kU,eAAe73T,EAAIhN,KAAKihB,QAAU4P,EAAMjkB,OAC7C5M,KAAK6kU,eAAe93T,EAAI/M,KAAKghB,QAAU6P,EAAMjkB,OAC7C5M,KAAK6kU,eAAe9uT,OAAS,EAAI8a,EAAMjkB,OACvC5M,KAAK6kU,eAAe7uT,MAAQ,EAAI6a,EAAMjkB,OACtC5M,KAAKulU,iBAAiBvlU,KAAK6kU,gBACpBh0S,EAAMy2S,aACRj0S,KAAOrzB,KAAK6kU,eACjB7kU,KAAK2lU,oBAAoB3lU,KAAK6kU,gBACvBh0S,EAAM2D,aACRnB,KAAOrzB,KAAK6kU,gBAOrB8nB,EAAgBtxV,UAAUugS,QAAU,WAChC,IAAI/qQ,EAAQ7wB,KAAK6wB,MACjBA,EAAMg2S,aAAariU,KAAKqsB,EAAMy2S,cAC9B,IAAI5mQ,EAAM7vC,EAAM0nQ,KAAK,GACrB73N,EAAI+G,KAAK,GAAK52C,EAAMy2S,aACpBz2S,EAAM0nQ,KAAK,GAAK73N,EAChB7vC,EAAMm2S,eAAexiU,KAAKqsB,EAAM2D,cAChC,IAAIqoC,EAAShsC,EAAMktC,QAAQ,GAC3BlB,EAAO4K,KAAK,GAAK52C,EAAM2D,aACvB3D,EAAMktC,QAAQ,GAAKlB,GAMvB8vR,EAAgBtxV,UAAUkqU,iBAAmB,SAAUlyS,GAEnD,IAAIxC,EAAQ7wB,KAAK6wB,MACb6vC,EAAM7vC,EAAM0nQ,KAAK,GACrB73N,EAAIglQ,eAAiBryS,EAAKtd,OAAS,EACnC2qD,EAAI2lQ,YAAchzS,EAAKrmB,EACvB6jB,EAAM0nQ,KAAK,GAAK73N,GAMpBisR,EAAgBtxV,UAAUsqU,oBAAsB,SAAUtyS,GAEtD,IAAIxC,EAAQ7wB,KAAK6wB,MACbgsC,EAAShsC,EAAMktC,QAAQ,GAC3BlB,EAAO4pQ,aAAepzS,EAAKtmB,EAC3B8vD,EAAO+oQ,cAAgBvyS,EAAKrd,MAC5B6a,EAAMktC,QAAQ,GAAKlB,GAOvB8vR,EAAgBtxV,UAAU2sU,WAAa,WACnC,IAAI7xT,EACA0a,EAAQ7wB,KAAK6wB,MACjB7wB,KAAKy0B,WAAa5D,EAAM2D,aAAaC,WAGrC,IAAK,IAFDyzS,EAAcr3S,EAAMhD,SAASw+C,aAAc/oE,GAAIutB,EAAM7vB,QAAQsC,GAAK,mBAClE6kU,EAAkBt3S,EAAMhD,SAASw+C,aAAc/oE,GAAIutB,EAAM7vB,QAAQsC,GAAK,0BACjEnH,EAAI,EAAG0F,EAAMgvB,EAAM81S,gBAAgBlqU,OAAQN,EAAI0F,EAAK1F,IACzD6D,KAAKgB,QAAU6vB,EAAMhD,SAASw+C,aAAc/oE,GAAIutB,EAAM7vB,QAAQsC,GAAK,YAAcnH,IAExD,gBADzBga,EAAO0a,EAAM81S,gBAAgBxqU,IACpBi9B,cACDjjB,EAAKmyT,eAAetyT,MAAQ,GAAKG,EAAK4rT,eAAe/rT,MAAQ,IAC7DhW,KAAKuoU,kBAAkBpyT,EAAMha,GAE7Bga,EAAKqhB,SACLx3B,KAAKwoU,gBAAgBryT,EAAMha,KAI/B6D,KAAK2oU,kBAAkBxyT,EAAMha,GACzBga,EAAK4qT,UAAU/qT,MAAQ,GACvBhW,KAAK4sV,cAAcz2U,EAAMha,EAAGga,EAAKmwT,WAAY,GAE7CnwT,EAAKqhB,SACLx3B,KAAK4oU,gBAAgBzyT,EAAMha,IAGnC+rU,EAAYvmU,YAAY3B,KAAKgB,SAIjC,OAFAknU,EAAYvmU,YAAY3B,KAAKgB,SAC7B6vB,EAAMS,UAAU3vB,YAAYumU,GACrBC,GAEXwkB,EAAgBtxV,UAAUuxV,cAAgB,SAAUz2U,EAAMlE,EAAOq3T,EAAOC,GACpE,IAAI14S,EAAQ7wB,KAAK6wB,MACbw4S,KACAwjB,EAASv4T,GAAoBC,GAAwBpe,EAAKgf,cAAc,GAAGn4B,MAAOmZ,GAAOnW,KAAKy0B,YAC9FvF,EAAW,KAAOlvB,KAAKghB,QAAU,IAAMhhB,KAAKihB,QAAU,MACrDjhB,KAAKghB,QAAU6P,EAAMjkB,OAASigV,EAAO9/U,GAAK,KAAO/M,KAAKihB,QAAU4P,EAAMjkB,OAASigV,EAAO7/U,GAC3Fq8T,GACI/lU,GAAMutB,EAAM7vB,QAAQsC,GAAK,YAAc2O,EACvCsc,EAAKW,EACLs6S,mBAAoBrzT,EAAK4qT,UAAUjvR,UACnCvN,eAAgBpuB,EAAK4qT,UAAU/qT,MAC/B8nB,OAAU3nB,EAAK4qT,UAAUvqS,OAAS3F,EAAMwF,WAAWnH,UAEvD2B,EAAMgsT,cAAcl7U,YAAYkvB,EAAMhD,SAASsI,SAASkzS,KAE5DsjB,EAAgBtxV,UAAUutU,gBAAkB,SAAUzyT,EAAMlE,GACxD,IACI6xR,EAIA+oD,EAGAjgV,EARAikB,EAAQ7wB,KAAK6wB,MAGb0xS,EAAS,EACTmH,EAAS,EAETnoT,EAAQvhB,KAAKy0B,WAAa,EAAIz0B,KAAKy0B,WAAa,IAAMz0B,KAAKy0B,WAI3DzN,EAAe6J,EAAMhD,SAASw+C,aAAc/oE,GAAIutB,EAAM7vB,QAAQsC,GAAK,aAAe2O,IACtF46U,EAASv4T,GAAoBC,GAAwBpe,EAAKgf,cAAc,GAAGn4B,MAAOmZ,GAAOnW,KAAKy0B,YAC9F,IAAK,IAAIt4B,EAAI,EAAG0F,EAAMsU,EAAKgf,cAAc14B,OAAQN,EAAI0F,EAAK1F,IACtDyQ,EAASikB,EAAMjkB,OAASqnB,GAAmB9d,EAAKgf,cAAch5B,GAAGa,MAAOmZ,GACxE2tR,EAAc3tR,EAAKgf,cAAch5B,GAAG2wB,KACpClgB,EAASikB,EAAMjkB,OAASqnB,GAAmB9d,EAAKgf,cAAch5B,GAAGa,MAAOmZ,GACxEosT,EAAUviU,KAAKghB,QAAUpU,EAASigV,EAAO9/U,GAAOoJ,EAAK4rT,eAAehsT,OAAS+tR,EAAY9tR,MAAQ,EAAIojD,KAC9F/sD,KAAKoV,IAAIF,EAAQlV,KAAK+Q,GAAK,MAAgC,WAAvBjH,EAAKspG,cAA6B,GAAK,GAClFiqN,EAAU1pU,KAAKihB,QAAUrU,EAASigV,EAAO7/U,GAAOmJ,EAAK4rT,eAAehsT,OAAS+tR,EAAY/tR,OAAS,GAC3F1J,KAAKqV,IAAIH,EAAQlV,KAAK+Q,GAAK,MAAgC,WAAvBjH,EAAKspG,cAA6B,GAAK,GAElFnpF,GADU,IAAIC,GAAW1F,EAAM7vB,QAAQsC,GAAK2O,EAAQ,cAAgB9V,EAAGomU,EAAQmH,EAAU5lC,EAAY/tR,OAAS,EAbrG,SAaiHI,EAAKgf,cAAch5B,GAAGswB,MAC3HtW,EAAK6f,WAAY7f,EAAK6f,WAAWQ,OAAS3F,EAAMwF,WAAWrH,UAAWhI,GAE/F6J,EAAMgsT,cAAcl7U,YAAYqlB,IAEpC2lU,EAAgBtxV,UAAUstU,kBAAoB,SAAUxyT,EAAMlE,GAC1D,IACIe,EACApG,EAGAigV,EACAvyS,EAGAtf,EACAC,EACAC,EACAC,EAZAtK,EAAQ7wB,KAAK6wB,MAGb+4S,EAAY,GACZD,EAAY,GAGZpoT,EAAQvhB,KAAKy0B,WAAa,EAAIz0B,KAAKy0B,WAAa,IAAMz0B,KAAKy0B,WAM3D6P,GALOnuB,EAAKkd,MAMZmD,MAAOrgB,EAAKmyT,eAAe9xS,OAAS3F,EAAMwF,WAAWlH,cACrDnZ,MAAOG,EAAKmyT,eAAetyT,QAE/B,GAAIG,EAAKmyT,eAAetyT,MAAQ,EAC5B,GAAoC,UAAhC6a,EAAMoQ,cAAc,GAAGv6B,KACvB,IAAK,IAAI6c,EAAI,EAAGA,EAAIpN,EAAKgf,cAAc14B,OAAQ8mB,IAC3C3W,EAASikB,EAAMjkB,OAASqnB,GAAmB9d,EAAKgf,cAAc5R,GAAGvmB,MAAOmZ,GACxEnD,EAAU,IAAImxT,GAAatzS,EAAM7vB,QAAQsC,GAAK,kBAAoB2O,EAAO,cAAeqyB,EAAQnuB,EAAKmyT,eAAetyT,MAAOhW,KAAKghB,QAAShhB,KAAKihB,QAASrU,GACvJ5M,KAAKgB,QAAQW,YAAYkvB,EAAMhD,SAAS6V,WAAW1wB,QAGtD,CACD,IAASuQ,EAAI,EAAGA,EAAIpN,EAAKgf,cAAc14B,OAAQ8mB,IAAK,CAChD3W,EAASikB,EAAMjkB,OAASqnB,GAAmB9d,EAAKgf,cAAc5R,GAAGvmB,MAAOmZ,GACxE,IAAK,IAAIha,EAAI,EAAG0F,EAAMgvB,EAAM2D,aAAaW,cAAc14B,OAAQN,EAAI0F,EAAK1F,IACpE0wV,EAASv4T,GAAoBC,GAAwB1D,EAAM2D,aAAaW,cAAch5B,GAAGa,MAAO6zB,EAAM2D,cAAex0B,KAAKy0B,YAEtH6lB,EAAUhmB,GAAoBC,GAD9Bp4B,EAAI,EAAI0F,EAC8CgvB,EAAM2D,aAAaW,cAAch5B,EAAI,GAAGa,MAGxC6zB,EAAM2D,aAAaW,cAAc,GAAGn4B,MAHW6zB,EAAM2D,cAAex0B,KAAKy0B,YAKnIuG,EAAKh7B,KAAKghB,QAAUpU,EAASigV,EAAO9/U,EACpCkuB,EAAKj7B,KAAKihB,QAAUrU,EAASigV,EAAO7/U,EACpCkuB,EAAKl7B,KAAKghB,QAAUpU,EAAS0tC,EAAQvtC,EACrCouB,EAAKn7B,KAAKihB,QAAUrU,EAAS0tC,EAAQttC,EACrC28T,EAAYA,EAAUpvT,OAAO,KAAYygB,EAAK,IAAMC,EAAK,MAAkBC,EAAK,IAAMC,EAAK,KAGnGnoB,EAAU,IAAIojB,GAAWvF,EAAM7vB,QAAQsC,GAAK,kBAAoB2O,EAAO,cAAekE,EAAKmyT,eAAetyT,MAAOG,EAAKmyT,eAAe9xS,OAAS3F,EAAMwF,WAAWlH,cAAe,KAAM,KAAMw6S,GAC1L3pU,KAAKgB,QAAQW,YAAYkvB,EAAMhD,SAASsI,SAASnjB,IAGzD,GAAImD,EAAK4rT,eAAe/rT,MAAQ,EAAG,CAC/B62U,EAASv4T,GAAoBC,GAAwBpe,EAAKgf,cAAc,GAAGn4B,MAAOmZ,GAAOnW,KAAKy0B,YAC9F,IAASt4B,EAAI,EAAGA,EAAIga,EAAKgf,cAAc14B,OAAQN,IAC3CyQ,EAASikB,EAAMjkB,OAASqnB,GAAmB9d,EAAKgf,cAAch5B,GAAGa,MAAOmZ,GACxE6kB,EAAKh7B,KAAKghB,QAAUpU,EAASigV,EAAO9/U,EACpCkuB,EAAKj7B,KAAKihB,QAAUrU,EAASigV,EAAO7/U,EACpCkuB,EAAKF,EAAM7kB,EAAK4rT,eAAehsT,OAAU1J,KAAKoV,IAAIF,EAAQlV,KAAK+Q,GAAK,MAA+B,WAAtBjH,EAAK0rT,aAA4B,GAAK,GACnH1mS,EAAKF,EAAM9kB,EAAK4rT,eAAehsT,OAAU1J,KAAKqV,IAAIH,EAAQlV,KAAK+Q,GAAK,MAA+B,WAAtBjH,EAAK0rT,aAA4B,GAAK,GACnH+H,EAAYA,EAAUrvT,OAAO,KAAOygB,EAAK,IAAMC,EAC3C,MAAQC,EAAK,IAAMC,EAAK,KAGpCn7B,KAAKyqU,eAAet0T,EAAMlE,EAAO23T,EAAW,KAEhD+iB,EAAgBtxV,UAAUktU,kBAAoB,SAAUpyT,EAAMlE,GAiB1D,IAAK,IAfD0mB,EACAk0T,EAMA3xT,EAEAC,EACAsuS,EAXA54S,EAAQ7wB,KAAK6wB,MAGb84S,EAAY,GACZC,EAAY,GACZkjB,EAAgB,GAChBx9T,EAAgB,GAChB0L,EAAKh7B,KAAKghB,QAEVia,EAAKj7B,KAAKihB,QAKVxkB,GAFW0Z,EAAK4rT,eAAehsT,OACxBI,EAAKkd,KACHld,EAAKgf,cAAc14B,QAEvBN,EAAI,EAAGA,EAAIM,EAAQN,IAAK,CAC7Bw8B,EAAexiB,EAAKgf,cAAch5B,GAAGa,MACrC6vV,EAASv4T,GAAoBC,GAAwBpe,EAAKgf,cAAch5B,GAAGa,MAAOmZ,GAAOnW,KAAKy0B,YAC9FyG,EAAKl7B,KAAKghB,QAAU6P,EAAMjkB,OAASigV,EAAO9/U,EAC1CouB,EAAKn7B,KAAKihB,QAAU4P,EAAMjkB,OAASigV,EAAO7/U,EAC1C,IAAI+/U,EAAO7xT,EAAM/kB,EAAK4rT,eAAehsT,OAAS82U,EAAO9/U,GAA2B,WAAtBoJ,EAAK0rT,cAA6B,EAAI,GAC5FmrB,EAAO7xT,EAAMhlB,EAAK4rT,eAAehsT,OAAS82U,EAAO7/U,GAA2B,WAAtBmJ,EAAK0rT,cAA6B,EAAI,GAChG8H,EAAYA,EAAUpvT,OAAO,KAAOygB,EAAK,IAAMC,EAAK,KAAYC,EAAK,IAAMC,GAC3EyuS,EAAYA,EAAUrvT,OAAO,KAAO2gB,EAAK,IAAMC,EAC3C,MAAQ4xT,EAAO,IAAMC,EAAO,KAC5B72U,EAAKm0T,sBAAwB,IAAMn0T,EAAKi0T,eAAep0T,MAAQ,GAAKG,EAAKk0T,eAAer0T,MAAQ,IAC1E,aAAnBG,EAAK+b,WAA4D,UAAhCrB,EAAMoQ,cAAc,GAAGv6B,OAE3DomV,GADArjB,EAAiBzpU,KAAKuqU,kBAAkBp0T,EAAMwiB,EAAcm0T,EAAex9T,IAC5C,GAC/BA,EAAgBm6S,EAAe,IAGvCzpU,KAAKyqU,eAAet0T,EAAMlE,EAAO23T,EAAWt6S,GAC5CtvB,KAAKwqU,eAAer0T,EAAMlE,EAAO03T,EAAWmjB,IAEhDH,EAAgBtxV,UAAUkvU,kBAAoB,SAAUp0T,EAAMwiB,EAAckxS,EAAWC,GASnF,IAAK,IAPD/8T,EACAC,EACA6/U,EAHA7vV,EAAQ27B,EAIR5G,EAAQ5b,EAAKwc,aACb6C,KAGKjS,GAFMpN,EAAKk0T,eAAet0T,OACxBI,EAAKkd,KACH,GAAG9P,EAAIpN,EAAKm0T,sBAAuB/mT,IAG5C,GAFAvmB,IAA6B,aAAnBmZ,EAAK+b,UAA2B/b,EAAK+e,iBAAmB/e,EAAKwc,aAAaxwB,WAC/EgU,EAAKm0T,sBAAwB,GAC9Bx4S,GAAO90B,EAAO+0B,GAAQ,CACtB86T,EAASv4T,GAAoBC,GAAwBv3B,EAAOmZ,GAAOnW,KAAKy0B,YACxE1nB,EAAI/M,KAAKghB,QAAUhhB,KAAK6wB,MAAMjkB,OAASigV,EAAO9/U,EAC9CC,EAAIhN,KAAKihB,QAAUjhB,KAAK6wB,MAAMjkB,OAASigV,EAAO7/U,EAC9C,IAAIigV,EAAYlgV,EAAKoJ,EAAKk0T,eAAet0T,OAAS82U,EAAO9/U,GAA2B,WAAtBoJ,EAAK0rT,cAA6B,EAAI,GAChGqrB,EAAYlgV,EAAKmJ,EAAKk0T,eAAet0T,OAAS82U,EAAO7/U,GAA2B,WAAtBmJ,EAAK0rT,cAA6B,EAAI,GACpGgI,EAAYA,EAAUtvT,OAAO,KAAYva,KAAKghB,QAAU,IAAMhhB,KAAKihB,QAC7D,KAAOlU,EAAI,IAAMC,GACvB88T,EAAYA,EAAUvvT,OAAO,KAAYxN,EAAI,IAAMC,EAAI,OAA0B,OAMzF,OAFAwoB,EAAUhxB,KAAKqlU,GACfr0S,EAAUhxB,KAAKslU,GACRt0S,GAOXm3T,EAAgBtxV,UAAUmtU,gBAAkB,SAAUryT,EAAMlE,GACxD,IAMI46U,EACAM,EACAC,EAGAC,EAXAx8T,EAAQ7wB,KAAK6wB,MACb0xS,EAAS,EAETmH,EAAS,EACT1iT,EAAe6J,EAAMhD,SAASw+C,aAAc/oE,GAAIutB,EAAM7vB,QAAQsC,GAAK,aAAe2O,IAKlF85T,EAAuC,WAAvB51T,EAAKspG,cAGrB6tO,EAAa,GACbrjB,EAAmC,aAAnB9zT,EAAK+b,WAAoD,iBAAxB/b,EAAKke,gBACnB,UAAhCxD,EAAMoQ,cAAc,GAAGv6B,KAAmB,GAAM,EACnDkG,EAASikB,EAAMjkB,OAASuJ,EAAK4rT,eAAehsT,OAChDnJ,EAAS,GAAmBA,EAASA,EACrC,IAAK,IAAIzQ,EAAI,EAAG0F,EAAMsU,EAAKgf,cAAc14B,OAAQN,EAAI0F,EAAK1F,IACtD0wV,EAASv4T,GAAoBC,GAAwBpe,EAAKgf,cAAch5B,GAAGa,MAAQitU,EAAe9zT,GAAOnW,KAAKy0B,YACzGutB,MAAM6qS,EAAO9/U,IAAOi1C,MAAM6qS,EAAO7/U,KAClCu1T,EAASviU,KAAKghB,SAAWpU,EAASuJ,EAAK4rT,eAAehsT,OAVhD,GAUoE82U,EAAO9/U,EACjF28T,EAAS1pU,KAAKihB,SAAWrU,EAASuJ,EAAK4rT,eAAehsT,OAXhD,GAWoE82U,EAAO7/U,EACjFsgV,EAAa9xU,WAAW+mT,EAAOvjT,QAAQ,MAAQxD,WAAWxb,KAAKghB,QAAQhC,QAAQ,IAAM,SAC/EujT,EAASviU,KAAKghB,UAAY+qT,GAAmBxJ,EAASviU,KAAKghB,SAAW+qT,EAAkB,MAAQ,SAE1GohB,EAAYh3U,EAAKgf,cAAch5B,GAAGswB,KACxB,IAANtwB,EACAixV,EAAc7qB,EAETpmU,IAAMga,EAAKgf,cAAc14B,OAAS,GAAwB,aAAnB0Z,EAAK+b,YACjDm7T,EAAa7gU,GAAY2gU,EAAWh3U,EAAK6f,YAAYjgB,OAErDo3U,GADAE,GAAc9qB,GACY6qB,EAAe,GAAKD,GAGlD72T,GADU,IAAIC,GAAW1F,EAAM7vB,QAAQsC,GAAK2O,EAAQ,cAAgB9V,EAAGomU,EAAQmH,EAAQ4jB,EAAYH,EAAW,GAAI,WAC7Fh3U,EAAK6f,WAAY7f,EAAK6f,WAAWQ,OAAS3F,EAAMwF,WAAWrH,UAAWhI,GAE/FhnB,KAAKgB,QAAQW,YAAYqlB,IAE7B2lU,EAAgBtxV,UAAUovU,eAAiB,SAAUt0T,EAAMlE,EAAOod,EAAeC,GAC7E,IAAIi+T,EACA18T,EAAQ7wB,KAAK6wB,MACb1a,EAAK4rT,eAAe/rT,MAAQ,IAC5Bu3U,EAAc,IAAIn3T,GAAWvF,EAAM7vB,QAAQsC,GAAK,kBAAoB2O,EAAO,cAAekE,EAAK4rT,eAAe/rT,MAAOG,EAAK4rT,eAAevrS,OAAS3F,EAAMwF,WAAWhH,cAAe,KAAM,KAAMA,GAC9LwB,EAAMgsT,cAAcl7U,YAAYkvB,EAAMhD,SAASsI,SAASo3T,KAExDp3U,EAAKk0T,eAAer0T,MAAQ,IAC5Bu3U,EAAc,IAAIn3T,GAAWvF,EAAM7vB,QAAQsC,GAAK,kBAAoB2O,EAAO,cAAekE,EAAKk0T,eAAer0T,MAAOG,EAAKk0T,eAAe7zS,OAAS3F,EAAMwF,WAAW/G,cAAe,KAAM,KAAMA,GAC9LuB,EAAMgsT,cAAcl7U,YAAYkvB,EAAMhD,SAASsI,SAASo3T,MAGhEZ,EAAgBtxV,UAAUmvU,eAAiB,SAAUr0T,EAAMlE,EAAO03T,EAAWE,GACzE,IACI2jB,EADA38T,EAAQ7wB,KAAK6wB,MAEb1a,EAAKmyT,eAAetyT,MAAQ,IAC5Bw3U,EAAc,IAAIp3T,GAAWvF,EAAM7vB,QAAQsC,GAAK,kBAAoB2O,EAAO,cAAekE,EAAKmyT,eAAetyT,MAAOG,EAAKmyT,eAAe9xS,OAAS3F,EAAMwF,WAAWlH,cAAe,KAAMhZ,EAAKmyT,eAAex2R,UAAW63R,GACvN3pU,KAAKgB,QAAQW,YAAYkvB,EAAMhD,SAASsI,SAASq3T,KAEjDr3U,EAAKi0T,eAAep0T,MAAQ,IAC5Bw3U,EAAc,IAAIp3T,GAAWvF,EAAM7vB,QAAQsC,GAAK,kBAAoB2O,EAAO,cAAekE,EAAKi0T,eAAep0T,MAAOG,EAAKi0T,eAAe5zS,OAAS3F,EAAMwF,WAAWjH,cAAe,KAAMjZ,EAAKi0T,eAAet4R,UAAW+3R,GACvN7pU,KAAKgB,QAAQW,YAAYkvB,EAAMhD,SAASsI,SAASq3T,MAGlDb,GACT3E,IC/YE19P,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAiBxC8iQ,GAA6B,SAAUtiQ,GAEvC,SAASsiQ,IACL,OAAkB,OAAXtiQ,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAkR/D,OApRAsqF,GAAUmjQ,EAAatiQ,GASvBsiQ,EAAYpyV,UAAU0wG,OAAS,SAAUntF,GACrC,IAAI4c,EAAazE,GAAiBnY,EAAOguT,UACrChuT,EAAOguT,SAASruU,QAAQ,WAAa,EACrCyB,KAAK0tV,qBAAqB9uU,GAG1BA,EAAOiS,MAAM2K,EAAa,gBAAgBuwE,OAAOntF,EAAQA,EAAO9G,MAAO8G,EAAOhH,MAAOgH,EAAOiS,MAAMiG,sBAQ1G22T,EAAYpyV,UAAUqyV,qBAAuB,SAAU9uU,GAC/BA,EAAO+Y,OAA3B,IAEI3kB,EACA4lB,EACAnE,EACAuQ,EACA2oT,EACA/gV,EACAghV,EACAC,EACA7yT,EACAE,EACAD,EACAE,EACAhT,EACA+P,EACAmO,EAEAynT,EACAC,EAEAC,EACAC,EALAjtU,EAAWpC,EAAO8V,SAAS1e,MAAQ,EAAK4I,EAAO8V,SAAS3nB,EAGxDkU,EAAWrC,EAAO8V,SAAS3e,OAAS,EAAK6I,EAAO8V,SAAS1nB,EAIzDwoB,GADe5W,EAAO9G,MAAMoc,WAChB,IACZg6T,EAAe,EACf/rV,GAAYyc,EAAO+Y,OAAO,GAAK/Y,EAAO+Y,OAAO,GAAGnJ,OAAS,EAAI5P,EAAO+Y,OAAO,GAAGnJ,QAAU5P,EAAO+Y,OAAO,GAAGnJ,OACzGyxG,EAAmC,aAA3BrhH,EAAO9G,MAAMoa,WAA4D,iBAAhCtT,EAAO9G,MAAMuc,eAAoC,EAAIlyB,EAAW,EACjHgsV,EAA2C,aAA3BvvU,EAAO9G,MAAMoa,UAA2BtT,EAAO9G,MAAMod,iBAAmB,EACxFnV,EAAMnB,EAAO9G,MAAM+lT,YAAY99S,IAEnC/f,KAAKouV,kBAAkBxvU,GACvB,IAAI1K,EAAW0K,EAAO9G,MAAMoc,WAActV,EAAOu9T,UAAY,EAAIv9T,EAAO1K,SAAY0K,EAAO1K,SAC5C,aAA3B0K,EAAO9G,MAAMoa,WAA4D,iBAAhCtT,EAAO9G,MAAMuc,gBAC7DzV,EAAOu9T,UACpB,GACI+R,GAAgBC,EAChBpuU,GAAOouU,QACFpuU,GAAOnB,EAAO9G,MAAM+lT,YAAYvxT,KAAkC,aAA3BsS,EAAO9G,MAAMoa,UAA2B,EAAI,IAC5F,IAAK,IAAI9zB,EAAK,EAAGyE,EAAK+b,EAAO+Y,OAAQv5B,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvD,IAAI01B,EAAQjxB,EAAGzE,GACf01B,EAAMw6S,mBACNx6S,EAAM65S,WACF75S,EAAM0D,SAAWrF,GAAYvT,EAAO+Y,OAAO7D,EAAM7hB,MAAQ,GAAI6hB,EAAOlV,EAAO+Y,OAAO7D,EAAM7hB,MAAQ,GAAI2M,KAGpG+uU,GAFgB/uU,EAAO9G,MAAMoc,WAActV,EAAO9G,MAAM6a,aAAarmB,IAAMwnB,EAAMtF,OAC7EsF,EAAMtF,OAAS5P,EAAO9G,MAAM6a,aAAa5S,MAEvC5d,EAAWyc,EAAOu9T,UAAajoU,EAAW+rH,GAAUiuN,EAAe,IAAMtvU,EAAO9G,MAAM2c,WAC5Fk5T,KAGAC,EAFAn5T,EAAa,EAAIpoB,KAAK+Q,IAAMuwU,EAAkB/uU,EAAO9G,MAAM2c,YAG3Do5T,EAFA7oT,EAAW,EAAI34B,KAAK+Q,IAAOuwU,EAAkB/uU,EAAO9G,MAAM2c,WAAetyB,EAAWyc,EAAOu9T,aAG3F1nT,GAA2B,GAAMpoB,KAAK+Q,GACtC4nB,EAAYA,EAAW,GAAM34B,KAAK+Q,GAAM,KAChB,mBAApBwB,EAAOguT,UAAqD,gBAApBhuT,EAAOguT,UAC/CzkT,EAAiC,gBAApBvJ,EAAOguT,SAA6B94S,EAAM4H,IAAM9c,EAAO4zT,cAAcxO,YAAYlwS,EAAM7hB,OACpGimB,EAA+B,gBAApBtZ,EAAOguT,SAA6B94S,EAAM2H,KAAO7c,EAAO4zT,cAAcvO,UAAUnwS,EAAM7hB,OAKjG+oB,EAAKha,GADLpU,EAASub,KADT+P,GAFAA,EAAuC,gBAA3BtZ,EAAOhH,MAAMsa,UACrBX,GAAqB,IAAb2G,EAAiB,EAAIA,EAAUtZ,EAAOhH,MAAM2Z,SAAW2G,GAC7CtZ,EAAOhH,MAAMimT,YAAYvxT,IAAMsS,EAAOhH,MAAMimT,YAAYvxT,IAAM4rB,GACjD,EAAItZ,EAAOiS,MAAMjkB,OAASqnB,GAAmBiE,EAAUtZ,EAAOhH,QACzEvL,KAAKoV,IAAIgT,GACjCyG,EAAKla,EAAUpU,EAASP,KAAKoV,IAAIujB,GACjC/J,EAAKha,EAAUrU,EAASP,KAAKqV,IAAI+S,GACjC0G,EAAKla,EAAUrU,EAASP,KAAKqV,IAAIsjB,GAEjC8oT,EAAU9sU,GADVqlB,EAAcznB,EAAOiS,MAAMjkB,OAASqnB,GAAmC,IAAf9L,GAAsD,IAAlCvJ,EAAOhH,MAAM+a,aAAa5S,IAAanB,EAAOhH,MAAM+a,aAAa5S,IAAMoI,EAAYvJ,EAAOhH,QACpIvL,KAAKoV,IAAIgT,GAC3Cs5T,EAAU9sU,EAAUolB,EAAch6B,KAAKqV,IAAI+S,GAC3Cu5T,EAAQhtU,EAAUqlB,EAAch6B,KAAKoV,IAAIujB,GACzCipT,EAAQhtU,EAAUolB,EAAch6B,KAAKqV,IAAIsjB,GAErCxP,EADgB,UAAhB5W,EAAOlY,KACM,KAAYs0B,EAAK,IAAMC,EAAK,MAAkBruB,EAAS,IAAMA,EAAS,UACvDsuB,EAAK,IAAMC,EAAK,MAAkB6yT,EAAQ,IAAMC,EAAQ,MACpE5nT,EAAc,IAAMA,EAAc,UAC5CynT,EAAU,IAAMC,EAAU,KAGnB,KAAY/yT,EAAK,IAAMC,EAAK,MAAkBC,EAAK,IAAMC,EAAK,KACrE6yT,EAAQ,IAAMC,EAAQ,MAAkBH,EAAU,IAAMC,EAAU,KAE5Ej6T,EAAM45S,WAAa,IAAI7J,GAAS+pB,EAAiBC,EAAexnT,EAAaz5B,EAAQ+gV,KAGrFz1T,EAAWpE,EAAMrF,OAAS7P,EAAOhH,MAAMimT,YAAYvxT,IAAMsS,EAAOhH,MAAMimT,YAAYvxT,IAAMwnB,EAAMrF,OAE9FuM,EAAKha,GADLpU,EAASgS,EAAOiS,MAAMjkB,OAASqnB,GAA+C,gBAA3BrV,EAAOhH,MAAMsa,UAA8BX,GAAQ2G,EAAUtZ,EAAOhH,MAAM2Z,SAAW2G,EAAWtZ,EAAOhH,QAClIvL,KAAKoV,IAAIgT,GACjCyG,EAAKla,EAAUpU,EAASP,KAAKoV,IAAIujB,GACjC/J,EAAKha,EAAUrU,EAASP,KAAKqV,IAAI+S,GACjC0G,EAAKla,EAAUrU,EAASP,KAAKqV,IAAIsjB,GAE7BxP,EADgB,UAAhB5W,EAAOlY,KACM,KAAYs0B,EAAK,IAAMC,EAAK,MAAkBruB,EAAS,IAAMA,EAAS,UACzDsuB,EAAK,IAAMC,EAAK,MAAkBna,EAAU,IAClEC,EAAU,KAGD,KAAY+Z,EAAK,IAAMC,EAAK,MAAkBC,EAAK,IAAMC,EAAK,MACrEna,EAAU,IAAMC,EAAU,KAEpC6S,EAAM45S,WAAa,IAAI7J,GAAS+pB,EAAiBC,EAAe,EAAGjhV,EAAQ+gV,IAE/E/0T,EAAW54B,KAAKwpJ,aAAa5qI,EAAOiS,MAAOjS,EAAQkV,GACnD9gB,EAAU,IAAIojB,GAAWxX,EAAOiS,MAAM7vB,QAAQsC,GAAK,WAAasb,EAAO3M,MAAQ,UAAY6hB,EAAM7hB,MAAO2mB,EAASgF,KAAMhF,EAAS0L,OAAOtuB,MAAO4iB,EAAS0L,OAAO9N,MAAO5X,EAAOnR,QAASmR,EAAOkzB,UAAWtc,GAClMoD,EAASC,SACV74B,KAAKkpV,eAAel2U,EAAS4L,EAAQ,IACjB,UAAhBA,EAAOlY,KACPotB,EAAMw6S,gBAAgB9pU,MAClBuI,EAAGiU,EAAUpU,EAASP,KAAKoV,IAAKgT,GAAcuQ,EAAWvQ,GAAc,GACvEznB,EAAGiU,EAAUrU,EAASP,KAAKqV,IAAK+S,GAAcuQ,EAAWvQ,GAAc,KAI3EX,EAAMw6S,gBAAgB9pU,MAAOuI,GAAIiuB,EAAKE,GAAM,EAAGluB,GAAIiuB,EAAKE,GAAM,MAK9Evc,EAAOiuT,cAAe,GAO1B4gB,EAAYpyV,UAAUmuJ,aAAe,SAAU34H,EAAOjS,EAAQkV,GAC1D,IAAI8E,GACAC,QAAQ,EAAOpB,KAAM6nS,GAAa1gT,OAAQA,EAAQkV,MAAOA,EACzD8J,KAAMhf,EAAOo1T,cAAclgT,EAAOlV,EAAOypD,UACzC/jC,OAAQ1lB,EAAOq1T,eAAengT,GAAS9d,MAAO4I,EAAO0lB,OAAOtuB,MAAOwgB,MAAO5X,EAAO0lB,OAAO9N,SAI5F,OAFA3F,EAAMrK,QAAQ84S,GAAa1mS,GAC3B9E,EAAM0C,MAAQoC,EAASgF,KAChBhF,GAMX60T,EAAYpyV,UAAU+yV,kBAAoB,SAAUxvU,GAKhD,IAAK,IAHDsY,KACA86S,KACAyY,GAAYtO,UAAW,EAAGjoU,SAAU,MAC/B9V,EAAK,EAAGyE,EAJL+b,EAAOiS,MAISoQ,cAAe7iC,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC7D,IAAIigU,EAAWx7T,EAAGzE,IACdigU,EAAS7mS,SAA8B,UAAlB6mS,EAAS33T,MAAsC,UAAlB23T,EAAS33T,OAA8D,IAAzC23T,EAASuO,SAASruU,QAAQ,WAC1G24B,EAAiB1yB,KAAK65T,GAG9BnnS,EAAiB93B,QAAQ,SAAUwf,IACc,IAAzCA,EAAOguT,SAASruU,QAAQ,YACpBqgB,EAAOozT,mBACqC72U,IAAxC62U,EAAcpzT,EAAOozT,gBACrBpzT,EAAO1K,SAAWu2U,EAAQtO,UAC1BnK,EAAcpzT,EAAOozT,eAAiByY,EAAQtO,aAG9Cv9T,EAAO1K,SAAW89T,EAAcpzT,EAAOozT,eAIlB,OAArByY,EAAQv2U,UACR0K,EAAO1K,SAAWu2U,EAAQtO,UAC1BsO,EAAQv2U,SAAWu2U,EAAQtO,aAG3Bv9T,EAAO1K,SAAWu2U,EAAQv2U,SAKlC0K,EAAO1K,SAAWu2U,EAAQtO,cAGlCjlT,EAAiB93B,QAAQ,SAAUpC,GAC/BA,EAAMm/U,UAAYsO,EAAQtO,aAQlCsR,EAAYpyV,UAAUs4U,YAAc,SAAU/0T,GAC7BA,EAAO+3B,UAApB,IACIzrC,EAAW0T,EAAO+3B,UAAUzrC,SAC5BrL,EAAQ+e,EAAO+3B,UAAU92C,MACzBkrV,EAAensU,EAAOy0T,cAAc9hU,WACpCuN,EAAQ,EACZ,GAAwB,YAApBF,EAAOguT,SACP,IAAK,IAAIxuU,EAAK,EAAGyE,EAAK+b,EAAO+Y,OAAQv5B,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvD,IAAI01B,EAAQjxB,EAAGzE,GACV01B,EAAMw6S,gBAAgB7xU,QAAWsuV,EAAajsU,KAGnDqZ,GAAc4yT,EAAajsU,GAAQjf,EAAOqL,EAAU0T,EAAQkV,EAAM7hB,MAAO6hB,EAAMw6S,gBAAgB,IAAI,GACnGxvT,UAIJ,IAAKA,EAAQ,EAAGA,EAAQisU,EAAatuV,OAAQqiB,IACzC9e,KAAKquV,sBAAsBtD,EAAajsU,GAAQjf,EAAOqL,EAAU0T,IAS7E6uU,EAAYpyV,UAAUgzV,sBAAwB,SAAUC,EAAgBzuV,EAAOqL,EAAU0T,GACrF,IAAI2vU,EAAe3vU,EAAO8V,SAAS1e,MAAQ,EAAI4I,EAAO8V,SAAS3nB,EAC3DyhV,EAAe5vU,EAAO8V,SAAS3e,OAAS,EAAI6I,EAAO8V,SAAS1nB,EAC5DwzL,EAAgB,EACpB8tJ,EAAe5pV,MAAMC,WAAa,SAClC,IAAI2zB,OAAcC,QAAQ+1T,GACtBpjV,SAAUA,EACVrL,MAAOA,EACP24B,SAAU,SAAUv4B,GACZA,EAAKw4B,UAAYx4B,EAAKJ,QACtBI,EAAKe,QAAQ0D,MAAMC,WAAa,UAChC67L,GAAkBvgM,EAAKw4B,UAAYx4B,EAAKJ,OAASI,EAAKiL,SACtDojV,EAAe9qV,aAAa,YAAa,aAAe+qV,EAClD,IAAMC,EAAe,WAAahuJ,EAAgB,gBAAmB+tJ,EAAgB,KAAQC,EAAgB,OAG3H3vU,IAAK,SAAU+D,GACX0rU,EAAe5pV,MAAMC,WAAa,UAClC2pV,EAAe5iV,gBAAgB,aAC/BkT,EAAOiS,MAAMrK,QAAQ,qBAAuB5H,OAAQA,QAOhE6uU,EAAYpyV,UAAUkkC,cAAgB,WAIlC,MAAO,eAOXkuT,EAAYpyV,UAAUiX,QAAU,SAAUue,KAKnC48T,GACTd,ICvSEriQ,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAexC8jQ,GAA6B,SAAUtjQ,GAEvC,SAASsjQ,IACL,OAAkB,OAAXtjQ,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAmC/D,OArCAsqF,GAAUmkQ,EAAatjQ,GASvBsjQ,EAAYpzV,UAAU0wG,OAAS,SAAUntF,GACrC,IAAI4c,EAAazE,GAAiBnY,EAAOguT,WACE,IAAvChuT,EAAOguT,SAASruU,QAAQ,UACxBqgB,EAAOiS,MAAM2K,EAAa,gBAAgBuwE,OAAOntF,EAAQA,EAAO9G,MAAO8G,EAAOhH,MAAOgH,EAAOiS,MAAMiG,qBAGlG92B,KAAK0tV,qBAAqB9uU,IAMlC6vU,EAAYpzV,UAAUkkC,cAAgB,WAIlC,MAAO,eAOXkvT,EAAYpzV,UAAUiX,QAAU,SAAUue,KAKnC49T,GACThB,ICtDEnjQ,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAexC+jQ,GAAmC,SAAUvjQ,GAE7C,SAASujQ,IACL,OAAkB,OAAXvjQ,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAmD/D,OArDAsqF,GAAUokQ,EAAmBvjQ,GAS7BujQ,EAAkBrzV,UAAU0wG,OAAS,SAAUntF,GAC9BvS,KAAKC,IAAIsS,EAAOhH,MAAM+a,aAAa5S,IAAK,GAKrD,IAAK,IAFDsT,EACAuF,EAHAuyT,EAAiBnrV,KAAKiqV,kBAAkBrrU,GACxC+vU,EAAe/vU,EAAO4zT,cAGjBp0U,EAAK,EAAGyE,EAAK+b,EAAO+Y,OAAQv5B,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvD,IAAIwwV,EAAa/rV,EAAGzE,GACpBwwV,EAAWtgB,mBACXsgB,EAAWjhB,WACPihB,EAAWp3T,SAAWrF,GAAYvT,EAAO+Y,OAAOi3T,EAAW38U,MAAQ,GAAI28U,EAAYhwU,EAAO+Y,OAAOi3T,EAAW38U,MAAQ,GAAI2M,KACxHyU,EAAOrzB,KAAKuqV,aAAaqE,EAAWpgU,OAAS28T,EAAe5tV,MAAOoxV,EAAa1qB,UAAU2qB,EAAW38U,OAAQ28U,EAAWpgU,OAAS28T,EAAetsU,IAAK8vU,EAAa3qB,YAAY4qB,EAAW38U,OAAQ2M,IACjMga,EAAW54B,KAAKwpJ,aAAa5qI,EAAQgwU,EAAYhwU,EAAOypD,UAAYryD,MAAO4I,EAAO0lB,OAAOtuB,MAAOwgB,MAAO5X,EAAO0lB,OAAO9N,SACvGqC,SACV74B,KAAK2jC,cAAc/kB,EAAQgwU,EAAYv7T,EAAMuF,GAC7C54B,KAAK0qV,qBAAqBkE,EAAYv7T,EAAMzU,OAU5D8vU,EAAkBrzV,UAAUiX,QAAU,SAAUue,KAQhD69T,EAAkBrzV,UAAUkkC,cAAgB,WACxC,MAAO,qBAOXmvT,EAAkBrzV,UAAUs4U,YAAc,SAAU/0T,GAChD5e,KAAKu4B,QAAQ3Z,IAEV8vU,GACT1E,ICtEE1/P,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAexCkkQ,GAA8B,SAAU1jQ,GAExC,SAAS0jQ,IACL,OAAkB,OAAX1jQ,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAoJ/D,OAtJAsqF,GAAUukQ,EAAc1jQ,GASxB0jQ,EAAaxzV,UAAU0wG,OAAS,SAAUntF,GAItC,IAAK,IAFDga,EADAuyT,EAAiBnrV,KAAKiqV,kBAAkBrrU,GAExC6vE,EAAcpiF,KAAKC,IAAIsS,EAAO0lB,OAAOtuB,MAAO,GACvC5X,EAAK,EAAGyE,EAAK+b,EAAO+Y,OAAQv5B,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvD,IAAI01B,EAAQjxB,EAAGzE,GACXo3B,EAAY,GACZs5T,OAAe,EACfC,OAAa,GAEL5D,EAAe5tV,MAAQ4tV,EAAetsU,KAAO,EAEzDiV,EAAM65S,WACN75S,EAAMw6S,mBACFx6S,EAAM0D,SAAWrF,GAAYvT,EAAO+Y,OAAO7D,EAAM7hB,MAAQ,GAAI6hB,EAAOlV,EAAO+Y,OAAO7D,EAAM7hB,MAAQ,GAAI2M,KAEpGmwU,EAAa/uV,KAAKuqV,aAAcz2T,EAAMtF,OAAS28T,EAAexvT,OAAStvB,KAAKC,IAAIwnB,EAAM2H,KAAM3H,EAAM4H,KAAO5H,EAAMtF,OAAS28T,EAAexvT,OAAStvB,KAAK0T,IAAI+T,EAAM2H,KAAM3H,EAAM4H,KAAM9c,GAC5KA,EAAOiS,MAAMiG,qBAKdi4T,EAAW/hV,GAAKyhF,EAAc,EAC9BsgQ,EAAWh5U,OAAS04E,IALpBsgQ,EAAWhiV,GAAK0hF,EAAc,EAC9BsgQ,EAAW/4U,MAAQy4E,GAOvBqgQ,EAAe9uV,KAAKuqV,aAAcz2T,EAAMtF,OAAS28T,EAAe5tV,MAAQ8O,KAAKC,IAAIwnB,EAAMpyB,KAAMoyB,EAAM7xB,OAAS6xB,EAAMtF,OAAS28T,EAAetsU,IAAMxS,KAAK0T,IAAI+T,EAAMpyB,KAAMoyB,EAAM7xB,OAAQ2c,GACnL4W,EAAYx1B,KAAK2pC,cAAcolT,EAAYD,EAAclwU,IACzDga,EAAW54B,KAAKgvV,wBAAwBpwU,EAAQkV,IAClC+E,SACV74B,KAAKivV,WAAWrwU,EAAQkV,EAAOg7T,EAAcl2T,EAAUpD,GACvDx1B,KAAK0qV,qBAAqB52T,EAAOi7T,EAAYnwU,GAC7C5e,KAAK0qV,qBAAqB52T,EAAOg7T,EAAclwU,OAQ/DiwU,EAAaxzV,UAAU2zV,wBAA0B,SAAUpwU,EAAQkV,GAC/D,IAAI8J,EACJA,EAAO59B,KAAKkvV,eAAep7T,EAAOlV,GAClC,IAAI0lB,GAAW9N,MAAO5X,EAAO0lB,OAAO9N,MAAOxgB,MAAO3J,KAAKC,IAAIsS,EAAO0lB,OAAOtuB,MAAO,IAChF,OAAOhW,KAAKwpJ,aAAa5qI,EAAQkV,EAAO8J,EAAM0G,IAOlDuqT,EAAaxzV,UAAU6zV,eAAiB,SAAUp7T,EAAOlV,GACrD,IACIwT,EAAgBxT,EAAO+Y,OAAO7D,EAAM7hB,MAAQ,GAChD,OAAkC,IAA9B2M,EAAOuwU,mBACF/8T,GAIMA,EAAcnwB,MAAQ6xB,EAAM7xB,MAAQ2c,EAAOwwU,cAH3CxwU,EAAOywU,cAQXv7T,EAAMpyB,KAAOoyB,EAAM7xB,MAAQ2c,EAAOwwU,cACrCxwU,EAAOywU,eAQnBR,EAAaxzV,UAAUsuC,cAAgB,SAAU2lT,EAASC,EAAS3wU,GAC/D,IAAI4W,EAAY,GAEZ9B,GADQ9U,EAAOiS,MAAMiG,oBAAsBw4T,EAAQv5U,OAASu5U,EAAQt5U,MAC3D4I,EAAOiS,MAAMiG,oBAAsBw4T,EAAQtiV,EAAIsiV,EAAQv5U,OAAS,EACzEu5U,EAAQviV,EAAIuiV,EAAQt5U,MAAQ,GAgBhC,OAdAwf,GAAc5W,EAAOiS,MAAMiG,oBAEvB,KAAaw4T,EAAS,EAAI,MAAiB,MAAmBC,EAAS,EAAI,IAAM77T,EADjF,OAAuB,IAAO47T,EAAS,EAAI,QAA6B,IAAMC,EAAQviV,EAE1FwoB,EAAYA,EAAUjb,OAAO,MAAcg1U,EAAS,EAAI,IAAOA,EAAS,EAAI,OAC3DA,EAAQxiV,EAAIwiV,EAAQv5U,OAAS,IAAOu5U,EAAS,EAAI,OACjDA,EAAQxiV,EAAIwiV,EAAQv5U,OAAS,KACzCu5U,EAAQviV,EAAIuiV,EAAQx5U,QAAU,MAClBw5U,EAAS,EAAI,KAAOA,EAAQviV,EAAIuiV,EAAQx5U,QACrD,MACJyf,GAAc5W,EAAOiS,MAAMiG,oBAGvB,OAAcy4T,EAAQxiV,EAAIwiV,EAAQv5U,OAAS,MAAiB,OACvDs5U,EAAQviV,EAAIuiV,EAAQt5U,OAAS,IAAM0d,EAHxC,QAAwB,KAAO67T,EAAQviV,EAAIuiV,EAAQx5U,QAAU,QAA6B,KAAOu5U,EAAQtiV,EACrGsiV,EAAQv5U,SAUpB84U,EAAaxzV,UAAU4zV,WAAa,SAAUrwU,EAAQkV,EAAOT,EAAMuF,EAAUpD,GAEzE,IADY5W,EAAOiS,MAAMiG,oBAAsBzD,EAAKtd,OAASsd,EAAKrd,QACrD,EACT,OAAO,KAEX,IAAI4nB,EAAQhf,EAAOuwU,mBAC8Cv2T,EAASgF,KAArE9J,EAAMpyB,KAAOoyB,EAAM7xB,MAAQ22B,EAASgF,KAAO,cAChDhF,EAAS0L,OAAO9N,MAAQoC,EAASgF,KACjC,IAAI5qB,EAAU,IAAIojB,GAAWxX,EAAOiS,MAAM7vB,QAAQsC,GAAK,WAAasb,EAAO3M,MAAQ,UAAY6hB,EAAM7hB,MAAO2rB,EAAMhF,EAAS0L,OAAOtuB,MAAO4iB,EAAS0L,OAAO9N,MAAO5X,EAAOnR,QAASmR,EAAOkzB,UAAWtc,GAC9Lg6T,EAAgB5wU,EAAOiS,MAAMhD,SAASsI,SAASnjB,GACnDw8U,EAAchsV,aAAa,aAAcswB,EAAM/mB,EAAEG,WAAa,IAAM4mB,EAAM2H,KAAKvuB,WACzE,IAAM4mB,EAAM4H,IAAIxuB,WAAa,IAAM4mB,EAAM7xB,MAAMiL,WAAa,IAAM4mB,EAAMpyB,KAAKwL,YACnF0R,EAAOy0T,cAAc1xU,YAAY6tV,IAOrCX,EAAaxzV,UAAUs4U,YAAc,SAAU/0T,GAC3C5e,KAAKu4B,QAAQ3Z,IAKjBiwU,EAAaxzV,UAAUkkC,cAAgB,WACnC,MAAO,gBAUXsvT,EAAaxzV,UAAUiX,QAAU,SAAUue,KAKpCg+T,GACT7E,ICvKE1/P,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAexC8kQ,GAAsC,SAAUtkQ,GAEhD,SAASskQ,IACL,OAAkB,OAAXtkQ,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAoD/D,OAtDAsqF,GAAUmlQ,EAAsBtkQ,GAShCskQ,EAAqBp0V,UAAU0wG,OAAS,SAAUntF,GAC9CA,EAAOiuT,cAAe,EACTxgU,KAAKC,IAAIsS,EAAOhH,MAAM+a,aAAa5S,IAAK,GAKrD,IAAK,IAHDsT,EACAuF,EAFAuyT,EAAiBnrV,KAAKiqV,kBAAkBrrU,GAGxC+vU,EAAe/vU,EAAO4zT,cACjBp0U,EAAK,EAAGyE,EAAK+b,EAAO+Y,OAAQv5B,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvD,IAAI01B,EAAQjxB,EAAGzE,GACf01B,EAAMw6S,mBACNx6S,EAAM65S,WACF75S,EAAM0D,SAAWrF,GAAYvT,EAAO+Y,OAAO7D,EAAM7hB,MAAQ,GAAI6hB,EAAOlV,EAAO+Y,OAAO7D,EAAM7hB,MAAQ,GAAI2M,KACpGyU,EAAOrzB,KAAKuqV,aAAaz2T,EAAMtF,OAAS28T,EAAe5tV,MAAOoxV,EAAa1qB,UAAUnwS,EAAM7hB,OAAQ6hB,EAAMtF,OAAS28T,EAAetsU,IAAK8vU,EAAa3qB,YAAYlwS,EAAM7hB,OAAQ2M,IAC7Kga,EAAW54B,KAAKwpJ,aAAa5qI,EAAQkV,EAAOlV,EAAOypD,UAAYryD,MAAO4I,EAAO0lB,OAAOtuB,MAAOwgB,MAAO5X,EAAO0lB,OAAO9N,SAClGqC,SACV74B,KAAK2jC,cAAc/kB,EAAQkV,EAAOT,EAAMuF,GACxC54B,KAAK0qV,qBAAqB52T,EAAOT,EAAMzU,OAUvD6wU,EAAqBp0V,UAAUs4U,YAAc,SAAU/0T,GACnD5e,KAAKu4B,QAAQ3Z,IAOjB6wU,EAAqBp0V,UAAUiX,QAAU,SAAUue,KAQnD4+T,EAAqBp0V,UAAUkkC,cAAgB,WAC3C,MAAO,wBAEJkwT,GACTzF,ICvEE1/P,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAexC+kQ,GAAgC,SAAUvkQ,GAE1C,SAASukQ,IACL,OAAkB,OAAXvkQ,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAiF/D,OAnFAsqF,GAAUolQ,EAAgBvkQ,GAS1BukQ,EAAer0V,UAAU0wG,OAAS,SAAUntF,EAAQ9G,EAAOF,EAAOwc,GAC9D,IAGIu7T,EACAC,EACAxsS,EACA/a,EANA7S,EAAY,GACZ6vB,EAAa,IACbokS,EAAY,KAKZI,EAAgB7pV,KAAKioV,wBAAwBrpU,GAE7CgxU,EADoB,aAApB93U,EAAMoa,WAAqD,iBAAzBpa,EAAMuc,eAC3B,GAGA,EAEjB,IAAK,IAAIj2B,EAAK,EAAG0rV,EAAkBD,EAAezrV,EAAK0rV,EAAgBrtV,OAAQ2B,IAAM,CACjF,IAAI01B,EAAQg2T,EAAgB1rV,GAC5B01B,EAAMw6S,mBACNx6S,EAAM65S,WACF75S,EAAM0D,SAAWrF,GAAY03T,EAAc/1T,EAAM7hB,MAAQ,GAAI6hB,EAAO+1T,EAAc/1T,EAAM7hB,MAAQ,GAAI2M,IACnF,MAAb6qU,GACAphT,EAAS3N,GAAS5G,EAAMtF,OAAQsF,EAAMrF,OAAQ3W,EAAOF,EAAOwc,GAC5DgvB,EAAS1oB,GAAS+uT,EAAUj7T,OAAQi7T,EAAUh7T,OAAQ3W,EAAOF,EAAOwc,GACpEoB,EAAYA,EAAUjb,OAAO8qC,EAAa,IAAOjC,EAAQ,EAAI,IAAOA,EAAQ,EAAI,MAC3E/a,EAAQ,EAAI,IAAO+a,EAAQ,EAAI,KAAa/a,EAAQ,EAAI,IAAOA,EAAQ,EAAI,KAChFgd,EAAa,MAGbjC,EAAS1oB,GAAS5G,EAAMtF,OAASohU,EAAY97T,EAAMrF,OAAQ3W,EAAOF,EAAOwc,GACzEoB,EAAYA,EAAUjb,OAAO8qC,EAAa,IAAOjC,EAAQ,EAAI,IAAOA,EAAQ,EAAI,KAChFiC,EAAa,KAEjBrlD,KAAKopV,mBAAmBt1T,EAAOlV,EAAQwV,EAAYsG,IACnD+uT,EAAY31T,IAGZ21T,EAA+C,SAAnC7qU,EAAOqxT,mBAAmBlyS,KAAkB0rT,EAAY,KACpEpkS,EAAgD,SAAnCzmC,EAAOqxT,mBAAmBlyS,KAAkBsnB,EAAa,KAG9EjC,EAAS1oB,GAASmvT,EAAcA,EAAcptV,OAAS,GAAG+xB,OAASohU,EAAY/F,EAAcA,EAAcptV,OAAS,GAAGgyB,OAAQ3W,EAAOF,EAAOwc,GAC7IoB,EAAYA,EAAUjb,OAAO8qC,EAAa,IAAOjC,EAAQ,EAAI,IAAOA,EAAQ,EAAI,KAChFusS,EAAc,IAAIv5T,GAAWxX,EAAOiS,MAAM7vB,QAAQsC,GAAK,WAAasb,EAAO3M,MAAO,cAAe2M,EAAO5I,MAAO4I,EAAOypD,SAAUzpD,EAAOnR,QAASmR,EAAOkzB,UAAWtc,GAClKx1B,KAAKkpV,eAAeyG,EAAa/wU,EAAQ,IACzC5e,KAAKq1U,aAAaz2T,IAOtB8wU,EAAer0V,UAAUs4U,YAAc,SAAU/0T,GAC7C,IAAIm3E,EAASn3E,EAAO+3B,UACpB32C,KAAKqpV,kBAAkBzqU,EAAQm3E,IAOnC25P,EAAer0V,UAAUiX,QAAU,SAAUue,KAQ7C6+T,EAAer0V,UAAUkkC,cAAgB,WAIrC,MAAO,kBAEJmwT,GACT1H,ICpGE19P,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAexCklQ,GAAgC,SAAU1kQ,GAE1C,SAAS0kQ,IACL,OAAkB,OAAX1kQ,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAqG/D,OAvGAsqF,GAAUulQ,EAAgB1kQ,GAS1B0kQ,EAAex0V,UAAU0wG,OAAS,SAAUntF,EAAQ9G,EAAOF,EAAOwc,GAC9D,IAAI/B,EACA22T,EAKAh2U,EACA8gB,EACAtF,EACAohU,EAPAryV,EAAQ,KACRi4B,EAAY,GACZ8vQ,EAAe1mR,EAAO+Y,OAAOl7B,OAC7Bw8Q,EAAS5sQ,KAAKC,IAAIsS,EAAOhH,MAAM+a,aAAa5S,IAAK,GAKjD0pU,EAAY,KAEZmG,EADoB,aAApB93U,EAAMoa,WAAqD,iBAAzBpa,EAAMuc,eAC3B,GAGA,EAEjB,IAAK,IAAIl4B,EAAI,EAAGA,EAAImpS,EAAcnpS,IAE9BqyB,GADAsF,EAAQlV,EAAO+Y,OAAOx7B,IACPqyB,OACfsF,EAAMw6S,mBACNx6S,EAAM65S,WACF75S,EAAM0D,SAAWrF,GAAYvT,EAAO+Y,OAAOx7B,EAAI,GAAI23B,EAAOlV,EAAO+Y,OAAOx7B,EAAI,GAAIyiB,KAClE,OAAVrhB,IACAA,EAAQ,IAAIq2B,GAAcpF,EAAQ,GAGlCgH,GAAc,MADdnD,EAAeqI,GAASlM,EAASohU,EAAY32E,EAAQnhQ,EAAOF,EAAOwc,IAC1B,EAAI,IAAO/B,EAAc,EAAI,IAEtEmD,GAAc,MADdnD,EAAeqI,GAASlM,EAASohU,EAAY97T,EAAMrF,OAAQ3W,EAAOF,EAAOwc,IAChC,EAAI,IAAO/B,EAAc,EAAI,KAGzD,MAAbo3T,GACAp3T,EAAeqI,GAAS5G,EAAMtF,OAAQsF,EAAMrF,OAAQ3W,EAAOF,EAAOwc,GAClE40T,EAActuT,GAAS+uT,EAAUj7T,OAAQi7T,EAAUh7T,OAAQ3W,EAAOF,EAAOwc,GACzEoB,GAAc,KACTnD,EAAc,EAAI,IAAO22T,EAAa,EAAI,KAAa32T,EAAc,EAAI,IAAOA,EAAc,EAAI,KAE/D,QAAnCzT,EAAOqxT,mBAAmBlyS,OAE/BvI,GAAa,MADbnD,EAAeqI,GAAS5G,EAAMtF,OAAQsF,EAAMrF,OAAQ3W,EAAOF,EAAOwc,IAC1B,EAAI,IAAO/B,EAAc,EAAI,KAEzEryB,KAAKopV,mBAAmBt1T,EAAOlV,EAAQwV,EAAYsG,IACnD+uT,EAAY31T,GAEZlV,EAAO+Y,OAAOx7B,EAAI,KAAOyiB,EAAO+Y,OAAOx7B,EAAI,GAAGq7B,SAA8C,SAAnC5Y,EAAOqxT,mBAAmBlyS,OAGnFvI,GAAc,MADdnD,EAAeqI,GAASlM,EAASohU,EAAY32E,EAAQnhQ,EAAOF,EAAOwc,IAC1B,EAAI,IAAO/B,EAAc,EAClE90B,EAAQ,KACRksV,EAAY,MAGhBnkD,EAAe,IAGf9vQ,GAAc,MADdwzT,EAActuT,IADdn9B,GAAUwP,EAAK6R,EAAO+Y,OAAO2tQ,EAAe,GAAG92Q,OAASohU,EAAY5iV,EAAK4R,EAAO+Y,OAAO2tQ,EAAe,GAAG72Q,SAC5E1hB,EAAGxP,EAAMyP,EAAG8K,EAAOF,EAAOwc,IACf,EAAI,IAAO40T,EAAa,EAAI,IAGpExzT,GAAc,MADdwzT,EAActuT,IADdn9B,GAAUwP,EAAK6R,EAAO+Y,OAAO2tQ,EAAe,GAAG92Q,OAASohU,EAAY5iV,EAAKisQ,IAC5ClsQ,EAAGxP,EAAMyP,EAAG8K,EAAOF,EAAOwc,IACf,EAAI,IAAO40T,EAAa,EAAI,KAExEh2U,EAAU,IAAIojB,GAAWxX,EAAOiS,MAAM7vB,QAAQsC,GAAK,WAAasb,EAAO3M,MAAO2M,EAAOypD,SAAUzpD,EAAO0lB,OAAOtuB,MAAO4I,EAAO0lB,OAAO9N,MAAO5X,EAAOnR,QAASmR,EAAOkzB,UAAWtc,GAC3Kx1B,KAAKkpV,eAAel2U,EAAS4L,EAAQ,IACrC5e,KAAKq1U,aAAaz2T,IAOtBixU,EAAex0V,UAAUs4U,YAAc,SAAU/0T,GAC7C,IAAIm3E,EAASn3E,EAAO+3B,UACpB32C,KAAKqpV,kBAAkBzqU,EAAQm3E,IAOnC85P,EAAex0V,UAAUiX,QAAU,SAAUue,KAQ7Cg/T,EAAex0V,UAAUkkC,cAAgB,WAIrC,MAAO,kBAEJswT,GACT7H,ICxHE19P,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAexCmlQ,GAAoC,SAAU3kQ,GAE9C,SAAS2kQ,IACL,OAAkB,OAAX3kQ,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAuG/D,OAzGAsqF,GAAUwlQ,EAAoB3kQ,GAS9B2kQ,EAAmBz0V,UAAU0wG,OAAS,SAAUntF,EAAQ9G,EAAOF,EAAOwc,GAClE,IAUIphB,EAGAq1B,EAbA0nT,EAA+C,eAA/BnxU,EAAOiS,MAAM+8S,cAC7Bgc,EAAgBmG,EAAgB57T,GAAqBuG,GACrDs1T,EAAgB,GAChBnG,EAAgBjrU,EAAO+Y,OACvB2tQ,EAAeukD,EAAcptV,OAC7BwzV,EAAerxU,EAAO4zT,cACtBv5D,EAAS82E,EACT1jV,KAAKC,IAAIsS,EAAOhH,MAAM+a,aAAa5S,IAAKkwU,EAAahsB,UAAU,IAC/D53T,KAAKC,IAAIsS,EAAOhH,MAAM+a,aAAa5S,IAAKkwU,EAAajsB,YAAY,IAGjE3+Q,GAFSzmC,EAAO0lB,OAEH,GACb8e,EAASwmS,EAAcC,EAAc,GAAGr7T,OAAQyqP,EAAQnhQ,EAAOF,EAAOwc,EAAYxV,GAEtFoxU,EAAgBA,EAAcz1U,OAAO,KAAa6oC,EAAQ,EAAI,IAAOA,EAAQ,EAAI,KACjF,IAAK,IAAIjnD,EAAI,EAAGA,EAAImpS,EAAcnpS,IAG9B,GAFA0tV,EAAc1tV,GAAGmyU,mBACjBub,EAAc1tV,GAAGwxU,WACbkc,EAAc1tV,GAAGq7B,SAAWrF,GAAY03T,EAAc1tV,EAAI,GAAI0tV,EAAc1tV,GAAI0tV,EAAc1tV,EAAI,GAAIyiB,GACtGwkC,EAASwmS,EAAcC,EAAc1tV,GAAGqyB,OAAQyhU,EAAahsB,UAAU9nU,GAAI2b,EAAOF,EAAOwc,EAAYxV,GACrGoxU,EAAgBA,EAAcz1U,OAAO,KAAa6oC,EAAQ,EAAI,IAAOA,EAAQ,EAAI,KACjFymS,EAAc1tV,GAAGmyU,gBAAgB9pU,KAAKolV,EAAcC,EAAc1tV,GAAGqyB,OAAQyhU,EAAahsB,UAAU9nU,GAAI2b,EAAOF,EAAOwc,EAAYxV,IAClIirU,EAAc1tV,GAAGwxU,QAAQnpU,KAAK,IAAI0xB,GAAK2zT,EAAc1tV,GAAGmyU,gBAAgB,GAAGvhU,EAAI6R,EAAOkuT,OAAO92T,MAAO6zU,EAAc1tV,GAAGmyU,gBAAgB,GAAGthU,EAAI4R,EAAOkuT,OAAO/2T,OAAQ,EAAI6I,EAAOkuT,OAAO92T,MAAO,EAAI4I,EAAOkuT,OAAO/2T,cAG7M,GAAuC,SAAnC6I,EAAOqxT,mBAAmBlyS,KAAiB,CAC3C,IAAK,IAAIxa,EAAIpnB,EAAI,EAAGonB,GAAK8hC,EAAY9hC,IACjC8kB,EAASuhT,EAAcC,EAActmU,GAAGiL,OAAQyhU,EAAajsB,YAAYzgT,GAAIzL,EAAOF,EAAOwc,EAAYxV,GACvGoxU,EAAgBA,EAAcz1U,OAAO,KAAa8tB,EAAQ,EAAI,IAAOA,EAAQ,EAAI,KAEjFwhT,EAAc1tV,EAAI,IAAM0tV,EAAc1tV,EAAI,GAAGq7B,UAC7C4rB,EAASwmS,EAAcC,EAAc1tV,EAAI,GAAGqyB,OAAQyhU,EAAajsB,YAAY7nU,EAAI,GAAI2b,EAAOF,EAAOwc,EAAYxV,GAC/GoxU,EAAgBA,EAAcz1U,OAAO,KAAa6oC,EAAQ,EAAI,IAAOA,EAAQ,EAAI,MAErFiC,EAAalpD,EAAI,EAIM,eAA/ByiB,EAAOiS,MAAM+8S,eAAkCic,EAAcptV,OAAS,IAGtEuzV,GAAkB,MADlB3nT,EAASuhT,GADTxmS,GAAWr2C,EAAK6R,EAAO+Y,OAAO,GAAGnJ,OAAQxhB,EAAKijV,EAAahsB,UAAU,KACvCl3T,EAAGq2C,EAAOp2C,EAAG8K,EAAOF,EAAOwc,EAAYxV,IAC9B,EAAI,IAAOypB,EAAQ,EAAI,KAElE,IAAS9kB,EAAI+hR,EAAe,EAAG/hR,GAAK8hC,EAAY9hC,IAAK,CACjD,IAAI2sU,EAAiBlwV,KAAKmwV,kBAAkBvxU,GACG,SAA3CsxU,EAAejgB,mBAAmBlyS,MAAoBmyT,EAAev4T,OAAOpU,GAAG+2N,UAC/EjyM,EAASuhT,EAAcC,EAActmU,GAAGiL,OAAQyhU,EAAajsB,YAAYzgT,GAAIzL,EAAOF,EAAOwc,EAAYxV,GACvGoxU,EAAgBA,EAAcz1U,QAASgJ,IAAO+hR,EAAe,GAAMyqD,EAAiB,IAAM,KACpF,IAAO1nT,EAAQ,EAAI,IAAOA,EAAQ,EAAI,MAGpDr1B,EAAU,IAAIojB,GAAWxX,EAAOiS,MAAM7vB,QAAQsC,GAAK,WAAasb,EAAO3M,MAAO2M,EAAOypD,SAAUzpD,EAAO0lB,OAAOtuB,MAAO4I,EAAO0lB,OAAO9N,MAAO5X,EAAOnR,QAASmR,EAAOkzB,UAAWk+S,GAC3KhwV,KAAKkpV,eAAel2U,EAAS4L,EAAQ,IACrC5e,KAAKq1U,aAAaz2T,IAOtBkxU,EAAmBz0V,UAAUs4U,YAAc,SAAU/0T,GACjD,IAAIm3E,EAASn3E,EAAO+3B,UACpB32C,KAAKqpV,kBAAkBzqU,EAAQm3E,IAOnC+5P,EAAmBz0V,UAAUiX,QAAU,SAAUue,KAQjDi/T,EAAmBz0V,UAAUkkC,cAAgB,WAIzC,MAAO,sBAKXuwT,EAAmBz0V,UAAU80V,kBAAoB,SAAUvxU,GAEvD,IAAK,IADDsY,EAAmBtY,EAAOiS,MAAMoQ,cAC3B9kC,EAAI,EAAGs+B,EAAWvD,EAAiBz6B,OAAQN,EAAIs+B,EAAUt+B,IAC9D,GAAIyiB,EAAO3M,QAAUilB,EAAiB/6B,GAAG8V,OAAe,IAAN9V,EAC9C,OAAO+6B,EAAiB/6B,EAAI,GAGpC,OAAO+6B,EAAiB,IAErB44T,GACT9H,ICrHEoI,GAA+B,WAC/B,SAASA,KAqFT,OA9EAA,EAAc/0V,UAAU0wG,OAAS,SAAUntF,EAAQ9G,EAAOF,EAAOwc,GAU7D,IAAK,IAJD8gT,EACA3xC,EACA3qQ,EAPAqkS,EAAcr+S,EAAO3M,MACrB66T,EAASluT,EAAOkuT,OAEhB+c,GADSjrU,EAAO0lB,OACA1lB,EAAO+Y,QAKvBiyT,EAA+C,eAA/BhrU,EAAOiS,MAAM+8S,cAAiCz5S,GAAqBuG,GAC9Et8B,EAAK,EAAG0rV,EAAkBD,EAAezrV,EAAK0rV,EAAgBrtV,OAAQ2B,IAAM,CACjF,IAAI01B,EAAQg2T,EAAgB1rV,GAC5B01B,EAAMw6S,mBACNx6S,EAAM65S,WACF75S,EAAM0D,SAAWrF,GAAY03T,EAAc/1T,EAAM7hB,MAAQ,GAAI6hB,EAAO+1T,EAAc/1T,EAAM7hB,MAAQ,GAAI2M,KACpGs2T,EAAWt2T,EAAOiS,MAAM7vB,QAAQsC,GAAK,WAAa25T,EAAc,UAAYnpS,EAAM7hB,MAClF2mB,GACIC,QAAQ,EAAOpB,KAAM6nS,GAAa1gT,OAAQA,EAAQkV,MAAOA,EACzD8J,KAAMhf,EAAOo1T,cAAclgT,EAAOlV,EAAOypD,UACzC/jC,OAAQ1lB,EAAOq1T,eAAengT,GAAS9d,MAAO4I,EAAO0lB,OAAOtuB,MAAOwgB,MAAO5X,EAAO0lB,OAAO9N,QACxFzgB,OAAQ+2T,EAAO/2T,OAAQC,MAAO82T,EAAO92T,MAAO2X,MAAOm/S,EAAOn/S,OAE9D/O,EAAOiS,MAAMrK,QAAQ84S,GAAa1mS,GAC7BA,EAASC,OAaV/E,EAAMg5S,QAAWt1S,SAAS,IAZ1B1D,EAAMw6S,gBAAgB9pU,KAAKolV,EAAc91T,EAAMtF,OAAQsF,EAAMrF,OAAQ3W,EAAOF,EAAOwc,EAAYxV,IAC/FkV,EAAM0C,MAAQoC,EAASgF,KACvB2lQ,EAAc,IAAIntQ,GAAW8+S,EAAUt8S,EAASgF,KAAMhF,EAAS0L,OAAOtuB,MAAO4iB,EAAS0L,OAAO9N,MAAO5X,EAAOnR,QAAS,MACpHmR,EAAOy0T,cAAc1xU,YAAY8rB,GAAWqG,EAAMw6S,gBAAgB,GAAI11S,EAASjL,MAAO,IAAIP,GAAKwL,EAAS5iB,MAAO4iB,EAAS7iB,QAAS+2T,EAAOh2I,SAAUysG,EAAazvQ,EAAM/mB,EAAEG,WAAa,IAAM4mB,EAAMrF,OAAOvhB,aACvM4mB,EAAM65S,QAAQnpU,KAAK,IAAI0xB,GAAKpC,EAAMw6S,gBAAgB,GAAGvhU,EAAI+/T,EAAO92T,MAAO8d,EAAMw6S,gBAAgB,GAAGthU,EAAI8/T,EAAO/2T,OAAQ,EAAI+2T,EAAO92T,MAAO,EAAI82T,EAAO/2T,SAChJ+d,EAAMg5S,QACFxoS,OAAQ1L,EAAS0L,OAAQ1G,KAAMhF,EAASgF,KACxC7nB,OAAQ6iB,EAAS7iB,OAAQyhB,SAAS,EAClCxhB,MAAO4iB,EAAS5iB,MAAO2X,MAAOiL,EAASjL,WAc3DyiU,EAAc/0V,UAAUs4U,YAAc,SAAU/0T,GAK5C,IAAK,IAJD1T,EAAW0T,EAAO+3B,UAAUzrC,SAC5BrL,EAAQ+e,EAAO+3B,UAAU92C,MACzBkrV,EAAensU,EAAOy0T,cAAc9hU,WACpCuN,EAAQ,EACH1gB,EAAK,EAAGyE,EAAK+b,EAAO+Y,OAAQv5B,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvD,IAAI01B,EAAQjxB,EAAGzE,GACV01B,EAAMw6S,gBAAgB7xU,QAAWsuV,EAAajsU,KAGnDqZ,GAAc4yT,EAAajsU,GAAQjf,EAAOqL,EAAU0T,EAAQkV,EAAM7hB,MAAO6hB,EAAMw6S,gBAAgB,IAAI,GACnGxvT,OAMRsxU,EAAc/0V,UAAUkkC,cAAgB,WAIpC,MAAO,iBAMX6wT,EAAc/0V,UAAUiX,QAAU,SAAUue,KAKrCu/T,KC3FP9lQ,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAexC0lQ,GAAmC,SAAUllQ,GAE7C,SAASklQ,IACL,OAAkB,OAAXllQ,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAqD/D,OAvDAsqF,GAAU+lQ,EAAmBllQ,GAS7BklQ,EAAkBh1V,UAAU0wG,OAAS,SAAUntF,GAK3C,IAAK,IAJDyU,EAGAuF,EAFAuyT,EAAiBnrV,KAAKiqV,kBAAkBrrU,GAGnCxgB,EAAK,EAAGyE,EAAK+b,EAAO+Y,OAAQv5B,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvD,IAAIkyV,EAAaztV,EAAGzE,GACpBkyV,EAAWhiB,mBACXgiB,EAAW3iB,WACP2iB,EAAW94T,SAAWrF,GAAYvT,EAAO+Y,OAAO24T,EAAWr+U,MAAQ,GAAIq+U,EAAY1xU,EAAO+Y,OAAO24T,EAAWr+U,MAAQ,GAAI2M,KACxHyU,EAAOrzB,KAAKuqV,aAAa+F,EAAW9hU,OAAS28T,EAAe5tV,MAAO+yV,EAAW70T,KAAM60T,EAAW9hU,OAAS28T,EAAetsU,IAAKyxU,EAAW50T,IAAK9c,IAC5Iga,EAAW54B,KAAKwpJ,aAAa5qI,EAAQ0xU,EAAY1xU,EAAOypD,UAAYryD,MAAO4I,EAAO0lB,OAAOtuB,MAAOwgB,MAAO5X,EAAO0lB,OAAO9N,SACvGqC,SACV74B,KAAK0qV,qBAAqB4F,EAAYj9T,EAAMzU,GAC5C5e,KAAK2jC,cAAc/kB,EAAQ0xU,EAAYj9T,EAAMuF,OAQ7Dy3T,EAAkBh1V,UAAUkkC,cAAgB,WACxC,MAAO,qBAUX8wT,EAAkBh1V,UAAUs4U,YAAc,SAAU/0T,GAChD5e,KAAKu4B,QAAQ3Z,IAOjByxU,EAAkBh1V,UAAUiX,QAAU,SAAUue,KAKzCw/T,GACTrG,ICxEE1/P,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAexC4lQ,GAAiC,SAAUplQ,GAE3C,SAASolQ,IACL,OAAkB,OAAXplQ,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KA2L/D,OA7LAsqF,GAAUimQ,EAAiBplQ,GAS3BolQ,EAAgBl1V,UAAU0wG,OAAS,SAAUntF,GAazC,IAAK,IAZDyU,EAGAuF,EAIA43T,EAEAxjV,EARAm+U,EAAiBnrV,KAAKiqV,kBAAkBrrU,GACxCq6P,EAAS5sQ,KAAKC,IAAIsS,EAAOhH,MAAM+a,aAAa5S,IAAK,GAEjD0wU,EAAe,EACfj7T,EAAY,GACZk7T,EAAkB,EAElBC,EAAa,KAEbz8T,EAAatV,EAAOiS,MAAMiG,oBAC1B85T,EAAqB,EAChBxyV,EAAK,EAAGyE,EAAK+b,EAAO+Y,OAAQv5B,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvD,IAAI01B,EAAQjxB,EAAGzE,GAGf,GAFA01B,EAAMw6S,mBACNx6S,EAAM65S,WACF75S,EAAM0D,SAAWrF,GAAYvT,EAAO+Y,OAAO7D,EAAM7hB,MAAQ,GAAI6hB,EAAOlV,EAAO+Y,OAAO7D,EAAM7hB,MAAQ,GAAI2M,GAAS,CAE7G,IAAIiyU,EAAQ7wV,KAAK8wV,kBAAkBlyU,EAAQkV,EAAM7hB,OAC7C8+U,EAAW/wV,KAAKgxV,WAAWpyU,EAAQkV,EAAM7hB,OAC7Cy+U,GAAmBG,IAAsB,IAAbE,EAAoB,EAAIj9T,EAAMrF,OAE1D+hU,GAAyB,IAAVK,EAAiBD,EAAwC,OAAjBH,GAA0BM,EAA2B93E,EAAfw3E,EAC7Fp9T,EAAOrzB,KAAKuqV,aAAaz2T,EAAMtF,OAAS28T,EAAe5tV,MAAOmzV,EAAiB58T,EAAMtF,OAAS28T,EAAetsU,IAAK2xU,EAAa5xU,GAC/Hga,EAAW54B,KAAKgvV,wBAAwBpwU,EAAQkV,GAE5C+8T,IACAD,EAAqBF,GAEzBD,EAAeC,EACV93T,EAASC,SACV74B,KAAK0qV,qBAAqB52T,EAAOT,EAAMzU,GACvC5e,KAAK2jC,cAAc/kB,EAAQkV,EAAOT,EAAMuF,IAE5C,IAAIq4T,EAAgBn9T,EAAM65S,QAAQ,GAClC,GAAmB,OAAfgjB,EAAqB,CACrB,IAAIO,EAAWh9T,EAAay8T,EAAW5jV,EAAI4jV,EAAW3jV,EAClDmkV,EAAcj9T,EAAa+8T,EAAclkV,EAAIkkV,EAAcjkV,EAC3DokV,EAAal9T,EAAay8T,EAAW5jV,EAAI4jV,EAAW36U,MAAQ26U,EAAW3jV,EAAI2jV,EAAW56U,OACtFs7U,EAAgBn9T,EAChB+8T,EAAclkV,EAAIkkV,EAAcj7U,MAAQi7U,EAAcjkV,EAAIikV,EAAcl7U,OAGxE/I,EAFAX,KAAKoxB,MAAMyzT,KAAc7kV,KAAKoxB,MAAM0zT,IACpC9kV,KAAKoxB,MAAM2zT,KAAgB/kV,KAAKoxB,MAAM0zT,GAClCj9T,EAAa+8T,EAAclkV,EAAIkkV,EAAcjkV,EAG7CqkV,EAGJ77T,EADAtB,EACYsB,EAAUjb,OAAO,KAAYvN,EAAI,KAAO2jV,EAAW3jV,EAAI2jV,EAAW56U,QAAU,MACxE/I,EAAI,IAAMikV,EAAcjkV,EAAI,KAGhCwoB,EAAUjb,OAAO,KAAYo2U,EAAW5jV,EAAI,IAAMC,EAAI,OACjDikV,EAAclkV,EAAIkkV,EAAcj7U,OAAS,IAAMhJ,EAAI,KAG5E2jV,EAAa78T,EAAM65S,QAAQ,IAGnC,IAAI36T,EAAU,IAAIojB,GAAWxX,EAAOiS,MAAM7vB,QAAQsC,GAAK,WAAasb,EAAO3M,MAAQ,cAAe,OAAQ2M,EAAOihC,UAAU7pC,MAAO4I,EAAOihC,UAAUrpB,MAAO5X,EAAOnR,QAASmR,EAAOihC,UAAU/N,UAAWtc,GAClMx0B,EAAU4d,EAAOiS,MAAMhD,SAASsI,SAASnjB,GACzC4L,EAAOiS,MAAM6iT,gBACb1yU,EAAQ0D,MAAMC,WAAa,UAE/Bia,EAAOy0T,cAAc1xU,YAAYX,IAOrCuvV,EAAgBl1V,UAAUy1V,kBAAoB,SAAUlyU,EAAQ3M,GAC5D,YAAsC9W,IAAlCyjB,EAAO0yU,yBAA0F,IAAlD1yU,EAAO0yU,uBAAuB/yV,QAAQ0T,IAU7Fs+U,EAAgBl1V,UAAU21V,WAAa,SAAUpyU,EAAQ3M,GACrD,YAA0B9W,IAAtByjB,EAAO2yU,aAAkE,IAAtC3yU,EAAO2yU,WAAWhzV,QAAQ0T,IAUrEs+U,EAAgBl1V,UAAU2zV,wBAA0B,SAAUpwU,EAAQkV,GAClE,IAAI0C,EACAq6T,EAAQ7wV,KAAK8wV,kBAAkBlyU,EAAQkV,EAAM7hB,OAC7C8+U,EAAW/wV,KAAKgxV,WAAWpyU,EAAQkV,EAAM7hB,OAU7C,OARIukB,EADAq6T,GAASE,EACDnyU,EAAO4yU,iBAEV19T,EAAM9mB,EAAI,EACP4R,EAAO6yU,kBAGP7yU,EAAOypD,SAEZroE,KAAKwpJ,aAAa5qI,EAAQkV,EAAO0C,GAASA,MAAO5X,EAAO0lB,OAAO9N,MAAOxgB,MAAO4I,EAAO0lB,OAAOtuB,SAOtGu6U,EAAgBl1V,UAAUg0U,oBAAsB,SAAU3rQ,EAAM9kD,GAC5D,IAEI3M,EAFAzV,EAAOknE,EAGPguR,GAFShuR,EAAKjnE,OAEImiB,EAAO0yU,wBACzBK,EAAW/yU,EAAO2yU,WACtB,QAAwBp2V,IAApBu2V,GAAiCA,EAAgBj1V,OAAS,EAC1D,IAAK,IAAIN,EAAI,EAAGA,EAAIu1V,EAAgBj1V,OAAQN,IACxC,IAAK,IAAIonB,EAAI,EAAGA,EAAI/mB,EAAKC,OAAQ8mB,IACzBA,IAAMmuU,EAAgBv1V,KAElB8V,EAAQghB,GAAYz2B,EADd,IAANL,GAC2B,EAGDu1V,EAAgBv1V,EAAI,GAHhBu1V,EAAgBv1V,GAAI,KAAMyiB,GAK5DpiB,EAAK+mB,GAAG3E,EAAOuU,OAASlhB,GAKxC,QAAiB9W,IAAbw2V,GAA0BA,EAASl1V,OAAS,EAC5C,IAAK,IAAI0pB,EAAI,EAAGA,EAAIwrU,EAASl1V,OAAQ0pB,IACjC,IAAS5C,EAAI,EAAGA,EAAI/mB,EAAKC,OAAQ8mB,IACzBA,IAAMouU,EAASxrU,KAEXlU,EAAQghB,GAAYz2B,GAAO,EAAGm1V,EAASxrU,QADnBhrB,IAApBu2V,EAC2CC,EAGA,KAHU/yU,GAKzDpiB,EAAK+mB,GAAG3E,EAAOuU,OAASlhB,GAKxC,OAAOzV,GAOX+zV,EAAgBl1V,UAAUs4U,YAAc,SAAU/0T,GAC9C5e,KAAKu4B,QAAQ3Z,IAKjB2xU,EAAgBl1V,UAAUkkC,cAAgB,WACtC,MAAO,mBAUXgxT,EAAgBl1V,UAAUiX,QAAU,SAAUue,KAKvC0/T,GACTvG,IC9ME1/P,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAexCinQ,GAA4B,SAAUzmQ,GAEtC,SAASymQ,IACL,OAAkB,OAAXzmQ,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAuE/D,OAzEAsqF,GAAUsnQ,EAAYzmQ,GAStBymQ,EAAWv2V,UAAU0wG,OAAS,SAAUntF,GAIpC,IAAK,IAHDstC,EAEAtzB,EADAuyT,EAAiBnrV,KAAKiqV,kBAAkBrrU,GAEnCxgB,EAAK,EAAGyE,EAAK+b,EAAO+Y,OAAQv5B,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvD,IAAI01B,EAAQjxB,EAAGzE,GACf01B,EAAMw6S,mBACNx6S,EAAM65S,WACF75S,EAAM0D,SACNrF,GAAYvT,EAAO+Y,OAAO7D,EAAM7hB,MAAQ,GAAI6hB,EAAOlV,EAAO+Y,OAAO7D,EAAM7hB,MAAQ,GAAI2M,KACnFstC,EAASlsD,KAAKuqV,aAAaz2T,EAAMtF,OAAS28T,EAAexvT,OAAQ7H,EAAM2H,KAAM3H,EAAMtF,OAAS28T,EAAexvT,OAAQ7H,EAAM4H,IAAK9c,IAC9Hga,EAAW54B,KAAKgvV,wBAAwBpwU,EAAQkV,IAClC+E,SACLja,EAAOiS,MAAMiG,qBAKdo1B,EAAOn2C,OAAS6iB,EAAS0L,OAAOtuB,MAChCk2C,EAAOl/C,EAAIk/C,EAAOl/C,EAAKk/C,EAAOn2C,OAAS,IALvCm2C,EAAOl2C,MAAQ4iB,EAAS0L,OAAOtuB,MAC/Bk2C,EAAOn/C,EAAIm/C,EAAOn/C,EAAKm/C,EAAOl2C,MAAQ,GAM1C4iB,EAAS0L,OAAOtuB,MAAQ,EACxBhW,KAAK0qV,qBAAqB52T,EAAOo4B,EAAQttC,GACzC5e,KAAK2jC,cAAc/kB,EAAQkV,EAAOo4B,EAAQtzB,OAU1Dg5T,EAAWv2V,UAAU2zV,wBAA0B,SAAUpwU,EAAQkV,GAC7D,IAAIwQ,GAAW9N,MAAO5X,EAAOgf,KAAM5nB,MAAO3J,KAAKC,IAAIsS,EAAO0lB,OAAOtuB,MAAO,IACxE,OAAOm1E,EAAO9vF,UAAUmuJ,aAAaloJ,KAAKtB,KAAM4e,EAAQkV,EAAOlV,EAAOypD,SAAU/jC,IAKpFstT,EAAWv2V,UAAUkkC,cAAgB,WACjC,MAAO,cAUXqyT,EAAWv2V,UAAUs4U,YAAc,SAAU/0T,GACzC5e,KAAKu4B,QAAQ3Z,IAOjBgzU,EAAWv2V,UAAUiX,QAAU,SAAUue,KAKlC+gU,GACT5H,IC1FE1/P,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAexCknQ,GAAqC,SAAU1mQ,GAE/C,SAAS0mQ,IACL,OAAkB,OAAX1mQ,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAyH/D,OA3HAsqF,GAAUunQ,EAAqB1mQ,GAS/B0mQ,EAAoBx2V,UAAU0wG,OAAS,SAAUntF,GAO7C,IAAK,IANDkzU,EAIAl5T,EADAuyT,EAAiBnrV,KAAKiqV,kBAAkBrrU,GAExC6vE,EAAcpiF,KAAKC,IAAIsS,EAAO0lB,OAAOtuB,MAAO,GACvC5X,EAAK,EAAGyE,EAAK+b,EAAO+Y,OAAQv5B,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvD,IAAI01B,EAAQjxB,EAAGzE,GAGf,GAFA01B,EAAMw6S,mBACNx6S,EAAM65S,WACF75S,EAAM0D,SACNrF,GAAYvT,EAAO+Y,OAAO7D,EAAM7hB,MAAQ,GAAI6hB,EAAOlV,EAAO+Y,OAAO7D,EAAM7hB,MAAQ,GAAI2M,GAAS,CAU5F,GARAkzU,EAAc9xV,KAAKuqV,aAAaz2T,EAAMtF,OAAS28T,EAAe5tV,MAAO8O,KAAKC,IAAIwnB,EAAM2H,KAAM3H,EAAM4H,KAAM5H,EAAMtF,OAAS28T,EAAetsU,IAAKxS,KAAK0T,IAAI+T,EAAM2H,KAAM3H,EAAM4H,KAAM9c,GAC1KkV,EAAM65S,QAAQnpU,KAAKxE,KAAKuqV,aAAaz2T,EAAMtF,OAAS28T,EAAexvT,OAAQtvB,KAAKC,IAAIwnB,EAAM2H,KAAM3H,EAAM4H,KAAM5H,EAAMtF,OAAS28T,EAAexvT,OAAQtvB,KAAK0T,IAAI+T,EAAM2H,KAAM3H,EAAM4H,KAAM9c,IACnL5e,KAAK+xV,kBAAkBnzU,EAAOiS,MAAMiG,oBAAqBhD,EAAM65S,QAAQ,GAAIl/O,GAE3E36D,EAAM65S,QAAQnpU,KAAKxE,KAAKuqV,aAAaz2T,EAAMtF,OAAS28T,EAAe5tV,MAAO8O,KAAKC,IAAIwnB,EAAMpyB,KAAMoyB,EAAM7xB,OAAQ6xB,EAAMtF,OAAS28T,EAAexvT,OAAQtvB,KAAKC,IAAIwnB,EAAMpyB,KAAMoyB,EAAM7xB,OAAQ2c,IAEtLkV,EAAM65S,QAAQnpU,KAAKxE,KAAKuqV,aAAaz2T,EAAMtF,OAAS28T,EAAexvT,OAAQtvB,KAAK0T,IAAI+T,EAAMpyB,KAAMoyB,EAAM7xB,OAAQ6xB,EAAMtF,OAAS28T,EAAetsU,IAAKxS,KAAK0T,IAAI+T,EAAMpyB,KAAMoyB,EAAM7xB,OAAQ2c,MACpLga,EAAW54B,KAAKgvV,wBAAwBpwU,EAAQkV,IAClC+E,OAAQ,CAClB74B,KAAK0qV,qBAAqB52T,EAAOA,EAAM65S,QAAQ,GAAI/uT,GACnD,IAAIozU,GAAWjlV,EAAG+mB,EAAM65S,QAAQ,GAAG5gU,EAAGC,EAAG8mB,EAAM65S,QAAQ,GAAG3gU,GACtDilV,GAAYllV,EAAG+mB,EAAM65S,QAAQ,GAAG5gU,EAAGC,EAAG8mB,EAAM65S,QAAQ,GAAG3gU,GAC3DhN,KAAKkyV,sBAAsBtzU,EAAQkV,EAAOk+T,EAAQC,EAASH,EAAal5T,GAE5E54B,KAAK+xV,iBAAiBnzU,EAAOiS,MAAMiG,oBAAqBhD,EAAM65S,QAAQ,GAAIl/O,GAC1EzuF,KAAK+xV,iBAAiBnzU,EAAOiS,MAAMiG,oBAAqBhD,EAAM65S,QAAQ,GAAIl/O,MAOtFojQ,EAAoBx2V,UAAU02V,iBAAmB,SAAUvjO,EAAYtiE,EAAQuiC,GACvE+/B,GACAtiE,EAAOn/C,GAAK0hF,EAAc,EAC1BviC,EAAOl2C,MAAQy4E,IAGfviC,EAAOl/C,GAAKyhF,EAAc,EAC1BviC,EAAOn2C,OAAS04E,IAMxBojQ,EAAoBx2V,UAAU2zV,wBAA0B,SAAUpwU,EAAQkV,GACtE,IAAI8J,EAAQ9J,EAAMpyB,MAAQoyB,EAAM7xB,MAAS2c,EAAOywU,cAAgBzwU,EAAOwwU,cACnE9qT,GAAW9N,MAAO5X,EAAO0lB,OAAO9N,MAAOxgB,MAAO3J,KAAKC,IAAIsS,EAAO0lB,OAAOtuB,MAAO,IAChF,OAAOhW,KAAKwpJ,aAAa5qI,EAAQkV,EAAO8J,EAAM0G,IAOlDutT,EAAoBx2V,UAAU62V,sBAAwB,SAAUtzU,EAAQkV,EAAOpyB,EAAMO,EAAOoxB,EAAMuF,GAE9F,IAAIpD,EACAxiB,EACA4L,EAAOiS,MAAMiG,qBACbtB,EAAa,KAAanC,EAAM,EAAI,KAAOA,EAAKrmB,EAAIqmB,EAAKtd,OAAS,GAAK,OACtDsd,EAAKtmB,EAAIsmB,EAAKrd,OAAS,KAAOqd,EAAKrmB,EAAIqmB,EAAKtd,OAAS,GAAK,IAC3Eyf,GAAc,KAAa9zB,EAAM,EAAI,KAAO2xB,EAAKrmB,EAAIqmB,EAAKtd,OAAS,GAAK,MACvDrU,EAAM,EAAI,KAAO2xB,EAAKrmB,EAAIqmB,EAAKtd,QAAU,IAC1Dyf,GAAc,KAAavzB,EAAO,EAAI,KAAOoxB,EAAKrmB,EAAIqmB,EAAKtd,OAAS,GAAK,MACxD9T,EAAO,EAAI,IAAOoxB,EAAM,EAAI,MAG7CmC,EAAa,MAAanC,EAAKtmB,EAAIsmB,EAAKrd,MAAQ,GAAK,KAAOqd,EAAKrmB,EAAIqmB,EAAKtd,QAAU,OACnEsd,EAAKtmB,EAAIsmB,EAAKrd,MAAQ,GAAK,IAAOqd,EAAM,EAAI,IAE7DmC,GAAc,KAAanC,EAAM,EAAI,IAAO3xB,EAAM,EAAI,OACrC2xB,EAAKtmB,EAAIsmB,EAAKrd,MAAQ,GAAK,IAAOtU,EAAM,EAAI,IAE7D8zB,GAAc,MAAanC,EAAKtmB,EAAIsmB,EAAKrd,MAAQ,GAAK,IAAO/T,EAAO,EAAI,OACvDoxB,EAAKtmB,EAAIsmB,EAAKrd,OAAS,IAAO/T,EAAO,EAAI,KAE9D+Q,EAAU,IAAIojB,GAAWxX,EAAOiS,MAAM7vB,QAAQsC,GAAK,WAAasb,EAAO3M,MAAQ,UAAY6hB,EAAM7hB,MAAO2mB,EAASgF,KAAMhF,EAAS0L,OAAOtuB,MAAO4iB,EAASgF,KAAMhf,EAAOnR,QAASmR,EAAOkzB,UAAWtc,GAC/L,IAAIx0B,EAAU4d,EAAOiS,MAAMhD,SAASsI,SAASnjB,GAC7ChS,EAAQwC,aAAa,aAAcswB,EAAM/mB,EAAEG,WAAa,IAAM4mB,EAAM2H,KAAKvuB,WACnE,IAAM4mB,EAAM4H,IAAIxuB,WAAa,IAAM4mB,EAAM7xB,MAAMiL,WAAa,IAAM4mB,EAAMpyB,KAAKwL,YACnF0R,EAAOy0T,cAAc1xU,YAAYX,IAKrC6wV,EAAoBx2V,UAAUkkC,cAAgB,WAC1C,MAAO,uBAUXsyT,EAAoBx2V,UAAUs4U,YAAc,SAAU/0T,GAClD5e,KAAKu4B,QAAQ3Z,IAOjBizU,EAAoBx2V,UAAUiX,QAAU,SAAUue,KAK3CghU,GACT7H,IC5IE1/P,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAexCwnQ,GAAiC,SAAUhnQ,GAE3C,SAASgnQ,IACL,OAAkB,OAAXhnQ,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KA8G/D,OAhHAsqF,GAAU6nQ,EAAiBhnQ,GAS3BgnQ,EAAgB92V,UAAU0wG,OAAS,SAAUntF,GAMzC,IAAK,IALDkV,EACA0B,EAAY,GACZgS,EAAU,IACV4qT,OAASj3V,EACT0uV,EAAgB7pV,KAAKioV,wBAAwBrpU,GACxCziB,EAAI,EAAGs+B,EAAWovT,EAAcptV,OAAQN,EAAIs+B,EAAUt+B,IAAK,EAChE23B,EAAQ+1T,EAAc1tV,IAChBmyU,mBACNx6S,EAAM65S,WACN,IAAIjyS,EAAMrvB,KAAK0T,IAAI+T,EAAM4H,IAAK5H,EAAM2H,MAChCA,EAAOpvB,KAAKC,IAAIwnB,EAAM4H,IAAK5H,EAAM2H,MACrC,GAAI7c,EAAOhH,MAAMsc,WAAY,CACzB,IAAInG,EAAO2N,EACXA,EAAMD,EACNA,EAAO1N,EAEX,IAAI4nT,EAAWj7S,GAAS5G,EAAMtF,OAAQkN,EAAK9c,EAAO9G,MAAO8G,EAAOhH,MAAOgH,EAAOiS,MAAMiG,qBAChFu7T,EAAY33T,GAAS5G,EAAMtF,OAAQiN,EAAM7c,EAAO9G,MAAO8G,EAAOhH,MAAOgH,EAAOiS,MAAMiG,qBACtFhD,EAAMw6S,gBAAgB9pU,KAAK6tV,GAC3Bv+T,EAAMw6S,gBAAgB9pU,KAAKmxU,GAC3B,IAAItiT,EAAO,IAAI6C,GAAK7pB,KAAK0T,IAAI41T,EAAS5oU,EAAGslV,EAAUtlV,GAAIV,KAAK0T,IAAI41T,EAAS3oU,EAAGqlV,EAAUrlV,GAAIX,KAAKC,IAAID,KAAKE,IAAI8lV,EAAUtlV,EAAI4oU,EAAS5oU,GAAI6R,EAAOkuT,OAAO92T,OAAQ3J,KAAKC,IAAID,KAAKE,IAAI8lV,EAAUrlV,EAAI2oU,EAAS3oU,GAAI4R,EAAOkuT,OAAO92T,QACnN4I,EAAOiS,MAAMiG,oBAIdzD,EAAKrmB,GAAK4R,EAAOkuT,OAAO92T,MAAQ,EAHhCqd,EAAKtmB,GAAK6R,EAAOkuT,OAAO92T,MAAQ,EAKpC8d,EAAM65S,QAAQnpU,KAAK6uB,GAEfS,EAAM0D,SAAWrF,GAAY03T,EAAc/1T,EAAM7hB,MAAQ,GAAI6hB,EAAO+1T,EAAc/1T,EAAM7hB,MAAQ,GAAI2M,IACpG4W,EAAYA,EAAUjb,OAAOitB,EAAU,IAAOmuS,EAAU,EAAI,IAAOA,EAAU,EAAI,KACjFyc,GAAS,GACJj2V,EAAI,EAAI0tV,EAAcptV,SAAWotV,EAAc1tV,EAAI,GAAGq7B,SACpDr7B,IAAM0tV,EAAcptV,OAAS,KAGhC+qC,EAAU,IACVhS,GAFAA,EAAYx1B,KAAKsyV,mBAAmBzI,EAAe/1T,EAAOlV,EAAQ4W,EAAWr5B,IAEvDoe,OAAO,MAC7B63U,GAAS,GAEb5qT,EAAU,OAGK,IAAX4qT,GAA0B,IAANj2V,IACpBq5B,EAAYx1B,KAAKsyV,mBAAmBzI,EAAe/1T,EAAOlV,EAAQ4W,EAAWr5B,GAC7Ei2V,GAAS,GAEb5qT,EAAU,IACV1T,EAAMw6S,oBAGd,IAAI72S,EAA2B,cAApB7Y,EAAOw7K,SAA2Bx7K,EAAOiS,MAAM7vB,QAAQsC,GAAK,cAAgBsb,EAAO3M,MAAQ,IAAM2M,EAAO6Y,KAC/G7Y,EAAOiS,MAAM7vB,QAAQsC,GAAK,WAAasb,EAAO3M,MAC9Ce,EAAU,IAAIojB,GAAWqB,EAAM7Y,EAAOypD,SAAUzpD,EAAO0lB,OAAOtuB,MAAO4I,EAAO0lB,OAAO9N,MAAO5X,EAAOnR,QAASmR,EAAOkzB,UAAWtc,GAChIx1B,KAAKkpV,eAAel2U,EAAS4L,EAAQ,IACrC5e,KAAKq1U,aAAaz2T,IAOtBuzU,EAAgB92V,UAAUi3V,mBAAqB,SAAUzI,EAAe/1T,EAAOlV,EAAQ4W,EAAWr5B,GAC9F,IAAK,IAAIonB,EAAIpnB,EAAGonB,GAAK,IACbsmU,EAActmU,GAAGiU,SAAWqyT,EAActmU,GAAG+qT,gBAAgB,IAD7C/qT,IAGhBiS,GAAa,MADb1B,EAAQ+1T,EAActmU,IACU+qT,gBAAgB,GAAI,EAAI,IAAQx6S,EAAMw6S,gBAAgB,KAAS,IAMvG,OAAO94S,GAOX28T,EAAgB92V,UAAUs4U,YAAc,SAAU/0T,GAC9C,IAAIm3E,EAASn3E,EAAO+3B,UACpB32C,KAAKqpV,kBAAkBzqU,EAAQm3E,IAKnCo8P,EAAgB92V,UAAUkkC,cAAgB,WAItC,MAAO,mBAOX4yT,EAAgB92V,UAAUiX,QAAU,SAAUue,KAKvCshU,GACTnK,IC5HEuK,GAA8B,WAC9B,SAASA,KAgHT,OAzGAA,EAAal3V,UAAU0wG,OAAS,SAAUntF,EAAQ9G,EAAOF,EAAOwc,GAC5D,IAEImvQ,EACA3qQ,EAEA45T,EACA5lV,EANAkgU,EAASluT,EAAOkuT,OAChB+c,EAAgBjrU,EAAO+Y,OAMvB36B,EAAQqP,KAAKC,IAAIsS,EAAOiS,MAAMi0S,gBAAgB/uT,OAAQ6I,EAAOiS,MAAMi0S,gBAAgB9uT,OACnFy8U,EAAgBz1V,EAAQ,IACxB01V,EAAY9zU,EAAO8zU,UAAYD,EAC/BE,EAAY/zU,EAAO+zU,UAAYF,EAC/BG,EAAc,KAElB,GAA0B,OAArBh0U,EAAO8zU,WAA2C,OAArB9zU,EAAO+zU,UAAqB,CAC1D,IAAK,IAAIv0V,EAAK,EAAGyE,EAAK+b,EAAOiS,MAAMoQ,cAAe7iC,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACpE,IAAIwpB,EAAU/kB,EAAGzE,GACI,WAAjBwpB,EAAQlhB,OAAyC,IAApBkhB,EAAQ4P,SAA2C,OAAtB5P,EAAQ8qU,WAA4C,OAAtB9qU,EAAQ+qU,YAChGC,EAAchrU,EAAQ0nT,QAAUsjB,EAAchrU,EAAQ0nT,QAAUsjB,GAIxED,EAAYD,EAAY,EACxB9lV,EAFY5P,EAAQ,EAAK,EAEL01V,OAGpBE,EAAch0U,EAAO0wT,QACrB1iU,EAAS8lV,EAAYC,EAEzB,IAAK,IAAI1uV,EAAK,EAAG6lV,EAAkBD,EAAe5lV,EAAK6lV,EAAgBrtV,OAAQwH,IAAM,CACjF,IAAI4uV,EAAc/I,EAAgB7lV,GAClC4uV,EAAYvkB,mBACZukB,EAAYllB,WACRklB,EAAYr7T,SACZrF,GAAY03T,EAAcgJ,EAAY5gV,MAAQ,GAAI4gV,EAAahJ,EAAcgJ,EAAY5gV,MAAQ,GAAI2M,KAOrG4zU,GALIA,EADsB,OAArB5zU,EAAO8zU,WAA2C,OAArB9zU,EAAO+zU,UACrB/lV,EAASP,KAAKE,KAAKsmV,EAAY/lU,KAAO8lU,GAGtCD,EAAY/lV,EAASP,KAAKE,KAAKsmV,EAAY/lU,KAAO8lU,KAErCD,EACjC/5T,GACIC,QAAQ,EAAOpB,KAAM6nS,GAAa1gT,OAAQA,EAAQkV,MAAO++T,EACzDj1T,KAAMhf,EAAOo1T,cAAc6e,EAAaj0U,EAAOypD,UAC/C/jC,OAAQ1lB,EAAOq1T,eAAe4e,GAAe78U,MAAO4I,EAAO0lB,OAAOtuB,MAAOwgB,MAAO5X,EAAO0lB,OAAO9N,QAC9FzgB,OAAQ,EAAIy8U,EAAex8U,MAAO,EAAIw8U,GAE1C5zU,EAAOiS,MAAMrK,QAAQ84S,GAAa1mS,GAC7BA,EAASC,OAaVg6T,EAAY/lB,QAAWt1S,SAAS,IAZhCq7T,EAAYvkB,gBAAgB9pU,KAAKk2B,GAASm4T,EAAYrkU,OAAQqkU,EAAYpkU,OAAQ3W,EAAOF,EAAOwc,IAChGy+T,EAAYr8T,MAAQoC,EAASgF,KAC7B2lQ,EAAc,IAAIntQ,GAAWxX,EAAOiS,MAAM7vB,QAAQsC,GAAK,WAAasb,EAAO3M,MAAQ,UAAY4gV,EAAY5gV,MAAO2mB,EAASgF,KAAMhF,EAAS0L,OAAOtuB,MAAO4iB,EAAS0L,OAAO9N,MAAO5X,EAAOnR,QAAS,MAC/LmR,EAAOy0T,cAAc1xU,YAAY8rB,GAAWolU,EAAYvkB,gBAAgB,GAAI,SAAU,IAAIlhT,GAAKwL,EAAS5iB,MAAO4iB,EAAS7iB,QAAS+2T,EAAOh2I,SAAUysG,EAAasvD,EAAY9lV,EAAEG,WAAa,IAAM2lV,EAAYpkU,OAAOvhB,aACnN2lV,EAAYllB,QAAQnpU,KAAK,IAAI0xB,GAAK28T,EAAYvkB,gBAAgB,GAAGvhU,EAAIylV,EAAeK,EAAYvkB,gBAAgB,GAAGthU,EAAIwlV,EAAe,EAAIA,EAAe,EAAIA,IAC7JK,EAAY/lB,QACRxoS,OAAQ1L,EAAS0L,OAAQ1G,KAAMhF,EAASgF,KACxC7nB,OAAQ6iB,EAAS7iB,OAAQyhB,SAAS,EAClC7J,MAAO,SAAU3X,MAAO4iB,EAAS5iB,WAcrDu8U,EAAal3V,UAAUiX,QAAU,SAAUue,KAQ3C0hU,EAAal3V,UAAUkkC,cAAgB,WAInC,MAAO,gBAOXgzT,EAAal3V,UAAUs4U,YAAc,SAAU/0T,GAK3C,IAAK,IAJD1T,EAAW0T,EAAO+3B,UAAUzrC,SAC5BrL,EAAQ+e,EAAO+3B,UAAU92C,MACzBkrV,EAAensU,EAAOy0T,cAAc9hU,WACpCuN,EAAQ,EACH1gB,EAAK,EAAGyE,EAAK+b,EAAO+Y,OAAQv5B,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvD,IAAIy0V,EAAchwV,EAAGzE,GAChBy0V,EAAYvkB,gBAAgB7xU,SAGjC07B,GAAc4yT,EAAajsU,GAAQjf,EAAOqL,EAAU0T,EAAQi0U,EAAY5gV,MAAO4gV,EAAYvkB,gBAAgB,IAAI,GAC/GxvT,OAGDyzU,KCtHPjoQ,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAgBxCmoQ,GAA4B,SAAU3nQ,GAGtC,SAAS2nQ,EAAWnuB,GAChB,IAAI5kU,EAAQorF,EAAO7pF,KAAKtB,KAAM2kU,IAAgB3kU,KAE9C,OADAD,EAAMgzV,gBACChzV,EAgPX,OArPAuqF,GAAUwoQ,EAAY3nQ,GAYtB2nQ,EAAWz3V,UAAUw0U,gBAAkB,SAAUjxT,GAC7C,IAAI5hB,EACA26B,EAAS33B,KAAKgzV,kBAAkBp0U,GAEpC,GADA5e,KAAK+yV,aAAe/yV,KAAKizV,uBAAuBt7T,EAAQ/Y,GACpD+Y,EAAOl7B,OAAS,EAAG,CACnBmiB,EAAOqyT,cACP,IAAK,IAAI7yU,EAAK,EAAGgjC,EAAWzJ,EAAQv5B,EAAKgjC,EAAS3kC,OAAQ2B,IAAM,CAC5D,IAAI01B,EAAQsN,EAAShjC,GACrB,GAAoB,IAAhB01B,EAAM7hB,MAAa,CACnB,IAAIs4H,EAAWvqI,KAAKkzV,iBAAiBv7T,EAAQ7D,EAAM7hB,MAAQ,EAAG2M,GAC9D5hB,EAAQgD,KAAKmzV,iBAAiBx7T,EAAO4yG,GAAWz2G,EAAO9zB,KAAK+yV,aAAaxoN,GAAWvqI,KAAK+yV,aAAaj/T,EAAM7hB,OAAQ2M,GACpHA,EAAOqyT,WAAWzsU,KAAKxH,GACnB82B,EAAMrF,QAAUzxB,EAAMsoD,cAAct4C,GAAKhQ,EAAMuoD,cAAcv4C,IAC7D4R,EAAOq+O,KAAO5wP,KAAK+S,MAAM/S,KAAK0T,IAAInB,EAAOq+O,KAAMnpO,EAAMrF,OAAQzxB,EAAMsoD,cAAct4C,EAAGhQ,EAAMuoD,cAAcv4C,IACxG4R,EAAOu+O,KAAO9wP,KAAKwmB,KAAKxmB,KAAKC,IAAIsS,EAAOu+O,KAAMrpO,EAAMrF,OAAQzxB,EAAMsoD,cAAct4C,EAAGhQ,EAAMuoD,cAAcv4C,SAM3H8lV,EAAWz3V,UAAU63V,iBAAmB,SAAUv7T,EAAQx7B,EAAGyiB,GACzD,GAAuC,SAAnCA,EAAOqxT,mBAAmBlyS,KAC1B,OAAO5hC,EAEX,KAAOsB,EAAkBk6B,EAAOx7B,KAAOA,GAAK,GACxCA,GAAQ,EAEZ,OAAOA,GAEX22V,EAAWz3V,UAAU+3V,aAAe,SAAUz7T,EAAQx7B,EAAGyiB,GACrD,GAAuC,SAAnCA,EAAOqxT,mBAAmBlyS,KAC1B,OAAO5hC,EAEX,KAAOsB,EAAkBk6B,EAAOx7B,KAAOA,EAAIw7B,EAAOl7B,QAC9CN,GAAQ,EAEZ,OAAOA,GAEX22V,EAAWz3V,UAAU23V,kBAAoB,SAAUp0U,GAC/C,GAAuC,SAAnCA,EAAOqxT,mBAAmBlyS,KAC1B,OAAOnf,EAAO+Y,OAGlB,IAAK,IADDA,EAASj5B,KAAWkgB,EAAO+Y,OAAQ,MAAM,GACpCx7B,EAAI,EAAGA,EAAIw7B,EAAOl7B,OAAQN,IAC/Bw7B,EAAOx7B,GAAG8V,MAAQ9V,EACdw7B,EAAOx7B,GAAGm+O,UACV3iN,EAAOx7B,GAAGmyU,mBACV32S,EAAOx7B,GAAGwxU,WACVh2S,EAAOtP,OAAOlsB,EAAG,GACjBA,KAGR,OAAOw7B,GAOXm7T,EAAWz3V,UAAU43V,uBAAyB,SAAUt7T,EAAQ/Y,GAC5D,IAGIy0U,EACAC,EACAC,EACAC,EACAC,EAIAC,EACAC,EAZA70U,EAAQ6Y,EAAOl7B,OACfm3V,KACAC,KAMAC,KACA/iT,KACAwhC,KAGAwhR,EAAwBn1U,EAAOm1U,sBAAwBn1U,EAAOm1U,sBAAwB,GAE1F,OADAA,EAAwBA,EAAwB,EAAI,EAAIA,EAAwB,EAAI,EAAIA,EAChFn1U,EAAOo1U,YACX,IAAK,YACD,IAAK,IAAI73V,EAAI,EAAGA,EAAI2iB,EAAQ,EAAG3iB,IAC3B23V,EAAG33V,GAAKw7B,EAAOx7B,EAAI,GAAGqyB,OAASmJ,EAAOx7B,GAAGqyB,OACzCuiB,EAAG50C,GAAKw7B,EAAOx7B,EAAI,GAAGsyB,OAASkJ,EAAOx7B,GAAGsyB,OACzC8jD,EAAMp2E,GAAK40C,EAAG50C,GAAK23V,EAAG33V,GAG1Bw3V,EAAcphR,EAAM91E,OAEpBm3V,EAAQ,GAAKrhR,EAAM,GACnBqhR,EAAQ90U,EAAQ,GAAKyzD,EAAMohR,EAAc,GAEzC,IAAK,IAAIpwU,EAAI,EAAGA,EAAIuwU,EAAGr3V,OAAQ8mB,IACvBowU,EAAcpwU,EAAI,IACdgvD,EAAMhvD,GAAKgvD,EAAMhvD,EAAI,IAAM,EAC3BqwU,EAAQrwU,EAAI,GAAK,GAGjBmwU,EAAaI,EAAGvwU,GAAKuwU,EAAGvwU,EAAI,GAC5BqwU,EAAQrwU,EAAI,GAAK,EAAImwU,IAAeA,EAAaI,EAAGvwU,EAAI,IAAMgvD,EAAMhvD,IAAMmwU,EAAaI,EAAGvwU,IAAMgvD,EAAMhvD,EAAI,MAItH,MACJ,IAAK,WACD,IAASpnB,EAAI,EAAGA,EAAI2iB,EAAO3iB,IAEnBy3V,EAAQz3V,GADF,IAANA,EACc2iB,EAAQ,EAAMi1U,GAAyBp8T,EAAOx7B,EAAI,GAAGqyB,OAASmJ,EAAOx7B,GAAGqyB,QAAW,EAE5FryB,IAAO2iB,EAAQ,EACNA,EAAQ,EAAMi1U,GAAyBp8T,EAAO7Y,EAAQ,GAAG0P,OAASmJ,EAAO7Y,EAAQ,GAAG0P,QAAW,EAG/FulU,GAAyBp8T,EAAOx7B,EAAI,GAAGqyB,OAASmJ,EAAOx7B,EAAI,GAAGqyB,QAGpF,MACJ,QACI,GAA0B,YAAtB5P,EAAOo1U,WAA0B,CACfr8T,EAAO,GAAGlJ,OAASkJ,EAAO,GAAGlJ,OAAWkJ,EAAO,GAAGnJ,OAASmJ,EAAO,GAAGnJ,OACtEmJ,EAAO7Y,EAAQ,GAAG0P,OAASmJ,EAAO7Y,EAAQ,GAAG0P,OACzDmJ,EAAO7Y,EAAQ,GAAG2P,OAASkJ,EAAO7Y,EAAQ,GAAG2P,OAClDmlU,EAAQ,GAAM,GAAKj8T,EAAO,GAAGlJ,OAASkJ,EAAO,GAAGlJ,SAAYkJ,EAAO,GAAGnJ,OAASmJ,EAAO,GAAGnJ,QAAU,EACnGqlU,EAAiB,GAAK,GACtBD,EAAQj8T,EAAOl7B,OAAS,GAAM,GAAKk7B,EAAOA,EAAOl7B,OAAS,GAAGgyB,OAASkJ,EAAOA,EAAOl7B,OAAS,GAAGgyB,SAC3FkJ,EAAOA,EAAOl7B,OAAS,GAAG+xB,OAASmJ,EAAOA,EAAOl7B,OAAS,GAAG+xB,QAClEolU,EAAQ,GAAKC,EAAiB,GAAKxnV,KAAKE,IAAIqnV,EAAQ,MAAQhpR,EAAAA,EAAW,EAAIgpR,EAAQ,GACnFA,EAAQj8T,EAAOl7B,OAAS,GAAKo3V,EAAiBl8T,EAAOl7B,OAAS,GAAK4P,KAAKE,IAAIqnV,EAAQj8T,EAAOl7B,OAAS,MAAQmuE,EAAAA,EACxG,EAAIgpR,EAAQj8T,EAAOl7B,OAAS,QAIhCm3V,EAAQ,GAAKC,EAAiB,GAAK,EACnCD,EAAQj8T,EAAOl7B,OAAS,GAAK,EAEjC,IAASN,EAAI,EAAGA,EAAI2iB,EAAQ,EAAG3iB,IAM3B,GALAk3V,EAAe17T,EAAOx7B,GAAGqyB,OAASmJ,EAAOx7B,EAAI,GAAGqyB,OAChD8kU,EAAe37T,EAAOx7B,EAAI,GAAGqyB,OAASmJ,EAAOx7B,EAAI,GAAGqyB,OACpD+kU,EAAe57T,EAAOx7B,EAAI,GAAGqyB,OAASmJ,EAAOx7B,GAAGqyB,OAChDglU,EAAM77T,EAAOx7B,EAAI,GAAGsyB,OAASkJ,EAAOx7B,GAAGsyB,QAAU,KACjDglU,EAAM97T,EAAOx7B,GAAGsyB,OAASkJ,EAAOx7B,EAAI,GAAGsyB,QAAU,KAC5B,IAAjB4kU,GAAuC,IAAjBC,GAAuC,IAAjBC,EAC5CK,EAAQz3V,GAAK,EACb03V,EAAiB13V,GAAK,MAErB,CACD,IAAIuuF,EAAI,GAAK2oQ,EAAeO,EAAQz3V,EAAI,GAAK,EAAIm3V,GACjDM,EAAQz3V,IAAMuuF,EAAI6oQ,EAClBM,EAAiB13V,GAAKuuF,GAAK,GAAK8oQ,EAAMD,EAAeE,EAAMJ,GAAgBA,EAAeQ,EAAiB13V,EAAI,IAGvH,IAAK,IAAIgqB,EAAIrH,EAAQ,EAAGqH,GAAK,EAAGA,IAC5BytU,EAAQztU,GAAKytU,EAAQztU,GAAKytU,EAAQztU,EAAI,GAAK0tU,EAAiB1tU,GAIxE,OAAOytU,GAOXd,EAAWz3V,UAAU83V,iBAAmB,SAAU/vS,EAAQ/a,EAAQ4rT,EAAUC,EAAUt1U,GAClF,IAAI0mC,EACAC,EACAzxB,EACAqgU,EAAoBF,EACpBG,EAAoBF,EACxB,OAAQt1U,EAAOo1U,YACX,IAAK,WAC8B,aAA3Bp1U,EAAO9G,MAAMoa,YACbiiU,EAAoBF,EAAWj0V,KAAKk1B,iBAAiBtW,GACrDw1U,EAAoBF,EAAWl0V,KAAKk1B,iBAAiBtW,IAEzD0mC,EAAgB,IAAI1xB,GAAcwvB,EAAO50B,OAASylU,EAAW,EAAG7wS,EAAO30B,OAAS0lU,EAAoB,GACpG5uS,EAAgB,IAAI3xB,GAAcyU,EAAO7Z,OAAS0lU,EAAW,EAAG7rT,EAAO5Z,OAAS2lU,EAAoB,GACpGtgU,EAAQ,IAAI2wS,GAAcn/Q,EAAeC,GACzC,MACJ,IAAK,YACD,IAAIvoD,GAASqrC,EAAO7Z,OAAS40B,EAAO50B,QAAU,EAC9C82B,EAAgB,IAAI1xB,GAAcwvB,EAAO50B,OAASxxB,EAAOomD,EAAO30B,OAASwlU,EAAWj3V,GACpFuoD,EAAgB,IAAI3xB,GAAcyU,EAAO7Z,OAASxxB,EAAOqrC,EAAO5Z,OAASylU,EAAWl3V,GACpF82B,EAAQ,IAAI2wS,GAAcn/Q,EAAeC,GACzC,MACJ,QACI,IACI8uS,EAAWhsT,EAAO7Z,OAAS40B,EAAO50B,OACtC6lU,GAAoBA,EACpB,IAAIp5T,EAHO,EAAI,GAGI,EAAImoB,EAAO30B,OAAU4Z,EAAO5Z,OAHpC,EAAI,EAGiD4lU,GAAWJ,EAAW,GAAMC,IACxF/4T,EAJO,EAAI,GAIGioB,EAAO30B,OAAU,EAAI4Z,EAAO5Z,OAJnC,EAAI,EAIiD4lU,GAAW,GAAMJ,EAAWC,IAC5F5uS,EAAgB,IAAI1xB,IAAe,EAAKwvB,EAAa,OAAK/a,EAAa,SAL5D,EAAI,GAKmEpN,GAClFsqB,EAAgB,IAAI3xB,IAAgBwvB,EAAa,OAAI,EAAK/a,EAAa,SAN5D,EAAI,GAMmElN,GAClFrH,EAAQ,IAAI2wS,GAAcn/Q,EAAeC,GAGjD,OAAOzxB,GAMXg/T,EAAWz3V,UAAU65B,iBAAmB,SAAUtW,GAC9C,IAAIzc,EAAWyc,EAAO9G,MAAMstU,mBAuB5B,MArBiB,UAAbjjV,EACyB,QAEP,WAAbA,EACoB,OAEP,SAAbA,EACoB,MAEP,UAAbA,EACoB,KAEP,YAAbA,EACoB,IAEP,YAAbA,EACoB,IAGA,QASjC2wV,EAAWz3V,UAAUs4U,YAAc,SAAU/0T,GACzC,IAAIm3E,EAASn3E,EAAO+3B,UACpB32C,KAAKqpV,kBAAkBzqU,EAAQm3E,IAE5B+8P,GACT9K,ICvQE19P,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAexC2pQ,GAA8B,SAAUnpQ,GAExC,SAASmpQ,IACL,OAAkB,OAAXnpQ,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KA+E/D,OAjFAsqF,GAAUgqQ,EAAcnpQ,GASxBmpQ,EAAaj5V,UAAU0wG,OAAS,SAAUntF,EAAQ9G,EAAOF,EAAOwc,GAChDxV,EAAOiS,MACNjS,EAAOkuT,OAkBpB,IAAK,IAhBD95T,EAIAuhV,EACAC,EACAC,EACAC,EACAl4V,EAEA8oD,EACAC,EAGAglF,EAbAw+M,EAAa,KAEbvzT,EAAY,GASZ6vB,EAAa,IACb1tB,EAAS33B,KAAKgzV,kBAAkBp0U,GAEhCgrU,EAA+C,eAA/BhrU,EAAOiS,MAAM+8S,cAAiCz5S,GAAqBuG,GAC9Et8B,EAAK,EAAGgjC,EAAWzJ,EAAQv5B,EAAKgjC,EAAS3kC,OAAQ2B,IAAM,CAC5D,IAAI01B,EAAQsN,EAAShjC,GACrBmsI,EAAWvqI,KAAKkzV,iBAAiBv7T,EAAQ7D,EAAM7hB,MAAQ,EAAG2M,GAC1DkV,EAAMw6S,mBACNx6S,EAAM65S,WACF75S,EAAM0D,SAAWrF,GAAYwF,EAAO4yG,GAAWz2G,EAAO6D,EAAO33B,KAAKozV,aAAaz7T,EAAQ7D,EAAM7hB,MAAQ,EAAG2M,IAAUA,IAC/F,OAAfmqU,IAEAzjS,GADA9oD,EAAOoiB,EAAOqyT,WAAW1mM,IACJjlF,cACrBC,EAAgB/oD,EAAK+oD,cACrBgvS,EAAM3K,EAAcb,EAAWv6T,OAAQu6T,EAAWt6T,OAAQ3W,EAAOF,EAAOwc,EAAYxV,GACpF41U,EAAM5K,EAAc91T,EAAMtF,OAAQsF,EAAMrF,OAAQ3W,EAAOF,EAAOwc,EAAYxV,GAC1E61U,EAAO7K,EAActkS,EAAcv4C,EAAGu4C,EAAct4C,EAAG8K,EAAOF,EAAOwc,EAAYxV,GACjF81U,EAAO9K,EAAcrkS,EAAcx4C,EAAGw4C,EAAcv4C,EAAG8K,EAAOF,EAAOwc,EAAYxV,GACjF4W,EAAYA,EAAUjb,OAAQ8qC,EAAa,IAAOkvS,EAAK,EAAI,IAAOA,EAAK,EAAI,MAAmBE,EAAM,EAAI,IACjGA,EAAM,EAAI,IAAOC,EAAM,EAAI,IAAOA,EAAM,EAAI,IAAOF,EAAK,EAAI,IAAOA,EAAK,EAAI,KACnFnvS,EAAa,KAEjB0jS,EAAaj1T,EACb9zB,KAAKopV,mBAAmBt1T,EAAOlV,EAAQwV,EAAYw1T,KAGnDvkS,EAAa,IACb0jS,EAAa,KACbj1T,EAAMw6S,oBAGd,IAAI72S,EAA2B,cAApB7Y,EAAOw7K,SAA2Bx7K,EAAOiS,MAAM7vB,QAAQsC,GAAK,WAAasb,EAAO+/T,YAAc,cAAgB//T,EAAO3M,MAC5H2M,EAAOiS,MAAM7vB,QAAQsC,GAAK,WAAasb,EAAO3M,MAClDe,EAAU,IAAIojB,GAAWqB,EAAM,cAAe7Y,EAAO5I,MAAO4I,EAAOypD,SAAUzpD,EAAOnR,QAASmR,EAAOkzB,UAAWtc,GAC/Gx1B,KAAKkpV,eAAel2U,EAAS4L,EAAQ,IACrC5e,KAAKq1U,aAAaz2T,IAKtB01U,EAAaj5V,UAAUkkC,cAAgB,WAInC,MAAO,gBAOX+0T,EAAaj5V,UAAUiX,QAAU,SAAUue,KAKpCyjU,GACTxB,IClGExoQ,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAexCgqQ,GAAiC,SAAUxpQ,GAE3C,SAASwpQ,IACL,OAAkB,OAAXxpQ,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KA6H/D,OA/HAsqF,GAAUqqQ,EAAiBxpQ,GAS3BwpQ,EAAgBt5V,UAAU0wG,OAAS,SAAUntF,GACzCusE,EAAO9vF,UAAU0wG,OAAOzqG,KAAKtB,KAAM4e,GAC/BA,EAAOg2U,wBACP50V,KAAK60V,yBAAyBj2U,IAQtC+1U,EAAgBt5V,UAAUy5V,qBAAuB,SAAU1kB,EAASxxT,GAGhE,IAAK,IAFDm2U,EAAOjiU,GAAIs9S,GAAWA,EAAQ3zU,OAC9Bu4V,EAAW,EACN52V,EAAK,EAAG62V,EAAY7kB,EAAShyU,EAAK62V,EAAUx4V,OAAQ2B,IAAM,CAC/D,IAAIpB,EAAQi4V,EAAU72V,GACtB42V,IAAah4V,EAAQ+3V,IAAS/3V,EAAQ+3V,GAE1Cn2U,EAAOisU,gBAAgBkK,KAAOA,EAC9Bn2U,EAAOisU,gBAAgBqK,QAAU7oV,KAAKoxB,MAAMpxB,KAAKQ,KAAKmoV,EAAW5kB,EAAQ3zU,OAAS,IAClFmiB,EAAOisU,gBAAgBC,SAAWlsU,EAAOu2U,aACrC9oV,KAAKoxB,MAAO,IAAM7e,EAAOisU,gBAAgBqK,QAAW7oV,KAAK87D,IAAIioQ,EAAQ3zU,OAAQ,EAAI,KAOzFk4V,EAAgBt5V,UAAUg0U,oBAAsB,SAAU7yU,EAAMoiB,GAC5D,IAEIksU,EAFAsK,KACAhlB,KAEJ9xU,OAAOhB,KAAKd,GAAM4C,QAAQ,SAAU/B,GAChC+yU,EAAQ5rU,KAAKhI,EAAKa,GAAKuhB,EAAOuU,UAElCvU,EAAOisU,iBACHza,QAASA,GAEb,IAAIrwT,EAAM1T,KAAK0T,IAAIxkB,MAAM8Q,KAAMuS,EAAOisU,gBAAgBza,SACtDpwU,KAAK80V,qBAAqBl2U,EAAOisU,gBAAgBza,QAASxxT,GAC1DksU,EAAWlsU,EAAOisU,gBAAgBC,SAElC,IAAK,IADDuK,EACK9xU,EAAI,EAAGA,EAAI/mB,EAAKC,QACrB44V,EAASjlB,EAAQppS,OAAO,SAAUh6B,GAAK,OAAOA,GAAK+S,GAAO/S,EAAK+S,MAAsBtjB,OACrF24V,EAAY5wV,MAAM3B,GACVkK,EAAKgT,EAAM+qU,EAAW,GAE1BjoV,EAAG+b,EAAOuU,OAASkiU,EACnBxyV,IACJkd,GAAY+qU,EACZvnU,GAAK8xU,EAET,OAAOD,EACP,IAAIvyV,GAOR8xV,EAAgBt5V,UAAUw5V,yBAA2B,SAAUj2U,GAe3D,IAAK,IAZD4P,EACA8mU,EAUAC,EAbAx1U,EAAMnB,EAAO9G,MAAM+lT,YAAY99S,IAC/BzT,EAAMsS,EAAO9G,MAAM+lT,YAAYvxT,IAI/BkpB,EAAY,GACZ6vB,EAAa,IACbmwS,EAAe52U,EAAOisU,gBAAgBza,QAAQ3zU,OAC9CquV,EAAWlsU,EAAOisU,gBAAgBC,SAClCiK,EAAOn2U,EAAOisU,gBAAgBkK,KAC9BG,EAAUt2U,EAAOisU,gBAAgBqK,QAEjCO,GAAOnpV,EAAMyT,OAER5jB,EAAI,EAAGA,EAHE,IAGeA,IAK7Bq5B,GAAa6vB,EAAa,KAD1BiwS,EAAgB56T,GAHhBlM,EAASzO,EAAM5jB,EAAIs5V,EACVppV,KAAKqD,MAAM8e,EAASumU,IAASvmU,EAASumU,IAAS,EAAIG,EAAUA,KACjEA,EAAU7oV,KAAKQ,KAAK,EAAIR,KAAK+Q,KACQ0tU,EAAW0K,EAAc52U,EAAO9G,MAAO8G,EAAOhH,MAAOgH,EAAOiS,MAAMiG,sBAC5D,EAAI,IAAOw+T,EAAe,EAAI,IAC9EjwS,EAAa,KAEjBkwS,EAAmB32U,EAAOiS,MAAMhD,SAASsI,SAAS,IAAIC,GAAWxX,EAAOiS,MAAM7vB,QAAQsC,GAAK,WAAasb,EAAO3M,MAAQ,UAAW,cAAe,EAAG2M,EAAOiS,MAAMwF,WAAW1G,SAAU/Q,EAAOnR,QAASmR,EAAOkzB,UAAWtc,KACvM9wB,MAAMC,WAAcia,EAAO+3B,UAAUlX,QAAU7gB,EAAOiS,MAAM6iT,cACzE,SAAW,UACf90T,EAAOy0T,cAAc1xU,YAAY4zV,IAOrCZ,EAAgBt5V,UAAUs4U,YAAc,SAAU/0T,GAC9CusE,EAAO9vF,UAAUs4U,YAAYryU,KAAKtB,KAAM4e,GACpCA,EAAOg2U,wBACPp7T,GAAgB5a,EAAOy0T,cAActrM,iBAAkBnpH,EAAO+3B,UAAUzrC,SAAU,IAAK,WAM/FypV,EAAgBt5V,UAAUkkC,cAAgB,WACtC,MAAO,mBAUXo1T,EAAgBt5V,UAAUiX,QAAU,SAAUue,KAKvC8jU,GACTzJ,IChJE5gQ,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAexC+qQ,GAAkC,SAAUvqQ,GAE5C,SAASuqQ,IACL,OAAkB,OAAXvqQ,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAqF/D,OAvFAsqF,GAAUorQ,EAAkBvqQ,GAS5BuqQ,EAAiBr6V,UAAU0wG,OAAS,SAAUntF,EAAQ9G,EAAOF,EAAOwc,GAkBhE,IAAK,IAZDogU,EACAC,EACAC,EACAiB,EACAC,EAGA9hU,EACAy2G,EAbAw+M,EAAa,KACbvzT,EAAY,GACZ6vB,EAAa,KACbwwS,EAAc,KAOdl+T,EAAS33B,KAAKgzV,kBAAkBp0U,GAChC0mR,EAAe1mR,EAAO+Y,OAAOl7B,OAG7BmtV,EAA+C,eAA/BhrU,EAAOiS,MAAM+8S,cAAiCz5S,GAAqBuG,GACnFu+O,EAAwC,eAA/Br6P,EAAOiS,MAAM+8S,cAAiChvT,EAAO+Y,OAAO,GAAGlJ,OACxEpiB,KAAKC,IAAIsS,EAAOhH,MAAM+a,aAAa5S,IAAK,GACnC5jB,EAAI,EAAGA,EAAImpS,EAAcnpS,KAC9B23B,EAAQlV,EAAO+Y,OAAOx7B,IAChBmyU,mBACNx6S,EAAM65S,WACNpjM,EAAWvqI,KAAKkzV,iBAAiBv7T,EAAQ7D,EAAM7hB,MAAQ,EAAG2M,GACtDkV,EAAM0D,SACNrF,GAAYwF,EAAO4yG,GAAWz2G,EAAO6D,EAAO33B,KAAKozV,aAAaz7T,EAAQ7D,EAAM7hB,MAAQ,EAAG2M,IAAUA,IAC7FmqU,GACA4M,EAAa/2U,EAAOqyT,WAAW1mM,GAAUjlF,cACzCswS,EAAah3U,EAAOqyT,WAAW1mM,GAAUhlF,cACnCqkS,EAAcb,EAAWv6T,OAAQu6T,EAAWt6T,OAAQ3W,EAAOF,EAAOwc,EAAYxV,GACpF41U,EAAM5K,EAAc91T,EAAMtF,OAAQsF,EAAMrF,OAAQ3W,EAAOF,EAAOwc,EAAYxV,GAC1E61U,EAAO7K,EAAc+L,EAAW5oV,EAAG4oV,EAAW3oV,EAAG8K,EAAOF,EAAOwc,EAAYxV,GAC3E81U,EAAO9K,EAAcgM,EAAW7oV,EAAG6oV,EAAW5oV,EAAG8K,EAAOF,EAAOwc,EAAYxV,GAC3E4W,EAAYA,EAAUjb,OAAO,KAAOk6U,EAAK1nV,EAAI,IACvC0nV,EAAKznV,EAAI,IAAM0nV,EAAK3nV,EAAI,IAAM2nV,EAAK1nV,EAAI,IAAMwnV,EAAIznV,EAAI,IAAMynV,EAAIxnV,EAAI,OAKzEwoB,GAAc,MADd6vB,EAAaukS,EAAc91T,EAAMtF,OAAQyqP,EAAQnhQ,EAAOF,EAAOwc,EAAYxV,IAC3C7R,EAAI,IAAMs4C,EAAWr4C,EAAI,IAGzDwoB,GAAc,MADdqgU,EAAcjM,EAAc91T,EAAMtF,OAAQsF,EAAMrF,OAAQ3W,EAAOF,EAAOwc,EAAYxV,IACjD7R,EAAI,IAAM8oV,EAAY7oV,EAAI,KAE/DhN,KAAKopV,mBAAmBt1T,EAAOlV,EAAQwV,EAAYw1T,GACnDb,EAAaj1T,IAGbi1T,EAAa,KACbj1T,EAAMw6S,qBAEJnyU,EAAI,EAAImpS,IAAiB1mR,EAAO+Y,OAAOx7B,EAAI,GAAGq7B,SAAYr7B,IAAMmpS,EAAe,IAC9EkvD,GAAOnvS,IACVA,EAAaukS,EAAc91T,EAAMtF,OAAQyqP,EAAQnhQ,EAAOF,EAAOwc,EAAYxV,GAC3E4W,EAAYA,EAAUjb,OAAO,KAAQ8qC,EAAY,EAAI,IAAOA,EAAY,IAGhFrlD,KAAKkpV,eAAe,IAAI9yT,GAAWxX,EAAOiS,MAAM7vB,QAAQsC,GAAK,WAAasb,EAAO3M,MAAO2M,EAAOypD,SAAUzpD,EAAO0lB,OAAOtuB,MAAO4I,EAAO0lB,OAAO9N,MAAO5X,EAAOnR,QAASmR,EAAOkzB,UAAWtc,GAAY5W,EAAQ,IACzM5e,KAAKq1U,aAAaz2T,IAKtB82U,EAAiBr6V,UAAUkkC,cAAgB,WAIvC,MAAO,oBAOXm2T,EAAiBr6V,UAAUiX,QAAU,SAAUue,KAKxC6kU,GACT5C,ICxGExoQ,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAiBxCmrQ,GAAmC,SAAU3qQ,GAE7C,SAAS2qQ,IACL,OAAkB,OAAX3qQ,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KA6H/D,OA/HAsqF,GAAUwrQ,EAAmB3qQ,GAQ7B2qQ,EAAkBz6V,UAAUujV,qBAAuB,SAAUlB,EAAW7sT,GACpE6sT,EAAU/D,gBACV,IAAIoc,EAAa,IAAI5mB,GAAOuO,EAAW,mBAAoB,GAC3D19U,KAAKg2V,oBAAoBD,EAAYrY,EAAW,aAAcA,EAAU9/S,KAAM8/S,EAAU1nU,MAAO6a,IAMnGilU,EAAkBz6V,UAAU26V,oBAAsB,SAAUp3U,EAAQ8+T,EAAWjmT,EAAMmG,EAAM5nB,EAAO6a,GAC9FjS,EAAO6Y,KAAOA,EACd7Y,EAAOswT,MAAQ,IACftwT,EAAOuU,MAAQ,IACfvU,EAAOgf,KAAOA,GAAQ,UACtBhf,EAAOkzB,UAAY4rS,EAAU5rS,UAC7BlzB,EAAO5I,MAAQA,EACf4I,EAAO8Y,UAAYgmT,EAAUhmT,UAC7B9Y,EAAO+3B,UAAY+mS,EAAU/mS,UAC7B/3B,EAAOigU,UAAYnB,EAAUmB,UAC7BjgU,EAAOu0T,gBAAkBuK,EAAUvK,gBACnCv0T,EAAO+Y,UACP/Y,EAAOi2T,eAAgB,EACvBj2T,EAAOypD,SAAWzpD,EAAOgf,KACzBhf,EAAOw7K,SAAW,YAClBx7K,EAAO3M,MAAQyrU,EAAUzrU,MACzB2M,EAAOiS,MAAQA,EACfjS,EAAOkZ,KAAO8yC,EAAAA,EACdhsD,EAAOs+O,MAAQtyL,EAAAA,EACfhsD,EAAOq+O,KAAOryL,EAAAA,EACdhsD,EAAOu+O,MAAQvyL,EAAAA,EACfhsD,EAAOovT,SACPpvT,EAAOsxT,SACPtxT,EAAOkuT,OAAOt1S,SAAU,EACxBkmT,EAAU/D,aAAan1U,KAAKoa,IAMhCk3U,EAAkBz6V,UAAUsiV,wBAA0B,SAAU9sT,EAAO6sT,EAAWzrU,IAC1EyrU,EAAU4B,YAAc5B,EAAUn6Q,aAClC1sC,GAAa6mT,EAAU/D,aAAa,IAExC,IAAIjlT,EAAW,IAAIwB,GAAK,EAAG,EAAG,EAAG,IAC7BwnT,EAAU4B,YAAc5B,EAAUn6Q,cAClC7uC,EAAWgpT,EAAU/D,aAAa,GAAGjlT,UAGzC,IAAIy+S,EAAkBtiT,EAAMhD,SAAS4rF,aAAa,IAAIyqN,GAAWrzS,EAAM7vB,QAAQsC,GAAK,2BAA6B2O,EAAO,eAAiB+D,MAAO,EAAGwgB,MAAO,QAAU,GAChKzpB,EAAG,EAAGC,EAAG,EAAGgJ,MAAO0e,EAAS1e,MAC5BD,OAAQ2e,EAAS3e,UAGrB2nU,EAAUuY,iBAAmBplU,EAAMhD,SAASw+C,aACxC/oE,GAAMutB,EAAM7vB,QAAQsC,GAAK,iBAAmB2O,EAC5C5E,UAAa,aAAeqnB,EAAS3nB,EAAI,IAAM2nB,EAAS1nB,EAAI,IAC5DsmU,YAAa,QAAUziT,EAAM7vB,QAAQsC,GAAK,2BAA6B2O,EAAQ,MAEnFyrU,EAAUuY,iBAAiBt0V,YAAYwxU,GAEvC,IAAK,IAAI/0U,EAAK,EAAGyE,EAAK66U,EAAU/D,aAAcv7U,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAChE,IAAIwgB,EAAS/b,EAAGzE,GAChBwgB,EAAOu0T,gBAAkBA,EACzB,IAAInyU,EAAU4d,EAAOiS,MAAMhD,SAASw+C,aAChC/oE,GAAMsb,EAAOiS,MAAM7vB,QAAQsC,GAAK,cAC5Bo6U,EAAUzrU,MAAQ,IAAM2M,EAAO6Y,KAAO,WAE9CimT,EAAUuY,iBAAiBt0V,YAAYX,GACvC4d,EAAOy0T,cAAgBryU,EAE3B6vB,EAAMssT,kBAAkBx7U,YAAY+7U,EAAUuY,mBAElDH,EAAkBz6V,UAAU66V,aAAe,SAAUnpV,EAAGC,EAAG+pC,EAAan4B,EAAQ3M,EAAOyrU,QACjE,IAAdA,IAAwBA,EAAY,MACxC,IAAI5pT,EAAQ,IAAIu6S,GAqBhB,OApBAv6S,EAAM/mB,EAAIA,EACV+mB,EAAM9mB,EAAIA,EACV8mB,EAAMtF,OAASuoB,EAAYvoB,OAC3BsF,EAAM0C,MAAQ5X,EAAOgf,KACrB9J,EAAM7hB,MAAQA,EACd6hB,EAAMrF,OAASzhB,EACf8mB,EAAM0D,SAAU,EAChB5Y,EAAOkZ,KAAOzrB,KAAK0T,IAAInB,EAAOkZ,KAAMhE,EAAMtF,QAC1C5P,EAAOq+O,KAAO5wP,KAAK0T,IAAInB,EAAOq+O,KAAMnpO,EAAMrF,QAC1C7P,EAAOs+O,KAAO7wP,KAAKC,IAAIsS,EAAOs+O,KAAMppO,EAAMtF,QAC1C5P,EAAOu+O,KAAO9wP,KAAKC,IAAIsS,EAAOu+O,KAAMrpO,EAAMrF,QAC1C7P,EAAOovT,MAAMxpU,KAAKsvB,EAAMtF,QACpBkvT,GAAgC,SAAnBA,EAAUh3U,MAAmC,WAAhBkY,EAAOlY,OAC7CotB,EAAM9mB,GAAK,EACX8mB,EAAM0C,MAAQknT,EAAUyY,kBAGxBriU,EAAM0C,MAAQknT,EAAU0Y,mBAGzBtiU,GAEXgiU,EAAkBz6V,UAAUg7V,cAAgB,SAAUtpV,EAAG0uB,EAAMC,EAAKqb,EAAan4B,EAAQ3M,EAAOyrU,QAC1E,IAAdA,IAAwBA,EAAY,MACxC,IAAI5pT,EAAQ,IAAIu6S,GAShB,OARAv6S,EAAM/mB,EAAIA,EACV+mB,EAAM2H,KAAOA,EACb3H,EAAM4H,IAAMA,EACZ5H,EAAMtF,OAASuoB,EAAYvoB,OAC3BsF,EAAM0C,MAAQ5X,EAAOgf,KACrB9J,EAAM7hB,MAAQA,EACd6hB,EAAM0D,SAAU,EAChB5Y,EAAOovT,MAAMxpU,KAAKsvB,EAAMtF,QACjBsF,GAEXgiU,EAAkBz6V,UAAUi7V,eAAiB,SAAU3+T,EAAQ+lT,EAAW9+T,QACvD,IAAXA,IAAqBA,EAAS,MAC7BA,EAIDA,EAAO+Y,OAASA,EAHhB+lT,EAAU/D,aAAa,GAAGhiT,OAASA,GAMpCm+T,GACT9N,IClJE19P,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAexC4rQ,GAA8B,SAAUprQ,GAExC,SAASorQ,IACL,OAAkB,OAAXprQ,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAuD/D,OAzDAsqF,GAAUisQ,EAAcprQ,GAQxBorQ,EAAal7V,UAAUqzU,eAAiB,SAAUgP,EAAW7sT,GACzD,IAAI2lU,KACA7+T,EAAS+lT,EAAU/lT,OACvB,GAAIA,GAAUA,EAAOl7B,OAAQ,CAEzB,IAAIg6V,EAAY9+T,EACZ5L,EAAQgL,GAAiB2mT,EAAU3xT,OAEnC2qU,EAAehZ,EAAU/D,aAAa,GAC1C,GAAI8c,GAAaA,EAAUh6V,QAAUg6V,EAAUh6V,QAAUihV,EAAUiZ,OAAQ,CAIvE,IAAK,IAFD9hM,EAAU,EACV/hI,EAAM,EACD32B,EAAI,EAAGA,EAAIuhV,EAAUiZ,OAAQx6V,IAClC22B,GAAO2jU,EAAUt6V,GAAG4vB,GAExB8oI,EAAU/hI,EAAM4qT,EAAUiZ,OAC1BH,EAAUhyV,KAAKxE,KAAKk2V,aAAaO,EAAU/Y,EAAUiZ,OAAS,GAAS,EAAG9hM,EAAS4hM,EAAU/Y,EAAUiZ,OAAS,GAAID,EAAcF,EAAU/5V,SAE5I,IADA,IAAIwV,EAAQyrU,EAAUiZ,OACf1kV,EAAQwkV,EAAUh6V,QACrBq2B,GAAO2jU,EAAUxkV,EAAQyrU,EAAUiZ,QAAQ5qU,GAE3C8oI,GADA/hI,GAAO2jU,EAAUxkV,GAAO8Z,IACR2xT,EAAUiZ,OAC1BH,EAAUhyV,KAAKxE,KAAKk2V,aAAaO,EAAUxkV,GAAa,EAAG4iJ,EAAS4hM,EAAUxkV,GAAQykV,EAAcF,EAAU/5V,SAC9GwV,IAGRjS,KAAKs2V,eAAeE,EAAW9Y,KAQvC6Y,EAAal7V,UAAUiX,QAAU,SAAUue,KAQ3C0lU,EAAal7V,UAAUkkC,cAAgB,WAInC,MAAO,gBAEJg3T,GACTT,IC1EExrQ,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAexCisQ,GAA8B,SAAUzrQ,GAExC,SAASyrQ,IACL,OAAkB,OAAXzrQ,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAsD/D,OAxDAsqF,GAAUssQ,EAAczrQ,GAQxByrQ,EAAav7V,UAAUqzU,eAAiB,SAAUgP,EAAW7sT,GACzD,IAAI9E,EAAQgL,GAAiB2mT,EAAU3xT,OAEnC8qU,KACAH,EAAehZ,EAAU/D,aAAa,GAEtC8c,EAAY/Y,EAAU/lT,OAC1B,GAAI8+T,GAAaA,EAAUh6V,QAAUg6V,EAAUh6V,QAAUihV,EAAUiZ,OAAQ,CAMvE,IAAK,IAJD7jU,EAAM,EACN+hI,EAAU,EAEV1uI,EAAK,GAAKu3T,EAAUiZ,OAAS,GACxBx6V,EAAI,EAAGA,EAAIuhV,EAAUiZ,OAAQx6V,IAClC22B,GAAO2jU,EAAUt6V,GAAG4vB,GAExB8oI,EAAU/hI,EAAM4qT,EAAUiZ,OAC1BE,EAAUryV,KAAKxE,KAAKk2V,aAAaO,EAAU/Y,EAAUiZ,OAAS,GAAS,EAAG9hM,EAAS4hM,EAAU/Y,EAAUiZ,OAAS,GAAID,EAAcG,EAAUp6V,SAE5I,IADA,IAAIwV,EAAQyrU,EAAUiZ,OACf1kV,EAAQwkV,EAAUh6V,QAAQ,CAE7B,IAAIq6V,EAAcD,EAAU5kV,EAAQyrU,EAAUiZ,QAAQD,EAAavjU,OAC/D1E,GAAUgoU,EAAUxkV,GAAO8Z,GAAS+qU,GAAe3wU,EAAI2wU,EAC3DD,EAAUryV,KAAKxE,KAAKk2V,aAAaO,EAAUxkV,GAAa,EAAGwc,EAAQgoU,EAAUxkV,GAAQykV,EAAcG,EAAUp6V,SAC7GwV,KAGRjS,KAAKs2V,eAAeO,EAAWnZ,IAOnCkZ,EAAav7V,UAAUiX,QAAU,SAAUue,KAQ3C+lU,EAAav7V,UAAUkkC,cAAgB,WAInC,MAAO,gBAEJq3T,GACTd,ICzEExrQ,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAexCosQ,GAA8B,SAAU5rQ,GAExC,SAAS4rQ,IACL,OAAkB,OAAX5rQ,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAkF/D,OApFAsqF,GAAUysQ,EAAc5rQ,GAQxB4rQ,EAAa17V,UAAUqzU,eAAiB,SAAUgP,EAAW7sT,GACzD,IAAImmU,KACAjrU,EAAQgL,GAAiB2mT,EAAU3xT,OAInC0qU,GAFe/Y,EAAU/D,aAAa,GAE1B+D,EAAU/lT,QAC1B,GAAI8+T,GAAaA,EAAUh6V,QAAUg6V,EAAUh6V,QAAUihV,EAAUiZ,OAAQ,CACvE,IAAIM,EAAiBvZ,EAAU/D,aAAa,GAExCud,EAAcxZ,EAAU/lT,OAC5B,GAAIu/T,EAAYz6V,QAAUy6V,EAAYz6V,QAAUihV,EAAUiZ,OAAQ,CAEhDjZ,EAAUiZ,OAWxB,IAXA,IAGI7jU,EAAM,EAGNqkU,KAEAllV,EAAQ,EACRwoB,EAAWy8T,EAAYz6V,OACvBk6V,EAASjZ,EAAUiZ,OAChBl8T,GAAYk8T,GAAQ,CACvB7jU,EAAM,EAEN,IAAK,IAAIvP,EADTtR,EAAQilV,EAAYz6V,OAASg+B,EACTlX,EAAItR,EAAQ0kV,EAAQpzU,IACpCuP,GAAYokU,EAAY3zU,GAAGwI,GAE/B+G,GAAY6jU,EACZQ,EAAU3yV,KAAKsuB,GACf2H,IAGJ,IAAK,IAAI8qQ,EAAM,EAAGA,EAAMoxD,EAAS,EAAGpxD,IAAO,CACvCzyQ,EAAM,EACN,IAASvP,EAAI,EAAGA,EAAIgiR,EAAM,EAAGhiR,IACzBuP,GAAYokU,EAAY3zU,GAAGwI,GAE/B+G,GAAayyQ,EAAM,EACnB4xD,EAAU9uU,OAAOk9Q,EAAK,EAAGzyQ,GAG7B,IADA7gB,EAAQyrU,EAAUiZ,OACX1kV,GAASklV,EAAU16V,QAAQ,CAC9Bq2B,EAAM,EACN,IAASvP,EAAItR,EAAQyrU,EAAUiZ,OAAQpzU,EAAItR,EAAOsR,IAC9CuP,GAAYqkU,EAAU5zU,GAE1BuP,GAAY4qT,EAAUiZ,OACtBK,EAAUxyV,KAAKxE,KAAKk2V,aAAagB,EAAYjlV,EAAQ,GAAS,EAAG6gB,EAAKokU,EAAYjlV,EAAQ,GAAIglV,EAAgBD,EAAUv6V,SACxHwV,MAIZjS,KAAKs2V,eAAeU,EAAWtZ,IAOnCqZ,EAAa17V,UAAUiX,QAAU,SAAUue,KAQ3CkmU,EAAa17V,UAAUkkC,cAAgB,WAInC,MAAO,gBAEJw3T,GACTjB,ICrGExrQ,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAcxCysQ,GAAmD,SAAUjsQ,GAE7D,SAASisQ,IACL,OAAkB,OAAXjsQ,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAoE/D,OAtEAsqF,GAAU8sQ,EAAmCjsQ,GAQ7CisQ,EAAkC/7V,UAAUqzU,eAAiB,SAAUgP,EAAW7sT,GAC3D6sT,EAAU2Z,aAA7B,IACIC,KACAb,EAAY/Y,EAAU/lT,OACtB8+T,EAAUh6V,OAAS,GAAKg6V,EAAUh6V,OAASihV,EAAUiZ,SACrDW,EAAWt3V,KAAKu3V,kBAAkB7Z,EAAW+Y,IAEjDz2V,KAAKs2V,eAAegB,EAAU5Z,IAMlC0Z,EAAkC/7V,UAAUk8V,kBAAoB,SAAU7Z,EAAW+Y,GACjF,IAAI1oU,KACA+E,EAAM,EACN32B,EAAI,EAEJs/B,EAAO,EACPC,EAAM,EACNz5B,EAAQ,EACRy0V,EAAehZ,EAAU/D,aAAa,GAC1C,IAAKx9U,EAAI,EAAGA,EAAIs6V,EAAUh6V,OAAQN,IAC9Bs/B,EAAOnE,OAAOm/T,EAAUt6V,GAAGs/B,MAC3BC,EAAMpE,OAAOm/T,EAAUt6V,GAAGu/B,KAW1B5I,KAVA7wB,EAAQq1B,OAAOm/T,EAAUt6V,GAAG8F,QAMVy5B,GAAQD,EAAOx5B,KAAWw5B,EAAOC,GAI/BpE,OAAOm/T,EAAUt6V,GAAG2zU,QAIxC/hT,EAAK5xB,GAAK6D,KAAKk2V,aAAaO,EAAUt6V,GAAG4Q,EAAG+lB,EAAK2jU,EAAUt6V,GAAIu6V,EAAc3oU,EAAKtxB,QAEtF,OAAOsxB,GAOXqpU,EAAkC/7V,UAAUiX,QAAU,SAAUue,KAQhEumU,EAAkC/7V,UAAUkkC,cAAgB,WAIxD,MAAO,qCAEJ63T,GACTtB,ICtFExrQ,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAcxC6sQ,GAA8B,SAAUrsQ,GAExC,SAASqsQ,IACL,OAAkB,OAAXrsQ,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAmF/D,OArFAsqF,GAAUktQ,EAAcrsQ,GAQxBqsQ,EAAan8V,UAAUqzU,eAAiB,SAAUgP,EAAW7sT,GACtC6sT,EAAU2Z,aAA7B,IAEIZ,EAAY/Y,EAAU/lT,OACtB8+T,EAAUh6V,OAAS,GAAKg6V,EAAUh6V,OAASihV,EAAUiZ,QACrD32V,KAAKy3V,mBAAmB/Z,EAAW+Y,IAO3Ce,EAAan8V,UAAUo8V,mBAAqB,SAAU/Z,EAAW+Y,GAY7D,IAAK,IAXD5hM,EAAU,EACV6iM,EAAU,EACVC,EAAY,EACZC,EAAW,EACXC,EAAY,EACZlgU,KACA5J,KACA4oU,EAASjZ,EAAUiZ,OACnB7jU,EAAM,EAEN4jU,EAAehZ,EAAU/D,aAAa,GACjCx9U,EAAI,EAAGA,EAAIs6V,EAAUh6V,OAAQN,IAMlCu7V,EAAUpgU,OAAOm/T,EAAUt6V,GAAGs/B,MAAQnE,OAAOm/T,EAAUt6V,GAAGu/B,KACtDv/B,EAAI,IAEJw7V,EAAYtrV,KAAKE,IAAI+qB,OAAOm/T,EAAUt6V,GAAGs/B,MAAQnE,OAAOm/T,EAAUt6V,EAAI,GAAG8F,QACzE21V,EAAWvrV,KAAKE,IAAI+qB,OAAOm/T,EAAUt6V,GAAGu/B,KAAOpE,OAAOm/T,EAAUt6V,EAAI,GAAG8F,SAM3E6wB,GADA+kU,EAAYxrV,KAAKC,IAAIorV,EAASC,EAAWC,GAKrCz7V,GAAKw6V,GACL9hM,GAAWv9H,OAAOvJ,EAAK5xB,EAAI,GAAI,IAAMw6V,EAAS,GAAKkB,GAAalB,EAChEh/T,EAAOnzB,KAAKxE,KAAKk2V,aAAaO,EAAUt6V,GAAG4Q,EAAG8nJ,EAAS4hM,EAAUt6V,GAAIu6V,EAAc/+T,EAAOl7B,WAG1Fo4J,EAAU/hI,EAAM6jU,EACZx6V,IAAMw6V,EAAS,GACfh/T,EAAOnzB,KAAKxE,KAAKk2V,aAAaO,EAAUt6V,GAAG4Q,EAAG8nJ,EAAS4hM,EAAUt6V,GAAIu6V,EAAc/+T,EAAOl7B,UAGlGsxB,EAAK5xB,IAAO4Q,EAAG0pV,EAAUt6V,GAAG4Q,EAAGC,EAAG6nJ,GAEtC70J,KAAKs2V,eAAe3+T,EAAQ+lT,IAOhC8Z,EAAan8V,UAAUiX,QAAU,SAAUue,KAQ3C2mU,EAAan8V,UAAUkkC,cAAgB,WAInC,MAAO,gBAEJi4T,GACT1B,ICrGExrQ,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAexCmtQ,GAAmC,SAAU3sQ,GAE7C,SAAS2sQ,IACL,OAAkB,OAAX3sQ,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAsD/D,OAxDAsqF,GAAUwtQ,EAAmB3sQ,GAQ7B2sQ,EAAkBz8V,UAAUujV,qBAAuB,SAAUlB,EAAW7sT,GACpEs6D,EAAO9vF,UAAUujV,qBAAqBt9U,KAAKtB,KAAM09U,EAAW7sT,GAC5D,IAAIknU,EAAY,IAAI5oB,GAAOuO,EAAW,mBAAoB,GAC1DvyP,EAAO9vF,UAAU26V,oBAAoB10V,KAAKtB,KAAM+3V,EAAWra,EAAW,YAAaA,EAAUqa,UAAUvhU,MAAOknT,EAAUqa,UAAU/hV,MAAO6a,IAM7IinU,EAAkBz8V,UAAUqzU,eAAiB,SAAUgP,EAAW7sT,GAC9D,IAAImnU,KACAC,KACAxB,EAAY/Y,EAAU/lT,OAC1B,GAAI8+T,GAAaA,EAAUh6V,OAAQ,CAC/B,IAAIy7V,EAAcxa,EAAU/D,aAAa,GACrC+c,EAAehZ,EAAU/D,aAAa,GACtCl/S,EAAWijT,EAAUiZ,OACzB,GAAIF,EAAUh6V,QAAUihV,EAAUiZ,OAC9B,IAAK,IAAIx6V,EAAI,EAAGA,EAAIs6V,EAAUh6V,OAAQN,IAClC67V,EAAgBxzV,KAAKxE,KAAKk2V,aAAaO,EAAUt6V,GAAG4Q,EAAG,IAAK0pV,EAAUt6V,GAAI+7V,EAAaF,EAAgBv7V,SACjGN,EAAIs+B,GACNw9T,EAAiBzzV,KAAKxE,KAAKk2V,aAAaO,EAAUt6V,GAAG4Q,EAAIuqB,OAAOm/T,EAAUt6V,GAAG8F,OAASq1B,OAAOm/T,EAAUt6V,EAAIs+B,GAAUx4B,OAAS,IAAMw0V,EAAUt6V,GAAIu6V,EAAcuB,EAAiBx7V,SAI7LuD,KAAKs2V,eAAe2B,EAAkBva,EAAWA,EAAU/D,aAAa,IACxE35U,KAAKs2V,eAAe0B,EAAiBta,EAAWA,EAAU/D,aAAa,MAQ/Eme,EAAkBz8V,UAAUiX,QAAU,SAAUue,KAQhDinU,EAAkBz8V,UAAUkkC,cAAgB,WAIxC,MAAO,qBAEJu4T,GACThC,ICzEExrQ,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAexCwtQ,GAA8B,SAAUhtQ,GAExC,SAASgtQ,IACL,OAAkB,OAAXhtQ,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KA0F/D,OA5FAsqF,GAAU6tQ,EAAchtQ,GAQxBgtQ,EAAa98V,UAAUujV,qBAAuB,SAAUlB,EAAW7sT,GAE/D,GADAs6D,EAAO9vF,UAAUujV,qBAAqBt9U,KAAKtB,KAAM09U,EAAW7sT,GACxD6sT,EAAU0a,UAAW,CACrB,IAAIC,EAAY,IAAIlpB,GAAOuO,EAAW,mBAAoB,GAC1DvyP,EAAO9vF,UAAU26V,oBAAoB10V,KAAKtB,KAAMq4V,EAAW3a,EAAW,YAAaA,EAAU2a,UAAU7hU,MAAOknT,EAAU2a,UAAUriV,MAAO6a,GACzI,IAAIknU,EAAY,IAAI5oB,GAAOuO,EAAW,mBAAoB,GAC1DvyP,EAAO9vF,UAAU26V,oBAAoB10V,KAAKtB,KAAM+3V,EAAWra,EAAW,YAAaA,EAAUqa,UAAUvhU,MAAOknT,EAAUqa,UAAU/hV,MAAO6a,KAOjJsnU,EAAa98V,UAAUqzU,eAAiB,SAAUgP,EAAW7sT,GACzD,IAAIonU,KACAK,KACAN,KACAtB,EAAehZ,EAAU/D,aAAa,GAEtC8c,EAAY/Y,EAAU/lT,OAC1B,GAAI8+T,EAAUh6V,QAAUg6V,EAAUh6V,QAAUihV,EAAUiZ,OAAQ,CAE1D,GAAIjZ,EAAU0a,UACV,IAAK,IAAIj8V,EAAI,EAAGA,EAAIs6V,EAAUh6V,OAAQN,IAClC67V,EAAgBxzV,KAAKxE,KAAKk2V,aAAaO,EAAUt6V,GAAG4Q,EAAG2wU,EAAU6a,WAAY9B,EAAUt6V,GAAIuhV,EAAU/D,aAAa,GAAIqe,EAAgBv7V,SACtI67V,EAAgB9zV,KAAKxE,KAAKk2V,aAAaO,EAAUt6V,GAAG4Q,EAAG2wU,EAAU8a,SAAU/B,EAAUt6V,GAAIuhV,EAAU/D,aAAa,GAAI2e,EAAgB77V,SAOvI,IAHDg8V,EAAYnhU,OAAOm/T,EAAU,GAAGx0V,OAChCy2V,EAAO,EACPC,EAAO,EACX,IAASx8V,EAAI,EAAGA,GAAKuhV,EAAUiZ,OAAQx6V,IAAK,CACxC,IAAI81V,EAAU36T,OAAOm/T,EAAUt6V,GAAG8F,OAC9BgwV,EAAUwG,EACVC,GAAQzG,EAAUwG,EAGlBE,GAAQF,EAAYxG,EAExBwG,EAAYxG,EAEhByG,GAAchb,EAAUiZ,OACxBgC,GAAcjb,EAAUiZ,OACxBsB,EAAiBzzV,KAAKxE,KAAKk2V,aAAaO,EAAU/Y,EAAUiZ,QAAQ5pV,EAAG,IAAO,KAAO,EAAI2rV,EAAOC,GAAQlC,EAAU/Y,EAAUiZ,QAASD,EAAcuB,EAAiBx7V,SACpK,IAAK,IAAI8mB,EAAIm6T,EAAUiZ,OAAS,EAAGpzU,EAAIkzU,EAAUh6V,OAAQ8mB,IAAK,CAC1D,IAAIq1U,EAAUthU,OAAOm/T,EAAUlzU,GAAGthB,OAC9B22V,EAAUH,GACVC,GAAQA,GAAQhb,EAAUiZ,OAAS,IAAMiC,EAAUH,IAAc/a,EAAUiZ,OAC3EgC,EAAQA,GAAQjb,EAAUiZ,OAAS,GAAMjZ,EAAUiZ,QAE9CiC,EAAUH,IACfE,GAAQA,GAAQjb,EAAUiZ,OAAS,IAAM8B,EAAYG,IAAYlb,EAAUiZ,OAC3E+B,EAAQA,GAAQhb,EAAUiZ,OAAS,GAAMjZ,EAAUiZ,QAEvD8B,EAAYG,EACZX,EAAiBzzV,KAAKxE,KAAKk2V,aAAaO,EAAUlzU,GAAGxW,EAAG,IAAO,KAAO,EAAI2rV,EAAOC,GAAQlC,EAAUlzU,GAAImzU,EAAcuB,EAAiBx7V,UAG9IuD,KAAKs2V,eAAe2B,EAAkBva,EAAWA,EAAU/D,aAAa,IACpE+D,EAAU0a,YACVp4V,KAAKs2V,eAAe0B,EAAiBta,EAAWA,EAAU/D,aAAa,IACvE35U,KAAKs2V,eAAegC,EAAiB5a,EAAWA,EAAU/D,aAAa,MAQ/Ewe,EAAa98V,UAAUiX,QAAU,SAAUue,KAQ3CsnU,EAAa98V,UAAUkkC,cAAgB,WAInC,MAAO,gBAEJ44T,GACTrC,IC7GExrQ,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAexCkuQ,GAAqC,SAAU1tQ,GAE/C,SAAS0tQ,IACL,OAAkB,OAAX1tQ,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAkJ/D,OApJAsqF,GAAUuuQ,EAAqB1tQ,GAQ/B0tQ,EAAoBx9V,UAAUujV,qBAAuB,SAAUlB,EAAW7sT,GACtEs6D,EAAO9vF,UAAUujV,qBAAqBt9U,KAAKtB,KAAM09U,EAAW7sT,GAC5D,IAAIioU,EAAa,IAAI3pB,GAAOuO,EAAW,mBAAoB,GAE3D,GADA19U,KAAKg2V,oBAAoB8C,EAAYpb,EAAW,aAAcA,EAAUob,WAAWtiU,MAAOknT,EAAUob,WAAW9iV,MAAO6a,GAClH6sT,EAAU0a,UAAW,CACrB,IAAIF,EAAc,IAAI/oB,GAAOuO,EAAW,mBAAoB,GAC5D19U,KAAKg2V,oBAAoBkC,EAAaxa,EAAW,YAAaA,EAAUqa,UAAUvhU,MAAOknT,EAAUqa,UAAU/hV,MAAO6a,GACpH,IAAIkoU,EAAc,IAAI5pB,GAAOuO,EAAW,mBAAoB,GAC5D19U,KAAKg2V,oBAAoB+C,EAAarb,EAAW,YAAaA,EAAU2a,UAAU7hU,MAAOknT,EAAU2a,UAAUriV,MAAO6a,KAO5HgoU,EAAoBx9V,UAAUqzU,eAAiB,SAAUgP,EAAW7sT,GAChE,IAAIonU,KACAD,KACAM,KACAU,KACAz8V,KAIAk6V,GAHe/Y,EAAU2Z,aAGb3Z,EAAU/lT,QAC1B,GAAI8+T,EAAUh6V,QAAUg6V,EAAUh6V,QAAUihV,EAAUiZ,OAAQ,CAC1D,GAAIjZ,EAAU0a,UACV,IAAK,IAAIj8V,EAAI,EAAGA,EAAIs6V,EAAUh6V,OAAQN,IAClC67V,EAAgBxzV,KAAKxE,KAAKk2V,aAAaO,EAAUt6V,GAAG4Q,EAAG2wU,EAAU6a,WAAY9B,EAAUt6V,GAAIuhV,EAAU/D,aAAa,GAAIqe,EAAgBv7V,SACtI67V,EAAgB9zV,KAAKxE,KAAKk2V,aAAaO,EAAUt6V,GAAG4Q,EAAG2wU,EAAU8a,SAAU/B,EAAUt6V,GAAIuhV,EAAU/D,aAAa,GAAI2e,EAAgB77V,SAG5IF,EAASyD,KAAKi5V,gBAAgBvb,EAAUiZ,OAAQjZ,EAAUwb,QAASzC,EAAW/Y,EAAU/D,aAAa,IACrGqf,EAAmBh5V,KAAKm5V,eAAezb,EAAUiZ,OAAQjZ,EAAUwb,QAAS38V,EAAQmhV,EAAU/D,aAAa,IAC3Gse,EAAmBj4V,KAAKm5V,eAAezb,EAAUiZ,OAASjZ,EAAUwb,QAAU,EAAGxb,EAAU0b,QAAS78V,EAAQmhV,EAAU/D,aAAa,IAEvI35U,KAAKs2V,eAAe2B,EAAkBva,EAAWA,EAAU/D,aAAa,IACxE35U,KAAKs2V,eAAe0C,EAAkBtb,EAAWA,EAAU/D,aAAa,IACpE+D,EAAU0a,YACVp4V,KAAKs2V,eAAe0B,EAAiBta,EAAWA,EAAU/D,aAAa,IACvE35U,KAAKs2V,eAAegC,EAAiB5a,EAAWA,EAAU/D,aAAa,MAO/Ekf,EAAoBx9V,UAAU89V,eAAiB,SAAUxC,EAAQuC,EAAS18V,EAAM66V,GAC5E,IAAIgC,KACJ,GAAI78V,EAAKC,QAAUk6V,EAASuC,EAAS,CAIjC,IAAK,IAHDp6U,EAAQ63U,GAAUuC,EAAU,GAC5BnrU,KACAgF,KACK52B,EAAI,EAAGA,EAAIK,EAAKC,OAAQN,IAAK,CAClC,IAAIa,EAAQs6B,OAAO96B,EAAKL,GAAG6Q,GAC3B+gB,EAAKvpB,KAAKxH,GAGd,IADA,IAAIy9B,EAAW1M,EAAKtxB,OACbg+B,GAAY3b,GAAO,CAEjB,IADDgU,EAAM,EACV,IAAS32B,EAAIw6V,EAAS,EAAGx6V,EAAKw6V,EAASuC,EAAU,EAAI/8V,IACjD22B,GAAY/E,EAAK5xB,GAErB22B,GAAYomU,EACZnmU,EAAOvuB,KAAKsuB,EAAI9T,QAAQ,IACxB+O,EAAK1F,OAAO,EAAG,GACfoS,EAAW1M,EAAKtxB,OAGf,IADDoF,EAAMid,EAAQ,EAClB,IAAS3iB,EAAI,EAAGA,EAAIK,EAAKC,OAAQN,IACvBA,EAAI0F,IACNw3V,EAAgB70V,KAAKxE,KAAKk2V,aAAa15V,EAAKL,GAAG4Q,EAAGuqB,OAAOvE,EAAO52B,EAAI0F,IAAOrF,EAAKL,GAAIk7V,EAAcgC,EAAgB58V,SAClHD,EAAKL,GAAG6Q,EAAIsqB,OAAQvE,EAAO52B,EAAI0F,KAI3C,OAAOw3V,GAMXR,EAAoBx9V,UAAU49V,gBAAkB,SAAUtC,EAAQuC,EAAS18V,EAAMoiB,GAK7E,IAAK,IAJD06U,KACAC,KACAC,KACAC,KACKl2U,EAAI,EAAGA,EAAI/mB,EAAKC,OAAQ8mB,IAC7B+1U,EAAU/1U,GAAK/mB,EAAK+mB,GAAGmY,IACvB69T,EAAWh2U,GAAK/mB,EAAK+mB,GAAGkY,KACxB+9T,EAAYj2U,GAAK/mB,EAAK+mB,GAAGthB,MAE7B,GAAIzF,EAAKC,OAASk6V,EAAQ,CAItB,IAAK,IAFD+C,KACAC,KACKx9V,EAAI,EAAGA,EAAIw6V,EAAS,IAAKx6V,EAC9Bw9V,EAAKn1V,KAAK,GACVk1V,EAAKl1V,KAAK,GACVi1V,EAAej1V,KAAKxE,KAAKk2V,aAAa15V,EAAKL,GAAG4Q,EAAGvQ,EAAKL,GAAG8F,MAAOzF,EAAKL,GAAIyiB,EAAQ66U,EAAeh9V,SAEpG,IAASN,EAAIw6V,EAAS,EAAGx6V,EAAIK,EAAKC,SAAUN,EAAG,CAGtC,IAFD4jB,EAAMuX,OAAOC,UACbjrB,EAAMgrB,OAAOsiU,UACjB,IAASr2U,EAAI,EAAGA,EAAIozU,IAAUpzU,EAC1BxD,EAAM1T,KAAK0T,IAAIA,EAAKu5U,EAAUn9V,EAAIonB,IAClCjX,EAAMD,KAAKC,IAAIA,EAAKitV,EAAWp9V,EAAIonB,IAEvCo2U,EAAKn1V,KAAK8H,GACVotV,EAAKl1V,KAAKub,GAEd,IAAS5jB,EAAIw6V,EAAS,EAAGx6V,EAAIK,EAAKC,SAAUN,EAAG,CAC3C,IAAI0kD,EAAQ,EACRl0C,EAAS,EACbk0C,GAAS24S,EAAYr9V,GAAKu9V,EAAKv9V,GAC/BwQ,GAAUgtV,EAAKx9V,GAAKu9V,EAAKv9V,GACzBs9V,EAAej1V,KAAKxE,KAAKk2V,aAAa15V,EAAKL,GAAG4Q,EAAI8zC,EAAQl0C,EAAU,IAAKnQ,EAAKL,GAAIyiB,EAAQ66U,EAAeh9V,UAGjH,OAAOg9V,GAOXZ,EAAoBx9V,UAAUiX,QAAU,SAAUue,KAQlDgoU,EAAoBx9V,UAAUkkC,cAAgB,WAI1C,MAAO,uBAEJs5T,GACT/C,ICrKExrQ,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAexCkvQ,GAAgC,SAAU1uQ,GAE1C,SAAS0uQ,IACL,OAAkB,OAAX1uQ,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAmI/D,OArIAsqF,GAAUuvQ,EAAgB1uQ,GAO1B0uQ,EAAex+V,UAAUujV,qBAAuB,SAAUlB,EAAW7sT,GACjE6sT,EAAU/D,gBACV,IAAImgB,EAAY,IAAI3qB,GAAOuO,EAAW,mBAAoB,GAC1Doc,EAAUpzV,KAAO,YACW,gBAAxBg3U,EAAUqc,WAAuD,SAAxBrc,EAAUqc,WACnD/5V,KAAKg2V,oBAAoB8D,EAAWpc,EAAW,gBAAiBA,EAAUqc,UAAW,EAAGlpU,GAE5F,IAAIklU,EAAa,IAAI5mB,GAAOuO,EAAW,mBAAoB,GAC3D19U,KAAKg2V,oBAAoBD,EAAYrY,EAAW,aAAcA,EAAU9/S,KAAM8/S,EAAU1nU,MAAO6a,GAC/F,IAAIknU,EAAY,IAAI5oB,GAAOuO,EAAW,mBAAoB,GAC1D19U,KAAKg2V,oBAAoB+B,EAAWra,EAAW,YAAaA,EAAUqa,UAAUvhU,MAAOknT,EAAUqa,UAAU/hV,MAAO6a,GAClH,IAAIwnU,EAAY,IAAIlpB,GAAOuO,EAAW,mBAAoB,GAC1D19U,KAAKg2V,oBAAoBqC,EAAW3a,EAAW,YAAaA,EAAU2a,UAAU7hU,MAAOknT,EAAU2a,UAAUriV,MAAO6a,IAMtHgpU,EAAex+V,UAAUqzU,eAAiB,SAAUgP,EAAW7sT,GAC3D,IAAImpU,EAAqC,gBAAxBtc,EAAUqc,WAAuD,SAAxBrc,EAAUqc,UAChEx8V,EAAQy8V,EAAa,EAAI,EACzB/B,KACAD,KACAM,KACA2B,KACA/B,EAAcxa,EAAU/D,aAAap8U,EAAQ,GAC7Cw7V,EAAcrb,EAAU/D,aAAap8U,EAAQ,GAC7Cm5V,EAAehZ,EAAU/D,aAAap8U,GACtC28V,EAAkBF,EAAatc,EAAU/D,aAAa,GAAK,KAE3D8c,EAAY/Y,EAAU/lT,OAC1B,GAAI8+T,EAAUh6V,QAAUg6V,EAAUh6V,QAAUihV,EAAUiZ,OAAQ,CAS1D,IAAK,IARD7jU,EAAM,EACNqnU,EAAe,EACfC,EAAa1c,EAAU2c,kBACvB/8H,EAAQm5H,EAAUh6V,OAClBg+B,EAAWpuB,KAAKoxB,MAAMigT,EAAUiZ,QAChCH,KACA8D,KACAC,KACK/yU,EAAM,EAAGA,EAAMiT,EAAUjT,IAC9BsL,GAAOwE,OAAOm/T,EAAUjvU,GAAKvlB,OAGjC,IAAK,IADDu4V,EAAM1nU,EAAM4qT,EAAUiZ,OACjBp4D,EAAM,EAAGA,EAAMjhE,EAAOihE,IAAO,CAClC,IAAIvxR,EAAIsqB,OAAOm/T,EAAUl4D,GAAKt8R,OAC9B,GAAIs8R,GAAO9jQ,EAAW,GAAK8jQ,EAAMjhE,EAAO,CACpC,GAAIihE,EAAMm/C,EAAUiZ,QAAU,EAAG,CAG7B6D,GADA1nU,GADW9lB,EAAIsqB,OAAOm/T,EAAUl4D,EAAM9jQ,GAAUx4B,QAEnCy7U,EAAgB,OAC7B8Y,EAAUj4D,GAAOi8D,EACjBF,EAAW/7D,GAAOlyR,KAAK87D,IAAIn7D,EAAIwtV,EAAK,GACpCL,GAAgBG,EAAW/7D,GAAO+7D,EAAW/7D,EAAM9jQ,QAGnD+7T,EAAUj4D,GAAOi8D,EACjBF,EAAW/7D,GAAOlyR,KAAK87D,IAAIn7D,EAAIwtV,EAAK,GACpCL,GAAgBG,EAAW/7D,GAE/B,IAAIxsQ,EAAQ1lB,KAAKQ,KAAKstV,EAAgBzc,EAAgB,QAClD+c,EAAYjE,EAAUj4D,GAAQ67D,EAAaroU,EAC3C2oU,EAAYlE,EAAUj4D,GAAQ67D,EAAaroU,EAC/C,GAAIwsQ,EAAM,IAAM9jQ,EACZ,IAAK,IAAIkgU,EAAM,EAAGA,EAAMlgU,EAAW,EAAGkgU,IAClCJ,EAAgBI,IACZvkV,EAAKqgV,EAAUkE,GAAK5tV,EAAG6tV,GAAMpE,EAAUj4D,GACvCs8D,GAAMJ,EAAW5sS,GAAM6sS,EAAWljU,SAAS,GAIvD+iU,EAAgBh8D,IACZnoR,EAAKqgV,EAAUl4D,GAAKxxR,EAAG6tV,GAAMpE,EAAUj4D,GACvCs8D,GAAMJ,EAAW5sS,GAAM6sS,EAAWljU,SAAS,QAI3C+mQ,EAAMm/C,EAAUiZ,OAAS,IACzBH,EAAUj4D,GAAOi8D,EACjBF,EAAW/7D,GAAOlyR,KAAK87D,IAAIn7D,EAAIwtV,EAAK,GACpCL,GAAgBG,EAAW/7D,IAMvC,IAAK,IAFDpiS,GAAK,EACLonB,GAAK,EACA4C,EAAI,EAAGA,EAAIm3M,EAAOn3M,IACvB,GAAIA,GAAMsU,EAAW,EAAI,CAIrBu9T,EAAgBxzV,KAAKxE,KAAKk2V,aAAaO,EAAUtwU,GAAGpZ,EAAGwtV,EAAgBp0U,GAAK,GAAGswU,EAAUtwU,GAAI+xU,EAAaF,EAAgBv7V,SAC1H67V,EAAgB9zV,KAAKxE,KAAKk2V,aAAaO,EAAUtwU,GAAGpZ,EAAGwtV,EAAgBp0U,GAAK,GAAGswU,EAAUtwU,GAAI4yU,EAAaT,EAAgB77V,SAC1Hw7V,EAAiBzzV,KAAKxE,KAAKk2V,aAAaO,EAAUtwU,GAAGpZ,EAAGwtV,EAAgBp0U,GAAK,GAAGswU,EAAUtwU,GAAIuwU,EAAcuB,EAAiBx7V,SACzHu9V,GACAC,EAAez1V,KAAKxE,KAAKq2V,cAAcI,EAAUtwU,GAAGpZ,EAAGirV,IAAkB77V,GAAG6Q,EAAGsrV,IAAkB/0U,GAAGvW,EAAGypV,EAAUtwU,GAAI+zU,EAAiBD,EAAex9V,UAKjKu9V,GACAh6V,KAAKs2V,eAAe2D,EAAgBvc,EAAWA,EAAU/D,aAAa,IAE1E35U,KAAKs2V,eAAe2B,EAAkBva,EAAWA,EAAU/D,aAAap8U,IACxEyC,KAAKs2V,eAAe0B,EAAiBta,EAAWA,EAAU/D,aAAap8U,EAAQ,IAC/EyC,KAAKs2V,eAAegC,EAAiB5a,EAAWA,EAAU/D,aAAap8U,EAAQ,KAOnFs8V,EAAex+V,UAAUiX,QAAU,SAAUue,KAQ7CgpU,EAAex+V,UAAUkkC,cAAgB,WAIrC,MAAO,2BAEJs6T,GACT/D,ICtJExrQ,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAexCmwQ,GAA+B,SAAU3vQ,GAEzC,SAAS2vQ,IACL,OAAkB,OAAX3vQ,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KA2J/D,OA7JAsqF,GAAUwwQ,EAAe3vQ,GAQzB2vQ,EAAcz/V,UAAUujV,qBAAuB,SAAUlB,EAAW7sT,GAEhE,GADAs6D,EAAO9vF,UAAUujV,qBAAqBt9U,KAAKtB,KAAM09U,EAAW7sT,GACjC,SAAvB6sT,EAAUqd,UAA8C,SAAvBrd,EAAUqd,SAAqB,CAChE,IAAIC,EAAa,IAAI7rB,GAAOuO,EAAW,mBAAoB,GAC3D19U,KAAKg2V,oBAAoBgF,EAAYtd,EAAW,WAAYA,EAAUud,SAASzkU,MAAOknT,EAAUud,SAASjlV,MAAO6a,GAEpH,GAA2B,cAAvB6sT,EAAUqd,UAAmD,SAAvBrd,EAAUqd,SAAqB,CACrE,IAAIG,EAAkB,IAAI/rB,GAAOuO,EAAW,mBAAoB,GAChEwd,EAAgBx0V,KAAO,SACvB1G,KAAKg2V,oBAAoBkF,EAAiBxd,EAAW,YAAaA,EAAUyY,kBAAmBzY,EAAU1nU,MAAO6a,KAOxHiqU,EAAcz/V,UAAUqzU,eAAiB,SAAUgP,EAAW7sT,GAC1D,IASIqqU,EACAC,EAVAlD,KACAmD,EAAa1d,EAAU0d,WACvBC,EAAa3d,EAAU2d,WACvB70U,EAAUk3T,EAAUiZ,OACpBl6V,EAAS2+V,EAAa50U,EACtB80U,KACAC,KACA9E,EAAY/Y,EAAU/lT,OACtB++T,EAAehZ,EAAU/D,aAAa,GAY1C,GAT2B,cAAvB+D,EAAUqd,SACVG,EAAkBxd,EAAU/D,aAAa,IAGzCwhB,EAAiBzd,EAAU/D,aAAa,GACb,SAAvB+D,EAAUqd,WACVG,EAAkBxd,EAAU/D,aAAa,KAG7C8c,GAAah6V,EAASg6V,EAAUh6V,QAAU4+V,GAAcD,GACxDC,EAAa,GAAM5+V,EAAS,GAAM,EAAG,CACrC,IAAI++V,EAAWx7V,KAAKy7V,mBAAmBJ,EAAY5E,EAAW,SAC1DiF,EAAU17V,KAAKy7V,mBAAmBL,EAAY3E,EAAW,SACzDkF,EAAa37V,KAAK47V,aAAale,EAAW8d,EAAUE,GACxDJ,EAAiBt7V,KAAK67V,cAAcne,EAAWie,EAAYlF,EAAW0E,GAAkBzE,GACxF,IAAIoF,EAAY97V,KAAKy7V,mBAAmBj1U,EAAS80U,EAAgB,KACjErD,EAAmBj4V,KAAK+7V,gBAAgBre,EAAWoe,EAAWrF,EAAWC,GACrEwE,IACAK,EAAsBv7V,KAAKg8V,mBAAmBte,EAAWie,EAAYG,EAAWrF,EAAWyE,IAGnGl7V,KAAKs2V,eAAe2B,EAAkBva,EAAWA,EAAU/D,aAAa,IACpEuhB,GACAl7V,KAAKs2V,eAAeiF,EAAqB7d,EAAWwd,GAEpDC,GACAn7V,KAAKs2V,eAAegF,EAAgB5d,EAAWyd,IAMvDL,EAAcz/V,UAAUogW,mBAAqB,SAAU9E,EAAQF,EAAW1qU,GAKtE,IAAK,IAJD+G,EAAM,EACNmpU,EAAa,EACbC,KACAC,EAAc,GAAKxF,EAAS,GACvBx6V,EAAI,EAAGA,EAAIw6V,EAAQx6V,IACxB22B,GAAOwE,OAAOm/T,EAAUt6V,GAAG4vB,IAE/BkwU,EAAcnpU,EAAM6jU,EACpBuF,EAAU13V,KAAKy3V,GAEf,IAAK,IADDG,EAASH,EACJ14U,EAAIozU,EAAQpzU,EAAIkzU,EAAUh6V,OAAQ8mB,IACvC64U,GAAU9kU,OAAOm/T,EAAUlzU,GAAGwI,IAAUqwU,GAAUD,EAAaC,EAC/DF,EAAU13V,KAAK43V,GAEnB,OAAOF,GAKXpB,EAAcz/V,UAAUwgW,cAAgB,SAAUne,EAAW2e,EAAY5F,EAAW73U,GAIhF,IAHA,IAAI08U,KACAgB,EAAgB5e,EAAU0d,WAAa,EACvCmB,EAAY,EACTD,EAAgB7F,EAAUh6V,QAC7B6+V,EAAe92V,KAAKxE,KAAKk2V,aAAaO,EAAU6F,GAAevvV,EAAGsvV,EAAWE,GAAY9F,EAAU6F,GAAgB19U,EAAQ08U,EAAe7+V,SAC1I6/V,IACAC,IAEJ,OAAOjB,GAKXR,EAAcz/V,UAAU0gW,gBAAkB,SAAUre,EAAW8e,EAAW/F,EAAW73U,GAIjF,IAHA,IAAI69U,EAAkB/e,EAAU0d,WAAa1d,EAAUiZ,OAAS,EAC5D+F,EAAc,EACdzE,KACGwE,EAAkBhG,EAAUh6V,QAC/Bw7V,EAAiBzzV,KAAKxE,KAAKk2V,aAAaO,EAAUgG,GAAiB1vV,EAAGyvV,EAAUE,GAAcjG,EAAUgG,GAAkB79U,EAAQq5U,EAAiBx7V,SACnJggW,IACAC,IAEJ,OAAOzE,GAKX6C,EAAcz/V,UAAUugW,aAAe,SAAUle,EAAWif,EAAUC,GAGlE,IAAK,IAFDP,KACA5+Q,EAAOigQ,EAAU0d,WAAa1d,EAAU2d,WACnCl/V,EAAI,EAAGA,EAAIygW,EAAQngW,OAAQN,IAChCkgW,EAAW73V,KAAMm4V,EAASxgW,EAAIshF,GAAQm/Q,EAAQzgW,IAElD,OAAOkgW,GAKXvB,EAAcz/V,UAAU2gW,mBAAqB,SAAUte,EAAW2e,EAAYG,EAAW/F,EAAW73U,GAIhG,IAHA,IAAIi+U,EAAqBnf,EAAU0d,WAAa1d,EAAUiZ,OAAS,EAC/DmG,EAAiB,EACjBvB,KACGsB,EAAqBpG,EAAUh6V,QAClC8+V,EAAoB/2V,KAAKxE,KAAKk2V,aAAaO,EAAUoG,GAAoB9vV,EAAGsvV,EAAWS,GAAkBpf,EAAUiZ,OAAS,IAAM6F,EAAUM,GAAiBrG,EAAUoG,GAAqBj+U,EAAQ28U,EAAoB9+V,OAAQihV,IAChOmf,IACAC,IAEJ,OAAOvB,GAOXT,EAAcz/V,UAAUiX,QAAU,SAAUue,KAQ5CiqU,EAAcz/V,UAAUkkC,cAAgB,WAIpC,MAAO,iBAEJu7T,GACThF,ICzKEiH,GAA4B,WAC5B,SAASA,KAglBT,OA1kBAA,EAAW1hW,UAAUujV,qBAAuB,SAAUyF,EAAWxzT,GAC7D,IAAImsU,EAAkB,IAAI7tB,GAAOkV,EAAW,mBAAoB,GACzC,WAAnBA,EAAU39U,MAAwC,kBAAnB29U,EAAU39U,KACzCs2V,EAAgBt2V,KAAO,OAGvBs2V,EAAgBt2V,KAAO,SAE3B1G,KAAKg2V,oBAAoBgH,EAAiB3Y,EAAWA,EAAU39U,KAAM29U,EAAUzmT,KAAMymT,EAAUruU,MAAO6a,IAK1GksU,EAAW1hW,UAAU26V,oBAAsB,SAAUp3U,EAAQylU,EAAW5sT,EAAMmG,EAAM5nB,EAAO6a,GACvFjS,EAAO6Y,KAAO4sT,EAAU5sT,KACxB7Y,EAAOswT,MAAQ,IACftwT,EAAOuU,MAAQ,IACfvU,EAAOgf,KAAOA,GAAQ,OACtBhf,EAAO5I,MAAQA,EACf4I,EAAOu0T,gBAAkBkR,EAAUlR,gBACnCv0T,EAAO+Y,UACP/Y,EAAOi2T,cAAgBwP,EAAUxP,cACjCj2T,EAAO3M,MAAQoyU,EAAUpyU,MACzB2M,EAAO+/T,YAAc0F,EAAU1F,YAC/B//T,EAAOypD,SAAWzpD,EAAOgf,KACzBhf,EAAO+3B,UAAY0tS,EAAU1tS,UAC7B/3B,EAAOg6T,YAAc,iBACrBh6T,EAAOkuT,OAASuX,EAAUvX,OAC1BluT,EAAOw7K,SAAW,YAClBx7K,EAAOiS,MAAQA,EACfjS,EAAOkZ,KAAO8yC,EAAAA,EACdhsD,EAAOs+O,MAAQtyL,EAAAA,EACfhsD,EAAOq+O,KAAOryL,EAAAA,EACdhsD,EAAOu+O,MAAQvyL,EAAAA,EACfhsD,EAAOovT,SACPpvT,EAAOsxT,SACPmU,EAAU1K,aAAe/6T,GAK7Bm+U,EAAW1hW,UAAU4hW,wBAA0B,SAAUpsU,EAAOwzT,EAAWpyU,EAAOjR,EAASmyU,GACvFkR,EAAU6Y,iBAAmBl8V,EAC7BqjV,EAAU1K,aAAaxG,gBAAkBA,EACzCkR,EAAU1K,aAAatG,cAAgBryU,EACvC6vB,EAAMwsT,kBAAkB17U,YAAY0iV,EAAU6Y,mBAKlDH,EAAW1hW,UAAU66V,aAAe,SAAUnpV,EAAGC,EAAG+pC,EAAan4B,EAAQ3M,GACrE,IAAIkrV,EAAa,IAAI9uB,GAarB,OAZA8uB,EAAWpwV,EAAIA,EACfowV,EAAWnwV,EAAIA,EACfmwV,EAAW3uU,OAAS8I,OAAOvqB,GAC3BowV,EAAW3mU,MAAQ5X,EAAOgf,KAC1Bu/T,EAAWlrV,MAAQA,EACnBkrV,EAAW1uU,OAAS6I,OAAOtqB,GAC3BmwV,EAAW3lU,SAAU,EACrB5Y,EAAOkZ,KAAOzrB,KAAK0T,IAAInB,EAAOkZ,KAAMqlU,EAAW3uU,QAC/C5P,EAAOq+O,KAAO5wP,KAAK0T,IAAInB,EAAOq+O,KAAMkgG,EAAW1uU,QAC/C7P,EAAOs+O,KAAO7wP,KAAKC,IAAIsS,EAAOs+O,KAAMigG,EAAW3uU,QAC/C5P,EAAOu+O,KAAO9wP,KAAKC,IAAIsS,EAAOu+O,KAAMggG,EAAW1uU,QAC/C7P,EAAOovT,MAAMxpU,KAAK24V,EAAW3uU,QACtB2uU,GAKXJ,EAAW1hW,UAAU+hW,mBAAqB,SAAUjmU,EAASi5S,EAASiU,EAAW1sT,GAS7E,IARA,IAAI0lU,EAAO,EACPC,EAAO,EACPC,EAAQ,EACRC,EAAQ,EACRC,EAAQ,EACRxrV,EAAQ,EACRsgE,EAAQ,EACRG,EAAY,EACTzgE,EAAQ0lB,EAAOl7B,QAClB4gW,GAAQlmU,EAAQllB,GAChBqrV,GAAQltB,EAAQn+T,GAChBsrV,GAASpmU,EAAQllB,GAASm+T,EAAQn+T,GAClCurV,GAASrmU,EAAQllB,GAASklB,EAAQllB,GAClCwrV,GAASrtB,EAAQn+T,GAASm+T,EAAQn+T,GAClCA,IAEJ,IAAIvL,EAAO29U,EAAU39U,KACrB,IAAI29U,EAAU3xQ,WAAuB,WAAThsE,GAA8B,gBAATA,EAY7C6rE,GAAU56C,EAAOl7B,OAAS8gW,EAAUF,EAAOC,IAAW3lU,EAAOl7B,OAAS+gW,EAAUH,EAAOA,GAEnF3qR,EADS,gBAAThsE,GAAmC,UAATA,EACd2F,KAAKqD,KAAK4tV,EAAQ/qR,EAAQ8qR,GAAS1lU,EAAOl7B,SAGzC6gW,EAAQ/qR,EAAQ8qR,GAAS1lU,EAAOl7B,YAfjD,OADAi2E,EAAY2xQ,EAAU3xQ,UACdhsE,GACJ,IAAK,SACD6rE,GAAS,EAAW8xQ,EAAU3xQ,UAAY2qR,GAASG,EACnD,MACJ,IAAK,cACDjrR,GAAS,EAAWlmE,KAAKolB,IAAIplB,KAAKE,IAAI83U,EAAU3xQ,YAAc2qR,GAASG,EAanF,OAASjrR,MAAOA,EAAOG,UAAWA,IAKtCqqR,EAAW1hW,UAAUqzU,eAAiB,SAAU2V,EAAWxzT,GACvD,IAAI8G,EAAS0sT,EAAU1sT,OACvB,GAAIA,GAAUA,EAAOl7B,OAAQ,CAEzB,IAAIihW,EAAkBrZ,EAAU1K,aAChC,OAAQ0K,EAAU39U,MACd,IAAK,SACD1G,KAAK29V,eAAehmU,EAAQ0sT,EAAWqZ,GACvC,MACJ,IAAK,cACD19V,KAAK49V,oBAAoBjmU,EAAQ0sT,EAAWqZ,GAC5C,MACJ,IAAK,gBACD19V,KAAK69V,sBAAsBlmU,EAAQ0sT,EAAWqZ,GAC9C,MACJ,IAAK,aACD19V,KAAK89V,mBAAmBnmU,EAAQ0sT,EAAWqZ,GAC3C,MACJ,IAAK,QACD19V,KAAK+9V,cAAcpmU,EAAQ0sT,EAAWqZ,GACtC,MACJ,IAAK,cACD19V,KAAKg+V,oBAAoBrmU,EAAQ0sT,EAAWqZ,GAG7B,WAAnBrZ,EAAU39U,MAAwC,kBAAnB29U,EAAU39U,MACzCg3V,EAAgB7sU,MAAMotU,mBAAmBpuB,gBAAgB6tB,KAOrEX,EAAW1hW,UAAUuiW,oBAAsB,SAAUjmU,EAAQ0sT,EAAWzlU,GAKpE,IAJA,IAGIs/U,EAHA1vU,KACAC,KACAxc,EAAQ,EAELA,EAAQ0lB,EAAOl7B,QAAQ,CAC1B,IAAIq3B,EAAQ6D,EAAO1lB,GACnBuc,EAAOhqB,KAAKsvB,EAAMtF,QAClBC,EAAOjqB,KAAK6H,KAAKolB,IAAIqC,EAAMrF,SAC3Bxc,IAEJisV,EAAiBl+V,KAAKo9V,mBAAmB5uU,EAAQC,EAAQ41T,EAAW1sT,GACpE/Y,EAAO+Y,OAAS33B,KAAKm+V,qBAAqB9Z,EAAW1sT,EAAQnJ,EAAQC,EAAQ7P,EAAQs/U,IAKzFnB,EAAW1hW,UAAU2iW,oBAAsB,SAAUrmU,EAAQ0sT,EAAWzlU,GAMpE,IALA,IAGIs/U,EAHAE,KACAC,KACAC,KAEArsV,EAAQ,EACLA,EAAQ0lB,EAAOl7B,QAAQ,CAC1B,IAAIq3B,EAAQ6D,EAAO1lB,GACnBqsV,EAAW95V,KAAKsvB,EAAMtF,QACtB4vU,EAAU55V,KAAK6H,KAAKolB,IAAIqC,EAAMtF,SAC9B6vU,EAAU75V,KAAKsvB,EAAMrF,QACrBxc,IAEJisV,EAAiBl+V,KAAKo9V,mBAAmBgB,EAAWC,EAAWha,EAAW1sT,GAC1E/Y,EAAO+Y,OAAS33B,KAAKu+V,qBAAqBla,EAAW1sT,EAAQ2mU,EAAYD,EAAWz/U,EAAQs/U,IAKhGnB,EAAW1hW,UAAUyiW,mBAAqB,SAAUnmU,EAAQ0sT,EAAWzlU,GAInE,IAHA,IAAI4/U,KACAC,KACAxsV,EAAQ,EACLA,EAAQ0lB,EAAOl7B,QAAQ,CAC1B,IAAIq3B,EAAQ6D,EAAO1lB,GACnBusV,EAAYh6V,KAAKsvB,EAAMtF,QACvBiwU,EAAYj6V,KAAKsvB,EAAMrF,QACvBxc,IAEJ2M,EAAO+Y,OAAS33B,KAAK0+V,oBAAoBra,EAAW1sT,EAAQ6mU,EAAaC,EAAa7/U,IAK1Fm+U,EAAW1hW,UAAU0iW,cAAgB,SAAUpmU,EAAQ0sT,EAAWzlU,GAM9D,IALA,IAGIs/U,EAHA/mU,KACAi5S,KACAuuB,KAEA1sV,EAAQ,EACLA,EAAQ0lB,EAAOl7B,QAAQ,CAC1B,IAAIq3B,EAAQ6D,EAAO1lB,GACnB0sV,EAAYn6V,KAAKsvB,EAAMtF,QACvB2I,EAAQ3yB,KAAK6H,KAAKolB,IAAIqC,EAAMtF,SAC5B4hT,EAAQ5rU,KAAK6H,KAAKolB,IAAIqC,EAAMrF,SAC5Bxc,IAEJisV,EAAiBl+V,KAAKo9V,mBAAmBjmU,EAASi5S,EAASiU,EAAW1sT,GACtE/Y,EAAO+Y,OAAS33B,KAAK4+V,eAAeva,EAAW1sT,EAAQgnU,EAAavuB,EAASxxT,EAAQs/U,IAKzFnB,EAAW1hW,UAAUsiW,eAAiB,SAAUhmU,EAAQ0sT,EAAWzlU,GAK/D,IAJA,IAEIs/U,EAFA/mU,KACAi5S,KAEAn+T,EAAQ,EACLA,EAAQ0lB,EAAOl7B,QAAQ,CAC1B,IAAIq3B,EAAQ6D,EAAO1lB,GACnBklB,EAAQ3yB,KAAKsvB,EAAMtF,QACnB4hT,EAAQ5rU,KAAKsvB,EAAMrF,QACnBxc,IAEJisV,EAAiBl+V,KAAKo9V,mBAAmBjmU,EAASi5S,EAASiU,EAAW1sT,GACtE/Y,EAAO+Y,OAAS33B,KAAK6+V,gBAAgBxa,EAAW1sT,EAAQR,EAASi5S,EAASxxT,EAAQs/U,IAKtFnB,EAAW1hW,UAAUwiW,sBAAwB,SAAUlmU,EAAQ0sT,EAAWzlU,GAKtE,IAJA,IAAIuY,KACAi5S,KACA0uB,KACA7sV,EAAQ,EACLA,EAAQ0lB,EAAOl7B,QAAQ,CAC1B,IAAIq3B,EAAQ6D,EAAO1lB,GACnB6sV,EAAWt6V,KAAKsvB,EAAMtF,QACtB2I,EAAQ3yB,KAAKyN,EAAQ,GACrBm+T,EAAQ5rU,KAAKsvB,EAAMrF,QACnBxc,IAEJ2M,EAAO+Y,OAAS33B,KAAK++V,uBAAuB1a,EAAW1sT,EAAQmnU,EAAY1uB,EAASxxT,IAKxFm+U,EAAW1hW,UAAUkjW,qBAAuB,SAAUla,EAAW1sT,EAAQR,EAASi5S,EAASxxT,EAAQogV,GAC/F,IAAIC,EAAW5yV,KAAKoxB,MAAO9F,EAAOl7B,OAAS,GACvCszC,KACAmvT,EAAQ/nU,EAAQ,GAAKktT,EAAU8a,iBAC/BC,EAAQJ,EAAkBtsR,UAAassR,EAAkBzsR,MAAQlmE,KAAKolB,IAAIytU,GAC1EG,EAAQloU,EAAQ8nU,EAAW,GAC3BK,EAAQN,EAAkBtsR,UAAassR,EAAkBzsR,MAAQlmE,KAAKolB,IAAI4tU,GAC1EE,EAAQpoU,EAAQA,EAAQ16B,OAAS,GAAK4nV,EAAUmb,gBAChDC,EAAQT,EAAkBtsR,UAAassR,EAAkBzsR,MAAQlmE,KAAKolB,IAAI8tU,GAI9E,OAHAxvT,EAAIvrC,KAAKxE,KAAKk2V,aAAagJ,EAAOE,EAAOznU,EAAO,GAAI/Y,EAAQmxB,EAAItzC,SAChEszC,EAAIvrC,KAAKxE,KAAKk2V,aAAamJ,EAAOC,EAAO3nU,EAAOsnU,EAAW,GAAIrgV,EAAQmxB,EAAItzC,SAC3EszC,EAAIvrC,KAAKxE,KAAKk2V,aAAaqJ,EAAOE,EAAO9nU,EAAOA,EAAOl7B,OAAS,GAAImiB,EAAQmxB,EAAItzC,SACzEszC,GAKXgtT,EAAW1hW,UAAUujW,eAAiB,SAAUva,EAAW1sT,EAAQR,EAASi5S,EAASxxT,EAAQ8gV,GACzF,IAAIT,EAAW5yV,KAAKoxB,MAAO9F,EAAOl7B,OAAS,GACvCszC,KACA/U,EAAK7D,EAAQ,GAAKktT,EAAU8a,iBAChCnkU,EAAKA,GAAM,EAAIA,EAAK,EACpB,IAAIC,EAAKykU,EAAoBhtR,UAAYrmE,KAAK87D,IAAIntC,EAAI0kU,EAAoBntR,OACtEr3C,EAAK/D,EAAQ8nU,EAAW,GACxB9jU,EAAKukU,EAAoBhtR,UAAYrmE,KAAK87D,IAAIjtC,EAAIwkU,EAAoBntR,OACtEzvB,EAAK3rB,EAAQA,EAAQ16B,OAAS,GAAK4nV,EAAUmb,gBAC7Cz8S,EAAK28S,EAAoBhtR,UAAYrmE,KAAK87D,IAAIrlB,EAAI48S,EAAoBntR,OAI1E,OAHAxiC,EAAIvrC,KAAKxE,KAAKk2V,aAAal7T,EAAIC,EAAItD,EAAO,GAAI/Y,EAAQmxB,EAAItzC,SAC1DszC,EAAIvrC,KAAKxE,KAAKk2V,aAAah7T,EAAIC,EAAIxD,EAAOsnU,EAAW,GAAIrgV,EAAQmxB,EAAItzC,SACrEszC,EAAIvrC,KAAKxE,KAAKk2V,aAAapzS,EAAIC,EAAIprB,EAAOA,EAAOl7B,OAAS,GAAImiB,EAAQmxB,EAAItzC,SACnEszC,GAKXgtT,EAAW1hW,UAAUqjW,oBAAsB,SAAUra,EAAW1sT,EAAQR,EAASi5S,EAASxxT,GACvEvS,KAAKoxB,MAAO9F,EAAOl7B,OAAS,GAA3C,IAEIkjW,EAAkBhoU,EAAOl7B,QAAU4nV,EAAUsb,gBAAkBhoU,EAAOl7B,OAAS4nV,EAAUsb,gBAC7FA,EAAkBtzV,KAAKC,IAAI,EAAGqzV,GAC9BA,EAAkBtzV,KAAK0T,IAAI,EAAG4/U,GAC9Btb,EAAUsb,gBAAkBA,EAC5Btb,EAAUub,oBACVvb,EAAUub,iBAAiBnjW,OAAS4nV,EAAUsb,gBAAkB,EAEhE,IADA,IAAI1tV,EAAQ,EACLA,EAAQklB,EAAQ16B,QAAQ,CAI3B,IAHA,IAAIisV,EAAOvxT,EAAQllB,GACf02U,EAAOvY,EAAQn+T,GACf4tV,EAAW,EACRA,GAAYxb,EAAUsb,iBACpBtb,EAAUub,iBAAiBC,KAC5Bxb,EAAUub,iBAAiBC,GAAY,GAE3Cxb,EAAUub,iBAAiBC,IAAaxzV,KAAK87D,IAAIugR,EAAMmX,GAAYlX,IACjEkX,EAEN5tV,IAEJ,IAAI6tV,KACJA,EAASrjW,OAAS,EAAI,EAAI4nV,EAAUsb,gBACpC,IAAI/0T,KACJA,EAAOnuC,OAAS4nV,EAAUsb,gBAAkB,EAE5C,IADA,IAAII,EAAW,EACRA,EAAY1b,EAAUsb,gBAAkB,GAC3C/0T,EAAOm1T,MACPn1T,EAAOm1T,GAAUtjW,OAAS,EAC1BsjW,IAGJ,IADA,IAAIC,EAAS,EAENA,EAAS7oU,EAAQ16B,QAAQ,CAI5B,IAHA,IAAI8xB,EAAI4I,EAAQ6oU,GACZ70T,EAAO,EACP80T,EAAU,EACPA,EAAUH,EAASrjW,QACjBqjW,EAASG,KACVH,EAASG,GAAW,GAExBH,EAASG,IAAY90T,EACrBA,GAAQ5c,IAEN0xU,IAEJD,EAGN,IADA,IAAIE,EAAU,EACPA,GAAW7b,EAAUsb,iBAAiB,CAEzC,IADA,IAAIQ,EAAW,EACRA,GAAY9b,EAAUsb,iBACzB/0T,EAAOs1T,GAASC,GAAYL,EAASI,EAAUC,KAC7CA,IAEJD,EAMN,OAJKlgW,KAAKogW,uBAAuBx1T,EAAQy5S,EAAUub,oBAC/Cvb,EAAUub,iBAAmB,MAE3B5/V,KAAKigD,UAAUokS,EAAW1sT,EAAQR,EAASi5S,EAASxxT,IAM9Dm+U,EAAW1hW,UAAU0jW,uBAAyB,SAAU1a,EAAW1sT,EAAQR,EAASi5S,EAASxxT,GACzF,IAAImxB,KACA4mT,EAAStS,EAAUsS,QAAUh/T,EAAOl7B,OAASk7B,EAAOl7B,OAAS,EAAI4nV,EAAUsS,OAC/EA,EAAStqV,KAAKC,IAAI,EAAGqqV,GAMrB,IALA,IACI3pV,EACAD,EACA+R,EACAuhV,EAJApuV,EAAQ,EAKLA,EAAQ0lB,EAAOl7B,OAAS,GAAG,CAC9BuQ,EAAI8R,EAAQuhV,EAAY,EACxB,IAAK,IAAI98U,EAAItR,EAAO6M,EAAQ63U,EAAQpzU,IAChCzE,IACKsxT,EAAQ7sT,IACT88U,IAEJrzV,GAAKojU,EAAQ7sT,IAEjBvW,EAAI2pV,EAAS0J,GAAa,EAAI,KAAOrzV,GAAK2pV,EAAS0J,MACzCr+S,MAAMh1C,KACZD,EAAIoqB,EAAQw/T,EAAS,EAAI1kV,GACzB89B,EAAIvrC,KAAKxE,KAAKk2V,aAAanpV,EAAGC,EAAG2qB,EAAOg/T,EAAS,EAAI1kV,GAAQ2M,EAAQmxB,EAAItzC,UAE7EwV,IAEJ,OAAO89B,GAKXgtT,EAAW1hW,UAAUwjW,gBAAkB,SAAUxa,EAAW1sT,EAAQR,EAASi5S,EAASxxT,EAAQ0hV,GAC1F,IAAIvwT,KACAwwT,EAAWppU,EAAQ,GAAKktT,EAAU8a,iBAClCqB,EAAWF,EAAqB/tR,MAAQguR,EAAWD,EAAqB5tR,UACxE+tR,EAAWtpU,EAAQA,EAAQ16B,OAAS,GAAK4nV,EAAUmb,gBACnDkB,EAAWJ,EAAqB/tR,MAAQkuR,EAAWH,EAAqB5tR,UAG5E,OAFA3iC,EAAIvrC,KAAKxE,KAAKk2V,aAAaqK,EAAUC,EAAU7oU,EAAO,GAAI/Y,EAAQmxB,EAAItzC,SACtEszC,EAAIvrC,KAAKxE,KAAKk2V,aAAauK,EAAUC,EAAU/oU,EAAOA,EAAOl7B,OAAS,GAAImiB,EAAQmxB,EAAItzC,SAC/EszC,GAKXgtT,EAAW1hW,UAAU8iW,qBAAuB,SAAU9Z,EAAW1sT,EAAQR,EAASi5S,EAASxxT,EAAQ+hV,GAC/F,IAAI1B,EAAW5yV,KAAKoxB,MAAO9F,EAAOl7B,OAAS,GACvCmkW,KACA5lU,EAAK7D,EAAQ,GAAKktT,EAAU8a,iBAC5BlkU,EAAK0lU,EAAkBjuR,UAAYrmE,KAAKqD,IAAIixV,EAAkBpuR,MAAQv3C,GACtEE,EAAK/D,EAAQ8nU,EAAW,GACxB9jU,EAAKwlU,EAAkBjuR,UAAYrmE,KAAKqD,IAAIixV,EAAkBpuR,MAAQr3C,GACtE4nB,EAAK3rB,EAAQA,EAAQ16B,OAAS,GAAK4nV,EAAUmb,gBAC7Cz8S,EAAK49S,EAAkBjuR,UAAYrmE,KAAKqD,IAAIixV,EAAkBpuR,MAAQzvB,GAI1E,OAHA89S,EAAOp8V,KAAKxE,KAAKk2V,aAAal7T,EAAIC,EAAItD,EAAO,GAAI/Y,EAAQgiV,EAAOnkW,SAChEmkW,EAAOp8V,KAAKxE,KAAKk2V,aAAah7T,EAAIC,EAAIxD,EAAOsnU,EAAW,GAAIrgV,EAAQgiV,EAAOnkW,SAC3EmkW,EAAOp8V,KAAKxE,KAAKk2V,aAAapzS,EAAIC,EAAIprB,EAAOA,EAAOl7B,OAAS,GAAImiB,EAAQgiV,EAAOnkW,SACzEmkW,GAKX7D,EAAW1hW,UAAU4kD,UAAY,SAAUokS,EAAW1sT,EAAQR,EAASi5S,EAASxxT,GAC7DvS,KAAKoxB,MAAO9F,EAAOl7B,OAAS,GAO3C,IAPA,IAKI+xB,EACAC,EALAmxU,EAAmBvb,EAAUub,iBAC7B7vT,KACA/U,EAAK,EACL/oB,EAAQ,EAGLA,GAAS2tV,EAAiBnjW,QACf,IAAVwV,GACAuc,EAAS2I,EAAQ,GAAKktT,EAAU8a,iBAChC1wU,EAASzuB,KAAK6gW,oBAAoBjB,EAAkBpxU,GACpDuhB,EAAIvrC,KAAKxE,KAAKk2V,aAAa1nU,EAAQC,EAAQkJ,EAAO,GAAI/Y,EAAQmxB,EAAItzC,UAE7DwV,IAAU2tV,EAAiBnjW,QAChC+xB,EAAS2I,EAAQQ,EAAOl7B,OAAS,GAAK4nV,EAAUmb,gBAChD/wU,EAASzuB,KAAK6gW,oBAAoBjB,EAAkBpxU,GACpDuhB,EAAIvrC,KAAKxE,KAAKk2V,aAAa1nU,EAAQC,EAAQkJ,EAAOA,EAAOl7B,OAAS,GAAImiB,EAAQmxB,EAAItzC,WAGlFu+B,IAAOrD,EAAOl7B,OAAS4nV,EAAUmb,iBAAmBI,EAAiBnjW,OACrE+xB,EAAS2I,EAAQpC,SAASiG,EAAG9tB,WAAY,IAAM,GAC/CuhB,EAASzuB,KAAK6gW,oBAAoBjB,EAAkBpxU,GACpDuhB,EAAIvrC,KAAKxE,KAAKk2V,aAAa1nU,EAAQC,EAAQkJ,EAAO5C,SAASiG,EAAG9tB,WAAY,IAAM,GAAI0R,EAAQmxB,EAAItzC,UAEpGwV,IAEJ,OAAO89B,GAKXgtT,EAAW1hW,UAAUwlW,oBAAsB,SAAUC,EAAQ/zV,GAGzD,IAFA,IAAI+lB,EAAM,EACN7gB,EAAQ,EACLA,EAAQ6uV,EAAOrkW,QAClBq2B,GAAOguU,EAAO7uV,GAAS5F,KAAK87D,IAAIp7D,EAAGkF,GACnCA,IAEJ,OAAO6gB,GAKXiqU,EAAW1hW,UAAU+kW,uBAAyB,SAAUx1T,EAAQg1T,GAC5D,IAAInjW,EAASmuC,EAAOnuC,OAChBskW,KACAC,KACAC,KACJF,EAAUtkW,OAASA,EACnBukW,EAAUvkW,OAASA,EACnBwkW,EAAUxkW,OAASA,EAEnB,IADA,IAAIwV,EAAQ,EACLA,EAAQxV,GACXwkW,EAAUhvV,GAAS,IACjBA,EAGN,IADA,IAAIk0N,EAAS,EACNA,EAAS1pO,GAAQ,CAKpB,IAJA,IAAIykW,EAAO,EACP36H,EAAS,EACTuQ,EAAS,EACTK,EAAS,EACNA,EAAS16O,GAAQ,CACpB,GAA0B,IAAtBwkW,EAAU9pH,GAEV,IADA,IAAI3F,EAAS,EACNA,EAAS/0O,GACc,IAAtBwkW,EAAUzvH,IAAiBnlO,KAAKE,IAAIq+B,EAAOusM,GAAQ3F,KAAY0vH,IAC/DA,EAAO70V,KAAKE,IAAIq+B,EAAOusM,GAAQ3F,IAC/BjL,EAAS4Q,EACTL,EAAStF,KAEXA,IAGR2F,EAGN,KADE8pH,EAAUnqH,GACRvQ,IAAWuQ,EAAQ,CAEnB,IADA,IAAIqqH,EAAW,EACRA,EAAW1kW,GAAQ,CACtB,IAAI0uC,EAAOP,EAAO27L,GAAQ46H,GAC1Bv2T,EAAO27L,GAAQ46H,GAAYv2T,EAAOksM,GAAQqqH,GAC1Cv2T,EAAOksM,GAAQqqH,GAAYh2T,IACzBg2T,EAEN,IAAIC,EAAOxB,EAAiBr5H,GAC5Bq5H,EAAiBr5H,GAAUq5H,EAAiB9oH,GAC5C8oH,EAAiB9oH,GAAUsqH,EAI/B,GAFAJ,EAAU76H,GAAUI,EACpBw6H,EAAU56H,GAAU2Q,EACW,IAA3BlsM,EAAOksM,GAAQA,GACf,OAAO,EAEX,IAAIuqH,EAAO,EAAMz2T,EAAOksM,GAAQA,GAChClsM,EAAOksM,GAAQA,GAAU,EAEzB,IADA,IAAIwqH,EAAU,EACPA,EAAU7kW,GACbmuC,EAAOksM,GAAQwqH,IAAYD,IACzBC,EAEN1B,EAAiB9oH,IAAWuqH,EAE5B,IADA,IAAIE,EAAU,EACPA,EAAU9kW,GAAQ,CACrB,GAAI8kW,IAAYzqH,EAAQ,CAChB3rM,EAAOP,EAAO22T,GAASzqH,GAC3BlsM,EAAO22T,GAASzqH,GAAU,EAE1B,IADItF,EAAS,EACNA,EAAS/0O,GACZmuC,EAAO22T,GAAS/vH,IAAW5mM,EAAOksM,GAAQtF,GAAUrmM,IAClDqmM,EAENouH,EAAiB2B,IAAY3B,EAAiB9oH,GAAU3rM,IAE1Do2T,IAEJp7H,EAGN,IADA,IAAIq7H,EAAU/kW,EAAS,EAChB+kW,GAAW,GAAG,CACjB,GAAIR,EAAUQ,KAAaT,EAAUS,GAEjC,IADA,IAAIC,EAAU,EACPA,EAAUhlW,GAAQ,CACrB,IAAId,EAAMivC,EAAO62T,GAAST,EAAUQ,IACpC52T,EAAO62T,GAAST,EAAUQ,IAAY52T,EAAO62T,GAASV,EAAUS,IAChE52T,EAAO62T,GAASV,EAAUS,IAAY7lW,IACpC8lW,IAGRD,EAEN,OAAO,GAKXzE,EAAW1hW,UAAUuiV,qBAAuB,SAAUh/T,EAAQiS,GAC1DgG,GAAajY,GACb,IAKI5d,EALA0zB,EAAW9V,EAAO8V,SAClBy+S,EAAkBtiT,EAAMhD,SAAS4rF,aAAa,IAAIyqN,GAAWrzS,EAAM7vB,QAAQsC,GAAK,2BAA6Bsb,EAAO3M,MAAO,eAAiB+D,MAAO,EAAGwgB,MAAO,QAAU,GACvKzpB,EAAG,EAAGC,EAAG,EAAGgJ,MAAO0e,EAAS1e,MAC5BD,OAAQ2e,EAAS3e,WAGrB/U,EAAU6vB,EAAMhD,SAASw+C,aACrB/oE,GAAMutB,EAAM7vB,QAAQsC,GAAK,uBAAyBsb,EAAO3M,MACzD5E,UAAa,aAAeqnB,EAAS3nB,EAAI,IAAM2nB,EAAS1nB,EAAI,IAC5DsmU,YAAa,QAAUziT,EAAM7vB,QAAQsC,GAAK,2BAA6Bsb,EAAO3M,MAAQ,OAGlFtQ,YAAYwxU,GACpB,IAAK,IAAI/0U,EAAK,EAAGyE,EAAK+b,EAAOmyT,WAAY3yU,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC3D,IAAIimV,EAAYxhV,EAAGzE,GACnB4B,KAAKi9V,wBAAwBpsU,EAAOwzT,EAAWA,EAAUpyU,MAAOjR,EAASmyU,KAMjF4pB,EAAW1hW,UAAUiX,QAAU,SAAUue,KAQzCksU,EAAW1hW,UAAUkkC,cAAgB,WAIjC,MAAO,aAEJw9T,KCjlBP2E,GAA2B,WAK3B,SAASA,EAAU7wU,GACf7wB,KAAKu1B,cAAgB,IAAI3B,GAAc,EAAG,GAC1C5zB,KAAKmuB,GAAK,EACVnuB,KAAKouB,GAAK,EACVpuB,KAAK6wB,MAAQA,EACb7wB,KAAKw4L,UAAYx4L,KAAK6wB,MAAM7vB,QAAQsC,GACpCtD,KAAKtD,mBAyST,OApSAglW,EAAUrmW,UAAUqB,iBAAmB,WACnC,IAAIsD,KAAK6wB,MAAMm2D,YAAf,CAGA,IAAI6zB,EAAcrvG,GAAQC,UAAY,eAAiB,aACvDzL,KAAK6wB,MAAM+0D,GAAGp6E,GAAQ2+E,eAAgBnqF,KAAKq0U,iBAAkBr0U,MAC7DA,KAAK6wB,MAAM+0D,GAAGp6E,GAAQ4+E,cAAepqF,KAAK4pN,eAAgB5pN,MAC1DA,KAAK6wB,MAAM+0D,GAAGi1B,EAAa76G,KAAK2hW,kBAAmB3hW,MACnDA,KAAK6wB,MAAM+0D,GAAG,UAAW5lF,KAAKmgV,UAAWngV,QAE7C0hW,EAAUrmW,UAAUuuN,eAAiB,WAC7B5pN,KAAK6wB,MAAM2jT,WACXx0U,KAAK4hW,gBAAgB,MAG7BF,EAAUrmW,UAAUsmW,kBAAoB,WACpC3hW,KAAK4hW,gBAAgB,MAEzBF,EAAUrmW,UAAUg5U,iBAAmB,SAAU/3U,GAC7C,IAAIu0B,EAAQ7wB,KAAK6wB,MACE,cAAfv0B,EAAMoK,OAAyB8E,GAAQqb,OAASrb,GAAQq2V,SAAWhxU,EAAM2jT,WAAal4U,EAAMkpB,gBAC5FlpB,EAAMkpB,iBAGLqL,EAAMixU,sBACHrrU,GAAa5F,EAAMk8S,OAAQl8S,EAAMm8S,OAAQn8S,EAAM6jT,qBAAqB7P,iBAChEh0S,EAAM2jT,WAAc3jT,EAAMe,SAC1B5xB,KAAKs0U,YAITt0U,KAAK4hW,gBAAgB,OASjCF,EAAUrmW,UAAU8kV,UAAY,WAC5B,IAAItvT,EAAQ7wB,KAAK6wB,MAIjB,OAHI4F,GAAa5F,EAAMk8S,OAAQl8S,EAAMm8S,OAAQn8S,EAAM6jT,qBAAqB7P,iBACpE7kU,KAAKs0U,aAEF,GAMXotB,EAAUrmW,UAAUi5U,UAAY,WAC5B,IAGIthU,EAHA6d,EAAQ7wB,KAAK6wB,MACbkxU,EAAkB,GAClBC,EAAgB,GAEhB1tB,EAAYzjT,EAAMyjT,UAClB5+S,EAAY7E,EAAM6jT,qBAAqB7P,eACvCo9B,EAAazhW,SAASosB,eAAe5sB,KAAKw4L,UAAY,oBAE1D,GADAx4L,KAAKkiW,gBACDrxU,EAAMgB,QAAQ4N,SAAWhJ,GAAa5F,EAAM2qT,cAAc2mB,OAAQtxU,EAAM2qT,cAAc4mB,OAAQ1sU,GAC9F,OAAO,KAaX,GAXA11B,KAAKmiW,OAAStxU,EAAMgB,QAAQ4N,OAAS5O,EAAM2qT,cAAc2mB,OAAStxU,EAAMk8S,OACxE/sU,KAAKoiW,OAASvxU,EAAMgB,QAAQ4N,OAAS5O,EAAM2qT,cAAc4mB,OAASvxU,EAAMm8S,OACxEi1B,EAAWz+V,aAAa,UAAW,KACR,SAAvB8wU,EAAU7zF,UAA8C,eAAvB6zF,EAAU7zF,WAC3CshH,GAAmB,KAAOrsU,EAAU3oB,EAAI,IAAM/M,KAAKoiW,OAC/C,OAAS1sU,EAAU3oB,EAAI2oB,EAAU1f,OAAS,IAAMhW,KAAKoiW,QAElC,SAAvB9tB,EAAU7zF,UAA8C,aAAvB6zF,EAAU7zF,WAC3CuhH,GAAiB,KAAOhiW,KAAKmiW,OAAS,IAAMzsU,EAAU1oB,EAClD,MAAQhN,KAAKmiW,OAAS,KAAOzsU,EAAU1oB,EAAI0oB,EAAU3f,SAExB,IAAjCksV,EAAW1wV,WAAW9U,OAAc,CACpC,IAAI4lW,EAAmBxxU,EAAMhD,SAASw+C,aAAc/oE,GAAMtD,KAAKw4L,UAAY,oBAC3ExlL,EAAU,IAAIojB,GAAWp2B,KAAKw4L,UAAY,kBAAmB,OAAQ87I,EAAUxmR,KAAK93C,MAAOs+T,EAAUxmR,KAAKt3B,OAAS3F,EAAMwF,WAAWzG,cAAe,EAAG,KAAMmyU,GAC5J/hW,KAAKsiW,oBAAoBtvV,EAASivV,GAClCjvV,EAAQub,EAAIyzU,EACZhvV,EAAQ1P,GAAKtD,KAAKw4L,UAAY,gBAC9Bx4L,KAAKsiW,oBAAoBtvV,EAASivV,GAClCA,EAAWtgW,YAAY0gW,GACvBriW,KAAKuiW,kBAAkB1xU,EAAO6E,EAAWusU,EAAWn6N,gBAGpDtnI,SAASosB,eAAe5sB,KAAKw4L,UAAY,mBAAmBh1L,aAAa,IAAKu+V,GAC9EvhW,SAASosB,eAAe5sB,KAAKw4L,UAAY,iBAAiBh1L,aAAa,IAAKw+V,GAC5EhiW,KAAKuiW,kBAAkB1xU,EAAO6E,EAAWusU,EAAWn6N,YAG5D45N,EAAUrmW,UAAUinW,oBAAsB,SAAUtvV,EAASivV,GACzD,IAAIt1U,EAAa3sB,KAAK6wB,MAAMhD,SAASsI,SAASnjB,GAC9CivV,EAAWtgW,YAAYgrB,IAE3B+0U,EAAUrmW,UAAUknW,kBAAoB,SAAU1xU,EAAO6E,EAAW8sU,GAUhE,IAAK,IATDrsV,EACAsW,EACA4G,EACAgwQ,EACAo/D,EAGAjtU,EACA02S,EACK/lT,EAAI,EAAGsU,EAAW5J,EAAM81S,gBAAgBlqU,OAAQ0pB,EAAIsU,EAAUtU,IAGnE,GAFAhQ,EAAO0a,EAAM81S,gBAAgBxgT,GAC7B+lT,EAAY/1T,EAAKgsT,oBAAkChsT,EAAKsrT,YAAjBtrT,EAAKkd,KACxCld,EAAK2uU,iBAAiBrlT,OACtB,GAAKz/B,KAAKmiW,QAAWj2B,EAASn/T,EAAIm/T,EAASl2T,OAAUk2T,EAASn/T,GAAK/M,KAAKmiW,QACnEniW,KAAKoiW,QAAWl2B,EAASl/T,EAAIk/T,EAASn2T,QAAWm2T,EAASl/T,GAAKhN,KAAKoiW,OAAS,CAI9E,GAHA/+D,EAAc7iS,SAASosB,eAAe5sB,KAAKw4L,UAAY,iBAAmBryK,GAC1Es8U,EAAWjiW,SAASosB,eAAe5sB,KAAKw4L,UAAY,sBAAwBryK,KAC5EsG,EAAOzsB,KAAK0iW,YAAYvsV,IAEpB,SAEJkd,EAAOrzB,KAAKikS,gBAAgBx3Q,EAAMtW,EAAMuf,EAAWw2S,GAC/B,OAAhB7oC,IACAA,EAAcxyQ,EAAMhD,SAASsI,UACzB7yB,GAAMtD,KAAKw4L,UAAY,iBAAmBryK,EAC1CyX,KAAQznB,EAAK2uU,iBAAiBlnT,MAAQ/M,EAAMwF,WAAWxG,gBAE3D2yU,EAAU7gW,YAAY0hS,GAEtBo/D,EAAWnsU,GADD,IAAIC,GAAWv2B,KAAKw4L,UAAY,sBAAwBryK,EAAG,EAAG,EAAG,QAASsG,GACpDtW,EAAK2uU,iBAAiB1gD,UAAWjuR,EAAK2uU,iBAAiB1gD,UAAU5tQ,OAAS3F,EAAMwF,WAAWvG,eAAgB0yU,IAE/IhtU,EAAYS,GAAcj2B,KAAKmuB,GAAInuB,KAAKouB,GAAIiF,EAAMrzB,KAAKu1B,cAAe,GAAIv1B,KAAK4jS,MAAO5jS,KAAK6hS,SAAU7hS,KAAK6jS,OAAQ7jS,KAAKmiW,OAAQniW,KAAKoiW,QACpI/+D,EAAY7/R,aAAa,IAAKgyB,GAC9BitU,EAAS5mV,YAAc4Q,EACvBg2U,EAASj/V,aAAa,KAAM6vB,EAAKtmB,EA5B/B,GA4B4CG,YAC9Cu1V,EAASj/V,aAAa,KAAM6vB,EAAKrmB,EA7B/B,EA6B6C,EAAIhN,KAAK8jS,YAAY/tR,OAAS,GAAG7I,iBAGhFsgB,GAAcxtB,KAAKw4L,UAAY,iBAAmBryK,GAClDqH,GAAcxtB,KAAKw4L,UAAY,sBAAwBryK,IAKvEu7U,EAAUrmW,UAAUqnW,YAAc,SAAUvsV,GACxC,IAAInZ,EACJgD,KAAK6hS,UAAW,EAChB7hS,KAAK4jS,OAAQ,EACb5jS,KAAK6jS,QAAS,EACd7jS,KAAK4hS,SAAU,EACf,IAAI+gE,EAAiC,aAAnBxsV,EAAK+b,WAAoD,iBAAxB/b,EAAKke,eAClD,GAAM,EAWZ,GAVyB,eAArBle,EAAKijB,aACLp8B,EAAQ25B,GAAiBtqB,KAAKE,IAAIvM,KAAKmiW,OAAShsV,EAAKkd,KAAKtmB,GAAIoJ,EAAKkd,KAAKrd,MAAOG,GAAQwsV,EACvF3iW,KAAK6hS,UAAY1rR,EAAKsf,gBACtBz1B,KAAK4jS,MAAQztR,EAAKsf,kBAGlBz4B,EAAQ45B,GAAiBvqB,KAAKE,IAAIvM,KAAKoiW,OAASjsV,EAAKkd,KAAKrmB,GAAImJ,EAAKkd,KAAKtd,OAAQI,GAAQwsV,EACxF3iW,KAAK4hS,QAAUzrR,EAAKsf,gBACpBz1B,KAAK6jS,QAAU1tR,EAAKsf,iBAED,aAAnBtf,EAAK+b,UACL,OAAO/b,EAAK6lB,OAAO,IAAIhc,KAAKhjB,IAE3B,GAAuB,aAAnBmZ,EAAK+b,UACV,OAAO/b,EAAKqxT,OAAOn7T,KAAK+S,MAAMpiB,IAE7B,GAAuB,gBAAnBmZ,EAAK+b,UACV,OAAOl1B,EAAQmZ,EAAK6lB,OAAO3vB,KAAK87D,IAAIhyD,EAAKob,QAASv0B,IAIlD,OADwBmZ,EAAKmlB,aAAqD,OAAtCnlB,EAAKmlB,YAAY3rB,MAAM,WACxCwG,EAAKmlB,YAAY/rB,QAAQ,UAAW4G,EAAK6lB,OAAOh/B,IAAUmZ,EAAK6lB,OAAOh/B,IAGzG0kW,EAAUrmW,UAAU4oS,gBAAkB,SAAUx3Q,EAAMtW,EAAMugB,EAAQw1S,GAChE,IAIIxmC,EACAK,EAAUrvQ,EAAO3pB,EACjBi5R,EAAUtvQ,EAAO1pB,EACjB++T,EAAuC,WAAvB51T,EAAKspG,cACrB7pF,EAAkBzf,EAAK0f,kBAAoB1f,EAAK0f,iBAAiBvE,UAAYnb,EAAKyf,gBAAkB,EAExG,GADA51B,KAAK8jS,YAAct3Q,GAAYC,EAAMtW,EAAK2uU,iBAAiB1gD,WAClC,eAArBjuR,EAAKijB,YAA8B,CACnC,IAAIyyS,EAAYE,EAAgBG,EAASl/T,EAAIhN,KAAK8jS,YAAY/tR,UAC1Dm2T,EAASl/T,EAAI4oB,EACb7f,EAASg2T,EAAgBG,EAASl/T,EAAIhN,KAAK8jS,YAAY/tR,OAV5C,GAUoEm2T,EAASl/T,EAV7E,GAWfhN,KAAKu1B,cAAgB,IAAI3B,GAAc5zB,KAAKmiW,OAAQt2B,GACpDnmC,EAAc,IAAIxvQ,GAAMl2B,KAAKmiW,OAAUniW,KAAK8jS,YAAY9tR,MAAQ,EAbtD,EAaqED,GAAWg2T,EAAkC,EAAlBn2S,GAAsB51B,KAAK8jS,YAAY9tR,MAAQojD,GAAap5D,KAAK8jS,YAAY/tR,OAASqjD,IAC5LjjD,EAAKsf,kBACLiwQ,EAAY14R,EAAI++T,EAAgBG,EAASl/T,EAAIk/T,EAASl/T,GACjDhN,KAAK8jS,YAAY/tR,OAASqjD,GAfpB,IAekDxjC,GAE7D8vQ,EAAY34R,EAAIg5R,IAChBL,EAAY34R,EAAIg5R,GAEhBL,EAAY34R,EAAI24R,EAAY1vR,MAAQ+vR,EAAUrvQ,EAAO1gB,QACrD0vR,EAAY34R,GAAO24R,EAAY34R,EAAI24R,EAAY1vR,OAAU+vR,EAAUrvQ,EAAO1gB,QAE1EhW,KAAKu1B,cAAcxoB,EAAI0xB,EAAmBinQ,EAAY34R,EAAI24R,EAAY1vR,MAAQhW,KAAKmuB,KACnFnuB,KAAKu1B,cAAcxoB,EAAI24R,EAAY34R,EAAI24R,EAAY1vR,MAAQhW,KAAKmuB,GAAKsQ,GAErEz+B,KAAKu1B,cAAcxoB,EAAI0xB,EAAmBinQ,EAAY34R,EAAI/M,KAAKmuB,KAC/DnuB,KAAKu1B,cAAcxoB,EAAI24R,EAAY34R,EAAI/M,KAAKmuB,GAAKsQ,OAGpD,CACD7I,GAAqCzf,EAAKsf,gBAAkB,GAAK,EACjEz1B,KAAKu1B,cAAgB,IAAI3B,GAAcs4S,EAASn/T,EAAG/M,KAAKoiW,QACxD,IAAIpsV,EAAQ+1T,EAAgBG,EAASn/T,EAAI6oB,EACrCs2S,EAASn/T,EAAK/M,KAAK8jS,YAAiB,SACxC4B,EAAc,IAAIxvQ,GAAKlgB,EAAQ4f,EAAiB51B,KAAKoiW,OAAUpiW,KAAK8jS,YAAY/tR,OAAS,EApC/E,EAoC6F/V,KAAK8jS,YAAY9tR,SAAuBhW,KAAK8jS,YAAY/tR,OAASqjD,IACrKjjD,EAAKsf,iBACLiwQ,EAAY34R,EAAIg/T,EAAgBG,EAASn/T,EAAI/M,KAAK8jS,YAAY9tR,MArCnD,GAsCPk2T,EAASn/T,EAtCF,GAsCqB6oB,EAC3B8vQ,EAAY34R,EAAI24R,EAAY1vR,MAAShW,KAAK6wB,MAAM8E,cAAc3f,QAC/DhW,KAAKu1B,cAAcxoB,GAAO24R,EAAY34R,EAAI24R,EAAY1vR,MAAShW,KAAK6wB,MAAM8E,cAAc3f,MACxF0vR,EAAY34R,GAAO24R,EAAY34R,EAAI24R,EAAY1vR,MAAShW,KAAK6wB,MAAM8E,cAAc3f,QAIjF0vR,EAAY34R,EAAI,IAChB/M,KAAKu1B,cAAcxoB,GAAK24R,EAAY34R,EACpC24R,EAAY34R,EAAI,GAGpB24R,EAAY14R,EAAIg5R,IAChBN,EAAY14R,EAAIg5R,GAEhBN,EAAY14R,EAAI04R,EAAY3vR,QAAUiwR,EAAUtvQ,EAAO3gB,SACvD2vR,EAAY14R,GAAO04R,EAAY14R,EAAI04R,EAAY3vR,QAAWiwR,EAAUtvQ,EAAO3gB,SAE3E/V,KAAKu1B,cAAcvoB,EAAIyxB,EAAmBinQ,EAAY14R,EAAI04R,EAAY3vR,OAAS/V,KAAKouB,KACpFpuB,KAAKu1B,cAAcvoB,EAAI04R,EAAY14R,EAAI04R,EAAY3vR,OAAS/V,KAAKouB,GAAKqQ,GAEtEz+B,KAAKu1B,cAAcvoB,EAAIyxB,EAAmBinQ,EAAY14R,EAAIhN,KAAKouB,KAC/DpuB,KAAKu1B,cAAcvoB,EAAI04R,EAAY14R,EAAIhN,KAAKouB,GAAKqQ,GAGzD,OAAOinQ,GAEXg8D,EAAUrmW,UAAU6mW,cAAgB,WAChCjmU,GAAUj8B,KAAK4iW,oBAOnBlB,EAAUrmW,UAAUumW,gBAAkB,SAAU12V,GAC5C,IAAI2lB,EAAQ7wB,KAAK6wB,MACbyjT,EAAY9zU,SAASosB,eAAe5sB,KAAKw4L,UAAY,oBACzDx4L,KAAKkiW,gBACD5tB,GAAmD,MAAtCA,EAAUzhU,aAAa,aACpC7S,KAAK4iW,kBAAoBziW,WAAW,WAChC,IAAIm4B,OAAcC,QAAQ+7S,GACtBppU,SAAU,IACVstB,SAAU,SAAUv4B,GAEhBq0U,EAAU5vU,MAAMiyC,UAAY,GAC5B29R,EAAU9wU,aAAa,WAAY,EAAKvD,EAAKw4B,UAAYx4B,EAAKiL,UAAWgC,aAE7E2R,IAAK,SAAU+D,GACX0xT,EAAU9wU,aAAa,UAAW,KAClCqtB,EAAM2jT,WAAY,EACd3jT,EAAM2qT,gBACN3qT,EAAM2qT,cAAc2mB,OAAS,KAC7BtxU,EAAM2qT,cAAc4mB,OAAS,UAI1Cl3V,KAMXw2V,EAAUrmW,UAAUkkC,cAAgB,WAIhC,MAAO,aAOXmiU,EAAUrmW,UAAUiX,QAAU,SAAUue,KAKjC6wU,KCzTPp3Q,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAmBxCk4Q,GAA6B,SAAU13Q,GAMvC,SAAS03Q,EAAYhyU,GACjB,IAAI9wB,EAAQorF,EAAO7pF,KAAKtB,KAAM6wB,IAAU7wB,KAIxC,OAHAD,EAAMiB,QAAUjB,EAAM8wB,MAAM7vB,QAC5BjB,EAAMqkS,UAAYvzQ,EAAMgB,QAAQuyQ,UAChCrkS,EAAM4S,QAAUke,EACT9wB,EAyNX,OAnOAuqF,GAAUu4Q,EAAa13Q,GAYvB03Q,EAAYxnW,UAAUkyB,WAAa,SAAUjqB,GACzC,OAAO9C,SAASosB,eAAetpB,IAOnCu/V,EAAYxnW,UAAUynW,kBAAoB,SAAUC,GAMhD,OALA/iW,KAAKkkS,SAAWlkS,KAAK6wB,MAAMiG,oBAC3B92B,KAAK4kF,OAA0C,OAAhC5kF,KAAK2S,QAAQkf,QAAQ+yD,OAC9B5kF,KAAK2S,QAAQkf,QAAc,OAAI,oBAAsB,wBACpD7xB,KAAK2S,QAAQkf,QAAc,OAClC7xB,KAAKsiS,iBACAygE,EAGE,KAFI/iW,KAAKmB,iBAIpB0hW,EAAYxnW,UAAU8F,cAAgB,WAClC,IAAIuiS,EAAaljS,SAASW,cAAc,OAIxC,OAHAuiS,EAAWpgS,GAAKtD,KAAKgB,QAAQsC,GAAK,WAClCogS,EAAWrgS,UAAY,eACvBqgS,EAAWlgS,aAAa,QAAS,qDAC1BkgS,GAEXm/D,EAAYxnW,UAAUq0U,SAAW,SAAUlzU,EAAM+lS,EAASmB,EAAYi+B,GAClE,QAAInlU,EAAKoiB,OAAOi2T,gBAER70U,KAAKysU,cAAcjoU,KAAKhI,GAK5BwD,KAAKkiW,gBACD3/D,GACA/hS,SAASosB,eAAe5sB,KAAKgB,QAAQsC,GAAK,sBAAsB3B,YAAY+hS,IAEzE,IAIfm/D,EAAYxnW,UAAU2nW,gBAAkB,SAAUnyU,GAG9C,IAAK,IAFDhT,EAEK1hB,EAAI,EAAG0F,EAAM7B,KAAK0sU,eAAejwU,OAAQN,EAAI0F,EAAK1F,KACvD0hB,EAAO7d,KAAK0sU,eAAevwU,IAClByiB,OAAOiuT,aACRhvT,EAAKe,OAAO4Y,SACZx3B,KAAKijW,eAAeplV,EAAKe,OAAQf,EAAKiW,MAAM7hB,OAAO,GAIlD4L,EAAKe,OACFkuT,OAAOt1S,SAAgC,YAArB3Z,EAAKe,OAAOlY,MAA2C,WAArBmX,EAAKe,OAAOlY,OACxE1G,KAAK0sU,eAAe/uP,QACpB97E,GAAO,IAInBghW,EAAYxnW,UAAU4nW,eAAiB,SAAUrkV,EAAQwZ,EAAY8qU,GACjE,IAAIliW,EAAUhB,KAAKutB,WAAWvtB,KAAKgB,QAAQsC,GAAK,WAAasb,EAAO3M,MAAQ,UAAYmmB,GACpFp3B,GACAA,EAAQwC,aAAa,WAAY0/V,EAAYtkV,EAAOnR,QAAU,EAAImR,EAAOnR,SAASP,aAG1F21V,EAAYxnW,UAAU8nW,gBAAkB,WACpC,IAAK,IAAI/kW,EAAK,EAAGyE,EAAK7C,KAAKysU,cAAeruU,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC5D,IAAIyf,EAAOhb,EAAGzE,GACVyf,EAAKe,OAAOiuT,cAAyC,WAAzBhvT,EAAKe,OAAOw7K,UACxCp6L,KAAKijW,eAAeplV,EAAKe,OAAQf,EAAKiW,MAAM7hB,OAAO,KAI/D4wV,EAAYxnW,UAAU+5B,cAAgB,SAAUvE,EAAO0xQ,EAAS39M,EAAQl3D,EAAU01U,EAActvU,EAAOwvQ,EAAQ33R,EAAQ+qB,EAAQ2sU,EAAaC,QACpH,IAAhBD,IAA0BA,EAAc,WACtB,IAAlBC,IAA4BA,EAAgB,MAChD,IAAI1kV,EAAS5e,KAAKysU,cAAc,GAAG7tT,OAC/BuyE,EAAStgE,EAAM2qT,eAAiB3qT,EAAM0yU,0BACtChhE,EACAviS,KAAKwjW,WAAa,IAAIC,IAClBh2V,QAASojB,EAAMgB,QAAQpkB,QACvBm3E,OAAQA,EAAQxqD,QAASp6B,KAAKysB,KAAMmR,KAAM/M,EAAMgB,QAAQ+L,KAAM0G,OAAQzT,EAAMgB,QAAQyS,OACpFigQ,gBAAiB1zQ,EAAMgB,QAAQ0yQ,gBAAiB72Q,SAAUA,EAAUy1Q,OAAQtyQ,EAAMgB,QAAQsxQ,OAC1FG,OAAQA,EAAQt0B,WAAyC,eAA7BhvQ,KAAK6wB,MAAM+8S,cAAiC,IAAIh6S,GAAc,EAAG,GAAKwvU,EAClGxgE,WAAYlsQ,EAAQ5H,QAAS9uB,KAAK0jW,cAAez0V,SAAU4hB,EAAMgB,QAAQ5iB,SAAUzS,KAAM8mW,EACzFpoV,MAAO2V,EAAM3V,MAAOvP,OAAQA,EAAQy4R,UAAWvzQ,EAAMgB,QAAQuyQ,UAC7D95L,WAAa1rF,EAAOiuT,cAAgC,cAAhBjuT,EAAOlY,MAAwBotB,GAASA,EAAM9mB,EAAI,EACtFk3R,SAAUlkS,KAAK6wB,MAAMiG,qBAAuBlY,EAAOiuT,aACnDpuS,aAAcz+B,KAAKysB,KAAKhwB,OAAS,EAAI,EAAI,GACzCijU,cAAe,WACXvuO,EAAO6xQ,gBAAgB7xQ,EAAOx+E,SAC9Bw+E,EAAOgyQ,kBACPhyQ,EAAOwyQ,oBAAoBN,IAE/BlzR,kBAAmB,SAAUlwE,GACrBA,EAAK4xB,QAAQ6wQ,WACbvxM,EAAO+0M,QAAQ/0M,EAAOu7O,eAAgB77S,KAG/C,IAAM7wB,KAAKgB,QAAQsC,GAAK,aAG3BtD,KAAKwjW,WAAW91U,SAAWA,EAC3B1tB,KAAKwjW,WAAWppU,QAAUp6B,KAAKysB,KAC/BzsB,KAAKwjW,WAAW5+Q,OAASA,EACzB5kF,KAAKwjW,WAAW73V,OAASA,EACzB3L,KAAKwjW,WAAW10U,QAAU9uB,KAAK0jW,cAC/B1jW,KAAKwjW,WAAWlgE,OAASA,EACzBtjS,KAAKwjW,WAAWhnW,KAAO8mW,EACvBtjW,KAAKwjW,WAAWv0V,SAAW4hB,EAAMgB,QAAQ5iB,SACzCjP,KAAKwjW,WAAWp/D,UAAYvzQ,EAAMgB,QAAQuyQ,UAC1CpkS,KAAKwjW,WAAWl5P,WAAc1rF,EAAOiuT,cAAgC,cAAhBjuT,EAAOlY,MAAwBotB,GAASA,EAAM9mB,EAAI,EACvGhN,KAAKwjW,WAAWx0F,WAA0C,eAA7BhvQ,KAAK6wB,MAAM+8S,cAAiC,IAAIh6S,GAAc,EAAG,GAAKwvU,EACnGpjW,KAAKwjW,WAAW/kU,aAAez+B,KAAKysB,KAAKhwB,OAAS,EAAI,EAAI,GAC1DuD,KAAKwjW,WAAW53S,aAGxBi3S,EAAYxnW,UAAUqoW,YAAc,WAEhC,IAAK,IADD5zQ,KACK1xF,EAAK,EAAGyE,EAAK7C,KAAKysU,cAAeruU,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC5D,IAAI5B,EAAOqG,EAAGzE,GACd0xF,EAAOtrF,KAAKxE,KAAK4jW,UAAUpnW,EAAMA,EAAKoiB,SAE1C,OAAOkxE,GAEX+yQ,EAAYxnW,UAAUuoW,UAAY,SAAUpnW,EAAMoiB,GAC9C,OAAIA,EAAOiuT,aACArwU,EAAKs3B,MAAM0C,OAGVh6B,EAAKs3B,MAAM0C,OAA8B,YAArBh6B,EAAKs3B,MAAM0C,MAAsBh6B,EAAKs3B,MAAM0C,MAClEh6B,EAAKs3B,MAAMu0C,WACbzpD,EAAOkuT,OAAOlvS,MAAQhf,EAAOypD,UAGzCw6R,EAAYxnW,UAAUsoW,oBAAsB,SAAUN,GAC9CA,IACArjW,KAAKysU,cAAgBzsU,KAAKysU,cAAclyT,OAAO8oV,IAEnDrjW,KAAK0sU,eAAiBhuU,KAAWsB,KAAKysU,cAAe,MAAM,IAE/Do2B,EAAYxnW,UAAU6qS,QAAU,SAAU1pS,EAAMq0B,GAC5C,IAAIgzU,EAAa7jW,KAAKutB,WAAWvtB,KAAKgB,QAAQsC,GAAK,gBAClCugW,GAAc9uU,SAAS8uU,EAAWhxV,aAAa,WAAY,IAAM,IAE9E7S,KAAKmiW,OAAS,KACdniW,KAAKoiW,OAAS,KACdpiW,KAAKysU,iBACLzsU,KAAKgjW,gBAAgBnyU,GACrB7wB,KAAK80U,wBAAwBt4U,GAC7BwD,KAAKwjW,WAAa,KAClBxjW,KAAK2S,QAAQ6T,QAAQ,0BAM7Bq8U,EAAYxnW,UAAUy5U,wBAA0B,SAAUt4U,GACtD,GAAIwD,KAAK6wB,MAAMgjT,aAAc,CACzB,IAAK,IAAIz1U,EAAK,EAAGi/G,EAAS7gH,EAAM4B,EAAKi/G,EAAO5gH,OAAQ2B,IAAM,CACtD,IAAIyf,EAAOw/F,EAAOj/G,GAClBovB,GAAcxtB,KAAKgB,QAAQsC,GAAK,WAAaua,EAAKe,OAAO3M,MACrD,UAAY4L,EAAKiW,MAAM7hB,MAAQ,cAEvCjS,KAAK6wB,MAAMgjT,aAAaiB,0BAE5B90U,KAAK0sU,mBAETm2B,EAAYxnW,UAAUmuJ,aAAe,SAAU11H,EAAOyuQ,EAASzhQ,EAAgBgjU,QACzD,IAAdA,IAAwBA,GAAY,GACxC,IAAIlrU,GACAC,QAAQ,EAAOpB,KAAMioS,GAAejzS,KAAMqU,EAC1ChN,MAAOA,EAAMA,MAAOlV,OAAQkV,EAAMlV,OAAQwlR,UAAWpkS,KAAKokS,WAW9D,OATApkS,KAAK6wB,MAAMrK,QAAQk5S,GAAe9mS,GAC7BA,EAASC,SACgB,kBAAtB/E,EAAMlV,OAAOlY,OACb1G,KAAK+jW,cACK,GAEd/jW,KAAKsiS,cAAgBtiS,KAAKsiS,cAAc/nR,OAAOqe,EAASnM,MACxDzsB,KAAKysB,KAAOzsB,KAAKsiS,gBAEb1pQ,EAASC,QAErBgqU,EAAYxnW,UAAU0oW,WAAa,WAC/B/jW,KAAKkjS,gBACL,IAAIliS,EAAUhB,KAAKutB,WAAWvtB,KAAKgB,QAAQsC,GAAK,kBAChD,GAAItC,GAAWA,EAAQuQ,WAAW9U,OAAS,EACvC,KAAOuE,EAAQ8mI,WAA2C,IAA9B9mI,EAAQuQ,WAAW9U,QAC3CuE,EAAQsE,YAAYtE,EAAQ8mI,YAIxC+6N,EAAYxnW,UAAU6mW,cAAgB,WAClCjmU,GAAUj8B,KAAKgkW,kBAOnBnB,EAAYxnW,UAAU4oW,cAAgB,SAAU/4V,GAC5C,IAAInL,EAAQC,KACR0gI,EAAiB1gI,KAAKutB,WAAWvtB,KAAKgB,QAAQsC,GAAK,YACvDtD,KAAKkiW,gBACDxhO,GAAkB1gI,KAAK0sU,eAAejwU,OAAS,IAC/CuD,KAAKgkW,gBAAkB7jW,WAAW,WAC1BJ,EAAMyjW,YACNzjW,EAAMyjW,WAAWt9D,WAEtBh7R,KAGJ23V,GACTr2B,ICxPEliP,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAiBxC30C,GAAyB,SAAUm1C,GAMnC,SAASn1C,EAAQnlB,GACb,IAAI9wB,EAAQorF,EAAO7pF,KAAKtB,KAAM6wB,IAAU7wB,KAExC,OADAD,EAAMrD,mBACCqD,EAwZX,OAhaAuqF,GAAUt0C,EAASm1C,GAanBn1C,EAAQ36C,UAAUqB,iBAAmB,WACjC,IAAIsD,KAAK6wB,MAAMm2D,YAAf,CAGA,IAAI6zB,EAAcrvG,GAAQC,UAAY,eAAiB,aACvDzL,KAAK6wB,MAAM+0D,GAAGi1B,EAAa76G,KAAK2hW,kBAAmB3hW,MACnDA,KAAK6wB,MAAM+0D,GAAG,UAAW5lF,KAAKmgV,UAAWngV,MACzCA,KAAK6wB,MAAM+0D,GAAGp6E,GAAQ2+E,eAAgBnqF,KAAKq0U,iBAAkBr0U,MAC7DA,KAAK6wB,MAAM+0D,GAAGp6E,GAAQ4+E,cAAepqF,KAAK4pN,eAAgB5pN,QAE9Dg2C,EAAQ36C,UAAUuuN,eAAiB,WAC/B,IAAI/4L,EAAQ7wB,KAAK2S,QACbke,EAAMe,UAAY5xB,KAAK84D,WAAWjoC,KAChC4F,GAAa5F,EAAMk8S,OAAQl8S,EAAMm8S,OAAQn8S,EAAM6jT,qBAAqB7P,iBAAmBh0S,EAAMgB,QAAQsxQ,SAC/FtyQ,EAAMgB,QAAQsxQ,UACjBtyQ,EAAMyjT,UAAU70S,OAIZ5O,EAAM2jT,WACXx0U,KAAKikW,cAAc,MAJnBjkW,KAAK6xB,UACL7xB,KAAKikW,cAAc,QAO/BjuT,EAAQ36C,UAAUsmW,kBAAoB,WAClC3hW,KAAKikW,cAAc,MAEvBjuT,EAAQ36C,UAAUg5U,iBAAmB,WACjC,IAAIxjT,EAAQ7wB,KAAK6wB,MAEZA,EAAMixU,qBAAwB9hW,KAAK84D,WAAWjoC,KAC1CA,EAAMgB,QAAQsxQ,QAAYtyQ,EAAMe,UAAYf,EAAe,WAC5D7wB,KAAK6xB,UAEL4E,GAAa5F,EAAMk8S,OAAQl8S,EAAMm8S,OAAQn8S,EAAM6jT,qBAAqB7P,iBAChEh0S,EAAMgB,QAAQsxQ,QAAYtyQ,EAAMe,UAAYf,EAAe,WAC3D7wB,KAAK6xB,UAILhB,EAAMgB,QAAQsxQ,QACdnjS,KAAKikW,cAAc,OAUnCjuT,EAAQ36C,UAAU8kV,UAAY,WAC1B,IAAItvT,EAAQ7wB,KAAK6wB,MAIjB,OAHIA,EAAMyjT,UAAU70S,QAAUhJ,GAAa5F,EAAMk8S,OAAQl8S,EAAMm8S,OAAQn8S,EAAM6jT,qBAAqB7P,iBAC9F7kU,KAAK6xB,WAEF,GAMXmkB,EAAQ36C,UAAUw2B,QAAU,WACxB,IAAIgyU,EAAa7jW,KAAKutB,WAAWvtB,KAAKgB,QAAQsC,GAAK,gBAC/Cy/V,EAAac,GAAc9uU,SAAS8uU,EAAWhxV,aAAa,WAAY,IAAM,EAC9E6wR,EAAa1jS,KAAK8iW,kBAAkBC,GACnC/iW,KAAK6wB,MAAMgB,QAAQsxQ,OAIpBnjS,KAAKkkW,qBAAqBlkW,KAAK6wB,OAAQkyU,EAAWr/D,GAHlD1jS,KAAKmkW,oBAAoBnkW,KAAK6wB,OAAQkyU,EAAWr/D,IAMzD1tP,EAAQ36C,UAAU+oW,WAAa,SAAU5nW,GACrC,MAAoB,KAAhBwD,KAAK4kF,OACE,IAEX5kF,KAAK4kF,OAAS5kF,KAAKqkW,cAAc7nW,EAAKs3B,MAAOt3B,EAAKoiB,OAAQ5e,KAAK4kF,OAAQpoF,EAAKoiB,OAAO9G,MAAOtb,EAAKoiB,OAAOhH,OACjC,KAAjE5X,KAAK4kF,OAAOr1E,QAAQ,OAAQ,IAAIA,QAAQ,SAAU,IAAIW,OAC/ClQ,KAAK4kF,OAET,KAEX5uC,EAAQ36C,UAAUipW,WAAa,WAE3B,IAAK,IADDx3B,KACK1uU,EAAK,EAAGyE,EAAK7C,KAAKysU,cAAeruU,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC5D,IAAI5B,EAAOqG,EAAGzE,GACd0uU,EAAOtoU,KAAKhI,EAAKs3B,MAAMg5S,OAAOn/S,OAASnxB,EAAKoiB,OAAOkuT,OAAOn/S,OAE9D,OAAOm/S,GAEX92R,EAAQ36C,UAAU8oW,oBAAsB,SAAUtzU,EAAO0xQ,EAASmB,GAC9D,IAAIlnS,EAAOwD,KAAK2sU,UAChBnwU,EAAK+nU,UAAYvkU,KAAKukU,UACX1zS,EAAM6jT,qBAAqB7P,eAEtC,GADA7kU,KAAKysU,iBAEDzsU,KAAKukW,SAAS/nW,EAAMwD,KAAK0sU,eAAe,IACpC1sU,KAAK0vU,SAASlzU,EAAM+lS,EAASmB,GAAY,KACrC1jS,KAAKwpJ,aAAahtJ,EAAM+lS,EAASviS,KAAKumE,eAAe/pE,IACrDwD,KAAKo1B,cAAcvE,EAAO0xQ,EAASviS,KAAKokW,WAAW5nW,GAAOwD,KAAKwkW,kBAAkBhoW,GAAOA,EAAKoiB,OAAO8V,SAAUl4B,EAAKs3B,MAAO9zB,KAAKskW,aAActkW,KAAKykW,iBAAiBzkW,KAAKysU,cAAc,IAAK57S,EAAM6jT,qBAAqB7P,eAAgB,KAAM7kU,KAAK0kW,gBAAgBloW,KAGjQwD,KAAKgjW,gBAAgBhjW,KAAK2S,SAC1B3S,KAAKutB,WAAWvtB,KAAKgB,QAAQsC,GAAK,YAAYiB,UAElDvE,KAAKyoB,UAAW,QAIpB,IAAKjsB,EAAKs3B,OAAS9zB,KAAKyoB,SACpBzoB,KAAKikW,cAAc,KACnBjkW,KAAKyoB,UAAW,OAGhB,IAAK,IAAIrqB,EAAK,EAAGyE,EAAKguB,EAAMoQ,cAAe7iC,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC7D,IAAIwgB,EAAS/b,EAAGzE,GACZwgB,EAAO4Y,UACPh7B,EAAOwD,KAAKkuU,YAAYr9S,EAAOjS,IAAWpiB,GAKtDA,GAAQA,EAAKs3B,OACb9zB,KAAK2kW,eAAenoW,EAAMq0B,IAGlCmlB,EAAQ36C,UAAUopW,iBAAmB,SAAU9vB,GAC3C,IAAI/uC,EAAe,EACfhnR,EAAS+1T,EAAU/1T,OAKvB,OAJKA,EAAOiuT,eACRjnC,EAAgB5lS,KAAK6wB,MAAMgB,QAAQsxQ,QAAUvkR,EAAOkuT,OAAOt1S,SAA2B,YAAhB5Y,EAAOlY,MAClD,YAApBkY,EAAOguT,UAA4BhuT,EAAOkuT,OAAO/2T,OAAS,GAAK,EAAK,EAAI6I,EAAOkuT,OAAOxoS,OAAOtuB,MAAU,GAE3G4vR,GAEX5vP,EAAQ36C,UAAUkpW,SAAW,SAAU/nW,EAAM+tI,GACzC,OAAO/tI,EAAKs3B,SAAYy2G,GAAaA,EAASz2G,QAAUt3B,EAAKs3B,OACxDy2G,GAAYA,EAASg6L,UAAY,GAAKh6L,EAASg6L,YAAcvkU,KAAKukU,YAE3EvuR,EAAQ36C,UAAUmpW,kBAAoB,SAAUhoW,GAC5C,IAAIkxB,EACJ,GAAyB,kBAArBlxB,EAAKoiB,OAAOlY,KAA0B,CACtC,IAAKlK,EAAKs3B,MAAMw6S,gBAAgB,GAC5B,OAAO,KAEX5gT,EAAW,IAAIkG,GAAcp3B,EAAKs3B,MAAMw6S,gBAAgB,GAAGvhU,EAAGvQ,EAAKs3B,MAAMw6S,gBAAgB,GAAGthU,GAEhG,OAAQxQ,EAAKoiB,OAAOlY,MAChB,IAAK,gBACD,OAAO1G,KAAK4kW,eAAepoW,GAC/B,IAAK,YACD,OAAOwD,KAAK6kW,mBAAmBroW,EAAMkxB,GACzC,IAAK,YACD,OAAO1tB,KAAK8kW,aAAatoW,EAAMkxB,GACnC,QACI,OAAOA,IAGnBsoB,EAAQ36C,UAAUypW,aAAe,SAAUtoW,EAAMkxB,GAS7C,OARIlxB,EAAKs3B,MAAM65S,QAAQ,KACd3tU,KAAKkkS,SAINx2Q,EAAS3gB,EAAIvQ,EAAKs3B,MAAM65S,QAAQ,GAAG5gU,EAAIvQ,EAAKs3B,MAAM65S,QAAQ,GAAG33T,MAAQ,EAHrE0X,EAAS1gB,EAAIxQ,EAAKs3B,MAAM65S,QAAQ,GAAG3gU,EAAIxQ,EAAKs3B,MAAM65S,QAAQ,GAAG53T,OAAS,GAMvE2X,GAEXsoB,EAAQ36C,UAAUwpW,mBAAqB,SAAUroW,EAAMkxB,GASnD,OARK1tB,KAAKkkS,SAKNx2Q,EAAS3gB,EAAKvQ,EAAKs3B,MAAM9mB,EAAI,EACzB0gB,EAAS3gB,EAAIvQ,EAAKs3B,MAAM65S,QAAQ,GAAG33T,MAAQ0X,EAAS3gB,EALxD2gB,EAAS1gB,EAAKxQ,EAAKs3B,MAAM9mB,EAAI,EACzB0gB,EAAS1gB,EAAIxQ,EAAKs3B,MAAM65S,QAAQ,GAAG53T,OAAS2X,EAAS1gB,EAMtD0gB,GAEXsoB,EAAQ36C,UAAUkrE,eAAiB,SAAUouQ,GACzC,IAAI/1T,EAAS+1T,EAAU/1T,OACvB,OAAO5e,KAAKqkW,cAAc1vB,EAAU7gT,MAAOlV,EAAQ5e,KAAKu8R,UAAUv8R,KAAK6wB,MAAOjS,GAASA,EAAO9G,MAAO8G,EAAOhH,QAEhHo+B,EAAQ36C,UAAUqpW,gBAAkB,SAAUloW,GAC1C,GAAIwD,KAAK6wB,MAAMgB,QAAQ5iB,SAAU,CAC7B,IAAI6kB,EAAQp1B,KAAWlC,EAAKs3B,OAS5B,OARAA,EAAM/mB,EAAI/M,KAAK+kW,iBAAiBvoW,EAAKs3B,MAAOt3B,EAAKoiB,OAAO9G,MAAO,KAAK,GAAM,GAC1C,OAA3Btb,EAAKoiB,OAAO4c,WACb1H,EAAM9mB,EAAIhN,KAAK+kW,iBAAiBvoW,EAAKs3B,MAAOt3B,EAAKoiB,OAAOhH,MAAO,KAAK,GAAO,IAG3Ekc,EAAM4H,IAAM17B,KAAK+kW,iBAAiBvoW,EAAKs3B,MAAOt3B,EAAKoiB,OAAOhH,MAAO,OAAO,GAAO,GAC/Ekc,EAAM2H,KAAOz7B,KAAK+kW,iBAAiBvoW,EAAKs3B,MAAOt3B,EAAKoiB,OAAOhH,MAAO,QAAQ,GAAO,IAE9Ekc,EAGP,OAAOt3B,EAAKs3B,OAGpBkiB,EAAQ36C,UAAUspW,eAAiB,SAAUnoW,EAAMq0B,GAC1CA,EAAMiG,qBAYP92B,KAAKoiW,QAAU,EAAInuU,GAAmBz3B,EAAKs3B,MAAMtF,OAAQhyB,EAAKoiB,OAAO9G,QAAUtb,EAAKoiB,OAAO9G,MAAMub,KAAKtd,OAChGvZ,EAAKoiB,OAAO9G,MAAMub,KAAKrmB,EAC7BhN,KAAKmiW,OAAStxU,EAAMk8S,SAbQ,eAAxBl8S,EAAM+8S,cACN5tU,KAAKmiW,OAAS5tU,GAAwB/3B,EAAKs3B,MAAMtF,OAAQhyB,EAAKoiB,OAAO9G,OAAStb,EAAKoiB,OAAO9G,MAAMub,KAAKrd,MAC/FxZ,EAAKoiB,OAAO9G,MAAMub,KAAKtmB,EAG7B/M,KAAKmiW,OAASluU,GAAmBz3B,EAAKs3B,MAAMtF,OAAQhyB,EAAKoiB,OAAO9G,OAAStb,EAAKoiB,OAAO9G,MAAMub,KAAKrd,MAC1FxZ,EAAKoiB,OAAO9G,MAAMub,KAAKtmB,EAEjC/M,KAAKoiW,OAASvxU,EAAMm8S,SAQ5Bh3R,EAAQ36C,UAAU6oW,qBAAuB,SAAUrzU,EAAO0xQ,EAASmB,GAC/D,IAAIlnS,EAGAm4U,EAAoC,eAAxB9jT,EAAM+8S,cAAiC5tU,KAAK2sU,UAAY,KACxE3sU,KAAKkiW,gBACLliW,KAAKgjW,gBAAgBnyU,GACrB7wB,KAAKysU,iBACL,IAAI42B,KACAr+O,EAAgB,GAChBu9K,GACA/hS,SAASosB,eAAe5sB,KAAKgB,QAAQsC,GAAK,sBAAsB3B,YAAY+hS,GAEhF1jS,KAAK+jW,aACL,IAAK,IAAI3lW,EAAK,EAAGyE,EAAKguB,EAAMoQ,cAAe7iC,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC7D,IAAIwgB,EAAS/b,EAAGzE,GACXwgB,EAAOi2T,gBAGgB,cAAxBhkT,EAAM+8S,eAAiChvT,EAAO4Y,QAC9Ch7B,EAAOwD,KAAKkuU,YAAYr9S,EAAOjS,GAEF,eAAxBiS,EAAM+8S,eAAkChvT,EAAO4Y,SAA+B,OAApBm9S,EAAU7gT,QACzEt3B,EAAO,IAAI8nU,GAAU1lT,EAAO+Y,OAAOg9S,EAAU7gT,MAAM7hB,OAAQ2M,IAE3DpiB,GAAwB,KAAhBwD,KAAK4kF,QAA+C,IAA9B5kF,KAAKysU,cAAchwU,SACjDuoH,EAAgBhlH,KAAKokW,WAAW5nW,IAEhCA,GAAQwD,KAAKwpJ,aAAahtJ,EAAM+lS,EAASviS,KAAKumE,eAAe/pE,KAC7DwD,KAAK2kW,eAAenoW,EAAMq0B,GAC1B7wB,KAAKysU,cAAcjoU,KAAKhI,GACxBA,EAAO,MAEFA,GACL6mW,EAAY7+V,KAAKhI,IAGrBwD,KAAKysU,cAAchwU,OAAS,EAC5BuD,KAAKo1B,cAAcvE,EAAO0xQ,EAASv9K,EAAehlH,KAAKglW,qBAAoD,IAA9BhlW,KAAKysU,cAAchwU,OAAeuD,KAAKysU,cAAc,GAAG7tT,OAAO8V,SAAW,KAAM,KAAM10B,KAAKskW,aAActkW,KAAKykW,iBAAiBzkW,KAAKysU,cAAc,IAAK57S,EAAM6jT,qBAAqB7P,eAAgBw+B,GAE1QrjW,KAAKutB,WAAWvtB,KAAKgB,QAAQsC,GAAK,kBACvCtD,KAAKutB,WAAWvtB,KAAKgB,QAAQsC,GAAK,iBAAiBE,aAAa,IAAK,KAG7EwyC,EAAQ36C,UAAU2pW,mBAAqB,WACnC,OAAIhlW,KAAKysU,cAAchwU,OAAS,EACrB,IAAIm3B,GAAc5zB,KAAKmiW,OAAQniW,KAAKoiW,QAGpCpiW,KAAKwkW,kBAAkBxkW,KAAKysU,cAAc,KAGzDz2R,EAAQ36C,UAAUupW,eAAiB,SAAUpoW,GAOzC,OALWwD,KAAKukU,UAAY,EAAI/nU,EAAKs3B,MAAMw6S,gBAAgBtuU,KAAKukU,UAAY,IAEpEx3T,EAAGvQ,EAAKs3B,MAAM65S,QAAQ,GAAG5gU,EAAKvQ,EAAKs3B,MAAM65S,QAAQ,GAAG33T,MAAQ,EAC5DhJ,EAAGxQ,EAAKs3B,MAAM65S,QAAQ,GAAG3gU,EAAKxQ,EAAKs3B,MAAM65S,QAAQ,GAAG53T,OAAS,IAIzEigC,EAAQ36C,UAAUgpW,cAAgB,SAAUvwU,EAAOlV,EAAQod,EAAQlkB,EAAOF,GAK1D5X,KAAK6wB,MACjB,IAAK,IALD5I,EACA0oB,EAIKvyC,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKw2B,GAAQ11B,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC5D,IAAI6mW,EAAYpiW,EAAGzE,GACnB6pB,EAAM,IAAIjE,OAAO,WAAkBihV,EAAY,IAAK,MACpDjpU,EAASA,EAAOzsB,QAAQ0Y,EAAI1rB,OAAQyD,KAAK+kW,iBAAiBjxU,EAAsB,eAAf7L,EAAI1rB,OAA0Bub,EAAQF,EAAOqtV,EAA0B,eAAfh9U,EAAI1rB,OAAyC,kBAAf0rB,EAAI1rB,QACxI,kBAAf0rB,EAAI1rB,QACW,mBAAf0rB,EAAI1rB,QACW,iBAAf0rB,EAAI1rB,QACW,eAAf0rB,EAAI1rB,QACW,qBAAf0rB,EAAI1rB,QACW,qBAAf0rB,EAAI1rB,QACW,sBAAf0rB,EAAI1rB,QACW,2BAAf0rB,EAAI1rB,QACW,2BAAf0rB,EAAI1rB,QACW,oBAAf0rB,EAAI1rB,SAEZ,IAAK,IAAI0H,EAAK,EAAGwG,EAAKnM,OAAOhB,KAAKgB,OAAO4mW,eAAetmV,IAAU3a,EAAKwG,EAAGhO,OAAQwH,IAAM,CAChFghW,EAAYx6V,EAAGxG,GACnBgkB,EAAM,IAAIjE,OAAO,YAAmBihV,EAAY,IAAK,MACrDt0T,EAAY/xB,EAAOqmV,GACnBjpU,EAASA,EAAOzsB,QAAQ0Y,EAAI1rB,OAAQo0C,GAExC,OAAO3U,GAEXga,EAAQ36C,UAAU0pW,iBAAmB,SAAUjxU,EAAO3d,EAAM8uV,EAAWE,EAAUC,GAC7E,IAAIz0T,EACApV,EACAv+B,EAeJ,MAduB,aAAnBmZ,EAAK+b,WAA4BizU,EAEjCx0T,GADApV,EAAoBplB,EAAKmlB,aAAqD,OAAtCnlB,EAAKmlB,YAAY3rB,MAAM,YAC/BwG,EAAKmlB,YAAY/rB,QAAQ,UAAW4G,EAAK6lB,OAAOlI,EAAMmxU,KAClF9uV,EAAK6lB,OAAOlI,EAAMmxU,IAEjBG,GACL7pU,EAAoBplB,EAAKmlB,aAAqD,OAAtCnlB,EAAKmlB,YAAY3rB,MAAM,WAC/D3S,EAAsB,aAAdioW,EAA2B9uV,EAAK6lB,OAAOlI,EAAMmxU,GAAWjlW,KAAKukU,UAAY,IAC7EpuT,EAAK6lB,OAAOlI,EAAMmxU,IACtBt0T,EAAYpV,EAAoBplB,EAAKmlB,YAAY/rB,QAAQ,UAAWvS,GAASA,GAG7E2zC,EAAY7c,EAAMmxU,GAEft0T,GAEXqF,EAAQ36C,UAAUkhS,UAAY,SAAU1rQ,EAAOjS,GAC3C,GAAIiS,EAAMgB,QAAQmK,OACd,MAA0B,OAAtBpd,EAAO4c,YAA2C,cAApB5c,EAAOw7K,SAC9Bp6L,KAAKqlW,0BAA0BzmV,EAAQiS,EAAOA,EAAMgB,QAAQmK,QAEhEnL,EAAMgB,QAAQmK,OAEzB,IAAIspU,EAAyB,cAAhB1mV,EAAOlY,KAAwB,oCAAgD,aACxFs1B,EAAUnL,EAAMgB,QAAQsxQ,OAAiB,iBAARmiE,EACrC,OAAQ1mV,EAAO4c,YACX,IAAK,KAID,MAHwB,cAApB5c,EAAOw7K,UACPp6L,KAAKqlW,0BAA0BzmV,EAAQiS,EAAOA,EAAMgB,QAAQmK,QAEzDA,EAAS,OAA0B,WAAhBpd,EAAOlY,KAAqB,iDAChD,qBACV,IAAK,UACD,OAAOs1B,mEACX,IAAK,mBACD,OAAOA,qIAEX,IAAK,UACD,OAAOA,EAAS,SAAWh8B,KAAKukU,UAAY,EAAI,sCAC5C,6LAIZ,MAAO,IAEXvuR,EAAQ36C,UAAUgqW,0BAA4B,SAAUzmV,EAAQiS,EAAOmL,GASnE,MAN0B,OAAtBpd,EAAO4c,WACG5c,EAAO6Y,KAAO,gBAGduE,GAOlBga,EAAQ36C,UAAUy5U,wBAA0B,SAAUt4U,GAClD,IAAK,IAAI4B,EAAK,EAAGi/G,EAAS7gH,EAAM4B,EAAKi/G,EAAO5gH,OAAQ2B,IAAM,CACtD,IAAIyf,EAAOw/F,EAAOj/G,GAClBovB,GAAcxtB,KAAKgB,QAAQsC,GAAK,WAAaua,EAAKe,OAAO3M,MACrD,UAAY4L,EAAKiW,MAAM7hB,MAAQ,cAEnCjS,KAAK6wB,MAAMgjT,cACX7zU,KAAK6wB,MAAMgjT,aAAaiB,0BAE5B90U,KAAK0sU,mBAKT12R,EAAQ36C,UAAUkkC,cAAgB,WAI9B,MAAO,WAOXyW,EAAQ36C,UAAUiX,QAAU,SAAUue,KAK/BmlB,GACT6sT,IC3aE0C,GAAyB,WAEzB,SAASA,EAAQ10U,GACb7wB,KAAK6wB,MAAQA,EACb7wB,KAAKu0C,UAAY1jB,EAAM7vB,QAAQsC,GAC/BtD,KAAKwlW,eAAiB,UACtBxlW,KAAKylW,UAAY,UA4NrB,OArNAF,EAAQlqW,UAAUqqW,gBAAkB,SAAUvrU,EAAc9lB,EAAewc,GACvE,IAAIk7E,EAAS/rG,KAAK6wB,MAAMhD,SACpB43U,EAAYzlW,KAAK6wB,MAAMiiD,WAAWksQ,UAAYh/U,KAAKwlW,eAAiBxlW,KAAKylW,UACzEjwU,EAAY,yFAChBA,GAAa,uGACb2E,EAAa72B,GAAKtD,KAAKu0C,UAAY,eACnCpa,EAAa32B,aAAa,aAAcxD,KAAK6wB,MAAMkrT,kBAAkB,QACrE/7U,KAAK2lW,YAAcxrU,EACnBA,EAAax4B,YAAYoqG,EAAOpoE,cAAc,IAAIugS,GAAWlkU,KAAKu0C,UAAY,iBAAkB,iBAAmB,EAAG,IAAIre,GAAK,EAAG,EAAG,GAAI,OACzIiE,EAAax4B,YAAYoqG,EAAO51E,SAAS,IAAIC,GAAWp2B,KAAKu0C,UAAY,iBAAkBkxT,EAAW,KAAM,KAAM,EAAG,KAAMjwU,KAC3HnhB,EAAc1S,YAAYw4B,GAC1Bn6B,KAAKukB,WAAW4V,EAAcn6B,KAAK4lW,MAOvCL,EAAQlqW,UAAUwqW,iBAAmB,SAAU1rU,EAAc9lB,EAAewc,GACxE,IAAIk7E,EAAS/rG,KAAK6wB,MAAMhD,SACpB43U,EAAYzlW,KAAK6wB,MAAMiiD,WAAWksQ,UAAYh/U,KAAKylW,UAAYzlW,KAAKwlW,eACpEhwU,EAAY,qGAChBA,GAAa,qHACbA,GAAwB,8FACxB2E,EAAa72B,GAAKtD,KAAKu0C,UAAY,gBACnCpa,EAAa32B,aAAa,aAAcxD,KAAK6wB,MAAMkrT,kBAAkB,SACrE/7U,KAAK8lW,aAAe3rU,EACpBA,EAAax4B,YAAYoqG,EAAOpoE,cAAc,IAAIugS,GAAWlkU,KAAKu0C,UAAY,kBAAmB,iBAAmB,EAAG,IAAIre,GAAK,EAAG,EAAG,GAAI,OAC1IiE,EAAax4B,YAAYoqG,EAAO51E,SAAS,IAAIC,GAAWp2B,KAAKu0C,UAAY,kBAAmBkxT,EAAW,KAAM,KAAM,EAAG,KAAMjwU,EAAY,6DACxInhB,EAAc1S,YAAYw4B,GAC1Bn6B,KAAKukB,WAAW4V,EAAcn6B,KAAK+lW,OAOvCR,EAAQlqW,UAAU2qW,mBAAqB,SAAU7rU,EAAc9lB,EAAewc,GAC1E,IAAIk7E,EAAS/rG,KAAK6wB,MAAMhD,SACpB43U,EAAYzlW,KAAKylW,UACjBjwU,EAAY,gGAChBA,GAAa,8GACbA,GAAa,+GACb2E,EAAa72B,GAAKtD,KAAKu0C,UAAY,kBACnCpa,EAAa32B,aAAa,aAAcxD,KAAK6wB,MAAMkrT,kBAAkB,WAErE5hT,EAAax4B,YAAYoqG,EAAOpoE,cAAc,IAAIugS,GAAWlkU,KAAKu0C,UAAY,oBAAqB,iBAAmB,EAAG,IAAIre,GAAK,EAAG,EAAG,GAAI,OAC5IiE,EAAax4B,YAAYoqG,EAAO51E,SAAS,IAAIC,GAAWp2B,KAAKu0C,UAAY,oBAAqBkxT,EAAW,KAAM,KAAM,EAAG,KAAMjwU,EAAY,2FAC1I2E,EAAax4B,YAAYoqG,EAAOwM,YAAY,IAAI6rN,GAAcpkU,KAAKu0C,UAAY,oBAAqB0xT,wJAAsFR,KAC1LzlW,KAAKkmW,eAAiB/rU,EACtBn6B,KAAKmmW,eAAiBt1U,EAAMiiD,WAAWksQ,UAAY,MAAQ,IAC3D7kT,EAAa32B,aAAa,UAAWxD,KAAKmmW,gBAC1C9xV,EAAc1S,YAAYw4B,GAC1Bn6B,KAAKukB,WAAW4V,EAAcn6B,KAAKomW,SAOvCb,EAAQlqW,UAAUgrW,oBAAsB,SAAUlsU,EAAc9lB,EAAewc,GAC3E,IAAIk7E,EAAS/rG,KAAK6wB,MAAMhD,SACpB43U,EAAYzlW,KAAKylW,UACjBjwU,EAAY,iFAChBA,GAAa,uGACbA,GAAa,oHACb2E,EAAa72B,GAAKtD,KAAKu0C,UAAY,mBACnCpa,EAAa32B,aAAa,aAAcxD,KAAK6wB,MAAMkrT,kBAAkB,YACrE5hT,EAAax4B,YAAYoqG,EAAOpoE,cAAc,IAAIugS,GAAWlkU,KAAKu0C,UAAY,qBAAsB,iBAAmB,EAAG,IAAIre,GAAK,EAAG,EAAG,GAAI,OAC7IiE,EAAax4B,YAAYoqG,EAAO51E,SAAS,IAAIC,GAAWp2B,KAAKu0C,UAAY,qBAAsBkxT,EAAW,KAAM,KAAM,EAAG,KAAMjwU,EAAY,0FAC3Ix1B,KAAKsmW,gBAAkBnsU,EACvBn6B,KAAKmmW,eAAiBt1U,EAAMiiD,WAAWksQ,UAAY,MAAQ,IAC3D7kT,EAAa32B,aAAa,UAAWxD,KAAKmmW,gBAC1C9xV,EAAc1S,YAAYw4B,GAC1Bn6B,KAAKukB,WAAW4V,EAAcn6B,KAAKumW,UAOvChB,EAAQlqW,UAAUmrW,kBAAoB,SAAUrsU,EAAc9lB,EAAewc,EAAOnK,GAChF,IAEIoG,EAFAi/E,EAAS/rG,KAAK6wB,MAAMhD,SACpB43U,EAAYzlW,KAAKylW,UAEjBjwU,EAAY,kGAChBA,GAAa,wGACbA,GAAa,sHACb2E,EAAa72B,GAAKtD,KAAKu0C,UAAY,iBACnCpa,EAAa32B,aAAa,aAAcxD,KAAK6wB,MAAMkrT,kBAAkB,UAChEr1T,GAKDoG,EAAON,GAAYxsB,KAAK6wB,MAAMkrT,kBAAkB,cAAgBjvT,KAAM,SACtEqN,EAAax4B,YAAYoqG,EAAOpoE,cAAc,IAAIugS,GAAWlkU,KAAKu0C,UAAY,mBAAoB,iBAAmB,EAAG,IAAIre,GAAK,EAAG,EAAGpJ,EAAK9W,MAAO8W,EAAK/W,WACxJugB,GAAY,IAAIC,GAAWv2B,KAAKu0C,UAAY,mBAAoB,EAAIznB,EAAK9W,MAAQ,EAAG,EAAkB,EAAd8W,EAAK/W,OAAa,EAAG,SAAU/V,KAAK6wB,MAAMkrT,kBAAkB,aAAc,gBAAqC,SAAWjvT,KAAM,QAAU,QAASqN,KAN3OA,EAAax4B,YAAYoqG,EAAOpoE,cAAc,IAAIugS,GAAWlkU,KAAKu0C,UAAY,mBAAoB,iBAAmB,EAAG,IAAIre,GAAK,EAAG,EAAG,GAAI,OAC3IiE,EAAax4B,YAAYoqG,EAAO51E,SAAS,IAAIC,GAAWp2B,KAAKu0C,UAAY,mBAAoBkxT,EAAW,KAAM,KAAM,EAAG,KAAMjwU,EAAY,sFAO7InhB,EAAc1S,YAAYw4B,GAC1Bn6B,KAAKukB,WAAW4V,EAAcn6B,KAAKouC,QAOvCm3T,EAAQlqW,UAAUkpB,WAAa,SAAUvjB,EAASgyE,GAC9CztE,GAAanB,IAAIpD,EAAS,uBAAwBgyE,EAAShzE,MAC3DuF,GAAanB,IAAIpD,EAAS,YAAahB,KAAK0xB,YAAa1xB,MACzDuF,GAAanB,IAAIpD,EAAS,WAAYhB,KAAKikW,cAAejkW,OAO9DulW,EAAQlqW,UAAUq2B,YAAc,SAAUp1B,GACtC,IAAImwB,EAAOnwB,EAAM8xG,cAAc9qG,GAAGpG,MAAM,aAAa,GACjDsP,EAAQlQ,EAAMwP,OAAS0gB,GAAYC,GAAQK,KAAM,SAAU9W,MAAQ,GAClEhW,KAAK6wB,MAAMe,SACZwD,GAAc,oBAAqBp1B,KAAK6wB,MAAMkrT,kBAAkBtvT,GAAQnwB,EAAM4P,MAAQ,GAAKM,EAAM,SAIzG+4V,EAAQlqW,UAAU4oW,cAAgB,WAC9Bz2U,GAAc,sBAIlB+3U,EAAQlqW,UAAU+yC,MAAQ,WACtB,IAAIvd,EAAQ7wB,KAAK6wB,MAqBjB,OApBKA,EAAMiiD,WAAWpsD,UAClBniB,EAAOssB,EAAMiiD,WAAW2zR,iBAE5BzmW,KAAKikW,gBACLpzU,EAAMS,UAAU9tB,aAAa,SAAU,QACvCqtB,EAAM81S,gBAAgBvnU,QAAQ,SAAU+W,GACpCA,EAAKi4D,WAAa,EAClBj4D,EAAK2oT,aAAe,EAChB3oT,EAAK0f,mBACL1f,EAAK0f,iBAAiBozS,YAAa,KAG3Cp4S,EAAMixU,qBAAsB,EAC5BjxU,EAAMiiD,WAAWmzP,SAAWp1S,EAAMiiD,WAAWksQ,UAAYnuT,EAAMwwT,YAAcxwT,EAAMQ,aAAc,EACjGR,EAAMiiD,WAAW4zR,cAAgB71U,EAAMiiD,WAAW6zR,kBAClD91U,EAAMiiD,WAAW2xQ,YAAc,KAC/B5zT,EAAM6uT,YACN7uT,EAAMy0S,cACNz0S,EAAMmgT,eACNhxU,KAAKmmW,eAAiB,KACf,GAEXZ,EAAQlqW,UAAU+qW,OAAS,SAAUvlW,GAEjC,OADAb,KAAK4mW,qBAAqB,EAAG5mW,KAAK6wB,MAAO7wB,KAAK6wB,MAAM81S,gBAAiB3mU,KAAK6wB,MAAMw9C,aAAatwC,OACtF,GAEXwnU,EAAQlqW,UAAUkrW,QAAU,SAAU1lW,GAElC,OADAb,KAAK4mW,sBAAsB,EAAG5mW,KAAK6wB,MAAO7wB,KAAK6wB,MAAM81S,gBAAiB3mU,KAAK6wB,MAAMw9C,aAAatwC,OACvF,GAEXwnU,EAAQlqW,UAAU0qW,KAAO,SAAUllW,GAC/Bb,KAAK6wB,MAAMiiD,WAAWksQ,WAAY,EACjBh/U,KAAK6wB,MAAMiiD,WAO5B,OANA9yE,KAAKmmW,eAAiB,IACtBnmW,KAAK6wB,MAAMS,UAAU9tB,aAAa,SAAU,QAC5CxD,KAAKkmW,eAAe1iW,aAAa,UAAWxD,KAAKmmW,gBACjDnmW,KAAKsmW,gBAAgB9iW,aAAa,UAAWxD,KAAKmmW,gBAClDnmW,KAAK6mW,eAAe7mW,KAAK8lW,aAAav0V,WAAYvR,KAAKwlW,gBACvDxlW,KAAK6mW,eAAe7mW,KAAK2lW,YAAYp0V,WAAY,YAC1C,GAGXg0V,EAAQlqW,UAAUuqW,IAAM,WACH5lW,KAAK6wB,MAAMiiD,WAS5B,OAPA9yE,KAAK6wB,MAAMiiD,WAAWksQ,WAAY,EAClCh/U,KAAK6wB,MAAMS,UAAU9tB,aAAa,SAAU,WAC5CxD,KAAKmmW,eAAiB,MACZnmW,KAAKkmW,eAAiBlmW,KAAKkmW,eAAe1iW,aAAa,UAAWxD,KAAKmmW,gBAAkB,KACzFnmW,KAAKsmW,gBAAkBtmW,KAAKsmW,gBAAgB9iW,aAAa,UAAWxD,KAAKmmW,gBAAkB,KAC3FnmW,KAAK2lW,YAAc3lW,KAAK6mW,eAAe7mW,KAAK2lW,YAAYp0V,WAAYvR,KAAKwlW,gBAAkB,KAC3FxlW,KAAK8lW,aAAe9lW,KAAK6mW,eAAe7mW,KAAK8lW,aAAav0V,WAAY,WAAa,MACtF,GAEXg0V,EAAQlqW,UAAUurW,qBAAuB,SAAUn7S,EAAO56B,EAAO42C,EAAM1pC,GACnE,IAAKlN,EAAMiiD,WAAWksQ,WAAqC,QAAxBh/U,KAAKmmW,eAA0B,CAC9D,IAAIW,EACAC,EACAC,EACJn2U,EAAMixU,qBAAsB,EAC5BjxU,EAAMQ,aAAc,EACpBo2C,EAAKroE,QAAQ,SAAU+W,IACO,eAArBA,EAAKijB,aAAyC,MAAT2E,GAChB,aAArB5nB,EAAKijB,aAAuC,MAAT2E,KACpCipU,EAAe36V,KAAKC,IAAID,KAAKC,IAAI,EAAIwtB,GAAO3jB,EAAKi4D,WAAY,EAAG,GAAI,GAAM,IAAO3iB,EAAQ,GACzFq7S,EAAiC,IAAjBE,EAAsB,EAAIltU,GAAO,EAAIktU,EAAc,EAAG,GACtED,EAAmC,IAAjBC,EAAsB,EAAI7wV,EAAK2oT,aAAmD,IAAlC3oT,EAAKi4D,WAAa04R,GAChF3wV,EAAK2oT,eAAiBioC,GAAkB5wV,EAAKi4D,aAAe04R,IAC5DA,EAAgBC,EAAiBD,EAAgB,EAAK,EAAIC,EAAkBD,GAEhF3wV,EAAKi4D,WAAa04R,EAClB3wV,EAAK2oT,aAAeioC,OAKpCxB,EAAQlqW,UAAUwrW,eAAiB,SAAUjjW,EAAU4yB,GACnD,IAAK,IAAIr6B,EAAI,EAAGs+B,EAAW72B,EAASnH,OAAQN,EAAIs+B,EAAUt+B,IACtDyH,EAASzH,GAAGqH,aAAa,OAAQgzB,IAGlC+uU,KClOP1qK,GAAsB,WAKtB,SAASA,EAAKhqK,GACV7wB,KAAK6wB,MAAQA,EACb7wB,KAAKyL,UAAYD,GAAQC,UACzBzL,KAAKinW,YAAcz7V,GAAQmb,KAAK8Q,KAChCz3B,KAAKknW,WAAkC,YAArBlnW,KAAKinW,YAA6BjnW,KAAKyL,UAAY,aAAe,iBAAoB,aACxGzL,KAAK66G,YAAc76G,KAAKyL,UAAY,eAAiB,aACrDzL,KAAKtD,mBACLsD,KAAK0mB,SAAWlb,GAAQkb,SACxB,IAAI45T,EAAUzvT,EAAMw9C,aACpBruE,KAAKmnW,QAAU,IAAI5B,GAAQ10U,GAC3B7wB,KAAKsgV,QAAUA,EACftgV,KAAKu0C,UAAY1jB,EAAM7vB,QAAQsC,GAC/BtD,KAAKonW,YAAc,IAAIlxU,GAAK,EAAG,EAAG,EAAG,GACrCl2B,KAAKqnW,YACLrnW,KAAKsnW,eAAiB,GACtBtnW,KAAKunW,MAAQ/7V,GAAQqb,OAASrb,GAAQq2V,OACtC7hW,KAAKimU,SAAWjmU,KAAK89U,YAAc99U,KAAKsgV,QAAQzC,WAAa79U,KAAKsgV,QAAQE,uBACtEF,EAAQta,kBACRn1S,EAAM2xF,cAAgBrhH,EAAc,OAASmC,GAAIutB,EAAM7vB,QAAQsC,GAAK,oBAmoB5E,OA5nBAu3L,EAAKx/L,UAAUmsW,cAAgB,SAAU3mW,EAAGgwB,EAAOe,GAC/C5xB,KAAKynW,uBAAuB52U,EAAOA,EAAM81S,kBACrC3mU,KAAKsgV,QAAQE,wBAA4B5uT,KACrCf,EAAMoxT,aAA8C,IAA/BjiV,KAAK2mW,eAAelqW,SAAoBuD,KAAKg/U,YAAanuT,EAAMoxT,YAKpFjiV,KAAKg/U,WAAanuT,EAAMwwT,eACxBzvT,GAAYA,GAA0C,IAA/B5xB,KAAK2mW,eAAelqW,UAC5CuD,KAAKykV,YAAc7yT,EAAU/wB,EAAEsG,OAAS,KACxCnH,KAAK0nW,MAAM72U,EAAOA,EAAM81S,mBAP5B3mU,KAAKg/U,YAAYh/U,KAAK0mB,UAAkB1mB,KAAKg/U,UAC7Ch/U,KAAK89U,aAAc,EACnB99U,KAAK2nW,qBAAqB92U,KAUlCgqK,EAAKx/L,UAAUssW,qBAAuB,SAAU92U,GAC5C,IAAI+xQ,EAAa/xQ,EAAM6jT,qBAAqB7P,eACxClrS,EAAgB,IAAI/F,GAAc/C,EAAMixT,mBAAoBjxT,EAAMmxT,oBAClEpoT,EAAc,IAAIhG,GAAc/C,EAAMk8S,OAAQl8S,EAAMm8S,QACpD35S,EAAOrzB,KAAKonW,YAAc1tU,GAAgBC,EAAeC,EAAagpQ,GACtEvvQ,EAAKrd,MAAQ,GAAKqd,EAAKtd,OAAS,IAChC/V,KAAKimU,UAAW,EAChBp1S,EAAMixU,qBAAsB,EAC5BjxU,EAAMS,UAAU9tB,aAAa,SAAU,aACb,MAAtBxD,KAAKsgV,QAAQviT,MACb1K,EAAKtd,OAAS6sR,EAAW7sR,OACzBsd,EAAKrmB,EAAI41R,EAAW51R,GAEO,MAAtBhN,KAAKsgV,QAAQviT,OAClB1K,EAAKrd,MAAQ4sR,EAAW5sR,MACxBqd,EAAKtmB,EAAI61R,EAAW71R,GAExB8jB,EAAMS,UAAU3vB,YAAYkvB,EAAMhD,SAAS8V,cAAc,IAAIugS,GAAWlkU,KAAKu0C,UAAY,YAAa1jB,EAAMwF,WAAWrG,mBAAqBwG,MAAO3F,EAAMwF,WAAWpG,oBAAqBja,MAAO,GAAK,EAAGqd,EAAM,EAAG,EAAG,GAAI,SAIhOwnK,EAAKx/L,UAAUqsW,MAAQ,SAAU72U,EAAO42C,GACpC,GAAI52C,EAAM2jT,WAAa3jT,EAAMyjT,UAAU70S,OACnC,OAAO,KAEX,IAAI4yC,EACA1mE,EACJ3L,KAAKimU,UAAW,EAChB,IAAI2hC,EACAC,EAeJ,GAdA7nW,KAAK2L,OAAUklB,EAAMQ,YAA0DrxB,KAAK2L,OAAjDklB,EAAM6jT,qBAAqB7P,eAC9Dh0S,EAAMQ,aAAc,EACpBR,EAAMixU,qBAAsB,EAC5Br6R,EAAKroE,QAAQ,SAAU+W,GACnBk8D,EAAehmE,KAAKC,IAAI,EAAIwtB,GAAO3jB,EAAKi4D,WAAY,EAAG,GAAI,GAClC,eAArBj4D,EAAKijB,aACLztB,GAAUklB,EAAMixT,mBAAqBjxT,EAAMk8S,QAAU52T,EAAKkd,KAAKrd,MAAQq8D,EACvEl8D,EAAK2oT,aAAehlS,GAAO3jB,EAAK2oT,aAAenzT,EAAQ,EAAI,EAAIwK,EAAKi4D,cAGpEziE,GAAUklB,EAAMmxT,mBAAqBnxT,EAAMm8S,QAAU72T,EAAKkd,KAAKtd,OAASs8D,EACxEl8D,EAAK2oT,aAAehlS,GAAO3jB,EAAK2oT,aAAenzT,EAAQ,EAAI,EAAIwK,EAAKi4D,eAGxEpuE,KAAKsgV,QAAQwnB,sBAAuB,CAGpC,OAFAF,EAAa/2U,EAAMk8S,OAASl8S,EAAMgxT,WAClCgmB,EAAah3U,EAAMm8S,OAASn8S,EAAMkxT,WAC1B/hV,KAAKsgV,QAAQviT,MACjB,IAAK,IACD8pU,EAAa,EACb,MACJ,IAAK,IACDD,EAAa,EAGrB5nW,KAAK+nW,aAAaH,EAAYC,EAAY,KAAM,KAAMh3U,GAAO,GAC7D7wB,KAAKslU,YAAYz0S,EAAM6jT,qBAAsB7jT,EAAOA,EAAM81S,sBAG1D3mU,KAAKgoW,kBAAkBn3U,GAE3BA,EAAMixT,mBAAqBjxT,EAAMk8S,OACjCl8S,EAAMmxT,mBAAqBnxT,EAAMm8S,QAOrCnyI,EAAKx/L,UAAU2sW,kBAAoB,SAAUn3U,GACzC,IAAIwC,EAAOrzB,KAAKonW,YAChBv2U,EAAM6iT,eAAgB,EAClB1zU,KAAKimU,WACD5yS,EAAKrd,MAAQ,GAAKqd,EAAKtd,OAAS,GAChC/V,KAAK89U,aAAc,EACnBjtT,EAAMS,UAAU9tB,aAAa,SAAU,QACvCxD,KAAKioW,OAAOp3U,EAAOA,EAAM81S,gBAAiB91S,EAAM6jT,qBAAqB7P,gBACrEh0S,EAAMoxT,aAAc,GAEfpxT,EAAMixU,sBACXjxU,EAAMixU,qBAAsB,EAC5BjxU,EAAMQ,aAAc,EACpBR,EAAM6uT,YACN7uT,EAAMy0S,cACNz0S,EAAMmgT,kBAIlBn2I,EAAKx/L,UAAUiqU,YAAc,SAAUz0Q,EAAQhgC,EAAO42C,GAClD,IAAI1pC,EAAOlN,EAAMw9C,aAAatwC,KAC9B8yB,EAAO+zQ,YAAY,IAAI1uS,GAAKrF,EAAMi0S,gBAAgB/3T,EAAG8jB,EAAMi0S,gBAAgB93T,EAAG6jB,EAAMi0S,gBAAgB9uT,MAAO6a,EAAMi0S,gBAAgB/uT,SACjI0xD,EAAK7vC,IAAI,SAAUzhB,EAAMlE,GACI,eAArBkE,EAAKijB,aAAyC,MAAT2E,GACrC8yB,EAAO23Q,gBAAgBryT,EAAMlE,EAAO,KAAOkE,EAAKgsT,oBAAsBhsT,EAAKsrT,YAActrT,EAAKkd,MAEzE,aAArBld,EAAKijB,aAAuC,MAAT2E,GACnC8yB,EAAO+3Q,gBAAgBzyT,EAAMlE,EAAO,KAAOkE,EAAKgsT,oBAAsBhsT,EAAKsrT,YAActrT,EAAKkd,SAK1GwnK,EAAKx/L,UAAU4sW,OAAS,SAAUp3U,EAAO42C,EAAM/wC,GAC3C,IAEIkC,EACAsvU,EACAC,EACAC,EACAC,EANAC,EAAWtoW,KAAKonW,YAChBrpU,EAAO/9B,KAAKsgV,QAAQviT,KAMxB/9B,KAAKg/U,UAAYnuT,EAAMw9C,aAAawvQ,WAAa79U,KAAKg/U,UACtDv3Q,EAAKroE,QAAQ,SAAU+W,GACnB+xV,EAAaE,EAAYjyV,EAAKi4D,WAC9B+5R,EAAaE,EAAYlyV,EAAK2oT,aAC9BlmS,GACIC,QAAQ,EAAOpB,KAAMuoS,GAAc7pT,KAAMA,EAAMoyV,mBAAoBL,EAAYM,qBAAsBL,EACrGM,kBAAmBL,EAAWM,oBAAqBL,GAE9B,eAArBlyV,EAAKijB,YACQ,MAAT2E,IACAsqU,GAAah8V,KAAKE,KAAK+7V,EAASv7V,EAAI2pB,EAAO3pB,GAAM2pB,EAAY,OAAKvgB,EAAKi4D,WACvEg6R,GAAcE,EAAStyV,MAAQ0gB,EAAO1gB,MACtC4iB,EAAS8vU,oBAAsBL,EAC/BzvU,EAAS6vU,kBAAoBL,EAC7Bv3U,EAAMrK,QAAQw5S,GAAcpnS,IAInB,MAATmF,IACAsqU,IAAc,EAAIh8V,KAAKE,KAAK+7V,EAASvyV,QAAUuyV,EAASt7V,EAAI0pB,EAAO1pB,IAAO0pB,EAAa,SAAMvgB,EAAKi4D,WAClGg6R,GAAcE,EAASvyV,OAAS2gB,EAAO3gB,OACvC6iB,EAAS6vU,kBAAoBL,EAC7BxvU,EAAS8vU,oBAAsBL,EAC/Bx3U,EAAMrK,QAAQw5S,GAAcpnS,IAG/BA,EAASC,SACV1iB,EAAKi4D,WAAax1C,EAAS6vU,kBAC3BtyV,EAAK2oT,aAAelmS,EAAS8vU,uBAGrC1oW,KAAKonW,YAAc,IAAIlxU,GAAK,EAAG,EAAG,EAAG,GACrCl2B,KAAKgoW,kBAAkBn3U,IAO3BgqK,EAAKx/L,UAAUstW,yBAA2B,SAAU9nW,EAAGksU,EAAQC,EAAQn8S,EAAO42C,GAC1E,IAIImhS,EACAx6R,EACA0wP,EANAtpS,EAAkC,YAArBx1B,KAAKinW,aAA8BjnW,KAAKyL,UACrB5K,EAAE48H,WAAa,IAAO,EAAI,GAAK,GAA7D58H,EAAQ,OAAI,EAAI,EAAI,GAAK,EAC3Bk9B,EAAO/9B,KAAKsgV,QAAQviT,KACpBk7O,EAAS,GAIbj5Q,KAAKimU,UAAW,EAChBjmU,KAAKynW,uBAAuB52U,EAAOA,EAAM81S,iBACzC91S,EAAMixU,qBAAsB,EAC5B9hW,KAAK89U,aAAc,EACnB99U,KAAKg/U,UAAYnuT,EAAMw9C,aAAawvQ,WAAa79U,KAAKg/U,UACtDv3Q,EAAKroE,QAAQ,SAAU+W,IACO,aAArBA,EAAKijB,aAAuC,MAAT2E,GACd,eAArB5nB,EAAKijB,aAAyC,MAAT2E,MACtC6qU,EAAav8V,KAAKC,IAAID,KAAKC,IAAI,EAAIwtB,GAAO3jB,EAAKi4D,WAAY,EAAG,GAAI,GAAM,IAAO54C,EAAY,KACzE,IAEdyjP,GADAA,EAA8B,eAArB9iQ,EAAKijB,YAA+B2zS,EAAS52T,EAAKkd,KAAKrd,MAAQ,EAAKg3T,EAAS72T,EAAKkd,KAAKtd,QAC9E,EAAI,EAAIkjQ,EAAS,EAAI,EAAIA,EAC3C7qM,EAA6B,IAAfw6R,EAAoB,EAAI9uU,GAAO,EAAI8uU,EAAY,EAAG,GAChE9pC,EAA+B,IAAf8pC,EAAoB,EAAIzyV,EAAK2oT,cAAiB3oT,EAAKi4D,WAAaA,GAAc6qM,EAC1F9iQ,EAAK2oT,eAAiBA,GAAgB3oT,EAAKi4D,aAAeA,IAC1DA,EAAc0wP,EAAe1wP,EAAc,EAAK,EAAI0wP,EAAgB1wP,IAG5Ej4D,EAAKi4D,WAAaA,EAClBj4D,EAAK2oT,aAAeA,KAG5B9+T,KAAKgoW,kBAAkBn3U,IAO3BgqK,EAAKx/L,UAAUwtW,oBAAsB,SAAUhoW,EAAGgwB,GAC9C,GAAK7wB,KAAKonW,YAAYpxV,MAAQ,GAAKhW,KAAKonW,YAAYrxV,OAAS,GAAO8a,EAAM2jT,WAAa3jT,EAAMyjT,UAAU70S,OACnG,OAAO,EAEXz/B,KAAKynW,uBAAuB52U,EAAOA,EAAM81S,iBACzC3mU,KAAKimU,UAAW,EAChBjmU,KAAKg/U,WAAY,EACjBh/U,KAAK89U,aAAc,EACnB99U,KAAK2L,OAAUklB,EAAMQ,YAA0DrxB,KAAK2L,OAAjDklB,EAAM6jT,qBAAqB7P,eAC9Dh0S,EAAMQ,aAAc,EACpBR,EAAMixU,qBAAsB,EAC5B,IAWIh2T,EACAC,EACA+8T,EACAC,EACAC,EACAnjE,EACAC,EAjBAmjE,EAAgBp4U,EAAM7vB,QAAQ4K,wBAC9Bs9V,EAAYlpW,KAAK2mW,eACjBjvS,EAAY13D,KAAK0mW,cACjByC,EAAeD,EAAU,GAAGp9V,MAAQm9V,EAAcz8V,KAClD48V,EAAeF,EAAU,GAAGh9V,MAAQ+8V,EAAcv8V,IAClD28V,EAAa3xS,EAAU,GAAG5rD,MAAQm9V,EAAcz8V,KAChD88V,EAAa5xS,EAAU,GAAGxrD,MAAQ+8V,EAAcv8V,IAChD68V,EAAeL,EAAU,GAAGp9V,MAAQm9V,EAAcz8V,KAClDg9V,EAAeN,EAAU,GAAGh9V,MAAQ+8V,EAAcv8V,IAClD+8V,EAAa/xS,EAAU,GAAG5rD,MAAQm9V,EAAcz8V,KAChDk9V,EAAahyS,EAAU,GAAGxrD,MAAQ+8V,EAAcv8V,IAepD,GAPAo/B,EAASz/B,KAAKE,IAAI88V,EAAaI,GAAcp9V,KAAKE,IAAI48V,EAAeI,GACrEx9T,EAAS1/B,KAAKE,IAAI+8V,EAAaI,GAAcr9V,KAAKE,IAAI68V,EAAeI,GACrE3jE,GAAU7lS,KAAK2L,OAAOoB,EAAIs8V,GAAcv9T,EAAUq9T,EAClDrjE,GAAU9lS,KAAK2L,OAAOqB,EAAIs8V,GAAcv9T,EAAUq9T,EAClDJ,EAAY,IAAI9yU,GAAK2vQ,EAAOC,EAAO9lS,KAAK2L,OAAOqK,MAAQ81B,EAAQ9rC,KAAK2L,OAAOoK,OAASg2B,GACpF+8T,EAAmBO,EAAcv9T,EAASq9T,EAC1CJ,EAAmBO,EAAcv9T,EAASq9T,GACrCpnT,MAAMlW,EAASA,KAAYkW,MAAMjW,EAASA,GAC3C,OAAQ/rC,KAAKsgV,QAAQviT,MACjB,IAAK,KACD/9B,KAAK+nW,aAAae,EAAiBC,EAAiBj9T,EAAQC,EAAQlb,GAAO,GAC3E,MACJ,IAAK,IACD7wB,KAAK+nW,aAAae,EAAiB,EAAGh9T,EAAQ,EAAGjb,GAAO,GACxD,MACJ,IAAK,IACD7wB,KAAK+nW,aAAa,EAAGgB,EAAiB,EAAGh9T,EAAQlb,GAAO,GAMpE,OAFA7wB,KAAK2pW,yBAAyB94U,EAAOm4U,GACrChpW,KAAKslU,YAAYz0S,EAAM6jT,qBAAsB7jT,EAAOA,EAAM81S,kBACnD,GAEX9rI,EAAKx/L,UAAUsuW,yBAA2B,SAAU94U,EAAOm4U,GACvD,IAEIY,EACAC,EACAC,EACAC,EACA/sW,EACAgtW,EAPAjqW,EAAQC,KACR+9B,EAAO/9B,KAAKsgV,QAAQviT,KAOxBlN,EAAM81S,gBAAgBvnU,QAAQ,SAAU+W,EAAMlE,IAChB,eAArBkE,EAAKijB,aAAyC,MAAT2E,GAChB,aAArB5nB,EAAKijB,aAAuC,MAAT2E,KACX,eAArB5nB,EAAKijB,aACLp8B,EAAQgsW,EAAUj8V,EAAIhN,EAAM4L,OAAOoB,EACnCi9V,EAAY7zV,EAAKkd,KAAKrd,MAAQjW,EAAMsnW,SAASp1V,GAAOgjB,MACpD60U,EAAW9sW,EAAQgtW,EAAYjqW,EAAMsnW,SAASp1V,GAAO8N,IACrD/iB,EAAQgsW,EAAUj8V,EAAIi8V,EAAUhzV,MAAQjW,EAAM4L,OAAOoB,EACrDg9V,EAAW/sW,EAAQgtW,EAAYjqW,EAAMsnW,SAASp1V,GAAO8N,MAGrD/iB,EAAQgsW,EAAUh8V,EAAIjN,EAAM4L,OAAOqB,EACnCg9V,EAAY7zV,EAAKkd,KAAKtd,OAAShW,EAAMsnW,SAASp1V,GAAOgjB,MACrD60U,IAAqB,EAAT9sW,EAAamZ,EAAKkd,KAAKtd,QAAUi0V,EAAYjqW,EAAMsnW,SAASp1V,GAAO8N,IAC/E/iB,EAAQgsW,EAAUh8V,EAAIg8V,EAAUjzV,OAAShW,EAAM4L,OAAOqB,EACtD+8V,IAAqB,EAAT/sW,EAAamZ,EAAKkd,KAAKtd,QAAUi0V,EAAYjqW,EAAMsnW,SAASp1V,GAAO8N,KAEnF6pV,EAAev9V,KAAK0T,IAAI+pV,EAAUC,GAClCF,EAAex9V,KAAKC,IAAIw9V,EAAUC,GAClC5zV,EAAK2oT,cAAgB8qC,EAAe7pW,EAAMsnW,SAASp1V,GAAOg4V,WAAalqW,EAAMsnW,SAASp1V,GAAOi4V,YAC7F/zV,EAAKi4D,YAAcy7R,EAAeD,GAAgB7pW,EAAMsnW,SAASp1V,GAAOi4V,YACxE/zV,EAAK2oT,aAAe3oT,EAAK2oT,aAAe,EAAI,EAAI3oT,EAAK2oT,aACrD3oT,EAAKi4D,WAAaj4D,EAAKi4D,WAAa,EAAI,EAAIj4D,EAAKi4D,eAK7DysH,EAAKx/L,UAAU0sW,aAAe,SAAUoC,EAAQC,EAAQt+T,EAAQC,EAAQlb,EAAOw5U,GAC3Ex5U,EAAMkiT,eAAevvU,aAAa,YAAa,QAAUxD,KAAKu0C,UAAY,wBACtE1jB,EAAMssT,mBACNtsT,EAAMssT,kBAAkB35U,aAAa,YAAa,QAAUxD,KAAKu0C,UAAY,wBAEjF,IAAIo6C,EACA27Q,EACAC,EACAvpW,EACW,OAAXmpW,GAA8B,OAAXC,GACnBv5U,EAAMoQ,cAAc7hC,QAAQ,SAAUpC,GAClCstW,EAAWz5U,EAAMiG,oBAAsB95B,EAAM4a,MAAMyb,KAAKtmB,EAAI/P,EAAM8a,MAAMub,KAAKtmB,EAC7Ew9V,EAAW15U,EAAMiG,oBAAsB95B,EAAM8a,MAAMub,KAAKrmB,EAAIhQ,EAAM4a,MAAMyb,KAAKrmB,EAC7E2hF,EAAY,cAAgBw7Q,GAAUE,EAAWv+T,EAASw+T,EAAYA,IAClE,KAAOF,GAAUC,EAAWt+T,EAASw+T,EAAYA,IAAa,IAClE57Q,EAAa7iD,GAAUC,EAAU4iD,EAAY,UAAY7iD,EAAS,IAAMC,EAAS,IAAM4iD,EAChE,cAAnB3xF,EAAMo9L,SACNp9L,EAAMq2U,cAAc5yU,WAAW+C,aAAa,YAAamrF,GAGzD3xF,EAAMq2U,cAAc7vU,aAAa,YAAamrF,GAElD3tF,EAAUusB,GAAWsD,EAAM7vB,QAAQsC,GAAK,WAAatG,EAAMiV,MAAQ,yBAC/DjV,EAAMu2U,iBACNv2U,EAAMu2U,gBAAgB/vU,aAAa,YAAamrF,GAEhD3xF,EAAMo2U,eACNp2U,EAAMo2U,cAAc5vU,aAAa,YAAamrF,GAE9C3xF,EAAMs5B,cACNt5B,EAAMs5B,YAAY9yB,aAAa,aAAc,UAC7CxG,EAAMy2U,aAAajwU,aAAa,aAAc,WAE9CxC,IACAA,EAAQ0D,MAAMC,WAAa,aAK3Ck2L,EAAKx/L,UAAUosW,uBAAyB,SAAU52U,EAAO42C,GACrD,IACI11C,EACAy4U,EAFAzqW,EAAQC,KAGZ6wB,EAAM81S,gBAAgBvnU,QAAQ,SAAU+W,EAAMlE,GAC1Cu4V,EAAYr0V,EAAKwc,aACb5yB,EAAMsnW,SAASp1V,GACV4e,EAAMQ,cACPtxB,EAAMsnW,SAASp1V,GAAO8N,IAAMyqV,EAAUzqV,IACtChgB,EAAMsnW,SAASp1V,GAAOgjB,MAAQu1U,EAAUv1U,QAI5ClD,GACIk4U,UAAW9zV,EAAK0nT,YAAY99S,IAC5BmqV,YAAa/zV,EAAK0nT,YAAY5oS,MAC9BlV,IAAKyqV,EAAUzqV,IACfkV,MAAOu1U,EAAUv1U,OAErBl1B,EAAMsnW,SAASp1V,GAAS8f,MAKpC8oK,EAAKx/L,UAAUovW,mBAAqB,SAAU55U,GAC1C,IAWI65U,EAEA1pW,EAbA2pW,EAAe3qW,KAAKsgV,QAAQrrQ,aAC5B2tN,EAAa/xQ,EAAM6jT,qBAAqB7P,eAExC94N,EAASl7E,EAAMhD,SACfpxB,EAASuD,KAAK0mB,SAAW,EAAIikV,EAAaluW,OAC1Cu8U,EAAWh5U,KAAK0mB,SAAW8F,GAAY,cAAgBM,KAAM,SAAU9W,MAAQ,GAC/ED,EAAS/V,KAAK0mB,SAAW8F,GAAY,cAAgBM,KAAM,SAAU/W,OAAS,GAC9EC,EAASvZ,EAASu8U,EALR,GAKsBv8U,EAAS,GAL/B,GAKiDA,EAAS,GACpE0tW,EAASvnE,EAAW71R,EAAI61R,EAAW5sR,MAAQA,EANjC,EAOVo0V,EAAUxnE,EAAW51R,EAPX,EAQVy5D,EARU,EAUV0gS,EAAUnnW,KAAKmnW,QAEfyD,EAAgB,8FAGpB,GAFAA,GAAiB,wGACjBA,GAAiB,oGACF,IAAXnuW,GAAgB8wB,GAAWvtB,KAAKu0C,UAAY,0BAC5C,OAAO,EAEX,IAAIowP,EAAa54L,EAAO6M,aACxB+xP,EAAe3qW,KAAK0mB,UAAY,SAAWikV,EAC3ChmE,EAAW3iS,UAAY4oW,EACvB5qW,KAAKymW,gBAAkB16P,EAAO1/B,aAC1B/oE,GAAItD,KAAKu0C,UAAY,yBACrBlnC,UAAW,aAAe88V,EAAS,IAAMC,EAAS,MAEtDpqW,KAAKymW,gBAAgB9kW,YAAYgjS,GACjC3kS,KAAKymW,gBAAgB9kW,YAAYoqG,EAAOpoE,cAAc,IAAIugS,GAAWlkU,KAAKu0C,UAAY,gBAAiB,WAAa/d,MAAO,cAAexgB,MAAO,GAAK,EAAG,IAAIkgB,GAAK,EAAG,EAAGlgB,EAAQD,MAA0B,EAAG,MAC7M20V,EAAe3+P,EAAOpoE,cAAc,IAAIugS,GAAWlkU,KAAKu0C,UAAY,gBAAiB,WAAa/d,MAAO,cAAexgB,MAAO,GAAK,GAAK,IAAIkgB,GAAK,EAAG,EAAGlgB,EAAQD,MAA0B,EAAG,KAChLvS,aAAa,SAAU,sBACpCxD,KAAKymW,gBAAgB9kW,YAAY+oW,GAEjC,IAAK,IADD9qR,EACKzjF,EAAI,EAAGA,GAAKM,EAAQN,IAAK,CAM9B,OALAyjF,EAAc+qR,EAAaxuW,EAAI,GAC/B6E,EAAU+qG,EAAO1/B,aACbh/D,UAAW,aAAeo5D,EAAY,KAAOzmE,KAAK0mB,SAlC5C,KAkCkF,MAGpFk5D,GACJ,IAAK,MACDunR,EAAQzB,gBAAgB1kW,EAAShB,KAAKymW,gBAAiB51U,GACvD,MACJ,IAAK,OACDs2U,EAAQtB,iBAAiB7kW,EAAShB,KAAKymW,gBAAiB51U,GACxD,MACJ,IAAK,SACDs2U,EAAQnB,mBAAmBhlW,EAAShB,KAAKymW,gBAAiB51U,GAC1D,MACJ,IAAK,UACDs2U,EAAQd,oBAAoBrlW,EAAShB,KAAKymW,gBAAiB51U,GAC3D,MACJ,IAAK,QACDs2U,EAAQX,kBAAkBxlW,EAAShB,KAAKymW,gBAAiB51U,EAAO7wB,KAAK0mB,UAG7E+/C,GAAauyQ,KAYjB,OAVAh5U,KAAKymW,gBAAgBjjW,aAAa,UAAWxD,KAAK0mB,SAAW,IAAM,GAAK1mB,KAAKsnW,gBAC7EtnW,KAAKymW,gBAAgBjjW,aAAa,SAAU,QAC5CqtB,EAAMS,UAAU3vB,YAAY3B,KAAKymW,iBAC5BzmW,KAAK0mB,WACNnhB,GAAanB,IAAIpE,KAAKymW,gBAAiB,uBAAwBzmW,KAAK6qW,gBAAiB7qW,MACrFuF,GAAanB,IAAIpE,KAAKymW,gBAAiB,sBAAuBzmW,KAAK8qW,iBAAkB9qW,MACjFA,KAAKg/U,WACLmoB,EAAQvB,QAGT,GAOX/qK,EAAKx/L,UAAU0iV,iBAAmB,SAAUltT,EAAO42C,GAC7BznE,KAAKi/U,aAAax3Q,IAEhCznE,KAAKyqW,mBAAmB55U,GACxB7wB,KAAKimU,UAAW,IAGhBjmU,KAAKmnW,QAAQlD,gBACbjkW,KAAKg/U,WAAY,EACjBh/U,KAAKimU,UAAW,EAChBp1S,EAAMS,UAAU9tB,aAAa,SAAU,UAQ/Cq3L,EAAKx/L,UAAU4jV,aAAe,SAAUx3Q,GACpC,IAAIsjS,GAAc,EAIlB,OAHAtjS,EAAKroE,QAAQ,SAAU+W,GACnB40V,EAAeA,GAAoC,IAApB50V,EAAKi4D,YAA0C,IAAtBj4D,EAAK2oT,eAE1DisC,GAEXlwK,EAAKx/L,UAAUwvW,gBAAkB,SAAUhqW,GACvC,IAAIG,EAAUhB,KAAKymW,gBACJzlW,EAAQ6R,aAAa,WAGpC,OAFA7S,KAAKsnW,eAAiB,EACtBtmW,EAAQwC,aAAa,UAAW,GAAKxD,KAAKsnW,iBACnC,GAEXzsK,EAAKx/L,UAAUyvW,iBAAmB,SAAUjqW,GACxC,IAAIG,EAAUhB,KAAKymW,gBAGnB,OAFAzmW,KAAKsnW,eAAiB,GACtBtmW,EAAQwC,aAAa,UAAW,GAAKxD,KAAKsnW,iBACnC,GAKXzsK,EAAKx/L,UAAUqB,iBAAmB,WAC1BsD,KAAK6wB,MAAMm2D,cAGfzhF,GAAanB,IAAIpE,KAAK6wB,MAAM7vB,QAAShB,KAAKknW,WAAYlnW,KAAKgrW,gBAAiBhrW,MAC5EA,KAAK6wB,MAAM+0D,GAAGp6E,GAAQ2+E,eAAgBnqF,KAAKq0U,iBAAkBr0U,MAC7DA,KAAK6wB,MAAM+0D,GAAGp6E,GAAQ0+E,gBAAiBlqF,KAAK6/G,iBAAkB7/G,MAC9DA,KAAK6wB,MAAM+0D,GAAGp6E,GAAQ4+E,cAAepqF,KAAK4pN,eAAgB5pN,MAC1DA,KAAK6wB,MAAM+0D,GAAG5lF,KAAK66G,YAAa76G,KAAKirW,mBAAoBjrW,QAK7D66L,EAAKx/L,UAAUuB,oBAAsB,WAC7BoD,KAAK6wB,MAAMm2D,cAGfzhF,GAAahB,OAAOvE,KAAK6wB,MAAM7vB,QAAShB,KAAKknW,WAAYlnW,KAAKgrW,iBAC9DhrW,KAAK6wB,MAAMm1D,IAAIx6E,GAAQ2+E,eAAgBnqF,KAAKq0U,kBAC5Cr0U,KAAK6wB,MAAMm1D,IAAIx6E,GAAQ0+E,gBAAiBlqF,KAAK6/G,kBAC7C7/G,KAAK6wB,MAAMm1D,IAAIx6E,GAAQ4+E,cAAepqF,KAAK4pN,gBAC3C5pN,KAAK6wB,MAAMm1D,IAAIhmF,KAAK66G,YAAa76G,KAAKirW,sBAO1CpwK,EAAKx/L,UAAU2vW,gBAAkB,SAAUnqW,GACvC,IAAIgwB,EAAQ7wB,KAAK6wB,MACbllB,EAASklB,EAAM7vB,QAAQ4K,wBACvB27D,EAAUh6C,GAAWsD,EAAM7vB,QAAQsC,GAAK,QAAQsI,wBAChDmhU,EAAUlsU,EAAEuzC,QAAUzoC,EAAOa,KAAQH,KAAKC,IAAIi7D,EAAQ/6D,KAAOb,EAAOa,KAAM,GAC1EwgU,EAAUnsU,EAAEwzC,QAAU1oC,EAAOe,IAAOL,KAAKC,IAAIi7D,EAAQ76D,IAAMf,EAAOe,IAAK,GAM3E,OALI1M,KAAKsgV,QAAQgD,yBACb7sT,GAAas2S,EAAQC,EAAQn8S,EAAM6jT,qBAAqB7P,kBACxDhkU,EAAE2kB,iBACFxlB,KAAK2oW,yBAAyB9nW,EAAGksU,EAAQC,EAAQn8S,EAAOA,EAAM81S,mBAE3D,GAKX9rI,EAAKx/L,UAAUg5U,iBAAmB,SAAUxzU,GAExC,IAAIgwB,EAAQ7wB,KAAK6wB,MACbsjB,EAAU,KACC,cAAXtzC,EAAE6F,OACE7F,EAAE2kB,gBAAkBxlB,KAAKunW,QACxBvnW,KAAKg/U,WAAcnuT,EAAiB,aAC7B7wB,KAAKsgV,QAAQG,oBAAsBzgV,KAAK2mW,eAAelqW,OAAS,IACxEoE,EAAE2kB,iBAEN2uB,EAAUtzC,EAAEszC,SAEZtjB,EAAMwwT,cACFxwT,EAAMe,UACN5xB,KAAK0mW,cAAgB1mW,KAAKi0C,gBAAgBj0C,KAAK0mW,cAAe7lW,EAAGszC,GAC7Dn0C,KAAKsgV,QAAQG,oBAAsBzgV,KAAK0mW,cAAcjqW,OAAS,GAC5DuD,KAAK2mW,eAAelqW,OAAS,GAChCuD,KAAK6oW,oBAAoBhoW,EAAGgwB,IAGpC7wB,KAAKwnW,cAAc3mW,EAAGgwB,EAAOA,EAAMe,WAM3CipK,EAAKx/L,UAAUwkH,iBAAmB,SAAUh/G,GAExC,IAEIsG,EAFA0pB,EAAQ7wB,KAAK6wB,MACbsjB,EAAU,KAEC,eAAXtzC,EAAE6F,MACFytC,EAAUtzC,EAAEszC,QACZhtC,EAAStG,EAAEsG,QAGXA,EAAStG,EAAEsG,QAE4C,IAAvDA,EAAO7D,GAAG/E,QAAQsyB,EAAM7vB,QAAQsC,GAAK,cACrCmzB,GAAa5F,EAAMixT,mBAAoBjxT,EAAMmxT,mBAAoBnxT,EAAM6jT,qBAAqB7P,kBAC5Fh0S,EAAMwwT,aAAc,GAEpBxwT,EAAMe,UACN5xB,KAAK2mW,eAAiB3mW,KAAKi0C,gBAAgBj0C,KAAK2mW,eAAgB9lW,EAAGszC,KAM3E0mJ,EAAKx/L,UAAUuuN,eAAiB,SAAU/oN,GACtC,IAAIgwB,EAAQ7wB,KAAK6wB,MACbm3U,GAA6E,IAAzDnnW,EAAEsG,OAAO7D,GAAG/E,QAAQsyB,EAAM7vB,QAAQsC,GAAK,eACH,IAAxDzC,EAAEsG,OAAO7D,GAAG/E,QAAQsyB,EAAM7vB,QAAQsC,GAAK,aACvCutB,EAAMwwT,aAAe2mB,IACrBhoW,KAAKgoW,kBAAkBn3U,GAEvBA,EAAMe,UACFf,EAAMoxT,aAAexrT,GAAa5F,EAAMk8S,OAAQl8S,EAAMm8S,OAAQn8S,EAAM6jT,qBAAqB7P,iBACvD,IAA/B7kU,KAAK2mW,eAAelqW,QAAgBuD,KAAKimU,UAC5CjmU,KAAKmnW,QAAQ/4T,QAEjBpuC,KAAK2mW,kBACL91U,EAAMoxT,aAAc,IAM5BpnJ,EAAKx/L,UAAU4vW,mBAAqB,SAAUpqW,GACtCb,KAAKimU,UACLjmU,KAAKgoW,kBAAkBhoW,KAAK6wB,OAEhC7wB,KAAKykV,YAAc,KACnBzkV,KAAK2mW,kBACL3mW,KAAK0mW,kBAOT7rK,EAAKx/L,UAAU44C,gBAAkB,SAAUC,EAAWrzC,EAAGszC,GACrD,GAAIA,EAAS,CACTD,KACA,IAAK,IAAI/3C,EAAI,EAAGs+B,EAAW0Z,EAAQ13C,OAAQN,EAAIs+B,EAAUt+B,IACrD+3C,EAAU1vC,MAAOsH,MAAOqoC,EAAQh4C,GAAGi4C,QAASloC,MAAOioC,EAAQh4C,GAAGk4C,QAASC,UAAW,YAKtF,GAAyB,KADzBJ,EAAYA,OACEz3C,OACVy3C,EAAU1vC,MAAOsH,MAAOjL,EAAEuzC,QAASloC,MAAOrL,EAAEwzC,QAASC,UAAWzzC,EAAEyzC,gBAG7D,CAAIn4C,EAAI,EAAb,IAAK,IAAWgwU,EAAWj4R,EAAUz3C,OAAQN,EAAIgwU,EAAUhwU,IACnD+3C,EAAU/3C,GAAGm4C,YAAczzC,EAAEyzC,UAC7BJ,EAAU/3C,IAAO2P,MAAOjL,EAAEuzC,QAASloC,MAAOrL,EAAEwzC,QAASC,UAAWzzC,EAAEyzC,WAGlEJ,EAAU1vC,MAAOsH,MAAOjL,EAAEuzC,QAASloC,MAAOrL,EAAEwzC,QAASC,UAAWzzC,EAAEyzC,YAKlF,OAAOJ,GAKX2mJ,EAAKx/L,UAAUkkC,cAAgB,WAE3B,MAAO,QAOXs7J,EAAKx/L,UAAUiX,QAAU,SAAUue,GAE/B7wB,KAAKpD,uBAEFi+L,KC7pBPqwK,GAA+B,WAC/B,SAASA,EAAcv4V,GACnB3S,KAAK2S,QAAUA,EAgFnB,OA3EAu4V,EAAc7vW,UAAU8vW,aAAe,WACnC,IAAIC,EACA1mW,EAAQlE,SAASosB,eAAe5sB,KAAKqrW,SACzC,GAAI5tW,EAAkBiH,GAAQ,EAC1BA,EAAQlE,SAASW,cAAc,UACzBqC,aAAa,KAAMxD,KAAKqrW,SAC9B,IAAK,IAAIjtW,EAAK,EAAGyE,EAAK7C,KAAK2S,QAAQsuB,cAAe7iC,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACpE,IAAIwgB,EAAS/b,EAAGzE,GAChBgtW,EAAcxsV,EAAO0sV,gBAAkBtrW,KAAKqrW,QAAU,WAAazsV,EAAO3M,MAC1EvN,EAAM1C,WAAa4c,EAAO0sV,eAAiB,GAAK,IAAMF,EAAc,QAExE1mW,EAAM1C,WAAa,IAAMhC,KAAKurW,WAAa,oBAC3C/qW,SAASuL,KAAKpK,YAAY+C,KAMlCwmW,EAAc7vW,UAAUmwW,cAAgB,SAAUC,EAAaC,GAC3D,OAAOD,EAAYlxV,OAAOmxV,IAK9BR,EAAc7vW,UAAUswW,gBAAkB,SAAUC,GAGhD,IAAK,IAFDp0U,GAAU,EACVq0U,KACKztW,EAAK,EAAG0tW,EAAoBF,EAAiBxtW,EAAK0tW,EAAkBrvW,OAAQ2B,IAAM,CACvF,IAAI6T,EAAQ65V,EAAkB1tW,IACc,IAAxCytW,EAAattW,QAAQ0T,EAAM2M,SAC3BitV,EAAarnW,KAAKyN,EAAM2M,QAGhC,IAAK,IAAI/b,EAAK,EAAGkpW,EAAiBF,EAAchpW,EAAKkpW,EAAetvW,OAAQoG,IAAM,CAC1EoP,EAAQ85V,EAAelpW,GAC3B,GAAI7C,KAAK2S,QAAQiM,OAAO3M,GAAOulB,QAAS,CACpCA,GAAU,EACV,OAGR,OAAOA,GAMX0zU,EAAc7vW,UAAU2wW,YAAc,SAAUhrW,EAASqC,GACrD,IAAI4oW,EAAmBjrW,EAAQ6R,aAAa,UAAY,IAEX,KAD7Co5V,GAA2C,KAArBA,EAA2B,IAAM,IAClC1tW,QAAQ8E,IACzBrC,EAAQwC,aAAa,QAASyoW,EAAmB5oW,IAOzD6nW,EAAc7vW,UAAU6wW,eAAiB,SAAUlrW,EAASqC,GACxD,IAAI4oW,EAAmBjrW,EAAQ6R,aAAa,UAAY,GACpDo5V,EAAiB1tW,QAAQ8E,IAAc,GACvCrC,EAAQwC,aAAa,QAASyoW,EAAiB18V,QAAQlM,EAAW,MAM1E6nW,EAAc7vW,UAAU8wW,YAAc,SAAU7rW,GAE5C,IAAK,IADD8Z,KACKje,EAAI,EAAGA,EAAImE,EAAOiR,WAAW9U,OAAQN,IACL,SAAjCmE,EAAOiR,WAAWpV,GAAG6G,SACrBoX,EAAS5V,KAAKlE,EAAOiR,WAAWpV,IAGxC,OAAOie,GAEJ8wV,KCvFP5gR,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAwBxCyhR,GAA2B,SAAUjhR,GAMrC,SAASihR,EAAUv7U,GACf,IAAI9wB,EAAQorF,EAAO7pF,KAAKtB,KAAM6wB,IAAU7wB,KAIxC,OAHAD,EAAM8wB,MAAQA,EACd9wB,EAAM8tB,SAAWgD,EAAMhD,SACvB9tB,EAAMrD,mBACCqD,EA+pBX,OAzqBAuqF,GAAU8hR,EAAWjhR,GAerBihR,EAAU/wW,UAAUqB,iBAAmB,WACnC,IAAIsD,KAAK6wB,MAAMm2D,YAAf,CAGA,IAAI6zB,EAAcrvG,GAAQC,UAAY,eAAiB,aACvDzL,KAAK6wB,MAAM+0D,GAAGp6E,GAAQ2+E,eAAgBnqF,KAAK6/U,UAAW7/U,MACtDA,KAAK6wB,MAAM+0D,GAAGi1B,EAAa76G,KAAKqsW,kBAAmBrsW,MACnDA,KAAK6wB,MAAM+0D,GAAG,QAAS5lF,KAAKssW,0BAA2BtsW,MACvDA,KAAK6wB,MAAM+0D,GAAGp6E,GAAQ0+E,gBAAiBlqF,KAAKusW,UAAWvsW,MACvDA,KAAK6wB,MAAM+0D,GAAGp6E,GAAQ4+E,cAAepqF,KAAKqsW,kBAAmBrsW,QAKjEosW,EAAU/wW,UAAUkxW,UAAY,SAAU1rW,GACtC,IAAIgwB,EAAQ7wB,KAAK6wB,MACW,SAAxBA,EAAMq8S,eAA4Br8S,EAAMwwT,cAGxCxwT,EAAMoxT,cAAgBpxT,EAAMe,SAAW5xB,KAAKotU,aAC5CptU,KAAKyvG,UAAU5+E,EAAOA,EAAM6jT,qBAAqB7P,eAAgBh0S,EAAMgxT,WAAYhxT,EAAMkxT,WAAYlhV,IAM7GurW,EAAU/wW,UAAUuB,oBAAsB,WAClCoD,KAAK6wB,MAAMm2D,cAGfhnF,KAAK6wB,MAAMm1D,IAAIx6E,GAAQ2+E,eAAgBnqF,KAAK6/U,WAC5C7/U,KAAK6wB,MAAMm1D,IAAI,eAAgChmF,KAAKqsW,mBACpDrsW,KAAK6wB,MAAMm1D,IAAI,QAAShmF,KAAKssW,2BAC7BtsW,KAAK6wB,MAAMm1D,IAAIx6E,GAAQ0+E,gBAAiBlqF,KAAKusW,WAC7CvsW,KAAK6wB,MAAMm1D,IAAIx6E,GAAQ4+E,cAAepqF,KAAKqsW,qBAK/CD,EAAU/wW,UAAUmxW,qBAAuB,SAAU37U,GACjD7wB,KAAKqrW,QAAUx6U,EAAM7vB,QAAQsC,GAAK,uBAClCtD,KAAKurW,WAAa16U,EAAM7vB,QAAQsC,GAAK,kBACrCtD,KAAKysW,YAAc57U,EAAM7vB,QAAQsC,GAAK,kBACtCtD,KAAK0sW,iBAAmB77U,EAAM7vB,QAAQsC,GAAK,kBAC3CtD,KAAK2sW,YAAc97U,EAAM7vB,QAAQsC,GAAK,iBACtCtD,KAAKk+U,uBACLl+U,KAAKotU,WAAa,KAClBptU,KAAK4sW,aAAuC,WAAxB/7U,EAAMq8S,eAM9Bk/B,EAAU/wW,UAAU8iV,gBAAkB,SAAUttT,GAC5C7wB,KAAKwsW,qBAAqB37U,GAC1B7wB,KAAK4e,OAASlgB,KAAWmyB,EAAMoQ,cAAe,MAAM,GACpDjhC,KAAKmrW,eACCt6U,EAAMq8S,cAAc3uU,QAAQ,SAAW,GACzCyB,KAAK6sW,gBAAgBh8U,EAAO7wB,KAAKwrW,cAAc36U,EAAMqtT,oBAAqBl+U,KAAKk+U,uBAGvFkuB,EAAU/wW,UAAUyxW,cAAgB,SAAUluV,GAC1C,OAAIA,EACQA,EAAO0sV,gBAAkBtrW,KAAKqrW,QAAU,WAAazsV,EAAO3M,MAEjE,aAEXm6V,EAAU/wW,UAAUwxW,gBAAkB,SAAUh8U,EAAOk8U,GACnD,IAAK,IAAI3uW,EAAK,EAAG4uW,EAAYD,EAAS3uW,EAAK4uW,EAAUvwW,OAAQ2B,IAAM,CAC/D,IAAI6T,EAAQ+6V,EAAU5uW,GACtB4B,KAAK08U,iBAAiBzqU,EAAO4e,EAAO7wB,KAAKitW,kBAAkBp8U,EAAO5e,GAAO,MAGjFm6V,EAAU/wW,UAAU4xW,kBAAoB,SAAUp8U,EAAO5e,EAAO48N,QAC7C,IAAXA,IAAqBA,EAAS,IAClC,IAAIt6L,EAAY1jB,EAAM7vB,QAAQsC,GAAK,WAAa2O,EAAM2M,OAAS,UAAiB3M,EAAM6hB,MAClFlV,EAASiS,EAAMjS,OAAO3M,EAAM2M,QAGhC,OAFA21B,GAAc31B,EAAOiuT,cAAgC,YAAhBjuT,EAAOlY,MAAsC,WAAhBkY,EAAOlY,MACrEkY,EAAOkuT,OAAOt1S,QAAY+c,EAAY,UAAYs6L,EAAUt6L,GACxDhnB,GAAWgnB,GAA6B,cAAhB31B,EAAOlY,MAAwBkY,EAAOkuT,OAAOt1S,QAAWjK,GAAWgnB,EAAY,KAAO,OAE1H63T,EAAU/wW,UAAU6xW,mBAAqB,SAAUr8U,EAAO5e,GAEtD,IAAK,IADDk7V,KACK/uW,EAAK,EAAGyE,EAAKguB,EAAMoQ,cAAe7iC,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC7D,IAAIwgB,EAAS/b,EAAGzE,GAChB6T,EAAQ,IAAI6iB,GAAMlW,EAAO3M,MAAOA,EAAM6hB,OACtCq5U,EAAS3oW,KAAKxE,KAAKitW,kBAAkBp8U,EAAO5e,GAAO,IAEvD,OAAOk7V,GAEXf,EAAU/wW,UAAU+xW,aAAe,SAAUv8U,EAAOjS,EAAQ3M,EAAO48N,GAE/D,YADe,IAAXA,IAAqBA,EAAS,IAC9B7uO,KAAK4sW,aACE5sW,KAAKqtW,kBAAkBzuV,GAED,YAAxBiS,EAAMq8S,cACJltU,KAAKktW,mBAAmBr8U,EAAO5e,GAG/BjS,KAAKitW,kBAAkBp8U,EAAO5e,EAAO48N,IAQpDu9H,EAAU/wW,UAAUixW,0BAA4B,SAAUhwW,GACrB,SAA7B0D,KAAK6wB,MAAMq8S,gBAAsF,IAA1D5wU,EAAM6K,OAAO7D,GAAG/E,QAAQyB,KAAK6wB,MAAM7vB,QAAQsC,GAAK,MAGvFhH,EAAM6K,OAAO7D,GAAG/E,QAAQ,aAAe,GACvCyB,KAAK08U,iBAAiB18U,KAAK20B,YAAYr4B,EAAM6K,OAAO7D,IAAKtD,KAAK6wB,MAAOv0B,EAAM6K,SAGnFilW,EAAU/wW,UAAUqhV,iBAAmB,SAAUzqU,EAAO4e,EAAO7vB,GAM3D,OALAhB,KAAK4sW,aAAuC,WAAxB/7U,EAAMq8S,cACc,kBAApCr8S,EAAMjS,OAAO3M,EAAM2M,QAAQlY,MAC3B1F,EAAQsC,KAAOutB,EAAM7vB,QAAQsC,GAAK,WAAa2O,EAAM2M,OAAS,UAAY3M,EAAM6hB,MAAQ,aACxF9yB,EAAUA,EAAQqT,eAEdwc,EAAMq8S,eACV,IAAK,SACDltU,KAAK4vE,UAAU/+C,EAAO5e,EAAOjS,KAAKqtW,kBAAkBx8U,EAAMjS,OAAO3M,EAAM2M,UACvE5e,KAAKstW,WAAWz8U,EAAM7vB,QAAQsC,GAAIutB,EAAMoQ,eACxC,MACJ,IAAK,QACI+gB,MAAM/vC,EAAM6hB,SACb9zB,KAAK4vE,UAAU/+C,EAAO5e,GAAQjR,IAC9BhB,KAAKstW,WAAWz8U,EAAM7vB,QAAQsC,GAAIutB,EAAMoQ,gBAE5C,MACJ,IAAK,UACI+gB,MAAM/vC,EAAM6hB,SACb9zB,KAAKutW,iBAAiB18U,EAAOA,EAAMjS,OAAQ3M,GAC3CjS,KAAKstW,WAAWz8U,EAAM7vB,QAAQsC,GAAIutB,EAAMoQ,kBAKxDmrU,EAAU/wW,UAAUu0E,UAAY,SAAU/+C,EAAO5e,EAAOu7V,GAC/C38U,EAAMm0T,gBAA2D,IAAzCn0T,EAAMq8S,cAAc3uU,QAAQ,SACrDyB,KAAKytW,0BAA0B58U,EAAO7wB,KAAKk+U,oBAAqBjsU,EAAO4e,EAAMjS,QAEjF,IAAIvb,EAAYmqW,EAAiB,KAAOA,EAAiB,GAAG36V,aAAa,UAAY,IACjF26V,EAAiB,IAAMnqW,EAAU9E,QAAQyB,KAAK0tW,kBAAkBF,EAAiB,GAAGlqW,MAAQ,GAC5FtD,KAAK2tW,aAAaH,GAClBxtW,KAAK4tW,iBAAiB5tW,KAAKk+U,oBAAqBjsU,KAGhDjS,KAAK6tW,YAAYL,GACjBxtW,KAAK4tW,iBAAiB5tW,KAAKk+U,oBAAqBjsU,GAAO,KAG/Dm6V,EAAU/wW,UAAUkyW,iBAAmB,SAAU18U,EAAOjS,EAAQ3M,GAC5DjS,KAAK4vE,UAAU/+C,EAAO5e,EAAOjS,KAAKktW,mBAAmBr8U,EAAO,IAAIiE,GAAM7iB,EAAM2M,OAAQ3M,EAAM6hB,UAE9Fs4U,EAAU/wW,UAAUoyW,0BAA4B,SAAU58U,EAAO5e,EAAOoyN,EAAcntM,GAElF,IAAK,IADDtY,EACKziB,EAAI,EAAGA,EAAI8V,EAAMxV,OAAQN,IAC9ByiB,EAASsY,EAAiBjlB,EAAM9V,GAAGyiB,SAC9B5e,KAAK4sW,eAAiB5sW,KAAK8tW,SAAS77V,EAAM9V,GAAIkoO,EAAcrkO,KAAK4sW,eAClC,YAA/B5sW,KAAK2S,QAAQu6T,gBAAgCltU,KAAK8tW,SAAS77V,EAAM9V,GAAIkoO,GAAc,KAClFrkO,KAAK4sW,cAAgB5sW,KAAK8tW,SAAS77V,EAAM9V,GAAIkoO,GAAc,KAAUrkO,KAAK8tW,SAAS77V,EAAM9V,GAAIkoO,GAAc,MAC7GrkO,KAAK2tW,aAAa3tW,KAAKotW,aAAav8U,EAAOjS,EAAQ3M,EAAM9V,KACzD8V,EAAMoW,OAAOlsB,EAAG,GAChBA,MAIZiwW,EAAU/wW,UAAUiyW,WAAa,SAAUS,EAAS9sU,GAEhD,IAAK,IADDt8B,EAAa3E,KAAK2rW,gBAAgB3rW,KAAKk+U,qBAClC9/U,EAAK,EAAG8iC,EAAkBD,EAAe7iC,EAAK8iC,EAAgBzkC,OAAQ2B,IAAM,CACjF,IAAIwgB,EAASsiB,EAAgB9iC,GACzBwgB,EAAO4Y,UACPx3B,KAAKguW,uBAAuBzgV,GAAWwgV,EAAU,cAAgBnvV,EAAO3M,OAAQjS,KAAK8sW,cAAcluV,GAASja,GACvGlH,EAAkB8vB,GAAWwgV,EAAU,cAAgBnvV,EAAO3M,SAC/DjS,KAAKguW,uBAAuBzgV,GAAWwgV,EAAU,cAAgBnvV,EAAO3M,OAAQjS,KAAK8sW,cAAcluV,GAASja,MAK5HynW,EAAU/wW,UAAU2yW,uBAAyB,SAAUhtW,EAASqC,EAAWsB,GAMvE,IAAK,IAJDsnW,EACAgC,EACAr1B,EAHAx+T,EAAYpa,KAAK4sW,cAAgB5rW,GAAWA,EAAQuQ,WAIpD28V,EAAgBltW,EACX7E,EAAI,EAAGA,EAAIie,EAAS3d,OAAQN,IACjC8vW,EAAmB7xV,EAASje,GAAG0W,aAAa,UAAY,GACxDo7V,EAAkB7zV,EAASje,GAAGsE,WAAWoS,aAAa,UAAY,IACrB,IAAzCo5V,EAAiB1tW,QAAQ8E,KACe,IAAxC4qW,EAAgB1vW,QAAQ8E,IAAqBsB,EAC7C3E,KAAKgsW,YAAY5xV,EAASje,GAAI6D,KAAKurW,aAGnC2C,EAAgB9zV,EAASje,GACzB6D,KAAKksW,eAAe9xV,EAASje,GAAI6D,KAAKurW,aAG1CvrW,KAAK2S,QAAQqpU,cAAgBh8U,KAAK2S,QAAQyjU,eAAe5+S,UACzDohT,EAAcp4U,SAASosB,eAAe5sB,KAAK2S,QAAQ3R,QAAQsC,GAAK,uBAAyBD,EAAUnG,MAAM,YAAY,OAEjH+uW,EAAmBiC,EAAcr7V,aAAa,UAAY,GAC1Do7V,EAAkBC,EAAcztW,WAAWoS,aAAa,UAAY,IACvB,IAAzCo5V,EAAiB1tW,QAAQ8E,KAA6D,IAAxC4qW,EAAgB1vW,QAAQ8E,IAAqBsB,EAC3F3E,KAAKgsW,YAAYpzB,EAAa54U,KAAKurW,YAGnCvrW,KAAKksW,eAAetzB,EAAa54U,KAAKurW,cAKtDa,EAAU/wW,UAAUwyW,YAAc,SAAUjqW,GACxC,IAAK,IAAIxF,EAAK,EAAGgjE,EAAax9D,EAAUxF,EAAKgjE,EAAW3kE,OAAQ2B,IAAM,CAClE,IAAI4C,EAAUogE,EAAWhjE,GACrB4C,IACAhB,KAAKksW,eAAelrW,EAAQP,WAAYT,KAAKurW,YAC7CvrW,KAAKksW,eAAelrW,EAAShB,KAAKurW,YAClCvrW,KAAKgsW,YAAYhrW,EAAShB,KAAK0tW,kBAAkB1sW,EAAQsC,QAIrE8oW,EAAU/wW,UAAUqyW,kBAAoB,SAAUpqW,GAC9C,OAAOtD,KAAK8sW,cAAc9sW,KAAK2S,QAAQiM,OAAO5e,KAAK20B,YAAYrxB,GAAIsb,UAEvEwtV,EAAU/wW,UAAUsyW,aAAe,SAAU/pW,GACzC,IAAK,IAAIxF,EAAK,EAAG0xI,EAAalsI,EAAUxF,EAAK0xI,EAAWrzI,OAAQ2B,IAAM,CAClE,IAAI4C,EAAU8uI,EAAW1xI,GACrB4C,GACAhB,KAAKksW,eAAelrW,EAAShB,KAAK0tW,kBAAkB1sW,EAAQsC,OAIxE8oW,EAAU/wW,UAAUuyW,iBAAmB,SAAUb,EAAS96V,EAAO7N,GAC7D,IAAK,IAAIjI,EAAI,EAAGA,EAAI4wW,EAAQtwW,OAAQN,IAC5B6D,KAAK8tW,SAASf,EAAQ5wW,GAAI8V,EAAOjS,KAAK4sW,gBACtCG,EAAQ1kV,OAAOlsB,EAAG,GAClBA,KAGJiI,GACA2oW,EAAQvoW,KAAKyN,IAGrBm6V,EAAU/wW,UAAUyyW,SAAW,SAAUlvW,EAAOC,EAAQsvW,GACpD,OAASvvW,EAAMggB,SAAW/f,EAAO+f,QAA0C,YAA/B5e,KAAK2S,QAAQu6T,gBAAgCihC,KACjFA,GAAoBvvW,EAAMk1B,QAAUj1B,EAAOi1B,QAOvDs4U,EAAU/wW,UAAU+iV,gBAAkB,SAAUvtT,EAAOu9U,GACnDpuW,KAAK4sW,aAA2B,WAAZwB,EACpB,IAAIlwB,EAAsBx/U,KAAWsB,KAAKk+U,oBAAqB,MAAM,GACrEl+U,KAAKquW,uBAAuBx9U,EAAO7wB,KAAKk+U,oBAAqBrtT,EAAMjS,QACnE5e,KAAKstW,WAAWz8U,EAAM7vB,QAAQsC,GAAIutB,EAAMoQ,eACxCjhC,KAAK6sW,gBAAgBh8U,EAAOqtT,IAGhCkuB,EAAU/wW,UAAUizW,gBAAkB,SAAUz9U,EAAOjS,GACnD,IAAI2vV,EAAcvuW,KAAK8sW,cAAcj8U,EAAMoQ,cAAcriB,IACrD4uV,EAAmBhtW,SAASkN,uBAAuB6gW,GACvDvuW,KAAK4sW,aAAuC,WAAxB/7U,EAAMq8S,cAC1B,IAAIshC,GAAqB,EACzB,GAAIhB,EAAiB/wW,OAAS,EAAG,CAE7B,IAAK,IADDmH,KACKzH,EAAI,EAAGA,EAAIqxW,EAAiB/wW,OAAQN,IACzCyH,EAASY,KAAKgpW,EAAiBrxW,IAEnC6D,KAAK2tW,aAAa/pW,GAClB5D,KAAK4sW,cAAe,EACpB5sW,KAAK4tW,iBAAiB5tW,KAAKk+U,oBAAqB,IAAIppT,GAAMlW,EAAQ2rF,MAClE,IAAK,IAAInsG,EAAK,EAAGyE,EAAKguB,EAAMoQ,cAAe7iC,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC7D,IAAIigU,EAAWx7T,EAAGzE,GAElB,GADAmwW,EAAcvuW,KAAK8sW,cAAczuC,GAC7B79T,SAASkN,uBAAuB6gW,GAAa9xW,OAAS,EAAG,CACzD,IAAK,IAAIwH,EAAK,EAAGwqW,EAAa7qW,EAAUK,EAAKwqW,EAAWhyW,OAAQwH,IAAM,CAClE,IAAIjD,EAAUytW,EAAWxqW,GACzBjE,KAAKguW,uBAAuBhtW,EAASutW,GAAa,GAEtDC,GAAqB,EACrB,OAGJA,IACAxuW,KAAK4sW,aAAuC,WAAxB/7U,EAAMq8S,cAC1BltU,KAAKstW,WAAWz8U,EAAM7vB,QAAQsC,GAAIutB,EAAMoQ,oBAG3C,CAED,IAAK,IADD8xS,EAAiB/yU,KAAKqtW,kBAAkBx8U,EAAMoQ,cAAcriB,IACvDnU,EAAK,EAAGikW,EAAmB37B,EAAgBtoU,EAAKikW,EAAiBjyW,OAAQgO,IAAM,CACpF,IAAI4oU,EAAgBq7B,EAAiBjkW,GACrCzK,KAAKguW,uBAAuB36B,EAAek7B,GAAa,GAE5DvuW,KAAK4sW,cAAe,EACpB5sW,KAAK4vE,UAAU/+C,EAAO,IAAIiE,GAAMlW,EAAQ2rF,KAAMwoO,GAC9C/yU,KAAK4sW,aAAuC,WAAxB/7U,EAAMq8S,cAC1BltU,KAAKstW,WAAWz8U,EAAM7vB,QAAQsC,GAAIutB,EAAMoQ,iBAGhDmrU,EAAU/wW,UAAUgyW,kBAAoB,SAAUzuV,GAC9C,IAAIm0T,GAAkBn0T,EAAOy0T,eAI7B,OAHIz0T,EAAOkuT,OAAOt1S,SAA2B,YAAhB5Y,EAAOlY,MAAsC,WAAhBkY,EAAOlY,OAAsBkY,EAAOiuT,cAC1FkG,EAAevuU,KAAKoa,EAAOw0T,eAExBL,GAEXq5B,EAAU/wW,UAAUs5B,YAAc,SAAUrxB,GACxC,IAAIuxB,GAAO,MAAO,OAelB,OAdIvxB,EAAG/E,QAAQ,gBAAkB,GAC7Bs2B,EAAMvxB,EAAGpG,MAAM,gBACX,GAAK23B,EAAI,GAERvxB,EAAG/E,QAAQ,gBAAkB,GAClCs2B,EAAMvxB,EAAGpG,MAAM,gBACX,GAAK23B,EAAI,GAERvxB,EAAG/E,QAAQ,YAAc,EAC9Bs2B,EAAMvxB,EAAGpG,MAAM,YAAY,GAAGA,MAAM,WAE/BoG,EAAG/E,QAAQ,aAAe,IAC/Bs2B,EAAI,GAAKvxB,EAAGpG,MAAM,YAAY,IAE3B,IAAI43B,GAAMC,SAASF,EAAI,GAAI,IAAKE,SAASF,EAAI,GAAI,MAO5Du3U,EAAU/wW,UAAUszW,8BAAgC,SAAU99U,EAAO+9U,GACjE5uW,KAAKquW,uBAAuBx9U,EAAO7wB,KAAKk+U,oBAAqBrtT,EAAMjS,QACnE,IAAIyU,EAAO,IAAI6C,GAAK04U,EAAS7hW,EAAG6hW,EAAS5hW,EAAG4hW,EAAS54V,MAAO44V,EAAS74V,QACjE84V,EAAa,IAAIj7U,GAAc/C,EAAM6jT,qBAAqB7P,eAAe93T,EAAG8jB,EAAM6jT,qBAAqB7P,eAAe73T,GAC1HhN,KAAK8uW,aAAaz7U,EAAMw7U,GACxB,IAAIl3U,EACA1lB,EACA88V,KACAC,KACJhvW,KAAK4sW,cAAe,EA4CpB,IAAK,IA1CD3tW,EAAU,SAAU2f,GACpB,GAAIA,EAAO4Y,QAAS,CAChBG,EAAS/Y,EAAO+Y,OAChBo3U,KACA,IAAIE,EACAC,GACCr+U,EAAMs2S,eAAgD,IAAhCvoT,EAAOlY,KAAKnI,QAAQ,QACzCsyB,EAAMs2S,eAAgD,IAAhCvoT,EAAOlY,KAAKnI,QAAQ,QAK5C0wW,EAAgBrwV,EAAO9G,MAAMub,KAAKtmB,EAAI8hW,EAAW9hW,EACjDmiW,EAAgBtwV,EAAOhH,MAAMyb,KAAKrmB,EAAI6hW,EAAW7hW,IALjDiiW,EAAgBrwV,EAAO9G,MAAMub,KAAKrmB,EAAI6hW,EAAW7hW,EACjDkiW,EAAgBtwV,EAAOhH,MAAMyb,KAAKtmB,EAAI8hW,EAAW9hW,GAMrD,IAAK,IAAIwW,EAAI,EAAGA,EAAIoU,EAAOl7B,OAAQ8mB,IAAK,CACpC,IAAIkL,EAAyB,cAAhB7P,EAAOlY,KAAuBixB,EAAOpU,GAAGkL,OACjDkJ,EAAOpU,GAAGoqT,QAAQ,GAAG3gU,EACrBmiW,OAAiB,GAEjBA,EADgB,kBAAhBvwV,EAAOlY,KACUixB,EAAOpU,GAAGoqT,QAAQvxS,KAAK,SAAU8vB,GAC9C,OAAOz1B,GAAay1B,EAAOn/C,EAAIkiW,EAAe/iT,EAAOl/C,EAAIkiW,EAAe77U,KAI3DsE,EAAOpU,GAAG+qT,gBAAgBlyS,KAAK,SAAU1O,GACtD,OAAOA,GAAY+I,GAAa/I,EAAS3gB,EAAIkiW,EAAevhV,EAAS1gB,EAAIkiW,EAAe77U,OAGtD,cAApBzU,EAAOw7K,WACzBnoL,EAAQ,IAAI6iB,GAAMlW,EAAO3M,MAAO0lB,EAAOpU,GAAGtR,OAC1Cs7F,EAAO39B,UAAU/+C,EAAO5e,EAAOs7F,EAAO6/P,aAAav8U,EAAOjS,EAAQ3M,IAClE88V,EAAoBvqW,MAAOuI,EAAG4qB,EAAOpU,GAAGiL,OAAOthB,WAAYF,EAAGyhB,KAE9D0gV,GAAkC,cAAhBvwV,EAAOlY,MACzBqoW,EAAoBvqW,MAAOuI,EAAG4qB,EAAOpU,GAAGiL,OAAOthB,WAAYF,EAAG2qB,EAAOpU,GAAGoqT,QAAQ,GAAG3gU,IAG3FgiW,EAAqBxqW,KAAKuqW,KAG9BxhQ,EAASvtG,KACJ5B,EAAK,EAAGyE,EAAKguB,EAAMoQ,cAAe7iC,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAE7Da,EADa4D,EAAGzE,IAGpB4B,KAAKstW,WAAWz8U,EAAM7vB,QAAQsC,GAAIutB,EAAMoQ,eACxCjhC,KAAKotU,WAAa,IAAIl3S,GAAK04U,EAAS7hW,EAAG6hW,EAAS5hW,EAAG4hW,EAAS54V,MAAO44V,EAAS74V,QAC5E/V,KAAKovW,kBAAmBR,EAAS7hW,EAAI6hW,EAAS54V,MAAQ44V,EAAS5hW,GAC/D,IAAI/M,GACAw3B,KAAMwoS,GACNovC,mBAAoBL,EACpBn2U,QAAQ,GAEZhI,EAAMrK,QAAQy5S,GAAchgU,IAEhCmsW,EAAU/wW,UAAUyzW,aAAe,SAAUz7U,EAAMoqN,GAC/CpqN,EAAKtmB,GAAK0wO,EAAK1wO,EACfsmB,EAAKrmB,GAAKywO,EAAKzwO,GAOnBo/V,EAAU/wW,UAAUi0W,iBAAmB,SAAUz+U,EAAO+9U,GACpD,IAAIW,EAAkB1+U,EAAM6jT,qBAAqB7P,eACjD,OAAQh0S,EAAMq8S,eACV,IAAK,QACD0hC,EAAS5hW,EAAIuiW,EAAgBviW,EAC7B4hW,EAAS74V,OAASw5V,EAAgBx5V,OAClC,MACJ,IAAK,QACD64V,EAAS7hW,EAAIwiW,EAAgBxiW,EAC7B6hW,EAAS54V,MAAQu5V,EAAgBv5V,MAGzC,GAAI44V,EAAS54V,MAAQ,GAAK44V,EAAS74V,OAAS,EACxC,OAAO,KAEX,IAAI/U,EAAUusB,GAAWvtB,KAAK2sW,aAI9B,GAHI3sW,KAAK2oH,WACLn7F,GAAcxtB,KAAKysW,aAEnBzrW,EACAhB,KAAK61E,cAAc70E,EAAS4tW,OAE3B,CACD,IAAIY,EAAY3+U,EAAMhD,SAASw+C,aAAc/oE,GAAItD,KAAK0sW,mBACtD77U,EAAMS,UAAU3vB,YAAY6tW,IAC5BxuW,EAAU6vB,EAAMhD,SAAS8V,cAAc,IAAIugS,GAAWlkU,KAAK2sW,YAAa97U,EAAMwF,WAAWrG,mBAAqBwG,MAAO3F,EAAMwF,WAAWpG,oBAAqBja,MAAO,GAAK,EAAG44V,KAClKprW,aAAa,QAAS,gBAC9BgsW,EAAU7tW,YAAYX,KAG9BorW,EAAU/wW,UAAU+zW,kBAAoB,SAAUriW,EAAGC,GACjD,IAAI27G,EAAY3oH,KAAK6wB,MAAMhD,SAASw+C,aAChC/oE,GAAItD,KAAKysW,YACT/nW,MAAO,yCAEXikH,EAAUhnH,YAAY3B,KAAK6wB,MAAMhD,SAAS6V,WAAW,IAAIygS,GAAankU,KAAKysW,YAAc,UAAW,WAAaj2U,MAAOx2B,KAAK6wB,MAAMwF,WAAWnG,sBAAuBla,MAAO,GAAK,EAAGjJ,EAAGC,EAAG,MAC1L,IAAIwoB,EAAY,MAAQzoB,EAAI,GAAK,KAAOC,EAAI,GAAK,OAASD,EAAI,GAAK,KAAOC,EAAI,GAAK,OAASD,EAAI,GAAK,KAAOC,EAAI,GAC5G,OAASD,EAAI,GAAK,KAAOC,EAAI,GACjC27G,EAAUhnH,YAAY3B,KAAK6wB,MAAMhD,SAASsI,UACtC7yB,GAAItD,KAAKysW,YAAc,SAAUl+U,EAAGiH,EACpCsI,OAAQ99B,KAAK6wB,MAAMwF,WAAWnG,sBAC9BqU,eAAgB,EAAG3G,KAAM59B,KAAK6wB,MAAMwF,WAAWnG,yBAEnDlwB,KAAK2oH,UAAYA,EACjBp7F,GAAWvtB,KAAK0sW,kBAAkB/qW,YAAYgnH,IAOlDyjP,EAAU/wW,UAAUo0W,sBAAwB,SAAU5+U,EAAOv0B,GACpDA,EAAM6K,OAAO7D,GAAG/E,QAAQyB,KAAKysW,cAAgB,IAAuC,IAAhCnwW,EAAMoK,KAAKnI,QAAQ,UACxEyB,KAAKquW,uBAAuBx9U,EAAO7wB,KAAKk+U,oBAAqBrtT,EAAMjS,QACnE5e,KAAKstW,WAAWz8U,EAAM7vB,QAAQsC,GAAIutB,EAAMoQ,eACxC18B,EAAOgpB,GAAWvtB,KAAK0sW,mBACvB1sW,KAAK0vW,mBAAkB,EAAO7+U,EAAMS,UAAW,QAC/CtxB,KAAKotU,WAAa,OAQ1Bg/B,EAAU/wW,UAAUs0W,sBAAwB,SAAU9+U,EAAOnD,EAAUkiV,GACnE,IAAIv8U,EAAO,IAAI6C,GAAKl2B,KAAKotU,WAAWrgU,EAAG/M,KAAKotU,WAAWpgU,EAAGhN,KAAKotU,WAAWp3T,MAAOhW,KAAKotU,WAAWr3T,QAC7F+0R,EAAS9qS,KAAK6vW,eAAeh/U,EAAMS,UAAW+B,EAAM3F,GACpD1tB,KAAK8vW,WACLz8U,EAAO0H,GAAuB1H,EAAKtmB,EAAGsmB,EAAKrmB,EAAIqmB,EAAKtmB,EAAIsmB,EAAKrd,MAASqd,EAAKrmB,EAAIqmB,EAAKtd,OAAS8a,EAAM6jT,qBAAqB7P,gBACxH7kU,KAAKsvW,iBAAiBz+U,EAAOwC,GAC7BrzB,KAAK4uW,SAAWv7U,GAEhBu8U,IACA5vW,KAAK8vW,SAAWhlE,IAGxBshE,EAAU/wW,UAAUw0W,eAAiB,SAAUE,EAAgB18U,EAAM3F,GACjE,IAAIsiV,EAAc,YACdllE,GAAS,EACb,GAAK9qS,KAAK8vW,SAeL,CACD,IAAI/iW,EAAIsmB,EAAKtmB,EACTC,EAAIqmB,EAAKrmB,EACTgJ,EAAS0X,EAAS3gB,EAAIA,EACtBgJ,EAAU2X,EAAS1gB,EAAIA,EAC3B,OAAQhN,KAAKiwW,YACT,KAAK,EACDl6V,EAAS1J,KAAKE,IAAK8mB,EAAKtd,OAASsd,EAAKrmB,EAAK0gB,EAAS1gB,GACpDqmB,EAAKrmB,EAAIX,KAAK0T,IAAKsT,EAAKtd,OAASsd,EAAKrmB,EAAI0gB,EAAS1gB,GACnDqmB,EAAKtd,OAASA,EACd,MACJ,KAAK,EACDC,EAAQ3J,KAAKE,IAAK8mB,EAAKrd,MAAQqd,EAAKtmB,EAAK2gB,EAAS3gB,GAClDsmB,EAAKtmB,EAAIV,KAAK0T,IAAKsT,EAAKrd,MAAQqd,EAAKtmB,EAAI2gB,EAAS3gB,GAClDsmB,EAAKrd,MAAQA,EACb,MACJ,KAAK,EACDqd,EAAKtd,OAAS1J,KAAKE,IAAIwJ,GACvBsd,EAAKrmB,EAAIX,KAAK0T,IAAI2N,EAAS1gB,EAAGA,GAC9B,MACJ,KAAK,EACDqmB,EAAKrd,MAAQ3J,KAAKE,IAAIyJ,GACtBqd,EAAKtmB,EAAIV,KAAK0T,IAAI2N,EAAS3gB,EAAGA,GAC9B,MACJ,KAAK,EACDsmB,EAAKrd,MAAQ3J,KAAKE,IAAIyJ,GACtBqd,EAAKtd,OAAS1J,KAAKE,IAAIwJ,GACvBsd,EAAKtmB,EAAIV,KAAK0T,IAAI2N,EAAS3gB,EAAGA,GAC9BsmB,EAAKrmB,EAAIX,KAAK0T,IAAI2N,EAAS1gB,EAAGA,SArCtC,IAAK,IALDkjW,GAAe,IAAIh6U,GAAK7C,EAAKtmB,EAAIsmB,EAAKrmB,EAAI,GAAKqmB,EAAKrd,MAAQ,EAAG,IAC/D,IAAIkgB,GAAM7C,EAAKtmB,EAAI,GAAKsmB,EAAKrmB,EAAG,GAAIqmB,EAAKtd,QACzC,IAAImgB,GAAK7C,EAAKtmB,EAAIsmB,EAAKrmB,EAAIqmB,EAAKtd,OAAS,GAAKsd,EAAKrd,MAAQ,GAAI,IAC/D,IAAIkgB,GAAM7C,EAAKtmB,EAAIsmB,EAAKrd,MAAQ,GAAKqd,EAAKrmB,EAAI,EAAG,GAAIqmB,EAAKtd,OAAS,IACnE,IAAImgB,GAAM7C,EAAKtmB,EAAIsmB,EAAKrd,MAAQ,GAAMqd,EAAKrmB,EAAIqmB,EAAKtd,OAAS,GAAK,GAAI,KACjE5Z,EAAI,EAAGA,EAAI+zW,EAAYzzW,OAAQN,IACpC,GAAIs6B,GAAa/I,EAAS3gB,EAAG2gB,EAAS1gB,EAAGkjW,EAAY/zW,IAAK,CACtD6zW,EAAqB,IAAN7zW,EAAW6zW,EAAe7zW,EAAI,GAAM,EAAK,YAAc,YACtE2uS,GAAS,EACT9qS,KAAKiwW,WAAa9zW,EAClB,MAsCZ,OAFA6D,KAAK0vW,kBAAkB5kE,EAAQv9Q,GAAWvtB,KAAK2sW,aAAcqD,GAC7DhwW,KAAK0vW,kBAAkB5kE,EAAQilE,EAAgBC,GACxCllE,GAEXshE,EAAU/wW,UAAUq0W,kBAAoB,SAAUS,EAAUC,EAAaJ,GACrEA,EAAcG,EAAWH,EAAehwW,KAAK2S,QAAQ2e,YAAc8+U,EAAe,OAAS,OAC3FA,EAAY5sW,aAAa,QAAS,UAAYwsW,EAAc,MAEhE5D,EAAU/wW,UAAUgzW,uBAAyB,SAAUx9U,EAAO5e,EAAOilB,GACjEjlB,EAAMoW,OAAO,EAAGpW,EAAMxV,QAEtB,IAAK,IADDs2U,EACK30U,EAAK,EAAGk0U,EAAqBp7S,EAAkB94B,EAAKk0U,EAAmB71U,OAAQ2B,IAAM,CAC1F,IAAIwgB,EAAS0zT,EAAmBl0U,GAChC20U,EAAiB/yU,KAAKqtW,kBAAkBzuV,GACxC5e,KAAK2tW,aAAa56B,GAClB,IAAK,IAAIlwU,EAAK,EAAGwtW,EAAmBt9B,EAAgBlwU,EAAKwtW,EAAiB5zW,OAAQoG,IAAM,CACpF,IAAIwwU,EAAgBg9B,EAAiBxtW,GACrC7C,KAAK2tW,aAAa3tW,KAAKmsW,YAAY94B,OAI/C+4B,EAAU/wW,UAAUw6E,cAAgB,SAAU7xE,EAAK8qO,GAE/C,IAAK,IAAI1wO,EAAK,EAAGC,EADNC,OAAOhB,KAAKwxO,GACS1wO,EAAKC,EAAO5B,OAAQ2B,IAAM,CACtD,IAAIf,EAAMgB,EAAOD,GACjB4F,EAAIR,aAAanG,EAAKyxO,EAAOzxO,MAQrC+uW,EAAU/wW,UAAUi1W,iBAAmB,SAAUz/U,EAAO0/U,EAAcC,GAClE,IAAIn9U,EAAO,IAAI6C,GAAKl2B,KAAKotU,WAAWrgU,EAAG/M,KAAKotU,WAAWpgU,EAAGhN,KAAKotU,WAAWp3T,MAAOhW,KAAKotU,WAAWr3T,QACjGsd,EAAKtmB,GAAMwjW,EAAaxjW,EAAI8jB,EAAMk8S,OAClC15S,EAAKrmB,GAAMujW,EAAavjW,EAAI6jB,EAAMm8S,OAClC35S,EAAO0H,GAAuB1H,EAAKtmB,EAAGsmB,EAAKrmB,EAAGqmB,EAAKtmB,EAAIsmB,EAAKrd,MAAOqd,EAAKtd,OAASsd,EAAKrmB,EAAG6jB,EAAM6jT,qBAAqB7P,gBAChH2rC,EACAxwW,KAAKsvW,iBAAiBz+U,EAAOwC,GAG7BrzB,KAAK2uW,8BAA8B99U,EAAOwC,IAQlD+4U,EAAU/wW,UAAUgxW,kBAAoB,SAAUxrW,GAC9C,IAAIgwB,EAAQ7wB,KAAK6wB,MACW,SAAxBA,EAAMq8S,iBAGLltU,KAAKywW,UAAYzwW,KAAK8vW,WAAa9vW,KAAK4uW,SAAS54V,MAAQ,GAAKhW,KAAK4uW,SAAS74V,OAAS,EACtF/V,KAAK2uW,8BAA8B99U,EAAO7wB,KAAK4uW,UAE1C5uW,KAAK0wW,cAAgB1wW,KAAKotU,WAAWp3T,OAAShW,KAAKotU,WAAWr3T,QACnE/V,KAAKswW,iBAAiBz/U,EAAO7wB,KAAK4uW,UAEtC5uW,KAAKywW,UAAW,EAChBzwW,KAAK0wW,cAAe,EACpB1wW,KAAK8vW,UAAW,EAChB9vW,KAAKyvW,sBAAsB5+U,EAAOhwB,KAEtCurW,EAAU/wW,UAAUs1W,YAAc,SAAU9/U,EAAOg0S,GAC/C,OAAO9pS,GAAuBlK,EAAMgxT,WAAYhxT,EAAMkxT,WAAYlxT,EAAMk8S,OAAQl8S,EAAMm8S,OAAQnI,IAGlGunC,EAAU/wW,UAAUo0G,UAAY,SAAU5+E,EAAOg0S,EAAgBgd,EAAYE,EAAYzlV,GACrF0D,KAAKywW,SAAY5/U,EAAMq8S,cAAc3uU,QAAQ,SAAW,IAAOsyB,EAAMoxT,cAAgBpxT,EAAMe,UAC/D,eAAxBf,EAAM+8S,cACN5tU,KAAKywW,WACLzwW,KAAK4uW,SAAW,IAAI14U,GAAKrF,EAAMgxT,WAAYhxT,EAAMkxT,WAAY,EAAG,IAC5DlxT,EAAMgxT,WAAahd,EAAe93T,GAAK8jB,EAAMgxT,WAAchd,EAAe93T,EAAI83T,EAAe7uT,OAC7F6a,EAAMkxT,WAAald,EAAe73T,GAAK6jB,EAAMkxT,WAAcld,EAAe73T,EAAI63T,EAAe9uT,UAC7F/V,KAAKywW,UAAW,IAGpBzwW,KAAKotU,aACLptU,KAAK4uW,SAAW,IAAI14U,GAAKrF,EAAMgxT,WAAYhxT,EAAMkxT,WAAY,EAAG,GAChE/hV,KAAK2vW,sBAAsB9+U,EAAO,IAAI+C,GAAciuT,EAAYE,IAAa,GAC7E/hV,KAAK0wW,aAAej6U,GAAaorT,EAAYE,EAAY/hV,KAAKotU,cAItEg/B,EAAU/wW,UAAUwkV,UAAY,SAAUvjV,GACtC,IAAIu0B,EAAQ7wB,KAAK6wB,MACjB,GAA4B,SAAxBA,EAAMq8S,cAAV,CAGmB,cAAf5wU,EAAMoK,OAAyB8E,GAAQqb,OAASrb,GAAQq2V,SAAW7hW,KAAKywW,UAAYn0W,EAAMkpB,gBAC1FlpB,EAAMkpB,iBAESiR,GAAa5F,EAAMk8S,OAAQl8S,EAAMm8S,OAAQn8S,EAAM6jT,qBAAqB7P,iBAE/E7kU,KAAK0wW,eAAiB1wW,KAAK8vW,SAC3B9vW,KAAKswW,iBAAiBz/U,EAAO7wB,KAAK4uW,UAAU,GAEvC5uW,KAAKywW,WAAazwW,KAAK8vW,WAC5B9vW,KAAK4uW,SAAW5uW,KAAK2wW,YAAY9/U,EAAOA,EAAM6jT,qBAAqB7P,gBACnE7kU,KAAKsvW,iBAAiBz+U,EAAO7wB,KAAK4uW,WAElC5uW,KAAKotU,YACLptU,KAAK2vW,sBAAsB9+U,EAAO,IAAI+C,GAAc/C,EAAMk8S,OAAQl8S,EAAMm8S,UAI5EhtU,KAAKqsW,kBAAkB/vW,KAO/B8vW,EAAU/wW,UAAUkkC,cAAgB,WAChC,MAAO,aAOX6sU,EAAU/wW,UAAUiX,QAAU,SAAUue,GACpC7wB,KAAKpD,uBAGFwvW,GACTlB,IC1rBE0F,GAA2B,WAK3B,SAASA,EAAU//U,GACf7wB,KAAK6wW,YAAc,EACnB7wW,KAAK6wB,MAAQA,EAonBjB,OAlnBA+/U,EAAUv1W,UAAUmxW,qBAAuB,SAAU5tV,EAAQkuT,GACzD,IAAIz/T,EACA0+F,EAASntF,EAAOiS,MAAMhD,SAC1BxgB,EAA2C,cAA/BuR,EAAOiS,MAAM+8S,cAAgC,aAAehvT,EAAO8V,SAAS3nB,EAAI,IAAO6R,EAAO8V,SAAU,EAAI,IAAM,GAC1Ho4S,EAAO7rP,UAAUzpD,UACjB5Y,EAAO60T,aAAe1nO,EAAO1/B,aACzB/oE,GAAMtD,KAAK6wB,MAAM7vB,QAAQsC,GAAK,aAAesb,EAAO3M,MACpD5E,UAAaA,EACbimU,YAAa,QAAUtzU,KAAK6wB,MAAM7vB,QAAQsC,GAAK,wBAA0Bsb,EAAO3M,MAAQ,MAE5F2M,EAAO0X,YAAcy1E,EAAO1/B,aACxB/oE,GAAMtD,KAAK6wB,MAAM7vB,QAAQsC,GAAK,YAAcsb,EAAO3M,MACnD5E,UAAaA,EACbimU,YAAa,QAAUtzU,KAAK6wB,MAAM7vB,QAAQsC,GAAK,wBAA0Bsb,EAAO3M,MAAQ,OAGhGjS,KAAK4lS,aAAiC,YAAhBhnR,EAAOlY,OAAsBomU,EAAOt1S,SAAax3B,KAAK6sU,aAAajuT,GAAiC,EAArBkuT,EAAO/2T,OAAS,EACrH/V,KAAK8wW,SAAW9wW,KAAK6wB,MAAM7vB,QAAQsC,GAAK,WAAasb,EAAO3M,MAAQ,UACpEjS,KAAK+wW,qBAAqBnyV,EAAQA,EAAOkuT,OAAO7rP,UAAU/sE,UAC1DlU,KAAKgxW,gBAAsD,eAApChxW,KAAK6wB,MAAM65S,UAAUj7S,WACxCzvB,KAAK6wB,MAAMpB,YAAczvB,KAAK6wB,MAAMwF,WAAW5G,WAAazvB,KAAK6wB,MAAM65S,UAAUj7S,YAEzFmhV,EAAUv1W,UAAU01W,qBAAuB,SAAUnyV,EAAQ1K,GACzD,IAAK0K,EAAO+Q,SAAS6H,QACjB,OAAO,KAEN,GAAI5Y,EAAO+Q,SAAS6H,SAAwC,eAA7Bx3B,KAAK6wB,MAAM+8S,cAAgC,CAC3E,IAAIp4S,EAAY5W,EAAO+Q,SAAS6F,UAC5By7U,EAAiBjxW,KAAK6wB,MAAM+hT,eAAeq+B,eAC3CC,EAAiBlxW,KAAK6wB,MAAM+hT,eAAes+B,eAC3ClxW,KAAK6sU,aAAajuT,IACD,QAAb1K,GAAmC,SAAbA,IAElBlU,KAAK6wW,YADS,SAAdr7U,GAAsC,UAAdA,EACL07U,EAGA,GAGV,UAAbh9V,GAAqC,SAAbA,IAEpBlU,KAAK6wW,YADS,SAAdr7U,GAAsC,SAAdA,EACLy7U,EAGA,KAKV,QAAb/8V,GAAmC,UAAbA,GAAqC,SAAbA,IAC3B,SAAdshB,GAAsC,SAAdA,GAA2B5W,EAAOiS,MAAMs2S,aAIjEnnU,KAAK6wW,YAAc,EAHnB7wW,KAAK6wW,YAAcI,GAMV,WAAb/8V,GAAsC,SAAbA,IAErBlU,KAAK6wW,YADS,SAAdr7U,GAAsC,UAAdA,EACL07U,EAGA,SAM/BlxW,KAAK6wW,YAAc,GAG3BD,EAAUv1W,UAAUwxU,aAAe,SAAUjuT,GACzC,OAAOA,EAAOiuT,cAAgC,cAAhBjuT,EAAOlY,MAMzCkqW,EAAUv1W,UAAU0wG,OAAS,SAAUntF,EAAQiS,EAAOowD,GAClD,IAAIlhF,EAAQC,KAEZA,KAAKwsW,qBAAqB5tV,EAAQA,EAAOkuT,QACzC,IAAIz5S,EACA89U,EACAC,EACAx4U,EACA0L,EACA9H,EACJx8B,KAAKkkS,SAAWrzQ,EAAMiG,oBACtB92B,KAAKqxW,cAAgBzyV,EAAOhH,MAAMsc,WAClC,IAAIlzB,EAAUG,EAAc,OACxBmC,GAAIutB,EAAM7vB,QAAQsC,GAAK,WAAasb,EAAO3M,MAAQ,0BAGvD2M,EAAO+Y,OAAOC,IAAI,SAAU9D,EAAO7hB,GAC/BlS,EAAM08B,OAASwkD,EAAUxkD,OACzB,IACI60U,EADAnkB,KAEA1vG,EAAO7+N,EAAO8V,SAElB,GADA4P,GAAWtuB,MAAOirE,EAAU38C,OAAOtuB,MAAOwgB,MAAOyqD,EAAU38C,OAAO9N,OAC7D1C,EAAMw6S,gBAAgB7xU,QAAUq3B,EAAMw6S,gBAAgB,IACtC,kBAAhB1vT,EAAOlY,MAA4BotB,EAAM65S,QAAQlxU,OAAS,CAE3D60W,GADAnkB,EAAY9xT,GAAavH,EAAOlV,IACRniB,OACxB,IAAK,IAAIN,EAAI,EAAGA,EAAIm1W,EAAan1W,IAC7By8B,GACIC,QAAQ,EAAOpB,KAAM4nS,GAAYzgT,OAAQA,EACzCkV,MAAOA,EAAOrH,KAAM0gU,EAAUhxV,GAAImoC,OAAQA,EAC1C9N,MAAOyqD,EAAUrjD,KAAM3uB,SAAUgyE,EAAUhyE,UAE/C4hB,EAAMrK,QAAQ64S,GAAYzmS,GACrBA,EAASC,SACV94B,EAAMwxW,eAAiB34U,EAASpC,MAChCz2B,EAAMyxW,iBAAiB54U,GACvB74B,EAAM6lS,aAA+B,WAAhBhnR,EAAOlY,KAAqBotB,EAAM65S,QAAQ,GAAG53T,OAAS,EAAKhW,EAAM6lS,aAC5D,OAAtBhtQ,EAAS3pB,SACTlP,EAAM0xW,wBAAwBzwW,EAAS4d,EAAQqiE,EAAWntD,EAAO8E,EAAUz8B,IAG3EqgC,EAAWhQ,GAAYoM,EAASnM,KAAMw0D,EAAUv0D,MAE3ChV,GADL2b,EAAOtzB,EAAM2xW,sBAAsB59U,EAAOlV,EAAQ4d,EAAUykD,EAAW9kF,GAClD00B,EAAMosT,qBAAsBx/F,KAC7C5sN,EAAMosT,qBAAqBz4U,KAAK,IAAI0xB,GAAK7C,EAAKtmB,EAAI0wO,EAAK1wO,EAAGsmB,EAAKrmB,EAAIywO,EAAKzwO,EAAGqmB,EAAKrd,MAAOqd,EAAKtd,SACxFhW,EAAM4xW,SACN/yV,EAAO60T,aAAa9xU,YAAYkvB,EAAMhD,SAAS8V,cAAc,IAAIugS,GAAWnkU,EAAM+wW,SAAW7+V,EAAQ,cAAgB9V,EAAGy8B,EAASpC,MAAOoC,EAAS0L,OAAQ28C,EAAUxzE,QAAS4lB,EAAM4tD,EAAU9yD,GAAI8yD,EAAU7yD,MAG9M+iV,EAAWn0U,GAAkBG,GAAep9B,EAAMwxW,iBAClDH,EAAW/kW,KAAKoxB,OAAoB,IAAb0zU,EAASv0U,EAAuB,IAAbu0U,EAASt0U,EAAuB,IAAbs0U,EAASr0U,GAAW,KACjFxG,GAAY,IAAIC,GAAWx2B,EAAM+wW,SAAW7+V,EAAQ,SAAW9V,EAAGk3B,EAAKtmB,EAAIhN,EAAM08B,OAAOjwB,KAAOgwB,EAASxmB,MAAQ,EAAGqd,EAAKrmB,EAAIjN,EAAM08B,OAAO/vB,IAAwB,EAAlB8vB,EAASzmB,OAAa,EAAG,SAAU6iB,EAASnM,KAAM,YAAe4G,EAAM,EAAI,IAAOA,EAAM,EAAI,IAAK,QAAS4tD,EAAUv0D,KAAMu0D,EAAUv0D,KAAK8J,QAClR46U,GAAY,KAAuB,SAAhBxyV,EAAOlY,KAAmB,QAAU,SAAUkY,EAAO0X,mBAOlGt1B,EAAQmkE,mBACR53C,GAAWsD,EAAM7vB,QAAQsC,GAAK,sBAAsB3B,YAAYX,IAQxE4vW,EAAUv1W,UAAUo2W,wBAA0B,SAAUp9V,EAAeuK,EAAQqiE,EAAWntD,EAAOt3B,EAAM2uU,GACnGnrU,KAAKy8B,QAAWjwB,KAAM,EAAGC,MAAO,EAAGE,OAAQ,EAAGD,IAAK,GACnD,IAAI+wO,EAAO7+N,EAAO8V,SACdyF,EAAeD,GAAe/4B,EAAc,OAC5CmC,GAAItD,KAAK6wB,MAAM7vB,QAAQsC,GAAK,WAAasb,EAAO3M,MAAQ,cAClD6hB,EAAM7hB,OAASk5T,EAAc,IAAMA,EAAc,IACvD5nU,OAAQ,uCAAyC/G,EAAKg6B,MAAQ,IAC1D8D,GAAa2mD,EAAUv0D,MAAQ,WAAalwB,EAAK8nC,OAAOtuB,MAAQ,YAAcxZ,EAAK8nC,OAAO9N,MAAQ,MACtG1C,EAAM7hB,MAAOzV,EAAKyS,SAAUjP,KAAK6wB,MAAOiD,EAAOlV,GAC/C1J,EAAcqlB,GAAmBJ,GACjC9G,EAAOrzB,KAAK0xW,sBAAsB59U,EAAOlV,GAAU5I,MAAOd,EAAYc,MAAOD,OAAQb,EAAYa,QAAUkrE,EAAWkqP,GAC1HhxS,EAAaz1B,MAAM8H,MAAsC,eAA7BxM,KAAK6wB,MAAM+8S,cAAiC,EAAIhvT,EAAO8V,SAAS3nB,GAAKsmB,EAAKtmB,EAAK,KAC3GotB,EAAaz1B,MAAMgI,KAAqC,eAA7B1M,KAAK6wB,MAAM+8S,cAAiC,EAAIhvT,EAAO8V,SAAS1nB,GAAKqmB,EAAKrmB,EAAK,KAC1G,IAAImkW,EAAWn0U,GAAkBG,GAAen9B,KAAKuxW,iBACjDK,EAAQhzV,EAAOiS,MAAMiG,oBAAsBlY,EAAO9G,MAAQ8G,EAAOhH,MACjEi6V,EAAQjzV,EAAOiS,MAAMiG,oBAAsBlY,EAAOhH,MAAQgH,EAAO9G,MACrEqiB,EAAaz1B,MAAM8xB,MAAQyqD,EAAUv0D,KAAK8J,QACpCnqB,KAAKoxB,OAAoB,IAAb0zU,EAASv0U,EAAuB,IAAbu0U,EAASt0U,EAAuB,IAAbs0U,EAASr0U,GAAW,MAAU,IAAM,QAAU,SAClG3C,EAAagrC,oBAAsBztD,GAAU2b,EAAMrzB,KAAK6wB,MAAMosT,qBAAsBx/F,KAC1D,OAAtB7+N,EAAO4c,iBAAwCrgC,IAAjB24B,EAAMrF,QAAwBuD,GAAO8B,EAAMrF,OAAQ7P,EAAOhH,MAAM+a,eAC7F/T,EAAOlY,KAAKnI,QAAQ,QAAU,GAAKyzB,GAAOpT,EAAO4zT,cAAcvO,UAAUnwS,EAAM7hB,OAAQ2M,EAAOhH,MAAM+a,gBACtGX,GAAO8B,EAAMtF,OAAQ5P,EAAO9G,MAAM6a,eAAiBnX,WAAW2e,EAAaz1B,MAAMgI,MAAQklW,EAAMv+U,KAAKrmB,GACvGwO,WAAW2e,EAAaz1B,MAAM8H,OAASqlW,EAAMx+U,KAAKtmB,GAAKyO,WAAW2e,EAAaz1B,MAAMgI,MAAQklW,EAAMv+U,KAAKrmB,EAAI4kW,EAAMv+U,KAAKtd,QACvHyF,WAAW2e,EAAaz1B,MAAM8H,OAASqlW,EAAMx+U,KAAKtmB,EAAI8kW,EAAMx+U,KAAKrd,QACjEhW,KAAK6wB,MAAMosT,qBAAqBz4U,KAAK,IAAI0xB,GAAK7C,EAAKtmB,EAAI0wO,EAAK1wO,EAAGsmB,EAAKrmB,EAAIywO,EAAKzwO,EAAGqmB,EAAKrd,MAAOqd,EAAKtd,SACjG1B,EAAc1S,YAAYw4B,GACtBvb,EAAO+3B,UAAUlX,QAAUz/B,KAAK6wB,MAAM6iT,eACtC1zU,KAAK+zU,qBAAqBn1T,EAAQub,KAI9Cy2U,EAAUv1W,UAAUq2W,sBAAwB,SAAU59U,EAAOlV,EAAQ4d,EAAUykD,EAAWkqP,GACtF,IAAI2mC,EAAc3mC,EAAa,GAAqB,WAAhBvsT,EAAOlY,KAAqBotB,EAAM65S,QAAQ,GAAwB75S,EAAM65S,QAAQ,GAChHxC,EAAa,GAAqB,kBAAhBvsT,EAAOlY,OACzBorW,EAA8B,IAAf3mC,EAAoBr3S,EAAM65S,QAAQ,GAAK75S,EAAM65S,QAAQ,IAExE,IAAIjgT,EACJA,EAAW1tB,KAAK+xW,iBAAiBj+U,EAAOlV,EAAQ4d,EAAU2uS,GAC1D,IAEI93S,EADAqB,EAAW9V,EAAO8V,SAGtB,GAAK10B,KAAK6wB,MAAMiG,qBAAwB92B,KAAK6sU,aAAajuT,IAA2B,kBAAhBA,EAAOlY,KAcvE,CACD1G,KAAKgyW,UAAYtkV,EAAS1gB,EACtBilW,EAAiBz1U,EAASxmB,MAAQhW,KAAKyuF,YAAczuF,KAAKy8B,OAAOjwB,KAAOxM,KAAKy8B,OAAOhwB,MApB9E,EAqBVihB,EAAS3gB,EAA2B,SAAvBk0E,EAAU/sE,SAAsBwZ,EAAS3gB,EAClD/M,KAAKkyW,mBAAmBD,EAAgBvkV,EAAS3gB,EAAGk0E,EAAU5xB,UAAWv7B,EAAMrF,OAAS,GAC5Ff,EAAS3gB,EAAI/M,KAAKmyW,sBAAsBzkV,EAAS3gB,EAAG+kW,EAAah+U,EAAMrF,OAAS,IAAMzuB,KAAKqxW,cAAepwR,EAAU/sE,SAAU0K,EAAQ4d,EAAU2uS,EAAYr3S,OAnB1D,CAClG9zB,KAAKoyW,UAAY1kV,EAAS3gB,EAC1B,IAAIklW,EAAiBz1U,EAASzmB,OAA6B,EAAnB/V,KAAKyuF,YAAmBzuF,KAAK4lS,aACjE5lS,KAAKy8B,OAAO9vB,OAAS3M,KAAKy8B,OAAO/vB,IAP3B,EAQVghB,EAAS1gB,EAA4B,SAAvBi0E,EAAU/sE,SAAuBwZ,EAAS1gB,EACpDhN,KAAKkyW,mBAAmBD,EAAgBvkV,EAAS1gB,EAAGi0E,EAAU5xB,YAAWrvD,KAAK6sU,aAAajuT,IAAUkV,EAAMrF,OAAS,GAExHf,EAAS1gB,EAAMhN,KAAK6sU,aAAajuT,IAA2B,kBAAhBA,EAAOlY,KAE/C1G,KAAKmyW,sBAAsBzkV,EAAS1gB,EAAG8kW,EAAah+U,EAAMrF,OAAS,IAAMzuB,KAAKqxW,cAAepwR,EAAU/sE,SAAU0K,EAAQ4d,EAAU2uS,EAAYr3S,GAD/I9zB,KAAKqyW,sBAAsB3kV,EAAS1gB,EAAGi0E,EAAU/sE,SAAU0K,EAAQkV,EAAO0I,EAAU2uS,GAEpFnrU,KAAK6sU,aAAajuT,IAAwC,eAA7B5e,KAAK6wB,MAAM+8S,gBACxClgT,EAAW1tB,KAAKsyW,2BAA2B5kV,EAAUuzD,EAAU/sE,SAAU0K,EAAQkV,EAAO0I,EAAU2uS,IAoB1G,OAVA93S,EAAOkJ,GAAc7O,EAAU8O,EAAUx8B,KAAKy8B,SAElCzvB,EAAI0nB,EAAS3e,QAAYsd,EAAKtmB,EAAI2nB,EAAS1e,OAClDqd,EAAKtmB,EAAIsmB,EAAKrd,MAAQ,GAAOqd,EAAKrmB,EAAIqmB,EAAKtd,OAAS,IACrDsd,EAAKtmB,EAAIsmB,EAAKtmB,EAAI,EA7BR,EA6BsBsmB,EAAKtmB,EACrCsmB,EAAKrmB,EAAIqmB,EAAKrmB,EAAI,EA9BR,EA8BsBqmB,EAAKrmB,EACrCqmB,EAAKtmB,GAAMsmB,EAAKtmB,EAAIsmB,EAAKrd,MAAS0e,EAAS1e,MAASqd,EAAKtmB,EAAIsmB,EAAKrd,MAAS0e,EAAS1e,MA/B1E,EA+B4F,EACtGqd,EAAKrmB,GAAMqmB,EAAKrmB,EAAIqmB,EAAKtd,OAAU2e,EAAS3e,OAAUsd,EAAKrmB,EAAIqmB,EAAKtd,OAAU2e,EAAS3e,OAhC7E,EAgCgG,EAC1G/V,KAAKuxW,eAAyC,gBAAxBvxW,KAAKuxW,eAAmCvxW,KAAKgxW,gBAAkBhxW,KAAKuxW,gBAEvFl+U,GAGXu9U,EAAUv1W,UAAUi3W,2BAA6B,SAAU5kV,EAAUxZ,EAAU0K,EAAQkV,EAAOhH,EAAMq+S,GAChG,IACIonC,EACAhxV,EAASuS,EAAM45S,WAAWj5S,WAAa,GAAMpoB,KAAK+Q,IAAO0W,EAAM45S,WAAW1oS,SAAWlR,EAAM45S,WAAWj5S,YAAc,EAuCxH,OArCI89U,EADe,IAAfpnC,EACer3S,EAAM45S,WAAW9gU,OAASknB,EAAM45S,WAAWrnS,YAAcvS,EAAM45S,WAAWrnS,YACnFvS,EAAM45S,WAAW9gU,OAGRknB,EAAM45S,WAAW9gU,OAASknB,EAAM45S,WAAWrnS,YAAcvS,EAAM45S,WAAWrnS,YACnFvS,EAAM45S,WAAW9gU,OAE3B5M,KAAKuxW,eAAyC,gBAAxBvxW,KAAKuxW,eAAmCvxW,KAAKgxW,gBAAkBhxW,KAAKuxW,eACtF3yV,EAAOguT,SAASruU,QAAQ,aAAe,EACvC2V,EAAwB,UAAbA,EAAuB,MAAQA,EAErC0K,EAAOguT,SAASruU,QAAQ,UAAY,IACzC2V,EAAyB,UAAbA,GAAqC,QAAbA,EAAsBA,EAAW,QAGrEq+V,EADa,UAAbr+V,EAC8B,IAAfi3T,EAAmBonC,EAAe,GAAcA,EAAe,GAE5D,WAAbr+V,EACUq+V,EAAe,EAtBpB,EAwBQ,QAAbr+V,EACyB,IAAfi3T,EAAmBonC,EAAe,GAAcA,EAAe,GAE5D,WAAbr+V,EA3BK,EA+BS,IAAfi3T,EACeonC,GAAgB3zV,EAAOiS,MAAMjkB,OAAS2lW,EAhC/C,EAiCkB,mBAApB3zV,EAAOguT,SAAgC2lC,EAAe,GAAcA,EAAe,GAGxEA,GAAgB3zV,EAAOiS,MAAMjkB,OAAS2lW,EApC/C,EAoCwEA,EAAe,GAGrG7kV,EAAS3gB,EAAI6R,EAAO8V,SAAS1e,MAAQ,EAAI4I,EAAO8V,SAAS3nB,EAAIwlW,EAAelmW,KAAKoV,IAAIF,GACrFmM,EAAS1gB,EAAI4R,EAAO8V,SAAS3e,OAAS,EAAI6I,EAAO8V,SAAS1nB,EAAIulW,EAAelmW,KAAKqV,IAAIH,GAC/EmM,GAKXkjV,EAAUv1W,UAAU02W,iBAAmB,SAAUj+U,EAAOlV,EAAQ4d,EAAU2uS,GACtE,IAAIz9S,EAAW,IAAIkG,GAAc,EAAG,GAChCk+U,EAA+B,WAAhBlzV,EAAOlY,MAAqBykU,EAAa,EAAKr3S,EAAM65S,QAAQ,GAAK75S,EAAM65S,QAAQ,GAC9E,kBAAhB/uT,EAAOlY,OACPorW,EAA8B,IAAf3mC,EAAoBr3S,EAAM65S,QAAQ,GAAK75S,EAAM65S,QAAQ,IAExE,IAAI71T,EAAQ8G,EAAO9G,MACfF,EAAQgH,EAAOhH,MACfwc,EAAaxV,EAAOiS,MAAMiG,oBAC9B,GAAoB,kBAAhBlY,EAAOlY,KAA0B,CAEjC,OADA1G,KAAK4lS,aAAe,EACZulC,GACJ,KAAK,EACDz9S,EAAWgN,GAAS5G,EAAMtF,OAAQsF,EAAM6H,OAAQ7jB,EAAOF,EAAOwc,GAC9D,MACJ,KAAK,EACD1G,EAAWgN,GAAS5G,EAAMtF,OAAQsF,EAAMoF,QAASphB,EAAOF,EAAOwc,GAC/D,MACJ,KAAK,EACD1G,EAAWgN,GAAS5G,EAAMtF,OAAQsF,EAAMmF,QAASnhB,EAAOF,EAAOwc,GAC/D,MACJ,KAAK,EACD1G,EAAWgN,GAAS5G,EAAMtF,OAAQsF,EAAM8H,cAAe9jB,EAAOF,EAAOwc,GACrE,MACJ,KAAK,EACD1G,EAAWgN,GAAS5G,EAAMtF,OAAQsF,EAAM+H,cAAe/jB,EAAOF,EAAOwc,GACrE,MACJ,QACI1G,EAAWgN,GAAS5G,EAAMtF,OAAQsF,EAAMgI,SAASqvS,EAAa,GAAIrzT,EAAOF,EAAOwc,GAChFp0B,KAAK4lS,aAAehnR,EAAOkuT,OAAO/2T,OAAS,EAInD2X,EAAS3gB,EAAI+mB,EAAM65S,QAAQ,GAAG5gU,EAAK+mB,EAAM65S,QAAQ,GAAG33T,MAAQ,OAG5D0X,EADoB,IAAfy9S,GAAmC,IAAfA,EACd,IAAIv3S,GAAcE,EAAMw6S,gBAAgB,GAAGvhU,EAAG+mB,EAAMw6S,gBAAgB,GAAGthU,GAE7D,IAAfm+T,GAAmC,IAAfA,GAAqC,WAAhBvsT,EAAOlY,KAGjD0tB,GACQrnB,EAAG+kW,EAAY/kW,EAAK+kW,EAAiB,MAAI,EAAG9kW,EAAG8kW,EAAY9kW,IAG3DD,EAAG+kW,EAAY/kW,EAAI+kW,EAAY97V,MAAOhJ,EAAG8kW,EAAY9kW,EAAK8kW,EAAkB,OAAI,GANlF,IAAIl+U,GAAcE,EAAMw6S,gBAAgB,GAAGvhU,EAAG+mB,EAAMw6S,gBAAgB,GAAGthU,GAStF,GAAIm+T,EAAa,GAAqB,kBAAhBvsT,EAAOlY,KACzB,GAAIkY,EAAOiS,MAAMiG,oBAAqB,CAClC,IAAI/gB,EAAS+7V,EAAY/7V,OACzB2X,EAAS1gB,EAAI8kW,EAAY9kW,EAAI+I,EAAS,EAAI,GAAoB,IAAfo1T,EAAmB,GAAK,OAEtE,CACD,IAAIn1T,EAAQ87V,EAAY97V,MACxB0X,EAAS3gB,EAAI+kW,EAAY/kW,EAAIiJ,EAAQ,EAAI,GAAoB,IAAfm1T,EAAmB,GAAK,GAG9E,OAAOz9S,GAEXkjV,EAAUv1W,UAAU82W,sBAAwB,SAAUK,EAAen/U,EAAM0L,EAAS7qB,EAAU0K,EAAQ4d,EAAU2uS,EAAYr3S,GACxH,GAAmC,eAA/BlV,EAAOiS,MAAM+8S,cACb,OAAO,KAEX,IACInxS,EAASz8B,KAAKy8B,OACdg2U,EAAczyW,KAAKkkS,SAA6B1nQ,EAASxmB,MAA3BwmB,EAASzmB,OACvC28V,EAAa1yW,KAAKyuF,YAAcgkR,EAAa,EAHnC,EAad,OATI7zV,EAAOlY,KAAKnI,QAAQ,aAAe,EACnC2V,EAAwB,UAAbA,EAAuB,MAAQA,EAErC0K,EAAOlY,KAAKnI,QAAQ,UAAY,EACrC2V,EAAyB,UAAbA,GAAqC,QAAbA,EAAsBA,EAAW,OAEhD,cAAhB0K,EAAOlY,OACZwN,EAAwB,SAAbA,EAAsB,SAAWA,GAExCA,GACJ,IAAK,SACDs+V,EAAiBxyW,KAAKkkS,SAGlBnlQ,EAAWyzU,EAAgBn/U,EAAKrd,MAAQ08V,EAAaj2U,EAAOjwB,KACvDgmW,EAAgBn/U,EAAKrd,MAAQ08V,EAAaj2U,EAAOhwB,MAHtDsyB,EAAWyzU,EAAgBn/U,EAAKtd,OAAS28V,EAAaj2U,EAAO/vB,IACxD8lW,EAAgBn/U,EAAKtd,OAAS28V,EAAaj2U,EAAO9vB,OAG3D,MACJ,IAAK,SACD6lW,EAAgBA,EAAiBxyW,KAAKkkS,SAEjCnlQ,EAAUyzU,EAAiBn/U,EAAKrd,MAAQ,EAAKw8V,EAAiBn/U,EAAKrd,MAAQ,EAD3E+oB,EAAUyzU,EAAiBn/U,EAAKtd,OAAS,EAAKy8V,EAAiBn/U,EAAKtd,OAAS,EAElF,MACJ,IAAK,OACDy8V,EAAgBxyW,KAAK2yW,4BAA4BH,EAAen/U,EAAM0L,EAASngB,EAAQ4d,EAAU2uS,EAAYr3S,GAC7G,MACJ,QACI4+U,GAAc1yW,KAAK6wW,YACnB2B,EAAgBxyW,KAAK4yW,6BAA6BJ,EAAen/U,EAAMnf,EAAU0K,EAAQusT,EAAYunC,EAAY3zU,GAGzH,IAAIm2J,EAASl1L,KAAKkkS,SACbsuE,EAAgBn/U,EAAKtmB,GAAKylW,EAAgBn/U,EAAKtmB,EAAIsmB,EAAKrd,MAD/Bw8V,EAAgBn/U,EAAKrmB,GAAKwlW,EAAgBn/U,EAAKrmB,EAAIqmB,EAAKtd,OAKtF,OAHA/V,KAAKuxW,eAAiBr8K,EACO,gBAAxBl1L,KAAKuxW,eAAmCvxW,KAAKgxW,gBAAkBhxW,KAAKuxW,eAC3C,gBAAxBvxW,KAAKuxW,eAAoCz9U,EAAM0C,OAAS5X,EAAOypD,SAAYroE,KAAKuxW,eAC/EiB,GAEX5B,EAAUv1W,UAAUg3W,sBAAwB,SAAUG,EAAet+V,EAAU0K,EAAQkV,EAAOhH,EAAMq+S,GAOhG,OALKvsT,EAAOlY,KAAKnI,QAAQ,SAAW,GAAqB,cAAhBqgB,EAAOlY,MACzC1G,KAAKqxW,eAAsD,SAArCzyV,EAAOkuT,OAAO7rP,UAAU/sE,WACjDA,EAAwB,QAAbA,EAAqB,SAAwB,WAAbA,EAAwB,MAAQA,GAE/ElU,KAAKuxW,eAAyC,gBAAxBvxW,KAAKuxW,eAAmCvxW,KAAKgxW,gBAAkBhxW,KAAKuxW,eAClFr9V,GACJ,IAAK,MACL,IAAK,QACDs+V,EAAgBA,EAAgBxyW,KAAK4lS,aAAe5lS,KAAKyuF,YAAc3hE,EAAK/W,OAAS,EAAI/V,KAAKy8B,OAAO9vB,OAT/F,EAUF3M,KAAK6wW,YACT,MACJ,IAAK,SACD2B,EAAgBA,EAAgBxyW,KAAK4lS,aAAe5lS,KAAKyuF,YAAc3hE,EAAK/W,OAAS,EAAI/V,KAAKy8B,OAAO/vB,IAb/F,EAcF1M,KAAK6wW,YACT,MACJ,IAAK,OACD2B,EAAgBxyW,KAAK6yW,4BAA4BL,EAAexyW,KAAK4lS,aAAchnR,EAAQkV,EAAOhH,EAAMq+S,GAGhH,OAAOqnC,GAEX5B,EAAUv1W,UAAUm2W,iBAAmB,SAAU9sW,GAC7C1E,KAAK2xW,QAA2B,gBAAhBjtW,EAAM8xB,OAA2B9xB,EAAM4/B,OAAOtuB,MAAQ,EACtEhW,KAAKyuF,YAAc/pF,EAAM4/B,OAAOtuB,MAC3BhW,KAAK2xW,UACN3xW,KAAKy8B,QAAWjwB,KAAM,EAAGC,MAAO,EAAGE,OAAQ,EAAGD,IAAK,KAG3DkkW,EAAUv1W,UAAUs3W,4BAA8B,SAAUH,EAAen/U,EAAM0L,EAASngB,EAAQkO,EAAMq+S,EAAYr3S,GAOhH,IANA,IAAIpG,EACAolV,EACAC,GAAY,EACZ7+V,EAAW,EACXizB,EAAannC,KAAK6wB,MAAMosT,qBACxB+1B,GAAkD,IAAlCp0V,EAAOlY,KAAKnI,QAAQ,UAAmC,SAAhBqgB,EAAOlY,KAAkB,EAAI,EACjFqsW,GAAa7+V,EAAW8+V,GAC3BtlV,EAAW1tB,KAAKmyW,sBAAsBK,EAAen/U,EAAM0L,EAAS/+B,KAAK6+D,YAAY3qD,GAAW0K,EAAQkO,EAAMq+S,EAAYr3S,GAOtHi/U,EANC/yW,KAAKkkS,UAKN4uE,EAAYv2U,GAAc,IAAI3I,GAAclG,EAAU1tB,KAAKgyW,WAAYllV,EAAM9sB,KAAKy8B,SAC5D1vB,EAAI,GAAK2K,GAAUo7V,EAAW3rU,EAAYvoB,EAAO8V,WACnEo+U,EAAU/lW,EAAI+lW,EAAU98V,MAAQ4I,EAAO8V,SAAS1e,OANpD88V,EAAYv2U,GAAc,IAAI3I,GAAc5zB,KAAKoyW,UAAW1kV,GAAWZ,EAAM9sB,KAAKy8B,SAC5DzvB,EAAI,GAAK0K,GAAUo7V,EAAW3rU,EAAYvoB,EAAO8V,WAAao+U,EAAU9lW,EAAI4R,EAAO8V,SAAS3e,OAOtH7B,IAEJ,OAAOwZ,GAGXkjV,EAAUv1W,UAAU62W,mBAAqB,SAAUl1W,EAAOw1W,EAAenjT,EAAWtwB,GAChF,OAAQswB,GACJ,IAAK,MACDmjT,EAAiBxyW,KAAKkkS,SACjBnlQ,EAAUyzU,EAAgBx1W,EAAQw1W,EAAgBx1W,EADrB+hC,EAAUyzU,EAAgBx1W,EAAQw1W,EAAgBx1W,EAEpF,MACJ,IAAK,OACDw1W,EAAiBxyW,KAAKkkS,SACjBnlQ,EAAUyzU,EAAgBx1W,EAAQw1W,EAAgBx1W,EADrB+hC,EAAUyzU,EAAgBx1W,EAAQw1W,EAAgBx1W,EAEpF,MACJ,IAAK,SACDw1W,EAAgBA,EAGxB,OAAOA,GAGX5B,EAAUv1W,UAAUu3W,6BAA+B,SAAUllV,EAAU2F,EAAMnf,EAAU0K,EAAQ3M,EAAOygW,EAAY3zU,GAC9G,IACIryB,EADA+vB,EAASz8B,KAAKy8B,OAElB,OAAQ7d,EAAOlY,MACX,IAAK,cACL,IAAK,YACL,IAAK,OACDgG,EAAiB,IAAVuF,IAAgBjS,KAAKqxW,eAA6B,IAAVp/V,GAAejS,KAAKqxW,cACnE3jV,EAAW1tB,KAAKizW,oBAAoB/+V,EAAUwZ,EAAUglV,EAAYj2U,EAAQpJ,EAAM3mB,GAClF,MACJ,IAAK,SACDA,GAAiB,IAAVuF,GAAyB,IAAVA,KAAiBjS,KAAKqxW,gBAC1B,IAAVp/V,GAAyB,IAAVA,IAAgBjS,KAAKqxW,cAC5C3jV,EAAW1tB,KAAKizW,oBAAoB/+V,EAAUwZ,EAAUglV,EAAYj2U,EAAQpJ,EAAM3mB,EAAKuF,EAAQ,GAC/F,MACJ,IAAK,gBACGA,GAAS,GACTvF,EAAiB,IAAVuF,IAAgBjS,KAAKqxW,eAA6B,IAAVp/V,GAAejS,KAAKqxW,cACnE3jV,EAAW1tB,KAAKizW,oBAAoB/+V,EAAUwZ,EAAUglV,EAAYj2U,EAAQpJ,EAAM3mB,IAI9EghB,EADA1tB,KAAKqxW,cACOrxW,KAAKkkS,SAAgDx2Q,EAAWglV,EAAaj2U,EAAOhwB,MAApEihB,EAAWglV,EAAaj2U,EAAO/vB,IAG/C1M,KAAKkkS,SAAmDx2Q,EAAWglV,EAAaj2U,EAAOjwB,KAAvEkhB,EAAWglV,EAAaj2U,EAAO9vB,OAGnE,MACJ,QAEQ+gB,EADCqR,GAAwB,QAAb7qB,IAAyB6qB,GAAwB,UAAb7qB,EACpClU,KAAKkkS,SAAmDx2Q,EAAWglV,EAAaj2U,EAAOjwB,KAAvEkhB,EAAWglV,EAAaj2U,EAAO9vB,OAG/C3M,KAAKkkS,SAAgDx2Q,EAAWglV,EAAaj2U,EAAOhwB,MAApEihB,EAAWglV,EAAaj2U,EAAO/vB,IAIvE,OAAOghB,GAKXkjV,EAAUv1W,UAAU43W,oBAAsB,SAAU/+V,EAAUwZ,EAAUglV,EAAYj2U,EAAQpJ,EAAM3mB,EAAKolB,GAoBnG,YAnBe,IAAXA,IAAqBA,GAAS,GAY1BpE,EAXH1tB,KAAKkkS,SAUFx3R,EACyB,UAAbwH,GAAyB4d,EAAgDpE,EAAWglV,EAAaj2U,EAAOhwB,MAArEihB,EAAWglV,EAAaj2U,EAAOjwB,KAGrD,UAAb0H,GAAyB4d,EACjCpE,EAAW2F,EAAKrd,MAAQ08V,EAAaj2U,EAAOjwB,KADDkhB,EAAW2F,EAAKrd,MAAQ08V,EAAaj2U,EAAOhwB,MAb3FC,EACyB,UAAbwH,GAAyB4d,EAAkDpE,EAAWglV,EAAaj2U,EAAO/vB,IAAvEghB,EAAWglV,EAAaj2U,EAAO9vB,OAGrD,UAAbuH,GAAyB4d,EACjCpE,EAAW2F,EAAKtd,OAAS28V,EAAaj2U,EAAO9vB,OADF+gB,EAAW2F,EAAKtd,OAAS28V,EAAaj2U,EAAO/vB,KAexGkkW,EAAUv1W,UAAUw3W,4BAA8B,SAAU7lW,EAAGi2R,EAAYrkR,EAAQkV,EAAOhH,EAAMq+S,GAC5F,IAGIj3T,EAGA23T,EAEAinC,EACAjxE,EACAqxE,EAVAv7U,EAAS/Y,EAAO+Y,OAChB1lB,EAAQ6hB,EAAM7hB,MACdwc,EAASkJ,EAAO1lB,GAAOwc,OAEvB6D,EAAYqF,EAAOl7B,OAAS,EAAIwV,EAAQ0lB,EAAO1lB,EAAQ,GAAK,KAC5DmgB,EAAgBngB,EAAQ,EAAI0lB,EAAO1lB,EAAQ,GAAK,KAEhD8gW,GAAY,EAIZ5rU,EAAannC,KAAK6wB,MAAMosT,qBAC5B,GAAoB,WAAhBr+T,EAAOlY,KACPwN,EAAW,WAEV,GAAI0K,EAAOlY,KAAKnI,QAAQ,SAAW,EACpC2V,EAAW,MACPjC,IACAiC,EAAake,GAAkBA,EAAcoF,SAAY/I,EAAS2D,EAAc3D,SAAWzuB,KAAKqxW,eACzF5iV,IAAW2D,EAAc3D,OAAkB,SAAR,YAG7C,GAAoB,kBAAhB7P,EAAOlY,KACO,IAAfykU,GAAmC,IAAfA,GAAoBA,EAAa,EACrDj3T,EAAW0K,EAAOhH,MAAMsc,WAAa,SAAW,MAE5B,IAAfi3S,GAAmC,IAAfA,EACzBj3T,EAAW0K,EAAOhH,MAAMsc,WAAa,MAAQ,UAG7C6+U,GAAY,EACZ7+V,EAAW,SACX23T,EAAY7rU,KAAKqyW,sBAAsBrlW,EAAGkH,EAAU0K,EAAQkV,EAAOhH,EAAMq+S,SAI7E,GAAc,IAAVl5T,EACAiC,GAAaoe,IAAcA,EAAUkF,SAAW/I,EAAS6D,EAAU7D,QAC9DA,EAAS6D,EAAU7D,QAAUzuB,KAAKqxW,cAAkB,MAAQ,cAEhE,GAAIp/V,IAAU0lB,EAAOl7B,OAAS,EAC/ByX,GAAake,IAAkBA,EAAcoF,SAAW/I,EAAS2D,EAAc3D,QAC1EA,EAAS2D,EAAc3D,QAAUzuB,KAAKqxW,cAAkB,MAAQ,cAGrE,GAAK/+U,EAAUkF,SAAapF,GAAiBA,EAAcoF,QAGtD,GAAKlF,EAAUkF,SAAYpF,EAI3B,CACD,IAAImgD,GAASjgD,EAAU7D,OAAS2D,EAAc3D,QAAU,EACpD0kV,EAAc5gS,EAAQtgE,GAAUqgB,EAAU7D,OAAU8jD,GAAStgE,EAAQ,IACzEiC,EAAYlU,KAAKqxW,cACb8B,EAAa1kV,EAAS,SAAW,MADJ0kV,EAAa1kV,EAAS,MAAQ,cAN/Dva,EAAYoe,EAAU7D,OAASA,GAAW2D,GAAiBA,EAAc3D,OAASA,EAC9E,SAAW,WAJfva,EAAW,MAgBvB,IAFA2tR,EAAwB,WAAb3tR,EACXg/V,GAAiB,QAAS,MAAO,SAAU,SAAU,QAAQ30W,QAAQ2V,GAC9D6+V,GAAaG,EAAgB,GAChCrnC,EAAY7rU,KAAKqyW,sBAAsBrlW,EAAGhN,KAAK6+D,YAAYq0S,GAAgBt0V,EAAQkV,EAAOhH,EAAMq+S,GAEhG4nC,GADAD,EAAYv2U,GAAc,IAAI3I,GAAc5zB,KAAKoyW,UAAWvmC,GAAY/+S,EAAM9sB,KAAKy8B,SAC7DzvB,EAAI,GAAK0K,GAAUo7V,EAAW3rU,EAAYvoB,EAAO8V,WAC/Do+U,EAAU9lW,EAAI8lW,EAAU/8V,OAAU6I,EAAO8V,SAAS3e,OAC1Dm9V,EAAgBrxE,EAAWqxE,EAAgB,EAAIA,EAAgB,EAC/DrxE,GAAW,EAEf,OAAOgqC,GAOX+kC,EAAUv1W,UAAU04U,qBAAuB,SAAUn1T,EAAQ5d,GAMzD,IAAK,IAFD0sB,EAHA0lV,EAAgBx0V,EAAO60T,aAAaliU,WACpC8hW,EAAWz0V,EAAO0X,YAAY/kB,WAC9B1R,EAAQ+e,EAAO+3B,UAAU92C,MAAQ+e,EAAO+3B,UAAUzrC,SAElDzO,EAASuE,EAAU,EAAIqyW,EAAS52W,OAC3BN,EAAI,EAAGA,EAAIM,EAAQN,IACpB6E,GACAA,EAAQ0D,MAAMC,WAAa,SAC3B60B,GAAgBx4B,EAASnB,EAAO,IAAK,YAGrC6tB,EAAW,IAAIkG,IAAgBy/U,EAASl3W,GAAG0W,aAAa,OAAWwgW,EAASl3W,GAAG0W,aAAa,SAAY,GAAMwgW,EAASl3W,GAAG0W,aAAa,OAAWwgW,EAASl3W,GAAG0W,aAAa,UAAa,GACxLslB,GAAck7U,EAASl3W,GAAI0D,EAAO,IAAK+e,EAAQ,KAAM8O,GAAU,GAC3D0lV,EAAcj3W,KACduxB,EAAW,IAAIkG,IAAgBw/U,EAAcj3W,GAAG0W,aAAa,OAAWugW,EAAcj3W,GAAG0W,aAAa,SAAY,GAAMugW,EAAcj3W,GAAG0W,aAAa,OAAWugW,EAAcj3W,GAAG0W,aAAa,UAAa,GAC5MslB,GAAci7U,EAAcj3W,GAAI0D,EAAO,IAAK+e,EAAQ,KAAM8O,GAAU,MAKpFkjV,EAAUv1W,UAAUwjE,YAAc,SAAU5sD,GACxC,OAAS,QAAS,MAAO,SAAU,SAAU,QAAQA,IAKzD2+V,EAAUv1W,UAAUkkC,cAAgB,WAEhC,MAAO,aAOXqxU,EAAUv1W,UAAUiX,QAAU,SAAUue,KAGjC+/U,KC/nBP0C,GAA0B,WAK1B,SAASA,EAASziV,GACd7wB,KAAK6wB,MAAQA,EA2RjB,OArRAyiV,EAASj4W,UAAU0wG,OAAS,SAAUntF,GAClC,GAAiC,eAA7B5e,KAAK6wB,MAAM+8S,cACX,OAAO,KAEX5tU,KAAKmB,cAAcyd,GACnB5e,KAAKuzW,eAAe30V,IAExB00V,EAASj4W,UAAUk4W,eAAiB,SAAU30V,GAc1C,IAAK,IAXDs2T,EACAs+B,EAHAv2C,EAAcr+S,EAAO3M,MAIrBwhW,EAAW70V,EAAO+Q,SAClB+jV,EAAc90V,EAAO+Q,SAAS+jV,YAO9BC,GANS/0V,EAAO0lB,QAME,GAAI,KACjBlmC,EAAK,EAAGyE,EAAK+b,EAAO+Y,OAAQv5B,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvD,IAAIw1W,EAAU/wW,EAAGzE,GACjB,GAAIw1W,EAAQp8U,SAAWo8U,EAAQtlC,gBAAgB,GAAI,CAC/C,IAAIulC,EAAS,EACTC,EAAS,EACb,OAAQL,EAAS11U,MACb,IAAK,WACD+1U,EAASL,EAASM,cAClB,MACJ,IAAK,aACDF,EAASJ,EAASO,gBAClB,MACJ,IAAK,OACDH,EAASJ,EAASO,gBAClBF,EAASL,EAASM,cAG1BJ,EAAiB3zW,KAAK,YAAcyzW,EAAS/sW,KAAO,SAASktW,EAASh1V,EAAQ5e,KAAK6wB,MAAMiG,oBAAqB+8U,EAAQC,GACtH5+B,EAAWl1U,KAAK6wB,MAAM7vB,QAAQsC,GAAK,0BAAiC25T,EAAc,UAAY22C,EAAQ3hW,MACtGuhW,EAAQxzW,KAAK6wB,MAAM7vB,QAAQsC,GAAK,wBAA+B25T,EAAc,UAAY22C,EAAQ3hW,MACjG,IAAIsxR,EAAc,IAAIntQ,GAAW8+S,EAAU,GAAIu+B,EAASz9V,MAAOy9V,EAASj9U,OAASx2B,KAAK6wB,MAAMwF,WAAW1G,SAAU,KAAM,GAAIgkV,EAAe,IACtI52V,EAAO/c,KAAK6wB,MAAMhD,SAASsI,SAASotQ,GACxC3kR,EAAO20T,gBAAgB5xU,YAAYob,GACnC,IAAIk3V,EAAY,IAAI79U,GAAWo9U,EAAO,GAAIE,EAAY19V,MAAO09V,EAAYl9U,OAASx2B,KAAK6wB,MAAMwF,WAAW1G,SAAU,KAAM,GAAIgkV,EAAe,IACvIO,EAAUl0W,KAAK6wB,MAAMhD,SAASsI,SAAS89U,GAC3Cr1V,EAAO20T,gBAAgB5xU,YAAYuyW,MAK/CZ,EAASj4W,UAAU84W,aAAe,SAAUrgV,EAAOlV,EAAQwV,EAAY4G,EAAIC,GACvE,IAAIw4U,EAAW70V,EAAO+Q,SAClB6F,EAAYi+U,EAASj+U,UACrB9H,KAEAe,GADe7P,EAAO4zT,cACb5zT,EAAOlY,KAAKnI,QAAQ,aAAe,EAAIqgB,EAAO4zT,cAAcvO,UAAUnwS,EAAM7hB,OAC9D,YAAtB2M,EAAO4c,YAAkD,qBAAtB5c,EAAO4c,WAAsC5c,EAAO+Y,OAAO7D,EAAM7hB,OAAW,KAC5G6hB,EAAMrF,QACV42B,EAAa3qB,GAAS5G,EAAMtF,QAAyB,SAAdgH,GAAsC,SAAdA,EAA2C,WAAlBi+U,EAAS/sW,MAC9E,eAAlB+sW,EAAS11U,MAA2C,SAAlB01U,EAAS11U,KAA4D/C,EAAxCA,EAAKy4U,EAASW,wBAA+B,GAAI3lV,GAAyB,SAAd+G,GAAsC,SAAdA,EAA2C,WAAlBi+U,EAAS/sW,MACnK,aAAlB+sW,EAAS11U,MAAyC,SAAlB01U,EAAS11U,KAA0D9C,EAAtCA,EAAKw4U,EAASY,sBAA6B,GAAIz1V,EAAO9G,MAAO8G,EAAOhH,MAAOwc,GAE7I,GADA1G,EAASlpB,KAAK6gD,GACVzmC,EAAOiuT,aAAc,CACrB,IAAIoyB,EAAWnrU,EAAMw6S,gBAAgB,GACrC5gT,EAASlpB,KAAKy6V,OAEb,CACGA,EAAWvkU,GAAS5G,EAAMtF,OAAQsF,EAAMrF,OAAQ7P,EAAO9G,MAAO8G,EAAOhH,MAAOwc,GAChF1G,EAASlpB,KAAKy6V,GAElB,IAAIz/S,EAAW9kB,GAAS5G,EAAMtF,QAAyB,UAAdgH,GAAuC,SAAdA,EAA2C,WAAlBi+U,EAAS/sW,MAC7E,eAAlB+sW,EAAS11U,MAA2C,SAAlB01U,EAAS11U,KAA4D/C,EAAxCA,EAAKy4U,EAASa,wBAA+B,GAAI7lV,GAAyB,UAAd+G,GAAuC,SAAdA,EAA2C,WAAlBi+U,EAAS/sW,MACpK,aAAlB+sW,EAAS11U,MAAyC,SAAlB01U,EAAS11U,KAA0D9C,EAAtCA,EAAKw4U,EAASc,sBAA6B,GAAI31V,EAAO9G,MAAO8G,EAAOhH,MAAOwc,GAQ7I,OAPA1G,EAASlpB,KAAKg7C,GAEd1rB,EAAMwwD,MAA2B,aAAlBmvR,EAAS11U,KAAuB01U,EAASM,cAAgBN,EAASO,gBACjFh0W,KAAKkxW,eAAoC,aAAlBuC,EAAS11U,MAAyC,SAAlB01U,EAAS11U,KAAoB3J,EAAc1G,EAAS,GAAG3gB,EAAI2gB,EAAS,GAAG3gB,EACzH2gB,EAAS,GAAG1gB,EAAI0gB,EAAS,GAAG1gB,EAAM,EACvChN,KAAKixW,eAAoC,aAAlBwC,EAAS11U,MAAyC,SAAlB01U,EAAS11U,KAAoB3J,EAAc1G,EAAS,GAAG3gB,EAAI2gB,EAAS,GAAG3gB,EACzH2gB,EAAS,GAAG1gB,EAAI0gB,EAAS,GAAG1gB,EAAM,EAChChN,KAAKw0W,kBAAkB9mV,EAAS,GAAIA,EAAS,GAAIA,EAAS,GAAI9O,EAAQwV,IAGjFk/U,EAASj4W,UAAUo5W,oBAAsB,SAAU3gV,EAAOlV,EAAQwV,EAAYy/U,EAAQC,EAAQh8V,EAAOF,GAClFgH,EAAO+Q,SACtB,OAAO3vB,KAAKm0W,aAAargV,EAAOlV,EAAQwV,EAAYy/U,EAAQC,IAEhER,EAASj4W,UAAUq5W,yBAA2B,SAAU5gV,EAAOlV,EAAQwV,EAAYy/U,EAAQC,EAAQh8V,EAAOF,GAGtG,OAFAi8V,EAAUA,EAAS,IAAO//U,EAAMtF,OAChCslV,EAAUA,EAAS,IAAOhgV,EAAMrF,OACzBzuB,KAAKm0W,aAAargV,EAAOlV,EAAQwV,EAAYy/U,EAAQC,IAEhER,EAASj4W,UAAUs5W,gCAAkC,SAAU7gV,EAAOlV,EAAQwV,EAAYy/U,EAAQC,EAAQh8V,EAAOF,GAC7G,IAAIg9V,EAAU50W,KAAK60W,gBAAgBj2V,EAAQA,EAAO+Q,SAASoO,MAG3D,OAFA81U,GAAmBe,EAAQlxC,qBAAuBkxC,EAAQhxC,eAC1DkwC,GAAmBc,EAAQpxC,mBAAqBoxC,EAAQjxC,aACjD3jU,KAAKm0W,aAAargV,EAAOlV,EAAQwV,EAAYy/U,EAAQC,IAEhER,EAASj4W,UAAUy5W,4BAA8B,SAAUhhV,EAAOlV,EAAQwV,EAAYy/U,EAAQC,EAAQh8V,EAAOF,GACzG,IAAInb,EAASmiB,EAAO+Y,OAAOl7B,OACvBm4W,EAAU50W,KAAK60W,gBAAgBj2V,EAAQA,EAAO+Q,SAASoO,MAG3D,OAFA81U,EAAWA,EAASe,EAAQlxC,qBAAwBr3T,KAAKQ,KAAKpQ,GAC9Dq3W,EAAWA,EAASc,EAAQpxC,mBAAsBn3T,KAAKQ,KAAKpQ,GACrDuD,KAAKm0W,aAAargV,EAAOlV,EAAQwV,EAAYy/U,EAAQC,IAEhER,EAASj4W,UAAU05W,qBAAuB,SAAUjhV,EAAOlV,EAAQwV,EAAYy/U,EAAQC,EAAQh8V,EAAOF,GACnFgH,EAAO+Q,SACtB,OAAO3vB,KAAKm0W,aAAargV,EAAOlV,EAAQwV,EAAYy/U,EAAQC,IAEhER,EAASj4W,UAAU25W,uBAAyB,SAAUz3W,EAAOg6D,EAAK14C,EAAK2W,EAAWy/U,EAAWC,GACzF,IAAIn4V,EAAO,GACPo4V,EAAe,GAMnB,OALAp4V,GAAQ,MAAQxf,EAAMwP,EAAI,IAAMwqD,EAAIvqD,EAAI,MAAQ6R,EAAI9R,EAAI,IAAMwqD,EAAIvqD,EAClEmoW,GAA+B,SAAd3/U,GAAsC,SAAdA,EAAwB,MAASj4B,EAAO,EAAI,KAAOg6D,EAAIvqD,EAAIkoW,GAAa,MAC1G33W,EAAO,EAAI,KAAOg6D,EAAIvqD,EAAIkoW,GAAa,GAC9CC,GAA+B,UAAd3/U,GAAuC,SAAdA,EAAwB,MAAS3W,EAAK,EAAI,KAAO04C,EAAIvqD,EAAIkoW,GAAa,MACzGr2V,EAAK,EAAI,KAAO04C,EAAIvqD,EAAIkoW,GAAa,KACpCn4V,EAAMo4V,IAElB7B,EAASj4W,UAAU+5W,qBAAuB,SAAU73W,EAAOg6D,EAAK14C,EAAK2W,EAAWy/U,EAAWC,GACvF,IAAIn4V,EAAO,GACPo4V,EAAe,GAMnB,OALAp4V,GAAQ,MAAQw6C,EAAIxqD,EAAI,IAAMxP,EAAMyP,EAAI,MAAQuqD,EAAIxqD,EAAI,IAAM8R,EAAI7R,EAClEmoW,GAA+B,SAAd3/U,GAAsC,SAAdA,EAAwB,OAAS+hC,EAAIxqD,EAAImoW,GAAa,IAAM33W,EAAMyP,EAAI,OACxGuqD,EAAIxqD,EAAImoW,GAAa,IAAM33W,EAAMyP,EAAI,GAC5CmoW,GAA+B,UAAd3/U,GAAuC,SAAdA,EAAwB,OAAS+hC,EAAIxqD,EAAImoW,GAAa,IAAMr2V,EAAI7R,EAAI,OACvGuqD,EAAIxqD,EAAImoW,GAAa,IAAMr2V,EAAI7R,EAAI,IAClC+P,EAAMo4V,IAElB7B,EAASj4W,UAAUg6W,iBAAmB,SAAU93W,EAAOg6D,EAAK14C,EAAK2W,EAAWy/U,EAAWC,GACnF,IAAIC,EAAe,GACfp4V,EAAO,GACPu4V,EAAQt1W,KAAKg1W,uBAAuBz3W,EAAOg6D,EAAK14C,EAAK2W,EAAWy/U,EAAWC,GAC3EK,EAAQv1W,KAAKo1W,qBAAqB73W,EAAOg6D,EAAK14C,EAAK2W,EAAWy/U,EAAWC,GAG7E,OAFAn4V,EAAOu4V,EAAM,GAAG/6V,OAAOg7V,EAAM,IAC7BJ,EAAeG,EAAM,GAAG/6V,OAAOg7V,EAAM,KAC7Bx4V,EAAMo4V,IAElB7B,EAASj4W,UAAUm5W,kBAAoB,SAAUj3W,EAAOg6D,EAAK14C,EAAKD,EAAQwV,GACtE,IAIIwsD,EAJAprD,EAAY5W,EAAO+Q,SAAS6F,UAC5BuI,EAAOnf,EAAO+Q,SAASoO,KACvBm3U,EAAYt2V,EAAO+Q,SAAS+jV,YAAYj3W,OAIxCw4W,EAAYl3U,EAChB,OAAQA,GACJ,IAAK,OACDk3U,EAAYl3U,EACZ,MACJ,IAAK,aACDk3U,EAAY,EAAe,WAAal3U,EACxC,MACJ,IAAK,WACDk3U,EAAY,EAAe,aAAel3U,EAGlD,OAAQk3U,GACJ,IAAK,aACDr0R,EAAQ5gF,KAAKg1W,uBAAuBz3W,EAAOg6D,EAAK14C,EAAK2W,EAAWy/U,EAAWC,GAC3E,MACJ,IAAK,WACDt0R,EAAQ5gF,KAAKo1W,qBAAqB73W,EAAOg6D,EAAK14C,EAAK2W,EAAWy/U,EAAWC,GACzE,MACJ,IAAK,OACDt0R,EAAQ5gF,KAAKq1W,iBAAiB93W,EAAOg6D,EAAK14C,EAAK2W,EAAWy/U,EAAWC,GAG7E,OAAQt0R,EAAM,GAAIA,EAAM,KAG5B0yR,EAASj4W,UAAUw5W,gBAAkB,SAAUj2V,EAAQmf,GACnD,IAKIy3U,EACAC,EAGAC,EACAC,EAVAC,EAAS,EACTC,EAAS,EACTlyC,EAAe,EACfC,EAAiB,EAQjBnnU,EAASmiB,EAAO+Y,OAAOl7B,OAC3B,OAAQshC,GACJ,IAAK,WAED4lS,GADAkyC,EAAS/iV,GAAIlU,EAAOsxT,QACIzzU,EACxB,MACJ,IAAK,aAEDmnU,GADAgyC,EAAS9iV,GAAIlU,EAAOovT,QACMvxU,EAC1B,MACJ,IAAK,OAEDknU,GADAkyC,EAAS/iV,GAAIlU,EAAOsxT,QACIzzU,EAExBmnU,GADAgyC,EAAS9iV,GAAIlU,EAAOovT,QACMvxU,EAElC,IAAK,IAAI2B,EAAK,EAAGyE,EAAK+b,EAAO+Y,OAAQv5B,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvD,IAAI01B,EAAQjxB,EAAGzE,GACF,aAAT2/B,EACA83U,GAAkBxpW,KAAK87D,IAAKr0C,EAAMrF,OAASk1S,EAAe,GAE5C,eAAT5lS,EACL63U,GAAkBvpW,KAAK87D,IAAKr0C,EAAMtF,OAASo1S,EAAiB,IAG5DiyC,GAAkBxpW,KAAK87D,IAAKr0C,EAAMrF,OAASk1S,EAAe,GAC1DiyC,GAAkBvpW,KAAK87D,IAAKr0C,EAAMtF,OAASo1S,EAAiB,IAOpE,OAJA4xC,EAAkBK,GAAUp5W,EAAS,GACrCi5W,EAAgBrpW,KAAKQ,KAAKgpW,GAAUp5W,EAAS,IAC7Cg5W,EAAkBG,GAAUn5W,EAAS,GACrCk5W,EAAgBtpW,KAAKQ,KAAK+oW,GAAUn5W,EAAS,IACtC,IAAI6mU,GAAKkyC,EAAiBE,EAAeD,EAAiBE,EAAehyC,EAAcC,IAElG0vC,EAASj4W,UAAU8F,cAAgB,SAAUyd,GACzC,IAEIvR,EADA0+F,EAASntF,EAAOiS,MAAMhD,SAE1BxgB,EAA2C,cAA/BuR,EAAOiS,MAAM+8S,cAAgC,aAAehvT,EAAO8V,SAAS3nB,EAAI,IAAO6R,EAAO8V,SAAU,EAAI,IAAM,GAC9H,IAAIkxQ,GAAgBhnR,EAAOkuT,OAAO/2T,OAJf,GAIwC,EACvDm9T,GAAet0T,EAAOkuT,OAAO92T,MALd,GAKsC,EACzD,GAAmC,cAA/B4I,EAAOiS,MAAM+8S,cAA+B,CAC5C,IAAIkoC,EAAmB/pQ,EAAO0N,aAAa,IAAIyqN,GAAWlkU,KAAK6wB,MAAM7vB,QAAQsC,GAAK,0BAA4Bsb,EAAO3M,MAAO,eAAiB+D,MAAO,EAAGwgB,MAAO,QAAU,GACpKzpB,GAAImmU,EAAalmU,GAAI44R,EACrB5vR,MAAO4I,EAAO8V,SAAS1e,MAAsB,EAAdk9T,EAAiBn9T,OAAQ6I,EAAO8V,SAAS3e,OAAwB,EAAf6vR,KAErFhnR,EAAO20T,gBAAkBxnO,EAAO1/B,aAC5B/oE,GAAMtD,KAAK6wB,MAAM7vB,QAAQsC,GAAK,gBAAkBsb,EAAO3M,MACvD5E,UAAaA,EACbimU,YAAa,QAAUtzU,KAAK6wB,MAAM7vB,QAAQsC,GAAK,0BAA4Bsb,EAAO3M,MAAQ,MAE9F2M,EAAO20T,gBAAgB5xU,YAAYm0W,KAQ3CxC,EAASj4W,UAAUu4U,oBAAsB,SAAUh1T,GAC/C,IAAIm3V,EAAmBn3V,EAAO20T,gBAAgBhiU,WAC9C,IAAKwkW,EACD,OAAO,KAIX,IAFA,IAAIl2W,EAAQ+e,EAAO+3B,UAAU92C,MAAQ+e,EAAO+3B,UAAUzrC,SAClDqY,EAAI,EACDA,EAAIwyV,EAAiBt5W,QAAQ,CAChC,IAAK,IAAIN,EAAI,EAAGA,EAAIyiB,EAAO+Y,OAAOl7B,OAAQN,IACjCyiB,EAAO+Y,OAAOx7B,GAAGmyU,gBAAgB,KAGtCynC,EAAiBxyV,GAAG7e,MAAMC,WAAa,SACvC60B,GAAgBu8U,EAAiBxyV,GAAI1jB,EAAO,IAAK+e,EAAOiS,MAAMiG,oBAAsB,cAAgB,iBAAiB,IAEzHvT,MAMR+vV,EAASj4W,UAAUkkC,cAAgB,WAE/B,MAAO,YAOX+zU,EAASj4W,UAAUiX,QAAU,SAAUue,KAGhCyiV,KCtSPhpR,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAqBxCqrR,GAAwB,SAAU7qR,GAElC,SAAS6qR,EAAOnlV,GACZ,IAAI9wB,EAAQorF,EAAO7pF,KAAKtB,KAAM6wB,IAAU7wB,KAGxC,OAFAD,EAAM02U,QAAU12U,EAChBA,EAAMrD,mBACCqD,EA8NX,OAnOAuqF,GAAU0rR,EAAQ7qR,GAUlB6qR,EAAO36W,UAAUqB,iBAAmB,WAC5BsD,KAAK6wB,MAAMm2D,cAGfhnF,KAAK6wB,MAAM+0D,GAAGp6E,GAAQ2+E,eAAgBnqF,KAAK6/U,UAAW7/U,MACtDA,KAAK6wB,MAAM+0D,GAAG,QAAS5lF,KAAKqmH,MAAOrmH,MACnCA,KAAK6wB,MAAM+0D,GAAGp6E,GAAQ4+E,cAAepqF,KAAK8/U,SAAU9/U,QAKxDg2W,EAAO36W,UAAUuB,oBAAsB,WAC/BoD,KAAK6wB,MAAMm2D,cAGfhnF,KAAK6wB,MAAMm1D,IAAIx6E,GAAQ2+E,eAAgBnqF,KAAK6/U,WAC5C7/U,KAAK6wB,MAAMm1D,IAAI,QAAShmF,KAAKqmH,OAC7BrmH,KAAK6wB,MAAMm1D,IAAIx6E,GAAQ4+E,cAAepqF,KAAK8/U,YAK/Ck2B,EAAO36W,UAAUwkV,UAAY,SAAUh/U,GAC/Bb,KAAK6wB,MAAMulT,eAAe5+S,UAAYx3B,KAAK6wB,MAAMe,SACjD5xB,KAAKqpF,KAAKxoF,IAMlBm1W,EAAO36W,UAAUykV,SAAW,SAAUj/U,GAC9Bb,KAAK6wB,MAAMulT,eAAe5+S,SAAWx3B,KAAK6wB,MAAMe,SAChD5xB,KAAKqpF,KAAKxoF,IAQlBm1W,EAAO36W,UAAU4gV,iBAAmB,SAAUg6B,EAAyBplV,GACnE7wB,KAAKq3U,qBAEL,IAAK,IADD77S,EACKp9B,EAAK,EAAG83W,EAA4BD,EAAyB73W,EAAK83W,EAA0Bz5W,OAAQ2B,IAAM,CAC/G,IAAIwgB,EAASs3V,EAA0B93W,GACf,cAApBwgB,EAAOw7K,WACP5+J,EAAsC,eAAxB3K,EAAM+8S,cAAkChvT,EAAOguT,SACzDhuT,EAAOlY,KACX1G,KAAKq3U,kBAAkB7yU,KAAK,IAAIi1U,GAAc76T,EAAO6Y,KAAM7Y,EAAOypD,SAAUzpD,EAAOg6T,YAAah6T,EAAO4Y,QAASgE,EAAY5c,EAAOkuT,OAAOn/S,MAAO/O,EAAOkuT,OAAOt1S,aAK3Kw+U,EAAO36W,UAAUq7U,gBAAkB,SAAU/gT,EAAe6gT,EAAcL,GACtE,IAAI/8Q,EAAU+8Q,EAAO/8Q,QACjB+8S,EAAc,EACdC,EAAa,EACZp2W,KAAKs1B,WAIN8gV,EAAcjgC,EAAOngU,MAA4C,EAAlC2f,EAAc3f,MAAQ,IAAO,EAH5DmgW,EAAehgC,EAAOpgU,OAA8C,EAAnC4f,EAAc5f,OAAS,IAAO,EAKnEygU,EAAazgU,QAAUogW,EACvB3/B,EAAaxgU,OAASogW,EACJjgC,EAAOl0P,YAAzB,IAQIo0R,EAPAr0R,EAAam0P,EAAOn0P,WACpB41P,EAAezB,EAAOyB,aACtB/2S,EAAe,EACfi8P,EAAW,EACXi6C,EAAc,EACdu/B,EAAe,EACfr6E,EAAW,EAEfj8R,KAAK62U,cAAgBxqU,KAAKC,IAAIkgB,GAAY,cAAe2pT,EAAO/xC,WAAWruR,OAAQogU,EAAOl0P,aAE1F,IAAK,IADD8pB,GAAS,EACJ3tG,EAAK,EAAGyE,EAAK7C,KAAKq3U,kBAAmBj5U,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAChE,IAAI05U,EAAej1U,EAAGzE,GACtBi4W,GACIz4U,KAAMk6S,EAAal6S,KAAMnR,KAAMqrT,EAAarrT,KAAMkB,MAAOmqT,EAAanqT,MACtE8qT,YAAaX,EAAaW,YAAahhT,KAAM2nS,GAAcvmS,QAAQ,GAEvE74B,KAAK6wB,MAAMrK,QAAQ44S,GAAci3C,GACjCv+B,EAAa/rO,QAAUsqQ,EAAgBx9U,OACvCi/S,EAAarrT,KAAO4pV,EAAgB5pV,KACpCqrT,EAAal6S,KAAOy4U,EAAgBz4U,KACpCk6S,EAAanqT,MAAQ0oV,EAAgB1oV,MACrCmqT,EAAaW,YAAc49B,EAAgB59B,YAC3CX,EAAat7S,SAAWhQ,GAAYsrT,EAAarrT,KAAM0pT,EAAO/xC,WAC1D0zC,EAAa/rO,QAAgC,KAAtB+rO,EAAarrT,OACpCs/E,GAAS,EAET+wL,GADAi6C,EAAc/0P,EAAa41P,EAAeE,EAAat7S,SAASxmB,MAAQojD,GAEpEo9Q,EAAaxgU,MAASojD,EAAU0jO,GAAa98R,KAAKs1B,cAClDuL,EAAex0B,KAAKC,IAAIu0B,EAAei8P,EAAW1jO,GAAWp5D,KAAKs1B,WAAa,EAAIyhT,IAClE,IAAb96C,GAAmB86C,IAAgBj6C,IACnCb,EAAW,GAEfa,EAAW98R,KAAKs1B,WAAa,EAAIyhT,EAEjCu/B,IADAr6E,GAC4Bj8R,KAAK62U,cAAgBz9Q,GAAYA,IAIzEk9S,EAAejqW,KAAKC,IAAIgqW,EAAet2W,KAAK62U,cAAgBz9Q,EAAWA,GACvEp5D,KAAKk4U,SAAW1B,EAAazgU,OAASugW,EACtCt2W,KAAK03U,WAAaz7C,EACdlwL,EACA/rG,KAAK42U,UAAUvqU,KAAKC,IAAKwwR,EAAW1jO,EAAUv4B,GAAey1U,EAAcngC,EAAQK,GAGnFx2U,KAAK42U,UAAU,EAAG,EAAGT,EAAQK,IAIrCw/B,EAAO36W,UAAU08U,eAAiB,SAAUD,EAAcv6U,EAAOo6U,EAAa4+B,EAAYljV,EAAMvU,EAAOq4T,GACnG,IAAI/9Q,EAAUp5D,KAAKm2U,OAAO/8Q,QACtBo9S,EAAiBD,EAAW7oV,SAAS3gB,EAAI4qU,EAAc4+B,EAAW/5U,SAASxmB,MAC1EwgW,GAAiB1+B,EAAat7S,SAASxmB,MAAQ2hU,GAAiBtkT,EAAKtmB,EAAIsmB,EAAKrd,MAAQhW,KAAKm2U,OAAOn0P,WAAa,GAChHhiF,KAAKs1B,YACLwiT,EAAapqT,SAAS3gB,EAAIxP,EAAMwP,EAChC+qU,EAAapqT,SAAS1gB,EAAK8R,IAAUq4T,EAAeo/B,EAAW7oV,SAAS1gB,EACpEupW,EAAW7oV,SAAS1gB,EAAIhN,KAAK62U,cAAgBz9Q,IAGjD0+Q,EAAapqT,SAAS3gB,EAAK+R,IAAUq4T,EAAeo/B,EAAW7oV,SAAS3gB,EAAIypW,EAC5E1+B,EAAapqT,SAAS1gB,EAAIupW,EAAW7oV,SAAS1gB,GAElD,IAAIypW,EAAcz2W,KAAKw2U,aAAazpU,EAAI/M,KAAKw2U,aAAaxgU,OAAU8hU,EAAapqT,SAAS3gB,EACtF4qU,EAAc33U,KAAKm2U,OAAOn0P,WAAa,GAC3C81P,EAAarrT,KAAO0R,IAAUs4U,EAAWz3V,QAAQ,GAAI84T,EAAarrT,KAAMzsB,KAAKm2U,OAAO/xC,YAGxF4xE,EAAO36W,UAAUq7W,YAAc,SAAUz5C,GACrC,IAAIpsS,EAAQ7wB,KAAK6wB,MACbjS,EAASiS,EAAMoQ,cAAcg8R,GAC7BkZ,EAASn2U,KAAKq3U,kBAAkBpa,GAChCihB,KAIJ,GAHIrtT,EAAMs8S,kBACN+Q,EAAsBx/U,KAAWmyB,EAAMs8S,gBAAgB+Q,oBAAqB,MAAM,IAElFrtT,EAAMulT,eAAe6B,iBAAkB,CAQvC,GAPKr5T,EAAO4Y,QAIR5Y,EAAO4Y,SAAU,EAHjB5Y,EAAO4Y,SAAU,EAKrB2+S,EAAO3+S,QAAW5Y,EAAc,QAC5BiS,EAAMS,UAAU/f,WAAW9U,OAAS,EAAG,CACvC,KAAOo0B,EAAMS,UAAUw2G,WACnBj3G,EAAMS,UAAUhsB,YAAYurB,EAAMS,UAAUw2G,WAEhDvjI,EAAOssB,EAAMS,WAEjBT,EAAM6iT,eAAgB,EACtB7iT,EAAM6uT,YACN7uT,EAAMy0S,cACN1mT,EAAOuyT,mBACPnxU,KAAK22W,cAAc9lV,EAAMoQ,eACzBpQ,EAAMmgT,eACNngT,EAAMrK,QAAQ,UAAYqK,MAAOA,IAC7BqtT,EAAoBzhV,OAAS,IAC7Bo0B,EAAMs8S,gBAAgB+Q,oBAAsBA,EAC5CrtT,EAAMs8S,gBAAgBiR,gBAAgBvtT,EAAOA,EAAMq8S,qBAGlDr8S,EAAMs8S,iBACXt8S,EAAMs8S,gBAAgBmhC,gBAAgBz9U,EAAOosS,IAGrD+4C,EAAO36W,UAAUs7W,cAAgB,SAAUz/U,GACvC,IAAK,IAAI94B,EAAK,EAAGk0U,EAAqBp7S,EAAkB94B,EAAKk0U,EAAmB71U,OAAQ2B,IAAM,CAC7Ek0U,EAAmBl0U,GACzB8V,cAAW/Y,IAO1B66W,EAAO36W,UAAUgrH,MAAQ,SAAU/pH,GAC/B,GAAK0D,KAAK6wB,MAAMulT,eAAe5+S,QAA/B,CAOA,IAAK,IADDylS,EAHAz2R,EAAWlqC,EAAM6K,OAAO7D,GAInBlF,EAAK,EAAGw4W,GAHI52W,KAAKq2U,SAAW,SAAUr2U,KAAKq2U,SAAW,iBAC3Dr2U,KAAKq2U,SAAW,WAE8Bj4U,EAAKw4W,EAAgBn6W,OAAQ2B,IAAM,CACjF,IAAIkF,EAAKszW,EAAgBx4W,GACrBooC,EAASjoC,QAAQ+E,IAAO,IACxB25T,EAAcloS,SAASyR,EAAStpC,MAAMoG,GAAI,GAAI,IAC9CtD,KAAK02W,YAAYz5C,IAGrBz2R,EAASjoC,QAAQyB,KAAKq2U,SAAW,YAAc,EAC/Cr2U,KAAKs5U,WAAWh9U,GAAO,GAElBkqC,EAASjoC,QAAQyB,KAAKq2U,SAAW,cAAgB,GACtDr2U,KAAKs5U,WAAWh9U,GAAO,KAM/B05W,EAAO36W,UAAUkkC,cAAgB,WAC7B,MAAO,UAOXy2U,EAAO36W,UAAUiX,QAAU,SAAUue,GACjC7wB,KAAKpD,uBAEFo5W,GACTngC,ICjPEghC,GAAgC,WAKhC,SAASA,EAAelkW,GACpB3S,KAAK2S,QAAUA,EA8LnB,OAtLAkkW,EAAex7W,UAAU0wG,OAAS,SAAUp9C,EAAY18C,GACpDjS,KAAK2hU,QAA2C,UAAjC3hU,KAAK2S,QAAQ4sB,gBAC5Bv/B,KAAK2uD,WAAaA,EAKlB,OAJmBz0B,GAAe/4B,EAAc,OAC5CmC,GAAItD,KAAK2S,QAAQ3R,QAAQsC,GAAK,eAAiB2O,EAC/C1O,OAAQ,wBACR0O,EAAO08C,EAAWv0B,QAASp6B,KAAK2S,UAQxCkkW,EAAex7W,UAAUy7W,wBAA0B,SAAUppV,GACzD,IAAI2F,EAWJ,OAVAA,EAAkC,UAA3BrzB,KAAK2uD,WAAWzC,OACnB,IAAIh2B,GAAK,EAAG,EAAGl2B,KAAK2S,QAAQgjB,cAAc3f,MAAOhW,KAAK2S,QAAQgjB,cAAc5f,QAC5E/V,KAAK2hU,QACD3hU,KAAK2S,QAAQ+hU,qBAAqB7P,eAClC7kU,KAAK2S,QAAQiM,OAAO,GAAGm4V,kBAC/BrpV,EAAS3gB,GAAmC,iBAAtB/M,KAAK2uD,WAAW5hD,EACH,iBAAtB/M,KAAK2uD,WAAW5hD,EAAkB/M,KAAK2uD,WAAW5hD,EAAI,EAC/DsxB,GAAer+B,KAAK2uD,WAAW5hD,EAAGsmB,EAAKrd,QAAUqd,EAAKtmB,EAC1D2gB,EAAS1gB,GAAmC,iBAAtBhN,KAAK2uD,WAAW3hD,EAAkBhN,KAAK2uD,WAAW3hD,EACpEqxB,GAAer+B,KAAK2uD,WAAW3hD,EAAGqmB,EAAKtd,SAAWsd,EAAKrmB,GACpD,GAOX6pW,EAAex7W,UAAU27W,wBAA0B,SAAUtpV,GACzD,IAAIi4Q,EAAiB,IAAI/xQ,GAAc,EAAG,GAC1C,GAAI5zB,KAAK2hU,QAAS,CAUd,IAAK,IATD7pT,OAAQ,EACRF,OAAQ,EACRiZ,EAAQ7wB,KAAK2S,QACbg8C,EAAa3uD,KAAK2uD,WAClBngC,OAAS,EACTyoV,GAAQ,EACRv/U,EAAYi3B,EAAWj3B,UACvBmnT,EAAYlwR,EAAWkwR,UACvBzqT,EAAavD,EAAMiG,oBACd14B,EAAK,EAAGyE,EAAKguB,EAAM81S,gBAAiBvoU,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC/D,IAAI+X,EAAOtT,EAAGzE,GACd,GAAIs5B,IAAcvhB,EAAKshB,MAAsB,MAAbC,GAAmC,iBAAdvhB,EAAKshB,KAEtD,IADA3f,EAAQ3B,GACE+b,UAAU3zB,QAAQ,aAAe,EAAG,CAC1C,IAAI24W,EAAkC,qBAApBp/V,EAAMoa,UAAoCy8B,EAAW5hD,EAAEkT,UAAW/S,WAChFyhD,EAAW5hD,EACf,GAAI+K,EAAM0vT,OAAOjpU,QAAQ24W,GAAe,EACpC,OAAO,EAGP1oV,EAAS1W,EAAM0vT,OAAOjpU,QAAQ24W,QAGjC,GAAwB,aAApBp/V,EAAMoa,UAA0B,CACrC,IAAI6jE,GAAWr0B,SAAU,OAAQh7D,KAAM,YACvC8nB,EAAuC,iBAAtBxuB,KAAK2uD,WAAW5hD,EAC7BiT,KAAKoxC,MAAMvgC,EAAMo+C,KAAK47B,cAAc9U,EAAzBllE,CAAiCA,EAAMo+C,KAAK07B,cAAc5U,EAAzBllE,CAAiC,IAAI7Q,KAAKy/C,GAASrO,MAAM45H,WAAY/iK,IAAK0mC,EAAW5hD,IAAKkb,QAAU,OAGpJuG,GAAUmgC,EAAW5hD,OAGpB8xU,IAAc1oU,EAAKshB,MAAsB,MAAbonT,GAAmC,iBAAd1oU,EAAKshB,QAE3Dw/U,EAA4B,iBAD5Br/V,EAAQzB,GACM+b,WAGtB,SAAIpa,GAASF,GAASoa,GAA2B,gBAApBla,EAAMoa,UAA8BX,GAAQ/C,EAAQ1W,EAAMyZ,SAAW/C,EAAQ1W,EAAM6a,iBAC5GgzQ,EAAiBjrQ,GAASlM,EAAQwD,GAAQilV,EAAQ1lV,IAASvxB,KAAK2uD,WAAW3hD,EAAG4K,EAAM2Z,UAAYvxB,KAAK2uD,WAAW3hD,EAAI4K,EAAM+a,eAAiBg8B,EAAW3hD,EAClJiqW,EAAQ5qW,KAAK87D,IAAIvwD,EAAM2Z,QAAS3Z,EAAM+a,aAAarmB,MAC9CqiD,EAAW3hD,EAAI4K,EAAM+a,aAAarmB,IAAMsL,EAAM+a,aAAarmB,IAAMsL,EAAM+a,aAAa5S,IAAKjI,EAAOF,EAAOwc,GAChH1G,EAAS3gB,EAAI44R,EAAe54R,GAAKqnB,EAAaxc,EAAMyb,KAAKtmB,EAAI+K,EAAMub,KAAKtmB,GACxE2gB,EAAS1gB,EAAI24R,EAAe34R,GAAKonB,EAAatc,EAAMub,KAAKrmB,EAAI4K,EAAMyb,KAAKrmB,IAKrE,GAGP,OAAOhN,KAAKm3W,0BAA0BzpV,IAS9CmpV,EAAex7W,UAAUmnV,kBAAoB,SAAU7zR,EAAY18C,EAAOoC,GACtE,IAAI+iW,EACA1pV,EACJA,EAAW,IAAIkG,GAAc,EAAG,GAChCwjV,EAAoBp3W,KAAK+rG,OAAOp9C,EAAY18C,GACxCjS,KAAK,gBAAkB2uD,EAAW0oT,gBAAkB,SAAS3pV,IAC7D1tB,KAAKs3W,gBAAgB5pV,EAAU0pV,EAAmB/iW,IAQ1DwiW,EAAex7W,UAAU87W,0BAA4B,SAAUzpV,GAG3D,IAAK,IADDoG,EACK11B,EAAK,EAAGyE,EAFE7C,KAAK2S,QAEWsuB,cAAc,GAAGtJ,OAAQv5B,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC9E,IAAIm5W,EAAW10W,EAAGzE,GAClB,GAA0B,iBAAfm5W,EAASxqW,GAChB,GAAIiT,KAAKoxC,MAAMmmT,EAASxqW,KAAOiT,KAAKoxC,MAAMpxD,KAAK2uD,WAAW5hD,IACtDwqW,EAASvqW,IAAMhN,KAAK2uD,WAAW3hD,EAAG,CAClC8mB,EAAQyjV,EACR,YAIJ,GAAIA,EAASxqW,IAAM/M,KAAK2uD,WAAW5hD,GAAKwqW,EAASvqW,IAAMhN,KAAK2uD,WAAW3hD,EAAG,CACtE8mB,EAAQyjV,EACR,OAIZ,SAAIzjV,IAASA,EAAM0D,WACf9J,EAAS3gB,EAAI+mB,EAAM6xQ,eAAe54R,EAClC2gB,EAAS1gB,EAAI8mB,EAAM6xQ,eAAe34R,GAC3B,IAaf6pW,EAAex7W,UAAUi8W,gBAAkB,SAAU5pV,EAAU1sB,EAASqT,GACpE,IAAIa,EAAcqlB,GAAmBv5B,GACjC43B,GACAC,QAAQ,EAAOpB,KAAMyoS,GAAkB9lS,QAASp5B,EAChD0sB,SAAUA,GAEd1tB,KAAK2S,QAAQ6T,QAAQ05S,GAAkBtnS,GAClCA,EAASC,SACVD,EAASwB,QAAQ11B,MAAM8H,KAAOxM,KAAKw3W,kBAAkBx3W,KAAK2uD,WAAW8E,oBAAqBv+C,EAAYc,MAAO4iB,EAASlL,SAAS3gB,GAAK,KACpI6rB,EAASwB,QAAQ11B,MAAMgI,IAAM1M,KAAKw3W,kBAAkBx3W,KAAK2uD,WAAW+E,kBAAmBx+C,EAAYa,OAAQ6iB,EAASlL,SAAS1gB,GAAK,KAClI4rB,EAASwB,QAAQ52B,aAAa,aAAcxD,KAAK2uD,WAAWzc,aAAe,cAC3ErX,GAAcjC,EAASwB,QAAS/lB,KAUxCwiW,EAAex7W,UAAUm8W,kBAAoB,SAAUnoT,EAAWviC,EAAM9vB,GACpE,OAAQqyD,GACJ,IAAK,MACL,IAAK,OACDryD,GAAS8vB,EACT,MACJ,IAAK,SACL,IAAK,MACD9vB,GAAS,EACT,MACJ,IAAK,SACL,IAAK,SACDA,GAAU8vB,EAAO,EAGzB,OAAO9vB,GAEJ65W,KC7MPvsR,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAgBxC8sR,GAAiC,SAAUtsR,GAM3C,SAASssR,EAAgB9kW,EAASikD,GAC9B,IAAI72D,EAAQorF,EAAO7pF,KAAKtB,KAAM2S,IAAY3S,KAG1C,OAFAD,EAAM8wB,MAAQle,EACd5S,EAAM62D,YAAcA,EACb72D,EAiCX,OA1CAuqF,GAAUmtR,EAAiBtsR,GAgB3BssR,EAAgBp8W,UAAU4iV,kBAAoB,SAAUj9U,GACpD,IAAIjB,EAAQC,KACZA,KAAK42D,YAAc52D,KAAK6wB,MAAM+lC,YAC9B52D,KAAKqU,cAAgBlT,EAAc,OAC/BmC,GAAItD,KAAK6wB,MAAM7vB,QAAQsC,GAAK,4BAEhCtD,KAAK42D,YAAYh/B,IAAI,SAAU+2B,EAAY18C,GACvClS,EAAMyiV,kBAAkB7zR,EAAY18C,EAAOlS,EAAMsU,iBAErDwmB,GAAc76B,KAAKqU,cAAerT,IAOtCy2W,EAAgBp8W,UAAUiX,QAAU,SAAUK,KAM9C8kW,EAAgBp8W,UAAUkkC,cAAgB,WAEtC,MAAO,cAEJk4U,GACTZ,IC5DEvsR,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAkBxC+sR,GAAqC,SAAUvsR,GAE/C,SAASusR,IACL,OAAkB,OAAXvsR,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAoT/D,OAtTAsqF,GAAUotR,EAAqBvsR,GAS/BusR,EAAoBr8W,UAAU0wG,OAAS,SAAUntF,EAAQ9G,EAAOF,EAAOwc,GAKnE,IAAK,IAHDwE,EADAuyT,EAAiBnrV,KAAKiqV,kBAAkBrrU,GAInCxgB,GADSwgB,EAAO0lB,OAAOtuB,MAClB,GAAGnT,EAAK+b,EAAO+Y,OAAQv5B,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvD,IAAI01B,EAAQjxB,EAAGzE,GACf01B,EAAMw6S,mBACNx6S,EAAM65S,WACN,IAAIgqC,OAAiB,EACjB7jV,EAAM0D,SAAWrF,GAAYvT,EAAO+Y,OAAO7D,EAAM7hB,MAAQ,GAAI6hB,EAAOlV,EAAO+Y,OAAO7D,EAAM7hB,MAAQ,GAAI2M,KACpG5e,KAAK43W,kBAAkB9jV,EAAM9mB,EAAG8mB,EAAOlV,EAAOi5V,aAE9C73W,KAAK83W,gBAAgBl5V,EAAQkV,EAAOq3T,GAEpCwsB,EAAiB33W,KAAKuqV,aAAcz2T,EAAMtF,OAAS28T,EAAe5tV,MAAQu2B,EAAM8H,cAAgB9H,EAAMtF,OAAS28T,EAAetsU,IAAMiV,EAAM+H,cAAejd,GACzJkV,EAAM65S,QAAQnpU,KAAKmzW,IACnB/+U,EAAW54B,KAAKwpJ,aAAa5qI,EAAQkV,EAAOlV,EAAOypD,UAC/C7xC,MAAS/4B,EAAkBmhB,EAAO0lB,OAAO9N,QAAkC,gBAAxB5X,EAAO0lB,OAAO9N,MAC7D6G,GAAmBze,EAAOypD,UAAW,IADmDzpD,EAAO0lB,OAAO9N,MAE1GxgB,MAAO4I,EAAO0lB,OAAOtuB,MAAQ4I,EAAO0lB,OAAOtuB,MAAQ,KAEzC6iB,QACV74B,KAAK+3W,oBAAoBn5V,EAAQkV,EAAO6jV,EAAgB/+U,EAAU54B,KAAK2pC,cAAc7V,EAAOlV,EAAQ8b,GAAS5G,EAAMtF,OAAQsF,EAAM6H,OAAQ7jB,EAAOF,EAAOwc,GAAasG,GAAS5G,EAAMtF,OAAS28T,EAAexvT,OAAQ7H,EAAM+gI,QAAS/8I,EAAOF,EAAOwc,IAAc+2T,EAAexvT,SAIrR/c,EAAOkuT,OAAOt1S,SACd5Y,EAAOiS,MAAMgjT,aAAa9nO,OAAOntF,IASzC84V,EAAoBr8W,UAAUy8W,gBAAkB,SAAUl5V,EAAQkV,EAAOq3T,GACrE,IAAI6sB,EAAYh4W,KAAKuqV,aAAcz2T,EAAMtF,OAAS28T,EAAexvT,OAAS7H,EAAMoF,QAAUpF,EAAMtF,OAAS28T,EAAexvT,OAAS7H,EAAMmF,QAASra,GAChJ5e,KAAKi4W,cAAcr5V,EAAQkV,EAAOkkV,EAAWp5V,EAAOiS,MAAMiG,sBAS9D4gV,EAAoBr8W,UAAU48W,cAAgB,SAAUr5V,EAAQkV,EAAOo4B,EAAQ93B,GAC3E,IAAIq6D,EAAc7vE,EAAO0lB,OAAOtuB,OAAS,EACpCoe,GAKD83B,EAAOl/C,GAAKyhF,EAAc,EAC1BviC,EAAOn2C,OAASm2C,EAAOn2C,QAAU04E,IALjCviC,EAAOn/C,GAAK0hF,EAAc,EAC1BviC,EAAOl2C,MAAQk2C,EAAOl2C,OAASy4E,GAMnC36D,EAAM65S,QAAQnpU,KAAK0nD,IASvBwrT,EAAoBr8W,UAAUsuC,cAAgB,SAAU7V,EAAOlV,EAAQ+c,EAAQk5H,GAC3E,IAAIy6L,EAAUx7T,EAAM65S,QAAQ,GACxB4hB,EAAUz7T,EAAM65S,QAAQ,GACxBn4S,EAAY,GAEZ9B,GADQ9U,EAAOiS,MAAMiG,oBAAsBw4T,EAAQv5U,OAASu5U,EAAQt5U,MAC3D4I,EAAOiS,MAAMiG,oBAAsBw4T,EAAQtiV,EAAIsiV,EAAQv5U,OAAS,EACzEu5U,EAAQviV,EAAIuiV,EAAQt5U,MAAQ,GAC5BkiW,EAAW3oB,EAAQxiV,EAAIwiV,EAAQv5U,MAC/BmiW,EAAY5oB,EAAQviV,EAAIuiV,EAAQx5U,OAChCqiW,EAAW9oB,EAAQviV,EAAIuiV,EAAQt5U,MAC/BkrL,EAAYouJ,EAAQtiV,EAAIsiV,EAAQv5U,OA6BpC,OA5BK6I,EAAOiS,MAAMiG,qBAed92B,KAAKi4W,cAAcr5V,EAAQkV,GAAS/mB,EAAGuiV,EAAQviV,EAAGC,EAAGuiV,EAAQviV,EAAGgJ,MAAO,EAAGD,OAAQoiW,EAAY5oB,EAAQviV,IAAK,GAC3GhN,KAAKi4W,cAAcr5V,EAAQkV,GAAS/mB,EAAGqrW,EAAUprW,EAAGuiV,EAAQviV,EAAGgJ,MAAO,EAAGD,OAAQoiW,EAAY5oB,EAAQviV,IAAK,GAC1GwoB,GAAa,KAAO85T,EAAQviV,EAAI,IAAMwiV,EAAQviV,EAAI,MAAQsiV,EAAQviV,EAAI,IAAMorW,EAC5E3iV,GAAa,KAAO85T,EAAQviV,EAAI,IAAM2mB,EAAS,OAAc67T,EAAQxiV,EAAI,IAAM2mB,EAC/E8B,GAAa,MAAQ+5T,EAAQxiV,EAAI,IAAMwiV,EAAQviV,EAAI,OAAckrW,EAAW,IAAM3oB,EAAQviV,EACtF,MAAQkrW,EAAW,IAAMC,EAAY,MAAQ5oB,EAAQxiV,EAAI,IAAMorW,EAAY,KAC/E3iV,GAAa,MAAQ0iV,EAAW,IAAMxkV,EAAS,MAAQ0kV,EAAW,IAAM1kV,EACxE8B,GAAa,MAAQ4iV,EAAW,IAAM7oB,EAAQviV,EAAI,MAAQorW,EAAW,IAAMD,EAC3E3iV,GAAa,MAAQmG,EAAO5uB,EAAI,IAAMwiV,EAAQviV,EAAI,OAAc2uB,EAAO5uB,EAAI,IAAMorW,EACjF3iV,GAAa5W,EAAOy5V,SAChB,MAAQxjN,EAAQ9nJ,EAAI,GAAK,KAAO8nJ,EAAQ7nJ,EAAI,GAAK,OAAS6nJ,EAAQ9nJ,EAAI,GAAK,KAAO8nJ,EAAQ7nJ,EAAI,GAC1F,MAAQ6nJ,EAAQ9nJ,EAAI,GAAK,KAAO8nJ,EAAQ7nJ,EAAI,GAAK,OAAS6nJ,EAAQ9nJ,EAAI,GAAK,KAAO8nJ,EAAQ7nJ,EAAI,GAAK,KAzB3GhN,KAAKi4W,cAAcr5V,EAAQkV,GAAS/mB,EAAGwiV,EAAQxiV,EAAGC,EAAGsiV,EAAQtiV,EAAGgJ,MAAOkiW,EAAW3oB,EAAQxiV,EAAGgJ,OAAQ,IAAK,GAC1G/V,KAAKi4W,cAAcr5V,EAAQkV,GAAS/mB,EAAGwiV,EAAQxiV,EAAGC,EAAGk0L,EAAWlrL,MAAOkiW,EAAW3oB,EAAQxiV,EAAGgJ,OAAQ,IAAK,GAC1Gyf,GAAa,KAAO+5T,EAAQxiV,EAAI,IAAMuiV,EAAQtiV,EAAI,OAAckrW,EAAW,IAAM5oB,EAAQtiV,EACzFwoB,GAAa,MAAQ9B,EAAS,IAAM47T,EAAQtiV,EAAI,OAAc0mB,EAAS,IAAM67T,EAAQviV,EACrFwoB,GAAa,MAAQ+5T,EAAQxiV,EAAI,IAAMwiV,EAAQviV,EAAI,OAAckrW,EAAW,IAAM3oB,EAAQviV,EACtF,MAAQkrW,EAAW,IAAMC,EAAY,MAAQ5oB,EAAQxiV,EAAI,IAAMorW,EAAY,KAC/E3iV,GAAa,MAAQ9B,EAAS,IAAMykV,EAAY,MAAQzkV,EAAS,IAAMwtK,EACvE1rK,GAAa,MAAQ+5T,EAAQxiV,EAAI,IAAMm0L,EAAY,MAAQg3K,EAAW,IAAMh3K,EAC5E1rK,GAAa,MAAQ+5T,EAAQxiV,EAAI,IAAM4uB,EAAO3uB,EAAI,MAAQkrW,EAAW,IAAMv8U,EAAO3uB,EAClFwoB,GAAa5W,EAAOy5V,SAChB,OAASxjN,EAAQ9nJ,EAAI,GAAK,KAAO8nJ,EAAQ7nJ,EAAI,GAAK,OAAS6nJ,EAAQ9nJ,EAAI,GAAK,KAAO8nJ,EAAQ7nJ,EAAI,GAC3F,OAAS6nJ,EAAQ9nJ,EAAI,GAAK,KAAO8nJ,EAAQ7nJ,EAAI,GAAK,OAAS6nJ,EAAQ9nJ,EAAI,GAAK,KAAO8nJ,EAAQ7nJ,EAAI,GAAK,IAgBzGwoB,GAUXkiV,EAAoBr8W,UAAU08W,oBAAsB,SAAUn5V,EAAQkV,EAAOT,EAAMuF,EAAUpD,EAAWmG,GACpG,IAAIjO,EACAZ,EACAooT,EAAWt2T,EAAOiS,MAAM7vB,QAAQsC,GAAK,WAAasb,EAAO3M,MAAQ,UAAY6hB,EAAM7hB,MACnFjR,EAAU4d,EAAOiS,MAAMhD,SAASsI,SAAS,IAAIC,GAAW8+S,EAAW,WAAYt8S,EAASgF,KAAMhF,EAAS0L,OAAOtuB,MAAO4iB,EAAS0L,OAAO9N,MAAO5X,EAAOnR,QAASmR,EAAOkzB,UAAWtc,IAClLx0B,EAAQwC,aAAa,aAAcswB,EAAM/mB,EAAEG,WAAa,IAAM4mB,EAAMoF,QAAQhsB,WACtE,IAAM4mB,EAAMmF,QAAQ/rB,WAAa,IAAM4mB,EAAM+H,cAAc3uB,WAAa,IAAM4mB,EAAM8H,cAAc1uB,YACxG,IAAImH,EAAgBuK,EAAOiS,MAAMhD,SAASw+C,aACtC/oE,GAAM4xU,IAEV7gU,EAAc1S,YAAYX,GAC1B,IAAK,IAAI7E,EAAI,EAAGA,EAAI23B,EAAMgI,SAASr/B,OAAQN,IACvCuxB,EAAWgN,GAAU5G,EAAMtF,OAASmN,EAAS7H,EAAMgI,SAAS3/B,GAAIyiB,EAAO9G,MAAO8G,EAAOhH,MAAOgH,EAAOiS,MAAMiG,qBACzGhK,EAAO,IAAIM,GAAKxO,EAAOkuT,OAAO92T,MAAO4I,EAAOkuT,OAAO/2T,QACnD+d,EAAMw6S,gBAAgB9pU,KAAKkpB,GAC3B1tB,KAAKi4W,cAAcr5V,EAAQkV,GACvB/mB,EAAG2gB,EAAS3gB,EAAK+f,EAAK9W,MAAQ,EAAIhJ,EAAG0gB,EAAS1gB,EAAK8f,EAAK/W,OAAS,EACjEC,MAAO8W,EAAK9W,MAAOD,OAAQ+W,EAAK/W,SACjC,GAEP6I,EAAOy0T,cAAc1xU,YAAY0S,IAQrCqjW,EAAoBr8W,UAAUu8W,kBAAoB,SAAUxnC,EAASt8S,EAAOiK,GACxE,IAAIs3T,EAASjlB,EAAQ3zU,OACjB67W,GACAzjN,QAAS/hI,GAAIs9S,GAAWilB,EACxBx5T,cAAe,EAAGD,cAAe,EACjC1C,QAAS,EAAGD,QAAS,EACrB0C,OAAQ,EAAGG,aAEF,cAATiC,GACAu6U,EAASz8U,cAAgB77B,KAAKu4W,0BAA0BnoC,EAASilB,EAAQ,KACzEijB,EAAS18U,cAAgB57B,KAAKu4W,0BAA0BnoC,EAASilB,EAAQ,KACzEijB,EAAS38U,OAAS37B,KAAKu4W,0BAA0BnoC,EAASilB,EAAQ,KAEpD,cAATt3T,GACLu6U,EAASz8U,cAAgB77B,KAAKw4W,0BAA0BpoC,EAASilB,EAAQ,KACzEijB,EAAS18U,cAAgB57B,KAAKw4W,0BAA0BpoC,EAASilB,EAAQ,KACzEijB,EAAS38U,OAAS37B,KAAKw4W,0BAA0BpoC,EAASilB,EAAQ,MAGlEijB,EAAS38U,OAAS+B,GAAU0yS,GAC5BpwU,KAAKy4W,kBAAkBroC,EAASilB,EAAQijB,IAE5Ct4W,KAAK04W,iBAAiBtoC,EAASilB,EAAQijB,GACvCxkV,EAAMmF,QAAUq/U,EAASr/U,QACzBnF,EAAMoF,QAAUo/U,EAASp/U,QACzBpF,EAAM+H,cAAgBy8U,EAASz8U,cAC/B/H,EAAM8H,cAAgB08U,EAAS18U,cAC/B9H,EAAM6H,OAAS28U,EAAS38U,OACxB7H,EAAMgI,SAAWw8U,EAASx8U,SAC1BhI,EAAM+gI,QAAUyjN,EAASzjN,SAQ7B6iN,EAAoBr8W,UAAUk9W,0BAA4B,SAAUnoC,EAAStxT,EAAO65V,GAChF,GAAc,IAAV75V,EACA,OAAO,EAEN,GAAc,IAAVA,EACL,OAAOsxT,EAAQ,GAEnB,IACI9wG,EAAOq5I,GAAc75V,EAAQ,GAC7B85V,EAAcvsW,KAAK+S,MAAM/S,KAAKE,IAAI+yN,IAClCu5I,EAAev5I,EAAOs5I,EAU1B,OAToB,IAAhBA,EACQxoC,EAAQ,GAEXwoC,EAAc95V,EAAQ,EACnBsxT,EAAQtxT,EAAQ,GAGhB+5V,GAAgBzoC,EAAQwoC,GAAexoC,EAAQwoC,EAAc,IAAMxoC,EAAQwoC,EAAc,IAUzGlB,EAAoBr8W,UAAUm9W,0BAA4B,SAAUpoC,EAAStxT,EAAO65V,GAChF,GAAc,IAAV75V,EACA,OAAO,EAEN,GAAc,IAAVA,EACL,OAAOsxT,EAAQ,GAEnB,IACI9wG,EAAOq5I,GAAc75V,EAAQ,GAC7B85V,EAAcvsW,KAAK+S,MAAM/S,KAAKE,IAAI+yN,IAGtC,OAFmBA,EAAOs5I,IACFxoC,EAAQwoC,EAAc,GAAKxoC,EAAQwoC,IAAgBxoC,EAAQwoC,IAUvFlB,EAAoBr8W,UAAUo9W,kBAAoB,SAAUroC,EAAStxT,EAAOw5V,GACxE,GAAc,IAAVx5V,EAGA,OAFAw5V,EAASz8U,cAAgBu0S,EAAQ,GACjCkoC,EAAS18U,cAAgBw0S,EAAQ,GAC1B,KAEX,IAAI0oC,EAAah6V,EAAQ,GAAM,EAC3Bi6V,EAAaj6V,EAAQ,EACrBk6V,EAAqB5oC,EAAQ/uU,MAAM,EAAG03W,GACtCE,EAAqB7oC,EAAQ/uU,MAAMy3W,EAAaC,EAAaA,EAAa,EAAGj6V,GACjFw5V,EAASz8U,cAAgB6B,GAAUs7U,GACnCV,EAAS18U,cAAgB8B,GAAUu7U,IAWvCvB,EAAoBr8W,UAAUq9W,iBAAmB,SAAUtoC,EAAStxT,EAAOw5V,GAGvE,IAAK,IADDY,EAAW,KADKZ,EAAS18U,cAAgB08U,EAASz8U,eAE7C1/B,EAAI,EAAGA,EAAI2iB,EAAO3iB,IAAK,CAC5B,KAAIi0U,EAAQj0U,GAAKm8W,EAASz8U,cAAgBq9U,GAGrC,CACDZ,EAASr/U,QAAUm3S,EAAQj0U,GAC3B,MAJAm8W,EAASx8U,SAASt3B,KAAK4rU,EAAQj0U,IAOvC,IAASA,EAAI2iB,EAAQ,EAAG3iB,GAAK,EAAGA,IAAK,CACjC,KAAIi0U,EAAQj0U,GAAKm8W,EAAS18U,cAAgBs9U,GAGrC,CACDZ,EAASp/U,QAAUk3S,EAAQj0U,GAC3B,MAJAm8W,EAASx8U,SAASt3B,KAAK4rU,EAAQj0U,MAa3Cu7W,EAAoBr8W,UAAUs4U,YAAc,SAAU/0T,GAClD5e,KAAKu4B,QAAQ3Z,IAKjB84V,EAAoBr8W,UAAUkkC,cAAgB,WAC1C,MAAO,uBAUXm4U,EAAoBr8W,UAAUiX,QAAU,SAAUue,KAK3C6mV,GACT1tB,IC1UE1/P,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAexCwuR,GAAwC,SAAUhuR,GAElD,SAASguR,IACL,OAAkB,OAAXhuR,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAyF/D,OA3FAsqF,GAAU6uR,EAAwBhuR,GASlCguR,EAAuB99W,UAAU0wG,OAAS,SAAUntF,EAAQ9G,EAAOF,EAAOwc,GACtE,IACI20T,EAKAqwB,EACA7uO,EAEA8uO,EATAt5W,EAAQC,KAERqlD,EAAa,KACb7vB,EAAY,GACZyjP,EAAS5sQ,KAAKC,IAAIsS,EAAOhH,MAAM+a,aAAa5S,IAAK,GACjD/M,KAKA81B,EAAW9oC,KAAK2rV,aAAa/sU,EAAQA,EAAOkqB,UAChDlqB,EAAO+Y,OAAOC,IAAI,SAAU9D,EAAO33B,EAAGksV,GAClCv0T,EAAMw6S,mBACNx6S,EAAM65S,WACN0rC,GAAW,EACPvlV,EAAM0D,SAAWrF,GAAYk2T,EAAalsV,EAAI,GAAI23B,EAAOu0T,EAAalsV,EAAI,GAAIyiB,KAC9E4W,GAAaz1B,EAAMurV,qBAAqBx3T,EAAMtF,OAAQyqP,EAAQr6P,EAAQwV,EAAYsG,GAAU2qB,EAAY,KACxGA,EAAaA,GAAc,IAAIzxB,GAAcE,EAAMtF,OAAQyqP,GAC3D8vE,EAAaruT,GAAS5G,EAAMtF,OAAQsF,EAAMrF,OAAQ3W,EAAOF,EAAOwc,GAC5Dm2G,GAAYxqI,EAAMi0U,cAAclgT,EAAOy2G,EAAU3rH,EAA+B,MAAvBA,EAAOitU,YAAqB/iT,IACrFuwU,GAAW,EACXD,EAAc1+U,GAAS2qB,EAAWt4C,EAAGksQ,EAAQnhQ,EAAOF,EAAOwc,GAC3DoB,GAAc,KAAauzT,EAAY,EAAI,IAAOA,EAAY,EAAI,IAClEvzT,GAAc,KAAauzT,EAAY,EAAI,IAAOqwB,EAAa,EAAI,IACnEr5W,EAAMu5W,mBAAmBtmW,EAAS4L,EAAQ2rH,EAAU/0G,EAAW,UAAY+0G,EAASt4H,OACpFujB,EAAY,KAAauzT,EAAY,EAAI,IAAOqwB,EAAa,EAAI,MAC5DrwB,EAAY,EAAI,IAAOA,EAAY,EAAI,MAG5CvzT,GAAc,KAAauzT,EAAY,EAAI,IAAOA,EAAY,EAAI,IAClEhpV,EAAMi0U,cAAclgT,EAAO,KAAMlV,EAA+B,MAAvBA,EAAOitU,YAAqB/iT,IAErEu/S,EAAalsV,EAAI,KAAOksV,EAAalsV,EAAI,GAAGq7B,SAA8C,SAAnC5Y,EAAOqxT,mBAAmBlyS,OACjFvI,GAAaz1B,EAAMyrV,uBAAwBz+U,EAAK+mB,EAAMtF,OAAQxhB,EAAKisQ,GAAU5zN,EAAYzmC,EAAQwV,EAAYsG,IAC7G2qB,EAAa,MAEjBklF,EAAWz2G,EACX/zB,EAAMqpV,mBAAmBt1T,EAAOlV,EAAQwV,EAAYsG,OAGvD2+U,IACD7jV,EAAY5W,EAAO+Y,OAAOl7B,OAAS,EAC9B+4B,EAAYx1B,KAAKsrV,qBAAqB/gN,EAAS/7G,OAAQyqP,EAAQr6P,EAAQwV,EAAYsG,GAAU,KAAM,KAAQ,GAChH16B,KAAKs5W,mBAAmBtmW,EAAS4L,EAAQ2rH,EAAU/0G,EAAW,KAElEx1B,KAAK+rV,iBAAiBntU,EAAQ5L,EAAS81B,GACvC9oC,KAAKq1U,aAAaz2T,IAKtBu6V,EAAuB99W,UAAUi+W,mBAAqB,SAAUtmW,EAAS4L,EAAQkV,EAAO0B,EAAWlyB,GAC/F0P,EAAQxO,KAAK,IAAI4xB,GAAWxX,EAAOiS,MAAM7vB,QAAQsC,GAAK,WAAasb,EAAO3M,MAAQ3O,EAAIsb,EAAOo1T,cAAclgT,EAAOlV,EAAOypD,UAAWzpD,EAAO0lB,OAAOtuB,MAAO4I,EAAO0lB,OAAO9N,MAAO5X,EAAOnR,QAASmR,EAAOkzB,UAAWtc,KAOpN2jV,EAAuB99W,UAAUiX,QAAU,SAAUue,KAQrDsoV,EAAuB99W,UAAUkkC,cAAgB,WAI7C,MAAO,0BAOX45U,EAAuB99W,UAAUs4U,YAAc,SAAU/0T,GACrD5e,KAAKqpV,kBAAkBzqU,EAAQA,EAAO+3B,YAEnCwiU,GACT9tB,IC5GE/gQ,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAexC4uR,GAAwC,SAAUpuR,GAElD,SAASouR,IACL,OAAkB,OAAXpuR,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KA0E/D,OA5EAsqF,GAAUivR,EAAwBpuR,GASlCouR,EAAuBl+W,UAAU0wG,OAAS,SAAUntF,EAAQ9G,EAAOF,EAAOwc,GAOtE,IAAK,IANDm2G,EAAW,KACXllF,EAAa,IACbwkS,EAAgB7pV,KAAKioV,wBAAwBrpU,GAC7C5L,KACAwiB,EAAY,GACZsT,EAAW9oC,KAAK2rV,aAAa/sU,EAAQA,EAAOkqB,UACvC1qC,EAAK,EAAG0rV,EAAkBD,EAAezrV,EAAK0rV,EAAgBrtV,OAAQ2B,IAAM,CACjF,IAAI01B,EAAQg2T,EAAgB1rV,GAC5B01B,EAAM65S,WACF75S,EAAM0D,SAAWrF,GAAY03T,EAAc/1T,EAAM7hB,MAAQ,GAAI6hB,EAAO+1T,EAAc/1T,EAAM7hB,MAAQ,GAAI2M,IACpG4W,GAAax1B,KAAK8oV,iBAAiBv+M,EAAUz2G,EAAOlV,EAAQwV,EAAYsG,GAAU2qB,GAClE,MAAZklF,EACIvqI,KAAKg0U,cAAclgT,EAAOy2G,EAAU3rH,EAA+B,MAAvBA,EAAOitU,YAAqB/iT,IACxE91B,EAAQxO,KAAK,IAAI4xB,GAAWxX,EAAOiS,MAAM7vB,QAAQsC,GAAK,WAAasb,EAAO3M,MAAQ,UAAYs4H,EAASt4H,MAAO,OAAQ2M,EAAO5I,MAAO4I,EAAOo1T,cAAczpM,EAAU3rH,EAAOypD,UAAWzpD,EAAOnR,QAASmR,EAAOkzB,UAAWtc,IACvN6vB,EAAa,IACb7vB,EAAY,IAGZ6vB,EAAa,IAIjBrlD,KAAKg0U,cAAclgT,EAAO,KAAMlV,EAA+B,MAAvBA,EAAOitU,YAAqB/iT,GAExEyhG,EAAWz2G,EACX9zB,KAAKopV,mBAAmBt1T,EAAOlV,EAAQwV,EAAYsG,MAGnD6vG,EAA+C,SAAnC3rH,EAAOqxT,mBAAmBlyS,KAAmBwsG,EAAW,KACpEllF,EAAiD,SAAnCzmC,EAAOqxT,mBAAmBlyS,KAAmBsnB,EAAa,IACxEvxB,EAAMw6S,oBAGI,KAAd94S,GACAxiB,EAAQxO,KAAK,IAAI4xB,GAAWxX,EAAOiS,MAAM7vB,QAAQsC,GAAK,WAAasb,EAAO3M,MAAO,OAAQ2M,EAAO5I,MAAO4I,EAAOo1T,cAAc6V,EAAcA,EAAcptV,OAAS,GAAImiB,EAAOypD,UAAWzpD,EAAOnR,QAASmR,EAAOkzB,UAAWtc,IAE7Nx1B,KAAK+rV,iBAAiBntU,EAAQ5L,EAAS81B,GACvC9oC,KAAKq1U,aAAaz2T,IAOtB26V,EAAuBl+W,UAAUs4U,YAAc,SAAU/0T,GACrD5e,KAAKqpV,kBAAkBzqU,EAAQA,EAAO+3B,YAK1C4iU,EAAuBl+W,UAAUkkC,cAAgB,WAI7C,MAAO,0BAOXg6U,EAAuBl+W,UAAUiX,QAAU,SAAUue,KAK9C0oV,GACTluB,ICtFEmuB,GAAiC,WAKjC,SAASA,EAAgB3oV,GAErB7wB,KAAKy5W,mBAELz5W,KAAK05W,yBAEL15W,KAAK25W,mBAEL35W,KAAK45W,yBACL55W,KAAK6wB,MAAQA,EA+ajB,OAzaA2oV,EAAgBn+W,UAAU2nU,0BAA4B,SAAU7sT,GAC5D,IAKI0pB,EACA9pB,EAEAiuC,EARAhnD,EAAQ,EACR68W,KACAC,KACAxkV,EAAkC,aAArBnf,EAAKijB,YAClB2gV,EAAYzkV,EAAanf,EAAKkd,KAAKtd,OAASI,EAAKkd,KAAKrd,MAK1DG,EAAK4sT,iBAAiBnrS,IAAI,SAAUoiV,EAAY/nW,GAC5C+nW,EAAWp4B,WAAWhqT,IAAI,SAAUqiV,GACL,KAAvBA,EAAcxtV,MAAuC,OAAxBwtV,EAAc18W,OAAwC,OAAtB08W,EAAcp7V,MAC3EghB,EAAYrT,GAAYytV,EAAcxtV,KAAMutV,EAAW51E,WACvDruR,EAASuf,EAAauK,EAAU7pB,MAAQ6pB,EAAU9pB,OAClDA,GAAU,EAAIikW,EAAW11U,OAAOtuB,OACA,eAA3BgkW,EAAW11U,OAAO59B,KARrB,GAQuD,GACzDs9C,EAA0C,OAAnCi2T,EAAcC,iBAA6BD,EAAcC,iBAC3DjmV,GAAgD,iBAAtBgmV,EAAcp7V,IAAmByY,OAAO,IAAItX,KAAKi6V,EAAcp7V,MACtFo7V,EAAcp7V,IAAK1I,GAAQ4jW,EAC1B9lV,GAAkD,iBAAxBgmV,EAAc18W,MAAqB+5B,OAAO,IAAItX,KAAKi6V,EAAc18W,QACxF08W,EAAc18W,MAAO4Y,GAAQ4jW,EACpCl6U,EAAU7pB,MAAQguC,EAdrB,IAcuCA,EAAM,GAA8B,SAAxBg2T,EAAWngW,WAAyByb,IACrFvf,GAAoBsqB,GAAS45U,EAAcxtV,KAAMu3B,EAfnD,GAekEg2T,EAAW51E,WAAiB,QAEhGy1E,EAAuB5nW,GAAU4nW,EAAuB5nW,GAClD4nW,EAAuB5nW,GAAS8D,EAAUA,EAAS8jW,EAAuB5nW,GADf8D,KAIzE+jW,EAAW7nW,GAASjV,EACpBA,GAAS68W,EAAuB5nW,GAAU4nW,EAAuB5nW,GAtBvD,GAsB2E,IAEzFkE,EAAKurT,sBAAwB1kU,GAAyB,KAAfmZ,EAAK+pB,OAAiBlgC,KAAK6wB,MAAMmrT,cAAgBh8U,KAAK6wB,MAAMulT,eAAe5+S,QAC5G4hC,EAAc,GAChB9jC,GACAt1B,KAAK45W,sBAAwBC,EAC7B75W,KAAK25W,gBAAkBG,IAGvB95W,KAAK05W,sBAAwBG,EAC7B75W,KAAKy5W,gBAAkBK,IAQ/BN,EAAgBn+W,UAAU+wU,4BAA8B,SAAUj2T,EAAMlE,EAAO3R,EAAQ4rU,GACnF,IACIn/T,EACAC,EAEA6xB,EAGAmsS,EAGAztU,EACAshB,EACAghB,EACAimQ,EAEA9hP,EACAnwC,EAEA+kB,EACA5R,EAnBAjnB,EAAQC,KAKR8+B,GAAU3oB,EAAKspG,gBAAkBtpG,EAAK0rT,aAAe1rT,EAAK4rT,eAAehsT,OAAS,GACjFI,EAAK+rT,aAAmB,OAHf,GAMVi4C,EAAW,GAKXC,EAAmC,YAAvBjkW,EAAKspG,cAGjBvrF,EAAa/d,EAAK+d,WAGlBuB,EAAkBtf,EAAKsf,gBACvBG,EAAkBwkV,GAAa38W,EAAkB0Y,EAAK+wT,WAAa/wT,EAAKyf,gBAAkB,EAC9FA,GAAqCH,GAAmB,EAAI,EAC5DqwQ,EAAUrwQ,IAAoB2kV,IAAgB3kV,GAAmB2kV,EAC5DluC,EAASl/T,EAAI8xB,EAAS3oB,EAAK4rT,eAAe/rT,MAAUk2T,EAASl/T,EAAI8xB,EAAS3oB,EAAKurT,sBACpF1hU,KAAKisV,eAAe/f,EAASn/T,EAAIoJ,EAAK4rT,eAAe/rT,MAAO8vR,EAAQlwQ,EAAiBzf,EAAKurT,sBAtB5E,GAsB6GwK,EAASl2T,MAAQ,EAAIG,EAAK4rT,eAAe/rT,MAAOhW,KAAK6wB,MAAM7vB,QAAQsC,GAAK,mBAAqB2O,EAAOjS,KAAK6wB,MAAM7vB,QAAQsC,GAAK,uBAAyB2O,GAChRkE,EAAK4sT,iBAAiBnrS,IAAI,SAAUoiV,EAAY7nN,GAC5CgoN,EAAW,GACXH,EAAWp4B,WAAWhqT,IAAI,SAAUqiV,EAAe99W,GAI/C,GAHA6qB,EAAejnB,EAAM8wB,MAAMhD,SAASw+C,aAAc/oE,GAAIvD,EAAM8wB,MAAM7vB,QAAQsC,GAAK2O,EAAQ,mBAAqBkgJ,IAC5G50J,EAAuC,iBAAxB08W,EAAc18W,MAAqB+5B,OAAO,IAAItX,KAAKi6V,EAAc18W,QAAU08W,EAAc18W,MACxGshB,EAAmC,iBAAtBo7V,EAAcp7V,IAAmByY,OAAO,IAAItX,KAAKi6V,EAAcp7V,MAAQo7V,EAAcp7V,KAC5FthB,GAAS4Y,EAAKwc,aAAa5S,KAAOxiB,GAAS4Y,EAAKwc,aAAarmB,KAC3DuS,GAAO1I,EAAKwc,aAAa5S,KAAOlB,GAAO1I,EAAKwc,aAAarmB,QAC7DssB,EAAW74B,EAAMs6W,wBAAwBlkW,EAAM8jW,EAAcxtV,KAAMtW,EAAK4sT,iBAAiB5wK,GAAOiyI,UAAWjuR,EAAK4sT,iBAAiB5wK,GAAO9iG,YAC1Hx2B,OAAQ,CAClBgG,EAAS5K,GAAmB12B,EAAO4Y,GAAQ+1T,EAASl2T,MACpDg1T,EAAO/2S,GAAmBpV,EAAK1I,GAAQ+1T,EAASl2T,MAChDg1T,EAAO92S,GAAc2K,EAAQA,EAASmsS,GAAM,GAAKA,EACjDnrS,EAAYrT,GAAYoM,EAASnM,KAAMmM,EAASwrQ,WAChDpgP,GAA2C,OAAnCi2T,EAAcC,iBAA6BlvC,EAAOnsS,EAASo7U,EAAcC,kBArCnF,GAsCEntW,EAAI8xB,EAASqtS,EAASn/T,EAtCxB,GAuCEC,GAAOyoB,IAAoB2kV,IAAgB3kV,GAAmB2kV,EAAet7U,EAASotS,EAASl/T,EAC3F6yB,EAAU9pB,OAAS,EAxCzB,GAwCuChW,EAAM05W,gBAAgBtnN,GAAW+5K,EAASl/T,EAAI8xB,EAASe,EAAU9pB,OAAS,EAC3GhW,EAAM25W,sBAAsBvnN,GAASpyJ,EAAM05W,gBAAgBtnN,IAAWv8H,EAC/C,WAAvBgD,EAASy2B,WACTtiD,IAAMi+T,EAAOnsS,EA3CnB,IA2CuC,EACjChrB,EAAS,UAEmB,QAAvB+kB,EAASy2B,WACdtiD,EAAIA,GAAKi+T,EAAOnsS,EA/CtB,IA+C0Cm7U,EAAW11U,OAAOtuB,MAAQ,EAC9DnC,EAAS,QAGTA,EAAS,QACT9G,GAAKitW,EAAW11U,OAAOtuB,MAAQ,GAEnChJ,EAA+B,eAA3BgtW,EAAW11U,OAAO59B,MACd+uB,GAAmB2kV,GAAe3kV,IAAoB2kV,EAAcptW,EAvD9E,GAuD4FA,EAAIosD,EAAepsD,EAC7G,IAAIgG,EAAU,IAAIujB,GAAWx2B,EAAM8wB,MAAM7vB,QAAQsC,GAAK2O,EAAQ,+BAAiCkgJ,EAAQ,SAAWh2J,EAAG4Q,EAAGC,EAAG6G,EAAQ+kB,EAASnM,MAChH,SAAxButV,EAAWngW,WACX7G,EAAQyZ,KAAgC,SAAxButV,EAAWngW,SACvBwmB,GAASzH,EAASnM,KAAMu3B,EAAKprB,EAASwrQ,WAAajmQ,GAAS6lB,EAAKprB,EAASnM,KAAMmM,EAASwrQ,WAC7FpxR,EAAQjG,EAAIiG,EAAQjG,EAAIqsD,GAE5B9iC,GAAYtjB,EAAS4lB,EAASwrQ,UAAWxrQ,EAASwrQ,UAAU5tQ,OAASz2B,EAAM8wB,MAAMwF,WAAWrH,UAAWhI,GACnGgzV,EAAW11U,OAAOtuB,MAAQ,GAAgC,kBAA3BgkW,EAAW11U,OAAO59B,OACjDyzW,EAAWp6W,EAAMu6W,uBAAuBnoN,EAAO64K,EAAOnsS,EAhE5D,GAgE8E1oB,EAAM0oB,EAAQC,EAAQe,EAAW7sB,EAASk5T,EAAUtzS,EAASy2B,UAAW8qT,EAAUC,EAAW3kV,IAEzK11B,EAAMw6W,cAAc54W,YAAYqlB,MAI3B,KAAbmzV,GACAp6W,EAAMy6W,oBAAoBroN,EAAOlgJ,EAAOkE,EAAMgkW,KAGtD75W,EAAOqB,YAAY3B,KAAKu6W,gBAO5Bf,EAAgBn+W,UAAUi/W,uBAAyB,SAAUnvC,EAAYnnR,EAAK7tC,EAAM0oB,EAAQC,EAAQe,EAAWoE,EAAaioS,EAAU78Q,EAAWtyC,EAAMq9V,EAAW3kV,GAC9J,IACIglV,EACAC,EACA19W,EACA29W,EAJAvhT,EAAU,GAKVwhT,EAAazkW,EAAK4sT,iBAAiBoI,GACnCn1T,EAAQguC,EAAMoV,EACdrjD,EAAS/V,KAAK05W,sBAAsBvuC,GAAc/xQ,EAClDxjC,EAAyC,YAAvBzf,EAAKspG,cAA8BtpG,EAAKyf,gBAAkB,EAC5E7oB,EAAI8xB,EAASqtS,EAASn/T,EACtBC,GAAOyoB,GAAmB2kV,GAAe3kV,IAAoB2kV,EAAet7U,EAASotS,EAASl/T,EAC9FhN,KAAKy5W,gBAAgBtuC,GAAcv1S,EAAoBs2S,EAASl/T,EAAI8xB,EACpE9+B,KAAKy5W,gBAAgBtuC,GAAcv1S,EACvC,OAAQglV,EAAWt2U,OAAO59B,MACtB,IAAK,4BACL,IAAK,YACL,IAAK,mBAEDqW,GAAQ,IAAMhQ,EAAI,IAAMC,EAAI,IAAMD,EAAI,KAAOC,GAD7C+I,GAAY0f,GAAmB2kV,GAAe3kV,IAAoB2kV,EAAcrkW,GAAUA,IAEtF,KAAOhJ,EAAIiJ,GAAS,IAAMhJ,EAAI,KAAOD,EAAIiJ,GAAS,KAAOhJ,EAAI+I,GACjEgH,GAAoC,8BAA3B69V,EAAWt2U,OAAO59B,KAAyC,OAAkB,KAAOsG,EAAI+I,GAAU,IAAO,IAClHgH,GAAmC,cAA3B69V,EAAWt2U,OAAO59B,KAAwB,IAAMqG,EAAI,IAAMC,EAAI,KAAOD,EAAIiJ,GAAS,IAAMhJ,EAAK,IACrG,MACJ,IAAK,QACiB,SAAdqiD,GACAryD,EAAQinC,EAAYl3B,EACpB4tW,EAAS12U,EAAYl3B,EAAI8yB,EAAU7pB,MAAQ,GAExB,WAAdq5C,GACLryD,EAAQinC,EAAYl3B,EAAI8yB,EAAU7pB,MAAQ,EAAI,EAC9C2kW,EAAS12U,EAAYl3B,EAAI8yB,EAAU7pB,MAAQ,EAAI,IAG/ChZ,EAAQinC,EAAYl3B,EAAI8yB,EAAU7pB,MAAQ,EAC1C2kW,EAAS12U,EAAYl3B,GAGzBgQ,GAAQ,IAAMhQ,EAAI,IAAMC,EAAI,IAAMD,EAAI,KAAOC,GAD7C+I,GAAY0f,GAAmB2kV,GAAe3kV,IAAoB2kV,EAAcrkW,GAAUA,GAChC,GACtD,IAAMhJ,EAAI,KAAOC,EAAI+I,EAAS,GAAK,KAAO/Y,EAAQ,GAAK,KAAOgQ,EAAI+I,EAAS,GAC3E,MAAiB,KAAO/I,EAAI+I,EAAS,GAAK,KAAOhJ,EAAIiJ,GAAS,KAAOhJ,EAAI+I,EAAS,GAClF,KAAOhJ,EAAIiJ,GAAS,KAAOhJ,EAAI+I,EAAS,GAAK,KAAOhJ,EAAIiJ,GAAS,MACrE,MACJ,IAAK,cACKyf,GAAmB2kV,GAAe3kV,IAAoB2kV,GACxDhhT,EAAU,GACVqhT,EAAW,GACXC,EAAW,IAGXthT,GAAW,GACXqhT,GAAY,GACZC,GAAY,GAGZ39V,GADc,WAAdsyC,EACQ,IAAMtiD,EAAI,IAAMC,EAAI,MAAQD,EAAI,IAAMC,EAAI,KAAOD,EAAI,GAAK,KAAOC,EAAIosD,GAAW,KAAOrsD,EAAI,IAAM,KACpGC,EAAIosD,GAAW,KAAOrsD,EAAIiJ,EAAQ,EAAI,GAAK,KAAOhJ,EAAIosD,GAAW,KAAOrsD,EAAIiJ,EAAQ,GAAK,KAAOhJ,EAAIytW,GACrG,KAAO1tW,EAAIiJ,EAAQ,EAAI,GAAK,KAAOhJ,EAAIosD,GAAW,KAAOrsD,EAAIiJ,EAAQ,IAAM,KAAOhJ,EAAIosD,GAAW,OAChGrsD,EAAIiJ,EAAQ,IAAM,KAAOhJ,EAAIosD,GAAW,KAAOrsD,EAAIiJ,GAAS,KAAOhJ,EAAI0tW,GAAY,KAAO3tW,EAAIiJ,GAAS,MAEzF,SAAdq5C,EACG,IAAMtiD,EAAI,IAAMC,EAAI,MAAQD,EAAI,IAAMC,EAAI,KAAOD,EAAI,GAAK,KAAOC,EAAIosD,GAAW,KAAOrsD,EAAI,IAAM,KACpGC,EAAIosD,GAAW,KAAOrsD,EAAI,IAAM,KAAOC,EAAIytW,GAAY,KAAO1tW,EAAI,IAAM,KAAOC,EAAIosD,GAAW,KAC9FrsD,EAAIiJ,EAAQ,IAAM,KAAOhJ,EAAIosD,GAAW,OAASrsD,EAAIiJ,EAAQ,IAAM,KAAOhJ,EAAIosD,GAAW,KAAOrsD,EAAIiJ,GAAS,KAC3GhJ,EAAI0tW,GAAY,KAAO3tW,EAAIiJ,GAAS,MAGnC,IAAMjJ,EAAI,IAAMC,EAAI,MAAQD,EAAI,IAAMC,EAAI,KAAOD,EAAI,GAAK,KAAOC,EAAIosD,GAAW,KAAOrsD,EAAI,IAAM,KACpGC,EAAIosD,GAAW,KAAOrsD,EAAIiJ,EAAQ,IAAM,KAAOhJ,EAAIosD,GAAW,KAAOrsD,EAAIiJ,EAAQ,IAAM,KAAOhJ,EAAIytW,GACnG,KAAO1tW,EAAIiJ,EAAQ,IAAM,KAAOhJ,EAAIosD,GAAW,KAAOrsD,EAAIiJ,EAAQ,IAAM,KAAOhJ,EAAIosD,GAAW,OAC3FrsD,EAAIiJ,EAAQ,IAAM,KAAOhJ,EAAIosD,GAAW,KAAOrsD,EAAIiJ,GAAS,KAAOhJ,EAAI0tW,GAAY,KAAO3tW,EAAIiJ,GAAS,MAI1H,OAAO+G,GAOXy8V,EAAgBn+W,UAAU6vU,4BAA8B,SAAU/0T,EAAMlE,EAAO3R,EAAQ+yB,GACnF,IACIwM,EACAgmQ,EAEA94R,EACAC,EAIA8xB,EAEA9X,EACA8jT,EACAlyS,EAEAr7B,EACAshB,EACAmlC,EAjBAjkD,EAAQC,KAGRo6W,EAAmC,YAAvBjkW,EAAKspG,cAIjB5gF,GAAU1oB,EAAK0rT,eAAiB1rT,EAAKspG,cAAgBtpG,EAAK4rT,eAAehsT,OAAS,GACjFI,EAAK+rT,aAAkB,MAFd,GAIVnlT,EAAO,GAIPmX,EAAa/d,EAAK+d,WAKlBuB,EAAkBtf,EAAKsf,gBACvBG,EAAkBwkV,GAAa38W,EAAkB0Y,EAAK+wT,WAAa/wT,EAAKyf,gBAAkB,EAC9FA,GAAqCH,EAAkB,GAAK,EAC5DowQ,EAAUpwQ,IAAoB2kV,IAAgB3kV,GAAmB2kV,EAC5D/mV,EAAKtmB,EAAIoJ,EAAKurT,sBAAwB7iS,EAjB7B,GAiBkDxL,EAAKtmB,EAAI8xB,EACzE7+B,KAAKisV,eAAepmD,EAAQjwQ,EAAiBvC,EAAKrmB,EAAImJ,EAAK4rT,eAAe/rT,MAAOqd,EAAKtd,OAAS,EAAII,EAAK4rT,eAAe/rT,MAAOG,EAAKurT,sBAlBrH,GAkBsJ1hU,KAAK6wB,MAAM7vB,QAAQsC,GAAK,mBAAqB2O,EAAOjS,KAAK6wB,MAAM7vB,QAAQsC,GACrO,uBAAyB2O,GAC/BkE,EAAK4sT,iBAAiBnrS,IAAI,SAAUoiV,EAAY7nN,GAC5Cp1I,EAAO,GACPi9V,EAAWp4B,WAAWhqT,IAAI,SAAUqiV,EAAe99W,GAI/C,GAHA6qB,EAAejnB,EAAM8wB,MAAMhD,SAASw+C,aAAc/oE,GAAIvD,EAAM8wB,MAAM7vB,QAAQsC,GAAK2O,EAAQ,mBAAqBkgJ,IAC5GtzI,EAAmC,iBAAtBo7V,EAAcp7V,IAAmByY,OAAO,IAAItX,KAAKi6V,EAAcp7V,MAAQo7V,EAAcp7V,MAClGthB,EAAuC,iBAAxB08W,EAAc18W,MAAqB+5B,OAAO,IAAItX,KAAKi6V,EAAc18W,QAAU08W,EAAc18W,QACzF4Y,EAAKwc,aAAa5S,KAAOxiB,GAAS4Y,EAAKwc,aAAarmB,KAC3DuS,GAAO1I,EAAKwc,aAAa5S,KAAOlB,GAAO1I,EAAKwc,aAAarmB,OAC7DwyB,EAAS7K,KAA4B9d,GAASkd,EAAW,OACzDy3S,EAAO72S,KAA0B9d,GAASkd,EAAW,OACrDy3S,EAAO52S,GAAc4K,EAAQA,EAASgsS,GAAM,GAAKA,IACjDlyS,EAAW74B,EAAMs6W,wBAAwBlkW,EAAM8jW,EAAcxtV,KAAMutV,EAAW51E,UAAW41E,EAAW3qT,YACtFx2B,QAAQ,CAClBgH,EAAYrT,GAAYoM,EAASnM,KAAMmM,EAASwrQ,WAChDpgP,EAAM8mR,EAAOhsS,EACb/xB,EAAIsmB,EAAKtmB,EAAI8xB,EAAS9+B,EAAM45W,gBAAgBxnN,GACvCpyJ,EAAM65W,sBAAsBznN,GAAS,EAAK/4F,EAC/CpsD,EAAIqmB,EAAKtd,OAASsd,EAAKrmB,EAAI8xB,EAAUklB,EAAM,EAEvCj3C,EADA0oB,EACI2kV,EAAY/mV,EAAKtmB,EAAI8xB,EAASu6B,EAAer5D,EAAM65W,sBAAsBznN,GAAS,EAClFpyJ,EAAM45W,gBAAgBxnN,GAASv8H,EAAkBvC,EAAKtmB,EAAI8xB,EAAU9+B,EAAM65W,sBAAsBznN,GAAS,EACzGpyJ,EAAM45W,gBAAgBxnN,GAAS/4F,EAG/BghT,EAAYrtW,EAAI6oB,EAAkBvC,EAAKtmB,EAAI8xB,EAASu6B,EAAer5D,EAAM65W,sBAAsBznN,GAAS,EACxGpyJ,EAAM45W,gBAAgBxnN,GAEH,WAAvBv5H,EAASy2B,UACTriD,GAAK6yB,EAAU9pB,OAAS,EAEI,QAAvB6iB,EAASy2B,UACdriD,GAAKg3C,EAAM,EAAInkB,EAAU9pB,OAAS,EAGlC/I,EAAIA,EAAIg3C,EAAM,EAAInkB,EAAU9pB,OAEhChJ,EAA+B,eAA3BitW,EAAW11U,OAAO59B,MAA4B+uB,GAAmB2kV,GAChE3kV,IAAoB2kV,EAAcrtW,EAzDzC,GAyDuDA,EAzDvD,GAyDsEA,EACpE,IAAIiG,EAAU,IAAIujB,GAAWx2B,EAAM8wB,MAAM7vB,QAAQsC,GAAK2O,EAAQ,+BAAiCkgJ,EAAQ,SAAWh2J,EAAG4Q,EAAGC,EA9C3H,SA8CsI4rB,EAASnM,MAC5IzZ,EAAQyZ,KAAgC,SAAxButV,EAAWngW,SACvBskB,GAA6C,OAAnC87U,EAAcC,iBAA4Bn6W,EAAM65W,sBAAsBznN,GAC5E8nN,EAAcC,iBAAmBthV,EAASnM,KAAMmM,EAASwrQ,WAAapxR,EAAQyZ,KACtF6J,GAAYtjB,EAAS4lB,EAASwrQ,UAAWxrQ,EAASwrQ,UAAU5tQ,OAASz2B,EAAM8wB,MAAMwF,WAAWrH,UAAWhI,GACnGgzV,EAAW11U,OAAOtuB,MAAQ,GAAgC,kBAA3BgkW,EAAW11U,OAAO59B,OACjDqW,EAAOhd,EAAM86W,uBAAuB1oN,EAAOnuG,EAAK7tC,EAAM20T,EAAMjsS,EAAQC,EAAQe,EAAW7sB,EAASqgB,EAAMuF,EAASy2B,UAAWtyC,EAAMq9V,EAAW3kV,IAE/I11B,EAAMw6W,cAAc54W,YAAYqlB,MAI/B,KAATjK,GACAhd,EAAMy6W,oBAAoBroN,EAAOlgJ,EAAOkE,EAAM4G,KAGtDzc,EAAOqB,YAAY3B,KAAKu6W,gBAO5Bf,EAAgBn+W,UAAUw/W,uBAAyB,SAAU1vC,EAAYnnR,EAAK7tC,EAAM20T,EAAMjsS,EAAQC,EAAQe,EAAWoE,EAAa5Q,EAAMg8B,EAAWtyC,EAAMq9V,EAAW3kV,GAChK,IAEIglV,EACAC,EAHA3kW,EAAS+0T,EAAOhsS,EAChBs6B,EAAU,GAGVwhT,EAAazkW,EAAK4sT,iBAAiBoI,GACnCn+T,EAAIqmB,EAAKrmB,EAAIqmB,EAAKtd,OAAS+0T,EAC3Bl1S,EAAkBwkV,GAAa38W,EAAkB0Y,EAAK+wT,WAAa/wT,EAAKyf,gBAAkB,EAC9FA,GAAqCH,EAAkB,GAAK,EAC5D,IAAIzf,EAAQhW,KAAK45W,sBAAsBzuC,GAAc/xQ,EACjDrsD,IAAQ0oB,GAAmB2kV,GAAe3kV,IAAoB2kV,EAAc/mV,EAAKtmB,EAAI8xB,EACrF7+B,KAAK25W,gBAAgBxuC,GAAc93S,EAAKtmB,EAAI8xB,EAAS7+B,KAAK25W,gBAAgBxuC,IAAev1S,EAC7F,OAAQglV,EAAWt2U,OAAO59B,MACtB,IAAK,4BACL,IAAK,YACL,IAAK,mBAEDqW,GAAQ,IAAMhQ,EAAI,IAAMC,EAAI,KAAOD,GADnCiJ,GAAWyf,GAAmB2kV,GAAe3kV,IAAoB2kV,GAAepkW,EAAQA,IACxC,IAAMhJ,EAClD,IAAMD,EAAI,KAAOC,EAAI+I,GAAU,KAAOhJ,EAAIiJ,GAAS,KAAOhJ,EAAI+I,GAClEgH,GAAoC,8BAA3B69V,EAAWt2U,OAAO59B,KAAyC,MAAaqG,EAAIiJ,GAAS,IAAMhJ,EAAI,IAAO,IAC/G+P,GAAoC,cAA3B69V,EAAWt2U,OAAO59B,KAAyB,MAAY,KAAOsG,EAAI+I,GAAU,OAAkB,IAAM/I,EAAI,IAAO,IACxH,MACJ,IAAK,QAED+P,GAAQ,OAAa,IAAM/P,EAAI,OAASD,GADxCiJ,GAAWyf,GAAmB2kV,GAAe3kV,IAAoB2kV,EAAcpkW,GAASA,GACpC,GAAK,IAAMhJ,EAAI,OAASD,EAAIiJ,EAAQ,GAAK,KACxFiuB,EAAYj3B,EAAI6yB,EAAU9pB,OAAS,EAAI,GAAK,OAAShJ,EAAIiJ,EAAQ,GAAK,KACtEiuB,EAAYj3B,EAAI6yB,EAAU9pB,OAAS,EAAI,GACxC,OAAShJ,EAAIiJ,EAAQ,GAAK,KAAOhJ,EAAI+I,GAAU,QAAc,KAAO/I,EAAI+I,GAC5E,MACJ,IAAK,cACK0f,GAAmB2kV,GAAe3kV,IAAoB2kV,GACxDhhT,GAAW,GACXqhT,GAAY,GACZC,GAAY,IAGZthT,EAAU,GACVqhT,EAAW,GACXC,EAAW,GAGX39V,GADc,WAAdsyC,EACQ,KAAOtiD,EAAI,IAAMC,EAAI,MAAQD,EAAI,IAAMC,EAAI,KAAOD,EAAIqsD,GAAW,IAAMpsD,EAAI,KAAOD,EAAIqsD,GAAW,KAAOpsD,EAAI,IAC9G,OAASD,EAAIqsD,GAAW,KAAOpsD,GAAK+I,EAAS,IAAM,GAAK,OAAShJ,EAAI0tW,GAAY,KAAOztW,GAAK+I,EAAS,IAAM,EAAI,GAChH,OAAShJ,EAAIqsD,GAAW,KAAOpsD,GAAK+I,EAAS,IAAM,EAAI,IAAM,OAAShJ,EAAIqsD,GAAW,KAAOpsD,GAAK+I,EAAS,KAC5G,OAAShJ,EAAIqsD,GAAW,KAAOpsD,GAAK+I,EAAS,KAAO,KAAOhJ,EAAI2tW,GAAY,KAAO1tW,EAAI+I,GAAU,IAC9FhJ,EAAI,KAAOC,EAAI+I,GAEF,QAAds5C,EACG,KAAOtiD,EAAI,IAAMC,EAAI,MAAQD,EAAI,IAAMC,EAAI,KAAOD,EAAIqsD,GAAW,IAAMpsD,EAAI,KAAOD,EAAIqsD,GAAW,KAAOpsD,EAAI,IAC9G,OAASD,EAAIqsD,GAAW,KAAOpsD,EAAI+I,EAAS,IAAM,QAAehJ,EAAI0tW,GAAY,KAAOztW,GAAK+I,EAAS,KACxG,OAAShJ,EAAIqsD,GAAW,KAAOpsD,GAAK+I,EAAS,KAAO,OAAShJ,EAAIqsD,GAAW,KAAOpsD,GAAK+I,EAAS,KACjG,MAAQhJ,EAAIqsD,GAAW,KAAOpsD,GAAK+I,EAAS,KAAO,KAAOhJ,EAAIqsD,GAAW,KAAOpsD,EAAI+I,GAAU,IAAMhJ,EAAI,KACrGC,EAAI+I,GAGH,KAAOhJ,EAAI,IAAMC,EAAI,MAAQD,EAAI,IAAMC,EAAI,KAAOD,EAAIqsD,GAAW,IAAMpsD,EAAI,KAAOD,EAAIqsD,GAAW,KAAOpsD,EAAI,IAC9G,OAASD,EAAI0tW,GAAY,KAAOztW,EAAI,IACtC,OAASD,EAAIqsD,GAAW,KAAOpsD,EAAI,IAAM,OAASD,EAAIqsD,GAAW,KAAOpsD,GAAK+I,EAAS,KACtF,MAAQhJ,EAAIqsD,GAAW,KAAOpsD,GAAK+I,EAAS,KAAO,KAAOhJ,EAAI2tW,GAAY,KAAO1tW,EAAI+I,GAAU,IAAMhJ,EACrG,KAAOC,EAAI+I,GAI3B,OAAOgH,GAOXy8V,EAAgBn+W,UAAU4wV,eAAiB,SAAUl/U,EAAGC,EAAG+I,EAAQC,EAAO8kW,EAAQC,GAC9E/6W,KAAKu6W,cAAgBv6W,KAAK6wB,MAAMhD,SAASw+C,aACrC/oE,GAAMy3W,EACNznC,YAAa,QAAUwnC,EAAS,MAEpC96W,KAAKu6W,cAAc54W,YAAY3B,KAAK6wB,MAAMhD,SAAS4rF,cAC/Cn2G,GAAMw3W,EACN/tW,EAAKA,EACLC,EAAKA,EACLgJ,MAASA,EACTD,OAAUA,EACV6nB,KAAQ,QACR2G,eAAgB,EAAGzG,OAAU,WAQrC07U,EAAgBn+W,UAAUm/W,oBAAsB,SAAUQ,EAAat0U,EAAWvwB,EAAM4G,GACpF,IAAIsvT,EAAgBrsU,KAAK6wB,MAAMhD,SAASsI,SAAS,IAAIC,GAAWp2B,KAAK6wB,MAAM7vB,QAAQsC,GAAKojC,EAAY,8BAAgCs0U,EAAa,cAAe7kW,EAAK4sT,iBAAiBi4C,GAAa12U,OAAOtuB,MAAOG,EAAK4sT,iBAAiBi4C,GAAa12U,OAAO9N,OAASx2B,KAAK6wB,MAAMwF,WAAWnH,SAAU,EAAG,GAAInS,IAC3SsvT,EAAc7oU,aAAa,QAAS,wBACpCxD,KAAKu6W,cAAc54W,YAAY0qU,IAOnCmtC,EAAgBn+W,UAAUg/W,wBAA0B,SAAUlkW,EAAMsW,EAAM23Q,EAAWzjQ,GACjF,IAAI/H,EAMJ,OALAA,GACIC,QAAQ,EAAOpB,KAAMgoS,GAAsBtpT,KAAMA,EACjDsW,KAAMA,EAAM23Q,UAAWA,EAAW/0O,UAAW1uB,GAEjD3gC,KAAK6wB,MAAMrK,QAAQi5S,GAAsB7mS,GAClCA,GAMX4gV,EAAgBn+W,UAAUkkC,cAAgB,WACtC,MAAO,mBAMXi6U,EAAgBn+W,UAAUiX,QAAU,aAG7BknW,KC/aPyB,GAAgC,WAKhC,SAASA,KA8IT,OAtIAA,EAAe5/W,UAAU+gV,eAAiB,SAAU91I,EAAQz4K,GACxD,IAAIqtV,EAAcrtV,EAASw+C,aACvB/oE,GAAI,aAAegjM,EAAOnwL,KAAKshB,KAC/BpqB,UAAW,cAAgBi5L,EAAOhxK,WAAagxK,EAAOvwL,OAAS,KAC3D,eAAiBuwL,EAAOhxK,WAAa,KAAO,KAAO,MAEvD6lV,EAAgBttV,EAASw+C,aACzB/oE,GAAI,sBAAwBgjM,EAAOnwL,KAAKshB,OAExC2jV,EAAavtV,EAASw+C,aACtB/oE,GAAI,mBAAqBgjM,EAAOnwL,KAAKshB,KACrCpqB,UAAW,mBASf,OAPArN,KAAKqwB,SAASi2K,EAAQz4K,EAAUstV,GAChCn7W,KAAKswB,MAAMg2K,EAAQz4K,EAAUutV,GAC7Bp7W,KAAKq7W,aAAa/0K,EAAQz4K,EAAUutV,GACpCp7W,KAAKs7W,OAAOh1K,EAAQz4K,EAAUutV,GAC9Bp7W,KAAKu7W,UAAUj1K,EAAQz4K,EAAUutV,GACjCF,EAAYv5W,YAAYw5W,GACxBD,EAAYv5W,YAAYy5W,GACjBF,GAMXD,EAAe5/W,UAAUg1B,SAAW,SAAUi2K,EAAQz4K,EAAUvtB,GAC5D,IAAIoE,EAAQ4hM,EAAOk1K,oBACfC,EAAc5tV,EAAS8V,cAAc,IAAIugS,GAAW,qBAAuB59H,EAAOnwL,KAAKshB,KAAM/yB,EAAM2rB,UAAYra,MAAO,EAAGwgB,MAAO9xB,EAAM2rB,UAAY,EAAG,IAAI6F,GAAK,EAAG,EAAGowK,EAAOtwL,MAAOswL,EAAOvwL,QAAS,EAAG,IACzMzV,EAAOqB,YAAY85W,IAMvBR,EAAe5/W,UAAUigX,OAAS,SAAUh1K,EAAQz4K,EAAUvtB,GAC1D,IAAIoE,EAAQ4hM,EAAOk1K,oBACfzlR,EAAS,IAAI3/D,GAAW,uBAAyBkwK,EAAOnwL,KAAKshB,KAAM/yB,EAAM8rB,MAAO,EAAG9rB,EAAM8rB,MAAO,EAAG,GAAI,IAC3GxwB,KAAK07W,aAAe7tV,EAASsI,SAAS4/D,GACtCA,EAAOzyF,GAAK,wBAA0BgjM,EAAOnwL,KAAKshB,KAClDz3B,KAAK27W,cAAgB9tV,EAASsI,SAAS4/D,GACvC/1F,KAAK47W,kBAAkB57W,KAAK67W,WAAY77W,KAAK87W,eAAgBx1K,EAAOvwL,QACpEzV,EAAOqB,YAAY3B,KAAK07W,cACxBp7W,EAAOqB,YAAY3B,KAAK27W,gBAQ5BV,EAAe5/W,UAAUugX,kBAAoB,SAAUC,EAAYC,EAAgB/lW,GAC/E,IACIgmW,EAAgB,MAASF,EAAaG,EAAoB,GAAK,IAAOjmW,EAAS,EAAK,OACnF8lW,EAAaG,EAAmB,GAAK,UAAyBH,EAAaG,EAAmB,GAAK,OACpGC,EAAiB,MAASJ,EAAaC,EAAiBE,EAAoB,IAAO,IAAOjmW,EAAS,EACjG,OAAc8lW,EAAaC,EAAiBE,EAAmB,GAAK,YAA2BH,EACjGC,EAAiBE,EAAmB,GAAK,SAC7Ch8W,KAAK07W,aAAal4W,aAAa,IAAKu4W,GACpC/7W,KAAK27W,cAAcn4W,aAAa,IAAKy4W,IAQzChB,EAAe5/W,UAAUi1B,MAAQ,SAAUg2K,EAAQz4K,EAAUvtB,GACzDgmM,EAAOznK,OAAS7+B,KAAK67W,WACrB,IAAIn3W,EAAQ4hM,EAAOk1K,oBACnBx7W,KAAK4oJ,OAAS/6H,EAAS8V,cAAc,IAAIugS,GAAW,kBAAoB59H,EAAOnwL,KAAKshB,KAAM/yB,EAAM4rB,OAASta,MAAO,EAAGwgB,MAAO,IAAM,EAAG,IAAIN,GAAKl2B,KAAK67W,WAAY,EAAG77W,KAAK87W,eAAgBx1K,EAAOvwL,UAC5LzV,EAAOqB,YAAY3B,KAAK4oJ,SAQ5BqyN,EAAe5/W,UAAUggX,aAAe,SAAU/0K,EAAQz4K,EAAUvtB,GAChE,IAAIoE,EAAQ4hM,EAAOk1K,oBACfzlR,EAAS,IAAIouO,GAAa,wBAA0B79H,EAAOnwL,KAAKshB,KAAM/yB,EAAMwc,QAAUlL,MAAO,EAAGwgB,MAAO9xB,EAAMwc,QAAU,EAAGlhB,KAAK67W,WAAYv1K,EAAOvwL,OAAS,EAAG,GAO9J4uR,EAAa92Q,EAAS+qF,aAC1B+rL,EAAW3iS,UAPW,4hBAQtB,IAAIk6W,EAAcruV,EAASw+C,aACvB/oE,GAAIgjM,EAAOnwL,KAAKshB,KAAO,kBAE3BykV,EAAYl6W,UAAY,wGAClBskM,EAAOnwL,KAAKshB,KAAO,iHACQ6uK,EAAOnwL,KAAKshB,KAAO,WACpDz3B,KAAKm8W,cAAgBtuV,EAAS6V,WAAWqyD,GACzCA,EAAOzyF,GAAK,yBAA2BgjM,EAAOnwL,KAAKshB,KACnDs+D,EAAO1nE,GAAKruB,KAAK67W,WAAa77W,KAAK87W,eACnC97W,KAAKo8W,eAAiBvuV,EAAS6V,WAAWqyD,GAC1Cz1F,EAAOqB,YAAYgjS,GACnBrkS,EAAOqB,YAAY3B,KAAKm8W,eACxB77W,EAAOqB,YAAY3B,KAAKo8W,gBACxB97W,EAAOqB,YAAYu6W,IAQvBjB,EAAe5/W,UAAUkgX,UAAY,SAAUj1K,EAAQz4K,EAAUvtB,GAC7D,IAAI+7W,EAAc,EACd52S,EAAa,EAIb/gE,EAAQ4hM,EAAOk1K,oBACfzlR,EAAS,IAAIouO,GAAa,yBAAgC79H,EAAOnwL,KAAKshB,KAAM/yB,EAAM+rB,MAAQza,MAAO,EAAGwgB,MAAO9xB,EAAM+rB,MAAQ,EAAG,EAAG,EAAG,GACtIzwB,KAAKs8W,WAAazuV,EAASw+C,aACvB/oE,GAAI,wBAA0BgjM,EAAOnwL,KAAKshB,KAC1CpqB,UAAW,cAAiBrN,KAAK67W,WAAa77W,KAAK87W,eAAiB,EAL1DS,GAKiEj2K,EAAOhxK,WAAa,GAAK,IAChG,KAAOgxK,EAAOhxK,WAAa,KAAO,KAAO,aAAegxK,EAAOhxK,WAAa,MAAQ,KAAO,MAEnG,IAAK,IAAIn5B,EAAI,EAAGA,GAAK,EAAGA,IACpB45F,EAAOzyF,GAAK,uBAAyBnH,EAAI,IAAMmqM,EAAOnwL,KAAKshB,KAC3Ds+D,EAAO1nE,GAAKguV,EACZtmR,EAAOznE,GAAKm3C,EACZzlE,KAAKs8W,WAAW36W,YAAYksB,EAAS6V,WAAWqyD,IAChDsmR,EAAoB,IAANlgX,EAAU,EAAKkgX,EAAc,EAC3C52S,EAAatpE,GAAK,EAAI,EAAI,EAE9BmE,EAAOqB,YAAY3B,KAAKs8W,aAErBrB,KC/JPuB,GAA2B,WAM3B,SAASA,EAAU/5W,EAAW0T,GAC1BnW,KAAKyC,UAAYA,EACjBzC,KAAK4D,YACL5D,KAAKy8W,eAAiB,IAAIxB,GAC1Bj7W,KAAKmW,KAAOA,EACZnW,KAAK08W,kBAAoB18W,KAAK28W,gBAAgBrhX,KAAK0E,MACnDA,KAAK48W,gBAAkB58W,KAAK68W,cAAcvhX,KAAK0E,MAC/CA,KAAK88W,gBAAkB,IACvB98W,KAAKyL,UAAYD,GAAQC,UACzBzL,KAAKinW,YAAcz7V,GAAQmb,KAAK8Q,KAoZpC,OA9YA+kV,EAAUnhX,UAAU0hX,WAAa,SAAUl8W,GACvC,IAAIiL,EACAI,EACAg1U,EACArgV,EAAE6F,KAAKnI,QAAQ,UAAY,GAE3BuN,GADAo1U,EAAWrgV,GACM89D,eAAe,GAAGvqB,QACnCloC,EAAQg1U,EAASviR,eAAe,GAAGtqB,UAGnCvoC,EAAQjL,EAAEuzC,QACVloC,EAAQrL,EAAEwzC,SAEd,IAAIkzB,EAAUh6C,GAAW,gBAAkBvtB,KAAKmW,KAAKshB,MAAM7rB,wBAC3D5L,KAAK+sU,OAASjhU,EAAQO,KAAKC,IAAIi7D,EAAQ/6D,KAAM,GAC7CxM,KAAKgtU,OAAS9gU,EAAQG,KAAKC,IAAIi7D,EAAQ76D,IAAK,IAMhD8vW,EAAUnhX,UAAUkpB,WAAa,SAAUvjB,GACvCuE,GAAanB,IAAIpD,EAASwK,GAAQ0+E,gBAAiBlqF,KAAKg9W,gBAAiBh9W,MACzEuF,GAAanB,IAAIpD,EAASwK,GAAQ2+E,eAAgBnqF,KAAK28W,gBAAiB38W,MACxEuF,GAAanB,IAAIpD,EAASwK,GAAQ4+E,cAAepqF,KAAK68W,cAAe78W,MACrEuF,GAAanB,IAAIpD,EAAS,aAAchB,KAAKi9W,iBAAkBj9W,MAC/DnE,OAAOa,iBAAiB,YAAasD,KAAK08W,mBAAmB,GAC7D7gX,OAAOa,iBAAiB,UAAWsD,KAAK48W,iBAAiB,IAM7DJ,EAAUnhX,UAAUmjH,aAAe,SAAUx9G,GACzCuE,GAAahB,OAAOvD,EAASwK,GAAQ0+E,gBAAiBlqF,KAAKg9W,iBAC3Dz3W,GAAahB,OAAOvD,EAASwK,GAAQ2+E,eAAgBnqF,KAAK28W,iBAC1Dp3W,GAAahB,OAAOvD,EAASwK,GAAQ4+E,cAAepqF,KAAK68W,eACzDt3W,GAAahB,OAAOvD,EAAS,aAAchB,KAAKi9W,kBAChDphX,OAAOe,oBAAoB,YAAaoD,KAAK08W,mBAAmB,GAChE7gX,OAAOe,oBAAoB,UAAWoD,KAAK48W,iBAAiB,IAMhEJ,EAAUnhX,UAAU2hX,gBAAkB,SAAUn8W,GAC5C,IAAIyC,EAAKzC,EAAEsG,OAAO7D,GACdZ,EAAO1C,KAAKy8W,eAOhB,GANAz8W,KAAK+8W,WAAWl8W,GAChBb,KAAKk9W,aAAel9W,KAAKi/E,QAAQ37E,EAAI,iBAAmBtD,KAAKi/E,QAAQ37E,EAAI,eACzEtD,KAAKm9W,cAAgBn9W,KAAKi/E,QAAQ37E,EAAI,kBAAoBtD,KAAKi/E,QAAQ37E,EAAI,gBAC3EtD,KAAKo9W,WAAap9W,KAAKs1B,WAAat1B,KAAKgtU,OAAShtU,KAAK+sU,OACvD/sU,KAAKq9W,cAAgB36W,EAAKo5W,eAC1B97W,KAAKs9W,cAAgB56W,EAAKm5W,WACtB77W,KAAKi/E,QAAQ37E,EAAI,mBACjBtD,KAAKu9W,aAAc,EACnBv9W,KAAKsxB,UAAU5sB,MAAM+0D,OAAS,wBAE7B,GAAIz5D,KAAKi/E,QAAQ37E,EAAI,sBAAuB,CAC7C,IAAI2/T,EAAWjjU,KAAKw9W,WAAWx9W,KAAKo9W,WAAYp9W,KAAKs9W,cAAe,GAChEt9W,KAAK88W,iBACL75C,EAAWjjU,KAAKy9W,SAASx6C,GAAYA,EAAWvgU,EAAKm5W,WACrD77W,KAAKgzU,iBAAiBtwU,EAAKm5W,WAAY54C,KAGvCvgU,EAAKm5W,WAAa77W,KAAKy9W,SAASx6C,GAAYA,EAAWvgU,EAAKm5W,WAC5D77W,KAAK09W,cAAch7W,EAAKm5W,WAAYn5W,EAAKo5W,gBACzC97W,KAAK29W,sBAAsBj7W,EAAKm5W,WAAYn5W,EAAKo5W,mBAS7DU,EAAUnhX,UAAU4jF,QAAU,SAAU37E,EAAIqM,GACxC,OAAOrM,EAAG/E,QAAQoR,IAAU,GAMhC6sW,EAAUnhX,UAAUoiX,SAAW,SAAUx6C,GAErC,OAAQA,EADW,GACgB,GAC/BA,EAAWjjU,KAAKy8W,eAAeX,eAFhB,GAEiD97W,KAAKgW,OAQ7EwmW,EAAUnhX,UAAUmiX,WAAa,SAAUI,EAASC,EAAQ7B,GACxD,IAAIwB,EAAa,IAAcx9W,KAAKgW,MAAuB,EAAfgmW,GAQ5C,OANIwB,EADAI,EAAUC,EACGA,GAAUA,EAASL,EAAaxB,EAAewB,EAAaxB,GAG5D6B,GAAUA,EAAS79W,KAAKy8W,eAAeX,eAAiB0B,EAAax9W,KAAKgW,MAAQgmW,EAC3FwB,EAAaxB,IASzBQ,EAAUnhX,UAAUsiX,sBAAwB,SAAU16C,EAAU66C,GAC5D,IAAI3nW,EAAOnW,KAAKmW,KAChBnW,KAAKipU,YAAa,EAClB,IAEI80C,EAAqB96C,EAAW66C,EAFjB,EACD,EAGlB99W,KAAK8+T,cAAgBmE,GAAYA,EADZ+4C,KACyC,EADzCA,IAC8D,KAAOh8W,KAAKs1B,WACzFnf,EAAKkd,KAAKtd,OAAS/V,KAAKgW,OAC9BhW,KAAKouE,YAAc0vS,GAAgBC,IAAuB/9W,KAAKgW,MAAQgmW,EAA6B,KAAOh8W,KAAKs1B,WAC1Gnf,EAAKkd,KAAKtd,OAAS/V,KAAKgW,OAC9BG,EAAK2oT,aAAe9+T,KAAK8+T,aACzB3oT,EAAKi4D,WAAapuE,KAAKouE,YAM3BouS,EAAUnhX,UAAUshX,gBAAkB,SAAU97W,GAC5C,IAAIsG,EAAStG,EAAEsG,OACXzE,EAAO1C,KAAKy8W,eAChBz8W,KAAK+8W,WAAWl8W,GAChBb,KAAKg+W,UAAU72W,GACfnH,KAAK0b,SAASvU,GACFnH,KAAKw7W,oBAAjB,IACIoC,EAAU59W,KAAKs1B,WAAat1B,KAAKgtU,OAAShtU,KAAK+sU,OACnD,GAAI/sU,KAAKu9W,YAAa,CAClBv9W,KAAKsxB,UAAU5sB,MAAM+0D,OAAS,mBAC9B,IAAIwpQ,EAAWvgU,EAAKm5W,YAAc+B,EAAU59W,KAAKo9W,YAC7CQ,GAAW,GAAKA,GAAW36C,EAAWvgU,EAAKo5W,iBAC3Cp5W,EAAKm5W,WAAa77W,KAAKy9W,SAASx6C,GAAYA,EAAWvgU,EAAKm5W,WAC5D77W,KAAK09W,cAAch7W,EAAKm5W,WAAYn5W,EAAKo5W,gBACzC97W,KAAKo9W,WAAaQ,EAClB59W,KAAK29W,sBAAsB16C,EAAUvgU,EAAKo5W,sBAGzC97W,KAAKk9W,cAAgBl9W,KAAKm9W,gBAC/Bn9W,KAAKi+W,YAAYp9W,IAOzB27W,EAAUnhX,UAAU4hX,iBAAmB,SAAUp8W,GAC7C,IAAI0mE,EAAUh6C,GAAW,gBAAkBvtB,KAAKmW,KAAKshB,MAAM7rB,wBAC3D5L,KAAK+sU,OAASlsU,EAAEuzC,QAAU/nC,KAAKC,IAAIi7D,EAAQ/6D,KAAM,GACjDxM,KAAKgtU,OAASnsU,EAAEwzC,QAAUhoC,KAAKC,IAAIi7D,EAAQ76D,IAAK,GAChD,IAKIk8V,EALA3vF,EAAS,GACTv2Q,EAAO1C,KAAKy8W,eACZtmW,EAAOnW,KAAKmW,KACZqf,EAAkC,YAArBx1B,KAAKinW,aAA8BjnW,KAAKyL,UACrB5K,EAAE48H,WAAa,IAAO,EAAI,GAAK,GAA7D58H,EAAQ,OAAI,EAAI,EAAI,GAAK,GAE/B+nW,EAAav8V,KAAKC,IAAID,KAAKC,IAAI,EAAIwtB,GAAO3jB,EAAKi4D,WAAY,EAAG,GAAI,GAAM,IAAO54C,EAAY,KACzE,IAEdyjP,GADAA,EAA8B,eAArB9iQ,EAAKijB,YAA+Bp5B,KAAK+sU,OAAS52T,EAAKkd,KAAKrd,MAAQ,EAAKhW,KAAKgtU,OAAS72T,EAAKkd,KAAKtd,QACxF,EAAI,EAAIkjQ,EAAS,EAAI,EAAIA,EAC3Cj5Q,KAAKouE,WAA6B,IAAfw6R,EAAoB,EAAI9uU,GAAO,EAAI8uU,EAAY,EAAG,GACrE5oW,KAAK8+T,aAA+B,IAAf8pC,EAAoB,EAAIzyV,EAAK2oT,cAAiB3oT,EAAKi4D,WAAapuE,KAAKouE,YAAc6qM,GAE5Gv2Q,EAAKm5W,WAAa77W,KAAKy9W,SAASz9W,KAAK8+T,aAAe9+T,KAAKgW,OAAShW,KAAK8+T,aAAe9+T,KAAKgW,MAAQtT,EAAKm5W,WACxG77W,KAAKipU,YAAa,EAClBjpU,KAAK09W,cAAch7W,EAAKm5W,WAAYn5W,EAAKo5W,gBACzC3lW,EAAKi4D,WAAapuE,KAAKouE,WACvBj4D,EAAK2oT,aAAe9+T,KAAK8+T,cAM7B09C,EAAUnhX,UAAUwhX,cAAgB,SAAUh8W,GAG1Cb,KAAK6+B,OAAS7+B,KAAKy8W,eAAeZ,WAClC,IAAIkC,EAAqB/9W,KAAK6+B,OAAS7+B,KAAKy8W,eAAeX,eAHxC,EACD,GAId97W,KAAKk9W,cAAgBl9W,KAAKm9W,iBAC1Bn9W,KAAKmW,KAAKi4D,WAAc2vS,GAAsB/9W,KAAKgW,MAAQ,GAAMhW,KAAK6+B,OAFrDm9U,KAEiF,EAAK,EAAIh8W,KAAKouE,YAEpHpuE,KAAKu9W,aAAc,EACnBv9W,KAAKk9W,cAAe,EACpBl9W,KAAKm9W,eAAgB,GAMzBX,EAAUnhX,UAAU0wG,OAAS,WAOzB,OANA/rG,KAAKk+W,cACLl+W,KAAKmb,WACLnb,KAAKm+W,kBDlOb,SAAgCC,EAAWvwV,GACvC,IAAIwF,EAAO+qV,EAAUjoW,KAAKkd,KACtBgrV,EAAkD,eAA/BD,EAAUjoW,KAAKijB,YACtCglV,EAAU9sV,UAAYzD,EAASmS,WAC3B18B,GAAI,gBAAkB86W,EAAUjoW,KAAKshB,KACrCzhB,MAAOooW,EAAU9oV,WAAa8oV,EAAUroW,OAASqoW,EAAUpoW,MAC3DD,OAAQqoW,EAAU9oV,WAAa8oV,EAAUpoW,MAAQooW,EAAUroW,OAC3DrR,MAAO,6BAA+B05W,EAAUjoW,KAAKsf,iBAAmB4oV,GAAoB,GAAK,GAAKhrV,EAAKrmB,GAAK,cACzGoxW,EAAUjoW,KAAKsf,kBAAoB4oV,EAAmB,GAAK,GAAKhrV,EAAKtmB,GAAMqxW,EAAU9oV,WAAa8oV,EAAUroW,OAAS,IACtH,oBAEVqoW,EAAUx6W,SAASY,KAAK45W,EAAU9sV,WCwN9BgtV,CAAgBt+W,KAAMA,KAAKyC,UAAUorB,UACrC7tB,KAAKukB,WAAWvkB,KAAKsxB,WACrBtxB,KAAKsxB,UAAU3vB,YAAY3B,KAAKy8W,eAAergC,eAAep8U,KAAMA,KAAKyC,UAAUorB,WAC5E7tB,KAAKsxB,WAKhBkrV,EAAUnhX,UAAU8f,SAAW,WAC3Bnb,KAAKw7W,oBAAsBrrV,GAAuBnwB,KAAKyC,UAAUyY,QAKrEshW,EAAUnhX,UAAU8iX,gBAAkB,WAC9B39W,SAASosB,eAAe,gBAAkB5sB,KAAKmW,KAAKshB,OACpDlzB,EAAO/D,SAASosB,eAAe,gBAAkB5sB,KAAKmW,KAAKshB,QAOnE+kV,EAAUnhX,UAAU2iX,UAAY,SAAU72W,GACtC,IAAI7D,EAAK6D,EAAO7D,GAChBtD,KAAKsxB,UAAU5sB,MAAM+0D,OAASn2D,EAAG/E,QAAQ,oBAAsB,GAAK+E,EAAG/E,QAAQ,gBAAkB,EAC7F,eAAkB+E,EAAG/E,QAAQ,YAAc,GAAK+E,EAAG/E,QAAQ,WAAa,EAAKyB,KAAKs1B,WAAa,YAC/F,YAAc,QAMtBknV,EAAUnhX,UAAUqgB,SAAW,SAAUvU,GACrC,IAAI7D,EAAK6D,EAAO7D,GACZi7W,EAAcj7W,EAAG/E,QAAQ,iBAAmB,GAAK+E,EAAG/E,QAAQ,gBAAkB,EAC9EigX,EAAel7W,EAAG/E,QAAQ,kBAAoB,GAAK+E,EAAG/E,QAAQ,iBAAmB,EACjFmG,EAAQ1E,KAAKw7W,oBACbE,EAAe17W,KAAKy8W,eAAef,aACnCC,EAAgB37W,KAAKy8W,eAAed,cACpCQ,EAAgBn8W,KAAKy8W,eAAeN,cACpCC,EAAiBp8W,KAAKy8W,eAAeL,eACrCqC,EAASz+W,KAAK0+W,cAAcv3W,EAAQu0W,GACxCS,EAAcz3W,MAAMk5B,KAAO2gV,GAAeE,EAAS/5W,EAAM6rB,YAAc7rB,EAAMwc,OAC7Ek7V,EAAe13W,MAAMk5B,KAAO4gV,GAAgBC,EAAS/5W,EAAM6rB,YAAc7rB,EAAMwc,OAC/Ei7V,EAAcz3W,MAAMo5B,OAASygV,GAAeE,EAAS/5W,EAAM6rB,YAAc7rB,EAAMwc,OAC/Ek7V,EAAe13W,MAAMo5B,OAAS0gV,GAAgBC,EAAS/5W,EAAM6rB,YAAc7rB,EAAMwc,OACpD,iBAAzBlhB,KAAKyC,UAAUyY,QACfwgW,EAAah3W,MAAMk5B,KAAO2gV,GAAeE,EAAS/5W,EAAMgsB,WAAahsB,EAAM8rB,MAC3EkrV,EAAah3W,MAAMo5B,OAASygV,GAAeE,EAAS/5W,EAAMgsB,WAAahsB,EAAM8rB,MAC7EmrV,EAAcj3W,MAAMk5B,KAAO4gV,GAAgBC,EAAS/5W,EAAMgsB,WAAahsB,EAAM8rB,MAC7EmrV,EAAcj3W,MAAMo5B,OAAS0gV,GAAgBC,EAAS/5W,EAAMgsB,WAAahsB,EAAM8rB,MAC/E2rV,EAAcz3W,MAAMo5B,OAASygV,GAAeE,EAAS/5W,EAAM6rB,YAAc7rB,EAAMwc,OAC/Ek7V,EAAe13W,MAAMo5B,OAAS0gV,GAAgBC,EAAS/5W,EAAM6rB,YAAc7rB,EAAMwc,SAQzFs7V,EAAUnhX,UAAUqjX,cAAgB,SAAUv3W,EAAQnD,GAClD,OAAQmD,EAAO7D,GAAGpG,MAAM,KAAK,KAAO8G,EAAIV,GAAGpG,MAAM,KAAK,IAM1Ds/W,EAAUnhX,UAAU4iX,YAAc,SAAUp9W,GAK7Bb,KAAKy8W,eAJhB,IAAIqB,EAMAD,EAAS79W,KAAKs9W,cACdM,EAAU59W,KAAKs1B,WAAat1B,KAAKgtU,OAAShtU,KAAK+sU,OAC/CtvP,EAAOpxE,KAAKE,IAAIvM,KAAKo9W,WAAaQ,GACtC,GAAI59W,KAAKk9W,cAAgBU,GAAW,EAAG,CACnC,IAAI36C,EAAW46C,GAAUD,EAAU59W,KAAKo9W,WAAa3/R,GAAQA,GAC7DqgS,EAAe76C,EAVA,GAU2B,EAAIjjU,KAAKq9W,eAAiBO,EAAU59W,KAAKo9W,YAAc3/R,EAAOA,GACpGz9E,KAAKq9W,cACTp6C,EAAWA,EAZI,GAYuB,EAAIA,EAAW46C,EACjDC,GATY9B,IASqB4B,EAAU36C,EAAW66C,IACtD99W,KAAKy8W,eAAeZ,WAAa77W,KAAKs9W,cAAgBr6C,EACtDjjU,KAAKy8W,eAAeX,eAAiB97W,KAAKq9W,cAAgBS,EAC1D99W,KAAKo9W,WAAaQ,EAClB59W,KAAK09W,cAAcz6C,EAAU66C,GAC7B99W,KAAK29W,sBAAsB16C,EAAU66C,SAGpC99W,KAAKm9W,gBACVW,EAAeF,GAlBC5B,GAkB0Bh8W,KAAKy8W,eAAeZ,YAAc+B,GAAW59W,KAAKgW,MAtB7E,EAuBX4nW,EAAU59W,KAAKy8W,eAAeZ,WAAa77W,KAAKq9W,cACpDr9W,KAAKy8W,eAAeX,eAAiB97W,KAAKq9W,cAAgBS,EAC1D99W,KAAKo9W,WAAaQ,EAClB59W,KAAK09W,cAAc19W,KAAK6+B,OAAQi/U,GAChC99W,KAAK29W,sBAAsB39W,KAAK6+B,OAAQi/U,KAQhDtB,EAAUnhX,UAAUqiX,cAAgB,SAAUz6C,EAAU66C,GACpD,IACIp7W,EAAO1C,KAAKy8W,eAIhB/5W,EAAKkmJ,OAAOplJ,aAAa,IAAKy/T,EAAS/1T,YACvCxK,EAAKkmJ,OAAOplJ,aAAa,QAASs6W,EAAa5wW,YAC/CxK,EAAKy5W,cAAc34W,aAAa,KAAMy/T,EAAS/1T,YAC/CxK,EAAK05W,eAAe54W,aAAa,MAAOy/T,EAAW66C,GAAc5wW,YACjExK,EAAKk5W,kBAAkB34C,EAAU66C,EAAc99W,KAAK+V,QACpDrT,EAAK45W,WAAW94W,aAAa,YAAa,cAAgBy/T,EAAW66C,EAAe,EANtEvB,GAM4Ev8W,KAAKs1B,WAAa,GAAK,IAC7G,KAAOt1B,KAAKs1B,WAAa,KAAO,KAAO,aAAet1B,KAAKs1B,WAAa,MAAQ,KAAO,MAK/FknV,EAAUnhX,UAAU6iX,YAAc,WAC9B,IAII/nW,EAAOnW,KAAKmW,KAChBnW,KAAKs1B,WAAkC,aAArBnf,EAAKijB,YACvB,IAAI0kV,EAAe3nW,EAAKi4D,YAAcpuE,KAAKs1B,WAAanf,EAAKkd,KAAKtd,OAASI,EAAKkd,KAAKrd,OACrF8nW,EAAeA,EAJK9B,GAI0B8B,EAJ1B9B,GAKpBh8W,KAAK+iH,QAAU5sG,EAAKkd,KAAKtmB,EACzB/M,KAAK8iH,QAAU3sG,EAAKkd,KAAKrmB,EACzBhN,KAAKgW,MAAQhW,KAAKs1B,WAAanf,EAAKkd,KAAKtd,OAASI,EAAKkd,KAAKrd,MAC5DhW,KAAK+V,OAAS,GACd,IAAIktT,EAAW9sT,EAAK2oT,cAAgB9+T,KAAKs1B,WAAanf,EAAKkd,KAAKtd,OAAS/V,KAAKgW,OAC9EhW,KAAKy8W,eAAeZ,WAAa54C,EAbd,EAawCA,EAbxC,EAcnBjjU,KAAKy8W,eAAeX,eAAmBgC,EAAe99W,KAAKy8W,eAAeZ,WAAc77W,KAAKgW,SACvF8nW,EAAe99W,KAAKgW,MAAQhW,KAAKy8W,eAAeZ,WAfnC,GAsBvBW,EAAUnhX,UAAU+jV,SAAW,SAAUjpU,EAAM1T,GAC3C0T,EAAK0f,iBAAmB,IAAI2mV,EAAU/5W,EAAW0T,IAOrDqmW,EAAUnhX,UAAU23U,iBAAmB,SAAUzoM,EAAU5pH,GACvD,IACIsiT,EADAljU,EAAQC,KAERgW,EAAQhW,KAAKy8W,eAAeX,eAChC,IAAIxjV,OAAcC,QAAQp3B,EAAc,QACpC+J,SAAUlL,KAAK88W,gBACftkV,SAAU,SAAUv4B,GAChBgjU,EAAWhrS,GAAOh4B,EAAKw4B,UAAW,EAAG9X,EAAU4pH,EAAUtqI,EAAKiL,UAAYq/H,EAC1ExqI,EAAM29W,cAAcz6C,EAAUjtT,GAC9BjW,EAAM49W,sBAAsB16C,EAAUjtT,IAE1C6I,IAAK,SAAU+D,GACX7iB,EAAM08W,eAAeZ,WAAal7V,EAClC5gB,EAAM8+B,OAASle,EACf5gB,EAAM29W,cAAc/8V,EAAS3K,GAC7BjW,EAAM49W,sBAAsBh9V,EAAS3K,OAOjDwmW,EAAUnhX,UAAUiX,QAAU,WAC1B,IAAIvS,EAAQC,KACRA,KAAKynE,KACLznE,KAAKynE,KAAK7vC,IAAI,SAAUzhB,GACpBA,EAAK0f,iBAAiBvjB,aAI1BtS,KAAK4D,SAASg0B,IAAI,SAAU52B,GACxBjB,EAAMy+G,aAAax9G,GACnBuD,EAAOvD,EAAQ4b,cAEnB5c,KAAK4D,cAMb44W,EAAUnhX,UAAUkkC,cAAgB,WAChC,MAAO,aAEJi9U,KrS5aPlyR,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAe5D+hV,GAAgD,SAAUxzR,GAE1D,SAASwzR,IACL,OAAkB,OAAXxzR,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KA0B/D,OA5BAsqF,GAAUq0R,EAAgCxzR,GAI1CN,IACI3jF,EAAS,OACVy3W,EAA+BtjX,UAAW,eAAW,GACxDwvF,IACI3jF,EAAS,MACVy3W,EAA+BtjX,UAAW,SAAK,GAClDwvF,IACI3jF,EAAS,MACVy3W,EAA+BtjX,UAAW,SAAK,GAClDwvF,IACI3jF,EAAS,UACVy3W,EAA+BtjX,UAAW,uBAAmB,GAChEwvF,IACI3jF,EAAS,UACVy3W,EAA+BtjX,UAAW,cAAU,GACvDwvF,IACI3jF,EAAS,WACVy3W,EAA+BtjX,UAAW,yBAAqB,GAClEwvF,IACI3jF,EAAS,WACVy3W,EAA+BtjX,UAAW,2BAAuB,GACpEwvF,IACI3jF,EAAS,OACVy3W,EAA+BtjX,UAAW,mBAAe,GACrDsjX,GACT3/S,IAKE4/S,GAA+C,SAAUzzR,GAEzD,SAASyzR,IACL,OAAkB,OAAXzzR,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAgC/D,OAlCAsqF,GAAUs0R,EAA+BzzR,GAIzCN,IACI3jF,GAAS,IACV03W,EAA8BvjX,UAAW,eAAW,GACvDwvF,IACI3jF,EAAS,OACV03W,EAA8BvjX,UAAW,YAAQ,GACpDwvF,IACI3jF,EAAS,gBACV03W,EAA8BvjX,UAAW,YAAQ,GACpDwvF,IACI3jF,EAAS,WACV03W,EAA8BvjX,UAAW,gBAAY,GACxDwvF,IACI3jF,EAAS,IACV03W,EAA8BvjX,UAAW,UAAM,GAClDwvF,IACI3jF,EAAS,IACV03W,EAA8BvjX,UAAW,UAAM,GAClDwvF,IACI9iF,GAAUiO,MAAO,KAAMwgB,MAAO,MAAQomS,KACvCgiD,EAA8BvjX,UAAW,cAAU,GACtDwvF,IACI9iF,GAAU+kB,KAAM,OAAQ0J,MAAO,MAAQmmS,KACxCiiD,EAA8BvjX,UAAW,YAAQ,GACpDwvF,IACI9iF,KAAY+9C,KACb84T,EAA8BvjX,UAAW,sBAAkB,GAC9DwvF,IACI3jF,EAAS,OACV03W,EAA8BvjX,UAAW,gBAAY,GACjDujX,GACT5/S,IAKE6/S,GAA2B,WAY3B,OAXA,WACI7+W,KAAKw3B,SAAU,EACfx3B,KAAK2lS,eAAiB,KAEtB3lS,KAAKksD,OAAS,KAEdlsD,KAAK8xW,YAAc,KAEnB9xW,KAAK8+W,cAAe,EACpB9+W,KAAK2tU,QAAU,SAQnBoxC,GAAoC,SAAU5zR,GAE9C,SAAS4zR,IAyBL,IAAIh/W,EAAmB,OAAXorF,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAWhE,OATAD,EAAM43B,UAEN53B,EAAMi/W,YAAc,EAEpBj/W,EAAM8sU,cAAe,EAErB9sU,EAAM20B,SAAW,IAAIwB,GAAK,EAAG,EAAG,EAAG,GAEnCn2B,EAAMq6L,SAAW,SACVr6L,EA2TX,OAhWAuqF,GAAUy0R,EAAoB5zR,GAwC9B4zR,EAAmB1jX,UAAUm1U,mBAAqB,SAAUyuC,EAAclzQ,GACtE,IAAIhsG,EAAQC,KACZ,GAAIvC,EAAkBuC,KAAK07D,OACvB17D,KAAK2wU,oBAAqB5xU,OAAQiB,KAAKujE,WAAYzkD,MAAO9e,KAAKujE,WAAW9mE,QAAUwiX,EAAclzQ,OADtG,CAIkB/rG,KAAKywU,WAAW9D,QAAQ3sU,KAAKywU,WAAWC,gBAAgBhgL,iBAC9D4iC,KAAK,SAAUzyL,GAAK,OAAOd,EAAM4wU,mBAAmB9vU,EAAGo+W,EAAclzQ,OAMrFgzQ,EAAmB1jX,UAAUs1U,mBAAqB,SAAU9vU,EAAGo+W,EAAclzQ,GACzE,IAAInzE,GACAnB,KAAM8nS,GAAc3gT,OAAQ5e,KAAMxD,KAAMqE,EAAE9B,QAE9CkgX,EAAaz4V,QAAQ+4S,GAAc3mS,GACnC54B,KAAKk/W,WAA0B,KAAbr+W,EAAE9B,OAAgB8B,EAAE9B,UACtCiB,KAAKigD,UAAUjgD,KAAKk/W,WAAYD,KAC1BA,EAAaE,eAAiBF,EAAah+U,cAAcxkC,QAAUsvG,GACrEkzQ,EAAapuC,gBAIrBkuC,EAAmB1jX,UAAU4kD,UAAY,SAAUlhD,EAAQkgX,GACvD,IAAIxiX,EAAS6B,OAAOhB,KAAKyB,GAAQtC,OAEjC,GADAuD,KAAKg/W,YAAc,EACJ,IAAXviX,EACA,OAAO,KAEXuD,KAAKo/W,gBAAgBrgX,GACrBiB,KAAK23B,UACL33B,KAAKq/W,UAAY,EAIjB,IAAK,IAHDvrV,EACAg8D,EAAS9vF,KAAKu/U,SAAS9iV,OAASuD,KAAKu/U,SAAW1wT,GAAeowV,EAAa/jW,OAC5EokW,EAAYjhV,GAAer+B,KAAKu/W,QAASv/W,KAAKg/W,aACzC7iX,EAAI,EAAGA,EAAIM,EAAQN,IAAK,EAC7B23B,EAAQ9zB,KAAKw/W,UAAUzgX,EAAQ5C,EAAG2zF,IACb9iF,EAChBhN,KAAKy/W,OAAO3rV,EAAOwrV,EAAWnjX,KAC3BsB,EAAkBq2B,EAAM9mB,KACxB8mB,EAAM0D,SAAU,GAEpBx3B,KAAK0/W,WAAW5rV,EAAOg8D,IAI/B,GADA9vF,KAAK2/W,YAAc3/W,KAAKu/W,QACpBv/W,KAAKq/W,UAAY,EAAG,CACpB,IAAIO,EAAY,IAAIf,GACpBe,EAAU7yW,EAAI,SACd6yW,EAAU5yW,EAAIhN,KAAKq/W,UACnBO,EAAUnzV,KAAOmzV,EAAUv8C,aAAeu8C,EAAU7yW,EAAI,KAAO/M,KAAKq/W,UACpEr/W,KAAK0/W,WAAWE,EAAW9vR,KAMnCivR,EAAmB1jX,UAAUqkX,WAAa,SAAU5rV,EAAOg8D,GACvDh8D,EAAM7hB,MAAQjS,KAAK23B,OAAOl7B,OAC1Bq3B,EAAM0C,MAAQ1C,EAAM0C,OAASs5D,EAAOh8D,EAAM7hB,MAAQ69E,EAAOrzF,QACzDuD,KAAK23B,OAAOnzB,KAAKsvB,IAKrBirV,EAAmB1jX,UAAUokX,OAAS,SAAU3rV,EAAOwrV,EAAWrtW,GAC9D,IAAKxU,EAAkB6hX,GAAY,CAC/B,GAAuB,UAAnBt/W,KAAK6/W,WAAyBxzW,KAAKE,IAAIunB,EAAM9mB,IAAMsyW,EAEnD,OADAt/W,KAAKq/W,WAAahzW,KAAKE,IAAIunB,EAAM9mB,IAC1B,EAEN,GAAuB,UAAnBhN,KAAK6/W,WAAyB5tW,GAASqtW,EAE5C,OADAt/W,KAAKq/W,WAAahzW,KAAKE,IAAIunB,EAAM9mB,IAC1B,EAGf,OAAO,GAKX+xW,EAAmB1jX,UAAU+jX,gBAAkB,SAAUrgX,GAErD,IAAK,IADDtC,EAAS6B,OAAOhB,KAAKyB,GAAQtC,OACxBN,EAAI,EAAGA,EAAIM,EAAQN,IACnBsB,EAAkBsB,EAAO5C,GAAG6D,KAAKmzB,UAClCnzB,KAAKg/W,aAAe3yW,KAAKE,IAAIxN,EAAO5C,GAAG6D,KAAKmzB,UAOxD4rV,EAAmB1jX,UAAUmkX,UAAY,SAAUhjX,EAAML,EAAG2zF,GACxD,IAAIh8D,EAAQ,IAAI+qV,GAMhB,OALA/qV,EAAM/mB,EAAIlQ,EAASmD,KAAKkvU,MAAO1yU,EAAKL,IACpC23B,EAAM9mB,EAAInQ,EAASmD,KAAKmzB,MAAO32B,EAAKL,IACpC23B,EAAM0C,MAAQ35B,EAASmD,KAAK+vU,kBAAmBvzU,EAAKL,IACpD23B,EAAMrH,KAAOqH,EAAMuvS,aAAexmU,EAASmD,KAAKihF,UAAUxpD,MAAQ,GAAIj7B,EAAKL,IAC3E6D,KAAK8/W,iBAAiBhsV,EAAO33B,EAAGK,EAAMszF,GAC/Bh8D,GAMXirV,EAAmB1jX,UAAUq3U,aAAe,SAAUusC,GAClD,IAAIc,EAAcd,EAAapxV,SAASw+C,aAAc/oE,GAAI27W,EAAaj+W,QAAQsC,GAAK,WAAatD,KAAKiS,QACtGjS,KAAKggX,aAAaf,EAAcc,GAChC,IAAIE,EACAhB,EAAaiB,6BAA+BlgX,KAAKihF,UAAUzpD,WAC3DyoV,EAAiBhB,EAAapxV,SAASw+C,aAAc/oE,GAAI27W,EAAaj+W,QAAQsC,GAAK,qBAAuBtD,KAAKiS,SAChGvN,MAAMC,WAChB3E,KAAK22C,UAAUlX,QAAUw/U,EAAavrC,eAA+B,QAAd1zU,KAAK0G,KAAkB,SAAW,UAC9F1G,KAAKmgX,gBAAgBlB,EAAcgB,IAErB,QAAdjgX,KAAK0G,OACL1G,KAAKogX,cAAcpgX,KAAKqgX,WAAYrgX,KAAK+2W,mBACzCkI,EAAaqB,gBAAgB5sC,cAAcurC,EAAcj/W,KAAK22C,UAAW32C,KAAM+/W,IAE/Ed,EAAasB,2BACbvgX,KAAKqgX,WAAWtzW,GAAKkyW,EAAauB,gBAClCxgX,KAAKqgX,WAAWrzW,GAAKiyW,EAAauB,gBAClCxgX,KAAKqgX,WAAWtqW,QAAWkpW,EAAauB,gBAAkBxgX,KAAKqgX,WAAWrzW,EAC1EhN,KAAKqgX,WAAWrqW,OAAUipW,EAAauB,gBAAkBxgX,KAAKqgX,WAAWtzW,IAMjFgyW,EAAmB1jX,UAAU2kX,aAAe,SAAUf,EAAcc,GAGhE,IAAK,IADDhqR,EADA0qR,EAAUxB,EAAaj+W,QAAQsC,GAAK,WAAatD,KAAKiS,MAAQ,UAEzD7T,EAAK,EAAGyE,EAAK7C,KAAK23B,OAAQv5B,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACrD,IAAI01B,EAAQjxB,EAAGzE,GACXw6B,GACAC,QAAQ,EAAOpB,KAAM6nS,GAAa1gT,OAAQ5e,KAAM8zB,MAAOA,EAAO8J,KAAM9J,EAAM0C,MAC1E8N,OAAQtkC,KAAKs6O,QAAQxmN,IAAW9d,MAAOhW,KAAKiwU,mBAAmB3rS,OAAOtuB,MAAOwgB,MAAOx2B,KAAKiwU,mBAAmB3rS,OAAO9N,QAC7GxgB,MAAOhW,KAAKskC,OAAOtuB,MAAOwgB,MAAOx2B,KAAKskC,OAAO9N,QAEvDyoV,EAAaz4V,QAAQ84S,GAAa1mS,GAClC9E,EAAM0C,MAAQoC,EAASgF,KACnB9J,EAAM0D,UACNu+D,EAAS,IAAI3/D,GAAWqqV,EAAU3sV,EAAM7hB,MAAO6hB,EAAM0C,MAAOoC,EAAS0L,OAAOtuB,OAAS,EAAG4iB,EAAS0L,OAAO9N,OAAS1C,EAAM0C,MAAO,EAAG,GAAI,IACrIyoV,EAAcloV,GAAiB/2B,KAAK0G,MAAQ,gBACxCg6W,YAAY5sV,EAAO9zB,KAAMi/W,EAAclpR,GAC3CgqR,EAAYp+W,YAAYs9W,EAAapxV,SAASsI,SAAS4/D,KAG/DkpR,EAAa0B,mBAAmBh/W,YAAYo+W,IAKhDhB,EAAmB1jX,UAAU8kX,gBAAkB,SAAUlB,EAAcgB,GACnEhB,EAAaiB,4BAA4BU,eAIzC,IAAK,IAHD5/W,EAAUG,EAAc,OACxBmC,GAAI27W,EAAaj+W,QAAQsC,GAAK,mCAEzBlF,EAAK,EAAGyE,EAAK7C,KAAK23B,OAAQv5B,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACrD,IAAI01B,EAAQjxB,EAAGzE,GACX01B,EAAM0D,SACNynV,EAAaiB,4BAA4BC,gBAAgBrsV,EAAO9zB,KAAKihF,UAAWg/R,EAAgBjgX,KAAK23B,OAAQ33B,KAAKiS,MAAOjR,GAGjG,OAA5BhB,KAAKihF,UAAUhyE,UAAqBjO,EAAQmkE,mBAC5C53C,GAAW0xV,EAAaj+W,QAAQsC,GAAK,sBAAsB3B,YAAYX,GAE3Ei+W,EAAa0B,mBAAmBh/W,YAAYs+W,IAMhDlB,EAAmB1jX,UAAU+kX,cAAgB,SAAUS,EAAYryT,GAC/DqyT,EAAW9zW,EAAIyhD,EAAMzhD,EAAI8zW,EAAW9zW,EAAIyhD,EAAMzhD,EAAI8zW,EAAW9zW,EAC7D8zW,EAAW7zW,EAAIwhD,EAAMxhD,EAAI6zW,EAAW7zW,EAAIwhD,EAAMxhD,EAAI6zW,EAAW7zW,EAC7D6zW,EAAW9qW,OAAUy4C,EAAMxhD,EAAIwhD,EAAMz4C,OAAU8qW,EAAW9qW,OAAUy4C,EAAMxhD,EAAIwhD,EAAMz4C,OAAU8qW,EAAW9qW,OACzG8qW,EAAW7qW,MAASw4C,EAAMzhD,EAAIyhD,EAAMx4C,MAAS6qW,EAAW7qW,MAASw4C,EAAMzhD,EAAIyhD,EAAMx4C,MAAS6qW,EAAW7qW,OAMzG+oW,EAAmB1jX,UAAUykX,iBAAmB,SAAUhsV,EAAO33B,EAAGK,EAAMszF,GACtE,IAAKryF,EAAkBq2B,EAAM9mB,GACzB,OAAO,KAGX,OADA8mB,EAAM0C,MAAQx2B,KAAKiwU,mBAAmBryS,MAAQ9J,EAAM0C,MAC5Cx2B,KAAKiwU,mBAAmBlyS,MAC5B,IAAK,OACDjK,EAAM9mB,EAAI,EACV8mB,EAAM0D,SAAU,EAChB,MACJ,IAAK,UACD,IAAI+yG,EAAW/tI,EAAKL,EAAI,GAAMK,EAAKL,EAAI,GAAG6D,KAAKmzB,QAAU,EAAK,EAC1DmV,EAAO9rC,EAAKL,EAAI,GAAMK,EAAKL,EAAI,GAAG6D,KAAKmzB,QAAU,EAAK,EAC1DW,EAAM9mB,GAAKX,KAAKE,IAAIg+H,GAAYl+H,KAAKE,IAAI+7B,IAAS,EAClDtoC,KAAKg/W,aAAelrV,EAAM9mB,EAC1B8mB,EAAM0D,SAAU,EAChB,MACJ,QACI1D,EAAM0D,SAAU,IAO5BunV,EAAmB1jX,UAAUi/O,QAAU,SAAUxmN,GAC7C,OAAOA,EAAM0C,QAAUx2B,KAAKiwU,mBAAmBryS,MAEnDitD,IACI3jF,EAAS,KACV63W,EAAmB1jX,UAAW,kBAAc,GAC/CwvF,IACI3jF,KACD63W,EAAmB1jX,UAAW,aAAS,GAC1CwvF,IACI3jF,EAAS,KACV63W,EAAmB1jX,UAAW,aAAS,GAC1CwvF,IACI3jF,EAAS,KACV63W,EAAmB1jX,UAAW,YAAQ,GACzCwvF,IACI3jF,EAAS,KACV63W,EAAmB1jX,UAAW,aAAS,GAC1CwvF,IACI3jF,GAAS,IACV63W,EAAmB1jX,UAAW,eAAW,GAC5CwvF,IACI9iF,GAAUyuB,MAAO,KAAMxgB,MAAO,GAAK4mT,KACpCmiD,EAAmB1jX,UAAW,cAAU,GAC3CwvF,IACI9iF,EAAQ,KAAMuwB,KACfymV,EAAmB1jX,UAAW,iBAAa,GAC9CwvF,IACI3jF,EAAS,eACV63W,EAAmB1jX,UAAW,mBAAe,GAChDwvF,IACI3jF,EAAS,KACV63W,EAAmB1jX,UAAW,yBAAqB,GACtDwvF,IACI3jF,EAAS,OACV63W,EAAmB1jX,UAAW,sBAAkB,GACnDwvF,IACI3jF,EAAS,OACV63W,EAAmB1jX,UAAW,eAAW,GAC5CwvF,IACI3jF,EAAS,UACV63W,EAAmB1jX,UAAW,iBAAa,GAC9CwvF,IACI9iF,KAAY62W,KACbG,EAAmB1jX,UAAW,iBAAa,GAC9CwvF,IACI3jF,OACD63W,EAAmB1jX,UAAW,gBAAY,GAC7CwvF,IACI3jF,EAAS,IACV63W,EAAmB1jX,UAAW,kBAAc,GAC/CwvF,IACI3jF,EAAS,MACV63W,EAAmB1jX,UAAW,gBAAY,GAC7CwvF,IACI3jF,EAAS,QACV63W,EAAmB1jX,UAAW,cAAU,GAC3CwvF,IACI3jF,EAAS,MACV63W,EAAmB1jX,UAAW,mBAAe,GAChDwvF,IACI3jF,EAAS,QACV63W,EAAmB1jX,UAAW,YAAQ,GACzCwvF,IACI3jF,GAAS,IACV63W,EAAmB1jX,UAAW,qBAAiB,GAClDwvF,IACI3jF,GAAS,IACV63W,EAAmB1jX,UAAW,eAAW,GAC5CwvF,IACI3jF,EAAS,QACV63W,EAAmB1jX,UAAW,qBAAiB,GAClDwvF,IACI3jF,GAAS,IACV63W,EAAmB1jX,UAAW,kBAAc,GAC/CwvF,IACI3jF,EAAS,OACV63W,EAAmB1jX,UAAW,oBAAgB,GACjDwvF,IACI9iF,GAAUg2B,KAAM,QAAUm/R,KAC3B6hD,EAAmB1jX,UAAW,0BAAsB,GACvDwvF,IACI3jF,EAAS,IACV63W,EAAmB1jX,UAAW,gBAAY,GAC7CwvF,IACI3jF,EAAS,QACV63W,EAAmB1jX,UAAW,aAAS,GAC1CwvF,IACI3jF,EAAS,QACV63W,EAAmB1jX,UAAW,cAAU,GAC3CwvF,IACI3jF,EAAS,QACV63W,EAAmB1jX,UAAW,iBAAa,GAC9CwvF,IACI3jF,EAAS,QACV63W,EAAmB1jX,UAAW,kBAAc,GAC/CwvF,IACI3jF,EAAS,WACV63W,EAAmB1jX,UAAW,mBAAe,GAChDwvF,IACI3jF,EAAS,IACV63W,EAAmB1jX,UAAW,eAAW,GACrC0jX,GACT//S,IsSpdE8hT,GAAkC,WAElC,SAASA,EAAiB7B,GACtBj/W,KAAKi/W,aAAeA,EA+LxB,OA7LA3gX,OAAOuJ,eAAei5W,EAAiBzlX,UAAW,UAK9CqM,IAAK,WACD,OAAO1H,KAAK+gX,YAA0D,QAA5C/gX,KAAKi/W,aAAah+U,cAAc,GAAGv6B,KACzD1G,KAAKi/W,aAAaqB,gBAAgB5sV,OAAS,OAMnDrsB,IAAK,SAAUrK,GACXgD,KAAK+gX,UAAY/jX,GAErB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAei5W,EAAiBzlX,UAAW,UAK9CqM,IAAK,WACD,YAA0BvM,IAAnB6E,KAAKghX,UAA0BhhX,KAAKghX,UACvChhX,KAAKi/W,aAAaqB,gBAAgB1zW,QAM1CvF,IAAK,SAAUrK,GACXgD,KAAKghX,UAAYhkX,GAErB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAei5W,EAAiBzlX,UAAW,eAK9CqM,IAAK,WACD,YAA+BvM,IAAxB6E,KAAKihX,eAA+BjhX,KAAKihX,eAC5CjhX,KAAKi/W,aAAaqB,gBAAgBY,aAM1C75W,IAAK,SAAUrK,GACXgD,KAAKihX,eAAiBjkX,GAE1B2K,YAAY,EACZC,cAAc,IAMlBk5W,EAAiBzlX,UAAU8lX,WAAa,WACpC,MAAkC,QAA3BnhX,KAAKi/W,aAAav4W,MAM7Bo6W,EAAiBzlX,UAAU+lX,eAAiB,SAAU9kX,GAClD,GAAIA,EAAM6K,OAAO7D,GAAG/E,QAAQ,aAAe,GAAKjC,EAAM6K,OAAO7D,GAAG/E,QAAQ,gBAAkB,EAAG,CACzF,IAAI65B,EAAazD,GAAYr4B,EAAM6K,OAAO7D,IAAIwwB,MAC9C,GAAIkuB,MAAM5pB,IAAgB97B,EAAM6K,OAAO7D,GAAG/E,QAAQ,gBAAkB,GACQ,YAAxEyB,KAAKi/W,aAAah+U,cAAc,GAAGtJ,OAAOS,GAAYqnF,cACtD,OAAO,KAEXz/G,KAAKqhX,cAAcjpV,EAAYp4B,KAAKi/W,cACpCj/W,KAAKshX,aAAalpV,KAO1B0oV,EAAiBzlX,UAAUkmX,cAAgB,WACvC,GAAIvhX,KAAKi/W,aAAah+U,cAAc,GAAGugV,WACnC,IAAK,IAAIpjX,EAAK,EAAGyE,EAAK7C,KAAKi/W,aAAah+U,cAAc,GAAGtJ,OAAQv5B,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACnF,IAAI01B,EAAQjxB,EAAGzE,GACf4B,KAAKqhX,cAAcvtV,EAAM7hB,MAAOjS,KAAKi/W,mBAGnCxhX,EAAkBuC,KAAKi/W,aAAah+U,cAAc,GAAGwgV,eAC3DzhX,KAAKqhX,cAAcrhX,KAAKi/W,aAAah+U,cAAc,GAAGwgV,aAAczhX,KAAKi/W,cAE7E,GAAIj/W,KAAKi/W,aAAayC,6BAAmE,SAApC1hX,KAAKi/W,aAAa/xC,eACnEltU,KAAKi/W,aAAayC,4BAA4BxjC,oBAAoBzhV,OAClE,IAAK,IAAIwH,EAAK,EAAGwG,EAAKzK,KAAKi/W,aAAayC,4BAA4BxjC,oBAAqBj6U,EAAKwG,EAAGhO,OAAQwH,IAAM,CAC3G,IAAIgO,EAAQxH,EAAGxG,GACfjE,KAAKqhX,cAAcpvW,EAAM6hB,MAAO9zB,KAAKi/W,cAAc,GACnDj/W,KAAKshX,aAAarvW,EAAM6hB,SAOpCgtV,EAAiBzlX,UAAUimX,aAAe,SAAUrvW,GAGhD,IAAK,IAFDwuW,EAAUzgX,KAAKi/W,aAAaj+W,QAAQsC,GAAK,mBAEpClF,EAAK,EAAGgjC,EADJphC,KAAKi/W,aAAah+U,cAAc,GAAGtJ,OACZv5B,EAAKgjC,EAAS3kC,OAAQ2B,IAAM,CAC5D,IAAIi0B,EAAe+O,EAAShjC,GACxB6T,IAAUogB,EAAapgB,OACvBjS,KAAK2hX,eAAetvV,EAAapgB,MAAOwuW,EAASzgX,KAAK0zB,UAQlEotV,EAAiBzlX,UAAUgmX,cAAgB,SAAUpvW,EAAO4e,EAAO+wV,QAC/C,IAAZA,IAAsBA,GAAU,GACpC,IACIjzR,EADA8xR,EAAUzgX,KAAKi/W,aAAaj+W,QAAQsC,GAAK,mBAGzCwwB,GADS9zB,KAAKi/W,aAAah+U,cAAc,GAAGtJ,OACpCwJ,GAAalvB,EAAOjS,KAAKi/W,aAAah+U,cAAc,GAAGtJ,SACnE,GAAIl6B,EAAkBq2B,GAClB,OAAO,KAMP66D,EAJC3uF,KAAKmhX,aAIM3tV,GAAiBM,EAAM+tV,SAAUhxV,EAAM2vV,gBAAiBxgX,KAAK0zB,SAH3D3mB,EAAG8jB,EAAM2vV,gBAAiBxzW,EAAG,GAK3ChN,KAAK8hX,UAAUrB,EAAUxuW,IAAU2vW,EACnC5hX,KAAK+hX,aAAa9vW,EAAO08E,EAAW8xR,EAASzgX,KAAK0zB,SAAY3mB,EAAG,EAAGC,EAAG,IAGvEhN,KAAK2hX,eAAe1vW,EAAOwuW,EAASzgX,KAAK0zB,SAMjDotV,EAAiBzlX,UAAUymX,UAAY,SAAUx+W,GAC7C,IAAItC,EAAUusB,GAAWjqB,GACzB,SAAItC,GAAkD,oBAAtCA,EAAQ6R,aAAa,cAA4E,OAAtC7R,EAAQ6R,aAAa,cACtD,iBAAtC7R,EAAQ6R,aAAa,eAU7BiuW,EAAiBzlX,UAAUsmX,eAAiB,SAAU1vW,EAAO+vW,EAAStuV,GAElE1zB,KAAKiiX,aAAahwW,EAAO+vW,EADV,oBAMnBlB,EAAiBzlX,UAAU4mX,aAAe,SAAUhwW,EAAO+vW,EAAS9tW,GAChElU,KAAKkiX,oBAAoBF,EAAU/vW,EAAOiC,GACtClU,KAAKi/W,aAAah+U,cAAc,GAAGggD,UAAUzpD,UAC7CwqV,EAAUhiX,KAAKi/W,aAAaj+W,QAAQsC,GAAK,uBACzCtD,KAAKkiX,oBAAoBF,EAAU,SAAW/vW,EAAOiC,GACrDlU,KAAKkiX,oBAAoBF,EAAU,QAAU/vW,EAAOiC,GACpDlU,KAAKkiX,oBAAoBF,EAAU,aAAe/vW,EAAOiC,KAMjE4sW,EAAiBzlX,UAAU6mX,oBAAsB,SAAU5+W,EAAI4Q,GAC3D,IAAIlT,EAAUusB,GAAWjqB,GACrBtC,GACAA,EAAQwC,aAAa,YAAa0Q,IAM1C4sW,EAAiBzlX,UAAU0mX,aAAe,SAAU9vW,EAAO08E,EAAWqzR,EAAStuV,GAC3E,IAAIxf,EAAW,cAAgBy6E,EAAU5hF,EAAI2mB,EAAO3mB,GAAK,MAAQ4hF,EAAU3hF,EAAI0mB,EAAO1mB,GAAK,IAC3FhN,KAAKiiX,aAAahwW,EAAO+vW,EAAS9tW,IAE/B4sW,KC3MPx2R,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAoBxCw3R,GAAyB,SAAUh3R,GAEnC,SAASg3R,IACL,OAAkB,OAAXh3R,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAwJ/D,OA1JAsqF,GAAU63R,EAASh3R,GAQnBg3R,EAAQ9mX,UAAU+mX,eAAiB,SAAUvxV,EAAOjS,GAChD5e,KAAKi/W,aAAepuV,EACpB,IAAI/D,EAAOzgB,KAAK0T,IAAI8Q,EAAMi0S,gBAAgB9uT,MAAO6a,EAAMi0S,gBAAgB/uT,QACvE/V,KAAKqiX,WAAWzjW,GAChB5e,KAAK4M,OAASyxB,GAAezf,EAAOhS,OAAQkgB,EAAO,GACnD9sB,KAAKqmC,YAAchI,GAAezf,EAAOynB,YAAarmC,KAAK4M,QAC3D5M,KAAKkhX,YAA4C,WAA9BtiW,EAAOqiE,UAAU/sE,UAA2BlU,KAAK4M,OAAS5M,KAAKqmC,aAAe,EAAKrmC,KAAKqmC,YACtGrmC,KAAK4M,OAASyxB,GAAezf,EAAOqiE,UAAUqhS,eAAe7lX,QAAU,KAAMqwB,EAAO,GACzF+D,EAAM2vV,gBAAkB5hW,EAAOgjW,QAAUvjV,GAAezf,EAAO2jW,cAAeviX,KAAK4M,QAAU,EAC7F5M,KAAKwiX,WAAW3xV,EAAOjS,GACvB5e,KAAKyiX,kBAAkB7jW,EAAQA,EAAOqiE,UAAUzpD,QAAS5Y,EAAOqiE,UAAU/sE,UAC1ElU,KAAKqlC,YAAc,MAMvB88U,EAAQ9mX,UAAUmnX,WAAa,SAAUvD,EAAcrgW,GACnD5e,KAAKi/W,aAAeA,EACpBj/W,KAAK0zB,QACD3mB,EAAGsxB,GAAe,MAAO4gV,EAAan6C,gBAAgB9uT,OAAUipW,EAAan6C,gBAAiB,EAC9F93T,EAAGqxB,GAAe,MAAO4gV,EAAan6C,gBAAgB/uT,QAAWkpW,EAAan6C,gBAAiB,GAEnG,IAAI49C,EAAmB1iX,KAAK2iX,eAAe/jW,GACvCgkW,EAAyB,IAAIhvV,GAAc8uV,EAAiB31W,EAAI21W,EAAiB1sW,MAAQ,EAAG0sW,EAAiB11W,EAAI01W,EAAiB3sW,OAAS,GAC/I/V,KAAK0zB,OAAO3mB,GAAM/M,KAAK0zB,OAAO3mB,EAAI61W,EAAuB71W,EACzD/M,KAAK0zB,OAAO1mB,GAAMhN,KAAK0zB,OAAO1mB,EAAI41W,EAAuB51W,EACzDhN,KAAKi/W,aAAavrV,OAAS1zB,KAAK0zB,QAKpCyuV,EAAQ9mX,UAAUgnX,WAAa,SAAUzjW,GACrC5e,KAAKqlC,YAAczmB,EAAOomB,SAAWpmB,EAAO6V,YAAc,IAC1Dz0B,KAAKy0B,WAAa7V,EAAO6V,WAAa,GACtCz0B,KAAKqlC,WAAarlC,KAAKqlC,YAAc,EAAK,IAAMrlC,KAAKqlC,WAAcrlC,KAAKqlC,WACxErlC,KAAKy0B,YAAcz0B,KAAKy0B,WAAa,EAAKz0B,KAAKy0B,WAAa,IAAOz0B,KAAKy0B,YAAc,KAM1F0tV,EAAQ9mX,UAAUonX,kBAAoB,SAAU7jW,EAAQ4Y,EAAStjB,GAC7D,IAAI6iW,EAAoB/2W,KAAK2iX,eAAe/jW,GAC5CA,EAAOm4V,kBAAoBA,EAC3Bn4V,EAAOyhW,WAAa,IAAInqV,GAAK6gV,EAAkBhqW,EAAGgqW,EAAkB/pW,EAAG+pW,EAAkB/gW,MAAQ+gW,EAAkBhqW,EAAGgqW,EAAkBhhW,OAASghW,EAAkB/pW,GAC/JwqB,GAAwB,YAAbtjB,IACX0K,EAAOyhW,WAAa,IAAInqV,GAAK00C,EAAAA,EAAUA,EAAAA,GAAWA,EAAAA,GAAWA,EAAAA,KAOrEu3S,EAAQ9mX,UAAUsnX,eAAiB,SAAU/jW,GACzC,IAAIyU,EAAO,IAAI6C,GAAK00C,EAAAA,EAAUA,EAAAA,GAAWA,EAAAA,GAAWA,EAAAA,GACpD5qE,KAAKqiX,WAAWzjW,GAChB,IAAIrhB,EAAQyC,KAAKy0B,WACbkrH,EAAQ3/I,KAAKqlC,WACbxmB,GAAO7e,KAAKy0B,WAAakrH,GAAS,IACtC9gI,EAAe,IAARA,EAAa,IAAMA,EAC1BD,EAAOwhW,cAAc/sV,EAAMrzB,KAAK6iX,iBAAiBtlX,IACjDqhB,EAAOwhW,cAAc/sV,EAAMrzB,KAAK6iX,iBAAiBhkW,IACjDD,EAAOwhW,cAAc/sV,EAAM,IAAI6C,GAAKl2B,KAAK0zB,OAAO3mB,EAAG/M,KAAK0zB,OAAO1mB,EAAG,EAAG,IACrE,IAAI81W,GAA0C,GAAzBz2W,KAAK+S,MAAM7hB,EAAQ,IAAW,IAAM,IACrDwlX,EAAuC,GAAvB12W,KAAK+S,MAAMP,EAAM,IAAY,IACjDkkW,EAAiC,IAAjBA,EAAsB,IAAMA,GACxCpjO,GAAS,IAAMojO,IAAiBD,KAChClkW,EAAOwhW,cAAc/sV,EAAMrzB,KAAK6iX,iBAAiBC,IACjDlkW,EAAOwhW,cAAc/sV,EAAMrzB,KAAK6iX,iBAAiBE,MAEvC,IAAVxlX,GAAgBA,EAAQoiJ,GAAS,MACjC/gI,EAAOwhW,cAAc/sV,EAAMrzB,KAAK6iX,iBAAiB,IAGrD,IAAK,IADDpmX,EAASqmX,IAAkBC,EAAe,EAAI12W,KAAK+S,MAAMugI,EAAQ,IAC5DxjJ,EAAI,EAAGA,EAAIM,EAAQN,MACxB2mX,GAAgC,IACXC,GAAgBlkW,EAAMthB,GAAoB,MAAVoiJ,IACjD/gI,EAAOwhW,cAAc/sV,EAAMrzB,KAAK6iX,iBAAiBC,IAKzD,OAFAzvV,EAAKrd,OAASqd,EAAKtmB,EACnBsmB,EAAKtd,QAAUsd,EAAKrmB,EACbqmB,GAKX8uV,EAAQ9mX,UAAUwnX,iBAAmB,SAAUthW,GAC3C,IAAImM,EAAW8F,GAAiBjS,EAAOvhB,KAAK4M,OAAQ5M,KAAK0zB,QACzD,OAAO,IAAIwC,GAAKxI,EAAS3gB,EAAG2gB,EAAS1gB,EAAG,EAAG,IAK/Cm1W,EAAQ9mX,UAAUoqC,WAAa,SAAU/R,EAAQn2B,EAAOshB,EAAKjS,EAAQy5B,GACjE,IAAI5S,EAAS5U,EAAMthB,EAEfmxF,GADJj7D,EAASA,EAAS,EAAKA,EAAS,IAAOA,GAClB,IAAO,EAAI,EAChC,OAAK4S,GAA+B,IAAhBA,EAITrmC,KAAKgjX,gBAAgBtvV,EAAQF,GAAiBj2B,EAAOqP,EAAQ8mB,GAASF,GAAiB3U,EAAKjS,EAAQ8mB,GAAS9mB,EAAQ4mB,GAAiBj2B,EAAO8oC,EAAa3S,GAASF,GAAiB3U,EAAKwnB,EAAa3S,GAAS2S,EAAaqoD,GAH5N1uF,KAAKijX,WAAWvvV,EAAQF,GAAiBj2B,EAAOqP,EAAQ8mB,GAASF,GAAiB3U,EAAKjS,EAAQ8mB,GAAS9mB,EAAQ8hF,IAS/HyzR,EAAQ9mX,UAAU4nX,WAAa,SAAUvvV,EAAQn2B,EAAOshB,EAAKjS,EAAQu5B,GACjE,MAAO,KAAOzS,EAAO3mB,EAAI,IAAM2mB,EAAO1mB,EAAI,MAAQzP,EAAMwP,EAAI,IAAMxP,EAAMyP,EAAI,MAAQJ,EAAS,IACzFA,EAAS,MAAQu5B,EAAY,MAAQtnB,EAAI9R,EAAI,IAAM8R,EAAI7R,EAAI,MAKnEm1W,EAAQ9mX,UAAU2nX,gBAAkB,SAAUtvV,EAAQn2B,EAAOshB,EAAKjS,EAAQq5B,EAAYC,EAAUG,EAAaF,GACzG,MAAO,KAAO5oC,EAAMwP,EAAI,IAAMxP,EAAMyP,EAAI,MAAQJ,EAAS,IAAMA,EAAS,MAAQu5B,EAC5E,MAAQtnB,EAAI9R,EAAI,IAAM8R,EAAI7R,EAAI,MAAQk5B,EAASn5B,EAAI,IAAMm5B,EAASl5B,EAAI,MAAQq5B,EAC9E,IAAMA,EAAc,MAAQF,EAAY,MAAQF,EAAWl5B,EAAI,IAAMk5B,EAAWj5B,EAAI,MAK5Fm1W,EAAQ9mX,UAAUs4U,YAAc,SAAUtyU,EAAOud,GAC7C,IAEI5hB,EAFA+C,EAAQC,KACRy0B,EAAa7V,EAAO6V,WAAa,GAEjC7nB,EAAmG,IAA1FP,KAAKC,IAAItM,KAAKi/W,aAAatpV,cAAc5f,OAAQ/V,KAAKi/W,aAAatpV,cAAc3f,OAC9FpJ,QAAUA,EACV,IAAIorB,EAASD,GAAqB,UAClC,IAAIO,OAAcC,QAAQl3B,GACtB6J,SAAU0T,EAAO+3B,UAAUzrC,SAC3BrL,MAAO+e,EAAO+3B,UAAU92C,MACxB24B,SAAU,SAAUv4B,GAChBjD,EAAQg7B,EAAO/3B,EAAKw4B,UAAWhE,EAAY10B,EAAMslC,WAAYplC,EAAKiL,UAClE7J,EAAMmC,aAAa,IAAKzD,EAAM0lC,WAAW1lC,EAAM2zB,OAAQe,EAAYz3B,EAAO4P,EAAQ,KAEtFiS,IAAK,SAAU5e,GACXoB,EAAMmC,aAAa,IAAKzD,EAAM0lC,WAAW1lC,EAAM2zB,OAAQ,EAAG,UAAW9mB,EAAQ,IAC7E7M,EAAMk/W,aAAaz4V,Q7EjKJ,qB6EiKiC5H,OAAQA,EAAQqgW,aAAcl/W,EAAMk/W,eAC/D1xV,GAAWxtB,EAAMk/W,aAAaj+W,QAAQsC,GAAK,qBAAuBsb,EAAO3M,OAC/EvN,MAAMC,WAAa5E,EAAMk/W,aAAaj4R,YAAc,SAAW,cAInFm7R,GACTrB,IChLEx2R,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAexCu4R,GAA2B,SAAU/3R,GAErC,SAAS+3R,IACL,OAAkB,OAAX/3R,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KA0D/D,OA5DAsqF,GAAU44R,EAAW/3R,GAQrB+3R,EAAU7nX,UAAUqlX,YAAc,SAAU5sV,EAAOlV,EAAQiS,EAAOklE,GAC9D,IAAIjjE,EAAMlU,EAAOogW,YACbvrV,EAAS,EAAUpnB,KAAKE,IAAIunB,EAAM9mB,GAAK8lB,EAAQ9yB,KAAe,WAAK,KAKvE,OAJA+1F,EAAOxnE,EAAIvuB,KAAKmjX,cAAcrvV,EAAOL,GACrCK,EAAM+tV,UAAY7hX,KAAKy0B,WAAchB,EAAS,GAAM,IACpDK,EAAMkR,SAAWhlC,KAAKy0B,WAAa,IACnCX,EAAM6xQ,eAAiBnyQ,GAAiBM,EAAM+tV,UAAW7hX,KAAK4M,OAAS5M,KAAKqmC,aAAe,EAAGrmC,KAAK0zB,QAC5FqiE,GAKXmtR,EAAU7nX,UAAU8nX,cAAgB,SAAUrvV,EAAOL,GACjD,GAAe,OAAXA,IAAoBK,EAAM9mB,EAC1B,MAAO,GAEX,IAAI+P,EAAO/c,KAAKylC,WAAWzlC,KAAK0zB,OAAQ1zB,KAAKy0B,WAAa,KAAMz0B,KAAKy0B,WAAahB,GAAU,IAAKzzB,KAAK4M,OAAQ5M,KAAKqmC,aAEnH,OADArmC,KAAKy0B,YAAchB,EACZ1W,GAMXmmW,EAAU7nX,UAAUq4U,cAAgB,SAAUurC,EAAclpR,EAAQn3E,EAAQvd,GACxE,IAAI+hX,EAAUnE,EAAaj+W,QAAQsC,GAAK,cAAgBsb,EAAO3M,MAC/D,GAAI2M,EAAO+3B,UAAUlX,QAAUw/U,EAAavrC,cAAe,CACvD,IAAI6E,EAAW0mC,EAAapxV,SAASgrF,gBAAiBv1G,GAAI8/W,EAAU,cAChErmW,EAAO,IAAIqZ,GAAWgtV,EAAU,SAAU,cAAe,EAAG,cAAe,EAAG,GAAI,IAClFC,EAAYpE,EAAapxV,SAASsI,SAASpZ,GAC/Cw7T,EAAS52U,YAAY0hX,GACrBpE,EAAa3tV,UAAU3vB,YAAY42U,GACnCl3U,EAAMmC,aAAa,QAAS,kBAAoB+0U,EAASj1U,GAAK,KAC9DtD,KAAK2zU,YAAY0vC,EAAWzkW,KAMpCskW,EAAU7nX,UAAUkkC,cAAgB,WAChC,MAAO,aAOX2jV,EAAU7nX,UAAUiX,QAAU,SAAU2sW,KAKjCiE,GACTf,IC7EE73R,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAmC5D0mV,GAAmC,SAAUn4R,GAM7C,SAASm4R,EAAkBtwW,EAAShS,GAChC,IAAIjB,EAAQorF,EAAO7pF,KAAKtB,KAAMgT,EAAShS,IAAYhB,KAInD,OAFAD,EAAMygX,gBAAkB,EACxBzgX,EAAMu7U,QAAU,MACTv7U,EAkzBX,OA5zBAuqF,GAAUg5R,EAAmBn4R,GAY7B7sF,OAAOuJ,eAAey7W,EAAkBjoX,UAAW,QAE/CqM,IAAK,WACD,OAAI1H,KAAK4e,QAAU5e,KAAK4e,OAAOniB,OACpBuD,KAAK4e,OAAO,GAAGlY,KAEnB,OAEXiB,YAAY,EACZC,cAAc,IAMlB07W,EAAkBjoX,UAAUoX,UAAY,WAIpC,GAHAzS,KAAKw+G,eACLx+G,KAAK2N,aACL3N,KAAK0zU,eAAgB,EACG,KAApB1zU,KAAKgB,QAAQsC,GAAW,CACxB,IAAI6jC,EAAa3mC,SAASkN,uBAAuB,uBAAuBjR,OACxEuD,KAAKgB,QAAQsC,GAAK,aAAetD,KAAKs7U,QAAU,IAAMn0S,EAE1D9H,GAAcr/B,MACdA,KAAKukB,cAKT++V,EAAkBjoX,UAAUqgB,SAAW,WAEnC1b,KAAKq2B,WAAatH,GAAc/uB,KAAKkb,QAKzCooW,EAAkBjoX,UAAU0wG,OAAS,WACjC/rG,KAAKwmB,Q/E7FK,Q+E6FWy4V,aAAcj/W,OACnCA,KAAK0b,WACL1b,KAAKujX,cAAgB,IAAIzC,GAAiB9gX,MAC1CA,KAAKsgX,gBAAkB,IAAI4C,GAAUljX,MACrCA,KAAK27U,yBACL37U,KAAK++E,eAKTukS,EAAkBjoX,UAAUmjH,aAAe,WAEvC,IAAIglQ,EAAgBh4W,GAAQC,UACxBlO,EAAQiO,GAAQ0+E,gBAChBb,EAAO79E,GAAQ2+E,eACfzrE,EAAOlT,GAAQ4+E,cACfvxD,EAAS2qV,EAAgB,eAAiB,aAE9Cj+W,GAAahB,OAAOvE,KAAKgB,QAASqoF,EAAMrpF,KAAKyjX,uBAC7Cl+W,GAAahB,OAAOvE,KAAKgB,QAAS0d,EAAM1e,KAAK0jX,sBAC7Cn+W,GAAahB,OAAOvE,KAAKgB,QAASzD,EAAOyC,KAAK2jX,wBAC9Cp+W,GAAahB,OAAOvE,KAAKgB,QAAS,QAAShB,KAAK4jX,0BAChDr+W,GAAahB,OAAOvE,KAAKgB,QAAS,cAAehB,KAAK6jX,wBACtDt+W,GAAahB,OAAOvE,KAAKgB,QAAS63B,EAAQ74B,KAAK8jX,wBAC/CjoX,OAAOe,oBAAqB4O,GAAQomB,SAAY,gBAAiB/1B,QAAU,wBAAyBA,OAAW,oBAAsB,SAAUmE,KAAK+jX,qBAKxJT,EAAkBjoX,UAAUkpB,WAAa,WAErC,IAAIi/V,EAAgBh4W,GAAQC,UACxBlO,EAAQiO,GAAQ0+E,gBAChBxrE,EAAOlT,GAAQ4+E,cACff,EAAO79E,GAAQ2+E,eACftxD,EAAS2qV,EAAgB,eAAiB,aAE9Cj+W,GAAanB,IAAIpE,KAAKgB,QAASqoF,EAAMrpF,KAAKyjX,sBAAuBzjX,MACjEuF,GAAanB,IAAIpE,KAAKgB,QAAS0d,EAAM1e,KAAK0jX,qBAAsB1jX,MAChEuF,GAAanB,IAAIpE,KAAKgB,QAASzD,EAAOyC,KAAK2jX,uBAAwB3jX,MACnEuF,GAAanB,IAAIpE,KAAKgB,QAAS,QAAShB,KAAK4jX,yBAA0B5jX,MACvEuF,GAAanB,IAAIpE,KAAKgB,QAAS,cAAehB,KAAK6jX,uBAAwB7jX,MAC3EuF,GAAanB,IAAIpE,KAAKgB,QAAS63B,EAAQ74B,KAAK8jX,uBAAwB9jX,MACpEnE,OAAOa,iBAAkB8O,GAAQomB,SAAY,gBAAiB/1B,QAAU,wBAAyBA,OAAW,oBAAsB,SAAUmE,KAAK+jX,mBAAmBzoX,KAAK0E,OACzK,IAAI65G,GAAM75G,KAAKgB,SAEfhB,KAAKmiP,SAASniP,KAAKgB,UAKvBsiX,EAAkBjoX,UAAU0lV,WAAa,SAAUlgV,GAC/C,IAAIiL,EACAI,EACAq7D,EAAUh6C,GAAWvtB,KAAKgB,QAAQsC,GAAK,QAAQsI,wBAC/CynB,EAAOrzB,KAAKgB,QAAQ4K,wBACxB,GAAI/K,EAAE6F,KAAKnI,QAAQ,UAAY,EAAG,CAC9ByB,KAAK4xB,SAAU,EACf,IAAIsvT,EAAWrgV,EACfqL,EAAQg1U,EAASviR,eAAe,GAAGtqB,QACnCvoC,EAAQo1U,EAASviR,eAAe,GAAGvqB,aAGnCp0C,KAAK4xB,QAA4B,UAAlB/wB,EAAEw/U,aAA6C,MAAlBx/U,EAAEw/U,YAC9Cv0U,EAAQjL,EAAEuzC,QACVloC,EAAQrL,EAAEwzC,QAEdr0C,KAAKgtU,OAAU9gU,EAAQmnB,EAAK3mB,IAAOL,KAAKC,IAAIi7D,EAAQ76D,IAAM2mB,EAAK3mB,IAAK,GACpE1M,KAAK+sU,OAAUjhU,EAAQunB,EAAK7mB,KAAQH,KAAKC,IAAIi7D,EAAQ/6D,KAAO6mB,EAAK7mB,KAAM,IAO3E82W,EAAkBjoX,UAAUqoX,qBAAuB,SAAU7iX,GAazD,OAZAb,KAAK+gV,WAAWlgV,GAChBb,KAAKwmB,QAAQu5S,IAAgB54T,OAAQtG,EAAEsG,OAAO7D,GAAIyJ,EAAG/M,KAAK+sU,OAAQ//T,EAAGhN,KAAKgtU,SACtEhtU,KAAK4xB,UACL5xB,KAAKyhV,aAAa5gV,EAAGb,KAAK+sU,OAAQ/sU,KAAKgtU,OAAQhtU,KAAK4xB,SAChD5xB,KAAKkgX,6BAA+BlgX,KAAKihC,cAAc,GAAGggD,UAAUzpD,SACpEx3B,KAAKkgX,4BAA4B72R,KAAKxoF,EAAGb,KAAK+sU,OAAQ/sU,KAAKgtU,OAAQhtU,KAAK4xB,SAExE5xB,KAAKugX,0BAA4BvgX,KAAKo2U,eAAe5+S,SACrDx3B,KAAKugX,yBAAyBl3R,KAAKxoF,IAG3Cb,KAAK+N,OAAOvC,GAAQ4+E,cAAevpF,IAC5B,GAYXyiX,EAAkBjoX,UAAUsoX,uBAAyB,SAAU9iX,GAG3D,OAFAb,KAAK+gV,WAAWlgV,GAChBb,KAAKwmB,QAAQs5S,IAAkB34T,OAAQtG,EAAEsG,OAAO7D,GAAIyJ,EAAG/M,KAAK+sU,OAAQ//T,EAAGhN,KAAKgtU,UACrE,GAOXs2C,EAAkBjoX,UAAU0oX,mBAAqB,SAAUljX,GACvD,IAAId,EAAQC,KACZA,KAAK0zU,eAAgB,EACrB,IAAIzzU,GACAg/W,aAAcj/W,KACdihV,aAAc,IAAI7zT,GAAKptB,KAAK21B,cAAc3f,MAAOhW,KAAK21B,cAAc5f,QACpE0hB,K/E3KS,U+E4KTupT,YAAa,IAAI5zT,GAAK,EAAG,IAgB7B,OAdIptB,KAAK65U,UACL35U,aAAaF,KAAK65U,UAEtB75U,KAAK65U,SAAW15U,WAAW,WACnBJ,EAAMinF,YACN9mF,aAAaH,EAAM85U,WAGvBx6S,GAAct/B,GACdE,EAAK+gV,YAAcjhV,EAAM41B,cACzB51B,EAAMymB,Q/ExLG,U+EwLcvmB,GACvBF,EAAM42W,gBACN52W,EAAM8wU,iBACP,MACI,GAKXyyC,EAAkBjoX,UAAU6+U,OAAS,SAAUxzU,EAAMqqN,EAAU33L,EAAa+gT,EAAUnkU,EAAOD,GACvE,IAAI6jU,GAAY55U,MACtBk6U,OAAOxzU,EAAMqqN,EAAU33L,EAAc+gT,IAAuBn6U,MAAQgW,EAAOD,IAK3FutW,EAAkBjoX,UAAU0F,MAAQ,SAAUuC,GACxB,IAAIs2U,GAAY55U,MACtBe,MAAMuC,IAKtBggX,EAAkBjoX,UAAU8mP,SAAW,SAAUnhP,GAC7CA,EAAQ0D,MAAMo1G,YAAc,UAC5B94G,EAAQ0D,MAAMg8U,cAAgB,UAC9B1/U,EAAQ0D,MAAMi8U,iBAAmB,OACjC3/U,EAAQ0D,MAAMk8U,aAAe,OAC7B5/U,EAAQ0D,MAAMm8U,iBAAmB,OACjC7/U,EAAQ0D,MAAMwP,SAAW,YAK7BovW,EAAkBjoX,UAAUinV,mBAAqB,SAAUC,EAAiBnoT,GACxE,IACIp5B,EADA2tD,EAAa3uD,KAAK42D,YAAY2rR,GAE9B9hV,EAAa8sB,GAAWvtB,KAAKgB,QAAQsC,GAAK,2BAC1C82B,IACAu0B,EAAWv0B,QAAUA,EACjB35B,GACAO,EAAUG,EAAc,OACxBqsB,GAAcxtB,KAAKgB,QAAQsC,GAAK,eAAiBi/U,GACjDviV,KAAKg+U,iBAAiBwE,kBAAkB7zR,EAAY4zR,EAAiBvhV,GACrEP,EAAWkB,YAAYX,EAAQoZ,SAAS,KAGxCpa,KAAKg+U,iBAAiBC,kBAAkB1wT,GAAWvtB,KAAKgB,QAAQsC,GAAK,yBASjFggX,EAAkBjoX,UAAUooX,sBAAwB,SAAU5iX,GAgB1D,OAfAb,KAAK+gV,WAAWlgV,GAChBb,KAAKwmB,QAAQm5S,IAAkBx4T,OAAQtG,EAAEsG,OAAO7D,GAAIyJ,EAAG/M,KAAK+sU,OAAQ//T,EAAGhN,KAAKgtU,SACxEhtU,KAAKwhV,WACLxhV,KAAKuhV,kB/EhQM,Y+EgQuB1gV,EAAEsG,QAEpCnH,KAAKugX,0BAA4BvgX,KAAKo2U,eAAe5+S,SACrDx3B,KAAKugX,yBAAyBl3R,KAAKxoF,GAEnCb,KAAKkgX,6BAA+BlgX,KAAKihC,cAAc,IAAMjhC,KAAKihC,cAAc,GAAGggD,UAAUzpD,SAC7Fx3B,KAAKkgX,4BAA4B72R,KAAKxoF,EAAGb,KAAK+sU,OAAQ/sU,KAAKgtU,QAE1DhtU,KAAK4xB,SACN5xB,KAAKyhV,aAAa5gV,EAAGb,KAAK+sU,OAAQ/sU,KAAKgtU,QAE3ChtU,KAAK+N,OAAOvC,GAAQ2+E,eAAgBtpF,IAC7B,GAEXyiX,EAAkBjoX,UAAUomV,aAAe,SAAUnlV,EAAOyQ,EAAGC,EAAG4kB,GAC9D,IAAI4U,EAAWlqC,EAAM6K,OAAO7D,GACvBhH,EAAM6K,OAAO0U,YAAYtd,QAAQ,QAAU,GAAOioC,IAAcxmC,KAAKgB,QAAQsC,GAAK,SACnFouB,GAAY1xB,KAAKkgC,MAAOnzB,EAAGC,EAAGhN,KAAKgB,QAAQ4D,YAAa5E,KAAKgB,QAAQsC,GAAK,qBAAsBiqB,GAAWvtB,KAAKgB,QAAQsC,GAAK,sBAAuBsuB,GAGpJpE,GAAcxtB,KAAKgB,QAAQsC,GAAK,uBAQxCggX,EAAkBjoX,UAAUuoX,yBAA2B,SAAU/iX,GAe7D,OAdAb,KAAK+gV,WAAWlgV,GACZb,KAAKugX,0BAA4BvgX,KAAKo2U,eAAe5+S,SACrDx3B,KAAKugX,yBAAyBl6P,MAAMxlH,GAEb,SAAvBb,KAAKktU,eAA4BltU,KAAK0hX,6BACtC1hX,KAAK0hX,4BAA4BpV,0BAA0BtsW,KAAMa,GAEjEb,KAAKihC,cAAc,GAAG2gV,SACtB5hX,KAAKujX,cAAcnC,eAAevgX,GAEtCb,KAAKwmB,QAAQo5S,IAAmBz4T,OAAQtG,EAAEsG,OAAO7D,GAAIyJ,EAAG/M,KAAK+sU,OAAQ//T,EAAGhN,KAAKgtU,SACzEhtU,KAAKshV,YACLthV,KAAKuhV,kB/E3SO,a+E2SuB1gV,EAAEsG,SAElC,GAEXm8W,EAAkBjoX,UAAUkmV,kBAAoB,SAAUjlV,EAAO0E,GAC7D,IAAI+rW,EAAUp4U,GAAY3zB,EAAQsC,IAAI,GAClCypW,EAAQnuV,QAAU,GAAKmuV,EAAQj5U,OAAS,GACxC9zB,KAAKwmB,QAAQlqB,GAASsiB,OAAQ5e,KAAK4e,OAAOmuV,EAAQnuV,QAC9CkV,MAAO9zB,KAAK4e,OAAOmuV,EAAQnuV,QAAQ+Y,OAAOo1U,EAAQj5U,OAClDmpS,YAAa8vC,EAAQnuV,OAAQwZ,WAAY20U,EAAQj5U,MACjD/mB,EAAG/M,KAAK+sU,OAAQ//T,EAAGhN,KAAKgtU,UAQpCs2C,EAAkBjoX,UAAUwoX,uBAAyB,SAAUvnX,GAC3D,OAAsB,IAAlBA,EAAM6pH,SAAuC,UAAtB7pH,EAAM+jV,cAC7B/jV,EAAMkpB,iBACNlpB,EAAM8gI,mBACC,IASfkmP,EAAkBjoX,UAAUyoX,uBAAyB,SAAUjjX,GAI3D,OAHAb,KAAK+gV,WAAWlgV,GAChBb,KAAKwmB,QAAQq5S,IAAmB14T,OAAQtG,EAAEsG,OAAO7D,GAAIyJ,EAAG/M,KAAK+sU,OAAQ//T,EAAGhN,KAAKgtU,SAC7EhtU,KAAK+N,OAAOvC,GAAQC,UAAY,eAAiB,aAAc5K,IACxD,GAKXyiX,EAAkBjoX,UAAUsS,WAAa,WACrC3N,KAAKivE,KAAO,IAAIy7B,IAKpB44Q,EAAkBjoX,UAAU2oX,aAAe,WACvChkX,KAAK0/U,YACL1/S,GAAUhgC,OAOdsjX,EAAkBjoX,UAAUqkV,UAAY,WAEpC,GADAlyT,GAAcxtB,KAAKgB,QAAQsC,GAAK,sBAC5BtD,KAAKsxB,UAAW,CAChB,KAAOtxB,KAAKsxB,UAAU/f,WAAW9U,OAAS,GACtCuD,KAAKsxB,UAAUhsB,YAAYtF,KAAKsxB,UAAU1U,aAEzC5c,KAAKsxB,UAAUwJ,iBAAmB96B,KAAKsxB,UAAU7wB,YAClD8D,EAAOvE,KAAKsxB,WAGpB9D,GAAc,sBACdA,GAAc,0BAKlB81V,EAAkBjoX,UAAU4oX,uBAAyB,WACjDjkX,KAAKgB,QAAQW,YAAYR,EAAc,OACnCmC,GAAItD,KAAKgB,QAAQsC,GAAK,qBACtBC,OAAQ,yBAMhB+/W,EAAkBjoX,UAAUsgV,uBAAyB,WACjD37U,KAAKihC,iBACL,IAAK,IAAI9kC,EAAI,EAAGs+B,EAAWz6B,KAAK4e,OAAOniB,OAAQN,EAAIs+B,EAAUt+B,IAEzD,GADA6D,KAAK4e,OAAOziB,GAAG8V,MAAQ9V,EACnB6D,KAAK4e,OAAOziB,GAAGuK,OAAS1G,KAAK0G,MAAsC,IAA9B1G,KAAKihC,cAAcxkC,OAAc,CACtEuD,KAAKihC,cAAcz8B,KAAKxE,KAAK4e,OAAOziB,IACpC,QAOZmnX,EAAkBjoX,UAAU0jF,YAAc,SAAUgtB,QACjC,IAAXA,IAAqBA,GAAS,GAClC/rG,KAAKm/W,aAAe,EACpB,IAAK,IAAI/gX,EAAK,EAAGyE,EAAK7C,KAAKihC,cAAe7iC,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC5D,IAAIwgB,EAAS/b,EAAGzE,GAChBwgB,EAAO6xT,WAAa,IAAIyD,GAAKt1T,EAAO2kD,WAAY3kD,EAAO88C,OACvD98C,EAAO4xT,mBAAmBxwU,KAAM+rG,KAOxCu3Q,EAAkBjoX,UAAUw1U,aAAe,WACvC7wU,KAAKkkX,qBACLlkX,KAAKgkX,eACLhkX,KAAKutR,kBACLvtR,KAAKo8U,kBAKTknC,EAAkBjoX,UAAU6oX,mBAAqB,WAC7C,IAAItlW,EAAS5e,KAAKihC,cAAc,GAC3BxjC,EAAkBmhB,EAAOsgW,aAAkBzhX,EAAkBmhB,EAAO+gW,cACrE/gW,EAAO+gW,cAAgB/gW,EAAO2gW,SAC9B3gW,EAAOqhC,UAAUrhC,EAAOsgW,WAAYl/W,OAM5CsjX,EAAkBjoX,UAAUkyR,gBAAkB,WAC1CvtR,KAAK8kU,gBAAkB,IAAI5uS,GAAKl2B,KAAKy8B,OAAOjwB,KAAMxM,KAAKy8B,OAAO/vB,IAAK1M,KAAK21B,cAAc3f,MAAOhW,KAAK21B,cAAc5f,QAChH/V,KAAKmgC,mBACLngC,KAAKmgC,gBAAkBF,GAASjgC,KAAKkgC,MAAOlgC,KAAK0gC,WAAY1gC,KAAK8kU,gBAAgB9uT,OAClFud,GAAavzB,KAAK8kU,gBAAiB,IAAI5uS,GAAK,EAAI1J,GAAYxsB,KAAKkgC,MAAOlgC,KAAK0gC,YAAY3qB,OAAS/V,KAAKmgC,gBAAgB1jC,OAASuD,KAAKy8B,OAAOhwB,MAAQzM,KAAKy8B,OAAOjwB,KAAMxM,KAAKy8B,OAAO9vB,OAAS3M,KAAKy8B,OAAO/vB,MACvM1M,KAAKu2U,yBAKT+sC,EAAkBjoX,UAAUk7U,sBAAwB,WAChD,IAAKv2U,KAAKugX,2BAA6BvgX,KAAKo2U,eAAe5+S,QACvD,OAAO,KAEXx3B,KAAKugX,yBAAyBtkC,iBAAiBj8U,KAAMA,KAAKihC,eAC1DjhC,KAAKugX,yBAAyBhqC,sBAAsBv2U,KAAK8kU,gBAAiB9kU,KAAK21B,gBAMnF2tV,EAAkBjoX,UAAU+gV,eAAiB,WACzCp8U,KAAKq8U,eACLr8U,KAAKs8U,cACLt8U,KAAKikX,yBACLjkX,KAAK0yU,eACL1yU,KAAKk3U,eACLl3U,KAAKgB,QAAQW,YAAY3B,KAAKsxB,WAC9BtxB,KAAKmkX,mBACLnkX,KAAKohX,iBACLphX,KAAK48U,mBACL58U,KAAK28U,8BACL38U,KAAKwmB,QAAQ,UAAYy4V,aAAcj/W,OACvCA,KAAK0zU,eAAgB,GAKzB4vC,EAAkBjoX,UAAUshV,4BAA8B,WACtD,IAAIynC,EAAgB72V,GAAWvtB,KAAKgB,QAAQsC,GAAK,sBACjD,GAAK8gX,EAAL,CAGA,IAAI/wV,EAAOrzB,KAAKgB,QAAQ4K,wBACpB27D,EAAUh6C,GAAWvtB,KAAKgB,QAAQsC,GAAK,QAAQsI,wBACnDw4W,EAAc1/W,MAAM8H,KAAOH,KAAKC,IAAIi7D,EAAQ/6D,KAAO6mB,EAAK7mB,KAAM,GAAK,KACnE43W,EAAc1/W,MAAMgI,IAAML,KAAKC,IAAIi7D,EAAQ76D,IAAM2mB,EAAK3mB,IAAK,GAAK,OAKpE42W,EAAkBjoX,UAAUuhV,iBAAmB,WACvC58U,KAAKg+U,kBACLh+U,KAAKg+U,iBAAiBC,kBAAkB1wT,GAAWvtB,KAAKgB,QAAQsC,GAAK,wBAM7EggX,EAAkBjoX,UAAU+lX,eAAiB,WACzC,IAAKphX,KAAKihC,cAAc,GAAG2gV,QACvB,OAAO,KAEX5hX,KAAKujX,cAAchC,iBAKvB+B,EAAkBjoX,UAAUq3U,aAAe,WACvC1yU,KAAKsxB,UAAU3vB,YAAY3B,KAAK6tB,SAASw+C,aAAc/oE,GAAItD,KAAKgB,QAAQsC,GAAK,uBAC7E,IAAK,IAAIlF,EAAK,EAAGyE,EAAK7C,KAAKihC,cAAe7iC,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC5D,IAAIwgB,EAAS/b,EAAGzE,GACZwgB,EAAO4Y,SAAWx3B,KAAM+2B,GAAiBnY,EAAOlY,MAAQ,kBACxD1G,KAAM+2B,GAAiBnY,EAAOlY,MAAQ,gBAAiB07W,eAAepiX,KAAM4e,GAC5EA,EAAO8zT,aAAa1yU,SAOhCsjX,EAAkBjoX,UAAUghV,aAAe,WACvC,IAAIjjR,EAAUp5D,KAAKskC,OAAOtuB,MAC1BhW,KAAKsxB,UAAU3vB,YAAY3B,KAAK6tB,SAAS8V,cAAc,IAAIugS,GAAWlkU,KAAKgB,QAAQsC,GAAK,UAAWtD,KAAKyvB,YAAczvB,KAAKq2B,WAAW5G,WAAYzvB,KAAKskC,OAAQ,EAAG,IAAIpO,GAAKkjC,EAAU,EAAGA,EAAU,EAAGp5D,KAAK21B,cAAc3f,MAAQojD,EAASp5D,KAAK21B,cAAc5f,OAASqjD,OAKzQkqT,EAAkBjoX,UAAU67U,aAAe,WACvC,IAAKl3U,KAAKugX,2BAA6BvgX,KAAKo2U,eAAe5+S,QACvD,OAAO,KAEPx3B,KAAKugX,yBAAyBlpC,kBAAkB56U,SACb,QAA/BuD,KAAKihC,cAAc,GAAGv6B,MACtB1G,KAAKugX,yBAAyB8D,uBAAuBrkX,KAAKihC,cAAc,GAAGo/U,WAAYrgX,KAAKugX,yBAAyB/pC,aAAcx2U,KAAKy8B,QAE5Iz8B,KAAKugX,yBAAyBrpC,aAAal3U,KAAMA,KAAKo2U,eAAgBp2U,KAAKugX,yBAAyB/pC,gBAM5G8sC,EAAkBjoX,UAAU8oX,iBAAmB,WAC3C,IAAKnkX,KAAK0hX,6BAAsD,SAAvB1hX,KAAKktU,cAC1C,OAAO,KAEX,IAAIgR,EAAsBx/U,KAAWsB,KAAK0hX,4BAA4BxjC,oBAAqB,MAAM,GACjGl+U,KAAK0hX,4BAA4BvjC,gBAAgBn+U,MAC7Ck+U,EAAoBzhV,OAAS,IAC7BuD,KAAK0hX,4BAA4BxjC,oBAAsBA,EACvDl+U,KAAK0hX,4BAA4BtjC,gBAAgBp+U,KAAMA,KAAKktU,iBAMpEo2C,EAAkBjoX,UAAUihV,YAAc,WACtC,IAAKt8U,KAAKkgC,MACN,OAAO,KAEX,IAAI+hS,EAAYz1S,GAAYxsB,KAAKkgC,MAAOlgC,KAAK0gC,YACzC7sB,EAA2C,SAAlC7T,KAAK0gC,WAAWC,cAA2B,QAClB,QAAlC3gC,KAAK0gC,WAAWC,cAA0B,MAAQ,SACtDrK,GAAY,IAAIC,GAAWv2B,KAAKgB,QAAQsC,GAAK,SAAUg9B,GAAetgC,KAAK21B,cAAe31B,KAAKy8B,OAAOjwB,KAAMxM,KAAKy8B,OAAOjwB,KAAMxM,KAAK0gC,YAAa1gC,KAAKy8B,OAAO/vB,IAA0B,EAAnBu1T,EAAUlsT,OAAa,EAAIlC,EAAQ7T,KAAKmgC,gBAAiB,GAAI,QAASngC,KAAK0gC,WAAY1gC,KAAK0gC,WAAWlK,OAASx2B,KAAKq2B,WAAW9G,WAAYvvB,KAAKsxB,YAMxTgyV,EAAkBjoX,UAAUslX,iBAAmB,WAC3C,OAAO3gX,KAAKsxB,UAAU/vB,qBAAqB,KAAK,IAMpD+hX,EAAkBjoX,UAAUs7W,cAAgB,WACxC,IAAK,IAAIv4W,EAAK,EAAGyE,EAAK7C,KAAKihC,cAAe7iC,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC5D,IAAIwgB,EAAS/b,EAAGzE,GAChB4B,KAAKskX,cAAc1lW,EAAO+Y,UAOlC2rV,EAAkBjoX,UAAUipX,cAAgB,SAAU3sV,GAClD,IAAK,IAAIv5B,EAAK,EAAGgjC,EAAWzJ,EAAQv5B,EAAKgjC,EAAS3kC,OAAQ2B,IAAM,CAC5D,IAAI01B,EAAQsN,EAAShjC,GACrB01B,EAAM2rF,cAAgB,KACtB3rF,EAAMg+U,YAAc,KACpBh+U,EAAMgrV,cAAe,IAO7BwE,EAAkBjoX,UAAUkkC,cAAgB,WACxC,MAAO,qBAMX+jV,EAAkBjoX,UAAUiX,QAAU,WAClCtS,KAAKw+G,eACLrzB,EAAO9vF,UAAUiX,QAAQhR,KAAKtB,MAC9BA,KAAKgB,QAAQ8C,UAAUS,OAAO,wBAOlC++W,EAAkBjoX,UAAUw1F,gBAAkB,WAC1C,IAAIgB,KAuCJ,OArCAA,EAAQrtF,MACJ6sF,OAAQrxF,KAAK0G,KAAO,SACpBzG,MAAOD,QAEPA,KAAKo2U,eAAe5+S,SACpBq6D,EAAQrtF,MACJ6sF,OAAQ,qBACRpxF,MAAOD,QAGXA,KAAKukX,2BACL1yR,EAAQrtF,MACJ6sF,OAAQ,wBACRpxF,MAAOD,QAGXA,KAAK6xB,QAAQ4N,QACboyD,EAAQrtF,MACJ6sF,OAAQ,sBACRpxF,MAAOD,QAGY,SAAvBA,KAAKktU,eACLr7O,EAAQrtF,MACJ6sF,OAAQ,wBACRpxF,MAAOD,QAGIA,KAAK42D,YAAYx6B,KAAK,SAAUp/B,GAC/C,OAA0B,OAAlBA,EAAMo9B,WAGdy3D,EAAQrtF,MACJ6sF,OAAQ,aACRpxF,MAAOD,QAGR6xF,GAKXyxR,EAAkBjoX,UAAUkpX,wBAA0B,WAClD,IAAK,IAAInmX,EAAK,EAAGyE,EAAK7C,KAAK4e,OAAQxgB,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAErD,GADayE,EAAGzE,GACL6iF,UAAUzpD,QACjB,OAAO,EAGf,OAAO,GAMX8rV,EAAkBjoX,UAAUmxG,eAAiB,WACzC,MAAO,IAMX82Q,EAAkBjoX,UAAUmsF,kBAAoB,SAAUiF,EAASC,GAI/D,IAAK,IAHDrtC,GACAmlU,iBAAiB,EAAO3/B,eAAe,GAElCzmV,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKmvF,GAAUruF,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAE9D,OADWyE,EAAGzE,IAEV,IAAK,QACD4B,KAAK0zU,eAAgB,EACrB,MACJ,IAAK,QACL,IAAK,SACL,IAAK,QACL,IAAK,SACDr0R,EAAOwlS,eAAgB,EACvB,MACJ,IAAK,aACGp4P,EAAQ/rD,aAAe+rD,EAAQ/rD,WAAW5T,MAAQ2/D,EAAQ/rD,WAAWN,cACrEif,EAAOwlS,eAAgB,EAGvBxlS,EAAOmlU,iBAAkB,EAE7B,MACJ,IAAK,iBACDnlU,EAAOwlS,eAAgB,EACvBxlS,EAAOmlU,iBAAkB,EACzB,MACJ,IAAK,SAGD,IAAK,IAFD3iX,EAAM7B,KAAK4e,OAAOniB,OAClBsoV,GAAgB,EACX5oV,EAAI,EAAGA,EAAI0F,EAAK1F,IACjBswF,EAAQ7tE,OAAOziB,KAAOswF,EAAQ7tE,OAAOziB,GAAGonE,YAAckpB,EAAQ7tE,OAAOziB,GAAGg3B,OAASs5D,EAAQ7tE,OAAOziB,GAAG+yU,SACnG6V,GAAgB,GAGpBA,IACA/kV,KAAK++E,aAAY,GACjB1/B,EAAOwlS,eAAgB,GAE3B,MACJ,IAAK,SACL,IAAK,eACD15P,EAAO9vF,UAAU62D,QAAQ5wD,KAAKtB,MAC9B,MACJ,IAAK,aACL,IAAK,SACL,IAAK,cACL,IAAK,oBACDq/C,EAAOmlU,iBAAkB,EACzB,MACJ,IAAK,gBACL,IAAK,sBACL,IAAK,gBACGxkX,KAAK0hX,8BACDjkX,EAAkBuC,KAAK0hX,4BAA4BxjC,qBACnDl+U,KAAK0hX,4BAA4BvjC,gBAAgBn+U,MAGjDA,KAAK0hX,4BAA4BtjC,gBAAgBp+U,KAAM0sF,EAAQwgP,kBAM9E7tR,EAAOwlS,eAAiBxlS,EAAOmlU,iBAChCxkX,KAAKgkX,eACLhkX,KAAKo8U,kBAEA/8R,EAAOwlS,gBACZ7kV,KAAK22W,gBACL32W,KAAKgkX,eACLhkX,KAAKutR,kBACLvtR,KAAKo8U,mBAGbvxP,IACI3jF,EAAS,OACVo8W,EAAkBjoX,UAAW,aAAS,GACzCwvF,IACI3jF,EAAS,OACVo8W,EAAkBjoX,UAAW,cAAU,GAC1CwvF,IACI3jF,EAAS,OACVo8W,EAAkBjoX,UAAW,aAAS,GACzCwvF,IACI9iF,EAAQotR,GAAMknC,eAAgBM,KAC/B2mD,EAAkBjoX,UAAW,kBAAc,GAC9CwvF,IACI9iF,KAAY6tU,KACb0tC,EAAkBjoX,UAAW,sBAAkB,GAClDwvF,IACI9iF,KAAYo1T,KACbmmD,EAAkBjoX,UAAW,eAAW,GAC3CwvF,IACI3jF,EAAS,SACVo8W,EAAkBjoX,UAAW,qBAAiB,GACjDwvF,IACI3jF,GAAS,IACVo8W,EAAkBjoX,UAAW,qBAAiB,GACjDwvF,IACIxiF,KAAe00T,KAChBumD,EAAkBjoX,UAAW,2BAAuB,GACvDwvF,IACI9iF,KAAY+0T,KACbwmD,EAAkBjoX,UAAW,cAAU,GAC1CwvF,IACI3jF,GAAS,IACVo8W,EAAkBjoX,UAAW,yBAAqB,GACrDwvF,IACI9iF,GAAUyuB,MAAO,UAAWxgB,MAAO,GAAK4mT,KACzC0mD,EAAkBjoX,UAAW,cAAU,GAC1CwvF,IACI3jF,EAAS,OACVo8W,EAAkBjoX,UAAW,kBAAc,GAC9CwvF,IACIxiF,OAAiB02W,KAClBuE,EAAkBjoX,UAAW,cAAU,GAC1CwvF,IACIxiF,OAAiBs2W,KAClB2E,EAAkBjoX,UAAW,mBAAe,GAC/CwvF,IACI3jF,EAAS,aACVo8W,EAAkBjoX,UAAW,aAAS,GACzCwvF,IACI/hF,KACDw6W,EAAkBjoX,UAAW,cAAU,GAC1CwvF,IACI/hF,KACDw6W,EAAkBjoX,UAAW,YAAQ,GACxCwvF,IACI/hF,KACDw6W,EAAkBjoX,UAAW,oBAAgB,GAChDwvF,IACI/hF,KACDw6W,EAAkBjoX,UAAW,oBAAgB,GAChDwvF,IACI/hF,KACDw6W,EAAkBjoX,UAAW,kBAAc,GAC9CwvF,IACI/hF,KACDw6W,EAAkBjoX,UAAW,qBAAiB,GACjDwvF,IACI/hF,KACDw6W,EAAkBjoX,UAAW,mBAAe,GAC/CwvF,IACI/hF,KACDw6W,EAAkBjoX,UAAW,wBAAoB,GACpDwvF,IACI/hF,KACDw6W,EAAkBjoX,UAAW,mBAAe,GAC/CwvF,IACI/hF,KACDw6W,EAAkBjoX,UAAW,sBAAkB,GAClDwvF,IACI/hF,KACDw6W,EAAkBjoX,UAAW,uBAAmB,GACnDwvF,IACI/hF,KACDw6W,EAAkBjoX,UAAW,kBAAc,GAC9CwvF,IACI/hF,KACDw6W,EAAkBjoX,UAAW,iBAAa,GAC7CwvF,IACI/hF,KACDw6W,EAAkBjoX,UAAW,yBAAqB,GACrDwvF,IACI/hF,KACDw6W,EAAkBjoX,UAAW,sBAAkB,GAClDwvF,IACI/hF,KACDw6W,EAAkBjoX,UAAW,uBAAmB,GACnDwvF,IACI/hF,KACDw6W,EAAkBjoX,UAAW,oBAAgB,GAChDwvF,IACI/hF,KACDw6W,EAAkBjoX,UAAW,eAAW,GAC3CwvF,IACI3jF,EAAS,QACVo8W,EAAkBjoX,UAAW,oBAAgB,GAChDioX,EAAoBz4R,IAChBzhF,GACDk6W,IAEL/3Q,IC52BEjhB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAexC85R,GAAgC,SAAUt5R,GAE1C,SAASs5R,IACL,OAAkB,OAAXt5R,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAyF/D,OA3FAsqF,GAAUm6R,EAAgBt5R,GAQ1Bs5R,EAAeppX,UAAU+mX,eAAiB,SAAUvxV,EAAOjS,GACvD,IAAI8lW,EAAkB7zV,EAAMi0S,gBAC5BlmT,EAAO+lW,aAAe,IAAIv3V,GAAKiR,GAAezf,EAAO5I,MAAO0uW,EAAgB1uW,OAAQqoB,GAAezf,EAAO7I,OAAQ2uW,EAAgB3uW,SAClI6I,EAAOgmW,SAAW,IAAIx3V,GAAKiR,GAAezf,EAAOimW,UAAWH,EAAgB1uW,OAAQqoB,GAAezf,EAAOkmW,WAAYJ,EAAgB3uW,SACtI/V,KAAKyiX,kBAAkB7jW,EAAQA,EAAOqiE,UAAUzpD,QAAS5Y,EAAOqiE,UAAU/sE,SAAU2c,GACvD,QAAzBjS,EAAO2jW,gBACP3jW,EAAO2jW,cAAgB,QAE3B1xV,EAAM2vV,gBAAkBniV,GAAezf,EAAO2jW,cAAemC,EAAgB1uW,OAC7E,IAAI2hB,EAAS/Y,EAAO+Y,OACpB33B,KAAK+kX,oBAAoBptV,EAAQ/Y,IAMrC6lW,EAAeppX,UAAU0pX,oBAAsB,SAAUptV,EAAQ/Y,EAAQ8gC,QACrD,IAAZA,IAAsBA,GAAU,GASpC,IAAK,IARDs/T,EAAcpgW,EAAOogW,YAErBgG,EAAW34W,KAAK0T,IAAI1T,KAAKC,IAAIsS,EAAOomW,SAAU,GAAI,GAElDC,EAAQ,GAAKjG,GAAe,EAAIgG,GAAY,EAAIA,KAChDE,EAAUF,GAAYrtV,EAAOl7B,OAAS,GACtCuQ,EAAI,EAEC7Q,EAAIw7B,EAAOl7B,OAAS,EAAGN,GAAK,EAAGA,IAAK,CACzC,IAAI8V,EAAQytC,EAAU/nB,EAAOl7B,OAAS,EAAIN,EAAIA,EAC9C,GAAIw7B,EAAO1lB,GAAOulB,QAAS,CACvB,IAAIzhB,EAASkvW,EAAQttV,EAAO1lB,GAAOjF,EACnC2qB,EAAO1lB,GAAOkzW,OAASn4W,EACvB2qB,EAAO1lB,GAAOmzW,YAAcrvW,EAC5B/I,GAAK+I,EAASmvW,KAQ1BT,EAAeppX,UAAUgqX,iBAAmB,SAAUzmW,EAAQkV,EAAO6D,GACjE,IAAIzE,EAAOyE,EAAOl7B,OAAS,EACvBkQ,EAAyB,WAAhBiS,EAAOlY,KAAoBixB,EAAOl7B,OAAS,EAAIk7B,EAAOl7B,OAAS,EACxEsQ,GAAK4qB,EAAO,GAAG5qB,EAAI4qB,EAAOhrB,GAAQI,GAAK,EACvCN,GAASkrB,EAAO,GAAG5qB,EAAI4qB,EAAOhrB,EAAS,GAAGI,GAAK,EACnD+mB,EAAMo4B,OAAS,IAAIh2B,GAAKnpB,EAAG4qB,EAAO,GAAG3qB,EAAGP,EAAQM,EAAG4qB,EAAOhrB,GAAQK,EAAI2qB,EAAO,GAAG3qB,GAChF8mB,EAAM6xQ,gBACF54R,EAAG+mB,EAAMo4B,OAAOn/C,EAAI+mB,EAAMo4B,OAAOl2C,MAAQ,EACzChJ,EAAG8mB,EAAMo4B,OAAOl/C,EAAI8mB,EAAMo4B,OAAOn2C,OAAS,GAE9C+d,EAAMwxV,aACFv4W,EAAG+mB,EAAM6xQ,eAAe54R,GAAK4qB,EAAO,GAAG5qB,EAAI4qB,EAAOzE,GAAMnmB,GAAK,EAC7DC,EAAG8mB,EAAM6xQ,eAAe34R,GAAK2qB,EAAO,GAAG3qB,EAAI2qB,EAAOzE,GAAMlmB,GAAK,IAOrEy3W,EAAeppX,UAAUkqX,SAAW,SAAUC,GAE1C,IAAK,IADDzoW,EAAO,IACF5gB,EAAI,EAAGA,EAAIqpX,EAAU/oX,OAAQN,IAClC4gB,GAAQyoW,EAAUrpX,GAAG4Q,EAAI,IAAMy4W,EAAUrpX,GAAG6Q,EACxC7Q,IAAMqpX,EAAU/oX,OAAS,IACzBsgB,GAAQ,MAGhB,OAAOA,GAMX0nW,EAAeppX,UAAUonX,kBAAoB,SAAU7jW,EAAQ4Y,EAAStjB,EAAU2c,GAC9E,IAAI9jB,GAAK8jB,EAAMi0S,gBAAgB9uT,MAAQ4I,EAAO+lW,aAAa3uW,OAAS,EAChEhJ,GAAK6jB,EAAMi0S,gBAAgB/uT,OAAS6I,EAAO+lW,aAAa5uW,QAAU,EAClEghW,EAAoB,IAAI7gV,GAAKnpB,EAAGC,EAAG4R,EAAO+lW,aAAa3uW,MAAO4I,EAAO+lW,aAAa5uW,QACtF6I,EAAOyhW,WAAa,IAAInqV,GAAK6gV,EAAkBhqW,EAAGgqW,EAAkB/pW,EAAG+pW,EAAkB/gW,MAAQ+gW,EAAkBhqW,EAAGgqW,EAAkBhhW,OAASghW,EAAkB/pW,GACnK4R,EAAOm4V,kBAAoBA,EACvBv/U,GAAwB,YAAbtjB,IACX0K,EAAOyhW,WAAa,IAAInqV,GAAK00C,EAAAA,EAAUA,EAAAA,GAAWA,EAAAA,GAAWA,EAAAA,KAG9D65S,GACT3D,IC5GEx2R,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAcxC86R,GAA8B,SAAUt6R,GAExC,SAASs6R,IACL,OAAkB,OAAXt6R,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KA0F/D,OA5FAsqF,GAAUm7R,EAAct6R,GAOxBs6R,EAAapqX,UAAUqqX,eAAiB,SAAU5xV,EAAOlV,EAAQiS,GAC7D,IAAIu8D,EACAvkB,EACAD,EACA+8S,EACAC,EACAjzB,EACAkzB,EACAC,EACAxyQ,EAAO10F,EAAO+lW,aAGdoB,GADcl1V,EAAMi0S,gBAAgB9uT,MAAQ4I,EAAO+lW,aAAa3uW,OAAS,EACzC6a,EAAMi0S,gBAAgB/3T,EACtDi5W,EAAYn1V,EAAMi0S,gBAAgB93T,GAAK6jB,EAAMi0S,gBAAgB/uT,OAASu9F,EAAKv9F,QAAU,EAErFrJ,EAAMonB,EAAMqxV,OAAS7xQ,EAAKv9F,OAC1BpJ,EAASD,EAAMonB,EAAMsxV,YAAc9xQ,EAAKv9F,OACxC6uW,EAAWhmW,EAAOgmW,SACtBx3R,EAAYw3R,EAAS5uW,OAASs9F,EAAKt9F,MAAQ4uW,EAAS5uW,SAAWs9F,EAAKv9F,OAAS6uW,EAAS7uW,OAASrJ,IAC1F4mG,EAAKv9F,OAAS6uW,EAAS7uW,SAG5B4vW,GAFA98S,EAAayqC,EAAKt9F,MAAQ,EAAKo3E,EAAY,GAEtBA,EAEjBA,EADAzgF,EAAS2mG,EAAKv9F,OAAS6uW,EAAS7uW,QAAUu9F,EAAKv9F,SAAW6uW,EAAS7uW,OACvD6uW,EAAS5uW,MAGT4uW,EAAS5uW,OAASs9F,EAAKt9F,MAAQ4uW,EAAS5uW,SAC9Cs9F,EAAKv9F,OAAS6uW,EAAS7uW,OAASpJ,IAAW2mG,EAAKv9F,OAAS6uW,EAAS7uW,SAG5E6vW,GADAh9S,EAAgB0qC,EAAKt9F,MAAQ,EAAMo3E,EAAY,GACpBA,EACvB1gF,GAAO4mG,EAAKv9F,OAAS6uW,EAAS7uW,QAC9B8yD,EAAYD,EAAe+pR,EAAar/O,EAAKt9F,MAAQ,EAAK4uW,EAAS5uW,MAAQ,EAC3E2vW,EAASC,EAAYC,EAAUvyQ,EAAKt9F,MAAQ,EAAK4uW,EAAS5uW,MAAQ,GAE7DrJ,EAAU2mG,EAAKv9F,OAAS6uW,EAAS7uW,SAEtC8vW,EAASD,GADTjzB,EAAY/pR,EAAgB0qC,EAAKt9F,MAAQ,EAAKo3E,EAAY,GACzBA,EACjC04R,EAAUxyQ,EAAKv9F,OAAS6uW,EAAS7uW,QAErCrJ,GACOs5W,EAGP,IAIIC,GAAUl5W,EAAGg5W,EAvCJ,EAuCgCH,EAAW54W,EANxDL,GAAUq5W,GAONE,GAAUn5W,EAAGg5W,EAxCJ,EAwCgCn9S,EAAc57D,EAAGL,IAN9Dm5W,GAAWE,KAQPC,GAAUl5W,EAAGg5W,EA1CJ,EA0CgCF,EAAQ74W,EAAG84W,GACpDI,GAAUn5W,EAAGg5W,EA3CJ,EA2CgCpzB,EAAW3lV,EAAG84W,IAE3D,IAAIttQ,IAVUzrG,EAAGg5W,EAnCJ,EAmCgCl9S,EAAW77D,EAAGN,IAC7CK,EAAGg5W,EApCJ,EAoCgCJ,EAAQ34W,EAAGN,GAS3Bu5W,GARfl5W,EAAGg5W,EArCJ,EAqCgCH,EAAW54W,EAAGL,IAC7CI,EAAGg5W,EAtCJ,EAsCgCn9S,EAAc57D,EAAGL,GAOZu5W,GAClDlmX,KAAKqlX,iBAAiBzmW,EAAQkV,EAAO0kF,GAErC,OADgBx4G,KAAKulX,SAAS/sQ,IAOlCitQ,EAAapqX,UAAUqlX,YAAc,SAAU5sV,EAAOlV,EAAQiS,EAAO7d,GACjE,IAAIwiB,EAAYx1B,KAAK0lX,eAAe5xV,EAAOlV,EAAQiS,GACnDiD,EAAM+tV,SAAW,EACjB7uW,EAAQub,EAAIiH,GAKhBiwV,EAAapqX,UAAUkkC,cAAgB,WACnC,MAAO,gBAOXkmV,EAAapqX,UAAUiX,QAAU,SAAU2sW,KAKpCwG,GACThB,IC5GEn6R,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAcxCw7R,GAA+B,SAAUh7R,GAEzC,SAASg7R,IACL,OAAkB,OAAXh7R,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAiI/D,OAnIAsqF,GAAU67R,EAAeh7R,GAOzBg7R,EAAc9qX,UAAUqqX,eAAiB,SAAU5xV,EAAOlV,EAAQiS,GAC9D,IAAIyiF,EAAO10F,EAAO+lW,aAEdqB,EAAYn1V,EAAMi0S,gBAAgB93T,GAAK6jB,EAAMi0S,gBAAgB/uT,OAASu9F,EAAKv9F,QAAU,EAKrFgwW,GADcl1V,EAAMi0S,gBAAgB9uT,MAAQ4I,EAAO+lW,aAAa3uW,OAAS,EACzC6a,EAAMi0S,gBAAgB/3T,EAEtDL,EAAMonB,EAAMqxV,OACZx4W,EAASmnB,EAAMqxV,OAASrxV,EAAMsxV,YAE9Bv8S,EAAY,IAAO,EAAI/0C,EAAMqxV,QAC7Bv8S,EAAe,IAAO,EAAIj8D,GAC9BD,GAAOs5W,EAAY1yQ,EAAKv9F,OACxBpJ,GAAUq5W,EAAY1yQ,EAAKv9F,OAC3B,IAgBIyiG,IAfAzrG,EAAGg5W,EAZM,EAYsBl9S,EAAYyqC,EAAKt9F,MAChDhJ,EAAGN,EAAM4mG,EAAKv9F,SAGdhJ,EAAGg5W,EAhBM,GAgBuB,EAAIl9S,GAAayqC,EAAKt9F,MACtDhJ,EAAGN,EAAM4mG,EAAKv9F,SAGdhJ,EAAGg5W,EApBM,GAoBuB,EAAIn9S,GAAgB0qC,EAAKt9F,MACzDhJ,EAAGL,EAAS2mG,EAAKv9F,SAGjBhJ,EAAGg5W,EAxBM,EAwBsBn9S,EAAe0qC,EAAKt9F,MACnDhJ,EAAGL,EAAS2mG,EAAKv9F,SAGrB/V,KAAKqlX,iBAAiBzmW,EAAQkV,EAAO0kF,GAErC,OADgBx4G,KAAKulX,SAAS/sQ,IAOlC2tQ,EAAc9qX,UAAU0pX,oBAAsB,SAAUptV,EAAQ/Y,GACjC,WAAvBA,EAAOwnW,YACPj7R,EAAO9vF,UAAU0pX,oBAAoBzjX,KAAKtB,KAAM23B,EAAQ/Y,GAAQ,GAGhE5e,KAAKqmX,yBAAyBznW,IAMtCunW,EAAc9qX,UAAUgrX,yBAA2B,SAAUznW,GAUzD,IAAK,IATDE,EAAQF,EAAO+Y,OAAOl7B,OACtB6pX,EAAc1nW,EAAOogW,YAErBhyW,KACA+I,KAEAwwW,EADWl6W,KAAK0T,IAAI,EAAG1T,KAAKC,IAAIsS,EAAOomW,SAAU,KACzBlmW,EAAQ,GAChC0nW,EAASxmX,KAAKymX,iBAAiB,EAAGH,GAClCI,EAAQ,EACHvqX,EAAI,EAAGA,EAAI2iB,EAAO3iB,IACnByiB,EAAO+Y,OAAOx7B,GAAGq7B,UACjBxqB,EAAE7Q,GAAKuqX,EACP3wW,EAAO5Z,GAAK6D,KAAKymX,iBAAiBC,EAAOr6W,KAAKE,IAAIqS,EAAO+Y,OAAOx7B,GAAG6Q,IACnE05W,GAAS3wW,EAAO5Z,GAAKoqX,EAAYC,GAIpC,IADDG,EAAO,GAAKD,EAAQH,EAAYC,GACpC,IAASrqX,EAAI,EAAGA,EAAI2iB,EAAO3iB,IACnByiB,EAAO+Y,OAAOx7B,GAAGq7B,UACjB5Y,EAAO+Y,OAAOx7B,GAAGgpX,OAASwB,EAAO35W,EAAE7Q,GACnCyiB,EAAO+Y,OAAOx7B,GAAGipX,YAAcuB,EAAO5wW,EAAO5Z,KAOzDgqX,EAAc9qX,UAAUorX,iBAAmB,SAAUz5W,EAAG45W,GAEpD,OADa5mX,KAAK6mX,uBAAuB,EAAG,EAAI75W,GAAI45W,IAMxDT,EAAc9qX,UAAUwrX,uBAAyB,SAAU1jU,EAAGrmB,EAAGmhC,GAC7D,IAAI6oT,EACAC,EACAx4V,EAAIuO,EAAIA,EAAI,EAAIqmB,EAAI8a,EACxB,GAAI1vC,GAAK,EAAG,CACR,IAAIy4V,EAAK36W,KAAKQ,KAAK0hB,GAGnB,OAFAu4V,IAAUhqV,EAAIkqV,IAAO,EAAI7jU,GACzB4jU,IAAUjqV,EAAIkqV,IAAO,EAAI7jU,GAClB92C,KAAKC,IAAIw6W,EAAOC,GAE3B,OAAO,GAKXZ,EAAc9qX,UAAUqlX,YAAc,SAAU5sV,EAAOlV,EAAQiS,EAAO7d,GAClE,IAAIwiB,EAAYx1B,KAAK0lX,eAAe5xV,EAAOlV,EAAQiS,GACnDiD,EAAM+tV,SAAW,EACjB7uW,EAAQub,EAAIiH,GAKhB2wV,EAAc9qX,UAAUkkC,cAAgB,WACpC,MAAO,iBAOX4mV,EAAc9qX,UAAUiX,QAAU,SAAU2sW,KAKrCkH,GACT1B,ICtJEn6R,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAoBxCs8R,GAAoC,SAAU97R,GAM9C,SAAS87R,EAAmBp2V,GACxB,IAAI9wB,EAAQorF,EAAO7pF,KAAKtB,KAAM6wB,IAAU7wB,KAGxC,OAFAD,EAAM02U,QAAU12U,EAChBA,EAAMmnX,UAAY,IAAIhxV,GAAK,EAAGrF,EAAM4L,OAAO/vB,IAAK,EAAG,GAC5C3M,EAsSX,OA/SAuqF,GAAU28R,EAAoB97R,GAgB9B87R,EAAmB5rX,UAAU4gV,iBAAmB,SAAUprT,EAAOjS,GAC7D5e,KAAKq3U,qBACL,IAAK,IAAIl7U,EAAI,EAAGA,EAAI,EAAGA,IAAK,CACxB,IAAIq/B,EAAa5c,EAAOziB,GAAGuK,KACR,QAAf80B,GAAuC,aAAfA,IACxBA,EAAwC,MAA1B5c,EAAOziB,GAAGkqC,aAAiD,OAA1BznB,EAAOziB,GAAGkqC,YACrD,WAAa,OAErB,IAAK,IAAIjoC,EAAK,EAAGyE,EAAK+b,EAAOziB,GAAGw7B,OAAQv5B,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC1D,IAAI01B,EAAQjxB,EAAGzE,GACVX,EAAkBq2B,EAAM/mB,IAAOtP,EAAkBq2B,EAAM9mB,IACxDhN,KAAKq3U,kBAAkB7yU,KAAK,IAAIi1U,GAAc3lT,EAAM/mB,EAAEG,WAAY4mB,EAAM0C,MAAO5X,EAAOziB,GAAGy8U,YAAa9kT,EAAM0D,QAASgE,EAAY,KAAM,KAAM1H,EAAM7hB,MAAO2M,EAAOziB,GAAG8V,WASpLg1W,EAAmB5rX,UAAUq7U,gBAAkB,SAAU/gT,EAAe6gT,EAAcL,GAClF,IAAIigC,EAAa,EACbD,EAAc,EACd/8S,EAAU+8Q,EAAO/8Q,QAChBp5D,KAAKs1B,WAIN8gV,EAAcjgC,EAAOngU,MAA4C,EAAlC2f,EAAc3f,MAAQ,IAAO,EAH5DmgW,EAAehgC,EAAOpgU,OAA8C,EAAnC4f,EAAc5f,OAAS,IAAO,EAKnEygU,EAAaxgU,OAASogW,EACtB5/B,EAAazgU,QAAUogW,EACvB,IAAIv+B,EAAezB,EAAOyB,aACtB/2S,EAAe,EACfmhD,EAAam0P,EAAOn0P,WACpB86M,EAAW,EACXb,EAAW,EACXhD,KACAq9E,EAAe,EACfv/B,EAAc,EAClB/2U,KAAK62U,cAAgBxqU,KAAKC,IAAIkgB,GAAY,cAAe2pT,EAAO/xC,WAAWruR,OAAQogU,EAAOl0P,aAG1F,IAAK,IAFDo0R,EACAtqQ,GAAS,EACJ3tG,EAAK,EAAGyE,EAAK7C,KAAKq3U,kBAAmBj5U,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAChE,IAAI05U,EAAej1U,EAAGzE,GACtBi4W,GAAoBz4U,KAAMk6S,EAAal6S,KAAMnR,KAAMqrT,EAAarrT,KAAMkB,MAAOmqT,EAAanqT,MACtF8J,KAAM,eAAgBoB,QAAQ,GAClC74B,KAAK6wB,MAAMrK,QAAQ,eAAgB6vV,GACnCv+B,EAAa/rO,QAAUsqQ,EAAgBx9U,OACvCi/S,EAAarrT,KAAO4pV,EAAgB5pV,KACpCqrT,EAAal6S,KAAOy4U,EAAgBz4U,KACpCk6S,EAAanqT,MAAQ0oV,EAAgB1oV,MACrCmqT,EAAat7S,SAAWhQ,GAAYsrT,EAAarrT,KAAM0pT,EAAO/xC,WAC1D0zC,EAAa/rO,QAAgC,KAAtB+rO,EAAarrT,OACpCs/E,GAAS,EACTgrO,EAAc/0P,EAAa41P,EAAeE,EAAat7S,SAASxmB,MAAQojD,EACpEp5D,KAAKs1B,YAELghV,IADEr6E,GAC0Bj8R,KAAK62U,cAAgBz9Q,GAAYA,EACxD6iO,GAAYj8R,KAAK62U,cAAgBz9Q,GAAYA,EAAUo9Q,EAAazgU,SACrEugW,EAAejqW,KAAKC,IAAIgqW,EAAer6E,GAAYj8R,KAAK62U,cAAgBz9Q,GAAYA,GACpF0jO,GAAsBj8P,EACtBo4P,EAAYz0R,KAAKq8B,GACjB7gC,KAAK03U,WAAarrU,KAAKC,IAAI2vR,EAAUj8R,KAAK03U,YAAc,GACxD72S,EAAe,EACfo7P,EAAW,GAEfp7P,EAAex0B,KAAKC,IAAIyqU,EAAal2S,KAGrCi8P,GAAsBi6C,EAClBP,EAAaxgU,MAASojD,EAAU0jO,IAChCj8P,EAAex0B,KAAKC,IAAIu0B,EAAei8P,EAAW1jO,EAAU29Q,GAC3C,IAAb96C,GAAmB86C,IAAgBj6C,IACnCb,EAAW,GAEfa,EAAWi6C,EAEXu/B,IADAr6E,GAC4Bj8R,KAAK62U,cAAgBz9Q,GAAYA,KAKzEp5D,KAAKs1B,YACLwnQ,GAAsBj8P,EACtB7gC,KAAKk4U,SAAW1B,EAAaxgU,MAAS8mR,EAAW1jO,EACjDk9S,EAAejqW,KAAKC,IAAIgqW,GAAgBt2W,KAAK03U,YAAc,IAAM13U,KAAK62U,cAAgBz9Q,GAAYA,GAClGp5D,KAAKk4U,SAAWl4U,KAAKk4U,UAAal4U,KAAK03U,WAAa,EAChDz+C,EAAYA,EAAYx8R,OAAS,KAAOokC,GACxCo4P,EAAYz0R,KAAKq8B,KAIrB7gC,KAAKk4U,SAAW1B,EAAazgU,OAASugW,EACtCt2W,KAAK03U,WAAa13U,KAAKmnX,cAAgBlrF,EACvCq6E,EAAejqW,KAAKC,IAAIgqW,EAAet2W,KAAK62U,cAAgBz9Q,EAAWA,IAE3Ep5D,KAAKi2U,WAAa,EAClB,IAAIjgU,EAAQhW,KAAKs1B,WAAat1B,KAAKonX,aAAanuF,EAAau9C,EAAaxgU,MAAOojD,EAAS0jO,EAAW1jO,GACjG/sD,KAAKC,IAAIwwR,EAAW1jO,EAASv4B,GAC7BkrE,EACA/rG,KAAK42U,UAAU5gU,EAAOsgW,EAAcngC,EAAQK,GAG5Cx2U,KAAK42U,UAAU,EAAG,EAAGT,EAAQK,IAMrCywC,EAAmB5rX,UAAU+rX,aAAe,SAAUrpT,EAAS/nD,EAAOojD,EAAS0jO,GAC3E,IAAIuqF,EAAgBjuT,EACpBp5D,KAAKsnX,eAAiBj7W,KAAKC,IAAI/Q,MAAM,KAAMwiE,GAC3C,IAAK,IAAI3/D,EAAK,EAAGmpX,EAAYxpT,EAAS3/D,EAAKmpX,EAAU9qX,OAAQ2B,IAAM,CAClDmpX,EAAUnpX,GAGvB,GAFAipX,GAAiBrnX,KAAKsnX,eACtBtnX,KAAKi2U,aACDoxC,EAAgBjuT,EAAUpjD,EAAO,CACjCqxW,GAAiBrnX,KAAKsnX,eACtBtnX,KAAKi2U,aACL,OASR,OANAj2U,KAAKk4U,SAAYmvC,EAAgBvqF,GAAc98R,KAAK03U,WAAa,EAC7D2vC,IAAkBjuT,IAClBiuT,EAAgBrxW,GAEpBhW,KAAKi2U,WAAa5pU,KAAKC,IAAI,EAAGtM,KAAKi2U,YACnCj2U,KAAKo+B,SAAWipV,EACTA,GAKXJ,EAAmB5rX,UAAUmsX,cAAgB,SAAU5/B,EAAI5xU,EAAOyxW,GAI9D,OAHIznX,KAAKs1B,aACLtf,EAAQhW,KAAKo+B,UAEVpoB,GAAgC,EAAtBhW,KAAKm2U,OAAO/8Q,QAAep5D,KAAKm2U,OAAOn0P,WAAahiF,KAAKm2U,OAAOyB,eAMrFqvC,EAAmB5rX,UAAU08U,eAAiB,SAAUD,EAAcv6U,EAAOo6U,EAAa4+B,EAAYljV,EAAMvU,EAAOq4T,GAC/G,IAAI/9Q,EAAUp5D,KAAKm2U,OAAO/8Q,QAC1B,GAAIp5D,KAAKs1B,WACDxW,IAAUq4T,GAAgBo/B,EAAW7oV,SAAS1gB,EAA0B,IAArBhN,KAAK62U,cAAkC,EAAVz9Q,EAAe/lC,EAAKrmB,EAAIqmB,EAAKtd,QAC7G+hU,EAAapqT,SAAS3gB,EAAIwpW,EAAW7oV,SAAS3gB,GAAM+R,IAAUq4T,EAAe,EAAIn3U,KAAKsnX,gBACtFxvC,EAAapqT,SAAS1gB,EAAIzP,EAAMyP,EAChChN,KAAKg2U,iBAAiBxxU,KAAKszU,EAAapqT,SAAS3gB,EAAK/M,KAAKm2U,OAAOn0P,WAAa,EAAK5oB,GACpFp5D,KAAK03U,eAGLI,EAAapqT,SAAS3gB,EAAIwpW,EAAW7oV,SAAS3gB,EAC9C+qU,EAAapqT,SAAS1gB,EAAIupW,EAAW7oV,SAAS1gB,EAAIhN,KAAK62U,cAAgBz9Q,OAG1E,CACD,IAAIo9S,EAAiBD,EAAW7oV,SAAS3gB,EAAI4qU,EAAc4+B,EAAW/5U,SAASxmB,MAC1EwgW,GAAiB1+B,EAAat7S,SAASxmB,MAAQ2hU,GAAiBtkT,EAAKtmB,EAAIsmB,EAAKrd,MAAQhW,KAAKm2U,OAAOn0P,WAAa,GAChH81P,EAAapqT,SAAS1gB,EAAK8R,IAAUq4T,EAAeo/B,EAAW7oV,SAAS1gB,EACpEupW,EAAW7oV,SAAS1gB,EAAIhN,KAAK62U,cAAgBz9Q,EACjD0+Q,EAAapqT,SAAS3gB,EAAIxP,EAAMwP,IAGhC+qU,EAAapqT,SAAS1gB,EAAIupW,EAAW7oV,SAAS1gB,EAC9C8qU,EAAapqT,SAAS3gB,EAAK+R,IAAUq4T,EAAeo/B,EAAW7oV,SAAS3gB,EAAIypW,GAEhFx2W,KAAK03U,WAAa13U,KAAKmnX,cAE3B,IAAIO,EAAiB1nX,KAAKwnX,cAAc1vC,EAAapqT,SAAS3gB,EAAG/M,KAAKw2U,aAAaxgU,MAAOhW,KAAKw2U,aAAazpU,GAC5G+qU,EAAarrT,KAAO0R,IAAUupV,EAAe1oW,QAAQ,GAAI84T,EAAarrT,KAAMzsB,KAAKm2U,OAAO/xC,YAO5F6iF,EAAmB5rX,UAAUgpX,uBAAyB,SAAUhE,EAAYsH,EAAalrV,GACrF,IAAIoB,EACJ,OAAQ79B,KAAKkU,UACT,IAAK,OACD2pB,GAAUwiV,EAAWtzW,EAAI46W,EAAY3xW,MAASymB,EAAOjwB,MAAQ,EAC7Dm7W,EAAY56W,EAAKszW,EAAWtzW,EAAI46W,EAAY3xW,MAASymB,EAAOjwB,KAAOm7W,EAAY56W,EAC1EszW,EAAWtzW,EAAI46W,EAAY3xW,MAAS6nB,EACzC,MACJ,IAAK,QACDA,GAAU79B,KAAK6wB,MAAM8E,cAAc3f,MAAQymB,EAAOhwB,OAAU4zW,EAAWtzW,EAAIszW,EAAWrqW,MAAQ2xW,EAAY3xW,QAAU,EACpH2xW,EAAY56W,EAAKszW,EAAWtzW,EAAIszW,EAAWrqW,MAAQ2xW,EAAY3xW,MAAUhW,KAAK6wB,MAAM8E,cAAc3f,MAAQymB,EAAOhwB,MAC7Gk7W,EAAY56W,EAAKszW,EAAWtzW,EAAIszW,EAAWrqW,MAAQ6nB,EACvD,MACJ,IAAK,MACD79B,KAAK4nX,aAAa5nX,KAAK6wB,OACvBgN,GAAUwiV,EAAWrzW,EAAI26W,EAAY5xW,QAAW/V,KAAKknX,UAAUl6W,EAAIhN,KAAKknX,UAAUnxW,SAAW,EAC7F4xW,EAAY36W,EAAKqzW,EAAWrzW,EAAI26W,EAAY5xW,OAAU0mB,EAAO/vB,IAAMi7W,EAAY36W,EAC1EqzW,EAAWrzW,EAAI26W,EAAY5xW,OAAU8nB,EAC1C,MACJ,IAAK,SACDA,GAAU79B,KAAK6wB,MAAM8E,cAAc5f,OAAS0mB,EAAO9vB,QAAW0zW,EAAWrzW,EAAIqzW,EAAWtqW,OAAS4xW,EAAY5xW,SAAW,EACxH4xW,EAAY36W,EAAIqzW,EAAWrzW,EAAIqzW,EAAWtqW,OAAS4xW,EAAY5xW,OAAU/V,KAAK6wB,MAAM8E,cAAc5f,OAAS0mB,EAAO9vB,OAC9Gg7W,EAAY36W,EAAKqzW,EAAWrzW,EAAIqzW,EAAWtqW,OAAU8nB,IAOrEopV,EAAmB5rX,UAAUusX,aAAe,SAAU3I,GAClD,IAAKA,EAAa/+U,MACd,OAAO,KAEX,IAAI+hS,EAAYz1S,GAAYyyV,EAAa/+U,MAAO++U,EAAav+U,YAC7D1gC,KAAKknX,UAAY,IAAIhxV,GAAK+oV,EAAatpV,cAAc3f,MAAQ,EAAIisT,EAAUjsT,MAAQ,EAAGipW,EAAaxiV,OAAO/vB,IAAKu1T,EAAUjsT,MAAOisT,EAAUlsT,SAK9IkxW,EAAmB5rX,UAAUwsX,cAAgB,SAAU51W,EAAOolU,GAC1D,IAAK,IAAIj5U,EAAK,EAAG0pX,EAAsBzwC,EAAmBj5U,EAAK0pX,EAAoBrrX,OAAQ2B,IAAM,CAC7F,IAAI+3U,EAAS2xC,EAAoB1pX,GACjC,GAAI+3U,EAAO/9S,aAAenmB,EACtB,OAAOkkU,EAGf,OAAO,MAMX8wC,EAAmB5rX,UAAUgrH,MAAQ,SAAU/pH,GAC3C,IAAIkqC,EAAWlqC,EAAM6K,OAAO7D,GACxBykX,GAAiB/nX,KAAKq2U,SAAW,SAAUr2U,KAAKq2U,SAAW,UAC3Dr2U,KAAKq2U,SAAW,kBAEhBr2U,KAAK6wB,MAAM6wV,6BACWhjX,KAAWsB,KAAK6wB,MAAM6wV,4BAA4BxjC,oBAAqB,MAAM,GAEvG,IAAK,IAAI9/U,EAAK,EAAGw4W,EAAkBmR,EAAe3pX,EAAKw4W,EAAgBn6W,OAAQ2B,IAAM,CACjF,IAAIkF,EAAKszW,EAAgBx4W,GACzB,GAAIooC,EAASjoC,QAAQ+E,IAAO,EAAG,CAC3B,IAAI80B,EAAarD,SAASyR,EAAStpC,MAAMoG,GAAI,GAAI,IAC7C0kX,EAAgBhoX,KAAK6wB,MAAMoQ,cAAc,GACzCnN,EAAQqN,GAAa/I,EAAY4vV,EAAcrwV,QAC/CmgT,EAAe93U,KAAK6nX,cAAczvV,EAAYp4B,KAAKq3U,mBACnDr3U,KAAK6wB,MAAMulT,eAAe6B,kBAC1BnkT,EAAM0D,SAAW1D,EAAM0D,QACvBsgT,EAAatgT,QAAU1D,EAAM0D,QAC7Bx3B,KAAK6wB,MAAM6uT,YACP5rT,EAAM0D,QACNwwV,EAAchJ,aAAelrV,EAAM9mB,EAGnCg7W,EAAchJ,aAAelrV,EAAM9mB,EAEvChN,KAAK6wB,MAAMyzV,cAAc0D,EAAcrwV,QACvC33B,KAAK6wB,MAAMurT,kBAENp8U,KAAK6wB,MAAM6wV,6BAChB1hX,KAAK6wB,MAAM6wV,4BAA4BpT,gBAAgBtuW,KAAK6wB,MAAO,EAAGuH,IAI9EoO,EAASjoC,QAAQyB,KAAKq2U,SAAW,YAAc,EAC/Cr2U,KAAKs5U,WAAWh9U,GAAO,GAElBkqC,EAASjoC,QAAQyB,KAAKq2U,SAAW,cAAgB,GACtDr2U,KAAKs5U,WAAWh9U,GAAO,IAM/B2qX,EAAmB5rX,UAAUkkC,cAAgB,WACzC,MAAO,sBAOX0nV,EAAmB5rX,UAAUiX,QAAU,SAAUue,KAK1Co2V,GACTpxC,ICrUEvrP,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAyBxCs9R,GAAuC,SAAU98R,GAEjD,SAAS88R,EAAsBhJ,GAC3B,IAAIl/W,EAAQorF,EAAO7pF,KAAKtB,KAAMi/W,IAAiBj/W,KAE/C,GADAD,EAAMuD,GAAK27W,EAAaj+W,QAAQsC,GAAK,qBACjC27W,EAAa/+U,MAAO,CACpB,IAAI+hS,EAAYz1S,GAAYyyV,EAAa/+U,MAAO++U,EAAav+U,YAC7D3gC,EAAMmnX,UAAY,IAAIhxV,GAAK+oV,EAAatpV,cAAc3f,MAAQ,EAAIisT,EAAUjsT,MAAQ,EAAGipW,EAAaxiV,OAAO/vB,IAAKu1T,EAAUjsT,MAAOisT,EAAUlsT,QAE/I,OAAOhW,EA2kBX,OAnlBAuqF,GAAU29R,EAAuB98R,GAcjC88R,EAAsB5sX,UAAU6sX,qBAAuB,SAAUp0V,EAAOmtD,EAAWzkD,EAAU7E,EAAQr3B,EAAQgD,GACzG,IAAIsJ,EAAS5M,KAAKmhX,aAAenhX,KAAKkhX,YAAclhX,KAAKmoX,iBAAiBr0V,EAAOmtD,GACjFjhF,KAAKooX,eAAet0V,EAAOmtD,EAAU/sE,SAAUsoB,EAAU5vB,EAAQ5M,KAAKqoX,aACtEv0V,EAAMw0V,WAAax0V,EAAM+tV,SACzB/tV,EAAM2rF,cAAgBx+B,EAAU/sE,SAC5BlU,KAAKi/W,aAAasJ,mBAClBvoX,KAAKwoX,cAAc10V,EAAOmtD,EAAWzkD,EAAU7E,EAAQr3B,EAAQgD,IAMvE2kX,EAAsB5sX,UAAU+sX,eAAiB,SAAUt0V,EAAO5f,EAAUsoB,EAAU0kV,EAAazkV,EAAQuI,QACtF,IAAbA,IAAuBA,EAAW,GACtC,IAAIsjV,EAAatjV,GAAYlR,EAAM+tV,SAE/Bn0V,EAAW8F,GAAiB80V,EAAYpH,EAAalhX,KAAKmhX,aAAenhX,KAAK0zB,OAC9E1zB,KAAK+xW,iBAAiBj+U,EAAO5f,IACjCwZ,EAAS1gB,EAAkB,WAAbkH,EAA0BwZ,EAAS1gB,EAAIwvB,EAASzmB,OAAS,EAAK2X,EAAS1gB,EACrF0gB,EAAS3gB,EAAkB,WAAbmH,EAA0BwZ,EAAS3gB,EAAIyvB,EAASxmB,MAAQ,EAAK0X,EAAS3gB,EACpF+mB,EAAMg+U,YAAc,IAAI57U,GAAKxI,EAAS3gB,EAAG2gB,EAAS1gB,EAAGwvB,EAASxmB,MAAkB,EAATymB,EAAaD,EAASzmB,OAAmB,EAAT0mB,GACtF,YAAbvoB,IACA4f,EAAMg+U,YAAY9kW,GAAK8mB,EAAMg+U,YAAY/7V,OAAS,EAC9CuyW,GAAc,IAAMA,GAAc,IAClCx0V,EAAMg+U,YAAY/kW,GAAM+mB,EAAMg+U,YAAY97V,MATtC,GAYJ8d,EAAMg+U,YAAY/kW,GAZd,KAmBhBk7W,EAAsB5sX,UAAUmtX,cAAgB,SAAU10V,EAAOmtD,EAAWzkD,EAAU7E,EAAQr3B,EAAQgD,GAClG,IAAImlX,EAAWzoX,KAAKmhX,aAChBD,EAAcuH,EAAWzoX,KAAK4M,OAAS5M,KAAKmoX,iBAAiBr0V,EAAOmtD,GAGxEigS,GAAe7iV,GAFOoqV,EAAYxnS,EAAUqhS,eAAe7lX,QAAU,KACjE,MAC2CykX,GAC/C,IAAI9uV,EAAgBpyB,KAAK0oX,kBAAkB/wV,EAAQ7D,EAAM7hB,MAAO6hB,EAAM2rF,eAyBtE,GAxB2B,WAAvBx+B,EAAU/sE,UACNke,GAAiBA,EAAc0/U,cAAgBz1U,GAAUvI,EAAMg+U,YAAa1/U,EAAc0/U,cACvF9xW,KAAK2oX,cAAc70V,EAAO6D,MAAa8wV,IAAansV,GAAaxI,EAAMo4B,OAAQp4B,EAAMg+U,gBACxFh+U,EAAM2rF,cAAgB,UACjBgpQ,IACDvH,EAAclhX,KAAKmoX,iBAAiBr0V,EAAOmtD,IAE/CjhF,KAAKooX,eAAet0V,EAAOA,EAAM2rF,cAAejjF,EAAU0kV,EAAalhX,KAAKqoX,cAC5Ej2V,EAAgBpyB,KAAK0oX,kBAAkB/wV,EAAQ7D,EAAM7hB,MAAO6hB,EAAM2rF,kBAC5CpjF,GAAUvI,EAAMg+U,YAAa1/U,EAAc0/U,cAC7D9xW,KAAK4oX,2BAA2B90V,EAAO1B,KACvCpyB,KAAK6oX,mBAAmBz2V,EAAe0B,EAAOmtD,EAAU38C,OAAOtuB,MAAOkrW,EAAa1kV,EAAUx8B,KAAKqoX,cAKtGj2V,GAAiBA,EAAc0/U,cAAgBz1U,GAAUvI,EAAMg+U,YAAa1/U,EAAc0/U,cACvF9xW,KAAK2oX,cAAc70V,EAAO6D,IAAW33B,KAAK4oX,2BAA2B90V,EAAO1B,KAC/EpyB,KAAK6oX,mBAAmBz2V,EAAe0B,EAAOmtD,EAAU38C,OAAOtuB,MAAOkrW,EAAa1kV,EAAUx8B,KAAKqoX,cAGtGroX,KAAK2oX,cAAc70V,EAAO6D,IAAY33B,KAAKknX,WAAapzV,EAAMg+U,aAAez1U,GAAUvI,EAAMg+U,YAAa9xW,KAAKknX,aAC/GlnX,KAAK8oX,sBAAsBh1V,GAE3B9zB,KAAKi/W,aAAasB,0BAA4BzsV,EAAMgrV,cAAgBhrV,EAAMg+U,YAAa,CACvF,IAAIz+U,EAAOrzB,KAAKi/W,aAAasB,yBAAyB/pC,aAClDp9Q,EAAUp5D,KAAKi/W,aAAa7oC,eAAe9xS,OAAOtuB,MAAQ,EAC9DhW,KAAK+oX,aAAaj1V,EAAO,IAAIoC,GAAK7C,EAAKtmB,EAAIqsD,EAAS/lC,EAAKrmB,EAAIosD,EAAS/lC,EAAKrd,MAAS,EAAIojD,EAAU/lC,EAAKtd,OAAU,EAAIqjD,GAAW6nB,EAAUv0D,KAAM1sB,KAAKi/W,aAAasB,yBAAyBrsW,UAE/L,GAAI4f,EAAMgrV,cAAgBhrV,EAAMg+U,YAAa,CACzC,IAAI59V,EAAWlU,KAAKmhX,aAAgBrtV,EAAMg+U,YAAY/kW,GAAK/M,KAAK0zB,OAAO3mB,EAAK,cAAgB,aACxF,cACJ/M,KAAK+oX,aAAaj1V,EAAO9zB,KAAK+/E,SAAUkB,EAAUv0D,KAAMxY,GAExD4f,EAAMgrV,cAAgBhrV,EAAMg+U,cAAiBh+U,EAAMg+U,YAAY9kW,EAAI8mB,EAAMg+U,YAAY/7V,OACrF/V,KAAK+/E,SAAS/yE,EAAIhN,KAAK+/E,SAAShqE,QAAU+d,EAAMg+U,YAAY9kW,EAAIhN,KAAK+/E,SAAS/yE,GAAO8mB,EAAMg+U,YAAY/kW,EAAI/M,KAAK+/E,SAAShzE,GACzH+mB,EAAMg+U,YAAY/kW,EAAI+mB,EAAMg+U,YAAY97V,MAAQhW,KAAK+/E,SAAShzE,EAAI/M,KAAK+/E,SAAS/pE,QAChFhW,KAAK8oX,sBAAsBh1V,IAQnCm0V,EAAsB5sX,UAAUguF,KAAO,SAAUxoF,EAAGkM,EAAGC,EAAG4kB,GACtD,IAAI7xB,EAAQC,KACZ,GAAIa,EAAEsG,OAAO0U,YAAYtd,QAAQ,QAAU,EAAG,CAC1C,IAAIioC,EAAW3lC,EAAEsG,OAAO7D,GAAGpG,MAAM8C,KAAKsD,IACtC,GAAwB,IAApBkjC,EAAS/pC,OAAc,CACvB,IAAIwgU,EAAcloS,SAASyR,EAAS,GAAGtpC,MAAM,UAAU,GAAI,IACvDk7B,EAAarD,SAASyR,EAAS,GAAGtpC,MAAM,UAAU,GAAI,IAC1D,IAAK8kD,MAAMi7Q,KAAiBj7Q,MAAM5pB,GAAa,CACvCxG,GACApE,GAAcxtB,KAAKi/W,aAAaj+W,QAAQsC,GAAK,0BAEjD,IAAIwwB,EAAQkN,GAAmBi8R,EAAcj9T,KAAiB,aAAEihC,eAAetJ,OAAOS,GACtF1G,GAAYoC,EAAMrH,MAAQqH,EAAM9mB,EAAEE,WAAYH,EAAGC,EAAGhN,KAAK+/E,SAAS/pE,MAAOhW,KAAKi/W,aAAaj+W,QAAQsC,GAAK,yBAA0BiqB,GAAWvtB,KAAKi/W,aAAaj+W,QAAQsC,GAAK,8BAKpLkqB,GAAcxtB,KAAKi/W,aAAaj+W,QAAQsC,GAAK,0BAE7CsuB,IACA1xB,aAAaF,KAAKw5U,cAClBx5U,KAAKw5U,aAAer5U,WAAW,WAAcqtB,GAAcztB,EAAMk/W,aAAaj+W,QAAQsC,GAAK,2BAA8B,OAMjI2kX,EAAsB5sX,UAAUqtX,kBAAoB,SAAU/wV,EAAQ1lB,EAAOiC,GAEzE,IAAK,IADD4f,EAAQ6D,EAAO,GACVx7B,EAAI8V,EAAQ,EAAG9V,GAAK,EAAGA,IAE5B,IADA23B,EAAQ6D,EAAOx7B,IACLq7B,SAAW1D,EAAMgrV,cAAgBhrV,EAAMg+U,aAAeh+U,EAAM2rF,gBAAkBvrG,EACpF,OAAO4f,EAGf,OAAO,MAKXm0V,EAAsB5sX,UAAUstX,cAAgB,SAAUt2V,EAAcsF,GACpE,IAAK,IAAIx7B,EAAIk2B,EAAapgB,MAAQ,EAAG9V,GAAK,EAAGA,IACzC,GAAIw7B,EAAOx7B,GAAGq7B,SAAWG,EAAOx7B,GAAG2iX,cAAgBnnV,EAAOx7B,GAAG21W,aAAez/U,EAAay/U,aACrFz/U,EAAaysV,cAAgBziV,GAAUhK,EAAay/U,YAAan6U,EAAOx7B,GAAG21W,aAC3E,OAAO,EAGf,OAAO,GAKXmW,EAAsB5sX,UAAU0tX,aAAe,SAAUj1V,EAAOT,EAAM3G,EAAMxY,GACxE,GAAImoB,GAAUvI,EAAMg+U,YAAaz+U,GAAO,CACpC,IAAIvG,EAAOgH,EAAMg+U,YAAY97V,MACZ,UAAb9B,EACA4Y,EAAOuG,EAAKtmB,EAAI+mB,EAAMg+U,YAAY/kW,EAEhB,SAAbmH,GACL4Y,EAAOgH,EAAMg+U,YAAY/kW,GAAKsmB,EAAKtmB,EAAIsmB,EAAKrd,QACjC,IACP8W,GAAQgH,EAAMg+U,YAAY97V,MAC1B8d,EAAMg+U,YAAY/kW,EAAIsmB,EAAKtmB,EAAIsmB,EAAKrd,OAGtB,gBAAb9B,EACL4Y,EAAQuG,EAAKtmB,EAAIsmB,EAAKrd,MAAS8d,EAAMg+U,YAAY/kW,EAE/B,eAAbmH,GACL4Y,EAAQgH,EAAMg+U,YAAY/kW,EAAI+mB,EAAMg+U,YAAY97V,MAASqd,EAAKtmB,GACnD+mB,EAAMg+U,YAAY97V,QACzB8d,EAAMg+U,YAAY/kW,EAAIsmB,EAAKtmB,GAI/B/M,KAAK8oX,sBAAsBh1V,GAE3BA,EAAMgrV,cAAgBhrV,EAAMg+U,cACxBhlV,EAAOgH,EAAMg+U,YAAY97V,QACzB8d,EAAMzgB,MAAQ8qB,GAASrR,EAA2B,EAAnB9sB,KAAKqoX,YAAkBv0V,EAAMzgB,MAAOqZ,GACnEoH,EAAMg+U,YAAY97V,MAAQ8W,GAEH,IAAvBgH,EAAMzgB,MAAM5W,QAAgBq3B,EAAMzgB,MAAM9U,QAAQ,QAAU,GAC1DyB,KAAK8oX,sBAAsBh1V,MAQ3Cm0V,EAAsB5sX,UAAUytX,sBAAwB,SAAUh1V,GAC9DA,EAAMgrV,cAAe,EACrBhrV,EAAMg+U,YAAc,MAKxBmW,EAAsB5sX,UAAUwtX,mBAAqB,SAAUz2V,EAAe0B,EAAOwQ,EAAQ48U,EAAa8H,EAAUvsV,GAChH,GAAKz8B,KAAKmhX,aAGL,CACD,IAAImH,EAAatoX,KAAKipX,mBAAmB72V,EAAc0/U,YAAah+U,EAAMg+U,YAAah+U,EAAM+tV,SAAmB,EAATv9U,GAMvG,IALAtkC,KAAKooX,eAAet0V,EAAO,UAAWk1V,EAAU9H,EAAazkV,EAAQ6rV,GACjEA,EAAax0V,EAAMkR,UACnBhlC,KAAK8oX,sBAAsBh1V,GAE/BA,EAAMw0V,WAAaA,EACZx0V,EAAMgrV,eAAiBziV,GAAUjK,EAAc0/U,YAAah+U,EAAMg+U,cAAgBwW,GAAcl2V,EAAck2V,YAC9GtoX,KAAK4oX,2BAA2B90V,EAAO1B,KAAiB,CAC3D,GAAIk2V,EAAax0V,EAAMkR,SAAU,CAC7BhlC,KAAK8oX,sBAAsBh1V,GAC3B,MAEJA,EAAMw0V,WAAaA,EACnBtoX,KAAKooX,eAAet0V,EAAO,UAAWk1V,EAAU9H,EAAazkV,EAAQ6rV,GACrEA,GAAc,SAjBlBtoX,KAAKkpX,yBAAyBp1V,EAAO1B,EAAe8uV,EAAa8H,EAAUvsV,IAwBnFwrV,EAAsB5sX,UAAU6tX,yBAA2B,SAAUp1V,EAAO21T,EAAWpvS,EAAU7d,EAAUC,GACvG,IAAI0sV,EAAar1V,EAAMg+U,YAEnBsX,EAA2C,WAA3BppX,KAAKi/W,aAAav4W,KAClC+iV,EAAUqoB,YAAY9kW,GAAKm8W,EAAWn8W,EAAIm8W,EAAWpzW,QACrD+d,EAAMg+U,YAAY9kW,GAAKy8U,EAAUqoB,YAAY9kW,EAAIy8U,EAAUqoB,YAAY/7V,QACvEqzW,EAAgB,IAChBt1V,EAAMg+U,YAAY9kW,GAAgC,WAA3BhN,KAAKi/W,aAAav4W,KAAoB0iX,GAAiBA,IAMtFnB,EAAsB5sX,UAAUutX,2BAA6B,SAAU90V,EAAOy2G,GAC1E,IAAIhtI,EAAQyC,KAAK+xW,iBAAiBj+U,GAC9BjV,EAAM,IAAI+U,GAAc,EAAG,GAC/B5zB,KAAKqpX,eAAev1V,EAAMg+U,YAAah+U,EAAMw0V,WAAYzpW,GACzD,IAAIyqW,EAAgBtpX,KAAK+xW,iBAAiBxnO,GACtCg/O,EAAc,IAAI31V,GAAc,EAAG,GAEvC,OADA5zB,KAAKqpX,eAAe9+O,EAASunO,YAAavnO,EAAS+9O,WAAYiB,GACxDvpX,KAAKwpX,yBAAyBjsX,EAAOshB,EAAKiV,EAAMg+U,cACnD9xW,KAAKwpX,yBAAyBjsX,EAAOshB,EAAK0rH,EAASunO,cACnD9xW,KAAKwpX,yBAAyBF,EAAeC,EAAaz1V,EAAMg+U,cAKxEmW,EAAsB5sX,UAAUmuX,yBAA2B,SAAUC,EAAOC,EAAOr2V,GAC/E,IAAI+5S,GACA,IAAIx5S,GAAcvnB,KAAKoxB,MAAMpK,EAAKtmB,GAAIV,KAAKoxB,MAAMpK,EAAKrmB,IACtD,IAAI4mB,GAAcvnB,KAAKoxB,MAAOpK,EAAKtmB,EAAIsmB,EAAKrd,OAAS3J,KAAKoxB,MAAMpK,EAAKrmB,IACrE,IAAI4mB,GAAcvnB,KAAKoxB,MAAOpK,EAAKtmB,EAAIsmB,EAAKrd,OAAS3J,KAAKoxB,MAAOpK,EAAKrmB,EAAIqmB,EAAKtd,SAC/E,IAAI6d,GAAcvnB,KAAKoxB,MAAMpK,EAAKtmB,GAAIV,KAAKoxB,MAAOpK,EAAKrmB,EAAIqmB,EAAKtd,UAEpE0zW,EAAM18W,EAAIV,KAAKoxB,MAAMgsV,EAAM18W,GAC3B08W,EAAMz8W,EAAIX,KAAKoxB,MAAMgsV,EAAMz8W,GAC3B08W,EAAM38W,EAAIV,KAAKoxB,MAAMisV,EAAM38W,GAC3B28W,EAAM18W,EAAIX,KAAKoxB,MAAMisV,EAAM18W,GAC3B,IAAK,IAAI7Q,EAAI,EAAGA,EAAIixU,EAAW3wU,OAAQN,IACnC,GAAI6D,KAAK2pX,iBAAiBF,EAAOC,EAAOt8C,EAAWjxU,GAAIixU,GAAYjxU,EAAI,GAAKixU,EAAW3wU,SACnF,OAAO,EAGf,OAAO,GAKXwrX,EAAsB5sX,UAAUsuX,iBAAmB,SAAUvmU,EAAQ/a,EAAQuhV,EAASC,GAClF,IAAIxnU,EAAKha,EAAOr7B,EAAIo2C,EAAOp2C,EACvBu1C,EAAKa,EAAOr2C,EAAIs7B,EAAOt7B,EACvB01C,EAAKJ,EAAKe,EAAOr2C,EAAIw1C,EAAKa,EAAOp2C,EACjCs1C,EAAKunU,EAAQ78W,EAAI48W,EAAQ58W,EACzBw1C,EAAKonU,EAAQ78W,EAAI88W,EAAQ98W,EACzB21C,EAAKJ,EAAKsnU,EAAQ78W,EAAIy1C,EAAKonU,EAAQ58W,EACnCioB,EAAQotB,EAAKG,EAAKF,EAAKC,EAC3B,GAAc,IAAVttB,EAAa,CACb,IAAIloB,GAAKy1C,EAAKC,EAAKF,EAAKG,GAAMztB,EAC1BjoB,GAAKq1C,EAAKK,EAAKJ,EAAKG,GAAMxtB,EAC1B60V,EAAOz9W,KAAK0T,IAAIqjC,EAAOr2C,EAAGs7B,EAAOt7B,IAAMA,GAAKA,GAAKV,KAAKC,IAAI82C,EAAOr2C,EAAGs7B,EAAOt7B,GAI/E,OAHA+8W,EAAOA,GAAQz9W,KAAK0T,IAAIqjC,EAAOp2C,EAAGq7B,EAAOr7B,IAAMA,GAAKA,GAAKX,KAAKC,IAAI82C,EAAOp2C,EAAGq7B,EAAOr7B,GACnF88W,EAAOA,GAAQz9W,KAAK0T,IAAI6pW,EAAQ78W,EAAG88W,EAAQ98W,IAAMA,GAAKA,GAAKV,KAAKC,IAAIs9W,EAAQ78W,EAAG88W,EAAQ98W,GACvF+8W,EAAOA,GAAQz9W,KAAK0T,IAAI6pW,EAAQ58W,EAAG68W,EAAQ78W,IAAMA,GAAKA,GAAKX,KAAKC,IAAIs9W,EAAQ58W,EAAG68W,EAAQ78W,GAG3F,OAAO,GAKXi7W,EAAsB5sX,UAAU4tX,mBAAqB,SAAUrqX,EAAOC,EAAQ0iB,EAAO63C,GACjF,IAAIrsD,EAAInO,EAAMmO,EAQd,OAPIwU,GAAS,IAAMA,GAAS,KACxB1iB,EAAOmO,EAAIpO,EAAMoO,GAAKosD,EAAUv6D,EAAOkX,OAAS,GAChDhJ,EAAInO,EAAMmO,EAAInO,EAAMoX,OAGpBnX,EAAOmO,EAAIpO,EAAMoO,EAAIpO,EAAMmX,OAASqjD,EAEjCvlC,GAAS7zB,KAAK0zB,OAAQ,IAAIE,GAAc7mB,EAAGlO,EAAOmO,KAK7Di7W,EAAsB5sX,UAAU0uX,iBAAmB,SAAU12W,EAAOygB,EAAOmtD,EAAWpiE,QACtE,IAARA,IAAkBA,EAAM,GAC5B,IAAIghC,EAAYohC,EAAUqhS,eACtBpB,EAAclhX,KAAKmhX,aAAenhX,KAAKkhX,YAAclhX,KAAKmoX,iBAAiBr0V,EAAOmtD,GAClF1jF,EAAQyC,KAAKgqX,uBAAuBl2V,EAAO+rB,GAC3CyoU,EAAazpW,GAAOiV,EAAM+tV,SAC1B9yU,EAAS,IAAInb,GAAc,EAAG,GAC9B4rB,EAAWx/C,KAAKqpX,eAAeh2W,EAAOi1W,EAAYv5U,EAAQ8Q,EAAU7pC,OACxE,GAAuB,UAAnB6pC,EAAUn5C,KAAkB,CAC5B,GAAI1G,KAAKmhX,aAAc,CAGnB,OADApyU,EAASvb,GAAiB80V,EAAYpH,GAD9BA,EAAclhX,KAAK4M,QAC8B,EAAI5M,KAAK0zB,QAC3D,KAAOn2B,EAAMwP,EAAI,IAAMxP,EAAMyP,EAAI,KAAO+hC,EAAOhiC,EAAI,IAAMgiC,EAAO/hC,EAAI,IAAMwyC,EAASzyC,EAAI,IAAMyyC,EAASxyC,EAG7G,OAAOhN,KAAKiqX,gBAAgB1sX,EAAOiiD,GAIvC,MAAO,KAAOjiD,EAAMwP,EAAI,IAAMxP,EAAMyP,EAAI,MAAQ+hC,EAAOhiC,EAAI,IAAMgiC,EAAO/hC,EAAI,MAAQwyC,EAASzyC,EAAI,IAAMyyC,EAASxyC,GAMxHi7W,EAAsB5sX,UAAU4uX,gBAAkB,SAAU1sX,EAAOshB,GAC/D,IAAIqrW,GAAiB3sX,EAAOshB,GAC5B,GAAIthB,EAAMyP,IAAM6R,EAAI7R,EAChB,MAAO,KAAOzP,EAAMwP,EAAI,IAAMxP,EAAMyP,EAAI,MAAQ6R,EAAI9R,EAAI,IAAM8R,EAAI7R,EAGtE,IAAK,IADD+P,EAAO,IACF5gB,EAAI,EAAGA,GAAK,GAAIA,IAAK,CAC1B,IAAI6yC,EAAI7yC,EAAI,GACRw7B,EAAS33B,KAAKmqX,eAAen7U,EAAGk7U,EAAe,EAAG,GACtDntW,GAAQ4a,EAAO5qB,EAAI,IAAM4qB,EAAO3qB,EACtB,KAAN7Q,IACA4gB,GAAQ,MAGhB,OAAOA,GAKXkrW,EAAsB5sX,UAAU8uX,eAAiB,SAAUn7U,EAAGk7U,EAAej4W,EAAO6M,GAChF,GAAc,IAAVA,EACA,OAAOorW,EAAcj4W,GAEzB,IAAIm4W,EAAKpqX,KAAKmqX,eAAen7U,EAAGk7U,EAAej4W,EAAO6M,EAAQ,GAC1Di5Q,EAAK/3R,KAAKmqX,eAAen7U,EAAGk7U,EAAej4W,EAAQ,EAAG6M,EAAQ,GAC9D/R,GAAKq9W,EAAI,EAAIA,EAAGr9W,GAChBC,GAAKo9W,EAAI,EAAIA,EAAGp9W,GAGhBkuB,GAAM,EAAI8T,GAAKjiC,EAAIiiC,GAFb+oP,EAAI,EAAIA,EAAGhrR,GAGjBouB,GAAM,EAAI6T,GAAKhiC,EAAIgiC,GAFb+oP,EAAI,EAAIA,EAAG/qR,GAGrB,OAAIo9W,EAAGr9W,GACMA,EAAGmuB,EAAIluB,EAAGmuB,IAS3B8sV,EAAsB5sX,UAAUguX,eAAiB,SAAUgB,EAAY9oW,EAAOwtB,EAAQzK,QACnE,IAAXA,IAAqBA,EAAS,GAClC,IAAI3rB,EAAO,IAAIib,GAAcy2V,EAAWt9W,EAAGs9W,EAAWr9W,GAatD,OAZIuU,GAAS,IAAMA,GAAS,KACxB5I,EAAK5L,GAAKs9W,EAAWr0W,MAAQsuB,EAAS,EACtC3rB,EAAK3L,GAAKq9W,EAAWt0W,OAAS,EAC9Bg5B,EAAOhiC,EAAI4L,EAAK5L,EAAI,GACpBgiC,EAAO/hC,EAAI2L,EAAK3L,IAGhB2L,EAAK5L,GAAKu3B,EAAS,EACnB3rB,EAAK3L,GAAKq9W,EAAWt0W,OAAS,EAC9Bg5B,EAAOhiC,EAAI4L,EAAK5L,EAAI,GACpBgiC,EAAO/hC,EAAI2L,EAAK3L,GAEb2L,GAKXsvW,EAAsB5sX,UAAU8sX,iBAAmB,SAAUr0V,EAAOmtD,GAChE,GAAIntD,EAAM2rF,eAAiBx+B,EAAU/sE,WAAa4f,EAAM2rF,eAAiBx+B,EAAUqhS,eAAe7lX,OAAQ,CACtG,IAAIg+B,EAAW4D,GAAe4iD,EAAUqhS,eAAe7lX,QAAU,OAAQuD,KAAKi/W,aAAan6C,gBAAgB9uT,OAC3G,GAAIykB,EAAWz6B,KAAKi/W,aAAan6C,gBAAgB9uT,MAC7C,OAAOykB,EAGf,IAGI+3U,EAHAt+V,EAAW4f,EAAM2rF,eAAiBx+B,EAAU/sE,SAC5C0K,EAAS5e,KAAKi/W,aAAah+U,cAAc,GACzCyxU,GAAc1yW,KAAKi/W,aAAan6C,gBAAgB9uT,MAAQ4I,EAAO+lW,aAAa3uW,OAAS,EAEzF,OAAQ9B,GACJ,IAAK,SACD,OAAO,EACX,IAAK,UAED,OADAs+V,EAAgB1+U,EAAM6xQ,eAAe54R,EAAI+mB,EAAMwxV,YAAYv4W,EACpD/M,KAAKi/W,aAAan6C,gBAAgB9uT,MAAQw8V,EAAgBE,IAM7EuV,EAAsB5sX,UAAU02W,iBAAmB,SAAUj+U,EAAO5f,GAEhE,QADiB,IAAbA,IAAuBA,EAAW,WACP,QAA3BlU,KAAKi/W,aAAav4W,KAAgB,CAClCwN,EAAW4f,EAAM2rF,eAAiBvrG,EAClC,IAAI++O,GACAlmP,EAAG+mB,EAAM6xQ,eAAe54R,EACxBC,EAAG8mB,EAAM6xQ,eAAe34R,EAAI8mB,EAAMwxV,YAAYt4W,GAElD,OAAQkH,GACJ,IAAK,SACD++O,EAAWjmP,EAAI8mB,EAAMo4B,OAAOl/C,EAAI8mB,EAAMo4B,OAAOn2C,OAAS,EACtD,MACJ,IAAK,UACDk9O,EAAWlmP,GAAK+mB,EAAMwxV,YAAYv4W,EAE1C,OAAOkmP,EAGP,OAAOz/N,GAAiBM,EAAM+tV,SAAU7hX,KAAK4M,OAAQ5M,KAAK0zB,SAMlEu0V,EAAsB5sX,UAAU2uX,uBAAyB,SAAUl2V,EAAO+rB,GACtE,OAAO7/C,KAAKmhX,aAAe3tV,GAAiBM,EAAM+tV,SAAU7hX,KAAK4M,OAASizC,EAAU7pC,MAAOhW,KAAK0zB,QAC5F1zB,KAAK+xW,iBAAiBj+U,IAM9Bm0V,EAAsB5sX,UAAUulX,aAAe,WAC3C5gX,KAAK+/E,SAAW,IAAI7pD,GAAK,EAAG,EAAGl2B,KAAKi/W,aAAatpV,cAAc3f,MAAOhW,KAAKi/W,aAAatpV,cAAc5f,QACtG,IAAI0mB,EAASz8B,KAAKi/W,aAAaxiV,OAC/BrJ,GAAkBpzB,KAAK+/E,SAAU,IAAIskP,GAAU5nS,EAAOjwB,KAAMiwB,EAAOhwB,MAAOgwB,EAAO/vB,IAAK+vB,EAAO9vB,UAKjGs7W,EAAsB5sX,UAAU8kX,gBAAkB,SAAUrsV,EAAOmtD,EAAW3gF,EAAQq3B,EAAQ/Y,EAAQyb,GAClG,IAAI/2B,EAAKtD,KAAKi/W,aAAaj+W,QAAQsC,GAAK,qBAAuBsb,EAAS,IACpEqhW,EAAiBjgX,KAAKi/W,aAAapxV,SAASw+C,aAAc/oE,GAAIA,EAAK,KAAOwwB,EAAM7hB,QACpF6hB,EAAMzgB,MAAQygB,EAAMuvS,cAAgBvvS,EAAM9mB,EAAEE,WAC5C,IAAIo3B,GAAWtuB,MAAOirE,EAAU38C,OAAOtuB,MAAOwgB,MAAOyqD,EAAU38C,OAAO9N,OAClEoC,GACAC,QAAQ,EAAOpB,KAAM4nS,GAAYzgT,OAAQ5e,KAAKi/W,aAAah+U,cAAc,GAAInN,MAAOA,EACpFrH,KAAMqH,EAAMzgB,MAAOixB,OAAQA,EAAQ9N,MAAOyqD,EAAUrjD,KAAM3uB,SAAUgyE,EAAUhyE,UAElFjP,KAAKi/W,aAAaz4V,QAAQ64S,GAAYzmS,GACtC,IAAIwmR,EAAmC,OAAtBxmR,EAAS3pB,SAC1B6kB,EAAMgrV,cAAgBlmV,EAASC,OAC/B/E,EAAMrH,KAAOqH,EAAMzgB,MAAQulB,EAASnM,KACpCzsB,KAAKqoX,YAAczvV,EAAS0L,OAAOtuB,MAAS,EAAI4iB,EAAS0L,OAAOtuB,MAAS,EAEzE,IAAImkB,EAAeh5B,EAAc,OAC7BmC,GAAItD,KAAKi/W,aAAaj+W,QAAQsC,GAAK,uBAAiCwwB,EAAM7hB,MAC1E1O,OAAQ,uCAAyCq1B,EAASpC,MAAQ,IAC9D8D,GAAa2mD,EAAUv0D,MAAQ,WAAakM,EAAS0L,OAAOtuB,MAAQ,YAAc4iB,EAAS0L,OAAO9N,MAAQ,MAE9GgG,EAAW4iR,EAAap/S,KAAKsqX,gBAAgBnwV,EAAcrG,EAAO8E,GAClEpM,GAAYsH,EAAMzgB,MAAO4tE,EAAUv0D,MAIvC,GAHA8P,EAASzmB,QAAU,EACnBymB,EAASxmB,OAAS,EAClBhW,KAAKkoX,qBAAqBp0V,EAAOmtD,EAAWzkD,EAAU7E,EAAQsoV,EAAgB38W,GAC1EwwB,EAAMgrV,aAAc,CAYpB,GAXA9+W,KAAKuqX,mBAAmBz2V,EAAMg+U,YAAat1U,GACvC4iR,EACAp/S,KAAKwqX,iBAAiBrwV,EAAcrG,EAAOuG,EAAiB4mD,EAAUv0D,KAAK8J,MAAOoC,EAASpC,QAG3FypV,EAAet+W,YAAY3B,KAAKi/W,aAAapxV,SAAS8V,cAAc,IAAIugS,GAAW5gU,EAAK,SAAWwwB,EAAM7hB,MAAO2mB,EAASpC,MAAOoC,EAAS0L,OAAQ,EAAGxQ,EAAMg+U,YAAa7wR,EAAU9yD,GAAI8yD,EAAU7yD,MAC/LkI,GAAY,IAAIC,GAAWjzB,EAAK,QAAUwwB,EAAM7hB,MAAO6hB,EAAMg+U,YAAY/kW,EAAI/M,KAAKqoX,YAAav0V,EAAMg+U,YAAY9kW,EAAuB,EAAlBwvB,EAASzmB,OAAa,EAAK/V,KAAKqoX,YAAa,QAASv0V,EAAMzgB,MAAO,GAAI,QAAS4tE,EAAUv0D,KAAMu0D,EAAUv0D,KAAK8J,OAASx2B,KAAKyqX,kBAAkB32V,EAAO8E,EAASpC,OAAQypV,IAE7RjgX,KAAKi/W,aAAasB,2BAAoD,YAAvBt/R,EAAU/sE,UAA0BlU,KAAKi/W,aAAasJ,oBACrGvoX,KAAKi/W,aAAah+U,cAAc,GAAGm/U,cAAcpgX,KAAKi/W,aAAah+U,cAAc,GAAGo/U,WAAYvsV,EAAMg+U,aAE9E,YAAxBh+U,EAAM2rF,cAA6B,CACnC,IAAI1iG,EAAO/c,KAAK+pX,iBAAiBrrX,KAAWo1B,EAAMg+U,YAAa,MAAM,GAAOh+U,EAAOmtD,EAAWntD,EAAMw0V,YAChGjlF,EAAcrjS,KAAKi/W,aAAapxV,SAASsI,SAAS,IAAIC,GAAW9yB,EAAK,aAAewwB,EAAM7hB,MAAO,cAAegvE,EAAUqhS,eAAetsW,MAAOirE,EAAUqhS,eAAe9rV,OAAS1C,EAAM0C,MAAO,EAAG,GAAIzZ,IAC3MkjW,EAAet+W,YAAY0hS,GAE/B/iS,EAAOqB,YAAYs+W,KAS3BgI,EAAsB5sX,UAAUivX,gBAAkB,SAAUtpX,EAAS8yB,EAAO8E,GACxE,IAAI8xV,EAGJ,OAFA1pX,EAAUk5B,GAAel5B,EAAS8yB,EAAM7hB,MAAO2mB,EAAS3pB,SAAUjP,KAAKi/W,aAAcnrV,EAAO9zB,KAAKi/W,aAAah+U,cAAc,IAC5HypV,EAAanwV,GAAmBv5B,IACvBgV,MAAO00W,EAAW10W,MAAOD,OAAQ20W,EAAW30W,SAUzDkyW,EAAsB5sX,UAAUmvX,iBAAmB,SAAUrwV,EAAcrG,EAAOxzB,EAAQqqX,EAAY/sV,GAClGzD,EAAaz1B,MAAM8H,KAAQsnB,EAAMg+U,YAAa,EAAI,KAClD33U,EAAaz1B,MAAMgI,IAAOonB,EAAMg+U,YAAa,EAAI,KACjD33U,EAAaz1B,MAAM8xB,MAAQm0V,GACvB3qX,KAAKyqX,kBAAkB32V,EAAO8J,GAC9BzD,EAAagrC,oBACb7kE,EAAOqB,YAAYw4B,GACnBn6B,KAAK4qX,oBAAoB5qX,KAAKi/W,aAAc9kV,KAMpD8tV,EAAsB5sX,UAAUovX,kBAAoB,SAAU32V,EAAO0C,GACjE,IAAIq0V,EAQA1Z,EAAWn0U,GAAkBG,GADjC0tV,EAAqC,iBALjCA,EADA7qX,KAAKqoX,aAAe,EACO,gBAAV7xV,EAA0Bx2B,KAAK8qX,mBAAmBh3V,GAAS0C,EAG3Dx2B,KAAK8qX,mBAAmBh3V,IAESj4B,OAAOsR,iBAAiB3M,SAASuL,KAAM,MAAM4lD,gBAAkBk5T,IAGrH,OADex+W,KAAKoxB,OAAoB,IAAb0zU,EAASv0U,EAAuB,IAAbu0U,EAASt0U,EAAuB,IAAbs0U,EAASr0U,GAAW,MAClE,IAAM,QAAU,SAOvCmrV,EAAsB5sX,UAAUuvX,oBAAsB,SAAU3L,EAAcj+W,GAC1E,IAAI4d,EAASqgW,EAAah+U,cAAc,GACpCphC,EAAQ+e,EAAO+3B,UAAU92C,MAAQ+e,EAAO+3B,UAAUzrC,SAClD0T,EAAO+3B,UAAUlX,QAAUw/U,EAAavrC,gBACxC1yU,EAAQ0D,MAAMC,WAAa,SAC3B60B,GAAgBx4B,EAASnB,EAAO,IAAK,YAM7CooX,EAAsB5sX,UAAUyvX,mBAAqB,SAAUh3V,GAC3D,MAA+B,YAAxBA,EAAM2rF,cACTz/G,KAAKi/W,aAAaxvV,YAAczvB,KAAKi/W,aAAa5oV,WAAW5G,WAAaqE,EAAM0C,OAKxFyxV,EAAsB5sX,UAAUkvX,mBAAqB,SAAUzY,EAAat1U,EAAU48B,QAClE,IAAZA,IAAsBA,EAAU,GACpC04S,EAAY/7V,QAAUqjD,EACtB04S,EAAY97V,OAASojD,EACrB04S,EAAY/kW,GAAKqsD,EAAU,EAC3B04S,EAAY9kW,GAAKosD,EAAU,EAC3B58B,EAASzmB,QAAUqjD,EACnB58B,EAASxmB,OAASojD,GAKtB6uT,EAAsB5sX,UAAUkkC,cAAgB,WAC5C,MAAO,yBAOX0oV,EAAsB5sX,UAAUiX,QAAU,SAAU2sW,KAK7CgJ,GACTnH,IC9mBEx2R,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAoBxCogS,GAAqC,SAAU5/R,GAE/C,SAAS4/R,EAAoB9L,GACzB,IAAIl/W,EAAQorF,EAAO7pF,KAAKtB,KAAMi/W,IAAiBj/W,KAG/C,OAFAD,EAAMk/W,aAAeA,EACrBl/W,EAAMrD,mBACCqD,EAoIX,OAzIAuqF,GAAUygS,EAAqB5/R,GAU/B4/R,EAAoB1vX,UAAUqB,iBAAmB,WACzCsD,KAAKi/W,aAAaj4R,cAGtBhnF,KAAKi/W,aAAar5R,GAAGp6E,GAAQC,UAAY,eAAiB,aAAczL,KAAK2hW,kBAAmB3hW,MAChGA,KAAKi/W,aAAar5R,GAAGp6E,GAAQ2+E,eAAgBnqF,KAAKq0U,iBAAkBr0U,MACpEA,KAAKi/W,aAAar5R,GAAGp6E,GAAQ4+E,cAAepqF,KAAK4pN,eAAgB5pN,QAErE+qX,EAAoB1vX,UAAUsmW,kBAAoB,SAAU9gW,GACxDb,KAAKikW,cAAc,MAEvB8mB,EAAoB1vX,UAAUuuN,eAAiB,SAAU/oN,GACrD,IAAI8R,EAAU3S,KAAKi/W,aACftsW,EAAQkf,QAAQ4N,QAAU9sB,EAAQif,SAAW6E,GAAa9jB,EAAQo6T,OAAQp6T,EAAQq6T,OAAQr6T,EAAQmyT,mBAClG9kU,KAAK6xB,QAAQhxB,GACbb,KAAKikW,cAAc,OAG3B8mB,EAAoB1vX,UAAUg5U,iBAAmB,SAAUxzU,GACvD,IAAI8R,EAAU3S,KAAKi/W,aAEftsW,EAAQkf,QAAQ4N,QAAUhJ,GAAa9jB,EAAQo6T,OAAQp6T,EAAQq6T,OAAQr6T,EAAQmyT,kBAC/E9kU,KAAK6xB,QAAQhxB,IAQrBkqX,EAAoB1vX,UAAUw2B,QAAU,SAAUv1B,GAC9C,IAAIunW,EAAa7jW,KAAKutB,WAAWvtB,KAAKgB,QAAQsC,GAAK,gBAC/Cy/V,EAAYc,GAAc9uU,SAAS8uU,EAAWhxV,aAAa,WAAY,IAAM,EAC7E6wR,EAAa1jS,KAAK8iW,kBAAkBC,GACxC/iW,KAAKmkW,oBAAoB7nW,EAAO0D,KAAKi/W,cAAelc,EAAWr/D,IAEnEqnF,EAAoB1vX,UAAU8oW,oBAAsB,SAAUtjW,EAAGgwB,EAAO0xQ,EAASmB,GAC7E,IAAIlnS,EAAOwD,KAAKgrX,WAAWnqX,EAAGgwB,EAAOA,EAAMk8S,OAAQl8S,EAAMm8S,QACrD35S,EAAOxC,EAAMi0S,gBACjB9kU,KAAKysU,kBACDjwU,EAAKs3B,OAAW9zB,KAAK0sU,eAAe,IAAO1sU,KAAK0sU,eAAe,GAAG54S,QAAUt3B,EAAKs3B,OAa5Et3B,EAAKs3B,OAAS9zB,KAAKyoB,WACpBzoB,KAAKikW,cAAc,KACnBjkW,KAAKyoB,UAAW,GAdhBzoB,KAAK0vU,SAASlzU,EAAM+lS,EAASmB,GAAY,KACrC1jS,KAAKwpJ,aAAahtJ,EAAM+lS,EAASviS,KAAKumE,eAAe/pE,EAAMq0B,EAAMgB,UACjE7xB,KAAKo1B,cAAcvE,EAAO0xQ,EAASviS,KAAKokW,WAAW5nW,GAAOA,EAAKs3B,MAAM6xQ,eAAgBnpS,EAAKoiB,OAAO8V,SAAUl4B,EAAKs3B,OAAQ,UAAW,EAAGT,EAAM,KAAM72B,EAAKs3B,QAGvJ9zB,KAAKgjW,gBAAgBhjW,KAAK2S,SAC1B3S,KAAKutB,WAAWvtB,KAAKgB,QAAQsC,GAAK,YAAYiB,UAElDvE,KAAKyoB,UAAW,IAU5BsiW,EAAoB1vX,UAAU2vX,WAAa,SAAUnqX,EAAGgwB,EAAO9jB,EAAGC,GAC9D,IACI1J,EAAKqxB,GADI9zB,EAAEsG,OACa7D,IAAI,GAChC,IAAK0+C,MAAM1+C,EAAGsb,QAAS,CACnB,IAAIq+S,EAAc35T,EAAGsb,OACjBwZ,EAAa90B,EAAGwwB,MACpB,KAAKr2B,EAAkBw/T,IAAiBj7Q,MAAMi7Q,IAAiBx/T,EAAkB26B,IAAgB4pB,MAAM5pB,IAAa,CAChH,IAAIxZ,EAAS5e,KAAKghC,mBAAmBi8R,EAAapsS,EAAMoQ,eACxD,GAAIriB,EAAOi2T,cACP,OAAO,IAAIrQ,GAAa5lT,EAAO+Y,OAAOS,GAAaxZ,IAI/D,OAAO,IAAI4lT,GAAa,KAAM,OAKlCumD,EAAoB1vX,UAAU2lC,mBAAqB,SAAU/uB,EAAOgvB,GAChE,OAAOA,EAAc,IAEzB8pV,EAAoB1vX,UAAUkrE,eAAiB,SAAU/pE,EAAMq1B,GAC3D,IAAIjT,EAASpiB,EAAKoiB,OACdod,EAASnK,EAAQmK,OAASnK,EAAQmK,OAAS,iCAC/C,OAAOh8B,KAAKqkW,cAAc7nW,EAAKs3B,MAAOlV,EAAQod,IAElD+uV,EAAoB1vX,UAAU+oW,WAAa,SAAU5nW,GACjD,MAAoB,KAAhBwD,KAAK4kF,OACE,IAEX5kF,KAAK4kF,OAAS5kF,KAAKqkW,cAAc7nW,EAAKs3B,MAAOt3B,EAAKoiB,OAAQ5e,KAAK4kF,QACM,KAAjE5kF,KAAK4kF,OAAOr1E,QAAQ,OAAQ,IAAIA,QAAQ,SAAU,IAAIW,OAC/ClQ,KAAK4kF,OAET,KAEXmmS,EAAoB1vX,UAAUgpW,cAAgB,SAAUvwU,EAAOlV,EAAQod,GAGnE,IAAK,IAFDh/B,EACA2zC,EACKvyC,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKw2B,GAAQ11B,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC5D,IAAI6mW,EAAYpiW,EAAGzE,GACnBpB,EAAQ,IAAIgnB,OAAO,WAAkBihV,EAAY,IAAK,MACtDjpU,EAASA,EAAOzsB,QAAQvS,EAAMT,OAAQu3B,EAAMmxU,IAEhD,IAAK,IAAIhhW,EAAK,EAAGwG,EAAKnM,OAAOhB,KAAKgB,OAAO4mW,eAAetmV,IAAU3a,EAAKwG,EAAGhO,OAAQwH,IAAM,CAChFghW,EAAYx6V,EAAGxG,GACnBjH,EAAQ,IAAIgnB,OAAO,YAAmBihV,EAAY,IAAK,MACvDt0T,EAAY/xB,EAAOqmV,GACnBjpU,EAASA,EAAOzsB,QAAQvS,EAAMT,OAAQo0C,GAE1C,OAAO3U,GAKX+uV,EAAoB1vX,UAAUkkC,cAAgB,WAC1C,MAAO,uBAOXwrV,EAAoB1vX,UAAUiX,QAAU,SAAUue,KAK3Ck6V,GACTloB,IC/JEv4Q,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAmBxCsgS,GAAuC,SAAU9/R,GAEjD,SAAS8/R,EAAsBhM,GAC3B,IAAIl/W,EAAQorF,EAAO7pF,KAAKtB,KAAMi/W,IAAiBj/W,KAE/C,OADAD,EAAM8tB,SAAWoxV,EAAapxV,SACvB9tB,EAmRX,OAvRAuqF,GAAU2gS,EAAuB9/R,GASjC8/R,EAAsB5vX,UAAUmxW,qBAAuB,SAAUyS,GAC7Dj/W,KAAKqrW,QAAU4T,EAAaj+W,QAAQsC,GAAK,uBACzCtD,KAAKurW,WAAa0T,EAAaj+W,QAAQsC,GAAK,kBAC5CtD,KAAKk+U,uBACLl+U,KAAKotU,WAAa,MAOtB69C,EAAsB5vX,UAAU8iV,gBAAkB,SAAU8gC,GACxDj/W,KAAKwsW,qBAAqByS,GAC1Bj/W,KAAK4e,OAASlgB,KAAWugX,EAAah+U,cAAe,MAAM,GAC3DjhC,KAAKmrW,eACLnrW,KAAK6sW,gBAAgB7sW,KAAKwrW,cAAcyT,EAAa/gC,oBAAqBl+U,KAAKk+U,qBAAsB+gC,IAKzGgM,EAAsB5vX,UAAUyxW,cAAgB,SAAUluV,GACtD,OAAQA,EAAO0sV,gBAAkBtrW,KAAKqrW,QAAU,WAAazsV,EAAO3M,OAKxEg5W,EAAsB5vX,UAAU+xW,aAAe,SAAU6R,EAAcrgW,EAAQ3M,GAC3E,OAAQjS,KAAKitW,kBAAkBh7V,KAKnCg5W,EAAsB5vX,UAAU4xW,kBAAoB,SAAUh7V,GAC1D,IAAIsiC,EAAYv0C,KAAK2S,QAAQ3R,QAAQsC,GAAK,WAAa2O,EAAM2M,OAAS,UAAY3M,EAAM6hB,MACxF,OAAOtzB,SAASosB,eAAe2nB,IAMnC02U,EAAsB5vX,UAAUixW,0BAA4B,SAAU2S,EAAc3iX,IAChB,IAA5DA,EAAM6K,OAAO7D,GAAG/E,QAAQ0gX,EAAaj+W,QAAQsC,GAAK,OAGlDhH,EAAM6K,OAAO7D,GAAG/E,QAAQ,aAAe,GAAKjC,EAAM6K,OAAO7D,GAAG/E,QAAQ,gBAAkB,IACtFyB,KAAK08U,iBAAiB/nT,GAAYr4B,EAAM6K,OAAO7D,IAAK27W,EAAc3iX,EAAM6K,SAMhF8jX,EAAsB5vX,UAAUqhV,iBAAmB,SAAUzqU,EAAOgtW,EAAcj+W,GAI9E,OAHAA,EAAUA,EAAQsC,GAAG/E,QAAQ,cAAgB,EACzC0gX,EAAa0B,mBAAmBpvW,WAAWU,EAAM2M,QAAQrN,WAAWU,EAAM6hB,OACxE9yB,EACEi+W,EAAa/xC,eACjB,IAAK,QACIlrR,MAAM/vC,EAAM6hB,SACb9zB,KAAK4vE,UAAUqvS,EAAchtW,GAAQjR,IACrChB,KAAKstW,WAAW2R,EAAaj+W,QAAQsC,GAAI27W,EAAah+U,kBAQtEgqV,EAAsB5vX,UAAUu0E,UAAY,SAAUqvS,EAAchtW,EAAOu7V,GAClEyR,EAAaj6B,eACdhlV,KAAKytW,0BAA0BwR,EAAcj/W,KAAKk+U,oBAAqBjsU,EAAOgtW,EAAargW,QAE/F,IAAIvb,EAAYmqW,EAAiB,KAAOA,EAAiB,GAAG36V,aAAa,UAAY,IACjF26V,EAAiB,IAAMnqW,EAAU9E,QAAQyB,KAAK0tW,kBAAkBF,EAAiB,GAAGlqW,MAAQ,GAC5FtD,KAAK2tW,aAAaH,EAAkBv7V,GACpCjS,KAAK4tW,iBAAiB5tW,KAAKk+U,oBAAqBjsU,KAGhDjS,KAAK6tW,YAAYL,EAAkBv7V,GACnCjS,KAAK4tW,iBAAiB5tW,KAAKk+U,oBAAqBjsU,GAAO,KAO/Dg5W,EAAsB5vX,UAAU+iV,gBAAkB,SAAU6gC,EAAc7Q,GACtE,IAAIlwB,EAAsBx/U,KAAWsB,KAAKk+U,oBAAqB,MAAM,GACrEl+U,KAAKquW,uBAAuB4Q,EAAcj/W,KAAKk+U,qBAC/Cl+U,KAAKstW,WAAW2R,EAAaj+W,QAAQsC,GAAI27W,EAAah+U,eACtDjhC,KAAK6sW,gBAAgB3uB,EAAqB+gC,IAK9CgM,EAAsB5vX,UAAUgzW,uBAAyB,SAAU4Q,EAAclS,GAC3DkS,EAAa0B,mBAC/B,IAAK,IAAIviX,EAAK,EAAG4uW,EAAYD,EAAS3uW,EAAK4uW,EAAUvwW,OAAQ2B,IAAM,CAC/D,IAAI6T,EAAQ+6V,EAAU5uW,GACtB4B,KAAK2tW,cAAc3tW,KAAKitW,kBAAkBh7V,IAASA,KAO3Dg5W,EAAsB5vX,UAAUizW,gBAAkB,SAAU2Q,EAAcrgW,EAAQwZ,GAChE6mV,EAAa0B,mBAAmBpvW,WAAWqN,GAAQrN,WAAW6mB,GAC1Dp4B,KAAK8sW,cAAcmS,EAAah+U,cAAcriB,IADhE,IAEIm0T,EAAiBksC,EAAa0B,mBAAmBpvW,WAAWqN,GAAQrN,WAAW6mB,GACnFp4B,KAAK4vE,UAAUqvS,EAAc,IAAInqV,GAAMlW,EAAQwZ,IAAc26S,IAC7D/yU,KAAKstW,WAAW2R,EAAaj+W,QAAQsC,GAAI27W,EAAah+U,gBAK1DgqV,EAAsB5vX,UAAUwxW,gBAAkB,SAAUE,EAASkS,GAEjE,IAAK,IADDj+W,EACK5C,EAAK,EAAG8sX,EAAYne,EAAS3uW,EAAK8sX,EAAUzuX,OAAQ2B,IAAM,CAC/D,IAAI6T,EAAQi5W,EAAU9sX,IACtB4C,EAAUhB,KAAKitW,kBAAkBh7V,KAE7BjS,KAAK08U,iBAAiBzqU,EAAOgtW,EAAcj+W,KAOvDiqX,EAAsB5vX,UAAUoyW,0BAA4B,SAAUwR,EAAchtW,EAAOoyN,EAAcntM,GAErG,IAAK,IADDtY,EACKziB,EAAI,EAAGA,EAAI8V,EAAMxV,OAAQN,IAC9ByiB,EAASsY,EAAiBjlB,EAAM9V,GAAGyiB,QAC9B5e,KAAKmrX,YAAYl5W,EAAM9V,GAAIkoO,KAC5BrkO,KAAK2tW,aAAa3tW,KAAKotW,aAAa6R,EAAcrgW,EAAQ3M,EAAM9V,IAAK8V,EAAM9V,IAC3E8V,EAAMoW,OAAOlsB,EAAG,GAChBA,MAOZ8uX,EAAsB5vX,UAAUiyW,WAAa,SAAU8d,EAAOnqV,GAE1D,IAAK,IADDt8B,EAAa3E,KAAKqrX,qBAAqBrrX,KAAKk+U,qBACvC9/U,EAAK,EAAG8iC,EAAkBD,EAAe7iC,EAAK8iC,EAAgBzkC,OAAQ2B,IAAM,CACjF,IAAIwgB,EAASsiB,EAAgB9iC,GACzBwgB,EAAO4Y,SACPx3B,KAAKguW,uBAAuBxtW,SAASosB,eAAew+V,EAAQ,qBAAsBprX,KAAK8sW,cAAcluV,GAASja,KAO1HsmX,EAAsB5vX,UAAU2yW,uBAAyB,SAAUhtW,EAASqC,EAAWsB,GAKnF,IAAK,IAHDi0U,EACA0yC,EACAC,EAHAnxW,EAAYpZ,EAAQuQ,WAAW,GAAa,WAIvCpV,EAAI,EAAGA,EAAIie,EAAS3d,OAAQN,IACjCmvX,EAAelxW,EAASje,GAAG0W,aAAa,UAAY,GACpD04W,EAAcnxW,EAASje,GAAGsE,WAAWoS,aAAa,UAAY,IACrB,IAArCy4W,EAAa/sX,QAAQ8E,KAAyD,IAApCkoX,EAAYhtX,QAAQ8E,IAAqBsB,EACnF3E,KAAKgsW,YAAY5xV,EAASje,GAAI6D,KAAKurW,YAGnCvrW,KAAKksW,eAAe9xV,EAASje,GAAI6D,KAAKurW,YAEtCvrW,KAAK2S,QAAQ4tW,0BAA4BvgX,KAAK2S,QAAQyjU,eAAe5+S,UACrEohT,EAAcp4U,SAASosB,eAAe5sB,KAAK2S,QAAQ3R,QAAQsC,GAAK,uBAAyBnH,OAE5C,IAArCmvX,EAAa/sX,QAAQ8E,KAAyD,IAApCkoX,EAAYhtX,QAAQ8E,IAAqBsB,EACnF3E,KAAKgsW,YAAYpzB,EAAa54U,KAAKurW,YAGnCvrW,KAAKksW,eAAetzB,EAAa54U,KAAKurW,cAS1D0f,EAAsB5vX,UAAUwyW,YAAc,SAAUjqW,EAAUqO,GAC9D,IAAK,IAAI7T,EAAK,EAAGgjE,EAAax9D,EAAUxF,EAAKgjE,EAAW3kE,OAAQ2B,IAAM,CAClE,IAAI4C,EAAUogE,EAAWhjE,GACrBw6U,OAAc,EACd53U,IACIhB,KAAK2S,QAAQ4tW,0BAA4BvgX,KAAK2S,QAAQyjU,eAAe5+S,UACrEohT,EAAcp4U,SAASosB,eAAe5sB,KAAK2S,QAAQ3R,QAAQsC,GAAK,uBAAyB2O,EAAM6hB,OAC/F9zB,KAAKksW,eAAetzB,EAAa54U,KAAKurW,YACtCvrW,KAAKgsW,YAAYpzB,EAAa54U,KAAK0tW,kBAAkB90B,EAAYt1U,MAErEtD,KAAKksW,eAAelrW,EAAQP,WAAYT,KAAKurW,YAC7CvrW,KAAKksW,eAAelrW,EAAShB,KAAKurW,YAClCvrW,KAAKgsW,YAAYhrW,EAAShB,KAAK0tW,kBAAkB1sW,EAAQsC,QAOrE2nX,EAAsB5vX,UAAUqyW,kBAAoB,SAAUpqW,GAC1D,OAAOtD,KAAK8sW,cAAc9sW,KAAK2S,QAAQiM,OAAO+V,GAAYrxB,GAAIsb,UAKlEqsW,EAAsB5vX,UAAUsyW,aAAe,SAAU/pW,EAAUqO,GAE/D,IAAK,IADD2mU,EACKx6U,EAAK,EAAG0xI,EAAalsI,EAAUxF,EAAK0xI,EAAWrzI,OAAQ2B,IAAM,CAClE,IAAI4C,EAAU8uI,EAAW1xI,GACrB4C,IACIhB,KAAK2S,QAAQ4tW,0BAA4BvgX,KAAK2S,QAAQyjU,eAAe5+S,UACrEohT,EAAcp4U,SAASosB,eAAe5sB,KAAK2S,QAAQ3R,QAAQsC,GAAK,uBAAyB2O,EAAM6hB,OAC/F9zB,KAAKksW,eAAetzB,EAAa54U,KAAK0tW,kBAAkB90B,EAAYt1U,MAExEtD,KAAKksW,eAAelrW,EAAShB,KAAK0tW,kBAAkB1sW,EAAQsC,QAOxE2nX,EAAsB5vX,UAAUuyW,iBAAmB,SAAUb,EAAS96V,EAAO7N,GACzE,IAAK,IAAIjI,EAAI,EAAGA,EAAI4wW,EAAQtwW,OAAQN,IAC5B6D,KAAKmrX,YAAYpe,EAAQ5wW,GAAI8V,KAC7B86V,EAAQ1kV,OAAOlsB,EAAG,GAClBA,KAGJiI,GACA2oW,EAAQvoW,KAAKyN,IAMrBg5W,EAAsB5vX,UAAU8vX,YAAc,SAAUvsX,EAAOC,GAC3D,OAASD,EAAMk1B,QAAUj1B,EAAOi1B,OAAWl1B,EAAMggB,SAAW/f,EAAO+f,QAKvEqsW,EAAsB5vX,UAAUgwX,qBAAuB,SAAUntC,GAE7D,IAAK,IADD1mT,GAAU,EACLp5B,EAAK,EAAGotX,EAAwBttC,EAAqB9/U,EAAKotX,EAAsB/uX,OAAQ2B,IAAM,CAEnG,GAAI+iC,GADOqqV,EAAsBptX,GACX01B,MAAO9zB,KAAK2S,QAAQsuB,cAAc,GAAGtJ,QAAQH,QAAS,CACxEA,GAAU,EACV,OAGR,OAAOA,GAKXyzV,EAAsB5vX,UAAUkkC,cAAgB,WAC5C,MAAO,yBAOX0rV,EAAsB5vX,UAAUiX,QAAU,SAAU2sW,KAG7CgM,GACT/f,ICzSE5gR,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAgBxC8gS,GAAwC,SAAUtgS,GAMlD,SAASsgS,EAAuB94W,GAC5B,IAAI5S,EAAQorF,EAAO7pF,KAAKtB,KAAM2S,IAAY3S,KAE1C,OADAD,EAAM2rX,IAAM/4W,EACL5S,EAgCX,OAxCAuqF,GAAUmhS,EAAwBtgS,GAclCsgS,EAAuBpwX,UAAU4iV,kBAAoB,SAAUj9U,GAC3D,IAAIjB,EAAQC,KACZA,KAAK42D,YAAc52D,KAAK0rX,IAAI90T,YAC5B52D,KAAKqU,cAAgBlT,EAAc,OAC/BmC,GAAItD,KAAK0rX,IAAI1qX,QAAQsC,GAAK,4BAE9BtD,KAAK42D,YAAYh/B,IAAI,SAAU+2B,EAAY18C,GACvClS,EAAMyiV,kBAAkB7zR,EAAY18C,EAAOlS,EAAMsU,iBAErDwmB,GAAc76B,KAAKqU,cAAerT,IAKtCyqX,EAAuBpwX,UAAUkkC,cAAgB,WAE7C,MAAO,cAOXksV,EAAuBpwX,UAAUiX,QAAU,SAAUK,KAG9C84W,GACT5U,IhTvBE8U,GAA2B,WAQ3B,OAPA,SAAmB5+W,EAAGC,EAAGwhB,EAAQC,EAAQ+I,QACrB,IAAZA,IAAsBA,GAAU,GACpCx3B,KAAK+M,EAAIA,EACT/M,KAAKgN,EAAIA,EACThN,KAAKwuB,OAASA,EACdxuB,KAAKw3B,QAAUA,MiT5CnB8yD,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAmBxCihS,GAA6B,SAAUzgS,GAEvC,SAASygS,EAAY75V,GACjB,IAAIhyB,EAAQorF,EAAO7pF,KAAKtB,OAASA,KASjC,OARAD,EAAMwjE,WAAaxxC,EAAMwxC,WACzBxjE,EAAMmvU,MAAQn9S,EAAMm9S,MACpBnvU,EAAMozB,MAAQpB,EAAMoB,MACpBpzB,EAAM27D,MAAQ3pC,EAAM2pC,MACpB37D,EAAM+3B,KAAO8yC,EAAAA,EACb7qE,EAAMm9P,MAAQtyL,EAAAA,EACd7qE,EAAMk9P,KAAOryL,EAAAA,EACb7qE,EAAMo9P,MAAQvyL,EAAAA,EACP7qE,EA6LX,OAxMAuqF,GAAUshS,EAAazgS,GAiBvBygS,EAAYvwX,UAAUwwX,YAAc,SAAUl5W,GAC1C,IACI4wD,EACA7H,EAFA37D,EAAQC,KAGZA,KAAK8rX,aAAe,EACpBn5W,EAAQo5W,YAAYp0V,UAChBhlB,EAAQiM,OAAOniB,OACfkW,EAAQiM,OAAOgZ,IAAI,SAAUhZ,GACzB2kD,EAAa3kD,EAAO2kD,YAAc5wD,EAAQ4wD,WAC1C7H,EAAQ98C,EAAO88C,OAAS/oD,EAAQ+oD,MAChC98C,EAAO+Y,UACP53B,EAAMisX,kBAAkBzoT,EAAY7H,EAAO/oD,EAASiM,KAIxD5e,KAAKgsX,kBAAkBr5W,EAAQ4wD,WAAY5wD,EAAQ+oD,MAAO/oD,IAGlEi5W,EAAYvwX,UAAU2wX,kBAAoB,SAAUzoT,EAAY7H,EAAO/oD,EAASiM,GAC5E,IAAI7e,EAAQC,KACZ,IAAIvC,EAAkBi+D,IAAWj+D,EAAkB8lE,GAAnD,CAIA5wD,EAAQ89T,WAAa,IAAIyD,GAAK3wQ,EAAY7H,GACxB/oD,EAAQ89T,WAAW9D,QAAQh6T,EAAQ89T,WAAWC,gBAAgBhgL,iBACpE4iC,KAAK,SAAUzyL,GAAK,OAAOd,EAAM4wU,mBAAmB9vU,EAAG8R,EAASiM,UALxE5e,KAAK2wU,oBAAqB5xU,OAAQwkE,EAAYzkD,MAAOykD,EAAW9mE,QAAUkW,EAASiM,IAW3FgtW,EAAYvwX,UAAUs1U,mBAAqB,SAAU9vU,EAAG8R,EAASiM,GAC7D,IAAIqtW,EAAwB,KAAbprX,EAAE9B,OAAgB8B,EAAE9B,UACnCiB,KAAKivU,gBAAgBg9C,EAAUt5W,EAASrU,OAAOhB,KAAK2uX,GAAUxvX,OAAQmiB,GACtE5e,KAAK8rX,cAAgBltW,EAAS,EAAI5e,KAAK8rX,aAClCltW,GAAU5e,KAAK8rX,eAAiBn5W,EAAQiM,OAAOniB,SAChDuD,KAAKksX,aAAav5W,GAClB3S,KAAKmsX,wBAAwBx5W,GAC7B3S,KAAKosX,aAAaz5W,GAClBA,EAAQk5W,gBAQhBD,EAAYvwX,UAAU4zU,gBAAkB,SAAUg9C,EAAUt5W,EAAS9Q,EAAK+c,GAKtE,IAJA,IACIkV,EADA33B,EAAI,EAEJ+yU,EAAStwT,GAAUA,EAAOswT,OAAUv8T,EAAQu8T,MAC5C/7S,EAASvU,GAAUA,EAAOuU,OAAUxgB,EAAQwgB,MACzCh3B,EAAI0F,IACPiyB,EAAQ,IAAI63V,GAAU9uX,EAASqyU,EAAO+8C,EAAS9vX,IAAKU,EAASs2B,EAAO84V,EAAS9vX,MACvEqyB,QAAUsF,EAAM/mB,EACtB+mB,EAAMrF,QAAUqF,EAAM9mB,EAClB4R,GACAA,EAAO+Y,OAAOnzB,KAAKsvB,GAEvB9zB,KAAK83B,KAAOzrB,KAAK0T,IAAI/f,KAAK83B,KAAMhE,EAAMtF,QACtCxuB,KAAKi9P,KAAO5wP,KAAK0T,IAAI/f,KAAKi9P,KAAMnpO,EAAMrF,QACtCzuB,KAAKk9P,KAAO7wP,KAAKC,IAAItM,KAAKk9P,KAAMppO,EAAMtF,QACtCxuB,KAAKm9P,KAAO9wP,KAAKC,IAAItM,KAAKm9P,KAAMrpO,EAAMrF,QACtC9b,EAAQo5W,YAAYp0V,OAAOnzB,KAAKsvB,GAChC33B,KAGRyvX,EAAYvwX,UAAU6wX,aAAe,SAAUv5W,GAC3C,IAAI05W,EACAl2W,GACA8iB,QAAStmB,EAAQsmB,QAASC,QAASvmB,EAAQumB,QAC3C/2B,SAAUwQ,EAAQxQ,SAAU+vB,UAAWvf,EAAQuf,UAC/CgC,WAAYvhB,EAAQO,UAAWooB,YAAa3oB,EAAQ2oB,YACpD/J,QAAS5e,EAAQ4e,QAASmwC,SAAU/uD,EAAQ+uD,SAAUskR,aAAcrzU,EAAQqzU,cAEhFhmV,KAAK8X,MAAQ3B,EACbnW,KAAK8X,MAAM+tD,aAAelzD,EAAQkzD,aAClC7lE,KAAK8X,MAAMyhB,cAAgB,EAC3Bv5B,KAAK8X,MAAM4pD,SAAW/uD,EAAQ+uD,SAC9B1hE,KAAK8X,MAAM4lT,cAAgB,GAAI,EAAG,EAAG,GACrC19T,KAAK8X,MAAMub,KAAO1gB,EAAQ+jB,OAC1B12B,KAAK8X,MAAMqd,iBACXn1B,KAAK8X,MAAMshB,YAAc,cACzBizV,EAAa15W,EAAQokB,GAAiBpkB,EAAQuf,WAAa,WAChDnS,IAAM/f,KAAK83B,KACtBu0V,EAAW//W,IAAMtM,KAAKk9P,KACtBmvH,EAAW1uD,eAAe39T,KAAK8X,MAAOnF,EAAQ+jB,QACjB,gBAAzB12B,KAAK8X,MAAMoa,WACXm6V,EAAWztD,kBAAkB5+T,KAAK8X,MAAO9X,KAAK8X,MAAM+lT,YAAY99S,IAAK/f,KAAK8X,MAAM+lT,YAAYvxT,IAAKtM,KAAK8X,MAAM+lT,YAAY17T,UAE5HnC,KAAK8X,MAAM+lT,YAAY5oS,MAAQj1B,KAAK8X,MAAM+lT,YAAYvxT,IAAMtM,KAAK8X,MAAM+lT,YAAY99S,IACnF/f,KAAK8X,MAAM6a,aAAe3yB,KAAK8X,MAAM+lT,YACrCwuD,EAAWjuD,uBAAuBp+T,KAAK8X,MAAOnF,IAMlDi5W,EAAYvwX,UAAU+wX,aAAe,SAAUz5W,GAO3C3S,KAAK4X,OALD0wT,gBAAkBtyT,MAAO,GAAKuoT,aAAc,OAC5CwD,gBAAkB/rT,MAAO,GAAKggB,YAAclJ,KAAM,KAClD0K,SAAS,EAAOtF,UAAW,SAAU+G,QAAS,KAAMC,QAAS,KAC7D/2B,SAAU,MAGdnC,KAAK4X,MAAMyb,KAAO1gB,EAAQ+jB,OAC1B12B,KAAK4X,MAAM2hB,cAAgB,EAC3Bv5B,KAAK4X,MAAM8lT,cAAgB,GAAI,EAAG,EAAG,GACrC19T,KAAK4X,MAAMwhB,YAAc,WACzBzmB,EAAQ25W,aAAavsW,IAAM/f,KAAKi9P,KAChCtqP,EAAQ25W,aAAahgX,IAAMtM,KAAKm9P,KAChCxqP,EAAQ25W,aAAa3uD,eAAe39T,KAAK4X,MAAOjF,EAAQ+jB,QACxD/jB,EAAQ25W,aAAa1tD,kBAAkB5+T,KAAK4X,MAAO5X,KAAK4X,MAAMimT,YAAY99S,IAAK/f,KAAK4X,MAAMimT,YAAYvxT,IAAKtM,KAAK4X,MAAMimT,YAAY17T,UAClInC,KAAK4X,MAAMimT,YAAY5oS,MAAQj1B,KAAK4X,MAAMimT,YAAYvxT,IAAMtM,KAAK4X,MAAMimT,YAAY99S,IACnF/f,KAAK4X,MAAM+a,aAAe3yB,KAAK4X,MAAMimT,aAOzC+tD,EAAYvwX,UAAUq3U,aAAe,SAAU//T,GAC3C,IAAI5S,EAAQC,KACRusX,EAAa55W,EAAQkb,SAASw+C,aAAc/oE,GAAIqP,EAAQ3R,QAAQsC,GAAK,WACrEwsF,EAASjhE,GAAelc,EAAQuI,OACpCvI,EAAQiM,OAAOgZ,IAAI,SAAUhZ,EAAQ3M,GACjC2M,EAAO9G,MAAQ/X,EAAM+X,MACrB8G,EAAOhH,MAAQ7X,EAAM6X,MACrBgH,EAAOiS,MAAQle,EACfiM,EAAO3M,MAAQA,EACf2M,EAAO9G,MAAMoc,WAAavhB,EAAQO,UAClC0L,EAAOypD,SAAWzpD,EAAOgf,MAAQkyD,EAAO79E,EAAQ69E,EAAOrzF,QACvDsD,EAAMysX,oBAAoB75W,EAASiM,EAAQ3M,GAC3CU,EAAQokB,GAAiBnY,EAAOlY,MAAQ,gBAAgBqlG,OAAOntF,EAAQ7e,EAAM+X,MAAO/X,EAAM6X,OAAO,GACjG20W,EAAW5qX,YAAYid,EAAOy0T,eAC1Bz0T,EAAO+3B,UAAUlX,QAAU9sB,EAAQ+gU,eACnC/gU,EAAQokB,GAAiBnY,EAAOlY,MAAQ,gBAAgBitU,YAAY/0T,KAG5EjM,EAAQ2e,UAAU3vB,YAAY4qX,GAC1B55W,EAAQiM,OAAOniB,QACfuD,KAAKysX,iBAAiB95W,EAAS45W,IAGvCX,EAAYvwX,UAAUmxX,oBAAsB,SAAU75W,EAASiM,EAAQ3M,GACnE,IAAIsiC,EAAY5hC,EAAQ3R,QAAQsC,GAChCsb,EAAO8V,SAAW,IAAIwB,GAAKl2B,KAAK8X,MAAMub,KAAKtmB,EAAG/M,KAAK4X,MAAMyb,KAAKrmB,EAAGhN,KAAK8X,MAAMub,KAAKrd,MAAOhW,KAAK4X,MAAMyb,KAAKtd,QACxG6I,EAAOu0T,gBAAkBxgU,EAAQkb,SAAS4rF,aAAa,IAAIyqN,GAAW3vR,EAAY,wBAA0BtiC,EAAO,eAAiB+D,MAAO,EAAGwgB,MAAO,QAAU,GAC3JzpB,EAAG,EAAGC,EAAG,EACTgJ,MAAO4I,EAAO8V,SAAS1e,MACvBD,OAAQ6I,EAAO8V,SAAS3e,UAE5B6I,EAAOy0T,cAAgB1gU,EAAQkb,SAASw+C,aACpC/oE,GAAMixC,EAAY,cAAgBtiC,EAClC5E,UAAa,aAAeuR,EAAO8V,SAAS3nB,EAAI,IAAO6R,EAAO8V,SAAU,EAAI,IAC5E4+S,YAAa,QAAU/+R,EAAY,wBAA0BtiC,EAAQ,MAEzE2M,EAAOy0T,cAAc1xU,YAAYid,EAAOu0T,kBAE5Cy4C,EAAYvwX,UAAU8wX,wBAA0B,SAAUx5W,GACtD,IAAIymD,EAAUzmD,EAAQ8pB,OAAO9vB,OACzB+/W,EAAclgW,GAAY,SAAU7Z,EAAQqjB,YAAYjgB,OAC5D/V,KAAKklV,8BAA8BllV,KAAK8X,MAAO,IAAIsV,GAAKza,EAAQ+jB,OAAO1gB,MAAOrD,EAAQ+jB,OAAO3gB,QAAS/V,KAAK83B,KAAM93B,KAAKk9P,MAAM,IACxHvqP,EAAQmtB,gBAAwC,aAAtBntB,EAAQuf,WACI,UAAlClyB,KAAK8X,MAAMstU,oBAAmCzyU,EAAQiM,OAAOniB,SACjEkW,EAAQ+jB,OAAO3gB,QAAqC,YAA1BpD,EAAQ8sG,eAAyD,IAA1B9sG,EAAQiM,OAAOniB,OAAgB28D,EAAUszT,EACrGA,EAAc,EAAItzT,GAEtBzmD,EAAQiM,OAAOniB,SAChBkW,EAAQ+jB,OAAO1pB,GAAK2F,EAAQ+jB,OAAO3gB,OAAS,EAC5CpD,EAAQ+jB,OAAO3gB,OAASpD,EAAQ+jB,OAAO3gB,OAAS,IAGxD61W,EAAYvwX,UAAUoxX,iBAAmB,SAAU95W,EAASg6W,GACxD,IAAI35W,EAAU,IAAIojB,GAAWzjB,EAAQ3R,QAAQsC,GAAK,gBAAiB,cAAeqP,EAAQi6W,gBAAgB52W,MAAOrD,EAAQi6W,gBAAgBp2V,MAAO,EAAG,GAAK,KAAQ7jB,EAAQ+jB,OAAQ,EAAI,IAAO/jB,EAAQ+jB,OAAQ,EACvM,OAAS/jB,EAAQ+jB,OAAO3pB,EAAI4F,EAAQ+jB,OAAO1gB,OAAS,IAAMrD,EAAQ+jB,OAAO1pB,EACzE,OAAS2F,EAAQ+jB,OAAO3pB,EAAI4F,EAAQ+jB,OAAO1gB,OAAS,KAAOrD,EAAQ+jB,OAAO1pB,EAAI2F,EAAQ+jB,OAAO3gB,QAC7F,MAASpD,EAAQ+jB,OAAQ,EAAI,KAAO/jB,EAAQ+jB,OAAO1pB,EAAI2F,EAAQ+jB,OAAO3gB,QAAU,KAChF4W,EAAaha,EAAQkb,SAASsI,SAASnjB,GAC3CL,EAAQ2e,UAAU3vB,YAAYgrB,IAE3Bi/V,GACT3mC,IC7NE36P,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAgBxCkiS,GAAoC,SAAU1hS,GAE9C,SAAS0hS,EAAmB96V,GACxB,IAAIhyB,EAAQorF,EAAO7pF,KAAKtB,OAASA,KAIjC,OAHAD,EAAM+sX,oBACN/sX,EAAMgtX,qBACNhtX,EAAMitX,eAAiBj7V,EAChBhyB,EAsXX,OA5XAuqF,GAAUuiS,EAAoB1hS,GAW9B0hS,EAAmBxxX,UAAU4xX,gBAAkB,WAC3C,IAQI3b,EARA/uC,EAAS,EACT5vT,EAAU3S,KAAKgtX,eACf1kD,EAAiB31T,EAAQ21T,eACzBvG,EAAiBpvT,EAAQovT,eACzB4H,EAAY,GACZC,EAAY,GACZv2S,EAAO1gB,EAAQ+jB,OACfw2V,EAAYv6W,EAAQiiU,YAAY98T,MAGhCq1W,GADQD,EAAUv6V,aACDhgB,EAA4B,qBAAI,cAAgB,MACrE3S,KAAKotX,UAAYz6W,EAAQkb,SAASw+C,aAAc/oE,GAAIqP,EAAQ3R,QAAQsC,GAAK,eACzE,IAAI+pX,EAAiC,YAAzB16W,EAAQkvT,cAAwD,IAA1BlvT,EAAQiM,OAAOniB,OAC7D42B,EAAKrmB,EAAIqmB,EAAKtd,OAASgsT,EAAehsT,OAASsd,EAAKrmB,EAAIqmB,EAAKtd,OAASgsT,EAAehsT,OAEzF/V,KAAK8sX,oBACLI,EAAUl3V,WAAarjB,EAAQqjB,WAC/Bk3V,EAAUxrT,SAAW/uD,EAAQ+uD,SAC7BwrT,EAAUlnC,aAAerzU,EAAQqzU,aACjCknC,EAAUvrD,SAAU,EACM,aAAtBhvT,EAAQuf,YACRlyB,KAAKklV,8BAA8BgoC,EAAW75V,EAAM65V,EAAUpvD,YAAYvgU,MAAO2vX,EAAUpvD,YAAYj/S,IAAKquW,EAAUvrD,SACtH3hU,KAAKolV,mBAAqB8nC,EAAU9nC,mBACpCplV,KAAKstX,eAAeJ,IAExBltX,KAAK8sX,iBAAmBI,EAAU/3V,cAClCn1B,KAAKutX,eACLjc,EAAc4b,EAAU/3V,cAAc14B,OACtC,IAAK,IAAIN,EAAI,EAAGA,EAAIm1W,EAAan1W,IAC7B6D,KAAKutX,YAAY/oX,KAAKxE,KAAK8sX,iBAAiB3wX,GAAGa,QAC/CulU,EAAUtuS,GAAmBj0B,KAAK8sX,iBAAiB3wX,GAAGa,MAAOkwX,GAAa75V,EAAKrd,MAASqd,EAAKtmB,IAC/EsmB,EAAKtmB,GAAMsmB,EAAKtmB,EAAIsmB,EAAKrd,OAAUusT,IAC7CoH,EAAYA,EAAUpvT,OAAO,KAAOgoT,EAAS,KAAO5vT,EAAQ+jB,OAAO1pB,EAAI2F,EAAQ+jB,OAAO3gB,QAClF,MAAQwsT,EAAS,IAAM5vT,EAAQ+jB,OAAO1pB,EAAI,KAC9C48T,EAAYA,EAAUrvT,OAAO,OAAkB,KAAO8Y,EAAKrmB,EAAIqmB,EAAKtd,QAChE,QAAmB,IAAMs3W,EAAO,MAG5C,IAAIr6W,EAAU,IAAIojB,GAAWzjB,EAAQ3R,QAAQsC,GAAK,iBAAkB,cAAeglU,EAAetyT,MAAOrD,EAAQiM,OAAOniB,OAAS0wX,GAAiB7kD,EAAe9xS,OAAS7jB,EAAQ0jB,WAAW+L,cAAgB,cAAe,EAAGkmS,EAAex2R,UAAW63R,GACzP3pU,KAAKotX,UAAUzrX,YAAYgR,EAAQkb,SAASsI,SAASnjB,IACrDA,EAAU,IAAIojB,GAAWzjB,EAAQ3R,QAAQsC,GAAK,iBAAkB,cAAey+T,EAAe/rT,MAAOm3W,GAAiBprD,EAAevrS,OAAS7jB,EAAQ0jB,WAAW+L,cAAe,EAAGkmS,EAAex2R,UAAW83R,GAC7M5pU,KAAKotX,UAAUzrX,YAAYgR,EAAQkb,SAASsI,SAASnjB,KAKzD65W,EAAmBxxX,UAAUmyX,iBAAmB,WAC5C,IAEI9jD,EAFAvzT,EAAOnW,KAAKgtX,eAAep4C,YAAY98T,MACvCnF,EAAU3S,KAAKgtX,eAGfhmW,GADOrU,EAAQ+jB,OACA/jB,EAAQkb,SAASw+C,aAAc/oE,GAAIqP,EAAQ3R,QAAQsC,GAAK,iBACvEmqX,EAAoB96W,EAAQkb,SAASw+C,aAAc/oE,GAAIqP,EAAQ3R,QAAQsC,GAAK,0BAC5EoqX,EAAqB/6W,EAAQkb,SAASw+C,aAAc/oE,GAAIqP,EAAQ3R,QAAQsC,GAAK,2BAC7EqqX,EAAgBx3W,EAKpB,GAJAuzT,EAAS1pU,KAAK4tX,WAAWj7W,GAAS,GAClC3S,KAAK6tX,gBAAgB13W,EAAMuzT,EAAQ,cAAe/2T,EAAS86W,GAC3DE,EAAc9nT,aAAe8nT,EAAcvoC,mBAAsBzyU,EAAQymL,SACrEp5L,KAAK8tX,sBAAsB33W,EAAKivU,oBAChCzyU,EAAQmtB,gBAAwC,aAAtBntB,EAAQuf,WAAwD,UAA5BlyB,KAAKolV,mBAAgC,CACnGuoC,EAAch7V,aAAaxwB,SAAW,EACtCwrX,EAAcx4V,iBACdn1B,KAAKstX,eAAeK,GACpB3tX,KAAK+sX,kBAAoBY,EAAcx4V,cACvCu0S,EAAS1pU,KAAK4tX,WAAWj7W,GAAS,GAClC,IAAI2xB,EAAStkC,KAAK6tX,gBAAgBF,EAAejkD,EAAQ,mBAAoB/2T,EAAS+6W,GAClF3wW,EAAO,IAAIqZ,GAAWzjB,EAAQ3R,QAAQsC,GAAK,uBAAwB,cAAeqP,EAAQovT,eAAe/rT,MAAOrD,EAAQovT,eAAevrS,OAAS7jB,EAAQ0jB,WAAW+L,cAAe,EAAGzvB,EAAQ21T,eAAex2R,UAAWxN,GAC3NtkC,KAAKotX,UAAUzrX,YAAYgR,EAAQkb,SAASsI,SAASpZ,IAEzDpK,EAAQiiU,YAAY98T,MAAMqd,cAAgBxiB,EAAQiiU,YAAY98T,MAAMqd,cAAc5a,OAAOozW,EAAcx4V,eACvGnO,EAAarlB,YAAY8rX,GACzBzmW,EAAarlB,YAAY+rX,GAEzB/6W,EAAQ2e,UAAU3vB,YAAY3B,KAAKotX,WACnCz6W,EAAQ2e,UAAU3vB,YAAYqlB,IAMlC6lW,EAAmBxxX,UAAUyyX,sBAAwB,SAAUpnX,GAC3D,IAAIguE,GAAS,QAAS,UAAW,SAAU,QAAS,OAAQ,QAAS,UAAW,WAChF,MAAiB,UAAThuE,EAAmB,QAAUguE,EAAMA,EAAMn2E,QAAQmI,GAAQ,IAMrEmmX,EAAmBxxX,UAAUiyX,eAAiB,SAAUn3W,GACpDA,EAAKgf,iBACL,IACI44V,EADAxwX,EAAQ,IAAIyiB,KAAK7J,EAAKwc,aAAa5S,KAEnC5d,EAAWnC,KAAKgtX,eAAe7qX,SAAWnC,KAAKgtX,eAAe7qX,SAAW,EAC7E,OAAQgU,EAAKivU,oBACT,IAAK,QACD7nV,EAAQ,IAAIyiB,KAAKziB,EAAMwoE,cAAc74D,YACrC,MACJ,IAAK,UAEG3P,EADAA,EAAM0oE,YAAc,EACZ,IAAIjmD,KAAKziB,EAAMwoE,cAAe,EAAG,GAEpCxoE,EAAM0oE,YAAc,EACjB,IAAIjmD,KAAKziB,EAAMwoE,cAAe,EAAG,GAEpCxoE,EAAM0oE,YAAc,EACjB,IAAIjmD,KAAKziB,EAAMwoE,cAAe,EAAG,GAGjC,IAAI/lD,KAAKziB,EAAMwoE,cAAe,EAAG,GAE7C,MACJ,IAAK,SACDxoE,EAAQ,IAAIyiB,KAAKziB,EAAMwoE,cAAexoE,EAAM0oE,YAC5C,MACJ,IAAK,QACD1oE,EAAQ,IAAIyiB,KAAKziB,EAAMwoE,cAAexoE,EAAM0oE,WAAY1oE,EAAM4oE,UAAY5oE,EAAMqmE,UAChF,MACJ,IAAK,OACDrmE,EAAQ,IAAIyiB,KAAKziB,EAAMwoE,cAAexoE,EAAM0oE,WAAY1oE,EAAM4oE,WAC9D,MACJ,IAAK,QACD5oE,EAAQ,IAAIyiB,KAAKziB,EAAMwoE,cAAexoE,EAAM0oE,WAAY1oE,EAAM4oE,UAAW5oE,EAAM6oE,YAC/E,MACJ,IAAK,UACD7oE,EAAQ,IAAIyiB,KAAKziB,EAAMwoE,cAAexoE,EAAM0oE,WAAY1oE,EAAM4oE,UAAW5oE,EAAM6oE,WAAY7oE,EAAM+oE,cACjG,MACJ,IAAK,UACD/oE,EAAQ,IAAIyiB,KAAKziB,EAAMwoE,cAAexoE,EAAM0oE,WAAY1oE,EAAM4oE,UAAW5oE,EAAM6oE,WAAY7oE,EAAM+oE,aAAc/oE,EAAMw6E,cAO7H,IAJAg2S,EAAexwX,EAAM0iB,UACrBjgB,KAAKgtX,eAAehxV,OAASh8B,KAAKgtX,eAAe/9S,KAAK07B,eAClD3uE,OAAQ7lB,EAAKmlB,YAAa50B,KAAMqwB,GAAiB5gB,EAAK6vU,cAAetkR,SAAU1hE,KAAKqlV,YAAYlvU,KAE7F43W,EAAe53W,EAAKwc,aAAarmB,KACpC6J,EAAKgf,cAAc3wB,KAAK,IAAIu0B,GAAc/4B,KAAK0/F,YAAY1/F,KAAKgtX,eAAehxV,OAAO,IAAIhc,KAAK+tW,IAAgB53W,EAAMA,EAAKgf,cAAc14B,QAASsxX,EAAc/tX,KAAKgtX,eAAeh3V,aACnL+3V,EAAe/tX,KAAK4lE,yBAAyBzvD,EAAM43W,EAAc5rX,GAAU8d,WASnF4sW,EAAmBxxX,UAAUqkG,YAAc,SAAUjzE,EAAMtW,EAAMlE,GAC7D,IAAI+7W,EAAcvhW,EACdwhW,EAAejuX,KAAKgtX,eAAeltV,gBAAmD,IAAjC9/B,KAAK8sX,iBAAiBrwX,OAC/E,OAAQ0Z,EAAKivU,oBACT,IAAK,UACG34T,EAAKluB,QAAQ,QAAU,EACvByvX,EAAeC,EAAiD,WAAlCxhW,EAAKld,QAAQ,MAAO,YAE7Ckd,EAAKluB,QAAQ,QAAU,EAC5ByvX,EAAeC,EAAiD,WAAlCxhW,EAAKld,QAAQ,MAAO,YAE7Ckd,EAAKluB,QAAQ,QAAU,EAC5ByvX,EAAeC,EAAiD,WAAlCxhW,EAAKld,QAAQ,MAAO,YAE7Ckd,EAAKluB,QAAQ,QAAU,IAC5ByvX,EAAeC,EAAiD,WAAlCxhW,EAAKld,QAAQ,MAAO,aAEtD,MACJ,IAAK,QACDy+W,EAAc,UAAW/7W,EACzB,MACJ,QACI+7W,EAAcvhW,EAGtB,OAAOuhW,GAOXnB,EAAmBxxX,UAAUuyX,WAAa,SAAUj7W,EAASu7W,GACzD,IAAIxkD,EACAjoU,EAAYkR,EAAQ+jB,OAAO1pB,EAAI2F,EAAQ+jB,OAAO3gB,OAC9Co4W,EAAax7W,EAAQovT,eAAehsT,OACpCk9P,EAAazmP,GAAY,gBAAiB7Z,EAAQqjB,YAAYjgB,OAC9DqjD,EAAU,EAuBd,OArBIswQ,EAD2B,YAA1B/2T,EAAQ8sG,eAAwD,YAAzB9sG,EAAQkvT,cAAyD,IAA1BlvT,EAAQiM,OAAOniB,OACrFgF,EAAY0sX,EAAa/0T,EAAuB,IAAb65M,EAEb,WAA1BtgQ,EAAQ8sG,eAAuD,WAAzB9sG,EAAQkvT,aAC1CpgU,EAAY0sX,EAAa/0T,EAEH,WAA1BzmD,EAAQ8sG,eAAuD,YAAzB9sG,EAAQkvT,aAC1CpgU,EAAY23D,EAGZ33D,EAAY23D,EAAwB,IAAb65M,EAEhCi7G,IACA90T,EAAU,GACoB,YAA1BzmD,EAAQ8sG,eAAyD,IAA1B9sG,EAAQiM,OAAOniB,OACtDitU,GAAUtwQ,EAAuB,IAAb65M,EAGpBy2D,EAAmC,YAAzB/2T,EAAQkvT,cAAwD,IAA1BlvT,EAAQiM,OAAOniB,OAC3DgF,EAAY0sX,EAAa/0T,EAAuB,IAAb65M,EAAoBxxQ,EAAY23D,EAAuB,IAAb65M,GAGlFy2D,GAUXmjD,EAAmBxxX,UAAUwyX,gBAAkB,SAAU13W,EAAMuzT,EAAQpmU,EAAIqP,EAASqU,GAChF,IACI3T,EACA+6W,EACA7rD,EAGA8rD,EANAC,EAAYn4W,EAAKgf,cAAc14B,OAI/B42B,EAAO1gB,EAAQ+jB,OACf4N,EAAS,GAET6oV,EAAiBx6W,EAA4B,qBAAI,cAAgB,KACjE47W,EAAQ57W,EAAQO,UAAamgB,EAAKtmB,EAAIsmB,EAAKrd,MAASqd,EAAKtmB,EACzD84D,EAAe1vD,EAAKivU,mBACpBopC,EAAuC,aAAtB77W,EAAQuf,UACzBo8V,EAAY,EAAKn4W,EAAKgf,cAAc,GAAGn4B,MAAQmZ,EAAKgf,cAAc,GAAGn4B,OAChEmZ,EAAKwc,aAAarmB,IAAM6J,EAAKgf,cAAc,GAAGn4B,OAAS,EAAI,EAC1C,aAAtB2V,EAAQuf,WAA8C,YAAjB2zC,GAA+C,UAAjBA,GACnE7lE,KAAKyuX,mBAAmBt4W,EAAMxD,GAElC,IAAK,IAAIxW,EAAI,EAAG0F,EAAMysX,EAAWnyX,EAAI0F,EAAK1F,IA0BtC,GAzBAkX,EAAQ8C,EAAKgf,cAAch5B,GAC3BkX,EAAMyZ,KAAON,GAAYnZ,EAAMoZ,KAAMtW,EAAK6f,YACF,WAApCrjB,EAAQ+7W,wBACRnsD,EAAUtuS,GAAoB5gB,EAAMrW,MAAQwxX,EAAiB,EAAIr4W,GAAQkd,EAAKrd,MAASqd,EAAKtmB,EAEtFzJ,EAAG/E,QAAQ,cAAgB,IACjCgkU,EAASviU,KAAK2uX,cAAcx4W,EAAMha,IAEtCkyX,EAAcp6V,GAAoB5gB,EAAW,MAAG8C,GAAQkd,EAAKrd,MAASqd,EAAKtmB,GAEhE,IAAN5Q,GAAYA,IAAMga,EAAKgf,cAAc14B,OAAS,GAAKkW,EAAQO,YAAeqvT,EAASlvS,EAAKtmB,IACzFw1T,EAASlvS,EAAKtmB,EAAIsG,EAAMyZ,KAAK9W,MAAQ,IAEpC7Z,IAAMga,EAAKgf,cAAc14B,OAAS,GAAY,IAANN,GAAWwW,EAAQO,YAC1DqvT,EAASlvT,EAAMyZ,KAAK9W,MAAUqd,EAAKtmB,EAAIsmB,EAAKrd,QAC9CusT,EAASlvS,EAAKtmB,EAAIsmB,EAAKrd,MAAQ3C,EAAMyZ,KAAK9W,MAAQ,GAGlD1S,EAAG/E,QAAQ,qBAAuB,GAC9BgkU,GAAUlvS,EAAKtmB,GAAMsmB,EAAKtmB,EAAIsmB,EAAKrd,OAAUusT,IAC7Cj+R,EAASA,EAAO/pB,OAAO,KAAO8zW,EAAa,IAAM3kD,EAC7C,MAAQ2kD,EAAa,KAAO3kD,EAASr2T,EAAMyZ,KAAK/W,UAIvB,SAAjCpD,EAAQ+vT,sBACF,IAANvmU,IAAW6D,KAAKyiU,YAAYtsT,EAAMosT,EAAQlvT,EAAMyZ,KAAK9W,MAAOu4W,EAAOH,EAAUthW,KAAK9W,OADtF,CAKA,IAAI4iB,OAAW,EACX5C,EAAarjB,EAAQqjB,WACrBtxB,GACAooB,KAAMkJ,EAAWlJ,KAAM0J,MAAO22V,GAAiBn3V,EAAWQ,OAAS7jB,EAAQ0jB,WAAWiM,eACtFrV,WAAY+I,EAAW/I,WACvBD,UAAWgJ,EAAWhJ,WAAara,EAAQqjB,WAAWhJ,UACtDD,WAAYiJ,EAAWjJ,YAAcpa,EAAQqjB,WAAWjJ,WACxDtf,QAASuoB,EAAWvoB,SAAWkF,EAAQqjB,WAAWvoB,QAClDkzB,cAAe3K,EAAW2K,eAAiBhuB,EAAQqjB,WAAW2K,cAC9DP,aAAcpK,EAAWoK,cAAgBztB,EAAQqjB,WAAWoK,cAEhExH,GACIC,QAAQ,EAAOpB,KAAM,cACrBhL,KAAMpZ,EAAMoZ,KAAMzvB,MAAOqW,EAAMrW,MAAOg5B,WAAYtxB,EAClDwnD,OAAQ,IAAIh2B,GAAKqsS,EAAQmH,EAAQr2T,EAAMyZ,KAAK9W,MAAO3C,EAAMyZ,KAAK/W,SAElEpD,EAAQ6T,QAAQ,cAAeoS,GAC1BA,EAASC,SACVlmB,EAAQ60T,OAAOhjU,KAAKo0B,GAKxBtC,GAAY,IAAIC,GAAWv2B,KAAKgtX,eAAehsX,QAAQsC,GAAKA,EAAKnH,EAAGomU,EAAQmH,EAAQ,SAAU9wS,EAASnM,MAAOmM,EAAS5C,WAAY4C,EAAS5C,WAAWQ,OAAS7jB,EAAQ0jB,WAAWiM,eAAgBtb,GAAcxjB,aAAa,QAA4B,aAAnB2S,EAAK+b,UAA2B,kBAAoB,mBAC3Rq8V,EAAQhsD,EACR6rD,EAAY/6W,GAEhB,OAAOixB,GAKXuoV,EAAmBxxX,UAAUonU,YAAc,SAAUtsT,EAAM8sT,EAAU66C,EAAcyQ,EAAOK,GACtF,OAAQz4W,EAAe,WAAK8sT,EAAW66C,EAAe,EAAIyQ,EAAQK,EAAY,EACzE3rD,EAAW66C,EAAe,EAAIyQ,EAAQK,EAAY,GAO3D/B,EAAmBxxX,UAAUozX,mBAAqB,SAAUt4W,EAAMxD,GAS9D,IAAK,IALD47W,EACAtrD,EAJAuE,EAASrxT,EAAKgf,cACdm8U,EAAc9pC,EAAO/qU,OACrBi6B,EAAS/jB,EAAQ+jB,OAGjBv0B,EAAiC,aAAtBwQ,EAAQuf,UACnBo/U,EAAc,EAAK9pC,EAAO,GAAGxqU,MAAQwqU,EAAO,GAAGxqU,MAASmZ,EAAKwc,aAAaxwB,SACxE,EACGhG,EAAI,EAAGA,EAAIm1W,EAAan1W,IAC7B8mU,EAAYhvS,GAAoBuzS,EAAOrrU,GAAGa,MAAQmF,EAAW,EAAIgU,GAAQugB,EAAO1gB,MAAS0gB,EAAO3pB,EAChGy6T,EAAOrrU,GAAG2wB,KAAON,GAAYg7S,EAAOrrU,GAAGswB,KAAMtW,EAAK6f,YAExC,IAAN75B,GAAW8mU,EAAWvsS,EAAO3pB,IAC7Bk2T,EAAWvsS,EAAO3pB,EAAIy6T,EAAOrrU,GAAG2wB,KAAK9W,MAAQ,GAEjB,YAA5BG,EAAKivU,mBACK,IAANjpV,IACKqrU,EAAOrrU,GAAGswB,KAAKluB,QAAQ,YAAc,GACrCyB,KAAKyiU,YAAYtsT,EAAM8sT,EAAUuE,EAAOrrU,GAAG2wB,KAAK9W,MAAOu4W,EAAO/mD,EAAOrrU,EAAI,GAAG2wB,KAAK9W,QAClFwxT,EAAOqnD,MAAM,SAAUx7W,GAEnB,OADAA,EAAMoZ,KAAOpZ,EAAMoZ,KAAKvf,WAAWqC,QAAQ,UAAW,QAC/C,IAEX4G,EAAKgf,cAAgBqyS,EACrBxnU,KAAKyuX,mBAAmBt4W,EAAMxD,IAG1B3S,KAAKyiU,YAAYtsT,EAAM8sT,EAAUuE,EAAOrrU,GAAG2wB,KAAK9W,MAAOu4W,EAAO/mD,EAAOrrU,EAAI,GAAG2wB,KAAK9W,SACjFwxT,EAAOqnD,MAAM,SAAUx7W,GAEnB,OADAA,EAAMoZ,KAAOpZ,EAAMoZ,KAAKvf,WAAWqC,QAAQ,MAAO,MAC3C,IAEX4G,EAAKgf,cAAgBqyS,IAKA,UAA5BrxT,EAAKivU,oBACC,IAANjpV,GAAcqrU,EAAOrrU,GAAGswB,KAAKluB,QAAQ,SAAW,GAChDyB,KAAKyiU,YAAYtsT,EAAM8sT,EAAUuE,EAAOrrU,GAAG2wB,KAAK9W,MAAOu4W,EAAO/mD,EAAOrrU,EAAI,GAAG2wB,KAAK9W,SAClFwxT,EAAOqnD,MAAM,SAAUx7W,GAEnB,OADAA,EAAMoZ,KAAOpZ,EAAMoZ,KAAKvf,WAAWqC,QAAQ,OAAQ,MAC5C,IAEX4G,EAAKgf,cAAgBqyS,GAG7B+mD,EAAQtrD,GAQhB4pD,EAAmBxxX,UAAUszX,cAAgB,SAAUx4W,EAAMlE,GACzD,IAAIoB,EAAQ8C,EAAKgf,cAAcljB,GAC3B68W,EAAY34W,EAAKgf,cAAcljB,EAAQ,GACvCykB,EAAS12B,KAAKgtX,eAAet2V,OACjC,MAAwD,SAAhD12B,KAAKgtX,eAAe0B,wBACvBz6V,GAAoB5gB,EAAW,MAAG8C,GAAQugB,EAAO1gB,MAAS0gB,EAAO3pB,EAAIsG,EAAMyZ,KAAK9W,MAAQ,EACxFie,GAAoB66V,EAAYA,EAAU9xX,MAAQmZ,EAAKwc,aAAarmB,IAAM6J,GAAQugB,EAAO1gB,MAAS0gB,EAAO3pB,EAAIsG,EAAMyZ,KAAK9W,OAE1H62W,GACTvnC,KjTzYF,SAAW5oB,GAEPA,EAAoBP,eAChBrvS,KAAM,OACNC,WAAY,SACZyJ,MAAO,KACPxJ,UAAW,SACXC,WAAY,YAGhByvS,EAAoBH,kBAChBzvS,KAAM,OACNC,WAAY,SACZyJ,MAAO,KACPxJ,UAAW,SACXC,WAAY,YAfpB,CAiBGyvS,KAAwBA,QkTtB3B,ICAWvnC,GDAP7qM,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAS5DmyV,GAAsC,SAAU5jS,GAEhD,SAAS4jS,IACL,IAAIhvX,EAAmB,OAAXorF,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAGhE,OADAD,EAAM20B,SAAW,IAAIwB,GAAK,EAAG,EAAG,EAAG,GAC5Bn2B,EAgCX,OArCAuqF,GAAUykS,EAAsB5jS,GAOhCN,IACI3jF,EAAS,OACV6nX,EAAqB1zX,UAAW,kBAAc,GACjDwvF,IACI3jF,EAAS,OACV6nX,EAAqB1zX,UAAW,aAAS,GAC5CwvF,IACI3jF,EAAS,OACV6nX,EAAqB1zX,UAAW,aAAS,GAC5CwvF,IACI3jF,EAAS,OACV6nX,EAAqB1zX,UAAW,aAAS,GAC5CwvF,IACI3jF,EAAS,SACV6nX,EAAqB1zX,UAAW,YAAQ,GAC3CwvF,IACI9iF,GAAU03B,QAAQ,GAASnH,KAC5By2V,EAAqB1zX,UAAW,iBAAa,GAChDwvF,IACI9iF,GAAUyuB,MAAO,cAAexgB,MAAO,GAAK4mT,KAC7CmyD,EAAqB1zX,UAAW,cAAU,GAC7CwvF,IACI3jF,EAAS,OACV6nX,EAAqB1zX,UAAW,YAAQ,GAC3CwvF,IACI3jF,EAAS,IACV6nX,EAAqB1zX,UAAW,aAAS,GAC5CwvF,IACI3jF,EAAS,MACV6nX,EAAqB1zX,UAAW,iBAAa,GACzC0zX,GACT/vT,IAKEgwT,GAA+B,SAAU7jS,GAEzC,SAAS6jS,IACL,OAAkB,OAAX7jS,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAiB/D,OAnBAsqF,GAAU0kS,EAAe7jS,GAIzBN,IACI3jF,EAAS,OACV8nX,EAAc3zX,UAAW,aAAS,GACrCwvF,IACI3jF,EAAS,OACV8nX,EAAc3zX,UAAW,cAAU,GACtCwvF,IACI9iF,GAAUiO,MAAO,EAAGwgB,MAAO,MAAQomS,KACpCoyD,EAAc3zX,UAAW,cAAU,GACtCwvF,IACI3jF,EAAS,OACV8nX,EAAc3zX,UAAW,YAAQ,GACpCwvF,IACI3jF,EAAS,WACV8nX,EAAc3zX,UAAW,YAAQ,GAC7B2zX,GACThwT,IAKEiwT,GAA+B,SAAU9jS,GAEzC,SAAS8jS,IACL,OAAkB,OAAX9jS,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbAsqF,GAAU2kS,EAAe9jS,GAIzBN,IACI9iF,KAAYinX,KACbC,EAAc5zX,UAAW,aAAS,GACrCwvF,IACI3jF,EAAS,OACV+nX,EAAc5zX,UAAW,2BAAuB,GACnDwvF,IACI3jF,EAAS,OACV+nX,EAAc5zX,UAAW,6BAAyB,GAC9C4zX,GACTjwT,IAKEkwT,GAAyB,SAAU/jS,GAEnC,SAAS+jS,IACL,OAAkB,OAAX/jS,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAc/D,OAhBAsqF,GAAU4kS,EAAS/jS,GAInBN,IACI3jF,EAAS,UACVgoX,EAAQ7zX,UAAW,oBAAgB,GACtCwvF,IACI3jF,EAAS,IACVgoX,EAAQ7zX,UAAW,gBAAY,GAClCwvF,IACI3jF,EAAS,OACVgoX,EAAQ7zX,UAAW,YAAQ,GAC9BwvF,IACI3jF,GAAS,IACVgoX,EAAQ7zX,UAAW,gBAAY,GAC3B6zX,GACTlwT,IAKEmwT,GAAwC,SAAUhkS,GAElD,SAASgkS,IACL,OAAkB,OAAXhkS,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbAsqF,GAAU6kS,EAAwBhkS,GAIlCN,IACI3jF,EAAS,KACVioX,EAAuB9zX,UAAW,cAAU,GAC/CwvF,IACI3jF,EAAS,WACVioX,EAAuB9zX,UAAW,gBAAY,GACjDwvF,IACIxiF,KAAe6mX,KAChBC,EAAuB9zX,UAAW,eAAW,GACzC8zX,GACTnwT,IAKEowT,GAAsC,SAAUjkS,GAEhD,SAASikS,IACL,OAAkB,OAAXjkS,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KA0B/D,OA5BAsqF,GAAU8kS,EAAsBjkS,GAIhCN,IACI3jF,GAAS,IACVkoX,EAAqB/zX,UAAW,cAAU,GAC7CwvF,IACI3jF,EAAS,MACVkoX,EAAqB/zX,UAAW,eAAW,GAC9CwvF,IACI3jF,EAAS,OACVkoX,EAAqB/zX,UAAW,YAAQ,GAC3CwvF,IACI3jF,EAAS,OACVkoX,EAAqB/zX,UAAW,cAAU,GAC7CwvF,IACI9iF,EAAQ20T,GAAoBH,iBAAkBI,KAC/CyyD,EAAqB/zX,UAAW,iBAAa,GAChDwvF,IACI3jF,EAAS,OACVkoX,EAAqB/zX,UAAW,gBAAY,GAC/CwvF,IACI9iF,GAAUyuB,MAAO,UAAWxgB,MAAO,IAAO4mT,KAC3CwyD,EAAqB/zX,UAAW,cAAU,GAC7CwvF,IACI3jF,EAAS,aACVkoX,EAAqB/zX,UAAW,mBAAe,GAC3C+zX,GACTpwT,IElLEqwT,GAA6B,WAC7B,SAASA,EAAYt9V,GACjB/xB,KAAK2S,QAAUof,EACf/xB,KAAK23B,UACL33B,KAAKunW,MAAQ/7V,GAAQqb,OAASrb,GAAQq2V,OACtC,IAAIvxU,EAAQyB,EAAMkQ,uBAAuB3R,MACzCtwB,KAAKsvX,aAAgD,IAAhCv9V,EAAMsE,WAAW6L,YAAqD,IAAjCnQ,EAAMsE,WAAW8L,YAC3EniC,KAAKu0C,UAAYxiB,EAAM/wB,QAAQsC,GAC/BtD,KAAKuvX,aAAex9V,EAAMsE,WAAW6L,WAAa,EAClDliC,KAAKtD,mBACLsD,KAAKwvX,WAAaz9V,EAAMgO,qBAAuB,cAC1CzP,EAAMsN,MAAQ7L,EAAMsE,WAAWoM,gBA0ZxC,OApZA4sV,EAAYh0X,UAAU0wG,OAAS,SAAUh6E,GACrC,IAAIlE,EAAWkE,EAAMlE,SACjBnpB,EAAQqtB,EAAMkQ,uBACdkrV,EAAiBp7V,EAA0B,qBAAI,cAAgB,KAC/D09V,EAAc5hW,EAASw+C,aACvB/oE,GAAMtD,KAAKu0C,UAAY,WACvB7vC,MAAQqtB,EAA0B,qBAAI,uBAAyB,KAE/DgkE,EAAS,IAAImuO,GAAWlkU,KAAKu0C,UAAY,sBAAuB44U,GAAiBzoX,EAAMgrX,uBAAyB39V,EAAMsE,WAAWkM,qBAAuBvsB,MAAO,GAAK,GACpKjJ,EAAGglB,EAAM2E,OAAO3pB,EAAGC,EAAG+kB,EAAM2E,OAAO1pB,EACnCgJ,MAAO+b,EAAM2E,OAAO1gB,MAAQ,EAC5BD,OAAQgc,EAAM2E,OAAO3gB,SAEzB/V,KAAK2vX,sBAAwB9hW,EAAS8V,cAAcoyD,GACpDA,EAAOzyF,GAAKtD,KAAKu0C,UAAY,uBAC7Bv0C,KAAK4vX,uBAAyB/hW,EAAS8V,cAAcoyD,GACrDA,EAAOzyF,GAAKtD,KAAKu0C,UAAY,gBAC7BwhD,EAAOn4D,KAAOuvV,GAAiBzoX,EAAMk+B,qBAAuB7Q,EAAMsE,WAAWuM,oBAC7E5iC,KAAKk7I,gBAAkBrtH,EAAS8V,cAAcoyD,GAC9C/1F,KAAKk7I,gBAAgB13I,aAAa,QAAS,wBAC3CxD,KAAK6vX,WAAahiW,EAASw+C,aACvB/oE,GAAMtD,KAAKu0C,UAAY,cAAe7vC,MAAS,sBAEnD1E,KAAK8vX,YAAcjiW,EAASw+C,aACxB/oE,GAAMtD,KAAKu0C,UAAY,eAAgB7vC,MAAS,sBAEpD1E,KAAK+vX,YAAYliW,EAAUkE,EAAM2E,OAAQ12B,KAAK6vX,WAAY7vX,KAAKu0C,UAAY,cAAek7U,GAC1FzvX,KAAK+vX,YAAYliW,EAAUkE,EAAM2E,OAAQ12B,KAAK8vX,YAAa9vX,KAAKu0C,UAAY,gBAC5Ek7U,EAAY9tX,YAAY3B,KAAK2vX,uBAC7BF,EAAY9tX,YAAY3B,KAAK4vX,wBAC7BH,EAAY9tX,YAAY3B,KAAKk7I,iBAC7Bu0O,EAAY9tX,YAAY3B,KAAK6vX,YAC7BJ,EAAY9tX,YAAY3B,KAAK8vX,aAC7B/9V,EAAMT,UAAU3vB,YAAY8tX,IAShCJ,EAAYh0X,UAAU00X,YAAc,SAAUhkR,EAAQr1E,EAAQp2B,EAAQgD,EAAImsX,GACtE,IAQI7kB,EARAj4V,EAAU3S,KAAK2S,QACfq9W,EAAQr9W,EAAQsvB,uBAAuB3R,MACvC5rB,EAAQiO,EAAQ0jB,WAChBrpB,EAAI0pB,EAAO1pB,EAAI0pB,EAAO3gB,OAAS,EAC/BhJ,EAAI/M,KAAKuvX,aACTU,EAAct9W,EAAQ0jB,WAAW8L,YAAc,EAAK,EACpDgrV,EAAgBx6W,EAAQotB,qBAAuB,cAAgB,KAC/DmwV,EAAY/C,GAAiB6C,EAAM1rV,OAAO9N,OAAS9xB,EAAM89B,eAE7DliC,EAAOqB,YAAYoqG,EAAO51E,SAAS,IAAIC,GAAW9yB,EAAK,aAAc,cAAe0sX,EAAM1rV,OAAOtuB,MAAOrD,EAAQiM,OAAOniB,OAASyzX,EAAY,cAAe,EAAG,KAAM,OAAkB,IAAOx5V,EAAQ,EAAI,QAAwB,KAAOA,EAAO1pB,EAAI0pB,EAAO3gB,QAAU,OACpQ/V,KAAKmwX,OAASnjX,EAAK2F,EAAQ0jB,WAAW8L,YAAc,EACpDniC,KAAKowX,QAAU15V,EAAO1pB,EAAIhN,KAAKmwX,OAASnwX,KAAKmwX,OAASz5V,EAAO1pB,EACzDyiX,IAAgB98W,EAAQotB,wBACxB6qU,EAAgB7+P,EAAO6M,cACT52G,UAAY,iEACdhC,KAAKmwX,OAAS,YAAcx9W,EAAQ0jB,WAAW6L,WAAa,aAAevvB,EAAQ0jB,WAAW8L,YAAc,UAC1F,WAAf6tV,EAAMtpX,KAAoB,MAAQ,MAAQ,4gBAOzD+oX,EAAY9tX,YAAYipW,IAE5BtqW,EAAO0B,WAAa,0KAED,WAAfguX,EAAMtpX,KACNpG,EAAOqB,YAAY8rB,IAAa1gB,EAAGA,EAAGC,EAAGA,GAAK,UAAYgJ,MAAOrD,EAAQ0jB,WAAW6L,WAAYnsB,OAAQpD,EAAQ0jB,WAAW8L,aAAe,GAAI,IAAI/L,GAAW9yB,EAAK,eAAgB6pX,GAAiBntX,KAAKwvX,WAAYQ,EAAM1rV,OAAOtuB,MAAOk6W,EAAW,EAAG,MAAO,UAG7P5vX,EAAOqB,YAAYoqG,EAAOpoE,cAAc,IAAIugS,GAAW5gU,EAAK,eAAgB6pX,GAAiBntX,KAAKwvX,YAAcx5W,MAAOg6W,EAAM1rV,OAAOtuB,MAAOwgB,MAAO05V,GAAa,GAC3JnjX,EAAGA,EAAK4F,EAAQ0jB,WAAW6L,WAAa,EAAIl1B,EAAGA,EAAK2F,EAAQ0jB,WAAW8L,YAAc,EACrFnsB,MAAOrD,EAAQ0jB,WAAW6L,WAC1BnsB,OAAQpD,EAAQ0jB,WAAW8L,aAC5B,EAAG,KAENniC,KAAKsvX,cACLhvX,EAAOqB,YAAYoqG,EAAO51E,SAAS,IAAIC,GAAW9yB,EAAK,aAAc,cAAe,EAAG6pX,GAAiBx6W,EAAQ0jB,WAAWqM,UAAW,EAAG,KAAM,MAAa31B,EAAI,GAAK,KAAOC,EAAIijX,GAAc,OAAmBljX,EAAI,GAAK,KAAOC,EAAIijX,GAAc,QAC7N,KAAOjjX,EAAIijX,GAAc,QAAwB,KAAOjjX,EAAIijX,GAAc,OAC/EljX,EAAI,GAAK,KAAOC,EAAIijX,GAAc,OAAmBljX,EAAI,GAAK,KAAOC,EAAIijX,GAAc,QAQhHZ,EAAYh0X,UAAUg1X,UAAY,SAAU9yX,EAAOshB,EAAK2H,EAASkL,GAC7D,IAAIK,EAAQ/xB,KAAK2S,QACbymD,EAAUrnC,EAAM2E,OAAO3pB,EACvBy9V,EAAYz4U,EAAM6iT,YAAY98T,MAAM+lT,YACpCyyD,EAAyC,IAAxBv+V,EAAMnT,OAAOniB,OAC5BoiB,GAAOthB,IACTA,GAASshB,EAAKA,EAAMthB,GAAO,IAE/BA,EAAQshB,GAAOthB,EAAQA,GAASshB,EAAKA,EAAMthB,GAAO,GAClDA,EAAQ8O,KAAKC,IAAI/O,EAAOitW,EAAUzqV,KAClClB,EAAMxS,KAAK0T,IAAIlB,EAAK2rV,EAAUl+V,KAC9BtM,KAAK6+B,OAASu6B,EAAU73B,GAAahkC,EAAOitW,EAAWz4U,EAAM2E,OAAO1gB,MAAO+b,EAAM7e,WACjFlT,KAAKgrU,KAAO5xQ,EAAU73B,GAAa1iB,EAAK2rV,EAAWz4U,EAAM2E,OAAO1gB,MAAO+b,EAAM7e,WAC7E,IAAIq9W,EAAYx+V,EAAM7e,UAAYlT,KAAKgrU,KAAOhrU,KAAK6+B,OAC/C4B,EAAe1O,EAAM7e,UAAYlT,KAAK6+B,OAAS7+B,KAAKgrU,KACxDhrU,KAAKwwX,YAAcnkX,KAAKE,IAAIvM,KAAKgrU,KAAOhrU,KAAK6+B,QAC7C7+B,KAAKk7I,gBAAgB13I,aAAa,IAAK,EAAc,IACrDxD,KAAKk7I,gBAAgB13I,aAAa,QAASxD,KAAKwwX,YAAc,IAC9DxwX,KAAK2vX,sBAAsBnsX,aAAa,QAAU+sX,EAAYn3T,EAAW,IACzEp5D,KAAK4vX,uBAAuBpsX,aAAa,IAAKi9B,EAAe,IAC7DzgC,KAAK4vX,uBAAuBpsX,aAAa,QAAUuuB,EAAM2E,OAAO1gB,OAASyqB,EAAe24B,GAAY,IACpGp5D,KAAK6vX,WAAWrsX,aAAa,YAAa,cAAgBxD,KAAK6+B,OAAS7+B,KAAKuvX,cAAgB,QAC7FvvX,KAAK8vX,YAAYtsX,aAAa,YAAa,cAAgBxD,KAAKgrU,KAAOhrU,KAAKuvX,cAAgB,QAC5F,IAAI/iX,EAAOxM,KAAK2S,QAAQ2e,UAAU1lB,wBAAwBY,KACtDxM,KAAK2S,QAAQ3R,QAAQ4K,wBAAwBY,KAC7CikX,EAAQzwX,KAAK2S,QAAQO,UAAYlT,KAAKgrU,KAAOhrU,KAAK6+B,OAClD6xV,EAAS1wX,KAAK2S,QAAQO,UAAYlT,KAAK6+B,OAAS7+B,KAAKgrU,KACzDhrU,KAAK2wX,UACD5jX,EAAGujX,EAAiB9jX,EAAO4sD,EAAUA,EACrCpsD,EAAGsjX,EAAiB,EAAIv+V,EAAM2E,OAAO1pB,EACrCgJ,MAAOs6W,EAAiBG,EAAQr3T,EAAUq3T,EAC1C16W,OAAQu6W,EAAiBtwX,KAAKmwX,OAASp+V,EAAM2E,OAAO3gB,QAExD/V,KAAK4wX,WACD7jX,EAAGujX,EAAiB9jX,EAAOkkX,EAASA,EACpC1jX,EAAGsjX,EAAiB,EAAIv+V,EAAM2E,OAAO1pB,EACrCgJ,MAAQ+b,EAAM2E,OAAO1gB,OAASyqB,EAAe24B,GAC7CrjD,OAAQu6W,EAAiBtwX,KAAKmwX,OAASp+V,EAAM2E,OAAO3gB,QAExD/V,KAAKuvV,SACDxiV,EAAGujX,EAAiBG,EAAQjkX,EAAO,EACnCQ,EAAGsjX,EAAiB,EAAIv+V,EAAM2E,OAAO1pB,EACrCgJ,MAAOs6W,EAAiBjkX,KAAKE,IAAIvM,KAAKgrU,KAAOhrU,KAAK6+B,QAAU6xV,EAC5D36W,OAAQu6W,EAAiBtwX,KAAKmwX,OAASp+V,EAAM2E,OAAO3gB,QAExD/V,KAAK6wX,aAAetzX,EACpByC,KAAK8wX,WAAajyW,EACd6S,IACA1xB,KAAK2S,QAAQo+W,mBAAmBC,kBAAkBhxX,MAClDA,KAAK2S,QAAQo+W,mBAAmBE,mBAAmBjxX,OAEnDwmB,GACAxmB,KAAKwpJ,aAAaghN,IAO1B6kB,EAAYh0X,UAAUmuJ,aAAe,SAAUz3H,GAC3C,IAAI6G,EACA9gB,EAAQ9X,KAAK2S,QAAQiiU,YAAY98T,MACjCoa,EAAYpa,EAAMoa,UACtB0G,GACIC,QAAQ,EACRt7B,MAAqB,aAAd20B,EAA2B,IAAIlS,KAAKhgB,KAAK6wX,cAC7B,gBAAd3+V,EAA8B7lB,KAAK87D,IAAIrwD,EAAMyZ,QAASvxB,KAAK6wX,cAAgB7wX,KAAK6wX,aACrFhyW,IAAmB,aAAdqT,EAA2B,IAAIlS,KAAKhgB,KAAK8wX,YAC3B,gBAAd5+V,EAA8B7lB,KAAK87D,IAAIrwD,EAAMyZ,QAASvxB,KAAK8wX,YAAc9wX,KAAK8wX,WACnFr5V,KAAM,UACNiK,aAAcD,GAAazhC,KAAK23B,OAAQ33B,KAAK6wX,aAAc7wX,KAAK8wX,YAChEhyD,cAAe9+T,KAAK2S,QAAQO,UAAY6e,EAAMzlB,IAAMtM,KAAK8wX,WACrD9wX,KAAK6wX,aAAe9+V,EAAMhS,KAAOgS,EAAMkD,MAC3Cm5C,YAAapuE,KAAK8wX,WAAa9wX,KAAK6wX,cAAgB9+V,EAAMkD,OAE9Dj1B,KAAK2S,QAAQ6T,QAAQ,UAAWoS,IAKpCy2V,EAAYh0X,UAAUqB,iBAAmB,WACjCsD,KAAK2S,QAAQq0E,cAGjBhnF,KAAK2S,QAAQizE,GAAGp6E,GAAQ2+E,eAAgBnqF,KAAKq0U,iBAAkBr0U,MAC/DA,KAAK2S,QAAQizE,GAAGp6E,GAAQ0+E,gBAAiBlqF,KAAK6/G,iBAAkB7/G,MAChEA,KAAK2S,QAAQizE,GAAGp6E,GAAQ4+E,cAAepqF,KAAK4pN,eAAgB5pN,MAC5DA,KAAK2S,QAAQizE,GAAGp6E,GAAQC,UAAY,eAAiB,aAAczL,KAAKirW,mBAAoBjrW,QAKhGqvX,EAAYh0X,UAAUuB,oBAAsB,WACpCoD,KAAK2S,QAAQq0E,cAGjBhnF,KAAK2S,QAAQqzE,IAAIx6E,GAAQ2+E,eAAgBnqF,KAAKq0U,kBAC9Cr0U,KAAK2S,QAAQqzE,IAAIx6E,GAAQ0+E,gBAAiBlqF,KAAK6/G,kBAC/C7/G,KAAK2S,QAAQqzE,IAAIx6E,GAAQ4+E,cAAepqF,KAAK4pN,gBAC7C5pN,KAAK2S,QAAQqzE,IAAIx6E,GAAQC,UAAY,eAAiB,aAAczL,KAAKirW,sBAO7EokB,EAAYh0X,UAAUg5U,iBAAmB,SAAUxzU,GAC/C,IAGItD,EACAshB,EAJAlM,EAAU3S,KAAK2S,QACf63V,EAAY73V,EAAQiiU,YAAY98T,MAAM+lT,YACtCnnS,EAAS/jB,EAAQ+jB,OAIrB,GADA12B,KAAKkxX,iBAAiBrwX,EAAEsG,OAAO7D,IAC3BtD,KAAKwzG,QAAU7gG,EAAQo6T,QAAUr2S,EAAO3pB,EAAG,CAC3C,OAAQ/M,KAAKmxX,eACT,IAAK,OACDx+W,EAAQwV,WAAanoB,KAAKoxX,cAAc/kX,KAAKE,IAAIoG,EAAQo6T,OAASr2S,EAAO3pB,IACzE,MACJ,IAAK,QACD4F,EAAQulB,SAAWl4B,KAAKoxX,cAAc/kX,KAAKE,IAAIoG,EAAQo6T,OAASr2S,EAAO3pB,IACvE,MACJ,IAAK,SACDxP,EAAQ8O,KAAKC,IAAItM,KAAKoxX,cAAc/kX,KAAKE,IAAIvM,KAAK6+B,QAAU7+B,KAAKqxX,cAAgB1+W,EAAQo6T,QAAUr2S,EAAO3pB,IAAKy9V,EAAUzqV,KACzHlB,EAAMxS,KAAK0T,IAAI/f,KAAKoxX,cAAc/kX,KAAKE,IAAIvM,KAAKgrU,MAAQhrU,KAAKqxX,cAAgB1+W,EAAQo6T,QAAUr2S,EAAO3pB,IAAKy9V,EAAUl+V,KAClGD,KAAK+S,MAAM/S,KAAKE,IAAIg1B,GAAa1iB,EAAK2rV,EAAW73V,EAAQ+jB,OAAO1gB,MAAOrD,EAAQO,WAC9FquB,GAAahkC,EAAOitW,EAAW73V,EAAQ+jB,OAAO1gB,MAAOrD,EAAQO,eAC5C7G,KAAK+S,MAAMpf,KAAKwwX,eACjC79W,EAAQwV,WAAa5qB,EACrBoV,EAAQulB,SAAWrZ,GAI3Bhe,EAAE2kB,gBAAkBxlB,KAAKunW,OACzB1mW,EAAE2kB,iBAENxlB,KAAKqwX,UAAU19W,EAAQwV,WAAYxV,EAAQulB,UAAWvlB,EAAQ2+W,qBAAuB3+W,EAAQo+W,oBAAsBp+W,EAAQkf,QAAQ4N,QACnIz/B,KAAKqxX,cAAgB1+W,EAAQo6T,SAOrCsiD,EAAYh0X,UAAU+1X,cAAgB,SAAUrkX,GAC5C,IAAI4F,EAAU3S,KAAK2S,QACf63V,EAAY73V,EAAQiiU,YAAY98T,MAAM+lT,YAE1C,OAAOr8R,GAAsBz0B,EADhB4F,EAAQ+jB,OACkB1gB,MAAOw0V,EAAW73V,EAAQO,YAMrEm8W,EAAYh0X,UAAUwkH,iBAAmB,SAAUh/G,GAC/Cb,KAAKmxX,cAAgBnxX,KAAKkxX,iBAAiBrwX,EAAEsG,OAAO7D,IACpDtD,KAAKk7I,gBAAgB13I,aAAa,QAAS,4BAC3CxD,KAAKwzG,SAAkC,mBAAvBxzG,KAAKmxX,gBAAuCnxX,KAAKmxX,eACjEnxX,KAAKqxX,cAAgBrxX,KAAK2S,QAAQkvU,YAMtCwtC,EAAYh0X,UAAU61X,iBAAmB,SAAU5tX,GAC/C,IAAIiuX,EAAavxX,KAAK2S,QAAQ0jB,WAAWsM,gBACzC,OAAIr/B,EAAG/E,QAAQyB,KAAKu0C,UAAY,gBAAkB,GAC9Cv0C,KAAK6vX,WAAWt+W,WAAW,GAAG/N,aAAa,OAAQ+tX,GAC5C,QAEFjuX,EAAG/E,QAAQyB,KAAKu0C,UAAY,iBAAmB,GACpDv0C,KAAK8vX,YAAYv+W,WAAW,GAAG/N,aAAa,OAAQ+tX,GAC7C,SAEFjuX,EAAG/E,QAAQyB,KAAKu0C,UAAY,kBAAoB,EAC9C,SAEFjxC,EAAG/E,QAAQ,mBAAqB,GACrCyB,KAAK6vX,WAAWt+W,WAAW,GAAG/N,aAAa,OAAQxD,KAAKwvX,YACxDxvX,KAAK8vX,YAAYv+W,WAAW,GAAG/N,aAAa,OAAQxD,KAAKwvX,YAClD,kBAEFlsX,EAAG/E,QAAQyB,KAAKu0C,UAAY,gBAAkB,GAAgC,aAA3Bv0C,KAAK2S,QAAQuf,WACrElyB,KAAKmrU,YAAc7nU,EAAGpG,MAAM,KAAK,GAC1B,oBAEFoG,EAAG/E,QAAQyB,KAAKu0C,UAAY,oBAAsB,GAAgC,aAA3Bv0C,KAAK2S,QAAQuf,WACzElyB,KAAKmrU,YAAc7nU,EAAGpG,MAAM,KAAK,GAC1B,sBAGP8C,KAAK6vX,WAAWt+W,WAAW,GAAG/N,aAAa,OAAQxD,KAAKwvX,YACxDxvX,KAAK8vX,YAAYv+W,WAAW,GAAG/N,aAAa,OAAQxD,KAAKwvX,YACrDxvX,KAAK2S,QAAQ6+W,uBACbxxX,KAAK2S,QAAQ6+W,qBAAqB59K,eAAgB,GAE/C,OAOfy7K,EAAYh0X,UAAUuuN,eAAiB,SAAU/oN,GAC7C,IAAI8R,EAAU3S,KAAK2S,QACfof,EAAQpf,EAAQiiU,YAAY98T,MAAM+lT,YAClCr3S,EAAU7T,EAAQ2+W,qBAClBG,EAAiB9+W,EAAQkf,QAAQ4N,OACrC,GAA2B,mBAAvBz/B,KAAKmxX,cAAoC,CACzC,IAAIn0X,OAAQ,EACRO,OAAQ,EACRshB,OAAM,EACNi3G,EAAQnjH,EAAQO,UAChBw+W,EAAa/+W,EAAQulB,SAAWvlB,EAAQwV,WACxCxV,EAAQkvU,WAAa7hV,KAAK6+B,QAC1B7hC,EAAQqP,KAAKC,IAAItM,KAAKoxX,cAAez+W,EAAQkvU,WAAc7hV,KAAKwwX,YAAc,EAAK79W,EAAQ+jB,OAAO3pB,GAAKglB,EAAMhS,KAC7GlB,EAAMi3G,EAAQ94H,EAASA,EAAQ00X,EAC/Bn0X,EAAQu4H,EAAS94H,EAAQ00X,EAAc10X,IAGvCA,EAAQqP,KAAK0T,IAAI/f,KAAKoxX,cAAez+W,EAAQkvU,WAAc7hV,KAAKwwX,YAAc,EAAK79W,EAAQ+jB,OAAO3pB,GAAKglB,EAAMzlB,KAC7G/O,EAAQu4H,EAAQ94H,EAASA,EAAQ00X,EACjC7yW,EAAMi3G,EAAS94H,EAAQ00X,EAAc10X,GAEzCgD,KAAKgzU,iBAAiBz1U,EAAOshB,EAAKlM,GAClC6T,GAAU,OAET,GAA2B,qBAAvBxmB,KAAKmxX,eAA+D,sBAAvBnxX,KAAKmxX,cAAuC,CAC9F,IAAIQ,EAAch/W,EAAQi/W,UAAU5xX,KAAKmxX,eAAenxX,KAAKmrU,WAAa,GAC1EnrU,KAAKgzU,iBAAiBrgU,EAAQi/W,UAAU5xX,KAAKmxX,eAAenxX,KAAKmrU,YAAYnuU,MAAQ20X,EAAcA,EAAY30X,MAAQ+0B,EAAMzlB,IAAMqG,GACnI6T,GAAU,EAEVxmB,KAAKwzG,QAAU7gG,EAAQk/W,gBACvB7xX,KAAK8xX,iBAAiBn/W,EAAS3S,KAAK6wX,aAAc7wX,KAAK8wX,WAAYtqW,EAASirW,GAC5EjrW,GAAU,GAEVA,GACAxmB,KAAKqwX,UAAUrwX,KAAK6wX,aAAc7wX,KAAK8wX,YAAY,EAAMW,GAElC,OAAvBzxX,KAAKmxX,eACDnxX,KAAK2S,QAAQgtB,uBAAuBC,QAAQnjC,OAAS,IACrDuD,KAAK2S,QAAQ6+W,qBAAqB59K,eAAgB,EAClD5zM,KAAK2S,QAAQ6+W,qBAAqBO,WAAW75S,UAAY,IAAIl4D,KAAKhgB,KAAK6wX,cACvE7wX,KAAK2S,QAAQ6+W,qBAAqBO,WAAW55S,QAAU,IAAIn4D,KAAKhgB,KAAK8wX,aAG7E9wX,KAAKk7I,gBAAgB13I,aAAa,QAAS,wBAC3CmP,EAAQwV,WAAanoB,KAAK6wX,aAC1Bl+W,EAAQulB,SAAWl4B,KAAK8wX,WACxB9wX,KAAKwzG,QAAS,EACdxzG,KAAKmrU,WAAa,KAClBnrU,KAAKmxX,cAAgB,MAQzB9B,EAAYh0X,UAAUy2X,iBAAmB,SAAUn/W,EAASpV,EAAOshB,EAAK2H,EAASqL,GAC7E,IAAIkB,EAASpgB,EAAQi/W,UAAUrE,YAC/Bx6V,EAAOvuB,KAAKmO,EAAQiiU,YAAY98T,MAAM+lT,YAAYvxT,KAClDtM,KAAKqwX,UAAU1uV,GAAgB5O,EAAQx1B,GAAQokC,GAAgB5O,EAAQlU,GAAM2H,EAASqL,GACtFlf,EAAQwV,WAAanoB,KAAK6wX,aAC1Bl+W,EAAQulB,SAAWl4B,KAAK8wX,YAO5BzB,EAAYh0X,UAAU23U,iBAAmB,SAAUz1U,EAAOshB,EAAKlM,GAC3D,IAAI5S,EAAQC,KACR6wX,EAAe7wX,KAAK6wX,aACpBC,EAAa9wX,KAAK8wX,WAClBkB,EAAar/W,EAAQ2+W,qBACrBz8C,EAAgBliU,EAAQkf,QAAQ4N,OACpC,IAAInH,OAAcC,QAAQp3B,EAAc,QACpC+J,SAAUlL,KAAK2S,QAAQs/W,kBACvBz5V,SAAU,SAAUv4B,GAChBF,EAAMswX,UAAUp4V,GAAOh4B,EAAKw4B,UAAW,EAAGl7B,EAAQszX,EAAc5wX,EAAKiL,UAAY2lX,EAAc54V,GAAOh4B,EAAKw4B,UAAW,EAAG5Z,EAAMiyW,EAAY7wX,EAAKiL,UAAY4lX,GAAakB,EAAYn9C,IAEzLh2T,IAAK,SAAU+D,GACPjQ,EAAQk/W,cACR9xX,EAAM+xX,iBAAiBn/W,EAASpV,EAAOshB,GAAK,EAAMg2T,GAGlD90U,EAAMswX,UAAU9yX,EAAOshB,GAAK,EAAMg2T,GAEtC90U,EAAM4S,QAAQwV,WAAapoB,EAAM8wX,aACjC9wX,EAAM4S,QAAQulB,SAAWn4B,EAAM+wX,WAC3B/wX,EAAM4S,QAAQgtB,uBAAuBC,QAAQnjC,OAAS,IACtDsD,EAAM4S,QAAQ6+W,qBAAqB59K,eAAgB,EACnD7zM,EAAM4S,QAAQ6+W,qBAAqBO,WAAW75S,UAAY,IAAIl4D,KAAKjgB,EAAM8wX,cACzE9wX,EAAM4S,QAAQ6+W,qBAAqBO,WAAW55S,QAAU,IAAIn4D,KAAKjgB,EAAM+wX,iBAQvFzB,EAAYh0X,UAAU4vW,mBAAqB,WACvCjrW,KAAKwzG,QAAS,EACdxzG,KAAKmxX,cAAgB,KACrBnxX,KAAK2S,QAAQwV,WAAanoB,KAAK6wX,aAC/B7wX,KAAK2S,QAAQulB,SAAWl4B,KAAK8wX,YAKjCzB,EAAYh0X,UAAUiX,QAAU,WAC5BtS,KAAKpD,uBAEFyyX,KC7aP/kS,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAsB5Ds1V,GAAgC,SAAU/mS,GAM1C,SAAS+mS,EAAel/W,EAAShS,GAC7B,IAAIjB,EAAQorF,EAAO7pF,KAAKtB,KAAMgT,EAAShS,IAAYhB,KAInD,OAFAD,EAAM2zU,eAAgB,EACtB3zU,EAAMu7U,QAAU,MACTv7U,EAklBX,OA5lBAuqF,GAAU4nS,EAAgB/mS,GAe1B+mS,EAAe72X,UAAUoX,UAAY,WAGjC,GAFAzS,KAAKw+G,eACLx+G,KAAK2N,aACmB,KAApB3N,KAAKgB,QAAQsC,GAAW,CACxB,IAAI6jC,EAAa3mC,SAASkN,uBAAuB,oBAAoBjR,OACrEuD,KAAKgB,QAAQsC,GAAK,kBAAoBtD,KAAKs7U,QAAU,IAAMn0S,EAE/DnnC,KAAKukB,cAKT2tW,EAAe72X,UAAUmxW,qBAAuB,WAC5CxsW,KAAKssX,aAAe,IAAI/uD,GACxBv9T,KAAKwnU,UACLxnU,KAAK+rX,YAAc,IAAIsD,GAAYrvX,MACnCA,KAAK40U,YAAc,IAAIg3C,GAAY5rX,MACnCA,KAAKmyX,iBAAmB,IAAI3oC,GAC5BxpV,KAAK4xX,UAAY,IAAI/E,GAAmB7sX,OAK5CkyX,EAAe72X,UAAUsS,WAAa,WAClC3N,KAAKivE,KAAO,IAAIy7B,IAKpBwnR,EAAe72X,UAAU+2X,eAAiB,WACtC,IAAIC,EAAgC,aAAnBryX,KAAKkyB,UAClBH,EAAQ/xB,KAAK40U,YAAY98T,MAAM+lT,YACnC79T,KAAKmoB,WAAanoB,KAAKmoB,WAAanoB,KAAKmoB,WAAenoB,KAAKhD,MAAM,GAC9Dq1X,EAAaryX,KAAKhD,MAAM,GAAGijB,WAAajgB,KAAKhD,MAAM,GADgB+0B,EAAMhS,IAE9E/f,KAAKk4B,SAAWl4B,KAAKk4B,SAAWl4B,KAAKk4B,SAAal4B,KAAKhD,MAAM,GACxDq1X,EAAaryX,KAAKhD,MAAM,GAAGijB,WAAajgB,KAAKhD,MAAM,GADU+0B,EAAMzlB,KAM5E4lX,EAAe72X,UAAU0wG,OAAS,WAC9B/rG,KAAKwmB,QAAQ,QAAUwmW,eAAgBhtX,OACvCA,KAAK0b,WACL1b,KAAKwsW,uBACLxsW,KAAKsyX,iBACLtyX,KAAKutR,kBACLvtR,KAAK40U,YAAYi3C,YAAY7rX,OAKjCkyX,EAAe72X,UAAUqgB,SAAW,WAEhC1b,KAAKq2B,WAAa0L,GAAmB/hC,KAAKkb,MAAOlb,OAKrDkyX,EAAe72X,UAAUi3X,eAAiB,WACtCtyX,KAAK0/U,YACL1/S,GAAUhgC,MACVA,KAAKuyX,yBAKTL,EAAe72X,UAAUkyR,gBAAkB,WACvC,IAAIo+C,EAAe3rU,KAAK8/B,eAAiB,GAAK,EAC1CxP,EAAQtwB,KAAKiiC,uBAAuB3R,MACpCuP,EAAYrT,GAAY,aAAcxsB,KAAKg2B,YAAYjgB,OACvD0mB,EAASz8B,KAAKy8B,OACd6zV,GAAkBtwX,KAAK4e,OAAOniB,OAC9B+iC,GAAiBx/B,KAAK+/B,sBACtBuwV,GAAkBtwX,KAAK6xB,QAAQ4N,OAAS,GAAK,EAC7C/5B,EAAW1F,KAAKwxX,qBAChBxxX,KAAKwxX,sBAAwBxxX,KAAK2/B,uBAAuBC,QAAQnjC,OAAS,IAC1EiJ,EAAS8sX,oBAAuBzlX,EAAG,EAAGC,EAAG,EAAG+I,OAAQ,EAAGC,MAAO,GAC9DtQ,EAAS8sX,mBAAmBx8W,MAAQhW,KAAK21B,cAAc3f,MACvDtQ,EAAS8sX,mBAAmBz8W,OAAS/V,KAAK2/B,uBAAuB5pB,OACjErQ,EAAS8sX,mBAAmBxlX,EAA6C,WAAzChN,KAAK2/B,uBAAuBzrB,SACxDlU,KAAK21B,cAAc5f,OAASrQ,EAAS8sX,mBAAmBz8W,OAAS,GAEzE,IAAI08W,EAA2D,QAAzCzyX,KAAK2/B,uBAAuBzrB,UAAsBxO,EACpEA,EAAS8sX,mBAAmBxlX,EAAItH,EAAS8sX,mBAAmBz8W,OAAS,EACzE/V,KAAK02B,OAAS,IAAIR,GAAMl2B,KAAKq2B,WAAW6L,WAAa,EAAI5R,EAAMgU,OAAOtuB,MAAQymB,EAAOjwB,KAAOiwB,EAAO/vB,IAAM8yB,EAAeizV,EAAiBzyX,KAAK21B,cAAc3f,MAAQhW,KAAKq2B,WAAW6L,WAAmC,EAArB5R,EAAMgU,OAAOtuB,MAAaymB,EAAOjwB,KAAOiwB,EAAOhwB,MAAOzM,KAAK21B,cAAc5f,OAAS0mB,EAAO/vB,IAAM+vB,EAAO9vB,OAAS6yB,GAAgB95B,EAAWA,EAAS8sX,mBAAmBz8W,OAAS,IACjX,IAAI28W,GAAwC,YAAvB1yX,KAAKy/G,eAA+B6wQ,EACpDzwV,EAAY8rS,EAAgB,IAA6B,YAAtB3rU,KAAK6hU,cAA8ByuD,EACtEtwX,KAAK+hU,eAAqB,OAAI,GAEnC,GADA/hU,KAAK02B,OAAO3gB,QAAU28W,EAClBpC,EAAgB,CAChB,IAAIv6W,EAAS/V,KAAK8/B,eAAiB9/B,KAAK02B,OAAO3gB,QAAU,EAAc41T,GAAgB3rU,KAAK02B,OAAO3gB,OACnG/V,KAAK02B,OAAO1pB,GAAMhN,KAAKq2B,WAAW8L,YAAcpsB,GAAU/V,KAAKq2B,WAAW8L,YAAcpsB,GAAU,EAAI,EAEtG/V,KAAK+/B,uBACL//B,KAAK02B,OAAO1pB,EAAI,EAChBhN,KAAK02B,OAAO3gB,OAAS/V,KAAK2/B,uBAAuB5pB,SAMzDm8W,EAAe72X,UAAUwwX,YAAc,WACnC7rX,KAAK40U,YAAYlC,aAAa1yU,MAC9BA,KAAK4xX,UAAU3E,kBACfjtX,KAAK4xX,UAAUpE,mBACfxtX,KAAKikX,yBACLjkX,KAAKoyX,iBACLpyX,KAAK2yX,uBACL3yX,KAAK4yX,eACL5yX,KAAKgB,QAAQW,YAAY3B,KAAKsxB,WAC9BtxB,KAAKwmB,QAAQ,UAAYwmW,eAAgBhtX,OACzCA,KAAK+rX,YAAYsE,UAAUrwX,KAAKmoB,WAAYnoB,KAAKk4B,UAAU,EAAOl4B,KAAK6xB,QAAQ4N,QAAuC,WAA7Bz/B,KAAK6xB,QAAQghW,cAK1GX,EAAe72X,UAAUs3X,qBAAuB,WACxC3yX,KAAKwxX,uBACLxxX,KAAKwxX,qBAAqBsB,sBAAsB9yX,MAChDA,KAAKwxX,qBAAqBuB,mBAMlCb,EAAe72X,UAAU4oX,uBAAyB,WAE9C,GAAIjkX,KAAK6xB,QAAQ4N,OAAQ,CACrB,IAAIikQ,EAAaljS,SAASW,cAAc,OACxCuiS,EAAWpgS,GAAKtD,KAAKgB,QAAQsC,GAAK,qBAClCogS,EAAWlgS,aAAa,QAAS,sBACjCxD,KAAKgB,QAAQW,YAAY+hS,KAMjCwuF,EAAe72X,UAAUu3X,aAAe,WACpC5yX,KAAK+rX,YAAYhgR,OAAO/rG,MACxBA,KAAK+rX,YAAYsE,UAAUrwX,KAAKmoB,WAAYnoB,KAAKk4B,UAAU,EAAMl4B,KAAK6xB,QAAQ4N,QAAuC,WAA7Bz/B,KAAK6xB,QAAQghW,cAOzGX,EAAe72X,UAAUqkV,UAAY,WAC7BnyT,GAAWvtB,KAAKgB,QAAQsC,GAAK,uBAC7BiB,EAAOgpB,GAAWvtB,KAAKgB,QAAQsC,GAAK,uBAGxC,GAAItD,KAAKsxB,UAAW,CAChB,KAAOtxB,KAAKsxB,UAAU/f,WAAW9U,OAFlB,GAGXuD,KAAKsxB,UAAUhsB,YAAYtF,KAAKsxB,UAAU1U,aAEzC5c,KAAKsxB,UAAUwJ,iBAAmB96B,KAAKsxB,UAAU7wB,YAClD8D,EAAOvE,KAAKsxB,aAQxB4gW,EAAe72X,UAAUmjH,aAAe,WAEpC,IAAIxE,EAAaxuG,GAAQ0+E,gBACrBywB,EAAYnvG,GAAQ2+E,eACpBw1P,EAAYn0U,GAAQ4+E,cACpBywB,EAAcrvG,GAAQC,UAAY,eAAiB,aAEvDlG,GAAahB,OAAOvE,KAAKgB,QAASg5G,EAAYh6G,KAAKgzX,kBACnDztX,GAAahB,OAAOvE,KAAKgB,QAAS25G,EAAW36G,KAAK6/U,WAClDt6U,GAAahB,OAAOvE,KAAKgB,QAAS2+U,EAAW3/U,KAAK8/U,UAClDv6U,GAAahB,OAAOvE,KAAKgB,QAAS,QAAShB,KAAKizX,mBAEhD1tX,GAAahB,OAAOvE,KAAKgB,QAAS65G,EAAa76G,KAAKigV,YACpDpkV,OAAOe,oBAAqB4O,GAAQomB,SAAY,gBAAiB/1B,QAAU,wBAAyBA,OAAW,oBAAsB,SAAUmE,KAAKkzX,cAKxJhB,EAAe72X,UAAUkpB,WAAa,WAElC,IAAIs2F,EAAcrvG,GAAQC,UAAY,eAAiB,aAEvDlG,GAAanB,IAAIpE,KAAKgB,QAASwK,GAAQ0+E,gBAAiBlqF,KAAKgzX,iBAAkBhzX,MAC/EuF,GAAanB,IAAIpE,KAAKgB,QAASwK,GAAQ2+E,eAAgBnqF,KAAK6/U,UAAW7/U,MACvEuF,GAAanB,IAAIpE,KAAKgB,QAASwK,GAAQ4+E,cAAepqF,KAAK8/U,SAAU9/U,MACrEuF,GAAanB,IAAIpE,KAAKgB,QAAS,QAAShB,KAAKizX,kBAAmBjzX,MAEhEuF,GAAanB,IAAIpE,KAAKgB,QAAS65G,EAAa76G,KAAKigV,WAAYjgV,MAC7DnE,OAAOa,iBAAkB8O,GAAQomB,SAAY,gBAAiB/1B,QAAU,wBAAyBA,OAAW,oBAAsB,SAAUmE,KAAKkzX,YAAY53X,KAAK0E,OAClK,IAAIgB,EAAUhB,KAAKgB,QACnBA,EAAQ0D,MAAMo1G,YAAc,OAC5B94G,EAAQ0D,MAAMg8U,cAAgB,OAC9B1/U,EAAQ0D,MAAMi8U,iBAAmB,OACjC3/U,EAAQ0D,MAAMk8U,aAAe,OAC7B5/U,EAAQ0D,MAAMm8U,iBAAmB,OACjC7/U,EAAQ0D,MAAMwP,SAAW,WACzBlT,EAAQ0D,MAAM4xC,QAAU,SAO5B47U,EAAe72X,UAAU63X,YAAc,SAAUryX,GAC7C,IAAId,EAAQC,KACZA,KAAK0zU,eAAgB,EACjB1zU,KAAK65U,UACL35U,aAAaF,KAAK65U,UAEtB,IAAI9nP,GACAi7R,eAAgBhtX,KAChBy3B,KAAM,UACNupT,YAAa,IAAI5zT,GAAK,EAAG,GACzB6zT,aAAc,IAAI7zT,GAAKptB,KAAK21B,cAAc3f,MAAOhW,KAAK21B,cAAc5f,SAaxE,OAXA/V,KAAK65U,SAAW15U,WAAW,WACnBJ,EAAMinF,YACN9mF,aAAaH,EAAM85U,WAGvB95U,EAAMuyX,iBACNvgS,EAAIivP,YAAcjhV,EAAM41B,cACxB51B,EAAMymB,QAAQ,UAAWurE,GACzBhyF,EAAMwtR,kBACNxtR,EAAM60U,YAAYi3C,YAAY9rX,KAC/B,MACI,GAOXmyX,EAAe72X,UAAUwkV,UAAY,SAAUh/U,GAG3C,OAFAb,KAAK+sU,OAAS/sU,KAAKmzX,UAAUtyX,GAC7Bb,KAAK+N,OAAOvC,GAAQ2+E,eAAgBtpF,IAC7B,GAOXqxX,EAAe72X,UAAU4kV,WAAa,SAAUp/U,GAC5C,IAAIg6G,EAAcrvG,GAAQC,UAAY,eAAiB,aAGvD,OAFAzL,KAAK+sU,OAAS/sU,KAAKmzX,UAAUtyX,GAC7Bb,KAAK+N,OAAO8sG,EAAah6G,IAClB,GAOXqxX,EAAe72X,UAAU43X,kBAAoB,SAAUpyX,GAEnD,OADAb,KAAK+N,OAAO,QAASlN,IACd,GAKXqxX,EAAe72X,UAAU0F,MAAQ,SAAUuC,GACvC,IAAIs2U,GAAY55U,MAAMe,MAAMuC,IAOhC4uX,EAAe72X,UAAU6+U,OAAS,SAAUxzU,EAAMqqN,EAAU33L,EAAa+gT,EAAUnkU,EAAOD,GACtFokU,EAAWA,IAAuBn6U,MAClC,IAAI45U,GAAY55U,MAAMk6U,OAAOxzU,EAAMqqN,EAAU33L,EAAa+gT,EAAUnkU,EAAOD,IAK/Em8W,EAAe72X,UAAUk3X,sBAAwB,WAC7C,IAAIl/V,EAAO,IAAI6wS,GAAWlkU,KAAKgB,QAAQsC,GAAK,eAAgBtD,KAAKq2B,WAAW5G,YAAczZ,MAAO,EAAGwgB,MAAO,eAAiB,EAAG,IAAIN,GAAK,EAAG,EAAGl2B,KAAK21B,cAAc3f,MAAOhW,KAAK21B,cAAc5f,SAC3L/V,KAAKsxB,UAAU3vB,YAAY3B,KAAK6tB,SAAS8V,cAActQ,KAO3D6+V,EAAe72X,UAAU23X,iBAAmB,SAAUnyX,GAGlD,OAFAb,KAAK6hV,WAAa7hV,KAAKmzX,UAAUtyX,GACjCb,KAAK+N,OAAOvC,GAAQ0+E,gBAAiBrpF,IAC9B,GAOXqxX,EAAe72X,UAAUykV,SAAW,SAAUj/U,GAG1C,OAFAb,KAAK+sU,OAAS/sU,KAAKmzX,UAAUtyX,GAC7Bb,KAAK+N,OAAOvC,GAAQ4+E,cAAevpF,IAC5B,GAaXqxX,EAAe72X,UAAU83X,UAAY,SAAUtyX,GAC3C,IAAIiL,EAAQjL,EAAE6F,KAAKnI,QAAQ,UAAY,EACnCsC,EAAE89D,eAAe,GAAGvqB,QAAUvzC,EAAEuzC,QAChC/gB,EAAOrzB,KAAKgB,QAAQ4K,wBACpB27D,EAAUh6C,GAAWvtB,KAAKgB,QAAQsC,GAAK,QAAQsI,wBACnD,OAAQE,EAAQunB,EAAK7mB,KAAQH,KAAKC,IAAIi7D,EAAQ/6D,KAAO6mB,EAAK7mB,KAAM,IAOpE0lX,EAAe72X,UAAUmxG,eAAiB,WAEtC,OAAOxsG,KAAKgtG,cADK,YAQrBklR,EAAe72X,UAAUmsF,kBAAoB,SAAUiF,EAASC,GAC5D,IAAI7+D,GAAW,EACXg3T,GAAgB,EAChBuuC,GAAe,EACnBpzX,KAAK0zU,eAAgB,EACrB,IAAK,IAAIt1U,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKmvF,GAAUruF,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAE9D,OADWyE,EAAGzE,IAEV,IAAK,QACL,IAAK,SACL,IAAK,kBACL,IAAK,iBACL,IAAK,gBACL,IAAK,eACL,IAAK,aACDymV,GAAgB,EAChB,MACJ,IAAK,SACL,IAAK,YACL,IAAK,aACL,IAAK,QACL,IAAK,QACL,IAAK,QACL,IAAK,UACL,IAAK,UACL,IAAK,WACL,IAAK,eACL,IAAK,UACL,IAAK,YACL,IAAK,iBACL,IAAK,iBACL,IAAK,yBACL,IAAK,cACL,IAAK,WACL,IAAK,eACL,IAAK,0BACDh3T,GAAW,EACX,MACJ,IAAK,QACD7tB,KAAK0zU,eAAgB,EACrB,MACJ,IAAK,SACDvoP,EAAO9vF,UAAU62D,QAAQ5wD,KAAKtB,MAC9B,MACJ,IAAK,QACDozX,GAAe,IAItBvuC,GAAiBh3T,IAClB7tB,KAAK0/U,YACL1/U,KAAK40U,YAAYi3C,YAAY7rX,OAE7B6kV,IACA7kV,KAAK0/U,YACL1/U,KAAKutR,kBACLvtR,KAAK40U,YAAYi3C,YAAY7rX,OAE5B6kV,GAAkBh3T,IAAYulW,IAC/BpzX,KAAKoyX,iBACLpyX,KAAK+rX,YAAYsE,UAAUrwX,KAAKmoB,WAAYnoB,KAAKk4B,UAAU,EAAMl4B,KAAK6xB,QAAQ4N,QAAuC,WAA7Bz/B,KAAK6xB,QAAQghW,eAQ7GX,EAAe72X,UAAUw1F,gBAAkB,WACvC,IAAI9wF,EAAQC,KACR6xF,KAyBJ,OAxBA7xF,KAAK4e,OAAOgZ,IAAI,SAAUhZ,GACtBizE,EAAQrtF,MACJ6sF,OAAQzyE,EAAOlY,KAAO,SACtBzG,MAAOF,OAGXC,KAAK2/B,uBAAuBC,QAAQnjC,OAAS,GAC7Co1F,EAAQrtF,MACJ6sF,OAAQ,iBACRpxF,MAAOD,QAGQ,WAAnBA,KAAKkyB,WACL2/D,EAAQrtF,MACJ6sF,OAAQrxF,KAAKkyB,UACbjyB,MAAOD,QAGXA,KAAK6xB,QAAQ4N,QACboyD,EAAQrtF,MACJ6sF,OAAQ,eACRpxF,MAAOD,QAGR6xF,GAKXqgS,EAAe72X,UAAUkkC,cAAgB,WACrC,MAAO,kBAQX2yV,EAAe72X,UAAUiX,QAAU,WAC/BtS,KAAKw+G,eACLx+G,KAAK+rX,YAAYz5W,UACjB64E,EAAO9vF,UAAUiX,QAAQhR,KAAKtB,MAC9BA,KAAKgB,QAAQ8C,UAAUS,OAAO,qBAElCsmF,IACI3jF,EAAS,OACVgrX,EAAe72X,UAAW,aAAS,GACtCwvF,IACI3jF,EAAS,OACVgrX,EAAe72X,UAAW,cAAU,GACvCwvF,IACI3jF,EAAS,OACVgrX,EAAe72X,UAAW,kBAAc,GAC3CwvF,IACI3jF,EAAS,OACVgrX,EAAe72X,UAAW,aAAS,GACtCwvF,IACI3jF,EAAS,OACVgrX,EAAe72X,UAAW,aAAS,GACtCwvF,IACI3jF,EAAS,OACVgrX,EAAe72X,UAAW,aAAS,GACtCwvF,IACIxiF,KAAe0mX,KAChBmD,EAAe72X,UAAW,cAAU,GACvCwvF,IACI9iF,KAAYqnX,KACb8C,EAAe72X,UAAW,eAAW,GACxCwvF,IACI3jF,EAAS,OACVgrX,EAAe72X,UAAW,eAAW,GACxCwvF,IACI3jF,EAAS,OACVgrX,EAAe72X,UAAW,eAAW,GACxCwvF,IACI3jF,EAAS,OACVgrX,EAAe72X,UAAW,gBAAY,GACzCwvF,IACI3jF,EAAS,SACVgrX,EAAe72X,UAAW,oBAAgB,GAC7CwvF,IACI3jF,EAAS,SACVgrX,EAAe72X,UAAW,4BAAwB,GACrDwvF,IACI3jF,EAAS,KACVgrX,EAAe72X,UAAW,eAAW,GACxCwvF,IACI3jF,EAAS,WACVgrX,EAAe72X,UAAW,iBAAa,GAC1CwvF,IACI3jF,EAAS,YACVgrX,EAAe72X,UAAW,qBAAiB,GAC9CwvF,IACI3jF,EAAS,MACVgrX,EAAe72X,UAAW,yBAAqB,GAClDwvF,IACI3jF,GAAS,IACVgrX,EAAe72X,UAAW,sBAAkB,GAC/CwvF,IACI3jF,GAAS,IACVgrX,EAAe72X,UAAW,4BAAwB,GACrDwvF,IACI3jF,GAAS,IACVgrX,EAAe72X,UAAW,4BAAwB,GACrDwvF,IACI3jF,GAAS,IACVgrX,EAAe72X,UAAW,qBAAiB,GAC9CwvF,IACI3jF,GAAS,IACVgrX,EAAe72X,UAAW,4BAAwB,GACrDwvF,IACI3jF,KACDgrX,EAAe72X,UAAW,eAAW,GACxCwvF,IACI3jF,EAAS,YACVgrX,EAAe72X,UAAW,oBAAgB,GAC7CwvF,IACI9iF,EAAQ20T,GAAoBP,cAAeQ,KAC5Cu1D,EAAe72X,UAAW,kBAAc,GAC3CwvF,IACI9iF,KAAYi5T,KACbkxD,EAAe72X,UAAW,sBAAkB,GAC/CwvF,IACI9iF,KAAYo5T,KACb+wD,EAAe72X,UAAW,sBAAkB,GAC/CwvF,IACI9iF,KAAYknX,KACbiD,EAAe72X,UAAW,8BAA0B,GACvDwvF,IACI9iF,KAAYonX,KACb+C,EAAe72X,UAAW,8BAA0B,GACvDwvF,IACI9iF,GAAUyuB,MAAO,UAAWxgB,MAAO,GAAK4mT,KACzCs1D,EAAe72X,UAAW,uBAAmB,GAChDwvF,IACI3jF,EAAS,aACVgrX,EAAe72X,UAAW,aAAS,GACtCwvF,IACI3jF,OACDgrX,EAAe72X,UAAW,aAAS,GACtCwvF,IACI3jF,EAAS,KACVgrX,EAAe72X,UAAW,mBAAe,GAC5CwvF,IACI3jF,EAAS,KACVgrX,EAAe72X,UAAW,gBAAY,GACzCwvF,IACI3jF,EAAS,aACVgrX,EAAe72X,UAAW,oBAAgB,GAC7CwvF,IACI3jF,EAAS,WACVgrX,EAAe72X,UAAW,+BAA2B,GACxDwvF,IACI9iF,GAAU2E,IAAK,EAAGC,OAAQ,EAAGF,MAAO,EAAGD,KAAM,GAAKswT,KACnDo1D,EAAe72X,UAAW,cAAU,GACvCwvF,IACI/hF,KACDopX,EAAe72X,UAAW,YAAQ,GACrCwvF,IACI/hF,KACDopX,EAAe72X,UAAW,cAAU,GACvCwvF,IACI/hF,KACDopX,EAAe72X,UAAW,eAAW,GACxCwvF,IACI/hF,KACDopX,EAAe72X,UAAW,mBAAe,GAC5CwvF,IACI/hF,KACDopX,EAAe72X,UAAW,eAAW,GACxCwvF,IACI/hF,KACDopX,EAAe72X,UAAW,qBAAiB,GAC9CwvF,IACI/hF,KACDopX,EAAe72X,UAAW,sBAAkB,GAC/CwvF,IACI/hF,KACDopX,EAAe72X,UAAW,mBAAe,GAC5C62X,EAAiBrnS,IACbzhF,GACD8oX,IAEL3mR,IC3nBE8nR,GAAgC,WAEhC,SAASA,EAAerG,GACpBhtX,KAAK2S,QAAUq6W,EAoMnB,OA9LAqG,EAAeh4X,UAAUy3X,sBAAwB,SAAUngX,GAE9B3S,KAAKwyX,mBAA9B,IACIxwV,EAAYrvB,EAAQ0jB,WAAW6L,WACnCliC,KAAKszX,kBAAoBnyX,EAAc,OACnCmC,GAAIqP,EAAQ3R,QAAQsC,GAAK,qBACzBC,OAAQ,WAAavD,KAAKwyX,mBAAmBx8W,MAAQgsB,GAAa,cAC9DhiC,KAAKwyX,mBAAmBz8W,OAAS,UACjC/V,KAAKwyX,mBAAmBxlX,EAAI,YAC3BhN,KAAKwyX,mBAAmBzlX,EAAIi1B,EAAY,GAAK,2BAEtDhiC,KAAK2S,QAAQ3R,QAAQW,YAAY3B,KAAKszX,oBAK1CD,EAAeh4X,UAAU03X,eAAiB,WACtC,IAAIhzX,EAAQC,KACRuzX,EAAkBpyX,EAAc,OAASmC,GAAItD,KAAK2S,QAAQ3R,QAAQsC,GAAK,cAC3EtD,KAAKszX,kBAAkB3xX,YAAY4xX,GAInC,IAAK,IAFD7tX,KACAygH,EAAUnmH,KAAK2S,QAAQgtB,uBAAuBC,QACzCzjC,EAAI,EAAGA,EAAIgqH,EAAQ1pH,OAAQN,IAChCuJ,EAASlB,MAAO2vD,MAAO,OAAQ1nC,KAAM05F,EAAQhqH,GAAGswB,OAEpDzsB,KAAKwzX,WAAaxzX,KAAK2S,QAAQ3R,QAAQsC,GAAK,YAC5CoC,EAASlB,MAAOyK,SAAU,8BAAgCjP,KAAKwzX,WAAa,kBAAmBr/T,MAAO,UACtG,IAAIs/T,GACA/tX,SAAUA,EACV+xB,KAAM,gBACNoB,QAAQ,EACR66V,oBAAoB,EACpBt5V,QAAS,IAEbp6B,KAAK2S,QAAQ6T,QAAQ,iBAAkBitW,GACvCzzX,KAAK2zX,QAAU,IAAIzpF,IACfzvO,MAAOg5T,EAAY/tX,SAAUqQ,OAAQ/V,KAAKwyX,mBAAmBz8W,OAC7DyqS,QAAS,SAAUvgT,GACfF,EAAMymI,YAAYvmI,EAAMF,EAAM4S,UAC/BmqP,QAAS,WACR/8P,EAAM+xD,MAAQ/xD,EAAM4zX,QAAQ3yX,QAAQQ,iBAAiB,mBAAmB,GACpE/D,EAAkBsC,EAAM26D,gBACxByrD,EAAQvuF,IAAI,SAAU++T,EAAQ1kV,GACtB0kV,EAAOnnN,WACPzvI,EAAM4S,QAAQwV,WAAapoB,EAAM6zX,aAAaj9B,EAAO9wR,aAAc9lE,EAAM4S,QAAQulB,SAAUy+T,EAAOx0V,UAAU8d,UAC5GlgB,EAAM26D,cAAiB36D,EAAM+xD,MAAMvgD,WAAW9U,OAAS0pH,EAAQ1pH,OAAUwV,KAIrFlS,EAAM8zX,iBAAiB9zX,EAAM26D,kBAGrC16D,KAAK2zX,QAAQt9U,SAASk9U,GACtBvzX,KAAK4zM,eAAgB,EAErB5zM,KAAK+xX,WAAa,IAAIx5K,IAClBx4L,IAAK,IAAIC,KAAKhgB,KAAK2S,QAAQiiU,YAAY98S,MACvCxrB,IAAK,IAAI0T,KAAKhgB,KAAK2S,QAAQiiU,YAAY13E,MACvClhO,OAAQ,iBACRlV,YAAa,iBACb1B,iBAAiB,EACjB8yD,UAAW,IAAIl4D,KAAKhgB,KAAK2S,QAAQwV,YACjCgwD,QAAS,IAAIn4D,KAAKhgB,KAAK2S,QAAQulB,UAC/B4kO,QAAS,SAAU78P,GACf,GAAIwzX,EAAYC,mBAAoB,CAChC,IAAII,EAAoBtzX,SAASkN,uBAAuB,wBAAwB,GAChFomX,EAAkBpvX,MAAM4xC,QAAU,OAClCw9U,EAAkB3+P,sBAAsB,WAAYh0H,EAAc,OAASmC,GAAI,cAC3EtB,UAAWyxX,EAAYr5V,QAAS/2B,UAAW,mBAC/CkqB,GAAW,eAAe4nG,sBAAsB,aAAeh0H,EAAc,QAAUmC,GAAI,WACvFD,UAAW,0CAA2CE,OAAQ,wBAClE/C,SAASosB,eAAe,eAAemnW,QAAU,WAC7Ch0X,EAAMgyX,WAAW9tQ,KAAK12F,GAAW,mBAI7CnN,OAAQ,SAAUngB,GACVF,EAAM6zM,eACN7zM,EAAM4S,QAAQo5W,YAAY/4C,iBAAiB/yU,EAAKi4E,UAAUj4D,UAAWhgB,EAAKk4E,QAAQl4D,UAAWlgB,EAAM4S,YAI/G3S,KAAK+xX,WAAW17U,SAAS,IAAMr2C,KAAKwzX,aAMxCH,EAAeh4X,UAAUw4X,iBAAmB,SAAUn5T,GAClD,GAAI16D,KAAK2S,QAAQotB,qBAAsB,CACnC,IAAK,IAAI5jC,EAAI,EAAGs+B,EAAWz6B,KAAK8xD,MAAMvgD,WAAW9U,OAAQN,EAAIs+B,EAAUt+B,IACnE6D,KAAK8xD,MAAMvgD,WAAWpV,GAAGoV,WAAW,GAAGzN,UAAUS,OAAO,YACxDvE,KAAK8xD,MAAMvgD,WAAWpV,GAAGoV,WAAW,GAAGzN,UAAUS,OAAO,YAE5DvE,KAAK8xD,MAAMvgD,WAAWmpD,GAAenpD,WAAW,GAAGzN,UAAUM,IAAI,UACjEpE,KAAK8xD,MAAMvgD,WAAWmpD,GAAenpD,WAAW,GAAGzN,UAAUM,IAAI,cAMzEivX,EAAeh4X,UAAUmrI,YAAc,SAAUvmI,EAAM0S,GACnD,IAIIqhX,EACAC,EALAl0X,EAAQC,KAERk0X,GADel0X,KAAK2zX,QAAQl5T,MACfx6D,EAAK4d,MAClB+qI,EAASj2I,EAAQo5W,YAGjB5lQ,EAAUxzG,EAAQgtB,uBAAuBC,QACzCuxF,EAAShL,EAAQn/E,OAAO,SAAUkhF,GAAO,OAAQA,EAAIz7F,OAASynW,EAAWznW,OAsB7E,GArBA05F,EAAQvuF,IAAI,SAAU++T,EAAQ1kV,GACtB0kV,EAAOlqU,OAASxsB,EAAK4d,KAAK4O,OAC1B1sB,EAAM26D,cAAiB36D,EAAM+xD,MAAMvgD,WAAW9U,OAAS0pH,EAAQ1pH,OAAUwV,KAGjFjS,KAAK6zX,iBAAiB7zX,KAAK06D,eACW,QAAlCw5T,EAAWznW,KAAK7W,eAChBo+W,EAAerhX,EAAQiiU,YAAY98S,KACnCm8V,EAAathX,EAAQiiU,YAAY13E,KACjCt0G,EAAOoqL,iBAAiBghD,EAAcC,EAAYthX,IAEX,QAAlCuhX,EAAWznW,KAAK7W,eACrBo+W,EAAe,IAAIh0W,KAAK,IAAIA,KAAK4oI,EAAOkoO,YAAY/qT,cAAc74D,YAAY+S,UAC9Eg0W,EAAarrO,EAAOkoO,WACpBloO,EAAOoqL,iBAAiBghD,EAAcC,EAAYthX,IAEX,KAAlCuhX,EAAWznW,KAAK7W,gBACrBo+W,EAAeh0X,KAAK4zX,aAAaziQ,EAAO,GAAGtrD,aAAc+iF,EAAOkoO,WAAY3/P,EAAO,GAAGhvH,UAAU8d,UAChGg0W,EAAarrO,EAAOkoO,WACpBloO,EAAOoqL,iBAAiBghD,EAAcC,EAAYthX,IAElD4a,GAAWvtB,KAAKwzX,WAAa,YAAchoX,GAAQkb,SAAU,CAC/C6G,GAAWvtB,KAAKwzX,WAAa,UACnChyX,iBAAiB,mBAAmB,GAAGkD,MAAM4xC,QAAU,SASvE+8U,EAAeh4X,UAAUu4X,aAAe,SAAUltX,EAAMmY,EAAK1c,GACzD,IAAIpD,EAAS,IAAIihB,KAAKnB,GACtB,OAAQnY,GACJ,IAAK,UACD3H,EAAOinE,SAASjnE,EAAOknE,WAAc,EAAI9jE,GACzC,MACJ,IAAK,SACDpD,EAAOinE,SAASjnE,EAAOknE,WAAa9jE,GACpC,MACJ,IAAK,QACDpD,EAAOmnE,QAAQnnE,EAAOonE,UAAwB,EAAXhkE,GACnC,MACJ,IAAK,OACDpD,EAAOmnE,QAAQnnE,EAAOonE,UAAYhkE,GAClC,MACJ,IAAK,QACDpD,EAAO0lE,SAAS1lE,EAAOqnE,WAAajkE,GACpC,MACJ,IAAK,UACDpD,EAAOsnE,WAAWtnE,EAAOunE,aAAenkE,GACxC,MACJ,IAAK,UACDpD,EAAO+4E,WAAW/4E,EAAOg5E,aAAe51E,GACxC,MACJ,QACIpD,EAAO+mE,YAAY/mE,EAAOgnE,cAAgB5jE,GAGlD,OAAOpD,GAMXs0X,EAAeh4X,UAAUkkC,cAAgB,WACrC,MAAO,kBAOX8zV,EAAeh4X,UAAUiX,QAAU,aAK5B+gX,KCrMPc,GAA8B,WAK9B,SAASA,EAAapiW,GAClB/xB,KAAK2S,QAAUof,EACf/xB,KAAKu0C,UAAYxiB,EAAM/wB,QAAQsC,GAuKnC,OAjKA6wX,EAAa94X,UAAU21X,kBAAoB,SAAUjF,GACjD/rX,KAAKo0X,iBACL,IAAIh6V,EAAUp6B,KAAKq0X,kBAAkBtI,EAAY8E,cAC7CyD,EAAet0X,KAAKu0X,eAAen6V,GACnC/G,EAAOrzB,KAAK2S,QAAQO,UAAY64W,EAAY6E,UAAY7E,EAAY4E,SACpE2D,EAAejhW,EAAKrd,QACpBqd,EAAO04V,EAAYx8B,SAEvBvvV,KAAKw0X,YAAcx0X,KAAKgiI,cAAc3uG,EAAMrzB,KAAKmB,cAAc,gBAAiB4qX,EAAYltV,OAAQzE,IAMxG+5V,EAAa94X,UAAUk5X,eAAiB,SAAUv3X,GAC9C,IACI0vB,EAAO1sB,KAAK2S,QAAQkf,QAAQuyQ,UAWhC,OAVIpkS,KAAK2S,QAAQkf,QAAQ5iB,SACbirB,GAAe/4B,EAAc,OACjCmC,GAAI,iBACJC,OAAQ,wBACR,EAAGvD,KAAK2S,QAAQkf,QAAQ5iB,SAAUjP,KAAK2S,SAAS/G,wBAAwBoK,MAIpEwW,GAAYxvB,EAAM,GAAI0vB,GAAM1W,MAAQ,IAQpDm+W,EAAa94X,UAAU41X,mBAAqB,SAAUlF,GAClD/rX,KAAKo0X,iBACL,IAAIh6V,EAAUp6B,KAAKq0X,kBAAkBtI,EAAY+E,YAC7CwD,EAAet0X,KAAKu0X,eAAen6V,GACnC/G,EAAOrzB,KAAK2S,QAAQO,UAAY64W,EAAY4E,SAAW5E,EAAY6E,UACnE0D,EAAejhW,EAAKrd,SACpBqd,EAAO04V,EAAYx8B,SACdxiV,EAAK/M,KAAK2S,QAAQiM,OAAOniB,OAAkB,EAAT42B,EAAKtmB,GAEhD/M,KAAKy0X,aAAez0X,KAAKgiI,cAAc3uG,EAAMrzB,KAAKmB,cAAc,iBAAkB4qX,EAAY/gD,KAAM5wS,IAMxG+5V,EAAa94X,UAAU8F,cAAgB,SAAUmC,GAC7C,GAAIiqB,GAAWvtB,KAAKu0C,UAAYjxC,GAC5B,OAAOiqB,GAAWvtB,KAAKu0C,UAAYjxC,GAGnC,IAAItC,EAAUR,SAASW,cAAc,OAKrC,OAJAH,EAAQsC,GAAKtD,KAAKu0C,UAAYjxC,EAC9BtC,EAAQqC,UAAY,eACpBrC,EAAQwC,aAAa,QAAS,qDAC9B+pB,GAAWvtB,KAAKu0C,UAAY,sBAAsB5yC,YAAYX,GACvDA,GAUfmzX,EAAa94X,UAAU2mI,cAAgB,SAAUtrG,EAAQp2B,EAAQiiU,EAAQnoS,GACrE,IAAIznB,EAAU3S,KAAK2S,QACfkf,EAAUlf,EAAQkf,QAClB+G,GACAC,QAAQ,EAAOpB,KAAM,gBAAiBhL,KAAM2N,EAC5CgqQ,UAAWvyQ,EAAQuyQ,WAEvBpkS,KAAK2S,QAAQ6T,QAAQ,gBAAiBoS,GACtC,IAAIpsB,EAAOmG,EAAQ2e,UAAU1lB,wBAAwBY,KACjDmG,EAAQ3R,QAAQ4K,wBAAwBY,KAC5C,OAAKosB,EAASC,OAsBH,KArBA,IAAI4qU,IACP/1U,UAAY3gB,EAAGw1T,EAAQv1T,EAAG2F,EAAQo5W,YAAYqE,SAC9Ch2V,QAASxB,EAASnM,KAAMg3Q,QAAS,EACjCiB,cAAc,EACdX,QAAS,EAAGtlQ,aAAc,EAAGtQ,GAAI,EAAGC,GAAI,EACxC81Q,SAAUvxR,EAAQiM,OAAOniB,OAAS,EAClCmmS,WAAYlsQ,EAAQkH,KAAM/L,EAAQ+L,KAClC1iB,MAAOlb,KAAK2S,QAAQuI,MAEpB8zP,YAAcjiQ,EAAGP,GACjB83B,OAAQzS,EAAQyS,OAAQ72B,QAASokB,EAAQpkB,QACzCwB,SAAU4iB,EAAQ5iB,SAClBm1R,UAAWxrQ,EAASwrQ,UACpB5nS,MACIe,MAASyC,KAAKq0X,kBAAkBr0X,KAAK2S,QAAQwV,YAAY,GACzDtJ,IAAO7e,KAAKq0X,kBAAkBr0X,KAAK2S,QAAQulB,UAAU,GACrDl7B,MAASo9B,EAAQ,KAEtB95B,IAUX6zX,EAAa94X,UAAUg5X,kBAAoB,SAAUr3X,GACjD,IAGIyvB,EAHA9Z,EAAU3S,KAAK2S,QACfkf,EAAUlf,EAAQkf,QAClB/Z,EAAQnF,EAAQiiU,YAAY98T,MAE5BkkB,EAASnK,EAAQmK,QAAUlkB,EAAMwjB,YACjC2jS,EAAuC,OAA5BjjS,EAAOrsB,MAAM,WACxBuiB,EAAYpa,EAAMoa,UAetB,MAdkB,aAAdA,EACAzF,EAAQ9Z,EAAQs8D,KAAK07B,eACjB3uE,OAAQA,GAAU,aAClBt1B,KAAMqwB,GAAiBpkB,EAAQqzU,cAC/BtkR,SAAU/uD,EAAQ+hX,eAAervC,YAAYvtU,IAH1C,CAIH,IAAIkI,KAAKhjB,KAGb8a,EAAMkkB,OAASrpB,EAAQs8D,KAAKC,iBACxBlzC,OAAQijS,EAAW,GAAKjjS,EACxBmzC,YAAax8D,EAAQy8D,uBAEzB3iD,EAAO9Z,EAAQ25W,aAAa1qS,YAAY9pE,EAAOmnT,EAAUjjS,EAAsB,gBAAd9J,EAA8B7lB,KAAK87D,IAAIrwD,EAAMyZ,QAASv0B,GAASA,KAE5HyvB,IAKZ0nW,EAAa94X,UAAU+4X,eAAiB,WACpC,IAAIr0X,EAAQC,KAEgB,aADdA,KAAK2S,QAAQkf,QACfghW,cACR52V,GAAUj8B,KAAKgkW,iBACXhkW,KAAKy0X,eACLz0X,KAAKgkW,gBAAkB7jW,WAAW,WAC9BJ,EAAMy0X,YAAYtuF,UAClBnmS,EAAM00X,aAAavuF,WACpB,QAOfiuF,EAAa94X,UAAUkkC,cAAgB,WACnC,MAAO,gBAOX40V,EAAa94X,UAAUiX,QAAU,SAAUue,KAGpCsjW,KCvLP7pS,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAG5D+3V,GAAgC,SAAUxpS,GAE1C,SAASwpS,IACL,OAAkB,OAAXxpS,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAiB/D,OAnBAsqF,GAAUqqS,EAAgBxpS,GAI1BN,IACI3jF,EAAS,aACVytX,EAAet5X,UAAW,kBAAc,GAC3CwvF,IACI3jF,EAAS,WACVytX,EAAet5X,UAAW,iBAAa,GAC1CwvF,IACI3jF,EAAS,YACVytX,EAAet5X,UAAW,kBAAc,GAC3CwvF,IACI3jF,EAAS,SACVytX,EAAet5X,UAAW,YAAQ,GACrCwvF,IACI3jF,EAAS,IACVytX,EAAet5X,UAAW,eAAW,GACjCs5X,GACT31T,IAEE41T,GAAkC,SAAUzpS,GAE5C,SAASypS,IACL,OAAkB,OAAXzpS,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAc/D,OAhBAsqF,GAAUsqS,EAAkBzpS,GAI5BN,IACI3jF,EAAS,KACV0tX,EAAiBv5X,UAAW,WAAO,GACtCwvF,IACI3jF,EAAS,KACV0tX,EAAiBv5X,UAAW,cAAU,GACzCwvF,IACI3jF,EAAS,KACV0tX,EAAiBv5X,UAAW,aAAS,GACxCwvF,IACI3jF,EAAS,KACV0tX,EAAiBv5X,UAAW,YAAQ,GAChCu5X,GACT51T,IAEE61T,GAAkC,SAAU1pS,GAE5C,SAAS0pS,IACL,OAAkB,OAAX1pS,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbAsqF,GAAUuqS,EAAkB1pS,GAI5BN,IACI3jF,EAAS,IACV2tX,EAAiBx5X,UAAW,aAAS,GACxCwvF,IACI3jF,EAAS,IACV2tX,EAAiBx5X,UAAW,eAAW,GAC1CwvF,IACI3jF,EAAS,gBACV2tX,EAAiBx5X,UAAW,aAAS,GACjCw5X,GACT71T,IAME81T,GAAgC,WAOhC,OANA,SAAwB/nX,EAAGC,EAAGgJ,EAAOD,GACjC/V,KAAK+M,EAAIA,EACT/M,KAAKgN,EAAIA,EACThN,KAAKgW,MAAQA,EACbhW,KAAK+V,OAASA,MAKlBg/W,GAAiC,WAGjC,OAFA,gBAKAC,GAA8B,WAG9B,OAFA,gBAKAC,GAA6B,WAG7B,OAFA,gBAKAC,GAA2C,SAAU/pS,GAErD,SAAS+pS,IACL,OAAkB,OAAX/pS,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAE/D,OAJAsqF,GAAU4qS,EAA2B/pS,GAI9B+pS,GACTH,IAEEI,GAAwC,SAAUhqS,GAElD,SAASgqS,IACL,OAAkB,OAAXhqS,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAE/D,OAJAsqF,GAAU6qS,EAAwBhqS,GAI3BgqS,GACTD,IAEEE,GAA6B,WAG7B,OAFA,gBAKAC,GAA6B,WAG7B,OAFA,gBAQAn7U,GAAuB,WAGvB,OAFA,gBAKAo7U,GAA8B,WAG9B,OAFA,gBAKAC,GAA+B,WAQ/B,OAPA,SAAuBjyX,EAAIs6B,EAAMu3S,EAAa1mP,EAAahhF,GACvDzN,KAAKsD,GAAKA,EACVtD,KAAK49B,KAAOA,EACZ59B,KAAKm1U,YAAcA,EACnBn1U,KAAKyuF,YAAcA,EACnBzuF,KAAKyN,QAAUA,MAKnB+nX,GAAyC,WAGzC,OAFA,gBAKAC,GAA2B,WAK3B,OAJA,WACIz1X,KAAK01X,iBAAmB,EACxB11X,KAAK21X,UAAY,MAKrBC,GAAsC,WAGtC,OAFA,gBAKAC,GAA6B,WAG7B,OAFA,gBAMA7yV,GAAgC,WAKhC,OAJA,SAAwBhtB,EAAOD,GAC3B/V,KAAKgW,MAAQA,EACbhW,KAAK+V,OAASA,MAKlB+/W,GAA+B,WAG/B,OAFA,gBvTvMAxrS,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAgIxCv0D,GAA4B,WAU5B,OATA,SAAoB9yB,EAAIs6B,EAAM5nB,EAAOwgB,EAAO/oB,EAASqkC,EAAWvjB,GAC5DvuB,KAAKsD,GAAKA,EACVtD,KAAKyN,QAAUA,EACfzN,KAAK49B,KAAOA,EACZ59B,KAAK89B,OAAStH,EACdx2B,KAAK,gBAAkBgW,EACvBhW,KAAK,oBAAsB8xC,EAC3B9xC,KAAKuuB,EAAIA,MASb21S,GAA4B,SAAU/4O,GAEtC,SAAS+4O,EAAW5gU,EAAIs6B,EAAM0G,EAAQ72B,EAAS4lB,GAC3C,IAAItzB,EAAQorF,EAAO7pF,KAAKtB,KAAMsD,EAAIs6B,EAAM0G,EAAOtuB,MAAOsuB,EAAO9N,MAAO/oB,IAAYzN,KAKhF,OAJAD,EAAMiN,EAAIqmB,EAAKrmB,EACfjN,EAAMgN,EAAIsmB,EAAKtmB,EACfhN,EAAMgW,OAASsd,EAAKtd,OACpBhW,EAAMiW,MAAQqd,EAAKrd,MACZjW,EAEX,OATAuqF,GAAU45O,EAAY/4O,GASf+4O,GACT9tS,IAME+tS,GAA8B,SAAUh5O,GAExC,SAASg5O,EAAa7gU,EAAIs6B,EAAM0G,EAAQ72B,EAAS4gB,EAAIC,EAAIsO,EAAGkV,GACxD,IAAI/xC,EAAQorF,EAAO7pF,KAAKtB,KAAMsD,EAAIs6B,EAAM0G,EAAOtuB,MAAOsuB,EAAO9N,MAAO/oB,IAAYzN,KAKhF,OAJAD,EAAMuuB,GAAKA,EACXvuB,EAAMsuB,GAAKA,EACXtuB,EAAM68B,EAAIA,EACV78B,EAAM,oBAAsB+xC,EACrB/xC,EAEX,OATAuqF,GAAU65O,EAAch5O,GASjBg5O,GACT/tS,IA0BEG,GAA4B,WAQ5B,OAPA,SAAoBjzB,EAAIyJ,EAAGC,EAAG6G,EAAQ4Y,GAClCzsB,KAAKsD,GAAKA,EACVtD,KAAK+M,EAAIA,EACT/M,KAAKgN,EAAIA,EACThN,KAAK6T,OAASA,EACd7T,KAAKysB,KAAOA,OkT5MpB,SAAW0oQ,GAEPA,EAAMgnC,eACFrvS,KAAM,OACNC,WAAY,SACZyJ,MAAO,KACPxJ,UAAW,SACXC,WAAY,sCAGhBkoQ,EAAM4gG,qBACFjpW,KAAM,OACNC,WAAY,SACZyJ,MAAO,KACPxJ,UAAW,SACXC,WAAY,sCAGhBkoQ,EAAM6gG,wBACFlpW,KAAM,OACNC,WAAY,SACZyJ,MAAO,KACPxJ,UAAW,SACXC,WAAY,sCAGhBkoQ,EAAM8gG,eACFnpW,KAAM,OACNC,WAAY,SACZyJ,MAAO,KACPxJ,UAAW,SACXC,WAAY,sCAGhBkoQ,EAAMqnC,iBACF1vS,KAAM,OACNC,WAAY,SACZyJ,MAAO,KACPxJ,UAAW,SACXC,WAAY,sCAvCpB,CAyCGkoQ,KAAUA,QM1Cb,IAAI7qM,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAK5Ds5V,GAA6B,SAAU/qS,GAEvC,SAAS+qS,IACL,OAAkB,OAAX/qS,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAiB/D,OAnBAsqF,GAAU4rS,EAAa/qS,GAIvBN,IACI3jF,GAAS,IACVgvX,EAAY76X,UAAW,eAAW,GACrCwvF,IACI3jF,EAAS,KACVgvX,EAAY76X,UAAW,YAAQ,GAClCwvF,IACI3jF,EAAS,KACVgvX,EAAY76X,UAAW,mBAAe,GACzCwvF,IACI3jF,EAAS,WACVgvX,EAAY76X,UAAW,qBAAiB,GAC3CwvF,IACI9iF,EAAQotR,GAAMqnC,gBAAiBm4D,KAChCuB,EAAY76X,UAAW,iBAAa,GAChC66X,GACTl3T,IAEEm3T,GAAgC,SAAUhrS,GAE1C,SAASgrS,IACL,OAAkB,OAAXhrS,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVAsqF,GAAU6rS,EAAgBhrS,GAI1BN,IACI3jF,EAAS,IACVivX,EAAe96X,UAAW,SAAK,GAClCwvF,IACI3jF,EAAS,IACVivX,EAAe96X,UAAW,SAAK,GAC3B86X,GACTn3T,IAEEo3T,GAAuC,SAAUjrS,GAEjD,SAASirS,IACL,OAAkB,OAAXjrS,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVAsqF,GAAU8rS,EAAuBjrS,GAIjCN,IACI3jF,EAAS,IACVkvX,EAAsB/6X,UAAW,aAAS,GAC7CwvF,IACI3jF,EAAS,OACVkvX,EAAsB/6X,UAAW,aAAS,GACtC+6X,GACTp3T,IAEEq3T,GAAiC,SAAUlrS,GAE3C,SAASkrS,IACL,OAAkB,OAAXlrS,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbAsqF,GAAU+rS,EAAiBlrS,GAI3BN,IACI3jF,EAAS,KACVmvX,EAAgBh7X,UAAW,aAAS,GACvCwvF,IACI3jF,EAAS,KACVmvX,EAAgBh7X,UAAW,cAAU,GACxCwvF,IACI9iF,KAAYquX,KACbC,EAAgBh7X,UAAW,cAAU,GACjCg7X,GACTr3T,IAEEs3T,GAA8B,SAAUnrS,GAExC,SAASmrS,IACL,OAAkB,OAAXnrS,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVAsqF,GAAUgsS,EAAcnrS,GAIxBN,IACI3jF,EAAS,IACVovX,EAAaj7X,UAAW,aAAS,GACpCwvF,IACI3jF,EAAS,OACVovX,EAAaj7X,UAAW,aAAS,GAC7Bi7X,GACTt3T,IAEEu3T,GAA0C,SAAUprS,GAEpD,SAASorS,IACL,OAAkB,OAAXprS,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAqD/D,OAvDAsqF,GAAUisS,EAA0BprS,GAIpCN,IACI3jF,GAAS,IACVqvX,EAAyBl7X,UAAW,eAAW,GAClDwvF,IACI3jF,EAAS,WACVqvX,EAAyBl7X,UAAW,gBAAY,GACnDwvF,IACI3jF,EAAS,WACVqvX,EAAyBl7X,UAAW,iBAAa,GACpDwvF,IACI3jF,EAAS,OACVqvX,EAAyBl7X,UAAW,aAAS,GAChDwvF,IACI3jF,EAAS,OACVqvX,EAAyBl7X,UAAW,cAAU,GACjDwvF,IACI3jF,EAAS,WACVqvX,EAAyBl7X,UAAW,aAAS,GAChDwvF,IACI3jF,EAAS,OACVqvX,EAAyBl7X,UAAW,gBAAY,GACnDwvF,IACI3jF,EAAS,OACVqvX,EAAyBl7X,UAAW,mBAAe,GACtDwvF,IACI3jF,EAAS,IACVqvX,EAAyBl7X,UAAW,mBAAe,GACtDwvF,IACI3jF,EAAS,IACVqvX,EAAyBl7X,UAAW,oBAAgB,GACvDwvF,IACI3jF,EAAS,KACVqvX,EAAyBl7X,UAAW,mBAAe,GACtDwvF,IACI3jF,GAAS,IACVqvX,EAAyBl7X,UAAW,wBAAoB,GAC3DwvF,IACI9iF,KAAYmuX,KACbK,EAAyBl7X,UAAW,aAAS,GAChDwvF,IACI9iF,KAAYouX,KACbI,EAAyBl7X,UAAW,gBAAY,GACnDwvF,IACI9iF,KAAYsuX,KACbE,EAAyBl7X,UAAW,iBAAa,GACpDwvF,IACI9iF,KAAYuuX,KACbC,EAAyBl7X,UAAW,cAAU,GACjDwvF,IACI9iF,EAAQotR,GAAMqnC,gBAAiBm4D,KAChC4B,EAAyBl7X,UAAW,iBAAa,GAC7Ck7X,GACTv3T,IC9JEsrB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAQ5D45V,GAA0C,SAAUrrS,GAEpD,SAASqrS,IACL,OAAkB,OAAXrrS,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAc/D,OAhBAsqF,GAAUksS,EAA0BrrS,GAIpCN,IACI3jF,EAAS,IACVsvX,EAAyBn7X,UAAW,aAAS,GAChDwvF,IACI3jF,EAAS,KACVsvX,EAAyBn7X,UAAW,iBAAa,GACpDwvF,IACI3jF,GAAS,IACVsvX,EAAyBn7X,UAAW,eAAW,GAClDwvF,IACI3jF,EAAS,IACVsvX,EAAyBn7X,UAAW,eAAW,GAC3Cm7X,GACTx3T,IAKEy3T,GAA0C,SAAUtrS,GAEpD,SAASsrS,IACL,OAAkB,OAAXtrS,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAc/D,OAhBAsqF,GAAUmsS,EAA0BtrS,GAIpCN,IACI3jF,EAAS,IACVuvX,EAAyBp7X,UAAW,aAAS,GAChDwvF,IACI3jF,EAAS,KACVuvX,EAAyBp7X,UAAW,iBAAa,GACpDwvF,IACI3jF,GAAS,IACVuvX,EAAyBp7X,UAAW,eAAW,GAClDwvF,IACI3jF,EAAS,IACVuvX,EAAyBp7X,UAAW,aAAS,GACzCo7X,GACTz3T,IAKE03T,GAAoC,SAAUvrS,GAE9C,SAASurS,IACL,OAAkB,OAAXvrS,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbAsqF,GAAUosS,EAAoBvrS,GAI9BN,IACI3jF,GAAS,IACVwvX,EAAmBr7X,UAAW,eAAW,GAC5CwvF,IACI3jF,EAAS,IACVwvX,EAAmBr7X,UAAW,aAAS,GAC1CwvF,IACI3jF,EAAS,KACVwvX,EAAmBr7X,UAAW,iBAAa,GACvCq7X,GACT13T,IAEE23T,GAAgC,SAAUxrS,GAE1C,SAASwrS,IACL,OAAkB,OAAXxrS,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAuB/D,OAzBAsqF,GAAUqsS,EAAgBxrS,GAI1BN,IACI3jF,GAAS,IACVyvX,EAAet7X,UAAW,eAAW,GACxCwvF,IACI3jF,EAAS,YACVyvX,EAAet7X,UAAW,qBAAiB,GAC9CwvF,IACI3jF,EAAS,SACVyvX,EAAet7X,UAAW,4BAAwB,GACrDwvF,IACI9iF,KAAYyuX,KACbG,EAAet7X,UAAW,sBAAkB,GAC/CwvF,IACI9iF,KAAY0uX,KACbE,EAAet7X,UAAW,sBAAkB,GAC/CwvF,IACI9iF,KAAY2uX,KACbC,EAAet7X,UAAW,gBAAY,GACzCwvF,IACI9iF,EAAQotR,GAAMgnC,cAAew4D,KAC9BgC,EAAet7X,UAAW,kBAAc,GACpCs7X,GACT33T,IChHEsrB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAK5Dg6V,GAA0B,SAAUzrS,GAEpC,SAASyrS,IACL,OAAkB,OAAXzrS,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAuB/D,OAzBAsqF,GAAUssS,EAAUzrS,GAIpBN,IACI3jF,GAAS,IACV0vX,EAASv7X,UAAW,eAAW,GAClCwvF,IACI3jF,EAAS,KACV0vX,EAASv7X,UAAW,YAAQ,GAC/BwvF,IACI3jF,EAAS,KACV0vX,EAASv7X,UAAW,mBAAe,GACtCwvF,IACI3jF,EAAS,QACV0vX,EAASv7X,UAAW,qBAAiB,GACxCwvF,IACI3jF,GAAS,IACV0vX,EAASv7X,UAAW,kBAAc,GACrCwvF,IACI3jF,EAAS,OACV0vX,EAASv7X,UAAW,oBAAgB,GACvCwvF,IACI9iF,EAAQotR,GAAM6gG,uBAAwBrB,KACvCiC,EAASv7X,UAAW,iBAAa,GAC7Bu7X,GACT53T,IAEE63T,GAAuB,SAAU1rS,GAEjC,SAAS0rS,IACL,OAAkB,OAAX1rS,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KA6B/D,OA/BAsqF,GAAUusS,EAAO1rS,GAIjBN,IACI3jF,GAAS,IACV2vX,EAAMx7X,UAAW,eAAW,GAC/BwvF,IACI3jF,EAAS,KACV2vX,EAAMx7X,UAAW,YAAQ,GAC5BwvF,IACI3jF,EAAS,KACV2vX,EAAMx7X,UAAW,mBAAe,GACnCwvF,IACI3jF,EAAS,WACV2vX,EAAMx7X,UAAW,qBAAiB,GACrCwvF,IACI3jF,GAAS,IACV2vX,EAAMx7X,UAAW,kBAAc,GAClCwvF,IACI3jF,EAAS,OACV2vX,EAAMx7X,UAAW,oBAAgB,GACpCwvF,IACI9iF,KAAY6uX,KACbC,EAAMx7X,UAAW,gBAAY,GAChCwvF,IACI9iF,EAAQotR,GAAM4gG,oBAAqBpB,KACpCkC,EAAMx7X,UAAW,YAAQ,GAC5BwvF,IACI9iF,EAAQotR,GAAM4gG,oBAAqBpB,KACpCkC,EAAMx7X,UAAW,iBAAa,GAC1Bw7X,GACT73T,ICjFEsrB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAK5Dk6V,GAAqC,SAAU3rS,GAE/C,SAAS2rS,IACL,OAAkB,OAAX3rS,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVAsqF,GAAUwsS,EAAqB3rS,GAI/BN,IACI3jF,EAAS,IACV4vX,EAAoBz7X,UAAW,aAAS,GAC3CwvF,IACI3jF,EAAS,OACV4vX,EAAoBz7X,UAAW,aAAS,GACpCy7X,GACT93T,IAEE+3T,GAA+B,SAAU5rS,GAEzC,SAAS4rS,IACL,OAAkB,OAAX5rS,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAiB/D,OAnBAsqF,GAAUysS,EAAe5rS,GAIzBN,IACI3jF,GAAS,IACV6vX,EAAc17X,UAAW,eAAW,GACvCwvF,IACI3jF,EAAS,OACV6vX,EAAc17X,UAAW,YAAQ,GACpCwvF,IACI3jF,EAAS,MACV6vX,EAAc17X,UAAW,eAAW,GACvCwvF,IACI3jF,EAAS,KACV6vX,EAAc17X,UAAW,gBAAY,GACxCwvF,IACI9iF,KAAY+uX,KACbC,EAAc17X,UAAW,cAAU,GAC/B07X,GACT/3T,IAEEg4T,GAAoC,SAAU7rS,GAE9C,SAAS6rS,IACL,OAAkB,OAAX7rS,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVAsqF,GAAU0sS,EAAoB7rS,GAI9BN,IACI3jF,EAAS,IACV8vX,EAAmB37X,UAAW,aAAS,GAC1CwvF,IACI3jF,EAAS,UACV8vX,EAAmB37X,UAAW,aAAS,GACnC27X,GACTh4T,IAEEi4T,GAA6C,SAAU9rS,GAEvD,SAAS8rS,IACL,OAAkB,OAAX9rS,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVAsqF,GAAU2sS,EAA6B9rS,GAIvCN,IACI3jF,EAAS,KACV+vX,EAA4B57X,UAAW,aAAS,GACnDwvF,IACI3jF,EAAS,UACV+vX,EAA4B57X,UAAW,aAAS,GAC5C47X,GACTj4T,IAEEk4T,GAAoD,SAAU/rS,GAE9D,SAAS+rS,IACL,OAAkB,OAAX/rS,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVAsqF,GAAU4sS,EAAoC/rS,GAI9CN,IACI3jF,EAAS,IACVgwX,EAAmC77X,UAAW,aAAS,GAC1DwvF,IACI3jF,EAAS,OACVgwX,EAAmC77X,UAAW,aAAS,GACnD67X,GACTl4T,IAEEm4T,GAAuC,SAAUhsS,GAEjD,SAASgsS,IACL,OAAkB,OAAXhsS,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAuB/D,OAzBAsqF,GAAU6sS,EAAuBhsS,GAIjCN,IACI3jF,GAAS,IACViwX,EAAsB97X,UAAW,eAAW,GAC/CwvF,IACI3jF,EAAS,KACViwX,EAAsB97X,UAAW,gBAAY,GAChDwvF,IACI3jF,EAAS,OACViwX,EAAsB97X,UAAW,YAAQ,GAC5CwvF,IACI3jF,EAAS,IACViwX,EAAsB97X,UAAW,eAAW,GAC/CwvF,IACI9iF,KAAYkvX,KACbE,EAAsB97X,UAAW,cAAU,GAC9CwvF,IACI9iF,KAAYmvX,KACbC,EAAsB97X,UAAW,qBAAiB,GACrDwvF,IACI9iF,EAAQotR,GAAM8gG,cAAetB,KAC9BwC,EAAsB97X,UAAW,iBAAa,GAC1C87X,GACTn4T,IAEEo4T,GAA8B,SAAUjsS,GAExC,SAASisS,IACL,OAAkB,OAAXjsS,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KA6B/D,OA/BAsqF,GAAU8sS,EAAcjsS,GAIxBN,IACI3jF,GAAS,IACVkwX,EAAa/7X,UAAW,eAAW,GACtCwvF,IACI3jF,EAAS,WACVkwX,EAAa/7X,UAAW,aAAS,GACpCwvF,IACI3jF,EAAS,IACVkwX,EAAa/7X,UAAW,aAAS,GACpCwvF,IACI3jF,EAAS,IACVkwX,EAAa/7X,UAAW,cAAU,GACrCwvF,IACI3jF,EAAS,KACVkwX,EAAa/7X,UAAW,gBAAY,GACvCwvF,IACI3jF,EAAS,KACVkwX,EAAa/7X,UAAW,YAAQ,GACnCwvF,IACI3jF,EAAS,IACVkwX,EAAa/7X,UAAW,eAAW,GACtCwvF,IACI9iF,KAAYivX,KACbI,EAAa/7X,UAAW,cAAU,GACrCwvF,IACI9iF,KAAYovX,KACbC,EAAa/7X,UAAW,iBAAa,GACjC+7X,GACTp4T,IAEEq4T,GAAkC,SAAUlsS,GAE5C,SAASksS,IACL,OAAkB,OAAXlsS,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KA4C/D,OA9CAsqF,GAAU+sS,EAAkBlsS,GAI5BN,IACI3jF,EAAS,YACVmwX,EAAiBh8X,UAAW,kBAAc,GAC7CwvF,IACI3jF,OACDmwX,EAAiBh8X,UAAW,cAAU,GACzCwvF,IACI3jF,EAAS,KACVmwX,EAAiBh8X,UAAW,kBAAc,GAC7CwvF,IACI3jF,EAAS,KACVmwX,EAAiBh8X,UAAW,iBAAa,GAC5CwvF,IACI3jF,EAAS,OACVmwX,EAAiBh8X,UAAW,kBAAc,GAC7CwvF,IACI3jF,EAAS,KACVmwX,EAAiBh8X,UAAW,YAAQ,GACvCwvF,IACI3jF,EAAS,OACVmwX,EAAiBh8X,UAAW,YAAQ,GACvCwvF,IACI3jF,GAAS,IACVmwX,EAAiBh8X,UAAW,uBAAmB,GAClDwvF,IACI3jF,EAAS,WACVmwX,EAAiBh8X,UAAW,yBAAqB,GACpDwvF,IACI3jF,GAAS,IACVmwX,EAAiBh8X,UAAW,yBAAqB,GACpDwvF,IACI3jF,EAAS,IACVmwX,EAAiBh8X,UAAW,aAAS,GACxCwvF,IACI3jF,EAAS,IACVmwX,EAAiBh8X,UAAW,eAAW,GAC1CwvF,IACI9iF,KAAYqvX,KACbC,EAAiBh8X,UAAW,cAAU,GACzCwvF,IACI9iF,KAAYgvX,KACbM,EAAiBh8X,UAAW,eAAW,GACnCg8X,GACTr4T,IChNEkjO,GAA4B,WAC5B,SAASA,KAuDT,OArDAA,EAAW7mS,UAAUi8X,oBAAsB,SAAUv0V,EAAY7C,EAAOxJ,GACpE,IAAI3pB,EACAC,EACAgJ,EACAD,EACAwhX,EACA96V,EAASsG,EAAWtG,OACpB6H,EAASvB,EAAWuB,OACpBkzV,EAAax3X,KAAKy3X,eAAe10V,EAAYrM,GASjD,OARA3pB,EAAIyqX,EAA4B,gBAAI/6V,EAAOjwB,KAAO83B,EAAOtuB,MACzDuhX,EAAaC,EAA6B,iBAAI/6V,EAAOjwB,KAAOiwB,EAAOhwB,MAAS,EAAI63B,EAAOtuB,MACvFA,EAAQ+sB,EAAWpN,cAAqB,OAAK5oB,EAAIwqX,GACjDvqX,EAAIyvB,EAAY,IAAK,EAAIsG,EAAW20V,eAAkBF,EAA6B,iBAC/EA,EAAgC,oBAAIA,EAA4B,gBAAIlzV,EAAOtuB,MAC/ED,EAASgtB,EAAWpN,cAAsB,QAAK6hW,EAA6B,iBACvE,EAAIz0V,EAAW20V,eAAkBF,EAAgC,oBAAI/6V,EAAY,IAClF+6V,EAA4B,gBAAIA,EAA+B,qBAC1DzqX,EAAGA,EAAGC,EAAGA,EAAGgJ,MAAOA,EAAOD,OAAQA,IAE/CmsR,EAAW7mS,UAAUo8X,eAAiB,SAAU10V,EAAYrM,GACxD,IAeImH,EAfAqC,EAAQ6C,EAAW7C,MACnBi2S,EAASpzS,EAAWqzS,eACpBliU,EAAWiiU,EAAOjiU,SAAS0B,cAC3B+hX,EAAiB,EACjBC,EAAsB,EAEtBlrW,EAAOqW,EAAWrW,KAClBmrW,EAAmB,EAEnBC,EAAe3hD,EAAO7xS,OAAOtuB,MAC7B+hX,EAAkB,EAClBC,EAAmB,EACnBC,EAAkB,EAClBC,EAAqB,EACrBC,EAAW,EAaf,OAXIhiD,EAAgB,UAChBt4S,EAASnH,EAAO1gB,QAA4B+sB,EAAW20V,eAAkB,EAAII,EAC7EC,EAA+B,SAAb7jX,EAAsB2pB,EAAQ,EAChDm6V,EAAgC,UAAb9jX,EAAuB2pB,EAAQ,EAClDs6V,EAAWhiD,EAAc,MAAE3+S,QAAUhL,GAAY2pT,EAAc,MAAE1pT,KAAMC,GAAc,OAAI,EACzFurW,EAA+B,QAAb/jX,EAAqB6uB,EAAW20V,eAAiBhhW,EAAO3gB,OAASoiX,EAAW,EAC9FD,EAAkC,WAAbhkX,EAAwB6uB,EAAW20V,eAAiBhhW,EAAO3gB,OAASoiX,EAAW,GAExGR,EAAiBnrW,GAAY0T,EAAMk4V,SAAS3rW,KAAMC,GAAc,OAC7B,KAAfwT,EAAMzT,MAAgByT,EAAe,QAAzD23V,EApBkB,EAqBlBD,EAAkD,KAA3B13V,EAAgB,SAAEzT,MAAgByT,EAAgB,SAAE1I,UAAW,GAElFugW,gBAAiBA,EAAiBC,iBAAkBA,EACpDC,gBAAiBA,EAAiBC,mBAAoBA,EACtDL,iBAAkBA,EAAkBD,oBAAqBA,IAG1D11F,KCrDPm2F,GAA4B,WAC5B,SAASA,IACLr4X,KAAKs4X,eAAiB,IAAK,IAAK,IAAK,GAAI,GAAI,GAAI,GAAI,KAAM,GAAI,IAAM,IAAM,IAAM,GAC7E,EAAG,GAAK,GAAK,GAAK,GAAK,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,IACvDt4X,KAAKu4X,0BACLv4X,KAAKw4X,8BACLx4X,KAAKy4X,oBACLz4X,KAAKw1B,UAAY,IAAIigW,GA+gCzB,OA7gCA4C,EAAWh9X,UAAUq9X,WAAa,SAAU31V,EAAYrM,GACpD12B,KAAK24X,mBAAmB51V,EAAYrM,GACpC12B,KAAK44X,sBAAsB71V,EAAYrM,GACvC12B,KAAK64X,oBAAoB91V,GACzB/iC,KAAK84X,oBAAoB/1V,GACzB/iC,KAAK+4X,sBAAsBh2V,GAC3B/iC,KAAKg5X,kBAAkBj2V,GACnBA,EAAWk2V,eAAezhW,SAC1Bx3B,KAAKk5X,YAAYn2V,GAEjBA,EAAWo2V,WAAW3hW,SACtBx3B,KAAKo5X,YAAYr2V,GAEjBA,EAAWk2V,eAAezhW,SAC1Bx3B,KAAKq5X,gBAAgBt2V,GAErBA,EAAWo2V,WAAW3hW,SACtBx3B,KAAKs5X,gBAAgBv2V,IAG7Bs1V,EAAWh9X,UAAU69X,YAAc,SAAUn2V,GACzC,IAAIulS,EAAiBvlS,EAAWk2V,eAAe3wD,eAC3C8B,EAAiBrnS,EAAWk2V,eAAe7uD,eAC3Cl7S,EAAW6T,EAAWk2V,eAAe/pW,SACrCo5S,EAAe9wS,SACfx3B,KAAKu5X,sBAAsBx2V,GAE3BqnS,EAAe5yS,SACfx3B,KAAKw5X,sBAAsBz2V,GAE3B7T,EAASsI,SACTx3B,KAAKy5X,gBAAgB12V,IAG7Bs1V,EAAWh9X,UAAU+9X,YAAc,SAAUr2V,GACzC,IAAIulS,EAAiBvlS,EAAWo2V,WAAW7wD,eACvC8B,EAAiBrnS,EAAWo2V,WAAW/uD,eACvCl7S,EAAW6T,EAAWo2V,WAAWjqW,SACjCo5S,EAAe9wS,SACfx3B,KAAK05X,sBAAsB32V,GAE3BqnS,EAAe5yS,SACfx3B,KAAK25X,sBAAsB52V,GAE3B7T,EAASsI,SACTx3B,KAAK45X,gBAAgB72V,IAG7Bs1V,EAAWh9X,UAAU09X,sBAAwB,SAAUh2V,GAC9BA,EAAWk2V,eAAe3wD,eAA/C,IACI8B,EAAiBrnS,EAAWk2V,eAAe7uD,eAC/CpqU,KAAK65X,uBAAuB92V,GACxBqnS,EAAe5yS,SACfx3B,KAAK85X,uBAAuB/2V,IAGpCs1V,EAAWh9X,UAAU29X,kBAAoB,SAAUj2V,GAC1BA,EAAWo2V,WAAW7wD,eAA3C,IACI8B,EAAiBrnS,EAAWo2V,WAAW/uD,eAC3CpqU,KAAK+5X,uBAAuBh3V,GACxBqnS,EAAe5yS,SACfx3B,KAAKg6X,uBAAuBj3V,IAGpCs1V,EAAWh9X,UAAUs9X,mBAAqB,SAAU51V,EAAYrM,GAC5D,IAAIujW,EACAC,EAGAntX,EACAC,EAHAgJ,EAAQ+sB,EAAWpN,cAAc3f,MACjCD,EAASgtB,EAAWpN,cAAc5f,OAGtCC,EAAQ0gB,EAAO1gB,MACfD,EAAS2gB,EAAO3gB,OAChBkkX,EAAiB5tX,KAAK0T,IAAI/J,EAAOD,GACjCmkX,EAAkB7tX,KAAK0T,IAAI/J,EAAOD,GAClChJ,EAAI2pB,EAAO3pB,GAAK2pB,EAAO1gB,MAAQ,EAAIikX,EAAiB,GACpDjtX,EAAI0pB,EAAO1pB,IAAM+I,EAASmkX,GAAmB,EAAI,GAAKnkX,EAASmkX,GAAmB,EAAI,GACtFn3V,EAAW2nS,WAAc39T,EAAGA,EAAGC,EAAGA,EAAGgJ,MAAOikX,EAAgBlkX,OAAQmkX,IAExE7B,EAAWh9X,UAAUu9X,sBAAwB,SAAU71V,EAAYrM,GAC/D,IACIyjW,EAAgB,EAChBnkX,EAAQ+sB,EAAW2nS,UAAU10T,MAC7BpJ,EAASm2B,EAAWn2B,OACxButX,EAAgBn6X,KAAKo6X,mBAAmBr3V,GACxC,IAAIs3V,EAAuD,YAAxCt3V,EAAWo2V,WAAW15Q,cAAgC06Q,EAL3D,GAAA,GAOVG,GADWtkX,EAAsB,EAAdqkX,EAAkB,EAAIrkX,EAAsB,EAAdqkX,EAAkB,GACzC,EAC1BE,EAAoB3tX,EAAS,EAAI,EAAKA,EAAS,GAAM,GAAMA,EAC/D5M,KAAKw6X,WAAaF,EAAeC,EACjCv6X,KAAKy6X,YAAc13V,EAAW2nS,UAAU39T,EAAIstX,EAAeC,GAAgB,EAAIC,GAC/Ev6X,KAAK06X,WAAa33V,EAAW2nS,UAAU19T,EAAIqtX,EAAeC,GAAgB,EAAIC,GAC9Ev6X,KAAK26X,cAAgB36X,KAAKy6X,YAAcz6X,KAAKw6X,WAC7Cx6X,KAAK46X,cAAgBlkW,EAAO1pB,EAAI0pB,EAAO3gB,OAAS,GAEpDsiX,EAAWh9X,UAAU++X,mBAAqB,SAAUr3V,GAKhD,IAAK,IADDvG,EAHA49V,EAAqB,EACrB1tW,EAAOqW,EAAWk2V,eAAejjW,WAG5B75B,EAAI,EAAGA,EAAI6D,KAAKs4X,aAAa77X,OAAQN,IAGtCi+X,GADJ59V,EAAWhQ,GADHxsB,KAAKs4X,aAAan8X,GAAG+Q,WACCwf,IACI1W,QAC9BokX,EAAqB59V,EAASxmB,OAGtC,OAAOokX,GAEX/B,EAAWh9X,UAAUw/X,oBAAsB,WAMvC,IAAK,IAJDC,EAAY,EACZv3W,EAAI,EACJikT,KACA16T,EAA6B,EAAlB9M,KAAKw6X,WACXr+X,EAAI,EAAGA,EAAI,EAAGA,GAAQ,GAAK,CAEhC,IACI4+X,GAAa,EACbC,GAAa,EACbpuX,EAAWE,GAHH,IADZ3Q,EAAIkQ,KAAKoxB,MAAU,GAAJthC,GAAU,IACJ,IAGc,EAAK,EACtB,IAAd2+X,GAA2B,IAAN3+X,GAMrBA,EAAI,IACJ4+X,EAAa/6X,KAAKq8B,UAAU,EAAGvvB,EAAUF,EAlBnB,KAoBtBzQ,EAAI,IACJ6+X,EAAah7X,KAAKq8B,UAAU,EAAGvvB,EAAUF,EArBnB,KAuBtBmuX,GAAcC,GAGdF,EAAYluX,GA1BU,KA2BtB46T,EAAOjkT,GAAKpnB,EACZonB,IACAu3W,EAAYluX,KAjBZkuX,EAAYluX,EACZ46T,EAAOjkT,GAAKpnB,EACZonB,KAmBR,IAAK,IADD03W,GAAgB,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,IAC/B90W,EAAI,EAAGA,EAAI80W,EAAax+X,OAAQ0pB,IACrCqhT,EAAOjkT,GAAK03W,EAAa90W,GACzB5C,IAEJ,OAAOikT,GAEX6wD,EAAWh9X,UAAUghC,UAAY,SAAUtvB,EAAGwhB,EAAGusW,EAAWI,GACxD,IAAIC,EACAvuX,EAGJ,OAFAuuX,EAAQ,GAAKpuX,EAAI,GACjBH,EAAW2hB,EAAI4sW,EAAS,EAAK,EACtBL,EAAYluX,EAASsuX,GAEhC7C,EAAWh9X,UAAUw9X,oBAAsB,SAAU91V,GAWjD,IAAK,IATDh2B,EAEAH,EACAyhB,EACAvhB,EAA6B,EAAlB9M,KAAKw6X,WAChBY,EAAuBp7X,KAAK66X,sBAC5BvsW,EAAKtuB,KAAK46X,cACVS,EAAer7X,KAAKy6X,YACpBhK,EAAQzwX,KAAKy6X,YACRt+X,EAAI,EAAGA,EAAIi/X,EAAqB3+X,OAAQN,IAG7CyQ,EAAUE,GADF,IADRC,EAAIquX,EAAqBj/X,IACR,IACa,EACA,cAA1B4mC,EAAWu4V,aACX7K,EAAQ4K,EAAevuX,EAAqB,EAATF,GAEvCyhB,EAAKoiW,EAAQ7jX,EACb5M,KAAKw4X,2BAA2Bh0X,MAC5Bwc,QAASqN,EAAIpN,QAASqN,EAAI1hB,OAAQA,EAAQ5P,MAAO+P,EAAGm/C,OAAQ,QAIxEmsU,EAAWh9X,UAAUy9X,oBAAsB,SAAU/1V,GACjD,IAAIw4V,EACAz1V,EAEA94B,EADAF,EAA6B,EAAlB9M,KAAKw6X,WAEhB1mW,EAAQ,IAAIomB,GACc,cAA1BnX,EAAWu4V,YACXxnW,EAAM/mB,EAAI/M,KAAKy6X,YAAc3tX,EAC7BgnB,EAAM9mB,EAAIhN,KAAK06X,WAAa16X,KAAKw6X,aAGjC1mW,EAAM/mB,EAAI/M,KAAKy6X,YACf3mW,EAAM9mB,EAAIhN,KAAK06X,WAAa16X,KAAKw6X,YAErC,IAAK,IAAIr+X,EAAI,EAAGA,EAAI6D,KAAKs4X,aAAa77X,OAAQN,IAC1C6Q,EAAIhN,KAAKs4X,aAAan8X,GACtB2pC,EAAYz5B,KAAKE,IAAM,EAAIS,EAAKF,EAAY,GAExCyuX,EAD0B,cAA1Bx4V,EAAWu4V,WACHtuX,EAAI,EAAI8mB,EAAM9mB,EAAI84B,EAAYhS,EAAM9mB,EAAI84B,EAGxC94B,EAAI,EAAI8mB,EAAM9mB,EAAI84B,EAAYhS,EAAM9mB,EAAI84B,EAEpD9lC,KAAKu4X,uBAAuB/zX,MACxBwc,QAAS8S,EAAM/mB,EAAGkU,QAASs6W,EAAO3uX,OAAQk5B,EAAW9oC,MAAOgQ,KAIxEqrX,EAAWh9X,UAAUw+X,uBAAyB,SAAU92V,GACpD,IACIsiB,EACA7F,EACAg8U,EACAC,EACA3uW,EALA4uW,KAMJ17X,KAAK27X,uBACL,IAAK,IAAIx/X,EAAI,EAAGA,EAAI6D,KAAKw4X,2BAA2B/7X,OAAQN,IAAK,CAC7D,IAAIy/X,EAAc,IAAI1G,GACtB0G,EAAc57X,KAAKw4X,2BAA2Br8X,GAC9Cu/X,EAAY17X,KAAK67X,iCAAiCD,EAAY5+X,OAChC,cAA1B+lC,EAAWu4V,YACXE,EAAeE,EAAU,GACzBD,EAAeC,EAAU,KAGzBF,EAAeE,EAAU,GACzBD,EAAeC,EAAU,IAE7B5uW,GAAS9W,MAAO4lX,EAAYhvX,OAAQmJ,OAAQ6lX,EAAYhvX,QAC9B,IAAtBgvX,EAAY5+X,OAAuC,KAAtB4+X,EAAY5+X,OACzCqoD,EAAarlD,KAAK87X,yBAAyBN,EAAa,GAAGx6W,QAASw6W,EAAa,GAAGv6W,QAASu6W,EAAa,GAAG5uX,OAAQgvX,EAAY56W,QAAS46W,EAAY36W,QAAS26W,EAAYhvX,OAAQm2B,EAAWu4V,YAC9L97U,EAAWx/C,KAAK87X,yBAAyBL,EAAa,GAAGz6W,QAASy6W,EAAa,GAAGx6W,QAASw6W,EAAa,GAAG7uX,OAAQgvX,EAAY56W,QAAS46W,EAAY36W,QAAS26W,EAAYhvX,OAAQm2B,EAAWu4V,YAC5Lt7X,KAAK27X,oBAAoBn3X,MACrB6gD,WAAYA,EACZ7F,SAAUA,EACVu8U,cAAe,EAAI1vX,KAAK+Q,GACxB4+W,eAA2C,cAA1Bj5V,EAAWu4V,WACxBt7X,KAAKw1B,UAA4B,iBAAIx1B,KAAKw1B,UAAqB,UACnEymW,YAAY,EACZnvW,KAAMA,MAIVu4B,GAAet4C,EAAG6uX,EAAY56W,QAAU46W,EAAYhvX,OAAQI,EAAG4uX,EAAY36W,SAC3Eu+B,GAAazyC,EAAG6uX,EAAY56W,QAAU46W,EAAYhvX,OAAQI,EAAG4uX,EAAY36W,QAAU,KACnFjhB,KAAK27X,oBAAoBn3X,MACrB6gD,WAAYA,EACZ7F,SAAUA,EACVu8U,cAAe,EAAI1vX,KAAK+Q,GACxB4+W,eAAgBh8X,KAAKw1B,UAAqB,UAC1CymW,YAAY,EACZnvW,KAAMA,OAKtBurW,EAAWh9X,UAAU0+X,uBAAyB,SAAUh3V,GACpD,IAAIm5V,EACAC,EACAnvX,EAEAovX,EACAC,EAEAC,EACAj3U,EACA7F,EACA1yB,EACAkvW,EARAN,KASJ17X,KAAKu8X,uBACLv8X,KAAKy4X,oBACLyD,EAAU74V,KACV,IAAK,IAAIlnC,EAAI,EAAGA,EAAI6D,KAAKu4X,uBAAuB97X,OAAQN,KACpDggY,EAAcn8X,KAAKu4X,uBAAuBp8X,IAC1ByQ,QAAUsvX,IAG1BlvX,EAAImvX,EAAYn/X,MAEhBo/X,GADAV,EAAY17X,KAAKw8X,gCAAgCL,EAAa9vX,KAAKE,IAAIS,GAAI+1B,IAC3C,GAChCs5V,EAAsBX,EAAU,GAEhCY,EADwBt8X,KAAKy8X,oBAAoBz8X,KAAK26X,cAAe36X,KAAK46X,cAAeyB,EAAoBtvX,EAAGsvX,EAAoBrvX,IACpF,IAAMX,KAAK+Q,IACjD,IAANpQ,GACAq4C,GAAet4C,EAAGqvX,EAAoBrvX,EAAGC,EAAGovX,EAAoBpvX,GAChEwyC,GAAazyC,EAAGsvX,EAAoBtvX,EAAGC,EAAGqvX,EAAoBrvX,GAC9D8f,GAAS9W,MAAOmmX,EAAYvvX,OAAQmJ,OAAQomX,EAAYvvX,QACxDovX,EAAiBhvX,EAAI,EAAIhN,KAAKw1B,UAAqB,UAAIx1B,KAAKw1B,UAA4B,iBACxFx1B,KAAKu8X,oBAAoB/3X,MACrB6gD,WAAYA,EACZ7F,SAAUA,EACV1yB,KAAMA,EACNivW,cAAe,EAAI1vX,KAAK+Q,GACxB6+W,YAAY,EACZD,eAAgBA,IAEpBh8X,KAAKy4X,iBAAiBj0X,MAClBwc,QAASq7W,EAAoBtvX,EAC7BkU,QAASo7W,EAAoBrvX,EAC7BuU,MAAO+6W,EACPt/X,MAAOgQ,EACPJ,OAAQ5M,KAAKw6X,WACbtuU,OAAQ,SAIZ7G,GAAet4C,EAAG/M,KAAKy6X,YAAaztX,EAAGhN,KAAK46X,eAC5Cp7U,GAAazyC,EAAG/M,KAAK26X,cAAgB36X,KAAKw6X,WAAYxtX,EAAGhN,KAAK46X,eAC9D56X,KAAKu8X,oBAAoB/3X,MACrB6gD,WAAYA,EACZ7F,SAAUA,EACV1yB,KAAM,KACNivW,cAAe,KACfE,WAAY,KACZD,eAAgB,OAEpBh8X,KAAKy4X,iBAAiBj0X,MAClBwc,QAAoC,cAA1B+hB,EAAWu4V,WAChBt7X,KAAK26X,cAAgB36X,KAAKw6X,WAAex6X,KAAK26X,cAAgB36X,KAAKw6X,WACxEv5W,QAASjhB,KAAK46X,cACdr5W,MAAkC,cAA1BwhB,EAAWu4V,WACf,IAAM,IACVt+X,MAAOgQ,EACPJ,OAAQ5M,KAAKw6X,WACbtuU,OAAQ,UAKxBmsU,EAAWh9X,UAAUohY,oBAAsB,SAAUz7W,EAASC,EAASy7W,EAASC,GAC5E,IAAIhpW,EAGJ,OAFAA,EAAStnB,KAAK0nB,MAAM4oW,EAAU17W,EAASy7W,EAAU17W,GACjD2S,EAASA,EAAS,EAAKA,EAAU,IAAMtnB,KAAK+Q,GAAK,IAAQuW,GAG7D0kW,EAAWh9X,UAAUmhY,gCAAkC,SAAUL,EAAan/X,EAAO+lC,GACjF,IAEI1U,EACAC,EAHAotW,KACAE,KAsBJ,OAnBAvtW,EAAKruB,KAAK26X,cACVrsW,EAAKtuB,KAAK46X,cACN59X,GAAS,GACT0+X,EAAU,GAAgC,cAA1B34V,EAAWu4V,YACrBvuX,EAAGshB,EAAKruB,KAAKw6X,WAAYxtX,EAAGshB,IAASvhB,EAAGshB,EAAKruB,KAAKw6X,WAAYxtX,EAAGshB,GAGvEstW,EADK5+X,GAAS,EACAgD,KAAKw4X,2BAA2BxxV,OAAO,SAAUi3B,GAAK,OAAmB,KAAZA,EAAEjhE,QAExEA,GAAS,EACAgD,KAAKw4X,2BAA2BxxV,OAAO,SAAUi3B,GAAK,OAAmB,IAAZA,EAAEjhE,QAG/DgD,KAAKw4X,2BAA2BxxV,OAAO,SAAUi3B,GAAK,OAAmB,IAAZA,EAAEjhE,QAE7E4+X,EAAYn/X,OAAS,IACrBi/X,EAAU,GAAK17X,KAAK87X,yBAAyBK,EAAYn7W,QAASm7W,EAAYl7W,QAASk7W,EAAYvvX,OAAQgvX,EAAY,GAAG56W,QAAS46W,EAAY,GAAG36W,QAAS26W,EAAY,GAAGhvX,OAAQm2B,EAAWu4V,aAEjMI,EAAU,GAAK17X,KAAK87X,yBAAyBK,EAAYn7W,QAASm7W,EAAYl7W,QAASk7W,EAAYvvX,OAAQyhB,EAAIC,EAAItuB,KAAKw6X,WAAYz3V,EAAWu4V,YACxII,GAEXrD,EAAWh9X,UAAUwgY,iCAAmC,SAAU7+X,GAC9D,IACI4/X,EACAC,EAFAC,KAyBJ,OAtBI9/X,GAAS,IACT4/X,EAAY,EACZC,GAAa,GAER7/X,GAAS,GACd4/X,EAAY,EACZC,GAAa,GAER7/X,GAAS,GACd4/X,EAAY,EACZC,GAAa,GAER7/X,GAAS,GACd4/X,EAAY,GACZC,GAAa,KAGbD,EAAY,GACZC,GAAa,IAEjBC,EAAW,GAAK98X,KAAKu4X,uBAAuBvxV,OAAO,SAAUi3B,GAAK,OAAOA,EAAEjhE,QAAU4/X,IACrFE,EAAW,GAAK98X,KAAKu4X,uBAAuBvxV,OAAO,SAAUi3B,GAAK,OAAOA,EAAEjhE,QAAU6/X,IAC9EC,GAEXzE,EAAWh9X,UAAU0hY,gCAAkC,SAAU//X,GAC7D,IAAI4/X,EACAC,EACAG,KAuCJ,OAtCIhgY,GAAS,IACT4/X,EAAY,EACZC,GAAa,GAER7/X,GAAS,IACd4/X,EAAY,GACZC,GAAa,IAER7/X,GAAS,IACd4/X,EAAY,GACZC,GAAa,IAER7/X,GAAS,IACd4/X,EAAY,EACZC,GAAa,GAER7/X,GAAS,GACd4/X,EAAY,IACZC,GAAa,KAER7/X,GAAS,KACd4/X,EAAY,EACZC,GAAa,GAER7/X,GAAS,GACd4/X,EAAY,EACZC,GAAa,GAER7/X,GAAS,GACd4/X,EAAY,EACZC,GAAa,IAGbD,EAAY,GACZC,GAAa,IAEjBG,EAAY,GAAKh9X,KAAKu4X,uBAAuBvxV,OAAO,SAAUi3B,GAAK,OAAOA,EAAS,QAAM2+T,IACzFI,EAAY,GAAKh9X,KAAKu4X,uBAAuBvxV,OAAO,SAAUi3B,GAAK,OAAOA,EAAS,QAAM4+T,IAClFG,GAEX3E,EAAWh9X,UAAUygY,yBAA2B,SAAU9gW,EAAIC,EAAI0M,EAAIzM,EAAIC,EAAIyM,EAAI0zV,GAC9E,IAAIjtW,EACAC,EACA2uW,EACAC,EACA/5U,EACAg6U,EACAl/T,EACAk7C,EACAikR,EACAC,EACAC,EACAlkR,EACAmkR,EACAC,EACAC,EACA3pW,GAAU/mB,EAAG,EAAGC,EAAG,GAoCvB,OAnCAqhB,EAAK2M,EAAKE,EACV5M,EAAK2M,EAAKE,EACV8hW,EAAY5wX,KAAKQ,KAAKwhB,EAAKA,EAAKC,EAAKA,GACrC4uW,EAAeD,EAAYA,EAC3B95U,GAAKxb,EAAKA,EAAKC,EAAKA,IAAO,EAAIs1V,GAC/BC,EAAiBx1V,EAAKA,EAAKC,EAAKA,EAChCq2B,EAAI5xD,KAAKQ,KAAK,GAAK86B,EAAKA,EAAKC,EAAKA,GAAMs1V,EAAgBC,EAAgBA,GAAkBD,EAAeA,GAAgB,GACzH/jR,GAAMn+E,EAAKE,GAAM,EAAIioB,GAAKjoB,EAAKF,GAC/BoiW,EAAKn/T,GAAK9iC,EAAKF,GAAM,EACrBoiW,EAAMlkR,EAAKikR,EACXE,EAAMnkR,EAAKikR,EACXhkR,GAAMn+E,EAAKE,GAAM,EAAIgoB,GAAKhoB,EAAKF,GAC/BsiW,EAAKt/T,GAAKjjC,EAAKE,GAAM,EACrBsiW,EAAMpkR,EAAKmkR,EACXE,EAAMrkR,EAAKmkR,EACQ,cAAfjC,EACIgC,EAAMD,GACNvpW,EAAM/mB,EAAIuwX,EACVxpW,EAAM9mB,EAAIywX,IAGV3pW,EAAM/mB,EAAIswX,EACVvpW,EAAM9mB,EAAIwwX,GAIVH,EAAMC,GACNxpW,EAAM/mB,EAAIswX,EACVvpW,EAAM9mB,EAAIwwX,IAGV1pW,EAAM/mB,EAAIuwX,EACVxpW,EAAM9mB,EAAIywX,IAGT1wX,EAAG+mB,EAAM/mB,EAAGC,EAAG8mB,EAAM9mB,IAElCqrX,EAAWh9X,UAAUk+X,sBAAwB,SAAUx2V,GACnD,IACIqgQ,EACApiS,EACA+b,EAHAoS,EAAgB4T,EAAWk2V,eAAe3wD,eAI9CllC,EAAergQ,EAAWlV,SAASw+C,aAAc/oE,GAAMy/B,EAAW/hC,QAAQsC,GAAK,sCAC/EyZ,EAAO/c,KAAK09X,uBAAuB19X,KAAK27X,qBACxC,IAAIgC,EAAiB,IAAIvnW,GAAW2M,EAAW/hC,QAAQsC,GAAK,gCAAiC,OAAQ6rB,EAAqB,MAAG4T,EAAW1M,WAAWlH,cAAeA,EAAuB,QAAGA,EAAyB,UAAGpS,GACxN/b,EAAU+hC,EAAWlV,SAASsI,SAASwnW,GACvCv6F,EAAazhS,YAAYX,GACzB+hC,EAAWzR,UAAU3vB,YAAYyhS,IAErCi1F,EAAWh9X,UAAUq+X,sBAAwB,SAAU32V,GACnD,IACIqgQ,EACApiS,EACA+b,EAHAoS,EAAgB4T,EAAWo2V,WAAW7wD,eAI1CllC,EAAergQ,EAAWlV,SAASw+C,aAAc/oE,GAAMy/B,EAAW/hC,QAAQsC,GAAK,kCAC/EyZ,EAAO/c,KAAK09X,uBAAuB19X,KAAKu8X,qBACxC,IAAIqB,EAAiB,IAAIxnW,GAAW2M,EAAW/hC,QAAQsC,GAAK,4BAA6B,OAAQ6rB,EAAqB,MAAG4T,EAAW1M,WAAWlH,cAAeA,EAAuB,QAAGA,EAAyB,UAAGpS,GACpN/b,EAAU+hC,EAAWlV,SAASsI,SAASynW,GACvCx6F,EAAazhS,YAAYX,GACzB+hC,EAAWzR,UAAU3vB,YAAYyhS,IAErCi1F,EAAWh9X,UAAUo+X,gBAAkB,SAAU12V,GAC7C,IACIqgB,EACA/a,EACAvb,EACAgb,EAEAvmB,EAEAiU,EARA5oB,EAAS5M,KAAKw6X,WAOdtrW,EAAW6T,EAAWk2V,eAAe/pW,SAErCk0Q,EAAergQ,EAAWlV,SAASw+C,aAAc/oE,GAAMy/B,EAAW/hC,QAAQsC,GAAK,mBACnF8/C,GAAWr2C,EAAG/M,KAAK26X,cAAgB/tX,EAAQI,EAAGhN,KAAK46X,eACnDvyV,GAAWt7B,EAAG/M,KAAK26X,cAAgB/tX,EAAQI,EAAIhN,KAAK46X,cAAgB,KACpE9tW,GAAS9W,MAAOpJ,EAAQmJ,OAAQnJ,GAChCk7B,EAAQ9nC,KAAKw1B,UAAqB,UAElCjU,EAAkB,EAAVlV,KAAK+Q,GACboY,EAAY,IAAW4tB,EAAOr2C,EAAI,IAAMq2C,EAAOp2C,EAAI,MAAkB8f,EAAK9W,MACtE,IAAM8W,EAAK/W,OAAS,IAAMwL,EAAQ,MAAyBumB,EAAQ,IAAMO,EAAOt7B,EAAI,IAAMs7B,EAAOr7B,EACrG,IAAIgG,EAAU,IAAIojB,GAAW2M,EAAW/hC,QAAQsC,GAAK,sBAAuB,OAAQ4rB,EAASlZ,MAAO+sB,EAAW1M,WAAWnH,SAAU,EAAGA,EAAS4iB,UAAWtc,GACvJx0B,EAAU+hC,EAAWlV,SAASsI,SAASnjB,GAC3CowR,EAAazhS,YAAYX,GACzB+hC,EAAWzR,UAAU3vB,YAAYyhS,IAErCi1F,EAAWh9X,UAAUu+X,gBAAkB,SAAU72V,GAC7C,IACIqgB,EACA/a,EACAvb,EACAgb,EAIAtS,EARA5oB,EAAS5M,KAAKw6X,WAOdtrW,EAAW6T,EAAWo2V,WAAWjqW,SAErCk0B,GAAWr2C,EAAG/M,KAAK26X,cAAgB/tX,EAAQI,EAAGhN,KAAK46X,eACnDvyV,GAAWt7B,EAAG/M,KAAK26X,cAAgB/tX,EAAQI,EAAGhN,KAAK46X,eACnD9tW,GAAS9W,MAAO,EAAGD,OAAQ,GAC3B+xB,EAAQ9nC,KAAKw1B,UAA4B,iBAGzCA,EAAY,KAAY4tB,EAAOr2C,EAAI,IAAMq2C,EAAOp2C,EAAI,MAChD8f,EAAK9W,MAAQ,IAAM8W,EAAK/W,OAAS,QAAuC+xB,EAAQ,IAChFO,EAAOt7B,EAAI,IAAMs7B,EAAOr7B,EAC5B,IAAIgG,EAAU,IAAIojB,GAAW2M,EAAW/hC,QAAQsC,GAAK,kBAAmB,OAAQ4rB,EAASlZ,MAAO+sB,EAAW1M,WAAWnH,SAAU,EAAGA,EAAS4iB,UAAWtc,GACnJ4tQ,EAAergQ,EAAWlV,SAASw+C,aAAc/oE,GAAMy/B,EAAW/hC,QAAQsC,GAAK,mBAC/EtC,EAAU+hC,EAAWlV,SAASsI,SAASnjB,GAC3CowR,EAAazhS,YAAYX,GACzB+hC,EAAWzR,UAAU3vB,YAAYyhS,IAErCi1F,EAAWh9X,UAAUg+X,gBAAkB,SAAUt2V,GAiB7C,IAAK,IAdD86V,EACAxqX,EACAtG,EACAC,EACAwvB,EAEAshW,EACAC,EACAC,EAEAC,EACAC,EACAC,EAdAtsB,EAAQ9uU,EAAWk2V,eACnBvsW,EAAOqW,EAAWk2V,eAAejjW,WAcjCklT,EAAWn4S,EAAWlV,SAASw+C,aAAc/oE,GAAIy/B,EAAW/hC,QAAQsC,GAAK,iBACpEnH,EAAI,EAAGA,EAAI6D,KAAKw4X,2BAA2B/7X,OAAQN,IAGxD,GAFA0hY,EAAa79X,KAAKw4X,2BAA2Br8X,GAC7CkX,EAAQrT,KAAKw4X,2BAA2Br8X,GAAGa,MAAMkQ,WACxB,IAArB2wX,EAAW7gY,MAAe,CAa1B,GAZA+P,EAA+B,cAA1Bg2B,EAAWu4V,WACZuC,EAAW78W,QAAU68W,EAAWjxX,OAASixX,EAAW78W,QAAU68W,EAAWjxX,OAC7EI,EAAI6wX,EAAW58W,QACfub,EAAWhQ,GAAYnZ,EAAOqZ,GAC9B3f,EAA+B,cAA1Bg2B,EAAWu4V,WAA8BvuX,EAAIyvB,EAASxmB,MAAQjJ,EACvC,YAAxB8kW,EAAMpyP,cACNzyG,GAAKwvB,EAASzmB,OAAS,EAGvB/I,GAAKwvB,EAASzmB,OAElB/V,KAAKw4X,2BAA2Br8X,GAAG+vD,OAASlsD,KAAKo+X,gBAAgB/qX,EAAOmpB,EAAUzvB,EAAGC,GAClD,SAA/B6kW,EAAMnvC,qBAAiC,CAGvCq7D,GADAD,EADW99X,KAAKw4X,2BAA2Br8X,GACjB+vD,OAAOx1B,QACP1gB,MAC1BgoX,EAAOF,EAAe/wX,EACtB,IAAK,IAAIwW,EAAI,EAAGA,EAAIpnB,EAAGonB,IAGnB26W,GADAD,EADWj+X,KAAKw4X,2BAA2Bj1W,GACjB2oC,OAAOx1B,QACP1gB,MAC1BmoX,EAAOF,EAAelxX,EACS,cAA1Bg2B,EAAWu4V,YACX6C,EAAOD,MACR7qX,EAAQ,IAEmB,eAA1B0vB,EAAWu4V,YACZ,EAAS0C,EAAOD,IAChB1qX,EAAQ,IAIpB,IAAIgrX,GAA6B5xW,KAAMpZ,EAAMnG,WAAYH,EAAGA,EAAGC,EAAGA,EAC9DyqB,KAAM,kBAAmBoB,QAAQ,GACrCkK,EAAWvc,QAAQ,kBAAmB63W,GACtC,IACIr9X,EAAUuiC,GADA,IAAIhN,GAAWwM,EAAW/hC,QAAQsC,GAAK,WAAanH,EAAGkiY,EAAyBtxX,EAAGsxX,EAAyBrxX,EAAG,OAAQqxX,EAAyB5xW,MACrHC,EAAMqW,EAAW1M,WAAWrH,UAAWksT,GAChFA,EAASv5U,YAAYX,GAG7B+hC,EAAWzR,UAAU3vB,YAAYu5U,IAErCm9C,EAAWh9X,UAAUi+X,gBAAkB,SAAUv2V,GAuB7C,IAAK,IAnBD1vB,EACAmpB,EACAjb,EACArN,EACAoqX,EACAN,EACAO,EACAR,EACAS,EAEAV,EACAK,EACAM,EACAP,EACAQ,EAEAT,EAlBAvxW,EAAOqW,EAAWo2V,WAAWnjW,WAC7B2oW,EAAiB,IAAIxJ,GAkBrByJ,EAAQ77V,EAAWo2V,WACnBj+C,EAAWn4S,EAAWlV,SAASw+C,aAAc/oE,GAAIy/B,EAAW/hC,QAAQsC,GAAK,iBACpEnH,EAAI,EAAGA,EAAI6D,KAAKy4X,iBAAiBh8X,OAAQN,IAAK,CAcnD,GAbAwiY,EAAiB3+X,KAAKy4X,iBAAiBt8X,GACvCkX,EAAQsrX,EAAe3hY,MAAMkQ,WAC7BsvB,EAAWhQ,GAAYnZ,EAAOqZ,GAC9BnL,EAAQlV,KAAKoxB,MAA6B,IAAvBkhW,EAAep9W,OAAe,IACrB,YAAxBq9W,EAAMn/Q,eACNvrG,EAAWlU,KAAK6+X,oBAAoB7+X,KAAK26X,cAAe36X,KAAK46X,cAAe+D,EAAsB,MAAG3+X,KAAKw6X,WA5B9F,GA6BZ8D,EAAet+X,KAAK8+X,yBAAyBv9W,EAAOrN,EAASnH,EAAGmH,EAASlH,EAAGwvB,KAG5EtoB,EAAWlU,KAAK6+X,oBAAoB7+X,KAAK26X,cAAe36X,KAAK46X,cAAe+D,EAAsB,MAAG3+X,KAAKw6X,WAhC9F,GAiCZ8D,EAAet+X,KAAK++X,wBAAwBx9W,EAAOrN,EAASnH,EAAGmH,EAASlH,EAAGwvB,IAE/Ex8B,KAAKy4X,iBAAiBt8X,GAAW,OAAI6D,KAAKo+X,gBAAgB/qX,EAAOmpB,EAAU8hW,EAAavxX,EAAGuxX,EAAatxX,GACrE,SAA/B4xX,EAAMl8D,qBAAiC,CAGvCq7D,GADAD,EADW99X,KAAKy4X,iBAAiBt8X,GACC,OAAU,QACX,MACjCqiY,EAAYV,EAAuB,OACnCE,EAAOF,EAAkB,EACzBS,EAAOT,EAAkB,EACzB,IAAK,IAAIv6W,EAAI,EAAGA,EAAIpnB,EAAGonB,IAGnB26W,GADAD,EADWj+X,KAAKy4X,iBAAiBl1W,GACC,OAAU,QACX,MACjCm7W,EAAYT,EAAuB,OACnCE,EAAOF,EAAkB,EACzBQ,EAAOR,EAAkB,EACpBE,GAAQH,EAAOD,GAAcC,GAAQG,EAAOD,GAAcO,GAAQF,EAAOC,GACtED,GAAQE,EAAOC,IACnBrrX,EAAQ,KAIpB,IAAIgrX,GAA6B5xW,KAAMpZ,EAAMnG,WAAYH,EAAGuxX,EAAavxX,EACrEC,EAAGsxX,EAAatxX,EAAGyqB,KAAM,kBAAmBoB,QAAQ,GACxDkK,EAAWvc,QAAQ,kBAAmB63W,GACtC,IACIr9X,EAAUuiC,GADA,IAAIhN,GAAWwM,EAAW/hC,QAAQsC,GAAK,WAAanH,EAAGkiY,EAAyBtxX,EAAGsxX,EAAyBrxX,EAAG,OAAQqxX,EAAyB5xW,MACrHC,EAAMqW,EAAW1M,WAAWrH,UAAWksT,GAChFA,EAASv5U,YAAYX,GAEzB+hC,EAAWzR,UAAU3vB,YAAYu5U,IAErCm9C,EAAWh9X,UAAU+iY,gBAAkB,SAAU/qX,EAAOmpB,EAAUwiW,EAAeC,GACrD,IAAIhK,GAG5B,OADsBv+V,QADP3pB,EAAGiyX,EAAehyX,EAAGiyX,EAAejpX,MAAOwmB,EAASxmB,MAAOD,OAAQymB,EAASzmB,QACrDo3U,UAAW95U,IAGrDglX,EAAWh9X,UAAUm+X,sBAAwB,SAAUz2V,GACnD,IACIqgQ,EACApiS,EACA+b,EAHAqS,EAAgB2T,EAAWk2V,eAAe7uD,eAI9ChnC,EAAergQ,EAAWlV,SAASw+C,aAAc/oE,GAAMy/B,EAAW/hC,QAAQsC,GAAK,sCAC/EyZ,EAAO/c,KAAK09X,uBAAuB19X,KAAKk/X,qBACxC,IAAIC,EAAiB,IAAI/oW,GAAW2M,EAAW/hC,QAAQsC,GAAK,gCAAiC,OAAQ8rB,EAAqB,MAAG2T,EAAW1M,WAAWjH,cAAeA,EAAuB,QAAGA,EAAyB,UAAGrS,GACxN/b,EAAU+hC,EAAWlV,SAASsI,SAASgpW,GACvC/7F,EAAazhS,YAAYX,GACzB+hC,EAAWzR,UAAU3vB,YAAYyhS,IAErCi1F,EAAWh9X,UAAUs+X,sBAAwB,SAAU52V,GACnD,IACIqgQ,EACApiS,EACA+b,EAHAqS,EAAgB2T,EAAWo2V,WAAW/uD,eAI1ChnC,EAAergQ,EAAWlV,SAASw+C,aAAc/oE,GAAMy/B,EAAW/hC,QAAQsC,GAAK,kCAC/EyZ,EAAO/c,KAAK09X,uBAAuB19X,KAAKo/X,oBACxC,IAAIC,EAAiB,IAAIjpW,GAAW2M,EAAW/hC,QAAQsC,GAAK,4BAA6B,OAAQ8rB,EAAqB,MAAG2T,EAAW1M,WAAWjH,cAAeA,EAAuB,QAAGA,EAAyB,UAAGrS,GACpN/b,EAAU+hC,EAAWlV,SAASsI,SAASkpW,GACvCj8F,EAAazhS,YAAYX,GACzB+hC,EAAWzR,UAAU3vB,YAAYyhS,IAErCi1F,EAAWh9X,UAAUqiY,uBAAyB,SAAU/lW,GAapD,IAAK,IAZDqD,EACAC,EACAC,EACAC,EAGAmkW,EAAc,IAAIxJ,GAIlByJ,EAAK,GAEApjY,EAAI,EAAGA,EAAIw7B,EAAOl7B,OAAQN,IAE/B6+B,GADAskW,EAAc3nW,EAAOx7B,IACJkpD,WAAWt4C,EAC5BkuB,EAAKqkW,EAAYj6U,WAAWr4C,EAC5BkuB,EAAKokW,EAAY9/U,SAASzyC,EAC1BouB,EAAKmkW,EAAY9/U,SAASxyC,EAM1BuyX,EAAKA,EAAM,KAAYvkW,EAAK,IAAMC,EAAK,OALlCqkW,EAAYxyW,KAAOwyW,EAAYxyW,KAAK9W,MAAQ,GAKa,KAJzDspX,EAAYxyW,KAAOwyW,EAAYxyW,KAAK/W,OAAS,GAIuB,KAHjEupX,EAAYvD,cAAgBuD,EAAYvD,cAAgB,GAIpD,KAHCuD,EAAYrD,WAAa,EAAI,GAGX,KAFvBqD,EAAYtD,eAAiBsD,EAAYtD,eAAiB,GAErB,IAAM9gW,EAAK,IAAMC,EAAK,IAGvE,OADOokW,EAAGryX,YAGdmrX,EAAWh9X,UAAUy+X,uBAAyB,SAAU/2V,GACpD,IAAIy4V,EACAC,EAGAQ,EACA52U,EACA7F,EACA1yB,EACAuB,EAEAvhB,EACAy9H,EACAjiG,EACAzK,EACA/e,EACA3c,EACAyK,EAbA8uX,KAMA56J,EAAW/9L,EAAWk2V,eAAe7uD,eAAetrT,MASxD9e,KAAKk/X,uBACLpyX,EAA6B,EAAlB9M,KAAKw6X,WAChB,IAAK,IAAIr+X,EAAI,EAAGA,EAAI6D,KAAKw4X,2BAA2B/7X,OAAS,EAAGN,IAAK,CACjEouI,EAAWvqI,KAAKw4X,2BAA2Br8X,GAC3CmsC,EAAOtoC,KAAKw4X,2BAA2Br8X,EAAI,GAG3CgG,GAFA07B,EAAgD,GAAvC0sG,EAAiB,OAAIjiG,EAAa,UAC3CxpB,EAAQzS,KAAK+S,MAAO0hN,EAAW,IAAOjjM,IAEtC,IAAK,IAAIta,EAAI,EAAGA,EAAIzE,EAAOyE,IACvB3W,EAAS07B,EAAa,OAAK/kB,EAAIphB,EAAY,EAG3CksB,GAFmC,cAA1B0U,EAAWu4V,WACft7X,KAAKy6X,YAAc3tX,EAAsB,EAATF,EAAc5M,KAAKy6X,aAC3C7tX,EACbqvX,EAAa3zV,EAAY,MAAI,EAC7BozV,EAAY17X,KAAK+8X,gCAAgCz0V,EAAY,OAC/B,cAA1BvF,EAAWu4V,YACXE,EAAeE,EAAU,GACzBD,EAAeC,EAAU,KAGzBF,EAAeE,EAAU,GACzBD,EAAeC,EAAU,IAE7Br2U,EAAarlD,KAAK87X,yBAAyBN,EAAa,GAAGx6W,QAASw6W,EAAa,GAAGv6W,QAASu6W,EAAa,GAAG5uX,OAAQyhB,EAAIk8G,EAAkB,QAAG39H,EAAQm2B,EAAWu4V,YACjK97U,EAAWx/C,KAAK87X,yBAAyBL,EAAa,GAAGz6W,QAASy6W,EAAa,GAAGx6W,QAASw6W,EAAa,GAAG7uX,OAAQyhB,EAAIk8G,EAAkB,QAAG39H,EAAQm2B,EAAWu4V,YAC/JxuW,GAAS9W,MAAOpJ,EAAQmJ,OAAQnJ,GAChC5M,KAAKk/X,oBAAoB16X,MACrB6gD,WAAYA,EACZ7F,SAAUA,EACVu8U,cAAe,EAAI1vX,KAAK+Q,GACxB4+W,eAA2C,cAA1Bj5V,EAAWu4V,WACxBt7X,KAAKw1B,UAA4B,iBAAIx1B,KAAKw1B,UAAqB,UACnEymW,WAAYA,EACZnvW,KAAMA,MAMtBurW,EAAWh9X,UAAU2+X,uBAAyB,SAAUj3V,GACpD,IACIy8V,EACAC,EAEAC,EACA9D,EACAnsS,EACAkwS,EACAC,EACAC,EACAt1P,EACAjiG,EACAxb,EACAutB,EACAv7B,EACA3c,EACA29X,EAhBAh/J,EAAW/9L,EAAWo2V,WAAW/uD,eAAetrT,MAiBpD2wE,EAAgBpjF,KAAK+Q,IAAwB,EAAlBpd,KAAKw6X,YAChCmF,EAAYH,EAAmC,cAA1Bz8V,EAAWu4V,WAC5Bt7X,KAAK26X,cAAgB36X,KAAKw6X,WAAax6X,KAAK26X,cAAgB36X,KAAKw6X,WACrEoF,EAAY5/X,KAAK46X,cACjB56X,KAAKo/X,sBACLS,GAAkB9yX,EAAG4yX,EAAW3yX,EAAG4yX,GACnC,IAAK,IAAIzjY,EAAI,EAAGA,EAAI6D,KAAKy4X,iBAAiBh8X,OAAS,EAAGN,IAAK,CACvDouI,EAAWvqI,KAAKy4X,iBAAiBt8X,GACjCmsC,EAAOtoC,KAAKy4X,iBAAiBt8X,EAAI,GACH,cAA1B4mC,EAAWu4V,YACXmE,EAA8B,MAAlBn3V,EAAY,MAAY,EAAIA,EAAY,MACpDo3V,EAAerzX,KAAKE,IAAIkzX,EAAYl1P,EAAgB,SAGpDk1P,EAAkC,MAAtBl1P,EAAgB,MAAY,EAAIA,EAAgB,MAC5Dm1P,EAAerzX,KAAKE,IAAIkzX,EAAYn3V,EAAY,QAEpD+R,EAAYo1C,EAAgB,IAAOiwS,EAEnCv9X,EAAWu9X,GADX5gX,EAAQzS,KAAK+S,MAAO0hN,EAAW,IAAOzmL,IAEtCylV,EAAcx3V,EAAY,MAAI,EAAIA,EAAY,MAAIiiG,EAAgB,MAClEqxP,EAAc57X,KAAK+/X,gCAAgC1zX,KAAKE,IAAIuzX,IAC5D,IAAK,IAAIv8W,EAAI,EAAGA,EAAIzE,EAAOyE,IAAK,CAC5B,IAAI+4W,EAAwBn6X,EAAWohB,GAA4B,MAAtBgnH,EAAgB,MAAYk1P,EAAYl1P,EAAgB,OACjG8xP,EAAsBr8X,KAAK6+X,oBAAoB7+X,KAAK26X,cAAe36X,KAAK46X,cAAe0B,EAAsBt8X,KAAKw6X,YAClH5tX,EAAS5M,KAAK8lC,UAAU+5V,EAAexD,EAAqBC,GAC5Df,EAAQe,EAAuB,IAAMt8X,KAAK46X,cAAgBhuX,EAAS5M,KAAK46X,cAAgBhuX,EACxFwvX,EAAsBp8X,KAAK87X,yBAAyB0D,EAAOjE,EAAO3uX,EAAQgvX,EAAY,GAAG56W,QAAS46W,EAAY,GAAG36W,QAAS26W,EAAY,GAAGhvX,OAAQm2B,EAAWu4V,YAC5Jj2U,GAAet4C,EAAGqvX,EAAoBrvX,EAAGC,EAAGovX,EAAoBpvX,GAChEwyC,GAAazyC,EAAGsvX,EAAoBtvX,EAAGC,EAAGqvX,EAAoBrvX,GAClE8f,GAAS9W,MAAOpJ,EAAQmJ,OAAQnJ,GAChC,IAAIovX,EAAiBzxP,EAAgB,OAAK,EAAIvqI,KAAKw1B,UAAqB,UAAIx1B,KAAKw1B,UAA4B,iBAC7Gx1B,KAAKo/X,mBAAmB56X,MACpB6gD,WAAYA,EACZ7F,SAAUA,EACVu8U,cAAe,EAAI1vX,KAAK+Q,GACxB4+W,eAAgBA,EAChBC,YAAY,EACZnvW,KAAMA,OAMtBurW,EAAWh9X,UAAU0kY,gCAAkC,SAAUD,GAC7D,IACIE,EAcJ,OAZIA,EADAF,GAAe,EACJ,GAENA,GAAe,IACT,GAENA,GAAe,GACT,EAGA,EAED9/X,KAAKw4X,2BAA2BxxV,OAAO,SAAUi3B,GAAK,OAAOA,EAAS,QAAM+hU,KAG9F3H,EAAWh9X,UAAUwjY,oBAAsB,SAAUxwW,EAAIC,EAAI/M,EAAOqb,GAChE,IAAI2lS,EACAmH,EACA/1S,EAIJ,OAHAA,EAASpS,GAASlV,KAAK+Q,GAAK,KAC5BmlT,EAASl0S,EAAKuO,EAAIvwB,KAAKoV,IAAIkS,GAC3B+1S,EAASp7S,EAAKsO,EAAIvwB,KAAKqV,IAAIiS,IAClB5mB,EAAGw1T,EAAQv1T,EAAG08T,IAE3B2uD,EAAWh9X,UAAU0jY,wBAA0B,SAAUx9W,EAAO0+W,EAAIC,EAAI1jW,GACpE,IAAIzvB,EAAIkzX,EACJjzX,EAAIkzX,EAgER,OA/Dc,IAAV3+W,GAAyB,MAAVA,GACfxU,GAAKyvB,EAASxmB,MACdhJ,GAAKwvB,EAASzmB,OAAS,GAER,KAAVwL,GACLxU,GAAKyvB,EAASxmB,MACdhJ,GAAKwvB,EAASzmB,OAAS,GAER,MAAVwL,EACLvU,GAAKwvB,EAASzmB,OAEC,MAAVwL,EACLvU,GAAKwvB,EAASzmB,OAAS,EAElBwL,EAAQ,GAAKA,GAAS,GAC3BxU,GAAMyvB,EAAc,MAEfjb,EAAQ,IAAMA,GAAS,IAC5BxU,GAAMyvB,EAASxmB,MAAQwmB,EAASxmB,MAAQ,EACxChJ,GAAKwvB,EAASzmB,OAAS,GAElBwL,EAAQ,IAAMA,EAAQ,IAC3BxU,GAAMyvB,EAASxmB,MAAQwmB,EAASxmB,MAAQ,EACxChJ,GAAKwvB,EAASzmB,OAAS,GAElBwL,EAAQ,IAAMA,GAAS,KAC5BxU,GAAMyvB,EAASxmB,MAAQ,EACvBhJ,GAAMwvB,EAAe,OAAI,IAEpBjb,EAAQ,KAAOA,GAAS,KAC7BxU,GAAMyvB,EAASxmB,MAAQ,EACvBhJ,GAAMwvB,EAASzmB,OAAS,GAEnBwL,EAAQ,KAAOA,EAAQ,KAC5BxU,GAAMyvB,EAASxmB,MAAQ,EACvBhJ,GAAMwvB,EAAe,QAEhBjb,EAAQ,KAAOA,GAAS,KAC7BxU,GAAMyvB,EAASxmB,MAAQ,EACvBhJ,GAAMwvB,EAASzmB,OAAS,GAEnBwL,EAAQ,KAAOA,EAAQ,IAC5BvU,GAAMwvB,EAASzmB,OAAS,EAEnBwL,EAAQ,KAAOA,EAAQ,IAC5BvU,GAAMwvB,EAASzmB,OAAS,EAEnBwL,EAAQ,KAAOA,GAAS,KAC7BxU,GAAMyvB,EAASxmB,MAAQwmB,EAASxmB,MAAQ,EACxChJ,GAAMwvB,EAASzmB,OAAS,GAEnBwL,EAAQ,KAAOA,GAAS,KAC7BxU,GAAMyvB,EAASxmB,MAAQwmB,EAASxmB,MAAQ,EACxChJ,GAAMwvB,EAASzmB,OAAS,GAEnBwL,EAAQ,KAAOA,GAAS,KAC7BxU,GAAMyvB,EAASxmB,MAAQwmB,EAASxmB,MAAQ,EACxChJ,GAAKwvB,EAASzmB,OAAS,GAElBwL,EAAQ,MACbxU,GAAKyvB,EAASxmB,MACdhJ,GAAKwvB,EAASzmB,OAAS,IAElBhJ,EAAGA,EAAGC,EAAGA,IAEtBqrX,EAAWh9X,UAAUyjY,yBAA2B,SAAUv9W,EAAO0+W,EAAIC,EAAI1jW,GACrE,IAAIzvB,EAAIkzX,EACJjzX,EAAIkzX,EAoDR,OAnDc,KAAV3+W,GACAxU,GAAKyvB,EAASxmB,MAAQ,EACtBhJ,GAAKwvB,EAASzmB,QAEC,MAAVwL,GACLxU,GAAMyvB,EAASxmB,MAAQ,EACvBhJ,GAAKwvB,EAASzmB,OAAS,GAER,MAAVwL,GACLxU,GAAKyvB,EAASxmB,MAAQ,EACtBhJ,GAAKwvB,EAASzmB,OAAS,GAER,MAAVwL,GACLxU,GAAK,EACLC,GAAKwvB,EAASzmB,OAAS,GAElBwL,EAAQ,GAAKA,GAAS,IAC3BxU,GAAKyvB,EAASxmB,MAAQ,EACtBhJ,GAAKwvB,EAASzmB,OAAS,GAElBwL,EAAQ,IAAMA,GAAS,IAC5BxU,GAAKyvB,EAASxmB,MAAQ,EACtBhJ,GAAKwvB,EAASzmB,OAAS,GAElBwL,EAAQ,IAAMA,GAAS,IAC5BxU,GAAKyvB,EAASxmB,MAAQ,EACtBhJ,GAAKwvB,EAASzmB,QAETwL,EAAQ,IAAMA,GAAS,KAC5BxU,GAAKyvB,EAASxmB,MACdhJ,GAAKwvB,EAASzmB,QAETwL,EAAQ,KAAOA,GAAS,KAC7BxU,GAAMyvB,EAASxmB,MAAQwmB,EAASxmB,MAAQ,EACxChJ,GAAKwvB,EAASzmB,OAAS,GAElBwL,EAAQ,KAAOA,GAAS,KAC7BxU,GAAKyvB,EAASxmB,MAAQwmB,EAASxmB,MAAQ,EACvChJ,GAAKwvB,EAASzmB,OAAS,GAElBwL,EAAQ,KAAOA,GAAS,KAC7BxU,GAAKyvB,EAASxmB,MACdhJ,GAAKwvB,EAASzmB,OAAS,GAElBwL,EAAQ,KAAOA,GAAS,IAC7BvU,GAAKwvB,EAASzmB,OAAS,EAElBwL,EAAQ,MACbvU,GAAKwvB,EAASzmB,OAAS,EACvBhJ,GAAKyvB,EAASxmB,MAAQ,IAEjBjJ,EAAGA,EAAGC,EAAGA,IAEtBqrX,EAAWh9X,UAAUyqC,UAAY,SAAUuf,EAAY7F,EAAUj+B,GAC7D,IAAI4+W,EACAC,EACAp3Q,EACAh6E,EACA1gB,EAEAqF,EAQJ,OAPAA,EAASpS,EAAQ,IAAO,GAAKlV,KAAK+Q,GAAK,IAAQ,IAAM/Q,KAAK+Q,GAAK,IAC/D+iX,GAAM3gV,EAASzyC,EAAIs4C,EAAWt4C,GAAK,EACnCqzX,GAAM5gV,EAASxyC,EAAIq4C,EAAWr4C,GAAK,EACnCg8G,GAAK38G,KAAKoV,IAAIkS,GAAUysW,EAAK/zX,KAAKqV,IAAIiS,GAAUwsW,IAAO9zX,KAAKoV,IAAIkS,GAAUwsW,EAAK9zX,KAAKqV,IAAIiS,GAAUysW,GAClGpxV,GAAKoxV,EAAKD,EAAKn3Q,GAAK38G,KAAKqV,IAAIiS,GAC7BrF,EAAK+2B,EAAWr4C,EAAIX,KAAKqV,IAAIiS,GAAUqb,EAC9B3iC,KAAKE,IAAI84C,EAAWr4C,EAAIshB,IAG9B+pW,KCxhCPjjD,GAAwB,WACxB,SAASA,KAsFT,OApFAA,EAAO/5U,UAAU2nS,WAAa,SAAUjgQ,EAAYs9V,EAAaj9F,EAAck9F,GAC3E,GAAIv9V,EAAWnkB,OAAOyhX,GAAavzD,OAAOt1S,QAAS,CAC/C,IAAIs1S,EAAS/pS,EAAWnkB,OAAOyhX,GAAavzD,OACxChuT,EAAQikB,EAAWnkB,OAAOyhX,GAAa1oW,OAAOl7B,OAAS,EACvDuZ,EAAQ82T,EAAO92T,MACfD,EAAS+2T,EAAO/2T,OAChBgyQ,EAAa+kD,EAAOn/S,MACpB4yW,EAAQx9V,EAAWlV,SAASw+C,aAAc/oE,GAAMy/B,EAAW/hC,QAAQsC,GAAK,cACxD+8X,EAAc,YAClCj9F,EAAazhS,YAAY4+X,GAMzB,IAAK,IALD9xS,EAAcq+O,EAAOxoS,OAAOtuB,MAC5Bm/T,EAAcrI,EAAOxoS,OAAO9N,MAC5B/oB,EAAUq/T,EAAOr/T,QACjBmwB,EAAOkvS,EAAOlvS,KAAOkvS,EAAOlvS,KAAQmF,EAAWnkB,OAAOyhX,GAAaziW,MACnEmF,EAAWy9V,aAAaH,EAAct9V,EAAWy9V,aAAa/jY,QACzDN,EAAI,EAAGA,EAAI2iB,EAAQ,EAAG3iB,IAAK,CAChC,IAAI82P,EAAaqtI,EAAankY,GAAU,MACpCi8B,EAAaj8B,EACb6W,EAAU,IAAIuiX,GAAcxyV,EAAW/hC,QAAQsC,GAAK,UAAY+8X,EAAc,UAAYjoW,EAAa,UAAYA,EAAYwF,EAAMu3S,EAAa1mP,EAAahhF,GACnK8yX,EAAM5+X,YAAY3B,KAAKytB,WAAWs6P,EAAY+kD,EAAOh2I,SAAUm8D,EAAY,IAAIjwN,GAAehtB,EAAOD,GAAS/C,EAAS+vB,OAInIqyS,EAAO/5U,UAAUoyB,WAAa,SAAUs6P,EAAYn6P,EAAKF,EAAUZ,EAAM9Z,EAAS+vB,GAC9E,IAAIkpC,EAEAw0T,EACA9wC,EACA5yU,EAHA4Q,EAAQo6P,EAAWnyQ,cAInB0uB,GAAW9N,MAAOxjB,EAAqB,YAAGgD,MAAOhD,EAAqB,aACtEvF,EAAUuF,EAAQvF,QAClBoxB,EAASnR,EAAS3gB,EAClB+xB,EAASpR,EAAS1gB,EAClBJ,EAASP,KAAKQ,KAAKigB,EAAK/W,OAAS+W,EAAK/W,OAAS+W,EAAK9W,MAAQ8W,EAAK9W,OAAS,EAC9E,OAAQ2X,GACJ,IAAK,SACD8yW,EAAgB,IAAIt8D,GAAanxT,EAAY,GAAGA,EAAc,KAAGsxB,EAAQ72B,EAASigB,EAAS3gB,EAAG2gB,EAAS1gB,EAAGJ,EAAQ,MAClHq/D,EAAYlpC,EAAWlV,SAAS6V,WAAW+8V,GAC3C,MACJ,IAAK,YACD1jX,EAAO,MAAa8hB,GAAW/R,EAAK9W,MAAQ,GAAM,KAAO8oB,GAAWhS,EAAK/W,OAAS,GAC9E,OAAmB8oB,EAAU/R,EAAK9W,MAAQ,GAAM,KAAO8oB,GAAWhS,EAAK/W,OAAS,GAAM,OACzE8oB,EAAU/R,EAAK9W,MAAQ,GAAM,KAAO8oB,EAAUhS,EAAK/W,OAAS,GACzE,OAAmB8oB,GAAW/R,EAAK9W,MAAQ,GAC3C,KAAO8oB,EAAUhS,EAAK/W,OAAS,GAAM,OACpC8oB,GAAW/R,EAAK9W,MAAQ,GAAM,KAAO8oB,GAAWhS,EAAK/W,OAAS,GAAM,IACzE45U,EAAc,IAAIv5T,GAAWpjB,EAAY,GAAGA,EAAc,KAAGsxB,EAAOtuB,MAAOsuB,EAAO9N,MAAO/oB,EAAS,GAAIsP,GACtGkvD,EAAYlpC,EAAWlV,SAASsI,SAASw5T,GACzC,MACJ,IAAK,WACD5yU,EAAO,MAAa8hB,GAAW/R,EAAK9W,MAAQ,GAAM,KAAO8oB,EAAUhS,EAAK/W,OAAS,GAAM,QAA6B,KAC/G+oB,GAAWhS,EAAK/W,OAAS,GAAM,OAAmB8oB,EAAU/R,EAAK9W,MAAQ,GAAM,KAC/E8oB,EAAUhS,EAAK/W,OAAS,GAAM,OAC9B8oB,GAAW/R,EAAK9W,MAAQ,GAAM,KAAO8oB,EAAUhS,EAAK/W,OAAS,GAAM,IACxE45U,EAAc,IAAIv5T,GAAWpjB,EAAY,GAAGA,EAAc,KAAGsxB,EAAOtuB,MAAOsuB,EAAO9N,MAAO/oB,EAAS,GAAIsP,GACtGkvD,EAAYlpC,EAAWlV,SAASsI,SAASw5T,GACzC,MACJ,IAAK,UACD5yU,EAAO,MAAa8hB,GAAW/R,EAAK9W,MAAQ,GAAM,MAAiB,QACpD,KAAO8oB,GAAWhS,EAAK/W,OAAS,GAAM,OAAmB8oB,EAAU/R,EAAK9W,MAAQ,GAAM,MACtF,QAA6B,KAAO8oB,EAAUhS,EAAK/W,OAAS,GAAM,OAC5E8oB,GAAW/R,EAAK9W,MAAQ,GAAM,MAAiB,IACpD25U,EAAc,IAAIv5T,GAAWpjB,EAAY,GAAGA,EAAc,KAAGsxB,EAAOtuB,MAAOsuB,EAAO9N,MAAO/oB,EAAS,GAAIsP,GACtGkvD,EAAYlpC,EAAWlV,SAASsI,SAASw5T,GACzC,MACJ,IAAK,WAED,IAAK,IAAIxzV,EAAI,EAAGA,GAAK,EAAGA,IAAK,CACzB,IAAIqyB,EAAS5hB,EAASP,KAAKoV,IAAKpV,KAAK+Q,GAAK,KAFrC,GAE6CjhB,IAC9CsyB,EAAS7hB,EAASP,KAAKqV,IAAKrV,KAAK+Q,GAAK,KAHrC,GAG6CjhB,IAE9C4gB,EADM,IAAN5gB,EACO,MAAa0iC,EAASrQ,GAAU,KAAOsQ,EAASrQ,GAAU,IAG1D1R,EAAKxC,OAAO,MAAaskB,EAASrQ,GAAU,KAAOsQ,EAASrQ,GAAU,KAGrF1R,EAAOA,EAAKxC,OAAO,KACnBo1U,EAAc,IAAIv5T,GAAWpjB,EAAY,GAAGA,EAAc,KAAGsxB,EAAOtuB,MAAOsuB,EAAO9N,MAAO/oB,EAAS,GAAIsP,GACtGkvD,EAAYlpC,EAAWlV,SAASsI,SAASw5T,GAGjD,OAAO1jR,GAEJmpQ,KCjFPw7B,GAA2B,WAC3B,SAASA,IACL5wW,KAAKikC,eACLjkC,KAAK0gY,gBACL1gY,KAAK2gY,aAsPT,OApPA/vB,EAAUv1W,UAAUulY,cAAgB,SAAU79V,EAAYs9V,EAAaj9F,EAAck9F,EAAc5pW,GAC/F12B,KAAKikC,eACLjkC,KAAK2gY,aAWL,IAAK,IATDvoW,EAEA8zB,EACAuzD,EACA0tO,EACA3wT,EANAC,EAASsG,EAAWtG,OAEpBqwS,EAAS/pS,EAAWnkB,OAAOyhX,GAAavzD,OAKxC7rP,EAAY6rP,EAAO7rP,UACnBv0D,EAAOu0D,EAAUmjN,UACjBtlR,EAAQwhX,EAAa7jY,OAChBN,EAAI,EAAGA,EAAI2iB,EAAO3iB,IAAK,CAE5BqgC,EAAWhQ,GADX2gU,EAAYpqT,EAAWnkB,OAAOyhX,GAAa1oW,OAAOx7B,GAAG0kY,UAAU3zX,WAC7Bwf,GAElC,IAAIo0W,GADJ50U,EAASo0U,EAAankY,GAAU,OACd4Q,EAAIyvB,EAASxmB,MAAQ,EACnC+qX,EAAO70U,EAAOl/C,GAAKwvB,EAASzmB,OAAS+2T,EAAe,OAAKrwS,EAAU,KACnEzmB,EAAQwmB,EAASxmB,MAASymB,EAAOjwB,KAAO,EAAMiwB,EAAOhwB,MAAQ,EAC7DsJ,EAASymB,EAASzmB,OAAU0mB,EAAO/vB,IAAM,EAAM+vB,EAAO9vB,OAAS,EACnEyrB,EAAaj8B,EACbsjH,EAAgB,IAAI+1Q,GACpB/1Q,GAAkB6lP,MAAOw7B,EAAQrkW,EAAOjwB,KAAO,EAAIw0X,MAAOD,EAAQhrX,EAAS,EAAK0mB,EAAO/vB,IAAM,EAAGK,EAAG+zX,EAAM9zX,EAAG+zX,GAC5G/gY,KAAKikC,YAAY9nC,IACbmH,GAAIy/B,EAAW/hC,QAAQsC,GAAK,UAAY+8X,EAAc,UAAYjoW,EAAa,yBAAgCj8B,EAC/G4Q,EAAG0yG,EAAqB,MACxBzyG,EAAGyyG,EAAqB,MACxB7hF,KAAM,QACNnR,KAAM0gU,EACNzgU,KAAMA,EACN+5C,UAAWq6T,EACXp6T,UAAWq6T,EACX/qX,MAAOA,EACPD,OAAQA,EACR2X,SAAUw+B,EACVw0U,aAAcjhR,EACdjoF,SAAS,EACTypW,cAAe,MAGvB,IAAIC,EAAc,IAAIrL,GACtBqL,EAAYj9V,YAAcjkC,KAAKikC,YAC/BjkC,KAAK0gY,aAAal8X,KAAK08X,GACvBlhY,KAAKmhY,oBAAoBp+V,EAAYs9V,EAAap/S,EAAWmiN,EAAc1sQ,EAAQ4pW,IAEvF1vB,EAAUv1W,UAAU+lY,qBAAuB,SAAUzpW,EAAQslS,GAGzD,IAAK,IAFDxgU,EAASk7B,EAAoB,YAAEl7B,OAE1B0pB,EAAI,EAAGA,EAAI1pB,EAAQ0pB,IACxBnmB,KAAK2gY,UAAU3gY,KAAK2gY,UAAUlkY,QAAUk7B,EAAoB,YAAExR,GAC9DnmB,KAAKihY,eAAgB,EACrBjhY,KAAKqhY,kBAAkBl7W,EAAGwR,EAJlB,EAIiCslS,GACzCj9T,KAAK0gY,aAAazjE,GAA0B,YAAE92S,GAAKwR,EAAoB,YAAExR,GACzEnmB,KAAK0gY,aAAazjE,GAA0B,YAAE92S,GAAG86W,cAAgBjhY,KAAKihY,eAG9ErwB,EAAUv1W,UAAUgmY,kBAAoB,SAAUllY,EAAGw7B,EAAQ7Y,EAAOiyD,GAMhE,IAAK,IAFDnwC,EACAwtV,EAJA3xX,EAASuD,KAAK2gY,UAAUlkY,OAKnB8mB,EAAI,EAAGA,EAAI9mB,EAAQ8mB,IAIxB,GAHA6qW,EAAYpuX,KAAK2gY,UAAUp9W,GAC3Bqd,EAAe5gC,KAAK2gY,UAAUlkY,EAAS,GAC7BuD,KAAK0X,UAAU02W,EAAWxtV,GAGhC,OADA5gC,KAAKihY,eAAgB,EACbniX,GACJ,KAAK,EAED9e,KAAKshY,YAAY1gW,GACjB5gC,KAAKouX,UAAYA,EACjBxtV,EAAwB,UAAI5gC,KAAKouX,UAAqB,WAAKpuX,KAAKouX,UAAiB,MAAI,EACjFxtV,EAAoB,MAAI,EAhB9B,IAiBEA,EAAgB,EAAIA,EAAwB,UAAIw4B,EAChDt6C,GAAS,EACT9e,KAAKqhY,kBAAkBllY,EAAGw7B,EAAQ7Y,EAAOiyD,GACzC,MACJ,KAAK,EAED/wE,KAAKshY,YAAY1gW,GACjBA,EAAwB,UAAI5gC,KAAKouX,UAAqB,UAAIpuX,KAAKouX,UAAiB,MAAI,EAChFxtV,EAAoB,MAAI,EAzB9B,GA0BEA,EAAgB,EAAIA,EAAwB,UAAIw4B,EAChDx4B,EAAwB,UAAIA,EAAuB,SAAE5zB,EAAI4zB,EAAqB,OAAI,EAAIw4B,EACtFx4B,EAAgB,EAAIA,EAAwB,UAAMA,EAAqB,OAAI,EAAMw4B,EACjFt6C,GAAS,EACT9e,KAAKqhY,kBAAkBllY,EAAGw7B,EAAQ7Y,EAAOiyD,GACzC,MACJ,KAAK,EAED/wE,KAAKshY,YAAY1gW,GACjBA,EAAwB,UAAIA,EAAuB,SAAE5zB,EAAI4zB,EAAqB,OAAI,EAAIw4B,EACtFx4B,EAAgB,EAAIA,EAAwB,UAAKA,EAAqB,OAAI,EAAKw4B,EAC/Et6C,GAAS,EACT9e,KAAKqhY,kBAAkBllY,EAAGw7B,EAAQ7Y,EAAOiyD,GACzC,MACJ,KAAK,EAED/wE,KAAKshY,YAAY1gW,GACjBA,EAAwB,UAAI5gC,KAAKouX,UAAqB,UAAIpuX,KAAKouX,UAAiB,MAAI,EAC9ExtV,EAAoB,MAAI,EA5ChC,GA6CEA,EAAgB,EAAIA,EAAwB,UAAIw4B,EAChDx4B,EAAwB,UAAIA,EAAqB,OAAI,EAAIA,EAAuB,SAAE5zB,EAAIosD,EACtFx4B,EAAgB,EAAIA,EAAwB,UAAMA,EAAqB,OAAI,EAAMw4B,EACjFt6C,GAAS,EACT9e,KAAKqhY,kBAAkBllY,EAAGw7B,EAAQ7Y,EAAOiyD,GACzC,MACJ,KAAK,EAED/wE,KAAKshY,YAAY1gW,GACjBA,EAAwB,UAAK5gC,KAAKouX,UAAqB,UAAIpuX,KAAKouX,UAAiB,MAAI,EACjFxtV,EAAoB,MAAI,EAvD9B,GAwDEA,EAAgB,EAAIA,EAAwB,UAAIw4B,EAChDt6C,GAAS,EACT9e,KAAKqhY,kBAAkBllY,EAAGw7B,EAAQ7Y,EAAOiyD,GACzC,MACJ,KAAK,EAED/wE,KAAKshY,YAAY1gW,GACjBA,EAAwB,UAAI5gC,KAAKouX,UAAqB,UAAIpuX,KAAKouX,UAAiB,MAAI,EAChFxtV,EAAoB,MAAI,EAhE9B,GAiEEA,EAAgB,EAAIA,EAAwB,UAAIw4B,EAChDx4B,EAAwB,UAAI5gC,KAAKouX,UAAqB,UAAIxtV,EAAqB,OAlEjF,GAmEEA,EAAgB,EAAIA,EAAwB,UAAIA,EAAqB,OAAI,EAAIw4B,EAC7Et6C,GAAS,EACT9e,KAAKqhY,kBAAkBllY,EAAGw7B,EAAQ7Y,EAAOiyD,GACzC,MACJ,KAAK,EAED/wE,KAAKshY,YAAY1gW,GACjBA,EAAwB,UAAK5gC,KAAKouX,UAAsB,WAAKxtV,EAAqB,OA1EpF,IA2EEA,EAAgB,EAAIA,EAAwB,UAAKA,EAAqB,OAAI,EAAKw4B,EAC/Et6C,GAAS,EACT9e,KAAKqhY,kBAAkBllY,EAAGw7B,EAAQ7Y,EAAOiyD,GACzC,MACJ,KAAK,EAED/wE,KAAKshY,YAAY1gW,GACjBA,EAAwB,UAAI5gC,KAAKouX,UAAqB,UAAIpuX,KAAKouX,UAAiB,MAAI,EAChFxtV,EAAoB,MAAI,EAnF9B,GAoFEA,EAAgB,EAAIA,EAAwB,UAAIw4B,EAChDx4B,EAAwB,UAAI5gC,KAAKouX,UAAqB,UAAIxtV,EAAqB,OArFjF,GAsFEA,EAAgB,EAAIA,EAAwB,UAAKA,EAAqB,OAAI,EAAKw4B,EAC/Et6C,GAAS,EACT9e,KAAKqhY,kBAAkBllY,EAAGw7B,EAAQ7Y,EAAOiyD,GACzC,MACJ,KAAK,EACDjyD,EAAQ,EACR9e,KAAKqhY,kBAAkBllY,EAAGw7B,EAAQ7Y,EAAOiyD,KAM7D6/R,EAAUv1W,UAAUqc,UAAY,SAAU6pX,EAAYC,GAClD,IAAIlzV,GAAQ,EAOZ,OANIizV,IAAeC,IACflzV,IAAYizV,EAAc,EAAIA,EAAmB,OAAMC,EAAe,GACjED,EAAc,EAAKC,EAAc,EAAIA,EAAmB,QACvDD,EAAc,EAAIA,EAAkB,MAAI,EAAKC,EAAc,EAAIA,EAAkB,MAAI,GACtFD,EAAc,EAAIA,EAAkB,MAAI,EAAKC,EAAc,EAAIA,EAAkB,MAAI,IAEvFlzV,GAEXsiU,EAAUv1W,UAAUimY,YAAc,SAAUjvW,GACxCA,EAAwB,UAAIA,EAA2B,aAAK,EAC5DA,EAAwB,UAAIA,EAA2B,aAAK,EAC5DA,EAAgB,EAAIA,EAA2B,aAAS,MACxDA,EAAgB,EAAIA,EAA2B,aAAS,OAE5Du+U,EAAUv1W,UAAUomY,mBAAqB,SAAU1+V,EAAYk6R,EAAahrT,EAAOogB,EAAc+wQ,GAClF/wQ,EAAwB,UACxBA,EAAwB,UADnC,IAGIy4S,EADAp9S,EAAW2E,EAAuB,SAGlCy4S,EADAp9S,EAAS1gB,EAAIqlB,EAAgB,EACrBA,EAAiB,EAGjBA,EAAgB,EAAIA,EAAqB,OAAI,EAEzD,IAAIqvW,EAAqB,KAAah0W,EAAU,EAAI,IAAOA,EAAU,EAAI,MACpE2E,EAAiB,EAAI,MACtBsvW,EAAsB5+V,EAAWnkB,OAAOq+S,GAAa6P,OAAO7rP,UAAU2gT,cACtE9jW,EAAS6jW,EAAoBnrW,MAAQmrW,EAAoBnrW,MACxDuM,EAAWnkB,OAAOq+S,GAAar/R,MAC5BmF,EAAWy9V,aAAavjE,EAAcl6R,EAAWy9V,aAAa/jY,QAClEuW,EAAU,IAAIojB,GAAW2M,EAAW/hC,QAAQsC,GAAK,iCAAwC25T,EAAc,SAAWhrT,EAAO,OAAQ0vX,EAAoB3rX,MAAO8nB,EAAQ,EAAG,OAAQ4jW,GAC/K1gY,EAAU+hC,EAAWlV,SAASsI,SAASnjB,GAC3CowR,EAAazhS,YAAYX,IAE7B4vW,EAAUv1W,UAAU8lY,oBAAsB,SAAUp+V,EAAYs9V,EAAap/S,EAAWmiN,EAAc1sQ,EAAQ4pW,GAC1G,IAAK,IAAInkY,EAAI,EAAGA,EAAI4mC,EAAWnkB,OAAOyhX,GAAa1oW,OAAOl7B,OAAQN,IAC9D,GAAI8kF,EAAUhyE,SAAU,CACpB,IAAI4yX,EAAuB1gY,EAAc,OACrCmC,GAAIy/B,EAAW/hC,QAAQsC,GAAK,gBAAkB+8X,EAAc,wBAC5Dh9X,UAAW,WACXE,OAAQ,wBAMZ/C,SAASosB,eAAemW,EAAW/hC,QAAQsC,GAAK,sBAAsB3B,YAAYkgY,GAClF,IACI76W,OAAe,EACf1jB,EAAK29E,EAAUhyE,SAAW,eAAiBoxX,EAAc,cAAgBlkY,EAAI4mC,EAAW/hC,QAAQsC,GAChG9G,GAASs3B,MAAOiP,EAAWnkB,OAAOyhX,GAAa1oW,OAAOx7B,GAAG0kY,WAG7D75W,EAAekc,GAFFnJ,GAAoBknD,EAAUhyE,SACrB+qB,CAAW+I,GACuBz/B,EAAI9G,GAC5DqlY,EAAqBlgY,YAAYqlB,GACjCA,EAAatiB,MAAM8H,KAAO8zX,EAAankY,GAAG23B,MAAM/mB,EAAIia,EAAapiB,YAAc,EAAI,KACnFoiB,EAAatiB,MAAMgI,IAAM4zX,EAAankY,GAAG23B,MAAM9mB,EAAIga,EAAa0qB,aAC5D3O,EAAWnkB,OAAOyhX,GAAavzD,OAAO/2T,OAAS,EAAI,KACvD,IAAIvJ,EAAOuoB,SAAS/N,EAAatiB,MAAM8H,KAAM,IACzCq0C,EAAQ9rB,SAAS/N,EAAatiB,MAAMgI,IAAK,IACzCsJ,EAAQgR,EAAapiB,YACrBmR,EAASiR,EAAa0qB,aACtBwa,EAASo0U,EAAankY,GAAU,MAChCsjH,GAAkB6lP,MAAO94V,EAAMw0X,MAAOngV,EACtC9zC,EAAGP,EAAMQ,EAAG6zC,GAChB7gD,KAAK0gY,aAAaL,GAA0B,YAAElkY,IAC1CmH,GAAIA,EACJyJ,EAAGP,EACHQ,EAAG6zC,EACHjjB,KAAM,QACNnR,KAAM,GACNC,KAAMu0D,EAAUmjN,UAChB39N,UAAWj6D,EACXk6D,UAAW7lB,EACX7qC,MAAOA,EACPD,OAAQA,EACR2X,SAAUw+B,EACVw0U,aAAcjhR,EACdjoF,SAAS,EACTypW,cAAe,QAKxBrwB,KC3PPkxB,GAA8B,WAC9B,SAASA,IACL9hY,KAAKm3B,WACLn3B,KAAKowU,WACLpwU,KAAKsgY,gBACLtgY,KAAK+hY,gBACL/hY,KAAK0tB,YACL1tB,KAAKihF,UAAY,IAAI2vR,GA0PzB,OAxPAkxB,EAAazmY,UAAU0jF,YAAc,SAAUngE,GAC3C,IAAIu1N,EAAYv1N,EAAO2kD,WACnBy+T,EAAapjX,EAAOojX,WACpBnB,EAAYjiX,EAAOiiX,UACvBjiX,EAAO+Y,UACP,IAAK,IAAIx7B,EAAI,EAAGA,EAAIg4O,EAAU13O,OAAQN,IAClCyiB,EAAO+Y,OAAOnzB,MAAOw9X,WAAY7tJ,EAAUh4O,GAAG6lY,GAC1CnB,UAAW1sJ,EAAUh4O,GAAG0kY,MAIpCiB,EAAazmY,UAAU23P,KAAO,SAAUjwN,EAAYk/V,EAAYvrW,GAS5D,IAAK,IAPDwrW,EACAC,EAIAxD,EACA1sX,EAPAmxR,EAAergQ,EAAWlV,SAASw+C,aAAc/oE,GAAMy/B,EAAW/hC,QAAQsC,GAAK,2BAG/Esb,EAASmkB,EAAWnkB,OACpBktW,EAAeltW,EAAOniB,OACtB2lY,EAAkBH,EAAWzH,WAGxBzpT,EAAI,EAAGA,EAAI+6S,EAAc/6S,IAAK,CACnC,IAAIksP,EAAclsP,EACdnyD,EAAOmyD,GAAGxN,YAAc3kD,EAAOmyD,GAAGixT,YAAcpjX,EAAOmyD,GAAG8vT,WAC1D7gY,KAAK++E,YAAYngE,EAAOmyD,IAE5B/wE,KAAKsgY,aAAavvT,MAClB/wE,KAAK0tB,SAASqjD,MACd,IAAK,IAAIxtD,EAAI,EAAGA,EAAI3E,EAAOmyD,GAAGp5C,OAAOl7B,OAAQ8mB,IACzCvjB,KAAKm3B,QAAQ5T,GAAK3E,EAAOmyD,GAAGp5C,OAAOpU,GAAe,WAClDvjB,KAAKowU,QAAQ7sT,GAAK3E,EAAOmyD,GAAGp5C,OAAOpU,GAAc,UASrD,IAAK,IAPD8+W,EAAcJ,EAAWtH,cACzB2H,EAAcL,EAAWrH,cACzB9tX,EAAmC,EAAxBm1X,EAAWzH,WAGtB+H,EAAcD,EACdE,GAHwBz1X,EAAGs1X,GAA0C,cAA1Bt/V,EAAWu4V,WAClD8G,GAAmBA,GAAkBp1X,EAAGs1X,GAEVv1X,EAC7BoZ,EAAI,EAAGA,EAAIvH,EAAOmyD,GAAGp5C,OAAOl7B,OAAQ0pB,IAAK,CAC9C,IAAI67W,EAAahiY,KAAKm3B,QAAQhR,GAC1Bs8W,EAAc31X,GAAY,GAAKk1X,EAAa,IAAO,EACnDnB,EAAY7gY,KAAKowU,QAAQjqT,GACzBu8W,EAAar2X,KAAKE,IAAM,EAAIs0X,EAAa/zX,EAAY,GAC3B,cAA1Bi2B,EAAWu4V,YACX6G,EAActB,EAAY,EAAIyB,EAAcI,EAAaJ,EAAcI,EACvER,EAAeD,EAAWxH,YAAc3tX,EAAW21X,IAGnDN,EAActB,EAAY,EAAIyB,EAAcI,EAAaJ,EAAcI,EACvER,EAAeD,EAAWxH,YAAcgI,GAE5C9D,EAAiBsD,EAAWnG,yBAAyB0G,EAAaL,EAAaO,EAAYR,EAAaK,EAAaE,EAAY1/V,EAAWu4V,YAC5I,IAAIY,EAAU74V,KACVh3B,KAAKE,IAAIs0X,GAAa3E,IACtByC,EAAe5xX,EAA+B,cAA1Bg2B,EAAWu4V,WAC3B4G,EAAcO,EAAaP,EAAcO,EAC7C9D,EAAe3xX,EAAIs1X,GAEvBtiY,KAAKsgY,aAAavvT,GAAG5qD,GAAK,IAAIkvW,GAC9Br1X,KAAKsgY,aAAavvT,GAAG5qD,IAAO2N,MAAO6qW,EAAgB5xX,EAAGi1X,EAAYh1X,EAAG6zX,GACrE7gY,KAAK0tB,SAASqjD,GAAG5qD,IAAOpZ,EAAG4xX,EAAe5xX,EAAGC,EAAG2xX,EAAe3xX,GAEnE,IAAK,IAAI7Q,EAAI,EAAGA,EAAIyiB,EAAOmyD,GAAGp5C,OAAOl7B,OAAS,EAAGN,IAC7C8V,EAAQ9V,EAAI,EACZ6D,KAAK+hY,aAAa5lY,GAAK,IAAIi5X,GAC3Bp1X,KAAK+hY,aAAa5lY,IAAO6+B,GAAIh7B,KAAKm3B,QAAQh7B,GAAI8+B,GAAIj7B,KAAKowU,QAAQj0U,GAAI++B,GAAIl7B,KAAKm3B,QAAQllB,GAAQkpB,GAAIn7B,KAAKowU,QAAQn+T,IAEjH8wB,EAAWzR,UAAU3vB,YAAYyhS,GACjCpjS,KAAK2iY,WAAW5/V,EAAYk6R,EAAa75B,EAAc1sQ,GAE3D,IAASnT,EAAI,EAAGA,EAAIwf,EAAWnkB,OAAOniB,OAAQ8mB,IAC1C,GAAIwf,EAAWnkB,OAAO2E,GAAGglW,mBAAqBxlV,EAAWnkB,OAAO2E,GAAGupT,OAAO7rP,UAAUzpD,QAAS,CACzF,IAAIorW,EAAU7/V,EAAWlV,SAASw+C,aAAc/oE,GAAMy/B,EAAW/hC,QAAQsC,GAAK,cACxDigB,EAAI,+BACtBviB,EAAUR,SAASosB,eAAemW,EAAW/hC,QAAQsC,GAAK,wBAA+BigB,KAEzFviB,EAAQW,YAAYihY,GAExB5iY,KAAKihF,UAAUmgT,qBAAqBphY,KAAKihF,UAAUy/S,aAAan9W,GAAIA,GACpE,IAAS4C,EAAI,EAAGA,EAAI4c,EAAWnkB,OAAO2E,GAAGoU,OAAOl7B,OAAQ0pB,IAAK,GACrDkM,EAAeryB,KAAKihF,UAAUy/S,aAAan9W,GAAgB,YAAE4C,IAC/CsgD,UAAYp0C,EAAarc,MAAU+sB,EAAW2nS,UAAU39T,EAAIg2B,EAAW2nS,UAAU10T,OAC5Fqc,EAAao0C,UAAY1jC,EAAW2nS,UAAU39T,GAAKslB,EAAaq0C,UAAY3jC,EAAW2nS,UAAU19T,GACpGqlB,EAAaq0C,UAAYr0C,EAAatc,OAASgtB,EAAW2nS,UAAU19T,EAAI+1B,EAAW2nS,UAAU30T,UAC7F/V,KAAKihF,UAAUy/S,aAAan9W,GAAG0gB,YAAY9d,GAAG86W,eAAgB,EAC9DjhY,KAAKihF,UAAUy/S,aAAan9W,GAAG0gB,YAAY9d,GAAGqR,SAAU,GAExDnF,EAA4B,eAC5BryB,KAAKihF,UAAUwgT,mBAAmB1+V,EAAYxf,EAAG4C,EAAGkM,EAAcuwW,IAKlF,IAASr/W,EAAI,EAAGA,EAAIwf,EAAWnkB,OAAOniB,OAAQ8mB,IAAK,CAC/C,IAAI09D,EAAYl+C,EAAWnkB,OAAO2E,GAAGupT,OAAO7rP,UAC5C,GAAIl+C,EAAWnkB,OAAO2E,GAAGupT,OAAO7rP,UAAUzpD,QAAS,CAC/C,IAAIx2B,EAAUR,SAASosB,eAAemW,EAAW/hC,QAAQsC,GAAK,wBAA+BigB,GACzFs/W,EAAQ9/V,EAAWlV,SAASw+C,aAAc/oE,GAAMy/B,EAAW/hC,QAAQsC,GAAK,cACtDigB,EAAI,eACtBviB,GACAA,EAAQW,YAAYkhY,GAExB,IAAS18W,EAAI,EAAGA,EAAI4c,EAAWnkB,OAAO2E,GAAGoU,OAAOl7B,OAAQ0pB,IAAK,CACzD,IAAIkM,EAAeryB,KAAKihF,UAAUy/S,aAAan9W,GAAgB,YAAE4C,GACjE,IAAK86D,EAAUhyE,UAAYojB,EAAamF,QAAS,CAC7C,IAAIxkB,EAAU,IAAI4iX,GAClB5iX,EAAUhT,KAAKihF,UAAUy/S,aAAan9W,GAAgB,YAAE4C,GACxD,IAAIuG,EAAOqW,EAAWrW,KAClB3f,EAAIiG,EAAmB,UACvBhG,EAAIgG,EAAmB,UACvB1P,EAAKy/B,EAAW/hC,QAAQsC,GAAK,UAAYigB,EAAI,UAAY4C,EAAI,oBAA2BA,EACxFyX,EAAOqjD,EAAgB,KAAIA,EAAgB,KAAKl+C,EAAWnkB,OAAO2E,GAAGqa,MACrEmF,EAAWy9V,aAAaj9W,EAAIwf,EAAWy9V,aAAa/jY,QACpD6nC,EAASvB,EAAWnkB,OAAO2E,GAAGupT,OAAO7rP,UAAU38C,OAC/Cw+V,EAAc,IAAI5+D,GAAW5gU,EAAIs6B,EAAM0G,EAAQtxB,EAAiB,QAAG,IAAI8hX,GAAe/nX,EAAGC,EAAGgG,EAAe,MAAGA,EAAgB,SAC9H+vX,EAAUhgW,EAAWlV,SAAS8V,cAAcm/V,GAChDD,EAAMlhY,YAAYohY,GAClB,IAAIC,GAAwBv2W,KAAMzZ,EAAc,KAAGjG,EAAGiG,EAAW,EAAGhG,EAAGgG,EAAW,EAAGiqT,YAAa15S,EAC9F6U,WAAYjS,EAAGsR,KAAM,aAAcoB,QAAQ,GAC/CkK,EAAWvc,QAAQ,aAAcw8W,GACjC,IACIp3S,EAAYroD,GADE,IAAIhN,GAAWvjB,EAAY,GAAGgwX,EAAoBj2X,EAAGi2X,EAAoBh2X,EAAG,QAASg2X,EAAoBv2W,MAC5EC,EAAMqW,EAAW1M,WAAW4qD,UAAW4hT,GACtFA,EAAMlhY,YAAYiqF,QAEjB,GAAI3K,EAAUhyE,SAAU,CACzB,IAAIg0X,EAAYziY,SAASosB,eAAeq0D,EAAUhyE,SAAW,eAAiBsU,EAAI,cAC9E4C,EAAI4c,EAAW/hC,QAAQsC,IAC3B2/X,EAAUv+X,MAAM8H,KAAOxM,KAAKihF,UAAUy/S,aAAan9W,GAAgB,YAAE4C,GAAGsgD,UAAY,KACpFw8T,EAAUv+X,MAAMgI,IAAM1M,KAAKihF,UAAUy/S,aAAan9W,GAAgB,YAAE4C,GAAGugD,UAAY,QAKnG,IAASvqE,EAAI,EAAGA,EAAI4mC,EAAWnkB,OAAOniB,OAAQN,IAC1C,GAAI4mC,EAAWnkB,OAAOziB,GAAGooS,iBAAmBxhQ,EAAW2wS,cAAe,CAC9D3wS,EAAWnkB,OAAOziB,GAAG2wU,OAAO7rP,UAAUhyE,UACtCjP,KAAKkjY,yBAAyB/mY,EAAG4mC,GAEjC/hC,EAAUR,SAASosB,eAAemW,EAAW/hC,QAAQsC,GAAK,wBAA+BnH,GAC7F6D,KAAKgzU,iBAAiBjwS,EAAY/hC,EAAS7E,KAIvD2lY,EAAazmY,UAAUsnY,WAAa,SAAU5/V,EAAYs9V,EAAaj9F,EAAc1sQ,GACjF,IAAIysW,EAAQpgW,EAAWlV,SAASw+C,aAAc/oE,GAAMy/B,EAAW/hC,QAAQsC,GAAK,wBAA+B+8X,EACvG/sD,YAAa,QAAUvwS,EAAW/hC,QAAQsC,GAAK,wBAC3C+8X,EAAc,MACtB8C,EAAM3/X,aAAa,aAAcu/B,EAAWnkB,OAAOyhX,GAAa17X,YAChEy+R,EAAazhS,YAAYwhY,GAMzB,IAAK,IAJDpmX,EAEA/b,EAHAu+X,EAAK,GAILzgX,GAFSikB,EAAWnkB,OAAOyhX,GAAavzD,OAEhC/pS,EAAWnkB,OAAOyhX,GAAa1oW,OAAOl7B,OAAS,GAClDN,EAAI,EAAGA,EAAI2iB,EAAO3iB,IAAK,CAC5B,IAAIinD,EAASpjD,KAAKsgY,aAAaD,GAAalkY,GAAU,MAClDksC,EAASroC,KAAKsgY,aAAaD,GAAalkY,EAAI,GAAU,MAC1DojY,EAAKA,EAAM,KAAan8U,EAAQ,EAAI,IAAOA,EAAQ,EAAI,MAC5C/a,EAAQ,EAAI,IAAOA,EAAQ,EAAI,IAE9CtrB,EAAOwiX,EAAGryX,WACV,IAAI0wB,EAAOmF,EAAWnkB,OAAOyhX,GAAaziW,MAAQmF,EAAWy9V,aAAaH,EAAct9V,EAAWy9V,aAAa/jY,QAC5G2mY,GAAoB32W,KAAMsW,EAAWnkB,OAAOyhX,GAAa5oW,KAAMmG,KAAMA,EACrEnG,KAAM,eAAgBoB,QAAQ,GAClCkK,EAAWvc,QAAQ,eAAgB48W,GACnC,IAAIpwX,EAAU,IAAIojB,GAAW2M,EAAW/hC,QAAQsC,GAAK,UAAY+8X,EAAc,UAAW,OAAQt9V,EAAWnkB,OAAOyhX,GAAarqX,MAAOotX,EAAgBxlW,KAAMmF,EAAWnkB,OAAOyhX,GAAa5yX,QAAS,OAAQsP,GAC9M/c,KAAKmzU,gBAAkBpwS,EAAWlV,SAAS4rF,aAAa,IAAIyqN,GAAWnhS,EAAW/hC,QAAQsC,GAAK,wBAA0B+8X,EAAa,eAAiBrqX,MAAO,EAAGwgB,MAAO,QAAU,GAC9KzpB,EAAG2pB,EAAO3pB,EAAGC,EAAG0pB,EAAO1pB,EACvBgJ,MAAO+sB,EAAWpN,cAAc3f,MAChCD,OAAQgtB,EAAWpN,cAAc5f,UAErCotX,EAAMxhY,YAAY3B,KAAKmzU,iBACvB,IAAIkwD,EAAStgW,EAAWlV,SAASw+C,aAAc/oE,GAAMy/B,EAAW/hC,QAAQsC,GAAK,OAAS+8X,IACtFr/X,EAAU+hC,EAAWlV,SAASsI,SAASnjB,GACvCqwX,EAAO1hY,YAAYX,GACnBmiY,EAAMxhY,YAAY0hY,IACC,IAAIjuD,IACVpyC,WAAWjgQ,EAAYs9V,EAAa8C,EAAOnjY,KAAKsgY,aAAaD,IAC1ErgY,KAAKihF,UAAU2/S,cAAc79V,EAAYs9V,EAAa8C,EAAOnjY,KAAKsgY,aAAaD,GAAc3pW,IAEjGorW,EAAazmY,UAAU6nY,yBAA2B,SAAU7C,EAAat9V,GAKrE,IAAK,IAJDtmC,EAASsmC,EAAWnkB,OAAOyhX,GAAa1oW,OAAOl7B,OAG/CyO,EAAWsQ,WAAWunB,EAAWnkB,OAAOyhX,GAAapO,mBAChD91X,EAAI,EAAGA,EAAIM,EAAQN,IAAK,CAC7B,IAAI6E,EAAUR,SAASosB,eAAemW,EAAWnkB,OAAOyhX,GAAavzD,OAAO7rP,UAAUhyE,SAClF,eAAiBoxX,EAAc,cAAgBlkY,EAAI4mC,EAAW/hC,QAAQsC,IAC1EtC,EAAQ0D,MAAMC,WAAa,SAC3B60B,GAAgBuJ,EAAY/hC,EANpB,EAMoCkK,EAAU,YAiB9D42X,EAAazmY,UAAU23U,iBAAmB,SAAUjwS,EAAYogW,EAAOlmE,GACnE,IAOIjgU,EAPA25C,EAAY,IAAIre,OAEhB5D,GADUl0B,SAASosB,eAAe,mCACvBu2W,EAAM5xX,WAAW,GAAGA,WAAW,GAAGA,WAAW,IACxDymB,EAASD,GAAqB,UAC9BurW,EAAYvrW,GAAqB,WACjC/hB,GAAS0e,EAAS7hB,aAAa,SAC/B9F,GAAK2nB,EAAS7hB,aAAa,KAE/B8jC,EAAUpe,QAAQ7D,GACdxpB,SAAUsQ,WAAWunB,EAAWnkB,OAAOq+S,GAAag1D,mBACpDz5V,SAAU,SAAUv4B,GACc,cAA1B8iC,EAAWu4V,YACXt+X,EAAQg7B,EAAO/3B,EAAKw4B,UAAYx4B,EAAKJ,MAAO,EAAGmW,EAAO/V,EAAKiL,UAC3DwpB,EAASlxB,aAAa,QAASxG,EAAMkQ,cAGrClQ,EAAQsmY,EAAUrjY,EAAKw4B,UAAYx4B,EAAKJ,MAAOmW,EAAO,EAAG/V,EAAKiL,UAC9DwpB,EAASlxB,aAAa,IAAKxG,EAAMkQ,cAGzC2R,IAAK,SAAU+D,GACmB,cAA1BmgB,EAAWu4V,WACX5mW,EAASlxB,aAAa,QAASwS,EAAM9I,YAGrCwnB,EAASlxB,aAAa,IAAKuJ,EAAEG,YAEjC,IAAI5Q,GACAu8B,QAAQ,EAAOpB,KCxPJ,oBDwP6BsL,WAAYA,GAExDA,EAAWvc,QC1PI,oBD0PuBlqB,OAIlDwlY,EAAazmY,UAAUs7U,YAAc,SAAU0pD,EAAajoW,GACxD,IAAIrrB,EACAC,EAGJ,OAFAD,EAAI/M,KAAK0tB,SAAS2yW,GAAajoW,GAAYrrB,EAC3CC,EAAIhN,KAAK0tB,SAAS2yW,GAAajoW,GAAYprB,GAClCD,EAAGA,EAAGC,EAAGA,IAEf80X,KElQPloD,GAA6B,WAK7B,SAASA,EAAYjnU,GACjB3S,KAAK2S,QAAUA,EA6GnB,OAvGAinU,EAAYv+U,UAAU0F,MAAQ,SAAU6C,GACpC5D,KAAKujY,gBAAkB1nY,OAAO6F,KAAK,GAAI,QAAS,UAAY7F,OAAOonH,YAAc,UAAYpnH,OAAOmnH,WAAa,cACjHhjH,KAAKujY,gBAAgB51S,OAAO,EAAG,GAC/B3tF,KAAKujY,gBAAgB1pD,SAASC,OAAOC,WAAYD,OAAOE,aACxD,IAAIphT,GACAC,QAAQ,EAAO27B,YAAax0D,KAAKi6U,eAAer2U,GAAW6zB,KCpBpC,eDsB3Bz3B,KAAK2S,QAAQ6T,QCtBc,cDsBiBoS,GACvCA,EAASC,QACV0qW,EAAgB3qW,EAAS47B,YAAax0D,KAAKujY,kBAQnD3pD,EAAYv+U,UAAU4+U,eAAiB,SAAUupD,GAC7C,IAAItiY,EAAMC,EAAc,OAiBxB,OAhBIqiY,EACIA,aAAuBhlY,MACvBglY,EAAYpkY,QAAQ,SAAUpC,GAC1BkE,EAAIS,YAAY4rB,GAAWvwB,GAAO4E,WAAU,MAG3C4hY,aAAuBl6Q,QAC5BpoH,EAAIS,YAAY6hY,EAAY5hY,WAAU,IAGtCV,EAAIS,YAAY4rB,GAAWi2W,GAAa5hY,WAAU,IAItDV,EAAIS,YAAY3B,KAAK2S,QAAQ3R,QAAQY,WAAU,IAE5CV,GAOX04U,EAAYv+U,UAAU6+U,OAAS,SAAUupD,EAAY1yK,EAAU33L,GAC3D,IAAIr5B,EAAQC,KACR0jY,EAASviY,EAAc,UACvBmC,GAAI,aACJG,OACIuS,MAAShW,KAAK2S,QAAQgjB,cAAc3f,MAAM9I,WAC1C6I,OAAU/V,KAAK2S,QAAQgjB,cAAc5f,OAAO7I,cAGhDotU,IAAe9uU,GAAQy9E,UAAU/7E,WAAW3O,QAAQ,mBAAqB,GAC7E66B,EAAc37B,EAAkB27B,GAAe0sN,GAAmBqG,UAAY/yN,EAC9E,IAAImhT,EAAU,sFACVv6U,KAAK2S,QAAQ2e,UAAUxvB,UACvB,SACA8rB,EAAM/xB,OAAO81N,IAAIC,gBAAgB,IAAIT,KAAoB,QAAfsyK,GAAwBlpD,KACjE,IAAKC,eAAiBC,kBAAkBz6U,KAAK2S,QAAQ2e,aAAe5qB,KAAM,mBAC/E,GAAmB,QAAf+8X,EACAzjY,KAAK06U,gBAAgB3pH,EAAU0yK,EAAY71W,EAAK0sT,OAE/C,CACD,IAAIK,EAAU,IAAI/qP,MACdgrP,EAAQ8oD,EAAOx2S,WAAW,MAC9BytP,EAAQv3P,kBAGJ,GAFAw3P,EAAMlrP,UAAUirP,EAAS,EAAG,GAC5B9+U,OAAO81N,IAAIE,gBAAgBjkM,GACR,QAAf61W,EAAsB,CACtB,IAAIniH,EAAa,IAAIr8B,GACjB41F,EAAc6oD,EAAO31S,UAAU,cAAcx+E,QAAQ,aAAc,sBACvE+xQ,EAAW/vN,aAAan4B,YAAcA,EACtCyhT,EAAcA,EAAYx5U,MAAMw5U,EAAYt8U,QAAQ,KAAO,GAC3D+iR,EAAWp2C,MAAM9mO,MAAM2tP,SAASriK,UAAU,IAAImoK,GAAUgjF,GAAc,EAAG,EAAI96U,EAAM4S,QAAQgjB,cAAc3f,MAAQ,GAAKjW,EAAM4S,QAAQgjB,cAAc5f,QAC9IukU,IACAh5D,EAAW7zL,KAAKsjI,EAAW,QAC3BuwD,EAAWhvQ,gBAIfvS,EAAM26U,gBAAgB3pH,EAAU0yK,EAAYC,EAAO31S,UAAU,aAAax+E,QAAQ,YAAa,sBAAuB+qU,IAG9HK,EAAQr7U,IAAMsuB,IAStBgsT,EAAYv+U,UAAUq/U,gBAAkB,SAAU3pH,EAAU0yK,EAAY71W,EAAK0sT,GACzEn5U,EAAc,KACVsC,OACIguN,SAAYV,EAAW,IAAM0yK,EAAWloU,oBACxC7sC,KAAQd,KAEbja,cAAc,IAAIosM,WAAWu6H,EAAa,QAAU,QACnDh/I,KAAMz/L,OACNm/U,SAAS,EACTC,YAAY,MAGbrB,KE1HPtvP,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAgC5D+mW,GAA4B,SAAUx4S,GAKtC,SAASw4S,EAAW3wX,EAAShS,GACzB,OAAOmqF,EAAO7pF,KAAKtB,KAAMgT,EAAShS,IAAYhB,KA4alD,OAjbAsqF,GAAUq5S,EAAYx4S,GAUtBw4S,EAAWtoY,UAAUkkC,cAAgB,WACjC,MAAO,cAMXokW,EAAWtoY,UAAUmxG,eAAiB,WAClC,MAAO,IAKXm3R,EAAWtoY,UAAUogV,eAAiB,WAClCz7U,KAAK0/U,YACL1/S,GAAUhgC,OAEd2jY,EAAWtoY,UAAUihV,YAAc,SAAUp8S,EAAOx5B,EAAMw0U,GACtD,IAEInuU,EACAC,EAHA0f,EAAOwT,EAAMxT,KAAOwT,EAAMxT,KAAOwT,EAAMkkQ,UACvC5nQ,EAAWhQ,GAAY0T,EAAMzT,KAAMC,GAGnCiU,EAAgBT,EAAMS,cACtBijW,EAAY1jW,EAAMzT,KAClBo3W,EAAiBpmY,EAAkByiC,EAAMW,cACzCx0B,KAAKE,IAAIvM,KAAKy8B,OAAOjwB,KAAOxM,KAAKy8B,OAAOhwB,MAASzM,KAAK21B,cAAmB,OACzEuK,EAAMW,aACNijW,EAAmBtnW,EAASxmB,MAAQ6tX,EAEpC92X,EADAyvB,EAASxmB,MAAQhW,KAAK21B,cAAc3f,MAChChW,KAAKy8B,OAAOjwB,KAAOxM,KAAKskC,OAAOtuB,MAGb,WAAlB2qB,EAA8B3gC,KAAK21B,cAAc3f,MAAQ,EAAIwmB,EAAgB,MAAI,EAC9D,SAAlBmE,EAA4B3gC,KAAKy8B,OAAOjwB,KAAOxM,KAAK03X,eAAiB13X,KAAKskC,OAAOtuB,MAAUhW,KAAK21B,cAAc3f,MACzGwmB,EAAgB,OAAKx8B,KAAKy8B,OAAOhwB,MAAQzM,KAAK03X,eAAiB13X,KAAKskC,OAAOtuB,OAEzFhJ,EAAIhN,KAAKy8B,OAAO/vB,IAAM8vB,EAAiB,OAAI,EAAIx8B,KAAK03X,eAChDx3V,EAAM6jW,YAAcD,IAEpBtnW,EAAWhQ,GADXo3W,EAAYzlW,GAAS0lW,EAAe3jW,EAAMzT,KAAMC,GACdA,IAEtCwuT,EAAWl7U,KAAK6tB,SAASw+C,aAAc/oE,GAAItD,KAAKgB,QAAQsC,GAAK,iBAC7D,IAAI0gY,GAAmBv3W,KAAMm3W,EAAW72X,EAAGA,EAAGC,EAAGA,EAAGyqB,KAAM,cAAeoB,QAAQ,GACjF74B,KAAKwmB,QHtFY,cGsFSw9W,GAEZzgW,GADA,IAAIhN,GAAWv2B,KAAKgB,QAAQsC,GAAK,eAAiBoD,EAAMs9X,EAAej3X,EAAGi3X,EAAeh3X,EAAG,QAASg3X,EAAev3W,MACzFC,EAAM1sB,KAAKq2B,WAAW9G,WAAY2rT,GACnE13U,aAAa,aAAc08B,EAAMgS,aAAehS,EAAMzT,MAC9D,IAAIw3W,GAAkBl3X,EAAGA,EAAGC,EAAGA,EAAGwvB,SAAUA,GAC5Cx8B,KAAKsxB,UAAU3vB,YAAYu5U,GACC,KAAxBh7S,EAAMk4V,SAAS3rW,MAAeyT,EAAMk4V,SAAS5gW,SAC7Cx3B,KAAKkkY,eAAehkW,EAAOx5B,EAAM81B,EAAUx8B,KAAK21B,cAAesuW,EAAe/oD,IAGtFyoD,EAAWtoY,UAAU6oY,eAAiB,SAAUhkW,EAAOx5B,EAAM81B,EAAU1P,EAAMm3W,EAAe/oD,GACxF,IAAInuU,EACAC,EAIAsgV,EAHA5gU,EAAOwT,EAAMk4V,SAASh0F,UACtB+/F,EAAWjkW,EAAMk4V,SACjBgM,EAAe53W,GAAY23W,EAAS13W,KAAMC,GAE1C23W,EAAeF,EAAS13W,KACxB63W,EAAmB7mY,EAAkB0mY,EAAStjW,cACzB,IAApB7gC,KAAK02B,OAAO1gB,MAAgBmuX,EAAStjW,aACtCsjW,EAASJ,YAAcK,EAAapuX,MAAQsuX,IAC5CD,EAAelmW,GAASmmW,EAAkBH,EAAS13W,KAAMC,IAE7D3f,EAAwC,QAApCmzB,EAAgB,SAAES,cAA2BsjW,EAAcl3X,EAAKk3X,EAAcznW,SAAc,MACvD,SAApC0D,EAAgB,SAAES,cAA4BsjW,EAAcl3X,EACxDk3X,EAAcl3X,EAAKk3X,EAAcznW,SAASxmB,MAAQ,EAC3DhJ,EAAIi3X,EAAcj3X,EAAK,EAAIhN,KAAK03X,eAChCpqC,EAAiD,QAApCptT,EAAgB,SAAES,cAA0B,MAChB,SAApCT,EAAgB,SAAES,cAA4B,QAAU,SAC7D,IAAI4jW,GAAsB93W,KAAM43W,EAAct3X,EAAGA,EAAGC,EAAGA,EAAGyqB,KAAM,iBAAkBoB,QAAQ,GAC1F74B,KAAKwmB,QH/Ge,iBG+GS+9W,GAC7B,IACIvjY,EAAUuiC,GADA,IAAIhN,GAAWv2B,KAAKgB,QAAQsC,GAAK,eAAiBoD,EAAM69X,EAAkBx3X,EAAGw3X,EAAkBv3X,EAAGsgV,EAAYi3C,EAAkB93W,MACrGC,EAAM1sB,KAAKq2B,WAAW9G,WAAY2rT,GAC3El6U,EAAQwC,aAAa,aAAc2gY,EAASjyV,aAAeiyV,EAAS13W,MACpEyuT,EAASv5U,YAAYX,IAMzB2iY,EAAWtoY,UAAUghV,aAAe,WAChC,IAAI/3S,EAAStkC,KAAKskC,OACd9N,EAAuB,iBAAfx2B,KAAKkb,MAA2B,UAAY,UACxDlb,KAAKyvB,WAAazvB,KAAKyvB,WAAazvB,KAAKyvB,WAAa+G,EACtD,IAAIguW,EAAa,IAAItgE,GAAWlkU,KAAKgB,QAAQsC,GAAK,oBAAqBtD,KAAKyvB,WAAY6U,EAAQ,EAAG,IAAIwwV,GAAexwV,EAAOtuB,MAAQ,EAAGsuB,EAAOtuB,MAAQ,EAAGhW,KAAK21B,cAAc3f,MAAQsuB,EAAOtuB,MAAOhW,KAAK21B,cAAc5f,OAASuuB,EAAOtuB,QACtOhW,KAAKsxB,UAAU3vB,YAAY3B,KAAK6tB,SAAS8V,cAAc6gW,KAM3Db,EAAWtoY,UAAUmsF,kBAAoB,SAAUiF,EAASC,GACxD1sF,KAAK0zU,eAAgB,EAErB,IAAK,IADD7lT,GAAW,EACNzvB,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKmvF,GAAUruF,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAE9D,OADWyE,EAAGzE,IAEV,IAAK,aACDyvB,GAAW,EACX,MACJ,IAAK,OACD7tB,KAAKy7U,iBACL5tT,GAAW,EACX,MACJ,IAAK,QACD7tB,KAAK0zU,eAAgB,EACrB7lT,GAAW,EACX,MACJ,IAAK,SACDA,GAAW,GAInBA,GACA7tB,KAAK+rG,UAMb43R,EAAWtoY,UAAUoX,UAAY,WAC7BzS,KAAKwmB,QAAQ,QAAUuc,WAAY/iC,OACnCA,KAAKykY,eACLzkY,KAAKoiS,sBACLpiS,KAAK0kY,cAETf,EAAWtoY,UAAU+mS,oBAAsB,WACvCpiS,KAAK0zU,eAAgB,GAKzBiwD,EAAWtoY,UAAUqgB,SAAW,WAE5B1b,KAAKq2B,WlB/Hb,SAA8Bnb,GAC1B,IAAIxW,EACJ,OAAQwW,GACJ,IAAK,eACDxW,GACIsqB,UAAW,UACXE,SAAU,UACVC,cAAe,UACfC,cAAe,UACfG,WAAY,UACZC,YAAa,UACbC,WAAY,UACZC,WAAY,UACZtD,YAAa,UACb60D,UAAW,UACX50D,iBAAkB,UAClBC,kBAAmB,UACnBC,kBAAmB,WAEvB,MACJ,QACI7nB,GACIsqB,UAAW,UACXE,SAAU,UACVC,cAAe,UACfC,cAAe,UACfG,WAAY,UACZC,YAAa,UACbC,WAAY,UACZC,WAAY,OACZtD,YAAa,uBACb60D,UAAW,UACX50D,iBAAkB,UAClBC,kBAAmB,UACnBC,kBAAmB,WAI/B,OAAO7nB,EkByFeqqB,CAAc/uB,KAAKkb,OACrClb,KAAKwgY,alBvJb,SAA+BtlX,GAC3B,IAAI4T,EACJ,OAAQ5T,GACJ,IAAK,eACD4T,GAAW,UAAW,UAAW,UAAW,UAAW,UACnD,UAAW,UAAW,UAAW,UAAW,WAChD,MACJ,IAAK,SACDA,GAAW,UAAW,UAAW,UAAW,UAAW,UACnD,UAAW,UAAW,UAAW,UAAW,WAChD,MACJ,IAAK,YACDA,GAAW,UAAW,UAAW,UAAW,UAAW,UACnD,UAAW,UAAW,UAAW,UAAW,WAChD,MACJ,QACIA,GAAW,UAAW,UAAW,UAAW,UAAW,UACnD,UAAW,UAAW,UAAW,UAAW,WAGxD,OAAOA,EkBmIiBD,CAAe7uB,KAAKkb,QAM5CyoX,EAAWtoY,UAAU0wG,OAAS,WAC1B/rG,KAAKy7U,iBACLz7U,KAAKgB,QAAQW,YAAY3B,KAAKsxB,WAC9BtxB,KAAK0b,WACL1b,KAAKikX,yBACLjkX,KAAKq8U,eACDr8U,KAAK2kY,wBAA0B3kY,KAAKo2U,eAAe5+S,UACnDx3B,KAAKw2U,aAAex2U,KAAK2kY,uBAAuBztD,aAAal3U,OAEjEA,KAAKw2U,aAAex2U,KAAKw2U,aAAex2U,KAAKw2U,cAAiBzpU,EAAG,EAAGC,EAAG,EAAGgJ,MAAO,EAAGD,OAAQ,GAC5F,IAAI6sR,EAAa,IAAIV,GACrBliS,KAAK02B,OAASksQ,EAAW00F,oBAAoBt3X,KAAMA,KAAKkgC,MAAOlgC,KAAKw2U,cAC5C,KAApBx2U,KAAKkgC,MAAMzT,MAAezsB,KAAKkgC,MAAM1I,SACrCx3B,KAAKs8U,YAAYt8U,KAAKkgC,MAAO,QAAS,MAE1C,IAAI+hW,EAAa,IAAI5J,GACrB4J,EAAWvJ,WAAW14X,KAAMA,KAAK02B,QACjC12B,KAAK4kY,aAAe,IAAI9C,GACxB9hY,KAAK4kY,aAAa5xI,KAAKhzP,KAAMiiY,EAAYjiY,KAAK02B,QAC9C12B,KAAKwmB,QAAQ,UAAYuc,WAAY/iC,QAEzC2jY,EAAWtoY,UAAU4oX,uBAAyB,WAC1C,GAAIxmX,EAAkB+C,SAASosB,eAAe5sB,KAAKgB,QAAQsC,GAAK,uBAAwB,CACpF,IAAIuhY,EAAmB1jY,EAAc,OACjCmC,GAAItD,KAAKgB,QAAQsC,GAAK,qBACtBC,OAAQ,kCAEZvD,KAAKgB,QAAQW,YAAYkjY,GACzB,IAAIxxW,EAAOrzB,KAAKgB,QAAQ4K,wBACpB27D,EAAU/mE,SAASosB,eAAe5sB,KAAKgB,QAAQsC,GAAK,QACxD,GAAIikE,EAAS,CACT,IAAIu9T,EAAgBv9T,EAAQ37D,wBAC5Bi5X,EAAiBngY,MAAM8H,KAAOH,KAAKC,IAAIw4X,EAAct4X,KAAO6mB,EAAK7mB,KAAM,GAAK,KAC5Eq4X,EAAiBngY,MAAMgI,IAAML,KAAKC,IAAIw4X,EAAcp4X,IAAM2mB,EAAK3mB,IAAK,GAAK,WAI7E8gB,GAAcxtB,KAAKgB,QAAQsC,GAAK,uBASxCqgY,EAAWtoY,UAAUiX,QAAU,WAC3BtS,KAAKykY,eACLt5S,EAAO9vF,UAAUiX,QAAQhR,KAAKtB,MAC9BA,KAAKgB,QAAQ8C,UAAUS,OAAO,iBAKlCo/X,EAAWtoY,UAAUqpY,WAAa,WAC9Bn/X,GAAanB,IAAIpE,KAAKgB,QAAS,QAAShB,KAAK+kY,kBAAmB/kY,MAChEuF,GAAanB,IAAIpE,KAAKgB,QAASwK,GAAQ2+E,eAAgBnqF,KAAK6/U,UAAW7/U,MACvEuF,GAAanB,IAAIpE,KAAKgB,QAASwK,GAAQ4+E,cAAepqF,KAAK8/U,SAAU9/U,MACrEnE,OAAOa,iBAAkB8O,GAAQomB,SAAY,gBAAiB/1B,QAAU,wBAAyBA,OAAW,oBAAsB,SAAUmE,KAAKglY,mBAAmB1pY,KAAK0E,QAE7K2jY,EAAWtoY,UAAUwkV,UAAY,SAAUh/U,GACxB,cAAXA,EAAE6F,KACF1G,KAAK4xB,SAAU,EAGf5xB,KAAK4xB,QAA4B,UAAlB/wB,EAAEw/U,aAA6C,MAAlBx/U,EAAEw/U,aAAuBrgV,KAAK4xB,QAE1E5xB,KAAKilY,sBAAwBjlY,KAAK4xB,SAClC5xB,KAAKilY,oBAAoBC,oBAAoBllY,KAAMa,IAG3D8iY,EAAWtoY,UAAUykV,SAAW,SAAUj/U,GAOtC,GANe,aAAXA,EAAE6F,KACF1G,KAAK4xB,SAAU,EAGf5xB,KAAK4xB,QAA4B,UAAlB/wB,EAAEw/U,aAA6C,MAAlBx/U,EAAEw/U,YAE9CrgV,KAAKilY,qBAAuBjlY,KAAK4xB,QAAS,CAC1C,IAAIuzW,EAAmBnlY,KAAKilY,oBAAoBC,oBAAoBllY,KAAMa,GACtEskY,IACAnlY,KAAKolY,UAAYjlY,WAAW,WACxBglY,EAAiBj/F,WAClB,QAQfy9F,EAAWtoY,UAAU0pY,kBAAoB,SAAUlkY,GAC/C,IACI2lC,EADY3lC,EAAEsG,OACO7D,GACrB+Q,EAAgB7T,SAASosB,eAAe4Z,GAAUnyB,cAEtD,GAAsB,8BADL7T,SAASosB,eAAevY,EAAc/Q,IAAI+Q,cAC5C/Q,IAAsCtD,KAAKo2U,eAAe6B,iBAAkB,CAMvF,IAAK,IALD99S,EAAe9lB,EAAc9C,WAAW,GACxC8zX,EAAgBhxX,EAAc9C,WAAW,GACzC+zX,EAAanrW,EAAate,YAC1BohT,OAAc,EACdr/R,OAAO,EACFzhC,EAAI,EAAGA,EAAI6D,KAAK2kY,uBAAuBY,aAAa9oY,OAAQN,IAC7DmpY,IAAetlY,KAAK2kY,uBAAuBY,aAAappY,GAAS,OACjE8gU,EAAcj9T,KAAK2kY,uBAAuBY,aAAappY,GAAG8gU,YAC1Dr/R,EAAO59B,KAAK2kY,uBAAuBY,aAAappY,GAAGyhC,MAG3D,IAAIy1S,EAAgB7yU,SAASosB,eAAe5sB,KAAKgB,QAAQsC,GAAK,wBAA+B25T,GAC5C,YAA7CoW,EAAcxgU,aAAa,eAC3BwyX,EAAc7hY,aAAa,OAAQ,QACnC6vU,EAAc7vU,aAAa,aAAc,UACzCxD,KAAK4e,OAAOq+S,GAAat4T,WAAa,WAGtC0gY,EAAc7hY,aAAa,OAAQo6B,GACnCy1S,EAAc7vU,aAAa,aAAc,WACzCxD,KAAK4e,OAAOq+S,GAAat4T,WAAa,aAOlDg/X,EAAWtoY,UAAUopY,aAAe,WAChCl/X,GAAahB,OAAOvE,KAAKgB,QAAS,QAAShB,KAAK+kY,mBAChDx/X,GAAahB,OAAOvE,KAAKgB,QAASwK,GAAQ2+E,eAAgBnqF,KAAK6/U,WAC/Dt6U,GAAahB,OAAOvE,KAAKgB,QAASwK,GAAQ4+E,cAAepqF,KAAK8/U,UAC9DjkV,OAAOe,oBAAqB4O,GAAQomB,SAAY,gBAAiB/1B,QAAU,wBAAyBA,OAAW,oBAAsB,SAAUmE,KAAKglY,qBAExJrB,EAAWtoY,UAAU0F,MAAQ,SAAUuC,GACjB,IAAIs2U,GAAY55U,MACtBe,MAAMuC,IAOtBqgY,EAAWtoY,UAAU6+U,OAAS,SAAUxzU,EAAMqqN,EAAU33L,GACpC,IAAIwgT,GAAY55U,MACtBk6U,OAAOxzU,EAAMqqN,EAAU33L,IAKrCuqW,EAAWtoY,UAAU2pY,mBAAqB,SAAUnkY,GAChD,IAAId,EAAQC,KAQZ,OAPAA,KAAK0zU,eAAgB,EACjB1zU,KAAK65U,UACL35U,aAAaF,KAAK65U,UAEtB75U,KAAK65U,SAAW15U,WAAW,WACvBJ,EAAMgsG,UACP,MACI,GAOX43R,EAAWtoY,UAAUw1F,gBAAkB,WACnC,IAAIgB,KACA7xF,KAAKo2U,eAAe5+S,SACpBq6D,EAAQrtF,MACJ6sF,OAAQ,mBACRpxF,MAAOD,QAGf,IAAK,IAAI7D,EAAI,EAAGA,EAAI6D,KAAK4e,OAAOniB,OAAQN,IACpC,GAAI6D,KAAK4e,OAAOziB,GAAG01B,QAAQ2F,QAAS,CAChCq6D,EAAQrtF,MACJ6sF,OAAQ,gBACRpxF,MAAOD,QAEX,MAGR,OAAO6xF,GAOX8xS,EAAWtoY,UAAUqkV,UAAY,WAC7BlyT,GAAcxtB,KAAKgB,QAAQsC,GAAK,sBAEhC,GAAItD,KAAKsxB,UAAW,CAChB,KAAOtxB,KAAKsxB,UAAU/f,WAAW9U,OAFlB,GAGXuD,KAAKsxB,UAAUhsB,YAAYtF,KAAKsxB,UAAU1U,aAEzC5c,KAAKsxB,UAAUwJ,iBAAmB96B,KAAKsxB,UAAU7wB,YAClD8D,EAAOvE,KAAKsxB,aAIxBu5D,IACI3jF,EAAS,cACVy8X,EAAWtoY,UAAW,kBAAc,GACvCwvF,IACI3jF,EAAS,KACVy8X,EAAWtoY,UAAW,aAAS,GAClCwvF,IACI3jF,EAAS,KACVy8X,EAAWtoY,UAAW,cAAU,GACnCwvF,IACI3jF,GAAS,IACVy8X,EAAWtoY,UAAW,oBAAgB,GACzCwvF,IACI3jF,EAAS,aACVy8X,EAAWtoY,UAAW,aAAS,GAClCwvF,IACI9iF,KAAY6sX,KACb+O,EAAWtoY,UAAW,cAAU,GACnCwvF,IACI9iF,KAAY4sX,KACbgP,EAAWtoY,UAAW,YAAQ,GACjCwvF,IACI9iF,KAAY8sX,KACb8O,EAAWtoY,UAAW,cAAU,GACnCwvF,IACI9iF,KAAY8uX,KACb8M,EAAWtoY,UAAW,aAAS,GAClCwvF,IACIxiF,OAAiBgvX,KAClBsM,EAAWtoY,UAAW,cAAU,GACnCwvF,IACI9iF,KAAYwuX,KACboN,EAAWtoY,UAAW,sBAAkB,GAC3CwvF,IACI9iF,KAAY4uX,KACbgN,EAAWtoY,UAAW,sBAAkB,GAC3CwvF,IACI9iF,KAAY4uX,KACbgN,EAAWtoY,UAAW,kBAAc,GACvCwvF,IACI3jF,EAAS,OACVy8X,EAAWtoY,UAAW,kBAAc,GACvCwvF,IACI3jF,EAAS,KACVy8X,EAAWtoY,UAAW,sBAAkB,GAC3CwvF,IACI3jF,EAAS,IACVy8X,EAAWtoY,UAAW,cAAU,GACnCwvF,IACI/hF,KACD66X,EAAWtoY,UAAW,mBAAe,GACxCwvF,IACI/hF,KACD66X,EAAWtoY,UAAW,yBAAqB,GAC9CwvF,IACI/hF,KACD66X,EAAWtoY,UAAW,YAAQ,GACjCwvF,IACI/hF,KACD66X,EAAWtoY,UAAW,cAAU,GACnCwvF,IACI/hF,KACD66X,EAAWtoY,UAAW,oBAAgB,GACzCwvF,IACI/hF,KACD66X,EAAWtoY,UAAW,mBAAe,GACxCwvF,IACI/hF,KACD66X,EAAWtoY,UAAW,sBAAkB,GAC3CwvF,IACI/hF,KACD66X,EAAWtoY,UAAW,kBAAc,GACvCwvF,IACI/hF,KACD66X,EAAWtoY,UAAW,uBAAmB,GAC5CwvF,IACI/hF,KACD66X,EAAWtoY,UAAW,oBAAgB,GACzCsoY,EAAa94S,IACTzhF,GACDu6X,IAELp4R,IC9dEi6R,GAA+B,WAC/B,SAASA,KA4GT,OA1GAA,EAAcnqY,UAAU6pY,oBAAsB,SAAUniW,EAAYliC,GAChE,IAAIqgV,EACAp1U,EACAI,EACW,aAAXrL,EAAE6F,MAAkC,cAAX7F,EAAE6F,MAE3BoF,GADAo1U,EAAWrgV,GACM89D,eAAe,GAAGvqB,QACnCloC,EAAQg1U,EAASviR,eAAe,GAAGtqB,QACnCr0C,KAAK0gI,oBAAiBvlI,IAGtB+Q,EAAQrL,EAAEwzC,QACVvoC,EAAQjL,EAAEuzC,SAEdp0C,KAAK+gV,WAAWh+S,EAAYj3B,EAAOI,GACnC,IAAK,IAAI/P,EAAI,EAAGA,EAAI4mC,EAAWnkB,OAAOniB,OAAQN,IAAK,CAC/C,IAAIyiB,EAASmkB,EAAWnkB,OAAOziB,GAC3B8gU,EAAc9gU,EACdspY,EAAe,IAAInQ,GAEvB,IADAmQ,EAAezlY,KAAK0lY,eAAe3iW,EAAY/iC,KAAK+sU,OAAQ/sU,KAAKgtU,OAAQpuT,EAAQq+S,IAChEvvS,UAAY9O,EAAOiT,QAAQ2F,SAAiC,YAAtB5Y,EAAOja,WAA0B,CACpF3E,KAAKo1B,cAAc2N,EAAYliC,EAAG4kY,EAAaxzX,MAAOgrT,EAAar+S,GACnE,MAEK5e,KAAK0gI,gBAAkB1gI,KAAK0gI,eAAejhG,SAAW7gB,EAAOiT,QAAQ5iB,UAC1EjP,KAAK0gI,eAAewlK,UACpBlmS,KAAK0gI,eAAejhG,QAAS,GAExB7gB,EAAOiT,QAAQ5iB,UACpBjP,KAAK0gI,eAAewlK,UAG5B,OAAOlmS,KAAK0gI,gBAEhB8kQ,EAAcnqY,UAAU0lV,WAAa,SAAUh+S,EAAYj3B,EAAOI,GAC9D,IAAImnB,EAAO0P,EAAW/hC,QAAQ4K,wBAC1B27D,EAAU/mE,SAASosB,eAAemW,EAAW/hC,QAAQsC,GAAK,QAAQsI,wBACtE5L,KAAK+sU,OAAUjhU,EAAQunB,EAAK7mB,KAAQH,KAAKC,IAAIi7D,EAAQ/6D,KAAO6mB,EAAK7mB,KAAM,GACvExM,KAAKgtU,OAAU9gU,EAAQmnB,EAAK3mB,IAAOL,KAAKC,IAAIi7D,EAAQ76D,IAAM2mB,EAAK3mB,IAAK,IAExE84X,EAAcnqY,UAAU+5B,cAAgB,SAAU2N,EAAYliC,EAAG8kY,EAAYtF,EAAazhX,GACtF,IAAI2jT,EAAS3jT,EAAO+Y,OAAOguW,GAAY3D,WACnCt4D,EAAS9qT,EAAO+Y,OAAOguW,GAAY9E,UACnCpsF,GAAe8tB,EAAS,SAA0BmH,EAAS,QAC3D9jC,EAAe7iQ,EAAWnkB,OAAOyhX,GAAavzD,OAAO/2T,OAAS,EAC9D7U,EAAMV,SAASosB,eAAemW,EAAW/hC,QAAQsC,GAAK,2BACtD7F,EAAkByD,KAClBA,EAAMC,EAAc,OAASmC,GAAIy/B,EAAW/hC,QAAQsC,GAAK,0BACrDC,OAAQ,wDACZ/C,SAASosB,eAAemW,EAAW/hC,QAAQsC,GAAK,sBAAsB3B,YAAYT,IAEtFlB,KAAK0gI,eAAiB,IAAI1qF,IACtBvW,QAAQ,EACRmlD,OAAQ,MAAQhmE,EAAO6Y,KAAO,OAC9B2C,QAASq6Q,EACTnwQ,OAAQ1lB,EAAOiT,QAAQyS,OACvB1G,KAAMmF,EAAW1M,WAAWjK,YAC5B5vB,MAAQqkY,UAAWn3D,GACnBz6T,SAAU2P,EAAOiT,QAAQ5iB,SACzBye,UAAY3gB,EAAG/M,KAAKoyW,UAAYrvU,EAAW/hC,QAAQmT,WAC/CnH,EAAGhN,KAAKgyW,UAAYpsE,EAAe7iQ,EAAW/hC,QAAQoT,WAC1D+uR,QAAQ,EACRP,WAAY,IAAIkyF,GAAe/xV,EAAWrM,OAAO3pB,EAAGg2B,EAAWrM,OAAO1pB,EAAG+1B,EAAWrM,OAAO1gB,MAAO+sB,EAAWrM,OAAO3gB,QACpH+Y,SAAUlQ,EAAOgf,MAAQmF,EAAWy9V,aAAaH,EAAct9V,EAAWy9V,aAAa/jY,SACvF6mS,QAAS,UACTpoR,MAAO6nB,EAAW7nB,QAEtBlb,KAAK0gI,eAAe0jK,UAAUn3Q,WAAa,qCAC3CjtB,KAAK0gI,eAAerqF,SAASn1C,IAEjCskY,EAAcnqY,UAAUqqY,eAAiB,SAAU3iW,EAAYh2B,EAAGC,EAAG4R,EAAQyhX,GAIzE,IAAK,IAHDjoW,EACAwtW,EACAC,EACKtiX,EAAI,EAAGA,EAAI3E,EAAO+Y,OAAOl7B,OAAQ8mB,IAAK,CAC3CqiX,EAAa7iW,EAAW6hW,aAAajuD,YAAY0pD,EAAa98W,GAC9DvjB,KAAKoyW,UAAYwzB,EAAW74X,EAC5B/M,KAAKgyW,UAAY4zB,EAAW54X,EAC5BorB,EAAa7U,EACb,IAAI4/B,EAAIp2C,EAAI64X,EAAW74X,EACnB+vB,EAAI9vB,EAAI44X,EAAW54X,EAEvB,GADeX,KAAKE,IAAIF,KAAKQ,KAAMs2C,EAAIA,EAAMrmB,EAAIA,IAClCle,EAAOkuT,OAAO92T,MAAO,CAChC6vX,EAAaD,EACbxtW,EAAa7U,EACb,OAGR,OAASmK,SAAUm4W,EAAY5zX,MAAOmmB,IAK1CotW,EAAcnqY,UAAUkkC,cAAgB,WACpC,MAAO,iBAOXimW,EAAcnqY,UAAUiX,QAAU,SAAUywB,KAKrCyiW,KC7GPM,GAAkC,WAClC,SAASA,IACL9lY,KAAKulY,gBAuXT,OArXAO,EAAiBzqY,UAAU67U,aAAe,SAAUn0S,GAGhD,OAFA/iC,KAAKu2U,sBAAsBxzS,GAC3B/iC,KAAK+lY,YAAYhjW,GACV/iC,KAAKgmY,oBAEhBF,EAAiBzqY,UAAUk7U,sBAAwB,SAAUxzS,GACzD/iC,KACKulY,gBACL,IAuBIU,EAGAzvD,EAzBAL,EAASpzS,EAAWqzS,eACpB8vD,EAAmB/vD,EAAOpgU,OAC1BowX,EAAkBhwD,EAAOngU,MACzBowX,EAAcjwD,EAAOiwD,YAAc,EAAIjwD,EAAOiwD,YAAc,EAC5DlyX,EAAWiiU,EAAOjiU,SAAS0B,cAC3B8W,EAAOypT,EAAOj2S,MAAMkkQ,UAGpBiiG,EAAkB,EAClBC,EAAmB,EACnBxvD,EAAe,EACfyvD,EAAiBxjW,EAAWpN,cAAc3f,OAAsC,EAA5B+sB,EAAW20V,eAA6C,EAAtBvhD,EAAO7xS,OAAOtuB,MACvE,EAA1B+sB,EAAWuB,OAAOtuB,OAGrBimR,GAFkBl5P,EAAWpN,cAAc5f,OAAWgtB,EAAW20V,eAAuBvhD,EAAO7xS,OAAOtuB,MACnG+sB,EAAWuB,OAAOtuB,MACVmgU,EAAOl6C,UAClB65C,EAAcK,EAAOL,YACrB7T,EAAYz1S,GAAYuW,EAAWqzS,eAAsB,MAAQ,KAAG1pT,GACpE85W,EAAc,EACdC,EAAiB,EACjBC,EAAc,EACdC,EAAe,EAEfC,EAAgB,EAChBnqY,EAASsmC,EAAWnkB,OAAOniB,OAE/B,GAAIsmC,EAAWqzS,eAAe5+S,SAAsB,IAAX/6B,EAAc,CAClC,WAAbyX,GAAsC,QAAbA,GAAmC,WAAbA,GAC1C+nR,GAAY65C,GAAiB75C,GAAY65C,EAC1C75C,EAAWx/R,EAASq5U,EAEH,MAAZ75C,GAAmC,MAAf65C,EACzB75C,EAAWx/R,EAASq5U,EAEH,MAAZ75C,GAAmC,MAAf65C,IACzB75C,EAAW,GAEXA,IACAgqG,EAAa55X,KAAKwmB,KAAKp2B,EAASw/R,MAI/BA,GAAY65C,GAAiB75C,GAAY65C,EAC1CA,EAAcr5U,EAASw/R,EAEN,MAAZA,GAAmC,MAAf65C,EACzBA,EAAcr5U,EAASw/R,EAEN,MAAZA,GAAmC,MAAf65C,IACzBA,EAAc,GAEdA,IACAmwD,EAAanwD,IAGrB,IAAK,IAAI35U,EAAI,EAAGA,EAAIM,EAAQN,IAAK,CAC7B6D,KAAKulY,aAAa/gY,MACdioB,KAAMsW,EAAWnkB,OAAOziB,GAAS,KAAI4mC,EAAWnkB,OAAOziB,GAAS,KAAI,SAAWA,EAC/E8gU,YAAa9gU,EACbwxB,MAAOoV,EAAWqzS,eAAezoT,MACjCiQ,KAAMmF,EAAWnkB,OAAOziB,GAAGyhC,MAAQmF,EAAWy9V,aAAarkY,EAAI4mC,EAAWy9V,aAAa/jY,QACvFi6B,OAAQ,OAEZ,IAAImwW,EAAa7mY,KAAK8mY,eAAe/jW,EAAY/iC,KAAKulY,aAAappY,IACnEkqY,EAAkBh6X,KAAKC,IAAIu6X,EAAkB,MAAGR,GAChDC,EAAmBj6X,KAAKC,IAAIu6X,EAAmB,OAAGP,GAClDtmY,KAAKulY,aAAappY,GAAW,QAAM6Z,MAAOqwX,EAAiBtwX,OAAQuwX,GACnEM,GAAgC,EAChCF,EAAcA,EAAcL,EAAkBD,EAC9CO,EAAet6X,KAAKC,IAAIg6X,EAAkBK,GACzB,QAAbzyX,GAAmC,WAAbA,GAAsC,WAAbA,GAC3CwyX,EAAcH,IACdG,GAAeG,EAAW7wX,MAAQowX,EAClCI,EAAcn6X,KAAKC,IAAIk6X,EAAaE,GACpCA,EAAcG,EAAW7wX,MAAQowX,EACjCK,EAAiBA,EAAiBE,EAAeP,GAGrDQ,IAAkBX,GAAc9pY,IAAMM,EAAS,IAC/C+pY,EAAcn6X,KAAKC,IAAIk6X,EAAaE,GAEpC5vD,EADA2vD,EAAiBA,EAAiBE,EAAeP,EAEjDQ,EAAgB,EAChBD,EAAe,EACfD,EAAc,GAMtBlwD,GAAiBzpU,EAAG,EAAGC,EAAG,EAAGgJ,MAHpBisT,EAAe,MAAIukE,EAAcJ,EAAenkE,EAAUjsT,MAAQojD,GAAcgtU,EACrFI,EAAcptU,GAAyC,EAA1Br2B,EAAWuB,OAAOtuB,MAERD,OADlC+gU,EAAe/zS,EAAW20V,gBAGvC13X,KAAKgmY,mBAAqBxvD,EACH,MAAnB2vD,IACAnmY,KAAKgmY,mBAAmBhwX,MAAQmwX,GAEZ,MAApBD,IACAlmY,KAAKgmY,mBAAmBjwX,OAASmwX,IAGzCJ,EAAiBzqY,UAAUyrY,eAAiB,SAAU/jW,EAAYnkB,GAC9D,IAAIu3T,EAASpzS,EAAWqzS,eACpBpuD,EAAcmuD,EAAO4wD,UAAU/wX,MAC/BgxX,EAAe7wD,EAAO4wD,UAAUhxX,OAChCymB,EAAWhQ,GAAY5N,EAAO6N,KAAM0pT,EAAO/xC,WAG/C,OAASpuR,MAFGgyQ,EAAcxrP,EAASxmB,MAAQmgU,EAAOyB,aAE3B7hU,OADV1J,KAAKC,IAAI06X,EAAcxqW,EAASzmB,UAIjD+vX,EAAiBzqY,UAAU0qY,YAAc,SAAUhjW,GAC/C,IAKIlE,EACAC,EANAq3S,EAASpzS,EAAWqzS,eACpB6wD,EAAiB9wD,EAAOjiU,SAAS0B,cACjCy5C,EAAY8mR,EAAO9mR,UACnBmnR,EAAex2U,KAAKgmY,mBACpB5nW,EAAW,EAGX8oW,EAAYnkW,EAAW7C,MAAMxT,KAAOqW,EAAW7C,MAAMxT,KAAOqW,EAAW7C,MAAMkkQ,UAC7E+iG,EAAwB36W,GAAYuW,EAAW7C,MAAMzT,KAAMy6W,GAAWnxX,OACtEqxX,EAA2B56W,GAAYuW,EAAW7C,MAAMk4V,SAAS3rW,KAAMsW,EAAW7C,MAAMk4V,SAASh0F,WAAWruR,OAC5G2hX,EAAiB30V,EAAW20V,eAC5B/rX,EAASw7X,EAAwBC,EAA2B1P,EAAiB30V,EAAWtG,OAAO/vB,IAC/F05X,EAAcjwD,EAAOiwD,YAAc,EAAIjwD,EAAOiwD,YAAc,EAC5DG,EAAiBxjW,EAAWpN,cAAc3f,MAC1CqxX,EAAkBtkW,EAAWpN,cAAc5f,OAC3C+hX,EAAe3hD,EAAO7xS,OAAOtuB,MAC7B+gU,EAAc,EAEduwD,EADY96W,GAAY2pT,EAAc,MAAQ,KAAGA,EAAOj2S,MAAMkkQ,WAChCruR,OAC9BwxX,EAAaxkW,EAAWuB,OAAOtuB,MAC/BwxX,EAAWjB,EAAgC,EAAbgB,EAC9BE,EAAYJ,EAAiC,EAAbE,EAEpC,GADA/wD,EAAazgU,QAAUuxX,EACA,WAAnBL,EAA6B,CAC7B,OAAQA,GACJ,IAAK,SACDzwD,EAAaxpU,EAAIy6X,GAAajxD,EAAazgU,SAA0B2hX,GACrE,MACJ,IAAK,MACDlhD,EAAaxpU,EAAIu6X,EAAa57X,EAC9B,MACJ,IAAK,QACD6qU,EAAazpU,EAAIy6X,EAAWhxD,EAAaxgU,MAA0B,EAAjB0hX,EAClD,MACJ,IAAK,OACDlhD,EAAazpU,EAAIw6X,EAA+B,EAAjB7P,EAGvC,GAAuB,SAAnBuP,GAAgD,UAAnBA,EAC7B,OAAQ53U,GACJ,IAAK,SACDmnR,EAAaxpU,EAAKy6X,EAAY,GAAOjxD,EAAazgU,OAAwB,EAAf+hX,GAAoB,EAAMJ,EAAiB,EACtG,MACJ,IAAK,OACDlhD,EAAaxpU,EAAIu6X,EAA+B,EAAjB7P,EAAsB/rX,EACrD,MACJ,IAAK,MACD6qU,EAAaxpU,EAAIy6X,GAAajxD,EAAazgU,UAA6C,EAAjB2hX,OAK/E,OAAQroU,GACJ,IAAK,SACDmnR,EAAazpU,EAAKy6X,EAAW,GAAOhxD,EAAaxgU,MAAuB,EAAf8hX,GAAoB,EAAMJ,EAAiB,EACpG,MACJ,IAAK,OACDlhD,EAAazpU,EAAIw6X,EAA+B,EAAjB7P,EAC/B,MACJ,IAAK,MACDlhD,EAAazpU,EAAIy6X,GAAYhxD,EAAaxgU,SAA4C,EAAjB0hX,QAMjFlhD,EAAaxpU,EAAKmpU,EAAOzoT,SAAS1gB,EAAIy6X,EAAatxD,EAAOzoT,SAAS1gB,EAAI,EACvEwpU,EAAazpU,EAAKopU,EAAOzoT,SAAS3gB,EAAIy6X,EAAYrxD,EAAOzoT,SAAS3gB,EAAI,EAE1E,GAAuB,WAAnBk6X,GAAkD,QAAnBA,EAC/B,IAAK,IAAI9qY,EAAI,EAAGA,EAAI6D,KAAKulY,aAAa9oY,OAAQN,IAE1C,IADA46U,GAAe/2U,KAAKulY,aAAappY,GAAGu6B,OAAO1gB,MAAQowX,GACjCoB,EAAU,CACxBhxD,EAAazpU,EAAKy6X,EAAW,GAAOhxD,EAAaxgU,MAAuB,EAAf8hX,GAAoB,EAAMJ,EAAiB,EACpG,MAIZ,IAAIgQ,EAAa3kW,EAAWlV,SAASw+C,aAAc/oE,GAAMy/B,EAAW/hC,QAAQsC,GAAK,kBACjFy/B,EAAWzR,UAAU3vB,YAAY+lY,GACjC1nY,KAAK2nY,gBAAkB5kW,EAAWlV,SAASw+C,aAAc/oE,GAAMy/B,EAAW/hC,QAAQsC,GAAK,qBACvF,IAAI2/T,EAAWpkS,EAAS64V,EACpBkQ,EAAW9oW,EAAS44V,EACE,KAAtBvhD,EAAOj2S,MAAMzT,MAAe0pT,EAAOj2S,MAAM1I,UACzCkwW,EAAW/lY,YAAY3B,KAAK6nY,gBAAgB9kW,EAAYozS,EAAQK,EAAckxD,IAC9EE,EAAW9oW,EAAS44V,EAAiB4P,GAEzC,IAAK,IAAInhX,EAAI,EAAGA,EAAInmB,KAAKulY,aAAa9oY,OAAQ0pB,MACrCgwT,EAAOl6C,SAAWk6C,EAAOL,aAAeK,EAAOl6C,WAAak6C,EAAOL,cAChD,QAAnBmxD,GAA+C,WAAnBA,GAAkD,WAAnBA,GAUtDW,EAAW5nY,KAAKulY,aAAap/W,GAAW,OAAEpQ,OAASqwX,EACrDkB,EAAoBC,EAAa/wD,EAAazgU,OAAS+oB,IACvD8oW,EAAW9oW,EACXmkS,GAAY7kS,KAEhBp+B,KAAKs3U,YAAct3U,KAAK8nY,eAAe/kW,EAAYozS,EAAQn2U,KAAKulY,aAAap/W,GAAIA,MAA2BqwT,GAC5GkxD,EAAW/lY,YAAY3B,KAAKs3U,aAC5BswD,GAAY5nY,KAAKulY,aAAap/W,GAAW,OAAEpQ,OAASqwX,EACpDhoW,EAAW/xB,KAAKC,IAAI8xB,EAAUp+B,KAAKulY,aAAap/W,GAAW,OAAEnQ,SAjBxDitT,EAAWjjU,KAAKulY,aAAap/W,GAAW,OAAEnQ,MAASwgU,EAAaxgU,MAAQ6oB,IACzEokS,EAAWy0D,EACXkQ,GAAY5nY,KAAKulY,aAAap/W,GAAW,OAAEpQ,OAASqwX,GAExDpmY,KAAKs3U,YAAct3U,KAAK8nY,eAAe/kW,EAAYozS,EAAQn2U,KAAKulY,aAAap/W,GAAIA,EAAG88S,IAAsBuT,GAC1GkxD,EAAW/lY,YAAY3B,KAAKs3U,aAC5BrU,GAAYjjU,KAAKulY,aAAap/W,GAAW,OAAEnQ,MAAQowX,GAc3DsB,EAAWlkY,aAAa,YAAa,aAAegzU,EAAazpU,EAAEG,WAAa,IAAMspU,EAAaxpU,EAAEE,WAAa,KAClHlN,KAAK+nY,iBAAiBL,EAAY3kW,EAAYozS,EAAQK,IAE1DsvD,EAAiBzqY,UAAU0sY,iBAAmB,SAAUL,EAAY3kW,EAAYozS,EAAQK,GACpF,IAAIguD,EAAa,IAAItgE,GAAWnhS,EAAW/hC,QAAQsC,GAAK,kBAAwB,OAAQ6yU,EAAO7xS,OAAQ,EAAG,IAAIwwV,GAAe,EAAG,EAAGt+C,EAAaxgU,MAAOwgU,EAAazgU,SACpK2xX,EAAW/lY,YAAYohC,EAAWlV,SAAS8V,cAAc6gW,KAE7DsB,EAAiBzqY,UAAUwsY,gBAAkB,SAAU9kW,EAAYozS,EAAQK,EAAckxD,GACrF,IAAIhQ,EAAiB30V,EAAW20V,eAC5Bz1D,EAAYz1S,GAAY2pT,EAAOj2S,MAAMzT,KAAM0pT,EAAOj2S,MAAMkkQ,WACxD4jG,EAAa/lE,EAAUjsT,MACvBuoU,EAActc,EAAUlsT,OACxB4qB,EAAgBw1S,EAAOj2S,MAAMS,cAC7B9B,EAAS,EACTopW,EAAoBzxD,EAAaxgU,MACjC8oB,EAAS44V,EAAkBn5C,EAAc,EAC7C,OAAQ59S,GACJ,IAAK,MACD9B,EAASopW,EAAoBD,EAAanpW,EAC1C,MACJ,IAAK,SACDA,EAASopW,EAAoB,EAAI,EAAe,EAGpDppW,EAAS,IACTA,EAAS,EACTopW,EAAoBD,GAEpBC,EAAoBD,EAAanpW,IACjCopW,EAAoBD,EAAanpW,GAErC,IACI79B,EAAUuiC,GADA,IAAIhN,GAAWwM,EAAW/hC,QAAQsC,GAAK,mBAAoBu7B,EAAQC,EAAQ,QAASq3S,EAAOj2S,MAAMzT,MACtE0pT,EAAOj2S,MAAMkkQ,UAAWrhQ,EAAW1M,WAAW7G,YAAak4W,GAEpG,OADA1mY,EAAQwC,aAAa,aAAc2yU,EAAOj2S,MAAMgS,aAAeikS,EAAOj2S,MAAMzT,MACrEzrB,GAEX8kY,EAAiBzqY,UAAUysY,eAAiB,SAAU/kW,EAAYozS,EAAQovD,EAAcp/W,EAAGpZ,EAAGC,EAAGwpU,GAC7F,IAAI9oT,EAIAulP,EAFAh3K,EAASk6O,EAAO4wD,UACF5wD,EAAOiwD,YAEhB/5X,KAAKQ,KAAKovF,EAAc,MAAIA,EAAc,MAAIA,EAAe,OAAIA,EAAe,QACzFg3K,EAAazmP,GAAY+4W,EAAmB,KAAGpvD,EAAO/xC,WAAWruR,OACjE2X,GACI3gB,EAAGA,EAAIkvF,EAAc,MAAI,EACzBjvF,EAAIA,GAAKimQ,EAAah3K,EAAe,OAAIg3K,EAAah3K,EAAe,QAAK,GAE9E,IAAIq7O,EAAcv0S,EAAWlV,SAASw+C,aAAc/oE,GAAIy/B,EAAW/hC,QAAQsC,GAAK,cAAqB6iB,EAAEjZ,aACvGoqU,EAAmB,MAAU,OAAInB,EAAO8B,iBAAmB,UAAY,UACvE,IAAIo+B,GAAoB5pV,KAAM84W,EAAmB,KAAG3nW,KAAM2nW,EAAmB,KACzE53W,MAAO43W,EAAoB,MAAG9tW,KAAM,eAAgBoB,QAAQ,GAChEkK,EAAWvc,QAAQ,eAAgB6vV,GACnC,IAAI1oV,EAAQ3tB,KAAKkoY,gBAAgBnlW,EAAYwiW,EAAc73W,EAAS3gB,EAAG2gB,EAAS1gB,EAAGmZ,EAAGgwT,EAAQkgC,GAC9F/+B,EAAY31U,YAAYgsB,GACxB,IAAI3a,EAAU,IAAIujB,GAAWwM,EAAW/hC,QAAQsC,GAAK,kBAAoB6iB,EAAEjZ,WAAYwgB,EAAS3gB,EAAIkvF,EAAc,MAAI,EAAIk6O,EAAOyB,aAAclqT,EAAS1gB,EAAIimQ,EAAa,EAAG,QAASojG,EAAgB5pV,MACjMzrB,EAAUuiC,GAAkBvwB,EAASmjU,EAAO/xC,UAAWrhQ,EAAW1M,WAAW7G,YAAa8nT,GAI9F,OAHAt2U,EAAQwC,aAAa,aAAc2yU,EAAOjkS,aAAe,6BAA+Bl/B,EAAQyZ,KAAO,WACvG6qT,EAAY31U,YAAYX,GACxBhB,KAAK2nY,gBAAgBhmY,YAAY21U,GAC1Bt3U,KAAK2nY,iBAEhB7B,EAAiBzqY,UAAU6sY,gBAAkB,SAAUnlW,EAAYwiW,EAAct3W,EAAMC,EAAMjc,EAAOkkU,EAAQkgC,GACxG,IAAIr1W,EACAy/X,EACA9wC,EACA5yU,EACAk/E,EAASk6O,EAAO4wD,UAChB/wX,EAAQimF,EAAc,MACtBlmF,EAASkmF,EAAe,OACxBlvF,EAAIkhB,GAASjY,EAAQ,EAErBsuB,GAAW9N,MAAOylE,EAAO33D,OAAO9N,MAAOxgB,MAAOimF,EAAO33D,OAAOtuB,OAE5D4nB,EAAgD,YAAxCmF,EAAWnkB,OAAO3M,GAAOtN,WAA4B0xW,EAAgBz4U,KAAO,OACpFjQ,EAAQ0oV,EAAgB1oV,MAAM/X,cAC9BhJ,EAASP,KAAKQ,KAAKkJ,EAASA,EAASC,EAAQA,GAAS,EAC1D,OAAQ2X,GACJ,IAAK,SACD8yW,EAAgB,IAAIt8D,GAAaphS,EAAW/hC,QAAQsC,GAAK,uBAA8B2O,EAAM/E,WAAY0wB,EAAM0G,EANzG,EAM0HrW,EAAMC,EAAMthB,EAAQ,MACpJ5L,EAAU+hC,EAAWlV,SAAS6V,WAAW+8V,GACzC,MACJ,IAAK,YACD1jX,EAAO,KAAYhQ,EAAI,KAAOmhB,GAASnY,EAAS,GAAM,OACpCC,EAAQ,EAAKiY,GAAQ,KAAOC,GAASnY,EAAS,GAAM,OACrDkY,EAAQjY,EAAQ,GAAM,KAAOkY,EAAQnY,EAAS,GAAM,MACrDhJ,EAAI,KAAOmhB,EAAQnY,EAAS,GAAM,MAClChJ,EAAI,KAAOmhB,GAASnY,EAAS,GAAM,KACnD45U,EAAc,IAAIv5T,GAAW2M,EAAW/hC,QAAQsC,GAAK,uBAA8B2O,EAAM/E,WAAY0wB,EAAM0G,EAAOtuB,MAAOsuB,EAAO9N,MAAO,EAAG,GAAIzZ,GAC9I/b,EAAU+hC,EAAWlV,SAASsI,SAASw5T,GACvC,MACJ,IAAK,UACD5yU,EAAO,KAAYhQ,EAAI,IAAMmhB,EAAO,MACpBD,EAAO,KAAOC,GAASnY,EAAS,GAAM,OACpCC,EAAQ,EAAKiY,GAAQ,IAAMC,EAAO,MACpCD,EAAO,KAAOC,EAAQnY,EAAS,GAAM,MACrChJ,EAAI,IAAMmhB,EAAO,KACjCyhU,EAAc,IAAIv5T,GAAW2M,EAAW/hC,QAAQsC,GAAK,uBAA8B2O,EAAM/E,WAAY0wB,EAAM0G,EAAOtuB,MAAOsuB,EAAO9N,MAAO,EAAG,GAAIzZ,GAC9I/b,EAAU+hC,EAAWlV,SAASsI,SAASw5T,GACvC,MACJ,IAAK,WAED,IAAK,IAAIpsU,EAAI,EAAGA,GAAK,EAAGA,IAAK,CACzB,IAAIiL,EAAS5hB,EAASP,KAAKoV,IAAKpV,KAAK+Q,GAAK,KAFrC,GAE6CmG,IAC9CkL,EAAS7hB,EAASP,KAAKqV,IAAKrV,KAAK+Q,GAAK,KAHrC,GAG6CmG,IAE9CxG,EADM,IAANwG,EACO,MAAaiL,EAASP,GAAQ,KAAOC,EAAOO,GAAU,IAGtD1R,EAAKxC,OAAO,MAAa0T,EAAOO,GAAU,KAAON,EAAOO,GAAU,KAGjF1R,EAAOA,EAAKxC,OAAO,KACnBo1U,EAAc,IAAIv5T,GAAW2M,EAAW/hC,QAAQsC,GAAK,uBAA8B2O,EAAM/E,WAAY0wB,EAAM0G,EAAOtuB,MAAOsuB,EAAO9N,MAAO,EAAG,GAAIzZ,GAC9I/b,EAAU+hC,EAAWlV,SAASsI,SAASw5T,GACvC,MACJ,IAAK,WACD5yU,EAAO,KAAYhQ,EAAI,KAAQgJ,EAAS,EAAKmY,GAAQ,MACrCD,EAAO,KAAOC,GAASnY,EAAS,GAAM,OACrCkY,EAAQjY,EAAQ,GAAM,KAAOkY,EAAQnY,EAAS,GAAM,MACrDhJ,EAAI,KAAOmhB,EAAQnY,EAAS,GAAM,KAClD45U,EAAc,IAAIv5T,GAAW2M,EAAW/hC,QAAQsC,GAAK,uBAA8B2O,EAAM/E,WAAY0wB,EAAM0G,EAAOtuB,MAAOsuB,EAAO9N,MAAO,EAAG,GAAIzZ,GAC9I/b,EAAU+hC,EAAWlV,SAASsI,SAASw5T,GAG/C,OAAO3uV,GAKX8kY,EAAiBzqY,UAAUkkC,cAAgB,WACvC,MAAO,oBAOXumW,EAAiBzqY,UAAUiX,QAAU,SAAUywB,KAKxC+iW,KC5XPx7S,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAS5DurW,GAAiC,SAAUh9S,GAE3C,SAASg9S,IACL,OAAkB,OAAXh9S,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVAsqF,GAAU69S,EAAiBh9S,GAI3BN,IACI3jF,EAAS,KACVihY,EAAgB9sY,UAAW,aAAS,GACvCwvF,IACI3jF,EAAS,IACVihY,EAAgB9sY,UAAW,aAAS,GAChC8sY,GACTnpU,IAKEopU,GAA+B,SAAUj9S,GAEzC,SAASi9S,IACL,OAAkB,OAAXj9S,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAoB/D,OAtBAsqF,GAAU89S,EAAej9S,GAIzBN,IACI3jF,EAAS,OACVkhY,EAAc/sY,UAAW,YAAQ,GACpCwvF,IACI3jF,EAAS,OACVkhY,EAAc/sY,UAAW,aAAS,GACrCwvF,IACI3jF,EAAS,uCACVkhY,EAAc/sY,UAAW,kBAAc,GAC1CwvF,IACI3jF,EAAS,OACVkhY,EAAc/sY,UAAW,kBAAc,GAC1CwvF,IACI3jF,EAAS,OACVkhY,EAAc/sY,UAAW,iBAAa,GACzCwvF,IACI3jF,EAAS,IACVkhY,EAAc/sY,UAAW,eAAW,GAChC+sY,GACTppU,IAKEqpU,GAAmC,SAAUl9S,GAE7C,SAASk9S,IACL,OAAkB,OAAXl9S,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbAsqF,GAAU+9S,EAAmBl9S,GAI7BN,IACI3jF,GAAS,IACVmhY,EAAkBhtY,UAAW,eAAW,GAC3CwvF,IACI3jF,EAAS,OACVmhY,EAAkBhtY,UAAW,aAAS,GACzCwvF,IACI3jF,EAAS,IACVmhY,EAAkBhtY,UAAW,aAAS,GAClCgtY,GACTrpU,IAKEspU,GAA0C,SAAUn9S,GAEpD,SAASm9S,IACL,OAAkB,OAAXn9S,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAuB/D,OAzBAsqF,GAAUg+S,EAA0Bn9S,GAIpCN,IACI3jF,GAAS,IACVohY,EAAyBjtY,UAAW,eAAW,GAClDwvF,IACI3jF,EAAS,KACVohY,EAAyBjtY,UAAW,YAAQ,GAC/CwvF,IACI3jF,EAAS,KACVohY,EAAyBjtY,UAAW,gBAAY,GACnDwvF,IACI3jF,EAAS,KACVohY,EAAyBjtY,UAAW,cAAU,GACjDwvF,IACI9iF,GAAUyuB,MAAO,UAAWxgB,MAAO,IAAOmyX,KAC3CG,EAAyBjtY,UAAW,cAAU,GACjDwvF,IACI9iF,GAAU+kB,KAAM,OAAQC,WAAY,SAAUC,UAAW,SAAUC,WAAY,sCAAwCm7W,KACxHE,EAAyBjtY,UAAW,iBAAa,GACpDwvF,IACI9iF,KAAYsgY,KACbC,EAAyBjtY,UAAW,yBAAqB,GACrDitY,GACTtpU,IAKEupU,GAA+B,SAAUp9S,GAEzC,SAASo9S,IACL,OAAkB,OAAXp9S,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVAsqF,GAAUi+S,EAAep9S,GAIzBN,IACI3jF,EAAS,gBACVqhY,EAAcltY,UAAW,kBAAc,GAC1CwvF,IACI9iF,KAAYogY,KACbI,EAAcltY,UAAW,cAAU,GAC/BktY,GACTvpU,IAKEwpU,GAA8B,SAAUr9S,GAExC,SAASq9S,IACL,OAAkB,OAAXr9S,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAiB/D,OAnBAsqF,GAAUk+S,EAAcr9S,GAIxBN,IACI3jF,GAAS,IACVshY,EAAantY,UAAW,eAAW,GACtCwvF,IACI3jF,EAAS,OACVshY,EAAantY,UAAW,aAAS,GACpCwvF,IACI3jF,EAAS,KACVshY,EAAantY,UAAW,iBAAa,GACxCwvF,IACI3jF,EAAS,IACVshY,EAAantY,UAAW,aAAS,GACpCwvF,IACI3jF,EAAS,IACVshY,EAAantY,UAAW,eAAW,GAC/BmtY,GACTxpU,IAKEypU,GAAmC,SAAUt9S,GAE7C,SAASs9S,IACL,OAAkB,OAAXt9S,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAc/D,OAhBAsqF,GAAUm+S,EAAmBt9S,GAI7BN,IACI3jF,EAAS,OACVuhY,EAAkBptY,UAAW,kBAAc,GAC9CwvF,IACI3jF,EAAS,OACVuhY,EAAkBptY,UAAW,gBAAY,GAC5CwvF,IACI3jF,EAAS,OACVuhY,EAAkBptY,UAAW,aAAS,GACzCwvF,IACI3jF,EAAS,OACVuhY,EAAkBptY,UAAW,eAAW,GACpCotY,GACTzpU,IAKE0pU,GAA8B,SAAUv9S,GAExC,SAASu9S,IACL,OAAkB,OAAXv9S,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAoB/D,OAtBAsqF,GAAUo+S,EAAcv9S,GAIxBN,IACI3jF,EAAS,OACVwhY,EAAartY,UAAW,YAAQ,GACnCwvF,IACI3jF,EAAS,OACVwhY,EAAartY,UAAW,YAAQ,GACnCwvF,IACI3jF,EAAS,OACVwhY,EAAartY,UAAW,YAAQ,GACnCwvF,IACI3jF,EAAS,OACVwhY,EAAartY,UAAW,YAAQ,GACnCwvF,IACI3jF,EAAS,IACVwhY,EAAartY,UAAW,aAAS,GACpCwvF,IACI9iF,KAAYygY,KACbE,EAAartY,UAAW,oBAAgB,GACpCqtY,GACT1pU,IAKE2pU,GAAyB,SAAUx9S,GAEnC,SAASw9S,IACL,OAAkB,OAAXx9S,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAc/D,OAhBAsqF,GAAUq+S,EAASx9S,GAInBN,IACI3jF,EAAS,IACVyhY,EAAQttY,UAAW,YAAQ,GAC9BwvF,IACI3jF,EAAS,IACVyhY,EAAQttY,UAAW,aAAS,GAC/BwvF,IACI3jF,EAAS,IACVyhY,EAAQttY,UAAW,cAAU,GAChCwvF,IACI3jF,EAAS,IACVyhY,EAAQttY,UAAW,WAAO,GACtBstY,GACT3pU,IAKE4pU,GAAyC,SAAUz9S,GAEnD,SAASy9S,IACL,OAAkB,OAAXz9S,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAiB/D,OAnBAsqF,GAAUs+S,EAAyBz9S,GAInCN,IACI3jF,OACD0hY,EAAwBvtY,UAAW,eAAW,GACjDwvF,IACI3jF,EAAS,IACV0hY,EAAwBvtY,UAAW,eAAW,GACjDwvF,IACI3jF,EAAS,IACV0hY,EAAwBvtY,UAAW,YAAQ,GAC9CwvF,IACI3jF,EAAS,YACV0hY,EAAwBvtY,UAAW,YAAQ,GAC9CwvF,IACI9iF,GAAUiO,MAAO,GAAKmyX,KACvBS,EAAwBvtY,UAAW,cAAU,GACzCutY,GACT5pU,IAKE6pU,GAA6B,SAAU19S,GAEvC,SAAS09S,IACL,OAAkB,OAAX19S,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVAsqF,GAAUu+S,EAAa19S,GAIvBN,IACI3jF,EAAS,IACV2hY,EAAYxtY,UAAW,SAAK,GAC/BwvF,IACI3jF,EAAS,IACV2hY,EAAYxtY,UAAW,SAAK,GACxBwtY,GACT7pU,IAKE8pU,GAA4C,SAAU39S,GAEtD,SAAS29S,IACL,OAAkB,OAAX39S,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAuB/D,OAzBAsqF,GAAUw+S,EAA4B39S,GAItCN,IACI3jF,OACD4hY,EAA2BztY,UAAW,eAAW,GACpDwvF,IACI3jF,EAAS,IACV4hY,EAA2BztY,UAAW,eAAW,GACpDwvF,IACI3jF,EAAS,gBACV4hY,EAA2BztY,UAAW,YAAQ,GACjDwvF,IACI3jF,EAAS,KACV4hY,EAA2BztY,UAAW,cAAU,GACnDwvF,IACI9iF,GAAUyuB,MAAO,cAAexgB,MAAO,GAAKmyX,KAC7CW,EAA2BztY,UAAW,cAAU,GACnDwvF,IACI9iF,GAAU+kB,KAAM,OAAQC,WAAY,SAAUC,UAAW,SAAUC,WAAY,sCAAwCm7W,KACxHU,EAA2BztY,UAAW,iBAAa,GACtDwvF,IACI9iF,KAAY8gY,KACbC,EAA2BztY,UAAW,cAAU,GAC5CytY,GACT9pU,ItUrTEsrB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAkBxCv9D,GAAsB,WAKtB,OAJA,SAAcpX,EAAOD,GACjB/V,KAAKgW,MAAQA,EACbhW,KAAK+V,OAASA,MAwClBmgB,GAAsB,WAOtB,OANA,SAAcnpB,EAAGC,EAAGgJ,EAAOD,GACvB/V,KAAK+M,EAAIA,EACT/M,KAAKgN,EAAIA,EACThN,KAAKgW,MAAQA,EACbhW,KAAK+V,OAASA,MASlBqgB,GAA4B,WAU5B,OATA,SAAoB9yB,EAAIs6B,EAAM5nB,EAAOwgB,EAAO/oB,EAASqkC,EAAWvjB,GAC5DvuB,KAAKsD,GAAKA,EACVtD,KAAK49B,KAAOA,EACZ59B,KAAKyN,QAAUA,EACfzN,KAAK,gBAAkBgW,EACvBhW,KAAK89B,OAAStH,EACdx2B,KAAKuuB,EAAIA,EACTvuB,KAAK,oBAAsB8xC,MAS/BoyR,GAA4B,SAAU/4O,GAEtC,SAAS+4O,EAAW5gU,EAAIs6B,EAAM0G,EAAQ72B,EAAS4lB,EAAM01W,EAAIC,EAAIC,EAAIC,QAClD,IAAPH,IAAiBA,EAAK,QACf,IAAPC,IAAiBA,EAAK,QACf,IAAPC,IAAiBA,EAAK,QACf,IAAPC,IAAiBA,EAAK,GAC1B,IAAInpY,EAAQorF,EAAO7pF,KAAKtB,KAAMsD,EAAIs6B,EAAM0G,EAAOtuB,MAAOsuB,EAAO9N,MAAO/oB,IAAYzN,KAMhF,OALAD,EAAMszB,KAAOA,EACbtzB,EAAM6jC,QAAUmlW,EAChBhpY,EAAM8jC,SAAWmlW,EACjBjpY,EAAM+jC,WAAamlW,EACnBlpY,EAAMgkC,YAAcmlW,EACbnpY,EAEX,OAdAuqF,GAAU45O,EAAY/4O,GAcf+4O,GACT9tS,IAME+tS,GAA8B,SAAUh5O,GAExC,SAASg5O,EAAa7gU,EAAIs6B,EAAM0G,EAAQ72B,EAAS4gB,EAAIC,EAAIsO,EAAGkV,GACxD,IAAI/xC,EAAQorF,EAAO7pF,KAAKtB,KAAMsD,EAAIs6B,EAAM0G,EAAOtuB,MAAOsuB,EAAO9N,MAAO/oB,IAAYzN,KAKhF,OAJAD,EAAMuuB,GAAKA,EACXvuB,EAAMsuB,GAAKA,EACXtuB,EAAM68B,EAAIA,EACV78B,EAAM,oBAAsB+xC,EACrB/xC,EAEX,OATAuqF,GAAU65O,EAAch5O,GASjBg5O,GACT/tS,IAiFEG,GAA4B,WAa5B,OAZA,SAAoBjzB,EAAIyJ,EAAGC,EAAG6G,EAAQ4Y,EAAM0S,EAAU9xB,QAChC,IAAdA,IAAwBA,EAAY,IACxCrN,KAAKqN,UAAY,GACjBrN,KAAKm/B,SAAW,OAChBn/B,KAAKsD,GAAKA,EACVtD,KAAK+M,EAAIA,EACT/M,KAAKgN,EAAIA,EACThN,KAAK6T,OAASA,EACd7T,KAAKysB,KAAOA,EACZzsB,KAAKqN,UAAYA,EACjBrN,KAAKm/B,SAAWA,MuUnNpBgqW,GAAmC,WAKnC,SAASA,EAAkB3lW,GACvBxjC,KAAKwjC,UAAYA,EAuvBrB,OAlvBA2lW,EAAkB9tY,UAAU0jF,YAAc,SAAUviF,QACnC,IAATA,IAAmBA,EAAOwD,KAAKwjC,UAAU+/B,YACxCvjE,KAAKwjC,UAAU+/B,WAAW9mE,SAGrBulD,MAAMxlD,EAAK,KAAoC,YAA7BwD,KAAKwjC,UAAUtR,UAIvClyB,KAAK,UAAYA,KAAKwjC,UAAUtR,aAHhClyB,KAAKwjC,UAAU4lW,cAAgB5sY,EAKnCwD,KAAKqpY,oBAKTF,EAAkB9tY,UAAUiuY,gBAAkB,SAAU9sY,EAAMuQ,EAAGC,GAC7D,IAAIjN,EAAQC,UACC,IAATxD,IAAmBA,EAAOwD,KAAKwjC,UAAU+/B,iBACnC,IAANx2D,IAAgBA,EAAI/M,KAAKwjC,UAAU0rS,YAC7B,IAANliU,IAAgBA,EAAIhN,KAAKwjC,UAAUrQ,OACvC,IAAIpF,KACAoJ,KACJ36B,EAAK4C,QAAQ,SAAUpC,EAAOiV,IACS,IAA/BklB,EAAQ54B,QAAQvB,EAAM+P,KACtBoqB,EAAQ3yB,KAAKxH,EAAM+P,IAEvB,IAAIopO,KACJA,EAAYp2O,EAAMyjC,UAAU0rS,OAAS/3S,EAAQ54B,QAAQvB,EAAM+P,IAC3DopO,EAAYp2O,EAAMyjC,UAAUrQ,OAASn2B,EAAMgQ,GAC3C+gB,EAAKvpB,KAAK2xO,KAEdn2O,KAAKwjC,UAAU4lW,cAAgBr7W,GAKnCo7W,EAAkB9tY,UAAUkuY,gBAAkB,SAAU/sY,EAAMuQ,EAAGC,QAChD,IAATxQ,IAAmBA,EAAOwD,KAAKwjC,UAAU+/B,iBACnC,IAANx2D,IAAgBA,EAAI/M,KAAKwjC,UAAU0rS,YAC7B,IAANliU,IAAgBA,EAAIhN,KAAKwjC,UAAUrQ,OACvC,IAAIpF,KACJvxB,EAAK4C,QAAQ,SAAUpC,EAAOiV,GAC1B,IAAIkkO,KACJA,EAAYppO,GAAK/P,EAAM+P,GAAGkT,UAC1Bk2N,EAAYnpO,GAAKhQ,EAAMgQ,GACvB+gB,EAAKvpB,KAAK2xO,KAEdn2O,KAAKwjC,UAAU4lW,cAAgBr7W,GAMnCo7W,EAAkB9tY,UAAUq3U,aAAe,WACvC,IAAI82D,EAAQxpY,KAAKwjC,UACjBxjC,KAAK86W,OAAS0uB,EAAMxoY,QAAQsC,GAAK,uBACjCtD,KAAKypY,WACL,IAAIxpY,GACAw3B,KAAM,kBAAmBoB,QAAQ,EAAOu0D,UAAWo8S,EAAMp8S,UAAW9oD,OAAQklW,EAAMllW,OAAQ1G,KAAM4rW,EAAM5rW,KAAM4F,UAAWgmW,GAG3H,GADAA,EAAMhjX,QAAQvmB,EAAKw3B,KAAMx3B,GACpBD,KAAK6pV,gBAAiB5pV,EAAK44B,OAAhC,CAGA,GAAmB,QAAf2wW,EAAM9iY,MAAiC,YAAf8iY,EAAM9iY,MAAsB8iY,EAAME,kBAAkBjtY,OAAQ,CAEpF,IAAK,IADDs2F,EAAQ/yF,KAAKwjC,UAAU3V,SAASw+C,aAAc/oE,GAAItD,KAAKwjC,UAAUxiC,QAAQsC,GAAK,2BACzEnH,EAAI,EAAGA,EAAIqtY,EAAME,kBAAkBjtY,OAAQN,KAC3CqtY,EAAMG,aAAav6V,MAAQo6V,EAAME,kBAAkBvtY,GAAGytY,YACtDJ,EAAMG,aAAar6V,MAAQk6V,EAAME,kBAAkBvtY,GAAG0tY,WACvD7pY,KAAK8pY,UAAUN,EAAME,kBAAkBvtY,GAAI42F,EAAO52F,GAG1D6D,KAAKwjC,UAAUlS,UAAU3vB,YAAYoxF,GAEzC/yF,KAAK,SAAWwpY,EAAM9iY,MAAM1G,KAAK6pV,cAAe5pV,GAChDD,KAAKq1U,aAAar1U,KAAK6pV,eACvB7pV,KAAK+pY,YAAY/pY,KAAK6pV,iBAK1Bs/C,EAAkB9tY,UAAUyuY,UAAY,SAAUJ,EAAmB32S,EAAO9gF,GACxE,IAAI2Q,EAAQ5iB,KAAKwjC,UACbztB,EAAU6M,EAAM+S,cAAoB,OAAwB,EAApB/S,EAAMw2C,QAAQ1sD,IACtDsJ,EAAS4M,EAAM+S,cAAmB,MAAyB,EAArB/S,EAAMw2C,QAAQ5sD,KACpDw9X,EAAUN,EAAkBE,WAC5BK,EAAUP,EAAkBG,SAC5BK,EAAYn0X,EAAWA,EAAS/V,KAAKmqY,OAAUH,EAAUhqY,KAAK+f,KAAS6C,EAAMw2C,QAAQ1sD,IACrF09X,EAAYr0X,EAAWA,EAAS/V,KAAKmqY,OAAUF,EAAUjqY,KAAK+f,KAAS6C,EAAMw2C,QAAQ1sD,IACrF09X,EAAYr0X,EAAS6M,EAAMw2C,QAAQ1sD,IACnC09X,EAAYr0X,EAAS6M,EAAMw2C,QAAQ1sD,IAE9B09X,EAAY,EAAIxnX,EAAMw2C,QAAQ1sD,MACnC09X,EAAY,EAAIxnX,EAAMw2C,QAAQ1sD,KAE9Bw9X,EAAYn0X,EAAS6M,EAAMw2C,QAAQ1sD,IACnCw9X,EAAYn0X,EAAS6M,EAAMw2C,QAAQ1sD,IAE9Bw9X,EAAY,EAAItnX,EAAMw2C,QAAQ1sD,MACnCw9X,EAAY,EAAItnX,EAAMw2C,QAAQ1sD,KAElC,IAAIqQ,EAAO,KAAQ6F,EAAMw2C,QAAY,KAAI,IAAM8wU,EAAW,OAASl0X,EAAS4M,EAAMw2C,QAAY,MAAK,IAAM8wU,EACrG,OAASl0X,EAAS4M,EAAMw2C,QAAY,MAAK,IAAMgxU,EAAW,MAASxnX,EAAMw2C,QAAY,KAAI,IAAMgxU,EAAW,MAC1GC,GACA/mY,GAAMsf,EAAM5hB,QAAQsC,GAAK,cAAgB2O,EACzC2rB,KAAQ8rW,EAAkBlzW,MAC1B/oB,QAAWi8X,EAAkBj8X,QAC7BqwB,OAAU,cACVyG,eAAgB3hB,EAAMwqE,UACtB7+D,EAAKxR,EACLysT,mBAAoB,IAExBrzS,GAASn2B,KAAKwjC,UAAW6mW,EAAYt3S,IAKzCo2S,EAAkB9tY,UAAUivY,WAAa,SAAU3yW,EAAQ13B,GAMvD,IAAK,IALDupY,EAAQxpY,KAAKwjC,UACb3G,EAAI78B,KAAKwjC,UAAU3V,SAASw+C,aAAc/oE,GAAIkmY,EAAMxoY,QAAQsC,GAAK,eACjEgwU,YAAa,QAAUtzU,KAAK86W,OAAS,MACrCuvB,EAAa,IAAIj0W,GAAWozW,EAAMxoY,QAAQsC,GAAK,kBAAmB,cAAerD,EAAKmtF,UAAWntF,EAAK29B,KAAM4rW,EAAM/7X,SAClH8gB,EAAI,GACCpyB,EAAI,EAAG0F,EAAM81B,EAAOl7B,OAAQN,EAAI0F,EAAK1F,IAChC,IAANA,IACAoyB,EAAI,KAAOoJ,EAAO,GAAG5qB,EAAI,IAAM4qB,EAAOx7B,GAAG6Q,EAAI,KAEjDuhB,GAAK,KAAOoJ,EAAOx7B,GAAG4Q,EAAI,IAAM4qB,EAAOx7B,GAAG6Q,EAAI,IAElDq9X,EAAW97W,EAAIA,EACf4H,GAASn2B,KAAKwjC,UAAW6mW,EAAYxtW,GACrC78B,KAAKwjC,UAAUlS,UAAU3vB,YAAYk7B,IAMzCssW,EAAkB9tY,UAAUkvY,UAAY,SAAU5yW,EAAQ13B,GACtD,IAOIuqY,EACAC,EAOA/uW,EACAD,EAhBA+tW,EAAQxpY,KAAKwjC,UACbztB,EAASyzX,EAAM7zW,cAAc5f,QAAUyzX,EAAMpwU,QAAQ1sD,IAAM88X,EAAMpwU,QAAQzsD,QACzEqJ,EAAQwzX,EAAM7zW,cAAc3f,OAASwzX,EAAMpwU,QAAQ5sD,KAAOg9X,EAAMpwU,QAAQ3sD,OACxE6mG,EAAQv9F,GAAUC,EAASD,EAAS,EAAIC,EAAQ,EAChDI,EAAIozX,EAAM7zW,cAAc3f,MAAQ,EAChCK,EAAImzX,EAAM7zW,cAAc5f,OAAS,EACjCszD,EAAM,EAGNvrC,EAAS79B,EAAKqkC,OAAO9N,MACrB/oB,EAAU+7X,EAAM/7X,QAChBokC,EAAc5xC,EAAKqkC,OAAOtuB,MAC1B85E,EAAU05S,EAAM16W,QAAc,OAAI06W,EAAM16W,SAAW,UAAW,UAAW,UAAW,UAAW,UAC/F,UAAW,UAAW,UAAW,UAAW,WAC5CikE,EAAQ/yF,KAAKwjC,UAAU3V,SAASw+C,aAAc/oE,GAAIkmY,EAAMxoY,QAAQsC,GAAK,iBAGrEkiX,EAAY9mX,QAAei5B,GAC/B,GAAI6xW,EAAMkB,gBAAkBlB,EAAMmB,cAAe,CAC7C,IAAIC,EAAgBplB,EAAU5tV,IAAI,SAAUurB,GAAK,OAAOA,EAAEwlS,OAC1DjtT,EAAMrvB,KAAK0T,IAAIxkB,MAAM,KAAMqvY,GAC3BnvW,EAAOpvB,KAAKC,IAAI/Q,MAAM,KAAMqvY,GAEhC5qY,KAAK6qY,wBACL,IAAK,IAAI1uY,EAAI,EAAG2uY,EAAQ,GAAIC,OAAQ,EAAQr8S,OAAO,EAAQvyF,EAAIw7B,EAAOl7B,OAAQN,IAAK,CAG/E4uY,GAFAD,GAASzhU,IACTA,EAAM1xC,EAAOx7B,GAAW,QAExBquY,GAASM,EAAQ,IAAMz+X,KAAK+Q,GAAK,IACjCqtX,GAASM,EAAQ,IAAM1+X,KAAK+Q,GAAK,IACjCua,EAAOx7B,GAAU,MAAIquY,EACrB7yW,EAAOx7B,GAAW,OAAIsuY,EACtB/7S,EAAQrlB,EAAM,IAAO,IAAM,IAC3B,IAAIt7C,EAAO4J,EAAOx7B,GAAgB,aAC9BgtC,GAAI/yB,EAAKk9F,EAAOjnG,KAAKoV,IAAI+oX,GAASphW,GAAI/yB,EACjCi9F,EAAOjnG,KAAKqV,IAAI8oX,GAASQ,GAAI50X,EAAKk9F,EAAOjnG,KAAKoV,IAAIgpX,GAASQ,GAAI50X,EAAKi9F,EAAOjnG,KAAKqV,IAAI+oX,IAEzFS,EAAU,KAAO90X,EAAI,IAAMC,EAAI,MAAQ0X,EAAS,GAAI,IAAMA,EAAS,GAAI,MAAQulF,EAAO,IACtFA,EAAO,MAAQ5kB,EAAO,MAAQ3gE,EAAS,GAAI,IAAMA,EAAS,GAAI,KAC9Ds8W,GACA/mY,GAAMkmY,EAAMxoY,QAAQsC,GAAK,kBAAoBnH,EAC7CsR,QAAWA,EACXmwB,KAAQkyD,EAAO3zF,EAAI2zF,EAAOrzF,QAC1BqhC,OAAUA,EACVyG,eAAgBsN,EAChBtjB,EAAK28W,EACL1hE,mBAAoB,IAExBxpU,KAAKmrY,mBAAmBxzW,EAAOx7B,GAAIqtY,EAAOa,EAAYluY,EAAGs/B,EAAMC,EAAK/D,EAAOl7B,QAC3E,IAAI2uY,EAAYprY,KAAKqrY,mBAAmB,iBAAkBlvY,EAAGkuY,EAAWzsW,MAAQpH,MAAOsH,EAAQ9nB,MAAO67B,IAItG,GAHAw4V,EAAWzsW,KAAOwtW,EAAUxtW,KAC5BysW,EAAWvsW,OAASstW,EAAU9mW,OAAO9N,MACrC6zW,EAAW,gBAAkBe,EAAU9mW,OAAOtuB,OACzCo1X,EAAUvyW,OAAQ,CACL1C,GAASn2B,KAAKwjC,UAAW6mW,EAAYt3S,GAC3CvvF,aAAa,aAAcgmY,EAAMjmU,WAAWpnE,GAAGqtY,EAAMt6D,OAAS,MAAQv3S,EAAOx7B,GAAGwsV,MAE5F,IAAI2iD,EAAab,EAAQD,EACrBjzU,GACAxqD,EAAGqJ,EAAMk9F,EAAO,EAAKjnG,KAAKoV,IAAI+oX,EAASc,EAAa,GACpDt+X,EAAGqJ,EAAMi9F,EAAO,EAAKjnG,KAAKqV,IAAI8oX,EAASc,EAAa,IAExD3zW,EAAOx7B,GAAGuxB,SAAS3gB,EAAIwqD,EAAIxqD,EAC3B4qB,EAAOx7B,GAAGuxB,SAAS1gB,EAAIuqD,EAAIvqD,EAE/BhN,KAAKwjC,UAAUlS,UAAU3vB,YAAYoxF,IAKzCo2S,EAAkB9tY,UAAU8vY,mBAAqB,SAAUp9W,EAAMy7W,EAAOzzS,EAAQ55F,EAAGs/B,EAAMC,EAAKj/B,GACtFsxB,EAAK46T,KAAO,GAAK6gD,EAAM+B,qBACvBx1S,EAAOn4D,KAAO4rW,EAAM+B,mBACpBvrY,KAAK6qY,qBAAqBrmY,KAAKrI,IAEzB,IAANA,GAAWqtY,EAAMgC,iBACjBz1S,EAAOn4D,KAAO4rW,EAAMgC,gBACpBxrY,KAAKyrY,gBAAkBtvY,GAEjBA,IAAOM,EAAS,GAAO+sY,EAAMkC,gBACnC31S,EAAOn4D,KAAO4rW,EAAMkC,cACpB1rY,KAAK2rY,cAAgBxvY,GAErB4xB,EAAK46T,OAASltT,GAAQ+tW,EAAMkB,gBAC5B30S,EAAOn4D,KAAO4rW,EAAMkB,eACpB1qY,KAAK4rY,eAAiBzvY,GAEjB4xB,EAAK46T,OAASjtT,GAAO8tW,EAAMmB,gBAChC50S,EAAOn4D,KAAO4rW,EAAMmB,cACpB3qY,KAAK6rY,cAAgB1vY,IAM7BgtY,EAAkB9tY,UAAUq9X,WAAa,SAAU/gW,EAAQ13B,GAOvD,IAAK,IANDupY,EAAQxpY,KAAKwjC,UACbuvD,EAAQ/yF,KAAKwjC,UAAU3V,SAASw+C,aAAc/oE,GAAIkmY,EAAMxoY,QAAQsC,GAAK,eACrEgwU,YAAa,QAAUtzU,KAAK86W,OAAS,MACrCuvB,EAAa,IAAIj0W,GAAWozW,EAAMxoY,QAAQsC,GAAK,kBAAmBrD,EAAK29B,KAAM,EAAG,cAAe4rW,EAAM/7X,SACrG8gB,EAAI,GACJnf,EAAM,GACDjT,EAAI,EAAG0F,EAAM81B,EAAOl7B,OAAQN,EAAI0F,EAAK1F,IAChC,IAANA,EACAiT,GAAO,KAAOuoB,EAAOx7B,GAAG4Q,EAAI,IAAM4qB,EAAOx7B,GAAG6Q,EAAI,KAGhDuhB,EAAI,KAAOoJ,EAAOx7B,GAAG4Q,EAAI,IAAM/M,KAAK8rY,WAAa,IACjD18X,EAAM,KAAOuoB,EAAOx7B,GAAG4Q,EAAI,IAAM4qB,EAAOx7B,GAAG6Q,EAAI,KAEnDuhB,GAAK,KAAOoJ,EAAOx7B,GAAG4Q,EAAI,IAAM4qB,EAAOx7B,GAAG6Q,EAAI,IAC1C7Q,IAAO0F,EAAM,IACb0sB,GAAK,KAAOoJ,EAAOx7B,GAAG4Q,EAAI,IAAM/M,KAAK8rY,WAAa,MAG1DzB,EAAW97W,EAAIA,EACf4H,GAASn2B,KAAKwjC,UAAW6mW,EAAYt3S,GACrCs3S,EAAa,IAAIj0W,GAAWozW,EAAMxoY,QAAQsC,GAAK,sBAAuB,cAAerD,EAAKqkC,OAAOtuB,MAAO/V,EAAKqkC,OAAO9N,MAAOgzW,EAAM/7X,QAAS,GAAI2B,GAC9I+mB,GAASn2B,KAAKwjC,UAAW6mW,EAAYt3S,GACrC/yF,KAAKwjC,UAAUlS,UAAU3vB,YAAYoxF,IAKzCo2S,EAAkB9tY,UAAU0wY,aAAe,SAAUp0W,EAAQ13B,GACzD,IAII+rY,EACAC,EALAzC,EAAQxpY,KAAKwjC,UACbgiV,EAAY9mX,QAAei5B,GAC3Bo7D,EAAQ/yF,KAAKwjC,UAAU3V,SAASw+C,aAAc/oE,GAAIkmY,EAAMxoY,QAAQsC,GAAK,eACrEgwU,YAAa,QAAUtzU,KAAK86W,OAAS,MAGzC,GAAI96W,KAAKwjC,UAAUknW,gBAAkB1qY,KAAKwjC,UAAUmnW,cAAe,CAC/D,IAAIuB,EAAa1mB,EAAU5tV,IAAI,SAAUurB,GAAK,OAAOA,EAAEgpV,iBACvDF,EAAU5/X,KAAK0T,IAAIxkB,MAAM,KAAM2wY,GAC/BF,EAAS3/X,KAAKC,IAAI/Q,MAAM,KAAM2wY,GAElC,IAGIn+W,EAHAzqB,EAAKkmY,EAAMxoY,QAAQsC,GAAK,qBACxBw/X,EAAc,IAAI5+D,GAAW5gU,EAAI,GAAIrD,EAAKqkC,OAAQklW,EAAM/7X,QAAS,MACjE2+X,EAAgB5C,EAAM16W,QAAQryB,OAE9BoF,EAAM81B,EAAOl7B,OACjBuD,KAAK6qY,wBACL,IAAK,IAAI1uY,EAAI,EAAGA,EAAI0F,EAAK1F,IAAK,CAC1B4xB,EAAO4J,EAAOx7B,GACd2mY,EAAYx/X,GAAKA,EAAKnH,EACtB2mY,EAAYllW,KAAO,EAAkB4rW,EAAM16W,QAAQ3yB,EAAIiwY,GAAiBnsY,EAAK29B,KAC7EklW,EAAYzvW,KAAO,IAAI6C,GAAKnI,EAAKhhB,EAAGghB,EAAK/gB,EAAG+gB,EAAK/X,MAAO+X,EAAKhY,QAC7D/V,KAAKqsY,iBAAgB,EAAMt+W,EAAMy7W,EAAO1G,EAAa3mY,EAAG8vY,EAASD,EAAQnqY,GACzEksB,EAAKL,SAAS1gB,EAAK+gB,EAAKo+W,gBAAkBnsY,KAAK8rY,WAAc/9W,EAAK/gB,EAAK+gB,EAAK/gB,EAAI+gB,EAAKhY,OACrFgY,EAAKL,SAAS3gB,EAAIghB,EAAKhhB,EAAKghB,EAAK/X,MAAQ,EACzC8sX,EAAYhlW,OAAS79B,EAAKqkC,OAAO9N,MAASv2B,EAAKqkC,OAAY,MAAIw+V,EAAYllW,KAC3E,IAAIwtW,EAAYprY,KAAKqrY,mBAAmB,iBAAkBlvY,EAAG2mY,EAAYllW,MAAQpH,MAAOssW,EAAYhlW,OAAQ9nB,MAAO/V,EAAKqkC,OAAOtuB,QAI/H,GAHA8sX,EAAYllW,KAAOwtW,EAAUxtW,KAC7BklW,EAAYhlW,OAASstW,EAAU9mW,OAAO9N,MACtCssW,EAAY,gBAAkBsI,EAAU9mW,OAAOtuB,OAC1Co1X,EAAUvyW,OAAQ,CACL8K,GAAc6lW,EAAO1G,EAAa/vS,GACxCvvF,aAAa,aAAcgmY,EAAMjmU,WAAWpnE,GAAGqtY,EAAMt6D,OAAS,MAAQv3S,EAAOx7B,GAAGwsV,OAGhG3oV,KAAKwjC,UAAUlS,UAAU3vB,YAAYoxF,IAKzCo2S,EAAkB9tY,UAAUixY,cAAgB,SAAU30W,EAAQ13B,GAS1D,IAAK,IAHD8tB,EALAy7W,EAAQxpY,KAAKwjC,UACbuvD,EAAQ/yF,KAAKwjC,UAAU3V,SAASw+C,aAAc/oE,GAAIkmY,EAAMxoY,QAAQsC,GAAK,eACrEgwU,YAAa,QAAUtzU,KAAK86W,OAAS,MACrCx3W,EAAKkmY,EAAMxoY,QAAQsC,GAAK,sBACxB0P,EAAU,IAAIkxT,GAAW5gU,EAAI,GAAIrD,EAAKqkC,OAAQklW,EAAM/7X,QAAS,MAE7D5L,EAAM81B,EAAOl7B,OACb2vY,EAAgB5C,EAAM16W,QAAQryB,OACzBN,EAAI,EAAGA,EAAI0F,EAAK1F,IAAK,CAC1B4xB,EAAO4J,EAAOx7B,GACd6W,EAAQ1P,GAAKA,EAAKnH,EAClB6W,EAAQ4qB,KAAO,EAAkB4rW,EAAM16W,QAAQ3yB,EAAIiwY,GAAmBr+W,EAAK46T,OAAS3oV,KAAK+5W,UACpF/5W,KAAKwjC,UAAU+oW,eAAiB,UAAex+W,EAAK46T,KAAO3oV,KAAK+5W,UAAa95W,EAAK29B,KAClF4rW,EAAM+B,oBAAsB,UACjCv4X,EAAQ8qB,OAAU79B,EAAKqkC,OAAY,MAAKrkC,EAAKqkC,OAAY,MAAItxB,EAAQ4qB,KACrE5qB,EAAQqgB,KAAO,IAAI6C,GAAKnI,EAAKhhB,EAAGghB,EAAK/gB,EAAG+gB,EAAK/X,MAAO+X,EAAKhY,QACzDgY,EAAKL,SAAS3gB,EAAIghB,EAAKhhB,EAAKghB,EAAK/X,MAAQ,EACzC+X,EAAKL,SAAS1gB,EAAK+gB,EAAK46T,MAAQ3oV,KAAK+5W,UAAchsV,EAAM,EAAKA,EAAK/gB,EAAI+gB,EAAKhY,OAC5E,IAAIq1X,EAAYprY,KAAKqrY,mBAAmB,iBAAkBlvY,EAAG6W,EAAQ4qB,MAAQpH,MAAOxjB,EAAQ8qB,OAAQ9nB,MAAO/V,EAAKqkC,OAAOtuB,QAIvH,GAHAhD,EAAQ4qB,KAAOwtW,EAAUxtW,KACzB5qB,EAAQ8qB,OAASstW,EAAU9mW,OAAO9N,MAClCxjB,EAAQ,gBAAkBo4X,EAAU9mW,OAAOtuB,OACtCo1X,EAAUvyW,OAAQ,CACL8K,GAAc6lW,EAAOx2X,EAAS+/E,GACpCvvF,aAAa,aAAcgmY,EAAMjmU,WAAWpnE,GAAGqtY,EAAMt6D,OAAS,MAAQv3S,EAAOx7B,GAAGwsV,OAGhG3oV,KAAKwjC,UAAUlS,UAAU3vB,YAAYoxF,IAEzCo2S,EAAkB9tY,UAAUg6U,aAAe,SAAU19S,GACjD,IAAI6xW,EAAQxpY,KAAKwjC,UACbspS,EAAS08D,EAAMgD,eACnB,GAAoB,QAAfhD,EAAM9iY,MAAiC,YAAf8iY,EAAM9iY,MAAuBomU,EAAOt1S,QAAQ/6B,OAAzE,CAGA,IAKIsxB,EAGAk+W,EACAD,EATAxmB,EAAY9mX,QAAei5B,GAC3Bo7D,EAAQ/yF,KAAKwjC,UAAU3V,SAASw+C,aAChC/oE,GAAIkmY,EAAMxoY,QAAQsC,GAAK,sBACvBgwU,YAAa,QAAUtzU,KAAK86W,OAAS,MAGrCx3W,EAAKkmY,EAAMxoY,QAAQsC,GAAK,qBACxByyF,EAAS,IAAIouO,GAAa,GAAI2I,EAAOlvS,KAAMkvS,EAAOxoS,OAAQwoS,EAAOr/T,QAAS,EAAG,EAAGq/T,EAAOhgT,KAAO,EAAG,IAGjG0K,EAAUs1S,EAAOt1S,QAAQrW,OAC7B,GAAKqW,EAAQ5hB,cAAcrX,QAAQ,SAAW,GAAOi5B,EAAQ5hB,cAAcrX,QAAQ,QAAU,EAAI,CAC7F,IAAI2tY,EAAa1mB,EAAU5tV,IAAI,SAAUurB,GAAK,OAAOA,EAAEgpV,iBACvDF,EAAU5/X,KAAK0T,IAAIxkB,MAAM,KAAM2wY,GAC/BF,EAAS3/X,KAAKC,IAAI/Q,MAAM,KAAM2wY,GAElClsY,KAAK6qY,wBACL,IAAK,IAAI1uY,EAAI,EAAGs+B,EAAW9C,EAAOl7B,OAAQN,EAAIs+B,EAAUt+B,IAAK,CACzD4xB,EAAO4J,EAAOx7B,GACd45F,EAAOzyF,GAAKA,EAAKnH,EACjB45F,EAAO1nE,GAAKN,EAAKL,SAAS3gB,EAC1BgpF,EAAOznE,GAAKP,EAAKL,SAAS1gB,EAC1B+oF,EAAOn4D,KAAOkvS,EAAOlvS,KACrB,IAAImuE,EAAUv0E,EAAQ5hB,cAAcrX,QAAQ,QAAU,EACtDwtG,EAAS/rG,KAAKqsY,gBAAgBtgS,EAAQh+E,EAAMy7W,EAAOzzS,EAAQ55F,EAAG8vY,EAASD,EAAQvxW,EAAUjD,EAAQ5hB,eACjGmgF,EAAOj4D,OAASgvS,EAAOxoS,OAAO9N,OAASu/D,EAAOn4D,KAC9C,IAAI6uW,GACAh1W,KAAM,kBAAmBoB,QAAQ,EAAOyL,QAAU9N,MAAOu/D,EAAOj4D,OAAQ9nB,MAAO82T,EAAOxoS,OAAOtuB,OAAS4nB,KAAMm4D,EAAOn4D,KACnHxF,WAAYj8B,EAAGqnC,UAAWxjC,KAAKwjC,UAAWz2B,EAAGgpF,EAAO1nE,GAAIrhB,EAAG+oF,EAAOznE,GAAIxB,KAAMggT,EAAOhgT,MAGvF,GADA9sB,KAAKwjC,UAAUhd,QAAQimX,EAAWh1W,KAAMg1W,GACpC1gS,IAAW0gS,EAAW5zW,OAAQ,CAC9Bk9D,EAAOn4D,KAAO6uW,EAAW7uW,KACzBm4D,EAAOj4D,OAAS2uW,EAAWnoW,OAAO9N,MAClCu/D,EAAO,gBAAkB02S,EAAWnoW,OAAOtuB,MAC3C+/E,EAAOn5D,EAAI6vW,EAAW3/W,KAAO,EACf4W,GAAW8lW,EAAOzzS,EAAQhD,GAChCvvF,aAAa,aAAcgmY,EAAMjmU,WAAWpnE,GAAGqtY,EAAMt6D,OAAS,MAAQv3S,EAAOx7B,GAAGwsV,OAGhG3oV,KAAKwjC,UAAUlS,UAAU3vB,YAAYoxF,KAKzCo2S,EAAkB9tY,UAAUgxY,gBAAkB,SAAUtgS,EAAQh+E,EAAMy7W,EAAOzzS,EAAQ55F,EAAG8vY,EAASD,EAAQvvY,EAAQ+6B,GA2B7G,YA1BgB,IAAZA,IAAsBA,EAAU,IAChCzJ,EAAKo+W,eAAiBnsY,KAAK8rY,aAC3B/1S,EAAOn4D,KAAO4rW,EAAM+B,oBAAsBx1S,EAAOn4D,KACjD59B,KAAK6qY,qBAAqBrmY,KAAKrI,GAC/B4vG,EAASA,GAAWv0E,EAAQj5B,QAAQ,aAAe,GAE7C,IAANpC,GACA45F,EAAOn4D,KAAO4rW,EAAMgC,iBAAmBz1S,EAAOn4D,KAC9C59B,KAAKyrY,gBAAkBtvY,EACvB4vG,EAASA,GAAWv0E,EAAQj5B,QAAQ,UAAY,GAE1CpC,IAAOM,EAAS,IACtBs5F,EAAOn4D,KAAO4rW,EAAMkC,eAAiB31S,EAAOn4D,KAC5C59B,KAAK2rY,cAAgBxvY,EACrB4vG,EAASA,GAAWv0E,EAAQj5B,QAAQ,QAAU,GAE9CwvB,EAAKo+W,iBAAmBF,GACxBl2S,EAAOn4D,KAAO4rW,EAAMkB,gBAAkB30S,EAAOn4D,KAC7C59B,KAAK4rY,eAAiBzvY,EACtB4vG,EAASA,GAAWv0E,EAAQj5B,QAAQ,SAAW,GAE1CwvB,EAAKo+W,iBAAmBH,IAC7Bj2S,EAAOn4D,KAAO4rW,EAAMmB,eAAiB50S,EAAOn4D,KAC5C59B,KAAK6rY,cAAgB1vY,EACrB4vG,EAASA,GAAWv0E,EAAQj5B,QAAQ,QAAU,GAE3CwtG,GAKXo9R,EAAkB9tY,UAAU0uY,YAAc,SAAUpyW,GAChD,IAAI6xW,EAAQxpY,KAAKwjC,UACby9C,EAAYuoT,EAAMkD,kBAClBl2W,EAAyB,iBAAhBgzW,EAAMtuX,MAA4B,UAAY,UAE3D,GADAsb,EAASyqD,EAAUmjN,UAAe,MAAInjN,EAAUmjN,UAAU5tQ,MAAQA,EAC9C,YAAfgzW,EAAM9iY,MAAuBu6E,EAAUzpD,QAAQ/6B,OAApD,CAoBA,IAAK,IAbDogC,EACA9O,EALAy3V,EAAY9mX,QAAei5B,GAC3Br0B,EAAKkmY,EAAMxoY,QAAQsC,GAAK,oBACxByvF,EAAQ/yF,KAAKwjC,UAAU3V,SAASw+C,aAAc/oE,GAAIkmY,EAAMxoY,QAAQsC,GAAK,qBACrEoB,MAAO,wBAAyB4uU,YAAa,QAAUtzU,KAAK86W,OAAS,MAGrE6xB,EAASrpY,EAAK,QACdspY,EAAStpY,EAAK,QACdyyF,EAAS,IAAIx/D,GAAW,GAAI,EAAG,EAAG,SAAU,GAAI,UAChDP,EAAairD,EAAUmjN,UACvB8nG,EAAa1mB,EAAU5tV,IAAI,SAAUurB,GAAK,OAAOA,EAAEgpV,iBACnDF,EAAU5/X,KAAK0T,IAAIxkB,MAAM,KAAM2wY,GAC/BF,EAAS3/X,KAAKC,IAAI/Q,MAAM,KAAM2wY,GAE9B9yU,EAA8B,gBAAnB6nB,EAAUrjD,MAA0BqjD,EAAU38C,OAAOtuB,MAAS,EAAI,EAC7E8W,EAAON,GAAY,yBAA0BwJ,GAC7C8sW,EAAc,IAAI5+D,GAAW,GAAIjjP,EAAUrjD,KAAMqjD,EAAU38C,OAAQ28C,EAAUxzE,QAAS,MACjFtR,EAAI,EAAGgwU,EAAWx0S,EAAOl7B,OAAQN,EAAIgwU,EAAUhwU,IAAK,CACzD4xB,EAAO4J,EAAOx7B,GACd45F,EAAOzyF,GAAKqpY,EAASxwY,EACrB45F,EAAOhpF,EAAIghB,EAAKL,SAAS3gB,EAAIk0E,EAAUt1E,OAAOoB,EAC9CgpF,EAAO/oF,GAAqB,QAAfw8X,EAAM9iY,KAAkBqnB,EAAKL,SAAS1gB,EAAM+gB,EAAKo+W,eAAiBnsY,KAAK8rY,WAAe/9W,EAAKL,SAAS1gB,EAC5G8f,EAAK/W,OAAS,EATX,EASwBqjD,EAAYrrC,EAAKL,SAAS1gB,EAAK8f,EAAK/W,OAAS,EATrE,EASkFqjD,GAAa6nB,EAAUt1E,OAAOqB,EACxH+oF,EAAOtpE,KAA6B,KAArBw0D,EAAUjlD,OAAiBh8B,KAAK6sY,UAAU5rT,EAAUjlD,OAAQh8B,KAAKwjC,UAAU+/B,WAAWpnE,IACjG4xB,EAAK46T,KAAKz7U,WACd,IAAI4/X,GACAr1W,KAAM,qBAAsBoB,QAAQ,EAAOyL,OAAQ28C,EAAU38C,OAAQ1G,KAAMqjD,EAAUrjD,KAAMxF,WAAYj8B,EACvGqnC,UAAWxjC,KAAKwjC,UAAWz2B,EAAGgpF,EAAOhpF,EAAGC,EAAG+oF,EAAO/oF,EAAGyf,KAAMspE,EAAOtpE,KAAM+J,MAAOA,GAEnFx2B,KAAKwjC,UAAUhd,QAAQsmX,EAAUr1W,KAAMq1W,GACvChgX,EAAON,GAAYsgX,EAAUrgX,KAAMuJ,GACnC+/D,EAAOtpE,KAAOqgX,EAAUrgX,KACxB,IAAIs/E,EAAU9qB,EAAUzpD,QAAQrW,OAAOvL,cAAcrX,QAAQ,QAAU,GACvEwtG,EAAS/rG,KAAK+sY,gBAAgBhhS,EAAQh+E,EAAM5xB,EAAG8kF,EAAWkrP,EAAU8/D,EAASD,MAC9Dc,EAAUj0W,SACrBiqW,EAAYx/X,GAAKspY,EAASzwY,EAC1B2mY,EAAYllW,KAAOkvW,EAAUlvW,KAC7BklW,EAAYhlW,OAASgvW,EAAUxoW,OAAO9N,MACtCssW,EAAY,gBAAkBgK,EAAUxoW,OAAOtuB,MAC/C+/E,EAAOhpF,EAAI+/X,EAAU//X,EACrBgpF,EAAO/oF,EAAI8/X,EAAU9/X,EACrB81X,EAAYzvW,KAAO,IAAI6C,GAAK6/D,EAAOhpF,GAAM+f,EAAK9W,MAAQ,EAAKojD,GAAW28B,EAAO/oF,EAAIosD,EAAWtsC,EAAK/W,OAAS,KAAQ+W,EAAK9W,MAAmB,EAAVojD,EAActsC,EAAK/W,OAAoB,EAAVqjD,GAE7Jz1B,GAAc6lW,EAAO1G,EADrBjmW,EAAI78B,KAAKwjC,UAAU3V,SAASw+C,aAAc/oE,GAAIA,EAAK,IAAMnH,KAEzDonC,GAAkBwyD,EAAQ//D,EAAY82W,EAAUt2W,MAAOqG,GACvDk2D,EAAMpxF,YAAYk7B,IAG1B78B,KAAKwjC,UAAUlS,UAAU3vB,YAAYoxF,KAKzCo2S,EAAkB9tY,UAAU0xY,gBAAkB,SAAUhhS,EAAQh+E,EAAM5xB,EAAGkX,EAAO5W,EAAQwvY,EAASD,GAC7F,IAAIltB,EAAezrW,EAAMmkB,QAAQrW,OAAOvL,cAgBxC,OAfImY,EAAKo+W,eAAiBnsY,KAAK8rY,aAC3B//R,EAASA,GAAW+yQ,EAAavgX,QAAQ,aAAe,GAElD,IAANpC,EACA4vG,EAASA,GAAW+yQ,EAAavgX,QAAQ,UAAY,EAE/CpC,IAAOM,EAAS,IACtBsvG,EAASA,GAAW+yQ,EAAavgX,QAAQ,QAAU,GAEnDwvB,EAAKo+W,iBAAmBF,EACxBlgS,EAASA,GAAW+yQ,EAAavgX,QAAQ,SAAW,EAE/CwvB,EAAKo+W,iBAAmBH,IAC7BjgS,EAASA,GAAW+yQ,EAAavgX,QAAQ,QAAU,GAEhDwtG,GAKXo9R,EAAkB9tY,UAAUwxY,UAAY,SAAU7wW,EAAQx/B,GACtD,GAAIiB,EAAkBu+B,GAClB,OAAO,KAGX,IAAK,IAAI59B,EAAK,EAAGC,EADNC,OAAOhB,KAAKd,GACS4B,EAAKC,EAAO5B,OAAQ2B,IAAM,CACtD,IAAIf,EAAMgB,EAAOD,GACjB49B,EAASA,EAAO9+B,MAAM,KAAOG,EAAM,KAAK8jB,KAAK3kB,EAAKa,IAEtD,OAAO2+B,GAKXmtW,EAAkB9tY,UAAUguY,gBAAkB,WAC1CrpY,KAAKgtY,WAAWhtY,KAAKwjC,UAAU4lW,gBAKnCD,EAAkB9tY,UAAU4xY,YAAc,SAAUzwY,EAAMuQ,EAAGrG,GACzD,IAAIvE,EAAW,EACX64B,EAAKx+B,EAAK,GAAGuQ,GACbmuB,EAAKz9B,EAAkBjB,EAAK,SAAMrB,EAAYqB,EAAK,GAAGuQ,GAC1D,IAAKtP,EAAkBu9B,KAAQv9B,EAAkBy9B,GAAK,CAClD,IACIg8T,KADOx4V,KAAWlC,GAEjB4C,QAAQ,SAAUpC,GACdS,EAAkBT,EAAM+P,KACzBmqV,EAAY1yV,KAAKxH,KAGzBk6V,EAAYr/T,KAAK,SAAUsrB,EAAGrmB,GAC1B,OAAIr/B,EAAkB0lD,EAAEp2C,KAAOtP,EAAkBq/B,EAAE/vB,IACxC,EAEJo2C,EAAEp2C,GAAK+vB,EAAE/vB,KAEpB5K,EAAW+0V,EAAY,GAAGnqV,GAAKmqV,EAAY,GAAGnqV,GAElD,OAAO5K,GAMXgnY,EAAkB9tY,UAAU2xY,WAAa,SAAUxwY,GAC/C,IACI8P,EACAyT,EACAovB,EACAE,EAEAthB,EANAnL,EAAQ5iB,KAAKwjC,UAKb0pW,EAAkB1wY,EAAKC,OAEvB0wY,EAAc,EACdC,EAAiB5uY,MAAMC,QAAQjC,IAA4B,iBAAZA,EAAK,GACxD,GAAI4wY,EACA,GAAmB,QAAfxqX,EAAMlc,KACN,IAAK,IAAIvK,EAAI,EAAGA,EAAI+wY,EAAiB/wY,IACjCgxY,GAAe9gY,KAAKE,IAAI/P,EAAKL,SAIjCmQ,EAAMD,KAAKC,IAAI/Q,MAAM,KAAMiB,GAC3BujB,EAAM1T,KAAK0T,IAAIxkB,MAAM,KAAMiB,GAC3B2yC,EAAO,EACPE,EAAO69V,EAAkB,OAI7B,GAAmB,QAAftqX,EAAMlc,KACN,IAASvK,EAAI,EAAGA,EAAI+wY,EAAiB/wY,IACjCgxY,GAAe9gY,KAAKE,IAAI/P,EAAKL,GAAGymB,EAAMuQ,YAGzC,CACD,GAAI11B,EAAkBjB,EAAK,GAAGomB,EAAMssT,QAAS,CACzC,IAAIm+D,EAAM7wY,EAAKo7B,IAAI,SAAUmuE,GAAK,OAAOA,EAAEnjF,EAAMuQ,SACjD7mB,EAAMD,KAAKC,IAAI/Q,MAAM,KAAM8xY,GAC3BttX,EAAM1T,KAAK0T,IAAIxkB,MAAM,KAAM8xY,QAK3B/gY,GADAyhB,GADAA,EAAOrvB,KAAWlC,IACNq7B,KAAK,SAAUsrB,EAAGrmB,GAAK,OAAOqmB,EAAEvgC,EAAMuQ,OAAS2J,EAAEla,EAAMuQ,UACxDpF,EAAKtxB,OAAS,GAAGmmB,EAAMuQ,OAClCpT,EAAMgO,EAAK,GAAGnL,EAAMuQ,OAEnB11B,EAAkBjB,EAAK,GAAGomB,EAAMssT,SAMjC//R,EAAO,EACPE,EAAO69V,EAAkB,IALzB79V,GADAthB,EAAOA,EAAK8J,KAAK,SAAUsrB,EAAGrmB,GAAK,OAAOqmB,EAAEvgC,EAAMssT,OAASpyS,EAAEla,EAAMssT,UACvDnhT,EAAKtxB,OAAS,GAAGmmB,EAAMssT,OACnC//R,EAAOphB,EAAK,GAAGnL,EAAMssT,QAQjC,IAAI/zS,EACAplB,EACAC,EAEAilB,EAEAnH,EAHAkH,EAAK,EAELo+B,EAAUx2C,EAAMw2C,QAEhBjjD,EAAOyM,EAAM+mX,aACb3sY,EAAQmZ,EAAKnZ,MACjB,GAAmB,QAAf4lB,EAAMlc,KAAgB,CACtB1G,KAAK6uI,UAAYq+P,EACjBn3X,EAAS6M,EAAM+S,cAAc5f,QAAUqjD,EAAQzsD,OAASysD,EAAQ1sD,KAChEsJ,EAAQ4M,EAAM+S,cAAc3f,OAASojD,EAAQ5sD,KAAO4sD,EAAQ3sD,OAC5D4iC,EAAO5xC,EAAkB0Y,EAAKk5B,MAAQA,EAAOl5B,EAAKk5B,KAClDF,EAAO1xC,EAAkB0Y,EAAKg5B,MAAQA,EAAOh5B,EAAKg5B,KAClD7iC,EAAM7O,EAAkB0Y,EAAKm5B,MAAQhjC,EAAM6J,EAAKm5B,KAChDvvB,EAAMtiB,EAAkB0Y,EAAKi5B,MAAQrvB,EAAM5J,EAAKi5B,KAChD,IAAI5Y,EAAyB,iBAAhB5T,EAAM1H,MAA4B,UAAY,UAC3Dsb,EAASrgB,EAAKm3X,aAAkB,MAAIn3X,EAAKm3X,aAAa92W,MAAQA,EAC9D,IAAIjpB,GACAkqB,KAAM,gBAAiBoB,QAAQ,EAAO2K,UAAW5gB,EAAOysB,KAAMA,EAAMF,KAAMA,EAAMG,KAAMhjC,EAAK8iC,KAAMrvB,EACjG/iB,MAAOmZ,EAAKnZ,MAAOkzX,UAAW15V,EAAO42D,UAAWj3E,EAAKm3X,aAAat3X,OAGtE,GADA4M,EAAM4D,QAAQ,gBAAiBjZ,GAC3BA,EAAUsrB,OAEV,YADA74B,KAAK6pV,kBAGTx6S,EAAO9hC,EAAU8hC,KACjBF,EAAO5hC,EAAU4hC,KACjB7iC,EAAMiB,EAAU+hC,KAChBvvB,EAAMxS,EAAU6hC,KAChBpyC,EAAQgD,KAAK+5W,UAAYxsW,EAAUvQ,MACnCgD,KAAKutY,UAAYhgY,EAAU2iX,UAC3BlwX,KAAKwtY,UAAYjgY,EAAU6/E,UAC3B,IAAIqgT,EAAQp+V,EAAOF,EACfg7V,EAAQ79X,EAAMyT,EAClB0tX,EAAmB,IAAVA,EAAe,EAAIA,EAC5BtD,EAAmB,IAAVA,EAAe,EAAIA,EAC5BnqY,KAAKytY,MAAQA,EACbztY,KAAKmqY,MAAQA,EACbnqY,KAAK+f,IAAMA,EACXib,EAAK,EACLC,EAAKllB,EAAWA,EAASo0X,GAAWpqX,EACpCkb,EAAMlb,EAAM,GAAKzT,GAAO,EAAK,EAAKyT,EAAM,GAAKzT,EAAM,EAAK2uB,EAAKllB,EACzD/Y,GAAS+iB,GAAO/iB,GAASsP,IACzB2uB,EAAKllB,EAAS1J,KAAKoxB,MAAM1nB,IAAW/Y,EAAQ+iB,GAAO/f,KAAKmqY,SAE5DnqY,KAAK8rY,WAAa7wW,EAAKm+B,EAAQ1sD,IAO9B,IAJDK,EACAC,EACA68U,KACA1nV,EAAWnC,KAAKitY,YAAYzwY,EAAMomB,EAAMssT,MAAOtsT,EAAMsP,WACzD,IAAS/1B,EAAI,EAAGA,EAAI+wY,EAAiB/wY,IAcjC,GAbIsB,EAAkBjB,EAAKL,GAAGymB,EAAMssT,SAAWzxU,EAAkBjB,EAAKL,GAAGymB,EAAMuQ,SAAuC,IAA1B32B,EAAKL,GAAGymB,EAAMuQ,QACnGi6W,GACHrgY,EAAI5Q,EACJ6Q,EAAIxQ,EAAKL,IAEJsB,EAAkBjB,EAAKL,GAAGymB,EAAMssT,SACrCniU,EAAI5Q,EACJ6Q,EAAIxQ,EAAKL,GAAGymB,EAAMuQ,SAGlBpmB,EAAIvQ,EAAKL,GAAGymB,EAAMssT,OAClBliU,EAAIxQ,EAAKL,GAAGymB,EAAMuQ,SAElB11B,EAAkBsP,KAAMtP,EAAkBuP,GAA9C,CAGA,GAAmB,SAAf4V,EAAMlc,MAAkC,SAAfkc,EAAMlc,KAC/By0B,EAAMpb,IAAQzT,GAA2B,IAApB4gY,EAAyBn3X,EAAS1J,KAAKoxB,MAAM1nB,IAAW/I,EAAI+S,GAAO/f,KAAKmqY,QAAU/wU,EAAQ1sD,IAC/GonB,GAAU/mB,EAAIoiC,IAASE,EAAQhjC,KAAKoxB,MAAMznB,IAAUjJ,EAAIoiC,GAAQnvC,KAAKytY,QAAUz3X,EAAQ,EAAGhJ,EAAGmuB,EAAIgxW,eAAgBhxW,QAEhH,GAAmB,WAAfvY,EAAMlc,MAAoC,YAAfkc,EAAMlc,KAAoB,CAC1D,IAAIgnY,EAAW13X,IAAWq5B,EAAOF,GAAQhtC,EAAY,GAKrD,GAFAurY,KACA1yW,GAAQjuB,EAAIoiC,GAAQhtC,GAAaurY,QACd,YAAf9qX,EAAMlc,KAAoB,CAM1BotB,GAAU/mB,EAAGiuB,EAAIhuB,EAFjBmuB,EAAMnuB,EAAIhQ,EAAU+Y,EAAS,EAAM/I,EAAIhQ,EAFnB,GAE6B+Y,EAF7B,GAGdA,EAA2BA,EAFV,GAGCA,OAAS/I,IAAMhQ,EAAU+Y,EAAS,EAAKA,EAAS,GAAIC,MAAO03X,EAC/EvB,eAAiBhxW,EAAKF,EAAOA,EAAK5uB,KAAKE,IAAI4uB,EAAKF,GAAOE,OAE1D,CACD,IAAI4qE,EAAMhwF,EAAS/V,KAAKmqY,OAAUn9X,EAAI+S,GAClC4tX,EAAM3gY,IAAM+S,GAAO/S,EAAIhQ,EAA+B,IAApBkwY,GAAwC,IAAfltY,KAAKmqY,MAC/Dp0X,EAAS/V,KAAKmqY,OAAUpqX,EAAM,GAAU,EAAJgmF,EACpC/4F,IAAMV,GAAOU,EAAIhQ,GAA6B,IAApBkwY,GAAwC,IAAfltY,KAAKmqY,MAAgBp0X,EAAS/V,KAAKmqY,QAAW79X,EAAM,GAAKy5F,EAEjHjyE,GACI/mB,EAAGiuB,EAAIhuB,GAFXmuB,EAAK9uB,KAAKE,IAAIwJ,EAAS43X,IAEH1yW,EAAMA,EAAKE,EAAIplB,OAAQ1J,KAAKE,IAAI4uB,EAAKF,GACrDjlB,MAAO03X,EAAUvB,eAAiBhxW,EAAKF,EAAOA,EAAK5uB,KAAKE,IAAI4uB,EAAKF,GAAOE,QAI5D,QAAfvY,EAAMlc,OAEXotB,GACIy+S,QAFOlmU,KAAKE,IAAIS,GAAKmgY,EAAe,IAElB15W,OAAUpnB,KAAKE,IAAIS,GAAKmgY,EAAe,MAG9C,QAAfvqX,EAAMlc,OACNotB,EAAM/mB,GAAKqsD,EAAQ5sD,KACnBsnB,EAAM9mB,GAAKosD,EAAQ1sD,KAEJ,YAAfkW,EAAMlc,OACNotB,EAAMq4W,gBAAkB/yU,EAAQ1sD,KAEpConB,EAAMpG,UAAa3gB,EAAG+mB,EAAM/mB,EAAGC,EAAG8mB,EAAM9mB,GACxC8mB,EAAM40T,KAAO37U,EACb+mB,EAAM60T,KAAO37U,EACb68U,EAAcrlV,KAAKsvB,GAEvB+1T,EAAchyT,KAAK,SAAUsrB,EAAGrmB,GAC5B,OAAOqmB,EAAEp2C,EAAI+vB,EAAE/vB,IAEnB/M,KAAK6pV,cAAgBA,GAKzBs/C,EAAkB9tY,UAAUouY,SAAW,WACnC,IAAID,EAAQxpY,KAAKwjC,UACbztB,EAAS/V,KAAK8rY,WAClB,GAAoB,YAAftC,EAAM9iY,MAAuC,QAAf8iY,EAAM9iY,MAAmB8iY,EAAMG,aAAa2D,aAAa91W,QAAS,CACjG,IAAI1f,GACAxU,GAAMkmY,EAAMxoY,QAAQsC,GAAK,mBACzB03B,GAAMwuW,EAAMpwU,QAAQ5sD,KAAMyuB,GAAMllB,EAChCmlB,GAAMsuW,EAAM7zW,cAAc3f,MAAQwzX,EAAMpwU,QAAQ3sD,MAAO0uB,GAAMplB,EAC7D+nB,OAAU99B,KAAKutY,UACf9/X,QAAW+7X,EAAMG,aAAa2D,aAAa7/X,QAC3C+7T,mBAAoBggE,EAAMG,aAAa2D,aAAax7V,UACpDvN,eAAgBvkC,KAAKwtY,UACrBl6D,YAAa,QAAUtzU,KAAK86W,OAAS,KAEzC0uB,EAAMl4W,UAAU3vB,YAAY6nY,EAAM37W,SAAS2/D,SAAS11E,MAM5DqxX,EAAkB9tY,UAAUgwY,mBAAqB,SAAU5zW,EAAMt7B,EAAGyhC,EAAM0G,GACtE,IAAIrkC,GACAw3B,KAAMA,EAAMoB,QAAQ,EAAOyL,OAAQA,EAAQ1G,KAAMA,EAAM4F,UAAWxjC,KAAKwjC,UAAWpL,WAAYj8B,GAGlG,OADA6D,KAAKwjC,UAAUhd,QAAQiR,EAAMx3B,GACtBA,GAEJkpY,KCnwBP7+S,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAoB5DgxW,GAA2B,SAAUziT,GAMrC,SAASyiT,EAAU56X,EAAShS,GACxB,IAAIjB,EAAQorF,EAAO7pF,KAAKtB,KAAMgT,EAAShS,IAAYhB,KAGnD,OADAD,EAAM2mB,SAAWlb,GAAQkb,SAClB3mB,EA4dX,OAreAuqF,GAAUsjT,EAAWziT,GAcrByiT,EAAUvyY,UAAUoX,UAAY,WAC5BzS,KAAKw+G,eACLx+G,KAAKwmB,QAAQ,QAAUgd,UAAWxjC,OAClCA,KAAK6tY,kBAAoB,IAAI1E,GAAkBnpY,MAC/CA,KAAK8tY,YACL9tY,KAAKukB,aACLvkB,KAAK2N,cAKTigY,EAAUvyY,UAAU0wG,OAAS,WAEzB/rG,KAAK6tY,kBAAkB9uT,cACvB/+E,KAAK+tY,kBACL/tY,KAAKgB,QAAQW,YAAY3B,KAAKsxB,WAC9BtxB,KAAK28U,8BACL38U,KAAKwmB,QAAQ,UAAYgd,UAAWxjC,QAKxC4tY,EAAUvyY,UAAU0yY,gBAAkB,WAElC/tY,KAAKq8U,eACLr8U,KAAKguY,YACLhuY,KAAK6tY,kBAAkBn7D,gBAK3Bk7D,EAAUvyY,UAAU2yY,UAAY,WAC5B,IAAItqG,EAAaljS,SAASW,cAAc,OACxCuiS,EAAWpgS,GAAKtD,KAAKgB,QAAQsC,GAAK,qBAClCogS,EAAWlgS,aAAa,QAAS,sBACjCxD,KAAKgB,QAAQW,YAAY+hS,GACzB1jS,KAAKgB,QAAQ0D,MAAM4xC,QAAU,QAC7Bt2C,KAAKgB,QAAQ0D,MAAMwP,SAAW,YAKlC05X,EAAUvyY,UAAUshV,4BAA8B,WAC9C,IAAI37U,EAAUkjC,GAAalkC,KAAKgB,QAAQsC,GAAK,sBAC7C,GAAKtC,EAAL,CAGA,IAAIqyB,EAAOrzB,KAAKgB,QAAQ4K,wBACpB27D,EAAUrjC,GAAalkC,KAAKgB,QAAQsC,GAAK,QAAQsI,wBACrD5K,EAAQ0D,MAAM8H,KAAOH,KAAKC,IAAIi7D,EAAQ/6D,KAAO6mB,EAAK7mB,KAAM,GAAK,KAC7DxL,EAAQ0D,MAAMgI,IAAML,KAAKC,IAAIi7D,EAAQ76D,IAAM2mB,EAAK3mB,IAAK,GAAK,OAM9DkhY,EAAUvyY,UAAUghV,aAAe,WAC/B,IACImoD,EADAxuX,EAAQhW,KAAKiuY,cAAc3pW,OAAOtuB,OAElCA,EAAQ,GAAuC,gBAAlChW,KAAKiuY,cAAcx+W,cAChC+0W,EAAa,IAAItgE,GAAWlkU,KAAKgB,QAAQsC,GAAK,mBAAoBtD,KAAKiuY,cAAcx+W,WAAYzvB,KAAKiuY,cAAc3pW,OAAQ,EAAG,IAAIpO,GAAKlgB,EAAQ,EAAGA,EAAQ,EAAGhW,KAAK21B,cAAc3f,MAAQA,EAAOhW,KAAK21B,cAAc5f,OAASC,IAC5NhW,KAAKsxB,UAAU3vB,YAAYgiC,GAAc3jC,KAAMwkY,KAGnD,IAAIprU,EAAUp5D,KAAKo5D,QACnBorU,EAAa,IAAItgE,GAAWlkU,KAAKgB,QAAQsC,GAAK,uBAAwB,eAAiBkzB,MAAO,cAAexgB,MAAO,GAAK,EAAG,IAAIkgB,GAAKkjC,EAAQ5sD,KAAM4sD,EAAQ1sD,IAAK1M,KAAK21B,cAAc3f,OAASojD,EAAQ5sD,KAAO4sD,EAAQ3sD,OAAQzM,KAAK21B,cAAc5f,QAAUqjD,EAAQ1sD,IAAM0sD,EAAQzsD,UAC9Q,IAAImsG,EAAW94G,KAAK6tB,SAASgrF,gBAAiBv1G,GAAItD,KAAKgB,QAAQsC,GAAK,yBACpEqgC,GAAc3jC,KAAMwkY,EAAY1rR,GAChC94G,KAAKsxB,UAAU3vB,YAAYm3G,IAK/B80R,EAAUvyY,UAAUyyY,UAAY,WAC5B9tY,KAAK0/U,YACL1/S,GAAUhgC,OAKd4tY,EAAUvyY,UAAUqkV,UAAY,WAC5B,GAAI1/U,KAAKsxB,UAAW,CAChB,KAAOtxB,KAAKsxB,UAAU/f,WAAW9U,OAAS,GACtCuD,KAAKsxB,UAAUhsB,YAAYtF,KAAKsxB,UAAU1U,aAEzC5c,KAAKsxB,UAAUwJ,iBAAmB96B,KAAKsxB,UAAU7wB,YAClD8D,EAAOvE,KAAKsxB,YxUyH5B,SAA8BhuB,GAC1B,IAAItC,EAAUR,SAASosB,eAAetpB,GAC/BtC,GAAUuD,EAAOvD,GwUxHpBwsB,CAAcxtB,KAAKgB,QAAQsC,GAAK,sBAC5BtD,KAAKkuY,wBACLluY,KAAKkuY,uBAAuBC,yBAMpCP,EAAUvyY,UAAUsS,WAAa,WAC7B3N,KAAKivE,KAAO,IAAIy7B,GAChB1qG,KAAKg4G,aAAe,IAAIR,GAAKx3G,KAAKu/B,gBAAiBv/B,KAAKqiV,sBAAuBriV,KAAKgO,SAOxF4/X,EAAUvyY,UAAUw1F,gBAAkB,WAClC,IAAIgB,KAOJ,OANI7xF,KAAKouY,gBAAgB52W,SAAWx3B,KAAKouY,gBAAgBC,kBAAkB72W,UACvEq6D,EAAQrtF,MACJ6sF,OAAQ,mBACRpxF,MAAOD,QAGR6xF,GAKX+7S,EAAUvyY,UAAUmjH,aAAe,WAC/B,IACI3lF,EAASrtB,GAAQC,UAAY,eAAiB,aAElDlG,GAAahB,OAAOvE,KAAKgB,QAASwK,GAAQ2+E,eAAgBnqF,KAAKsuY,eAC/D/oY,GAAahB,OAAOvE,KAAKgB,QAAS63B,EAAQ74B,KAAKuuY,qBAC/ChpY,GAAahB,OAAOvE,KAAKgB,QAASwK,GAAQ4+E,cAAepqF,KAAKwuY,mBAC9D3yY,OAAOe,oBAAqB4O,GAAQomB,SAAY,gBAAiB/1B,QAAU,wBAAyBA,OAAW,oBAAsB,SAAUmE,KAAKyuY,kBAKxJb,EAAUvyY,UAAUkpB,WAAa,WAC7B,IAAIsU,EAASrtB,GAAQC,UAAY,eAAiB,aAElDlG,GAAanB,IAAIpE,KAAKgB,QAASwK,GAAQ2+E,eAAgBnqF,KAAKsuY,cAAetuY,MAC3EuF,GAAanB,IAAIpE,KAAKgB,QAAS,QAAShB,KAAK0uY,eAAgB1uY,MAC7DuF,GAAanB,IAAIpE,KAAKgB,QAAS63B,EAAQ74B,KAAKuuY,oBAAqBvuY,MACjEuF,GAAanB,IAAIpE,KAAKgB,QAASwK,GAAQ4+E,cAAepqF,KAAKwuY,kBAAmBxuY,MAC9EnE,OAAOa,iBAAkB8O,GAAQomB,SAAY,gBAAiB/1B,QAAU,wBAAyBA,OAAW,oBAAsB,SAAUmE,KAAKyuY,gBAAgBnzY,KAAK0E,OACtK,IAAI65G,GAAM75G,KAAKgB,UAMnB4sY,EAAUvyY,UAAUozY,gBAAkB,SAAU5tY,GAC5C,IAAId,EAAQC,KACRC,GACAw3B,KAAM,SACNwpT,aAAcjhV,KAAK21B,cACnB6N,UAAWxjC,KACXghV,YAAa,IAAI5zT,GAAK,EAAG,IAkB7B,OAhBIptB,KAAK65U,UACL35U,aAAaF,KAAK65U,UAEtB75U,KAAK65U,SAAW15U,WAAW,WACnBJ,EAAMinF,YACN9mF,aAAaH,EAAM85U,WAGvB95U,EAAMy+G,eACNz+G,EAAM+tY,YACN/tY,EAAM4mF,YAAa,EACnB5mF,EAAMwkB,aACNtkB,EAAK+gV,YAAcjhV,EAAM41B,cACzB51B,EAAMymB,QAAQ,SAAUvmB,GACxBF,EAAMgsG,WACP,MACI,GAOX6hS,EAAUvyY,UAAUizY,cAAgB,SAAUztY,GAC1Cb,KAAK2uY,oBAAoB9tY,GACzBb,KAAK+N,OAAOvC,GAAQ2+E,eAAgBtpF,GACpC,IAAIZ,GACAw3B,KAAM,qBAAsBoB,QAAQ,EAAO2K,UAAWxjC,KAAM1D,MAAOuE,GAEvEb,KAAKwmB,QAAQvmB,EAAKw3B,KAAMx3B,GACxB,IAAIqhV,EAAathV,KAAK4uY,cAAc/tY,GACpC,GAAIygV,EAAWstD,cAAe,CAC1B,IAAIxD,GACA3zW,KAAM,uBAAwBoB,QAAQ,EAAOv8B,MAAOuE,EAAG2iC,UAAWxjC,KAAMo4B,WAAYkpT,EAAWlpT,YAEnGp4B,KAAKwmB,QAAQ4kX,EAAU3zW,KAAM2zW,GAEjC,OAAO,GAOXwC,EAAUvyY,UAAUqzY,eAAiB,SAAU7tY,GAC3Cb,KAAK2uY,oBAAoB9tY,GACzB,IAAIZ,GACAw3B,KAAM,sBAAuBoB,QAAQ,EAAO2K,UAAWxjC,KAAM1D,MAAOuE,GAExEb,KAAKwmB,QAAQvmB,EAAKw3B,KAAMx3B,GACxB,IAAIqhV,EAAathV,KAAK4uY,cAAc/tY,GACpC,GAAIygV,EAAWstD,cAAe,CAC1B,IAAIxD,GACA3zW,KAAM,wBAAyBoB,QAAQ,EAAOv8B,MAAOuE,EAAG2iC,UAAWxjC,KAAMo4B,WAAYkpT,EAAWlpT,YAEpGp4B,KAAKwmB,QAAQ4kX,EAAU3zW,KAAM2zW,GAEjC,OAAO,GAKXwC,EAAUvyY,UAAUuzY,cAAgB,SAAU/tY,GAC1C,IAAId,EAAQC,KACR6uY,EAAU7uY,KAAKgB,QAAQsC,GAAK,IAC5BA,EAAKzC,EAAEsG,OAAO7D,GAAGiM,QAAQs/X,EAAS,IAAI3xY,MAAM,KAChD,GAAIoG,EAAG,KAAOtD,KAAK0G,KAAKkP,cAAe,CACnC,IAAIk5X,EAAU/5W,SAASzxB,EAAG,GAAI,IAS9B,OARK7F,EAAkBqxY,KAAY9sV,MAAM8sV,IAA4B,SAAd9uY,KAAK0G,MAAiC,SAAd1G,KAAK0G,MAChF1G,KAAK6tY,kBAAkBhkD,cAAczqV,QAAQ,SAAU00B,EAAO33B,GACtDs6B,GAAa12B,EAAMgtU,OAAQhtU,EAAMitU,OAAQ,IAAI92S,GAAKpC,EAAM/mB,EAAI,EAAG+mB,EAAM9mB,EAAI,EAAG,GAAI,OAChF8hY,EAAU3yY,MAKbyyY,eAAe,EAAMx2W,WAAY02W,GAE9C,OAASF,eAAe,EAAOx2W,WAAY,OAO/Cw1W,EAAUvyY,UAAUmzY,kBAAoB,SAAU3tY,GAG9C,OAFAb,KAAK2uY,oBAAoB9tY,GACzBb,KAAK+N,OAAOvC,GAAQ4+E,cAAevpF,IAC5B,GAOX+sY,EAAUvyY,UAAUkzY,oBAAsB,SAAU1tY,GAGhD,OAFAb,KAAK2uY,oBAAoB9tY,GACzBb,KAAK+N,OAAOvC,GAAQC,UAAY,eAAiB,aAAc5K,IACxD,GAKX+sY,EAAUvyY,UAAUszY,oBAAsB,SAAU9tY,GAChD,IAAIqL,EACAJ,EACJ,GAAIjL,EAAE6F,KAAKnI,QAAQ,UAAY,EAAG,CAC9ByB,KAAK4xB,SAAU,EACf,IAAIsvT,EAAWrgV,EACfiL,EAAQo1U,EAASviR,eAAe,GAAGvqB,QACnCloC,EAAQg1U,EAASviR,eAAe,GAAGtqB,aAGnCr0C,KAAK4xB,QAA4B,UAAlB/wB,EAAEw/U,aAA6C,MAAlBx/U,EAAEw/U,YAC9Cn0U,EAAQrL,EAAEwzC,QACVvoC,EAAQjL,EAAEuzC,QAEd,IAAI/gB,EAAOrzB,KAAKgB,QAAQ4K,wBACpB27D,EAAUrjC,GAAalkC,KAAKgB,QAAQsC,GAAK,QAAQsI,wBACrD5L,KAAKgtU,OAAU9gU,EAAQmnB,EAAK3mB,IAAOL,KAAKC,IAAIi7D,EAAQ76D,IAAM2mB,EAAK3mB,IAAK,GACpE1M,KAAK+sU,OAAUjhU,EAAQunB,EAAK7mB,KAAQH,KAAKC,IAAIi7D,EAAQ/6D,KAAO6mB,EAAK7mB,KAAM,IAM3EohY,EAAUvyY,UAAUmsF,kBAAoB,SAAUiF,EAASC,GAGvD,IAAK,IAFDqf,GAAS,EACT75C,GAAU,EACL9zD,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKmvF,GAAUruF,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAE9D,OADWyE,EAAGzE,IAEV,IAAK,QACL,IAAK,QACL,IAAK,aACL,IAAK,eACL,IAAK,OACL,IAAK,YACD8zD,GAAU,EACV,MACJ,IAAK,SACL,IAAK,iBACL,IAAK,oBACL,IAAK,kBACL,IAAK,kBACL,IAAK,iBACL,IAAK,gBACL,IAAK,gBACL,IAAK,qBACL,IAAK,QACD65C,GAAS,GAIjB75C,GACAlyD,KAAK8tY,YACL9tY,KAAK6tY,kBAAkB9uT,cACvB/+E,KAAK+uY,oBAEAhjS,IACL/rG,KAAK8tY,YACL9tY,KAAK+uY,qBAMbnB,EAAUvyY,UAAU0zY,iBAAmB,WAEnC/uY,KAAK+tY,kBACL/tY,KAAKgB,QAAQW,YAAY3B,KAAKsxB,WAC9BtxB,KAAK28U,+BAKTixD,EAAUvyY,UAAUkkC,cAAgB,WAChC,MAAO,aAKXquW,EAAUvyY,UAAUiX,QAAU,WAC1B64E,EAAO9vF,UAAUiX,QAAQhR,KAAKtB,OAMlC4tY,EAAUvyY,UAAUmxG,eAAiB,WACjC,MAAO,IAEX3hB,IACI3jF,EAAS,OACV0mY,EAAUvyY,UAAW,aAAS,GACjCwvF,IACI3jF,EAAS,OACV0mY,EAAUvyY,UAAW,cAAU,GAClCwvF,IACI9iF,KAAYogY,KACbyF,EAAUvyY,UAAW,cAAU,GAClCwvF,IACI3jF,EAAS,SACV0mY,EAAUvyY,UAAW,YAAQ,GAChCwvF,IACI3jF,OACD0mY,EAAUvyY,UAAW,kBAAc,GACtCwvF,IACI3jF,EAAS,YACV0mY,EAAUvyY,UAAW,iBAAa,GACrCwvF,IACI3jF,EAAS,OACV0mY,EAAUvyY,UAAW,aAAS,GACjCwvF,IACI3jF,EAAS,OACV0mY,EAAUvyY,UAAW,aAAS,GACjCwvF,IACI3jF,EAAS,YACV0mY,EAAUvyY,UAAW,YAAQ,GAChCwvF,IACI3jF,EAAS,KACV0mY,EAAUvyY,UAAW,sBAAkB,GAC1CwvF,IACI3jF,EAAS,KACV0mY,EAAUvyY,UAAW,qBAAiB,GACzCwvF,IACI3jF,EAAS,KACV0mY,EAAUvyY,UAAW,uBAAmB,GAC3CwvF,IACI3jF,EAAS,KACV0mY,EAAUvyY,UAAW,qBAAiB,GACzCwvF,IACI3jF,EAAS,KACV0mY,EAAUvyY,UAAW,0BAAsB,GAC9CwvF,IACI3jF,EAAS,KACV0mY,EAAUvyY,UAAW,qBAAiB,GACzCwvF,IACI3jF,OACD0mY,EAAUvyY,UAAW,eAAW,GACnCwvF,IACI3jF,EAAS,IACV0mY,EAAUvyY,UAAW,iBAAa,GACrCwvF,IACI3jF,EAAS,IACV0mY,EAAUvyY,UAAW,eAAW,GACnCwvF,IACI3jF,EAAS,OACV0mY,EAAUvyY,UAAW,cAAU,GAClCwvF,IACI3jF,GAAS,IACV0mY,EAAUvyY,UAAW,4BAAwB,GAChDwvF,IACI9iF,KAAYugY,KACbsF,EAAUvyY,UAAW,uBAAmB,GAC3CwvF,IACI9iF,KAAYwgY,KACbqF,EAAUvyY,UAAW,qBAAiB,GACzCwvF,IACIxiF,KAAeogY,KAChBmF,EAAUvyY,UAAW,yBAAqB,GAC7CwvF,IACI9iF,KAAY2gY,KACbkF,EAAUvyY,UAAW,oBAAgB,GACxCwvF,IACI9iF,KAAY6gY,KACbgF,EAAUvyY,UAAW,sBAAkB,GAC1CwvF,IACI9iF,KAAY+gY,KACb8E,EAAUvyY,UAAW,yBAAqB,GAC7CwvF,IACI9iF,KAAY4gY,KACbiF,EAAUvyY,UAAW,eAAW,GACnCwvF,IACI3jF,EAAS,aACV0mY,EAAUvyY,UAAW,aAAS,GACjCwvF,IACI/hF,KACD8kY,EAAUvyY,UAAW,cAAU,GAClCwvF,IACI/hF,KACD8kY,EAAUvyY,UAAW,YAAQ,GAChCwvF,IACI/hF,KACD8kY,EAAUvyY,UAAW,yBAAqB,GAC7CwvF,IACI/hF,KACD8kY,EAAUvyY,UAAW,uBAAmB,GAC3CwvF,IACI/hF,KACD8kY,EAAUvyY,UAAW,qBAAiB,GACzCwvF,IACI/hF,KACD8kY,EAAUvyY,UAAW,sBAAkB,GAC1CwvF,IACI/hF,KACD8kY,EAAUvyY,UAAW,4BAAwB,GAChDwvF,IACI/hF,KACD8kY,EAAUvyY,UAAW,6BAAyB,GACjDwvF,IACI/hF,KACD8kY,EAAUvyY,UAAW,0BAAsB,GAC9CwvF,IACI/hF,KACD8kY,EAAUvyY,UAAW,2BAAuB,GAC/CwvF,IACI/hF,KACD8kY,EAAUvyY,UAAW,0BAAsB,GAC9CwvF,IACI/hF,KACD8kY,EAAUvyY,UAAW,uBAAmB,GAC3CwvF,IACI/hF,KACD8kY,EAAUvyY,UAAW,cAAU,GAClCuyY,EAAY/iT,IACRzhF,GACDwkY,IAELriS,ICngBEyjS,GAAkC,WAClC,SAASA,EAAiBxrW,GACtBxjC,KAAKwjC,UAAYA,EACjBxjC,KAAKtD,mBAoNT,OA/MAsyY,EAAiB3zY,UAAUqB,iBAAmB,WACtCsD,KAAKwjC,UAAUwjD,cAInBhnF,KAAKwjC,UAAUoiD,GAAGp6E,GAAQC,UAAY,eAAiB,aAAczL,KAAK2hW,kBAAmB3hW,MAC7FA,KAAKwjC,UAAUoiD,GAAGp6E,GAAQ2+E,eAAgBnqF,KAAKq0U,iBAAkBr0U,MACjEA,KAAKwjC,UAAUoiD,GAAGp6E,GAAQ4+E,cAAepqF,KAAK4pN,eAAgB5pN,QAElEgvY,EAAiB3zY,UAAUsmW,kBAAoB,SAAU9gW,GACrDb,KAAKmuY,yBAETa,EAAiB3zY,UAAUuuN,eAAiB,SAAU/oN,GAC7Cb,KAAKwjC,UAAU5R,UAGpB5xB,KAAKivY,eAAepuY,GACpBb,KAAKkmS,YAET8oG,EAAiB3zY,UAAU6qS,QAAU,WACjChmS,aAAaF,KAAKw5U,cAClBx5U,KAAKw5U,aAAer5U,WAAWH,KAAKmuY,sBAAsB7yY,KAAK0E,MAAO,MAM1EgvY,EAAiB3zY,UAAU8yY,sBAAwB,WAC/CnuY,KAAKikW,gBACLjkW,KAAKkvY,iBAETF,EAAiB3zY,UAAUg5U,iBAAmB,SAAUxzU,GACpDb,KAAKivY,eAAepuY,IAExBmuY,EAAiB3zY,UAAU4zY,eAAiB,SAAUpuY,GAClD,IAAIu3B,EACAoxW,EAAQxpY,KAAKwjC,UACbqmT,EAAgB2/C,EAAMqE,kBAAkBhkD,cACxC9c,EAASy8D,EAAMz8D,OACfC,EAASw8D,EAAMx8D,OACnB,GAAmB,QAAfw8D,EAAM9iY,KAKN,IAAK,IAHDyoY,EADYzwY,QAAemrV,GACEjyT,IAAI,SAAU9D,GAAS,OAAOA,EAAMpG,SAAS3gB,IAC1EghB,EAAO68C,EAAAA,EAEFzuE,EAAI,EAAGshF,OAAO,EAAQ57E,EAAMstY,EAAiB1yY,OAAQN,EAAI0F,EAAK1F,IAE/D4xB,GADJ0vD,EAAOpxE,KAAKE,IAAIwgU,EAASoiE,EAAiBhzY,OAEtC4xB,EAAO0vD,EACS0xT,EAAiBhzY,GACjCi8B,EAAaj8B,OAIpB,CACD,IAAIgL,EAAStG,EAAEsG,OAAO7D,GACtB80B,EAAarD,SAAS5tB,EAAOjK,MAAM,SAAS,GAAI,IAEpD,GAAI8kD,MAAM5pB,KAAgB3B,GAAas2S,EAAQC,EAAQ,IAAI92S,GAAK,EAAG,EAAGszW,EAAM7zW,cAAc3f,MAAOwzX,EAAM7zW,cAAc5f,SAGjH,OAFA/V,KAAKkvY,qBACLlvY,KAAKikW,gBAGLjkW,KAAKo4B,aAAeA,IAGxBp4B,KAAKo4B,WAAaA,EAClBp4B,KAAKovY,kBAAkBvlD,EAAczxT,IACrCp4B,KAAKgiI,cAAc6nN,EAAczxT,MAKrC42W,EAAiB3zY,UAAU+zY,kBAAoB,SAAUz3W,GACrD,IAAI6xW,EAAQxpY,KAAKwjC,UACb6rW,EAAU7F,EAAM4E,gBAAgBC,kBAChC73W,EAAyB,iBAAhBgzW,EAAMtuX,MAA4B,UAAY,UAE3D,GADAsb,EAAS64W,EAAa,MAAIA,EAAQ74W,MAAQA,EACrC64W,EAAQ73W,SAA0B,QAAfgyW,EAAM9iY,KAA9B,CAGA,IAAIqsF,EAAQ7uD,GAAaslW,EAAMxoY,QAAQsC,GAAK,wBACxC7F,EAAkBs1F,KAClBA,EAAQy2S,EAAM37W,SAASw+C,aAAc/oE,GAAIkmY,EAAMxoY,QAAQsC,GAAK,yBAC5DkmY,EAAMl4W,UAAU3vB,YAAYoxF,IAEhC,IAAIu8S,EAAUprW,GAAaslW,EAAMxoY,QAAQsC,GAAK,sBAC1CirB,EAAI,KAAOoJ,EAAOjK,SAAS3gB,EAAI,IAAMy8X,EAAMpwU,QAAQ1sD,IAAM,MAAQirB,EAAOjK,SAAS3gB,EAAI,KACpFy8X,EAAM7zW,cAAc5f,OAASyzX,EAAMpwU,QAAQzsD,QAChD,GAAIlP,EAAkB6xY,GAAU,CAC5B,IAAIjF,EAAa,IAAIj0W,GAAWozW,EAAMxoY,QAAQsC,GAAK,qBAAsB,cAAe+rY,EAAQr5X,MAAOwgB,EAAO,GAC9G6zW,EAAW97W,EAAIA,EACf4H,GAASqzW,EAAOa,EAAYt3S,QAG5Bu8S,EAAQ9rY,aAAa,IAAK+qB,GAC1B+gX,EAAQ9rY,aAAa,eAAgB6rY,EAAQr5X,MAAM9I,YACnDoiY,EAAQ9rY,aAAa,SAAUgzB,KAMvCw4W,EAAiB3zY,UAAU2mI,cAAgB,SAAUrqG,GACjD,IAAI6xW,EAAQxpY,KAAKwjC,UACb3R,EAAU23W,EAAM4E,gBACpB,GAAKv8W,EAAQ2F,QAAb,CAGA,IAAIt2B,EAAMgjC,GAAaslW,EAAMxoY,QAAQsC,GAAK,0BACtC7F,EAAkByD,KAClBA,EAAMC,EAAc,OAASmC,GAAIkmY,EAAMxoY,QAAQsC,GAAK,yBAChDC,OAAQ,wDACZ2gC,GAAaslW,EAAMxoY,QAAQsC,GAAK,sBAAsB3B,YAAYT,IAE1DsoY,EAAMgD,eAAeh1W,QAAc,QAAIgyW,EAAMgD,eAAe1/W,KAAxE,IACI/f,EAAI4qB,EAAO+wT,KAAKx7U,WACI,aAApBs8X,EAAMt3W,UACNnlB,EAAIy8X,EAAMjmU,WAAW5rC,EAAO+wT,MAAM8gD,EAAMt6D,OAEf,aAApBs6D,EAAMt3W,YACXnlB,EAAI,IAAIiT,KAAK2X,EAAO+wT,MAAM6mD,gBAEtB53W,EAAOgxT,KAAKz7U,WAApB,IACIuf,EAAOzsB,KAAKu8R,UAAUitG,EAAM4E,gBAAgBpyW,OAAQwtW,EAAOz8X,EAAG/M,KAAK4hF,YAAYjqD,EAAOgxT,KAAM6gD,GAAOt8X,YACnGwgB,GAAa3gB,EAAG4qB,EAAOjK,SAAS3gB,EAAGC,EAAG2qB,EAAOjK,SAAS1gB,GAC1D0gB,EAA0B,QAAf87W,EAAM9iY,MAAmBqG,EAAG4qB,EAAOjK,SAAS3gB,EAAGC,EAAG2qB,EAAOjK,SAAS1gB,GAAM0gB,EACnF,IAAI8hX,GACA/3W,KAAM,oBAAqBoB,QAAQ,EAAOpM,KAAMA,EAChD23Q,WACIt3Q,KAAM+E,EAAQuyQ,UAAUt3Q,KACxBrf,QAASokB,EAAQuyQ,UAAU32R,QAC3Bsf,WAAY8E,EAAQuyQ,UAAUr3Q,WAC9BC,UAAW6E,EAAQuyQ,UAAUp3Q,UAC7BC,WAAY4E,EAAQuyQ,UAAUn3Q,WAC9BuJ,MAAO3E,EAAQuyQ,UAAU5tQ,QAIjC,GADAgzW,EAAMhjX,QAAQgpX,EAAa/3W,KAAM+3W,IAC7BA,EAAa32W,OAAjB,CAGc,IAAImd,IACd5b,QAASo1W,EAAa/iX,KACtB6X,OAAQzS,EAAQyS,OAChBr1B,SAAU4iB,EAAQ5iB,SAClBzS,KAAMgtY,EAAMjmU,WAAWvjE,KAAKo4B,YAC5BwF,KAAM/L,EAAQ+L,KACdwmQ,UAAWorG,EAAaprG,UACxBG,iBAAiB,EACjB72Q,UAAY3gB,EAAG2gB,EAAS3gB,EAAGC,EAAG0gB,EAAS1gB,GACvCm2R,QAAQ,EACRP,WAAY,IAAI1sQ,GAAK,EAAG,EAAGszW,EAAM7zW,cAAc3f,MAAOwzX,EAAM7zW,cAAc5f,QAC1EmF,MAAOsuX,EAAMtuX,QAETm7B,SAASn1C,MAKrB8tY,EAAiB3zY,UAAUkhS,UAAY,SAAUvgQ,EAAQwtW,EAAOz8X,EAAGC,GAC/D,GAAIvP,EAAkBu+B,IAAsB,KAAXA,EAC7B,OAAQhvB,GAEZ,IAAIyf,EAAOuP,EAEX,OADAvP,EAAOA,EAAKvvB,MAAM,KAAOssY,EAAMt6D,MAAQ,KAAK/tT,KAAKpU,GAAG7P,MAAM,KAAOssY,EAAMr2W,MAAQ,KAAKhS,KAAKnU,IACjFyf,IAEZuiX,EAAiB3zY,UAAUumF,YAAc,SAAU5kF,EAAOwmC,GAUtD,OAPIA,EAAUxH,SAAWgmB,MAAM1qB,OAAOt6B,IACjBwmC,EAAUyrC,KAAKC,iBAAkBlzC,OAAQwH,EAAUxH,OAAQmzC,YAAa3rC,EAAU4rC,sBACrFJ,CAAehyE,GAGfA,GAOtBgyY,EAAiB3zY,UAAU6zY,cAAgB,WACvC,IAAIG,EAAUrvY,KAAKwjC,UAAUxiC,QAAQ2B,cAAc,IAAM3C,KAAKwjC,UAAUxiC,QAAQsC,GAAK,wBACrF,OAAO+rY,EAAU9qY,EAAO8qY,GAAW,MAKvCL,EAAiB3zY,UAAU4oW,cAAgB,WACvCjkW,KAAKo4B,WAAa,KAClB,IAAIvG,EAAU7xB,KAAKwjC,UAAUxiC,QAAQ2B,cAAc,IAAM3C,KAAKwjC,UAAUxiC,QAAQsC,GAAK,0BACrF,OAAOuuB,EAAUttB,EAAOstB,GAAW,MAKvCm9W,EAAiB3zY,UAAUkkC,cAAgB,WACvC,MAAO,oBAKXyvW,EAAiB3zY,UAAUiX,QAAU,SAAUkxB,KAGxCwrW,KC5NXS,GAAYrjS,OAAQsjS,GAAiBC,GAAoBC,GAAmBC,GAAmBC,GAAuBC,GAAgBC,GAAiBC,GAAgBC,GAAqBC,GAAqBC,GAA2BC,GAAyBC,GAAgBC,GAAwBC,GAAwBC,GAAmBC,GAAcC,GAAgBC,GAAeC,GAAeC,GAAkBC,GAAaC,GAAWC,GAAgBC,GAAgBC,GAAsBC,GAAiBC,GAA0BC,GAAsBC,GAAsBC,GAAmBC,GAAkBC,GAAkBC,GAAmBC,GAAmBC,GAAmBC,GAAwCC,GAAoBC,GAAmBC,GAAmBC,GAAwBC,GAA0BC,GAAqBC,GAA0BC,GAAsBC,GAAeC,GAAiBC,GAAuBC,GAA6BC,GAA6BC,IACrgCC,GAAwBzmS,OAAQ0mS,GAAgBC,GAAmBC,GAAoBC,GAA0BC,GAAyBC,GAA4BC,GAA4BC,IAClMC,GAAqBlnS,OAAQmnS,GAAmBC,GAAqBxD,GAAiBE,GAAqBW,GAAeC,IAC1H2C,GAAgBrnS,OAAQsnS,IACxBC,GAAiBvnS,OAAQwnS,GAAuBC,QCFrC1+G,+jChVmDX,SAAqB34R,EAAMovB,EAAQkoX,GAC/B,IAAIC,EAAWr1Y,KAAWlC,EAAM,MAgBhC,OAfAu3Y,EAASl8W,KAAK,SAAUsrB,EAAGrmB,GAGvB,IAAK,IAFDl+B,EAAQ,EACRC,EAAS,EACJ1C,EAAI,EAAGA,EAAIyvB,EAAOnvB,OAAQN,IAC/ByC,GAASukD,EAAEv3B,EAAOzvB,IAClB0C,GAAUi+B,EAAElR,EAAOzvB,IAEvB,OAAM23Y,GAAgBl1Y,EAAQC,GAAYi1Y,GAAgBl1Y,EAAQC,GACtD,EAEHD,IAAUC,EACR,EAEJ,IAEJk1Y,ytE2NnES,cAEF,yBAEa,oNAsBP,uBAED,yGAYF,sBAEI,g2C4G1CU,mTjUJ/BzpT,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAgaxCm3M,GAAiC,WAIjC,OAHA,SAAyBx+R,GACrBtD,KAAKsD,GAAKA,MAMd8yB,GAA4B,SAAU+0D,GAEtC,SAAS/0D,EAAW9yB,EAAIs6B,EAAM5nB,EAAOwgB,EAAO/oB,EAASqkC,EAAWvjB,EAAGlhB,EAAW3I,QACxD,IAAd2I,IAAwBA,EAAY,SAC1B,IAAV3I,IAAoBA,EAAQ,IAChC,IAAI3E,EAAQorF,EAAO7pF,KAAKtB,KAAMsD,IAAOtD,KASrC,OARAD,EAAM0N,QAAUA,EAChB1N,EAAM69B,KAAOA,EACb79B,EAAM+9B,OAAStH,EACfz2B,EAAM,gBAAkBiW,EACxBjW,EAAM,oBAAsB+xC,EAC5B/xC,EAAMwuB,EAAIA,EACVxuB,EAAMsN,UAAYA,EAClBtN,EAAM2E,MAAQA,EACP3E,EAEX,OAfAuqF,GAAUl0D,EAAY+0D,GAef/0D,GACT0rQ,IAGEoiC,GAA4B,SAAU/4O,GAEtC,SAAS+4O,EAAW5gU,EAAIs6B,EAAM0G,EAAQ72B,EAAS4lB,GAC3C,IAAItzB,EAAQorF,EAAO7pF,KAAKtB,KAAMsD,IAAOtD,KASrC,OARAD,EAAMiN,EAAIqmB,EAAKrmB,EACfjN,EAAMgN,EAAIsmB,EAAKtmB,EACfhN,EAAMgW,OAASsd,EAAKtd,OACpBhW,EAAMiW,MAAQqd,EAAKrd,MACnBjW,EAAM0N,QAAUA,EAChB1N,EAAM69B,KAAOA,EACb79B,EAAM+9B,OAASwG,EAAO9N,MACtBz2B,EAAM,gBAAkBukC,EAAOtuB,MACxBjW,EAEX,OAbAuqF,GAAU45O,EAAY/4O,GAaf+4O,GACTpiC,IAKE10Q,GAAsB,WAKtB,OAJA,SAAcpX,EAAOD,GACjB/V,KAAKgW,MAAQA,EACbhW,KAAK+V,OAASA,MAMlByvB,GAA+B,WAK/B,OAJA,SAAuBz4B,EAAGC,GACtBhN,KAAK+M,EAAIA,EACT/M,KAAKgN,EAAIA,MAMbkpB,GAAsB,WAOtB,OANA,SAAcnpB,EAAGC,EAAGgJ,EAAOD,GACvB/V,KAAK+M,EAAIA,EACT/M,KAAKgN,EAAIA,EACThN,KAAKgW,MAAQA,EACbhW,KAAK+V,OAASA,MAMlBwgB,GAA4B,SAAU40D,GAEtC,SAAS50D,EAAWjzB,EAAIyJ,EAAGC,EAAG6G,EAAQ4Y,EAAMpf,EAAW8xB,QACjC,IAAd9xB,IAAwBA,EAAY,IACxC,IAAItN,EAAQorF,EAAO7pF,KAAKtB,KAAMsD,IAAOtD,KASrC,OARAD,EAAMsN,UAAY,GAClBtN,EAAMo/B,SAAW,OACjBp/B,EAAMgN,EAAIA,EACVhN,EAAMiN,EAAIA,EACVjN,EAAM8T,OAASA,EACf9T,EAAM0sB,KAAOA,EACb1sB,EAAMsN,UAAYA,EAClBtN,EAAMo/B,SAAWA,EACVp/B,EAEX,OAdAuqF,GAAU/zD,EAAY40D,GAcf50D,GACTurQ,IAGE/oQ,GAA+B,WAM/B,OALA,SAAuBtM,EAAMzvB,EAAO8vB,GAChC9sB,KAAKysB,KAAOA,EACZzsB,KAAKhD,MAAQA,EACbgD,KAAK8sB,KAAOA,M2UpgBhBw9D,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAM5DggS,GAAwB,SAAUzxO,GAElC,SAASyxO,IACL,OAAkB,OAAXzxO,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVAsqF,GAAUsyO,EAAQzxO,GAIlBN,IACI3jF,EAAS,KACV01T,EAAOvhU,UAAW,aAAS,GAC9BwvF,IACI3jF,EAAS,IACV01T,EAAOvhU,UAAW,aAAS,GACvBuhU,GACT59P,IAKE29P,GAAsB,SAAUxxO,GAEhC,SAASwxO,IACL,OAAkB,OAAXxxO,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAoB/D,OAtBAsqF,GAAUqyO,EAAMxxO,GAIhBN,IACI3jF,EAAS,SACVy1T,EAAKthU,UAAW,YAAQ,GAC3BwvF,IACI3jF,EAAS,KACVy1T,EAAKthU,UAAW,aAAS,GAC5BwvF,IACI3jF,EAAS,aACVy1T,EAAKthU,UAAW,kBAAc,GACjCwvF,IACI3jF,EAAS,WACVy1T,EAAKthU,UAAW,kBAAc,GACjCwvF,IACI3jF,EAAS,WACVy1T,EAAKthU,UAAW,iBAAa,GAChCwvF,IACI3jF,EAAS,IACVy1T,EAAKthU,UAAW,eAAW,GACvBshU,GACT39P,IAKE89P,GAAwB,SAAU3xO,GAElC,SAAS2xO,IACL,OAAkB,OAAX3xO,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAc/D,OAhBAsqF,GAAUwyO,EAAQ3xO,GAIlBN,IACI3jF,EAAS,KACV41T,EAAOzhU,UAAW,YAAQ,GAC7BwvF,IACI3jF,EAAS,KACV41T,EAAOzhU,UAAW,aAAS,GAC9BwvF,IACI3jF,EAAS,KACV41T,EAAOzhU,UAAW,WAAO,GAC5BwvF,IACI3jF,EAAS,KACV41T,EAAOzhU,UAAW,cAAU,GACxByhU,GACT99P,IAKEm+P,GAAiC,SAAUhyO,GAE3C,SAASgyO,IACL,OAAkB,OAAXhyO,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAuB/D,OAzBAsqF,GAAU6yO,EAAiBhyO,GAI3BN,IACI3jF,GAAS,IACVi2T,EAAgB9hU,UAAW,cAAU,GACxCwvF,IACI3jF,EAAS,YACVi2T,EAAgB9hU,UAAW,YAAQ,GACtCwvF,IACI9iF,GAAUyuB,MAAO,UAAW1J,KAAM,QAAU6vS,KAC7CQ,EAAgB9hU,UAAW,iBAAa,GAC3CwvF,IACI3jF,EAAS,OACVi2T,EAAgB9hU,UAAW,cAAU,GACxCwvF,IACI3jF,EAAS,OACVi2T,EAAgB9hU,UAAW,gBAAY,GAC1CwvF,IACI3jF,GAAS,IACVi2T,EAAgB9hU,UAAW,uBAAmB,GACjDwvF,IACI9iF,KAAY60T,KACbO,EAAgB9hU,UAAW,cAAU,GACjC8hU,GACTn+P,KDhHF,SAAWm2N,GAEPA,EAAMgnC,eACFrvS,KAAM,OACNC,WAAY,SACZyJ,MAAO,KACPxJ,UAAW,SACXC,WAAY,YAGhBkoQ,EAAM9yP,cAAgB,KAEtB8yP,EAAM6+G,cAAgB,KAEtB7+G,EAAM8+G,aAAe,KAdzB,CAeG9+G,KAAUA,QEnBb,IAAI7qM,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAQ5Ds3W,GAAsB,SAAU/oT,GAEhC,SAAS+oT,IACL,OAAkB,OAAX/oT,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbAsqF,GAAU4pT,EAAM/oT,GAIhBN,IACI3jF,EAAS,IACVgtY,EAAK74Y,UAAW,aAAS,GAC5BwvF,IACI3jF,EAAS,KACVgtY,EAAK74Y,UAAW,iBAAa,GAChCwvF,IACI3jF,EAASiuR,GAAM9yP,gBAChB6xW,EAAK74Y,UAAW,aAAS,GACrB64Y,GACTl1U,IAKE4zE,GAAuB,SAAUznD,GAEjC,SAASynD,IACL,OAAkB,OAAXznD,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAuB/D,OAzBAsqF,GAAUsoD,EAAOznD,GAIjBN,IACI9iF,EAAQotR,GAAMgnC,cAAeQ,KAC9B/pL,EAAMv3I,UAAW,YAAQ,GAC5BwvF,IACI3jF,EAAS,KACV0rI,EAAMv3I,UAAW,cAAU,GAC9BwvF,IACI3jF,EAAS,WACV0rI,EAAMv3I,UAAW,gBAAY,GAChCwvF,IACI3jF,EAAS,SACV0rI,EAAMv3I,UAAW,mBAAe,GACnCwvF,IACI3jF,GAAS,IACV0rI,EAAMv3I,UAAW,iBAAa,GACjCwvF,IACI3jF,GAAS,IACV0rI,EAAMv3I,UAAW,qBAAiB,GACrCwvF,IACI3jF,EAAS,IACV0rI,EAAMv3I,UAAW,cAAU,GACvBu3I,GACT5zE,IAKEm1U,GAAuB,SAAUhpT,GAEjC,SAASgpT,IACL,OAAkB,OAAXhpT,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAoB/D,OAtBAsqF,GAAU6pT,EAAOhpT,GAIjBN,IACI3jF,EAAS,OACVitY,EAAM94Y,UAAW,aAAS,GAC7BwvF,IACI3jF,EAAS,OACVitY,EAAM94Y,UAAW,WAAO,GAC3BwvF,IACI3jF,EAAS,OACVitY,EAAM94Y,UAAW,cAAU,GAC9BwvF,IACI3jF,EAAS,KACVitY,EAAM94Y,UAAW,kBAAc,GAClCwvF,IACI3jF,EAAS,KACVitY,EAAM94Y,UAAW,gBAAY,GAChCwvF,IACI3jF,EAAS,OACVitY,EAAM94Y,UAAW,aAAS,GACtB84Y,GACTn1U,IAKEo1U,GAAsB,SAAUjpT,GAEhC,SAASipT,IACL,OAAkB,OAAXjpT,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAuB/D,OAzBAsqF,GAAU8pT,EAAMjpT,GAIhBN,IACI3jF,EAAS,OACVktY,EAAK/4Y,UAAW,aAAS,GAC5BwvF,IACI3jF,EAAS,OACVktY,EAAK/4Y,UAAW,cAAU,GAC7BwvF,IACI3jF,EAAS,OACVktY,EAAK/4Y,UAAW,gBAAY,GAC/BwvF,IACI3jF,EAAS,IACVktY,EAAK/4Y,UAAW,cAAU,GAC7BwvF,IACI3jF,EAASiuR,GAAM6+G,gBAChBI,EAAK/4Y,UAAW,aAAS,GAC5BwvF,IACI3jF,EAAS,WACVktY,EAAK/4Y,UAAW,gBAAY,GAC/BwvF,IACI3jF,GAAS,IACVktY,EAAK/4Y,UAAW,qBAAiB,GAC7B+4Y,GACTp1U,IAKEq1U,GAAqB,SAAUlpT,GAE/B,SAASkpT,IACL,OAAkB,OAAXlpT,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbAsqF,GAAU+pT,EAAKlpT,GAIfN,IACI3jF,EAAS,YACVmtY,EAAIh5Y,UAAW,aAAS,GAC3BwvF,IACI9iF,GAAUyuB,MAAO2+P,GAAM8+G,aAAcj+X,MAAO,GAAK4mT,KAClDy3E,EAAIh5Y,UAAW,cAAU,GAC5BwvF,IACI3jF,EAAS,IACVmtY,EAAIh5Y,UAAW,cAAU,GACrBg5Y,GACTr1U,IAKEs1U,GAA4B,SAAUnpT,GAEtC,SAASmpT,IACL,OAAkB,OAAXnpT,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbAsqF,GAAUgqT,EAAYnpT,GAItBN,IACI3jF,EAASiuR,GAAM8+G,eAChBK,EAAWj5Y,UAAW,aAAS,GAClCwvF,IACI9iF,GAAUyuB,MAAO2+P,GAAM8+G,aAAcj+X,MAAO,GAAK4mT,KAClD03E,EAAWj5Y,UAAW,cAAU,GACnCwvF,IACI3jF,EAAS,OACVotY,EAAWj5Y,UAAW,cAAU,GAC5Bi5Y,GACTt1U,IAKE1mC,GAA2B,SAAU6yD,GAErC,SAAS7yD,IACL,OAAkB,OAAX6yD,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVAsqF,GAAUhyD,EAAW6yD,GAIrBN,IACI3jF,GAAS,IACVoxB,EAAUj9B,UAAW,cAAU,GAClCwvF,IACI3jF,EAAS,MACVoxB,EAAUj9B,UAAW,gBAAY,GAC7Bi9B,GACT0mC,IAKEu1U,GAA4B,SAAUppT,GAEtC,SAASopT,IACL,OAAkB,OAAXppT,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAuB/D,OAzBAsqF,GAAUiqT,EAAYppT,GAItBN,IACI3jF,EAAS,OACVqtY,EAAWl5Y,UAAW,eAAW,GACpCwvF,IACI3jF,EAAS,KACVqtY,EAAWl5Y,UAAW,aAAS,GAClCwvF,IACI3jF,EAAS,QACVqtY,EAAWl5Y,UAAW,cAAU,GACnCwvF,IACI3jF,EAAS,OACVqtY,EAAWl5Y,UAAW,cAAU,GACnCwvF,IACI3jF,GAAS,IACVqtY,EAAWl5Y,UAAW,iBAAa,GACtCwvF,IACI9iF,GAAU+kB,KAAM,OAAQ0J,MAAO,WAAammS,KAC7C43E,EAAWl5Y,UAAW,iBAAa,GACtCwvF,IACI3jF,EAAS,OACVqtY,EAAWl5Y,UAAW,mBAAe,GACjCk5Y,GACTv1U,IAKEw1U,GAAyB,SAAUrpT,GAEnC,SAASqpT,IACL,OAAkB,OAAXrpT,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KA4C/D,OA9CAsqF,GAAUkqT,EAASrpT,GAInBN,IACI3jF,EAAS,OACVstY,EAAQn5Y,UAAW,aAAS,GAC/BwvF,IACI3jF,EAAS,WACVstY,EAAQn5Y,UAAW,YAAQ,GAC9BwvF,IACI3jF,EAAS,OACVstY,EAAQn5Y,UAAW,gBAAY,GAClCwvF,IACI3jF,EAAS,OACVstY,EAAQn5Y,UAAW,cAAU,GAChCwvF,IACI3jF,EAAS,KACVstY,EAAQn5Y,UAAW,oBAAgB,GACtCwvF,IACI9iF,KAAYssY,KACbG,EAAQn5Y,UAAW,WAAO,GAC7BwvF,IACI9iF,KAAYusY,KACbE,EAAQn5Y,UAAW,kBAAc,GACpCwvF,IACI3jF,EAASiuR,GAAM8+G,eAChBO,EAAQn5Y,UAAW,aAAS,GAC/BwvF,IACI9iF,GAAUyuB,MAAO,UAAWxgB,MAAO,GAAK4mT,KACzC43E,EAAQn5Y,UAAW,cAAU,GAChCwvF,IACI9iF,EAAQ,KAAMuwB,KACfk8W,EAAQn5Y,UAAW,iBAAa,GACnCwvF,IACI3jF,EAAS,WACVstY,EAAQn5Y,UAAW,mBAAe,GACrCwvF,IACI3jF,EAAS,IACVstY,EAAQn5Y,UAAW,oBAAgB,GACtCwvF,IACI3jF,EAAS,OACVstY,EAAQn5Y,UAAW,mBAAe,GACrCwvF,IACI3jF,EAAS,IACVstY,EAAQn5Y,UAAW,mBAAe,GAC9Bm5Y,GACTx1U,IAKEsiQ,GAAsB,SAAUn2O,GAEhC,SAASm2O,IAML,IAAIvhU,EAAmB,OAAXorF,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAGhE,OADAD,EAAMo1B,iBACCp1B,EA4CX,OAtDAuqF,GAAUg3O,EAAMn2O,GAYhBN,IACI3jF,EAAS,OACVo6T,EAAKjmU,UAAW,eAAW,GAC9BwvF,IACI3jF,EAAS,OACVo6T,EAAKjmU,UAAW,eAAW,GAC9BwvF,IACI3jF,EAAS,OACVo6T,EAAKjmU,UAAW,cAAU,GAC7BwvF,IACI9iF,KAAYmsY,KACb5yE,EAAKjmU,UAAW,iBAAa,GAChCwvF,IACIxiF,OAAiB8rY,KAClB7yE,EAAKjmU,UAAW,cAAU,GAC7BwvF,IACIxiF,OAAiBmsY,KAClBlzE,EAAKjmU,UAAW,gBAAY,GAC/BwvF,IACIxiF,OAAiBksY,KAClBjzE,EAAKjmU,UAAW,mBAAe,GAClCwvF,IACI9iF,GAAUiO,MAAO,EAAGD,OAAQ,IAAMq+X,KACnC9yE,EAAKjmU,UAAW,kBAAc,GACjCwvF,IACI9iF,GAAUiO,MAAO,EAAGD,OAAQ,GAAKq+X,KAClC9yE,EAAKjmU,UAAW,kBAAc,GACjCwvF,IACI3jF,EAAS,MACVo6T,EAAKjmU,UAAW,kBAAc,GACjCwvF,IACI3jF,EAAS,MACVo6T,EAAKjmU,UAAW,gBAAY,GAC/BwvF,IACI3jF,EAAS,cACVo6T,EAAKjmU,UAAW,iBAAa,GAChCwvF,IACI3jF,EAAS,OACVo6T,EAAKjmU,UAAW,kBAAc,GACjCwvF,IACI9iF,KAAY6qI,KACb0uL,EAAKjmU,UAAW,kBAAc,GAC1BimU,GACTtiQ,ICtUEy1U,GAA6B,WAK7B,SAASA,EAAYhwW,GACjBzkC,KAAKykC,MAAQA,EACbzkC,KAAKu0C,UAAY9P,EAAMzjC,QAAQsC,GAiFnC,OA5EAmxY,EAAYp5Y,UAAUuhV,iBAAmB,SAAUzmU,EAAMlE,GACrD,IAAIlS,EAAQC,KACRgB,EAAUG,EAAc,OACxBmC,GAAItD,KAAKu0C,UAAY,gBAAkBtiC,IAEvCoC,EAAgBkZ,GAAWvtB,KAAKu0C,UAAY,sBAChDp+B,EAAKygD,YAAYh/B,IAAI,SAAU+2B,EAAY4zR,GACZ,OAAvB5zR,EAAWv0B,SACXr6B,EAAMm6B,eAAel5B,EAASuhV,EAAiBtwU,KAGnDoC,GAAiBrT,EAAQmkE,mBACzB9wD,EAAc1S,YAAYX,IAMlCyzY,EAAYp5Y,UAAU6+B,eAAiB,SAAUl5B,EAASuhV,EAAiB77S,GACvE,IAAIvwB,EAAOnW,KAAKykC,MAAMgjC,KAAK/gC,GACvBioB,EAAax4C,EAAKygD,YAAY2rR,GAC9BpoT,EAAeh5B,EAAc,OAC7BmC,GAAItD,KAAKu0C,UAAY,SAAW7N,EAAY,eAAiB67S,EAC7Dh/U,OAAQ,+BAAiCorD,EAAW8T,OAAS,eACxD9T,EAAW+lV,UAAY,WAAa/lV,EAAWptC,MAAQ,IAAM,OAAS,gBAAkB,MAE7FqX,GACAC,QAAQ,EAAOpB,KChCG,mBDgCqB2C,QAASu0B,EAAWv0B,QAC3DjkB,KAAMA,EAAMw4C,WAAYA,EAAYy1O,UAAWz1O,EAAWy1O,WAE9DpkS,KAAKykC,MAAMje,QCnCW,mBDmCeoS,GACrC,IAAIoB,EACAK,EACJ,IAAKzB,EAASC,OAAQ,CAElB,IADAmB,EAAaD,GAAoBnB,EAASwB,WACxBJ,EAAW7jB,GAAM1Z,OAE/B,IADA49B,EAAkBL,EAAW7jB,GACtBkkB,EAAgB59B,OAAS,GAC5B09B,EAAax4B,YAAY04B,EAAgB,SAI7CF,EAAax4B,YAAYR,EAAc,OACnCa,UAAW42B,EAASwB,QACpB72B,OAAQ+2B,GAAa1B,EAASwrQ,cAGtCpkS,KAAK20Y,eAAex6W,EAAchkB,EAAMw4C,GACxC3tD,EAAQW,YAAYw4B,KAM5Bs6W,EAAYp5Y,UAAUs5Y,eAAiB,SAAU3zY,EAASmV,EAAMw4C,GAC5D,IAAIjhC,EAAW6X,GAAqBopB,EAAWptC,MAAQ,GAAI8c,GAAeswB,EAAW/hD,OAAQuJ,EAAKy+X,eAAgB50Y,KAAKykC,MAAMw6T,UACzH/pV,EAAcqlB,GAAmBv5B,GACrCA,EAAQ0D,MAAM8H,KAAQkhB,EAAS3gB,EAAKmI,EAAYc,MAAQ,EAAM,KAC9DhV,EAAQ0D,MAAMgI,IAAOghB,EAAS1gB,EAAKkI,EAAYa,OAAS,EAAM,KAC9D/U,EAAQwC,aAAa,aAAcmrD,EAAWzc,aAAe,eAKjEuiW,EAAYp5Y,UAAUkkC,cAAgB,WAElC,MAAO,eAOXk1W,EAAYp5Y,UAAUiX,QAAU,SAAUmyB,KAGnCgwW,KEvFPI,GAA8B,WAK9B,SAASA,EAAapwW,GAClBzkC,KAAKykC,MAAQA,EACbzkC,KAAKgB,QAAUyjC,EAAMzjC,QACrBhB,KAAK6xB,QAAU4S,EAAM5S,QACrB7xB,KAAKokS,UAAYpkS,KAAK6xB,QAAQuyQ,UAC9BpkS,KAAK80Y,YAAc90Y,KAAK6xB,QAAQyS,OAChCtkC,KAAK+0Y,UAAY,IAAI/+V,IACjBI,QAAS,SACT4+V,aAAch1Y,KAAKi1Y,eAAe35Y,KAAK0E,MACvCm2C,WAAYn2C,KAAKk1Y,qBAAqB55Y,KAAK0E,MAC3CuuH,UAAW,EAAGQ,WAAY,MAE9B/uH,KAAK+0Y,UAAU1+V,SAASr2C,KAAKgB,SA8MjC,OAzMA6zY,EAAax5Y,UAAU2mI,cAAgB,SAAU76H,GAC7C,IACInG,EACAugB,EAFA4zX,EAAiB5uW,GAAWp/B,EAAO7D,GAAItD,KAAKykC,OAGhDzkC,KAAKo1Y,YAAcp1Y,KAAKykC,MAAMgjC,KAAK0tU,EAAezuW,WAClD1mC,KAAKm1Y,eAAkBn1Y,KAAKo1Y,YAAoB,SAAED,EAAexuW,cACjEplB,EAAQsjB,GAAkB7kC,KAAKm1Y,eAAetrQ,aAAc7pI,KAAKo1Y,YAAYziX,aAAarmB,IAAKtM,KAAKo1Y,YAAYziX,aAAa5S,IAAK/f,KAAKo1Y,YAAY3gX,WAAYz0B,KAAKo1Y,YAAYpwW,SAAyC,cAA/BhlC,KAAKo1Y,YAAY5/W,WAA6B,IAExL,QADhDx0B,EAAUhB,KAAKq1Y,oBAAoB9zX,IACvB1O,aAAa,qBACrB7S,KAAKkuE,aAAa3sD,GAClBvhB,KAAK+0Y,UAAUrzY,KAAKV,KAM5B6zY,EAAax5Y,UAAUg6Y,oBAAsB,SAAU9zX,GACnD,IAAImM,EAAW6X,GAAqBhkB,EAAOvhB,KAAKo1Y,YAAYR,cAAe50Y,KAAKykC,MAAMw6T,UAClFj+V,EAAUusB,GAAWvtB,KAAKgB,QAAQsC,GAAK,iBAa3C,OAZItC,GACAA,EAAQ0D,MAAM8H,KAAOkhB,EAAS3gB,EAAI,KAClC/L,EAAQ0D,MAAMgI,IAAMghB,EAAS1gB,EAAI,OAGjChM,EAAUG,EAAc,OACpBmC,GAAItD,KAAKgB,QAAQsC,GAAK,gBACtBC,OAAQ,0BAA4BmqB,EAAS3gB,EAAI,UAAY2gB,EAAS1gB,EAClE,mDAERugB,GAAWvtB,KAAKgB,QAAQsC,GAAK,sBAAsB3B,YAAYX,IAE5DA,GAKX6zY,EAAax5Y,UAAU6yE,aAAe,SAAU3sD,GAC5C,QAAQ,GACJ,KAAMA,GAAS,GAAKA,GAAS,GACzBvhB,KAAK+0Y,UAAU7gY,SAAW,cAC1B,MACJ,KAAMqN,GAAS,IAAMA,EAAQ,GACzBvhB,KAAK+0Y,UAAU7gY,SAAW,cAC1B,MACJ,KAAMqN,GAAS,IAAMA,EAAQ,IACzBvhB,KAAK+0Y,UAAU7gY,SAAW,aAC1B,MACJ,KAAMqN,GAAS,KAAOA,EAAQ,IAC1BvhB,KAAK+0Y,UAAU7gY,SAAW,aAC1B,MACJ,KAAMqN,GAAS,KAAOA,EAAQ,IAC1BvhB,KAAK+0Y,UAAU7gY,SAAW,UAC1B,MACJ,KAAMqN,GAAS,KAAOA,EAAQ,IAC1BvhB,KAAK+0Y,UAAU7gY,SAAW,UAC1B,MACJ,KAAMqN,GAAS,KAAOA,EAAQ,IAC1BvhB,KAAK+0Y,UAAU7gY,SAAW,WAC1B,MACJ,QACIlU,KAAK+0Y,UAAU7gY,SAAW,WAGlClU,KAAK+0Y,UAAUnpV,YAKnBipV,EAAax5Y,UAAU45Y,eAAiB,SAAUh1Y,GAC9C,IAAIq1Y,EAAgBt1Y,KAAKykC,MAAM5S,QAAQmK,QAAUh8B,KAAKo1Y,YAAYp/W,WAAWgG,OACzET,EAAoB+5W,GAAoD,OAAnCA,EAAc3lY,MAAM,WACzDqsB,EAASh8B,KAAKykC,MAAMwqC,KAAKC,iBACzBlzC,OAAQ4K,GAAe0uW,GAAgBnmU,YAAanvE,KAAKykC,MAAM2qC,uBAE/Dh1C,EAAUmB,EACV+5W,EAAc/lY,QAAQ,IAAIyU,OAAO,UAAW,KAAMgY,EAAOh8B,KAAKm1Y,eAAetrQ,eAC7E7tG,EAAOh8B,KAAKm1Y,eAAetrQ,cAG3BjxG,GACAC,QAAQ,EAAOpB,KDlGA,gBCmGf2C,QAJJA,EAAUp6B,KAAK6xB,QAAQ5iB,SACnB8qB,GAAoB/5B,KAAK6xB,QAAQ5iB,SAAjC8qB,CAA2C/5B,KAAKo1Y,aAAa,GAAKh7W,EAIlEkK,OAAQtkC,KAAK80Y,YACb3+X,KAAMnW,KAAKo1Y,YAAaxtU,QAAS5nE,KAAKm1Y,eACtC/wG,UAAWpkS,KAAKokS,WAEpBpkS,KAAKykC,MAAMje,QDxGQ,gBCwGeoS,GAClC54B,KAAK80Y,YAAcl8W,EAAS0L,OAC5BrkC,EAAK44B,OAASD,EAASC,OACvB74B,KAAK+0Y,UAAU36W,QAAUxB,EAASwB,QAClCp6B,KAAKokS,UAAYxrQ,EAASwrQ,UAC1BpkS,KAAK+0Y,UAAUnpV,YAKnBipV,EAAax5Y,UAAU65Y,qBAAuB,SAAUj1Y,GACpD,IAKI+iH,EACAzpG,EANAmT,EAAO1sB,KAAKokS,UACZ+wC,EAAcn1U,KAAK80Y,YAAYt+W,MAC/B8N,EAAStkC,KAAK80Y,YAAY9+X,MAC1Bu/X,EAAc,EAIlBt1Y,EAAKe,QAAQ8C,UAAUS,OAAO,iBAC9BtE,EAAKe,QAAQ8C,UAAUM,IAAI,gBAC3B,IAAIsnH,EAAWzrH,EAAKe,QAAQ2B,cAAc,gBAC1CsD,EAAkBhG,EAAKe,SACnB2wD,gBAAmB3xD,KAAK6xB,QAAQ+L,KAAMu3S,YAAeA,GAAe,UACpE1mP,YAAenqD,EAAS,OAE5Br+B,EAAkBhG,EAAKe,QAAQ2B,cAAc,mBACzC6zB,MAAS9J,EAAK8J,MAAOvJ,WAAcP,EAAKO,WAAYJ,SAAYH,EAAKI,KACrEC,WAAcL,EAAKK,WAAYtf,QAAWif,EAAKjf,QAAQP,WAAY8f,UAAaN,EAAKM,YAEzF/mB,EAAkBhG,EAAKe,QAAQ2B,cAAc,iBACzCqT,MAAS,GAAKu/X,EAAcjxW,GAAU,KAAMvuB,OAAUw/X,EAAcjxW,EAAS,OAE7EonF,EAAS5nH,UAAUK,SAAS,cAE5B6+G,GADAuyR,EAAct1Y,EAAKe,QAAQ2B,cAAc,gBAAgB+uC,cAC9B,KAC3BzrC,EAAkBhG,EAAKe,QAAQ2B,cAAc,uBACzC6yY,iBAAoB,cAAeC,gBAAmB,cAAeC,kBAAqBvgE,EAC1FtsH,gBAAmB7lG,EAAY2yR,iBAAoB3yR,EAAYqkC,kBAAqBrkC,IAExFzpG,EAAcg8X,EAAcjxW,EAAU,KACtCr+B,EAAkBhG,EAAKe,QAAQ2B,cAAc,uBACzC6yY,iBAAoB,cAAeC,gBAAmB,cAAeC,kBAAqB11Y,KAAK6xB,QAAQ+L,KACvGirL,gBAAmBtvM,EAAYo8X,iBAAoBp8X,EAAY8tI,kBAAqB9tI,EACpF/M,KAAQ83B,EAAS,KAAM53B,IAAO43B,EAAS,KAAMgS,QAAW,UAGvDo1E,EAAS5nH,UAAUK,SAAS,iBAEjC6+G,GADAuyR,EAAct1Y,EAAKe,QAAQ2B,cAAc,gBAAgB+uC,cAC9B,KAC3BzrC,EAAkBhG,EAAKe,QAAQ2B,cAAc,uBACzC6yY,iBAAoB,cAAeC,gBAAmB,cAAeG,eAAkBzgE,EACvFtsH,gBAAmB7lG,EAAY2yR,iBAAoB3yR,EAAY6yR,eAAkB7yR,IAErFzpG,EAAcg8X,EAAcjxW,EAAU,KACtCr+B,EAAkBhG,EAAKe,QAAQ2B,cAAc,uBACzC6yY,iBAAoB,cAAeC,gBAAmB,cAAeG,eAAkB51Y,KAAK6xB,QAAQ+L,KACpGirL,gBAAmBtvM,EAAYo8X,iBAAoBp8X,EAAYs8X,eAAkBt8X,EACjF/M,KAAQ83B,EAAS,KAAM53B,IAAO,IAAK4pC,QAAW,UAG7Co1E,EAAS5nH,UAAUK,SAAS,eACjC8B,EAAkBhG,EAAKe,QAAQ2B,cAAc,iBACzCqT,MAASu/X,EAAcjxW,EAAS,KAAMvuB,OAAU,GAAKw/X,EAAcjxW,GAAU,OAGjF0+E,GADAuyR,EAAct1Y,EAAKe,QAAQ2B,cAAc,gBAAgBiC,aAC9B,KAC3BqB,EAAkBhG,EAAKe,QAAQ2B,cAAc,uBACzCizY,eAAkB,cAAeF,kBAAqB,cAAeF,iBAAoBrgE,EACzF0gE,eAAkB7yR,EAAYqkC,kBAAqBrkC,EAAY2yR,iBAAoB3yR,IAEvFzpG,EAAcg8X,EAAcjxW,EAAU,KACtCr+B,EAAkBhG,EAAKe,QAAQ2B,cAAc,uBACzCizY,eAAkB,cAAeF,kBAAqB,cAAeF,iBAAoBx1Y,KAAK6xB,QAAQ+L,KACtGi4W,eAAkBt8X,EAAY8tI,kBAAqB9tI,EAAYo8X,iBAAoBp8X,EACnF/M,KAAQ83B,EAAS,KAAM53B,IAAO43B,EAAS,KAAMgS,QAAW,WAI5DrwC,EAAkBhG,EAAKe,QAAQ2B,cAAc,iBACzCqT,MAAUu/X,EAAcjxW,EAAU,KAAMvuB,OAAU,GAAKw/X,EAAcjxW,GAAU,OAGnF0+E,GADAuyR,EAAct1Y,EAAKe,QAAQ2B,cAAc,gBAAgBiC,aAC9B,KAC3BqB,EAAkBhG,EAAKe,QAAQ2B,cAAc,uBACzCizY,eAAkB,cAAeF,kBAAqB,cAAeD,gBAAmBtgE,EACxF0gE,eAAkB7yR,EAAYqkC,kBAAqBrkC,EAAY6lG,gBAAmB7lG,IAEtFzpG,EAAcg8X,EAAcjxW,EAAU,KACtCr+B,EAAkBhG,EAAKe,QAAQ2B,cAAc,uBACzCizY,eAAkB,cAAeF,kBAAqB,cAAeD,gBAAmBz1Y,KAAK6xB,QAAQ+L,KACrGi4W,eAAkBt8X,EAAY8tI,kBAAqB9tI,EAAYsvM,gBAAmBtvM,EAClF/M,MAAS83B,GAAU,EAAI,GAAK,GAAK,KAAM53B,IAAO43B,EAAS,KAAMgS,QAAW,UAGhFt2C,KAAK+0Y,UAAU7iV,QAAQjyD,EAAKkH,QAC5BlB,EAAkBhG,EAAKe,SACnBs1C,QAAW,QAASw/V,mBAAsB,WAC1CC,mBAAsB/1Y,KAAK6xB,QAAQ0yQ,gBAAkB,SAAW,SAMxEswG,EAAax5Y,UAAUkkC,cAAgB,WAEnC,MAAO,WAOXs1W,EAAax5Y,UAAUiX,QAAU,SAAUmyB,KAGpCowW,KCjOPmB,GAA8B,WAK9B,SAASA,EAAavxW,GAClBzkC,KAAKykC,MAAQA,EA+MjB,OAxMAuxW,EAAa36Y,UAAU46Y,kBAAoB,SAAU9/X,EAAMlE,EAAOjR,EAASyjC,GACvE,IAAIhV,EAAatZ,EAAKsZ,WACtBzvB,KAAKk2Y,cAAc//X,GACA,OAAfsZ,GACA+U,GAAW,IAAIpO,GAAWqO,EAAMzjC,QAAQsC,GAAK,kBAAoB2O,EAAOwd,EAAY,EAAG,cAAe,KAAM,IAAKgW,GAAWhB,EAAMw6T,SAAU,EAAG,IAAM5yV,KAAK0T,IAAI5J,EAAKkd,KAAKrd,MAAOG,EAAKkd,KAAKtd,QAAU,GAAK,GAAI,wBAAyB/U,EAASyjC,IAQtPuxW,EAAa36Y,UAAUgtU,aAAe,SAAUlyT,EAAMlE,EAAOjR,EAASyjC,GAClE,IAAIhQ,EAAate,EAAKse,WAClBuQ,EAAW7uB,EAAK6uB,SAChB7uB,EAAK4qT,UAAU/qT,MAAQ,IACvBye,EAAcyQ,GAAgBzQ,EAAYuQ,IAA0B,EAAGA,EAAW,KAAK,GAAjCvQ,EACtD+P,GAAW,IAAIpO,GAAWqO,EAAMzjC,QAAQsC,GAAK,aAAe2O,EAAO,cAAekE,EAAK4qT,UAAU/qT,MAAOG,EAAK4qT,UAAUvqS,MAAO,KAAMrgB,EAAK4qT,UAAUjvR,UAAWrM,GAAWhB,EAAMw6T,SAAUxqU,EAAa,GAAIuQ,EAAW,GAAI7uB,EAAKy+X,eAAgB,GAAI,wBAAyB5zY,EAASyjC,KAQ5RuxW,EAAa36Y,UAAU86Y,eAAiB,SAAUhgY,EAAMlE,EAAOjR,EAASyjC,GACpE,IAMI/W,EAEA7Z,EACA0N,EACAlO,EAVA2T,EAAeyd,EAAM5W,SAASw+C,aAC9B/oE,GAAImhC,EAAMzjC,QAAQsC,GAAK,gBAAkB2O,IAEzC8N,EAAM5J,EAAKwc,aAAa5S,IACxBzT,EAAM6J,EAAKwc,aAAarmB,IACxBy0B,EAAkB5qB,EAAKgf,cAEvBzwB,EAAQyR,EAAK6f,WAIbppB,EAASuJ,EAAKy+X,cAEK,YAAnBlwY,EAAMwP,SACNtH,GAAWuJ,EAAKigY,UAAYjgY,EAAK+rT,aAAansT,OAASI,EAAK4qT,UAAU/qT,MAAQ,KAI9EpJ,GAAWuJ,EAAKkgY,SAAWlgY,EAAK+rT,aAAansT,OAASI,EAAK4qT,UAAU/qT,MAAQ,IACxEtR,EAAMgwY,UAPI,GAOuB,GAE1C,IAAK,IAAIv4Y,EAAI,EAAGs+B,EAAWsG,EAAgBtkC,OAAQN,EAAIs+B,EAAUt+B,IAClD,IAANA,GAAiC,UAAtBuI,EAAM4xY,aACjBn6Y,IAAOs+B,EAAW,GAA4B,SAAtB/1B,EAAM4xY,cAGnCjjY,EAAQ0tB,EAAgB5kC,GAExBuxB,EAAW6X,GADXhkB,EAAQlV,KAAKoxB,MAAMoH,GAAkBxxB,EAAMrW,MAAOsP,EAAKyT,EAAK5J,EAAKse,WAAYte,EAAK6uB,SAA6B,cAAnB7uB,EAAKqf,YAC1D5oB,EAAQ63B,EAAMw6T,UACrDprV,EAAS7T,KAAKu2Y,WAAW7oX,EAAUhpB,EAAO6c,EAAOlO,GACjDijB,GAAY,IAAIC,GAAWkO,EAAMzjC,QAAQsC,GAAK,SAAW2O,EAAQ,UAAY9V,EAAGuxB,EAAS3gB,EAAG2gB,EAAS1gB,EAAG6G,EAAQR,EAAMoZ,KAAM/nB,EAAMgwY,UAAY,WAAanzX,EAAQ,IAAM,IAAOmM,EAAU,EAAI,IAAMA,EAAS1gB,EAAI,IAAM,GAAI,QAAStI,EAAMgoB,KAAMhoB,EAAM8xY,cAAgB3vW,GAAcxzB,EAAMrW,MAAOmZ,EAAK2wB,OAAQpiC,EAAMgoB,KAAK8J,OAAS9xB,EAAMgoB,KAAK8J,MAAOxP,EAAc,yBAEtWhmB,EAAQW,YAAYqlB,IAMxBgvX,EAAa36Y,UAAUk7Y,WAAa,SAAU7oX,EAAUhpB,EAAO6c,EAAOlO,GAClE,GAAI3O,EAAMgwY,UACN,MAAO,SAEX,IAAI7gY,EAA4B,WAAnBnP,EAAMwP,SACbqN,EAAQ,KAAOA,EAAQ,IAAO,QAAY,IAAMA,GAASA,EAAQ,GAAM,MAAQ,SAC/EA,EAAQ,KAAOA,EAAQ,IAAO,MAAU,IAAMA,GAASA,EAAQ,GAAM,QAAU,SAMrF,OALAmM,EAAS1gB,GAAwB,WAAnBtI,EAAMwP,SACdqN,GAAS,KAAOA,GAAS,IAAQlO,EAAMyZ,KAAK/W,OAAS,EAClDwL,GAAS,IAAMA,GAAS,IAAO,EAAIlO,EAAMyZ,KAAK/W,OAAS,EAC1DwL,GAAS,KAAOA,GAAS,IAAO,EAC7BA,GAAS,IAAMA,GAAS,IAAOlO,EAAMyZ,KAAK/W,OAAS,EAAI1C,EAAMyZ,KAAK/W,OAAS,EAC7ElC,GAOXmiY,EAAa36Y,UAAUo7Y,mBAAqB,SAAUtgY,EAAMlE,EAAOjR,EAASyjC,GACxE,IAAIiyW,EAAoBjyW,EAAM5W,SAASw+C,aACnC/oE,GAAImhC,EAAMzjC,QAAQsC,GAAK,wBAA0B2O,IAEjD0kY,EAAiBxgY,EAAKygY,WACtBC,EAA4C,OAA5BF,EAAex0Y,SAC/Bw0Y,EAAex0Y,SAAYgU,EAAKwc,aAAaxwB,SAAW,EACxD20Y,EAAeH,EAAeH,cAClC,GAAIG,EAAe3gY,OAAS2gY,EAAe5gY,QAAU8gY,EAAe,CAChE,IAAK,IAAI16Y,EAAIga,EAAKwc,aAAa5S,IAAKzT,EAAM6J,EAAKwc,aAAarmB,IAAKnQ,GAAKmQ,EAAKnQ,GAAK06Y,EACxE72Y,KAAK+2Y,YAAYx4Y,SAASpC,EAAE6iB,QAAQ,IAAM,GAC1CwlB,GAAW,IAAIpO,GAAWqO,EAAMzjC,QAAQsC,GAAK,wBAA0B2O,EAAQ,IAAM9V,EAAG,cAAew6Y,EAAe3gY,MAAO8gY,EAAejwW,GAAc1qC,EAAGga,EAAK2wB,OAAQ6vW,EAAengX,OAASmgX,EAAengX,MAAO,KAAM,IAAKx2B,KAAKg3Y,eAAe76Y,EAAGw6Y,EAAgBxgY,GAAO,GAAI,wBAAyBugY,EAAmBjyW,GAGzUzjC,EAAQW,YAAY+0Y,KAQ5BV,EAAa36Y,UAAU47Y,mBAAqB,SAAU9gY,EAAMlE,EAAOjR,EAASyjC,GACxE,IAAIyyW,EAAoBzyW,EAAM5W,SAASw+C,aACnC/oE,GAAImhC,EAAMzjC,QAAQsC,GAAK,wBAA0B2O,IAEjDklY,EAAiBhhY,EAAKihY,WACtBN,EAAeK,EAAeX,cAElC,GADAx2Y,KAAK+2Y,eACDI,EAAenhY,OAASmhY,EAAephY,QAAUI,EAAKwc,aAAaxwB,SAAU,CAC7E,IAAK,IAAIhG,EAAIga,EAAKwc,aAAa5S,IAAKzT,EAAM6J,EAAKwc,aAAarmB,IAAKnK,EAAWgU,EAAKwc,aAAaxwB,SAAUhG,GAAKmQ,EAAKnQ,GAAKgG,EACnHnC,KAAK+2Y,YAAYvyY,MAAMrI,EAAE6iB,QAAQ,IACjCwlB,GAAW,IAAIpO,GAAWqO,EAAMzjC,QAAQsC,GAAK,wBAA0B2O,EAAQ,IAAM9V,EAAG,cAAeg7Y,EAAenhY,MAAO8gY,EAAejwW,GAAc1qC,EAAGga,EAAK2wB,OAAQqwW,EAAe3gX,OAAS2gX,EAAe3gX,MAAO,KAAM,IAAKx2B,KAAKg3Y,eAAe76Y,EAAGg7Y,EAAgBhhY,GAAO,GAAI,wBAAyB+gY,EAAmBzyW,GAErUzjC,EAAQW,YAAYu1Y,KAQ5BlB,EAAa36Y,UAAU27Y,eAAiB,SAAUh6Y,EAAOgW,EAASmD,GAC9D,IAAIkhY,EAAiBlhY,EAAK4qT,UAAU/qT,MAAQ,EAAKhD,EAAQrH,OACrDyuW,EAAiC,YAArBpnW,EAAQkB,SACpBqN,EAAQsjB,GAAkB7nC,EAAOmZ,EAAKwc,aAAarmB,IAAK6J,EAAKwc,aAAa5S,IAAK5J,EAAKse,WAAYte,EAAK6uB,SAA6B,cAAnB7uB,EAAKqf,WACpHj4B,EAAQgoC,GAAqBhkB,EAAOpL,EAAKy+X,eACxCx6B,EAAYi9B,GAAiBA,GAAgBr3Y,KAAKykC,MAAMw6T,UACzDpgV,EAAM0mB,GAAqBhkB,EAAOpL,EAAKy+X,eACtCx6B,EAAYi9B,GAAiBA,IAC7Bj9B,EAAYpnW,EAAQ+C,QAAU/C,EAAQ+C,QAAS/V,KAAKykC,MAAMw6T,UAC/D,MAAO,KAAO1hW,EAAMwP,EAAI,IAAMxP,EAAMyP,EAAI,MAAQ6R,EAAI9R,EAAI,IAAM8R,EAAI7R,EAAI,KAO1EgpY,EAAa36Y,UAAUi8Y,cAAgB,SAAUnhY,EAAMlE,EAAOjR,EAASyjC,GACnE,IAIIhQ,EACAuQ,EAEA7c,EACA+P,EAGAwN,EACAC,EAZA5lC,EAAQC,KACRu3Y,EAAe9yW,EAAM5W,SAASw+C,aAC9B/oE,GAAImhC,EAAMzjC,QAAQsC,GAAK,gBAAkB2O,IAIzCgzB,EAAiC,cAAnB9uB,EAAKqf,UAGnBzV,EAAM5J,EAAKwc,aAAa5S,IACxBzT,EAAM6J,EAAKwc,aAAarmB,IAG5B6J,EAAK2wB,OAAOlP,IAAI,SAAU7F,EAAOylX,GAC7Bz3Y,EAAM03Y,qBAAqBthY,EAAM4b,GACjC5J,EAAa9b,KAAK0T,IAAI1T,KAAKC,IAAIylB,EAAMx0B,MAAOwiB,GAAMgS,EAAMlT,KACxDqZ,EAAW7rB,KAAK0T,IAAI1T,KAAKC,IAAIylB,EAAMx0B,MAAOw0B,EAAMlT,KAAMvS,GAClD6b,IAAe+P,IACfzD,EAAaoQ,GAAkB1c,EAAY7b,EAAKyT,EAAK5J,EAAKse,WAAYte,EAAK6uB,SAAUC,GACrFD,EAAWH,GAAkB3M,EAAU5rB,EAAKyT,EAAK5J,EAAKse,WAAYte,EAAK6uB,SAAUC,GAE7ES,EADA3T,EAAM2T,WAAWjpC,OAAS,EACb0nC,GAAQpS,EAAM2T,WAAY3T,EAAM6iX,eAGhC7iX,EAAM2T,WAGnBC,EADA5T,EAAM4T,SAASlpC,OAAS,EACb0nC,GAAQpS,EAAM4T,SAAU5T,EAAM6iX,eAG9B7iX,EAAM4T,SAErBX,EAAWC,EAAcD,GAAYvQ,EAAYA,EAAauQ,GAAU,GACxEW,EAAWV,EAAcU,GAAYD,EAAYA,EAAaC,GAAU,GACxEnB,GAAW,IAAIpO,GAAWqO,EAAMzjC,QAAQsC,GAAK,SAAW2O,EAAQ,UAAYulY,EAAYzlX,EAAMkV,WAAY,EAAGlV,EAAMkV,WAAY,EAAG,IAAKxB,GAAWhB,EAAMw6T,SAAU5yV,KAAK+S,MAAMqV,GAAapoB,KAAKwmB,KAAKmS,GAAWjT,EAAM6iX,cAAelvW,EAAYC,GAAW,GAAI,wBAAyB4xW,EAAc9yW,MAG9SzjC,EAAQW,YAAY41Y,IAMxBvB,EAAa36Y,UAAUo8Y,qBAAuB,SAAUthY,EAAM4b,GAC1D,IAAInlB,EAA0B,OAAjBmlB,EAAMnlB,OAAkBmlB,EAAMnlB,OAAS,OACpDmlB,EAAM6iX,cAAgBv2W,GAAezxB,EAAQuJ,EAAKy+X,gBAOtDoB,EAAa36Y,UAAU66Y,cAAgB,SAAU//X,GAC7C,IAAIuhY,GAA8B13Y,KAAKykC,MAAMvpB,ONhMlC,UAAW,UAAW,UAAW,UAAW,YMiMvD/E,EAAK2wB,OAAOlP,IAAI,SAAU7F,EAAO9f,GAC7B8f,EAAMkV,WAAalV,EAAMyE,MAAQzE,EAAMyE,MAAQkhX,EAAYzlY,EAAQylY,EAAYj7Y,WAGhFu5Y,KCnNP2B,GAAiC,WAKjC,SAASA,EAAgBlzW,GACrBzkC,KAAKykC,MAAQA,EAsMjB,OA/LAkzW,EAAgBt8Y,UAAUu8Y,aAAe,SAAUzhY,EAAMuwB,EAAW1lC,EAASyjC,EAAOlM,GAChF,IAAIx4B,EAAQC,UACI,IAAZu4B,IAAsBA,GAAU,GACpC,IAGI4B,EAHA6sC,EAAiBviC,EAAM5W,SAASw+C,aAChC/oE,GAAImhC,EAAMzjC,QAAQsC,GAAK,kBAAoBojC,IAI/CvwB,EAAKwxD,SAAS/vC,IAAI,SAAUgwC,EAASjhC,GACzBxwB,EAAKwc,aACbi1C,EAAQy7N,eACRtjS,EAAM83Y,uBAAuB1hY,EAAMyxD,GACnCztC,EAAesK,EAAM5W,SAASw+C,aAC1B/oE,GAAImhC,EAAMzjC,QAAQsC,GAAK,SAAWojC,EAAY,YAAcC,IAEhE5mC,EAAM,OAAS6nE,EAAQlhE,KAAO,WAAWyP,EAAMuwB,EAAWC,EAAcxM,EAAcsK,GACtF1kC,EAAM+3Y,gBAAgB3hY,EAAMyxD,EAASA,EAAQiiE,cAC7C7iE,EAAerlE,YAAYw4B,GACvB5B,GACAx4B,EAAMg4Y,mBAAmBnwU,EAASzxD,KAG1CnV,EAAQW,YAAYqlE,IAMxB2wU,EAAgBt8Y,UAAUw8Y,uBAAyB,SAAU1hY,EAAMyxD,GAE/DA,EAAQgtU,cAAmC,OAAnBhtU,EAAQh7D,OAC3BuJ,EAAKy+X,eAAiBz+X,EAAKkgY,QAFlB,GAGVh4W,GAAeupC,EAAQh7D,OAAQuJ,EAAKy+X,gBAM5C+C,EAAgBt8Y,UAAU28Y,kBAAoB,SAAU7hY,EAAMuwB,EAAWz0B,EAAOoC,EAAeowB,GAC3F,IACIwzW,EACAvqX,EACA8H,EAGA0iX,EANAtwU,EAAUzxD,EAAKwxD,SAAS11D,GAIxBslD,EAAM9yB,EAAMw6T,SACZjpV,EAAQ4xD,EAAQuwU,aAAe,EAGnCzqX,EAAW6X,GAAqB,EAAGqiC,EAAQgtU,cAAer9U,GAC1D/hC,EAAY,KAAO+hC,EAAIxqD,EAAI,KAAOwqD,EAAIvqD,EAAIgJ,GAAS,MAAS0X,EAAU,EAAI,IAAM6pC,EAAIvqD,EAChF,MAASuqD,EAAK,EAAI,KAAOA,EAAIvqD,EAAIgJ,GAAS,KAC9C4xD,EAAQy7N,YAAY7+R,KAAKggC,GAAW,IAAIpO,GAAWqO,EAAMzjC,QAAQsC,GAAK,SAAWojC,EAAY,mBAAqBz0B,EAAO21D,EAAQpxC,MAAOoxC,EAAQtjC,OAAOtuB,MAAO4xD,EAAQtjC,OAAO9N,MAAO,KAAM,IAAKhB,GAAYnhB,EAAeowB,IAC1NwzW,EAAgB55W,GAAeupC,EAAQwwU,WAAW37Y,OAAQmrE,EAAQgtU,eAElEsD,EAAgB,KAAO3gV,EAAIxqD,EAAI,KAAOwqD,EAAIvqD,EAAIgJ,GAAS,MAAS0X,EAAU,EAAI,KAAO6pC,EAAIvqD,EAAIgJ,GACzF,MAAQ0X,EAAS3gB,EAAI,KAAOwqD,EAAIvqD,EAAIgJ,GAAS,MAAQuhD,EAAIxqD,EAAI,KAAOwqD,EAAIvqD,EAAIgJ,GAE5EiiY,IACAvqX,EAAW6X,GAAqB,IAAK0yW,EAAexzW,EAAMw6T,UAC1DzpU,EAAY,KAAO+hC,EAAIxqD,EAAI,KAAOwqD,EAAIvqD,EAAIgJ,GACtC,MAAS0X,EAAU,EAAI,KAAO6pC,EAAIvqD,EAAIgJ,GACtC,MAAS0X,EAAU,EAAI,KAAO6pC,EAAIvqD,EAAIgJ,GACtC,MAASuhD,EAAK,EAAI,KAAOA,EAAIvqD,EAAIgJ,GAAS,KAC9C4xD,EAAQy7N,YAAY7+R,KAAKggC,GAAW,IAAIpO,GAAWqO,EAAMzjC,QAAQsC,GAAK,SAAWojC,EAAY,uBAAyBz0B,EAAO21D,EAAQwwU,WAAW5hX,MAAOoxC,EAAQwwU,WAAW9zW,OAAOtuB,MAAO4xD,EAAQwwU,WAAW9zW,OAAO9N,MAAO,KAAM,IAAKhB,GAAYnhB,EAAeowB,IAC/PyzW,GAAiB,MAAQxqX,EAAS3gB,EAAI,KAAOwqD,EAAIvqD,EAAIgJ,GAAS,MAAQ0X,EAAS3gB,EAAI,KAAOwqD,EAAIvqD,EAAIgJ,IAGlG4xD,EAAQywU,IAAIzrY,QACZg7D,EAAQy7N,YAAY7+R,KAAKggC,GAAW5V,GAAgB2oC,EAAK,SAAU,IAAInqC,GAA0B,EAArBw6C,EAAQywU,IAAIzrY,OAAiC,EAArBg7D,EAAQywU,IAAIzrY,QAAa,GAAI,IAAIwpB,GAAWqO,EAAMzjC,QAAQsC,GAAK,SAAWojC,EAAY,sBAAwBz0B,EAAO21D,EAAQywU,IAAI7hX,MAAOoxC,EAAQywU,IAAI/zW,OAAOtuB,MAAO4xD,EAAQywU,IAAI/zW,OAAO9N,MAAO,KAAM,IAAK,GAAI,KAAMniB,EAAeowB,EAAO,YAE/UmjC,EAAQy7N,YAAY7+R,KAAKggC,GAAW,IAAIpO,GAAWqO,EAAMzjC,QAAQsC,GAAK,SAAWojC,EAAY,uBAAyBz0B,EAAO,cAAe,EAAG,cAAe,KAAM,IAAKimY,EAAgB,MAAO7jY,EAAeowB,KAOnNkzW,EAAgBt8Y,UAAUy8Y,gBAAkB,SAAU3hY,EAAMyxD,EAAS5qE,GACjE,IAAI0wB,EAAW1tB,KAAKykC,MAAMw6T,SACtBh6T,EAAiC,cAAnB9uB,EAAKqf,UACnBf,EAAaoQ,GAAkB1uB,EAAKwc,aAAa5S,IAAK5J,EAAKwc,aAAarmB,IAAK6J,EAAKwc,aAAa5S,IAAK5J,EAAKse,WAAYte,EAAK6uB,SAAUC,GACpID,EAAWH,GAAkB7nC,EAAOmZ,EAAKwc,aAAarmB,IAAK6J,EAAKwc,aAAa5S,IAAK5J,EAAKse,WAAYte,EAAK6uB,SAAUC,GACtHD,EAAWC,EAAcD,GAAYvQ,EAAYA,EAAauQ,GAAU,GACxE4iC,EAAQy7N,YAAYzrQ,IAAI,SAAU52B,GACT,aAAjB4mE,EAAQlhE,KACR1F,EAAQwC,aAAa,IAAK4iC,GAAe1Y,EAAU+G,EAAYuQ,EAAU4iC,EAAQgtU,cAAgBhtU,EAAQgtU,cAAgBhtU,EAAQuwU,eAGjIn3Y,EAAQwC,aAAa,YAAa,UAAYqhC,GAAkB7nC,EAAOmZ,EAAKwc,aAAarmB,IAAK6J,EAAKwc,aAAa5S,IAAK5J,EAAKse,WAAYte,EAAK6uB,SAAUC,GAAe,IAAMvX,EAAS3gB,EAAI,IAAM2gB,EAAS1gB,EAAI,KAE9MhM,EAAQwC,aAAa,aAAcokE,EAAQ11B,aAAe,WAAal1C,EAAMkQ,eAOrFyqY,EAAgBt8Y,UAAUi9Y,kBAAoB,SAAUniY,EAAMuwB,EAAWz0B,EAAOoC,EAAeowB,GAC3F,IAAImjC,EAAUzxD,EAAKwxD,SAAS11D,GACxByb,EAAW6X,GAAqB,EAAGqiC,EAAQgtU,cAAenwW,EAAMw6T,UACpEr3R,EAAQy7N,YAAY7+R,KAAKggC,GAAW5V,GAAgBlB,EAAUk6C,EAAQ6wQ,YAAa,IAAIrrT,GAAKw6C,EAAQsrQ,YAAatrQ,EAAQg+N,cAAeh+N,EAAQkvH,SAAU,IAAI1gK,GAAWqO,EAAMzjC,QAAQsC,GAAK,SAAWojC,EAAY,mBAAqBz0B,EAAO21D,EAAQpxC,MAAOoxC,EAAQtjC,OAAOtuB,MAAO4xD,EAAQtjC,OAAO9N,MAAO,KAAM,IAAK,GAAI,KAAMniB,EAAeowB,EAA+B,WAAxBmjC,EAAQ6wQ,YAA2B,UAAqC,UAAxB7wQ,EAAQ6wQ,YAA0B,QAAU,UAMrbk/D,EAAgBt8Y,UAAUk9Y,oBAAsB,SAAUpiY,EAAMuwB,EAAWz0B,EAAOoC,EAAeowB,GAC7F,IAAImjC,EAAUzxD,EAAKwxD,SAAS11D,GAC5B21D,EAAQy7N,YAAY7+R,KAAKggC,GAAW,IAAIpO,GAAWqO,EAAMzjC,QAAQsC,GAAK,SAAWojC,EAAY,qBAAuBz0B,EAAO21D,EAAQpxC,MAAOoxC,EAAQtjC,OAAOtuB,MAAO4xD,EAAQtjC,OAAO9N,MAAO,EAAG,IAAK,IAAKniB,EAAeowB,KAMtNkzW,EAAgBt8Y,UAAU08Y,mBAAqB,SAAUnwU,EAASzxD,GAC9D,IAAIpW,EAAQC,KACRmoB,EAAahS,EAAKwc,aAAa5S,IAC/BmY,EAAW0vC,EAAQiiE,aACnBjiE,EAAQjxB,UAAUlX,QAAUtX,IAAe+P,GAAYl4B,KAAKykC,MAAM+zW,gBAClE5wU,EAAQy7N,YAAYzrQ,IAAI,SAAU52B,GACT,aAAjB4mE,EAAQlhE,KACR3G,EAAM04Y,yBAAyBz3Y,EAASmnB,EAAY+P,EAAU/hB,EAAMyxD,EAASA,EAAQgtU,cAAgBhtU,EAAQgtU,cAAgBhtU,EAAQuwU,cAGrIp4Y,EAAM24Y,uBAAuB13Y,EAASmnB,EAAY+P,EAAU/hB,EAAMyxD,EAASA,EAAQgtU,cAAgBhtU,EAAQgtU,cAAgBhtU,EAAQuwU,iBAUnJR,EAAgBt8Y,UAAUq9Y,uBAAyB,SAAU13Y,EAASzD,EAAOshB,EAAK1I,EAAMyxD,EAASh7D,EAAQy5B,GACrG,IAKIsyW,EALA54Y,EAAQC,KACRilC,EAAiC,cAAnB9uB,EAAKqf,UACnBf,EAAaoQ,GAAkBtnC,EAAO4Y,EAAKwc,aAAarmB,IAAK6J,EAAKwc,aAAa5S,IAAK5J,EAAKse,WAAYte,EAAK6uB,SAAUC,GACpH2zW,EAAa/zW,GAAkBhmB,EAAK1I,EAAKwc,aAAarmB,IAAK6J,EAAKwc,aAAa5S,IAAK5J,EAAKse,WAAYte,EAAK6uB,SAAUC,GAClHD,EAAWvQ,EAAamkX,EAAcA,EAAa,IAAOA,EAE9D,IAAItgX,OAAcC,QAAQv3B,GACtBkK,SAAU08D,EAAQjxB,UAAUzrC,SAC5BstB,SAAU,SAAUv4B,GAChB04Y,EAAcp7Y,EAAQshB,GAAOxS,KAAKoxB,MAAMhJ,KAAgBpoB,KAAKoxB,MAAMuH,GAC/DC,EAAeD,EAAWvQ,EAAeuQ,EAAWvQ,EAAa,IACjEwQ,EAAeD,EAAWvQ,EAAa,IAAQuQ,EAAWvQ,EAC9DzzB,EAAQ0D,MAAMiyC,UAAY,OAC1B31C,EAAQwC,aAAa,YAAa,UAAYy0B,GAAOh4B,EAAKw4B,UAAWhE,EAAYkkX,EAAY14Y,EAAKiL,UAAY,IAC1GnL,EAAM0kC,MAAMw6T,SAASlyV,EAAEG,WAAa,IAAMnN,EAAM0kC,MAAMw6T,SAASjyV,EAAEE,WAAa,MAEtF2R,IAAK,SAAU+D,GACX7iB,EAAM+3Y,gBAAgB3hY,EAAMyxD,EAAS/oD,IAChB,WAAjB+oD,EAAQlhE,MAAsB1F,EAAQsC,GAAG/E,QAAQ,uBAAyB,IAC1EwB,EAAM0kC,MAAMje,QHtKD,qBGsK8BrQ,KAAMA,EAAMyxD,QAASA,QAU9E+vU,EAAgBt8Y,UAAUo9Y,yBAA2B,SAAUz3Y,EAASzD,EAAOshB,EAAK1I,EAAMyxD,EAASh7D,EAAQy5B,GACvG,IAKIsyW,EALA54Y,EAAQC,KACRilC,EAAiC,cAAnB9uB,EAAKqf,UACnBf,EAAaoQ,GAAkBtnC,EAAO4Y,EAAKwc,aAAarmB,IAAK6J,EAAKwc,aAAa5S,IAAK5J,EAAKse,WAAYte,EAAK6uB,SAAUC,GACpH4zW,EAAWh0W,GAAkB1uB,EAAKwc,aAAa5S,IAAK5J,EAAKwc,aAAarmB,IAAK6J,EAAKwc,aAAa5S,IAAK5J,EAAKse,WAAYte,EAAK6uB,SAAUC,GAClI2zW,EAAa/zW,GAAkBhmB,EAAK1I,EAAKwc,aAAarmB,IAAK6J,EAAKwc,aAAa5S,IAAK5J,EAAKse,WAAYte,EAAK6uB,SAAUC,GAElHD,EAAWvQ,EAAamkX,EAAcA,EAAa,IAAOA,EAC9D,IAAItgX,OAAcC,QAAQv3B,GACtBkK,SAAU08D,EAAQjxB,UAAUzrC,SAC5BstB,SAAU,SAAUu5D,GAChB/wF,EAAQ0D,MAAMiyC,UAAY,OAC1BgiW,EAAcp7Y,EAAQshB,GAAOxS,KAAKoxB,MAAMhJ,KAAgBpoB,KAAKoxB,MAAMuH,GAC/DC,EAAeD,EAAWvQ,EAAeuQ,EAAWvQ,EAAa,IACjEwQ,EAAeD,EAAWvQ,EAAa,IAAQuQ,EAAWvQ,EAC1DwQ,EACAjkC,EAAQwC,aAAa,IAAK4iC,GAAermC,EAAM0kC,MAAMw6T,SAAU45C,EAAU5gX,GAAO85D,EAAIt5D,UAAWhE,EAAYkkX,EAAY5mT,EAAI7mF,UAAY,KAAQ0B,EAAQy5B,IAGvJrlC,EAAQwC,aAAa,IAAK4iC,GAAermC,EAAM0kC,MAAMw6T,SAAUhnU,GAAO85D,EAAIt5D,UAAWhE,EAAYkkX,EAAY5mT,EAAI7mF,UAAW2tY,EAAW,KAAQjsY,EAAQy5B,KAG/JxnB,IAAK,SAAU+D,GACX7iB,EAAM+3Y,gBAAgB3hY,EAAMyxD,EAAS/oD,GACrC9e,EAAM0kC,MAAMje,QHxMG,qBGwM0BrQ,KAAMA,EAAMyxD,QAASA,QAInE+vU,KC1MPmB,GAAiC,WACjC,SAASA,EAAgBr0W,GACrBzkC,KAAKykC,MAAQA,EACbzkC,KAAK+4Y,aAAe,IAAI/C,GAAavxW,GACrCzkC,KAAKg5Y,gBAAkB,IAAIrB,GAAgBlzW,GA+P/C,OAxPAq0W,EAAgBz9Y,UAAUupU,YAAc,SAAUvxS,GAC9CrzB,KAAKi5Y,gBAAgBj5Y,KAAKykC,MAAOpR,GACjCrzB,KAAKk5Y,uBAOTJ,EAAgBz9Y,UAAU69Y,oBAAsB,WAI5C,IAAK,IAHDC,EACAvE,EACAwE,EAAqB,EAChBh7Y,EAAK,EAAGyE,EAAK7C,KAAKykC,MAAMgjC,KAAMrpE,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACzD,IAAI+X,EAAOtT,EAAGzE,GACd+6Y,EAAe9sY,KAAK0T,IAAI5J,EAAKkd,KAAKrd,MAAOG,EAAKkd,KAAKtd,QAAU,EAC7D6+X,EAA+B,MAAfz+X,EAAKvJ,OAAiByxB,GAAeloB,EAAKvJ,OAAQusY,GAAeA,EAKjFvE,GAJAwE,EAAqB/sY,KAAKC,IAAI/Q,MAAM8Q,KAAM8J,EAAK2wB,OAAOlP,IAAI,SAAU56B,GAChE,OAAOA,EAAM4P,OACR5P,EAAM4P,OAAOrO,QAAQ,KAAO,EAAI,IAAMw2B,SAAS/3B,EAAM4P,OAAQ,IAAO,MAEvC,KAAsB,MAAfuJ,EAAKvJ,OAC7B,IAAhBgoY,EAAuBwE,EAAqBxE,EACjDz+X,EAAKy+X,cAAgBA,EAAgBz+X,EAAKigY,SAC1CjgY,EAAKwc,aAAaxwB,SAAWnC,KAAKq5Y,yBAAyBljY,EAAMA,EAAKkd,MACtErzB,KAAKo+T,uBAAuBjoT,KAQpC2iY,EAAgBz9Y,UAAU49Y,gBAAkB,SAAUx0W,EAAOpR,GACzD,IACIP,EADA/yB,EAAQC,KAEZA,KAAK2gU,YAAYl8R,EAAMgjC,KAAMp0C,GAC7BoR,EAAMgjC,KAAK7vC,IAAI,SAAUzhB,EAAMlE,GAC3B6gB,EAAM4R,GAAazyB,EAAOlS,EAAM2gU,SAASjkU,OAAYsD,EAAM2gU,UAC3DvqT,EAAKkd,KAAO,IAAI6C,GAAK7C,EAAKtmB,EAAI+lB,EAAKO,EAAKrmB,EAAI8lB,EAAKO,EAAKrd,MAAe,EAAN8c,EAAUO,EAAKtd,OAAgB,EAAN+c,MAQhGgmX,EAAgBz9Y,UAAUi+Y,oBAAsB,SAAUjmX,GACtD,IAAK,IAAIj1B,EAAK,EAAGyE,EAAK7C,KAAKykC,MAAMgjC,KAAMrpE,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACzD,IAAI+X,EAAOtT,EAAGzE,GACd4B,KAAK6+T,sBAAsB1oT,EAAMkd,GACjCrzB,KAAKo+T,uBAAuBjoT,KAQpC2iY,EAAgBz9Y,UAAUwjU,sBAAwB,SAAU1oT,EAAMkd,GAC9D,IAAIlxB,EAAWgU,EAAKihY,WAAWj1Y,SAC3B4iC,EAAe14B,KAAK0T,IAAqB,OAAjB5J,EAAK8iB,QAAmB,EAAI9iB,EAAK8iB,QAAS9iB,EAAK+iB,SACvE4L,EAAez4B,KAAKC,IAAI6J,EAAK8iB,QAA0B,OAAjB9iB,EAAK+iB,QAAmB,IAAM/iB,EAAK+iB,SAC7E/iB,EAAKwxD,SAAS/vC,IAAI,SAAUgwC,GACxBA,EAAQiiE,aAAiC,OAAlBjiE,EAAQ5qE,MAC3B4qE,EAAQ5qE,MAAQ+nC,EAAeA,EAAe6iC,EAAQ5qE,MAAQ8nC,EAAeA,EAAe8iC,EAAQ5qE,MAClG+nC,EACNA,EAAgC,OAAjB5uB,EAAK8iB,QAAmB5sB,KAAK0T,IAAI6nD,EAAQiiE,aAAc9kG,GAAgBA,EACtFD,EAAgC,OAAjB3uB,EAAK+iB,QAAmB7sB,KAAKC,IAAIs7D,EAAQiiE,aAAc/kG,GAAgBA,IAE1FC,EAAgBA,IAAiBD,EACf,OAAb3iC,EAAoB4iC,EAAe5iC,EAAW4iC,EAAe,EAAKA,EACvE5uB,EAAKwc,cAAiB5S,IAAKglB,EAAcz4B,IAAKw4B,EAAc3iC,SAAUA,GACtEgU,EAAKwc,aAAaxwB,SAAWnC,KAAKq5Y,yBAAyBljY,EAAMkd,IAOrEylX,EAAgBz9Y,UAAUg+Y,yBAA2B,SAAUljY,EAAMkd,GACjE,GAAiC,OAA7Bld,EAAKihY,WAAWj1Y,SAChB,OAAOgU,EAAKihY,WAAWj1Y,SAE3B,IAAIkjC,EAAalvB,EAAK6uB,SAAW7uB,EAAKse,WAEtC,OADA4Q,EAAaA,GAAc,EAAKA,EAAa,IAAOA,EAC7CrlC,KAAK+nE,sBAAsB5xD,EAAKwc,aAAarmB,IAAK6J,EAAKwc,aAAa5S,IAAK5J,EAAKy+X,cAAgBz+X,EAAKy+X,cAAiBvhX,EAAKrd,MAAQ,EAAIqvB,IAOhJyzW,EAAgBz9Y,UAAU0sE,sBAAwB,SAAUgiE,EAAUD,EAAUl9H,EAAQ6mB,GAMpF,IAAK,IALDwB,EAAQ80G,EAAWD,EACnBr6C,EAAgB,EAAIpjF,KAAK+Q,GAAKxQ,GAAU6mB,EAAS,KACjD6F,EAAwBjtB,KAAKC,WAAKmjF,EAAsC,GACxExnB,EAAehzC,EAAQqE,EACvB4uC,EAAc77D,KAAK87D,IAAI,GAAI97D,KAAK+S,MAAM/S,KAAKolB,IAAIw2C,GAAgB57D,KAAKolB,IAAI,MACnErzB,EAAK,EAAGyE,GAAM,GAAI,EAAG,EAAG,GAAIzE,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvD,IACI4pE,EAAkBE,EADPrlE,EAAGzE,GAElB,GAAIk7B,EAAyBrE,EAAQ+yC,EACjC,MAEJC,EAAeD,EAEnB,OAAOC,GAOX6wU,EAAgBz9Y,UAAU+iU,uBAAyB,SAAUjoT,GACzD,IAKIyiB,EALAl0B,EAAQyR,EAAK6f,WACbuF,EAAoB72B,EAAMs3B,QAA4C,OAAlCt3B,EAAMs3B,OAAOrsB,MAAM,WACvDqsB,EAASh8B,KAAKykC,MAAMwqC,KAAKC,iBACzBlzC,OAAQ4K,GAAeliC,EAAMs3B,QAASmzC,YAAanvE,KAAKykC,MAAM2qC,uBAGlEj5D,EAAKgf,iBACL,IAAK,IAAIh5B,EAAIga,EAAKwc,aAAa5S,IAAK5d,EAAWgU,EAAKwc,aAAaxwB,SAAUmK,EAAM6J,EAAKwc,aAAarmB,IAAMnQ,GAAKmQ,GAAOnK,EAAWhG,GAAKgG,EACjIy2B,GACIC,QAAQ,EAAOpB,KJvIF,kBIuIyBthB,KAAMA,EAC5CsW,KAAM8O,EAAoB72B,EAAMs3B,OAAOzsB,QAAQ,IAAIyU,OAAO,UAAW,KAAMgY,EAAO7/B,IAC9E6/B,EAAO7/B,GACXa,MAAOb,GAEX6D,KAAKykC,MAAMje,QJ5IM,kBI4ImBoS,GAC/BA,EAASC,QACV1iB,EAAKgf,cAAc3wB,KAAK,IAAIu0B,GAAcH,EAASnM,KAAMtwB,IAGjE6D,KAAKk/T,iBAAiBl/T,KAAKykC,MAAOtuB,IAOtC2iY,EAAgBz9Y,UAAUslU,YAAc,SAAUl5P,EAAMp0C,GACpD,IAAIw5P,EACA5pK,EACA3pG,EACAigY,EACAC,EACAC,EAEAC,EAAkB,EAClBC,EAAkB,EAClBr0B,EAAc,EAClBtlX,KAAK0gU,YACL1gU,KAAKs5Y,oBAAoBjmX,GACzB,IAAK,IAAIj1B,EAAK,EAAGopV,EAAS//Q,EAAMrpE,EAAKopV,EAAO/qV,OAAQ2B,IAAM,CACtD,IAAI+X,EAAOqxU,EAAOppV,GAClByuR,EAAY12Q,EAAK4qT,UAAU/qT,MAAQ,EACnCitG,EAAc,EACd3pG,EAAc,EACdigY,EAAkD,YAA7BpjY,EAAKihY,WAAWljY,SACrCwlY,EAAkBvjY,EAAKihY,WAAWzrY,OAClC6tY,EAAkD,YAA7BrjY,EAAKygY,WAAW1iY,SACrCylY,EAAkBxjY,EAAKygY,WAAWjrY,OAClC8tY,EAA8C,YAA7BtjY,EAAK6f,WAAW9hB,SACjCoxW,EAAcnvW,EAAK6f,WAAWrqB,OAE9Bs3G,GAAiBs2R,GAAsBC,GAAsBC,EAAgC,EAlB/E,EAmBdx2R,IAAgBs2R,EAAsBpjY,EAAKihY,WAAWrhY,OAAS82Q,EAAY,IACtE4sH,EAAkBtjY,EAAK+rT,aAAansT,OApLlC,GAoL0DuvW,EAAe,IAC1Ek0B,IAAuBD,EAAuBpjY,EAAKygY,WAAW7gY,OAAS82Q,EAAY,GAAKA,EAC9F5pK,GAAgBs2R,GAAsBC,EAAsBntY,KAAKC,IAAIotY,EAAiBC,GACjFJ,EAAqBG,EAAkBF,EAAqBG,EAAkB,EAEnFrgY,IAAiBigY,EAA2D,EAArCpjY,EAAKihY,WAAWrhY,OAAS82Q,IAC1D4sH,EAA2E,EAAzDtjY,EAAK+rT,aAAansT,OA1LnC,GA0L2DuvW,KAC3Dk0B,GAAsBD,EAAuBpjY,EAAKygY,WAAW7gY,OAAS82Q,EAAY,GAAKA,EAC9FvzQ,GAAiBigY,GAAuBC,EAClCD,EAAwCC,EAAuC,EAAlBG,EAAxCD,EADmCrtY,KAAKC,IAAIotY,EAAiBC,GAEpF35Y,KAAK0gU,SAAS1gU,KAAK0gU,SAASjkU,OAAS,KACrCuD,KAAK0gU,SAAS1gU,KAAK0gU,SAASjkU,OAAS,IAAO6c,EAAc2pG,GAE9D9sG,EAAKigY,SAAWnzR,EAjCF,EAkCd9sG,EAAKkgY,QAAU/8X,EACf2pG,EAAejjH,KAAKykC,MAAMgjC,KAAKhrE,SAAYuD,KAAK0gU,SAASjkU,OAAS,EAAM,EAAIwmH,EAC5EjjH,KAAK0gU,SAASl8T,KAAKy+G,KAQ3B61R,EAAgBz9Y,UAAU2sU,WAAa,SAAUzvS,GAC7C,IAAIx4B,EAAQC,UACI,IAAZu4B,IAAsBA,GAAU,GACpC,IAEIv3B,EAFAyjC,EAAQzkC,KAAKykC,MACb5W,EAAW7tB,KAAK+4Y,aAEhBa,EAAen1W,EAAM5W,SAASw+C,aAC9B/oE,GAAMmhC,EAAMzjC,QAAQsC,GAAK,kBACzBgwU,YAAa,QAAU7uS,EAAMzjC,QAAQsC,GAAK,yBAG9CmhC,EAAMzjC,QAAQW,YAAYR,EAAc,OACpCmC,GAAImhC,EAAMzjC,QAAQsC,GAAK,qBACvBC,OAAQ,wBAEZkhC,EAAMgjC,KAAK7vC,IAAI,SAAUzhB,EAAMlE,GAC3BjR,EAAUyjC,EAAM5W,SAASw+C,aACrB/oE,GAAImhC,EAAMzjC,QAAQsC,GAAK,eAAiB2O,IAE5C4b,EAASooX,kBAAkB9/X,EAAMlE,EAAOjR,EAASyjC,GACjD5W,EAASypX,cAAcnhY,EAAMlE,EAAOjR,EAASyjC,GAC7C5W,EAASw6S,aAAalyT,EAAMlE,EAAOjR,EAASyjC,GAC5C5W,EAASopX,mBAAmB9gY,EAAMlE,EAAOjR,EAASyjC,GAClD5W,EAAS4oX,mBAAmBtgY,EAAMlE,EAAOjR,EAASyjC,GAClD5W,EAASsoX,eAAehgY,EAAMlE,EAAOjR,EAASyjC,GAC9C1kC,EAAMi5Y,gBAAgBpB,aAAazhY,EAAMlE,EAAOjR,EAASyjC,EAAOlM,GAC5DkM,EAAMo1W,mBACNp1W,EAAMo1W,kBAAkBj9D,iBAAiBzmU,EAAMlE,GAEnD2nY,EAAaj4Y,YAAYX,KAG7ByjC,EAAMnT,UAAU3vB,YAAY8iC,EAAM5W,SAAS4rF,cACvCn2G,GAAMmhC,EAAMzjC,QAAQsC,GAAK,sBACzByJ,EAAK,EAAGC,EAAK,EACbgJ,MAASyuB,EAAM9O,cAAc3f,MAC7BD,OAAU0uB,EAAM9O,cAAc5f,OAC9B6nB,KAAQ,cAAeE,OAAU,iBAErC2G,EAAMnT,UAAU3vB,YAAYi4Y,IAMhCd,EAAgBz9Y,UAAU6jU,iBAAmB,SAAUz6R,EAAOtuB,GAC1DA,EAAK+rT,aAAe,IAAI90S,GAAK,EAAG,GAChC,IAAK,IAAIhvB,EAAK,EAAGyE,EAAKsT,EAAKgf,cAAe/2B,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC5D,IAAIiV,EAAQxQ,EAAGzE,GACfiV,EAAMyZ,KAAON,GAAYnZ,EAAMoZ,KAAMtW,EAAK6f,WAAWtJ,MACrDvW,EAAK+rT,aAAalsT,MAAQ3C,EAAMyZ,KAAK9W,MAAQG,EAAK+rT,aAAalsT,MAC3D3C,EAAMyZ,KAAK9W,MAAQG,EAAK+rT,aAAalsT,MACzCG,EAAK+rT,aAAansT,OAAS1C,EAAMyZ,KAAK/W,OAASI,EAAK+rT,aAAansT,OAC7D1C,EAAMyZ,KAAK/W,OAASI,EAAK+rT,aAAansT,SAG3C+iY,KC7QPxuT,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GA4B5Dk9W,GAA+B,SAAU3uT,GAMzC,SAAS2uT,EAAc9mY,EAAShS,GAC5B,OAAOmqF,EAAO7pF,KAAKtB,KAAMgT,EAAShS,IAAYhB,KAkqBlD,OAxqBAsqF,GAAUwvT,EAAe3uT,GAWzB2uT,EAAcz+Y,UAAUoX,UAAY,WAChCzS,KAAKw+G,eACLx+G,KAAKwmB,QLlDK,QKkDWie,MAAOzkC,OAC5BA,KAAK+5Y,cACL/5Y,KAAKoiS,sBACLpiS,KAAK2N,aACL3N,KAAKggC,YACLhgC,KAAKukB,cAETu1X,EAAcz+Y,UAAU0+Y,YAAc,WACf,iBAAf/5Y,KAAKkb,OACLlb,KAAK0gC,WAAWlK,MAAQx2B,KAAK0gC,WAAWlK,OAAS,UACjDx2B,KAAKg6Y,eAAe,UAAW,aAG/Bh6Y,KAAK0gC,WAAWlK,MAAQx2B,KAAK0gC,WAAWlK,OAAS,UACjDx2B,KAAKg6Y,eAAe,UAAW,aAGvCF,EAAcz+Y,UAAU2+Y,eAAiB,SAAUC,EAAYC,GAC3D,IAAK,IAAI97Y,EAAK,EAAGyE,EAAK7C,KAAKynE,KAAMrpE,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACnD,IAAI+X,EAAOtT,EAAGzE,GACd+X,EAAK4qT,UAAUvqS,MAAQrgB,EAAK4qT,UAAUvqS,OAAS0jX,EAC/C/jY,EAAK6f,WAAWtJ,KAAK8J,MAAQrgB,EAAK6f,WAAWtJ,KAAK8J,OAASyjX,EAC3D9jY,EAAKihY,WAAW5gX,MAAQrgB,EAAKihY,WAAW5gX,OAAS0jX,EACjD/jY,EAAKygY,WAAWpgX,MAAQrgB,EAAKygY,WAAWpgX,OAAS0jX,EACjD,IAAK,IAAIj2Y,EAAK,EAAGwG,EAAK0L,EAAKwxD,SAAU1jE,EAAKwG,EAAGhO,OAAQwH,IAAM,CACvD,IAAI2jE,EAAUn9D,EAAGxG,GACjB2jE,EAAQpxC,MAAQoxC,EAAQpxC,OAAS0jX,EACjCtyU,EAAQwwU,WAAW5hX,MAAQoxC,EAAQwwU,WAAW5hX,OAAS0jX,EACvDtyU,EAAQwwU,WAAW9zW,OAAO9N,MAAQoxC,EAAQwwU,WAAW9zW,OAAO9N,OAAS0jX,EACrEtyU,EAAQywU,IAAI7hX,MAAQoxC,EAAQywU,IAAI7hX,OAAS0jX,EACzCtyU,EAAQywU,IAAI/zW,OAAO9N,MAAQoxC,EAAQywU,IAAI/zW,OAAO9N,OAAS0jX,KAOnEJ,EAAcz+Y,UAAU0wG,OAAS,WAC7B/rG,KAAKutR,kBACLvtR,KAAKo8U,kBAKT09D,EAAcz+Y,UAAUmjH,aAAe,WACnCj5G,GAAahB,OAAOvE,KAAKgB,QAASwK,GAAQ0+E,gBAAiBlqF,KAAKm6Y,kBAChE50Y,GAAahB,OAAOvE,KAAKgB,QAASwK,GAAQ2+E,eAAgBnqF,KAAK6/U,WAC/Dt6U,GAAahB,OAAOvE,KAAKgB,QAASwK,GAAQ4+E,cAAepqF,KAAK8/U,UAC9Dv6U,GAAahB,OAAOvE,KAAKgB,QAAS,cAAehB,KAAKo6Y,iBACtD70Y,GAAahB,OAAOvE,KAAKgB,QAAUwK,GAAQC,UAAY,eAAiB,aAAezL,KAAKigV,YAC5FpkV,OAAOe,oBAAqB4O,GAAQomB,SAAY,gBAAiB/1B,QAAU,wBAAyBA,OAAW,oBAAsB,SAAUmE,KAAKq6Y,cAKxJP,EAAcz+Y,UAAUkpB,WAAa,WAEjChf,GAAanB,IAAIpE,KAAKgB,QAASwK,GAAQ0+E,gBAAiBlqF,KAAKm6Y,iBAAkBn6Y,MAC/EuF,GAAanB,IAAIpE,KAAKgB,QAASwK,GAAQ2+E,eAAgBnqF,KAAK6/U,UAAW7/U,MACvEuF,GAAanB,IAAIpE,KAAKgB,QAASwK,GAAQ4+E,cAAepqF,KAAK8/U,SAAU9/U,MACrEuF,GAAanB,IAAIpE,KAAKgB,QAAS,cAAehB,KAAKo6Y,gBAAiBp6Y,MACpEuF,GAAanB,IAAIpE,KAAKgB,QAAUwK,GAAQC,UAAY,eAAiB,aAAezL,KAAKigV,WAAYjgV,MACrGnE,OAAOa,iBAAkB8O,GAAQomB,SAAY,gBAAiB/1B,QAAU,wBAAyBA,OAAW,oBAAsB,SAAUmE,KAAKq6Y,YAAY/+Y,KAAK0E,OAElKA,KAAKs6Y,cAAct6Y,KAAKgB,UAO5B84Y,EAAcz+Y,UAAUwkV,UAAY,SAAUh/U,GAC1C,IAAIZ,EAAOD,KAAKu6Y,aAAa15Y,EAAG,YLhHZ,kBKiHpBb,KAAKwmB,QLjHe,iBKiHSvmB,GAC7B,IAAIu6Y,EACA3oX,EAAU7xB,KAAKw7U,cAuBnB,OAtBKv7U,EAAK44B,SACF74B,KAAK6xB,QAAQ4N,QAAU5N,IACnB5xB,EAAKkH,OAAO7D,GAAG/E,QAAQ,cAAgB,IAAMyB,KAAKy6Y,cAClD5oX,EAAQmwG,cAAc/hI,EAAKkH,QAG3B0qB,EAAQkjX,UAAU9yY,SAGtBjC,KAAK06Y,mBAAqB16Y,KAAKy6Y,gBAC/BD,GACIrkY,KAAMnW,KAAK26Y,WACX/yU,QAAS5nE,KAAKy6Y,cACdr/Q,cAAep7H,KAAKy6Y,cAAc5wQ,aAClCpyG,KLxHE,WKyHFoyG,aAAc,MAElB7pI,KAAK46Y,YAAY,IAAIp1W,GAAcvlC,EAAK8M,EAAG9M,EAAK+M,IAChDwtY,EAAS3wQ,aAAe7pI,KAAKy6Y,cAAc5wQ,aAC3C7pI,KAAKwmB,QL7HC,WK6HiBg0X,MAGxB,GAOXV,EAAcz+Y,UAAU4kV,WAAa,SAAUp/U,GAC3Cb,KAAK26Y,WAAa,KAClB36Y,KAAKy6Y,cAAgB,KACrBz6Y,KAAKsxB,UAAU9tB,aAAa,SAAU,QACtC,IAAIvD,EAAOD,KAAKu6Y,aAAa15Y,EAAG,YLnJX,mBKwJrB,OAJAb,KAAKwmB,QLpJgB,kBKoJSvmB,GAC1BD,KAAK6xB,QAAQ4N,QAAUz/B,KAAKw7U,eAC5Bx7U,KAAKw7U,cAAcu5D,UAAU9yY,SAE1B,GAOX63Y,EAAcz+Y,UAAU++Y,gBAAkB,SAAU99Y,GAChD,OAAsB,IAAlBA,EAAM6pH,SAAuC,UAAtB7pH,EAAM+jV,cAC7B/jV,EAAMkpB,iBACNlpB,EAAM8gI,mBACC,IAQf08Q,EAAcz+Y,UAAUu/Y,YAAc,SAAUltX,GAC5C,IAAIvX,EAAOnW,KAAK26Y,WACZ5oX,EAAQ5b,EAAKwc,aACb31B,EAAQooC,GAAkBE,GAAqBtlC,KAAKi/V,SAAUvxU,GAAWqE,EAAMzlB,IAAKylB,EAAMhS,IAAK5J,EAAKse,WAAYte,EAAK6uB,SAA6B,cAAnB7uB,EAAKqf,WACpIx4B,GAAS+0B,EAAMhS,KAAO/iB,GAAS+0B,EAAMzlB,MACrCtM,KAAKy6Y,cAAc5wQ,aAAe7sI,EAClCgD,KAAKy6Y,cAAcz9Y,MAAQA,EAC3BgD,KAAK66Y,qBAAqB7B,gBAAgBlB,gBAAgB3hY,EAAMnW,KAAKy6Y,cAAez9Y,KAQ5F88Y,EAAcz+Y,UAAU8+Y,iBAAmB,SAAUt5Y,GACjD,IAAIs0Y,EACAl1Y,EAAOD,KAAKu6Y,aAAa15Y,EAAG,aL1LZ,kBKyMpB,OAdAb,KAAKwmB,QL3Le,iBK2LSvmB,IACxBA,EAAK44B,QAAU54B,EAAKkH,OAAO7D,GAAG/E,QAAQ,cAAgB,GACvD0B,EAAKkH,OAAO7D,GAAG/E,QAAQyB,KAAKgB,QAAQsC,GAAK,WAAa,IACtD6xY,EAAiB5uW,GAAWtmC,EAAKkH,OAAO7D,GAAItD,MAC5CA,KAAK26Y,WAAa36Y,KAAKynE,KAAK0tU,EAAezuW,WAC3C1mC,KAAKy6Y,cAAgBz6Y,KAAK26Y,WAAWhzU,SAASwtU,EAAexuW,cAC7D3mC,KAAKwmB,QL7LM,aK8LPrQ,KAAMnW,KAAK26Y,WACXljX,KL/LO,YKgMPmwC,QAAS5nE,KAAKy6Y,cACd5wQ,aAAc7pI,KAAKy6Y,cAAc5wQ,eAErC7pI,KAAKsxB,UAAU9tB,aAAa,SAAU,aAEnC,GAOXs2Y,EAAcz+Y,UAAUykV,SAAW,SAAUj/U,GACzC,IAAIZ,EAAOD,KAAKu6Y,aAAa15Y,EAAG,WL/Md,gBKgNd+wB,EAA4B,UAAlB/wB,EAAEw/U,aAA6C,MAAlBx/U,EAAEw/U,aAAkC,aAAXx/U,EAAE6F,KAElEmrB,EAAU7xB,KAAKw7U,cAqBnB,OApBAx7U,KAAKwmB,QLnNa,eKmNSvmB,GACvBD,KAAK26Y,YAAc36Y,KAAKy6Y,gBACxBz6Y,KAAKwmB,QL/MI,WKgNLiR,KLhNK,UKiNLthB,KAAMnW,KAAK26Y,WACX/yU,QAAS5nE,KAAKy6Y,cACd5wQ,aAAc7pI,KAAKy6Y,cAAc5wQ,gBAEhC5pI,EAAK44B,QAAUjH,GAAW5xB,KAAK6xB,QAAQ4N,QAAU5N,GAC9C5xB,EAAKkH,OAAO7D,GAAG/E,QAAQ,cAAgB,IACvCszB,EAAQmwG,cAAc/hI,EAAKkH,QACTtL,OAAOsE,WAAW,WAChC0xB,EAAQkjX,UAAU9yY,SACnB,MAGXjC,KAAK26Y,WAAa,KAClB36Y,KAAKy6Y,cAAgB,MAEzBz6Y,KAAKsxB,UAAU9tB,aAAa,SAAU,SAC/B,GAOXs2Y,EAAcz+Y,UAAUk/Y,aAAe,SAAU15Y,EAAG6F,EAAM+wB,GACtD,IAAIpE,EAAOrzB,KAAKgB,QAAQ4K,wBACpB8hB,EAAW,IAAI8X,IAAenS,EAAK7mB,MAAO6mB,EAAK3mB,KAC/CklB,EAAW/wB,EAAE6F,OAASA,EAG1B,OAFAgnB,EAAS3gB,GAAK6kB,EAAU/wB,EAAE89D,eAAe,GAAGvqB,QAAUvzC,EAAEuzC,QACxD1mB,EAAS1gB,GAAK4kB,EAAU/wB,EAAE89D,eAAe,GAAGtqB,QAAUxzC,EAAEwzC,SAEpDxb,QAAQ,EAAOpB,KAAMA,EACrB1qB,EAAG2gB,EAAS3gB,EAAGC,EAAG0gB,EAAS1gB,EAC3B7F,OAAkBtG,EAAEsG,SAQ5B2yY,EAAcz+Y,UAAUg/Y,YAAc,SAAUx5Y,GAC5C,IAAId,EAAQC,KACRC,GACAwkC,MAAOzkC,KACPihV,aAAc,IAAI7zT,GAAKptB,KAAK21B,cAAc3f,MAAOhW,KAAK21B,cAAc5f,QACpE0hB,KL5PS,UK6PTupT,YAAa,IAAI5zT,GAAK,EAAG,IAe7B,OAbAptB,KAAKw4Y,gBAAiB,EAClBx4Y,KAAK65U,UACL35U,aAAaF,KAAK65U,UAElB75U,KAAKgB,QAAQ8C,UAAUK,SAAS,qBAChCnE,KAAK65U,SAAWh+U,OAAOsE,WAAW,WAC9BJ,EAAMigC,YACNjgC,EAAMwtR,kBACNxtR,EAAMq8U,iBACNn8U,EAAK+gV,YAAcjhV,EAAM41B,cACzB51B,EAAMymB,QLzQD,UKyQkBvmB,IACxB,OAEA,GAKX65Y,EAAcz+Y,UAAUi/Y,cAAgB,SAAUt5Y,GAC9CA,EAAQ0D,MAAMo1G,YAAc95G,KAAK06Y,kBAAoB,OAAS,UAC9D15Y,EAAQ0D,MAAMg8U,cAAgB1gV,KAAK06Y,kBAAoB,OAAS,UAChE15Y,EAAQ0D,MAAMi8U,iBAAmB,OACjC3/U,EAAQ0D,MAAMk8U,aAAe,OAC7B5/U,EAAQ0D,MAAMm8U,iBAAmB,OACjC7/U,EAAQ0D,MAAMwP,SAAW,YAK7B4lY,EAAcz+Y,UAAUsS,WAAa,WACjC3N,KAAKivE,KAAO,IAAIy7B,IAKpBovS,EAAcz+Y,UAAU2kC,UAAY,WAChChgC,KAAK0/U,YACL1/U,KAAK86Y,mBACL96Y,KAAKsxB,UAAYtxB,KAAK6tB,SAASmS,WAC3B18B,GAAItD,KAAKgB,QAAQsC,GAAK,OACtB0S,MAAOhW,KAAK21B,cAAc3f,MAC1BD,OAAQ/V,KAAK21B,cAAc5f,UAQnC+jY,EAAcz+Y,UAAUqkV,UAAY,WAEhC,GADAlyT,GAAcxtB,KAAKgB,QAAQsC,GAAK,sBAC5BtD,KAAKsxB,UAAW,CAChB,KAAOtxB,KAAKsxB,UAAU/f,WAAW9U,OAAS,GACtCuD,KAAKsxB,UAAUhsB,YAAYtF,KAAKsxB,UAAU1U,aAEzC5c,KAAKsxB,UAAUwJ,iBAAmB96B,KAAKsxB,UAAU7wB,YAClD8D,EAAOvE,KAAKsxB,aAQxBwoX,EAAcz+Y,UAAU+mS,oBAAsB,WAC1CpiS,KAAK6tB,SAAW,IAAIC,GAAY9tB,KAAKgB,QAAQsC,IAC7CtD,KAAK66Y,qBAAuB,IAAI/B,GAAgB94Y,MAChDA,KAAKw4Y,gBAAiB,GAK1BsB,EAAcz+Y,UAAUy/Y,iBAAmB,WACvC,IAAItkY,EAAiBxW,KAAKgB,QAAQ4D,YAC9BqS,EAAkBjX,KAAKgB,QAAQ0wC,aAC/B17B,EAAQqoB,GAAer+B,KAAKgW,MAAOQ,IAAmBA,GAAkB,IACxET,EAASsoB,GAAer+B,KAAK+V,OAAQkB,IAAoBA,GAAmB,IAChFjX,KAAK21B,cAAgB,IAAIvI,GAAKpX,EAAOD,IAKzC+jY,EAAcz+Y,UAAUkyR,gBAAkB,WACtC,IACI9wP,EAASz8B,KAAKy8B,OAEd8hT,EAAc,EACdv+U,KAAKkgC,QACLq+S,EAAc/xT,GAAYxsB,KAAKkgC,MAAOlgC,KAAK0gC,YAAY3qB,OAL7C,GAOd,IAAIrJ,EAAM+vB,EAAO/vB,IAAM6xU,EAAcv+U,KAAKskC,OAAOtuB,MAC7CxJ,EAAOiwB,EAAOjwB,KAAOxM,KAAKskC,OAAOtuB,MACjCA,EAAQhW,KAAK21B,cAAc3f,MAAQxJ,EAAOiwB,EAAOhwB,MAAQzM,KAAKskC,OAAOtuB,MACrED,EAAS/V,KAAK21B,cAAc5f,OAASrJ,EAAM1M,KAAKskC,OAAOtuB,MAAQymB,EAAO9vB,OACtEC,EAASP,KAAK0T,IAAI/J,EAAOD,GAAU,EACnCsd,EAAO,IAAI6C,GAAM1pB,EAAQwJ,EAAQ,EAAKpJ,EAAUF,EAAOqJ,EAAS,EAAKnJ,EAAkB,EAATA,EAAqB,EAATA,GAC1FoU,EAA2B,OAAjBhhB,KAAKghB,QACfqd,GAAer+B,KAAKghB,QAAShhB,KAAK21B,cAAc3f,OAASqd,EAAKtmB,EAAKsmB,EAAKrd,MAAQ,EAChFiL,EAA2B,OAAjBjhB,KAAKihB,QACfod,GAAer+B,KAAKihB,QAASjhB,KAAK21B,cAAc5f,QAAUsd,EAAKrmB,EAAKqmB,EAAKtd,OAAS,EACtF/V,KAAKi/V,SAAW,IAAIz5T,GAAcxkB,EAASC,GAC3CjhB,KAAK66Y,qBAAqBj2E,YAAYvxS,IAK1CymX,EAAcz+Y,UAAU+gV,eAAiB,SAAU7jT,QAC/B,IAAZA,IAAsBA,GAAU,GACpCv4B,KAAKq8U,eACLr8U,KAAKs8U,cACLt8U,KAAK66Y,qBAAqB7yE,WAAWzvS,GACrCv4B,KAAKgB,QAAQW,YAAY3B,KAAKsxB,WAC9BtxB,KAAKwmB,QLzYO,UKyYWie,MAAOzkC,QAKlC85Y,EAAcz+Y,UAAUihV,YAAc,WAClC,GAAIt8U,KAAKkgC,MAAO,CACZ,IAAIpT,EAAON,GAAYxsB,KAAKkgC,MAAOlgC,KAAK0gC,YAEpC1/B,EAAUs1B,GADA,IAAIC,GAAWv2B,KAAKgB,QAAQsC,GAAK,sBAAuBtD,KAAK21B,cAAc3f,MAAQ,EAAGhW,KAAKy8B,OAAO/vB,IAAWogB,EAAK/W,OAAS,EAAnB,EAAuB,SAAU/V,KAAKkgC,OACzHlgC,KAAK0gC,WAAY1gC,KAAK0gC,WAAWlK,MAAOx2B,KAAKsxB,UAAW,IAC3FtwB,EAAQwC,aAAa,aAAcxD,KAAKkyC,aAAelyC,KAAKkgC,OAC5Dl/B,EAAQwC,aAAa,WAAYxD,KAAKipH,SAAS/7G,cAMvD4sY,EAAcz+Y,UAAUghV,aAAe,WACnC,IAAI5tP,EAAczuF,KAAKskC,OAAOtuB,OAC1By4E,EAAc,GAA0B,OAApBzuF,KAAKyvB,YAA2C,gBAApBzvB,KAAKyvB,aACrDzvB,KAAKsxB,UAAU3vB,YAAY3B,KAAK6tB,SAAS8V,cAAc,IAAIugS,GAAWlkU,KAAKgB,QAAQsC,GAAK,uBAAwBtD,KAAKyvB,WAAYzvB,KAAKskC,OAAQ,KAAM,IAAIpO,GAAKu4D,EAAc,EAAGA,EAAc,EAAGzuF,KAAK21B,cAAc3f,MAAQy4E,EAAazuF,KAAK21B,cAAc5f,OAAS04E,OAM3QqrT,EAAcz+Y,UAAUy8Y,gBAAkB,SAAUpxW,EAAWC,EAAc3pC,GACzE,IAAI+C,EAAQC,KACRmW,EAAOnW,KAAKynE,KAAK/gC,GACjBkhC,EAAUzxD,EAAKwxD,SAAShhC,GACxBsxW,EAAgBrwU,EAAQgtU,cACxBrwG,EAAkB38N,EAAQjxB,UAAUlX,OAExCziC,GADAA,EAAQA,EAAQmZ,EAAKwc,aAAa5S,IAAM5J,EAAKwc,aAAa5S,IAAM/iB,GAChDmZ,EAAKwc,aAAarmB,IAAM6J,EAAKwc,aAAarmB,IAAMtP,EAChE4qE,EAAQy7N,YAAYzrQ,IAAI,SAAU52B,GACT,aAAjB4mE,EAAQlhE,MACR29B,GAAUrjC,EAAS4mE,EAAQpxC,MAAOoxC,EAAQtjC,QACtCigQ,EACAxkS,EAAM86Y,qBAAqB7B,gBAAgBP,yBAAyBz3Y,EAAS4mE,EAAQiiE,aAAc7sI,EAAOmZ,EAAMyxD,EAASqwU,EAAgBA,EAAgBrwU,EAAQuwU,cAGjKp4Y,EAAM86Y,qBAAqB7B,gBAAgBlB,gBAAgB3hY,EAAMyxD,EAAS5qE,KAI1EgE,EAAQsC,GAAG/E,QAAQ,wBAA0B,EAC7C8lC,GAAUrjC,EAAS4mE,EAAQywU,IAAI7hX,MAAOoxC,EAAQywU,IAAI/zW,QAE7CtjC,EAAQsC,GAAG/E,QAAQ,yBAA2B,EACnD8lC,GAAUrjC,EAAS4mE,EAAQwwU,WAAW5hX,MAAOoxC,EAAQwwU,WAAW9zW,QAE3DtjC,EAAQsC,GAAG/E,QAAQ,yBAA2B,EACnD8lC,GAAUrjC,EAAS,eAAiBw1B,MAAO,cAAexgB,MAAO,IAGjEquB,GAAUrjC,EAAS4mE,EAAQpxC,MAAOoxC,EAAQtjC,QAE1CigQ,EACAxkS,EAAM86Y,qBAAqB7B,gBAAgBN,uBAAuB13Y,EAAS4mE,EAAQiiE,aAAc7sI,EAAOmZ,EAAMyxD,EAASqwU,EAAgBA,EAAgBrwU,EAAQuwU,cAG/Jp4Y,EAAM86Y,qBAAqB7B,gBAAgBlB,gBAAgB3hY,EAAMyxD,EAAS5qE,MAItF4qE,EAAQiiE,aAAe7sI,EACvB4qE,EAAQ5qE,MAAQA,GAKpB88Y,EAAcz+Y,UAAUinV,mBAAqB,SAAU57S,EAAW67S,EAAiBnoT,GAC/E,IAAI2gX,EAA+E,OAA9DxtX,GAAWvtB,KAAKgB,QAAQsC,GAAK,gBAAkBojC,GAChE1lC,EAAUusB,GAAWvtB,KAAKgB,QAAQsC,GAAK,gBAAkBojC,IACzDvlC,EAAc,OACVmC,GAAItD,KAAKgB,QAAQsC,GAAK,gBAAkBojC,IAE5CioB,EAAa3uD,KAAKynE,KAAK/gC,GAAWkwB,YAAY2rR,GAClC,OAAZnoT,IACA5M,GAAcxtB,KAAKgB,QAAQsC,GAAK,SAAWojC,EAAY,eAAiB67S,GACxE5zR,EAAWv0B,QAAUA,EACrBp6B,KAAK65Y,kBAAkB3/W,eAAel5B,EAASuhV,EAAiB77S,GAC3Dq0W,GACDxtX,GAAWvtB,KAAKgB,QAAQsC,GAAK,sBAAsB3B,YAAYX,KAO3E84Y,EAAcz+Y,UAAU+uI,cAAgB,SAAU1jG,EAAW8wW,EAAYj6Y,EAAOshB,GAC5E,IASI6mB,EATA1kC,EAAUusB,GAAWvtB,KAAKgB,QAAQsC,GAAK,SAAWojC,EAAY,UAAY8wW,GAC1ErhY,EAAOnW,KAAKynE,KAAK/gC,GACjB3U,EAAQ5b,EAAK2wB,OAAO0wW,GACpBhtC,EAAYr0V,EAAKwc,aACjBsS,EAAiC,cAAnB9uB,EAAKqf,UACnBrN,EAAa9b,KAAK0T,IAAI1T,KAAKC,IAAI/O,EAAOitW,EAAUzqV,KAAMlB,GACtDqZ,EAAW7rB,KAAK0T,IAAI1T,KAAKC,IAAI/O,EAAOshB,GAAM2rV,EAAUl+V,KACpDmoB,EAAaoQ,GAAkB1c,EAAYqiV,EAAUl+V,IAAKk+V,EAAUzqV,IAAK5J,EAAKse,WAAYte,EAAK6uB,SAAUC,GACzGD,EAAWH,GAAkB3M,EAAUsyU,EAAUl+V,IAAKk+V,EAAUzqV,IAAK5J,EAAKse,WAAYte,EAAK6uB,SAAUC,GAGrGS,EADA3T,EAAM2T,WAAWjpC,OAAS,EACb0nC,GAAQpS,EAAM2T,WAAY3T,EAAM6iX,eAGhC7iX,EAAM2T,WAEvB,IAAIC,EAEAA,EADA5T,EAAM4T,SAASlpC,OAAS,EACb0nC,GAAQpS,EAAM4T,SAAU5T,EAAM6iX,eAG9B7iX,EAAM4T,SAErBX,EAAWC,EAAcD,GAAYvQ,EAAYA,EAAauQ,GAAU,GACxEW,EAAWV,EAAcU,GAAYD,EAAYA,EAAaC,GAAU,GACxE3kC,EAAQwC,aAAa,IAAKiiC,GAAWzlC,KAAKi/V,SAAU5yV,KAAKoxB,MAAMhJ,GAAapoB,KAAKoxB,MAAMuH,GAAWjT,EAAM6iX,cAAelvW,EAAYC,IACnItB,GAAUrjC,EAAU+wB,EAAMyE,MAAQzE,EAAMyE,MAAQzE,EAAMkV,YAClDzQ,MAAQzE,EAAMyE,MAAQzE,EAAMyE,MAAQzE,EAAMkV,WAC1CjxB,MAAO,KASf8jY,EAAcz+Y,UAAUiX,QAAU,WAC9BtS,KAAKw+G,eACLx+G,KAAK0/U,YACLv0P,EAAO9vF,UAAUiX,QAAQhR,KAAKtB,OAOlC85Y,EAAcz+Y,UAAUw1F,gBAAkB,WACtC,IAAIgB,KACAmpT,GAAmB,EAmBvB,OAlBWh7Y,KAAKynE,KACX7vC,IAAI,SAAUzhB,GACfA,EAAKygD,YAAYh/B,IAAI,SAAU+2B,GAC3BqsV,EAAmBA,GAA2C,OAAvBrsV,EAAWv0B,YAGtD4gX,GACAnpT,EAAQrtF,MACJ6sF,OAAQ,cACRpxF,MAAOD,KAAMy0Y,MAGjBz0Y,KAAK6xB,QAAQ4N,QACboyD,EAAQrtF,MACJ6sF,OAAQ,UACRpxF,MAAOD,KAAM60Y,MAGdhjT,GAMXioT,EAAcz+Y,UAAUmxG,eAAiB,WACrC,OAAOxsG,KAAKgtG,kBAMhB8sS,EAAcz+Y,UAAUmsF,kBAAoB,SAAUiF,EAASC,GAK3D,IAAK,IAHD7+D,GAAW,EACXg3T,GAAgB,EAChBo2D,GAA0B,EACrB78Y,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKmvF,GAAUruF,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAE9D,OADWyE,EAAGzE,IAEV,IAAK,SACL,IAAK,QACL,IAAK,UACL,IAAK,UACL,IAAK,SACD4B,KAAKggC,YACL6kT,GAAgB,EAChB,MACJ,IAAK,QACDA,EAAmC,KAAlBp4P,EAAQvsD,OAAkC,KAAlBwsD,EAAQxsD,MACjDrS,IAA+B,KAAlB4+D,EAAQvsD,OAAkC,KAAlBwsD,EAAQxsD,OAC7C,MACJ,IAAK,aACGusD,EAAQ/rD,YAAc+rD,EAAQ/rD,WAAW5T,KACzC+3T,GAAgB,EAGhBh3T,GAAW,EAEf,MACJ,IAAK,SAGL,IAAK,aACDA,GAAW,EACX,MACJ,IAAK,OACDotX,GAA0B,IAIjCp2D,GAAiBh3T,IAClB7tB,KAAK0/U,YACL1/U,KAAKo8U,kBAELyI,IACA7kV,KAAK0/U,YACL1/U,KAAKutR,kBACLvtR,KAAKo8U,mBAEL6+D,GAA4BptX,GAAag3T,IACzC7kV,KAAK0/U,YACL1/U,KAAKutR,kBACLvtR,KAAKo8U,gBAAe,KAO5B09D,EAAcz+Y,UAAUkkC,cAAgB,WACpC,MAAO,iBAEXsrD,IACI3jF,EAAS,OACV4yY,EAAcz+Y,UAAW,aAAS,GACrCwvF,IACI3jF,EAAS,OACV4yY,EAAcz+Y,UAAW,cAAU,GACtCwvF,IACI9iF,GAAUyuB,MAAO,cAAexgB,MAAO,GAAK4mT,KAC7Ck9E,EAAcz+Y,UAAW,cAAU,GACtCwvF,IACI3jF,EAAS,gBACV4yY,EAAcz+Y,UAAW,kBAAc,GAC1CwvF,IACI3jF,EAAS,KACV4yY,EAAcz+Y,UAAW,aAAS,GACrCwvF,IACI9iF,GAAU+kB,KAAM,OAAQ0J,MAAO,MAAQmmS,KACxCm9E,EAAcz+Y,UAAW,kBAAc,GAC1CwvF,IACI9iF,KAAY+0T,KACbg9E,EAAcz+Y,UAAW,cAAU,GACtCwvF,IACIxiF,OAAiBi5T,KAClBw4E,EAAcz+Y,UAAW,YAAQ,GACpCwvF,IACI9iF,KAAYo1T,KACb28E,EAAcz+Y,UAAW,eAAW,GACvCwvF,IACI3jF,GAAS,IACV4yY,EAAcz+Y,UAAW,yBAAqB,GACjDwvF,IACI3jF,EAAS,OACV4yY,EAAcz+Y,UAAW,eAAW,GACvCwvF,IACI3jF,EAAS,OACV4yY,EAAcz+Y,UAAW,eAAW,GACvCwvF,IACI3jF,EAAS,aACV4yY,EAAcz+Y,UAAW,aAAS,GACrCwvF,IACI3jF,GAAS,IACV4yY,EAAcz+Y,UAAW,4BAAwB,GACpDwvF,IACI3jF,EAAS,OACV4yY,EAAcz+Y,UAAW,mBAAe,GAC3CwvF,IACI3jF,EAAS,IACV4yY,EAAcz+Y,UAAW,gBAAY,GACxCwvF,IACI/hF,KACDgxY,EAAcz+Y,UAAW,cAAU,GACtCwvF,IACI/hF,KACDgxY,EAAcz+Y,UAAW,YAAQ,GACpCwvF,IACI/hF,KACDgxY,EAAcz+Y,UAAW,yBAAqB,GACjDwvF,IACI/hF,KACDgxY,EAAcz+Y,UAAW,uBAAmB,GAC/CwvF,IACI/hF,KACDgxY,EAAcz+Y,UAAW,wBAAoB,GAChDwvF,IACI/hF,KACDgxY,EAAcz+Y,UAAW,qBAAiB,GAC7CwvF,IACI/hF,KACDgxY,EAAcz+Y,UAAW,iBAAa,GACzCwvF,IACI/hF,KACDgxY,EAAcz+Y,UAAW,gBAAY,GACxCwvF,IACI/hF,KACDgxY,EAAcz+Y,UAAW,eAAW,GACvCwvF,IACI/hF,KACDgxY,EAAcz+Y,UAAW,sBAAkB,GAC9CwvF,IACI/hF,KACDgxY,EAAcz+Y,UAAW,uBAAmB,GAC/CwvF,IACI/hF,KACDgxY,EAAcz+Y,UAAW,sBAAkB,GAC9CwvF,IACI/hF,KACDgxY,EAAcz+Y,UAAW,oBAAgB,GAC5CwvF,IACI/hF,KACDgxY,EAAcz+Y,UAAW,eAAW,GACvCy+Y,EAAgBjvT,IACZzhF,GACD0wY,IAELvuS,ICntBF2vS,GAAoB9uS,OAAQ+uS,GAAmBC,QlVGpC3wW,0oCmVDPrd,GAAsB,WACtB,SAASA,EAAKpX,EAAOD,GACjB/V,KAAKgW,MAAQA,EACbhW,KAAK+V,OAASA,EAqBlB,OAnBAqX,EAAK/xB,UAAUi/O,QAAU,WACrB,OAAuB,IAAhBt6O,KAAK+V,QAA+B,IAAf/V,KAAKgW,OAerCoX,EAAK/xB,UAAUgE,MAAQ,WACnB,OAAO,IAAI+tB,EAAKptB,KAAKgW,MAAOhW,KAAK+V,SAE9BqX,KC3BPk9D,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAM5Dsd,GAAuB,SAAUixC,GAEjC,SAASjxC,IACL,OAAkB,OAAXixC,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAqH/D,OAvHAsqF,GAAUpwC,EAAOixC,GAIjBjxC,EAAMrB,OAAS,SAAUuK,EAAQ/a,GAC7B,OAAI+a,IAAW/a,MAGV+a,IAAW/a,MAGR+a,IAAW/a,GAAU+a,EAAOr2C,IAAMs7B,EAAOt7B,GAAKq2C,EAAOp2C,IAAMq7B,EAAOr7B,IAK9EktC,EAAMC,aAAe,SAAUrmB,GAC3B,OAAIA,EAAM/mB,IAAK+mB,EAAM9mB,GAmCzBktC,EAAM7sC,UAAY,SAAUymB,EAAOvS,EAAO9kB,GACtC,IAAIouC,GAAO99B,EAAG,EAAGC,EAAG,GAGpB,OAFA69B,EAAG99B,EAAIV,KAAKoxB,MAA6D,KAAtD3J,EAAM/mB,EAAItQ,EAAS4P,KAAKoV,IAAIF,EAAQlV,KAAK+Q,GAAK,OAAe,IAChFytB,EAAG79B,EAAIX,KAAKoxB,MAA6D,KAAtD3J,EAAM9mB,EAAIvQ,EAAS4P,KAAKqV,IAAIH,EAAQlV,KAAK+Q,GAAK,OAAe,IACzEytB,GAEXqP,EAAM+G,WAAa,SAAUvZ,EAAG7mC,GAE5B,OADawL,KAAKQ,KAAKR,KAAK87D,IAAKzgC,EAAE36B,EAAIlM,EAAEkM,EAAI,GAAKV,KAAK87D,IAAKzgC,EAAE16B,EAAInM,EAAEmM,EAAI,KAG5EktC,EAAM6G,UAAY,SAAUqC,EAAQ/a,GAChC,IAAI9mB,EAAQlV,KAAK0nB,MAAMsU,EAAOr7B,EAAIo2C,EAAOp2C,EAAGq7B,EAAOt7B,EAAIq2C,EAAOr2C,GAM9D,OALAwU,EAAS,IAAMA,EAAQlV,KAAK+Q,IAC5BmE,GAAS,KACG,IACRA,GAAS,KAENA,GAEX24B,EAAM8F,eAAiB,SAAUu0S,EAAKC,GAClC,OAAOnoV,KAAKQ,KAAKR,KAAK87D,IAAIqsR,EAAIznV,EAAIwnV,EAAIxnV,EAAG,GAAKV,KAAK87D,IAAIqsR,EAAIxnV,EAAIunV,EAAIvnV,EAAG,KAE1EktC,EAAMmhW,YAAc,SAAU9+Y,EAAQ4K,EAAQm0Y,EAAS7+Y,GACnD,IACI8kB,EADAspB,EAAKywW,GAAYvuY,EAAGxQ,EAAOwQ,EAAGC,EAAGzQ,EAAOyQ,IAAQD,EAAG5F,EAAO4F,EAAGC,EAAG7F,EAAO6F,GA4B3E,OA1BIzQ,EAAOwQ,IAAM5F,EAAO4F,EAChBxQ,EAAOyQ,EAAI7F,EAAO6F,GAAKsuY,GAAW/+Y,EAAOyQ,EAAI7F,EAAO6F,IAAMsuY,EAC1DzwW,EAAG79B,GAAKvQ,EAGRouC,EAAG79B,GAAKvQ,EAGPF,EAAOyQ,IAAM7F,EAAO6F,EACrBzQ,EAAOwQ,EAAI5F,EAAO4F,GAAKuuY,GAAW/+Y,EAAOwQ,EAAI5F,EAAO4F,IAAMuuY,EAC1DzwW,EAAG99B,GAAKtQ,EAGRouC,EAAG99B,GAAKtQ,EAIR6+Y,GACA/5X,EAAQvhB,KAAK+gD,UAAUxkD,EAAQ4K,GAC/B0jC,EAAK7qC,KAAKqN,UAAU9Q,EAAQglB,EAAO9kB,KAGnC8kB,EAAQvhB,KAAK+gD,UAAU55C,EAAQ5K,GAC/BsuC,EAAK7qC,KAAKqN,UAAUlG,EAAQoa,EAAO9kB,IAGpCouC,GAEXqP,EAAM1kB,UAAY,SAAU++T,EAAKC,GAC7B,OAAInoV,KAAKE,IAAIioV,EAAIznV,EAAIwnV,EAAIxnV,GAAKV,KAAKE,IAAIioV,EAAIxnV,EAAIunV,EAAIvnV,GACxCunV,EAAIxnV,EAAIynV,EAAIznV,EAAI,QAAU,OAG1BwnV,EAAIvnV,EAAIwnV,EAAIxnV,EAAI,SAAW,OAG1C69E,IACI3jF,EAAS,IACVgzC,EAAM7+C,UAAW,SAAK,GACzBwvF,IACI3jF,EAAS,IACVgzC,EAAM7+C,UAAW,SAAK,GAClB6+C,GACT8kB,IC1IE9oC,GAAsB,WACtB,SAASA,EAAKnpB,EAAGC,EAAGgJ,EAAOD,GAKvB/V,KAAK+M,EAAIuqB,OAAOC,UAKhBv3B,KAAKgN,EAAIsqB,OAAOC,UAKhBv3B,KAAKgW,MAAQ,EAKbhW,KAAK+V,OAAS,OACJ5a,IAAN4R,QAAyB5R,IAAN6R,GACnBD,EAAIC,EAAIsqB,OAAOC,UACfvhB,EAAQD,EAAS,SAGH5a,IAAV6a,IACAA,EAAQ,QAEG7a,IAAX4a,IACAA,EAAS,IAGjB/V,KAAK+M,EAAIA,EACT/M,KAAKgN,EAAIA,EACThN,KAAKgW,MAAQA,EACbhW,KAAK+V,OAASA,EAqLlB,OAnLAzX,OAAOuJ,eAAequB,EAAK76B,UAAW,QAClCqM,IAAK,WACD,OAAO1H,KAAK+M,GAEhBpF,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAequB,EAAK76B,UAAW,SAClCqM,IAAK,WACD,OAAO1H,KAAK+M,EAAI/M,KAAKgW,OAEzBrO,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAequB,EAAK76B,UAAW,OAClCqM,IAAK,WACD,OAAO1H,KAAKgN,GAEhBrF,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAequB,EAAK76B,UAAW,UAClCqM,IAAK,WACD,OAAO1H,KAAKgN,EAAIhN,KAAK+V,QAEzBpO,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAequB,EAAK76B,UAAW,WAClCqM,IAAK,WACD,OAASqF,EAAG/M,KAAKwM,KAAMQ,EAAGhN,KAAK0M,MAEnC/E,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAequB,EAAK76B,UAAW,YAClCqM,IAAK,WACD,OAASqF,EAAG/M,KAAKyM,MAAOO,EAAGhN,KAAK0M,MAEpC/E,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAequB,EAAK76B,UAAW,cAClCqM,IAAK,WACD,OAASqF,EAAG/M,KAAKwM,KAAMQ,EAAGhN,KAAK2M,SAEnChF,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAequB,EAAK76B,UAAW,eAClCqM,IAAK,WACD,OAASqF,EAAG/M,KAAKyM,MAAOO,EAAGhN,KAAK2M,SAEpChF,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAequB,EAAK76B,UAAW,cAClCqM,IAAK,WACD,OAASqF,EAAG/M,KAAKwM,KAAMQ,EAAGhN,KAAKgN,EAAIhN,KAAK+V,OAAS,IAErDpO,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAequB,EAAK76B,UAAW,eAClCqM,IAAK,WACD,OAASqF,EAAG/M,KAAKyM,MAAOO,EAAGhN,KAAKgN,EAAIhN,KAAK+V,OAAS,IAEtDpO,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAequB,EAAK76B,UAAW,aAClCqM,IAAK,WACD,OAASqF,EAAG/M,KAAK+M,EAAI/M,KAAKgW,MAAQ,EAAGhJ,EAAGhN,KAAK0M,MAEjD/E,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAequB,EAAK76B,UAAW,gBAClCqM,IAAK,WACD,OAASqF,EAAG/M,KAAK+M,EAAI/M,KAAKgW,MAAQ,EAAGhJ,EAAGhN,KAAK2M,SAEjDhF,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAequB,EAAK76B,UAAW,UAClCqM,IAAK,WACD,OAASqF,EAAG/M,KAAK+M,EAAI/M,KAAKgW,MAAQ,EAAGhJ,EAAGhN,KAAKgN,EAAIhN,KAAK+V,OAAS,IAEnEpO,YAAY,EACZC,cAAc,IAElBsuB,EAAK76B,UAAUw9C,OAAS,SAAU0iW,EAAOC,GACrC,OAAOD,EAAMxuY,IAAMyuY,EAAMzuY,GAAKwuY,EAAMvuY,IAAMwuY,EAAMxuY,GAAKuuY,EAAMvlY,QAAUwlY,EAAMxlY,OAASulY,EAAMxlY,SAAWylY,EAAMzlY,QAE/GmgB,EAAK76B,UAAUypD,UAAY,SAAUzxB,GACjC,IAAI5mB,EAAQJ,KAAKC,IAAIgrB,OAAOizE,MAAQvqG,KAAKyM,OAASzM,KAAK+M,IAAMuqB,OAAOC,UAAYlE,EAAK5mB,MAAQzM,KAAKyM,MAAO4mB,EAAK5mB,OAC1GE,EAASN,KAAKC,IAAIgrB,OAAOizE,MAAQvqG,KAAK2M,QAAU3M,KAAKgN,IAAMsqB,OAAOC,UAAYlE,EAAK1mB,OAAS3M,KAAK2M,OAAQ0mB,EAAK1mB,QAKlH,OAJA3M,KAAK+M,EAAIV,KAAK0T,IAAI/f,KAAKwM,KAAM6mB,EAAK7mB,MAClCxM,KAAKgN,EAAIX,KAAK0T,IAAI/f,KAAK0M,IAAK2mB,EAAK3mB,KACjC1M,KAAKgW,MAAQvJ,EAAQzM,KAAK+M,EAC1B/M,KAAK+V,OAASpJ,EAAS3M,KAAKgN,EACrBhN,MAEXk2B,EAAK76B,UAAUogZ,WAAa,SAAU3nX,GAClC,GAAI9zB,KAAK+M,IAAMuqB,OAAOC,UAGlB,OAFAv3B,KAAK+M,EAAI+mB,EAAM/mB,OACf/M,KAAKgN,EAAI8mB,EAAM9mB,GAGnB,IAAID,EAAIV,KAAK0T,IAAI/f,KAAKwM,KAAMsnB,EAAM/mB,GAC9BC,EAAIX,KAAK0T,IAAI/f,KAAK0M,IAAKonB,EAAM9mB,GAC7BP,EAAQJ,KAAKC,IAAItM,KAAKyM,MAAOqnB,EAAM/mB,GACnCJ,EAASN,KAAKC,IAAItM,KAAK2M,OAAQmnB,EAAM9mB,GACzChN,KAAK+M,EAAIA,EACT/M,KAAKgN,EAAIA,EACThN,KAAKgW,MAAQvJ,EAAQzM,KAAK+M,EAC1B/M,KAAK+V,OAASpJ,EAAS3M,KAAKgN,GAYhCkpB,EAAK76B,UAAU2xD,QAAU,SAAUoM,GAK/B,OAJAp5D,KAAK+M,GAAKqsD,EACVp5D,KAAKgN,GAAKosD,EACVp5D,KAAKgW,OAAmB,EAAVojD,EACdp5D,KAAK+V,QAAoB,EAAVqjD,EACRp5D,MAeXk2B,EAAK76B,UAAUqgZ,WAAa,SAAUroX,GAClC,QAAIrzB,KAAKyM,MAAQ4mB,EAAK7mB,MAAQxM,KAAKwM,KAAO6mB,EAAK5mB,OAASzM,KAAK0M,IAAM2mB,EAAK1mB,QAAU3M,KAAK2M,OAAS0mB,EAAK3mB,MAKzGwpB,EAAK76B,UAAUihC,aAAe,SAAUjJ,GACpC,OAAOrzB,KAAKwM,MAAQ6mB,EAAK7mB,MAAQxM,KAAKyM,OAAS4mB,EAAK5mB,OAASzM,KAAK0M,KAAO2mB,EAAK3mB,KAAO1M,KAAK2M,QAAU0mB,EAAK1mB,QAE7GupB,EAAK76B,UAAUy9C,cAAgB,SAAUhlB,EAAOslC,GAE5C,YADgB,IAAZA,IAAsBA,EAAU,GAC7Bp5D,KAAKwM,KAAO4sD,GAAWtlC,EAAM/mB,GAAK/M,KAAKyM,MAAQ2sD,GAAWtlC,EAAM/mB,GAChE/M,KAAK0M,IAAM0sD,GAAWtlC,EAAM9mB,GAAKhN,KAAK2M,OAASysD,GAAWtlC,EAAM9mB,GAU3EkpB,EAAK0W,SAAW,SAAUjV,GAEtB,IAAK,IADDtE,EAAO,IAAI6C,EACN93B,EAAK,EAAGgjC,EAAWzJ,EAAQv5B,EAAKgjC,EAAS3kC,OAAQ2B,IAAM,CAC5D,IAAIysC,EAAKzJ,EAAShjC,GAClBi1B,EAAKooX,WAAW5wW,GAEpB,OAAOxX,GAEX6C,EAAK6rN,MAAQ,IAAI7rN,EAAKoB,OAAOC,UAAWD,OAAOsiU,UAAW,EAAG,GACtD1jU,MrVxNX,SAAWuU,GACPA,EAAYA,EAAsB,SAAI,GAAK,WAC3CA,EAAYA,EAAyB,YAAI,GAAK,cAC9CA,EAAYA,EAAqB,QAAI,GAAK,UAC1CA,EAAYA,EAAqB,QAAI,GAAK,UAJ9C,CAKGA,KAAgBA,QAEnB,IsVAWsuB,GtVAPvuB,GAAwB,WAexB,OAdA,SAAgBQ,EAAKI,EAAKF,EAAKD,EAAKp/B,EAASI,EAASvF,GAClD1G,KAAKgrC,IAAMA,EACXhrC,KAAKorC,IAAMA,EACXprC,KAAKkrC,IAAMA,EACXlrC,KAAKirC,IAAMA,EACXjrC,KAAK6L,QAAUA,EACf7L,KAAKiM,QAAUA,EAMfjM,KAAK0G,KAAOA,MuVjBhBimF,GAAgC,WAChC,SAASA,KAmjBT,OAjjBAA,EAAeO,WAAa,SAAUw2S,GAClC,OAAOA,EAAOx2S,WAAW,OAE7BP,EAAeQ,cAAgB,SAAUu2S,EAAQ1tX,EAAOD,GAChD2tX,IACAA,EAAOlgY,aAAa,QAASwS,EAAM9I,YACnCw2X,EAAOlgY,aAAa,SAAUuS,EAAO7I,cAI7Cy/E,EAAetxF,UAAUsgZ,eAAiB,SAAU3oY,EAASi6E,EAAKlgF,EAAGC,GACjE,IAAIV,EACAyT,EACA67X,EACJ,GAA8B,SAA1B5oY,EAAQi/B,SAASvrC,KAAiB,CAClC,IAAK,IAAIvK,EAAI,EAAGA,EAAI6W,EAAQi/B,SAAS4pW,MAAMp/Y,OAAQN,IAC/CmQ,OAAcnR,IAARmR,EAAoB0G,EAAQi/B,SAAS4pW,MAAM1/Y,GAAGwP,OAASU,KAAKC,IAAIA,EAAK0G,EAAQi/B,SAAS4pW,MAAM1/Y,GAAGwP,QACrGoU,OAAc5kB,IAAR4kB,EAAoB/M,EAAQi/B,SAAS4pW,MAAM1/Y,GAAGwP,OAASU,KAAK0T,IAAIA,EAAK/M,EAAQi/B,SAAS4pW,MAAM1/Y,GAAGwP,QAEzG,GAA8B,WAA1BqH,EAAQi/B,SAASvrC,KAAmB,CACpC,IAAIuxB,EAASjlB,EAAQi/B,SACrB2pW,EAAM3uT,EAAI4C,qBAAqB9iF,EAAIkrB,EAAO+C,GAAIhuB,EAAIirB,EAAOgD,GAAIluB,EAAIkrB,EAAOiD,GAAIluB,EAAIirB,EAAOkD,QAEtF,CACD,IAAI2gX,EAAS9oY,EAAQi/B,SACrB2pW,EAAM3uT,EAAIiD,qBAAqBnjF,EAAI+uY,EAAO3iS,GAAInsG,EAAI8uY,EAAO1iS,GAAI,EAAGrsG,EAAI+uY,EAAOztX,GAAIrhB,EAAI8uY,EAAOxtX,GAAIwtX,EAAOl/W,GAEzG,IAASzgC,EAAI,EAAGA,EAAI6W,EAAQi/B,SAAS4pW,MAAMp/Y,OAAQN,IAAK,CACpD,IAAIq9G,EAASxmG,EAAQi/B,SAAS4pW,MAAM1/Y,GAChCwP,EAASoU,EAAM,GAAKzT,EAAMktG,EAAO7tG,SAAW,EAAIW,GAAOktG,EAAO7tG,OAASW,EAC3EsvY,EAAItrT,aAAa3kF,EAAQ6tG,EAAOhjF,OAEpCy2D,EAAIkB,UAAYytT,EAEpB,OAAO3uT,GAEXN,EAAetxF,UAAU0gZ,aAAe,SAAU/oY,EAAS0wX,EAAQv8V,QAC5C,IAAfA,IAAyBA,EAAa,MAC1C,IAAI8lD,EAAMN,EAAeO,WAAWw2S,GACpCz2S,EAAIQ,OACJR,EAAIS,YACJT,EAAIM,YAAcN,EAAIkB,UAAYn7E,EAAQg/B,OAAOxb,MACjDy2D,EAAIgB,YAAcj7E,EAAQg/B,OAAOvkC,QACjC,IACIqmB,EAAQomB,GAAM7sC,WADFN,EAAG,EAAGC,EAAG,GACYgG,EAAQg/B,OAAOzwB,MAAOvO,EAAQg/B,OAAOqI,UACtE8vT,EAASn3V,EAAQjG,EAAI+mB,EAAM/mB,EAC3Bq9V,EAASp3V,EAAQhG,EAAI8mB,EAAM9mB,EAC3BwiC,EAAS26T,EAASn3V,EAAQgD,MAAQhD,EAAQw8B,OAC1CC,EAAS26T,EAASp3V,EAAQ+C,OAAS/C,EAAQy8B,OAC/CzvC,KAAKg8Y,cAActY,EAAQ1wX,EAAQuO,MAAOiuB,EAAQC,GAC9CtI,GACA8lD,EAAI0B,UAAUw7Q,EAAQC,GACtBpqW,KAAK+hF,WAAW2hT,EAAQ1wX,EAASm0B,GACjC8lD,EAAI0B,WAAWw7Q,GAASC,KAGxBn9Q,EAAI55D,KAAK82U,EAAQC,EAAQp3V,EAAQgD,MAAOhD,EAAQ+C,QAChDk3E,EAAImB,SAAS+7Q,EAAQC,EAAQp3V,EAAQgD,MAAOhD,EAAQ+C,SAExDk3E,EAAIrvD,OACJqvD,EAAInvD,SACJmvD,EAAIqB,YACJrB,EAAIY,WAERlB,EAAeI,aAAe,SAAUzpF,EAAI0S,EAAOD,GAC/C,IAAIi3E,EAAYxsF,SAASW,cAAc,UAGvC,OAFA6rF,EAAUxpF,aAAa,KAAMF,GAC7BtD,KAAKmtF,cAAcH,EAAWh3E,EAAOD,GAC9Bi3E,GAGXL,EAAetxF,UAAU8mP,SAAW,SAAUuhJ,EAAQh/X,GAClD,IAAIuoF,EAAMN,EAAeO,WAAWw2S,GACjB,SAAfh/X,EAAMk5B,OACNl5B,EAAMk5B,KAAO,eAEI,SAAjBl5B,EAAMo5B,SACNp5B,EAAMo5B,OAAS,eAEnBmvD,EAAIM,YAAc7oF,EAAMo5B,OACxBmvD,EAAIG,UAAY1oF,EAAMmtC,YACI,IAAtBntC,EAAMmtC,cACNo7C,EAAIM,YAAc,eAEtBN,EAAIgB,YAAcvpF,EAAM+I,QACxB,IAAIqkC,KACAptC,EAAMotC,YACNA,EAAY9xC,KAAKi8Y,eAAev3Y,EAAMotC,YAE1Cm7C,EAAIK,YAAYx7C,GACZptC,EAAMutC,UAAoC,SAAxBvtC,EAAMutC,SAASvrC,KACjC1G,KAAK27Y,eAAej3Y,EAAOuoF,EAAK,EAAG,GAGnCA,EAAIkB,UAAYzpF,EAAMk5B,MAG9B+uD,EAAetxF,UAAU2gZ,cAAgB,SAAUtY,EAAQniX,EAAOxU,EAAGC,GACjE,IAAIigF,EAAMN,EAAeO,WAAWw2S,GACpCz2S,EAAI0B,UAAU5hF,EAAGC,GACjBigF,EAAIzsE,OAAOe,EAAQlV,KAAK+Q,GAAK,KAC7B6vE,EAAI0B,WAAW5hF,GAAIC,IAEvB2/E,EAAetxF,UAAU6gZ,aAAe,SAAUxY,EAAQj3W,GACtD,IAAIwgE,EAAMN,EAAeO,WAAWw2S,GAChCh3W,EAAO,GACPD,EAAK8kB,SACL7kB,GAAQ,WAERD,EAAKiiB,OACLhiB,GAAQ,SAEZA,GAASD,EAAa,SAAI,MAC1BC,GAAQD,EAAKQ,WACbggE,EAAIvgE,KAAOA,GAEfigE,EAAetxF,UAAU4gZ,eAAiB,SAAUnqW,GAIhD,IAAK,IAHDqqW,KACAlrR,GAAwC,IAA5Bn/E,EAAUvzC,QAAQ,KAAc,IAAM,IAE7CH,EAAK,EAAGg+Y,EADItqW,EAAU50C,MAAM+zH,GACe7yH,EAAKg+Y,EAAiB3/Y,OAAQ2B,IAAM,CACpF,IAAIjC,EAAIigZ,EAAiBh+Y,GACzB+9Y,EAAO33Y,KAAK8yB,OAAOn7B,IAEvB,OAAOggZ,GAGXxvT,EAAetxF,UAAUsoC,cAAgB,SAAU+/V,EAAQ1wX,GACvD,IAAwB,IAApBA,EAAQwkB,QACR,GAAIxkB,EAAQo1B,aACRp1B,EAAQxW,KAAO2rC,GAAiBn1B,EAAQo1B,aAAcp1B,EAAQ+C,OAAQ/C,EAAQgD,OAC9EhW,KAAKm2B,SAASutW,EAAQ1wX,OAErB,CACD,IAAIi6E,EAAMN,EAAeO,WAAWw2S,GAChC1wX,EAAQg/B,QACRhyC,KAAK+7Y,aAAa/oY,EAAS0wX,GAE/Bz2S,EAAIQ,OACJR,EAAIS,YACe16E,EAAQo1B,aAA3B,IACIoH,EAASx8B,EAAQjG,EAAIiG,EAAQgD,MAAQhD,EAAQw8B,OAC7CC,EAASz8B,EAAQhG,EAAIgG,EAAQ+C,OAAS/C,EAAQy8B,OAClDzvC,KAAKg8Y,cAActY,EAAQ1wX,EAAQuO,MAAOiuB,EAAQC,GAClDzvC,KAAKmiP,SAASuhJ,EAAQ1wX,GACtBi6E,EAAI55D,KAAKrgB,EAAQjG,EAAGiG,EAAQhG,EAAGgG,EAAQgD,MAAOhD,EAAQ+C,QACtDk3E,EAAImB,SAASp7E,EAAQjG,EAAGiG,EAAQhG,EAAGgG,EAAQgD,MAAOhD,EAAQ+C,QAC1Dk3E,EAAIrvD,OACJqvD,EAAInvD,SACJmvD,EAAIqB,YACJrB,EAAIY,YAqChBlB,EAAetxF,UAAU86B,SAAW,SAAUutW,EAAQ1wX,GAClD,IAAIm0B,KAEJA,EAAawB,GADbxB,EAAaD,GAAgBl0B,EAAQxW,OAEjCwW,EAAQg/B,QACRhyC,KAAK+7Y,aAAa/oY,EAAS0wX,EAAQv8V,GAEvC,IAAI8lD,EAAMN,EAAeO,WAAWw2S,GACpCz2S,EAAIQ,OACJR,EAAIS,YACJ,IAAIj+C,EAASz8B,EAAQhG,EAAIgG,EAAQ+C,OAAS/C,EAAQy8B,OAC9CD,EAASx8B,EAAQjG,EAAIiG,EAAQgD,MAAQhD,EAAQw8B,OACjDxvC,KAAKg8Y,cAActY,EAAQ1wX,EAAQuO,MAAOiuB,EAAQC,GAClDzvC,KAAKmiP,SAASuhJ,EAAQ1wX,GACtBi6E,EAAI0B,UAAU37E,EAAQjG,EAAGiG,EAAQhG,GACjChN,KAAK+hF,WAAW2hT,EAAQ1wX,EAASm0B,GACjC8lD,EAAIrvD,OACJqvD,EAAI0B,WAAW37E,EAAQjG,GAAIiG,EAAQhG,GACnCigF,EAAInvD,SACJmvD,EAAIY,WAERlB,EAAetxF,UAAU0mF,WAAa,SAAU2hT,EAAQ1wX,EAASm0B,GAC7D,IAAwB,IAApBn0B,EAAQwkB,QAAkB,CAC1B,IASIiD,EATAwyD,EAAMN,EAAeO,WAAWw2S,GAChC96V,OAAK,EACLC,OAAK,EACL7N,OAAK,EACLC,OAAK,EACLC,OAAK,EACLC,OAAK,EACLpuB,OAAI,EACJC,OAAI,EAEJ7Q,OAAI,EAEJkgZ,EAAOl1W,EACX,IAAKp6B,EAAI,EAAGC,EAAI,EAAG7Q,EAAI,EAAGs+B,EAAW4hX,EAAK5/Y,OAAQN,EAAIs+B,IAAYt+B,EAAG,CACjE,IACIusC,EADM2zW,EAAKlgZ,GAEXorC,EAAOmB,EAAIlB,QAmBf,OAlBI,OAAQkB,IACR1N,EAAK0N,EAAI1N,IAET,OAAQ0N,IACRxN,EAAKwN,EAAIxN,IAET,OAAQwN,IACRzN,EAAKyN,EAAIzN,IAET,OAAQyN,IACRvN,EAAKuN,EAAIvN,IAET,MAAOuN,IACP37B,EAAI27B,EAAI37B,GAER,MAAO27B,IACP17B,EAAI07B,EAAI17B,GAEJu6B,GACJ,IAAK,IACD0lD,EAAIU,OAAO5gF,EAAGC,GACd07B,EAAI37B,EAAIA,EACR27B,EAAI17B,EAAIA,EACR,MACJ,IAAK,IACDigF,EAAIW,OAAO7gF,EAAGC,GACd07B,EAAI37B,EAAIA,EACR27B,EAAI17B,EAAIA,EACR,MACJ,IAAK,IACDigF,EAAI8B,cAAc/zD,EAAIC,EAAIC,EAAIC,EAAIpuB,EAAGC,GACrC07B,EAAI37B,EAAIA,EACR27B,EAAI17B,EAAIA,EACR07B,EAAI1N,GAAKA,EACT0N,EAAIzN,GAAKA,EACTyN,EAAIxN,GAAKA,EACTwN,EAAIvN,GAAKA,EACT,MACJ,IAAK,IACD8xD,EAAIqvT,iBAAiBthX,EAAIC,EAAIluB,EAAGC,GAChC07B,EAAI37B,EAAIA,EACR27B,EAAI17B,EAAIA,EACR07B,EAAI1N,GAAKA,EACT0N,EAAIzN,GAAKA,EACT,MACJ,IAAK,IACD,IAAI6G,EAAY8G,EAAZ9G,EAAmB+G,EACnB1a,EAAKua,EAAIf,GACTvZ,EAAKsa,EAAId,GACT20W,EAAgB7zW,EAAInnB,OAASlV,KAAK+Q,GAAK,KACvCyqB,EAAWa,EAAIb,SACfC,EAAQY,EAAIZ,MACZ00W,EAAUzvY,EAAVyvY,EAAgBxvY,EAChByvY,GACA1vY,EAAGV,KAAKoV,IAAI86X,IAAkBz6W,EAAS06W,GAAQ,EAAMnwY,KAAKqV,IAAI66X,IAAkBz6W,EAAS06W,GAAQ,EACjGxvY,GAAIX,KAAKqV,IAAI66X,IAAkBz6W,EAAS06W,GAAQ,EAAMnwY,KAAKoV,IAAI86X,IAAkBz6W,EAAS06W,GAAQ,GAElG/0W,EAAIp7B,KAAK87D,IAAIs0U,EAAM1vY,EAAG,GAAKV,KAAK87D,IAAIh6C,EAAI,GAAK9hB,KAAK87D,IAAIs0U,EAAMzvY,EAAG,GAAKX,KAAK87D,IAAI/5C,EAAI,GACjFqZ,EAAI,IACJtZ,GAAM9hB,KAAKQ,KAAK46B,GAChBrZ,GAAM/hB,KAAKQ,KAAK46B,IAEpB,IAAIthB,EAAK9Z,KAAK87D,IAAI/5C,EAAI,GAAK/hB,KAAK87D,IAAIs0U,EAAM1vY,EAAG,GACzC26B,GAAKG,IAAaC,GAAS,EAAI,GAAKz7B,KAAKQ,MAAOR,KAAK87D,IAAIh6C,EAAI,GAAK9hB,KAAK87D,IAAI/5C,EAAI,GAAO/hB,KAAK87D,IAAIh6C,EAAI,GAAK9hB,KAAK87D,IAAIs0U,EAAMzvY,EAAG,GAAMmZ,IAC/H9Z,KAAK87D,IAAIh6C,EAAI,GAAK9hB,KAAK87D,IAAIs0U,EAAMzvY,EAAG,GAAKX,KAAK87D,IAAI/5C,EAAI,GAAK/hB,KAAK87D,IAAIs0U,EAAM1vY,EAAG,KAC9Ei1C,MAAMta,KACNA,EAAI,GAER,IAAIg1W,EAAWh1W,EAAIvZ,EAAKsuX,EAAMzvY,EAAIohB,EAA9BsuX,EAAqCh1W,GAAKtZ,EAAKquX,EAAM1vY,EAAIohB,EACzDwuX,GACA5vY,GAAI+0B,EAAS06W,GAAQ,EAAMnwY,KAAKoV,IAAI86X,GAAiBG,EAAQrwY,KAAKqV,IAAI66X,GAAiBG,EACvF1vY,GAAI80B,EAAS06W,GAAQ,EAAMnwY,KAAKqV,IAAI66X,GAAiBG,EAAQrwY,KAAKoV,IAAI86X,GAAiBG,GAEvFr6V,EAAKriD,KAAKmjD,GAAG,EAAG,KAAMs5V,EAAM1vY,EAAI2vY,GAASvuX,GAAKsuX,EAAMzvY,EAAI0vY,GAAStuX,IACjE46F,IAAMyzR,EAAM1vY,EAAI2vY,GAASvuX,GAAKsuX,EAAMzvY,EAAI0vY,GAAStuX,GACjD2+H,KAAO0vP,EAAM1vY,EAAI2vY,GAASvuX,IAAMsuX,EAAMzvY,EAAI0vY,GAAStuX,GACnDwuX,EAAK58Y,KAAKmjD,EAAE6lE,EAAG+jC,GAoBnB,GAnBI/sJ,KAAK48B,EAAEosF,EAAG+jC,KAAO,IACjB6vP,EAAKvwY,KAAK+Q,IAEVpd,KAAK48B,EAAEosF,EAAG+jC,IAAM,IAChB6vP,EAAK,GAQTl0W,EAAIi0W,MAAQA,EACZj0W,EAAI6zW,cAAgBA,EACpB7zW,EAAIva,GAAKA,EACTua,EAAIta,GAAKA,EACTsa,EAAI2Z,GAAKA,EACT3Z,EAAIk0W,GAAKA,EACTl0W,EAAIZ,MAAQA,EACD,MAAPmlD,EAAa,CACb,IAAI4vT,EAAK1uX,EAAKC,EAAKD,EAAKC,EACpB0uX,EAAK3uX,EAAKC,EAAK,EAAID,EAAKC,EACxB2uX,EAAK5uX,EAAKC,EAAKA,EAAKD,EAAK,EAC7B8+D,EAAIQ,OACJR,EAAI0B,UAAUguT,EAAM5vY,EAAG4vY,EAAM3vY,GAC7BigF,EAAIzsE,OAAO+7X,GACXtvT,EAAIxhC,MAAMqxV,EAAIC,GACd9vT,EAAI+B,IAAI,EAAG,EAAG6tT,EAAIx6V,EAAIA,EAAKu6V,GAAK90W,GAChCmlD,EAAIxhC,MAAM,EAAIqxV,EAAI,EAAIC,GACtB9vT,EAAIzsE,QAAQ+7X,GACZtvT,EAAI0B,WAAWguT,EAAM5vY,GAAI4vY,EAAM3vY,GAC/BigF,EAAIY,UAER,MACJ,IAAK,IACL,IAAK,IACDZ,EAAIqB,YACJvhF,EAAI67B,EACJ57B,EAAI67B,EAGZD,EAAK77B,EACL87B,EAAK77B,KAIjB2/E,EAAetxF,UAAU6zF,SAAW,SAAUw0S,EAAQ1wX,GAClD,GAAIA,EAAQonB,UAA+B,IAApBpnB,EAAQwkB,QAAkB,CAC7C,IAAIy1D,EAAMN,EAAeO,WAAWw2S,GACpCz2S,EAAIQ,OACJztF,KAAKmiP,SAASuhJ,EAAQ1wX,GACtB,IAAIw8B,EAASx8B,EAAQjG,EAAIiG,EAAQgD,MAAQhD,EAAQw8B,OAC7CC,EAASz8B,EAAQhG,EAAIgG,EAAQ+C,OAAS/C,EAAQy8B,OAClDzvC,KAAKg8Y,cAActY,EAAQ1wX,EAAQuO,MAAOiuB,EAAQC,GAClDzvC,KAAKk8Y,aAAaxY,EAAQ1wX,GAC1B,IAAI7W,EAAI,EACJoV,KACJA,EAAayB,EAAQzB,WACrB,IAAIogC,EAAa3+B,EAAQ2+B,WAEzB,GADAs7C,EAAIkB,UAAYn7E,EAAQwjB,MACpBmb,EAAY,CACZ,IAAIz9B,EAAWlU,KAAKg9Y,WAAWhqY,EAAS2+B,EAAYpgC,GACpD,IAAKpV,EAAI,EAAGA,EAAIoV,EAAW9U,OAAQN,IAAK,CACpC,IAAIkE,EAAQkR,EAAWpV,GACnB0P,EAAUqI,EAASnH,EAAI1M,EAAM0M,EAAI4kC,EAAW5kC,EAC5Cd,EAAUiI,EAASlH,EAAI3M,EAAM0wC,GAAK50C,EAA0B,GAApB6W,EAAgB,SAK5D,GAJI2+B,EAAW37B,MAAQhD,EAAQgD,OAAkC,SAAzBhD,EAAQotB,eAC5C//B,EAAMosB,KAAOqiB,GAASzuC,EAAMosB,KAAMzZ,IAEtCi6E,EAAIqC,SAASjvF,EAAMosB,KAAM5gB,EAASI,GACH,cAA3B+G,EAAQm/B,gBACsB,aAA3Bn/B,EAAQm/B,gBACmB,gBAA3Bn/B,EAAQm/B,eAAkC,CAC7C,IAAI8qW,EAAcpxY,EACdqxY,OAAc,EAEdC,EAAYtxY,EADCohF,EAAIzgE,YAAYnsB,EAAMosB,MAAMzW,MAEzConY,OAAY,EAChB,OAAQpqY,EAAQm/B,gBACZ,IAAK,YACD+qW,EAAcjxY,EAAU,EACxBmxY,EAAYnxY,EAAU,EACtB,MACJ,IAAK,WACDixY,EAAehpY,EAASlH,EAAI3M,EAAM0wC,GAAK50C,EACvCihZ,EAAalpY,EAASlH,EAAI3M,EAAM0wC,GAAK50C,EACrC,MACJ,IAAK,cACD+gZ,GAAgBjxY,EAAUiI,EAASlH,EAAI3M,EAAM0wC,GAAK50C,GAAK,EAAK,EAC5DihZ,GAAcnxY,EAAUiI,EAASlH,EAAI3M,EAAM0wC,GAAK50C,GAAK,EAAK,EAElE8wF,EAAIS,YACJT,EAAIU,OAAOsvT,EAAaC,GACxBjwT,EAAIW,OAAOuvT,EAAWC,GACtBnwT,EAAIM,YAAcv6E,EAAQwjB,MAC1By2D,EAAIG,UAA+B,IAAnBp6E,EAAQ6Z,SACxBogE,EAAIgB,YAAcj7E,EAAQvF,QAC1Bw/E,EAAInvD,WAIhBmvD,EAAIY,YAGZlB,EAAetxF,UAAUq0F,UAAY,SAAUg0S,EAAQ3mY,GACnD,GAAIA,EAAIy6B,QAAS,CACb,IAAIy1D,EAAMN,EAAeO,WAAWw2S,GACpCz2S,EAAIQ,OACJ,IAAIj+C,EAASzyC,EAAIgQ,EAAIhQ,EAAIiZ,MAAQjZ,EAAIyyC,OACjCC,EAAS1yC,EAAIiQ,EAAIjQ,EAAIgZ,OAAShZ,EAAI0yC,QACvB,IAAImgD,OACVtwF,IAAMvC,EAAIR,OAWnB0wF,EAAI0B,UAAUn/C,EAAQC,GACtBw9C,EAAIzsE,OAAOzjB,EAAIwkB,MAAQlV,KAAK+Q,GAAK,KACjC,IAAIk4K,EAAQ,IAAI1lG,MAChB0lG,EAAMh2L,IAAMvC,EAAIR,OAChByD,KAAKs1L,MAAMroG,EAAKqoG,GAAQv4L,EAAIiZ,MAAQ,GAAIjZ,EAAIgZ,OAAS,EAAGhZ,EAAIiZ,MAAOjZ,EAAIgZ,OAAQhZ,GAC/EkwF,EAAIzsE,QAASzjB,EAAIwkB,MAAQlV,KAAK+Q,GAAK,KACnC6vE,EAAI0B,WAAWn/C,GAASC,GAExBw9C,EAAIY,YAGZlB,EAAetxF,UAAUi6L,MAAQ,SAAUroG,EAAKqoG,EAAOvoL,EAAGC,EAAGgJ,EAAOD,EAAQsnY,GACxEpwT,EAAIS,YACJ,IAAI4vT,EAAWhoN,EAAMt/K,MACjBunY,EAAYjoN,EAAMv/K,OAClBynY,EAAexnY,EACfynY,EAAe1nY,EACf2nY,EAAc,EACdrrI,EAAe,EACnB,GAAIgrI,GAA2C,SAA3BA,EAAahuV,UAAsB,CACnD,IAAIsuV,EAASN,EAAahuV,UAAUz5C,cAAcohB,OAAO,EAAG,GACxD4mX,EAASP,EAAahuV,UAAUz5C,cAAcohB,OAAO,EAAG,GAC5D,GAA2B,UAAvBqmX,EAAa5xV,MAAmB,CAChC,IAAItI,EAAI,WACJu6V,EAAcF,EACdnrI,EAAekrI,EAAYC,EAAeF,GAE1CxgX,EAAI,WACJ4gX,EAAcJ,EAAWG,EAAeF,EACxClrI,EAAeorI,GAEfD,EAAeC,GACft6V,IACIs6V,EAAeprI,GACfv1O,KAGC0gX,IAAiBC,EAClBH,EAAWC,EACXzgX,IAGAqmB,KAIJrmB,IACI0gX,EAAeE,GACfv6V,KAGR,IAAInoB,EAAKh7B,KAAK69Y,eAAeF,EAAQD,EAAaF,EAAcF,GAC5DriX,EAAKj7B,KAAK69Y,eAAeD,EAAQvrI,EAAcorI,EAAcF,GAC7DO,EAASR,EAAWtiX,EACpB+iX,EAAUR,EAAYtiX,EACtB+iX,EAASN,EAAe1iX,GAAM0iX,EAAcJ,GAC5CW,EAAU5rI,EAAgBp3O,GAAMo3O,EAAekrI,GAC/CW,EAAU19Y,SAASW,cAAc,UACrC+8Y,EAAQ16Y,aAAa,QAASwS,EAAM9I,YACpCgxY,EAAQ16Y,aAAa,SAAUuS,EAAO7I,YAC3BgxY,EAAQhxT,WAAW,MACzBwC,UAAU4lG,EAAOt6J,EAAIC,EAAI6iX,EAAQC,EAAS,EAAG,EAAGC,EAAQC,GAC7DhxT,EAAIyC,UAAUwuT,EAASnxY,EAAGC,EAAGgJ,EAAOD,QAEnC,GAA2B,SAAvBsnY,EAAa5xV,MAAkB,CACpC,IAAI0yV,EAAYZ,EAAYD,EACxBc,EAAaX,EAAeD,EAChCE,EAAcU,EAAYD,EAAWX,EAAeC,EAAeU,EACnE9rI,EAAe+rI,EAAYD,EAAWX,EAAeW,EAAWV,EAChE1wY,GAAK/M,KAAKq+Y,cAAcV,EAAQD,EAAaF,GAC7CxwY,GAAKhN,KAAKq+Y,cAAcT,EAAQvrI,EAAcorI,GAC9CxwT,EAAIyC,UAAU4lG,EAAO,EAAG,EAAGgoN,EAAUC,EAAWxwY,EAAGC,EAAG0wY,EAAarrI,QAGnEplL,EAAIyC,UAAU4lG,EAAOvoL,EAAGC,EAAGgJ,EAAOD,QAItCk3E,EAAIyC,UAAU4lG,EAAOvoL,EAAGC,EAAGgJ,EAAOD,GAEtCk3E,EAAIqB,aAER3B,EAAetxF,UAAUwiZ,eAAiB,SAAU9rT,EAAK/vB,EAAK0qK,EAAMptO,GAChE,OAAQyyF,GACJ,IAAK,MAAO,OAAO,EACnB,IAAK,MAAO,OAAQ/vB,EAAM0qK,GAAQ,EAAIptO,EAAM0iE,EAC5C,IAAK,MAAO,OAAQA,EAAM0qK,GAAQptO,EAAM0iE,EACxC,QAAS,OAAO,IAGxB2qB,EAAetxF,UAAUgjZ,cAAgB,SAAUtsT,EAAK/vB,EAAK0qK,GACzD,IAAIpgO,EAAMD,KAAKC,IAAI01D,EAAK0qK,GACpB3sN,EAAM1T,KAAK0T,IAAIiiD,EAAK0qK,GACxB,OAAQ36I,GACJ,IAAK,MAAO,OAAO,EACnB,IAAK,MAAO,OAAQzlF,EAAMyT,GAAO,EACjC,IAAK,MAAO,OAAOzT,EAAMyT,EACzB,QAAS,OAAO,IAKxB4sE,EAAetxF,UAAU01E,EAAI,SAAUg8E,GAAK,OAAO1gJ,KAAKQ,KAAKR,KAAK87D,IAAI4kF,EAAE,GAAI,GAAK1gJ,KAAK87D,IAAI4kF,EAAE,GAAI,KAEhGpgE,EAAetxF,UAAUuhC,EAAI,SAAUosF,EAAG+jC,GAAK,OAAQ/jC,EAAE,GAAK+jC,EAAE,GAAK/jC,EAAE,GAAK+jC,EAAE,KAAO/sJ,KAAK+wE,EAAEi4C,GAAKhpH,KAAK+wE,EAAEg8E,KAExGpgE,EAAetxF,UAAU8nD,EAAI,SAAU6lE,EAAG+jC,GAAK,OAAQ/jC,EAAE,GAAK+jC,EAAE,GAAK/jC,EAAE,GAAK+jC,EAAE,IAAM,EAAI,GAAK1gJ,KAAKw/D,KAAK7rE,KAAK48B,EAAEosF,EAAG+jC,KAEjHpgE,EAAetxF,UAAU2hZ,WAAa,SAAUvwX,EAAMklB,EAAYpgC,GAC9D,IAAImlB,EAAS,IAAItJ,GAAKukB,EAAW37B,MAAOzE,EAAW9U,OAAUgwB,EAAa,UACtEvY,GAAanH,EAAG,EAAGC,EAAG,GACtBsxY,EAAS7xX,EAAK1f,EACdwxY,EAAS9xX,EAAKzf,EAGdwxY,EAFuB,GAAb/xX,EAAKzW,MAGfyoY,EAFwB,GAAdhyX,EAAK1W,OAmBnB,MAhBuB,SAAnB0W,EAAK4lB,UACLmsW,EAAS,EAEe,WAAnB/xX,EAAK4lB,UAENmsW,EADA7sW,EAAW37B,MAAQyW,EAAKzW,QAAgC,aAAtByW,EAAK2T,cAAqD,SAAtB3T,EAAK2T,cAClE,EAGa,GAAb3T,EAAKzW,MAGM,UAAnByW,EAAK4lB,YACVmsW,EAAuB,EAAb/xX,EAAKzW,OAEnB9B,EAASnH,EAAIuxY,EAASE,GAAU7sW,EAAaA,EAAW5kC,EAAI,GAC5DmH,EAASlH,EAAIuxY,EAASE,EAAS/nX,EAAO3gB,OAAS,EACxC7B,GAEJy4E,KCjjBP7+D,GAA6B,WAC7B,SAASA,KA2jBT,OAzjBAA,EAAYzyB,UAAU0gZ,aAAe,SAAU/oY,EAAS0wX,EAAQv8V,EAAYu3W,QACrD,IAAfv3W,IAAyBA,EAAa,MAC1C,IAMIzgC,EACAkkW,EANA92U,EAAQomB,GAAM7sC,WADCN,EAAG,EAAGC,EAAG,GACYgG,EAAQg/B,OAAOzwB,MAAOvO,EAAQg/B,OAAOqI,UACzEskW,EAAK3rY,EAAQjG,EAAI+mB,EAAM/mB,EACvB6xY,EAAK5rY,EAAQhG,EAAI8mB,EAAM9mB,EACTgG,EAAQgD,MAAQhD,EAAQw8B,OACxBx8B,EAAQ+C,OAAS/C,EAAQy8B,OAGvCivW,IACA9zC,EAAgB8zC,EAAU9xX,eAAe82W,EAAOpgY,GAAK,YAEpDsnW,IACDlkW,EAAOygC,EAAa,OAAS,OAC7ByjU,EAAgBpqW,SAAS4C,gBAAgB,6BAA8BsD,GACvEg9X,EAAO/hY,YAAYipW,IAEvB,IAAI9iN,GACAxkJ,GAAMogY,EAAOpgY,GAAK,UAAWs6B,KAAQ5qB,EAAQg/B,OAAOxb,MAAOsH,OAAU9qB,EAAQg/B,OAAOxb,MACpF/oB,QAAWuF,EAAQg/B,OAAOvkC,QAAQP,WAClCG,UAAa,UAAY2F,EAAQuO,MAAQ,KAAOvO,EAAQjG,EAAIiG,EAAQgD,MAAQhD,EAAQw8B,QAAU,KACvFx8B,EAAQhG,EAAIgG,EAAQ+C,OAAS/C,EAAQy8B,QAAU,eAClCz8B,EAAQjG,EAAI+mB,EAAM/mB,GAAK,KAAOiG,EAAQhG,EAAI8mB,EAAM9mB,GAAK,KAE7E,GAAI0xY,EAAW,CACX,IAAIG,EAAeH,EAAU9xX,eAAe82W,EAAOpgY,IAC/Cu7Y,GACAA,EAAa35Y,aAAa0lW,EAAei0C,EAAajiY,YAG9Dg3B,GAAgBg3T,EAAe9iN,GAC1B3gH,EAGIA,GACLnnC,KAAK+hF,WAAW6oR,EAAe53V,EAASm0B,GAHxCyM,GAAgBg3T,GAAiB50V,MAAShD,EAAQgD,MAAOD,OAAU/C,EAAQ+C,UAMnF+X,EAAYzyB,UAAU4gZ,eAAiB,SAAUnqW,GAE7C,UAEJhkB,EAAYzyB,UAAUsoC,cAAgB,SAAU7mB,EAAK9J,EAAS0/B,EAAWosW,EAAU5qN,EAAYwqN,EAAWK,GAClG/rY,EAAQg/B,SAAW8sW,GACnB9+Y,KAAK+7Y,aAAa/oY,EAAS8J,OAAK3hB,EAAWujZ,GAE/C,IAAIp7Y,EAEAA,EADA0P,EAAQ1P,KAAOwZ,EAAIxZ,GACd0P,EAAQ1P,GAAK,aAGb0P,EAAQ1P,GAEjB,IAAI+vB,EACAqrX,IACArrX,EAAOqrX,EAAU9xX,eAAetpB,IAE/B+vB,IAAQ6gK,IACT7gK,EAAO7yB,SAAS4C,gBAAgB,6BAA8B,QAC9D0Z,EAAInb,YAAY0xB,IAEpB,IAAIu3U,EACA8zC,IAAc1rY,EAAQg/B,SACtB44T,EAAgB8zC,EAAU9xX,eAAe5Z,EAAQ1P,GAAK,0BAElDsnW,EAAcnqW,WAAW6E,YAAYslW,GAG7C,IAAI9iN,GACAxkJ,GAAMA,EAAIyJ,EAAKiG,EAAQjG,EAAEG,WAAYF,EAAKgG,EAAQhG,EAAEE,WAAY8I,MAAShD,EAAQgD,MAAM9I,WACvF6I,OAAU/C,EAAQ+C,OAAO7I,WAAYvI,WAAcqO,EAAQwkB,QAAU,UAAY,SACjFnqB,UAAa,UAAY2F,EAAQuO,MAAQ,KAClCvO,EAAQjG,EAAIiG,EAAQgD,MAAQhD,EAAQw8B,QAAU,KAAOx8B,EAAQhG,EAAIgG,EAAQ+C,OAAS/C,EAAQy8B,QAAU,IAC3GthB,GAAMnb,EAAQo1B,cAAgB,EAAGha,GAAMpb,EAAQo1B,cAAgB,EAAG36B,QAAWuF,EAAQvF,QACrFimH,aAAcqrR,GAAwB,IAEtC/rY,EAAQuuH,QACRumB,EAAY,MAAI90I,EAAQuuH,OAGvBw9Q,IACDj3P,EAFe,kBAEM,QAEzBl0G,GAAgBvgB,EAAMy0H,GACtB9nJ,KAAKg/Y,YAAY3rX,EAAMrgB,EAAS0/B,IAEpC5kB,EAAYzyB,UAAU4jZ,sBAAwB,SAAUC,EAAUlsY,GAC9D,IAAIqgB,EACJA,EAAO6rX,EAASz+Y,WAAWmsB,eAAe5Z,EAAQ1P,IAClD,IAAIwkJ,EACJA,GACIxkJ,GAAM0P,EAAQ1P,GAAIyJ,EAAKiG,EAAQjG,EAAEG,WAAYF,EAAKgG,EAAQhG,EAAEE,WAAY8I,MAAShD,EAAQgD,MAAM9I,WAC/F6I,OAAU/C,EAAQ+C,OAAO7I,WAAYG,UAAa,UAAY2F,EAAQuO,MAAQ,KACvEvO,EAAQjG,EAAIiG,EAAQgD,MAAQhD,EAAQw8B,QAAU,KAAOx8B,EAAQhG,EAAIgG,EAAQ+C,OAAS/C,EAAQy8B,QAAU,IAC3G8xF,MAAO,6BAENluG,IACDA,EAAO7yB,SAAS4C,gBAAgB,6BAA8B,QAC9D87Y,EAASv9Y,YAAY0xB,IAEzBrzB,KAAKg/Y,YAAY3rX,EAAMrgB,GACvB4gC,GAAgBvgB,EAAMy0H,IAE1Bh6H,EAAYzyB,UAAU8jZ,eAAiB,SAAU3rW,EAAaC,GAE1D,OADeE,GAAiBH,EAAaC,IAIjD3lB,EAAYzyB,UAAUmyF,SAAW,SAAU0xT,EAAUlsY,GACjD,IAAI86C,EAAOttD,SAAS4C,gBAAgB,6BAA8B,QAClEpD,KAAKg/Y,YAAYlxV,EAAM96C,GACvB,IAAIw8B,EAASx8B,EAAQjG,EAAIiG,EAAQgD,MAAQhD,EAAQw8B,OAC7CC,EAASz8B,EAAQhG,EAAIgG,EAAQ+C,OAAS/C,EAAQy8B,OAE9Cq4G,GACAxkJ,GAAM0P,EAAQ1P,GACd03B,GAAMhoB,EAAQqyC,WAAWt4C,EAAIiG,EAAQjG,EACrCkuB,GAAMjoB,EAAQqyC,WAAWr4C,EAAIgG,EAAQhG,EACrCkuB,GAAMloB,EAAQwsC,SAASzyC,EAAIiG,EAAQjG,EACnCouB,GAAMnoB,EAAQwsC,SAASxyC,EAAIgG,EAAQhG,EACnC8wB,OAAU9qB,EAAQ8qB,OAClByG,eAAgBvxB,EAAQ6+B,YAAY3kC,WAAYO,QAAWuF,EAAQvF,QAAQP,WAC3EG,UAAa,UAAY2F,EAAQuO,MAAQ,IAAMiuB,EAAS,IAAMC,EAAS,IACvE9qC,WAAcqO,EAAQwkB,QAAU,UAAY,UAE5CxkB,EAAQuuH,QACRumB,EAAY,MAAI90I,EAAQuuH,OAE5B3tF,GAAgBka,EAAMg6F,GACtBo3P,EAASv9Y,YAAYmsD,IAGzBhgC,EAAYzyB,UAAUqoC,WAAa,SAAUw7W,EAAUlsY,EAASosY,EAAgBL,GAC5E,IAAI79X,EAAS1gB,SAAS4C,gBAAgB,6BAA8B,UACpEpD,KAAKg/Y,YAAY99X,EAAQlO,GACzB,IAAIqsY,EAAWrsY,EAAQuuH,OAAS,GAC3B69Q,IACDC,GAAY,eAEhB,IAAIv3P,GACAxkJ,GAAM0P,EAAQ1P,GACd+qB,GAAMrb,EAAQgO,QACdsN,GAAMtb,EAAQiO,QACd2b,EAAK5pB,EAAQpG,OACbjI,WAAcqO,EAAQwkB,QAAU,UAAY,SAC5C+pG,MAAS89Q,EACT3rR,aAAcqrR,EAAYA,EAAU,cAAgB,IAExD79X,EAAOxc,MAAM4xC,QAAUtjC,EAAQwkB,QAAU,QAAU,OACnDoc,GAAgB1yB,EAAQ4mI,GACxBo3P,EAASv9Y,YAAYuf,IAEzB4M,EAAYzyB,UAAU86B,SAAW,SAAUrZ,EAAK9J,EAAS0/B,EAAWwhJ,EAAYwqN,EAAWK,GACvF,IACIhyY,EAAIV,KAAK+S,MAAuB,GAAhB/S,KAAK4S,SAAiB,GACrCnC,EAAIxZ,GAAgByJ,EAAEG,WAC3B,IAAIi6B,KAEJA,EAAawB,GADbxB,EAAaD,GAAgBl0B,EAAQxW,OAEjCwW,EAAQg/B,QACRhyC,KAAK+7Y,aAAa/oY,EAAS8J,EAAKqqB,EAAYu3W,GAEhD,IAAI9zC,EACA8zC,IAAc1rY,EAAQg/B,SACtB44T,EAAgB8zC,EAAU9xX,eAAe5Z,EAAQ1P,GAAK,0BAElDsnW,EAAcnqW,WAAW6E,YAAYslW,GAG7C,IAAI7tV,EACA2hY,IACA3hY,EAAO2hY,EAAU9xX,eAAe5Z,EAAQ1P,KAEvCyZ,IAAQm3K,IACTn3K,EAAOvc,SAAS4C,gBAAgB,6BAA8B,QAC9D0Z,EAAInb,YAAYob,IAEpB/c,KAAK+hF,WAAWhlE,EAAM/J,EAASm0B,GAC/B,IAAI2gH,GACAxkJ,GAAM0P,EAAQ1P,GAAI+J,UAAa,UAAY2F,EAAQuO,MAAQ,KAAOvO,EAAQjG,EAAIiG,EAAQgD,MAAQhD,EAAQw8B,QAAU,KACzGx8B,EAAQhG,EAAIgG,EAAQ+C,OAAS/C,EAAQy8B,QAAU,cAAsBz8B,EAAS,EAAI,IAAOA,EAAS,EAAI,IAC7GrO,WAAcqO,EAAQwkB,QAAU,UAAY,SAAU/pB,QAAWuF,EAAQvF,QACzEimH,aAAcqrR,GAAwB,IAEtC/rY,EAAQuuH,QACRumB,EAAY,MAAI90I,EAAQuuH,OAE5B3tF,GAAgB72B,EAAM+qI,GACtB9nJ,KAAKg/Y,YAAYjiY,EAAM/J,EAAS0/B,IAEpC5kB,EAAYzyB,UAAU0mF,WAAa,SAAUjlE,EAAK9J,EAASm0B,GACvD,IAAInM,EACAC,EACAC,EACAC,EACApuB,EACAC,EACAvQ,EACAN,EACA2sC,EAAW3B,EACX5Y,EAAI,GACR,IAAKxhB,EAAI,EAAGC,EAAI,EAAG7Q,EAAI,EAAGM,EAASqsC,EAASrsC,OAAQN,EAAIM,IAAUN,EAAG,CACjE,IACIytC,EADMd,EAAS3sC,GAEforC,EAAOqC,EAAQpC,QAmBnB,OAlBI,OAAQoC,IACR5O,EAAK4O,EAAQ5O,IAEb,OAAQ4O,IACR1O,EAAK0O,EAAQ1O,IAEb,OAAQ0O,IACR3O,EAAK2O,EAAQ3O,IAEb,OAAQ2O,IACRzO,EAAKyO,EAAQzO,IAEb,MAAOyO,IACP78B,EAAI68B,EAAQ78B,GAEZ,MAAO68B,IACP58B,EAAI48B,EAAQ58B,GAERu6B,GACJ,IAAK,IACDhZ,EAAIA,EAAI,IAAMxhB,EAAEG,WAAa,IAAMF,EAAEE,WAAa,IAClD,MACJ,IAAK,IACDqhB,EAAIA,EAAI,IAAMxhB,EAAEG,WAAa,IAAMF,EAAEE,WAAa,IAClD,MACJ,IAAK,IACDqhB,EAAIA,EAAI,IAAMyM,EAAG9tB,WAAa,IAAM+tB,EAAG/tB,WAAa,IAAMguB,EAAGhuB,WAAa,IAAMiuB,EAAGjuB,WAAa,IAChGqhB,GAAKxhB,EAAEG,WAAa,IAAMF,EAAEE,WAAa,IACzC,MACJ,IAAK,IACDqhB,EAAIA,EAAI,IAAMyM,EAAG9tB,WAAa,IAAM+tB,EAAG/tB,WAAa,IAAMH,EAAEG,WAAa,IAAMF,EAAEE,WAAa,IAC9F,MACJ,IAAK,IACDqhB,EAAIA,EAAI,IAAMqb,EAAQjC,GAAGz6B,WAAa,IAAM08B,EAAQhC,GAAG16B,WAAa,IAAM08B,EAAQroB,MAAMrU,WAAa,IACrGqhB,GAAKqb,EAAQ/B,SAAS36B,WAAa,IAAM08B,EAAQ9B,MAAQ,IAAM/6B,EAAEG,WAAa,IAAMF,EAAEE,WAAa,IACnG,MACJ,IAAK,IACL,IAAK,IACDqhB,GAAQ,MAIpBzR,EAAItZ,aAAa,IAAK+qB,IAE1BT,EAAYzyB,UAAUikZ,gBAAkB,SAAU7yX,EAAMzZ,GACpDyZ,EAAK/nB,MAAMsoB,UAAYha,EAAQu+B,OAAS,SAAW,SACnD9kB,EAAK/nB,MAAMqoB,WAAa/Z,EAAQ07B,KAAO,OAAS,SAChDjiB,EAAK/nB,MAAMmoB,SAAW7Z,EAAQ6Z,SAAS3f,WAAa,KACpDuf,EAAK/nB,MAAMuoB,WAAaja,EAAQia,YAEpCa,EAAYzyB,UAAU6zF,SAAW,SAAUw0S,EAAQ1wX,EAAS0rY,EAAWK,EAAWrsW,GAC9E,QAAwBv3C,IAApB6X,EAAQonB,QAAuB,CAC/B,IAAIi5U,OAAW,EACX9hW,OAAa,EACbogC,OAAa,EACbz9B,OAAW,EACX7T,OAAQ,EACR2+B,OAAe,EACfnzB,EAAU,EACVI,EAAU,EACV9P,EAAI,EACJswB,OAAO,EAIX,GAHIiyX,IACAjyX,EAAOiyX,EAAU9xX,eAAe5Z,EAAQ1P,GAAK,UAE7CmpB,GACA,GAAIzZ,EAAQo/B,OACR,KAAO3lB,EAAK7P,YACR6P,EAAKnnB,YAAYmnB,EAAK7P,iBAK9B5J,EAAQo/B,QAAS,EACjB3lB,EAAOjsB,SAAS4C,gBAAgB,6BAA8B,QACnC,aAAvB4P,EAAQka,YACRT,EAAKwjB,eAAe,uCAAwC,YAAa,YAE7EyzV,EAAO/hY,YAAY8qB,GAEvB,IAAI+iB,EAASx8B,EAAQjG,EAAIiG,EAAQgD,MAAQhD,EAAQw8B,OAC7CC,EAASz8B,EAAQhG,EAAIgG,EAAQ+C,OAAS/C,EAAQy8B,OAClD,GAAIz8B,EAAQo/B,OAUR,IATApyC,KAAKg/Y,YAAYvyX,EAAMzZ,EAAS0/B,GAChC1yC,KAAKs/Y,gBAAgB7yX,EAAMzZ,GAC3BqgW,EAAW7yW,SAASw0C,eAAehiC,EAAQonB,SAC3C7oB,EAAayB,EAAQzB,WACrBogC,EAAa3+B,EAAQ2+B,WACrBz9B,EAAWlU,KAAKu/Y,cAAcvsY,EAAS2+B,EAAYpgC,GAC/CogC,EAAW37B,MAAQhD,EAAQgD,OAAkC,SAAzBhD,EAAQotB,eAC5C7uB,EAAW,GAAGkb,KAAOqiB,GAAS97B,EAAQonB,QAASpnB,IAE9C7W,EAAI,EAAGA,EAAIoV,EAAW9U,OAAQN,IAC/B6iC,EAAex+B,SAAS4C,gBAAgB,6BAA8B,SACtEiwW,EAAW7yW,SAASw0C,eAAezjC,EAAWpV,GAAGswB,MACjDpsB,EAAQkR,EAAWpV,GACnB0P,EAAUqI,EAASnH,EAAI1M,EAAM0M,EAAI4kC,EAAW5kC,EAC5Cd,EAAUiI,EAASlH,EAAI3M,EAAM0wC,KAAiC,GAApB/9B,EAAgB,SAC1D4gC,GAAgB5U,GAAgBjyB,EAAKlB,EAAQqB,WAAYF,EAAKf,EAAQiB,aACtEuf,EAAKjpB,aAAa,OAAQnD,EAAMosB,MAChCuS,EAAar9B,YAAY0xW,GACzB5mV,EAAK9qB,YAAYq9B,GAGrBhsB,EAAQm/B,gBAA6C,gBAA3Bn/B,EAAQm/B,iBAClCn/B,EAAQm/B,eAAiB5D,GAAkBv7B,EAAQm/B,iBASvDyB,GAAgBnnB,GANZnpB,GAAM0P,EAAQ1P,GAAK,QAASs6B,KAAQ5qB,EAAQwjB,MAAO7xB,WAAcqO,EAAQwkB,QAAU,UAAY,SAC/FgoX,kBAAmBxsY,EAAQm/B,eAAgB9kC,UAAa,UAAY2F,EAAQuO,MAAQ,MACnE,MAAiB,cACZvO,EAAS,EAAI,IAAOA,EAAS,EAAI,IAAKvF,QAAWuF,EAAQvF,QAC/EimH,aAAcqrR,GAAwB,OAKlDjxX,EAAYzyB,UAAUq0F,UAAY,SAAUg0S,EAAQ3mY,EAAK2hZ,GACrD,IACIppN,EADKv4L,EAAIuG,GAETo7Y,IACAppN,EAAQopN,EAAU9xX,eAAe7vB,EAAIuG,GAAK,UAEzCgyL,IACDA,EAAQ90L,SAAS4C,gBAAgB,6BAA8B,SAC/DsgY,EAAO/hY,YAAY2zL,IAEvB,IAAI3lG,EAAW,IAAIC,MACnBD,EAASrwF,IAAMvC,EAAIR,OACnB,IAAIkvD,EAAsB,SAAd1uD,EAAI0uD,MAAmB1uD,EAAI0uD,MAAQ,GAC3Cg0V,EAAW1iZ,EAAIsyD,UACfqwV,EAAcD,EAAStgY,OAAO,GAAGvJ,cAAgB6pY,EAASp+Y,MAAM,GAChEoqD,IACAi0V,GAAe,IAAMj0V,EAAMtsC,OAAO,GAAGvJ,cAAgB61C,EAAMpqD,MAAM,IAQrEuyC,GAAgB0hJ,GALZhyL,GAAMvG,EAAIuG,GAAK,QAASyJ,EAAKhQ,EAAIgQ,EAAEG,WAAYF,EAAKjQ,EAAIiQ,EAAEE,WAAYG,UAAa,UAAYtQ,EAAIwkB,MAAQ,KACpGxkB,EAAIgQ,EAAIhQ,EAAIiZ,MAAQjZ,EAAIyyC,QAAU,KAAOzyC,EAAIiQ,EAAIjQ,EAAIgZ,OAAShZ,EAAI0yC,QAAU,IACnFz5B,MAASjZ,EAAIiZ,MAAM9I,WAAYvI,WAAc5H,EAAIy6B,QAAU,UAAY,SACvEzhB,OAAUhZ,EAAIgZ,OAAO7I,WAAYwrG,oBAAuBgnS,IAG5DpqN,EAAMrlJ,eAAe,+BAAgC,aAAc0/C,EAASrwF,IAAI4N,aAGpF4gB,EAAYzyB,UAAUskZ,gBAAkB,SAAU3+Y,EAAS0iY,EAAQr2X,GAC/D,IAAIwnD,EACJ,GAAI6uU,EAAQ,CACR,IAAIvnY,OAAI,EACR,IAAKA,EAAI,EAAGA,EAAIunY,EAAOnyX,WAAW9U,OAAQN,IAClCunY,EAAOnyX,WAAWpV,GAAGmH,KAAOtC,EAAQsC,GAAK,kBACzCuxD,EAAc6uU,EAAOnyX,WAAWpV,IAI5C,IAAK04D,EAAa,EAKdA,EAActhB,GAAkB,OAH5BjwC,GAAMtC,EAAQsC,GAAK,gBACnBi+H,MAAS,oBAGD5/H,YAAYX,EAAQiO,SAASrN,WAAU,IACnD8hY,EAAO/hY,YAAYkzD,GAEvBA,EAAYrxD,aAAa,QAAS,UAAaxC,EAAQ0rC,WAAiB,OAAI,aAAgB1rC,EAAQ0rC,WAAgB,MAChH,WAAc1rC,EAAQunC,QAAS,EAAI,WAAevnC,EAAQunC,UAAc,yCAChCvnC,EAAQ8rC,gBAAkB,uCAC7B9rC,EAAe,QAAI,UAAY,UAAY,MAGxF8sB,EAAYzyB,UAAUukZ,kBAAoB,SAAU5+Y,EAAS0iY,EAAQ3tX,EAAQC,EAAO0oY,GAChF,IAAI9pV,EACAkkD,EACA4lS,IACA9pV,EAAgB8pV,EAAU9xX,eAAe5rB,EAAQsC,GAAK,mBACtDw1G,EAAW4lS,EAAU9xX,eAAe5rB,EAAQsC,GAAK,UAEhDsxD,KACDA,EAAgBp0D,SAAS4C,gBAAgB,6BAA8B,MACzDI,aAAa,KAAMxC,EAAQsC,GAAK,mBAC9CsxD,EAAcjzD,YAAYX,EAAQiO,SAASrN,WAAU,IACrD8hY,EAAO/hY,YAAYizD,IAEnBkkD,GACAlkD,EAActvD,YAAYwzG,GAE9BlkD,EAAcpxD,aAAa,QAAS,eAAkBxC,EAAe,QAAI,UAAY,UAAY,KACjGhB,KAAK6/Y,kBAAkB7+Y,EAAS4zD,EAAe7+C,EAAQC,GACjC,UAAlBhV,EAAQyqD,OACRzrD,KAAKy5G,aAAaz4G,EAAS4zD,EAAe7+C,EAAQC,EAAO0oY,GAE7D9qW,GAAgBghB,EAAe5zD,EAAQkxC,aAAgBwhF,aAAc1yH,EAAQkxC,kBAEjFpkB,EAAYzyB,UAAUwkZ,kBAAoB,SAAU7+Y,EAAS4zD,EAAe7+C,EAAQC,GAChF,IAAIs+W,EAA6C,IAA9BtzX,EAAQ8+Y,YAAY9pY,MAAchV,EAAQ8+Y,YAAY9pY,MAAQ,EAC7E+pY,EAA+C,IAA/B/+Y,EAAQ8+Y,YAAY/pY,OAAe/U,EAAQ8+Y,YAAY/pY,OAAS,EAChFhJ,EAAI/L,EAAQg/Y,iBAAiBjzY,EAAIiJ,EAAQs+W,EACzCtnX,EAAIhM,EAAQg/Y,iBAAiBhzY,EAAI+I,EAASgqY,EAC9CnrV,EAAcpxD,aAAa,YAAa,UAAYxC,EAAQ8rC,gBAAkB,IAAM9rC,EAAQ6K,QAAU,IAAM7K,EAAQiL,QAChH,gBAAkBjL,EAAQ6K,QAAUkB,EAAIiJ,EAAQhV,EAAQ2rC,MAAM5/B,GAAK,KAAO/L,EAAQiL,QAAUe,EAAI+I,EAAS/U,EAAQ2rC,MAAM3/B,GACvH,WAAcgJ,EAAQs+W,EAAgB,IAAOv+W,EAASgqY,EAAiB,MAW/EjyX,EAAYzyB,UAAUo+G,aAAe,SAAUl5G,EAAMwyF,EAAOh9E,EAAQC,EAAO0oY,GACvE,IAAIpqB,EAAe/zX,EAAKu/Y,YAAY9pY,MAChC+pY,EAAgBx/Y,EAAKu/Y,YAAY/pY,OAGjCkqY,GAFc1/Y,EAAKmsC,WAAW12B,MACfzV,EAAKmsC,WAAW32B,OACnBxV,EAAKyV,OAASA,EAAQs+W,IAClC4rB,EAAa3/Y,EAAKwV,QAAUA,EAASgqY,GACrChzY,EAAIxM,EAAKy/Y,iBAAiBjzY,GAAKxM,EAAKyV,OAASzV,EAAKwV,OAAS,GAAKu+W,EAAe2rB,GAAa,GAC5FjzY,EAAIzM,EAAKy/Y,iBAAiBhzY,GAAKzM,EAAKwV,QAAUxV,EAAKyV,MAAQ,GAAK+pY,EAAgBG,GAAc,GAC9FpnS,EAAW4lS,EAAU9xX,eAAersB,EAAK+C,GAAK,UAClDw1G,EAAWt4G,SAAS4C,gBAAgB,6BAA8B,aACzDI,aAAa,KAAMjD,EAAK+C,GAAK,SACtCyvF,EAAMpxF,YAAYm3G,GAClB,IAAIzlF,EAAOqrX,EAAU9xX,eAAersB,EAAK+C,GAAK,cAC9C+vB,EAAO7yB,SAAS4C,gBAAgB,6BAA8B,QAC9D01G,EAASn3G,YAAY0xB,GAOrB,OAFAugB,GAAgBvgB,GAHZ/vB,GAAM/C,EAAK+C,GAAK,aAAc0S,MAASiqY,EAAU/yY,WAAY6I,OAAUmqY,EAAWhzY,WAClFH,EAAKA,EAAEG,WAAYF,EAAKA,EAAEE,aAG9B6lF,EAAMvvF,aAAa,YAAa,QAAUjD,EAAK+C,GAAK,UAC7CyvF,GAEXjlE,EAAYzyB,UAAUsgZ,eAAiB,SAAU3oY,EAAS8J,EAAK41B,GAC3D,IAAIpmC,EACAyT,EACA67X,EACAiD,EAAe1rW,GAAsBT,GACrC6mE,EAAOslS,EAAajyX,eAAe8lB,EAAY,oBAC9C6mE,IACDA,EAAO5lE,GAAiB,QAAUrwC,GAAIovC,EAAY,qBAClDmsW,EAAa35Y,aAAaq0G,EAAMslS,EAAajiY,aAEjD,IAAIk/X,EACA7jX,EACJ,GAE8B,SAA1BjlB,EAAQi/B,SAASvrC,KAAiB,CAClC,IAAK,IAAIvK,EAAI,EAAGA,EAAI6W,EAAQi/B,SAAS4pW,MAAMp/Y,OAAQN,IAC/CmQ,EAAOA,EAAyCD,KAAKC,IAAIA,EAAK0G,EAAQi/B,SAAS4pW,MAAM1/Y,GAAGwP,QAA3EqH,EAAQi/B,SAAS4pW,MAAM1/Y,GAAGwP,OACvCoU,EAAOA,EAAyC1T,KAAK0T,IAAIA,EAAK/M,EAAQi/B,SAAS4pW,MAAM1/Y,GAAGwP,QAA3EqH,EAAQi/B,SAAS4pW,MAAM1/Y,GAAGwP,OAEb,WAA1BqH,EAAQi/B,SAASvrC,OACjBuxB,EAASjlB,EAAQi/B,UACV3uC,GAAKwZ,EAAIxZ,GAAK,WACrBs4Y,EAAMiD,EAAajyX,eAAe9P,EAAIxZ,GAAK,aAEvCs4Y,EAAIn7Y,WAAW6E,YAAYs2Y,GAE/BA,EAAM57Y,KAAK6vF,qBAAqB53D,GAChCshF,EAAK53G,YAAYi6Y,MAGjBE,EAAS9oY,EAAQi/B,UACV3uC,GAAKwZ,EAAIxZ,GAAK,UACrBs4Y,EAAMiD,EAAajyX,eAAe9P,EAAIxZ,GAAK,YAC3Cs4Y,EAAMiD,EAAajyX,eAAe9P,EAAIxZ,GAAK,aAEvCs4Y,EAAIn7Y,WAAW6E,YAAYs2Y,GAE/BA,EAAM57Y,KAAKkwF,qBAAqB4rT,GAChCviS,EAAK53G,YAAYi6Y,IAErB,IAASz/Y,EAAI,EAAGA,EAAI6W,EAAQi/B,SAAS4pW,MAAMp/Y,OAAQN,IAAK,CACpD,IAAIq9G,EAASxmG,EAAQi/B,SAAS4pW,MAAM1/Y,GAChCgkZ,EAAWpgY,EAAM,GAAKzT,EAAMktG,EAAO7tG,SAAW,EAAIW,GAAOktG,EAAO7tG,OAASW,EACzE8zY,EAAc5/Y,SAAS4C,gBAAgB,6BAA8B,QACzEwwC,GAAgBwsW,GAAez0Y,OAAUw0Y,EAASjzY,WAAYxI,MAAS,cAAgB80G,EAAOhjF,QAC9FolX,EAAIj6Y,YAAYy+Y,IAGxB,OAAOxE,GAEX9tX,EAAYzyB,UAAUw0F,qBAAuB,SAAU53D,GACnD,IAAIooX,EAAiB7/Y,SAAS4C,gBAAgB,6BAA8B,kBAK5E,OADAwwC,GAAgBysW,GAFZ/8Y,GAAM20B,EAAO30B,GAAI03B,GAAM/C,EAAO+C,GAAK,IAAKC,GAAMhD,EAAOgD,GAAK,IAAKC,GAAMjD,EAAOiD,GAAK,IAAKC,GAAMlD,EAAOkD,GAAK,MAGrGklX,GAEXvyX,EAAYzyB,UAAU60F,qBAAuB,SAAU4rT,GACnD,IAAIwE,EAAiB9/Y,SAAS4C,gBAAgB,6BAA8B,kBAK5E,OADAwwC,GAAgB0sW,GAFZh9Y,GAAMw4Y,EAAOx4Y,GAAI+qB,GAAMytX,EAAOztX,GAAK,IAAKC,GAAMwtX,EAAOxtX,GAAK,IAAKsO,EAAKk/W,EAAOl/W,EAAI,IAAKu8E,GAAM2iS,EAAO3iS,GAAK,IAAKC,GAAM0iS,EAAO1iS,GAAK,MAG1HknS,GAEXxyX,EAAYzyB,UAAU2jZ,YAAc,SAAUliY,EAAKpY,EAAOguC,GACnC,SAAfhuC,EAAMk5B,OACNl5B,EAAMk5B,KAAO,eAEI,SAAjBl5B,EAAMo5B,SACNp5B,EAAMo5B,OAAS,eAEnB,IACIF,EADAkU,KAEJ,QAAwB32C,IAApBuJ,EAAMotC,UAAyB,CAE/BA,GADqB,IAAI66C,IACEsvT,eAAev3Y,EAAMotC,WAEpD,GAAIptC,EAAMutC,UAAoC,SAAxBvtC,EAAMutC,SAASvrC,KAAiB,CAElDk3B,EAAO,QADG59B,KAAK27Y,eAAej3Y,EAAOoY,EAAK41B,GACrBpvC,GAAK,SAG1Bs6B,EAAOl5B,EAAMk5B,KAEbl5B,EAAMo5B,QACNhhB,EAAItZ,aAAa,SAAUkB,EAAMo5B,aAEX3iC,IAAtBuJ,EAAMmtC,aACN/0B,EAAItZ,aAAa,eAAgBkB,EAAMmtC,YAAY3kC,YAEnD4kC,GACAh1B,EAAItZ,aAAa,mBAAoBsuC,EAAU5kC,YAE/C0wB,GACA9gB,EAAItZ,aAAa,OAAQo6B,IAKjC9P,EAAYzyB,UAAUkkZ,cAAgB,SAAU9yX,EAAM8zX,EAAWhvY,GAC7D,IAAImlB,EAAS,IAAItJ,GAAKmzX,EAAUvqY,MAAOzE,EAAW9U,OAAUgwB,EAAa,UACrExX,GAAQlI,EAAG,EAAGC,EAAG,GAKjBu1T,EAFuB,GAAb91S,EAAKzW,MAGf0zT,EAFwB,GAAdj9S,EAAK1W,OAmBnB,MAhBuB,SAAnB0W,EAAK4lB,UACLkwR,EAAS,EAEe,WAAnB91S,EAAK4lB,UAENkwR,EADAg+E,EAAUvqY,MAAQyW,EAAKzW,QAAgC,aAAtByW,EAAK2T,cAAqD,SAAtB3T,EAAK2T,cACjE,EAGa,GAAb3T,EAAKzW,MAGM,UAAnByW,EAAK4lB,YACVkwR,EAAuB,EAAb91S,EAAKzW,OAEnBf,EAAIlI,EApBI,EAoBIw1T,GAAUg+E,EAAYA,EAAUxzY,EAAI,GAChDkI,EAAIjI,EApBI,EAoBI08T,EAAShzS,EAAO3gB,OAAS,EAC9Bd,GAEJ6Y,MF1jBX,SAAWirC,GAEPA,EAAeA,EAAwB,QAAI,GAAK,UAEhDA,EAAeA,EAAuB,OAAI,GAAK,SAE/CA,EAAeA,EAAsB,MAAI,GAAK,QAE9CA,EAAeA,EAAwB,QAAI,GAAK,UARpD,CASGA,KAAmBA,QActB,IAAWynV,IACX,SAAWA,GAEPA,EAAgBA,EAAsB,KAAI,GAAK,OAE/CA,EAAgBA,EAAqC,oBAAI,GAAK,sBAE9DA,EAAgBA,EAAmC,kBAAI,GAAK,oBAE5DA,EAAgBA,EAA2B,UAAI,GAAK,YAEpDA,EAAgBA,EAAuC,sBAAI,GAAK,wBAEhEA,EAAgBA,EAAqC,oBAAI,GAAK,sBAE9DA,EAAgBA,EAA6B,YAAI,IAAM,cAEvDA,EAAgBA,EAA8B,aAAI,IAAM,eAExDA,EAAgBA,EAAqB,IAAI,IAAM,MAlBnD,CAmBGA,KAAoBA,QAoBvB,IAAWnqV,IACX,SAAWA,GAEPA,EAAoBA,EAA0B,KAAI,GAAK,OAEvDA,EAAoBA,EAA0C,qBAAI,GAAK,uBAEvEA,EAAoBA,EAA0C,qBAAI,GAAK,uBAEvEA,EAAoBA,EAAqC,gBAAI,GAAK,kBAElEA,EAAoBA,EAAqC,gBAAI,IAAM,kBAEnEA,EAAoBA,EAAqC,gBAAI,IAAM,kBAEnEA,EAAoBA,EAAqC,gBAAI,IAAM,kBAEnEA,EAAoBA,EAAgC,WAAI,KAAO,aAE/DA,EAAoBA,EAAgC,WAAI,KAAO,aAE/DA,EAAoBA,EAAiC,YAAI,KAAO,cAEhEA,EAAoBA,EAAiC,YAAI,MAAQ,cAEjEA,EAAoBA,EAA4B,OAAI,MAAQ,SAE5DA,EAAoBA,EAAgC,WAAI,MAAQ,aAEhEA,EAAoBA,EAA6B,QAAI,MAAQ,UAE7DA,EAAoBA,EAA+B,UAAI,MAAQ,YAE/DA,EAAoBA,EAAyB,IAAI,OAAS,MAhC9D,CAiCGA,KAAwBA,QAuB3B,IAAWrQ,IACX,SAAWA,GAEPA,EAAqBA,EAA2B,KAAI,GAAK,OAEzDA,EAAqBA,EAA6B,OAAI,GAAK,SAE3DA,EAAqBA,EAA6B,OAAI,GAAK,SAE3DA,EAAqBA,EAA2B,KAAI,GAAK,OAEzDA,EAAqBA,EAAoC,cAAI,IAAM,gBAEnEA,EAAqBA,EAAoC,cAAI,IAAM,gBAEnEA,EAAqBA,EAAuC,iBAAI,IAAM,mBAEtEA,EAAqBA,EAAgC,UAAI,KAAO,YAEhEA,EAAqBA,EAA+B,SAAI,KAAO,WAE/DA,EAAqBA,EAAqC,eAAI,KAAO,iBAErEA,EAAqBA,EAAsC,gBAAI,MAAQ,kBAEvEA,EAAqBA,EAAoC,cAAI,MAAQ,gBAErEA,EAAqBA,EAA8B,QAAI,MAAQ,UAE/DA,EAAqBA,EAAqC,eAAI,MAAQ,iBAEtEA,EAAqBA,EAAkC,YAAI,MAAQ,cAEnEA,EAAqBA,EAA+B,SAAI,OAAS,WAEjEA,EAAqBA,EAA8B,QAAI,OAAS,UAlCpE,CAmCGA,KAAyBA,QAS5B,IAAWy6V,IACX,SAAWA,GAEPA,EAAsBA,EAAgC,SAAI,GAAK,WAE/DA,EAAsBA,EAAuC,gBAAI,GAAK,kBAJ1E,CAKGA,KAA0BA,QAkC7B,IAAWv6V,IACX,SAAWA,GAEPA,EAAgBA,EAAsB,KAAI,GAAK,OAE/CA,EAAgBA,EAAwB,OAAI,GAAK,SAEjDA,EAAgBA,EAAsB,KAAI,GAAK,OAE/CA,EAAgBA,EAAwB,OAAI,GAAK,SAEjDA,EAAgBA,EAAwB,OAAI,IAAM,SAElDA,EAAgBA,EAA+B,cAAI,IAAM,gBAEzDA,EAAgBA,EAAwB,OAAI,IAAM,SAElDA,EAAgBA,EAA2B,UAAI,KAAO,YAEtDA,EAAgBA,EAA4B,WAAI,KAAO,aAEvDA,EAAgBA,EAA4B,WAAI,KAAO,aAEvDA,EAAgBA,EAA4B,WAAI,MAAQ,aAExDA,EAAgBA,EAA2B,UAAI,MAAQ,YAEvDA,EAAgBA,EAAyB,QAAI,IAAM,UAEnDA,EAAgBA,EAAiC,gBAAI,MAAQ,kBAE7DA,EAAgBA,EAA4B,WAAI,MAAQ,aAExDA,EAAgBA,EAAiC,gBAAI,OAAS,kBAE9DA,EAAgBA,EAA6B,YAAI,OAAS,cAE1DA,EAAgBA,EAAiC,gBAAI,OAAS,kBAE9DA,EAAgBA,EAA4B,WAAI,QAAU,aAE1DA,EAAgBA,EAAiC,gBAAI,QAAU,kBAE/DA,EAAgBA,EAA6B,YAAI,QAAU,cAE3DA,EAAgBA,EAAwB,OAAI,SAAW,SAEvDA,EAAgBA,EAA6B,YAAI,SAAW,cAE5DA,EAAgBA,EAAyB,QAAI,SAAW,UAExDA,EAAgBA,EAAgC,eAAI,SAAW,iBAE/DA,EAAgBA,EAA0B,SAAI,SAAW,WAEzDA,EAAgBA,EAAyB,QAAI,SAAW,UAtD5D,CAuDGA,KAAoBA,QAgBvB,IAAWoQ,IACX,SAAWA,GAEPA,EAAkBA,EAA0B,OAAI,GAAK,SAErDA,EAAkBA,EAAmC,gBAAI,GAAK,kBAE9DA,EAAkBA,EAAmC,gBAAI,GAAK,kBAE9DA,EAAkBA,EAAmC,gBAAI,IAAM,kBAE/DA,EAAkBA,EAA8B,WAAI,IAAM,aAE1DA,EAAkBA,EAAmC,gBAAI,IAAM,kBAE/DA,EAAkBA,EAA+B,YAAI,KAAO,cAE5DA,EAAkBA,EAAmC,gBAAI,KAAO,kBAEhEA,EAAkBA,EAA8B,WAAI,KAAO,aAE3DA,EAAkBA,EAAmC,gBAAI,MAAQ,kBAEjEA,EAAkBA,EAA+B,YAAI,MAAQ,cAE7DA,EAAkBA,EAA2B,QAAI,MAAQ,UAxB7D,CAyBGA,KAAsBA,QAkBzB,IAAWtN,IACX,SAAWA,GAEPA,EAAmBA,EAAyB,KAAI,GAAK,OAErDA,EAAmBA,EAA6B,SAAI,GAAK,WAEzDA,EAAmBA,EAA6B,SAAI,GAAK,WAEzDA,EAAmBA,EAA4B,QAAI,GAAK,UAExDA,EAAmBA,EAAoC,gBAAI,IAAM,kBAEjEA,EAAmBA,EAA8B,UAAI,IAAM,YAE3DA,EAAmBA,EAAiC,aAAI,IAAM,eAE9DA,EAAmBA,EAAyB,KAAI,IAAM,OAEtDA,EAAmBA,EAAyB,KAAI,KAAO,OAEvDA,EAAmBA,EAAyB,KAAI,KAAO,OAEvDA,EAAmBA,EAAwB,IAAI,KAAO,MAEtDA,EAAmBA,EAA4B,QAAI,KAAO,UAxB9D,CAyBGA,KAAuBA,QAa1B,IAAWX,IACX,SAAWA,GAEPA,EAAaA,EAAmB,KAAI,GAAK,OAEzCA,EAAaA,EAA2B,aAAI,GAAK,eAEjDA,EAAaA,EAA6B,eAAI,GAAK,iBAEnDA,EAAaA,EAAsB,QAAI,GAAK,UAE5CA,EAAaA,EAAuB,SAAI,GAAK,WAE7CA,EAAaA,EAA6B,eAAI,IAAM,iBAEpDA,EAAaA,EAAsB,QAAI,GAAK,UAdhD,CAeGA,KAAiBA,QAMpB,IAAWq4V,IACX,SAAWA,GAEPA,EAAUA,EAAgB,KAAI,GAAK,OAEnCA,EAAUA,EAAkB,OAAI,GAAK,SAJzC,CAKGA,KAAcA,QAMjB,IAAWC,IACX,SAAWA,GAEPA,EAAWA,EAAmB,OAAI,GAAK,SAEvCA,EAAWA,EAAgB,IAAI,GAAK,MAJxC,CAKGA,KAAeA,QAWlB,IAAWC,IACX,SAAWA,GAEPA,EAAaA,EAAmB,KAAI,GAAK,OAEzCA,EAAaA,EAAsB,QAAI,GAAK,UAE5CA,EAAaA,EAAmB,KAAI,GAAK,OAEzCA,EAAaA,EAAkB,IAAI,GAAK,MAExCA,EAAaA,EAAoB,MAAI,GAAK,QAV9C,CAWGA,KAAiBA,QAyEpB,IAAWC,IACX,SAAWA,GAEPA,EAAKA,EAAW,KAAI,MAAQ,OAE5BA,EAAKA,EAAc,QAAI,GAAK,UAE5BA,EAAKA,EAAc,QAAI,GAAK,UAE5BA,EAAKA,EAAc,QAAI,GAAK,UAE5BA,EAAKA,EAAc,QAAI,GAAK,UAE5BA,EAAKA,EAAc,QAAI,GAAK,UAE5BA,EAAKA,EAAc,QAAI,GAAK,UAE5BA,EAAKA,EAAc,QAAI,GAAK,UAE5BA,EAAKA,EAAc,QAAI,GAAK,UAE5BA,EAAKA,EAAc,QAAI,GAAK,UAE5BA,EAAKA,EAAc,QAAI,GAAK,UAE5BA,EAAKA,EAAQ,EAAI,IAAM,IAEvBA,EAAKA,EAAQ,EAAI,IAAM,IAEvBA,EAAKA,EAAQ,EAAI,IAAM,IAEvBA,EAAKA,EAAQ,EAAI,IAAM,IAEvBA,EAAKA,EAAQ,EAAI,IAAM,IAEvBA,EAAKA,EAAQ,EAAI,IAAM,IAEvBA,EAAKA,EAAQ,EAAI,IAAM,IAEvBA,EAAKA,EAAQ,EAAI,IAAM,IAEvBA,EAAKA,EAAQ,EAAI,IAAM,IAEvBA,EAAKA,EAAQ,EAAI,IAAM,IAEvBA,EAAKA,EAAQ,EAAI,IAAM,IAEvBA,EAAKA,EAAQ,EAAI,IAAM,IAEvBA,EAAKA,EAAQ,EAAI,IAAM,IAEvBA,EAAKA,EAAQ,EAAI,IAAM,IAEvBA,EAAKA,EAAQ,EAAI,IAAM,IAEvBA,EAAKA,EAAQ,EAAI,IAAM,IAEvBA,EAAKA,EAAQ,EAAI,IAAM,IAEvBA,EAAKA,EAAQ,EAAI,IAAM,IAEvBA,EAAKA,EAAQ,EAAI,IAAM,IAEvBA,EAAKA,EAAQ,EAAI,IAAM,IAEvBA,EAAKA,EAAQ,EAAI,IAAM,IAEvBA,EAAKA,EAAQ,EAAI,IAAM,IAEvBA,EAAKA,EAAQ,EAAI,IAAM,IAEvBA,EAAKA,EAAQ,EAAI,IAAM,IAEvBA,EAAKA,EAAQ,EAAI,IAAM,IAEvBA,EAAKA,EAAQ,EAAI,IAAM,IAEvBA,EAAKA,EAAW,KAAI,IAAM,OAE1BA,EAAKA,EAAS,GAAI,IAAM,KAExBA,EAAKA,EAAY,MAAI,IAAM,QAE3BA,EAAKA,EAAW,KAAI,IAAM,OAE1BA,EAAKA,EAAa,OAAI,IAAM,SAE5BA,EAAKA,EAAY,MAAI,IAAM,QAE3BA,EAAKA,EAAa,OAAI,IAAM,SAE5BA,EAAKA,EAAe,SAAI,IAAM,WAE9BA,EAAKA,EAAU,IAAI,IAAM,MAEzBA,EAAKA,EAAW,KAAI,IAAM,OAE1BA,EAAKA,EAAa,OAAI,IAAM,SAE5BA,EAAKA,EAAU,IAAI,GAAK,MAExBA,EAAKA,EAAY,MAAI,IAAM,QAE3BA,EAAKA,EAAgB,UAAI,GAAK,YAE9BA,EAAKA,EAAS,GAAI,KAAO,KAEzBA,EAAKA,EAAS,GAAI,KAAO,KAEzBA,EAAKA,EAAS,GAAI,KAAO,KAEzBA,EAAKA,EAAS,GAAI,KAAO,KAEzBA,EAAKA,EAAS,GAAI,KAAO,KAEzBA,EAAKA,EAAS,GAAI,KAAO,KAEzBA,EAAKA,EAAS,GAAI,KAAO,KAEzBA,EAAKA,EAAS,GAAI,KAAO,KAEzBA,EAAKA,EAAS,GAAI,KAAO,KAEzBA,EAAKA,EAAU,IAAI,KAAO,MAE1BA,EAAKA,EAAU,IAAI,KAAO,MAE1BA,EAAKA,EAAU,IAAI,KAAO,MAE1BA,EAAKA,EAAW,KAAI,IAAM,OAE1BA,EAAKA,EAAW,KAAI,KAAO,OAE3BA,EAAKA,EAAY,MAAI,KAAO,QApIhC,CAqIGA,KAASA,QAKZ,IAAWv3V,IACX,SAAWA,GACPA,EAAcA,EAAsB,OAAI,GAAK,SAC7CA,EAAcA,EAA4B,aAAI,GAAK,eACnDA,EAAcA,EAA0B,WAAI,GAAK,aACjDA,EAAcA,EAAwB,SAAI,IAAM,WAChDA,EAAcA,EAAwB,SAAI,IAAM,WAChDA,EAAcA,EAAqB,MAAI,IAAM,QAC7CA,EAAcA,EAAqB,MAAI,KAAO,QAPlD,CAQGA,KAAkBA,QAErB,IAAW7N,IACX,SAAWA,GACPA,EAAaA,EAAmB,KAAI,GAAK,OACzCA,EAAaA,EAAkB,IAAI,GAAK,MACxCA,EAAaA,EAAkB,IAAI,GAAK,MACxCA,EAAaA,EAAoB,MAAI,GAAK,QAC1CA,EAAaA,EAAmB,KAAI,GAAK,OACzCA,EAAaA,EAAmB,KAAI,GAAK,OAN7C,CAOGA,KAAiBA,QAKpB,IAAWqlW,IACX,SAAWA,GACPA,EAAaA,EAA+B,iBAAI,GAAK,mBACrDA,EAAaA,EAA2B,aAAI,GAAK,eACjDA,EAAaA,EAA6B,eAAI,GAAK,iBACnDA,EAAaA,EAA6B,eAAI,GAAK,iBACnDA,EAAaA,EAA8B,gBAAI,GAAK,kBACpDA,EAAaA,EAAyB,WAAI,GAAK,aAC/CA,EAAaA,EAAmB,KAAI,GAAK,OACzCA,EAAaA,EAAgC,kBAAI,GAAK,oBACtDA,EAAaA,EAAgC,kBAAI,GAAK,oBACtDA,EAAaA,EAA+B,iBAAI,GAAK,mBACrDA,EAAaA,EAAgC,kBAAI,IAAM,oBACvDA,EAAaA,EAAoB,MAAI,IAAM,QAC3CA,EAAaA,EAA0B,YAAI,IAAM,cACjDA,EAAaA,EAA2B,aAAI,IAAM,eAClDA,EAAaA,EAAwB,UAAI,IAAM,YAC/CA,EAAaA,EAAwB,UAAI,IAAM,YAC/CA,EAAaA,EAAuB,SAAI,IAAM,WAC9CA,EAAaA,EAAuB,SAAI,IAAM,WAC9CA,EAAaA,EAAqC,uBAAI,IAAM,yBAC5DA,EAAaA,EAA4B,cAAI,IAAM,gBApBvD,CAqBGA,KAAiBA,QAKpB,IAAWr3V,IACX,SAAWA,GAEPA,EAAgBA,EAAsB,KAAI,GAAK,OAE/CA,EAAgBA,EAAsB,KAAI,GAAK,OAE/CA,EAAgBA,EAAsB,KAAI,GAAK,OANnD,CAOGA,KAAoBA,QAKvB,IGjsBIqK,GAAgC,WAChC,SAASA,IAIL9zD,KAAK2sC,OAAU5/B,EAAG,GAAKC,EAAG,IAI1BhN,KAAK+gZ,QAAS,EAId/gZ,KAAKw3B,SAAU,EAIfx3B,KAAK6L,QAAU,EAIf7L,KAAKiM,QAAU,EAIfjM,KAAKooC,aAAe,EAIpBpoC,KAAKszD,eAAYn4D,EAIjB6E,KAAKwzD,cAAWr4D,EAIhB6E,KAAKo+B,cAAWjjC,EAIhB6E,KAAKuzD,eAAYp4D,EAIjB6E,KAAKgW,WAAQ7a,EAIb6E,KAAK+V,YAAS5a,EAId6E,KAAK6sC,YAAc,EAInB7sC,KAAKy8B,QAAWjwB,KAAM,EAAGC,MAAO,EAAGC,IAAK,EAAGC,OAAQ,GAInD3M,KAAKyzD,oBAAsB,OAI3BzzD,KAAK0zD,kBAAoB,OAIzB1zD,KAAKuuD,aAAe,QAIpBvuD,KAAKqN,UAAYqzY,GAAUM,KAAON,GAAUO,OAI5CjhZ,KAAK0E,OAAUk5B,KAAM,QAASgU,YAAa,QAASnkC,QAAS,EAAGokC,YAAa,GAI7E7xC,KAAK2vC,YAAc,IAAIviB,GAIvBptB,KAAK0sC,WAAa,IAAItf,GAItBptB,KAAK8sC,gBAAkB,EACvB9sC,KAAKkhZ,aAAc,EAInBlhZ,KAAK02B,OAAS,IAAIR,GAAK,EAAG,EAAG,EAAG,GAIhCl2B,KAAKuoC,QAAU,IAAIrS,GAAK,EAAG,EAAG,EAAG,GAIjCl2B,KAAKgyC,OAAS,KAIdhyC,KAAKkyC,YAAc,GAInBlyC,KAAKmhZ,YAAa,EAClBnhZ,KAAKohZ,eAAgB,EAErBphZ,KAAKkU,cAAW/Y,EAChB6E,KAAKqhZ,cAAWlmZ,EAChB6E,KAAKshZ,OAAQ,EACbthZ,KAAKuhZ,oBAAiBpmZ,EACtB6E,KAAKsD,GAAKipC,KAsGd,OA9FAunB,EAAez4D,UAAUmmZ,6BAA+B,SAAUz0Y,EAAGC,EAAG+wB,GACpE/9B,KAAKqhZ,SAAWtjX,EAChB/9B,KAAKkU,UAAanH,EAAGA,EAAGC,EAAGA,IAM/B8mD,EAAez4D,UAAUomZ,oBAAsB,SAAU30X,GACrD,QAAsB3xB,IAAlB6E,KAAKkU,SACL,MAAsB,aAAlBlU,KAAKqhZ,SACErhZ,KAAKkU,UAIRnH,EAAG/M,KAAKkU,SAASnH,EAAI+f,EAAK9W,MAAOhJ,EAAGhN,KAAKkU,SAASlH,EAAI8f,EAAK/W,SAM3EzX,OAAOuJ,eAAeisD,EAAez4D,UAAW,eAC5CqM,IAAK,WACD,OAAO1H,KAAKuhZ,gBAAkBvhZ,KAAK02B,QAEvCrvB,IAAK,SAAUqvB,GACX12B,KAAKuhZ,eAAiB7qX,GAE1B/uB,YAAY,EACZC,cAAc,IAMlBksD,EAAez4D,UAAUugS,QAAU,SAAUjmQ,GACzC,IAAI3f,OAAuB7a,IAAf6E,KAAKgW,MAAsBhW,KAAKgW,OAAS2f,EAAc3f,OAAS,GAAKhW,KAAKy8B,OAAOjwB,KAAOxM,KAAKy8B,OAAOhwB,MAC5GsJ,OAAyB5a,IAAhB6E,KAAK+V,OAAuB/V,KAAK+V,QAAU4f,EAAc5f,QAAU,GAAK/V,KAAKy8B,OAAO/vB,IAAM1M,KAAKy8B,OAAO9vB,OAGnH,OAFA3M,KAAK2vC,YAAc,IAAIviB,GAAKpX,EAAOD,GACnC/V,KAAK2vC,YAAc3vC,KAAK0hZ,oBAAoB1hZ,KAAK2vC,YAAaha,GACvD31B,KAAK2vC,aAMhBmkB,EAAez4D,UAAUsmZ,QAAU,SAAUhyW,GAGzC,OAFA3vC,KAAK0sC,WAAaiD,EAClB3vC,KAAK4hZ,eACE5hZ,KAAK0sC,YAKhBonB,EAAez4D,UAAUumZ,aAAe,WACpC5hZ,KAAK02B,OAAS+V,GAAUzsC,OAO5B8zD,EAAez4D,UAAUqmZ,oBAAsB,SAAU/xW,EAAaha,GA8BlE,OA5BI31B,KAAKohZ,eAAkBphZ,KAAKgW,OAAUhW,KAAKwzD,UAAaxzD,KAAKo+B,WAC7DuR,EAAY35B,MAAQ,KAEpBhW,KAAKohZ,eAAkBphZ,KAAK+V,QAAW/V,KAAKszD,WAActzD,KAAKuzD,YAC/D5jB,EAAY55B,OAAS,UAEL5a,IAAhBw0C,QAA4Cx0C,IAAf6E,KAAKgW,YAClB7a,IAAhB6E,KAAK+V,WACL45B,EAAcA,GAAe,IAAIviB,IACrBpX,WAAuB7a,IAAf6E,KAAKgW,OAAuB2f,EAAc3f,OAAS,GACjEhW,KAAKy8B,OAAOjwB,KAAOxM,KAAKy8B,OAAOhwB,MAAQzM,KAAKgW,MAClD25B,EAAY55B,YAAyB5a,IAAhB6E,KAAK+V,QAAwB4f,EAAc5f,QAAU,GACpE/V,KAAKy8B,OAAO/vB,IAAM1M,KAAKy8B,OAAO9vB,OAAS3M,KAAK+V,aAGhC5a,IAAlB6E,KAAKwzD,WACL7jB,EAAY35B,MAAQ3J,KAAKC,IAAIqjC,EAAY35B,MAAOhW,KAAKwzD,gBAElCr4D,IAAnB6E,KAAKszD,YACL3jB,EAAY55B,OAAS1J,KAAKC,IAAIqjC,EAAY55B,OAAQ/V,KAAKszD,iBAGrCn4D,IAAlB6E,KAAKo+B,WACLuR,EAAY35B,MAAQ3J,KAAK0T,IAAI4vB,EAAY35B,MAAOhW,KAAKo+B,gBAElCjjC,IAAnB6E,KAAKuzD,YACL5jB,EAAY55B,OAAS1J,KAAK0T,IAAI4vB,EAAY55B,OAAQ/V,KAAKuzD,YAEpD5jB,GAEJmkB,KClOPw2B,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAkBxCjpC,GAA6B,SAAUypC,GAKvC,SAASzpC,IACL,IAAI3hD,EAAQorF,EAAO7pF,KAAKtB,OAASA,KAejC,OAXAD,EAAMmwC,SAAW,GAIjBnwC,EAAMkpC,eAAgB,EAItBlpC,EAAM8hZ,aAAe,GAErB9hZ,EAAMqwC,eAAiB,IAAIla,GACpBn2B,EAiGX,OArHAuqF,GAAU5oC,EAAaypC,GAsBvB7sF,OAAOuJ,eAAe65C,EAAYrmD,UAAW,QACzCqM,IAAK,WACD,OAAO1H,KAAKkwC,UAEhB7oC,IAAK,SAAUrK,GACPgD,KAAKkwC,WAAalzC,IAClBgD,KAAKkwC,SAAWlzC,EAChBgD,KAAK+gZ,QAAS,IAGtBp5Y,YAAY,EACZC,cAAc,IAGlB85C,EAAYrmD,UAAU4kD,UAAY,WAC9B,IAAIlgD,EAAQC,KAQZ,OAPKA,KAAK8hZ,aACN9hZ,KAAK8hZ,WAAa3hZ,WAAW,WACzBJ,EAAM43B,OAAS,KACf53B,EAAM+hZ,WAAa,MACpB,MAEP9hZ,KAAK23B,OAAS33B,KAAK23B,QAAUiY,GAAkB5vC,MxVjCvD,SAAgCgB,EAAS22B,GAErC,IAAK,IADDoqX,KACK3jZ,EAAK,EAAGgjC,EAAWzJ,EAAQv5B,EAAKgjC,EAAS3kC,OAAQ2B,IAAM,CAC5D,IAAI01B,EAAQsN,EAAShjC,GACjBm2V,GACAxnV,EAAG/L,EAAQ6K,QAAU7K,EAAQ0rC,WAAW12B,MAAQhV,EAAQ2rC,MAAM5/B,EAAI+mB,EAAM/mB,EACxEC,EAAGhM,EAAQiL,QAAUjL,EAAQ0rC,WAAW32B,OAAS/U,EAAQ2rC,MAAM3/B,EAAI8mB,EAAM9mB,GAEzE49B,OAAS,EACTrpB,EAAQvgB,EAAQ6rC,YAAc7rC,EAAQ8rC,gBACtCvrB,GAEAiqB,GADAZ,EAASL,KACYhpB,EAAOvgB,EAAQ6K,QAAS7K,EAAQiL,SAErD2+B,IACA2pT,EAAM5pT,GAAuBC,EAAQ2pT,IAEzCwtD,EAAcv9Y,KAAK+vV,GAEvB,OAAOwtD,EwVeIC,CAAgBhiZ,KAAMA,KAAK23B,SAMtC+pB,EAAYrmD,UAAUugS,QAAU,SAAUjmQ,GAmBtC,OAjBI31B,KAAKmhZ,iBAA6BhmZ,IAAf6E,KAAKgW,YAAuC7a,IAAhB6E,KAAK+V,OACpD/V,KAAKowC,eAAiB,IAAIla,GAAKl2B,KAAK6L,QAAU7L,KAAKgW,MAAQhW,KAAK2sC,MAAM5/B,EAAG/M,KAAKiM,QAAUjM,KAAK+V,OAAS/V,KAAK2sC,MAAM3/B,EAAGhN,KAAKgW,MAAOhW,KAAK+V,QAEhI/V,KAAK+gZ,SAAW/gZ,KAAKipC,oBAAiC9tC,IAAf6E,KAAKgW,YAAuC7a,IAAhB6E,KAAK+V,UAE7E/V,KAAKowC,eAAiBI,GAAYxwC,KAAKxD,KAAOwD,KAAKxD,KAAO,UAE3CrB,IAAf6E,KAAKgW,MACLhW,KAAK2vC,YAAc,IAAIviB,GAAKptB,KAAKowC,eAAep6B,MAAOhW,KAAK+V,QAAU/V,KAAKowC,eAAer6B,aAErE5a,IAAhB6E,KAAK+V,OACV/V,KAAK2vC,YAAc,IAAIviB,GAAKptB,KAAKgW,OAAShW,KAAKowC,eAAep6B,MAAOhW,KAAKowC,eAAer6B,QAGzF/V,KAAK2vC,YAAc,IAAIviB,GAAKptB,KAAKgW,MAAOhW,KAAK+V,QAEjD/V,KAAK2vC,YAAc3vC,KAAK0hZ,oBAAoB1hZ,KAAK2vC,YAAaha,GACvD31B,KAAK2vC,aAMhB+R,EAAYrmD,UAAUsmZ,QAAU,SAAUhyW,GAWtC,OAVI3vC,KAAK+gZ,QAAU/gZ,KAAK0sC,WAAW12B,QAAU25B,EAAY35B,OAAShW,KAAK0sC,WAAW32B,SAAW45B,EAAY55B,UACrG/V,KAAK+gZ,QAAS,EACd/gZ,KAAK6hZ,aAAe7hZ,KAAKmgB,WAAWngB,KAAKxD,KAAMwD,KAAKowC,eAAgBT,GAC/D3vC,KAAKmhZ,aACNnhZ,KAAK23B,OAAS,OAGtB33B,KAAK0sC,WAAa1sC,KAAK2vC,YACvB3vC,KAAK4hZ,eACL5hZ,KAAK+gZ,QAAS,EACP/gZ,KAAK0sC,YAQhBgV,EAAYrmD,UAAU8kB,WAAa,SAAU+vB,EAAUxZ,EAAQgW,GAC3D,IAAI7C,GAAU,EACVsG,EAAgB,GAChBrE,GAAUpV,EAAO3pB,EACjBg/B,GAAUrV,EAAO1pB,EACjBo6B,KAeJ,OAdIsF,EAAW12B,QAAU0gB,EAAO1gB,OAAS02B,EAAW32B,SAAW2gB,EAAO3gB,SAClE+1B,EAASY,EAAW12B,MAAQshB,OAAOZ,EAAO1gB,MAAQ0gB,EAAO1gB,MAAQ,GACjE+1B,EAASW,EAAW32B,OAASuhB,OAAOZ,EAAO3gB,OAAS2gB,EAAO3gB,OAAS,GACpE8zB,GAAU,GAEdzC,EAAkBF,GAAgBgJ,GAClC9I,EAAkB6C,GAAqB7C,GAEnC+I,GADCtG,GAAW7pC,KAAK+gZ,SAAW/gZ,KAAKipC,cACjBA,GAAc7B,EAAiB0E,EAAQC,EAAQlC,EAASnT,EAAO3pB,EAAG2pB,EAAO1pB,EAAG,EAAG,GAG/E28B,GAAcvC,GAElCyC,GAAU,EACHsG,GAEJuR,GACToS,ICzIEw2B,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAgBxC12B,GAA8B,SAAUk3B,GAKxC,SAASl3B,IACL,IAAIl0D,EAAQorF,EAAO7pF,KAAKtB,OAASA,KAiBjC,OAbAD,EAAMkiZ,YAAc,GAIpBliZ,EAAMq0D,WAAa,OAInBr0D,EAAMm0D,WAAa,OAInBn0D,EAAMmiZ,QAAU,UACTniZ,EAyCX,OA/DAuqF,GAAUr2B,EAAck3B,GAwBxB7sF,OAAOuJ,eAAeosD,EAAa54D,UAAW,UAC1CqM,IAAK,WACD,OAAO1H,KAAKiiZ,aAEhB56Y,IAAK,SAAUrK,GACXgD,KAAKiiZ,YAAcjlZ,EACnBgD,KAAK+gZ,QAAS,GAElBp5Y,YAAY,EACZC,cAAc,IAMlBqsD,EAAa54D,UAAUugS,QAAU,SAAUjmQ,GAavC,OAZI31B,KAAK+gZ,SAA4B,YAAjB/gZ,KAAKkiZ,cAAwC/mZ,IAAf6E,KAAKgW,YAAuC7a,IAAhB6E,KAAK+V,UAC/E/V,KAAK8/Y,YzV6MjB,SAA6BvjZ,EAAQujZ,GACjC,IAAIrxW,EAAiB,iBACrB5yC,OAAO4yC,GAAgB/pC,MAAMC,WAAa,UAC1C,IAAIowC,EAAel5C,OAAO4yC,GAAgBr0B,SAAS,GACnD26B,EAAavxC,aAAa,MAAOjH,GACjC,IAAIm6B,EAASqe,EAAanpC,wBACtBoK,EAAQ0gB,EAAO1gB,MACfD,EAAS2gB,EAAO3gB,OAGpB,OAFA+pY,EAAc,IAAI1yX,GAAKpX,EAAOD,GAC9Bla,OAAO4yC,GAAgB/pC,MAAMC,WAAa,SACnCm7Y,EyVvNoBqC,CAAaniZ,KAAKzD,OAAQyD,KAAK8/Y,aAClD9/Y,KAAK+gZ,QAAS,QAEC5lZ,IAAf6E,KAAKgW,YAAuC7a,IAAhB6E,KAAK+V,QACjC/V,KAAK2vC,YAAc,IAAIviB,GAAKptB,KAAKgW,MAAOhW,KAAK+V,QAC7C/V,KAAK8/Y,YAAc9/Y,KAAK2vC,aAGxB3vC,KAAK2vC,YAAc3vC,KAAK8/Y,YAE5B9/Y,KAAK2vC,YAAc3vC,KAAK0hZ,oBAAoB1hZ,KAAK2vC,YAAaha,GACvD31B,KAAK2vC,aAMhBskB,EAAa54D,UAAUsmZ,QAAU,SAAUhyW,GAGvC,OAFA3vC,KAAK0sC,WAAa,IAAItf,GAAKptB,KAAK2vC,YAAY35B,MAAOhW,KAAK2vC,YAAY55B,QACpE/V,KAAK4hZ,eACE5hZ,KAAK0sC,YAETunB,GACTH,ICjFEw2B,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAgBxC73B,GAA6B,SAAUq4B,GAKvC,SAASr4B,IACL,IAAI/yD,EAAQorF,EAAO7pF,KAAKtB,OAASA,KAqBjC,OAjBAD,EAAM8b,YAAc,GACpB9b,EAAMmzD,WACF18B,MAAO,QAGXz2B,EAAMqyC,QAAS,EACfryC,EAAMqiZ,aAINriZ,EAAM2E,OACF8xB,MAAO,QAASoH,KAAM,QAASgU,YAAa,QAC5CC,YAAa,EAAG5kB,WAAY,QAASJ,SAAU,GAAIK,WAAY,gBAC/DskB,aAAc,mBAAoBa,UAAW,SAAUd,QAAQ,EAAO7C,MAAM,EAC5EyD,eAAgB,OAAQJ,gBAAiB,GAAItkC,QAAS,EAAGwkC,SAAU,KACnE7R,aAAc,QAEXrgC,EA0EX,OApGAuqF,GAAUx3B,EAAaq4B,GA4BvB7sF,OAAOuJ,eAAeirD,EAAYz3D,UAAW,WACzCqM,IAAK,WACD,OAAO1H,KAAK6b,aAEhBxU,IAAK,SAAUrK,GACPgD,KAAK6b,cAAgB7e,IACrBgD,KAAK6b,YAAc7e,EACnBgD,KAAK+gZ,QAAS,EACd/gZ,KAAKoyC,QAAS,IAGtBzqC,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeirD,EAAYz3D,UAAW,cACzCqM,IAAK,WACD,OAAO1H,KAAKoiZ,WAEhB/6Y,IAAK,SAAUrK,GACXgD,KAAKoiZ,UAAYplZ,GAErB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeirD,EAAYz3D,UAAW,cACzCqM,IAAK,WACD,OAAO1H,KAAKqiZ,gBAEhBh7Y,IAAK,SAAUrK,GACXgD,KAAKqiZ,eAAiBrlZ,GAE1B2K,YAAY,EACZC,cAAc,IAGlBkrD,EAAYz3D,UAAU03D,mBAAqB,WACvC/yD,KAAK+gZ,QAAS,GAMlBjuV,EAAYz3D,UAAUugS,QAAU,SAAUjmQ,GACtC,IAAI7I,EAcJ,OAZIA,EADA9sB,KAAK+gZ,OACEv0X,GAAYxsB,KAAMA,KAAK0E,MAAO1E,KAAKo6B,QAASp6B,KAAKgW,OAGjDhW,KAAK2vC,iBAEGx0C,IAAf6E,KAAKgW,YAAuC7a,IAAhB6E,KAAK+V,OACjC/V,KAAK2vC,YAAc,IAAIviB,GAAKN,EAAK9W,MAAO8W,EAAK/W,QAG7C/V,KAAK2vC,YAAc,IAAIviB,GAAKptB,KAAKgW,MAAOhW,KAAK+V,QAEjD/V,KAAK2vC,YAAc3vC,KAAK0hZ,oBAAoB1hZ,KAAK2vC,YAAaha,GACvD31B,KAAK2vC,aAMhBmjB,EAAYz3D,UAAUsmZ,QAAU,SAAUhyW,GAOtC,OANIA,EAAY35B,QAAUhW,KAAK0sC,WAAW12B,OAAS25B,EAAY55B,SAAW/V,KAAK0sC,WAAW32B,QAAU/V,KAAK+gZ,UACrG/gZ,KAAKoyC,QAAS,GAElBpyC,KAAK0sC,WAAaiD,EAClB3vC,KAAK4hZ,eACL5hZ,KAAK+gZ,QAAS,EACP/gZ,KAAK0sC,YAETomB,GACTgB,ICtHEw2B,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAG5D0lX,GAAkB,SAAUvlZ,GAC5B,OAAQA,EAAI2J,MACR,IAAK,SACD,OAAO67Y,GACX,IAAK,SACD,OAAOC,GACX,QACI,OAAOD,KAMfl+E,GAA2B,WAO3B,OANA,SAAmB73T,EAAMC,EAAOC,EAAKC,GACjC3M,KAAKwM,KAAOA,EACZxM,KAAKyM,MAAQA,EACbzM,KAAK0M,IAAMA,EACX1M,KAAK2M,OAASA,MAQlBmwT,GAAwB,SAAU3xO,GAElC,SAAS2xO,IACL,OAAkB,OAAX3xO,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAc/D,OAhBAsqF,GAAUwyO,EAAQ3xO,GAIlBN,IACI3jF,EAAS,IACV41T,EAAOzhU,UAAW,YAAQ,GAC7BwvF,IACI3jF,EAAS,IACV41T,EAAOzhU,UAAW,aAAS,GAC9BwvF,IACI3jF,EAAS,IACV41T,EAAOzhU,UAAW,WAAO,GAC5BwvF,IACI3jF,EAAS,IACV41T,EAAOzhU,UAAW,cAAU,GACxByhU,GACT99P,IAKE/X,GAAwB,SAAUkkC,GAElC,SAASlkC,IACL,OAAkB,OAAXkkC,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAc/D,OAhBAsqF,GAAUrjC,EAAQkkC,GAIlBN,IACI3jF,EAAS,KACV+/C,EAAO5rD,UAAW,aAAS,GAC9BwvF,IACI3jF,EAAS,IACV+/C,EAAO5rD,UAAW,gBAAY,GACjCwvF,IACI3jF,EAAS,KACV+/C,EAAO5rD,UAAW,eAAW,GAChCwvF,IACI3jF,EAAS,cACV+/C,EAAO5rD,UAAW,aAAS,GACvB4rD,GACT+X,IAKEyjV,GAAsB,SAAUt3T,GAEhC,SAASs3T,IACL,OAAkB,OAAXt3T,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbAsqF,GAAUm4T,EAAMt3T,GAIhBN,IACI3jF,EAAS,KACVu7Y,EAAKpnZ,UAAW,aAAS,GAC5BwvF,IACI3jF,EAAS,IACVu7Y,EAAKpnZ,UAAW,cAAU,GAC7BwvF,IACI3jF,EAAS,IACVu7Y,EAAKpnZ,UAAW,eAAW,GACvBonZ,GACTzjV,IAKE0jV,GAA0B,SAAUv3T,GAEpC,SAASu3T,IACL,OAAkB,OAAXv3T,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbAsqF,GAAUo4T,EAAUv3T,GAIpBN,IACIxiF,KAAeo6Y,KAChBC,EAASrnZ,UAAW,aAAS,GAChCwvF,IACI3jF,EAAS,SACVw7Y,EAASrnZ,UAAW,YAAQ,GAC/BwvF,IACI3jF,EAAS,KACVw7Y,EAASrnZ,UAAW,UAAM,GACtBqnZ,GACT1jV,IAKEujV,GAAgC,SAAUp3T,GAE1C,SAASo3T,IACL,OAAkB,OAAXp3T,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAc/D,OAhBAsqF,GAAUi4T,EAAgBp3T,GAI1BN,IACI3jF,EAAS,IACVq7Y,EAAelnZ,UAAW,UAAM,GACnCwvF,IACI3jF,EAAS,IACVq7Y,EAAelnZ,UAAW,UAAM,GACnCwvF,IACI3jF,EAAS,IACVq7Y,EAAelnZ,UAAW,UAAM,GACnCwvF,IACI3jF,EAAS,IACVq7Y,EAAelnZ,UAAW,UAAM,GAC5BknZ,GACTG,IAKEF,GAAgC,SAAUr3T,GAE1C,SAASq3T,IACL,OAAkB,OAAXr3T,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAiB/D,OAnBAsqF,GAAUk4T,EAAgBr3T,GAI1BN,IACI3jF,EAAS,IACVs7Y,EAAennZ,UAAW,UAAM,GACnCwvF,IACI3jF,EAAS,IACVs7Y,EAAennZ,UAAW,UAAM,GACnCwvF,IACI3jF,EAAS,IACVs7Y,EAAennZ,UAAW,UAAM,GACnCwvF,IACI3jF,EAAS,IACVs7Y,EAAennZ,UAAW,UAAM,GACnCwvF,IACI3jF,EAAS,KACVs7Y,EAAennZ,UAAW,SAAK,GAC3BmnZ,GACTE,IAKEC,GAA4B,SAAUx3T,GAEtC,SAASw3T,IACL,OAAkB,OAAXx3T,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAoB/D,OAtBAsqF,GAAUq4T,EAAYx3T,GAItBN,IACI3jF,EAAS,UACVy7Y,EAAWtnZ,UAAW,YAAQ,GACjCwvF,IACI3jF,EAAS,UACVy7Y,EAAWtnZ,UAAW,mBAAe,GACxCwvF,IACI3jF,EAAS,KACVy7Y,EAAWtnZ,UAAW,uBAAmB,GAC5CwvF,IACI3jF,EAAS,IACVy7Y,EAAWtnZ,UAAW,mBAAe,GACxCwvF,IACI3jF,EAAS,IACVy7Y,EAAWtnZ,UAAW,eAAW,GACpCwvF,IACI3iF,EAAeo6Y,KAChBK,EAAWtnZ,UAAW,gBAAY,GAC9BsnZ,GACT3jV,IAKEnM,GAA6B,SAAUs4B,GAEvC,SAASt4B,IACL,OAAkB,OAAXs4B,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAK/D,OAPAsqF,GAAUz3B,EAAas4B,GAIvBN,IACI3jF,EAAS,gBACV2rD,EAAYx3D,UAAW,YAAQ,GAC3Bw3D,GACT8vV,IAKE3gH,GAA2B,SAAU72M,GAErC,SAAS62M,IACL,OAAkB,OAAX72M,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAgC/D,OAlCAsqF,GAAU03M,EAAW72M,GAIrBN,IACI3jF,EAAS,UACV86R,EAAU3mS,UAAW,aAAS,GACjCwvF,IACI3jF,EAAS,UACV86R,EAAU3mS,UAAW,kBAAc,GACtCwvF,IACI3jF,EAAS,KACV86R,EAAU3mS,UAAW,gBAAY,GACpCwvF,IACI3jF,GAAS,IACV86R,EAAU3mS,UAAW,cAAU,GAClCwvF,IACI3jF,GAAS,IACV86R,EAAU3mS,UAAW,YAAQ,GAChCwvF,IACI3jF,EAAS,kBACV86R,EAAU3mS,UAAW,kBAAc,GACtCwvF,IACI3jF,EAAS,qBACV86R,EAAU3mS,UAAW,oBAAgB,GACxCwvF,IACI3jF,EAAS,WACV86R,EAAU3mS,UAAW,iBAAa,GACrCwvF,IACI3jF,EAAS,SACV86R,EAAU3mS,UAAW,sBAAkB,GAC1CwvF,IACI3jF,EAAS,SACV86R,EAAU3mS,UAAW,oBAAgB,GACjC2mS,GACT2gH,ICjQEr4T,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAkBxCvzB,GAA2B,SAAU+zB,GAErC,SAAS/zB,IACL,IAAIr3D,EAAmB,OAAXorF,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAUhE,OANAD,EAAMq5D,QAAU,IAAIirQ,GAAU,EAAG,EAAG,EAAG,GAEvCtkU,EAAM6iZ,mBAAgBznZ,EAEtB4E,EAAM8iZ,iBAAkB,EACxB9iZ,EAAM+iZ,gBAAkB,EACjB/iZ,EA4KX,OAxLAuqF,GAAUlzB,EAAW+zB,GAiBrB/zB,EAAU/7D,UAAU47L,YAAc,WAC9B,YAAsB97L,IAAlB6E,KAAKoa,UAA0Bpa,KAAKoa,SAAS3d,OAAS,GAU9D26D,EAAU/7D,UAAUugS,QAAU,SAAUjmQ,GAEpC31B,KAAK4iZ,mBAAgBznZ,EACrB,IACIkF,EAIA0iZ,EALAC,OAAU7nZ,EAMd,GAAI6E,KAAKi3L,cAAe,CAEpB,IAAK,IAAI96L,EAAI,EAAGA,EAAI6D,KAAKoa,SAAS3d,OAAQN,IAAK,CAE3C,IAAI8mZ,EAAsC,aAD1C5iZ,EAAQL,KAAKoa,SAASje,IACJs3D,qBAAiE,YAA5BpzD,EAAMqzD,mBACzD1zD,KAAK6iZ,iBAAmBI,GAAU5iZ,aAAiB+2D,QAAuCj8D,IAA1BkF,EAAMwiZ,kBACtExiZ,EAAMu7R,QAAQjmQ,GAElBotX,EAAc/iZ,KAAKkjZ,kBAAkB7iZ,GACH,YAA9BA,EAAMozD,qBAAiE,YAA5BpzD,EAAMqzD,yBACtBv4D,IAAvB6E,KAAK4iZ,cACL5iZ,KAAK4iZ,cAAgBG,EAGrB/iZ,KAAK4iZ,cAAc99V,UAAUi+V,IAIzC,QAA2B5nZ,IAAvB6E,KAAK4iZ,eAAoD,IAArB5iZ,KAAK6sC,YAAmB,CAC5D,IAAIs2W,GACAp2Y,EAAG/M,KAAK4iZ,cAAc71Y,EAAI/M,KAAK4iZ,cAAc5sY,MAAQhW,KAAK2sC,MAAM5/B,EAChEC,EAAGhN,KAAK4iZ,cAAc51Y,EAAIhN,KAAK4iZ,cAAc7sY,OAAS/V,KAAK2sC,MAAM3/B,GAEjEo2Y,EAAW7zW,GAAYvvC,KAAK6sC,iBAAa1xC,OAAWA,EAAWgoZ,GACnEnjZ,KAAK4iZ,cAAc71Y,EAAIq2Y,EAASr2Y,EAAI/M,KAAK4iZ,cAAc5sY,MAAQhW,KAAK2sC,MAAM5/B,EAC1E/M,KAAK4iZ,cAAc51Y,EAAIo2Y,EAASp2Y,EAAIhN,KAAK4iZ,cAAc7sY,OAAS/V,KAAK2sC,MAAM3/B,EAE3EhN,KAAK4iZ,gBACLI,EAAU,IAAI51X,GAAKptB,KAAK4iZ,cAAc5sY,MAAOhW,KAAK4iZ,cAAc7sY,SAMxE,OAHAitY,EAAUhjZ,KAAK0hZ,oBAAoBsB,EAASrtX,GAC5C31B,KAAKqjZ,gBAAgBL,GACrBhjZ,KAAK2vC,YAAcqzW,EACZA,GAMX5rV,EAAU/7D,UAAUsmZ,QAAU,SAAUhyW,GACpC,IAAItvC,EAEA0iZ,EAAc/iZ,KAAK4iZ,cACvB,GAAIG,EAAa,CACL/iZ,KAAK6L,QACL7L,KAAKiM,QAIb,GAHAjM,KAAK6L,QAAUk3Y,EAAYh2Y,EAAIg2Y,EAAY/sY,MAAQhW,KAAK2sC,MAAM5/B,EAC9D/M,KAAKiM,QAAU82Y,EAAY/1Y,EAAI+1Y,EAAYhtY,OAAS/V,KAAK2sC,MAAM3/B,EAE3DhN,KAAKi3L,cAEL,IAAK,IAAI96L,EAAI,EAAGA,EAAI6D,KAAKoa,SAAS3d,OAAQN,IAAK,CAE3C,IAAIwlZ,GAAU,EACoB,aAFlCthZ,EAAQL,KAAKoa,SAASje,IAEZs3D,sBACNpzD,EAAMwL,QAAU7L,KAAK6L,QACrBxL,EAAMysC,gBAAkB9sC,KAAK8sC,gBAAkB9sC,KAAK6sC,YACpD80W,GAAU,GAEkB,YAA5BthZ,EAAMqzD,oBACNrzD,EAAM4L,QAAUjM,KAAKiM,QACrB5L,EAAMysC,gBAAkB9sC,KAAK8sC,gBAAkB9sC,KAAK6sC,YACpD80W,GAAU,IAEVA,GAAW3hZ,KAAK6iZ,iBAAoBxiZ,aAAiB+2D,QAAuCj8D,IAA1BkF,EAAMwiZ,kBACxExiZ,EAAMshZ,QAAQthZ,EAAMsvC,cAQpC,OAHA3vC,KAAK0sC,WAAaiD,EAClB3vC,KAAK4hZ,eACL5hZ,KAAK8iZ,gBAAkB9iZ,KAAK6sC,YACrB8C,GAOXynB,EAAU/7D,UAAUgoZ,gBAAkB,SAAUv2X,GAC5C,GAAI9sB,KAAKi3L,cACL,IAAK,IAAI74L,EAAK,EAAGyE,EAAK7C,KAAKoa,SAAUhc,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvD,IAAIiC,EAAQwC,EAAGzE,GACmB,YAA9BiC,EAAMozD,0BAAiEt4D,IAA5BkF,EAAMsvC,YAAY35B,QAC7D3V,EAAMsvC,YAAY35B,MAAQ8W,EAAK9W,MAAQ3V,EAAMo8B,OAAOjwB,KAAOnM,EAAMo8B,OAAOhwB,OAE5C,YAA5BpM,EAAMqzD,wBAAgEv4D,IAA7BkF,EAAMsvC,YAAY55B,SAC3D1V,EAAMsvC,YAAY55B,OAAS+W,EAAK/W,OAAS1V,EAAMo8B,OAAO/vB,IAAMrM,EAAMo8B,OAAO9vB,QAEzEtM,aAAiB+2D,GACjB/2D,EAAMgjZ,gBAAgBhjZ,EAAMsvC,eAS5CynB,EAAU/7D,UAAUioZ,aAAe,SAAUx2X,GACzCA,EAAK9W,OAAShW,KAAKo5D,QAAQ5sD,KAAOxM,KAAKo5D,QAAQ3sD,MAC/CqgB,EAAK/W,QAAU/V,KAAKo5D,QAAQ1sD,IAAM1M,KAAKo5D,QAAQzsD,QAOnDyqD,EAAU/7D,UAAUkoZ,0BAA4B,SAAUljZ,EAAOqzB,GAC7D,IACI/nB,EAAS+jC,IADG3iC,EAAG2mB,EAAO3mB,EAAI1M,EAAMsvC,YAAY35B,MAAQ,EAAGhJ,EAAG0mB,EAAO1mB,EAAI3M,EAAMsvC,YAAY55B,OAAS,GACpE1V,GAEhCsL,EAAS4jC,GAAYlvC,EAAMwsC,YAAanZ,EAAO3mB,EAAG2mB,EAAO1mB,EAAGrB,GAE5DA,EAAS4jC,GAAYvvC,KAAK6sC,YAAc7sC,KAAK8sC,gBAAiB9sC,KAAK6L,QAAS7L,KAAKiM,QAASN,GAC1FtL,EAAMwL,QAAUF,EAAOoB,EACvB1M,EAAM4L,QAAUN,EAAOqB,GAG3BoqD,EAAU/7D,UAAU6nZ,kBAAoB,SAAU7iZ,GAC9C,IACImjZ,EACJA,EAAYnjZ,EAAMsvC,YAAYtwC,QACdgB,EAAMwsC,YAAc7sC,KAAK6sC,YAAzC,IACIoM,EAAgB54C,EAAMwL,QAAtBotC,EAAkC54C,EAAM4L,QACxCO,EAAOysC,EAAauqW,EAAUxtY,MAAQ3V,EAAMssC,MAAM5/B,EAClDL,EAAMusC,EAAauqW,EAAUztY,OAAS1V,EAAMssC,MAAM3/B,EAClDP,EAAQD,EAAOg3Y,EAAUxtY,MACzBrJ,EAASD,EAAM82Y,EAAUztY,OACzB6tB,GAAY72B,EAAGP,EAAMQ,EAAGN,GACxBm3B,GAAa92B,EAAGN,EAAOO,EAAGN,GAC1Bo3B,GAAe/2B,EAAGP,EAAMQ,EAAGL,GAC3Bo3B,GAAgBh3B,EAAGN,EAAOO,EAAGL,GAWjC,OAVAi3B,EAAU2L,GAAYlvC,EAAMwsC,YAAaxsC,EAAMwL,QAASxL,EAAM4L,QAAS23B,GACvEC,EAAW0L,GAAYlvC,EAAMwsC,YAAaxsC,EAAMwL,QAASxL,EAAM4L,QAAS43B,GACxEC,EAAayL,GAAYlvC,EAAMwsC,YAAaxsC,EAAMwL,QAASxL,EAAM4L,QAAS63B,GAC1EC,EAAcwL,GAAYlvC,EAAMwsC,YAAaxsC,EAAMwL,QAASxL,EAAM4L,QAAS83B,GAClD,IAArB/jC,KAAK6sC,cACLjJ,EAAU2L,IAAavvC,KAAK6sC,iBAAa1xC,OAAWA,EAAWyoC,GAC/DC,EAAW0L,IAAavvC,KAAK6sC,iBAAa1xC,OAAWA,EAAW0oC,GAChEC,EAAayL,IAAavvC,KAAK6sC,iBAAa1xC,OAAWA,EAAW2oC,GAClEC,EAAcwL,IAAavvC,KAAK6sC,iBAAa1xC,OAAWA,EAAW4oC,IAEhE7N,GAAK0W,UAAUhJ,EAASC,EAAUC,EAAYC,KAElDqzB,GACTtD,IC5MEw2B,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAgBxCp2B,GAAsC,SAAU42B,GAKhD,SAAS52B,IACL,IAAIx0D,EAAQorF,EAAO7pF,KAAKtB,OAASA,KAMjC,OALAD,EAAMvD,KAAO,GAIbuD,EAAM0rD,MAAQ,UACP1rD,EAmDX,OA9DAuqF,GAAU/1B,EAAsB42B,GAahC7sF,OAAOuJ,eAAe0sD,EAAqBl5D,UAAW,WAIlDqM,IAAK,WACD,OAAO1H,KAAKxD,MAEhB6K,IAAK,SAAUrK,GACXgD,KAAKxD,KAAOQ,EACZgD,KAAKiP,SAAWwlC,GAAWz0C,MAAM,GACjCA,KAAK+gZ,QAAS,GAElBp5Y,YAAY,EACZC,cAAc,IAMlB2sD,EAAqBl5D,UAAUugS,QAAU,SAAUjmQ,GAC/C,GAAI31B,KAAK+gZ,OAAQ,CACb,IAAI1tX,E7ViOhB,SAAqCihC,GACjC,IAAI7lB,EAAiB,iBACrB5yC,OAAO4yC,GAAgB/pC,MAAMC,WAAa,UAC1C,IAAI8+Y,EAAY5nZ,OAAO4yC,GAAgBr0B,SAAS,GAChDqpY,EAAU9hZ,YAAY2yD,GACtB,IAAI59B,EAAS49B,EAAc1oD,wBACvB6kC,EAAYgzW,EAAU73Y,wBACtBynB,EAAOqD,EAKX,OAJArD,EAAKtmB,EAAI2pB,EAAOlqB,KAAOikC,EAAUjkC,KACjC6mB,EAAKrmB,EAAI0pB,EAAOhqB,IAAM+jC,EAAU/jC,IAChC+2Y,EAAUn+Y,YAAYgvD,GACtBz4D,OAAO4yC,GAAgB/pC,MAAMC,WAAa,SACnC0uB,E6V7OYqwX,CAAqB1jZ,KAAKiP,UACrCjP,KAAK8/Y,YAAc,IAAI1yX,GACvBptB,KAAK8/Y,YAAY9pY,MAAQqd,EAAKrd,MAC9BhW,KAAK8/Y,YAAY/pY,OAASsd,EAAKtd,OAC/B,IAAIhJ,EAAIsmB,EAAKtmB,EACTC,EAAIqmB,EAAKrmB,EACbhN,KAAKggZ,kBAAqBjzY,EAAGA,EAAGC,EAAGA,GACnChN,KAAK+gZ,QAAS,EAElB,QAAmB5lZ,IAAf6E,KAAKgW,YAAuC7a,IAAhB6E,KAAK+V,OAAsB,CACvD,IAAI4tY,E7VwOhB,SAAiCrvV,GAC7B,IAAI7lB,EAAiB,iBACrB5yC,OAAO4yC,GAAgB/pC,MAAMC,WAAa,UAC1C,IAAI8+Y,EAAY5nZ,OAAO4yC,GAAgBr0B,SAAS,GAChDqpY,EAAU9hZ,YAAY2yD,GACtB,IAAI7jB,EAAYgzW,EAAU73Y,wBAG1B,OAFA63Y,EAAUn+Y,YAAYgvD,GACtBz4D,OAAO4yC,GAAgB/pC,MAAMC,WAAa,SACnC8rC,E6VhPwBmzW,CAAiB5jZ,KAAKiP,UAC7CjP,KAAK2vC,YAAc,IAAIviB,GAAKu2X,EAAiB3tY,MAAO2tY,EAAiB5tY,aAGrE/V,KAAK2vC,YAAc,IAAIviB,GAAKptB,KAAKgW,MAAOhW,KAAK+V,QAGjD,OADA/V,KAAK2vC,YAAc3vC,KAAK0hZ,oBAAoB1hZ,KAAK2vC,YAAaha,GACvD31B,KAAK2vC,aAMhB4kB,EAAqBl5D,UAAUsmZ,QAAU,SAAUhyW,GAG/C,OAFA3vC,KAAK0sC,WAAa,IAAItf,GAAKptB,KAAK2vC,YAAY35B,MAAOhW,KAAK2vC,YAAY55B,QACpE/V,KAAK4hZ,eACE5hZ,KAAK0sC,YAET6nB,GACTT,IChFEw2B,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAkBxCk5T,GAAwB,SAAU14T,GAElC,SAAS04T,IACL,IAAI9jZ,EAAmB,OAAXorF,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAMhE,OADAD,EAAM8iZ,qBAAkB1nZ,EACjB4E,EAyKX,OAjLAuqF,GAAUu5T,EAAQ14T,GAclB04T,EAAOxoZ,UAAUugS,QAAU,SAAUjmQ,GACjC,IAAIqtX,OAAU7nZ,EACVynZ,OAAgBznZ,EACpB,GAAI6E,KAAKi3L,cAAe,CAEpB,IAAK,IAAI74L,EAAK,EAAGyE,EAAK7C,KAAKoa,SAAUhc,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvD,IAAIiC,EAAQwC,EAAGzE,GACfiC,EAAMu7R,QAAQjmQ,GACd,IAAI6tX,EAAYnjZ,EAAMsvC,YAAYtwC,QACR,IAAtBgB,EAAMwsC,cACN22W,EAAYt0W,GAAWs0W,EAAWnjZ,EAAMwsC,cAE5C,IAAIpgC,EAAQ+2Y,EAAUxtY,MAAQ3V,EAAMo8B,OAAOhwB,MACvCE,EAAS62Y,EAAUztY,OAAS1V,EAAMo8B,OAAO9vB,OACzCo2Y,EAAc,IAAI7sX,GAAK71B,EAAMo8B,OAAOjwB,KAAMnM,EAAMo8B,OAAO/vB,IAAKD,EAAOE,GACvE,GAAItM,EAAMihZ,MAAO,CAEb,QAAiBnmZ,IADFkF,EAAMohZ,oBAAoB+B,GAErC,cAGcroZ,IAAlBynZ,EACAA,EAAgBG,EAGhBH,EAAc99V,UAAUi+V,GAGhC,GAAIH,EAAe,CACf,IAAI13J,EAAa,EACbC,EAAY,EAChBD,EAAa7+O,KAAKC,IAAIs2Y,EAAcp2Y,KAAM,GAC1C2+O,EAAY9+O,KAAKC,IAAIs2Y,EAAcl2Y,IAAK,GACxCs2Y,EAAU,IAAI51X,GAAKw1X,EAAc5sY,MAAQk1O,EAAY03J,EAAc7sY,OAASo1O,IASpF,OANA63J,EAAU73T,EAAO9vF,UAAUqmZ,oBAAoBpgZ,KAAKtB,KAAMgjZ,EAASrtX,GACnEw1D,EAAO9vF,UAAUgoZ,gBAAgB/hZ,KAAKtB,KAAMgjZ,GAE5CA,EAAQhtY,OAAShW,KAAKo5D,QAAQ5sD,KAAOxM,KAAKo5D,QAAQ3sD,MAClDu2Y,EAAQjtY,QAAU/V,KAAKo5D,QAAQ1sD,IAAM1M,KAAKo5D,QAAQzsD,OAClD3M,KAAK2vC,YAAcqzW,EACZA,GAKXa,EAAOxoZ,UAAUsmZ,QAAU,SAAUhyW,GAEjC,GADA3vC,KAAK4kD,YAAc,IAAI1uB,GACnBl2B,KAAKi3L,cAAe,CACpB,IAAIjqL,OAAI,EACJD,OAAI,EACRC,EAAIhN,KAAKiM,QAAU0jC,EAAY55B,OAAS/V,KAAK2sC,MAAM3/B,EAAIhN,KAAKo5D,QAAQ1sD,IACpEK,EAAI/M,KAAK6L,QAAU8jC,EAAY35B,MAAQhW,KAAK2sC,MAAM5/B,EAAI/M,KAAKo5D,QAAQ5sD,KACnE,IAAK,IAAIpO,EAAK,EAAGyE,EAAK7C,KAAKoa,SAAUhc,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvD,IAAIiC,EAAQwC,EAAGzE,GACf,GAA6C,IAAxCiC,EAAMgN,UAAYqzY,GAAUO,QAAe,CAC5C5gZ,EAAMysC,gBAAkB9sC,KAAK8sC,gBAAkB9sC,KAAK6sC,YACpD,IAAI22W,EAAYnjZ,EAAMsvC,YAAYtwC,QACR,IAAtBgB,EAAMwsC,cACN22W,EAAYt0W,GAAWs0W,EAAWnjZ,EAAMwsC,cAE5C,IAAIjJ,OAAU,EACVlQ,GAAW3mB,EAAG,EAAGC,EAAG,GACpB82Y,EAAS/2Y,EACTg3Y,EAAS/2Y,EACb,GAA2B,UAAvB3M,EAAMkuD,aAA0B,CAChC,IAAIr6C,EAAW7T,EAAMohZ,oBAAoB9xW,QACxBx0C,IAAb+Y,IACA4vY,GAAU5vY,EAASnH,EACnBg3Y,GAAU7vY,EAASlH,GAS3B0mB,GAAW3mB,GALP62B,EADuB,WAAvBvjC,EAAMkuD,aACIvuD,KAAKgkZ,wBAAwB3jZ,EAAOmjZ,EAAW7zW,EAAam0W,EAAQC,GAGpE/jZ,KAAKikZ,wBAAwB5jZ,EAAOyjZ,EAAQC,IAEpCh3Y,EAAIy2Y,EAAUxtY,MAAQ,EAAGhJ,EAAG42B,EAAQ52B,EAAIw2Y,EAAUztY,OAAS,GACjFo1E,EAAO9vF,UAAUkoZ,0BAA0BjiZ,KAAKtB,KAAMK,EAAOqzB,GAEjErzB,EAAMshZ,QAAQthZ,EAAMsvC,aACpB3vC,KAAK4kD,YAAYE,UAAUzkD,EAAMukD,cAMzC,OAHA5kD,KAAK0sC,WAAaiD,EAClB3vC,KAAK4hZ,eACL5hZ,KAAK4kD,YAAYE,UAAU9kD,KAAK02B,QACzBiZ,GAUXk0W,EAAOxoZ,UAAU2oZ,wBAA0B,SAAU3jZ,EAAOmjZ,EAAWU,EAAYn3Y,EAAGC,GAClF,OAAQ3M,EAAMozD,qBACV,IAAK,OACL,IAAK,OACD1mD,GAAK1M,EAAMo8B,OAAOjwB,KAClB,MACJ,IAAK,QACDO,GAAKm3Y,EAAWluY,MAAQwtY,EAAUxtY,MAAQ3V,EAAMo8B,OAAOhwB,MACvD,MACJ,IAAK,UACL,IAAK,SACDM,GAAKm3Y,EAAWluY,MAAQ,EAAIwtY,EAAUxtY,MAAQ,EAGtD,OAAQ3V,EAAMqzD,mBACV,IAAK,OACL,IAAK,MACD1mD,GAAK3M,EAAMo8B,OAAO/vB,IAClB,MACJ,IAAK,SACDM,GAAKk3Y,EAAWnuY,OAASytY,EAAUztY,OAAS1V,EAAMo8B,OAAO9vB,OACzD,MACJ,IAAK,UACL,IAAK,SACDK,GAAKk3Y,EAAWnuY,OAAS,EAAIytY,EAAUztY,OAAS,EAGxD,OAAShJ,EAAGA,EAAGC,EAAGA,IAQtB62Y,EAAOxoZ,UAAU4oZ,wBAA0B,SAAU5jZ,EAAO0M,EAAGC,GAC3D,OAAQ3M,EAAMozD,qBACV,IAAK,OACL,IAAK,OACD1mD,GAAK1M,EAAMo8B,OAAOjwB,KAClB,MACJ,IAAK,UACL,IAAK,SACDO,GAAK1M,EAAMsvC,YAAY35B,MAAQ3V,EAAMssC,MAAM5/B,EAC3C,MACJ,IAAK,QACDA,GAAK1M,EAAMsvC,YAAY35B,MAAQ3V,EAAMo8B,OAAOhwB,MAGpD,OAAQpM,EAAMqzD,mBACV,IAAK,OACL,IAAK,MACD1mD,GAAK3M,EAAMo8B,OAAO/vB,IAClB,MACJ,IAAK,UACL,IAAK,SACDM,GAAK3M,EAAMsvC,YAAY55B,OAAS1V,EAAMssC,MAAM3/B,EAC5C,MACJ,IAAK,SACDA,GAAK3M,EAAMsvC,YAAY55B,OAAS1V,EAAMo8B,OAAO9vB,OAGrD,OAASI,EAAGA,EAAGC,EAAGA,IAEf62Y,GACTzsV,I7V9LEjiB,IAEAqmM,UAAa,4BAEb2oK,QAAW,sKAGXC,QAAW,iDAEXC,cAAiB,8BAEjBC,SAAY,6BAEZC,KAAQ,yPAIRC,KAAQ,oNAGRC,SAAY,2CAEZC,SAAY,2JAGZC,QAAW,yKAGXC,UAAa,iGAEbC,QAAW,mNAIXC,cAAiB,4EAEjBC,SAAY,8cAMZC,QAAW,sF8VjDX16T,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAS5DqoX,GAAsB,SAAU95T,GAEhC,SAAS85T,IACL,OAAkB,OAAX95T,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAsC/D,OAxCAsqF,GAAU26T,EAAM95T,GAIhBN,IACI3jF,EAAS,KACV+9Y,EAAK5pZ,UAAW,UAAM,GACzBwvF,IACI3jF,EAAS,WACV+9Y,EAAK5pZ,UAAW,2BAAuB,GAC1CwvF,IACI3jF,EAAS,WACV+9Y,EAAK5pZ,UAAW,yBAAqB,GACxCwvF,IACI9iF,KAAY+0T,KACbmoF,EAAK5pZ,UAAW,cAAU,GAC7BwvF,IACI3jF,EAAS,KACV+9Y,EAAK5pZ,UAAW,aAAS,GAC5BwvF,IACI3jF,EAAS,KACV+9Y,EAAK5pZ,UAAW,cAAU,GAC7BwvF,IACI9iF,KAAY46Y,KACbsC,EAAK5pZ,UAAW,aAAS,GAC5BwvF,IACI3jF,EAAS,WACV+9Y,EAAK5pZ,UAAW,aAAS,GAC5BwvF,IACI3jF,EAAS6xD,GAAemsV,UACzBD,EAAK5pZ,UAAW,kBAAc,GACjCwvF,IACI3jF,EAAS,KACV+9Y,EAAK5pZ,UAAW,gBAAY,GAC/BwvF,IACI3jF,EAASuiD,GAAgBixI,OAC1BuqN,EAAK5pZ,UAAW,mBAAe,GAClCwvF,IACI3jF,KACD+9Y,EAAK5pZ,UAAW,eAAW,GACvB4pZ,GACTjmV,IAKEpG,GAA2B,SAAUuyB,GAGrC,SAASvyB,EAAUt4D,EAAQ+Q,EAAU5K,EAAchI,GAC/C,OAAO0sF,EAAO7pF,KAAKtB,KAAMM,EAAQ+Q,EAAU5K,EAAchI,IAAYuB,KAKzE,OARAsqF,GAAU1xB,EAAWuyB,GAKrBN,IACI9iF,GAAUgF,EAAG,GAAKC,EAAG,IAAOktC,KAC7B0e,EAAUv9D,UAAW,cAAU,GAC3Bu9D,GACTqsV,IChFE36T,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAS5DuoX,GAA2B,SAAUh6T,GAErC,SAASg6T,IACL,OAAkB,OAAXh6T,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAc/D,OAhBAsqF,GAAU66T,EAAWh6T,GAIrBN,IACI3jF,EAAS,SACVi+Y,EAAU9pZ,UAAW,aAAS,GACjCwvF,IACI3jF,EAAS,KACVi+Y,EAAU9pZ,UAAW,eAAW,GACnCwvF,IACI3jF,EAAS,KACVi+Y,EAAU9pZ,UAAW,YAAQ,GAChCwvF,IACI3jF,EAAS,SACVi+Y,EAAU9pZ,UAAW,sBAAkB,GACnC8pZ,GACTnmV,IAKEu1U,GAA4B,SAAUppT,GAEtC,SAASopT,IACL,OAAkB,OAAXppT,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAyC/D,OA3CAsqF,GAAUiqT,EAAYppT,GAItBN,IACI3jF,EAAS,KACVqtY,EAAWl5Y,UAAW,eAAW,GACpCwvF,IACI3jF,GAAS,IACVqtY,EAAWl5Y,UAAW,kBAAc,GACvCwvF,IACI3jF,EAASu5Y,GAAsB2E,kBAChC7Q,EAAWl5Y,UAAW,mBAAe,GACxCwvF,IACI9iF,OAAQ5M,EAAWgqZ,KACpB5Q,EAAWl5Y,UAAW,iBAAa,GACtCwvF,IACI3jF,EAAS,KACVqtY,EAAWl5Y,UAAW,UAAM,GAC/BwvF,IACI3jF,KACDqtY,EAAWl5Y,UAAW,aAAS,GAClCwvF,IACI3jF,KACDqtY,EAAWl5Y,UAAW,cAAU,GACnCwvF,IACI9iF,GAAU8pC,YAAa,EAAGD,YAAa,cAAehU,KAAM,eAAiBokQ,KAC9EuyG,EAAWl5Y,UAAW,aAAS,GAClCwvF,IACI3jF,EAAS,WACVqtY,EAAWl5Y,UAAW,2BAAuB,GAChDwvF,IACI3jF,EAAS,WACVqtY,EAAWl5Y,UAAW,yBAAqB,GAC9CwvF,IACI9iF,KAAY+0T,KACby3E,EAAWl5Y,UAAW,cAAU,GACnCwvF,IACI3jF,EAAS,UACVqtY,EAAWl5Y,UAAW,YAAQ,GACjCwvF,IACI3jF,KACDqtY,EAAWl5Y,UAAW,eAAW,GAC7Bk5Y,GACTv1U,IAKEqmV,GAAiC,SAAUl6T,GAG3C,SAASk6T,EAAgB/kZ,EAAQ+Q,EAAU5K,EAAchI,GACrD,OAAO0sF,EAAO7pF,KAAKtB,KAAMM,EAAQ+Q,EAAU5K,EAAchI,IAAYuB,KAKzE,OARAsqF,GAAU+6T,EAAiBl6T,GAK3BN,IACI9iF,GAAUgF,EAAG,GAAKC,EAAG,IAAOktC,KAC7BmrW,EAAgBhqZ,UAAW,cAAU,GACjCgqZ,GACT9Q,IAKE+Q,GAAgC,SAAUn6T,GAG1C,SAASm6T,EAAehlZ,EAAQ+Q,EAAU5K,EAAchI,GACpD,OAAO0sF,EAAO7pF,KAAKtB,KAAMM,EAAQ+Q,EAAU5K,EAAchI,IAAYuB,KAWzE,OAdAsqF,GAAUg7T,EAAgBn6T,GAK1BN,IACI3jF,EAAS,KACVo+Y,EAAejqZ,UAAW,cAAU,GACvCwvF,IACI9iF,GAAUgF,EAAG,EAAGC,EAAG,GAAKktC,KACzBorW,EAAejqZ,UAAW,oBAAgB,GAC7CwvF,IACI3jF,EAAS,WACVo+Y,EAAejqZ,UAAW,iBAAa,GACnCiqZ,GACT/Q,I9VvFEl/V,IACAj/B,EAAK,kCACLmvY,OAAU,gDACVttH,OAAU,6BAEVziP,IACAgwW,UAAa,oDACbvtH,OAAU,4BACVwtH,OAAU,qEACVC,UAAa,iPAIbC,cAAiB,sCACjBC,eAAkB,wCAClBC,YAAe,6CACfC,MAAS,uBACTd,QAAW,+BACXO,OAAU,iDCnDV3vW,IAEAmwW,QAAW,gEAEXC,SAAY,yFAEZC,SAAY,iEAEZC,kBAAqB,6EAErBC,WAAc,gOAGdC,SAAY,yQAIZC,WAAc,iOAGdC,eAAkB,oOAGlBC,KAAQ,8HAGRC,cAAiB,mXAIjBC,QAAW,+HAGXC,gBAAmB,6PAInBC,GAAM,6JAGNC,gBAAmB,wOAInBC,QAAW,uBAEXC,gBAAmB,qCAEnBC,MAAS,sBAETC,iBAAoB,yCAEpBC,wBAA2B,4GAG3B1S,WAAc,oFAEd2S,YAAe,gHAEfhzE,KAAQ,iCAERizE,KAAQ,8CAERC,MAAS,0HAETC,YAAe,sWAKfC,QAAW,wPAGXC,YAAe,wQAIfC,UAAa,0FAEbC,WAAc,iH8VtFdn9T,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAQ5D8qX,GAA2B,SAAUv8T,GAErC,SAASu8T,IACL,OAAkB,OAAXv8T,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KA4C/D,OA9CAsqF,GAAUo9T,EAAWv8T,GAIrBN,IACI3jF,EAAS,SACVwgZ,EAAUrsZ,UAAW,aAAS,GACjCwvF,IACI3jF,EAAS,UACVwgZ,EAAUrsZ,UAAW,YAAQ,GAChCwvF,IACI3jF,EAAS,SACVwgZ,EAAUrsZ,UAAW,2BAAuB,GAC/CwvF,IACI3jF,EAAS,SACVwgZ,EAAUrsZ,UAAW,yBAAqB,GAC7CwvF,IACI3jF,EAAS,KACVwgZ,EAAUrsZ,UAAW,aAAS,GACjCwvF,IACI3jF,EAAS,KACVwgZ,EAAUrsZ,UAAW,cAAU,GAClCwvF,IACI9iF,GAAUgF,EAAG,GAAKC,EAAG,GAAKktC,KAC3BwtW,EAAUrsZ,UAAW,cAAU,GAClCwvF,IACI3jF,EAAS,YACVwgZ,EAAUrsZ,UAAW,mBAAe,GACvCwvF,IACI3jF,EAAS,IACVwgZ,EAAUrsZ,UAAW,mBAAe,GACvCwvF,IACI9iF,KAAY+0T,KACb4qF,EAAUrsZ,UAAW,cAAU,GAClCwvF,IACI3jF,EAAS,KACVwgZ,EAAUrsZ,UAAW,gBAAY,GACpCwvF,IACI3jF,EAAS,KACVwgZ,EAAUrsZ,UAAW,eAAW,GACnCwvF,IACI3jF,EAAS,IACVwgZ,EAAUrsZ,UAAW,oBAAgB,GACxCwvF,IACI9iF,GAAUyE,KAAM,EAAGC,MAAO,EAAGC,IAAK,EAAGC,OAAQ,GAAKmwT,KACnD4qF,EAAUrsZ,UAAW,eAAW,GAC5BqsZ,GACT1oV,I7VtEEsrB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAO5D+qX,GAAgC,SAAUx8T,GAE1C,SAASw8T,IACL,OAAkB,OAAXx8T,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAuB/D,OAzBAsqF,GAAUq9T,EAAgBx8T,GAI1BN,IACI3jF,EAAS,KACVygZ,EAAetsZ,UAAW,eAAW,GACxCwvF,IACI3jF,EAAS,YACVygZ,EAAetsZ,UAAW,gBAAY,GACzCwvF,IACI3jF,EAAS,UACVygZ,EAAetsZ,UAAW,oBAAgB,GAC7CwvF,IACI3jF,GAAS,IACVygZ,EAAetsZ,UAAW,sBAAkB,GAC/CwvF,IACI3jF,EAAS,SACVygZ,EAAetsZ,UAAW,aAAS,GACtCwvF,IACI3jF,EAAS,SACVygZ,EAAetsZ,UAAW,cAAU,GACvCwvF,IACI3jF,KACDygZ,EAAetsZ,UAAW,iBAAa,GACnCssZ,GACT3oV,I8VhDEsrB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAU5DgrX,GAA0B,SAAUz8T,GAEpC,SAASy8T,IACL,OAAkB,OAAXz8T,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAmC/D,OArCAsqF,GAAUs9T,EAAUz8T,GAIpBN,IACI3jF,EAAS,KACV0gZ,EAASvsZ,UAAW,UAAM,GAC7BwvF,IACI3jF,GAAU,IACX0gZ,EAASvsZ,UAAW,cAAU,GACjCwvF,IACI9iF,KAAY+0T,KACb8qF,EAASvsZ,UAAW,cAAU,GACjCwvF,IACI3jF,GAAS,IACV0gZ,EAASvsZ,UAAW,eAAW,GAClCwvF,IACIxiF,KAAeuwD,KAChBgvV,EAASvsZ,UAAW,aAAS,GAChCwvF,IACI3jF,GAAS,IACV0gZ,EAASvsZ,UAAW,kBAAc,GACrCwvF,IACI9iF,KAAY4/Y,KACbC,EAASvsZ,UAAW,eAAW,GAClCwvF,IACI9iF,KAAY2/Y,KACbE,EAASvsZ,UAAW,kBAAc,GACrCwvF,IACI9iF,KAAY2/Y,KACbE,EAASvsZ,UAAW,oBAAgB,GACvCwvF,IACI3jF,GAAS,IACV0gZ,EAASvsZ,UAAW,yBAAqB,GAC5CwvF,IACI3jF,KACD0gZ,EAASvsZ,UAAW,eAAW,GAC3BusZ,GACT5oV,I5V/DEsrB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAoB5DirX,GAAmB,SAAU9qZ,GAC7B,OAAQA,EAAI2J,MACR,IAAK,OACD,OAAOohZ,GACX,QACI,OAAOC,KAGfC,GAAiB,SAAUjrZ,GAC3B,OAAQA,EAAI2J,MACR,IAAK,WACD,OAAO+5C,GACX,IAAK,SACD,OAAOD,GACX,IAAK,aACD,OAAOrF,GACX,QACI,OAAOsF,KAMfwnW,GAA2B,SAAU98T,GAErC,SAAS88T,IACL,OAAkB,OAAX98T,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAoB/D,OAtBAsqF,GAAU29T,EAAW98T,GAIrBN,IACI3jF,EAAS,KACV+gZ,EAAU5sZ,UAAW,aAAS,GACjCwvF,IACI3jF,EAAS,KACV+gZ,EAAU5sZ,UAAW,cAAU,GAClCwvF,IACI3jF,EAAS,UACV+gZ,EAAU5sZ,UAAW,aAAS,GACjCwvF,IACI9iF,GAAU61B,KAAM,QAASgU,YAAa,QAASC,YAAa,GAAK8wW,KAClEsF,EAAU5sZ,UAAW,aAAS,GACjCwvF,IACI9iF,GAAUgF,EAAG,EAAGC,EAAG,IAAOktC,KAC3B+tW,EAAU5sZ,UAAW,aAAS,GACjCwvF,IACI3jF,EAAS,KACV+gZ,EAAU5sZ,UAAW,gBAAY,GAC7B4sZ,GACTjpV,IAEEkpV,GAAwB,SAAU/8T,GAElC,SAAS+8T,IACL,OAAkB,OAAX/8T,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVAsqF,GAAU49T,EAAQ/8T,GAIlBN,IACI3jF,EAAS,IACVghZ,EAAO7sZ,UAAW,aAAS,GAC9BwvF,IACI3jF,EAAS,IACVghZ,EAAO7sZ,UAAW,gBAAY,GAC1B6sZ,GACTlpV,IAKE+oV,GAAgC,SAAU58T,GAE1C,SAAS48T,IACL,OAAkB,OAAX58T,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAK/D,OAPAsqF,GAAUy9T,EAAgB58T,GAI1BN,IACI3jF,EAAS,SACV6gZ,EAAe1sZ,UAAW,YAAQ,GAC9B0sZ,GACT/oV,IAKE8oV,GAA0B,SAAU38T,GAEpC,SAAS28T,IACL,OAAkB,OAAX38T,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAc/D,OAhBAsqF,GAAUw9T,EAAU38T,GAIpBN,IACI3jF,EAAS,aACV4gZ,EAASzsZ,UAAW,YAAQ,GAC/BwvF,IACI3jF,EAAS,WACV4gZ,EAASzsZ,UAAW,gBAAY,GACnCwvF,IACI3jF,EAAS,YACV4gZ,EAASzsZ,UAAW,eAAW,GAClCwvF,IACI3jF,EAAS,YACV4gZ,EAASzsZ,UAAW,mBAAe,GAC/BysZ,GACTC,IAEEI,GAAkC,SAAUh9T,GAG5C,SAASg9T,EAAiB7nZ,EAAQ+Q,EAAU5K,EAAchI,GACtD,IAAIsB,EAAQorF,EAAO7pF,KAAKtB,KAAMM,EAAQ+Q,EAAU5K,EAAchI,IAAYuB,KAE1E,OADAD,EAAM43B,UACC53B,EAKX,OAVAuqF,GAAU69T,EAAkBh9T,GAO5BN,IACI3jF,EAAS,aACVihZ,EAAiB9sZ,UAAW,YAAQ,GAChC8sZ,GACTnpV,IAEEve,GAAiC,SAAU0qC,GAE3C,SAAS1qC,IACL,OAAkB,OAAX0qC,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAK/D,OAPAsqF,GAAU7pC,EAAiB0qC,GAI3BN,IACI9iF,GAAUgF,EAAG,EAAGC,EAAG,GAAKktC,KACzBuG,EAAgBplD,UAAW,aAAS,GAChColD,GACT0nW,IAEE3nW,GAA+B,SAAU2qC,GAEzC,SAAS3qC,IACL,OAAkB,OAAX2qC,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAc/D,OAhBAsqF,GAAU9pC,EAAe2qC,GAIzBN,IACI9iF,GAAUgF,EAAG,EAAGC,EAAG,GAAKktC,KACzBsG,EAAcnlD,UAAW,cAAU,GACtCwvF,IACI9iF,GAAUgF,EAAG,EAAGC,EAAG,GAAKktC,KACzBsG,EAAcnlD,UAAW,cAAU,GACtCwvF,IACI9iF,GAAUwZ,MAAO,EAAG84B,SAAU,GAAK6tW,KACpC1nW,EAAcnlD,UAAW,eAAW,GACvCwvF,IACI9iF,GAAUwZ,MAAO,EAAG84B,SAAU,GAAK6tW,KACpC1nW,EAAcnlD,UAAW,eAAW,GAChCmlD,GACTC,IAEEtF,GAAmC,SAAUgwC,GAE7C,SAAShwC,IACL,OAAkB,OAAXgwC,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVAsqF,GAAUnvC,EAAmBgwC,GAI7BN,IACI3jF,EAAS,OACVi0C,EAAkB9/C,UAAW,cAAU,GAC1CwvF,IACI3jF,EAAS,OACVi0C,EAAkB9/C,UAAW,iBAAa,GACtC8/C,GACTgtW,IA2HEriW,GAA2B,SAAUqlC,GAGrC,SAASrlC,EAAUxlD,EAAQ+Q,EAAU5K,EAAchI,GAC/C,IAAIsB,EAAQorF,EAAO7pF,KAAKtB,KAAMM,EAAQ+Q,EAAU5K,EAAchI,IAAYuB,KAK1E,OAHAD,EAAMw5D,SAAW,GAEjBx5D,EAAMqoZ,WACCroZ,EAopBX,OA5pBAuqF,GAAUxkC,EAAWqlC,GAYrBrlC,EAAUzqD,UAAU28N,KAAO,SAAUliL,GAC5B91C,KAAKsD,KACNtD,KAAKsD,GAAKipC,MAEd,IAAI87W,EACA5tY,EAAY,IAAIopY,GAChBj6W,EAAU,IAAI8X,GAClB9X,EAAQtmC,GAAKtD,KAAKsD,GAAK,QACvB,IAAI8xD,EAAe,IAAI1T,GACnBqD,EAAkB,IAAIrD,GAC1B9X,EAAU5pC,KAAKsoZ,kBAAkBtoZ,KAAM4pC,GACvC,IAAIlT,EACAiB,KAQJ,OAPAA,EAAS33B,KAAKuoZ,mBAAmBvoZ,KAAK0G,MACtCixB,EAAS33B,KAAKw1D,eAAex1D,KAAM23B,GACnCjB,EAASR,GAAK0W,SAASjV,GACvBld,EAAUzE,MAAQ0gB,EAAO1gB,MACzByE,EAAU1E,OAAS2gB,EAAO3gB,OAC1B0E,EAAU5O,QAAU6qB,EAAO3pB,EAAI0N,EAAUkyB,MAAM5/B,EAAI2pB,EAAO1gB,MAC1DyE,EAAUxO,QAAUyqB,EAAO1pB,EAAIyN,EAAUkyB,MAAM3/B,EAAI0pB,EAAO3gB,OAClD/V,KAAK2tB,MAAMjnB,MACf,IAAK,OACD,OAAQ1G,KAAK2tB,MAAM66X,MACf,IAAK,WACDH,EAAcroZ,KAAKyoZ,sBACnB,MACJ,IAAK,eACDJ,EAAc,IAAI3mW,IACNlqB,SAAU,EACtBx3B,KAAK0oZ,yBACL,MACJ,IAAK,UACDL,EAAcroZ,KAAK2oZ,qBACnB/+W,EAAU5pC,KAAKsoZ,kBAAkBtoZ,KAAM4pC,GACvC5pC,KAAK4oZ,oBAAoB5oZ,KAAMqoZ,IAK/C,IAAIQ,EAAc7oZ,KAAK4sD,mBACvB,GAAkB,WAAd5sD,KAAK0G,KAAmB,CACxB,IAAI6uD,EAAev1D,KAAK8oC,SAAS,GAC7B4V,EAAc1+C,KAAK8oC,SAAS9oC,KAAK8oC,SAASrsC,OAAS,GACvDosZ,GAAgB3uW,GAAMC,aAAauE,EAAYrW,QAA+BqW,EAAYoO,aAAjCpO,EAAYrW,OAChE6R,GAAMC,aAAaob,EAAanS,QAAgCmS,EAAa1I,aAAnC0I,EAAanS,QAEhE,IACIkN,EAAiBxa,EAAqB,eACxB91C,KAAKg3C,eAAgBh3C,KAAKg3C,cAActyC,MAAMmtC,YAQhE,GAPAujB,EAAep1D,KAAK8oZ,oBAAoBnxX,EAAO,GAAIkxX,EAAY,GAAI7oZ,KAAK6kD,iBAAiB,EAAMyL,GAC/FvL,EAAkB/kD,KAAK8oZ,oBAAoBnxX,EAAOA,EAAOl7B,OAAS,GAAIosZ,EAAYA,EAAYpsZ,OAAS,GAAIuD,KAAK+kD,iBAAiB,EAAOuL,GACxI8E,EAAa9xD,GAAKtD,KAAKsD,GAAK,UAC5ByhD,EAAgBzhD,GAAKtD,KAAKsD,GAAK,UAC/BsmC,EAAQllC,MAAQ1E,KAAK0E,MAErBklC,EAAQllC,MAAY,KAAI,mBACDvJ,IAAnBm1D,EAA8B,CAE9B,IAAIy4V,EAAiBz4V,EAAetwD,KAAM81C,GAC1ClM,EAAQsI,YAAc62W,GAAkC/oZ,KAAKsD,GAEjEmX,EAAU/V,MAAMktC,YAAc,cAC9Bn3B,EAAU/V,MAAMk5B,KAAO,cACvBnjB,EAAU/V,MAAMmtC,YAAc,EAC9Bp3B,EAAUL,UAAYwvB,EAASwrB,EAAcrQ,GAC7CtqC,EAAUnX,GAAKtD,KAAKsD,QACAnI,IAAhBktZ,GACA5tY,EAAUL,SAAS5V,KAAK6jZ,GAE5B5tY,EAAU5O,QAAU+9B,EAAQ/9B,QAC5B4O,EAAUxO,QAAU29B,EAAQ39B,QAC5BwO,EAAUzE,MAAQ4zB,EAAQ5zB,MAC1ByE,EAAU1E,OAAS6zB,EAAQ7zB,OAC3B,IAAK,IAAI5Z,EAAI,EAAG6D,KAAK42D,YAA2Bz6D,EAAI6D,KAAK42D,YAAYn6D,OAAQN,IACzEse,EAAUL,SAAS5V,KAAKxE,KAAKgpZ,qBAAqBhpZ,KAAK42D,YAAYz6D,GAAI6D,KAAK4sD,mBAAoBl2B,EAAQ45B,IAG5G,OADAtwD,KAAK+R,QAAU0I,EACRA,GAEXqrC,EAAUzqD,UAAUotZ,oBAAsB,WACtC,IAEIQ,EAFAr/W,EAAU,IAAI8X,GACdwnW,EAAU,IAAIxnW,GAMlB,GAJ8B,WAAzB1hD,KAAK2tB,MAAc,UAAgC,WAAd3tB,KAAK0G,OAC3C1G,KAAK+kD,gBAAgBp3B,MAAQ,QAC7B3tB,KAAK+kD,gBAAgBrgD,MAAMk5B,KAAO,SAER,YAAzB59B,KAAK2tB,MAAc,SAAiB,CACrCic,EAAU5pC,KAAKsoZ,kBAAkBtoZ,KAAM4pC,GAEvC,IAAK,IADDi/W,EAAc7oZ,KAAK4sD,mBACdrpC,EAAI,EAAGA,EAAIslY,EAAYpsZ,OAAS,EAAG8mB,IACxC9mB,QAAkBuD,KAAKq6C,SAASwuW,EAAYtlY,GAAIslY,EAAYtlY,EAAI,IAChE0lY,EAAcjpZ,KAAKulX,SAASsjC,EAAYtlY,GAAIslY,EAAYtlY,EAAI,IAC5D2lY,EAAQ1sZ,KAAOysZ,EAAY,GAC3BC,EAAQ5lZ,GAAKtD,KAAKsD,GAAK,IAAOtD,KAAK2tB,MAAc,SACjDu7X,EAAQr9Y,QAAUo9Y,EAAY,GAAGl8Y,EACjCm8Y,EAAQj9Y,QAAUg9Y,EAAY,GAAGj8Y,EACjCk8Y,EAAQr8W,YAAc,GACtBq8W,EAAQ77Y,UAAYqzY,GAAUM,KAElChhZ,KAAK+kD,gBAAgBp3B,MAAQ,QAC7B3tB,KAAK+kD,gBAAgBrgD,MAAMk5B,KAAO,QAUtC,MAR8B,gBAAzB59B,KAAK2tB,MAAc,WACpB3tB,KAAK+kD,gBAAgBp3B,MAAQ,QAC7B3tB,KAAK6kD,gBAAgBl3B,MAAQ,UAC7B3tB,KAAK6kD,gBAAgBngD,MAAMk5B,KAAO,QAClC59B,KAAK+kD,gBAAgBrgD,MAAMk5B,KAAO,QAClC59B,KAAK6kD,gBAAgB7uC,MAAQ,GAC7BhW,KAAK6kD,gBAAgB9uC,OAAS,IAE3BmzY,GAEXpjW,EAAUzqD,UAAUqtZ,uBAAyB,WACR,YAA5B1oZ,KAAK2tB,MAAiB,cACvB3tB,KAAK+kD,gBAAgBp3B,MAAQ,QAC7B3tB,KAAK+kD,gBAAgBrgD,MAAMk5B,KAAO,SAEL,gBAA5B59B,KAAK2tB,MAAiB,cACvB3tB,KAAK0E,MAAMqtC,gBAAkB,MAC7B/xC,KAAK+kD,gBAAgBrgD,MAAMk5B,KAAO,QAClC59B,KAAK+kD,gBAAgBp3B,MAAQ,SAEA,kBAA5B3tB,KAAK2tB,MAAiB,cACvB3tB,KAAK0E,MAAMqtC,gBAAkB,MAC7B/xC,KAAK+kD,gBAAgBp3B,MAAQ,QAC7B3tB,KAAK+kD,gBAAgBrgD,MAAMk5B,KAAO,QAClC59B,KAAK6kD,gBAAgBl3B,MAAQ,QAC7B3tB,KAAK6kD,gBAAgBngD,MAAMk5B,KAAO,QAClC59B,KAAK6kD,gBAAgB7uC,MAAQ,EAC7BhW,KAAK6kD,gBAAgB9uC,OAAS,KAGtC+vC,EAAUzqD,UAAUstZ,mBAAqB,WACrC,IAAIQ,EAAiB,IAAIznW,GAiBzB,OAhBA1hD,KAAK0E,MAAMqtC,gBAAkB,MAC7B/xC,KAAK+kD,gBAAgBp3B,MAAQ,QAC7B3tB,KAAK+kD,gBAAgB/uC,MAAQ,EAC7BhW,KAAK+kD,gBAAgBhvC,OAAS,GAC9B/V,KAAK6kD,gBAAgBl3B,MAAQ,SACC,sBAAxB3tB,KAAK2tB,MAAa,SACM,yBAAxB3tB,KAAK2tB,MAAa,UACpBw7X,EAAe7lZ,GAAKtD,KAAKsD,GAAK,IAAOtD,KAAK2tB,MAAa,QACvDw7X,EAAenzY,MAAQ,GACvBmzY,EAAepzY,OAAS,GACxBozY,EAAe3sZ,KAAO,yDACtB2sZ,EAAe11V,oBAAsB,SACrC01V,EAAez1V,kBAAoB,SACnCy1V,EAAe97Y,UAAYqzY,GAAUM,KACrCmI,EAAezkZ,MAAMk5B,KAAgC,yBAAxB59B,KAAK2tB,MAAa,QAA+B,YAAc,SAEzFw7X,GAGXrjW,EAAUzqD,UAAUg/C,SAAW,SAAUk6S,EAAKC,GAC1C,OAAOnoV,KAAKQ,KAAKR,KAAK87D,IAAIqsR,EAAIznV,EAAIwnV,EAAIxnV,EAAG,GAAKV,KAAK87D,IAAIqsR,EAAIxnV,EAAIunV,EAAIvnV,EAAG,KAE1E84C,EAAUzqD,UAAUkqX,SAAW,SAAU6jC,EAAUC,GAC/C,IAAIC,GAAmBv8Y,EAAGq8Y,EAASr8Y,EAAGC,EAAGo8Y,EAASp8Y,GAC9CqtC,EAAWr6C,KAAKq6C,SAAS+uW,EAAUC,GACvChvW,EAAWhuC,KAAK0T,IAAI,GAAIs6B,EAAW,GACnC,IAAI94B,EAAQw/B,GAAUqoW,EAAUC,GAC5BE,EAAgBrvW,GAAM7sC,WAAYN,EAAGu8Y,EAAev8Y,EAAGC,EAAGs8Y,EAAet8Y,GAAKuU,EAAO84B,GACrFmvW,EAActvW,GAAM7sC,WAAYN,EAAGw8Y,EAAcx8Y,EAAGC,EAAGu8Y,EAAcv8Y,GAAKuU,GAAQ,IAClFkoY,EAAYvvW,GAAM7sC,WAAYN,EAAGy8Y,EAAYz8Y,EAAGC,EAAGw8Y,EAAYx8Y,GAAKuU,EAAO,IAE/E,OADW,IAAMioY,EAAYz8Y,EAAI,IAAMy8Y,EAAYx8Y,EAAI,KAAOy8Y,EAAU18Y,EAAI,IAAM08Y,EAAUz8Y,EAC9Eu8Y,IAGlBzjW,EAAUzqD,UAAU2tZ,qBAAuB,SAAUr6V,EAAYh3B,EAAQjB,EAAQ45B,GAC7E3B,EAAWrrD,GAAKqrD,EAAWrrD,IAAMipC,KACjC,IAAIm9W,EAAU,IAAI52V,GAClB42V,EAAQ3jW,YAAc4I,EAAW5I,YACjC2jW,EAAQlyX,QAAUm3B,EAAWhqD,WAC7B+kZ,EAAQj2V,oBAAsB9E,EAAW8E,oBACzCi2V,EAAQh2V,kBAAoB/E,EAAW+E,uBAClBv4D,IAAjBu7B,EAAO1gB,QACP0zY,EAAQ1zY,OAAS24C,EAAW34C,OAAS0gB,EAAO1gB,OAAS24C,EAAWlyB,OAAOjwB,KAAOmiD,EAAWlyB,OAAOhwB,OAEpGi9Y,EAAQjtX,OAASkyB,EAAWlyB,OAC5BitX,EAAQpmZ,GAAKtD,KAAKsD,GAAK,IAAMqrD,EAAWrrD,GACnB,IAAjBozB,EAAO1gB,QACP0gB,EAAO1gB,MAAQhW,KAAK0E,MAAMmtC,aAER,IAAlBnb,EAAO3gB,SACP2gB,EAAO3gB,OAAS/V,KAAK0E,MAAMmtC,aAE/B63W,EAAQtvX,QAAUu0B,EAAWv0B,QAC7BsvX,EAAQhlZ,MAAQiqD,EAAWjqD,MAE3B,IAAIqkZ,EACA72W,EAAc7E,GAAYijB,GAO9B,OANIpe,IACA62W,EAAiB72W,EAAYyc,EAAY3uD,OAE7C0pZ,EAAQx3W,YAAc62W,GAAkCW,EAAQpmZ,GAChEtD,KAAK2pZ,iBAAiBh7V,EAAYh3B,EAAQjB,EAAQgzX,GAClDA,EAAQhlZ,MAAM07B,aAAe,OACtBspX,GAGX5jW,EAAUzqD,UAAUsuZ,iBAAmB,SAAUh7V,EAAYh3B,EAAQjB,EAAQJ,GACzE,IAAI0/B,EACAotV,EACAjvV,EACA3E,EACAD,EACAlB,EACAu7V,GAAe78Y,EAAG,EAAGC,EAAG,GAC5B2hD,EAAWlyB,QAAWjwB,KAAM,EAAGC,MAAO,EAAGC,IAAK,EAAGC,OAAQ,GACzD2pB,EAAYy8B,qBACZz8B,EAAYtgB,OAAS24C,EAAW34C,OAAS0gB,EAAO1gB,OAASsgB,EAAYmG,OAAOjwB,KAAO8pB,EAAYmG,OAAOhwB,MAEtG22Y,GADAptV,EAAetH,GAAsB/2B,EAAQg3B,EAAYj4B,IACjC5C,MACH,IAAjB4C,EAAO1gB,QACP0gB,EAAO1gB,MAAQhW,KAAK0E,MAAMmtC,aAER,IAAlBnb,EAAO3gB,SACP2gB,EAAO3gB,OAAS/V,KAAK0E,MAAMmtC,aAE/Bwc,GAAgBthD,GAAKq2Y,EAASr2Y,EAAI2pB,EAAO3pB,GAAK2pB,EAAO1gB,MAAQhJ,GAAKo2Y,EAASp2Y,EAAI0pB,EAAO1pB,GAAK0pB,EAAO3gB,QAClG6zY,EAAW78Y,EAAI2pB,EAAO1gB,MAAQq4C,EAAYthD,EAC1C68Y,EAAW58Y,EAAI0pB,EAAO3gB,OAASs4C,EAAYrhD,EAE3CwiD,GADA2E,EAAQ7E,GAAqBX,EAAYqH,EAAaz0C,MAAOoW,IAC9C63B,OACfD,EAAS4E,EAAM5E,OACf,IAAIs6V,EACAC,EACW,SAAXt6V,GACAq6V,EAAU,OACVD,EAAW78Y,GAAK4hD,EAAWo7V,aAAah9Y,GAExB,UAAXyiD,GACLq6V,EAAU,QACVD,EAAW78Y,GAAK4hD,EAAWo7V,aAAah9Y,GAExB,WAAXyiD,IACLq6V,EAAU,UAEC,QAAXt6V,GACAu6V,EAAS,MACTF,EAAW58Y,GAAK2hD,EAAWo7V,aAAa/8Y,GAExB,WAAXuiD,GACLu6V,EAAS,SACTF,EAAW58Y,GAAK2hD,EAAWo7V,aAAa/8Y,GAExB,WAAXuiD,IACLu6V,EAAS,UAEbxzX,EAAYm9B,oBAAsBo2V,EAClCvzX,EAAYo9B,kBAAoBo2V,EAChCxzX,EAAYkrX,6BAA6BoI,EAAW78Y,EAAG68Y,EAAW58Y,EAAG,YACrEspB,EAAYi4B,aAAe,SAG/BzI,EAAUzqD,UAAUktZ,mBAAqB,SAAU7hZ,EAAMixB,EAAQkf,GACjDxqC,KAAKE,IAAIvM,KAAK+2C,YAAYhqC,EAAI/M,KAAK++C,YAAYhyC,GAC9CV,KAAKE,IAAIvM,KAAK+2C,YAAY/pC,EAAIhN,KAAK++C,YAAY/xC,GAD5D,IAGIg9Y,EADKpzW,GAAoB52C,KAAM62C,GACZx1C,MAAM,GAK7B,OAJI2oZ,GAAaA,EAAUvtZ,OAAS,IAChCuD,KAAK+2C,YAAcizW,EAAU,GAC7BhqZ,KAAK++C,YAAcirW,EAAUA,EAAUvtZ,OAAS,IAE7CutZ,GAGXlkW,EAAUzqD,UAAU4uZ,cAAgB,SAAUpqW,EAAWloB,EAAQuyX,GAC7D,IAAIp2X,GAAU/mB,EAAG,EAAGC,EAAG,GACnBzP,GAAUwP,EAAG,EAAGC,EAAG,GACnB6R,GAAQ9R,EAAG,EAAGC,EAAG,GACjBvQ,EAASk7B,EAAOl7B,OACpBc,EAAS2sZ,EAAgCvyX,EAAO,GAA5BA,EAAOl7B,EAAS,GACpCoiB,EAAOqrY,EAAgCvyX,EAAO,GAA5BA,EAAOl7B,EAAS,GAClC,IAAIoF,EAAMq4C,GAAM8F,eAAeziD,EAAOshB,GACtChd,EAAe,IAARA,EAAa,EAAIA,EACxB,IAAImU,EAAQ6pC,EAAUn7C,MAAMmtC,YAAc,EAC1C/d,EAAM/mB,EAAKV,KAAKoxB,MAAMlgC,EAAMwP,EAAIiJ,GAAS6I,EAAI9R,EAAIxP,EAAMwP,GAAKlL,GAC5DiyB,EAAM9mB,EAAKX,KAAKoxB,MAAMlgC,EAAMyP,EAAIgJ,GAAS6I,EAAI7R,EAAIzP,EAAMyP,GAAKnL,GAC5D,IAAIgwC,EAAc,EACdtxC,EAAO2pZ,EAAWrqW,EAAU7I,cAAgB6I,EAAUtI,cAQ1D,OAPIh3C,IACAsxC,EAActxC,EAAKmE,MAAMmtC,cAExBq4W,GAAgD,SAApCrqW,EAAUgF,gBAAgBl3B,QACrCu8X,GAAgD,SAApCrqW,EAAUkF,gBAAgBp3B,SACxCmG,EAAQomB,GAAMmhW,YAAYvnX,EAAOjV,GAAK,EAAOgzB,EAAc,IAExD/d,GAGXgyB,EAAUzqD,UAAUm6D,eAAiB,SAAU3V,EAAW9P,GAOtD,MANwC,SAApC8P,EAAUgF,gBAAgBl3B,QAC1BoiB,EAAI,GAAK/vC,KAAKiqZ,cAAcpqW,EAAW9P,GAAK,IAER,SAApC8P,EAAUkF,gBAAgBp3B,QAC1BoiB,EAAIA,EAAItzC,OAAS,GAAKuD,KAAKiqZ,cAAcpqW,EAAW9P,GAAK,IAEtDA,GAGX+V,EAAUzqD,UAAUi6D,qBAAuB,SAAUzV,EAAWloB,EAAQ32B,GACpE,IAAImpZ,EACAzzX,EAAS,IAAIR,GAGjB,GAFAi0X,EACcnqZ,KAAKoqZ,eAAevqW,EAAWloB,GACtB,WAAnBkoB,EAAUn5C,MACV,GAAI1G,KAAK8oC,SAASrsC,OAAS,EACvB,IAAK,IAAIN,EAAI,EAAGA,EAAI6D,KAAK8oC,SAASrsC,OAAQN,IAAK,CAC3C,IAAIytC,EAAU5pC,KAAK8oC,SAAS3sC,GACxBkuZ,EAAmBxqW,EAAU/W,SAAS3sC,GACtCinD,EAAUlJ,GAAMC,aAAavQ,EAAQwZ,QAAoCinW,EAAiBx9V,aAA3Cw9V,EAAiBjnW,OAChE/a,EAAU6R,GAAMC,aAAavQ,EAAQvB,QAAoCgiX,EAAiBv9V,aAA3Cu9V,EAAiBhiX,OACpE3R,EAAOouB,UAAUM,GAAgBxb,EAAQjS,OAAO,GAAIyrB,EAAQ/a,EAAQuB,EAAQjS,OAAO,GAAIkoB,UAK/FnpB,EAASR,GAAK0W,SAASjV,GAa3B,OAXA32B,EAAQgV,MAAQ0gB,EAAO1gB,MACvBhV,EAAQ+U,OAAS2gB,EAAO3gB,OACxB/U,EAAQ6K,QAAU6qB,EAAO3pB,EAAI/L,EAAQgV,MAAQ,EAC7ChV,EAAQiL,QAAUyqB,EAAO1pB,EAAIhM,EAAQ+U,OAAS,EAC9C/U,EAAQxE,KAAO2tZ,EACXtqW,EAAU9tC,UACV8tC,EAAU9tC,QAAQlG,QAAU7K,EAAQ6K,QACpCg0C,EAAU9tC,QAAQ9F,QAAUjL,EAAQiL,QACpC4zC,EAAU9tC,QAAQiE,MAAQ0gB,EAAO1gB,MACjC6pC,EAAU9tC,QAAQgE,OAAS2gB,EAAO3gB,QAE/B/U,GAGX8kD,EAAUzqD,UAAUitZ,kBAAoB,SAAUzoW,EAAWyqW,GACzD,IAEI3yX,KAKJ,OAJAA,EAAS33B,KAAKuoZ,mBAAmB1oW,EAAUn5C,MAC3C1G,KAAK4sD,mBAAqBj1B,EAC1B2yX,EAAenJ,YAAa,EAC5BmJ,EAAiBtqZ,KAAKs1D,qBAAqBzV,EAAWloB,EAAQ2yX,IAIlExkW,EAAUzqD,UAAUytZ,oBAAsB,SAAUz6V,EAAak8V,EAAeh1W,EAAW20W,EAAU55V,GACjG,IAAIk6V,EAAS,IAAI9oW,GAKjB,GAJA8oW,EAEOn9Y,UAAYqzY,GAAUM,KAC7BhhZ,KAAKy1D,uBAAuB+0V,EAAQn8V,EAAak8V,EAAeh1W,QACzCp6C,IAAnBm1D,EAA8B,CAE9B,IAAIy4V,EAAiBz4V,EAAe/a,EAAWv1C,MAC/CwqZ,EAAOt4W,YAAc62W,GACc,SAEvC,OAAOyB,GAEX1kW,EAAUzqD,UAAUovZ,WAAa,SAAU5qW,EAAW9iC,EAAMqb,GACxD,IAAI8X,EAAWnzB,EACf,GAAI8iC,EAAUuoW,QAAQ3rZ,OAAS,EAC3B,GAAuB,aAAnBojD,EAAUn5C,KACV,IAAK,IAAIikJ,EAAI,EAAGA,EAAI9qG,EAAUuoW,QAAQ3rZ,OAAQkuJ,IAAK,EAC3C+/P,EAAS7qW,EAAUuoW,QAAQz9P,IACnB0uN,WACRnpU,GAAY,KAAOw6W,EAAOrlW,WAAWt4C,EAAI,IAAM29Y,EAAOrlW,WAAWr4C,EACjEkjC,GAAYw6W,EAAO3tY,KACnB2tY,EAAOrxC,UAAW,QAIzB,GAAuB,eAAnBx5T,EAAUn5C,KACf,IAASikJ,EAAI,EAAGA,EAAI9qG,EAAUuoW,QAAQ3rZ,OAAQkuJ,IAAK,CAC/C,IAAI+/P,GAAAA,EAAS7qW,EAAUuoW,QAAQz9P,IACpBggQ,oBAAsBvyX,IACxBsyX,EAAOrxC,UACJqxC,EAAOC,oBAAsBvyX,IAC7B8X,GAAY,KAAOw6W,EAAOrlW,WAAWt4C,EAAI,IAAM29Y,EAAOrlW,WAAWr4C,EACjEkjC,GAAYw6W,EAAO3tY,KACnB2tY,EAAOrxC,UAAW,IAO1C,OAAOnpU,GAGX4V,EAAUzqD,UAAUo6D,uBAAyB,SAAUz0D,EAAS6pC,EAAI0/W,EAAeh1W,GAC/E,IAAIq1W,EACArpY,EACJvgB,EAAQ6K,QAAUg/B,EAAG99B,EACrB/L,EAAQiL,QAAU4+B,EAAG79B,EACrBuU,EAAQ24B,GAAM6G,UAAUlW,EAAI0/W,GAC5BK,EAAUt1W,GAAkBC,EAAU5nB,MAAO4nB,GAC7C,IAAIzoB,EAAO,IAAIM,GAAKmoB,EAAUv/B,MAAOu/B,EAAUx/B,QAC/C/U,EAAQ2rC,MAAM5/B,EAAIwoC,EAAU5I,MAAM5/B,EAClC/L,EAAQ2rC,MAAM3/B,EAAIuoC,EAAU5I,MAAM3/B,EAClChM,EAAQ0D,MAAQ6wC,EAAU7wC,MAC1B1D,EAAQ6rC,YAActrB,EACtBvgB,EAAQxE,KAAOouZ,EACf5pZ,EAAQgV,MAAQ8W,EAAK9W,MACrBhV,EAAQ+U,OAAS+W,EAAK/W,QAG1B+vC,EAAUzqD,UAAU+uZ,eAAiB,SAAUvqW,EAAWloB,GAOtD,IANA,IACIkzX,EACAhsY,EACAisY,EAHA/tY,EAAO,GAIPgzB,KACAxsB,EAAI,EACDA,EAAIoU,EAAOl7B,QACdszC,EAAIvrC,MAAOuI,EAAG4qB,EAAOpU,GAAGxW,EAAGC,EAAG2qB,EAAOpU,GAAGvW,IACxCuW,IAEJ,IAAK,IAAIwtD,EAAI,EAAGA,EAAIlxB,EAAUuoW,QAAQ3rZ,OAAQs0E,IAAK,CAClClxB,EAAUuoW,QAAQr3U,GACxBsoS,UAAW,EAGtB,GADAtpU,EAAM/vC,KAAKw1D,eAAe3V,EAAW9P,GACjC/vC,KAAKooC,aAAe,GAAmB,WAAdpoC,KAAK0G,KAC9B,IAAK,IAAIi0V,EAAM,EAAGA,EAAM5qT,EAAItzC,OAAS,EAAGk+V,IAAO,CAC3CkwD,EAAQ96W,EAAI4qT,GACA,IAARA,IACA59U,EAAO,IAAM8tY,EAAM99Y,EAAI,IAAM89Y,EAAM79Y,GAEvC,IAAI6vC,EAAY3C,GAAM8F,eAAejQ,EAAI4qT,GAAM5qT,EAAI4qT,EAAM,IACrD99S,EAAY,IAGJh+B,EAFJ87U,EAAM5qT,EAAItzC,OAAS,EACfogD,EAAgC,EAApB78C,KAAKooC,aACX8R,GAAMmhW,YAAYtrW,EAAI4qT,GAAM5qT,EAAI4qT,EAAM,IAAI,EAAO99S,EAAY,GAG7D3C,GAAMmhW,YAAYtrW,EAAI4qT,GAAM5qT,EAAI4qT,EAAM,IAAI,EAAO36V,KAAKooC,cAI1D2H,EAAI4qT,EAAM,GAEhBA,EAAM,IACF99S,EAAgC,EAApB78C,KAAKooC,cACjB0iX,EAAK5wW,GAAMmhW,YAAYtrW,EAAI4qT,GAAM5qT,EAAI4qT,EAAM,IAAI,EAAM99S,EAAY,GAC7D89S,EAAM5qT,EAAItzC,OAAS,IACnBoiB,EAAM,OAIVisY,EAAK5wW,GAAMmhW,YAAYtrW,EAAI4qT,GAAM5qT,EAAI4qT,EAAM,IAAI,EAAM36V,KAAKooC,eAG9D0iX,IACA/tY,GAAQ,IAAM8tY,EAAM99Y,EAAI,IAAM89Y,EAAM79Y,EAAI,IAAM89Y,EAAG/9Y,EAAI,IAAM+9Y,EAAG99Y,GAE9D6R,IACIghC,EAAUuoW,QAAQ3rZ,OAAS,IAC3BsgB,EAAO/c,KAAKyqZ,WAAW5qW,EAAW9iC,EAAM49U,GACjB,eAAnB96S,EAAUn5C,OACVqW,EAAO/c,KAAKyqZ,WAAW5qW,EAAW9iC,EAAM49U,EAAM,KAGtD59U,GAAQ,KAAO8B,EAAI9R,EAAI,IAAM8R,EAAI7R,SAM7C,GAAkB,WAAdhN,KAAK0G,KAAmB,CAGxB,IAAK,IAFD8uB,OAAY,EACZsT,EAAW9oC,KAAK8oC,SACXiiX,EAAM,EAAGA,EAAMjiX,EAASrsC,OAAQsuZ,IACjCh7W,EAAItzC,OAAS,IACbqsC,EAASiiX,GAAKl+V,cAAiB9/C,EAAG,EAAGC,EAAG,GACxC87B,EAASiiX,GAAKj+V,cAAiB//C,EAAG,EAAGC,EAAG,KAExCktC,GAAMC,aAAarR,EAASiiX,GAAK3nW,SAAYta,EAASiiX,GAAK3wW,QAAQ74B,OAAUunB,EAASiiX,GAAK3wW,QAAQC,SAM9FvR,EAASiiX,GAAK3wW,QAAQ74B,OAASunB,EAASiiX,GAAK3wW,QAAQC,SAC1DvR,EAASiiX,GAAKl+V,aAAe3S,GAAM7sC,UAAU0iC,EAAIg7W,GAAMjiX,EAASiiX,GAAK3wW,QAAQ74B,MAAOunB,EAASiiX,GAAK3wW,QAAQC,UAG1GvR,EAASiiX,GAAKl+V,cACV9/C,EAAG+7B,EAASiiX,GAAK3nW,OAAOr2C,GAAK+7B,EAASiiX,GAAKl+V,aAAa9/C,EACxDC,EAAG87B,EAASiiX,GAAK3nW,OAAOp2C,GAAK87B,EAASiiX,GAAKl+V,aAAa7/C,KAXvD6yC,EAAUvI,UAAYt3C,KAAKk5D,eAAiBl5D,KAAKg3C,gBAClDxhB,EAAYgjB,GAAax4C,KAAKg3C,cAActgB,OAAQqZ,EAAIg7W,IAAM,IAElEjiX,EAASiiX,GAAKl+V,aAAe1H,GAAgBpV,EAAIg7W,GAAMh7W,EAAIg7W,EAAM,GAAIv1X,KAWrE0kB,GAAMC,aAAarR,EAASiiX,GAAK1iX,SAAYS,EAASiiX,GAAKzwW,QAAQ/4B,OAAUunB,EAASiiX,GAAKzwW,QAAQD,SAM9FvR,EAASiiX,GAAKzwW,QAAQ/4B,OAASunB,EAASiiX,GAAKzwW,QAAQD,SAC1DvR,EAASiiX,GAAKj+V,aAAe5S,GAAM7sC,UAAU0iC,EAAIg7W,EAAM,GAAIjiX,EAASiiX,GAAKzwW,QAAQ/4B,MAAOunB,EAASiiX,GAAKzwW,QAAQD,UAG9GvR,EAASiiX,GAAKj+V,cACV//C,EAAG+7B,EAASiiX,GAAK1iX,OAAOt7B,GAAK+7B,EAASiiX,GAAKj+V,aAAa//C,EACxDC,EAAG87B,EAASiiX,GAAK1iX,OAAOr7B,GAAK87B,EAASiiX,GAAKj+V,aAAa9/C,KAXvD6yC,EAAUmrW,UAAYhrZ,KAAKirZ,eAAiBjrZ,KAAKu3C,gBAClD/hB,EAAYgjB,GAAax4C,KAAKu3C,cAAc7gB,OAAQqZ,EAAIg7W,EAAM,IAAI,IAEtEjiX,EAASiiX,GAAKj+V,aAAe3H,GAAgBpV,EAAIg7W,EAAM,GAAIh7W,EAAIg7W,GAAMv1X,IAY7Eua,EAAI1nB,OAAO,EAAG,GAAKtb,EAAG+7B,EAAS,GAAG+jB,aAAa9/C,EAAGC,EAAG87B,EAAS,GAAG+jB,aAAa7/C,IAC9E+iC,EAAI1nB,OAAO0nB,EAAItzC,OAAS,EAAG,GACvBsQ,EAAG+7B,EAASA,EAASrsC,OAAS,GAAGqwD,aAAa//C,EAAGC,EAAG87B,EAASA,EAASrsC,OAAS,GAAGqwD,aAAa9/C,IAEnG+iC,EAAM/vC,KAAKw1D,eAAe3V,EAAW9P,GACrC,IAAK,IAAIm7W,EAAM,EAAGA,EAAMpiX,EAASrsC,OAAQyuZ,IAAO,CAChC,IAARA,IACAnuY,EAAO,IAAMgzB,EAAI,GAAGhjC,EAAI,IAAMgjC,EAAI,GAAG/iC,GAEzC,IAAI2zC,EAAauqW,IAAQpiX,EAASrsC,OAAS,EAAKszC,EAAIA,EAAItzC,OAAS,GAAGsQ,EAAI,IAAMgjC,EAAIA,EAAItzC,OAAS,GAAGuQ,EAC9F87B,EAASoiX,GAAKvzX,OAAOmR,EAASoiX,GAAKvzX,OAAOl7B,OAAS,GAAGsQ,EAAI,IAAM+7B,EAASoiX,GAAKvzX,OAAOmR,EAASoiX,GAAKvzX,OAAOl7B,OAAS,GAAGuQ,EAC1H+P,GAAQ,IACJ+rB,EAASoiX,GAAKr+V,aAAa9/C,EAAI,IAAM+7B,EAASoiX,GAAKr+V,aAAa7/C,EAAI,IAAM87B,EAASoiX,GAAKp+V,aAAa//C,EAAI,IACvG+7B,EAASoiX,GAAKp+V,aAAa9/C,EAAI,IAAM2zC,QAI/C,IAAK,IAAIx6B,EAAI,EAAGA,EAAI4pB,EAAItzC,OAAQ0pB,IAC5B0kY,EAAQ96W,EAAI5pB,GACF,IAANA,IACApJ,EAAO,IAAM8tY,EAAM99Y,EAAI,IAAM89Y,EAAM79Y,GAEnCmZ,EAAI,IACJpJ,EAAO/c,KAAKyqZ,WAAW5qW,EAAW9iC,EAAMoJ,GACxCpJ,GAAQ,KAAY8tY,EAAM99Y,EAAI,IAAM89Y,EAAM79Y,GAK1D,OAAO+P,GAGX+oC,EAAUzqD,UAAUq6D,mBAAqB,SAAU7V,GAC/C,IAAI7+C,EACJ,OAAQ6+C,EAAUlyB,MAAMjnB,MACpB,IAAK,OACGm5C,EAAU9tC,QAAQqI,SAAS,aAAcsnC,KACzC1gD,EAAU6+C,EAAU9tC,QAAQqI,SAAS,IAEZ,YAAzBylC,EAAUlyB,MAAM66X,MAChBxoZ,KAAK4oZ,oBAAoB/oW,EAAW7+C,KAMpD8kD,EAAUzqD,UAAUutZ,oBAAsB,SAAU/oW,EAAW7+C,GAM3D,IAAK,IAJDugB,EACAspB,EACApuC,EAAS,EACTosZ,EAAc7oZ,KAAK4sD,mBACdzwD,EAAI,EAAGA,EAAI0sZ,EAAYpsZ,OAAS,EAAGN,IAAK,CAE7C,IAAI6yD,EAPY,IAMhBvyD,GAAkBuD,KAAKq6C,SAASwuW,EAAY1sZ,GAAI0sZ,EAAY1sZ,EAAI,KAE5DM,GAAUuyD,IACVztC,EAAQw/B,GAAU8nW,EAAY1sZ,GAAI0sZ,EAAY1sZ,EAAI,IAClD0uC,EAAKqP,GAAM7sC,UAAUw7Y,EAAY1sZ,GAAIolB,EAAOytC,IAGpDhuD,EAAQ6K,QAAUg/B,EAAG99B,EACrB/L,EAAQiL,QAAU4+B,EAAG79B,GAGzB84C,EAAUzqD,UAAUowD,MAAQ,SAAUwL,EAAIC,EAAIlhD,EAAOD,EAAQohD,GACzD,IAAIywR,EAAK,EACLD,EAAK,EACT,GAAI3nV,KAAK+R,SAAW/R,KAAK+R,QAAQ6yC,YAAa,CAC1C,IAAIA,EAAcD,GAAe3kD,MAC7BmrZ,GAAanrZ,KAAK+R,QAAQ2kB,OAAO1gB,OAAShW,KAAK0E,MAAMmtC,aAAe,GAAK,EACzEu5W,GAAcprZ,KAAK+R,QAAQ2kB,OAAO3gB,QAAU/V,KAAK0E,MAAMmtC,aAAe,GAAK,EAC/E+1S,EAAMhjS,EAAY5uC,MAAQm1Y,EAC1BxjE,EAAM/iS,EAAY7uC,OAASq1Y,EAC3Bn0V,GAAMjhD,EAAS3J,KAAKC,IAAIs7U,EAAID,IAAQwjE,EACpCj0V,GAAMnhD,EAAU1J,KAAKC,IAAIs7U,EAAID,IAAQyjE,EACrCxjE,EAAKD,EAAKt7U,KAAK0T,IAAI6nU,EAAID,GAE3B1wR,EAAKC,EAAK7qD,KAAK0T,IAAIk3C,EAAIC,GACvB,IAAItsB,EAASL,KAEbiB,GAAaZ,IADbusB,EAAYA,GAAan3D,KAAK+R,SACE86B,YAAasqB,EAAUtrD,QAASsrD,EAAUlrD,SAC1E4/B,GAAYjB,EAAQqsB,EAAIC,EAAIC,EAAUtrD,QAASsrD,EAAUlrD,SACzDu/B,GAAaZ,EAAQusB,EAAUtqB,YAAasqB,EAAUtrD,QAASsrD,EAAUlrD,SACzE,IAAI0rB,EAAS2T,GAAwBV,EAAQ5qC,KAAK4sD,oBAKlD,OAJA5sD,KAAK+2C,YAAcpf,EAAO,GAC1B33B,KAAK++C,YAAcpnB,EAAOA,EAAOl7B,OAAS,GAC1Ck7B,EAAS33B,KAAK4sD,mBAAqBhW,GAAoB52C,MACvDk1D,GAAgBl1D,KAAM23B,IACb5qB,EAAG66U,EAAI56U,EAAG26U,IAEvB98P,IACI3iF,EAAe2/Y,KAChB/hW,EAAUzqD,UAAW,aAAS,GACjCwvF,IACI3jF,EAAS8+C,GAAqBqlW,UAC/BvlW,EAAUzqD,UAAW,mBAAe,GACvCwvF,IACI3jF,EAAS,KACV4+C,EAAUzqD,UAAW,mBAAe,GACvCwvF,IACIxiF,KAAei9Y,KAChBx/V,EAAUzqD,UAAW,mBAAe,GACvCwvF,IACI9iF,KAAYmyC,KACb4L,EAAUzqD,UAAW,mBAAe,GACvCwvF,IACI9iF,KAAYmyC,KACb4L,EAAUzqD,UAAW,mBAAe,GACvCwvF,IACIliF,EAAkBq/Y,KACnBliW,EAAUzqD,UAAW,gBAAY,GACpCwvF,IACI3jF,EAAS,KACV4+C,EAAUzqD,UAAW,gBAAY,GACpCwvF,IACI3jF,EAAS,KACV4+C,EAAUzqD,UAAW,gBAAY,GACpCwvF,IACI3jF,EAAS,KACV4+C,EAAUzqD,UAAW,kBAAc,GACtCwvF,IACI3jF,EAAS,aACV4+C,EAAUzqD,UAAW,YAAQ,GAChCwvF,IACI3jF,EAAS,IACV4+C,EAAUzqD,UAAW,oBAAgB,GACxCwvF,IACI9iF,GAAU4lB,MAAO,QAAUs6X,KAC5BniW,EAAUzqD,UAAW,uBAAmB,GAC3CwvF,IACI9iF,GAAU4lB,MAAO,SAAWs6X,KAC7BniW,EAAUzqD,UAAW,uBAAmB,GAC3CwvF,IACI9iF,KAAY4/Y,KACb7hW,EAAUzqD,UAAW,eAAW,GACnCwvF,IACI3jF,EAAS,KACV4+C,EAAUzqD,UAAW,oBAAgB,GACxCwvF,IACI3jF,EAAS,KACV4+C,EAAUzqD,UAAW,oBAAgB,GACxCwvF,IACI9iF,GAAU8pC,YAAa,EAAGD,YAAa,SAAWihB,KACnD/M,EAAUzqD,UAAW,aAAS,GACjCwvF,IACI3jF,EAAS,OACV4+C,EAAUzqD,UAAW,eAAW,GAC5ByqD,GACT8hW,I6Vx9BEt9T,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAa5D0uX,GAA4B,SAAUngU,GAEtC,SAASmgU,IACL,OAAkB,OAAXngU,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KA4C/D,OA9CAsqF,GAAUghU,EAAYngU,GAItBN,IACI3jF,EAAS,KACVokZ,EAAWjwZ,UAAW,YAAQ,GACjCwvF,IACI3jF,EAAS,KACVokZ,EAAWjwZ,UAAW,gBAAY,GACrCwvF,IACI3jF,EAAS,YACVokZ,EAAWjwZ,UAAW,uBAAmB,GAC5CwvF,IACI3jF,EAAS,QACVokZ,EAAWjwZ,UAAW,YAAQ,GACjCwvF,IACI3jF,EAAS,KACVokZ,EAAWjwZ,UAAW,mBAAe,GACxCwvF,IACI3jF,EAAS,KACVokZ,EAAWjwZ,UAAW,mBAAe,GACxCwvF,IACI3jF,EAAS,KACVokZ,EAAWjwZ,UAAW,YAAQ,GACjCwvF,IACI3jF,EAAS,UACVokZ,EAAWjwZ,UAAW,iBAAa,GACtCwvF,IACI3jF,EAAS,KACVokZ,EAAWjwZ,UAAW,oBAAgB,GACzCwvF,IACI3jF,GAAS,IACVokZ,EAAWjwZ,UAAW,eAAW,GACpCwvF,IACI3jF,EAAS,IACVokZ,EAAWjwZ,UAAW,cAAU,GACnCwvF,IACI9iF,KAAY+0T,KACbwuF,EAAWjwZ,UAAW,cAAU,GACnCwvF,IACI3jF,EAAS,WACVokZ,EAAWjwZ,UAAW,2BAAuB,GAChDwvF,IACI3jF,EAAS,WACVokZ,EAAWjwZ,UAAW,yBAAqB,GACvCiwZ,GACTtsV,IAKE3Y,GAA0B,SAAU8kC,GAEpC,SAAS9kC,IACL,OAAkB,OAAX8kC,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAqE/D,OAvEAsqF,GAAUjkC,EAAU8kC,GAOpB9kC,EAAShrD,UAAU28N,KAAO,SAAUliL,GAChC,IAAIr7B,EAAY,IAAI28C,GAIpB,GAHA38C,EAAUooY,iBAAkB,EAC5BpoY,EACUL,YACNpa,KAAK8xD,OAAS9xD,KAAK6xD,WAAY,CAC/B,IAAK,IAAI11D,EAAI,EAAGA,EAAI6D,KAAK8xD,MAAMr1D,OAAQN,IAAK,CACxC,IACI4V,EADO+jC,EAAQwjB,UAAUt5D,KAAK8xD,MAAM31D,GAAGmH,IACxByO,QAMnB0I,EAAUL,SAAS5V,KAAKuN,GAE5B,IAAK,IAAIwR,EAAI,EAAGA,EAAIvjB,KAAK6xD,WAAWp1D,OAAQ8mB,IAAK,CAEzCxR,EADY+jC,EAAQwjB,UAAUt5D,KAAK6xD,WAAWtuC,GAAGjgB,IAC7ByO,QAIxB0I,EAAUL,SAAS5V,KAAKuN,IAIhC,OADA/R,KAAK+R,QAAU0I,EACRA,GAEXowE,IACI3jF,EAAS,OACVm/C,EAAShrD,UAAW,eAAW,GAClCwvF,IACIxiF,KAAe8+C,KAChBd,EAAShrD,UAAW,aAAS,GAChCwvF,IACIxiF,KAAey9C,KAChBO,EAAShrD,UAAW,kBAAc,GACrCwvF,IACI3jF,KACDm/C,EAAShrD,UAAW,aAAS,GAChCwvF,IACI3jF,KACDm/C,EAAShrD,UAAW,cAAU,GACjCwvF,IACI3jF,EAAS,IACVm/C,EAAShrD,UAAW,mBAAe,GACtCwvF,IACI3jF,EAAS,IACVm/C,EAAShrD,UAAW,eAAW,GAClCwvF,IACI3jF,EAAS,IACVm/C,EAAShrD,UAAW,eAAW,GAClCwvF,IACI9iF,GAAUgF,EAAG,GAAKC,EAAG,IAAOktC,KAC7BmM,EAAShrD,UAAW,aAAS,GAChCwvF,IACI3jF,EAAS,sBACVm/C,EAAShrD,UAAW,+BAA2B,GAClDwvF,IACIxiF,KAAeijZ,KAChBjlW,EAAShrD,UAAW,mBAAe,GACtCwvF,IACI3jF,EAASmvD,GAAoBk1V,MAC9BllW,EAAShrD,UAAW,mBAAe,GAC/BgrD,GACT2Y,ICzJEsrB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAexCl2B,GAAoC,SAAU02B,GAK9C,SAAS12B,IACL,IAAI10D,EAAQorF,EAAO7pF,KAAKtB,OAASA,KAEjC,OADAD,EAAMvD,KAAO,GACNuD,EAiBX,OAxBAuqF,GAAU71B,EAAoB02B,GAS9B7sF,OAAOuJ,eAAe4sD,EAAmBp5D,UAAW,WAIhDqM,IAAK,WACD,OAAO1H,KAAKxD,MAEhB6K,IAAK,SAAUrK,GACXgD,KAAKxD,KAAOQ,EACZgD,KAAKiP,SAAWwlC,GAAWz0C,MAAM,GACjCA,KAAK+gZ,QAAS,GAElBp5Y,YAAY,EACZC,cAAc,IAEX6sD,GACTX,ICzCEw2B,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GA4B5D4uX,GAAe,SAAUzuZ,GACzB,OAAQA,EAAI2J,MACR,IAAK,QACD,OAAO+kZ,GACX,IAAK,OACD,OAAOC,GACX,IAAK,OACD,OAAOC,GACX,IAAK,QACD,OAAO/7T,GACX,IAAK,OACD,OAAOj8B,GACX,IAAK,OACD,OAAOi4V,GACX,IAAK,SACD,OAAOC,GACX,IAAK,OACD,OAAOC,GACX,QACI,OAAOL,KAMfM,GAAuB,SAAU5gU,GAEjC,SAAS4gU,IACL,OAAkB,OAAX5gU,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAK/D,OAPAsqF,GAAUyhU,EAAO5gU,GAIjBN,IACI3jF,EAAS,UACV6kZ,EAAM1wZ,UAAW,YAAQ,GACrB0wZ,GACT/sV,IAKE2sV,GAAsB,SAAUxgU,GAEhC,SAASwgU,IACL,OAAkB,OAAXxgU,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVAsqF,GAAUqhU,EAAMxgU,GAIhBN,IACI3jF,EAAS,SACVykZ,EAAKtwZ,UAAW,YAAQ,GAC3BwvF,IACI3jF,EAAS,KACVykZ,EAAKtwZ,UAAW,YAAQ,GACpBswZ,GACTI,IAKEF,GAAwB,SAAU1gU,GAElC,SAAS0gU,IACL,OAAkB,OAAX1gU,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbAsqF,GAAUuhU,EAAQ1gU,GAIlBN,IACI3jF,EAAS,WACV2kZ,EAAOxwZ,UAAW,YAAQ,GAC7BwvF,IACI3jF,EAAS,KACV2kZ,EAAOxwZ,UAAW,eAAW,GAChCwvF,IACI3jF,EAAS,YACV2kZ,EAAOxwZ,UAAW,aAAS,GACvBwwZ,GACTE,IAKED,GAAsB,SAAU3gU,GAEhC,SAAS2gU,IACL,OAAkB,OAAX3gU,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVAsqF,GAAUwhU,EAAM3gU,GAIhBN,IACI3jF,EAAS,SACV4kZ,EAAKzwZ,UAAW,YAAQ,GAC3BwvF,IACI3jF,EAAS,KACV4kZ,EAAKzwZ,UAAW,eAAW,GACvBywZ,GACTC,IAKEn8T,GAAuB,SAAUzE,GAEjC,SAASyE,IACL,OAAkB,OAAXzE,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAc/D,OAhBAsqF,GAAUsF,EAAOzE,GAIjBN,IACI3jF,EAAS,UACV0oF,EAAMv0F,UAAW,YAAQ,GAC5BwvF,IACI3jF,EAAS,KACV0oF,EAAMv0F,UAAW,cAAU,GAC9BwvF,IACI3jF,EAAS,KACV0oF,EAAMv0F,UAAW,aAAS,GAC7BwvF,IACI3jF,EAAS,SACV0oF,EAAMv0F,UAAW,aAAS,GACtBu0F,GACTm8T,IAKEp4V,GAAsB,SAAUw3B,GAEhC,SAASx3B,IACL,OAAkB,OAAXw3B,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbAsqF,GAAU32B,EAAMw3B,GAIhBN,IACI3jF,EAAS,SACVysD,EAAKt4D,UAAW,YAAQ,GAC3BwvF,IACI3jF,EAAS,KACVysD,EAAKt4D,UAAW,eAAW,GAC9BwvF,IACI9iF,KAAY+0T,KACbnpQ,EAAKt4D,UAAW,cAAU,GACtBs4D,GACTo4V,IAKEN,GAA4B,SAAUtgU,GAEtC,SAASsgU,IACL,OAAkB,OAAXtgU,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAc/D,OAhBAsqF,GAAUmhU,EAAYtgU,GAItBN,IACI3jF,EAAS,UACVukZ,EAAWpwZ,UAAW,YAAQ,GACjCwvF,IACI3jF,EAAS,cACVukZ,EAAWpwZ,UAAW,aAAS,GAClCwvF,IACI3jF,EAAS,IACVukZ,EAAWpwZ,UAAW,oBAAgB,GACzCwvF,IACIxiF,KAAe6xC,KAChBuxW,EAAWpwZ,UAAW,cAAU,GAC5BowZ,GACTM,IAKEL,GAA2B,SAAUvgU,GAErC,SAASugU,IACL,OAAkB,OAAXvgU,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVAsqF,GAAUohU,EAAWvgU,GAIrBN,IACI3jF,EAAS,SACVwkZ,EAAUrwZ,UAAW,YAAQ,GAChCwvF,IACI3jF,EAAS,eACVwkZ,EAAUrwZ,UAAW,aAAS,GAC1BqwZ,GACTK,IAKEC,GAA6B,SAAU7gU,GAEvC,SAAS6gU,IACL,OAAkB,OAAX7gU,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAK/D,OAPAsqF,GAAU0hU,EAAa7gU,GAIvBN,IACI3jF,EAAS,SACV8kZ,EAAY3wZ,UAAW,YAAQ,GAC3B2wZ,GACThtV,IAKEitV,GAAgC,SAAU9gU,GAE1C,SAAS8gU,IACL,OAAkB,OAAX9gU,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVAsqF,GAAU2hU,EAAgB9gU,GAI1BN,IACI3jF,EAAS,SACV+kZ,EAAe5wZ,UAAW,YAAQ,GACrCwvF,IACI3jF,GAAS,IACV+kZ,EAAe5wZ,UAAW,kBAAc,GACpC4wZ,GACTjtV,IAKEktV,GAA0B,SAAU/gU,GAEpC,SAAS+gU,IACL,OAAkB,OAAX/gU,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAc/D,OAhBAsqF,GAAU4hU,EAAU/gU,GAIpBN,IACI3jF,EAAS,SACVglZ,EAAS7wZ,UAAW,YAAQ,GAC/BwvF,IACI3jF,EAAS,SACVglZ,EAAS7wZ,UAAW,YAAQ,GAC/BwvF,IACI3jF,GAAS,IACVglZ,EAAS7wZ,UAAW,YAAQ,GAC/BwvF,IACI3jF,GAAS,IACVglZ,EAAS7wZ,UAAW,oBAAgB,GAChC6wZ,GACTltV,IAKEmtV,GAA2B,SAAUhhU,GAErC,SAASghU,IACL,OAAkB,OAAXhhU,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVAsqF,GAAU6hU,EAAWhhU,GAIrBN,IACI3jF,EAAS,UACVilZ,EAAU9wZ,UAAW,aAAS,GACjCwvF,IACI3jF,EAAS,SACVilZ,EAAU9wZ,UAAW,eAAW,GAC5B8wZ,GACTntV,IAKEotV,GAA8B,SAAUjhU,GAExC,SAASihU,IACL,OAAkB,OAAXjhU,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAsC/D,OAxCAsqF,GAAU8hU,EAAcjhU,GAIxBN,IACI3jF,EAAS,SACVklZ,EAAa/wZ,UAAW,eAAW,GACtCwvF,IACI3jF,EAAS,UACVklZ,EAAa/wZ,UAAW,aAAS,GACpCwvF,IACI3jF,EAAS,KACVklZ,EAAa/wZ,UAAW,UAAM,GACjCwvF,IACI9iF,KAAYmyC,KACbkyW,EAAa/wZ,UAAW,cAAU,GACrCwvF,IACIxiF,KAAeg9Y,KAChB+G,EAAa/wZ,UAAW,mBAAe,GAC1CwvF,IACIxiF,KAAeuwD,KAChBwzV,EAAa/wZ,UAAW,aAAS,GACpCwvF,IACI3jF,KACDklZ,EAAa/wZ,UAAW,aAAS,GACpCwvF,IACI3jF,KACDklZ,EAAa/wZ,UAAW,cAAU,GACrCwvF,IACI9iF,KAAY+0T,KACbsvF,EAAa/wZ,UAAW,cAAU,GACrCwvF,IACI3jF,EAAS,WACVklZ,EAAa/wZ,UAAW,2BAAuB,GAClDwvF,IACI3jF,EAAS,WACVklZ,EAAa/wZ,UAAW,yBAAqB,GAChDwvF,IACI3jF,GAAS,IACVklZ,EAAa/wZ,UAAW,eAAW,GAC/B+wZ,GACTptV,IAEEqtV,GAA2C,SAAUlhU,GAErD,SAASkhU,IACL,OAAkB,OAAXlhU,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbAsqF,GAAU+hU,EAA2BlhU,GAIrCN,IACI9iF,GAAUzE,GAAI,UAAWhH,MAAO,MAAOqP,QAAUoB,EAAG,EAAGC,EAAG,KAASo/Y,KACpEC,EAA0BhxZ,UAAW,eAAW,GACnDwvF,IACI9iF,GAAUzE,GAAI,UAAWhH,MAAO,eAAgBkqB,QAAS,QAAS7a,QAAUoB,EAAG,IAAMC,EAAG,IAAOo/Y,KAChGC,EAA0BhxZ,UAAW,eAAW,GACnDwvF,IACI9iF,GAAUzE,GAAI,SAAUhH,MAAO,eAAgBkqB,QAAS,SAAU7a,QAAUoB,EAAG,IAAMC,EAAG,IAAOo/Y,KAChGC,EAA0BhxZ,UAAW,cAAU,GAC3CgxZ,GACTrtV,IAKEstV,GAAgC,SAAUnhU,GAE1C,SAASmhU,IACL,OAAkB,OAAXnhU,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KA6B/D,OA/BAsqF,GAAUgiU,EAAgBnhU,GAI1BN,IACI3jF,EAAS,SACVolZ,EAAejxZ,UAAW,YAAQ,GACrCwvF,IACI3jF,GAAS,IACVolZ,EAAejxZ,UAAW,aAAS,GACtCwvF,IACI3jF,EAAS,YACVolZ,EAAejxZ,UAAW,gBAAY,GACzCwvF,IACI3jF,GAAS,IACVolZ,EAAejxZ,UAAW,oBAAgB,GAC7CwvF,IACI3jF,EAAS,SACVolZ,EAAejxZ,UAAW,YAAQ,GACrCwvF,IACI3jF,GAAS,IACVolZ,EAAejxZ,UAAW,iBAAa,GAC1CwvF,IACIxiF,KAAe+jZ,KAChBE,EAAejxZ,UAAW,cAAU,GACvCwvF,IACI9iF,KAAYskZ,KACbC,EAAejxZ,UAAW,mBAAe,GAC5CwvF,IACI3jF,OAAS/L,IACVmxZ,EAAejxZ,UAAW,iBAAa,GACnCixZ,GACTttV,IAKEutV,GAA8B,SAAUphU,GAExC,SAASohU,IACL,OAAkB,OAAXphU,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbAsqF,GAAUiiU,EAAcphU,GAIxBN,IACI3jF,EAAS,SACVqlZ,EAAalxZ,UAAW,gBAAY,GACvCwvF,IACI9iF,KAAYmkZ,KACbK,EAAalxZ,UAAW,YAAQ,GACnCwvF,IACI9iF,KAAYukZ,KACbC,EAAalxZ,UAAW,kBAAc,GAClCkxZ,GACTvtV,IAKEwtV,GAAgC,SAAUrhU,GAG1C,SAASqhU,EAAelsZ,EAAQ+Q,EAAU5K,EAAchI,GACpD,OAAO0sF,EAAO7pF,KAAKtB,KAAMM,EAAQ+Q,EAAU5K,EAAchI,IAAYuB,KAoBzE,OAvBAsqF,GAAUkiU,EAAgBrhU,GAK1BN,IACI3jF,EAAS,KACVslZ,EAAenxZ,UAAW,YAAQ,GACrCwvF,IACI3jF,EAAS,KACVslZ,EAAenxZ,UAAW,UAAM,GACnCwvF,IACI3jF,KACDslZ,EAAenxZ,UAAW,aAAS,GACtCwvF,IACI3jF,KACDslZ,EAAenxZ,UAAW,cAAU,GACvCwvF,IACI3jF,KACDslZ,EAAenxZ,UAAW,aAAS,GACtCwvF,IACI3jF,KACDslZ,EAAenxZ,UAAW,cAAU,GAChCmxZ,GACTxtV,IAKE4sV,GAA2B,SAAUzgU,GAErC,SAASygU,IACL,OAAkB,OAAXzgU,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAuB/D,OAzBAsqF,GAAUshU,EAAWzgU,GAIrBN,IACI3jF,EAAS,SACV0kZ,EAAUvwZ,UAAW,YAAQ,GAChCwvF,IACI3jF,EAAS,UACV0kZ,EAAUvwZ,UAAW,aAAS,GACjCwvF,IACI9iF,KAAYokZ,KACbP,EAAUvwZ,UAAW,aAAS,GACjCwvF,IACI9iF,KAAYikZ,KACbJ,EAAUvwZ,UAAW,eAAW,GACnCwvF,IACI9iF,KAAYkkZ,KACbL,EAAUvwZ,UAAW,kBAAc,GACtCwvF,IACI9iF,KAAYwkZ,KACbX,EAAUvwZ,UAAW,gBAAY,GACpCwvF,IACIxiF,KAAemkZ,KAChBZ,EAAUvwZ,UAAW,mBAAe,GAChCuwZ,GACTG,IAKE5kW,GAAsB,SAAUgkC,GAGhC,SAAShkC,EAAK7mD,EAAQ+Q,EAAU5K,EAAchI,GAC1C,IAAIsB,EAAQorF,EAAO7pF,KAAKtB,KAAMM,EAAQ+Q,EAAU5K,EAAchI,IAAYuB,KAS1E,OAPAD,EAAMw5D,SAAW,GAEjBx5D,EAAM0sZ,UAAY,GAElB1sZ,EAAM2sZ,YAEN3sZ,EAAM4sZ,WACC5sZ,EA8aX,OA1bAuqF,GAAUnjC,EAAMgkC,GAchB7sF,OAAOuJ,eAAes/C,EAAK9rD,UAAW,cAElCqM,IAAK,WACD,OAAqB,OAAjB1H,KAAK+R,QACE/R,KAAK+R,QAAQ26B,WAGb,IAAItf,GAAKptB,KAAKgW,OAAS,EAAGhW,KAAK+V,QAAU,IAGxDpO,YAAY,EACZC,cAAc,IAOlBu/C,EAAK9rD,UAAU28N,KAAO,SAAUliL,GAC5B,IACIsuP,EADAhqQ,EAAU,IAAI05B,GAMlB,OAFA9zD,KAAK2tB,MAAuB,qBAC5B3tB,KAAK2tB,MAAmB,iBAChB3tB,KAAK2tB,MAAMjnB,MACf,IAAK,OACD,IAAIqtD,EAAc,IAAIrS,GACtBqS,EAAYv3D,KAAOwD,KAAK2tB,MAAMnxB,KAC9B49B,EAAU25B,EACV,MACJ,IAAK,QACD,IAAIC,EAAe,IAAIC,GACvBD,EAAaz3D,OAASyD,KAAK2tB,MAAMpxB,OACjCy3D,EAAaE,WAAal0D,KAAK2tB,MAAMwmC,MACrCH,EAAaI,WAAap0D,KAAK2tB,MAAM89B,MACrCrxB,EAAU45B,EACV,MACJ,IAAK,OACD,IAAIn4C,EAAc,IAAIi3C,GACtBj3C,EAAYue,QAAUp6B,KAAK2tB,MAAMyM,QACjCA,EAAUve,EACVuoR,EAAYpkS,KAAK0E,MACjB01B,EAAQ11B,MAAQ0/R,EAChB,MACJ,IAAK,QACD,GAAyB,cAArBpkS,KAAK2tB,MAAMA,MAAuB,EAElCyM,EADIwyX,EAAa,IAAI94V,IAEb1rB,aAAepoC,KAAK2tB,MAAMya,kBAEjC,GAAyB,YAArBpoC,KAAK2tB,MAAMA,MAAqB,CACrC,IAAI5Q,EAAO,IAAI2kC,GACf3kC,EAAKvgB,KAAOisC,GAAezoC,KAAK2tB,MAAMgK,QACtCyC,EAAUrd,MAET,CACD,IAAI6vY,EAAa,IAAIlrW,GACjBmrW,EAAiB33W,GAAcl1C,KAAK2tB,MAAMA,OAC9Ci/X,EAAWpwZ,KAAOqwZ,EAClBzyX,EAAUwyX,EAEd,MACJ,IAAK,OACD,IAAIE,EAAY,IAAIprW,GAChBoT,EAAgBnf,GAAa31C,KAAK2tB,MAAMA,OAC5Cm/X,EAAUtwZ,KAAOs4D,EACjB16B,EAAU0yX,EACV,MACJ,IAAK,OACD,GAAIh3W,EAAQi3W,WAAY,CACpB3yX,EAAU0b,EAAQi3W,WAAWC,gBAAgB5yX,EAASp6B,KAAM81C,GAC5D,IAAIm3W,EAAajtZ,KAAK2tB,MAAMu/X,SAASD,WACrC,GAAIA,EAAWE,WAAaF,EAAWE,UAAU1wZ,OAE7C,IAAK,IAAI2B,EAAK,EAAGgvZ,EADFptZ,KAAK2tB,MAAMu/X,SAASD,WAAWE,UACN/uZ,EAAKgvZ,EAAW3wZ,OAAQ2B,IAAM,CAClE,IAAIjC,EAAIixZ,EAAWhvZ,IACf03C,EAAQwjB,UAAUn9D,IAAQ25C,EAAQwjB,UAAUn9D,GAAGswZ,WAAa32W,EAAQwjB,UAAUn9D,GAAGswZ,YAAczsZ,KAAKsD,KACpGwyC,EAAQwjB,UAAUn9D,GAAGswZ,UAAYzsZ,KAAKsD,GAClC2pZ,EAAWI,WACXv3W,EAAQw3W,wBAAwBx3W,EAAQwjB,UAAUn9D,GAAG4V,QAAS+jC,EAAQwjB,UAAUn9D,IAAK8wZ,EAAWI,WAEpGjzX,EAAQhgB,SAAS5V,KAAKsxC,EAAQwjB,UAAUn9D,GAAG4V,WAK3D,MACJ,IAAK,SACD,IAAIuiD,EAAgB,IAAIC,GACxBD,EAAcl6B,QAAUp6B,KAAK2tB,MAAMyM,QACnCk6B,EAAc7I,MAAQzrD,KAAK2tB,MAAM89B,MACjCrxB,EAAUk6B,EACV,MACJ,IAAK,OACD,IAAIE,EAAc,IAAIC,GACtBD,EAAYp6B,QAAUp6B,KAAK2tB,MAAMyM,QACjCA,EAAUo6B,EA0ClB,OAvCAp6B,EAAQ92B,GAAKtD,KAAKsD,GAAK,WACvB82B,EAAQm0B,aAAe,cACJpzD,IAAf6E,KAAKgW,QACLokB,EAAQpkB,MAAQhW,KAAKgW,OAEzBokB,EAAQq5B,oBAAsB,eACVt4D,IAAhB6E,KAAK+V,SACLqkB,EAAQrkB,OAAS/V,KAAK+V,aAEH5a,IAAnB6E,KAAKszD,YACLl5B,EAAQk5B,UAAYtzD,KAAKszD,gBAENn4D,IAAnB6E,KAAKuzD,YACLn5B,EAAQm5B,UAAYvzD,KAAKuzD,gBAEPp4D,IAAlB6E,KAAKwzD,WACLp5B,EAAQo5B,SAAWxzD,KAAKwzD,eAENr4D,IAAlB6E,KAAKo+B,WACLhE,EAAQgE,SAAWp+B,KAAKo+B,UAEH,cAArBp+B,KAAK2tB,MAAMA,OAA0B3tB,KAAK2tB,MAAMya,eAChDhO,EAAQgnX,eAAgB,GAE5BhnX,EAAQs5B,kBAAoB,UACxB1zD,KAAK2tB,iBAAiBgmC,KACtBv5B,EAAQqC,OAASz8B,KAAK2tB,MAAM8O,QAE5BuqB,GAAUhnD,OAC0C,IAA/CA,KAAK+lD,YAAcG,GAAgBe,UACpC7sB,EAAQ4X,OAAShyC,KAAKgyC,QAGN,SAApBhyC,KAAK2tB,MAAMjnB,MAAwC,YAArB1G,KAAK2tB,MAAMA,OACpB,eAArB3tB,KAAK2tB,MAAMA,OACa,SAApB3tB,KAAK2tB,MAAMjnB,OACX0zB,EAAQ11B,MAAQ1E,KAAK0E,OAGtB01B,GAIX+sB,EAAK9rD,UAAUkyZ,cAAgB,WACtBvtZ,KAAKsD,KACNtD,KAAKsD,GAAKipC,MAGd,IAAIm3V,EAAS1jY,KAAKoa,SAAW,IAAIg9C,GAAc,IAAIysV,GAgBnD,OAfAngB,EAAOpgY,GAAKtD,KAAKsD,GACjBogY,EAAO73X,QAAU7L,KAAK6L,QACtB63X,EAAOz3X,QAAUjM,KAAKiM,QACtBy3X,EAAOlsW,QAAUx3B,KAAKw3B,QACtBksW,EAAOh/X,MAAMk5B,KAAO59B,KAAK2xD,gBACzB+xU,EAAOh/X,MAAMktC,YAAc5xC,KAAKm1U,YAChCuuD,EAAOh/X,MAAMmtC,YAAc7xC,KAAKyuF,YAChCi1S,EAAO72V,YAAc7sC,KAAK6sC,YAC1B62V,EAAOpwU,UAAYtzD,KAAKszD,UACxBowU,EAAOlwU,SAAWxzD,KAAKwzD,SACvBkwU,EAAOnwU,UAAYvzD,KAAKuzD,UACxBmwU,EAAOtlW,SAAWp+B,KAAKo+B,SACvBslW,EAAO/2V,MAAQ3sC,KAAK2sC,MACpB+2V,EAAOjnW,OAASz8B,KAAKy8B,OACrBz8B,KAAK+R,QAAU2xX,EACRA,GAGXv8U,EAAK9rD,UAAUmyZ,UAAY,SAAUC,EAAsBhzY,GAC1Cza,KAAK+R,QAElB,IAAK,IADDumC,EACKn8C,EAAI,EAAG6D,KAAK82D,MAAqB36D,EAAI6D,KAAK82D,MAAMr6D,OAAQN,IAAK,CAClEm8C,EAAOt4C,KAAK0tZ,gBAAgB1tZ,KAAK82D,MAAM36D,IAEvC,IAAI4sZ,OAAiB,EACjB4E,EAAuBtgX,GAAYogX,GACnCE,IACA5E,EAAiB4E,EAAqBr1W,EAAMt4C,OAEhDs4C,EAAKpG,YAAc62W,GAAkCzwW,EAAKh1C,GAC1DmX,EAAUL,SAAS5V,KAAK8zC,KAGhC6O,EAAK9rD,UAAUuyZ,aAAe,SAAU/8V,EAAQnb,GAC5C,IAAI3oC,EACAC,EAiBJ,MAhB2B,gBAAvB6jD,EAAOz3B,aACPrsB,EAAI2oC,EAAK/pC,OAAOoB,EAChBC,EAAI,EAAI0oC,EAAK/pC,OAAOqB,GAEQ,gBAAvB6jD,EAAOz3B,aACZrsB,EAAI2oC,EAAK/pC,OAAOqB,EAChBA,EAAI0oC,EAAK/pC,OAAOoB,GAEY,gBAAvB8jD,EAAOz3B,aACZrsB,EAAI,EAAI2oC,EAAK/pC,OAAOqB,EACpBA,EAAI0oC,EAAK/pC,OAAOoB,IAGhBA,EAAI2oC,EAAK/pC,OAAOoB,EAChBC,EAAI0oC,EAAK/pC,OAAOqB,IAEXD,EAAGA,EAAGC,EAAGA,IAGtBm6C,EAAK9rD,UAAUwyZ,UAAY,SAAUJ,EAAsB58V,EAAQp2C,GAClDza,KAAK+R,QAAlB,IACIpG,EACA+pC,EAAO11C,KAAKi5S,WAAaj5S,KAAK8tZ,WAAa9tZ,KAAK+tZ,aACpD,GAAmB,SAAfr4W,EAAK/nB,MAAkB,CACvB,IAAIk+K,EAAgB,IAAIg4M,GACxBh4M,EAAcy1M,OAAQ,EAEtBz1M,EAAcvoM,GAAKtD,KAAKsD,GAAK,gBAC7BuoM,EAAczxL,YACdyxL,EAAc91L,OAAS2/B,EAAK3/B,OAC5B81L,EAAc71L,MAAQ0/B,EAAK1/B,MAC3B61L,EAAcnnM,MAAMktC,YAAc,cAClCi6J,EAAcpvK,OAASiZ,EAAKjZ,OAC5BovK,EAAcp4I,oBAAsB,SACpCo4I,EAAcn4I,kBAAoB,SAClCm4I,EAAcr0K,QAAUx3B,KAAKw3B,QAC7B7rB,EAAS3L,KAAK4tZ,aAAa/8V,EAAQnb,GACnCm2J,EAAc21M,6BAA6B71Y,EAAOoB,EAAGpB,EAAOqB,EAAG,YAC/D6+L,EAAct9I,aAAe,QAC7BvuD,KAAKguZ,eAAet4W,EAAMm2J,EAAe4hN,GAEzC,IAAI1E,OAAiB,EACjB4E,EAAuBtgX,GAAYogX,GACnCE,IACA5E,EAAiB4E,EAAqBj4W,EAAM11C,OAEhD6rM,EAAc35J,YAAc62W,GAAkCl9M,EAAcvoM,GAC5EmX,EAAUL,SAAS5V,KAAKqnM,KAIhC1kJ,EAAK9rD,UAAU4yZ,gBAAkB,SAAUR,EAAsBhzY,GAE7D,IAAK,IADDk0C,EACKxyD,EAAI,EAAG6D,KAAK42D,YAA2Bz6D,EAAI6D,KAAK42D,YAAYn6D,OAAQN,IAAK,CAC9EwyD,EAAa3uD,KAAKkuZ,sBAAsBluZ,KAAK42D,YAAYz6D,IAEzD,IAAI4sZ,OAAiB,EACjB4E,EAAuBtgX,GAAYogX,GACnCE,IACA5E,EAAiB4E,EAAqBh/V,EAAY3uD,OAEtD2uD,EAAWzc,YAAc62W,GAAkCp6V,EAAWrrD,GACtEmX,EAAUL,SAAS5V,KAAKmqD,KAIhCxH,EAAK9rD,UAAUqyZ,gBAAkB,SAAU52V,GACvCA,EAAMxzD,GAAKwzD,EAAMxzD,IAAMipC,KAEvB,IAAI4hX,EAAc,IAAIzsW,GACtBysW,EAAYp4Y,OAAS+gD,EAAM/gD,OAC3Bo4Y,EAAYn4Y,MAAQ8gD,EAAM9gD,MAC1B,IAAIo4Y,EAA4B,WAAhBt3V,EAAMnpC,MAAsBmpC,EAAM5mB,SAAWkF,GAAa0hB,EAAMnpC,OAChFwgY,EAAY7qZ,GAAKtD,KAAKsD,GAAK,IAAOwzD,EAAQ,GAC1Cq3V,EAAY1xX,OAASq6B,EAAMr6B,OAC3B0xX,EAAY3xZ,KAAO4xZ,EACnB,IAAI1pZ,EAAQoyD,EAAMpyD,MAclB,OAbAypZ,EAAYzpZ,OACRk5B,KAAMl5B,EAAMk5B,KAAMgU,YAAaltC,EAAMktC,YAAaK,SAAU,KAC5DxkC,QAAS/I,EAAM+I,QAASskC,gBAAiBrtC,EAAMqtC,gBAAiBF,YAAantC,EAAMmtC,aAEvFs8W,EAAY16V,oBAAsBqD,EAAMrD,oBACxC06V,EAAYz6V,kBAAoBoD,EAAMpD,kBACtCy6V,EAAY3M,6BAA6B1qV,EAAMnrD,OAAOoB,EAAG+pD,EAAMnrD,OAAOqB,EAAG,iBACtD7R,IAAf6E,KAAKgW,YAAuC7a,IAAhB6E,KAAK+V,SACjCo4Y,EAAY7M,OAAQ,GAExB6M,EAAY5/V,aAAe,QAC3B4/V,EAAY32X,WAAUg/B,GAAqBM,EAAOiC,GAAeE,UAC5DzC,GAAqBM,EAAOiC,GAAeC,QAAWxC,GAAqBM,EAAOiC,GAAemsV,UAC/FiJ,GAGXhnW,EAAK9rD,UAAU6yZ,sBAAwB,SAAUv/V,GAC7CA,EAAWrrD,GAAKqrD,EAAWrrD,IAAMipC,KACjC,IAAIl5B,EAAQs7C,EACR0/V,EAAoB,IAAIv7V,GAC5Bu7V,EAAkBtoW,YAAc4I,EAAW5I,YAC3CsoW,EAAkBt4Y,OAAS44C,EAAW54C,OACtCs4Y,EAAkBr4Y,MAAQ24C,EAAW34C,MACrCq4Y,EAAkB72X,QAAUm3B,EAAWhqD,WACvC0pZ,EAAkB/qZ,GAAKtD,KAAKsD,GAAK,IAAMqrD,EAAWrrD,GAClD,IAAIoB,EAAQiqD,EAAWjqD,MACnByuD,EAAOxE,EAAWuE,UAAUC,KAAOxE,EAAWuE,eAAY/3D,EAwB9D,OAvBAkzZ,EAAkB3pZ,OACdk5B,KAAMl5B,EAAMk5B,KAAMgU,YAAaltC,EAAMktC,YAAaC,YAAantC,EAAMmtC,YACrEnD,KAAMhqC,EAAMgqC,KAAM8C,aAAc9sC,EAAM8sC,aACtChb,MAAO28B,EAAOA,EAAK38B,OAAS63X,EAAkBn7V,UAAU18B,MAAQ9xB,EAAM8xB,MAAOtJ,WAAYxoB,EAAMwoB,WAC/FD,WAAYvoB,EAAMuoB,WAAYJ,SAAUnoB,EAAMmoB,SAAU0kB,OAAQ7sC,EAAM6sC,OAAQU,SAAU,KAAMxkC,QAAS/I,EAAM+I,QAC7GskC,gBAAiBrtC,EAAMqtC,gBAAiBM,UAAW3tC,EAAM2tC,UAAWjS,aAAcuuB,EAAWjqD,MAAM07B,aACnG+R,eAAgBghB,EAAOA,EAAKhhB,gBAAkBk8W,EAAkBn7V,UAAU/gB,eAAiBztC,EAAMytC,gBAErGk8W,EAAkBn7V,UAAUC,KAAOxE,EAAWuE,UAAUC,WAAQh4D,EAChEkzZ,EAAkBn7V,UAAU94B,QAAUu0B,EAAWuE,UAAU94B,cAAWj/B,EACtEkzZ,EAAkBn7V,UAAU/gB,eAAiBwc,EAAWuE,UAAU/gB,qBAAkBh3C,EACpFkzZ,EAAkBj0X,QAAU+4B,EAAOA,EAAK/4B,SAAWi0X,EAAkBn7V,UAAUC,KAAOxE,EAAWv0B,aAC9Ej/B,IAAf6E,KAAKgW,QACLq4Y,EAAkBr4Y,MAAQhW,KAAKgW,MAAQ24C,EAAWlyB,OAAOjwB,KAAOmiD,EAAWlyB,OAAOhwB,OAEtF4hZ,EAAkB5xX,OAASkyB,EAAWlyB,OACtC4xX,EAAkB56V,oBAAsB9E,EAAW8E,oBACnD46V,EAAkB36V,kBAAoB/E,EAAW+E,kBACjD26V,EAAkB7M,6BAA6BnuY,EAAM1H,OAAOoB,EAAGsG,EAAM1H,OAAOqB,EAAG,iBAC5D7R,IAAf6E,KAAKgW,YAAuC7a,IAAhB6E,KAAK+V,SACjCs4Y,EAAkB/M,OAAQ,GAE9B+M,EAAkB9/V,aAAe,QAC1B8/V,GAEXlnW,EAAK9rD,UAAUizZ,kBAAoB,SAAUt7Y,EAAS64L,GAClD,IAAIx4K,EAAO,IAAIygC,GAgBf,OAfAzgC,EAAK/vB,GAAKuoM,EAAcvoM,GAAK,QAC7B+vB,EAAKtd,OAAS/C,EAAQ+C,OACtBsd,EAAKrd,MAAQhD,EAAQgD,MACrBqd,EAAKmE,QAAUq0K,EAAcr0K,QAC7BnE,EAAKoJ,OAASzpB,EAAQypB,OACtBpJ,EAAK+U,aAAep1B,EAAQo1B,aAC5B/U,EAAK3uB,OACDk5B,KAAM5qB,EAAQ4qB,KAAMgU,YAAa5+B,EAAQmiU,YACzCtjS,YAAa7+B,EAAQy7E,aAEzBp7D,EAAKmuX,6BAA6B,GAAK,GAAK,YAC5CnuX,EAAKogC,oBAAsB,SAC3BpgC,EAAKqgC,kBAAoB,SACzBrgC,EAAKk7B,aAAe,SACpBl7B,EAAK6e,YAAc7e,EAAK6e,aAAe,mCAChC7e,GAEX8zB,EAAK9rD,UAAU2yZ,eAAiB,SAAUh7Y,EAAS64L,EAAe4hN,GAC9D,IAAIc,EAEJ,GADA1iN,EAAczxL,SAAS5V,KAAKxE,KAAKsuZ,kBAAkBt7Y,EAAS64L,IACtC,aAAlB74L,EAAQ2a,OACR4gY,EAAc,IAAIh6V,IACNn6B,QAAUpnB,EAAQonB,QAC9Bm0X,EAAYx4Y,OAAS,GACrBw4Y,EAAYv4Y,MAAQ,OAEnB,EACDu4Y,EAAc,IAAI7sW,IACNllD,KAAOi5C,GAAaziC,GAChC,IAAIw7Y,EAAoBh+W,GAAY+9W,EAAY/xZ,MAChD+xZ,EAAYx4Y,OACRy4Y,EAAkBz4Y,OAAS,GAAKy4Y,EAAkBz4Y,OAAS,IAAM/C,EAAQomD,QAAQzsD,OAASqG,EAAQomD,QAAQ1sD,KAC9G6hZ,EAAYv4Y,MACRw4Y,EAAkBx4Y,MAAQ,GAAKw4Y,EAAkBx4Y,MAAQ,IAAMhD,EAAQomD,QAAQ5sD,KAAOwG,EAAQomD,QAAQ3sD,OAE9G8hZ,EAAYjrZ,GAAKuoM,EAAcvoM,GAAK,SACpCirZ,EAAY96V,oBAAsB,SAClC86V,EAAY76V,kBAAoB,SAChC66V,EAAY/2X,QAAUq0K,EAAcr0K,QACpC+2X,EAAY/2X,QAAUq0K,EAAcr0K,QACpC+2X,EAAY7pZ,OACRk5B,KAAM,QAASgU,YAAa5+B,EAAQmiU,YACpCtjS,YAAa7+B,EAAQy7E,aAEzB8/T,EAAY/M,6BAA6B,GAAK,GAAK,YACnD+M,EAAYhgW,aAAe,SAC3BggW,EAAYr8W,YAAc25J,EAAc35J,aAAe,mCACvD25J,EAAczxL,SAAS5V,KAAK+pZ,IAEhC1jU,IACIxiF,KAAeg9Y,KAChBl+V,EAAK9rD,UAAW,mBAAe,GAClCwvF,IACI3jF,EAAS,IACVigD,EAAK9rD,UAAW,eAAW,GAC9BwvF,IACI3jF,EAAS,IACVigD,EAAK9rD,UAAW,eAAW,GAC9BwvF,IACI9iF,GAAUgF,EAAG,GAAKC,EAAG,IAAOktC,KAC7BiN,EAAK9rD,UAAW,aAAS,GAC5BwvF,IACI3jF,KACDigD,EAAK9rD,UAAW,aAAS,GAC5BwvF,IACI3jF,KACDigD,EAAK9rD,UAAW,cAAU,GAC7BwvF,IACI3jF,KACDigD,EAAK9rD,UAAW,gBAAY,GAC/BwvF,IACI3jF,KACDigD,EAAK9rD,UAAW,iBAAa,GAChCwvF,IACI3jF,KACDigD,EAAK9rD,UAAW,gBAAY,GAC/BwvF,IACI3jF,KACDigD,EAAK9rD,UAAW,iBAAa,GAChCwvF,IACI3jF,EAAS,IACVigD,EAAK9rD,UAAW,mBAAe,GAClCwvF,IACI9iF,KAAYi6R,KACb76O,EAAK9rD,UAAW,aAAS,GAC5BwvF,IACI3jF,EAAS,gBACVigD,EAAK9rD,UAAW,uBAAmB,GACtCwvF,IACI3jF,EAAS,SACVigD,EAAK9rD,UAAW,mBAAe,GAClCwvF,IACI3jF,EAAS,IACVigD,EAAK9rD,UAAW,mBAAe,GAClCwvF,IACI3jF,KACDigD,EAAK9rD,UAAW,YAAQ,GAC3BwvF,IACI3iF,EAAesjZ,KAChBrkW,EAAK9rD,UAAW,aAAS,GAC5BwvF,IACI3jF,EAAS,OACVigD,EAAK9rD,UAAW,eAAW,GAC9BwvF,IACI3jF,EAASg/C,GAAgBmlW,UAC1BlkW,EAAK9rD,UAAW,mBAAe,GAClCwvF,IACI9iF,KAAYk/C,KACbE,EAAK9rD,UAAW,cAAU,GAC7BwvF,IACI3jF,KACDigD,EAAK9rD,UAAW,gBAAY,GACxB8rD,GACTygW,ICr5BEt9T,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAkB5D2tB,GAAuB,SAAU4gC,GAKjC,SAAS5gC,EAAMv3C,EAAShS,GACpB,IAAIjB,EAAQorF,EAAO7pF,KAAKtB,KAAMgT,EAAShS,IAAYhB,KAGnD,OAFAD,EAAM4L,OAAS,EACf5L,EAAM0rD,MAAQ,EACP1rD,EA8VX,OAtWAuqF,GAAU//B,EAAO4gC,GAcjB5gC,EAAMlvD,UAAUoX,UAAY,WACxBzS,KAAKw+G,eACLx+G,KAAKukB,cAMTgmC,EAAMlvD,UAAU0wG,OAAS,WACrB/rG,KAAKyuZ,uBAMTlkW,EAAMlvD,UAAUkkC,cAAgB,WAC5B,MAAO,SAMXgrB,EAAMlvD,UAAUiX,QAAU,WACtBtS,KAAKw+G,eACLx+G,KAAK+N,OAAO,cACZo9E,EAAO9vF,UAAUiX,QAAQhR,KAAKtB,MAC9BA,KAAKgB,QAAQ8C,UAAUS,OAAO,YAMlCgmD,EAAMlvD,UAAUmxG,eAAiB,WAE7B,OAAOxsG,KAAKgtG,cADK,YAOrBziD,EAAMlvD,UAAUmsF,kBAAoB,SAAUiF,EAASC,GACnD,IAAK,IAAItuF,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKmvF,GAAUruF,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAE9D,OADWyE,EAAGzE,IAEV,IAAK,SACL,IAAK,WACL,IAAK,eACL,IAAK,gBACL,IAAK,cACL,IAAK,YACD4B,KAAK4qD,iBAKrBL,EAAMlvD,UAAUozZ,oBAAsB,WAClCzuZ,KAAKgB,QAAQ0D,MAAM2tC,UAAY,OAC/BryC,KAAK0uZ,mBACL1uZ,KAAK4qD,eAETL,EAAMlvD,UAAUqzZ,iBAAmB,WAC/B,IAAI1kW,EAAgBhqD,KAAKiqD,mBACrB/oD,EAAMV,SAASosB,eAAe5sB,KAAKgB,QAAQsC,GAAK,gBASpD,OARKpC,KACDA,EAAMV,SAASW,cAAc,QACzBqC,aAAa,KAAMxD,KAAKgB,QAAQsC,GAAK,gBACzCpC,EAAIwD,MAAMqR,OAASi0C,EAAcj0C,OAAS,KAC1C7U,EAAIwD,MAAMsR,MAAQg0C,EAAch0C,MAAQ,KACxC9U,EAAIwD,MAAMiqZ,SAAW,OACrB3uZ,KAAKgB,QAAQW,YAAYT,IAEtBA,GAEXqpD,EAAMlvD,UAAUuvD,YAAc,WAC1B,IAAId,EAAY9pD,KAAK+pD,eACjBC,EAAgBhqD,KAAKiqD,mBACrBxtD,EAAS,EACTkP,EAAS,EACTgqB,EAAgB,IAAIvI,GACpBtQ,EAAM9c,KAAK4uZ,YAAY5kW,GAC3B,GAAIltC,IACArgB,EAASuD,KAAKvD,OACdk5B,EAAc5f,OAAS+zC,EACvBn+C,EAAS3L,KAAK2L,OACVlP,GAAUA,IAAWmuE,EAAAA,GAAU,CAC/B,IAAIikV,EAAapyZ,EAASuD,KAAKwqD,aAC3BskW,EAAanjZ,EACjB3L,KAAK+uZ,eAAeD,EAAaD,EAAaxiZ,KAAKE,IAAIuiZ,GAAchyY,EAAKgtC,KAItFS,EAAMlvD,UAAU0zZ,eAAiB,SAAUxxZ,EAAOshB,EAAK/B,EAAKgtC,GAGxD,IAFA,IAAIklW,EAAMzxZ,EACN0xZ,GAAUA,MAAO,GACdD,EAAMnwY,GAAK,CACd,IAAIqwY,EAAelvZ,KAAKmvZ,cAAcH,EAAKlyY,GACvCoyY,IACApyY,EAAInb,YAAYutZ,EAAatlX,SAC7BolX,EAAMhvZ,KAAKovZ,cAAc7xZ,EAAOshB,EAAKqwY,EAAcF,EAAKC,EAAOnlW,MAI3ES,EAAMlvD,UAAU+zZ,cAAgB,SAAU7xZ,EAAOshB,EAAKqwY,EAAcF,EAAKC,EAAOnlW,GAC5E,IAAIulW,EAAWrvZ,KAAKsvZ,mBAAmBtvZ,KAAKyrD,OACxCujW,IAAQzxZ,GACRyC,KAAKmoB,WAAa9b,KAAK+S,MAAM7hB,EAAQ8xZ,GAAYA,EAAWrvZ,KAAKyrD,MACjEzrD,KAAKmoB,WAAcnoB,KAAKmoB,WAAa,GAAO,EAAImP,OAAQt3B,KAAe,WAAEgf,QAAQ,IAAMhf,KAAKmoB,WAC5F+mY,EAAa77Y,MAAMwI,YAAc7b,KAAKmoB,WAAWjb,WACjDlN,KAAKuvZ,cAAgBP,EAAMhvZ,KAAKmoB,WAAanoB,KAAKyrD,MACzB,eAArBzrD,KAAKo5B,YACLp5B,KAAK8rD,aAAevuD,EAAQyxZ,EAG5BhvZ,KAAKgsD,aAAezuD,EAAQyxZ,IAIhChvZ,KAAKmoB,WAAc6mY,EAAMhvZ,KAAKyrD,MAC9BzrD,KAAKmoB,WAAcnoB,KAAKmoB,WAAa,GAAO,EAAImP,OAAQt3B,KAAe,WAAEgf,QAAQ,IAAMhf,KAAKmoB,WAC5F+mY,EAAa77Y,MAAMwI,YAAc7b,KAAKmoB,WAAWjb,YAErDlN,KAAKwvZ,gBAAgBN,EAAcplW,GACnC,IAAI6kC,EAAkC,eAArB3uF,KAAKo5B,YAAkC61X,EAAMA,MAAQ,GAAO,OAAW,QAAUA,EAAMA,MAAQ,IAIhH,OAHAC,EAAatlX,QAAQpmC,aAAa,YAAa,aAAemrF,EAAY,KAC1EsgU,EAAMA,OAASI,EACfL,GAAOK,GAGX9kW,EAAMlvD,UAAUm0Z,gBAAkB,SAAUN,EAAcplW,GACtD,IAAInb,EAAOugX,EAAatlX,QAAQk+F,UAAUl5F,UACtCib,EAAqC,eAArB7pD,KAAKo5B,YACrBq2X,EAA0C,kBAAvBzvZ,KAAK0vZ,cACxB3iZ,EAAI88C,EAAe,EAAI,EACvB78C,EAAI68C,EAAgB4lW,EAAmB3lW,EAAY,UAClDA,EAAY,MAAiBnb,EAAK54B,OACnC44E,EAAY8gU,IAAqB9gX,EAAK34B,MAAQ,GAAK,KAAQ8zC,EAAY,EAAKnb,EAAK54B,UAC9E44B,EAAK34B,MAAQ,GAAK,KAAQ8zC,EAAY,EAAKnb,EAAK54B,OAAS,GAC5D+xI,EAAOj+F,GAAiB98C,EAAKA,EAAGC,EAAKA,IACnCD,EAAKA,EAAGC,EAAKA,EAAGK,UAAa,wBAA+BshF,EAAY,KAC9E/6C,GAAgBs7W,EAAatlX,QAAQk+F,UAAWggB,IAEpDv9F,EAAMlvD,UAAU8zZ,cAAgB,SAAUH,EAAKlyY,GAC3C,IAAI8sB,EAAU5pC,KAAK2vZ,eAAeX,EAAKlyY,GAEvC,OAAS8sB,QAASA,EAASv2B,MADfrT,KAAK4vZ,gBAAgB9yY,EAAK8sB,KAG1C2gB,EAAMlvD,UAAUs0Z,eAAiB,SAAUX,EAAKlyY,GAC5C,IAAIuwW,EACAwiC,EAEAhzX,EADA2tB,EAAexqD,KAAKsvZ,mBAAmBtvZ,KAAKyrD,OAGhD5uB,EAAI8W,GAAiB,KADR4tF,MAAS,oBAEtB,IAAK,IAAIplI,EAAI,EAAGA,EAAI6D,KAAKmC,SAAUhG,IAC/B0zZ,EAAerlW,EAAexqD,KAAKmC,SACnCkrX,EAAOrtX,KAAK0nI,WAAW5qH,EAAK+yY,EAAc1zZ,EAAI,EAAG6yZ,GACjDnyX,EAAEl7B,YAAY0rX,GAElB,OAAOxwV,GAEX0tB,EAAMlvD,UAAUy0Z,aAAe,SAAUhzY,EAAK+yY,EAAcpzZ,GACxD,IAAI+tD,EAAexqD,KAAKsvZ,mBAAmBtvZ,KAAKyrD,OAC5C3B,EAAY9pD,KAAK+pD,eAGrB,OAFA8lW,GAA+BpzZ,EAAS,EACxCA,EAAWozZ,EAAerlW,GAAkB,EAAKV,EAAwB,GAAZA,GAGjES,EAAMlvD,UAAUqsI,WAAa,SAAU5qH,EAAK+yY,EAAcpzZ,EAAQuyZ,GAC9D,IACIlhW,EAGA7tD,EACA6nJ,EAHAioQ,EAAY/vZ,KAAK8vZ,aAAahzY,EAAK+yY,EAAcpzZ,GACjDqtD,EAAY9pD,KAAK+pD,eAGjBF,EAAqC,eAArB7pD,KAAKo5B,YACrBq2X,EAA0C,kBAAvBzvZ,KAAK0vZ,cACxB/jW,EAActe,GAAYrtC,KAAK2rD,aACnC1rD,GAASqqD,WATLA,EASmB2lU,WAAY8/B,EAAWF,aAAgB7vZ,KAAKwqD,aAAexqD,KAAKmC,UAAa1F,EAAS,IACzGkvD,GACAA,EAAY1rD,GAEhB8vZ,EAAY9vZ,EAAKgwX,WACjB,IAAIn8V,EAAQ+7X,GAAgBpzZ,EAAS,GAQrC,OAHAqrJ,GAAS9sH,GAJA6uB,EAAe/1B,EAAS27X,EAAkB3lW,EAAY,EAI5C7uB,GAFV4uB,EAAgB4lW,EAAkB3lW,EAAaA,GAAaA,EAAYimW,GAAej8X,EAEnEoH,GAHpB2uB,EAAe/1B,EAAS27X,EAAmB3lW,EAAYimW,EAAcjmW,GAAaA,EAAYimW,GAGhE50X,GAD9B0uB,EAAgB4lW,EAAmB3lW,EAAYimW,EAAa,EAAKj8X,EACzByQ,eAAgB,IAAKzG,OAAU,UAChFgwB,EAAOna,GAAiB,OAAQm0G,IAC3BtkJ,aAAa,QAAS,gBACpBsqD,GAEXvD,EAAMlvD,UAAUu0Z,gBAAkB,SAAU9yY,EAAK8sB,GAC7C,IAAInd,EACJ,GAAImd,EAAS,CAETnd,EAAOknB,GAAiB,QADX4tF,MAAS,uBAEtB33F,EAAQjoC,YAAY8qB,GAExB,OAAOA,GAMX89B,EAAMlvD,UAAUi0Z,mBAAqB,SAAU7jW,GAC3C,GAA0B,MAAtBzrD,KAAKwqD,aACL,OAAOxqD,KAAKwqD,aAEhB,IAEItpD,EADA8uZ,EAAY,EAOhB,IAFA9uZ,EAFY,IAGZA,EAHY,IACCmL,KAAK87D,IAAI,EAAG97D,KAAKoxB,MAAMpxB,KAAKolB,IAAIg6B,GAASp/C,KAAKolB,IAAI,KAGxDvwB,EAAM,KACT8uZ,GAAa,GACb9uZ,GAAO,GAEX,KAAOA,EAAM,IACT8uZ,GAAa,GACb9uZ,GAAO,GAKX,OAHIA,GAhBO,IAgBQA,EAhBR,IAgBuB,IAC9BA,EAjBO,GAiBDmL,KAAKoxB,MAAMv8B,EAjBV,KAmBJA,EAAMuqD,EAAQukW,GAEzBzlW,EAAMlvD,UAAU40Z,iBAAmB,SAAUC,EAAUvlW,EAAUm9F,GAC7D,IAAIh6F,EAQJ,OAPInD,KACAmD,EAAOoiW,EAAStjY,eAAe+9B,EAASrnD,GAAK,aAEzCwqD,EAAKrtD,WAAW6E,YAAYwoD,GAEhCA,EAAOna,GAAiB,OAAQm0G,IAE7Bh6F,GAOXvD,EAAMlvD,UAAU80Z,gBAAkB,SAAUxlW,EAAUt4B,EAAc1mB,GAChE,IAAIukZ,EACApmW,EACA2B,EACAgyB,EACAthF,EACA2rJ,EACAh6F,EACAjE,EAAoC,eAArB7pD,KAAKo5B,YACpBg3X,EAAmBzlW,EAASppD,qBAAqB,OACrD,IAAKpF,EAAI,EAAGA,EAAIi0Z,EAAiB3zZ,OAAQN,IAAK,CACtCi0Z,EAAiBj0Z,KACjB+zZ,EAAWE,EAAiBj0Z,IAEhC,MAEJ,GAAI+zZ,EAAU,CACVpmW,EAAY9pD,KAAK+pD,eACjB+9F,GACIxkJ,GAAMqnD,EAASrnD,GAAK,UAAW03B,GAAM,EAAGC,GAAM,EAAGC,GAAO2uB,EAAe,EAAIC,EAC3E3uB,GAAO0uB,EAAeC,EAAY,EAAIhsB,OAAU99B,KAAKqwZ,YAAa9rX,eAAgB,IAClFg9F,MAAS,oBAEbzzE,EAAO9tD,KAAKiwZ,iBAAiBC,EAAUvlW,EAAUm9F,GACjDr8F,EAAQzrD,KAAKyrD,MACbgyB,EAAOz9E,KAAK2L,OAAS3L,KAAKuvZ,cAC1B,IACIlmU,GADQx/B,EAAex3B,EAAatlB,EAAIslB,EAAarlB,GACrCy+C,EAAS9/C,EAAS8xE,EACtC3vB,EAAKtqD,aAAa,YAAa,cAAgBqmD,EAAiBw/B,EAAO,GAAO,OAAW,QAAUA,EAAO,KAAS,KACnH6mU,EAASvuZ,YAAYmsD,KAG7BvD,EAAMlvD,UAAU4uD,iBAAmB,WAC/B,OAAO,IAAI78B,GAAKptB,KAAKgB,QAAUhB,KAAKgB,QAAQ4K,wBAAwBoK,MAAQ,EAAGhW,KAAKgB,QAAUhB,KAAKgB,QAAQ4K,wBAAwBmK,OAAS,IAEhJw0C,EAAMlvD,UAAU0uD,aAAe,WAC3B,OAAO/pD,KAAKszB,WAEhBi3B,EAAMlvD,UAAUuzZ,YAAc,SAAU5kW,GACpC,IAAIsmW,EAEAxzY,EADAgtC,EAAY9pD,KAAK+pD,eAErB,GAAI/pD,KAAKgB,UACLsvZ,EAAa9vZ,SAASosB,eAAe5sB,KAAKgB,QAAQsC,GAAK,iBACvC,CAQZ,GADAwZ,EAAM62B,GAAiB,OALnBrwC,GAAMtD,KAAKgB,QAAQsC,GAAK,aACxB0S,MAA4B,eAArBhW,KAAKo5B,YAAgC4wB,EAAch0C,MAAQ,IAAO8zC,EAAY,KACrF/zC,OAA6B,eAArB/V,KAAKo5B,YAA+B0wB,EAAaE,EAAcj0C,OAAS,IAAO,KACvFrR,MAAO,sBAGP4rZ,EAAW/+Y,WAAW9U,OAAS,EAC/B,IAAK,IAAIN,EAAIm0Z,EAAW/+Y,WAAW9U,OAAS,EAAGN,GAAK,EAAGA,IACnDm0Z,EAAW/+Y,WAAWpV,GAAGsE,WAAW6E,YAAYgrZ,EAAW/+Y,WAAWpV,IAG9Em0Z,EAAW3uZ,YAAYmb,GAG/B,OAAOA,GAKXytC,EAAMlvD,UAAUkpB,WAAa,aAM7BgmC,EAAMlvD,UAAUmjH,aAAe,aAG/B3zB,IACI3jF,EAAS,IACVqjD,EAAMlvD,UAAW,gBAAY,GAChCwvF,IACI3jF,EAAS,MACVqjD,EAAMlvD,UAAW,oBAAgB,GACpCwvF,IACI3jF,EAAS,eACVqjD,EAAMlvD,UAAW,mBAAe,GACnCwvF,IACI3jF,EAAS,kBACVqjD,EAAMlvD,UAAW,qBAAiB,GACrCwvF,IACI3jF,EAAS,QACVqjD,EAAMlvD,UAAW,mBAAe,GACnCwvF,IACI3jF,EAAS,KACVqjD,EAAMlvD,UAAW,iBAAa,GACjCwvF,IACI3jF,EAAS,OACVqjD,EAAMlvD,UAAW,mBAAe,GACnCwvF,IACI3jF,EAAS,MACVqjD,EAAMlvD,UAAW,cAAU,GACvBkvD,GACTghD,I7VijBSglT,GAAgB,SAAUxzZ,GAWjC,OAVIA,IAIIA,OAHiB5B,IAAjB4B,EAAIu6C,eAA8Cn8C,IAApB4B,EAAIg6C,kBACjB57C,IAAjB4B,EAAIiuZ,eAA8C7vZ,IAApB4B,EAAIgiD,kBACrB5jD,IAAb4B,EAAI2J,KACEo/C,GAGAqB,IAGPpqD,G8V76BPyzZ,GAAiC,WACjC,SAASA,EAAgB/4X,EAAMg5X,EAAWC,GACtC1wZ,KAAK6tB,SAAW,KAChB7tB,KAAK0wZ,WAAY,EACjB1wZ,KAAK0yC,UAAYjb,EACjBz3B,KAAKgB,QAAU4xC,GAAkB5yC,KAAK0yC,WACtC1yC,KAAK6hF,YAAc4uU,EACnBzwZ,KAAK0wZ,UAAYA,EACjB1wZ,KAAK6tB,SAAW6iY,EAAY,IAAI5iY,GAAgB,IAAI6+D,GA65BxD,OA35BA6jU,EAAgBn1Z,UAAU2iX,UAAY,SAAU0lB,EAAQjqU,GACpDiqU,EAAOh/X,MAAM+0D,OAASA,GAG1B+2V,EAAgBn1Z,UAAUs1Z,UAAY,WAClC3wZ,KAAK4wZ,aAAe5wZ,KAAKgB,QAAQ0M,uBAAuB,wBAAwB,GAChF1N,KAAK6wZ,gBAAkB7wZ,KAAKgB,QAAQ0M,uBAAuB,mBAAmB,GAC9E1N,KAAK8wZ,eAAiB9wZ,KAAKgB,QAAQ0M,uBAAuB,kBAAkB,GAC5E1N,KAAK+wZ,gBAAkB/wZ,KAAKgB,QAAQ0M,uBAAuB,mBAAmB,IAElF8iZ,EAAgBn1Z,UAAU03C,gBAAkB,WAExC,OADmBA,GAAgB/yC,KAAK0yC,YAG5C89W,EAAgBn1Z,UAAU21Z,aAAe,SAAUhwZ,EAAS6tH,EAAe60Q,GACvE,OAAI1jY,KAAK0yC,WAAa1xC,GAAWA,EAAQsC,GACjCtC,EAAQsC,GAAGpG,MAAM,iBAAiBT,OAAS,GAAKuE,EAAQsC,GAAGpG,MAAM,aAAaT,OAAS,EAChFuD,KAAK4wZ,aAEZ/hS,GAAmC,aAAlBA,EACV7uH,KAAK6wZ,gBAEP7vZ,aAAmBuzD,GACjBv0D,KAAK8wZ,eAGL9wZ,KAAK+wZ,gBAGbrtB,GAEX8sB,EAAgBn1Z,UAAU41Z,iBAAmB,SAAUjwZ,EAASkwZ,EAAertD,GAC3E,IAAIstD,EAAgBD,EACpB,GAAIrtD,GAAc7jW,KAAK0yC,WAAa1xC,GAAWA,EAAQsC,GAAI,CACnDtC,EAAQsC,GAAGpG,MAAM,iBAAiBT,OAAS,GAC3C00Z,EAAgBttD,EAAWj3U,eAAe5sB,KAAK0yC,UAAY,oBAC3Dw+W,EAAgB,MAEXlwZ,EAAQsC,GAAGpG,MAAM,aAAaT,OAAS,EAC5C00Z,EAAgBttD,EAAWj3U,eAAe5sB,KAAK0yC,UAAY,iBAEtD1xC,aAAmBuzD,IACxB48V,EAAgBttD,EAAWj3U,eAAe5sB,KAAK0yC,UAAY,gBAC3Dw+W,EAAgB,MAGhBC,EAAgBttD,EAAWj3U,eAAe5sB,KAAK0yC,UAAY,iBAE/D,IAAI0wP,EAAepjS,KAAKoxZ,gBAAgBpwZ,EAASkwZ,GAAiBC,GAClEA,EAAgB/tH,EAAavmQ,EACzBumQ,EAAatmR,MACb+mV,EAAazgE,EAAatmR,KAGlC,OAAS+f,EAAGs0X,EAAer0Y,IAAK+mV,IAEpC2sD,EAAgBn1Z,UAAU+1Z,gBAAkB,SAAUpwZ,EAAS0iY,GAC3D,IAAIwb,EAEAr7C,EADA66C,EAAY1+Y,KAAKgxZ,aAAahwZ,GAElC,GAAI0iY,GAAUgb,EAAW,CACrB,GAAIA,KACAQ,EAAWR,EAAU9xX,eAAe5rB,EAAQsC,GAAK,mBAChCo7Y,IAAc1+Y,KAAK8wZ,eAAgB,CAChD,IAAIO,EAAYrxZ,KAAK8wZ,eACrB5R,EAAWmS,EAAUzkY,eAAe5rB,EAAQsC,GAAK,iBACjDugW,EAAawtD,EAGhBnS,IACDA,EAAWl/Y,KAAK6hF,YAAYs9T,eAAe,KAAO77Y,GAAItC,EAAQsC,GAAK,kBACnEogY,EAAO/hY,YAAYu9Y,IAG3B,OAASriX,EAAGqiX,EAAUpiY,IAAK+mV,IAE/B2sD,EAAgBn1Z,UAAUi2Z,cAAgB,SAAUtwZ,EAAS0iY,EAAQ6tB,EAAWlkZ,EAAWqxY,EAAW8S,GAC9FxwZ,aAAmBo2D,GACnBp3D,KAAKy/S,gBAAgBz+S,EAAS0iY,EAAQ6tB,EAAWlkZ,EAAWqxY,EAAW8S,GAElExwZ,aAAmBizD,GACxBj0D,KAAKyxZ,mBAAmBzwZ,EAAS0iY,EAAQr2X,EAAWqxY,GAE/C19Y,aAAmB0gD,GACxB1hD,KAAK0xZ,kBAAkB1wZ,EAAS0iY,EAAQr2X,EAAWqxY,GAE9C19Y,aAAmB8xD,GACxB9yD,KAAKujC,kBAAkBviC,EAAS0iY,EAAQr2X,EAAWqxY,GAE9C19Y,aAAmBuzD,GACxBv0D,KAAK2xZ,oBAAoB3wZ,EAAS0iY,EAAQr2X,EAAWqxY,GAEhD19Y,aAAmByzD,GACxBz0D,KAAK4xZ,kBAAkB5wZ,EAAS0iY,EAAQ6tB,EAAWlkZ,EAAWqxY,GAG9D1+Y,KAAK6xZ,WAAW7wZ,EAAS0iY,EAAQr2X,EAAWqxY,IAGpD8R,EAAgBn1Z,UAAUy2Z,uBAAyB,SAAU/kZ,EAAGC,EAAG6/N,EAAGnsI,EAAGgjS,EAAQ10V,GAC7EjiC,GAAKA,EAAIiiC,EAAE44S,IAAM54S,EAAEyc,MACnBz+C,GAAKA,EAAIgiC,EAAE24S,IAAM34S,EAAEyc,MACnB,IAAIz4C,GACAgD,MAAO62N,EAAI79L,EAAEyc,MAAO11C,OAAQ2qF,EAAI1xD,EAAEyc,MAClC1+C,EAAGA,EAAI,GAAKC,EAAGA,EAAI,GAAK4wB,KAAM,cAAeE,OAAQ,OAAQvc,MAAO,EACpEiuB,OAAQ,GAAKC,OAAQ,GAAKoC,YAAa,EACvCC,UAAW,MAAOrkC,QAAS,EAC3B+pB,SAAS,EAAMl0B,GAAIogY,EAAOpgY,GAAK,oBAE/ByuZ,EAAe/xZ,KAAK+yC,kBACxB/yC,KAAK6hF,YAAYo9T,sBAAsB8S,EAAc/+Y,IAKzDw9Y,EAAgBn1Z,UAAU22Z,kBAAoB,SAAUhxZ,EAAS0iY,EAAQr2X,GACrE,IAAI2I,EAAQhV,EAAQ0rC,WAAW12B,OAAS,EACpCD,EAAS/U,EAAQ0rC,WAAW32B,QAAU,EACtChJ,EAAI/L,EAAQ6K,QAAUmK,EAAQhV,EAAQ2rC,MAAM5/B,EAC5CC,EAAIhM,EAAQiL,QAAU8J,EAAS/U,EAAQ2rC,MAAM3/B,EACjDD,GAAKA,EAAIM,EAAUu6U,IAAMv6U,EAAUo+C,MACnCz+C,GAAKA,EAAIK,EAAUs6U,IAAMt6U,EAAUo+C,MACnC,IAAIz4C,GACAgD,MAAOA,EAAQ3I,EAAUo+C,MAAO11C,OAAQA,EAAS1I,EAAUo+C,MAC3D1+C,EAAGA,EAAGC,EAAGA,EAAG4wB,KAAM,cAAeE,OAAQ,UAAWvc,MAAOvgB,EAAQ6rC,YACnE2C,OAAQxuC,EAAQ2rC,MAAM5/B,EAAG0iC,OAAQzuC,EAAQ2rC,MAAM3/B,EAAG6kC,YAAa,EAC/DC,UAAW,GAAIrkC,QAAS,EAAG26B,aAAc,EACzC5Q,SAAS,EAAMl0B,GAAIogY,EAAOpgY,GAAK,eAAgBi+H,MAAO,yBAE1DvhI,KAAK6hF,YAAYl+C,cAAc+/V,EAAQ1wX,EAAShT,KAAK0yC,YAEzD89W,EAAgBn1Z,UAAUmyF,SAAW,SAAUk2S,EAAQ1wX,GACnDhT,KAAK6hF,YAAY2L,SAASk2S,EAAQ1wX,IAEtCw9Y,EAAgBn1Z,UAAU86B,SAAW,SAAUutW,EAAQ1wX,GACnDhT,KAAK6hF,YAAY1rD,SAASutW,EAAQ1wX,EAAShT,KAAK0yC,YAEpD89W,EAAgBn1Z,UAAU42Z,mBAAqB,SAAUjxZ,EAAS0iY,EAAQ39U,EAAa2F,EAAawK,EAAqB7oD,EAAW6kZ,EAASC,GACzI,IAAI3lZ,EAAOxL,EAAQ6K,QAAU7K,EAAQ0rC,WAAW12B,MAAQhV,EAAQ2rC,MAAM5/B,EAClEL,EAAM1L,EAAQiL,QAAUjL,EAAQ0rC,WAAW32B,OAAS/U,EAAQ2rC,MAAM3/B,EAClE+I,EAAS/U,EAAQ0rC,WAAW32B,OAC5BC,EAAQhV,EAAQ0rC,WAAW12B,MAC3B+vC,EAAcuQ,GAAkBvP,SAChC/mD,KAAKoyZ,gBAAgBpxZ,EAAS0iY,EAAQr2X,EAAW6oD,EAAqBg8V,GACtElyZ,KAAKqyZ,kBAAkBrxZ,EAAS0iY,EAAQr2X,EAAW6oD,EAAqBg8V,IAE5ElyZ,KAAKq8U,aAAar7U,EAAS0iY,EAAQr2X,EAAW8kZ,GAC9C,IAAIG,EAAYtxZ,EAAQ0rC,WAAW12B,MAAQ01C,EACvC6mW,EAAavxZ,EAAQ0rC,WAAW32B,OAAS21C,EACzC4mW,GAAa,IAAMC,GAAc,KAE7Br8V,EAAsBG,GAAoBrO,iBAC1ChoD,KAAKwyZ,qBAAqB,kBAAmBxxZ,EAASwL,EAAME,EAAKg3X,EAAQntU,GAAcL,EAAqB,mBAAoBnQ,EAAcuQ,GAAkBtO,gBAAiB36C,OAAWlS,EAAW+2Z,GAAWx+R,aAAc,uEAAoEv4H,EAAW,uCAE/S+6D,EAAsBG,GAAoB1O,iBAC1C3nD,KAAKwyZ,qBAAqB,kBAAmBxxZ,EAASwL,EAAOwJ,EAAOtJ,EAAKg3X,EAAQntU,GAAcL,EAAqB,mBAAoBnQ,EAAcuQ,GAAkB3O,gBAAiBt6C,OAAWlS,EAAW+2Z,GAAWx+R,aAAc,wEAAqEv4H,EAAW,uCAExT+6D,EAAsBG,GAAoBvO,iBAC1C9nD,KAAKwyZ,qBAAqB,kBAAmBxxZ,EAASwL,EAAME,EAAMqJ,EAAQ2tX,EAAQntU,GAAcL,EAAqB,mBAAoBnQ,EAAcuQ,GAAkBxO,gBAAiBz6C,OAAWlS,EAAW+2Z,GAAWx+R,aAAc,0EAAuEv4H,EAAW,uCAE3T+6D,EAAsBG,GAAoB5O,iBAC1CznD,KAAKwyZ,qBAAqB,kBAAmBxxZ,EAASwL,EAAOwJ,EAAOtJ,EAAMqJ,EAAQ2tX,EAAQntU,GAAcL,EAAqB,mBAAoBnQ,EAAcuQ,GAAkB7O,gBAAiBp6C,OAAWlS,EAAW+2Z,GAAWx+R,aAAc,2EAAwEv4H,EAAW,wCAGxU+6D,EAAsBG,GAAoBxO,aAC1C7nD,KAAKwyZ,qBAAqB,cAAexxZ,EAASwL,EAAOwJ,EAAQ,EAAGtJ,EAAKg3X,EAAQntU,GAAcL,EAAqB,eAAgBnQ,EAAcuQ,GAAkBzO,YAAax6C,OAAWlS,EAAW+2Z,GAAWx+R,aAAc,kEAA+Dv4H,EAAW,mCAE1S+6D,EAAsBG,GAAoBzO,aAC1C5nD,KAAKwyZ,qBAAqB,cAAexxZ,EAASwL,EAAOwJ,EAAQ,EAAGtJ,EAAMqJ,EAAQ2tX,EAAQntU,GAAcL,EAAqB,eAAgBnQ,EAAcuQ,GAAkB1O,YAAav6C,OAAWlS,EAAW+2Z,GAAWx+R,aAAc,qEAAkEv4H,EAAW,mCAEtT+6D,EAAsBG,GAAoBtO,YAC1C/nD,KAAKwyZ,qBAAqB,aAAcxxZ,EAASwL,EAAME,EAAMqJ,EAAS,EAAG2tX,EAAQntU,GAAcL,EAAqB,cAAenQ,EAAcuQ,GAAkBvO,WAAY16C,OAAWlS,EAAW+2Z,GAAWx+R,aAAc,mEAAgEv4H,EAAW,kCAEzS+6D,EAAsBG,GAAoB3O,YAC1C1nD,KAAKwyZ,qBAAqB,aAAcxxZ,EAASwL,EAAOwJ,EAAOtJ,EAAMqJ,EAAS,EAAG2tX,EAAQntU,GAAcL,EAAqB,cAAenQ,EAAcuQ,GAAkB5O,WAAYr6C,OAAWlS,EAAW+2Z,GAAWx+R,aAAc,oEAAiEv4H,EAAW,mCAG1Tq1Z,EAAgBn1Z,UAAUo3Z,qBAAuB,SAAU/sZ,EAAUg+X,EAAQ39U,EAAamQ,EAAqB7oD,EAAWqlZ,EAAiBC,EAAiBC,GACxJ,IAGIz2Z,EACAytC,EAJAmN,EAAcrxC,EAASqxC,YACvBgI,EAAcr5C,EAASq5C,YACvBhtC,EAAUrM,EAASqM,QAKvB,GAFA/R,KAAKwyZ,qBAAqB,uBAAwBzgZ,EAASglC,EAAYhqC,EAAGgqC,EAAY/pC,EAAG02X,EAAQntU,GAAcL,EAAqB,wBAAyBnQ,EAAcuQ,GAAkBu8V,gBAAiBxlZ,EAAWqlZ,OAAiBv3Z,GAAau4H,aAAc,wDAAqDv4H,EAAW,yCACrU6E,KAAKwyZ,qBAAqB,uBAAwBzgZ,EAASgtC,EAAYhyC,EAAGgyC,EAAY/xC,EAAG02X,EAAQntU,GAAcL,EAAqB,wBAAyBnQ,EAAcuQ,GAAkBw8V,gBAAiBzlZ,EAAWslZ,OAAiBx3Z,GAAau4H,aAAc,wDAAqDv4H,EAAW,yCACjUy3Z,EACA,IAAuB,aAAlBltZ,EAASgB,MAAyC,WAAlBhB,EAASgB,OAAsBhB,EAASojC,SAASrsC,OAAS,EAC3F,IAAKN,EAAI,EAAGA,EAAIuJ,EAASojC,SAASrsC,OAAS,EAAGN,IAC1CytC,EAAUlkC,EAASojC,SAAS3sC,GAC5B6D,KAAKwyZ,qBAAsB,kBAAoBr2Z,EAAI,GAAK4V,EAAS63B,EAAQ9V,MAAM/mB,EAAG68B,EAAQ9V,MAAM9mB,EAAG02X,GAAQ,EAAM39U,EAAcuQ,GAAkBu8V,gBAAiBxlZ,EAAWqlZ,EAAiB,KAAM,KAAMv2Z,QAI9M,IAAKA,EAAI,EAAGA,EAAIuJ,EAASojC,SAASrsC,OAAQN,IAAK,CAC3C,IAAIusC,EAAMhjC,EAASojC,SAAS3sC,GAC5B6D,KAAK+yZ,uBAAuB,eAAiB52Z,EAAI,GAAI4V,EAAS22B,EAAKg7V,EAAQntU,GAAcL,EAAqB,wBAAyB7oD,GAInJ,GAAsB,WAAlB3H,EAASgB,KACT,IAAKvK,EAAI,EAAGA,EAAIuJ,EAASojC,SAASrsC,OAAQN,IAAK,CAC3C,IAAI62Z,EAAYttZ,EAASojC,SAAS3sC,GAC9B82Z,EAAe/4W,GAAMC,aAAa64W,EAAU5vW,QAC1C4vW,EAAUnmW,aAD0CmmW,EAAU5vW,OAEpEpjD,KAAKwyZ,qBAAqB,gBAAkBr2Z,EAAI,GAAK,KAAM4V,EAASkhZ,EAAYlmZ,EAAGkmZ,EAAYjmZ,EAAG02X,EAAQntU,GAAcL,EAAqB,wBAAyBnQ,EAAcuQ,GAAkBu8V,gBAAiBxlZ,OAAWlS,OAAWA,GAAau4H,aAAc,wDAAqDv4H,EAAW,oCACpUo7D,GAAcL,EAAqB,yBACnCl2D,KAAKkzZ,iBAAiB,eAAiB/2Z,EAAI,GAAK,KAAM4V,EAAS2xX,EAAQsvB,EAAUr7X,OAAO,GAAKuiB,GAAMC,aAAa64W,EAAU5vW,QAA6B4vW,EAAUnmW,aAA7BmmW,EAAU5vW,OAAiC/1C,GAEnL4lZ,EAAe/4W,GAAMC,aAAa64W,EAAU3qX,QAA6B2qX,EAAUlmW,aAA7BkmW,EAAU3qX,OAChEroC,KAAKwyZ,qBAAqB,gBAAkBr2Z,EAAI,GAAK,KAAM4V,EAASkhZ,EAAYlmZ,EAAGkmZ,EAAYjmZ,EAAG02X,EAAQntU,GAAcL,EAAqB,wBAAyBnQ,EAAcuQ,GAAkBw8V,gBAAiBzlZ,OAAWlS,OAAWA,GAAau4H,aAAc,wDAAqDv4H,EAAW,oCACpUo7D,GAAcL,EAAqB,yBACnCl2D,KAAKkzZ,iBAAiB,eAAiB/2Z,EAAI,GAAK,KAAM4V,EAAS2xX,EAAQsvB,EAAUr7X,OAAO,GAAKuiB,GAAMC,aAAa64W,EAAU3qX,QAA6B2qX,EAAUlmW,aAA7BkmW,EAAU3qX,OAAiCh7B,KAK/LmjZ,EAAgBn1Z,UAAU03Z,uBAAyB,SAAUzvZ,EAAIoC,EAAUkkC,EAAS85V,EAAQ/+X,EAAYqqC,GACpG,IAAI5V,EACA5B,EACA/6B,EACA8mB,EAAI,EACR,IAAKA,EAAI,EAAGA,EAAIqmB,EAAQjS,OAAOl7B,OAAS,EAAG8mB,IACvC9mB,EAASy9C,GAAM8F,eAAepW,EAAQjS,OAAOpU,GAAIqmB,EAAQjS,OAAOpU,EAAI,IACpE6V,EAAewQ,EAAQjS,OAAOpU,GAAGvW,EAAEgS,QAAQ,KAAO4qB,EAAQjS,OAAOpU,EAAI,GAAGvW,EAAEgS,QAAQ,GAAM,aAAe,WACvGwY,EAAW/6B,GAAU,GACrBuD,KAAKmzZ,sBAAuB7vZ,EAAK,KAAOigB,EAAI,GAAK7d,GAAakkC,EAAQjS,OAAOpU,GAAGxW,EAAI68B,EAAQjS,OAAOpU,EAAI,GAAGxW,GAAK,GAAQ68B,EAAQjS,OAAOpU,GAAGvW,EAAI48B,EAAQjS,OAAOpU,EAAI,GAAGvW,GAAK,EAAK02X,EAAQlsW,EAAS4B,EAAa4V,IAGnNwhX,EAAgBn1Z,UAAU83Z,sBAAwB,SAAU7vZ,EAAIoC,EAAUqH,EAAGC,EAAG02X,EAAQlsW,EAAS4B,EAAa4V,GAC1G,IAAIjyB,EACA2jF,EACAqsD,EACgB,eAAhB3zH,GACArc,EAAO,4BACP2jF,GAAK,GACLqsD,GAAK,IAGLhwI,EAAO,4BACP2jF,GAAK,EACLqsD,GAAK,IAET,IAAI/5I,GACAjG,GAAKA,EAAIiiC,EAAE44S,IAAM54S,EAAEyc,MAASi1C,EAAG1zF,GAAKA,EAAIgiC,EAAE24S,IAAM34S,EAAEyc,MAASshG,EAAGxrI,MAAO,EACrEqc,KAAM,UAAWE,OAAQ,QAAS+T,YAAa,EAAGC,UAAW,GAAIt1C,KAAMugB,EACvE/G,MAAO,GAAID,OAAQ,GAAIy5B,OAAQ,EAAGC,OAAQ,EAAGhiC,QAAS,EAAG+pB,QAASA,EAASl0B,GAAIA,GAEnFtD,KAAK6hF,YAAY1rD,SAASutW,EAAQ1wX,EAAShT,KAAK0yC,YAEpD89W,EAAgBn1Z,UAAU+2Z,gBAAkB,SAAUpxZ,EAAS0iY,EAAQr2X,EAAW6oD,EAAqBg8V,GACnG,IAAIngZ,EAAU/Q,EAEVw2B,KAAW0+B,EAAsBG,GAAoBtP,QACrDmrW,IACA16X,GAAU,GAEd,IAAIxkB,EAAUhT,KAAKozZ,kBAAkBrhZ,EAAS1E,GAC9C2F,EAAQ4qB,KAAO,OACf5qB,EAAQ8qB,OAAS,QACjB9qB,EAAQ6+B,YAAc,EACtB7+B,EAAQ8+B,UATQ,MAUhB9+B,EAAQwkB,QAAUA,EAClB,IAAIi0B,EAAQp+C,EAAUo+C,MACtBz4C,EAAQjG,GAAK0+C,EACbz4C,EAAQhG,GAAKy+C,EACbz4C,EAAQgD,OAASy1C,EACjBz4C,EAAQ+C,QAAU01C,EAClBz4C,EAAQ1P,GAAK,YACb0P,EAAQuuH,MAAQ,uBAChB,IAAIl8E,GAAet4C,EAAGgF,EAAQ26B,WAAW12B,MAAQjE,EAAQ46B,MAAM5/B,EAAI0+C,EAAOz+C,GAAI,IAC1EwyC,GAAazyC,EAAGgF,EAAQ26B,WAAW12B,MAAQjE,EAAQ46B,MAAM5/B,EAAI0+C,EAAOz+C,EAAG,GAC3EgG,EAAQqyC,WAAaA,EACrBryC,EAAQwsC,SAAWA,EACnBx/C,KAAK6hF,YAAY2L,SAASk2S,EAAQ1wX,IAEtCw9Y,EAAgBn1Z,UAAU63Z,iBAAmB,SAAU5vZ,EAAIyO,EAAS2xX,EAAQnmY,EAAOshB,EAAKxR,GACpF,IACI2F,EAAUhT,KAAKozZ,kBAAkBrhZ,EAAS1E,GAC9C2F,EAAQ1P,GAAKA,EACb0P,EAAQ8qB,OAAS,QACjB9qB,EAAQ6+B,YAAc,EACtB7+B,EAAQ8+B,UALQ,MAMhB9+B,EAAQ4qB,KAAO,OACf5qB,EAAQuuH,MAAQ,wBAChBvuH,EAAQjG,EAAI,EACZiG,EAAQhG,EAAI,EACZ,IAAIy+C,EAAQp+C,EAAUo+C,MAKlBpG,GAAet4C,GAJTxP,EAAMwP,EAAIM,EAAUu6U,IAAMn8R,EAIVz+C,GAHhBzP,EAAMyP,EAAIK,EAAUs6U,IAAMl8R,GAIhCjM,GAAazyC,GAHP8R,EAAI9R,EAAIM,EAAUu6U,IAAMn8R,EAGVz+C,GAFd6R,EAAI7R,EAAIK,EAAUs6U,IAAMl8R,GAGlCz4C,EAAQqyC,WAAaA,EACrBryC,EAAQwsC,SAAWA,EACnBx/C,KAAK6hF,YAAY2L,SAASk2S,EAAQ1wX,IAEtCw9Y,EAAgBn1Z,UAAUm3Z,qBAAuB,SAAUlvZ,EAAIoC,EAAU2oB,EAAIC,EAAIo1W,EAAQlsW,EAAS4nX,EAAgBpwW,EAAGqkX,EAAWnB,EAASnT,EAAWjgY,EAAOzb,GACvJ,IAAI0O,EAAUrM,EACVkH,EAAS,EACTw2Y,GAAar2Y,EAAGshB,EAAIrhB,EAAGshB,GAC3B,GAA4B,IAAxBvc,EAAQ86B,aAAiD,IAA5B96B,EAAQ+6B,gBAAuB,CAC5D,IAAIlC,EAASL,KACbiB,GAAaZ,EAAQ74B,EAAQ86B,YAAc96B,EAAQ+6B,gBAAiB/6B,EAAQlG,QAASkG,EAAQ9F,SAC7Fm3Y,EAAWz4W,GAAuBC,EAAQw4W,GAE9C,IAAIpwY,EAAUhT,KAAKozZ,kBAAkBrhZ,GACrCiB,EAAQ8qB,OAAS,QACjB9qB,EAAQ6+B,YAAc,OACR12C,IAAV2jB,GACAlS,EAAS,EACToG,EAAQ1P,GAAK,cAAgBwb,EAC7B9L,EAAQ4qB,KAAO,YAGfhxB,EAAS,EACToG,EAAQ4qB,KAAOy1X,EAAY,UAAY,SAE3CrgZ,EAAQgO,SAAWoiY,EAASr2Y,EAAIiiC,EAAE44S,IAAM54S,EAAEyc,MAC1Cz4C,EAAQiO,SAAWmiY,EAASp2Y,EAAIgiC,EAAE24S,IAAM34S,EAAEyc,MAC1Cz4C,EAAQpG,OAASA,EACjBoG,EAAQuO,MAAQ,EAChBvO,EAAQ1P,GAAKA,EACb0P,EAAQwkB,QAAUA,EAClBxkB,EAAQuuH,MAAQl+H,EACZgwZ,IACArgZ,EAAQuuH,OAAS,gBAEjB2wR,IACAl/Y,EAAQwkB,SAAU,GAEtBx3B,KAAK6hF,YAAYn+C,WAAWggW,EAAQ1wX,EAASosY,EAAgBL,IAEjEyR,EAAgBn1Z,UAAUghV,aAAe,SAAU32U,EAAUg+X,EAAQr2X,EAAW8kZ,GAC5E,IAAIpgZ,EAAUrM,EACVsN,EAAUhT,KAAKozZ,kBAAkBrhZ,EAAS1E,GAC9C2F,EAAQjG,GAAKM,EAAUo+C,MACvBz4C,EAAQhG,GAAKK,EAAUo+C,MACvBz4C,EAAQgD,OAAS3I,EAAUo+C,MAC3Bz4C,EAAQ+C,QAAU1I,EAAUo+C,MAC5Bz4C,EAAQ4qB,KAAO,cACf5qB,EAAQ8qB,OAAS,UACjB9qB,EAAQ6+B,YAAc,GACtB7+B,EAAQ8+B,UAAY,MACpB9+B,EAAQuuH,MAAQ,mBAChBvuH,EAAQ1P,GAAK,aACR6uZ,IACDn/Y,EAAQuuH,OAAS,eAErBvuH,EAAQo1B,aAAe,EACvB,IAAIs2W,EAAY1+Y,KAAKgxZ,aAAatrZ,EAAU,YAC5C1F,KAAK6hF,YAAYl+C,cAAc+/V,EAAQ1wX,EAAShT,KAAK0yC,eAAWv3C,GAAW,EAAMujZ,IAErF8R,EAAgBn1Z,UAAUi4Z,kBAAoB,SAAU19V,EAAc8tU,EAAQr2X,GAE1E,IAAK,IADD0E,EAAU6jD,EAAa7jD,QAClB3T,EAAK,EAAGyE,EAAK+yD,EAAaiC,YAAaz5D,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAClE,IAAIrB,EAAM8F,EAAGzE,GAETglZ,GADU,IAAI1hW,QACH,GACXllD,EAAOO,EAAImzC,UACfkzW,EAAWztV,GAAsBC,EAAc74D,EAAKsQ,IAC3CN,GAAKq2Y,EAASr2Y,EAAIM,EAAUu6U,IAAMv6U,EAAUo+C,MACrD23V,EAASp2Y,GAAKo2Y,EAASp2Y,EAAIK,EAAUs6U,IAAMt6U,EAAUo+C,MACjD1uD,EAAIy6B,UACJz6B,EAAIy6B,WAAWo+B,EAAa7P,YAAcsQ,GAAoBi1V,aAElE,IAAIv1T,EAAS/1F,KAAKozZ,kBAAkBrhZ,GACpCgkF,EAAOzyF,GAAKvG,EAAI06B,KAAO,cACvBs+D,EAAOn4D,KAAO7gC,EAAI40D,gBAClBokC,EAAOj4D,OAAS/gC,EAAIo4U,YACpBp/O,EAAOlkD,YAAc90C,EAAI0xF,YACzBsH,EAAO/0E,QAAUoiY,EAASr2Y,EAC1BgpF,EAAO90E,QAAUmiY,EAASp2Y,EAC1B+oF,EAAOnpF,OAAoB,GAAX7P,EAAI+vB,KACpBipE,EAAOwrC,MAAQ,8BACfxrC,EAAOx0E,MAAQ,EACfw0E,EAAOv+D,QAAUz6B,EAAIy6B,QACrBu+D,EAAOtoF,QAAU,EACjBzN,KAAK6hF,YAAYn+C,WAAWggW,EAAQ3tS,EAAQ,GAAK29B,aAAc32H,EAAI06B,KAAO,gBAC1E,IACI2P,KAEJA,EAAkB6C,GADlB7C,EAAkBF,GAAgB1qC,IAElC,IAAI+2Z,EAAW/iX,GAAYh0C,GAIvB01J,EAAUjpH,GAAc7B,GAFdrqC,EAAI+vB,KAAO,IAAO/vB,EAAI+vB,MAAQymY,EAASv9Y,OACvCjZ,EAAI+vB,KAAO,IAAO/vB,EAAI+vB,MAAQymY,EAASx9Y,QACQ,EAAMw9Y,EAASxmZ,EAAGwmZ,EAASvmZ,EAAG,EAAG,GAC9FumZ,EAAW/iX,GAAY0hH,GACvB,IAAIl/I,GACAjG,EAAGq2Y,EAASr2Y,EAAIwmZ,EAASv9Y,MAAQ,EACjChJ,EAAGo2Y,EAASp2Y,EAAIumZ,EAASx9Y,OAAS,EAClCwL,MAAO,EAAGje,GAAI,GACdi+H,MAAO,4BACP3jG,KAAM7gC,EAAIy2Z,UAAW11X,OAAQ/gC,EAAI40D,gBAAiB9f,YAAa,GAAKC,UAAW,GAAIt1C,KAAM01J,EACzFl8I,MAAOjZ,EAAI+vB,KAhBE,EAgBiB/W,OAAQhZ,EAAI+vB,KAhB7B,EAgBgD0iB,OAAQ,EAAGC,OAAQ,EAAGhiC,QAAS,EAAG+pB,QAASz6B,EAAIy6B,SAEhHx3B,KAAK6hF,YAAY1rD,SAASutW,EAAQ1wX,EAAShT,KAAK0yC,eAAWv3C,OAAWA,GAAau4H,aAAc32H,EAAI06B,KAAO,kBAGpH+4X,EAAgBn1Z,UAAUg3Z,kBAAoB,SAAUtgZ,EAAS2xX,EAAQr2X,EAAW6oD,EAAqBg8V,GACvF,IAAIxwW,GAAlB,IACI0hW,EACAt2X,EAAO,IAAIM,GACfN,EAAK9W,MAAQ,GACb8W,EAAK/W,OAAS,GACd,IAAIrJ,EAAMqF,EAAQ9F,QAAU8F,EAAQ26B,WAAW32B,OAAShE,EAAQ46B,MAAM3/B,EAClER,EAAOuF,EAAQlG,QAAUkG,EAAQ26B,WAAW12B,MAAQjE,EAAQ46B,MAAM5/B,EAClEyqB,KAAW0+B,EAAsBG,GAAoBtP,QACrDmrW,IACA16X,GAAU,GAEd,IAgBIgY,EAAShjC,EAAOuF,EAAQ46B,MAAM5/B,EAAIgF,EAAQ26B,WAAW12B,MACrDy5B,EAAS/iC,EAIb,GAHA8iC,GAAUA,EAASniC,EAAUu6U,IAAMv6U,EAAUo+C,MAC7Chc,GAAUA,EAASpiC,EAAUs6U,IAAMt6U,EAAUo+C,MAC7C23V,GAAar2Y,EAAGyiC,EAAsB,GAAb1iB,EAAK9W,MAAahJ,EAAGyiC,EAAS,GAAmB,GAAd3iB,EAAK/W,QACrC,IAAxBhE,EAAQ86B,aAAiD,IAA5B96B,EAAQ+6B,gBAAuB,CAC5D,IAAIlC,EAASL,KACbiB,GAAaZ,EAAQ74B,EAAQ86B,YAAc96B,EAAQ+6B,iBAAkBz/B,EAAUu6U,GAAK71U,EAAQlG,SAAWwB,EAAUo+C,OAAQp+C,EAAUs6U,GAAK51U,EAAQ9F,SAAWoB,EAAUo+C,OACrK23V,EAAWz4W,GAAuBC,EAAQw4W,GAE9C,IAAIpwY,GACAjG,EAAGq2Y,EAASr2Y,EACZC,EAAGo2Y,EAASp2Y,EACZuU,MAAOxP,EAAQ86B,YACfjP,KAAM,UAAWE,OAAQ,QAAS+T,YAAa,GAAKC,UAAW,GAAIt1C,KA9B5D,wqDA+BPwZ,MAAO,GAAID,OAAQ,GAAIy5B,OAAQ,EAAGC,OAAQ,EAAGhiC,QAAS,EAAG+pB,QAASA,EAASl0B,GAAIyO,EAAQzO,GAAIi+H,MAAO,2BAEtGvuH,EAAQ1P,GAAK,cACbtD,KAAK6hF,YAAY1rD,SAASutW,EAAQ1wX,EAAShT,KAAK0yC,WAAW,OAAMv3C,GAAau4H,aAAc,yCAEhG88R,EAAgBn1Z,UAAUq2Z,kBAAoB,SAAU1wZ,EAAS0iY,EAAQr2X,EAAWqxY,GAChF,IAAI1rY,EAAUhT,KAAKozZ,kBAAkBpyZ,EAASqM,GAC9C2F,EAAQxW,KAAOwE,EAAQ6gZ,aACvB7uY,EAAQxW,KAAOwE,EAAQ6gZ,aACvB,IAAI9C,EAAY/9Y,EAAQkxC,YAAclxC,EAAQkxC,YAAclxC,EAAQsC,GACpEtD,KAAK6tB,SAASsI,SAASutW,EAAQ1wX,EAAShT,KAAK0yC,eAAWv3C,EAAWujZ,EAAWK,IAElFyR,EAAgBn1Z,UAAUo4Z,mBAAqB,SAAU1hW,EAAc2hW,EAAS1kX,EAAGmb,EAAeM,EAAQC,GAEtG,IAAIh8C,EAAUlO,SAAS4C,gBAAgB,6BAA8B,WACjEm2G,EAAO/4G,SAAS4C,gBAAgB,6BAA8B,QAClEm2G,EAAK/1G,aAAa,KAAMxD,KAAK0yC,UAAY,uBACrCqf,EAAahM,YAAcy6V,GAAgBmT,qBAC3C5hW,EAAahM,YAAcy6V,GAAgBoT,oBAC3CllZ,EAAQlL,aAAa,KAAMxD,KAAK0yC,UAAY,YAEhD,IAAImhX,EAAS,EACTC,EAAU,EACVC,EAAgB,EAChBC,EAAgB,EAChBvoW,EAAQ,EACRwoW,GAAc,EAClB,GAAI9pW,EAAce,YAAcf,EAAc+pW,aAAezpW,GAAUC,EACnEqpW,EAAgBrpW,EAAO4kW,mBAAmBtgX,EAAEyc,OAC5CuoW,EAAgBvpW,EAAO6kW,mBAAmBtgX,EAAEyc,OAC5CsG,EAAaoiW,oBAAoBC,iBAAmBL,EAAgBtpW,EAAOtoD,UAC3E4vD,EAAasiW,kBAAkBD,iBAAmBJ,EAAgBtpW,EAAOvoD,UACzE8xZ,GAAc,MAEb,CACD,IAAK,IAAI71Z,EAAK,EAAGyE,EAAKkvD,EAAasiW,kBAAkBC,cAAel2Z,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAEtFy1Z,GADYhxZ,EAAGzE,GAGnB,IAAK,IAAI6F,EAAK,EAAGwG,EAAKsnD,EAAaoiW,oBAAoBG,cAAerwZ,EAAKwG,EAAGhO,OAAQwH,IAAM,CAExF6vZ,GADYrpZ,EAAGxG,GAGnBwnD,EAAQzrD,KAAKu0Z,kBAAkBxiW,EAAc/iB,EAAEyc,OAEnDooW,EAASI,EAAcD,EAAgBH,EAASpoW,EAChDqoW,EAAUG,EAAcF,EAAgBD,EAAUroW,EAKlD7X,GAAgBllC,GAHZpL,GAAItD,KAAK0yC,UAAY,WAAY3lC,EAAG,EAAGC,EAAG,EAAGgJ,MAAO69Y,EACpD99Y,OAAQ+9Y,EAASU,aAAc,mBAGnCx0Z,KAAKy0Z,uBAAuB/lZ,EAASmlZ,EAAQC,EAASroW,EAAOsG,EAAc5H,EAAeO,EAAQupW,GAClGj0Z,KAAK00Z,qBAAqBhmZ,EAASmlZ,EAAQC,EAASroW,EAAOsG,EAAc5H,EAAeM,EAAQwpW,GAChG16S,EAAK53G,YAAY+M,GACjBglZ,EAAQ/xZ,YAAY43G,IAExBi3S,EAAgBn1Z,UAAUo5Z,uBAAyB,SAAU/lZ,EAASmlZ,EAAQC,EAASroW,EAAOsG,EAAc5H,EAAeO,EAAQupW,GAC/H,IAEIU,EAFA92X,EAAQ,EACRiU,KAEJ,GAAIigB,EAAahM,YAAcy6V,GAAgBmT,oBAAqB,CAChE,IAAIiB,EAAY7iW,EAAaoiW,oBAAoBG,cAC/BviW,EAAaoiW,oBAAoBjkC,UAC/Cn+T,EAAaoiW,oBAAoBU,gBACjC/iX,EAAY9xC,KAAK6tB,SAASouX,eAAelqV,EAAaoiW,oBAAoBU,gBAE1E1qW,EAAce,YAAcf,EAAc+pW,aAAexpW,IACzDkqW,EAAY50Z,KAAK80Z,oBAAoBF,EAAWzqW,EAAeO,EAAQopW,IAE3E,IAAK,IAAI33Z,EAAI,EAAGA,EAAIy4Z,EAAUn4Z,OAAQN,GAAQ,EAAG,CAC7Cw4Z,EAAQn0Z,SAAS4C,gBAAgB,6BAA8B,QAC/D,IAAImrB,EAAIsP,EAAQ+2X,EAAUz4Z,GAAK,EAC/BoyB,EAAI0lY,EAAc1lY,EAAIA,EAAIk9B,EAO1B7X,GAAgB+gX,GALZpwX,eAAgBqwX,EAAUz4Z,GAAI2hC,OAAUi0B,EAAaoiW,oBAAoBjkC,UACzE3hW,EAAK,QAAc,KAAOslY,EAAS,MAAY,KAC/C/hX,UAAaA,EAAU5kC,WACvBq0H,MAA0B,OAAjBqzR,EAAUz4Z,GAAc,uBAAyB,wBAG9DuS,EAAQ/M,YAAYgzZ,GACpB92X,GAAS+2X,EAAUz4Z,EAAI,GAAKy4Z,EAAUz4Z,MAIlDq0Z,EAAgBn1Z,UAAUq5Z,qBAAuB,SAAUhmZ,EAASmlZ,EAAQC,EAASroW,EAAOsG,EAAc5H,EAAeM,EAAQwpW,GAC7H,IAEIc,EAFAl3X,EAAQ,EACRiU,KAEJ,GAAIigB,EAAahM,YAAcy6V,GAAgBoT,kBAAmB,CAC9D,IAAIgB,EAAY7iW,EAAasiW,kBAAkBC,cAC7BviW,EAAasiW,kBAAkBnkC,UAC7Cn+T,EAAasiW,kBAAkBQ,gBAC/B/iX,EAAY9xC,KAAK6tB,SAASouX,eAAelqV,EAAasiW,kBAAkBQ,gBAExE1qW,EAAce,YAAcf,EAAc+pW,aAAezpW,IACzDmqW,EAAY50Z,KAAK80Z,oBAAoBF,EAAWzqW,EAAeM,EAAQopW,IAE3E,IAAK,IAAI13Z,EAAI,EAAGA,EAAIy4Z,EAAUn4Z,OAAQN,GAAQ,EAAG,CAC7C44Z,EAAQv0Z,SAAS4C,gBAAgB,6BAA8B,QAC/D,IAAImrB,EAAIsP,EAAQ+2X,EAAUz4Z,GAAK,EAC/BoyB,EAAI0lY,EAAc1lY,EAAIA,EAAIk9B,EAO1B7X,GAAgBmhX,GALZxwX,eAAgBqwX,EAAUz4Z,GAAI2hC,OAAUi0B,EAAasiW,kBAAkBnkC,UACvE3hW,EAAK,MAAY,SAAe,IAAMulY,EAAU,KAChDhiX,UAAaA,EAAU5kC,WACvBq0H,MAA0B,OAAjBqzR,EAAUz4Z,GAAc,uBAAyB,wBAG9DuS,EAAQ/M,YAAYozZ,GACpBl3X,GAAS+2X,EAAUz4Z,EAAI,GAAKy4Z,EAAUz4Z,MAIlDq0Z,EAAgBn1Z,UAAU25Z,WAAa,SAAUjjW,EAAckjW,EAAS5nZ,EAAW88C,EAAeM,EAAQC,GACtG,IACIvuD,EADAgmE,EAAO8yV,EAAQroY,eAAe5sB,KAAK0yC,UAAY,cAE/CuhX,GAAc,EAClB,GAAI9xV,EAAM,CACN,IAAIzzD,EAAUumZ,EAAQroY,eAAe5sB,KAAK0yC,UAAY,YAClDhkC,GACAA,EAAQjO,WAAW6E,YAAYoJ,GAEnC,IAAIqlZ,EAAgB,EAChBC,EAAgB,EAChBvoW,EAAQ,EACRtB,EAAce,YAAcf,EAAc+pW,aAAexpW,GAAUD,GACnEspW,EAAgBrpW,EAAO4kW,mBAAmBjiZ,EAAUo+C,OACpDuoW,EAAgBvpW,EAAO6kW,mBAAmBjiZ,EAAUo+C,OACpDwoW,GAAc,EACdliW,EAAaoiW,oBAAoBC,iBAAmBL,EAAgBtpW,EAAOtoD,UAC3E4vD,EAAasiW,kBAAkBD,iBAAmBJ,EAAgBtpW,EAAOvoD,WAGzEspD,EAAQzrD,KAAKu0Z,kBAAkBxiW,EAAc1kD,EAAUo+C,OAE3D,IAAI11C,EAAS,EACb,IAAK5Z,EAAI,EAAGA,EAAI41D,EAAaoiW,oBAAoBG,cAAc73Z,OAAQN,IACnE4Z,GAAUg8C,EAAaoiW,oBAAoBG,cAAcn4Z,GAE7D,IAAI6Z,EAAQ,EACZ,IAAK7Z,EAAI,EAAGA,EAAI41D,EAAasiW,kBAAkBC,cAAc73Z,OAAQN,IACjE6Z,GAAS+7C,EAAasiW,kBAAkBC,cAAcn4Z,GAE1D,IAAI2rJ,GACA/6I,GAAIM,EAAUu6U,GAAKv6U,EAAUo+C,MAC7Bz+C,GAAIK,EAAUs6U,GAAKt6U,EAAUo+C,OAEjC7X,GAAgBuuB,EAAM2lF,GACtB9xI,EAAQi+Y,EAAcD,EAAgBh+Y,EAAQy1C,EAC9C11C,EAASk+Y,EAAcF,EAAgBh+Y,EAAS01C,EAChDq8F,GACIxkJ,GAAItD,KAAK0yC,UAAY,WAAY3lC,EAAG,EAAGC,EAAG,EAAGgJ,MAAOA,EACpDD,OAAQA,EAAQy+Y,aAAc,kBAGlC5gX,GADAllC,EAAUlO,SAAS4C,gBAAgB,6BAA8B,WACxC0kJ,GACzB9nJ,KAAKy0Z,uBAAuB/lZ,EAASsH,EAAOD,EAAQ01C,EAAOsG,EAAc5H,EAAeO,EAAQupW,GAChGj0Z,KAAK00Z,qBAAqBhmZ,EAASsH,EAAOD,EAAQ01C,EAAOsG,EAAc5H,EAAeM,EAAQwpW,GACnFgB,EAAQroY,eAAe5sB,KAAK0yC,UAAY,sBAC9C/wC,YAAY+M,KAGzB8hZ,EAAgBn1Z,UAAUy5Z,oBAAsB,SAAUF,EAAWzqW,EAAeG,EAAOE,GAGvF,IAAK,IAFD0qW,KACArF,EAAerlW,EAAeF,EAAMnoD,SAC/BhG,EAAI,EAAGA,EAAqB,EAAjBmuD,EAAMnoD,SAAchG,IAEhC+4Z,EAAY/4Z,GADZA,EAAI,GAAM,EACc,IAANA,EAAW,KAAO,IAGnB0zZ,EAAeqF,EAAY/4Z,EAAI,GAGxD,OAAO+4Z,GAEX1E,EAAgBn1Z,UAAUk5Z,kBAAoB,SAAUxiW,EAActG,GAClE,GAAIA,GAAS,EACT,KAAOA,GAAS,GACZA,GAAS,OAGZ,GAAIA,GAAS,GACd,KAAOA,GAAS,IACZA,GAAS,EAGjB,IAAItvD,EAGJ,GAFA41D,EAAaoiW,oBAAoBC,gBAAkBriW,EAAaoiW,oBAAoBgB,cACpFpjW,EAAasiW,kBAAkBD,gBAAkBriW,EAAasiW,kBAAkBc,cAClE,IAAV1pW,EAAa,CACb,IAAI2pW,EAAYrjW,EAAaoiW,oBAE7B,IADAiB,EAAUhB,mBACLj4Z,EAAI,EAAGA,EAAIi5Z,EAAUD,cAAc14Z,OAAQN,IAC5Ci5Z,EAAUhB,gBAAgBj4Z,GAAKi5Z,EAAUD,cAAch5Z,GAAKsvD,EAIhE,KAFA2pW,EAAYrjW,EAAasiW,mBACfD,mBACLj4Z,EAAI,EAAGA,EAAIi5Z,EAAUD,cAAc14Z,OAAQN,IAC5Ci5Z,EAAUhB,gBAAgBj4Z,GAAKi5Z,EAAUD,cAAch5Z,GAAKsvD,EAGpE,OAAOA,GAEX+kW,EAAgBn1Z,UAAUkoC,kBAAoB,SAAUviC,EAAS0iY,EAAQr2X,EAAWqxY,GAChF,IAAI1rY,EAAUhT,KAAKozZ,kBAAkBpyZ,EAASqM,GAC9C2F,EAAQo1B,aAAe,EACvBpoC,KAAK6tB,SAAS8V,cAAc+/V,EAAQ1wX,EAAShT,KAAK0yC,eAAWv3C,OAAWA,EAAWujZ,GACnF1rY,EAAQka,WAAa+hB,GAAmBjuC,EAAQ0D,MAAMwoB,WAAYlsB,EAAQ0D,MAAM8sC,cAChFx+B,EAAQonB,QAAUp5B,EAAQo5B,QAC1BpnB,EAAQ89B,UAAYvC,GAAkBvtC,EAAQ0D,MAAM8sC,cACpDx+B,EAAQq/B,UAAYhE,GAAkBrtC,EAAQ0D,MAAM2tC,WACpDr/B,EAAQwjB,MAAQx1B,EAAQ0D,MAAM8xB,MAC9BxjB,EAAQu+B,OAASvwC,EAAQ0D,MAAM6sC,OAC/Bv+B,EAAQ07B,KAAO1tC,EAAQ0D,MAAMgqC,KAC7B17B,EAAQ6Z,SAAW7rB,EAAQ0D,MAAMmoB,SACjC7Z,EAAQia,WAAajsB,EAAQ0D,MAAMuoB,WACnCja,EAAQotB,aAAep/B,EAAQ0D,MAAM07B,aACrCptB,EAAQm/B,eAAiBnxC,EAAQ0D,MAAMytC,eACvCn/B,EAAQo/B,OAASpxC,EAAQoxC,OACzBp/B,EAAQ2+B,WAAa3wC,EAAQ2wC,WAC7B3+B,EAAQzB,WAAavQ,EAAQuQ,WAC7ByB,EAAQ8+B,UAAY,GACpB9+B,EAAQ6+B,YAAc,EACtB7+B,EAAQ4qB,KAAO,GACf,IAAImhX,EAAY/9Y,EAAQkxC,YAAclxC,EAAQkxC,YAAclxC,EAAQo5B,QAAUp5B,EAAQo5B,QAAUp5B,EAAQsC,GACxGtD,KAAK6tB,SAASqhE,SAASw0S,EAAQ1wX,EAAS0rY,EAAWK,EAAW/+Y,KAAK0yC,WAC/D1yC,KAAK0wZ,YACL1vZ,EAAQoxC,QAAS,IAGzBo+W,EAAgBn1Z,UAAUs2Z,oBAAsB,SAAU3wZ,EAAS0iY,EAAQr2X,EAAWqxY,GAClF,IAAI98H,EACAE,EACAuvI,EAAYrxZ,KAAKgxZ,aAAahwZ,OAAS7F,EAAWuoY,IAAWgb,EAC7D2W,EAAcr1Z,KAAKixZ,iBAAiBjwZ,EAAS0iY,EAAQ2tB,GAAWx0X,GAAK6mW,EACrE1wX,EAAUhT,KAAKozZ,kBAAkBpyZ,EAASqM,GAK9C,OAJA2F,EAAQ4qB,KAAO,cACf5qB,EAAQo1B,aAAepnC,EAAQonC,aAC/Bp1B,EAAQ8qB,OAAS,cACjB99B,KAAK6tB,SAAS8V,cAAc+/V,EAAQ1wX,EAAShT,KAAK0yC,eAAWv3C,OAAWA,EAAWujZ,GAC3E19Y,EAAQyqD,OACZ,IAAK,OACDm2N,EAAgB5gR,EAAQ8+Y,YAAY9pY,MACpC8rQ,EAAiB9gR,EAAQ8+Y,YAAY/pY,OACrC,MACJ,IAAK,UACD6rQ,EAAgB5gR,EAAQ0rC,WAAW12B,MACnC8rQ,EAAiB9gR,EAAQ0rC,WAAW32B,OACpC,MACJ,IAAK,OAEG6rQ,EAAgBE,EADhB9gR,EAAQ0rC,WAAW12B,OAAShV,EAAQ0rC,WAAW32B,OACd/U,EAAQ0rC,WAAW12B,MAGnBhV,EAAQ0rC,WAAW32B,OAExD,MACJ,IAAK,QAEG6rQ,EAAgBE,EADhB9gR,EAAQ0rC,WAAW12B,OAAShV,EAAQ0rC,WAAW32B,OACd/U,EAAQ0rC,WAAW12B,MAGnBhV,EAAQ0rC,WAAW32B,OAI5D/V,KAAK6hF,aACL7hF,KAAK6hF,YAAY+9T,kBAAkB5+Y,EAASq0Z,EAAavzI,EAAgBF,EAAeyvI,IAGhGb,EAAgBn1Z,UAAUu2Z,kBAAoB,SAAU5wZ,EAAS0iY,EAAQ6tB,EAAWlkZ,EAAWqxY,GAC3F,IAAI1rY,EAAUhT,KAAKozZ,kBAAkBpyZ,EAASqM,GAC9C2F,EAAQ4qB,KAAO,cACf5qB,EAAQo1B,aAAepnC,EAAQonC,aAC/Bp1B,EAAQ8qB,OAAS,cACjB99B,KAAK6tB,SAAS8V,cAAc+/V,EAAQ1wX,EAAShT,KAAK0yC,eAAWv3C,OAAWA,EAAWujZ,GAC/E1+Y,KAAK6hF,aACL7hF,KAAK6hF,YAAY89T,gBAAgB3+Y,EAASuwZ,EAAUn3Y,SAAS,GAAI/M,IAGzEmjZ,EAAgBn1Z,UAAUo2Z,mBAAqB,SAAUzwZ,EAAS0iY,EAAQr2X,EAAWqxY,GACjF,IAAI1rY,EAAUhT,KAAKozZ,kBAAkBpyZ,EAASqM,GAC9C2F,EAAQo1B,aAAe,EACvBpoC,KAAK6tB,SAAS8V,cAAc+/V,EAAQ1wX,EAAShT,KAAK0yC,eAAWv3C,OAAWA,EAAWujZ,GAEnF,IAAIxnJ,EACAC,EACAm+J,EACAC,EACJ,GAAwB,YAApBv0Z,EAAQkhZ,QACRhrJ,EAAal2P,EAAQ0rC,WAAW12B,MAChCmhP,EAAcn2P,EAAQ0rC,WAAW32B,WAEhC,CACD,IAAIu+W,EAAetzX,EAAQ8+Y,YAAY9pY,MACnC+pY,EAAgB/+Y,EAAQ8+Y,YAAY/pY,OACpCy/Y,EAAaxiZ,EAAQgD,MAAQs+W,EAC7BlP,EAAcpyW,EAAQ+C,OAASgqY,EAC/B0V,OAAQ,EACZ,OAAQz0Z,EAAQkhZ,SACZ,IAAK,OAEDhrJ,EAAao9H,GADbmhC,EAAQppZ,KAAK0T,IAAIy1Y,EAAYpwC,IAE7BjuH,EAAc4oJ,EAAgB0V,EAC9BziZ,EAAQjG,GAAKV,KAAKE,IAAIyG,EAAQgD,MAAQkhP,GAAc,EACpDlkP,EAAQhG,GAAKX,KAAKE,IAAIyG,EAAQ+C,OAASohP,GAAe,EACtD,MACJ,IAAK,QACDq+J,EAAaxiZ,EAAQgD,MAAQs+W,EAC7BlP,EAAcpyW,EAAQ+C,OAASgqY,EAE/B7oJ,EAAao9H,GADbmhC,EAAQppZ,KAAKC,IAAIkpZ,EAAYpwC,IAE7BjuH,EAAc4oJ,EAAgB0V,EAC9BH,EAActiZ,EAAQgD,MAAQkhP,EAAao9H,EAC3CihC,EAAeviZ,EAAQ+C,OAASohP,EAAc4oJ,EAC9C,MACJ,IAAK,OACD7oJ,EAAao9H,EACbn9H,EAAc4oJ,GAI1B/sY,EAAQgD,MAAQkhP,EAChBlkP,EAAQ+C,OAASohP,EAIjBnkP,EAAQsiZ,YAAcA,EACtBtiZ,EAAQuiZ,aAAeA,EACvBviZ,EAAQzW,OAASyE,EAAQzE,OACzByW,EAAQq8C,UAAYruD,EAAQkzD,WAC5BlhD,EAAQy4C,MAAQzqD,EAAQozD,WACxBphD,EAAQk/B,YAAclxC,EAAQkxC,YAAclxC,EAAQkxC,YAAclxC,EAAQsC,GAC1EtD,KAAK6tB,SAAS6hE,UAAUg0S,EAAQ1wX,EAAS0rY,IAE7C8R,EAAgBn1Z,UAAUokT,gBAAkB,SAAU1sN,EAAO2wS,EAAQ6tB,EAAWlkZ,EAAWqxY,EAAW8S,GAClG,IAAIkE,GAAc54Y,IAAK4hY,EAAW7hX,EAAG6mW,GACrC,GAAI1jY,KAAK0yC,YACLgsW,EAAY1+Y,KAAKgxZ,aAAaj+T,IAAU2rT,EACpC1+Y,KAAK0wZ,WAAW,CAChB,IAAIttH,OAAe,EACnBA,EAAepjS,KAAKixZ,iBAAiBl+T,EAAO2wS,EAAQgb,GAAW7hX,GAAK6mW,EACpEgb,EAAY1+Y,KAAKgxZ,aAAahxZ,KAAK21Z,gBAAgB5iU,EAAM34E,YAAcskY,EACvE,IAAIkX,EAAkB51Z,KAAKixZ,iBAAiBjxZ,KAAK21Z,gBAAgB5iU,EAAM34E,UAAWgpR,EAAcs7G,GAChGgX,EAAU54Y,IAAM84Y,EAAgB94Y,KAAO4hY,EACvCgX,EAAU74X,EAAI+4X,EAAgB/4X,GAAKumQ,EAC/BouH,GACI9S,IACKA,EAAU9xX,eAAe8oY,EAAU74X,EAAEv5B,KACtCogY,EAAO/hY,YAAY+zZ,EAAU74X,IAGrC6mW,EAASgyB,EAAU74X,GAGnB6mW,EAASgyB,EAAU74X,EAK/B,GADA78B,KAAK6xZ,WAAW9+T,EAAO2wS,EAAQr2X,EAAWqxY,GACtC3rT,EAAMkkG,cAGN,IAAK,IADD4+N,EADAC,OAAU,EAEL13Z,EAAK,EAAGyE,EAAKkwF,EAAM34E,SAAUhc,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACxD,IAAIiC,EAAQwC,EAAGzE,GACfsgZ,EAAY1+Y,KAAKgxZ,aAAahxZ,KAAK21Z,gBAAgB5iU,EAAM34E,WAAa/Z,IAAUq+Y,EAC5E1+Y,KAAK0wZ,YAELoF,GADAD,EAAc71Z,KAAKixZ,iBAAiBjxZ,KAAK21Z,gBAAgB5iU,EAAM34E,WAAa/Z,EAAOqjY,EAAQgb,IACrE7hX,GAAK6mW,EACvBmyB,EAAY/4Y,MACZ4hY,EAAYmX,EAAY/4Y,MAGhC9c,KAAKsxZ,cAAcjxZ,EAAOy1Z,GAAWpyB,EAAQ6tB,EAAWlkZ,EAAWqxY,GAAW,KAI1F8R,EAAgBn1Z,UAAUs6Z,gBAAkB,SAAUv7Y,EAAU0E,GAC5D,GAAI1E,GAAYA,EAAS3d,OAAS,EAAuB,CACrD,IAAI4D,EAAQ+Z,EAAS,GACrB,GAAI/Z,aAAiBk0D,GACjB,OAAOl0D,EAEFA,EAAM+Z,UAAY/Z,EAAM+Z,SAAS3d,QACtCuD,KAAK21Z,gBAAgBt1Z,EAAM+Z,SAAU0E,KAAW,KAK5D0xY,EAAgBn1Z,UAAUw2Z,WAAa,SAAU7wZ,EAAS0iY,EAAQr2X,EAAWqxY,GACzE,IAAI1rY,EAAUhT,KAAKozZ,kBAAkBpyZ,EAASqM,GAC9C2F,EAAQo1B,aAAepnC,EAAQonC,cAAgB,EAC/C,IAAI22W,EAAY/9Y,EAAQkxC,YAAclxC,EAAQkxC,YAAclxC,EAAQsC,GACpEtD,KAAK6tB,SAAS8V,cAAc+/V,EAAQ1wX,EAAShT,KAAK0yC,eAAWv3C,OAAWA,EAAWujZ,EAAWK,IAElGyR,EAAgBn1Z,UAAU06Z,SAAW,SAAUryB,EAAQ1wX,GACnDA,EAAQo1B,aAAe,EACvBpoC,KAAK6hF,YAAYl+C,cAAc+/V,EAAQ1wX,EAAShT,KAAK0yC,YAEzD89W,EAAgBn1Z,UAAU+3Z,kBAAoB,SAAUpyZ,EAASqM,GAC7D,IAAI2F,GACAgD,MAAOhV,EAAQ0rC,WAAW12B,MAAOD,OAAQ/U,EAAQ0rC,WAAW32B,OAC5DhJ,EAAG/L,EAAQ6K,QAAU7K,EAAQ0rC,WAAW12B,MAAQhV,EAAQ2rC,MAAM5/B,EAAI,GAClEC,EAAGhM,EAAQiL,QAAUjL,EAAQ0rC,WAAW32B,OAAS/U,EAAQ2rC,MAAM3/B,EAAI,GACnE4wB,KAAM58B,EAAQ0D,MAAMk5B,KAAME,OAAQ98B,EAAQ0D,MAAMktC,YAAarwB,MAAOvgB,EAAQ6rC,YAAc7rC,EAAQ8rC,gBAClG0C,OAAQxuC,EAAQ2rC,MAAM5/B,EAAG0iC,OAAQzuC,EAAQ2rC,MAAM3/B,EAAG6kC,YAAa7wC,EAAQ0D,MAAMmtC,YAC7EC,UAAW9wC,EAAQ0D,MAAMqtC,iBAAmB,GAAItkC,QAASzM,EAAQ0D,MAAM+I,QAASukC,OAAQhxC,EAAQgxC,OAChGC,SAAUjxC,EAAQ0D,MAAMutC,SAAUza,QAASx2B,EAAQw2B,QAASl0B,GAAItC,EAAQsC,GAAI4uC,YAAalxC,EAAQkxC,aAMrG,OAJI7kC,IACA2F,EAAQjG,GAAKM,EAAUu6U,GACvB50U,EAAQhG,GAAKK,EAAUs6U,IAEpB30U,GAEXw9Y,EAAgBwF,yBAA2B,SAAUvmY,EAAYwmY,EAAgBlpZ,EAAGC,EAAGgJ,EAAOD,GAC1EvV,SAASosB,eAAeqpY,EAAe3yZ,IAAvD,IAEI6D,EADkBgsC,GAAsB8iX,EAAe3yZ,IAC9BspB,eAAeqpY,EAAe3yZ,GAAK,UAChE,IAAK6D,GAAUsoB,EAAWlzB,OAAQ,CAC9B,IAAI25Z,EvWpehB,SAAwCxjX,GAMpC,OAJqBE,GAAkBF,GAEVhlC,uBAAuB,4BAC3B,GuW+dEyoZ,CAAwBF,EAAe3yZ,KAC1D6D,EAAS3G,SAAS4C,gBAAgB,6BAA8B,UACzDI,aAAa,KAAMyyZ,EAAe3yZ,GAAK,UAC9C4yZ,EAAav0Z,YAAYwF,GACzBA,EAAO8oC,eAAe,+BAAgC,aAAcxgB,EAAWlzB,QAEnF,GAAI4K,EAAQ,CACR,IAAIskD,EAA6B,SAArBh8B,EAAWg8B,MAAmBh8B,EAAWg8B,MAAQ,GACzDg0V,EAAWhwX,EAAW0kC,MACtBurV,EAAcD,EAAStgY,OAAO,GAAGvJ,cAAgB6pY,EAASp+Y,MAAM,GAAK,IACnEoqD,EAAMtsC,OAAO,GAAGvJ,cAAgB61C,EAAMpqD,MAAM,GAChCb,SAASosB,eAAeqpY,EAAe3yZ,IAMzDswC,GAAgBzsC,GAJZ7D,GAAM2yZ,EAAe3yZ,GAAK,SAAUyJ,EAAKA,EAAGC,EAAKA,EACjDgJ,MAASA,EAAOD,OAAUA,EAC1B2iG,oBAAuBgnS,MAKnC8Q,EAAgBn1Z,UAAU+6Z,gBAAkB,SAAU/oZ,EAAWgpZ,GAE7D,GAAIA,EAAS,EvWniBrB,SAAgC3jX,GAI5B,OAFsBD,GAAmBC,GACV9lB,eAAe8lB,EAAY,kBuWiiB/B4jX,CAAgBt2Z,KAAK0yC,WAC3BlvC,aAAa,YAAa,aAChC6J,EAAUu6U,GAAKv6U,EAAUo+C,MAAS,IAAOp+C,EAAUs6U,GAAKt6U,EAAUo+C,MAAS,WAC5Ep+C,EAAUo+C,MAAQ,MvW5epC,SAA6B/Y,GAIzB,OAFqBQ,GAAgBR,GACL9lB,eAAe8lB,EAAY,cuW6evC6jX,CAAav2Z,KAAK0yC,WACxBlvC,aAAa,YAAa,aAAgB6J,EAAUu6U,GAAKv6U,EAAUo+C,MAAS,IAC/Ep+C,EAAUs6U,GAAKt6U,EAAUo+C,MAAS,MvWpejD,SAA8B/Y,GAI1B,OAFqBM,GAAgBN,GACL9lB,eAAe8lB,EAAY,kBuWmetC8jX,CAAcx2Z,KAAK0yC,WACzBlvC,aAAa,YAAa,aAC9B6J,EAAUu6U,GAAKv6U,EAAUo+C,MAAS,IAAOp+C,EAAUs6U,GAAKt6U,EAAUo+C,MAAS,WAC5Ep+C,EAAUo+C,MAAQ,MvWhfhC,SAAuC/Y,GAInC,OAFqBM,GAAgBN,GACL9lB,eAAe8lB,EAAY,qBuW+erC+jX,CAAuBz2Z,KAAK0yC,WAClClvC,aAAa,YAAa,aAC/B6J,EAAUu6U,GAAKv6U,EAAUo+C,MAAS,IAAOp+C,EAAUs6U,GAAKt6U,EAAUo+C,MAAS,WAC5Ep+C,EAAUo+C,MAAQ,KAENpY,GAAerzC,KAAK0yC,WAC1BlvC,aAAa,YAAa,aAC/B6J,EAAUu6U,GAAKv6U,EAAUo+C,MAAS,IAAOp+C,EAAUs6U,GAAKt6U,EAAUo+C,MAAS,WAC5Ep+C,EAAUo+C,MAAQ,KAERnY,GAAatzC,KAAK0yC,WAAWt4B,SAAS,GAC5C1V,MAAM2I,UAAY,aACrBA,EAAUu6U,GAAKv6U,EAAUo+C,MAAS,MAASp+C,EAAUs6U,GAAKt6U,EAAUo+C,MAAS,YAC9Ep+C,EAAUo+C,MAAQ,KAG5B+kW,EAAgBn1Z,UAAUu+T,WAAa,SAAU54T,EAAS01Z,EAAsBnF,EAAWlkZ,GACvFrN,KAAKsxZ,cAActwZ,EAAS01Z,EAAsBnF,EAAWlkZ,EAAWrN,KAAKgxZ,aAAahwZ,KAEvFwvZ,KC57BPlmU,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAO5D+5X,GAA4B,SAAUxrU,GAEtC,SAASwrU,IACL,OAAkB,OAAXxrU,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAc/D,OAhBAsqF,GAAUqsU,EAAYxrU,GAItBN,IACI3jF,EAAS,KACVyvZ,EAAWt7Z,UAAW,cAAU,GACnCwvF,IACI3jF,EAAS,gBACVyvZ,EAAWt7Z,UAAW,aAAS,GAClCwvF,IACI3jF,EAAS,SACVyvZ,EAAWt7Z,UAAW,aAAS,GAClCwvF,IACI3jF,EAAS,SACVyvZ,EAAWt7Z,UAAW,aAAS,GAC3Bs7Z,GACT33V,IAKE43V,GAA8B,SAAUzrU,GAExC,SAASyrU,IACL,OAAkB,OAAXzrU,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KA0B/D,OA5BAsqF,GAAUssU,EAAczrU,GAIxBN,IACI3jF,EAAS,OACV0vZ,EAAav7Z,UAAW,aAAS,GACpCwvF,IACI3jF,EAAS,OACV0vZ,EAAav7Z,UAAW,cAAU,GACrCwvF,IACI9iF,KAAY+0T,KACb85F,EAAav7Z,UAAW,cAAU,GACrCwvF,IACI3jF,EAAS,cACV0vZ,EAAav7Z,UAAW,mBAAe,GAC1CwvF,IACI3jF,EAAS,aACV0vZ,EAAav7Z,UAAW,2BAAuB,GAClDwvF,IACI9iF,KAAY4uZ,KACbC,EAAav7Z,UAAW,kBAAc,GACzCwvF,IACI3jF,GAAS,IACV0vZ,EAAav7Z,UAAW,oBAAgB,GAC3CwvF,IACI3jF,GAAS,IACV0vZ,EAAav7Z,UAAW,sBAAkB,GACtCu7Z,GACT53V,IAKE63V,GAAgC,SAAU1rU,GAE1C,SAAS0rU,IACL,OAAkB,OAAX1rU,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAmC/D,OArCAsqF,GAAUusU,EAAgB1rU,GAI1BN,IACI3jF,EAAS,IACV2vZ,EAAex7Z,UAAW,wBAAoB,GACjDwvF,IACI3jF,EAAS,IACV2vZ,EAAex7Z,UAAW,sBAAkB,GAC/CwvF,IACI3jF,EAAS,IACV2vZ,EAAex7Z,UAAW,mBAAe,GAC5CwvF,IACI3jF,EAAS,IACV2vZ,EAAex7Z,UAAW,qBAAiB,GAC9CwvF,IACI3jF,EAAS,IACV2vZ,EAAex7Z,UAAW,sBAAkB,GAC/CwvF,IACI3jF,EAAS,KACV2vZ,EAAex7Z,UAAW,eAAW,GACxCwvF,IACI3jF,EAAS,KACV2vZ,EAAex7Z,UAAW,eAAW,GACxCwvF,IACI3jF,EAAS,YACV2vZ,EAAex7Z,UAAW,mBAAe,GAC5CwvF,IACI3jF,KACD2vZ,EAAex7Z,UAAW,sBAAkB,GAC/CwvF,IACI3jF,GAAS,IACV2vZ,EAAex7Z,UAAW,qBAAiB,GAC9CwvF,IACI9iF,GAAUyE,KAAM,GAAIC,MAAO,GAAIC,IAAK,GAAIC,OAAQ,IAAMmwT,KACvD+5F,EAAex7Z,UAAW,wBAAoB,GAC1Cw7Z,GACT73V,IClHE83V,GAAgC,WAChC,SAASA,IACL92Z,KAAK+2Z,YAQT,OANAD,EAAez7Z,UAAU27Z,SAAW,SAAUv/X,EAAM/wB,GAChD1G,KAAK+2Z,SAASt/X,GAAQ/wB,GAE1BowZ,EAAez7Z,UAAUmmE,WAAa,SAAU/pC,GAC5C,OAAOz3B,KAAK+2Z,SAASt/X,IAElBq/X,KCdPxsU,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAO5Dq6X,GAA2B,SAAU9rU,GAErC,SAAS8rU,IACL,OAAkB,OAAX9rU,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAc/D,OAhBAsqF,GAAU2sU,EAAW9rU,GAIrBN,IACI3jF,EAAS,cACV+vZ,EAAU57Z,UAAW,iBAAa,GACrCwvF,IACI3jF,EAAS,KACV+vZ,EAAU57Z,UAAW,qBAAiB,GACzCwvF,IACI3jF,GAAU,KAAM,MAAO,IAAM,MAAO,IAAM,MAAO,IAAM,MAAO,IAAM,SACrE+vZ,EAAU57Z,UAAW,qBAAiB,GACzCwvF,IACI3jF,GAAU,MACX+vZ,EAAU57Z,UAAW,qBAAiB,GAClC47Z,GACTj4V,IAKEk4V,GAA8B,SAAU/rU,GAExC,SAAS+rU,IACL,OAAkB,OAAX/rU,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAiB/D,OAnBAsqF,GAAU4sU,EAAc/rU,GAIxBN,IACI9iF,KAAYkvZ,KACbC,EAAa77Z,UAAW,2BAAuB,GAClDwvF,IACI9iF,KAAYkvZ,KACbC,EAAa77Z,UAAW,yBAAqB,GAChDwvF,IACI3jF,EAASs5Y,GAAgB+K,MAC1B2L,EAAa77Z,UAAW,mBAAe,GAC1CwvF,IACI3jF,EAAS,IACVgwZ,EAAa77Z,UAAW,iBAAa,GACxCwvF,IACI3jF,EAAS,IACVgwZ,EAAa77Z,UAAW,0BAAsB,GAC1C67Z,GACTl4V,ICjEEsrB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAM5Du6X,GAA8B,SAAUhsU,GAExC,SAASgsU,IACL,OAAkB,OAAXhsU,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAuB/D,OAzBAsqF,GAAU6sU,EAAchsU,GAIxBN,IACI3jF,EAAS,IACViwZ,EAAa97Z,UAAW,gBAAY,GACvCwvF,IACI3jF,EAAS,MACViwZ,EAAa97Z,UAAW,oBAAgB,GAC3CwvF,IACI3jF,EAAS,eACViwZ,EAAa97Z,UAAW,mBAAe,GAC1CwvF,IACI3jF,EAAS,kBACViwZ,EAAa97Z,UAAW,qBAAiB,GAC5CwvF,IACI3jF,EAAS,QACViwZ,EAAa97Z,UAAW,mBAAe,GAC1CwvF,IACI3jF,EAAS,KACViwZ,EAAa97Z,UAAW,iBAAa,GACxCwvF,IACI3jF,EAAS,OACViwZ,EAAa97Z,UAAW,mBAAe,GACnC87Z,GACTn4V,IAKEo4V,GAA+B,SAAUjsU,GAEzC,SAASisU,IACL,OAAkB,OAAXjsU,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAc/D,OAhBAsqF,GAAU8sU,EAAejsU,GAIzBN,IACI3jF,GAAS,IACVkwZ,EAAc/7Z,UAAW,kBAAc,GAC1CwvF,IACI3jF,GAAS,IACVkwZ,EAAc/7Z,UAAW,mBAAe,GAC3CwvF,IACI9iF,GAAUqxB,YAAa,cAAgB+9X,KACxCC,EAAc/7Z,UAAW,uBAAmB,GAC/CwvF,IACI9iF,GAAUqxB,YAAa,YAAc+9X,KACtCC,EAAc/7Z,UAAW,qBAAiB,GACtC+7Z,GACTp4V,ICtEEsrB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAM5Dy6X,GAA4B,SAAUlsU,GAEtC,SAASksU,IACL,OAAkB,OAAXlsU,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAoB/D,OAtBAsqF,GAAU+sU,EAAYlsU,GAItBN,IACI3jF,EAAS,KACVmwZ,EAAWh8Z,UAAW,UAAM,GAC/BwvF,IACI3jF,EAAS,OACVmwZ,EAAWh8Z,UAAW,mBAAe,GACxCwvF,IACI3jF,EAAS,KACVmwZ,EAAWh8Z,UAAW,YAAQ,GACjCwvF,IACI3jF,EAAS,KACVmwZ,EAAWh8Z,UAAW,gBAAY,GACrCwvF,IACI3jF,KACDmwZ,EAAWh8Z,UAAW,YAAQ,GACjCwvF,IACI3jF,KACDmwZ,EAAWh8Z,UAAW,iBAAa,GAC/Bg8Z,GACTr4V,IC5CEsrB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAO5D06X,GAAwB,SAAUnsU,GAElC,SAASmsU,IACL,OAAkB,OAAXnsU,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAwD/D,OA1DAsqF,GAAUgtU,EAAQnsU,GAIlBN,IACI3jF,EAAS,KACVowZ,EAAOj8Z,UAAW,iBAAa,GAClCwvF,IACI3jF,EAAS,KACVowZ,EAAOj8Z,UAAW,yBAAqB,GAC1CwvF,IACI3jF,EAAS,KACVowZ,EAAOj8Z,UAAW,uBAAmB,GACxCwvF,IACI3jF,EAAS,KACVowZ,EAAOj8Z,UAAW,oBAAgB,GACrCwvF,IACI3jF,EAAS,KACVowZ,EAAOj8Z,UAAW,oBAAgB,GACrCwvF,IACI3jF,EAAS,KACVowZ,EAAOj8Z,UAAW,oBAAgB,GACrCwvF,IACI9iF,GAAUyE,KAAM,GAAIE,IAAK,GAAID,MAAO,EAAGE,OAAQ,GAAKmwT,KACrDw6F,EAAOj8Z,UAAW,cAAU,GAC/BwvF,IACI3jF,EAAS,SACVowZ,EAAOj8Z,UAAW,2BAAuB,GAC5CwvF,IACI3jF,EAAS,SACVowZ,EAAOj8Z,UAAW,yBAAqB,GAC1CwvF,IACI3jF,EAAS,gBACVowZ,EAAOj8Z,UAAW,mBAAe,GACpCwvF,IACI3jF,EAAS,SACVowZ,EAAOj8Z,UAAW,2BAAuB,GAC5CwvF,IACI3jF,EAAS,YACVowZ,EAAOj8Z,UAAW,yBAAqB,GAC1CwvF,IACI3jF,EAAS,SACVowZ,EAAOj8Z,UAAW,YAAQ,GAC7BwvF,IACI3jF,KACDowZ,EAAOj8Z,UAAW,qBAAiB,GACtCwvF,IACI3jF,KACDowZ,EAAOj8Z,UAAW,iBAAa,GAClCwvF,IACI3jF,KACDowZ,EAAOj8Z,UAAW,cAAU,GAC/BwvF,IACI3jF,GAAS,IACVowZ,EAAOj8Z,UAAW,uBAAmB,GACxCwvF,IACI3jF,EAAS,KACVowZ,EAAOj8Z,UAAW,YAAQ,GACtBi8Z,GACTt4V,InWyQEtF,IACAghI,KAAQ,UACR3zI,OAAU,YACVd,OAAU,UACVG,KAAQ,OACR2B,WAAc,WACdL,WAAc,WACdE,YAAe,WACfC,YAAe,WACf6B,KAAQ,YACR6tW,SAAY,YACZ5vW,gBAAmB,YACnBK,gBAAmB,YACnBP,gBAAmB,YACnBK,gBAAmB,YACnB0vW,mBAAsB,OACtBC,mBAAsB,OACtBC,kBAAqB,OACrBC,kBAAqB,OACrBC,WAAc,OACdC,WAAc,OACdl1E,IAAO,UACPwiE,UAAa,UACb2S,SAAY,WoWjXZxtU,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAyBxCotU,GAA0B,WAK1B,SAASA,EAASvwX,EAASwwX,QACD,IAAlBA,IAA4BA,GAAgB,GAIhDh4Z,KAAKi4Z,eAAiB,KAItBj4Z,KAAKk4Z,UAAW,EAIhBl4Z,KAAKm4Z,iBAAkB,EAIvBn4Z,KAAKuU,eAAiB,KACtBvU,KAAKo4Z,SAAU,EACfp4Z,KAAKq4Z,kBAAmB,EAExBr4Z,KAAKs4Z,cAILt4Z,KAAKu4Z,aAAgBzmW,SAAWD,eAChC7xD,KAAKw4Z,mBAAsB1mW,SAAWD,eACtC7xD,KAAKi4Z,eAAiBzwX,EACtBxnC,KAAKm4Z,gBAAkBH,EA0C3B,OAxCAD,EAAS18Z,UAAUo9Z,YAAc,SAAUlkZ,GACvCvU,KAAKuU,eAAiBA,EACtBvU,KAAKk4Z,UAAW,GAEpBH,EAAS18Z,UAAUq9Z,UAAY,SAAUz4Z,GACrCD,KAAKuU,eAAiBtU,EAAK1D,OAC3ByD,KAAK8sR,cAAgB9sR,KAAKi+O,gBAAkBj+O,KAAK24Z,aAAe14Z,EAAKiU,SACrElU,KAAKq4Z,kBAAmB,EACxBr4Z,KAAKy4Z,YAAYx4Z,EAAK1D,QACtByD,KAAKi4Z,eAAeW,iBAAiB54Z,KAAKm4Z,kBAE9CJ,EAAS18Z,UAAUwkV,UAAY,SAAU5/U,GAGrC,OAFAD,KAAKi+O,gBAAkBh+O,EAAKiU,UAEpBlU,KAAKo4Z,SAEjBL,EAAS18Z,UAAUw9Z,QAAU,SAAU54Z,GACnCD,KAAKi+O,gBAAkBh+O,EAAKiU,SAE5BlU,KAAKq4Z,kBAAmB,EACxBr4Z,KAAKi4Z,eAAea,eAAe94Z,KAAKm4Z,iBAExCn4Z,KAAK+4Z,aAEThB,EAAS18Z,UAAU09Z,UAAY,WACtB/4Z,KAAKq4Z,kBACNr4Z,KAAKi4Z,eAAep0R,eAExB7jI,KAAKi4Z,eAAiB,KACtBj4Z,KAAKuU,eAAiB,KACtBvU,KAAKi+O,gBAAkB,KACvBj+O,KAAKk4Z,UAAW,EAChBl4Z,KAAKo4Z,SAAU,GAEnBL,EAAS18Z,UAAUkiI,WAAa,SAAUt9H,GACtCD,KAAKi+O,gBAAkBh+O,EAAKiU,UAEhC6jZ,EAAS18Z,UAAU4kV,WAAa,SAAUhgV,GACtCD,KAAK64Z,QAAQ54Z,IAEV83Z,KAMPiB,GAA4B,SAAU7tU,GAEtC,SAAS6tU,IACL,OAAkB,OAAX7tU,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAoD/D,OAtDAsqF,GAAU0uU,EAAY7tU,GAItB6tU,EAAW39Z,UAAUq9Z,UAAY,SAAUz4Z,GACvCD,KAAKk4Z,UAAW,EAChB/sU,EAAO9vF,UAAUq9Z,UAAUp3Z,KAAKtB,KAAMC,IAE1C+4Z,EAAW39Z,UAAUwkV,UAAY,SAAU5/U,GAGvC,GAFAkrF,EAAO9vF,UAAUwkV,UAAUv+U,KAAKtB,KAAMC,GAElCD,KAAKk4Z,WAAsE,IAA1Dh+W,GAAMrB,OAAO74C,KAAKi+O,gBAAiBj+O,KAAK24Z,cAAyB,CAClF,IAAItlY,EAAO6C,GAAK0W,UAAU5sC,KAAK24Z,aAAc34Z,KAAKi+O,kBAClDj+O,KAAKi4Z,eAAenG,uBAAuBz+X,EAAKtmB,EAAGsmB,EAAKrmB,EAAGqmB,EAAKrd,MAAOqd,EAAKtd,QAEhF,OAAQ/V,KAAKo4Z,SAEjBY,EAAW39Z,UAAUw9Z,QAAU,SAAU54Z,GAErC,IAA8D,IAA1Di6C,GAAMrB,OAAO74C,KAAKi+O,gBAAiBj+O,KAAK24Z,eAA2B34Z,KAAKk4Z,SAAU,CAClF,IAAIhsW,EAASh2B,GAAK0W,UAAU5sC,KAAK24Z,aAAc34Z,KAAKi+O,kBACpDj+O,KAAKi4Z,eAAegB,sBAAsB/sW,OAEzC,CAED,IAAIgtW,EAAal5Z,KAAKi4Z,eAAekB,oBAChCn5Z,KAAKi4Z,eAAergW,gBAAmB33D,EAAK0mB,MAAS1mB,EAAK0mB,KAAKkB,QAQ5D5nB,GAAQA,EAAK1D,SACRyD,KAAKi4Z,eAAen/V,WAAW74D,EAAK1D,QAIb,IAApB0D,EAAKm5Z,YACLp5Z,KAAKi4Z,eAAeoB,SAASp5Z,EAAK1D,QAJtCyD,KAAKi4Z,eAAeqB,eAAer5Z,EAAK1D,SAAS,KATzDyD,KAAKi4Z,eAAesB,eAA+B,OAAhBt5Z,EAAK1D,QACpC0D,EAAK1D,QACLyD,KAAKi4Z,eAAeqB,eAAer5Z,EAAK1D,SAAS,EAAO28Z,IAiBpEl5Z,KAAKk4Z,UAAW,EAChB/sU,EAAO9vF,UAAUw9Z,QAAQv3Z,KAAKtB,KAAMC,IAExC+4Z,EAAW39Z,UAAU4kV,WAAa,SAAUhgV,GACpCD,KAAKk4Z,UACLl4Z,KAAK64Z,QAAQ54Z,IAGd+4Z,GACTjB,IAKEyB,GAA6B,SAAUruU,GAEvC,SAASquU,EAAYvB,EAAgBz4W,GACjC,IAAIz/C,EAAQorF,EAAO7pF,KAAKtB,KAAMi4Z,GAAgB,IAASj4Z,KAEvD,OADAD,EAAMy/C,SAAWA,EACVz/C,EAgLX,OApLAuqF,GAAUkvU,EAAaruU,GAMvBquU,EAAYn+Z,UAAUq9Z,UAAY,SAAUz4Z,GACxCD,KAAKk4Z,UAAW,EAChBl4Z,KAAKu4Z,iBAAcp9Z,EACb6E,gBAAgBy5Z,KAClBz5Z,KAAKu4Z,YAAcxrX,GAAY9sC,EAAK1D,SAExC4uF,EAAO9vF,UAAUq9Z,UAAUp3Z,KAAKtB,KAAMC,GACtC,IACI4xD,EAMJ,GALI5xD,EAAK1D,QAAU0D,EAAK1D,OAAOs1D,cACd9kD,EAAG/M,KAAK24Z,aAAa5rZ,EAAGC,EAAGhN,KAAK24Z,aAAa3rZ,GAC1D6kD,EAAa5xD,EAAK1D,OAAOs1D,WAAW,IAGlB,sBAAlB7xD,KAAKw/C,UAAsD,sBAAlBx/C,KAAKw/C,SAC9C,IAAK,IAAIrjD,EAAI,EAAGA,EAAI01D,EAAW/oB,SAASrsC,OAAQN,IAAK,CACjD,IAAIytC,EAAUioB,EAAW/oB,SAAS3sC,GAC9Bu9Z,EAAiBx/W,GAAMC,aAAavQ,EAAQwZ,QAA2BxZ,EAAQijB,aAAzBjjB,EAAQwZ,OAC9Du2W,EAAiBz/W,GAAMC,aAAavQ,EAAQvB,QAA2BuB,EAAQkjB,aAAzBljB,EAAQvB,QAC9DlkC,GAASnE,KAAKi+O,gBAAiBy7K,EAAe7nW,EAAW5E,aACzD9oD,GAASnE,KAAKi+O,gBAAiB07K,EAAe9nW,EAAW5E,eACzDjtD,KAAK45Z,gBAAkBhwX,GAInC5pC,KAAKi+O,gBAAkBh+O,EAAKiU,UAEhCslZ,EAAYn+Z,UAAUw9Z,QAAU,SAAU54Z,GAGtC,GAFAD,KAAKi4Z,eAAe4B,iBACpB75Z,KAAKi4Z,eAAe6B,aACb95Z,gBAAgBy5Z,KAA8C,uBAAlBz5Z,KAAKw/C,UACjDtF,GAAMrB,OAAO54C,EAAK1D,OAAOs1D,WAAW,GAAG9a,YAAa/2C,KAAKu4Z,YAAY1mW,WAAW,GAAG9a,cACjF92C,EAAK1D,OAAOs1D,WAAW,GAAGva,WAAat3C,KAAKu4Z,YAAY1mW,WAAW,GAAGva,YACxD,uBAAlBt3C,KAAKw/C,UACCtF,GAAMrB,OAAO54C,EAAK1D,OAAOs1D,WAAW,GAAG9S,YAAa/+C,KAAKu4Z,YAAY1mW,WAAW,GAAG9S,cAC9E9+C,EAAK1D,OAAOs1D,WAAW,GAAGm5V,WAAahrZ,KAAKu4Z,YAAY1mW,WAAW,GAAGm5V,WAgCjF,KAAMhrZ,gBAAgBy5Z,IACJ,sBAAlBz5Z,KAAKw/C,UAAsD,sBAAlBx/C,KAAKw/C,WAC3Cx/C,KAAKu4Z,aAAet4Z,EAAK1D,OAAQ,CAG7Bw9Z,GACArzZ,KAAM,iBAAkBszZ,WAFtBjtX,GAAY9sC,EAAK1D,QAEsB09Z,WAAYj6Z,KAAKu4Z,YAAan+N,SAAU,YAErFp6L,KAAKi4Z,eAAeiC,gBAAgBH,QAxCwD,CAChG,IAAII,OAAY,EACZt6W,OAAY,EACZ5/C,EAAK1D,QAAU0D,EAAK1D,OAAOs1D,aAC3BsoW,GACIptZ,EAAG/M,KAAK24Z,aAAa5rZ,EAAGC,EAAGhN,KAAK24Z,aAAa3rZ,GAEjD6yC,EAAY5/C,EAAK1D,OAAOs1D,WAAW,IAEvC,IAAIuoW,OAAiB,EACjBC,OAAiB,EACrB,GAAIp6Z,EAAKkH,OAAQ,CACb,IAAIA,EAASnH,KAAKi4Z,eAAeqC,WAAWr6Z,EAAKs3C,cAAet3C,EAAKkH,OAA0B,uBAAlBnH,KAAKw/C,UACjFr4C,aAAkByxD,GAAawhW,EAAiBjzZ,EAAO7D,GAAK+2Z,EAAiBlzZ,EAAO7D,GAEzF,IAAIyuF,GACAlyC,UAAWA,EAAWvR,MAAO,YAAawJ,WAAYuiX,EACtDrxZ,SAAUmxZ,EAAW7yZ,SAAU6yZ,EAAWthY,QAAQ,EAAOmf,WAAYoiX,GAErE5zY,EAA4B,uBAAlBxmB,KAAKw/C,SAAoCshW,GAAayZ,kBAAoBzZ,GAAa0Z,kBAGrG,GAFAx6Z,KAAKi4Z,eAAezuQ,aAAahjI,EAASurE,GAC1C/xF,KAAKi4Z,eAAewC,sBAAsB56W,GAAW,GACjD7/C,KAAKu4Z,aAAet4Z,EAAK1D,OAAQ,CACjC,IAEIw9Z,GACArzZ,KAAM,oBAAqBszZ,WAAYjtX,GAFrCA,GAAY9sC,EAAK1D,SAEsC09Z,WAAYltX,GAAY/sC,KAAKu4Z,aACtFn+N,SAAU,YAEdp6L,KAAKi4Z,eAAeiC,gBAAgBH,IAc5C5uU,EAAO9vF,UAAUw9Z,QAAQv3Z,KAAKtB,KAAMC,IAExCu5Z,EAAYn+Z,UAAUwkV,UAAY,SAAU5/U,GAExC,GADAkrF,EAAO9vF,UAAUwkV,UAAUv+U,KAAKtB,KAAMC,KAC/BD,gBAAgBy5Z,MAA8C,uBAAlBz5Z,KAAKw/C,UACpDtF,GAAMrB,OAAO54C,EAAK1D,OAAOs1D,WAAW,GAAG9a,YAAa/2C,KAAKu4Z,YAAY1mW,WAAW,GAAG9a,cAChE,uBAAlB/2C,KAAKw/C,UACFtF,GAAMrB,OAAO54C,EAAK1D,OAAOs1D,WAAW,GAAG9S,YAAa/+C,KAAKu4Z,YAAY1mW,WAAW,GAAG9S,cAAgB,CACvG,IAAI/1C,OAAW,EACX6oD,OAAa,EACb5xD,EAAK1D,QAAU0D,EAAK1D,OAAOs1D,aAC3B7oD,GAAa+D,EAAG/M,KAAK24Z,aAAa5rZ,EAAGC,EAAGhN,KAAK24Z,aAAa3rZ,GAC1D6kD,EAAa5xD,EAAK1D,OAAOs1D,WAAW,IAExC,IAAI7Z,OAAa,EACbF,OAAa,EACjB,GAAI73C,EAAKkH,OAAQ,CACb2wC,EAAa73C,EAAKkH,OAAO7D,IACrB6D,EAASnH,KAAKi4Z,eAAeqC,WAAWr6Z,EAAKs3C,cAAet3C,EAAKkH,OAA0B,uBAAlBnH,KAAKw/C,qBAC/DoZ,IAAazxD,aAAkBilZ,GAAgBp0W,EAAa7wC,EAAO7D,GAAKw0C,EAAa3wC,EAAO7D,GAEnH,IAAIyuF,GACAlyC,UAAWgS,EAAYvjB,MAAO,QAASwJ,WAAYA,EACnD9uC,SAAUA,EAAU1B,SAAU0B,EAAU6vB,QAAQ,EAAOmf,WAAYA,GAEnExxB,EAA4B,uBAAlBxmB,KAAKw/C,SACfshW,GAAayZ,kBAAoBzZ,GAAa0Z,kBAClDx6Z,KAAKi4Z,eAAezuQ,aAAahjI,EAASurE,GAG9C,GADA/xF,KAAKi+O,gBAAkBh+O,EAAKiU,SACxBlU,KAAKi+O,iBAAmBj+O,KAAK24Z,aAAc,CAC3C,IAAI38W,EAAQh8C,KAAKi+O,gBAAgBlxO,EAAI/M,KAAK24Z,aAAa5rZ,EACnDyuC,EAAQx7C,KAAKi+O,gBAAgBjxO,EAAIhN,KAAK24Z,aAAa3rZ,EACnD1F,OAAW,EACX0B,OAAW,EACfhJ,KAAKi+O,gBAAkBj+O,KAAKi4Z,eAAeyC,iBAAiB16Z,KAAKi+O,iBACjE,IAAIp+L,OAAY,EACZ5/C,EAAK1D,QAAU0D,EAAK1D,OAAOs1D,aAC3BvqD,GACIyF,EAAG/M,KAAKi+O,gBAAgBlxO,EAAGC,EAAGhN,KAAKi+O,gBAAgBjxO,GAEvDhE,GACI+D,EAAG/M,KAAK24Z,aAAa5rZ,EAAGC,EAAGhN,KAAK24Z,aAAa3rZ,GAEjD6yC,EAAY5/C,EAAK1D,OAAOs1D,WAAW,IAEvC,IAAI8oW,OAAe,EACfC,OAAe,EACnB,GAAI36Z,EAAKkH,OAAQ,CACb,IAAIA,GAAAA,EAASnH,KAAKi4Z,eAAeqC,WAAWr6Z,EAAKs3C,cAAet3C,EAAKkH,OAA0B,uBAAlBnH,KAAKw/C,qBAC/DoZ,GAAa+hW,EAAexzZ,EAAO7D,GAAKs3Z,EAAezzZ,EAAO7D,GAEjFyuF,GACAlyC,UAAWA,EAAWvR,MAAO,WAAYwJ,WAAY8iX,EACrD5xZ,SAAUA,EAAU1B,SAAUA,EAAUuxB,QAAQ,EAAOmf,WAAY2iX,GAEvE,KAAM36Z,gBAAgBy5Z,IAAuB,CACrCjzY,EAA4B,uBAAlBxmB,KAAKw/C,SACfshW,GAAayZ,kBAAoBzZ,GAAa0Z,kBAClDx6Z,KAAKi4Z,eAAezuQ,aAAahjI,EAASurE,GAiB9C,KAfKA,EAAIl5D,QAAU74B,KAAKk4Z,eAA8B/8Z,IAAlB6E,KAAKw/C,UAAoC,IAAVxD,GAAyB,IAAVR,KAC9Ex7C,KAAKo4Z,SAAWp4Z,KAAKi4Z,eAAe4C,kBAAkB76Z,KAAKw/C,SAAUv/C,EAAK1D,OAAQyD,KAAKi+O,gBAAiBj+O,KAAK45Z,gBAAiB35Z,EAAKkH,OAAQwzZ,GAC3I36Z,KAAKi4Z,eAAe4B,iBAChB55Z,EAAKkH,SAA8B,uBAAlBnH,KAAKw/C,UAAqC6H,GAAcpnD,EAAKkH,SACxD,uBAAlBnH,KAAKw/C,UAAqC0H,GAAajnD,EAAKkH,UAC5DnH,KAAKi4Z,eAAe6C,cAAc96Z,KAAKw/C,SAAUv/C,EAAM06Z,EAAcC,IACrE56Z,KAAKi4Z,eAAe8C,WAAW96Z,EAAK1D,OAAQyD,KAAKw/C,UAErDx/C,KAAKi4Z,eAAe+C,QAAQh7Z,KAAKw/C,SAAUv/C,KAED,IAArCD,KAAKw/C,SAASjhD,QAAQ,YAC3ByB,KAAKi4Z,eAAe8C,WAAW96Z,EAAK1D,OAAQyD,KAAKw/C,UACjDx/C,KAAKi4Z,eAAe4B,mBAGxB75Z,KAAKi4Z,eAAegD,0BAA2B,CAC/C,IAAI7gY,EAAUp6B,KAAKq0X,kBAAkBp0X,EAAKiU,UAC1ClU,KAAKi4Z,eAAevmY,YAAYzxB,EAAK1D,OAAQ0D,EAAKiU,SAAUkmB,EAAS,cAAep6B,KAAKq4Z,kBACzFr4Z,KAAKq4Z,kBAAmB,GAIhC,OADAr4Z,KAAK24Z,aAAe34Z,KAAKi+O,iBACjBj+O,KAAKo4Z,SAEjBoB,EAAYn+Z,UAAU4kV,WAAa,SAAUhgV,GACzCD,KAAK64Z,QAAQ54Z,IAEjBu5Z,EAAYn+Z,UAAUg5X,kBAAoB,SAAUngX,GAChD,MAAO,KAAO7H,KAAKoxB,MAAMvpB,EAASnH,GAAK,MAAaV,KAAKoxB,MAAMvpB,EAASlH,IAE5EwsZ,EAAYn+Z,UAAU09Z,UAAY,WAC9B5tU,EAAO9vF,UAAU09Z,UAAUz3Z,KAAKtB,MAChCA,KAAK24Z,aAAe,KACpB34Z,KAAKw/C,SAAW,MAEbg6W,GACTzB,IAKEmD,GAA0B,SAAU/vU,GAEpC,SAAS+vU,EAASjD,EAAgBkD,GAC9B,IAAIp7Z,EAAQorF,EAAO7pF,KAAKtB,KAAMi4Z,GAAgB,IAASj4Z,KAGvD,OAFAD,EAAMquG,cAAgB,KACtBruG,EAAMq7Z,WAAaD,EACZp7Z,EAyLX,OA9LAuqF,GAAU4wU,EAAU/vU,GAOpB+vU,EAAS7/Z,UAAUq9Z,UAAY,SAAUz4Z,GACrC,GAAIA,EAAK1D,kBAAkB4qD,IAAQlnD,EAAK1D,kBAAkBupD,GAAW,CACjE9lD,KAAKi4Z,eAAeqB,eAAer5Z,EAAK1D,QAAS0D,EAAK0mB,MAAQ1mB,EAAK0mB,KAAKkB,SACxE,IAAIwzY,GAAmBvpW,SAAWD,eAC9B5xD,EAAK1D,kBAAkB4qD,GACvBk0W,EAAevpW,MAAMttD,KAAKuoC,GAAY9sC,EAAK1D,SAG3C8+Z,EAAexpW,WAAWrtD,KAAKuoC,GAAY9sC,EAAK1D,SAEpDyD,KAAKu4Z,YAAcxrX,GAAYsuX,QAG/Br7Z,KAAKu4Z,YAAcxrX,GAAY9sC,EAAK1D,QAExCyD,KAAKw4Z,kBAAoBx4Z,KAAKi4Z,eAAeqD,cAAcr7Z,EAAK1D,QAChE4uF,EAAO9vF,UAAUq9Z,UAAUp3Z,KAAKtB,KAAMC,GACtCD,KAAKu7Z,eAAkBxuZ,EAAG,EAAGC,EAAG,IAEpCkuZ,EAAS7/Z,UAAUw9Z,QAAU,SAAU54Z,GACnC,IAAIlD,EACAy+Z,GAAe,EACnB,GAAwB,SAApBx7Z,KAAKo7Z,WAAuB,CAC5B,GAAIn7Z,EAAK1D,kBAAkB4qD,IAAQlnD,EAAK1D,kBAAkBupD,GAAW,CACjE,IAAIk0W,GAAeloW,SAAWD,eAC1B5xD,EAAK1D,kBAAkB4qD,GACvB6yW,EAAWloW,MAAMttD,KAAKuoC,GAAY9sC,EAAK1D,SAGvCy9Z,EAAWnoW,WAAWrtD,KAAKuoC,GAAY9sC,EAAK1D,SAEhDQ,EAAMgwC,GAAYitX,GAClB,IAAIjoZ,EAAU9R,EAAK1D,OAAOwV,QAC1BhV,EAAI8O,QAAUkG,EAAQlG,QACtB9O,EAAIkP,QAAU8F,EAAQ9F,aAGtBlP,EAAMgwC,GAAY9sC,EAAK1D,QAE3B,GAAIQ,EAAI8O,UAAY7L,KAAKu4Z,YAAY1sZ,SAAW9O,EAAIkP,UAAYjM,KAAKu4Z,YAAYtsZ,QAAS,CACtF,IAAIkuZ,OAAY,EACZxlW,OAAY,EACZ10D,EAAK1D,SACLo4D,GAAc9oD,QAAS5L,EAAK1D,OAAOwV,QAAQlG,QAASI,QAAShM,EAAK1D,OAAOwV,QAAQ9F,SACjFkuZ,GAActuZ,QAAS5L,EAAK1D,OAAOwV,QAAQlG,QAASI,QAAShM,EAAK1D,OAAOwV,QAAQ9F,UAErF,IAAI8lF,GACAx1F,OAAQ0D,EAAK1D,OAAQ+xC,MAAO,YAAatlC,SAAUmxZ,EAAW7yZ,SAAUqtD,EACxExtD,OAAQnH,KAAKouG,cAAe1vC,eAAgB1+D,KAAKi+O,gBAAiBw9K,WAAW,EAAM5iY,QAAQ,GAE/F74B,KAAKi4Z,eAAezuQ,aAAas3P,GAAap5R,eAAgB31B,GAC9D/xF,KAAKi4Z,eAAeyD,mBACpBF,GAAe,EACf,IAAIzB,GACArzZ,KAAM,kBACNszZ,WAAYjtX,GAAYhwC,GAAMk9Z,WAAYltX,GAAY/sC,KAAKu4Z,aAAcn+N,SAAU,YAEvF,GAAIr9L,EAAI+0D,MAAM,IAAM/0D,EAAI+0D,MAAM,GAAG26V,UAAW,CACxC,IAAIkP,GACAj1Z,KAAM,cAAe0zL,SAAU,WAC/B6/N,WAAYj6Z,KAAKw4Z,kBAAmBwB,WAAYh6Z,KAAKi4Z,eAAeqD,cAAcr7Z,EAAK1D,SAE3FyD,KAAKi4Z,eAAeiC,gBAAgByB,GAExC37Z,KAAKi4Z,eAAeiC,gBAAgBH,GAErB/5Z,KAAKi4Z,eAAe2D,UAAU57Z,KAAK24Z,aAAc34Z,KAAKi+O,gBAAiB,EAAG,GAG7F,GAFAj+O,KAAKi4Z,eAAe6B,aACpB95Z,KAAKi4Z,eAAe4D,oBAChB57Z,EAAK1D,QAAUyD,KAAKouG,eAAiBnmD,GAAajoD,KAAKouG,gBACvDpuG,KAAKi4Z,eAAe6D,YAAY77Z,EAAK1D,OAAQyD,KAAKouG,eAAgB,CAClEpuG,KAAKi4Z,eAAehlT,KAAKjzG,KAAKuU,eAAgBvU,KAAKouG,cAAepuG,KAAKi+O,iBACnElsJ,GACA/wF,QAASf,EAAK1D,OAAQ4K,OAAQnH,KAAKouG,cAAel6F,SAAUlU,KAAKi+O,gBAAiBplN,QAAQ,GAE9F74B,KAAKi4Z,eAAezuQ,aAAas3P,GAAa7tS,KAAMlhB,GAExD/xF,KAAKi4Z,eAAe4B,iBAChB2B,GACAx7Z,KAAKi4Z,eAAe8D,iBAG5B5wU,EAAO9vF,UAAUw9Z,QAAQv3Z,KAAKtB,KAAMC,IAExCi7Z,EAAS7/Z,UAAUwkV,UAAY,SAAU5/U,GACrCkrF,EAAO9vF,UAAUwkV,UAAUv+U,KAAKtB,KAAMC,GACtC,IAAI+4Q,GAAS,EACT/4Q,EAAK1D,kBAAkB4qD,IAAQlnD,EAAK1D,kBAAkBupD,GAClD7lD,EAAK1D,kBAAkB4qD,GACnBlnD,EAAK1D,OAAOsP,UAAY7L,KAAKu4Z,YAAYzmW,MAAM,GAAGjmD,SAClD5L,EAAK1D,OAAO0P,UAAYjM,KAAKu4Z,YAAYzmW,MAAM,GAAG7lD,UAClD+sQ,GAAS,GAIT9+N,GAAMrB,OAAO54C,EAAK1D,OAAOw6C,YAAa/2C,KAAKu4Z,YAAY1mW,WAAW,GAAG9a,cACrEmD,GAAMrB,OAAO54C,EAAK1D,OAAOwiD,YAAa/+C,KAAKu4Z,YAAY1mW,WAAW,GAAG9S,eACrEi6N,GAAS,GAKb/4Q,EAAK1D,OAAOwV,QAAQlG,UAAY7L,KAAKu4Z,YAAYxmZ,QAAQlG,SACzD5L,EAAK1D,OAAOwV,QAAQ9F,UAAYjM,KAAKu4Z,YAAYxmZ,QAAQ9F,UACzD+sQ,GAAS,GAGjB,IAAImhJ,EACAl6Z,EAAK1D,SACL49Z,GAActuZ,QAAS5L,EAAK1D,OAAOwV,QAAQlG,QAASI,QAAShM,EAAK1D,OAAOwV,QAAQ9F,UAErF,IAAI8lF,GACAx1F,OAAQ0D,EAAK1D,OAAQ+xC,MAAO,QAAStlC,SAAUmxZ,EAAW7yZ,SAAU6yZ,EACpEhzZ,OAAQlH,EAAKkH,OAAQu3D,eAAgBz+D,EAAKiU,SAAUunZ,WAAW,EAAM5iY,QAAQ,GAMjF,GAJImgP,GACAh5Q,KAAKi4Z,eAAezuQ,aAAas3P,GAAap5R,eAAgB31B,GAElE/xF,KAAKi+O,gBAAkBh+O,EAAKiU,SACJ,SAApBlU,KAAKo7Z,WAAuB,CACpBp7Z,KAAKi+O,gBAAgBlxO,EAAI/M,KAAK24Z,aAAa5rZ,EAC3C/M,KAAKi+O,gBAAgBjxO,EAAIhN,KAAK24Z,aAAa3rZ,EADnD,IAEIgvC,EAAQh8C,KAAKu7Z,cAAcxuZ,GAAK/M,KAAKi+O,gBAAgBlxO,EAAI/M,KAAK24Z,aAAa5rZ,GAC3EyuC,EAAQx7C,KAAKu7Z,cAAcvuZ,GAAKhN,KAAKi+O,gBAAgBjxO,EAAIhN,KAAK24Z,aAAa3rZ,GAC/EhN,KAAKi4Z,eAAe+D,gBAAgB/7Z,EAAMD,KAAKi+O,iBAC/Cj+O,KAAKi4Z,eAAe8C,WAAW96Z,EAAK1D,QACpCyD,KAAKi4Z,eAAe6B,aACpB,IAAImC,EACAtnW,OAAY,EACZunW,EAAel8Z,KAAKi4Z,eAAe2D,UAAU57Z,KAAK24Z,aAAc34Z,KAAKi+O,gBAAiBjiM,EAAOR,GACjGx7C,KAAKu7Z,cAAcxuZ,EAAIivC,EAAQkgX,EAAanvZ,EAC5C/M,KAAKu7Z,cAAcvuZ,EAAIwuC,EAAQ0gX,EAAalvZ,EACxC/M,EAAK1D,SACL0/Z,GAAgBpwZ,QAAS5L,EAAK1D,OAAOwV,QAAQlG,QAASI,QAAShM,EAAK1D,OAAOwV,QAAQ9F,SACnF0oD,GACI9oD,QAAS5L,EAAK1D,OAAOwV,QAAQlG,QAAUqwZ,EAAanvZ,EACpDd,QAAShM,EAAK1D,OAAOwV,QAAQ9F,QAAUiwZ,EAAalvZ,IAGxDhN,KAAKouG,eAAiBnuG,EAAKkH,SAAWnH,KAAKouG,eAC3CpuG,KAAKi4Z,eAAekE,oBAAoBl8Z,EAAK1D,OAAQ0D,EAAKkH,OAAQnH,KAAKouG,eAE3EpuG,KAAKouG,cAAgBnuG,EAAKkH,OAC1B,IAAIi1Z,GACA7/Z,OAAQ0D,EAAK1D,OAAQ+xC,MAAO,WAAYtlC,SAAUizZ,EAAa30Z,SAAUqtD,EACzExtD,OAAQlH,EAAKkH,OAAQu3D,eAAgBz+D,EAAKiU,SAAUunZ,WAAW,EAAM5iY,QAAQ,GAGjF,GADA74B,KAAKi4Z,eAAezuQ,aAAas3P,GAAap5R,eAAgB00S,IACzDA,EAAMvjY,OAAQ,CACf74B,KAAKo4Z,SAAWp4Z,KAAKi4Z,eAAeoE,oBAAoBH,EAAanvZ,EAAGmvZ,EAAalvZ,GACrF,IAAIorZ,GAAYp4Z,KAAKi4Z,eAAe5kT,UAAUrzG,KAAKuU,eAAgBvU,KAAKouG,cAAepuG,KAAKi+O,iBAC5Fj+O,KAAKo4Z,QAAUp4Z,KAAKo4Z,SAAWA,EASnC,GAPIp4Z,KAAKouG,eAAkBnuG,EAAK1D,SAAWyD,KAAKouG,eAC5CpuG,KAAKi4Z,eAAe6D,YAAY77Z,EAAK1D,OAAQyD,KAAKouG,eAClDpuG,KAAKi4Z,eAAeqE,gBAAgBt8Z,KAAKouG,eAGzCpuG,KAAKi4Z,eAAe4D,oBAEpB77Z,KAAKi4Z,eAAegD,0BAA2B,CAC/C,IAAI7gY,EAAUp6B,KAAKq0X,kBAAkBp0X,EAAK1D,QAC1CyD,KAAKi4Z,eAAevmY,YAAYzxB,EAAK1D,OAAQ0D,EAAKiU,SAAUkmB,EAAS,WAAYp6B,KAAKq4Z,kBACtFr4Z,KAAKq4Z,kBAAmB,QAI5Br4Z,KAAKi4Z,eAAesE,SAASt8Z,EAAK1D,OAAQ0D,EAAK+2C,cAAe/2C,EAAKiU,SAASnH,EAAI/M,KAAK24Z,aAAa5rZ,EAAG9M,EAAKiU,SAASlH,EAAIhN,KAAK24Z,aAAa3rZ,GAG7I,OADAhN,KAAK24Z,aAAe34Z,KAAKi+O,iBACjBj+O,KAAKo4Z,SAEjB8C,EAAS7/Z,UAAUg5X,kBAAoB,SAAU9zX,GAC7C,MAAO,KAAO8L,KAAKoxB,MAAMl9B,EAAKwR,QAAQ2kB,OAAO3pB,GAAK,MAAaV,KAAKoxB,MAAMl9B,EAAKwR,QAAQ2kB,OAAO1pB,IAElGkuZ,EAAS7/Z,UAAU4kV,WAAa,SAAUhgV,GACtCD,KAAK64Z,QAAQ54Z,IAEjBi7Z,EAAS7/Z,UAAU09Z,UAAY,WAC3B5tU,EAAO9vF,UAAU09Z,UAAUz3Z,KAAKtB,MAChCA,KAAKouG,cAAgB,KACrBpuG,KAAK24Z,aAAe,MAEjBuC,GACTnD,IAKEyE,GAA4B,SAAUrxU,GAEtC,SAASqxU,EAAWvE,GAChB,OAAO9sU,EAAO7pF,KAAKtB,KAAMi4Z,GAAgB,IAASj4Z,KA0EtD,OA5EAsqF,GAAUkyU,EAAYrxU,GAItBqxU,EAAWnha,UAAUq9Z,UAAY,SAAUz4Z,GAEvC,GADAD,KAAKu4Z,YAAcxrX,GAAY9sC,EAAK1D,QAChCyD,KAAKu4Z,YAAYzmW,MAAM,IAAM9xD,KAAKu4Z,YAAYzmW,MAAM,GAAG13C,SAGvD,IAAK,IADD03C,EAAQ9xD,KAAKi4Z,eAAewE,kBAAkBz8Z,KAAKu4Z,YAAYzmW,MAAM,OAChE31D,EAAI,EAAGA,EAAI21D,EAAMr1D,OAAQN,IAAK,CACnC,IAAIoE,EAAOP,KAAKi4Z,eAAeyE,WAAW5qW,EAAM31D,GAAGmH,IACnDtD,KAAKs4Z,WAAWxmW,EAAM31D,GAAGmH,IAAMypC,GAAYxsC,GAGnD4qF,EAAO9vF,UAAUq9Z,UAAUp3Z,KAAKtB,KAAMC,IAE1Cu8Z,EAAWnha,UAAUw9Z,QAAU,SAAU54Z,GACrC,GAAID,KAAKu4Z,YAAY1rX,cAAgB5sC,EAAK1D,OAAOwV,QAAQ86B,YAAa,CAClE,IAAI7jC,GAAa6jC,YAAa5sC,EAAK1D,OAAOwV,QAAQ86B,aAC9CklD,GACAx1F,OAAQ0D,EAAK1D,OAAQ+xC,MAAO,YAAatlC,SAAUA,EACnD1B,SAAU0B,EAAU6vB,QAAQ,GAEhC74B,KAAKi4Z,eAAezuQ,aAAas3P,GAAa6b,aAAc5qU,GAC5D,IAEIgoU,GACArzZ,KAAM,kBAAmBszZ,WAAYjtX,GAFnCA,GAAY9sC,EAAK1D,SAEoC09Z,WAAYltX,GAAY/sC,KAAKu4Z,aAAcn+N,SAAU,WAC5Gk+N,WAAYt4Z,KAAKs4Z,YAErBt4Z,KAAKi4Z,eAAeiC,gBAAgBH,GACpC/5Z,KAAKi4Z,eAAe4B,iBAExB1uU,EAAO9vF,UAAUw9Z,QAAQv3Z,KAAKtB,KAAMC,IAExCu8Z,EAAWnha,UAAUwkV,UAAY,SAAU5/U,GAEvC,GADAkrF,EAAO9vF,UAAUwkV,UAAUv+U,KAAKtB,KAAMC,GAClCD,KAAKu4Z,YAAY1rX,cAAgB5sC,EAAK1D,OAAOwV,QAAQ86B,YAAa,CAClE,IAAIzlB,GAAeylB,YAAa5sC,EAAK1D,OAAOwV,QAAQ86B,aAChD+vX,GACArga,OAAQ0D,EAAK1D,OAAQ+xC,MAAO,QAAStlC,SAAUoe,EAAY9f,SAAU8f,EAAYyR,QAAQ,GAE7F74B,KAAKi4Z,eAAezuQ,aAAas3P,GAAa6b,aAAcC,GAEhE58Z,KAAKi+O,gBAAkBh+O,EAAKiU,SAC5B,IAAI+kC,GAAalsC,EAAG/M,KAAKuU,eAAexC,QAAQlG,QAASmB,EAAGhN,KAAKuU,eAAexC,QAAQ9F,SACpFsV,EAAQ24B,GAAM6G,UAAU9H,EAAUj5C,KAAKi+O,iBAAmB,GAC1D4+K,EAAY78Z,KAAKi4Z,eAAe4E,UAAUt7Y,GAE9CA,IADAA,EAAsB,IAAds7Y,EAAkBA,EAAYt7Y,GACrB,KAAO,IACxB,IAAIvY,GAAa6jC,YAAa5sC,EAAK1D,OAAOwV,QAAQ86B,aAC9CvlC,GAAaulC,YAAatrB,GAC1BwwE,GACAx1F,OAAQ0D,EAAK1D,OAAQ+xC,MAAO,WAAYtlC,SAAUA,EAClD1B,SAAUA,EAAUuxB,QAAQ,GAMhC,GAJA74B,KAAKi4Z,eAAezuQ,aAAas3P,GAAa6b,aAAc5qU,GACvDA,EAAIl5D,SACL74B,KAAKo4Z,SAAYp4Z,KAAKi4Z,eAAe6E,oBAAoBv7Y,EAAQvhB,KAAKuU,eAAexC,QAAQ86B,cAE7F7sC,KAAKi4Z,eAAegD,0BAA2B,CAC/C,IAAI7gY,EAAUp6B,KAAKq0X,kBAAkBp0X,EAAK1D,QAC1CyD,KAAKi4Z,eAAevmY,YAAYzxB,EAAK1D,OAAQ0D,EAAKiU,SAAUkmB,EAAS,aAAcp6B,KAAKq4Z,kBACxFr4Z,KAAKq4Z,kBAAmB,EAE5B,OAAQr4Z,KAAKo4Z,SAEjBoE,EAAWnha,UAAUg5X,kBAAoB,SAAU9zX,GAC/C,OAAO8L,KAAKoxB,MAAOl9B,EAAKssC,YAAc,KAAM3/B,WAAa,KAE7DsvZ,EAAWnha,UAAU4kV,WAAa,SAAUhgV,GACxCD,KAAK64Z,QAAQ54Z,IAEjBu8Z,EAAWnha,UAAU09Z,UAAY,WAC7B5tU,EAAO9vF,UAAU09Z,UAAUz3Z,KAAKtB,OAE7Bw8Z,GACTzE,IAKEgF,GAA4B,SAAU5xU,GAEtC,SAAS4xU,EAAW9E,EAAgBzvX,GAChC,IAAIzoC,EAAQorF,EAAO7pF,KAAKtB,KAAMi4Z,GAAgB,IAASj4Z,KAGvD,OAFAD,EAAMi9Z,cAAgB,IAAI9mY,GAC1Bn2B,EAAMyoC,OAASA,EACRzoC,EA8QX,OAnRAuqF,GAAUyyU,EAAY5xU,GAOtB4xU,EAAW1ha,UAAUq9Z,UAAY,SAAUz4Z,GAIvC,GAHAD,KAAKu4Z,YAAcxrX,GAAY9sC,EAAK1D,QACpCyD,KAAKw4Z,kBAAoBx4Z,KAAKi4Z,eAAeqD,cAAcr7Z,EAAK1D,QAChE4uF,EAAO9vF,UAAUq9Z,UAAUp3Z,KAAKtB,KAAMC,GAClCD,KAAKu4Z,YAAYzmW,MAAM,IAAM9xD,KAAKu4Z,YAAYzmW,MAAM,GAAG13C,SAGvD,IAAK,IADD03C,EAAQ9xD,KAAKi4Z,eAAewE,kBAAkBz8Z,KAAKu4Z,YAAYzmW,MAAM,OAChE31D,EAAI,EAAGA,EAAI21D,EAAMr1D,OAAQN,IAAK,CACnC,IAAIoE,EAAOP,KAAKi4Z,eAAeyE,WAAW5qW,EAAM31D,GAAGmH,IACnDtD,KAAKs4Z,WAAWxmW,EAAM31D,GAAGmH,IAAMypC,GAAYxsC,GAGnD4qF,EAAO9vF,UAAUq9Z,UAAUp3Z,KAAKtB,KAAMC,GACtCD,KAAKg9Z,cAAcjwZ,EAAI9M,EAAK1D,OAAOwV,QAAQlG,QAC3C7L,KAAKg9Z,cAAchwZ,EAAI/M,EAAK1D,OAAOwV,QAAQ9F,QAC3CjM,KAAKg9Z,cAAcjnZ,OAAS9V,EAAK1D,OAAOwV,QAAQ26B,WAAW32B,OAC3D/V,KAAKg9Z,cAAchnZ,MAAQ/V,EAAK1D,OAAOwV,QAAQ26B,WAAW12B,OAE9D+mZ,EAAW1ha,UAAUw9Z,QAAU,SAAU54Z,GAErC,GADAD,KAAKi4Z,eAAe6B,aAChB95Z,KAAKu4Z,YAAY1sZ,UAAY5L,EAAK1D,OAAOwV,QAAQlG,SAAW7L,KAAKu4Z,YAAYtsZ,UAAYhM,EAAK1D,OAAOwV,QAAQ9F,QAAS,CACtHjM,KAAKo4Z,QAAUp4Z,KAAKksP,WAAWjsP,EAAK1D,OAAQyD,KAAKi+O,gBAAiBj+O,KAAK24Z,aAAc34Z,KAAKwoC,QAC1F,IAAIx/B,GACA6C,QAAS5L,EAAK1D,OAAOwV,QAAQlG,QAASI,QAAShM,EAAK1D,OAAOwV,QAAQ9F,QACnE+J,MAAO/V,EAAK1D,OAAOwV,QAAQ26B,WAAW12B,MAAOD,OAAQ9V,EAAK1D,OAAOwV,QAAQ26B,WAAW32B,QAEpFg8E,GACAx1F,OAAQ0D,EAAK1D,OAAQ+xC,MAAO,YAC5BtlC,SAAUA,EAAU1B,SAAU0B,EAAU6vB,QAAQ,GAEpD74B,KAAKi4Z,eAAezuQ,aAAas3P,GAAamc,WAAYlrU,GAC1D,IAAIh1F,EAAMgwC,GAAY9sC,EAAK1D,QACvBw9Z,GACArzZ,KAAM,cAAeszZ,WAAYjtX,GAAYhwC,GAAMk9Z,WAAYltX,GAAY/sC,KAAKu4Z,aAAcn+N,SAAU,WACxGk+N,WAAYt4Z,KAAKs4Z,YAIrB,GAFAt4Z,KAAKi4Z,eAAeyD,mBACpB17Z,KAAKi4Z,eAAeiC,gBAAgBH,GAChCh9Z,EAAI+0D,MAAM,IAAM/0D,EAAI+0D,MAAM,GAAG26V,UAAW,CACxC,IAAIyQ,GACAx2Z,KAAM,cAAeszZ,WAAYh6Z,KAAKi4Z,eAAeqD,cAAcr7Z,EAAK1D,QACxE09Z,WAAYj6Z,KAAKw4Z,kBAAmBp+N,SAAU,YAElDp6L,KAAKi4Z,eAAeiC,gBAAgBgD,GAExCl9Z,KAAKi4Z,eAAe8D,iBAGxB,OADA5wU,EAAO9vF,UAAUw9Z,QAAQv3Z,KAAKtB,KAAMC,IAC5BD,KAAKo4Z,SAEjB2E,EAAW1ha,UAAUwkV,UAAY,SAAU5/U,GAEvC,GADAkrF,EAAO9vF,UAAUwkV,UAAUv+U,KAAKtB,KAAMC,GAClCD,KAAKu4Z,YAAY1sZ,UAAY5L,EAAK1D,OAAOwV,QAAQlG,SAAW7L,KAAKu4Z,YAAYtsZ,UAAYhM,EAAK1D,OAAOwV,QAAQ9F,QAAS,CACtH,IAAIjD,GACA6C,QAAS5L,EAAK1D,OAAOwV,QAAQlG,QAASI,QAAShM,EAAK1D,OAAOwV,QAAQ9F,QACnE+J,MAAO/V,EAAK1D,OAAOwV,QAAQ26B,WAAW12B,MAAOD,OAAQ9V,EAAK1D,OAAOwV,QAAQ26B,WAAW32B,QAEpFg8E,GACAx1F,OAAQ0D,EAAK1D,OAAQ+xC,MAAO,QAAStlC,SAAUA,EAAU1B,SAAUtH,KAAKuU,eAAgBskB,QAAQ,GAEpG74B,KAAKi4Z,eAAezuQ,aAAas3P,GAAamc,WAAYlrU,GAE9D/xF,KAAKi+O,gBAAkBh+O,EAAKiU,SAC5B,IAEI24K,GAAY9/K,EAFR/M,KAAKi+O,gBAAgBlxO,EAAI/M,KAAK8sR,cAAc//Q,EAE9BC,EADdhN,KAAKi+O,gBAAgBjxO,EAAIhN,KAAK8sR,cAAc9/Q,GAEpD6/K,EAAUt9I,IAAavvC,KAAKuU,eAAexC,QAAQ86B,iBAAa1xC,OAAWA,EAAW0xL,GAC5E7sL,KAAKuU,eAAexC,QAAQ26B,WAAW12B,MAAQ62K,EAAQ9/K,EAAK/M,KAAKuU,eAAexC,QAAQ26B,WAAW12B,MACnGhW,KAAKuU,eAAexC,QAAQ26B,WAAW32B,OAAS82K,EAAQ7/K,EAAKhN,KAAKuU,eAAexC,QAAQ26B,WAAW32B,OAI9G,GAHA82K,EAAU7sL,KAAKm9Z,WAAWtwO,GAC1B7sL,KAAKi4Z,eAAe6B,aACpB95Z,KAAKo4Z,SAAYp4Z,KAAKksP,WAAWjsP,EAAK1D,OAAQyD,KAAK8sR,cAAe9sR,KAAKi+O,gBAAiBj+O,KAAKwoC,QACzFxoC,KAAKi4Z,eAAegD,0BAA2B,CAC/C,IAAI7gY,EAAUp6B,KAAKq0X,kBAAkBp0X,EAAK1D,QAC1CyD,KAAKi4Z,eAAevmY,YAAYzxB,EAAK1D,OAAQ0D,EAAKiU,SAAUkmB,EAAS,aAAcp6B,KAAKq4Z,kBACxFr4Z,KAAKq4Z,kBAAmB,EAG5B,OADAr4Z,KAAK24Z,aAAe34Z,KAAKi+O,iBACjBj+O,KAAKo4Z,SAEjB2E,EAAW1ha,UAAU4kV,WAAa,SAAUhgV,GACxCD,KAAK64Z,QAAQ54Z,IAEjB88Z,EAAW1ha,UAAUg5X,kBAAoB,SAAU9zX,GAC/C,MAAO,KAAO8L,KAAKoxB,MAAMl9B,EAAKwR,QAAQ2kB,OAAO1gB,OAAS,MAAa3J,KAAKoxB,MAAMl9B,EAAKwR,QAAQ2kB,OAAO3gB,SAEtGgnZ,EAAW1ha,UAAU+ha,SAAW,WAC5B,OAAQp9Z,KAAKwoC,QACT,IAAK,aACD,OAASz7B,EAAG,EAAGC,EAAG,IACtB,IAAK,aACD,OAASD,EAAG,EAAGC,EAAG,IACtB,IAAK,cACD,OAASD,EAAG,GAAKC,EAAG,GACxB,IAAK,cACD,OAASD,EAAG,GAAKC,EAAG,GACxB,IAAK,kBACD,OAASD,EAAG,EAAGC,EAAG,GACtB,IAAK,kBACD,OAASD,EAAG,EAAGC,EAAG,GACtB,IAAK,kBACD,OAASD,EAAG,EAAGC,EAAG,GACtB,IAAK,kBACD,OAASD,EAAG,EAAGC,EAAG,GAE1B,OAASD,EAAG,GAAKC,EAAG,KAExB+vZ,EAAW1ha,UAAU8ha,WAAa,SAAU/8Y,GACxC,OAAQpgB,KAAKwoC,QACT,IAAK,aACD,OAASz7B,EAAGqT,EAAOrT,EAAGC,EAAG,GAC7B,IAAK,kBACD,OAAOoT,EACX,IAAK,cACD,OAASrT,EAAG,EAAGC,EAAGoT,EAAOpT,GAC7B,IAAK,cACD,OAASD,EAAG,EAAGC,GAAIoT,EAAOpT,GAC9B,IAAK,kBACD,OAASD,EAAGqT,EAAOrT,EAAGC,GAAIoT,EAAOpT,GACrC,IAAK,kBACD,OAASD,GAAIqT,EAAOrT,EAAGC,GAAIoT,EAAOpT,GACtC,IAAK,aACD,OAASD,GAAIqT,EAAOrT,EAAGC,EAAG,GAC9B,IAAK,kBACD,OAASD,GAAIqT,EAAOrT,EAAGC,EAAGoT,EAAOpT,GAEzC,OAAOoT,GAKX28Y,EAAW1ha,UAAU6wP,WAAa,SAAUv+N,EAAO03B,EAAY7F,EAAUhX,GACrE,IAOIoC,EAPAyyX,GAAmBC,SAAS,EAAO3xZ,OAAQ,EAAGa,MAAM,EAAOC,OAAO,GAClE8wZ,GAAiBD,SAAS,EAAO3xZ,OAAQ,EAAGe,KAAK,EAAOC,QAAQ,GAChE6wZ,EAAOx9Z,KAAKi+O,gBAAgBlxO,EAAI/M,KAAK8sR,cAAc//Q,EACnD0wZ,EAAOz9Z,KAAKi+O,gBAAgBjxO,EAAIhN,KAAK8sR,cAAc9/Q,EACnD0wZ,EAAc19Z,KAAKi4Z,eAAe0F,gBAC/B39Z,KAAKi4Z,eAAe0F,eAAeC,UACtCC,EAAWH,EAAc19Z,KAAKi4Z,eAAe0F,eAAeG,WAAa,KAG7EtyX,GADAZ,EAASL,MACa5c,EAAMkf,YAAa,EAAG,GACpClf,EAAM9hB,QACN8hB,EAAM1hB,QADd,IAEI4gO,EAAIl/M,EAAM3X,MACV0qF,EAAI/yE,EAAM5X,OACF4X,EAAMgf,MAAM5/B,EACZ4gB,EAAMgf,MAAM3/B,EACxB,IAGIywE,EAHAsgV,EAAa,EACbC,EAAc,EACdhB,EAAgBh9Z,KAAKg9Z,cAEzB,OAAQx0X,GACJ,IAAK,aAEDg1X,GADA//U,EAAO9yC,GAAuBC,GAAW79B,EAAGywZ,EAAMxwZ,EAAGywZ,KACzC1wZ,EACZ0wZ,EAAOhgV,EAAKzwE,EACZgxZ,EAAc,EACdR,EAAOE,EAAc19Z,KAAKi4Z,eAAe0F,eAAeM,SAASZ,EAAgBE,EAAcM,EAAUL,EAAMC,EAAM9vY,EAAO6xB,IAAa6F,EAAYrlD,KAAKg9Z,eAAiBQ,EAC3KC,EAAO,EACPM,GAAcf,EAAchnZ,MAAQwnZ,GAAQ7vY,EAAM3X,MAClD,MACJ,IAAK,aAEDwnZ,GADA//U,EAAO9yC,GAAuBC,GAAW79B,EAAGywZ,EAAMxwZ,EAAGywZ,KACzC1wZ,EACZ0wZ,EAAOhgV,EAAKzwE,EACZwwZ,EAAOE,EAAc19Z,KAAKi4Z,eAAe0F,eAAeO,UAAUb,EAAgBE,EAAcM,EAAUL,EAAMC,EAAM9vY,EAAO6xB,IAAa6F,EAAYrlD,KAAKg9Z,eACvJQ,EACJC,EAAO,EACPM,GAAcf,EAAchnZ,MAAQwnZ,GAAQ7vY,EAAM3X,MAClDgoZ,EAAc,EACd,MACJ,IAAK,cACDD,EAAa,EAEbP,GADA//U,EAAO9yC,GAAuBC,GAAW79B,EAAGywZ,EAAMxwZ,EAAGywZ,KACzC1wZ,EACZ0wZ,EAAOhgV,EAAKzwE,EACZywZ,EAAOC,EAAc19Z,KAAKi4Z,eAAe0F,eAAeQ,QAAQd,EAAgBE,EAAcM,EAAUL,EAAMC,EAAM9vY,EAAO6xB,IAAa6F,EAAYrlD,KAAKg9Z,eACrJS,EACJO,GAAehB,EAAcjnZ,OAAS0nZ,GAAQ9vY,EAAM5X,OACpD,MACJ,IAAK,cACDgoZ,EAAa,EAEbP,GADA//U,EAAO9yC,GAAuBC,GAAW79B,EAAGywZ,EAAMxwZ,EAAGywZ,KACzC1wZ,EACZ0wZ,EAAOhgV,EAAKzwE,EACZywZ,EAAOC,EAAc19Z,KAAKi4Z,eAAe0F,eAAeS,WAAWf,EAAgBE,EAAcM,EAAUpgV,EAAK1wE,EAAG0wE,EAAKzwE,EAAG2gB,EAAO6xB,IAAa6F,EAAYrlD,KAAKg9Z,eAC5JS,EACJO,GAAehB,EAAcjnZ,OAAS0nZ,GAAQ9vY,EAAM5X,OACpD,MACJ,IAAK,kBAEDynZ,GADA//U,EAAO9yC,GAAuBC,GAAW79B,EAAGywZ,EAAMxwZ,EAAGywZ,KACzC1wZ,EACZ0wZ,EAAOhgV,EAAKzwE,EACZwwZ,EAAOE,EAAc19Z,KAAKi4Z,eAAe0F,eAAeO,UAAUb,EAAgBE,EAAcM,EAAUL,EAAMC,EAAM9vY,EAAO6xB,IAAa6F,EAAYrlD,KAAKg9Z,eACvJQ,EACJC,EAAOC,EAAc19Z,KAAKi4Z,eAAe0F,eAAeQ,QAAQd,EAAgBE,EAAcM,EAAUL,EAAMC,EAAM9vY,EAAO6xB,IAAa6F,EAAYrlD,KAAKg9Z,eACrJS,EACJM,GAAcf,EAAchnZ,MAAQwnZ,GAAQ7vY,EAAM3X,MAClDgoZ,GAAehB,EAAcjnZ,OAAS0nZ,GAAQ9vY,EAAM5X,OACpD,MACJ,IAAK,kBAEDynZ,GADA//U,EAAO9yC,GAAuBC,GAAW79B,EAAGywZ,EAAMxwZ,EAAGywZ,KACzC1wZ,EACZ0wZ,EAAOhgV,EAAKzwE,EACZywZ,EAAOC,EAAc19Z,KAAKi4Z,eAAe0F,eAAeQ,QAAQd,EAAgBE,EAAcM,EAAUL,EAAMC,EAAM9vY,EAAO6xB,IAAa6F,EAAYrlD,KAAKg9Z,eACrJS,EACJD,EAAOE,EAAc19Z,KAAKi4Z,eAAe0F,eAAeM,SAASZ,EAAgBE,EAAcM,EAAUL,EAAMC,EAAM9vY,EAAO6xB,IAAa6F,EAAYrlD,KAAKg9Z,eACtJQ,EACJO,GAAcf,EAAchnZ,MAAQwnZ,GAAQ7vY,EAAM3X,MAClDgoZ,GAAehB,EAAcjnZ,OAAS0nZ,GAAQ9vY,EAAM5X,OACpD,MACJ,IAAK,kBAEDynZ,GADA//U,EAAO9yC,GAAuBC,GAAW79B,EAAGywZ,EAAMxwZ,EAAGywZ,KACzC1wZ,EACZ0wZ,EAAOhgV,EAAKzwE,EACZywZ,EAAOC,EAAc19Z,KAAKi4Z,eAAe0F,eAAeS,WAAWf,EAAgBE,EAAcM,EAAUL,EAAMC,EAAM9vY,EAAO6xB,IAAa6F,EAAYrlD,KAAKg9Z,eACxJS,EACJD,EAAOE,EAAc19Z,KAAKi4Z,eAAe0F,eAAeO,UAAUb,EAAgBE,EAAcM,EAAUL,EAAMC,EAAM9vY,EAAO6xB,IAAa6F,EAAYrlD,KAAKg9Z,eACvJQ,EACJQ,GAAehB,EAAcjnZ,OAAS0nZ,GAAQ9vY,EAAM5X,OACpDgoZ,GAAcf,EAAchnZ,MAAQwnZ,GAAQ7vY,EAAM3X,MAClD,MACJ,IAAK,kBAEDwnZ,GADA//U,EAAO9yC,GAAuBC,GAAW79B,EAAGywZ,EAAMxwZ,EAAGywZ,KACzC1wZ,EACZ0wZ,EAAOhgV,EAAKzwE,EACZywZ,EAAOC,EAAc19Z,KAAKi4Z,eAAe0F,eAAeS,WAAWf,EAAgBE,EAAcM,EAAUL,EAAMC,EAAM9vY,EAAO6xB,IAAa6F,EAAY23W,GAAiBS,EACxKD,EAAOE,EAAc19Z,KAAKi4Z,eAAe0F,eAAeM,SAASZ,EAAgBE,EAAcM,EAAUL,EAAMC,EAAM9vY,EAAO6xB,IAAa6F,EAAY23W,GAAiBQ,EACtKO,GAAcf,EAAchnZ,MAAQwnZ,GAAQ7vY,EAAM3X,MAClDgoZ,GAAehB,EAAcjnZ,OAAS0nZ,GAAQ9vY,EAAM5X,OAG5D,OAAO/V,KAAKq+Z,aAAazzX,EAAQmzX,EAAYC,EAAax1X,EAAQ6c,EAAY7F,EAAU7xB,IAK5FovY,EAAW1ha,UAAUgja,aAAe,SAAUzzX,EAAQmzX,EAAYC,EAAax1X,EAAQ6c,EAAY7F,EAAUjjD,GAC7E,IAAxBA,EAAOu1D,MAAMr1D,QAAgBF,EAAOu1D,MAAM,GAAG/L,YAAcG,GAAgBo4W,cAC5D,eAAX91X,GAAsC,eAAXA,GAAsC,gBAAXA,GAAuC,gBAAXA,EAC5D,IAAhBw1X,GAAoC,IAAfD,IACvBC,EAAcD,EAAa1xZ,KAAKC,IAAoB,IAAhB0xZ,EAAoB,EAAIA,EAA4B,IAAfD,EAAmB,EAAIA,IAIpGC,EAAcD,EADT14W,IAAe7F,EACOnzC,KAAKC,IAAI0xZ,EAAaD,GAGtB,GAGnC,IAAI/0Z,GACA6C,QAAStP,EAAOsP,QAASI,QAAS1P,EAAO0P,QACzC+J,MAAOzZ,EAAOyZ,MAAOD,OAAQxZ,EAAOwZ,QAExC/V,KAAKo4Z,QAAUp4Z,KAAKi4Z,eAAesG,mBAAmBR,EAAYC,EAAah+Z,KAAKo9Z,YACpF,IAIIrrU,GAAQx1F,OAAQA,EAAQ+xC,MAAO,WAAYtlC,SAAUA,EAAU1B,UAH/DuE,QAAStP,EAAOsP,QAASI,QAAS1P,EAAO0P,QACzC+J,MAAOzZ,EAAOyZ,MAAOD,OAAQxZ,EAAOwZ,QAE+C8iB,QAAQ,GAK/F,OAJA74B,KAAKi4Z,eAAezuQ,aAAas3P,GAAamc,WAAYlrU,GACtDA,EAAIl5D,QACJ74B,KAAKi4Z,eAAesG,mBAAmB,EAAIR,EAAY,EAAIC,EAAah+Z,KAAKo9Z,YAE1Ep9Z,KAAKo4Z,SAET2E,GACThF,IAKEyG,GAAiC,SAAUrzU,GAE3C,SAASqzU,EAAgBvG,EAAgB/qX,GACrC,IAAIntC,EAAQorF,EAAO7pF,KAAKtB,KAAMi4Z,GAAgB,IAASj4Z,KAEvD,OADAD,EAAMmtC,aAAeA,EACdntC,EA4CX,OAhDAuqF,GAAUk0U,EAAiBrzU,GAM3BqzU,EAAgBnja,UAAUq9Z,UAAY,SAAUz4Z,GAC5CkrF,EAAO9vF,UAAUq9Z,UAAUp3Z,KAAKtB,KAAMC,GACtCD,KAAKk4Z,UAAW,GAEpBsG,EAAgBnja,UAAUwkV,UAAY,SAAU5/U,GAC5CkrF,EAAO9vF,UAAUwkV,UAAUv+U,KAAKtB,KAAMC,GACtC,IAAIw+Z,EACAl+Z,GACAsL,QAAS7L,KAAKi+O,gBAAgBlxO,EAAGiJ,MAAO,EAAGD,OAAQ,EACnD9J,QAASjM,KAAKi+O,gBAAgBjxO,GAKlC,GAHKhN,KAAKqsD,gBACNrsD,KAAKqsD,cAAgBrsD,KAAKi4Z,eAAeyG,WAAWn+Z,IAEpDP,KAAKk4Z,WAAsE,IAA1Dh+W,GAAMrB,OAAO74C,KAAKi+O,gBAAiBj+O,KAAK24Z,cAAyB,CAClF,IAAItlY,EAAO6C,GAAK0W,UAAU5sC,KAAK24Z,aAAc34Z,KAAKi+O,mBAClDwgL,EAA2Bz+Z,KAAKi4Z,eAAewG,8BAAyBtja,OAAWA,EAAWk4B,KAE1FrzB,KAAKi4Z,eAAe0G,oBAAoB3+Z,KAAKqsD,cAAeh5B,GAGpE,OAAOorY,GAEXD,EAAgBnja,UAAUw9Z,QAAU,SAAU54Z,GAC1C,IACIozB,EAAO6C,GAAK0W,UAAU5sC,KAAK24Z,aAAc34Z,KAAKi+O,kBACvBj+O,KAAKi4Z,eAAewG,8BAAyBtja,OAAWA,EAAWk4B,GAC1FrzB,KAAKqsD,eAAiBrsD,KAAKqsD,yBAAyBlF,KACpDnnD,KAAKi4Z,eAAe2G,mBAAmB5+Z,KAAKqsD,eAC5CrsD,KAAKqsD,cAAgB,MAEzB8+B,EAAO9vF,UAAUw9Z,QAAQv3Z,KAAKtB,KAAMC,GACpCD,KAAKk4Z,UAAW,GAEpBsG,EAAgBnja,UAAU09Z,UAAY,WAClC5tU,EAAO9vF,UAAU09Z,UAAUz3Z,KAAKtB,OAEpCw+Z,EAAgBnja,UAAU4kV,WAAa,SAAUhgV,GACzCD,KAAKk4Z,UACLl4Z,KAAK64Z,QAAQ54Z,IAGdu+Z,GACTzG,IAKE0B,GAAsC,SAAUtuU,GAEhD,SAASsuU,EAAqBxB,EAAgBz4W,EAAUtS,GACpD,IAAIntC,EAAQorF,EAAO7pF,KAAKtB,KAAMi4Z,EAAgBz4W,IAAax/C,KAE3D,OADAD,EAAMmtC,aAAeA,EACdntC,EA6CX,OAjDAuqF,GAAUmvU,EAAsBtuU,GAMhCsuU,EAAqBp+Z,UAAUq9Z,UAAY,SAAUz4Z,GACjDkrF,EAAO9vF,UAAUq9Z,UAAUp3Z,KAAKtB,KAAMC,GACtCD,KAAKk4Z,UAAW,GAEpBuB,EAAqBp+Z,UAAUwkV,UAAY,SAAU5/U,GACjD,GAAID,KAAKk4Z,SAAU,CACf,IAAIr4W,GACA9I,YAAa/2C,KAAKi+O,gBAAiBl/L,YAAa/+C,KAAKi+O,iBAEpDj+O,KAAKqsD,gBACNrsD,KAAKqsD,cAAgBrsD,KAAKi4Z,eAAeyG,WAAW7+W,IAExD5/C,EAAK1D,OAASyD,KAAKqsD,cACfpsD,EAAKkH,QACLnH,KAAKi4Z,eAAe+C,QAAQh7Z,KAAKw/C,SAAUv/C,GAE/CD,KAAKw/C,SAAW,qBASpB,OAPKx/C,KAAKk4Z,WACNl4Z,KAAKi4Z,eAAe4B,iBAChB55Z,EAAK1D,QAAU0D,EAAK+2C,eACpBh3C,KAAKi4Z,eAAejG,kBAAkB/xZ,GAAM,IAGpDkrF,EAAO9vF,UAAUwkV,UAAUv+U,KAAKtB,KAAMC,IAC9BD,KAAKo4Z,SAEjBqB,EAAqBp+Z,UAAUw9Z,QAAU,SAAU54Z,GAC3CD,KAAKqsD,eAAiBrsD,KAAKqsD,yBAAyBvG,KACpD9lD,KAAKi4Z,eAAe2G,mBAAmB5+Z,KAAKqsD,eAC5CrsD,KAAKqsD,cAAgB,MAEzBrsD,KAAKk4Z,UAAW,EAChB/sU,EAAO9vF,UAAUw9Z,QAAQv3Z,KAAKtB,KAAMC,IAExCw5Z,EAAqBp+Z,UAAU09Z,UAAY,WACvC5tU,EAAO9vF,UAAU09Z,UAAUz3Z,KAAKtB,OAEpCy5Z,EAAqBp+Z,UAAU4kV,WAAa,SAAUhgV,GAC9CD,KAAKk4Z,UACLl4Z,KAAK64Z,QAAQ54Z,IAGdw5Z,GACTD,IAEEqF,GAAiC,SAAU1zU,GAE3C,SAAS0zU,EAAgB5G,GACrB,OAAO9sU,EAAO7pF,KAAKtB,KAAMi4Z,GAAgB,IAASj4Z,KAmDtD,OArDAsqF,GAAUu0U,EAAiB1zU,GAI3B0zU,EAAgBxja,UAAUq9Z,UAAY,SAAUz4Z,GAC5CkrF,EAAO9vF,UAAUq9Z,UAAUp3Z,KAAKtB,KAAMC,GACtCD,KAAKi4Z,eAAesB,iBACpB,IAAIh5Z,GACAotB,OAASjnB,KAAM,QACfmF,QAAS7L,KAAKi+O,gBAAgBlxO,EAAGiJ,MAAO,GAAID,OAAQ,GACpD9J,QAASjM,KAAKi+O,gBAAgBjxO,GAE7B/M,EAAK1D,SACNyD,KAAK8+Z,YAAc9+Z,KAAKi4Z,eAAeyG,WAAWn+Z,KAG1Ds+Z,EAAgBxja,UAAUwkV,UAAY,SAAU5/U,GAE5C,GADAkrF,EAAO9vF,UAAUwkV,UAAUv+U,KAAKtB,KAAMC,GACjCD,KAAK8+Z,YAQN9+Z,KAAK8+Z,YAAYp6Z,MAAMktC,YAAc,QACrC5xC,KAAK8+Z,YAAYp6Z,MAAMqtC,gBAAkB,MACzC/xC,KAAK8+Z,YAAYp6Z,MAAMk5B,KAAO,kBAVX,CACnB,IAAIr9B,GACAotB,OAASjnB,KAAM,QAAUmF,QAAS7L,KAAKi+O,gBAAgBlxO,EAAGiJ,MAAO,GAAID,OAAQ,GAC7ErR,OAASqtC,gBAAiB,MAAOnU,KAAM,eAAiB3xB,QAASjM,KAAKi+O,gBAAgBjxO,GAE1FhN,KAAK8+Z,YAAc9+Z,KAAKi4Z,eAAeyG,WAAWn+Z,GAOtD,GAAIP,KAAKk4Z,WAAsE,IAA1Dh+W,GAAMrB,OAAO74C,KAAKi+O,gBAAiBj+O,KAAK24Z,cAAyB,CAClF,IAAItlY,EAAO6C,GAAK0W,UAAU5sC,KAAK24Z,aAAc34Z,KAAKi+O,kBAClDj+O,KAAKi4Z,eAAe0G,oBAAoB3+Z,KAAK8+Z,YAAazrY,GAE9D,OAAQrzB,KAAKo4Z,SAEjByG,EAAgBxja,UAAUw9Z,QAAU,SAAU54Z,GACtCD,KAAK8+Z,aACL9+Z,KAAK8+Z,YAAYp6Z,MAAMktC,YAAc,OACrC5xC,KAAK8+Z,YAAYp6Z,MAAMk5B,KAAO,QAG9B59B,KAAK8+Z,YAAc7+Z,EAAK1D,OAExByD,KAAK8+Z,cAAgB9+Z,KAAK8+Z,uBAAuB33W,IAAQnnD,KAAK8+Z,uBAAuBh5W,KACrF9lD,KAAKi4Z,eAAe8G,QAAQ/+Z,KAAK8+Z,YAAa9+Z,KAAKi+O,iBAEvD9yJ,EAAO9vF,UAAUw9Z,QAAQv3Z,KAAKtB,KAAMC,GACpCD,KAAKk4Z,UAAW,GAEpB2G,EAAgBxja,UAAU09Z,UAAY,WAClC5tU,EAAO9vF,UAAU09Z,UAAUz3Z,KAAKtB,OAE7B6+Z,GACT9G,IAKEiH,GAA6B,SAAU7zU,GAEvC,SAAS6zU,EAAY/G,EAAgBlyD,GACjC,IAAIhmW,EAAQorF,EAAO7pF,KAAKtB,KAAMi4Z,IAAmBj4Z,KAEjD,OADAD,EAAMugV,QAAUylB,EACThmW,EA4CX,OAhDAuqF,GAAU00U,EAAa7zU,GAMvB6zU,EAAY3ja,UAAUq9Z,UAAY,SAAUz4Z,GACxCkrF,EAAO9vF,UAAUq9Z,UAAUp3Z,KAAKtB,KAAMC,GACtCD,KAAKk4Z,UAAW,GAEpB8G,EAAY3ja,UAAUwkV,UAAY,SAAU5/U,GAExC,GADAkrF,EAAO9vF,UAAUwkV,UAAUv+U,KAAKtB,KAAMC,GAClCD,KAAKk4Z,SACL,GAAKl4Z,KAAKsgV,UAAqE,IAA1DpmS,GAAMrB,OAAO74C,KAAKi+O,gBAAiBj+O,KAAK24Z,eAKxD,GAAI14Z,EAAKg/Z,YAAYxia,QAAU,EAAG,CACnC,IAAIyia,EAAcj/Z,EAAKkxE,aAAa,GAChCguV,EAAcl/Z,EAAKkxE,aAAa,GAChCiuV,EAAan/Z,EAAKg/Z,YAAY,GAC9BI,EAAap/Z,EAAKg/Z,YAAY,GAC9BxzW,EAAQzrD,KAAKsxE,YAAY8tV,EAAYC,GAAcr/Z,KAAKsxE,YAAY4tV,EAAaC,GACjFG,EAAar/Z,EAAKiU,SACtBlU,KAAKi4Z,eAAelyD,KAAKt6S,EAAO,EAAG,EAAG6zW,GACtCt/Z,KAAKu/Z,YAAYL,EAAaE,GAC9Bp/Z,KAAKu/Z,YAAYJ,EAAaE,QAdoD,CAClF,IAAI9iX,EAAOv8C,KAAKi+O,gBAAgBlxO,EAAI/M,KAAK24Z,aAAa5rZ,EAClDyyZ,EAAOx/Z,KAAKi+O,gBAAgBjxO,EAAIhN,KAAK24Z,aAAa3rZ,EACtDhN,KAAKi4Z,eAAe3xN,OAAO/pJ,EAAMijX,EAAMx/Z,KAAKi+O,iBAcpD,OAAQj+O,KAAKo4Z,SAEjB4G,EAAY3ja,UAAUw9Z,QAAU,SAAU54Z,GACtCkrF,EAAO9vF,UAAUw9Z,QAAQv3Z,KAAKtB,KAAMC,GACpCD,KAAKk4Z,UAAW,GAEpB8G,EAAY3ja,UAAU09Z,UAAY,WAC9B5tU,EAAO9vF,UAAU09Z,UAAUz3Z,KAAKtB,OAEpCg/Z,EAAY3ja,UAAUi2E,YAAc,SAAUmuV,EAAQC,GAClD,IAAI3yZ,EAAI2yZ,EAAO5zZ,MAAQ2zZ,EAAO3zZ,MAC1BkB,EAAI0yZ,EAAOxzZ,MAAQuzZ,EAAOvzZ,MAC9B,OAAOG,KAAKQ,KAAME,EAAIA,EAAMC,EAAIA,IAEpCgyZ,EAAY3ja,UAAUkka,YAAc,SAAUI,EAAYC,GACtDD,EAAW7zZ,MAAQ8zZ,EAAU9zZ,MAC7B6zZ,EAAWzzZ,MAAQ0zZ,EAAU1zZ,OAE1B8yZ,GACTjH,IAKE8H,GAA4B,SAAU10U,GAEtC,SAAS00U,EAAW5H,GAChB,OAAO9sU,EAAO7pF,KAAKtB,KAAMi4Z,GAAgB,IAASj4Z,KAMtD,OARAsqF,GAAUu1U,EAAY10U,GAItB00U,EAAWxka,UAAUw9Z,QAAU,SAAU54Z,GACrCD,KAAKi4Z,eAAezhH,WAAWv2S,GAC/BkrF,EAAO9vF,UAAUw9Z,QAAQv3Z,KAAKtB,KAAMC,IAEjC4/Z,GACT9H,IAKE+H,GAA2B,SAAU30U,GAErC,SAAS20U,EAAU7H,GACf,OAAO9sU,EAAO7pF,KAAKtB,KAAMi4Z,GAAgB,IAASj4Z,KAOtD,OATAsqF,GAAUw1U,EAAW30U,GAIrB20U,EAAUzka,UAAUw9Z,QAAU,SAAU54Z,GAC1BpE,OAAO6F,KAAKzB,EAAK+2C,cAAckc,UAAUC,KAAM,UACrDjxD,QACJipF,EAAO9vF,UAAUw9Z,QAAQv3Z,KAAKtB,KAAMC,IAEjC6/Z,GACT/H,IAKEgI,GAAoC,SAAU50U,GAE9C,SAAS40U,EAAmB9H,GACxB,OAAO9sU,EAAO7pF,KAAKtB,KAAMi4Z,GAAgB,IAASj4Z,KA8DtD,OAhEAsqF,GAAUy1U,EAAoB50U,GAI9B40U,EAAmB1ka,UAAUq9Z,UAAY,SAAUz4Z,GAG/C,GAFAkrF,EAAO9vF,UAAUq9Z,UAAUp3Z,KAAKtB,KAAMC,GACtCD,KAAKk4Z,UAAW,EACXl4Z,KAAKqsD,cAeL,CACD,IAAIxhB,OAAK,EACL9tC,EAAMiD,KAAKqsD,cAAc1+B,MAE7Bkd,GAAO99B,GADP89B,EAAK9tC,EAAI46B,OAAO56B,EAAI46B,OAAOl7B,OAAS,IACvBsQ,EAAGC,EAAG69B,EAAG79B,GACtBhN,KAAKqsD,cAAc1+B,MAAMgK,OAAOnzB,KAAKqmC,OApBhB,CACrB7qC,KAAKqlD,YAAet4C,EAAG/M,KAAK8sR,cAAc//Q,EAAGC,EAAGhN,KAAK8sR,cAAc9/Q,GACnE,IAAIzM,GACAsL,QAAS7L,KAAKi+O,gBAAgBlxO,EAC9Bd,QAASjM,KAAKi+O,gBAAgBjxO,EAC9BgJ,MAAO,EAAGD,OAAQ,EAClBrR,OAASktC,YAAa,QAASC,YAAa,GAC5ClkB,OACIjnB,KAAM,QACNinB,MAAO,UACPgK,SAAW5qB,EAAG/M,KAAKqlD,WAAWt4C,EAAGC,EAAGhN,KAAKqlD,WAAWr4C,IAAOD,EAAG/M,KAAKi+O,gBAAgBlxO,EAAGC,EAAGhN,KAAKi+O,gBAAgBjxO,MAGtHhN,KAAKqsD,cAAgBrsD,KAAKi4Z,eAAeyG,WAAWn+Z,KAU5Dw/Z,EAAmB1ka,UAAUwkV,UAAY,SAAU5/U,GAE/C,GADAkrF,EAAO9vF,UAAUwkV,UAAUv+U,KAAKtB,KAAMC,GAClCD,KAAKk4Z,SAAU,CACf,IAAIn7Z,EAAMiD,KAAKqsD,cAAc1+B,MAC7B,GAAI3tB,KAAKqsD,eAAiBrsD,KAAKi+O,kBAC3BlhP,EAAI46B,OAAO56B,EAAI46B,OAAOl7B,OAAS,GAAGsQ,EAAI/M,KAAKi+O,gBAAgBlxO,EAC3DhQ,EAAI46B,OAAO56B,EAAI46B,OAAOl7B,OAAS,GAAGuQ,EAAIhN,KAAKi+O,gBAAgBjxO,EAC3DhN,KAAKqsD,cAAct6C,QAAQqI,SAAS,GAAG5d,KAAOisC,GAAezoC,KAAKqsD,cAAc1+B,MAAMgK,QAClF33B,KAAKk4Z,WAAsE,IAA1Dh+W,GAAMrB,OAAO74C,KAAKi+O,gBAAiBj+O,KAAK24Z,eAAyB,CAClF,IAAIzsW,EAASh2B,GAAK0W,SAAS5sC,KAAKqsD,cAAc1+B,MAAMgK,QACpD33B,KAAKi4Z,eAAe0G,oBAAoB3+Z,KAAKqsD,cAAeH,IAIxE,OAAO,GAEX6zW,EAAmB1ka,UAAUw9Z,QAAU,SAAU54Z,EAAM+/Z,GACnD70U,EAAO9vF,UAAUwkV,UAAUv+U,KAAKtB,KAAMC,GAClCD,KAAKk4Z,WACLl4Z,KAAKk4Z,UAAW,EACZl4Z,KAAKqsD,eACLrsD,KAAKi4Z,eAAe2G,mBAAmB5+Z,KAAKqsD,gBAGpDrsD,KAAK+4Z,aAETgH,EAAmB1ka,UAAUkiI,WAAa,SAAUt9H,GAChDkrF,EAAO9vF,UAAUkiI,WAAWj8H,KAAKtB,KAAMC,GACvCD,KAAK6/U,UAAU5/U,IAEnB8/Z,EAAmB1ka,UAAU09Z,UAAY,WACrC/4Z,KAAKk4Z,UAAW,EAChBl4Z,KAAKqsD,cAAgB,MAElB0zW,GACThI,ICptCEztU,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAqBxCs1U,GAAkC,SAAU90U,GAE5C,SAAS80U,EAAiBhI,EAAgBz4W,GACtC,IAAIz/C,EAAQorF,EAAO7pF,KAAKtB,KAAMi4Z,GAAgB,IAASj4Z,KAEvD,OADAD,EAAMy/C,SAAWA,EACVz/C,EA2nBX,OA/nBAuqF,GAAU21U,EAAkB90U,GAM5B80U,EAAiB5ka,UAAUq9Z,UAAY,SAAUz4Z,GAC7CD,KAAKk4Z,UAAW,EAChBl4Z,KAAKu4Z,YAAcxrX,GAAY9sC,EAAK1D,QACpC4uF,EAAO9vF,UAAUq9Z,UAAUp3Z,KAAKtB,KAAMC,GACtC,IAAI4xD,EACA5xD,EAAK1D,QAAU0D,EAAK1D,OAAOs1D,aAC3BA,EAAa5xD,EAAK1D,OAAOs1D,WAAW,IAGxC,IAAK,IAAI11D,EAAI,EAAGA,EAAI01D,EAAW/oB,SAASrsC,OAAQN,IAAK,CACjD,IAAIytC,EAAUioB,EAAW/oB,SAAS3sC,GAClC,GAAsB,eAAlB6D,KAAKw/C,SACL,IAAK,IAAIj8B,EAAI,EAAGA,EAAIqmB,EAAQjS,OAAOl7B,OAAS,EAAG8mB,IAAK,CAChD,IAAI07B,GAAalyC,EAAG,EAAGC,EAAG,GAC1BiyC,EAASlyC,GAAM68B,EAAQjS,OAAOpU,GAAGxW,EAAI68B,EAAQjS,OAAOpU,EAAI,GAAGxW,GAAK,EAChEkyC,EAASjyC,GAAM48B,EAAQjS,OAAOpU,GAAGvW,EAAI48B,EAAQjS,OAAOpU,EAAI,GAAGvW,GAAK,EAC5D7I,GAASnE,KAAKi+O,gBAAiBh/L,EAAU,MACzCj/C,KAAK45Z,gBAAkBhwX,EACvB5pC,KAAKkga,aAAe38Y,QAKxBpf,GAASnE,KAAKi+O,gBAAiBr0M,EAAQ9V,MAAO,MAC9C9zB,KAAK45Z,gBAAkBhwX,KAKvCq2X,EAAiB5ka,UAAUwkV,UAAY,SAAU5/U,GAG7C,GAFAkrF,EAAO9vF,UAAUwkV,UAAUv+U,KAAKtB,KAAMC,GACtCD,KAAKi+O,gBAAkBh+O,EAAKiU,SACxBlU,KAAKi+O,iBAAmBj+O,KAAK24Z,aAAc,CAC3C,IAAIn9W,EAAQx7C,KAAKi+O,gBAAgBjxO,EAAIhN,KAAK24Z,aAAa3rZ,EACnDgvC,EAAQh8C,KAAKi+O,gBAAgBlxO,EAAI/M,KAAK24Z,aAAa5rZ,EACvD/M,KAAKi+O,gBAAkBj+O,KAAKi4Z,eAAeyC,iBAAiB16Z,KAAKi+O,iBACjE,IAAIp+L,OAAY,EAIhB,GAHI5/C,EAAK1D,QAAU0D,EAAK1D,OAAOs1D,aAC3BhS,EAAY5/C,EAAK1D,OAAOs1D,WAAW,IAEnC7xD,KAAKk4Z,eAA8B/8Z,IAAlB6E,KAAKw/C,UAAoC,IAAVxD,GAAyB,IAAVR,EAAa,CAC5E,GAAsB,eAAlBx7C,KAAKw/C,SACLx/C,KAAKo4Z,SAAWp4Z,KAAKmga,sBAAsBtgX,EAAW7/C,KAAK45Z,gBAAiB55Z,KAAKi+O,gBAAiBj+O,KAAKkga,kBAEtG,CACD,IAAIt4E,EAAK5nV,KAAKi+O,gBAAgBlxO,EAAI/M,KAAK45Z,gBAAgB9lY,MAAM/mB,EACzD46U,EAAK3nV,KAAKi+O,gBAAgBjxO,EAAIhN,KAAK45Z,gBAAgB9lY,MAAM9mB,EACzDiF,EAAQ4tC,EAAU/W,SAASvqC,QAAQyB,KAAK45Z,iBAC5C55Z,KAAKo4Z,SAAWp4Z,KAAKi4Z,eAAemI,iBAAiBvgX,EAAW+nS,EAAID,GAAI,EAAO11U,GAEnFjS,KAAKi4Z,eAAe4B,kBAI5B,OADA75Z,KAAK24Z,aAAe34Z,KAAKi+O,iBACjBj+O,KAAKo4Z,SAEjB6H,EAAiB5ka,UAAUw9Z,QAAU,SAAU54Z,GAC3C,IAAI4/C,EAIJ,GAHI5/C,EAAK1D,QAAU0D,EAAK1D,OAAOs1D,aAC3BhS,EAAY5/C,EAAK1D,OAAOs1D,WAAW,IAEnC5xD,GAAQA,EAAK1D,QAAU0D,EAAK0mB,MAAQ1mB,EAAK0mB,KAAKkB,SAAW5nB,EAAK0mB,KAAK8vF,UAA+B,aAAnB52D,EAAUn5C,KACzF1G,KAAKqga,mBAAmBxgX,EAAW7/C,KAAKi+O,sBAGxC,GAAsB,eAAlBj+O,KAAKw/C,UAA6Bx/C,KAAK45Z,gBAAiB,CACxD,IAAI3nZ,EAAQ4tC,EAAU/W,SAASvqC,QAAQyB,KAAK45Z,iBACxC/3X,EAAOge,EAAU/W,SAAS72B,EAAQ,GAClCq2B,EAAOuX,EAAU/W,SAAS72B,EAAQ,GACtC,GAAIA,IAAU4tC,EAAU/W,SAASrsC,OAAS,GACnCuD,KAAKsga,kBAAkBzgX,EAAW7/C,KAAK45Z,iBAC1C/5W,EAAU/W,SAASzgB,OAAOw3B,EAAU/W,SAASrsC,OAAS,EAAG,QAGzD,GAAIolC,GAAQx1B,KAAKE,IAAIs1B,EAAKplC,QAAU,EAClB,IAAVwV,GACAjS,KAAKuga,kBAAkB1gX,EAAW5tC,QAGrC,GAAIq2B,EAAM,CACX,IAAIzmC,EAAMq4C,GAAM8F,eAAe1X,EAAK3Q,OAAO,GAAI2Q,EAAK3Q,OAAO,IACvD8C,EAAa6N,EAAK7rC,QAA0B,IAAhB6rC,EAAK7rC,OAAgB6rC,EAAK7rC,OAASoF,EAC9DwK,KAAKE,IAAIkuB,IAAa,GACvBz6B,KAAKwga,kBAAkB3gX,EAAW5tC,GAI9CjS,KAAKi4Z,eAAewI,eAAe5gX,GAG3C,GAAI7/C,KAAKu4Z,YAAa,CAClB,IAEIwB,GACArzZ,KAAM,iBAAkBszZ,WAFtBjtX,GAAY9sC,EAAK1D,QAEsB09Z,WAAYj6Z,KAAKu4Z,YAAan+N,SAAU,YAErFp6L,KAAKi4Z,eAAeiC,gBAAgBH,GAExC5uU,EAAO9vF,UAAUw9Z,QAAQv3Z,KAAKtB,KAAMC,IAExCgga,EAAiB5ka,UAAUkla,kBAAoB,SAAU1gX,EAAW5tC,GAChE,IAAIrT,EAAQihD,EAAU/W,SAAS72B,EAAQ,GACnCq2B,EAAOuX,EAAU/W,SAAS72B,EAAQ,GAEtC,MADcq2B,EAAK7rC,QAA0B,IAAhB6rC,EAAK7rC,OAAgB6rC,EAAK7rC,OAASy9C,GAAM8F,eAAe1X,EAAK3Q,OAAO,GAAI2Q,EAAK3Q,OAAO,MACjG,GAAI,CAChB,IAAIzE,EAAO2sB,EAAU/W,SAAS72B,EAAQ,GACtC4tC,EAAU/W,SAASzgB,OAAOpW,EAAQ,EAAG,GACrC,IAAI23B,EAAU5pC,KAAK45Z,gBACO,SAAtBhwX,EAAQpU,WAA8C,UAAtBoU,EAAQpU,WACxC52B,EAAM+4B,OAAO/4B,EAAM+4B,OAAOl7B,OAAS,GAAGsQ,EAAImmB,EAAKyE,OAAO,GAAG5qB,EACzDmmB,EAAKyE,OAAO,GAAG3qB,EAAIpO,EAAM+4B,OAAO/4B,EAAM+4B,OAAOl7B,OAAS,GAAGuQ,IAGzDpO,EAAM+4B,OAAO/4B,EAAM+4B,OAAOl7B,OAAS,GAAGuQ,EAAIkmB,EAAKyE,OAAO,GAAG3qB,EACzDkmB,EAAKyE,OAAO,GAAG5qB,EAAInO,EAAM+4B,OAAO/4B,EAAM+4B,OAAOl7B,OAAS,GAAGsQ,IAEzD68B,EAAQntC,QAA6B,IAAnBmtC,EAAQntC,SAC1BuD,KAAKu/C,qBAAqB3gD,GAE9BoB,KAAKu/C,qBAAqBrsB,KAGlC+sY,EAAiB5ka,UAAUkkD,qBAAuB,SAAU3V,GACpDA,EAAQpU,YAAcoU,EAAQntC,QAA6B,IAAnBmtC,EAAQntC,UAChDmtC,EAAQntC,OAASy9C,GAAM8F,eAAepW,EAAQjS,OAAO,GAAIiS,EAAQjS,OAAOiS,EAAQjS,OAAOl7B,OAAS,IAChGmtC,EAAQpU,UAAY0kB,GAAM1kB,UAAUoU,EAAQjS,OAAO,GAAIiS,EAAQjS,OAAOiS,EAAQjS,OAAOl7B,OAAS,MAGtGwja,EAAiB5ka,UAAUmla,kBAAoB,SAAU3gX,EAAW5tC,GAChE,IAAI23B,EAAU5pC,KAAK45Z,gBACfh7Z,EAAQihD,EAAU/W,SAAS72B,EAAQ,GACnCihB,EAAO2sB,EAAU/W,SAAS72B,EAAQ,GAClCq2B,EAAOuX,EAAU/W,SAAS72B,EAAQ,GAuBtC,GAtBIq2B,EAAK7rC,QAA0B,IAAhB6rC,EAAK7rC,QACpBojD,EAAU/W,SAASzgB,OAAOpW,EAAO,GACP,QAAtB23B,EAAQpU,WAA6C,WAAtBoU,EAAQpU,WACvCtC,EAAKyE,OAAO,GAAG3qB,EAAI48B,EAAQjS,OAAO,GAAG3qB,EACrCpO,EAAM+4B,OAAO/4B,EAAM+4B,OAAOl7B,OAAS,GAAGsQ,EAAImmB,EAAKyE,OAAO,GAAG5qB,IAGzDmmB,EAAKyE,OAAO,GAAG5qB,EAAI68B,EAAQjS,OAAO,GAAG5qB,EACrCnO,EAAM+4B,OAAO/4B,EAAM+4B,OAAOl7B,OAAS,GAAGuQ,EAAIkmB,EAAKyE,OAAO,GAAG3qB,KAI7D6yC,EAAU/W,SAASzgB,OAAOpW,EAAQ,EAAG,GACX,QAAtB23B,EAAQpU,WAA6C,WAAtBoU,EAAQpU,UACvC52B,EAAM+4B,OAAO/4B,EAAM+4B,OAAOl7B,OAAS,GAAGsQ,EAAIu7B,EAAK3Q,OAAO2Q,EAAK3Q,OAAOl7B,OAAS,GAAGsQ,EAG9EnO,EAAM+4B,OAAO/4B,EAAM+4B,OAAOl7B,OAAS,GAAGuQ,EAAIs7B,EAAK3Q,OAAO2Q,EAAK3Q,OAAOl7B,OAAS,GAAGuQ,EAElFhN,KAAKu/C,qBAAqB3gD,GAC1BgrC,EAAQntC,OAASmtC,EAAQpU,UAAY,MAErC52B,GAASs0B,IACTt0B,EAAMnC,OAASy9C,GAAM8F,eAAephD,EAAM+4B,OAAO,GAAIzE,EAAKyE,OAAO,IACjE/4B,EAAM42B,UAAY0kB,GAAM1kB,UAAU52B,EAAM+4B,OAAO,GAAIzE,EAAKyE,OAAO,IAC3DzE,EAAKz2B,QAA0B,IAAhBy2B,EAAKz2B,QAAc,CAClCy2B,EAAKz2B,OAASy9C,GAAM8F,eAAephD,EAAM+4B,OAAO/4B,EAAM+4B,OAAOl7B,OAAS,GAAIy2B,EAAKyE,OAAOzE,EAAKyE,OAAOl7B,OAAS,IAC3G,IAAI2mD,EAASxkD,EAAM+4B,OACf0Q,EAASnV,EAAKyE,OAClBzE,EAAKsC,UAAY0kB,GAAM1kB,UAAU4tB,EAAOA,EAAO3mD,OAAS,GAAI4rC,EAAOA,EAAO5rC,OAAS,MAI/Fwja,EAAiB5ka,UAAUgla,mBAAqB,SAAUxgX,EAAW/rB,GAGjE,IAAK,IAFD4sY,EACAR,EACK/ja,EAAI,EAAGA,EAAI0jD,EAAU/W,SAASrsC,OAAQN,IAAK,CAE5CgI,GAAS2vB,GADT8V,EAAWiW,EAAkB,SAAE1jD,IACP23B,MAAO+rB,EAAUoN,cACzCizW,EAAe/ja,EACfuka,GAAY,GAGpB,GAAIA,QAA8Bvla,IAAjB+ka,GACb,GAAIrgX,EAAU/W,UAAY+W,EAAU/W,SAASo3X,IAA2D,aAA1CrgX,EAAU/W,SAASo3X,GAAcx5Z,KAAqB,CAChH,IAAIkjC,EAAUiW,EAAU/W,SAASo3X,GAC7B31R,EAAW1qF,EAAU/W,SAASo3X,EAAe,GAC7C31R,IACA1qF,EAAU/W,SAASzgB,OAAO63Y,EAAc,GACxC31R,EAAS5yG,OAAO,GAAKiS,EAAQjS,OAAO,SAI3C,CACD,IAAI1lB,EAAQjS,KAAK2ga,UAAU9gX,EAAW/rB,GACtC,GAAI+rB,EAAU/W,UAAY+W,EAAU/W,SAAS72B,IAA6C,aAAnC4tC,EAAU/W,SAAS72B,GAAOvL,KAAqB,CAC9FkjC,EAAUiW,EAAU/W,SAAS72B,GAAjC,IACI2uZ,EAAS,IAAIngX,GAAgBZ,EAAW,YAAcn5C,KAAM,WAAYotB,MAAOA,IAAS,GAC5F8sY,EAAOjpY,OAAO,GAAKiS,EAAQjS,OAAO,GAClCipY,EAAOjpY,OAAO,GAAK7D,EACnB8V,EAAQjS,OAAO,GAAK7D,EACpB+rB,EAAU/W,SAASzgB,OAAOpW,EAAO,EAAG2uZ,GACpCF,GAAY,GAGhBA,GACA1ga,KAAKi4Z,eAAewI,eAAe5gX,IAG3CogX,EAAiB5ka,UAAUsla,UAAY,SAAU9gX,EAAW/rB,GAExD,IAAK,IADD+sY,KACK1ka,EAAI,EAAGA,EAAI0jD,EAAU/W,SAASrsC,OAAQN,IAAK,CAChD,IAAIytC,EAAUiW,EAAU/W,SAAS3sC,GAC7Bk3B,EAAO6C,GAAK0W,UAAUhD,EAAQjS,OAAO,GAAIiS,EAAQjS,OAAO,KAC5DtE,EAAK25B,QAAQnN,EAAUoN,YACnB55B,EAAKylB,cAAchlB,IACnB+sY,EAAiBr8Z,KAAKolC,GAG9B,GAAgC,IAA5Bi3X,EAAiBpka,OACjB,OAAOojD,EAAU/W,SAASvqC,QAAQsia,EAAiB,IAS9C,IANDpL,OAAQ,EACR11Y,OAAM,EACN9N,OAAQ,EACRy2B,OAAM,EACNqkH,OAAI,EACJrsD,OAAI,EACR,IAASvkG,EAAI,EAAGA,EAAI0ka,EAAiBpka,OAAQN,IACzCusC,EAAMm4X,EAAiB1ka,GACvB4wJ,GAAKj5H,EAAM9mB,EAAI07B,EAAI/Q,OAAO,GAAG3qB,IAAM07B,EAAI/Q,OAAO,GAAG3qB,EAAI8mB,EAAM9mB,GAC3D0zF,GAAK5sE,EAAM/mB,EAAI27B,EAAI/Q,OAAO,GAAG5qB,IAAM27B,EAAI/Q,OAAO,GAAG5qB,EAAI+mB,EAAM/mB,GAC3D0oZ,EAAQppZ,KAAKE,IAAIwgJ,EAAIrsD,GACX,IAANvkG,IACA4jB,EAAM01Y,EACNxjZ,EAAQ,GAERwjZ,EAAQ11Y,IACRA,EAAM01Y,EACNxjZ,EAAQ9V,GAGhB,OAAO0jD,EAAU/W,SAASvqC,QAAQsia,EAAiB5uZ,KAG3DguZ,EAAiB5ka,UAAU8ka,sBAAwB,SAAUpja,EAAK6sC,EAAS9V,EAAOosY,GAC9E,IAAI3hX,GAAiBxxC,EAAG,EAAGC,EAAG,GAC9BuxC,EAAaxxC,GAAM68B,EAAQjS,OAAOuoY,GAAcnzZ,EAAI68B,EAAQjS,OAAOuoY,EAAe,GAAGnzZ,GAAK,EAC1FwxC,EAAavxC,GAAM48B,EAAQjS,OAAOuoY,GAAclzZ,EAAI48B,EAAQjS,OAAOuoY,EAAe,GAAGlzZ,GAAK,EAC1F,IAAI26U,EAAK7zT,EAAM9mB,EAAIuxC,EAAavxC,EAC5B46U,EAAK9zT,EAAM/mB,EAAIwxC,EAAaxxC,EAC5BkF,EAAQlV,EAAI+rC,SAASvqC,QAAQqrC,GAC7ByV,GAAS,EACMzV,EAAQjS,OAAO,GAAG3qB,EAAEgS,QAAQ,GAAO4qB,EAAQjS,OAAO,GAAG3qB,EAAEgS,QAAQ,GAuBlF,OApBe,IAAX/M,IACc,IAAVA,GAAuC,IAAxBlV,EAAI+rC,SAASrsC,QAA0C,IAA1BmtC,EAAQjS,OAAOl7B,QAC3DwV,EAAQjS,KAAK8ga,YAAY/ja,EAAK6sC,EAASg+S,EAAID,EAAI11U,GAC/CotC,GAAS,GAEJptC,IAAUlV,EAAI+rC,SAASrsC,OAAS,GAA4B,OAAtBmtC,EAAQpU,WAAyC,OAAnBoU,EAAQntC,OAIlE,IAAVwV,IACLA,EAAQjS,KAAK+ga,mBAAmBhka,EAAK6sC,EAASg+S,EAAID,EAAI11U,GACtDotC,GAAS,IALTptC,EAAQjS,KAAKgha,mBAAmBjka,EAAK6sC,EAASg+S,EAAID,EAAIu4E,GACtD7gX,GAAS,GAMTA,IACAr/C,KAAK45Z,gBAAkBhwX,EAAU7sC,EAAI+rC,SAAS72B,GAC9CjS,KAAKkga,aAAe,GAExBlga,KAAKiha,uBAAuBlka,EAAKkV,EAAO21U,EAAID,GAC5C3nV,KAAKi4Z,eAAewI,eAAe1ja,KAEhC,GAEXkja,EAAiB5ka,UAAUyla,YAAc,SAAU/ja,EAAK6sC,EAASg+S,EAAID,EAAIptR,GACrE,IACI/kC,EAEA3zB,EADAinC,KAEArsC,EAASy9C,GAAM8F,eAAepW,EAAQjS,OAAO,GAAIiS,EAAQjS,OAAO,IAChEupY,EAAmBhnX,GAAM1kB,UAAUoU,EAAQjS,OAAO,GAAIiS,EAAQjS,OAAO,IAQzE,OAPAmR,EAAStkC,KAAK,IAAI22C,GAAkBp+C,EAAK,YAAc2J,KAAM,aAAc8uB,UAAW0rY,EAAkBzka,OAAQA,EAAS,IAAK,IAC9H+4B,EAAaoU,EAAQjS,OAAO,GAAG3qB,IAAM48B,EAAQjS,OAAO,GAAG3qB,EAAO26U,EAAK,EAAK,SAAW,MAAWC,EAAK,EAAK,QAAU,OAClH/lV,EAAO+nC,EAAQjS,OAAO,GAAG5qB,IAAM68B,EAAQjS,OAAO,GAAG5qB,EAAK46U,EAAKC,EAC3D9+S,EAAStkC,KAAK,IAAI22C,GAAkBp+C,EAAK,YAAc2J,KAAM,aAAc8uB,UAAWA,EAAW/4B,OAAQoF,IAAO,IAChHinC,EAAStkC,KAAK,IAAI22C,GAAkBp+C,EAAK,YAAc2J,KAAM,aAAc8uB,UAAW0rY,EAAkBzka,OAAQA,EAAS,IAAK,IAC9HM,EAAI+rC,SAAWA,EAASvuB,OAAOxd,EAAI+rC,UAC3ByxB,EAAO,GAGnB0lW,EAAiB5ka,UAAU0la,mBAAqB,SAAUhka,EAAK6sC,EAASg+S,EAAID,EAAIptR,GAC5E,IAAI/kC,EACA/4B,EAEA0ka,EACAlvZ,EACAmvZ,EAHAt4X,KAIJ,GAAI/rC,EAAIm8D,cAAgBtvB,EAAQntC,QAAUM,EAAI+rC,SAAS,GAAGnR,OAAOl7B,OAAS,EAAG,CACzEM,EAAI+rC,SAASzgB,OAAO,EAAG,GAEvB,IAAK,IADDwZ,OAAO,EACF1lC,EAAI,EAAGA,EAAIytC,EAAQjS,OAAOl7B,OAAS,EAAGN,IAAK,CAChD,IAAI0F,EAAMq4C,GAAM8F,eAAepW,EAAQjS,OAAOx7B,GAAIytC,EAAQjS,OAAOx7B,EAAI,IACjEokD,EAAMrG,GAAM1kB,UAAUoU,EAAQjS,OAAOx7B,GAAIytC,EAAQjS,OAAOx7B,EAAI,IAEvC,KADzBila,EAAY,IAAIjmX,GAAkBp+C,EAAK,YAAc2J,KAAM,aAAc8uB,UAAW+qB,EAAK9jD,OAAQoF,IAAO,IAC1FpF,UACNolC,GAA4B,QAAnBA,EAAKrM,WAA0C,WAAnBqM,EAAKrM,UAI1C4rY,EAAU5rY,UAAYmyT,EAAK,EAAI,SAAW,MAH1Cy5E,EAAU5rY,UAAYoyT,EAAK,EAAI,QAAU,QAMjD/lT,EAAOu/X,EACPt4X,EAAStkC,KAAK48Z,GAElBrka,EAAI+rC,SAAWA,EAASvuB,OAAOxd,EAAI+rC,UACnC72B,EAAQ,MAEP,CACDkvZ,GAAcz6Z,KAAM,aAAc8uB,UAAWoU,EAAQpU,UAAW/4B,OAAQmtC,EAAQntC,OAAS,GACzFqsC,EAAStkC,KAAK,IAAI22C,GAAkBp+C,EAAK,WAAYoka,GAAW,IACtC,WAAtBv3X,EAAQpU,WAAgD,QAAtBoU,EAAQpU,WAC1C/4B,EAAS4P,KAAKE,IAAIq7U,GAClBpyT,EAAYoyT,EAAK,EAAI,QAAU,SAG/BnrV,EAAS4P,KAAKE,IAAIo7U,GAClBnyT,EAAYmyT,EAAK,EAAI,SAAW,OAEpCy5E,EAAY,IAAIjmX,GAAkBp+C,EAAK,YAAc2J,KAAM,aAAc8uB,UAAWA,EAAW/4B,OAAQA,IAAU,GACjHqsC,EAAStkC,KAAK48Z,GACd,IAAIC,EAAUtka,EAAI+rC,SAAS,GACvBu4X,GAAWA,EAAQ5ka,SACnB4ka,EAAQ5ka,OAAU+4B,IAAc6rY,EAAQ7rY,UAAa6rY,EAAQ5ka,OAASA,EAAS4ka,EAAQ5ka,OAASA,GAEpGwV,EAAQ,EACR23B,EAAQntC,OAAS,EAAImtC,EAAQntC,OAAS,EACtCM,EAAI+rC,SAAWA,EAASvuB,OAAOxd,EAAI+rC,UAEvC,OAAO72B,GAEXguZ,EAAiB5ka,UAAU4la,uBAAyB,SAAUlka,EAAKkV,EAAO21U,EAAID,GAC1E,IAAIhnU,EAAU5jB,EAAI+rC,SAAS72B,GACvButC,EAAW7+B,EAAQgX,OAAOhX,EAAQgX,OAAOl7B,OAAS,GAClD4oD,EAAa1kC,EAAQgX,OAAO,GAC5B2pY,GAAe,EACnB,GAAqB,eAAjB3gZ,EAAQja,KAAuB,CAC/Bia,EAAQgX,OAAO,GAAK0tB,EACpB1kC,EAAQgX,OAAOhX,EAAQgX,OAAOl7B,OAAS,GAAK+iD,EAK5C,GAJWziD,EAAI+rC,SAAS72B,EAAQ,KAE5BqvZ,EAAetha,KAAKuha,sBAAsB35E,EAAID,EAAI5qV,EAAKkV,IAEvDlV,EAAI+rC,SAASrsC,OAAS,EAAIwV,GAASqvZ,EAAc,CACjD,IAAIE,EAAczka,EAAI+rC,SAAS72B,EAAQ,GACvCjS,KAAKyha,kBAAkB1ka,EAAK4jB,EAAS6gZ,EAAa55E,EAAID,MAIlEs4E,EAAiB5ka,UAAU2la,mBAAqB,SAAUnhX,EAAWjW,EAASg+S,EAAID,EAAIu4E,GAClF,IACItha,EACAwia,EACAv/Z,EACA0+C,EAJAtuC,EAAQ4tC,EAAU/W,SAASvqC,QAAQqrC,GAKvCiW,EAAU/W,SAASsjH,MACnB,IAAIl5H,EAAO2sB,EAAU/W,SAAS+W,EAAU/W,SAASrsC,OAAS,GAC1DmC,EAASs0B,GAAsB,eAAdA,EAAKxsB,KAAyBwsB,EAAO,KACtD,IAAK,IAAI/2B,EAAI,EAAGA,EAAIytC,EAAQjS,OAAOl7B,OAAS,EAAGN,IAC3C0F,EAAMq4C,GAAM8F,eAAepW,EAAQjS,OAAOx7B,GAAIytC,EAAQjS,OAAOx7B,EAAI,IACjEokD,EAAMrG,GAAM1kB,UAAUoU,EAAQjS,OAAOx7B,GAAIytC,EAAQjS,OAAOx7B,EAAI,IAC5Dila,EAAY,IAAIjmX,GAAkB0E,EAAW,YAAcn5C,KAAM,aAAcjK,OAAQoF,EAAK2zB,UAAW+qB,IAAO,GAC9GV,EAAU/W,SAAStkC,KAAK48Z,GACxBxia,EAAQwia,EAEZ,IAAIM,EAAMxB,EACV,IAA8B,IAA1Bt2X,EAAQjS,OAAOl7B,QAAgBila,IAAQ93X,EAAQjS,OAAOl7B,OAAS,KAC3DmC,IACAA,EAAMnC,QAAU,QAERtB,IAARuma,GAAmB,CACnB,IAAId,OAAS,EACb/+Z,EAAM,EAAIq4C,GAAM8F,eAAepW,EAAQjS,OAAOiS,EAAQjS,OAAOl7B,OAAS,GAAImtC,EAAQjS,OAAOiS,EAAQjS,OAAOl7B,OAAS,IAAM,EACvH8jD,EAAMrG,GAAM1kB,UAAUoU,EAAQjS,OAAOiS,EAAQjS,OAAOl7B,OAAS,GAAImtC,EAAQjS,OAAOiS,EAAQjS,OAAOl7B,OAAS,IACxGmka,EAAS,IAAIzlX,GAAkB0E,EAAW,YAAcn5C,KAAM,aAAcjK,OAAQoF,EAAK2zB,UAAW+qB,IACpGV,EAAU/W,SAAStkC,KAAKo8Z,GAGhC,IAAIe,EAAU,IAAIxmX,GAAkB0E,EAAW,YAAcn5C,KAAM,eAAgB,GAInF,OAHAm5C,EAAU/W,SAAStkC,KAAKm9Z,GACxB3ha,KAAKi4Z,eAAewI,eAAe5gX,GACnC5tC,GAAgBiuZ,GAGpBD,EAAiB5ka,UAAUuma,kBAAoB,SAAU//X,EAAMge,EAAW5tC,EAAO21U,EAAID,GACjF,GAAc,IAAV11U,GAAsC,IAAvB4vB,EAAKlK,OAAOl7B,QAAgBolC,EAAKplC,OAAS,EAAG,CAC5D,IAAIF,EAASsjD,EAAU7I,cAAczO,QACjC5nB,EAAUk/B,EAAU/W,SAAS72B,GAC7Bq2B,EAAOuX,EAAU/W,SAAS72B,EAAQ,GAClC2uZ,OAAS,EACTh3X,KACJg3X,EAAS,IAAIzlX,GAAkB0E,EAAW,YAAcn5C,KAAM,aAAcjK,OAAQ,GAAI+4B,UAAWqM,EAAKrM,YACxGoU,EAAQplC,KAAKo8Z,GACb,IAAI/+Z,OAAM,EAENA,EADsB,SAAtB8e,EAAQ6U,UACD7U,EAAQgX,OAAO,GAAG5qB,GAAKxQ,EAAOq8C,WAAW7rC,EAAI,IAEzB,UAAtB4T,EAAQ6U,UACLj5B,EAAOo8C,YAAY5rC,EAAI,GAAM4T,EAAQgX,OAAO,GAAG5qB,EAE5B,WAAtB4T,EAAQ6U,UACLj5B,EAAOm8C,aAAa1rC,EAAI,GAAM2T,EAAQgX,OAAO,GAAG3qB,EAGjD2T,EAAQgX,OAAO,GAAG3qB,GAAKzQ,EAAOk8C,UAAUzrC,EAAI,IAE7C2T,EAAQ6U,UAClBorY,EAAS,IAAIzlX,GAAkB0E,EAAW,YAAcn5C,KAAM,aAAcjK,OAAQoF,EAAK2zB,UAAW7U,EAAQ6U,YAC5GoU,EAAQplC,KAAKo8Z,GACbjgZ,EAAQlkB,OAASkkB,EAAQlkB,OAASoF,EAC9BymC,GAAQA,EAAK7rC,QAAU6rC,EAAK9S,YACxB8S,EAAK9S,YAAcqM,EAAKrM,UACxB8S,EAAK7rC,QAAU,GAEV6rC,EAAK9S,YAAcilB,GAAqB5Y,EAAKrM,aAClD8S,EAAK7rC,QAAU,KAGvBojD,EAAU/W,SAAWc,EAAQrvB,OAAOslC,EAAU/W,UAC9C9oC,KAAK45Z,gBAAkB/5W,EAAU/W,SAAS,KAGlDm3X,EAAiB5ka,UAAUkma,sBAAwB,SAAU35E,EAAID,EAAI9nS,EAAW5tC,GAC5E,IAAI0O,EAAUk/B,EAAU/W,SAAS72B,GAC7B4vB,EAAOge,EAAU/W,SAAS72B,EAAQ,GACtC4vB,EACKlK,OAAOkK,EAAKlK,OAAOl7B,OAAS,GAAKkkB,EAAQgX,OAAO,GACrD,IAAIkqY,GAAgBhiX,EAAUvI,UAAuC,KAA3BuI,EAAUqZ,aAChDooW,GAAe,EAyBnB,MAxBkB,eAAdz/X,EAAKn7B,OACkB,WAAnBm7B,EAAKrM,UACLqM,EAAKplC,QAAUkrV,EAES,QAAnB9lT,EAAKrM,UACVqM,EAAKplC,QAAUkrV,EAES,UAAnB9lT,EAAKrM,UACVqM,EAAKplC,QAAUmrV,EAGf/lT,EAAKplC,QAAUmrV,EAEY,KAA3B/nS,EAAUqZ,cAAuBr3B,EAAKplC,OAAS,EAC/CuD,KAAK4ha,kBAAkB//X,EAAMge,EAAW5tC,EAAO21U,EAAID,GAE9C9nS,EAAUvI,UAAuC,KAA3BuI,EAAUqZ,cAAuBr3B,EAAKplC,OAAS,GAAe,IAAVwV,IAC/EqvZ,GAAe,EACftha,KAAK8ha,mBAAmBjiX,EAAWl/B,IAEnCkhZ,GACA7ha,KAAK+ha,uBAAuBlgY,IAG7By/X,GAEXrB,EAAiB5ka,UAAU0ma,uBAAyB,SAAUn4X,GACtDA,EAAQntC,OAAS,IACjBmtC,EAAQpU,UAAYilB,GAAqB7Q,EAAQpU,WACjDoU,EAAQntC,SAAW,IAG3Bwja,EAAiB5ka,UAAUoma,kBAAoB,SAAU1ka,EAAK4jB,EAAS2nB,EAAMs/S,EAAID,GACpEhnU,EAAQgX,OAAOhX,EAAQgX,OAAOl7B,OAAS,GAChD6rC,EAAK3Q,OAAO,GAAKhX,EAAQgX,OAAOhX,EAAQgX,OAAOl7B,OAAS,GACpD6rC,GAAsB,eAAdA,EAAK5hC,OACT4hC,EAAK7rC,QAA0B,IAAhB6rC,EAAK7rC,UACG,SAAnB6rC,EAAK9S,WAA2C,UAAnB8S,EAAK9S,UACvB,IAAPoyT,IACAt/S,EAAK7rC,OAA6B,UAAnB6rC,EAAK9S,UAAyB8S,EAAK7rC,OAASmrV,EAAKt/S,EAAK7rC,OAASmrV,GAC1Et/S,EAAK7rC,QAA0B,IAAhB6rC,EAAK7rC,SACpBuD,KAAK+ha,uBAAuBz5X,IAKzB,IAAPq/S,IACAr/S,EAAK7rC,OAA6B,WAAnB6rC,EAAK9S,UAA0B8S,EAAK7rC,OAASkrV,EAAKr/S,EAAK7rC,OAASkrV,GAC3Er/S,EAAK7rC,QAA0B,IAAhB6rC,EAAK7rC,SACpBuD,KAAK+ha,uBAAuBz5X,MAOpD23X,EAAiB5ka,UAAUyma,mBAAqB,SAAUjiX,EAAW+5W,GACjE,IAKI7iX,EALA9kC,EAAQ4tC,EAAU/W,SAASvqC,QAAQq7Z,GACnCoI,GAAc,EACdrhZ,EAAUk/B,EAAU/W,SAAS72B,GAC7B4vB,EAAOge,EAAU/W,SAAS72B,EAAQ,GAGtC,GAAI4vB,EAAKplC,OAAS,GAAKojD,EAAUvI,SAAU,CACvC,IAAIO,EAAagI,EAAU7I,cAAczO,QACrCO,KACAq4X,OAAY,EACZc,GAAoB,EACxBjia,KAAK+ha,uBAAuBphZ,GAC5B,IAAI2nB,EAAOuX,EAAU/W,SAAS72B,EAAQ,GAClCiwZ,EAAWriX,EAAU/W,SAAS72B,EAAQ,GAO1C,OANIq2B,GACAtoC,KAAK+ha,uBAAuBz5X,GAE5B45X,GACAlia,KAAK+ha,uBAAuBG,GAExBrgY,EAAKrM,WACT,IAAK,MACL,IAAK,SACDuhB,EAAep2B,EAAQlkB,OAAS,GAA2B,SAAtBkkB,EAAQ6U,UAAwBqiB,EAAWe,WAAaf,EAAWc,YACpGh4B,EAAQlkB,OAASo7C,EAAW7hC,MAAQ,EAChC3J,KAAKE,IAAIs1B,EAAKplC,QAAUo7C,EAAW9hC,OAAS,IAC5C8rB,EAAKplC,OAASy9C,GAAM8F,eAAenI,EAAWnkB,OAAQmO,EAAKlK,OAAOkK,EAAKlK,OAAOl7B,OAAS,IACvFkkB,EAAQgX,OAAO,GAAG5qB,EAAIgqC,EAAYhqC,EAClC4T,EAAQlkB,OAASy9C,GAAM8F,eAAer/B,EAAQgX,OAAO,GAAIhX,EAAQgX,OAAOhX,EAAQgX,OAAOl7B,OAAS,IAChGkkB,EAAQlkB,QAAU,GAClBula,GAAc,IAId15X,GAAQA,EAAK9S,WAAa8S,EAAK7rC,SAC/B6rC,EAAK3Q,OAAO,GAAG3qB,EAAI+pC,EAAY/pC,EAC/Bs7B,EAAK3Q,OAAO,GAAG5qB,EAAIu7B,EAAK3Q,OAAO2Q,EAAK3Q,OAAOl7B,OAAS,GAAGsQ,EAA2B,UAAtB4T,EAAQ6U,UAChEuhB,EAAYhqC,EAAI,GAAKgqC,EAAYhqC,EAAI,IAE7Ci1Z,GAAc,EACdC,GAAoB,GAExB,MACJ,IAAK,OACL,IAAK,QACDlrX,EAAep2B,EAAQlkB,OAAS,GAA2B,QAAtBkkB,EAAQ6U,UAAuBqiB,EAAWY,UAAYZ,EAAWa,aAClG/3B,EAAQlkB,OAASo7C,EAAW9hC,OAAS,EACjC1J,KAAKE,IAAIs1B,EAAKplC,QAAUo7C,EAAW7hC,MAAQ,IAC3C6rB,EAAKplC,OAASy9C,GAAM8F,eAAenI,EAAWnkB,OAAQmO,EAAKlK,OAAOkK,EAAKlK,OAAOl7B,OAAS,IACvFkkB,EAAQgX,OAAO,GAAG3qB,EAAI+pC,EAAY/pC,EAClC2T,EAAQlkB,OAASy9C,GAAM8F,eAAer/B,EAAQgX,OAAO,GAAIhX,EAAQgX,OAAOhX,EAAQgX,OAAOl7B,OAAS,IAChGkkB,EAAQlkB,QAAU,GAClBula,GAAc,IAId15X,GAAQA,EAAK9S,WAAa8S,EAAK7rC,SAC/B6rC,EAAK3Q,OAAO,GAAG5qB,EAAIgqC,EAAYhqC,EAC/Bu7B,EAAK3Q,OAAO,GAAG3qB,EAAIs7B,EAAK3Q,OAAO2Q,EAAK3Q,OAAOl7B,OAAS,GAAGuQ,EAA2B,WAAtB2T,EAAQ6U,UAChEuhB,EAAY/pC,EAAI,GAAK+pC,EAAY/pC,EAAI,IAE7Cg1Z,GAAc,EACdC,GAAoB,GAIhCjia,KAAK+ha,uBAAuBlgY,GAC5B7hC,KAAK+ha,uBAAuBphZ,GACxBqhZ,IACAb,GAAcz6Z,KAAM,aAAc8uB,UAAW7U,EAAQ6U,UAAW/4B,OAAQ,IACxEqsC,EAAStkC,KAAK,IAAI22C,GAAkB0E,EAAW,WAAYshX,GAAW,IAClEc,IACI35X,GAAQA,EAAK9S,WAAa8S,EAAK7rC,SAC/B6rC,EAAK7rC,OAASy9C,GAAM8F,eAAe1X,EAAK3Q,OAAO,GAAI2Q,EAAK3Q,OAAO2Q,EAAK3Q,OAAOl7B,OAAS,KAEpFyla,GAAYA,EAAS1sY,WAAa0sY,EAASzla,SAC3Cyla,EAASzla,OAASy9C,GAAM8F,eAAe1X,EAAK3Q,OAAO2Q,EAAK3Q,OAAOl7B,OAAS,GAAIyla,EAASvqY,OAAOuqY,EAASvqY,OAAOl7B,OAAS,KAEzHojD,EAAU/W,SAASzgB,OAAOpW,EAAQ,EAAG,IAEzC4tC,EAAU/W,SAAWA,EAASvuB,OAAOslC,EAAU/W,WAEnD9oC,KAAK45Z,gBAAmB,EAAsB/5W,EAAU/W,SAAS72B,EAAQ,GACrE4tC,EAAU/W,SAAS72B,EAAQ,GAC/BjS,KAAKi4Z,eAAewI,eAAe5gX,KAG3CogX,EAAiB5ka,UAAUila,kBAAoB,SAAUzgX,EAAW+5W,GAChE,GAAI/5W,EAAUmrW,UAAuC,KAA3BnrW,EAAUorW,aAAqB,CACrD,IAAIkX,OAAa,EACbC,OAAW,EACXC,OAAa,EACbC,OAAW,EACX/5X,EAAUsX,EAAUtI,cAAchP,QAClCg6X,EAAgB3I,EAAgBjiY,OAAO,GACvC6qY,EAAe5I,EAAgBjiY,OAAOiiY,EAAgBjiY,OAAOl7B,OAAS,GACxC,UAA9Bm9Z,EAAgBpkY,WAAuD,SAA9BokY,EAAgBpkY,WACzD2sY,GAAep1Z,EAAGw1Z,EAAcx1Z,EAAGC,EAAGu1Z,EAAcv1Z,GACpDo1Z,GACIr1Z,EAAkC,SAA9B6sZ,EAAgBpkY,UAAwBgtY,EAAaz1Z,EAAIw7B,EAAQvyB,MAAQ,EAAIwsZ,EAAaz1Z,EAAIw7B,EAAQvyB,MAAQ,EAClHhJ,EAAGw1Z,EAAax1Z,GAEpBq1Z,GAAet1Z,EAAGw7B,EAAQ7U,OAAO3mB,EAAGC,EAAGu7B,EAAQ7U,OAAO1mB,EAAIu7B,EAAQxyB,QAClEusZ,GAAav1Z,EAAGw7B,EAAQ7U,OAAO3mB,EAAGC,EAAGu7B,EAAQ7U,OAAO1mB,EAAIu7B,EAAQxyB,UAGhEosZ,GAAep1Z,EAAGw1Z,EAAcx1Z,EAAGC,EAAGu1Z,EAAcv1Z,GACpDo1Z,GACIr1Z,EAAGy1Z,EAAaz1Z,EAChBC,EAAkC,WAA9B4sZ,EAAgBpkY,UAA0BgtY,EAAax1Z,EAAIu7B,EAAQxyB,OAAS,EAAIysZ,EAAax1Z,EAAIu7B,EAAQxyB,OAAS,GAE1HssZ,GAAet1Z,EAAGw7B,EAAQ7U,OAAO3mB,EAAIw7B,EAAQvyB,MAAOhJ,EAAGu7B,EAAQ7U,OAAO1mB,GACtEs1Z,GAAav1Z,EAAGw7B,EAAQ7U,OAAO3mB,EAAIw7B,EAAQvyB,MAAOhJ,EAAGu7B,EAAQ7U,OAAO1mB,IAIxE,OAAQ6sC,IAFMqG,GAAIiiX,EAAWp1Z,EAAGozC,GAAIgiX,EAAWn1Z,EAAGozC,GAAIgiX,EAASr1Z,EAAGszC,GAAI+hX,EAASp1Z,IACjEkzC,GAAImiX,EAAWt1Z,EAAGozC,GAAIkiX,EAAWr1Z,EAAGozC,GAAIkiX,EAASv1Z,EAAGszC,GAAIiiX,EAASt1Z,IACvC,QAE5C,OAAO,GAOXizZ,EAAiB5ka,UAAUiX,QAAU,aAQrC2tZ,EAAiB5ka,UAAUkkC,cAAgB,WAIvC,MAAO,wBAEJ0gY,GACTlI,IC1nBE0K,GAAqC,WAErC,SAASA,EAAoB3sX,EAASmiX,GAClCj4Z,KAAK0ia,cAAgB,OACrB1ia,KAAKkC,OAAQ,EACblC,KAAK2ia,WAAY,EACjB3ia,KAAK4ia,aAAc,EACnB5ia,KAAKk4Z,UAAW,EAChBl4Z,KAAK6ia,iBAAkB,EACvB7ia,KAAK81C,QAAU,KACf91C,KAAK8ia,aAAe,KACpB9ia,KAAKooD,KAAO,KACZpoD,KAAKuN,UAAY,KACjBvN,KAAK81C,QAAUA,EACf91C,KAAK8ia,aAAe,IAAIC,GACxB/ia,KAAKi4Z,eAAiBA,EAq3B1B,OAn3BA35Z,OAAOuJ,eAAe46Z,EAAoBpna,UAAW,UACjDqM,IAAK,WACD,OAAO1H,KAAK0ia,eAEhBr7Z,IAAK,SAAU8uD,GACPA,IAAWn2D,KAAK0ia,gBACW,aAAvB1ia,KAAK0ia,gBACL1ia,KAAK81C,QAAQsS,OAASC,GAAaO,SAC/B5oD,KAAKooD,MACLpoD,KAAKooD,KAAKywW,SAAU3kZ,SAAUlU,KAAKi+O,kBAEvCj+O,KAAKooD,KAAO,MAEhBpoD,KAAK0ia,cAAgBvsW,EACM,SAAvBn2D,KAAK0ia,eAAmD,WAAvB1ia,KAAK0ia,eACpC1ia,KAAK81C,QAAQuT,eAAiBC,GAAc05W,SAI9Chja,KAAK81C,QAAQuT,eAAiBrpD,KAAK81C,QAAQuT,gBAAkBC,GAAcC,WAH3EvpD,KAAK81C,QAAQuT,eAAiBrpD,KAAK81C,QAAQuT,eAAiBC,GAAcC,WAK9EvpD,KAAK81C,QAAQkoU,UAAUh+W,KAAK81C,QAAQ0jB,UAAUrD,EAAQn2D,KAAKk4Z,aAGnEvwZ,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe46Z,EAAoBpna,UAAW,WACjDqM,IAAK,WACD,OAAO1H,KAAK2ia,WAEhBt7Z,IAAK,SAAU+wZ,GACXp4Z,KAAK2ia,UAAYvK,EACbp4Z,KAAKo4Z,QACLp4Z,KAAK81C,QAAQkoU,UAAU,eAGvBh+W,KAAK81C,QAAQkoU,UAAUh+W,KAAK81C,QAAQ0jB,UAAUx5D,KAAKm2D,OAAQn2D,KAAKk4Z,YAGxEvwZ,YAAY,EACZC,cAAc,IAGlB66Z,EAAoBpna,UAAUilF,iBAAmB,SAAUz/E,GACvD,IAAIqgV,EACAr1U,EACAI,GAC6B,IAA7BpL,EAAE6F,KAAKnI,QAAQ,UAEfsN,GADAq1U,EAAWrgV,GACQ89D,eAAe,GAAGvqB,QACrCnoC,EAAUi1U,EAASviR,eAAe,GAAGtqB,UAGrCxoC,EAAUhL,EAAEuzC,QACZnoC,EAAUpL,EAAEwzC,SAEhB,IAAIngC,EAAW,IAAIkZ,GACnBlZ,EAAW61C,GAAa/pD,KAAK81C,SAC7B,IAAImtX,EAAejja,KAAK81C,QAAQ90C,QAAQ4K,wBAOxC,OANAC,EAAUA,EAAU7L,KAAK81C,QAAQotX,cAAcl3Z,WAAai3Z,EAAaz2Z,KAAO0H,EAAS8B,MACzF/J,EAAUA,EAAUjM,KAAK81C,QAAQotX,cAAc/2Z,UAAY82Z,EAAav2Z,IAAMwH,EAAS6B,OACvFlK,GAAW7L,KAAK81C,QAAQgV,SAASz9C,UAAUo+C,MAC3Cx/C,GAAWjM,KAAK81C,QAAQgV,SAASz9C,UAAUo+C,MAC3C5/C,GAAW7L,KAAK81C,QAAQgV,SAASz9C,UAAUu6U,GAC3C37U,GAAWjM,KAAK81C,QAAQgV,SAASz9C,UAAUs6U,IAClC56U,EAAGlB,EAASmB,EAAGf,IAK5Bw2Z,EAAoBpna,UAAU8na,aAAe,SAAUvtV,GACnD,IAAI71E,EAAQC,KAOZ,OANIA,KAAK65U,UACL35U,aAAaF,KAAK65U,UAEtB75U,KAAK65U,SAAW15U,WAAW,WACvBJ,EAAMqja,mBAAmBrja,EAAM+1C,QAAQ90C,UACxC,MACI,GAKXyha,EAAoBpna,UAAU+na,mBAAqB,SAAUpia,GACzD,IAAIyZ,EAAYja,SAASosB,eAAe5rB,EAAQsC,IAChD,GAAImX,EAAW,CACX,IAAIic,EAASjc,EAAU7O,wBACvB5L,KAAK81C,QAAQgV,SAASu4W,gBAAgB3sY,EAAO1gB,MAAO0gB,EAAO3gB,QAC3D,IAAI7B,EAAW,IAAIkZ,GACnBlZ,EAAW61C,GAAa/pD,KAAK81C,SAC7B,IAAI9/B,EAAQhW,KAAK81C,QAAQwtX,aAAatja,KAAK81C,QAAQ9/B,MAAO9B,EAAS8B,OAC/DD,EAAS/V,KAAK81C,QAAQwtX,aAAatja,KAAK81C,QAAQ//B,OAAQ7B,EAAS6B,QACrE/V,KAAK81C,QAAQotX,cAAcx+Z,MAAMsR,MAAQA,EACzChW,KAAK81C,QAAQotX,cAAcx+Z,MAAMqR,OAASA,EAC1C/V,KAAK81C,QAAQgV,SAASuxI,UAClBr8L,KAAK81C,QAAQqU,cAAce,YAC3BN,GAAY5qD,KAAK81C,WAK7B2sX,EAAoBpna,UAAUkoa,gBAAkB,WAC5C,OAASvja,KAAKooD,gBAAgB8yW,IAAYl7Z,KAAKooD,gBAAgBo0W,KAAex8Z,KAAK4ia,aAGvFH,EAAoBpna,UAAUmoa,aAAe,WACzC,GAAiD,IAA5Cxja,KAAK81C,QAAQwc,cAAcR,MAAMr1D,QAAiE,IAAjDuD,KAAK81C,QAAQwc,cAAcT,WAAWp1D,OAAe,CACvG,IAAIomG,KACJA,EAAOA,EAAKtoF,OAAOva,KAAK81C,QAAQwc,cAAcR,MAAO9xD,KAAK81C,QAAQwc,cAAcT,YAChF7xD,KAAKo4Z,QAAWp4Z,KAAK4ia,aAA+B,IAAhB//T,EAAKpmG,QAAgBuD,KAAKooD,gBAAgB4wW,KAAe7yW,GAAQ08C,EAAK,MAGlH4/T,EAAoBpna,UAAUooa,gBAAkB,SAAUt8Z,EAAQu8Z,GAC9D,IAAIC,EAAgBx8Z,EACpB,GAAIw8Z,EACA,KAAmC,MAA5BA,EAAclja,YAAoB,CACrC,GAAuC,iBAA5Bkja,EAActga,aAClBqga,IAAoE,IAAvDC,EAActga,UAAU9E,QAAQ,mBAC3Cmla,IAAyE,IAA5DC,EAActga,UAAU9E,QAAQ,wBAClD,OAAOola,EAGPA,EAAgBA,EAAclja,WAI1C,OAAO,MAEXgia,EAAoBpna,UAAUuoa,UAAY,SAAUhuV,GAChD,OAAOuT,UAAUqyC,SAAS7rH,MAAM,OAASimE,EAAIsnD,QAAUtnD,EAAI/tD,SAE/D46Y,EAAoBpna,UAAUwoa,YAAc,SAAUxma,EAAKL,GACvD,OAAQmsF,UAAUqyC,SAAS7rH,MAAM,QAAkB,cAARtS,GAAiC,WAAVL,GAEtEyla,EAAoBpna,UAAUq9Z,UAAY,SAAU9iV,GAChD51E,KAAKkC,OAAQ,EACb,IAAIiyC,EAEJ,GADAA,EAAUyhC,EAAIzhC,SACTn0C,KAAK8ja,qBAAqBluV,IAAS7sB,GAAgB/oD,KAAK81C,UACxDyS,GAAWvoD,KAAK81C,WAAa+S,GAAY7oD,KAAK81C,SAI/C,GAHoB,WAAhB91C,KAAKm2D,QAAuC,SAAhBn2D,KAAKm2D,QACjCn2D,KAAK81C,QAAQiuX,qBAAqB/ja,KAAKgka,aAAcjrW,GAAeC,OAAO,GAE3Eh5D,KAAKooD,gBAAgB23W,KAAsC,IAAfnqV,EAAIu7C,QAAgC,IAAhBv7C,EAAIuwC,SAAgB,CACpF,IAAIp0B,GACA/wF,QAAShB,KAAK81C,QAAS5hC,SAAUlU,KAAKi+O,gBAAiBn/N,MAAO82D,EAAIuwC,SAEtEnmH,KAAKk4Z,UAAW,EAChBl4Z,KAAKooD,KAAKywW,QAAQ74Z,KAAKuN,UAAWwkF,QAEjC,IAAuB,IAAlB/xF,KAAKk4Z,WAA2C,IAArBl4Z,KAAK4ia,aAAwB5ia,KAAKooD,gBAAgB23W,GACnF//Z,KAAK4ia,aAAc,EACnB5ia,KAAKuN,aACLvN,KAAKika,kBAAkBjka,KAAKi+O,gBAAiBj+O,KAAKuN,WAClDvN,KAAKuN,UAAU2G,SAAWlU,KAAKi+O,gBAC/Bj+O,KAAKooD,KAAKswW,UAAU14Z,KAAKuN,eAExB,CACDvN,KAAK4ia,aAAc,EACnB5ia,KAAKi+O,gBAAkBj+O,KAAK24Z,aAAe34Z,KAAKsgF,iBAAiB1K,GACjE51E,KAAKuN,aACLvN,KAAK81C,QAAQouX,UACb,IAAI/8Z,OAAS,EACTsnD,EAAUzuD,KAAK8ia,aAAaqB,sBAAsBnka,KAAKi+O,gBAAiBj+O,KAAK81C,QAAS,KAAM91C,KAAKm2D,QACjGp5D,EAAMiD,KAAK8ia,aAAasB,qBAAqBpka,KAAK81C,QAAS2Y,EAASzuD,KAAKm2D,OAAQn2D,KAAKk4Z,SAAUtiV,GAChGyuV,EAAgB,KACR,OAARtna,IACAsna,EAAgBrka,KAAK81C,QAAQwuX,sBAAsBvna,EAAKiD,KAAKi+O,oBAEzD92O,EAASnH,KAAKi4Z,eAAeqC,WAAW+J,EAAetna,IAG/DiD,KAAKm2D,OAASn2D,KAAK81C,QAAQyuX,mBAAmBxna,EAAKsna,EAAerka,KAAKi+O,gBAAiB92O,GAExF,IAAI0gB,EAAU7nB,KAAK4ja,UAAUhuV,GAa7B,GAZI/tD,GAAW+tD,EAAI6gC,UAAYz2G,KAAK81C,QAAQwiB,2BACxCt4D,KAAKm2D,OAAS,cAERtuC,IAAW+tD,EAAI6gC,UAAeluD,GAAWvoD,KAAK81C,WACpD91C,KAAKm2D,OAAS,UAElBn2D,KAAKooD,KAAOpoD,KAAK81C,QAAQ0uX,QAAQxka,KAAKm2D,QACjCn2D,KAAKooD,OACNpoD,KAAKm2D,OAAS,SACdn2D,KAAKooD,KAAOpoD,KAAK81C,QAAQ0uX,QAAQxka,KAAKm2D,SAE1Cn2D,KAAKika,kBAAkBjka,KAAKi+O,gBAAiBj+O,KAAKuN,WAC9Csa,GAAW+tD,EAAI6gC,SAAU,CACzB,IAAI9vF,EAAQkB,GAAW+tD,EAAI6gC,UAAc5uF,QAASA,EAAS4uF,SAAU7gC,EAAI6gC,WAAe5uF,SAAS,GACjG7nB,KAAKuN,UAAUoZ,KAAOA,EAE1B3mB,KAAKuN,UAAU2G,SAAWlU,KAAKi+O,gBAC/Bj+O,KAAKooD,KAAKswW,UAAU14Z,KAAKuN,WACzBvN,KAAKyka,kBAAqBloa,OAAQyD,KAAKuN,UAAUhR,OAAQy6C,cAAeh3C,KAAKuN,UAAUypC,eACvFh3C,KAAKyka,iBAAiBvwZ,SAAWlU,KAAKi+O,gBACtCj+O,KAAKyka,iBAAiB99Y,KAAO3mB,KAAKuN,UAAUoZ,KAC5C3mB,KAAKk4Z,UAAW,EACC,eAAbtiV,EAAIlvE,OACAytC,GAAWA,EAAQ13C,QAAU,IAC7BuD,KAAK2mW,eAAiB1yT,GAAgBj0C,KAAK2mW,eAAgB/wR,EAAKzhC,IAE/DA,GACDyhC,EAAIpwD,kBAKfxlB,KAAKyja,gBAAgB7tV,EAAIzuE,SAAYnH,KAAKyja,gBAAgB7tV,EAAIzuE,QAAQ,IAAWgtC,GAClFyhC,EAAIpwD,kBAGZi9Y,EAAoBpna,UAAUqpa,gBAAkB,SAAU7ja,EAAG9D,GACrDiD,KAAKooD,gBAAgB23W,IACrB//Z,KAAKooD,KAAKy3R,UAAU7/U,KAAKuN,WAEzBvN,KAAK81C,QAAQ2b,eAAekzW,cAC5B3ka,KAAK4ka,gBAAgB/ja,GAGhBb,KAAKo4Z,SACLp4Z,KAAKooD,KAAKy3R,UAAU7/U,KAAKuN,WAG9BvN,KAAKuN,UAAUpG,SACfnH,KAAKgka,aAAehka,KAAKuN,UAAUpG,QAEvC,IAAI09Z,IAAS7ka,KAAKuN,UAAUpG,kBAAkBggD,IAAQpqD,aAAeoqD,IACjEnnD,KAAKooD,gBAAgBoxW,IACrBx5Z,KAAK81C,QAAQiuX,qBAAqB/ja,KAAKgka,wBAAwB78W,GAAOnnD,KAAKgka,aAAehka,KAAK8ka,UAAW/rW,GAAemsV,QAAUnsV,GAAeC,MAAO6rW,GAEzJ7ka,KAAKgka,wBAAwB78W,IAC1BnnD,KAAK8ka,qBAAqB39W,IAAQnnD,KAAK8ka,WAAa9ka,KAAK8ka,UAAUxha,KAAOtD,KAAKgka,aAAa1ga,IAC/FtD,KAAK81C,QAAQiuX,qBAAqB/ja,KAAK8ka,UAAW/rW,GAAemsV,QAAUnsV,GAAeC,OAAO,GAErGh5D,KAAKgka,aAAea,EAAS,KAAO9na,EACpCiD,KAAK8ka,UAAYD,EAAS,KAAO9na,GAGrC0la,EAAoBpna,UAAUwkV,UAAY,SAAUh/U,EAAGszC,GAEnD,GADAn0C,KAAKkC,OAAQ,EACT6mD,GAAgB/oD,KAAK81C,UAAayS,GAAWvoD,KAAK81C,WAAa+S,GAAY7oD,KAAK81C,SAAW,CAC3F91C,KAAKi+O,gBAAkBj+O,KAAKsgF,iBAAiBz/E,GAC7C,IAAI4tD,EAAUzuD,KAAK81C,QAAQquX,sBAAsBnka,KAAKi+O,iBAClDlhP,EAAMiD,KAAK81C,QAAQsuX,qBAAqB31W,EAASzuD,KAAKm2D,OAAQn2D,KAAKk4Z,WxWzKnF,SAAiCpiX,EAASzjB,GAClCyjB,EAAQqU,cAAce,aACtBpV,EAAQ2U,OAAO0lW,gBAAgBr6W,EAAQ2U,OAAOzpD,QAASqxB,EAAcyjB,EAAQgV,SAASC,kBACtFjV,EAAQ4U,OAAOylW,gBAAgBr6W,EAAQ4U,OAAO1pD,QAASqxB,EAAcyjB,EAAQgV,SAASG,iBwWuKlF85W,CAAiB/ka,KAAK81C,QAAS91C,KAAKi+O,iBACpC,IAAIglK,GAAQ,EACR97Y,OAAS,EAUb,GATe,cAAXtG,EAAE6F,OACFytC,EAAUtzC,EAAEszC,UACGA,EAAQ13C,OAAS,IAC5BuD,KAAK0mW,cAAgBzyT,GAAgBj0C,KAAK0mW,cAAe7lW,EAAGszC,GACxC,cAAhBn0C,KAAKm2D,SACL8sV,GAAQ,KAI0C,IAA1D/oW,GAAMrB,OAAO74C,KAAKi+O,gBAAiBj+O,KAAK24Z,eAA2B34Z,KAAKk4Z,SAAU,CAClF,IAAyB,IAArBl4Z,KAAK4ia,aAAyB3f,EAAO,CACrCjjZ,KAAKuN,aACL,IAAI82Z,EAAgB,KACR,OAARtna,IACAsna,EAAgBrka,KAAK81C,QAAQwuX,sBAAsBvna,EAAKiD,KAAKi+O,iBACzDlhP,IAAQiD,KAAKgka,cACThka,KAAKgka,eACLhka,KAAKgla,eACLhla,KAAK81C,QAAQiuX,qBAAqB/ja,KAAKgka,aAAcjrW,GAAeC,OAAO,IAE3Ej8D,aAAeoqD,KACfnnD,KAAK8ka,UAAY/na,GAErBiD,KAAKgka,aAAejna,EACpBiD,KAAKila,aAAajla,KAAKi+O,iBAAiB,IAElCj+O,KAAKgka,cAAgBhka,KAAKgka,eAAiBjna,GACjDiD,KAAKila,aAAajla,KAAKi+O,iBAAiB,GAExComL,IACAl9Z,EAASnH,KAAKi4Z,eAAeqC,WAAW+J,EAAetna,KAG/DiD,KAAKm2D,OAASn2D,KAAK81C,QAAQyuX,mBAAmBxna,EAAKsna,EAAerka,KAAKi+O,gBAAiB92O,GACxFnH,KAAKika,kBAAkBjka,KAAKi+O,gBAAiBj+O,KAAKuN,WAClDvN,KAAKooD,KAAOpoD,KAAKwka,QAAQxka,KAAKm2D,QAC1Bn2D,KAAKooD,gBAAgBqxW,GACrBz5Z,KAAKooD,KAAKy3R,UAAU7/U,KAAKuN,WAEpBvN,KAAKooD,gBAAgB23W,GAC1B//Z,KAAKooD,KAAKy3R,UAAU7/U,KAAKuN,WAEpB4mC,GAAWn0C,KAAKooD,gBAAgB42W,IACrCh/Z,KAAKooD,KAAKswW,UAAU14Z,KAAKuN,WAE7BvN,KAAKwja,eACL,IAAIqB,GAAS,IACP7ka,KAAKgka,cAAmBhka,KAAKooD,gBAAgB42W,MAAiBjia,aAAeoqD,KAClC,IAA5CnnD,KAAK81C,QAAQwc,cAAcR,MAAMr1D,QAAiBq8D,GAAW94D,KAAK81C,QAAS91C,KAAKgka,iBACjFa,GAAS,GAEb7ka,KAAK81C,QAAQiuX,qBAAqB/ja,KAAKgka,aAAcjrW,GAAeC,MAAO6rW,GAC/D,OAAR9na,GAAgBiD,KAAKgka,eACrBhka,KAAKgka,aAAe,KACpBhka,KAAKgla,gBAET/hB,GAAQ,MAEP,CAMD,GALAjjZ,KAAKuN,UAAU2G,SAAWlU,KAAKi+O,gBACX,SAAhBj+O,KAAKm2D,SAAsB2C,GAAW94D,KAAK81C,QAAS91C,KAAKuN,UAAUhR,QAAQ,IAC3EyD,KAAKuN,UAAUhR,kBAAkB8pD,IACjCrmD,KAAKika,kBAAkBjka,KAAKi+O,gBAAiBj+O,KAAKuN,WAElD1M,EAAEgnB,SAAWhnB,EAAE41G,SAAU,CACzB,IAAI9vF,EAAQ9lB,EAAEgnB,SAAWhnB,EAAE41G,UAAc5uF,QAAShnB,EAAEgnB,QAAS4uF,SAAU51G,EAAE41G,WAAe5uF,SAAS,GACjG7nB,KAAKuN,UAAUoZ,KAAOA,EAEtBw/B,GAAQppD,IAAQ8oD,GAAU9oD,IAAQiD,KAAKyka,kBACvCzka,KAAKyka,iBAAiBloa,QAA0B,WAAhByD,KAAKm2D,UAChC2C,GAAW94D,KAAK81C,QAAS91C,KAAKuN,UAAUhR,QAAQ,IACjDyD,KAAKuN,UAAUhR,kBAAkB8pD,IACjCrmD,KAAKika,kBAAkBjka,KAAKi+O,gBAAiBj+O,KAAKuN,WAEhDxQ,aAAe+oD,OAAe/oD,aAAe+oD,KAC7C3hD,GAASnE,KAAKi+O,gBAAiBlhP,EAAIg6C,YAAah6C,EAAIkwD,aAClD9oD,GAASnE,KAAKi+O,gBAAiBlhP,EAAIgiD,YAAahiD,EAAIkwD,eACxDjtD,KAAKm2D,OAAS,QAElBn2D,KAAKooD,KAAOpoD,KAAKwka,QAAQxka,KAAKm2D,QAC9Bn2D,KAAKooD,KAAKswW,UAAU14Z,KAAKyka,mBAE7Bzka,KAAKika,kBAAkBjka,KAAKi+O,gBAAiBj+O,KAAKuN,UAAWvN,KAAKuN,UAAUhR,QAC5EyD,KAAKwja,eACLxja,KAAKk4Z,UAAW,EAChBl4Z,KAAKyka,iBAAmB,KACxBzka,KAAK0ka,gBAAgB7ja,EAAG9D,GAE5BiD,KAAK24Z,aAAe34Z,KAAKi+O,gBACpBj+O,KAAKyja,gBAAgB5ia,EAAEsG,QAAQ,IAChCtG,EAAE2kB,oBAKlBi9Y,EAAoBpna,UAAUupa,gBAAkB,SAAU/ja,GACtD,IAAIqka,EAAqBlla,KAAKmla,gBAAgBtka,GAC9C,IAAKqka,GAAsBlla,KAAK6ia,gBAC5B7ia,KAAK6ia,iBAAkB,EACvBvga,cAActC,KAAKola,mBAElB,GAAIF,GACL,IAAKlla,KAAKooD,gBAAgB8yW,IAAYl7Z,KAAKooD,gBAAgB20W,IACpD/8Z,KAAKooD,gBAAgB4wW,KAAeh5Z,KAAKk4Z,SAAU,CACtD,IAAImN,EAAYrla,KAEZA,KAAK81C,QAAQ2b,eAAekzW,eAAiBO,IAAuBlla,KAAK6ia,kBACzE7ia,KAAK6ia,iBAAkB,EACvB7ia,KAAKola,aAAehja,YAAY,SAAUnC,GACtCola,EAAUC,aAAaJ,EAAoBrka,EAJrC,MAAA,YAUlBb,KAAKo4Z,SAAYp4Z,KAAKooD,KAAKy3R,UAAU7/U,KAAKuN,YAIlDk1Z,EAAoBpna,UAAUw9Z,QAAU,SAAUjjV,GAC9C,IAAIzhC,EAEJ,GADAA,EAAUyhC,EAAIzhC,SACTn0C,KAAK8ja,qBAAqBluV,IAAS7sB,GAAgB/oD,KAAK81C,UACrDyS,GAAWvoD,KAAK81C,WAAa+S,GAAY7oD,KAAK81C,SAAW,CAC7D,GAAI91C,KAAKooD,SAAWpoD,KAAKooD,gBAAgB23W,KACnC//Z,KAAKooD,gBAAgB23W,IAAsC,IAAfnqV,EAAI8nD,QAAgB,CAGlE,GAFA19H,KAAK81C,QAAQouX,UACb1ja,SAASosB,eAAe5sB,KAAK81C,QAAQ90C,QAAQsC,GAAK,WAAWpB,SACxDlC,KAAKk4Z,UAA0B,IAAdtiV,EAAI+gC,OACF,SAAhB32G,KAAKm2D,OAAmB,CACxBn2D,KAAKm2D,OAAS,SACd,IAAI1H,EAAUzuD,KAAK81C,QAAQquX,sBAAsBnka,KAAKi+O,iBAClDlhP,EAAMiD,KAAK81C,QAAQsuX,qBAAqB31W,EAASzuD,KAAKm2D,OAAQn2D,KAAKk4Z,UACnEqN,GAAmB,GACjB3vV,EAAI/tD,SAAW7nB,KAAK4ia,aAClB5ia,KAAK81C,QAAQwc,cAAcR,MAAMr1D,OAASuD,KAAK81C,QAAQwc,cAAcT,WAAWp1D,OAAU,GAC7E,IAAdm5E,EAAI+gC,QACP4uT,GAAmB,EACnBvla,KAAKi4Z,eAAesB,kBAEnBzgW,GAAW94D,KAAK81C,QAAS/4C,IAAUwoa,GACpCvla,KAAKi4Z,eAAeqB,eAAev8Z,IAO/C,GAHAiD,KAAKk4Z,UAAW,EAChBl4Z,KAAK4ia,aAAc,EACnB5ia,KAAKi+O,gBAAkBj+O,KAAKsgF,iBAAiB1K,GACzC51E,KAAKooD,OAASpoD,KAAKooD,KAAKuwW,cAAgB34Z,KAAKooD,gBAAgB03W,IAAY,CACzE9/Z,KAAKuN,UAAU2G,SAAWlU,KAAKi+O,gBAC/Bj+O,KAAKika,kBAAkBjka,KAAKi+O,gBAAiBj+O,KAAKuN,UAAWvN,KAAKuN,UAAUhR,QAC5E,IAAIsrB,EAAU7nB,KAAK4ja,UAAUhuV,GAC7B,GAAI/tD,GAAW+tD,EAAI6gC,SAAU,CACzB,IAAI9vF,EAAQkB,GAAW+tD,EAAI6gC,UAAc5uF,QAASA,EAAS4uF,SAAU7gC,EAAI6gC,WACnE5uF,SAAS,GACf7nB,KAAKuN,UAAUoZ,KAAOA,EAE1B3mB,KAAKuN,UAAU6rZ,WAAaxjV,EAAI8nD,OAChC19H,KAAKooD,KAAKywW,QAAQ74Z,KAAKuN,WAG3B,GADAvN,KAAKo4Z,SAAU,EACXp4Z,KAAKgka,aAAc,CACnB,IAAIvtW,EAAiBsC,GAAemsV,QAChCpsV,GAAW94D,KAAK81C,QAAS91C,KAAKgka,gBAC9BvtW,GAAkBsC,GAAeC,OAErCh5D,KAAK81C,QAAQiuX,qBAAqB/ja,KAAKgka,aAAcvtW,GAAgB,GACrEz2D,KAAKgka,aAAe,KAExBhka,KAAK2mW,eAAiB,KACtB3mW,KAAK0mW,cAAgB,KACf1mW,KAAKooD,gBAAgBy2W,KACvB7+Z,KAAKooD,KAAO,MAGpBpoD,KAAKuN,aACA4mC,GACDyhC,EAAIpwD,iBAERxlB,KAAK81C,QAAQqjB,0BAAuBh+D,EACpC,IAAIuK,EAAW1F,KAAK81C,QAAQwc,cAI5B,IAHKtyD,KAAKk4Z,UAAYxyZ,EAASqM,SAAWrM,EAASmyD,YAAYp7D,OAAS,GACpEuD,KAAK81C,QAAQi9U,gBAAe,IAE3B/yX,KAAKk4Z,WAAal4Z,KAAK81C,QAAQ6hB,cAAe,CAC/C,IAAIo6B,GACA/wF,QAAShB,KAAKuN,UAAUhR,QAAUyD,KAAK81C,QAAS5hC,SAAUlU,KAAKuN,UAAU2G,SAAU4K,MAAO82D,EAAI8nD,QAElG19H,KAAK81C,QAAQ0zG,aAAas3P,GAAaz6R,MAAOt0B,MAM1D0wU,EAAoBpna,UAAU4kV,WAAa,SAAUrqQ,GAE7C51E,KAAKooD,MAAQpoD,KAAKk4Z,UAClBl4Z,KAAKooD,KAAK63R,WAAWjgV,KAAKuN,WAE1BvN,KAAKuN,WAAavN,KAAKuN,UAAUhR,SACjCyD,KAAK81C,QAAQiuX,qBAAqB/ja,KAAKuN,UAAUhR,OAAQw8D,GAAeC,OAAO,GAC/Eh5D,KAAKgka,aAAe,MAEpBhka,KAAKooD,gBAAgBoxW,IAAex5Z,KAAKuN,WAAavN,KAAKuN,UAAUpG,QAAUnH,KAAKuN,UAAUpG,kBAAkBggD,KAChHnnD,KAAK81C,QAAQiuX,qBAAqB/ja,KAAKuN,UAAUpG,OAAQ4xD,GAAeC,MAAQD,GAAemsV,SAAS,GACxGllZ,KAAKgka,aAAe,MAExB,IAAIt+Z,EAAW1F,KAAK81C,QAAQwc,cACxB5sD,GAAYA,EAASqM,SACrB/R,KAAK81C,QAAQi9U,gBAAe,GAEhC/yX,KAAK4ia,aAAc,EACnB5ia,KAAKkC,OAAQ,EACblC,KAAK2mW,eAAiB,KACtB3mW,KAAK0mW,cAAgB,KACrB1mW,KAAKi4Z,eAAe6B,aACpB95Z,KAAKk4Z,UAAW,EAChBl4Z,KAAKuN,aACLvN,KAAKooD,KAAO,KxWpZpB,WACI,IACI0kR,EACA3wU,EAFAqpa,EAAUhla,SAASkN,uBAAuB,oBAG9C,GAAI83Z,GAAWA,EAAQ/oa,OAAS,EAC5B,IAAKN,EAAIqpa,EAAQ/oa,OAAS,EAAGN,GAAK,EAAGA,KACjC2wU,EAAS04F,EAAQrpa,KAEb2wU,EAAOrsU,WAAW6E,YAAYwnU,GwW6YtC24F,GACA7vV,EAAIpwD,kBAGRi9Y,EAAoBpna,UAAUkiI,WAAa,SAAU3nD,GACjD,IAAIywI,EAAMzwI,EAAI6nD,WAAa,IAAM,GAAK7nD,EAAI8nD,OAAS,EAC/C1vE,EAAgBhuD,KAAKsgF,iBAAiB1K,GAC1C51E,KAAK81C,QAAQouX,UACblka,KAAK81C,QAAQW,cAAcx0C,QAE3B,GADcjC,KAAK4ja,UAAUhuV,GAEzB51E,KAAK81C,QAAQiwT,KAAK1/I,MAAa,MAAWr4J,GAC1C4nB,EAAIpwD,qBAEH,CACD,IAAIulC,EAAmB/qD,KAAK81C,QAAQgV,SAASC,iBACzCE,EAAiBjrD,KAAK81C,QAAQgV,SAASG,eACvC7qC,EAASimM,EAAK,IAAM,GACpBrmN,KAAKooD,MAAQpoD,KAAKooD,gBAAgB23W,KAClC//Z,KAAKuN,aACLvN,KAAKika,kBAAkBj2W,EAAehuD,KAAKuN,WAC3CvN,KAAKuN,UAAU2G,SAAW85C,EAC1BhuD,KAAKooD,KAAKm1E,WAAWv9H,KAAKuN,YAE1BqoE,EAAI6gC,SACJz2G,KAAK81C,QAAQgV,SAASi7S,KAAK,EAAG3lV,EAAQ,EAAG4tC,GAGzChuD,KAAK81C,QAAQgV,SAASi7S,KAAK,EAAG,EAAG3lV,EAAQ4tC,GAEzCjD,IAAqB/qD,KAAK81C,QAAQgV,SAASC,kBACxCE,IAAmBjrD,KAAK81C,QAAQgV,SAASG,gBAC5C2qB,EAAIpwD,mBAKhBi9Y,EAAoBpna,UAAUkqH,QAAU,SAAU3vC,GAC9C,KAAM51E,KAAK81C,QAAQuT,eAAiBC,GAAc05W,YAC5Chja,KAAK8ja,qBAAqBluV,IAAsB,WAAZA,EAAIv4E,KAAoC,KAAhBu4E,EAAI9tD,QAAiB,CACnF,IACI0f,OAAU,EACVk+X,EAAU9vV,EAAI9tD,QAAU8tD,EAAI9tD,QAAU8tD,EAAI+gC,MAC1Ct5G,EAAMu4E,EAAIv4E,IACVwqB,EAAU7nB,KAAK4ja,UAAUhuV,GAC7B,GAAI51E,KAAK81C,QAAQya,gBAAkBvwD,KAAK81C,QAAQ9N,SAE5C,IAAK,IADDA,EAAWhoC,KAAK81C,QAAQ9N,SACnB5pC,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAK0qC,GAAW5pC,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC/D,IAAIopB,EAAM3kB,EAAGzE,GAEb,IADAopC,EAAUxnC,KAAK81C,QAAQ9N,SAASxgB,MAChBggB,EAAQm+X,QAAQC,cAAgBp+X,EAAQm+X,QAAQtoa,OACvDqoa,IAAYl+X,EAAQm+X,QAAQtoa,KAAQA,IAAQwjZ,GAAKr5W,EAAQm+X,QAAQtoa,MAC/D2C,KAAK6ja,YAAYxma,EAAKmqB,OAClBggB,EAAQm+X,QAAQC,eAAmBhwV,EAAI2gC,SAAa3gC,EAAI6gC,WAAe5uF,GACzE2f,EAAQm+X,QAAQC,eAAiB/9Y,GAAW+tD,EAAI2gC,QAAU3gC,EAAI6gC,WAC1Dz2G,KAAK6la,cAAcr+X,EAAQm+X,QAAQC,eAAiBhwV,EAAI2gC,QACxDv2G,KAAK8la,gBAAgBt+X,EAAQm+X,QAAQC,eAAiBhwV,EAAI6gC,UAC1Dz2G,KAAK+la,eAAev+X,EAAQm+X,QAAQC,eAAiB/9Y,GAAY,CAC1E,IAAI4oC,EAAapjB,GAAY7F,EAAQipB,YACrC,GAAIA,GAAcA,GACdu1W,iBAAoBC,cACpBC,UAAW1+X,EAAQ0+X,YACnB,CAKA,GAJAtwV,EAAIpwD,iBACY,WAAZowD,EAAIv4E,KAAqB2C,KAAK8ja,qBAAqBluV,IACnDp1E,SAASosB,eAAe5sB,KAAK81C,QAAQotX,cAAc5/Z,IAAIpB,QAEvDslC,EAAQgpB,QAAS,CAIHnjB,GAAY7F,EAAQgpB,QAClCA,EAAUw1W,iBAAoBC,cAAeC,UAAW1+X,EAAQ0+X,YAGpE,WAQ5BzD,EAAoBpna,UAAU8pa,gBAAkB,SAAUtka,GACtD,IAAIqT,EAAWlU,KAAKsgF,iBAAiBz/E,GACrCqT,EAASnH,GAAK/M,KAAK81C,QAAQgV,SAASY,YACpCx3C,EAASlH,GAAKhN,KAAK81C,QAAQgV,SAASY,YACpC,IAAIy6W,EACAC,EAAmBpma,KAAK81C,QAAQ2b,eAAe20W,iBAgBnD,OAfIpma,KAAK81C,QAAQ2b,eAAekzW,gBACxBzwZ,EAASnH,EAAI/M,KAAK81C,QAAQgV,SAASC,iBAAmBq7W,EAAiB35Z,MAAQzM,KAAK81C,QAAQgV,SAASQ,cAAgB,GACrH66W,EAAiB,QAEZjyZ,EAASnH,EAAI/M,KAAK81C,QAAQgV,SAASC,iBAAmBq7W,EAAiB55Z,KAC5E25Z,EAAiB,OAEZjyZ,EAASlH,EAAIhN,KAAK81C,QAAQgV,SAASG,eAAiBm7W,EAAiBz5Z,OAC1E3M,KAAK81C,QAAQgV,SAASO,eAAiB,GACvC86W,EAAiB,SAEZjyZ,EAASlH,EAAIhN,KAAK81C,QAAQgV,SAASG,eAAiBm7W,EAAiB15Z,MAC1Ey5Z,EAAiB,QAGlBA,GAEX1D,EAAoBpna,UAAUiqa,aAAe,SAAUvvU,EAAQl1F,EAAGhB,EAAOwma,GACrE,IAAInyZ,EAAW6hF,EACf,IAAK/1F,KAAKooD,gBAAgB8yW,IAAYl7Z,KAAKooD,gBAAgB20W,IACpD/8Z,KAAKooD,gBAAgB4wW,KAAeh5Z,KAAKk4Z,SAAU,CACtDl4Z,KACKuN,UAAU2G,UAAanH,EAAG/M,KAAKooD,KAAKuwW,aAAa5rZ,EAAGC,EAAGhN,KAAKooD,KAAKuwW,aAAa3rZ,GACnF,IAAIiI,EAAMjV,KAAKsgF,iBAAiBz/E,GAG5B2L,GAFmBxM,KAAK81C,QAAQ2b,eAAe20W,iBAExC,GACPvlX,EAAQ,EACZ,OAAQ3sC,GACJ,IAAK,QACDlU,KAAKuN,UAAU2G,SAASnH,GAAK,GAC7BP,EAAO,GACP,MACJ,IAAK,OACDxM,KAAKuN,UAAU2G,SAASnH,GAAK,GAC7BP,GAAQ,GACR,MACJ,IAAK,SACDxM,KAAKuN,UAAU2G,SAASlH,GAAK,GAC7B6zC,EAAQ,GACR,MACJ,IAAK,MACD7gD,KAAKuN,UAAU2G,SAASlH,GAAK,GAC7B6zC,GAAS,GAGjB7gD,KAAKooD,KAAKy3R,UAAU7/U,KAAKuN,WACzBvN,KAAK81C,QAAQgV,SAASi7S,KAAK,GAAIv5V,GAAOq0C,EAAO5rC,KAGrDwtZ,EAAoBpna,UAAU4pa,aAAe,SAAUj3W,EAAes4W,GAClE,IAAKA,EAAa,CACd,IAAIC,EAAqBvma,KAAKgka,wBAAwB78W,IAClDnnD,KAAKgka,aAAaj+W,YAAcG,GAAgBlQ,SAC9Ch2C,KAAKgka,wBAAwBl+W,IAAc9lD,KAAKgka,aAAaj+W,YAAcC,GAAqBhQ,QACtGQ,GAAcx2C,KAAK81C,QAASywX,EAAmBvma,KAAKgka,kBAAe7oa,GACnE,IAAIwQ,EAASoiD,GAAiB/tD,KAAK81C,QAASkY,EAAehuD,KAAKgka,cAChEhka,KAAK81C,QAAQW,cAAcx0C,QAC3BjC,KAAK81C,QAAQW,cAAc5qC,QAAUF,EAAOoB,EAC5C/M,KAAK81C,QAAQW,cAAcxqC,QAAUN,EAAOqB,EAC5ChN,KAAK81C,QAAQW,cAAcmV,WzW7fvC,SAAiCrrD,EAAMu1C,GACnC,IAAIxH,EAAQ,EAiBZ,OAhBI/tC,aAAgBulD,GACZvlD,EAAKwlD,YAAcC,GAAqBhQ,QACxC1H,EAAQ/tC,EAAKwlD,YAAcC,GAAqBhQ,QAE3Cz1C,EAAKwlD,YAAcC,GAAqBkI,iBAC7C5f,EAAQwH,EAAQiQ,YAAciD,GAAmBhT,SAIjDz1C,EAAKwlD,YAAcG,GAAgBlQ,QACnC1H,EAAQ/tC,EAAKwlD,YAAcG,GAAgBlQ,QAEtCz1C,EAAKwlD,YAAcG,GAAgBgI,iBACxC5f,EAAQwH,EAAQiQ,YAAciD,GAAmBhT,SAGlD1H,EyW4eKk4X,CAAiBxma,KAAKgka,aAAchka,KAAK81C,UACzC91C,KAAK81C,QAAQW,cAAc/0C,KAAK1B,KAAK81C,QAAQ90C,WAIzDyha,EAAoBpna,UAAU2pa,aAAe,WACzChla,KAAK81C,QAAQW,cAAcx0C,SAE/Bwga,EAAoBpna,UAAUwqa,cAAgB,SAAUY,GACpD,SAAIA,EAAc7lB,GAAa8lB,MAKnCjE,EAAoBpna,UAAU0qa,eAAiB,SAAUU,GACrD,SAAIA,EAAc7lB,GAAa+lB,UAKnClE,EAAoBpna,UAAUyqa,gBAAkB,SAAUW,GACtD,SAAIA,EAAc7lB,GAAagmB,QAMnCnE,EAAoBpna,UAAUwra,SAAW,SAAUjxV,GAC/C51E,KAAK81C,QAAQgxX,sBAGjBrE,EAAoBpna,UAAU0ra,YAAc,SAAUnxV,GAClD,GAAI7sB,GAAgB/oD,KAAK81C,SAAU,CAC/B,IAAI6Y,OAAa,EACbF,EAAUzuD,KAAK81C,QAAQquX,sBAAsBnka,KAAKi+O,iBAClDlhP,EAAMiD,KAAK81C,QAAQsuX,qBAAqB31W,EAASzuD,KAAKm2D,OAAQn2D,KAAKk4Z,UACvE,GAAY,OAARn7Z,GAAgBgsD,GAAgB/oD,KAAK81C,SAGrC,GAFA6Y,EACa3uD,KAAK81C,QAAQwuX,sBAAsBvna,EAAKiD,KAAKi+O,iBACtDj+O,KAAKooD,MAAQpoD,KAAKooD,gBAAgB23W,GAAoB,CACtD,IAAI3D,GACA7/Z,OAAQQ,GAAOiD,KAAK81C,QAAS5hC,SAAUlU,KAAKi+O,gBAAiBn/N,MAAO82D,EAAI8nD,QAE5E19H,KAAKooD,KAAKywW,QAAQ74Z,KAAKuN,UAAW6uZ,GAClCp8Z,KAAK4ia,aAAc,EACnB5ia,KAAKuN,aACLvN,KAAKooD,KAAO,KACZwtB,EAAIpwD,qBAEH,CACD,IAAIkkD,EAAQ1pE,KAAK81C,QAAQmiX,eAAe+O,eAAejqa,EAAIuG,IAC3D,GAAIomE,IAAUA,EAAMu9V,MAAQv9V,EAAMlyC,WACxBx3B,KAAK81C,QAAQuT,eAAiBC,GAAc05W,UAAW,CACzD,IAAI1/Z,EAAK,GACe,mBAApBvG,EAAI4wB,MAAMA,QACVrqB,EAAKvG,EAAIuG,GAAGpG,MAAM,oBAAoB,IAE1C8C,KAAK81C,QAAQoxX,cAAcnqa,EAAKuG,IAAOqrD,aAAsBmE,GACxDnE,EAAa,GAAEzxD,MAAMH,EAAIuG,GAAK,KAAK,QAAKnI,KAK7D,IAAI42F,GACAx1F,OAAQQ,GAAOiD,KAAK81C,QAAS5hC,SAAUlU,KAAKi+O,gBAAiBn/N,MAAO82D,EAAI8nD,QAE5E19H,KAAK81C,QAAQ0zG,aAAas3P,GAAaimB,YAAah1U,KAM5D0wU,EAAoBpna,UAAU8ra,YAAc,SAAUvxV,GAClD,IACIx3C,EAEAgpY,EACAC,EACA9ma,EACAwV,EACAC,EACAsxZ,EAEAC,EACAC,EAAchna,SAASosB,eAAe5sB,KAAK81C,QAAQ90C,QAAQsC,GAAK,YAChEmka,EAAiBjna,SAASosB,eAAe5sB,KAAK81C,QAAQ90C,QAAQsC,GAAK,mBACnEmpB,EAAQ+6Y,EAAiB,MACzB15W,EAAOrhC,EAAKvvB,MAAM,QACtBqD,EAAQP,KAAK81C,QAAQwc,cAAcR,MAAM,GAAM9xD,KAAK81C,QAAQwc,cAAcR,MAAM,GAAK9xD,KAAK81C,QAAQwc,cAAcT,WAAW,KAC9G7xD,KAAKooD,gBAAgBy2W,KAC9Bt+Z,EAAOP,KAAK81C,QAAQwjB,UAAUt5D,KAAK81C,QAAQ4xX,YAAYnuW,WAEvDh5D,IAA8B,SAApBA,EAAKotB,MAAMjnB,MAAmBnG,EAAKq2D,YAAYn6D,OAAS,GAA2B,SAApB8D,EAAKotB,MAAMjnB,QACpF2ga,EAAcrna,KAAK81C,QAAQmpE,WAAW1+G,EAAKwR,QAAS/R,KAAK81C,QAAQ4xX,YAAYpka,IAE7E86B,GADAA,EAAW79B,EAAKwR,QAAQ2kB,OAAO1gB,MAAQqxZ,EAAY3wY,OAAO1gB,MAAQzV,EAAKwR,QAAQ2kB,OAAO1gB,MAAQqxZ,EAAY3wY,OAAO1gB,OArBtG,GAsBsBooB,EAtBtB,GAuBXkpY,EAAah2X,GAAgB+1X,EAAY3ia,MAAO+nB,OAAMtxB,OAAWA,EAAWijC,GAC5EgpY,EAAW9vY,OAAQkwY,EAAY9ia,MAAc,SAAExH,MAAM,MAAM,IACvD4wD,EAAKrxD,OAAS,GAA+B,KAA1BqxD,EAAKA,EAAKrxD,OAAS,KACtC6qa,EAAWvxZ,OAASuxZ,EAAWvxZ,OAASqxZ,GAG5CpxZ,EA7BW,IA4BXA,EAAQsxZ,EAAWtxZ,OA5BR,GA6B6BA,EACxCD,EA5BY,GA4BUuxZ,EAAWvxZ,OA5BrB,GA4B2CuxZ,EAAWvxZ,OAClEwxZ,EAAavna,KAAK81C,QAAQgV,SAASz9C,UACnCo6Z,EAAe/ia,MAAM8H,MAAW66Z,EAAY3wY,OAAOhD,OAAO3mB,EAAIw6Z,EAAW3/E,IAAM2/E,EAAW97W,MAASz1C,EAAQ,EAAK,IAAO,KACvHyxZ,EAAe/ia,MAAMgI,KAAU26Z,EAAY3wY,OAAOhD,OAAO1mB,EAAIu6Z,EAAW5/E,IAAM4/E,EAAW97W,MAAS11C,EAAS,EAAK,EAAK,KACrH0xZ,EAAe/ia,MAAMsR,MAAQA,EAAQ,KACrCyxZ,EAAe/ia,MAAMqR,OAASA,EAAS,KACvCyxZ,EAAY9ia,MAAM4uD,UAAYA,OAC9Bk0W,EAAY9ia,MAAM8uD,SAAWA,OAC7Bg0W,EAAY9ia,MAAMsR,MAAQA,EAAQ,KAClCwxZ,EAAY9ia,MAAMqR,OAASA,EAAS,OAM5C0sZ,EAAoBpna,UAAUssa,cAAgB,SAAUpna,EAAMm6H,GAC1D,SAAI16H,KAAKooD,gBAAgBy2W,IAAmBnkS,KACxC16H,KAAKooD,KAAO,KACR7nD,IAAWkoD,GAAkBzoD,KAAK81C,WAClC91C,KAAK81C,QAAQuW,mBAAgBlxD,EAC7B6E,KAAK81C,QAAQqjB,0BAAuBh+D,IAEpC47D,GAAwB/2D,KAAK81C,QAAQgc,MAAOvxD,EAAK+C,MAAOyzD,GAAwB/2D,KAAK81C,QAAQ+b,WAAYtxD,EAAK+C,MAO1Hm/Z,EAAoBpna,UAAUyoa,qBAAuB,SAAUluV,GAC3D,SAAKA,EAAIzuE,QAAUyuE,EAAIzuE,OAAO7D,KAAOtD,KAAK81C,QAAQ90C,QAAQsC,GAAK,aAKnEm/Z,EAAoBpna,UAAU4oa,kBAAoB,SAAU/vZ,EAAUjU,EAAM1D,GACxE0D,EAAKiU,SAAWA,EAChB,IAAInX,EACA0xD,EACClyD,GAYDkyD,EAAUzuD,KAAK81C,QAAQquX,sBAAsBnka,KAAKi+O,gBAAiB1hP,GACnEQ,EAAMiD,KAAK81C,QAAQ8xX,2BAA2Bn5W,EAASzuD,KAAKm2D,OAAQn2D,KAAKk4Z,SAAUj4Z,EAAKiU,SAAU3X,IAZ9E,SAAhByD,KAAKm2D,QAAqC,uBAAhBn2D,KAAKm2D,QAAmD,eAAhBn2D,KAAKm2D,QACvD,eAAhBn2D,KAAKm2D,QAA2C,sBAAhBn2D,KAAKm2D,QAAkD,sBAAhBn2D,KAAKm2D,QAC5D,uBAAhBn2D,KAAKm2D,QAAmD,WAAhBn2D,KAAKm2D,SAA0D,IAAnCn2D,KAAKm2D,OAAO53D,QAAQ,UACxFxB,EAAMiD,KAAK81C,QAAQwc,eAGnB7D,EAAUzuD,KAAK81C,QAAQquX,sBAAsBnka,KAAKi+O,iBAClDlhP,EAAMiD,KAAK81C,QAAQsuX,qBAAqB31W,EAASzuD,KAAKm2D,OAAQn2D,KAAKk4Z,WAO3E,IAAInmZ,EAcJ,OAbIhV,IACAgV,EAAU/R,KAAK81C,QAAQwuX,sBAAsBvna,EAAKiD,KAAKi+O,kBAEtD1hP,GAKD0D,EAAKkH,OAASpK,EACdkD,EAAKs3C,cAAgBxlC,IALrB9R,EAAK1D,OAASQ,EACdkD,EAAK+2C,cAAgBjlC,GAMzB9R,EAAKkxE,aAAenxE,KAAK2mW,eACzB1mW,EAAKg/Z,YAAcj/Z,KAAK0mW,cACjBzmW,GAGXwia,EAAoBpna,UAAUwsa,UAAY,WACtC7na,KAAKm2D,OAAS,SACdn2D,KAAKgka,aAAe,KACpBhka,KAAK8ka,UAAY,KACjB9ka,KAAKooD,KAAOpoD,KAAK81C,QAAQ0uX,QAAQxka,KAAKm2D,QACtCn2D,KAAKwja,gBAGTf,EAAoBpna,UAAUmpa,QAAU,SAAUruW,GAC9C,OAAQA,GACJ,IAAK,SACD,OAAO,IAAI6iW,GAAWh5Z,KAAKi4Z,gBAAgB,GAC/C,IAAK,OACD,OAAO,IAAIiD,GAASl7Z,KAAKi4Z,gBAC7B,IAAK,SACD,OAAO,IAAIuE,GAAWx8Z,KAAKi4Z,gBAC/B,IAAK,kBACD,OAAO,IAAI4H,GAAW7/Z,KAAKi4Z,gBAC/B,IAAK,YACD,OAAO,IAAI6H,GAAU9/Z,KAAKi4Z,gBAC9B,IAAK,kBACL,IAAK,kBACL,IAAK,kBACL,IAAK,kBACL,IAAK,cACL,IAAK,cACL,IAAK,aACL,IAAK,aACD,OAAO,IAAI8E,GAAW/8Z,KAAKi4Z,eAAgB9hW,GAC/C,IAAK,qBACL,IAAK,qBACL,IAAK,oBACL,IAAK,oBACD,OAAO,IAAIqjW,GAAYx5Z,KAAKi4Z,eAAgB9hW,GAChD,IAAK,aACL,IAAK,aACD,OAAO,IAAI8pW,GAAiBjga,KAAKi4Z,eAAgB9hW,GACrD,IAAK,OACD,IACIzvD,EAAO0lD,GAAepsD,KAAK81C,QAAQuW,eACvC,GAAa,SAAT3lD,GAA6D,SAA1C1G,KAAK81C,QAAQuW,cAAc1+B,MAAMjnB,KACpD,OAAO,IAAIm4Z,GAAgB7+Z,KAAKi4Z,gBAE/B,GAAa,SAATvxZ,GAA+D,YAA5C1G,KAAK81C,QAAQuW,cAAc1+B,MAAW,QAC5D3tB,KAAK81C,QAAQuW,cAAc1+B,MAAY,OACzC,OAAO,IAAIoyY,GAAmB//Z,KAAKi4Z,gBAElC,GAAa,SAATvxZ,GACK,SAATA,GAA+D,YAA5C1G,KAAK81C,QAAQuW,cAAc1+B,MAAW,OACrD3tB,KAAK81C,QAAQuW,cAAc1+B,MAAY,OAC5C,OAAO,IAAI6wY,GAAgBx+Z,KAAKi4Z,eAAgBj4Z,KAAK81C,QAAQuW,eAE5D,GAAa,cAAT3lD,EACL,OAAO,IAAI+yZ,GAAqBz5Z,KAAKi4Z,eAAgB,qBAAsBj4Z,KAAK81C,QAAQuW,eAE5F,MACJ,IAAK,MACD,OAAO,IAAI2yW,GAAYh/Z,KAAKi4Z,gBAAgB,GAChD,IAAK,YACD,OAAO,IAAI+G,GAAYh/Z,KAAKi4Z,gBAAgB,GAChD,IAAK,WACD,OAAO,IAAIiD,GAASl7Z,KAAKi4Z,eAAgB,QAC7C,IAAK,WACD,OAAO,IAAIwB,GAAqBz5Z,KAAKi4Z,eAAgB,qBAAsBj4Z,KAAK81C,QAAQuW,eAEhG,OAAO,MAGXo2W,EAAoBpna,UAAUm+D,UAAY,SAAUrD,GAChD,OAAOqD,GAAUrD,EAAQn2D,KAAK81C,QAAQwc,cAAczlB,cAIxD41X,EAAoBpna,UAAUipa,sBAAwB,SAAUvna,EAAKmX,GACjE,OAAOlU,KAAK8ia,aAAagF,6BAA6B/qa,EAAKmX,IAG/DuuZ,EAAoBpna,UAAU8oa,sBAAwB,SAAUjwZ,EAAU3X,GACtE,OAAOyD,KAAK8ia,aAAaqB,sBAAsBjwZ,EAAUlU,KAAK81C,QAASv5C,IAG3Ekma,EAAoBpna,UAAU+oa,qBAAuB,SAAU31W,EAAS0H,EAAQ+hW,GAC5E,OAAOl4Z,KAAK8ia,aAAasB,qBAAqBpka,KAAK81C,QAAS2Y,EAAS0H,EAAQ+hW,EAAUl4Z,KAAKi+O,kBAGhGwkL,EAAoBpna,UAAU0sa,qBAAuB,SAAUt5W,EAAS0H,EAAQ+hW,EAAUhkZ,EAAU3X,GAChG,OAAOyD,KAAK8ia,aAAasB,qBAAqBpka,KAAK81C,QAAS2Y,EAAS0H,EAAQ+hW,EAAUhkZ,EAAU3X,IAGrGkma,EAAoBpna,UAAUkpa,mBAAqB,SAAUxna,EAAKgV,EAASmC,EAAU/M,GACjF,OAAOqwD,GAAmBz6D,EAAKgV,EAAS/R,KAAKi+O,gBAAiBj+O,KAAK81C,QAAS91C,KAAK2mW,eAAgB3mW,KAAK0mW,cAAev/V,IAElHs7Z,KAIPM,GAA8B,WAC9B,SAASA,KAsQT,OAnQAA,EAAa1na,UAAU8oa,sBAAwB,SAAUt5X,EAAIiL,EAASv5C,EAAQyra,GAE1E,IAAIC,KACA1ra,GAAUA,aAAkB8pD,IACxB9pD,EAAOu1D,MAAMr1D,OAASF,EAAOs1D,WAAWp1D,SAAW,IACnDF,EAAUA,EAAOu1D,MAAM,IAAMv1D,EAAOs1D,WAAW,IAUvD,IAAK,IAPDp3C,EACAic,EACAr2B,EACAuqC,EAGAs9X,EADAC,KAEK/pa,EAAK,EAAGgqa,EAHFtyX,EAAQuyX,cAAcC,YAAY,IAAIpyY,GAAK2U,EAAG99B,EAAI,GAAI89B,EAAG79B,EAAI,GAAI,IAAK,MAG7C5O,EAAKgqa,EAAW3ra,OAAQ2B,IAAM,CAClE,IACI01B,EAAQ+W,EAEZ,GADAnU,GAFI35B,EAAMqra,EAAWhqa,IAER2T,QAAQ6yC,aAChB7nD,IAAQR,GAAUu5C,EAAQqjB,gCAAgCrT,KAC1D/oD,aAAe+oD,GAAa/oD,IAAQ+4C,EAAQqjB,qBAA+Bp8D,EAAIgV,QAAQylB,QAAS,CAEjG,IADIkyC,EAAQ5zB,EAAQmiX,eAAe+O,eAAejqa,EAAIuG,OACxComE,EAAMu9V,MAAQv9V,EAAMlyC,QAAS,CAEvC,GADA0wY,EAAcC,EAAcz+V,EAAMjH,QAAU0lW,EAAcz+V,EAAMjH,YAC5D1lE,EAAI8vC,YAAa,CACjBpyB,EAAY1d,EAAIgV,QAEhBy5B,GADAZ,EAASL,OACc9vB,EAAUoyB,YAAcpyB,EAAUqyB,iBAAkB/vC,EAAI8O,QAAS9O,EAAIkP,SAC5F6nB,EAAQ6W,GAAuBC,EAAQC,GACvCnU,EAASjc,EAAU8tB,QACnB,IAAK,IAAI1lC,EAAK,EAAGoB,EAAKwW,EAAUL,SAAUvX,EAAKoB,EAAGxH,OAAQoG,IACtDxC,EAAQ4D,EAAGpB,GACX6zB,EAAOouB,UAAUzkD,EAAMkoC,SAG/B,KAAKhsC,IAAwC,IAA7Bu8D,GAAWhjB,EAAS/4C,KAC5BupD,GAAuBvpD,KAClBA,aAAe+oD,GAAa6G,GAAqB5vD,EAAK8tC,GAAMnU,EAAOoiB,cAAchlB,IAAQ,CAC1F,IAAIslC,EAAWr8D,aAAe+oD,GAAa/oD,EAAIkwD,YAAc,EAAI,EAEvDjtD,KAAKska,sBAAsBvna,EAAK8tC,EAAIuuB,KAEtCr8D,aAAe+oD,IAAahQ,EAAQi3W,aACpChwZ,EAAM+4C,EAAQi3W,WAAWwb,uBAAuBxra,EAAK+4C,IAEzDwhB,GAAav6D,EAAK,SAAUmra,OAQxD,IAAK,IAAIz9Z,EAAK,EAAG8mU,EAAKz7R,EAAQ4b,OAAQjnD,EAAK8mU,EAAG90U,OAAQgO,IAGlD,IAAK,IAFDi/D,EAAQ6nQ,EAAG9mU,GAEN+mU,EAAK,EAAGg3F,EADjBP,EAAeA,EAAa1tZ,OAAO4tZ,EAAcz+V,EAAMjH,aACP+uQ,EAAKg3F,EAAe/ra,OAAQ+0U,IAAM,CAC9E,IAAIz0U,EAEJ,GAAuB,UAFnBA,EAAMyra,EAAeh3F,IAEjB7jT,MAAMjnB,MAAmB3J,EAAI0vZ,cAAgB32W,EAAoB,aAAEsS,gBAAgB8yW,KACtFplX,EAAoB,aAAEsS,gBAAgB8yW,IAAajzW,GAAalrD,IAAO,EACpEkV,EAAQg2Z,EAAa1pa,QAAQu3C,EAAQwjB,UAAUv8D,EAAI0vZ,cAC1C,GACTwb,EAAa5/Y,OAAOpW,EAAO,IAK3C,IAAK,IAAI9V,EAAI,EAAGA,EAAI8ra,EAAaxra,OAAQN,IAAK,CAC1C,IAAI+1F,EAAYp8C,EAAQwjB,UAAU2uW,EAAa9ra,GAAGo9D,UAClD,GAAI24B,EAEA,IAAK,IADDu2U,EAAczoa,KAAKska,sBAAsBpyU,EAAWrnD,GAC/CtnB,EAAI,EAAGA,EAAI2uE,EAAUp7B,MAAMr6D,OAAQ8mB,IACxC,GAAIklZ,EAAYnla,GAAGqM,MAAM,IAAMuiF,EAAUp7B,MAAMvzC,GAAGjgB,GAAK,KAAM,CACzD,IAAIg1C,EAAO45C,EAAUp7B,MAAMvzC,GAC3B,GAAIomC,GAAQrR,IAAkBkR,GAAQlR,GAClC,OAAO2vX,EAKvB,KAAO/1U,GAAW,CACd,IAAIjgF,EACJ,IAAe,KADXA,EAAQg2Z,EAAa1pa,QAAQ2zF,IAK7B,MAHA+1U,EAAa5/Y,OAAOpW,EAAO,GAK/BigF,EAAYp8C,EAAQwjB,UAAU44B,EAAU34B,WAGhD,OAAO0uW,GAGXlF,EAAa1na,UAAUokD,SAAW,SAAUwoX,EAAcnyX,EAASqgB,GAC/D,IACI51D,EADAs/C,EAAY/J,EAAQwc,cAAcT,WAAW,GASjD,QAPAtxD,EAAkB,uBAAX41D,EAAkCrgB,EAAQwjB,UAAUzZ,EAAUmrW,UACjEzqZ,EAAOu1C,EAAQwjB,UAAUzZ,EAAUvI,aACzB/2C,EAAKksZ,WAAcwb,EAAaxb,YAAalsZ,EAAKksZ,YAAcwb,EAAaxb,WACnFlsZ,EAAKksZ,YAAcwb,EAAaxb,YAChCwb,EAAe,MAGhBA,GAIXlF,EAAa1na,UAAU+oa,qBAAuB,SAAUtuX,EAAS2Y,EAAS0H,EAAQ+hW,EAAUhkZ,EAAU3X,GAIlG,IACI0ra,EAAe,KACnB,GAAuB,IAAnBx5W,EAAQhyD,OAMR,GALIF,GAAUA,aAAkB8pD,IACxB9pD,EAAOu1D,MAAMr1D,OAASF,EAAOs1D,WAAWp1D,SAAW,IACnDF,EAAUA,EAAOu1D,MAAM,IAAMv1D,EAAOs1D,WAAW,IAGvC,uBAAXsE,GAAmC55D,GAAqB,aAAX45D,IAC5CxN,GAAY7S,IAAY2S,GAAkB3S,KAAay6W,GAAcz6W,EAAQuW,iBAAmBvG,IAElG,IAAK,IADDjG,EAAY/J,EAAQwc,cAAcT,WAAW,GACxC11D,EAAIsyD,EAAQhyD,OAAS,EAAGN,GAAK,EAAGA,IACrC,GAAIsyD,EAAQtyD,aAAcgrD,IAAQE,GAAcoH,EAAQtyD,IAKpD,OAJA8ra,EAAex5W,EAAQtyD,GACnB0jD,IACAooX,EAAejoa,KAAKy/C,SAASwoX,EAAcnyX,EAASqgB,IAEjD8xW,OAId,GAAe,uBAAX9xW,GAAmC55D,GACxC,IAASJ,EAAIsyD,EAAQhyD,OAAS,EAAGN,GAAK,EAAGA,IACrC,GAAIsyD,EAAQtyD,aAAcgrD,IAAQD,GAAauH,EAAQtyD,IAGnD,OAFA8ra,EAAex5W,EAAQtyD,GACvB8ra,EAAejoa,KAAKy/C,SAASwoX,EAAcnyX,EAASqgB,OAK3D,CAAA,GAAI55D,IAAsB,SAAX45D,GAAsBrgB,EAAoB,aAAEsS,gBAAgB8yW,IAAY,CAEnF,IADDjpZ,EAAQ,EACZ,IAAS9V,EAAI,EAAGA,EAAIsyD,EAAQhyD,OAAQN,IAAK,CACrC,IAAI4xB,EAAO0gC,EAAQtyD,GACfI,IAAWwxB,IAASA,aAAgB+3B,KACnC5xC,GAAY6Z,EAAKhc,QAAQ2kB,OAAOoiB,cAAc5kC,KAC3C+zC,GAAal6B,KACRk6Y,GAKDA,EAAeh2Z,GAAS8b,EAAK00C,OAASwlW,EAAel6Y,EACrD9b,EAAQ5F,KAAKC,IAAI2F,EAAO8b,EAAK00C,SAJ7BxwD,GADAg2Z,EAAel6Y,GACM00C,QAiBrC,OARIwlW,GAA4C,SAA5BA,EAAat6Y,MAAMjnB,OAE/Buha,EADAnyX,EAAQwc,cAAcR,MAAMr1D,OAAS,GAAmD,SAA9Cq5C,EAAQwc,cAAcR,MAAM,GAAGnkC,MAAMjnB,KAChEuha,EAGA,MAGhBA,EAEN,GAAe,WAAX9xW,GAAuBrgB,EAAoB,aAAEsS,KAAM,CACxD,IAASjsD,EAAIsyD,EAAQhyD,OAAS,EAAGN,GAAK,EAAGA,IACrC,GAAIsyD,EAAQtyD,aAAc2pD,IAClB2I,EAAQtyD,EAAI,aAAcgrD,IAAQsH,EAAQtyD,EAAI,GAAG26D,MAAO,CAExD,IADI2xW,EAAczoa,KAAK0oa,kBAAkBj6W,EAAQtyD,EAAI,GAAG4V,QAASmC,OAAU/Y,MACtDsta,EAAYnla,GAAGqM,MAAM,yBAA2B84Z,EAAYnla,GAAGqM,MAAM,wBACtF,OAAO8+C,EAAQtyD,EAAI,GAEvB,IAAK,IAAIonB,EAAI,EAAGA,EAAIkrC,EAAQtyD,EAAI,GAAG26D,MAAMr6D,OAAQ8mB,IAC7C,GAAIklZ,GAAeA,EAAYnla,GAAGqM,MAAM,IAAM8+C,EAAQtyD,EAAI,GAAG26D,MAAMvzC,GAAGjgB,GAAK,MACnEkmD,GAAQiF,EAAQtyD,EAAI,GAAG26D,MAAMvzC,IAC7B,OAAOkrC,EAAQtyD,EAAI,GAQ3C,IADA8ra,EAAex5W,EAAQA,EAAQhyD,OAAS,IACvB88D,SAGb,IAFA,IAAIx8D,EAAMkra,EACNz4R,EAAW12E,GAAWhjB,EAAS/4C,GAC5BA,KACC+7D,GAAWhjB,EAAS/4C,IAASyyI,IAGjCy4R,EAAelra,EACfA,EAAM+4C,EAAQwjB,UAAUv8D,EAAIw8D,eAInC,GAAe,QAAXpD,GAA+B,oBAAXA,GACzB,IAASh6D,EAAIsyD,EAAQhyD,OAAS,EAAGN,GAAK,EAAGA,IACrC,GAAIsyD,EAAQtyD,aAAcgrD,GAAM,CAC5B,IAAIshX,EAAczoa,KAAK0oa,kBAAkBj6W,EAAQtyD,GAAG4V,QAASmC,OAAU/Y,GACvE,GAAgB,oBAAXg7D,GAA2C,QAAXA,GAAuBsyW,IAAgBA,EAAYnla,GAAGqM,MAAM,yBAA2B84Z,EAAYnla,GAAGqM,MAAM,wBAC7I,OAAO8+C,EAAQtyD,SAM3B8ra,EAAex5W,EAAQA,EAAQhyD,OAAS,GAGhD,OAAOwra,GAIXlF,EAAa1na,UAAUysa,6BAA+B,SAAU/qa,EAAKmX,GAEjE,OAAInX,aAAespD,GACU,IAArBtpD,EAAI+0D,MAAMr1D,QAAkBM,EAAI80D,YAAe90D,EAAI80D,WAAWp1D,OAGvDM,EAAI+0D,QAAS/0D,EAAI+0D,MAAMr1D,QAAqC,IAA1BM,EAAI80D,WAAWp1D,OAOzD,KANQuD,KAAKska,sBAAsBvna,EAAI80D,WAAW,GAAI39C,GAH9ClU,KAAKska,sBAAsBvna,EAAI+0D,MAAM,GAAI59C,GAO7ClU,KAAKska,sBAAsBvna,EAAKmX,IAI/C6uZ,EAAa1na,UAAUipa,sBAAwB,SAAUvna,EAAKmX,EAAUklD,GACpE,OAAOp5D,KAAK0oa,kBAAkB3ra,EAAIgV,QAASmC,EAAUklD,IAGzD2pW,EAAa1na,UAAUqta,kBAAoB,SAAUjuZ,EAAWvG,EAAUklD,GACtE,IAAK,IAAIj9D,EAAIse,EAAUL,SAAS3d,OAAS,EAAGN,GAAK,EAAGA,IAAK,CACrD,IAAI6E,EAAUyZ,EAAUL,SAASje,GACjC,GAAI6E,GAAWA,EAAQ4jD,YAAY9L,cAAc5kC,GAAW,CACxD,GAAIlT,aAAmBo2D,GAAW,CAC9B,IAAIjwD,EAASnH,KAAK0oa,kBAAkB1na,EAASkT,GAC7C,GAAI/M,EACA,OAAOA,EAGf,GAAInG,EAAQ01B,OAAOoiB,cAAc5kC,GAC7B,OAAOlT,GAInB,OAAIyZ,EAAUic,OAAOoiB,cAAc5kC,EAAUklD,IAAqC,SAAzB3+C,EAAU/V,MAAMk5B,KAC9DnjB,EAEJ,MAEJsoZ,KC3qCPz4U,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAM5D+rY,GAAuB,SAAUx9U,GAGjC,SAASw9U,EAAMroa,EAAQ+Q,EAAU5K,EAAchI,GAC3C,IAAIsB,EAAQorF,EAAO7pF,KAAKtB,KAAMM,EAAQ+Q,EAAU5K,EAAchI,IAAYuB,KAM1E,OAJAD,EAAM6oa,cAAgB,EAEtB7oa,EAAM8oa,eACN9oa,EAAM0uD,WACC1uD,EAoBX,OA7BAuqF,GAAUq+U,EAAOx9U,GAWjBN,IACI3jF,EAAS,KACVyha,EAAMtta,UAAW,UAAM,GAC1BwvF,IACI3jF,GAAS,IACVyha,EAAMtta,UAAW,eAAW,GAC/BwvF,IACI3jF,GAAS,IACVyha,EAAMtta,UAAW,YAAQ,GAC5BwvF,IACI3jF,KACDyha,EAAMtta,UAAW,eAAW,GAC/BwvF,IACI3jF,KACDyha,EAAMtta,UAAW,eAAW,GAC/BwvF,IACI3jF,GAAU,IACXyha,EAAMtta,UAAW,cAAU,GACvBsta,GACT3pW,ICvBE8pW,GAAgC,WAChC,SAASA,EAAehzX,GACpB91C,KAAK+oa,iBACL/oa,KAAKgpa,mBACLhpa,KAAKipa,gBACLjpa,KAAKs4Z,cACLt4Z,KAAKkpa,eACLlpa,KAAK81C,QAAUA,EAwkFnB,OAtkFAx3C,OAAOuJ,eAAeiha,EAAezta,UAAW,kBAC5CqM,IAAK,WACD,OAAO1H,KAAK81C,QAAQ6nX,gBAExBh2Z,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeiha,EAAezta,UAAW,uBAC5CqM,IAAK,WACD,OAAO1H,KAAK81C,QAAQqzX,qBAExBxha,YAAY,EACZC,cAAc,IAGlBkha,EAAezta,UAAUu9Z,iBAAmB,SAAUZ,GAClDh4Z,KAAKsuC,OAAUttC,QAAShB,KAAK81C,QAAQwc,cAAe82W,OAAQ,MACxDpR,GACAh4Z,KAAK81C,QAAQma,uBAAsB,GAEvCld,GAAgB/yC,KAAK81C,QAAQ90C,QAAQsC,IAAIoB,MAAM2ka,cAAgB,QAGnEP,EAAezta,UAAUy9Z,eAAiB,SAAUd,GAChDh4Z,KAAKsuC,MAAQ,KACT0pX,GACAh4Z,KAAK81C,QAAQma,uBAAsB,GAEvCld,GAAgB/yC,KAAK81C,QAAQ90C,QAAQsC,IAAIoB,MAAM2ka,cAAgB,OAKnEP,EAAezta,UAAUq2B,YAAc,SAAUnxB,EAAM2T,EAAUkmB,EAASkvY,EAAUjR,GAChF,IAAIt4Z,EAAQC,KACRq4Z,IACAr4Z,KAAK81C,QAAQW,cAAcviC,SAAW,eACtClU,KAAK81C,QAAQW,cAAcE,WAAcj1C,MAAQ7B,MAAO,EAAGqL,SAAU,IACrElL,KAAK81C,QAAQjkB,QAAQ08B,aAA4B,gBAAb+6W,EAA6B,QAAU,SAC3Etpa,KAAK81C,QAAQW,cAAc83E,UAAY,EACvCvuH,KAAK81C,QAAQW,cAAcs4E,WAAa,GAE5C/uH,KAAK81C,QAAQW,cAAcrc,QAAUA,EACrC,IAAIk0B,EAAgBP,GAAiB/tD,KAAK81C,SAAW/oC,EAAGmH,EAASnH,EAAGC,EAAGkH,EAASlH,GAAKzM,GACrFP,KAAK81C,QAAQW,cAAc5qC,QAAUyiD,EAAcvhD,GAAkB,gBAAbu8Z,EAA6B,GAAK,GAC1Ftpa,KAAK81C,QAAQW,cAAcxqC,QAAUqiD,EAActhD,EAAI,GACvDhN,KAAK81C,QAAQW,cAAcmV,WACvBysW,GACAl4Z,WAAW,WACPJ,EAAM+1C,QAAQW,cAAc/0C,KAAK3B,EAAM+1C,QAAQ90C,UAChD,IAMX8na,EAAezta,UAAUwoI,aAAe,WACpC7jI,KAAK81C,QAAQW,cAAcx0C,SAK/B6ma,EAAezta,UAAU4/Z,wBAA0B,WAC/C,SAAIj7Z,KAAK81C,QAAQwc,cAAcvM,YAAcsQ,GAAoBkzW,UAUrET,EAAezta,UAAUw+Z,eAAiB,WACtC75Z,KAAK81C,QAAQ+jX,kBAKjBiP,EAAezta,UAAUmuJ,aAAe,SAAUltJ,EAAO2D,GACrD,GAAI3D,IAAUwkZ,GAAa7tS,MAAQ32G,IAAUwkZ,GAAap5R,gBACtDprH,IAAUwkZ,GAAa0oB,iBAAkB,CACzC,GAAIxpa,KAAK81C,QAAQ6hB,cACb,OAKJ,GAHIr7D,IAAUwkZ,GAAa7tS,OACvBhzG,EAAK1D,OAASyD,KAAK81C,SAEnB91C,KAAK81C,QAAQqjB,qBACb,OAGRn5D,KAAK81C,QAAQ0zG,aAAaltJ,EAAO2D,IAKrC6oa,EAAezta,UAAU2ga,gBAAkB,SAAU/7Z,EAAMg+O,GACvD,GAAIj+O,KAAK81C,QAAQ6hB,cAAe,CAC5B,IAAI8xW,GACAzoa,QAASf,EAAK1D,OAAQ4K,OAAQlH,EAAKkH,OAAQ6mD,cAAeiwL,EAAiBnoM,QAAS91C,KAAK81C,SAE7F91C,KAAKwpJ,aAAas3P,GAAa4oB,SAAUD,KAMjDX,EAAezta,UAAU0/Z,WAAa,SAAUh+Z,EAAKyiD,GACjD,IAGIK,EAHA0nC,KACAD,KAUJ,GAPIvqF,aAAespD,GAEfxG,EADgB9iD,EACU80D,WAAW,GAEhC90D,aAAe+oD,IAAa9lD,KAAK81C,QAAQqjB,uBAC9CtZ,EAAY7/C,KAAK81C,QAAQqjB,sBAEzBp8D,GAAO8iD,IAAcoY,GAAoBj4D,KAAK81C,UAAY91C,KAAK81C,QAAQqjB,sBACvE,IAAI3Z,GAA0B,uBAAbA,GAAkD,uBAAbA,GAejD,GAAkB,eAAbA,GAA0C,eAAbA,IAA+BK,EAAUvI,UAAYuI,EAAUmrW,UAAW,CAC7GzjU,GACIjwC,SAAUuI,EAAUvI,SAAU4hB,aAAcrZ,EAAUqZ,aACtD8xV,SAAUnrW,EAAUmrW,SAAUC,aAAcprW,EAAUorW,cAE1DprW,EAAUvI,SAAW,GACrBuI,EAAUqZ,aAAe,GACzBrZ,EAAUmrW,SAAW,GACrBnrW,EAAUorW,aAAe,GAKzB,IAAIl5T,GACAlyC,UAAWA,EAAW72C,SAAUu+E,EAChCjgF,SANJggF,GACIhwC,SAAUuI,EAAUvI,SAAU4hB,aAAcrZ,EAAUqZ,aACtD8xV,SAAUnrW,EAAUmrW,SAAUC,aAAcprW,EAAUorW,cAIhCpyX,QAAQ,EAAOyV,MAAO,WAAYq7X,aAAcnqX,GAE1Ex/C,KAAKwpJ,aAAas3P,GAAa0oB,iBAAkBz3U,GAC7CA,EAAIl5D,QACJgnB,EAAUvI,SAAWiwC,EAAWjwC,SAChCuI,EAAUqZ,aAAequB,EAAWruB,aACpCrZ,EAAUmrW,SAAWzjU,EAAWyjU,SAChCnrW,EAAUorW,aAAe1jU,EAAW0jU,eAGpCjrZ,KAAK81C,QAAQ8zX,wBAAwB/pX,EAAW0nC,EAAYD,GAC5DtnF,KAAK81C,QAAQ+zX,oBAAoBhqX,GACjCkyC,GACIlyC,UAAWA,EAAW72C,SAAUu+E,EAChCjgF,SAAUggF,EAAYzuD,QAAQ,EAAOyV,MAAO,UAAWq7X,aAAcnqX,GAEzEx/C,KAAKwpJ,aAAas3P,GAAa0oB,iBAAkBz3U,SA9CiC,CACtF,IAAI+3U,EAAyB,uBAAbtqX,EAAoC,WAAa,WAC7DuqX,EAAyB,uBAAbvqX,EAAoC,eAAiB,eACjEK,EAAUiqX,KACVviV,EAAWuiV,GAAajqX,EAAUiqX,GAClCjqX,EAAUiqX,GAAa,GACvBxiV,EAAWwiV,GAAajqX,EAAUiqX,IAC9BjqX,EAAUqZ,cAAgBrZ,EAAUorW,gBACpC1jU,EAAWwiV,GAAalqX,EAAUkqX,GAClClqX,EAAUkqX,GAAa,GACvBziV,EAAWyiV,GAAalqX,EAAUkqX,IAEtC/pa,KAAKgqa,sBAAsBnqX,EAAW0nC,EAAYD,EAAY9nC,MAuC9EspX,EAAezta,UAAU2ua,sBAAwB,SAAUnqX,EAAW0nC,EAAYD,EAAY9nC,GAC1F,IAAIsqX,EAAyB,uBAAbtqX,EAAoC,WAAa,WAC7DuqX,EAAyB,uBAAbvqX,EAAoC,eAAiB,eACjEuyC,GACAlyC,UAAWA,EAAW72C,UAAYiha,OAAQ1iV,EAAWuiV,GAAYI,OAAQ3iV,EAAWwiV,IACpFzia,UAAY2ia,OAAQ3iV,EAAWwiV,GAAYI,OAAQ5iV,EAAWyiV,IAC9DlxY,QAAQ,EAAOyV,MAAO,WAAYq7X,aAAcnqX,GAEpDx/C,KAAKwpJ,aAAas3P,GAAa0oB,iBAAkBz3U,GAC7CA,EAAIl5D,QACJgnB,EAAUiqX,GAAaviV,EAAWuiV,GAClCjqX,EAAUkqX,GAAaxiV,EAAWwiV,GAClCziV,EAAaC,IAGbvnF,KAAK81C,QAAQ8zX,wBAAwB/pX,EAAW0nC,EAAYD,GAC5DtnF,KAAK81C,QAAQ+zX,oBAAoBhqX,GACjCkyC,GACIlyC,UAAWA,EAAW72C,UAAYiha,OAAQ1iV,EAAWuiV,GAAYI,OAAQ3iV,EAAWwiV,IACpFzia,UAAY2ia,OAAQ3iV,EAAWwiV,GAAYI,OAAQ5iV,EAAWyiV,IAC9DlxY,QAAQ,EAAOyV,MAAO,UAAWq7X,aAAcnqX,GAEnDx/C,KAAKwpJ,aAAas3P,GAAa0oB,iBAAkBz3U,KAMzD+2U,EAAezta,UAAUi/Z,WAAa,SAAUt5Z,EAASmpa,EAAY5ta,GACjE,GACI4ta,aAAsBhjX,GAAM,CAC5B,GAAInmD,GAAWA,EAAQsC,KAAO6ma,EAAW7ma,GAAK,WAC1C,OAAO6ma,EAEX,GAAI5ta,GAAoC,SAA1B4ta,EAAWx8Y,MAAMjnB,MAA8C,aAA3Byja,EAAWx8Y,MAAMA,OACb,gBAA9Cw8Y,EAAWx8Y,MAAMu/X,SAASD,WAAWvmZ,KAAwB,CAC7D,IAAI0ja,EAAcD,EAAWx8Y,MAAMu/X,SAASD,WAAWmd,YACvD,GAAIA,EAAYxuM,QAAQpkM,SAA8D,IAAnDx2B,EAAQsC,GAAG/E,QAAQ4ra,EAAW7ma,GAAK,YAClE,OAAO8ma,EAAYxuM,QAEvB,GAAIwuM,EAAYvxY,OAAOrB,SAA6D,IAAlDx2B,EAAQsC,GAAG/E,QAAQ4ra,EAAW7ma,GAAK,WACjE,OAAO8ma,EAAYvxY,OAEvB,GAAIuxY,EAAYC,QAAQ7yY,SAA8D,IAAnDx2B,EAAQsC,GAAG/E,QAAQ4ra,EAAW7ma,GAAK,YAClE,OAAO8ma,EAAYC,QAI/B,GAAIrpa,aAAmB0gD,GACnB,IAAK,IAAIvlD,EAAI,EAAGA,EAAIgua,EAAWrzW,MAAMr6D,OAAQN,IAAK,CAC9C,IAAIm8C,EAAO6xX,EAAWrzW,MAAM36D,GAC5B,GAAI6E,EAAQsC,KAAO6ma,EAAW7ma,GAAK,IAAMg1C,EAAKh1C,GAC1C,OAAOg1C,GAKvB,OAAO6xX,GAKXrB,EAAezta,UAAUy/Z,cAAgB,SAAUt7W,EAAUv/C,EAAM06Z,EAAcC,GAC7E,IACII,EACA/6Z,EAAK1D,kBAAkB8pD,GAEvB20W,EADW/6Z,EAAK1D,OACGs1D,WAAW,GAEzB5xD,EAAK1D,kBAAkBupD,IAAa9lD,KAAK81C,QAAQqjB,uBACtD6hW,EAAUh7Z,KAAK81C,QAAQqjB,sBAERn5D,KAAKs6Z,WAAWr6Z,EAAKs3C,cAAet3C,EAAKkH,OAAqB,uBAAbq4C,GAApE,IAEI8qX,EAAuB,uBAAb9qX,EAAoC,eAAiB,eACnE,OAAIw7W,EAFuB,uBAAbx7W,EAAoC,WAAa,cAEtCo7W,GAAgBI,EAAQsP,KAAa3P,GAQlEmO,EAAezta,UAAU2/Z,QAAU,SAAUx7W,EAAUv/C,GACnD,IAEIsqa,EACAC,EAEA3qX,EALAynC,KACAC,KAKAtnF,EAAK1D,kBAAkB8pD,GAEvBxG,EADgB5/C,EAAK1D,OACKs1D,WAAW,GAEhC5xD,EAAK1D,kBAAkBupD,IAAa9lD,KAAK81C,QAAQqjB,uBACtDtZ,EAAY7/C,KAAK81C,QAAQqjB,sBAE7B,IAAIhyD,EAASnH,KAAKs6Z,WAAWr6Z,EAAKs3C,cAAet3C,EAAKkH,OAAqB,uBAAbq4C,GAC1DsqX,EAAyB,uBAAbtqX,EAAoC,WAAa,WAC7DuqX,EAAyB,uBAAbvqX,EAAoC,eAAiB,eACrE,GAAIr4C,aAAkBggD,GAClBogC,EAAWuiV,GAAajqX,EAAUiqX,GAClCjqX,EAAUiqX,GAAa3ia,EAAO7D,GAC9BgkF,EAAWwiV,GAAajqX,EAAUiqX,GAClCviV,EAAWwiV,GAAalqX,EAAUkqX,GAClC/pa,KAAKgqa,sBAAsBnqX,EAAW0nC,EAAYD,EAAY9nC,OAE7D,CACD+qX,EAAY1qX,EAAUiqX,GACtBU,EAAY3qX,EAAUkqX,GACtBlqX,EAAUkqX,GAAa5ia,EAAO7D,GAC9Bu8C,EAAUiqX,GAAa7pa,EAAKkH,OAAO7D,GACnCgkF,EAAWwiV,GAAajqX,EAAUiqX,GAClCxiV,EAAWyiV,GAAalqX,EAAUkqX,GAClC,IAAIh4U,GACAlyC,UAAWA,EAAW72C,UAAYiha,OAAQM,EAAWL,OAAQM,GAC7Dlja,UAAY2ia,OAAQ3iV,EAAWwiV,GAAYI,OAAQ5iV,EAAWyiV,IAC9DlxY,QAAQ,EAAOyV,MAAO,WAAYq7X,aAAcnqX,GAEpDx/C,KAAKwpJ,aAAas3P,GAAa0oB,iBAAkBz3U,GAC7CA,EAAIl5D,QACJgnB,EAAUiqX,GAAaS,EACvB1qX,EAAUkqX,GAAaS,EACvBljV,EAAWwiV,GAAaS,EACxBjjV,EAAWyiV,GAAaS,IAGxBxqa,KAAK81C,QAAQ8zX,wBAAwB/pX,KAAeynC,GACpDtnF,KAAK81C,QAAQ+zX,oBAAoBhqX,GACjCkyC,GACIlyC,UAAWA,EAAW72C,UAAYiha,OAAQM,EAAWL,OAAQM,GAC7Dlja,UAAY2ia,OAAQ3iV,EAAWwiV,GAAYI,OAAQ5iV,EAAWyiV,IAAclxY,QAAQ,EACpFyV,MAAO,UAAWq7X,aAAcnqX,GAEpCx/C,KAAKwpJ,aAAas3P,GAAa0oB,iBAAkBz3U,IAGzD/xF,KAAKgyZ,kBAAkB/xZ,OAAM9E,EAAwB,uBAAbqkD,IAG5CspX,EAAezta,UAAUova,IAAM,WAC3Bzqa,KACK+oa,cAAc2B,WAAa,EAC5B1qa,KAAK81C,QAAQ60X,gBACb3qa,KAAK81C,QAAQ80X,YAAYlP,mBAE7B17Z,KAAK+oa,cAAc8B,WAAa7qa,KAAK8qa,cACjC9qa,KAAK81C,QAAQ60X,gBACb3qa,KAAK81C,QAAQ80X,YAAY7O,iBAEH,QAAtB/7Z,KAAK81C,QAAQ/X,MACb/9B,KAAK81C,QAAQi1X,uBAIrBjC,EAAezta,UAAUs+Q,SAAW,SAAUjwM,EAAOjb,GACjDib,EAAMpmE,GAAKomE,EAAMpmE,IAAMipC,KACvBm9B,EAAMjH,OAASziE,KAAK81C,QAAQ4b,OAAOj1D,QACnCitE,EAAQ,IAAIi/V,GAAM3oa,KAAK81C,QAAS,SAAU4zB,GAAO,IAC3Ck/V,cAAgB,EACtBl/V,EAAMm/V,eACN7oa,KAAK81C,QAAQ4b,OAAOltD,KAAKklE,GACzB1pE,KAAK81C,QAAQk1X,iBAAiBthW,EAAMjH,QAAUiH,EAAMpmE,GACpDtD,KAAK81C,QAAQm1X,YAAcvhW,EACdA,EAAMjb,QACnB,GAAIA,EACA,IAAK,IAAItyD,EAAI,EAAGA,EAAIsyD,EAAQhyD,OAAQN,IAChC6D,KAAK81C,QAAQ1xC,IAAIqqD,EAAQtyD,KAKrC2sa,EAAezta,UAAU2ra,eAAiB,SAAUkE,GAEhD,IAAK,IADDx5W,EAAS1xD,KAAK81C,QAAQ4b,OACjBv1D,EAAI,EAAGA,EAAIu1D,EAAOj1D,OAAQN,IAAK,CAEpC,GADeu1D,EAAOv1D,GAAGsyD,QAAQlwD,QAAQ2sa,IACzB,EACZ,OAAOx5W,EAAOv1D,GAGtB,OAAO6D,KAAK81C,QAAQm1X,aAGxBnC,EAAezta,UAAUyia,SAAW,SAAUrlJ,GAE1C,IAAK,IADD/mN,EAAS1xD,KAAK81C,QAAQ4b,OACjBv1D,EAAI,EAAGA,EAAIu1D,EAAOj1D,OAAQN,IAC/B,GAAIu1D,EAAOv1D,GAAGmH,KAAOm1Q,EACjB,OAAO/mN,EAAOv1D,IAM1B2sa,EAAezta,UAAU8va,YAAc,SAAUC,GAC7C,IAAI15W,EAAS1xD,KAAK89Z,SAASsN,GAC3B,GAAI15W,EAAQ,CAGR,IAAK,IAFDz/C,EAAQjS,KAAK81C,QAAQ4b,OAAOnzD,QAAQmzD,GACpC25W,EAAc35W,EAAOjD,QAChBtyD,EAAIkva,EAAY5ua,OAAS,EAAGN,GAAK,EAAGA,IACzC6D,KAAK81C,QAAQujX,SAASr5Z,KAAK81C,QAAQwjB,UAAU+xW,EAAYlva,KACzD6D,KAAK81C,QAAQvxC,OAAOvE,KAAK81C,QAAQwjB,UAAU+xW,EAAYlva,KACrC,kBAAdu1D,EAAOpuD,IACHtD,KAAK81C,QAAQm1X,YAAY3na,KAAO8na,IAChCpra,KAAK81C,QAAQm1X,YAAcjra,KAAK81C,QAAQ4b,OAAO1xD,KAAK81C,QAAQ4b,OAAOj1D,OAAS,WAIjFuD,KAAK81C,QAAQk1X,iBAAiBt5W,EAAO+Q,QAC5CziE,KAAK81C,QAAQ4b,OAAOrpC,OAAOpW,EAAO,GACR,QAAtBjS,KAAK81C,QAAQ/X,MACb/9B,KAAK81C,QAAQi1X,wBAKzBjC,EAAezta,UAAUiwa,YAAc,SAAU78W,EAAS88W,GACtD,IAAI7hW,EAAQ1pE,KAAK89Z,SAASyN,IAAgBvra,KAAK81C,QAAQm1X,YACvDjra,KAAK81C,QAAQ01X,eAAe9hW,EAAMpmE,IAElC,IAAK,IADDmoa,EACKrta,EAAK,EAAGsta,EAAYj9W,EAASrwD,EAAKsta,EAAUjva,OAAQ2B,IAAM,CAC/D,IAAIjC,EAAIuva,EAAUtta,GACJ4B,KAAKgna,eAAe7qa,GACdsyD,QAAQlwD,QAAQpC,IACvB,IACTsva,EAAczra,KAAK81C,QAAQwjB,UAAUn9D,GACrC6D,KAAK81C,QAAQujX,SAASoS,GACtBzra,KAAK81C,QAAQvxC,OAAOvE,KAAK81C,QAAQwjB,UAAUn9D,IAC3C6D,KAAK81C,QAAQ1xC,IAAIqna,MAK7B3C,EAAezta,UAAUswa,WAAa,SAAUlzJ,GAC/Bz4Q,KAAK81C,QAAQ4b,OAA1B,IACIgY,EAAQ1pE,KAAK89Z,SAASrlJ,GAC1B,GAAI/uM,EAAO,CACP,IAAIkiW,KACAC,GACAvoa,GAAIm1Q,EAAY,IAAMlsO,KAAYkiB,WAAaj3B,SAAS,EAAMyvY,MAAM,GAExEjna,KAAK25Q,SAASkyJ,GACdA,EAASppW,OAASziE,KAAK81C,QAAQ4b,OAAOj1D,OAAS,EAC/C,IACK,IAAI2B,EAAK,EAAGyE,EAAK6mE,EAAMjb,QAASrwD,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvD,IAAIrB,EAAM8F,EAAGzE,GACbwta,EAAcpna,KAAKxE,KAAK81C,QAAQwjB,UAAUv8D,IAE9CiD,KAAK8ra,MAAMF,KAInB9C,EAAezta,UAAUkE,KAAO,WAG5B,OAFAS,KAAK+oa,cAAc2B,WAAa,EAChC1qa,KAAK+oa,cAAc8B,WAAa7qa,KAAK8qa,cAC9B9qa,KAAK+oa,cAAc8B,YAG9B/B,EAAezta,UAAUyva,YAAc,WACnC,IAAIx4W,KACAv1D,KAEJ,GADAiD,KAAK+oa,cAAczQ,cACft4Z,KAAK81C,QAAQwc,cAAcT,WAAWp1D,OAAS,EAAG,CAClD61D,EAAgBtyD,KAAK81C,QAAQwc,cAAcT,WAC3C,IAAK,IAAItuC,EAAI,EAAGA,EAAI+uC,EAAc71D,OAAQ8mB,IAAK,CAC3C,IAAIviB,EAAU3B,GAAOizD,EAAc/uC,IACnCxmB,EAAIyH,KAAKxD,IAGjB,GAAIhB,KAAK81C,QAAQwc,cAAcR,MAAMr1D,OAAS,EAAG,CAC7C61D,EAAgBA,EAAc/3C,OAAOva,KAAK81C,QAAQwc,cAAcR,OAChE,IAASvuC,EAAI,EAAGA,EAAIvjB,KAAK81C,QAAQwc,cAAcR,MAAMr1D,OAAQ8mB,IAAK,CAC9D,IAAIhjB,EAAOlB,GAAMW,KAAK81C,QAAQwc,cAAcR,MAAMvuC,IAClDvjB,KACK+ra,cAAcxra,GACnBxD,EAAIyH,KAAKnF,GAAMkB,IACf,IAAIqqC,EAASL,KAEb,GADAiB,GAAaZ,GAASrqC,EAAKssC,YAAatsC,EAAKsL,QAAStL,EAAK0L,SACvD1L,EAAK6Z,SAAU,CAKf,IAAK,IAJDk+Y,EAAat4Z,KAAK+oa,cAAczQ,WAChC0T,OAAW,EAEXl6W,EAAQ9xD,KAAKy8Z,kBAAkBl8Z,MAAgB,GAC1CpE,EAAI,EAAGA,EAAI21D,EAAMr1D,OAAQN,IAAK,CAEnC,IAAIwzD,EAAe2oW,GADnB0T,EAAWhsa,KAAK81C,QAAQwjB,UAAUxH,EAAM31D,GAAGmH,KACJA,IAAMjE,GAAM2sa,GAC/ChiY,EAAYW,GAAuBC,GAAU79B,EAAG4iD,EAAa59C,QAAQlG,QAASmB,EAAG2iD,EAAa59C,QAAQ9F,UACtG+/Z,aAAoB7kX,KACpBwI,EAAa9jD,QAAUm+B,EAAUj9B,EACjC4iD,EAAa1jD,QAAU+9B,EAAUh9B,EACjC2iD,EAAa9iB,aAAetsC,EAAKssC,aAGzC7sC,KAAK+oa,cAAczQ,WAAaA,IAI5C,GAAsC,IAAlCt4Z,KAAK+oa,cAAc2B,WAAkB,CACrC1qa,KAAK07Z,mBACL,IAAK,IAAIt9Z,EAAK,EAAG6ta,EAAkB35W,EAAel0D,EAAK6ta,EAAgBxva,OAAQ2B,IAAM,CACjF,IAAIyf,EAAOouZ,EAAgB7ta,GACvB4B,KAAK81C,QAAQwjB,UAAUz7C,EAAKva,KAC5BtD,KAAK81C,QAAQvxC,OAAOsZ,GAG5B7d,KAAK+7Z,iBAGT,OADA/7Z,KAAKksa,aAAanva,EAAK,UAChBA,GAEX+ra,EAAezta,UAAU0wa,cAAgB,SAAUxra,GAC/C,GAAwB,SAApBA,EAAKotB,MAAMjnB,MAAmBnG,EAAKotB,MAAMu/X,UACzC3sZ,EAAKotB,MAAMu/X,SAASD,WAAWE,WAC/B5sZ,EAAKotB,MAAMu/X,SAASD,WAAWE,UAAU1wZ,OAAS,EAAG,CAErD,IAAK,IAAI2B,EAAK,EAAG+ta,EADD5ra,EAAKotB,MAAMu/X,SAASD,WAAWE,UACL/uZ,EAAK+ta,EAAY1va,OAAQ2B,IAAM,CACrE,IAAIjC,EAAIgwa,EAAY/ta,GACpB4B,KAAKipa,aAAa9sa,GAAMkD,GAAMW,KAAK81C,QAAQwjB,UAAUn9D,IACjD6D,KAAKipa,aAAa9sa,GAAGwxB,MAAMu/X,SAASD,WAAWE,WAC/CntZ,KAAKipa,aAAa9sa,GAAGwxB,MAAMu/X,SAASD,WAAWE,UAAU1wZ,OAAS,GAClEuD,KAAK+ra,cAAc/ra,KAAKipa,aAAa9sa,IAG7C6D,KAAK+oa,cAAcE,aAAejpa,KAAKipa,eAI/CH,EAAezta,UAAU03F,MAAQ,WAC7B,IACIq5U,EAAkBpsa,KAAK81C,QAAgB,oBAC3C91C,KAAK81C,QAAQma,uBAAsB,GACnCjwD,KAAK81C,QAAQuT,eAAiBrpD,KAAK81C,QAAQuT,eAAiBC,GAAc+iX,MAC1E,IAAI/5W,KACAv1D,KACJA,EAAIuG,GAAK,QAAUipC,MACnBxvC,EAAM,IAAIoqD,GAAKnnD,KAAK81C,QAAS,QAAS/4C,GAAK,IACvCqd,YAEJk4C,GADAA,EAAgBtyD,KAAK81C,QAAQwc,cAAcR,OACbv3C,OAAOva,KAAK81C,QAAQwc,cAAcT,YAChE,IAAK,IAAI11D,EAAI,EAAGA,EAAIm2D,EAAc71D,OAAQN,IACjCm2D,EAAcn2D,GAAGo9D,UAClBx8D,EAAIqd,SAAS5V,KAAK8tD,EAAcn2D,GAAGmH,IAG3CtD,KAAK81C,QAAQ1xC,IAAIrH,GACjB,IAAIg9Z,GAAUrzZ,KAAM,QAASuzZ,WAAYl9Z,EAAKi9Z,WAAYj9Z,EAAKq9L,SAAU,YACzEp6L,KAAKk6Z,gBAAgBH,GACrB/5Z,KAAK81C,QAAQuT,eAAiBrpD,KAAK81C,QAAQuT,gBAAkBC,GAAc+iX,MAC3Ersa,KAAK81C,QAAQma,sBAAsBm8W,IAGvCtD,EAAezta,UAAUixa,QAAU,SAAUvva,GACzC,IACIqva,EAAkBpsa,KAAK81C,QAAgB,oBAC3C91C,KAAK81C,QAAQma,uBAAsB,GACnCjwD,KAAK81C,QAAQuT,eAAiBrpD,KAAK81C,QAAQuT,eAAiBC,GAAc+iX,MAC1E,IAAI/5W,KACAv1D,EACAu1D,EAAc9tD,KAAKzH,GAGnBu1D,EAAgBtyD,KAAK81C,QAAQwc,cAAcR,MAE/C,IAAK,IAAI31D,EAAI,EAAGA,EAAIm2D,EAAc71D,OAAQN,IAAK,CAC3C,IAAIoE,EAAO+xD,EAAcn2D,GACrB49Z,GACArzZ,KAAM,UAAWuzZ,WAAYltX,GAAYxsC,GACzCy5Z,WAAYjtX,GAAYxsC,GAAO65L,SAAU,YAK7C,GAHMp6L,KAAK81C,QAAQuT,eAAiBC,GAAcijX,UAC9Cvsa,KAAKk6Z,gBAAgBH,GAErBx5Z,EAAK6Z,SAAU,CAEf,IAAK,IADD3Z,EAAaT,KAAK81C,QAAQwjB,UAAU/4D,EAAKg5D,UACpCh2C,EAAIhjB,EAAK6Z,SAAS3d,OAAS,EAAG8mB,GAAK,EAAGA,IAC1CvjB,KAAK81C,QAAQwjB,UAAU/4D,EAAK6Z,SAAS,IAAKm/C,SAAW,GACtDv5D,KAAK81C,QAAQ02X,YAAYxsa,KAAK81C,QAAQwjB,UAAU/4D,EAAK6Z,SAAS,IAAK7Z,GAC/DA,EAAKg5D,UAAYh5D,EAAK6Z,SAAS,IAC/Bpa,KAAK81C,QAAQ22X,SAAShsa,EAAYF,EAAK6Z,SAAS,IAGpD7Z,EAAKg5D,UACLv5D,KAAK81C,QAAQ02X,YAAYjsa,EAAME,GAGvCT,KAAK81C,QAAQ4hR,WAAWn3T,GACxBP,KAAKu5Z,iBAETv5Z,KAAK81C,QAAQuT,eAAiBrpD,KAAK81C,QAAQuT,gBAAkBC,GAAc+iX,MAC3Ersa,KAAK81C,QAAQma,sBAAsBm8W,IAGvCtD,EAAezta,UAAUywa,MAAQ,SAAU/ua,GACvC,GAAIA,GAAOiD,KAAK+oa,cAAc8B,WAAY,CACtC7qa,KAAK81C,QAAQma,uBAAsB,GACnC,IAAIy8W,EAAc3va,EAAMiD,KAAK2sa,aAAa5va,GACtCiD,KAAK+oa,cAAc8B,WACvB,GAAI6B,EAAa,CACb,IAAI/8G,EAAqC,IAAvB+8G,EAAYjwa,OAC1Bmwa,GAAc,EACdC,KACAC,KACkC,IAAlC9sa,KAAK+oa,cAAc2B,YACnB1qa,KAAKu5Z,iBAELv5Z,KAAK81C,QAAQ60X,iBACbiC,GAAc,EACd5sa,KAAK81C,QAAQ80X,YAAYlP,oBAE7B,IAAK,IAAIt9Z,EAAK,EAAG2ua,EAAgBL,EAAatua,EAAK2ua,EAActwa,OAAQ2B,IAAM,CAE3Eyua,GADItta,EAAOwta,EAAc3ua,IACRkF,IAAM/D,EAE3B,IAAK,IAAIgkB,EAAI,EAAGA,EAAImpZ,EAAYjwa,OAAQ8mB,IAAK,CACzC,IAAIhkB,EAAOmta,EAAYnpZ,GACvB,GAAIgtY,GAAchxZ,KAAUumD,GAAW,CACnC,IAAIknX,EAAY3ta,GAAME,GAClB0qa,EAAS+C,EAAU11X,SACvB01X,EAAU11X,SAAW,GACjBu1X,EAAY5C,IAAW6C,EAAS7C,KAChC+C,EAAU11X,SAAWw1X,EAAS7C,IAElCA,EAAS+C,EAAUhiB,SACnBgiB,EAAUhiB,SAAW,GACjB6hB,EAAY5C,IAAW6C,EAAS7C,KAChC+C,EAAUhiB,SAAW8hB,EAAS7C,IAElC,IAAI58T,EAASrtG,KAAKita,eAAeD,EAAWr9G,GAC5Cm9G,EAASvta,EAAK+D,IAAM+pG,EAAO/pG,OAE1B,CACD,IAAI4pa,EAAUlta,KAAK4B,UAAUrC,EAAMowT,GAEnC,GAAIu9G,EAAS,CACTJ,EAASvta,EAAK+D,IAAM4pa,EAAQ5pa,GAC5B,IAAI6pa,EAAQ5ta,EAAKotZ,QACjB,GAAIwgB,EACA,IAAK,IAAItqa,EAAK,EAAGuqa,EAAUD,EAAOtqa,EAAKuqa,EAAQ3wa,OAAQoG,IAAM,CAEzD,GAAIgqa,EADAl0Z,EAAOy0Z,EAAQvqa,KACMiqa,EAASn0Z,GAAO,EACjC00Z,EAAerta,KAAK81C,QAAQwjB,UAAUwzW,EAASn0Z,KACtCqyY,SAAW8hB,EAASvta,EAAK+D,IACtCtD,KAAK81C,QAAQ8zX,wBAAwByD,GAAgBriB,SAAU,KAAQA,SAAUqiB,EAAariB,YAK1G,GADAmiB,EAAQ5ta,EAAKmtZ,SAET,IAAK,IAAIzoZ,EAAK,EAAGqpa,EAAUH,EAAOlpa,EAAKqpa,EAAQ7wa,OAAQwH,IAAM,CACzD,IAAI0U,EACJ,GAAIk0Z,EADAl0Z,EAAO20Z,EAAQrpa,KACM6oa,EAASn0Z,GAAO,CACrC,IAAI00Z,GAAAA,EAAerta,KAAK81C,QAAQwjB,UAAUwzW,EAASn0Z,KACtC2+B,SAAWw1X,EAASvta,EAAK+D,IACtCtD,KAAK81C,QAAQ8zX,wBAAwByD,GAAgB/1X,SAAU,KAAQA,SAAU+1X,EAAa/1X,gBAOlG,IAAhBs1X,IACA5sa,KAAK81C,QAAQ80X,YAAY7O,iBACzB6Q,GAAc,GAEQ,QAAtB5sa,KAAK81C,QAAQ/X,MACb/9B,KAAK81C,QAAQi1X,sBAEjB/qa,KAAK+oa,cAAc2B,aACnB1qa,KAAK81C,QAAQma,uBAAsB,MAI/C64W,EAAezta,UAAUsxa,aAAe,SAAU5va,GAC9C,IAAIswG,EACAkgU,KACJvta,KAAK+oa,cAAc2B,WAAa,EAChC,IAAK,IAAIvua,EAAI,EAAGA,EAAIY,EAAIN,OAAQN,IAC5BkxG,EAAStgE,GAAYhwC,EAAIZ,IACzBoxa,EAAQ/oa,KAAK6oG,GAEjB,OAAOkgU,GAEXzE,EAAezta,UAAU4xa,eAAiB,SAAUptX,EAAW8vQ,GAC3D,IAAI09G,EACAtgY,EAAc1tC,GAAMwgD,GAKxB,OAJA7/C,KAAKwta,gBAAgBzgY,GACrBA,EAAY01B,QAAU,EACtB4qW,EAAerta,KAAK81C,QAAQ1xC,IAAI2oC,GAChC/sC,KAAKs5Z,eAAe+T,GAAe19G,GAC5B09G,GAEXvE,EAAezta,UAAUuG,UAAY,SAAUrB,EAAMovT,EAAav1S,GAC9D,IAAI8yZ,EAGAl6V,EAFAg2V,KACAj8X,EAAc1tC,GAAMkB,GAEpBA,EAAKotB,OAA6B,SAApBptB,EAAKotB,MAAMjnB,MAAmBnG,EAAKotB,MAAMu/X,UACvD3sZ,EAAKotB,MAAMu/X,SAASD,WAAWE,WAC5B5sZ,EAAKotB,MAAMu/X,SAASD,WAAWE,UAAU1wZ,SAC5Cu2E,EAAUjmC,EAAYpf,MAAMu/X,SAASD,WAAWE,UAChDpgX,EAAY01B,QAAU,EACtB11B,EAAYpf,MAAMu/X,SAASD,WAAWE,eAEtC5sZ,EAAK6Z,WAAY7Z,EAAK6Z,SAAS3d,QAAY2d,GAAaA,EAAS3d,QAIjEuD,KAAKwta,gBAAgBzgY,GACrBA,EAAY01B,QAAU,EAClBroD,IACA2yB,EAAY3yB,SAAWA,GAE3B8yZ,EAAUlta,KAAK81C,QAAQ1xC,IAAI2oC,IAR3BmgY,EAAUlta,KAAKyta,WAAWlta,EAAMovT,GAUpC,IAAK,IAAIvxT,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAK0ra,GAAkB5qa,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACtE,IAAIjC,EAAI0G,EAAGzE,GACX4B,KAAK81C,QAAQ1xC,IAAI4ka,EAAgB7sa,IASrC,OAPI62E,GAAWA,EAAQv2E,SACnBywa,EAAQv/Y,MAAMu/X,SAASD,WAAWE,UAAYn6U,EAC9ChzE,KAAK0ta,kBAAkBR,IAEvBA,GACAlta,KAAKs5Z,eAAe4T,GAAUv9G,GAE3Bu9G,GAEXpE,EAAezta,UAAUqya,kBAAoB,SAAUnta,GACnD,IAAIs/C,KACA9xB,KACJ,GAAwB,SAApBxtB,EAAKotB,MAAMjnB,MAAmBnG,EAAKotB,MAAMu/X,UACzC3sZ,EAAKotB,MAAMu/X,SAASD,WAAWE,WAC5B5sZ,EAAKotB,MAAMu/X,SAASD,WAAWE,UAAU1wZ,OAE5C,IAAK,IADDu2E,EAAUzyE,EAAKotB,MAAMu/X,SAASD,WAAWE,UACpCtwX,EAAI,EAAGA,EAAIm2C,EAAQv2E,OAAQogC,IAAK,CAErC,IAAK,IADDx8B,EAAQL,KAAK81C,QAAQwjB,UAAU0Z,EAAQn2C,KAAO78B,KAAK+oa,cAAcE,aAAaj2V,EAAQn2C,IACjFz+B,EAAK,EAAGyE,EAAKxC,EAAMqsZ,SAAUtuZ,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACxD,IAAImlB,EAAI1gB,EAAGzE,GACPyhD,EAAUthD,QAAQglB,GAAK,GACvBs8B,EAAUr7C,KAAK+e,GAGvB,IAAK,IAAItf,EAAK,EAAGwG,EAAKpK,EAAMssZ,QAAS1oZ,EAAKwG,EAAGhO,OAAQwH,IAAM,CACnDsf,EAAI9Y,EAAGxG,GACP47C,EAAUthD,QAAQglB,GAAK,GACvBs8B,EAAUr7C,KAAK+e,GAGvB,IAAIoqZ,EAAa5gY,GAAY/sC,KAAK+oa,cAAcE,aAAaj2V,EAAQn2C,KACrE8wY,EAAWlhB,UAAYlsZ,EAAK+C,GAC5B,IAAI4pa,EAAUlta,KAAK4B,UAAU+ra,GAAY,GACzC5/Y,EAAKilD,EAAQn2C,IAAMqwY,EAAQ5pa,GAC3B0vE,EAAQn2C,GAAKqwY,EAAQ5pa,GACrBtD,KAAK81C,QAAQ83X,WAAWV,EAAS3sa,EAAK+C,IACtC,IAAK,IAAIiuU,EAAK,EAAGs8F,EAAchuX,EAAW0xR,EAAKs8F,EAAYpxa,OAAQ80U,IAAM,CACrE,IAAIp1U,EAAI0xa,EAAYt8F,GAEhBu8F,EAAa/gY,GADJ/sC,KAAK81C,QAAQwjB,UAAUn9D,IAAM6D,KAAK81C,QAAQi4X,eAAe5xa,IAElE4xB,EAAK+/Y,EAAWx2X,WAAavpB,EAAK+/Y,EAAW9iB,YAC7C8iB,EAAWrrW,QAAU,EACrBqrW,EAAWxqa,IAAMipC,KACjBuhY,EAAWx2X,SAAWvpB,EAAK+/Y,EAAWx2X,UACtCw2X,EAAW9iB,SAAWj9X,EAAK+/Y,EAAW9iB,UACtCnrW,EAAUx3B,OAAOw3B,EAAUthD,QAAQpC,GAAI,GACvC6D,KAAK81C,QAAQ1xC,IAAI0pa,OAMrChF,EAAezta,UAAUoya,WAAa,SAAU1wa,EAAK4yT,GACjD,IACIq+G,KACA5zZ,KAEJ,GADAA,EAAWA,EAASG,OAAOxd,EAAIqd,UAC3Bpa,KAAK+oa,cAAczQ,WACnB,IAAK,IAAIn8Z,EAAI,EAAGA,EAAIie,EAAS3d,OAAQN,IAAK,CACtC,IAAI8xa,EAAWjua,KAAK+oa,cAAczQ,WAAWl+Y,EAASje,IACtD,GAAI8xa,EAAU,CACV,IAAI5gU,OAAS,EAETA,EADAkjT,GAAc0d,KAAcnoX,GACnB9lD,KAAKita,eAAegB,EAAUt+G,GAG9B3vT,KAAK4B,UAAUqsa,EAAUt+G,GAEtCq+G,EAAYxpa,KAAK6oG,EAAO/pG,KAKpC,OADgBtD,KAAK4B,UAAU7E,EAAK4yT,EAAaq+G,IAIrDlF,EAAezta,UAAUmya,gBAAkB,SAAUzwa,GACjDA,EAAIuG,IAAMipC,KACV,IAAIkxC,EAAuC,GAAhCz9E,KAAK+oa,cAAc2B,WAC9B,GAAIna,GAAcxzZ,KAAS+oD,GAAW,CAOlC,GANA/oD,EAAIg6C,aACAhqC,EAAGhQ,EAAIg6C,YAAYhqC,EAAI0wE,EAAMzwE,EAAGjQ,EAAIg6C,YAAY/pC,EAAIywE,GAExD1gF,EAAIgiD,aACAhyC,EAAGhQ,EAAIgiD,YAAYhyC,EAAI0wE,EAAMzwE,EAAGjQ,EAAIgiD,YAAY/xC,EAAIywE,GAEvC,WAAb1gF,EAAI2J,KAEJ,IAAK,IADDoiC,EAAW/rC,EAAI+rC,SACV3sC,EAAI,EAAGA,EAAI2sC,EAASrsC,OAAQN,IAC5B+9C,GAAMC,aAAarR,EAAS3sC,GAAGinD,UAChCta,EAAS3sC,GAAGinD,QACRr2C,EAAG+7B,EAAS3sC,GAAGinD,OAAOr2C,EAAI0wE,EAAMzwE,EAAG87B,EAAS3sC,GAAGinD,OAAOp2C,EAAIywE,IAG7DvjC,GAAMC,aAAarR,EAAS3sC,GAAGksC,UAChCS,EAAS3sC,GAAGksC,QACRt7B,EAAG+7B,EAAS3sC,GAAGksC,OAAOt7B,EAAI0wE,EAAMzwE,EAAG87B,EAAS3sC,GAAGksC,OAAOr7B,EAAIywE,IAK1E,IAAiB,aAAb1gF,EAAI2J,MAAoC,WAAb3J,EAAI2J,OAC3B3J,EAAI+rC,UAAY/rC,EAAI+rC,SAASrsC,OAAS,EAEtC,IADIqsC,EAAW/rC,EAAI+rC,SACV3sC,EAAI,EAAGA,EAAI2sC,EAASrsC,OAAS,EAAGN,IACrC2sC,EAAS3sC,GAAG23B,MAAM/mB,GAAK0wE,EACvB30C,EAAS3sC,GAAG23B,MAAM9mB,GAAKywE,OAMnC1gF,EAAI8O,SAAW4xE,EACf1gF,EAAIkP,SAAWwxE,GAMvBqrV,EAAezta,UAAUqja,WAAa,SAAU3ha,GAC5C,IAAIswG,EACAtgE,EACJA,EAAc1tC,GAAMW,KAAK81C,QAAQuW,eACjC,IAAK,IAAIjuD,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKP,GAAMqB,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC1D,IAAIkM,EAAOzH,EAAGzE,GACd2uC,EAAYziC,GAAQvN,EAAIuN,GAc5B,OAZIimZ,GAAcvwZ,KAAK81C,QAAQuW,iBAAmBlF,KAC9CkmD,EAAS,IAAIlmD,GAAKnnD,KAAK81C,QAAS,QAAS/I,GAAa,IAC/CzpC,IAAMtD,KAAK81C,QAAQuW,cAAc/oD,IAAM,QAAUipC,KACxDvsC,KAAK81C,QAAQo4X,WAAW7gU,MAGxBA,EAAS,IAAIvnD,GAAU9lD,KAAK81C,QAAS,aAAc/I,GAAa,IACzDzpC,IAAMtD,KAAK81C,QAAQuW,cAAc/oD,IAAM,aAAeipC,KAC7DvsC,KAAK81C,QAAQo4X,WAAW7gU,IAE5BrtG,KAAK81C,QAAQ+zX,oBAAoBx8T,GACjCrtG,KAAK81C,QAAQqjB,qBAAuBk0C,EAC7BA,GAKXy7T,EAAezta,UAAUuja,mBAAqB,SAAU7ha,GACpD,IAAIswG,EACJrtG,KAAK81C,QAAQq4X,gBAAgBpxa,GAC7BiD,KAAK81C,QAAQs4X,uBAAuBpua,KAAK81C,QAAQwjB,UAAUv8D,EAAIuG,YACxDtD,KAAK81C,QAAQwjB,UAAUv8D,EAAIuG,IAClC+pG,EAASrtG,KAAK81C,QAAQ1xC,IAAIrH,GACA,QAAtBiD,KAAK81C,QAAQ/X,MACb/9B,KAAK81C,QAAQi1X,sBAEjB/qa,KAAKs5Z,eAAejsT,IAChBtwG,IAAU0rD,GAAkBzoD,KAAK81C,WACjC91C,KAAK81C,QAAQsS,OAASC,GAAaO,SACnC5oD,KAAK81C,QAAQqjB,0BAAuBh+D,IAM5C2ta,EAAezta,UAAU0ja,QAAU,SAAUhia,EAAKkhP,GAC9C,IAAItvL,EAAa3uD,KAAK81C,QAAQwuX,sBAAsBvna,EAAKkhP,GACzDj+O,KAAK81C,QAAQoxX,cAAcnqa,EAAK4xD,aAAsBmE,GAAenE,EAAa,GAAEzxD,MAAM,KAAK,QAAK/B,IAGxG2ta,EAAezta,UAAUi+Z,cAAgB,SAAUv8Z,EAAKsxa,EAAmBrla,GACvE,IAAI+oF,GACA/oF,SAAUA,MAA0B1B,SAAUvK,EAAKuxa,MAAOtua,KAAK81C,QAAQuT,eACvE/a,MAAO,WAAY5nC,KAAM,WAAYmyB,QAAQ,GAGjD74B,KAAK81C,QAAQ0zG,aAAas3P,GAAaytB,gBAAiBx8U,GACxD,IAAIy8U,E3WntBZ,SAA+B5rZ,GAC3B,OAAOA,EAAMwlC,KAAOC,GAAaS,e2WktBA2lX,CAAezua,KAAK81C,SAC7C44X,EAAuBvmX,GAAgBnoD,KAAK81C,SAChD,GAAI44X,GAAwBF,EAAwB,CAChD,IAAKA,IAA4Bzxa,EAAIN,OAAS,GAAO4xa,GAAoC,IAAftxa,EAAIN,QAAgB,CAC1F,GAAmB,IAAfM,EAAIN,OAIJ,OAHAuD,KAAKu5Z,iBAMb,KAAKmV,GAAuC,IAAf3xa,EAAIN,QAAkB4xa,GAAsBz2W,GAAa53D,KAAK81C,UAEvF,YADA91C,KAAKu5Z,iBAIb,IAAKxnU,EAAIl5D,OAAQ,CACb,IAAK,IAAI18B,EAAI,EAAGA,EAAIY,EAAIN,OAAQN,IAAK,CACjC,IAAIkxG,EAAStwG,EAAIZ,GAEjB,IADS,EACJy7D,GAAa53D,KAAK81C,SAGlB,CACD,IAAK35C,EAAI,GAAKkya,IAAsBhhU,EAAOjzF,WAAaizF,EAAO9zC,SAC3D,IAAK,IAAI/xC,EAAM,EAAGA,EAAMxnB,KAAK81C,QAAQwc,cAAcR,MAAMr1D,OAAQ+qB,IAAO,CACpE,IAAI/mB,EAAaT,KAAK81C,QAAQwjB,UAAUt5D,KAAK81C,QAAQwc,cAAcR,MAAMtqC,GAAK+xC,UAC1E94D,IACAA,EAAaT,KAAK2ua,WAAWlua,KAErB4sG,EAAO/pG,KAAO7C,EAAW6C,IACzBtD,KAAK4ua,YAAYvhU,GAMrCrtG,KAAK6ua,gBAAgBxhU,GACZrtG,KAAK8ua,uBAAuBzhU,IAEjCrtG,KAAKyF,OAAO4nG,EAAQlxG,EAAI,GAAKkya,GAAmB,QAnBpDrua,KAAKyF,OAAO4nG,EAAQlxG,EAAI,GAAKkya,GAAmB,GAuBxDt8U,GACI/oF,SAAUA,MAA0B1B,SAAUvK,EAAKuxa,MAAOtua,KAAK81C,QAAQuT,eACvE/a,MAAO,UAAW5nC,KAAM,WAAYmyB,QAAQ,GAEhD74B,KAAK81C,QAAQ0zG,aAAas3P,GAAaytB,gBAAiBx8U,GACxD/xF,KAAK81C,QAAQi9U,eAAes7C,GAAsBtxa,GAAOA,EAAIN,OAAS,KAM9Eqsa,EAAezta,UAAUsza,WAAa,SAAUpua,GAK5C,OAJIA,EAAKg5D,WACLh5D,EAAOP,KAAK81C,QAAQwjB,UAAU/4D,EAAKg5D,UACnCv5D,KAAK2ua,WAAWpua,IAEbA,GAEXuoa,EAAezta,UAAUwza,gBAAkB,SAAUxhU,GACjD,GAAIrtG,KAAK+ua,aAAa1hU,GAElB,IAAK,IADD8/S,EAAY,EAASx/X,MAAMu/X,SAASD,WAAWE,UAC1ChxZ,EAAI,EAAGA,EAAIgxZ,EAAU1wZ,OAAQN,IAAK,CACvC,IAAIwxa,EAAa3ta,KAAK81C,QAAQwjB,UAAU6zV,EAAUhxZ,IAC9C6D,KAAK+ua,aAAapB,IAClB3ta,KAAKs5Z,eAAeqU,IAAa,GAErC3ta,KAAKq5Z,SAASsU,KAI1B7E,EAAezta,UAAUuza,YAAc,SAAUvhU,GAC7C,IAAK,IAAI9pF,EAAI,EAAGA,EAAI8pF,EAAOjzF,SAAS3d,OAAQ8mB,IAAK,CAC7C,IAAIoqZ,EAAa3ta,KAAK81C,QAAQwjB,UAAU+zC,EAAOjzF,SAASmJ,IACpDoqZ,EAAWvzZ,UACXpa,KAAK4ua,YAAYjB,GAErB3ta,KAAKq5Z,SAASr5Z,KAAK81C,QAAQwjB,UAAU+zC,EAAOjzF,SAASmJ,OAM7DulZ,EAAezta,UAAUyza,uBAAyB,SAAUvua,GACxD,IACID,EADAmF,GAAS,EAEb,GAAIlF,EAAKksZ,UAEDhnZ,GADAqzD,GAAW94D,KAAK81C,QAAS91C,KAAK81C,QAAQwjB,UAAU/4D,EAAKksZ,aAI5CzsZ,KAAK8ua,uBAAuB9ua,KAAK81C,QAAQwjB,UAAU/4D,EAAKksZ,iBAGpE,GAAIlsZ,aAAgBulD,KACjBvlD,EAAK+2C,UAAYt3C,KAAK81C,QAAQwjB,UAAU/4D,EAAK+2C,WAC7Ct3C,KAAK81C,QAAQwjB,UAAU/4D,EAAK+2C,UAAUm1W,YACtCnsZ,EAASN,KAAK81C,QAAQwjB,UAAU/4D,EAAK+2C,UAAUm1W,WAE/ClsZ,EAAKyqZ,UAAYhrZ,KAAK81C,QAAQwjB,UAAU/4D,EAAKyqZ,WAC7ChrZ,KAAK81C,QAAQwjB,UAAU/4D,EAAKyqZ,UAAUyB,YACtCnsZ,EAASN,KAAK81C,QAAQwjB,UAAU/4D,EAAKyqZ,UAAUyB,WAE/CnsZ,GAAQ,CACR,GAAIw4D,GAAW94D,KAAK81C,QAAS91C,KAAK81C,QAAQwjB,UAAUh5D,IAChD,OAAO,EAGPmF,EAASzF,KAAK8ua,uBAAuB9ua,KAAK81C,QAAQwjB,UAAUh5D,IAIxE,OAAOmF,GAKXqja,EAAezta,UAAU0za,aAAe,SAAUxua,GAC9C,SAAIA,GACyB,SAApBA,EAAKotB,MAAMjnB,MAAoBnG,EAAKotB,MAAMu/X,UAC3C3sZ,EAAKotB,MAAMu/X,SAASD,WAAWE,WAC/B5sZ,EAAKotB,MAAMu/X,SAASD,WAAWE,UAAU1wZ,OAAS,IAO9Dqsa,EAAezta,UAAUoK,OAAS,SAAU1I,EAAKsxa,EAAmBW,GAChE,IAAIC,EAAWjva,KAAKgna,eAAejqa,EAAIuG,IACvC,GAAKuiD,GAAU9oD,MAAUA,aAAespD,MAAcyS,GAAW94D,KAAK81C,QAAS/4C,IACvEkya,IAAaA,EAAShI,MAAQgI,EAASz3Y,SAAYz6B,EAAIgV,QAAQylB,QAAS,EAC5E62Y,IAAoBz2W,GAAa53D,KAAK81C,UAAWu4X,IAE7Crua,KAAKu5Z,iBAET,IAAI2V,EAAgBlva,KAAK81C,QAAQwc,cACnBv1D,aACSoqD,GACnB+nX,EAAcp9W,MAAMttD,KAAKzH,GAGzBmya,EAAcr9W,WAAWrtD,KAAKzH,GAE7Bsxa,GASDa,EAAcn9Z,QAAQ86B,YAAcqiY,EAAcriY,YAAc,EAChEqiY,EAAcn9Z,QAAQqI,SAAS5V,KAAKzH,EAAIgV,WATxCm9Z,EAAcl3M,KAAKh4N,KAAK81C,SACW,IAA/Bo5X,EAAcp9W,MAAMr1D,QAAoD,IAApCyya,EAAcr9W,WAAWp1D,SAC7Dyya,EAAcriY,YAAcqiY,EAAcp9W,MAAM,GAAGjlB,YACnDqiY,EAAcn9Z,QAAQ86B,YAAcqiY,EAAcp9W,MAAM,GAAGjlB,YAC3DqiY,EAAcn9Z,QAAQ46B,MAAQuiY,EAAcp9W,MAAM,GAAGnlB,QAOxDqiY,GACDhva,KAAK81C,QAAQi9U,eAAes7C,KAKxCvF,EAAezta,UAAUg+Z,SAAW,SAAUt8Z,GAC1C,IAAIoya,KACJA,EAAS3qa,KAAKzH,GACd,IAAIg1F,GACA/oF,SAAUmma,EAAU7na,YAAcgna,MAAOtua,KAAK81C,QAAQuT,eACtD/a,MAAO,WAAY5nC,KAAM,UAAWmyB,QAAQ,GAKhD,GAHK74B,KAAK81C,QAAQ6hB,eACd33D,KAAK81C,QAAQ0zG,aAAas3P,GAAaytB,gBAAiBx8U,GAExDj5B,GAAW94D,KAAK81C,QAAS/4C,GAAM,CAC/B,IAAIqya,EAAgBpva,KAAK81C,QAAQwc,cAC7BrgD,OAAQ,EACRlV,aAAeoqD,IACfl1C,EAAQm9Z,EAAct9W,MAAMvzD,QAAQxB,EAAK,GACzCqya,EAAct9W,MAAMzpC,OAAOpW,EAAO,KAGlCA,EAAQm9Z,EAAcv9W,WAAWtzD,QAAQxB,EAAK,GAC9Cqya,EAAcv9W,WAAWxpC,OAAOpW,EAAO,KAE3C8/E,GACI/oF,SAAUmma,EAAU7na,YAAcgna,MAAOtua,KAAK81C,QAAQuT,eACtD/a,MAAO,UAAW5nC,KAAM,UAAWmyB,QAAQ,IAEtCA,SACL5mB,EAAQm9Z,EAAcr9Z,QAAQqI,SAAS7b,QAAQxB,EAAIgV,QAAS,GAC5Dq9Z,EAAcr9Z,QAAQqI,SAASiO,OAAOpW,EAAO,GAC7CjS,KAAK81C,QAAQ+jX,iBACR75Z,KAAK81C,QAAQ6hB,eACd33D,KAAK81C,QAAQ0zG,aAAas3P,GAAaytB,gBAAiBx8U,MAMxE+2U,EAAezta,UAAUg0a,iBAAmB,SAAUhva,GAElD,IAAK,IADD+Z,KACKje,EAAI,EAAGA,EAAIkE,EAAM5D,OAAQN,IAAK,CACnC,IAAIu0E,EAAYrwE,EAAMlE,GAClBu0E,EAAUt2D,UAAYs2D,EAAUt2D,SAAS3d,OAAS,EAClD2d,EAASG,OAAOva,KAAKqva,iBAAiB3+V,EAAUt2D,YAGhDA,EAAS5V,KAAKksE,EAAUptE,IACpBotE,aAAqB5d,IACrB14C,EAAS5V,KAAKksE,EAAUptE,GAAK,UAIzC,OAAO8W,GAEX0uZ,EAAezta,UAAUi0a,YAAc,SAAUrF,EAAQjf,GACrD,IAAIukB,EAAa38X,GAAkBo4W,EAAW,iBAC1CwkB,EAAW58X,GAAkBq3X,EAAS,iBAC1CsF,EAAW9ua,WAAWyE,aAAasqa,EAAUD,IAGjDzG,EAAezta,UAAUo0a,kBAAoB,SAAUh3J,GACnD,IAAI/uM,EAAQ1pE,KAAK89Z,SAASrlJ,GAC1B,GAAI/uM,GAA0B,IAAjBA,EAAMjH,OAAc,CAC7B,IAAIxwD,EAAQy3D,EAAMjH,OAClB,GAA0B,QAAtBziE,KAAK81C,QAAQ/X,KAAgB,CAC7B,IAAI2xY,EAAqBhmW,EAAMjb,QAC3BkhX,EAAe3va,KAAK89Z,SAAS99Z,KAAK81C,QAAQk1X,iBAAiB/4Z,EAAQ,IAAIw8C,QAAQ,GACnF,GAAIkhX,EACA,IAAK,IAAIvxa,EAAK,EAAGwxa,EAAuBF,EAAoBtxa,EAAKwxa,EAAqBnza,OAAQ2B,IAAM,CAChG,IAAIrB,EAAM6ya,EAAqBxxa,GAC/B4B,KAAKsva,YAAYvya,EAAK4ya,IAIlC,IAAIpE,EAAcvra,KAAK89Z,SAAS99Z,KAAK81C,QAAQk1X,iBAAiB/4Z,EAAQ,IACtEs5Z,EAAY9oW,OAAS8oW,EAAY9oW,OAAS,EAC1CiH,EAAMjH,OAASiH,EAAMjH,OAAS,EAC9B,IAAI10C,EAAO/tB,KAAK81C,QAAQk1X,iBAAiB/4Z,GACzCjS,KAAK81C,QAAQk1X,iBAAiB/4Z,GAASjS,KAAK81C,QAAQk1X,iBAAiB/4Z,EAAQ,GAC7EjS,KAAK81C,QAAQk1X,iBAAiB/4Z,EAAQ,GAAK8b,EACjB,WAAtB/tB,KAAK81C,QAAQ/X,MACb/9B,KAAK81C,QAAQi1X,wBAKzBjC,EAAezta,UAAUw0a,kBAAoB,SAAUp3J,GACnD,IAAI/uM,EAAQ1pE,KAAK89Z,SAASrlJ,GAC1B,GAAI/uM,GAASA,EAAMjH,OAASziE,KAAK81C,QAAQ4b,OAAOj1D,OAAS,EAAG,CACxD,IAAIwV,EAAQy3D,EAAMjH,OAClB,GAA0B,QAAtBziE,KAAK81C,QAAQ/X,KAGb,IAAK,IAFD4xY,EAAe3va,KAAK89Z,SAAS99Z,KAAK81C,QAAQk1X,iBAAiB/4Z,EAAQ,IAAIw8C,QAAQ,GAE1ErwD,EAAK,EAAG0xa,EADQpmW,EAAMjb,QAC6BrwD,EAAK0xa,EAAqBrza,OAAQ2B,IAAM,CAChG,IAAIrB,EAAM+ya,EAAqB1xa,GAC3Buxa,GACA3va,KAAKsva,YAAYK,EAAc5ya,GAI3C,IAAIwua,EAAcvra,KAAK89Z,SAAS99Z,KAAK81C,QAAQk1X,iBAAiB/4Z,EAAQ,IACtEs5Z,EAAY9oW,OAAS8oW,EAAY9oW,OAAS,EAC1CiH,EAAMjH,OAASiH,EAAMjH,OAAS,EAC9B,IAAI10C,EAAO/tB,KAAK81C,QAAQk1X,iBAAiB/4Z,GACzCjS,KAAK81C,QAAQk1X,iBAAiB/4Z,GAASjS,KAAK81C,QAAQk1X,iBAAiB/4Z,EAAQ,GAC7EjS,KAAK81C,QAAQk1X,iBAAiB/4Z,EAAQ,GAAK8b,EACjB,WAAtB/tB,KAAK81C,QAAQ/X,MACb/9B,KAAK81C,QAAQi1X,wBAKzBjC,EAAezta,UAAU00a,WAAa,WAClC,GAAIn4W,GAAa53D,KAAK81C,SAAU,CAM5B,IAAK,IALDk6X,EAAWhwa,KAAK81C,QAAQwc,cAAcR,MAAMr1D,OAASuD,KAAK81C,QAAQwc,cAAcR,MAAM,GAAGxuD,GACvFtD,KAAK81C,QAAQwc,cAAcT,WAAW,GAAGvuD,GAC3C2O,EAAQjS,KAAK81C,QAAQwjB,UAAU02W,GAAUvtW,OACzCwtW,EAAWjwa,KAAK81C,QAAQ4b,OAAOnzD,QAAQyB,KAAKgna,eAAegJ,IAC3DnH,EAAc7oa,KAAK81C,QAAQ4b,OAAOu+W,GAAUpH,YACvC1sa,EAAI8V,EAAO9V,EAAI,EAAGA,IACnB0sa,EAAY1sa,KAEP0sa,EAAY1sa,EAAI,IAOjB0sa,EAAY1sa,GAAK0sa,EAAY1sa,EAAI,GACjC6D,KAAK81C,QAAQwjB,UAAUuvW,EAAY1sa,IAAIsmE,OAAStmE,IAPhD0sa,EAAY1sa,EAAI,GAAK0sa,EAAY1sa,GACjC6D,KAAK81C,QAAQwjB,UAAUuvW,EAAY1sa,EAAI,IAAIsmE,OAAStmE,SAC7C0sa,EAAY1sa,KAW/B,GAFA0sa,EAAY,GAAK7oa,KAAK81C,QAAQwjB,UAAU02W,GAAU1sa,GAClDtD,KAAK81C,QAAQwjB,UAAU02W,GAAUvtW,OAAS,EAChB,QAAtBziE,KAAK81C,QAAQ/X,KAAgB,CAG7B,IAFA,IACI52B,EAAS0ha,EADT1sa,EAAI,IAEAgL,GAAUhL,EAAI8V,GAClB9K,EAAS0ha,IAAc1sa,GAE3B6D,KAAKsva,YAAYU,EAAU7oa,QAG3BnH,KAAK81C,QAAQo6X,wBAKzBpH,EAAezta,UAAU80a,aAAe,WACpC,GAAIv4W,GAAa53D,KAAK81C,SAAU,CAQ5B,IAAK,IAPDo1X,EAAalra,KAAK81C,QAAQwc,cAAcR,MAAMr1D,OAASuD,KAAK81C,QAAQwc,cAAcR,MAAM,GAAGxuD,GACzFtD,KAAK81C,QAAQwc,cAAcT,WAAW,GAAGvuD,GAC3C2sa,EAAWjwa,KAAK81C,QAAQ4b,OAAOnzD,QAAQyB,KAAKgna,eAAekE,IAC3DrC,EAAc7oa,KAAK81C,QAAQ4b,OAAOu+W,GAAUpH,YAE5CuH,EAAc94Y,OAAOh5B,OAAOhB,KAAKura,GAAahxY,KAAK,SAAUsrB,EAAGrmB,GAAK,OAAOxF,OAAO6rB,GAAK7rB,OAAOwF,KAAO4iB,UAAU,IAE3GvjD,EADG6D,KAAK81C,QAAQwjB,UAAU4xW,GAAYzoW,OAC3BtmE,EAAIi0a,EAAaj0a,IAE7B0sa,EAAY1sa,KACP0sa,EAAY1sa,EAAI,IAOjB0sa,EAAY1sa,GAAK0sa,EAAY1sa,EAAI,GACjC6D,KAAK81C,QAAQwjB,UAAUuvW,EAAY1sa,IAAIsmE,OAAStmE,IAPhD0sa,EAAY1sa,EAAI,GAAK0sa,EAAY1sa,GACjC6D,KAAK81C,QAAQwjB,UAAUuvW,EAAY1sa,EAAI,IAAIsmE,OAAStmE,SAC7C0sa,EAAY1sa,KAW/B,GAFA0sa,EAAYuH,GAAepwa,KAAK81C,QAAQwjB,UAAU4xW,GAAY5na,GAC9DtD,KAAK81C,QAAQwjB,UAAU4xW,GAAYzoW,OAAS2tW,EAClB,QAAtBpwa,KAAK81C,QAAQ/X,KAAgB,CAC7B,IAAIsyY,EAAerwa,KAAK81C,QAAQu6X,aAG5Brva,GAFQhB,KAAKqva,iBAAiBrva,KAAK81C,QAAQwjB,UAAU4xW,GAAYn5Z,QAAQqI,UAE/Dw4B,GAAkBs4X,EAAa,kBAC7Clqa,EAAQP,WAAW6E,YAAYtE,GAC/B,IAAIuwZ,EAAYj+W,GAAatzC,KAAK81C,QAAQ90C,QAAQsC,IAClDtD,KAAK81C,QAAQw6X,gBAAgBhf,cAActxZ,KAAK81C,QAAQwjB,UAAU4xW,GAAYn5Z,QAASs+Z,EAAc9e,QAGrGvxZ,KAAK81C,QAAQo6X,wBAKzBpH,EAAezta,UAAU6wa,aAAe,SAAUqE,EAAWC,GACzD,IAAIlta,EAAKkta,GAAkB,SAI3B,OAHAD,EAAYA,EAAU14Y,KAAK,SAAUsrB,EAAGrmB,GACpC,OAAOqmB,EAAE7/C,GAAMw5B,EAAEx5B,MAKzBwla,EAAezta,UAAUo1a,YAAc,WACnC,GAAI74W,GAAa53D,KAAK81C,SAAU,CAC5B,IAAIm0X,EAASjqa,KAAK81C,QAAQwc,cAAcR,MAAMr1D,OAASuD,KAAK81C,QAAQwc,cAAcR,MAAM,GAAGxuD,GACrFtD,KAAK81C,QAAQwc,cAAcT,WAAW,GAAGvuD,GAC3CgsE,EAAatvE,KAAK81C,QAAQ4b,OAAOnzD,QAAQyB,KAAKgna,eAAeiD,IAC7DpB,EAAc7oa,KAAK81C,QAAQ4b,OAAO4d,GAAYu5V,YAE9C52Z,GADc3T,OAAOhB,KAAKura,GAAapsa,OAC/BuD,KAAK81C,QAAQwjB,UAAU2wW,IAC/ByG,KACA3iZ,EAAO/tB,KAAK81C,QAAQuyX,cAAcC,YAAYr2Z,EAAMF,QAAQ2kB,QAC5D3I,EAAKtxB,OAAS,IACdsxB,EAAO/tB,KAAKksa,aAAan+Y,IAE7B,IAAK,IAAI3vB,EAAK,EAAG0rB,EAASiE,EAAM3vB,EAAK0rB,EAAOrtB,OAAQ2B,IAAM,CACtD,IAAIjC,EAAI2tB,EAAO1rB,GACf,GAAI6T,EAAM3O,KAAOnH,EAAEmH,GAAI,CAEnB,GAAIgsE,IADetvE,KAAKgna,eAAe7qa,EAAEmH,IAAIm/D,QACTnrC,OAAOt3B,KAAK81C,QAAQwjB,UAAU2wW,GAAQxnW,QAAUnrC,OAAOn7B,EAAEsmE,SACzFxwD,EAAMF,QAAQ2kB,OAAOglX,WAAWv/Y,EAAE4V,QAAQ2kB,QAAS,CACnDg6Y,EAAelsa,KAAKrI,GACpB,QAIZ,GAAIu0a,EAAej0a,OAAS,EAAG,CAC3B,IAAIk0a,EAAgBD,EAAe,GAAGjuW,OAClCmuW,EAAgB3+Z,EAAMwwD,OACbomW,EAAY8H,GAEzB3wa,KAAK81C,QAAQ4b,OAAO,GAAGm3W,YAAY8H,GAAiB1+Z,EAAM3O,GAC1DtD,KAAK81C,QAAQwjB,UAAUuvW,EAAY8H,IAAgBluW,OAASkuW,EAC5D3wa,KAAK81C,QAAQ4b,OAAO,GAAGm3W,YAAY+H,GAAiBF,EAAe,GAAGpta,GACtEtD,KAAK81C,QAAQwjB,UAAUuvW,EAAY+H,IAAgBnuW,OAASmuW,EAClC,QAAtB5wa,KAAK81C,QAAQ/X,KACb/9B,KAAKsva,YAAYzG,EAAYvxY,OAAOo5Y,EAAe,GAAGjuW,SAAUwnW,GAGhEjqa,KAAK81C,QAAQo6X,yBAM7BpH,EAAezta,UAAUw1a,aAAe,WACpC,GAAIj5W,GAAa53D,KAAK81C,SAAU,CAC5B,IAAIk6X,EAAWhwa,KAAK81C,QAAQwc,cAAcR,MAAMr1D,OAASuD,KAAK81C,QAAQwc,cAAcR,MAAM,GAAGxuD,GACvFtD,KAAK81C,QAAQwc,cAAcT,WAAW,GAAGvuD,GAC3C2sa,EAAWjwa,KAAK81C,QAAQ4b,OAAOnzD,QAAQyB,KAAKgna,eAAegJ,IAC3DnH,EAAc7oa,KAAK81C,QAAQ4b,OAAOu+W,GAAUpH,YAE5Ctoa,GADcjC,OAAOhB,KAAKura,GAAapsa,OAChCuD,KAAK81C,QAAQwjB,UAAU02W,IAC9BU,KACA3iZ,EAAO/tB,KAAK81C,QAAQuyX,cAAcC,YAAY/na,EAAKwR,QAAQ2kB,QAC3D3I,EAAKtxB,OAAS,IACdsxB,EAAO/tB,KAAKksa,aAAan+Y,IAE7B,IAAK,IAAI3vB,EAAK,EAAG0ya,EAAS/iZ,EAAM3vB,EAAK0ya,EAAOr0a,OAAQ2B,IAAM,CACtD,IAAIjC,EAAI20a,EAAO1ya,GACf,GAAImC,EAAK+C,KAAOnH,EAAEmH,GAAI,CAEd2sa,IADejwa,KAAKgna,eAAe7qa,EAAEmH,IAAIm/D,QACXnrC,OAAOt3B,KAAK81C,QAAQwjB,UAAU02W,GAAUvtW,QAAUnrC,OAAOn7B,EAAEsmE,SACzFliE,EAAKwR,QAAQ2kB,OAAOglX,WAAWv/Y,EAAE4V,QAAQ2kB,SACzCg6Y,EAAelsa,KAAKrI,IAIhC,GAAIu0a,EAAej0a,OAAS,EAAG,CAC3B,IAAIk0a,EAAgBD,EAAeA,EAAej0a,OAAS,GAAGgmE,OAC1DmuW,EAAgBrwa,EAAKkiE,OACZomW,EAAY8H,GAEzB9H,EAAY8H,GAAiBpwa,EAAK+C,GAClCtD,KAAK81C,QAAQwjB,UAAUuvW,EAAY8H,IAAgBluW,OAASkuW,EAC5D9H,EAAY+H,GAAiBF,EAAeA,EAAej0a,OAAS,GAAG6G,GACvEtD,KAAK81C,QAAQwjB,UAAUuvW,EAAY+H,IAAgBnuW,OAASmuW,EAClC,QAAtB5wa,KAAK81C,QAAQ/X,KACb/9B,KAAKsva,YAAYU,EAAUnH,EAAY6H,EAAeA,EAAej0a,OAAS,GAAGgmE,SAGjFziE,KAAK81C,QAAQo6X,yBAK7BpH,EAAezta,UAAU01a,oBAAsB,WAC3C,IAAI7B,EAAgBlva,KAAK81C,QAAQwc,cACjC48W,EAAcl3M,KAAKh4N,KAAK81C,SACW,IAA/Bo5X,EAAcp9W,MAAMr1D,QAAoD,IAApCyya,EAAcr9W,WAAWp1D,SAC7Dyya,EAAcriY,YAAcqiY,EAAcp9W,MAAM,GAAGjlB,YACnDqiY,EAAcn9Z,QAAQ86B,YAAcqiY,EAAcp9W,MAAM,GAAGjlB,YAC3DqiY,EAAcn9Z,QAAQ46B,MAAQuiY,EAAcp9W,MAAM,GAAGnlB,QAI7Dm8X,EAAezta,UAAU49Z,sBAAwB,SAAU/sW,GACvDlsD,KAAKgxa,0BACLhxa,KAAKu5Z,iBACL,IAAI0X,KACAC,KACJD,EAAWjxa,KAAK81C,QAAQq7X,mBAAmBF,IAEvCC,EADuD,sBAAvDlxa,KAAK81C,QAAQwc,cAAc8+W,wBACbnlX,GAAeC,EAAQ+kX,GAGvBjxa,KAAK81C,QAAQuyX,cAAcC,YAAYp8W,IAEzCzvD,QACZuD,KAAKs5Z,cAAc4X,GAAa,IAGxCpI,EAAezta,UAAU21a,wBAA0B,WAC/C,IACIhwa,EADa6xC,GAAmB7yC,KAAK81C,QAAQ90C,QAAQsC,IAChCspB,eAAe5sB,KAAK81C,QAAQ90C,QAAQsC,GAAK,mCAC9DtC,GACAuD,EAAOvD,IAIf8na,EAAezta,UAAUw/Z,kBAAoB,SAAUr7W,EAAUziD,EAAK+2B,EAAO8V,EAASziC,EAAQwzZ,GAC1F,IACI96W,EAEA+nS,EAEAD,EAEA0pF,GAAmB,EAYvB,OAXIt0a,aAAespD,GAEfxG,EADgB9iD,EACU80D,WAAW,GAEhC90D,aAAe+oD,IAAa9lD,KAAK81C,QAAQqjB,uBAC9Cn5D,KAAKu5Z,iBACL15W,EAAY7/C,KAAK81C,QAAQqjB,sBAEZ,sBAAb3Z,GAAiD,sBAAbA,IACpC6xX,GAAmB,GAEN,uBAAb7xX,GAAkD,sBAAbA,GACrCooS,EAAK9zT,EAAM/mB,GAAKska,EAAmBznY,EAAQijB,aAAa9/C,EAAI8yC,EAAU9I,YAAYhqC,GAClF46U,EAAK7zT,EAAM9mB,GAAKqka,EAAmBznY,EAAQijB,aAAa7/C,EAAI6yC,EAAU9I,YAAY/pC,GAC3EhN,KAAKsxa,cAAczxX,EAAW+nS,EAAID,EAAI,KAAM7zT,EAAO0rB,OAAUrkD,EAAWgM,EAAQwzZ,OAAcx/Z,EAAWyuC,KAGhHg+S,EAAK9zT,EAAM/mB,GAAKska,EAAmBznY,EAAQkjB,aAAa//C,EAAI8yC,EAAUd,YAAYhyC,GAClF46U,EAAK7zT,EAAM9mB,GAAKqka,EAAmBznY,EAAQkjB,aAAa9/C,EAAI6yC,EAAUd,YAAY/xC,GAC3EhN,KAAKuxa,cAAc1xX,EAAW+nS,EAAID,EAAI,KAAM7zT,EAAO0rB,OAAUrkD,EAAWyuC,KAGvFk/X,EAAezta,UAAU89Z,kBAAoB,WACzC,IAAIiW,EAAgBpva,KAAK81C,QAAQwc,cACjC,OAAQ88W,EAAmB,MAAE70Z,OAAO60Z,EAAcv9W,aAGtDi3W,EAAezta,UAAUk+Z,eAAiB,SAAUiY,GAChD,GAAI55W,GAAa53D,KAAK81C,SAAU,CAC5B,IAAIs5X,EAAgBpva,KAAK81C,QAAQwc,cAC7B4mW,EAAal5Z,KAAKm5Z,oBAClBpnU,GACA/oF,SAAUkwZ,EAAY5xZ,YAAcgna,MAAOtua,KAAK81C,QAAQuT,eACxD/a,MAAO,WAAY5nC,KAAM,UAAWmyB,QAAQ,GAE5C24Y,GACAxxa,KAAK81C,QAAQ0zG,aAAas3P,GAAaytB,gBAAiBx8U,GAEvDA,EAAIl5D,SACLu2Y,EAAcvja,QAAU,EACxBuja,EAAcnja,QAAU,EACxBmja,EAAcp5Z,MAAQ,EACtBo5Z,EAAcr5Z,OAAS,EACvBq5Z,EAAcviY,YAAc,EAC5BuiY,EAAct9W,SACds9W,EAAcv9W,cACdu9W,EAAcr9Z,QAAU,KACxB/R,KAAK81C,QAAQ27X,qBACTD,IACAz/U,GACI/oF,SAAUkwZ,EAAY5xZ,YAAcgna,MAAOtua,KAAK81C,QAAQuT,eACxD/a,MAAO,UAAW5nC,KAAM,UAAWmyB,QAAQ,GAE/C74B,KAAK81C,QAAQ0zG,aAAas3P,GAAaytB,gBAAiBx8U,OAMxE+2U,EAAezta,UAAUq1G,KAAO,SAAU3zG,EAAK6qV,EAAID,GAC/C,IAAIqkF,EAEJ,GAAI7lX,GAAQppD,IAAQiD,KAAKy+Z,yBAAyB72E,EAAID,EAAI5qV,EAAIgV,QAAQ2kB,SAAWwyB,GAAgBlpD,KAAK81C,SAClG,GAAI/4C,aAAeoqD,GAAM,CACrB,IAAIgzW,GAActuZ,QAAS9O,EAAI8O,QAASI,QAASlP,EAAIkP,SAGrD,GAFAlP,EAAI8O,SAAW+7U,EACf7qV,EAAIkP,SAAW07U,EACX5qV,EAAIqd,SAEJ,IAAK,IADD03C,EAAQ9xD,KAAKy8Z,kBAAkB1/Z,MAC1BZ,EAAI,EAAGA,EAAI21D,EAAMr1D,OAAQN,IAC9B6va,EAAYhsa,KAAK81C,QAAQwjB,UAAUxH,EAAM31D,GAAGmH,IAC5CtD,KAAK0wG,KAAKs7T,EAAUpkF,EAAID,GAGhC3nV,KAAK81C,QAAQ47X,mBAAmB30a,EAAKo9Z,GAAatuZ,QAAS9O,EAAI8O,QAASI,QAASlP,EAAIkP,cAEpF,CACD,IAAI4zC,EAAY9iD,EACZsiD,EAA4B,WAAnBQ,EAAUn5C,KACnBira,GAAU,EAad,GAZK9xX,EAAU7I,cAIX26X,GAAU,EAHV3xa,KAAKsxa,cAAczxX,EAAW+nS,EAAID,GAAI,EAAM,KAAM,GAAItoS,GAKrDQ,EAAUtI,cAIXo6X,GAAU,EAHV3xa,KAAKuxa,cAAc1xX,EAAW+nS,EAAID,GAAI,EAAM,KAAM,GAAItoS,IAKrDsyX,EAAS,CACV3xa,KAAKoga,iBAAiBvgX,EAAW+nS,EAAID,GAAI,GACzC,IAAItvR,GAASthB,YAAa8I,EAAU9I,YAAagI,YAAac,EAAUd,aACxE/+C,KAAK81C,QAAQ8zX,wBAAwB/pX,KAAewY,MAMpEywW,EAAezta,UAAUola,eAAiB,SAAU5gX,GAChD,IAAIwY,GACAthB,YAAa8I,EAAU9I,YAAagI,YAAac,EAAUd,YAC3DzH,SAAUuI,EAAUvI,SAAWuI,EAAUvI,cAAWn8C,EACpD6vZ,SAAUnrW,EAAUmrW,SAAWnrW,EAAUmrW,cAAW7vZ,EACpD+9D,aAAcrZ,EAAUqZ,aAAerZ,EAAUqZ,kBAAe/9D,EAChE8vZ,aAAcprW,EAAUorW,aAAeprW,EAAUorW,kBAAe9vZ,EAChE2tC,SAAU+W,EAAU/W,SAAW+W,EAAU/W,cAAW3tC,GAExD6E,KAAK81C,QAAQ8zX,wBAAwB/pX,KAAewY,GAEpDr4D,KAAK81C,QAAQ+jX,kBAGjBiP,EAAezta,UAAUi2a,cAAgB,SAAUv0a,EAAK6qV,EAAID,EAAIqnF,EAAel7Y,EAAO0rB,EAAUH,EAAQl4C,EAAQwzZ,EAAciX,EAAchoY,GACxI,IAAIiW,EAAY7/C,KAAK81C,QAAQwjB,UAAUv8D,EAAIuG,IACvCm7Z,EAA2Bz+Z,KAAKy+Z,yBAAyB72E,EAAID,EAAI9nS,EAAU9tC,QAAQ2kB,QASvF,GARI8vB,GAAiB3G,IAAc4+W,GACd,sBAAbj/W,GAAqC0J,GAAgBlpD,KAAK81C,WAC9D+J,EAAU9I,YAAYhqC,GAAK66U,EAC3B/nS,EAAU9I,YAAY/pC,GAAK26U,EACV,uBAAbnoS,GAAwD,eAAnBK,EAAUn5C,MAC/C1G,KAAK6xa,oBAAoBhyX,EAAW14C,EAAQwzZ,EAAciX,IAG3C,WAAnB/xX,EAAUn5C,KACV,GAAIkjC,EACA5pC,KAAK8xa,sBAAsB/0a,EAAmB,KAAbyiD,EAAmB,qBAAuBA,EAAUooS,EAAID,EAAI/9S,EAAS9V,GAAQurB,QAG9G,IAAK,IAAIljD,EAAI,EAAGA,EAAIY,EAAI+rC,SAASrsC,OAAQN,IACrC6D,KAAK8xa,sBAAsB/0a,EAAmB,KAAbyiD,EAAmB,qBAAuBA,EAAUooS,EAAID,EAAI5qV,EAAI+rC,SAAS3sC,GAAI23B,GAAQurB,GAOlI,OAHK2vX,GACDhva,KAAKyga,eAAe5gX,GAEjB4+W,GAKXqK,EAAezta,UAAUw2a,oBAAsB,SAAUhyX,EAAW14C,EAAQwzZ,EAAciX,GACtF,GAAI/xX,EAAU/W,UAAgD,OAApC+W,EAAU/W,SAAS,GAAGtT,aACtCruB,GAAiC,KAAvB04C,EAAUvI,UAAoBs6X,GAAe,CAC7D,IAAIhza,EAAQihD,EAAU/W,SAAS,GAC3BjqC,EAASghD,EAAU/W,SAAS,GAC5BvoC,EAAOP,KAAK81C,QAAQwjB,UAAUzZ,EAAUvI,UACxCy6X,OAAW,EAiBf,GAhBAnza,EAAM+4B,OAAO,GAAKkoB,EAAU9I,YACJ,QAApBn4C,EAAM42B,WAA2C,WAApB52B,EAAM42B,WACnC52B,EAAM+4B,OAAO/4B,EAAM+4B,OAAOl7B,OAAS,GAAGsQ,EAAI8yC,EAAU9I,YAAYhqC,EAChElO,EAAO84B,OAAO,GAAG3qB,EAAIpO,EAAM+4B,OAAO/4B,EAAM+4B,OAAOl7B,OAAS,GAAGuQ,IAG3DpO,EAAM+4B,OAAO/4B,EAAM+4B,OAAOl7B,OAAS,GAAGuQ,EAAI6yC,EAAU9I,YAAY/pC,EAChEnO,EAAO84B,OAAO,GAAG5qB,EAAInO,EAAM+4B,OAAO/4B,EAAM+4B,OAAOl7B,OAAS,GAAGsQ,GAE3DnO,EAAM42B,YAAc52B,EAAMnC,QAA2B,IAAjBmC,EAAMnC,UAC1CmC,EAAMnC,OAASy9C,GAAM8F,eAAephD,EAAM+4B,OAAO,GAAI/4B,EAAM+4B,OAAO/4B,EAAM+4B,OAAOl7B,OAAS,KAExFoC,EAAO22B,YAAc32B,EAAOpC,QAA4B,IAAlBoC,EAAOpC,UAC7CoC,EAAOpC,OAASy9C,GAAM8F,eAAephD,EAAM+4B,OAAO/4B,EAAM+4B,OAAOl7B,OAAS,GAAIoC,EAAO84B,OAAO94B,EAAO84B,OAAOl7B,OAAS,IACjHoC,EAAO22B,UAAY0kB,GAAM1kB,UAAU52B,EAAM+4B,OAAO/4B,EAAM+4B,OAAOl7B,OAAS,GAAIoC,EAAO84B,OAAO94B,EAAO84B,OAAOl7B,OAAS,KAEpF,KAA3BojD,EAAUqZ,cAAuBt6D,EAAMnC,OAAS,GAChD,GAAIojD,EAAU/W,SAASrsC,OAAS,EAAG,CAC/B,IAAI6rC,EAAOuX,EAAU/W,SAAS,GAC1BkpY,EAAgB93X,GAAM1kB,UAAU8S,EAAK3Q,OAAO,GAAI2Q,EAAK3Q,OAAO,IAC5D/4B,EAAM42B,YAAcilB,GAAqBu3X,IACjB,UAApBpza,EAAM42B,UACN8S,EAAK3Q,OAAO,GAAG5qB,EAAInO,EAAM+4B,OAAO/4B,EAAM+4B,OAAOl7B,OAAS,GAAGsQ,EAAIxM,EAAKwR,QAAQw2B,QAAQoQ,YAAY5rC,EAAI,GAEzE,SAApBnO,EAAM42B,UACX8S,EAAK3Q,OAAO,GAAG5qB,EAAInO,EAAM+4B,OAAO/4B,EAAM+4B,OAAOl7B,OAAS,GAAGsQ,EAAIxM,EAAKwR,QAAQw2B,QAAQqQ,WAAW7rC,EAAI,GAExE,QAApBnO,EAAM42B,UACX8S,EAAK3Q,OAAO,GAAG3qB,EAAIpO,EAAM+4B,OAAO/4B,EAAM+4B,OAAOl7B,OAAS,GAAGuQ,EAAIzM,EAAKwR,QAAQw2B,QAAQkQ,UAAUzrC,EAAI,GAGhGs7B,EAAK3Q,OAAO,GAAG3qB,EAAIpO,EAAM+4B,OAAO/4B,EAAM+4B,OAAOl7B,OAAS,GAAGuQ,EAAIzM,EAAKwR,QAAQw2B,QAAQmQ,aAAa1rC,EAAI,GAEnGs7B,EAAK9S,WAAa8S,EAAK7rC,SACvB6rC,EAAK7rC,OAASy9C,GAAM8F,eAAe1X,EAAK3Q,OAAO,GAAI2Q,EAAK3Q,OAAO2Q,EAAK3Q,OAAOl7B,OAAS,KAExFmC,EAAMnC,OAASy9C,GAAM8F,eAAephD,EAAM+4B,OAAO,GAAI/4B,EAAM+4B,OAAO/4B,EAAM+4B,OAAOl7B,OAAS,KAEnFmC,EAAM42B,YAAcw8Y,GAAiB1pY,EAAK9S,WAAa8S,EAAK7rC,QACzC,QAApBmC,EAAM42B,WAA2C,WAApB52B,EAAM42B,WACnC8S,EAAK3Q,OAAO,GAAK/4B,EAAM+4B,OAAO,GAC9B2Q,EAAK3Q,OAAO2Q,EAAK3Q,OAAOl7B,OAAS,GAAGsQ,EAAIu7B,EAAK3Q,OAAO,GAAG5qB,IAGvDu7B,EAAK3Q,OAAO,GAAK/4B,EAAM+4B,OAAO,GAC9B2Q,EAAK3Q,OAAO2Q,EAAK3Q,OAAOl7B,OAAS,GAAGuQ,EAAIs7B,EAAK3Q,OAAO,GAAG3qB,GAE3Ds7B,EAAK7rC,OAASy9C,GAAM8F,eAAe1X,EAAK3Q,OAAO,GAAI2Q,EAAK3Q,OAAO2Q,EAAK3Q,OAAOl7B,OAAS,IACpFojD,EAAU/W,SAASzgB,OAAO,EAAG,IAG7BzpB,EAAMnC,OAAS,QAInBmC,EAAMnC,OAAS,QAGlB,GAAImC,EAAMnC,OAAS,EACpB,GAA2B,KAAvBojD,EAAUvI,SAAiB,CAkB3B,GAjByB,UAArBz4C,EAAO22B,WACPu8Y,EAAWxxa,EAAKwR,QAAQw2B,QAAQoQ,YAChC95C,EAAO84B,OAAO94B,EAAO84B,OAAOl7B,OAAS,GAAGuQ,EAAI+ka,EAAS/ka,GAE3B,SAArBnO,EAAO22B,WACZu8Y,EAAWxxa,EAAKwR,QAAQw2B,QAAQqQ,WAChC/5C,EAAO84B,OAAO94B,EAAO84B,OAAOl7B,OAAS,GAAGuQ,EAAI+ka,EAAS/ka,GAE3B,QAArBnO,EAAO22B,WACZu8Y,EAAWxxa,EAAKwR,QAAQw2B,QAAQkQ,UAChC55C,EAAO84B,OAAO94B,EAAO84B,OAAOl7B,OAAS,GAAGsQ,EAAIgla,EAAShla,IAGrDgla,EAAWxxa,EAAKwR,QAAQw2B,QAAQmQ,aAChC75C,EAAO84B,OAAO94B,EAAO84B,OAAOl7B,OAAS,GAAGsQ,EAAIgla,EAAShla,GAEzDlO,EAAOpC,OAASy9C,GAAM8F,eAAe+xX,EAAUlza,EAAO84B,OAAO94B,EAAO84B,OAAOl7B,OAAS,IAChFojD,EAAU/W,SAASrsC,OAAS,EAAG,EAC3B6rC,EAAOuX,EAAU/W,SAAS,IACrBtT,WAAa8S,EAAK7rC,SACvB6rC,EAAK7rC,OAASy9C,GAAM8F,eAAenhD,EAAO84B,OAAO94B,EAAO84B,OAAOl7B,OAAS,GAAI6rC,EAAK3Q,OAAO2Q,EAAK3Q,OAAOl7B,OAAS,KAGrHojD,EAAU/W,SAASzgB,OAAO,EAAG,QAG7Bw3B,EAAU/W,SAASzgB,OAAO,EAAG,QAKjClhB,GAAUwzZ,GAAgB96W,EAAUqZ,eAAiByhW,GACrD96W,EAAU/W,UAAgD,OAApC+W,EAAU/W,SAAS,GAAGtT,WAAsBruB,GAAUA,aAAkBggD,GAC9FnnD,KAAKiya,sBAAsBpyX,EAAW14C,EAAQwzZ,GAEzCxzZ,IAAW04C,EAAUvI,WAAanwC,EAAO7D,IAAiC,KAA3Bu8C,EAAUqZ,eAC9DrZ,EAAU/W,UAAgD,OAApC+W,EAAU/W,SAAS,GAAGtT,WAAsBruB,GAAUA,aAAkBggD,IAC9FnnD,KAAKkya,sBAAsBryX,EAAW14C,IAOlD2ha,EAAezta,UAAU42a,sBAAwB,SAAUpyX,EAAW14C,EAAQwzZ,GAC1E,IAAIriX,EAAOt4C,KAAK81C,QAAQmpE,WAAW93G,EAAO4K,QAAS4oZ,GAC/C7mY,GAAU/mB,EAAGurC,EAAKzsC,QAASmB,EAAGsrC,EAAKrsC,SACnCupB,EAAY6hB,GAAiBvjB,EAAO3sB,EAAO4K,QAAQw2B,QAASphC,EAAO4K,QAAQ2kB,QAC3E6+B,EAAe1V,EAAU/W,SAAS,GAClCqpY,EAAgBtyX,EAAU/W,SAAS,GACvC,GAAIysB,EAAa//B,YAAcA,EAAW,CACtC,IAAIsT,KACAq4X,KACJ,GAAI5rW,EAAa//B,YAAcilB,GAAqBjlB,GAAY,CAC5D2rY,KACA,IAAIiR,OAAa,EACC,QAAd58Y,GAAqC,WAAdA,GACvB48Y,EAA4B,QAAd58Y,GACV9uB,KAAM,aAAc2ra,YAAY,EAAM78Y,UAAWA,EACjD/4B,OAAQ4P,KAAKE,IAAIgpD,EAAa59B,OAAO,GAAG3qB,EAAI8mB,EAAM9mB,KAG9CtG,KAAM,aAAc2ra,YAAY,EAAM78Y,UAAWA,EACjD/4B,OAAQ4P,KAAKE,IAAIunB,EAAM9mB,EAAIuoD,EAAa59B,OAAO,GAAG3qB,IAE1Dm0Z,EAAa5rW,EAAa59B,OAAO,GAAG5qB,EAAI+mB,EAAM/mB,GACxCrG,KAAM,aAAc2ra,YAAY,EAAM78Y,UAAW,QAAS/4B,OAAS84D,EAAa59B,OAAO,GAAG5qB,EAAI+mB,EAAM/mB,IACpGrG,KAAM,aAAc2ra,YAAY,EAAM78Y,UAAW,OAAQ/4B,OAASq3B,EAAM/mB,EAAIwoD,EAAa59B,OAAO,GAAG5qB,KAGzGqla,EAA4B,UAAd58Y,GACV9uB,KAAM,aAAc2ra,YAAY,EAAM78Y,UAAWA,EACjD/4B,OAAQ4P,KAAKE,IAAIgpD,EAAa59B,OAAO,GAAG5qB,EAAI+mB,EAAM/mB,KAG9CrG,KAAM,aAAc2ra,YAAY,EAAM78Y,UAAWA,EACjD/4B,OAAQ4P,KAAKE,IAAIunB,EAAM/mB,EAAIwoD,EAAa59B,OAAO,GAAG5qB,IAE1Do0Z,EAAa5rW,EAAa59B,OAAO,GAAG3qB,EAAI8mB,EAAM9mB,GACxCtG,KAAM,aAAc8uB,UAAW,MAAO68Y,YAAY,EAAM51a,OAAS84D,EAAa59B,OAAO,GAAG3qB,EAAI8mB,EAAM9mB,IAClGtG,KAAM,aAAc8uB,UAAW,SAAU68Y,YAAY,EAAM51a,OAASq3B,EAAM9mB,EAAIuoD,EAAa59B,OAAO,GAAG3qB,IAE/G87B,EAAStkC,KAAK,IAAI22C,GAAkB0E,EAAW,WAAYuyX,GAAY,IACvEtpY,EAAStkC,KAAK,IAAI22C,GAAkB0E,EAAW,WAAYshX,GAAW,SAGtEA,GAAcz6Z,KAAM,aAAc8uB,UAAWA,EAAW/4B,OAAQ,GAAI41a,YAAY,GAChFvpY,EAAStkC,KAAK,IAAI22C,GAAkB0E,EAAW,WAAYshX,GAAW,IAEtE5rW,EAAa//B,YAAcilB,GAAqBjlB,KAC9B,QAAdA,GAAqC,WAAdA,GACvB+/B,EAAa59B,OAAO,GAAG5qB,EAAI+mB,EAAM/mB,EACjCwoD,EAAa59B,OAAO,GAAG3qB,EAAIuoD,EAAa59B,OAAO49B,EAAa59B,OAAOl7B,OAAS,GAAGuQ,EAAmB,QAAdwoB,EAChF1B,EAAM9mB,EAAI,GAAK8mB,EAAM9mB,EAAI,KAG7BuoD,EAAa59B,OAAO,GAAG3qB,EAAI8mB,EAAM9mB,EACjCuoD,EAAa59B,OAAO,GAAG5qB,EAAIwoD,EAAa59B,OAAO49B,EAAa59B,OAAOl7B,OAAS,GAAGsQ,EAAmB,UAAdyoB,EAChF1B,EAAM/mB,EAAI,GAAK+mB,EAAM/mB,EAAI,IAEjCwoD,EAAa94D,OAASy9C,GAAM8F,eAAeuV,EAAa59B,OAAO,GAAI49B,EAAa59B,OAAO49B,EAAa59B,OAAOl7B,OAAS,IACpH01a,EAAc11a,OAASy9C,GAAM8F,eAAeuV,EAAa59B,OAAO49B,EAAa59B,OAAOl7B,OAAS,GAAI01a,EAAcx6Y,OAAOw6Y,EAAcx6Y,OAAOl7B,OAAS,KAExJojD,EAAU/W,SAAWA,EAASvuB,OAAOslC,EAAU/W,eAG/CysB,EAAa59B,OAAO,GAAK7D,EACP,QAAd0B,GAAqC,WAAdA,EACvB+/B,EAAa59B,OAAO49B,EAAa59B,OAAOl7B,OAAS,GAAGsQ,EAAI+mB,EAAM/mB,EAG9DwoD,EAAa59B,OAAO49B,EAAa59B,OAAOl7B,OAAS,GAAGuQ,EAAI8mB,EAAM9mB,EAElEuoD,EAAa94D,OAASy9C,GAAM8F,eAAeuV,EAAa59B,OAAO,GAAI49B,EAAa59B,OAAO49B,EAAa59B,OAAOl7B,OAAS,IACpH01a,EAAc11a,OAASy9C,GAAM8F,eAAeuV,EAAa59B,OAAO49B,EAAa59B,OAAOl7B,OAAS,GAAI01a,EAAcx6Y,OAAOw6Y,EAAcx6Y,OAAOl7B,OAAS,KAO5Jqsa,EAAezta,UAAUo/Z,sBAAwB,SAAU56W,EAAWyyX,GAClE,IAAK,IAAIn2a,EAAI,EAAGA,EAAI0jD,EAAU/W,SAASrsC,OAAS,EAAGN,IAAK,CACpD,IAAIytC,EAAUiW,EAAU/W,SAAS,GAC7Bc,EAAQyoY,aACJC,EACA1oY,EAAQyoY,YAAa,GAGrBxyX,EAAU/W,SAASzgB,OAAOlsB,EAAG,GAC7BA,QAQhB2sa,EAAezta,UAAU62a,sBAAwB,SAAUryX,EAAW14C,GAClEnH,KAAKy6Z,sBAAsB56W,GAC3B,IACI9I,EACAw7X,EAFAv7X,EAAgB7vC,EAAO4K,QAAQqI,SAAS,GAAGmuB,QAG3CgtB,EAAe1V,EAAU/W,SAAS,GAClC04X,EAAc3hX,EAAU/W,SAAS,GACjCA,KACJ,GAA+B,UAA3BysB,EAAa//B,WAAoD,SAA3B+/B,EAAa//B,UAEnD,GADAuhB,EAA0C,SAA3Bwe,EAAa//B,UAAwBwhB,EAAc4B,WAAa5B,EAAc2B,YACzF4c,EAAa94D,OAASu6C,EAAchhC,OAAsC,SAA3Bu/C,EAAa//B,WAC5DuhB,EAAYhqC,GAAKwoD,EAAa59B,OAAO,GAAG5qB,GAAkC,UAA3BwoD,EAAa//B,WAC5DuhB,EAAYhqC,GAAKwoD,EAAa59B,OAAO,GAAG5qB,EACxCwoD,EAAa59B,OAAO,GAAG3qB,EAAIuoD,EAAa59B,OAAO49B,EAAa59B,OAAOl7B,OAAS,GAAGuQ,EAAI+pC,EAAY/pC,EAC/FuoD,EAAa59B,OAAO,GAAG5qB,EAAIgqC,EAAYhqC,EACvCwoD,EAAa94D,OAASy9C,GAAM8F,eAAeuV,EAAa59B,OAAO,GAAI49B,EAAa59B,OAAO49B,EAAa59B,OAAOl7B,OAAS,IACpH+ka,EAAY/ka,OAASy9C,GAAM8F,eAAeuV,EAAa59B,OAAO49B,EAAa59B,OAAOl7B,OAAS,GAAI+ka,EAAY7pY,OAAO6pY,EAAY7pY,OAAOl7B,OAAS,QAE7I,CACD,IAAI+4B,OAAY,EAOhB+8Y,EAA8B,YAL1B/8Y,EADAgsY,EAAYhsY,UACAgsY,EAAYhsY,UAGZ0kB,GAAM1kB,UAAUgsY,EAAY7pY,OAAO,GAAI6pY,EAAY7pY,OAAO6pY,EAAY7pY,OAAOl7B,OAAS,KAE5Du6C,EAAc0B,aAAe1B,EAAcyB,UACjF+oX,EAAY/ka,QAAU+ka,EAAYhsY,YAClCgsY,EAAY/ka,OACO,QAAd+4B,EAAuB+/B,EAAa59B,OAAO49B,EAAa59B,OAAOl7B,OAAS,GAAGuQ,GAAKula,EAAavla,EAAI,IAC7Fula,EAAavla,EAAI,GAAMuoD,EAAa59B,OAAO49B,EAAa59B,OAAOl7B,OAAS,GAAGuQ,GAExFuoD,EAAa94D,OAAS84D,EAAa59B,OAAO49B,EAAa59B,OAAOl7B,OAAS,GAAGsQ,EAAIwla,EAAaxla,EAC3FwoD,EAAa//B,UAAa+/B,EAAa94D,OAAS,EAAK,QAAU,OAC/D,IAAI0ka,GAAcz6Z,KAAM,aAAc8uB,UAAWA,EAAW/4B,OAAQ,IACpEqsC,EAAStkC,KAAK,IAAI22C,GAAkB0E,EAAW,WAAYshX,GAAW,IACtEthX,EAAU/W,SAAWA,EAASvuB,OAAOslC,EAAU/W,eAKnD,GADAiO,EAA0C,WAA3Bwe,EAAa//B,UAA0BwhB,EAAc0B,aAAe1B,EAAcyB,UAC7F8c,EAAa94D,OAASu6C,EAAcjhC,QAAuC,QAA3Bw/C,EAAa//B,WAC7DuhB,EAAY/pC,GAAKuoD,EAAa59B,OAAO,GAAG3qB,GACZ,WAA3BuoD,EAAa//B,WAA0BuhB,EAAY/pC,GAAKuoD,EAAa59B,OAAO,GAAG3qB,EAChFuoD,EAAa59B,OAAO,GAAG5qB,EAAIwoD,EAAa59B,OAAO49B,EAAa59B,OAAOl7B,OAAS,GAAGsQ,EAAIgqC,EAAYhqC,EAC/FwoD,EAAa59B,OAAO,GAAG3qB,EAAI+pC,EAAY/pC,EACvCuoD,EAAa94D,OAASy9C,GAAM8F,eAAeuV,EAAa59B,OAAO,GAAI49B,EAAa59B,OAAO49B,EAAa59B,OAAOl7B,OAAS,IACpH+ka,EAAY/ka,OAASy9C,GAAM8F,eAAeuV,EAAa59B,OAAO49B,EAAa59B,OAAOl7B,OAAS,GAAI+ka,EAAY7pY,OAAO6pY,EAAY7pY,OAAOl7B,OAAS,QAE7I,CACD81a,EAA0C,SAA1B/Q,EAAYhsY,UAAwBwhB,EAAc4B,WAAa5B,EAAc2B,YACzFnjB,OAAY,EAEZA,EADAgsY,EAAYhsY,UACAgsY,EAAYhsY,UAGZ0kB,GAAM1kB,UAAUgsY,EAAY7pY,OAAO,GAAI6pY,EAAY7pY,OAAO6pY,EAAY7pY,OAAOl7B,OAAS,IAElG+ka,EAAY/ka,QAAU+ka,EAAYhsY,YAClCgsY,EAAY/ka,OACO,SAAd+4B,EAAwB+/B,EAAa59B,OAAO49B,EAAa59B,OAAOl7B,OAAS,GAAGsQ,GAAKwla,EAAaxla,EAAI,IAC9Fwla,EAAaxla,EAAI,GAAMwoD,EAAa59B,OAAO49B,EAAa59B,OAAOl7B,OAAS,GAAGsQ,GAExFwoD,EAAa94D,OAAS84D,EAAa59B,OAAO49B,EAAa59B,OAAOl7B,OAAS,GAAGuQ,EAAIula,EAAavla,EAC3FuoD,EAAa//B,UAAa+/B,EAAa94D,OAAS,EAAK,SAAW,MAC5D0ka,GAAcz6Z,KAAM,aAAc8uB,UAAWA,EAAW/4B,OAAQ,IACpEqsC,EAAStkC,KAAK,IAAI22C,GAAkB0E,EAAW,WAAYshX,GAAW,IACtEthX,EAAU/W,SAAWA,EAASvuB,OAAOslC,EAAU/W,YAO3DggY,EAAezta,UAAUy2a,sBAAwB,SAAUjyX,EAAW7iD,EAAO4qV,EAAID,EAAIj/S,EAAK5U,EAAOurB,GAC7F,IAAIptC,EAAS4tC,EAAU/W,SAASvqC,QAAQmqC,GACpCkB,EAAUiW,EAAU/W,SAAS72B,GAC7B23B,IACc,sBAAV5sC,IAAkC4sC,EAAQwQ,QAAQ74B,OAASqoB,EAAQwQ,QAAQC,UAC3EzQ,EAAQwQ,SACJC,SAAUwF,EAAUxF,SAASwF,EAAU9I,YAAajjB,GACpDvS,MAAO24B,GAAM6G,UAAUlB,EAAU9I,YAAajjB,IAGnC,sBAAV92B,IAAkC4sC,EAAQ0Q,QAAQ/4B,OAASqoB,EAAQ0Q,QAAQD,UAChFzQ,EAAQ0Q,SACJD,SAAUwF,EAAUxF,SAASwF,EAAUd,YAAajrB,GACpDvS,MAAO24B,GAAM6G,UAAUlB,EAAUd,YAAajrB,KAGlC,uBAAV92B,IAAmC6iD,EAAUvI,UAAsB,uBAAVt6C,IAAmC6iD,EAAUmrW,WACzG3rW,GAAU6F,GAActb,EAAQwQ,UAAY8K,GAActb,EAAQ0Q,UACjEJ,GAAMC,aAAavQ,EAAQwZ,UAC3BxZ,EAAQijB,aAAe1H,GAAgBtF,EAAU9I,YAAa8I,EAAUd,cAExE7E,GAAMC,aAAavQ,EAAQvB,UAC3BuB,EAAQkjB,aAAe3H,GAAgBtF,EAAUd,YAAac,EAAU9I,eAG7D,sBAAV/5C,GAA4C,uBAAVA,IAAmCqiD,GAAU6F,GAActb,EAAQwQ,UAC1GxQ,EAAQijB,aAAa9/C,GAAK66U,EAC1Bh+S,EAAQijB,aAAa7/C,GAAK26U,EACpBztS,GAAMC,aAAavQ,EAAQwZ,cAC7BxZ,EAAQwZ,QAAWr2C,EAAG68B,EAAQijB,aAAa9/C,EAAGC,EAAG48B,EAAQijB,aAAa7/C,MAG3D,sBAAVhQ,GAA4C,uBAAVA,IAAmCqiD,GAAU6F,GAActb,EAAQ0Q,YAC1G1Q,EAAQkjB,aAAa//C,GAAK66U,EAC1Bh+S,EAAQkjB,aAAa9/C,GAAK26U,EACpBztS,GAAMC,aAAavQ,EAAQvB,cAC7BuB,EAAQvB,QAAWt7B,EAAG68B,EAAQkjB,aAAa//C,EAAGC,EAAG48B,EAAQkjB,aAAa9/C,OAMtF87Z,EAAezta,UAAUk2a,cAAgB,SAAUx0a,EAAK6qV,EAAID,EAAIqnF,EAAel7Y,EAAO0rB,EAAUH,EAAQzV,GACpG,IAAIiW,EAAY7/C,KAAK81C,QAAQwjB,UAAUv8D,EAAIuG,IACvCkva,EAAsBxya,KAAKy+Z,yBAAyB72E,EAAID,EAAI9nS,EAAU9tC,QAAQ2kB,QAClF,GAAIgwB,GAAiB7G,IAA2B,sBAAbL,GAC5BgzX,GAAuBtpX,GAAgBlpD,KAAK81C,WAC/C+J,EAAUd,YAAYhyC,GAAK66U,EAC3B/nS,EAAUd,YAAY/xC,GAAK26U,EACV,uBAAbnoS,GAAwD,eAAnBK,EAAUn5C,MAC/Cm5C,EAAU/W,UAAY+W,EAAU/W,SAASrsC,OAAS,GAAG,CACrD,IAAIolC,EAAOge,EAAU/W,SAAS+W,EAAU/W,SAASrsC,OAAS,GACtDolC,GAA4E,IAApEge,EAAU/W,SAAS+W,EAAU/W,SAASrsC,OAAS,GAAGk7B,OAAOl7B,SAC1C,SAAnBolC,EAAKrM,WAA2C,UAAnBqM,EAAKrM,UAClCqM,EAAKlK,OAAOkK,EAAKlK,OAAOl7B,OAAS,GAAGsQ,EAAI8yC,EAAUd,YAAYhyC,EAG9D80B,EAAKlK,OAAOkK,EAAKlK,OAAOl7B,OAAS,GAAGuQ,EAAI6yC,EAAUd,YAAY/xC,EAElE60B,EAAKplC,OAASy9C,GAAM8F,eAAene,EAAKlK,OAAO,GAAIkK,EAAKlK,OAAOkK,EAAKlK,OAAOl7B,OAAS,IACpFolC,EAAKrM,UAAY0kB,GAAM1kB,UAAUqM,EAAKlK,OAAO,GAAIkK,EAAKlK,OAAOkK,EAAKlK,OAAOl7B,OAAS,KAI9F,GAAuB,WAAnBojD,EAAUn5C,KACV,GAAIkjC,EACA5pC,KAAK8xa,sBAAsB/0a,EAAmB,KAAbyiD,EAAmB,qBAAuBA,EAAUooS,EAAID,EAAI/9S,EAAS9V,GAAQurB,QAG9G,IAAK,IAAIljD,EAAI,EAAGA,EAAIY,EAAI+rC,SAASrsC,OAAQN,IACrC6D,KAAK8xa,sBAAsB/0a,EAAmB,KAAbyiD,EAAmB,qBAAuBA,EAAUooS,EAAID,EAAI5qV,EAAI+rC,SAAS3sC,GAAI23B,GAAQurB,GAOlI,OAHK2vX,GACDhva,KAAKyga,eAAe5gX,GAEjB2yX,GAGX1J,EAAezta,UAAU+ka,iBAAmB,SAAUrja,EAAK6qV,EAAID,EAAIqnF,EAAeyD,GAC9E,IAAI5yX,EAAY7/C,KAAK81C,QAAQwjB,UAAUv8D,EAAIuG,IAC3C,IAAwB,aAAnBu8C,EAAUn5C,MAA0C,WAAnBm5C,EAAUn5C,OAAsBm5C,EAAU/W,SAASrsC,OAAS,EAAG,CACjG,QAAsBtB,IAAlBs3a,GAA+B5yX,EAAU/W,SAAS2pY,GAClD5yX,EAAU/W,SAAS2pY,GAAe3+Y,MAAM/mB,GAAK66U,EAC7C/nS,EAAU/W,SAAS2pY,GAAe3+Y,MAAM9mB,GAAK26U,OAG7C,IAAK,IAAIxrV,EAAI,EAAGA,EAAI0jD,EAAU/W,SAASrsC,OAAS,EAAGN,IAC/C0jD,EAAU/W,SAAS3sC,GAAG23B,MAAM/mB,GAAK66U,EACjC/nS,EAAU/W,SAAS3sC,GAAG23B,MAAM9mB,GAAK26U,EAGpCqnF,GACDhva,KAAKyga,eAAe5gX,GAG5B,OAAO,GAGXipX,EAAezta,UAAUq3a,cAAgB,SAAUpya,EAAQmuD,EAASltC,EAAOorB,EAAOgmY,GAC9EhmY,EAAQA,MACR,IAAI/B,EAASL,KACbiB,GAAaZ,EAAQrpB,EAAOorB,EAAM5/B,EAAG4/B,EAAM3/B,GAC3C,IAAK,IAAI5O,EAAK,EAAGw0a,EAAYnkX,EAASrwD,EAAKw0a,EAAUn2a,OAAQ2B,IAAM,CAC/D,IAAIrB,EAAM61a,EAAUx0a,GACpB,GAAIrB,aAAeoqD,IACf,GAAIL,GAAU/pD,IAAQmsD,GAAgBlpD,KAAK81C,SAAU,CACjD,IAAsB,IAAlB68X,GAA2Brya,IAAWvD,EAAK,CAC3CA,EAAI8vC,aAAetrB,EACnBxkB,EAAI8vC,aAAe9vC,EAAI8vC,YAAc,KAAO,IAC5C,IAAI7C,EAAYW,GAAuBC,GAAU79B,EAAGhQ,EAAI8O,QAASmB,EAAGjQ,EAAIkP,UACxElP,EAAI8O,QAAUm+B,EAAUj9B,EACxBhQ,EAAIkP,QAAU+9B,EAAUh9B,EACxBhN,KAAK81C,QAAQ47X,mBAAmB30a,MAAW8O,QAAS9O,EAAI8O,QAASI,QAASlP,EAAIkP,QAAS4gC,YAAa9vC,EAAI8vC,cAE5G,GAAI9vC,EAAI0vZ,UAAW,CACf,IAAIz5S,EAAWhzG,KAAK81C,QAAQwjB,UAAUv8D,EAAI0vZ,WACtCj+V,EAAQxuD,KAAK81C,QAAQi3W,WAAW8lB,iBAAiB7/T,EAAUj2G,EAAIuG,GAAItD,KAAK81C,SAC5E91C,KAAK81C,QAAQi3W,WAAW+lB,oBAAoBtkX,EAAOzxD,EAAKiD,KAAK81C,SAE7D/4C,EAAIqd,UAAYrd,EAAIqd,SAAS3d,QAC7BuD,KAAKmsW,YAAYpvW,EAAK0xD,SAK9BzuD,KAAK+ya,aAAah2a,EAAKwkB,EAAOorB,IAAW5/B,EAAGhQ,EAAIgV,QAAQlG,QAASmB,EAAGjQ,EAAIgV,QAAQ9F,UAEpFjM,KAAK81C,QAAQ+zX,oBAAoB9sa,GAErCiD,KAAK81C,QAAQ+jX,kBAGjBiP,EAAezta,UAAUq/Z,iBAAmB,SAAUz8K,GAKlD,OAJKj+O,KAAK81C,QAAQic,aAAahM,YAAcy6V,GAAgBwyB,aACtDhza,KAAK29Z,gBACR39Z,KAAK81C,QAAQ6nX,eAAejD,iBAAiBz8K,GAE1CA,GAEX6qL,EAAezta,UAAUwha,UAAY,SAAUt7Y,GAC3C,OAAKvhB,KAAK81C,QAAQic,aAAahM,YAAcy6V,GAAgBwyB,aACtDhza,KAAK29Z,eACD39Z,KAAK29Z,eAAed,UAAU78Z,KAAK81C,QAASv0B,GAG5C,GAGfunZ,EAAezta,UAAU03a,aAAe,SAAU16W,EAAM92C,EAAOorB,GAC3D,IAAK0rB,EAAKrhB,gBAAkBqhB,EAAK9gB,cAAe,CAC5C,IAAI3M,EAASL,KACbiB,GAAaZ,EAAQrpB,EAAOorB,EAAM5/B,EAAG4/B,EAAM3/B,GAC3CqrD,EAAKthB,YAAcpM,GAAuBC,EAAQytB,EAAKthB,aACvDshB,EAAKtZ,YAAcpU,GAAuBC,EAAQytB,EAAKtZ,aACvD,IAAI0tC,GAAY11C,YAAashB,EAAKthB,YAAagI,YAAasZ,EAAKtZ,aACjE/+C,KAAK81C,QAAQ8zX,wBAAwBvxW,KAAUo0B,KAIvDq8U,EAAezta,UAAUowD,MAAQ,SAAU1uD,EAAKk6D,EAAIC,EAAIvqB,EAAOwqB,GAC3D,IAAI52D,EAAOP,KAAK81C,QAAQwjB,UAAUv8D,EAAIuG,IAClC0oa,EAAWzra,EAEXS,EAAUT,EAAKwR,QACnB,QAAiC5W,IAA7B6F,EAAQ0rC,WAAW12B,YAAqD7a,IAA9B6F,EAAQ0rC,WAAW32B,QAAwBmzC,GAAgBlpD,KAAK81C,SAAU,CACpH,GAAIk2X,EAAS5xZ,SAAU,CAEnB,IAAK,IAAIhc,EAAK,EAAGytT,EADL7rT,KAAKy8Z,kBAAkBuP,MACD5ta,EAAKytT,EAAQpvT,OAAQ2B,IAAM,CACzD,IAAI2vB,EAAO89R,EAAQztT,GACnB4B,KAAKiza,YAAYh8W,EAAIC,EAAIvqB,EAAO5e,EAAM/sB,EAASm2D,GAEnDp6D,EAAIgV,QAAQ6pR,QAAQ,IAAIxuQ,IACxBrwB,EAAIgV,QAAQ4vY,QAAQ5kZ,EAAIgV,QAAQ49B,aAChC3vC,KAAK81C,QAAQo9X,kBAAkB3ya,QAG/BP,KAAKiza,YAAYh8W,EAAIC,EAAIvqB,EAAOpsC,EAAMS,EAASm2D,GAEnD,IAAIzgC,EAAS+V,GAAU1vC,EAAIgV,SAE3B,IAD+B/R,KAAKy+Z,8BAAyBtja,OAAWA,EAAWu7B,GAG/E,OADA12B,KAAKyrD,MAAM1uD,EAAK,EAAIk6D,EAAI,EAAIC,EAAIvqB,IACzB,EAEX3sC,KAAK81C,QAAQ+zX,oBAAoB9sa,GAErC,OAAO,GAGX+ra,EAAezta,UAAUoha,kBAAoB,SAAUl8Z,EAAMuxD,EAAO6gX,GAEhE,IAAK,IADD5kZ,EAAOxtB,EACFpE,EAAI,EAAGA,EAAI4xB,EAAK3T,SAAS3d,OAAQN,KACtCoE,EAAQP,KAAK81C,QAAQwjB,UAAUvrC,EAAK3T,SAASje,KACnCie,UAIFu4Z,GACA7gX,EAAMttD,KAAKjE,GAEfuxD,EAAQ9xD,KAAKy8Z,kBAAkBl8Z,EAAMuxD,IANrCA,EAAMttD,KAAKjE,GASnB,OAAOuxD,GAEXg3W,EAAezta,UAAU8wW,YAAc,SAAU5rW,EAAMuxD,GACnD,IAAI/jC,EAAOxtB,EACX,GAAIA,EAAK6Z,SACL,IAAK,IAAIje,EAAI,EAAGA,EAAI4xB,EAAK3T,SAAS3d,OAAQN,IACtCoE,EAAQP,KAAK81C,QAAQwjB,UAAUvrC,EAAK3T,SAASje,IAC7C21D,EAAMttD,KAAKjE,GAGnB,OAAOuxD,GAGXg3W,EAAezta,UAAUqha,WAAa,SAAUp5Z,GAE5C,OADWtD,KAAK81C,QAAQwjB,UAAUh2D,IAItCwla,EAAezta,UAAU43a,YAAc,SAAUh8W,EAAIC,EAAIvqB,EAAO5vC,EAAKiE,EAASm2D,GAC1EF,EAAKA,EAAK,EAAI,EAAIA,EAClBC,EAAKA,EAAK,EAAI,EAAIA,EAGLn6D,EAAIgV,QAAQlG,QAAkB9O,EAAIgV,QAAQ9F,QAC5ClP,EAAIgV,QAAQ26B,WAAW12B,MAAejZ,EAAIgV,QAAQ26B,WAAW32B,OAExE,GAAW,IAAPkhD,GAAmB,IAAPC,EAAU,CACtB,IAAIlhD,OAAQ,EACRD,OAAS,EACb,GAAIhZ,aAAeoqD,GAAM,CACrB,IACIgpT,OAAW,EACX3hT,OAAQ,EACY,UAHpBjuD,EAAOxD,GAGF4wB,MAAMjnB,MAAmBnG,EAAKotB,MAAMu/X,SAASD,WAAWE,WAC1D5sZ,EAAKotB,MAAMu/X,SAASD,WAAWE,UAAU1wZ,OAAS,IACrD+xD,EAAQxuD,KAAK81C,QAAQi3W,WAAW8lB,iBAAiBtya,EAAMA,EAAK+C,GAAItD,KAAK81C,SACrEq6T,EAAW5vW,EAAKwR,QAAQ2kB,OAAO4F,aAAakyB,IAEhDx4C,EAAQzV,EAAKwR,QAAQ26B,WAAW12B,MAAQihD,EACxClhD,EAASxV,EAAKwR,QAAQ26B,WAAW32B,OAASmhD,OACpB/7D,IAAlBoF,EAAK69B,UAA4C,IAAlB79B,EAAK69B,WACpCpoB,EAAQ3J,KAAK0T,IAAIxf,EAAK69B,SAAUpoB,SAEd7a,IAAlBoF,EAAKizD,UAA4C,IAAlBjzD,EAAKizD,WACpCx9C,EAAQ3J,KAAKC,IAAI/L,EAAKizD,SAAUx9C,SAEb7a,IAAnBoF,EAAKgzD,WAA8C,IAAnBhzD,EAAKgzD,YACrCx9C,EAAS1J,KAAK0T,IAAIxf,EAAKgzD,UAAWx9C,SAEf5a,IAAnBoF,EAAK+yD,WAA8C,IAAnB/yD,EAAK+yD,YACrCv9C,EAAS1J,KAAKC,IAAI/L,EAAK+yD,UAAWv9C,IAElCo6V,IACAn6V,EAAQ3J,KAAKC,IAAI0J,EAAQw4C,EAAM/hD,MAAQlM,EAAKwR,QAAQ2kB,OAAO3pB,GAC3DgJ,EAAS1J,KAAKC,IAAIyJ,EAASy4C,EAAM7hD,OAASpM,EAAKwR,QAAQ2kB,OAAO1pB,IAElEiqD,EAAKjhD,EAAQzV,EAAKmsC,WAAW12B,MAC7BkhD,EAAKnhD,EAASxV,EAAKmsC,WAAW32B,OAElC,IAAI60B,EAASL,KACT4oY,OAAa,EACZh8W,IACDA,EAAYp6D,GAGhB,IAAIgQ,GADJoma,EAAah8W,EAAUplD,SACJlG,QAAUsna,EAAWzmY,WAAW12B,MAAQm9Z,EAAWxmY,MAAM5/B,EACxEC,EAAImma,EAAWlna,QAAUkna,EAAWzmY,WAAW32B,OAASo9Z,EAAWxmY,MAAM3/B,EACzEisC,GAAalsC,EAAGA,EAAIoma,EAAWzmY,WAAW12B,MAAQ22B,EAAM5/B,EAAGC,EAAGA,EAAImma,EAAWzmY,WAAW32B,OAAS42B,EAAM3/B,GAK3G,GAJAisC,EAAW1J,GAAY4jY,EAAWtmY,YAAasmY,EAAWtna,QAASsna,EAAWlna,QAASgtC,GACvFzN,GAAaZ,GAASuoY,EAAWtmY,YAAaoM,EAASlsC,EAAGksC,EAASjsC,GACnE6+B,GAAYjB,EAAQqsB,EAAIC,EAAIje,EAASlsC,EAAGksC,EAASjsC,GACjDw+B,GAAaZ,EAAQuoY,EAAWtmY,YAAaoM,EAASlsC,EAAGksC,EAASjsC,GAC9DjQ,aAAeoqD,GAAM,CACrB,IAAI5mD,EAEAsgD,EADAr0C,OAAO,EAEP6qD,EAAc1sB,GAAuBC,GAAU79B,GAH/CxM,EAAOxD,GAGgDgV,QAAQlG,QAASmB,EAAGzM,EAAKwR,QAAQ9F,UACxFmna,EAAU7ya,EAAKwR,QAAQlG,QAAUtL,EAAKwR,QAAQ26B,WAAW12B,MAAQzV,EAAKosC,MAAM5/B,EAC5Esma,EAAS9ya,EAAKwR,QAAQ9F,QAAU1L,EAAKwR,QAAQ26B,WAAW32B,OAASxV,EAAKosC,MAAM3/B,EAChF,GAAIgJ,EAAQ,EACR,GAAIzV,EAAKksZ,UAAW,CAChB,IAAIvqS,EAAWliH,KAAK81C,QAAQwjB,UAAU/4D,EAAKksZ,aACtCvqS,EAAS9jF,UAAc79B,EAAKk8B,OAAOjwB,KAAOwJ,EAASksG,EAAS9jF,YAC7D79B,EAAKyV,MAAQA,EACbzV,EAAKsL,QAAUwrD,EAAYtqD,QAI/BxM,EAAKyV,MAAQA,EACbzV,EAAKsL,QAAUwrD,EAAYtqD,EAGnC,GAAIgJ,EAAS,EACT,GAAIxV,EAAKksZ,UAAW,CAChB,IAAIhqS,EAAWziH,KAAK81C,QAAQwjB,UAAU/4D,EAAKksZ,aACtChqS,EAASlvD,WAAehzD,EAAKk8B,OAAO/vB,IAAMqJ,EAAU0sG,EAASlvD,aAC9DhzD,EAAKwV,OAASA,EACdxV,EAAK0L,QAAUorD,EAAYrqD,QAI/BzM,EAAKwV,OAASA,EACdxV,EAAK0L,QAAUorD,EAAYrqD,EAGnCR,EAAOjM,EAAKwR,QAAQlG,QAAUtL,EAAKwR,QAAQ26B,WAAW12B,MAAQzV,EAAKosC,MAAM5/B,EACzE8zC,EAAQtgD,EAAKwR,QAAQ9F,QAAU1L,EAAKwR,QAAQ26B,WAAW32B,OAASxV,EAAKosC,MAAM3/B,EAC5DhN,KAAK81C,QAAQwjB,UAAU/4D,EAAKksZ,aACzBlsZ,EAAKk8B,OAAO/vB,KAAOm0C,EAAQwyX,IAAY,GACpD9ya,EAAKk8B,OAAOjwB,MAAQA,EAAO4ma,IAAY,GACxCpza,KAAK81C,QAAQ47X,mBAAmB30a,MAC5B0/B,QAAU/vB,IAAKnM,EAAKk8B,OAAO/vB,IAAKF,KAAMjM,EAAKk8B,OAAOjwB,QAItDxM,KAAK81C,QAAQ47X,mBAAmB30a,MAC5BiZ,MAAOzV,EAAKyV,MAAOD,OAAQxV,EAAKwV,OAAQlK,QAAStL,EAAKsL,QACtDI,QAAS1L,EAAK0L,QAASwwB,QAAU/vB,IAAKnM,EAAKk8B,OAAO/vB,KAAOm0C,EAAQwyX,GAAS7ma,KAAMjM,EAAKk8B,OAAOjwB,MAAQA,EAAO4ma,UAIlH,CACD,IAAIvzX,EAAY9iD,EAChB,IAAK8iD,EAAU7I,gBAAkB6I,EAAUtI,cAAe,CACtDsI,EAAU9I,YAAcpM,GAAuBC,EAAQiV,EAAU9I,aACjE8I,EAAUd,YAAcpU,GAAuBC,EAAQiV,EAAUd,aACjE,IAAI0tC,GAAY11C,YAAa8I,EAAU9I,YAAagI,YAAac,EAAUd,aAC3E/+C,KAAK81C,QAAQ8zX,wBAAwB/pX,KAAe4sC,IAG5D,IAAIhsF,EAAaT,KAAK81C,QAAQwjB,UAAUv8D,EAAI0vZ,WAC5C,GAAIhsZ,EAAY,CACGA,EAAWsR,QAAQ2kB,OACtB35B,EAAIgV,QAAQ2kB,OACpB83B,EAAQxuD,KAAK81C,QAAQi3W,WAAW8lB,iBAAiBpya,EAAY1D,EAAIuG,GAAItD,KAAK81C,SAC9E91C,KAAK81C,QAAQi3W,WAAW+lB,oBAAoBtkX,EAAOzxD,EAAKiD,KAAK81C,YAKzEgzX,EAAezta,UAAUkha,SAAW,SAAUx/Z,EAAK0ra,EAAa7gF,EAAID,GAChE,IAAIwyE,EACAmZ,EACAh7X,EAAOt4C,KAAKs6Z,WAAWmO,EAAa1ra,GACpC25B,EAAS+V,GAAU1vC,EAAIgV,SACvBE,EAAQ4kD,GAAc95D,EAAKu7C,EAAKh1C,IAChCwzD,KACJA,EAAM7kD,IAAWtG,QAAUoB,EAAGurC,EAAK3sC,OAAOoB,EAAGC,EAAGsrC,EAAK3sC,OAAOqB,IACxDsrC,GAAQqR,GAAQrR,EAAMt4C,KAAK81C,WAC3BqkX,GAAcrjW,MAAOA,GACrBxe,EAAK3sC,OAAOoB,GAAM66U,EAAKlxT,EAAO1gB,MAC9BsiC,EAAK3sC,OAAOqB,GAAM26U,EAAKjxT,EAAO3gB,QAC9B+gD,MACM7kD,IAAWtG,QAAUoB,EAAGurC,EAAK3sC,OAAOoB,EAAGC,EAAGsrC,EAAK3sC,OAAOqB,IAC5Dsma,GAAkBx8W,MAAOA,GACzB92D,KAAK81C,QAAQ47X,mBAAmB30a,EAAKo9Z,EAAWmZ,GAChDtza,KAAK81C,QAAQ+zX,oBAAoB9sa,KAIzC+ra,EAAezta,UAAUiga,cAAgB,SAAU/+Z,GAC/C,IACIy2E,EADAttE,GAAaosD,SAAWD,eAS5B,OAPIt1D,aAAkB4qD,GAClB6rB,EAAUz2E,EAAOkwZ,UAEZlwZ,GAAUA,EAAOu1D,OAAUv1D,EAAOu1D,MAAY,QAChDv1D,EAAOu1D,MAAM,GAAG26V,YACnBz5U,EAAUz2E,EAAOu1D,MAAM,GAAG26V,WAE1Bz5U,GACAttE,EAASosD,MAAMttD,KAAKnF,GAAMW,KAAK81C,QAAQwjB,UAAU0Z,KAC1CttE,GAEJA,GAEXoja,EAAezta,UAAUoja,yBAA2B,SAAU72E,EAAID,EAAI4rF,GAClE,IAAIhiX,EAAevxD,KAAK81C,QAAQyb,aAC5BihX,EAAsBxya,KAAK81C,QAAQyb,aAAaihX,oBAChD1nX,EAAW9qD,KAAK81C,QAAQgV,SAC5B,GAA4B,SAAxB0nX,GAA0D,YAAxBA,EAAmC,CACrE,IAAIgB,EAAkBD,OAAyDp4a,EAA5C6E,KAAK81C,QAAQwc,cAAcvgD,QAAQ2kB,OAClE1gB,EAAgC,SAAxBw8Z,EAAiCjhX,EAAav7C,MAAQ80C,EAASQ,cACvEv1C,EAAiC,SAAxBy8Z,EAAiCjhX,EAAax7C,OAAS+0C,EAASO,eACzE30B,EAAS68Y,EACT9ma,GAAS8ma,EAAa78Y,EAAOjqB,MAAQ+ma,EAAe/ma,QAAUm7U,GAAM,GACpEp7U,GAAQ+ma,EAAa78Y,EAAOlqB,KAAOgna,EAAehna,OAASo7U,GAAM,GACjE6rF,GAASF,EAAa78Y,EAAOhqB,IAAM8ma,EAAe9ma,MAAQi7U,GAAM,GAChEh7U,GAAU4ma,EAAa78Y,EAAO/pB,OAAS6ma,EAAe7ma,SAAWg7U,GAAM,GAC3E,OAAIl7U,GAASuJ,GAASxJ,GAAQ,GACvBG,GAAUoJ,GAAU09Z,GAAS,EAKxC,OAAO,GAIX3K,EAAezta,UAAUgha,oBAAsB,SAAUz0E,EAAID,GACzD,IAAI5qV,EAAMiD,KAAK81C,QAAQwc,cAMvB,OALItyD,KAAKsuC,QAAUtuC,KAAKsuC,MAAM86X,SAC1Bppa,KAAKsuC,MAAM86X,UACXppa,KAAKsuC,MAAM86X,OAAOv9Z,QAAU9O,EAAI8O,QAChC7L,KAAKsuC,MAAM86X,OAAOn9Z,QAAUlP,EAAIkP,WAEhCjM,KAAKy+Z,yBAAyB72E,EAAID,KAClC3nV,KAAK81C,QAAQ46D,KAAK3zG,EAAK6qV,EAAID,IACpB,IAKfmhF,EAAezta,UAAUkja,mBAAqB,SAAUzhB,EAAIC,EAAIpwW,GAC5D,IAAI5vC,EAAMiD,KAAK81C,QAAQwc,cASvB,OARItyD,KAAKsuC,QAAUtuC,KAAKsuC,MAAM86X,SAC1Bppa,KAAKsuC,MAAM86X,UACXppa,KAAKsuC,MAAM86X,OAAOv9Z,QAAU9O,EAAI8O,QAChC7L,KAAKsuC,MAAM86X,OAAOn9Z,QAAUlP,EAAIkP,QAChCjM,KAAKsuC,MAAM86X,OAAOpzZ,MAAQjZ,EAAIiZ,MAC9BhW,KAAKsuC,MAAM86X,OAAOrzZ,OAAShZ,EAAIgZ,OAC/B/V,KAAKsuC,MAAM86X,OAAOz8X,MAAQA,GAEvB3sC,KAAK81C,QAAQ2V,MAAM1uD,EAAK+/Y,EAAIC,EAAIpwW,IAG3Cm8X,EAAezta,UAAUyha,oBAAsB,SAAUv7Y,GACrD,IAAIxkB,EAAMiD,KAAK81C,QAAQwc,cAKvB,OAJItyD,KAAKsuC,QAAUtuC,KAAKsuC,MAAM86X,SAC1Bppa,KAAKsuC,MAAM86X,UACXppa,KAAKsuC,MAAM86X,OAAO7nZ,MAAQxkB,EAAI8vC,aAE3B7sC,KAAK81C,QAAQt1B,OAAOzjB,EAAKwkB,IAGpCunZ,EAAezta,UAAUu8D,aAAe,WACpC,OAAOA,GAAa53D,KAAK81C,UAG7BgzX,EAAezta,UAAUy9D,WAAa,SAAU93D,GAC5C,OAAO83D,GAAW94D,KAAK81C,QAAS90C,IAKpC8na,EAAezta,UAAUm7S,WAAa,SAAUv2S,GAC5C,IAAIM,EAAQN,EAAKkH,QAAUlH,EAAK1D,OAChCyD,KAAKiuT,WAAW1tT,GAAM,EAAOP,KAAK81C,UAGtCgzX,EAAezta,UAAU4yT,WAAa,SAAU1tT,EAAMmza,EAAY59X,GAC9D,IACI2Y,EACAwgG,EAASykR,EAAanza,EAAK04S,YAAc14S,EAAK04S,WAclD,OAbAj5S,KAAKq3L,eAAe92L,EAAM0uJ,EAAQjvJ,KAAK81C,SACvCv1C,EAAK04S,WAAahqJ,EAClBjvJ,KAAK81C,QAAQ+a,OAAO8iX,UAAYpza,EAAK+C,GAChCowa,GACD1za,KAAK81C,QAAQ89X,WAAWrza,GAExBP,KAAK81C,QAAQqzX,qBAAuBnpa,KAAK81C,QAAQ+a,OAAO0zO,kBACxDvkS,KAAK81C,QAAQ+9X,0BAA0BC,aAAc,GAEzDrlX,EAAUzuD,KAAK81C,QAAQspM,WACnBp/O,KAAK81C,QAAQqzX,qBAAuBnpa,KAAK81C,QAAQ+a,OAAO0zO,iBACxDvkS,KAAKmpa,oBAAoBl6Q,OAAOjvJ,KAAK81C,QAAQ+9X,0BAA0BC,YAAarlX,EAASluD,EAAMP,KAAK81C,SAErG2Y,GAMXq6W,EAAezta,UAAUg8L,eAAiB,SAAU96L,EAAQoI,EAAYmxC,GACpE,IAAK,IAAI35C,EAAI,EAAGA,EAAII,EAAOmwZ,SAASjwZ,OAAQN,IAAK,CAC7C,IAAI0jD,EAAY/J,EAAQwjB,UAAU/8D,EAAOmwZ,SAASvwZ,IAC9CgL,EAAS2uC,EAAQwjB,UAAUzZ,EAAUmrW,UACzCnrW,EAAUroB,QAAU7yB,EAChBwC,EAAO8xS,YACPj5S,KAAKq3L,eAAelwL,EAAQxC,EAAYmxC,GAE5C,IAAIqkX,GACA3iY,QAASrwB,EAAOqwB,SAEpBrwB,EAAOqwB,QAAU7yB,EACjB,IAAIgwD,GACAn9B,QAASrwB,EAAOqwB,SAEpBse,EAAQ47X,mBAAmBvqa,EAAQgzZ,EAAWxlW,GAC9C7e,EAAQ8zX,wBAAwB/pX,EAAWs6W,EAAWxlW,KAM9Dm0W,EAAezta,UAAUsja,oBAAsB,SAAU5ha,EAAKs2B,GACtDt2B,aAAeoqD,KACfpqD,EAAI8O,QAAUwnB,EAAKtmB,EAAIsmB,EAAKrd,MAAQ,EACpCjZ,EAAIkP,QAAUonB,EAAKrmB,EAAIqmB,EAAKtd,OAAS,EACrChZ,EAAIiZ,MAAQqd,EAAKrd,MACjBjZ,EAAIgZ,OAASsd,EAAKtd,OAClB/V,KAAK81C,QAAQ47X,mBAAmB30a,MAC5BiZ,MAAOqd,EAAKrd,MAAOD,OAAQsd,EAAKtd,OAAQlK,QAAS9O,EAAI8O,QACrDI,QAASlP,EAAIkP,UAES,QAAtBjM,KAAK81C,QAAQ/X,MACb/9B,KAAK81C,QAAQi1X,wBAKzBjC,EAAezta,UAAUy2Z,uBAAyB,SAAU/kZ,EAAGC,EAAGgJ,EAAOD,GACrE/V,KAAK81C,QAAQg8W,uBAAuB/kZ,EAAGC,EAAGgJ,EAAOD,IAGrD+yZ,EAAezta,UAAUqga,iBAAmB,WACxC17Z,KAAK81C,QAAQ4lX,oBAGjBoN,EAAezta,UAAU0ga,eAAiB,WACtC/7Z,KAAK81C,QAAQimX,kBAGjB+M,EAAezta,UAAU8ga,oBAAsB,SAAU97Z,EAAO0za,EAAWC,GACvE,IAAIj3a,EAAMiD,KAAK81C,QAAQwjB,UAAUj5D,EAAMiD,KAAOjD,EAAMyxD,MAAM,GAC1D,GAAIkiX,GACI,GAASj3a,EAAI0vZ,WAAa1vZ,EAAI0vZ,YAAcunB,EAAUjia,QAAQzO,GAAI,CAClE,IAAI/C,EAAOlB,GAAMtC,GACjBwD,EAAKksZ,UAAY1vZ,EAAI0vZ,UACrBzsZ,KAAK81C,QAAQ4lX,mBAGb,IAAK,IAFDyR,KAEKhxa,GADTgxa,EAAQA,EAAM5yZ,OAAOxd,EAAI2vZ,SAAU3vZ,EAAI4vZ,UACpBlwZ,OAAS,EAAGN,GAAK,EAAGA,IAAK,CACxC,IAAI0jD,EAAY7/C,KAAK81C,QAAQwjB,UAAU6zW,EAAMhxa,IACzC0jD,GACA7/C,KAAK81C,QAAQvxC,OAAOs7C,GAG5B,IAAIo0X,OAAiB,GACrBA,EAAkBj0a,KAAK81C,QAAQwjB,UAAUv8D,EAAI0vZ,WAAW9+X,MAAMu/X,SAASD,WAAoB,eAC5E5kY,OAAO4rZ,EAAe11a,QAAQ,EAAM+E,IAAK,GACxDtD,KAAK81C,QAAQi3W,WAAWmnB,oBAAoBl0a,KAAK81C,QAAQwjB,UAAUv8D,EAAI0vZ,WAAW16Y,QAAS,EAAMzO,IACjGtD,KAAK81C,QAAQwjB,UAAU,EAAMh2D,IAAImpZ,UAAY,GAC7C1vZ,EAAI8O,QAAU9O,EAAIgV,QAAQlG,QAC1B9O,EAAIkP,QAAUlP,EAAIgV,QAAQ9F,QAC1B,IACI8tZ,GACArzZ,KAAM,kBAAmBszZ,YAAcloW,OAFzBzyD,GAAMtC,KAE2Ck9Z,YAAcnoW,OAAQvxD,IAAS65L,SAAU,YAE5Gp6L,KAAKk6Z,gBAAgBH,GACrB/5Z,KAAK81C,QAAQimX,mBAKzB+M,EAAezta,UAAUyga,YAAc,SAAUv/Z,EAAQ43a,GACrD,IAAI5za,EAAOP,KAAK81C,QAAQwjB,UAAU/8D,EAAO+G,KAAO/G,EAAOu1D,MAAM,GAC7D,OAAIvxD,GAA4B,SAApBA,EAAKotB,MAAMjnB,MACdnG,EAAKksZ,YAAc0nB,EAAY7wa,IAAQ/C,EAAK+C,KAAO6wa,EAAY1nB,YAChE0nB,EAAYxmZ,MAAMu/X,SAASD,WAAWI,WASlDyb,EAAezta,UAAU22Z,kBAAoB,SAAU/xZ,EAAMm0a,EAAoB73a,GAChE,IAAI25B,GACjB,GAAIj2B,EAAKkH,kBAAkBggD,IAASitX,GAAsBn0a,EAAK1D,kBAAkB4qD,GAAO,CACpF,IAAIktX,EAAMD,EAAqBn0a,EAAK1D,OAAS0D,EAAKkH,OAC9Cmta,EAAUF,EAAqBn0a,EAAK+2C,cAAgB/2C,EAAKs3C,cACzDpwC,EAASnH,KAAKs6Z,WAAWga,EAASD,EAAK93a,GACvCyE,OAAU,EACd,GAAImG,aAAkBilZ,GAIlB,IAAK,IAHD8d,EAAS/ia,EAAO7D,GAChB/C,EAAON,EAAKkH,OAEP/I,EAAK,EAAGyE,EADFtC,EAAKwR,QAAQqI,SAAS,GAAGA,SAAS,GAAGA,SAAS,GAC9BA,SAAUhc,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC3D,IAAIiC,EAAQwC,EAAGzE,GACf,GAAIiC,EAAMiD,KAAO/C,EAAK+C,GAAK,IAAM4ma,EAAQ,CACrClpa,EAAUX,EAAM+Z,SAAS,GACzB,YAKRpZ,EAAUmG,aAAkBggD,GACxBhgD,EAAO4K,QAAUqia,EAAqBn0a,EAAK+2C,cAAgB/2C,EAAKs3C,cAExEv3C,KAAK81C,QAAQk8W,kBAAkBhxZ,KAKvC8na,EAAezta,UAAUg4G,UAAY,SAAU92G,EAAQ4K,EAAQ+M,GAG3D,OAAO,GAKX40Z,EAAezta,UAAUuga,UAAY,SAAUv2W,EAAY7F,EAAUooS,EAAID,GACrE,IACI7zT,EADA/2B,EAAMiD,KAAK81C,QAAQwc,cAEnBiiX,EAAc/0X,EAASzyC,EAAIs4C,EAAWt4C,EACtCyna,EAAah1X,EAASxyC,EAAIq4C,EAAWr4C,EAErCkvZ,EADJpoY,GAAU/mB,EAAG66U,EAAI56U,EAAG26U,GAKpB,OAHI3nV,KAAK29Z,iBACLzB,EAAel8Z,KAAK81C,QAAQ6nX,eAAe/B,UAAU57Z,KAAK81C,QAAS/4C,EAAKw3a,EAAaC,EAAY1gZ,EAAOuxB,EAAY7F,IAEjH08W,GAKX4M,EAAezta,UAAUy+Z,WAAa,WAC7B95Z,KAAK81C,QAAQic,aAAahM,YAAcy6V,GAAgBi0B,cAAiBz0a,KAAK29Z,gBAC/E39Z,KAAK29Z,eAAe+W,iBAAiB10a,KAAK81C,UAIlDgzX,EAAezta,UAAU43G,KAAO,SAAU12G,EAAQ4K,EAAQ+M,GAElDlU,KAAK81C,QAAQi3W,aACb/sZ,KAAK81C,QAAQi3W,WAAW4nB,cAAcxta,EAAS5K,aAAkB4qD,GAAQ5qD,EAASA,EAAOu1D,MAAM,GAAI9xD,KAAK81C,SACxG91C,KAAK81C,QAAQi1X,wBAIrBjC,EAAezta,UAAU6+Z,gBAAkB,SAAUH,GACjD/5Z,KAAK81C,QAAQokX,gBAAgBH,IAGjC+O,EAAezta,UAAU84D,MAAQ,SAAU1F,EAASsnC,GAChD,GAAItnC,EAAQhyD,OAAS,EAAG,CACpB,IAAIN,EAAI,EACJonB,EAAI,EACJmT,EAAS+V,GAAUgiB,EAAQ,GAAG18C,SAC9B6ia,GAAY9iX,SAAWD,eACvBgjX,GAAY/iX,SAAWD,eAC3B,IAAK11D,EAAI,EAAGA,EAAIsyD,EAAQhyD,OAAQN,IAAK,CACjC,IAAIyrV,EAAK,EACLD,EAAK,EACM,SAAX5xP,EAEI6xP,EADAn5R,EAAQtyD,aAAcgrD,GACjBzwB,EAAOkN,QAAQ72B,EAChB0hD,EAAQtyD,GAAG6Z,MAAQ,EAAIy4C,EAAQtyD,GAAG0P,QAGjC6qB,EAAOkN,QAAQ72B,EAAI0hD,EAAQtyD,GAAG46C,YAAYhqC,EAGnC,UAAXgpF,EAED6xP,EADAn5R,EAAQtyD,aAAcgrD,GACjBzwB,EAAOmN,SAAS92B,EACjB0hD,EAAQtyD,GAAG6Z,MAAQ,EAAIy4C,EAAQtyD,GAAG0P,QAGjC6qB,EAAOmN,SAAS92B,EAAI0hD,EAAQtyD,GAAG4V,QAAQ2kB,OAAO1gB,MAC/Cy4C,EAAQtyD,GAAG46C,YAAYhqC,EAGf,QAAXgpF,EAED4xP,EADAl5R,EAAQtyD,aAAcgrD,GACjBzwB,EAAOhqB,IAAM+hD,EAAQtyD,GAAG4Z,OAAS,EAAI04C,EAAQtyD,GAAG8P,QAGhDyqB,EAAOhqB,IAAM+hD,EAAQtyD,GAAG46C,YAAY/pC,EAG7B,WAAX+oF,EAED4xP,EADAl5R,EAAQtyD,aAAcgrD,GACjBzwB,EAAO/pB,OAAS8hD,EAAQtyD,GAAG4Z,OAAS,EAAI04C,EAAQtyD,GAAG8P,QAGnDyqB,EAAO/pB,OAAS8hD,EAAQtyD,GAAG46C,YAAY/pC,EAGhC,WAAX+oF,EACDtnC,EAAQtyD,aAAcgrD,GACtBygS,EAAKlxT,EAAOhD,OAAO3mB,EAAI0hD,EAAQtyD,GAAG0P,SAGlC0X,EAAIlX,KAAKE,IAAImqB,EAAO1gB,MAChBy4C,EAAQtyD,GAAG4V,QAAQ2kB,OAAO1gB,OAC9B4xU,EAAKlxT,EAAOoN,WAAW/2B,EAAIwW,EAAI,EAAIkrC,EAAQtyD,GAAG46C,YAAYhqC,GAG9C,WAAXgpF,IAED4xP,EADAl5R,EAAQtyD,aAAcgrD,GACjBzwB,EAAOhD,OAAO1mB,EAAIyhD,EAAQtyD,GAAG8P,QAG7ByqB,EAAOhD,OAAO1mB,EAAIyhD,EAAQtyD,GAAG46C,YAAY/pC,GAGtD4na,EAAU50a,KAAK80a,YAAYF,EAASnmX,EAAQtyD,IAC5C6D,KAAK0wG,KAAKjiD,EAAQtyD,GAAIyrV,EAAID,GAC1B3nV,KAAK81C,QAAQ+jX,iBACbgb,EAAU70a,KAAK80a,YAAYD,EAASpmX,EAAQtyD,IAEhDy4a,EAAUv1a,GAAMu1a,GAChBC,EAAUx1a,GAAMw1a,GAChB,IAAI9a,GACArzZ,KAAM,QAAS0zL,SAAU,WACzB6/N,WAAYltX,GAAY6nY,GAAU5a,WAAYjtX,GAAY8nY,IAE9D70a,KAAKk6Z,gBAAgBH,KAI7B+O,EAAezta,UAAU05a,WAAa,SAAUtmX,EAASsnC,GACrD,GAAItnC,EAAQhyD,OAAS,EAAG,CACpB,IAAIN,EAAI,EAKJsQ,GAHO,IAAIypB,GAGH,GACR1pB,EAAO,EACPwoa,EAAQ,EACRroa,EAAS,EACT+mB,EAAS,EACTqb,EAAS,EACTkmY,EAAM,EAENC,GAAoBpjX,SAAWD,eAC/BsjX,GAAoBrjX,SAAWD,eAEnC,IADApD,EAAU52B,GAAK42B,GACVtyD,EAAI,EAAGA,EAAIsyD,EAAQhyD,OAAQN,IAC5BsQ,EAAQA,EAAQgiD,EAAQtyD,GAAG4V,QAAQ2kB,OAAOmN,SAAS92B,EAAI0hD,EAAQtyD,EAAI,GAAG4V,QAAQ2kB,OAAOmN,SAAS92B,EAC9FP,EAAOA,EAAOiiD,EAAQtyD,GAAG4V,QAAQ2kB,OAAOkN,QAAQ72B,EAAI0hD,EAAQtyD,EAAI,GAAG4V,QAAQ2kB,OAAOkN,QAAQ72B,EAC1Fioa,EAAQA,EAAQvmX,EAAQtyD,GAAG4V,QAAQ2kB,OAAOmN,SAAS72B,EAAIyhD,EAAQtyD,EAAI,GAAG4V,QAAQ2kB,OAAOmN,SAAS72B,EAC9FL,EAASA,EAAS8hD,EAAQtyD,GAAG4V,QAAQ2kB,OAAOqN,YAAY/2B,EAAIyhD,EAAQtyD,EAAI,GAAG4V,QAAQ2kB,OAAOqN,YAAY/2B,EACtG0mB,EAASA,EAAS+6B,EAAQtyD,GAAG4V,QAAQ2kB,OAAOhD,OAAO3mB,EAAI0hD,EAAQtyD,EAAI,GAAG4V,QAAQ2kB,OAAOhD,OAAO3mB,EAC5FgiC,EAASA,EAAS0f,EAAQtyD,GAAG4V,QAAQ2kB,OAAOhD,OAAO1mB,EAAIyhD,EAAQtyD,EAAI,GAAG4V,QAAQ2kB,OAAOhD,OAAO1mB,EAC5Fioa,EAAMA,EAAMxmX,EAAQtyD,GAAG4V,QAAQ2kB,OAAOmN,SAAS72B,EAAIyhD,EAAQtyD,EAAI,GAAG4V,QAAQ2kB,OAAOqN,YAAY/2B,EAEjG,IAAK7Q,EAAI,EAAGA,EAAIsyD,EAAQhyD,OAAS,EAAGN,IAAK,CACrC,IAAIyrV,EAAK,EACLD,EAAK,EACL9lT,EAAO4K,GAAUgiB,EAAQtyD,EAAI,GAAG4V,SAChC4O,EAAU8rB,GAAUgiB,EAAQtyD,GAAG4V,SACpB,gBAAXgkF,GAAuC,WAAXA,EAC5B6xP,EAAK/lT,EAAKnO,OAAO3mB,EAAI4T,EAAQ+S,OAAO3mB,EAAK2mB,GAAU+6B,EAAQhyD,OAAS,GAEpD,UAAXs5F,EACL6xP,EAAK/lT,EAAKgC,SAAS92B,EAAI4T,EAAQkjB,SAAS92B,EAAKN,GAASgiD,EAAQhyD,OAAS,GAEvD,SAAXs5F,EACL6xP,EAAK/lT,EAAK+B,QAAQ72B,EAAI4T,EAAQijB,QAAQ72B,EAAKP,GAAQiiD,EAAQhyD,OAAS,GAEpD,WAAXs5F,EACL4xP,EAAK9lT,EAAKnO,OAAO1mB,EAAI2T,EAAQ+S,OAAO1mB,EAAK+hC,GAAU0f,EAAQhyD,OAAS,GAEpD,QAAXs5F,EACL4xP,EAAK9lT,EAAKgC,SAAS72B,EAAI2T,EAAQkjB,SAAS72B,EAAKgoa,GAASvmX,EAAQhyD,OAAS,GAEvD,WAAXs5F,EACL4xP,EAAK9lT,EAAKkC,YAAY/2B,EAAI2T,EAAQojB,YAAY/2B,EAAKL,GAAU8hD,EAAQhyD,OAAS,GAE9D,gBAAXs5F,IACL4xP,EAAK9lT,EAAKkC,YAAY/2B,EAAI2T,EAAQkjB,SAAS72B,EAAKioa,GAAOxmX,EAAQhyD,OAAS,IAE5Ey4a,EAAkBl1a,KAAK80a,YAAYI,EAAiBzmX,EAAQtyD,IAC5D6D,KAAK0wG,KAAKjiD,EAAQtyD,GAAIyrV,EAAID,GAC1B3nV,KAAK81C,QAAQ+jX,iBACbsb,EAAkBn1a,KAAK80a,YAAYK,EAAiB1mX,EAAQtyD,IAEhE+4a,EAAkB71a,GAAM61a,GACxBC,EAAkB91a,GAAM81a,GACxB,IAAIpb,GACArzZ,KAAM,aAAc0zL,SAAU,WAC9B6/N,WAAYltX,GAAYmoY,GAAkBlb,WAAYjtX,GAAYooY,IAEtEn1a,KAAKk6Z,gBAAgBH,KAI7B+O,EAAezta,UAAU+5a,SAAW,SAAU3mX,EAASsnC,GACnD,GAAItnC,EAAQhyD,OAAS,EAAG,CACpB,IAAIN,EAAI,EACJwwC,OAAQ,EACZA,GAAU5/B,EAAG,GAAKC,EAAG,IACrB,IAAI0pB,EAAS+V,GAAUgiB,EAAQ,GAAG18C,SAC9BkoZ,GAAenoW,SAAWD,eAC1BmoW,GAAeloW,SAAWD,eAC9B,IAAK11D,EAAI,EAAGA,EAAIsyD,EAAQhyD,OAAQN,IAAK,CACjC,IAAIk3B,EAAOoZ,GAAUgiB,EAAQtyD,GAAG4V,SAC5BklD,EAAK,EACLC,EAAK,EACM,UAAX6+B,EACA9+B,EAAKvgC,EAAO1gB,MAAQqd,EAAKrd,MAET,WAAX+/E,EACL7+B,EAAKxgC,EAAO3gB,OAASsd,EAAKtd,OAEV,SAAXggF,IACL9+B,EAAKvgC,EAAO1gB,MAAQqd,EAAKrd,MACzBkhD,EAAKxgC,EAAO3gB,OAASsd,EAAKtd,QAE9BkkZ,EAAaj6Z,KAAK80a,YAAY7a,EAAYxrW,EAAQtyD,IAClD6D,KAAKyrD,MAAMgD,EAAQtyD,GAAI86D,EAAIC,EAAIvqB,GAC/BqtX,EAAah6Z,KAAK80a,YAAY9a,EAAYvrW,EAAQtyD,IAEtD6D,KAAK81C,QAAQ+jX,iBACbI,EAAa56Z,GAAM46Z,GACnBD,EAAa36Z,GAAM26Z,GACnB,IAAID,GACArzZ,KAAM,SAAU0zL,SAAU,WAC1B6/N,WAAYltX,GAAYktX,GAAaD,WAAYjtX,GAAYitX,IAEjEh6Z,KAAKk6Z,gBAAgBH,KAG7B+O,EAAezta,UAAUy5a,YAAc,SAAUO,EAAgBt4a,GAO7D,OANIA,aAAeoqD,GACfkuX,EAAevjX,MAAMttD,KAAKnF,GAAMtC,IAGhCs4a,EAAexjX,WAAWrtD,KAAKnF,GAAMtC,IAElCs4a,GAGXvM,EAAezta,UAAUirM,OAAS,SAAUvjF,EAASD,EAASw8S,GAC1D,IAAIgW,E3Wl4EZ,SAAwB1yZ,GACpB,OAASA,EAAMmjC,YAAciD,GAAmBusX,K2Wi4EjCC,CAAQx1a,KAAK81C,SACpB2/X,E3W/3EZ,SAAwB7yZ,GACpB,OAASA,EAAMmjC,YAAciD,GAAmB0sX,K2W83EjCC,CAAQ31a,KAAK81C,SACxB91C,KAAK81C,QAAQ8vT,KAAK7iP,EAAUuyT,EAAOvyT,EAAU,GAAK/iH,KAAK81C,QAAQgV,SAASY,aAAco3D,EAAU2yT,EAAO3yT,EAAU,GAAK9iH,KAAK81C,QAAQgV,SAASY,YAAa4zW,IAK7JwJ,EAAezta,UAAUiha,gBAAkB,SAAUt7Z,GACjDhB,KAAK81C,QAAQk8W,kBAAkBhxZ,EAAQ+Q,UAK3C+2Z,EAAezta,UAAUwga,kBAAoB,WACzC77Z,KAAK81C,QAAQ8/X,oBAGjB9M,EAAezta,UAAU0qW,KAAO,SAAUt6S,EAAOs3D,EAASD,EAASw8S,GAC/Dt/Z,KAAK81C,QAAQgV,SAASi7S,KAAKt6S,EAAOs3D,EAAU/iH,KAAK81C,QAAQgV,SAASY,YAAao3D,EAAU9iH,KAAK81C,QAAQgV,SAASY,YAAa4zW,IAEzHwJ,KCrmFP+M,GAAiC,WACjC,SAASA,EAAgB//X,GAErB91C,KAAKqN,WAAcu6U,GAAI,EAAGD,GAAI,EAAGl8R,MAAO,GACxCzrD,KAAK81a,WAAa,EAClB91a,KAAK+1a,YAAc,EACnB/1a,KAAKg2a,kBAAoB,EACzBh2a,KAAK6qD,QAAU,EACf7qD,KAAKgrD,QAAU,EACfhrD,KAAK6ma,UAAW,EAChB7ma,KAAKi2a,YAAc,EACnBj2a,KAAKk2a,YAAc,EACnBl2a,KAAK81C,QAAUA,EACf91C,KAAKyuD,WAkgBT,OAhgBAnwD,OAAOuJ,eAAegua,EAAgBx6a,UAAW,kBAE7CqM,IAAK,WACD,OAAO1H,KAAK+1a,aAGhB1ua,IAAK,SAAUsE,GACX3L,KAAK+1a,YAAcpqa,EACnB3L,KAAK81C,QAAQ2b,eAAepG,eAAiB1/C,GAEjDhE,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAegua,EAAgBx6a,UAAW,eAE7CqM,IAAK,WACD,OAAO1H,KAAKg2a,mBAGhB3ua,IAAK,SAAUsE,GACX3L,KAAKg2a,kBAAoBrqa,EACzB3L,KAAK81C,QAAQ2b,eAAe/F,YAAc//C,GAE9ChE,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAegua,EAAgBx6a,UAAW,iBAE7CqM,IAAK,WACD,OAAO1H,KAAK81a,YAGhBzua,IAAK,SAAUsE,GACX3L,KAAK81a,WAAanqa,EAClB3L,KAAK81C,QAAQ2b,eAAenG,cAAgB3/C,GAEhDhE,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAegua,EAAgBx6a,UAAW,oBAE7CqM,IAAK,WACD,OAAO1H,KAAK6qD,SAGhBxjD,IAAK,SAAUsE,GACX3L,KAAK6qD,QAAUl/C,EACXU,KAAKE,IAAIvM,KAAK6qD,QAAU7qD,KAAK81C,QAAQ2b,eAAe1G,kBAAoB,IACxE/qD,KAAK6ma,UAAW,GAEpB7ma,KAAK81C,QAAQ2b,eAAe1G,iBAAmBp/C,GAEnDhE,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAegua,EAAgBx6a,UAAW,kBAE7CqM,IAAK,WACD,OAAO1H,KAAKgrD,SAGhB3jD,IAAK,SAAUsE,GACX3L,KAAKgrD,QAAUr/C,EACXU,KAAKE,IAAIvM,KAAKgrD,QAAUhrD,KAAK81C,QAAQ2b,eAAexG,gBAAkB,IACtEjrD,KAAK6ma,UAAW,GAEpB7ma,KAAK81C,QAAQ2b,eAAexG,eAAiBt/C,GAEjDhE,YAAY,EACZC,cAAc,IAGlBiua,EAAgBx6a,UAAU86a,oBAAsB,SAAUtrX,EAASG,GAC/D,IAAIn/C,EAAU,EACVI,EAAU,EACV2uR,EAAa56R,KAAKo2a,gBACtBx7I,EAAW7tR,GAAK/M,KAAK0rD,YACrBkvO,EAAW5tR,GAAKhN,KAAK0rD,YACrBkvO,EAAW5kR,OAAShW,KAAK0rD,YACzBkvO,EAAW7kR,QAAU/V,KAAK0rD,YAC1B7/C,EAAUQ,KAAKC,IAAI,EAAGu+C,EAAU+vO,EAAWpuR,MAC3CP,EAAUI,KAAKC,IAAI,EAAG0+C,EAAU4vO,EAAWluR,UAC3BvR,IAAZ0vD,QAAqC1vD,IAAZ6vD,GACzBhrD,KAAK+qD,iBAAmBl/C,EACxB7L,KAAKirD,eAAiBh/C,EACtBjM,KAAK81C,QAAQuyN,UAAUx8P,EAASI,IAGhCjM,KAAK81C,QAAQuyN,WAAWroQ,KAAK+qD,iBAAmB6vO,EAAW7tR,GAAI/M,KAAKirD,eAAiB2vO,EAAW5tR,GAEpGhN,KAAKqN,WACDu6U,GAAIv7U,KAAKC,IAAItM,KAAK+qD,kBAAmB6vO,EAAWpuR,MAAQxM,KAAK0rD,YAAai8R,GAAIt7U,KAAKC,IAAItM,KAAKirD,gBAAiB2vO,EAAWluR,KAAO1M,KAAK0rD,YACpID,MAAOzrD,KAAK0rD,cAIpBmqX,EAAgBx6a,UAAUg7a,gBAAkB,SAAUxrX,EAASG,GAC3DhrD,KAAK6ma,UAAW,EAChB,IAAIjsI,EAAa56R,KAAKo2a,gBACtBx7I,EAAW7tR,GAAK/M,KAAK0rD,YACrBkvO,EAAW5tR,GAAKhN,KAAK0rD,YACrBkvO,EAAW5kR,OAAShW,KAAK0rD,YACzBkvO,EAAW7kR,QAAU/V,KAAK0rD,YAC1B,IAAI3+C,GAAK6tR,EAAWpuR,KAChBQ,GAAK4tR,EAAWluR,IAChBrF,GAAM,EACNiva,EAAYt2a,KAAKsrD,cAAgBtrD,KAAK0rD,YACtC6qX,EAAav2a,KAAKqrD,eAAiBrrD,KAAK0rD,YACxCmxD,EAAO9vG,EAAI89C,EACf,GAAIgyD,IAAS78G,KAAK+qD,iBAAkB,CAC5Bh+C,EAAI/M,KAAK+qD,mBACL/qD,KAAK+qD,iBAAmB8xD,EACxB78G,KAAK+qD,kBAAoBF,EAGzB7qD,KAAK+qD,iBAAmB8xD,EAE5Bx1G,GAAM,GAEV,IAAIoF,EAAQJ,KAAKC,IAAIsuR,EAAWnuR,MAAQzM,KAAKk2a,YAAaI,GAC1D,IAAKjva,GAAOoF,GAASowG,EAAO78G,KAAKsrD,cAAe,CAC5C,IAAIkrX,GAAe35T,EAAOy5T,EAAYt2a,KAAKk2a,YACvCO,GAAgBz2a,KAAK+qD,iBAAmBurX,EAAYt2a,KAAKk2a,YACzDM,EAAcC,EAEdz2a,KAAK+qD,iBAAmB8xD,EAGpB25T,EAAc57I,EAAWnuR,MAAQ+pa,EAAcC,EAC/Cz2a,KAAK+qD,iBAAmB8xD,EAGxB78G,KAAK+qD,mBAAqB6vO,EAAWnuR,MAAQzM,KAAKk2a,YAAcI,GAGxEjva,GAAM,EAELA,IACDrH,KAAK+qD,iBAAmBh+C,EAAI89C,GAGpCxjD,GAAM,EAEN,IAAIy1G,EAAO9vG,EAAIg+C,EACf,GAAI8xD,IAAS98G,KAAKirD,eAAgB,CAC1Bj+C,EAAIhN,KAAKirD,iBACLjrD,KAAKirD,eAAiB6xD,EACtB98G,KAAKirD,gBAAkBD,EAGvBhrD,KAAKirD,eAAiB6xD,EAE1Bz1G,GAAM,GAEV,IAAIsF,EAASN,KAAKC,IAAIsuR,EAAWjuR,OAAS3M,KAAKi2a,YAAaM,GAC5D,IAAKlva,GAAOsF,GAAUmwG,EAAOy5T,EAAY,CACrC,IAAIG,GAAgB55T,EAAOy5T,EAAav2a,KAAKi2a,YACzC5kF,GAAiBrxV,KAAKirD,eAAiBsrX,EAAav2a,KAAKi2a,YACzDS,EAAerlF,EAEfrxV,KAAKirD,eAAiB6xD,EAGlB45T,EAAe97I,EAAWjuR,OAAS+pa,EAAerlF,EAClDrxV,KAAKirD,eAAiB6xD,EAGtB98G,KAAKirD,iBAAmB2vO,EAAWjuR,OAAS3M,KAAKi2a,YAAcM,GAGvElva,GAAM,EAELA,IACDrH,KAAKirD,eAAiBj+C,EAAIg+C,GAGlChrD,KAAKqN,WACDu6U,GAAIv7U,KAAKC,IAAItM,KAAK+qD,kBAAmB6vO,EAAWpuR,MAAQxM,KAAK0rD,YAAai8R,GAAIt7U,KAAKC,IAAItM,KAAKirD,gBAAiB2vO,EAAWluR,KAAO1M,KAAK0rD,YACpID,MAAOzrD,KAAK0rD,aAEhB1rD,KAAKq8L,UACDr8L,KAAK6ma,UACL7ma,KAAK81C,QAAQouX,WAIrB2R,EAAgBx6a,UAAUghM,QAAU,WAChC,IAAIu+F,EAAa56R,KAAKo2a,gBACtBx7I,EAAW7tR,GAAK/M,KAAK0rD,YACrBkvO,EAAW5tR,GAAKhN,KAAK0rD,YACrBkvO,EAAW5kR,OAAShW,KAAK0rD,YACzBkvO,EAAW7kR,QAAU/V,KAAK0rD,YAC1B,IAAI3+C,EAAIV,KAAK0T,IAAI66Q,EAAW7tR,GAAI/M,KAAK+qD,kBACjC/9C,EAAIX,KAAK0T,IAAI66Q,EAAW5tR,GAAIhN,KAAKirD,gBAGjCgrX,GAFQj2a,KAAK+qD,iBAAmB/qD,KAAKsrD,cAAgBsvO,EAAWnuR,MACxDzM,KAAKirD,eAAiBjrD,KAAKqrD,eAAiBuvO,EAAWjuR,OACjD3M,KAAK22a,eACnBT,EAAcl2a,KAAK22a,eAClB32a,KAAKirD,gBAAkB2vO,EAAW5tR,IAAMhN,KAAKirD,eAAiBjrD,KAAKqrD,gBAAkBuvO,EAAWjuR,SACjGupa,EAAc,IAEbl2a,KAAK+qD,kBAAoB6vO,EAAW7tR,IAAM/M,KAAK+qD,iBAAmB/qD,KAAKsrD,eAAiBsvO,EAAWnuR,QACpGwpa,EAAc,GAElBj2a,KAAKi2a,YAAcA,EACnBj2a,KAAKk2a,YAAcA,EACnBl2a,KAAK42a,aAAevqa,KAAKC,IAAIsuR,EAAWnuR,OAAQzM,KAAK+qD,iBAAmB/qD,KAAKsrD,cAAgB4qX,GAAenpa,EAC5G/M,KAAK62a,cAAgBxqa,KAAKC,IAAIsuR,EAAWjuR,QAAS3M,KAAKirD,eAAiBjrD,KAAKqrD,eAAiB4qX,GAAejpa,EAC7GhN,KAAK81C,QAAQumJ,QAAQr8L,KAAK42a,aAAc52a,KAAK62a,eAC7C72a,KAAK81C,QAAQ90C,QAAQ0D,MAAMmV,SAAW,UAG1Cg8Z,EAAgBx6a,UAAUgoa,gBAAkB,SAAUrtZ,EAAOD,GACzD/V,KAAKsrD,cAAgBt1C,EACrBhW,KAAKqrD,eAAiBt1C,GAM1B8/Z,EAAgBx6a,UAAU+6a,cAAgB,SAAUnT,EAAc/2W,GAC9D,IAAI74B,EAAO,IAAI6C,GACf,GACe,YAAXg2B,GAA4D,OAApClsD,KAAK81C,QAAQyb,aAAav7C,OAAuD,OAArChW,KAAK81C,QAAQyb,aAAax7C,OAAiB,CAC/G,IAAIC,EAAQhW,KAAK81C,QAAQyb,aAAav7C,MAClCD,EAAS/V,KAAK81C,QAAQyb,aAAax7C,OACnC+ga,EAAW,EACXC,EAAY,EAChB,GAAI/2a,KAAK81C,QAAQyb,aAAaylX,aAAc,CAExC,IADA3jZ,EAAOrzB,KAAK81C,QAAQuyX,cAAc+N,cAAc,EAAG,IAC1C3pa,MAAQuJ,EAAO,CAEpBA,GADIjJ,EAAIV,KAAKwmB,KAAKQ,EAAK5mB,MAAQuJ,GAGnC,GAAIqd,EAAK1mB,OAASoJ,EAAQ,CAEtBA,GADIhJ,EAAIV,KAAKwmB,KAAKQ,EAAK1mB,OAASoJ,GAGpC,GAAIsd,EAAK7mB,KAAO,GAAKH,KAAKE,IAAI8mB,EAAK7mB,MAAQsqa,EAAU,CACjD,IAAI/pa,EAAIV,KAAKwmB,KAAKxmB,KAAKE,IAAI8mB,EAAK7mB,MAAQxM,KAAK81C,QAAQyb,aAAav7C,OAClE8ga,EAAW92a,KAAK81C,QAAQyb,aAAav7C,MAAQjJ,EAEjD,GAAIsmB,EAAK3mB,IAAM,GAAKL,KAAKE,IAAI8mB,EAAK3mB,KAAOqqa,EAAW,CAC5Chqa,EAAIV,KAAKwmB,KAAKxmB,KAAKE,IAAI8mB,EAAK3mB,KAAO1M,KAAK81C,QAAQyb,aAAax7C,QACjEgha,EAAY/2a,KAAK81C,QAAQyb,aAAax7C,OAAShJ,GAGvD,OAAO,IAAImpB,IAAO4gZ,GAAaC,EAAY/ga,EAAQ8ga,EAAU/ga,EAASgha,GAGtE,IAAI99J,EAASgqJ,OAAe9na,EAAY,EACxC,OAAO6E,KAAK81C,QAAQuyX,cAAc+N,cAAcn9J,EAAQA,IAOhE48J,EAAgBx6a,UAAU47a,aAAe,SAAUr8I,GAgB/C,IAfA,IAAIz+R,EAAI,EACJonB,EAAI,EACJwpI,GAAK,EACL5lH,KACAnM,EAAK,EACLE,EAAK,EACLD,EAAK,EACLE,EAAK,EACL3uB,EAAOxM,KAAK81C,QAAQyb,aAAa90B,OAAOjwB,KACxCC,EAAQzM,KAAK81C,QAAQyb,aAAa90B,OAAOhwB,MACzCC,EAAM1M,KAAK81C,QAAQyb,aAAa90B,OAAO/vB,IACvCC,EAAS3M,KAAK81C,QAAQyb,aAAa90B,OAAO9vB,OAC1Cuqa,EAAa,EACbC,EAAc,EACdvtY,GAAY5O,GAAIA,EAAIC,GAAIA,EAAIC,GAAIA,EAAIC,GAAIA,GACrCy/P,EAAW5kR,MAAQ7Z,IACtBA,GAAS6D,KAAK81C,QAAQyb,aAAav7C,MAAQhW,KAAK81C,QAAQyb,aAAav7C,MAAQ4kR,EAAW5kR,SAC9EhW,KAAK81C,QAAQyb,aAAav7C,QAChC4zB,GACI5O,GAAI4/P,EAAWpuR,KAAOA,EAAMyuB,GAAI2/P,EAAWluR,IAAMA,EACjDwuB,GAAI0/P,EAAWpuR,KAAOA,EAAM2uB,GAAIy/P,EAAWjuR,OAASA,GAExDw6B,IAAa4lH,GAAKnjH,GAElBztC,EAAIy+R,EAAW5kR,QAKf4zB,GAAY5O,GAJZA,EAAK4/P,EAAWh3P,QAAQ72B,EAAI/M,KAAK81C,QAAQyb,aAAav7C,MAAQkha,EAI1Cj8Y,GAHpBA,EAAK2/P,EAAWh3P,QAAQ52B,EAAIN,EAGAwuB,GAF5BA,EAAK0/P,EAAW92P,WAAW/2B,EAAI/M,KAAK81C,QAAQyb,aAAav7C,MAAQkha,EAE7B/7Y,GADpCA,EAAKy/P,EAAW92P,WAAW92B,EAAIL,GAE/Bw6B,IAAa4lH,GAAKnjH,EAClBstY,KAEAt8I,EAAW5kR,QAAU7Z,IACrBytC,GACI5O,GAAI4/P,EAAWnuR,MAAQA,EAAOwuB,GAAI2/P,EAAWluR,IAAMA,EACnDwuB,GAAI0/P,EAAWnuR,MAAQA,EAAO0uB,GAAIy/P,EAAWjuR,OAASA,GAE1Dw6B,IAAa4lH,GAAKnjH,GAG1B,KAAOgxP,EAAW7kR,OAASwN,IACvBA,GAASvjB,KAAK81C,QAAQyb,aAAax7C,OAAS/V,KAAK81C,QAAQyb,aAAax7C,OAAS6kR,EAAW7kR,UAChF/V,KAAK81C,QAAQyb,aAAax7C,SAChC6zB,GACI5O,GAAI4/P,EAAWpuR,KAAOA,EAAMyuB,GAAI2/P,EAAWluR,IAAMA,EACjDwuB,GAAI0/P,EAAWnuR,MAAQA,EAAO0uB,GAAIy/P,EAAWluR,IAAMA,GAEvDy6B,IAAa4lH,GAAKnjH,GAElBrmB,EAAIq3Q,EAAW7kR,SAKf6zB,GAAY5O,GAJZA,EAAK4/P,EAAWh3P,QAAQ72B,EAAIP,EAIRyuB,GAHpBA,EAAK2/P,EAAWh3P,QAAQ52B,EAAIhN,KAAK81C,QAAQyb,aAAax7C,OAASoha,EAGnCj8Y,GAF5BA,EAAK0/P,EAAW/2P,SAAS92B,EAAIN,EAEO0uB,GADpCA,EAAKy/P,EAAW/2P,SAAS72B,EAAIhN,KAAK81C,QAAQyb,aAAax7C,OAASoha,GAEhEhwY,IAAa4lH,GAAKnjH,EAClButY,KAEAv8I,EAAW7kR,SAAWwN,IACtBqmB,GACI5O,GAAI4/P,EAAWpuR,KAAOA,EAAMyuB,GAAI2/P,EAAWjuR,OAASA,EACpDuuB,GAAI0/P,EAAWnuR,MAAQA,EAAO0uB,GAAIy/P,EAAWjuR,OAASA,GAE1Dw6B,IAAa4lH,GAAKnjH,GAG1B,OAAOzC,GAGX0uY,EAAgBx6a,UAAU0qW,KAAO,SAAUzoU,EAAQ85Y,EAAQC,EAAQ/X,GAC/D,G5W1JR,SAAwB18Y,GACpB,OAAOA,EAAMmjC,YAAciD,GAAmB6xI,K4WyJtCy8O,CAAQt3a,KAAK81C,UAAuB,IAAXxY,G5WtJrC,SAAuB1a,GACnB,OAAOA,EAAMmjC,YAAciD,GAAmB25R,I4WqJI40F,CAAOv3a,KAAK81C,UAAuB,IAAXxY,EAAe,CACjF,IAAIsN,EAASL,KAKb,GAJAsB,GAAYjB,EAAQ5qC,KAAK0rD,YAAa1rD,KAAK0rD,aAC3Czf,GAAgBrB,EAAQ5qC,KAAK+qD,iBAAkB/qD,KAAKirD,gBACpDq0W,EAAaA,IAAgBvyZ,EAAG/M,KAAKsrD,cAAgB,EAAGt+C,EAAGhN,KAAKqrD,eAAiB,GACjFi0W,EAAa30X,GAAuBC,EAAQ00X,GACvCt/Z,KAAK0rD,YAAcpuB,GAAWt9B,KAAK81C,QAAQ2b,eAAe+lX,SAC1Dx3a,KAAK0rD,YAAcpuB,GAAWt9B,KAAK81C,QAAQ2b,eAAegmX,QAAS,CACpEz3a,KAAK0rD,aAAepuB,EACpB,IAAIs9P,EAAa56R,KAAKo2a,gBACtBx7I,EAAW7tR,GAAK/M,KAAK0rD,YACrBkvO,EAAW5tR,GAAKhN,KAAK0rD,YAErB,IAAIgsX,EAAentY,KACnBsB,GAAY6rY,EAAcp6Y,EAAQA,EAAQgiY,EAAWvyZ,EAAGuyZ,EAAWtyZ,GACnEi/B,GAAgByrY,EAAcN,GAAU,EAAGC,GAAU,GACrD5rY,GAAeb,EAAQ8sY,GACvB,IAAI1tY,EAAYW,GAAuBC,GAAU79B,EAAG,EAAGC,EAAG,IAC3C,IAAXswB,IACA0M,EAAYhqC,KAAK23a,iBAAiB3tY,EAAUj9B,EAAGi9B,EAAUh9B,IAE7DhN,KAAKqN,WACDu6U,GAAIv7U,KAAKC,IAAI09B,EAAUj9B,GAAI6tR,EAAWpuR,MAAQxM,KAAK0rD,YACnDi8R,GAAIt7U,KAAKC,IAAI09B,EAAUh9B,GAAI4tR,EAAWluR,KAAO1M,KAAK0rD,YAClDD,MAAOzrD,KAAK0rD,aAEhB1rD,KAAK+qD,iBAAmB/gB,EAAUj9B,EAClC/M,KAAKirD,eAAiBjhB,EAAUh9B,EAChChN,KAAKq8L,UACqB,QAAtBr8L,KAAK81C,QAAQ/X,MACb/9B,KAAK81C,QAAQi1X,sBAEjB/qa,KAAK81C,QAAQuyN,WAAWroQ,KAAK+qD,iBAAmB6vO,EAAW7tR,GAAI/M,KAAKirD,eAAiB2vO,EAAW5tR,GAChG49C,GAAY5qD,KAAK81C,YAK7B+/X,EAAgBx6a,UAAUu8a,UAAY,SAAU5ka,GAE5C,IAAI+qB,GADJ/qB,EAAUA,OACS+qB,KACfmuB,EAASl5C,EAAQk5C,OACjBzvB,EAASzpB,EAAQypB,WACjBo7Y,EAAY7ka,EAAQ6ka,UACpBC,EAAe9ka,EAAQ8ka,aAC3Br7Y,EAAO9vB,OAAS8vB,EAAO9vB,QAAU,GACjC8vB,EAAO/vB,IAAM+vB,EAAO/vB,KAAO,GAC3B+vB,EAAOjwB,KAAOiwB,EAAOjwB,MAAQ,GAC7BiwB,EAAOhwB,MAAQgwB,EAAOhwB,OAAS,GAC/B,IACI6wB,EADA5G,EAASohZ,EAETV,GAAUp3a,KAAK+qD,iBACfssX,GAAUr3a,KAAKirD,eAGnB,GAAgB,kBAFhBiB,EAASA,GAAkB,iBAEOlsD,KAAK81C,QAAQyb,aAAav7C,OAAShW,KAAK81C,QAAQyb,aAAax7C,QACvF/V,KAAK81C,QAAQgc,MAAMr1D,OAAS,GAAKuD,KAAK81C,QAAQ+b,WAAWp1D,OAAS,EAAI,CAC1EshC,EAAOA,GAAc,OACN,iBAAXmuB,IACAx1B,EAAS12B,KAAKo2a,eAAc,EAAMlqX,IAEtC,IAAIT,GAAU1+C,EAAG,EAAGC,EAAG,GACvBy+C,EAAM1+C,GAAK/M,KAAKsrD,eAAiB7uB,EAAOjwB,KAAOiwB,EAAOhwB,QAAWiqB,EAAY,MAC7E+0B,EAAMz+C,GAAKhN,KAAKqrD,gBAAkB5uB,EAAO/vB,IAAM+vB,EAAO9vB,SAAY+pB,EAAa,QAC1EmhZ,GAAenhZ,EAAO1gB,MAAQhW,KAAK+qD,iBAAoB/qD,KAAKsrD,eAC5D50B,EAAO3gB,OAAS/V,KAAKirD,eAAkBjrD,KAAKqrD,iBAC7CI,EAAM1+C,EAAIV,KAAK0T,IAAI,EAAG0rC,EAAM1+C,GAC5B0+C,EAAMz+C,EAAIX,KAAK0T,IAAI,EAAG0rC,EAAMz+C,IAEhC,IAAIohE,OAAa,EACbptD,OAAU,EACVC,OAAU,EACd,OAAQ8c,GACJ,IAAK,QAEDT,GADA8wC,EAAa3iB,EAAM1+C,GACG/M,KAAK0rD,YAE3B0rX,IADAp2Z,GAAWhhB,KAAKsrD,cAAiB50B,EAAY,MAAI03C,GAAc,EAAI13C,EAAO3pB,EAAIqhE,IACzD3xC,EAAOjwB,KAAOiwB,EAAOhwB,OAAS,EAAI2hE,EACvDipW,IAAWr3a,KAAKirD,eAAiB3tB,EACjC+5Y,EAAoB,iBAAXnrX,EAA4BmrX,EAASA,EAASr3a,KAAKirD,eAAiB3tB,EAC7E,MACJ,IAAK,SAEDA,GADA8wC,EAAa3iB,EAAMz+C,GACIhN,KAAK0rD,YAC5B1qC,GAAYhhB,KAAKsrD,cAAiB50B,EAAY,MAAI03C,GAAc,EAAK13C,EAAO3pB,EAAIqhE,EAChFntD,GAAYjhB,KAAKqrD,eAAkB30B,EAAa,OAAI03C,GAAc,EAAK13C,EAAO1pB,EAAIohE,EAClFgpW,GAAUp2Z,GAAWyb,EAAOjwB,KAAOiwB,EAAOhwB,OAAS,EAAI2hE,EACvDipW,GAAUp2Z,GAAWwb,EAAO/vB,IAAM+vB,EAAO9vB,QAAU,EAAIyhE,EACvD,MACJ,IAAK,OAED9wC,GADA8wC,EAAa/hE,KAAK0T,IAAI0rC,EAAM1+C,EAAG0+C,EAAMz+C,IACdhN,KAAK0rD,YAC5B1qC,GAAWhhB,KAAKsrD,cAAiB50B,EAAY,MAAI03C,GAAc,EAAI13C,EAAO3pB,EAAIqhE,EAC9EntD,GAAWjhB,KAAKqrD,eAAkB30B,EAAa,OAAI03C,GAAc,EAAI13C,EAAO1pB,EAAIohE,EAChFgpW,GAAUp2Z,GAAWyb,EAAOjwB,KAAOiwB,EAAOhwB,OAAS,EAAI2hE,EACvDipW,GAAUp2Z,GAAWwb,EAAO/vB,IAAM+vB,EAAO9vB,QAAU,EAAIyhE,EAG/DpuE,KAAK+lW,KAAKzoU,EAAQ85Y,EAAQC,GAAUtqa,EAAG,EAAGC,EAAG,SAG7CswB,EAAS,EAAIt9B,KAAK0rD,YAClB1rD,KAAK+lW,KAAKzoU,EAAQ85Y,EAAQC,GAAUtqa,EAAG,EAAGC,EAAG,KAIrD6oa,EAAgBx6a,UAAU08a,cAAgB,SAAU1kZ,GAChD,IAAItmB,EAAI,EACJC,EAAI,EACJy+C,EAAQzrD,KAAK0rD,YACbh1B,EAASrD,EACT2kZ,GAAWh4a,KAAK+qD,iBAChBktX,GAAWj4a,KAAKirD,eACpBv0B,EAAS,IAAIR,GAAKQ,EAAO3pB,EAAI0+C,EAAO/0B,EAAO1pB,EAAIy+C,EAAO/0B,EAAO1gB,MAAQy1C,EAAO/0B,EAAO3gB,OAAS01C,GACjF,IAAIv1B,GAAK8hZ,EAASC,EAASj4a,KAAKsrD,cAAetrD,KAAKqrD,gBACpD/uB,aAAa5F,KAChBA,EAAOjqB,OAAUura,EAAUh4a,KAAKsrD,gBAChCv+C,EAAI2pB,EAAOjqB,MAAQzM,KAAKsrD,eAExB50B,EAAO3pB,GAAKira,IACZjra,EAAI2pB,EAAO3pB,GAEX2pB,EAAO/pB,QAAWsra,EAAUj4a,KAAKqrD,iBACjCr+C,EAAI0pB,EAAO/pB,OAAS3M,KAAKqrD,gBAEzB30B,EAAO1pB,GAAKira,IACZjra,EAAI0pB,EAAO1pB,GAEfhN,KAAK+lW,KAAK,GAAI/lW,KAAK+qD,iBAAmBh+C,GAAI/M,KAAKirD,eAAiBj+C,EAAG,QAI3E6oa,EAAgBx6a,UAAU68a,cAAgB,SAAUxhZ,GAChD,IAAI+0B,EAAQzrD,KAAK0rD,YACbysX,EAAe,IAAIjiZ,GAAKQ,EAAO3pB,EAAI0+C,EAAO/0B,EAAO1pB,EAAIy+C,EAAO/0B,EAAO1gB,MAAQy1C,EAAO/0B,EAAO3gB,OAAS01C,GAClGusX,EAAUG,EAAapra,EAAIora,EAAania,MAAQ,EAAIhW,KAAKsrD,cAAgB,EACzE2sX,EAAUE,EAAanra,EAAImra,EAAapia,OAAS,EAAI/V,KAAKqrD,eAAiB,EAC/ErrD,KAAK+lW,KAAK,GAAI/lW,KAAK+qD,iBAAmBitX,GAAUh4a,KAAKirD,eAAiBgtX,EAAS,OAEnFpC,EAAgBx6a,UAAUs8a,iBAAmB,SAAU9sX,EAASG,GAC5D,GAAgD,aAA5ChrD,KAAK81C,QAAQ2b,eAAe2mX,YAA4B,CACxD,IAAI1hZ,OAAS,EACmC,YAA5C12B,KAAK81C,QAAQ2b,eAAe2mX,cAC5B1hZ,EAAS12B,KAAK81C,QAAQ2b,eAAe4mX,iBAEzC3hZ,EAASA,GAAU12B,KAAKo2a,eAAc,IAC/Brpa,GAAK/M,KAAK0rD,YACjBh1B,EAAO1pB,GAAKhN,KAAK0rD,YACjBh1B,EAAO1gB,OAAShW,KAAK0rD,YACrBh1B,EAAO3gB,QAAU/V,KAAK0rD,YACtBb,IAAY,EACZG,IAAY,EACZ,IAAIstX,EAAejsa,KAAKC,IAAIoqB,EAAOjqB,MAAOzM,KAAKsrD,eAC/C,KAAMT,GAAWn0B,EAAO3pB,IAAM89C,EAAU7qD,KAAKsrD,eAAiB50B,EAAOjqB,OACjEo+C,GAAWn0B,EAAOjqB,MAAQzM,KAAKsrD,gBAC5BT,GAAWn0B,EAAO3pB,GAAM89C,EAAU7qD,KAAKsrD,eAAiBgtX,GAE3D,GAAIztX,GAAWn0B,EAAO3pB,EAClB89C,EAAUx+C,KAAKC,IAAIoqB,EAAO3pB,EAAGV,KAAK0T,IAAI8qC,EAASA,GAAWA,EAAU7qD,KAAKsrD,cAAgBtrD,KAAKk2a,YAAcoC,SAE3G,CACD,IAAIC,EAAU7hZ,EAAOjqB,MAAQzM,KAAKsrD,cAClCT,EAAUx+C,KAAK0T,IAAIw4Z,EAAS7hZ,EAAO3pB,GAG3C,IAAIyra,EAAgBnsa,KAAKC,IAAIoqB,EAAO/pB,OAAQ3M,KAAKqrD,gBACjD,KAAML,GAAWt0B,EAAO1pB,GAAKg+C,EAAUhrD,KAAKqrD,gBAAkB30B,EAAO/pB,QAC9Dq+C,GAAWt0B,EAAO1pB,GAAKg+C,EAAUhrD,KAAKqrD,gBAAkBmtX,GAE3D,GAAIxtX,GAAWt0B,EAAO1pB,EAClBg+C,EAAU3+C,KAAKC,IAAIoqB,EAAO1pB,EAAGX,KAAK0T,IAAIirC,EAASA,GAAWA,EAAUhrD,KAAKqrD,eAAiBrrD,KAAKi2a,YAAcuC,SAE5G,CACGD,EAAU7hZ,EAAO/pB,OAAS3M,KAAKqrD,eACnCL,EAAU3+C,KAAK0T,IAAI2W,EAAO1pB,EAAGura,GAGrC1tX,IAAY,EACZG,IAAY,EAEhB,OAASj+C,EAAG89C,EAAS79C,EAAGg+C,IAErB6qX,KCjhBP4C,GAAsB,WAEtB,SAASA,EAAKjsa,EAAME,EAAKsJ,EAAOD,EAAQ2ia,GACpC14a,KAAKyuD,WACLzuD,KAAKwM,KAAOA,EACZxM,KAAK0M,IAAMA,EACX1M,KAAKgW,MAAQA,EACbhW,KAAK+V,OAASA,EACd/V,KAAKqoa,cAAgBqQ,EAqJzB,OAlJAD,EAAKp9a,UAAUs9a,UAAY,SAAUC,EAAiBC,GAChC,MAAd74a,KAAKpB,OAAiBoB,KAAKpB,MAAM6jU,YAAYm2G,IAC7C54a,KAAKpB,MAAM+5a,UAAUC,EAAiBC,GAEvB,MAAf74a,KAAKnB,QAAkBmB,KAAKnB,OAAO4jU,YAAYm2G,IAC/C54a,KAAKnB,OAAO85a,UAAUC,EAAiBC,GAEzB,MAAd74a,KAAK84a,OAAiB94a,KAAK84a,MAAMr2G,YAAYm2G,IAC7C54a,KAAK84a,MAAMH,UAAUC,EAAiBC,GAEvB,MAAf74a,KAAK+4a,QAAkB/4a,KAAK+4a,OAAOt2G,YAAYm2G,IAC/C54a,KAAK+4a,OAAOJ,UAAUC,EAAiBC,GAEvC74a,KAAKyuD,QAAQhyD,OAAS,GACtBo8a,EAAMr0a,KAAKxE,OAGnBy4a,EAAKp9a,UAAUonU,YAAc,SAAUzzR,GACnC,QAAIhvC,KAAKwM,KAAOxM,KAAKgW,MAAQg5B,EAAExiC,MAAQxM,KAAK0M,IAAM1M,KAAK+V,OAASi5B,EAAEtiC,KAAO1M,KAAKwM,KAAOwiC,EAAEviC,OAASzM,KAAK0M,IAAMsiC,EAAEriC,SAMjH8ra,EAAKp9a,UAAU29a,WAAa,WAIxB,IAHA,IAEIC,EAFA9xa,EAAS,KACTwZ,EAAU3gB,KAEI,MAAX2gB,GAEHA,GADAs4Z,EAAUt4Z,EAAQu4Z,QAAQ/xa,IACR5K,OAClB4K,EAAS8xa,EAAQ9xa,QAAUA,EAE/B,OAAOA,GAEXsxa,EAAKp9a,UAAU69a,QAAU,SAAU/xa,GAE/B,IAAIgya,EAAYn5a,KAAKgW,MAAQ,EACzBoja,EAAap5a,KAAK+V,OAAS,EAC/B,GAAIoja,GAAa,KAAQC,GAAc,IAAM,CACzC,IAAI9vF,EAAUtpV,KAAKwM,KAAO2sa,EACtB5vF,EAAUvpV,KAAK0M,IAAM0sa,EACzB,GAAIp5a,KAAKqoa,cAAcgR,YAAc/vF,EAAS,CAC1C,GAAItpV,KAAKqoa,cAAciR,aAAe/vF,EAAS,CAC3C,IAAKvpV,KAAKpB,MAAO,EACT26a,EAAU,IAAId,EAAKz4a,KAAKwM,KAAMxM,KAAK0M,IAAKysa,EAAWC,EAAYp5a,KAAKqoa,gBAChE/na,OAASN,KACjBA,KAAKpB,MAAQ26a,EAEjB,OAASh9a,OAAQyD,KAAKpB,OAE1B,GAAIoB,KAAKqoa,cAAcmR,UAAYjwF,EAAS,CACxC,IAAKvpV,KAAK84a,MAAO,EACTS,EAAU,IAAId,EAAKz4a,KAAKwM,KAAM+8U,EAAS4vF,EAAWC,EAAYp5a,KAAKqoa,gBAC/D/na,OAASN,KACjBA,KAAK84a,MAAQS,EAEjB,OAASh9a,OAAQyD,KAAK84a,aAGzB,GAAI94a,KAAKqoa,cAAcoR,WAAanwF,EAAS,CAC9C,GAAItpV,KAAKqoa,cAAciR,aAAe/vF,EAAS,CAC3C,IAAKvpV,KAAKnB,OAAQ,EACV06a,EAAU,IAAId,EAAKnvF,EAAStpV,KAAK0M,IAAKysa,EAAWC,EAAYp5a,KAAKqoa,gBAC9D/na,OAASN,KACjBA,KAAKnB,OAAS06a,EAElB,OAASh9a,OAAQyD,KAAKnB,QAE1B,GAAImB,KAAKqoa,cAAcmR,UAAYjwF,EAAS,CACxC,IAAKvpV,KAAK+4a,OAAQ,CACd,IAAIQ,GAAAA,EAAU,IAAId,EAAKnvF,EAASC,EAAS4vF,EAAWC,EAAYp5a,KAAKqoa,gBAC7D/na,OAASN,KACjBA,KAAK+4a,OAASQ,EAElB,OAASh9a,OAAQyD,KAAK+4a,UAMlC,OAFS/4a,KACTA,KAAKyuD,QAAQjqD,KAAKxE,KAAKqoa,cAAc33V,YAC5BvpE,OAAQnH,OAGrBy4a,EAAKp9a,UAAUq+a,YAAc,WACzB,OAAI15a,KAAKqoa,cAAcoR,WAAaz5a,KAAKwM,MAAQxM,KAAKqoa,cAAcgR,YAAcr5a,KAAKwM,KAAOxM,KAAKgW,OAC/FhW,KAAKqoa,cAAcmR,UAAYx5a,KAAK0M,KAAO1M,KAAKqoa,cAAciR,aAAet5a,KAAK0M,IAAM1M,KAAK+V,QAMrG0ia,EAAKp9a,UAAUs+a,aAAe,SAAUp5a,GACpC,IAAIq5a,KACJ55a,KAAKqoa,cAAcwR,eAAet5a,GAElC,IADA,IAAIu5a,EAAO,MACHF,EAAaG,SAEjBD,GADAF,EAAe55a,KAAKqoa,cAAc2R,WAAW51a,IAAI01a,IAC7BA,KAExB,OAAOA,GAEXrB,EAAKp9a,UAAU+I,IAAM,SAAU01a,GAE3B,GADAA,EAAO,KACH95a,KAAK05a,cAEL,OADAI,EAAO95a,KAAKg5a,cACHe,SAAS,EAAMD,KAAMA,GAG9B,IAAIG,OAAY,EACZC,IAAkC,IAAxBl6a,KAAKyuD,QAAQhyD,QAAiBuD,KAAKpB,OAAUoB,KAAKnB,QAAWmB,KAAK84a,OAC3E94a,KAAK+4a,QACNoB,EAAwB,EAAbn6a,KAAKgW,MAChBoka,EAA0B,EAAdp6a,KAAK+V,OA6BrB,OA5BI/V,KAAKqoa,cAAcoR,UAAYz5a,KAAKwM,KAChCxM,KAAKqoa,cAAcmR,SAAWx5a,KAAK0M,KACnCuta,EAAY,IAAIxB,EAAKz4a,KAAKwM,KAAOxM,KAAKgW,MAAOhW,KAAK0M,IAAM1M,KAAK+V,OAAQoka,EAAUC,EAAWp6a,KAAKqoa,eAC1F6R,IACDD,EAAUlB,OAAS/4a,QAIvBi6a,EAAY,IAAIxB,EAAKz4a,KAAKwM,KAAOxM,KAAKgW,MAAOhW,KAAK0M,IAAKyta,EAAUC,EAAWp6a,KAAKqoa,eAC5E6R,IACDD,EAAUp7a,OAASmB,OAItBA,KAAKqoa,cAAcmR,SAAWx5a,KAAK0M,KACxCuta,EAAY,IAAIxB,EAAKz4a,KAAKwM,KAAMxM,KAAK0M,IAAM1M,KAAK+V,OAAQoka,EAAUC,EAAWp6a,KAAKqoa,eAC7E6R,IACDD,EAAUnB,MAAQ94a,QAItBi6a,EAAY,IAAIxB,EAAKz4a,KAAKwM,KAAMxM,KAAK0M,IAAKyta,EAAUC,EAAWp6a,KAAKqoa,eAC/D6R,IACDD,EAAUr7a,MAAQoB,OAG1BA,KAAKM,OAAS25a,EACdj6a,KAAKqoa,cAAc2R,WAAaC,GACvBF,SAAS,EAAOD,KAAMA,IAIhCrB,KC5JP4B,GAA+B,WAE/B,SAASA,EAAcxN,GACnB7sa,KAAKs6a,SAAW,IAChBt6a,KAAK6sa,YAAcA,EACnB7sa,KAAKg6a,WAAa,IAAIvB,GAAK,EAAG,EAAmB,EAAhBz4a,KAAKs6a,SAA8B,EAAhBt6a,KAAKs6a,SAAct6a,MACvEA,KAAKu6a,SAAWjjZ,OAAOC,UACvBv3B,KAAKw6a,WAAaljZ,OAAOC,UACzBv3B,KAAKy6a,QAAUnjZ,OAAOC,UACtBv3B,KAAK06a,YAAcpjZ,OAAOC,UAC1Bv3B,KAAK26a,aAsUT,OAnUAN,EAAch/a,UAAU8ya,gBAAkB,SAAU5ta,GAChD,GAAIP,KAAK26a,UAAUp6a,EAAK+C,IAAK,CACzB,IAAIw2a,EAAO95a,KAAK26a,UAAUp6a,EAAK+C,IAC3B2O,EAAQ6na,EAAKrrX,QAAQlwD,QAAQgC,IAClB,IAAX0R,IACA6na,EAAKrrX,QAAQpmC,OAAOpW,EAAO,GAC3BjS,KAAKq/C,OAAOy6X,UACL95a,KAAK26a,UAAUp6a,EAAK+C,OAIvC+2a,EAAch/a,UAAUgkD,OAAS,SAAUy6X,GACvC,GAAIA,EAAKx5a,QAAkC,IAAxBw5a,EAAKrrX,QAAQhyD,QAAgBq9a,EAAKl7a,OAASk7a,EAAKj7a,QAAUi7a,EAAKhB,OAASgB,EAAKf,OAAhG,CACI,IAAI/lU,EAAW8mU,EAAKx5a,OAChB0yG,EAASp0G,QAAUk7a,EACnB9mU,EAASp0G,MAAQ,KAEZo0G,EAASn0G,SAAWi7a,EACzB9mU,EAASn0G,OAAS,KAEbm0G,EAAS8lU,QAAUgB,EACxB9mU,EAAS8lU,MAAQ,KAEZ9lU,EAAS+lU,SAAWe,IACzB9mU,EAAS+lU,OAAS,MAEtB/4a,KAAKq/C,OAAOy6X,EAAKx5a,aAGbw5a,IAAS95a,KAAKg6a,YAAeF,EAAKl7a,OAAUk7a,EAAKj7a,QAAWi7a,EAAKhB,OAAUgB,EAAKf,SAChFe,EAAKtta,KAAO,EACZsta,EAAK9ja,MAAQ,IACb8ja,EAAKpta,IAAM,EACXota,EAAK/ja,OAAS,MAK1Bska,EAAch/a,UAAUs+a,aAAe,SAAUp5a,GAC7C,IAAIu5a,EAAO95a,KAAKg6a,WAAWL,aAAap5a,GACxCP,KAAK26a,UAAUp6a,EAAK+C,IAAMw2a,GAE9BO,EAAch/a,UAAUu/a,WAAa,SAAUr6a,GAC3CP,KAAK65a,eAAet5a,GACpB,IAAIs6a,EAAYt6a,EAAKqkD,YACrB,GAAO5C,MAAM64X,EAAU9ta,IAAOi1C,MAAM64X,EAAU7ta,IACzCg1C,MAAM64X,EAAU7ka,QAAWgsC,MAAM64X,EAAU9ka,QAC5C,OAAO,EAGX,GAAI/V,KAAK26a,UAAUp6a,EAAK+C,IAAK,CACdtD,KAAK26a,UAAUp6a,EAAK+C,IACrBo2a,gBACN15a,KAAKmua,gBAAgB5ta,GACrBP,KAAK25a,aAAap5a,SAItBP,KAAK25a,aAAap5a,GAEtB,IAAIP,KAAK86a,mBAAmBD,IACxB76a,KAAK+6a,cAAgBx6a,GACrBP,KAAKolM,aAAe7kM,GACpBP,KAAKg7a,eAAiBz6a,GACtBP,KAAKqlM,gBAAkB9kM,EAGtB,CACD,IAAIy8P,GAAW,EAiDf,OAhDIh9P,KAAKu6a,WAAav6a,KAAKy5a,WAAal5a,IAASP,KAAK+6a,cAC9C/6a,KAAKu6a,UAAYv6a,KAAKy5a,WACtBz5a,KAAKu6a,SAAWv6a,KAAKy5a,UACrBz5a,KAAK+6a,YAAcx6a,EACnBy8P,GAAW,GAENz8P,IAASP,KAAK+6a,cACnB/6a,KAAKu6a,SAAWjjZ,OAAOC,UACvBv3B,KAAKi7a,SAASj7a,KAAKg6a,YACnBh9K,GAAW,IAGfh9P,KAAKy6a,UAAYz6a,KAAKw5a,UAAYj5a,IAASP,KAAKolM,aAC5CplM,KAAKy6a,SAAWz6a,KAAKw5a,UACrBx5a,KAAKy6a,QAAUz6a,KAAKw5a,SACpBx5a,KAAKolM,WAAa7kM,EAClBy8P,GAAW,GAENz8P,IAASP,KAAKolM,aACnBplM,KAAKy6a,QAAUnjZ,OAAOC,UACtBv3B,KAAKk7a,QAAQl7a,KAAKg6a,YAClBh9K,GAAW,IAGfh9P,KAAK06a,aAAe16a,KAAKs5a,aAAe/4a,IAASP,KAAKqlM,gBAClDrlM,KAAK06a,YAAc16a,KAAKs5a,aACxBt8K,GAAW,EACXh9P,KAAK06a,WAAa16a,KAAKs5a,YACvBt5a,KAAKqlM,cAAgB9kM,GAEhBA,IAASP,KAAKqlM,gBACnBrlM,KAAK06a,YAAcpjZ,OAAOC,UAC1Bv3B,KAAKm7a,WAAWn7a,KAAKg6a,YACrBh9K,GAAW,IAGfh9P,KAAKw6a,YAAcx6a,KAAKq5a,YAAc94a,IAASP,KAAKg7a,eAChDh7a,KAAKw6a,WAAax6a,KAAKq5a,YACvBr5a,KAAKw6a,UAAYx6a,KAAKq5a,WACtBr5a,KAAKg7a,aAAez6a,EACpBy8P,GAAW,GAENz8P,IAASP,KAAKg7a,eACnBh7a,KAAKw6a,WAAaljZ,OAAOC,UACzBv3B,KAAKo7a,UAAUp7a,KAAKg6a,YACpBh9K,GAAW,IAGZA,EAGX,OADAh9P,KAAK65a,eAAe,OACb,GAEXQ,EAAch/a,UAAUy/a,mBAAqB,SAAUv6a,GACnD,OAAIA,EAAKiM,MAAQxM,KAAKu6a,UAAYh6a,EAAKkM,OAASzM,KAAKw6a,WAAaj6a,EAAKmM,KAAO1M,KAAKy6a,SAC5El6a,EAAKoM,QAAU3M,KAAK06a,YAQ/BL,EAAch/a,UAAUs9a,UAAY,SAAUzsX,GAC1C,IAAI2sX,KAEJ,OADA74a,KAAKg6a,WAAWrB,UAAUzsX,EAAQ2sX,GAC3BA,GAGXwB,EAAch/a,UAAUita,YAAc,SAAUp8W,GAG5C,IAAK,IADDuC,KACKrwD,EAAK,EAAGi9a,EAFLr7a,KAAK24a,UAAUzsX,GAEO9tD,EAAKi9a,EAAQ5+a,OAAQ2B,IAEnD,IAAK,IAAIyE,EAAK,EAAGoB,EADNo3a,EAAQj9a,GACQqwD,QAAS5rD,EAAKoB,EAAGxH,OAAQoG,IAAM,CACtD,IAAI9F,EAAMkH,EAAGpB,GACT9F,EAAI6nD,YAAY82V,WAAWxvV,IAC3BuC,EAAQjqD,KAAKxE,KAAK6sa,YAAY9va,EAAIuG,KAI9C,OAAOmrD,GAGX4rX,EAAch/a,UAAUumZ,aAAe,SAAUrhZ,GAC7C,IAAIy8P,GAAW,EAyBf,OAxBIz8P,IAASP,KAAKolM,aACdplM,KAAKy6a,QAAUnjZ,OAAOC,UACtBv3B,KAAKolM,WAAa,KAClBplM,KAAKk7a,QAAQl7a,KAAKg6a,YAClBh9K,GAAW,GAEXz8P,IAASP,KAAK+6a,cACd/6a,KAAKu6a,SAAWjjZ,OAAOC,UACvBv3B,KAAK+6a,YAAc,KACnB/6a,KAAKi7a,SAASj7a,KAAKg6a,YACnBh9K,GAAW,GAEXz8P,IAASP,KAAKg7a,eACdh7a,KAAKw6a,WAAaljZ,OAAOC,UACzBv3B,KAAKg7a,aAAe,KACpBh7a,KAAKo7a,UAAUp7a,KAAKg6a,YACpBh9K,GAAW,GAEXz8P,IAASP,KAAKqlM,gBACdrlM,KAAK06a,YAAcpjZ,OAAOC,UAC1Bv3B,KAAKqlM,cAAgB,KACrBrlM,KAAKm7a,WAAWn7a,KAAKg6a,YACrBh9K,GAAW,GAERA,GAEXq9K,EAAch/a,UAAU8/a,WAAa,SAAUrB,GAGnCA,EAAKhB,OAASgB,EAAKf,QACfe,EAAKhB,OACL94a,KAAKm7a,WAAWrB,EAAKhB,OAErBgB,EAAKf,QACL/4a,KAAKm7a,WAAWrB,EAAKf,UAIrBe,EAAKj7a,QACLmB,KAAKm7a,WAAWrB,EAAKj7a,QAErBi7a,EAAKl7a,OACLoB,KAAKm7a,WAAWrB,EAAKl7a,QAIjC,IAAK,IAAIR,EAAK,EAAGyE,EAAKi3a,EAAKrrX,QAASrwD,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACtD,IAAImC,EAAOsC,EAAGzE,GACV4B,KAAK06a,YAAcn6a,EAAKqkD,YAAYj4C,SACpC3M,KAAK06a,WAAan6a,EAAKqkD,YAAYj4C,OACnC3M,KAAKqlM,cAAgB9kM,KAIjC85a,EAAch/a,UAAU+/a,UAAY,SAAUtB,GAGlCA,EAAKj7a,QAAUi7a,EAAKf,QAChBe,EAAKj7a,QACLmB,KAAKo7a,UAAUtB,EAAKj7a,QAEpBi7a,EAAKf,QACL/4a,KAAKo7a,UAAUtB,EAAKf,UAIpBe,EAAKl7a,OACLoB,KAAKo7a,UAAUtB,EAAKl7a,OAEpBk7a,EAAKhB,OACL94a,KAAKo7a,UAAUtB,EAAKhB,QAIhC,IAAK,IAAI16a,EAAK,EAAGyE,EAAKi3a,EAAKrrX,QAASrwD,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACtD,IAAImC,EAAOsC,EAAGzE,GACV4B,KAAKw6a,WAAaj6a,EAAKqkD,YAAYn4C,QACnCzM,KAAKw6a,UAAYj6a,EAAKqkD,YAAYn4C,MAClCzM,KAAKg7a,aAAez6a,KAIhC85a,EAAch/a,UAAU4/a,SAAW,SAAUnB,GAGjCA,EAAKl7a,OAASk7a,EAAKhB,OACfgB,EAAKl7a,OACLoB,KAAKi7a,SAASnB,EAAKl7a,OAEnBk7a,EAAKhB,OACL94a,KAAKi7a,SAASnB,EAAKhB,SAInBgB,EAAKj7a,QACLmB,KAAKi7a,SAASnB,EAAKj7a,QAEnBi7a,EAAKf,QACL/4a,KAAKi7a,SAASnB,EAAKf,SAI/B,IAAK,IAAI36a,EAAK,EAAGyE,EAAKi3a,EAAKrrX,QAASrwD,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACtD,IAAImC,EAAOsC,EAAGzE,GACV4B,KAAKu6a,UAAYh6a,EAAKqkD,YAAYp4C,OAClCxM,KAAKu6a,SAAWh6a,EAAKqkD,YAAYp4C,KACjCxM,KAAK+6a,YAAcx6a,KAI/B85a,EAAch/a,UAAU6/a,QAAU,SAAUpB,GAGhCA,EAAKl7a,OAASk7a,EAAKj7a,QACfi7a,EAAKl7a,OACLoB,KAAKk7a,QAAQpB,EAAKl7a,OAElBk7a,EAAKj7a,QACLmB,KAAKk7a,QAAQpB,EAAKj7a,UAIlBi7a,EAAKhB,OACL94a,KAAKk7a,QAAQpB,EAAKhB,OAElBgB,EAAKf,QACL/4a,KAAKk7a,QAAQpB,EAAKf,SAI9B,IAAK,IAAI36a,EAAK,EAAGyE,EAAKi3a,EAAKrrX,QAASrwD,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACtD,IAAImC,EAAOsC,EAAGzE,GACV4B,KAAKy6a,SAAWl6a,EAAKqkD,YAAYl4C,MACjC1M,KAAKy6a,QAAUl6a,EAAKqkD,YAAYl4C,IAChC1M,KAAKolM,WAAa7kM,KAK9B85a,EAAch/a,UAAUw+a,eAAiB,SAAUt5a,GAE/C,GADAP,KAAK0wE,UAAYnwE,EACbA,EAAM,CACN,IAAIq8B,EAAIr8B,EAAKqkD,YACb5kD,KAAKy5a,UAAYniZ,OAAOsF,EAAEpwB,MAC1BxM,KAAKw5a,SAAWliZ,OAAOsF,EAAElwB,KACzB1M,KAAKq5a,WAAa/hZ,OAAOsF,EAAEnwB,OAC3BzM,KAAKs5a,YAAchiZ,OAAOsF,EAAEjwB,aAG5B3M,KAAKy5a,UAAYniZ,OAAOC,UACxBv3B,KAAKw5a,SAAWliZ,OAAOC,UACvBv3B,KAAKq5a,YAAc/hZ,OAAOC,UAC1Bv3B,KAAKs5a,aAAehiZ,OAAOC,WAInC8iZ,EAAch/a,UAAU+6a,cAAgB,SAAUkF,EAASC,GACvD,GAAIv7a,KAAKu6a,WAAajjZ,OAAOC,UACzB,OAAO,IAAIrB,GAAK,EAAG,EAAG,EAAG,GAE7B,IAAI1pB,OAAmBrR,IAAZmgb,EAAwBjva,KAAK0T,IAAI/f,KAAKu6a,SAAU,GAAKv6a,KAAKu6a,SACjE7ta,OAAkBvR,IAAZogb,EAAwBlva,KAAK0T,IAAI/f,KAAKy6a,QAAS,GAAKz6a,KAAKy6a,QACnE,OAAO,IAAIvkZ,GAAK7pB,KAAKoxB,MAAMjxB,GAAOH,KAAKoxB,MAAM/wB,GAAML,KAAKoxB,MAAMz9B,KAAKw6a,UAAYhua,GAAOH,KAAKoxB,MAAMz9B,KAAK06a,WAAahua,KAGvH2ta,EAAch/a,UAAU69a,QAAU,SAAU34a,GACxC,OAAOP,KAAK26a,UAAUp6a,EAAK+C,KAExB+2a,KCrVP/vV,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAM5D4+Y,GAA4B,SAAUrwV,GAEtC,SAASqwV,IACL,OAAkB,OAAXrwV,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVAsqF,GAAUkxV,EAAYrwV,GAItBN,IACI3jF,KACDs0a,EAAWngb,UAAW,WAAO,GAChCwvF,IACI3jF,KACDs0a,EAAWngb,UAAW,oBAAgB,GAClCmgb,GACTx8W,IAEEy8W,GAAyB,SAAUtwV,GAEnC,SAASswV,IACL,OAAkB,OAAXtwV,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAiB/D,OAnBAsqF,GAAUmxV,EAAStwV,GAInBN,IACI3jF,EAAS,KACVu0a,EAAQpgb,UAAW,YAAQ,GAC9BwvF,IACI3jF,KACDu0a,EAAQpgb,UAAW,kBAAc,GACpCwvF,IACI3jF,KACDu0a,EAAQpgb,UAAW,eAAW,GACjCwvF,IACI9iF,KAAYyza,KACbC,EAAQpgb,UAAW,eAAW,GACjCwvF,IACI3jF,EAAS,KACVu0a,EAAQpgb,UAAW,iBAAa,GAC5Bogb,GACTz8W,IAEE08W,GAAgC,SAAUvwV,GAE1C,SAASuwV,IACL,OAAkB,OAAXvwV,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAK/D,OAPAsqF,GAAUoxV,EAAgBvwV,GAI1BN,IACIxiF,KAAeoza,KAChBC,EAAergb,UAAW,gBAAY,GAClCqgb,GACT18W,IAKE28W,GAAqC,SAAUxwV,GAE/C,SAASwwV,IACL,OAAkB,OAAXxwV,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbAsqF,GAAUqxV,EAAqBxwV,GAI/BN,IACI3jF,KACDy0a,EAAoBtgb,UAAW,YAAQ,GAC1CwvF,IACI3jF,KACDy0a,EAAoBtgb,UAAW,0BAAsB,GACxDwvF,IACI3jF,KACDy0a,EAAoBtgb,UAAW,aAAS,GACpCsgb,GACT38W,ICtFEsrB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GA8D5Du1B,GAAyB,SAAUg5B,GAKnC,SAASh5B,EAAQn/C,EAAShS,GACtB,IAAIjB,EAAQorF,EAAO7pF,KAAKtB,KAAMgT,EAAShS,IAAYhB,KAQnD,OANAD,EAAMgua,kBAENhua,EAAM67a,cAEN77a,EAAM2na,aAAgBpka,GAAI,GAAIi2D,SAAU,GAAIsiX,SAAS,GACrD97a,EAAM+7a,YAAc,KACb/7a,EAw2IX,OAr3IAuqF,GAAUn4B,EAASg5B,GAenBh5B,EAAQ92D,UAAU0gb,gBAAkB,SAAUC,GAG1C,IAAK,IADDj/a,EADAoqC,KAEK/oC,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAK0C,KAAKs5D,WAAYl7D,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACrE,IAAIf,EAAMwF,EAAGzE,IACbrB,EAAMiD,KAAKs5D,UAAUj8D,MACR2+a,GAAej/a,aAAe+oD,KAAgBk2X,GAAej/a,aAAeoqD,KACrFhgB,EAAW3iC,KAAKzH,GAGxBiD,KAAKi8a,aAAa90Y,IAQtBgrB,EAAQ92D,UAAUmsF,kBAAoB,SAAUiF,EAASC,GAKrD,IAAK,IAHDwvV,KACAC,GAAgB,EAChBC,GAAqB,EAChBh+a,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKmvF,GAAUruF,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAE9D,OADWyE,EAAGzE,IAEV,IAAK,QACL,IAAK,SACD4B,KAAKgB,QAAQ0D,MAAMsR,MAAQhW,KAAKsja,aAAatja,KAAKgW,OAClDhW,KAAKgB,QAAQ0D,MAAMqR,OAAS/V,KAAKsja,aAAatja,KAAK+V,QACnD/V,KAAKq8a,aAAajZ,mBAAmBpja,KAAKgB,SAC1C,IAAK,IAAIiD,EAAK,EAAGwG,EAAKzK,KAAKiyD,MAAOhuD,EAAKwG,EAAGhO,OAAQwH,IAAM,CACpD,IAAIq3L,EAAO7wL,EAAGxG,GACV8pB,EAAO/tB,KAAKiyD,MAAMqpI,GAChBvtK,aAAgBokC,GAClBpkC,EAAKuuZ,WAAWvuZ,GAGxB,MACJ,IAAK,QACD,GAAI0+D,EAAQ36B,MAAMr1D,OAAS,GAA8B,IAAzBiwF,EAAQ56B,MAAMr1D,OAC1CuD,KAAK+7a,kBACLK,GAAqB,MAEpB,CACD,IAAK,IAAI7qG,EAAK,EAAGC,EAAKlzU,OAAOhB,KAAKmvF,EAAQ36B,OAAQy/Q,EAAKC,EAAG/0U,OAAQ80U,IAAM,CACpE,IAAIl0U,EAAMm0U,EAAGD,GACTt/T,EAAQqlB,OAAOj6B,GACfg2D,EAAerzD,KAAK8xD,MAAM7/C,GAC1BsoS,EAAc9tN,EAAQ36B,MAAM7/C,GAChCkqa,EAAgBA,QAAmDhhb,IAAlCo/S,EAAYgiI,kBAC7Cv8a,KAAK0xa,mBAAmBr+W,EAAcq5B,EAAQ56B,MAAM7/C,GAAQsoS,GAC5D2hI,EAAY13a,KAAK6uD,GAEH,WAAdrzD,KAAK+9B,MACL/9B,KAAK+qa,sBAGb,MACJ,IAAK,aAED,GAAIt+U,EAAQ56B,WAAWp1D,OAAS,GAAmC,IAA9BiwF,EAAQ76B,WAAWp1D,OACpDuD,KAAK+7a,iBAAgB,GACrBK,GAAqB,MAEpB,CACD,IAAK,IAAI3qG,EAAK,EAAGC,EAAKpzU,OAAOhB,KAAKmvF,EAAQ56B,YAAa4/Q,EAAKC,EAAGj1U,OAAQg1U,IAAM,CACrEp0U,EAAMq0U,EAAGD,GACTx/T,EAAQqlB,OAAOj6B,GACfg2D,EAAerzD,KAAK6xD,WAAW5/C,GAC/BsoS,EAAc9tN,EAAQ56B,WAAW5/C,GACrCjS,KAAK4pa,wBAAwBv2W,EAAcq5B,EAAQ76B,WAAW5/C,GAAQsoS,GAAa,GACnF2hI,EAAY13a,KAAK6uD,GAErBrzD,KAAKw8a,iBACa,WAAdx8a,KAAK+9B,MACL/9B,KAAK+qa,sBAGb,MACJ,IAAK,kBACD/qa,KAAKw8a,iBACa,WAAdx8a,KAAK+9B,MACL/9B,KAAK+qa,sBAET,MACJ,IAAK,kBACD/qa,KAAKy8a,uBACL,MACJ,IAAK,eACDz8a,KAAK08a,mBACL18a,KAAK28a,aACL,MACJ,IAAK,gBACD,GAAIlwV,EAAQn6B,cAAcuF,aAAe73D,KAAKsyD,cAAcvgD,SAAW/R,KAAKsyD,cAAcuF,aAClF73D,KAAKsyD,cAAcuF,YAAYp7D,OAAS,EAAG,CAC3CuD,KAAK+yX,gBAAe,GACpB,MAGR,GAAItmS,EAAQn6B,cAAcvM,YAAa,CACnC/lD,KAAK+yX,gBAAe,GACpB,MAEJ,MACJ,IAAK,eACD/yX,KAAK48a,mBAAmBnwV,GACxB,MACJ,IAAK,iBACDzsF,KAAK68a,eACL,MACJ,IAAK,SACDV,GAAgB,EAChB,MACJ,IAAK,qBACDn8a,KAAKgwD,QACLhwD,KAAK88a,cACLX,GAAgB,EAChB,MACJ,IAAK,UACDtmY,GAAY71C,MACZ,MACJ,IAAK,gBACDA,KAAK+8a,oBAAoBtwV,GACzB,MACJ,IAAK,SACDzsF,KAAKg9a,YAAYvwV,GACjB,MACJ,IAAK,iBACDzsF,KAAKi9a,qBAAqBxwV,IAIlC0vV,GACAn8a,KAAKo/O,WAET,IAAIn/O,GAASe,QAASk7a,EAAa5N,MAAOtua,KAAKqpD,eAAgBrgD,SAAU0jF,EAASplF,SAAUmlF,GAE5F,GADAzsF,KAAKwpJ,aAAas3P,GAAao8B,eAAgBj9a,IAC1Cm8a,GAAuBp8a,KAAKm9a,gBAAoBn9a,KAAKo9a,aAAa3wV,EAASC,GAAW,CACvF,IAAIqtU,GAAUrzZ,KAAM,kBAAmBuzZ,WAAYvtU,EAASstU,WAAYvtU,EAAS2tG,SAAU,YAC3Fp6L,KAAKk6Z,gBAAgBH,GAEzB/5Z,KAAKq9a,sBACDjB,IACAp8a,KAAK88a,aAAY,GACjB98a,KAAK+qa,wBAIb54W,EAAQ92D,UAAUuhb,mBAAqB,SAAUnwV,IACzCA,EAAQ16B,aAAahM,aAAe0mC,EAAQ16B,aAAaoiW,qBACzD1nU,EAAQ16B,aAAasiW,oBACrBr0Z,KAAKswa,gBAAgBtb,WAAWh1Z,KAAK+xD,aAAc7e,GAAgBlzC,KAAKgB,QAAQsC,IAAKtD,KAAK8qD,SAASz9C,UAAWrN,KAAKmqD,cAAenqD,KAAKyqD,OAAQzqD,KAAK0qD,SAG5JyH,EAAQ92D,UAAU0hb,oBAAsB,SAAUtwV,QACJtxF,IAAtCsxF,EAAQtiC,cAAc+pW,aACtBl0Z,KAAKswa,gBAAgBtb,WAAWh1Z,KAAK+xD,aAAc7e,GAAgBlzC,KAAKgB,QAAQsC,IAAKtD,KAAK8qD,SAASz9C,UAAWrN,KAAKmqD,cAAenqD,KAAKyqD,OAAQzqD,KAAK0qD,aAE/GvvD,IAArCsxF,EAAQtiC,cAAce,YACtBlrD,KAAKy8a,uBACLz8a,KAAK8qD,SAASuxI,UACdr8L,KAAKs9a,qBAE0Cnib,IAA1CsxF,EAAQtiC,cAAcC,sBACajvD,IAAxCsxF,EAAQtiC,cAAcE,qBACkClvD,IAApDsxF,EAAQtiC,cAAcC,gBAAgB92B,gBACYn4B,IAAlDsxF,EAAQtiC,cAAcE,cAAc/2B,WACpC83B,GAAoBprD,MACpBA,KAAKy8a,uBACLz8a,KAAK8qD,SAASuxI,UACdr8L,KAAKs9a,gBAGL1yX,GAAY5qD,OAGpBA,KAAKswa,gBAAgBtb,WAAWh1Z,KAAK+xD,aAAc7e,GAAgBlzC,KAAKgB,QAAQsC,IAAKtD,KAAK8qD,SAASz9C,UAAWrN,KAAKmqD,cAAenqD,KAAKyqD,OAAQzqD,KAAK0qD,SAMxJyH,EAAQ92D,UAAUmxG,eAAiB,WAE/B,OAAOxsG,KAAKgtG,cADK,YAMrB76C,EAAQ92D,UAAUoX,UAAY,WAC1BzS,KAAKu9a,6BACLv9a,KAAKwmF,qBAAsB,EAC3BxmF,KAAKshE,eAAiB,IAAIw1V,GAC1B92Z,KAAKw9a,qBACLx9a,KAAKy9a,cACLz9a,KAAK09a,YACL19a,KAAKw+G,eACLx+G,KAAKukB,aACLvkB,KAAKgB,QAAQ8C,UAAUM,IAAI,cAE/B+tD,EAAQ92D,UAAUkib,2BAA6B,WAC3Cv9a,KAAK29a,eACDC,KAAM,OACNC,IAAK,MACLC,MAAO,QACPC,KAAM,OACNC,KAAM,OACNC,UAAW,aACXC,SAAU,WACV7R,MAAO,QACP8R,QAAS,WACTC,MAAO,QACPC,aAAc,iBACdC,YAAa,eACbC,WAAY,eACZC,aAAc,iBAElBx+a,KAAKy+a,aAAe,EACpBz+a,KAAKgra,oBACLhra,KAAKs5D,aACLt5D,KAAK47a,cACL57a,KAAKgoC,YACAhoC,KAAKgyD,YACNhyD,KAAKiyD,UAETjyD,KAAKi4Z,eAAiB,IAAI6Q,GAAe9oa,MACzCA,KAAKq8a,aAAe,IAAI5Z,GAAoBzia,KAAMA,KAAKi4Z,gBACvDj4Z,KAAKqoa,cAAgB,IAAIgS,GAAcr6a,KAAKs5D,WAC5Ct5D,KAAK8qD,SAAW,IAAI+qX,GAAgB71a,OAExCmyD,EAAQ92D,UAAUmib,mBAAqB,WACnCx9a,KAAKshE,eAAe01V,SAAS,eAAgBh3Z,KAAK04E,UAAY,IAAI8+B,GAAKx3G,KAAKu/B,gBAAiBv/B,KAAK29a,cAAe39a,KAAKgO,UAK1HmkD,EAAQ92D,UAAU0wG,OAAS,WACvB/rG,KAAK0+a,cACL1+a,KAAKswa,gBAAkB,IAAI9f,GAAgBxwZ,KAAKgB,QAAQsC,GAAI,IAAIwqB,GAA6B,QAAd9tB,KAAK+9B,MACpF/9B,KAAK2+a,aACL3+a,KAAK4+a,0BACL5+a,KAAKswa,gBAAgB3f,YACrB3wZ,KAAK88a,aAAY,GACjB98a,KAAKo/O,WACLp/O,KAAK08a,mBACL18a,KAAK6+a,mBACL7+a,KAAKswa,gBAAgB7c,mBAAmBzzZ,KAAK+xD,aAAc7e,GAAgBlzC,KAAKgB,QAAQsC,IAAKtD,KAAK8qD,SAASz9C,UAAWrN,KAAKmqD,cAAenqD,KAAKyqD,OAAQzqD,KAAK0qD,QAC5J1qD,KAAKi4Z,eAAe8Y,sBAIpB/wa,KAAK+N,OAAO,mBAIZ/N,KAAKwmB,QAAQ,QACbxmB,KAAK8qD,SAASuxI,UACdr8L,KAAK8qD,SAASqrX,sBACdn2a,KAAK+qa,sBAIL/qa,KAAK+N,OAAO,kBACZ/N,KAAKwmF,qBAAsB,EAC3BxmF,KAAKy2C,cAAgBZ,GAAY71C,MACjCA,KAAKqpD,eAAiBC,GAAcw1X,OACpC9+a,KAAK68a,eACL78a,KAAKgyD,WAAY,GAKrBG,EAAQ92D,UAAUkkC,cAAgB,WAC9B,MAAO,WAOX4yB,EAAQ92D,UAAUw1F,gBAAkB,WAChC,IAAIgB,KA8EJ,OA7EAA,EAAQrtF,MACJ6sF,OAAQ,OACRpxF,UAEJ4xF,EAAQrtF,MACJ6sF,OAAQ,WACRpxF,UAEJ4xF,EAAQrtF,MACJ6sF,OAAQ,uBACRpxF,UAEAD,KAAK+lD,YAAciD,GAAmBujX,UACtC16U,EAAQrtF,MACJ6sF,OAAQ,WACRpxF,WAGiB,wBAArBD,KAAK6wD,OAAOnqD,MAAuD,qBAArB1G,KAAK6wD,OAAOnqD,MAC1D1G,KAAK6wD,OAAO0zO,kBACZ1yM,EAAQrtF,MACJ6sF,OAAQ,gBACRpxF,UAGJD,KAAK+xD,aAAahM,aAClB8rC,EAAQrtF,MACJ6sF,OAAQ,WACRpxF,MAAOD,QAGf6xF,EAAQrtF,MACJ6sF,OAAQ,iBACRpxF,MAAOD,QAEPA,KAAKqxD,oBAAoB4yD,MACzBpyB,EAAQrtF,MACJ6sF,OAAQ,cACRpxF,MAAOD,KAAMA,KAAKshE,kBAGD,wBAArBthE,KAAK6wD,OAAOnqD,MAAuD,qBAArB1G,KAAK6wD,OAAOnqD,MAC1DmrF,EAAQrtF,MACJ6sF,OAAQ,sBACRpxF,UAGiB,4BAArBD,KAAK6wD,OAAOnqD,MACZmrF,EAAQrtF,MACJ6sF,OAAQ,0BACRpxF,UAGiB,YAArBD,KAAK6wD,OAAOnqD,MACZmrF,EAAQrtF,MACJ6sF,OAAQ,eACRpxF,UAGiB,eAArBD,KAAK6wD,OAAOnqD,MACZmrF,EAAQrtF,MACJ6sF,OAAQ,aACRpxF,UAGiB,sBAArBD,KAAK6wD,OAAOnqD,MACZmrF,EAAQrtF,MACJ6sF,OAAQ,oBACRpxF,WAGJD,KAAKkwD,mBAAmBs+F,aAAexuJ,KAAKkwD,mBAAmB1zD,OAC/Dq1F,EAAQrtF,MACJ6sF,OAAQ,cACRpxF,UAGD4xF,GAKX1/B,EAAQ92D,UAAUiX,QAAU,WAYxB,GAXAhQ,cAActC,KAAK87a,aACnB97a,KAAK87a,YAAc,KACf97a,KAAKyqD,QAAUzqD,KAAK0qD,SACpB1qD,KAAKyqD,OAAOn4C,UACZtS,KAAK0qD,OAAOp4C,WAEhBtS,KAAKy2C,cAAcnkC,UACnBtS,KAAK++a,UAAUzsa,UACftS,KAAKw+G,eACLx+G,KAAK+N,OAAO,cACZo9E,EAAO9vF,UAAUiX,QAAQhR,KAAKtB,MAC1BQ,SAASosB,eAAe5sB,KAAKgB,QAAQsC,IAAK,CAC1CtD,KAAKgB,QAAQ8C,UAAUS,OAAO,aAE9B,IADA,IAAIy6a,EAAiBx+a,SAASkN,uBAAuB,kBAC9Csxa,EAAevib,OAAS,GAC3Buib,EAAe,GAAGv+a,WAAW6E,YAAY05a,EAAe,IAE5D,IAAI5kZ,EAAU55B,SAASosB,eAAe5sB,KAAKgB,QAAQsC,GAAK,WACpD82B,GACAp6B,KAAKgB,QAAQsE,YAAY80B,GAE7B,IAAIqU,EAAiB,iBACjB5yC,OAAO4yC,KACP5yC,OAAO4yC,GAAgBoG,YAAc,EACK,IAAtCh5C,OAAO4yC,GAAgBoG,aACvBh5C,OAAO4yC,GAAgBhuC,WAAW6E,YAAYzJ,OAAO4yC,IACrD5yC,OAAO4yC,GAAkB,SAQzC0jB,EAAQ92D,UAAUkpB,WAAa,WAC3B,IAAIy1F,EAAaxuG,GAAQ0+E,gBACrBy1P,EAAYn0U,GAAQ4+E,cACpBuwB,EAAYnvG,GAAQ2+E,eACpB0wB,EAAcrvG,GAAQC,UAAY,eAAiB,aACnD+3W,EAAgBh4W,GAAQC,UACxBy7V,EAAmC,YAAtB17V,GAAQmb,KAAK8Q,KACzB+rV,EAAgB,aAAe,iBAAoB,aACxDj+W,GAAanB,IAAIpE,KAAKkja,cAAelpT,EAAYh6G,KAAKq8a,aAAa3jB,UAAW14Z,KAAKq8a,cACnF92a,GAAanB,IAAIpE,KAAKkja,cAAevoT,EAAW36G,KAAKq8a,aAAax8F,UAAW7/U,KAAKq8a,cAClF92a,GAAanB,IAAIpE,KAAKkja,cAAevjF,EAAW3/U,KAAKq8a,aAAaxjB,QAAS74Z,KAAKq8a,cAChF92a,GAAanB,IAAIpE,KAAKkja,cAAeroT,EAAa76G,KAAKq8a,aAAap8F,WAAYjgV,KAAKq8a,cACrF92a,GAAanB,IAAIpE,KAAKkja,cAAe,UAAWlja,KAAKq8a,aAAa92T,QAASvlH,KAAKq8a,cAChF92a,GAAanB,IAAIpE,KAAKkja,cAAe,WAAYlja,KAAKq8a,aAAatV,YAAa/ma,KAAKq8a,cACrF92a,GAAanB,IAAIpE,KAAKkja,cAAe,SAAUlja,KAAKq8a,aAAaxV,SAAU7ma,KAAKq8a,cAChF92a,GAAanB,IAAIpE,KAAKkja,cAAeh8D,EAAYlnW,KAAKq8a,aAAa9+S,WAAYv9H,KAAKq8a,cACpF92a,GAAanB,IAAIvI,OAAQ,SAAUmE,KAAKq8a,aAAalZ,aAAcnja,KAAKq8a,cACxEr8a,KAAKi/a,kBAKT9sX,EAAQ92D,UAAUmjH,aAAe,WAC7B,IAAIxE,EAAaxuG,GAAQ0+E,gBACrBywB,EAAYnvG,GAAQ2+E,eACpB0wB,EAAcrvG,GAAQC,UAAY,eAAiB,aACnD+3W,EAAgBh4W,GAAQC,UACxBy7V,EAAmC,YAAtB17V,GAAQmb,KAAK8Q,KACzB+rV,EAAgB,aAAe,iBAAoB,aACpD7jC,EAAYn0U,GAAQ4+E,cACxB7kF,GAAahB,OAAOvE,KAAKkja,cAAelpT,EAAYh6G,KAAKq8a,aAAa3jB,WACtEnzZ,GAAahB,OAAOvE,KAAKkja,cAAevoT,EAAW36G,KAAKq8a,aAAax8F,WACrEt6U,GAAahB,OAAOvE,KAAKkja,cAAevjF,EAAW3/U,KAAKq8a,aAAaxjB,SACrEtzZ,GAAahB,OAAOvE,KAAKkja,cAAeroT,EAAa76G,KAAKq8a,aAAap8F,YACvE16U,GAAahB,OAAOvE,KAAKkja,cAAe,UAAWlja,KAAKq8a,aAAa92T,SACrEhgH,GAAahB,OAAOvE,KAAKkja,cAAe,WAAYlja,KAAKq8a,aAAatV,aACtExha,GAAahB,OAAOvE,KAAKkja,cAAe,SAAUlja,KAAKq8a,aAAaxV,UACpEtha,GAAahB,OAAOvE,KAAKkja,cAAeh8D,EAAYlnW,KAAKq8a,aAAa9+S,YACtEh4H,GAAahB,OAAO1I,OAAQ,SAAUmE,KAAKq8a,aAAalZ,eAQ5DhxW,EAAQ92D,UAAUoK,OAAS,SAAUgpD,EAAS4/W,GAC3B,MAAX5/W,GACAzuD,KAAKi4Z,eAAeqB,cAAc7qW,EAAS4/W,IAMnDl8W,EAAQ92D,UAAUuK,UAAY,WAC1B,IAAI0sD,KACJA,EAAgBtyD,KAAKk/a,kBAAkBl/a,KAAKira,YAAYx8W,SACxDzuD,KAAKyF,OAAO6sD,IAMhBH,EAAQ92D,UAAUg+Z,SAAW,SAAUt8Z,GAC/BA,GAAO+7D,GAAW94D,KAAMjD,IACxBiD,KAAKi4Z,eAAeoB,SAASt8Z,IAMrCo1D,EAAQ92D,UAAUk+Z,eAAiB,WAC/Bv5Z,KAAKi4Z,eAAesB,gBAAe,IAKvCpnW,EAAQ92D,UAAU8jb,eAAiB,WAC/Bn/a,KAAKq8a,aAAajZ,mBAAmBpja,KAAKgB,UAE9CmxD,EAAQ92D,UAAU+jb,WAAa,WAC3Bp/a,KAAKyqa,OAKTt4W,EAAQ92D,UAAUova,IAAM,WACpBzqa,KAAKi4Z,eAAewS,OAKxBt4W,EAAQ92D,UAAUuya,WAAa,SAAU56V,EAASzZ,GAC1Cv5D,KAAK+sZ,YACL/sZ,KAAK+sZ,WAAW6gB,WAAW56V,EAASzZ,EAAUv5D,OAMtDmyD,EAAQ92D,UAAUgkb,cAAgB,SAAU/7a,GACpCtD,KAAK+sZ,YACL/sZ,KAAK+sZ,WAAWsyB,cAAc/7a,EAAItD,OAG1CmyD,EAAQ92D,UAAUikb,aAAe,WAC7Bt/a,KAAK8ra,SAMT35W,EAAQ92D,UAAUywa,MAAQ,SAAU/ua,GAChCiD,KAAKi4Z,eAAe6T,MAAM/ua,IAK9Bo1D,EAAQ92D,UAAUu8a,UAAY,SAAU5ka,GACpChT,KAAK8qD,SAAS8sX,UAAU5ka,IAK5Bm/C,EAAQ92D,UAAU08a,cAAgB,SAAUvpX,GACxCxuD,KAAK8qD,SAASitX,cAAcvpX,IAKhC2D,EAAQ92D,UAAU68a,cAAgB,SAAU1pX,GACxCxuD,KAAK8qD,SAASotX,cAAc1pX,IAEhC2D,EAAQ92D,UAAUkkb,YAAc,WAC5Bv/a,KAAKT,QAKT4yD,EAAQ92D,UAAUkE,KAAO,WAErB,OADUS,KAAKi4Z,eAAe14Z,QAMlC4yD,EAAQ92D,UAAU03F,MAAQ,WACtB/yF,KAAKi4Z,eAAellU,SAKxB5gC,EAAQ92D,UAAUixa,QAAU,WACxBtsa,KAAKi4Z,eAAeqU,WAKxBn6W,EAAQ92D,UAAU00a,WAAa,WAC3B/va,KAAKi4Z,eAAe8X,cAMxB59W,EAAQ92D,UAAUmwa,eAAiB,SAAU/yJ,GACzC,IAAI/uM,EAAQ1pE,KAAKi4Z,eAAe6F,SAASrlJ,GACzCz4Q,KAAKira,YAAcvhW,GAOvBvX,EAAQ92D,UAAUs+Q,SAAW,SAAUjwM,EAAO2hW,GAC1Crra,KAAKi4Z,eAAet+I,SAASjwM,EAAO2hW,IAMxCl5W,EAAQ92D,UAAU8va,YAAc,SAAUC,GACtCpra,KAAKi4Z,eAAekT,YAAYC,IAMpCj5W,EAAQ92D,UAAUiwa,YAAc,SAAU78W,EAAS88W,GAC/Cvra,KAAKi4Z,eAAeqT,YAAY78W,EAAS88W,IAM7Cp5W,EAAQ92D,UAAUo0a,kBAAoB,SAAUh3J,GAC5Cz4Q,KAAKi4Z,eAAewX,kBAAkBh3J,IAM1CtmN,EAAQ92D,UAAUw0a,kBAAoB,SAAUp3J,GAC5Cz4Q,KAAKi4Z,eAAe4X,kBAAkBp3J,IAM1CtmN,EAAQ92D,UAAUswa,WAAa,SAAUlzJ,GACrCz4Q,KAAKi4Z,eAAe0T,WAAWlzJ,IAKnCtmN,EAAQ92D,UAAU80a,aAAe,WAC7Bnwa,KAAKi4Z,eAAekY,gBAKxBh+W,EAAQ92D,UAAUmkb,YAAc,WAC5Bx/a,KAAKi4Z,eAAewY,eAKxBt+W,EAAQ92D,UAAUw1a,aAAe,WAC7B7wa,KAAKi4Z,eAAe4Y,gBAKxB1+W,EAAQ92D,UAAUiL,UAAY,SAAUmxB,GACpC,OAAOz3B,KAAKs5D,UAAU7hC,IAK1B06B,EAAQ92D,UAAUokb,eAAiB,WAC/B,OAAOz/a,KAAKira,aAEhB94W,EAAQ92D,UAAUqkb,aAAe,SAAUlqZ,EAAWzoB,EAAGC,GAC5B,iBAAdwoB,GACPx1B,KAAK2/a,MAAMnqZ,IASnB28B,EAAQ92D,UAAUskb,MAAQ,SAAUnqZ,EAAWzoB,EAAGC,GAC9C,IAAI46U,EAAK,EACLD,EAAK,EAES,SAAdnyT,GAAsC,UAAdA,EAExBoyT,GADmC,SAAdpyT,GACM,EAAI,IAAMzoB,GAAQ,GAI7C46U,GADmC,OAAdnyT,GACM,EAAI,IAAMxoB,GAAQ,GAEjD,IAAIjQ,EAAMiD,KAAKsyD,cACftyD,KAAK0wG,KAAK3zG,EAAK6qV,EAAID,IAQvBx1R,EAAQ92D,UAAUq1G,KAAO,SAAU3zG,EAAK6qV,EAAID,GACxC,GAAI3nV,KAAK+sZ,YAAehwZ,aAAeoqD,GAAO,CAE1C,GADcnnD,KAAK+sZ,WAAW6yB,qBAAqB7ib,EAAKiD,KAAM4nV,EAAID,GAE9D,OAGR,GAAI5qV,aAAespD,GAAU,CACzB,GAAItpD,EAAI+0D,OAAS/0D,EAAI+0D,MAAMr1D,OACvB,IAAK,IAAI2B,EAAK,EAAGyE,EAAK9F,EAAI+0D,MAAO1zD,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACnD,IAAImC,EAAOsC,EAAGzE,GACd4B,KAAK0wG,KAAKnwG,EAAMqnV,EAAID,GAG5B,GAAI5qV,EAAI80D,YAAc90D,EAAI80D,WAAWp1D,OACjC,IAAK,IAAIwH,EAAK,EAAGwG,EAAK1N,EAAI80D,WAAY5tD,EAAKwG,EAAGhO,OAAQwH,IAAM,CACxD,IAAIo0D,EAAO5tD,EAAGxG,GACdjE,KAAK0wG,KAAKr4C,EAAMuvR,EAAID,GAG5B3nV,KAAK65Z,sBAGD98Z,aAAeoqD,IACXnnD,KAAK+sZ,YACL/sZ,KAAK+sZ,WAAW6yB,qBAAqB7ib,EAAKiD,KAAM4nV,EAAID,GAG5D3nV,KAAKi4Z,eAAevnT,KAAK3zG,EAAK6qV,EAAID,IAU1Cx1R,EAAQ92D,UAAUowD,MAAQ,SAAU1uD,EAAK+/Y,EAAIC,EAAIpwW,GAC7C,IAAI8xX,GAA2B,EAC/B,GAAI1ha,aAAespD,GAAU,CACzB,GAAItpD,EAAI+0D,OAAS/0D,EAAI+0D,MAAMr1D,OACvB,IAAK,IAAI2B,EAAK,EAAGyE,EAAK9F,EAAI+0D,MAAO1zD,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACnD,IAAImC,EAAOsC,EAAGzE,GACdqga,EAA2Bz+Z,KAAKi4Z,eAAexsW,MAAMlrD,EAAMu8Y,EAAIC,EAAIpwW,EAAO5vC,GAGlF,GAAIA,EAAI80D,YAAc90D,EAAI80D,WAAWp1D,OACjC,IAAK,IAAIwH,EAAK,EAAGwG,EAAK1N,EAAI80D,WAAY5tD,EAAKwG,EAAGhO,OAAQwH,IAAM,CACxD,IAAIo0D,EAAO5tD,EAAGxG,GACdjE,KAAKi4Z,eAAexsW,MAAM4M,EAAMykV,EAAIC,EAAIpwW,EAAO5vC,GAGvDiD,KAAK65Z,sBAGL75Z,KAAKi4Z,eAAexsW,MAAM1uD,EAAK+/Y,EAAIC,EAAIpwW,GAE3C,OAAO8xX,GAQXtsW,EAAQ92D,UAAUmlB,OAAS,SAAUzjB,EAAKwkB,EAAOorB,GAC7C,IAAI8xX,EACJ,GAAI1ha,EAEA,GADA4vC,EAAQA,IAAW5/B,EAAGhQ,EAAIgV,QAAQlG,QAASmB,EAAGjQ,EAAIgV,QAAQ9F,SACtDlP,aAAespD,GAAU,CACzBtpD,EAAI8vC,aAAetrB,EACnBxkB,EAAIgV,QAAQ86B,aAAetrB,EAC3B,IAAImV,EAAS+V,GAAU1vC,EAAIgV,SAE3B,KADA0sZ,EAA2Bz+Z,KAAKi4Z,eAAewG,8BAAyBtja,OAAWA,EAAWu7B,IAI1F,OAFA35B,EAAI8vC,aAAetrB,EACnBxkB,EAAIgV,QAAQ86B,aAAetrB,EACpBk9Y,EAEX,IAAIhwW,KAEJA,GADAA,EAAUA,EAAQl0C,OAAOxd,EAAI+0D,QACXv3C,OAAOxd,EAAI80D,YAC7B7xD,KAAKi4Z,eAAeya,cAAc31a,EAAK0xD,EAASltC,EAAOorB,QAGvD3sC,KAAKi4Z,eAAeya,cAAc31a,GAAMA,GAAMwkB,EAAOorB,GAG7D,OAAO8xX,GAQXtsW,EAAQ92D,UAAUi2a,cAAgB,SAAUv0a,EAAK6qV,EAAID,GACjD3nV,KAAKi4Z,eAAeqZ,cAAcv0a,EAAK6qV,EAAID,IAQ/Cx1R,EAAQ92D,UAAUk2a,cAAgB,SAAUx0a,EAAK6qV,EAAID,GACjD3nV,KAAKi4Z,eAAesZ,cAAcx0a,EAAK6qV,EAAID,IAO/Cx1R,EAAQ92D,UAAU8oa,sBAAwB,SAAUjwZ,EAAU3X,GAC1D,OAAOyD,KAAKq8a,aAAalY,sBAAsBjwZ,EAAU3X,IAQ7D41D,EAAQ92D,UAAU+oa,qBAAuB,SAAU31W,EAAS0H,EAAQ+hW,GAChE,OAAOl4Z,KAAKq8a,aAAajY,qBAAqB31W,EAAS0H,EAAQ+hW,IAQnE/lW,EAAQ92D,UAAUusa,2BAA6B,SAAUn5W,EAAS0H,EAAQ+hW,EAAUhkZ,EAAU3X,GAC1F,OAAOyD,KAAKq8a,aAAatU,qBAAqBt5W,EAAS0H,EAAQ+hW,EAAUhkZ,EAAU3X,IAOvF41D,EAAQ92D,UAAUipa,sBAAwB,SAAUvna,EAAKmX,GACrD,OAAOlU,KAAKq8a,aAAa/X,sBAAsBvna,EAAKmX,IAQxDi+C,EAAQ92D,UAAUkpa,mBAAqB,SAAUxna,EAAKgV,EAASmC,EAAU/M,GACrE,OAAOnH,KAAKq8a,aAAa9X,mBAAmBxna,EAAKgV,EAASmC,EAAU/M,IAMxEgrD,EAAQ92D,UAAUmpa,QAAU,SAAUruW,GAClC,IAAI/N,EACAy3X,EAAgBxyY,GAAYrtC,KAAK6/a,eACrC,OAAIA,IACAz3X,EAAOy3X,EAAc1pX,IAEV/N,EAGRpoD,KAAKq8a,aAAa7X,QAAQruW,IAMrChE,EAAQ92D,UAAUm+D,UAAY,SAAUrD,EAAQ0uJ,GAC5C,IAAIprJ,EACAqmX,EAAkBzyY,GAAYrtC,KAAK8/a,iBACvC,OAAIA,IACArmX,EAASqmX,EAAgB3pX,EAAQ0uJ,IAEtBprJ,EAGRz5D,KAAKq8a,aAAa7iX,UAAUrD,IAMvChE,EAAQ92D,UAAUqjb,YAAc,WACxB1+a,KAAK2qa,gBACL3qa,KAAK2qa,eAAe+T,YAAY1+a,OAOxCmyD,EAAQ92D,UAAU6+Z,gBAAkB,SAAUH,GACtC/5Z,KAAK2qa,gBAAmB3qa,KAAK+lD,YAAciD,GAAmBujX,WAAcvsa,KAAK23D,gBACjF33D,KAAK2qa,eAAezQ,gBAAgBH,EAAO/5Z,MACxB,eAAf+5Z,EAAMrzZ,MAAwC,aAAfqzZ,EAAMrzZ,MACrC1G,KAAK+/a,qBAAqBhmB,KAKtC5nW,EAAQ92D,UAAU0kb,qBAAuB,SAAUhmB,GAC/C,IAAI35Y,KAIA7jB,KAWJ,OAVIw9Z,GAASA,EAAMC,YAAgBD,EAAMC,WAAgB,iBAAax7Z,OAChEu7Z,EAAMC,WAAqB,sBAAax7Z,MAC1CjC,EAASw9Z,EAAMC,WAAWloW,MAAMv3C,OAAOw/Y,EAAMC,WAAWnoW,YAGpDkoW,EAAMC,YACNz9Z,EAAOiI,KAAKu1Z,EAAMC,YAG1B55Y,EAAW,KAAI25Y,EAAMrzZ,KACbqzZ,EAAMrzZ,MACV,IAAK,kBACD0Z,EAAe,UAAMvU,QAASkuZ,EAAME,WAAWpuZ,QAASI,QAAS8tZ,EAAME,WAAWhuZ,SAClFmU,EAAe,UAAMvU,QAASkuZ,EAAMC,WAAWnuZ,QAASI,QAAS8tZ,EAAMC,WAAW/tZ,SAClF,MACJ,IAAK,kBACDmU,EAAe,UAAMysB,YAAaktX,EAAME,WAAWptX,aACnDzsB,EAAe,UAAMysB,YAAaktX,EAAMC,WAAWntX,aACnD,MACJ,IAAK,cACDzsB,EAAe,UACXvU,QAASkuZ,EAAME,WAAWpuZ,QAASI,QAAS8tZ,EAAME,WAAWhuZ,QAC7D+J,MAAO+jZ,EAAME,WAAWjkZ,MAAOD,OAAQgkZ,EAAME,WAAWlkZ,QAE5DqK,EAAe,UACXvU,QAASkuZ,EAAMC,WAAWnuZ,QAASI,QAAS8tZ,EAAMC,WAAW/tZ,QAC7D+J,MAAO+jZ,EAAMC,WAAWhkZ,MAAOD,OAAQgkZ,EAAMC,WAAWjkZ,QAE5D,MACJ,IAAK,oBACDqK,EAAO25Y,EAAMimB,YAAczjb,EAC3B,MACJ,IAAK,oBACD6jB,EAAe,UAAMvU,QAASkuZ,EAAME,WAAWpuZ,QAASI,QAAS8tZ,EAAME,WAAWhuZ,SAClFmU,EAAe,UAAMvU,QAASkuZ,EAAMC,WAAWnuZ,QAASI,QAAS8tZ,EAAMC,WAAW/tZ,SAG1F,IAAI8lF,GACAu8U,MAAOvU,EAAM3/N,SAAU79L,OAAQA,EAAQ6jB,OAAQA,GAE/C7jB,EAAOE,QACPuD,KAAKwpJ,aAAas3P,GAAam/B,cAAeluV,IAMtD5/B,EAAQ92D,UAAUqga,iBAAmB,WAEjC17Z,KAAKk6Z,iBADSxzZ,KAAM,aAAc0zL,SAAU,cAMhDjoI,EAAQ92D,UAAU0ga,eAAiB,WAE/B/7Z,KAAKk6Z,iBADSxzZ,KAAM,WAAY0zL,SAAU,cAM9CjoI,EAAQ92D,UAAU6kb,KAAO,WACjBlgb,KAAK2qa,gBAAmB3qa,KAAK+lD,YAAciD,GAAmBujX,UAC9Dvsa,KAAK2qa,eAAeuV,KAAKlgb,OAMjCmyD,EAAQ92D,UAAU8kb,KAAO,WACjBngb,KAAK2qa,gBAAmB3qa,KAAK+lD,YAAciD,GAAmBujX,UAC9Dvsa,KAAK2qa,eAAewV,KAAKngb,OAQjCmyD,EAAQ92D,UAAU84D,MAAQ,SAAU4hC,EAAQtnC,GACnCA,IAEDA,GADAA,MACkBl0C,OAAOva,KAAKsyD,cAAcR,MAAO9xD,KAAKsyD,cAAcT,aAE1E7xD,KAAKqpD,eAAiBrpD,KAAKqpD,eAAiBC,GAAc82X,aAC1Dpgb,KAAKi4Z,eAAe9jW,MAAM1F,EAASsnC,IAOvC5jC,EAAQ92D,UAAU05a,WAAa,SAAUh/U,EAAQtnC,GACxCA,IAEDA,GADAA,MACkBl0C,OAAOva,KAAKsyD,cAAcR,MAAO9xD,KAAKsyD,cAAcT,aAE1E7xD,KAAKqpD,eAAiBrpD,KAAKqpD,eAAiBC,GAAc82X,aAC1Dpgb,KAAKi4Z,eAAe8c,WAAWtmX,EAASsnC,IAO5C5jC,EAAQ92D,UAAU+5a,SAAW,SAAUr/U,EAAQtnC,GACtCA,IAEDA,GADAA,MACkBl0C,OAAOva,KAAKsyD,cAAcR,MAAO9xD,KAAKsyD,cAAcT,aAE1E7xD,KAAKqpD,eAAiBrpD,KAAKqpD,eAAiBC,GAAc82X,aAC1Dpgb,KAAKi4Z,eAAemd,SAAS3mX,EAASsnC,IAO1C5jC,EAAQ92D,UAAU0qW,KAAO,SAAUzoU,EAAQ+iZ,GACvCrgb,KAAK8qD,SAASi7S,KAAKzoU,EAAQ,EAAG,EAAG+iZ,IAOrCluX,EAAQ92D,UAAUilb,OAAS,SAAUtta,GACjC,IAAIsqB,EAAStqB,EAAQo7D,WAAap7D,EAAQo7D,WAAa,GACvD9wC,EAA0B,YAAjBtqB,EAAQtM,KAAqB,GAAK,EAAI42B,GAAW,EAAIA,EAC9Dt9B,KAAK8qD,SAASi7S,KAAKzoU,EAAQ,EAAG,EAAGtqB,EAAQssZ,aAO7CntW,EAAQ92D,UAAUuqW,IAAM,SAAU76S,EAAkBE,EAAgBo1X,GAChErgb,KAAK8qD,SAASi7S,KAAK,EAAGh7S,EAAkBE,EAAgBo1X,IAK5DluX,EAAQ92D,UAAU+yC,MAAQ,WACtBpuC,KAAK8qD,SAASi7S,KAAK,EAAI/lW,KAAK8qD,SAASY,aAAc1rD,KAAK8qD,SAASC,kBAAmB/qD,KAAK8qD,SAASG,gBAAkBl+C,EAAG,EAAGC,EAAG,KAGjImlD,EAAQ92D,UAAUmuJ,aAAe,SAAU35E,EAAW5vE,GAClDD,KAAKwmB,QAAQs6X,GAAajxU,GAAY5vE,IAM1CkyD,EAAQ92D,UAAU+I,IAAM,SAAUrH,GAC9B,IAAIswG,EACJ,GAAItwG,EAAK,CAEL,GADAA,EAAMgwC,GAAYhwC,GACdiD,KAAK+sZ,aACA/sZ,KAAK+sZ,WAAWwzB,OAAOxjb,GACxB,OAAO,KAGf,IAAIkD,GACAe,QAASjE,EAAKuxa,MAAOtua,KAAKqpD,eAAgB/a,MAAO,WAAY5nC,KAAM,WAAYmyB,QAAQ,GAE3F74B,KAAKwpJ,aAAas3P,GAAa0/B,iBAAkBvgb,GACjDlD,EACIuG,GAAKvG,EAAIuG,IAAMipC,KACnB,IAAImlB,EAAS1xD,KAAKira,YAClB,IAAKhra,EAAK44B,SAAW64B,EAAOu1W,KAAM,CAQ9B,GAPIv1W,EAAOjD,QAAQlwD,QAAQxB,EAAIuG,IAAM,IAAMouD,EAAOu1W,OACzCv1W,EAAOl6B,UACRk6B,EAAOl6B,SAAU,EACjBx3B,KAAK4rD,YAET8F,EAAOjD,QAAQjqD,KAAKzH,EAAIuG,KAExBitZ,GAAcxzZ,KAAS+oD,GACvBunD,EAAS,IAAIvnD,GAAU9lD,KAAM,aAAcjD,GAAK,GAChDiD,KAAK6xD,WAAWrtD,KAAK6oG,GACrBrtG,KAAKkua,WAAW7gU,IACI,IAAhBtwG,EAAIy6B,SACJx3B,KAAKstZ,wBAAwBjgT,EAAOt7F,QAASs7F,EAAQtwG,EAAIy6B,SAE7Dx3B,KAAKygb,YAAYpzU,QAOjB,GAJAA,EAAS,IAAIlmD,GAAKnnD,KAAM,QAASjD,GAAK,GAEtCiD,KAAK8xD,MAAMttD,KAAK6oG,GAChBrtG,KAAKkua,WAAW7gU,EAAQ37C,GACpB1xD,KAAK+sZ,WAAY,CACjB,GAAI1/S,EAAO1/E,MAAMipC,aAAmD,IAApCy2C,EAAO1/E,MAAMipC,YAAYn6D,OACrD,IAAK,IAAI2B,EAAK,EAAGyE,EAAK7C,KAAK+sZ,WAAW2zB,sBAAsBrzU,GAASjvG,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvF,IAAI05D,EAAQj1D,EAAGzE,GACf4B,KAAK2gb,eAAe7oX,EAAOpG,GAAQ,GAGvC27C,EAAO1/E,MAAMu/X,UAAY7/S,EAAO1/E,MAAMu/X,SAASD,WAAWE,WAC1D9/S,EAAO1/E,MAAMu/X,SAASD,WAAWE,UAAU1wZ,QAC3CuD,KAAK+sZ,WAAW6zB,YAAYvzU,EAAQrtG,MAQhD,GAJAC,GACIe,QAASqsG,EAAQihU,MAAOtua,KAAKqpD,eAAgB/a,MAAO,UAAW5nC,KAAM,WAAYmyB,QAAQ,GAE7F74B,KAAKwpJ,aAAas3P,GAAa0/B,iBAAkBvgb,KAC3CD,KAAKqpD,eAAiBC,GAAcijX,UAAevsa,KAAKqpD,eAAiBC,GAAc+iX,OAAQ,CACjG,IAAItS,GACArzZ,KAAM,oBAAqBs5a,WAAY,SAAU/lB,WAAYltX,GAAYhwC,GACzEi9Z,WAAYjtX,GAAYhwC,GAAMq9L,SAAU,YAE5Cp6L,KAAKk6Z,gBAAgBH,GAEzB/5Z,KAAKqpD,eAAiBrpD,KAAKqpD,eAAiBC,GAAc82X,aACxC,QAAdpgb,KAAK+9B,OACL/9B,KAAK6gb,eAAexzU,GACpBrtG,KAAK6pa,oBAAoBx8T,GACrBA,EAAO1/E,MAAMu/X,UAAY7/S,EAAO1/E,MAAMu/X,SAASD,WAAWE,WAC1D9/S,EAAO1/E,MAAMu/X,SAASD,WAAWE,UAAU1wZ,QAC3CuD,KAAK8gb,gBAAgBzzU,KAMrC,OADArtG,KAAKq9a,oBAAoB/zX,GAAc82X,cAChC/yU,GAEXl7C,EAAQ92D,UAAUwlb,eAAiB,SAAUtgb,GACzC,GAAIA,EAAK6Z,SACL,IAAK,IAAIhc,EAAK,EAAGyE,EAAKtC,EAAK6Z,SAAUhc,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvD,IAAImlB,EAAI1gB,EAAGzE,GACX,GAAI4B,KAAKs5D,UAAU/1C,IAAMvjB,KAAKs5D,UAAU/1C,GAAGg2C,SAAU,CACjD,IAAIl5D,EAAQuyC,GAAkBrvB,EAAI,iBAClCljB,EAAMI,WAAW6E,YAAYjF,MAM7C8xD,EAAQ92D,UAAUylb,gBAAkB,SAAUvgb,GAC1C,GAAIP,KAAK+sZ,YAAcxsZ,GAAQA,EAAKotB,OAASptB,EAAKotB,MAAMu/X,UACpD3sZ,EAAKotB,MAAMu/X,SAASD,WAAWE,WAC/B5sZ,EAAKotB,MAAMu/X,SAASD,WAAWE,UAAU1wZ,OAAQ,CACjD,IAAI0wZ,EAAY5sZ,EAAKotB,MAAMu/X,SAASD,WAAWE,UAC/CntZ,KAAKsva,YAAY/ua,EAAK+C,IACtB,IAAK,IAAIlF,EAAK,EAAG+ta,EAAchf,EAAW/uZ,EAAK+ta,EAAY1va,OAAQ2B,IAAM,CACrE,IAAImlB,EAAI4oZ,EAAY/ta,GACpB4B,KAAKsva,YAAY/rZ,GAGjB,IAAK,IAFD4pZ,KAEKhxa,GADTgxa,EAAQA,EAAM5yZ,OAAOva,KAAKs5D,UAAU/1C,GAAGmpY,SAAU1sZ,KAAKs5D,UAAU/1C,GAAGopY,UAChDlwZ,OAAS,EAAGN,GAAK,EAAGA,IACnC6D,KAAKsva,YAAYnC,EAAMhxa,IAG/B,IAAK,IAAI0G,EAAK,EAAGk+a,EAAc5zB,EAAWtqZ,EAAKk+a,EAAYtkb,OAAQoG,IAAM,CACjE0gB,EAAIw9Z,EAAYl+a,GAChB7C,KAAKs5D,UAAU/1C,GAAGoK,MAAMu/X,SAASD,WAAWE,WAC5CntZ,KAAKs5D,UAAU/1C,GAAGoK,MAAMu/X,SAASD,WAAWE,UAAU1wZ,QACtDuD,KAAK8gb,gBAAgB9gb,KAAKs5D,UAAU/1C,UAK5CvjB,KAAKsva,YAAY/ua,EAAK+C,KAI9B6uD,EAAQ92D,UAAUi0a,YAAc,SAAUrF,GACtC,IAAI5pa,EAAQuyC,GAAkBq3X,EAAS,iBACnC3pa,EAASD,EAAMgU,cACnBhU,EAAMI,WAAW6E,YAAYjF,GAC7BC,EAAOqB,YAAYtB,IAOvB8xD,EAAQ92D,UAAU2lb,kBAAoB,SAAUryX,EAAYpuD,GACxD,GAAIP,KAAK+sZ,WAAY,CACjB,IAAIltW,EAAY7/C,KAAK+sZ,WAAWk0B,cAAc1gb,EAAMouD,EAAY3uD,MAChEA,KAAK2gb,eAAe9gY,EAAW7/C,KAAKi4Z,eAAe+O,eAAezma,EAAK+C,KAAK,GAC5EtD,KAAK6pa,oBAAoBtpa,KAMjC4xD,EAAQ92D,UAAU6lb,qBAAuB,SAAUrhY,EAAWqqW,GAC1D,IAAI3pZ,EACA4sa,KAEJ,GADA5sa,EAAO2pZ,EAAWlqZ,KAAKs5D,UAAUzZ,EAAUvI,UAAYt3C,KAAKs5D,UAAUzZ,EAAUmrW,UAG5E,IAAK,IAAI7uZ,GADTgxa,EAAQjjB,EAAW3pZ,EAAKmsZ,SAAWnsZ,EAAKosZ,SACrBlwZ,OAAS,EAAGN,GAAK,EAAGA,IAC/Bgxa,EAAMhxa,KAAO0jD,EAAUv8C,IACvB6pa,EAAM9kZ,OAAOlsB,EAAG,IAShCg2D,EAAQ92D,UAAU8lb,yBAA2B,SAAU5gb,GAInD,IAAK,IAHDs/C,EACAstX,KAEKhxa,GADTgxa,EAAQA,EAAM5yZ,OAAOha,EAAKmsZ,SAAUnsZ,EAAKosZ,UACtBlwZ,OAAS,EAAGN,GAAK,EAAGA,KACnC0jD,EAAY7/C,KAAKs5D,UAAU6zW,EAAMhxa,OAE7B6D,KAAK+ta,eAAeluX,EAAUv8C,IAAMypC,GAAY8S,GAChD7/C,KAAKuE,OAAOs7C,KAIxBsS,EAAQ92D,UAAU+ya,uBAAyB,SAAUrxa,GACjD,IAAI2sE,EAAQ1pE,KAAK0xD,OAAOnzD,QAAQyB,KAAKi4Z,eAAe+O,eAAejqa,EAAIuG,KAEnE89a,EADUphb,KAAK0xD,OAAOgY,GAAOjb,QACVlwD,QAAQxB,EAAIuG,IAC/B89a,GAAY,IACRtoX,GAAW94D,KAAMjD,IACjBiD,KAAKq5Z,SAASt8Z,GAElBiD,KAAK0xD,OAAOgY,GAAOjb,QAAQpmC,OAAO+4Z,EAAU,UACrCphb,KAAK0xD,OAAOgY,GAAOm/V,YAAY7oa,KAAKs5D,UAAUv8D,EAAIuG,IAAIm/D,UAGrEtQ,EAAQ92D,UAAUgmb,eAAiB,SAAUC,GACzC,GAAkB,QAAdthb,KAAK+9B,MAAiC,WAAd/9B,KAAK+9B,MAA+C,WAA1BujZ,EAAW3zZ,MAAMjnB,KAAoB,CACvF,IAAI66a,EAAkB3uY,GAAkB0uY,EAAWh+a,GAAK,iBACpDi+a,GACAA,EAAgB9gb,WAAW6E,YAAYi8a,GAG/Cvhb,KAAKkwa,sBAGL,IACK,IAFDlva,EADAoZ,EAAWkna,EAAWvva,QAAQqI,SAGzBje,EAAI,EAAGA,EAAIie,EAAS3d,OAAQN,IACjC,GAAIie,EAASje,aAAco4D,IAA0Bn6C,EAASje,GAAK,IAAMie,EAASje,GAAK,GAAEoC,QAAQ,gBAAkB,EAAI,CAC9G6b,EAASje,GAAK,GAAEoC,QAAQ,gBAAkB,KAC3CyC,EAAU4xC,GAAkBx4B,EAASje,GAAGmH,GAAK,wBACrC7C,WAAW6E,YAAYtE,IAC/BA,EAAU4xC,GAAkBx4B,EAASje,GAAGmH,GAAK,uBACrC7C,WAAW6E,YAAYtE,IAEnC,IAAK,IAAI5C,EAAK,EAAGyE,EAAK7C,KAAKiyD,MAAO7zD,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACpD,IAAIm2C,EAAY1xC,EAAGzE,GACnBovB,GAAcpT,EAASje,GAAGmH,GAAK,gBAAiBixC,SAGnD,GAAIn6B,EAASje,aAAcs4D,GAC5B,IAAK,IAAIxwD,EAAK,EAAGwG,EAAKzK,KAAKiyD,MAAOhuD,EAAKwG,EAAGhO,OAAQwH,IAAM,CAChDswC,EAAY9pC,EAAGxG,GACnBupB,GAAcpT,EAASje,GAAGmH,GAAK,gBAAiBixC,KAKhE4d,EAAQ92D,UAAUmmb,cAAgB,WAC9Bxhb,KAAKuE,UAOT4tD,EAAQ92D,UAAUkJ,OAAS,SAAUxH,GACjC,IAAIu1D,KACJA,EAAgBA,EAAc/3C,OAAOva,KAAKsyD,cAAcR,MAAO9xD,KAAKsyD,cAAcT,YAClF,IAAI5xD,EACA2sa,GAAc,EAClB,GAAI7va,GAEA,IADAA,EAAMiD,KAAKs5D,UAAUv8D,EAAIuG,OhXtxCrC,SAA0B/C,GAQtB,OANIA,aAAgBulD,GACRvlD,EAAKwlD,YAAcC,GAAqBy7X,OAGxClhb,EAAKwlD,YAAcG,GAAgBu7X,OgXixC3BC,CAAU3kb,IAASiD,KAAKqpD,eAAiBC,GAAcmtF,OAAS,CACxE,GAAIz2I,KAAK+sZ,YACD/sZ,KAAK+sZ,WAAW40B,0BAA0B5kb,EAAKiD,MAE/C,YADAA,KAAKkwa,sBAWb,GAPAjwa,GACIe,QAASjE,EAAKuxa,MAAOtua,KAAKqpD,eAC1B/a,MAAO,WAAY5nC,KAAM,UAAWmyB,QAAQ,GAE1C74B,KAAKqpD,eAAiBC,GAAcmtF,OACtCz2I,KAAKwpJ,aAAas3P,GAAa0/B,iBAAkBvgb,IAEhDA,EAAK44B,OAAQ,CACd,KAAO74B,KAAKqpD,eAAiBC,GAAcijX,YACtCxva,aAAeoqD,IAAQpqD,aAAe+oD,IAAY,CACnD,IAAIi0W,GACArzZ,KAAM,oBAAqBs5a,WAAY,SAAU/lB,WAAYltX,GAAYhwC,GACzEi9Z,WAAYjtX,GAAYhwC,GAAMq9L,SAAU,YAEtCp6L,KAAKqpD,eAAiBC,GAAcmtF,OAClCnkF,EAAc71D,OAAS,GAAKuD,KAAK2qa,iBAAmB3qa,KAAK6wD,OAAOnqD,OAChE1G,KAAK4qa,YAAYlP,mBACjBkR,GAAc,GAGlB7va,aAAeoqD,IACfnnD,KAAKmhb,yBAAyBpkb,GAE5BiD,KAAKqpD,eAAiBC,GAAcmtF,OACtCz2I,KAAKk6Z,gBAAgBH,GAGzBh9Z,EAAIqd,UACJpa,KAAK4hb,YAAY7kb,GAEjBA,EAAIw8D,UACJv5D,KAAKwsa,YAAYzva,GAErB,IAAIkV,OAAQ,EACZjS,KAAKqpD,eAAiBrpD,KAAKqpD,eAAiBC,GAAc82X,aAC1D,IAAIkB,EAAathb,KAAKs5D,UAAUv8D,EAAIuG,IAChCg+a,aAAsBn6X,IACQ,SAA1Bm6X,EAAW3zZ,MAAMjnB,MAAmB1G,KAAK+sZ,YACzC/sZ,KAAK+sZ,WAAW80B,oBAAoBP,EAAYthb,OAGrC,KADfiS,EAAQjS,KAAK8xD,MAAMvzD,QAAQ+ib,MAEvBthb,KAAK8xD,MAAMzpC,OAAOpW,EAAO,GACzBjS,KAAK8hb,gBAAgBR,OAKV,KADfrva,EAAQjS,KAAK6xD,WAAWtzD,QAAQ+ib,KAE5Bthb,KAAK6xD,WAAWxpC,OAAOpW,EAAO,GAElCjS,KAAKygb,YAAYa,GACjBthb,KAAKkhb,qBAAqBnkb,GAAK,GAC/BiD,KAAKkhb,qBAAqBnkb,GAAK,IAE/B6va,GACA5sa,KAAK4qa,YAAY7O,iBAEjBjjW,GAAW94D,KAAMshb,IACjBthb,KAAKq5Z,SAASioB,GAElBthb,KAAKoua,uBAAuBrxa,GACxBiD,KAAKm5D,uBACLn5D,KAAKm5D,qBAAqBpnD,aAAU5W,UAEjC6E,KAAKs5D,UAAUv8D,EAAIuG,IAC1BtD,KAAKqhb,eAAeC,GACF,QAAdthb,KAAK+9B,MACL/9B,KAAK+qa,sBAEH/qa,KAAKqpD,eAAiBC,GAAcmtF,QACtCz2I,KAAKmua,gBAAgBmT,GACrBrhb,GACIe,QAASjE,EAAKuxa,MAAOtua,KAAKqpD,eAC1B/a,MAAO,UAAW5nC,KAAM,UAAWmyB,QAAQ,GAE/C74B,KAAKwpJ,aAAas3P,GAAa0/B,iBAAkBvgb,GACjDD,KAAK6na,oBAKhB,GAAIv1W,EAAc71D,OAAS,EAAG,CAC3BuD,KAAK2qa,iBACL3qa,KAAK4qa,YAAYlP,mBACjBkR,GAAc,GAElB,IAAK,IAAIzwa,EAAI,EAAGA,EAAIm2D,EAAc71D,OAAQN,IAAK,CAChCm2D,EAAcn2D,GACrB6D,KAAKs5D,UAAUhH,EAAcn2D,GAAGmH,KAChCtD,KAAKuE,OAAO+tD,EAAcn2D,IAG9Bywa,GACA5sa,KAAK4qa,YAAY7O,iBAErB/7Z,KAAKu5Z,mBAKbpnW,EAAQ92D,UAAUmxa,YAAc,SAAUjsa,EAAME,GAC5C,IAAI6C,EAQJ,GAPA7C,EAAaA,EAAaT,KAAKs5D,UAAU74D,EAAW6C,IAAMtD,KAAKs5D,UAAU/4D,EAAKg5D,UAE1Ej2D,EADgB,iBAAT/C,EACFA,EAGAA,EAAK+C,GAEV7C,GAAcA,EAAW2Z,SAAU,CACnC,IAAK,IAAIje,EAAI,EAAGA,EAAIsE,EAAW2Z,SAAS3d,OAAQN,IACxCsE,EAAW2Z,SAASje,KAAOmH,IAC3B7C,EAAW2Z,SAASiO,OAAOlsB,EAAG,GAC9BsE,EAAWsR,QAAQqI,SAASiO,OAAOlsB,EAAG,IAG9CsE,EAAWsR,QAAQ6pR,QAAQ,IAAIxuQ,IAC/B3sB,EAAWsR,QAAQ4vY,QAAQlhZ,EAAWsR,QAAQ49B,eAItDwiB,EAAQ92D,UAAUoxa,SAAW,SAAUlsa,EAAMF,GACzC,IAAIiD,EACA7C,EAAaT,KAAKs5D,UAAU/4D,EAAK+C,IACrC,GAAI7C,EAAW2Z,WACU,iBAAV/Z,EACHL,KAAKs5D,UAAUj5D,KACfiD,EAAKjD,IAITiD,EAAKjD,EAAMiD,GAAKjD,EAAMiD,IAAMipC,KAC5BvsC,KAAKoE,IAAI/D,IAETiD,GAAI,CACYtD,KAAKs5D,UAAUh2D,GACrBi2D,SAAW94D,EAAW6C,GAChC7C,EAAW2Z,SAAS5V,KAAKlB,GACzB7C,EAAWsR,QAAQqI,SAAS5V,KAAKxE,KAAKs5D,UAAUh2D,GAAIyO,SACpDtR,EAAWsR,QAAQ6pR,QAAQ,IAAIxuQ,IAC/B3sB,EAAWsR,QAAQ4vY,QAAQlhZ,EAAWsR,QAAQ49B,eAO1DwiB,EAAQ92D,UAAU20D,MAAQ,WACtBhwD,KAAKi8a,gBAET9pX,EAAQ92D,UAAU4gb,aAAe,SAAU90Y,GACvC,IAAIsnB,KAMAA,EALCtnB,IACDsnB,EAAUA,EAAQl0C,OAAOva,KAAK8xD,QACZv3C,OAAOva,KAAK6xD,YAKlC7xD,KAAKqpD,eAAiBrpD,KAAKqpD,eAAiBC,GAAcmtF,MAC1D,IAAK,IAAIr4I,EAAK,EAAGsta,EAAYj9W,EAASrwD,EAAKsta,EAAUjva,OAAQ2B,IAAM,CAC/D,IAAIrB,EAAM2ua,EAAUtta,GAChB4B,KAAKs5D,UAAUv8D,EAAIuG,KACnBtD,KAAKuE,OAAOxH,GAGpBiD,KAAKqpD,eAAiBrpD,KAAKqpD,gBAAkBC,GAAcmtF,MAC3Dz2I,KAAKqoa,cAAgB,IAAIgS,GAAcr6a,KAAKs5D,WAC5Ct5D,KAAK0+a,eAETvsX,EAAQ92D,UAAU0mb,gBAAkB,WAChC/hb,KAAKkna,iBAOT/0W,EAAQ92D,UAAU6ra,cAAgB,SAAU3ma,EAAM+C,GAC9C,IAAKilD,GAAWvoD,OAASmoD,GAAgBnoD,MAAO,CAC5C,IACIysB,OAAO,EACPiK,OAAS,EAET3pB,OAAI,EACJC,OAAI,EACJq6Z,OAAc,EACdh6Z,EAAYrN,KAAK8qD,SAASz9C,UAI9B,GAHK9M,IACDA,EAAQP,KAAKsyD,cAAcR,MAAM,GAAM9xD,KAAKsyD,cAAcR,MAAM,GAAK9xD,KAAKsyD,cAAcT,WAAW,IAEnGtxD,EAAM,CACN,IAAIyhb,GAAiB,EAuBrB,GAtBIhib,KAAK+sZ,aACLsa,EAAcrna,KAAK+sZ,WAAWk1B,yBAAyB1hb,EAAM+C,MAEzD/C,EAAOP,KAAKs5D,UAAU/4D,EAAK+C,GAAGpG,MAAM,oBAAoB,KAG3Dmqa,EAcD2a,GAAiB,GAbO,SAApBzhb,EAAKotB,MAAMjnB,MAA+C,IAA5BnG,EAAKq2D,YAAYn6D,SAC/CuD,KAAK0na,YAAYmU,SAAU,EAC3B77a,KAAK07Z,mBACL17Z,KAAKkib,UAAU3hb,IAAS+C,GAAIipC,KAAYnS,QAAS,QAEhD92B,IAA4B,SAApB/C,EAAKotB,MAAMjnB,MAAmBnG,EAAKq2D,YAAYn6D,OAAS,GAA2B,SAApB8D,EAAKotB,MAAMjnB,QACnFpD,EAA0B,SAApB/C,EAAKotB,MAAMjnB,KAAoBnG,EAAKwR,QAAQqI,SAAS,GAAK,GAAEld,MAAM,KAAK,GAAKqD,EAAKq2D,YAAY,GAAGtzD,IAEtGA,IACA+ja,EAAcrna,KAAKi/G,WAAW1+G,EAAKwR,QAASzO,KAMhD/C,GAAQ8ma,KhXx0C5B,SAA+B14W,EAAYpuD,GACvC,IAAIxC,EAAY,EAEhB,OADAA,EAAawC,aAAgBulD,GAAaE,GAAqBm8X,SAAWj8X,GAAgBi8X,SAClE,SAApB5hb,EAAKotB,MAAMjnB,KACJnG,EAAKwlD,YAAcG,GAAgBi8X,SAErC5hb,EAAKwlD,YAAchoD,EACpB4wD,EAAW5I,YAAc06V,GAAsB2E,gBACxC,EAGA,EAGNz2V,EAAW5I,YAAc06V,GAAsB0hC,SAC7C,EAEJ,EgXwzCWC,CAAe/a,EAAa9ma,IAASyhb,GAAiB,CACxD,IAAIt9a,EAAS2ia,EAAiB,MAC1BjpY,OAAW,EAEfA,EAxCO,IAuCPA,EAAWipY,EAAY3wY,OAAO1gB,MAAQzV,EAAKwR,QAAQ2kB,OAAO1gB,MAAQqxZ,EAAY3wY,OAAO1gB,MAAQzV,EAAKwR,QAAQ2kB,OAAO1gB,OAvC1G,GAwCqCooB,EAC5C,IAAIikZ,EAAc7hb,SAASW,cAAc,OACrCmhb,EAAW9hb,SAASW,cAAc,YACtCkhb,EAAY1gb,YAAY2gb,GACxB71Z,EAAO46Y,EAAYjtY,SACnB1D,EAAS4a,GAAgB+1X,EAAY3ia,MAAO+nB,OAAMtxB,OAAWA,EAAWijC,IAC7Dk8M,YAEH5jN,EADoB,SAApBn2B,EAAKotB,MAAMjnB,KACF,IAAI0mB,GAAKspC,GAAen2D,EAAO8ma,EAAc,GAAEnqa,MAAMqD,EAAK+C,GAAK,KAAK,IAAI0S,OAAS,GAAIqxZ,EAAY3ia,MAAMmoB,UAGvG,IAAIO,GAAM7sB,EAAKyV,MAAQ,GAAM,GAAKzV,EAAKyV,MAAOqxZ,EAAY3ia,MAAMmoB,WAGjF6J,EAAO1gB,MAAQ3J,KAAKC,IAAIoqB,EAAO1gB,MAAO,IACtCjJ,GAAQs6Z,EAAY3wY,OAAOhD,OAAO3mB,EAAIM,EAAUu6U,IAAMv6U,EAAUo+C,MAAS/0B,EAAO1gB,MAAQ,EAAK,IAC7FhJ,GAAQq6Z,EAAY3wY,OAAOhD,OAAO1mB,EAAIK,EAAUs6U,IAAMt6U,EAAUo+C,MAAS/0B,EAAO3gB,OAAS,EAAK,EAM9F29B,GAAiB2uY,GAJb/+a,GAAMtD,KAAKgB,QAAQsC,GAAK,kBACxBoB,MAAS,2BAAkCqI,EAAI,UAAYC,EAAI,aAAe0pB,EAAO1gB,MAAQ,GACzF,aAAe0gB,EAAO3gB,OAAS,qBAAuBxV,EAAK+C,GAAK,MAWxEowC,GAAiB4uY,GAPbh/a,GAAMtD,KAAKgB,QAAQsC,GAAK,WACxBoB,MAAS,UAAYgyB,EAAO1gB,MAAQ,GAAK,aAAe0gB,EAAO3gB,OAC3D,8DACiBrR,EAAMuoB,WAAa,cAAgBvoB,EAAMmoB,SAAW,iBACpEw6Y,EAAY3ia,MAAM2tC,UAAUkpB,oBAAuB,IACxDgmE,MAAS,wBAGb+gT,EAAS59a,MAAMqoB,WAAcroB,EAAU,KAAI,OAAS,GACpD49a,EAAS59a,MAAMsoB,UAAatoB,EAAY,OAAI,SAAW,GACvD49a,EAAS59a,MAAMytC,eAAkBztC,EAAoB,eAAIA,EAAMytC,eAAiB,GAChFmwY,EAAS3gb,YAAYnB,SAASw0C,eAAevoB,IAC7CzsB,KAAK0na,YAAYnuW,SAAWh5D,EAAK+C,GACjCtD,KAAK0na,YAAYpka,GAAKA,EACtB+ja,EAAY7vY,SAAU,EACtBx3B,KAAK6pa,oBAAoBtpa,GACzBP,KAAKqpD,eAAiBrpD,KAAKqpD,eAAiBC,GAAc05W,SAC1Dhja,KAAKkja,cAAcvha,YAAY0gb,GAC/B98a,GAAanB,IAAIk+a,EAAU,QAAStib,KAAKq8a,aAAalV,YAAanna,KAAKq8a,cACxE92a,GAAanB,IAAIk+a,EAAU,WAAYtib,KAAKuib,aAAcvib,MAC1Dsib,EAASpgb,QACTogb,EAAS78a,aAQzB0sD,EAAQ92D,UAAU+jP,SAAW,WACzB,IACIvuL,EADAxR,GAAS,EAETq0X,EAAa1za,KAAKwmF,oBACtBxmF,KAAKiwD,uBAAsB,GAC3B,IAAIuyX,GAAaz1a,EAAG/M,KAAK8qD,SAASQ,cAAet+C,EAAGhN,KAAK8qD,SAASO,gBAwBlE,GAvBIrrD,KAAK6za,2BACLhjX,EAAS7wD,KAAK6za,0BAA0B4O,aAAazib,KAAK8xD,MAAO9xD,KAAKs5D,UAAWt5D,KAAK6wD,OAAQ2xX,EAAUxib,KAAKkwD,mBAAmB5sD,IAChI+7C,GAAS,GAEJr/C,KAAK0ib,oBACV1ib,KAAK0ib,mBAAmBD,aAAazib,KAAK8xD,MAAO9xD,KAAKs5D,UAAWt5D,KAAK6wD,OAAQ2xX,EAAUxib,KAAKkwD,mBAAmB5sD,GAAItD,KAAKkwD,mBAAmB8qI,MAC5I37I,GAAS,GAEJr/C,KAAK2ib,kBACV3ib,KAAK2ib,iBAAiBF,aAAazib,KAAK8xD,MAAO9xD,KAAKs5D,UAAWt5D,KAAK6wD,OAAQ2xX,GAC5EnjY,GAAS,GAEJr/C,KAAK4ib,yBACV5ib,KAAK4ib,wBAAwBC,aAAe7ib,KAAK6wD,OAAOgyX,aACxD7ib,KAAK4ib,wBAAwBE,aAAe9ib,KAAK6wD,OAAOiyX,aACxD9ib,KAAK4ib,wBAAwBG,aAAe/ib,KAAK6wD,OAAOkyX,aACxD/ib,KAAK4ib,wBAAwBH,aAAazib,KAAK8xD,MAAO9xD,KAAK6xD,WAAY7xD,KAAK4ib,wBAAyB5ib,KAAKs5D,UAAWt5D,KAAK6wD,OAAQ2xX,GAClInjY,GAAS,GAEJr/C,KAAKgjb,gCACVhjb,KAAKgjb,8BAA8B5jM,SAASp/O,KAAK8xD,MAAO9xD,KAAKs5D,UAAWt5D,KAAK6wD,OAAQ2xX,GACrFnjY,GAAS,GAETA,EAAQ,CACRr/C,KAAKgva,eAAgB,EAErB,IAAK,IADDn9W,KACKzzD,EAAK,EAAGyE,EAAK7C,KAAK8xD,MAAO1zD,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACpD,IACImC,EADMsC,EAAGzE,GAOb,GALA4B,KAAK4za,WAAWrza,GAChBP,KAAKijb,yBAAyB1ib,GAC9BP,KAAK0xa,mBAAmBnxa,MAAYsL,QAAStL,EAAKsL,QAASI,QAAS1L,EAAK0L,UAAW,GACpF1L,EAAKwR,QAAQ6pR,QAAQ,IAAIxuQ,GAAK7sB,EAAKwR,QAAQiE,MAAOzV,EAAKwR,QAAQgE,SAC/DxV,EAAKwR,QAAQ4vY,QAAQphZ,EAAKwR,QAAQ49B,aAC9BpvC,EAAKosZ,QAAQlwZ,OAAS,EACtB,IAAK,IAAI8mB,EAAI,EAAGA,EAAIhjB,EAAKosZ,QAAQlwZ,OAAQ8mB,IAAK,CAE1CsuC,GADIhS,EAAY7/C,KAAKs5D,UAAU/4D,EAAKosZ,QAAQppY,KACvBjgB,IAAMu8C,EAGnC,GAAIt/C,EAAKmsZ,SAASjwZ,OAAS,EACvB,IAAK,IAAI0pB,EAAI,EAAGA,EAAI5lB,EAAKmsZ,SAASjwZ,OAAQ0pB,IAAK,CAC3C,IAAI+8Z,EAAaljb,KAAKs5D,UAAU/4D,EAAKmsZ,SAASvmY,IAC9C0rC,EAAWqxX,EAAW5/a,IAAM4/a,GAIxC,IAAK,IAAIj/a,EAAK,EAAGwG,EAAKnM,OAAOhB,KAAKu0D,GAAa5tD,EAAKwG,EAAGhO,OAAQwH,IAAM,CACjE,IACI47C,EAEJqV,GAFIrV,EAAYgS,EADLpnD,EAAGxG,IAEDjE,KAAKigD,UAAUJ,IAE5BA,EAAU9tC,QAAQ6pR,QAAQ,IAAIxuQ,QAAKjyB,OAAWA,IAC9C0kD,EAAU9tC,QAAQ4vY,QAAQ9hW,EAAU9tC,QAAQ49B,aAC5C3vC,KAAK46a,WAAW/6X,GAEpB7/C,KAAKgva,eAAgB,EACrBhva,KAAK28a,aACL38a,KAAK+qa,sBAKT,OAHK2I,GACD1za,KAAKiwD,sBAAsByjX,GAExB7iX,GAKXsB,EAAQ92D,UAAU8nb,YAAc,WAC5B,OAAOzzX,GAAU1vD,OAMrBmyD,EAAQ92D,UAAU+nb,YAAc,SAAU5mb,GACtC,OAAOuzD,GAAYvzD,EAAMwD,OAM7BmyD,EAAQ92D,UAAUgob,cAAgB,SAAUrwa,GACxC,GAAIhT,KAAKsjb,qBAAsB,CAE3B,OADWtjb,KAAKsjb,qBAAqBD,cAAcrwa,GAGvD,MAAO,IAMXm/C,EAAQ92D,UAAU0F,MAAQ,SAAUiS,GAC5BhT,KAAKsjb,sBACLtjb,KAAKsjb,qBAAqBvib,MAAMiS,IAMxCm/C,EAAQ92D,UAAUkob,SAAW,SAAUxmb,EAAK+5D,GACxC,IAAIu2C,EACAv2C,EAAMr6D,OAAS,GACfuD,KAAK07Z,mBAET,IAAK,IAAIv/Z,EAAI,EAAGA,EAAI26D,EAAMr6D,OAAQN,IAAK,CACnCkxG,EAAS,IAAIz0C,GAAU77D,EAAK,QAAS+5D,EAAM36D,IAAI,GAC/CY,EAAI+5D,MAAMtyD,KAAK6oG,GAGf,GAFatwG,EAAIgV,QACVqI,SAAS5V,KAAKzH,EAAI2wZ,gBAAgB3wZ,EAAI+5D,MAAM/5D,EAAI+5D,MAAMr6D,OAAS,OAChEuD,KAAKqpD,eAAiBC,GAAcijX,UAAevsa,KAAKqpD,eAAiBC,GAAc+iX,OAAQ,CACjG,IAAItS,GACArzZ,KAAM,wBAAyBs5a,WAAY,SAAU/lB,WAAYltX,GAAYsgE,GAC7E2sT,WAAYjtX,GAAYhwC,GAAMq9L,SAAU,YAE5Cp6L,KAAKk6Z,gBAAgBH,IAGzBjjW,EAAMr6D,OAAS,GACfuD,KAAK+7Z,iBAETh/Z,EAAIgV,QAAQ6pR,QAAQ,IAAIxuQ,GAAKrwB,EAAIiZ,MAAOjZ,EAAIgZ,SAC5ChZ,EAAIgV,QAAQ4vY,QAAQ5kZ,EAAIgV,QAAQ49B,aAChC3vC,KAAK6pa,oBAAoB9sa,IAK7Bo1D,EAAQ92D,UAAU6mb,UAAY,SAAUnlb,EAAKyqU,GACzC,IACIn6N,EADAq2R,EAAS3mY,EAAIgV,QAEby1T,EAAO/qU,OAAS,GAChBuD,KAAK07Z,mBAET,IAAK,IAAIv/Z,EAAI,EAAGA,EAAIqrU,EAAO/qU,OAAQN,IAAK,CACpC,GAAIY,aAAeoqD,GAGf,GAFAkmD,EAAS,IAAIg4S,GAAgBtoZ,EAAK,cAAeyqU,EAAOrrU,IAAI,GAC5DY,EAAI65D,YAAYpyD,KAAK6oG,GACjBtwG,EAAIqd,UAEJ,IAAK,IADD7Z,EAAOxD,EACFyqB,EAAM,EAAGA,EAAMjnB,EAAKwR,QAAQqI,SAAS3d,OAAQ+qB,IAClD,GAAsC,oBAAlCjnB,EAAKwR,QAAQqI,SAASoN,GAAKlkB,GAA0B,CACrC/C,EAAKwR,QAAQqI,SAASoN,GAC5BpN,SAAS5V,KAAKzH,EAAImxZ,sBAAsBnxZ,EAAI65D,YAAY75D,EAAI65D,YAAYn6D,OAAS,WAKnGinY,EAAOtpX,SAAS5V,KAAKzH,EAAImxZ,sBAAsBnxZ,EAAI65D,YAAY75D,EAAI65D,YAAYn6D,OAAS,UAG3F,GAAIM,aAAe+oD,GAAW,CAC/BunD,EAAS,IAAIi4S,GAAevoZ,EAAK,cAAeyqU,EAAOrrU,IAAI,GAC3DY,EAAI65D,YAAYpyD,KAAK6oG,GACrB,IAAIzjE,EAAU85V,EAAOtpX,SAAS,GAC1Bsc,EAAS,IAAIR,GAAK0T,EAAQ/9B,QAAU+9B,EAAQ5zB,MAAQ,EAAG4zB,EAAQ39B,QAAU29B,EAAQ7zB,OAAS,EAAG6zB,EAAQ5zB,MAAO4zB,EAAQ7zB,QACxH2tX,EAAOtpX,SAAS5V,KAAKzH,EAAIisZ,qBAAqBjsZ,EAAI65D,YAAY75D,EAAI65D,YAAYn6D,OAAS,GAAIM,EAAI6vD,mBAAoBl2B,EAAQ12B,KAAKswD,iBAEpI,KAAMtwD,KAAKqpD,eAAiBC,GAAcijX,UAAevsa,KAAKqpD,eAAiBC,GAAc+iX,OAAQ,CACjG,IAAItS,GACArzZ,KAAM,yBAA0Bs5a,WAAY,SAAU/lB,WAAYltX,GAAYsgE,GAC9E2sT,WAAYjtX,GAAYhwC,GAAMq9L,SAAU,YAE5Cp6L,KAAKk6Z,gBAAgBH,IAGzBvyF,EAAO/qU,OAAS,GAChBuD,KAAK+7Z,iBAETh/Z,EAAIgV,QAAQ6pR,QAAQ,IAAIxuQ,GAAKs2W,EAAO1tX,MAAO0tX,EAAO3tX,SAClDhZ,EAAIgV,QAAQ4vY,QAAQje,EAAO/zV,aAC3B3vC,KAAK6pa,oBAAoB9sa,IAK7Bo1D,EAAQ92D,UAAUmob,aAAe,SAAUzmb,EAAKyqU,GACxCA,EAAO/qU,OAAS,GAChBuD,KAAK07Z,mBAET,IAAK,IAAIn4Y,EAAIikT,EAAO/qU,OAAS,EAAG8mB,GAAK,EAAGA,IACpC,IAAK,IAAIpnB,EAAI,EAAGA,EAAIY,EAAIgV,QAAQqI,SAAS3d,OAAQN,IAAK,CAClD,IAAIunY,EAAS3mY,EAAIgV,QAAQqI,SAASje,GAClC,GAAIunY,aAAkB5wU,IACd4wU,EAAOpgY,GAAGqM,MAAM,IAAM63T,EAAOjkT,GAAGjgB,GAAK,KAAM,CAC3C,IAAK,IAAI6iB,EAAI,EAAGA,EAAIppB,EAAI65D,YAAYn6D,OAAQ0pB,IACxC,GAAIu9W,EAAOpgY,GAAGqM,MAAM,IAAM5S,EAAI65D,YAAYzwC,GAAG7iB,GAAK,KAAM,CACpD,KAAMtD,KAAKqpD,eAAiBC,GAAcijX,UAAW,CACjD,IAAIxS,GACArzZ,KAAM,yBAA0Bs5a,WAAY,SAAU/lB,WAAYltX,GAAYhwC,EAAI65D,YAAYzwC,IAC9F6zY,WAAYjtX,GAAYhwC,GAAMq9L,SAAU,YAE5Cp6L,KAAKk6Z,gBAAgBH,GAEzBh9Z,EAAI65D,YAAYvuC,OAAOlC,EAAG,GAIlC,GADAppB,EAAIgV,QAAQqI,SAASiO,OAAOlsB,EAAG,GACb,QAAd6D,KAAK+9B,KAAgB,CACrB,IAAI/8B,EAAU4xC,GAAkB8wV,EAAOpgY,IACvC,GAAItC,EAAS,CACT,IAAI4qF,EAAYh5C,GAAkB8wV,EAAOpgY,IACzCsoF,EAAUnrF,WAAW6E,YAAYsmF,GAEnBh5C,GAAkB8wV,EAAOpgY,GAAK,WAE5CtC,EAAU4xC,GAAkB8wV,EAAOpgY,GAAK,UAChC7C,WAAW6E,YAAYtE,QAInChB,KAAKkwa,uBAMrB1oG,EAAO/qU,OAAS,GAChBuD,KAAK+7Z,kBAMb5pW,EAAQ92D,UAAUoob,YAAc,SAAU1mb,EAAK+5D,GACvCA,EAAMr6D,OAAS,GACfuD,KAAK07Z,mBAET,IAAK,IAAIn4Y,EAAI,EAAGA,EAAIuzC,EAAMr6D,OAAQ8mB,IAC9B,IAAK,IAAIpnB,EAAI,EAAGA,EAAIY,EAAIgV,QAAQqI,SAAS3d,OAAQN,IAAK,CAClD,IAAIunY,EAAS3mY,EAAIgV,QAAQqI,SAASje,GAClC,GAAIunY,aAAkBhiV,IACdgiV,EAAOpgY,GAAGqM,MAAM,IAAMmnD,EAAMvzC,GAAGjgB,GAAK,KAAM,CAC1C,IAAK,IAAI6iB,EAAI,EAAGA,EAAIppB,EAAI+5D,MAAMr6D,OAAQ0pB,IAClC,GAAIu9W,EAAOpgY,GAAGqM,MAAM,IAAM5S,EAAI+5D,MAAM3wC,GAAG7iB,GAAK,KAAM,CAC9C,KAAMtD,KAAKqpD,eAAiBC,GAAcijX,UAAW,CACjD,IAAIxS,GACArzZ,KAAM,wBAAyBs5a,WAAY,SAAU/lB,WAAYltX,GAAYhwC,EAAI+5D,MAAM3wC,IACvF6zY,WAAYjtX,GAAYhwC,GAAMq9L,SAAU,YAE5Cp6L,KAAKk6Z,gBAAgBH,GAEzBh9Z,EAAI+5D,MAAMzuC,OAAOlC,EAAG,GAI5B,GADAppB,EAAIgV,QAAQqI,SAASiO,OAAOlsB,EAAG,GACb,QAAd6D,KAAK+9B,KAAgB,CACrB,IAAI/8B,EAAU4xC,GAAkB8wV,EAAOpgY,IACvCtC,EAAQP,WAAW6E,YAAYtE,QAG/BhB,KAAKkwa,uBAMrBp5W,EAAMr6D,OAAS,GACfuD,KAAK+7Z,kBAUb5pW,EAAQ92D,UAAUioa,aAAe,SAAUogB,EAAM55X,GAC7C,IAAI9sD,EAUJ,GARIA,EADA0mb,EAAKx2a,WAAW3O,QAAQ,MAAQ,EACxBmlb,EAAKx2a,WAERw2a,EAAKx2a,WAAW3O,QAAQ,KAAO,OACdpD,IAAd2uD,EAA0B,OAAS45X,EAAKx2a,WAGxCw2a,EAAKx2a,WAAa,KAE1B48C,EAAW,CACIC,GAAa/pD,MAC5BhD,EAAQ,QAAUA,EAAQ,MAAQ8sD,EAAY,MAElD,OAAO9sD,GAEXm1D,EAAQ92D,UAAUiib,aAAe,WACzBt9a,KAAKmqD,cAAce,a/W93D/B,SAAqCpV,GACjC,IAAIgU,EAAYC,GAAajU,GAMzB6tY,EAAUpwY,GAAkB,OAJ5BjwC,GAAMwyC,EAAQ90C,QAAQsC,GAAK,gBAC3BoB,MAAO,UAAYolD,EAAU/zC,OAAS,YAAc+zC,EAAU9zC,MAAQ,oCACtEurH,MAAO,oBAGXzrF,EAAQ90C,QAAQkE,aAAay+a,EAAS7tY,EAAQ90C,QAAQ4b,Y+Wu3D9Cgna,CAAqB5jb,MACrB4pD,GAAY5pD,MAAM,GAClB4pD,GAAY5pD,MAAM,IAGlBorD,GAAoBprD,OAG5BmyD,EAAQ92D,UAAUohb,qBAAuB,WACrC,IAAIvoa,EAAW,IAAIkZ,GACnBlZ,EAAW61C,GAAa/pD,MACxB,IAAIgB,EAAUR,SAASosB,eAAe5sB,KAAKgB,QAAQsC,GAAK,WACpD0S,EAAQhW,KAAKsja,aAAatja,KAAKgW,MAAO9B,EAAS8B,OAC/CD,EAAS/V,KAAKsja,aAAatja,KAAK+V,OAAQ7B,EAAS6B,QACjDrR,EAAQ1E,KAAKmqD,cAAce,WAC3B,SAAWl1C,EAAQ,YAAcD,EAAS,QAC7B7B,EAAS6B,OAAS,WAAa7B,EAAS8B,MAAQ,uDAE7D,SAAWA,EAAQ,YAAcD,EAAS,yDAE1C+xI,GACAxkJ,GAAMtD,KAAKgB,QAAQsC,GAAK,UACxB0tH,SAAY,IACZtsH,MAASA,GAER1D,GAKDhB,KAAKkja,cAAgBlia,EACrBhB,KAAKkja,cAAc1/Z,aAAa,QAASkB,KALzC1E,KAAKkja,cAAgB3vX,GAAkB,MAAOu0G,GAC9C9nJ,KAAKgB,QAAQW,YAAY3B,KAAKkja,gBAMlClja,KAAKkja,cAAcx+Z,MAAM+qB,WAAazvB,KAAK2xD,iBAE/CQ,EAAQ92D,UAAUoib,YAAc,WAC5Bz9a,KAAKy8a,uBACL/oY,GAAiB1zC,KAAKgB,SAClB0D,MAAO,SAAW1E,KAAKsja,aAAatja,KAAKgW,OAAS,YAC5ChW,KAAKsja,aAAatja,KAAK+V,QAAU,yCAI/Co8C,EAAQ92D,UAAUwob,sBAAwB,SAAUntZ,EAAQotZ,GACxD,IAAIC,EAAU/jb,KAAKggC,UAAUhgC,KAAKgB,QAAQsC,GAAK,uBAAwBozB,EAAO1gB,MAAO0gB,EAAO3gB,QAC5Fgua,EAAQvgb,aAAa,QAASsgb,GAC9B,IAAIE,EAAkBrwY,GAAiB,KACnCrwC,GAAMtD,KAAKgB,QAAQsC,GAAK,wBACxBi+H,MAAS,6BAEbwiT,EAAQpib,YAAYqib,GACpB,IACIv0Z,EAAakkB,GAAiB,KADrBrwC,GAAMtD,KAAKgB,QAAQsC,GAAK,mBAAoBi+H,MAAS,uBAElEwiT,EAAQpib,YAAY8tB,GACpBzvB,KAAKkja,cAAcvha,YAAYoib,IAEnC5xX,EAAQ92D,UAAU4ob,gBAAkB,SAAUvtZ,EAAQotZ,GAClD,IAAII,EAAalkb,KAAKggC,UAAUhgC,KAAKgB,QAAQsC,GAAK,gBAAiBozB,EAAO1gB,MAAO0gB,EAAO3gB,QACxFmua,EAAW1gb,aAAa,QAAS,gBACjC,IAAIyxZ,EAAUthX,GAAiB,KAAOrwC,GAAMtD,KAAKgB,QAAQsC,GAAK,YAAa0S,MAAS,OAAQD,OAAU,SAClGsd,EAAOsgB,GAAiB,QACxBrwC,GAAMtD,KAAKgB,QAAQsC,GAAK,aAAcyJ,EAAK,IAAKC,EAAK,IAAKgJ,MAAS,OAAQD,OAAU,OACrF6nB,KAAQ,QAAU59B,KAAKgB,QAAQsC,GAAK,cAExC2xZ,EAAQtzZ,YAAY0xB,GACpB6wZ,EAAWvib,YAAYszZ,GACvBj1Z,KAAKkja,cAAcvha,YAAYuib,GAC/BtwY,GAAgBswY,GAAcx/a,MAASo/a,KAE3C3xX,EAAQ92D,UAAU8ob,mBAAqB,SAAUztZ,EAAQotZ,GACrD,IAAIpgb,EAOJ,GANA1D,KAAKokb,gBAAkB5jb,SAASW,cAAc,OAC9CuC,GACIJ,GAAMtD,KAAKgB,QAAQsC,GAAK,oBACxBoB,MAAS,SAAWgyB,EAAO1gB,MAAQ,cAAgB0gB,EAAO3gB,OAAS,MAAQ+ta,GAE/EpwY,GAAiB1zC,KAAKokb,gBAAiB1gb,GACrB,QAAd1D,KAAK+9B,KAAgB,CACrB,IAAIsmZ,EAAarkb,KAAKggC,UAAUhgC,KAAKgB,QAAQsC,GAAK,oBAAqBozB,EAAO1gB,MAAO0gB,EAAO3gB,QAC5Fsua,EAAW7gb,aAAa,QAAS,2BACjC6gb,EAAW7gb,aAAa,QAAS,mBACjC,IAAI6sa,EAAe18X,GAAiB,KAAOrwC,GAAMtD,KAAKgB,QAAQsC,GAAK,kBAC/Dghb,EAAsB3wY,GAAiB,QAC3C3zC,KAAKqwa,aAAeA,EACpBA,EAAa7sa,aAAa,QAAS,wBACnC8gb,EAAoB3ib,YAAY0ua,GAChCgU,EAAW1ib,YAAY2ib,GACvBtkb,KAAKokb,gBAAgBzib,YAAY0ib,QAGjCrkb,KAAKqwa,aAAe1jV,GAAeI,aAAa/sF,KAAKgB,QAAQsC,GAAK,WAAYozB,EAAO1gB,MAAO0gB,EAAO3gB,QACnG/V,KAAKqwa,aAAa7sa,aAAa,QAAS,uCACxCxD,KAAKokb,gBAAgBzib,YAAY3B,KAAKqwa,cAE1Crwa,KAAKkja,cAAcvha,YAAY3B,KAAKokb,kBAExCjyX,EAAQ92D,UAAUsjb,WAAa,WAC3B,IAAImF,EAAc,0EAEdptZ,EADYl2B,SAASosB,eAAe5sB,KAAKgB,QAAQsC,IAC9BsI,wBACnB24a,EvX7/CZ,WACI,IAAIC,EAAQhkb,SAASW,cAAc,OACnCqjb,EAAM9/a,MAAMC,WAAa,SACzB6/a,EAAM9/a,MAAMsR,MAAQ,QACpBxV,SAASuL,KAAKpK,YAAY6ib,GAC1B,IAAIC,EAAgBD,EAAM54a,wBAAwBoK,MAElDwua,EAAM9/a,MAAMmV,SAAW,SAEvB,IAAIkI,EAAQvhB,SAASW,cAAc,OACnC4gB,EAAMrd,MAAMsR,MAAQ,OACpBwua,EAAM7ib,YAAYogB,GAClB,IAAI2ia,EAAkB3ia,EAAMnW,wBAAwBoK,MAGpD,OADAwua,EAAM/jb,WAAW6E,YAAYk/a,GACtBC,EAAgBC,EuX8+CAC,GACnB3kb,KAAK8qD,SAAS6rX,cAAgB4N,EAC9Bvkb,KAAK8qD,SAASu4W,gBAAgB3sY,EAAO1gB,MAAO0gB,EAAO3gB,QACnD/V,KAAKs9a,eACL1oY,KAEA50C,KAAK6jb,sBAAsBntZ,EAAQotZ,GACnC9jb,KAAKikb,gBAAgBvtZ,EAAQotZ,GAC7B9jb,KAAKmkb,mBAAmBztZ,EAAQotZ,GAChC9jb,KAAK4kb,gBAAgBluZ,EAAQotZ,GAC7B9jb,KAAK6kb,uBAAuBnuZ,EAAQotZ,GACpC9jb,KAAK8kb,kBAAkBpuZ,EAAQotZ,GAC/B9jb,KAAK+kb,mBAAmBruZ,EAAQotZ,IAEpC3xX,EAAQ92D,UAAU0pb,mBAAqB,SAAUruZ,EAAQotZ,GACrD,IAAIhvY,EAAavB,GAAkB,OAC/BjwC,GAAMtD,KAAKgB,QAAQsC,GAAK,uBACxBoB,MAAS,SAAWgyB,EAAO1gB,MAAQ,aAAe0gB,EAAO3gB,OAAS,MAAQ+ta,IAE1EkB,EAAgBhlb,KAAKggC,UAAUhgC,KAAKgB,QAAQsC,GAAK,sBAAuBozB,EAAO1gB,MAAO0gB,EAAO3gB,QACjGiva,EAAcxhb,aAAa,QAAS,mBACpCwhb,EAAcxhb,aAAa,QAAS,wBACpCxD,KAAK+xZ,aAAep+W,GAAiB,KAAOrwC,GAAMtD,KAAKgB,QAAQsC,GAAK,oBACpEtD,KAAK+xZ,aAAavuZ,aAAa,QAAS,0BACxCwhb,EAAcrjb,YAAY3B,KAAK+xZ,cAC/Bj9W,EAAWnzC,YAAYqjb,GACvBhlb,KAAKkja,cAAcvha,YAAYmzC,GAC/B,IAAImwY,EAActxY,GAAiB,KAAOrwC,GAAMtD,KAAKgB,QAAQsC,GAAK,qBAClEtD,KAAK+xZ,aAAapwZ,YAAYsjb,GAC9BrxY,GAAgBoxY,GAAiBtgb,MAAO,0BAE5CytD,EAAQ92D,UAAUwpb,uBAAyB,SAAUnuZ,EAAQotZ,GACzD,IAAIoB,EAAcllb,KAAKggC,UAAUhgC,KAAKgB,QAAQsC,GAAK,oBAAqBozB,EAAO1gB,MAAO0gB,EAAO3gB,QAC7Fmva,EAAY1hb,aAAa,QAAS,wBAClC,IAAI2hb,EAAgBxxY,GAAiB,KACjCrwC,GAAMtD,KAAKgB,QAAQsC,GAAK,gBACxBi+H,MAAS,gBACT78H,MAAS,yBAEbwgb,EAAYvjb,YAAYwjb,GACxB,IAAIC,EAAiBzxY,GAAiB,KAClCrwC,GAAMtD,KAAKgB,QAAQsC,GAAK,mBACxBi+H,MAAS,iBACT78H,MAAS,yBAEbwgb,EAAYvjb,YAAYyjb,GACxBplb,KAAKkja,cAAcvha,YAAYujb,GAC/BtxY,GAAgBsxY,GAAexgb,MAASo/a,KAE5C3xX,EAAQ92D,UAAUupb,gBAAkB,SAAUluZ,EAAQotZ,GAClD9jb,KAAKuxZ,UAAYh+W,GAAkB,OAC/BjwC,GAAMtD,KAAKgB,QAAQsC,GAAK,aACxBoB,MAAS,SAAWgyB,EAAO1gB,MAAQ,cAAgB0gB,EAAO3gB,OAAS,6EAEnEwrH,MAAS,iBAEb,IAAI8jT,EAAe9xY,GAAkB,OACjCjwC,GAAMtD,KAAKgB,QAAQsC,GAAK,iBACxBoB,MAAS,2DAEb1E,KAAKuxZ,UAAU5vZ,YAAY0jb,GAC3Brlb,KAAKkja,cAAcvha,YAAY3B,KAAKuxZ,YAExCp/V,EAAQ92D,UAAUypb,kBAAoB,SAAUpuZ,EAAQotZ,GACpD,IAAIwB,EAAiBtlb,KAAKggC,UAAUhgC,KAAKgB,QAAQsC,GAAK,mBAAoBozB,EAAO1gB,MAAO0gB,EAAO3gB,QAC3Fs/Y,EAAc1hX,GAAiB,KAAOrwC,GAAMtD,KAAKgB,QAAQsC,GAAK,eAAgBoB,MAAS,wBAC3F4gb,EAAe3jb,YAAY0zZ,GAC3Br1Z,KAAKokb,gBAAgBzib,YAAY2jb,GACjC1xY,GAAgB0xY,GAAkB/jT,MAAS,iBAAkB78H,MAASo/a,KAE1E3xX,EAAQ92D,UAAU2kC,UAAY,SAAU18B,EAAI0S,EAAOD,GAC/C,IAAImiG,EAAS13G,SAAS4C,gBAAgB,6BAA8B,OAEpE,OADAwwC,GAAgBskE,GAAU50G,GAAMA,EAAI0S,MAASA,EAAOD,OAAUA,IACvDmiG,GAEX/lD,EAAQ92D,UAAUyhb,YAAc,SAAUyI,GACjCvlb,KAAKgyD,WACNhyD,KAAKwlb,WAETxlb,KAAKylb,mBACLzlb,KAAKw8a,eAAe+I,IAExBpzX,EAAQ92D,UAAUoqb,iBAAmB,WAQjC,IACK,IARDC,EAAY1lb,KAAK0xD,OAAOj1D,OAAS,EAEjCo1D,KACA8zX,KACAC,KAEA33P,KAEK7vL,EAAK,EAAGyE,EAAK7C,KAAK8xD,MAAO1zD,EAAKyE,EAAGpG,OAAQ2B,IAAM,EAChDrB,EAAM8F,EAAGzE,IACTkF,GAAKvG,EAAIuG,IAAMipC,KACnBvsC,KAAK6lb,WAAW9ob,EAAK2ob,GACrBC,EAAU5ob,EAAIuG,IAAMvG,EAExB,IAAK,IAAIkH,EAAK,EAAGwG,EAAKzK,KAAK6xD,WAAY5tD,EAAKwG,EAAGhO,OAAQwH,IAAM,EACrDlH,EAAM0N,EAAGxG,IACTX,GAAKvG,EAAIuG,IAAMipC,KACnBvsC,KAAK6lb,WAAW9ob,EAAK2ob,GACrBC,EAAU5ob,EAAIuG,IAAMvG,EAExB,IAAK,IAAIw0U,EAAK,EAAGC,EAAKxxU,KAAK0xD,OAAQ6/Q,EAAKC,EAAG/0U,OAAQ80U,IAAM,CAErD,IAAK,IAAIE,EAAK,EAAGC,GADbhoQ,EAAQ8nQ,EAAGD,IACa9iR,QAASgjR,EAAKC,EAAGj1U,OAAQg1U,IAAM,CAEvD,GAAIk0G,EADA5ob,EAAM20U,EAAGD,IAET,GAAMk0G,EAAU5ob,aAAgB+oD,GAa3B,CAED,IADIjG,EAAY8lY,EAAU5ob,IACZu6C,UAAYuI,EAAUmrW,SAAU,CAC1C,IAAInzW,EAAa8tY,EAAU9lY,EAAUvI,UACjCQ,EAAa6tY,EAAU9lY,EAAUmrW,UACjCnzW,GAAcA,EAAW9lC,SAAW+lC,GAAcA,EAAW/lC,QAC7D/R,KAAK2gb,eAAegF,EAAU5ob,GAAM2sE,GAGpC7X,EAAWrtD,KAAKmhb,EAAU5ob,SAI9BiD,KAAK2gb,eAAegF,EAAU5ob,GAAM2sE,QAzBpCi8W,EAAU5ob,GAAKqd,SACf6zK,EAAOzpL,KAAKzH,GAEN4ob,EAAU5ob,GAAK4wB,iBAAiBi+X,IACtC+5B,EAAU5ob,GAAK4wB,MAAMu/X,SAASD,WAAWE,WACzCw4B,EAAU5ob,GAAK4wB,MAAMu/X,SAASD,WAAWE,UAAU1wZ,OAAS,EAC5Dmpb,EAAUD,EAAU5ob,GAAKuG,IAAMvG,EAG/BiD,KAAK8lb,UAAUH,EAAU5ob,GAAM2sE,GAqB/C,GAAI1pE,KAAK+sZ,WACL,IAAK,IAAIg5B,EAAK,EAAGC,EAAKhmb,KAAK+sZ,WAAWk5B,yBAA0BF,EAAKC,EAAGvpb,OAAQspb,IAAM,CAClF,IAAIhpb,EAAMipb,EAAGD,GACb/lb,KAAK2gb,eAAe5jb,EAAK2sE,GAAO,IAI5C,IAAK,IAAIw8W,EAAK,EAAGC,EAAK7nb,OAAOhB,KAAKsob,GAAYM,EAAKC,EAAG1pb,OAAQypb,IAAM,CAC5Dnpb,EAAMopb,EAAGD,GACblmb,KAAKkua,WAAWyX,EAAU5ob,IAC1BiD,KAAK+sZ,WAAW6zB,YAAY+E,EAAU5ob,GAAMiD,MAEhD,IAAK,IAAIomb,EAAK,EAAGC,EAAWp4P,EAAQm4P,EAAKC,EAAS5pb,OAAQ2pb,IAAM,CACxDrpb,EAAMspb,EAASD,GAAnB,IACI18W,EAAQ1pE,KAAKi4Z,eAAe+O,eAAejqa,GAC/CiD,KAAK8lb,UAAUH,EAAU5ob,GAAM2sE,GAEnC,IAAK,IAAI48W,EAAK,EAAGC,EAAe10X,EAAYy0X,EAAKC,EAAa9pb,OAAQ6pb,IAAM,CACxE,IAAIzmY,EAAY0mY,EAAaD,GACzB58W,EAAQ1pE,KAAKi4Z,eAAe+O,eAAennX,EAAUv8C,IACzDtD,KAAK2gb,eAAe9gY,EAAW6pB,KAGvCvX,EAAQ92D,UAAUwqb,WAAa,SAAU9ob,EAAK2ob,GAC1C,IAAIh8W,EACAg8W,IACAh8W,EAAQ1pE,KAAKi4Z,eAAe+O,eAAejqa,EAAIuG,KAE9Coib,GAAch8W,IACmC,IAA9C1pE,KAAKira,YAAYx8W,QAAQlwD,QAAQxB,EAAIuG,KACrCtD,KAAKira,YAAYx8W,QAAQjqD,KAAKzH,EAAIuG,IAG1CtD,KAAKkrN,UAAUxhJ,GAAS1pE,KAAKira,YAAalua,IAE9Co1D,EAAQ92D,UAAU2hb,YAAc,SAAUvwV,GACtC,IAAK,IAAIruF,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKmvF,EAAQ/6B,QAAStzD,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAGrE,IAAK,IAFDf,EAAMwF,EAAGzE,GAEJ6F,EAAK,EAAGuib,EADCxmb,KAAK0xD,OAAOr0D,GAAKoxD,QACWxqD,EAAKuib,EAAc/pb,OAAQwH,IAAM,CAC3E,IAAIlH,EAAMypb,EAAcvib,GACpB1D,EAAOP,KAAKs5D,UAAUv8D,QACU5B,IAAhCsxF,EAAQ/6B,OAAOr0D,GAAKm6B,QACpBx3B,KAAKstZ,wBAAwB/sZ,EAAKwR,QAASxR,EAAMksF,EAAQ/6B,OAAOr0D,GAAKm6B,UAEnC,IAA7Bi1D,EAAQ/6B,OAAOr0D,GAAK4pa,MACzBjna,KAAKq5Z,SAAS94Z,QAGWpF,IAA7BsxF,EAAQ/6B,OAAOr0D,GAAK4pa,OACpBjna,KAAK0xD,OAAOr0D,GAAK4pa,KAAOx6U,EAAQ/6B,OAAOr0D,GAAK4pa,MAGlC,QAAdjna,KAAK+9B,MACL/9B,KAAK+qa,uBAGb54W,EAAQ92D,UAAU4hb,qBAAuB,SAAUxwV,GAC/C,IAAIg6V,GAASzmb,KAAK8qD,SAASC,iBAAmB0hC,EAAQh7B,eAAe1G,kBAAoB,EACrF27X,EAAQ1mb,KAAK8qD,SAASG,eAAiBwhC,EAAQh7B,eAAexG,gBAAkB,EAChFjiD,GACA29a,eAAgB3mb,KAAKyxD,eAAexG,eAAgB27X,iBAAkB5mb,KAAKyxD,eAAe1G,iBAC1F87X,eAAgB7mb,KAAKyxD,eAAepG,eAAgBy7X,cAAe9mb,KAAKyxD,eAAenG,cACvFy7X,YAAa/mb,KAAK8qD,SAASY,aAElB,IAAT+6X,GAAuB,IAATC,GACd1mb,KAAK4lW,IAAI6gF,EAAMC,GAEnB,IAKI30V,GACA/oF,SAAUA,EAAU1B,UALpBq/a,eAAgB3mb,KAAKyxD,eAAexG,eAAgB27X,iBAAkB5mb,KAAKyxD,eAAe1G,iBAC1F87X,eAAgB7mb,KAAKyxD,eAAepG,eAAgBy7X,cAAe9mb,KAAKyxD,eAAenG,cACvFy7X,YAAa/mb,KAAK8qD,SAASY,aAGanvD,OAAQyD,MAEpDA,KAAKwpJ,aAAas3P,GAAakmC,aAAcj1V,IAEjD5/B,EAAQ92D,UAAUmqb,SAAW,WACrBxlb,KAAKinb,oBACDjnb,KAAKkwD,mBAAmBs+F,aAAexuJ,KAAKkwD,mBAAmBs+F,YAAYjrF,iBACpBpoE,IAAvD6E,KAAKkwD,mBAAmBs+F,YAAYjrF,WAAW31C,IAC/C5tB,KAAKinb,kBAAkBC,WAAWlnb,KAAKkwD,mBAAoBlwD,MAG3DA,KAAKinb,kBAAkBzB,SAASxlb,KAAKkwD,mBAAoBlwD,QAIrEmyD,EAAQ92D,UAAUyqb,UAAY,SAAU/ob,EAAK2sE,GACzC1pE,KAAKgva,eAAgB,EACrBhva,KAAKkua,WAAWnxa,EAAK2sE,GACrB1pE,KAAKgva,eAAgB,GAEzB78W,EAAQ92D,UAAUslb,eAAiB,SAAU5jb,EAAK2sE,EAAOy9W,GACrDnnb,KAAKgva,eAAgB,EACrBhva,KAAKkua,WAAWnxa,EAAK2sE,EAAOy9W,GAC5Bnnb,KAAKygb,YAAY1jb,GACjBiD,KAAKgva,eAAgB,GAEzB78W,EAAQ92D,UAAU6vN,UAAY,SAAUxhJ,EAAO3sE,GAE3C,IAAIqqb,EAAe19W,EACnB,IAAsB,IAAlB,EAAMjH,OAAe,CACrB,KAAO2kX,EAAave,YAAYue,EAAaxe,aAAe,IACxDl/V,EAAMk/V,eAEV7ra,EAAI0lE,SAAW2kX,EAAaxe,iBAE3B,CACD,IAAI32Z,EAAQlV,EAAI0lE,OAChB,GAAI2kX,EAAave,YAAY52Z,GAEzB,IACK,IAFDm+Z,EAAc9xa,OAAOhB,KAAK8pb,EAAave,aAAapsa,OAE/CN,EAAI,EAAGA,EAAIi0a,EAAaj0a,IAC7B,GAAIA,IAAM8V,EAAO,CACb,IAAK,IAAI0oV,EAAMy1E,EAAaz1E,EAAM1oV,EAAO0oV,IACrCysF,EAAave,YAAYluE,GAAOysF,EAAave,YAAYluE,EAAM,GAC3D36V,KAAKs5D,UAAU8tX,EAAave,YAAYluE,MACxC36V,KAAKs5D,UAAU8tX,EAAave,YAAYluE,IAAMl4R,OAASk4R,GAG/DysF,EAAave,YAAY1sa,GAAKY,EAAIuG,MAOtD6uD,EAAQ92D,UAAUujb,wBAA0B,WACxC,IAAK,IAAIxgb,EAAK,EAAGyE,EAAK7C,KAAK0xD,OAAQtzD,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACrD,IAAIsrE,EAAQ7mE,EAAGzE,GACfsrE,EAAMjH,OAASziE,KAAK0xD,OAAOnzD,QAAQmrE,GACnC1pE,KAAKgra,iBAAiBthW,EAAMjH,QAAUiH,EAAMpmE,GAEhD,GAA2B,IAAvBtD,KAAK0xD,OAAOj1D,OAAc,CAK1BuD,KAAKi4Z,eAAet+I,UAHhBr2Q,GAAI,gBAAiBk0B,SAAS,EAAMyvY,MAAM,EAAOx4W,WAAagU,OAAQ,EACtEmmW,cAAe,EAAGC,iBAI1B7oa,KAAKwra,eAAexra,KAAK0xD,OAAO1xD,KAAK0xD,OAAOj1D,OAAS,GAAG6G,KAG5D6uD,EAAQ92D,UAAUwsa,UAAY,WAC1B7na,KAAKq8a,aAAaxU,aAGtB11W,EAAQ92D,UAAU6ya,WAAa,SAAUnxa,EAAK2sE,EAAOy9W,GAEjD,QADuB,IAAnBA,IAA6BA,GAAiB,QACtChsb,IAAR4B,EAAmB,CAWnB,GAVIoqb,IACKz9W,IACD1pE,KAAK6lb,WAAW9ob,GAAK,GACrB2sE,EAAQ1pE,KAAKira,cAGblua,aAAeoqD,IAAQpqD,aAAe+oD,KACtC9lD,KAAKkrN,UAAUxhJ,EAAO3sE,IAG1BA,aAAeoqD,IACf,GAAIggY,EAAgB,CAEhB,GADIjpE,EAAc7wU,GAAYrtC,KAAKgxD,iBAClB,EACTq2X,EAAWnpE,EAAYnhX,EAAKiD,QAChBqnb,IAAatqb,GACzB+wC,GAAau5Y,EAAUtqb,GAG/BiD,KAAKsnb,SAASvqb,SAGjB,GAAIA,aAAe+oD,GAAW,CAC/B,IAAIo4T,EACJ,GADIA,EAAc7wU,GAAYrtC,KAAKkxD,sBAClB,CACb,IAAIm2X,GAAAA,EAAWnpE,EAAYnhX,EAAKiD,QAChBqnb,IAAatqb,GACzB+wC,GAAau5Y,EAAUtqb,GAEvBA,EAAI+rC,SAASrsC,QACTM,EAAI2J,OAAS3J,EAAI+rC,SAAS,GAAGpiC,OAC7B3J,EAAI+rC,aAIhB,IAAI+O,EAAa73C,KAAKs5D,UAAUv8D,EAAIu6C,UAChCQ,EAAa93C,KAAKs5D,UAAUv8D,EAAIiuZ,UAapC,QAZmB7vZ,IAAf08C,GAA4BwP,GAAcxP,KAC1C96C,EAAIi6C,cAAgBh3C,KAAKunb,kBAAkB1vY,EAAY96C,GAAK,GACxDA,EAAIm8D,eACJn8D,EAAIm6C,kBAAoBl3C,KAAKi/G,WAAWpnE,EAAW9lC,QAAShV,EAAIm8D,qBAGrD/9D,IAAf28C,GAA4BoP,GAAapP,KACzC/6C,EAAIw6C,cAAgBv3C,KAAKunb,kBAAkBzvY,EAAY/6C,GAAK,GACxDA,EAAIkuZ,eACJluZ,EAAIk7C,kBAAoBj4C,KAAKi/G,WAAWnnE,EAAW/lC,QAAShV,EAAIkuZ,iBAGnEk8B,EAAgB,CAEjBjyX,GAAgBn4D,EADHA,EAAIwrZ,mBAAmBxrZ,EAAI2J,OAGxCygb,GACApqb,EAAIi7N,KAAKh4N,MAEbjD,EAAIgV,QAAQ6pR,QAAQ,IAAIxuQ,QAAKjyB,OAAWA,IACxC4B,EAAIgV,QAAQ4vY,QAAQ5kZ,EAAIgV,QAAQ49B,aAMpC,GAJI3vC,KAAK+sZ,YAAchwZ,aAAeoqD,IACZ,SAAnBpqD,EAAI4wB,MAAMjnB,MAAmB3J,EAAI4wB,MAAMipC,YAAYn6D,OAAS,GAC/DuD,KAAK+sZ,WAAW6tB,WAAW79a,EAAKiD,MAEhCmnb,EAAgB,CAEhB,IAD+Bnnb,KAAKi4Z,eAAewG,8BAAyBtja,OAAWA,EAAW4B,EAAIgV,QAAQ2kB,QAG1G,IAAK,IADDn2B,EAAOxD,aAAeoqD,GAAOnnD,KAAK8xD,MAAQ9xD,KAAK6xD,WAC1C11D,EAAI,EAAGA,GAAKoE,EAAK9D,OAAQN,IAC1BoE,EAAKpE,IAAMY,EAAIuG,KAAO/C,EAAKpE,GAAGmH,IAC9B/C,EAAK8nB,OAAOlsB,EAAG,GAI3ButE,EAAMm/V,YAAY9ra,EAAI0lE,QAAU1lE,EAAIuG,GAGxC,GADAtD,KAAKs5D,UAAUv8D,EAAIuG,IAAMvG,EACrBA,aAAeoqD,IAAQpqD,EAAIqd,SAAU,CACrCpa,KAAKkza,kBAAkBn2a,GACvBiD,KAAK47a,WAAW7+a,EAAIuG,IAAMvG,EAAIqd,SAC9B,IAASje,EAAI,EAAGA,EAAIY,EAAIqd,SAAS3d,OAAQN,IAAK,EACtCoE,EAAQP,KAAKs5D,UAAUv8D,EAAIqd,SAASje,KACnCo9D,SAAWx8D,EAAIuG,IAEnBtD,KAAKgyD,WAAaj1D,EAAI8vC,aACvB7sC,KAAKi4Z,eAAeya,cAAc31a,GAAMA,GAAMA,EAAI8vC,aAAe9/B,EAAGhQ,EAAI8O,QAASmB,EAAGjQ,EAAIkP,UAAW,GAG3GjM,KAAK46a,WAAW79a,IAEA,IAAhBA,EAAIy6B,SACJx3B,KAAKstZ,wBAAwBvwZ,EAAIgV,QAAShV,GAAK,IAGvDo1D,EAAQ92D,UAAU4nb,yBAA2B,SAAU1ib,GAC1B,wBAArBP,KAAK6wD,OAAOnqD,MAAuD,qBAArB1G,KAAK6wD,OAAOnqD,MACrC,4BAArB1G,KAAK6wD,OAAOnqD,OAER1G,KAAKwnb,wBAAwBjnb,EAAMA,EAAKutZ,YACxC9tZ,KAAKwnb,wBAAwBjnb,EAAMA,EAAKwtZ,gBAIpD57V,EAAQ92D,UAAUmsb,wBAA0B,SAAUjnb,EAAMm1C,GACxD,GAAmB,SAAfA,EAAK/nB,OAC4B,SAA7B+nB,EAAK+d,qBAA6D,SAA3B/d,EAAKge,mBAC1B,KAAlBhe,EAAK/pC,OAAOoB,GAA8B,IAAlB2oC,EAAK/pC,OAAOqB,EAAS,CAC7C,IAAIuoL,EAAcv1L,KAAKi/G,WAAW1+G,EAAKwR,QAAS,gBAC5ClG,OAAU,EACVI,OAAU,EACkB,gBAA5BjM,KAAK6wD,OAAOz3B,aAA6D,gBAA5Bp5B,KAAK6wD,OAAOz3B,aACzDvtB,EAAU,GACVI,EAAsC,gBAA5BjM,KAAK6wD,OAAOz3B,YAAgC,EAAI,GAEzB,gBAA5Bp5B,KAAK6wD,OAAOz3B,aAA6D,gBAA5Bp5B,KAAK6wD,OAAOz3B,cAC9DvtB,EAAsC,gBAA5B7L,KAAK6wD,OAAOz3B,YAAgC,EAAI,EAC1DntB,EAAU,IAEdspL,EAAYisN,6BAA6B31Y,EAASI,EAAS,YAC3DspL,EAAY9hI,oBAAsB,SAClC8hI,EAAY7hI,kBAAoB,SAChCnzD,EAAKwR,QAAQ6pR,QAAQ,IAAIxuQ,GAAK7sB,EAAKwR,QAAQiE,MAAOzV,EAAKwR,QAAQgE,SAC/DxV,EAAKwR,QAAQ4vY,QAAQphZ,EAAKwR,QAAQ49B,eAO9CwiB,EAAQ92D,UAAU63a,kBAAoB,SAAU3ya,IACvCA,EAAK6Z,UAAY7Z,EAAK6Z,SAAS3d,OAAS,GAAO8D,EAAc,aAC9DP,KAAKs5D,UAAU/4D,EAAK+C,IAAIuI,QAAUtL,EAAKwR,QAAQlG,QAC/C7L,KAAKs5D,UAAU/4D,EAAK+C,IAAI2I,QAAU1L,EAAKwR,QAAQ9F,QAC1C1L,EAAK6Z,UAAY7Z,EAAK6Z,SAAS3d,OAAS,IACzCuD,KAAKs5D,UAAU/4D,EAAK+C,IAAI0S,MAAQzV,EAAKwR,QAAQ26B,WAAW12B,MACxDhW,KAAKs5D,UAAU/4D,EAAK+C,IAAIyS,OAASxV,EAAKwR,QAAQ26B,WAAW32B,UAIrEo8C,EAAQ92D,UAAUisb,SAAW,SAAUvqb,GACnC,IAEIq9B,EAFAspW,EAAS3mY,EAAIwwZ,gBACbk6B,EAAgB,IAAI5jC,GAKxB,GAHKngB,EAAOtpX,WACRspX,EAAOtpX,aAEPrd,EAAIqd,SAAU,CACdspX,EAAOmf,iBAAkB,EACzB,IAAK,IAAI1mZ,EAAI,EAAGA,EAAIY,EAAIqd,SAAS3d,OAAQN,IACjC6D,KAAKs5D,UAAUv8D,EAAIqd,SAASje,KAC5BunY,EAAOtpX,SAAS5V,KAAKxE,KAAKs5D,UAAUv8D,EAAIqd,SAASje,IAAI4V,SAG7D01a,EAAcnkb,GAAK,kBACnBmkb,EAAc/ib,MAAMk5B,KAAO,OAC3B6pZ,EAAc/ib,MAAMktC,YAAc,OAClC61Y,EAAch0X,oBAAsB,UACpCg0X,EAAc/zX,kBAAoB,UAClC+zX,EAAcrta,YACdspX,EAAOtpX,SAAS5V,KAAKijb,OAEpB,CACD,IAAIp3X,EAAkBhjB,GAAYrtC,KAAKqwD,iBACnCA,IACAj2B,EAAUi2B,EAAgBtzD,EAAKiD,OAE9Bo6B,IACDA,EAAUr9B,EAAIi7N,KAAKh4N,OAEvB0jY,EAAOtpX,SAAS5V,KAAK41B,GAGzB,IAAI2uX,EACJA,EAAiB17W,GAAYrtC,KAAKswD,iBAE7BvzD,EAAIqd,SAAWspX,EAAStpW,GAAS8X,YADlC62W,IAIgDhsZ,EAAI65D,YAAYn6D,OAASM,EAAI65D,YAAY,GAAGx8B,QAAUr9B,EAAIuG,IAE9G,IAAImX,EAAY1d,EAAIqd,SAAWqta,EAAgB/jD,EAC/C3mY,EAAIkxZ,gBAAgBjuZ,KAAKswD,eAAgB71C,GACzC1d,EAAIywZ,UAAUxtZ,KAAKswD,eAAgB71C,GACnC1d,EAAI8wZ,UAAU7tZ,KAAKswD,eAAgBtwD,KAAK6wD,OAAQp2C,GAChDipX,EAAO9nG,QAAQ,IAAIxuQ,GAAKrwB,EAAIiZ,MAAOjZ,EAAIgZ,SACvC2tX,EAAOie,QAAQje,EAAO/zV,cAE1BwiB,EAAQ92D,UAAUo1D,WAAa,WAC3B,OAAO,GAEX0B,EAAQ92D,UAAUqib,UAAY,WACrB19a,KAAKgyD,YACNhyD,KAAKiyD,MAAMztD,KAAKxE,KAAKgB,QAAQsC,IAC7BtD,KAAKiyD,MAAMjyD,KAAKgB,QAAQsC,IAAMtD,OAGtCmyD,EAAQ92D,UAAUwhb,aAAe,WAC7B,IACI6K,EAAc1nb,KAAKuwD,eAAevoB,SAClCA,GACAzoC,MACIixD,QAASxwD,KAAKu/a,YAAYjkb,KAAK0E,MAAOywD,WAAYzwD,KAAKywD,WAAWn1D,KAAK0E,MACvE2la,SAAWtoa,IAAKwjZ,GAAKt9S,EAAGqiU,aAAchlB,GAAa+lB,UAEvDmF,OACIt7W,QAASxwD,KAAKs/a,aAAahkb,KAAK0E,MAAOywD,WAAYzwD,KAAKywD,WAAWn1D,KAAK0E,MACxE2la,SAAWtoa,IAAKwjZ,GAAK8mC,EAAG/hB,aAAchlB,GAAa+lB,UAEvD8D,KACIj6W,QAASxwD,KAAKo/a,WAAW9jb,KAAK0E,MAAOywD,WAAYzwD,KAAKywD,WAAWn1D,KAAK0E,MACtE2la,SAAWtoa,IAAKwjZ,GAAKzqY,EAAGwvZ,aAAchlB,GAAa+lB,UAEvD/xT,QACIpkD,QAASxwD,KAAKwhb,cAAclmb,KAAK0E,MAAOywD,WAAYzwD,KAAKywD,WAAWn1D,KAAK0E,MACzE2la,SAAWtoa,IAAKwjZ,GAAK4gC,SAEzB77a,WACI4qD,QAASxwD,KAAK4F,UAAUtK,KAAK0E,MAAOywD,WAAYzwD,KAAKywD,WAAWn1D,KAAK0E,MACrE2la,SAAWtoa,IAAKwjZ,GAAKn9S,EAAGkiU,aAAchlB,GAAa+lB,UAEvDuZ,MACI1vX,QAASxwD,KAAKkgb,KAAK5kb,KAAK0E,MAAOywD,WAAYzwD,KAAKywD,WAAWn1D,KAAK0E,MAChE2la,SAAWtoa,IAAKwjZ,GAAK76S,EAAG4/T,aAAchlB,GAAa+lB,UAEvDwZ,MACI3vX,QAASxwD,KAAKmgb,KAAK7kb,KAAK0E,MAAOywD,WAAYzwD,KAAKywD,WAAWn1D,KAAK0E,MAChE2la,SAAWtoa,IAAKwjZ,GAAKxqY,EAAGuvZ,aAAchlB,GAAa+lB,UAEvDihB,SACIp3X,QAASxwD,KAAK0/a,aAAapkb,KAAK0E,KAAM,MACtCywD,WAAYzwD,KAAKywD,WAAWn1D,KAAK0E,MAAO2la,SAAWtoa,IAAKwjZ,GAAKgnC,IAC7D3hB,UAAW,MAEf4hB,YACIt3X,QAASxwD,KAAK0/a,aAAapkb,KAAK0E,KAAM,SACtCywD,WAAYzwD,KAAKywD,WAAWn1D,KAAK0E,MAAO2la,SAAWtoa,IAAKwjZ,GAAKjvI,OAC7Ds0J,UAAW,SAEf6hB,WACIv3X,QAASxwD,KAAK0/a,aAAapkb,KAAK0E,KAAM,QACtCywD,WAAYzwD,KAAKywD,WAAWn1D,KAAK0E,MAAO2la,SAAWtoa,IAAKwjZ,GAAKmnC,MAC7D9hB,UAAW,QAEf+hB,WACIz3X,QAASxwD,KAAK0/a,aAAapkb,KAAK0E,KAAM,QACtCywD,WAAYzwD,KAAKywD,WAAWn1D,KAAK0E,MAAO2la,SAAWtoa,IAAKwjZ,GAAK/qI,MAC7DowJ,UAAW,QAEfgiB,WACI13X,QAASxwD,KAAK+hb,gBAAgBzmb,KAAK0E,MACnCywD,WAAYzwD,KAAKywD,WAAWn1D,KAAK0E,MAAO2la,SAAWtoa,IAAKwjZ,GAAKsnC,KAEjEjkB,SACI1zW,QAASxwD,KAAKoob,eAAe9sb,KAAK0E,MAClCywD,WAAYzwD,KAAKywD,WAAWn1D,KAAK0E,MAAO2la,SAAWtoa,IAAKwjZ,GAAKwnC,SAEjEC,iBAEI73X,WAAYzwD,KAAKywD,WAAWn1D,KAAK0E,MAAO2la,SAAWtoa,IAAKwjZ,GAAK9hG,MAEjEwpI,qBAEI93X,WAAYzwD,KAAKywD,WAAWn1D,KAAK0E,MAAO2la,SAAWtoa,IAAKwjZ,GAAK9hG,IAAK6mH,aAAchlB,GAAa+lB,UAEjG6hB,mBACIh4X,QAASxwD,KAAK+hb,gBAAgBzmb,KAAK0E,MACnCywD,WAAYzwD,KAAKywD,WAAWn1D,KAAK0E,MAAO2la,SAAWtoa,IAAKwjZ,GAAK4nC,SAGrEzob,KAAK0ob,mBAAmBhB,EAAa1/Y,IAEzCmqB,EAAQ92D,UAAUstb,iBAAmB,SAAUC,EAAY5gZ,GAEvD,IAAK,IADDR,EACKppC,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAK0qC,GAAW5pC,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC/D,IAAIf,EAAMwF,EAAGzE,GAEb,GADAopC,EAAUQ,EAAS3qC,GACfurb,EAAWjjB,QAAQtoa,MAAQmqC,EAAQm+X,QAAQtoa,KAAOurb,EAAWjjB,QAAQC,eAAiBp+X,EAAQm+X,QAAQC,aAAc,QAC7G59X,EAAS3qC,GAChB,SAIZ80D,EAAQ92D,UAAUqtb,mBAAqB,SAAUhB,EAAa1/Y,GAC1D,IAAI7rC,EAAI,EACR,GAAIurb,EACA,IAAKvrb,EAAI,EAAGA,EAAIurb,EAAYjrb,OAAQN,IAC5B6rC,EAAS0/Y,EAAYvrb,GAAGs7B,OAASiwZ,EAAYvrb,IACzCurb,EAAYvrb,GAAGs0D,aACfzoB,EAAS0/Y,EAAYvrb,GAAGs7B,MAAMg5B,WAAai3X,EAAYvrb,GAAGs0D,YAE1Di3X,EAAYvrb,GAAGq0D,UACfxoB,EAAS0/Y,EAAYvrb,GAAGs7B,MAAM+4B,QAAUk3X,EAAYvrb,GAAGq0D,UAEvDk3X,EAAYvrb,GAAGwpa,QAAQtoa,KAAOqqb,EAAYvrb,GAAGwpa,QAAQC,gBACrD59X,EAAS0/Y,EAAYvrb,GAAGs7B,MAAMkuY,QAAU+hB,EAAYvrb,GAAGwpa,SAE1B,KAA7B+hB,EAAYvrb,GAAG+pa,YACfl+X,EAAS0/Y,EAAYvrb,GAAGs7B,MAAMyuY,UAAYwhB,EAAYvrb,GAAG+pa,aAI7Dlma,KAAK2ob,iBAAiBjB,EAAYvrb,GAAI6rC,GACtCA,EAAS0/Y,EAAYvrb,GAAGs7B,OACpB+4B,QAASk3X,EAAYvrb,GAAGq0D,QAASC,WAAYi3X,EAAYvrb,GAAGs0D,WAAYk1W,QAAS+hB,EAAYvrb,GAAGwpa,QAChGO,UAAWwhB,EAAYvrb,GAAG+pa,YAK1Clma,KAAKgoC,SAAWA,GAGpBmqB,EAAQ92D,UAAUymb,gBAAkB,SAAUvhb,GAC1C,IAAK,IAAInC,EAAK,EAAGyE,EAAKtC,EAAKosZ,QAASvuZ,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACtD,IAAIua,EAAO9V,EAAGzE,GACV4B,KAAKs5D,UAAU3gD,KACf3Y,KAAKs5D,UAAU3gD,GAAMqyY,SAAW,IAGxC,IAAK,IAAI/mZ,EAAK,EAAGwG,EAAKlK,EAAKmsZ,SAAUzoZ,EAAKwG,EAAGhO,OAAQwH,IAAM,CACnD0U,EAAOlO,EAAGxG,GACVjE,KAAKs5D,UAAU3gD,KACf3Y,KAAKs5D,UAAU3gD,GAAM2+B,SAAW,IAGxC/2C,EAAKosZ,WACLpsZ,EAAKmsZ,aAGTv6V,EAAQ92D,UAAUwtb,qBAAuB,SAAUtob,EAAMoE,GACrD,IAAK,IAAIxI,EAAI,EAAGA,EAAIoE,EAAKwR,QAAQqI,SAAS3d,OAAQN,IAAK,CACnD,IAAIkE,EAAQE,EAAKwR,QAAQqI,SAASje,GAC9BmH,EAAKjD,EAAMiD,GAAGpG,MAAMqD,EAAK+C,IAAI,GAC7BjD,EAAMiD,IAAMA,GAAMA,EAAGqM,MAAM,YAC3BtP,EAAMm3B,QAAU7yB,EAChB3E,KAAK8ob,iCAAiCzob,EAAOsE,MAKzDwtD,EAAQ92D,UAAUolb,YAAc,SAAU1jb,GACtC,QAAqB5B,IAAjB4B,EAAIu6C,UAA2C,KAAjBv6C,EAAIu6C,SAAiB,EAC/C/2C,EAAOP,KAAKs5D,UAAUv8D,EAAIu6C,YAClB/2C,EAAKmsZ,UAAqC,IAAzBnsZ,EAAKmsZ,SAASjwZ,SACvC8D,EAAKmsZ,aAELnsZ,GAAQA,EAAKmsZ,WAA+C,IAAnCnsZ,EAAKmsZ,SAASnuZ,QAAQxB,EAAIuG,KACnD/C,EAAKmsZ,SAASloZ,KAAKzH,EAAIuG,IAG/B,QAAqBnI,IAAjB4B,EAAIiuZ,UAA2C,KAAjBjuZ,EAAIiuZ,SAAiB,CACnD,IAAIzqZ,EAOJ,IAPIA,EAAOP,KAAKs5D,UAAUv8D,EAAIiuZ,YAClBzqZ,EAAKosZ,SAAmC,IAAxBpsZ,EAAKosZ,QAAQlwZ,SACrC8D,EAAKosZ,YAELpsZ,GAAQA,EAAKosZ,UAA6C,IAAlCpsZ,EAAKosZ,QAAQpuZ,QAAQxB,EAAIuG,KACjD/C,EAAKosZ,QAAQnoZ,KAAKzH,EAAIuG,IAEtB/C,GAAQA,EAAKi3B,SAAWj3B,EAAKmsZ,SAAU,CACvC,IAAI1vZ,EAAiC,IAAzBuD,EAAKmsZ,SAASjwZ,OAC1BuD,KAAK6ob,qBAAqBtob,EAAMvD,MAK5Cm1D,EAAQ92D,UAAU0tb,eAAiB,WAC/B/ob,KAAKylb,mBACLzlb,KAAKo/O,WACLp/O,KAAKw8a,iBACLx8a,KAAK8qD,SAASuxI,WAGlBlqI,EAAQ92D,UAAUwua,oBAAsB,SAAU9sa,GAE9C,IAAK,IADDu+L,EACKl9L,EAAK,EAAGyE,EAAK7C,KAAKiyD,MAAO7zD,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACpD,IAAI2vB,EAAOlrB,EAAGzE,GAEd,GAAkB,SADlBk9L,EAAOt7L,KAAKiyD,MAAMlkC,IACTgQ,MAAkB/9B,KAAKqpD,eAAgB,CAC5C,IAAIkoW,EAAYj+W,GAAatzC,KAAKgB,QAAQsC,IACtCozZ,EAAuBl2Z,SAASosB,eAAe0uK,EAAKt6L,QAAQsC,GAAK,iBACrEtD,KAAKswa,gBAAgB12G,WAAW78T,EAAIgV,QAAS2kZ,EAAsBnF,OAAWp2Z,QAG9E6E,KAAKgpb,0BAA0B1tP,KAK3CnpI,EAAQ92D,UAAU6jb,kBAAoB,SAAUhD,GAE5C,IAAK,IADD3L,KACKnya,EAAK,EAAG6qb,EAAgB/M,EAAa99a,EAAK6qb,EAAcxsb,OAAQ2B,IAAM,CAC3E,IAAIrB,EAAMksb,EAAc7qb,GACpB4B,KAAKs5D,UAAUv8D,IACfwza,EAAU/ra,KAAKxE,KAAKs5D,UAAUv8D,IAGtC,OAAOwza,GAGXp+W,EAAQ92D,UAAU0va,oBAAsB,WAEpC,IAAK,IADDzvO,EACKl9L,EAAK,EAAGyE,EAAK7C,KAAKiyD,MAAO7zD,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACpD,IAAI2vB,EAAOlrB,EAAGzE,GAEd,QADAk9L,EAAOt7L,KAAKiyD,MAAMlkC,IACLgQ,MACT,IAAK,MACD/9B,KAAKkpb,uBAAuB5tP,GAC5B,MACJ,IAAK,SACDt7L,KAAKkwa,yBAMrB/9W,EAAQ92D,UAAU60a,oBAAsB,WACpC,IAAK,IAAI9xa,EAAK,EAAGyE,EAAK7C,KAAKiyD,MAAO7zD,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACpD,IAAI2vB,EAAOlrB,EAAGzE,GACVk9L,EAAOt7L,KAAKiyD,MAAMlkC,GACtB/tB,KAAKgpb,0BAA0B1tP,KAGvCnpI,EAAQ92D,UAAU8tb,mBAAqB,SAAU7tP,GAE7C,IAAK,IADDi2N,EAAYj+W,GAAagoJ,EAAKt6L,QAAQsC,IACjCnH,EAAI,EAAGA,EAAI6D,KAAK4xD,cAAcn1D,OAAQN,IAAK,CAChD,IAAI6E,EAAUhB,KAAK4xD,cAAcz1D,GAC7B6E,aAAmBo2D,KACnBp2D,EAAQ8hZ,gBAAkB,GAE9B9hZ,EAAQ46R,QAAQ,IAAIxuQ,GAAKpsB,EAAQgV,MAAOhV,EAAQ+U,SAChD/U,EAAQ2gZ,QAAQ3gZ,EAAQ2uC,aACxB2rJ,EAAKg1O,gBAAgBhf,cAActwZ,EAASs6L,EAAK+0O,aAAc9e,KAGvEp/V,EAAQ92D,UAAUmpX,gBAAkB,SAAUlpL,GAC1C,IAAKt7L,KAAKgnF,YAAa,CACnBhnF,KAAKopb,YAAY9tP,GACbA,aAAgBnpI,IAChBmpI,EAAK+0O,aAAanjV,WAAW,MAAM66Q,aAAazsK,EAAKxwI,SAASY,YAAa,EAAG,EAAG4vI,EAAKxwI,SAASY,YAAa,EAAG,GAC/G4vI,EAAK+0O,aAAanjV,WAAW,MAAMzhC,MAAM,IAAK,MAElD,IAAI8lW,EAAYj+W,GAAagoJ,EAAKt6L,QAAQsC,IAC7BtD,KAAKqoa,cAAc+N,gBAChCp2a,KAAKqpb,sBAAsB/tP,EAAK+0O,aAAc/0O,EAAKg1O,gBAAiB/e,GAChEj2N,aAAgBnpI,IAChBmpI,EAAK+0O,aAAa3ra,MAAM2I,UAAY,SAAY,EAAI,EAAK,IACzDiuL,EAAK+0O,aAAa3ra,MAAMwY,gBAAkB,OAE9Cld,KAAK87a,YAAc,OAI3B3pX,EAAQ92D,UAAU2tb,0BAA4B,SAAU1tP,GACpD,IAAIv7L,EAAQC,KACM,QAAds7L,EAAKv9J,MAAmB/9B,KAAKgnF,cACzBhnF,KAAK4xD,cAAcn1D,OAAS,GAC5BuD,KAAKmpb,mBAAmB7tP,GAEvBt7L,KAAKqpD,gBAAmE,IAAhDrpD,KAAKqpD,eAAiBC,GAAcw1X,QAGvD9+a,KAAK87a,cACX97a,KAAK87a,YAAc37a,WAAW,WAC1BJ,EAAMykX,gBAAgBlpL,IACvB,KALHt7L,KAAKwkX,gBAAgBlpL,KAUjCnpI,EAAQ92D,UAAU0oa,qBAAuB,SAAUxja,EAAMk2D,EAAgB6yX,GACrE,IAAI7gB,EACAp8W,GAAkBrsD,KAAKqsD,gBAAiBrsD,KAAKqsD,cAAc1+B,MAC/D,GAAIptB,aAAgB4mD,IAAQkF,GAAiBlG,GAAQ5lD,GAAO,CAGxD,IAAK,IAFDu2D,EAAQv2D,EAAKu2D,MACbi4H,GAAU,EACL5yL,EAAI,EAAGA,EAAI26D,EAAMr6D,OAAQN,IAC9Bssa,EAAczoa,KAAKi/G,WAAW1+G,EAAKwR,QAAS+kD,EAAM36D,GAAGmH,KACjDmzD,EAAiBsC,GAAeC,OAASvC,EAAiBsC,GAAemsV,UACrE1uV,GAAqBM,EAAM36D,GAAIs6D,KAC/BgyW,EAAYjxY,SAAW8xZ,EACvBv6P,GAAU,GAIlBA,GACA/uL,KAAK6pa,oBAAoBtpa,KAKrC4xD,EAAQ92D,UAAU6tb,uBAAyB,SAAU5tP,GACjC96L,SAASosB,eAAe0uK,EAAKt6L,QAAQsC,IAC9BsI,wBAMvB,IAAK,IAJD5K,EAEA01Z,EAAuBl2Z,SAASosB,eAAe0uK,EAAKt6L,QAAQsC,GAAK,iBACjEiuZ,EAAYj+W,GAAagoJ,EAAKt6L,QAAQsC,IACjCnH,EAAI,EAAGA,EAAI6D,KAAK4xD,cAAcn1D,OAAQN,KAC3C6E,EAAUhB,KAAK4xD,cAAcz1D,IACrBy/R,QAAQ,IAAIxuQ,GAAKpsB,EAAQgV,MAAOhV,EAAQ+U,SAChD/U,EAAQ2gZ,QAAQ3gZ,EAAQ2uC,aACxB3vC,KAAKswa,gBAAgBhf,cAActwZ,EAAS01Z,EAAsBnF,GAEtEvxZ,KAAKqpb,sBAAsB3yB,EAAsB12Z,KAAKswa,gBAAiB/e,IAG3Ep/V,EAAQ92D,UAAUgub,sBAAwB,SAAU3lD,EAAQ71W,EAAU0jY,EAAWlkZ,QAC3D,IAAdA,IAAwBA,GAAY,GACxC,IAAK,IAAIjP,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAK0C,KAAKgra,kBAAmB5sa,EAAKyE,EAAGpG,OAAQ2B,IAGtE,IAAK,IAFDgta,EAAUvoa,EAAGzE,GACbsrE,EAAQ1pE,KAAKi4Z,eAAe6F,SAAS99Z,KAAKgra,iBAAiBI,IACtDnna,EAAK,EAAGwG,EAAKnM,OAAOhB,KAAKosE,EAAMm/V,aAAc5ka,EAAKwG,EAAGhO,OAAQwH,IAAM,CACxE,IAAI1D,EAAOkK,EAAGxG,GACVjD,EAAUhB,KAAKs5D,UAAUoQ,EAAMm/V,YAAYtoa,IAAOwR,QAChD/R,KAAKs5D,UAAUoQ,EAAMm/V,YAAYtoa,IAAe,UAC7CP,KAAKs5D,UAAUoQ,EAAMm/V,YAAYtoa,IAAgB,WACtDstB,EAASyjY,cAActwZ,EAAS0iY,EAAQ6tB,GAAa1jY,EAAS6iY,WAAarjZ,EAAarN,KAAK8qD,SAASz9C,eAAYlS,KAMlIg3D,EAAQ92D,UAAUmhb,eAAiB,SAAU+I,GACzC,GAAIvlb,KAAKupb,eACL,IAAK,IAAIptb,EAAI,EAAGA,EAAI6D,KAAK6xD,WAAWp1D,OAAQN,IAAK,CAC7C,IAAI0jD,EAAY7/C,KAAK6xD,WAAW11D,GAChC6D,KAAKupb,eAAe/M,eAAe38X,EAAW7/C,MAC9C,IAAI0jY,EAAS1jY,KAAK6xD,WAAW11D,GAAG4V,QAC5ButX,EAAcoE,EAAOtpX,SAAS,GAC9B5d,EAAO8iY,EAAY9iY,KACvBqjD,EAAUyoW,kBAAkBzoW,EAAWy/U,GACnCA,EAAY9iY,OAASA,IACrBknY,EAAO9nG,QAAQ,IAAIxuQ,IACnBs2W,EAAOie,QAAQje,EAAO/zV,aACJ,QAAd3vC,KAAK+9B,MAAmBwnZ,GACxBvlb,KAAK6pa,oBAAoBhqX,MAO7CsS,EAAQ92D,UAAU2iX,UAAY,SAAUvkT,GACpCz5D,KAAKswa,gBAAgBtyD,UAAUh+W,KAAKkja,cAAezpW,IAGvDtH,EAAQ92D,UAAU+tb,YAAc,SAAU9tP,GACtC,IAAItlL,EACAD,EAGJ,GAFAC,EAAQslL,EAAKg5L,cAAgBh5L,EAAK+0O,aAAar6Z,MAC/CD,EAASulL,EAAKykN,eAAiBzkN,EAAK+0O,aAAat6Z,OAC/B,QAAdulL,EAAKv9J,KAAgB,CACX4uD,GAAeO,WAAWouG,EAAK+0O,cACrCmZ,UAAU,EAAG,EAAGxza,EAAOD,KAInCo8C,EAAQ92D,UAAUyra,mBAAqB,WACnC9ma,KAAK8qD,SAASurX,gBAAgBr2a,KAAKkja,cAAcl3Z,WAAYhM,KAAKkja,cAAc/2Z,WAChFy+C,GAAY5qD,OAGhBmyD,EAAQ92D,UAAUgtQ,UAAY,SAAUx8P,EAASI,GAC7C,IAAIwO,EAAYja,SAASosB,eAAe5sB,KAAKgB,QAAQsC,GAAK,WACtDmX,IACAA,EAAUzO,WAAaH,EACvB4O,EAAUtO,UAAYF,IAI9BkmD,EAAQ92D,UAAUghM,QAAU,SAAUrmL,EAAOD,GACzC,GAAI/V,KAAKqwa,eAAiBrwa,KAAKgva,cAAe,CAC1C,IAAI96Z,EAAW61C,GAAa/pD,MAC5BgW,GAAS9B,EAAS8B,MAClBD,GAAU7B,EAAS6B,OACnB,IAAI2gB,EAAS12B,KAAKqoa,cAAc+N,gBAChC1/Y,EAAO3pB,GAAK/M,KAAK8qD,SAASY,YAC1Bh1B,EAAO1pB,GAAKhN,KAAK8qD,SAASY,YAC1Bh1B,EAAO1gB,OAAShW,KAAK8qD,SAASY,YAC9Bh1B,EAAO3gB,QAAU/V,KAAK8qD,SAASY,YAC/B,IAAIpuB,EAAuB,QAAdt9B,KAAK+9B,KAAiB,EAAI,IACnCsyY,EAA6B,QAAdrwa,KAAK+9B,KACpB0U,GAAmBzyC,KAAKgB,QAAQsC,IAAMtD,KAAKqwa,aAC/CA,EAAa7sa,aAAa,SAAU85B,EAAStnB,GAAO9I,YACpDmja,EAAa7sa,aAAa,UAAW85B,EAASvnB,GAAQ7I,YACtD,IAAI46I,GAAS9xI,MAASA,EAAM9I,WAAY6I,OAAUA,EAAO7I,YACzDlN,KAAKokb,gBAAgB1/a,MAAMsR,MAAQA,EAAQ,KAC3ChW,KAAKokb,gBAAgB1/a,MAAMqR,OAASA,EAAS,KAC7C69B,GAAgBX,GAAkBjzC,KAAKgB,QAAQsC,IAAKwkJ,GACpDl0G,GAAgBZ,GAAgBhzC,KAAKgB,QAAQsC,IAAKwkJ,GAClD,IAAI2hS,EAAa52Y,GAAmB7yC,KAAKgB,QAAQsC,IACjDswC,GAAgB61Y,EAAY3hS,GAC5B2hS,EAAWhpb,WAAWiE,MAAMsR,MAAQA,EAAQ,KAC5Cyza,EAAWhpb,WAAWiE,MAAMqR,OAASA,EAAS,KAC9C,IAAI2za,EAAYx2Y,GAAgBlzC,KAAKgB,QAAQsC,IAC7CswC,GAAgB81Y,EAAW5hS,GAC3B9nJ,KAAKswa,gBAAgBtb,WAAWh1Z,KAAK+xD,aAAc23X,EAAW1pb,KAAK8qD,SAASz9C,UAAWrN,KAAKmqD,cAAenqD,KAAKyqD,OAAQzqD,KAAK0qD,QAC7H9W,GAAgBT,GAAsBnzC,KAAKgB,QAAQsC,IAAKwkJ,GACxD9nJ,KAAKuxZ,UAAU7sZ,MAAMsR,MAAQA,EAAQ,KACrChW,KAAKuxZ,UAAU7sZ,MAAMqR,OAASA,EAAS,KACvC/V,KAAKswa,gBAAgBla,gBAAgBp2Z,KAAK8qD,SAASz9C,UAAyB,QAAdrN,KAAK+9B,MACjD,QAAd/9B,KAAK+9B,MACL/9B,KAAK+qa,sBAET/qa,KAAK65Z,iBACL75Z,KAAK6+a,iBAAiBnoZ,KAO9By7B,EAAQ92D,UAAUsub,iBAAmB,WACjC,GAAI3pb,KAAKqwa,aAAc,CACnB,IAAIviX,EAAO1a,GAAmBpzC,KAAKgB,QAAQsC,IAC3C,GAAIwqD,GAAQA,EAAKv8C,WAEb,IAAK,IADDkpB,EAAWqzB,EAAKv8C,WAAW9U,OACtBN,EAAI,EAAGA,EAAIs+B,EAAUt+B,IAC1B2xD,EAAKxoD,YAAYwoD,EAAKv8C,WAAW,MASjD4gD,EAAQ92D,UAAUwjb,iBAAmB,SAAUnoZ,GAC3C12B,KAAK2pb,mBACL,IAAIC,EAAkBx2Y,GAAmBpzC,KAAKgB,QAAQsC,IACtD,GAAIsmb,EAAiB,CACjB,IAAIztb,EAAI,EACRu6B,EAAS12B,KAAK8qD,SAASsrX,eAAc,GACrC,IAAIrpa,GAAK/M,KAAK8qD,SAASz9C,UAAUu6U,GAAKlxT,EAAO3pB,GAAK/M,KAAK8qD,SAASY,YAC5D1+C,GAAKhN,KAAK8qD,SAASz9C,UAAUs6U,GAAKjxT,EAAO1pB,GAAKhN,KAAK8qD,SAASY,YAC5D31C,EAAS2gB,EAAO3gB,OAAS/V,KAAK8qD,SAASY,YACvC11C,EAAQ0gB,EAAO1gB,MAAQhW,KAAK8qD,SAASY,YACzC8kW,GAAgBwF,yBAAyBh2Z,KAAKuxD,aAAa9hC,WAAYzvB,KAAKgB,QAAS+L,EAAGC,EAAGgJ,EAAOD,GAClG,IAAI/C,GACA1P,GAAIsmb,EAAgBtmb,GAAK,OAAQyJ,EAAGA,EACpCC,EAAGA,EACH+I,OAAQA,EACRC,MAAOA,EAAOuL,MAAO,EAAGuc,OAAQ,GAAI+T,YAAa,EACjDjU,KAAM59B,KAAKuxD,aAAa9hC,WAAW+G,MAAO/oB,QAAS,EACnD+hC,OAAQ,EAAGC,OAAQ,EAAGjY,SAAS,EAAMsa,UAAW,KAGpD,GADA9xC,KAAKswa,gBAAgBva,SAAS6zB,EAAiB52a,GAC3ChT,KAAKuxD,aAAas4X,eAAgB,CAClC,IAAI1iZ,EAAannC,KAAK8qD,SAASmsX,aAAavgZ,GAC5C,IAAKv6B,EAAI,EAAGA,EAAIgrC,EAAW1qC,OAAQN,IAC/B6D,KAAKswa,gBAAgB9iV,SAASo8V,GAC1BroT,MAAO,uBACP3jG,KAAM,OAAQE,OAAQ,UAAW+T,YAAa,EAAGC,UAAW,QAC5DrkC,QAAS,EAAGV,EAAG,EAAGC,EAAG,EAAGgJ,MAAO,EAAGD,OAAQ,EAAGwL,MAAO,EAAGiuB,OAAQ,EAAGC,OAAQ,EAAGjY,SAAS,EACtF6tB,YACIt4C,GAAIo6B,EAAWhrC,GAAG6+B,GAAKh7B,KAAK8qD,SAASz9C,UAAUu6U,IAAM5nV,KAAK8qD,SAASY,YACnE1+C,GAAIm6B,EAAWhrC,GAAG8+B,GAAKj7B,KAAK8qD,SAASz9C,UAAUs6U,IAAM3nV,KAAK8qD,SAASY,aAEvElM,UACIzyC,GAAIo6B,EAAWhrC,GAAG++B,GAAKl7B,KAAK8qD,SAASz9C,UAAUu6U,IAAM5nV,KAAK8qD,SAASY,YACnE1+C,GAAIm6B,EAAWhrC,GAAGg/B,GAAKn7B,KAAK8qD,SAASz9C,UAAUs6U,IAAM3nV,KAAK8qD,SAASY,aACpEpoD,GAAI6jC,EAAWhrC,GAAG8+B,KAAOkM,EAAWhrC,GAAGg/B,GAAK,kBAAoB,qBAMvFg3B,EAAQ92D,UAAUqhb,iBAAmB,WACjC,IAAI3uZ,EAAO,EAC2B,aAAlC/tB,KAAKuxD,aAAan4B,YACdp5B,KAAKuxD,aAAav7C,MAAQhW,KAAKuxD,aAAax7C,SAC5CgY,EAAO/tB,KAAKuxD,aAAax7C,OACzB/V,KAAKuxD,aAAax7C,OAAS/V,KAAKuxD,aAAav7C,MAC7ChW,KAAKuxD,aAAav7C,MAAQ+X,GAI1B/tB,KAAKuxD,aAAax7C,OAAS/V,KAAKuxD,aAAav7C,QAC7C+X,EAAO/tB,KAAKuxD,aAAav7C,MACzBhW,KAAKuxD,aAAav7C,MAAQhW,KAAKuxD,aAAax7C,OAC5C/V,KAAKuxD,aAAax7C,OAASgY,IAOvCokC,EAAQ92D,UAAUyub,YAAc,SAAUC,EAAUzmb,GAChD,GAAIymb,EACIA,IACA/pb,KAAKiyD,MAAMztD,KAAKulb,EAASzmb,IACzBtD,KAAKiyD,MAAM83X,EAASzmb,IAAMymb,EAC1BA,EAASC,eAAeD,GACxBA,EAASzZ,gBAAgB3f,YACzBo5B,EAASzN,WAAWyN,GACpB/pb,KAAKiqb,YAAYF,QAGpB,CACD,IAAK,IAAI5tb,EAAI,EAAGA,EAAI6D,KAAKiyD,MAAMx1D,OAAQN,IAC/B6D,KAAKiyD,MAAM91D,KAAOmH,IAClBymb,EAAY/pb,KAAKiyD,MAAM3uD,IAG/BtD,KAAKiyD,MAAM3uD,QAAMnI,EACjB,IAAI8W,EAAQjS,KAAKiyD,MAAM1zD,QAAQ+E,GAC/BtD,KAAKiyD,MAAM5pC,OAAOpW,EAAO,KAGjCkgD,EAAQ92D,UAAU4ub,YAAc,SAAUF,GACtC,GAAIA,EAAU,CACV,IAAIl8Z,EAAW,IAAI2iY,GAAgBu5B,EAASzmb,GAAI,IAAIwqB,IAAe,GAC/D+O,EAAIr8B,SAASosB,eAAem9Z,EAAS/ob,QAAQsC,GAAK,iBAClDiuZ,EAAYj+W,GAAay2Y,EAAS/ob,QAAQsC,IAC9CtD,KAAKqpb,sBAAsBxsZ,EAAGktZ,EAASzZ,iBAAmBziZ,EAAU0jY,KAG5Ep/V,EAAQ92D,UAAU6ub,uBAAyB,SAAU3pb,EAAM2ua,GAGvD,IAAK,IADDzya,EAAS8D,EAAK9D,OACTN,EAAI,EAAGA,EAAIM,EAAQN,IAAK,CAC7B,IAAIY,EAAMwD,EAAKpE,GACXgub,GAAa,EACbC,GAAa,EACbC,EAAmBnb,EAAc94W,kBACjCr5D,aAAeoqD,IACfgjY,EAAiC,SAAnBptb,EAAI4wB,MAAMjnB,MAAwC,aAApB3J,EAAI4wB,MAAMA,QACL,IAA5C5wB,EAAI4wB,MAAMu/X,SAASD,WAAWI,WACX,mBAApBtwZ,EAAI4wB,MAAMA,MACdy8Z,EAAiC,SAAnBrtb,EAAI4wB,MAAMjnB,MAAuC,mBAApB3J,EAAI4wB,MAAMA,MAChDm5B,GAAU/pD,IAAUstb,EAAmB/zX,GAAkBvP,SAAWojY,IACrEE,IAAuC/zX,GAAkBvP,QAExDQ,GAAUxqD,EAAK,cAAkBstb,EAAmB/zX,GAAkB7O,kBAAoB2iY,IAC3FC,IAAuC/zX,GAAkB7O,iBAExDF,GAAUxqD,EAAK,cAAkBstb,EAAmB/zX,GAAkBtO,kBAAoBoiY,IAC3FC,IAAuC/zX,GAAkBtO,iBAExDT,GAAUxqD,EAAK,SAAastb,EAAmB/zX,GAAkB5O,aAAe0iY,IACjFC,IAAuC/zX,GAAkB5O,YAExDH,GAAUxqD,EAAK,SAAastb,EAAmB/zX,GAAkBvO,aAAeqiY,IACjFC,IAAuC/zX,GAAkBvO,YAExDR,GAAUxqD,EAAK,UAAcstb,EAAmB/zX,GAAkBzO,cAAgBuiY,IACnFC,IAAuC/zX,GAAkBzO,aAExDN,GAAUxqD,EAAK,UAAcstb,EAAmB/zX,GAAkB1O,cAAgBwiY,IACnFC,IAAuC/zX,GAAkB1O,aAExDL,GAAUxqD,EAAK,cAAkBstb,EAAmB/zX,GAAkB3O,kBAAoByiY,IAC3FC,IAAuC/zX,GAAkB3O,iBAExDJ,GAAUxqD,EAAK,cAAkBstb,EAAmB/zX,GAAkBxO,kBAAoBsiY,IAC3FC,IAAuC/zX,GAAkBxO,mBAI7DuiY,GAAsC/zX,GAAkB+0V,QACpD7kW,GAAiBzpD,GACjBstb,GAAsC/zX,GAAkBu8V,gBAGxDw3B,IAAuC/zX,GAAkBu8V,gBAEzDnsW,GAAiB3pD,GACjBstb,GAAsC/zX,GAAkBw8V,gBAGxDu3B,IAAuC/zX,GAAkBw8V,iBAGjEoc,EAAc94W,kBAAoBi0X,IAI1Cl4X,EAAQ92D,UAAU03X,eAAiB,SAAUs7C,GACzC,IAAIvhZ,EAAO,IAAIM,GACX8hZ,EAAgBlva,KAAKsyD,cACC48W,EAAcnpX,YAExC,GADA/lD,KAAKyxa,qBACDzxa,KAAKi4Z,eAAergW,eAAgB,CAWpC,GAVmC,IAA/Bs3W,EAAcp9W,MAAMr1D,QAAoD,IAApCyya,EAAcr9W,WAAWp1D,SAC7Dyya,EAAcriY,YAAcqiY,EAAcp9W,MAAM,GAAGjlB,YACnDqiY,EAAcviY,MAAQuiY,EAAcp9W,MAAM,GAAGnlB,OAEjDuiY,EAAcn9Z,QAAQ6pR,QAAQ9uQ,GAC9BoiZ,EAAcn9Z,QAAQ4vY,QAAQutB,EAAcn9Z,QAAQ49B,aACpDu/X,EAAcl5Z,MAAQk5Z,EAAcn9Z,QAAQ26B,WAAW12B,MACvDk5Z,EAAcn5Z,OAASm5Z,EAAcn9Z,QAAQ26B,WAAW32B,OACxDm5Z,EAAcrja,QAAUqja,EAAcn9Z,QAAQlG,QAC9Cqja,EAAcjja,QAAUija,EAAcn9Z,QAAQ9F,QACZ,IAA9Bija,EAAcriY,YAAmB,CACjC,IAAK,IAAIzuC,EAAK,EAAGyE,EAAKqsa,EAAcp9W,MAAO1zD,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC7D,IAAIrB,EAAM8F,EAAGzE,GACbrB,EAAI8O,QAAU9O,EAAIgV,QAAQlG,QAC1B9O,EAAIkP,QAAUlP,EAAIgV,QAAQ9F,QAE9B,IAAK,IAAIhI,EAAK,EAAGwG,EAAKyka,EAAcr9W,WAAY5tD,EAAKwG,EAAGhO,OAAQwH,IACjDwG,EAAGxG,GAITjE,KAAKqoa,cAAc+N,gBAAhC,IACI7iD,OAAkB,EAKtB,GAJAA,EAAkBzgV,GAAmB9yC,KAAKgB,QAAQsC,IAClD4ra,EAAc94W,kBAAoBE,GAAkB+0V,QACpDrrZ,KAAKkqb,uBAAuBhb,EAAcp9W,MAAOo9W,GACjDlva,KAAKkqb,uBAAuBhb,EAAcr9W,WAAYq9W,GAClDA,EAAcp9W,MAAMr1D,OAASyya,EAAcr9W,WAAWp1D,SAAW,GACjE,GAAIyya,EAAcp9W,MAAM,aAAc3K,GAClCnnD,KAAKswa,gBAAgBre,mBAAmBid,EAAcp9W,MAAM,GAAG//C,QAASwhX,EAAiB27C,EAAc94W,kBAAmBp2D,KAAK8qD,SAASY,YAAawjX,EAAcnpX,YAAa/lD,KAAK8qD,SAASz9C,eAAWlS,EAAWgrD,GAAQ+oX,EAAcp9W,MAAM,UAE/O,GAAIo9W,EAAcr9W,WAAW,aAAc/L,GAAW,CACvD,IAAIjG,EAAYqvX,EAAcr9W,WAAW,GACzC7xD,KAAKswa,gBAAgB7d,qBAAqB5yW,EAAW0zU,EAAiB27C,EAAc94W,kBAAmB84W,EAAcnpX,YAAa/lD,KAAK8qD,SAASz9C,eAAuClS,IAA5B0kD,EAAU7I,mBAAyD77C,IAA5B0kD,EAAUtI,iBAA8Bv3C,KAAKs4D,6BAA8B1R,GAAoB/G,WAIrS7/C,KAAKswa,gBAAgBre,mBAAmBid,EAAcn9Z,QAASwhX,EAAiB27C,EAAc94W,kBAAmBp2D,KAAK8qD,SAASY,YAAawjX,EAAcnpX,YAAa/lD,KAAK8qD,SAASz9C,eAAWlS,EAAWgrD,GAAQ+oX,IAEvNlva,KAAKswa,gBAAgBhd,kBAAkB4b,EAAe37C,EAAiBvzX,KAAK8qD,SAASz9C,aAI7F8kD,EAAQ92D,UAAUw+Z,eAAiB,WAClB75Z,KAAKqoa,cAAc+N,gBAAhC,IACItpZ,EAAO,IAAIM,GACX8hZ,EAAgBlva,KAAKsyD,cACrB4D,EAAsBg5W,EAAcnpX,YAKxC,GAJM/lD,KAAKqpD,eAAiBC,GAAcC,YAAmD,IAApCvpD,KAAKsyD,cAAcR,MAAMr1D,SAC9EuD,KAAKsyD,cAAczlB,YAAc7sC,KAAKsyD,cAAcR,MAAM,GAAGjlB,YAC7D7sC,KAAKsyD,cAAcvgD,QAAQ86B,YAAc7sC,KAAKsyD,cAAcR,MAAM,GAAGjlB,kBAE9C1xC,IAAvB6E,KAAKsyD,gBACLtyD,KAAKyxa,qBACyB,OAA1BvC,EAAcn9Z,SAAoBm9Z,EAAcn9Z,QAAQqI,SAAS3d,QAAQ,CAGzE,GAFAyya,EAAcn9Z,QAAQ6pR,QAAQ9uQ,GAC9BoiZ,EAAcn9Z,QAAQ4vY,QAAQutB,EAAcn9Z,QAAQ49B,aAClB,IAA9Bu/X,EAAcriY,aAAqBqiY,EAAcriY,cAAgBqiY,EAAcn9Z,QAAQ+wY,gBACvF,IAAK,IAAI1kZ,EAAK,EAAGyE,EAAKqsa,EAAcp9W,MAAO1zD,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC7D,IAAIrB,EAAM8F,EAAGzE,GACbrB,EAAI8O,QAAU9O,EAAIgV,QAAQlG,QAC1B9O,EAAIkP,QAAUlP,EAAIgV,QAAQ9F,QAGlCija,EAAcl5Z,MAAQk5Z,EAAcn9Z,QAAQ26B,WAAW12B,MACvDk5Z,EAAcn5Z,OAASm5Z,EAAcn9Z,QAAQ26B,WAAW32B,OACxDm5Z,EAAcrja,QAAUqja,EAAcn9Z,QAAQlG,QAC9Cqja,EAAcjja,QAAUija,EAAcn9Z,QAAQ9F,QAC9C,IAAIsnX,OAAkB,EACtBA,EAAkBzgV,GAAmB9yC,KAAKgB,QAAQsC,IAClD,IAAIiga,EAAkBvja,KAAKq8a,aAAa9Y,kBAOxC,GANA2L,EAAc94W,kBAAoBE,GAAkB+0V,QACpDrrZ,KAAKkqb,uBAAuBhb,EAAcp9W,MAAOo9W,GACjDlva,KAAKkqb,uBAAuBhb,EAAcr9W,WAAYq9W,GAClDlva,KAAKsyD,cAAcvM,YAAcsQ,GAAoBi1V,YACrDtrZ,KAAKswa,gBAAgBhd,kBAAkB4b,EAAe37C,EAAiBvzX,KAAK8qD,SAASz9C,WAErF6ha,EAAcp9W,MAAMr1D,OAASyya,EAAcr9W,WAAWp1D,SAAW,EACjE,GAAIyya,EAAcr9W,WAAW,aAAc/L,GAAW,CAClD,IAAIjG,EAAYqvX,EAAcr9W,WAAW,GACzC7xD,KAAKswa,gBAAgB7d,qBAAqB5yW,EAAW0zU,EAAiB27C,EAAc94W,kBAAmBF,EAAqBl2D,KAAK8qD,SAASz9C,eAAuClS,IAA5B0kD,EAAU7I,mBAAyD77C,IAA5B0kD,EAAUtI,iBAA8Bv3C,KAAKs4D,6BAA8B1R,GAAoB/G,UAEtRqvX,EAAcp9W,MAAM,aAAc3K,IACvCnnD,KAAKswa,gBAAgBre,mBAAmBid,EAAcp9W,MAAM,GAAG//C,QAASwhX,EAAiB27C,EAAc94W,kBAAmBp2D,KAAK8qD,SAASY,YAAawjX,EAAcnpX,YAAa/lD,KAAK8qD,SAASz9C,UAAWk2Z,EAAiBp9W,GAAQ+oX,EAAcp9W,MAAM,UAI1P9xD,KAAKswa,gBAAgBre,mBAAmBid,EAAcn9Z,QAASwhX,EAAiB27C,EAAc94W,kBAAmBp2D,KAAK8qD,SAASY,YAAawjX,EAAcnpX,YAAa/lD,KAAK8qD,SAASz9C,UAAWk2Z,EAAiBp9W,GAAQ+oX,MAMzO/8W,EAAQ92D,UAAUy2Z,uBAAyB,SAAU/kZ,EAAGC,EAAGgJ,EAAOD,GAC9D/V,KAAKyxa,qBACLzxa,KAAKswa,gBAAgBxe,uBAAuB/kZ,EAAGC,EAAGgJ,EAAOD,EAAQ/V,KAAK+xZ,aAAc/xZ,KAAK8qD,SAASz9C,YAKtG8kD,EAAQ92D,UAAU22Z,kBAAoB,SAAUhxZ,GAC5C,IAAIspb,EAAaz3Y,GAAmB7yC,KAAKgB,QAAQsC,IACjDtD,KAAKswa,gBAAgBte,kBAAkBhxZ,EAASspb,EAAYtqb,KAAK8qD,SAASz9C,YAK9E8kD,EAAQ92D,UAAUu6a,iBAAmB,WACjC,IAAI0U,EAAaz3Y,GAAmB7yC,KAAKgB,QAAQsC,IAC7Cinb,EAAcD,EAAW19Z,eAAe09Z,EAAWhnb,GAAK,gBACxDinb,GACAA,EAAY9pb,WAAW6E,YAAYilb,IAI3Cp4X,EAAQ92D,UAAU81a,mBAAqB,SAAU7+W,GAC7C,IAAK,IAAIn2D,EAAI,EAAGA,EAAI6D,KAAK8xD,MAAMr1D,OAAQN,IAAK,CACxC,IAAIoE,EAAOP,KAAK8xD,MAAM31D,GACtBm2D,EAAc9tD,KAAKjE,GAEvB,IAASpE,EAAI,EAAGA,EAAI6D,KAAK6xD,WAAWp1D,OAAQN,IAAK,CAC7C,IAAIk8D,EAAOr4D,KAAK6xD,WAAW11D,GAC3Bm2D,EAAc9tD,KAAK6zD,GAEvB,OAAO/F,GAGXH,EAAQ92D,UAAUo2a,mBAAqB,WACnC,IAAI6Y,EAAaz3Y,GAAmB7yC,KAAKgB,QAAQsC,IAE7Cknb,GADcF,EAAW19Z,eAAe09Z,EAAWhnb,GAAK,gBACxCgnb,EAAW19Z,eAAe5sB,KAAK+xZ,aAAazuZ,GAAK,qBACjEknb,GACAA,EAAc/pb,WAAW6E,YAAYklb,GAEzCxqb,KAAK41a,mBAGL,IAAK,IADDv1a,EADAkR,EAAauhC,GAAmB9yC,KAAKgB,QAAQsC,IAAIiO,WAE5CpV,EAAIoV,EAAW9U,OAAQN,EAAI,EAAGA,KACnCkE,EAAQkR,EAAWpV,EAAI,IACjBsE,WAAW6E,YAAYjF,IAIrC8xD,EAAQ92D,UAAU4jH,WAAa,SAAUntD,EAAOxuD,GAC5C,IAAIyO,EACJzO,EAAKwuD,EAAMxuD,GAAK,IAAMA,EAEtB,IAAK,IADDmX,EAAYq3C,aAAiB+xV,GAAS/xV,EAAQ9xD,KAAKyqb,iBAAiBzqb,KAAKs5D,UAAUxH,EAAMxuD,KACpFnH,EAAI,EAAGA,EAAIse,EAAUL,SAAS3d,OAAQN,IACvCmH,IAAOmX,EAAUL,SAASje,GAAGmH,KAC7ByO,EAAU0I,EAAUL,SAASje,IAGrC,OAAO4V,GAEXogD,EAAQ92D,UAAUksb,kBAAoB,SAAUhnb,EAAMs/C,EAAWtjD,GAC7D,GAAwB,SAApBgE,EAAKotB,MAAMjnB,MAAmBnG,EAAKwR,QAAQqI,SAAS,aAAcypY,GAAQ,CAC1E,GAAyB,aAArBtjZ,EAAKotB,MAAMA,MAAsB,CACjC,GAAIpxB,GAAkD,gBAAxCgE,EAAKotB,MAAMu/X,SAASD,WAAWvmZ,MACtCm5C,EAAUqZ,aAAc,CAC3B,IAAIgxW,EAASrqX,EAAUqZ,aACnB85C,EAAWzyG,EAAKwR,QAAQqI,SAAS,GAAGA,SAAS,GAAGA,SAAS,GAC7D,GAAI44F,EAAS54F,SACT,IAAK,IAAIhc,EAAK,EAAGyE,EAAKmwG,EAAS54F,SAAUhc,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC3D,IAAIiC,EAAQwC,EAAGzE,GACf,GAAIiC,EAAMm3B,SAAWn3B,EAAMiD,KAAO/C,EAAK+C,GAAK,IAAM4ma,EAC9C,OAAO7pa,EAAM+Z,SAAS,IAKtC,OAAO7Z,EAAKwR,QAAQqI,SAAS,GAAGA,SAAS,GAAGA,SAAS,GAEzD,OAAO7Z,EAAKwR,QAAQqI,SAAS,GAAGA,SAAS,GAE7C,OAAKpa,KAAK0qb,eAAenqb,EAAKwR,QAAQqI,SAAS,KACtC7Z,EAAK6Z,SAIP7Z,EAAKwR,QAHGxR,EAAKwR,QAAQqI,SAAS,IAKzC+3C,EAAQ92D,UAAUqvb,eAAiB,SAAUnqb,GACzC,OAAOA,EAAKk8B,SAAgC,IAArBl8B,EAAKk8B,OAAOjwB,MAAkC,IAApBjM,EAAKk8B,OAAO/vB,KAAmC,IAAtBnM,EAAKk8B,OAAOhwB,OAAsC,IAAvBlM,EAAKk8B,OAAO9vB,SAErHwlD,EAAQ92D,UAAUknb,aAAe,WAC7Bvib,KAAKkka,SAAQ,IAEjB/xW,EAAQ92D,UAAU+sb,eAAiB,WAC/Bpob,KAAKkka,WAKT/xW,EAAQ92D,UAAU6oa,QAAU,SAAUxpS,GAClC,GAAI16H,KAAKqpD,eAAiBC,GAAc05W,SAAU,CAC9C,IAAIsf,EAAW9hb,SAASosB,eAAe5sB,KAAKgB,QAAQsC,GAAK,YACrDmpB,EAAO61Z,EAAStlb,MACpBuI,GAAahB,OAAO+9a,EAAU,QAAStib,KAAKq8a,aAAalV,aACzD5ha,GAAahB,OAAO+9a,EAAU,WAAYtib,KAAKuib,cAC/C,IAAIvhb,EAAUR,SAASosB,eAAe5sB,KAAKgB,QAAQsC,GAAK,mBACpDrD,GAAS+I,SAAUhI,EAAQ6a,YAAavU,SAAUmlB,EAAMoM,QAAQ,GAChEmpZ,GAAiB,EACjBzhb,OAAO,EACXS,EAAQP,WAAW6E,YAAYtE,GAC/B,IAAIqma,OAAc,EAclB,GAbIrna,KAAK+sZ,aACLxsZ,EAAOP,KAAK+sZ,WAAW49B,qBAAqB3qb,KAAK0na,YAAa1na,MAC9Dqna,EAAcrna,KAAK+sZ,WAAWk1B,yBAAyB1hb,EAAMP,KAAK0na,YAAYpka,KAC9E0+a,IAAiBzhb,IAETS,EAAQ6a,cAAgB4Q,IACxBzsB,KAAKwpJ,aAAas3P,GAAa8pC,SAAU3qb,GACpCA,EAAK44B,QACN74B,KAAK+sZ,WAAW89B,4BAA4Btqb,EAAMP,KAAK0na,YAAaj7Y,EAAMzsB,SAKrFgib,EAAgB,CACjBzhb,EAAOP,KAAKs5D,UAAUt5D,KAAK0na,YAAYnuW,UACvC,IAAIuxX,EAAa9qb,KAAKq8a,aAAa1U,cAAcpna,GAAM,GAClDuqb,GAAc9pb,EAAQ6a,cAAgB4Q,GACvCzsB,KAAKwpJ,aAAas3P,GAAa8pC,SAAU3qb,GAExCona,IACDA,EAAcrna,KAAKi/G,WAAW1+G,EAAKwR,QAAS/R,KAAK0na,YAAYpka,KAEjE,IAAIqrD,EAAa+H,GAAen2D,EAAMP,KAAK0na,YAAYpka,IAMvD,GALIqrD,EAAWv0B,UAAY3N,GAASxsB,EAAK44B,SACrC81B,EAAWv0B,QAAU3N,EACrBzsB,KAAK4rD,WACL5rD,KAAK65Z,kBAELixB,IACA9qb,KAAKoua,uBAAuB7ta,GAC5BP,KAAKmua,gBAAgB5ta,UACdP,KAAKs5D,UAAUt5D,KAAK0na,YAAYnuW,UAC1B,KAAT9sC,GAAa,CACbzsB,KAAKu5Z,iBACL,IAAI5pW,EAAe5iB,GAAYxsC,GAC/BA,EAAOP,KAAKoE,IAAIurD,GAChB3vD,KAAK6pa,oBAAoBtpa,GACzBP,KAAKi4Z,eAAexyZ,OAAOzF,KAAKs5D,UAAU/4D,EAAK+C,MAI3D+ja,EAAY7vY,SAAU,EACtBx3B,KAAK6pa,oBAAoBtpa,GACzBP,KAAKqpD,eAAiBrpD,KAAKqpD,gBAAkBC,GAAc05W,SACvDhja,KAAK0na,YAAYmU,SACjB77a,KAAK+7Z,iBAET/7Z,KAAK0na,aAAgBpka,GAAI,GAAIi2D,SAAU,GAAIsiX,SAAS,KAI5D1pX,EAAQ92D,UAAU8hb,aAAe,WAC7B,UAAKn9a,KAAKqpD,eAAiBC,GAAcw1X,SAAc9+a,KAAKqpD,eAAiBC,GAAcC,YACpFvpD,KAAKqpD,eAAiBC,GAAcijX,UAAiBvsa,KAAKqpD,eAAiBC,GAAc82X,eAOpGjuX,EAAQ92D,UAAU+hb,aAAe,SAAU3wV,EAASC,GAChD,SAAID,EAAQ56B,YAAc66B,EAAQ76B,YAAc46B,EAAQ36B,OAAS46B,EAAQ76B,YAClE46B,EAAQl7B,cAAgBm7B,EAAQn7B,cAAgBk7B,EAAQn7B,iBAAmBo7B,EAAQp7B,kBAK9Fa,EAAQ92D,UAAUgib,oBAAsB,SAAUlnX,GAC9C,IAAI40X,IAAW50X,EACXn2D,KAAKqpD,eAAiBC,GAAcijX,YAAcwe,GAAa50X,IAAW7M,GAAcijX,YACxFvsa,KAAKqpD,eAAiBrpD,KAAKqpD,gBAAkBC,GAAcijX,UAE3Dvsa,KAAKqpD,eAAiBC,GAAc82X,gBAAkB2K,GAAY50X,IAAW7M,GAAc82X,gBAC3Fpgb,KAAKqpD,eAAiBrpD,KAAKqpD,gBAAkBC,GAAc82X,eAInEjuX,EAAQ92D,UAAUq8T,WAAa,SAAUn3T,GACrCP,KAAKoua,uBAAuB7ta,GAC5BP,KAAKmua,gBAAgBnua,KAAKs5D,UAAU/4D,EAAK+C,YAClCtD,KAAKs5D,UAAU/4D,EAAK+C,IACvB/C,EAAK6Z,iBACEpa,KAAK47a,WAAWr7a,EAAK+C,IAEhCtD,KAAK8xD,MAAMzpC,OAAOroB,KAAK8xD,MAAMvzD,QAAQgC,GAAO,IAGhD4xD,EAAQ92D,UAAUumb,YAAc,SAAUrhb,GACtC,IACIyra,KACAzra,EAAK6Z,WACL4xZ,EAAWhsa,KAAKi4Z,eAAe9rD,YAAY5rW,OAE/C,IAAK,IAAInC,EAAK,EAAG4sb,EAAahf,EAAU5ta,EAAK4sb,EAAWvub,OAAQ2B,IAAM,CAClE,IAAI0zD,EAAQk5X,EAAW5sb,GACnB4B,KAAKs5D,UAAUxH,EAAMxuD,KACrBtD,KAAKuE,OAAOutD,KAOxBK,EAAQ92D,UAAU4vb,aAAe,SAAU53X,EAAcQ,EAAW0mP,GAChE,KAAMv6S,KAAKqpD,eAAiBC,GAAcC,YAAa,CACnD,IAAIiF,EAAQ6E,EAAathD,QAAQqI,SAAS,GAAGsc,OAE7C,IAD+B12B,KAAKi4Z,eAAewG,8BAAyBtja,OAAWA,EAAWqzD,GAE9F,GAAI6E,aAAwBlM,GAAM,CAE9B,IAAK,IADD+jY,EAAUr3X,EACLz1D,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKi9S,GAAcn8S,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAElE,OADIf,EAAMwF,EAAGzE,IAET,IAAK,QACDi1D,EAAar9C,MAAQk1a,EAAQl1a,MAC7B,MACJ,IAAK,SACDq9C,EAAat9C,OAASm1a,EAAQn1a,OAC9B,MACJ,IAAK,UACDs9C,EAAaxnD,QAAUq/a,EAAQr/a,QAC/B,MACJ,IAAK,UACDwnD,EAAapnD,QAAUi/a,EAAQj/a,QAC/B,MACJ,IAAK,cACDonD,EAAaxmB,YAAcq+Y,EAAQr+Y,aAI/C7sC,KAAK0xa,mBAAmBr+W,EAAcknP,EAAa1mP,OAElD,CACD,IAAK,IAAI5vD,EAAK,EAAGwG,EAAKnM,OAAOhB,KAAKi9S,GAAct2S,EAAKwG,EAAGhO,OAAQwH,IAAM,CAClE,IAAI5G,EAAMoN,EAAGxG,GACTknb,EAAet3X,EACfu3X,EAAoB/3X,EAAatc,YACjCs0Y,EAAoBh4X,EAAatU,YACrC,OAAQ1hD,GACJ,IAAK,cACD+tb,EAAkBr+a,EAAIo+a,EAAap0Y,YAAYhqC,GAAKq+a,EAAkBr+a,EACtEq+a,EAAkBp+a,EAAIm+a,EAAap0Y,YAAY/pC,GAAKo+a,EAAkBp+a,EACtE,MACJ,IAAK,cACDq+a,EAAkBt+a,EAAIo+a,EAAapsY,YAAYhyC,GAAKs+a,EAAkBt+a,EACtEs+a,EAAkBr+a,EAAIm+a,EAAapsY,YAAY/xC,GAAKq+a,EAAkBr+a,GAGlFhN,KAAK4pa,wBAAwBv2W,EAAcknP,EAAa1mP,MAKxE1B,EAAQ92D,UAAUiwb,yBAA2B,SAAUj4X,EAAcQ,EAAWtzD,EAAM8+C,GAUlF,YATmBlkD,IAAfoF,EAAKmE,OAAmD,SAA5B2uD,EAAa1lC,MAAMjnB,OAC/CisD,GAAYpyD,EAAKmE,MAAO2uD,EAAathD,QAAQqI,SAAS,IACtDilC,GAAS,QAEYlkD,IAArBoF,EAAKwlD,cACL/lD,KAAKkqb,uBAAuBlqb,KAAKsyD,cAAcR,MAAO9xD,KAAKsyD,eAC3DtyD,KAAK65Z,iBACLx6W,GAAS,GAENA,GAEX8S,EAAQ92D,UAAUkwb,uBAAyB,SAAUl4X,EAAcm4X,GAC/D,IAAI5jG,EACAD,EACA8jG,GAAgB,EACpB,IAAqF,IAAjFD,EAAoB3yY,OAAO2yY,EAAqBn4X,EAAathD,QAAQ2kB,SACjE28B,EAAaq5V,SAASjwZ,OAAS,EAC/B,IAAK,IAAI0pB,EAAI,EAAGA,EAAIktC,EAAaq5V,SAASjwZ,OAAQ0pB,IAAK,CACnD,IAAI05B,EAAY7/C,KAAKs5D,UAAUjG,EAAaq5V,SAASvmY,IAOrD,GALIsla,EADuB,KAAvB5rY,EAAUmrW,UACMhrZ,KAAKi4Z,eAAen/V,WAAW94D,KAAKs5D,UAAUzZ,EAAUmrW,YAGxDhrZ,KAAKi4Z,eAAen/V,WAAW94D,KAAKs5D,UAAUzZ,EAAUv8C,KAErD,eAAnBu8C,EAAUn5C,MAAyBm5C,EAAU/W,UAAY+W,EAAU/W,SAASrsC,OAAS,GAAKgvb,EAAe,CACzG,OAAQ5rY,EAAU/W,SAAS,GAAGtT,WAC1B,IAAK,SACDoyT,EAAKv0R,EAAathD,QAAQ2kB,OAAOgiB,aAAa3rC,EAAIy+a,EAAoB9yY,aAAa3rC,EACnF46U,EAAKt0R,EAAathD,QAAQ2kB,OAAOgiB,aAAa1rC,EAAIw+a,EAAoB9yY,aAAa1rC,EACnF,MACJ,IAAK,MACD46U,EAAKv0R,EAAathD,QAAQ2kB,OAAO+hB,UAAU1rC,EAAIy+a,EAAoB/yY,UAAU1rC,EAC7E46U,EAAKt0R,EAAathD,QAAQ2kB,OAAO+hB,UAAUzrC,EAAIw+a,EAAoB/yY,UAAUzrC,EAC7E,MACJ,IAAK,OACD46U,EAAKv0R,EAAathD,QAAQ2kB,OAAOkiB,WAAW7rC,EAAIy+a,EAAoB5yY,WAAW7rC,EAC/E46U,EAAKt0R,EAAathD,QAAQ2kB,OAAOkiB,WAAW5rC,EAAIw+a,EAAoB5yY,WAAW5rC,EAC/E,MACJ,IAAK,QACD46U,EAAKv0R,EAAathD,QAAQ2kB,OAAOiiB,YAAY5rC,EAAIy+a,EAAoB7yY,YAAY5rC,EACjF46U,EAAKt0R,EAAathD,QAAQ2kB,OAAOiiB,YAAY3rC,EAAIw+a,EAAoB7yY,YAAY3rC,EAGzFhN,KAAKi4Z,eAAeqZ,cAAczxX,EAAW+nS,EAAID,GAAI,EAAM,KAAM,0BAAsBxsV,OAAWA,OAAWA,GAAW,MAQ5Ig3D,EAAQ92D,UAAUq2a,mBAAqB,SAAUr+W,EAAcQ,EAAWtzD,EAAMmrb,GAC5E,IAOIrsY,EAPAssY,EAAiBt4X,EAAathD,QAAQ6yC,YACtC4mY,EAAsBn4X,EAAathD,QAAQ2kB,OAC3Cw+B,GAAkB,EAmFtB,QA3EmB/5D,IAAfoF,EAAKyV,OAAwBq9C,EAAaj5C,WAC1Ci5C,EAAathD,QAAQqI,SAAS,GAAGpE,MAAQzV,EAAKyV,MAC9CqpC,GAAS,EACT6V,GAAkB,QAEF/5D,IAAhBoF,EAAKwV,QAAyBs9C,EAAaj5C,WAC3Ci5C,EAAathD,QAAQqI,SAAS,GAAGrE,OAASxV,EAAKwV,OAC/CspC,GAAS,EACT6V,GAAkB,GAEtB7V,EAASr/C,KAAKsrb,yBAAyBj4X,EAAcQ,EAAWtzD,EAAM8+C,QAC7ClkD,IAArBoF,EAAKwlD,aAA6BiB,GAAU6M,KAAe7M,GAAUzmD,KACrE8yD,EAAathD,QAAQqI,SAAS,GAAG43B,OAASgV,GAAUqM,GAAgBA,EAAarhB,OAAS,WAEzE72C,IAAjBoF,EAAKsL,UACLwnD,EAAathD,QAAQlG,QAAUtL,EAAKsL,QACpCwzC,GAAS,EACT6V,GAAkB,QAED/5D,IAAjBoF,EAAK0L,UACLonD,EAAathD,QAAQ9F,QAAU1L,EAAK0L,QACpCozC,GAAS,EACT6V,GAAkB,QAEH/5D,IAAfoF,EAAKosC,QACL0mB,EAAathD,QAAQ46B,MAAQpsC,EAAKosC,MAClC0S,GAAS,QAESlkD,IAAlBoF,EAAKizD,WACLH,EAAathD,QAAQyhD,SAAWjzD,EAAKizD,SACrCnU,GAAS,EACT6V,GAAkB,QAEC/5D,IAAnBoF,EAAK+yD,YACLD,EAAathD,QAAQuhD,UAAY/yD,EAAK+yD,UACtCjU,GAAS,EACT6V,GAAkB,QAEA/5D,IAAlBoF,EAAK69B,WACLi1B,EAAathD,QAAQqsB,SAAW79B,EAAK69B,SACrCihB,GAAS,EACT6V,GAAkB,QAEC/5D,IAAnBoF,EAAKgzD,YACLF,EAAathD,QAAQwhD,UAAYhzD,EAAKgzD,UACtClU,GAAS,EACT6V,GAAkB,QAEG/5D,IAArBoF,EAAKssC,cACLwmB,EAAathD,QAAQ86B,YAActsC,EAAKssC,YACxCwS,GAAS,EACT6V,GAAkB,QAEO/5D,IAAzBoF,EAAKoxD,kBACL0B,EAAathD,QAAQrN,MAAMk5B,KAAOr9B,EAAKoxD,sBAEtBx2D,IAAjBoF,EAAKi3B,SACLx3B,KAAKstZ,wBAAwBj6V,EAAathD,QAASshD,EAAcA,EAAa77B,cAE/Dr8B,IAAfoF,EAAKotB,OAAmD,SAA5B0lC,EAAa1lC,MAAMjnB,OAC/C24C,GAAS,EACTuU,GAAYrzD,EAAM8yD,EAAcQ,EAAW7zD,MAC3Ck1D,GAAkB,GAElB30D,EAAKk8B,SACL4iB,GAAS,EACTr/C,KAAK4rb,aAAav4X,EAAc9yD,GAChC20D,GAAkB,SAED/5D,IAAfoF,EAAKotB,YAA2CxyB,IAApBoF,EAAKotB,MAAMjnB,WAAsCvL,IAAfoF,EAAKyV,YAClD7a,IAAhBoF,EAAKwV,aAAuC5a,IAAfoF,EAAKmE,QAAoD,SAA5B2uD,EAAa1lC,MAAMjnB,MAAmB1G,KAAK+sZ,aACxG1tW,GAAS,EACT6V,GAAkB,EAClBl1D,KAAK+sZ,WAAW8+B,WAAWtrb,EAAMszD,EAAWR,EAAcrzD,YAE3C7E,IAAfoF,EAAKu2D,MACL,IAAK,IAAI14D,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKiD,EAAKu2D,OAAQ14D,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACjE,IAAIf,EAAMwF,EAAGzE,GACT6T,EAAQqlB,OAAOj6B,GACnBgiD,GAAS,EACT,IAAIuT,EAAgBryD,EAAKu2D,MAAMz5D,GAC3Byub,EAAaz4X,EAAayD,MAAM7kD,GACpCjS,KAAK+rb,WAAWn5X,EAAek5X,EAAYz4X,EAAathD,SAGhE,QAAyB5W,IAArBoF,EAAKq2D,kBAA4Cz7D,IAAfoF,EAAKyV,MACvC,IAAK,IAAI/R,EAAK,EAAGwG,EAAKnM,OAAOhB,KAAKiD,EAAKq2D,aAAevD,EAAauD,aAAc3yD,EAAKwG,EAAGhO,OAAQwH,IAAM,CAC/F5G,EAAMoN,EAAGxG,GACTgO,EAAQqlB,OAAOj6B,GACnBgiD,GAAS,EACLuT,EAAgBryD,EAAKq2D,YAAcr2D,EAAKq2D,YAAYv5D,GAAOg2D,EAAauD,YAA5E,IACI3D,EAAmBI,EAAauD,YAAY3kD,GAChD,GAAIghD,EAAkB,CAClB,IAAIi5L,IAAa74L,EAAar9C,MAC9BhW,KAAK2pZ,iBAAiB/2V,EAAeK,EAAkBI,EAAathD,QAASshD,EAAc64L,SAI/E/wP,IAApBoF,EAAKutZ,iBAAkD3yZ,IAAtBoF,EAAKwtZ,mBAAkD5yZ,IAApBoF,EAAK04S,aACzEj5S,KAAK4za,WAAWvgX,GAChBrzD,KAAKijb,yBAAyB5vX,QACNl4D,IAApBoF,EAAK04S,YACLj5S,KAAKi4Z,eAAehqG,WAAW56P,GAAc,EAAMrzD,MAEvDq/C,GAAS,QAEQlkD,IAAjBoF,EAAKsxB,SACL7xB,KAAKw2C,cAAc6c,EAAc9yD,GAEjC8+C,IACMr/C,KAAKqpD,eAAiBC,GAAcC,YAClCvpD,KAAKgsb,kBAAkB34X,IACvBrzD,KAAK65Z,sBAGW1+Z,IAApB6E,KAAK+sZ,YACL/sZ,KAAK+sZ,WAAWk/B,yBAAyB54X,GAAgBxnD,QAAUgoD,EAAUhoD,SAAWwnD,EAAaxnD,QAAUI,QAAU4nD,EAAU5nD,SAAWonD,EAAapnD,SAAYjM,MAE3KqzD,EAAathD,QAAQ6pR,QAAQ,IAAIxuQ,GAAKimC,EAAathD,QAAQ2kB,OAAO1gB,MAAOq9C,EAAathD,QAAQ2kB,OAAO3gB,SACrGs9C,EAAathD,QAAQ4vY,QAAQtuV,EAAathD,QAAQ49B,aAClD3vC,KAAKirb,aAAa53X,EAAcQ,EAAWtzD,GACtCmrb,EAOGr4X,GAAgBA,EAAa77B,SAAW67B,EAAaq5V,UACrD1sZ,KAAK6ob,qBAAqBx1X,EAAgD,IAAjCA,EAAaq5V,SAASjwZ,SAPnEuD,KAAKurb,uBAAuBl4X,EAAcm4X,GACtCt2X,GACAl1D,KAAKksb,qBAAqB74X,SAQVl4D,IAApB6E,KAAK+sZ,YACL/sZ,KAAK+sZ,WAAW6zB,YAAYvtX,EAAcrzD,MAE9CA,KAAKkza,kBAAkB7/W,IACyD,IAA5Es4X,EAAe9yY,OAAO8yY,EAAgBt4X,EAAathD,QAAQ6yC,cAC3D5kD,KAAK46a,WAAWvnX,IAEiE,IAAjFm4X,EAAoB3yY,OAAO2yY,EAAqBn4X,EAAathD,QAAQ2kB,UACrE12B,KAAKmsb,gBAAgB94X,GACjBA,EAAaj5C,UACbpa,KAAKkza,kBAAkB7/W,IAGb,QAAdrzD,KAAK+9B,MACL/9B,KAAK6pa,oBAAoBx2W,KAIrClB,EAAQ92D,UAAU6wb,qBAAuB,SAAU74X,GAC/C,GAAIA,EAAas5V,QAAQlwZ,OAAS,EAC9B,IAAK,IAAI8mB,EAAI,EAAGA,EAAI8vC,EAAas5V,QAAQlwZ,OAAQ8mB,IAAK,CAClD,IAAIs8B,EAAY7/C,KAAKs5D,UAAUjG,EAAas5V,QAAQppY,IAChD80C,GACAthB,YAAa8I,EAAU9I,YAAagI,YAAac,EAAUd,YAAazH,SAAUuI,EAAUvI,SAC5F0zW,SAAUnrW,EAAUmrW,SAAU9xV,aAAcrZ,EAAUqZ,aAAc+xV,aAAcprW,EAAUorW,cAEhGjrZ,KAAK4pa,wBAAwB/pX,KAAewY,GAGpD,GAAIhF,EAAaq5V,SAASjwZ,OAAS,EAC/B,IAAK,IAAI0pB,EAAI,EAAGA,EAAIktC,EAAaq5V,SAASjwZ,OAAQ0pB,IAAK,CACnD,IAAI+8Z,EAAaljb,KAAKs5D,UAAUjG,EAAaq5V,SAASvmY,IAClDkyC,GACAthB,YAAamsY,EAAWnsY,YAAagI,YAAamkY,EAAWnkY,YAAazH,SAAU4rY,EAAW5rY,SAC/F0zW,SAAUk4B,EAAWl4B,SAAU9xV,aAAcgqX,EAAWhqX,aAAc+xV,aAAci4B,EAAWj4B,cAEnGjrZ,KAAK4pa,wBAAwBsZ,KAAgB7qX,GAGjDhF,EAAakG,UACbv5D,KAAKksb,qBAAqBlsb,KAAKs5D,UAAUjG,EAAakG,YAI9DpH,EAAQ92D,UAAU+wb,6BAA+B,SAAU/4X,EAAcq5B,EAASD,EAASotU,GAUvF,YATqB1+Z,IAAjBsxF,EAAQ/lF,MAAsB+lF,EAAQ/lF,OAASgmF,EAAQhmF,MACnD2sD,EAAavqB,SAASrsC,OAAS,QAA0BtB,IAArBsxF,EAAQ3jD,WAC5CuqB,EAAavqB,kBAGE3tC,IAAlBsxF,EAAQ9+D,YAA+CxyB,IAAvBk4D,EAAa1lC,OAC9C0lC,EAAa1lC,OAAqC,SAA5B0lC,EAAa1lC,MAAMjnB,MAAmB1G,KAAK+sZ,YACjE/sZ,KAAK+sZ,WAAWs/B,oBAAoBh5X,EAAcq5B,EAASD,EAASzsF,WAEvC7E,IAA7Bk4D,EAAatN,aACb/lD,KAAKkqb,uBAAuBlqb,KAAKsyD,cAAcT,WAAY7xD,KAAKsyD,eACzDunW,GAAiB,GAErBA,GAGX1nW,EAAQ92D,UAAUuua,wBAA0B,SAAUv2W,EAAcq5B,EAASD,EAAS6/V,GAClF,IAAIX,EAAiBt4X,EAAathD,QAAQ2kB,OACtCmjY,GAAiB,EACjBliY,KAKJ,GAJAkiY,EAAiB75Z,KAAKosb,6BAA6B/4X,EAAcq5B,EAASD,EAASotU,QAC3D1+Z,IAApBsxF,EAAQj1D,SACRx3B,KAAKstZ,wBAAwBj6V,EAAathD,QAAS06E,EAASp5B,EAAa77B,cAEjDr8B,IAAxBsxF,EAAQ11C,kBAAqD57C,IAAxBsxF,EAAQ1tC,kBACrB5jD,IAArBsxF,EAAQn1C,eAA+Cn8C,IAArBsxF,EAAQu+T,eACpB7vZ,IAAzBsxF,EAAQvzB,mBAAuD/9D,IAAzBsxF,EAAQw+T,mBAC7B9vZ,IAAjBsxF,EAAQ/lF,WAA2CvL,IAArBsxF,EAAQ3jD,SAAwB,CAC9D,QAA0B3tC,IAArBsxF,EAAQn1C,UAA0Bm1C,EAAQn1C,WAAao1C,EAAQp1C,UAAam1C,EAAQvzB,aAAc,CACnG,IAAIrhB,EAAa73C,KAAKs5D,UAAUjG,EAAa/b,UAI7C,GAHKO,IAAcwP,GAAcxP,KAC7Bwb,EAAarc,cAAgBa,EAAa73C,KAAKunb,kBAAkB1vY,EAAYwb,GAAc,QAAQl4D,QAE9EA,IAArBsxF,EAAQn1C,eAA+Cn8C,IAArBuxF,EAAQp1C,UAA+C,KAArBo1C,EAAQp1C,SAAiB,CAC7F,IAAIi1Y,EAAYvsb,KAAKs5D,UAAUozB,EAAQp1C,eACrBn8C,IAAdoxb,GAA2BA,EAAU7/B,WAA6D,IAAjD6/B,EAAU7/B,SAASnuZ,QAAQ80D,EAAa/vD,KACzF0xD,GAAWu3X,EAAU7/B,SAAUr5V,EAAa/vD,IAGpDtD,KAAKygb,YAAYptX,GAErB,QAAyBl4D,IAArBsxF,EAAQu+T,UAA0Bv+T,EAAQu+T,WAAat+T,EAAQs+T,SAAU,CACzE,IAAIlzW,EAAa93C,KAAKs5D,UAAUmzB,EAAQu+T,UAIxC,GAHKlzW,IAAcoP,GAAapP,KAC5Bub,EAAa9b,cAAgBO,EAAa93C,KAAKunb,kBAAkBzvY,EAAYub,GAAc,QAASl4D,QAExFA,IAAZuxF,QAA8CvxF,IAArBuxF,EAAQs+T,UAA+C,KAArBt+T,EAAQs+T,SAAiB,CACpF,IAAIgpB,EAAYh0a,KAAKs5D,UAAUozB,EAAQs+T,eACrB7vZ,IAAd64a,GAA2BA,EAAUrnB,UAA2D,IAAhDqnB,EAAUrnB,QAAQpuZ,QAAQ80D,EAAa/vD,KACvF0xD,GAAWg/W,EAAUrnB,QAASt5V,EAAa/vD,IAGnDtD,KAAKygb,YAAYptX,GAErB,QAA6Bl4D,IAAzBsxF,EAAQvzB,cAA8BuzB,EAAQvzB,eAAiBwzB,EAAQxzB,aAAc,CACrF,IAAI38D,OAAS,EACT82D,EAAa/b,UAAYt3C,KAAKs5D,UAAUjG,EAAa/b,YACrD/6C,EAASyD,KAAKs5D,UAAUjG,EAAa/b,UAAUvlC,SAEnDshD,EAAanc,kBAAoB36C,EAC7ByD,KAAKi/G,WAAW1iH,EAAQkwF,EAAQvzB,mBAAgB/9D,EAExD,QAA6BA,IAAzBsxF,EAAQw+T,cAA8Bx+T,EAAQw+T,eAAiBv+T,EAAQu+T,aAAc,CACrF,IAAI9jZ,OAAS,EACTksD,EAAa23V,UAAYhrZ,KAAKs5D,UAAUjG,EAAa23V,YACrD7jZ,EAASnH,KAAKs5D,UAAUjG,EAAa23V,UAAUj5Y,SAEnDshD,EAAapb,kBAAoB9wC,EAC7BnH,KAAKi/G,WAAW93G,EAAQslF,EAAQw+T,mBAAgB9vZ,EAExDw8B,EAAS33B,KAAKigD,UAAUoT,GAM5B,QAHsBl4D,IAAlBsxF,EAAQ/nF,OACRiuD,GAAY85B,EAAQ/nF,MAAO2uD,EAAathD,QAAQqI,SAAS,KAEzDud,EAAOl7B,OAAS,QAAiCtB,IAA5BsxF,EAAQ5nC,sBAA6D1pD,IAA5BsxF,EAAQ1nC,sBAC7C5pD,IAAzBsxF,EAAQrkD,gBACR8sB,GAAgB7B,EAAc17B,EAAOl7B,OAAS,EAAIk7B,EAAS07B,EAAazG,yBACnDzxD,IAAjBsxF,EAAQ/lF,OACRmzZ,GAAiB,GAEjBliY,EAAOl7B,OAAS,GAAG,CAGnB,GAFA42D,EAAathD,QAAQ6pR,QAAQ,IAAIxuQ,GAAKimC,EAAathD,QAAQiE,MAAOq9C,EAAathD,QAAQgE,SACvFs9C,EAAathD,QAAQ4vY,QAAQtuV,EAAathD,QAAQ49B,aAC9C0jB,EAAauD,YAAYn6D,OACzB,IAAK,IAAI2B,EAAK,EAAGyE,EAAKwwD,EAAauD,YAAax4D,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAClE,IAAIuwD,EAAa9rD,EAAGzE,GAChBoub,OAAoB,EACxBA,EAAoBxsb,KAAKi/G,WAAW5rD,EAAathD,QAAS48C,EAAWrrD,IACrE+vD,EAAas2V,iBAAiBh7V,EAAY0E,EAAazG,mBAAoByG,EAAathD,QAAQ2kB,OAAQ81Z,GAGhHn5X,EAAathD,QAAQ6pR,QAAQ,IAAIxuQ,GAAKimC,EAAathD,QAAQiE,MAAOq9C,EAAathD,QAAQgE,SACvFs9C,EAAathD,QAAQ4vY,QAAQtuV,EAAathD,QAAQ49B,aAClD3vC,KAAKirb,aAAa53X,EAAcq5B,EAASD,IAG5CA,EAAQ11C,aAAe01C,EAAQ1tC,aAAe0tC,EAAQ3jD,WACpD9oC,KAAKqpD,iBAAmBC,GAAcw1X,SACzCjlB,GAAiB,GAEhByyB,GACDtsb,KAAKw8a,iBAETx8a,KAAKysb,kBAAkBhgW,EAASp5B,GAChCA,EAAathD,QAAQ6pR,QAAQ,IAAIxuQ,GAAKimC,EAAathD,QAAQiE,MAAOq9C,EAAathD,QAAQgE,SACvFs9C,EAAathD,QAAQ4vY,QAAQtuV,EAAathD,QAAQ49B,cACyB,IAAvEg8Y,EAAe9yY,OAAO8yY,EAAgBt4X,EAAathD,QAAQ2kB,UAC3D12B,KAAK46a,WAAWvnX,GAChBrzD,KAAKmsb,gBAAgB94X,KAEF,IAAnBwmW,GAA2B75Z,KAAKgsb,kBAAkB34X,IAClDrzD,KAAK65Z,iBAES,QAAd75Z,KAAK+9B,MACL/9B,KAAK6pa,oBAAoBx2W,IAGjClB,EAAQ92D,UAAU4kD,UAAY,SAAUoT,EAAc17B,GAIlD,OAFM07B,EAAak1V,mBAAmBl1V,EAAa3sD,KAAMixB,EAA6B,4BAArB33B,KAAK6wD,OAAOnqD,MAA2D,qBAArB1G,KAAK6wD,OAAOnqD,KAC3H1G,KAAK6wD,OAAOz3B,iBAAcj+B,IAOlCg3D,EAAQ92D,UAAUqxb,mBAAqB,SAAU1rb,EAASw2B,EAAS/pB,GAC/D,QAAgBtS,IAAZq8B,EACAx3B,KAAKstZ,wBAAwBtsZ,EAAShB,KAAKs5D,UAAUt4D,EAAQsC,IAAKk0B,OAEjE,CACDx2B,EAAQ0D,MAAM+I,QAAUA,EACxB,IAAK,IAAItR,EAAI,EAAGA,EAAI6E,EAAQoZ,SAAS3d,OAAQN,IACrC6E,EAAQoZ,SAASje,aAAci7D,IAC/Bp3D,KAAK0sb,mBAAmB1rb,EAAQoZ,SAASje,QAAIhB,EAAWsS,GAE5DzM,EAAQoZ,SAASje,GAAGuI,MAAM+I,QAAUA,IAQhD0kD,EAAQ92D,UAAU2wb,kBAAoB,SAAU34X,GAC5C,IAAI67W,EAAgBlva,KAAKsyD,cACrBwG,GAAa,EACb6zX,KAOJ,OANAA,EAAWA,EAASpya,OAAO20Z,EAAcp9W,MAAOo9W,EAAcr9W,aACjDp1D,OAAS,GACd42D,EAAa/vD,KAAOqpb,EAASA,EAASlwb,OAAS,GAAG6G,KAClDw1D,GAAa,GAGdA,GAMX3G,EAAQ92D,UAAUytb,iCAAmC,SAAU9nb,EAASw2B,GACpE,GAAIx2B,aAAmBo2D,GACnB,IAAK,IAAIj7D,EAAI,EAAGA,EAAI6E,EAAQoZ,SAAS3d,OAAQN,IACzC6D,KAAK8ob,iCAAiC9nb,EAAQoZ,SAASje,GAAIq7B,GAGnEx2B,EAAQw2B,QAAUA,GAMtB26B,EAAQ92D,UAAUiyZ,wBAA0B,SAAUtsZ,EAASjE,EAAKy6B,GAChE,QAAgBr8B,IAAZq8B,EAAuB,CAEvB,GADAx2B,EAAQw2B,QAAUA,EACdz6B,aAAeoqD,GAAM,CAErB,GAAKpqD,EAAIqd,SAQL,IAAK,IAAIhc,EAAK,EAAGyE,EAAK9F,EAAIqd,SAAUhc,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACtD,IAAIiC,EAAQwC,EAAGzE,GACf4B,KAAKstZ,wBAAwBttZ,KAAKs5D,UAAUj5D,GAAO0R,QAAS/R,KAAKs5D,UAAUj5D,GAAQm3B,QATvFx2B,EAAQoZ,SAAS,GAAGod,QAAUA,EAC9Bx3B,KAAK8ob,iCAAiC9nb,EAAQoZ,SAAS,GAAIod,GACpC,SAAnBz6B,EAAI4wB,MAAMjnB,MAAmB1G,KAAK+sZ,YAClC/sZ,KAAK+sZ,WAAWO,wBAAwBvwZ,EAAKy6B,EAASx3B,MAU9D,GAAIjD,EAAI+5D,MACJ,IAAK,IAAI7yD,EAAK,EAAGwG,EAAK1N,EAAI+5D,MAAO7yD,EAAKwG,EAAGhO,OAAQwH,IAAM,CACnD,IAAIq0C,EAAO7tC,EAAGxG,GACd,GAAIq0C,EAAK3zC,WAAao0D,GAAeE,QAAS,EACtClnD,EAAU/R,KAAKi/G,WAAWj+G,EAASs3C,EAAKh1C,KACpCk0B,QAAUA,GAI9B,GAAIz6B,EAAI65D,YACJ,IAAK,IAAI26Q,EAAK,EAAGC,EAAKz0U,EAAI65D,YAAa26Q,EAAKC,EAAG/0U,OAAQ80U,IAAM,CACzD,IAAI5iR,EAAa6iR,EAAGD,IAChBx/T,EAAU/R,KAAKi/G,WAAWj+G,EAAS2tD,EAAWrrD,KAC1Ck0B,QAAUA,QAM1B,IAAK,IAAIr7B,EAAI,EAAGA,EAAI,EAAGA,IACnB6E,EAAQoZ,SAASje,GAAGq7B,QAAUA,EAGtC,GAAIz6B,EAAI65D,YAEJ,IAAK,IAAI66Q,EAAK,EAAGC,EAAK30U,EAAI65D,YAAa66Q,EAAKC,EAAGj1U,OAAQg1U,IAAM,CACrD9iR,EAAa+iR,EAAGD,IAChB1/T,EAAU/R,KAAKi/G,WAAWj+G,EAAS2tD,EAAWrrD,KAC1Ck0B,QAAUA,EAG1B,GAAIz6B,EAAI+wZ,YAAc/wZ,EAAIgxZ,aAAc,CACpC,IAAIh8Y,EACJ,GADIA,EAAU/R,KAAKi/G,WAAWj+G,EAAS,gBAC1B,CACT,IAAS7E,EAAI,EAAGA,EAAI4V,EAAQqI,SAAS3d,OAAQN,IACzC4V,EAAQqI,SAASje,GAAGq7B,QAAUA,EAElCzlB,EAAQylB,QAAUA,IAGV,IAAZA,GACAx3B,KAAKq5Z,SAASr5Z,KAAKs5D,UAAUt4D,EAAQsC,KAEzCtD,KAAK6pa,oBAAoB7pa,KAAKs5D,UAAUt4D,EAAQsC,OAGxD6uD,EAAQ92D,UAAUoxb,kBAAoB,SAAUhgW,EAASp5B,GACrD,QAA4Bl4D,IAAxBsxF,EAAQ71B,YACR,IAAK,IAAIx4D,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKmvF,EAAQ71B,aAAcx4D,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC1E,IAAIf,EAAMwF,EAAGzE,GACT6T,EAAQqlB,OAAOj6B,GACfu1D,EAAgB65B,EAAQ71B,YAAYv5D,GACpC41D,EAAmBI,EAAauD,YAAY3kD,GAChDjS,KAAK2pZ,iBAAiB/2V,EAAeK,EAAkBI,EAAathD,QAASshD,KAKzFlB,EAAQ92D,UAAUsuZ,iBAAmB,SAAU/2V,EAAeK,EAAkBnB,EAAOuB,EAAcu5X,GACjG,IAAIJ,EACAK,GAAY,EAEhB,QAA0B1xb,KAD1Bqxb,EAAoBxsb,KAAKi/G,WAAWntD,EAAOmB,EAAiB3vD,KACvB,CASjC,QAR4BnI,IAAxBy3D,EAAc58C,YAAgD7a,IAAzBy3D,EAAc78C,SACnDy2a,EAAkBx2a,MAAQ48C,EAAc58C,MACxCw2a,EAAkBz2a,OAAS68C,EAAc78C,OACzC82a,GAAY,GAEZD,GACAJ,EAAkBz5X,qBAElBE,aAA4BoyV,SACHlqZ,IAAzBy3D,EAAcjnD,OAAsB,CACpC,IAAIA,EAASinD,EAAcjnD,OAC3Bkhb,GAAY,EACZ,IAAIhhb,OAAuB1Q,IAAbwQ,EAAOoB,EAAkBpB,EAAOoB,EAC1CkmD,EAAiBtnD,OAAOoB,EACxBd,OAAuB9Q,IAAbwQ,EAAOqB,EAAkBrB,EAAOqB,EAC1CimD,EAAiBtnD,OAAOqB,EAC5Bw/a,EAAkBhrC,6BAA6B31Y,EAASI,EAAS,YACjEugb,EAAkBj+X,aAAe,aAE5B0E,aAA4BqyV,SACRnqZ,IAAzBy3D,EAAcjnD,QACd0nD,EAAas2V,iBAAiB12V,EAAkBI,EAAazG,mBAAoByG,EAAathD,QAAQ2kB,OAAQ81Z,GAE7Gv5X,aAA4BqyV,IAAmB1yV,EAAcm3V,oBACzB5uZ,IAAjCy3D,EAAcm3V,aAAah9Y,QACM5R,IAAjCy3D,EAAcm3V,aAAa/8Y,IAC3B6/a,GAAY,SAGS1xb,IAAzBy3D,EAAcn2B,SACdowZ,GAAY,OACwB1xb,IAAhCy3D,EAAcn2B,OAAO9vB,SACrB6/a,EAAkB/vZ,OAAO9vB,OAASimD,EAAcn2B,OAAO9vB,aAE1BxR,IAA7By3D,EAAcn2B,OAAO/vB,MACrB8/a,EAAkB/vZ,OAAO/vB,IAAMkmD,EAAcn2B,OAAO/vB,UAEtBvR,IAA9By3D,EAAcn2B,OAAOjwB,OACrBggb,EAAkB/vZ,OAAOjwB,KAAOomD,EAAcn2B,OAAOjwB,WAEtBrR,IAA/By3D,EAAcn2B,OAAOhwB,QACrB+/a,EAAkB/vZ,OAAOhwB,MAAQmmD,EAAcn2B,OAAOhwB,SAG1Dogb,GAAaD,KACbJ,EAAkBx2a,OAASi9C,EAAiBj9C,OAASq9C,EAAar9C,OAC5Dw2a,EAAkB/vZ,OAAOjwB,KAAOggb,EAAkB/vZ,OAAOhwB,YAEzBtR,IAAtCy3D,EAAca,sBACd+4X,EAAkB/4X,oBAAsBb,EAAca,oBACtDo5X,GAAY,QAEwB1xb,IAApCy3D,EAAcc,oBACd84X,EAAkB94X,kBAAoBd,EAAcc,kBACpDm5X,GAAY,QAEiB1xb,IAA7By3D,EAAcjuD,aACd6nb,EAAkBh1Z,WAAWs6B,EAAMt6B,UAAWo7B,EAAcjuD,kBAE9BxJ,IAA9By3D,EAAc7M,cACdymY,EAAkBzmY,YAAc6M,EAAc7M,kBAEtB5qD,IAAxBy3D,EAAcluD,OACdiuD,GAAYC,EAAcluD,MAAO8nb,QAELrxb,IAA5By3D,EAAcM,WACdF,GAAgBJ,EAAcM,UAAWs5X,EAAmBv5X,QAElC93D,IAA1By3D,EAAcx4B,SACVoyZ,IACAK,GAAY,EACZL,EAAkBpyZ,QAAUw4B,EAAcx4B,UAGhC,IAAdyyZ,IACAL,EAAkB5wJ,QAAQ,IAAIxuQ,GAAKo/Z,EAAkBx2a,MAAOw2a,EAAkBz2a,SAC9Ey2a,EAAkB7qC,QAAQ6qC,EAAkB78Y,cAEhD68Y,EAAkBz5X,uBAK1BZ,EAAQ92D,UAAU0wb,WAAa,SAAUn5X,EAAek5X,EAAYh6X,GAChE,IAAIg7X,EACAD,GAAY,EAEhB,QAAoB1xb,KADpB2xb,EAAc9sb,KAAKi/G,WAAWntD,EAAOg6X,EAAWxob,KACjB,CAC3B,QAA6BnI,IAAzBy3D,EAAcjnD,OAAsB,CACpCkhb,GAAY,EACZ,IAAIhhb,OAAqC1Q,IAA3By3D,EAAcjnD,OAAOoB,EAAkB6lD,EAAcjnD,OAAOoB,EACtE++a,EAAWngb,OAAOoB,EAClBd,OAAqC9Q,IAA3By3D,EAAcjnD,OAAOqB,EAAkB4lD,EAAcjnD,OAAOqB,EACtE8+a,EAAWngb,OAAOqB,EACtB8/a,EAAYtrC,6BAA6B31Y,EAASI,EAAS,YAC3D6gb,EAAYv+X,aAAe,QAqD/B,QAnD4BpzD,IAAxBy3D,EAAc58C,QACd62a,GAAY,EACZC,EAAY92a,MAAQ48C,EAAc58C,YAET7a,IAAzBy3D,EAAc78C,SACd82a,GAAY,EACZC,EAAY/2a,OAAS68C,EAAc78C,aAEN5a,IAA7By3D,EAAcjuD,aACdmob,EAAYt1Z,WAAWs6B,EAAMt6B,UAAWg/B,GAAqBs1X,EAAY/yX,GAAeE,gBAE/D99D,IAAzBy3D,EAAcn2B,SACdowZ,GAAY,OACwB1xb,IAAhCy3D,EAAcn2B,OAAO9vB,SACrBmgb,EAAYrwZ,OAAO9vB,OAASimD,EAAcn2B,OAAO9vB,aAEpBxR,IAA7By3D,EAAcn2B,OAAO/vB,MACrBogb,EAAYrwZ,OAAO/vB,IAAMkmD,EAAcn2B,OAAO/vB,UAEfvR,IAA/By3D,EAAcn2B,OAAOhwB,QACrBqgb,EAAYrwZ,OAAOhwB,MAAQmmD,EAAcn2B,OAAOhwB,YAEjBtR,IAA/By3D,EAAcn2B,OAAOhwB,QACrBqgb,EAAYrwZ,OAAOjwB,KAAOomD,EAAcn2B,OAAOjwB,YAGbrR,IAAtCy3D,EAAca,sBACdo5X,GAAY,EACZC,EAAYr5X,oBAAsBb,EAAca,0BAEZt4D,IAApCy3D,EAAcc,oBACdm5X,GAAY,EACZC,EAAYp5X,kBAAoBd,EAAcc,wBAEtBv4D,IAAxBy3D,EAAcluD,aACmBvJ,IAA7By3D,EAAcluD,MAAMk5B,OACpBkvZ,EAAYpob,MAAMk5B,KAAOg1B,EAAcluD,MAAMk5B,WAEbziC,IAAhCy3D,EAAcluD,MAAM+I,UACpBq/a,EAAYpob,MAAM+I,QAAUmlD,EAAcluD,MAAM+I,cAEZtS,IAApCy3D,EAAcluD,MAAMktC,cACpBk7Y,EAAYpob,MAAMktC,YAAcghB,EAAcluD,MAAMktC,kBAEhBz2C,IAApCy3D,EAAcluD,MAAMmtC,cACpBi7Y,EAAYpob,MAAMmtC,YAAc+gB,EAAcluD,MAAMmtC,kBAEZ12C,IAAxCy3D,EAAcluD,MAAMqtC,kBACpB+6Y,EAAYpob,MAAMqtC,gBAAkB6gB,EAAcluD,MAAMqtC,uBAGpC52C,IAAxBy3D,EAAcjlC,OACVm/Z,EACA,GAA4B,WAAxBl6X,EAAcjlC,OAAsBilC,EAAc1iB,SAClD48Y,EAAYtwb,KAAO0sB,OAAO0pC,EAAc1iB,UACxC28Y,GAAY,MAEX,CACD,IAAIz+B,EAAWh5W,GAAawd,EAAcjlC,OAC1Cm/Z,EAAYtwb,KAAO4xZ,GAIb,IAAdy+B,IACAC,EAAYlxJ,QAAQ,IAAIxuQ,GAAK0/Z,EAAY92a,MAAO82a,EAAY/2a,SAC5D+2a,EAAYnrC,QAAQmrC,EAAYn9Y,gBAM5CwiB,EAAQ92D,UAAUu4a,WAAa,SAAUvgX,GACrC,IAAIw4I,EAAgB7rM,KAAKi/G,WAAW5rD,EAAathD,QAAS,gBAC1D,GAAI85L,EAAe,CACf,GAAkB,QAAd7rM,KAAK+9B,KAAgB,CACrB,IAAI2X,EAAO9C,GAAkBygB,EAAathD,QAAQzO,GAAK,iBACvD,GAAIoyC,EAAM,CACN,IAAIq3Y,EAAWn6Y,GAAkB8C,EAAKpyC,GAAK,SACvC0pb,EAAYp6Y,GAAkB8C,EAAKpyC,GAAK,UACxCgxD,EAAgB1hB,GAAkBo6Y,EAAU1pb,GAAK,mBACjDgxD,GACAA,EAAc7zD,WAAW6E,YAAYgvD,GAEzC04X,EAAUvsb,WAAW6E,YAAY0nb,GACjCD,EAAStsb,WAAW6E,YAAYynb,GAChCr3Y,EAAKj1C,WAAW6E,YAAYowC,IAGpC,IAAIzjC,EAAQohD,EAAathD,QAAQqI,SAAS7b,QAAQstM,GAClDx4I,EAAathD,QAAQqI,SAASiO,OAAOpW,EAAO,GAEhD,IAAIw1a,EAAgBznb,KAAKyqb,iBAAiBp3X,GAC1CA,EAAaw6V,UAAU7tZ,KAAKswD,eAAgBtwD,KAAK6wD,OAAQ42X,IAE7Dt1X,EAAQ92D,UAAUovb,iBAAmB,SAAUp3X,GAC3C,GAAIA,EAAaj5C,SACb,IAAK,IAAIje,EAAI,EAAGA,EAAIk3D,EAAathD,QAAQqI,SAAS3d,OAAQN,IACtD,GAA4C,oBAAxCk3D,EAAathD,QAAQqI,SAASje,GAAGmH,GACjC,OAAO+vD,EAAathD,QAAQqI,SAASje,GAIjD,OAAOk3D,EAAathD,SAExBogD,EAAQ92D,UAAUm7C,cAAgB,SAAU6c,EAAc9yD,QACzBpF,IAAzBoF,EAAKsxB,QAAQuI,UACbi5B,EAAaxhC,QAAQuI,QAAU75B,EAAKsxB,QAAQuI,cAElBj/B,IAA1BoF,EAAKsxB,QAAQ3d,WACbm/C,EAAaxhC,QAAQ3d,SAAW3T,EAAKsxB,QAAQ3d,eAErB/Y,IAAxBoF,EAAKsxB,QAAQ9b,SACbs9C,EAAaxhC,QAAQ9b,OAASxV,EAAKsxB,QAAQ9b,aAEpB5a,IAAvBoF,EAAKsxB,QAAQ7b,QACbq9C,EAAaxhC,QAAQ7b,MAAQzV,EAAKsxB,QAAQ7b,YAEV7a,IAAhCoF,EAAKsxB,QAAQ6kB,iBACb2c,EAAaxhC,QAAQ6kB,eAAiBn2C,EAAKsxB,QAAQ6kB,iBAI3Dyb,EAAQ92D,UAAUu/a,WAAa,SAAU79a,GACtBiD,KAAKqoa,cAAcuS,WAAW79a,EAAIgV,WAChC/R,KAAKgva,eAClBhva,KAAK28a,cAIbxqX,EAAQ92D,UAAU8ya,gBAAkB,SAAUpxa,GAC1CiD,KAAKqoa,cAAc8F,gBAAgBpxa,EAAIgV,SACxB/R,KAAKqoa,cAAczmB,aAAa7kZ,EAAIgV,WAClC/R,KAAKgva,eAClBhva,KAAK28a,cAIbxqX,EAAQ92D,UAAU8wb,gBAAkB,SAAU5rb,GAC1C,IAAIyra,EACAzra,EAAKg5D,YACLyyW,EAAWhsa,KAAKs5D,UAAU/4D,EAAKg5D,WAClBA,SACTv5D,KAAKmsb,gBAAgBngB,IAGrBA,EAASj6Z,QAAQ6pR,QAAQ,IAAIxuQ,IAC7B4+Y,EAASj6Z,QAAQ4vY,QAAQqqB,EAASj6Z,QAAQ49B,aAC1C3vC,KAAKkza,kBAAkBlH,GACvBhsa,KAAK6pa,oBAAoBmC,MAIrC75W,EAAQ92D,UAAUshb,WAAa,WAC3B,GAAI38a,KAAKqpD,eAAiBC,GAAcw1X,OAAQ,CAC5C9+a,KAAK8qD,SAASuxI,UACdr8L,KAAK8qD,SAASqrX,sBAEd,IAAK,IAAI/3a,EAAK,EAAGyE,EAAK7C,KAAKiyD,MAAO7zD,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACpD,IAAI2vB,EAAOlrB,EAAGzE,GACVk9L,EAAOt7L,KAAKiyD,MAAMlkC,GAChButK,aAAgBnpI,GAClBmpI,EAAKghP,WAAWhhP,MAMhCnpI,EAAQ92D,UAAU40D,sBAAwB,SAAUxwB,GAChDz/B,KAAKwmF,oBAAsB/mD,GAG/B0yB,EAAQ92D,UAAUuwb,aAAe,SAAUrrb,EAAMssL,QAClB1xL,IAAvB0xL,EAAQpwJ,OAAO/vB,MACfnM,EAAKk8B,OAAO/vB,IAAMmgL,EAAQpwJ,OAAO/vB,UAEPvR,IAA1B0xL,EAAQpwJ,OAAO9vB,SACfpM,EAAKk8B,OAAO9vB,OAASkgL,EAAQpwJ,OAAO9vB,aAEZxR,IAAxB0xL,EAAQpwJ,OAAOjwB,OACfjM,EAAKk8B,OAAOjwB,KAAOqgL,EAAQpwJ,OAAOjwB,WAETrR,IAAzB0xL,EAAQpwJ,OAAOhwB,QACflM,EAAKk8B,OAAOhwB,MAAQogL,EAAQpwJ,OAAOhwB,QAK3C0lD,EAAQ92D,UAAU4jb,eAAiB,WAC/B,IAAIl/a,EAAQC,KAEZA,KAAK++a,UAAY,IAAI3rU,GAAUpzG,KAAKgB,SACpChB,KAAK++a,UAAUxrU,OAAS,eAExBvzG,KAAK++a,UAAU/pH,KAAO,SAAU/0T,GAC5B,GAAKF,EAAM43D,cA8DH13D,EAAK3D,MAAM63C,SAAWl0C,EAAK3D,MAAM63C,QAAQ13C,QACzCsD,EAAMs8a,aAAax8F,UAAU5/U,EAAK3D,MAAO2D,EAAK3D,MAAM63C,cA9DxD,GAAIl0C,EAAK4wG,SAAU,CACf,IAAIxD,OAAS,EACTn5F,EAAWnU,EAAMs8a,aAAa/7V,iBAAiBrgF,EAAK3D,OACpDqzD,OAAe,EACfs9X,EAAiBhtb,EAAK4wG,SAAS3hG,OAC/Bg+a,EAAYD,EAAep6a,aAAa,aAC5C,GAAIq6a,EAAW,CACX,IAAI7oB,EAAgB7ja,SAASosB,eAAesga,GAAWxlW,cAAc,GAErE3nF,EAAMg/a,UAAgB,cAAI1a,EAC1B,IAAI8oB,EAAkB,kBACtB,GAAI9oB,EAAe,CACf,IAAItna,EAAMsna,EAAc8oB,GACxBx9X,EAAe5iB,GAAYs3X,EAAc8oB,IACzC,IAAIp7a,EAAUhV,EAAIgV,QAAQqI,SAAS,GAAGA,SAAS,GAC/C,GAAIiqZ,EAAc8oB,aAA4BhmY,GAAM,CAChDwI,EAAa9jD,QAAUqI,EAASnH,EAAI,GAAK4iD,EAAa35C,OAASjE,EAAQ26B,WAAW12B,OAAS,EAC3F25C,EAAa1jD,QAAUiI,EAASlH,GAAK2iD,EAAa55C,QAAUhE,EAAQ26B,WAAW32B,QAAU,EACzF,IAAIm3Z,EAAU,IAAI/lX,GAAKpnD,EAAO,QAAS4vD,GAAc,GAC1B,SAAvBu9W,EAAQv/Y,MAAMjnB,MAAmBwma,EAAQv/Y,MAAMu/X,SAASD,WAAWE,WAChE+f,EAAQv/Y,MAAMu/X,SAASD,WAAWE,UAAU1wZ,SAC/Cywa,EAAQv/Y,MAAMu/X,SAASD,WAAWE,cAEtC9/S,EAAS6/T,OAER,GAAI7I,EAAc8oB,aAA4BrnY,GAAW,CAC1DunD,EAAS,IAAIvnD,GAAU/lD,EAAO,aAAc4vD,GAAc,GAC1D,IAAIj5B,EAASR,GAAK0W,UAAUygE,EAAOt2D,YAAas2D,EAAOtuD,cACnD6oS,EAAK1zU,EAASnH,EAAI2pB,EAAOhD,OAAO3mB,EAChC46U,EAAKzzU,EAASlH,EAAI0pB,EAAOhD,OAAO1mB,EACpCqgG,EAAOt2D,YAAYhqC,GAAK66U,EACxBv6O,EAAOt2D,YAAY/pC,GAAK26U,EACxBt6O,EAAOtuD,YAAYhyC,GAAK66U,EACxBv6O,EAAOtuD,YAAY/xC,GAAK26U,EAE5Bt6O,EAAO/pG,IAAMipC,KACb,IAAIwlD,GACAx1F,OAAQ8na,EAAerja,QAASqsG,EAAQx0E,QAAQ,EAChDid,QAAS/1C,GAEbA,EAAMypJ,aAAas3P,GAAassC,UAAWr7V,GACtChyF,EAAMkra,YAAYhE,MAASl1U,EAAIl5D,SAChC94B,EAAMiva,eAAgB,EACtBjva,EAAMmua,WAAW7gU,GACjBttG,EAAM43D,cAAgB01C,EACH,QAAfttG,EAAMg+B,MACNh+B,EAAMgra,sBAEVhra,EAAMk4Z,eAAexyZ,OAAO4nG,GAC5BttG,EAAMs8a,aAAa3jB,UAAUz4Z,EAAK3D,OAClCyD,EAAMs8a,aAAax8F,UAAU5/U,EAAK3D,MAAO2D,GACzCF,EAAMiva,eAAgB,EACtBjva,EAAM48a,aACNsQ,EAAevob,MAAM+I,QAAU,KAGvC1N,EAAMg/a,UAAUoO,GAAmBF,KAWnDjtb,KAAK++a,UAAU9rU,KAAO,SAAUhzG,GAC5B,GAAIF,EAAM43D,cAAe,CACjB13D,EAAK3D,MAAM63C,SACXp0C,EAAMs8a,aAAaxjB,QAAQ54Z,EAAK3D,OAEpC,IAAI+wG,OAAS,EAITtb,GACAx1F,OAAQwD,EAAMg/a,UAAgB,cAC9B/9a,QAASjB,EAAM43D,cAAexwD,OAAQpH,EAAO84B,QAAQ,EACrD3kB,UAAYnH,EAAGhN,EAAM43D,cAAc5lD,QAAQlG,QAASmB,EAAGjN,EAAM43D,cAAc5lD,QAAQ9F,UAEvFlM,EAAMypJ,aAAas3P,GAAa7tS,KAAMlhB,GACtC,IAAIpiC,OAAe,EAEnBA,EAAe5iB,GAAYhtC,EAAM43D,eACjC53D,EAAMoua,gBAAgBpua,EAAM43D,eAC5B53D,EAAMqua,uBAAuBrua,EAAMu5D,UAAUv5D,EAAM43D,cAAcr0D,YAC1DvD,EAAMu5D,UAAUv5D,EAAM43D,cAAcr0D,IAC3CvD,EAAM43D,cAAgB,KACtB53D,EAAMkwD,uBAAsB,GACvB8hC,EAAIl5D,SACL94B,EAAM27Z,mBACN37Z,EAAMqE,IAAIurD,GACNxH,GAAgBpoD,IAChBA,EAAM0F,QAAQ1F,EAAMu5D,UAAU3J,EAAe,OAGrD5vD,EAAMkwD,uBAAsB,GAC5Bo9C,EAASttG,EAAMu5D,UAAU3J,EAAe,IACpC5vD,EAAMgtZ,YAAc1/S,aAAkBlmD,IAAQwI,EAAa88V,YAC3Dp/S,EAAOo/S,UAAY98V,EAAa88V,UAChC1sZ,EAAMgtZ,WAAW4nB,cAAc50a,EAAMu5D,UAAU+zC,EAAOo/S,WAAYp/S,EAAQttG,IAE9EA,EAAMg8Z,iBACa,QAAfh8Z,EAAMg+B,MACNh+B,EAAMgra,6BAEHhra,EAAMg/a,UAAgB,cAGjCx6a,EAAOxE,EAAMg/a,UAAyB,kBAE1C/+a,KAAK++a,UAAUj/a,IAAM,SAAUG,GAC3B,GAAIF,EAAM43D,gBAAkB53D,EAAMs8a,aAAan6a,MAAO,CAClDnC,EAAMs5Z,SAASt5Z,EAAM43D,eACrB53D,EAAMoua,gBAAgBpua,EAAM43D,eACT,QAAf53D,EAAMg+B,MAAqD,WAAnCh+B,EAAM43D,cAAchqC,MAAMjnB,MAClD3G,EAAMshb,eAAethb,EAAM43D,eAE/B53D,EAAMqua,uBAAuBrua,EAAMu5D,UAAUv5D,EAAM43D,cAAcr0D,YAC1DvD,EAAMu5D,UAAUv5D,EAAM43D,cAAcr0D,IAC3CvD,EAAMypJ,aAAas3P,GAAausC,WAAarsb,QAASjB,EAAM43D,cAAe7hB,QAAS/1C,IACjE,QAAfA,EAAMg+B,KACNh+B,EAAMgra,sBAGNhra,EAAMshb,eAAethb,EAAM43D,eAE/B53D,EAAM43D,cAAgB,KAEtB53D,EAAMg/a,UAAyB,gBAAEr6a,MAAM+I,QAAU,WAE1C1N,EAAMg/a,UAAgB,iBAIzCl0V,IACI3jF,EAAS,SACVirD,EAAQ92D,UAAW,aAAS,GAC/BwvF,IACI3jF,EAAS,QACVirD,EAAQ92D,UAAW,YAAQ,GAC9BwvF,IACI3jF,EAAS,SACVirD,EAAQ92D,UAAW,cAAU,GAChCwvF,IACI9iF,KAAY4za,KACbxpX,EAAQ92D,UAAW,2BAAuB,GAC7CwvF,IACI3jF,EAAS8hD,GAAmBqiW,UAC7Bl5V,EAAQ92D,UAAW,mBAAe,GACrCwvF,IACI3jF,EAASmhD,GAAagjW,UACvBl5V,EAAQ92D,UAAW,YAAQ,GAC9BwvF,IACI3jF,EAAS,QACVirD,EAAQ92D,UAAW,uBAAmB,GACzCwvF,IACI3jF,EAAS,gBACVirD,EAAQ92D,UAAW,uBAAmB,GACzCwvF,IACI9iF,KAAYmvZ,KACb/kW,EAAQ92D,UAAW,oBAAgB,GACtCwvF,IACI9iF,KAAYqvZ,KACbjlW,EAAQ92D,UAAW,qBAAiB,GACvCwvF,IACI9iF,KAAY6uZ,KACbzkW,EAAQ92D,UAAW,oBAAgB,GACtCwvF,IACIxiF,KAAe8+C,KAChBgL,EAAQ92D,UAAW,aAAS,GAC/BwvF,IACI3jF,KACDirD,EAAQ92D,UAAW,qBAAiB,GACvCwvF,IACIxiF,KAAey9C,KAChBqM,EAAQ92D,UAAW,kBAAc,GACpCwvF,IACI3jF,OACDirD,EAAQ92D,UAAW,qBAAiB,GACvCwvF,IACI9iF,KAAY4/Y,KACbx1V,EAAQ92D,UAAW,eAAW,GACjCwvF,IACI9iF,KAAYsvZ,KACbllW,EAAQ92D,UAAW,0BAAsB,GAC5CwvF,IACI3jF,KACDirD,EAAQ92D,UAAW,eAAW,GACjCwvF,IACI3jF,KACDirD,EAAQ92D,UAAW,uBAAmB,GACzCwvF,IACI3jF,KACDirD,EAAQ92D,UAAW,4BAAwB,GAC9CwvF,IACI3jF,KACDirD,EAAQ92D,UAAW,uBAAmB,GACzCwvF,IACI3jF,KACDirD,EAAQ92D,UAAW,sBAAkB,GACxCwvF,IACI3jF,KACDirD,EAAQ92D,UAAW,yBAAqB,GAC3CwvF,IACI3jF,KACDirD,EAAQ92D,UAAW,qBAAiB,GACvCwvF,IACI3jF,KACDirD,EAAQ92D,UAAW,uBAAmB,GACzCwvF,IACI9iF,KAAYs+C,KACb8L,EAAQ92D,UAAW,qBAAiB,GACvCwvF,IACI9iF,KAAY8uZ,KACb1kW,EAAQ92D,UAAW,sBAAkB,GACxCwvF,IACI9iF,KAAYuvZ,KACbnlW,EAAQ92D,UAAW,cAAU,GAChCwvF,IACI9iF,KAAY2za,KACbvpX,EAAQ92D,UAAW,sBAAkB,GACxCwvF,IACI/hF,KACDqpD,EAAQ92D,UAAW,kBAAc,GACpCwvF,IACI/hF,KACDqpD,EAAQ92D,UAAW,iBAAa,GACnCwvF,IACI/hF,KACDqpD,EAAQ92D,UAAW,iBAAa,GACnCwvF,IACI/hF,KACDqpD,EAAQ92D,UAAW,gBAAY,GAClCwvF,IACI/hF,KACDqpD,EAAQ92D,UAAW,aAAS,GAC/BwvF,IACI/hF,KACDqpD,EAAQ92D,UAAW,qBAAiB,GACvCwvF,IACI/hF,KACDqpD,EAAQ92D,UAAW,mBAAe,GACrCwvF,IACI/hF,KACDqpD,EAAQ92D,UAAW,gBAAY,GAClCwvF,IACI/hF,KACDqpD,EAAQ92D,UAAW,oBAAgB,GACtCwvF,IACI/hF,KACDqpD,EAAQ92D,UAAW,uBAAmB,GACzCwvF,IACI/hF,KACDqpD,EAAQ92D,UAAW,kBAAc,GACpCwvF,IACI/hF,KACDqpD,EAAQ92D,UAAW,wBAAoB,GAC1CwvF,IACI/hF,KACDqpD,EAAQ92D,UAAW,yBAAqB,GAC3CwvF,IACI/hF,KACDqpD,EAAQ92D,UAAW,yBAAqB,GAC3CwvF,IACI/hF,KACDqpD,EAAQ92D,UAAW,sBAAkB,GACxCwvF,IACI/hF,KACDqpD,EAAQ92D,UAAW,sBAAkB,GACxCwvF,IACI/hF,KACDqpD,EAAQ92D,UAAW,yBAAqB,GAC3CwvF,IACI/hF,KACDqpD,EAAQ92D,UAAW,oBAAgB,GACtCwvF,IACI/hF,KACDqpD,EAAQ92D,UAAW,wBAAoB,GAC1CwvF,IACI/hF,KACDqpD,EAAQ92D,UAAW,eAAW,GACjCwvF,IACI/hF,KACDqpD,EAAQ92D,UAAW,uBAAmB,GACzCwvF,IACI/hF,KACDqpD,EAAQ92D,UAAW,wBAAoB,GAC1CwvF,IACIxiF,KAAesga,KAChBx2W,EAAQ92D,UAAW,cAAU,GAChCwvF,IACI/hF,KACDqpD,EAAQ92D,UAAW,YAAQ,GACvB82D,GACTo5C,ICt7IE+hV,GAAgC,WAChC,SAASA,EAAex3Y,GACpB91C,KAAK81C,QAAUA,EAslBnB,OAhlBAw3Y,EAAejyb,UAAUgob,cAAgB,SAAUrwa,GAC/C,IAAIu6a,EACAzV,EACA19Y,EAGA2D,EADAvhC,EAAO,OAEPgxb,KACA/wZ,EAASzpB,EAAQypB,WACjByvB,EAASl5C,GAAWA,EAAQk5C,OAASl5C,EAAQk5C,OAAS,UAC1DnuB,EAAO/qB,GAAWA,EAAQ+qB,KAAO/qB,EAAQ+qB,KAAO,WAChD,IAAIrH,EAAS12B,KAAKytb,iBAAiBvhY,EAAQl5C,GACvCA,EAAQ0jB,SACRohZ,GAAe,EACfphZ,EAAO3pB,EAAIiG,EAAQ0jB,OAAO3pB,EAAIiG,EAAQ0jB,OAAO3pB,EAAI2pB,EAAO3pB,EACxD2pB,EAAO1pB,EAAIgG,EAAQ0jB,OAAO1pB,EAAIgG,EAAQ0jB,OAAO1pB,EAAI0pB,EAAO1pB,EACxD0pB,EAAO1gB,MAAQhD,EAAQ0jB,OAAO1gB,OAAS0gB,EAAO1gB,MAC9C0gB,EAAO3gB,OAAS/C,EAAQ0jB,OAAO3gB,QAAU2gB,EAAO3gB,QAEpD0mB,GACI/vB,SAAoBvR,IAAfshC,EAAO/vB,IAAoB+vB,EAAO/vB,IAAM,GAC7CC,YAA0BxR,IAAlBshC,EAAO9vB,OAAuB8vB,EAAO9vB,OAAS,GACtDF,WAAwBtR,IAAjBshC,EAAOhwB,MAAsBgwB,EAAOhwB,MAAQ,GACnDD,UAAsBrR,IAAhBshC,EAAOjwB,KAAqBiwB,EAAOjwB,KAAO,IAExCxM,KAAK81C,QAAQgc,MACV,iBAAX5F,IACAx1B,EAAO3pB,GAAK0vB,EAAOjwB,KACnBkqB,EAAO1pB,GAAKyvB,EAAO/vB,IACnBgqB,EAAO1gB,OAASymB,EAAOjwB,KAAOiwB,EAAOhwB,MACrCiqB,EAAO3gB,QAAU0mB,EAAO/vB,IAAM+vB,EAAO9vB,QAEzC,IAAIokN,EAAW/9M,EAAQ+9M,UAAY,UACnC,GAAuB,QAAnB/9M,EAAQgpB,QAER,GAAa,QADbx/B,EAAOwD,KAAK0tb,UAAU16a,EAAS0jB,EAAQ+F,EAAQsB,EAAM+5Y,EAAc5rX,EAAQ6kK,IAEvE,OAAOv0N,MAGV,CACD+wb,EAAWv6a,EAAQgpB,OACnBhpB,EAAQ0jB,OAASA,EACjB1jB,EAAQypB,OAASA,EACjB,IAAI3f,EAAMsd,EAAUp6B,KAAK2tb,aAAa36a,EAASypB,GAC/C,GAAa,SAATsB,EACA,OAAO3D,EAEX,IAAI42L,GAAS,IAAIwpH,eAAgBC,kBAAkB39T,GACnD0wa,EAAQhpb,KAAKwsN,GAEjB,GAAa,aAATjzL,GAAgC,OAATvhC,EACvB,IAOK,IAAIsgC,EAAI,EAAGA,EAAI0wZ,EAAQ/wb,OAAQqgC,IAAK,CACrC,IAAIqkH,EAAO,IAAIgwE,MAAMq8N,EAAQ1wZ,KAAOp2B,KAAM,6BAC1C,GAA0B,SAAtB8E,GAAQmb,KAAK8Q,KACb57B,OAAOstF,UAAU2xP,iBAAiB35L,EAAM4vE,EAAW,IAAMw8N,OAExD,CACD,IAAIK,EAAMptb,SAASW,cAAc,KAC7BysB,EAAM+jM,IAAIC,gBAAgBzwE,GAC9BysS,EAAIl/Z,KAAOd,EACXgga,EAAIpqb,aAAa,WAAYutN,EAAW,IAAMw8N,GAC9C,IAAI1sb,EAAIL,SAASiT,YAAY,eAC7B5S,EAAEgtb,eAAe,SAAS,GAAM,EAAMhyb,OAAQ,EAAG,EAAG,EAAG,EAAG,GAAG,GAAO,GAAO,GAAO,EAAO,EAAG,MAC5F+xb,EAAIj6a,cAAc9S,IAI9B,OAAO,MAEXysb,EAAejyb,UAAUqyb,UAAY,SAAU16a,EAAS0jB,EAAQ+F,EAAQsB,EAAM+5Y,EAAc5rX,EAAQ6kK,GAChG,IACIw8N,EACAnzZ,EAFAr6B,EAAQC,KAGZgT,EAAQ0jB,OAASA,EACjB1jB,EAAQk5C,OAASA,EACjB,IAEI4hY,KACJ9tb,KAAK+tb,uBAAuB/6a,EAAS0jB,GACrC,IAAIgtW,EAAS1jY,KAAKgub,iBACdt3Z,OAAQA,EAAQ+F,OAAQA,EAAQyvB,OAAQA,EAAQpgB,OAAQ94B,EAAc,OACtE+4B,OAAQ/4B,EAAc,QACvB8ka,GACHyV,EAAWv6a,EAAQgpB,QAAU,MAC7B,IAAIs5J,EAAQl7J,EAAUspW,EAAO31S,YAC7B,GAAa,SAAThwD,EACA,OAAO3D,EAEX,GAAIpnB,EAAQgka,aAAc,CAMtB,GALAhka,EAAQssO,WAAatsO,EAAQssO,WAAatsO,EAAQssO,WAAat/O,KAAK81C,QAAQyb,aAAax7C,OACzF/C,EAAQ0oR,UAAY1oR,EAAQ0oR,UAAY1oR,EAAQ0oR,UAAY17R,KAAK81C,QAAQyb,aAAav7C,MACtFhD,EAAQssO,WAAatsO,EAAQssO,WAAatsO,EAAQssO,WAAaokJ,EAAO1tX,MACtEhD,EAAQ0oR,UAAY1oR,EAAQ0oR,UAAY1oR,EAAQ0oR,UAAYgoG,EAAO3tX,OACnE0mB,EAASzpB,EAAQypB,WACbzpB,EAAQ84O,kBACyB,cAA5B94O,EAAQ84O,iBAAmC94O,EAAQssO,WAAatsO,EAAQ0oR,WAC7C,aAA5B1oR,EAAQ84O,iBAAkC94O,EAAQ0oR,UAAY1oR,EAAQssO,YAAY,CAClF,IAAIvxN,EAAO/a,EAAQ0oR,UACnB1oR,EAAQ0oR,UAAY1oR,EAAQssO,WAC5BtsO,EAAQssO,WAAavxN,EAG7B/a,EAAQypB,QACJ/vB,IAAMs1C,MAAMvlB,EAAO/vB,KAAoB,EAAb+vB,EAAO/vB,IACjCC,OAASq1C,MAAMvlB,EAAO9vB,QAA0B,EAAhB8vB,EAAO9vB,OACvCH,KAAOw1C,MAAMvlB,EAAOjwB,MAAsB,EAAdiwB,EAAOjwB,KACnCC,MAAQu1C,MAAMvlB,EAAOhwB,OAAwB,EAAfgwB,EAAOhwB,OAEzC,IAAIgkF,EAAQjwF,SAASW,cAAc,OAC/B2mJ,GACAxkJ,GAAMtD,KAAK81C,QAAQ90C,QAAQsC,GAAK,cAChChE,IAAOg2L,GAEX7kG,EAAMjtF,aAAa,KAAMxD,KAAK81C,QAAQ90C,QAAQsC,GAAK,eACnDowC,GAAiB+8C,EAAOq3D,GACxBr3D,EAAMrN,OAAS,WACX0qW,EAAS/tb,EAAMkub,iBAAiBx9V,EAAOz9E,GAAS,GAChDjT,EAAMmub,YAAYJ,EAAQ/8N,EAAUw8N,EAAUj4P,SAIlDw4P,GAAUx4P,GACVt1L,KAAKkub,YAAYJ,EAAQ/8N,EAAUw8N,EAAUj4P,GAEjD,OAAO,MAEXg4P,EAAejyb,UAAU6yb,YAAc,SAAUJ,EAAQ/8N,EAAUw8N,EAAUj4P,GAGzE,IAAK,IAFDk4P,KACA/wb,EAAYqxb,aAAkBpgZ,YAAgC,EAAhBogZ,EAAOrxb,OAChDogC,EAAI,EAAGA,EAAIpgC,EAAQogC,IAAK,CAO7B,IAAK,IAJDsxZ,EAFIL,EAAOjxZ,GACDttB,QAAQ,iBAAkB,IACrBrS,MAAM,KACrBkxb,EAAaC,KAAKF,EAAO,IACzBn9N,EAAS,IAAI+F,YAAYq3N,EAAW3xb,QACpC6xb,EAAW,IAAIj6R,WAAW28D,GACrB70N,EAAI,EAAGA,EAAIiyb,EAAW3xb,OAAQN,IACnCmyb,EAASnyb,GAAKiyb,EAAWrhV,WAAW5wG,GAExCqxb,EAAQhpb,KAAKwsN,GAyBjB,IAAK,IAvBD/xN,EAAU,SAAUskB,GACpB,IAAIuZ,EAAI,IAAIq0L,MAAMq8N,EAAQjqa,KAAO7c,KAAM,6BACvC,GAA0B,SAAtB8E,GAAQmb,KAAK8Q,KACb57B,OAAOstF,UAAU2xP,iBAAiBh+S,EAAGi0L,EAAW,IAAMw8N,OAErD,CACD,IAAIgB,EAAgB/tb,SAASW,cAAc,KACvCqtb,EAAU78N,IAAIC,gBAAgB90L,GAClCyxZ,EAAc7/Z,KAAO8/Z,EACrBD,EAAc/qb,aAAa,WAAYutN,EAAW,IAAMw8N,GACxD,IAAIkB,EAAejub,SAASiT,YAAY,eACxCg7a,EAAaZ,eAAe,SAAS,GAAM,EAAMhyb,OAAQ,EAAG,EAAG,EAAG,EAAG,GAAG,GAAO,GAAO,GAAO,EAAO,EAAG,MACvGsE,WAAW,WACPoub,EAAc56a,cAAc86a,IAClB,GAATlra,EAAI,MASRA,EAAI,EAAGA,EAAIiqa,EAAQ/wb,OAAQ8mB,IAChCtkB,EAAQskB,IAGhB+pa,EAAejyb,UAAUqzb,gBAAkB,SAAU17a,GAGjD,IAAK,IADD27a,EACKvwb,EAAK,EAAGytT,EAFL7rT,KAAK81C,QAAQgc,MAES1zD,EAAKytT,EAAQpvT,OAAQ2B,IAAM,CACzD,IAAImC,EAAOsrT,EAAQztT,GACfmC,EAAKi3B,WACoB,QAAnBxkB,EAAQgpB,QAAsBz7B,aAAgBg0D,IAA2Bh0D,aAAgBk0D,MACpE,QAAnBzhD,EAAQgpB,QAAsBz7B,aAAgBk0D,MAK9Ck6X,EAJCA,EAIYA,EAAW7pY,UAAUvkD,EAAKwR,QAAQ6yC,aAHlCrkD,EAAKwR,QAAQ6yC,cAS1C,IAAK,IAAI/hD,EAAK,EAAG0jb,EADAvmb,KAAK81C,QAAQ+b,WACchvD,EAAK0jb,EAAa9pb,OAAQoG,IAAM,CACxE,IAAIg9C,EAAY0mY,EAAa1jb,GACzBg9C,EAAUroB,UAKNm3Z,EAJCA,EAIYA,EAAW7pY,UAAUjF,EAAU9tC,QAAQ6yC,aAHvC/E,EAAU9tC,QAAQ6yC,aAO3C,OAAO+pY,GAAc,IAAIz4Z,GAAK,EAAG,EAAG,EAAG,IAE3Co3Z,EAAejyb,UAAUoyb,iBAAmB,SAAU1vZ,EAAM/qB,GACxD,IAAIqgB,EAAOrzB,KAAK0ub,gBAAgB17a,GAC5BxG,EAAO6mB,EAAK7mB,KACZE,EAAM2mB,EAAK3mB,IACXD,EAAQ4mB,EAAK5mB,MAAQ4mB,EAAK7mB,KAC1BG,EAAS0mB,EAAK1mB,OAAS0mB,EAAK3mB,IACnB,YAATqxB,IACI/9B,KAAK81C,QAAQyb,cAAgBvxD,KAAK81C,QAAQyb,aAAaylX,cACvDxqa,EAAO6mB,EAAK7mB,KACZE,EAAM2mB,EAAK3mB,IACP1M,KAAK81C,QAAQyb,aAAav7C,QAC1BxJ,EAAOH,KAAK+S,MAAM5S,EAAOxM,KAAK81C,QAAQyb,aAAav7C,OAAShW,KAAK81C,QAAQyb,aAAav7C,MACtFvJ,EAAQJ,KAAKwmB,KAAKQ,EAAK5mB,MAAQzM,KAAK81C,QAAQyb,aAAav7C,OAAShW,KAAK81C,QAAQyb,aAAav7C,MAAQxJ,GAEpGxM,KAAK81C,QAAQyb,aAAax7C,SAC1BrJ,EAAML,KAAK+S,MAAM1S,EAAM1M,KAAK81C,QAAQyb,aAAax7C,QAAU/V,KAAK81C,QAAQyb,aAAax7C,OACrFpJ,EAASN,KAAKwmB,KAAKQ,EAAK1mB,OAAS3M,KAAK81C,QAAQyb,aAAax7C,QAAU/V,KAAK81C,QAAQyb,aAAax7C,OAASrJ,GAExF,IAAf2mB,EAAKrd,OAAoD,OAApChW,KAAK81C,QAAQyb,aAAav7C,QAChDvJ,EAAQzM,KAAK81C,QAAQyb,aAAav7C,OAEjB,IAAhBqd,EAAKtd,QAAsD,OAArC/V,KAAK81C,QAAQyb,aAAax7C,SACjDpJ,EAAS3M,KAAK81C,QAAQyb,aAAax7C,UAInC/V,KAAK81C,QAAQyb,aAAav7C,QAC1BxJ,EAAO,EACPC,EAAQzM,KAAK81C,QAAQyb,aAAav7C,OAElChW,KAAK81C,QAAQyb,aAAax7C,SAC1BrJ,EAAM,EACNC,EAAS3M,KAAK81C,QAAQyb,aAAax7C,UAI/C,IAAI06B,EAAY,IAAIva,GAKpB,OAJAua,EAAU1jC,EAAIP,EACdikC,EAAUzjC,EAAIN,EACd+jC,EAAUz6B,MAAQvJ,EAClBgkC,EAAU16B,OAASpJ,EACZ8jC,GAEX68Y,EAAejyb,UAAU0yb,uBAAyB,SAAU/6a,EAAS0jB,GAGjE1jB,EAAc,OAAI,EAClBA,EAAc,OAAI,EAClBA,EAAQssO,WAAatsO,EAAQssO,YAAct/O,KAAK81C,QAAQyb,aAAax7C,OACrE/C,EAAQ0oR,UAAY1oR,EAAQ0oR,WAAa17R,KAAK81C,QAAQyb,aAAav7C,MACnE,IAAID,EAAS/C,EAAQssO,YAAc5oN,EAAO3gB,OACtCC,EAAQhD,EAAQ0oR,WAAahlQ,EAAO1gB,MAChB,YAApBhD,EAAQkvY,SAA6C,SAApBlvY,EAAQkvY,SAA0C,UAApBlvY,EAAQkvY,UACvElvY,EAAc,OAAIgD,EAAQ0gB,EAAO1gB,MACjChD,EAAc,OAAI+C,EAAS2gB,EAAO3gB,OACV,SAApB/C,EAAQkvY,QACRlvY,EAAc,OAAIA,EAAc,OAAI3G,KAAK0T,IAAI/M,EAAc,OAAGA,EAAc,QAEnD,UAApBA,EAAQkvY,UACblvY,EAAc,OAAIA,EAAc,OAAI3G,KAAKC,IAAI0G,EAAc,OAAGA,EAAc,SAEhF0jB,EAAO1gB,MAAQA,EACf0gB,EAAO3gB,OAASA,GAEpB2gB,EAAO3pB,GAAKiG,EAAc,OAC1B0jB,EAAO1pB,GAAKgG,EAAc,QAE9Bs6a,EAAejyb,UAAUsyb,aAAe,SAAU36a,EAASypB,GACvD,IAAI3f,EAAM9c,KAAK81C,QAAQ9V,UAAUhgC,KAAK81C,QAAQ90C,QAAQsC,GAAK,eAAgB0P,EAAQ0jB,OAAO1gB,MAAOhD,EAAQ0jB,OAAO3gB,QAChHvV,SAASuL,KAAKpK,YAAYmb,GAC1B,IAAI+f,EAAI8W,GAAiB,KAAOrwC,GAAMtD,KAAK81C,QAAQ90C,QAAQsC,GAAK,oBAC5D4oD,EAASl5C,GAAWA,EAAQk5C,OAASl5C,EAAQk5C,OAAS,UACtDx1B,EAAS12B,KAAKytb,iBAAiBvhY,EAAQl5C,GACvCxG,EAAOkqB,EAAO3pB,EACdL,EAAMgqB,EAAO1pB,EACbgJ,EAAQ0gB,EAAO1gB,MACfD,EAAS2gB,EAAO3gB,OACpB+G,EAAInb,YAAYk7B,GAChB,IAAIirH,GACAz6I,UAAa,eAAiB2F,EAAQ0jB,OAAO3pB,EAAI0vB,EAAOjwB,MAAQ,OAASwG,EAAQ0jB,OAAO1pB,EAAIyvB,EAAO/vB,KAAO,IAC1GK,EAAKmc,OAAO1c,GACZQ,EAAKkc,OAAOxc,GAAMsJ,MAASkT,OAAOlT,GAAQD,OAAUmT,OAAOnT,IAE/D69B,GAAgB/W,EAAGirH,GACnB,IAAIz3H,EAAW7vB,SAASosB,eAAe5sB,KAAK81C,QAAQ90C,QAAQsC,GAAK,wBAAwB1B,WAAU,GAOnG,GANAkmJ,GACI/6I,EAAK,EACLC,EAAK,EAAGgJ,MAASkT,OAAOlT,EAAQymB,EAAOjwB,KAAOiwB,EAAOhwB,OAAQsJ,OAAUmT,OAAOnT,EAAS0mB,EAAO/vB,IAAM+vB,EAAO9vB,SAE/GinC,GAAgBvjB,EAAUy3H,GAC1BhrI,EAAInb,YAAY0uB,GACU,QAAtBrwB,KAAK81C,QAAQ/X,KAAgB,CAC7B,IAAI6wZ,EAAkBn8Y,GAAmBzyC,KAAK81C,QAAQ90C,QAAQsC,IAC9DwZ,EAAInb,YAAYitb,EAAgBhia,eAAe5sB,KAAK81C,QAAQu6X,aAAa/sa,IAAI1B,WAAU,IACvF,IAAK,IAAIzF,EAAI,EAAGA,EAAI2gB,EAAIvL,WAAW9U,OAAQN,IAAK,CAC5C,IAAI6E,EAAU8b,EAAIvL,WAAWpV,GACV,yBAAf6E,EAAQsC,IACRtC,EAAQwC,aAAa,YAAa,eAAiBkzB,EAAO3pB,EAAI0vB,EAAOjwB,MAAQ,OACvEkqB,EAAO1pB,EAAIyvB,EAAO/vB,KAAO,UAItC,CACDmwB,EAAI8W,GAAiB,KAAOrwC,GAAMtD,KAAK81C,QAAQ90C,QAAQsC,GAAK,kBAC5DwZ,EAAInb,YAAYk7B,GAChBA,EAAEr5B,aAAa,YAAa,eAAiBwP,EAAQ0jB,OAAO3pB,EAAI0vB,EAAOjwB,MAAQ,OACzEwG,EAAQ0jB,OAAO1pB,EAAIyvB,EAAO/vB,KAAO,KAC3B1M,KAAK81C,QAAQgc,MAAzB,IAEIjkC,EAAW,IAAI2iY,GAAgB,GAAI,MAAM,GACzCe,EAAYj+W,GAAatzC,KAAK81C,QAAQ90C,QAAQsC,IAClDtD,KAAK81C,QAAQuzY,sBAAsBvsa,EAAK+Q,EAAU0jY,GAAW,GAGjE,OADA/wZ,SAASuL,KAAKzG,YAAYwX,GACnBA,GAEXwwa,EAAejyb,UAAU2yb,gBAAkB,SAAUh7a,EAAS8ka,GAC1D,IAII5rX,EAASl5C,EAAQ0jB,OACjB+F,EAASzpB,EAAQypB,OACjBsB,EAAO/qB,GAAWA,EAAQk5C,OAASl5C,EAAQk5C,OAAS,UACpD0uO,EAAa56R,KAAKytb,iBAAiB1vZ,EAAM/qB,GACzC67a,EAAU7ub,KAAK81C,QAAQyb,aAAa9hC,WAAW+G,MAC/CktW,EAAS/2S,GAAeI,aAAa/sF,KAAK81C,QAAQ90C,QAAQsC,GAAK,WAAY0P,EAAQ0jB,OAAO1gB,MAAOhD,EAAQ0jB,OAAO3gB,QAEhHpQ,EAAU+9X,EAAOx2S,WAAW,MAChCvnF,EAAQgpF,WAAWziC,EAAOn/C,GAAIm/C,EAAOl/C,GACrCrH,EAAQ8nF,OACR9nF,EAAQwoF,UAAYnuF,KAAK81C,QAAQyb,aAAa9hC,WAAW+G,MACzD01B,EAAkB,YAATnuB,EAAqB68P,EAAa1uO,EAC3CvmD,EAAQyoF,SAASliC,EAAOn/C,EAAGm/C,EAAOl/C,EAAGk/C,EAAOl2C,MAAOk2C,EAAOn2C,QAC1D,IAAI+4a,EAAQ9ub,KAAK81C,QAAQyb,aAAa9hC,WACtC,GAAIq/Z,GAASA,EAAMvyb,OAAQ,CACvBq+R,EAAa56R,KAAKytb,iBAAiB1vZ,EAAM/qB,GACzC,IAAIsiL,EAAQ,IAAI1lG,MAChB0lG,EAAMh2L,IAAMwvb,EAAMvyb,OAClB,IAAIwyb,EAAcn0J,EAAW5kR,MAAQs/K,EAAMt/K,MACvCg5a,EAAcp0J,EAAW7kR,OAASu/K,EAAMv/K,OACxChJ,EAAI6tR,EAAW7tR,EACfC,EAAI4tR,EAAW5tR,EACfgJ,EAAQ4kR,EAAW5kR,MACnBD,EAAS6kR,EAAW7kR,OACpBk5a,EAAajvb,KAAKkvb,kBAAkBJ,GACxC,GAAoB,SAAhBA,EAAMrjY,OAAoC,SAAhBqjY,EAAM36X,MAAkB,CAClD,IAAIg7X,EAA6B,SAAhBL,EAAMrjY,MAAmBp/C,KAAK0T,IAAIgva,EAAaC,GAAe3ib,KAAKC,IAAIyib,EAAaC,GACrGh5a,EAAQm5a,EAAa75P,EAAMt/K,MAC3BD,EAASo5a,EAAa75P,EAAMv/K,OACxB+4a,EAAM36X,MAAM51D,QAAQ,SAAW,EAC/BwO,IAAM6tR,EAAW5kR,MAAQA,GAAS,EAE7B84a,EAAM36X,MAAM51D,QAAQ,SAAW,IACpCwO,EAAIA,EAAI6tR,EAAW5kR,MAAQA,GAE3B84a,EAAM36X,MAAM51D,QAAQ,SAAW,EAC/ByO,IAAM4tR,EAAW7kR,OAASA,GAAU,EAE/B+4a,EAAM36X,MAAM51D,QAAQ,SAAW,IACpCyO,EAAIA,EAAI4tR,EAAW7kR,OAASA,GAEmB,SAA/C/V,KAAK81C,QAAQyb,aAAa9hC,WAAW+G,OAAmE,gBAA/Cx2B,KAAK81C,QAAQyb,aAAa9hC,WAAW+G,QAC9F7wB,EAAQwoF,UAAY,QACpBxoF,EAAQyoF,SAASwsM,EAAW7tR,EAAIiG,EAAc,OAAG4nR,EAAW5tR,EAAIgG,EAAc,OAAG4nR,EAAW5kR,MAAQhD,EAAc,OAAG4nR,EAAW7kR,OAAS/C,EAAc,SAEvJi8a,GACAtpb,EAAQ+pF,UAAU4lG,EAAOvoL,EAAGC,EAAGmib,EAAa75P,EAAMt/K,MAAOm5a,EAAa75P,EAAMv/K,aAG3Ek5a,GACLtpb,EAAQ+pF,UAAU4lG,EAAOvoL,EAAGC,EAAG4tR,EAAW5kR,MAAO4kR,EAAW7kR,aAIhEpQ,EAAQwoF,UAAwB,gBAAZ0gW,EAA4B,QAAUA,EAC1Dlpb,EAAQyoF,SAAUwsM,EAAW7tR,EAAIiG,EAAc,OAAKypB,EAAOjwB,KAAOouR,EAAW5tR,EAAIgG,EAAc,OAAKypB,EAAO/vB,IAAMkuR,EAAW5kR,MAAQhD,EAAc,OAAKypB,EAAOjwB,KAAOiwB,EAAOhwB,MAAQuG,EAAc,OAAI4nR,EAAW7kR,OAAU0mB,EAAO/vB,IAAM+vB,EAAO9vB,QAEnP,IAAIyib,EAAUpvb,KAAK81C,QAAQyb,aAAa9hC,WAAW+G,MAC/C64Z,EAAUrvb,KAAK81C,QAAQyb,aAAav7C,MACpCq5a,IACA1pb,EAAQ4nF,YAA0B,SAAZ6hW,EAAqB,cAAgBA,EAC3Dzpb,EAAQynF,UAAYiiW,EACpB1pb,EAAQ2pb,WAAW10J,EAAW7tR,EAAIiG,EAAc,OAAG4nR,EAAW5tR,EAAIgG,EAAc,OAAG4nR,EAAW5kR,MAAQhD,EAAc,OAAG4nR,EAAW7kR,OAAS/C,EAAc,SAE7JrN,EAAQkoF,UACR,IAAI0jU,EAAYj+W,GAAatzC,KAAK81C,QAAQ90C,QAAQsC,IAC9CuqB,EAAW,IAAI2iY,GAAgB,GAAI,MAAM,GAE7C,OADAxwZ,KAAK81C,QAAQuzY,sBAAsB3lD,EAAQ71W,EAAU0jY,GAAW,GACzD7tB,GAEX4pD,EAAejyb,UAAU6zb,kBAAoB,SAAUlL,GACnD,IAEItgD,EAFAp1V,GAAQ,EAGZ,GAAI01Y,EAAgBznb,OAChB,IAEI,IAAI0wF,GADJy2S,EAAS/2S,GAAeI,aAAa/sF,KAAK81C,QAAQ90C,QAAQsC,GAAK,cAAe,IAAK,MAClE4pF,WAAW,MAC5BD,EAAIQ,OACJ,IAAI6nG,EAAQ,IAAI1lG,MAChB0lG,EAAMh2L,IAAM0kb,EAAgBznb,OAC5B0wF,EAAIyC,UAAU4lG,EAAO,EAAG,EAAG,IAAK,KAChCroG,EAAIY,UACM61S,EAAO31S,YAErB,MAAOltF,GACHytC,GAAQ,EAGhB,OAAOA,GAEXg/Y,EAAejyb,UAAUk0b,oBAAsB,SAAU92U,EAAKzlG,GAC1D,IAAIgD,EAAQ,EACRD,EAAS,EACT+W,EAAO,IAAIM,GAOf,GANApX,EAAQyiG,EAAIziG,MACZD,EAAS0iG,EAAI1iG,QACT/C,EAAQssO,YAActsO,EAAQ0oR,aAC9B3lR,EAAS/C,EAAQssO,WAAatsO,EAAQssO,WAAavpO,EACnDC,EAAQhD,EAAQ0oR,UAAY1oR,EAAQ0oR,UAAY1lR,GAEhDhD,EAAQ84O,kBACyB,cAA5B94O,EAAQ84O,iBAAmC/1O,EAASC,GAAsC,aAA5BhD,EAAQ84O,iBAAkC91O,EAAQD,GAAQ,CACzH,IAAIgY,EAAO/X,EACXA,EAAQD,EACRA,EAASgY,EAKjB,OAFAjB,EAAK/W,OAASA,EACd+W,EAAK9W,MAAQA,EACN8W,GAEXwga,EAAejyb,UAAU4yb,iBAAmB,SAAUx1U,EAAKzlG,EAASw8a,GAChE,IAGI9zJ,EACAp8C,EAJAmwM,KACAvub,EAAMV,SAASW,cAAc,OAC7BgvJ,EAAWnwJ,KAAKuvb,oBAAoB92U,EAAKzlG,GAGzCypB,EAASzpB,EAAQypB,OACjBizZ,EAAQjzZ,EAAOjwB,KACfmjb,EAAOlzZ,EAAO/vB,IACdkjb,EAASnzZ,EAAOhwB,MAChBojb,EAAUpzZ,EAAO9vB,OACjBI,EAAI,EAER2uR,EAAYvrI,EAASn6I,MAAQjJ,EAC7BuyO,EAAanvF,EAASp6I,OAFd,EAGR,IAAI+5a,EAAS,EACTC,EAAS,EACb,GAAI/8a,GAAWA,EAAQgka,cAAqC,YAAnBhka,EAAQk5C,OAAuB,CACpEhrD,EAAIwD,MAAMqR,OAAS,OACnB7U,EAAIwD,MAAMsR,MAAQ,OAClB,IAAIg6a,EAAYv3U,EAAI1iG,OAChBk6a,EAAWx3U,EAAIziG,MAEf7Z,EAAI,EACJonB,EAAI,EACJqK,OAAM,EACNqyX,EAAY,EACZC,EAAa,EACbjzT,OAAM,EACNy2S,OAAS,EACb,EAAG,CACC,GACIuc,EAAY9vP,EAASn6I,MACrBkqY,EAAa/vP,EAASp6I,OACjB+5a,EAAS3/R,EAASn6I,OAAUi6a,IAC7BhwC,EAAagwC,EAAWH,GAEvBC,EAAS5/R,EAASp6I,QAAWi6a,IAC9B9vC,EAAc8vC,EAAYD,IAG9B9iW,GADAy2S,EAAS/2S,GAAeI,aAAa/sF,KAAK81C,QAAQ90C,QAAQsC,GAAK,iBAAkB6sJ,EAASn6I,MAAOm6I,EAASp6I,SAC7Fm3E,WAAW,OACpBwC,UAAU+oB,EAAK1rG,EAAI+ib,EAASJ,EA9BpC,EA8B+CK,EAASJ,EAAM1vC,EAAY2vC,EAASF,EAAOxvC,EAAa2vC,EAAUF,EAAM,EAAID,EAAO,EAAIC,EAAM1vC,EAAY2vC,EAASF,EAAOxvC,EAAa2vC,EAAUF,GACtLG,EAAS3/R,EAASn6I,OAAUi6a,IAC7BH,GAAWA,EAASG,GAExBria,EAAM81W,EAAO31S,YACbd,EAAIY,UACJiiW,GAAUp0J,EACN8zJ,EACAC,EAAWjrb,KAAKopB,GAGhB5tB,KAAKkwb,WAAWhvb,EAAK0sB,EAAKzxB,EAAI,GAAKonB,EAAGm4Q,EAAY,MAAOp8C,EAAa,OAE1EnjP,UACK2zb,EAASG,GAClB1sa,IACApnB,EAAI4Q,EAAI+ib,EAAS,EACZC,EAAS5/R,EAASp6I,QAAWi6a,IAC9BD,GAAWA,EAASC,GAExBD,GAAUzwM,QACLywM,EAASC,OAGjB,CACD,IAGIG,EACAC,EAFAC,EAAarwb,KAAKuvb,oBAAoB92U,EAAKzlG,GAG/Cm9a,EAAcE,EAAWr6a,MACzBo6a,EAAeC,EAAWt6a,OACtBk3E,OAAM,EACNy2S,OAAS,EACT91W,OAAM,GAEVq/D,GADAy2S,EAAS/2S,GAAeI,aAAa/sF,KAAK81C,QAAQ90C,QAAQsC,GAAK,WAAY6sb,EAAaC,IAC3EljW,WAAW,OACpBwC,UAAU+oB,EAZJ,EAYei3U,EAXf,EAW4BC,EAAMl3U,EAAIziG,OAAS45a,EAASF,GAAQj3U,EAAI1iG,QAAU45a,EAAOE,GAAU,EAAIH,EAAO,EAAIC,EAAMQ,GAAeP,EAASF,GAAQU,GAAgBT,EAAOE,IACrLjia,EAAM81W,EAAO31S,YACbd,EAAIY,UACJ7tF,KAAKkwb,WAAWhvb,EAAK0sB,EAAK,GAE9B,OAAI4ha,EACOC,EAGAvub,GAGfosb,EAAejyb,UAAU60b,WAAa,SAAUhvb,EAAK0sB,EAAKzxB,EAAGu/R,EAAWp8C,GACpE,IACIx3F,EADArvC,EAAMj4G,SAASW,cAAc,OAE7B23L,EAAWt4L,SAASW,cAAc,OAEtCuyC,GAAiB+kE,EADjBqvC,GAASvmB,MAAS,uBAAwB78H,MAAS,SAAWg3R,EAAY,UAAYp8C,IAEtF5rM,GAAiBolJ,EAAUhxC,GAE3Bp0G,GAAiB+kE,EADjBqvC,GAASxkJ,GAAMtD,KAAK81C,QAAQ90C,QAAQsC,GAAK,qBAAuBnH,EAAGuI,MAAS,aAAcpF,IAAOsuB,IAEjGkrK,EAASn3L,YAAY82G,GACrBv3G,EAAIS,YAAYm3L,IAMpBw0P,EAAejyb,UAAU0F,MAAQ,SAAUiS,GACvC,IAAIjT,EAAQC,KACZgT,EAAQ+qB,KAAO,OACf/qB,EAAQypB,QAAW/vB,IAAK,EAAGC,OAAQ,EAAGF,MAAO,EAAGD,KAAM,GACtD,IAAIohB,EAAM5tB,KAAKqjb,cAAcrwa,GACzBylG,EAAMj4G,SAASW,cAAc,OAC7B2mJ,GACAxkJ,GAAMtD,KAAK81C,QAAQ90C,QAAQsC,GAAK,cAChChE,IAAOsuB,GAEX8lB,GAAiB+kE,EAAKqvC,GACtBrvC,EAAIr1B,OAAS,WACT,IAAIliF,EAAMnB,EAAMkub,iBAAiBx1U,EAAKzlG,GAElCs9a,EAAYz0b,OAAO6F,KAAK,IACX,MAAb4ub,GACKpvb,aAAewsC,cAChB4iZ,EAAU9vb,SAASuB,MAAM,mMAGzBuub,EAAU9vb,SAASuB,MAAM,gEACzBuub,EAAU9vb,SAASuB,MAAM,WAAab,EAAIc,UAAY,aACtDsub,EAAU9vb,SAASyB,WAUnCqrb,EAAejyb,UAAUiX,QAAU,aAQnCg7a,EAAejyb,UAAUkkC,cAAgB,WAIrC,MAAO,kBAEJ+tZ,KCrmBPhjW,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAexC4lW,GAA4B,SAAUplW,GAEtC,SAASolW,IACL,IAAIxwb,EAAmB,OAAXorF,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAUhE,OANAD,EAAMq5B,YAAc,WAKpBr5B,EAAM8iZ,qBAAkB1nZ,EACjB4E,EAgJX,OA5JAuqF,GAAUimW,EAAYplW,GAkBtBolW,EAAWl1b,UAAUugS,QAAU,SAAUjmQ,GACrC,IAAIu2N,EAAkC,eAArBlsP,KAAKo5B,YAA+Bp5B,KAAKwwb,sBAAwBxwb,KAAKywb,oBAEvF,OADAzwb,KAAK2vC,YAAc3vC,KAAK0wb,kBAAkB/6Z,EAAeu2N,GAClDlsP,KAAK2vC,aAMhB4gZ,EAAWl1b,UAAUsmZ,QAAU,SAAUhyW,GACrC,IAAIu8M,EAAkC,eAArBlsP,KAAKo5B,YAA+Bp5B,KAAK2wb,uBAAyB3wb,KAAK4wb,qBAGxF,OAFA5wb,KAAK0sC,WAAa1sC,KAAK6wb,kBAAkBlhZ,EAAau8M,GACtDlsP,KAAK4hZ,eACE5hZ,KAAK0sC,YAMhB6jZ,EAAWl1b,UAAUq1b,kBAAoB,SAAU/6Z,EAAeu2N,GAC9D,IAAI82J,OAAU7nZ,EACd,QAAsBA,IAAlB6E,KAAKoa,UAA0Bpa,KAAKoa,SAAS3d,OAAS,EACtD,IAAK,IAAI2B,EAAK,EAAGyE,EAAK7C,KAAKoa,SAAUhc,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvD,IAAIiC,EAAQwC,EAAGzE,GACfiC,EAAMysC,gBAAkB9sC,KAAK6sC,YAAc7sC,KAAK8sC,gBAEhDzsC,EAAMu7R,QAAQjmQ,GACd,IAAI6tX,EAAYnjZ,EAAMsvC,YAAYtwC,QAElCW,KAAK8wb,iBAAiBzwb,EAAOmjZ,GAEH,IAAtBnjZ,EAAMwsC,cACN22W,EAAYt0W,GAAWs0W,EAAWnjZ,EAAMwsC,mBAG5B1xC,IAAZ6nZ,EACAA,EAAUQ,EAGVt3J,EAAWs3J,EAAWR,GAQlC,OAJAA,EAAU73T,EAAO9vF,UAAUqmZ,oBAAoBpgZ,KAAKtB,KAAMgjZ,EAASrtX,GACnE31B,KAAKqjZ,gBAAgBL,GAErBhjZ,KAAKsjZ,aAAaN,GACXA,GAEXutC,EAAWl1b,UAAUw1b,kBAAoB,SAAUlhZ,EAAah6B,GAC5D,QAAsBxa,IAAlB6E,KAAKoa,UAA0Bpa,KAAKoa,SAAS3d,OAAS,EAAG,CACzD,IAAIsQ,OAAI,EACJC,OAAI,EACRD,EAAI/M,KAAK6L,QAAU8jC,EAAY35B,MAAQhW,KAAK2sC,MAAM5/B,EAAI/M,KAAKo5D,QAAQ5sD,KACnEQ,EAAIhN,KAAKiM,QAAU0jC,EAAY55B,OAAS/V,KAAK2sC,MAAM3/B,EAAIhN,KAAKo5D,QAAQ1sD,IACpE,IAAK,IAAItO,EAAK,EAAGyE,EAAK7C,KAAKoa,SAAUhc,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvD,IAAIiC,EAAQwC,EAAGzE,GACXolZ,EAAYnjZ,EAAMsvC,YAAYtwC,QAC9B0xb,EAAcvtC,EACO,aAArBxjZ,KAAKo5B,YACLpsB,GAAK3M,EAAMo8B,OAAO/vB,IAGlBK,GAAK1M,EAAMo8B,OAAOjwB,KAEI,IAAtBnM,EAAMwsC,cACNkkZ,EAAc7hZ,GAAWs0W,EAAWnjZ,EAAMwsC,cAE9C,IAAInZ,EAAS/d,EAAe5I,EAAGC,EAAG3M,EAAOL,KAAM2vC,EAAaohZ,GAC5D5lW,EAAO9vF,UAAUkoZ,0BAA0BjiZ,KAAKtB,KAAMK,EAAOqzB,GAC7DrzB,EAAMshZ,QAAQ6B,GACW,aAArBxjZ,KAAKo5B,YACLpsB,GAAK+jb,EAAYh7a,OAAS1V,EAAMo8B,OAAO9vB,OAGvCI,GAAKgkb,EAAY/6a,MAAQ3V,EAAMo8B,OAAOhwB,OAIlD,OAAOkjC,GAEX4gZ,EAAWl1b,UAAUm1b,sBAAwB,SAAUnwb,EAAOC,GAC1DA,EAAOyV,OAAS1J,KAAKC,IAAIjM,EAAM0V,OAAQzV,EAAOyV,QAC9CzV,EAAO0V,OAAS3V,EAAM2V,OAE1Bu6a,EAAWl1b,UAAUo1b,oBAAsB,SAAUpwb,EAAOC,GACxDA,EAAO0V,MAAQ3J,KAAKC,IAAIjM,EAAM2V,MAAO1V,EAAO0V,OAC5C1V,EAAOyV,QAAU1V,EAAM0V,QAE3Bw6a,EAAWl1b,UAAUs1b,uBAAyB,SAAU5jb,EAAGC,EAAG3M,EAAOC,EAAQ0wb,EAAajuC,GACtF,IAAI9hY,EAAU,EACd,GAAgC,QAA5B5gB,EAAMqzD,kBACNzyC,EAAUjU,EAAI3M,EAAMo8B,OAAO/vB,IAAMq2Y,EAAYhtY,OAAS,OAErD,GAAgC,WAA5B1V,EAAMqzD,kBAAgC,CAE3CzyC,EADmB3gB,EAAO2L,QAAU+kb,EAAYj7a,QAAU,EAAIzV,EAAOqsC,MAAM3/B,GAClD1M,EAAO84D,QAAQzsD,OAAStM,EAAMo8B,OAAO9vB,OAASo2Y,EAAYhtY,OAAS,OAG5FkL,EAAU3gB,EAAO2L,QAAU+kb,EAAYj7a,OAASzV,EAAOqsC,MAAM3/B,EAAIgkb,EAAYj7a,OAAS,EAE1F,OAAShJ,EAAGA,EAAIg2Y,EAAY/sY,MAAQ,EAAGhJ,EAAGiU,IAE9Csva,EAAWl1b,UAAUu1b,qBAAuB,SAAU7jb,EAAGC,EAAG3M,EAAOC,EAAQ4jZ,EAAYV,GACnF,IAAIxiY,EAAU,EACd,GAAkC,SAA9B3gB,EAAMozD,oBACNzyC,EAAUjU,EAAI1M,EAAMo8B,OAAOjwB,KAAOg3Y,EAAUxtY,MAAQ,OAEnD,GAAkC,UAA9B3V,EAAMozD,oBAAiC,CAE5CzyC,EADkB1gB,EAAOuL,QAAUq4Y,EAAWluY,OAAS,EAAI1V,EAAOqsC,MAAM5/B,GAChDzM,EAAO84D,QAAQ3sD,MAAQpM,EAAMo8B,OAAOhwB,MAAQ+2Y,EAAUxtY,MAAQ,OAGtFgL,EAAU1gB,EAAOuL,QAAUq4Y,EAAWluY,MAAQ1V,EAAOqsC,MAAM5/B,EAAIm3Y,EAAWluY,MAAQ,EAEtF,OAASjJ,EAAGiU,EAAShU,EAAGA,EAAIw2Y,EAAUztY,OAAS,IAEnDw6a,EAAWl1b,UAAUgoZ,gBAAkB,SAAUv2X,GAC7C,QAAsB3xB,IAAlB6E,KAAKoa,UAA0Bpa,KAAKoa,SAAS3d,OAAS,EACtD,IAAK,IAAI2B,EAAK,EAAGyE,EAAK7C,KAAKoa,SAAUhc,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvD,IAAIiC,EAAQwC,EAAGzE,GACU,aAArB4B,KAAKo5B,YAC6B,YAA9B/4B,EAAMozD,sBACNpzD,EAAMsvC,YAAY35B,MAAQ8W,EAAK9W,OAIH,YAA5B3V,EAAMqzD,oBACNrzD,EAAMsvC,YAAY55B,OAAS+W,EAAK/W,UAMpDw6a,EAAWl1b,UAAUy1b,iBAAmB,SAAUzwb,EAAOysB,GACrDA,EAAK/W,QAAU1V,EAAMo8B,OAAO/vB,IAAMrM,EAAMo8B,OAAO9vB,OAC/CmgB,EAAK9W,OAAS3V,EAAMo8B,OAAOjwB,KAAOnM,EAAMo8B,OAAOhwB,OAE5C8jb,GACTn5X,ICtKE65X,GAA6B,WAK7B,SAASA,IACLjxb,KAAKkxb,aAiOT,OAzNAD,EAAY51b,UAAUiX,QAAU,aAQhC2+a,EAAY51b,UAAUkkC,cAAgB,WAIlC,MAAO,eAQX0xZ,EAAY51b,UAAUmqb,SAAW,SAAUhpb,EAAMs5C,GAC7C,IAAIytB,EAGAirF,EAAchyJ,EAAKgyJ,iBACvBjrF,EAAa/mE,EAAKA,MAAQgyJ,EAAoB,MAAKA,EAAoB,OAClEA,EAAYjrF,WAAairF,EAAYjrF,WAAWG,UAAOvoE,KAC1CooE,EAAW9mE,QACzBuD,KAAKmxb,gBAAgB30b,EAAM+mE,EAAYztB,IAS/Cm7Y,EAAY51b,UAAU6rb,WAAa,SAAU1qb,EAAMs5C,GAC/C,IAEI/2C,EAFAgB,EAAQC,KAGRsO,EAAS9R,EACb,GAHiBA,EAGFgyJ,uBAAuBhrF,GAAa,CAC/C,IAAI9H,EAAQptD,EAAOkgJ,YAAY4kC,aAC/B52L,EAAKgyJ,YAAYE,aAAahzF,GAAO43H,KAAK,SAAUzyL,GAEhD9B,EAAS8B,EAAM,OACVi1C,EAAQkxC,cACTjnF,EAAMoxb,gBAAgB30b,EAAMuC,EAAQ+2C,GACpCA,EAAQizY,iBACRjzY,EAAQtvB,QAAQ,cAAgBsvB,QAASA,SAKzDm7Y,EAAY51b,UAAU81b,gBAAkB,SAAU7ib,EAAQ9R,EAAMs5C,GAC5D91C,KAAKkxb,aACL,IAAIn0b,EACAmwT,EAGArvS,EACAuza,EAHAC,KACAh4X,KAGJ,QAAal+D,IAATqB,EAAoB,CACpB,IAAK,IAAIogC,EAAI,EAAGA,EAAIpgC,EAAKC,OAAQmgC,SAEAzhC,KAD7B4B,EAAMP,EAAKogC,IACHtuB,EAAOirD,WAAoD,OAAzBx8D,EAAIuR,EAAOirD,WACjB,iBAAzBx8D,EAAIuR,EAAOirD,eACsBp+D,IAApCk2b,EAAUt0b,EAAIuR,EAAOirD,WACrB83X,EAAUt0b,EAAIuR,EAAOirD,WAAWkB,MAAMj2D,KAAKzH,GAG3Cs0b,EAAUt0b,EAAIuR,EAAOirD,YAAekB,OAAQ19D,IAIhDs0b,EAAYrxb,KAAKsxb,wBAAwBv0b,EAAKs0b,EAAW/ib,EAAQ9R,GAEjE8R,EAAO0sL,OAASj+L,EAAIuR,EAAOhL,MAC3B4pT,GAAczyP,OAAQ19D,KAG9B,GAAImwT,EACA7zP,EAAW70D,KAAK0oT,QAGhB,IAAK,IAAI9uT,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAK+zb,GAAYjzb,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAChE,IAAIusJ,EAAI9nJ,EAAGzE,GACNusJ,GAAW,cAANA,GAA2B,OAANA,GAAsB,SAANA,GAC3CtxF,EAAW70D,KAAK6sb,EAAU1mS,IAItC,IAAK,IAAIxuJ,EAAI,EAAGA,EAAIk9D,EAAW58D,OAAQN,IACnC,IAAK,IAAIonB,EAAI,EAAGA,EAAI81C,EAAWl9D,GAAGs+D,MAAMh+D,OAAQ8mB,IAAK,CACjD1F,EAAOw7C,EAAWl9D,GAAGs+D,MAAMl3C,GAC3B,IAAIhjB,EAAOP,KAAKuxb,kBAAkBjjb,EAAQuP,EAAMi4B,GAChDA,EAAQgc,MAAMttD,KAAKjE,GACnBP,KAAKkxb,UAAUrza,EAAKvP,EAAOhL,KAAO/C,OAEhBpF,KADlBi2b,EAAYC,EAAU9wb,EAAK/D,KAAK8R,EAAOhL,OAEnCtD,KAAK0rT,iBAAiBp9S,EAAQ8ib,EAAW7wb,EAAK+C,GAAI+tb,EAAWv7Y,IAK7E91C,KAAKkxb,UAAY,MASrBD,EAAY51b,UAAUi2b,wBAA0B,SAAUv0b,EAAKs0b,EAAW/ib,EAAQ9R,GAG9E,IAAK,IADD8D,EADAg/D,EAAUviE,EAAIuR,EAAOirD,UAEhBp9D,EAAI,EAAGA,EAAImjE,EAAQ7iE,OAAQN,IAE5Bk1b,EADJ/wb,EAASg/D,EAAQnjE,IAEbk1b,EAAU/wb,GAAQm6D,MAAMj2D,KAAKzH,GAG7Bs0b,EAAU/wb,IAAYm6D,OAAQ19D,IAGtC,OAAOs0b,GAQXJ,EAAY51b,UAAUk2b,kBAAoB,SAAUjjb,EAAQuP,EAAMi4B,GAC9D,IAEI07Y,GAAclub,GADTipC,KACiB/vC,KAAMqhB,GAC5BsyC,EAAY9iB,GAAY/+B,EAAO6hD,WAC/BA,GACAA,EAAUqhY,EAAW3za,EAAMi4B,GAE/B,IAAI/4C,EAAM,IAAIoqD,GAAKrR,EAAS,QAAS07Y,GAAW,GAChD,OAAKxxb,KAAKs6D,mBAAmBv9D,EAAK+4C,EAASxnC,EAAOhL,GAAIgL,EAAOirD,UAIlDv5D,KAAKkxb,UAAUrza,EAAKvP,EAAOhL,KAH3BvG,GAMfk0b,EAAY51b,UAAUqwT,iBAAmB,SAAUp9S,EAAQhO,EAAQtD,EAAOy0b,EAAS37Y,GAI/E,IAAK,IAHDz1C,EACA+wb,EACA7wb,EACKgjB,EAAI,EAAGA,EAAIjjB,EAAOm6D,MAAMh+D,OAAQ8mB,IAAK,CAC1CljB,EAAQC,EAAOm6D,MAAMl3C,GACrBhjB,EAAOP,KAAKuxb,kBAAkBjjb,EAAQjO,EAAOy1C,GAC7C,IAAI47Y,GAAW,EACV1xb,KAAKs6D,mBAAmB/5D,EAAMu1C,EAASxnC,EAAOhL,GAAIgL,EAAOirD,UAK1Dm4X,GAAW,GAJX1xb,KAAKkxb,UAAU7wb,EAAMiO,EAAOhL,KAAO/C,EACnCu1C,EAAQgc,MAAMttD,KAAKjE,IAKlBP,KAAK2xb,kBAAkB77Y,EAAS94C,EAAOuD,EAAK+C,KAC7CwyC,EAAQ+b,WAAWrtD,KAAKxE,KAAK4xb,uBAAuB50b,EAAOuD,EAAK+C,GAAIwyC,IAEnE47Y,QAEiBv2b,KADlBi2b,EAAYK,EAAQlxb,EAAK/D,KAAK8R,EAAOhL,OAEjCtD,KAAK0rT,iBAAiBp9S,EAAQ8ib,EAAW7wb,EAAK+C,GAAImub,EAAS37Y,KAK3Em7Y,EAAY51b,UAAUs2b,kBAAoB,SAAU77Y,EAAS+B,EAAYC,GACrE,GAAmB,KAAfD,GAAoC,KAAfC,EACrB,IAAK,IAAI37C,EAAI,EAAGA,EAAI25C,EAAQ+b,WAAWp1D,OAAQN,IAAK,CAChD,IAAI0jD,EAAY/J,EAAQ+b,WAAW11D,GACnC,QAAkBhB,IAAd0kD,GAA4BA,EAAUvI,WAAaO,GAAcgI,EAAUmrW,WAAalzW,EACxF,OAAO,EAInB,OAAO,GASXm5Y,EAAY51b,UAAUi/D,mBAAqB,SAAU/5D,EAAMu1C,EAASxyC,EAAIi2D,GACpE,IAAIx8D,EAAMiD,KAAKkxb,UAAU3wb,EAAK/D,KAAK8G,IACnC,YAAYnI,IAAR4B,GAAqBA,EAAIP,KAAK8G,KAAQ/C,EAAK/D,KAAK8G,IAAOvG,EAAIP,KAAK+8D,KAAch5D,EAAK/D,KAAK+8D,IAahG03X,EAAY51b,UAAUu2b,uBAAyB,SAAUtkI,EAAOukI,EAAO/7Y,GACnE,IAAIg8Y,GACAxub,GAAIipC,KAAY+K,SAAUg2Q,EAAO09F,SAAU6mC,GAG/C,OADU,IAAI/rY,GAAUhQ,EAAS,aAAcg8Y,GAAW,IAGvDb,KCxOAc,IACP33Z,QAAS,oBACT76B,KAAM,SACNusa,MAAO,UACPoU,KAAM,SACNC,KAAM,SACN1V,IAAK,QACL7ka,UAAW,cACXosb,SAAU,aACVj/V,MAAO,UACPu5U,QAAS,YACT6D,aAAc,eACdJ,WAAY,aACZyP,YAAa,iBACb3O,aAAc,iBACdjhR,MAAO,WAMPqiS,GAAoC,WACpC,SAASA,EAAmB3xb,EAAQ4xb,GAChClyb,KAAKmyb,gBAILnyb,KAAKoyb,gBAILpyb,KAAKqyb,eACLryb,KAAKu2I,WAAav2I,KAAKsyb,eACvBtyb,KAAKM,OAASA,EACdN,KAAKshE,eAAiB4wX,EACtBlyb,KAAKtD,mBA4TT,OAtTAu1b,EAAmB52b,UAAUqB,iBAAmB,WACxCsD,KAAKM,OAAO0mF,aAGhBhnF,KAAKM,OAAOslF,GAAG,eAAgB5lF,KAAK+rG,OAAQ/rG,OAMhDiyb,EAAmB52b,UAAUuB,oBAAsB,WAC3CoD,KAAKM,OAAO0mF,aAGhBhnF,KAAKM,OAAO0lF,IAAI,eAAgBhmF,KAAK+rG,SAEzCkmV,EAAmB52b,UAAU0wG,OAAS,WAClC/rG,KAAKqlH,KAAOrlH,KAAKshE,eAAeE,WAAW,gBAC3CxhE,KAAKgB,QAAUG,EAAc,MAAQmC,GAAItD,KAAKM,OAAOU,QAAQsC,GAAK,iBAClEtD,KAAKM,OAAOU,QAAQW,YAAY3B,KAAKgB,SACrC,IAAImG,EAAS,IAAMnH,KAAKM,OAAOU,QAAQsC,GACvCtD,KAAKuyb,YAAc,IAAIC,IACnB/3X,MAAOz6D,KAAKyyb,eACZv/a,UAAWlT,KAAKM,OAAO4S,UACvB04F,kBAAmB5rG,KAAKM,OAAOsrG,kBAC/B59F,OAAQhO,KAAKM,OAAO0N,OACpB7G,OAAQA,EACR1B,OAAQzF,KAAK0yb,qBAAqBp3b,KAAK0E,MACvCm2C,WAAYn2C,KAAK2yb,sBAAsBr3b,KAAK0E,MAC5ComJ,OAAQpmJ,KAAK4yb,gBAAgBt3b,KAAK0E,MAClC6yb,QAAS7yb,KAAK8yb,mBAAmBx3b,KAAK0E,MACtCiT,SAAU,mBAEdjT,KAAKuyb,YAAYl8Y,SAASr2C,KAAKgB,UAEnCixb,EAAmB52b,UAAUo3b,aAAe,WACxC,IAAI71I,KACAm2I,KACAC,KACJ,IAAKhzb,KAAKM,OAAO+wD,oBAAoB4hY,mBAAoB,CACrD,IAAK,IAAI70b,EAAK,EAAGyE,EAAK7C,KAAKkzb,kBAAmB90b,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAChE,IAAIyf,EAAOhb,EAAGzE,IACqC,IAA/Cyf,EAAK09C,oBAAoBh9D,QAAQ,SACA,aAA7Bsf,EAAK09C,qBACLy3X,EAAWxub,KAAKxE,KAAKmzb,kBAAkBt1a,KAGS,IAA/CA,EAAK09C,oBAAoBh9D,QAAQ,SACL,UAA7Bsf,EAAK09C,qBACLw3X,EAAWvub,KAAKxE,KAAKmzb,kBAAkBt1a,IAI3C++R,EAAUp4S,KAAKxE,KAAKmzb,kBAAkBt1a,IAG9C,GAAIm1a,EAAWv2b,OAAS,EAAG,EACnB22b,EAAapzb,KAAKmzb,kBAAkB,aAC7B14X,MAAQu4X,EACnBp2I,EAAUp4S,KAAK4ub,GAEnB,GAAIL,EAAWt2b,OAAS,EAAG,CACvB,IAAI22b,GAAAA,EAAapzb,KAAKmzb,kBAAkB,UAC7B14X,MAAQs4X,EACnBn2I,EAAUp4S,KAAK4ub,IAGvB,GAAIpzb,KAAKM,OAAO+wD,oBAAoBoJ,MAChC,IAAK,IAAIx2D,EAAK,EAAGwG,EAAKzK,KAAKM,OAAO+wD,oBAAoBoJ,MAAOx2D,EAAKwG,EAAGhO,OAAQwH,IAAM,CAC/E,IAAIovb,EAAa5ob,EAAGxG,GACpB24S,EAAUp4S,KAAK6ub,GAGvB,OAAOz2I,GAEXq1I,EAAmB52b,UAAUu3b,gBAAkB,WAC3C5yb,KAAKw6T,QAAS,GAElBy3H,EAAmB52b,UAAUq3b,qBAAuB,SAAUzyb,GAE1D,OADWD,KAAKszb,aAAarzb,EAAK4d,KAAKva,KAEnC,IAAK,MACDtD,KAAKM,OAAOmqa,MACZ,MACJ,IAAK,OACDzqa,KAAKM,OAAOf,OACZ,MACJ,IAAK,OACDS,KAAKM,OAAO4/a,OACZ,MACJ,IAAK,OACDlgb,KAAKM,OAAO6/a,OACZ,MACJ,IAAK,QACDngb,KAAKM,OAAOwra,QACZ,MACJ,IAAK,YACD9ra,KAAKM,OAAOsF,YACZ,MACJ,IAAK,QACD5F,KAAKM,OAAOyyF,QACZ,MACJ,IAAK,UACD/yF,KAAKM,OAAOgsa,UACZ,MACJ,IAAK,oBACDtsa,KAAKM,OAAO6va,eACZ,MACJ,IAAK,mBACDnwa,KAAKM,OAAOk/a,cACZ,MACJ,IAAK,kBACDx/a,KAAKM,OAAOyva,aACZ,MACJ,IAAK,oBACD/va,KAAKM,OAAOuwa,eAGpBrwa,SAASosB,eAAe5sB,KAAKM,OAAOU,QAAQsC,GAAK,WAAWpB,QAC5DlC,KAAKM,OAAOkmB,QvCoiBpB,mBuCpiB8CvmB,IAE1Cgyb,EAAmB52b,UAAUy3b,mBAAqB,SAAU7yb,GAEpDA,EAAKw6D,MAAMh+D,OAAS,GAAKwD,EAAKw6D,MAAM,GAAS,qBAAa+3X,IAC1Dxyb,KAAKuzb,oBAGbtB,EAAmB52b,UAAUm4b,cAAgB,SAAU31a,GACnD,OAAO7d,KAAKqlH,KAAKtxC,YAAY/zE,KAAKu2I,WAAW14H,KAEjDo0a,EAAmB52b,UAAUk4b,iBAAmB,WAC5Cvzb,KAAKuyb,YAAY30I,UAAU59S,KAAKqyb,aAAa,GAC7Cryb,KAAKuyb,YAAY58W,YAAY31E,KAAKoyb,cAAc,GAAO,GACvDpyb,KAAKqyb,eACLryb,KAAKoyb,gBACLpyb,KAAKw6T,QAAS,GAElBy3H,EAAmB52b,UAAUo4b,YAAc,SAAU51a,EAAMvhB,GACvD,IAAIe,EAAM2C,KAAKszb,aAAaz1a,EAAKva,IACrBtD,KAAKmyb,aAAa90b,IACe,IAAzC2C,KAAKkzb,kBAAkB30b,QAAQlB,IAC3BwgB,EAAK1W,QAAU7K,IACd0D,KAAK0zb,aAAa71a,IACnB7d,KAAKqyb,YAAY7tb,KAAKqZ,EAAKva,KAIvC2ub,EAAmB52b,UAAUs3b,sBAAwB,SAAU1yb,GAC3D,IAAI0zb,EAAc1zb,EAClB0zb,EAAYtB,eACZ,IAAK,IAAIj0b,EAAK,EAAGyE,EAAK5C,EAAKw6D,MAAOr8D,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACpD,IAAIyf,EAAOhb,EAAGzE,GAEd,GADA4B,KAAKyzb,YAAY51a,EAAM5d,EAAK3D,OACxBuhB,EAAK48C,MAAMh+D,OACX,IAAK,IAAIwH,EAAK,EAAGwG,EAAKoT,EAAK48C,MAAOx2D,EAAKwG,EAAGhO,OAAQwH,IAAM,CACpD,IAAI2vb,EAAUnpb,EAAGxG,GACjBjE,KAAKyzb,YAAYG,EAAS3zb,EAAK3D,QAI3C0D,KAAKuN,UAAYtN,EAAK3D,MACtB0D,KAAKM,OAAOkmB,QvCigBpB,kBuCjgB6Cmta,GACjCA,EAAYl5X,MAAMh+D,SAAWk3b,EAAYtB,YAAY51b,QACrDk3b,EAAY96Z,QAAS,EACrB86Z,EAAYtB,iBAGZryb,KAAKqyb,YAAcryb,KAAKqyb,YAAY93a,OAAOo5a,EAAYtB,aACvDryb,KAAKuyb,YAAY58W,YAAY31E,KAAKoyb,cAAc,GAAO,GACvDpyb,KAAKuyb,YAAYz0I,UAAU99S,KAAKqyb,aAAa,KAGrDJ,EAAmB52b,UAAUq4b,aAAe,SAAU71a,GAClD,IAAIg2a,EAAiB7zb,KAAKM,OAAOgyD,cAAcR,MAAMr1D,OACjDuD,KAAKM,OAAOgyD,cAAcT,WAAWp1D,OAErC0K,GAAS,EACb,OAFenH,KAAKszb,aAAaz1a,EAAKva,KAGlC,IAAK,OACD6D,KAASnH,KAAKM,OAAOsqa,cAAe5qa,KAAKM,OAAOsqa,YAAYkpB,SAC5D,MACJ,IAAK,OACD3sb,KAASnH,KAAKM,OAAOsqa,cAAe5qa,KAAKM,OAAOsqa,YAAYmpB,SAC5D,MACJ,IAAK,QACD5sb,IAASnH,KAAKM,OAAO23Z,eAAe8Q,cAAc8B,WAClD,MACJ,IAAK,YACD1ja,KAASnH,KAAKM,OAAOwxD,MAAMr1D,OAASuD,KAAKM,OAAOuxD,WAAWp1D,QAC3D,MACJ,IAAK,WACD0K,KAAW0sb,EAAiB,GAAO7zb,KAAKM,OAAOgyD,cAAcR,MAAM,IAAM9xD,KAAKM,OAAOgyD,cAAcR,MAAM,GAAG13C,UACrGpa,KAAKM,OAAOgyD,cAAcR,MAAM,GAAG13C,SAAS3d,OAAS,GAC5D,MACJ,IAAK,QACD0K,EAAS0sb,EAAiB,EAC1B,MACJ,IAAK,UACD1sb,KAAWnH,KAAKM,OAAOgyD,cAAcR,MAAM,IAAM9xD,KAAKM,OAAOgyD,cAAcR,MAAM,GAAG13C,UAC7Epa,KAAKM,OAAOgyD,cAAcR,MAAM,GAAG13C,SAAS3d,OAAS,GAC5D,MACJ,IAAK,MACL,IAAK,OACL,IAAK,QACL,IAAK,oBACL,IAAK,mBACL,IAAK,kBACL,IAAK,oBACD0K,IAAS0sb,EAGjB,OAAO1sb,GAQX8qb,EAAmB52b,UAAUiX,QAAU,WACnCtS,KAAKuyb,YAAYjgb,UACjB/N,EAAOvE,KAAKgB,SACZhB,KAAKpD,uBAETq1b,EAAmB52b,UAAUkkC,cAAgB,WACzC,MAAO,eAEX0yZ,EAAmB52b,UAAU24b,WAAa,SAAUn2a,GAChD,OAAO7d,KAAKM,OAAOU,QAAQsC,GAAK,gBAAkBua,GAEtDo0a,EAAmB52b,UAAUi4b,aAAe,SAAUhwb,GAClD,OAAOA,EAAGiM,QAAQvP,KAAKM,OAAOU,QAAQsC,GAAK,gBAAiB,KAEhE2ub,EAAmB52b,UAAU83b,kBAAoB,SAAUt1a,GACvD,IAAIo2a,EACJ,OAAQp2a,GACJ,IAAK,OACDo2a,GAAa9sb,OAAQ4qb,GAAU33Z,QAASs5C,QAASq+W,GAAUxyb,MAC3D,MACJ,IAAK,MACD00b,GAAa9sb,OAAQ4qb,GAAU33Z,QAASs5C,QAASq+W,GAAUtnB,KAC3D,MACJ,IAAK,QACDwpB,GAAa9sb,OAAQ4qb,GAAU33Z,QAASs5C,QAASq+W,GAAUjmB,OAC3D,MACJ,IAAK,OACDmoB,GAAa9sb,OAAQ4qb,GAAU33Z,QAASs5C,QAASq+W,GAAU7R,MAC3D,MACJ,IAAK,OACD+T,GAAa9sb,OAAQ4qb,GAAU33Z,QAASs5C,QAASq+W,GAAU5R,MAC3D,MACJ,IAAK,WACD8T,GAAa9sb,OAAQ4qb,GAAU33Z,SAC/B,MACJ,IAAK,QACD65Z,GAAa9sb,OAAQ4qb,GAAU33Z,QAASs5C,QAASq+W,GAAUh/V,OAC3D,MACJ,IAAK,UACDkhW,GAAa9sb,OAAQ4qb,GAAU33Z,QAASs5C,QAASq+W,GAAUzlB,SAC3D,MACJ,IAAK,QACD2nB,GAAa9sb,OAAQ4qb,GAAU33Z,QAASs5C,QAASq+W,GAAUniS,OAC3D,MACJ,IAAK,oBACDqkS,GAAa9sb,OAAQ4qb,GAAU33Z,QAASs5C,QAASq+W,GAAU5hB,cAC3D,MACJ,IAAK,mBACD8jB,GAAa9sb,OAAQ4qb,GAAU33Z,QAASs5C,QAASq+W,GAAUvS,aAC3D,MACJ,IAAK,kBACDyU,GAAa9sb,OAAQ4qb,GAAU33Z,QAASs5C,QAASq+W,GAAUhiB,YAC3D,MACJ,IAAK,oBACDkkB,GAAa9sb,OAAQ4qb,GAAU33Z,QAASs5C,QAASq+W,GAAUlhB,cAC3D,MACJ,IAAK,YACDojB,GAAa9sb,OAAQ4qb,GAAU33Z,SAOvC,OAJAp6B,KAAKmyb,aAAat0a,IACd4O,KAAMzsB,KAAKwzb,cAAc31a,GAAOva,GAAItD,KAAKg0b,WAAWn2a,GACpD1W,OAAQ8sb,EAAS9sb,OAAQusE,QAASugX,EAASvgX,QAAU,WAAaugX,EAASvgX,QAAU,IAElF1zE,KAAKmyb,aAAat0a,IAE7Bo0a,EAAmB52b,UAAU63b,gBAAkB,WAC3C,OACI,OACA,MAAO,QAAS,OAAQ,OAAQ,YAAa,WAAY,QAAS,UAAW,QAC7E,oBAAqB,mBAAoB,kBAAmB,sBAGpEjB,EAAmB52b,UAAUi3b,aAAe,WACxC,OACI/yb,KAAQ,OACRkra,IAAO,MACPqB,MAAS,QACToU,KAAQ,OACRC,KAAQ,OACRv6a,UAAa,YACbosb,SAAY,WACZj/V,MAAS,QACTu5U,QAAW,UACX18Q,MAAS,QACTskS,kBAAqB,eACrBC,iBAAoB,cACpBC,gBAAmB,aACnBC,kBAAqB,iBAGtBpC,KhXjVPqC,GAA8B,WAM9B,SAASA,IAGLt0b,KAAKu0b,qBA4pET,OAzpEAj2b,OAAOuJ,eAAeysb,EAAaj5b,UAAW,4BAC1CqM,IAAK,WAED,IAAK,IADDmqD,KACKzzD,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAK0C,KAAKu0b,mBAAoBn2b,EAAKyE,EAAGpG,OAAQ2B,IAGvE,IAAK,IAFDf,EAAMwF,EAAGzE,GACT27Z,EAAQ/5Z,KAAKu0b,kBAAkBl3b,GAC1B4G,EAAK,EAAGwG,EAAKnM,OAAOhB,KAAKy8Z,GAAQ91Z,EAAKwG,EAAGhO,OAAQwH,IAAM,CAC5D,IAAI0qD,EAAalkD,EAAGxG,GAEpB4tD,EAAWrtD,KAAKu1Z,EAAMprW,GAAiB,WAG/C,OAAOkD,GAEXlqD,YAAY,EACZC,cAAc,IAGlB0sb,EAAaj5b,UAAUqlb,sBAAwB,SAAU3jb,GACrD,IAAI80D,KACJ,GAAuB,SAAnB90D,EAAI4wB,MAAMjnB,MAAoD,IAAjC3J,EAAI4wB,MAAMipC,YAAYn6D,OAEnD,IAAK,IADDs9Z,EAAQ/5Z,KAAKu0b,kBAAkBx3b,EAAIuG,IAC9BlF,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKy8Z,GAAQ37Z,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC5D,IAAIuwD,EAAa9rD,EAAGzE,GAEpByzD,EAAWrtD,KAAKu1Z,EAAMprW,GAAe,WAG7C,OAAOkD,GAEXyiY,EAAaj5b,UAAUklB,QAAU,SAAUhgB,EAAM65B,GAC7C,IAAItN,EAAO,IAAIM,GAAK7sB,EAAKyV,MAAOzV,EAAKwV,QACrC,QAAmB5a,IAAf2xB,EAAK9W,YAAuC7a,IAAhB2xB,EAAK/W,OAAsB,CAKvD,GAJMqkB,aAAmBsnB,KACrB50B,EAAK9W,MAAQ8W,EAAK9W,OAAS,GAC3B8W,EAAK/W,OAAS+W,EAAK/W,QAAU,IAE7BqkB,EAAQsS,WAAW12B,OAASokB,EAAQsS,WAAW32B,OAC/C,OAAOqkB,EAAQsS,WAGftS,EAAQwhQ,QAAQ,IAAIxuQ,IACpBN,EAAK9W,MAAQ8W,EAAK9W,OAASokB,EAAQuV,YAAY35B,MAC/C8W,EAAK/W,OAAS+W,EAAK/W,QAAUqkB,EAAQuV,YAAY55B,YAE/B5a,IAAlBoF,EAAK69B,WACLtR,EAAK9W,MAAQ3J,KAAK0T,IAAI+M,EAAK9W,MAAOzV,EAAK69B,gBAEpBjjC,IAAnBoF,EAAKgzD,YACLzmC,EAAK/W,OAAS1J,KAAK0T,IAAI+M,EAAK/W,OAAQxV,EAAKgzD,iBAEvBp4D,IAAlBoF,EAAKizD,WACL1mC,EAAK9W,MAAQ3J,KAAKC,IAAIwgB,EAAK9W,MAAOzV,EAAKizD,gBAEpBr4D,IAAnBoF,EAAK+yD,YACLxmC,EAAK/W,OAAS1J,KAAKC,IAAIwgB,EAAK/W,OAAQxV,EAAK+yD,YAGjD,OAAOxmC,GAGXwna,EAAaj5b,UAAU2xZ,gBAAkB,SAAU5yX,EAAS75B,EAAMu1C,GAC9D,IAAInoB,EAAQptB,EAAKotB,MAsBjB,GArBoB,UAAhBA,EAAMA,QACNyM,EAAUp6B,KAAKw0b,kBAAkBj0b,EAAMotB,EAAMrxB,QAE7B,YAAhBqxB,EAAMA,QACNyM,EAAUp6B,KAAKy0b,oBAAoBl0b,IAEnB,eAAhBotB,EAAMA,QACNyM,EAAUp6B,KAAK00b,uBAAuBn0b,IAEtB,YAAhBotB,EAAMA,OAAuC,eAAhBA,EAAMA,QACnCyM,EAAUp6B,KAAK20b,cAAcp0b,IAQb,aAAhBotB,EAAMA,QACNyM,EAAUp6B,KAAK40b,qBAAqBr0b,IAGpCotB,EAAMipC,YAAYn6D,OAAS,EAC3B,IAAK,IAAIN,EAAI,EAAGA,EAAIwxB,EAAMipC,YAAYn6D,QAAUkxB,EAAMipC,YAAYz6D,GAAGswB,KAAMtwB,IACvEi+B,EAAQhgB,SAAS5V,KAAKxE,KAAK60b,sBAAsBt0b,EAAMu1C,EAASnoB,EAAMipC,YAAYz6D,GAAIi+B,IAI9F,OADAA,EAAQ11B,MAAMqtC,gBAAkB,UACzB3X,GAGXk6Z,EAAaj5b,UAAUs5b,cAAgB,SAAUp0b,GAC7C,IAAIu0b,EAAY,IAAIpzY,GAEpB1hD,KAAKmiP,SAAS2yM,EAAWv0b,GAC2B,IAA/CA,EAAKwlD,YAAcG,GAAgBe,UACpC6tY,EAAU9iZ,OAASzxC,EAAKyxC,QAE5B,IAAI+iZ,EAAgBp7X,GAAqBp5D,EAAKotB,MAAMA,OAOpD,OANAmna,EAAUt4b,KAAOu4b,EACjBD,EAAUxxb,GAAK/C,EAAK+C,GAAK,IAAM/C,EAAKotB,MAAMA,WACvBxyB,IAAfoF,EAAKyV,YAAuC7a,IAAhBoF,EAAKwV,SACjC++a,EAAU9+a,MAAQzV,EAAKyV,MACvB8+a,EAAU/+a,OAASxV,EAAKwV,QAErB++a,GAkBXR,EAAaj5b,UAAUo5b,oBAAsB,SAAUl0b,GACnD,IAAIy0b,EAAe,IAAInxC,GAEnBoxC,EAAc,IAAIvzY,GACtBuzY,EAAY3xb,GAAK/C,EAAK+C,GAAK,aAC3B2xb,EAAYppb,QAAUtL,EAAKsL,QAC3Bopb,EAAYhpb,QAAU1L,EAAK0L,QAC3Bgpb,EAAYz4b,KAAO,0CACnBwD,KAAKmiP,SAAS8yM,EAAa10b,GAE3B,IAAI20b,EAAkB,IAAIxzY,GAC1BwzY,EAAgB5xb,GAAK/C,EAAK+C,GAAK,iBAE/B4xb,EAAgBxwb,MAAM+I,QAAUlN,EAAKmE,MAAM+I,QAC3Cynb,EAAgBzhY,oBAAsB,SACtCyhY,EAAgBxhY,kBAAoB,SACpCwhY,EAAgB3mY,aAAe,SAC/B,IACI4mY,EADAC,EAAY70b,EAAKotB,MAAM0na,QAE3BF,EAA2Bp7X,GAA4Bq7X,EAAU1ub,MAC1C,eAAnB0ub,EAAU1ub,MAA4C,wBAAnB0ub,EAAU1ub,MAAqD,uBAAnB0ub,EAAU1ub,KACzFwub,EAAgBxwb,MAAMk5B,KAAO,QAG7Bs3Z,EAAgBxwb,MAAMk5B,KAAO,QAEjCs3Z,EAAgB14b,KAAO24b,EAEvBH,EAAatwb,MAAMk5B,KAAO,cAC1Bo3Z,EAAatwb,MAAMktC,YAAc,cACjCojZ,EAAatwb,MAAMmtC,YAAc,EACjCmjZ,EAAa56a,UAAY66a,EAAaC,GACtC,IAAIpoa,EAAO9sB,KAAKugB,QAAQhgB,EAAM00b,GAE9B,OADAj1b,KAAKs1b,sBAAsB/0b,EAAKotB,MAAM0na,QAASL,EAAcloa,EAAK9W,MAAO8W,EAAK/W,QACvEi/a,GAGXV,EAAaj5b,UAAUq5b,uBAAyB,SAAUn0b,GACtD,IAAIg1b,EAAkB,IAAI1xC,GACtBl2X,EAAQptB,EAAKotB,MAAM6na,WAEnBC,EAAc,IAAI/zY,GACtB+zY,EAAYnyb,GAAK/C,EAAK+C,GAAK,aAC3Bmyb,EAAYj5b,KAAO,iGACnB,IAAIswB,EAAO9sB,KAAKugB,QAAQhgB,EAAMk1b,GAC9BA,EAAYz/a,MAAQ8W,EAAK9W,MACzBy/a,EAAY1/a,OAAS+W,EAAK/W,OAC1B/V,KAAKmiP,SAASszM,EAAal1b,GAE3B,IAAIm1b,EAAkB,IAAIh0Y,GAC1Bg0Y,EAAgBpyb,GAAK/C,EAAK+C,GAAK,UAC/Boyb,EAAgB1/a,MAAQ,GACxB0/a,EAAgB3/a,OAAS,GACzB2/a,EAAgBj5Z,OAAOjwB,KAAO,EAC9Bkpb,EAAgBj5Z,OAAO/vB,IAAM,EAC7Bgpb,EAAgBl5b,KAAO,uDAEvBk5b,EAAgBhxb,MAAM+I,QAAUlN,EAAKmE,MAAM+I,QAE3C,IAAIkob,EAAwB,IAAIj0Y,GAYhC,OAXAi0Y,EAAsBryb,GAAK/C,EAAK+C,GAAK,gBACrCqyb,EAAsB3/a,MAAQ,IAC9B2/a,EAAsB5/a,OAAS,GAC/B4/a,EAAsBjxb,MAAMk5B,KAAO,QACnC+3Z,EAAsBn+Z,SAAU,EAChCm+Z,EAAsBliY,oBAAsB,SAC5CkiY,EAAsBjiY,kBAAoB,SAC1CiiY,EAAsBpnY,aAAe,SAErConY,EAAsBjxb,MAAM+I,QAAUlN,EAAKmE,MAAM+I,QACjDkob,EAAsBn5b,KAAO,+FACrBmxB,EAAMjnB,MACV,IAAK,OACDgvb,EAAgBl+Z,SAAU,EAC1B,MACJ,IAAK,QACDk+Z,EAAgBhxb,MAAMk5B,KAAO,QAC7B,MACJ,IAAK,SACD83Z,EAAgBhxb,MAAMk5B,KAAO,QAWrC,OARyB,IAArBjQ,EAAMwZ,aACNwuZ,EAAsBn+Z,SAAU,GAGpC+9Z,EAAgB7wb,MAAMk5B,KAAO,cAC7B23Z,EAAgB7wb,MAAMktC,YAAc,cACpC2jZ,EAAgB7wb,MAAMmtC,YAAc,EACpC0jZ,EAAgBn7a,UAAYq7a,EAAaC,EAAiBC,GACnDJ,GAGXjB,EAAaj5b,UAAUu6b,iBAAmB,SAAUr1b,GAChD,IACIs1b,EADQt1b,EAAKotB,MAAMu/X,SACN2oC,KACbC,EAAa,IAAIjyC,GAEjBkyC,EAAW,IAAIjiY,GACnBiiY,EAAS3tZ,aAAe,GACxB,IAAItb,EAAO9sB,KAAKugB,QAAQhgB,EAAMw1b,GAC9BA,EAASzyb,GAAK/C,EAAK+C,GAAK,UACxByyb,EAAS//a,MAAQ8W,EAAK9W,MACtB+/a,EAAShgb,OAAS+W,EAAK/W,OACvB/V,KAAKmiP,SAAS4zM,EAAUx1b,QAELpF,IAAd06b,EAAKv0b,OAAqC,IAAdu0b,EAAKv0b,OAClCy0b,EAASrxb,MAAMmtC,YAAc,GAEjCikZ,EAAW9/a,MAAQ8W,EAAK9W,MACxB8/a,EAAW//a,OAAS+W,EAAK/W,OACzB,IACIhJ,EADAipb,EAAah2b,KAAKi2b,kBAAkB11b,GAEpC21b,EAA0B,GAAbF,EACb1iV,EAAOxmF,EAAK9W,MAAQ,EAAIkgb,EAExBnpb,EADe,IAAfipb,EACI1iV,EAAO,EAGPA,EAA0B,GAAlB0iV,EAAa,GAG7B,IACIG,EADAC,EAAe,IAAI10Y,GAEL,YAAdm0Y,EAAKnvb,MAAoC,SAAdmvb,EAAKnvb,MAChC0vb,EAAapgb,MAAQ,GACrBogb,EAAargb,OAAS,KAGtBqgb,EAAapgb,MAAQ,GACrBogb,EAAargb,OAAS,IAE1Bqgb,EAAa9yb,GAAK/C,EAAK+C,GAAK,eAC5B8yb,EAAa35Z,OAAOjwB,KAAO,EAC3B4pb,EAAa35Z,OAAO/vB,IAAM,EAC1Bypb,EAAmBl8X,GAAyB47X,EAAKnvb,MACjD0vb,EAAa55b,KAAO25b,EACpBC,EAAa1xb,MAAMk5B,KAAO,cAC1Bw4Z,EAAa1xb,MAAM+I,QAAUlN,EAAKmE,MAAM+I,QAExCqob,EAAWpxb,MAAMk5B,KAAO,cACxBk4Z,EAAWpxb,MAAMktC,YAAc,cAC/BkkZ,EAAWpxb,MAAMmtC,YAAc,EAC/BikZ,EAAW17a,UAAY27a,EAAUK,GAEjC,IAEIC,EAFAC,EAAWT,EAAKU,KAChBC,EAAe,IAAI90Y,GAEvB20Y,EAAiBl8X,GAAyBm8X,GAC1CE,EAAah6b,KAAO65b,EACpBG,EAAa9xb,MAAMk5B,KAAO,QAEtB44Z,EAAah/Z,QADA,SAAb8+Z,EAMe,IAAfN,IACAjpb,EAAIumG,EAAO,GAEfkjV,EAAa/5Z,OAAOjwB,KAAOO,GACE,IAAzBypb,EAAah/Z,UACbzqB,GAAK,IAETypb,EAAaxgb,MAAQ,GACrBwgb,EAAazgb,OAAS,GACtBygb,EAAa/5Z,OAAO9vB,OAAS,EAC7B6pb,EAAalzb,GAAK/C,EAAK+C,GAAK,UAC5Bkzb,EAAa/iY,oBAAsB,OACnC+iY,EAAa9iY,kBAAoB,SACjC8iY,EAAah1C,6BAA6B,EAAG,EAAG,YAChDg1C,EAAajoY,aAAe,QAC5BioY,EAAa9xb,MAAMk5B,KAAO,cAC1Bw4Z,EAAa1xb,MAAM+I,QAAUlN,EAAKmE,MAAM+I,QACxCqob,EAAW17a,SAAS5V,KAAKgyb,GAEzB,IAAIC,EAAe,IAAI/0Y,GAcvB,OAbA+0Y,EAAez2b,KAAK02b,yBAAyBn2b,EAAMk2b,IACzB,IAAtBZ,EAAKc,aACLF,EAAaj/Z,SAAU,EAGvBi/Z,EAAaj/Z,SAAU,EAER,IAAfw+Z,IACAjpb,EAAIumG,EAAO,GAEfmjV,EAAah6Z,OAAOjwB,KAAOO,EAAI,EAC/BA,GAAK,GACL+ob,EAAW17a,SAAS5V,KAAKiyb,GAClBX,GAGXxB,EAAaj5b,UAAUm5b,kBAAoB,SAAUj0b,EAAMq2b,EAAUC,EAAKvzb,GACtE,IACIhH,EACAkqB,EACAxQ,EACAD,EAJA+gb,EAAa,IAAIjzC,GAKrBvgZ,EAAKA,GAAM/C,EAAK+C,GAChB,IAAI8qZ,EAAW,qVAGX2oC,EAAax2b,EAAKotB,MAAMrxB,MAO5B,GANyB,UAArBiE,EAAKotB,MAAMA,QACXrxB,EAAQy6b,EAAWz6b,MACnBkqB,EAAUuwa,EAAWvwa,SAEzBxQ,EAAQ4gb,EAAS5gb,MACjBD,EAAS6gb,EAAS7gb,OACd8gb,EACA7gb,EAAQA,GAAS,GACjBD,EAASA,GAAU,QAElB,QAAuB5a,IAAnBy7b,EAAS5gb,YAA2C7a,IAApBy7b,EAAS7gb,OAAsB,CACpE,IAAIstR,EAAc,IAAI3hP,GACtB2hP,EAAY7mS,KAAO4xZ,EACnB,IAAIthY,EAAO9sB,KAAKugB,QAAQhgB,EAAM8iS,GAC9BrtR,EAAQ8W,EAAK9W,MACbD,EAAS+W,EAAK/W,OAElB,IAAIihb,EAAgBz2b,EAAKotB,MAAMu/X,SAC/B,GAAyB,aAArB3sZ,EAAKotB,MAAMA,MAAsB,CAChBqpa,EAAc/pC,WAC/B3wZ,EAAQs6b,EAASt6b,MACjBkqB,EAAUowa,EAASpwa,QAGvB,IAAIywa,EAAe,IAAIv1Y,GACvBu1Y,EAAaz6b,KAAO4xZ,EACpB6oC,EAAa3zb,GAAKA,EAAK,WACvB2zb,EAAajhb,MAAQA,EACrBihb,EAAalhb,OAASA,EACtBkhb,EAAaxjY,oBAAsB,SACnCwjY,EAAavjY,kBAAoB,SACjCujY,EAAa1oY,aAAe,SAC5BvuD,KAAKmiP,SAAS80M,EAAc12b,GAE5B,IAAI22b,EAAe,IAAIx1Y,GACvBw1Y,EAAa16b,KAAO4xZ,EACpB8oC,EAAa5zb,GAAKA,EAAK,WACvB4zb,EAAazjY,oBAAsB,SACnCyjY,EAAaxjY,kBAAoB,SACjCwjY,EAAa3oY,aAAe,SAE5B2oY,EAAaxyb,MAAMktC,YAAcrxC,EAAKmE,MAAMktC,YAC5CslZ,EAAaxyb,MAAM+I,QAAUlN,EAAKmE,MAAM+I,QAExC,IAAI0pb,EAAc,IAAIz1Y,GAClB01Y,EAAkBv9X,GAA4BrzC,GASlD,OARA2wa,EAAY36b,KAAO46b,EACnBD,EAAY7zb,GAAKA,EAAK,aACtB6zb,EAAY1jY,oBAAsB,SAClC0jY,EAAYzjY,kBAAoB,SAChCyjY,EAAY5oY,aAAe,SAE3B4oY,EAAYzyb,MAAMktC,YAAcrxC,EAAKmE,MAAMktC,YAC3CulZ,EAAYzyb,MAAM+I,QAAUlN,EAAKmE,MAAM+I,QAC/BnR,GACJ,IAAK,QACD46b,EAAa1/Z,SAAU,EACvB,MACJ,IAAK,uBACDy/Z,EAAavyb,MAAMqtC,gBAAkB,MACrCmlZ,EAAa1/Z,SAAU,EACvB,MACJ,IAAK,eACDy/Z,EAAavyb,MAAMk5B,KAAO,QAC1Bq5Z,EAAavyb,MAAMutC,SAAW,KAC9B,MACJ,IAAK,8BACDglZ,EAAavyb,MAAMk5B,KAAO,QAC1Bq5Z,EAAavyb,MAAMutC,SAAW,KAC9BglZ,EAAavyb,MAAMqtC,gBAAkB,MACrCmlZ,EAAaxyb,MAAMqtC,gBAAkB,MACrC,MACJ,IAAK,uBACL,IAAK,MACDklZ,EAAavyb,MAAMk5B,KAAiB,QAAVthC,EAAkB,QAAU,QACtD26b,EAAavyb,MAAMutC,SAAW,KAC9BklZ,EAAYzyb,MAAMk5B,KAAO,QACzBu5Z,EAAYzyb,MAAMktC,YAAcrxC,EAAKmE,MAAMk5B,KASnD,OALAk5Z,EAAWpyb,MAAMk5B,KAAO,cACxBk5Z,EAAWpyb,MAAMktC,YAAc,cAC/BklZ,EAAWpyb,MAAMmtC,YAAc,EAC/BilZ,EAAW18a,UAAY68a,EAAcC,EAAcC,GACnDn3b,KAAKq3b,qBAAqBN,EAAYD,EAAY9gb,EAAOD,GAClD+gb,GAEXxC,EAAaj5b,UAAUi8b,mBAAqB,SAAU/2b,EAAMmjY,GACxD,IAAIpnY,EAAQiE,EAAKotB,MAAMrxB,MAAMA,MACzB26b,EAAevzD,EAAO,GACtBwzD,EAAexzD,EAAO,GACRA,EAAO,GACzB,OAAQpnY,GACJ,IAAK,QACD46b,EAAa1/Z,SAAU,EACvB,MACJ,IAAK,uBACDy/Z,EAAavyb,MAAMqtC,gBAAkB,MACrCmlZ,EAAa1/Z,SAAU,IAInC88Z,EAAaj5b,UAAUk8b,wBAA0B,SAAUh3b,GACvD,GAAIA,EAAKotB,MAAMu/X,SAASD,WAAY,CAChC,IAAIA,EAAa1sZ,EAAKotB,MAAMu/X,SAASD,WACjCuqC,EAAcvqC,EAAWtjZ,OAAOlN,OAChCwV,EAAiD,gBAAxC1R,EAAKotB,MAAMu/X,SAASD,WAAWvmZ,KAA0B,EAAI,EACtE+wb,EAAiBl3b,EAAKwR,QAAQqI,SAAS,GAAGA,SAAS,GAOvD,IANyB,IAArB6yY,EAAWyqC,QACXD,EAAer9a,SAAS,EAAInI,EAAQulb,GAAahga,SAAU,IAE/B,IAA5By1X,EAAW0pC,eACXc,EAAer9a,SAAS,EAAInI,EAAQulb,GAAahga,SAAU,GAE3Dgga,EAAc,EACd,IAAK,IAAIr7b,EAAI,EAAGA,EAAIq7b,EAAar7b,IAC7B6D,KAAKs3b,mBAAmB/2b,EAAMk3b,EAAer9a,SAAS,EAAIje,GAAGie,YAM7Ek6a,EAAaj5b,UAAUs8b,uBAAyB,SAAUp3b,GACtD,IAEIoJ,EACArN,EAOAyQ,EAVA6qb,EAAmB,IAAI/zC,GAIvBg0C,EAAkB,IAAIn2Y,GAEtBo2Y,GADyB,IAAIj0C,GACN,IAAIniW,IAC3B/zB,EAAQptB,EAAKotB,MAAMu/X,SACnBD,EAAat/X,EAAMs/X,WACnB8qC,EAAgB/3b,KAAKg4b,wBAAwBz3b,GAE7C03b,EAAiB,IAAInkY,GACzBmkY,EAAe30b,GAAK/C,EAAK+C,GAAK,gBAC9B20b,EAAevzb,MAAMk5B,KAAO,cAC5Bq6Z,EAAe7vZ,aAAe,GAC9B,IAAItb,EAAO9sB,KAAKugB,QAAQhgB,EAAM03b,GAC9BA,EAAejib,MAAQ8W,EAAK9W,MAC5Biib,EAAelib,OAAS+W,EAAK/W,OAC7B6hb,EAAiBx9a,UAAY69a,GACC,gBAA1Btqa,EAAMs/X,WAAWvmZ,MACjB1G,KAAKk4b,6BAA6B33b,EAAMA,EAAKotB,MAAOiqa,GAExD,IAEI1B,EADgB,GACH6B,EACbzkV,EAAOxmF,EAAK9W,MAAQ,EAEpBjJ,EADkB,IAAlBgrb,EACIzkV,IAGAA,EAAQ4iV,EAAa,EARb,GAQoB6B,EAAgB,GAAkB,EAGtE/3b,KAAKmiP,SAAS81M,EAAgB13b,GACsB,IAA/CA,EAAKwlD,YAAcG,GAAgBe,UACpC2wY,EAAiB5lZ,OAASzxC,EAAKyxC,QAEnC,IAAImmZ,EAAiB,IAAIz2Y,GAsBzB,GArBAy2Y,EAAe70b,GAAK/C,EAAK+C,GAAK,eAC9B60b,EAAenib,MAAQ,GACvBmib,EAAepib,OAAS,GACxBoib,EAAezzb,MAAMk5B,KAAO,QAC5Bu6Z,EAAe17Z,OAAO9vB,OAAS,EAC/Bwrb,EAAe1kY,oBAAsB,OACrC0kY,EAAezkY,kBAAoB,SACnCykY,EAAe32C,6BAA6B,EAAG,EAAG,YAClD22C,EAAe5pY,aAAe,QAC9B4pY,EAAe37b,KAAOm9D,GAAqB,kBAC3Cw+X,EAAe17Z,OAAOjwB,KAAOO,GACA,IAAzBkgZ,EAAWI,WAAuBJ,EAAWE,UAI7CgrC,EAAe3ga,SAAU,EAHzB2ga,EAAe3ga,SAAU,GAKE,IAA3B2ga,EAAe3ga,UACfzqB,GAAK,IAET6qb,EAAiBx9a,SAAS5V,KAAK2zb,GACP,UAApBlrC,EAAWvmZ,KAAkB,CAC7Buxb,EAAevzb,MAAMmtC,YAAc,EACnComZ,EAAevzb,MAAMqtC,gBAAkB,MACvCpoC,EAASsjZ,EAAWtjZ,OACpB,IAAK,IAAIxN,EAAI,EAAGA,EAAIwN,EAAOlN,OAAQN,IAC/BG,EAAQqN,EAAOxN,GACf6D,KAAKo4b,gBAAgB97b,EAAOiE,EAAMq3b,GAI1CE,EAAuB93b,KAAKq4b,2BAA2B93b,GACjC,IAAlBw3b,IACAhrb,EAAIumG,EAAO,GAEfwkV,EAAqBr7Z,OAAOjwB,KAAOO,GACE,IAAjC+qb,EAAqBtga,UACrBzqB,GAAKurb,IAETV,EAAiBx9a,SAAS5V,KAAKszb,GAE/BG,EAAe30b,GAAK/C,EAAK+C,GAAK,YACF,YAAxB2pZ,EAAWsrC,WACXN,EAAevzb,MAAMmtC,YAAc,EACnComZ,EAAevzb,MAAMqtC,gBAAkB,OAEf,SAAxBk7W,EAAWsrC,WACXN,EAAevzb,MAAMmtC,YAAc,EACnComZ,EAAevzb,MAAMqtC,gBAAkB,OAEf,UAAxBk7W,EAAWsrC,WACXN,EAAevzb,MAAMmtC,YAAc,EACnComZ,EAAevzb,MAAMqtC,gBAAkB,OAG3C8lZ,EAAkB73b,KAAKw4b,kBAAkBj4b,EAAMs3b,EAAiB5qC,GAC1C,IAAlB8qC,IACAhrb,EAAIumG,EAAO,GAEfukV,EAAgBp7Z,OAAOjwB,KAAOO,GACE,IAA5B8qb,EAAgBrga,UAChBzqB,GAAKurb,IAETV,EAAiBx9a,SAAS5V,KAAKqzb,GAE/B,IAAIY,EAAiB,IAAI/2Y,GAoBzB,OAnBgC,IAA5BurW,EAAW0pC,aACX8B,EAAejha,SAAU,EAGzBiha,EAAejha,SAAU,EAE7Biha,EAAiBz4b,KAAK02b,yBAAyBn2b,EAAMk4b,GAC/B,IAAlBV,IACAhrb,EAAIumG,EAAO,GAEfmlV,EAAeh8Z,OAAOjwB,KAAOO,GACE,IAA3B0rb,EAAejha,UACfzqB,GAAKurb,IAETV,EAAiBx9a,SAAS5V,KAAKi0b,GAE/Bb,EAAiBlzb,MAAMktC,YAAc,cACrCgmZ,EAAiBlzb,MAAMmtC,YAAc,EACrC+lZ,EAAiBlzb,MAAMk5B,KAAO,cACvBg6Z,GAEXtD,EAAaj5b,UAAU+8b,gBAAkB,SAAU97b,EAAOiE,EAAMka,EAAWnX,GACvEmX,EAAUL,SAAWK,EAAUL,aAC/B,IAAIs+a,EACJA,EAAiB14b,KAAKw0b,kBAAkBj0b,EAAMjE,GAAO,EAAMgH,GAC3DtD,KAAK24b,uBAAuBp4b,EAAMm4b,EAAgBp8b,GAClDo8b,EAAep1b,GAAKA,GAAO/C,EAAK+C,GAAK,oBACrCo1b,EAAe1ib,MAAQ1Z,EAAM0Z,OAAS,GACtC0ib,EAAe3ib,OAASzZ,EAAMyZ,QAAU,GAExC2ib,EAAel3C,6BAA6BllZ,EAAMqP,OAAOoB,EAAGzQ,EAAMqP,OAAOqB,EAAG,YAC5E0rb,EAAenqY,aAAe,QAE9BmqY,EAAej8Z,OAASngC,EAAMmgC,OAE9Bi8Z,EAAejlY,oBAAsBn3D,EAAMm3D,oBAC3CilY,EAAehlY,kBAAoBp3D,EAAMo3D,kBAEzCglY,EAAeh0b,MAAMk5B,KAAO,cAC5B86Z,EAAeh0b,MAAMktC,YAAc,cACnC8mZ,EAAeh0b,MAAMmtC,YAAc,EACnCp3B,EAAUL,SAAS5V,KAAKk0b,IAE5BpE,EAAaj5b,UAAU68b,6BAA+B,SAAU33b,EAAMotB,EAAOlT,GACzE,IAAIunE,EAAavnE,EAAUL,SAAS,GAAGpE,MACnCisE,EAAcxnE,EAAUL,SAAS,GAAGrE,OACpC6ib,EAAY,IAAI9kY,GACpB8kY,EAAUn8Z,QAAWjwB,KAAM,EAAGC,MAAO,EAAGC,IAAK,EAAGC,OAAQ,GACxDisb,EAAUt1b,GAAK/C,EAAK+C,GAAK,2BACzBs1b,EAAUxwZ,aAAe,GACzBwwZ,EAAU5ib,MAAQgsE,EAAa,EAC/B42W,EAAU7ib,OAASksE,EAAc,EACjCxnE,EAAUL,SAAS5V,KAAKo0b,GACxB,IAAIC,EAAoB,IAAIh1C,GAC5Bg1C,EAAkBv1b,GAAK/C,EAAK+C,GAAK,sBACjC,IAAI8ma,EAAcz8Y,EAAMu/X,SAASD,WAAWmd,YAC5Cpqa,KAAKo4b,gBAAgBhuB,EAAYxuM,QAASr7N,EAAMs4b,EAAmBt4b,EAAK+C,GAAK,YAC7EtD,KAAKo4b,gBAAgBhuB,EAAYvxY,OAAQt4B,EAAMs4b,EAAmBt4b,EAAK+C,GAAK,WAC5EtD,KAAKo4b,gBAAgBhuB,EAAYC,QAAS9pa,EAAMs4b,EAAmBt4b,EAAK+C,GAAK,YAC7EtD,KAAK8ob,iCAAiC+P,EAAkBz+a,SAAS,GAAIgwZ,EAAYxuM,QAAQpkM,SACzFx3B,KAAK8ob,iCAAiC+P,EAAkBz+a,SAAS,GAAIgwZ,EAAYvxY,OAAOrB,SACxFx3B,KAAK8ob,iCAAiC+P,EAAkBz+a,SAAS,GAAIgwZ,EAAYC,QAAQ7yY,SACzFqha,EAAkBv3C,OAAQ,EAC1Bu3C,EAAkB7ib,MAAQgsE,EAC1B62W,EAAkB9ib,OAASksE,EAC3B42W,EAAkBn0b,MAAMk5B,KAAOi7Z,EAAkBn0b,MAAMktC,YAAc,cACrEn3B,EAAUL,SAAS5V,KAAKq0b,IAG5BvE,EAAaj5b,UAAUg9b,2BAA6B,SAAU93b,GAC1D,IACI+1b,EAEAwC,EAHAnra,EAAQptB,EAAKotB,MAAMu/X,SAEnB6rC,EAAiB,IAAIr3Y,GAsBzB,OAnBA40Y,EADiB3oa,EAAMs/X,WACDspC,KACtBuC,EAAqB3+X,GAAyBm8X,GAE1CyC,EAAevha,QADF,SAAb8+Z,EAMJyC,EAAez1b,GAAK/C,EAAK+C,GAAK,QAC9By1b,EAAev8b,KAAOs8b,EACtBC,EAAer0b,MAAMk5B,KAAO,QAC5Bm7Z,EAAe/ib,MAAQ,GACvB+ib,EAAehjb,OAAS,GACxBgjb,EAAetlY,oBAAsB,OACrCslY,EAAerlY,kBAAoB,SACnCqlY,EAAev3C,6BAA6B,EAAG,EAAG,YAClDu3C,EAAexqY,aAAe,QAC9BwqY,EAAet8Z,OAAO9vB,OAAS,EAC/Bosb,EAAer0b,MAAMk5B,KAAO,cACrBm7Z,GAGXzE,EAAaj5b,UAAUq1G,KAAO,SAAU3zG,EAAK6qV,EAAID,EAAI7xS,GACjD,IAAIv1C,EAAOu1C,EAAQwjB,UAAU,EAAMmzV,WAC/B1vZ,EAAI0/B,OAAO/vB,IAAMi7U,GAAM,GACvB7xS,EAAQ47X,mBAAmB30a,MAAW0/B,QAAU/vB,IAAK3P,EAAI0/B,OAAO/vB,IAAMi7U,KAEtE5qV,EAAI0/B,OAAOjwB,KAAOo7U,GAAM,GACxB9xS,EAAQ47X,mBAAmB30a,MAAW0/B,QAAUjwB,KAAMzP,EAAI0/B,OAAOjwB,KAAOo7U,KAE5E,IAEIp5R,EAAQxuD,KAAK6ya,iBAAiBtya,EAAMxD,EAAIuG,GAAIwyC,GAChD91C,KAAK8ya,oBAAoBtkX,EAAOzxD,EAAK+4C,GACrCv1C,EAAKwR,QAAQ6pR,QAAQ,IAAIxuQ,QAAKjyB,OAAWA,IACzCoF,EAAKwR,QAAQ4vY,QAAQphZ,EAAKwR,QAAQ49B,aAClCmG,EAAQo6X,sBACRp6X,EAAQ+jX,iBACR75Z,KAAK4gb,YAAY7jb,EAAK+4C,IAG1Bw+Y,EAAaj5b,UAAUs5a,cAAgB,SAAUxta,EAAQ5K,EAAQu5C,GAC7D,GAAIv5C,GAAgC,SAAtBA,EAAOoxB,MAAMjnB,KAAiB,CACxC,IAAIumZ,EAAan3W,EAAQwjB,UAAUnyD,EAAO7D,IAAIqqB,MAAMu/X,SAASD,WAC7D,GAAIn3W,EAAQ6hB,eAAuC,SAAtBxwD,EAAOwmB,MAAMjnB,OAAoBumZ,EAAWI,UAErE,YADA9wZ,EAAOkwZ,UAAYtlZ,EAAO7D,IAI9B,GADA2pZ,EAAWE,UAAYF,EAAWE,cAC9BF,EAAWE,YAA0D,IAA7CF,EAAWE,UAAU5uZ,QAAQhC,EAAO+G,MAAe2pZ,EAAWI,UAAW,CACjGJ,EAAWE,UAAU3oZ,KAAKjI,EAAO+G,IACjC,IAAI01b,EAAcjsZ,GAAYxwC,GAC1B08b,EAAUnjZ,EAAQwjB,UAAU/8D,EAAO+G,IAAIyO,QACvCwlC,EAAgBzB,EAAQwjB,UAAUnyD,EAAO7D,IAAIyO,QACjDknb,EAAQx8Z,OAAO/vB,IAAOusb,EAAQhtb,QAAWgtb,EAAQvsZ,WAAW32B,OAAS,GAC9D5O,EAAO8E,QAAW9E,EAAOulC,WAAW32B,OAAS,GACpDkjb,EAAQx8Z,OAAOjwB,KAAQysb,EAAQptb,QAAWotb,EAAQvsZ,WAAW12B,MAAQ,GAC9D7O,EAAO0E,QAAW1E,EAAOulC,WAAW12B,MAAQ,GACnDijb,EAAQx8Z,OAAO/vB,IAAOusb,EAAQx8Z,OAAO/vB,IAAM,EAAK,EAAIusb,EAAQx8Z,OAAO/vB,IACnEusb,EAAQx8Z,OAAOjwB,KAAQysb,EAAQx8Z,OAAOjwB,KAAO,EAAK,EAAIysb,EAAQx8Z,OAAOjwB,KACrEspC,EAAQwjB,UAAU/8D,EAAO+G,IAAImpZ,UAAYtlZ,EAAO7D,GAChDi0C,EAAcn9B,SAAS5V,KAAKsxC,EAAQwjB,UAAU/8D,EAAO+G,IAAIyO,SACzD,IAAIy8C,EAAQxuD,KAAK6ya,iBAAiB1ra,EAAQ5K,EAAO+G,GAAIwyC,GACrD91C,KAAK8ya,oBAAoBtkX,EAAOjyD,EAAQu5C,GACxCyB,EAAcqkP,QAAQ,IAAIxuQ,QAAKjyB,OAAWA,IAC1Co8C,EAAcoqW,QAAQpqW,EAAc5H,aACpCmG,EAAQo6X,sBACRp6X,EAAQ+jX,iBAGR,IAAK,IAFDsT,KAEKhxa,GADTgxa,EAAQA,EAAM5yZ,OAAOhe,EAAOmwZ,SAAUnwZ,EAAOowZ,UAC1BlwZ,OAAS,EAAGN,GAAK,EAAGA,IACnC25C,EAAQvxC,OAAOuxC,EAAQwjB,UAAU6zW,EAAMhxa,KAE3C,IACI49Z,GACArzZ,KAAM,kBAAmBuzZ,YAAcnoW,OAAQknY,IAC/Ch/B,YAAcloW,OAHR/kB,GAAYxwC,KAGY69L,SAAU,YAE5CtkJ,EAAQokX,gBAAgBH,GACH,QAAjBjkX,EAAQ/X,MACJxhC,EAAOkmE,OAASt7D,EAAOs7D,QACvB3sB,EAAQgrY,gBAAgBvkb,GAGhCyD,KAAK4gb,YAAYrkb,EAAQu5C,MAKrCw+Y,EAAaj5b,UAAUulb,YAAc,SAAU7jb,EAAK+4C,GAChD,GAAuB,SAAnB/4C,EAAI4wB,MAAMjnB,MAAmB3J,EAAI4wB,MAAMu/X,SAASD,WAAWE,YAC1DpwZ,EAAI4wB,MAAMu/X,SAASD,WAAWI,UAE/B,IAAK,IAAIjvZ,EAAK,EAAG86b,EADEn8b,EAAI4wB,MAAMu/X,SAASD,WAAWE,UACD/uZ,EAAK86b,EAAez8b,OAAQ2B,IAAM,CAC9E,IAAIjC,EAAI+8b,EAAe96b,GACnBi1D,EAAevd,EAAQwjB,UAAUn9D,GACjCk3D,IACAvd,EAAQo2Y,qBAAqB74X,GAC7BA,EAAathD,QAAQ6pR,QAAQ,IAAIxuQ,GAAKimC,EAAathD,QAAQiE,MAAOq9C,EAAathD,QAAQgE,SACvFs9C,EAAathD,QAAQ4vY,QAAQtuV,EAAathD,QAAQ49B,aAC9C0jB,EAAa1lC,MAAMu/X,SAASD,WAAWE,WACpC95V,EAAa1lC,MAAMu/X,SAASD,WAAWE,UAAU1wZ,QACpDuD,KAAK4gb,YAAYvtX,EAAcvd,MAOnDw+Y,EAAaj5b,UAAUwmb,oBAAsB,SAAUP,EAAYxrY,GAC/D,IAAI90C,EAAU80C,EAAQwjB,UAAUgoX,EAAW70B,WAC3C,GAA8B,SAA1B60B,EAAW3zZ,MAAMjnB,MAAmB46a,EAAW3zZ,MAAMu/X,SAASD,WAAWE,WACzEm0B,EAAW3zZ,MAAMu/X,SAASD,WAAWE,UAAU1wZ,OAAS,EAExD,IAAK,IAAI8mB,GADL4pY,EAAYm0B,EAAW3zZ,MAAMu/X,SAASD,WAAWE,WAC9B1wZ,OAAS,EAAG8mB,GAAK,EAAGA,IACvCuyB,EAAQvxC,OAAOuxC,EAAQwjB,UAAU6zV,EAAU5pY,KAGnD,GAAIviB,EAAS,CACT80C,EAAQqrY,yBAAyBG,GACjC,IAAIn0B,EAAYnsZ,EAAQ2sB,MAAMu/X,SAASD,WAAWE,UAClDntZ,KAAKk0a,oBAAoBlza,EAAQ+Q,QAASuva,EAAWh+a,IACrD,IAAI61b,EAAehsC,EAAU5uZ,QAAQ+ib,EAAWh+a,IAChD6pZ,EAAU9kY,OAAO8wa,EAAc,KAIvC7E,EAAaj5b,UAAU64a,oBAAsB,SAAUnia,EAAS0lB,GAC5D,IAAK,IAAIr5B,EAAK,EAAGyE,EAAKkP,EAAQqI,SAAUhc,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC1D,IAAIjC,EAAI0G,EAAGzE,GACPjC,EAAEmH,KAAOm0B,EACT1lB,EAAQqI,SAASiO,OAAOtW,EAAQqI,SAAS7b,QAAQpC,GAAI,GAEhDA,EAAEie,UACPpa,KAAKk0a,oBAAoB/3a,EAAGs7B,KAKxC68Z,EAAaj5b,UAAUgkb,cAAgB,SAAU/7a,EAAIwyC,GACjD,IAAIv1C,EAAOu1C,EAAQwjB,UAAUh2D,GAC7B,GAAI/C,EAAM,CACN,IAAIyyG,EAAWl9D,EAAQwjB,UAAU/4D,EAAKksZ,WACtC,GAAIz5S,GAAoC,SAAxBA,EAASrlF,MAAMjnB,KAAiB,CAC5C,IAAIymZ,EAAYn6S,EAASrlF,MAAMu/X,SAASD,WAAWE,UACnDr3W,EAAQqrY,yBAAyB5gb,GACjCP,KAAKk0a,oBAAoBlhU,EAASjhG,QAASzO,GAC3C,IAAI61b,EAAehsC,EAAU5uZ,QAAQ+E,GACrC6pZ,EAAU9kY,OAAO8wa,EAAc,GAC/B54b,EAAKksZ,UAAY,GACjB32W,EAAQi1X,sBACRj1X,EAAQ+jX,oBAKpBy6B,EAAaj5b,UAAUuya,WAAa,SAAU56V,EAASzZ,EAAUzjB,GAC7D,IAAIxyC,EACJ0vE,EAAQ1vE,GAAK0vE,EAAQ1vE,IAAMipC,KAC3BjpC,EAAK0vE,EAAQ1vE,GACb,IAAI/C,EAAOu1C,EAAQwjB,UAAUh2D,GACxB/C,GACDu1C,EAAQ1xC,IAAI4uE,GAEhBA,EAAQy5U,UAAYlzV,EACpB,IAAI94D,EAAaq1C,EAAQwjB,UAAUC,GAC/B0zV,EAAaxsZ,EAAWktB,MAAMu/X,SAASD,WAC3C,GAAI1sZ,GAAQE,GAAwC,SAA1BA,EAAWktB,MAAMjnB,MAAuC,SAApBnG,EAAKotB,MAAMjnB,MACrEumZ,EAAWE,YAAcF,EAAWI,UAAW,CAC/C9sZ,EAAKksZ,UAAYlzV,EACjB,IAAI4zV,EAAY1sZ,EAAWktB,MAAMu/X,SAASD,WAAWE,UASrD,GARIA,EAAU5uZ,QAAQ+E,GAAM,GACxB6pZ,EAAU3oZ,KAAKlB,GAEnB7C,EAAWsR,QAAQqI,SAAS5V,KAAKjE,EAAKwR,SACtCtR,EAAWsR,QAAQ6pR,QAAQ,IAAIxuQ,IAC/B3sB,EAAWsR,QAAQ4vY,QAAQlhZ,EAAWsR,QAAQ49B,aAC9CmG,EAAQi3W,WAAW6zB,YAAYngb,EAAYq1C,GAC3CA,EAAQi1X,sBACa,QAAjBj1X,EAAQ/X,MAAmBx9B,EAAKotB,OAASptB,EAAKotB,MAAMu/X,WAChD3sZ,EAAKotB,MAAMu/X,SAASD,WAAWE,UAAY,CACnCv6W,GAAkB2mB,EAAW,iBACnC53D,YAAYixC,GAAkBogC,EAAQ1vE,GAAK,qBAK7Dgxb,EAAaj5b,UAAUw3a,iBAAmB,SAAUtya,EAAM64b,EAActjZ,GACpE,IACI0Y,EADA2+V,EAAY5sZ,EAAKotB,MAAMu/X,SAASD,WAAWE,UAE/C,GAAIA,GAAaA,EAAU1wZ,OACvB,IAAK,IAAI2B,EAAK,EAAG+ta,EAAchf,EAAW/uZ,EAAK+ta,EAAY1va,OAAQ2B,IAAM,CACrE,IAAIjC,EAAIgwa,EAAY/ta,GAChBg7b,IAAiBj9b,IAKbqyD,EAJCA,EAIO1Y,EAAQwjB,UAAUn9D,GAAG4V,QAAQ2kB,OAAOouB,UAAU0J,GAH9C1Y,EAAQwjB,UAAUn9D,GAAG4V,QAAQ2kB,QAQrD,OAAO83B,GAAS1Y,EAAQwjB,UAAU8/X,GAAcrnb,QAAQ2kB,QAG5D49Z,EAAaj5b,UAAUy3a,oBAAsB,SAAUtkX,EAAOzxD,EAAK+4C,GAC/D,IAAIkG,EACAR,EAEA/uC,EACAE,EAFApM,EAAOu1C,EAAQwjB,UAAUv8D,EAAI0vZ,WAG7B9/W,GAAU5/B,EAAG,GAAKC,EAAG,IACpBzM,EAAKwR,QAAQ2kB,OAAOlqB,KAAOzP,EAAI0/B,OAAOjwB,KAAOzP,EAAIiZ,MAAUzV,EAAKwR,QAAQ2kB,OAAY,QACrFjqB,GAAQ,GAEPlM,EAAKwR,QAAQ2kB,OAAOhqB,IAAM3P,EAAI0/B,OAAO/vB,IAAM3P,EAAIgZ,OAAWxV,EAAKwR,QAAQ2kB,OAAa,SACrF/pB,GAAS,GAETF,IACAkgC,EAAM5/B,EAAI,GAEVJ,IACAggC,EAAM3/B,EAAI,GAEd,IAAI0/B,EAAansC,EAAKwR,QAAQ26B,WAC1BjgC,IACAuvC,GAASj/C,EAAIgV,QAAQ0qB,OAAOjwB,KAAOzP,EAAIgV,QAAQ2kB,OAAO1gB,OAAS02B,EAAW12B,OAE1ErJ,IACA6uC,GAASz+C,EAAIgV,QAAQ0qB,OAAO/vB,IAAM3P,EAAIgV,QAAQ2kB,OAAO3gB,QAAU22B,EAAW32B,SAE1EimC,EAAQ,GAAKR,EAAQ,IACrB1F,EAAQmiX,eAAexsW,MAAM3V,EAAQwjB,UAAUv8D,EAAI0vZ,WAAYzwW,GAAS,EAAGR,GAAS,EAAG7O,IAI/F2nZ,EAAaj5b,UAAUq7b,yBAA2B,SAAUn2b,EAAM84b,GAe9D,OAdAA,EAAiB/1b,GAAK/C,EAAK+C,GAAK,kBAChC+1b,EAAiBrjb,MAAQ,GACzBqjb,EAAiBtjb,OAAS,GAC1Bsjb,EAAiB58Z,OAAO9vB,OAAS,EACjC0sb,EAAiB30b,MAAMk5B,KAAO,cAC9By7Z,EAAiB5lY,oBAAsB,OACvC4lY,EAAiB3lY,kBAAoB,SACrC2lY,EAAiB9qY,aAAe,SAChC8qY,EAAiB78b,KAAO,8iBAMjB68b,GAGX/E,EAAaj5b,UAAUu5b,qBAAuB,SAAUr0b,GACpD,IACI65B,EADA08Z,EAAa,IAAIjzC,GAEjBl2X,EAAQptB,EAAKotB,MAAMu/X,SACnB2oC,EAAOloa,EAAMu/X,SACbD,EAAat/X,EAAMs/X,WACJt/X,EAAMu/X,SAWzB,MAVa,SAAT2oC,IACAz7Z,EAAUp6B,KAAK41b,iBAAiBr1b,IAEvB,eAATs1b,GAAyB5oC,IACzB7yX,EAAUp6B,KAAK23b,uBAAuBp3b,IAE1Cu2b,EAAW18a,UAAYggB,GACvB08Z,EAAWpyb,MAAMk5B,KAAO,cACxBk5Z,EAAWpyb,MAAMktC,YAAc,cAC/BklZ,EAAWpyb,MAAMmtC,YAAc,EACxBilZ,GAGXxC,EAAaj5b,UAAUs9b,uBAAyB,SAAUp4b,EAAM+4b,EAAwB3vb,GACpF,IAAIitD,EACAE,EACJ,GAAkC,IAA9BntD,EAAOitD,YAAYn6D,OACnB,IAAK,IAAIN,EAAI,EAAGA,EAAIwN,EAAOitD,YAAYn6D,OAAQN,IAAK,CAChD,IAAIiwO,EAAQziO,EAAOitD,YAAYz6D,IAC/By6D,EAAcr2D,EAAK2tZ,sBAAsB9hL,IAC7Bp2N,MAAQrM,EAAOqM,MAC3B4gD,EAAY7gD,OAASpM,EAAOoM,OAC5Bujb,EAAuBl/a,SAAS5V,KAAKoyD,GAG7C,GAA4B,IAAxBjtD,EAAOmtD,MAAMr6D,OACb,IAASN,EAAI,EAAGA,EAAIwN,EAAOmtD,MAAMr6D,OAAQN,IAAK,CAC1C,IAAIm8C,EAAO3uC,EAAOmtD,MAAM36D,GACxB26D,EAAQv2D,EAAKmtZ,gBAAgBp1W,GAC7BghZ,EAAuBl/a,SAAS5V,KAAKsyD,KAKjDw9X,EAAaj5b,UAAUm9b,kBAAoB,SAAUj4b,EAAMg5b,EAAWtsC,GAkBlE,OAjBAssC,EAAUj2b,GAAK/C,EAAK+C,GAAK,WACzBi2b,EAAUvjb,MAAQ,GAClBujb,EAAUxjb,OAAS,EACnBwjb,EAAU70b,MAAMk5B,KAAO,QACvB27Z,EAAU98Z,OAAO9vB,OAAS,EAC1B4sb,EAAU9lY,oBAAsB,OAChC8lY,EAAU7lY,kBAAoB,SAC9B6lY,EAAUhrY,aAAe,SACzBgrY,EAAU/8b,KAAO,mUAGbywZ,IAAmC,IAArBA,EAAWyqC,MACzB6B,EAAU/ha,SAAU,EAGpB+ha,EAAU/ha,SAAU,EAEjB+ha,GAGXjF,EAAaj5b,UAAUw5b,sBAAwB,SAAUt0b,EAAMu1C,EAAS6Y,EAAYv0B,GAChFu0B,EAAWrrD,GAAKqrD,EAAWrrD,IAAMipC,KACjC,IAAIitZ,EAAsB,IAAI31C,GAC1B41C,EAAiB,IAAI/3Y,GACrBprB,EAAc,IAAIw8B,GAEtB2mY,EAAen2b,GAAK/C,EAAK+C,GAAK,IAAMqrD,EAAWrrD,GAAK,QACpDm2b,EAAezjb,MAAQ24C,EAAW34C,MAClCyjb,EAAe1jb,OAAS44C,EAAW54C,OACnC0jb,EAAelrY,aAAe,SAC9Bj4B,EAAYhzB,GAAK/C,EAAK+C,GAAK,IAAMqrD,EAAWrrD,GAAK,QACjDgzB,EAAY8D,QAAUu0B,EAAWliC,KACjC,IAAI/nB,EAAQnE,EAAKmE,MACjB4xB,EAAY5xB,OACRmoB,SAAUnoB,EAAMmoB,SAAU0kB,OAAQ7sC,EAAM6sC,OAAQU,SAAU,KAAMxkC,QAAS/I,EAAM+I,QAC/EihC,KAAMhqC,EAAMgqC,KAAM8C,aAAc9sC,EAAM8sC,aAAchb,MAAO9xB,EAAM8xB,MAAOoH,KAAM,QAC9E3Q,WAAYvoB,EAAMuoB,WAAYC,WAAYxoB,EAAMwoB,WAAYkT,aAAc,OAC1EwR,YAAa,OAAQC,YAAa,EAClCE,gBAAiBrtC,EAAMqtC,gBAAiBM,UAAW3tC,EAAM2tC,UAAWF,eAAgBztC,EAAMytC,gBAE9F7b,EAAYm9B,oBAAsB,SAClCn9B,EAAYo9B,kBAAoB,SAChCp9B,EAAYi4B,aAAe,SAC3Bj4B,EAAYmG,QAAWjwB,KAAM,EAAGC,MAAO,EAAGC,IAAK,EAAGC,OAAQ,GAC1D6sb,EAAoB3tb,QAAUtL,EAAKsL,QAAU8iD,EAAWlyD,OACpD4P,KAAKoV,IAAIktC,EAAWptC,OAASlV,KAAK+Q,GAAK,MAC3Co8a,EAAoBvtb,QAAU1L,EAAK0L,QAAU0iD,EAAWlyD,OACpD4P,KAAKqV,IAAIitC,EAAWptC,OAASlV,KAAK+Q,GAAK,MAC3Co8a,EAAoBl4C,OAAQ,EAC5Bk4C,EAAoBnsb,UAAYqzY,GAAUM,KAC1Cw4C,EAAoBl2b,GAAK/C,EAAK+C,GAAK,mBAAqBqrD,EAAWrrD,GACnEk2b,EAAoB90b,MAAMktC,YAAc,cACxC4nZ,EAAoB/8Z,QAAWjwB,KA3BlB,GA2BgCC,MA3BhC,GA2B+CC,IA3B/C,GA2B4DC,OA3B5D,IA4Bb6sb,EAAoBjrY,aAAe,SACnCirY,EAAoB3sZ,YAAc,EAClC2sZ,EAAoBp/a,UAAYq/a,EAAgBnja,GAChD,IAAIoja,EAAiB,IAAIvyY,GAAK5mD,EAAKotB,MAAO,eAAiBrqB,GAAIk2b,EAAoBl2b,GAAIqqB,OAASjnB,KAAM,OAAQinB,MAAO,oBAAsB,GAC3I+ra,EAAe5iY,QAEPxzD,GAAIm2b,EAAen2b,GAAK,QAASqqB,MAAO,SACxChiB,QAAUoB,EAAG,EAAGC,EAAG,MAG3B0sb,EAAe7tb,QAAU2tb,EAAoB3tb,QAC7C6tb,EAAeztb,QAAUutb,EAAoBvtb,QAC7Cytb,EAAe3nb,QAAUynb,EACzBA,EAAoBp/a,SAAS5V,KAAKk1b,EAAehsC,gBAAgBgsC,EAAe5iY,MAAM,KACtF,IAAIpgC,EAAS,IAAIR,GAAK,EAAG,EAAG,EAAG,QACZ/6B,IAAfoF,EAAKyV,YAAuC7a,IAAhBoF,EAAKwV,SACjC2gB,EAAS,IAAIR,GAAK31B,EAAKsL,QAAUtL,EAAKyV,MAAQ,EAAGzV,EAAK0L,QAAU1L,EAAKwV,OAAS,EAAGxV,EAAKyV,MAAOzV,EAAKwV,SAEtG/V,KAAK25b,kBAAkBjja,EAAQ8ia,GAAuBzsb,EAAG2sb,EAAe7tb,QAASmB,EAAG0sb,EAAeztb,SAAWytb,EAAgB/qY,EAAWlyD,OAAQkyD,EAAWptC,OAC5J,IAAIs+B,GACAv8C,GAAI/C,EAAK+C,GAAK,IAAMqrD,EAAWrrD,GAAK,aACpCyiD,YAAaC,GAAqBqlW,SAAWrlW,GAAqBW,cAClErP,SAAU/2C,EAAK+C,GAAI0nZ,SAAUwuC,EAAoBl2b,GACjDyhD,iBAAmBp3B,MAAO,SAE1Bisa,EAAsB,IAAI9zY,GAAUvlD,EAAKotB,MAAO,cAAekyB,GAAW,GAC9E+5Y,EAAoB3uC,aAAeyuC,EAAe5iY,MAAM,GAAGxzD,GAC3Ds2b,EAAoB5hO,KAAKliL,GACzB8jZ,EAAoB7nb,QAAQuvY,OAAQ,EACpCs4C,EAAoB7nb,QAAQ1E,UAAYqzY,GAAUM,KAClD5mX,EAAQhgB,SAAS5V,KAAKo1b,EAAoB7nb,SAC1C6nb,EAAoBn3X,OAAS,IAC7B,IAAIs3V,EAAQ/5Z,KAAKu0b,kBAAkBh0b,EAAK+C,IACnCy2Z,IACDA,MAECA,EAAMprW,EAAWrrD,MAClBy2Z,EAAMprW,EAAWrrD,QASrB,OALAy2Z,EAAMprW,EAAWrrD,IAAW,KAAIo2b,EAChC3/B,EAAMprW,EAAWrrD,IAAW,UAAIs2b,EAChC55b,KAAKu0b,kBAAkBh0b,EAAK+C,IAAMy2Z,EAClCjkX,EAAQo4X,WAAWwrB,OAAgBv+b,GAAW,GAC9Cu+b,EAAej3X,OAAS,IACjB+2X,GAGXlF,EAAaj5b,UAAU4mb,yBAA2B,SAAU1hb,EAAM+C,GAC9D,GAAI/C,GAA4B,SAApBA,EAAKotB,MAAMjnB,KAAiB,CAEpC,GAAoB,mBADRnG,EAAKotB,MACPA,MACN,OAAOptB,EAAKwR,QAAQqI,SAAS,GAE5B,GAAIpa,KAAKu0b,kBAAkBh0b,EAAK+C,KAAOtD,KAAKu0b,kBAAkBh0b,EAAK+C,IAAIA,GAAK,CAC7E,IAAIo2b,EAAiB15b,KAAKu0b,kBAAkBh0b,EAAK+C,IAAIA,GAAI/C,KACzD,OAAOP,KAAKiib,yBAAyByX,EAAgBp2b,IAG7D,OAAO,MAGXgxb,EAAaj5b,UAAU4lb,cAAgB,SAAU1gb,EAAMouD,EAAY7Y,GAC/D,IAAI+jZ,EAAmBt5b,EAAKwR,QAAQqI,SAAS,GACzCuT,EAAQptB,EAAKotB,MACbmsa,EAAgB,IAAIttC,GAAe7+X,EAAO,cAAeghC,GAAY,GAKzE,OAJAhhC,EAAMipC,YAAYpyD,KAAKs1b,GACvBD,EAAiBz/a,SAAS5V,KAAKxE,KAAK60b,sBAAsBt0b,EAAMu1C,EAAS6Y,EAAYkrY,IACrFt5b,EAAKwR,QAAQ6pR,QAAQ,IAAIxuQ,IACzB7sB,EAAKwR,QAAQ4vY,QAAQphZ,EAAKwR,QAAQ49B,aAC3B3vC,KAAKu0b,kBAAkBh0b,EAAK+C,IAAIqrD,EAAWrrD,IAAIu8C,WAE1Dy0Y,EAAaj5b,UAAU0+b,iBAAmB,SAAUh9b,EAAK+4C,GACrD,IAAIg/Y,EAAY/3b,EAAI4wB,MACpB,GAAImna,EAAUl+X,YAAYn6D,OACtB,IAAK,IAAI2B,EAAK,EAAGyE,EAAKiyb,EAAUl+X,YAAax4D,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC/D,IAAIuwD,EAAa9rD,EAAGzE,GACpB4B,KAAKg6b,wBAAwBj9b,EAAK4xD,EAAY7Y,UAG/C91C,KAAKu0b,kBAAkBx3b,EAAIuG,KAGtCgxb,EAAaj5b,UAAUsmb,0BAA4B,SAAUphb,EAAMu1C,GAI/D,GAAwB,SAApBv1C,EAAKotB,MAAMjnB,KACX,GAAyB,mBAArBnG,EAAKotB,MAAMA,MAMX,IAAK,IALDrqB,EAAK/C,EAAK+C,GAAGpG,MAAM,KACnBy5D,EAAerzD,EAAGA,EAAG7G,OAAS,GAC9Bwta,EAAS3ma,EAAGA,EAAG7G,OAAS,GACxBgE,EAAaq1C,EAAQwjB,UAAU2wW,GAC/B6qB,EAAYr0b,EAAWktB,MAClBvvB,EAAK,EAAGyE,EAAKiyb,EAAUl+X,YAAax4D,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC/D,IAAIuwD,EAAa9rD,EAAGzE,GACpB,GAAIuwD,EAAWrrD,KAAOqzD,EAAc,CAEhC,IAAe,IADHm+X,EAAUl+X,YAAYr4D,QAAQowD,GAItC,OAFA7Y,EAAQqrY,yBAAyB5gb,GACjCP,KAAKg6b,wBAAwBv5b,EAAYkuD,EAAY7Y,IAC9C,QAKdv1C,EAAKotB,MAAMipC,aAAer2D,EAAKotB,MAAMipC,YAAYn6D,QACtDuD,KAAK+5b,iBAAiBx5b,EAAMu1C,GAGpC,OAAO,GAEXw+Y,EAAaj5b,UAAU2+b,wBAA0B,SAAUv5b,EAAYkuD,EAAY7Y,GAC/E,IAAIg/Y,EAAYr0b,EAAWktB,MACvB1b,EAAQ6ib,EAAUl+X,YAAYr4D,QAAQowD,GAC1C,IAAe,IAAX18C,EAAc,CACd6ib,EAAUl+X,YAAYvuC,OAAOpW,EAAO,GACpC,IAAI8nZ,EAAQ/5Z,KAAKu0b,kBAAkB9zb,EAAW6C,IAC9C,GAAIy2Z,GAASA,EAAMprW,EAAWrrD,IAAK,CAC/B,IAAIo2b,EAAiB3/B,EAAMprW,EAAWrrD,IAAI/C,KACtCq5b,EAAsB7/B,EAAMprW,EAAWrrD,IAAIu8C,UAC/C/J,EAAQurY,eAAeqY,GACvB5jZ,EAAQurY,eAAeuY,GACvB,IAAIK,EAAcx5b,EAAWsR,QAAQqI,SAAS,GAC9CnI,EAAQgob,EAAY7/a,SAAS7b,QAAQm7b,EAAe3nb,SACpDkob,EAAY7/a,SAASiO,OAAOpW,EAAO,GACnCA,EAAQgob,EAAY7/a,SAAS7b,QAAQq7b,EAAoB7nb,SACzDkob,EAAY7/a,SAASiO,OAAOpW,EAAO,GACnC6jC,EAAQq4X,gBAAgBurB,GACxB5jZ,EAAQq4X,gBAAgByrB,UACjB9jZ,EAAQwjB,UAAUogY,EAAep2b,WACjCwyC,EAAQwjB,UAAUsgY,EAAoBt2b,WACtCy2Z,EAAMprW,EAAWrrD,OAIpCgxb,EAAaj5b,UAAUs+b,kBAAoB,SAAUO,EAAcnob,EAASmC,EAAU3T,EAAM9D,EAAQ8kB,GAChG,IAAIsrB,EAAc7sC,KAAKm6b,uBAAuBjmb,EAAUgmb,GACpD19b,EAAO,GACP6mS,EAActxR,EAAQqI,SAAS,GAC/BquZ,EAAc12Z,EAAQqI,SAAS,GAC/Bkc,EAAcvkB,EAAQqI,SAAS,GACnCipR,EAAY5vO,oBAAsB,UAClC4vO,EAAY3vO,kBAAoB,UAChCp9B,EAAYmG,OAAOjwB,KAAO8pB,EAAYmG,OAAOhwB,MAAQ,EACrD6pB,EAAYmG,OAAO/vB,IAAM4pB,EAAYmG,OAAO9vB,OAAS,EACrD,IAAImnB,EACA8V,EACgB,IAAhBiD,GACArwC,EAAO,0BACP6mS,EAAYrtR,MAAQ,GACpBqtR,EAAY5vO,oBAAsB,OAClCg1W,EAAYjnB,6BAA6B,EAAG,GAAK,YACjDlrX,EAAYmG,OAAO/vB,IAAM4pB,EAAYmG,OAAO9vB,OAAS,GACrDmnB,EAAQoma,EAAavhZ,YACrB/O,GACIsW,GAAIg6Y,EAAaztb,MAAO0zC,GAAI+5Y,EAAaxtb,IACzC0zC,GAAI85Y,EAAaztb,MAAO4zC,GAAI65Y,EAAavtb,SAGxB,MAAhBkgC,GACLrwC,EAAO,0BACP6mS,EAAYrtR,MAAQ,GACpBqtR,EAAY5vO,oBAAsB,QAClCg1W,EAAYjnB,6BAA6B,EAAG,GAAK,YACjDlrX,EAAYmG,OAAO/vB,IAAM4pB,EAAYmG,OAAO9vB,OAAS,GACrDmnB,EAAQoma,EAAathZ,WACrBhP,GACIsW,GAAIg6Y,EAAa1tb,KAAM2zC,GAAI+5Y,EAAaxtb,IACxC0zC,GAAI85Y,EAAa1tb,KAAM6zC,GAAI65Y,EAAavtb,SAGvB,KAAhBkgC,GACLrwC,EAAO,0BACP6mS,EAAYttR,OAAS,GACrBstR,EAAY3vO,kBAAoB,MAChC+0W,EAAYjnB,6BAA6B,GAAK,EAAG,YACjDlrX,EAAYmG,OAAOjwB,KAAO8pB,EAAYmG,OAAOhwB,MAAQ,GACrDqnB,EAAQoma,EAAaxhZ,aACrB9O,GACIsW,GAAIg6Y,EAAaztb,MAAO0zC,GAAI+5Y,EAAavtb,OACzCyzC,GAAI85Y,EAAa1tb,KAAM6zC,GAAI65Y,EAAavtb,UAI5CnQ,EAAO,0BACP6mS,EAAYttR,OAAS,GACrBstR,EAAY3vO,kBAAoB,SAChC+0W,EAAYjnB,6BAA6B,GAAK,EAAG,YACjDlrX,EAAYmG,OAAOjwB,KAAO8pB,EAAYmG,OAAOhwB,MAAQ,GACrDqnB,EAAQoma,EAAazhZ,UACrB7O,GACIsW,GAAIg6Y,EAAaztb,MAAO0zC,GAAI+5Y,EAAaxtb,IACzC0zC,GAAI85Y,EAAa1tb,KAAM6zC,GAAI65Y,EAAaxtb,MAGhD,IAAIgnB,EAASwma,EAAaxma,OAE1BI,EAAQ6tB,GAAsB/X,GAAUlW,EADzBwmB,GAAM7sC,UAAU6G,EAAUqN,EAAOlV,KAAKC,IAAI4tb,EAAalkb,MAAOkkb,EAAankb,UAC/B,EAAO2d,GAClE2vQ,EAAY7mS,KAAOA,OACJrB,IAAXsB,QAAkCtB,IAAVomB,IACxBuS,EAAQomB,GAAM7sC,UAAUymB,EAAOvS,EAAO9kB,GACtCsV,EAAQlG,QAAUtL,EAAKsL,QAAUioB,EAAM/mB,EACvCgF,EAAQ9F,QAAU1L,EAAK0L,QAAU6nB,EAAM9mB,IAG/Csnb,EAAaj5b,UAAUsvb,qBAAuB,SAAUjjB,EAAa5xX,GACjE,GAAI91C,KAAKu0b,kBAAmB,CACxB,IAAI6F,EAAe1yB,EAAYnuW,SAC3B5C,EAAe+wW,EAAYpka,GAC3B7C,EAAaq1C,EAAQwjB,UAAU8gY,GACnC,OAAI35b,GAAwC,SAA1BA,EAAWktB,MAAMjnB,MAAmB1G,KAAKu0b,kBAAkB6F,IACzEp6b,KAAKu0b,kBAAkB6F,GAAczjY,GAC9Bl2D,EAEJ,KAEX,OAAO,MAGX6zb,EAAaj5b,UAAUwvb,4BAA8B,SAAUpqb,EAAYina,EAAaj7Y,EAAMqpB,GAC1F,IAAIskZ,EAAe1yB,EAAYnuW,SAC3B5C,EAAe+wW,EAAYpka,GAC/B,GAAItD,KAAKu0b,kBAAkB6F,IAAiBp6b,KAAKu0b,kBAAkB6F,GAAczjY,GAC7E,IAAK,IAAIv4D,EAAK,EAAGyE,EAAKpC,EAAWktB,MAAMipC,YAAax4D,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACtE,IAAIuwD,EAAa9rD,EAAGzE,GACpB,GAAIuwD,EAAWrrD,KAAOqzD,EAAc,CAChChI,EAAWliC,KAAOA,EAClB,IAAI1a,EAAU/R,KAAKu0b,kBAAkB6F,GAAczjY,GAAcp2D,KAAKwR,QAAQqI,SAAS,GACvFrI,EAAQqoB,QAAU3N,EAClB1a,EAAQylB,SAAU,EAClB/2B,EAAWsR,QAAQ6pR,QAAQ,IAAIxuQ,IAC/B3sB,EAAWsR,QAAQ4vY,QAAQlhZ,EAAWsR,QAAQ49B,gBAK9D2kZ,EAAaj5b,UAAUu/a,WAAa,SAAUvnX,EAAcvd,GACxD,IACI4jZ,EADA/qY,EAAa0E,EAAa1lC,MAAMipC,YAEpC,GAAIjI,GAAcA,EAAWlyD,OAAS,EAClC,IAAK,IAAIN,EAAI,EAAGA,EAAIwyD,EAAWlyD,OAAQN,IACnCu9b,EAAiB15b,KAAKu0b,kBAAkBlhY,EAAa/vD,IAAIqrD,EAAWxyD,GAAGmH,IAAI/C,KAC3Eu1C,EAAQ8kY,WAAW8e,IAK/BpF,EAAaj5b,UAAU4wb,yBAA2B,SAAU54X,EAAcQ,EAAW/d,GACjF,GAAgC,SAA5Bud,EAAa1lC,MAAMjnB,KAAiB,CACpC,IAAIioD,EAAa0E,EAAa1lC,MAAMipC,YACpC,GAAIjI,GAAcA,EAAWlyD,OAAS,EAClC,IAAK,IAAIN,EAAI,EAAGA,EAAIk3D,EAAathD,QAAQqI,SAAS,GAAGA,SAAS3d,OAAQN,IAClE,IAAK,IAAIonB,EAAI,EAAGA,EAAIorC,EAAWlyD,OAAQ8mB,IAAK,CACxC,IAAIozC,EAAetD,EAAathD,QAAQqI,SAAS,GAAGA,SAASje,GAAGmH,GAAGpG,MAAM,KAEzE,GADSy5D,EAAaA,EAAal6D,OAAS,KACjCkyD,EAAWprC,GAAGjgB,GAAI,CACzB,IAAIo2b,EAAiB15b,KAAKu0b,kBAAkBlhY,EAAa/vD,IAAIqrD,EAAWprC,GAAGjgB,IAAI/C,KAC3Es/C,EAAY7/C,KAAKu0b,kBAAkBlhY,EAAa/vD,IAAIqrD,EAAWprC,GAAGjgB,IAAIu8C,UAEtE3rC,GADYmjC,GAAiBwI,EAAUd,YAAasU,EAAathD,QAAQ2kB,OAAQ28B,EAAathD,QAAQ2kB,QAC3FmpB,EAAU9I,aACzB7iC,GACInH,EAAG8yC,EAAU9I,YAAYhqC,EAAIsmD,EAAaxnD,QAAWgoD,EAAiB,QACtE7mD,EAAG6yC,EAAU9I,YAAY/pC,EAAIqmD,EAAapnD,QAAW4nD,EAAiB,SAE1E3/C,EAAWgmC,GAAM7sC,UAAU6G,EAAUy6C,EAAWprC,GAAGhC,MAAOotC,EAAWprC,GAAG9mB,QACxE42D,EAAathD,QAAQqI,SAAS,GAAGA,SAASje,GAAG0P,QACzC6tb,EAAe7tb,QAAUqI,EAASnH,EACtCsmD,EAAathD,QAAQqI,SAAS,GAAGA,SAASje,GAAG8P,QACzCytb,EAAeztb,QAAUiI,EAASlH,EACtC8oC,EAAQ8kY,WAAW8e,OAQ3CpF,EAAaj5b,UAAUkta,uBAAyB,SAAUxra,EAAK+4C,GAC3D,GAAI/4C,EAAIiuZ,SAAU,CACd,IAAIlzW,EAAahC,EAAQwjB,UAAUv8D,EAAIiuZ,UACvC,GAA8B,SAA1BlzW,EAAWnqB,MAAMjnB,MAA8C,mBAA3BoxC,EAAWnqB,MAAMA,MACrD,OAAOmqB,EAGf,OAAO/6C,GAGXu3b,EAAaj5b,UAAUklb,OAAS,SAAUxjb,GACtC,OAAIA,EAAI4wB,OAA4B,SAAnB5wB,EAAI4wB,MAAMjnB,MAAuC,mBAApB3J,EAAI4wB,MAAMA,OAM5D2ma,EAAaj5b,UAAU28b,wBAA0B,SAAUz3b,GACvD,IAEI+1b,EAFAx3a,EAAQ,EAGRmuY,EAFQ1sZ,EAAKotB,MAAMu/X,SAEAD,WAiBvB,YAfiB9xZ,KADjBm7b,EAAWrpC,EAAWspC,OACqB,SAAbD,GAC1Bx3a,SAE6B3jB,IAA5B8xZ,EAAW0pC,eACgB,IAA5B1pC,EAAW0pC,cACX73a,SAE0B3jB,IAAzB8xZ,EAAWI,YACa,IAAzBJ,EAAWI,WACXvuY,SAEsB3jB,IAArB8xZ,EAAWyqC,QACS,IAArBzqC,EAAWyqC,OACX54a,IAEGA,GAGXw1a,EAAaj5b,UAAU46b,kBAAoB,SAAU11b,GACjD,IAAIue,EAAQ,EAER+2a,EADQt1b,EAAKotB,MAAMu/X,SACN2oC,KAUjB,YAR2B16b,IAAtB06b,EAAKc,eACgB,IAAtBd,EAAKc,cACL73a,SAEe3jB,IAAd06b,EAAKU,MACQ,SAAdV,EAAKU,MACLz3a,IAEGA,GAGXw1a,EAAaj5b,UAAU8mP,SAAW,SAAU9hP,EAAOE,GAE/CF,EAAMqE,MAAMk5B,KAAOr9B,EAAKmE,MAAMk5B,KAC9Bv9B,EAAMqE,MAAMktC,YAAcrxC,EAAKmE,MAAMktC,YACrCvxC,EAAMqE,MAAMmtC,YAActxC,EAAKmE,MAAMmtC,YACrCxxC,EAAMqE,MAAMqtC,gBAAkBxxC,EAAKmE,MAAMqtC,gBACzC1xC,EAAMqE,MAAM+I,QAAUlN,EAAKmE,MAAM+I,QACjCpN,EAAMqE,MAAMutC,SAAW1xC,EAAKmE,MAAMutC,SACkB,IAA/C1xC,EAAKwlD,YAAcG,GAAgBe,UACpC5mD,EAAM2xC,OAASzxC,EAAKyxC,SAO5BsiZ,EAAaj5b,UAAUwwb,WAAa,SAAUtxI,EAAa1mP,EAAWR,EAAcvd,GAChF,IAAIukZ,EAAW9/I,EAAY5sR,UACvB8pa,EAAiBpkY,EAAathD,QAAQqI,SAAS,GAC/Ckgb,EAAcjnY,EAAa1lC,MAAMA,MACjC4sa,OAAoCp/b,IAAtBo/S,EAAYvkS,YAA8C7a,IAAvBo/S,EAAYxkS,OACjE,GAAuB,YAAnBskb,EAAS1sa,OAAuB0sa,EAAShF,QACzChiY,EAAathD,QAAQqI,SAAS,GAAKpa,KAAKy0b,oBAAoBphY,QAE3D,GAAuB,eAAnBgnY,EAAS1sa,OAA0B0sa,EAAS7E,WACjDniY,EAAathD,QAAQqI,SAAS,GAAKpa,KAAK00b,uBAAuBrhY,QAE9D,GAAuB,aAAnBgnY,EAAS1sa,OAAwB0sa,EAASntC,SAC/C75V,EAAathD,QAAQqI,SAAS,GAAKpa,KAAK40b,qBAAqBvhY,QAE5D,GAAuB,UAAnBgnY,EAAS1sa,OAAqB0sa,EAAS/9b,MAAO,CACnD,IAAIy6b,EAAasD,EAAS/9b,MAC1B+2D,EAAathD,QAAQqI,SAAS,GAAKpa,KAAKw0b,kBAAkBnhY,EAAc0jY,OAEhD,YAAnBsD,EAAS1sa,OAA0C,eAAnB0sa,EAAS1sa,MAC9C0lC,EAAathD,QAAQqI,SAAS,GAAKpa,KAAK20b,cAActhY,QAK5Bl4D,IAArBk/b,EAAShF,SAA0C,YAAhBiF,GAA6BC,EACrEv6b,KAAKw6b,kBAAkBnnY,EAAcknP,QAERp/S,IAAxBk/b,EAAS7E,YAA6C,eAAhB8E,GAAgCC,EAC3Ev6b,KAAKy6b,qBAAqBpnY,EAAcknP,EAAa1mP,QAE1B14D,IAAtBk/b,EAASntC,UAA2C,aAAhBotC,GAA8BC,EACvEv6b,KAAK06b,mBAAmBrnY,EAAcknP,EAAa1mP,EAAW/d,SAEtC36C,IAAnBk/b,EAAS/9b,OAAwC,UAAhBg+b,GAA2BC,IACjEv6b,KAAK26b,gBAAgBtnY,EAAcknP,EAAa1mP,GAEhD0mP,EAAY71S,OACZiuD,GAAY4nP,EAAY71S,MAAO+yb,aAA0BrgY,GAA0C,aAA7B/D,EAAa1lC,MAAMA,MACrF8pa,EAAer9a,SAAS,GAAGA,SAAS,GACpCq9a,EAAer9a,SAAS,GAAKq9a,IAIzCnD,EAAaj5b,UAAUm/b,kBAAoB,SAAUj6b,EAAMg6S,GACvD,IAAIu6I,EAAYv0b,EAAKotB,MACjB8pa,EAAiBl3b,EAAKwR,QAAQqI,SAAS,GAC3C,GAAI06a,EAAW,CACXniY,GAAYpyD,EAAKmE,MAAO+yb,EAAer9a,SAAS,IAChD,IAAIwgb,EAAuB7gY,GAA4B+6X,EAAUO,QAAQ3ub,MACzE+wb,EAAer9a,SAAS,GAAG5d,KAAOo+b,OAEZz/b,IAAtBo/S,EAAYvkS,YAA8C7a,IAAvBo/S,EAAYxkS,QAC/C/V,KAAKs1b,sBAAsB/0b,EAAKotB,MAAM0na,QAASoC,EAAgBl9I,EAAYvkS,OAASzV,EAAKyV,MAAOukS,EAAYxkS,QAAUxV,EAAKwV,SAInIu+a,EAAaj5b,UAAUo/b,qBAAuB,SAAUl6b,EAAM0sC,EAAW4mB,GACrE,IAAIihY,EAAY7nZ,EAAUtf,MACtB8pa,EAAiBl3b,EAAKwR,QAAQqI,SAAS,GAC3C,GAAI06a,EAAW,CACX,IAAI+F,EAAuBpD,EAAer9a,SAAS,GAC/C0gb,EAAuBrD,EAAer9a,SAAS,GAMnD,QALwBjf,IAApB8xC,EAAUvoC,QACViuD,GAAY1lB,EAAUvoC,MAAO+yb,EAAer9a,SAAS,IACrDygb,EAAqBn2b,MAAM+I,QAAUlN,EAAKmE,MAAM+I,QAChDqtb,EAAqBp2b,MAAM+I,QAAUlN,EAAKmE,MAAM+I,SAEhDqnb,EAAUU,WAAY,CACtB,OAAQV,EAAUU,WAAW9ub,MACzB,IAAK,OACDm0b,EAAqBrja,SAAU,EAC/B,MACJ,IAAK,QACDqja,EAAqBn2b,MAAMk5B,KAAO,QAClC,MACJ,IAAK,SACDi9Z,EAAqBn2b,MAAMk5B,KAAO,QAGF,SAApCi2B,EAAUlmC,MAAM6na,WAAW9ub,OAC3Bm0b,EAAqBrja,SAAU,QAEWr8B,IAA1C8xC,EAAUtf,MAAM6na,WAAWruZ,aAC3B2zZ,EAAqBtja,QAAUs9Z,EAAUU,WAAWruZ,kBAIxChsC,IAApB8xC,EAAUj3B,YAA4C7a,IAArB8xC,EAAUl3B,QAC3C/V,KAAK+6b,0BAA0Bx6b,EAAKotB,MAAM6na,WAAYiC,EAAgBxqZ,EAAUj3B,OAASzV,EAAKyV,MAAOi3B,EAAUl3B,QAAUxV,EAAKwV,SAItIu+a,EAAaj5b,UAAU+tF,SAAW,SAAU7oF,EAAMszD,EAAWv3D,EAAO0+b,EAAQC,EAAQC,GAChF,OAAQ5+b,GACJ,IAAK,QACD2+b,EAAOzja,SAAU,EACjBwja,EAAOt2b,MAAMqtC,gBAAkB,GAC/BmpZ,EAAOx2b,MAAMk5B,KAAO,QACpBs9Z,EAAOx2b,MAAMktC,YAAc,QAC3BopZ,EAAOt2b,MAAMk5B,KAAO,QACpB,MACJ,IAAK,uBACDo9Z,EAAOt2b,MAAMqtC,gBAAkB,MAC/BmpZ,EAAOx2b,MAAMk5B,KAAO,QACpBo9Z,EAAOt2b,MAAMk5B,KAAO,QACpBs9Z,EAAOx2b,MAAMktC,YAAc,QAC3BqpZ,EAAOzja,SAAU,EACjB,MACJ,IAAK,eACDwja,EAAOt2b,MAAMqtC,gBAAkB,GAC/BipZ,EAAOt2b,MAAMk5B,KAAO,QACpBq9Z,EAAOv2b,MAAMqtC,gBAAkB,GAC/BipZ,EAAOt2b,MAAMutC,SAAW,KACxBipZ,EAAOx2b,MAAMk5B,KAAO,QACpBs9Z,EAAOx2b,MAAMktC,YAAc,QAC3B5xC,KAAKm7b,sBAAsBtnY,EAAWonY,GACtC,MACJ,IAAK,8BACDD,EAAOt2b,MAAMk5B,KAAO,QACpBo9Z,EAAOt2b,MAAMutC,SAAW,KACxBipZ,EAAOx2b,MAAMk5B,KAAO,QACpBs9Z,EAAOx2b,MAAMktC,YAAc,QAC3BopZ,EAAOt2b,MAAMqtC,gBAAkB,MAC/BkpZ,EAAOv2b,MAAMqtC,gBAAkB,MAC/B/xC,KAAKm7b,sBAAsBtnY,EAAWonY,GACtC,MACJ,IAAK,uBACL,IAAK,MACDD,EAAOt2b,MAAMk5B,KAAiB,QAAVthC,EAAkB,QAAU,QAChD0+b,EAAOt2b,MAAMqtC,gBAAkB,GAC/BkpZ,EAAOv2b,MAAMqtC,gBAAkB,GAC/BipZ,EAAOt2b,MAAMutC,SAAW,KACxBipZ,EAAOx2b,MAAMk5B,KAAO,QACpB59B,KAAKm7b,sBAAsBtnY,EAAWonY,GACtCC,EAAOx2b,MAAMktC,YAAcrxC,EAAKmE,MAAMk5B,OAKlD02Z,EAAaj5b,UAAU8/b,sBAAwB,SAAUtnY,EAAWonY,GAC5DpnY,EAAUlmC,MAAMu/X,UAAYr5V,EAAUlmC,MAAMu/X,SAASD,YACrDp5V,EAAUlmC,MAAMu/X,SAASD,WAAWtjZ,aACcxO,IAAlD04D,EAAUlmC,MAAMu/X,SAASD,WAAWtjZ,OAAO,SACaxO,IAAxD04D,EAAUlmC,MAAMu/X,SAASD,WAAWtjZ,OAAO,GAAGrN,MACc,yBAAxDu3D,EAAUlmC,MAAMu/X,SAASD,WAAWtjZ,OAAO,GAAGrN,OACU,UAAxDu3D,EAAUlmC,MAAMu/X,SAASD,WAAWtjZ,OAAO,GAAGrN,QAC9C2+b,EAAOzja,SAAU,QAGUr8B,IAA1B04D,EAAUlmC,MAAMrxB,QACe,yBAAhCu3D,EAAUlmC,MAAMrxB,MAAMA,OACU,UAAhCu3D,EAAUlmC,MAAMrxB,MAAMA,QACtB2+b,EAAOzja,SAAU,KAK7B88Z,EAAaj5b,UAAUs/b,gBAAkB,SAAUp6b,EAAM0sC,EAAW4mB,GAChE,IAAIihY,EAAY7nZ,EAAUtf,MACtB8pa,EAAiBl3b,EAAKwR,QAAQqI,SAAS,GAC3C,GAAI06a,EAAW,CACX,IAGIthb,EAHA4nb,EAAuB3D,EAAer9a,SAAS,GAC/Cygb,EAAuBpD,EAAer9a,SAAS,GAC/C0gb,EAAuBrD,EAAer9a,SAAS,GAE/CoM,OAAU,OACUrrB,IAApB8xC,EAAUvoC,QACViuD,GAAYpyD,EAAKmE,MAAO+yb,EAAer9a,SAAS,SAChBjf,IAA5B8xC,EAAUvoC,MAAM+I,cAAyDtS,IAAhC8xC,EAAUvoC,MAAMktC,cACzDipZ,EAAqBn2b,MAAM+I,QAAUlN,EAAKmE,MAAM+I,QAChDotb,EAAqBn2b,MAAMktC,YAAcrxC,EAAKmE,MAAMktC,cAG5Dp+B,EAAUshb,EAAUx4b,MAAMA,MAC1BkqB,EAAUsua,EAAUx4b,MAAMkqB,aACVrrB,IAAZqY,GACAxT,KAAKopF,SAAS7oF,EAAMszD,EAAWrgD,EAAS4nb,EAAsBP,EAAsBC,QAExE3/b,IAAZqrB,GACAxmB,KAAKq7b,uBAAuB96b,EAAM0sC,QAGlB9xC,IAApB8xC,EAAUj3B,YAA4C7a,IAArB8xC,EAAUl3B,QAC3C/V,KAAKq3b,qBAAqB92b,EAAKotB,MAAMrxB,MAAOm7b,EAAgBxqZ,EAAUj3B,OAASzV,EAAKyV,MAAOi3B,EAAUl3B,QAAUxV,EAAKwV,SAI5Hu+a,EAAaj5b,UAAUggc,uBAAyB,SAAU96b,EAAM0sC,GAC5D,IAAI6nZ,EAAYv0b,EAAKotB,MACjB8pa,EAAiBl3b,EAAKwR,QAAQqI,SAAS,GAAGA,SAAS,IACnD6yB,EAAUvoC,YACuBvJ,IAAhC8xC,EAAUvoC,MAAMktC,kBAAyDz2C,IAA5B8xC,EAAUvoC,MAAM+I,SAC9DklD,GAAYpyD,EAAKmE,MAAO+yb,GAE5B,IAAI6D,EAAuBzhY,GAA4Bi7X,EAAUx4b,MAAMkqB,SACnEsua,EAAUx4b,MAAMkqB,UAChBixa,EAAe1hb,OAAiC,GAAxB0hb,EAAe1hb,QAE3C0hb,EAAej7b,KAAO8+b,GAG1BhH,EAAaj5b,UAAUq/b,mBAAqB,SAAUn6b,EAAM0sC,EAAW4mB,EAAW/d,GAC9E,IAAIg/Y,EAAY7nZ,EAAUtf,MACtB8pa,EAAiBl3b,EAAKwR,QAAQqI,SAAS,GACvC0S,EAAO9sB,KAAKugB,QAAQhgB,EAAMk3b,EAAer9a,SAAS,GAAGA,SAAS,IAClE,GAAI06a,EAAW,CACX,IAAIpoW,EAAU74B,EAAUlmC,MAAMu/X,SAASA,SACnCquC,EAAmBh7b,EAAKotB,MAAMu/X,SAASA,SAC3C,GAAiB,eAAZxgU,GAAwC,SAAZA,GAA6C,eAArB6uW,GAA0D,SAArBA,EAIzF,CACD,GAAyB,SAArBA,QAA2Dpgc,IAA5B25b,EAAU5nC,SAAS2oC,KAAoB,CACtE71b,KAAKw7b,uBAAuBj7b,EAAM0sC,GAClC,IAAI8qZ,EAAgB/3b,KAAKi2b,kBAAkB11b,GACvCwM,OAAI,EACJmpb,EAA6B,GAAhB6B,EACbzkV,EAAOxmF,EAAK9W,MAAQ,EAAIkgb,EAExBnpb,EADkB,IAAlBgrb,EACIzkV,EAAO,EAGPA,EAA6B,GAArBykV,EAAgB,QAEK58b,IAAjC25b,EAAU5nC,SAAS2oC,KAAKU,MACxBv2b,KAAKy7b,2BAA2Bl7b,EAAM0sC,EAAWlgC,EAAGgrb,EAAezkV,EAAM,GAGxD,eAArBioV,QAAuEpgc,IAAlC25b,EAAU5nC,SAASD,YACxDjtZ,KAAK07b,6BAA6Bn7b,EAAM0sC,EAAW4mB,EAAW/d,QArBlEA,EAAQurY,eAAe9gb,GACvBA,EAAKwR,QAAQqI,SAAS,GAAKpa,KAAK40b,qBAAqBr0b,GAuBzDP,KAAK27b,uBAAuBp7b,EAAKotB,MAAMu/X,SAAUuqC,EAAgBxqZ,EAAUj3B,OAAS8W,EAAK9W,MAAOi3B,EAAUl3B,QAAU+W,EAAK/W,OAAQxV,QAE7GpF,IAApB8xC,EAAUj3B,YAA4C7a,IAArB8xC,EAAUl3B,QAC3C/V,KAAK27b,uBAAuBp7b,EAAKotB,MAAMu/X,SAAUuqC,EAAgBxqZ,EAAUj3B,OAAS8W,EAAK9W,MAAOi3B,EAAUl3B,QAAU+W,EAAK/W,OAAQxV,IAIzI+zb,EAAaj5b,UAAUmgc,uBAAyB,SAAUj7b,EAAM0sC,GAC5D,IAAI6nZ,EAAY7nZ,EAAUtf,MACtB8pa,EAAiBl3b,EAAKwR,QAAQqI,SAAS,GAAGA,SAAS,GACnDy7a,EAAOf,EAAU5nC,SAAS2oC,KAO9B,GANkB,YAAdA,EAAKnvb,MAAoC,SAAdmvb,EAAKnvb,KAChC+wb,EAAer9a,SAAS,GAAGrE,OAAS,GAGpC0hb,EAAer9a,SAAS,GAAGrE,OAAS,QAEtB5a,IAAd06b,EAAKnvb,KAAoB,CACzB,IAAIk1b,EAAoB3hY,GAAyB47X,EAAKnvb,MACtD+wb,EAAer9a,SAAS,GAAG5d,KAAOo/b,OAEDzgc,IAAjC25b,EAAU5nC,SAAS2oC,KAAKv0b,QACa,IAAjCwzb,EAAU5nC,SAAS2oC,KAAKv0b,KACxBm2b,EAAer9a,SAAS,GAAG1V,MAAMmtC,YAAc,EAG/C4lZ,EAAer9a,SAAS,GAAG1V,MAAMmtC,YAAc,QAGV12C,IAAzC25b,EAAU5nC,SAAS2oC,KAAKc,gBACqB,IAAzC7B,EAAU5nC,SAAS2oC,KAAKc,aACxBc,EAAer9a,SAAS,GAAGod,SAAU,EAGrCiga,EAAer9a,SAAS,GAAGod,SAAU,IAKjD88Z,EAAaj5b,UAAUogc,2BAA6B,SAAUl7b,EAAM0sC,EAAWlgC,EAAGgrb,EAAezkV,EAAM/1G,GACnG,IAGIg5b,EAEAsF,EALA/G,EAAY7nZ,EAAUtf,MACtB8pa,EAAiBl3b,EAAKwR,QAAQqI,SAAS,GAAGA,SAAS,GACnD8yY,EAAW4nC,EAAU5nC,SAErBj7Y,EAAQ,EAEZ,QAA4B9W,IAAxB+xZ,EAASD,WAA0B,CACnC,IAAIA,EAAaC,EAASD,WAC1Bh7Y,EAAsC,gBAA7Bi7Y,EAASD,WAAWvmZ,KAA0B,EAAI,EAE3Dm1b,EAAoB1hY,GADpBo8X,EAAOtpC,EAAWspC,MAElBkB,EAAer9a,SAAS,EAAInI,GAAOzV,KAAOq/b,EAC1CpE,EAAer9a,SAAS,EAAInI,GAAOulB,QAAoB,SAAT++Z,YAEvBp7b,IAAlB+xZ,EAAS2oC,WAA6C16b,IAAvB+xZ,EAAS2oC,KAAKU,OAClDsF,EAAoB1hY,GAAyB+yV,EAAS2oC,KAAKU,MAC3DkB,EAAer9a,SAAS,GAAG5d,KAAOq/b,EAClCpE,EAAer9a,SAAS,GAAGod,QAAkC,SAAvB01X,EAAS2oC,KAAKU,MAExDv2b,KAAK87b,kBAAkBrE,EAAgBM,EAAezkV,EAAMvmG,EAAGxP,EAAQ0U,IAG3Eqib,EAAaj5b,UAAUygc,kBAAoB,SAAUrE,EAAgBM,EAAezkV,EAAMvmG,EAAGxP,GACzF,GAAsB,IAAlBw6b,EACA,IAAK,IAAI57b,EAAIoB,EAAOpB,EAAIs7b,EAAer9a,SAAS3d,OAAQN,IAC1C,IAANA,IAAkD,IAAvCs7b,EAAer9a,SAASje,GAAGq7B,UACtCiga,EAAer9a,SAASje,GAAGsgC,OAAOjwB,KAAOO,EACzCA,EAAIumG,EAAO,OAIlB,CACDvmG,EAAIumG,EAA6B,GAArBykV,EAAgB,GAC5B,IAAS57b,EAAIoB,EAAOpB,EAAIs7b,EAAer9a,SAAS3d,OAAQN,IAC1C,IAANA,IAAkD,IAAvCs7b,EAAer9a,SAASje,GAAGq7B,UACtCiga,EAAer9a,SAASje,GAAGsgC,OAAOjwB,KAAOO,EACzCA,GAAK,MAMrBunb,EAAaj5b,UAAUqgc,6BAA+B,SAAUn7b,EAAM0sC,EAAW4mB,EAAW/d,GACxF,IAKI/oC,EALA+nb,EAAY7nZ,EAAUtf,MACtB8pa,EAAiBl3b,EAAKwR,QAAQqI,SAAS,GACvC0S,EAAO9sB,KAAKugB,QAAQhgB,EAAMk3b,EAAer9a,SAAS,GAAGA,SAAS,IAC9D6yY,EAAa6nC,EAAU5nC,SAASD,WAChC8qC,EAAgB/3b,KAAKg4b,wBAAwBz3b,GAE7C21b,EAA6B,GAAhB6B,EACbzkV,EAAOxmF,EAAK9W,MAAQ,EAAIkgb,EAExBnpb,EADkB,IAAlBgrb,EACIzkV,EAAO,EAGPA,EAA6B,GAArBykV,EAAgB,GAEhCplY,GAAYpyD,EAAKmE,MAAO+yb,EAAer9a,SAAS,GAAGA,SAAS,SAClCjf,IAAtB8xZ,EAAWtjZ,QACX3J,KAAK+7b,0BAA0Bx7b,EAAM0sC,EAAW4mB,EAAW/d,QAEtC36C,IAArB8xZ,EAAWyqC,OACX13b,KAAKg8b,0BAA0Bz7b,EAAMszD,EAAWo5V,EAAYlgZ,EAAGgrb,EAAezkV,QAEtDn4G,IAAxB8xZ,EAAWsrC,UACXv4b,KAAKi8b,6BAA6B17b,EAAM0sZ,QAEf9xZ,IAAzB8xZ,EAAWI,WACXrtZ,KAAKk8b,8BAA8B37b,EAAMszD,EAAWo5V,EAAYlgZ,EAAGgrb,EAAezkV,EAAMx9D,QAE5D36C,IAA5B8xZ,EAAW0pC,cACX32b,KAAKm8b,iCAAiC57b,EAAMszD,EAAWo5V,EAAYlgZ,EAAGgrb,EAAezkV,QAEjEn4G,IAApB8xZ,EAAWspC,MACXv2b,KAAKo8b,yBAAyB77b,EAAMszD,EAAWo5V,EAAYlgZ,EAAGgrb,EAAezkV,QAElDn4G,IAA3B8xZ,EAAWmd,aACXpqa,KAAKq8b,gCAAgC97b,EAAM0sC,EAAW4mB,EAAW/d,IAIzEw+Y,EAAaj5b,UAAU0gc,0BAA4B,SAAUx7b,EAAM0sC,EAAW4mB,EAAW/d,GAUrF,IAAK,IATDg/Y,EAAY7nZ,EAAUtf,MACtB8pa,EAAiBl3b,EAAKwR,QAAQqI,SAAS,GACvC6/a,EAAcxC,EAAer9a,SAAS,GAItC6yY,GADyBwqC,EAAer9a,SAAS,GAAGA,SAAS3d,OAChDq4b,EAAU5nC,SAASD,YAG3B7uZ,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAK2vZ,EAAWtjZ,QAASvL,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACxE,IAAIf,EAAMwF,EAAGzE,GACTk+b,EAAahla,OAAOj6B,GACpBk/b,EAAetC,EAAY7/a,SAASkib,EAJhC,GAKJE,EAAcj8b,EAAKotB,MAAMu/X,SAASD,WAAWtjZ,OAAO2yb,GACxDt8b,KAAKy8b,mBAAmBl8b,EAAM0sZ,EAAWtjZ,OAAO2yb,GAAaE,EAAaD,EAActvZ,EAAW4mB,EAAW/d,KAGtHw+Y,EAAaj5b,UAAUohc,mBAAqB,SAAUl8b,EAAMm8b,EAAUF,EAAaD,EAActvZ,EAAW4mB,EAAW/d,GACnH,IAKIkrE,EACAx6F,EANAixa,EAAiBl3b,EAAKwR,QAAQqI,SAAS,GACvC06a,EAAY7nZ,EAAUtf,MACtBqta,EAASuB,EAAanib,SAAS,GAC/B6gb,EAASsB,EAAanib,SAAS,GAC/B8gb,EAASqB,EAAanib,SAAS,GAgBnC,GAbI6yB,EAAUvoC,aAC0BvJ,IAAhC8xC,EAAUvoC,MAAMktC,kBAAyDz2C,IAA5B8xC,EAAUvoC,MAAM+I,UAC7Dgqb,EAAer9a,SAAS,GAAGA,SAAS,GAAG1V,MAAMktC,YAAc3E,EAAUvoC,MAAMktC,YAC3E6lZ,EAAer9a,SAAS,GAAGA,SAAS,GAAG1V,MAAM+I,QAAUw/B,EAAUvoC,MAAM+I,eAGzCtS,IAAlC25b,EAAU5nC,SAASD,aACnBjsS,EAAY07U,EAASpgc,MACrBkqB,EAAUk2a,EAASl2a,cAELrrB,IAAd6lH,GACAhhH,KAAKopF,SAASn8C,EAAW4mB,EAAWmtD,EAAWg6U,EAAQC,EAAQC,QAEnD//b,IAAZqrB,EAAuB,CACnBymB,EAAUvoC,OACViuD,GAAY1lB,EAAUvoC,MAAO+yb,EAAer9a,SAAS,IAEzD,IAAIkhb,EAAuBzhY,GAA4BrzC,GACvD+1a,EAAanib,SAAS,GAAG5d,KAAO8+b,EAqBpC,QAnBwBngc,IAApBuhc,EAAS3mb,aAA2C5a,IAAnBuhc,EAAS1mb,OAC1ChW,KAAK28b,aAAaD,EAAUH,QAEZphc,IAAhBuhc,EAASp5b,KACTi5b,EAAaj5b,GAAKo5b,EAASp5b,SAEPnI,IAApBuhc,EAASjga,SACT8/Z,EAAa9/Z,OAASiga,EAASjga,aAEEthC,IAAjCuhc,EAASjpY,sBACT8oY,EAAa9oY,oBAAsBipY,EAASjpY,0BAEbt4D,IAA/Buhc,EAAShpY,oBACT6oY,EAAa7oY,kBAAoBgpY,EAAShpY,wBAEtBv4D,IAApBuhc,EAAS/wb,SACT4wb,EAAa/6C,6BAA6Bg7C,EAAY7wb,OAAOoB,EAAGyvb,EAAY7wb,OAAOqB,EAAG,YACtFuvb,EAAahuY,aAAe,cAEHpzD,IAAzBuhc,EAAS9lY,YAA2B,CACpC,IAAIA,OAAc,EACdjI,EAAa8oY,EAAer9a,SAAS,GAAGA,SAAS,GACjDmib,EAAanib,SAAS,IAAMmib,EAAanib,SAAS3d,OAAS,IAC3Dm6D,EAAc2lY,EAAanib,SAAS,GACpC07B,EAAQ6zW,iBAAiB+yC,EAAS9lY,YAAY,GAAIA,EAAajI,IAGvE,QAAuBxzD,IAAnBuhc,EAAS5lY,MAAqB,CAC9B,IAAIA,OAAQ,EACRxe,EAAOm/Y,EAAer9a,SAAS,GAAGA,SAAS,GAC3Cmib,EAAanib,SAAS,IAAMmib,EAAanib,SAAS3d,OAAS,IAC3Dq6D,EAAQylY,EAAanib,SAAS,GAC9B07B,EAAQi2Y,WAAW2Q,EAAS5lY,MAAM,GAAIA,EAAOxe,SAG5Bn9C,IAArBuhc,EAASlla,SACTx3B,KAAK8ob,iCAAiCyT,EAAcG,EAASlla,UAGrE88Z,EAAaj5b,UAAUghc,gCAAkC,SAAU97b,EAAM0sC,EAAW4mB,EAAW/d,GAC3F,IAEI0mZ,EAFApyB,EAAcn9X,EAAUtf,MAAMu/X,SAASD,WAAWmd,YAClDsuB,EAAiBn4b,EAAKwR,QAAQqI,SAAS,GAAGA,SAAS,GAAGA,SAAS,QAEvCjf,IAAxBiva,EAAYxuM,UACZ4gO,EAAcj8b,EAAKotB,MAAMu/X,SAASD,WAAWmd,YAAYxuM,QACzD57N,KAAKy8b,mBAAmBl8b,EAAM6pa,EAAYxuM,QAAS4gO,EAAa9D,EAAet+a,SAAS,GAAI6yB,EAAW4mB,EAAW/d,SAE3F36C,IAAvBiva,EAAYvxY,SACZ2ja,EAAcj8b,EAAKotB,MAAMu/X,SAASD,WAAWmd,YAAYvxY,OACzD74B,KAAKy8b,mBAAmBl8b,EAAM6pa,EAAYvxY,OAAQ2ja,EAAa9D,EAAet+a,SAAS,GAAI6yB,EAAW4mB,EAAW/d,SAEzF36C,IAAxBiva,EAAYC,UACZmyB,EAAcj8b,EAAKotB,MAAMu/X,SAASD,WAAWmd,YAAYC,QACzDrqa,KAAKy8b,mBAAmBl8b,EAAM6pa,EAAYC,QAASmyB,EAAa9D,EAAet+a,SAAS,GAAI6yB,EAAW4mB,EAAW/d,IAEtH,IAAK,IAAI13C,EAAK,EAAGyE,EAAKtC,EAAKmsZ,SAAUtuZ,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvD,IAAIua,EAAO9V,EAAGzE,GACVyhD,EAAY/J,EAAQwjB,UAAU3gD,GAClC,OAAQknC,EAAUqZ,cACd,IAAK,UACGkxW,EAAYxuM,cAA2CzgO,IAAhCiva,EAAYxuM,QAAQpkM,SAC3Cse,EAAQ8zX,wBAAwB/pX,MAAiBqZ,aAAc,YAEnE,MACJ,IAAK,SACGkxW,EAAYvxY,aAAyC19B,IAA/Biva,EAAYvxY,OAAOrB,SACzCse,EAAQ8zX,wBAAwB/pX,MAAiBqZ,aAAc,WAEnE,MACJ,IAAK,UACGkxW,EAAYC,cAA2Clva,IAAhCiva,EAAYC,QAAQ7yY,SAC3Cse,EAAQ8zX,wBAAwB/pX,MAAiBqZ,aAAc,eAOnFo7X,EAAaj5b,UAAUshc,aAAe,SAAUhzb,EAAQizb,QAC9Bzhc,IAAlBwO,EAAOoM,SACP6mb,EAAa7mb,OAASpM,EAAOoM,OAC7B6mb,EAAaxib,SAAS,GAAGrE,OAASpM,EAAOoM,OACzC6mb,EAAaxib,SAAS,GAAGrE,OAAyB,IAAhBpM,EAAOoM,OACzC6mb,EAAaxib,SAAS,GAAGrE,OAAyB,IAAhBpM,EAAOoM,aAExB5a,IAAjBwO,EAAOqM,QACP4mb,EAAa5mb,MAAQrM,EAAOqM,MAC5B4mb,EAAaxib,SAAS,GAAGpE,MAAQrM,EAAOqM,MACxC4mb,EAAaxib,SAAS,GAAGpE,MAAuB,IAAfrM,EAAOqM,MACxC4mb,EAAaxib,SAAS,GAAGpE,MAAuB,IAAfrM,EAAOqM,QAIhDs+a,EAAaj5b,UAAU2gc,0BAA4B,SAAUz7b,EAAMszD,EAAWo5V,EAAYlgZ,EAAGgrb,EAAezkV,GAC5F/yG,EAAKotB,MAAjB,IACI8pa,EAAiBl3b,EAAKwR,QAAQqI,SAAS,GAAGA,SAAS,GACnDnI,EAAiD,gBAAxC1R,EAAKotB,MAAMu/X,SAASD,WAAWvmZ,KAA0B,EAAI,GACjD,IAArBumZ,EAAWyqC,MACXD,EAAer9a,SAAS,EAAInI,GAAOulB,SAAU,EAG7Ciga,EAAer9a,SAAS,EAAInI,GAAOulB,SAAU,EAEjDx3B,KAAK87b,kBAAkBrE,EAAgBM,EAAezkV,EAAMvmG,EAAG,EAAIkF,IAGvEqib,EAAaj5b,UAAU4gc,6BAA+B,SAAU17b,EAAM0sZ,GACtD1sZ,EAAKotB,MAAjB,IACI8pa,EAAkBl3b,EAAKwR,QAAQqI,SAAS,GAAGA,SAAS,GAAGA,SAAS,GACxC,YAAxB6yY,EAAWsrC,WACXd,EAAe/yb,MAAMmtC,YAAc,EACnC4lZ,EAAe/yb,MAAMqtC,gBAAkB,OAEf,SAAxBk7W,EAAWsrC,WACXd,EAAe/yb,MAAMmtC,YAAc,EACnC4lZ,EAAe/yb,MAAMqtC,gBAAkB,OAEf,UAAxBk7W,EAAWsrC,WACXd,EAAe/yb,MAAMmtC,YAAc,EACnC4lZ,EAAe/yb,MAAMqtC,gBAAkB,QAI/CuiZ,EAAaj5b,UAAUiyZ,wBAA0B,SAAU/sZ,EAAMi3B,EAASse,GACtE,GAAIv1C,EAAKotB,MAAMu/X,SAASD,WAAWE,WAC5B5sZ,EAAKotB,MAAMu/X,SAASD,WAAWE,UAAU1wZ,OAAS,EAErD,IAAK,IADD0wZ,EAAY5sZ,EAAKotB,MAAMu/X,SAASD,WAAWE,UACtC5pY,EAAI4pY,EAAU1wZ,OAAS,EAAG8mB,GAAK,EAAGA,IAAK,CAC5C,IAAIs5a,EAAc/mZ,EAAQwjB,UAAU6zV,EAAU5pY,IAC9Cs5a,EAAYrla,QAAUA,EACtBse,EAAQw3W,wBAAwBuvC,EAAY9qb,QAAS8qb,EAAarla,GAC9DA,IACgC,UAA5Bqla,EAAYlva,MAAMA,OAClB3tB,KAAKs3b,mBAAmBuF,EAAaA,EAAY9qb,QAAQqI,SAAS,GAAGA,UAE7B,eAAxCyib,EAAYlva,MAAMu/X,SAASA,UAC3BltZ,KAAKu3b,wBAAwBsF,IAIrC,IAAK,IADDhrY,EAAagrY,EAAYlwC,QAAQpyY,OAAOsib,EAAYnwC,UAC/CvwZ,EAAI01D,EAAWp1D,OAAS,EAAGN,GAAK,EAAGA,IAAK,CAC7C,IAAI0jD,EAAY/J,EAAQwjB,UAAUzH,EAAW11D,IAC7C0jD,EAAUroB,QAAUA,EACpBse,EAAQw3W,wBAAwBztW,EAAU9tC,QAAS8tC,EAAWroB,IAItEA,IACyB,UAArBj3B,EAAKotB,MAAMA,OACX3tB,KAAKs3b,mBAAmB/2b,EAAMA,EAAKwR,QAAQqI,SAAS,GAAGA,UAEtB,eAAjC7Z,EAAKotB,MAAMu/X,SAASA,UACpBltZ,KAAKu3b,wBAAwBh3b,GAEI,SAAjCA,EAAKotB,MAAMu/X,SAASA,UACC,aAArB3sZ,EAAKotB,MAAMA,OAAgE,SAAxCptB,EAAKotB,MAAMu/X,SAASD,WAAWspC,OAClEh2b,EAAKwR,QAAQqI,SAAS,GAAGA,SAAS,GAAGA,SAAS,GAAGod,SAAU,KAKvE88Z,EAAaj5b,UAAU6gc,8BAAgC,SAAU37b,EAAMszD,EAAWo5V,EAAYlgZ,EAAGgrb,EAAezkV,EAAMx9D,GAClH,IAAI0hZ,EAAcj3b,EAAKotB,MAAMu/X,SAASD,WAAWtjZ,OAAOlN,OACpDg7b,EAAiBl3b,EAAKwR,QAAQqI,SAAS,GAAGA,SAAS,GACnDnI,EAAiD,gBAAxC1R,EAAKotB,MAAMu/X,SAASD,WAAWvmZ,KAA0B,EAAI,GAC7C,IAAzBumZ,EAAWI,WACXrtZ,KAAKstZ,wBAAwB/sZ,GAAM,EAAMu1C,GACzC2hZ,EAAer9a,SAASnI,EAAQulb,GAAahga,SAAU,IAGvDx3B,KAAKstZ,wBAAwB/sZ,GAAM,EAAOu1C,GAC1C2hZ,EAAer9a,SAASnI,EAAQulb,GAAahga,SAAU,GAE3Dx3B,KAAK87b,kBAAkBrE,EAAgBM,EAAezkV,EAAMvmG,EAAG,EAAIyqb,IAGvElD,EAAaj5b,UAAU8gc,iCAAmC,SAAU57b,EAAMszD,EAAWo5V,EAAYlgZ,EAAGgrb,EAAezkV,GAC/G,IAAImkV,EAAiBl3b,EAAKwR,QAAQqI,SAAS,GAAGA,SAAS,GACnDnI,EAAiD,gBAAxC1R,EAAKotB,MAAMu/X,SAASD,WAAWvmZ,KAA0B,EAAI,GAC1C,IAA5BumZ,EAAW0pC,aACXc,EAAer9a,SAAS,EAAInI,GAAOulB,SAAU,EAG7Ciga,EAAer9a,SAAS,EAAInI,GAAOulB,SAAU,EAEjDx3B,KAAK87b,kBAAkBrE,EAAgBM,EAAezkV,EAAMvmG,EAAG,EAAIkF,IAGvEqib,EAAaj5b,UAAU+gc,yBAA2B,SAAU77b,EAAMszD,EAAWo5V,EAAYlgZ,EAAGgrb,EAAezkV,GACvGtzG,KAAKy7b,2BAA2Bl7b,EAAMA,EAAMwM,EAAGgrb,EAAezkV,EAAM,IAGxEghV,EAAaj5b,UAAUgxb,oBAAsB,SAAUh5X,EAAcQ,EAAWqvX,EAAYptY,GACxF,IAAIgnZ,EAAW5Z,EAAWv1Z,MAU1B,YAT0BxyB,IAAtB2hc,EAASC,WACT1pY,EAAerzD,KAAKg9b,YAAY3pY,EAAcQ,EAAWqvX,EAAYptY,SAE5C36C,IAAzB2hc,EAASG,cACT5pY,EAAerzD,KAAKk9b,eAAe7pY,EAAcQ,EAAWqvX,EAAYptY,SAEnD36C,IAArB2hc,EAASn8b,UACT0yD,EAAerzD,KAAKm9b,WAAW9pY,EAAcQ,EAAWqvX,EAAYptY,IAEjEud,GAGXihY,EAAaj5b,UAAU2hc,YAAc,SAAU3pY,EAAcQ,EAAWqvX,EAAYptY,GAQhF,GAPoC,WAA/BotY,EAAWv1Z,MAAc,WAC1BmoB,EAAQ8zX,wBAAwBv2W,EAAcQ,GAC1CntD,KAAM,WACNq+C,iBAAmBp3B,MAAO,QAASjpB,OAASk5B,KAAM,YAEtDy1B,EAAathD,QAAQqI,SAAS,GAAGod,SAAU,GAEX,YAA/B0rZ,EAAWv1Z,MAAc,SAAiB,CAC3CmoB,EAAQ8zX,wBAAwBv2W,EAAcQ,GAC1CntD,KAAM,WACNq+C,iBAAmBp3B,MAAO,QAASjpB,OAASk5B,KAAM,UAClDinB,iBAAmBl3B,MAAO,UAE9B,IAAIic,EAAU,IAAI8X,GAEdunW,GADU,IAAIvnW,QACA,GAClB9X,EAAUypB,EAAai1V,kBAAkBj1V,EAAczpB,GAEvD,IAAK,IADDi/W,EAAcx1V,EAAazG,mBACtBrpC,EAAI,EAAGA,EAAIslY,EAAYpsZ,OAAS,EAAG8mB,IACxC9mB,QAAkB42D,EAAahZ,SAASwuW,EAAYtlY,GAAIslY,EAAYtlY,EAAI,IACxE0lY,EAAc51V,EAAakyT,SAASsjC,EAAYtlY,GAAIslY,EAAYtlY,EAAI,IAExE8vC,EAAathD,QAAQqI,SAAS,GAAG5d,KAAOysZ,EAAY,GACpD51V,EAAathD,QAAQqI,SAAS,GAAG9W,GAAK+vD,EAAa/vD,GAAK,IAAO4/a,EAAWv1Z,MAAc,SACxF0lC,EAAathD,QAAQqI,SAAS,GAAGvO,QAAUo9Y,EAAY,GAAGl8Y,EAC1DsmD,EAAathD,QAAQqI,SAAS,GAAGnO,QAAUg9Y,EAAY,GAAGj8Y,EAC1DqmD,EAAathD,QAAQqI,SAAS,GAAGyyB,YAAc,GAC/CwmB,EAAathD,QAAQqI,SAAS,GAAG/M,UAAYqzY,GAAUM,KAU3D,MARoC,gBAA/BkiC,EAAWv1Z,MAAc,WAC1BmoB,EAAQ8zX,wBAAwBv2W,EAAcQ,GAC1CntD,KAAM,WACNq+C,iBAAmBp3B,MAAO,QAASjpB,OAASk5B,KAAM,UAClDinB,iBAAmBl3B,MAAO,UAAW3X,MAAO,GAAID,OAAQ,GAAIrR,OAASk5B,KAAM,YAE/Ey1B,EAAathD,QAAQqI,SAAS,GAAGod,SAAU,GAExC67B,GAGXihY,EAAaj5b,UAAU6hc,eAAiB,SAAU7pY,EAAcQ,EAAWqvX,EAAYptY,GAsBnF,MArBuC,YAAlCotY,EAAWv1Z,MAAiB,aAC7BmoB,EAAQ8zX,wBAAwBv2W,EAAcQ,GAC1CntD,KAAM,WAAYhC,OAASqtC,gBAAiB,QAC5CgT,iBAAmBp3B,MAAO,QAASjpB,OAASk5B,KAAM,UAClDinB,iBAAmBl3B,MAAO,UAGK,gBAAlCu1Z,EAAWv1Z,MAAiB,aAC7BmoB,EAAQ8zX,wBAAwBv2W,EAAcQ,GAC1CntD,KAAM,WAAYhC,OAASqtC,gBAAiB,OAC5CgT,iBAAmBp3B,MAAO,QAASjpB,OAASk5B,KAAM,UAClDinB,iBAAmBl3B,MAAO,UAGK,kBAAlCu1Z,EAAWv1Z,MAAiB,aAC7BmoB,EAAQ8zX,wBAAwBv2W,EAAcQ,GAC1CntD,KAAM,WAAYhC,OAASqtC,gBAAiB,OAC5CgT,iBAAmBp3B,MAAO,QAASjpB,OAASk5B,KAAM,UAClDinB,iBAAmBl3B,MAAO,QAAS3X,MAAO,EAAGD,OAAQ,GAAIrR,OAASk5B,KAAM,YAGzEy1B,GAGXihY,EAAaj5b,UAAU8hc,WAAa,SAAU9pY,EAAcQ,EAAWqvX,EAAYptY,GAC/E,IACIv0B,EACAspB,EACJ,GAAkC,YAA7BgpB,EAAUlmC,MAAa,SACxB,QAAmCxyB,IAA9B+nb,EAAWv1Z,MAAa,QAAiB,CAC1C,GAAoC,sBAA9Bu1Z,EAAWv1Z,MAAa,SACM,yBAA9Bu1Z,EAAWv1Z,MAAa,QAA+B,CACzD,IAAIic,EAAU,IAAI8X,GAClB9X,EAAUypB,EAAai1V,kBAAkBj1V,EAAczpB,GAEvD,IAAK,IADDi/W,EAAcx1V,EAAazG,mBACtBrpC,EAAI,EAAGA,EAAIslY,EAAYpsZ,OAAS,EAAG8mB,IAAK,CAC7C9mB,QAAkB42D,EAAahZ,SAASwuW,EAAYtlY,GAAIslY,EAAYtlY,EAAI,IACxE,IAAI65a,EAZA,GAYY3gc,OACZA,QAAU2gc,IACV77a,EAAQw/B,GAAU8nW,EAAYtlY,GAAIslY,EAAYtlY,EAAI,IAClDsnB,EAAKqP,GAAM7sC,UAAUw7Y,EAAYtlY,GAAIhC,EAAO67a,KAIxD/pY,EAAathD,QAAQqI,SAAS,GAAG9W,GAAK+vD,EAAa/vD,GAAK,IAAO4/a,EAAWv1Z,MAAa,QACvF0lC,EAAathD,QAAQqI,SAAS,GAAGpE,MAAQ,GACzCq9C,EAAathD,QAAQqI,SAAS,GAAGrE,OAAS,GAC1Cs9C,EAAathD,QAAQqI,SAAS,GAAG5d,KAAO,yDACxC62D,EAAathD,QAAQqI,SAAS,GAAGq5C,oBAAsB,SACvDJ,EAAathD,QAAQqI,SAAS,GAAGs5C,kBAAoB,SACrDL,EAAathD,QAAQqI,SAAS,GAAG/M,UAAYqzY,GAAUM,KACvD3tV,EAAathD,QAAQqI,SAAS,GAAG1V,MAAMk5B,KAAsC,yBAA9BslZ,EAAWv1Z,MAAa,QACnE,YAAc,QAClB0lC,EAAathD,QAAQqI,SAAS,GAAGvO,QAAUg/B,EAAG99B,EAC9CsmD,EAAathD,QAAQqI,SAAS,GAAGnO,QAAU4+B,EAAG79B,OAGf,yBAA7B6mD,EAAUlmC,MAAa,SACC,sBAA7BkmC,EAAUlmC,MAAa,UACW,YAA9Bu1Z,EAAWv1Z,MAAa,QACzB0lC,EAAathD,QAAQqI,SAAS,GAAG1V,MAAMk5B,KAAsC,yBAA9BslZ,EAAWv1Z,MAAa,QACnE,YAAc,QAGlB0lC,EAAathD,QAAQqI,SAAS,GAAGod,SAAU,GAGnD,OAAO67B,GAIXihY,EAAaj5b,UAAUg8b,qBAAuB,SAAU/6b,EAAOyV,EAASiE,EAAOD,GAC3EhE,EAAQqI,SAAS,GAAGpE,MAAQA,EAC5BjE,EAAQqI,SAAS,GAAGrE,OAASA,EAE7B,IAAIsnb,EAAYtrb,EAAQqI,SAAS,GACjCijb,EAAUrnb,MAAgB,IAARA,EAClBqnb,EAAUtnb,OAAkB,IAATA,EACnB,IAAIohb,EAAcplb,EAAQqI,SAAS,GACb,YAAlB9d,EAAMkqB,SACN2wa,EAAYnhb,MAAgB,IAARA,EACpBmhb,EAAYphb,OAAkB,GAATA,IAGrBohb,EAAYnhb,MAAgB,GAARA,EACpBmhb,EAAYphb,OAAkB,GAATA,IAI7Bu+a,EAAaj5b,UAAUukb,qBAAuB,SAAUr/a,EAAMu1C,EAAS8xS,EAAID,GACvE,IAAI21G,EAAkB/8b,EAAK+C,GAAGpG,MAAM,KACpC,GAA2B,mBAAvBogc,EAAgB,GAEhB,IAAK,IADD78b,OAAa,EACR8iB,EAAI,EAAGA,EAAIhjB,EAAKosZ,QAAQlwZ,OAAQ8mB,IAAK,CAC1C,IAAIs8B,EAAY/J,EAAQwjB,UAAU/4D,EAAKosZ,QAAQppY,IAC3Cs8B,IACAp/C,EAAaq1C,EAAQwjB,UAAUzZ,EAAUvI,WAE7C,IAAI/5C,GAAUwP,EAAGxM,EAAKsL,QAAU+7U,EAAI56U,EAAGzM,EAAK0L,QAAU07U,GAClD9oU,EAAMghC,EAAU9I,YAChBtc,EAAWyf,GAAM+G,WAAW1jD,EAAOshB,GACnC0C,EAAQ24B,GAAM6G,UAAUliC,EAAKthB,GACjC,GAAIkD,EAAWktB,MAAMipC,YACjB,IAAK,IAAI7pD,EAAI,EAAGA,EAAKtM,EAAWktB,MAAiB,YAAElxB,OAAQsQ,IACvD,GAAKtM,EAAWktB,MAAiB,YAAE5gB,GAAGzJ,KAAOg6b,EAAgBA,EAAgB7gc,OAAS,GAIlF,OAHCgE,EAAWktB,MAAMipC,YAAY7pD,GAAItQ,OAASg+B,EAC1Ch6B,EAAWktB,MAAMipC,YAAY7pD,GAAIwU,MAAQA,EAC1CvhB,KAAK25b,kBAAkBl5b,EAAWsR,QAAQ2kB,OAAQn2B,EAAKwR,QAASxU,EAAOgD,IAChE,EAM3B,QAAIA,EAAKksZ,YACLzsZ,KAAK0wG,KAAKnwG,EAAMqnV,EAAID,EAAI7xS,IACjB,IAIfw+Y,EAAaj5b,UAAU8+b,uBAAyB,SAAUrma,EAAO4C,GAC7D,IACImW,EAAc,EAClB,OAFgBwK,GAAiBvjB,EAAO4C,EAAQA,IAG5C,IAAK,QACDmW,EAAc,EACd,MACJ,IAAK,OACDA,EAAc,IACd,MACJ,IAAK,SACDA,EAAc,GACd,MACJ,IAAK,MACDA,EAAc,IAGtB,OAAOA,GAEXynZ,EAAaj5b,UAAUi6b,sBAAwB,SAAUh5b,EAAOyV,EAASiE,EAAOD,GAC5EhE,EAAQqI,SAAS,GAAGpE,MAAQA,EAC5BjE,EAAQqI,SAAS,GAAGrE,OAASA,EAC7BhE,EAAQqI,SAAS,GAAGpE,MAAgB,IAARA,EAC5BjE,EAAQqI,SAAS,GAAGrE,OAAkB,IAATA,GAEjCu+a,EAAaj5b,UAAU0/b,0BAA4B,SAAUz+b,EAAOyV,EAASiE,EAAOD,GAChFhE,EAAQqI,SAAS,GAAGpE,MAAQA,EAC5BjE,EAAQqI,SAAS,GAAGrE,OAASA,GAEjCu+a,EAAaj5b,UAAUsgc,uBAAyB,SAAUzuC,EAAUn7Y,EAASiE,EAAOD,EAAQxV,GAExFwR,EAAQqI,SAAS,GAAGpE,MAAQA,EAC5BjE,EAAQqI,SAAS,GAAGrE,OAASA,EAC7BhE,EAAQqI,SAAS,GAAGA,SAAS,GAAGpE,MAAQA,EACxCjE,EAAQqI,SAAS,GAAGA,SAAS,GAAGrE,OAASA,EACR,gBAA7Bm3Y,EAASD,WAAWvmZ,OACpBqL,EAAQqI,SAAS,GAAGA,SAAS,GAAGpE,MAAQ3J,KAAKC,IAAI0J,EAAQ,EAAG,GAC5DjE,EAAQqI,SAAS,GAAGA,SAAS,GAAGrE,OAAS1J,KAAKC,IAAIyJ,EAAS,EAAG,GAC9DhE,EAAQqI,SAAS,GAAGA,SAAS,GAAGpE,MAAQA,EACxCjE,EAAQqI,SAAS,GAAGA,SAAS,GAAGrE,OAASA,GAE7C,IACIhJ,EAEAipb,EAHAD,EAAW,IAAIjiY,GAEfhnC,EAAO9sB,KAAKugB,QAAQhgB,EAAMw1b,GAS1BG,EAA0B,IAL1BF,EADsB,SAAtB9oC,EAASA,SACIltZ,KAAKi2b,kBAAkB11b,GAGvBP,KAAKg4b,wBAAwBz3b,IAG1C+yG,GAAQt9F,GAAS8W,EAAK9W,OAAS,EAE/BjJ,EADe,IAAfipb,EACI1iV,EAAO,EAGPA,EAAQ4iV,EAAa,EAbb,GAaoBF,EAAa,GAAkB,EAEnE,IAAK,IAAI75b,EAAI,EAAGA,EAAI4V,EAAQqI,SAAS,GAAGA,SAAS3d,OAAQN,IACjD4V,EAAQqI,SAAS,GAAGA,SAASje,GAAGq7B,UAC/BzlB,EAAQqI,SAAS,GAAGA,SAASje,GAAGmH,GAAG/E,QAAQ,UAAY,GACpDwT,EAAQqI,SAAS,GAAGA,SAASje,GAAGmH,GAAG/E,QAAQ,oBAAsB,GACjEwT,EAAQqI,SAAS,GAAGA,SAASje,GAAGmH,GAAG/E,QAAQ,aAAe,GAC1DwT,EAAQqI,SAAS,GAAGA,SAASje,GAAGmH,GAAG/E,QAAQ,iBAAmB,KAClEwT,EAAQqI,SAAS,GAAGA,SAASje,GAAGsgC,OAAOjwB,KAAOO,EAC9CA,GAAKgF,EAAQqI,SAAS,GAAGA,SAASje,GAAGuwC,WAAW12B,MAtBxC,IA0BpBs+a,EAAaj5b,UAAUytb,iCAAmC,SAAU9nb,EAASw2B,GACzE,GAAIx2B,aAAmBo2D,GACnB,IAAK,IAAIj7D,EAAI,EAAGA,EAAI6E,EAAQoZ,SAAS3d,OAAQN,IACzC6D,KAAK8ob,iCAAiC9nb,EAAQoZ,SAASje,GAAIq7B,GAGnEx2B,EAAQw2B,QAAUA,GAOtB88Z,EAAaj5b,UAAUiX,QAAU,aAQjCgib,EAAaj5b,UAAUkkC,cAAgB,WAInC,MAAO,QAEJ+0Z,KAkBP16X,IACA9wD,MAAS,sKAETspI,QAAW,+CACXilR,WAAc,sVAIdkmC,WAAc,mHAEdpF,eAAkB,4OAIlBr+X,IAEAs4E,QAAW,yDACXorT,MAAS,4qBAOT58b,MAAS,iHACT68b,WAAc,oFACdv4S,OAAU,0HACVw4S,aAAgB,iFAChBC,YAAe,qGACfC,KAAQ,yFACRC,OAAU,oCACVC,UAAa,4GACbC,SAAY,2FACZC,SAAY,8IAGZhkY,IACA0gI,KAAQ,GAERujQ,UAAa,2KAGbC,UAAa,sSAIbF,SAAY,wHAEZj2b,QAAW,iVAIXo2b,WAAc,qZAKdC,oBAAuB,6HAGvBC,mBAAsB,mMAGtBnkY,IACAwgI,KAAQ,GACR4jQ,QAAW,yvBAOXC,QAAW,gLAEXC,KAAQ,gJAERC,qBAAwB,6eAKxBC,OAAU,g5FA2BVC,aAAgB,+XAIhBC,KAAQ,osDAeRC,OAAU,0zBAQVzkY,IACAsgI,KAAQ,GACRokQ,SAAY,2fAKZC,sBAAyB,iJAEzBC,sBAAyB,0OiXn1EzBC,GAAmC,WAKnC,SAASA,KA8ZT,OA1ZAA,EAAkB5jc,UAAUmhb,eAAiB,SAAUnkX,EAAMviB,GACzD,IACIpf,EADAwoa,KAGJ,GADA7mY,EAAK+vV,WrX0Cb,SAA0BvoW,EAAW/J,GAWjC,OATI+J,EAAUkG,YAAcC,GAAqBm5Y,SACrCt/Y,EAAUkG,YAAcC,GAAqBm5Y,SAEhDt/Y,EAAUkG,YAAcC,GAAqBo5Y,gBAC1CtpZ,EAAQiQ,YAAciD,GAAmBm2Y,SAGzC,EqXlDJE,CAAUhnY,EAAMviB,GAAU,CAE1B,IAAIwpZ,EAAUt/b,KAAKigD,UAAUoY,GAC7B3hC,EAASR,GAAK0W,SAAS0yZ,GAKvB,IAAK,IAJDC,EAAgBlnY,EAAKmnY,YACrBC,EAAS3pZ,EAAQwb,gBACjBxyC,GAAS,EACT+5Z,EAAQ/iY,EAAQ+b,WACXm7F,EAAI,EAAGA,EAAI6rR,EAAMp8a,OAAQuwJ,IAAK,CACnC,IAAI0yS,EAAa7mB,EAAM7rR,GACvB,GAAI30F,GAAQqnY,GAAcrnY,EAAK/0D,KAAOo8b,EAAWp8b,GAAI,CACjD,IAAIq8b,EAAU3/b,KAAKigD,UAAUy/Y,GACzB7uZ,EAAU3a,GAAK0W,SAAS+yZ,GAC5B,GAAI3/b,KAAK4/b,eAAelpa,EAAQma,GAAU,CACtC,IAAIgvZ,EAAe7/b,KAAKiiD,UAAUq9Y,EAASK,GAAS,EAAOF,GAAQ,GACnE,GAAII,EAAapjc,OAAS,EACtB,IAAK,IAAIN,EAAI,EAAGA,EAAI0jc,EAAapjc,OAAQN,IAAK,CAC1C,IACIs+B,EAAW,EACXylY,EAAe,EACf9nY,EAAa,EACbr7B,EAAMiD,KAAK8/b,yBAAyBznY,EAAMwnY,EAAa1jc,IAC3D,IAAwB,IAApBY,EAAIq7B,WAAmB,CACvBqC,EAAW19B,EAAIgjc,oBACFhjc,EAAIijc,WACjB9/B,EAAenja,EAAImja,aACnB9nY,EAAar7B,EAAIq7B,WACjB,IAAI6na,EAAWjgc,KAAKuwC,iBAAkB9V,EAAY8ka,EAAgB,EAAKD,GACnEY,EAAWlgc,KAAKuwC,iBAAkB9V,EAAY8ka,EAAgB,EAAKD,GAGnEt/b,KAAKm6C,aAAa+lZ,KAClBA,EAAWD,GAEf,IAAI1ic,OAAQ,EACRshB,OAAM,EACVthB,EAAQ86D,EAAKthB,YAETl4B,EADc,aAAdw5C,EAAK3xD,KACC2xD,EAAKtZ,YAGLsZ,EAAKzL,mBAAmBx0B,GAElC,IAAI7W,EAAQvhB,KAAKmgc,iBAAiB5ic,EAAOshB,GACzC,GAAIqgb,EAAWzic,OAAQ,CACnB,IAAIwhD,OAAa,EACjBA,EAAaoa,EAAKthB,YAClB,IAAIqpZ,EAAM/zb,KAAKE,IAAIvM,KAAKqgc,kBAAkBpiZ,EAAYiiZ,IAClDI,EAAO,EACPC,GAAY,EAChBzhb,GAAS,EACT,IAAK,IAAIqH,EAAI,EAAGA,EAAI+4a,EAAWh/B,GAAc9X,QAAQ3rZ,OAAQ0pB,IAAK,CAC9DrH,IACA,IAAI0hb,EAAStB,EAAWh/B,GAAc9X,QAAQjiY,GAE9C,GADAm6a,EAAOj0b,KAAKE,IAAIvM,KAAKqgc,kBAAkBpiZ,EAAYuiZ,EAAOhhZ,WACtD4gZ,EAAME,EAAM,CACZC,EAAWzhb,EACX,OAGR,GAAIyhb,GAAY,EAAG,CACf,IAAI3/W,OAAQ,GACZA,EAAQ5gF,KAAKygc,cAAcR,EAAUC,EAAU3+a,EAAOk+a,EAAQrna,EAAYigC,EAAMviB,IAC1E3uC,OAASu4b,EAAWp8b,GAC1B47b,EAAWh/B,GAAc9X,QAAQ//X,OAAOk4a,EAAU,EAAG3/W,GACrDs+W,EAAWh/B,GAAc9X,QAAQjnY,OACjC+9a,EAAWh/B,GAAcwgC,iBAAiBr4a,OAAOk4a,EAAU,EAAGN,GAC9Df,EAAWh/B,GAAcwgC,iBAAiBv/a,OAC1C+9a,EAAWh/B,GAAcA,aAAeA,MAEvC,CACGt/U,OAAQ,GACZA,EAAQ5gF,KAAKygc,cAAcR,EAAUC,EAAU3+a,EAAOk+a,EAAQrna,EAAYigC,EAAMviB,IAC1E3uC,OAASu4b,EAAWp8b,GAC1B47b,EAAWh/B,GAAc9X,QAAQ5jZ,KAAKo8E,GACtCs+W,EAAWh/B,GAAcwgC,iBAAiBl8b,KAAKy7b,GAC/Cf,EAAWh/B,GAAcA,aAAeA,QAI5C,IAAKl+W,MAAMi+Y,EAASlzb,KAAOi1C,MAAMi+Y,EAASjzb,KAAOhN,KAAKm6C,aAAa+lZ,GAAW,CAC1E,IAAIS,OAAO,EAIPC,GACAx4C,WAAes4C,oBAAyBxgC,aAAcA,IAF1DygC,EAAO3gc,KAAKygc,cAAcR,EAAUC,EAAU3+a,EAAOk+a,EAAQrna,EAAYigC,EAAMviB,IAI1E3uC,OAASu4b,EAAWp8b,GACzB,IAAIu9b,KAEJA,EAASr8b,KAAKy7b,MACLz7b,KAAK07b,GACdhB,EAAWh/B,GAAgB0gC,EAC3B1B,EAAWh/B,GAAc9X,QAAQ5jZ,KAAKm8b,GACtCzB,EAAWh/B,GAAcwgC,iBAAmBG,EAC5C3B,EAAWh/B,GAAcA,aAAeA,OAS9C,IAAtBg/B,EAAWzic,QACXuD,KAAK8gc,YAAY5B,EAAY7mY,EAAMknY,KAK/CN,EAAkB5jc,UAAUylc,YAAc,SAAUC,EAAYlhZ,EAAW0/Y,GACvE,IAAK,IAAIpjc,EAAI,EAAGA,EAAI4kc,EAAWtkc,OAAQN,IAAK,CAExC,IAAK,IADDuuZ,EAASq2C,EAAW5kc,GACfgqB,EAAI,EAAGA,EAAIukY,EAAOtC,QAAQ3rZ,OAAQ0pB,IACvC,GAAI+zB,GAAM+G,WAAWypW,EAAOtC,QAAQjiY,GAAGq5B,SAAUkrW,EAAOtC,QAAQjiY,EAAI,GAAGq5B,UAAY+/Y,EAAe,CAC9F70C,EAAOtC,QAAQjiY,EAAI,GAAGq5B,SAAWkrW,EAAOtC,QAAQjiY,GAAGq5B,SACnD,IAAIwhZ,EAAYt2C,EAAOtC,QAAQjiY,EAAI,GAC/B6oE,EAAMhvF,KAAKihc,oBAAoBD,EAAU37Y,WAAY27Y,EAAUxhZ,SAAUwhZ,EAAUz/a,MAAOg+a,EAAeyB,EAAUl5Z,OACvH4iX,EAAOtC,QAAQjiY,EAAI,GAAGpJ,KAAOiyE,EAC7B07T,EAAOtC,QAAQ//X,OAAOlC,EAAG,GACzBukY,EAAOg2C,iBAAiBr4a,OAAOlC,EAAG,GAClCA,IAGE05B,EAAU9I,YACpB,IAAK,IAAIxzB,EAAI,EAAGA,EAAImnY,EAAOtC,QAAQ3rZ,OAAQ8mB,IAAK,EACxCy9a,EAAYt2C,EAAOtC,QAAQ7kY,IAEfi8B,SAChBK,EAAUuoW,QAAQ5jZ,KAAKw8b,MAKnC/B,EAAkB5jc,UAAUolc,cAAgB,SAAU31C,EAAIjsY,EAAK0C,EAAOiU,EAAWvjB,EAAOomD,EAAMviB,GAC1F,IAAIk5C,EACAlnD,EACA/qB,GACAwE,MAAO,EAAGi+B,UAAYzyC,EAAG,EAAGC,EAAG,GAAK7F,OAAQ,GAAI4V,KAAM,GACtD4tY,mBAAoB,EAAGtlW,YAAct4C,EAAG,EAAGC,EAAG,GAAK86B,MAAO,EAAGuxU,UAAU,GAU3E,OARAvxU,EAAQ9nC,KAAKg8X,eAAez6W,EAAOiU,EAAW6iC,EAAMviB,GACpDk5C,EAAMhvF,KAAKihc,oBAAoBn2C,EAAIjsY,EAAK0C,EAAO82C,EAAKmnY,YAAa13Z,GACjE/qB,EAAKA,KAAOiyE,EACZjyE,EAAKsoC,WAAaylW,EAClB/tY,EAAKyiC,SAAW3gC,EAChB9B,EAAKwE,MAAQA,EACbxE,EAAK4tY,kBAAoB14Y,EACzB8K,EAAK+qB,MAAQA,EACN/qB,GAGXkib,EAAkB5jc,UAAU4lc,oBAAsB,SAAUC,EAASC,EAAO5/a,EAAOi+a,EAAa13Z,GAE5F,MADW,KAAO03Z,EAAc,EAAI,IAAMA,EAAc,EAAI,IAAMj+a,EAAQ,QAAUumB,EAAQ,IAAMq5Z,EAAMp0b,EAAI,IAAMo0b,EAAMn0b,GAI5Hiyb,EAAkB5jc,UAAU2gY,eAAiB,SAAUz6W,EAAO+vC,EAAiBzR,EAAW/J,GACtF,IACIhO,EADAs5Z,EAAS/0b,KAAKE,IAAIgV,GAEtB,OAAQ+vC,GACJ,IAAK,MACL,IAAK,SACDxpB,EAAQ,EACJs5Z,GAAU,GAAKA,GAAU,KACzBt5Z,EAAQ,GAEZ,MACJ,IAAK,OACL,IAAK,QACDA,EAAQ,EACJvmB,EAAQ,GAAKA,IAAU,MACvBumB,EAAQ,GAYpB,MARwB,UAApBwpB,GAAmD,WAApBA,IAE3BxpB,EADU,IAAVA,EACQ,EAGA,GAGTA,GAGXm3Z,EAAkB5jc,UAAUk1C,iBAAmB,SAAU9zC,EAAQszC,GAI7D,IAAK,IAFDmgQ,EADA8+G,EAAM,EAENrqK,GAAU53O,EAAG,EAAGC,EAAG,GACd7Q,EAAI,EAAGA,EAAI4zC,EAAItzC,OAAQN,IAAK,CACjC,IAAI0uC,EAAKkF,EAAI5zC,GACb,GAAK+zS,EAAL,CAKI,IAAIzoQ,EAAIznC,KAAKqgc,kBAAkBnwJ,EAAKrlQ,GACpC,GAAImkX,EAAMvnX,EAAIhrC,EAAQ,CAClB,IAAImgC,EAAIngC,EAASuyZ,EACb3lV,EAAMnvB,GAAM6G,UAAUmvP,EAAKrlQ,GAC3B99B,EAAI6vB,EAAIvwB,KAAKoV,IAAI4nD,EAAMh9D,KAAK+Q,GAAK,KACjCpQ,EAAI4vB,EAAIvwB,KAAKqV,IAAI2nD,EAAMh9D,KAAK+Q,GAAK,KACrCunO,GAAU53O,EAAGmjS,EAAInjS,EAAIA,EAAGC,EAAGkjS,EAAIljS,EAAIA,GACnC,MAGAgiZ,GAAOvnX,EAGfyoQ,EAAMrlQ,OAjBFqlQ,EAAMrlQ,EAmBd,OAAO85M,GAGXs6M,EAAkB5jc,UAAU4kD,UAAY,SAAUJ,GAC9C,IAAIloB,KACJ,GAAIkoB,EAAU+M,qBAA0C,aAAnB/M,EAAUn5C,MAA0C,eAAnBm5C,EAAUn5C,MAC5E,IAAK,IAAI6c,EAAI,EAAGA,EAAIs8B,EAAU+M,mBAAmBnwD,OAAQ8mB,IACrDoU,EAAOnzB,KAAKq7C,EAAU+M,mBAAmBrpC,IAGjD,OAAOoU,GAEXsna,EAAkB5jc,UAAUukc,eAAiB,SAAUrkD,EAAOC,GAC1D,OAAWA,EAAMzuY,EAAKwuY,EAAMxuY,EAAIwuY,EAAMvlY,OAAYulY,EAAMxuY,EAAKyuY,EAAMzuY,EAAIyuY,EAAMxlY,OACrEwlY,EAAMxuY,EAAKuuY,EAAMvuY,EAAIuuY,EAAMxlY,QAAcwlY,EAAMvuY,EAAKwuY,EAAMxuY,EAAIwuY,EAAMzlY,QAGhFkpb,EAAkB5jc,UAAU4mD,UAAY,SAAUq9Y,EAASK,EAAS0B,EAAM/vY,EAAiBgwY,GACnFD,GAAQ1B,EAAQljc,QAAU,IAC1Bkjc,EAAQt3a,OAAO,EAAG,GAClBs3a,EAAQt3a,OAAO,EAAG,IAGtB,IAAK,IADDsP,KACKx7B,EAAI,EAAGA,EAAImjc,EAAQ7ic,OAAS,EAAGN,IAAK,CACzC,IAAI0uC,EAAK7qC,KAAKuhc,OAAOjC,EAAQnjc,GAAImjc,EAAQnjc,EAAI,GAAIwjc,EAAS2B,EAAQhwY,GAClE,GAAIzmB,EAAGpuC,OAAS,EACZ,IAAK,IAAI0pB,EAAI,EAAGA,EAAI0kB,EAAGpuC,OAAQ0pB,IAC3BwR,EAAOnzB,KAAKqmC,EAAG1kB,IAGnBk7a,GAAQ1B,EAAQljc,QAAU,GAC1Bkjc,EAAQt3a,OAAO,EAAG,GAG1B,OAAOsP,GAGXsna,EAAkB5jc,UAAUkmc,OAAS,SAAUL,EAASC,EAAOpxZ,EAAKuxZ,EAAQhwY,GAExE,IAAK,IADDguY,KACKnjc,EAAI,EAAGA,EAAI4zC,EAAItzC,OAAS,EAAGN,IAAK,CACrC,IAAI23B,EAAQ9zB,KAAKwhc,WAAWN,EAASC,EAAOpxZ,EAAI5zC,GAAI4zC,EAAI5zC,EAAI,IAC5D,IAAK6D,KAAKm6C,aAAarmB,GAAQ,CAC3B,IAAIvS,EAAQvhB,KAAKmgc,iBAAiBe,EAASC,GACvCC,EAASphc,KAAKmgc,iBAAiBpwZ,EAAI5zC,GAAI4zC,EAAI5zC,EAAI,IAGnD,OAFAolB,EAAQvhB,KAAKyhc,uBAAuBlgb,GACpC6/a,EAASphc,KAAKyhc,uBAAuBL,GAC7B9vY,GACJ,IAAK,OACL,IAAK,QACG/vC,EAAQ6/a,GACR9B,EAAQ96b,KAAKsvB,GAEjB,MACJ,IAAK,MACL,IAAK,SACGvS,EAAQ6/a,GACR9B,EAAQ96b,KAAKsvB,GAIrBvS,IAAU6/a,GAAUE,GACpBhC,EAAQ96b,KAAKsvB,IAIzB,OAAOwra,GAEXL,EAAkB5jc,UAAUomc,uBAAyB,SAAUlgb,GAC3D,IACImgb,EAAer1b,KAAKE,IAAIgV,GAO5B,OANImgb,EAAe,GACR,IAAMA,EAGNA,GAIfzC,EAAkB5jc,UAAUmmc,WAAa,SAAUG,EAAQC,EAAMC,EAAQC,GACrE,IAGI77E,EAAQpsU,GAFI75C,KAAK+hc,eAAeJ,EAAO50b,EAAG40b,EAAO30b,EAAG40b,EAAK70b,EAAG60b,EAAK50b,GACrDhN,KAAK+hc,eAAeF,EAAO90b,EAAG80b,EAAO70b,EAAG80b,EAAK/0b,EAAG+0b,EAAK90b,IAErE,OAAIi5W,EAAMhhW,QACCghW,EAAM74T,aALHrgD,EAAG,EAAGC,EAAG,IAY3Biyb,EAAkB5jc,UAAU0mc,eAAiB,SAAU/ma,EAAIC,EAAIC,EAAIC,GAC/D,OAAS+kB,GAAM5oB,OAAO0D,IAAO,EAAGmlB,GAAM7oB,OAAO2D,IAAO,EAAGmlB,GAAM9oB,OAAO4D,IAAO,EAAGmlB,GAAM/oB,OAAO6D,IAAO,IAEtG8ja,EAAkB5jc,UAAU8+C,aAAe,SAAUrmB,GACjD,OAAmB,IAAZA,EAAM/mB,GAAuB,IAAZ+mB,EAAM9mB,GAElCiyb,EAAkB5jc,UAAUykc,yBAA2B,SAAUjgZ,EAAWmiZ,GAWxE,IAAK,IATDC,EAAU,IACV7pa,GAAc,EACd4na,EAAa,EACb9/B,GAAgB,EAChBphZ,EAAQ,EACRojb,EAAqB,EACrB3tG,EAAM10S,EAAU9I,YAChBorZ,EAAc5tG,EACd58T,KACKx7B,EAAI,EAAGA,EAAI0jD,EAAU+M,mBAAmBnwD,OAAQN,IAAK,CAC1D,IAAIksC,EAASwX,EAAU+M,mBAAmBzwD,GAC1Cw7B,EAAOnzB,KAAK6jC,GAEhB,IAAK,IAAI9kB,EAAI,EAAGA,EAAIoU,EAAOl7B,OAAQ8mB,IAAK,CACpC,IAAIixU,EAAM78T,EAAOpU,GACb6+a,EAAUpic,KAAKqic,SAAS7tG,EAAKD,EAAKytG,EAASniZ,GAC3CuiZ,EAAUH,IACVA,EAAUG,EACVF,EAAqBlC,EAAahgc,KAAKqgc,kBAAkB2B,EAASG,GAClEjiC,EAAephZ,EACfsZ,EAAa7U,GAEjBy8a,GAAc9lZ,GAAM+G,WAAWuzS,EAAKD,GACpCA,EAAMC,EACN2tG,EAAc3tG,EAOlB,OALA11U,KAEIihb,oBAAqBmC,EAAoBlC,WAAYA,EACrD9/B,aAAcA,EAAc9nY,WAAYA,IAIhD6ma,EAAkB5jc,UAAUgnc,SAAW,SAAUnB,EAASC,EAAOrta,EAAO+rB,GACpE,IACIyiZ,EAAOj2b,KAAKE,IAAI20b,EAAQn0b,EAAIo0b,EAAMp0b,GAClCw1b,EAAOl2b,KAAKE,IAAI20b,EAAQl0b,EAAIm0b,EAAMn0b,GAClCw1b,GAAQ1ua,EAAM9mB,EAAIk0b,EAAQl0b,IAAMm0b,EAAMn0b,EAAIk0b,EAAQl0b,GAClDy1b,GAAQ3ua,EAAM/mB,EAAIm0b,EAAQn0b,IAAMo0b,EAAMp0b,EAAIm0b,EAAQn0b,GACtD,IAAK0rF,SAAS+pW,KAAS/pW,SAASgqW,IAAQzgZ,MAAMwgZ,IAAQxgZ,MAAMygZ,IACxD,GAAIvB,EAAQn0b,IAAMo0b,EAAMp0b,EAAG,CACvB,GAAIm0b,EAAQl0b,IAAMm0b,EAAMn0b,EACpB,OAAO,IAEN,GAAMk0b,EAAQl0b,EAAI8mB,EAAM9mB,GAAO8mB,EAAM9mB,EAAIm0b,EAAMn0b,GAASk0b,EAAQl0b,EAAI8mB,EAAM9mB,GAAO8mB,EAAM9mB,EAAIm0b,EAAMn0b,EAClG,OAAOX,KAAKE,IAAI20b,EAAQn0b,EAAI+mB,EAAM/mB,QAGrC,GAAIm0b,EAAQl0b,IAAMm0b,EAAMn0b,IACnBk0b,EAAQn0b,EAAI+mB,EAAM/mB,GAAO+mB,EAAM/mB,EAAIo0b,EAAMp0b,GAASm0b,EAAQn0b,EAAI+mB,EAAM/mB,GAAO+mB,EAAM/mB,EAAIo0b,EAAMp0b,GAC7F,OAAOV,KAAKE,IAAI20b,EAAQl0b,EAAI8mB,EAAM9mB,QAK1C,IAAKk0b,EAAQn0b,GAAK+mB,EAAM/mB,GAAK+mB,EAAM/mB,GAAKo0b,EAAMp0b,GAAOm0b,EAAQn0b,GAAK+mB,EAAM/mB,GAAK+mB,EAAM/mB,GAAKo0b,EAAMp0b,GAAMu1b,EArB5F,KAsBCpB,EAAQl0b,GAAK8mB,EAAM9mB,GAAK8mB,EAAM9mB,GAAKm0b,EAAMn0b,GAAOk0b,EAAQl0b,GAAK8mB,EAAM9mB,GAAK8mB,EAAM9mB,GAAKm0b,EAAMn0b,GAAMu1b,EAtBhG,GAuBA,OAAOl2b,KAAKE,IAAIi2b,EAAMC,GAIlC,OAAO,KAGXxD,EAAkB5jc,UAAU8kc,iBAAmB,SAAUe,EAASC,GAC9D,IAAIuB,EAAQxB,EAAQn0b,EAAIo0b,EAAMp0b,EAC1B41b,EAAQzB,EAAQl0b,EAAIm0b,EAAMn0b,EAC9B,OAAOX,KAAK0nB,MAAM4ua,EAAOD,IAAU,IAAMr2b,KAAK+Q,KAElD6hb,EAAkB5jc,UAAUglc,kBAAoB,SAAUa,EAASC,GAG/D,OADU90b,KAAKQ,MAAOq0b,EAAQn0b,EAAIo0b,EAAMp0b,IAAMm0b,EAAQn0b,EAAIo0b,EAAMp0b,IAAQm0b,EAAQl0b,EAAIm0b,EAAMn0b,IAAMk0b,EAAQl0b,EAAIm0b,EAAMn0b,KAQtHiyb,EAAkB5jc,UAAUiX,QAAU,aAQtC2sb,EAAkB5jc,UAAUkkC,cAAgB,WAIxC,MAAO,YAEJ0/Z,KC/ZP2D,GAA0B,WAC1B,SAASA,EAAS9sZ,GACd91C,KAAK8tD,QACL9tD,KAAK81C,QAAUA,EAwvCnB,OArvCA8sZ,EAASvnc,UAAUuia,QAAU,WACzB,OACwE,IADhE59Z,KAAK81C,QAAQic,aAAahM,aAC3By6V,GAAgBi0B,aAAej0B,GAAgBwyB,eAM1D4vB,EAASvnc,UAAUuga,UAAY,SAAU9lX,EAASulX,EAAgBkZ,EAAaC,EAAYv/Y,EAAOowB,EAAY7F,GAC1G,IAAIuS,EAAe/xD,KAAK81C,QAAQic,aAE5BpmD,GAAWoB,EAAG,EAAGC,EAAG,GACpB0pB,EAAS+V,GAAU4uX,EAAetpZ,SAClC8wb,GAAwBvlC,SAAS,EAAO3xZ,OAAQ,GAChDm3b,GAAsBxlC,SAAS,EAAO3xZ,OAAQ,GAClD,GAAI3L,KAAK81C,QAAQic,aAAahM,YAAcy6V,GAAgBi0B,aAAc,CACtE,IAAI5W,OAAW,GACfA,EAAWr9Z,SAAS4C,gBAAgB,6BAA8B,MACzDI,aAAa,KAAM,kBAC5Bq6Z,EAASr6Z,aAAa,iBAAkB,cACxCqvC,GAAmB7yC,KAAK81C,QAAQ90C,QAAQsC,IAAI3B,YAAYk8Z,GACxD79Z,KAAK+ic,WAAWjtZ,EAASulX,EAAgBwC,EAAUglC,EAAqBC,EAAmB7ta,EAAOowB,IAAe7F,GAGrH,IAAIhzC,EAAOkqB,EAAO3pB,EAAIkoB,EAAMloB,EACxBL,EAAMgqB,EAAO1pB,EAAIioB,EAAMjoB,EACvBP,EAAQiqB,EAAO3pB,EAAI2pB,EAAO1gB,MAAQif,EAAMloB,EACxCJ,EAAS+pB,EAAO1pB,EAAI0pB,EAAO3gB,OAASkf,EAAMjoB,EAC1ConZ,EAAkBriW,EAAasiW,kBAAkBD,gBAEjD4uC,EAAehjc,KAAKy9B,MAAMhxB,EAAO2nZ,EApBpB,GAqBb6uC,EAAcjjc,KAAKy9B,MAAMjxB,EAAM4nZ,EArBlB,GAsBjBA,EAAkBriW,EAAaoiW,oBAAoBC,gBACnD,IAAI8uC,EAAaljc,KAAKy9B,MAAM/wB,EAAK0nZ,EAvBhB,GAwBb+uC,EAAgBnjc,KAAKy9B,MAAM9wB,EAAQynZ,EAxBtB,GA0BbgvC,EAAe1sa,EAAO3pB,EAAI2pB,EAAO1gB,MACjCqtb,EAAgB3sa,EAAO1pB,EAAI0pB,EAAO3gB,OA8DtC,OA7DK8sb,EAAoBvlC,QA0BjBt9Z,KAAK81C,QAAQic,aAAahM,YAAcy6V,GAAgBi0B,aACxD9oa,EAAOoB,EAAI81b,EAAoBl3b,OAG/BA,EAAOoB,EAAIyyC,EAASzyC,EAAIs4C,EAAWt4C,EA7BnC/M,KAAK81C,QAAQic,aAAahM,YAAcy6V,GAAgB8iD,oBACpDj3b,KAAKE,IAAI0oB,EAAMloB,IAAM,IACjBwna,EACIloa,KAAKE,IAAIy2b,EAAeI,GAAgB/2b,KAAKE,IAAI02b,EAAcvsa,EAAO3pB,GACtEpB,EAAOoB,GAAKk2b,EAAcvsa,EAAO3pB,EAGjCpB,EAAOoB,GAAKi2b,EAAeI,EAI3B/2b,KAAKE,IAAIy2b,EAAeI,GAAgB/2b,KAAKE,IAAI02b,EAAcvsa,EAAO3pB,GACtEpB,EAAOoB,GAAKi2b,EAAeI,EAG3Bz3b,EAAOoB,GAAKk2b,EAAcvsa,EAAO3pB,GAM7CpB,EAAOoB,EAAIyyC,EAASzyC,EAAIs4C,EAAWt4C,EAWtC+1b,EAAkBxlC,QA0BnB3xZ,EAAOqB,EAAI81b,EAAkBn3b,OAzBzB3L,KAAK81C,QAAQic,aAAahM,YAAcy6V,GAAgB+iD,sBACpDl3b,KAAKE,IAAI0oB,EAAMjoB,IAAM,IACjBwna,EACInoa,KAAKE,IAAI42b,EAAgBE,GAAiBh3b,KAAKE,IAAI22b,EAAaxsa,EAAO1pB,GACvErB,EAAOqB,GAAKk2b,EAAaxsa,EAAO1pB,EAGhCrB,EAAOqB,GAAKm2b,EAAgBE,EAI5Bh3b,KAAKE,IAAI42b,EAAgBE,GAAiBh3b,KAAKE,IAAI22b,EAAaxsa,EAAO1pB,GACvErB,EAAOqB,GAAKm2b,EAAgBE,EAG5B13b,EAAOqB,GAAKk2b,EAAaxsa,EAAO1pB,GAM5CrB,EAAOqB,EAAIwyC,EAASxyC,EAAIq4C,EAAWr4C,EAMpCrB,GAKXi3b,EAASvnc,UAAUoiC,MAAQ,SAAUzgC,EAAOm4Z,EAAe1pW,GAEnDA,EADAA,EAAQ,EACAp/C,KAAK87D,IAAI,EAAG97D,KAAK+S,MAAM/S,KAAKolB,IAAIg6B,GAASp/C,KAAKolB,IAAI,KAGlDplB,KAAK87D,IAAI,EAAG97D,KAAKwmB,KAAKxmB,KAAKolB,IAAIg6B,GAASp/C,KAAKolB,IAAI,KAE7D,IAAI+xa,EAAS,EACTrnc,EAAI,EACR,IAAKA,EAAI,EAAGA,EAAIg5Z,EAAc14Z,OAAQN,IAClCqnc,GAAUruC,EAAch5Z,GAG5B,IACIsnc,EAAMzmc,GAFVwmc,GAAU/3Y,GAGN5pB,EAFWx1B,KAAK+S,MAAM/S,KAAKE,IAAIvP,GAASwmc,GAEtBA,EACtB,GAAI3ha,IAAS7kC,EACT,GAAIA,GAAS,EACT,IAAKb,EAAI,EAAGA,EAAIg5Z,EAAc14Z,OAAQN,IAAK,CACvC,GAAIsnc,GAAOtuC,EAAch5Z,GAAKsvD,EAC1B,OAAO5pB,GAAQ4ha,EAAOtuC,EAAch5Z,IAAM,EAAIsvD,GAAU,EAAI0pW,EAAch5Z,GAAKsvD,GAG/E5pB,GAAQszX,EAAch5Z,GAAKsvD,EAC3Bg4Y,GAAOtuC,EAAch5Z,GAAKsvD,OAMlC,IADA5pB,IAAe,EACV1lC,EAAIg5Z,EAAc14Z,OAAS,EAAGN,GAAK,EAAGA,IAAK,CAC5C,GAAIkQ,KAAKE,IAAIk3b,IAAQtuC,EAAch5Z,GAAKsvD,EACpC,OAAO5pB,GAAQx1B,KAAKE,IAAIk3b,GAAQtuC,EAAch5Z,IAAM,EAAIsvD,GAAU,EAAI0pW,EAAch5Z,GAAKsvD,GAGzF5pB,GAAQszX,EAAch5Z,GAAKsvD,EAC3Bg4Y,GAAOtuC,EAAch5Z,GAAKsvD,EAK1C,OAAOzuD,GAKX4lc,EAASvnc,UAAU0nc,WAAa,SAAUjtZ,EAASulX,EAAgBx+X,EAAG6ma,EAAgBC,EAAc1ua,EAAO2ua,GACvG,IACIC,EACAC,EACAC,EAHAC,EAAU,KAIVl5Y,EAAW9qD,KAAK81C,QAAQgV,SACxBiH,EAAe/xD,KAAK81C,QAAQic,aAC5BkyY,KACAC,KACAC,KACAC,KACA1ta,EAAS+V,GAAU4uX,EAAetpZ,SAClC05C,EAAQ3V,EAAQgV,SAASY,YACzBssX,GAAWltX,EAASC,iBACpBktX,GAAWntX,EAASG,eACpBo5Y,EAAkBtyY,EAAauyY,mBAAqB74Y,EACpD+2X,EAAW,IAAItsZ,GAAK,EAAG,EAAG40B,EAASQ,cAAeR,EAASO,gBAC3Dk5Y,EAAiB,IAAIrua,GAAK8hZ,EAAUvsX,EAAQ/0B,EAAO1pB,EAAIq3b,EAAkB,EAAI7hB,EAASxsa,MAAQy1C,EAAQ/0B,EAAO3gB,OAAS,EAAIsub,EAAkB,IAC5IG,EAAiB,IAAItua,GAAMQ,EAAO3pB,EAAIs3b,EAAkB,EAAIpsB,EAAUxsX,EAAQ/0B,EAAO1gB,MAAQ,EAAIqub,EAAkB,GAAK7hB,EAASzsa,OAAS01C,GAC9I+2X,EAAW,IAAItsZ,GAAK8hZ,EAAUvsX,EAAOwsX,EAAUxsX,EAAO+2X,EAASxsa,MAAQy1C,EAAO+2X,EAASzsa,OAAS01C,GAChG,IACItvD,EACAgL,EACAs9b,EAHA3yY,EAAQ9xD,KAAK0kc,UAAU5uZ,EAAQuyX,cAAehN,EAAgBmpC,EAAgBhiB,GAI9ElpX,EAAYxjB,EAAQwjB,UACxB,IAAKn9D,EAAI,EAAGA,EAAI21D,EAAMr1D,OAAQN,IAC1BgL,EAAS2qD,EAAM31D,GACX6D,KAAK2kc,YAAY7uZ,EAAS3uC,KACpBnH,KAAK81C,QAAQwjB,UAAUnyD,EAAO7D,cAAewiD,KAAc9lD,KAAK4kc,YAAYtrY,EAAW+hW,EAAgBl0Z,MACzGs9b,EAAet9b,EAAOuvB,QACL3gB,OAAS0ub,EAAaz3b,EAAIioB,EAAMjoB,EAAI0pB,EAAO1pB,EACxDm3b,EAAa3/b,MACTzH,IAAKoK,EAAQkzC,SAAUhuC,KAAKE,IAAImqB,EAAO1pB,EAAIioB,EAAMjoB,EAAIy3b,EAAaz3b,EAAIy3b,EAAa1ub,UAGlF0ub,EAAaz3b,EAAI0pB,EAAO1pB,EAAIioB,EAAMjoB,EAAI0pB,EAAO3gB,QAClDqub,EAAgB5/b,MAAOzH,IAAKoK,EAAQkzC,SAAUhuC,KAAKE,IAAImqB,EAAO1pB,EAAIioB,EAAMjoB,EAAI0pB,EAAO3gB,OAAS0ub,EAAaz3b,MAE9F,MAAXg3b,GAAmBA,EAAU33b,KAAKE,IAAIk4b,EAAaz3b,EAAI0pB,EAAO1pB,EAAIioB,EAAMjoB,MACpEX,KAAKE,IAAIk4b,EAAa13b,EAAI03b,EAAazub,MAAQ,GAAK0gB,EAAO3pB,EAAI2pB,EAAO1gB,MAAQ,EAAIif,EAAMloB,KACxFs3b,GACAP,EAAU9jc,KAAK6kc,iBAAiBJ,EAAc/ta,EAAQ,WACtDsta,EAAU33b,KAAKE,IAAIk4b,EAAaz3b,EAAI0pB,EAAO1pB,IAEtCX,KAAKE,IAAIk4b,EAAa13b,EAAI03b,EAAazub,OAAS0gB,EAAO3pB,EAAI2pB,EAAO1gB,MAAQif,EAAMloB,KAAOs3b,GAC5FP,EAAU9jc,KAAK6kc,iBAAiBJ,EAAc/ta,EAAQ,SACtDsta,EAAU33b,KAAKE,IAAIk4b,EAAaz3b,EAAI0pB,EAAO1pB,IAEtCX,KAAKE,IAAIk4b,EAAa13b,GAAK2pB,EAAO3pB,EAAIkoB,EAAMloB,KAAOs3b,GACxDP,EAAU9jc,KAAK6kc,iBAAiBJ,EAAc/ta,EAAQ,QACtDsta,EAAU33b,KAAKE,IAAIk4b,EAAaz3b,EAAI0pB,EAAO1pB,IAEtCX,KAAKE,IAAIk4b,EAAa13b,GAAK2pB,EAAO3pB,EAAI2pB,EAAO1gB,MAAQif,EAAMloB,KAAOs3b,GACvEP,EAAU9jc,KAAK6kc,iBAAiBJ,EAAc/ta,EAAQ,aACtDsta,EAAU33b,KAAKE,IAAIk4b,EAAaz3b,EAAI0pB,EAAO1pB,IAEtCX,KAAKE,IAAIk4b,EAAa13b,EAAI03b,EAAazub,OAAS0gB,EAAO3pB,EAAIkoB,EAAMloB,KAAOs3b,IAC7EP,EAAU9jc,KAAK6kc,iBAAiBJ,EAAc/ta,EAAQ,aACtDsta,EAAU33b,KAAKE,IAAIk4b,EAAaz3b,EAAI0pB,EAAO1pB,OAM/D8kD,EAAQ9xD,KAAK0kc,UAAU5uZ,EAAQuyX,cAAehN,EAAgBkpC,EAAgB/hB,GAC9E,IAAK,IAAIj/Z,EAAI,EAAGA,EAAIuuC,EAAMr1D,OAAQ8mB,IAC9Bpc,EAAS2qD,EAAMvuC,GACXvjB,KAAK2kc,YAAY7uZ,EAAS3uC,KACpBnH,KAAK81C,QAAQwjB,UAAUnyD,EAAO7D,cAAewiD,KAAc9lD,KAAK4kc,YAAYtrY,EAAW+hW,EAAgBl0Z,MACzGs9b,EAAet9b,EAAOuvB,QACL3pB,EAAI03b,EAAazub,MAAQ0gB,EAAO3pB,EAAIkoB,EAAMloB,IACvDk3b,EAAcA,EAAcxnc,SACxBM,IAAKoK,EAAQkzC,SAAUhuC,KAAKE,IAAKmqB,EAAO3pB,EAAIkoB,EAAMloB,EAAK03b,EAAa13b,EAAI03b,EAAazub,SAGzFyub,EAAa13b,EAAI2pB,EAAO3pB,EAAIkoB,EAAMloB,EAAI2pB,EAAO1gB,QAC7Ckub,EAAeA,EAAeznc,SAC1BM,IAAKoK,EAAQkzC,SAAUhuC,KAAKE,IAAImqB,EAAO3pB,EAAIkoB,EAAMloB,EAAI2pB,EAAO1gB,MAAQyub,EAAa13b,MAG1E,MAAX82b,GAAmBA,EAAUx3b,KAAKE,IAAIk4b,EAAa13b,EAAI2pB,EAAO3pB,EAAIkoB,EAAMloB,MACpEV,KAAKE,IAAIk4b,EAAaz3b,EAAIy3b,EAAa1ub,OAAS,GAAK2gB,EAAO1pB,EAAI0pB,EAAO3gB,OAAS,EAAIkf,EAAMjoB,KACvFq3b,GACHN,EAAU/jc,KAAK6kc,iBAAiBJ,EAAc/ta,EAAQ,WACtDmta,EAAUx3b,KAAKE,IAAIk4b,EAAa13b,EAAI2pB,EAAO3pB,IAEtCV,KAAKE,IAAIk4b,EAAaz3b,EAAI0pB,EAAO1pB,EAAIioB,EAAMjoB,IAAMq3b,GACtDN,EAAU/jc,KAAK6kc,iBAAiBJ,EAAc/ta,EAAQ,OACtDmta,EAAUx3b,KAAKE,IAAIk4b,EAAa13b,EAAI2pB,EAAO3pB,IAEtCV,KAAKE,IAAIk4b,EAAaz3b,EAAIy3b,EAAa1ub,QAAU2gB,EAAO1pB,EAAI0pB,EAAO3gB,OAASkf,EAAMjoB,KACvFq3b,GACAN,EAAU/jc,KAAK6kc,iBAAiBJ,EAAc/ta,EAAQ,UACtDmta,EAAUx3b,KAAKE,IAAIk4b,EAAa13b,EAAI2pB,EAAO3pB,IAEtCV,KAAKE,IAAIk4b,EAAaz3b,EAAIy3b,EAAa1ub,OAAS2gB,EAAO1pB,EAAIioB,EAAMjoB,IAAMq3b,GAC5EN,EAAU/jc,KAAK6kc,iBAAiBJ,EAAc/ta,EAAQ,aACtDmta,EAAUx3b,KAAKE,IAAIk4b,EAAa13b,EAAI2pB,EAAO3pB,IAEtCV,KAAKE,IAAIk4b,EAAaz3b,GAAK0pB,EAAO1pB,EAAI0pB,EAAO3gB,OAASkf,EAAMjoB,KAAOq3b,IACxEN,EAAU/jc,KAAK6kc,iBAAiBJ,EAAc/ta,EAAQ,aACtDmta,EAAUx3b,KAAKE,IAAIk4b,EAAa13b,EAAI2pB,EAAO3pB,OAM/D/M,KAAK8kc,iBAAiBhvZ,EAASguZ,EAASC,EAASlna,EAAG6ma,EAAgBC,EAAcC,GAC7EF,EAAepmC,SAChBt9Z,KAAK+kc,oBAAoBjvZ,EAASjZ,EAAGw+X,EAAgB4oC,EAAeC,EAAgBR,EAAgBC,EAAcC,EAAO3ua,EAAOova,GAE/HV,EAAarmC,SACdt9Z,KAAKglc,oBAAoBlvZ,EAASjZ,EAAGw+X,EAAgB8oC,EAAcC,EAAiBV,EAAgBC,EAAcC,EAAO3ua,EAAOova,IAMxIzB,EAASvnc,UAAUq/Z,iBAAmB,SAAU5mY,GAC5C,IAAIi+B,EAAe/xD,KAAK81C,QAAQic,aAMhC,OAJIA,EAAahM,YAAcy6V,GAAgBwyB,cAC3Cl/Y,EAAM/mB,EAAI/M,KAAKy9B,MAAM3J,EAAM/mB,EAAGglD,EAAasiW,kBAAkBD,gBAFhD,GAGbtgY,EAAM9mB,EAAIhN,KAAKy9B,MAAM3J,EAAM9mB,EAAG+kD,EAAaoiW,oBAAoBC,gBAHlD,IAKVtgY,GAEX8ua,EAASvnc,UAAUspc,YAAc,SAAU7uZ,EAASv1C,GAEhD,OADAA,EAAOP,KAAK81C,QAAQwjB,UAAU/4D,EAAK+C,KAC1Bw1D,GAAW94D,KAAK81C,QAASv1C,GAAM,IAE5Cqic,EAASvnc,UAAU4pc,SAAW,SAAUnvZ,EAAS4tZ,EAAgBC,EAAc9lC,EAAUuZ,EAAQC,EAAQhc,EAAgBuoC,GACrH,IAAII,EACAH,EAGAC,EACAC,EAHAhyY,EAAe/xD,KAAK81C,QAAQic,aAC5BjH,EAAW9qD,KAAK81C,QAAQgV,SAGxBp0B,EAAS+V,GAAU4uX,EAAetpZ,SAClCunD,EAAYxjB,EAAQwjB,UACpB4rY,KACAC,KACA15Y,EAAQ3V,EAAQgV,SAASY,YACzBssX,GAAWltX,EAASC,iBACpBktX,GAAWntX,EAASG,eACpBo5Y,EAAkBtyY,EAAauyY,mBAAqB74Y,EACpD+2X,EAAW,IAAItsZ,GAAK,EAAG,EAAG40B,EAASQ,cAAeR,EAASO,gBAC3D+5Y,EAAmB,IAAIlva,GAAK8hZ,EAAUvsX,GAAQ/0B,EAAO1pB,EAAI,GAAKy+C,EAAO+2X,EAASxsa,MAAQy1C,GAAQ/0B,EAAO3gB,OAAS,IAAM01C,GACpH45Y,EAAmB,IAAInva,IAAMQ,EAAO3pB,EAAI,GAAK0+C,EAAOwsX,EAAUxsX,GAAQ/0B,EAAO1gB,MAAQ,IAAMy1C,EAAO+2X,EAASzsa,OAAS01C,GACxH+2X,EAAW,IAAItsZ,GAAK8hZ,EAAUvsX,EAAOwsX,EAAUxsX,EAAO+2X,EAASxsa,MAAQy1C,EAAO+2X,EAASzsa,OAAS01C,GAChG,IAEItvD,EACAgL,EACAs9b,EAJAa,KACAxzY,EAAQ9xD,KAAK0kc,UAAU5uZ,EAAQuyX,cAAehN,EAAgBgqC,EAAkB7iB,EAAU8iB,GAI9F,IAAKnpc,EAAI,EAAGA,EAAI21D,EAAMr1D,OAAQN,IAC1BgL,EAAS2qD,EAAM31D,IACX6D,KAAK4kc,YAAYtrY,EAAW+hW,EAAgBl0Z,IAAanH,KAAK81C,QAAQwjB,UAAUnyD,EAAO7D,cAAewiD,KACtG2+Y,EAAet9b,EAAOuvB,QACP,MAAXsta,GAAmBA,EAAU33b,KAAKE,IAAIk4b,EAAaz3b,EAAI0pB,EAAO1pB,MAC1D02b,EAAel3b,KACXH,KAAKE,IAAImqB,EAAO3pB,EAAIqqa,EAASqtB,EAAa13b,IAAMs3b,GAChDP,EAAU9jc,KAAK6kc,iBAAiBJ,EAAc/ta,EAAQ,QACtDsta,EAAU33b,KAAKE,IAAIk4b,EAAaz3b,EAAI0pB,EAAO1pB,IAEtCX,KAAKE,IAAImqB,EAAO3pB,EAAIqqa,EAASqtB,EAAa13b,EAAI03b,EAAazub,QAAUqub,IAC1EP,EAAU9jc,KAAK6kc,iBAAiBJ,EAAc/ta,EAAQ,aACtDsta,EAAU33b,KAAKE,IAAIk4b,EAAaz3b,EAAI0pB,EAAO1pB,IAG1C02b,EAAej3b,QAChBJ,KAAKE,IAAImqB,EAAO3pB,EAAIqqa,EAAS1gZ,EAAO1gB,MAAQyub,EAAa13b,EAAI03b,EAAazub,QAAUqub,GACpFP,EAAU9jc,KAAK6kc,iBAAiBJ,EAAc/ta,EAAQ,SACtDsta,EAAU33b,KAAKE,IAAIk4b,EAAaz3b,EAAI0pB,EAAO1pB,IAEtCX,KAAKE,IAAImqB,EAAO3pB,EAAIqqa,EAAS1gZ,EAAO1gB,MAAQyub,EAAa13b,IAAMs3b,IACpEP,EAAU9jc,KAAK6kc,iBAAiBJ,EAAc/ta,EAAQ,aACtDsta,EAAU33b,KAAKE,IAAIk4b,EAAaz3b,EAAI0pB,EAAO1pB,OAM/D8kD,EAAQ9xD,KAAK0kc,UAAU5uZ,EAAQuyX,cAAehN,EAAgB+pC,EAAkB5iB,GAChF,IAAK,IAAIh7Z,EAAM,EAAGA,EAAMsqC,EAAMr1D,OAAQ+qB,IAAO,CACzC,IAAI82B,EAAWwT,EAAMtqC,GACrB,GAAIxnB,KAAK4kc,YAAYtrY,EAAW+hW,EAAgB/8W,MAAet+C,KAAK81C,QAAQwjB,UAAUhb,EAASh7C,cAAewiD,IAAY,CACtH,IAAIy/Y,EAAiBjnZ,EAAS5nB,QACf,MAAXmta,GAAmBA,EAAUx3b,KAAKE,IAAIg5b,EAAex4b,EAAI2pB,EAAO3pB,MAC5D42b,EAAaj3b,IACTL,KAAKE,IAAImqB,EAAO1pB,EAAIqqa,EAASkuB,EAAev4b,IAAMq3b,GAClDN,EAAU/jc,KAAK6kc,iBAAiBU,EAAgB7ua,EAAQ,OACxDmta,EAAUx3b,KAAKE,IAAIg5b,EAAex4b,EAAI2pB,EAAO3pB,IAExCV,KAAKE,IAAImqB,EAAO1pB,EAAIqqa,EAASkuB,EAAev4b,EAAIu4b,EAAexvb,SAAWsub,IAC/EN,EAAU/jc,KAAK6kc,iBAAiBU,EAAgB7ua,EAAQ,aACxDmta,EAAUx3b,KAAKE,IAAIg5b,EAAex4b,EAAI2pB,EAAO3pB,IAG5C42b,EAAah3b,SACdN,KAAKE,IAAImqB,EAAO1pB,EAAI0pB,EAAO3gB,OAASsha,EAASkuB,EAAev4b,EAAIu4b,EAAexvb,SAAWsub,GAC1FN,EAAU/jc,KAAK6kc,iBAAiBU,EAAgB7ua,EAAQ,UACxDmta,EAAUx3b,KAAKE,IAAIg5b,EAAex4b,EAAI2pB,EAAO3pB,IAExCV,KAAKE,IAAImqB,EAAO1pB,EAAI0pB,EAAO3gB,OAASsha,EAASkuB,EAAev4b,IAAMq3b,IACvEN,EAAU/jc,KAAK6kc,iBAAiBU,EAAgB7ua,EAAQ,aACxDmta,EAAUx3b,KAAKE,IAAIg5b,EAAex4b,EAAI2pB,EAAO3pB,OAMjE,IAAK5Q,EAAI,EAAGA,EAAImpc,EAAY7oc,OAAQN,IAEhC,GADAgL,EAASm+b,EAAYnpc,GACjB6D,KAAK4kc,YAAYtrY,EAAW+hW,EAAgBl0Z,GAAS,CACrD,IAAIq+b,EAAiBr+b,EAAOuvB,OACxBzB,EAAQyua,EAAel3b,MAAQ4qa,EAASA,EACxC1lD,EAAarlX,KAAKE,IAAImqB,EAAO1gB,MAAQif,EAAQuwa,EAAexvb,OAC5Dyvb,OAAa,EACb/zE,GAAc2yE,IACdoB,EAAa/B,EAAel3b,MAAQg5b,EAAexvb,MAAQ0gB,EAAO1gB,MAAQwvb,EAAexvb,MAAQ0gB,EAAO1gB,MACxGkvb,EAAUA,EAAUzoc,SAAYF,OAAQ4K,EAAQuqX,WAAYA,EAAY/lX,OAAQ85b,IAEpFxwa,EAAQ0ua,EAAaj3b,KAAO2qa,EAASA,EACrC,IAAI5Z,EAAOpxZ,KAAKE,IAAImqB,EAAO3gB,OAASkf,EAAQuwa,EAAezvb,QACvD0nZ,GAAQ4mC,IACRoB,EAAa9B,EAAaj3b,KAAO84b,EAAezvb,OAAS2gB,EAAO3gB,OAASyvb,EAAezvb,OAAS2gB,EAAO3gB,OACxGovb,EAAWA,EAAW1oc,SAAYF,OAAQ4K,EAAQuqX,WAAY+rC,EAAM9xZ,OAAQ85b,IAIxF,IACK3vZ,EAAQ0uX,QACCxka,KAAK8kc,iBAAiBhvZ,EAASguZ,EAASC,EAASlmC,EAAU6lC,EAAgBC,EAAcC,IAElGF,EAAepmC,SAAW4nC,EAAUzoc,OAAS,IAAMinc,EAAel3b,MAAQk3b,EAAej3b,QAC1FzM,KAAK0lc,kBAAkB5vZ,EAAS+nX,EAAUqnC,EAAWxB,EAAgBE,EAAOvoC,IAE3EsoC,EAAarmC,SAAW6nC,EAAW1oc,OAAS,IAAMknc,EAAaj3b,KAAOi3b,EAAah3b,SACpF3M,KAAK2lc,mBAAmB7vZ,EAAS+nX,EAAUsnC,EAAYxB,EAAcC,EAAOvoC,IAOpFunC,EAASvnc,UAAU8ia,QAAU,SAAUulC,EAAgBC,EAAc9lC,EAAUuZ,EAAQC,EAAQ1pZ,EAAOi2a,EAAOgC,GACzG,IAAInoC,EAAO4Z,EACXssB,EAAaj3b,KAAM,EACnB,IAAIM,EACJ02b,EAAel3b,KAAOk3b,EAAej3b,OAAQ,EAQ7C,GALIzM,KAAK81C,QAAQic,aAAahM,YAAcy6V,GAAgBi0B,eAAiB9mZ,EAAMkf,cAE/E7/B,EAAI44b,EAAe54b,EAAI44b,EAAe7vb,OAAS4X,EAAMgf,MAAM3/B,EAAIqqa,GAAU1pZ,EAAM1hB,QAAU0hB,EAAM5X,OAAS4X,EAAMgf,MAAM3/B,GACpHhN,KAAKilc,SAASjlc,KAAK81C,QAAS4tZ,EAAgBC,EAAc9lC,EAAUuZ,EAAQpqa,EAAGhN,KAAK81C,QAAQwc,cAAesxY,IAE1GD,EAAarmC,QASdG,EAAQ4Z,EAASrqa,EAAK22b,EAAah4b,YARnC,GAAI3L,KAAK81C,QAAQic,aAAahM,YAAcy6V,GAAgB+iD,sBAAuB,CAC/E,IAAI1iZ,EAAQ+kZ,EAAe54b,EAAI44b,EAAe7vb,OAAS4X,EAAMgf,MAAM3/B,EAC/D64b,EAAYhlZ,EAAQw2X,EAExB5Z,EADiBz9Z,KAAKy9B,MAAMooa,EAAW7lc,KAAK81C,QAAQic,aAAaoiW,oBAAoBC,gBAX5E,GAYWvzW,EAM5B,OAAO48W,GAMXmlC,EAASvnc,UAAU6ia,UAAY,SAAUwlC,EAAgBC,EAAc9lC,EAAUuZ,EAAQC,EAAQ1pZ,EAAOi2a,EAAOkC,GAC3G,IACI/4b,EADAywZ,EAAO4Z,EAEXssB,EAAej3b,OAAQ,EACvBk3b,EAAaj3b,IAAMi3b,EAAah3b,QAAS,EAQzC,GALI3M,KAAK81C,QAAQic,aAAahM,YAAcy6V,GAAgBi0B,eAAiB9mZ,EAAMkf,cAE/E9/B,EAAI+4b,EAAa/4b,EAAI+4b,EAAa9vb,OAAS,EAAI2X,EAAMgf,MAAM5/B,GAAKqqa,GAAUzpZ,EAAM9hB,QAAU8hB,EAAM3X,OAAS,EAAI2X,EAAMgf,MAAM5/B,IACzH/M,KAAKilc,SAASjlc,KAAK81C,QAAS4tZ,EAAgBC,EAAc9lC,EAAU9wZ,EAAGsqa,EAAQr3a,KAAK81C,QAAQwc,cAAesxY,IAE1GF,EAAepmC,QAShBE,EAAQ4Z,EAASrqa,EAAK22b,EAAe/3b,YARrC,GAAI3L,KAAK81C,QAAQic,aAAahM,YAAcy6V,GAAgB8iD,oBAAqB,CAC7E,IAAI72b,EAAQq5b,EAAa/4b,EAAI+4b,EAAa9vb,OAAS,EAAI2X,EAAMgf,MAAM5/B,GAC/Dypa,EAAc/pa,EAAQ2qa,EAE1B5Z,EADmBx9Z,KAAKy9B,MAAM+4Y,EAAax2a,KAAK81C,QAAQic,aAAasiW,kBAAkBD,gBAX9E,GAYa3nZ,EAM9B,OAAO+wZ,GAMXolC,EAASvnc,UAAU4ia,SAAW,SAAUylC,EAAgBC,EAAc9lC,EAAUuZ,EAAQC,EAAQ1pZ,EAAOi2a,EAAOmC,GAC1G,IAAIvoC,EAAO4Z,EACPrqa,EAAI,EACR22b,EAAel3b,MAAO,EACtBm3b,EAAaj3b,IAAMi3b,EAAah3b,QAAS,EAQzC,GALI3M,KAAK81C,QAAQic,aAAahM,YAAcy6V,GAAgBi0B,eAAiB9mZ,EAAMkf,cAE/E9/B,EAAIg5b,EAAeh5b,EAAIg5b,EAAe/vb,MAAQ2X,EAAMgf,MAAM5/B,EAAIqqa,GAAUzpZ,EAAM9hB,QAAU8hB,EAAM3X,MAAQ2X,EAAMgf,MAAM5/B,GAClH/M,KAAKilc,SAASjlc,KAAK81C,QAAS4tZ,EAAgBC,EAAc9lC,EAAU9wZ,EAAGsqa,EAAQr3a,KAAK81C,QAAQwc,cAAesxY,IAE1GF,EAAepmC,QAShBE,EAAQ4Z,EAASrqa,EAAK22b,EAAe/3b,YARrC,GAAI3L,KAAK81C,QAAQic,aAAahM,YAAcy6V,GAAgB8iD,oBAAqB,CAC7E,IAAI92b,EAAOu5b,EAAeh5b,EAAIg5b,EAAe/vb,MAAQ2X,EAAMgf,MAAM5/B,EAC7Di5b,EAAax5b,EAAO4qa,EAExB5Z,EADkBx9Z,KAAKy9B,MAAMuoa,EAAYhmc,KAAK81C,QAAQic,aAAaoiW,oBAAoBC,gBAX9E,GAYY5nZ,EAM7B,OAAOgxZ,GAMXolC,EAASvnc,UAAU+ia,WAAa,SAAUslC,EAAgBC,EAAc9lC,EAAUuZ,EAAQC,EAAQ1pZ,EAAOi2a,EAAOqC,GAC5G,IAAIxoC,EAAO4Z,EACXssB,EAAah3b,QAAS,EACtB+2b,EAAel3b,KAAOk3b,EAAej3b,OAAQ,EAC7C,IACIO,EAAI,EAEJhN,KAAK81C,QAAQic,aAAahM,YAAcy6V,GAAgBi0B,eAAiB9mZ,EAAMkf,cAE/E7/B,EAAIi5b,EAAYj5b,EAAIi5b,EAAYlwb,QAAU,EAAI4X,EAAMgf,MAAM3/B,GAAKqqa,GAAU1pZ,EAAM1hB,QAAU0hB,EAAM5X,QAAU,EAAI4X,EAAMgf,MAAM3/B,IACzHhN,KAAKilc,SAASjlc,KAAK81C,QAAS4tZ,EAAgBC,EAAc9lC,EAAUuZ,EAAQpqa,EAAGhN,KAAK81C,QAAQwc,cAAesxY,IAElGn3Z,GAAU9e,EAAM5b,SAC7B,GAAK4xb,EAAarmC,QASdG,EAAQ4Z,EAASrqa,EAAK22b,EAAah4b,YARnC,GAAI3L,KAAK81C,QAAQic,aAAahM,YAAcy6V,GAAgB+iD,sBAAuB,CAC/E,IAAI52b,EAASs5b,EAAYj5b,EAAIi5b,EAAYlwb,QAAU,EAAI4X,EAAMgf,MAAM3/B,GAC/D0pa,EAAe/pa,EAAS0qa,EAE5B5Z,EADoBz9Z,KAAKy9B,MAAMi5Y,EAAc12a,KAAK81C,QAAQic,aAAaoiW,oBAAoBC,gBAblF,GAccznZ,EAM/B,OAAO8wZ,GAKXmlC,EAASvnc,UAAUypc,iBAAmB,SAAUhvZ,EAASguZ,EAASC,EAASlmC,EAAU6lC,EAAgBC,EAAcC,GAyB/G,OAxBIE,IACAJ,EAAe/3b,OAASm4b,EAAQj4b,QAChC63b,EAAepmC,SAAU,EACpBsmC,IACGE,EAAQp9b,KACR1G,KAAKkmc,qBAAqBpC,EAAQvmc,MAAOumc,EAAQjlb,IAAKg/Y,EAAU/nX,EAAQgV,SAASz9C,aAOzF02b,IACAJ,EAAah4b,OAASo4b,EAAQ93b,QAC9B03b,EAAarmC,SAAU,EAClBsmC,IACGG,EAAQr9b,KACR1G,KAAKkmc,qBAAqBnC,EAAQxmc,MAAOwmc,EAAQllb,IAAKg/Y,EAAU/nX,EAAQgV,SAASz9C,aAOtFwwZ,GAKX+kC,EAASvnc,UAAU6qc,qBAAuB,SAAU3oc,EAAOshB,EAAK/B,EAAKzP,GACjE9P,GACIwP,GAAIxP,EAAMwP,EAAIM,EAAUu6U,IAAMv6U,EAAUo+C,MACxCz+C,GAAIzP,EAAMyP,EAAIK,EAAUs6U,IAAMt6U,EAAUo+C,OAE5C5sC,GACI9R,GAAI8R,EAAI9R,EAAIM,EAAUu6U,IAAMv6U,EAAUo+C,MACtCz+C,GAAI6R,EAAI7R,EAAIK,EAAUs6U,IAAMt6U,EAAUo+C,OAE1C,IAAIg+T,GACA3rV,OAAQ,UAAW+T,YAAa,EAAGwT,YAAct4C,EAAGxP,EAAMwP,EAAGC,EAAGzP,EAAMyP,GACtEwyC,UAAYzyC,EAAG8R,EAAI9R,EAAGC,EAAG6R,EAAI7R,GAAK4wB,KAAM,UAAWkU,UAAW,GAAI97B,MAAO,EACzEjJ,EAAG,EAAGC,EAAG,EAAG+I,OAAQ,EAAGwL,MAAO,EAAGiuB,OAAQ,EACzCC,OAAQ,EAAGjY,SAAS,EAAM/pB,QAAS,EAAGnK,GAAIipC,MAE1CpwC,EAAI,EAER,IADA6D,KAAK8tD,KAAKtpD,KAAKilX,GACVttX,EAAI,EAAGA,EAAI6D,KAAK8tD,KAAKrxD,OAAQN,IAC9B6D,KAAK81C,QAAQw6X,gBAAgB9iV,SAAS1wE,EAAK9c,KAAK8tD,KAAKs+F,QAM7Dw2S,EAASvnc,UAAU0pc,oBAAsB,SAAUjvZ,EAASjZ,EAAGlP,EAAOs2a,EAAeC,EAAgBR,EAAgBC,EAAcC,EAAO3ua,EAAOova,GAC7I,IAAI33b,EAAM,EACV1M,KAAKmmc,eAAelC,EAAe,YAAY,GAC/Cjkc,KAAKmmc,eAAejC,EAAgB,YAAY,GAChD,IAEIkC,EACAC,EACA5B,EACA6B,EALAC,KACA7va,EAAS+V,GAAU9e,EAAM5b,SA0B7B,GArBIkyb,EAAcxnc,OAAS,IACvB8pc,EAAcA,EAAc9pc,QAAUwnc,EAAc,GAEpDv3b,GADA05b,EAAgBnC,EAAc,GAAM,IAAQ,QAC1Bj3b,EACdi3b,EAAcxnc,OAAS,GACvBgoc,EAAiBR,EAAc,GAAM,IAAQ,OAC7CqC,EAAgBF,EAAYr5b,EAAI03b,EAAa13b,EAAI03b,EAAazub,MAC1D3J,KAAKE,IAAI+5b,EAAgBrC,EAAc,GAAG5pZ,WAAagqZ,EACvD33b,EAAM1M,KAAKwmc,6BAA6BvC,EAAeqC,EAAe55b,EAAK65b,GAG3ED,EAAgBrC,EAAc,GAAG5pZ,UAIrCisZ,EAAgBrC,EAAc,GAAG5pZ,UAGzCr6C,KAAKmmc,eAAeI,EAAe,YACnCA,EAAcA,EAAc9pc,SAAYM,IAAK4wB,EAAO0sB,SAAU,GAC9D3tC,EAAMgqB,EAAO1pB,EAAIN,IAAQA,EAAMgqB,EAAO1pB,EAAIN,EACtCw3b,EAAeznc,OAAS,EAAG,CAC3B,IAAIylD,OAAO,EAOX,GANAmkZ,EAAiBnC,EAAe,GAAM,IAAQ,OAC9Cx3b,EAAM25b,EAAar5b,EAAIN,EAAM25b,EAAar5b,EAAIN,EAC1Cw3b,EAAeznc,OAAS,IAExBylD,GADAuiZ,EAAiBP,EAAe,GAAM,IAAQ,QAC1Bn3b,EAAIs5b,EAAat5b,EAAIs5b,EAAarwb,OAEtDiub,EAAcxnc,OAAS,EACvB,GAAI4P,KAAKE,IAAI23b,EAAe,GAAG7pZ,SAAW4pZ,EAAc,GAAG5pZ,WAAagqZ,EAAiB,CACrF,IAAIoC,EAAkBp6b,KAAKE,IAAI23b,EAAe,GAAG7pZ,SAAW4pZ,EAAc,GAAG5pZ,UAAY,EACxF6pZ,EAAe,GAAG7pZ,SAAW4pZ,EAAc,GAAG5pZ,SAC3CisZ,GAAiBG,EAAkBH,GAAiBG,EACxDF,EAAcA,EAAc9pc,QAAUync,EAAe,QAEvB,IAAzBD,EAAcxnc,SACnB2pc,OAAcjrc,EACdorc,EAAcl+a,OAAO,EAAG,GACxBk+a,EAAcA,EAAc9pc,QAAUync,EAAe,GACrDoC,EAAgBpkZ,QAIpBokZ,EAAgBpkZ,EAChBqkZ,EAAcA,EAAc9pc,QAAUync,EAAe,GAErDA,EAAeznc,OAAS,GAAK4pc,EAAat5b,EAAIs5b,EAAarwb,MAAQyub,EAAa13b,IAChFL,EAAM1M,KAAK0mc,8BAA8BxC,EAAgBhiZ,EAAMx1C,EAAK65b,EAAelC,IAG3F,GAAIkC,EAAc9pc,OAAS,EAAG,CAC1BuD,KAAK2mc,iBAAiB7wZ,EAASjZ,EAAG0pa,EAAe3C,EAAOl3b,GACxD,IAAIk6b,EAAkB,EAClBhD,IACAgD,EAAkB3xa,EAAMloB,GAExBq5b,EACA1C,EAAe/3b,OAAS26b,EAAgBj6b,KAAKE,IAAImqB,EAAO3pB,EAAI65b,EAAkBR,EAAYr5b,EAAIq5b,EAAYpwb,OACpG4wb,EAEDP,IACL3C,EAAe/3b,OAASU,KAAKE,IAAImqB,EAAO3pB,EAAI2pB,EAAO1gB,MAAQ4wb,EAAkBP,EAAat5b,GACpFu5b,EAAgBM,GAE1BlD,EAAepmC,SAAU,IAMjCslC,EAASvnc,UAAU2pc,oBAAsB,SAAUlvZ,EAASjZ,EAAGlP,EAAOw2a,EAAcC,EAAiBV,EAAgBC,EAAcC,EAAO3ua,EAAOova,GAC7I,IAAI53b,EAAQ,EACZzM,KAAKmmc,eAAehC,EAAc,YAAY,GAC9Cnkc,KAAKmmc,eAAe/B,EAAiB,YAAY,GACjD,IAEIyC,EACAC,EACArC,EACA6B,EALAC,KACA7va,EAAS+V,GAAU9e,EAAM5b,SAKzBoyb,EAAa1nc,OAAS,IACtB8pc,EAAcA,EAAc9pc,QAAU0nc,EAAa,GAEnD13b,GADAo6b,EAAe1C,EAAa,GAAM,IAAQ,QACvBp3b,EAAI85b,EAAW7wb,MAC9Bmub,EAAa1nc,OAAS,GACtBgoc,EAAiBN,EAAa,GAAM,IAAQ,OAC5CmC,EAAgBO,EAAW75b,EAAIy3b,EAAaz3b,EAAIy3b,EAAa1ub,OACzD1J,KAAKE,IAAI+5b,EAAgBnC,EAAa,GAAG9pZ,WAAagqZ,EACtD53b,EAAQzM,KAAK+mc,4BAA4B5C,EAAcmC,EAAe75b,EAAO85b,GAG7ED,EAAgBnC,EAAa,GAAG9pZ,UAIpCisZ,EAAgBnC,EAAa,GAAG9pZ,UAGxCr6C,KAAKmmc,eAAeI,EAAe,YACnCA,EAAcA,EAAc9pc,SAAYM,IAAK4wB,EAAO0sB,SAAU,GAC9D5tC,EAAQiqB,EAAO3pB,EAAI2pB,EAAO1gB,MAAQvJ,IAAUA,EAAQiqB,EAAO3pB,EAAI2pB,EAAO1gB,MAAQvJ,EAC9E,IAAIy1C,EACJ,GAAIkiZ,EAAgB3nc,OAAS,EAAG,CAO5B,GANAqqc,EAAkB1C,EAAgB,GAAM,IAAQ,OAChD33b,EAAQq6b,EAAc/5b,EAAI+5b,EAAc9wb,MAAQvJ,EAAQq6b,EAAc/5b,EAAI+5b,EAAc9wb,MAAQvJ,EAC5F23b,EAAgB3nc,OAAS,IAEzBylD,GADAuiZ,EAAiBL,EAAgB,GAAM,IAAQ,QAC3Bp3b,EAAI85b,EAAc95b,EAAI85b,EAAc/wb,QAExDoub,EAAa1nc,OAAS,EACtB,GAAI4P,KAAKE,IAAI63b,EAAgB,GAAG/pZ,SAAW8pZ,EAAa,GAAG9pZ,WAAagqZ,EAAiB,CACrF,IAAIoC,EAAkBp6b,KAAKE,IAAI63b,EAAgB,GAAG/pZ,SAAW8pZ,EAAa,GAAG9pZ,UAAY,EACxF+pZ,EAAgB,GAAG/pZ,SAAW8pZ,EAAa,GAAG9pZ,SAC3CisZ,GAAiBG,EAAkBH,GAAiBG,EACxDF,EAAcA,EAAc9pc,QAAU2nc,EAAgB,QAEzB,IAAxBD,EAAa1nc,SAClBoqc,OAAa1rc,EACborc,EAAcl+a,OAAO,EAAG,GACxBk+a,EAAcA,EAAc9pc,QAAU2nc,EAAgB,GACtDkC,EAAgBpkZ,QAIpBokZ,EAAgBpkZ,EAChBqkZ,EAAcA,EAAc9pc,QAAU2nc,EAAgB,GAEtDA,EAAgB3nc,OAAS,GAAKgoc,EAAaz3b,EAAI85b,EAAc95b,EAAI85b,EAAc/wb,SAC/EtJ,EAAQzM,KAAKgnc,+BAA+B5C,EAAiBliZ,EAAMz1C,EAAO85b,EAAelC,IAGjG,GAAIkC,EAAc9pc,OAAS,EAAG,CAC1BuD,KAAKinc,iBAAiBnxZ,EAASjZ,EAAG0pa,EAAe3C,EAAOn3b,GACxD,IAAIy6b,EAAgB,EAChBtD,IACAsD,EAAgBjya,EAAMjoB,GAEtB65b,EACAlD,EAAah4b,OAAS26b,EAAgBj6b,KAAKE,IAAImqB,EAAO1pB,EAAIk6b,EAAgBL,EAAW75b,EAAI65b,EAAW9wb,QAAUmxb,EAEzGJ,IACLnD,EAAah4b,OAASU,KAAKE,IAAImqB,EAAO1pB,EAAI0pB,EAAO3gB,OAASmxb,EAAgBJ,EAAc95b,GAAKs5b,EAAgBY,GAEjHvD,EAAarmC,SAAU,IAM/BslC,EAASvnc,UAAUsrc,iBAAmB,SAAU7wZ,EAASjZ,EAAG0pa,EAAe3C,EAAOl3b,GAC9E,IAAIvQ,EACAoB,EACAshB,EACJ,IAAK+kb,EACD,IAAKznc,EAAI,EAAGA,EAAIoqc,EAAc9pc,OAAS,EAAGN,IAAK,CAC3C,IAAIgrc,EAAOZ,EAAcpqc,GAAGY,eAAespD,GACvC5Z,GAAW85Z,EAAcpqc,GAAM,IAAE4V,SAAaw0b,EAAcpqc,GAAM,IAAQ,OAC1EmsC,EAAOi+Z,EAAcpqc,EAAI,GAAGY,eAAespD,GAC3C5Z,GAAW85Z,EAAcpqc,EAAI,GAAM,IAAE4V,SAAaw0b,EAAcpqc,EAAI,GAAM,IAAQ,OACtFoB,GAAUwP,EAAGo6b,EAAKp6b,EAAIo6b,EAAKnxb,MAAOhJ,EAAGN,EAAM,IAC3CmS,GAAQ9R,EAAGu7B,EAAKv7B,EAAGC,EAAGN,EAAM,IAC5B1M,KAAKonc,mBAAmB7pc,EAAOshB,EAAKge,EAAGgW,GAAmB7yC,KAAK81C,QAAQ90C,QAAQsC,IAAKwyC,EAAQgV,SAASz9C,aAOjHu1b,EAASvnc,UAAU4rc,iBAAmB,SAAUnxZ,EAASjZ,EAAGwqa,EAAsBzD,EAAOn3b,GACrF,IAAIlP,EACAshB,EACJ,IAAK+kb,EACD,IAAK,IAAIznc,EAAI,EAAGA,EAAIkrc,EAAqB5qc,OAAS,EAAGN,IAAK,CACtD,IAAIgrc,EAAOE,EAAqBlrc,GAAGY,eAAespD,GAC9C5Z,GAAW46Z,EAAqBlrc,GAAM,IAAE4V,SAAas1b,EAAqBlrc,GAAM,IAAQ,OACxFmsC,EAAO++Z,EAAqBlrc,EAAI,GAAGY,eAAespD,GAClD5Z,GAAW46Z,EAAqBlrc,EAAI,GAAM,IAAE4V,SAC1Cs1b,EAAqBlrc,EAAI,GAAM,IAAQ,OAC7CoB,GAAUwP,EAAGN,EAAQ,GAAIO,EAAGm6b,EAAKn6b,EAAIm6b,EAAKpxb,QAC1C8I,GAAQ9R,EAAGN,EAAQ,GAAIO,EAAGs7B,EAAKt7B,GAC/BhN,KAAKonc,mBAAmB7pc,EAAOshB,EAAKge,EAAGgW,GAAmB7yC,KAAK81C,QAAQ90C,QAAQsC,IAAKwyC,EAAQgV,SAASz9C,aAOjHu1b,EAASvnc,UAAUqqc,kBAAoB,SAAU5vZ,EAAS+nX,EAAUypC,EAAY5D,EAAgBE,EAAOj2a,GACnG3tB,KAAKmmc,eAAemB,EAAY,UAChC,IAEIpG,EACAC,EAHAzqa,EAAS+V,GAAU9e,EAAM5b,SACzB5K,EAASmgc,EAAW,GAGpB7C,EAAgBt9b,EAAa,OAAEuvB,OAC/B6wa,KACJA,EAAU/ic,KAAK8ic,EAAW,IAC1B,IAAInrc,EAEJ,IAAKA,EAAI,EAAGA,EAAImrc,EAAW7qc,OAAQN,IACjBmrc,EAAWnrc,GAAS,OAAEu6B,OACrB1gB,QAAUyub,EAAazub,OAClCuxb,EAAU/ic,KAAK8ic,EAAWnrc,IAGlC,IAAKync,EAID,IAHA1C,GAAYn0b,EAAG2pB,EAAO3pB,EAAI5F,EAAOwE,OAAQqB,EAAG0pB,EAAO1pB,EAAI,IACvDm0b,GAAUp0b,EAAG2pB,EAAO3pB,EAAI2pB,EAAO1gB,MAAQ7O,EAAOwE,OAAQqB,EAAG0pB,EAAO1pB,EAAI,IACpEhN,KAAKonc,mBAAmBlG,EAASC,EAAOtjC,EAAUhrX,GAAmB7yC,KAAK81C,QAAQ90C,QAAQsC,IAAKwyC,EAAQgV,SAASz9C,WAC3GlR,EAAI,EAAGA,EAAIorc,EAAU9qc,OAAQN,IAE9B+kc,GAAYn0b,GADZ2pB,EAAU6wa,EAAUprc,GAAS,OAAEu6B,QACT3pB,EAAGC,EAAG0pB,EAAO1pB,EAAI,IACvCm0b,GAAUp0b,EAAG2pB,EAAO3pB,EAAI2pB,EAAO1gB,MAAOhJ,EAAG0pB,EAAO1pB,EAAI,IACpDhN,KAAKonc,mBAAmBlG,EAASC,EAAOtjC,EAAUhrX,GAAmB7yC,KAAK81C,QAAQ90C,QAAQsC,IAAKwyC,EAAQgV,SAASz9C,WAGxHq2b,EAAe/3b,OAASxE,EAAOwE,OAC/B+3b,EAAepmC,SAAU,GAK7BslC,EAASvnc,UAAUsqc,mBAAqB,SAAU7vZ,EAAS+nX,EAAU2pC,EAAa7D,EAAcC,EAAOj2a,GACnG3tB,KAAKmmc,eAAeqB,EAAa,UACjC,IAGIjqc,EACAshB,EAJA6X,EAAS+V,GAAU9e,EAAM5b,SACzB5K,EAASqgc,EAAY,GACrB/C,EAAgBt9b,EAAa,OAAEuvB,OAG/B6wa,KACJA,EAAU/ic,KAAKgjc,EAAY,IAC3B,IAAIrrc,EAEJ,IAAKA,EAAI,EAAGA,EAAIqrc,EAAY/qc,OAAQN,IAClBqrc,EAAYrrc,GAAS,OAAEu6B,OACtB3gB,SAAW0ub,EAAa1ub,QACnCwxb,EAAU/ic,KAAKgjc,EAAYrrc,IAGnC,IAAKync,EAID,IAHArmc,GAAUwP,EAAG2pB,EAAO3pB,EAAI2pB,EAAO1gB,MAAQ,GAAIhJ,EAAG0pB,EAAO1pB,EAAI7F,EAAOwE,QAChEkT,GAAQ9R,EAAG2pB,EAAO3pB,EAAI2pB,EAAO1gB,MAAQ,GAAIhJ,EAAG0pB,EAAO1pB,EAAI7F,EAAOwE,OAAS+qB,EAAO3gB,QAC9E/V,KAAKonc,mBAAmB7pc,EAAOshB,EAAKg/Y,EAAUhrX,GAAmB7yC,KAAK81C,QAAQ90C,QAAQsC,IAAKwyC,EAAQgV,SAASz9C,WACvGlR,EAAI,EAAGA,EAAIorc,EAAU9qc,OAAQN,IAE9BoB,GAAUwP,GADV2pB,EAAU6wa,EAAUprc,GAAS,OAAEu6B,QACX3pB,EAAI2pB,EAAO1gB,MAAQ,GAAIhJ,EAAG0pB,EAAO1pB,GACrD6R,GAAQ9R,EAAG2pB,EAAO3pB,EAAI2pB,EAAO1gB,MAAQ,GAAIhJ,EAAG0pB,EAAO1pB,EAAI0pB,EAAO3gB,QAC9D/V,KAAKonc,mBAAmB7pc,EAAOshB,EAAKg/Y,EAAUhrX,GAAmB7yC,KAAK81C,QAAQ90C,QAAQsC,IAAKwyC,EAAQgV,SAASz9C,WAGpHs2b,EAAah4b,OAASxE,EAAOwE,OAC7Bg4b,EAAarmC,SAAU,GAK3BslC,EAASvnc,UAAU+rc,mBAAqB,SAAU7pc,EAAOshB,EAAKg/Y,EAAU/gZ,EAAKzP,GACzE,IAAIkhB,EAEAk7V,EACAzoX,EAAU,IAAI0gD,GACd1uC,KACJzV,GACIwP,GAAIxP,EAAMwP,EAAIM,EAAUu6U,IAAMv6U,EAAUo+C,MACxCz+C,GAAIzP,EAAMyP,EAAIK,EAAUs6U,IAAMt6U,EAAUo+C,OAE5C5sC,GACI9R,GAAI8R,EAAI9R,EAAIM,EAAUu6U,IAAMv6U,EAAUo+C,MACtCz+C,GAAI6R,EAAI7R,EAAIK,EAAUs6U,IAAMt6U,EAAUo+C,OAEtCluD,EAAMwP,IAAM8R,EAAI9R,GAChBwhB,EAAI,KAAOhxB,EAAMwP,EAAI,GAAK,KAAOxP,EAAMyP,EAAI,GAAK,IAAMzP,EAAMwP,EAAI,IAAMxP,EAAMyP,EACxE,KAAOzP,EAAMwP,EAAI,GAAK,KAAOxP,EAAMyP,EAAI,GAAK,MAAa6R,EAAI9R,EAAI,GAAK,KACrE8R,EAAI7R,EAAI,GAAK,KAAO6R,EAAI9R,EAAI,IAAM8R,EAAI7R,EAAI,MAC1C6R,EAAI9R,EAAI,GAAK,KAAO8R,EAAI7R,EAAI,GAAK,IACtCy8W,GACIpkU,YAAct4C,EAAGxP,EAAMwP,EAAI,EAAGC,EAAGzP,EAAMyP,EAAI,GAC3CwyC,UAAYzyC,EAAGxP,EAAMwP,EAAI,EAAGC,EAAGzP,EAAMyP,EAAI,GACzC8wB,OAAQ,UACR+T,YAAa,EAAGjU,KAAM,UAAWkU,UAAW,GAAI97B,MAAO,EAAGjJ,EAAG,EAAGC,EAAG,EAAG+I,OAAQ,EAAGwL,MAAO,EAAGiuB,OAAQ,EACnGC,OAAQ,EAAGjY,SAAS,EAAM/pB,QAAS,EAAGnK,GAAIipC,MAE9CvrC,EAAQxE,KAAO+xB,EACfvb,EAAQxW,KAAOwE,EAAQxE,KACvBwW,EAAQuO,MAAQ,EAChBvO,EAAQw8B,OAAS,EACjBx8B,EAAQy8B,OAAS,EACjBz8B,EAAQjG,EAAI,EACZiG,EAAQhG,EAAI,EACZgG,EAAQ+C,OAAS,EACjB/C,EAAQgD,MAAQ,EAChBhD,EAAQ1P,GAAKipC,KACbvsC,KAAK81C,QAAQw6X,gBAAgBn6Y,SAAS0nY,EAAU7qZ,GAChDhT,KAAK8tD,KAAKtpD,KAAKilX,GACfzpX,KAAK81C,QAAQw6X,gBAAgB9iV,SAASqwU,EAAU79Z,KAAK8tD,KAAKs+F,OAC1Dq9N,GACIpkU,YAAct4C,EAAG8R,EAAI9R,EAAI,EAAGC,EAAG6R,EAAI7R,EAAI,GACvCwyC,UAAYzyC,EAAG8R,EAAI9R,EAAI,EAAGC,EAAG6R,EAAI7R,EAAI,GACrC8wB,OAAQ,UACR+T,YAAa,EAAGjU,KAAM,UAAWkU,UAAW,GAAI97B,MAAO,EAAGjJ,EAAG,EAAGC,EAAG,EAAG+I,OAAQ,EAAGwL,MAAO,EAAGiuB,OAAQ,EACnGC,OAAQ,EAAGjY,SAAS,EAAM/pB,QAAS,EAAGnK,GAAIuvC,GAAmB7yC,KAAK81C,QAAQ90C,QAAQsC,IAAIA,GAAK,WAE/FtD,KAAK8tD,KAAKtpD,KAAKilX,GACfzpX,KAAK81C,QAAQw6X,gBAAgB9iV,SAASqwU,EAAU79Z,KAAK8tD,KAAKs+F,SAG1D79H,EAAI,KAAOhxB,EAAMwP,EAAI,GAAK,KAAOxP,EAAMyP,EAAI,GAAK,KAAOzP,EAAMwP,EAAI,IAAMxP,EAAMyP,EACzE,MAAQzP,EAAMwP,EAAI,GAAK,KAAOxP,EAAMyP,EAAI,GAAK,MAAa6R,EAAI9R,EAAI,GAAK,KACtE8R,EAAI7R,EAAI,GAAK,KAAO6R,EAAI9R,EAAI,IAAM8R,EAAI7R,EACvC,MAAQ6R,EAAI9R,EAAI,GAAK,KAAO8R,EAAI7R,EAAI,GAAK,IAC7ChM,EAAQxE,KAAO+xB,EACfvb,EAAQxW,KAAO+xB,EACfvb,EAAQuO,MAAQ,EAChBvO,EAAQw8B,OAAS,EACjBx8B,EAAQy8B,OAAS,EACjBz8B,EAAQjG,EAAI,EACZiG,EAAQhG,EAAI,EACZgG,EAAQ+C,OAAS,EACjB/C,EAAQgD,MAAQ,EAChBhD,EAAQ1P,GAAKipC,KACbvsC,KAAK81C,QAAQw6X,gBAAgBn6Y,SAAS0nY,EAAU7qZ,GAChDy2W,GACIjyV,SAAS,EAAM/pB,QAAS,EAAGnK,GAAIipC,KAC/B8Y,YAAct4C,EAAGxP,EAAMwP,EAAI,EAAGC,EAAGzP,EAAMyP,EAAI,GAC3CwyC,UAAYzyC,EAAGxP,EAAMwP,EAAI,EAAGC,EAAGzP,EAAMyP,EAAI,GACzC8wB,OAAQ,UACR+T,YAAa,EAAGjU,KAAM,UAAWkU,UAAW,IAAK97B,MAAO,EAAGjJ,EAAG,EAAGC,EAAG,EAAG+I,OAAQ,EAAGwL,MAAO,EAAGiuB,OAAQ,EACpGC,OAAQ,GAEZzvC,KAAK8tD,KAAKtpD,KAAKilX,GACfzpX,KAAK81C,QAAQw6X,gBAAgB9iV,SAASqwU,EAAU79Z,KAAK8tD,KAAKs+F,OAC1Dq9N,GACIzzW,MAAO,EAAGjJ,EAAG,EAAGC,EAAG,EAAG+I,OAAQ,EAAGwL,MAAO,EAAGiuB,OAAQ,EACnDC,OAAQ,EAAGjY,SAAS,EAAM/pB,QAAS,EAAGnK,GAAIipC,KAC1C8Y,YAAct4C,EAAG8R,EAAI9R,EAAI,EAAGC,EAAG6R,EAAI7R,EAAI,GACvCwyC,UAAYzyC,EAAG8R,EAAI9R,EAAI,EAAGC,EAAG6R,EAAI7R,EAAI,GACrC8wB,OAAQ,UACR+T,YAAa,EAAGjU,KAAM,UAAWkU,UAAW,KAEhD9xC,KAAK8tD,KAAKtpD,KAAKilX,GACfzpX,KAAK81C,QAAQw6X,gBAAgB9iV,SAASqwU,EAAU79Z,KAAK8tD,KAAKs+F,QAE9Dq9N,GACIpkU,YAAct4C,EAAGxP,EAAMwP,EAAGC,EAAGzP,EAAMyP,GACnCwyC,UAAYzyC,EAAG8R,EAAI9R,EAAGC,EAAG6R,EAAI7R,GAAK8wB,OAAQ,UAAW+T,YAAa,EAAGjU,KAAM,UAC3EkU,UAAW,IAAK97B,MAAO,EAAGjJ,EAAG,EAAGC,EAAG,EAAG+I,OAAQ,EAAGwL,MAAO,EAAGiuB,OAAQ,EACnEC,OAAQ,EAAGjY,SAAS,EAAM/pB,QAAS,EAAGnK,GAAIipC,MAE9CvsC,KAAK8tD,KAAKtpD,KAAKilX,GACfzpX,KAAK81C,QAAQw6X,gBAAgB9iV,SAASqwU,EAAU79Z,KAAK8tD,KAAKs+F,QAM9Dw2S,EAASvnc,UAAUwpc,iBAAmB,SAAUJ,EAAc/ta,EAAQ+wa,GAClE,IAAI1E,EACJ,OAAQ0E,GACJ,IAAK,OACD1E,GACIxlc,OAASwP,EAAI03b,EAAc,EAAGz3b,EAAGX,KAAK0T,IAAI0kb,EAAaz3b,EAAG0pB,EAAO1pB,IACjE6R,KAAO9R,EAAI03b,EAAc,EAAGz3b,EAAGX,KAAKC,IAAIm4b,EAAaz3b,EAAIy3b,EAAa1ub,OAAQ2gB,EAAO1pB,EAAI0pB,EAAO3gB,SAChGlK,QAAS44b,EAAa13b,EAAI2pB,EAAO3pB,EAAGd,QAAS,EAAGvF,KAAM,aAE1D,MACJ,IAAK,QACDq8b,GACIr8b,KAAM,YACNnJ,OAASwP,EAAI03b,EAAa13b,EAAI03b,EAAazub,MAAQhJ,EAAGX,KAAK0T,IAAI0kb,EAAaz3b,EAAG0pB,EAAO1pB,IACtFnB,QAAS44b,EAAa13b,EAAI03b,EAAazub,MAAQ0gB,EAAO3pB,EAAI2pB,EAAO1gB,MACjE/J,QAAS,EACT4S,KACI9R,EAAI03b,EAAa13b,EAAI03b,EAAazub,MAClChJ,EAAGX,KAAKC,IAAIm4b,EAAaz3b,EAAIy3b,EAAa1ub,OAAQ2gB,EAAO1pB,EAAI0pB,EAAO3gB,UAG5E,MACJ,IAAK,MACDgtb,GACI92b,QAASw4b,EAAaz3b,EAAI0pB,EAAO1pB,EAAGnB,QAAS,EAAGnF,KAAM,YACtDnJ,OAASwP,EAAIV,KAAK0T,IAAI0kb,EAAa13b,EAAG2pB,EAAO3pB,GAAKC,EAAGy3b,EAAaz3b,GAClE6R,KAAO9R,EAAIV,KAAKC,IAAIm4b,EAAa13b,EAAI03b,EAAazub,MAAO0gB,EAAO3pB,EAAI2pB,EAAO1gB,OAAShJ,EAAGy3b,EAAaz3b,IAExG,MACJ,IAAK,SACD+1b,GACIr8b,KAAM,YAAauF,QAASw4b,EAAaz3b,EAAIy3b,EAAa1ub,OAAS2gB,EAAO1pB,EAAI0pB,EAAO3gB,OAAQlK,QAAS,EACtGgT,KACI9R,EAAIV,KAAKC,IAAIm4b,EAAa13b,EAAI03b,EAAazub,MAAO0gB,EAAO3pB,EAAI2pB,EAAO1gB,OACpEhJ,EAAGy3b,EAAaz3b,EAAIy3b,EAAa1ub,QAErCxY,OAASwP,EAAIV,KAAK0T,IAAI0kb,EAAa13b,EAAG2pB,EAAO3pB,GAAKC,EAAGy3b,EAAaz3b,EAAIy3b,EAAa1ub,SAEvF,MACJ,IAAK,YACDgtb,GACIxlc,OAASwP,EAAIV,KAAK0T,IAAI0kb,EAAa13b,EAAG2pB,EAAO3pB,GAAKC,EAAGy3b,EAAaz3b,EAAIy3b,EAAa1ub,QACnF8I,KACI9R,EAAIV,KAAKC,IAAIm4b,EAAa13b,EAAI03b,EAAazub,MAAO0gB,EAAO3pB,EAAI2pB,EAAO1gB,OACpEhJ,EAAGy3b,EAAaz3b,EAAIy3b,EAAa1ub,QAErC9J,QAASw4b,EAAaz3b,EAAIy3b,EAAa1ub,OAAS2gB,EAAO1pB,EAAGnB,QAAS,EAAGnF,KAAM,aAEhF,MACJ,IAAK,YACDq8b,GACIxlc,OAASwP,EAAIV,KAAK0T,IAAI0kb,EAAa13b,EAAG2pB,EAAO3pB,GAAKC,EAAGy3b,EAAaz3b,GAClE6R,KAAO9R,EAAIV,KAAKC,IAAIm4b,EAAa13b,EAAI03b,EAAazub,MAAO0gB,EAAO3pB,EAAI2pB,EAAO1gB,OAAShJ,EAAGy3b,EAAaz3b,GACpGf,QAASw4b,EAAaz3b,EAAI0pB,EAAO1pB,EAAI0pB,EAAO3gB,OAAQlK,QAAS,EAAGnF,KAAM,aAE1E,MACJ,IAAK,YACDq8b,GACIxlc,OAASwP,EAAI03b,EAAa13b,EAAI03b,EAAazub,MAAQhJ,EAAGX,KAAK0T,IAAI0kb,EAAaz3b,EAAG0pB,EAAO1pB,IACtF6R,KACI9R,EAAI03b,EAAa13b,EAAI03b,EAAazub,MAClChJ,EAAGX,KAAKC,IAAIm4b,EAAaz3b,EAAIy3b,EAAa1ub,OAAQ2gB,EAAO1pB,EAAI0pB,EAAO3gB,SAExElK,QAAS44b,EAAa13b,EAAI03b,EAAazub,MAAQ0gB,EAAO3pB,EAAGd,QAAS,EAAGvF,KAAM,aAE/E,MACJ,IAAK,YACDq8b,GACIxlc,OAASwP,EAAI03b,EAAc,EAAGz3b,EAAIX,KAAK0T,IAAI0kb,EAAaz3b,EAAG0pB,EAAO1pB,IAClE6R,KAAO9R,EAAI03b,EAAc,EAAGz3b,EAAGX,KAAKC,IAAIm4b,EAAaz3b,EAAIy3b,EAAa1ub,OAAQ2gB,EAAO1pB,EAAI0pB,EAAO3gB,SAChGlK,QAAS44b,EAAa13b,EAAI2pB,EAAO3pB,EAAI2pB,EAAO1gB,MAAO/J,QAAS,EAAGvF,KAAM,aAEzE,MACJ,IAAK,UACDq8b,GACIxlc,OAASwP,EAAI03b,EAAa13b,EAAI03b,EAAazub,MAAQ,EAAIhJ,EAAIX,KAAK0T,IAAI0kb,EAAaz3b,EAAG0pB,EAAO1pB,IAC3F6R,KACI9R,EAAI03b,EAAa13b,EAAI03b,EAAazub,MAAQ,EAC1ChJ,EAAGX,KAAKC,IAAIm4b,EAAaz3b,EAAIy3b,EAAa1ub,OAAQ2gB,EAAO1pB,EAAI0pB,EAAO3gB,SAExElK,QAAS44b,EAAa13b,EAAI03b,EAAazub,MAAQ,GAAK0gB,EAAO3pB,EAAI2pB,EAAO1gB,MAAQ,GAAI/J,QAAS,EAAGvF,KAAM,eAExG,MACJ,IAAK,UACDq8b,GACIxlc,OAASwP,EAAIV,KAAK0T,IAAI0kb,EAAa13b,EAAG2pB,EAAO3pB,GAAKC,EAAGy3b,EAAaz3b,EAAIy3b,EAAa1ub,OAAS,GAC5F8I,KACI9R,EAAIV,KAAKC,IAAIm4b,EAAa13b,EAAI03b,EAAazub,MAAO0gB,EAAO3pB,EAAI2pB,EAAO1gB,OACpEhJ,EAAGy3b,EAAaz3b,EAAIy3b,EAAa1ub,OAAS,GAE9C9J,QAASw4b,EAAaz3b,EAAIy3b,EAAa1ub,OAAS,GAAK2gB,EAAO1pB,EAAI0pB,EAAO3gB,OAAS,GAAIlK,QAAS,EAAGnF,KAAM,eAIlH,OAAOq8b,GAMXH,EAASvnc,UAAUwha,UAAY,SAAU/mX,EAASv0B,GAC9C,IACIs7Y,EADe78Z,KAAK81C,QAAQic,aACH8qW,UACzB7mZ,EAAQuL,GAASs7Y,GAAa,GAClC,OAAI7mZ,GAAU6mZ,EAAY,EACft7Y,EAAQs7Y,EAAY7mZ,EAGpBuL,EAAQvL,GAMvB4sb,EAASvnc,UAAUupc,YAAc,SAAUtrY,EAAW+hW,EAAgBl0Z,GAClE,OACInH,KAAK81C,QAAQwc,cAAcR,MAAMr1D,QAAUuD,KAAK81C,QAAQwc,cAAcR,MAAM,GAAGxuD,KAAO6D,EAAO7D,IAUrGs/b,EAASvnc,UAAUqpc,UAAY,SAAUr8B,EAAe9na,EAAMF,EAAOmib,EAAU8iB,GAK3E,IAAK,IAHDoC,EACAhxa,EAFAo7B,KAGA+mX,EAAQxQ,EAAcsQ,UAAU2sB,EAAc9iB,EAAWnib,GACpDlE,EAAI,EAAGA,EAAI08a,EAAMp8a,OAAQN,IAAK,CACnC,IAAI29a,EAAOjB,EAAM18a,GACjB,GAAI29a,EAAKrrX,QAAQhyD,OAAS,EACtB,IAAK,IAAI8mB,EAAI,EAAGA,EAAIu2Z,EAAKrrX,QAAQhyD,OAAQ8mB,IACrCmkb,EAAK5tB,EAAKrrX,QAAQlrC,GACZvjB,KAAK81C,QAAQwjB,UAAUouY,EAAGpkc,cAAewiD,KAAc4hZ,EAAGlwa,UAC5Dd,EAAS+V,GAAUi7Z,IACQ,IAAvB51Y,EAAMvzD,QAAQmpc,IAAc1nc,KAAK4/b,eAAev/b,EAAOq2B,IACvDo7B,EAAMttD,KAAKkjc,GAEXpC,GAAeA,EAAY/mc,QAAQmpc,IAAO1nc,KAAK4/b,eAAepd,EAAU9rZ,IACxE4ua,EAAY9gc,KAAKkjc,IAMrC,OAAO51Y,GAEX8wY,EAASvnc,UAAUukc,eAAiB,SAAUv/b,EAAOq2B,GACjD,OAAWA,EAAO3pB,EAAK1M,EAAM0M,EAAI1M,EAAM2V,OAAY3V,EAAM0M,EAAK2pB,EAAO3pB,EAAI2pB,EAAO1gB,OACxE0gB,EAAO1pB,EAAK3M,EAAM2M,EAAI3M,EAAM0V,QAAc1V,EAAM2M,EAAK0pB,EAAO1pB,EAAI0pB,EAAO3gB,QAMnF6sb,EAASvnc,UAAUq5a,iBAAmB,SAAU5+X,GAC5C,IAAI00Y,EAAgB33Y,GAAmB7yC,KAAK81C,QAAQ90C,QAAQsC,IAAIspB,eAAe,kBAC3EkhC,EAAOjb,GAAmB7yC,KAAK81C,QAAQ90C,QAAQsC,IAAIspB,eAAe,aAClE49Z,GACAA,EAAc/pb,WAAW6E,YAAYklb,GAErC18X,GACAA,EAAKrtD,WAAW6E,YAAYwoD,IAMpC80Y,EAASvnc,UAAU8qc,eAAiB,SAAUppc,EAAKC,EAAO2qc,GACtD,IAAIxrc,EACAonB,EACAwK,EACJ,GAAI45a,EACA,IAAKxrc,EAAI,EAAGA,EAAIY,EAAIN,OAAQN,IACxB,IAAKonB,EAAIpnB,EAAI,EAAGonB,EAAIxmB,EAAIN,OAAQ8mB,IACxBxmB,EAAIZ,GAAGa,GAASD,EAAIwmB,GAAGvmB,KACvB+wB,EAAOhxB,EAAIZ,GACXY,EAAIZ,GAAKY,EAAIwmB,GACbxmB,EAAIwmB,GAAKwK,QAMrB,IAAK5xB,EAAI,EAAGA,EAAIY,EAAIN,OAAQN,IACxB,IAAKonB,EAAIpnB,EAAI,EAAGonB,EAAIxmB,EAAIN,OAAQ8mB,IACxBxmB,EAAIZ,GAAGa,GAASD,EAAIwmB,GAAGvmB,KACvB+wB,EAAOhxB,EAAIZ,GACXY,EAAIZ,GAAKY,EAAIwmB,GACbxmB,EAAIwmB,GAAKwK,IAS7B60a,EAASvnc,UAAUmrc,6BAA+B,SAAUvC,EAAe2D,EAAel7b,EAAK65b,GAC3F,IAAIsB,EACApD,EACAviZ,EACA/lD,EACJ,IAAKA,EAAI,EAAGA,EAAI8nc,EAAcxnc,SAC1Borc,EAAe5D,EAAc9nc,EAAI,GAAM,IAAQ,OAC/Csoc,EAAiBR,EAAc9nc,GAAM,IAAQ,OAC7C+lD,EAAO2lZ,EAAW96b,EAAI03b,EAAa13b,EAAI03b,EAAazub,MAChD3J,KAAKE,IAAI21C,EAAO0lZ,IAAkB,GAJJzrc,IAK9Boqc,EAAcA,EAAc9pc,QAAUwnc,EAAc9nc,GAChDsoc,EAAaz3b,EAAIN,IACjBA,EAAM+3b,EAAaz3b,GAO/B,OAAON,GAKXk2b,EAASvnc,UAAUqrc,8BAAgC,SAAUxC,EAAgB0D,EAAel7b,EAAK65b,EAAelC,GAC5G,IACIl9b,EACAs9b,EACAoD,EACA3lZ,EAJA4lZ,EAAiB5D,EAAe,GAAG7pZ,SAKvC,GAAIhuC,KAAKE,IAAIq7b,EAAgBE,IAAmBzD,EAC5C,IAAK,IAAIloc,EAAI,EAAGA,EAAI+nc,EAAeznc,OAAS,IACxC0K,EAAS+8b,EAAe/nc,GAAGY,IAC3B0nc,EAAiBP,EAAe/nc,EAAI,GAAM,IAAQ,OAClD0rc,EAAc1gc,EAAa,OAC3B+6C,EAAOuiZ,EAAa13b,EAAI86b,EAAW96b,EAAI86b,EAAW7xb,MAC9C3J,KAAKE,IAAI21C,EAAO0lZ,IAAkB,GALKzrc,IAMvCoqc,EAAcA,EAAc9pc,QAAUync,EAAe/nc,EAAI,GACrD0rc,EAAW76b,EAAIN,IACfA,EAAMm7b,EAAW76b,GAQjC,OAAON,GAEXk2b,EAASvnc,UAAU0rc,4BAA8B,SAAU5C,EAAcyD,EAAen7b,EAAO85b,GAI3F,IAAK,IAHDsB,EACApD,EACAviZ,EACK/lD,EAAI,EAAGA,EAAIgoc,EAAa1nc,SAC7Borc,EAAe1D,EAAahoc,EAAI,GAAM,IAAQ,OAC9Csoc,EAAiBN,EAAahoc,GAAM,IAAQ,OAC5C+lD,EAAO2lZ,EAAW76b,EAAIy3b,EAAaz3b,EAAIy3b,EAAa1ub,OAChD1J,KAAKE,IAAI21C,EAAO0lZ,IAAkB,GAJDzrc,IAKjCoqc,EAAcA,EAAc9pc,QAAU0nc,EAAahoc,GAC/Csoc,EAAa13b,EAAI03b,EAAazub,MAAQvJ,IACtCA,EAAQg4b,EAAa13b,EAAI03b,EAAazub,OAOlD,OAAOvJ,GAKXm2b,EAASvnc,UAAU2rc,+BAAiC,SAAU5C,EAAiBwD,EAAen7b,EAAO85b,EAAelC,GAChH,IACIl9b,EACAs9b,EACAoD,EACA3lZ,EAJA4lZ,EAAiB1D,EAAgB,GAAG/pZ,SAKxC,GAAIhuC,KAAKE,IAAIq7b,EAAgBE,IAAmBzD,EAC5C,IAAK,IAAIloc,EAAI,EAAGA,EAAIioc,EAAgB3nc,OAAS,IACzC0K,EAASi9b,EAAgBjoc,GAAGY,IAC5B0nc,EAAiBL,EAAgBjoc,EAAI,GAAM,IAAQ,OACnD0rc,EAAc1gc,EAAa,OAC3B+6C,EAAOuiZ,EAAaz3b,EAAI66b,EAAW76b,EAAI66b,EAAW9xb,OAC9C1J,KAAKE,IAAI21C,EAAO0lZ,IAAkB,GALMzrc,IAMxCoqc,EAAcA,EAAc9pc,QAAU2nc,EAAgBjoc,EAAI,GACtD0rc,EAAW96b,EAAI86b,EAAW7xb,MAAQvJ,IAClCA,EAAQo7b,EAAW96b,EAAI86b,EAAW7xb,OAQlD,OAAOvJ,GAMXm2b,EAASvnc,UAAUyia,SAAW,WAC1B,IAAID,EAOJ,OANI79Z,KAAK81C,QAAQic,aAAahM,YAAcy6V,GAAgBi0B,gBACxD5W,EAAWr9Z,SAAS4C,gBAAgB,6BAA8B,MACzDI,aAAa,KAAM,kBAC5Bq6Z,EAASr6Z,aAAa,iBAAkB,cACxCqvC,GAAmB7yC,KAAK81C,QAAQ90C,QAAQsC,IAAI3B,YAAYk8Z,IAErDA,GAcX+kC,EAASvnc,UAAUiX,QAAU,aAQ7Bswb,EAASvnc,UAAUkkC,cAAgB,WAI/B,MAAO,YAEJqja,KChwCPr2B,GAA0B,WAK1B,SAASA,IACLvsa,KAAK+nc,WAAY,EACjB/nc,KAAKs4Z,cAooBT,OAhoBAiU,EAASlxa,UAAUqjb,YAAc,SAAU5oY,GACvCA,EAAQ80X,aACJmpB,SAAS,EAAOD,SAAS,EAAOkU,aAAc,KAC9Cxjc,KAAMsxC,EAAQokX,gBAAgB5+Z,KAAKw6C,GAAUoqY,KAAM9kb,SAAU+kb,KAAM/kb,SACnEsga,iBAAkB5lX,EAAQ4lX,iBAAiBpga,KAAKw6C,GAAUimX,eAAgBjmX,EAAQimX,eAAezga,KAAKw6C,GACtGmyZ,OAAQ,KAAMC,aAAeC,eAIrC57B,EAASlxa,UAAU6+Z,gBAAkB,SAAUH,EAAOjkX,GAClD,IAAIsyZ,EAAc,KAElB,GAAItyZ,EAAQ80X,YAAYq9B,OAAQ,CAE5B,IAAsB,IADTnyZ,EAAQ80X,YAAYq9B,OAAOluC,GAC7BlhY,OACP,OAGJid,EAAQ80X,aAAe90X,EAAQ80X,YAAYkpB,SAAWh+Y,EAAQ80X,YAAYo9B,gBAC1EI,EAActyZ,EAAQ80X,YAAYo9B,cAClB1/Z,KACR8/Z,EAAY79T,WACA69T,EAAY9/Z,KACdiiG,SAAW,KACrB69T,EAAY9/Z,KAAOyxX,EACnBA,EAAMxvR,SAAW69T,IAIrBA,EAAY9/Z,KAAOyxX,EACnBA,EAAMxvR,SAAW69T,IAGzBtyZ,EAAQ80X,YAAYo9B,aAAejuC,EACnC/5Z,KAAKqoc,eAAevyZ,GACpBA,EAAQ80X,YAAYkpB,SAAU,EAC9Bh+Y,EAAQ80X,YAAYmpB,SAAU,GAGlCxnB,EAASlxa,UAAU6kb,KAAO,SAAUpqY,GAChC,IAAIikX,EAAQ/5Z,KAAKsoc,aAAaxyZ,GAC1ByyZ,EAAsB,EACtBxuC,IACuB,aAAnBA,EAAM3/N,UACa,aAAf2/N,EAAMrzZ,MACN6hc,IACAvoc,KAAK+nc,WAAY,GAGjB/nc,KAAKwoc,UAAUzuC,EAAOjkX,GAEtB91C,KAAK+nc,YACL/nc,KAAKyoc,gBAAgB1uC,EAAOjkX,EAASyyZ,GACrCvoc,KAAK+nc,WAAY,IAIrBjyZ,EAAQ80X,YAAYsV,KAAKnmB,KAIrCwS,EAASlxa,UAAUgtc,eAAiB,SAAUvyZ,GAC1C,IAGI8+X,EACAC,EAJAqzB,KACAC,KACAO,EAAY5yZ,EAAQ80X,YAAYo9B,aAUpC,IAPAU,EAAY5yZ,EAAQ80X,YAAYo9B,aAC5BlyZ,EAAQ80X,YAAYkpB,SAAoD,IAAzCh+Y,EAAQ80X,YAAYs9B,UAAUzrc,OAC7DuD,KAAK2oc,iBAAiBT,EAAWQ,GAGjC1oc,KAAK2oc,iBAAiBR,EAAWO,GAE9BA,GAAaA,EAAUn+T,UAC1BqqS,EAAU8zB,EAAUn+T,SACpBvqI,KAAK2oc,iBAAiBT,EAAWtzB,GACjC8zB,EAAYA,EAAUn+T,SAG1B,IADAm+T,EAAY5yZ,EAAQ80X,YAAYo9B,aACzBU,GAAaA,EAAUpga,MAC1BusY,EAAU6zB,EAAUpga,KACpBtoC,KAAK2oc,iBAAiBR,EAAWtzB,GACjC6zB,EAAYA,EAAUpga,KAE1BwN,EAAQ80X,YAAYs9B,UAAYA,EAChCpyZ,EAAQ80X,YAAYu9B,UAAYA,GAEpC57B,EAASlxa,UAAUstc,iBAAmB,SAAU9lW,EAAM9lG,GAC9CA,GAAoB,eAAbA,EAAI2J,MAAsC,aAAb3J,EAAI2J,MACxCm8F,EAAKr+F,MACDw1Z,WAAYj9Z,EAAIi9Z,WAAaj9Z,EAAIi9Z,WAAa,KAC9CC,WAAYl9Z,EAAIk9Z,WAAal9Z,EAAIk9Z,WAAa,KAC9CvzZ,KAAM3J,EAAI2J,KAAO3J,EAAI2J,KAAO,KAC5B0zL,SAAUr9L,EAAIq9L,SAAWr9L,EAAIq9L,SAAW,QAIpDmyO,EAASlxa,UAAUotc,gBAAkB,SAAU1uC,EAAOjkX,EAASyyZ,GAC3D,KAA+B,IAAxBA,GACHvoc,KAAKwoc,UAAUzuC,EAAOjkX,GAEH,gBADnBikX,EAAQ/5Z,KAAKsoc,aAAaxyZ,IAChBpvC,KACN6hc,IAEoB,aAAfxuC,EAAMrzZ,MACX6hc,IAGRA,EAAsB,GAE1Bh8B,EAASlxa,UAAUmtc,UAAY,SAAUzuC,EAAOjkX,GAC5C,IAAI/4C,EAIJ,GAHmB,oBAAfg9Z,EAAMrzZ,MAA6C,sBAAfqzZ,EAAMrzZ,MAA+C,2BAAfqzZ,EAAMrzZ,OAChF3J,EAAOg9Z,EAAgB,YAER,eAAfA,EAAMrzZ,MAAwC,aAAfqzZ,EAAMrzZ,MACjCovC,EAAQ80X,YAAYs9B,UAAUzrc,OAAS,EAAG,CAC1C,IAAImsc,EAAY9yZ,EAAQ80X,YAAYs9B,UAAU7/a,OAAO,EAAG,GACxDytB,EAAQ80X,YAAYu9B,UAAU9/a,OAAO,EAAG,EAAGugb,EAAU,IAK7D,OAFA9yZ,EAAQma,uBAAsB,GAC9Bna,EAAQuT,gBAAkBC,GAAcijX,SAChCxS,EAAMrzZ,MACV,IAAK,kBACL,IAAK,QACL,IAAK,aACD1G,KAAK6oc,sBAAsB9rc,EAAK+4C,GAChC,MACJ,IAAK,cACL,IAAK,SACD91C,KAAK8oc,kBAAkB/rc,EAAK+4C,EAASikX,GACrC,MACJ,IAAK,kBACD/5Z,KAAK+oc,sBAAsBhsc,EAAK+4C,EAASikX,GACzC,MACJ,IAAK,oBACD/5Z,KAAKgpc,wBAAwBjsc,EAAK+4C,GAClC,MACJ,IAAK,kBACD91C,KAAKipc,sBAAsBlvC,EAAOjkX,GAAS,GAC3C,MACJ,IAAK,oBACDikX,EAAMmvC,QAAS,EACflpc,KAAKmpc,wBAAwBpvC,EAAOjkX,GACpCikX,EAAMmvC,QAAS,EACf,MACJ,IAAK,yBACDnvC,EAAMmvC,QAAS,EACflpc,KAAKopc,6BAA6BrvC,EAAOjkX,GACzCikX,EAAMmvC,QAAS,EACf,MACJ,IAAK,wBACDnvC,EAAMmvC,QAAS,EACflpc,KAAKqpc,4BAA4BtvC,EAAOjkX,GACxCikX,EAAMmvC,QAAS,EACf,MACJ,IAAK,QACDlpc,KAAKssa,QAAQvS,EAAOjkX,GACpB,MACJ,IAAK,UACD91C,KAAK+yF,MAAMgnU,EAAOjkX,GAClB,MACJ,IAAK,iBACD91C,KAAKspc,qBAAqBvsc,EAAK+4C,GAGvCA,EAAQuT,iBAAmBC,GAAcijX,SACzCz2X,EAAQma,uBAAsB,GAC9Bna,EAAQiqY,qBAAqBhmB,IAEjCwS,EAASlxa,UAAU03F,MAAQ,SAAUw2W,EAAczzZ,GAC/CA,EAAQ1xC,IAAImlc,EAAatvC,aAE7BsS,EAASlxa,UAAUixa,QAAU,SAAUvS,EAAOjkX,GAC1CikX,EACMC,WAAajtX,GAAYgtX,EAAME,YACrC,IAAI15Z,EAAOw5Z,EAAME,WACjBnkX,EAAQmiX,eAAeqU,QAAQ/ra,IAEnCgsa,EAASlxa,UAAUmuc,eAAiB,SAAUnsc,GAC1C,MAAY,WAARA,GAA4B,YAARA,GAK5Bkva,EAASlxa,UAAUmxN,YAAc,SAAUrlL,EAAYnb,GACnD,IAAK,IAAI5tB,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAK0uB,GAAW5tB,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC/D,IAAIf,EAAMwF,EAAGzE,GACR4B,KAAKwpc,eAAensc,KACjB2uB,EAAS3uB,aAAgBiB,OACzB0B,KAAKwsN,YAAYrlL,EAAW9pC,GAAM2uB,EAAS3uB,IAG3C8pC,EAAW9pC,GAAO2uB,EAAS3uB,MAK3Ckva,EAASlxa,UAAU4tc,sBAAwB,SAAUlvC,EAAOjkX,EAAS2zZ,GACjE,IAAIzvC,EAAaD,EAAMC,WACnBC,EAAaF,EAAME,WACvBj6Z,KAAKwsN,YAAY12K,EAAU2zZ,EAASzvC,EAAaC,GACjDwvC,EAAS3zZ,EAAQ0xC,kBAAkBwyU,EAAYC,GAAcnkX,EAAQ0xC,kBAAkByyU,EAAYD,GACnGlkX,EAAQuT,eAAiBvT,EAAQuT,eAAiBC,GAAcijX,UAEpEA,EAASlxa,UAAUiuc,qBAAuB,SAAUvsc,EAAK+4C,GACrD,IAEI+J,EAFA1jD,EAAI,EAGR,GAAIY,EAAI80D,YAAc90D,EAAI80D,WAAWp1D,OAAS,EAC1C,IAAKN,EAAI,EAAGA,EAAIY,EAAI80D,WAAWp1D,OAAQN,IACnC0jD,EAAY9iD,EAAI80D,WAAW11D,GAC3B6D,KAAK0pc,eAAe7pZ,EAAW/J,IAI3Cy2X,EAASlxa,UAAUquc,eAAiB,SAAU7pZ,EAAW/J,GACrD,IAAIuiB,EAAOviB,EAAQwjB,UAAUzZ,EAAUv8C,IACvC+0D,EAAKvvB,SAAW+W,EAAU/W,SAC1BgN,EAAQmiX,eAAewI,eAAepoW,IAE1Ck0W,EAASlxa,UAAUwtc,sBAAwB,SAAU9rc,EAAK+4C,GACtD,IACIv1C,EACAs/C,EAFA1jD,EAAI,EAGR,GAAIY,EAAI+0D,OAAS/0D,EAAI+0D,MAAMr1D,OAAS,EAChC,IAAKN,EAAI,EAAGA,EAAIY,EAAI+0D,MAAMr1D,OAAQN,IAC9BoE,EAAOxD,EAAI+0D,MAAM31D,GACjB6D,KAAK2pc,gBAAgBppc,EAAMu1C,GAGnC,GAAI/4C,EAAI80D,YAAc90D,EAAI80D,WAAWp1D,OAAS,EAC1C,IAAKN,EAAI,EAAGA,EAAIY,EAAI80D,WAAWp1D,OAAQN,IACnC0jD,EAAY9iD,EAAI80D,WAAW11D,GAC3B6D,KAAK4pc,kBAAkB/pZ,EAAW/J,IAI9Cy2X,EAASlxa,UAAUsuc,gBAAkB,SAAU5sc,EAAK+4C,EAASikX,GACzD,IAAIx5Z,EAAOu1C,EAAQwjB,UAAUv8D,EAAIuG,IAOjC,GANIvG,EAAI0vZ,YAAclsZ,EAAKksZ,WACvB32W,EAAQ83X,WAAW7wa,EAAKA,EAAI0vZ,YAE3B1vZ,EAAI0vZ,WAAalsZ,EAAKksZ,WACvB32W,EAAQupY,cAActib,EAAIuG,IAE1B/C,EAAKksZ,UAAW,CAChB,IAAI7kE,EAAK7qV,EAAI0/B,OAAOjwB,KAAOjM,EAAKk8B,OAAOjwB,KACnCm7U,EAAK5qV,EAAI0/B,OAAO/vB,IAAMnM,EAAKk8B,OAAO/vB,IACtCopC,EAAQ46D,KAAKnwG,EAAMqnV,EAAID,OAEtB,CACGC,EAAK7qV,EAAI8O,QAAUtL,EAAKwR,QAAQlG,QAChC87U,EAAK5qV,EAAIkP,QAAU1L,EAAKwR,QAAQ9F,QACpC6pC,EAAQ46D,KAAKnwG,EAAMqnV,EAAID,GAEvB7xS,EAAQi3W,YACRj3W,EAAQi3W,WAAW6zB,YAAYrgb,EAAMu1C,IAG7Cy2X,EAASlxa,UAAUytc,kBAAoB,SAAU/rc,EAAK+4C,EAASikX,GAC3D,IACIl6W,EACAt/C,EAFApE,EAAI,EAGR,GAAIY,GAAOA,EAAI+0D,OAAS/0D,EAAI+0D,MAAMr1D,OAAS,EACvC,IAAKN,EAAI,EAAGA,EAAIY,EAAI+0D,MAAMr1D,OAAQN,IAE9B,IADAoE,EAAOxD,EAAI+0D,MAAM31D,IACRie,SAGL,IAAK,IADD03C,EAAQhc,EAAQmiX,eAAewE,kBAAkBl8Z,MAC5CinB,EAAM,EAAGA,EAAMsqC,EAAMr1D,OAAQ+qB,IAAO,CACzC,IAAIwkZ,EAAWjS,EAAMzB,WAAWxmW,EAAMtqC,GAAKlkB,IACtCitZ,GAAcyb,KAAc7kX,IAC7BnnD,KAAKu6b,YAAYvuB,EAAUl2X,EAASikX,GACpC/5Z,KAAK2pc,gBAAgB39B,EAAUl2X,EAASikX,IAGxC/5Z,KAAK4pc,kBAAkB59B,EAAUl2X,EAASikX,QAKlD/5Z,KAAKu6b,YAAYh6b,EAAMu1C,GACvB91C,KAAK2pc,gBAAgBppc,EAAMu1C,GAIvC,GAAI/4C,GAAOA,EAAI80D,YAAc90D,EAAI80D,WAAWp1D,OAAS,EAAG,CACpD,IAAIo1D,EAAa90D,EAAI80D,WACrB,IAAK11D,EAAI,EAAGA,EAAI01D,EAAWp1D,OAAQN,IAC/B0jD,EAAYgS,EAAW11D,GACvB6D,KAAK4pc,kBAAkB/pZ,EAAW/J,KAI9Cy2X,EAASlxa,UAAUk/b,YAAc,SAAUx9b,EAAK+4C,EAASikX,GACrD,IAAIx5Z,EAAOu1C,EAAQwjB,UAAUv8D,EAAIuG,IAC7Bumc,EAAa9sc,EAAIgV,QAAQ26B,WAAW12B,MAAQzV,EAAKwR,QAAQ26B,WAAW12B,MACpE8zb,EAAc/sc,EAAIgV,QAAQ26B,WAAW32B,OAASxV,EAAKwR,QAAQ26B,WAAW32B,OACtEgkZ,GAASA,EAAMzB,aACfyB,EAAMzB,WAAWv7Z,EAAIuG,IAAMypC,GAAYxsC,IAE3Cu1C,EAAQ2V,MAAMlrD,EAAMspc,EAAYC,GAC5B/8b,EAAGhQ,EAAIgV,QAAQlG,QAAUtL,EAAKwR,QAAQlG,QACtCmB,EAAGjQ,EAAIgV,QAAQ9F,QAAU1L,EAAKwR,QAAQ9F,WAG9Csga,EAASlxa,UAAU0tc,sBAAwB,SAAUhsc,EAAK+4C,EAASikX,GAC/D,IACIx5Z,EACAs/C,EAFA1jD,EAAI,EAGJ4tc,EAAcj0Z,EAAQwc,cAK1B,GAJAy3Y,EAAYl9Z,YAAc9vC,EAAI8vC,YAC1Bk9Z,GAAeA,EAAYh4b,UAC3Bg4b,EAAYh4b,QAAQ86B,YAAc9vC,EAAI8vC,aAEtC9vC,GAAOA,EAAI+0D,OAAS/0D,EAAI+0D,MAAMr1D,OAAS,EACvC,IAAKN,EAAI,EAAGA,EAAIY,EAAI+0D,MAAMr1D,OAAQN,IAC9BoE,EAAOxD,EAAI+0D,MAAM31D,GACjB6D,KAAKgqc,gBAAgBzpc,EAAMu1C,GAC3B91C,KAAK2pc,gBAAgBppc,EAAMu1C,GAGnC,GAAI/4C,GAAOA,EAAI80D,YAAc90D,EAAI80D,WAAWp1D,OAAS,EACjD,IAAKN,EAAI,EAAGA,EAAIY,EAAI80D,WAAWp1D,OAAQN,IACnC0jD,EAAY9iD,EAAI80D,WAAW11D,GAC3B6D,KAAK4pc,kBAAkB/pZ,EAAW/J,IAI9Cy2X,EAASlxa,UAAU2uc,gBAAkB,SAAUjtc,EAAK+4C,GAChD,IAAIv1C,EAAOu1C,EAAQwjB,UAAUv8D,EAAIuG,IACjCwyC,EAAQt1B,OAAOjgB,EAAMxD,EAAI8vC,YAActsC,EAAKssC,cAEhD0/X,EAASlxa,UAAU2tc,wBAA0B,SAAUjsc,EAAK+4C,GACxD,IAAI+J,EAAY9iD,EAAI80D,WAAW,GAC/B7xD,KAAK4pc,kBAAkB/pZ,EAAW/J,IAEtCy2X,EAASlxa,UAAUuuc,kBAAoB,SAAU7sc,EAAK+4C,EAASikX,GAC3D,IAAIl6W,EAAY/J,EAAQwjB,UAAUv8D,EAAIuG,IAElCvG,EAAIm8D,eAAiBrZ,EAAUqZ,eAC/BrZ,EAAUqZ,aAAen8D,EAAIm8D,aAC7BpjB,EAAQ8zX,wBAAwB/pX,MAAiBqZ,aAAcn8D,EAAIm8D,gBAEnEn8D,EAAIkuZ,eAAiBprW,EAAUorW,eAC/BprW,EAAUorW,aAAeluZ,EAAIkuZ,aAC7Bn1W,EAAQ8zX,wBAAwB/pX,MAAiBorW,aAAcluZ,EAAIkuZ,gBAEnEluZ,EAAIu6C,WAAauI,EAAUvI,WACN,KAAjBv6C,EAAIu6C,SAEJ0d,GADOlf,EAAQwjB,UAAUzZ,EAAUvI,UACnBo1W,SAAU3vZ,EAAIuG,IAGvBwyC,EAAQwjB,UAAUv8D,EAAIu6C,UACxBo1W,SAASloZ,KAAKzH,EAAIuG,IAE3Bu8C,EAAUvI,SAAWv6C,EAAIu6C,SACzBxB,EAAQ8zX,wBAAwB/pX,MAAiBvI,SAAUv6C,EAAIu6C,YAE/Dv6C,EAAIiuZ,WAAanrW,EAAUmrW,WACN,KAAjBjuZ,EAAIiuZ,SAEJh2V,GADOlf,EAAQwjB,UAAUzZ,EAAUmrW,UACnB2B,QAAS5vZ,EAAIuG,IAGtBwyC,EAAQwjB,UAAUv8D,EAAIiuZ,UACxB2B,QAAQnoZ,KAAKzH,EAAIuG,IAE1Bu8C,EAAUmrW,SAAWjuZ,EAAIiuZ,SACzBl1W,EAAQ8zX,wBAAwB/pX,MAAiBmrW,SAAUjuZ,EAAIiuZ,YAE/D+O,GAASA,EAAMzB,aACfyB,EAAMzB,WAAWv7Z,EAAIuG,IAAMypC,GAAY8S,IAE3C,IAAIi9V,EAAK//Y,EAAIg6C,YAAYhqC,EAAI8yC,EAAU9I,YAAYhqC,EAC/CgwY,EAAKhgZ,EAAIg6C,YAAY/pC,EAAI6yC,EAAU9I,YAAY/pC,EACxC,IAAP8vY,GAAmB,IAAPC,GACZjnW,EAAQw7X,cAAczxX,EAAWi9V,EAAIC,GAEzC,IAAIn1D,EAAK7qV,EAAIgiD,YAAYhyC,EAAI8yC,EAAUd,YAAYhyC,EAC/C46U,EAAK5qV,EAAIgiD,YAAY/xC,EAAI6yC,EAAUd,YAAY/xC,EACxC,IAAP46U,GAAmB,IAAPD,GACZ7xS,EAAQy7X,cAAc1xX,EAAW+nS,EAAID,GAEzC7xS,EAAQ+jX,iBACa,QAAjB/jX,EAAQ/X,MACR+X,EAAQi1X,uBAGhBwB,EAASlxa,UAAU8tc,wBAA0B,SAAUpvC,EAAOjkX,GAC1D,IAAI/4C,EAAMg9Z,EAAME,WAChB,GAAIF,GAASA,EAAMimB,WAAY,CAa3B,GAAmB,YAXfjmB,EAAMmvC,OACmB,WAArBnvC,EAAMimB,WACO,SAGA,SAIJjmB,EAAMimB,YAGnBlqY,EAAQvxC,OAAOxH,GACf+4C,EAAQ27X,yBAEP,CAED,GADA37X,EAAQ27X,qBACJ10a,EAAIw8D,SAAU,CACd,IAAI94D,EAAaq1C,EAAQwjB,UAAUv8D,EAAIw8D,UACnC94D,EACAq1C,EAAQ22X,SAAShsa,EAAY1D,GAG7B+4C,EAAQ1xC,IAAIrH,QAIhB+4C,EAAQ1xC,IAAIrH,GAEZA,EAAI0vZ,WAAa32W,EAAQwjB,UAAUv8D,EAAI0vZ,YACvC32W,EAAQ83X,WAAW7wa,EAAKA,EAAI0vZ,WAGf,QAAjB32W,EAAQ/X,MACR+X,EAAQi1X,wBAIpBwB,EAASlxa,UAAU+tc,6BAA+B,SAAUrvC,EAAOjkX,GAC/D,IAAIziC,EAAQ0mZ,EAAME,WACdl9Z,EAAMg9Z,EAAMC,WACZz5Z,EAAOu1C,EAAQwjB,UAAUv8D,EAAIuG,IACjC,GAAIy2Z,GAASA,EAAMimB,WAAY,CAQR,YANfjmB,EAAMmvC,OAC6B,WAArBnvC,EAAMimB,WAA2B,SAAW,SAG7CjmB,EAAMimB,aAGnBlqY,EAAQ0tY,aAAajjb,GAAO8S,IAC5ByiC,EAAQ27X,uBAGR37X,EAAQ27X,qBACR37X,EAAQosY,UAAU3hb,GAAO8S,KAER,QAAjByiC,EAAQ/X,MACR+X,EAAQi1X,wBAIpBwB,EAASlxa,UAAUguc,4BAA8B,SAAUtvC,EAAOjkX,GAC9D,IAAIwC,EAAOyhX,EAAME,WACbl9Z,EAAMg9Z,EAAMC,WACZz5Z,EAAOu1C,EAAQwjB,UAAUv8D,EAAIuG,IACjC,GAAIy2Z,GAASA,EAAMimB,WAAY,CAQR,YANfjmB,EAAMmvC,OAC6B,WAArBnvC,EAAMimB,WAA2B,SAAW,SAG7CjmB,EAAMimB,aAGnBlqY,EAAQ2tY,YAAYljb,GAAO+3C,IAC3BxC,EAAQ27X,uBAGR37X,EAAQ27X,qBACR37X,EAAQytY,SAAShjb,GAAO+3C,KAEP,QAAjBxC,EAAQ/X,MACR+X,EAAQi1X,wBAKpBwB,EAASlxa,UAAU8kb,KAAO,SAAUrqY,GAChC,IAAIikX,EAAQ/5Z,KAAKiqc,aAAan0Z,GAC1Bo0Z,EAAwB,EACxBnwC,IACuB,aAAnBA,EAAM3/N,UACa,eAAf2/N,EAAMrzZ,MACNwjc,IACAlqc,KAAK+nc,WAAY,GAGjB/nc,KAAKmqc,UAAUpwC,EAAOjkX,GAEtB91C,KAAK+nc,YACL/nc,KAAKoqc,gBAAgBrwC,EAAOjkX,EAASo0Z,GACrClqc,KAAK+nc,WAAY,IAIrBjyZ,EAAQ80X,YAAYuV,KAAKpmB,KAIrCwS,EAASlxa,UAAU+uc,gBAAkB,SAAUrwC,EAAOjkX,EAASo0Z,GAC3D,KAAiC,IAA1BA,GACHlqc,KAAKmqc,UAAUpwC,EAAOjkX,GAEH,cADnBikX,EAAQ/5Z,KAAKiqc,aAAan0Z,IAChBpvC,KACNwjc,IAEoB,eAAfnwC,EAAMrzZ,MACXwjc,IAGRA,EAAwB,GAE5B39B,EAASlxa,UAAU8uc,UAAY,SAAUZ,EAAczzZ,GACnD,IAAIkkX,EAKJ,GAJ0B,oBAAtBuvC,EAAa7ic,MAAoD,sBAAtB6ic,EAAa7ic,OACxDszZ,EAAcuvC,EAAuB,YAEzCzzZ,EAAQuT,gBAAkBC,GAAcijX,SACd,eAAtBg9B,EAAa7ic,MAA+C,aAAtB6ic,EAAa7ic,MAC/CovC,EAAQ80X,YAAYu9B,UAAU1rc,OAAS,EAAG,CAC1C,IAAImsc,EAAY9yZ,EAAQ80X,YAAYu9B,UAAU9/a,OAAO,EAAG,GACxDytB,EAAQ80X,YAAYs9B,UAAU7/a,OAAO,EAAG,EAAGugb,EAAU,IAI7D,OADA9yZ,EAAQma,uBAAsB,GACtBs5Y,EAAa7ic,MACjB,IAAK,kBACL,IAAK,QACL,IAAK,aACD1G,KAAK6oc,sBAAsB7uC,EAAYlkX,GACvC,MACJ,IAAK,cACL,IAAK,SACD91C,KAAK8oc,kBAAkB9uC,EAAYlkX,EAASyzZ,GAC5C,MACJ,IAAK,kBACDvpc,KAAK+oc,sBAAsB/uC,EAAYlkX,EAASyzZ,GAChD,MACJ,IAAK,oBACDvpc,KAAKgpc,wBAAwBhvC,EAAYlkX,GACzC,MACJ,IAAK,kBACD91C,KAAKipc,sBAAsBM,EAAczzZ,GAAS,GAClD,MACJ,IAAK,oBACD91C,KAAKmpc,wBAAwBI,EAAczzZ,GAC3C,MACJ,IAAK,yBACD91C,KAAKopc,6BAA6BG,EAAczzZ,GAChD,MACJ,IAAK,wBACD91C,KAAKqpc,4BAA4BE,EAAczzZ,GAC/C,MACJ,IAAK,QACD91C,KAAK+yF,MAAMw2W,EAAczzZ,GACzB,MACJ,IAAK,UACD91C,KAAKssa,QAAQi9B,EAAczzZ,GAC3B,MACJ,IAAK,iBACD91C,KAAKspc,qBAAqBtvC,EAAYlkX,GAG9CA,EAAQma,uBAAsB,GAC9Bna,EAAQuT,iBAAmBC,GAAcijX,SACzCz2X,EAAQiqY,qBAAqBwpB,IAEjCh9B,EAASlxa,UAAUitc,aAAe,SAAUxyZ,GACxC,IACI86X,EADA43B,EAAY,KAEZ6B,EAAQv0Z,EAAQ80X,YAepB,OAdIy/B,EAAMvW,UACN0U,EAAY6B,EAAMrC,cAClBp3B,EAAgBy5B,EAAMrC,aAAaz9T,WAE/B8/T,EAAMrC,aAAep3B,EAChBy5B,EAAMtW,UACPsW,EAAMtW,SAAU,KAIpBsW,EAAMtW,SAAU,EAChBsW,EAAMvW,SAAU,IAGjB0U,GAEXj8B,EAASlxa,UAAU4uc,aAAe,SAAUn0Z,GACxC,IACIw0Z,EADAH,EAAY,KAEZE,EAAQv0Z,EAAQ80X,YAoBpB,OAnBIy/B,EAAMtW,WAKFuW,EAJCD,EAAMrC,aAAaz9T,UAAa8/T,EAAMvW,QAIxBuW,EAAMrC,aAAa1/Z,KAHnB+ha,EAAMrC,gBAMrBqC,EAAMrC,aAAesC,EAChBD,EAAMvW,UACPuW,EAAMvW,SAAU,GAEfwW,EAAahia,OACd+ha,EAAMtW,SAAU,EAChBsW,EAAMvW,SAAU,IAGxBqW,EAAYE,EAAMrC,cAEfmC,GAOX59B,EAASlxa,UAAUiX,QAAU,aAQ7Bi6Z,EAASlxa,UAAUkkC,cAAgB,WAI/B,MAAO,YAEJgtY,KC7oBPg+B,GAAiC,WACjC,SAASA,IACLvqc,KAAKg4Z,eAAgB,EA0FzB,OArFAuyC,EAAgBlvc,UAAU4zJ,OAAS,SAAUt4G,EAAW8X,EAASluD,EAAMu1C,GACnE,IAAI/1C,EAAQC,KACRwqc,KAEAjnb,EAAI,EAKR,GAJAinb,EAFQ,GAEepoc,YAAY,WAE/B,OADAmhB,IACOxjB,EAAM0qc,gBAAgBh8Y,EAAS+7Y,EAAyB,IAANjnb,EAASuyB,IACnE,IACCv1C,EAAK04S,WAAY,CACjB,IAAI7S,EAAY,GAEhBpmS,KAAKg4Z,cAAgBliX,EAAe,oBACpCA,EAAQma,uBAAsB,GAE9B,IAAIy6Y,KAEJ1qc,KAAK2qc,cAAcpqc,EAAM6lS,EAAWtwP,GACpC40Z,EAFQ,GAGkBtoc,YAAY,WAClCgkS,GAAa,EAAIrmS,EAAM4qc,cAAcpqc,EAAM6lS,EAAWtwP,GAAWxzC,cAAcooc,EAAqB,IACpGtkK,GAAa,IACd,MAOXmkK,EAAgBlvc,UAAUovc,gBAAkB,SAAUv9V,EAAU09V,EAAalsb,EAAMo3B,GAC/E,IAAKp3B,EACD,IAAK,IAAIyH,EAAI,EAAGA,EAAI+mF,EAASz+C,QAAQhyD,OAAQ0pB,IAAK,CAC9C,IAAI5lB,EAAOu1C,EAAQwjB,UAAU4zC,EAASz+C,QAAQtoC,GAAG7iB,IACjD/C,EAAKsL,SAAWqhG,EAASz+C,QAAQtoC,GAAG0kb,YAAc,EAClDtqc,EAAK0L,SAAWihG,EAASz+C,QAAQtoC,GAAG2kb,YAAc,EAGtDpsb,IACApc,cAAcsoc,EAAY,IAC1B90Z,EAAQma,sBAAsBjwD,KAAKg4Z,eACnCliX,EAAQ0zG,aAAas3P,GAAa3wU,uBAAmBh1E,GACrD6E,KAAKg4Z,eAAgB,EACrBliX,EAAQ+9X,0BAA0BC,aAAc,EAChDh+X,EAAQ+a,OAAO8iX,UAAY,GAC3B79X,EAAQma,sBAAsBjwD,KAAKg4Z,iBAM3CuyC,EAAgBlvc,UAAUsvc,cAAgB,SAAUpuc,EAAQS,EAAO84C,GAC/D,IAAK,IAAI35C,EAAI,EAAGA,EAAII,EAAOmwZ,SAASjwZ,OAAQN,IAAK,CAC7C,IAAI0jD,EAAY/J,EAAQwjB,UAAU/8D,EAAOmwZ,SAASvwZ,IAC9CgL,EAAS2uC,EAAQwjB,UAAUzZ,EAAUmrW,UACzCnrW,EAAUn7C,MAAM+I,QAAUzQ,EAC1B84C,EAAQ+zX,oBAAoBtta,GAC5B,IAAK,IAAIgnB,EAAI,EAAGA,EAAIs8B,EAAU9tC,QAAQqI,SAAS3d,OAAQ8mB,IACnDs8B,EAAU9tC,QAAQqI,SAASmJ,GAAG7e,MAAM+I,QAAUzQ,EAC9CmK,EAAOzC,MAAM+I,QAAUzQ,EACnBmK,EAAO4K,mBAAmBqlD,IAC1BthB,EAAQ42Y,mBAAmBvlb,EAAO4K,aAAS5W,EAAW6B,GAG9DgD,KAAK2qc,cAAcxjc,EAAQnK,EAAO84C,KAQ1Cy0Z,EAAgBlvc,UAAUiX,QAAU,aAQpCi4b,EAAgBlvc,UAAUkkC,cAAgB,WAItC,MAAO,iBAEJgra,KC1FPQ,GAAkC,WAKlC,SAASA,IAKL/qc,KAAK8za,aAAc,EA2lDvB,OAnlDAi3B,EAAiB1vc,UAAUiX,QAAU,aAQrCy4b,EAAiB1vc,UAAUkkC,cAAgB,WAIvC,MAAO,uBAEXwra,EAAiB1vc,UAAUonb,aAAe,SAAU3wX,EAAOwH,EAAW0xY,EAAYC,EAAUpkK,GACxF,IAAIh2O,GACAnqD,KAAMskc,EAAWtkc,KACjB4yD,UAAWA,EAAW4xY,QAAS,EAAGC,QAAS,EAC3CC,mBAAqBC,WAAY,KAAMjsX,UAAYksX,SAAU,EAAGC,cAChEnya,YAAa4xa,EAAW5xa,YACxBoya,kBAAmBR,EAAWQ,kBAAmBC,gBAAiBT,EAAWS,gBAC7E/3Y,kBAAmBs3Y,EAAWt3Y,kBAAmBD,oBAAqBu3Y,EAAWv3Y,oBACjFkgX,UAAWq3B,EAAWr3B,UAAW/iX,cAAevjB,GAAY29Z,EAAWp6Y,eAAgBn0B,OAAQuua,EAAWvua,OAC1G/F,OAAQs0a,EAAWt0a,OAAQ+3B,WAAausI,KAAMgwQ,EAAWhwQ,MAG7D,OADAh7L,KAAKo/O,SAASvuL,EAAQiB,EAAOm5Y,EAAUpkK,GAChCh2O,GAEXk6Y,EAAiB1vc,UAAU+jP,SAAW,SAAUvuL,EAAQiB,EAAOm5Y,EAAUpkK,GACrE,IAAItmS,EACApE,EAGAk1b,KAIJ,IAHIxgY,EAAOyI,UAAUzI,EAAOmqI,OACxBnqI,EAAOu6Y,gBAAgB5mc,KAAKqsD,EAAOyI,UAAUzI,EAAOmqI,OAEnD7+L,EAAI,EAAGA,EAAI21D,EAAMr1D,OAAQN,KAC1BoE,EAAOuxD,EAAM31D,IACHogb,qBACO1rX,EAAO06Y,WAAWhrc,EAAK+C,IAAMtD,KAAK0rc,gBAAgB76Y,EAAQtwD,IAC5Dorc,KAAKC,YAAa,EACxB/6Y,EAAOyI,UAAUzI,EAAOmqI,OACpBz6L,EAAKosZ,SAAYpsZ,EAAKosZ,QAAQlwZ,SAC/B40b,EAAU7sb,KAAKjE,GACXA,EAAK/D,MAAQ0sB,OAAO3oB,EAAK/D,KAAKqqS,MAAeh2O,EAAOmqI,MACpDnqI,EAAOu6Y,gBAAgB5mc,KAAKjE,KAUhD,IAJsC,IAAlCswD,EAAOu6Y,gBAAgB3uc,SACvBo0D,EAAOu6Y,gBAAkB/Z,GAGxBl1b,EAAI,EAAGA,EAAI00D,EAAOu6Y,gBAAgB3uc,OAAQN,IAC3CoE,EAAOswD,EAAOu6Y,gBAAgBjvc,GAC9B6D,KAAKygb,YAAY5vX,EAAQtwD,EAAM,GAEnC,GAAIswD,EAAOu6Y,gBAAgB3uc,OAAS,EAAG,CACnCo0D,EAAOshQ,SAAWthQ,EAAOu6Y,gBAAgB,GACzC,IAAIr+b,EAAI,EACJC,EAAI,EACJmiC,OAAO,EACPG,OAAO,EACPD,OAAO,EACPD,OAAO,EAEP1Y,OAAS,EACb,IAAKv6B,EAAI,EAAGA,EAAI00D,EAAOu6Y,gBAAgB3uc,OAAQN,IAAK,CAChDu6B,EAAS12B,KAAK6rc,WAAWh7Y,EAAQ9jD,EAAGC,EAAG6jD,EAAOu6Y,gBAAgBjvc,GAAI,EAAG00D,EAAOu6Y,gBAAgBjvc,EAAI,IAChG,IAAI2vc,EAAWj7Y,EAAO06Y,WAAW16Y,EAAOu6Y,gBAAgBjvc,GAAGmH,IAC3DozB,EAAO1pB,EAAIX,KAAK0T,IAAI2W,EAAO1pB,EAAG8+b,EAAS9+b,GACvC0pB,EAAO3pB,EAAIV,KAAK0T,IAAI2W,EAAO3pB,EAAG++b,EAAS/+b,IACK,IAAxC8jD,EAAOz3B,YAAY76B,QAAQ,QAC3ByO,EAAI0pB,EAAOjqB,MAAQokD,EAAO26Y,kBAG1Bz+b,EAAI2pB,EAAOjqB,MAAQokD,EAAO26Y,kBAEpB,IAANrvc,GACAgzC,EAAOzY,EAAO3pB,EACdqiC,EAAO1Y,EAAO1pB,EACdqiC,EAAO3Y,EAAOjqB,MACd6iC,EAAO5Y,EAAO/pB,SAGdwiC,EAAO9iC,KAAK0T,IAAIovB,EAAMzY,EAAO3pB,GAC7BqiC,EAAO/iC,KAAK0T,IAAIqvB,EAAM1Y,EAAO1pB,GAC7BqiC,EAAOhjC,KAAKC,IAAI+iC,EAAM3Y,EAAOjqB,OAC7B6iC,EAAOjjC,KAAKC,IAAIgjC,EAAM5Y,EAAO/pB,SAIrC,IADA3M,KAAK+rc,aAAal7Y,GAAU9jD,EAAGoiC,EAAMniC,EAAGoiC,EAAM3iC,MAAO4iC,EAAM1iC,OAAQ2iC,GAAQ27Z,GACtE9uc,EAAI,EAAGA,EAAI00D,EAAOu6Y,gBAAgB3uc,OAAQN,IAC3C6D,KAAKgsc,YAAYn7Y,EAAQA,EAAOu6Y,gBAAgBjvc,GAAI,GAExD,IAAKA,EAAI,EAAGA,EAAI00D,EAAOu6Y,gBAAgB3uc,OAAQN,IAC3C6D,KAAKisc,iBAAiBp7Y,EAAQA,EAAOu6Y,gBAAgBjvc,GAAI,KAIrE4uc,EAAiB1vc,UAAUoxC,UAAY,SAAUlsC,GAC7C,IAAIwM,EAAIxM,EAAKsL,QAAUtL,EAAKmsC,WAAW12B,MAAQzV,EAAKosC,MAAM5/B,EACtDC,EAAIzM,EAAK0L,QAAU1L,EAAKmsC,WAAW32B,OAASxV,EAAKosC,MAAM3/B,EAC3D,OAAO,IAAIkpB,GAAKnpB,EAAGC,EAAGzM,EAAKmsC,WAAW12B,MAAOzV,EAAKmsC,WAAW32B,SAEjEg1b,EAAiB1vc,UAAUwwc,WAAa,SAAUh7Y,EAAQ9jD,EAAGC,EAAG2gB,EAAOwkI,EAAOtwH,EAAMqqa,GAChF,IAAIC,EAEAC,EACArvc,EACAq4L,EAHAzuK,KAWJ,GAPAwlb,EAAansc,KAAKqsc,cAAcx7Y,EAAQljC,EAAO5gB,EAAGC,EAAGmlJ,GACrDxrI,EAAOkqC,EAAO06Y,WAAW59a,EAAMrqB,IAC/ButD,EAEOy6Y,SAAWj/b,KAAKC,IAAIukD,EAAOy6Y,SAAUn5S,GAC5Ci6S,EAAMj6S,GACNijC,EAAWp1L,KAAKo1L,SAASvkI,EAAQljC,KACfhH,EAAKglb,KAAKW,WAAW7vc,OAKlC,CACD,IAAI8vc,OAAa,EAEbC,OAAc,EACdj+a,OAAI,EACJk+a,OAAa,EACb5ua,OAAQ,EACRlxB,OAAS,EACbA,EAASw/b,EAAWn/b,EAAIm/b,EAAWp2b,OAAS86C,EAAO46Y,gBAC/C9kb,EAAKglb,KAAKW,WAAW7vc,SAGrB2vc,GADArvc,EAAMiD,KAAK0sc,0BAA0B77Y,EAAQljC,EAAOhhB,EAAQw/b,EAAWp2b,OAAQo8I,EAAOthG,EAAO46Y,kBACnFt5S,MACVxlJ,EAAS5P,EAAI4P,QAEZga,EAAKglb,KAAKW,WAAW7vc,QAAoC,eAA1BkqB,EAAKglb,KAAKvya,cAC1CzsB,EAASw/b,EAAWn/b,EAAIm/b,EAAWp2b,OAAS86C,EAAO46Y,gBAAkB,GAErE9kb,EAAKglb,KAAKvxb,SAAS3d,SAKf8vc,EAJ0B,eAA1B5lb,EAAKglb,KAAKvya,aAAoD,aAAnBzS,EAAKglb,KAAKjlc,MAAqD,IAA9BigB,EAAKglb,KAAKvxb,SAAS3d,OAGvE,aAAnBkqB,EAAKglb,KAAKjlc,KACF1G,KAAK2sc,qCAAqC97Y,EAAQljC,EAAOkU,EAAMsqa,EAAWp/b,EAAGJ,EAAQy/b,GAGrFpsc,KAAK4sc,mBAAmB/7Y,EAAQljC,EAAOw+a,EAAWp/b,EAAGJ,EAAQy/b,EAAKF,GANlElsc,KAAK6sc,qBAAqBh8Y,EAAQljC,EAAOkU,EAAMsqa,EAAWp/b,EAAGJ,EAAQy/b,IASpFzlb,EAAK3Z,GAAK2Z,EAAK3Z,EAAIm/b,EAAWn/b,IAChC2Z,EAAK3Z,EAAIm/b,EAAWn/b,GAElBD,GAAKA,EAAI4Z,EAAK4wC,MAChBxqD,EAAI4Z,EAAK4wC,KAET5wC,EAAKglb,KAAKW,WAAW7vc,SAErBohC,OAAc1iC,IAAN4R,EAAkBA,EAAIo/b,EAAWp/b,EACzC0/b,EAAazsc,KAAK8sc,6BAA6Bj8Y,EAAQljC,EAAOw+a,EAAYtua,EAAOlxB,EAAQwlJ,GACpFijC,IAEDroL,IADAy/b,EAAcD,EAAaE,GACV1/b,EAAIy/b,EAAY//b,OAAS,EAAI0/b,EAAWn2b,MAAQ,EACjEu2b,EAAaC,GAEjBj+a,EAAIk+a,EAAaA,EAAWM,eAAY5xc,GAE5CwrB,EAAK5Z,EAAIA,EACJ4Z,EAAKgoE,YACNhoE,EAAKqmb,UAAYT,EAAW9/b,MAAQ8/b,EAAWx/b,GAKnD,IAAIkgc,GACAp8Y,OAAQA,EAAQljC,MAAOA,EAAOu/a,aAHdngc,EAAGA,EAAGC,EAAGm/b,EAAWn/b,EAAGP,MAAOM,EAAIo/b,EAAWn2b,MAAOrJ,OAAQw/b,EAAWn/b,EAAIm/b,EAAWp2b,QAG9Cw2b,WAAYA,EACpEY,IAAKhB,EAAYh6S,MAAOA,GAO5B,OALAnyJ,KAAKotc,iBAAiBH,EAAe1+a,OAAYpzB,IAAT0mC,EAAoBqqa,GACxDvlb,EAAK/J,YAAyC,iBAApB+J,EAAK/J,aAC/B+J,EAAK/J,WAAW7P,GAAK4Z,EAAK0mb,oBAE9B1/a,EAAM4+a,WAAaA,EACZA,EAhEP,OADA5+a,EAAM4+a,WAAavsc,KAAKstc,eAAez8Y,EAAQljC,EAAOkU,EAAMsqa,EAAYh6S,EAAO+5S,GACxEv+a,EAAM4+a,YAmErBxB,EAAiB1vc,UAAUiyc,eAAiB,SAAUz8Y,EAAQljC,EAAOkU,EAAMsqa,EAAYh6S,EAAO+5S,GAC1F,IAAIx1a,EACA/P,EAAOkqC,EAAO06Y,WAAW59a,EAAMrqB,IACnCqjB,EAAK5Z,EAAIo/b,EAAWp/b,EACd4Z,EAAK3Z,GAAK2Z,EAAK3Z,EAAIm/b,EAAWn/b,IAChC2Z,EAAK3Z,EAAIm/b,EAAWn/b,EACpB2Z,EAAK2kb,SAAWj/b,KAAKC,IAAI6lJ,EAAOxrI,EAAK2kb,UAAY,IAErD50a,GAAW3pB,EAAGo/b,EAAWp/b,EAAGC,EAAGm/b,EAAWn/b,EAAGP,MAAO0/b,EAAWp/b,EAAIo/b,EAAWn2b,MAAOrJ,OAAQw/b,EAAWn/b,EAAIm/b,EAAWp2b,QACvH4Q,EAAK2kb,SAAWj/b,KAAKC,IAAIqa,EAAK2kb,UAAY,EAAGn5S,GAC7C,IAAI86S,GACAp8Y,OAAQA,EAAQljC,MAAOA,EAAOu/a,YAAax2a,EAAQ61a,WAAY71a,EAC/Dy2a,IAAKhB,EAAYh6S,MAAOA,GAG5B,OADAnyJ,KAAKotc,iBAAiBH,OAAe9xc,OAAoBA,IAAT0mC,EAAoBqqa,IAC3Dn/b,EAAG4Z,EAAK5Z,EAAGC,EAAG2Z,EAAK3Z,EAAGP,MAAOka,EAAK5Z,EAAIo/b,EAAWn2b,MAAOrJ,OAAQga,EAAK3Z,EAAIm/b,EAAWp2b,SAEjGg1b,EAAiB1vc,UAAUqwc,gBAAkB,SAAU76Y,EAAQhzC,GAC3D,IAAI8I,KAYJ,OAXAA,EAAK0mb,mBAAqB,EACN,wBAAhBx8Y,EAAOnqD,KACPigB,EAAKglb,MAASvya,YAAa,WAAY1yB,KAAM,YAAaiF,OAAQ,GAAI4hc,eAAe,GAGrF5mb,EAAKglb,MAASvya,YAAa,aAAc1yB,KAAM,SAAU6mc,eAAe,GAE5E5mb,EAAKglb,KAAKvxb,YACVuM,EAAKglb,KAAKW,cACV3lb,EAAKglb,KAAKx5S,MAAQ,EAClBxrI,EAAKgoE,WAAY,EACVhoE,GAEXokb,EAAiB1vc,UAAU+xc,iBAAmB,SAAUH,EAAeO,EAAS7+W,EAAWu9W,GACvF,IAAIr7Y,EAASo8Y,EAAcp8Y,OACvBljC,EAAQs/a,EAAct/a,MACtBu/a,EAAcD,EAAcC,YAC5BX,EAAaU,EAAcV,WAC3Bp6S,EAAQ86S,EAAc96S,MACtBg7S,EAAMF,EAAcE,IACpBxmb,EAAOkqC,EAAO06Y,WAAW59a,EAAMrqB,IAC/BsZ,EAAai0C,EAAOyI,UAAU3yC,EAAK/J,WAAa+J,EAAK/J,WAAWvc,MAAQsmB,EAAKglb,KAAKvxb,SAAS,IAC3Fqzb,EAAiB7wb,EAAai0C,EAAO06Y,WAAW3ub,EAAWtZ,IAAM,KACjE8xL,EAAWp1L,KAAKo1L,SAASvkI,EAAQljC,GACjCs0B,EAAYjiD,KAAK0tc,uBAAuB78Y,EAAQq8Y,EAAa/6S,EAAOxrI,EAAKgnb,aACzEC,EAAgB5tc,KAAK0tc,uBAAuB78Y,EAAQ07Y,EAAYp6S,EAAOxrI,EAAKgnb,aAC5EnB,KAEAvqZ,EAAUxlD,QAAUkqB,EAAKgoE,WACzBhoE,EAAKs7B,UAAYA,EACjBjiD,KAAK6tc,yBAAyBh9Y,EAAQljC,EAAOu/a,GAC7Cvmb,EAAKomb,UAAYpmb,EAAK82D,UACNtiF,IAAZqyc,IACA7mb,EAAKomb,UAAY1gc,KAAK0T,IAAIytb,EAAS7mb,EAAKomb,YAExCnwb,QAA2CzhB,IAA7Bsyc,EAAeV,YACzBU,EAAeV,WAAapmb,EAAKomb,YACjCpmb,EAAKmnb,YAAa,GAEtBnnb,EAAKomb,UAAY1gc,KAAK0T,IAAI4G,EAAKomb,UAAWU,EAAeV,YAEzDp+W,IACAhoE,EAAK5Z,GAAK4Z,EAAKomb,UACfpmb,EAAK0mb,oBAAsB1mb,EAAKomb,UAC5B33Q,IACAp1L,KAAK+tc,kBAAkBl9Y,EAAQ+8Y,EAAejnb,EAAKomb,WACnDR,EAAWx/b,EAAIV,KAAK0T,IAAIwsb,EAAWx/b,EAAG4Z,EAAK5Z,GAC3Cw/b,EAAW9/b,MAAQJ,KAAKC,IAAIigc,EAAW9/b,MAAOka,EAAK5Z,EAAIogc,EAAIn3b,OAC3Du2b,EAAW5/b,OAASN,KAAKC,IAAIigc,EAAW5/b,OAAQga,EAAK3Z,EAAImgc,EAAIp3b,QAC7Dw2b,EAAWx/b,GAAK4Z,EAAKomb,UACrBR,EAAW9/b,OAASka,EAAKomb,WAEzBnwb,GAAc6wb,EAAeV,UAAYpmb,EAAKomb,UAC9Cpmb,EAAKomb,UAAYU,EAAeV,UAAYpmb,EAAKomb,UAE5Cnwb,QAAiCzhB,IAAnBwrB,EAAKomb,YACxBpmb,EAAKomb,UAAY,MAKrB33Q,IACAm3Q,EAAWx/b,EAAIV,KAAK0T,IAAIwsb,EAAWx/b,EAAGmgc,EAAYngc,GAClDw/b,EAAW9/b,MAAQJ,KAAKC,IAAIigc,EAAW9/b,MAAOygc,EAAYngc,EAAIogc,EAAIn3b,OAClEu2b,EAAW5/b,OAASN,KAAKC,IAAIigc,EAAW5/b,OAAQga,EAAK3Z,EAAImgc,EAAIp3b,SAE5D4Q,EAAKgoE,YACNhoE,EAAKomb,UAAY,EACjBpmb,EAAK0mb,mBAAqB,IAG7BnB,IACDgB,GAAgBngc,EAAG4Z,EAAK5Z,EAAGC,EAAGmgc,EAAIngc,EAAGP,MAAOka,EAAK5Z,EAAIogc,EAAIn3b,MAAOrJ,OAAQwgc,EAAIngc,EAAImgc,EAAIp3b,QACpFy2b,EAAYhoc,MAAOwpc,QAASd,IAC5Bltc,KAAKiuc,iBAAiBp9Y,EAAQljC,EAAO6+a,EAAar6S,KAG1D44S,EAAiB1vc,UAAU4yc,iBAAmB,SAAUp9Y,EAAQljC,EAAO6+a,EAAar6S,EAAOlwG,GACvF,IAAIisZ,EACAj8b,EAEA9V,EAEAk9D,EACA80Y,EACAxhc,EALAyhc,GAAa,EAEbznb,KAWJ,GAPIgH,IAEAs0B,GADAt7B,EAAOkqC,EAAO06Y,WAAW59a,EAAMrqB,KACd2+C,UACjBmsZ,GAAcznb,EAAKglb,KAAKvxb,SAAS3d,SAAWkqB,EAAKglb,KAAKW,WAAW7vc,QAErE48D,EAAamzY,EAAY,GAAGwB,QAC5BG,EAAY3B,EAAYA,EAAY/vc,OAAS,GAAGuxc,QAC5C/rZ,GAAaA,EAAUxlD,OAAQ,CAkB/B,IAhBAkQ,GADAuhc,EAAOr9Y,EAAOuuB,OAAOn9B,EAAU,IAAI+rZ,SACrBrhc,OACVuhc,EAAKlhc,EAAIqsD,EAAWrsD,IACpBkhc,EAAKvhc,OAAS0sD,EAAWrsD,EACzBw/b,EAAYnkb,OAAO,EAAG,GAAK2lb,QAASE,KAEpCvhc,EAASwhc,EAAUxhc,OACnB6/b,EAAYhoc,MAAOwpc,SAAWjhc,EAAGmhc,EAAKnhc,EAAGN,MAAOyhc,EAAKzhc,MAAOO,EAAGqsD,EAAW1sD,OAAQA,OAAQA,MAG1Fuhc,EAAOr9Y,EAAOuuB,OAAOn9B,EAAUA,EAAUxlD,OAAS,IAAIuxc,QAClDI,GAAcF,EAAKvhc,OAASwhc,EAAUxhc,SACtCuhc,EAAKlhc,EAAImhc,EAAUxhc,OACnB6/b,EAAYhoc,MAAOwpc,QAASE,MAGpCj8b,EAAQgwC,EAAU,GACb9lD,EAAIqwc,EAAY/vc,OAAS,EAAGN,GAAK,EAAGA,IACrC00D,EAAOuuB,OAAO/2D,OAAOpW,EAAO,EAAGu6b,EAAYrwc,IAE/C8V,GAASu6b,EAAY/vc,OACrBo0D,EAAOuuB,OAAO/2D,OAAOpW,EAAOgwC,EAAUxlD,aAItC,IADAwV,EAAQjS,KAAKquc,UAAUx9Y,EAAQ27Y,EAAYA,EAAY/vc,OAAS,GAAGuxc,QAAS77S,GACvEh2J,EAAIqwc,EAAY/vc,OAAS,EAAGN,GAAK,EAAGA,IACrC00D,EAAOuuB,OAAO/2D,OAAOpW,EAAO,EAAGu6b,EAAYrwc,KAIvD4uc,EAAiB1vc,UAAU0yc,kBAAoB,SAAUl9Y,EAAQ5O,EAAWw7B,GACxE,IAAIthF,EAEJ,GAAa,IAATshF,EACA,IAAKthF,EAAI,EAAGA,EAAI8lD,EAAUxlD,OAAQN,IAC1B00D,EAAOuuB,OAAOn9B,EAAU9lD,IAAI6xc,UAC5Bn9Y,EAAOuuB,OAAOn9B,EAAU9lD,IAAI6xc,QAAQjhc,GAAK0wE,EACzC5sB,EAAOuuB,OAAOn9B,EAAU9lD,IAAI6xc,QAAQvhc,OAASgxE,IAK7DstX,EAAiB1vc,UAAUqxc,0BAA4B,SAAU77Y,EAAQljC,EAAOhhB,EAAQoJ,EAAQq2b,EAAKkC,GACjG,IAEIC,EACApyc,EACAqyc,EACAlic,EALAqa,EAAOkqC,EAAO06Y,WAAW59a,EAAMrqB,IAC/Bmrc,KAOJ,IAFAnic,EAAMK,EAEDxQ,EAAI,EAAGA,EAAIwqB,EAAKglb,KAAKW,WAAW7vc,OAAQN,KACzCsyc,EAAO59Y,EAAO06Y,WAAW5kb,EAAKglb,KAAKW,WAAWnwc,OAE1Csyc,EAAK9C,KAAKvxb,SAAWq0b,EAAK9C,KAAKW,cAC/BmC,EAAKzhc,EAAIL,EAET4hc,GADAC,EAAc39Y,EAAOyI,UAAU3yC,EAAKglb,KAAKW,WAAWnwc,KAC3BuwC,WAAW32B,QACQ,IAAxC86C,EAAOz3B,YAAY76B,QAAQ,UAC3Bgwc,EAAaC,EAAY9ha,WAAW12B,OAExC1J,EAAMK,EAAS4hc,EAAaD,EAAS,EACrCz9Y,EAAOy6Y,SAAWc,EAAM,EACpBjwc,EAAI,GAAM,GAAKA,IAAMwqB,EAAKglb,KAAKW,WAAW7vc,OAAS,IACnDkQ,EAASL,EACT8/b,MAIZ,OAASj6S,MAAOthG,EAAOy6Y,SAAU3+b,OAAQA,EAAS4hc,EAAaD,IAEnEvD,EAAiB1vc,UAAUyxc,6BAA+B,SAAUj8Y,EAAQljC,EAAOw/a,EAAKtva,EAAOlxB,EAAQwlJ,GACnG,IACIu8S,EAEAh4a,EACA83a,EACAryc,EAIAqQ,EACAixE,EACAx7B,EACAuqZ,EAZAiC,KAMA9nb,EAAOkqC,EAAO06Y,WAAW59a,EAAMrqB,IAE/B8oc,EAAMj6S,EAKV,IAAKh2J,EAAI,EAAGA,EAAIwqB,EAAKglb,KAAKW,WAAW7vc,OAAQN,KACzCsyc,EAAO59Y,EAAO06Y,WAAW5kb,EAAKglb,KAAKW,WAAWnwc,OAM1Cuyc,GADAF,EAAc39Y,EAAOyI,UAAU3yC,EAAKglb,KAAKW,WAAWnwc,KAC5BuwC,WAAW12B,OACS,IAAxC66C,EAAOz3B,YAAY76B,QAAQ,UAC3Bmwc,EAAYF,EAAY9ha,WAAW32B,QAGnCvJ,EADArQ,EAAI,GAAM,EACH0hC,EAAQsva,EAAIn3b,MAAQ,EAAI,GAAK04b,EAG7B7wa,EAAQsva,EAAIn3b,MAAQ,EAAI,GAGnC0gB,EAAS12B,KAAK6rc,WAAWh7Y,EAAQrkD,EAAMiic,EAAKzhc,EAAG6jD,EAAOyI,UAAU3yC,EAAKglb,KAAKW,WAAWnwc,IAAKiwc,EAAM,GAC3Fpsc,KAAKo1L,SAASvkI,EAAQljC,KACb,IAANxxB,EACAqwc,EAAc91a,EAGd12B,KAAK2uc,WAAWnC,EAAa91a,IAGjCv6B,EAAI,GAAM,GAAKsyc,EAAK5G,aAEhBpqX,OADStiF,IAATsiF,EACOgxX,EAAK1B,UAGL1gc,KAAK0T,IAAI09D,EAAMgxX,EAAK1B,YAG/B5wc,EAAI,GAAM,GAAKA,IAAMwqB,EAAKglb,KAAKW,WAAW7vc,OAAS,IACnDwlD,EAAYjiD,KAAK0tc,uBAAuB78Y,EAAQn6B,EAAQ01a,EAAM,GAE9Dpsc,KAAKiuc,iBAAiBp9Y,EAAQ,OAASm9Y,QAASt3a,IAAW01a,EAAM,EAAGnqZ,GACpEmqZ,MAOZ,OAHII,IACAA,EAAYO,UAAYtvX,GAErB+uX,GAEXzB,EAAiB1vc,UAAUgxc,cAAgB,SAAUx7Y,EAAQljC,EAAO5gB,EAAGC,EAAGmlJ,GACtE,IAAIn8I,EACJA,EAAQ2X,EAAM+e,WAAW12B,MACzB,IAAID,EAEJ,GADAA,EAAS4X,EAAM+e,WAAW32B,QACkB,IAAxC86C,EAAOz3B,YAAY76B,QAAQ,QAAgB,CAC3C,IAAK4zJ,EAAO,CACR,IAAIpkI,OAAO,EACXA,EAAOhhB,EACPA,EAAIC,EACJA,EAAI+gB,EAERhY,EAAS4X,EAAM+e,WAAW12B,MAC1BA,EAAQ2X,EAAM+e,WAAW32B,OAE7B,OAAShJ,EAAGA,EAAGC,EAAGA,EAAGgJ,MAAOA,EAAOD,OAAQA,IAE/Cg1b,EAAiB1vc,UAAU+5L,SAAW,SAAUvkI,EAAQljC,GAEpD,IAAIihb,EAAS/9Y,EAAO06Y,WAAW59a,EAAMrqB,IACrC,OAAOsrc,EAAOjD,KAAKvxb,UAAYw0b,EAAOjD,KAAKvxb,SAAS3d,QAExDsuc,EAAiB1vc,UAAUwxc,qBAAuB,SAAUh8Y,EAAQljC,EAAOkU,EAAM90B,EAAGC,EAAGmlJ,GAEnF,IAAIg6S,EACJA,EAAansc,KAAKqsc,cAAcx7Y,EAAQljC,EAAO5gB,EAAGC,EAAGmlJ,GACrD,IAGIi6S,EAHAzlb,KAEAmvC,GADJnvC,EAAOkqC,EAAO06Y,WAAW59a,EAAMrqB,KACfqoc,KAAKjlc,KAErB0lc,EAAMj6S,EACN,IAAI1lJ,EAAQ,EACZA,EAAQM,EACR,IAAIJ,EACJA,EAASK,EACT,IAAIgJ,EACAD,EACA1V,EACA0iZ,EACA8rD,EACAC,EAEAp4a,EACAq4a,EACAzD,EAEAyB,EACAiC,EACA7yc,EACA8yc,EAEAxB,EAEJ,GADmB58Y,EAAOuuB,OAAO/9E,MAAM,EAAGwvD,EAAOuuB,OAAO3iF,QACpDuD,KAAKo1L,SAASvkI,EAAQljC,GAAQ,CAC9B,IAAI+yE,OAAI,EAER,IADAA,GAA4C,IAAxC7vC,EAAOz3B,YAAY76B,QAAQ,QAC1BpC,EAAI,EAAGA,EAAIwqB,EAAKglb,KAAKvxb,SAAS3d,OAAQN,IAAK,CAqC5C,GApCAkE,EAAQwwD,EAAOyI,UAAU3yC,EAAKglb,KAAKvxb,SAASje,IAC5C6Z,EAAQ3V,EAAMqsC,WAAW12B,MACzBD,EAAS1V,EAAMqsC,WAAW32B,OAC1B84b,EAAanuW,EAAI3qF,EAASC,EAC1B84b,EAAcpuW,EAAI1qF,EAAQD,EACb86C,EAAOuuB,OAAOgtX,EAAM,GAAKv7Y,EAAOuuB,OAAOgtX,EAAM,GAAG4B,QAAU,KAEvEjrD,EAAc/iZ,KAAK6rc,WAAWh7Y,EAAQpkD,EAAOE,EAAQtM,EAAO+rc,EAAM,EAAGv7Y,EAAOyI,UAAU3yC,EAAKglb,KAAKvxb,SAASje,EAAI,KAC7G8yc,EAAYp+Y,EAAO06Y,WAAWlrc,EAAMiD,IACpCqjB,EAAK2kb,SAAWj/b,KAAKC,IAAIqa,EAAK2kb,UAAY,EAAG2D,EAAU3D,UAAY,GACnEyD,GAAchic,EAAGkic,EAAUlic,EAAGC,EAAGiic,EAAUjic,EAAGP,MAAOwic,EAAUlic,EAAI8hc,EAAYlic,OAAQsic,EAAUjic,EAAI8hc,GAC3F,IAAN3yc,IAEAu6B,GACI3pB,EAAGV,KAAK0T,IAAIkvb,EAAUlic,EAAGg2Y,EAAYh2Y,GAAIC,EAAGX,KAAK0T,IAAIkvb,EAAUjic,EAAG+1Y,EAAY/1Y,GAC9EP,MAAOs2Y,EAAYt2Y,MAAOE,OAAQo2Y,EAAYp2Y,QAElD8gc,EAAiBwB,GAEhBD,GAIDA,EAAajic,EAAIgic,EAAUhic,EAC3Biic,EAAahic,EAAI+hc,EAAU/hc,EACvB+hc,EAAUtic,MAAQuic,EAAavic,QAC/Buic,EAAavic,MAAQsic,EAAUtic,OAEnCuic,EAAaric,OAASoic,EAAUpic,QARhCqic,EAAeD,EAaT,IAAN5yc,IACAwqB,EAAK/J,YAAe7P,EAAGkic,EAAUlic,EAAGggc,UAAWkC,EAAUlC,UAAW1sc,MAAOA,EAAMiD,KAEjFtD,KAAKo1L,SAASvkI,EAAQxwD,GACtB,IAAKsmB,EAAK/J,YAAc+J,EAAK/J,WAAW7P,GAAKkic,EAAUryb,WAAW7P,EAAG,CAC7Dkic,EAAUryb,YAAc+J,EAAK/J,WAAWmwb,UAAYkC,EAAUlC,YAC9Dpmb,EAAK/J,WAAWmwb,UAAYA,EAC5BkC,EAAUlC,UAAYA,EACtBA,EAAYpmb,EAAK/J,WAAWmwb,UAC5Bl8Y,EAAO06Y,WAAW5kb,EAAK/J,WAAWvc,OAAO0sc,UAAYA,GAEzD,IAAImC,OAA6B/zc,IAAd4xc,EAA0BA,EAAYkC,EAAUlC,UACnEpmb,EAAK/J,YAAe7P,EAAGkic,EAAUryb,WAAW7P,EAAGggc,UAAWmC,EAAc7uc,MAAOA,EAAMiD,SAEhF2rc,EAAUryb,YAAcqyb,EAAUnB,YAAcnnb,EAAK/J,WAAWmwb,UAAYkC,EAAUlC,YAC3Fpmb,EAAK/J,WAAWmwb,UAAYl8Y,EAAO06Y,WAAW5kb,EAAK/J,WAAWvc,OAAO0sc,UAAYkC,EAAUlC,WAGnGzB,EAAWA,EAAWj/b,KAAKC,IAAI2ic,EAAU3D,SAAUA,GAAY2D,EAAU3D,SACzEtrc,KAAK2uc,WAAWj4a,EAAQqsX,GAEpBt2Y,EADM,IAANtQ,IAAY6D,KAAKo1L,SAASvkI,EAAQxwD,IAAU4uc,EAAU5B,mBAAqB,EACnEtqD,EAAYt2Y,MAAQwic,EAAU5B,mBAAqBx8Y,EAAO26Y,kBAG1DzoD,EAAYt2Y,MAAQokD,EAAO26Y,kBAGtCxpZ,WAxELmtZ,KAyEI1B,EAAeV,eAzEnBoC,GA2EAxob,EAAK4wC,KAAOk2Y,EAAe1gc,EAAIiic,EAAavic,OAAS,EAAI0/b,EAAWn2b,MAAQ,EAE/D,SAAT8/C,EACAnvC,EAAK4wC,IAAMw3Y,EAAUtic,MAAQ0/b,EAAWn2b,MAE1B,UAAT8/C,IACLnvC,EAAK4wC,IAAMxqD,GAGnB,OAAO2pB,GAEXq0a,EAAiB1vc,UAAUsxc,qCAAuC,SAAU97Y,EAAQljC,EAAOkU,EAAM90B,EAAGC,EAAGmlJ,GAEnG,IAAI9xJ,EACA4uc,EACAlsD,EACA8rD,EAIAn4a,EAEA1gB,EACAD,EAKAwN,EACApnB,EAGAizc,EACAC,EAEAlD,EAAansc,KAAKqsc,cAAcx7Y,EAAQljC,EAAO5gB,EAAGC,EAAGmlJ,GACrDxrI,EAAOkqC,EAAO06Y,WAAW59a,EAAMrqB,IAE/B8oc,GADOzlb,EAAKglb,KAAKjlc,KACXyrJ,GACN1lJ,EAAQM,EACRJ,EAASK,EAETsic,GADmBz+Y,EAAOuuB,OAAO/9E,MAAM,EAAGwvD,EAAOuuB,OAAO3iF,QACvC,GACrB,GAAIuD,KAAKo1L,SAASvkI,EAAQljC,GAAQ,CAC9B,IAAI+yE,GAA4C,IAAxC7vC,EAAOz3B,YAAY76B,QAAQ,QAC/B41D,OAAQ,EACRokO,EAAOv4R,KAAKuvc,oBAAoB1+Y,EAAQljC,GACxC6hb,EAAuC,IAA9B7ob,EAAKglb,KAAKvxb,SAAS3d,QAAmC,IAAnB87R,EAAK,GAAG97R,OACpDgzc,KACAC,KACCF,EAIDE,EAAYn3K,EAHZv4R,KAAK2vc,UAAUp3K,EAAMk3K,EAAUC,GAKnC,IAAIE,GAAaH,SAAUA,EAAUl3K,KAAMA,EAAMm3K,UAAWA,EAAWvD,WAAYA,GAC/E0D,EAAY7vc,KAAK8vc,eAAej/Y,EAAQ++Y,EAAUjib,EAAO5gB,EAAGJ,EAAQy/b,GACxE11a,EAASk5a,EAASl5a,OAClB,IAAIg6V,OAAS,EACTh9V,GAAUm8a,GAAa,SAAoB10c,IAAd00c,EAA2Bh/Y,EAAO26Y,kBAAoB,EAAK,QAC1Erwc,IAAd00c,IACAlpb,EAAK4wC,IAAM7jC,EAASy4a,EAAWn2b,MAAQ,EACvC06W,EAASm/E,EAAYh/Y,EAAO26Y,mBAEhC7+b,EAASK,EACT,IAAI+ic,OAAc,EAElB,IADAA,KACK5zc,EAAI,EAAGA,EAAIuzc,EAAUjzc,OAAQN,IAU9B,IARIsQ,EADA8rR,EAAKp8R,GAAGM,OAAS,GAAM,GAAKN,IAAMuzc,EAAUjzc,OAAS,GAAK+yc,EAClDzic,EAGA2jX,GAAU3jX,EAEZ,IAAN5Q,IACAwQ,EAASojc,EAAY5zc,EAAI,GAAGwQ,OAASkkD,EAAO46Y,iBAE3Clob,EAAI,EAAGA,EAAImsb,EAAUvzc,GAAGM,OAAQ8mB,IAEjCvN,GADA3V,EAAQwwD,EAAOyI,UAAUo2Y,EAAUvzc,GAAGonB,KACxBmpB,WAAW12B,MACzBD,EAAS1V,EAAMqsC,WAAW32B,OAC1B84b,EAAanuW,EAAI3qF,EAASC,GAC1Bi5b,EAEYp+Y,EAAO06Y,WAAWlrc,EAAMiD,KAC1Bqqc,YAAcvB,EAAM,EAAIjwc,EACxB,IAANonB,GAAWksb,EAAStzc,IAAMszc,EAAStzc,GAAGM,SACtCwyc,EAAUtgX,WAAY,GAEtB6gX,GAAgB,IAANrzc,IACA,IAANonB,GAAW6rb,EAAaP,EAAah+Y,EAAO26Y,mBAAqB6D,IACjEl7Y,GAAQ,EACR1nD,EAAQ2ic,EAAaP,EAAa,GAElC16Y,GAAe,IAAN5wC,IACT9W,EAAQ4ic,EAAcR,EAAa,IAG3C9rD,EAAc/iZ,KAAK6rc,WAAWh7Y,EAAQpkD,EAAOE,EAAQtM,EAAO+rc,EAAM,EAAGv7Y,EAAOyI,UAAUo2Y,EAAUvzc,GAAGonB,EAAI,KACnGisb,GAAUjsb,GAAK,GAAW,IAANpnB,GACV,IAANonB,IACA6rb,EAAarsD,EAAYh2Y,EAAI8jD,EAAO26Y,kBAAoB,EACxD6D,EAActsD,EAAYh2Y,EAAI8hc,EAAah+Y,EAAO26Y,kBAAoB,GAGpE,IAANjob,EACAwsb,EAAY5zc,IAAO4Q,EAAGg2Y,EAAYh2Y,EAAGC,EAAG+1Y,EAAY/1Y,EAAGP,MAAOs2Y,EAAYt2Y,MAAOE,OAAQo2Y,EAAYp2Y,QAGrG3M,KAAK2uc,WAAWoB,EAAY5zc,GAAI4mZ,GAE/BrsX,IACDA,GACI3pB,EAAGgjc,EAAY5zc,GAAG4Q,EAAGC,EAAG+ic,EAAY5zc,GAAG6Q,EAAGP,MAAOsjc,EAAY5zc,GAAGsQ,MAChEE,OAAQojc,EAAY5zc,GAAGwQ,SAG/B3M,KAAK2uc,WAAWj4a,EAAQq5a,EAAY5zc,IACpCsQ,EAAQs2Y,EAAYt2Y,MAAQokD,EAAO26Y,oBAC9B7kb,EAAK/J,aAAgBzgB,IAAMuzc,EAAUjzc,OAAS,GAAK87R,EAAKp8R,GAAGM,OAAS,GAAM,GAAM+yc,IACxE,IAANjsb,QAAmCpoB,IAAxB8zc,EAAUlC,WAA2BuC,EAAiBL,EAAUlC,aAC9EuC,EAAiBjjc,KAAK0T,IAAIuvb,EAAgBL,EAAUlC,WAAa,GACjEpmb,EAAK/J,YAAe7P,EAAGkic,EAAUlic,EAAG1M,MAAOA,EAAMiD,GAAIypc,UAAWkC,EAAUlC,YAE9E6C,EAASR,WAAaA,EACtBQ,EAASP,YAAcA,EACvBO,EAASz7Y,MAAQA,EACjBy7Y,EAASz9S,MAAQi6S,EACjBwD,EAASG,YAAcA,EACvB/vc,KAAKgwc,kBAAkBn/Y,EAAQ10D,EAAGwxB,EAAOiib,EAAUl/E,GAI/D,OAAOh6V,GAEXq0a,EAAiB1vc,UAAUy0c,eAAiB,SAAUj/Y,EAAQ++Y,EAAUjib,EAAO5gB,EAAGJ,EAAQy/b,GAWtF,IAAK,IARD3/b,EAEA6ic,EACAO,EACA9sD,EACArsX,EAPA+4a,EAAWG,EAASH,SACpB9ob,EAAOkqC,EAAO06Y,WAAW59a,EAAMrqB,IAE/B2sc,KAKAvvW,GAA4C,IAAxC7vC,EAAOz3B,YAAY76B,QAAQ,QAE1BpC,EAAI,EAAGA,EAAIszc,EAAShzc,QAAUgzc,EAAStzc,GAAGM,OAAQN,IAAK,CAC5DsQ,EAAQM,EACJkjc,EAAW9zc,EAAI,KACfwQ,EAASsjc,EAAW9zc,EAAI,GAAGwQ,OAASkkD,EAAO46Y,iBAE/C,IAAK,IAAIlob,EAAI,EAAGA,EAAIksb,EAAStzc,GAAGM,OAAQ8mB,IAAK,CACzC,IAAIljB,EAAQwwD,EAAOyI,UAAUm2Y,EAAStzc,GAAGonB,IAIrC0rb,GAHavuW,EAAIrgG,EAAMqsC,WAAW32B,OAAS1V,EAAMqsC,WAAW12B,MAC9C0qF,EAAIrgG,EAAMqsC,WAAW12B,MAAQ3V,EAAMqsC,WAAW32B,OAEhD86C,EAAO06Y,WAAWlrc,EAAMiD,KACxC2rc,EAAUtB,YAAcvB,EAAM,EAAIjwc,EAClC4mZ,EAAc/iZ,KAAK6rc,WAAWh7Y,EAAQpkD,EAAOE,EAAQtM,EAAO+rc,EAAM,EAAGv7Y,EAAOyI,UAAUm2Y,EAAStzc,GAAGonB,EAAI,KAC5F,IAANA,EACA0sb,EAAW9zc,IAAO4Q,EAAGg2Y,EAAYh2Y,EAAGC,EAAG+1Y,EAAY/1Y,EAAGP,MAAOs2Y,EAAYt2Y,MAAOE,OAAQo2Y,EAAYp2Y,QAGpG3M,KAAK2uc,WAAWsB,EAAW9zc,GAAI4mZ,GAEzB,IAAN5mZ,GAAiB,IAANonB,GACX+rb,EAAiBL,EAAUlC,UAC3Bpmb,EAAK/J,YAAe7P,EAAGkic,EAAUlic,EAAG1M,MAAOA,EAAMiD,GAAIypc,UAAWkC,EAAUlC,YAE/D,IAANxpb,QAAmCpoB,IAAxB8zc,EAAUlC,WAA2BuC,EAAiBL,EAAUlC,YAChFuC,EAAiBjjc,KAAK0T,IAAIuvb,EAAgBL,EAAUlC,WAAa,GACjEpmb,EAAK/J,YAAe7P,EAAGkic,EAAUlic,EAAG1M,MAAOA,EAAMiD,GAAIypc,UAAWkC,EAAUlC,YAE9Etgc,EAAQs2Y,EAAYt2Y,MAAQokD,EAAO26Y,kBAGnCqE,EADM,IAAN1zc,EACY8zc,EAAW9zc,GAAGsQ,MAGdJ,KAAKC,IAAIujc,EAAWI,EAAW9zc,GAAGsQ,OAItD,IAAStQ,EAAI,EAAGA,EAAIszc,EAAShzc,QAAUgzc,EAAStzc,GAAGM,OAAQN,IAAK,CAC5D,GAAI0zc,IAAcI,EAAW9zc,GAAGsQ,MAEvB,CAAA,IADDgxE,EAAOoyX,EAAYI,EAAW9zc,GAAGsQ,MACrC,IAAS8W,EAAI,EAAGA,EAAIksb,EAAStzc,GAAGM,OAAQ8mB,IAAK,CAC3BstC,EAAOyI,UAAUm2Y,EAAStzc,GAAGonB,IACzBstC,EAAO06Y,WAAWkE,EAAStzc,GAAGonB,IACpCxW,GAAK0wE,GAKf,IAANthF,EACAu6B,GAAW3pB,EAAGkjc,EAAW,GAAGljc,EAAGC,EAAGijc,EAAW,GAAGjjc,EAAGP,MAAOwjc,EAAW,GAAGxjc,MAAOE,OAAQsjc,EAAW,GAAGtjc,QAGrG3M,KAAK2uc,WAAWj4a,EAAQu5a,EAAW9zc,IAI3C,OADAyzc,EAASl5a,OAASA,EACXm5a,GAEX9E,EAAiB1vc,UAAU20c,kBAAoB,SAAUn/Y,EAAQ10D,EAAGwxB,EAAOiib,EAAUl/E,GACjF,IAAIpkX,EACA4jc,EACAzyX,EACA92D,EAAOkqC,EAAO06Y,WAAW59a,EAAMrqB,IAC/Bi1R,EAAOq3K,EAASr3K,KAChBm3K,EAAYE,EAASF,UACrBN,EAAaQ,EAASR,WACtBC,EAAcO,EAASP,YACvBl7Y,EAAQy7Y,EAASz7Y,MACjB47Y,EAAcH,EAASG,YACvB5D,EAAayD,EAASzD,WACtBC,EAAMwD,EAASz9S,MACfq9S,EAAuC,IAA9B7ob,EAAKglb,KAAKvxb,SAAS3d,QAAmC,IAAnB87R,EAAK,GAAG97R,OAIxD,GAHI+yc,GAAgB,IAANrzc,IACVmQ,EAAOyjc,EAAY,GAAGtjc,MAAQsjc,EAAY,GAAGhjc,GAAOgjc,EAAY,GAAGtjc,MAAQsjc,EAAY,GAAGhjc,EAAK,EAAI,GAEnG5Q,IAAMo8R,EAAK97R,OAAS,IAChB87R,EAAKp8R,GAAGM,OAAS,GAAM,GAAK+yc,GAAgB,IAANrzc,GAAS,CAC/C+zc,EAAWR,EAAUvzc,GAAGkQ,KAAK+S,MAAMswb,EAAUvzc,GAAGM,OAAS,IACzD,IAAI0zc,OAAc,EAClBA,EAAct/Y,EAAOyI,UAAU42Y,GAC/B,IAAIE,OAAiB,EACjBC,EAAYx/Y,EAAO06Y,WAAW2E,GAAUnjc,EACxCujc,EAAYz/Y,EAAO06Y,WAAW2E,GAAUljc,EAC5Cojc,EAAiBpwc,KAAKqsc,cAAcx7Y,EAAQs/Y,EAAaE,EAAWC,EAAWlE,EAAM,GACrF3uX,OAAOtiF,GACFg5D,GAASq7Y,GACE,IAARljc,IACAnQ,EAAI,GAERshF,GAAQsyX,EAAYzjc,GAAKS,EAAIgjc,EAAYzjc,GAAKG,OAAS,GAAKsjc,EAAY5zc,GAAG4Q,EAAIgjc,EAAY5zc,GAAGsQ,OAAS,EAC7F,IAANtQ,IACAwqB,EAAK4wC,KAAOkmB,IAGV+xX,QAAqBr0c,IAAXu1X,IAChBjzS,EAAOizS,EAAS7/T,EAAO26Y,kBAAoB,GAAK6E,EAAYD,EAAep6b,MAAQ,SAE1E7a,IAATsiF,GACAz9E,KAAKuwc,uBAAuB1/Y,EAAQ6+Y,EAAUvzc,GAAIshF,EAAM0uX,GAExDqD,IACA7ob,EAAK4wC,KAAO83Y,EAAcD,GAAc,GAAW,IAANjzc,EAAUshF,EAAO,GAAK0uX,EAAWn2b,MAAQ,QAEzE7a,IAAbwrB,EAAK4wC,KAAqB1G,EAAO06Y,WAAW2E,KAC5Cvpb,EAAK4wC,IAAM84Y,GAEfl8Y,GAAQ,EACRh4D,MAIZ4uc,EAAiB1vc,UAAUk1c,uBAAyB,SAAU1/Y,EAAQ6+Y,EAAWjyX,EAAM0uX,GACnF,IAAK,IAAI5ob,EAAI,EAAGA,EAAImsb,EAAUjzc,OAAQ8mB,IAAK,CACvC,IAAI0rb,EAAYp+Y,EAAO06Y,WAAWmE,EAAUnsb,IAChCstC,EAAOyI,UAAUo2Y,EAAUnsb,IAGvC,GAFA0rb,EAAUlic,GAAK0wE,EACfwxX,EAAUlC,WAAatvX,EACnBl6D,IAAMmsb,EAAUjzc,OAAS,EAAG,CAE5B,IAAI+zc,GACAzjc,EAAGkic,EAAUlic,EAAGC,EAAGiic,EAAUjic,EAAGP,MAAOwic,EAAUlic,EAC7Co/b,EAAWn2b,MAAOrJ,OAAQsic,EAAUjic,EAAIm/b,EAAWp2b,QAEvDksC,EAAYjiD,KAAK0tc,uBAAuB78Y,EAAQ2/Y,EAAWvB,EAAUtB,aACzE3tc,KAAKiuc,iBAAiBp9Y,EAAQ,OAASm9Y,QAASwC,IAAcvB,EAAUtB,YAAa1rZ,MAIjG8oZ,EAAiB1vc,UAAUs0c,UAAY,SAAUp3K,EAAMk3K,EAAUC,GAC7D,IAAK,IAAIvzc,EAAI,EAAGA,EAAIo8R,EAAK97R,OAAQN,IAAK,CAClCszc,EAAStzc,MACTuzc,EAAUvzc,MACV,IAAIwhC,OAAO,EAEX,GADAA,EAAO46P,EAAKp8R,GAAGM,OACX87R,EAAKp8R,GAAGM,OAAS,GAAM,EAAG,CAC1BkhC,EAAOtxB,KAAKwmB,KAAK0lQ,EAAKp8R,GAAGM,OAAS,GAClC,IAAK,IAAI0pB,EAAI,EAAGA,EAAIwX,EAAMxX,IACtBspb,EAAStzc,GAAGqI,KAAK+zR,EAAKp8R,GAAGgqB,IAGjC,IAAK,IAAI5C,EAAIksb,EAAStzc,GAAGM,OAAQ8mB,EAAIg1Q,EAAKp8R,GAAGM,OAAQ8mB,IACjDmsb,EAAUvzc,GAAGqI,KAAK+zR,EAAKp8R,GAAGonB,MAItCwnb,EAAiB1vc,UAAUuxc,mBAAqB,SAAU/7Y,EAAQljC,EAAO5gB,EAAGC,EAAGmlJ,EAAOs+S,GAYjEzwc,KAAKqsc,cAAcx7Y,EAAQljC,EAAO5gB,EAAGC,EAAGmlJ,GAVzD,IAAI9xJ,EACA4uc,EACAlsD,EACA8rD,EACAC,EACAjH,EACAnxa,EACAq4a,EACA2B,EACAC,EAQAvE,EANAzlb,EAAOkqC,EAAO06Y,WAAW59a,EAAMrqB,IAC/BsZ,EAAai0C,EAAOyI,UAAU3yC,EAAKglb,KAAKvxb,SAAS,IACjDsmF,GAA4C,IAAxC7vC,EAAOz3B,YAAY76B,QAAQ,QAC/B++B,EAA4B,SAAnB3W,EAAKglb,KAAKjlc,MAAmB,EAAI,EAC1C+F,EAAQM,EACRJ,EAASK,EAEbo/b,EAAMj6S,EACN,IAAIh2J,EACA8lD,EACAv7C,EAGAqmc,EAFA3tX,KACAwxX,KAEJ,IACKz0c,EAAI,EAAGA,EAAIwqB,EAAKglb,KAAKvxb,SAAS3d,OAAQN,IAAK,CA+D5C,GA9DuB,cAAnBwqB,EAAKglb,KAAKjlc,OAEVA,EAAQvK,EAAI,GAAM,GAAKwqB,EAAKglb,KAAKvxb,SAAS3d,OAAS,EAAK,OAAS,QACjE6gC,EAAUnhC,EAAI,GAAM,GAAKwqB,EAAKglb,KAAKvxb,SAAS3d,OAAS,GAAM,EAAI,GAEnEgQ,EAAQM,EAAI/M,KAAK6wc,WAAWhgZ,EAAQljC,EAAOhH,EAAMjgB,GACjDrG,EAAQwwD,EAAOyI,UAAU3yC,EAAKglb,KAAKvxb,SAASje,IAC5C0yc,EAAanuW,EAAIrgG,EAAMqsC,WAAW32B,OAAS1V,EAAMqsC,WAAW12B,MAC5D84b,EAAcpuW,EAAIrgG,EAAMqsC,WAAW12B,MAAQ3V,EAAMqsC,WAAW32B,OAE5DgtY,EAAc/iZ,KAAK6rc,WAAWh7Y,EAAQpkD,EAAQ6wB,EAASuxa,EAAYlic,EAAQtM,EAAO8xJ,EAAQ,OAAGh3J,GAAW,GACxG8zc,EAAYp+Y,EAAO06Y,WAAWlrc,EAAMiD,IACpCyrc,GAAchic,EAAGkic,EAAUlic,EAAGC,EAAGiic,EAAUjic,EAAGP,MAAOwic,EAAUlic,EAAI8hc,EAAYlic,OAAQsic,EAAUjic,EAAI8hc,GAC3F,IAAN3yc,GACA6D,KAAK2uc,WAAW5rD,EAAagsD,GAC7Br4a,EAASqsX,GAGT/iZ,KAAK2uc,WAAWj4a,EAAQqsX,IAGxBksD,EAAUpH,YAAmC,cAAnBlhb,EAAKglb,KAAKjlc,MAAwBvK,EAAI,GAAM,GAAKwqB,EAAKglb,KAAKvxb,SAAS3d,OAAS,IACvGswc,OAA0B5xc,IAAd4xc,EAA0B1gc,KAAK0T,IAAIkvb,EAAUlC,UAAWA,GAAakC,EAAUlC,WAG/Fpmb,EAAK2kb,SAAWj/b,KAAKC,IAAIqa,EAAK2kb,UAAY,EAAG2D,EAAU3D,UAAY,GAC1C,cAAnB3kb,EAAKglb,KAAKjlc,MAAwBigB,EAAKglb,KAAKvxb,SAAS3d,OAAS,GAAKN,EAAI,GAAM,GAyBrE,IAANA,IACAwQ,EAASk7b,EAAWl7b,OAASkkD,EAAO46Y,gBAAkB,GAE1DmF,EAAUpsc,MAAOwpc,QAASe,IACtBE,EAAUzC,cACVoE,EAAYA,EAAUr2b,OAAO00b,EAAUzC,gBA3BvC7/b,EAFmB,cAAnBga,EAAKglb,KAAKjlc,MAAwBigB,EAAKglb,KAAKvxb,SAAS3d,OAAS,EAErD4P,KAAKC,IAAIy2Y,EAAYp2Y,OAAQk7b,EAAWl7b,QAAUkkD,EAAO46Y,gBAAkB,EAI3E1oD,EAAYp2Y,OAASkkD,EAAO46Y,gBAAkB,EAE3Dt5S,EAAQxrI,EAAK2kb,SACblsX,EAAO56E,MAAOwpc,QAASe,IAClB4B,EAOD3wc,KAAK2uc,WAAWgC,EAAY5B,GAN5B4B,GACI5jc,EAAGkic,EAAUlic,EAAGC,EAAGiic,EAAUjic,EAAGP,MAAOwic,EAAUlic,EAAI8hc,EACrDlic,OAAQsic,EAAUjic,EAAI8hc,GAM1BG,EAAUzC,cACVptX,EAASA,EAAO7kE,OAAO00b,EAAUzC,eAY/B,IAANrwc,IACAwqB,EAAK/J,YAAe7P,EAAGkic,EAAUlic,EAAGggc,UAAWkC,EAAUlC,UAAW1sc,MAAOA,EAAMiD,KAEjFtD,KAAKo1L,SAASvkI,EAAQxwD,GACtB,IAAKsmB,EAAK/J,YAAc+J,EAAK/J,WAAW7P,GAAKkic,EAAUryb,WAAW7P,EAAG,CACjE,GAAIkic,EAAUryb,YAAc+J,EAAK/J,WAAWmwb,UAAYkC,EAAUlC,UAAW,CACzE,IAAI+D,EAAcnqb,EAAK/J,WAAWmwb,UAClCkC,EAAUlC,UAAY+D,EACtBjgZ,EAAO06Y,WAAW5kb,EAAK/J,WAAWvc,OAAO0sc,UAAY+D,EACrDnqb,EAAK/J,WAAWmwb,UAAY+D,EAEhCnqb,EAAK/J,YACD7P,EAAGkic,EAAUryb,WAAW7P,EAAGggc,eAAyB5xc,IAAd4xc,EAA0BA,EAAYkC,EAAUlC,UACtF1sc,MAAOA,EAAMiD,SAGZ2rc,EAAUryb,YAAcqyb,EAAUnB,YAAcnnb,EAAK/J,WAAWmwb,UAAYkC,EAAUlC,YAC3Fpmb,EAAK/J,WAAWmwb,UAAYl8Y,EAAO06Y,WAAW5kb,EAAK/J,WAAWvc,OAAO0sc,UAAYkC,EAAUlC,WAGnGlF,EAAakH,EAuBjB,OApBK0B,EAaD9pb,EAAK6lb,YAAcptX,GAZI,cAAnBz4D,EAAKglb,KAAKjlc,MAAwBigB,EAAKglb,KAAKvxb,SAAS3d,OAAS,IAC9Di0c,GACI3jc,EAAG6jc,EAAU,GAAG5C,QAAQjhc,EAAGC,EAAG4jc,EAAU,GAAG5C,QAAQhhc,EACnDP,MAAOmkc,EAAUA,EAAUn0c,OAAS,GAAGuxc,QAAQvhc,MAAOE,OAAQikc,EAAUA,EAAUn0c,OAAS,GAAGuxc,QAAQrhc,QAE1Gs1C,EAAYjiD,KAAK0tc,uBAAuB78Y,EAAQ6/Y,EAAWtE,EAAM,GACjEpsc,KAAKiuc,iBAAiBp9Y,EAAQ,KAAM+/Y,EAAWxE,EAAM,EAAGnqZ,IAE5DA,EAAYjiD,KAAK0tc,uBAAuB78Y,EAAQ8/Y,GAAcj6a,EAAQ01a,EAAM,GAC5Epsc,KAAKiuc,iBAAiBp9Y,EAAQ,KAAM8/Y,EAAavxX,IAAY4uX,QAASt3a,IAAW01a,EAAM,EAAGnqZ,IAKzFD,MAAM+qZ,KACPl8Y,EAAO06Y,WAAW3ub,EAAWtZ,IAAIypc,UAAYA,GAEjDpmb,EAAKo8X,YAAcrsX,EACnB/P,EAAK4wC,IAAMxqD,EACJ2pB,GAEXq0a,EAAiB1vc,UAAUk0c,oBAAsB,SAAU1+Y,EAAQljC,GAC/D,IAAIhH,EAEAk2C,EACJA,EAAS,EACT,IACItrD,EADAgnR,KAEJhnR,GALAoV,EAAOkqC,EAAO06Y,WAAW59a,EAAMrqB,KAKbqoc,KAAKvxb,SAAS3d,OAChC,IAAI2d,EAAWpa,KAAKtB,OAAOioB,EAAKglb,KAAKvxb,UACrC,GAAIuM,EAAKglb,KAAKpzK,KAAM,CAChB,IAAIz5Q,OAAQ,EACZA,EAAQ6H,EAAKglb,KAAKvxb,SAAS3d,OAC3B,IAAIshE,OAAU,EAGVlB,GAFJkB,EAAU1xD,KAAKwmB,KAAK/T,EAAQ6H,EAAKglb,KAAKpzK,OACxB,GAAM,EACPx6N,EAGAA,EAAU,OAGY,IAA9Bp3C,EAAKglb,KAAKvxb,SAAS3d,QAA8C,IAA9BkqB,EAAKglb,KAAKvxb,SAAS3d,OAC3DogE,EAAS,EAE0B,IAA9Bl2C,EAAKglb,KAAKvxb,SAAS3d,SACxBogE,EAAS,GAEb,KAAOtrD,EAAa,GAChBgnR,EAAKA,EAAK97R,QAAU2d,EAASiO,OAAO,EAAGw0C,IACvCtrD,GAAcsrD,GACGA,IACbA,EAAStrD,GAGjB,OAAOgnR,GAEXwyK,EAAiB1vc,UAAUqD,OAAS,SAAUqvB,GAC1C,IAAI5xB,EACA40c,KACJ,IAAK50c,EAAI,EAAGA,EAAI4xB,EAAKtxB,OAAQN,IACzB40c,EAAM50c,GAAK4xB,EAAK5xB,GAEpB,OAAO40c,GAEXhG,EAAiB1vc,UAAUw1c,WAAa,SAAUhgZ,EAAQljC,EAAOhH,EAAMjgB,GACnE,IAAIiF,EAAS,EACTkyB,GAAiD,IAAxCgzB,EAAOz3B,YAAY76B,QAAQ,QAAkBovB,EAAM+e,WAAW32B,OACvE4X,EAAM+e,WAAW12B,MACjBg7b,EAAWtqc,GAAcigB,EAAKglb,KAAKjlc,KAOvC,OANAiF,EAASgb,EAAKglb,KAAKhgc,QAAU,GACN,cAAnBgb,EAAKglb,KAAKjlc,MACNiF,GAAUklD,EAAO26Y,oBACjB7/b,EAASklD,EAAO26Y,kBAAoB,GAGpCwF,GACJ,IAAK,OACDrlc,EAASkyB,EAAQ,EAAIlyB,EACrB,MACJ,IAAK,QACDA,GAAkBkyB,EAAQ,EAGlC,OAAOlyB,GAEXo/b,EAAiB1vc,UAAUszc,WAAa,SAAUpzD,EAAOC,GAErDD,EAAMxuY,EAAIV,KAAK0T,IAAIw7X,EAAMxuY,EAAGyuY,EAAMzuY,GAClCwuY,EAAM9uY,MAAQJ,KAAKC,IAAIivY,EAAM9uY,MAAO+uY,EAAM/uY,OAC1C8uY,EAAM5uY,OAASN,KAAKC,IAAIivY,EAAM5uY,OAAQ6uY,EAAM7uY,SAEhDo+b,EAAiB1vc,UAAUwyc,yBAA2B,SAAUh9Y,EAAQljC,EAAO+I,GAC3E,IAAI/P,EACJA,EAAOkqC,EAAO06Y,WAAW59a,EAAMrqB,IAC/B,IAAI2tc,EACApJ,EAEA1hb,EACA0X,EAGJ,IAFAA,EAAQgzB,EAAO26Y,kBAEVrlb,EAAI,EAAGA,EAAIQ,EAAKs7B,UAAUxlD,OAAQ0pB,IACnC0hb,EAAah3Y,EAAOuuB,OAAOz4D,EAAKs7B,UAAU97B,IAAI6nb,QAC9CiD,EAAMv6a,EAAO3pB,GAAK86b,EAAWp7b,MAAQoxB,SACnB1iC,IAAdwrB,EAAK82D,MAAsBwzX,EAAMtqb,EAAK82D,QACtC92D,EAAK82D,KAAOwzX,EACZtqb,EAAKkhb,WAAah3Y,EAAOuuB,OAAOz4D,EAAKs7B,UAAU97B,IAAI6nb,UAI/DjD,EAAiB1vc,UAAUqyc,uBAAyB,SAAU78Y,EAAQn6B,EAAQy7H,EAAOw7S,GAEjF,IAAIO,GACJA,GAASnhc,EAAG2pB,EAAO3pB,EAAGC,EAAG0pB,EAAO1pB,EAAGP,MAAOiqB,EAAOjqB,MAAOE,OAAQ+pB,EAAO/pB,SAClEK,GAAK6jD,EAAO46Y,gBAAkB,EACnCyC,EAAKvhc,QAAUkkD,EAAO46Y,gBAAkB,EACxC,IAAIyF,EACJA,KACA,IAAIlD,EACAvma,EACJA,OAAoBtsC,IAAhBwyc,EAA4BA,EAAcx7S,EAC9C67S,EAAUn9Y,EAAOuuB,OAAO33C,GAAKopB,EAAOuuB,OAAO33C,GAAGuma,QAAU,KAExD,EAAG,CACC,GAAIA,IAAaE,EAAKlhc,EAAIghc,EAAQhhc,GAAKkhc,EAAKvhc,OAASqhc,EAAQhhc,GACrDkhc,EAAKlhc,EAAIghc,EAAQrhc,QAAUqhc,EAAQrhc,OAASuhc,EAAKvhc,QACrDuhc,EAAKlhc,GAAKghc,EAAQhhc,GACdkhc,EAAKvhc,QAAUqhc,EAAQrhc,QAAUuhc,EAAKlhc,EAAIghc,EAAQhhc,GAAKkhc,EAAKvhc,OAASqhc,EAAQrhc,QAAS,CAE1Fukc,EAAmB7ob,OADP,EACqB,EAAGof,QAEnC,GAAIuma,GAAWA,EAAQrhc,OAASuhc,EAAKlhc,EACtC,MAEJy6B,IACAuma,EAAUn9Y,EAAOuuB,OAAO33C,GAAKopB,EAAOuuB,OAAO33C,GAAGuma,QAAU,WACnDvma,GAAK,GACdA,QAAqBtsC,IAAhBwyc,EAA4BA,EAAcx7S,GAAS,EACxD67S,EAAUn9Y,EAAOuuB,OAAO33C,GAAKopB,EAAOuuB,OAAO33C,GAAGuma,QAAU,KACxD,EAAG,CACC,GAAIA,IAAaE,EAAKlhc,EAAIghc,EAAQhhc,GAAKkhc,EAAKvhc,OAASqhc,EAAQhhc,GACxDkhc,EAAKlhc,EAAIghc,EAAQrhc,QAAUqhc,EAAQrhc,OAASuhc,EAAKvhc,QAClDuhc,EAAKlhc,GAAKghc,EAAQhhc,GAAKkhc,EAAKvhc,QAAUqhc,EAAQrhc,QAAUuhc,EAAKlhc,EAAIghc,EAAQhhc,GAAKkhc,EAAKvhc,OAASqhc,EAAQrhc,QACpGukc,EAAmB1sc,KAAKijC,QAEvB,GAAIuma,GAAWA,EAAQhhc,EAAIkhc,EAAKvhc,OACjC,MAEJ86B,IACAuma,EAAUn9Y,EAAOuuB,OAAO33C,GAAKopB,EAAOuuB,OAAO33C,GAAGuma,QAAU,WACnDvma,GAAKopB,EAAOuuB,OAAO3iF,QAC5B,OAAOy0c,GAEXnG,EAAiB1vc,UAAUgzc,UAAY,SAAUx9Y,EAAQn6B,EAAQy7H,GAC7D,IAAI+7S,EACJA,EAAOx3a,EACP,IAAI+Q,EACJA,EAAI,EACJ,IAAIuma,EAEJ,IADAA,EAAUn9Y,EAAOuuB,OAAO33C,GAAKopB,EAAOuuB,OAAO33C,GAAGuma,QAAU,KACjDvma,EAAIopB,EAAOuuB,OAAO3iF,QAAQ,CAC7B,GAAIuxc,GAAWE,EAAKvhc,OAASqhc,EAAQhhc,EACjC,OAAOy6B,EAGPA,IAEJuma,EAAUn9Y,EAAOuuB,OAAO33C,GAAKopB,EAAOuuB,OAAO33C,GAAGuma,QAAU,KAE5D,OAAOvma,GAEXsja,EAAiB1vc,UAAUm5H,cAAgB,SAAU3jE,EAAQtwD,GAEzD,OAAOswD,EAAOyI,UAAUzI,EAAOyI,UAAU/4D,EAAKosZ,QAAQ,IAAIr1W,WAE9DyzZ,EAAiB1vc,UAAUolb,YAAc,SAAU5vX,EAAQtwD,EAAMotM,GAC7D,IAAIwjQ,EACJA,EAAatgZ,EAAO06Y,WAAWhrc,EAAK+C,IACpC,IAAIigB,EACJ,GAAIhjB,EAAKmsZ,UAAYnsZ,EAAKmsZ,SAASjwZ,QAAU8D,EAAK04S,WAC9C,IAAK11R,EAAI,EAAGA,EAAIhjB,EAAKmsZ,SAASjwZ,OAAQ8mB,IAAK,CACvC,IAAI5K,OAAO,GACXA,EAAOk4C,EAAOyI,UAAUzI,EAAOyI,UAAU/4D,EAAKmsZ,SAASnpY,IAAIynY,WACjDuxB,qBAC6C,IAA/C40B,EAAWxF,KAAKvxb,SAAS7b,QAAQoa,EAAKrV,KACtC6tc,EAAWxF,KAAKvxb,SAAS5V,KAAKmU,EAAKrV,IAEnCqV,EAAK+zY,UAAY/zY,EAAK+zY,SAASjwZ,QAAUkc,EAAKsgS,aAC9Ck4J,EAAWxF,KAAKC,YAAa,GAEjC5rc,KAAKygb,YAAY5vX,EAAQl4C,EAAMg1L,EAAQ,IAKnDwjQ,EAAWxF,KAAKx5S,MAAQw7C,EAEpBwjQ,EAAWxF,KAAKC,aAChBuF,EAAWxF,KAAKvya,YAAc,aAC9B+3a,EAAWxF,KAAKjlc,KAAO,UAIvBmqD,EAAOD,eAAiC,wBAAhBC,EAAOnqD,OAC/BmqD,EAAOD,cAAcrwD,EAAM4wc,EAAWxF,MACT,aAAzBwF,EAAWxF,KAAKjlc,MAAuByqc,EAAWxF,KAAKC,aACvDuF,EAAWxF,KAAKjlc,KAAO,SACvByqc,EAAWxF,KAAKvya,YAAc,eAGlCy3B,EAAOshG,OAAkC,cAAzBg/S,EAAWxF,KAAKjlc,MAAwBinM,GAAS98I,EAAOshG,QACxEg/S,EAAWxF,KAAKC,YAAa,IAGrCb,EAAiB1vc,UAAU0wc,aAAe,SAAUl7Y,EAAQn6B,EAAQ8rZ,GAChE,IAAIjib,EACAoza,EAKA/9J,EAJA5/P,EAAQ,EACRD,EAAS,EACTk8E,EAAM,EACNm/W,EAAiB,IAAIl7a,GAAK,EAAG,EAAGssZ,EAASz1a,EAAGy1a,EAASx1a,GAEzD4oQ,EAAe/kN,EAAOn6B,OAASm6B,EAAOn6B,OAAS06a,EAC/C,IAAIh4a,EAAcy3B,EAAOz3B,YAEzB,GAAIy3B,EAAO8iX,UAAW,CAElB39Z,GADA29Z,EAAY9iX,EAAOyI,UAAUzI,EAAO8iX,YAClBjnY,WAAW12B,MAC7BD,EAAS49Z,EAAUjnY,WAAW32B,OAC9B86C,EAAOq6Y,QAAUv3B,EAAU9na,QAC3BglD,EAAOs6Y,QAAUx3B,EAAU1na,QAC3B,IAAI0gC,EAAQgnY,EAAUhnY,MAKtB,IAJAkkB,EAAOq6Y,SAAkC,gBAAvBr6Y,EAAOz3B,YAAgCpjB,EAAQ22B,EAAM5/B,GAAKiJ,EAAQ22B,EAAM5/B,EAC1F8jD,EAAOs6Y,SAAkC,gBAAvBt6Y,EAAOz3B,YAAgCrjB,EAAS42B,EAAM3/B,GAAK+I,EAAS42B,EAAM3/B,EAC5FzM,EAAOoza,EACP1hV,EAAM,EACC1xF,EAAKosZ,QAAQlwZ,QAChB8D,EAAOP,KAAKw0H,cAAc3jE,EAAQtwD,GAClC0xF,GAAOphC,EAAO06Y,WAAWhrc,EAAK+C,IAAI+pc,oBAAsB,GAEhB,IAAxCx8Y,EAAOz3B,YAAY76B,QAAQ,SAC3BsyD,EAAOq6Y,SAAWr6Y,EAAO06Y,WAAW53B,EAAUrwa,IAAI0J,EAClD6jD,EAAOs6Y,SAAWt6Y,EAAO06Y,WAAW53B,EAAUrwa,IAAIyJ,EAAIklF,IAGtDphC,EAAOq6Y,SAAWr6Y,EAAO06Y,WAAW53B,EAAUrwa,IAAIyJ,EAAIklF,EACtDphC,EAAOs6Y,SAAWt6Y,EAAO06Y,WAAW53B,EAAUrwa,IAAI0J,QAItD,GAAoB,gBAAhBosB,GAAiD,gBAAhBA,EAA+B,CAChE,OAAQy3B,EAAO4C,qBACX,IAAK,OACD5C,EAAOq6Y,QAAWt1L,EAAa7oQ,EAAI2pB,EAAO3pB,EAAK8jD,EAAOp0B,OAAOjwB,KAC7D,MACJ,IAAK,QACDqkD,EAAOq6Y,QAAUt1L,EAAa7oQ,EAAI6oQ,EAAa5/P,MAAQ66C,EAAOp0B,OAAOhwB,MAAQiqB,EAAOjqB,MACpF,MACJ,IAAK,OACL,IAAK,SACDokD,EAAOq6Y,QAAUt1L,EAAa7oQ,EAAI6oQ,EAAa5/P,MAAQ,GAAK0gB,EAAO3pB,EAAI2pB,EAAOjqB,OAAS,EAG/F,OAAQokD,EAAO6C,mBACX,IAAK,OACL,IAAK,MACD,IAAI7S,EACJA,EAAQ+0N,EAAa5oQ,EAAI6jD,EAAOp0B,OAAO/vB,IACvCmkD,EAAOs6Y,QAA0B,gBAAhB/xa,EAAgCynB,EAAQnqB,EAAO/pB,OAASk0C,EACzE,MACJ,IAAK,SACD,IAAIl0C,OAAS,EACbA,EAASipQ,EAAa5oQ,EAAI4oQ,EAAa7/P,OAAS86C,EAAOp0B,OAAO9vB,OAC9DkkD,EAAOs6Y,QAA0B,gBAAhB/xa,EAAgCzsB,EAAS+pB,EAAO/pB,OAASA,EAC1E,MACJ,IAAK,SACD,IAAI+mB,OAAS,EACbA,EAASkiP,EAAa5oQ,EAAI4oQ,EAAa7/P,OAAS,EAChD86C,EAAOs6Y,QAAiC,gBAAvBt6Y,EAAOz3B,YACpB1F,GAAUgD,EAAO1pB,EAAI0pB,EAAO/pB,QAAU,EAAI+mB,GAAUgD,EAAO1pB,EAAI0pB,EAAO/pB,QAAU,OAI3F,CACD,OAAQkkD,EAAO4C,qBACX,IAAK,OACL,IAAK,OACD,IAAIjnD,OAAO,EACXA,EAAOopQ,EAAa7oQ,EAAI8jD,EAAOp0B,OAAOjwB,KACtCqkD,EAAOq6Y,QAA0B,gBAAhB9xa,EAAgC5sB,EAAOkqB,EAAO/pB,OAASH,EACxE,MACJ,IAAK,QACD,IAAIC,OAAQ,EACZA,EAAQmpQ,EAAa7oQ,EAAI6oQ,EAAa5/P,MAAQ66C,EAAOp0B,OAAOhwB,MAC5DokD,EAAOq6Y,QAA0B,gBAAhB9xa,EAAgC3sB,EAAQiqB,EAAO/pB,OAASF,EACzE,MACJ,IAAK,SACGinB,OAAS,EACbA,EAASkiP,EAAa5/P,MAAQ,EAAI4/P,EAAa7oQ,EAC/C8jD,EAAOq6Y,QAAiC,gBAAvBr6Y,EAAOz3B,YACpB1F,GAAUgD,EAAO1pB,EAAI0pB,EAAO/pB,QAAU,EAAI+mB,GAAUgD,EAAO1pB,EAAI0pB,EAAO/pB,QAAU,EAG5F,OAAQkkD,EAAO6C,mBACX,IAAK,MACD7C,EAAOs6Y,QAAUv1L,EAAa5oQ,EAAI6jD,EAAOp0B,OAAO/vB,IAAMgqB,EAAO3pB,EAC7D,MACJ,IAAK,OACL,IAAK,SACD8jD,EAAOs6Y,QAAUv1L,EAAa5oQ,EAAI4oQ,EAAa7/P,OAAS,GAAK2gB,EAAOjqB,MAAQiqB,EAAO3pB,GAAK,EACxF,MACJ,IAAK,SACD8jD,EAAOs6Y,QAAUv1L,EAAa5oQ,EAAI4oQ,EAAa7/P,OAAS86C,EAAOp0B,OAAO9vB,OAAS+pB,EAAOjqB,SAM1Gs+b,EAAiB1vc,UAAU4wc,iBAAmB,SAAUp7Y,EAAQtwD,EAAM4xJ,GAClE,IAAIh2J,EACAwqB,EASAxf,EACAkxD,EAMJ,GALA1xC,EAIOkqC,EAAO06Y,WAAWhrc,EAAK+C,IAE1B/C,EAAKmsZ,SAASjwZ,OACd,IAAKN,EAAI,EAAGA,EAAIoE,EAAKmsZ,SAASjwZ,OAAQN,KAClCk8D,EAAOxH,EAAOyI,UAAU/4D,EAAKmsZ,SAASvwZ,KACjCw7B,UACLxwB,EAAS0pD,EAAOyI,UAAUjB,EAAK2yV,UAC3B3yV,EAAK7gC,UACL6gC,EAAKg5Y,SAAU,EACXxgZ,EAAOygZ,qBACIzgZ,EAAOygZ,qBAAqBj5Y,GAGnC1xC,IAAuD,IAA/CA,EAAKglb,KAAKvxb,SAAS7b,QAAQ85D,EAAK2yV,YACxC3yV,EAAKvvB,YACe,wBAAhB+nB,EAAOnqD,MAAgD,eAAd2xD,EAAK3xD,MAC9C1G,KAAK+uZ,eAAel+V,EAAQwH,EAAM93D,EAAM4G,EAAQhL,IAIxDgL,IAAWA,EAAO8xS,YAAcj5S,KAAKo1L,SAASvkI,EAAQ1pD,KACtDnH,KAAKisc,iBAAiBp7Y,EAAQ1pD,EAAQgrJ,EAAQ,IAK9D,GAAIxrI,GAAQA,EAAKglb,KAAKW,WAAW7vc,OAE7B,IAAKN,EAAI,EAAGA,EAAIwqB,EAAKglb,KAAKW,WAAW7vc,OAAQN,IACzCgL,EAAS0pD,EAAOyI,UAAU3yC,EAAKglb,KAAKW,WAAWnwc,IAC/Ck8D,EAAOxH,EAAOyI,UAAUnyD,EAAOwlZ,QAAQ,IACvC3sZ,KAAKuxc,WAAW1gZ,EAAQtwD,EAAM4G,EAAQkxD,IAClClxD,EAAO8xS,YAAcj5S,KAAKo1L,SAASvkI,EAAQ1pD,KAC3CnH,KAAKisc,iBAAiBp7Y,EAAQ1pD,EAAQgrJ,EAAQ,IAK9D44S,EAAiB1vc,UAAU0zZ,eAAiB,SAAUl+V,EAAQwH,EAAM93D,EAAM4G,EAAQhL,GAC9E,IAAIwqB,EAAOkqC,EAAO06Y,WAAWhrc,EAAK+C,IAE9BqjB,EAAKglb,KAAKW,WAAW7vc,OAErBuD,KAAKwxc,uCAAuC3gZ,EAAQtwD,EAAM4G,EAAQkxD,GAIpC,eAA1B1xC,EAAKglb,KAAKvya,aAAmD,aAAnBzS,EAAKglb,KAAKjlc,KACpD1G,KAAKyxc,8BAA8B5gZ,EAAQwH,EAAM93D,EAAM4G,EAAQhL,GAGjC,eAA1BwqB,EAAKglb,KAAKvya,YACVp5B,KAAKwxc,uCAAuC3gZ,EAAQtwD,EAAM4G,EAAQkxD,GAG9D1xC,EAAKglb,KAAKhgc,OAAS,EACnB3L,KAAK0xc,WAAW7gZ,EAAQtwD,EAAM4G,EAAQkxD,GAGtCr4D,KAAKuxc,WAAW1gZ,EAAQtwD,EAAM4G,EAAQkxD,IAM1D0yY,EAAiB1vc,UAAUo2c,8BAAgC,SAAU5gZ,EAAQhR,EAAWt/C,EAAM4G,EAAQhL,GAClG,IAEIw1c,EAFAhrb,EAAOkqC,EAAO06Y,WAAWhrc,EAAK+C,IAGlC,GAAkC,IAA9BqjB,EAAKglb,KAAKvxb,SAAS3d,QAAgBN,EAAI,EAAG,CAC1Cw1c,EAAWhrb,EAAKglb,KAAKvxb,SAAS,GAC1B4nC,MAAM6O,EAAO06Y,WAAWoG,GAAU3E,aAClCn8Y,EAAO06Y,WAAWoG,GAAU3E,UAAYn8Y,EAAOyI,UAAUq4Y,GAAUjla,WAAW12B,OAElF,IAAIsnB,EAAe,IAANnhC,EAAU,GAAK,GACgB,IAAxC00D,EAAOz3B,YAAY76B,QAAQ,QAClBsyD,EAAOyI,UAAUq4Y,GAAU1lc,QAAU4kD,EAAO06Y,WAAWoG,GAAU3E,UAAY,EACjFn8Y,EAAO46Y,gBAAkBnua,EAAS,EAG9BuzB,EAAOyI,UAAUq4Y,GAAU9lc,QAChCglD,EAAO06Y,WAAWoG,GAAU3E,UAAY,EAAKn8Y,EAAO26Y,kBAAoBlua,EAAU,EAE1Ft9B,KAAK4xc,2BAA2B/gZ,EAAQtwD,EAAM4G,EAAQ04C,QAGlDl5B,EAAKglb,KAAKvxb,SAAS3d,OAAS,EACxBN,EAAI,EACJ6D,KAAK4xc,2BAA2B/gZ,EAAQtwD,EAAM4G,EAAQ04C,GAGtD7/C,KAAKwxc,uCAAuC3gZ,EAAQtwD,EAAM4G,EAAQ04C,GAGnC,IAA9Bl5B,EAAKglb,KAAKvxb,SAAS3d,OACpBN,EAAI,EACJ6D,KAAK4xc,2BAA2B/gZ,EAAQtwD,EAAM4G,EAAQ04C,GAGtD7/C,KAAKwxc,uCAAuC3gZ,EAAQtwD,EAAM4G,EAAQ04C,GAItE7/C,KAAK4xc,2BAA2B/gZ,EAAQtwD,EAAM4G,EAAQ04C,IAIlEkrZ,EAAiB1vc,UAAUk2c,WAAa,SAAU1gZ,EAAQtwD,EAAM4G,EAAQ04C,GACpE,IAAIloB,KACA47Y,EAAavza,KAAKysC,UAAUlsC,GAC5Bkkc,EAAezkc,KAAKysC,UAAUtlC,GAClC,IAA2C,IAAvC0pD,EAAOz3B,YAAY76B,QAAQ,OAAe,CAC1C,IAAIszc,EAAsD,IAAtChhZ,EAAOz3B,YAAY76B,QAAQ,OAAeg1a,EAAW76X,aACrE66X,EAAW96X,UACX+G,EAAWj/C,EAAKsL,QAAU1E,EAAO0E,QAAU44b,EAAa9rZ,YAAc8rZ,EAAa7rZ,WACvFjhB,EAAOnzB,KAAKqtc,GAAiB9kc,EAAGwma,EAAW76X,aAAa3rC,EAAGC,EAAGwyC,EAASxyC,GAAKwyC,OAE3E,CACGqyZ,EAAuD,IAAvChhZ,EAAOz3B,YAAY76B,QAAQ,QAAgBg1a,EAAW56X,YACtE46X,EAAW36X,WACX4G,EAAWj/C,EAAK0L,QAAU9E,EAAO8E,QAAUw4b,EAAa/rZ,aAAe+rZ,EAAahsZ,UACxF9gB,EAAOnzB,KAAKqtc,GAAiB9kc,EAAG03b,EAAa/rZ,aAAa3rC,EAAGC,EAAGuma,EAAW56X,YAAY3rC,GAAKwyC,GAEhGx/C,KAAK8xc,sBAAsBn6a,EAAQkoB,IAEvCkrZ,EAAiB1vc,UAAUq2c,WAAa,SAAU7gZ,EAAQtwD,EAAM4G,EAAQ04C,GACpE,IAAIloB,KAEA47Y,EAAavza,KAAKysC,UAAUlsC,GAC5Bkkc,EAAezkc,KAAKysC,UAAUtlC,GACvB0pD,EAAO06Y,WAAWhrc,EAAK+C,IAC9B/C,EAAKsL,QAAU1E,EAAO0E,QACtB8rB,EAAOnzB,KAAK+ua,EAAW76X,cAAgB3rC,EAAGwma,EAAW76X,aAAa3rC,EAAGC,EAAIuma,EAAW76X,aAAa1rC,EAAI6jD,EAAO46Y,gBAAkB,IAC1H1+b,EAAI03b,EAAa9rZ,YAAY5rC,EAAI8jD,EAAO26Y,kBAAoB,EAC5Dx+b,EAAIuma,EAAW76X,aAAa1rC,EAAI6jD,EAAO46Y,gBAAkB,IACxD1+b,EAAI03b,EAAa9rZ,YAAY5rC,EAAI8jD,EAAO26Y,kBAAoB,EAAIx+b,EAAGy3b,EAAa9rZ,YAAY3rC,GAAKy3b,EAAa9rZ,aAGnHhhB,EAAOnzB,KAAK+ua,EAAW76X,cAAgB3rC,EAAGwma,EAAW76X,aAAa3rC,EAAGC,EAAIuma,EAAW76X,aAAa1rC,EAAI6jD,EAAO46Y,gBAAkB,IAC1H1+b,EAAI03b,EAAa7rZ,WAAW7rC,EAAI8jD,EAAO26Y,kBAAoB,EAC3Dx+b,EAAIuma,EAAW76X,aAAa1rC,EAAI6jD,EAAO46Y,gBAAkB,IACxD1+b,EAAI03b,EAAa7rZ,WAAW7rC,EAAI8jD,EAAO26Y,kBAAoB,EAAIx+b,EAAGy3b,EAAa7rZ,WAAW5rC,GAAKy3b,EAAa7rZ,YAErH54C,KAAK8xc,sBAAsBn6a,EAAQkoB,IAEvCkrZ,EAAiB1vc,UAAUy2c,sBAAwB,SAAUn6a,EAAQkoB,GAGjE,IAAK,IADDjW,EADAd,KAEK3sC,EAAI,EAAGA,EAAIw7B,EAAOl7B,OAAS,EAAGN,KACnCytC,EAAU,IAAIuR,GAAkB0E,EAAW,YAAcn5C,KAAM,eAAgB,IACvE8uB,UAAY0kB,GAAM1kB,UAAUmC,EAAOx7B,GAAIw7B,EAAOx7B,EAAI,IAC1DytC,EAAQntC,OAASy9C,GAAM8F,eAAeroB,EAAOx7B,GAAIw7B,EAAOx7B,EAAI,IAC5D2sC,EAAStkC,KAAKolC,GAElBiW,EAAU/W,SAAWA,GAEzBiia,EAAiB1vc,UAAUu2c,2BAA6B,SAAU/gZ,EAAQtwD,EAAM4G,EAAQ04C,GACpF,IAEI/rB,EACA8V,EAFAd,KAGA27Z,EAAezkc,KAAKysC,UAAUtlC,GAC9Bosa,EAAavza,KAAKysC,UAAUlsC,GAChC,OAAQswD,EAAOz3B,aACX,IAAK,cACDtF,GAAU/mB,EAAGwma,EAAW76X,aAAa3rC,EAAGC,EAAIuma,EAAW76X,aAAa1rC,EAAI6jD,EAAO46Y,gBAAkB,IACjG7ha,EAAU,IAAIuR,GAAkB0E,EAAW,YAAcn5C,KAAM,eAAgB,IACvE8uB,UAAY0kB,GAAM1kB,UAAU+9Y,EAAW76X,aAAc5kB,GAC7D8V,EAAQntC,OAASy9C,GAAM8F,eAAeuzX,EAAW76X,aAAc5kB,GAC/DgV,EAAStkC,KAAKolC,GACd,MACJ,IAAK,cACD9V,GAAU/mB,EAAGwma,EAAW76X,aAAa3rC,EAAGC,EAAIuma,EAAW96X,UAAUzrC,EAAI6jD,EAAO46Y,gBAAkB,IAC9F7ha,EAAU,IAAIuR,GAAkB0E,EAAW,YAAcn5C,KAAM,eAAgB,IACvE8uB,UAAY0kB,GAAM1kB,UAAU+9Y,EAAW96X,UAAW3kB,GAC1D8V,EAAQntC,OAASy9C,GAAM8F,eAAeuzX,EAAW96X,UAAW3kB,GAC5DgV,EAAStkC,KAAKolC,GACd,MACJ,IAAK,cAMD,GALA9V,GAAU/mB,EAAIwma,EAAW56X,YAAY5rC,EAAI8jD,EAAO46Y,gBAAkB,EAAIz+b,EAAGuma,EAAW56X,YAAY3rC,GAChG48B,EAAU,IAAIuR,GAAkB0E,EAAW,YAAcn5C,KAAM,eAAgB,GAC/EkjC,EAAQpU,UAAY0kB,GAAM1kB,UAAU+9Y,EAAW56X,YAAa7kB,GAC5D8V,EAAQntC,OAASy9C,GAAM8F,eAAeuzX,EAAW56X,YAAa7kB,GAC9DgV,EAAStkC,KAAKolC,GACV66Z,EAAa/wa,OAAO1mB,IAAMuma,EAAW7/Y,OAAO1mB,EAAG,CAC/C,IAAI+2C,GAAWh3C,EAAIwma,EAAW56X,YAAY5rC,EAAI8jD,EAAO46Y,gBAAkB,EAAIz+b,EAAGy3b,EAAa7rZ,WAAW5rC,IACtG48B,EAAU,IAAIuR,GAAkB0E,EAAW,YAAcn5C,KAAM,eAAgB,IACvE8uB,UAAY0kB,GAAM1kB,UAAU1B,EAAOiwB,GAC3Cna,EAAQntC,OAASy9C,GAAM8F,eAAelsB,EAAOiwB,GAC7Cjb,EAAStkC,KAAKolC,GAElB,MACJ,IAAK,cAMD,GALA9V,GAAU/mB,EAAIwma,EAAW36X,WAAW7rC,EAAI8jD,EAAO46Y,gBAAkB,EAAIz+b,EAAGuma,EAAW56X,YAAY3rC,GAC/F48B,EAAU,IAAIuR,GAAkB0E,EAAW,YAAcn5C,KAAM,eAAgB,GAC/EkjC,EAAQpU,UAAY0kB,GAAM1kB,UAAU+9Y,EAAW36X,WAAY9kB,GAC3D8V,EAAQntC,OAASy9C,GAAM8F,eAAeuzX,EAAW36X,WAAY9kB,GAC7DgV,EAAStkC,KAAKolC,GACV66Z,EAAa/wa,OAAO1mB,IAAMuma,EAAW7/Y,OAAO1mB,EAAG,CAC/C,IAAI4mW,GAAY7mW,EAAIwma,EAAW36X,WAAW7rC,EAAI8jD,EAAO46Y,gBAAkB,EAAIz+b,EAAGy3b,EAAa7rZ,WAAW5rC,IACtG48B,EAAU,IAAIuR,GAAkB0E,EAAW,YAAcn5C,KAAM,eAAgB,IACvE8uB,UAAY0kB,GAAM1kB,UAAUo+U,EAASA,GAC7ChqU,EAAQntC,OAASy9C,GAAM8F,eAAe4zT,EAASA,GAC/C9qU,EAAStkC,KAAKolC,IAI1BiW,EAAU/W,SAAWA,GAEzBiia,EAAiB1vc,UAAUm2c,uCAAyC,SAAU3gZ,EAAQtwD,EAAM4G,EAAQ04C,GAChG,IACIxX,EACAuB,EACAd,KACAyqY,EAAavza,KAAKysC,UAAUlsC,GAC5Bkkc,EAAezkc,KAAKysC,UAAUtlC,GAClC,OAAQ0pD,EAAOz3B,aACX,IAAK,cACDiP,GAAWt7B,EAAGwma,EAAW76X,aAAa3rC,EAAGC,EAAIy3b,EAAahsZ,UAAUzrC,EAAI6jD,EAAO46Y,gBAAkB,IACjG7ha,EAAU,IAAIuR,GAAkB0E,EAAW,YAAcn5C,KAAM,eAAgB,IACvE8uB,UAAY0kB,GAAM1kB,UAAU+9Y,EAAW76X,aAAcrQ,GAC7DuB,EAAQntC,OAASy9C,GAAM8F,eAAeuzX,EAAW76X,aAAcrQ,GAC/DS,EAAStkC,KAAKolC,GACd,MACJ,IAAK,cACDvB,GAAWt7B,EAAGwma,EAAW96X,UAAU1rC,EAAGC,EAAIy3b,EAAa/rZ,aAAa1rC,EAAI6jD,EAAO46Y,gBAAkB,IACjG7ha,EAAU,IAAIuR,GAAkB0E,EAAW,YAAcn5C,KAAM,eAAgB,IACvE8uB,UAAY0kB,GAAM1kB,UAAU+9Y,EAAW96X,UAAWpQ,GAC1DuB,EAAQntC,OAASy9C,GAAM8F,eAAeuzX,EAAW96X,UAAWpQ,GAC5DS,EAAStkC,KAAKolC,GACd,MACJ,IAAK,cAMD,GALAvB,GAAWt7B,EAAI03b,EAAa7rZ,WAAW7rC,EAAI8jD,EAAO46Y,gBAAkB,EAAIz+b,EAAGuma,EAAW56X,YAAY3rC,GAClG48B,EAAU,IAAIuR,GAAkB0E,EAAW,YAAcn5C,KAAM,eAAgB,GAC/EkjC,EAAQpU,UAAY0kB,GAAM1kB,UAAU+9Y,EAAW56X,YAAatQ,GAC5DuB,EAAQntC,OAASy9C,GAAM8F,eAAeuzX,EAAW56X,YAAatQ,GAC9DS,EAAStkC,KAAKolC,GACV66Z,EAAa/wa,OAAO1mB,IAAMuma,EAAW7/Y,OAAO1mB,EAAG,CAC/C,IAAI+2C,GAAWh3C,EAAI03b,EAAa7rZ,WAAW7rC,EAAI8jD,EAAO46Y,gBAAkB,EAAIz+b,EAAGy3b,EAAa7rZ,WAAW5rC,IACvG48B,EAAU,IAAIuR,GAAkB0E,EAAW,YAAcn5C,KAAM,eAAgB,IACvE8uB,UAAY0kB,GAAM1kB,UAAU6S,EAAQ0b,GAC5Cna,EAAQntC,OAASy9C,GAAM8F,eAAe3X,EAAQ0b,GAC9Cjb,EAAStkC,KAAKolC,GAElB,MACJ,IAAK,cAMD,GALAvB,GAAWt7B,EAAI03b,EAAa9rZ,YAAY5rC,EAAI8jD,EAAO46Y,gBAAkB,EAAIz+b,EAAGuma,EAAW56X,YAAY3rC,GACnG48B,EAAU,IAAIuR,GAAkB0E,EAAW,YAAcn5C,KAAM,eAAgB,GAC/EkjC,EAAQpU,UAAY0kB,GAAM1kB,UAAU+9Y,EAAW36X,WAAYvQ,GAC3DuB,EAAQntC,OAASy9C,GAAM8F,eAAeuzX,EAAW36X,WAAYvQ,GAC7DS,EAAStkC,KAAKolC,GACV66Z,EAAa/wa,OAAO1mB,IAAMuma,EAAW7/Y,OAAO1mB,EAAG,CAC/C,IAAI8mB,GAAU/mB,EAAI03b,EAAa9rZ,YAAY5rC,EAAI8jD,EAAO46Y,gBAAkB,EAAIz+b,EAAGy3b,EAAa7rZ,WAAW5rC,IACvG48B,EAAU,IAAIuR,GAAkB0E,EAAW,YAAcn5C,KAAM,eAAgB,IACvE8uB,UAAY0kB,GAAM1kB,UAAU6S,EAAQvU,GAC5C8V,EAAQntC,OAASy9C,GAAM8F,eAAe3X,EAAQvU,GAC9CgV,EAAStkC,KAAKolC,IAK1B,OADAiW,EAAU/W,SAAWA,MAGzBiia,EAAiB1vc,UAAU2wc,YAAc,SAAUn7Y,EAAQtwD,EAAM0xF,EAAK5yC,EAAQy0S,EAAI/iT,GAC9E,IAAI50C,EACAkE,EACA2V,EACAD,EACAlK,EACAI,EAGJ,GAFA+J,EAAQzV,EAAKmsC,WAAW12B,MACxBD,EAASxV,EAAKmsC,WAAW32B,QACpBxV,EAAKg8a,kBAAmB,CACzB1wa,EAAUglD,EAAOq6Y,QACjBj/b,EAAU4kD,EAAOs6Y,QAGU,gBAAvBt6Y,EAAOz3B,aACPvtB,GAAWglD,EAAO06Y,WAAWhrc,EAAK+C,IAAI0J,EAAIgJ,EAAQ,EAClD/J,GAAW4kD,EAAO06Y,WAAWhrc,EAAK+C,IAAIyJ,EAAIklF,EAAMl8E,EAAS,GAE7B,gBAAvB86C,EAAOz3B,aACZvtB,GAAWglD,EAAO06Y,WAAWhrc,EAAK+C,IAAI0J,EAAIgJ,EAAQ,EAClD/J,GAAW4kD,EAAO06Y,WAAWhrc,EAAK+C,IAAIyJ,EAAIklF,EAAMl8E,EAAS,GAE7B,gBAAvB86C,EAAOz3B,aACZvtB,GAAWglD,EAAO06Y,WAAWhrc,EAAK+C,IAAIyJ,EAAIklF,EAAMj8E,EAAQ,EACxD/J,GAAW4kD,EAAO06Y,WAAWhrc,EAAK+C,IAAI0J,EAAI+I,EAAS,IAGnDlK,GAAWglD,EAAO06Y,WAAWhrc,EAAK+C,IAAIyJ,EAAIklF,EAAMj8E,EAAQ,EACxD/J,GAAW4kD,EAAO06Y,WAAWhrc,EAAK+C,IAAI0J,EAAI+I,EAAS,GAEnD86C,EAAO06Y,aAGP1/b,GAFAioV,EAAKA,GAAU,EAGf7nV,GAFA8kC,EAAKA,GAAU,EAGV/wC,KAAK8za,cACNvza,EAAKsL,QAAUA,EACftL,EAAK0L,QAAUA,IAGvB,IAAIwiD,GAAYnrD,GAAI/C,EAAK+C,GAAIunc,YAAah/b,EAAUtL,EAAKsL,QAASi/b,YAAa7+b,EAAU1L,EAAK0L,SAC9F4kD,EAAOpC,QAAQjqD,KAAKiqD,GACpB,IAAIo0C,OAAO,EAEX,GADAA,KACI7iG,KAAKo1L,SAASvkI,EAAQtwD,GACtB,IAAKpE,EAAI,EAAGA,EAAI00D,EAAO06Y,WAAWhrc,EAAK+C,IAAIqoc,KAAKvxb,SAAS3d,OAAQN,IAC7DkE,EAAQwwD,EAAOyI,UAAUzI,EAAO06Y,WAAWhrc,EAAK+C,IAAIqoc,KAAKvxb,SAASje,IAClE6D,KAAKgsc,YAAYn7Y,EAAQxwD,EAAO4xF,GAAOphC,EAAO06Y,WAAWhrc,EAAK+C,IAAI+pc,oBAAsB,GAAIhuZ,EAAQy0S,EAAI/iT,GACxG8xD,EAAKr+F,KAAKnE,GAGlB,GAAIwwD,EAAO06Y,WAAWhrc,EAAK+C,IAAIqoc,KAAKW,WAAW7vc,OAC3C,IAAKN,EAAI,EAAGA,EAAI00D,EAAO06Y,WAAWhrc,EAAK+C,IAAIqoc,KAAKW,WAAW7vc,OAAQN,IAC/DkE,EAAQwwD,EAAOyI,UAAUzI,EAAO06Y,WAAWhrc,EAAK+C,IAAIqoc,KAAKW,WAAWnwc,IACpE6D,KAAKgsc,YAAYn7Y,EAAQxwD,EAAO4xF,GAAOphC,EAAO06Y,WAAWhrc,EAAK+C,IAAI+pc,oBAAsB,GAAI,KAAMv5G,EAAI/iT,KAK/Gg6Z,KCtmDPgH,GAAyB,WAKzB,SAASA,IAKL/xc,KAAK8za,aAAc,EAuHvB,OA/GAi+B,EAAQ12c,UAAUiX,QAAU,aAQ5By/b,EAAQ12c,UAAUkkC,cAAgB,WAI9B,MAAO,gBAEXwya,EAAQ12c,UAAUonb,aAAe,SAAU3wX,EAAOwH,EAAW0xY,EAAYxoB,EAAU37I,EAAU7rG,GACzF,IAAIs0H,EAEJ,GADAA,EAAStvT,KAAKgyc,UAAUlgZ,EAAOk5Y,EAAYnkK,EAAU7rG,EAAM1hI,GAEvD0xY,EAAWr3B,UAAYrkH,OAGvB,IAAK,IAAIlxT,EAAK,EAAGytT,EAAU/5P,EAAO1zD,EAAKytT,EAAQpvT,OAAQ2B,IAAM,CAEzD,MADImC,EAAOsrT,EAAQztT,IACTm+a,mBACDh8a,EAAKosZ,SAAYpsZ,EAAKosZ,QAAQlwZ,QAAQ,CACvCuuc,EAAWr3B,UAAYpza,EAAK+C,GAC5B,OAKhB,IAAI6uT,EAAW74P,EAAU0xY,EAAWr3B,WAChCs+B,EAAiBjyc,KAAKkyc,oBAAoB//I,EAAU64I,EAAY1xY,GAChE64Y,KACAC,KACAC,EAAmBhla,GAAY29Z,EAAWl6Y,WAC9CuhZ,EAAmBA,GAAoBhla,GAAYrtC,KAAK8wD,WACxD,IAAK,IAAIjuD,EAAK,EAAGyvc,EAAmBL,EAAgBpvc,EAAKyvc,EAAiB71c,OAAQoG,IAAM,CACpF,IAAItC,EAEO,SADC8xc,EADR9xc,EAAO+xc,EAAiBzvc,GACOovc,GACdE,EAAU3tc,KAAKjE,GAAQ6xc,EAAW5tc,KAAKjE,GAEhE,IAAI6wc,EAAiB,IAAIl7a,GAAK,EAAG,EAAGssZ,EAASz1a,EAAGy1a,EAASx1a,GACzDssD,EAAU0xY,EAAWr3B,WAAW9na,QAAUulc,EAAerkc,EAAIqkc,EAAep7b,MAAQ,EACpFsjD,EAAU0xY,EAAWr3B,WAAW1na,QAAUmlc,EAAepkc,EAAIokc,EAAer7b,OAAS,EACjFo8b,EAAU11c,QACVuD,KAAKuyc,oBAAoBzgZ,EAAOsgZ,EAAY94Y,EAAW0xY,EAAYxoB,EAAU37I,EAAU,QAEvFurK,EAAW31c,QACXuD,KAAKuyc,oBAAoBzgZ,EAAOqgZ,EAAW74Y,EAAW0xY,EAAYxoB,EAAU37I,EAAU,UAG9FkrK,EAAQ12c,UAAU22c,UAAY,SAAUlgZ,EAAOk5Y,EAAYnkK,EAAU7rG,EAAM1hI,GACvE,IAAK,IAAIl7D,EAAK,EAAGo0c,EAAU1gZ,EAAO1zD,EAAKo0c,EAAQ/1c,OAAQ2B,IAAM,CACzD,IAAImC,EAAOiyc,EAAQp0c,GACnB,IAAKmC,EAAKg8a,kBAAmB,CACzB,GAAIh8a,EAAK/D,OAAS+D,EAAK/D,KAAKqqS,GAAU35R,aAAe8tL,GAAQz6L,EAAK/D,KAAKqqS,GAAU35R,aACzE89b,EAAWhwQ,MACf,OAAOz6L,EAAK+C,GAEX,IAAK/C,EAAK/D,MAAQ+D,EAAK+C,KAAO0nc,EAAWhwQ,KAC1C,OAAOz6L,EAAK+C,IAIxB,MAAO,IAEXyuc,EAAQ12c,UAAUk3c,oBAAsB,SAAUzgZ,EAAO2gZ,EAAcn5Y,EAAW0xY,EAAYxoB,EAAU37I,EAAU/wO,GAC9G,IAAIjF,GACJA,GACInqD,KAAM,mBACN8kc,kBAAmBR,EAAWS,gBAAiBA,gBAAiBT,EAAWQ,kBAC3E93Y,kBAAmBs3Y,EAAWt3Y,kBAAmBD,oBAAqBu3Y,EAAWv3Y,oBACjFkgX,UAAWq3B,EAAWr3B,UAAW/iX,cAAevjB,GAAY29Z,EAAWp6Y,eAAgBn0B,OAAQuua,EAAWvua,OAC1Gu+J,KAAMgwQ,EAAWr3B,YAEdv6Y,YAAwB,SAAT08B,EAAmB,cAAgB,cACzD91D,KAAKu8a,kBAAkBk2B,EAAcn5Y,GAAW,IAChC,IAAIyxY,IACVtoB,aAAa3wX,EAAOwH,EAAWzI,EAAQ2xX,EAAU37I,GAC3D7mS,KAAKu8a,kBAAkBk2B,EAAcn5Y,GAAW,IAEpDy4Y,EAAQ12c,UAAUy1D,UAAY,SAAU/zD,EAAKquc,GASzC,OAPQA,EAAgB7sc,QAAQxB,GACxB,GAAM,EACH,OAGA,SAIfg1c,EAAQ12c,UAAUkhb,kBAAoB,SAAUm2B,EAAep5Y,EAAWsE,GACtE,IAAK,IAAIx/D,EAAK,EAAGu0c,EAAkBD,EAAet0c,EAAKu0c,EAAgBl2c,OAAQ2B,IAAM,CAEtEk7D,EADEq5Y,EAAgBv0c,GACDkF,IACvBi5a,kBAAoB3+W,IAGjCm0Y,EAAQ12c,UAAU62c,oBAAsB,SAAU3xc,EAAMswD,EAAQyI,GAC5D,IACI24Y,KACJ,GAAI1xc,GAAQA,EAAKmsZ,SAASjwZ,OACtB,IAAK,IAAI2B,EAAK,EAAGyE,EAAKtC,EAAKmsZ,SAAUtuZ,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvD,IAAIw0c,EAAU/vc,EAAGzE,GACjB6zc,EAAeztc,KAAK80D,EAAUA,EAAUs5Y,GAAS5nD,WAGzD,OAAOinD,GAEJF,KCpIPc,GAA4B,WAK5B,SAASA,KA2NT,OAnNAA,EAAWx3c,UAAUiX,QAAU,aAQ/Bugc,EAAWx3c,UAAUkkC,cAAgB,WAIjC,MAAO,cAEXsza,EAAWx3c,UAAUonb,aAAe,SAAU3wX,EAAOwH,EAAW0xY,EAAYC,GACxE,IAAIp6Y,GACAnqD,KAAMskc,EAAWtkc,KACjB4yD,UAAWA,EAAW4xY,QAAS,EAAGC,QAAS,EAC3CC,mBAAqBC,WAAY,KAAMjsX,UAAYksX,SAAU,EAAGC,cAAgBuH,eAChF15a,YAAa4xa,EAAW5xa,YACxBoya,kBAAmBR,EAAWQ,kBAAmBC,gBAAiBT,EAAWS,gBAC7E/3Y,kBAAmBs3Y,EAAWt3Y,kBAAmBD,oBAAqBu3Y,EAAWv3Y,oBACjFkgX,UAAWq3B,EAAWr3B,UAAWl3Y,OAAQuua,EAAWvua,OACpD/F,OAAQs0a,EAAWt0a,OAAQ+3B,WAAausI,KAAMgwQ,EAAWhwQ,MAE7Dh7L,KAAKo/O,SAASvuL,EAAQiB,EAAOwH,EAAW2xY,IAE5C4H,EAAWx3c,UAAU+jP,SAAW,SAAUvuL,EAAQiB,EAAOwH,EAAW2xY,GAEhE,IAAK,IADD1qc,EACKpE,EAAI,EAAGA,EAAI21D,EAAMr1D,OAAQN,KAC9BoE,EAAOuxD,EAAM31D,IACHogb,oBACN1rX,EAAO06Y,WAAWhrc,EAAK+C,IAAMtD,KAAK0rc,gBAAgB76Y,EAAQtwD,GACrDA,EAAKosZ,SAAYpsZ,EAAKosZ,QAAQlwZ,QAC/Bo0D,EAAOu6Y,gBAAgB5mc,KAAKjE,IAIpCswD,EAAOmqI,MAAQ1hI,EAAUzI,EAAOmqI,MAChCnqI,EAAOw6Y,WAAa/xY,EAAUzI,EAAOmqI,MAEhCnqI,EAAOu6Y,gBAAgB3uc,SAC5Bo0D,EAAOw6Y,WAAax6Y,EAAOu6Y,gBAAgB,GAC3Cv6Y,EAAOmqI,KAAOnqI,EAAOw6Y,WAAW/nc,IAEhCutD,EAAOw6Y,aACPrrc,KAAKygb,YAAY5vX,EAAQA,EAAOw6Y,WAAY,EAAG/xY,GAC/Ct5D,KAAK+yc,qBAAqBliZ,EAAQA,EAAOw6Y,WAAY,EAAG,GACxDrrc,KAAKgzc,eAAeniZ,GACpB7wD,KAAKizc,wBAAwBpiZ,GAC7B7wD,KAAK+rc,aAAal7Y,EAAQo6Y,GAC1Bjrc,KAAKgsc,YAAYn7Y,EAAQA,EAAOw6Y,WAAY/xY,KAGpDu5Y,EAAWx3c,UAAUolb,YAAc,SAAU5vX,EAAQtwD,EAAMotM,EAAOr0I,GAC9D,IAAI45Y,EAAWriZ,EAAO06Y,WAAWhrc,EAAK+C,IACtCutD,EAAOiiZ,YAAYtuc,KAAK0uc,GACxBA,EAAS/gT,MAAQw7C,EACjBulQ,EAAS7B,SAAU,EACnBxgZ,EAAOy6Y,SAAWj/b,KAAKC,IAAIukD,EAAOy6Y,SAAU39P,GAC5C,IAAK,IAAIpqL,EAAI,EAAGA,EAAIhjB,EAAKmsZ,SAASjwZ,OAAQ8mB,IAAK,CAC3C,IAAI5K,EAAO2gD,EAAUA,EAAU/4D,EAAKmsZ,SAASnpY,IAAIynY,UAC5CryY,EAAK4ja,mBAAsB5ja,EAAK04b,UACjC6B,EAAS94b,SAAS5V,KAAKmU,GACvB3Y,KAAKygb,YAAY5vX,EAAQl4C,EAAMg1L,EAAQ,EAAGr0I,MAItDu5Y,EAAWx3c,UAAU03c,qBAAuB,SAAUliZ,EAAQtwD,EAAMwM,EAAGC,GACnE,IAAI1F,EACA4rc,EAAWriZ,EAAO06Y,WAAWhrc,EAAK+C,IACtC,GAAI4vc,EAAS94b,SAAS3d,OAAQ,CAC1BuQ,GAAK,IACL,IAAK,IAAI7Q,EAAI,EAAGA,EAAI+2c,EAAS94b,SAAS3d,OAAQN,IAE1C4Q,GADAzF,EAAWtH,KAAK+yc,qBAAqBliZ,EAAQqiZ,EAAS94b,SAASje,GAAI4Q,EAAGC,IACzDD,EACbC,EAAI1F,EAAS0F,EAEjBkmc,EAAS94b,SAAW84b,EAAS94b,SAASyd,KAAK,SAAU14B,EAAM+3O,GACvD,OAAOrmL,EAAO06Y,WAAWpsc,EAAKmE,IAAIyJ,EAAI8jD,EAAO06Y,WAAWr0N,EAAK5zO,IAAIyJ,IAErE,IAAIgT,EAAM8wC,EAAO06Y,WAAW2H,EAAS94b,SAAS,GAAG9W,IAAIyc,IACjDzT,EAAMukD,EAAO06Y,WAAW2H,EAAS94b,SAAS84b,EAAS94b,SAAS3d,OAAS,GAAG6G,IAAIgJ,IAQhF,GAPA4mc,EAASnmc,EAAIgT,GAAOzT,EAAMyT,GAAO,EACjChT,EAAIT,EAAMukD,EAAO26Y,kBACjB0H,EAASC,cAAgB7mc,EAAMukD,EAAO26Y,kBACtC0H,EAASnmc,GAAKmmc,EAASl9b,MAAQ,EAC/Bk9b,EAASlmc,GAAKkmc,EAASn9b,OAAS,EAChCm9b,EAASnzb,IAAMA,EACfmzb,EAAS5mc,IAAMA,EACX4mc,EAASnmc,EAAIgT,GAAOmzb,EAAS7B,QAAS,CACtC6B,EAASnmc,EAAIgT,EACbhT,EAAImmc,EAASnmc,EAAImmc,EAASl9b,MAAQ,GAAK1J,EAAMyT,GAAO,EACpDmzb,EAAS7B,SAAU,EACnB,IAASl1c,EAAI,EAAGA,EAAI+2c,EAAS94b,SAAS3d,OAAQN,IAC1CmL,EAAWtH,KAAK+yc,qBAAqBliZ,EAAQqiZ,EAAS94b,SAASje,GAAI4Q,EAAGC,GAE1Ekmc,EAAS7B,SAAU,EACnBtkc,EAAImmc,EAASnmc,EAAImmc,EAASl9b,MAAQ66C,EAAO26Y,kBAG7Cz+b,EAAIA,GADJT,EAAMukD,EAAO06Y,WAAW2H,EAAS94b,SAAS84b,EAAS94b,SAAS3d,OAAS,GAAG6G,IAAI6vc,eAC9D7mc,EAAMS,EACpBC,GAAK,IACLkmc,EAASlmc,EAAIA,OAGbkmc,EAASnmc,EAAIA,EACbmmc,EAASlmc,EAAIA,EACbkmc,EAASnzb,IAAMhT,EACfmmc,EAAS5mc,IAAMS,EAAImmc,EAASl9b,MAC5BjJ,GAAKmmc,EAASl9b,MAAQ66C,EAAO26Y,kBAEjC,OAASz+b,EAAGA,EAAGC,EAAGA,IAEtB6lc,EAAWx3c,UAAU23c,eAAiB,SAAUniZ,GAC5C,IAAIuiZ,KACArzb,EAAM1T,KAAK0T,IAAIxkB,MAAM8Q,KAAMwkD,EAAOiiZ,YAAYl7a,IAAI,SAAUs7a,GAAY,OAAOA,EAASnmc,KAIxF4yF,EAHMtzF,KAAKC,IAAI/Q,MAAM8Q,KAAMwkD,EAAOiiZ,YAAYl7a,IAAI,SAAUs7a,GAC5D,OAAOA,EAASnmc,EAAImmc,EAASl9b,MAAQ66C,EAAO26Y,qBAE/Bzrb,EACjB8wC,EAAOuuB,UA0CP,IAAK,IAzCDngF,EAAU,SAAU9C,GASpB,IAAIk3c,KACJD,GATAA,EAASviZ,EAAOiiZ,YAAY9ra,OAAO,SAAUksa,GACzC,OAAIA,EAAS/gT,QAAUh2J,EACZ+2c,EAGA,QAICr7a,KAAK,SAAUy7a,EAAWC,GAAa,OAAOD,EAAUvmc,EAAIwmc,EAAUxmc,IACtFsmc,EAAStzb,IAAMqzb,EAAO,GAAGrmc,EACzBsmc,EAAS/mc,IAAM8mc,EAAOA,EAAO32c,OAAS,GAAGsQ,EAAIqmc,EAAOA,EAAO32c,OAAS,GAAGuZ,MAAQ66C,EAAO26Y,kBACtF6H,EAASG,oBAAsB,EAC/BH,EAASt9b,OAAS,EAClB,IAAK,IAAIoQ,EAAI,EAAGA,EAAIitb,EAAO32c,OAAQ0pB,IAC3Bitb,EAAOjtb,GAAGpQ,OAASs9b,EAASt9b,SAC5Bs9b,EAASt9b,OAASq9b,EAAOjtb,GAAGpQ,QAEhCs9b,EAASG,qBAAuBnnc,KAAKC,IAAI8mc,EAAOjtb,GAAGnQ,MAAOo9b,EAAOjtb,GAAGpQ,QAChEoQ,IAAMitb,EAAO32c,OAAS,IACtB42c,EAASG,qBAAuB3iZ,EAAO26Y,mBAG/C6H,EAAS5jX,cAAgB4jX,EAAS/mc,IAAM+mc,EAAStzb,IAC7Cszb,EAASG,oBAAsBH,EAAS5jX,gBACxC4jX,EAAS5jX,eAAiB4jX,EAAS5jX,cAAgB4jX,EAASG,qBAAuB,GAEvFH,EAASzmc,OAASymc,EAAS5jX,eAAiB,EAAIpjF,KAAK+Q,IAAMi2b,EAASt9b,OACpEs9b,EAASvhZ,SACL31D,EAAI,GACA00D,EAAOuuB,OAAOjjF,EAAI,GAAGyQ,OAASikD,EAAOuuB,OAAOjjF,EAAI,GAAG4Z,QAAUs9b,EAASzmc,SACtEymc,EAASzmc,OAASikD,EAAOuuB,OAAOjjF,EAAI,GAAGyQ,OAASikD,EAAOuuB,OAAOjjF,EAAI,GAAG4Z,QAG7E,IAAK,IAAIwN,EAAI,EAAGA,EAAI6vb,EAAO32c,OAAQ8mB,IAC/B6vb,EAAO7vb,GAAGkyY,MAAQppZ,KAAKE,IAAI6mc,EAAO7vb,GAAGxW,EAAIqmc,EAAO7vb,GAAGvN,MAAQ,EAAI+J,GAAO4/E,EACtE0zW,EAASvhZ,MAAMttD,KAAK4uc,EAAO7vb,IAE/BstC,EAAOuuB,OAAO56E,KAAK6uc,IAEdl3c,EAAI,EAAGA,GAAK00D,EAAOy6Y,SAAUnvc,IAClC8C,EAAQ9C,IAGhB02c,EAAWx3c,UAAU43c,wBAA0B,SAAUpiZ,GACrD,IAAImqI,EAAOnqI,EAAO06Y,WAAW16Y,EAAOw6Y,WAAW/nc,IAC/C03L,EAAKjuL,EAAI,EACTiuL,EAAKhuL,EAAI,EACT,IAAK,IAAI7Q,EAAI,EAAGA,EAAI00D,EAAOuuB,OAAO3iF,OAAQN,IACtC,IAAK,IAAIonB,EAAI,EAAGA,EAAIstC,EAAOuuB,OAAOjjF,GAAG21D,MAAMr1D,OAAQ8mB,IAAK,CACpD,IAAI2vb,EAAWriZ,EAAOuuB,OAAOjjF,GAAG21D,MAAMvuC,GACtC2vb,EAASnmc,EAAIV,KAAKoV,IAAqB,IAAjByxb,EAASz9C,MAAcppZ,KAAK+Q,GAAK,MAAQyzC,EAAOuuB,OAAOjjF,GAAGyQ,OAASikD,EAAO46Y,gBAAkBtvc,GAClH+2c,EAASlmc,EAAIX,KAAKqV,IAAqB,IAAjBwxb,EAASz9C,MAAcppZ,KAAK+Q,GAAK,MAAQyzC,EAAOuuB,OAAOjjF,GAAGyQ,OAASikD,EAAO46Y,gBAAkBtvc,GAClH00D,EAAOq6Y,QAAU7+b,KAAK0T,IAAI8wC,EAAOq6Y,QAASgI,EAASnmc,GACnD8jD,EAAOs6Y,QAAU9+b,KAAK0T,IAAI8wC,EAAOs6Y,QAAS+H,EAASlmc,KAI/D6lc,EAAWx3c,UAAU0wc,aAAe,SAAUl7Y,EAAQ2xX,GAClD3xX,EAAOq6Y,QAAUr6Y,EAAOw6Y,WAAWx/b,SAAW22a,EAASz1a,EAAI,EAC3D8jD,EAAOs6Y,QAAUt6Y,EAAOw6Y,WAAWp/b,SAAWu2a,EAASx1a,EAAI,GAE/D6lc,EAAWx3c,UAAU2wc,YAAc,SAAUn7Y,EAAQtwD,EAAM+4D,GACvD,IAAI45Y,EAAWriZ,EAAO06Y,WAAWhrc,EAAK+C,IAClCuI,EAAUqnc,EAASnmc,EAAI8jD,EAAOq6Y,QAC9Bj/b,EAAUinc,EAASlmc,EAAI6jD,EAAOs6Y,QAClC5qc,EAAKsL,SAAWA,EAChBtL,EAAK0L,SAAWA,EAChB,IAAK,IAAI9P,EAAI,EAAGA,EAAI+2c,EAAS94b,SAAS3d,OAAQN,IAAK,CAC/C,IAAI8yc,EAAYiE,EAAS94b,SAASje,GAClC6D,KAAKgsc,YAAYn7Y,EAAQyI,EAAU21Y,EAAU3rc,IAAKg2D,KAG1Du5Y,EAAWx3c,UAAUqwc,gBAAkB,SAAU76Y,EAAQhzC,GACrD,IAAI8I,KAYJ,OAXAA,EAAK8Q,KAAO5Z,EAAKva,GACjBqjB,EAAK5Z,EAAI,EACT4Z,EAAK3Z,EAAI,EACT2Z,EAAK5G,IAAM,EACX4G,EAAKra,IAAM,EACXqa,EAAK3Q,MAAQ6H,EAAK6uB,WAAW12B,MAC7B2Q,EAAK5Q,OAAS8H,EAAK6uB,WAAW32B,OAC9B4Q,EAAKvM,YACLuM,EAAKwrI,MAAQ,EACbxrI,EAAK8uY,MAAQ,EACb9uY,EAAK0qb,SAAU,EACR1qb,GAEJksb,KtXjOPY,GAAgC,WAChC,SAASA,EAAeC,GAIpB1zc,KAAK2zc,UAAY,EAIjB3zc,KAAK4zc,UAAY,EAIjB5zc,KAAK8xD,SACL9xD,KAAK6zc,UAAYH,EACjB,IACIh9a,EAAS2jC,GADDr6D,KAAK6zc,WAEjB7zc,KAAK0tB,SAAWgJ,EAAOhD,OACvB1zB,KAAK8xD,SACA4hZ,EAAO9D,SAAStwY,UACjBo0Y,EAAO9D,SAAStwY,YAEfo0Y,EAAO9D,SAASx1b,WACjBs5b,EAAO9D,SAASx1b,aAEpBpa,KAAK8xD,MAAS4hZ,EAAO9D,SAAgB,QAAEr1b,OAAOm5b,EAAO9D,SAASx1b,UAQlE,OAHAq5b,EAAep4c,UAAUy4c,aAAe,WACpC9zc,KAAK6zc,UAAUjE,SAASl8a,OAAS1zB,KAAK0tB,UAEnC+lb,KAMPM,GAAiC,WACjC,SAASA,IACL/zc,KAAKg0c,OAAS,KACdh0c,KAAKi0c,cAAgB,GACrBj0c,KAAKk0c,gBAAkB,IACvBl0c,KAAKm0c,eAAiB,IACtBn0c,KAAKo0c,qBAAwBp+b,MAAOhW,KAAKi0c,cAAel+b,OAAQ/V,KAAKi0c,eAIrEj0c,KAAK8ib,aAAe,EAIpB9ib,KAAK+ib,aAAe/ib,KAAKg0c,OAIzBh0c,KAAK6ib,aAAe7ib,KAAKk0c,gBACzBl0c,KAAK8ib,aAAe9ib,KAAKm0c,eAmO7B,OA9NAJ,EAAgB14c,UAAUiX,QAAU,aAKpCyhc,EAAgB14c,UAAUkkC,cAAgB,WACtC,MAAO,qBAEXw0a,EAAgB14c,UAAUg5c,cAAgB,SAAUC,GAChD,IAAIC,EAAQv0c,KAAKw0c,aACjBD,EAAM3E,SAAS6E,OAASH,EAAmBI,eAAeJ,EAAmBxiZ,OAC7E,IAAI6iZ,EAAgBJ,EAAM3E,SAASgF,WAC/BC,EAAW70c,KAAK80c,kBAAkBH,GAClC71b,EAAQ+1b,EAASp4c,OACrBqiB,EAAQzS,KAAK0T,IAAI/f,KAAK6ib,aAAc/ja,EAAQA,EAAQA,GACpD9e,KAAK+0c,eAAeF,EAAUN,EAAM3E,SAAS6E,QAC7C,IAAK,IAAIt4c,EAAI,EAAG64c,EAAUl2b,EAAO3iB,EAAI64c,EAAS74c,IAC1C6D,KAAKi1c,oBAAoBJ,GACzB70c,KAAKk1c,aAAaL,GAEtB70c,KAAKm1c,mBAAmBN,EAAUN,IAEtCR,EAAgB14c,UAAU05c,eAAiB,SAAUF,EAAUO,GAK3D,IAAK,IAJDC,EAAWhpc,KAAKC,IAAI8oc,EAAWA,EAASp/b,MAAQ,GAAIo/b,EAAWA,EAASr/b,OAAS,IACjFu/b,EAAgBD,EAAW,EAA3BC,EAAiCD,EAAW,EAC5CE,EAAe,EAAIlpc,KAAK+Q,GAAKy3b,EAASp4c,OACtC+4c,EAASD,EACJp5c,EAAI,EAAGA,EAAI04c,EAASp4c,OAAQN,IAAK,CACtC,IAAIu3c,EAASmB,EAAS14c,GACN6D,KAAKy1c,aAAa/B,GACxBhmb,UACN3gB,EAAGuoc,EAAaD,EAAW/9a,OAAQjrB,KAAKoV,IAAI+zb,GAASx2b,QAAQ,IAC7DhS,EAAGsoc,EAAaD,EAAW/9a,OAAOjrB,KAAKqV,IAAI8zb,GAAQx2b,QAAQ,KAE/Dw2b,GAAUD,IAMlBxB,EAAgB14c,UAAU+jP,SAAW,SAAUk1N,GAC3Ct0c,KAAKw0c,aAAeF,EAAmBE,aACvCx0c,KAAKq0c,cAAcC,IAEvBP,EAAgB14c,UAAU45c,oBAAsB,SAAUJ,GAGtD,IAAK,IAFDa,EACAzyD,EACK98X,EAAI,EAAGA,EAAI0ub,EAASp4c,OAAQ0pB,IAAK,CAItC,IAAK,IAHDutb,EAASmB,EAAS1ub,GAElB2rC,GADJ4jZ,EAAY11c,KAAKy1c,aAAa/B,IACR5hZ,MACbrqB,EAAI,EAAGA,EAAIqqB,EAAMr1D,OAAQgrC,IAAK,CAE/B6yB,IADAq7Y,EAAU7jZ,EAAMrqB,IACWnkC,GAAIuxc,IAC/B70c,KAAK41c,eAAeF,EAAW11c,KAAKy1c,aAAaE,IAGzD,IAAK,IAAIx5c,EAAI,EAAGs+B,EAAWq3B,EAAMr1D,OAAQN,EAAIs+B,KACrCA,EAAW,GADoCt+B,IAAK,CAIxD,IAAI05c,EAAO71c,KAAKy1c,aAAa3jZ,EAAM31D,IAC/B25c,EAAQ35c,EAAI,GAAKs+B,EAAYz6B,KAAKy1c,aAAa3jZ,EAAM,IAAM9xD,KAAKy1c,aAAc3jZ,EAAM31D,EAAI,IACxFolB,EAAS,IAAMuwC,EAAMr1D,OAAS,EAAK4P,KAAK+Q,GAAK,IAC7C24b,EAAiB,EAAI/1c,KAAK8ib,aAAez2a,KAAKqV,IAAIH,GACtDvhB,KAAKg2c,iBAAiBH,EAAMC,EAAMC,GAEtC,IAAK,IAAIrua,EAAI,EAAGA,EAAImta,EAASp4c,OAAQirC,IAAK,CACtC,IAAIiua,EACCr7Y,IADDq7Y,EAAUd,EAASnta,IACSpkC,GAAIwuD,IAAU6jZ,EAAQryc,KAAOowc,EAAOpwc,KAChE2/Y,EAAQjjZ,KAAKy1c,aAAaE,GAC1B31c,KAAKi2c,eAAeP,EAAWzyD,OAK/C8wD,EAAgB14c,UAAU65c,aAAe,SAAUL,GAE/C,IAAK,IADDqB,EAAU,KACL/vb,EAAI,EAAGA,EAAI0ub,EAASp4c,OAAQ0pB,IAAK,CACtC,IAAIutb,EAASmB,EAAS1ub,GAElBgwb,GADJD,EAAUl2c,KAAKy1c,aAAa/B,IACNhmb,SACtByob,EAAQppc,GAAKV,KAAK0T,IAAIm2b,EAAQvC,UAAW3zc,KAAKo0c,oBAAoBp+b,OAClEmgc,EAAQnpc,GAAKX,KAAK0T,IAAIm2b,EAAQtC,UAAW5zc,KAAKo0c,oBAAoBr+b,QAClEmgc,EAAQvC,UAAY,EACpBuC,EAAQtC,UAAY,EACpBsC,EAAQxob,SAAWyob,IAG3BpC,EAAgB14c,UAAU85c,mBAAqB,SAAUN,EAAUN,GAI/D,IAAK,IADDb,EAFA0C,GAAUpgc,MAAOshB,OAAOC,UAAWxhB,OAAQuhB,OAAOC,WAClD2+a,EAAU,KAEL/vb,EAAI,EAAGA,EAAI0ub,EAASp4c,OAAQ0pB,IAAK,CACtCutb,EAASmB,EAAS1ub,GAElB,IAAIkwb,GACAtpc,GAFJmpc,EAAUl2c,KAAKy1c,aAAa/B,IAEbhmb,SAAS3gB,EAAI2mc,EAAOhna,WAAW12B,MAAQ,EAClDhJ,EAAGkpc,EAAQxob,SAAS1gB,EAAI0mc,EAAOhna,WAAW32B,OAAS,GAEvDqgc,EAAMpgc,MAAQ3J,KAAK0T,IAAIq2b,EAAMpgc,MAAOqgc,EAAWtpc,GAC/Cqpc,EAAMrgc,OAAS1J,KAAK0T,IAAIq2b,EAAMrgc,OAAQsgc,EAAWrpc,GAErD,IAASmZ,EAAI,EAAGA,EAAI0ub,EAASp4c,OAAQ0pB,IAAK,CACtCutb,EAASmB,EAAS1ub,IAEdkwb,GADJH,EAAUl2c,KAAKy1c,aAAa/B,IACHhmb,UACd3gB,GAAKqpc,EAAMpgc,OAASu+b,EAAM3E,SAASlib,SAAW6mb,EAAM3E,SAASlib,SAAS3gB,EAAI,GACrFspc,EAAWrpc,GAAKopc,EAAMrgc,QAAUw+b,EAAM3E,SAASlib,SAAW6mb,EAAM3E,SAASlib,SAAS1gB,EAAI,GACtFkpc,EAAQxob,SAAW2ob,EACnBH,EAAQpC,iBAGhBC,EAAgB14c,UAAUy5c,kBAAoB,SAAUD,GAGpD,IAAK,IAFDyB,KAEKl4c,EAAK,EAAGC,EADNC,OAAOhB,KAAKu3c,GACSz2c,EAAKC,EAAO5B,OAAQ2B,IAAM,CACtD,IAAI+nB,EAAI9nB,EAAOD,GACf,GAAIy2c,EAAS1ub,GAAI,CACb,IAAIutb,EAASmB,EAAS1ub,GAClBuvb,EAAY,IAAIjC,GAAeC,GACnCA,EAAO9D,SAASl+b,IAAMgkc,EACtBY,EAAY9xc,KAAKkvc,IAGzB,OAAO4C,GAKXvC,EAAgB14c,UAAUo6c,aAAe,SAAU/B,GAC/C,OAAOA,EAAO9D,SAASl+b,KAE3Bqic,EAAgB14c,UAAU46c,eAAiB,SAAUM,EAAUC,GAC3D,GAAgB,MAAZA,GAAgC,MAAZD,EAAxB,CAGA,IAAIl8Z,EAAWr6C,KAAKy2c,cAAcF,EAAS7ob,SAAU8ob,EAAS9ob,UAC1DnM,EAAQvhB,KAAK02c,UAAUH,EAAS7ob,SAAU8ob,EAAS9ob,UACnDqob,EAAsC,GAApB/1c,KAAK8ib,aACvBzoY,EAAW07Z,GACX/1c,KAAK22c,UAAUt8Z,EAAU07Z,EAAgBx0b,EAAOi1b,KAGxDzC,EAAgB14c,UAAUq7c,UAAY,SAAUniH,EAAKC,GACjD,IAAIhzU,EAAU,EACVo1b,EAAKpiH,EAAIznV,EAAIwnV,EAAIxnV,EACjB8pc,EAAKriH,EAAIxnV,EAAIunV,EAAIvnV,EA6BrB,OA5BW,IAAP4pc,EAEIp1b,EADAq1b,GAAM,EACK,EAAMxqc,KAAK+Q,GAAM,EAGlB/Q,KAAK+Q,GAAK,EAGZ,IAAPy5b,EAEDr1b,EADAo1b,EAAK,EACKvqc,KAAK+Q,GAGL,GAIdoE,EAAUnV,KAAKyqc,KAAKD,EAAKD,GACrBA,EAAK,GAAKC,EAAK,EACfr1b,EAAUnV,KAAK+Q,GAAKoE,EAEfo1b,EAAK,GAAKC,EAAK,EACpBr1b,EAAUnV,KAAK+Q,GAAKoE,EAEfo1b,EAAK,GAAKC,EAAK,IACpBr1b,EAAU,EAAMnV,KAAK+Q,GAAKoE,IAG3BA,GAEXuyb,EAAgB14c,UAAUo7c,cAAgB,SAAUliH,EAAKC,GACrD,IAAIjmU,EAAI,EACJulU,EAAKU,EAAIznV,EAAIwnV,EAAIxnV,EACjBgkC,EAAKyjT,EAAIxnV,EAAIunV,EAAIvnV,EACjBgiC,EAAK8kT,EAAKA,EAAO/iT,EAAKA,EAI1B,OAHI/B,EAAI,IACJzgB,EAAIliB,KAAKQ,KAAKmiC,IAEXzgB,GAEXwlb,EAAgB14c,UAAU26c,iBAAmB,SAAUO,EAAUC,EAAUT,GACvE,IAAI17Z,EAAWr6C,KAAKy2c,cAAcF,EAAS7ob,SAAU8ob,EAAS9ob,UAC1DnM,EAAQvhB,KAAK02c,UAAUH,EAAS7ob,SAAU8ob,EAAS9ob,UACnD2sB,EAAW07Z,GACX/1c,KAAK22c,UAAUt8Z,EAAU07Z,EAAgBx0b,EAAOi1b,IAMxDzC,EAAgB14c,UAAUonb,aAAe,SAAUxO,EAAgBpiX,EAAYklZ,EAAiBz9Y,EAAWzI,EAAQ2xX,IAC3F,IAAIw0B,IACVv0B,aAAaxO,EAAgBpiX,EAAYklZ,EAAiBz9Y,EAAWzI,EAAQ2xX,IAE/FuxB,EAAgB14c,UAAUu6c,eAAiB,SAAUW,EAAUC,GAC3D,IAAIn8Z,EAAWr6C,KAAKy2c,cAAcF,EAAS7ob,SAAU8ob,EAAS9ob,UAC1DnM,EAAQvhB,KAAK02c,UAAUH,EAAS7ob,SAAU8ob,EAAS9ob,WACnD2sB,EAAWr6C,KAAK8ib,cAAgBzoY,EAAWr6C,KAAK8ib,eAChD9ib,KAAK22c,UAAUt8Z,EAAUr6C,KAAK8ib,aAAcvha,EAAOi1b,IAG3DzC,EAAgB14c,UAAUs7c,UAAY,SAAUt8Z,EAAU48Z,EAAS11b,EAAOi1b,GACtE,IAAI13b,EAAQ03b,EAAS1kZ,MAAMr1D,OACvBA,EAAS49C,EAAW48Z,EACpB35a,EAASt9B,KAAK+ib,cAAgBjka,EAAQA,GAASzS,KAAKQ,KAAKiS,GAC7D,GAAe,IAAXriB,EAAc,CACd,IACIy6c,EADYz6c,EAAS6gC,EAErBzxB,EAAUQ,KAAKoV,IAAIF,GAAS21b,EAC5Bjrc,EAAUI,KAAKqV,IAAIH,GAAS21b,EAChCV,EAAS7C,WAAa9nc,EACtB2qc,EAAS5C,WAAa3nc,IAGvB8nc,KAGPiD,GAAoC,WACpC,SAASA,IACLh3c,KAAKm3c,gBACLn3c,KAAKo3c,wBACLp3c,KAAKq3c,gBACLr3c,KAAKs3c,eA4aT,OAvaAN,EAAmB37c,UAAUonb,aAAe,SAAUxO,EAAgBpiX,EAAYklZ,EAAiBz9Y,EAAWzI,EAAQ2xX,GAClHxib,KAAKs5D,UAAYA,EACjBt5D,KAAK8xD,MAAQmiX,EACbj0a,KAAK6xD,WAAaA,EAClB,IAAI0lZ,EAAgBtjC,EAChBsjC,EAAc96c,OAAS,IACvBuD,KAAKw3c,oBAAsBzqa,GAAYwqa,EAAc,KAEzD,IAAK,IAAIn5c,EAAK,EAAGq5c,EAAmBxjC,EAAgB71a,EAAKq5c,EAAiBh7c,OAAQ2B,IAAM,CACpF,IACIs5c,OAAkB,GACtBA,EAFIn3c,EAAOk3c,EAAiBr5c,IAGZwxc,YAChB8H,EAAgB9H,SAAS+H,UAAY,OACrC33c,KAAKq3c,aAAa7yc,KAAKkzc,GAE3B,IAAK,IAAI70c,EAAK,EAAG0jb,EAAe10X,EAAYhvD,EAAK0jb,EAAa9pb,OAAQoG,IAAM,CACxE,IACI+0c,OAAuB,GAC3BA,EAFgBrxB,EAAa1jb,IAGR+sc,YACrBgI,EAAqBhI,SAAS+H,UAAY,YAC1C33c,KAAKq3c,aAAa7yc,KAAKozc,GAE3B53c,KAAK63c,cAAc73c,KAAKq3c,aAAcN,GAEtC,IAAK,IADDe,EAAc93c,KAAK00c,eAAe6C,GAC7Bp7c,EAAI,EAAGA,EAAIo7c,EAAc96c,OAAQN,IAAK,CAC3C,IAAIoE,EAAOg3c,EAAcp7c,GACrB47c,GAASv1B,EAASz1a,EAAI+qc,EAAY9hc,OAAS,EAC3CymB,EAASo0B,EAAOp0B,WACpBA,EAEOjwB,KAAOiwB,EAAOjwB,MAAQ,EAC7BiwB,EAAOhwB,MAAQgwB,EAAOhwB,OAAS,EAC/BgwB,EAAO/vB,IAAM+vB,EAAO/vB,KAAO,EAC3B+vB,EAAO9vB,OAAS8vB,EAAO9vB,QAAU,EAC7BkkD,EAAOp0B,OAAOjwB,OACdiwB,EAAOjwB,KAAOqkD,EAAOp0B,OAAOjwB,MAE5BqkD,EAAOp0B,OAAO/vB,MACd+vB,EAAO/vB,IAAMmkD,EAAOp0B,OAAO/vB,KAE/B,IAAIonV,EAAMvzV,EAAKqvc,SAASl+b,IAAIgc,SAAS3gB,GAAKxM,EAAKsL,QAAWtL,EAAKmsC,WAAW12B,MAAQ,GAC9E8hc,EAAY/qc,EAAIgrc,EAAQt7a,EAAOjwB,KAC/BukC,EAAMxwC,EAAKqvc,SAASl+b,IAAIgc,SAAS1gB,GAAKzM,EAAK0L,QAAW1L,EAAKmsC,WAAW32B,OAAS,GAAM+hc,EAAY9qc,EAAIyvB,EAAO/vB,IAChHnM,EAAKsL,SAAWioV,EAChBvzV,EAAK0L,SAAW8kC,SACTxwC,EAAKqvc,SAEhB,OAAO,GAKXoH,EAAmB37c,UAAUq5c,eAAiB,SAAUsD,GACpDA,EAASA,EAAO32c,QAIhB,IAAK,IADDd,EAFA8yB,EAAO,KACPkoX,EAAQ,KAEHp/Y,EAAI,EAAGA,EAAI67c,EAAOv7c,OAAQN,IAAK,CAEpC,IAAIu6B,EAAS2jC,GADb95D,EAAOy3c,EAAO77c,IAEdk3B,EAAO,IAAI6C,GAAK31B,EAAKqvc,SAASl+b,IAAMnR,EAAKqvc,SAASl+b,IAAIgc,SAAS3gB,EAAI2pB,EAAO3pB,EAAGxM,EAAKqvc,SAASl+b,IAAMnR,EAAKqvc,SAASl+b,IAAIgc,SAAS1gB,EAAI0pB,EAAO1pB,EAAGzM,EAAKmsC,WAAW12B,MAAOzV,EAAKmsC,WAAW32B,QAE7KwlY,EADAA,EACQA,EAAMz2V,UAAUzxB,GAGhBA,EAGhB,OAAOkoX,GAEXy7D,EAAmB37c,UAAUw8c,cAAgB,SAAUI,EAAelB,GAClE/2c,KAAKk4c,oBAAoBD,GACzB,IAAIx2O,EAAaw2O,EAAcx7c,OAC/B,GAAIglO,EAAa,EAAG,CAIhB,IAAK,IAHD02O,KACArmZ,KACAsmZ,KACK1wa,EAAI,EAAGA,EAAIuwa,EAAcx7c,OAAQirC,IAAK,CAC3C,IAAIgga,EAAKuQ,EAAcvwa,QACSvsC,IAA5Busc,EAAGkI,SAASyI,cACZ3Q,EAAGkI,SAASyI,aAAc,GAEA,cAA1B3Q,EAAGkI,SAAS+H,WAA8BjQ,EAAGkI,SAASyI,YAGvB,cAA1B3Q,EAAGkI,SAAS+H,UACjBQ,EAAe3zc,KAAKkjc,GAGpB0Q,EAAY5zc,KAAKkjc,GANjB51Y,EAAMttD,KAAKkjc,GAWnB,IAFA51Y,EAAQA,EAAMv3C,OAAO69b,GACrBtmZ,EAAQqmZ,EAAe59b,OAAOu3C,GACvB2vK,EAAazhO,KAAKs4c,iBAAiBt4c,KAAKs3c,cAE3C,GADAt3c,KAAKu4c,mBAAmBzmZ,GACC,MAArB9xD,KAAKw0c,aAAT,CAGAuC,EAAgB33N,SAASp/O,MACzBA,KAAKw0c,aAAe,KACpBx0c,KAAKm3c,gBACL,IAAK,IAAI/4c,EAAK,EAAGyE,EAAK7C,KAAKo3c,qBAAsBh5c,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACnDyE,EAAGzE,GACTwxc,SAASyI,aAAc,GAGzCr4c,KAAKs3c,YAAc,KACnBt3c,KAAKw0c,aAAe,KAExB,OAAO,GAEXwC,EAAmB37c,UAAUk9c,mBAAqB,SAAUzmZ,GACxD,IAAK,IAAI31D,EAAI,EAAGA,EAAI21D,EAAMr1D,OAAQN,IAAK,CACnC,IAAIoE,EAAOuxD,EAAM31D,GACjB,IAAKm+D,GAAmB/5D,EAAK+C,GAAItD,KAAKs3c,aAAc,CAC5C/2c,GACAP,KAAKw4c,YAAYj4c,GAErB,SAIZy2c,EAAmB37c,UAAUm9c,YAAc,SAAUj4c,GACjD,IAAIk4c,EAAYl4c,EACgB,cAA5BA,EAAKqvc,SAAS+H,UACd33c,KAAK04c,iBAAiBn4c,GAEJ,MAAbk4c,GACDz4c,KAAK24c,QAAQp4c,EAAM,YACnBP,KAAK24c,QAAQp4c,EAAM,YACfP,KAAK44c,yBAAyBH,IAC9Bz4c,KAAKw0c,cAAiB5E,aACtB5vc,KAAKw0c,aAAa5E,SAASiJ,WAAa,GACxC74c,KAAKw0c,aAAa5E,SAASkJ,UAAY,GACvC94c,KAAK+4c,qBAAqBN,IAG1Bz4c,KAAKw0c,aAAej0c,IAKpCy2c,EAAmB37c,UAAU09c,qBAAuB,SAAUN,GAC1D,IAAIlE,EAAQv0c,KAAKw0c,aACZD,EAAM3E,SAASgF,aAChBL,EAAM3E,SAASgF,eAEnB,IAAIr0c,EAAOk4c,EACX,GAAY,MAARl4c,GAAgBP,KAAK24c,QAAQp4c,EAAM,UAAW,CAC9C,IAAI2R,EAAW3R,EAAK+C,GACpB,GAAKtD,KAAKg5c,mBAAmBzE,EAAM3E,SAASgF,WAAYr0c,GAKnD,CACD,IAAIszc,EAAYU,EAAM3E,SAASgF,WAAW1ic,GACtC2hc,EAAUjE,SAASqJ,QACnBpF,EAAUjE,SAASqJ,OAAQ,EAC3Bj5c,KAAKk5c,sBAAsBrF,GAC3B7zc,KAAKm5c,iBAAiBV,QAViC,CAC3D,IAAI/E,EAAS1zc,KAAKo5c,aAAa74c,GAC/BP,KAAKk5c,sBAAsBxF,GAC3B1zc,KAAKm5c,iBAAiBV,MAYlCzB,EAAmB37c,UAAU89c,iBAAmB,SAAUV,GACtDz4c,KAAKq5c,kBAAkBZ,EAAW,WAClCz4c,KAAKq5c,kBAAkBZ,EAAW,aAEtCzB,EAAmB37c,UAAUg+c,kBAAoB,SAAUZ,EAAWa,GAClE,IAAInsC,KACuB,YAAvBmsC,EACAnsC,EAAQsrC,EAAU9rD,QAEU,aAAvB2sD,IACLnsC,EAAQsrC,EAAU/rD,UAEtB,IAAK,IAAIvwZ,EAAI,EAAGA,EAAIgxa,EAAM1wa,OAAQN,IAAK,CACnC,IAAIwc,EAAO3Y,KAAKs5D,UAAU6zW,EAAMhxa,IAChC,GAAI6D,KAAK24c,QAAQhgc,EAAM,UAAW,CAC9B,IAAI4gc,EAAWv5c,KAAKs5D,UAAU3gD,EAAK2+B,UAC/Bkia,EAASx5c,KAAKs5D,UAAU3gD,EAAKqyY,UACN,YAAvBsuD,GAAgD,MAAZC,GACpCj/Y,GAAmBi/Y,EAASj2c,GAAItD,KAAK8xD,OACrC9xD,KAAK+4c,qBAAqB/4c,KAAKs5D,UAAU3gD,EAAK2+B,WAElB,aAAvBgia,GAA+C,MAAVE,GAC1Cl/Y,GAAmBk/Y,EAAOl2c,GAAItD,KAAK8xD,QACnC9xD,KAAK+4c,qBAAqB/4c,KAAKs5D,UAAU3gD,EAAKqyY,cAK9DgsD,EAAmB37c,UAAU69c,sBAAwB,SAAUrF,GAC3D7zc,KAAKy5c,oBAAoB5F,GACzB7zc,KAAK05c,qBAAqB7F,IAE9BmD,EAAmB37c,UAAU29c,mBAAqB,SAAUj8c,EAAK48c,GAE7D,IAAK,IADDr8c,EAAOgB,OAAOhB,KAAKP,GACdZ,EAAI,EAAGA,EAAImB,EAAKb,OAAQN,IAC7B,GAAImB,EAAKnB,KAAOw9c,EAAOr2c,GACnB,OAAO,EAGf,OAAO,GAEX0zc,EAAmB37c,UAAUi9c,iBAAmB,SAAUv7c,GAEtD,OADWuB,OAAOhB,KAAKP,GACXN,QAEhBu6c,EAAmB37c,UAAUq+c,qBAAuB,SAAU7F,GAG1D,IAAK,IAFDU,EAAQv0c,KAAKw0c,aACbiE,EAAY5E,EACPnsa,EAAI,EAAGA,EAAI+wa,EAAU/rD,SAASjwZ,OAAQirC,IAAK,CAChD,IAAI/uB,EAAO3Y,KAAKs5D,UAAUm/Y,EAAU/rD,SAAShlX,IAC7C,IAAK/uB,EAAKi3b,SAASyI,YAAa,CAC5B,IAAI93c,EAAOP,KAAKs5D,UAAU3gD,EAAKqyY,UAC/B,GAAI1wV,GAAmB/5D,EAAK+C,GAAItD,KAAK8xD,QAAkB,MAARvxD,GAAgBA,EAAKi3B,QAAS,CACzE,IAAIoib,OAAiB,EAChB55c,KAAKg5c,mBAAmBzE,EAAM3E,SAASgF,WAAYr0c,GAKpDq5c,EAAiBrF,EAAM3E,SAASgF,WAAWr0c,EAAK+C,KAJhDs2c,EAAiB55c,KAAKo5c,aAAa74c,IACpBqvc,SAASqJ,OAAQ,EAK/BpF,EAAUjE,SAASx1b,WACpBy5b,EAAUjE,SAASx1b,aAElBw/b,EAAehK,SAAStwY,UACzBs6Y,EAAehK,SAAStwY,YAE5Bt/D,KAAK65c,QAAQD,EAAehK,SAAStwY,QAASu0Y,GAC1C7zc,KAAK85c,SAASjG,EAAUjE,SAASx1b,SAAUw/b,EAAet2c,IAAM,GAChEuwc,EAAUjE,SAASx1b,SAAS5V,KAAKo1c,OAMrD5C,EAAmB37c,UAAUo+c,oBAAsB,SAAU5F,GAGzD,IAAK,IAFDU,EAAQv0c,KAAKw0c,aACbiE,EAAY5E,EACPnsa,EAAI,EAAGA,EAAI+wa,EAAU9rD,QAAQlwZ,OAAQirC,IAAK,CAC/C,IAAI/uB,EAAO3Y,KAAKs5D,UAAUm/Y,EAAU9rD,QAAQjlX,IAC5C,IAAK/uB,EAAKi3b,SAASyI,YAAa,CAC5B,IAAI93c,EAAOP,KAAKs5D,UAAU3gD,EAAK2+B,UAC/B,GAAIgjB,GAAmB/5D,EAAK+C,GAAItD,KAAK8xD,QAAkB,MAARvxD,GAAgBA,EAAKi3B,QAAS,CACzE,IAAIk8a,OAAS,EACR1zc,KAAKg5c,mBAAmBzE,EAAM3E,SAASgF,WAAYr0c,GAKpDmzc,EAASa,EAAM3E,SAASgF,WAAWr0c,EAAK+C,KAJxCowc,EAAS1zc,KAAKo5c,aAAa74c,IACpBqvc,SAASqJ,OAAQ,EAKvBpF,EAAUjE,SAAStwY,UACpBu0Y,EAAUjE,SAAStwY,YAElBo0Y,EAAO9D,SAASx1b,WACjBs5b,EAAO9D,SAASx1b,aAEpBpa,KAAK65c,QAAQnG,EAAO9D,SAASx1b,SAAUy5b,GACnC7zc,KAAK85c,SAASjG,EAAUjE,SAAStwY,QAASo0Y,EAAOpwc,IAAM,GACvDuwc,EAAUjE,SAAStwY,QAAQ96D,KAAKkvc,OAMpDsD,EAAmB37c,UAAUw+c,QAAU,SAAUh3W,EAAMtiG,GACnD,IAAIy/V,EAAShgW,KAAK85c,SAASj3W,EAAMtiG,EAAK+C,IAClC08V,GAAU,GAAKA,EAASn9P,EAAKpmG,OAC7BomG,EAAKm9P,GAAUz/V,EAGfsiG,EAAKr+F,KAAKjE,IAGlBy2c,EAAmB37c,UAAUy+c,SAAW,SAAUj3W,EAAMk3W,GACpD,IAAI/5G,GAAU,EACd,GAAY,MAARn9P,GAA6B,KAAbk3W,EAChB,IAAK,IAAI59c,EAAI,EAAG69c,EAAUn3W,EAAKpmG,OAAQN,EAAI69c,EAAS79c,IAAK,CACrD,IAAIu3c,EAAS7wW,EAAK1mG,GAClB,GAAwB,oBAAYu3c,IAAWqG,EAAU,CACrD/5G,EAAS7jW,EACT,MAEC,GAAc,MAAVu3c,GAAkBA,EAAOpwc,KAAOy2c,EAAU,CAC/C/5G,EAAS7jW,EACT,OAIZ,OAAO6jW,GAEXg3G,EAAmB37c,UAAU+9c,aAAe,SAAU74c,GAClD,IAAIg0c,EAAQv0c,KAAKw0c,aACZD,EAAM3E,SAASgF,aAChBL,EAAM3E,SAASgF,eAEnB,IAAIlB,EAASnzc,EACb,GAAa,MAATg0c,EAAe,CACfA,EAAM3E,SAASgF,WAAWlB,EAAOpwc,IAAMowc,EACvC,IAAIuG,EAAaj6c,KAAKw3c,oBACJ,MAAdyC,GAAsB15c,EAAK+C,KAAO22c,EAAW32c,KAC7CtD,KAAKw3c,oBAAsB9D,GAGnC,OAAOA,GAEXsD,EAAmB37c,UAAUu9c,yBAA2B,SAAUlF,GAC9D,IAAIwG,GAAsB,EAU1B,OATaxG,EAAc,QAAEn5b,OAAOm5b,EAAOhnD,UACjCjwZ,OAAS,IACQ,MAAlBi3c,EAAO/mD,SAAqB+mD,EAAO/mD,QAAQlwZ,OAAS,IACrDy9c,EAAsBl6c,KAAKm6c,qBAAqBzG,EAAO/mD,QAAS,cAE9DutD,GAA4C,MAAnBxG,EAAOhnD,UAAsBgnD,EAAOhnD,SAASjwZ,OAAS,IACjFy9c,EAAsBl6c,KAAKm6c,qBAAqBzG,EAAOhnD,SAAU,YAGlEwtD,GAEXlD,EAAmB37c,UAAU8+c,qBAAuB,SAAUC,EAAsBC,GAEhF,IAAK,IADDH,GAAsB,EACjB/9c,EAAI,EAAGA,EAAIi+c,EAAqB39c,OAAS,EAAGN,IAAK,CACtD,IAAIwc,EAAO3Y,KAAKs5D,UAAU8gZ,EAAqBj+c,IAC/C,GAAK6D,KAAK24c,QAAQhgc,EAAM,aAGnBA,EAAKi3b,SAASyI,cAAyC,aAAxBgC,GAAuE,MAAjCr6c,KAAKs5D,UAAU3gD,EAAK2+B,WAC9D,WAAxB+ia,GAAqE,MAAjCr6c,KAAKs5D,UAAU3gD,EAAKqyY,YAAqB,CACjFkvD,GAAsB,EACtB,OAGR,OAAOA,GAEXlD,EAAmB37c,UAAUq9c,iBAAmB,SAAUn4c,GACtD,IAAI+5c,EAAW/5c,EACf,GAAgB,MAAZ+5c,IAAqBA,EAAS1K,SAASyI,aAAer4c,KAAK24c,QAAQp4c,EAAM,UAAW,CACpFP,KAAK24c,QAAQp4c,EAAM,YACnB,IAAIg5c,EAAWv5c,KAAKs5D,UAAUghZ,EAAShja,UACnCkia,EAASx5c,KAAKs5D,UAAUghZ,EAAStvD,UACrB,MAAZuuD,EACAv5c,KAAKw4c,YAAYe,GAEF,MAAVC,EACLx5c,KAAKw4c,YAAYgB,GAGjBx5c,KAAKw0c,aAAej0c,IAIhCy2c,EAAmB37c,UAAUs9c,QAAU,SAAU4B,EAAWC,GACxD,IACIj6c,EAAOg6c,EAMX,MALwB,WAApBC,GAAiCj6c,EAAKi3B,SACjCx3B,KAAKg5c,mBAAmBh5c,KAAKs3c,YAAa/2c,KAC3CP,KAAKs3c,YAAY/2c,EAAK+C,IAAM/C,KAG/BA,EAAKi3B,SAKdw/a,EAAmB37c,UAAU68c,oBAAsB,SAAUpmZ,GAGzD,IAAK,IAFD2oZ,KACAC,KACKv0b,EAAI,EAAGA,EAAI2rC,EAAMr1D,OAAQ0pB,IACQ,cAAhC2rC,EAAM3rC,GAAGypb,SAAS+H,WACpB8C,EAAOj2c,KAAKstD,EAAM3rC,IAG1B,GAAIs0b,EAAOh+c,OAAS,EAGhB,IAFAi+c,EAAal2c,KAAKi2c,EAAO,IACzBz6c,KAAKm3c,aAAa3yc,KAAKi2c,EAAO,IACvBC,EAAaj+c,OAAS,GAAG,CAC5B,IAAIokD,EAAQ65Z,EAAaA,EAAaj+c,OAAS,GAC3C8U,EAAavR,KAAK26c,uBAAuB95Z,GAC7C,GAAItvC,EAAW9U,OAAS,EAAG,CACvB,IAAI4D,EAAQkR,EAAW,GACnBqpc,EAAcrpc,EAAWA,EAAW9U,OAAS,GAC7C69D,GAAmBj6D,EAAMiD,GAAItD,KAAKm3c,eAClCyD,EAAYhL,SAASyI,aAAc,EACnCr4c,KAAKo3c,qBAAqB5yc,KAAKo2c,KAG/BF,EAAal2c,KAAKnE,GAClBL,KAAKm3c,aAAa9ub,OAAO,EAAG,EAAGhoB,SAInCq6c,EAAatuT,QAK7B4qT,EAAmB37c,UAAUs/c,uBAAyB,SAAUjuc,GAC5D,IAAI6E,KACJ,GAAI7E,EAAIggZ,SAASjwZ,OAAS,EAAG,CACzB,IAAK,IAAIN,EAAI,EAAGA,EAAIuQ,EAAIggZ,SAASjwZ,OAAQN,IAAK,CAC1C,IAAI0+c,EAAM76c,KAAKs5D,UAAU5sD,EAAIggZ,SAASvwZ,IACtC,IAAKm+D,GAAmBugZ,EAAIv3c,GAAItD,KAAKm3c,cAAe,CAChD,IAAIqC,EAASx5c,KAAKs5D,UAAUuhZ,EAAI7vD,UAMhC,OALc,MAAVwuD,GACAjoc,EAAW/M,KAAKg1c,GAEpBjoc,EAAW/M,KAAKq2c,GAChB76c,KAAKm3c,aAAa9ub,OAAO,EAAG,EAAGwyb,GACxBtpc,GAGf,OAAOA,EAEX,OAAOA,GAEJylc,KuXhtBP8D,GAAyC,WAKzC,SAASA,KAyBT,OAjBAA,EAAwBz/c,UAAUiX,QAAU,aAQ5Cwoc,EAAwBz/c,UAAUkkC,cAAgB,WAI9C,MAAO,2BAEXu7a,EAAwBz/c,UAAU+jP,SAAW,SAAUttL,EAAOwH,EAAWzI,EAAQ2xX,IAC7E,IAAIu4B,IAAyB37N,SAASttL,EAAOwH,EAAWzI,EAAQ2xX,IAE7Ds4B,KAMPC,GAAwC,WACxC,SAASA,IACL/6c,KAAKs5D,aACLt5D,KAAKg7c,eAAiB,IAAIC,GAo1B9B,OA/0BAF,EAAuB1/c,UAAU6/c,aAAe,SAAU36c,EAAMvD,EAAO+P,EAAGC,EAAGgJ,EAAOD,GAMhF,OAHI/Y,MAAOA,EAAOm+c,UAFDpuc,EAAGA,EAAGC,EAAGA,EAAGgJ,MAAOA,EAAOD,OAAQA,GAEb0hB,KAAMz6B,EAAOy9c,QAAQ,EACvD9tD,QAASpsZ,EAAKosZ,QAAQtrZ,QAASqrZ,SAAUnsZ,EAAKmsZ,SAASrrZ,UAQ/D05c,EAAuB1/c,UAAU+/c,SAAW,SAAU76c,GAClD,IAAI4sa,KACJ,GAAI5sa,EAAM,CACN,IAAK,IAAIpE,EAAI,EAAGoE,EAAKosZ,QAAQlwZ,OAAS,GAAKN,EAAIoE,EAAKosZ,QAAQlwZ,OAAQN,IAChEgxa,EAAM3oa,KAAKxE,KAAKs5D,UAAU/4D,EAAKosZ,QAAQxwZ,KAE3C,IAASA,EAAI,EAAGoE,EAAKmsZ,SAASjwZ,OAAS,GAAKN,EAAIoE,EAAKmsZ,SAASjwZ,OAAQN,IAClEgxa,EAAM3oa,KAAKxE,KAAKs5D,UAAU/4D,EAAKmsZ,SAASvwZ,KAGhD,OAAOgxa,GAKX4tC,EAAuB1/c,UAAUggd,UAAY,SAAUC,GAInD,IAAK,IAHDC,KACAC,EAAO,KACPC,GAAW,IACNr9c,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKg+c,GAAWl9c,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAM/D,IAAK,IAJD6kE,EAAOq4Y,EADHz4c,EAAGzE,IAEPs9c,EAAQ17c,KAAKo7c,SAASn4Y,GACtBypV,EAAW,EACXC,EAAU,EACLxmY,EAAI,EAAGA,EAAIu1b,EAAMj/c,OAAQ0pB,IAAK,CACzBnmB,KAAK27c,mBAAmBD,EAAMv1b,IAAI,GACpCsR,OAASwrC,EAAKxrC,KAClBi1X,IAGAC,IAGQ,IAAZA,GAAiBD,EAAW,GAC5B6uD,EAAM/2c,KAAKy+D,GAEf,IAAIwa,EAAOivU,EAAWC,EAClBlvU,EAAOg+X,IACPA,EAAUh+X,EACV+9X,EAAOv4Y,GAMf,OAHqB,IAAjBs4Y,EAAM9+c,QAAwB,MAAR++c,GACtBD,EAAM/2c,KAAKg3c,GAERD,GAMXR,EAAuB1/c,UAAUsgd,mBAAqB,SAAUhjc,EAAMpc,GAClE,IAAIq/c,EAAgB57c,KAAKs5D,UAAU3gD,EAAKqyY,UACpCzuZ,IACAq/c,EAAgB57c,KAAKs5D,UAAU3gD,EAAK2+B,WAExC,IAAK,IAAIn7C,EAAI,EAAGA,EAAI6D,KAAKs7c,SAAS7+c,OAAQN,IACtC,GAAI6D,KAAKs7c,SAASn/c,GAAGs7B,OAASmkb,EAAct4c,GACxC,OAAOtD,KAAKs7c,SAASn/c,GAG7B,OAAO,MAMX4+c,EAAuB1/c,UAAUwgd,SAAW,SAAUpB,EAAQqB,EAAUnjc,EAAMojc,EAAaC,EAAmBC,GAC1G,GAAc,MAAVxB,EAAgB,CAChB,IAAIyB,EAAWzB,EAAOhjb,KACtB,GAAuB,MAAlBwkb,GAA4D,MAA5BA,EAAeC,GAAoB,CACvC,MAAzBH,EAAYG,KACZH,EAAYG,GAAYzB,GAEN,MAAlBwB,UACOA,EAAeC,GAI1B,IAAK,IAFD/uC,EAAQnta,KAAKo7c,SAASX,GACtB0B,KACKhgd,EAAI,EAAGA,EAAIgxa,EAAM1wa,OAAQN,IAC9Bggd,EAAahgd,GAAK6D,KAAK27c,mBAAmBxuC,EAAMhxa,IAAI,KAAUs+c,EAElE,IAASt+c,EAAI,EAAGA,EAAIgxa,EAAM1wa,OAAQN,IAC9B,IAAK2/c,GAAYK,EAAahgd,GAAI,CAG9B,IAAK,IAFDmsC,EAAOtoC,KAAK27c,mBAAmBxuC,EAAMhxa,IAAKggd,EAAahgd,IACvDigd,EAAW,EACN74b,EAAI,EAAGA,EAAI4pZ,EAAM1wa,OAAQ8mB,IAC9B,GAAIA,IAAMpnB,EAAV,CAII,IAAIkgd,EAAYF,EAAa54b,GACbvjB,KAAK27c,mBAAmBxuC,EAAM5pZ,IAAK84b,KACjC/za,IACV+za,EACAD,IAGAA,KAKZA,GAAY,IACZL,EAAc/7c,KAAK67c,SAASvza,EAAMwza,EAAU3uC,EAAMhxa,GAAI4/c,EAAaC,EAAmBC,UAMlG,GAA6B,MAAzBF,EAAYG,GAEZ,IAAS//c,EAAI,EAAGA,EAAI6/c,EAAkBv/c,OAAQN,IAAK,CAC/C,IAAIihH,EAAO4+V,EAAkB7/c,GAC7B,GAAsB,MAAlBihH,EAAK8+V,GAAmB,CACxB,IAAK,IAAI99c,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAK8/G,GAAOh/G,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC3D,IAAIf,EAAMwF,EAAGzE,GACb29c,EAAY1+c,GAAO+/G,EAAK//G,GAI5B,OADA2+c,EAAkB3zb,OAAOlsB,EAAG,GACrB4/c,IAM3B,OAAOA,GAKXhB,EAAuB1/c,UAAUq5c,eAAiB,SAAU5iZ,GACxDA,EAAQA,EAAMzwD,QAGd,IAAK,IAFDgyB,EAAO,KACPkoX,EAAQ,KACHp/Y,EAAI,EAAGA,EAAI21D,EAAMr1D,OAAQN,IAE9B,GADAk3B,EAAOy+B,EAAM31D,GAAGg/c,SACZ5/D,EAAO,CACP,IAAI9uY,EAAQJ,KAAKC,IAAIivY,EAAMxuY,EAAIwuY,EAAMvlY,MAAOqd,EAAKtmB,EAAIsmB,EAAKrd,OACtDrJ,EAASN,KAAKC,IAAIivY,EAAMvuY,EAAIuuY,EAAMxlY,OAAQsd,EAAKrmB,EAAIqmB,EAAKtd,QAC5DwlY,EAAMxuY,EAAIV,KAAK0T,IAAIw7X,EAAMxuY,EAAGsmB,EAAKtmB,GACjCwuY,EAAMvuY,EAAIX,KAAK0T,IAAIw7X,EAAMvuY,EAAGqmB,EAAKrmB,GACjCuuY,EAAMvlY,MAAQvJ,EAAQ8uY,EAAMxuY,EAC5BwuY,EAAMxlY,OAASpJ,EAAS4uY,EAAMvuY,OAG9BuuY,GAAUxuY,EAAGsmB,EAAKtmB,EAAGC,EAAGqmB,EAAKrmB,EAAGgJ,MAAOqd,EAAKrd,MAAOD,OAAQsd,EAAKtd,QAGxE,OAAOwlY,GAMXw/D,EAAuB1/c,UAAU+jP,SAAW,SAAUttL,EAAOwH,EAAW0xY,EAAYxoB,GAChFxib,KAAKs5D,UAAYA,EACjB,IAAIzI,GACA26Y,kBAAmBR,EAAWQ,kBAAmBC,gBAAiBT,EAAWS,gBAC7Erya,YAAa4xa,EAAW5xa,YAAaqqQ,QAASunK,EAAWvua,OAAOjwB,KAAMu3R,QAASinK,EAAWvua,OAAO/vB,KAE1E,gBAAvBmkD,EAAOz3B,YACPy3B,EAAOkzO,SAAWinK,EAAWvua,OAAO/vB,IAER,gBAAvBmkD,EAAOz3B,cACZy3B,EAAO4yO,SAAWunK,EAAWvua,OAAOjwB,MAExCxM,KAAKs7c,YAEL,IAAK,IADDgB,KACKngd,EAAI,EAAGA,EAAI21D,EAAMr1D,OAAQN,IAAK,CACnC,IAAIoE,EAAOP,KAAKk7c,aAAappZ,EAAM31D,GAAI21D,EAAM31D,GAAGmH,GAAI,EAAG,EAAGwuD,EAAM31D,GAAGuwC,WAAW12B,MAAO87C,EAAM31D,GAAGuwC,WAAW32B,QACzG/V,KAAKs7c,SAAS92c,KAAKjE,GACnB+7c,EAAgB/7c,EAAKk3B,MAAQl3B,EAEjC,IACIg8c,EADAP,KAEJO,EAAiBv8c,KAAKq7c,UAAUiB,GAChC,IAASngd,EAAI,EAAGA,EAAIogd,EAAe9/c,OAAQN,IAAK,CAC5C,IAAIqgd,KACJR,EAAkBx3c,KAAKg4c,GACvBx8c,KAAK67c,SAASU,EAAepgd,IAAI,EAAM,KAAMqgd,EAAWR,EAAmBM,GAG1E,IADDh/O,GAAUmmE,QAAS,EAAGM,QAAS,GACnC,IAAS5nS,EAAI,EAAGA,EAAI6/c,EAAkBv/c,OAAQN,IAAK,CAC3Cqgd,EAAYR,EAAkB7/c,GAElC,IAAK,IADDw4J,KACKv2J,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKk/c,GAAYp+c,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAChE,IAAIf,EAAMwF,EAAGzE,GACbu2J,EAAInwJ,KAAKg4c,EAAUn/c,IAEvB,IAAIulB,EAAQ,IAAI65b,GAAiBz8c,KAAM20J,EAAK4nT,EAAgB1rZ,GAC5D7wD,KAAK08c,WAAW95b,GAChB5iB,KAAK28c,cAAc/5b,GACnB5iB,KAAK48c,cAAch6b,GACnB06M,EAAQt9N,KAAK68c,eAAej6b,EAAO06M,EAAMmmE,QAASnmE,EAAMymE,SAIvD,IAFD+zK,EAAc93c,KAAK00c,eAAe10c,KAAKs7c,UACvCvD,GAASv1B,EAASz1a,EAAI+qc,EAAY9hc,OAAS,EAC/C,IAAS7Z,EAAI,EAAGA,EAAI6D,KAAKs7c,SAAS7+c,OAAQN,IAAK,CAC3C,IAAI2gd,EAAS98c,KAAKs7c,SAASn/c,GAC3B,GAAI2gd,EAAQ,CACR,IAAIC,EAAQ/8c,KAAKs5D,UAAUwjZ,EAAOrlb,MAClCslb,EAAMlxc,QAAU,EAChBkxc,EAAM9wc,QAAU,EAEhB,IAAI6nV,EAAMgpH,EAAO3B,SAASpuc,GAAKgwc,EAAMlxc,QAAWkxc,EAAMrwa,WAAW12B,MAAQ,GAAO66C,EAAO4yO,QACnF1yP,EAAM+ra,EAAO3B,SAASnuc,GAAK+vc,EAAM9wc,QAAW8wc,EAAMrwa,WAAW32B,OAAS,GAAO86C,EAAOkzO,QACpFh3R,EAAI+mV,EACJ9mV,EAAI+jC,EACmB,gBAAvB8f,EAAOz3B,YACPpsB,EAAI8qc,EAAY/hc,OAASg7B,EAEG,gBAAvB8f,EAAOz3B,cACZrsB,EAAI+qc,EAAY9hc,MAAQ89U,GAE5B/mV,GAAKgrc,EACLgF,EAAMlxc,SAAWkB,EAAIgwc,EAAMlxc,QAC3Bkxc,EAAM9wc,SAAWe,EAAI+vc,EAAM9wc,WAOvC8uc,EAAuB1/c,UAAUwhd,eAAiB,SAAUj6b,EAAO6gR,EAASM,GACxE,IAAI84K,EAAiB78c,KAAKg9c,qBAAqBv5K,EAASM,EAASzjS,OAAQsiB,GAIzE,OAHAi6b,EAAej6b,MAAQA,EACvBi6b,EAAeI,gBAAkB,KACjCj9c,KAAKk9c,sBAAsBL,IAEvBp5K,QAASo5K,EAAep5K,QAAU7gR,EAAMiuC,OAAO26Y,kBAC/CznK,QAAS84K,EAAe94K,QAAUnhR,EAAMiuC,OAAO46Y,kBAMvDsP,EAAuB1/c,UAAU2hd,qBAAuB,SAAUv5K,EAASM,EAASzjS,EAAQsiB,GACxF,IAAIu6b,KAaJ,MAZiC,gBAA7Bv6b,EAAMiuC,OAAOz3B,aAA8D,gBAA7BxW,EAAMiuC,OAAOz3B,aAC3D+jb,EAAgB3R,kBAAoB5ob,EAAMiuC,OAAO26Y,kBACjD2R,EAAgB1R,gBAAkB7ob,EAAMiuC,OAAO46Y,kBAG/C0R,EAAgB3R,kBAAoB5ob,EAAMiuC,OAAO46Y,gBACjD0R,EAAgB1R,gBAAkB7ob,EAAMiuC,OAAO26Y,mBAEnD2R,EAAgB/jb,YAAc,QAE9B+jb,EAAgB15K,QAAU05K,EAAgB15K,QAAUA,EACpD05K,EAAgBp5K,QAAUo5K,EAAgBp5K,QAAUA,EAC7Co5K,GAKXpC,EAAuB1/c,UAAU+hd,oBAAsB,SAAUD,EAAiB5I,EAAO3xb,GACrF,IAAIinC,GAAe,EAC8B,gBAA7CszZ,EAAgBv6b,MAAMiuC,OAAOz3B,aAA8E,gBAA7C+jb,EAAgBv6b,MAAMiuC,OAAOz3B,cAC3FywB,GAAe,GAEnB,IAAIl+C,GAAUwxc,EAAgB1R,gBAC1B4R,EAAsB,EAC1BF,EAAgBG,aAChBH,EAAgBI,cAChB,IAAK,IAAIC,EAAY56b,EAAM66b,QAASD,GAAa,EAAGA,IAAa,CAI7D,IAAK,IAHDE,EAAc,EACdp+O,EAAO18M,EAAM+6b,MAAMH,GACnBI,EAAc/zZ,EAAeszZ,EAAgBp5K,QAAUo5K,EAAgB15K,QAClEtnS,EAAI,EAAGA,EAAImjO,EAAK7iO,OAAQN,IAAK,CAClC,IAAIoE,EAAO++N,EAAKnjO,GAChB,GAAI6D,KAAKg7c,eAAe6C,SAASt9c,GAAO,CACpC,IAAIk6c,EAASl6c,EACb,GAAIk6c,EAAOx3Y,OAASw3Y,EAAOx3Y,KAAK0pV,SAAW8tD,EAAOx3Y,KAAKypV,UAAW,CAC9D,IAAI3vZ,EAAMiD,KAAKs5D,UAAUmhZ,EAAOx3Y,KAAKxrC,MACrCgjb,EAAOzkc,MAAQjZ,EAAI2vC,WAAW12B,MAC9Bykc,EAAO1kc,OAAShZ,EAAI2vC,WAAW32B,OAC/B2nc,EAAcrxc,KAAKC,IAAIoxc,EAAc7zZ,EAAe4wZ,EAAOzkc,MAAQykc,EAAO1kc,cAI9E,GAAIxV,EAAM,CACN,IAAIoY,EAAOpY,EACPu9c,EAAW,EACG,MAAdnlc,EAAKw0Z,QACL2wC,EAAWnlc,EAAKw0Z,MAAM1wa,QAE1B8D,EAAKyV,MAAyB,IAAhB8nc,EAAW,GAG7Bj0Z,IACKtpD,EAAKwV,SACNxV,EAAKwV,OAAS,IAItB6nc,IAAgB/zZ,EAAetpD,EAAKwV,OAASxV,EAAKyV,OAAS,EAC3DhW,KAAK+9c,MAAMx9c,EAAMi9c,EAAWI,IAAa/zZ,GACzC7pD,KAAKg+c,gBAAgBz9c,EAAMi9c,EAAWI,IACtCA,IAAiB/zZ,EAAetpD,EAAKwV,OAASxV,EAAKyV,OAAS,EAAOmnc,EAAgB3R,mBACjE2R,EAAgBF,kBAC9BE,EAAgBF,gBAAkBW,EAClCT,EAAgBc,WAAaT,GAEjCL,EAAgBG,UAAUE,GAAaI,EAE3CT,EAAgBI,WAAWC,GAAa7xc,EACxC,IAAIuyc,EAAqBR,EAAc,EAAML,EAAsB,EAAMF,EAAgB1R,gBACzF4R,EAAsBK,EACc,UAAhCP,EAAgB/jb,aAA2D,SAAhC+jb,EAAgB/jb,YAC3DztB,GAAUuyc,EAGVvyc,GAAUuyc,EAEd,IAAS/hd,EAAI,EAAGA,EAAImjO,EAAK7iO,OAAQN,IAAK,CAClC,IAAI8mE,EAAOq8J,EAAKnjO,GAChB6D,KAAK+9c,MAAM96Y,EAAMu6Y,EAAW7xc,GAAQk+C,MAQhDkxZ,EAAuB1/c,UAAU2id,gBAAkB,SAAUz9c,EAAMmpE,EAAO1sE,GAClEgD,KAAKg7c,eAAe6C,SAASt9c,GAC7BA,EAAKwtB,KAAK,GAAK/wB,EAGfuD,EAAKwtB,KAAK27C,EAAQnpE,EAAK49c,QAAU,GAAKnhd,GAO9C+9c,EAAuB1/c,UAAU0id,MAAQ,SAAUx9c,EAAMmpE,EAAO1sE,EAAOohd,GAC/D79c,GAAQA,EAAK0iE,OACT1iE,EAAK0iE,KAAK0pV,SAAWpsZ,EAAK0iE,KAAKypV,SAC3B0xD,EACA79c,EAAKyM,EAAE,GAAKhQ,EAGZuD,EAAKwM,EAAE,GAAK/P,EAIZohd,EACA79c,EAAKyM,EAAE08D,EAAQnpE,EAAK49c,QAAU,GAAKnhd,EAGnCuD,EAAKwM,EAAE28D,EAAQnpE,EAAK49c,QAAU,GAAKnhd,IAQnD+9c,EAAuB1/c,UAAUgjd,gBAAkB,SAAUC,EAAOd,EAAWjJ,EAAO3xb,GAClF,IAAIinC,GAAe,EACoB,gBAAnCy0Z,EAAM17b,MAAMiuC,OAAOz3B,aAAoE,gBAAnCklb,EAAM17b,MAAMiuC,OAAOz3B,cACvEywB,GAAe,GAKnB,IAAK,IAHDy1K,EAAO18M,EAAM+6b,MAAMH,GACnBe,EAAY,EACZX,GAAe/zZ,EAAey0Z,EAAMv6K,QAAUu6K,EAAM76K,UAAY66K,EAAMrB,gBAAkBqB,EAAMhB,UAAUE,IAAc,EACjHrhd,EAAI,EAAGA,EAAImjO,EAAK7iO,OAAQN,IAAK,CAClC,IAAIoE,EAAO++N,EAAKnjO,GAChB,GAAI6D,KAAKg7c,eAAe6C,SAASt9c,GAAO,CACpC,IAAIxD,EAAMiD,KAAKs5D,UAAU/4D,EAAK0iE,KAAKxrC,MACnCl3B,EAAKyV,MAAQjZ,EAAI2vC,WAAW12B,MAC5BzV,EAAKwV,OAAShZ,EAAI2vC,WAAW32B,OAC7Bwoc,EAAYlyc,KAAKC,IAAIiyc,EAAWh+c,EAAKwV,YAEpC,CACD,IAAI4C,EAAOpY,EACPu9c,EAAW,EACG,MAAdnlc,EAAKw0Z,QACL2wC,EAAWnlc,EAAKw0Z,MAAM1wa,QAEtBotD,EACAtpD,EAAKwV,OAA0B,IAAhB+nc,EAAW,GAG1Bv9c,EAAKyV,MAAyB,IAAhB8nc,EAAW,GAGjC,IAAIhxb,GAAQ+8B,EAAetpD,EAAKwV,OAASxV,EAAKyV,OAAS,EACvD4nc,GAAe9wb,EACf9sB,KAAK+9c,MAAMx9c,EAAMi9c,EAAWI,IAAa/zZ,GACzC7pD,KAAKg+c,gBAAgBz9c,EAAMi9c,EAAWI,GACtCA,GAAgB9wb,EAAOwxb,EAAM9S,oBAMrCuP,EAAuB1/c,UAAUmjd,cAAgB,SAAUrB,EAAiBsB,EAAQ77b,GAChF5iB,KAAKo9c,oBAAoBD,EAAiBsB,EAAQ77b,GAElD,IAAK,IAAIzmB,EAAIghd,EAAgBc,WAAY9hd,GAAK,EAAGA,IACzCA,EAAIymB,EAAM66b,SACVz9c,KAAKq+c,gBAAgBlB,EAAiBhhd,EAAGsid,EAAQ77b,GAGzD,IAASzmB,EAAIghd,EAAgBc,WAAa,EAAG9hd,GAAKymB,EAAM66b,QAASthd,IACzDA,EAAI,GACJ6D,KAAKq+c,gBAAgBlB,EAAiBhhd,EAAGsid,EAAQ77b,IAQ7Dm4b,EAAuB1/c,UAAUqjd,WAAa,SAAUn+c,EAAMo+c,GAE1D,GAAiB,MAAbA,GAAsC,MAAjBp+c,EAAKq+c,UAA0C,MAAtBD,EAAUC,UACrDr+c,EAAKq+c,SAASnid,OAASkid,EAAUC,SAASnid,OAAQ,CACrD,GAAI8D,EAAKq+c,WAAaD,EAAUC,SAC5B,OAAO,EAEX,GAAqB,MAAjBr+c,EAAKq+c,UAAqC,MAAjBr+c,EAAKq+c,SAC9B,OAAO,EAEX,IAAK,IAAIzid,EAAI,EAAGA,EAAIoE,EAAKq+c,SAASnid,OAAQN,IACtC,GAAIoE,EAAKq+c,SAASzid,KAAOwid,EAAUC,SAASzid,GACxC,OAAO,EAGf,OAAO,EAEX,OAAO,GAKX4+c,EAAuB1/c,UAAUwjd,mBAAqB,SAAU57Y,EAAM67Y,GAClE,IAAID,KAKJ,OAJAA,EAAmB57Y,KAAOA,GAAc,KACxC47Y,EAAmBC,cAAgBA,GAAgC,EACnED,EAAmBxN,SAAU,EAC7BwN,EAAmBE,UAAY,KACxBF,GAKX9D,EAAuB1/c,UAAU2jd,QAAU,SAAU7B,EAAiBv6b,GAIlE,IAAK,IAHDq8b,KACArnb,GAAQA,QACR0nM,KACKnjO,EAAI,EAAGA,GAAKymB,EAAM66b,QAASthd,IAAK,CACrCmjO,EAAKnjO,GAAKymB,EAAM+6b,MAAMxhd,GACtB,IAAK,IAAIonB,EAAI,EAAGA,EAAI+7M,EAAKnjO,GAAGM,OAAQ8mB,IAAK,CACrC,IAAIhjB,EAAO++N,EAAKnjO,GAAGonB,GACf27b,EAAcl/c,KAAK6+c,mBAAmBt+c,EAAMpE,GAChD+id,EAAYH,UAAYx7b,EACxB27b,EAAY7N,SAAU,EACtB4N,EAASz6c,KAAK06c,GACdt8b,EAAMu8b,uBAAuBvnb,EAAKr3B,EAAM2+c,GAAa,IAM7D,IAHA,IAAIE,EAA6B,GAAlBH,EAASxid,OACpBqiB,EAAQ,EAELmgc,EAASxid,OAAS,GAAKqiB,GAASsgc,GAAU,CAC7C,IAAIC,EAAcJ,EAASthY,QACvB1a,EAAOo8Y,EAAYp8Y,KACnBu6Y,EAAY6B,EAAYP,cACxBC,EAAYM,EAAYN,UACxBO,EAA0Bt/c,KAAKg7c,eAAeuE,yBAAyBt8Y,EAAMu6Y,GAC7EgC,EAA8Bx/c,KAAKg7c,eAAeuE,yBAAyBt8Y,EAAMu6Y,GAAW,GAC5FiC,EAAqBH,EAAwB7id,OAC7Cijd,EAAqBF,EAA4B/id,OACjDkjd,EAAkB3/c,KAAK4/c,aAAazC,EAAiBmC,EAAyB9B,EAAY,GAC1FqC,EAAsB7/c,KAAK4/c,aAAazC,EAAiBqC,EAA6BhC,EAAY,GAClGsC,EAAyBL,EAAqBC,EAC9CzhO,EAAkBj+O,KAAKg7c,eAAe+E,gBAAgB98Y,EAAMu6Y,GAC5DwC,EAAa/hO,EACb6hO,EAAyB,IACzBE,GAAcL,EAAkBF,EAAqBI,EAAsBH,GAAsBI,GAErG,IAAInW,GAAkB,EAClBn/b,OAAYrP,EAChB,GAAI6kd,EAAa/hO,EApBL,EAqBR,GAAkB,IAAd8gO,EACAv0c,EAAYw1c,EACZrW,GAAkB,MAEjB,CACD,IAAIsW,EAAW3gP,EAAKk+O,GAAWuB,EAAY,GACvC5gQ,EAAYn+M,KAAKg7c,eAAe+E,gBAAgBE,EAAUzC,IAC9Dr/P,EAAYA,EAAY8hQ,EAASjqc,MAAQ,EAAImnc,EAAgB+C,iBAAmBj9Y,EAAKjtD,MAAQ,GAC7Egqc,GACZx1c,EAAYw1c,EACZrW,GAAkB,GAEbxrP,EAAYn+M,KAAKg7c,eAAe+E,gBAAgB98Y,EAAMu6Y,GAjC3D,IAkCAhzc,EAAY2zM,EACZwrP,GAAkB,QAIzB,GAAIqW,EAAa/hO,EAvCV,EAuCuC,CAE/C,GAAI8gO,IADWz/O,EAAKk+O,GAAW/gd,OACF,EACzB+N,EAAYw1c,EACZrW,GAAkB,MAEjB,CACD,IAAIwW,EAAY7gP,EAAKk+O,GAAWuB,EAAY,GACxC3gQ,EAAap+M,KAAKg7c,eAAe+E,gBAAgBI,EAAW3C,IAChEp/P,EAAaA,EAAa+hQ,EAAUnqc,MAAQ,EAAImnc,EAAgB+C,iBAAmBj9Y,EAAKjtD,MAAQ,GAC/Egqc,GACbx1c,EAAYw1c,EACZrW,GAAkB,GAEbvrP,EAAap+M,KAAKg7c,eAAe+E,gBAAgB98Y,EAAMu6Y,GArD5D,IAsDAhzc,EAAY4zM,EACZurP,GAAkB,IAI1BA,IACA3pc,KAAKg+c,gBAAgB/6Y,EAAMu6Y,EAAWhzc,GAEtCxK,KAAKogd,eAAenB,EAAUrnb,EAAK0nb,EAAyB18b,GAC5D5iB,KAAKogd,eAAenB,EAAUrnb,EAAK4nb,EAA6B58b,IAEhE5iB,KAAKg7c,eAAe6C,SAASwB,EAAYp8Y,QACzCo8Y,EAAYhO,SAAU,GAE1Bvyb,MAMRi8b,EAAuB1/c,UAAU+kd,eAAiB,SAAUnB,EAAUrnb,EAAKuP,EAAYvkB,GACnF,IAAK,IAAIzmB,EAAI,EAAGA,EAAIgrC,EAAW1qC,OAAQN,IAAK,CACxC,IAAIkkd,EAAgBl5a,EAAWhrC,GAC3Bmkd,EAAuB19b,EAAM29b,uBAAuB3ob,EAAKyob,GACjC,MAAxBC,IACqC,IAAjCA,EAAqBjP,UACrBiP,EAAqBjP,SAAU,EAC/B4N,EAASz6c,KAAK87c,MAQ9BvF,EAAuB1/c,UAAUukd,aAAe,SAAUzC,EAAiBqD,EAAgBhD,GACvF,GAA8B,IAA1BgD,EAAe/jd,OACf,OAAO,EAGX,IAAK,IADDgkd,KACKtkd,EAAI,EAAGA,EAAIqkd,EAAe/jd,OAAQN,IACvCskd,EAAatkd,GAAK6D,KAAKg7c,eAAe+E,gBAAgBS,EAAerkd,GAAIqhd,GAK7E,GAHAiD,EAAa5ob,KAAK,SAAUsrB,EAAGrmB,GAC3B,OAAOqmB,EAAIrmB,IAEX0jb,EAAe/jd,OAAS,GAAM,EAC9B,OAAOgkd,EAAap0c,KAAK+S,MAAMohc,EAAe/jd,OAAS,IAGvD,IAAIikd,EAAcF,EAAe/jd,OAAS,EAG1C,OAFiBgkd,EAAaC,EAAc,GAC1BD,EAAaC,IACM,GAM7C3F,EAAuB1/c,UAAU6hd,sBAAwB,SAAUC,GAC/D,IAAItzZ,GAAe,EAC8B,gBAA7CszZ,EAAgBv6b,MAAMiuC,OAAOz3B,aAA8E,gBAA7C+jb,EAAgBv6b,MAAMiuC,OAAOz3B,cAC3FywB,GAAe,GAEnBszZ,EAAgBwD,kBAChB,IAAI/9b,EAAQu6b,EAAgBv6b,MAC5BinC,EAAeszZ,EAAgByD,cAAgB,EAAMzD,EAAgB0D,cAAgB,EACrF7gd,KAAKw+c,cAAcrB,GAAmBv6b,MAAOA,GAASA,GACtD5iB,KAAKg/c,QAAQ7B,EAAiBv6b,GAC9B,IAAIk+b,EAAkB,IACjB3D,EAAgB4D,gBACjB5D,EAAgB4D,cAAgB,GAEpC,IAAK,IAAI5kd,EAAI,EAAGA,EAAIghd,EAAgB4D,cAAe5kd,IAAK,CAGpD,IAAK0tD,EAAeszZ,EAAgByD,cAAgBzD,EAAgB0D,eAAiBC,EAAiB,CAClG,IAAK,IAAIv9b,EAAI,EAAGA,EAAIX,EAAM+6b,MAAMlhd,OAAQ8mB,IAEpC,IAAK,IADD+7M,EAAO18M,EAAM+6b,MAAMp6b,GACd4C,EAAI,EAAGA,EAAIm5M,EAAK7iO,OAAQ0pB,IAAK,CAClC,IAAI88C,EAAOq8J,EAAKn5M,GAChBnmB,KAAK+9c,MAAM96Y,EAAM1/C,EAAGvjB,KAAKg7c,eAAe+E,gBAAgB98Y,EAAM1/C,KAAIsmC,GAG1Ei3Z,EAAkBj3Z,EAAeszZ,EAAgByD,cAAgBzD,EAAgB0D,cAErFh3Z,EAAeszZ,EAAgByD,cAAgB,EAAIzD,EAAgB0D,cAAgB,EAEvF7gd,KAAKghd,iBAAiB7D,EAAiBv6b,IAK3Cm4b,EAAuB1/c,UAAU2ld,iBAAmB,SAAU7D,EAAiBv6b,GAE3E,IAAK,IADD04b,EAAWt7c,KAAKihd,UAAUr+b,EAAMs+b,cAC3B/kd,EAAI,EAAGA,EAAIm/c,EAAS7+c,OAAQN,IACjC6D,KAAKmhd,kBAAkBhE,EAAiB7B,EAASn/c,KAMzD4+c,EAAuB1/c,UAAU+ld,4BAA8B,SAAUjE,EAAiBl6Y,EAAMl2D,EAAGC,GACnFmwc,EAAgBv6b,MAA5B,IACIu4b,EAAWl4Y,EAAKk4Y,SAChBp8c,EAAS,KAOb,OANgB,MAAZo8c,IACAp8c,GAAWgO,EAAGA,EAAGC,EAAGA,EAAGgJ,MAAOmlc,EAASnlc,MAAOD,OAAQolc,EAASplc,QAC3Dolc,EAASpuc,IAAMA,GAAKouc,EAASnuc,IAAMA,IACnCi2D,EAAKk4Y,SAAWp8c,IAGjBA,GAKXg8c,EAAuB1/c,UAAU8ld,kBAAoB,SAAUhE,EAAiBl6Y,GAC5E,IAAIpZ,GAAe,EAC8B,gBAA7CszZ,EAAgBv6b,MAAMiuC,OAAOz3B,aAA8E,gBAA7C+jb,EAAgBv6b,MAAMiuC,OAAOz3B,cAC3FywB,GAAe,GAEnB,IAAIw3Z,EAAWp+Y,EAAKA,KAChBzuD,EAAYyuD,EAAKl2D,EAAE,GAAKk2D,EAAKjtD,MAAQ,EACrCvB,EAAYwuD,EAAKj2D,EAAE,GAAKi2D,EAAKltD,OAAS,EAC1C/V,KAAKohd,4BAA4BjE,EAAiBkE,EAAU7sc,EAAWC,GACnEo1C,GACKszZ,EAAgBp5K,UACjBo5K,EAAgBp5K,QAAU,GAE9Bo5K,EAAgBp5K,QAAU13R,KAAKC,IAAI6wc,EAAgBp5K,QAAStvR,EAAYwuD,EAAKltD,UAGxEonc,EAAgB15K,UACjB05K,EAAgB15K,QAAU,GAE9B05K,EAAgB15K,QAAUp3R,KAAKC,IAAI6wc,EAAgB15K,QAASjvR,EAAYyuD,EAAKjtD,SAMrF+kc,EAAuB1/c,UAAU4ld,UAAY,SAAU3yc,GACnD,IAAIu0F,KACJ,GAAIv0F,EAAOspB,IACP,IAAK,IAAIx5B,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKgR,EAAOspB,KAAMx5B,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACjE,IAAIf,EAAMwF,EAAGzE,GACbykG,EAAKr+F,KAAK8J,EAAOspB,IAAIv6B,IAG7B,OAAOwlG,GAKXk4W,EAAuB1/c,UAAUuhd,cAAgB,SAAUh6b,GACvD5iB,KAAKg7c,eAAexqZ,QAAQ5tC,IAKhCm4b,EAAuB1/c,UAAUshd,cAAgB,SAAU/5b,GACvD5iB,KAAKshd,YAAY1+b,GACjB5iB,KAAKuhd,SAAS3+b,IAKlBm4b,EAAuB1/c,UAAUimd,YAAc,SAAU1+b,GAIrD,IAHA,IAAI4+b,EAAa5+b,EAAM4+b,WACnBC,EAAgB7+b,EAAM8+b,oBAAoB9+b,EAAMs+b,cAChDS,EAAiBH,EAAWngd,QACzBmgd,EAAW/kd,OAAS,GAAG,CAM1B,IAAK,IAJDmld,GADAC,EAAeL,EAAW,IACWM,iBACrCC,EAAkBF,EAAaG,iBAC/BC,GAAkB,EAClBC,EAAe,IACV/ld,EAAI,EAAGA,EAAIyld,EAAsBnld,OAAQN,IAAK,CAEnD,GAA6B,WADzBgmd,EAAeP,EAAsBzld,IACxB4xB,KAAK,GAKjB,CACDk0b,GAAkB,EAClB,MALA,IAAItD,EAAYwD,EAAa5ld,OAC7B2ld,EAAe71c,KAAK0T,IAAImic,EAAcvD,EAAU5wb,KAAK,GAAK,GAQlE,GAAIk0b,EAAiB,CAMjB,GALAJ,EAAa9zb,KAAK,GAAKm0b,EAClBt/b,EAAM66b,UACP76b,EAAM66b,QAAU,KAEpB76b,EAAM66b,QAAUpxc,KAAK0T,IAAI6C,EAAM66b,QAASyE,GACjB,MAAnBH,EACA,IAAS5ld,EAAI,EAAGA,EAAI4ld,EAAgBtld,OAAQN,IAAK,EACzCgmd,EAAeJ,EAAgB5ld,IACtB4xB,KAAK,GAAK,SAII,KAFvB4wb,EAAYwD,EAAah7c,QAEf4mB,KAAK,KACfyzb,EAAWh9c,KAAKm6c,GAGhBA,EAAU5wb,KAAK,IAAM,GAIjCyzb,EAAW7jY,YAEV,CAED,IAAIykY,EAAcZ,EAAW7jY,QAE7B,GADA6jY,EAAWh9c,KAAKq9c,GACZO,IAAgBP,GAAsC,IAAtBL,EAAW/kd,OAG3C,OAIZ,IAASN,EAAI,EAAGA,EAAIsld,EAAchld,OAAQN,IACtCsld,EAActld,GAAG4xB,KAAK,IAAMnL,EAAM66b,QAEtC,IAASthd,EAAI,EAAGA,EAAIwld,EAAelld,OAAQN,IAIvC,IAAK,IAHD0ld,EACAQ,EAAkB,EAEb9+b,GADLq+b,GAFAC,EAAeF,EAAexld,IAEO6ld,iBAC5B,GAAGz+b,EAAIq+b,EAAsBnld,OAAQ8mB,IAAK,CACnD,IAAI4+b,EACAxD,GADAwD,EAAeP,EAAsBr+b,IACZpc,OAC7B06c,EAAa9zb,KAAK,GAAK1hB,KAAKC,IAAI+1c,EAAiB1D,EAAU5wb,KAAK,GAAK,GACrEs0b,EAAkBR,EAAa9zb,KAAK,GAG5CnL,EAAM66b,QAAU,IAAY76b,EAAM66b,SAKtC1C,EAAuB1/c,UAAUkmd,SAAW,SAAU3+b,GAClDA,EAAM2+b,YAKVxG,EAAuB1/c,UAAUqhd,WAAa,SAAU95b,GACpD,IAAI0/b,KACJ1/b,EAAM4+b,cAGN,IAAK,IAFDe,EAAmB3/b,EAAM8+b,oBAAoB9+b,EAAMs+b,cACnDsB,KACKrmd,EAAI,EAAGA,EAAIomd,EAAiB9ld,OAAQN,IACzComd,EAAiBpmd,GAAG4xB,KAAK,IAAM,EAC/By0b,EAAYD,EAAiBpmd,GAAGmH,IAAMi/c,EAAiBpmd,GAE3D,IAAIsmd,EAAa,KACjB,GAAmB,MAAf7/b,EAAM24b,MAAe,CACrB,IAAImH,EAAa9/b,EAAM24b,MACvBkH,KACA,IAAStmd,EAAI,EAAGA,EAAIumd,EAAWjmd,OAAQN,IACnCsmd,EAAWtmd,GAAKymB,EAAM+/b,cAAc//b,EAAMs+b,aAAcwB,EAAWvmd,IAC9C,MAAjBsmd,EAAWtmd,IACXymB,EAAM4+b,WAAWh9c,KAAKi+c,EAAWtmd,IAI7CymB,EAAMggc,MAAM,yBAA0BH,GAAY,EAAM,MAAQH,UAAWA,EAAWE,YAAaA,IACnG,IAAIK,EAAgBjgc,EAAMvjB,MAAMijd,EAAW,MAAM,GACjD1/b,EAAMggc,MAAM,uBAAwBJ,GAAa,EAAMK,GAAiBP,UAAWA,EAAWE,YAAaA,KAM/GzH,EAAuB1/c,UAAUkJ,OAAS,SAAUxH,EAAKk4D,GACrD,IAAIhjD,EAAQgjD,EAAM12D,QAAQxB,GAI1B,OAHe,IAAXkV,GACAgjD,EAAM5sC,OAAOpW,EAAO,GAEjBlV,GAMXg+c,EAAuB1/c,UAAUynd,OAAS,SAAUC,EAAgBr5Y,GAChE,IAAI37C,EAAOg1b,EAAexmd,OAC1Bwmd,EAAexmd,OAASwmd,EAAe57c,OACvC47c,EAAe57c,OAAS4mB,EACxBg1b,EAAeC,YAAcD,EAAeC,YAMhDjI,EAAuB1/c,UAAU4nd,gBAAkB,SAAU1md,EAAQ4K,EAAQ20c,GACzEA,EAAwB,MAAZA,GAAoBA,EAGhC,IAAK,IAFD3uC,EAAQnta,KAAKo7c,SAAS7+c,GACtBwC,KACK5C,EAAI,EAAGA,EAAIgxa,EAAM1wa,OAAQN,IAAK,CACnC,IAAImD,EAAMU,KAAK27c,mBAAmBxuC,EAAMhxa,IAAI,GACxC8lT,EAAMjiT,KAAK27c,mBAAmBxuC,EAAMhxa,IAAI,IACvCmD,IAAQ/C,GAAU0lT,IAAQ96S,IAAa20c,GAAYx8c,IAAQ6H,GAAU86S,IAAQ1lT,IAC9EwC,EAAOyF,KAAK2oa,EAAMhxa,IAG1B,OAAO4C,GAEJg8c,KAKP0B,GAAkC,WAClC,SAASA,EAAiB5rZ,EAAQyqZ,EAAUC,EAAO2H,GAC/Cljd,KAAKmjd,2BAA6B,EAElCnjd,KAAKojd,SAAW,EAChBpjd,KAAKqjd,iBAAmB,IAAItI,GAC5B/6c,KAAKu7c,MAAQA,EACbv7c,KAAKkhd,cAAiBtpb,QACtB,IAAI0rb,KACJtjd,KAAK6wD,OAASqyZ,EACdljd,KAAKy9c,QAAU,IACfz9c,KAAKujd,mBAAqB1yZ,EAC1B7wD,KAAKwjd,oBAAoB3yZ,EAAQyqZ,EAAUgI,GAC3C,IAAK,IAAInnd,EAAI,EAAGA,EAAIm/c,EAAS7+c,OAAQN,IAAK,CAEtC,IAAK,IADDgxa,EAAQm2C,EAAiBnnd,GAAG6ld,iBACvBz+b,EAAI,EAAGA,EAAI4pZ,EAAM1wa,OAAQ8mB,IAAK,CACnC,IAAI4+b,EAAeh1C,EAAM5pZ,GACrBkgc,EAAYtB,EAAah1C,MAC7B,GAAiB,MAAbs2C,GAAqBA,EAAUhnd,OAAS,EAAG,CAC3C,IAAIind,EAAWD,EAAU,GACrBE,EAAa9yZ,EAAO8qZ,mBAAmB+H,GAAU,GACjDE,EAAqB5jd,KAAK2id,cAAc3id,KAAKkhd,aAAcyC,GAC3DL,EAAiBnnd,KAAOynd,IACxBD,EAAa9yZ,EAAO8qZ,mBAAmB+H,GAAU,GACjDE,EAAqB5jd,KAAK2id,cAAc3id,KAAKkhd,aAAcyC,IAErC,MAAtBC,GAA8BN,EAAiBnnd,KAAOynd,IACtDzB,EAAah7c,OAASy8c,EAC6B,IAA/CA,EAAmB9B,iBAAiBrld,SACpCmnd,EAAmB9B,qBAEnB8B,EAAmB9B,iBAAiBvjd,QAAQ4jd,GAAgB,GAC5DyB,EAAmB9B,iBAAiBt9c,KAAK29c,KAKzDmB,EAAiBnnd,GAAG4xB,KAAK,GAAK,GAsVtC,OAhVA0ub,EAAiBphd,UAAUmod,oBAAsB,SAAU3yZ,EAAQyqZ,EAAUgI,GACzE,IAAK,IAAInnd,EAAI,EAAGA,EAAIm/c,EAAS7+c,OAAQN,IAAK,CACtCmnd,EAAiBnnd,IACb4Q,KAAOC,KAAO+gB,QAAUk1C,KAAMq4Y,EAASn/c,GACvCmH,GAAIg4c,EAASn/c,GAAGs7B,KAAMqqb,oBAAsBE,qBAEhDhid,KAAK6jd,cAAc7jd,KAAKkhd,aAAc5F,EAASn/c,GAAImnd,EAAiBnnd,IACpE,IAAIu/c,EAAQ7qZ,EAAOuqZ,SAASE,EAASn/c,IACrCmnd,EAAiBnnd,GAAG6ld,oBACpB,IAAK,IAAIz+b,EAAI,EAAGA,EAAIm4b,EAAMj/c,OAAQ8mB,IAAK,CACnC,IAAI0/C,EAAOpS,EAAO8qZ,mBAAmBD,EAAMn4b,IAAI,GAC/C,GAAI0/C,IAASq4Y,EAASn/c,GAAI,CACtB,IAAI2nd,EAAkBjzZ,EAAOoyZ,gBAAgB3H,EAASn/c,GAAI8mE,GAAM,GAC5D8gZ,EAAgBlzZ,EAAOoyZ,gBAAgB3H,EAASn/c,GAAI8mE,GAAM,GAC9D,GAAuB,MAAnB6gZ,GAA2BA,EAAgBrnd,OAAS,GAA4B,EAAvBsnd,EAActnd,QAAcqnd,EAAgBrnd,OAAQ,CAE7G,IAAK,IADD0ld,GAAiBp1c,KAAOC,KAAO+gB,QAAUo/Y,MAAO22C,EAAiBjvb,QAC5Dk8C,EAAI,EAAGA,EAAI+yY,EAAgBrnd,OAAQs0E,IACxCoxY,EAAattb,IAAIrwB,KAAKs/c,EAAgB/yY,GAAGztE,IAE7C6+c,EAAa5ld,OAAS+md,EAAiBnnd,GAClCmnd,EAAiBnnd,GAAG6ld,mBACrBsB,EAAiBnnd,GAAG6ld,qBAEpBsB,EAAiBnnd,GAAG6ld,iBAAiBzjd,QAAQ4jd,GAAgB,GAC7DmB,EAAiBnnd,GAAG6ld,iBAAiBx9c,KAAK29c,KAK1DmB,EAAiBnnd,GAAG4xB,KAAK,GAAK,IAOtC0ub,EAAiBphd,UAAUkmd,SAAW,WAClC,IAAIyC,KACJhkd,KAAK29c,SACL,IAAK,IAAIxhd,EAAI,EAAGA,EAAI6D,KAAKy9c,QAAU,EAAGthd,IAClC6nd,EAAS7nd,MACT6D,KAAK29c,MAAMxhd,GAAK6nd,EAAS7nd,GAE7B,IAAIsmd,EAAa,KACjB,GAAkB,MAAdzid,KAAKu7c,MAAe,CACpB,IAAI0I,EAAgBjkd,KAAKu7c,MACzBkH,KACA,IAAStmd,EAAI,EAAGA,EAAI8nd,EAAcxnd,OAAQN,IAAK,CAC3C,IAAI8mE,EAAOghZ,EAAc9nd,GACrB0ld,EAAe7hd,KAAK2id,cAAc3id,KAAKkhd,aAAcj+Y,GACzDw/Y,EAAWtmd,GAAK0ld,GAGxB7hd,KAAK4id,MAAM,mBAAoBH,GAAY,EAAO,MAAQH,UAAW,KAAME,YAAa,KAAMwB,SAAUA,KAK5GvH,EAAiBphd,UAAU6od,iBAAmB,SAAUx6Y,EAAOy6Y,EAAM3nd,GACjDA,EAAK8ld,UACH9ld,EAAKgmd,YADvB,IAEIlid,EAAS9D,EAAK8D,OACdC,EAAO/D,EAAKw+L,KACZriL,EAAOnc,EAAKmc,KACZqrc,EAAWxnd,EAAKwnd,SAapB,GAZKzjd,EAAKk9c,SAA4B,IAAjBl9c,EAAKk9c,UACtBl9c,EAAKk9c,SAAW,GAEfl9c,EAAK49c,SAA4B,IAAjB59c,EAAK49c,UACtB59c,EAAK49c,SAAW,GAEP,IAATgG,GAAc5jd,EAAKk9c,QAAU,GAAKl9c,EAAK49c,QAAU,IACjD6F,EAASzjd,EAAKwtB,KAAK,IAAIvpB,KAAKjE,GAC5BA,EAAKk9c,QAAUl9c,EAAKwtB,KAAK,GACzBxtB,EAAK49c,QAAU59c,EAAKwtB,KAAK,GACzBxtB,EAAKwtB,KAAK,GAAKi2b,EAASzjd,EAAKk9c,SAAShhd,OAAS,GAErC,MAAV6D,GAA0B,MAARqY,EAAc,CAEhC,GADiCrY,EAAOm9c,QAAUl9c,EAAKk9c,QACtB,EAAG,CAChC9kc,EAAK8kc,QAAUn9c,EAAOm9c,QACtB9kc,EAAKwlc,QAAU59c,EAAKk9c,QACpB9kc,EAAKoV,QACLpV,EAAK5L,KACL4L,EAAK3L,KACL,IAAK,IAAI7Q,EAAIwc,EAAKwlc,QAAU,EAAGhid,EAAIwc,EAAK8kc,QAASthd,IAC7C6nd,EAAS7nd,GAAGqI,KAAKmU,GACjB3Y,KAAKqjd,iBAAiBrF,gBAAgBrlc,EAAMxc,EAAG6nd,EAAS7nd,GAAGM,OAAS,MAQpFggd,EAAiBphd,UAAUwod,cAAgB,SAAUO,EAAK/md,EAAKL,GAC3D,IAAIsG,EAAKjG,EAAIo6B,KAIT8yG,EAAW65U,EAAIxsb,IAAIt0B,GAEvB,OADA8gd,EAAIxsb,IAAIt0B,GAAMtG,EACPutI,GAMXkyU,EAAiBphd,UAAU8jd,uBAAyB,SAAUiF,EAAK/md,EAAKL,EAAO0xF,GAC3E,IAAIprF,EAAKjG,EAAIiG,GAITinI,EAAW65U,EAAIxsb,IAAIt0B,GAEvB,OADA8gd,EAAIxsb,IAAIt0B,GAAMtG,EACPutI,GAMXkyU,EAAiBphd,UAAUsnd,cAAgB,SAAUyB,EAAK/md,GACjD2C,KAAKmjd,4BAAkE,IAApCnjd,KAAKmjd,6BACzCnjd,KAAKmjd,2BAA6B,GAEtC,IAAI7/c,EAAKjG,EAAIo6B,KACb,OAAKn0B,EASE8gd,EAAIxsb,IAAIt0B,GARNjG,EAAIgnd,eAKED,EAAIxsb,IAAIv6B,EAAIgnd,iBAJnBhnd,EAAIgnd,eAAiB,sBAAwBrkd,KAAKmjd,6BAC3C9ld,EAAIgnd,iBAYvB5H,EAAiBphd,UAAUkld,uBAAyB,SAAU6D,EAAK/md,GAC1D2C,KAAKmjd,4BAAkE,IAApCnjd,KAAKmjd,6BACzCnjd,KAAKmjd,2BAA6B,GAEtC,IAAI7/c,EAAKjG,EAAIiG,GACb,OAAKA,EASE8gd,EAAIxsb,IAAIt0B,GARNjG,EAAIgnd,eAKED,EAAIxsb,IAAIv6B,EAAIgnd,iBAJnBhnd,EAAIgnd,eAAiB,sBAAwBrkd,KAAKmjd,6BAC3C9ld,EAAIgnd,iBAYvB5H,EAAiBphd,UAAUqmd,oBAAsB,SAAU0C,GAEvD,IAAK,IADDrld,KACKX,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAK8md,EAAIxsb,KAAMx5B,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC9D,IAAIf,EAAMwF,EAAGzE,GACbW,EAAOyF,KAAK4/c,EAAIxsb,IAAIv6B,IAExB,OAAO0B,GAMX09c,EAAiBphd,UAAUund,MAAQ,SAAU0B,EAASC,EAAUC,EAAgBlC,EAAW9ld,GACtEA,EAAK8ld,UACH9ld,EAAKgmd,YACThmd,EAAKwnd,SAEpB,GAAgB,MAAZO,EAAkB,CAClB,IAAK,IAAIpod,EAAI,EAAGA,EAAIood,EAAS9nd,OAAQN,IAAK,CACtC,IAAI0ld,EAAe0C,EAASpod,GACR,MAAhB0ld,IACiB,MAAbS,IACAA,EAAY,IAAIhkd,QAEpB9B,EAAK8D,OAAS,KACd9D,EAAKw+L,KAAO6mR,EACZrld,EAAKmc,KAAO,KACR6rc,GAEA3C,EAAajD,YACbiD,EAAajD,SAAS,GAAK5+c,KAAKojd,SAChCvB,EAAajD,SAAS,GAAKzid,EAC3B6D,KAAKykd,YAAYH,EAAShC,EAAWnmd,EAAG,EAAGK,IAG3CwD,KAAK0kd,iBAAiBJ,EAAShC,EAAW,EAAG9ld,IAIzDwD,KAAKojd,aAMb3G,EAAiBphd,UAAUqpd,iBAAmB,SAAUJ,EAASH,EAAMz6Y,EAAOltE,GACzDA,EAAK8ld,UACH9ld,EAAKgmd,YACThmd,EAAKwnd,SACPxnd,EAAK8D,OAHlB,IAII06L,EAAOx+L,EAAKw+L,KACLx+L,EAAKmc,KAChB,GAAY,MAARqiL,EAAc,CACd,IAAInuG,EAASmuG,EAAK13L,GAClB,GAAoB,MAAhB6gd,EAAKt3X,GAAiB,CACtBs3X,EAAKt3X,GAAUmuG,EACfh7L,KAAK2kd,qBAAqBL,EAAS56Y,EAAO,EAAGltE,GAG7C,IAAK,IADDood,EAAgB5pR,EAAKgnR,iBAAiB3gd,QACjClF,EAAI,EAAGA,EAAIyod,EAAcnod,OAAQN,IAAK,CAC3C,IAAIgmd,EAAeyC,EAAczod,GAC7B27C,EAAaqqa,EAAah7c,OAE9B3K,EAAK8D,OAAS06L,EACdx+L,EAAKw+L,KAAOljJ,EACZt7C,EAAKmc,KAAOwpc,EACZnid,KAAK0kd,iBAAiBJ,EAASH,EAAMz6Y,EAAQ,EAAGltE,SAIpDwD,KAAK2kd,qBAAqBL,EAAS56Y,EAAO,EAAGltE,KAOzDigd,EAAiBphd,UAAUspd,qBAAuB,SAAUL,EAAS56Y,EAAOy6Y,EAAMU,GAC9E,IAAIvkd,EAASukd,EAAcvkd,OACvB06L,EAAO6pR,EAAc7pR,KACrBriL,EAAOksc,EAAclsc,KACzB,GAAgB,2BAAZ2rc,GAAoD,yBAAZA,EAAoC,CAC5E,IAAI//c,EAAqB,yBAAZ+/c,EACbtkd,KAAK8kd,qBAAqBxkd,EAAQ06L,EAAMriL,EAAM+wD,EAAOm7Y,EAAetgd,GAExD,qBAAZ+/c,GACAtkd,KAAKkkd,iBAAiBx6Y,EAAOy6Y,EAAMU,IAM3CpI,EAAiBphd,UAAUypd,qBAAuB,SAAUxkd,EAAQC,EAAMoY,EAAM+wD,EAAOltE,EAAM+H,GACzF,IAAI+9c,EAAY9ld,EAAK8ld,UACjBE,EAAchmd,EAAKgmd,YACRhmd,EAAKwnd,SAChBhkd,KAAKqjd,iBAAiB3E,WAAWn+c,EAAMD,KACvCN,KAAKqjd,iBAAiBP,OAAOnqc,EAAM,GACnC3Y,KAAKqjd,iBAAiB9+c,OAAOoU,EAAMrY,EAAO0hd,kBACtCz9c,GACAhE,EAAKyhd,iBAAiBx9c,KAAKmU,GAC3BrY,EAAOwhd,iBAAiBt9c,KAAKmU,GAC7B3Y,KAAKqjd,iBAAiB9+c,OAAOoU,EAAMpY,EAAKuhd,oBAGxCxhd,EAAOwhd,iBAAiBt9c,KAAKmU,GAC7B3Y,KAAKqjd,iBAAiB9+c,OAAOoU,EAAMpY,EAAKuhd,kBACxCvhd,EAAKyhd,iBAAiBx9c,KAAKmU,KAGnC2pc,EAAU/hd,EAAK+C,IAAM/C,SACdiid,EAAYjid,EAAK+C,KAK5Bm5c,EAAiBphd,UAAUopd,YAAc,SAAUH,EAASH,EAAMY,EAAOr7Y,EAAOltE,GAC5DA,EAAK8ld,UACH9ld,EAAKgmd,YACRhmd,EAAKwnd,SAFpB,IAGI1jd,EAAS9D,EAAK8D,OACd06L,EAAOx+L,EAAKw+L,KACLx+L,EAAKmc,KAChB,GAAY,MAARqiL,EAAc,CACd,GAAc,MAAV16L,IACqB,MAAjB06L,EAAK4jR,UACL5jR,EAAK4jR,SAAS,KAAOt+c,EAAOs+c,SAAS,IAAI,CACzC,IAAIoG,EAAiB1kd,EAAOs+c,SAASnid,OAAS,EAC9Cu+L,EAAK4jR,SAAWt+c,EAAOs+c,SAASv9c,QAChC25L,EAAK4jR,SAASoG,EAAiB,GAAKD,EAG5C,IAAIl4X,EAASmuG,EAAK13L,GAClB,GAAoB,MAAhB6gd,EAAKt3X,GAAiB,CACtBs3X,EAAKt3X,GAAUmuG,EACfh7L,KAAK2kd,qBAAqBL,EAAS56Y,EAAO,EAAGltE,GAE7C,IAAK,IADDood,EAAgB5pR,EAAKgnR,iBAAiB3gd,QACjClF,EAAI,EAAGA,EAAIyod,EAAcnod,OAAQN,IAAK,CAC3C,IAAIgmd,EAAeyC,EAAczod,GAC7B27C,EAAaqqa,EAAah7c,OAC9B3K,EAAK8D,OAAS06L,EACdx+L,EAAKw+L,KAAOljJ,EACZt7C,EAAKmc,KAAOwpc,EACZnid,KAAKykd,YAAYH,EAASH,EAAMhod,EAAGutE,EAAQ,EAAGltE,SAIlDwD,KAAK2kd,qBAAqBL,EAAS56Y,EAAO,EAAGltE,KAQzDigd,EAAiBphd,UAAUgE,MAAQ,SAAUtC,EAAKkod,EAAYC,GAE1D,GADAA,EAAsB,MAAXA,GAAmBA,EACnB,MAAPnod,GAA4C,mBAArBA,EAAe,YAAkB,CAExD,IAAK,IADDiwa,EAAYjwa,EAAIa,cACXQ,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKP,GAAMqB,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC1D,IAAIjC,EAAI0G,EAAGzE,GACD,mBAANjC,IAAyC,MAAd8od,GAAsBA,EAAW1md,QAAQpC,GAAK,KACpE+od,GAA+B,iBAAZnod,EAAIZ,MAKxB6wa,EAAU7wa,GAAKY,EAAIZ,IAI/B,OAAO6wa,EAEX,OAAO,MAEJyvC,KAKPxB,GAAgC,WAChC,SAASA,KAoTT,OA9SAA,EAAe5/c,UAAU8pd,mBAAqB,SAAUvic,GAGpD,IAAK,IAFDwic,EAAWxic,EAAM+6b,MAAMlhd,OACvB4od,EAAiB,EACZlpd,EAAI,EAAGA,EAAIipd,EAAUjpd,IAC1Bkpd,GAAkBrld,KAAKsld,sBAAsBnpd,EAAGymB,GAEpD,OAAOyic,GAMXpK,EAAe5/c,UAAU0kd,gBAAkB,SAAUx/c,EAAMmpE,GACvD,OAAInpE,EACIP,KAAK69c,SAASt9c,GACPA,EAAKwtB,KAAK,GAGVxtB,EAAKwtB,KAAK27C,EAAQnpE,EAAK49c,QAAU,GAGzC,GAKXlD,EAAe5/c,UAAUiqd,sBAAwB,SAAUnpd,EAAGymB,GAM1D,IAAK,IALDyic,EAAiB,EACjB/lP,EAAO18M,EAAM+6b,MAAMxhd,GACnBopd,EAAe3ic,EAAM+6b,MAAMxhd,EAAI,GAC/Bqpd,KAEKjic,EAAI,EAAGA,EAAI+7M,EAAK7iO,OAAQ8mB,IAAK,CAMlC,IAAK,IALDhjB,EAAO++N,EAAK/7M,GACZkic,EAAezld,KAAK+/c,gBAAgBx/c,EAAMpE,GAC1Cqkd,EAAiBxgd,KAAKu/c,yBAAyBh/c,EAAMpE,GAAG,GAExDupd,KACKv/b,EAAI,EAAGA,EAAIq6b,EAAe/jd,OAAQ0pB,IAAK,CAC5C,IAAIw/b,EAAgBnF,EAAer6b,GAC/By/b,EAAwB5ld,KAAK+/c,gBAAgB4F,EAAexpd,EAAI,GACpEupd,EAAYlhd,KAAKohd,GAErBF,EAAY7tb,KAAK,SAAU9qB,EAAGC,GAAK,OAAOD,EAAIC,IAC9Cw4c,EAAWC,GAAgBC,EAG1B,IADDG,KACJ,IAAStic,EAAI,EAAGA,EAAIiic,EAAW/od,OAAQ8mB,IACnCsic,EAAUA,EAAQtrc,OAAOirc,EAAWjic,IAGxC,IADA,IAAIuic,EAAa,EACVA,EAAaP,EAAa9od,QAC7Bqpd,IAAe,EAEnB,IAAIC,EAAW,EAAID,EAAa,EAChCA,GAAc,EAET,IADDna,KACJ,IAASpob,EAAI,EAAGA,EAAIwic,IAAYxic,EAC5Boob,EAAKpob,GAAK,EAEd,IAASA,EAAI,EAAGA,EAAIsic,EAAQppd,OAAQ8mB,IAAK,CACrC,IACIyic,EADQH,EAAQtic,GACIuic,EAExB,MADEna,EAAKqa,GACAA,EAAY,GACXA,EAAY,IACZX,GAAkB1Z,EAAKqa,EAAY,MAGrCra,EADFqa,EAAaA,EAAY,GAAM,GAIvC,OAAOX,GAMXpK,EAAe5/c,UAAUm1D,QAAU,SAAU5tC,GAEzC5iB,KAAKimd,mBACL,IAAK,IAAI9pd,EAAI,EAAGA,EAAIymB,EAAM+6b,MAAMlhd,OAAQN,IACpC6D,KAAKimd,gBAAgB9pd,GAAKymB,EAAM+6b,MAAMxhd,GAAGkF,QAIxC,IAFD6kd,EAA+B,EAC/BC,EAAuBnmd,KAAKmld,mBAAmBvic,GACnD,IAASzmB,EAAI,EAAGA,EAAI,IAAM+pd,EAA+B,EAAG/pd,IAAK,CAC7D6D,KAAKomd,eAAejqd,EAAGymB,GACvB,IAAIyjc,EAAqBrmd,KAAKmld,mBAAmBvic,GACjD,GAAIyjc,EAAqBF,EAAsB,CAC3CA,EAAuBE,EACvBH,EAA+B,EAC/B,IAAK,IAAI3ic,EAAI,EAAGA,EAAIvjB,KAAKimd,gBAAgBxpd,OAAQ8mB,IAE7C,IAAK,IADD+7M,EAAO18M,EAAM+6b,MAAMp6b,GACd4C,EAAI,EAAGA,EAAIm5M,EAAK7iO,OAAQ0pB,IAAK,CAClC,IAAI88C,EAAOq8J,EAAKn5M,GAChBnmB,KAAKimd,gBAAgB1ic,GAAG0/C,EAAKl1C,KAAK,IAAMk1C,OAI/C,CAEDijZ,IAEA,IAAS3ic,EAAI,EAAGA,EAAIvjB,KAAKimd,gBAAgBxpd,OAAQ8mB,IAE7C,IADI+7M,EAAO18M,EAAM+6b,MAAMp6b,GACd4C,EAAI,EAAGA,EAAIm5M,EAAK7iO,OAAQ0pB,IAAK,CAC9B88C,EAAOq8J,EAAKn5M,GAChBnmB,KAAKg+c,gBAAgB/6Y,EAAM1/C,EAAG4C,IAI1C,GAA6B,IAAzBggc,EACA,MAMH,IAFDxI,KACAqG,KACJ,IAAS7nd,EAAI,EAAGA,EAAIymB,EAAM66b,QAAU,EAAGthd,IACnC6nd,EAAS7nd,MACTwhd,EAAMxhd,GAAK6nd,EAAS7nd,GAExB,IAASA,EAAI,EAAGA,EAAI6D,KAAKimd,gBAAgBxpd,OAAQN,IAC7C,IAASonB,EAAI,EAAGA,EAAIvjB,KAAKimd,gBAAgB9pd,GAAGM,OAAQ8mB,IAChDygc,EAAS7nd,GAAGqI,KAAKxE,KAAKimd,gBAAgB9pd,GAAGonB,IAGjDX,EAAM+6b,MAAQA,GAMlB1C,EAAe5/c,UAAUwid,SAAW,SAAUt9c,GAC1C,SAAIA,IAAQA,EAAK0iE,OAAS1iE,EAAK0iE,KAAK0pV,UAAWpsZ,EAAK0iE,KAAKypV,WAQ7DuuD,EAAe5/c,UAAU+qd,eAAiB,SAAUE,EAAW1jc,GAE3D,IAAI2jc,EAAiBD,EAAY,GAAM,EACvC,GAAIC,EACA,IAAK,IAAIhjc,EAAIX,EAAM66b,QAAU,EAAGl6b,GAAK,EAAGA,IACpCvjB,KAAKwmd,WAAWjjc,EAAGgjc,QAIvB,IAAShjc,EAAI,EAAGA,EAAIX,EAAM66b,QAASl6b,IAC/BvjB,KAAKwmd,WAAWjjc,EAAGgjc,IAQ/BtL,EAAe5/c,UAAUkkd,yBAA2B,SAAUt8Y,EAAMyG,EAAO8vH,QACpD,IAAfA,IAAyBA,GAAa,GAC1C,IAAIitR,EAAiB,0BACjBC,EAAc,mBAKlB,GAJIltR,IACAitR,EAAiB,8BACjBC,EAAc,oBAEdzjZ,EAAM,CACN,GAAIjjE,KAAK69c,SAAS56Y,GAAO,CACrB,GAA4B,MAAxBA,EAAKwjZ,GAAyB,CAC9BxjZ,EAAKwjZ,MACLxjZ,EAAKwjZ,GAAgB,MACrB,IAAK,IAAItqd,EAAI,EAAGA,EAAI8mE,EAAKyjZ,GAAajqd,OAAQN,IAAK,CAC/C,IAAIwc,EAAOsqD,EAAKyjZ,GAAavqd,QACRhB,IAAjBwd,EAAK8kc,UACL9kc,EAAK8kc,SAAW,IAEE,IAAlB9kc,EAAK8kc,UAAmBjkR,EAAc7gL,EAAKwlc,UAAYz0Y,EAAQ,EAAM/wD,EAAK8kc,UAAY/zY,EAAQ,GAE9FzG,EAAKwjZ,GAAgB,GAAGjid,KAAKg1L,EAAa7gL,EAAKxR,OAASwR,EAAKpc,QAI7D0mE,EAAKwjZ,GAAgB,GAAGjid,KAAKmU,IAIzC,OAAOsqD,EAAKwjZ,GAAgB,GAG5B,GAA4B,MAAxBxjZ,EAAKwjZ,GAAyB,CAC9BxjZ,EAAKwjZ,MACL,IAAStqd,EAAI,EAAGA,EAAI8mE,EAAKl1C,KAAKtxB,OAAQN,IAClC8mE,EAAKwjZ,GAAgBtqd,MACjBA,KAAOq9L,EAAa,EAAKv2H,EAAKl1C,KAAKtxB,OAAS,GAC5CwmE,EAAKwjZ,GAAgBtqd,GAAGqI,KAAKg1L,EAAav2H,EAAK97D,OAAS87D,EAAK1mE,QAG7D0mE,EAAKwjZ,GAAgBtqd,GAAGqI,KAAKy+D,GAIzC,OAAOA,EAAKwjZ,GAAgB/8Y,EAAQzG,EAAKk7Y,QAAU,GAG3D,OAAO,MAMXlD,EAAe5/c,UAAUsrd,YAAc,SAAUnG,EAAgBhD,GAG7D,IAAK,IAFDiD,KACAmG,EAAa,EACRzqd,EAAI,EAAGA,EAAIqkd,EAAe/jd,OAAQN,IAAK,CAC5C,IAAI8mE,EAAOu9Y,EAAerkd,GAC1Bskd,EAAamG,KAAgB5md,KAAK+/c,gBAAgB98Y,EAAMu6Y,GAI5D,GADAiD,EAAa5ob,KAAK,SAAUsrB,EAAGrmB,GAAK,OAAOqmB,EAAIrmB,IAC3C8pb,EAAa,GAAM,EAEnB,OAAOnG,EAAap0c,KAAK+S,MAAMwnc,EAAa,IAE3C,GAAmB,IAAfA,EACL,OAASnG,EAAa,GAAKA,EAAa,IAAM,EAG9C,IAAIC,EAAckG,EAAa,EAC3BC,EAAapG,EAAaC,EAAc,GAAKD,EAAa,GAC1DqG,EAAcrG,EAAamG,EAAa,GACtCnG,EAAaC,GACnB,OAAQD,EAAaC,EAAc,GAAKoG,EAAcrG,EAAaC,GAAemG,IAAeA,EAAaC,IAOtH7L,EAAe5/c,UAAU2id,gBAAkB,SAAU/6Y,EAAMyG,EAAO1sE,GAC1DimE,IACAA,EAAKl1C,KAAK,GAAK/wB,IAMvBi+c,EAAe5/c,UAAUmrd,WAAa,SAAUhJ,EAAW+I,GAIvD,IAAK,IAHDQ,EAAkB/md,KAAKimd,gBAAgBzI,GAAW/gd,OAClDgkd,KACAuG,KACK7qd,EAAI,EAAGA,EAAI4qd,EAAiB5qd,IAAK,CACtC,IAAI8mE,EAAOjjE,KAAKimd,gBAAgBzI,GAAWrhd,GACvC8qd,GAAgBN,YAAa,GACjCM,EAAYhkZ,KAAOA,EAGnB,IAAIikZ,OAA0B,EAE1BA,EADAX,EAC0Bvmd,KAAKu/c,yBAAyBt8Y,EAAMu6Y,GAGpCx9c,KAAKu/c,yBAAyBt8Y,EAAMu6Y,GAAW,GAE7E,IAAI2J,OAAgB,EACJA,EAAhBZ,EAAgC/I,EAAY,EAAoBA,EAAY,EAC7C,MAA3B0J,GAAsE,IAAnCA,EAAwBzqd,QAC3Dwqd,EAAYN,YAAc3md,KAAK2md,YAAYO,EAAyBC,GACpE1G,EAAaj8c,KAAKyid,IAKlBD,EAAkBhnd,KAAK+/c,gBAAgB98Y,EAAMu6Y,KAAc,EAGnEiD,EAAa5ob,KAAK73B,KAAKozM,SAEvB,IAASj3M,EAAI,EAAGA,EAAI4qd,EAAiB5qd,IACjC,GAA4B,MAAxB6qd,EAAkB7qd,GAAY,CAC1B8mE,EAAOw9Y,EAAa9iY,QAAQ1a,KAChCjjE,KAAKg+c,gBAAgB/6Y,EAAMu6Y,EAAWrhd,KAQlD8+c,EAAe5/c,UAAU+3M,QAAU,SAAUjwJ,EAAGrmB,GAC5C,GAAS,MAALqmB,GAAkB,MAALrmB,EAAW,CACxB,GAAIA,EAAE6pb,YAAcxja,EAAEwja,YAClB,OAAQ,EAEP,GAAI7pb,EAAE6pb,YAAcxja,EAAEwja,YACvB,OAAO,EAGf,OAAO,GAEJ1L,KCxjDP3wX,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAgB5D2zX,GAAgB,SAAUxzZ,GAC1B,IAAIs7D,EAAOt7D,EACX,OAAIs7D,EAAKthB,aAAeshB,EAAKtZ,aAAesZ,EAAK/gB,UAAY+gB,EAAK2yV,UAC3D3yV,EAAKa,cAAgBb,EAAK4yV,cAAgB5yV,EAAKxT,iBAAmBwT,EAAKtT,gBACnEe,IAEP/oD,EAAI4wB,QAAU5wB,EAAI4wB,iBAAiBo+X,IAAShvZ,EAAI4wB,MAAMjnB,MAC/CygD,KAOXiga,GAAyB,SAAUj8X,GAEnC,SAASi8X,IACL,OAAkB,OAAXj8X,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAoB/D,OAtBAsqF,GAAU88X,EAASj8X,GAInBN,IACI3jF,EAAS,KACVkgd,EAAQ/rd,UAAW,UAAM,GAC5BwvF,IACI3jF,KACDkgd,EAAQ/rd,UAAW,cAAU,GAChCwvF,IACI3jF,GAAS,IACVkgd,EAAQ/rd,UAAW,gBAAY,GAClCwvF,IACI3jF,EAAS,KACVkgd,EAAQ/rd,UAAW,eAAW,GACjCwvF,IACI3jF,EAAS,KACVkgd,EAAQ/rd,UAAW,aAAS,GAC/BwvF,IACIliF,EAAkB4nZ,KACnB62D,EAAQ/rd,UAAW,eAAW,GAC1B+rd,GACTpoZ,IAKEqoZ,GAA+B,SAAUl8X,GAEzC,SAASk8X,IACL,OAAkB,OAAXl8X,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbAsqF,GAAU+8X,EAAel8X,GAIzBN,IACI3jF,KACDmgd,EAAchsd,UAAW,aAAS,GACrCwvF,IACI3jF,KACDmgd,EAAchsd,UAAW,cAAU,GACtCwvF,IACI9iF,KAAYmyC,KACbmta,EAAchsd,UAAW,cAAU,GAC/Bgsd,GACTroZ,IAYEsoZ,GAA+B,SAAUn8X,GAOzC,SAASm8X,EAAct0c,EAAShS,GAC5B,IAAIjB,EAAQorF,EAAO7pF,KAAKtB,KAAMgT,EAAShS,IAAYhB,KAoBnD,OAnBAD,EAAMwnd,eACNxnd,EAAM4mB,KAAO,OAMb5mB,EAAMmP,OAAS,SAAUrO,GACrB,IAAI2md,EACAlkd,EAAKzC,EAAE8xG,OAAOxrG,OAAO7D,GAAGpG,MAAM,cAAc,GAC5C++F,EAASl8F,EAAMwnd,YAAYjkd,GAC/B,GAAI24F,GAAUl8F,EAAMktb,eAAgB,CAChCltb,EAAMotb,gBAAkBptb,EAAMktb,eAAe3pb,KAAO24F,EAAO34F,GAAK24F,EAASl8F,EAAMktb,eAChEltb,EAAMugF,iBAAiBz/E,EAAE8xG,SACxC60W,EAAgBznd,EAAM0nd,iBAAiB1nd,EAAMotb,gBAAiBtsb,EAAE8xG,OAAQ5yG,EAAMiB,UAChEwC,aAAa,YAAazD,EAAMiB,QAAQsC,IAE1D,OAAOkkd,GAEJznd,EAs3BX,OAj5BAuqF,GAAUg9X,EAAen8X,GAkCzBm8X,EAAcjsd,UAAUmsF,kBAAoB,SAAUiF,EAASC,GAE3D,IAAK,IADDx6B,GAAU,EACL9zD,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKmvF,GAAUruF,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAE9D,OADWyE,EAAGzE,IAEV,IAAK,QACD4B,KAAKgB,QAAQ0D,MAAMsR,MAAQhW,KAAKgW,MAAM9I,WACtC,MACJ,IAAK,SACDlN,KAAKgB,QAAQ0D,MAAMqR,OAAS/V,KAAK+V,OAAO7I,WACxC,MACJ,IAAK,gBACD,MACJ,IAAK,cACL,IAAK,eACL,IAAK,gBACDglD,GAAU,EACV,MACJ,IAAK,eACD,GAAIu6B,EAAQi7X,aACR1nd,KAAKixT,oBAEJ,CACD,IAAIn8Q,EAAat0C,SAASosB,eAAe5sB,KAAKgB,QAAQsC,GAAK,WACvDwxC,GACAA,EAAWr0C,WAAW6E,YAAYwvC,GAG1C,MACJ,IAAK,WACD,IAAK,IAAI7wC,EAAK,EAAGwG,EAAKnM,OAAOhB,KAAKmvF,EAAQ8yP,UAAWt7U,EAAKwG,EAAGhO,OAAQwH,IAAM,CACvE,IAAI9H,EAAIsO,EAAGxG,GACPgO,EAAQqlB,OAAOn7B,QACqBhB,IAApCsxF,EAAQ8yP,SAASttU,GAAOyhE,UACxB1zE,KAAK2nd,iBAAiBltZ,MAAMxoD,GAAOyhE,QAAU+Y,EAAQ8yP,SAASttU,GAAOyhE,QACrExhB,GAAU,QAE2B/2D,IAArCsxF,EAAQ8yP,SAASttU,GAAOkjL,WACnBn1L,KAAKu/U,SAASttU,GAAOsX,cAKtBvpB,KAAKu/U,SAASttU,GAAOsX,eAAgB,GAJrCvpB,KAAK2nd,iBAAiBltZ,MAAMxoD,GAAOkjL,SAAW1oG,EAAQ8yP,SAASttU,GAAOkjL,SACtEjjI,GAAU,IAOtB,MACJ,IAAK,kBACIlyD,KAAKukS,gBAINvkS,KAAK2nd,iBAAiBhxa,WAAcs4G,QAAU/jJ,SAAU,KAAOgtS,UAAYhtS,SAAU,MAHrFlL,KAAK2nd,iBAAiBhxa,WAAcs4G,QAAU/jJ,SAAU,GAAKgtS,UAAYhtS,SAAU,IAKvF,MACJ,IAAK,aACDlL,KAAK2nd,iBAAiBjxK,WAAa12S,KAAK02S,WACxCxkP,GAAU,GAIlBA,GACAlyD,KAAK4nd,mBAObN,EAAcjsd,UAAUmxG,eAAiB,WAErC,OAAOxsG,KAAKgtG,cADK,YAMrBs6W,EAAcjsd,UAAUoX,UAAY,WAChC,IAAI1S,EAAQC,KACZA,KAAKgB,QAAQ0D,MAAMmV,SAAW,OAC9B7Z,KAAKgB,QAAQ0D,MAAMqR,OAAS/V,KAAK+V,OAAO7I,WACxClN,KAAKgB,QAAQ0D,MAAMsR,MAAQhW,KAAKgW,MAAM9I,WAClClN,KAAK0nd,cACL1nd,KAAKixT,gBAGT,IAAI42J,EAAe1md,EAAc,OAASmC,GAAItD,KAAKgB,QAAQsC,GAAK,eAChEtD,KAAK2nd,iBAAmB,IAAI1xK,IACxBS,WAAY12S,KAAK02S,aAEhB12S,KAAKukS,kBACNvkS,KAAK2nd,iBAAiBhxa,WAAcs4G,QAAU/jJ,SAAU,GAAKgtS,UAAYhtS,SAAU,KAEvFlL,KAAK2nd,iBAAiBxyR,SAAW,SAAUl1L,GACvC,IAAIgS,EAAQlS,EAAM4nd,iBAAiBltZ,MAAMl8D,QAAQ0B,EAAK4d,MACtD9d,EAAMw/U,SAASttU,GAAOkjL,SAAWl1L,EAAKg5S,WACtCl5S,EAAMw/U,SAASttU,GAAOsX,eAAgB,GAE1CvpB,KAAKgB,QAAQW,YAAYkmd,GACzBjza,KACA50C,KAAKw+G,eACLx+G,KAAKukB,cAKT+ic,EAAcjsd,UAAU0wG,OAAS,WAC7B/rG,KAAKswa,gBAAkB,IAAI9f,GAAgBxwZ,KAAKgB,QAAQsC,GAAI,IAAIwqB,IAAe,GAC/E9tB,KAAK6hF,YAAc,IAAI2uU,GAAgBxwZ,KAAKgB,QAAQsC,GAAI,IAAIwqB,IAAe,GAC3E9tB,KAAK8nd,iBACL9nd,KAAK2nd,iBAAiBtxa,SAAS,IAAMr2C,KAAKgB,QAAQsC,GAAK,eAM3Dgkd,EAAcjsd,UAAUkkC,cAAgB,WACpC,MAAO,iBAOX+nb,EAAcjsd,UAAUw1F,gBAAkB,WACtC,IAAIgB,KAKJ,OAJAA,EAAQrtF,MACJ6sF,OAAQ,OACRpxF,UAEG4xF,GAMXy1X,EAAcjsd,UAAUiX,QAAU,WAC9B,GAAItS,KAAK+nd,UAAW,CAChB/nd,KAAK4yG,UAAUtgG,UACftS,KAAKw+G,eACLx+G,KAAK+N,OAAO,cACZo9E,EAAO9vF,UAAUiX,QAAQhR,KAAKtB,MAC9B,IAAIo6B,EAAU55B,SAASosB,eAAe5sB,KAAKgB,QAAQsC,GAAK,cACxD,GAAI82B,EAAS,CACTp6B,KAAKgB,QAAQsE,YAAY80B,GACzB,IAAI4tb,EAAgB,iBAChBnsd,OAAOmsd,KACPnsd,OAAOmsd,GAAenza,YAAc,EACK,IAArCh5C,OAAOmsd,GAAenza,aACtBh5C,OAAOmsd,GAAevnd,WAAW6E,YAAYzJ,OAAOmsd,IACpDnsd,OAAOmsd,GAAiB,OAIpChod,KAAKgB,QAAQ8C,UAAUS,OAAO,qBAQtC+id,EAAcjsd,UAAU4sd,YAAc,SAAUC,GAC5C,IAAK,IAAI9pd,EAAK,EAAGyE,EAAKqld,EAAYlxX,QAAS54F,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC7D,IAAI69F,EAASp5F,EAAGzE,GAChB,GAAI69F,aAAkB90C,GAAM,CACxB,IAAI6J,EAAkB3jB,GAAYrtC,KAAKgxD,iBACnCA,GACAA,EAAgBirC,EAAQj8F,WAG3B,GAAIi8F,aAAkBn2C,GAAW,CAClC,IAAIoL,EAAuB7jB,GAAYrtC,KAAKkxD,sBACxCA,GACAA,EAAqB+qC,EAAQj8F,MAGrCA,KAAKmod,cAAclsX,GACnBj8F,KAAKund,YAAYtrX,EAAO34F,IAAM24F,IAMtCqrX,EAAcjsd,UAAU+sd,cAAgB,SAAUF,GAC9C,IAAIG,EAAa7nd,SAASW,cAAc,OACxCknd,EAAW7kd,aAAa,KAAM0kd,EAAY5kd,IAC1C,IAAIoB,EAAQ,8BACRwjd,EAAYnyc,SACZrR,GAAS,UAAYwjd,EAAYnyc,OAAS,MAE9Csyc,EAAW7kd,aAAa,QAASkB,GACjC1E,KAAKgB,QAAQW,YAAY0md,GACzB,IAAIxqc,GACA+mE,OAAQsjY,EAAYhob,MAAOi1J,SAAU+yR,EAAY/yR,SACjD/6J,QAAS,IAAM8tb,EAAY5kd,GAAIowE,QAASw0Y,EAAYx0Y,SAExD1zE,KAAK2nd,iBAAiBltZ,MAAMj2D,KAAKqZ,GACjC7d,KAAKsod,cAAcJ,EAAaG,IAKpCf,EAAcjsd,UAAUktd,eAAiB,SAAUC,EAAaC,GAC5D,IACK,IAAItsd,EAAI,EAAGA,EAAI6D,KAAKu/U,SAAS9iV,OAAQN,IAAK,CAC3C,IAAIusd,EAAqB1od,KAAKu/U,SAASpjV,GACvC,IAAoD,IAAhDusd,EAAmBpld,GAAG/E,QAAQiqd,GAAqB,CAKnD,IAAK,IAHD7kW,QAASxoH,EAAWutd,EAAoB,cAAe,GAEvD3rd,EAAM,IAAK3B,SAASC,UAAUC,KAAKC,MAAMg1Z,GAAck4D,GAAgB9kW,IAClEn8F,EAAM,EAAGA,EAAMlpB,OAAOhB,KAAKmrd,GAAehsd,OAAQ+qB,IACvDzqB,EAAIuB,OAAOhB,KAAKmrd,GAAejhc,IAAQihc,EAAcnqd,OAAOhB,KAAKmrd,GAAejhc,IAEpFkhc,EAAmB1xX,QAAQxyF,KAAKzH,GAChCiD,KAAKmod,cAAcprd,GACnBiD,KAAKund,YAAYxqd,EAAIuG,IAAMvG,EAC3B,IAAIsrd,EAAa7nd,SAASosB,eAAe87b,EAAmBpld,IAC5D+kd,EAAW1md,YAAY3B,KAAK2od,mBAAmB5rd,EAAKsrd,IACpD,SAOZf,EAAcjsd,UAAUutd,kBAAoB,SAAUJ,EAAatzI,GAE/D,IAAK,IADDhjR,EACK/1D,EAAI,EAAGA,EAAI6D,KAAKu/U,SAAS9iV,OAAQN,IAAK,CAC3C,IAAIusd,EAAqB1od,KAAKu/U,SAASpjV,GACvC,IAAoD,IAAhDusd,EAAmBpld,GAAG/E,QAAQiqd,GAC9B,IAAK,IAAIpqd,EAAK,EAAGyE,EAAK6ld,EAAmB1xX,QAAS54F,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACpE,IAAI69F,EAASp5F,EAAGzE,GAChB,IAAqC,IAAjC69F,EAAO34F,GAAG/E,QAAQ22U,GAAkB,CACpC,IAAIjjU,EAAQy2c,EAAmB1xX,QAAQz4F,QAAQ09F,GAC/CysX,EAAmB1xX,QAAQ3uE,OAAOpW,EAAO,UAClCjS,KAAKund,YAAYtrX,EAAO34F,IAC/B,IAAItC,EAAUR,SAASosB,eAAeqvE,EAAO34F,GAAK,cAClDtC,EAAQP,WAAW6E,YAAYtE,GAC/BkxD,GAAU,EACV,OAIZ,GAAIA,EACA,QAOZo1Z,EAAcjsd,UAAU8sd,cAAgB,SAAUlsX,GAC9C,IAAIjmF,EACAihD,EACAlhD,EACAmhD,EAGA98B,EAFAyub,EAAa,IAAIt4B,GACjBxzb,EAAMk/F,EAEN6sX,EAAkB,IAAIjlE,GAEtBklE,EAAoB17a,GAAYrtC,KAAK+od,mBACrCA,IACA3ub,EAAU2ub,EAAkB9sX,IAE3B7hE,IACDA,EAAU6hE,EAAO+7H,KAAKh4N,OAE1B,IAAIgpd,GAAehzc,MAAOhW,KAAKgoR,YAAajyQ,OAAQ/V,KAAKgnY,cACrDiiF,EAAgB57a,GAAYrtC,KAAKipd,eAgBrC,GAfIA,IACAD,EAAaC,EAAchtX,IAE/B+sX,EAAaA,MAEb5ub,EAAQm0B,aAAe,SACvBn0B,EAAQq5B,oBAAsBr5B,EAAQs5B,kBAAoB,SAC1Do1Z,EAAgBpkd,MAAMktC,YAAck3a,EAAgBpkd,MAAMk5B,KAAO,OACjEkrb,EAAgB1uc,UAAYggB,GAC5BA,EAAQwhQ,QAAQ,IAAIxuQ,IACpBgN,EAAQunX,QAAQvnX,EAAQuV,aACxB35B,EAAQgzc,EAAWhzc,MAAQgzc,EAAWhzc,aACnB7a,IAAd4B,EAAIiZ,MAAsBokB,EAAQsS,WAAW12B,WAAQ7a,IAAc6E,KAAKgoR,YAC7EjyQ,EAASizc,EAAWjzc,OAASizc,EAAWjzc,cACpB5a,IAAf4B,EAAIgZ,OAAuBqkB,EAAQsS,WAAW32B,YAAS5a,IAAc6E,KAAKgnY,kBACjE7rY,IAAV6a,QAAkC7a,IAAX4a,EAAsB,CAC7C,IAAImzc,EAAclzc,EACdmzc,EAAepzc,OACM5a,IAArB6E,KAAKgoR,YACLkhM,EAAclpd,KAAKgoR,YAAchoR,KAAKopd,aAAa58c,KAAOxM,KAAKopd,aAAa38c,MAG5EuJ,GAASjZ,EAAI2H,MAAMmtC,iBAEG12C,IAAtB6E,KAAKgnY,aACLmiF,EAAenpd,KAAKgnY,aAAehnY,KAAKopd,aAAa18c,IAAM1M,KAAKopd,aAAaz8c,OAG7EoJ,GAAUhZ,EAAI2H,MAAMmtC,YAEpBm3a,EAAW92a,aAA+C,KAAhC82a,EAAW92a,YAAYzlB,OACjD08b,GAAgB,IAEpBlyZ,EAAKiyZ,GAAe9ub,EAAQpkB,OAASA,GACrCkhD,EAAKiyZ,GAAgB/ub,EAAQrkB,QAAUA,GACnCizc,EAAW/yc,MACXghD,EAAKiyZ,EAAcF,EAAWhzc,MAC9BkhD,EAAKiyZ,EAAeH,EAAWjzc,QAEnCC,EAAQkzc,EACRnzc,EAASozc,EACTlyZ,EAAKC,EAAK7qD,KAAK0T,IAAIk3C,EAAIC,GACvB4xZ,EAAgB9yc,MAAQA,EACxB8yc,EAAgB/yc,OAASA,EACzBqkB,EAAQpkB,MAAQgzc,EAAWhzc,MAC3BokB,EAAQrkB,OAASizc,EAAWjzc,OAC5B/V,KAAKqpd,YAAYptX,EAAQ6sX,EAAiB7xZ,EAAIC,EAAIlhD,EAAOD,OAExD,CACD,IAAI6uC,OAAc,EACdq3C,aAAkBn2C,KAClBlB,EAAcD,GAAes3C,IAEjC7hE,EAAQpkB,MAAQimF,EAAOjmF,SAAyB4uC,EAAY5uC,MAAQokB,EAAQsS,WAAW12B,MACvFokB,EAAQrkB,OAASkmF,EAAOlmF,UAA0B6uC,EAAY7uC,OAASqkB,EAAQsS,WAAW32B,OAE9FkmF,EAAOlqF,QAAU82c,EACjBA,EAAWzuc,UAAY0uc,GACvB1ub,EAAQuS,MAAQk8a,EAAWl8a,OAAU5/B,EAAG,EAAGC,EAAG,GAC9C67c,EAAWvld,GAAK82B,EAAQ92B,GAAK,UAC7Buld,EAAWnkd,MAAMk5B,KAAOirb,EAAWnkd,MAAMktC,YAAc,cACvDi3a,EAAWh9c,QAAUowF,EAAOv3F,MAAMmtC,YAAc,EAChDg3a,EAAW58c,QAAUgwF,EAAOv3F,MAAMmtC,YAAc,EAEhD7xC,KAAKspd,qBAAqBN,EAAYhzc,EAAO6yc,GAC7CA,EAAWjtL,QAAQ,IAAIxuQ,IACvBy7b,EAAWlnE,QAAQknE,EAAWl5a,aAC9Bq5a,EAAWhzc,MAAQgzc,EAAWhzc,OAASokB,EAAQsS,WAAW12B,MAC1Dgzc,EAAWjzc,OAASizc,EAAWjzc,QAAUqkB,EAAQsS,WAAW32B,OAC5DkmF,EAAOj8F,KAAK2mB,MAAQqic,GAOxB1B,EAAcjsd,UAAUiud,qBAAuB,SAAUN,EAAYhzc,EAAO1V,GACxE,GAAI0od,GAAcA,EAAW92a,aAAe82a,EAAW92a,YAAYzlB,KAAM,CACrE,IAAI6J,EAAc,IAAIw8B,GAEtBk2Z,EAAW92a,YAAYr4B,SAAWmvc,EAAW92a,YAAYr4B,UAAY,WACrEmvc,EAAW92a,YAAYp3B,KAAOkuc,EAAW92a,YAAYp3B,MAAQ,mBAC7Dwb,EAAY8D,QAAU4ub,EAAW92a,YAAYzlB,KAC7C6J,EAAYtgB,MAAQA,EACpBsgB,EAAYvgB,OAAS,GACrBugB,EAAY5xB,MAAMktC,YAAc,cAChCtb,EAAY5xB,MAAMk5B,KAAO,cACzBtH,EAAY5xB,MAAMmtC,YAAc,EAChCvb,EAAY5xB,MAAM8sC,aAAew3a,EAAW92a,YAAYp3B,KACxDwb,EAAY5xB,MAAM07B,aAAe4ob,EAAW92a,YAAYr4B,SACxDyc,EAAYmG,QAAWjwB,KAAM,EAAGC,MAAO,EAAGC,IAAK,EAAGC,OAAQ,GAC1DrM,EAAO8Z,SAAS5V,KAAK8xB,KAQ7Bgxb,EAAcjsd,UAAUitd,cAAgB,SAAUJ,EAAaqB,GAC3D,IAAK,IAAInrd,EAAK,EAAGyE,EAAKqld,EAAYlxX,QAAS54F,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC7D,IAAI69F,EAASp5F,EAAGzE,GAChB4B,KAAK2od,mBAAmB1sX,EAAQstX,KAQxCjC,EAAcjsd,UAAUosd,iBAAmB,SAAUxrX,EAAQrmB,EAAK2zY,GAC9D,IAAI7lF,EACAzsU,EACAC,EACAsyZ,EAAqBvtX,EAAOlqF,QAAQqI,SAAS,GAAGu1B,YAAY35B,MAAQimF,EAAOv3F,MAAMmtC,YACjF43a,EAAsBxtX,EAAOlqF,QAAQqI,SAAS,GAAGu1B,YAAY55B,OAASkmF,EAAOv3F,MAAMmtC,YACnFzX,EAAU6hE,EAAOlqF,QAAQqI,SAAS,GAAGA,SAAS,GAClD,QAAiCjf,IAA7B6E,KAAK0pd,cAAc1zc,YAAqD7a,IAA9B6E,KAAK0pd,cAAc3zc,OAAsB,CACnFyzc,GAAsBxpd,KAAK0pd,cAAc1zc,OAASwzc,GAAsBvtX,EAAOv3F,MAAMmtC,YACrF43a,GAAuBzpd,KAAK0pd,cAAc3zc,QAAU0zc,GAAuBxtX,EAAOv3F,MAAMmtC,YACxFolB,EAAKuyZ,EAAqBpvb,EAAQsS,WAAW12B,MAC7CkhD,EAAKuyZ,EAAsBrvb,EAAQsS,WAAW32B,OAC9CkhD,EAAKC,EAAK7qD,KAAK0T,IAAIk3C,EAAIC,GACvB,IAAI8wN,EAAc5tP,EAAQsS,WAAW12B,MAAQihD,EACzC+vU,EAAe5sW,EAAQsS,WAAW32B,OAASmhD,EAC/C+kC,EAAOlqF,QAAQqI,SAAS,GAAGpE,MAAQwzc,EACnCvtX,EAAOlqF,QAAQqI,SAAS,GAAGrE,OAAS0zc,EACpCzpd,KAAK2pd,wBAAwBvvb,GAC7Bp6B,KAAKqpd,YAAYptX,EAAQA,EAAOlqF,QAAQqI,SAAS,GAAI68C,EAAIC,EAAI8wN,EAAag/G,GAC1EwiF,EAAqBxhM,EACrByhM,EAAsBziF,EAE1B,IAAI2xB,GAAiB5rZ,EAAGqtB,EAAQvuB,QAASmB,EAAGotB,EAAQnuB,SACpDmuB,EAAQvuB,QAAUuuB,EAAQnuB,QAAUgwF,EAAOv3F,MAAMmtC,YAAc,EAC/DzX,EAAQuS,OAAU5/B,EAAG,EAAGC,EAAG,GAC3BhN,KAAK2pd,wBAAwBvvb,GAC7B,IACIl5B,EADAuoJ,EAAmBtoJ,EAAc,OAErCsoJ,EAAiBjmJ,aAAa,YAAa,QAC3CimJ,EAAiBjmJ,aAAa,QAAS,eACvCimJ,EAAiB/kJ,MAAM2ka,cAAgB,OACvC7oa,SAASuL,KAAKpK,YAAY8nJ,GAC1B,IAAI/kJ,EAAQ,cACZ,GAA0B,WAAtBu3F,EAAOtuE,MAAMjnB,KAAmB,CAChCg9X,EAAS/vV,GAAiB,OACtBrwC,GAAI24F,EAAO34F,GAAK,WAChB0S,MAAO3J,KAAKwmB,KAAK22b,GAAsB,EACvCzzc,OAAQ1J,KAAKwmB,KAAK42b,GAAuB,IAE7C,IAAIvqE,EAAWvrW,GAAiB,KAAOrwC,GAAI24F,EAAO34F,GAAK,OACvDogY,EAAO/hY,YAAYu9Y,GACnBz1P,EAAiB9nJ,YAAY+hY,GAC7B1jY,KAAK6hF,YAAYyvU,cAAcl3X,EAAS8kX,OAAU/jZ,OAAWA,EAAWuoY,OAE7C,SAAtBznS,EAAOtuE,MAAMjnB,KAClBxF,EAAMlB,KAAK4pd,cAAc3tX,EAAQynS,EAAQj6O,EAAkBggU,EAAqBD,GAAoB,IAGpG9lF,EAAS/2S,GAAeI,aAAakP,EAAO34F,GAAK,WAA6E,GAAhE+I,KAAKwmB,KAAK22b,GAAsBvtX,EAAOv3F,MAAMmtC,YAAc,GAA0E,GAAjExlC,KAAKwmB,KAAK42b,GAAuBxtX,EAAOv3F,MAAMmtC,YAAc,IAC9L43G,EAAiB9nJ,YAAY+hY,GAC7Bh/X,GAAS,wBACTg/X,EAAOlgY,aAAa,mBAAoB,OACxCkgY,EAAOx2S,WAAW,MAAM66Q,aAAa,EAAG,EAAG,EAAG,EAAG,EAAG,GACpD/nW,KAAKswa,gBAAgBhf,cAAcl3X,EAASspW,OAAQvoY,IAKxD,OAHE+F,GAA6B,SAAtB+6F,EAAOtuE,MAAMjnB,KAAmBxF,EAAMwiY,GAAQlgY,aAAa,QAASkB,GAC7E01B,EAAQvuB,QAAU8sZ,EAAa5rZ,EAC/BqtB,EAAQnuB,QAAU0sZ,EAAa3rZ,EACxBy8I,GAEX69T,EAAcjsd,UAAUsud,wBAA0B,SAAUvvb,GACpDA,EAAQhgB,WACRggB,EAAQhgB,SAAS,GAAG/M,UAAYqzY,GAAUM,MAE9C5mX,EAAQwhQ,QAAQ,IAAIxuQ,IACpBgN,EAAQunX,QAAQvnX,EAAQuV,aACpBvV,EAAQhgB,WACRggB,EAAQhgB,SAAS,GAAG/M,UAAYqzY,GAAUO,SAGlDqmE,EAAcjsd,UAAUwud,iBAAmB,SAAU5tX,EAAQjmF,EAAOD,GAChE,IAAI/U,EAAUi7F,EAAOlqF,QAAQqI,SAAS,GAAGA,SAAS,GAC9Cy3B,EAAcoqD,EAAOv3F,MAAMmtC,YAC/B7wC,EAAQgV,OAASA,GAAShV,EAAQgV,QAAU67B,EAAc,GAC1D7wC,EAAQ+U,QAAUA,GAAU/U,EAAQ+U,SAAW87B,EAAc,GAC7DoqD,EAAOlqF,QAAQ6pR,QAAQ,IAAIxuQ,IAC3B6uE,EAAOlqF,QAAQ4vY,QAAQ1lT,EAAOlqF,QAAQ49B,cAO1C23a,EAAcjsd,UAAUstd,mBAAqB,SAAU1sX,EAAQstX,EAAW9iU,GACtE,IAAIuiU,EAAahpd,KAAKund,YAAYtrX,EAAO34F,IAAItD,KAAK2mB,MAC9CmG,EAAO9sB,KAAK8pd,cAAc7tX,EAAQ+sX,GAClChzc,EAAQ8W,EAAK9W,MAAQ,EACrBD,EAAS+W,EAAK/W,OAAS,EACvB0E,EAAYtZ,EAAc,OAC1BmC,GAAI24F,EAAO34F,GAAK,aAChBC,OAAQ,SAAWyS,EAAQ,aAAeD,EAAS,kCAEvD0E,EAAUjX,aAAa,QAASwld,EAAW92a,YAAc82a,EAAW92a,YAAYzlB,KAAOwvE,EAAO34F,IAC9Fimd,EAAU5nd,YAAY8Y,GACtB,IAAIipX,EACAwb,EACAh+Y,EAsBJ,GArB0B,WAAtB+6F,EAAOtuE,MAAMjnB,MACbg9X,EAAS/vV,GAAiB,OACtBrwC,GAAI24F,EAAO34F,GACX0S,MAAO3J,KAAKwmB,KAAKopE,EAAOlqF,QAAQ26B,WAAW12B,OAAS,EACpDD,OAAQ1J,KAAKwmB,KAAKopE,EAAOlqF,QAAQ26B,WAAW32B,QAAU,IAE1DmpY,EAAWvrW,GAAiB,KAAOrwC,GAAI24F,EAAO34F,GAAK,OACnDogY,EAAO/hY,YAAYu9Y,GACnBzkY,EAAU9Y,YAAY+hY,GACtB1jY,KAAK6pd,iBAAiB5tX,GACtBj8F,KAAK6hF,YAAYyvU,cAAcr1T,EAAOlqF,QAASmtY,OAAU/jZ,OAAWA,EAAWuoY,IAEpD,SAAtBznS,EAAOtuE,MAAMjnB,KAClBxF,EAAMlB,KAAK4pd,cAAc3tX,EAAQynS,EAAQjpX,EAAWwhF,EAAOlqF,QAAQ26B,WAAW32B,OAAQkmF,EAAOlqF,QAAQ26B,WAAW12B,OAAO,IAGvH0tX,EAAS/2S,GAAeI,aAAakP,EAAO34F,GAAI+I,KAAKwmB,KAAoE,GAA9DopE,EAAOlqF,QAAQ26B,WAAW12B,MAAQimF,EAAOv3F,MAAMmtC,cAAoB,EAAGxlC,KAAKwmB,KAAqE,GAA/DopE,EAAOlqF,QAAQ26B,WAAW32B,OAASkmF,EAAOv3F,MAAMmtC,cAAoB,GAChNp3B,EAAU9Y,YAAY+hY,GACtBA,EAAOx2S,WAAW,MAAM66Q,aAAa,EAAG,EAAG,EAAG,EAAG,EAAG,GACpD/nW,KAAKswa,gBAAgBhf,cAAcr1T,EAAOlqF,QAASmtY,GAAYxb,OAAQvoY,KAEtEsrJ,EAAS,CACV,IAAIyiU,EAAcjtX,EAAOlqF,QAAQ26B,WAAW12B,MAAQimF,EAAOv3F,MAAMmtC,YAC7Ds3a,EAAeltX,EAAOlqF,QAAQ26B,WAAW32B,OAASkmF,EAAOv3F,MAAMmtC,YAC/DntC,EAAQ,eACR2H,KAAKC,IAAItM,KAAKopd,aAAa58c,MAAQwJ,EAAQkzc,GAAe,GACxD,iBAAmB78c,KAAKC,IAAItM,KAAKopd,aAAa18c,KAAOqJ,EAASozc,GAAgB,GAC9E,+DAMN,OALIzlF,aAAkBqmF,oBAClBrld,GAAS,4BAEXxD,GAA6B,SAAtB+6F,EAAOtuE,MAAMjnB,KAAmBxF,EAAMwiY,GAAQlgY,aAAa,QAASkB,GAC7E+V,EAAU3W,UAAUM,IAAI,sBACjBqW,EAEX,OAAOipX,GAEX4jF,EAAcjsd,UAAUuud,cAAgB,SAAU3tX,EAAQynS,EAAQjpX,EAAW1E,EAAQC,EAAOg0c,GACxF,IAAI9od,EAAMqyC,GAAkB,OACxBjwC,GAAM24F,EAAO34F,IAAM0md,EAAY,oBAAsB,eAErDz4D,EAAYh+W,GAAkB,OAC9BjwC,GAAM24F,EAAO34F,IAAM0md,EAAY,qBAAuB,cACtDtld,MAAS,SAAW2H,KAAKwmB,KAAK7c,EAAQ,GAAK,aAC3B3J,KAAKwmB,KAAK9c,EAAS,GAAK,uBACxCwrH,MAAS,iBAET8jT,EAAe9xY,GAAkB,OACjCjwC,GAAM24F,EAAO34F,IAAM0md,EAAY,yBAA2B,kBAC1Dtld,MAAS,SAAW2H,KAAKwmB,KAAK7c,EAAQ,GAAK,aAC3B3J,KAAKwmB,KAAK9c,EAAS,GAAK,yBAQ5C,OANAw7Y,EAAU5vZ,YAAY0jb,GACtBnkb,EAAIS,YAAY4vZ,GAChB7tB,EAAS/2S,GAAeI,aAAci9X,EAAa/tX,EAAO34F,GAAK,WAAc24F,EAAO34F,GAAK+I,KAAKwmB,KAAK7c,GAAS,EAAG3J,KAAKwmB,KAAK9c,GAAU,GACnI7U,EAAIS,YAAY+hY,GAChBjpX,EAAU9Y,YAAYT,GACtBlB,KAAKswa,gBAAgBhf,cAAcr1T,EAAOlqF,QAAQqI,SAAS,GAAGA,SAAS,GAAIspX,EAAQ6tB,GAC5ErwZ,GAEXomd,EAAcjsd,UAAUyud,cAAgB,SAAU7tX,EAAQ+sX,GACtD,IAAIhzc,EAAQimF,EAAOlqF,QAAQ26B,WAAW12B,MAClCD,EAASkmF,EAAOlqF,QAAQ26B,WAAW32B,OASvC,OARK/V,KAAKgoR,aAAgBhoR,KAAKgnY,cAK3BhxX,EAAQhW,KAAKgoR,YACbjyQ,EAAS1J,KAAKC,IAAItM,KAAKgnY,aAAcjxX,KALrCC,GAAShW,KAAKopd,aAAa58c,KAAOxM,KAAKopd,aAAa38c,MAAQwvF,EAAOv3F,MAAMmtC,YACzE97B,GAAU/V,KAAKopd,aAAa18c,IAAM1M,KAAKopd,aAAaz8c,OAASsvF,EAAOv3F,MAAMmtC,aAMvE,IAAIzkB,GAAKpX,EAAOD,IAI3Buxc,EAAcjsd,UAAUilF,iBAAmB,SAAUz/E,GACjD,IAAIoL,EACAJ,EACAq1U,EACJ,IAAiC,IAA7BrgV,EAAE6F,KAAKnI,QAAQ,SAAiB,CAEhC,IAAI2N,GADJg1U,EAAWrgV,GACU89D,eAAe,GAAGtqB,QACnCvoC,EAAQo1U,EAASviR,eAAe,GAAGvqB,QACvCnoC,EAAUC,EAAQlM,KAAKgB,QAAQoT,UAC/BvI,EAAUC,EAAQ9L,KAAKgB,QAAQmT,gBAG/BlI,EAAUpL,EAAEwzC,QAAUr0C,KAAKgB,QAAQoT,UACnCvI,EAAUhL,EAAEuzC,QAAUp0C,KAAKgB,QAAQmT,WAEvC,OAASpH,EAAGlB,EAASmB,EAAGf,IAE5Bq7c,EAAcjsd,UAAUwkV,UAAY,SAAUh/U,EAAGszC,IACzCn0C,KAAKiqd,mBAAuBjqd,KAAKitb,gBAC9Bjtb,KAAKitb,eAAe3pb,GAAK,eAAiBtD,KAAKiqd,kBAAkB3md,KACpEtD,KAAKiqd,kBAAkBnmd,UAAUS,OAAO,kBACxCvE,KAAKiqd,kBAAkBvld,MAAMitD,gBAAkB,GAC/C3xD,KAAKiqd,kBAAoB,MAE7B,IAAI3md,EAAKzC,EAAEsG,OAAO7D,GAAGpG,MAAM,cAAc,GACzC,GAAI8C,KAAKund,YAAYjkd,GAAK,CACtB,IAAImX,EAAYja,SAASosB,eAAetpB,EAAK,cAC7CmX,EAAU3W,UAAUM,IAAI,kBACxBpE,KAAKiqd,kBAAoBxvc,EAE7B5Z,EAAE2kB,kBAEN8hc,EAAcjsd,UAAUw9Z,QAAU,SAAUjjV,GACxC,GAAIA,GAAOA,EAAIzuE,OACX,GAA0B,eAAtByuE,EAAIs0Y,WAAW5md,GAAqB,CACpC,IAAItC,EAAUR,SAASosB,eAAe,cAClC5rB,EAAQ8C,UAAUK,SAAS,wBAC3BnD,EAAQqC,UAAY,sCACpB7C,SAASosB,eAAe,aAAa5vB,MAAQ,GAC7CgD,KAAKmqd,cAAc,UAIvBv0Y,EAAIpwD,kBAIhB8hc,EAAcjsd,UAAUuxI,MAAQ,SAAUh3D,GACtC,IAAI71E,EAAQC,KACZ,GAAIA,KAAK0nd,aAAc,CACnB,IAAI0C,EAAYpqd,KACFQ,SAASosB,eAAe,cAC9BvpB,UAAY,iDAChBuyE,GAAoB,UAAZA,EAAIv4E,KAAmC,KAAhBu4E,EAAI9tD,SAM/B9nB,KAAK+qB,OACL7qB,aAAaF,KAAK+qB,OAEtB/qB,KAAK+qB,MAAQ5qB,WAAW,WAChBy1E,EAAIzuE,kBAAkBkjd,mBACtBD,EAAUD,cAAcv0Y,EAAIzuE,OAAOnK,OACnC+C,EAAMgrB,MAAQ,OAEnB,MAbC6qD,EAAIzuE,kBAAkBkjd,kBACtBrqd,KAAKmqd,cAAcv0Y,EAAIzuE,OAAOnK,SAgB9Csqd,EAAcjsd,UAAUq9Z,UAAY,SAAU9iV,GAC1C,IAAItyE,EAAKsyE,EAAIzuE,OAAO7D,GAAGpG,MAAM,cAAc,GAC3C,GAAI8C,KAAKitb,eAAgB,CACrB,GAAI3pb,IAAOtD,KAAKitb,eAAe3pb,GAAI,CACf9C,SAASosB,eAAe5sB,KAAKitb,eAAe3pb,GAAK,cACvDQ,UAAUS,OAAO,qBAC3B,IAAItE,GAAS+I,SAAUhJ,KAAKitb,eAAe3pb,GAAIgE,SAAUhE,GAEzDtD,KAAKwmB,QADS,yBACQvmB,GAEVO,SAASosB,eAAe5sB,KAAKitb,eAAe3pb,GAAK,cACvDoB,MAAMitD,gBAAkB,GAClC3xD,KAAKitb,eAAiB,KAE1B,GAAIjtb,KAAKund,YAAYjkd,GAAK,CACN9C,SAASosB,eAAetpB,EAAK,cACnCQ,UAAUM,IAAI,qBACxBpE,KAAKitb,eAAiBjtb,KAAKund,YAAYjkd,GACvCsyE,EAAIpwD,mBAKZ8hc,EAAcjsd,UAAUivd,cAAgB,WAChCtqd,KAAK+nd,YACL/nd,KACK4yG,UAAY,IAAIlF,GAAU1tG,KAAKgB,SAChCkuG,WAAY,sBACZhgG,OAAQlP,KAAKkP,OACbugG,UAAWzvG,KAAKyvG,UAChBsC,SAAU/xG,KAAK+xG,SACfrB,KAAM,SAAUzwG,GACZ,IACIK,EAASuzC,GAAa5zC,EAAW,OAAG,eACxC,GAAIK,GAAUA,EAAOwD,UAAUK,SAAS,aAAc,CAElD7D,EAAkB,cAAE,GAAGy+a,UAAU/pH,KAAK/0T,KAG9CyyG,UAAYlmG,KAAMxM,KAAK0pd,cAAc/9c,OAAOoB,EAAGL,IAAK1M,KAAK0pd,cAAc/9c,OAAOqB,OAI1Fs6c,EAAcjsd,UAAUo0G,UAAY,SAAU5uG,GAC1C,IAAIG,EAAUhB,KAAKkP,OAAO,GACtBlO,GACAA,EAAQwC,aAAa,YAAaxD,KAAKgB,QAAQsC,KAGvDgkd,EAAcjsd,UAAU02G,SAAW,SAAUlxG,GACpCgzC,GAAahzC,EAAEsG,OAAQ,cACxB5C,EAAO1D,EAAEqO,SAKjBo4c,EAAcjsd,UAAUgud,YAAc,SAAUptX,EAAQ6sX,EAAiB7xZ,EAAIC,EAAIlhD,EAAOD,GACpF,GAAIkmF,aAAkBn2C,GAAW,CAC7B,IAAI/zC,EAAUkqF,EAAOlqF,QACrBkqF,EAAOlqF,QAAU+2c,EAAgB1uc,SAAS,GAI1C,IAAK,IAHD0Z,EAAQmoE,EAAOxwC,MAAMwL,EAAIC,EAAIlhD,EAAOD,EAAQ+yc,EAAgB1uc,SAAS,IACrEmiC,EAAOvmC,EAAQ,EAAI8yc,EAAgB1uc,SAAS,GAAGA,SAAS,GAAGvO,QAAUioB,EAAM/mB,EAAI,EAC/EyyZ,EAAOzpZ,EAAS,EAAI+yc,EAAgB1uc,SAAS,GAAGA,SAAS,GAAGnO,QAAU6nB,EAAM9mB,EAAI,EAC3E5O,EAAK,EAAGyE,EAAKimd,EAAgB1uc,SAAS,GAAGA,SAAUhc,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC9E,IAAIiC,EAAQwC,EAAGzE,GACfiC,EAAMwL,SAAW0wC,EACjBl8C,EAAM4L,SAAWuzZ,EACjBn/Z,EAAM8gZ,YAAa,EAEvBllT,EAAOlqF,QAAUA,OAEhB,GAAIkqF,EAAOtuE,iBAAiBi+X,IAAa5rZ,KAAK+sZ,WAAY,CACvDh7Y,EAAUkqF,EAAOlqF,QACrBkqF,EAAOlqF,QAAU+2c,EACjBA,EAAgB1uc,SAAS,GAAGpE,MAAQA,EACpC8yc,EAAgB1uc,SAAS,GAAGrE,OAASA,EACrC/V,KAAK+sZ,WAAW8+B,YAAa71a,MAAOA,EAAOD,OAAQA,GAAUkmF,EAAQA,EAAQ,MAC7EA,EAAOlqF,QAAUA,OAGjBilD,GAAa8xZ,EAAgB1uc,SAAS,GAAI68C,EAAIC,EAAI4xZ,IAG1DxB,EAAcjsd,UAAUusd,gBAAkB,WACtC5nd,KAAK2nd,iBAAiBltZ,SACtBz6D,KAAK8nd,iBACL9nd,KAAK2nd,iBAAiB/7Z,YAE1B07Z,EAAcjsd,UAAUysd,eAAiB,WACrC,IAAK,IAAI3rd,EAAI,EAAGA,EAAI6D,KAAKu/U,SAAS9iV,OAAQN,IAAK,CAC3C,IAAIoud,EAAWvqd,KAAKu/U,SAASpjV,GAC7B6D,KAAKiod,YAAYsC,GACjBvqd,KAAKood,cAAcmC,KAG3BjD,EAAcjsd,UAAU41T,cAAgB,WACpC,IAAIu5J,EAAYrpd,EAAc,OAASmC,GAAItD,KAAKgB,QAAQsC,GAAK,YAC7Dknd,EAAUhnd,aAAa,QAAS,qCAChCgnd,EAAUnnd,UAAY,gBACtBrD,KAAKgB,QAAQW,YAAY6od,GACzB,IAAIC,EAAUjqd,SAASW,cAAc,SACrCspd,EAAQ3jc,YAAc,gBACtB2jc,EAAQnnd,GAAK,YACbmnd,EAAQjnd,aAAa,QAAS,0BAC9Bind,EAAQpnd,UAAY,UACpBmnd,EAAU7od,YAAY8od,GACtB,IAAI9nZ,EAAOxhE,EAAc,QAAUmC,GAAI,aAAcD,UAAW,wCAChEmnd,EAAU7od,YAAYghE,IAE1B2kZ,EAAcjsd,UAAU8ud,cAAgB,SAAUntd,GAC9C,IAEIqrd,EAFAH,KACAlnd,EAAUR,SAASosB,eAAe,iBAGtC,GAAI5rB,EACA,IAAK,IAAImlB,EAAInlB,EAAQoZ,SAAS3d,OAAS,EAAG0pB,GAAK,EAAGA,IAC9CnlB,EAAQsE,YAAYtE,EAAQoZ,SAAS+L,IAI7C,IAAK,IAAIhqB,EAAI,EAAGA,EAAI6D,KAAKu/U,SAAS9iV,OAAQN,IAEtC,IAAK,IADDusd,EAAqB1od,KAAKu/U,SAASpjV,GAC9BonB,EAAI,EAAGA,EAAImlc,EAAmB1xX,QAAQv6F,OAAQ8mB,IAAK,CACxD,IAAI1F,EAAO6qc,EAAmB1xX,QAAQzzE,GACxB,KAAVvmB,IAAwE,IAAxD6gB,EAAKva,GAAGsS,cAAcrX,QAAQvB,EAAM4Y,gBACpDsyc,EAAY1jd,KAAKqZ,GAI7B,IAAI6sc,EAAgBr9a,GAAYrtC,KAAK0qd,eAUrC,GATIA,IACAxC,EAAcwC,EAAcxC,QAG3Blnd,IAEDA,EADAqnd,EAAarod,KAAK2qd,oBAAoBtC,IAItCH,EAAYzrd,OAAS,EACrB,IAAK,IAAI2B,EAAK,EAAGwsd,EAAgB1C,EAAa9pd,EAAKwsd,EAAcnud,OAAQ2B,IAAM,CAC3E,IAAI69F,EAAS2uX,EAAcxsd,GAC3B4B,KAAK2od,mBAAmB1sX,EAAQj7F,QAGnC,GAAc,KAAVhE,EAAc,CACnB,IAAI6td,EAAWrqd,SAASW,cAAc,OACtC0pd,EAASrnd,aAAa,KAAM,YAC5Bqnd,EAAS7od,UAAY,sBACrB6od,EAASrnd,aAAa,QAAS,qCAC/BxC,EAAQW,YAAYkpd,OAEnB,CACerqd,SAASosB,eAAe,cAC9BvpB,UAAY,sCACtBrD,KAAK2nd,iBAAiB3yZ,WAAW,KAGzCsyZ,EAAcjsd,UAAUsvd,oBAAsB,SAAUtC,IACpDA,EAAa7nd,SAASW,cAAc,QACzBqC,aAAa,KAAM,iBAC9B6kd,EAAW7kd,aAAa,QAAS,+BACjCxD,KAAKgB,QAAQW,YAAY0md,GAMzB,OADArod,KAAK2nd,iBAAiBrjR,SAHlB1/G,OAAQ,iBAAkBuwG,UAAU,EACpC/6J,QAAS,kBAEoC,GAC1Ciub,GAKXf,EAAcjsd,UAAUkpB,WAAa,WACjC,IAAIy1F,EAAaxuG,GAAQ0+E,gBACrBy1P,EAAYn0U,GAAQ4+E,cACpBuwB,EAAYnvG,GAAQ2+E,eAGxB5kF,GAAanB,IAAIpE,KAAKgB,QAASg5G,EAAYh6G,KAAK04Z,UAAW14Z,MAC3DuF,GAAanB,IAAIpE,KAAKgB,QAAS25G,EAAW36G,KAAK6/U,UAAW7/U,MAC1DuF,GAAanB,IAAIpE,KAAKgB,QAAS2+U,EAAW3/U,KAAK64Z,QAAS74Z,MACxDuF,GAAanB,IAAIpE,KAAKgB,QAJP,QAI0BhB,KAAK4sI,MAAO5sI,MAErDA,KAAKsqd,iBAKThD,EAAcjsd,UAAUmjH,aAAe,WACnC,IAAIxE,EAAaxuG,GAAQ0+E,gBACrBy1P,EAAYn0U,GAAQ4+E,cACpBuwB,EAAYnvG,GAAQ2+E,eAGxB5kF,GAAahB,OAAOvE,KAAKgB,QAASg5G,EAAYh6G,KAAK04Z,WACnDnzZ,GAAahB,OAAOvE,KAAKgB,QAAS25G,EAAW36G,KAAK6/U,WAClDt6U,GAAahB,OAAOvE,KAAKgB,QAAS2+U,EAAW3/U,KAAK64Z,SAClDtzZ,GAAahB,OAAOvE,KAAKgB,QAJV,QAI6BhB,KAAK4sI,QAErD/hD,IACI3jF,EAAS,MACVogd,EAAcjsd,UAAW,iBAAa,GACzCwvF,IACI3jF,EAAS,SACVogd,EAAcjsd,UAAW,aAAS,GACrCwvF,IACI3jF,EAAS,SACVogd,EAAcjsd,UAAW,cAAU,GACtCwvF,IACIxiF,KAAe++c,KAChBE,EAAcjsd,UAAW,gBAAY,GACxCwvF,IACI3jF,KACDogd,EAAcjsd,UAAW,qBAAiB,GAC7CwvF,IACI3jF,KACDogd,EAAcjsd,UAAW,qBAAiB,GAC7CwvF,IACI3jF,KACDogd,EAAcjsd,UAAW,yBAAqB,GACjDwvF,IACI3jF,KACDogd,EAAcjsd,UAAW,mBAAe,GAC3CwvF,IACI3jF,KACDogd,EAAcjsd,UAAW,oBAAgB,GAC5CwvF,IACI9iF,GAAUyE,KAAM,GAAIC,MAAO,GAAIC,IAAK,GAAIC,OAAQ,IAAMmwT,KACvDwqJ,EAAcjsd,UAAW,oBAAgB,GAC5CwvF,IACI3jF,GAAS,IACVogd,EAAcjsd,UAAW,iBAAa,GACzCwvF,IACI9iF,KAAYs/c,KACbC,EAAcjsd,UAAW,qBAAiB,GAC7CwvF,IACI3jF,GAAS,IACVogd,EAAcjsd,UAAW,oBAAgB,GAC5CwvF,IACI3jF,GAAS,IACVogd,EAAcjsd,UAAW,uBAAmB,GAC/CwvF,IACI3jF,EAAS,aACVogd,EAAcjsd,UAAW,kBAAc,GAC1CwvF,IACI/hF,KACDw+c,EAAcjsd,UAAW,8BAA0B,GACtDwvF,IACI3jF,KACDogd,EAAcjsd,UAAW,uBAAmB,GAC/CwvF,IACI3jF,KACDogd,EAAcjsd,UAAW,4BAAwB,GAC7Cisd,GACT/7W,ICv/BEjhB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAoB5Dkub,GAA0B,SAAU3/X,GAEpC,SAAS2/X,EAAS93c,EAAShS,GACvB,IAAIjB,EAAQorF,EAAO7pF,KAAKtB,KAAMgT,EAAShS,IAAYhB,KAiBnD,OAfAD,EAAMg+B,KAAO,SAEbh+B,EAAMuD,GAAK,WACXvD,EAAMgrd,WAAa,GACnBhrd,EAAMslD,WAAa,KACnBtlD,EAAMsyB,aAAe,KACrBtyB,EAAM0pV,UAAY,KAClB1pV,EAAM0rD,MAAQ,KACd1rD,EAAMm4Z,UAAW,EACjBn4Z,EAAMird,cAAgB,EACtBjrd,EAAMgrD,iBAAmB,EACzBhrD,EAAMkrD,eAAiB,EACvBlrD,EAAM6iB,SACN7iB,EAAMzD,OAAQ,EACdyD,EAAM6iB,OAAU5M,MAAOjW,EAAMiW,MAAOD,OAAQhW,EAAMgW,QAC3ChW,EA80BX,OAj2BAuqF,GAAUwgY,EAAU3/X,GA0BpB2/X,EAASzvd,UAAUmsF,kBAAoB,SAAUiF,EAASC,GACtD,IACK,IAAItuF,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKmvF,GAAUruF,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAE9D,OADWyE,EAAGzE,IAEV,IAAK,WACD4B,KAAKk1R,UAAUzoM,EAAQn1C,UACvB,MACJ,IAAK,QACL,IAAK,SACDt3C,KAAKird,eACLjrd,KAAKk1R,UAAUl1R,KAAKs3C,aASpCwza,EAASzvd,UAAUmxG,eAAiB,WAEhC,OAAOxsG,KAAKgtG,cADK,YAMrB89W,EAASzvd,UAAUoX,UAAY,WAC3BzS,KAAKgB,QAAQ0D,MAAM+qB,WAAa,cAChCzvB,KAAKw+G,eACLx+G,KAAKukB,cAETumc,EAASzvd,UAAU0wG,OAAS,WACxB/rG,KAAKswa,gBAAkB,IAAI9f,GAAgBxwZ,KAAKgB,QAAQsC,GAAI,IAAIwqB,IAAe,GAC/E9tB,KAAKird,eACLjrd,KAAKk1R,UAAUl1R,KAAKs3C,WAExBwza,EAASzvd,UAAUioa,aAAe,SAAUogB,GAQxC,OANIA,EAAKx2a,WAAW3O,QAAQ,MAAQ,GAAKmlb,EAAKx2a,WAAW3O,QAAQ,KAAO,EAC7Dmlb,EAAKx2a,WAGLw2a,EAAKx2a,WAAa,MAIjC49c,EAASzvd,UAAU4vd,aAAe,SAAUj4c,GACxC,IAAI0wX,EAASljY,SAASosB,eAAe5sB,KAAKgB,QAAQsC,GAAK,WAClDogY,IACDA,EAASljY,SAASW,cAAc,OAChCnB,KAAKgB,QAAQW,YAAY+hY,IAQ7BhwV,GAAiBgwV,GALbpgY,GAAMtD,KAAKgB,QAAQsC,GAAK,UAAWi+H,MAAS,UAC5C78H,MAAS,6BAA+B1E,KAAKsja,aAAatja,KAAK4iB,MAAM7M,QAAU,WAC3E/V,KAAKsja,aAAatja,KAAK4iB,MAAM5M,OAC7B,sDAGRhW,KAAKgB,QAAQwC,aAAa,WAAY0lB,OAAO,IAC7ClpB,KAAKgB,QAAQ0D,MAAMmV,SAAW,SAC9B7Z,KAAKgB,QAAQ0D,MAAMqR,OAASmT,OAAOlpB,KAAK4iB,MAAM7M,QAC9C/V,KAAKgB,QAAQ0D,MAAMsR,MAAQkT,OAAOlpB,KAAK4iB,MAAM5M,OAC7ChW,KAAK0jY,OAASA,GAElBonF,EAASzvd,UAAU65R,UAAY,SAAU5xR,GACrC,IAAItC,EAAUR,SAASosB,eAAetpB,GAEtC,GAAItD,KAAKM,OAAQ,CACb,IAAI4qd,EAAYlrd,KAAKM,OACrBN,KAAKM,OAAS,KACd4qd,EAAUphC,YAAY,KAAM9pb,KAAKsD,IACjCtD,KAAKmrd,eAAenrd,MAExBA,KAAKM,OAASN,KAAKord,WAAWpqd,EAPf,iBAQXhB,KAAKM,QACLN,KAAKM,OAAOwpb,YAAY9pb,OAGhC8qd,EAASzvd,UAAU+vd,WAAa,SAAUpqd,EAASuF,GAG/C,IAAK,IAFDuvC,EACA60G,EAAI3pJ,EAAQuF,GAAU9J,OACjBN,EAAI,EAAGA,EAAIwuJ,EAAGxuJ,IACnB,GAAI43C,GAAS/yC,EAAQuF,GAAUpK,GAAG6E,QAAS,aAAc,CACrD80C,EAAU90C,EAAQuF,GAAUpK,GAC5B,MAGR,OAAO25C,GAEXg1a,EAASzvd,UAAUmjH,aAAe,WAC9B,IAAIjhH,EAAQiO,GAAQ0+E,gBAChBb,EAAO79E,GAAQ2+E,eAEftxD,EAASrtB,GAAQC,UAAY,eAAiB,aAC9C+3W,EAAgBh4W,GAAQC,UAGxBiT,GAFalT,GAAQmb,KAAK8Q,KAEnBjsB,GAAQ4+E,eACnB7kF,GAAahB,OAAOvE,KAAKgB,QAASzD,EAAOyC,KAAK04Z,WAC9CnzZ,GAAahB,OAAOvE,KAAKgB,QAASqoF,EAAMrpF,KAAK6/U,WAC7Ct6U,GAAahB,OAAOvE,KAAKgB,QAAS0d,EAAM1e,KAAK64Z,SAC7CtzZ,GAAahB,OAAOvE,KAAKgB,QAAS63B,EAAQ74B,KAAKqrd,iBAC/C9ld,GAAahB,OAAO1I,OAAQ,SAAUmE,KAAKmja,cAC3C,IAAI1oZ,EAAYja,SAASosB,eAAe5sB,KAAKs3C,SAAW,WACpD78B,GACAlV,GAAahB,OAAOkW,EAAW,SAAUza,KAAK6ma,WAGtDikD,EAASzvd,UAAUkpB,WAAa,WAC5B,IAAIhnB,EAAQiO,GAAQ0+E,gBAChBxrE,EAAOlT,GAAQ4+E,cACff,EAAO79E,GAAQ2+E,eACftxD,EAASrtB,GAAQC,UAAY,eAAiB,aAC9C+3W,EAAgBh4W,GAAQC,UACXD,GAAQmb,KAAK8Q,KAE9BlyB,GAAanB,IAAIpE,KAAKgB,QAASzD,EAAOyC,KAAK04Z,UAAW14Z,MACtDuF,GAAanB,IAAIpE,KAAKgB,QAASqoF,EAAMrpF,KAAK6/U,UAAW7/U,MACrDuF,GAAanB,IAAIpE,KAAKgB,QAAS0d,EAAM1e,KAAK64Z,QAAS74Z,MACnDuF,GAAanB,IAAIpE,KAAKgB,QAAS63B,EAAQ74B,KAAKqrd,gBAAiBrrd,MAC7DuF,GAAanB,IAAIvI,OAAQ,SAAUmE,KAAKmja,aAAcnja,MACtD,IAAIya,EAAYja,SAASosB,eAAe5sB,KAAKs3C,SAAW,WACpD78B,GACAlV,GAAanB,IAAIqW,EAAW,SAAUza,KAAK6ma,SAAU7ma,OAS7D8qd,EAASzvd,UAAU2ub,eAAiB,SAAU1uP,GAC1CA,EAAKooM,OAAS1jY,KAAK0jY,OACnB,IAAI7mW,EAAIr8B,SAASosB,eAAe5sB,KAAK0jY,OAAOpgY,GAAK,QAC7Cu5B,GACAA,EAAEp8B,WAAW6E,YAAYu3B,GAE7B,IAMI/f,EAAM62B,GAAiB,OALvBrwC,GAAItD,KAAK0jY,OAAOpgY,GAAK,OACrBsjB,QAAS,MACT0kc,MAAO,+BACP/pV,MAAS,iBAGbvhI,KAAK8c,IAAMA,EACXw+K,EAAKx+K,IAAMA,EACXw+K,EAAKooM,OAAO/hY,YAAYmb,GACxB,IACI9b,EADMR,SAASosB,eAAe5sB,KAAKgB,QAAQsC,IAE3Ciod,EAASvqd,EAAQqsB,YACjBm+b,EAAUxqd,EAAQssB,aAClBm+b,EAAQzqd,EAAQ4K,wBAEhB8/c,EAAW7vd,OAAO6vd,QAAU,GAAuB,EAAlB7vd,OAAO6vd,QAAe7vd,OAAO6vd,QAC9DC,EAAW9vd,OAAO8vd,QAAU,GAAuB,EAAlB9vd,OAAO8vd,QAAe9vd,OAAO8vd,QACnD,IAAXJ,IACAA,EAASl/c,KAAK+S,MAAQvjB,OAAO0d,WAAamyc,EAAWr/c,KAAK+S,MAAMqsc,EAAMj/c,QAE1D,IAAZg/c,IACAA,EAAUn/c,KAAK+S,MAAQvjB,OAAOyd,YAAcqyc,EAAWt/c,KAAK+S,MAAMqsc,EAAM/+c,OAE5EoQ,EAAItZ,aAAa,QAAS0lB,OAAOqic,IACjCzuc,EAAItZ,aAAa,SAAU0lB,OAAOsic,IAClCxrd,KAAK4iB,MAAM5M,MAAQu1c,EACnBvrd,KAAK4iB,MAAM7M,OAASy1c,EACpB,IAAI9nd,EACJ,IAAK43L,EAAK8oP,gBAAiB,CACvB9oP,EAAK8oP,gBAAkB5jb,SAASW,cAAc,OAC9BX,SAASosB,eAAe5sB,KAAKgB,QAAQsC,IACrDg4L,EAAK+0O,aAAe1jV,GAAeI,aAAa/sF,KAAKgB,QAAQsC,GAAK,gBAAiBtD,KAAK4iB,MAAM5M,MAAOhW,KAAK4iB,MAAM7M,QAChHulL,EAAK+0O,aAAa7sa,aAAa,QAAS,0CACxC83L,EAAK8oP,gBAAgBzib,YAAY25L,EAAK+0O,cACtC/0O,EAAKooM,OAAO/hY,YAAY25L,EAAK8oP,iBAEjC1gb,GACIJ,GAAMtD,KAAKgB,QAAQsC,GAAK,oBACxBoB,MAAS,SAAW1E,KAAK4iB,MAAM5M,MAAQ,cAAgBhW,KAAK4iB,MAAM7M,OAAS,yCAE/E29B,GAAiB4nJ,EAAK8oP,gBAAiB1gb,GACvC1D,KAAK4rd,gBAAgBtwR,EAAKooM,QAC1B1jY,KAAK8kb,kBAAkBxpP,EAAKooM,OAAQpoM,GACpCt7L,KAAK6rd,qBAAqBvwR,IAG9BwvR,EAASzvd,UAAU8vd,eAAiB,SAAU7vR,GAC1C,IAAIx+K,EAAMtc,SAASosB,eAAe5sB,KAAK0jY,OAAOpgY,GAAK,QACnDtD,KAAK0jY,OAAOp+X,YAAYwX,GACxB,IAAIy0Y,EAAY/wZ,SAASosB,eAAe5sB,KAAKgB,QAAQsC,GAAK,cAC1DtD,KAAK0jY,OAAOp+X,YAAYisZ,GACxB,IAAI8e,EAAe7va,SAASosB,eAAe5sB,KAAKsD,GAAK,qBACrDtD,KAAK0jY,OAAOp+X,YAAY+qa,GACxB/0O,EAAK8oP,gBAAkB,KACvB9oP,EAAK+0O,aAAe,MAExBy6C,EAASzvd,UAAUuwd,gBAAkB,SAAUloF,GAC3C,IAAIxiY,EAAMV,SAASW,cAAc,OAEjCuyC,GAAiBxyC,GADJoC,GAAMtD,KAAKgB,QAAQsC,GAAK,aAAci+H,MAAS,iBAE5D,IAAIgwR,EAAYrwZ,EAChBA,EAAIwD,MAAM2ka,cAAgB,OAC1Bnoa,EAAIwD,MAAMwP,SAAW,WACrBhT,EAAIwD,MAAM8H,KAAO,MACjBtL,EAAIwD,MAAMgI,IAAM,MAChB,IAAIo/c,EAAUtrd,SAASW,cAAc,OAQrC,OAHAuyC,GAAiBo4a,GAHbxod,GAAMtD,KAAKgB,QAAQsC,GAAK,iBACxBoB,MAAS,wCAGb6sZ,EAAU5vZ,YAAYmqd,GACtBpoF,EAAO/hY,YAAY4vZ,GACZA,GAEXu5D,EAASzvd,UAAUypb,kBAAoB,SAAUphD,EAAQpoM,GACrD,IAAIgqP,EAAiBtlb,KAAKM,OAAO0/B,UAAUhgC,KAAKgB,QAAQsC,GAAK,mBAAoBtD,KAAK4iB,MAAM5M,MAAOhW,KAAK4iB,MAAM7M,QAC1Gs/Y,EAAc1hX,GAAiB,KAAOrwC,GAAMtD,KAAKgB,QAAQsC,GAAK,iBAClEgib,EAAe3jb,YAAY0zZ,GAC3B/5N,EAAK8oP,gBAAgBzib,YAAY2jb,GACjC1xY,GAAgB0xY,GAAkB/jT,MAAS,oBAE/CupV,EAASzvd,UAAUwwd,qBAAuB,SAAUvwR,GAChD,IAAIx+K,EAAMtc,SAASosB,eAAe5sB,KAAK0jY,OAAOpgY,GAAK,gBAC/CwZ,GACAA,EAAIrc,WAAW6E,YAAYwX,GAU/BA,EAAM62B,GAAiB,OAPnBrwC,GAAItD,KAAK0jY,OAAOpgY,GAAK,eACrBsjB,QAAS,MACT0kc,MAAO,+BACP5md,MAAS,oEACTsR,MAAOhW,KAAK4iB,MAAM5M,MAClBD,OAAQ/V,KAAK4iB,MAAM7M,SAGvBulL,EAAKooM,OAAO/hY,YAAYmb,GACxB,IAAIivc,EAAMp4a,GAAiB,KAAOrwC,GAAMtD,KAAKsD,GAAK,iBAAkBoB,MAAS,wBAC7EoY,EAAInb,YAAYoqd,GAChB,IAAI14b,EAAOsgB,GAAiB,QACxB/V,KAAQ,cAAe5nB,MAAS,OAAQD,OAAU,OAAQwrH,MAAS,mBACnEj+H,GAAMtD,KAAK0jY,OAAOpgY,GAAK,qBAE3B+vB,EAAK7vB,aAAa,QAAS,2BAC3Buod,EAAIpqd,YAAY0xB,GAChB,IACIwJ,EAAI8W,GAAiB,KAAOrwC,GAAMtD,KAAK0jY,OAAOpgY,GAAK,iBAAkBoB,MAAS,uBAClFqnd,EAAIpqd,YAAYk7B,GAChB,IAAImvb,EAAYr4a,GAAiB,QAAUrwC,GAAMtD,KAAK0jY,OAAOpgY,GAAK,eAAgBs6B,KAAQ,gBAC1Ff,EAAEl7B,YAAYqqd,GACdhsd,KAAKisd,qBAAqB,OAAQpvb,GAClC78B,KAAKisd,qBAAqB,QAASpvb,GACnC78B,KAAKisd,qBAAqB,MAAOpvb,GACjC78B,KAAKisd,qBAAqB,SAAUpvb,GACpC78B,KAAKisd,qBAAqB,UAAWpvb,GACrC78B,KAAKisd,qBAAqB,WAAYpvb,GACtC78B,KAAKisd,qBAAqB,aAAcpvb,GACxC78B,KAAKisd,qBAAqB,cAAepvb,IAE7Ciub,EAASzvd,UAAU4wd,qBAAuB,SAAUx0b,EAAMn3B,GAC5CN,KAAK8c,IAAf,IACI6Q,EAOAq+b,EAAYr4a,GALZhmB,EADS,QAAT8J,GAA2B,WAATA,GAA8B,UAATA,GAA6B,SAATA,EACnD,OAGA,UAE8Bn0B,GAAMtD,KAAK0jY,OAAOpgY,GAAK,UAAYm0B,IAC7En3B,EAAOqB,YAAYqqd,GACnB,IAAIE,EAAYv4a,GAAiBhmB,GAC7BrqB,GAAMtD,KAAK0jY,OAAOpgY,GAAKm0B,EAAM8pG,MAAS,kBAAmB3jG,KAAQ,gBAErEt9B,EAAOqB,YAAYuqd,IAEvBpB,EAASzvd,UAAU8wd,wBAA0B,WACzC,IAAI3uD,EAAOx9Z,KAAKqyB,aAAatlB,EAAI/M,KAAKypV,UAAU18U,EAC5C0wZ,EAAOz9Z,KAAKqyB,aAAarlB,EAAIhN,KAAKypV,UAAUz8U,EAC5C8f,EAAO,IAAIM,GACfN,EAAK9W,MAAQ,EACb8W,EAAK/W,OAAS,EACd,IAAIhJ,EAAI,EACJC,EAAI,EAGR,OAAQhN,KAAKosd,iBACT,IAAK,OACDt/b,EAAK9W,OAASwnZ,EACd1wY,EAAK/W,QAAUynZ,EAAOx9Z,KAAKgrd,cAC3Bj+c,EAAIywZ,EACJxwZ,EAAIwwZ,EAAOx9Z,KAAKgrd,cAChBh+c,GAAK,EACL,MACJ,IAAK,QACD8f,EAAK9W,OAASwnZ,EACd1wY,EAAK/W,QAAUynZ,EAAOx9Z,KAAKgrd,cAC3Bh+c,EAAIwwZ,EAAOx9Z,KAAKgrd,cAChBh+c,IAAM,EACN,MACJ,IAAK,MACD8f,EAAK/W,QAAU0nZ,EACf3wY,EAAK9W,OAASynZ,EAAOz9Z,KAAKgrd,cAC1Bh+c,EAAIywZ,EACJ1wZ,EAAI0wZ,EAAOz9Z,KAAKgrd,cAChBj+c,GAAK,EACL,MACJ,IAAK,SACD+f,EAAK/W,QAAU0nZ,EACf3wY,EAAK9W,OAASynZ,EAAOz9Z,KAAKgrd,cAC1Bj+c,EAAI0wZ,EAAOz9Z,KAAKgrd,cAChBj+c,IAAM,EACN,MACJ,IAAK,UACGV,KAAKE,IAAIkxZ,GAAQpxZ,KAAKE,IAAIixZ,GAC1BA,EAAOC,EAAOz9Z,KAAKgrd,cAGnBvtD,EAAOD,EAAOx9Z,KAAKgrd,cAEvBl+b,EAAK9W,OAASwnZ,EACd1wY,EAAK/W,QAAU0nZ,EACf1wZ,EAAIywZ,EACJxwZ,EAAIywZ,EACJ,MACJ,IAAK,WACGpxZ,KAAKE,IAAIkxZ,GAAQpxZ,KAAKE,IAAIixZ,GAC1BA,GAAQC,EAAOz9Z,KAAKgrd,cAGpBvtD,GAASD,EAAOx9Z,KAAKgrd,cAEzBh+c,EAAIywZ,EACJ3wY,EAAK9W,OAASwnZ,EACd1wY,EAAK/W,QAAU0nZ,EACf,MACJ,IAAK,aACGpxZ,KAAKE,IAAIkxZ,GAAQpxZ,KAAKE,IAAIixZ,GAC1BA,GAAQC,EAAOz9Z,KAAKgrd,cAGpBvtD,GAAQD,EAAOx9Z,KAAKgrd,cAExBj+c,EAAIywZ,EACJ1wY,EAAK9W,OAASwnZ,EACd1wY,EAAK/W,QAAU0nZ,EACf,MACJ,IAAK,cACGpxZ,KAAKE,IAAIkxZ,GAAQpxZ,KAAKE,IAAIixZ,GAC1BA,EAAOC,EAAOz9Z,KAAKgrd,cAGnBvtD,EAAOD,EAAOx9Z,KAAKgrd,cAEvBl+b,EAAK9W,OAASwnZ,EACd1wY,EAAK/W,QAAU0nZ,EAGvBz9Z,KAAKqsd,aAAat/c,EAAGC,EAAG8f,OA1EpB+/M,OACAnsI,IA2ERoqX,EAASzvd,UAAUgxd,aAAe,SAAU7uD,EAAMC,EAAM3wY,EAAM9W,EAAOD,GACjE,IAAIhJ,EACAC,EACA0pB,EAEArD,EADMrzB,KAAKgB,QAAQO,qBAAqB,OAAO,GACpCqrB,eAAe,UAC9B,GAAIE,EAEA/f,GADA2pB,EAASrD,EAAKub,WACH7hC,EAAIywZ,EACfxwZ,EAAI0pB,EAAO1pB,EAAIywZ,EACfznZ,EAAQ0gB,EAAO1gB,MAAQ8W,EAAK9W,MAC5BD,EAAS2gB,EAAO3gB,OAAS+W,EAAK/W,WAE7B,CACD,IAAIu2c,EAEAA,EADAtsd,KAAKqyB,aAAatlB,EAAI/M,KAAKqlD,WAAWt4C,EAC7B/M,KAAKqyB,aAAatlB,EAAI/M,KAAKypV,UAAU18U,EAGrC/M,KAAKypV,UAAU18U,EAAI/M,KAAKqyB,aAAatlB,EAElD,IAAIw/c,EAEAA,EADAvsd,KAAKqyB,aAAarlB,EAAIhN,KAAKqlD,WAAWr4C,EAC7BhN,KAAKqyB,aAAarlB,EAAIhN,KAAKypV,UAAUz8U,EAGrChN,KAAKypV,UAAUz8U,EAAIhN,KAAKqyB,aAAarlB,EAI9CX,KAAKE,IAAIggd,GAAUlgd,KAAKE,IAAI+/c,GAC5BA,EAAStsd,KAAKgrd,cAAgBuB,EAK9BA,EAASD,EAAStsd,KAAKgrd,cAI3Bt0b,EAASrD,EAAKub,UACd7hC,EAAM/M,KAAKqlD,WAAWt4C,EAAI/M,KAAKqyB,aAAatlB,EACxC2pB,EAAO3pB,EAAIu/c,EAAS51b,EAAO3pB,EAC/BC,EAAMhN,KAAKqlD,WAAWr4C,EAAIhN,KAAKqyB,aAAarlB,EAAK0pB,EAAO1pB,EAAIu/c,EAAS71b,EAAO1pB,EAC5EgJ,EAAQ0gB,EAAO1gB,MAAQs2c,EACvBv2c,EAAS2gB,EAAO3gB,OAASw2c,EAE7B34a,GAAgB5zC,KAAKkP,QACjB5L,GAAMtD,KAAKkP,OAAO5L,GAAIyJ,EAAKA,EAAGC,EAAKA,EACnCgJ,MAAS3J,KAAKC,IAAI,EAAG0J,GAAQD,OAAU1J,KAAKC,IAAI,EAAGyJ,MAG3D+0c,EAASzvd,UAAUmxd,mBAAqB,SAAUz/c,EAAGC,EAAGgJ,EAAOD,GAG3D29B,GAFWlzC,SAASosB,eAAe5sB,KAAK0jY,OAAOpgY,GAAK,iBACvCyJ,EAAGA,EAAGC,EAAGA,EAAGgJ,MAAO3J,KAAKC,IAAI,EAAG0J,GAAQD,OAAQ1J,KAAKC,IAAI,EAAGyJ,KAExE/V,KAAKysd,qBAAqB,MAAO1/c,EAAI,EAAGC,EAAI,EAAGX,KAAKC,IAAI,EAAG0J,EAAQ,IAAK,GACxEhW,KAAKysd,qBAAqB,SAAU1/c,EAAI,EAAGC,EAAI+I,EAAQ1J,KAAKC,IAAI,EAAG0J,EAAQ,IAAK,GAChFhW,KAAKysd,qBAAqB,OAAQ1/c,EAAI,EAAGC,EAAI,EAAG,EAAGX,KAAKC,IAAI,EAAGyJ,EAAS,KACxE/V,KAAKysd,qBAAqB,QAAS1/c,EAAIiJ,EAAOhJ,EAAI,EAAG,EAAGX,KAAKC,IAAI,EAAGyJ,EAAS,KAC7E/V,KAAKysd,qBAAqB,UAAW1/c,EAAGC,EAAG,EAAG,GAC9ChN,KAAKysd,qBAAqB,WAAY1/c,EAAIiJ,EAAOhJ,EAAG,EAAG,GACvDhN,KAAKysd,qBAAqB,aAAc1/c,EAAGC,EAAI+I,EAAQ,EAAG,GAC1D/V,KAAKysd,qBAAqB,cAAe1/c,EAAIiJ,EAAOhJ,EAAI+I,EAAQ,EAAG,IAEvE+0c,EAASzvd,UAAUoxd,qBAAuB,SAAUh1b,EAAM1qB,EAAGC,EAAGgJ,EAAOD,GACnE,IAAI+xI,EACA4kU,EACAC,EAAW,UAAYl1b,EACvBpE,EAAO7yB,SAASosB,eAAe5sB,KAAK0jY,OAAOpgY,GAAKqpd,GACvC,QAATl1b,GAA2B,WAATA,GAA8B,UAATA,GAA6B,SAATA,GAC3DqwH,GAAS/6I,EAAGA,EAAGC,EAAGA,EAAGgJ,MAAOA,EAAOD,OAAQA,EAAQ6nB,KAAM,WACzD8ub,GAAc3/c,EAAGA,EAAI,EAAGC,EAAGA,EAAI,EAAGgJ,MAAiB,IAAVA,EAAc,EAAIA,EAAOD,OAAmB,IAAXA,EAAe,EAAIA,KAG7F+xI,GAASz5H,GAAIthB,EAAGuhB,GAAIthB,EAAG4vB,EAAK,EAAGgB,KAAM,WACrC8ub,GAAcr+b,GAAIthB,EAAGuhB,GAAIthB,EAAG4vB,EAAK,EAAGgB,KAAM,gBAE9C8V,GAAiBrgB,EAAMy0H,GAEvBp0G,GADgBlzC,SAASosB,eAAe5sB,KAAK0jY,OAAOpgY,GAAKm0B,GAC7Bi1b,IAEhC5B,EAASzvd,UAAUuxd,2BAA6B,WAC5C,IAAIC,EAAWv1b,OAAOt3B,KAAK4iB,MAAM5M,OAC7B82c,EAAYx1b,OAAOt3B,KAAK4iB,MAAM7M,QAC9BynZ,EAAOx9Z,KAAKqyB,aAAatlB,EAAI/M,KAAKypV,UAAU18U,EAC5C0wZ,EAAOz9Z,KAAKqyB,aAAarlB,EAAIhN,KAAKypV,UAAUz8U,EAM5C0pB,GAJOrqB,KAAK0T,IAAI/f,KAAKM,OAAOwqD,SAASQ,cAAgBuha,EAAU7sd,KAAKM,OAAOwqD,SAASO,eAAiByha,GAC/F9sd,KAAKgB,QAAQO,qBAAqB,OAAO,GACnCqrB,eAAe5sB,KAAK0jY,OAAOpgY,GACrC,gBACasrC,WACf7hC,EAAI2pB,EAAO3pB,EAAIywZ,EACfxwZ,EAAI0pB,EAAO1pB,EAAIywZ,EACfznZ,EAAQ0gB,EAAO1gB,MACfD,EAAS2gB,EAAO3gB,OACpB/V,KAAKwsd,mBAAmBz/c,EAAGC,EAAGgJ,EAAOD,GACrC/V,KAAK+sd,iBAAiB/sd,KAAKM,OAAOwqD,SAASY,YAAa3+C,EAAGC,EAAGgJ,EAAOD,EAAQ,OAEjF+0c,EAASzvd,UAAU2xd,mBAAqB,SAAUjgd,EAAGC,EAAGgJ,EAAOD,GAC3D,IAAI82c,EAAWv1b,OAAOt3B,KAAK4iB,MAAM5M,OAC7B82c,EAAYx1b,OAAOt3B,KAAK4iB,MAAM7M,QAE9Bk3c,EAAaj3c,EAAQ62c,EAAY7sd,KAAKs0X,aACtC44F,EAAcn3c,EAAS+2c,EAAa9sd,KAAK+/Y,cACzCh6C,EAAO15V,KAAKC,IAAItM,KAAKM,OAAOwqD,SAASQ,cAAgB2ha,EAAWjtd,KAAKM,OAAOwqD,SAASO,eAAiB6ha,GAC1G,GAAInnH,GAAQ,KAAQA,GAAQ,GAAI,CAE5B/lW,KAAK+sd,iBAAiBhnH,EAAMh5V,EAAGC,EAAGgJ,EAAOD,GAD3BhJ,EAAG,EAAGC,EAAG,IAEvB,IAAI0pB,EAAS12B,KAAKmtd,mBAAmBntd,KAAKM,OAAOwqD,SAASC,iBAAkB/qD,KAAKM,OAAOwqD,SAASG,eAAgBjrD,KAAKM,OAAOwqD,SAASY,aAAa,GACnJ,GAAI1rD,KAAKkP,OAAQ,CACb,IACIq4D,EADQvnE,KAAKgB,QAAQO,qBAAqB,QAAQ,IAClCqtC,UACpBlY,EAAO3pB,EAAIw6D,EAAQx6D,EACnB2pB,EAAO1pB,EAAIu6D,EAAQv6D,EAEvBhN,KAAKwsd,mBAAmB91b,EAAO3pB,EAAG2pB,EAAO1pB,EAAG0pB,EAAO1gB,MAAO0gB,EAAO3gB,UAGzE+0c,EAASzvd,UAAU8xd,mBAAqB,SAAUn1C,EAASC,EAASvsX,EAAa0ha,GAC7E,IAAMptd,KAAe,YAAKotd,EAAQ,CAC9B,IAAIP,EAAWv1b,OAAOt3B,KAAK4iB,MAAM5M,OAC7B82c,EAAYx1b,OAAOt3B,KAAK4iB,MAAM7M,QAC9B01C,EAAQp/C,KAAK0T,IAAI/f,KAAKs0X,aAAeu4F,EAAU7sd,KAAK+/Y,cAAgB+sE,GACpEp2b,EAAS,IAAIR,GACbnpB,EAAI2pB,EAAO3pB,EAAKira,EAAUtsX,EAAeD,EACzCz+C,EAAI0pB,EAAO1pB,EAAKira,EAAUvsX,EAAeD,EAEzCz1C,EAAQ0gB,EAAO1gB,MAAShW,KAAKM,OAAOwqD,SAASQ,cAAgBI,EAAeD,EAC5E11C,EAAS2gB,EAAO3gB,OAAU/V,KAAKM,OAAOwqD,SAASO,eAAiBK,EAAeD,EACvEzrD,KAAKM,OAAOwqD,SAASQ,cAAgBtrD,KAAKM,OAAOwqD,SAASO,eACtE,GAAI+ha,EAAQ,CACR,IAAI/5b,EAAO,IAAI6C,GAKf,OAJA7C,EAAKtmB,EAAIA,EACTsmB,EAAKrmB,EAAIA,EACTqmB,EAAKrd,MAAQA,EACbqd,EAAKtd,OAASA,EACPsd,EAEXrzB,KAAKwsd,oBAAoBz/c,GAAIC,EAAGgJ,EAAOD,GAE3C,OAAO,MAEX+0c,EAASzvd,UAAU0xd,iBAAmB,SAAUhnH,EAAMh5V,EAAGC,EAAGgJ,EAAOD,EAAQupZ,GACvE,IAMI+tD,EACAC,EAPAT,EAAWv1b,OAAOt3B,KAAK4iB,MAAM5M,OAC7B82c,EAAYx1b,OAAOt3B,KAAK4iB,MAAM7M,QAG9Biia,EAAUjra,GAFD/M,KAAKs0X,aAAeu4F,GAEN9mH,EACvBkyE,EAAUjra,GAFDhN,KAAK+/Y,cAAgB+sE,GAEP/mH,EAGd/lW,KAAKM,OAAOwqD,SAASsrX,gBACrB,IAATrwE,GAAkC,QAApB/lW,KAAK+qd,aACnBsC,GAAQr1C,EAAUh4a,KAAKM,OAAOwqD,SAASC,iBACvCuia,GAAQr1C,EAAUj4a,KAAKM,OAAOwqD,SAASG,gBAEnB,UAApBjrD,KAAK+qd,YAA8C,SAApB/qd,KAAK+qd,WACpC/qd,KAAKM,OAAOwqD,SAASi7S,KAAKA,EAAO/lW,KAAKM,OAAOwqD,SAASY,YAAa2ha,EAAMC,EAAMhuD,GAG/Et/Z,KAAKM,OAAOslW,IAAIynH,EAAMC,EAAMhuD,IAIpCwrD,EAASzvd,UAAUihb,WAAa,SAAUhhP,GACtC,IAAItlL,EACAD,EACA2gB,EAAS12B,KAAKM,OAAOwqD,SAASsrX,gBAClCpga,EAAQ0gB,EAAO1gB,MACfD,EAAS2gB,EAAO3gB,OAChB,IAEI01C,EAFAoha,EAAWv1b,OAAOt3B,KAAK4iB,MAAM5M,OAC7B82c,EAAYx1b,OAAOt3B,KAAK4iB,MAAM7M,QAE9B82N,EAAIxgO,KAAKC,IAAI0J,EAAOhW,KAAKM,OAAOwqD,SAASQ,eACzCo1C,EAAIr0F,KAAKC,IAAIyJ,EAAQ/V,KAAKM,OAAOwqD,SAASO,gBAC9CrrD,KAAKs0X,aAAeznJ,EAAIxgO,KAAKC,IAAIugO,EAAIggP,EAAWC,EAAapsX,GAC7D1gG,KAAK+/Y,cAAgBr/S,EAAIr0F,KAAKC,IAAIo0F,EAAIosX,EAAYD,EAAYhgP,GAC9DphL,EAAQp/C,KAAK0T,IAAI8sc,EAAWhgP,EAAGigP,EAAYpsX,GAC3C,IAAI6wT,EAAY/wZ,SAASosB,eAAe5sB,KAAKgB,QAAQsC,GAAK,cAC1DiuZ,EAAU7sZ,MAAM6od,gBAAkB,SAAW9ha,EAAQ,gBAAkB/0B,EAAO3pB,EAAI,OAAU2pB,EAAO1pB,EAAK,MACxGukZ,EAAU7sZ,MAAM2I,UAAY,SAAWo+C,EAAQ,gBAAkB/0B,EAAO3pB,EAAI,OAAU2pB,EAAO1pB,EAAK,MACxFxM,SAASosB,eAAe5sB,KAAKsD,GAAK,kBACxCE,aAAa,YAAa,cAAiBkzB,EAAO3pB,EAAI0+C,EAAS,KAAQ/0B,EAAO1pB,EAAIy+C,EAAS,KAC/FzrD,KAAK+qD,iBAAmBr0B,EAAO3pB,EAAI0+C,EACnCzrD,KAAKirD,eAAiBv0B,EAAO1pB,EAAIy+C,EACjC,IAAIi4U,EAASljY,SAASosB,eAAe,yBACjCyoY,EAAchiX,GAAerzC,KAAKgB,QAAQsC,IAC1CqC,EAAU+9X,EAAOx2S,WAAW,MAC5BsgY,EAAcl2b,OAAOt3B,KAAK4iB,MAAM5M,OAAShW,KAAKs0X,aAC9Cm5F,EAAen2b,OAAOt3B,KAAK4iB,MAAM7M,QAAU/V,KAAK+/Y,cACpDytE,EAAanhd,KAAK0T,IAAIytc,EAAYC,GAClCp4D,EAAY7xZ,aAAa,YAAa,wBAEhCgqd,EAAa,KACnB7nd,EAAQoiW,aAAaylH,EAAY,EAAG,EAAGA,EAAY,EAAG,GACtD7nd,EAAQwoF,UAAY,MACpBnuF,KAAKmtd,mBAAmBntd,KAAKM,OAAOwqD,SAASC,iBAAkB/qD,KAAKM,OAAOwqD,SAASG,eAAgBjrD,KAAKM,OAAOwqD,SAASY,cAG7Ho/Z,EAASzvd,UAAUwra,SAAW,SAAUjxV,GACpC,GAAI51E,KAAK1D,MAAO,CACZ,IAAIo6B,EAAS12B,KAAKmtd,mBAAmBntd,KAAKM,OAAOwqD,SAASC,iBAAkB/qD,KAAKM,OAAOwqD,SAASG,eAAgBjrD,KAAKM,OAAOwqD,SAASY,aAAa,GACnJ1rD,KAAKwsd,oBAAoB91b,EAAO3pB,GAAI2pB,EAAO1pB,EAAG0pB,EAAO1gB,MAAO0gB,EAAO3gB,UAG3E+0c,EAASzvd,UAAUmoa,aAAe,SAAU5tV,GACxC,GAAI7hC,GAAS6hC,EAAIzuE,0BACb,OAAQyuE,EAAIzuE,OAAO7D,IACf,KAAKtD,KAAK0jY,OAAOpgY,GAAK,OAClBtD,KAAK0jY,OAAOh/X,MAAM+0D,OAAS,WAC3B,MACJ,KAAKz5D,KAAK0jY,OAAOpgY,GAAK,QAClBtD,KAAK0jY,OAAOh/X,MAAM+0D,OAAS,WAC3B,MACJ,KAAKz5D,KAAK0jY,OAAOpgY,GAAK,MAClBtD,KAAK0jY,OAAOh/X,MAAM+0D,OAAS,WAC3B,MACJ,KAAKz5D,KAAK0jY,OAAOpgY,GAAK,SAClBtD,KAAK0jY,OAAOh/X,MAAM+0D,OAAS,WAC3B,MACJ,KAAKz5D,KAAK0jY,OAAOpgY,GAAK,UAClBtD,KAAK0jY,OAAOh/X,MAAM+0D,OAAS,YAC3B,MACJ,KAAKz5D,KAAK0jY,OAAOpgY,GAAK,WAClBtD,KAAK0jY,OAAOh/X,MAAM+0D,OAAS,YAC3B,MACJ,KAAKz5D,KAAK0jY,OAAOpgY,GAAK,aAClBtD,KAAK0jY,OAAOh/X,MAAM+0D,OAAS,YAC3B,MACJ,KAAKz5D,KAAK0jY,OAAOpgY,GAAK,cAClBtD,KAAK0jY,OAAOh/X,MAAM+0D,OAAS,iBAKnCz5D,KAAK0jY,OAAOh/X,MAAM+0D,OAAS,WAGnCqxZ,EAASzvd,UAAUwkV,UAAY,SAAUjqQ,GAIrC,GAHA51E,KAAK1D,OAAQ,EACb0D,KAAKwja,aAAa5tV,GAClB51E,KAAKqyB,aAAeryB,KAAKguD,cAAc4nB,GACnC51E,KAAK+qd,WACL,OAAQ/qd,KAAK+qd,YACT,IAAK,OACI/qd,KAAKk4Z,UAAal4Z,KAAKqlD,WAAWt4C,IAAM/M,KAAKqyB,aAAatlB,GAAK/M,KAAKqlD,WAAWr4C,IAAMhN,KAAKqyB,aAAarlB,IACxGhN,KAAK0td,aACL1td,KAAKk4Z,UAAW,GAEhBl4Z,KAAKk4Z,UACLl4Z,KAAKqsd,eAET,MACJ,IAAK,QACIrsd,KAAKk4Z,WACNl4Z,KAAK0td,aACL1td,KAAKk4Z,UAAW,GAEpBl4Z,KAAKmsd,0BACL,MACJ,IAAK,OACInsd,KAAKqlD,WAAWt4C,IAAM/M,KAAKqyB,aAAatlB,GAAK/M,KAAKqlD,WAAWr4C,IAAMhN,KAAKqyB,aAAarlB,GAAMhN,KAAKk4Z,YACjGl4Z,KAAKk4Z,UAAW,EAChBl4Z,KAAK4sd,8BAKrB5sd,KAAKypV,UAAYzpV,KAAKqyB,cAE1By4b,EAASzvd,UAAUgwd,gBAAkB,SAAUz1Y,GAC3C51E,KAAKk4Z,UAAW,EAChBl4Z,KAAK+qd,WAAa,GACd/qd,KAAKkP,SACLlP,KAAKkP,OAAOzO,WAAW6E,YAAYtF,KAAKkP,QACxClP,KAAKkP,OAAS,MAElBlP,KAAK1D,OAAQ,EACbkE,SAASosB,eAAe5sB,KAAK0jY,OAAOpgY,GAAK,kBAAkBoB,MAAM2ka,cAAgB,OAErFyhD,EAASzvd,UAAU8na,aAAe,SAAUvtV,GACxC,IAAI71E,EAAQC,KAYZ,OAXIA,KAAK65U,UACL35U,aAAaF,KAAK65U,UAEtB75U,KAAK65U,SAAW15U,WAAW,WACvB,IACIsrd,EADUjrd,SAASosB,eAAe7sB,EAAMiB,QAAQsC,IAChCsI,wBACpB7L,EAAM6iB,MAAM5M,MAAQy1c,EAAMz1c,MAC1BjW,EAAM6iB,MAAM7M,OAAS01c,EAAM11c,OAC3BhW,EAAMkrd,eACNlrd,EAAMm1R,UAAUn1R,EAAMu3C,WACvB,KACI,GAGXwza,EAASzvd,UAAUq9Z,UAAY,SAAU9iV,GAOrC,GANIA,EAAIzuE,OAAO7D,KAAOtD,KAAK0jY,OAAOpgY,GAAK,iBACnCtD,KAAK+qd,WAAa,QAElBn1Y,EAAIzuE,OAAO7D,KAAOtD,KAAK0jY,OAAOpgY,GAAK,iBACnCtD,KAAK+qd,WAAa,OAElBh3a,GAAS6hC,EAAIzuE,OAAQ,mBAErB,OADAnH,KAAK+qd,WAAa,QACVn1Y,EAAIzuE,OAAO7D,IACf,KAAKtD,KAAK0jY,OAAOpgY,GAAK,OAClBtD,KAAKosd,gBAAkB,OACvB,MACJ,KAAKpsd,KAAK0jY,OAAOpgY,GAAK,QAClBtD,KAAKosd,gBAAkB,QACvB,MACJ,KAAKpsd,KAAK0jY,OAAOpgY,GAAK,MAClBtD,KAAKosd,gBAAkB,MACvB,MACJ,KAAKpsd,KAAK0jY,OAAOpgY,GAAK,SAClBtD,KAAKosd,gBAAkB,SACvB,MACJ,KAAKpsd,KAAK0jY,OAAOpgY,GAAK,UAClBtD,KAAKosd,gBAAkB,UACvB,MACJ,KAAKpsd,KAAK0jY,OAAOpgY,GAAK,WAClBtD,KAAKosd,gBAAkB,WACvB,MACJ,KAAKpsd,KAAK0jY,OAAOpgY,GAAK,aAClBtD,KAAKosd,gBAAkB,aACvB,MACJ,KAAKpsd,KAAK0jY,OAAOpgY,GAAK,cAClBtD,KAAKosd,gBAAkB,cAInCpsd,KAAKqlD,WAAarlD,KAAKypV,UAAYzpV,KAAKguD,cAAc4nB,GACtD51E,KAAKgrd,cAAgBhrd,KAAKM,OAAOwqD,SAASQ,cAAgBtrD,KAAKM,OAAOwqD,SAASO,eAC1D7qD,SAASosB,eAAe5sB,KAAK0jY,OAAOpgY,GAAK,kBAC/CoB,MAAM2ka,cAAgB,QAEzCyhD,EAASzvd,UAAUw9Z,QAAU,SAAUjjV,GACnC51E,KAAKqyB,aAAeryB,KAAKguD,cAAc4nB,GACxBt+C,OAAOt3B,KAAK4iB,MAAM5M,OACjBshB,OAAOt3B,KAAK4iB,MAAM7M,QAClC,GAAI/V,KAAK+qd,WACL,GAAK/qd,KAAKqlD,WAAWt4C,IAAM/M,KAAKqyB,aAAatlB,GAAK/M,KAAKqlD,WAAWr4C,IAAMhN,KAAKqyB,aAAarlB,GACtF,GAAwB,QAApBhN,KAAK+qd,iBAIL,GAAI/qd,KAAKkP,OAAQ,CACb,IAAIwnB,EAAU12B,KAAKgB,QAAQO,qBAAqB,QAAQ,IAAKqtC,UAC7D5uC,KAAKosd,gBAAkBpsd,KAAKosd,iBAAmB,GAC/C,IAAIr/c,EAAI2pB,EAAO3pB,EACXC,EAAI0pB,EAAO1pB,EACXgJ,EAAQ0gB,EAAO1gB,MACfD,EAAS2gB,EAAO3gB,OACkB,YAAzB/V,KAAKosd,iBAA0D,aAAzBpsd,KAAKosd,iBAC3B,eAAzBpsd,KAAKosd,iBAAoCpsd,KAAKosd,gBAClDpsd,KAAKgtd,mBAAmBjgd,EAAGC,EAAGgJ,EAAOD,SAK7C,GAAI6/D,EAAIzuE,OAAO7D,KAAOtD,KAAK0jY,OAAOpgY,GAAK,gBAAoC,WAAlBsyE,EAAIzuE,OAAO7D,GAAiB,CAK7E0S,GADA0gB,EAHM12B,KAAKgB,QAAQO,qBAAqB,OAAO,GACvCqrB,eAAe5sB,KAAK0jY,OAAOpgY,GACjC,gBACSsrC,WACI54B,MACfD,EAAS2gB,EAAO3gB,OACpB/V,KAAKk4Z,UAAW,EAChBl4Z,KAAK+qd,WAAa,MAClB/qd,KAAKgtd,mBAAmBhtd,KAAKqyB,aAAatlB,EAAIiJ,EAAQ,EAAGhW,KAAKqyB,aAAarlB,EAAI+I,EAAS,EAAGC,EAAOD,GAClG/V,KAAKk4Z,UAAW,EAIxBl4Z,KAAKkP,SACLlP,KAAKkP,OAAOzO,WAAW6E,YAAYtF,KAAKkP,QACxClP,KAAKkP,OAAS,MAElBlP,KAAK+qd,WAAa,GAClB/qd,KAAKqlD,WAAa,KAClBrlD,KAAKqyB,aAAe,KACpBryB,KAAKypV,UAAY,KACjBzpV,KAAKkP,OAAS,KACdlP,KAAKgrd,cAAgB,EACrBhrd,KAAKosd,gBAAkB,GACvBpsd,KAAKk4Z,UAAW,EAChBl4Z,KAAK1D,OAAQ,EACbkE,SAASosB,eAAe5sB,KAAK0jY,OAAOpgY,GAAK,kBAAkBoB,MAAM2ka,cAAgB,OAErFyhD,EAASzvd,UAAUqyd,WAAa,WAC5B,IAAI7wb,EAAI78B,KAAKgB,QAAQO,qBAAqB,OAAO,GAE7CwL,GADQ/M,KAAKM,OAAOwqD,SAASY,YACzB1rD,KAAKqlD,WAAWt4C,GACpBC,EAAIhN,KAAKqlD,WAAWr4C,EACpBgJ,EAAQ,EACRD,EAAS,EACb,GAAwB,UAApB/V,KAAK+qd,WAAwB,CAC7B,IAEIr0b,EAFOmG,EACPjQ,eAAe5sB,KAAK0jY,OAAOpgY,GAAK,gBAClBsrC,UAClB7hC,EAAI2pB,EAAO3pB,EACXC,EAAI0pB,EAAO1pB,EACXgJ,EAAQ0gB,EAAO1gB,MACfD,EAAS2gB,EAAO3gB,OAEpB,IAAIy0a,EAAgB72Y,GAAiB,QACjCrwC,GAAM,SAAUyJ,EAAGA,EAAGC,EAAGA,EAAGgJ,MAAOA,EAAOD,OAAQA,EAClD6nB,KAAQ,cAAeE,OAAU,OAAQ0rS,mBAAoB,MAAOmkJ,kBAAmB,eAEvE9wb,EAAEjQ,eAAe5sB,KAAKsD,GAAK,kBACjC3B,YAAY6ob,GAC1Bxqb,KAAKkP,OAASs7a,GAElBsgC,EAASzvd,UAAU2yD,cAAgB,SAAU4nB,GACzC,IAAIsrQ,EACAr1U,EACAI,EACJ,IAAmC,IAA/B2pE,EAAIlvE,KAAKnI,QAAQ,SAAiB,CAElC,IAAIuN,GADJo1U,EAAWtrQ,GACUjX,eAAe,GAAGvqB,QACnCloC,EAAQg1U,EAASviR,eAAe,GAAGtqB,QACvCxoC,EAAUC,EAAQ9L,KAAKgB,QAAQmT,WAC/BlI,EAAUC,EAAQlM,KAAKgB,QAAQoT,eAG/BvI,EAAU+pE,EAAIxhC,QACdnoC,EAAU2pE,EAAIvhC,QAElB,IAAI4uX,EAAejja,KAAKgB,QAAQ4K,wBAGhC,OAFAC,GAAoBo3Z,EAAaz2Z,KACjCP,GAAoBg3Z,EAAav2Z,KACxBK,EAAGlB,EAAU7L,KAAK+qD,iBAAkB/9C,EAAGf,EAAUjM,KAAKirD,iBAQnE6/Z,EAASzvd,UAAUiX,QAAU,WAIzB,GAHAtS,KAAKw+G,eACLx+G,KAAK+N,OAAO,cACZo9E,EAAO9vF,UAAUiX,QAAQhR,KAAKtB,MAC1BQ,SAASosB,eAAe5sB,KAAKgB,QAAQsC,IAAK,CAC1CtD,KAAKgB,QAAQ8C,UAAUS,OAAO,cAC9B,IAAI61B,EAAU55B,SAASosB,eAAe5sB,KAAKgB,QAAQsC,GAAK,WACpD82B,GACAp6B,KAAKgB,QAAQsE,YAAY80B,GAGjCp6B,KAAKM,OAAO2xD,MAAM5pC,OAAOroB,KAAKM,OAAO2xD,MAAM1zD,QAAQyB,KAAKsD,IAAK,GAC7DtD,KAAKokb,gBAAkB,KACvBpkb,KAAK0jY,OAAS,KACd1jY,KAAKM,OAAS,MAKlBwqd,EAASzvd,UAAUkkC,cAAgB,WAI/B,MAAO,YAEXsrD,IACI3jF,EAAS,SACV4jd,EAASzvd,UAAW,aAAS,GAChCwvF,IACI3jF,EAAS,SACV4jd,EAASzvd,UAAW,cAAU,GACjCwvF,IACI3jF,EAAS,KACV4jd,EAASzvd,UAAW,gBAAY,GACnCwvF,IACI/hF,KACDgid,EAASzvd,UAAW,eAAW,GAC3Byvd,GACTv/W,ICp4BFqiX,GAAcxhX,OAAQyhX,GAAuBC,GAAcC,GAAiBC,GAA8BC,GAAkBC,GAAeC,GAAqBC,GAAmBC,GAAsBC,GAAwBC,GAAeC,GAAsBC,GAAyBC,mzBlDysB/R,mCAOA,goGvU9sBI9zZ,GAAc,GACdC,GAAa,GACb70D,MACA80D,GAAc,W0XNdwvB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAO5Ds/J,GAA+B,SAAU/wG,GAEzC,SAAS+wG,IACL,OAAkB,OAAX/wG,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAiB/D,OAnBAsqF,GAAU4xG,EAAe/wG,GAIzBN,IACI3jF,KACDg1L,EAAc7gM,UAAW,YAAQ,GACpCwvF,IACI3jF,KACDg1L,EAAc7gM,UAAW,aAAS,GACrCwvF,IACI3jF,KACDg1L,EAAc7gM,UAAW,eAAW,GACvCwvF,IACI3jF,KACDg1L,EAAc7gM,UAAW,eAAW,GACvCwvF,IACI3jF,KACDg1L,EAAc7gM,UAAW,sBAAkB,GACvC6gM,GACTl9H,IAES2vZ,IACP3zR,KAAM,iBACNvwD,IAAK,QACLrwG,QAAS,YACTo1G,SAAU,WACV3C,MAAO,UACP+hV,OAAQ,WACRC,UAAW,eACX3sd,MAAO,eACP0uH,GAAIunF,GAAgBvnF,GACpB79B,MAAOolH,GAAgBplH,MACvBmrB,SAAUi6F,GAAgBj6F,SAC1B8zU,SAAU,cAKV88B,GAA8B,SAAU3jY,GAKxC,SAAS2jY,EAAa97c,EAAShS,GAC3B,OAAOmqF,EAAO7pF,KAAKtB,KAAMgT,EAAShS,IAAYhB,KAqyBlD,OA1yBAsqF,GAAUwkY,EAAc3jY,GAQxB2jY,EAAazzd,UAAU0zd,cAAgB,SAAUzkd,EAAMmiF,EAASC,GAC5D,IAAIsoN,EAAc,IAAI12S,OAClB0wd,EAAc,IAAI1wd,OAElB+S,EAAW,IAAIjW,SAAS,OAAQ,eACpC45S,EAAY3jS,EAAS/G,IAASmiF,EAAQp7E,EAAS/G,IAC/C0kd,EAAY39c,EAAS/G,IAASoiF,EAAQr7E,EAAS/G,IAC/C,IAAI9N,EAAO,IAAI8B,OAGf,OAFA9B,EAAKw4S,YAAcA,EACnBx4S,EAAKwyd,YAAcA,EACZxyd,GAEXsyd,EAAazzd,UAAU4zd,eAAiB,SAAUxic,EAAMkuC,EAAYw0F,GAChE,IAAInyJ,EAAQ,KASZ,OARKS,EAAkBuC,KAAKkvd,YAEpBlyd,EADA29D,EACQ36D,KAAKmvd,eAAe1ic,GAAM,EAAM0iI,GAGhCnvJ,KAAKmvd,eAAe1ic,GAAM,EAAO0iI,IAG1CnyJ,GAGX8xd,EAAazzd,UAAU8zd,eAAiB,SAAU1ic,EAAMkuC,EAAYw0F,EAAcigU,GAC9E,IAAIrvd,EAAQC,KACRhD,EAAQ,KACRoyd,IACApyd,EAAQyvB,GAEZ,IAAI82C,EAAavjE,KAAKkvd,SAClBtjc,EAAS5rB,KAAK4rB,OACdllB,EAAO1G,KAAKqvd,WAAW9rZ,GAAY60H,OACvC,GAAa,WAAT1xL,GAA8B,WAATA,GAA8B,YAATA,EAC1C,IAAK,IAAItI,EAAK,EAAGkxd,EAAe/rZ,EAAYnlE,EAAKkxd,EAAa7yd,OAAQ2B,IAAM,CACxE,IAAIyf,EAAOyxc,EAAalxd,GACnBX,EAAkBogB,KACfsxI,EACAnyJ,EAAQgD,KAAKuvd,eAAermc,OAAOrL,GAAO4O,EAAMkuC,GAG5CA,EACI36D,KAAKwvd,gBAAgBtmc,OAAOrL,GAAO4O,KACnCzvB,EAAQgD,KAAKyvd,aAAavmc,OAAOrL,GAAO4O,EAAMkuC,IAI9C36D,KAAK0vd,mBAAmBxmc,OAAOrL,GAAO4O,KACtCzvB,EAAQgD,KAAKyvd,aAAavmc,OAAOrL,GAAO4O,EAAMkuC,EAAYy0Z,UAQ1Ez0Z,EACA4I,EAAWv8B,OAAO,SAAUnpB,GACpB9d,EAAMyvd,gBAAgB3yd,EAAS+uB,EAAOa,KAAM5O,GAAM3Q,WAAYuf,KAC9DzvB,EAAQH,EAAS+uB,EAAO5uB,MAAO6gB,MAKnCuxc,EACA7rZ,EAAWv8B,OAAO,SAAUnpB,GACxB,IAAI8xc,EAAY9yd,EAAS+uB,EAAO5uB,MAAO6gB,GAClCpgB,EAAkBkyd,IAAc5vd,EAAM6vd,WAAWD,KAAe3yd,EAAMkQ,aACvElQ,EAAQH,EAAS+uB,EAAOa,KAAM5O,MAKtC0lD,EAAWv8B,OAAO,SAAUnpB,GACpB9d,EAAM2vd,mBAAmB7yd,EAAS+uB,EAAOa,KAAM5O,GAAO4O,KACtDzvB,EAAQH,EAAS+uB,EAAO5uB,MAAO6gB,MAMnD,OAAO7gB,GAEX8xd,EAAazzd,UAAUk0d,eAAiB,SAAU1xc,EAAM4O,EAAMkuC,GAC1D,IAAIhvC,EAAW8zC,GAASg0F,iBAAiBvqI,OAAOrL,IAC5Cgyc,EAAWpwZ,GAASg0F,iBAAiBhnI,EAAKvf,YAC1ClQ,EAAQ,KAWZ,OAVI29D,EACI36D,KAAKwvd,gBAAgB7jc,EAAUkkc,KAC/B7yd,EAAQgD,KAAKyvd,aAAavmc,OAAOrL,GAAO4O,EAAMkuC,IAI9C36D,KAAK0vd,mBAAmBxmc,OAAOrL,GAAO4O,KACtCzvB,EAAQgD,KAAKyvd,aAAavmc,OAAOrL,GAAO4O,EAAMkuC,IAG/C39D,GAEX8xd,EAAazzd,UAAUm0d,gBAAkB,SAAU3xc,EAAM4O,GACrD,OAAOvD,OAAOrL,GAAMjI,gBAAkB6W,EAAKvf,WAAW0I,eAE1Dk5c,EAAazzd,UAAUq0d,mBAAqB,SAAU7xc,EAAM4O,GACxD,OAAOvD,OAAOrL,KAAU4O,EAAKvf,YAEjC4hd,EAAazzd,UAAUo0d,aAAe,SAAU9jc,EAAUmkc,EAAWn1Z,EAAYy0Z,GAC7E,IACI7rZ,EAAavjE,KAAKkvd,SAClBxod,EAAO1G,KAAKqvd,WAAW9rZ,GAAY60H,OAYvC,OAXIg3R,EACQzjc,EAASze,WAGbytD,EACiB,WAATj0D,EAAoBwiB,OAAOyC,GAAY3rB,KAAKymN,kBAAkBv9L,OAAOyC,IAG5D,WAATjlB,EAAoBopd,EAAY9vd,KAAKymN,kBAAkBqpQ,IAK3EhB,EAAazzd,UAAU00d,WAAa,SAAUC,GAC1C,GAA+B,qBAA3Bhwd,KAAKiwd,mBAA2E,uBAA/Bjwd,KAAKkwd,sBAAgD,CACtG,IAAIjhd,EAAW+gd,EAAgBhwd,KAAKkwd,sBAAwBlwd,KAAKiwd,kBAEjEjwd,KAAK6iG,KAAK7gG,UAAY,GAEtB,IAAK,IAAI5D,EAAK,EAAGyE,EADAmM,GAAQC,EACH0lC,KAAoBv2C,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC5D,IAAIyf,EAAOhb,EAAGzE,GACd4B,KAAK6iG,KAAKlhG,YAAYkc,QAGzB,CAED7d,KAAKqlH,KAAO,IAAI7N,GAAK,aADFy4W,kBAAmB,mBAAoBC,sBAAuB,sBACnClwd,KAAKgO,QACnDhO,KAAK6iG,KAAK7gG,UAAYgud,EAClBhwd,KAAKqlH,KAAKtxC,YAAY,yBAA2B/zE,KAAKqlH,KAAKtxC,YAAY,uBAGnF+6Y,EAAazzd,UAAU80d,eAAiB,SAAUnzd,GAG9C,OADOgD,KAAKmvd,eAAenyd,GAAO,GAAO,GAAO,IAGpD8xd,EAAazzd,UAAUu0d,WAAa,SAAU/xc,GAC1C,IAAKpgB,EAAkBogB,GAAO,CAE1B,OADgBA,EAAK3Q,WACJgD,OAErB,OAAO2N,EAAK3Q,YAEhB4hd,EAAazzd,UAAUorN,kBAAoB,SAAUzpN,GACjD,GAAIgD,KAAKkvd,UAAYlvd,KAAKkvd,SAASzyd,OAAQ,CACvC,IAAIohB,EAAO7d,KAAKqvd,WAAWrvd,KAAKkvd,UAChC,GAAsF,iBAA3Eryd,EAAUmD,KAAK4rB,OAAO5uB,MAAQgD,KAAK4rB,OAAO5uB,MAAQ,QAAU6gB,EAAKA,OACrD,WAAhBA,EAAKu6K,OACR,OAAOrjK,SAAS/3B,EAAO,IAE3B,GAAsF,kBAA3EH,EAAUmD,KAAK4rB,OAAO5uB,MAAQgD,KAAK4rB,OAAO5uB,MAAQ,QAAU6gB,EAAKA,OACrD,YAAhBA,EAAKu6K,OACR,MAAkB,SAAVp7L,EAGhB,OAAOA,GAKX8xd,EAAazzd,UAAUomH,aAAe,WAC9BzhH,KAAK6iG,MACL7iG,KAAKowd,kBAAkB5rd,KAAKxE,KAAK6iG,MAErC7iG,KAAKkT,UAAYvP,EAAS3D,KAAKowd,kBAAmBzB,GAAoBlkV,KAClEpmI,EAAYrE,KAAKowd,kBAAmBzB,GAAoBlkV,MAMhEqkV,EAAazzd,UAAU8yG,WAAa,WAEhC,GADAnuG,KAAKupH,WAAY,EACY,OAAzBvpH,KAAKgB,QAAQgC,QAAkB,CAC/B,IAAIqtd,EAAcriV,GAAS8pD,sBAAsB93L,KAAKgB,SACtDhB,KAAKgH,eAAgB4kB,QAAUa,KAAM,OAAQzvB,MAAO,UAAY,GAChEgD,KAAKswd,UAAUD,EAAarwd,KAAK4rB,aAEhC,GAA6B,WAAzB5rB,KAAKgB,QAAQgC,QAAsB,EACvBhD,KAAKujE,sBAAsB/kE,MAASwB,KAAKujE,WAAW9mE,OAAS,GACvEgB,EAAkBuC,KAAKujE,cAE1BvjE,KAAKuwd,2BAITvwd,KAAKwwd,YAAYxwd,KAAKujE,WAAYvjE,KAAK4rB,OAAQ5rB,KAAK07D,QAO5DozZ,EAAazzd,UAAUmxG,eAAiB,WACpC,OAAOxsG,KAAKgtG,kBAMhB8hX,EAAazzd,UAAU06H,WAAa,WAC5B/1H,KAAKilB,QACLjlB,KAAKgB,QAAQwC,aAAa,gBAAiB,SAG3CxD,KAAKgB,QAAQwC,aAAa,gBAAiB,SAInDsrd,EAAazzd,UAAUk1d,oBAAsB,WACzC,IAAIvvd,EAAUhB,KAAKgB,QACf4qB,GAAW5uB,MAAO,QAASyvB,KAAM,QACjC4jc,KACAt9X,EAAQ/xF,EAAQQ,iBAAiB,mBACjCu0F,EAAS/0F,EAAQQ,iBAAiB,iBAEtC,GADAxB,KAAKywd,kBAAkBJ,EAAat6X,EAAQnqE,GACxCmnE,EAAMt2F,OAAQ,CACd,IAAK,IAAIN,EAAI,EAAGA,EAAI42F,EAAMt2F,OAAQN,IAAK,CACnC,IAAI0hB,EAAOk1E,EAAM52F,GACbu0d,KACJA,EAAY9kc,EAAOa,MAAQ5O,EAAKxK,MAChCq9c,EAAY5kc,UAAW,EACvB,IAAIzrB,EAAQwd,EAAKrc,iBAAiB,UAClC6ud,EAAY7rd,KAAKksd,GACjB1wd,KAAKywd,kBAAkBJ,EAAahwd,EAAOurB,GAEnC5qB,EAAQQ,iBAAiB,iBAEzCxB,KAAK4rB,OAAOa,KAAOb,EAAOa,KAC1BzsB,KAAK4rB,OAAO5uB,MAAQ4uB,EAAO5uB,MAC3BgD,KAAKswd,UAAUD,EAAazkc,IAEhCkjc,EAAazzd,UAAUo1d,kBAAoB,SAAUh2Z,EAAOznD,EAAS4Y,GACjE,IAAK,IAAIxtB,EAAK,EAAGimG,EAAYrxF,EAAS5U,EAAKimG,EAAU5nG,OAAQ2B,IAAM,CAC/D,IAAI23F,EAASsO,EAAUjmG,GACnBslE,KACJA,EAAK93C,EAAOa,MAAQspE,EAAO96B,UAC3ByI,EAAK93C,EAAO5uB,OAAS+4F,EAAOljF,aAAa+Y,EAAO5uB,OAAS+4F,EAAOljF,aAAa+Y,EAAO5uB,OAAS+4F,EAAO96B,UACpGR,EAAMj2D,KAAKk/D,KAOnBorZ,EAAazzd,UAAUoX,UAAY,WAE/BzS,KAAK2wd,aAAe,EACpB3wd,KAAKowd,qBACLpwd,KAAK4wd,aAAc,GAKvB9B,EAAazzd,UAAUm1d,YAAc,SAAUjtZ,EAAY33C,EAAQ8vC,GAC/D,IAAI37D,EAAQC,KACZ4rB,EAASA,GAAkB5rB,KAAK4rB,OAChC,IAAIqtK,EAEJ,GADAj5L,KAAK4vT,UAAW,EACZrsP,aAAsBC,GAAa,CACnC,IAAIj2D,GAAcsrB,QAAQ,EAAOr8B,KAAM+mE,EAAY7H,MAAOA,GAE1D,GADA17D,KAAKwmB,QAAQ,cAAejZ,GACxBA,EAAUsrB,OACV,OAEJ74B,KAAK2hB,cACL3hB,KAAK4wd,aAAc,EACnBrjd,EAAU/Q,KAAKkyJ,aAAa1uJ,KAAK2iM,SAASp1L,EAAUmuD,QAAQ43H,KAAK,SAAUzyL,GAEvE,GADAd,EAAMymB,QAAQ,iBAAkB3lB,IAC5BA,EAAEg4B,OAAN,CAGA,IAAIkiC,EAAYl6D,EAAE9B,OAClBk6L,EAAYl5L,EAAM8/E,YAAY9kB,EAAWnvC,GACzC7rB,EAAM8wd,iBAAiB53R,EAAWl+H,EAAWl6D,GAC7Cd,EAAM6wd,aAAc,EACpB7wd,EAAM2iB,cACN3iB,EAAMymB,QAAQ,aAAei0C,MAAOM,EAAWl6D,EAAGA,OACnD8zL,MAAM,SAAU9zL,GACfd,EAAM6wd,aAAc,EACpB7wd,EAAM+wd,gBAAgBjwd,GACtBd,EAAM2iB,oBAGT,CACD1iB,KAAK2hB,cACL,IAAI6sI,EAAc,IAAIhrF,GAAYD,GAC9BxI,EAAa/6D,KAAK2iM,SAASjnI,GAAQuI,aAAauqF,GACpDyqC,EAAYj5L,KAAK6/E,YAAY9kB,EAAWnvC,GACxC5rB,KAAK6wd,iBAAiB53R,EAAWl+H,GACjC/6D,KAAK0iB,cACL1iB,KAAKwmB,QAAQ,aAAei0C,MAAOM,MAG3C+zZ,EAAazzd,UAAUsmB,YAAc,aAGrCmtc,EAAazzd,UAAUqnB,YAAc,aAGrCosc,EAAazzd,UAAUy1d,gBAAkB,SAAUjwd,GAC/Cb,KAAK25L,iBACL35L,KAAKwmB,QAAQ,gBAAiB3lB,GAC9Bb,KAAK+vd,YAAW,GAChBpsd,GAAU3D,KAAK6iG,MAAO8rX,GAAoBC,SAE9CE,EAAazzd,UAAUw1d,iBAAmB,SAAU53R,EAAWp2F,EAAMhiG,GACjEb,KAAKkvd,SAAWrsX,EAChB7iG,KAAK6iG,KAAK7gG,UAAY,GACtBhC,KAAK6iG,KAAKlhG,YAAYs3L,GACtBj5L,KAAK25L,cAAgB35L,KAAK6iG,KAAKrhG,iBAAiB,IAAMmtd,GAAoB/9V,IAC1E5wH,KAAKi5L,UAAYj5L,KAAK6iG,KAAKlgG,cAAc,MACzC3C,KAAK+wd,WAAW/wd,KAAK6iG,KAAMA,EAAM7iG,KAAKupH,YAE1CulW,EAAazzd,UAAU01d,WAAa,SAAUtoR,EAAa5lG,EAAM0mB,GAC7D,IAAIynW,EAAYvoR,EAAY9lM,cAAc,IAAMgsd,GAAoB/9V,IAChEixE,EAAe4G,EAAY9lM,cAAc,IAAMgsd,GAAoBn/U,UACnEwhV,IAAcnvR,GACdl+L,GAAUqtd,GAAYrC,GAAoBzsd,OAE1C2gG,EAAKpmG,QAAU,GACfuD,KAAK+vd,aACLpsd,GAAU8kM,GAAckmR,GAAoBC,SAG5CnmR,EAAY3kM,UAAUS,OAAOoqd,GAAoBC,QAEjD5ud,KAAK64L,eACL74L,KAAKk6L,oBAAoBuO,IAMjCqmR,EAAazzd,UAAUsnM,SAAW,SAAUjnI,GACxC,OAAOA,IAAgB17D,KAAK07D,MAAQ17D,KAAK07D,MAAQ,IAAI2H,KAKzDyrZ,EAAazzd,UAAU6+L,oBAAsB,SAAU+2R,GACnD,GAA4B,OAAxBjxd,KAAK4rB,OAAOwtK,SAAoBp5L,KAAKujE,YAAcvjE,KAAKgB,QAAQ2B,cAAc,IAAMgsd,GAAoB57X,OACxG,CAAA,IAAIxvB,EAAavjE,KAAKujE,WAClB42H,EAAc82R,EAAQzvd,iBAAiB,IAAMmtd,GAAoB57X,OACnDi7C,GAASksD,oBAAoBl6L,KAAK64L,cAAet1H,EAAYvjE,KAAK4rB,OAAO3oB,WAAYk3L,KAM/G20R,EAAazzd,UAAUyqN,gBAAkB,SAAUviJ,EAAY33C,GACvD23C,GAAc33C,EAAOwtK,SAAWp5L,KAAKgB,QAAQ2B,cAAc,aACvDipB,EAAOwtK,UACgB,SAAnBp5L,KAAK43L,YACLr0H,EAAavjE,KAAKkxd,oBAAoB3tZ,IAE1CA,EAAayqE,GAAS4rD,gBAAgBr2H,EAAY33C,EAAO3oB,WAAYjD,KAAK43L,YAE9Ej0L,GAAU3D,KAAK6iG,MAAO8rX,GAAoB38B,WAG1CzuX,EAAavjE,KAAKkxd,oBAAoB3tZ,GAE1C,IAAIvwD,EAAUhT,KAAKmxd,WAAW5tZ,EAAY33C,GAC1C,OAAOoiH,GAASsrD,WAAW/1H,EAAYvwD,GAAS,IAGpD87c,EAAazzd,UAAU81d,WAAa,SAAU5tZ,EAAY33C,GACtD,IAAI8nD,GAAUj2E,EAAkBmuB,EAAO8nD,SAKvC,OAAOh1E,KAJwB,OAAhBktB,EAAOa,MAAkC,OAAjBb,EAAO5uB,OAC1C4uB,OAAQA,EAAO3oB,WACf4tH,SAAUn9C,EAAS6iH,gBAAkBkC,cAAe,kBAClD7sK,QAAU5uB,MAAO,SACI4uB,GAAQ,IAGvCkjc,EAAazzd,UAAU+1d,kBAAoB,SAAUvwd,GAC7CpD,EAAkBuC,KAAKqxd,sBACvBrxd,KAAKqxd,mBAAqBlwd,EAAc,OAASkC,UAAWsrd,GAAoBE,YAC3E7ud,KAAK6iG,KAAKlgG,cAAc,MAAMmB,UAAUK,SAASwqd,GAAoB57X,SACtE/yF,KAAKqxd,mBAAmB3sd,MAAM4xC,QAAU,QAE5CzxC,GAAS7E,KAAKqxd,oBAAqBrxd,KAAK6iG,MACxC7iG,KAAKsxd,kBAEJ7zd,EAAkBuC,KAAKqxd,qBAAgE,MAAzCrxd,KAAKqxd,mBAAmB3sd,MAAM+9D,QAC7EziE,KAAKsxd,iBAETtxd,KAAKuxd,WAAW1wd,IAEpBiud,EAAazzd,UAAUk2d,WAAa,SAAU1wd,GAK1C,IAAK,IAJDsG,EAAStG,EAAEsG,OACX29M,EAAW/vL,SAAS5nB,iBAAiBnN,KAAK25L,cAAc,GAAI,MAAMvsL,iBAAiB,UAAW,IAC9Fokd,EAAWnld,KAAKoxB,MAAMt2B,EAAOgF,UAAY24M,GACzCnrB,EAAgB35L,KAAKi5L,UAAUz3L,iBAAiB,MAC3CrF,EAAIq1d,EAAUr1d,GAAK,EAAGA,IAAK,CAChC,IAAKsB,EAAkBk8L,EAAcx9L,KAAOw9L,EAAcx9L,GAAG2H,UAAUK,SAASwqd,GAAoB57X,OAAQ,CACxG,IAAI23H,EAAY/wB,EAAcx9L,GAC9B6D,KAAKqxd,mBAAmBrvd,UAAY0oN,EAAU1oN,UAC9ChC,KAAKqxd,mBAAmB3sd,MAAMgI,IAAM7L,EAAEsG,OAAOgF,UAAY,KACzDnM,KAAKqxd,mBAAmB3sd,MAAM4xC,QAAU,QACxC,MAGAt2C,KAAKqxd,mBAAmB3sd,MAAM4xC,QAAU,OACxCt2C,KAAKqxd,mBAAmB3sd,MAAMgI,IAAM,SAOhDoid,EAAazzd,UAAUwkF,YAAc,SAAUqvY,EAAUtjc,GACrD,IAAIqtK,EACJ,GAAIj5L,KAAKyxd,cAAgBvC,EAAU,CAC/B,IAAI3rZ,EAAa2rZ,EACb3rZ,GAAc33C,EAAOwtK,SACE,SAAnBp5L,KAAK43L,YACLr0H,EAAavjE,KAAKkxd,oBAAoB3tZ,IAE1CA,EAAayqE,GAAS4rD,gBAAgBr2H,EAAY33C,EAAO3oB,WAAYjD,KAAK43L,YAG1Er0H,EAAavjE,KAAKkxd,oBAAoB3tZ,GAE1C01H,EAAYj5L,KAAK0xd,iBAAiBnuZ,EAAY33C,QAG9CqtK,EAAYj5L,KAAK8lN,gBAAgBopQ,EAAUtjc,GAE/C,OAAOqtK,GAGX61R,EAAazzd,UAAUq2d,iBAAmB,SAAUnuZ,EAAY33C,GAC5D,IAAImqE,EAAS/1F,KAAKmxd,WAAW5tZ,EAAY33C,GACzC,OAAOoiH,GAASgsD,sBAAsBh6L,KAAKyxd,aAAcluZ,EAAY33C,EAAO3oB,WAAY8yF,IAE5F+4X,EAAazzd,UAAUg0d,WAAa,SAAU50Z,GAE1C,IAAK,IADD58C,GAASu6K,OAAQ,KAAMv6K,KAAM,MACxB1hB,EAAI,GAAKsB,EAAkBg9D,IAAUt+D,EAAIs+D,EAAMh+D,OAASN,IAC7D,IAAKsB,EAAkBg9D,EAAMt+D,IACzB,OAAO0hB,GAASu6K,cAAe39H,EAAMt+D,GAAI0hB,KAAM48C,EAAMt+D,IAG7D,OAAO0hB,GAEXixc,EAAazzd,UAAUi2d,eAAiB,WACpCtxd,KAAK6iG,KAAKxuF,cAAc3P,MAAM4xC,QAAU,QACxC,IAAIq7a,EAAU3xd,KAAK25L,cAAc,GAAG/0L,YACpC5E,KAAKqxd,mBAAmB3sd,MAAMsR,MAAQ27c,EAAQzkd,WAAa,KAC3DjH,EAAkBjG,KAAKqxd,oBAAsB5uZ,OAAQ,KACrD,IAAImvZ,EAAU5xd,KAAKi5L,UAAUt2L,cAAc,IAAMgsd,GAAoB57X,OACrE/yF,KAAKqxd,mBAAmBrvd,UAAY4vd,EAAQ5vd,WAEhD8sd,EAAazzd,UAAU61d,oBAAsB,SAAU3tZ,GACnD,GAAIA,GAAiC,SAAnBvjE,KAAK43L,UAAsB,CACzC,IAAIi6R,EAAY7xd,KAAK4rB,OAAOa,KAAOzsB,KAAK4rB,OAAOa,KAAO,OACtD82C,EAAayqE,GAAS6pD,cAAct0H,EAAYyqE,GAAS2pD,WAAW33L,KAAK43L,UAAWi6R,IAExF,OAAOtuZ,GAKXurZ,EAAazzd,UAAUy2d,gBAAkB,SAAU90d,GAG/C,IAAK,IAFDiV,EACA8oD,EAAY/6D,KAAK2yO,WACZx2O,EAAI,EAAGA,EAAI4+D,EAAUt+D,OAAQN,IAClC,IAAKsB,EAAkBT,IAAU+9D,EAAU5+D,GAAG0W,aAAa,gBAAkB7V,EAAMkQ,WAAY,CAC3F+E,EAAQ9V,EACR,MAGR,OAAO8V,GAMX68c,EAAazzd,UAAUsY,cAAgB,SAAU3S,EAAS0F,GACtD,IAAIkvE,EAAMp1E,SAASiT,YAAY,cAC/BmiE,EAAIliE,UAAUhN,GAAM,GAAO,GAC3B1F,EAAQ2S,cAAciiE,IAK1Bk5Y,EAAazzd,UAAU02d,UAAY,WAC/B,IAAInmc,EAAS5rB,KAAK4rB,OACd5rB,KAAK4rB,OAAO5uB,QAAUgD,KAAK4rB,OAAOa,KAClCzsB,KAAK4rB,OAAOa,KAAOzsB,KAAK4rB,OAAO5uB,OAEzB4uB,EAAO5uB,OAAS4uB,EAAOa,KAC7BzsB,KAAK4rB,OAAO5uB,MAAQgD,KAAK4rB,OAAOa,KAE1BzsB,KAAK4rB,OAAO5uB,OAAUgD,KAAK4rB,OAAOa,OACxCzsB,KAAK4rB,OAAO5uB,MAAQgD,KAAK4rB,OAAOa,KAAO,SAM/Cqic,EAAazzd,UAAUi1d,UAAY,SAAU/sZ,EAAY33C,EAAQ8vC,GACzD17D,KAAK6iG,MACL7iG,KAAKwwd,YAAYjtZ,EAAY33C,EAAQ8vC,IAG7CozZ,EAAazzd,UAAU22d,gBAAkB,aAGzClD,EAAazzd,UAAU0nM,WAAa,WAEhC/iM,KAAK+rG,UAET+iX,EAAazzd,UAAU42d,iBAAmB,SAAU3nd,GAChDtK,KAAKswd,UAAUtwd,KAAKujE,aAExBurZ,EAAazzd,UAAU62d,iBAAmB,SAAU1od,EAAOijF,GAClDhvF,EAAkBgvF,EAAQ7gE,SAC3B5rB,KAAK+xd,YAET,IAAK,IAAIxuc,EAAI,EAAG/Z,EAAM/M,OAAS8mB,EAAGA,IAC1BkpE,EAAQjjF,EAAM+Z,KACdvjB,KAAKiyd,iBAAiBzod,EAAM+Z,KAQxCurc,EAAazzd,UAAUmsF,kBAAoB,SAAUiF,EAASC,GAC1D1sF,KAAKkyd,kBAAkB,QAAS,YAAa,aAAc,gBAAiBzlY,GAC5E,IAAK,IAAIruF,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKmvF,GAAUruF,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAE9D,OADWyE,EAAGzE,IAEV,IAAK,QACL,IAAK,YACL,IAAK,aACL,IAAK,eACD,MACJ,IAAK,YACD4B,KAAKyhH,eACL,MACJ,IAAK,UACDzhH,KAAK+1H,aACL,MACJ,IAAK,gBAED,GADA/1H,KAAKk6L,oBAAoBl6L,KAAK6iG,MAC1B7iG,KAAKi5L,WAAaj5L,KAAKqxd,mBAAoB,CAC3C,IAAIO,EAAU5xd,KAAKi5L,UAAUt2L,cAAc,IAAMgsd,GAAoB57X,OACrE/yF,KAAKqxd,mBAAmBrvd,UAAY4vd,EAAQ5vd,UAEhD,MACJ,IAAK,SACGhC,KAAK6iG,OAAUplG,EAAkBuC,KAAK25L,gBAAgD,IAA9B35L,KAAK25L,cAAcl9L,QAC3EuD,KAAK+vd,aAET,MACJ,IAAK,SACD/vd,KAAKgH,eAAgBy7D,OAAQgqB,EAAQhqB,SAAU,GAC/CziE,KAAKkrN,eAUrB4jQ,EAAazzd,UAAU0wG,OAAS,SAAUomX,GACtCnyd,KAAK6iG,KAAO1hG,EAAc,OAASkC,UAAWsrd,GAAoBv0b,QAAS32B,OAASutH,SAAY,OAChGhxH,KAAK6iG,KAAK/+F,UAAUM,IAAIuqd,GAAoB3zR,MAC5Ch7L,KAAK+xd,YACL,IAAIjnd,GAAgBI,SAAU,IAAKxF,SAAU,IAAMipd,GAAoB/9V,IACvE5wH,KAAKoyd,UAAYznd,EAAa3K,KAAK6iG,KAAM/3F,GACzC,IAAIioF,EAAQ/yF,KAAKgB,QAAQ2B,cAAc,mBAIvC,IAHI3C,KAAK4rB,OAAOwtK,SAAY37L,EAAkBs1F,IAC1CxtF,GAAanB,IAAIpE,KAAK6iG,KAAM,SAAU7iG,KAAKoxd,kBAAmBpxd,MAErC,iBAAzBA,KAAKu/B,gBAAoC,CACrCv/B,KAAKgB,QAAQ6R,aAAa,aAC1B7S,KAAK6iG,KAAKr/F,aAAa,WAAYxD,KAAKgB,QAAQ6R,aAAa,aAEjExO,GAAarE,KAAKgB,SAAU2td,GAAoB3zR,MAChDh7L,KAAKgB,QAAQ0D,MAAM4xC,QAAU,OAC7B,IAAI+7a,EAAiB7xd,SAASW,cAAc,OAC5CnB,KAAKgB,QAAQqT,cAAcnP,aAAamtd,EAAgBryd,KAAKgB,SAC7Dqxd,EAAe1wd,YAAY3B,KAAKgB,SAChCqxd,EAAe1wd,YAAY3B,KAAK6iG,MAEpC7iG,KAAKyhH,eACLzhH,KAAK+1H,aACAo8V,GACDnyd,KAAKmuG,cAQb2gX,EAAazzd,UAAUkkC,cAAgB,WACnC,MAAO,gBAOXuvb,EAAazzd,UAAUs3O,SAAW,WAC9B,OAAO3yO,KAAKi5L,UAAUz3L,iBAAiB,IAAMmtd,GAAoB/9V,KAUrEk+V,EAAazzd,UAAUipM,QAAU,SAAU7pI,EAAO63Z,GACzCtyd,KAAK6iG,MAAQ7iG,KAAK6iG,KAAKhnF,cAAgB7b,KAAKiwd,mBAC7Cjwd,KAAK+iM,aAET,IAAIwvR,EAAavyd,KAAK2yO,WAAWl2O,OAC7B+1d,EAAoBxyd,KAAK6iG,KAAKlgG,cAAc,IAAMgsd,GAAoBn/U,UAC1E/0E,EAASA,aAAiBj8D,MAAQi8D,GAASA,GAC3C,IAAIxoD,EACJA,EAASxU,EAAkB60d,IAAcA,EAAY,GAAKA,EAAYC,EAAa,EAAKA,EAAaD,EAGrG,IAAK,IAFD1mc,EAAS5rB,KAAK4rB,OACd+tK,KACKx9L,EAAI,EAAGA,EAAIs+D,EAAMh+D,OAAQN,IAAK,CACnC,IAAI0hB,EAAO48C,EAAMt+D,GACby0H,EAAKzvH,EAAc,MAAQkC,UAAWsrd,GAAoB/9V,GAAIttH,GAAI,cAAgBnH,IACtFy0H,EAAGptH,aAAa,aAAc3G,EAAS+uB,EAAO5uB,MAAO6gB,IACrD+yG,EAAGptH,aAAa,OAAQ,UACxBotH,EAAGjvH,YAAYnB,SAASw0C,eAAen4C,EAAS+uB,EAAOa,KAAM5O,KAC7D87K,EAAcn1L,KAAKosH,GACnB5wH,KAAKkvd,SAAS1qd,KAAKqZ,GACnB7d,KAAKyyd,yBAAyB7hW,EAAI/yG,GAEtC,GAAmB,IAAf00c,GAAoB90d,EAAkBuC,KAAK6iG,KAAKlgG,cAAc,OAC9D3C,KAAK6iG,KAAK7gG,UAAY,GACtBhC,KAAK6iG,KAAKlhG,YAAY3B,KAAKi5L,WAC3B7zL,EAAOu0L,EAAe35L,KAAKi5L,gBAG3B,IAAS98L,EAAI,EAAGA,EAAIs+D,EAAMh+D,OAAQN,IAAK,CAC/B6D,KAAK25L,cAAc1nL,GACnBjS,KAAK25L,cAAc1nL,GAAOxR,WAAWyE,aAAay0L,EAAcx9L,GAAI6D,KAAK25L,cAAc1nL,IAGvFjS,KAAKi5L,UAAUt3L,YAAYg4L,EAAcx9L,IAE7C,IAAIu2d,KAAYrxd,MAAMC,KAAKtB,KAAK25L,eAChC+4R,EAAOrqc,OAAOpW,EAAO,EAAG0nL,EAAcx9L,IACtC6D,KAAK25L,cAAgB+4R,EACrBzgd,GAAS,GAGbugd,GAAmC,IAAdF,IACrBtyd,KAAKgyd,mBAGblD,EAAazzd,UAAUq7M,oBAAsB,SAAUvvM,EAAQwrd,GAC3D,IAAIl7b,EAAOtwB,EAAO0L,aAAa,QAAU1L,EAAO0L,aAAa,QAAU1L,EAAO0L,aAAa,MAC3F8/c,EAAOnvd,aAAa,OAAQi0B,GAC5BtwB,EAAOuE,gBAAgB,QAEvB,IAAK,IADDhI,GAAc,WAAY,gBAAiB,QACtCvH,EAAI,EAAGA,EAAIuH,EAAWjH,OAAQN,IACnC,GAAKgL,EAAO0L,aAAanP,EAAWvH,IAApC,CAGA,IAAI2rJ,EAAO3gJ,EAAO0L,aAAanP,EAAWvH,IAC1Cw2d,EAAOnvd,aAAaE,EAAWvH,GAAI2rJ,GACnC3gJ,EAAOuE,gBAAgBhI,EAAWvH,MAG1C2yd,EAAazzd,UAAU6vN,UAAY,aAGnC4jQ,EAAazzd,UAAUo3d,yBAA2B,SAAU7hW,EAAI/yG,KAQhEixc,EAAazzd,UAAUu3d,eAAiB,SAAU51d,GAC9C,IAAKS,EAAkBuC,KAAKkvd,UAAW,CACnC,IAAIxod,EAAO1G,KAAKqvd,WAAWrvd,KAAKkvd,UAAU92R,OAC1C,GAAa,WAAT1xL,GAA8B,WAATA,GAA8B,YAATA,EAC1C,IAAK,IAAItI,EAAK,EAAGyE,EAAK7C,KAAKkvd,SAAU9wd,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAEvD,IAAKX,EADDogB,EAAOhb,EAAGzE,KACkByf,IAAS7gB,EACrC,OAAO6gB,OAKf,IAAK,IAAI5Z,EAAK,EAAGwG,EAAKzK,KAAKkvd,SAAUjrd,EAAKwG,EAAGhO,OAAQwH,IAAM,CACvD,IAAI4Z,EACJ,IAAKpgB,EADDogB,EAAOpT,EAAGxG,KACkBpH,EAAUmD,KAAK4rB,OAAO5uB,MAAQgD,KAAK4rB,OAAO5uB,MAAQ,QAAU6gB,KAAU7gB,EAClG,OAAO6gB,GAKvB,OAAO,MAOXixc,EAAazzd,UAAUiX,QAAU,WACzB9R,SAASuL,KAAK5H,SAASnE,KAAK6iG,QAC5Bt9F,GAAahB,OAAOvE,KAAK6iG,KAAM,SAAU7iG,KAAKoxd,mBACzC3zd,EAAkBuC,KAAKoyd,YACxBpyd,KAAKoyd,YAET/sd,EAAOrF,KAAK6iG,OAEhB1X,EAAO9vF,UAAUiX,QAAQhR,KAAKtB,OAGlC6qF,IACI9iF,GAAU0kB,KAAM,KAAMzvB,MAAO,KAAM02E,QAAS,KAAM0lH,QAAS,MAAQ8C,KACpE4yR,EAAazzd,UAAW,cAAU,GACrCwvF,IACI3jF,GAAS,IACV4nd,EAAazzd,UAAW,iBAAa,GACxCwvF,IACI3jF,GAAS,IACV4nd,EAAazzd,UAAW,yBAAqB,GAChDwvF,IACI3jF,EAAS,OACV4nd,EAAazzd,UAAW,oBAAgB,GAC3CwvF,IACI3jF,EAAS,OACV4nd,EAAazzd,UAAW,qBAAiB,GAC5CwvF,IACI3jF,EAAS,qBACV4nd,EAAazzd,UAAW,yBAAqB,GAChDwvF,IACI3jF,EAAS,uBACV4nd,EAAazzd,UAAW,6BAAyB,GACpDwvF,IACI3jF,EAAS,SACV4nd,EAAazzd,UAAW,iBAAa,GACxCwvF,IACI3jF,GAAS,IACV4nd,EAAazzd,UAAW,eAAW,GACtCwvF,IACI3jF,OACD4nd,EAAazzd,UAAW,kBAAc,GACzCwvF,IACI3jF,EAAS,OACV4nd,EAAazzd,UAAW,aAAS,GACpCwvF,IACI3jF,EAAS,MACV4nd,EAAazzd,UAAW,cAAU,GACrCwvF,IACI3jF,GAAS,IACV4nd,EAAazzd,UAAW,oBAAgB,GAC3CwvF,IACI/hF,KACDgmd,EAAazzd,UAAW,mBAAe,GAC1CwvF,IACI/hF,KACDgmd,EAAazzd,UAAW,sBAAkB,GAC7CwvF,IACI/hF,KACDgmd,EAAazzd,UAAW,qBAAiB,GAC5CwvF,IACI/hF,KACDgmd,EAAazzd,UAAW,cAAU,GACrCwvF,IACI/hF,KACDgmd,EAAazzd,UAAW,iBAAa,GACxCwvF,IACI/hF,KACDgmd,EAAazzd,UAAW,eAAW,GACtCwvF,IACI/hF,KACDgmd,EAAazzd,UAAW,iBAAa,GACxCyzd,EAAejkY,IACXzhF,GACD0ld,IAELvjX,ICz2BEjhB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAcrDi2b,IACP73R,KAAM,iBACNnuD,MAAO8hV,GAAoB9hV,MAC3B2C,SAAUm/U,GAAoBn/U,SAC9B/E,IAAKkkV,GAAoBlkV,IACzB7Z,GAAI+9V,GAAoB/9V,GACxB4qE,QAASmzR,GAAoBzwW,SAC7B1sF,KAAMm9b,GAAoB3zR,KAC1B94L,MAAOysd,GAAoBzsd,MAC3B4P,MAAO,gBACPghd,WAAY,gBACZp9a,KAAM,gCACNq9a,cAAe,cACf/1d,MAAO,gBACPg2d,OAAQ,eACRv3R,SAAU,yCACVw3R,mBAAoB,0CACpBC,YAAa,iBACbC,aAAc,kBACdC,aAAc,sBACd9lR,OAAQ,eACR1oH,OAAQ,eACRg+D,UAAW,eACXywU,cAAe,oBACfC,gBAAiB,oBACjBC,YAAa,qBACbC,cAAe,gBAEf7+V,IACAl6G,UAAW,KACX0rG,YAaAstW,GAA8B,SAAUtoY,GAKxC,SAASsoY,EAAazgd,EAAShS,GAC3B,IAAIjB,EAAQorF,EAAO7pF,KAAKtB,KAAMgT,EAAShS,IAAYhB,KAEnD,OADAD,EAAMq7H,cAAgB,KACfr7H,EAohEX,OA3hEAuqF,GAAUmpY,EAActoY,GAcxBsoY,EAAap4d,UAAUoX,UAAY,WAC/BzS,KAAKgB,QAAQ0D,MAAM+I,QAAU,IAC7BzN,KAAK0zd,iBACLvoY,EAAO9vF,UAAUoX,UAAUnR,KAAKtB,MAChCA,KAAKinM,YAAcjnM,KAAKiS,MACxBjS,KAAK46D,YAAc,IAEvB64Z,EAAap4d,UAAUq4d,eAAiB,WACpC1zd,KAAK2sJ,aAAc,EACnB3sJ,KAAK2zd,iBAAkB,EACvB3zd,KAAK8hM,cAAe,EACpB9hM,KAAK4zd,eAAgB,EACrB5zd,KAAK6zd,iBAAkB,EACvB7zd,KAAKk1H,SAAU,EACfl1H,KAAK8zd,kBAAmB,EACxB9zd,KAAK+zd,iBAAkB,EACvB/zd,KAAKg0d,SAAU,EACfh0d,KAAK84D,YAAa,EAClB94D,KAAKk5M,cAAe,EACpBl5M,KAAKi0d,iBAAkB,EACvBj0d,KAAKk0d,YAAa,EAClBl0d,KAAKm0d,YAAc,GACnBn0d,KAAKo0d,aAAc,EACnBp0d,KAAKknN,eAAgB,EACrBlnN,KAAKq0d,UAAW,EAChBr0d,KAAKs0d,oBAAuBC,WAAW,GACvCv0d,KAAKw0d,oBACLx0d,KAAKy0d,gBAAiB,EACtBz0d,KAAK00d,iBAAkB,EACvB10d,KAAK20d,cAAe,EACpB30d,KAAK40d,gBAAiB,EACtB50d,KAAK60d,eAAgB,EACrB70d,KAAKmmN,cACDryG,IAAK,MACLC,MAAO,KACPI,OAAQ,KACRt1F,IAAK,KACLy1F,KAAM,KACN8xG,KAAM,KACNC,GAAI,KACJ3b,OAAQ,KACRC,SAAU,KACVjpM,KAAM,SACNO,MAAO,YACPs/E,KAAM,SACN1jD,MAAO,OAGf41b,EAAap4d,UAAU6vN,UAAY,WAC3BlrN,KAAKqnH,UACLrnH,KAAKqnH,SAASrgH,eAAgBy7D,OAAUziE,KAAKyiE,UAGrDgxZ,EAAap4d,UAAU0nM,WAAa,SAAUovR,GAC1ChnY,EAAO9vF,UAAU0wG,OAAOzqG,KAAKtB,KAAMmyd,GACnCnyd,KAAK4jN,kBAET6vQ,EAAap4d,UAAUy5d,iBAAmB,WACtC,GAA6B,iBAAzB90d,KAAKu/B,iBAA8D,SAAxBv/B,KAAK+mB,eAA2B,CAC3E,IAAIguc,EAAe/0d,KAAKy5H,aAAah/G,UAAU9X,cAAc,iBAC7B,KAA5B3C,KAAKg8D,aAAah/D,OAAgBgD,KAAK8hM,aACvCh+L,EAAUixd,GAAe,gBAAiB,mBAG1Cjxd,EAAUixd,GAAe,mBAAoB,kBAIzDtB,EAAap4d,UAAUkqB,aAAe,SAAU1kB,GAC5CA,EAAE2kB,iBACFxlB,KAAKgwD,MAAMnvD,GACXb,KAAKg1d,cAAcn0d,IAEvB4yd,EAAap4d,UAAU45d,kBAAoB,WAKvC,GAJAj1d,KAAK4/L,cACL5/L,KAAK+6M,kBACL/6M,KAAK85I,cACL95I,KAAK6iG,KAAK12F,UAAY,EACO,iBAAzBnM,KAAKu/B,gBAAoC,CACzC,IAAIqxF,EAAK5wH,KAAKi5L,UAAUt2L,cAAc,IAAMkwd,GAAoBjiW,IAC5DA,GACAA,EAAG9sH,UAAUM,IAAIyud,GAAoB3wd,SAIjDuxd,EAAap4d,UAAU20D,MAAQ,SAAUnvD,EAAGmrB,GACvB,eAAbA,GACAhsB,KAAKk1d,iBAET,IAAIvpc,EAAW3rB,KAAKy/L,cAChBz/L,KAAKo7H,gBAAkBzvG,EAAS3uB,QAG/BS,EAAkBuC,KAAK+hM,cAAiBtkM,EAAkBuC,KAAKinM,cAAgBjnM,KAAKinM,aAAe,GACpGjnM,KAAKg1d,cAAcn0d,IAG3B4yd,EAAap4d,UAAU65d,eAAiB,WAChCl1d,KAAK6iG,QACD7iG,KAAKm1d,gBAA2C,iBAAzBn1d,KAAKu/B,iBACxB9hC,EAAkBuC,KAAKs0d,mBAAmBr7R,YAAex7L,EAAkBuC,KAAKs0d,mBAAmBzxX,OACvG7iG,KAAK6wd,iBAAiB7wd,KAAKs0d,mBAAmBr7R,UAAUr3L,WAAU,GAAO5B,KAAKs0d,mBAAmBzxX,MAErG7iG,KAAKi1d,qBAETj1d,KAAKwzd,cAAcxxd,UAAY,GAC/BhC,KAAKg8D,aAAah/D,MAAQ,GAC1BgD,KAAKhD,MAAQ,KACbgD,KAAKq7D,SAAW,KAChBr7D,KAAKysB,KAAO,KACZzsB,KAAKiS,MAAQ,KACbjS,KAAKinM,YAAc,KACnBjnM,KAAK6d,KAAO,KACZ7d,KAAK46D,YAAc,GACf56D,KAAKo1d,mBACL/vd,EAAOrF,KAAKo1d,kBACZp1d,KAAKg8D,aAAat3D,MAAM4xC,QAAU,QAClCt2C,KAAKo1d,iBAAmB,MAE5Bp1d,KAAKoqN,aAAa,KAAM,MACxBpqN,KAAKy0d,gBAAiB,EACtBz0d,KAAKg1H,mBAETy+V,EAAap4d,UAAUg6d,kBAAoB,WACvC,GAAI/2d,OAAOhB,KAAK0C,KAAK81E,gBAAgBr5E,OACjC,IAAK,IAAI2B,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAK0C,KAAK81E,gBAAiB13E,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC1E,IAAI+3E,EAAWtzE,EAAGzE,GAClB,GAAiB,UAAb+3E,EACAn2E,KAAKy5H,aAAah/G,UAAU3W,UAAUM,IAAIpE,KAAK81E,eAAeK,SAE7D,GAAiB,aAAbA,GAA6D,aAAlCn2E,KAAK81E,eAAeK,GACpDn2E,KAAKilB,SAAU,EACfjlB,KAAKo2E,iBAEJ,GAAiB,aAAbD,GAA6D,aAAlCn2E,KAAK81E,eAAeK,GACpDn2E,KAAKq2E,UAAW,EAChBr2E,KAAK4rD,gBAEJ,GAAiB,UAAbuqB,EACLn2E,KAAKy5H,aAAah/G,UAAUjX,aAAa,QAASxD,KAAK81E,eAAeK,QAErE,EAEmB,OAAQ,YACX53E,QAAQ43E,IAAa,EAClCn2E,KAAKwzd,cAAchwd,aAAa2yE,EAAUn2E,KAAK81E,eAAeK,KAH/C,QAAS,KAAM,eAKb53E,QAAQ43E,IAAa,EACzB,gBAAbA,EAA6B/qD,GAAMsqG,eAAe11H,KAAK81E,eAAeK,GAAWn2E,KAAKg8D,cAClFh8D,KAAKgB,QAAQwC,aAAa2yE,EAAUn2E,KAAK81E,eAAeK,IAG5Dn2E,KAAKy5H,aAAah/G,UAAUjX,aAAa2yE,EAAUn2E,KAAK81E,eAAeK,OAM3Fs9Y,EAAap4d,UAAUi6d,kBAAoB,WACvC,OACIp/V,gBAAiB,QACjBvC,YAAa3zH,KAAKgB,QAAQsC,GAAK,WAC/BsO,KAAQ,UACR6hH,gBAAiB,OACjBD,gBAAiB,QACjBglB,wBAAyB,OACzBn8E,kBAAmBr8D,KAAKwzd,cAAclwd,KAG9Cmwd,EAAap4d,UAAUomH,aAAe,WAClCr2F,GAAMq2F,aAAazhH,KAAKkT,WAAYlT,KAAKg8D,aAAa3nD,gBAClDrU,KAAKqnH,WACLrnH,KAAKqnH,SAASn0G,UAAYlT,KAAKkT,UAC/BlT,KAAKqnH,SAASz7D,aAGtB6na,EAAap4d,UAAU+6E,UAAY,WAC/BhrD,GAAM2qG,WAAW/1H,KAAKilB,QAASjlB,KAAKg8D,cAChCh8D,KAAKilB,SACL5gB,GAAarE,KAAKy5H,aAAah/G,WAAYo4c,GAAoBr3R,SAC/Dx7L,KAAKg8D,aAAax4D,aAAa,gBAAiB,SAChDxD,KAAK6uH,gBAAgBrrH,aAAa,WAAYxD,KAAKipH,YAGnDjpH,KAAKu1d,YACL5xd,GAAU3D,KAAKy5H,aAAah/G,WAAYo4c,GAAoBr3R,SAC5Dx7L,KAAKg8D,aAAax4D,aAAa,gBAAiB,QAChDxD,KAAK6uH,gBAAgB5F,UAAY,IAMzCwqW,EAAap4d,UAAUmxG,eAAiB,WACpC,OAAOxsG,KAAKgtG,cAAc,WAG9BymX,EAAap4d,UAAUm6d,gBAAkB,SAAUx0d,GAClB,iBAAzBhB,KAAKu/B,kBACLv+B,EAAQioH,UAAY,IAG5BwqW,EAAap4d,UAAUwzH,cAAgB,WACnC,OAAO7uH,KAAKy5H,aAAah/G,WAE7Bg5c,EAAap4d,UAAUo6d,eAAiB,WACpC,MAAO,oBAEXhC,EAAap4d,UAAUq6d,iBAAmB,SAAUjpc,GAChD,OAAOzsB,KAAK21d,kBAAkB31d,KAAKivd,eAAexic,KAEtDgnc,EAAap4d,UAAUs6d,kBAAoB,SAAU34d,GAGjD,IAAK,IAFD6gB,EAEKzf,EAAK,EAAGw3d,EADD51d,KAAK2yO,WACqBv0O,EAAKw3d,EAAYn5d,OAAQ2B,IAAM,CACrE,IAAIwpM,EAASguR,EAAYx3d,GACzB,GAAI4B,KAAKymN,kBAAkB7e,EAAO/0L,aAAa,iBAAmB7V,EAAO,CACrE6gB,EAAO+pL,EACP,OAGR,OAAO/pL,GAGX41c,EAAap4d,UAAU2rN,UAAY,WAC/BhnN,KAAK+iM,aACD/iM,KAAKujE,sBAAsBC,GAC3BxjE,KAAK8zd,kBAAmB,EAGxB9zd,KAAK61d,gBAGbpC,EAAap4d,UAAUw6d,aAAe,WAClC,GAAKp4d,EAAkBuC,KAAKhD,OAGvB,GAAIgD,KAAKysB,MAAQhvB,EAAkBuC,KAAKhD,OAAQ,CACjD,IAAIgE,EAAUhB,KAAK01d,iBAAiB11d,KAAKysB,MACzC,GAAIhvB,EAAkBuD,GAElB,YADAhB,KAAKgH,eAAgBylB,KAAM,OAI3BzsB,KAAKoqN,aAAappN,EAAS,WAI/BhB,KAAKoqN,aAAapqN,KAAK25L,cAAc35L,KAAKinM,aAAc,WAbxDjnM,KAAKoqN,aAAapqN,KAAK21d,kBAAkB31d,KAAKhD,OAAQ,MAe1DgD,KAAK81d,iBACL1qc,GAAMhuB,SAAS4C,KAAKysB,KAAMzsB,KAAKg8D,aAAch8D,KAAK+mB,eAAgB/mB,KAAKolB,kBAE3Equc,EAAap4d,UAAU06d,OAAS,SAAUl1d,GACtC,GAAKb,KAAKilB,QAAV,CAGA,IAAI9d,EAAStG,EAAEisI,cACX1+B,EAAgBvtG,EAAEsG,OAClB+/M,EAAgBlnN,KAAKknN,cACzBlnN,KAAKknN,eAAgB,GAEjBA,GAAkBlnN,KAAK2zd,kBAAmB3zd,KAAK2sJ,aAAiBlvJ,EAAkB2wG,KACjFpuG,KAAKg2d,mBAAoBv4d,EAAkB0J,IAS5CnH,KAAK2zd,kBAAqBl2d,EAAkBuC,KAAKqnH,WAC9C7mH,SAASuL,KAAK5H,SAASnE,KAAKqnH,SAASrmH,UACxChB,KAAKqnH,SAASrmH,QAAQ8C,UAAUK,SAAS0ud,GAAoBO,cACxDpzd,KAAK6zd,kBACN7zd,KAAK2zd,iBAAkB,KAIA,iBAAzB3zd,KAAKu/B,kBAAuCv/B,KAAK4zd,eAAiBzsd,IAAWnH,KAAKg8D,eAChFx7D,SAASmlH,gBAAkBx+G,GAAW3G,SAASmlH,gBAAkBx+G,GACjEinG,EAActqG,UAAUK,SAAS0ud,GAAoBC,cACxDr1d,EAAkB0J,IAAoC,iBAAzBnH,KAAKu/B,iBAAsCv/B,KAAKm1d,gBAC1E/mX,IAAkBpuG,KAAKy5H,aAAah/G,WAAuC,iBAAzBza,KAAKu/B,kBAC1Dv/B,KAAKy5H,aAAah/G,UAAUtW,SAASgD,IAAWnH,KAAKq0d,YACtDr0d,KAAK2zd,kBAAkB3zd,KAAK2sJ,YAC5B3sJ,KAAKi2d,iBACLj2d,KAAKq0d,UAAW,IAEhBr0d,KAAK4wd,aAAgB5wd,KAAK2sJ,aAAgB3sJ,KAAKknN,gBAC/ClnN,KAAK4vT,UAAW,EAChB5vT,KAAK6zd,iBAAkB,IA5BM,iBAAzB7zd,KAAKu/B,iBAAsCv/B,KAAKm1d,gBAAkBn1d,KAAK2sJ,YACvE3sJ,KAAKkzd,YAAYhxd,QAGjBlC,KAAK6uH,gBAAgB3sH,UA2BjCuxd,EAAap4d,UAAU46d,eAAiB,WACpCj2d,KAAK8hM,cAAe,EACpB9hM,KAAK06H,WACL16H,KAAKk2d,cAETzC,EAAap4d,UAAU66d,WAAa,WAC3Bl2d,KAAKilB,UAGNjlB,KAAK84D,aACL94D,KAAKy0d,gBAAiB,EACtBz0d,KAAKg1d,cAAc,OAEvBh1d,KAAK80d,mBACL90d,KAAK2T,cAAc3T,KAAKwzd,cAAe,UACV,iBAAzBxzd,KAAKu/B,iBAA+D,UAAzBv/B,KAAKgB,QAAQgC,SACxDhD,KAAK2T,cAAc3T,KAAKg8D,aAAc,QAEtCh8D,KAAKy5H,aAAan0G,aAClB3hB,GAAU3D,KAAKy5H,aAAan0G,aAAcutc,GAAoBQ,eAElErzd,KAAKwmB,QAAQ,UAEjBitc,EAAap4d,UAAU86d,QAAU,WACxBn2d,KAAK8hM,eACN9hM,KAAK8hM,cAAe,EACpB9hM,KAAKwmB,QAAQ,UAEjBxmB,KAAKg1H,mBAETy+V,EAAap4d,UAAU+6d,kBAAoB,WACvCp2d,KAAKhD,MAAQ,MAEjBy2d,EAAap4d,UAAUg7d,UAAY,WAC/B9wd,GAAanB,IAAIpE,KAAKy5H,aAAah/G,UAAW,YAAaza,KAAKs2d,cAAet2d,MAC/EuF,GAAanB,IAAIpE,KAAKy5H,aAAah/G,UAAW,QAASza,KAAKy6H,QAASz6H,MACrEuF,GAAanB,IAAIpE,KAAKy5H,aAAah/G,UAAW,WAAYza,KAAKmtL,SAAUntL,MACzE,IAAI+xI,EAAclsI,EAAQ7F,KAAKg8D,aAAc,QACzC+1E,GACAxsI,GAAanB,IAAI2tI,EAAa,QAAS/xI,KAAKo2d,kBAAmBp2d,MAEnEA,KAAKu2d,mBAET9C,EAAap4d,UAAUk7d,gBAAkB,WACrChxd,GAAanB,IAAIpE,KAAK6uH,gBAAiB,OAAQ7uH,KAAK+1d,OAAQ/1d,MACvDwL,GAAQkb,WACT1mB,KAAK+5I,eAAiB,IAAI3jC,GAAep2G,KAAK6uH,iBAC1C3X,UAAWl3G,KAAKg6I,iBAAiB1+I,KAAK0E,MAAO42G,WAAY52G,KAAKmmN,aAAct2I,UAAW,aAG/F7vE,KAAKklB,kBAETuuc,EAAap4d,UAAU6pB,eAAiB,WAChCllB,KAAKolB,iBACL7f,GAAanB,IAAIpE,KAAKy5H,aAAan0G,YAAa,YAAatlB,KAAKulB,aAAcvlB,OAGxFyzd,EAAap4d,UAAUm7d,kBAAoB,WACvCjxd,GAAahB,OAAOvE,KAAK6uH,gBAAiB,OAAQ7uH,KAAK+1d,QAClDvqd,GAAQkb,UACT1mB,KAAK+5I,eAAeznI,UAEpBtS,KAAKolB,iBACL7f,GAAahB,OAAOvE,KAAKy5H,aAAan0G,YAAa,YAAatlB,KAAKulB,eAG7Ekuc,EAAap4d,UAAU25H,gBAAkB,WACjCh1H,KAAKolB,kBAC2B,KAA5BplB,KAAKg8D,aAAah/D,MAClBqH,GAAarE,KAAKy5H,aAAan0G,aAAcutc,GAAoBQ,eAGjE1vd,GAAU3D,KAAKy5H,aAAan0G,aAAcutc,GAAoBQ,iBAO1EI,EAAap4d,UAAUuoN,eAAiB,WACpCr+M,GAAanB,IAAIpE,KAAK6iG,KAAM,QAAS7iG,KAAKkjN,aAAcljN,MACxDuF,GAAanB,IAAIpE,KAAK6iG,KAAM,YAAa7iG,KAAKqjN,YAAarjN,MAC3DuF,GAAanB,IAAIpE,KAAK6iG,KAAM,WAAY7iG,KAAKsjN,aAActjN,OAG/Dyzd,EAAap4d,UAAU8xL,SAAW,SAAUtsL,GACrB,KAAfA,EAAE+1N,UAAkC,KAAf/1N,EAAE+1N,gBACLz7N,IAAd6E,KAAK6iG,MACL7iG,KAAK+iM,aAET/iM,KAAKy2d,eAAiB51d,EACjBb,KAAK4wd,aAAgBnzd,EAAkBuC,KAAK6iG,KAAKlgG,cAAc,QAChE3C,KAAKw6D,kBAAkB35D,KAInC4yd,EAAap4d,UAAU6nN,aAAe,SAAUriN,GAC5C,IAAIsG,EAAStG,EAAEsG,OAEXypH,GADYzpH,EAAOrD,UACd+B,EAAQsB,EAAQ,IAAMwnd,GAAoB/9V,KACnD,GAAK5wH,KAAKqyH,UAAUzB,GAIpB,GADA5wH,KAAKoqN,aAAax5F,EAAI/vH,GAClB2K,GAAQkb,UAAY1mB,KAAKg2d,iBACzBnpX,QAAQ6yF,WAEP,CAED1/L,KAAKwwH,WADO,OAIpBijW,EAAap4d,UAAUgoN,YAAc,SAAUxiN,GAC3C,IAAI6pN,EAAY7kN,EAAQhF,EAAEsG,OAAQ,IAAMwnd,GAAoB/9V,IAC5D5wH,KAAK2qN,SAASD,IAGlB+oQ,EAAap4d,UAAUsvN,SAAW,SAAU/5F,GACpC5wH,KAAKilB,SAAWjlB,KAAKqyH,UAAUzB,KAAQA,EAAG9sH,UAAUK,SAASwqd,GAAoB9hV,SACjF7sI,KAAK4/L,cACLj8L,GAAUitH,GAAK+9V,GAAoB9hV,SAI3C4mV,EAAap4d,UAAUioN,aAAe,SAAUziN,GAC5Cb,KAAK4/L,eAGT6zR,EAAap4d,UAAUukM,YAAc,WACjC,IAAIusB,EAAcnsN,KAAK6iG,KAAKrhG,iBAAiB,IAAMmtd,GAAoB9hV,OACnEs/E,GAAeA,EAAY1vN,QAC3B4H,EAAY8nN,EAAawiQ,GAAoB9hV,QAIrD4mV,EAAap4d,UAAUg3H,UAAY,SAAUzB,GACzC,OAAQA,GAAMA,EAAG7K,aAAa,SAAuC,WAA5B6K,EAAG/9G,aAAa,SAG7D4gd,EAAap4d,UAAUm/D,kBAAoB,SAAU35D,GACjD,GAAIb,KAAK25L,cAAcl9L,OAAS,EAAG,CAC/B,IAAIm0H,EAAKp2D,GAAkB35D,EAAE+1N,SAAU52N,KAAK25L,cAAe35L,KAAKinM,aAAa,GACxExpM,EAAkBmzH,KACnB5wH,KAAKoqN,aAAax5F,EAAI/vH,GACtBb,KAAKskN,uBAKjBmvQ,EAAap4d,UAAUqnB,YAAc,WAC5BjlB,EAAkBuC,KAAK02d,kBACxBh0c,GAAY1iB,KAAK02d,gBACjBryd,GAAarE,KAAK02d,gBAAiB7D,GAAoBU,aACvDvzd,KAAK02d,eAAe10d,UAAY,GAChChC,KAAK02d,eAAiB,OAG9BjD,EAAap4d,UAAUsmB,YAAc,WAC7BlkB,EAAkBuC,KAAK02d,kBACvB12d,KAAK02d,eAAiBlrd,GAAQkb,WAAajpB,EAAkBuC,KAAK22d,iBAAmB32d,KAAK22d,eAAexwW,QAAQ,KAC5G1oH,EAAkBuC,KAAK22d,iBAAmB32d,KAAK22d,eAAexwW,QAAQ,IAAMnmH,KAAKy5H,aAAatT,QAAQ,GAC3GxiH,GAAU3D,KAAK02d,gBAAiB7D,GAAoBU,aACpD/4c,IACIrT,OAAQnH,KAAK02d,eACb1gd,MAAOxK,GAAQkb,SAAW,OAAS,SAEvC/E,GAAY3hB,KAAK02d,kBAGzBjD,EAAap4d,UAAU2+I,iBAAmB,SAAUn5I,GAChD,IAAI+1d,EAA6B,WAAb/1d,EAAEs1D,QAAoC,aAAbt1D,EAAEs1D,OAC3C0ga,EAA0C,iBAAzB72d,KAAKu/B,kBAAoD,SAAb1+B,EAAEs1D,QAAkC,QAAbt1D,EAAEs1D,QAC1Fn2D,KAAKo0d,YAA2B,WAAbvzd,EAAEs1D,OACrBn2D,KAAKq0d,UAAYr0d,KAAK2sJ,aAA4B,QAAb9rJ,EAAEs1D,OACvC,IAAIq0J,EAA6B,SAAb3pN,EAAEs1D,QAAkC,OAAbt1D,EAAEs1D,QAAgC,WAAbt1D,EAAEs1D,QAAoC,aAAbt1D,EAAEs1D,QACvE,SAAbt1D,EAAEs1D,QAAkC,QAAbt1D,EAAEs1D,OAChC,MAAKn2D,KAAK82d,iBAAmBF,GAAiBC,IAAoB72d,KAAK2sJ,eAGlE3sJ,KAAKq2E,SAAU,CAChB,IAAI0gZ,EAA2B,QAAbl2d,EAAEs1D,QAAiC,UAAbt1D,EAAEs1D,OAK1C,QAJkBh7D,IAAd6E,KAAK6iG,MAAuB7iG,KAAK4wd,aAAgBmG,GAA4B,WAAbl2d,EAAEs1D,SAClEn2D,KAAKy2d,eAAiB51d,EACtBb,KAAK+iM,cAELtlM,EAAkBuC,KAAK6iG,QAAWplG,EAAkBuC,KAAK25L,gBACzD6wB,GAA8C,IAA9BxqN,KAAK25L,cAAcl9L,QAAiBuD,KAAK4wd,YACzD,OAOJ,QALImG,GAAe/2d,KAAK2sJ,aAA4B,WAAb9rJ,EAAEs1D,SACrCt1D,EAAE2kB,iBAENxlB,KAAK84D,WAA0B,WAAbj4D,EAAEs1D,QAA8Bn2D,KAAK84D,WACvD94D,KAAKg0d,SAAWxpQ,GAA6B,WAAb3pN,EAAEs1D,QAA+Bn2D,KAAKg0d,QAC9Dnzd,EAAEs1D,QACN,IAAK,OACL,IAAK,KACD,IAAIu8D,EAAW1yH,KAAK6iG,KAAKlgG,cAAc,IAAMkwd,GAAoB3wd,OACjE,GAAIlC,KAAKg3d,kBAAkBtkW,GACvB1yH,KAAKoqN,aAAa13F,EAAU7xH,OAE3B,CACD,IAAIgrN,OAAW,EACX55M,EAAqB,SAAbpR,EAAEs1D,OAAoBn2D,KAAKinM,YAAc,EAAIjnM,KAAKinM,YAAc,EACxEvhL,EAAa,EACY,iBAAzB1lB,KAAKu/B,kBACL7Z,EAA0B,SAAb7kB,EAAEs1D,QAAqB14D,EAAkBuC,KAAKinM,aAAe,EAAIjnM,KAAK25L,cAAcl9L,OAAS,EAC1GwV,EAAQA,EAAQ,EAAIjS,KAAK25L,cAAcl9L,OAAS,EAAIwV,IAAUjS,KAAK25L,cAAcl9L,OAAS,EAAIwV,GAElG45M,EAAWpuN,EAAkBuC,KAAKinM,aAAejnM,KAAK25L,cAAcj0K,GAAc1lB,KAAK25L,cAAc1nL,GACrGjS,KAAKoqN,aAAayB,EAAUhrN,GAEhCA,EAAE2kB,iBACF,MACJ,IAAK,SACDxlB,KAAKi3d,gBAAgBj3d,KAAKinM,YAAcjnM,KAAKk3d,eAAgBr2d,GAC7DA,EAAE2kB,iBACF,MACJ,IAAK,WACDxlB,KAAKm3d,kBAAkBn3d,KAAKinM,YAAcjnM,KAAKk3d,eAAgBr2d,GAC/DA,EAAE2kB,iBACF,MACJ,IAAK,OACD,GAA6B,iBAAzBxlB,KAAKu/B,gBAAoC,CAEzC,GADA1+B,EAAE2kB,iBACuB,IAArBxlB,KAAKinM,YACL,OAEJjnM,KAAKoqN,aAAapqN,KAAK25L,cAAc,GAAI94L,GAE7C,MACJ,IAAK,MACD,GAA6B,iBAAzBb,KAAKu/B,gBAAoC,CACzC1+B,EAAE2kB,iBACF,IAAIw8K,EAAShiM,KAAK2yO,WAAWl2O,OAAS,EACtC,GAAIuD,KAAKinM,cAAgBjF,EACrB,OAEJhiM,KAAKoqN,aAAapqN,KAAK25L,cAAcqI,GAASnhM,GAElD,MACJ,IAAK,QAC4B,iBAAzBb,KAAKu/B,kBACAv/B,KAAK6zd,iBACN7zd,KAAKo3d,aAGb,MACJ,IAAK,OACDp3d,KAAKo3d,YACL,MACJ,IAAK,OACDp3d,KAAK20d,aAAe30d,KAAK2sJ,YACzB3sJ,KAAKu1d,YACLv1d,KAAKq3d,cAAcx2d,GACnB,MACJ,IAAK,QACDb,KAAKs3d,kBAAkBz2d,GACvB,MACJ,IAAK,SACL,IAAK,MACL,IAAK,QACGb,KAAK2sJ,cACL3sJ,KAAKu1d,YACLv1d,KAAKq3d,cAAcx2d,OAMvC4yd,EAAap4d,UAAUi8d,kBAAoB,SAAUz2d,GACjD,GAAIb,KAAK2sJ,YAAa,CAClB,IAAI/7B,EAAK5wH,KAAK6iG,KAAKlgG,cAAc,IAAMkwd,GAAoB3wd,OACvD0uH,IACA5wH,KAAKoqN,aAAax5F,EAAI/vH,GACtBb,KAAKg0d,SAAU,GAEfh0d,KAAK84D,aACL94D,KAAKy0d,gBAAiB,EACtBz0d,KAAKg1d,cAAcn0d,IAEvBb,KAAKu1d,YACLv1d,KAAKq3d,cAAcx2d,QAGnBb,KAAKo3d,aAGb3D,EAAap4d,UAAU27d,kBAAoB,SAAUh2d,GACjD,OAAQvD,EAAkBuD,IAE9Byyd,EAAap4d,UAAU67d,aAAe,WAClC,IAAIpyQ,EAAW9kN,KAAK6iG,KAAK/+F,UAAUK,SAASwqd,GAAoBC,QAAU,KACtEzhd,iBAAiBnN,KAAK2yO,WAAW,GAAI,MAAMvlO,iBAAiB,UAChE,OAAOf,KAAKoxB,MAAMz9B,KAAK6iG,KAAKj3F,wBAAwBmK,OAASgf,SAAS+vL,EAAU,MAEpF2uQ,EAAap4d,UAAU47d,gBAAkB,SAAU7vV,EAAO9qI,GACtD,IAAI0nT,EAAe58K,GAAS,EAAIpnI,KAAK25L,cAAcvyD,EAAQ,GAAKpnI,KAAK25L,cAAc,GACnF35L,KAAKoqN,aAAa45F,EAAc1nT,IAGpCm3d,EAAap4d,UAAU87d,kBAAoB,SAAU/vV,EAAO9qI,GACxD,IAAIumG,EAAO7iG,KAAK2yO,WACZqxE,EAAe58K,GAASvkC,EAAKpmG,OAASuD,KAAK25L,cAAcvyD,EAAQ,GAAKpnI,KAAK25L,cAAc92F,EAAKpmG,OAAS,GAC3GuD,KAAKoqN,aAAa45F,EAAc1nT,IAGpCm3d,EAAap4d,UAAUk8d,YAAc,WACjChyd,GAAahB,OAAOvE,KAAKy5H,aAAah/G,UAAW,YAAaza,KAAKs2d,eACnE/wd,GAAahB,OAAOvE,KAAKy5H,aAAah/G,UAAW,WAAYza,KAAKmtL,UAClE5nL,GAAahB,OAAOvE,KAAKy5H,aAAah/G,UAAW,QAASza,KAAKy6H,SAC/D,IAAIsX,EAAclsI,EAAQ7F,KAAKg8D,aAAc,QACzC+1E,GACAxsI,GAAahB,OAAOwtI,EAAa,QAAS/xI,KAAKo2d,mBAEnDp2d,KAAKw2d,qBAKT/C,EAAap4d,UAAUwoN,iBAAmB,WACtCt+M,GAAahB,OAAOvE,KAAK6iG,KAAM,QAAS7iG,KAAKkjN,cAC7C39M,GAAahB,OAAOvE,KAAK6iG,KAAM,YAAa7iG,KAAKqjN,aACjD99M,GAAahB,OAAOvE,KAAK6iG,KAAM,WAAY7iG,KAAKsjN,eAGpDmwQ,EAAap4d,UAAUm8d,gBAAkB,SAAU32d,GAC/C,IAAIsG,EAAStG,EAAEsG,OACf,IAAO1J,EAAkBuC,KAAKqnH,WAAaxhH,EAAQsB,EAAQ,IAAMnH,KAAKqnH,SAASrmH,QAAQsC,KAClFtD,KAAKy5H,aAAah/G,UAAUtW,SAAStD,EAAEsG,QAYnCA,IAAWnH,KAAKg8D,cAAkBh8D,KAAKm1d,gBAAkBhud,IAAWnH,KAAKkzd,aAChD,aAAzBlzd,KAAKu/B,kBACLv/B,KAAKm1d,gBAAkB3pd,GAAQkb,UAAYvf,IAAWnH,KAAKy5H,aAAatT,QAAQ,KACrFnmH,KAAKknN,eAAiB17M,GAAQwiG,MAA8B,SAAtBxiG,GAAQmb,KAAK8Q,QAAqBj3B,SAASmlH,gBAAkB3lH,KAAK6uH,iBACpGruH,SAASmlH,gBAAkB3lH,KAAKkzd,aACpCryd,EAAE2kB,uBAhBF,GAAIxlB,KAAKy5H,aAAah/G,UAAU3W,UAAUK,SAAS0ud,GAAoBC,aAAe9yd,KAAK2sJ,YAAa,CACpG3sJ,KAAK2zd,iBAAkB,EACvB,IAAI/jK,EAAW5vT,KAAK4wd,YACpB5wd,KAAK8hM,cAAe,EACpB9hM,KAAKu1d,YACA3lK,IACD5vT,KAAKk2d,aACLl2d,KAAKy5H,aAAah/G,UAAU3W,UAAUS,OAAOsud,GAAoBC,eAYjFW,EAAap4d,UAAUo8d,kBAAoB,WACnCz3d,KAAK2zd,kBACL3zd,KAAKu1d,YACLv1d,KAAKk2d,aACLl2d,KAAKy5H,aAAah/G,UAAU3W,UAAUS,OAAOsud,GAAoBC,cAGzEW,EAAap4d,UAAUg8d,cAAgB,SAAUx2d,IACxCb,KAAKk1H,SAAWl1H,KAAKg2d,kBACtBh2d,KAAKy6H,WAGbg5V,EAAap4d,UAAUi7d,cAAgB,SAAUz1d,GAC7C,GAAgB,IAAZA,EAAE81G,OAA4B,IAAb91G,EAAEswH,SAGnBnxH,KAAK6uH,gBAAgB/qH,UAAUK,SAAS0ud,GAAoBr3R,UAAYx7L,KAAKy5H,aAAan0G,cAAgBzkB,EAAEsG,OAAhH,CAGA,IAAIA,EAAStG,EAAEsG,OAIf,GAHIA,IAAWnH,KAAKg8D,cAAkBh8D,KAAKm1d,gBAAkBhud,IAAWnH,KAAKkzd,aAAyC,aAAzBlzd,KAAKu/B,iBAC9F1+B,EAAE2kB,iBAEDxlB,KAAKq2E,SAoBNr2E,KAAKy6H,cApBW,CACZz6H,KAAK2sJ,aACL3sJ,KAAKu1d,YACDv1d,KAAKg2d,kBACLh2d,KAAKq3d,cAAcx2d,KAIvBb,KAAKy6H,UACLz6H,KAAK80d,mBACL90d,KAAK46D,YAAiD,KAAnC56D,KAAKg8D,aAAah/D,MAAMkT,OAAgB,KAAOlQ,KAAKg8D,aAAah/D,MACpFgD,KAAK00d,iBAAkB,EACvB10d,KAAKo3d,aAET,IAAI/+J,EAAUr4T,KACTA,KAAK60d,eACN10d,WAAW,WAAck4T,EAAQq/J,iBAAoB,QAOjEjE,EAAap4d,UAAUq8d,cAAgB,WACnC,GAAI13d,KAAK6iG,KAAM,CACX,IAAIo2F,EAAYj5L,KAAK6iG,KAAKlgG,cAAc,MACpCs2L,IACAA,EAAYA,EAAUr3L,UAAYq3L,EAAUr3L,WAAU,GAAQq3L,EAC9Dj5L,KAAKs0d,mBAAmBr7R,UAAYA,EACpCj5L,KAAK60d,eAAgB,KAIjCpB,EAAap4d,UAAUs8d,mBAAqB,SAAU/mW,EAAI/vH,EAAG+2d,GACzD53d,KAAK+6M,kBACLnqF,EAAG9sH,UAAUM,IAAIuqd,GAAoBn/U,UACrCxvI,KAAK4/L,cACL,IAAI5iM,EAAQgD,KAAKymN,kBAAkB71F,EAAG/9G,aAAa,eAGnD,GAFA7S,KAAK6d,KAAO+yG,EACZ5wH,KAAKq7D,SAAWr7D,KAAK4yd,eAAe51d,IAC/BgD,KAAKk1H,UAAY0iW,EAAe,CACjC,IAAIn9Z,EAAQz6D,KAAK63d,gBACjB73d,KAAK84D,YAAa,EAClB,IAAIvrD,GACA1M,EAAGA,EACHgd,KAAM7d,KAAK6d,KACXw9C,SAAUZ,EACVqnI,eAAcjhM,EACdg4B,QAAQ,GAGZ,GADA74B,KAAKwmB,QAAQ,SAAUjZ,GACnBA,EAAUsrB,OACV,OAAO,EAGf,IAAIi/b,EAAc93d,KAAK6iG,KAAKlgG,cAAc,IAAMgsd,GAAoBzsd,OAMpE,OALI41d,GACAzzd,GAAayzd,GAAcnJ,GAAoBzsd,OAEnD0uH,EAAGptH,aAAa,gBAAiB,QACjCxD,KAAKinM,YAAcjnM,KAAK8xd,gBAAgB90d,IACjC,GAEXy2d,EAAap4d,UAAU08d,WAAa,SAAUnnW,GACtC5wH,KAAKqyH,UAAUzB,KAAQA,EAAG9sH,UAAUK,SAASwqd,GAAoBn/U,YACjExvI,KAAK+6M,kBACLnqF,EAAG9sH,UAAUM,IAAIuqd,GAAoBn/U,UACrCxvI,KAAK4/L,cACLhvE,EAAGptH,aAAa,gBAAiB,UAGzCiwd,EAAap4d,UAAU+B,SAAW,SAAUyD,GACxC,IAAI8qB,EAAW3rB,KAAKy/L,cAOpB,OANuB,OAAnB9zK,EAAS3uB,MACTouB,GAAMhuB,SAAS,KAAM4C,KAAKg8D,aAAch8D,KAAK+mB,eAAgB/mB,KAAKolB,iBAGlEgG,GAAMhuB,SAASuuB,EAASc,KAAMzsB,KAAKg8D,aAAch8D,KAAK+mB,eAAgB/mB,KAAKolB,iBAE3EplB,KAAKo7H,gBAAkBzvG,EAAS3uB,OAChCgD,KAAK84D,YAAa,GACX,IAGP94D,KAAK84D,YAAc94D,KAAKk1H,QACxBl1H,KAAKy0d,gBAAiB,EACO,iBAAzBz0d,KAAKu/B,iBACLv/B,KAAKg1H,mBAEF,IAGfy+V,EAAap4d,UAAU+uN,aAAe,SAAUx5F,EAAI/vH,GAChD,GAAIb,KAAKqyH,UAAUzB,KAAQA,EAAG9sH,UAAUK,SAASwqd,GAAoBn/U,UAAW,CAC5ExvI,KAAKg4d,iBAAqBv6d,EAAkBuC,KAAKq7D,UAA6B,KAAhBr7D,KAAKq7D,SAEnE,GADiBr7D,KAAK23d,mBAAmB/mW,EAAI/vH,GAAG,GAE5C,OAGJb,KAAK6iG,MACL7iG,KAAK4/L,cAET5/L,KAAKi4d,mBAAuBx6d,EAAkBuC,KAAK+hM,YAAiC,KAAlB/hM,KAAK+hM,WACvE/hM,KAAK+hM,WAAanxE,EACd5wH,KAAK5C,SAASyD,KAGdb,KAAKk4d,eAAmC,OAAlBl4d,KAAKq7D,SAC3Br7D,KAAKm4d,mBAEAn4d,KAAKg8D,aAAa6rI,kBAAoB7nM,KAAKo1d,mBAChD/vd,EAAOrF,KAAKo1d,kBACZp1d,KAAKg8D,aAAat3D,MAAM4xC,QAAU,SAElCt2C,KAAK2sJ,cACLjpJ,EAAW1D,KAAK6uH,iBAAmB2pB,wBAAyBx4I,KAAK+hM,WAAa/hM,KAAK+hM,WAAWz+L,GAAK,OAC/FtD,KAAKg2d,kBACLtyd,EAAW1D,KAAKkzd,aAAe16U,wBAAyBx4I,KAAK+hM,WAAa/hM,KAAK+hM,WAAWz+L,GAAK,UAGjGtD,KAAK2sJ,cAAgBlvJ,EAAkBmzH,IAAS5wH,KAAK2sJ,cAAgBlvJ,EAAkBoD,KAC7E,YAAXA,EAAE6F,MAAiC,YAAX7F,EAAE6F,MAAmC,UAAb7F,EAAEs1D,WACnDn2D,KAAKy0d,gBAAiB,EACtBz0d,KAAKg1d,cAAcn0d,KAEnBb,KAAK2sJ,aAAgBlvJ,EAAkBuC,KAAK+hM,aAAiC,OAAlB/hM,KAAKq7D,UAAuBx6D,GAAgB,UAAXA,EAAE6F,MAC9F1G,KAAKskN,kBAAkBzjN,KAG/B4yd,EAAap4d,UAAU88d,iBAAmB,WAEjCn4d,KAAKo1d,mBACNp1d,KAAKo1d,iBAAmBj0d,EAAc,QAAUkC,UAAWwvd,GAAoB71d,QAC/EgD,KAAKg8D,aAAa3nD,cAAcnP,aAAalF,KAAKo1d,iBAAkBp1d,KAAKg8D,cACzEh8D,KAAKg8D,aAAat3D,MAAM4xC,QAAU,QAEtCt2C,KAAKo1d,iBAAiBpzd,UAAY,GAElC,IAAK,IAAI5D,EAAK,EAAGyE,EADAmM,GAAQhP,KAAKk4d,cACRvjb,CAAe30C,KAAKq7D,UAAWj9D,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvE,IAAIyf,EAAOhb,EAAGzE,GACd4B,KAAKo1d,iBAAiBzzd,YAAYkc,KAG1C41c,EAAap4d,UAAU0/M,gBAAkB,WACrC,IAAIzoJ,EAAgBtyD,KAAK6iG,KAAKrhG,iBAAiB,IAAMmtd,GAAoBn/U,UACrEl9E,EAAc71D,SACd4H,EAAYiuD,EAAeq8Z,GAAoBn/U,UAC/Cl9E,EAAc,GAAG5mD,gBAAgB,mBAIzC+nd,EAAap4d,UAAUokM,YAAc,WACjC,IAGIwlK,EACAmzH,EAJAxsc,EAAS5rB,KAAK4rB,OACdD,EAAW,KAIVluB,EAHLkuB,EAAW3rB,KAAKq7D,YAIZ4pS,EAAYpoW,EAAS+uB,EAAO5uB,MAAO2uB,GACnCysc,EAAWv7d,EAAS+uB,EAAOa,KAAMd,IAMrC,OAAS3uB,MAJKS,EAAkBkuB,IAC3BxuB,EAAY8nW,GAAyBt5U,EAAZs5U,EAGPx4U,KAFVhvB,EAAkBkuB,IAC1BxuB,EAAY8nW,GAAwBt5U,EAAXysc,IAMlC3E,EAAap4d,UAAU25d,cAAgB,SAAU9iR,GAC7C,IAAIvmL,EAAW3rB,KAAKy/L,cAChBxtL,EAAQjS,KAAKy0d,eAAiB,KAAOz0d,KAAKinM,YAC9CjnM,KAAKgH,eAAgBhK,MAAS2uB,EAAS3uB,MAAOiV,MAASA,EAAOwa,KAAQd,EAASc,OAAQ,GACvFzsB,KAAKq4d,kBAAkBnmR,IAG3BuhR,EAAap4d,UAAUw8d,cAAgB,WAmBnC,MAjB6B,iBAAlB73d,KAAKq7D,UACa,kBAAlBr7D,KAAKq7D,UACa,iBAAlBr7D,KAAKq7D,SACJ/8D,OAAOg6d,qBACXt7d,OACIA,MAAOgD,KAAKq7D,SACZ1zD,YAAY,GAEhB8kB,MACIzvB,MAAOgD,KAAKq7D,SACZ1zD,YAAY,KAKZ3H,KAAKq7D,UAIrBo4Z,EAAap4d,UAAUg9d,kBAAoB,SAAUnmR,GAKjD,GAJAlyM,KAAK84D,YAAa,EAClB94D,KAAKo7H,cAAgBp7H,KAAKhD,MAC1BgD,KAAKinM,YAAcjnM,KAAKiS,MACxBjS,KAAKm0d,YAAe12d,EAAkBuC,KAAKysB,MAAoB,GAAZzsB,KAAKysB,MACnDzsB,KAAKk1H,QAAS,CACf,IAAIz6D,EAAQz6D,KAAK63d,gBACbU,OAAW,EAIXA,EAHiC,iBAA1Bv4d,KAAKg4d,kBACqB,kBAA1Bh4d,KAAKg4d,kBACqB,iBAA1Bh4d,KAAKg4d,iBACD15d,OAAOg6d,qBACdt7d,OACIA,MAAOgD,KAAKg4d,iBACZrwd,YAAY,GAEhB8kB,MACIzvB,MAAOgD,KAAKg4d,iBACZrwd,YAAY,KAKT3H,KAAKg4d,iBAEpBh4d,KAAK81d,iBACL,IAAIvod,GACA1M,EAAGqxM,EACHr0L,KAAM7d,KAAK6d,KACXw9C,SAAUZ,EACVupP,aAAchkT,KAAKi4d,mBACnBD,iBAAkBO,EAClBz2R,eAAcoQ,EACdl1M,MAAOgD,KAAKhD,MACZgE,QAAShB,KAAKgB,SAElBhB,KAAKwmB,QAAQ,SAAUjZ,KAG/Bkmd,EAAap4d,UAAUy6d,eAAiB,WACpC,GAAKr4d,EAAkBuC,KAAKhD,OAMxBgD,KAAKwzd,cAAcxxd,UAAY,OANC,CAChChC,KAAKwzd,cAAcxxd,UAAY,oBAAsBhC,KAAKysB,KAAO,YAC3CzsB,KAAKwzd,cAAc7wd,cAAc,UACvCa,aAAa,QAASxD,KAAKhD,MAAMkQ,cASzDumd,EAAap4d,UAAUm9d,WAAa,SAAU33d,GAE1C,GADAb,KAAKk0d,WAA2B,KAAdrzd,EAAEinB,SAAgC,KAAdjnB,EAAEinB,SAAkB9nB,KAAKk0d,WAC3Dl0d,KAAKk0d,WAEL,OADAl0d,KAAKk0d,YAAa,EACVrzd,EAAEinB,SACN,KAAK,GACL,KAAK,GAC4B,iBAAzB9nB,KAAKu/B,iBAAuCv/B,KAAK2sJ,aAAgB3sJ,KAAK20d,cAAiB30d,KAAK4wd,YAK5F5wd,KAAKi0d,iBAAkB,GAJvBj0d,KAAKi0d,iBAAkB,EACvBj0d,KAAKy4d,YAAY53d,IAKrBb,KAAK20d,cAAe,EACpB9zd,EAAE2kB,iBACF,MACJ,KAAK,GACL,KAAK,EACDxlB,KAAKm0d,YAAcn0d,KAAKkzd,YAAYl2d,OAC/BgD,KAAK2sJ,aAAoC,KAArB3sJ,KAAKm0d,aAAsBn0d,KAAK2sJ,aAAe3sJ,KAAK46D,YAAYn+D,OAAS,GAC9FuD,KAAKi0d,iBAAkB,EACvBj0d,KAAKy4d,YAAY53d,IAES,KAArBb,KAAKm0d,cACVn0d,KAAKi1d,oBACLj1d,KAAKinM,YAAc,KACU,iBAAzBjnM,KAAKu/B,iBACLv/B,KAAKu1d,aAGb10d,EAAE2kB,iBACF,MACJ,QACIxlB,KAAKm0d,YAAcn0d,KAAKkzd,YAAYl2d,MACpCgD,KAAKi0d,iBAAkB,EACvBj0d,KAAKy4d,YAAY53d,KAKjC4yd,EAAap4d,UAAUq9d,aAAe,SAAU73d,GAC5C,OAAQA,EAAEinB,SACN,KAAK,GACD,MACJ,KAAK,GACL,KAAK,GACD9nB,KAAK46D,YAAc56D,KAAKkzd,YAAYl2d,MACpC6D,EAAE2kB,iBACF,MACJ,KAAK,EACGxlB,KAAK2sJ,aACL9rJ,EAAE2kB,iBAEN,MACJ,QACIxlB,KAAKw0d,iBAAmBx0d,KAAK24d,qBAC7B34d,KAAK46D,YAAc56D,KAAKkzd,YAAYl2d,QAIhDy2d,EAAap4d,UAAUu9d,oBAAsB,WACzC,GAAI54d,KAAK8hM,aAAc,CACnB,IAAIlyH,EAAY5vE,KAAK24d,qBACrB34d,KAAKg8D,aAAaj2C,kBAAkB6pD,EAAU/wD,IAAK+wD,EAAU/wD,OAGrE40c,EAAap4d,UAAUs9d,mBAAqB,WACxC,IAAI7md,EAAQ9R,KAAKg8D,aACjB,OAASz+D,MAAO8O,KAAKE,IAAIuF,EAAM6T,gBAAiB9G,IAAKxS,KAAKE,IAAIuF,EAAM+T,gBAExE4tc,EAAap4d,UAAUo9d,YAAc,SAAU53d,GAC3C,IAAId,EAAQC,KAGZ,GAFAA,KAAKg0d,SAAU,EACfh0d,KAAKinM,YAAc,KACfjnM,KAAKkzd,YAAY7+c,cAAc1R,cAAc,IAAMkwd,GAAoBjwU,WAAY,CAChE5iJ,KAAKkzd,YAAY7+c,cAAc1R,cAAc,IAAMkwd,GAAoBjwU,WAC7El+I,MAAMC,WAAwC,KAA3B3E,KAAKkzd,YAAYl2d,MAAe,SAAW,UAE/E,GAAIgD,KAAK64d,cAAe,CACpB,IAAIl8U,GACAm8U,sBAAsB,EACtBrsc,KAAMzsB,KAAKkzd,YAAYl2d,MACvB+7d,WAAY,SAAUx1Z,EAAY7H,EAAO9vC,GACjC+wH,EAAY9jH,SAGhB94B,EAAM60d,gBAAiB,EACvB70d,EAAMi5d,gBAAgBz1Z,EAAY7H,EAAO9vC,KAE7Cqtc,cAAep4d,EACfg4B,QAAQ,GAGZ,GADA74B,KAAKwmB,QAAQ,YAAam2H,GACtBA,EAAY9jH,OACZ,OAEJ,IAAK74B,KAAK40d,iBAAmBj4U,EAAYm8U,qBAAsB,CAC3D,IAAII,EAAcl5d,KAAK07D,MAAQ17D,KAAK07D,MAAMr8D,QAAU,IAAIgkE,GACpDghB,EAAWrkF,KAAKqvd,WAAWrvd,KAAKujE,YAAY60H,OAChD,IAAMp4L,KAAKujE,sBAAsBC,IAA6B,WAAb6gB,IAAsC,WAAbA,EAGrE,CACD,IAAIz4D,EAAS5rB,KAAK4rB,OAClBstc,EAAYr1Z,MAAOpmE,EAAkBmuB,EAAOa,MAAsB,GAAdb,EAAOa,KAAW,aAAczsB,KAAKkzd,YAAYl2d,OAAO,EAAMgD,KAAKmvJ,mBAJvH+pU,EAAYr1Z,MAAM,GAAI,aAAc7jE,KAAKkzd,YAAYl2d,OAAO,EAAMgD,KAAKmvJ,cAM3EnvJ,KAAKg5d,gBAAgBh5d,KAAKujE,WAAY21Z,EAAal5d,KAAK4rB,WAIpE6nc,EAAap4d,UAAU29d,gBAAkB,SAAUz1Z,EAAY7H,EAAO9vC,GAC7DnuB,EAAkBuC,KAAKkzd,eACxBlzd,KAAK6zd,iBAAkB,EACe,KAAlC7zd,KAAKkzd,YAAYl2d,MAAMkT,QACvBlQ,KAAKs0d,mBAAmBC,WAAY,EACpCv0d,KAAKg0d,SAAU,EACVv2d,EAAkBuC,KAAKs0d,mBAAmBr7R,YAAex7L,EAAkBuC,KAAKs0d,mBAAmBzxX,OACpG7iG,KAAK6wd,iBAAiB7wd,KAAKs0d,mBAAmBr7R,UAAWj5L,KAAKs0d,mBAAmBzxX,MAErF7iG,KAAKg0d,SAAU,EACVv2d,EAAkBuC,KAAKq7D,WAAsC,iBAAzBr7D,KAAKu/B,kBAC1Cv/B,KAAKm5d,iBACLn5d,KAAKskN,qBAETtkN,KAAK+zd,iBAAkB,IAGvB/zd,KAAK+zd,iBAAkB,EACvB/zd,KAAKswd,UAAU/sZ,EAAY33C,EAAQ8vC,MAI/C+3Z,EAAap4d,UAAU+9d,aAAe,SAAUznW,GAC5C,GAAI3xH,KAAK64d,cAAe,CACpB,IAAIxkd,EAAgBlT,EAAc,QAC9BkC,UAAWwvd,GAAoBM,eAEnCnzd,KAAKkzd,YAAc/xd,EAAc,SAC7BsC,OAASiD,KAAM,QACfrD,UAAWwvd,GAAoBK,cAEnClzd,KAAKgB,QAAQP,WAAWyE,aAAalF,KAAKkzd,YAAalzd,KAAKgB,SAC5D,IAAIy6L,GAAW,EAsCf,OArCIjwL,GAAQkb,WACR+0K,GAAW,GAEfz7L,KAAK22d,eAAiBvrc,GAAM2rG,aACxB/1H,QAAShB,KAAKkzd,YACd/sW,QAASs1E,GACJo3R,GAAoBp3R,SAAUo3R,GAAoBI,qBAAuBJ,GAAoBI,oBAClGhwd,YAAc6jB,YAAa9mB,KAAKq5d,wBAEpCj0d,GAAQpF,KAAK22d,eAAel8c,WAAYpG,GACxCxP,GAASwP,GAAgBs9G,GACzBjuH,EAAW1D,KAAKkzd,aACZh9V,gBAAiB,QACjBvC,YAAa3zH,KAAKgB,QAAQsC,GAAK,WAC/BsO,KAAQ,UACR4mI,wBAAyBx4I,KAAK+hM,WAAa/hM,KAAK+hM,WAAWz+L,GAAK,KAChEwf,aAAgB,MAChBC,YAAe,MACfC,eAAkB,MAClBC,WAAc,UAElBjjB,KAAKs5d,iBAAmBt5d,KAAKkzd,YAAY7+c,cAAc1R,cAAc,IAAMkwd,GAAoBjwU,YAC1Fp3I,GAAQkb,UAAY1mB,KAAKs5d,mBAC1B/zd,GAAanB,IAAIpE,KAAKs5d,iBAAkB,QAASt5d,KAAKq4I,UAAWr4I,MACjEA,KAAKs5d,iBAAiB50d,MAAMC,WAAa,UAExC6G,GAAQkb,WACT1mB,KAAKu5d,gBAAkB,IAAInjX,GAAep2G,KAAKkzd,aAC3Ch8W,UAAWl3G,KAAKg6I,iBAAiB1+I,KAAK0E,MACtC42G,WAAY52G,KAAKmmN,aACjBt2I,UAAW,aAGnBtqE,GAAanB,IAAIpE,KAAKkzd,YAAa,QAASlzd,KAAKw5d,QAASx5d,MAC1DuF,GAAanB,IAAIpE,KAAKkzd,YAAa,QAASlzd,KAAKw4d,WAAYx4d,MAC7DuF,GAAanB,IAAIpE,KAAKkzd,YAAa,UAAWlzd,KAAK04d,aAAc14d,MACjEuF,GAAanB,IAAIpE,KAAKkzd,YAAa,OAAQlzd,KAAK+1d,OAAQ/1d,MACjDA,KAAK22d,eAGZ,OAAOhiW,IAIf8+V,EAAap4d,UAAUm+d,QAAU,WAC7Bx5d,KAAKk0d,YAAa,GAEtBT,EAAap4d,UAAUy1d,gBAAkB,SAAUjwd,GAC/CsqF,EAAO9vF,UAAUy1d,gBAAgBxvd,KAAKtB,KAAMa,GACxCb,KAAK6zd,iBACL7zd,KAAK8qH,eAGb2oW,EAAap4d,UAAUw1d,iBAAmB,SAAU53R,EAAWp2F,EAAMhiG,EAAG0zd,GACpE,GAAIv0d,KAAK+zd,gBACL/zd,KAAK+zd,iBAAkB,OAG3B,GAAI/zd,KAAK4vT,SAAU,CACf,IAAI/tH,EAAe7hM,KAAK+hM,WAAa/hM,KAAK+hM,WAAWngM,WAAU,GAAQ,KACvEupF,EAAO9vF,UAAUw1d,iBAAiBvvd,KAAKtB,KAAMi5L,EAAWp2F,EAAMhiG,GAC1Db,KAAK4wd,cAAgBnzd,EAAkBuC,KAAKy2d,iBAAgD,YAA7Bz2d,KAAKy2d,eAAe/vd,OACnF1G,KAAK4wd,aAAc,EACnB5wd,KAAKg6I,iBAAiBh6I,KAAKy2d,gBAC3Bz2d,KAAKy2d,eAAiB,MAEtBz2d,KAAK4wd,cAAgBnzd,EAAkBuC,KAAKy2d,kBAC5Cz2d,KAAKw6D,kBAAkBx6D,KAAKy2d,gBAC5Bz2d,KAAKy2d,eAAiB,MAE1Bz2d,KAAK6iG,KAAK12F,UAAY,EACjB1O,EAAkBw7L,IACnBv1L,EAAWu1L,GAAa31L,GAAMtD,KAAKgB,QAAQsC,GAAK,WAAYsO,KAAQ,UAAWy8G,cAAe,UAE9FruH,KAAK8zd,mBACL9zd,KAAKk1H,SAAU,EACfl1H,KAAKinM,YAAcjnM,KAAKiS,MACxBjS,KAAK61d,eACL71d,KAAK8zd,kBAAmB,EACxB9zd,KAAKk1H,SAAU,GAEU,iBAAzBl1H,KAAKu/B,iBAAsCv/B,KAAK64d,gBAAkB74d,KAAKg0d,UAClEh0d,KAAKs0d,mBAAmBC,YAAgBv0d,KAAK40d,gBAC1C50d,KAAK4zd,iBACJ5zd,KAAKujE,sBAAsBC,KACvB/lE,EAAkBuC,KAAKujE,WAAW9mE,SAAsC,IAA3BuD,KAAKujE,WAAW9mE,WACtEuD,KAAKs0d,oBAAuBr7R,UAAWA,EAAUr3L,WAAU,GAAOihG,KAAMA,EAAM0xX,WAAW,IAE7Fv0d,KAAKy5d,WAAW52X,EAAMg/F,GACjBpkM,EAAkBuC,KAAKq7D,WACxBr7D,KAAKm5d,kBAGTn5d,KAAK6zd,iBACL7zd,KAAK8qH,gBAIjB2oW,EAAap4d,UAAUo+d,WAAa,SAAUvK,EAAUwK,GACpD,IAAI35d,EAAQC,KACZ,IAAKvC,EAAkBuC,KAAKq7D,YAAc59D,EAAkBi8d,GAAa,CACrE,IAAI9xc,EAAU5nB,KAAKy/L,cAAcziM,MACnBkyd,EAAS9yb,KAAK,SAAU5/B,GAClC,OAA0B,iBAATA,GAAqC,iBAATA,IAAsBA,IAASorB,GACvE/qB,EAASkD,EAAM6rB,OAAO5uB,MAAOR,KAAUorB,KAG5C5nB,KAAKskM,QAAQtkM,KAAKq7D,YAI9Bo4Z,EAAap4d,UAAUo3d,yBAA2B,SAAU7hW,EAAI/yG,GAC/B,iBAAzB7d,KAAKu/B,iBAAsCv/B,KAAKs0d,mBAAmBr7R,YACnEj5L,KAAKs0d,mBAAmBr7R,UAAUt3L,YAAYivH,EAAGhvH,WAAU,IACvD5B,KAAK64d,eACL74d,KAAKs0d,mBAAmBzxX,KAAKr+F,KAAKqZ,KAI9C41c,EAAap4d,UAAU89d,eAAiB,WACpC,IAAIn8d,EAAQgD,KAAKy/L,cAAcziM,MAC/BgD,KAAKinM,YAAcjnM,KAAK8xd,gBAAgB90d,GACxC,IAAIgE,EAAUhB,KAAK6iG,KAAKlgG,cAAc,gBAAkB3F,EAAQ,MAChEgD,KAAK+hM,WAAa/gM,EAClBhB,KAAK+3d,WAAW/2d,GAChBhB,KAAK85I,eAET25U,EAAap4d,UAAU22d,gBAAkB,WACrC,IAAInwR,EAAe7hM,KAAK6iG,KAAKlgG,cAAc,IAAMgsd,GAAoBn/U,UACjEqyD,GACA7hM,KAAKgH,eAAgBiL,MAASjS,KAAK8xd,gBAAgBjwR,EAAahvL,aAAa,iBAC7E7S,KAAKinM,YAAcjnM,KAAKiS,QAGxBjS,KAAK85I,cACL95I,KAAK6iG,KAAKlgG,cAAc,IAAMgsd,GAAoB/9V,IAAI9sH,UAAUM,IAAIyud,GAAoB3wd,SAGhGuxd,EAAap4d,UAAUy+I,YAAc,WACjC,IAAI6/U,EAAkB35d,KAAK6iG,KAAKrhG,iBAAiB,IAAMqxd,GAAoB3wd,OACvEy3d,GAAmBA,EAAgBl9d,QACnC4H,EAAYs1d,EAAiB9G,GAAoB3wd,QAIzDuxd,EAAap4d,UAAUyvH,YAAc,WACjC,GAAI9qH,KAAKqnH,UAAY7mH,SAASuL,KAAK5H,SAASnE,KAAKqnH,SAASrmH,SACtDhB,KAAK45d,mBADT,CAIA,IAAI35d,GAAS44B,QAAQ,GAErB,GADA74B,KAAKwmB,QAAQ,aAAcvmB,IACvBA,EAAK44B,OAAT,CAGA,IAAI44F,EAAWtwH,EAAc,OACzBmC,GAAItD,KAAKgB,QAAQsC,GAAK,SAAUD,UAAW,kBAAqC,MAAjBrD,KAAKiT,SAAmBjT,KAAKiT,SAAW,MAEvG4md,EAAY75d,KAAKo5d,aAAa3nW,GAWlC,GAVAzxH,KAAK4kN,WAAariN,EAAWvC,KAAK6nN,aAC9B7nN,KAAKq5L,gBACLr5L,KAAK85d,kBAAkBroW,GAE3BrsH,GAAQpF,KAAK6iG,MAAO4uB,GAChBzxH,KAAK6mH,gBACL7mH,KAAK+mH,kBAAkB0K,GAE3BjxH,SAASuL,KAAKpK,YAAY8vH,GAC1BA,EAAS/sH,MAAMC,WAAa,SACH,SAArB3E,KAAK6nN,YAAwB,CAM7B,GALA7nN,KAAK+5d,gBAAkB,EAClBt8d,EAAkBo8d,EAAUp/c,aAC7Bza,KAAK+5d,gBAAmBF,EAAUp/c,UAAuB,cAAE7O,wBAAwBmK,OACnF/V,KAAK4kN,YAAc7vL,SAAS/0B,KAAK4kN,WAAY,IAAO5kN,KAAoB,iBAAGkN,WAAa,MAExFlN,KAAKq5L,eAAgB,CACrB,IAAItjL,EAAS1J,KAAKoxB,MAAMz9B,KAAK4kF,OAAOh5E,wBAAwBmK,QAC5D/V,KAAK4kN,YAAc7vL,SAAS/0B,KAAK4kN,WAAY,KAAO7uM,EAAS/V,KAAK+5d,kBAAkB7sd,WAAa,KAErG,GAAIlN,KAAK6mH,eAAgB,CACjB9wG,EAAS1J,KAAKoxB,MAAMz9B,KAAKstM,OAAO1hM,wBAAwBmK,QAC5D/V,KAAK4kN,YAAc7vL,SAAS/0B,KAAK4kN,WAAY,KAAO7uM,EAAS/V,KAAK+5d,kBAAkB7sd,WAAa,KAErGlN,KAAK6iG,KAAKn+F,MAAM6uD,WAAax+B,SAAS/0B,KAAK4kN,WAAY,IAAM,GAAG13M,WAAa,KAC7EukH,EAAS/sH,MAAM6uD,UAAYhxD,EAAWvC,KAAK6nN,kBAG3Cp2F,EAAS/sH,MAAMqR,OAAS,OAE5B,IACIvJ,EADAs/M,EAAc,EAQlB,IANKruN,EAAkBuC,KAAK+hM,cAAiBtkM,EAAkBuC,KAAKinM,cAAgBjnM,KAAKinM,aAAe,EACpGjnM,KAAKskN,oBAGLtkN,KAAK6iG,KAAK12F,UAAY,EAEtBX,GAAQkb,WAAc1mB,KAAKm1d,iBAA4C,iBAAzBn1d,KAAKu/B,iBAClDv/B,KAAK00d,iBAA4C,aAAzB10d,KAAKu/B,iBAAmC,CACjEusL,EAAc9rN,KAAKg6d,eAAevoW,GAClC,IAAIs2F,EAAY/nN,KAAKgoN,cAAgBhoN,KAAK6iG,KAAO7iG,KAAK25L,cAAc,GACpEntL,IAASuoB,SAAS5nB,iBAAiB46M,GAAWE,WAAY,IACtDlzL,SAAS5nB,iBAAiBnN,KAAKg8D,cAAcmsJ,YAAa,IAC1DpzL,SAAS5nB,iBAAiBnN,KAAKg8D,aAAa3nD,eAAew0M,gBAAiB,KAEpF7oN,KAAKi6d,kBACLj6d,KAAKywH,YAAYgB,EAAUq6F,EAAat/M,GACxCxM,KAAKojH,eAAeqO,GAChBjmH,GAAQkb,WACR1mB,KAAKqnH,SAASrmH,QAAQ8C,UAAUM,IAAIyud,GAAoBG,SAC3B,iBAAzBhzd,KAAKu/B,iBAAgE,aAAzBv/B,KAAKu/B,kBAC7Cv/B,KAAKm1d,gBAAkBn1d,KAAK00d,mBAChC10d,KAAKqnH,SAAStD,WAAc3tG,EAAG,MAAOC,EAAG,QAEzCrW,KAAKg2d,mBACLh2d,KAAKqnH,SAASrmH,QAAQ8C,UAAUM,IAAIyud,GAAoBO,cACxDpzd,KAAKqnH,SAASnzG,UAAakC,EAAG,EAAGC,EAAG,GACpCrW,KAAKqnH,SAASz7D,WACdloD,EAAW1D,KAAKqnH,SAASrmH,SAAW0D,MAAO,2CAC3Cf,GAAUnD,SAASuL,KAAM/L,KAAKqnH,SAASrmH,SAAU6xd,GAAoBS,iBACrEtzd,KAAKk6d,uBACLl6d,KAAKm6d,gBAAkBN,EAAUp/c,UAAU9X,cAAc,gBACzD3C,KAAKs5d,iBAAmBO,EAAUp/c,UAAU9X,cAAc,IAAMkwd,GAAoBjwU,WACpFr9I,GAAanB,IAAIpE,KAAKm6d,gBAAiB,QAASn6d,KAAKo6d,gBAAiBp6d,MACtEuF,GAAanB,IAAIpE,KAAKs5d,iBAAkB,QAASt5d,KAAKq4I,UAAWr4I,QAGzEyxH,EAAS/sH,MAAMC,WAAa,UAC5BhB,GAAU8tH,GAAW,iBAErB,IAAK,IAAIrzH,EAAK,EAAGi8d,EADUr6d,KAAKqnH,SAAS7tG,oBAAoBxZ,KAAKy5H,aAAah/G,WACfrc,EAAKi8d,EAAuB59d,OAAQ2B,IAAM,CACtG,IAAI4C,EAAUq5d,EAAuBj8d,GACrCmH,GAAanB,IAAIpD,EAAS,SAAUhB,KAAKuvH,cAAevvH,MAExDwL,GAAQkb,UAAY1mB,KAAKg2d,kBACzBzwd,GAAanB,IAAIpE,KAAK6iG,KAAM,SAAU7iG,KAAKs6d,WAAYt6d,MAE3D0D,EAAW1D,KAAK6uH,iBAAmB2E,gBAAiB,SAEpD7vH,GADkB3D,KAAK64d,cAAgB74d,KAAKkzd,YAAY7+c,cAAgBrU,KAAKy5H,aAAah/G,YACjEo4c,GAAoBC,aAE7C9yd,KAAK6zd,iBAAkB,EACvB,IAAItmd,GAAcqxD,MAAO5+D,KAAKqnH,SAAUxuF,QAAQ,GAChD74B,KAAKwmB,QAAQ,OAAQjZ,GACjBA,EAAUsrB,SAGdl1B,GAAU3D,KAAKy5H,aAAah/G,YAAao4c,GAAoBE,gBAC7D/yd,KAAKqnH,SAASpD,KAAK,IAAI3rF,IARLb,KAAM,SAAUvsB,SAAU,WAUhDuod,EAAap4d,UAAU+nH,eAAiB,SAAUqO,GAC9C,IAAKjmH,GAAQkb,UAAalb,GAAQkb,UAAuC,iBAAzB1mB,KAAKu/B,kBAAsCv/B,KAAK00d,gBAAmB,CAC/Fh9c,GAAU+5G,GACZh1H,OAAS,IACnBg1H,EAAS/sH,MAAMqnD,WAAah3B,SAAS5nB,iBAAiBskH,GAAU1lE,UAAW,IAAM,QAI7F0na,EAAap4d,UAAU2+d,eAAiB,SAAUvoW,GAC9C,IAAI8oW,EAAcptd,iBAAiBskH,GAC/B+oW,EAAYzlc,SAASwlc,EAAYC,UAAW,IAC5CC,EAAe1lc,SAASwlc,EAAYE,aAAc,IACtD,OAAOz6d,KAAK+nH,iBAAiByyW,EAAYC,IAE7ChH,EAAap4d,UAAUo1H,YAAc,SAAUzvH,EAAS8qN,EAAat/M,GACjE,IAAIzM,EAAQC,KACZA,KAAKqnH,SAAW,IAAI7F,GAAMxgH,GACtBgV,MAAOhW,KAAK2+H,WAAYlb,WAAY,WACpCrB,SAAUpiH,KAAKy5H,aAAah/G,UAAWspG,WAAa3tG,EAAG,OAAQC,EAAG,QAAUpK,QAAS6/M,EACrF54M,UAAWlT,KAAKkT,UAAWrH,QAASW,EAAM0H,UAAYkC,EAAG,OAAQC,EAAG,UACpEosD,OAAQziE,KAAKyiE,OACbxgE,MAAO,WACElC,EAAM4zd,iBACP5zd,EAAMs3d,gBAEVt3d,EAAM4zd,iBAAkB,EACxB5zd,EAAM26d,gBAEVh5d,KAAM,WACF6D,GAAanB,IAAI5D,SAAU,YAAaT,EAAMy3d,gBAAiBz3d,GAC/DA,EAAM4sJ,aAAc,EAChB5sJ,EAAMi2d,mBACN3xd,GAAatE,EAAM05H,aAAah/G,YAAao4c,GAAoBC,aACjE/yd,EAAM6zd,eAAgB,EACtB7zd,EAAMmzd,YAAYhxd,QACdnC,EAAM05H,aAAan0G,aACnB3hB,GAAU5D,EAAM05H,aAAan0G,aAAcutc,GAAoBQ,gBAGvEtzd,EAAM03d,wBAIlBhE,EAAap4d,UAAU2sN,YAAc,WACjC,OAAQvqN,EAAkBuC,KAAK25L,gBAAgD,IAA9B35L,KAAK25L,cAAcl9L,QAExEg3d,EAAap4d,UAAU4+d,gBAAkB,aAGzCxG,EAAap4d,UAAU26d,eAAiB,WACpC,MAAgC,iBAAzBh2d,KAAKu/B,iBAAsCv/B,KAAKm1d,gBAE3D1B,EAAap4d,UAAUk0H,cAAgB,WAC/B/jH,GAAQkb,WAAuC,iBAAzB1mB,KAAKu/B,kBAC1Bv/B,KAAKg2d,kBAA+C,aAAzBh2d,KAAKu/B,kBAAmCv/B,KAAKm1d,gBAAkBn1d,KAAK00d,kBAChG10d,KAAKu1d,YAELv1d,KAAK4rB,OAAOwtK,UAAY37L,EAAkBuC,KAAKqxd,sBAC/Crxd,KAAKqxd,mBAAmB3sd,MAAM+9D,OAAS,IACvCziE,KAAKqxd,mBAAmB3sd,MAAM4xC,QAAU,SAGhDm9a,EAAap4d,UAAU6+d,qBAAuB,WAC1C,IAAIH,EAAkB/5d,KAAKkzd,YAAY7+c,cAAczI,wBAAwBmK,OAC7E/V,KAAKqnH,SAASrmH,QAAQ0D,MAAM6uD,UAAY,OACxCvzD,KAAKqnH,SAASrmH,QAAQ0D,MAAMsR,MAAQ,OACpChW,KAAK6iG,KAAKn+F,MAAM6uD,UAAa13D,OAAOyd,YAAcygd,EAAmB,KACrE/5d,KAAK6iG,KAAKn+F,MAAMqR,OAAUla,OAAOyd,YAAcygd,EAAmB,KAClE,IAAIY,EAAe36d,KAAKkzd,YAAY7+c,cAAc1R,cAAc,IAAMkwd,GAAoBjwU,WAC1Fv9I,EAAOrF,KAAKkzd,aACZyH,EAAatmd,cAAcnP,aAAalF,KAAKkzd,YAAayH,IAE9DlH,EAAap4d,UAAU0sH,iBAAmB,SAAUzjF,GAChD,IAAIwnL,EACA8uQ,EAAct2b,EACdy9J,EAAa/hM,KAAK6iG,KAAKlgG,cAAc,IAAMkwd,GAAoB3wd,QAAUlC,KAAK+hM,WAC9EgmB,EAAY/nN,KAAKgoN,cAAgBhoN,KAAK6iG,KAAO7iG,KAAK25L,cAAc,GAChEkhS,EAAW76d,KAAKgoN,cAAgBhoN,KAAK6iG,KAAO7iG,KAAK25L,cAAc35L,KAAK2yO,WAAWl2O,OAAS,GACxFqoN,EAAWiD,EAAUn8M,wBAAwBmK,OAC7C6uM,EAAa5kN,KAAK6iG,KAAKnxD,aAAe,EACtC37B,EAAStY,EAAkBskM,GAAcgmB,EAAU3zM,UAAY2tL,EAAW3tL,UAE9E,GAD0Bymd,EAASzmd,UACTwwM,EAAa7uM,IAAWtY,EAAkBuC,KAAK25L,gBACrE35L,KAAK25L,cAAcl9L,OAAS,IAAMgB,EAAkBskM,GAAa,CACjE,IAAIjjL,EAAQ9e,KAAK6iG,KAAKnxD,aAAeozK,EACjCg2Q,EAAgB/lc,SAAS5nB,iBAAiBnN,KAAK6iG,MAAMi4X,cAAe,IACxEhvQ,GAAehtM,GAAS9e,KAAK25L,cAAcl9L,OAASuD,KAAKinM,cAAgB6d,EAAW81Q,EAAcE,EAClG96d,KAAK6iG,KAAK12F,UAAY41L,EAAW3tL,eAE5B2B,EAAS6uM,GACdkH,EAAclH,EAAaE,EAAW,EACtC9kN,KAAK6iG,KAAK12F,UAAY4J,EAAS6uM,EAAaE,EAAW,GAGvDgH,EAAc/1M,EAIlB,QADA+1M,EAAcA,EAAchH,EAAW81Q,GAAgB91Q,EADrC9kN,KAAKy5H,aAAah/G,UAAUi3B,cACmC,IAGrF+hb,EAAap4d,UAAUsjI,SAAW,WAC9B,IAAI3oH,EAAQzT,EAAWvC,KAAK8jN,YAC5B,GAAI9tM,EAAMzX,QAAQ,MAAQ,EAAG,CAEzByX,GADiBhW,KAAKy5H,aAAah/G,UAAU7V,YAAc4W,WAAWxF,GAAS,KAC5D9I,WAAa,KAEpC,GAAI1B,GAAQkb,WAAc1mB,KAAKm1d,iBAA4C,iBAAzBn1d,KAAKu/B,iBAClDv/B,KAAK00d,iBAA4C,aAAzB10d,KAAKu/B,iBAAmC,CACjE,IAAIwoL,EAAY/nN,KAAKgoN,cAAgBhoN,KAAK6iG,KAAO7iG,KAAK25L,cAAc,GACpE3jL,EAAS+e,SAAS/e,EAAO,IAE8D,GAFvD+e,SAAS5nB,iBAAiB46M,GAAWE,WAAY,IAC7ElzL,SAAS5nB,iBAAiBnN,KAAKg8D,cAAcmsJ,YAAa,IAC1DpzL,SAAS5nB,iBAAiBnN,KAAKg8D,aAAa3nD,eAAew0M,gBAAiB,KAAY,KAEhG,OAAO7yM,GAEXy9c,EAAap4d,UAAU0/d,aAAe,SAAUv8V,GAC5C,IAAIw8V,EAAgBh7d,KAAK6iG,KAAKnxD,aAC1Bupb,EAAaj7d,KAAK+hM,WAAW3tL,UAAYpU,KAAK+hM,WAAWrwJ,aAAe1xC,KAAK6iG,KAAK12F,UAClF+ud,EAAal7d,KAAK6iG,KAAK12F,UAAY8ud,EAAaD,EACpDE,EAAa18V,EAAY08V,EAAoE,EAAvDnmc,SAAS5nB,iBAAiBnN,KAAK6iG,MAAMopH,WAAY,IAAUivQ,EACjG,IAAIC,EAAWn7d,KAAK+hM,WAAW3tL,UAAYpU,KAAK+hM,WAAWrwJ,aAAe1xC,KAAK6iG,KAAK12F,UACpFgvd,EAAWn7d,KAAK4rB,OAAOwtK,UAAY37L,EAAkBuC,KAAKqxd,oBACtD8J,EAAWn7d,KAAKqxd,mBAAmB3/a,aAAeypb,EAC7B,IAArBn7d,KAAKinM,YACLjnM,KAAK6iG,KAAK12F,UAAY,GAEjB8ud,EAAaD,KAAmBG,EAAW,GAAKn7d,KAAK6iG,KAAKnxD,aAAeypb,MAC9En7d,KAAK6iG,KAAK12F,UAAY+ud,IAG9BzH,EAAap4d,UAAU8Q,UAAY,WAC/B,IAAI+ud,EAAal7d,KAAK+hM,WAAW3tL,UAAYpU,KAAK6iG,KAAK12F,UACtCnM,KAAK+hM,WAAW3tL,UAAYpU,KAAK+hM,WAAWrwJ,aAAe1xC,KAAK6iG,KAAK12F,UACtF+ud,EAAal7d,KAAK4rB,OAAOwtK,UAAY37L,EAAkBuC,KAAKqxd,oBACxD6J,EAAal7d,KAAKqxd,mBAAmB3/a,aAAewpb,EACxD,IAAIC,EAAYn7d,KAAK+hM,WAAW3tL,UAAYpU,KAAK+hM,WAAWrwJ,aAAe1xC,KAAK6iG,KAAK12F,UAC5D,IAArBnM,KAAKinM,YACLjnM,KAAK6iG,KAAK12F,UAAY,EAEjB+ud,EAAa,EAClBl7d,KAAK6iG,KAAK12F,UAAYnM,KAAK6iG,KAAK12F,UAAY+ud,EAErCC,EAAW,GAAKn7d,KAAK6iG,KAAKnxD,aAAeypb,IAChDn7d,KAAK6iG,KAAK12F,UAAYnM,KAAK+hM,WAAW3tL,WAAapU,KAAK4rB,OAAOwtK,UAAY37L,EAAkBuC,KAAKqxd,oBAC9Frxd,KAAKqxd,mBAAmB3/a,aAAe,KAGnD+hb,EAAap4d,UAAUy7d,cAAgB,WACnC,OAAO,GAEXrD,EAAap4d,UAAUw9d,YAAc,WACjC,OAAO74d,KAAKm1d,gBAEhB1B,EAAap4d,UAAU+/d,cAAgB,WACnC,OAAO,GAEX3H,EAAap4d,UAAUipN,kBAAoB,SAAUzjN,GACjD,GAAKpD,EAAkBoD,GAanBb,KAAK+6d,cAAa,QAZlB,OAAQl6d,EAAEs1D,QACN,IAAK,WACL,IAAK,OACL,IAAK,MACDn2D,KAAK+6d,eACL,MACJ,QACI/6d,KAAKmM,cAQrBsnd,EAAap4d,UAAUg9I,UAAY,WAC/Br4I,KAAKkzd,YAAYl2d,MAAQ,GACzBgD,KAAKy4d,YAAY,OAErBhF,EAAap4d,UAAUi/d,WAAa,WAChCt6d,KAAKkzd,YAAYhmV,QAErBumV,EAAap4d,UAAUm1H,WAAa,SAAU3wH,GAE1C,GADAG,KAAKg0d,SAAU,EACTh0d,KAAKqnH,UAAY7mH,SAASuL,KAAK5H,SAASnE,KAAKqnH,SAASrmH,UAAYhB,KAAK6zd,gBAA7E,CAGAtud,GAAahB,OAAO/D,SAAU,YAAaR,KAAKw3d,iBAChDx3d,KAAK4vT,UAAW,EAChB5vT,KAAK22d,eAAiB,KACtB32d,KAAK00d,iBAAkB,EACvB10d,KAAKi0d,iBAAkB,EAEvB,IAAK,IAAI71d,EAAK,EAAGi9d,EADcr7d,KAAKqnH,SAAS7tG,oBAAoBxZ,KAAKy5H,aAAah/G,WACXrc,EAAKi9d,EAA2B5+d,OAAQ2B,IAAM,CAClH,IAAI4C,EAAUq6d,EAA2Bj9d,GACzCmH,GAAahB,OAAOvD,EAAS,SAAUhB,KAAKuvH,eAE5C/jH,GAAQkb,UAAY1mB,KAAKg2d,mBACzB3xd,GAAa7D,SAASuL,KAAM/L,KAAKqnH,SAASrmH,SAAU6xd,GAAoBS,iBACxE/td,GAAahB,OAAOvE,KAAK6iG,KAAM,SAAU7iG,KAAKs6d,aAE9Ct6d,KAAKg2d,mBACAxqd,GAAQkb,WACT1mB,KAAKu5d,gBAAgBjnd,UACjBtS,KAAKs5d,kBACL/zd,GAAahB,OAAOvE,KAAKs5d,iBAAkB,QAASt5d,KAAKq4I,YAG7Dr4I,KAAKm6d,kBACL50d,GAAahB,OAAOvE,KAAKm6d,gBAAiB,QAASn6d,KAAKo6d,iBACxD70d,GAAahB,OAAOvE,KAAKs5d,iBAAkB,QAASt5d,KAAKq4I,YAE7D9yI,GAAahB,OAAOvE,KAAKkzd,YAAa,QAASlzd,KAAKw5d,SACpDj0d,GAAahB,OAAOvE,KAAKkzd,YAAa,QAASlzd,KAAKw4d,YACpDjzd,GAAahB,OAAOvE,KAAKkzd,YAAa,UAAWlzd,KAAK04d,cACtDnzd,GAAahB,OAAOvE,KAAKkzd,YAAa,OAAQlzd,KAAK+1d,QACnD/1d,KAAKkzd,YAAc,MAEvBxvd,EAAW1D,KAAK6uH,iBAAmB2E,gBAAiB,QAASglB,wBAAyB,OACtFx4I,KAAKy5H,aAAah/G,UAAU3W,UAAUS,OAAOsud,GAAoBE,eAC7D/yd,KAAK64d,gBACL74d,KAAKs0d,mBAAmBC,WAAY,GAExCv0d,KAAK6zd,iBAAkB,EACvB,IAAItmd,GAAcqxD,MAAO5+D,KAAKqnH,SAAUxuF,QAAQ,GAEhD,GADA74B,KAAKwmB,QAAQ,QAASjZ,IAClBA,EAAUsrB,OAAd,CAGA,IAAIwxL,GACA5yL,KAAM,UACNvsB,SAAU,IACVrL,MAAOA,GAAgB,GAEE,iBAAzBG,KAAKu/B,iBACLv/B,KAAKoyd,YAELpyd,KAAK2sJ,YACL3sJ,KAAKqnH,SAAS9lC,KAAK,IAAIjpD,GAAU+xL,IAGjCrqN,KAAK06d,kBAGbjH,EAAap4d,UAAUq/d,aAAe,WAClC16d,KAAK2sJ,aAAc,EACnB3sJ,KAAK4zd,eAAgB,EACrB5zd,KAAKqnH,SAAS/0G,UACdjN,EAAOrF,KAAKqnH,SAASrmH,UAEzByyd,EAAap4d,UAAU++d,gBAAkB,WACrCp6d,KAAKu1d,YACLv1d,KAAKy6H,WAMTg5V,EAAap4d,UAAU0wG,OAAS,WACC,UAAzB/rG,KAAKgB,QAAQgC,QACbhD,KAAKg8D,aAAeh8D,KAAKgB,SAGzBhB,KAAKg8D,aAAe76D,EAAc,SAC9BnB,KAAKgB,QAAQgC,UAAYhD,KAAKy1d,mBAC9Bz1d,KAAKgB,QAAQ0D,MAAM4xC,QAAU,QAEjCt2C,KAAKgB,QAAQqT,cAAcnP,aAAalF,KAAKg8D,aAAch8D,KAAKgB,SAChEhB,KAAKw1d,gBAAgBx1d,KAAKg8D,eAE9Bh8D,KAAKy5H,aAAeruG,GAAM2rG,aACtB/1H,QAAShB,KAAKg8D,aACdmqD,QAASnmH,KAAKo7d,iBAAmBvI,GAAoBn9a,MAAQ,KAC7D3uB,eAAgB/mB,KAAK+mB,eACrB9jB,YACIozE,SAAmC,iBAAzBr2E,KAAKu/B,iBAA4Cv/B,KAAKq2E,SAChEvvD,YAAa9mB,KAAK8mB,YAClB7T,SAAUjT,KAAKiT,SACfgS,QAASjlB,KAAKilB,QACd/R,UAAWlT,KAAKkT,UAChBkS,gBAAiBplB,KAAKolB,mBAG1BplB,KAAKgB,QAAQgC,UAAYhD,KAAKy1d,iBAC9Bz1d,KAAKgB,QAAQW,YAAY3B,KAAKy5H,aAAah/G,WAG3Cza,KAAKg8D,aAAa3nD,cAAcnP,aAAalF,KAAKgB,QAAShB,KAAKg8D,cAEpEh8D,KAAKwzd,cAAgBryd,EAAc,UAC/BsC,OAAS4qH,cAAe,OAAQ2C,SAAY,KAAMuQ,MAASsxV,GAAoBW,iBAEnF3ud,GAAS7E,KAAKwzd,eAAgBxzd,KAAKy5H,aAAah/G,WAChDza,KAAK02M,oBAAoB12M,KAAKgB,QAAShB,KAAKwzd,eAC5Cxzd,KAAK+xd,YACL/xd,KAAKy5H,aAAah/G,UAAU/V,MAAMsR,MAAQzT,EAAWvC,KAAKgW,OAC1DhW,KAAKy5H,aAAah/G,UAAU3W,UAAUM,IAAI,SAC1CpE,KAAKq2d,YACLr2d,KAAKipH,SAAWjpH,KAAKgB,QAAQ+kH,aAAa,YAAc/lH,KAAKgB,QAAQ6R,aAAa,YAAc,IAChG7S,KAAKgB,QAAQ0K,gBAAgB,YAC7B,IAAIpI,EAAKtD,KAAKgB,QAAQ6R,aAAa,MAAQ7S,KAAKgB,QAAQ6R,aAAa,MAAQrT,EAAY,oBAMzF,GALAQ,KAAKgB,QAAQsC,GAAKA,EAClBtD,KAAKwzd,cAAclwd,GAAKA,EAAK,UAC7BtD,KAAK6uH,gBAAgBrrH,aAAa,WAAYxD,KAAKipH,UACnDvlH,EAAW1D,KAAK6uH,gBAAiB7uH,KAAKs1d,qBACtCt1d,KAAKq1d,oBACc,OAAfr1d,KAAKhD,OAAuC,OAArBgD,KAAKinM,aAAsC,OAAdjnM,KAAKysB,KACzDzsB,KAAKgnN,iBAEJ,GAA6B,WAAzBhnN,KAAKgB,QAAQgC,SAAwBhD,KAAKgB,QAAQgS,QAAQ,GAAI,CACnE,IAAIk7V,EAAgBluW,KAAKgB,QACzBhB,KAAKhD,MAAQkxW,EAAcl7V,QAAQk7V,EAAcxzS,eAAe19D,MAChEgD,KAAKysB,KAAOhvB,EAAkBuC,KAAKhD,OAAS,KAAOkxW,EAAcl7V,QAAQk7V,EAAcxzS,eAAe7+C,YACtG7b,KAAKgnN,YAEThnN,KAAKw1d,gBAAgBx1d,KAAKgB,SACrBhB,KAAKilB,UACNjlB,KAAK6uH,gBAAgB5F,UAAY,GAErCjpH,KAAKk1H,SAAU,EACfl1H,KAAKgB,QAAQ0D,MAAM+I,QAAU,GAC7BzN,KAAKg8D,aAAas/Z,SAAW,SAAUz6d,GAAKA,EAAE06d,4BAC9Cv7d,KAAKg8D,aAAaw/Z,SAAW,SAAU36d,GAAKA,EAAE06d,4BAC1Cv7d,KAAKgB,QAAQ+kH,aAAa,cAC1B/lH,KAAKy6H,WAIbg5V,EAAap4d,UAAU0rH,kBAAoB,SAAU0K,GAE7CzxH,KAAKstM,OACLttM,KAAKstM,OAAOtrM,UAAY,IAGxBhC,KAAKstM,OAAS9sM,SAASW,cAAc,OACrCwC,GAAU3D,KAAKstM,QAASulR,GAAoBvlR,SAGhD,IAAK,IAAIlvM,EAAK,EAAGyE,EADAmM,GAAQhP,KAAK6mH,eACRlyE,KAAoBv2C,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC5D,IAAIyf,EAAOhb,EAAGzE,GACd4B,KAAKstM,OAAO3rM,YAAYkc,GAE5BzY,GAAQpF,KAAKstM,QAAS77E,IAE1BgiW,EAAap4d,UAAUy+d,kBAAoB,SAAUroW,GAE7CzxH,KAAK4kF,OACL5kF,KAAK4kF,OAAO5iF,UAAY,IAGxBhC,KAAK4kF,OAASpkF,SAASW,cAAc,OACrCwC,GAAU3D,KAAK4kF,QAASiuY,GAAoBjuY,SAGhD,IAAK,IAAIxmF,EAAK,EAAGyE,EADAmM,GAAQhP,KAAKq5L,eACR1kJ,KAAoBv2C,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC5D,IAAIyf,EAAOhb,EAAGzE,GACd4B,KAAK4kF,OAAOjjF,YAAYkc,GAE5B,IAAIwqG,EAAaoJ,EAAS9uH,cAAc,iBACxC8uH,EAASvsH,aAAalF,KAAK4kF,OAAQyjC,IAEvCorW,EAAap4d,UAAUoge,WAAa,SAAUhvc,GAC1CzsB,KAAKysB,KAAOA,GAEhBgnc,EAAap4d,UAAUqge,YAAc,SAAU1+d,GAC3CgD,KAAKhD,MAAQA,GAEjBy2d,EAAap4d,UAAUu+d,aAAe,WAC7Bn8d,EAAkBuC,KAAKqnH,YAAa7mH,SAASuL,KAAK5H,SAASnE,KAAKqnH,SAASrmH,YACxEhB,KAAKm1d,gBAAoB3pd,GAAQkb,UAAY1mB,KAAKg2d,mBAA+C,iBAAzBh2d,KAAKu/B,iBAC/Ev/B,KAAKqnH,SAAS3F,gBAAgB1hH,KAAKy5H,aAAah/G,YAGxDg5c,EAAap4d,UAAU42d,iBAAmB,SAAU3nd,GAGhD,GAFAtK,KAAKgwD,MAAM,KAAM1lD,GACjBtK,KAAKswd,UAAUtwd,KAAKujE,aACfvjE,KAAK40d,iBAAmB50d,KAAK4zd,eAAiBpzd,SAASmlH,gBAAkB3lH,KAAKkzd,YAAa,CAC5Flzd,KAAKq7D,SAAWr7D,KAAK4yd,eAAe5yd,KAAKhD,OACzC,IAAI2uB,EAAW3rB,KAAKy/L,cACpBz/L,KAAKgH,eAAgBhK,MAAS2uB,EAAS3uB,MAAOyvB,KAAQd,EAASc,SAOvEgnc,EAAap4d,UAAUmsF,kBAAoB,SAAUiF,EAASC,GAC1D1sF,KAAKkyd,kBAAkB,QAAS,cAAezlY,GAC/C,IAAK,IAAIruF,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKmvF,GAAUruF,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC9D,IAAIkM,EAAOzH,EAAGzE,GACd,OAAQkM,GACJ,IAAK,QACL,IAAK,aACD,MACJ,IAAK,iBACDtK,KAAKq1d,oBACL,MACJ,IAAK,QACDpvd,EAAkBjG,KAAKy5H,aAAah/G,WAAazE,MAASzT,EAAWkqF,EAAQz2E,SAC7E,MACJ,IAAK,cACDoV,GAAMsqG,eAAejpC,EAAQ3lE,YAAa9mB,KAAKg8D,cAC/C,MACJ,IAAK,uBACGh8D,KAAKkzd,aACL9nc,GAAMsqG,eAAejpC,EAAQ4sY,qBAAsBr5d,KAAKkzd,aAE5D,MACJ,IAAK,WAC4B,iBAAzBlzd,KAAKu/B,iBACLnU,GAAMwqG,YAAYnpC,EAAQpW,SAAUr2E,KAAKg8D,cAE7C,MACJ,IAAK,WACD5wC,GAAMoqG,YAAY/oC,EAAQx5E,UAAWjT,KAAKy5H,aAAah/G,YACnDza,KAAKqnH,UACLrnH,KAAKqnH,SAASrmH,QAAQ8C,UAAUM,IAAIqoF,EAAQx5E,UAEhD,MACJ,IAAK,YACDjT,KAAKyhH,eACL,MACJ,IAAK,UACDzhH,KAAKo2E,YACL,MACJ,IAAK,OACD,GAAqB,OAAjBqW,EAAQhgE,KAAe,CACvBzsB,KAAKgwD,QACL,MAQJ,GANKhwD,KAAK6iG,OACF7iG,KAAKujE,sBAAsBC,KAC3BxjE,KAAK8zd,kBAAmB,GAE5B9zd,KAAK+iM,eAEJ/iM,KAAK8zd,iBAAkB,CACxB,IAAIljW,EAAK5wH,KAAK01d,iBAAiBjpY,EAAQhgE,MACnCzsB,KAAKqyH,UAAUzB,GACf5wH,KAAKoqN,aAAax5F,EAAI,MAGtB5wH,KAAKy7d,WAAW/uY,EAAQjgE,MAGhC,MACJ,IAAK,QACD,GAAsB,OAAlBggE,EAAQzvF,MAAgB,CACxBgD,KAAKgwD,QACL,MASJ,GAPAhwD,KAAK+N,OAAO,qBAAuB0+E,QAASA,IACvCzsF,KAAK6iG,OACF7iG,KAAKujE,sBAAsBC,KAC3BxjE,KAAK8zd,kBAAmB,GAE5B9zd,KAAK+iM,eAEJ/iM,KAAK8zd,iBAAkB,CACxB,IAAIj2c,EAAO7d,KAAK21d,kBAAkBlpY,EAAQzvF,OACtCgD,KAAKqyH,UAAUx0G,GACf7d,KAAKoqN,aAAavsM,EAAM,MAGxB7d,KAAK07d,YAAYhvY,EAAQ1vF,OAGjC,MACJ,IAAK,QACD,GAAsB,OAAlByvF,EAAQx6E,MAAgB,CACxBjS,KAAKgwD,QACL,MAQJ,GANKhwD,KAAK6iG,OACF7iG,KAAKujE,sBAAsBC,KAC3BxjE,KAAK8zd,kBAAmB,GAE5B9zd,KAAK+iM,eAEJ/iM,KAAK8zd,iBAAkB,CACxB,IAAI9yd,EAAUhB,KAAK25L,cAAcltG,EAAQx6E,OACrCjS,KAAKqyH,UAAUrxH,GACfhB,KAAKoqN,aAAappN,EAAS,MAG3BhB,KAAKiS,MAAQy6E,EAAQz6E,MAG7B,MACJ,IAAK,iBACGjS,KAAKqnH,UACLrnH,KAAK+mH,kBAAkB/mH,KAAKqnH,SAASrmH,SAEzC,MACJ,IAAK,iBACGhB,KAAKqnH,UACLrnH,KAAK85d,kBAAkB95d,KAAKqnH,SAASrmH,SAEzC,MACJ,IAAK,gBACIvD,EAAkBuC,KAAKq7D,WAAmC,MAAtBr7D,KAAKk4d,eAC1Cl4d,KAAKm4d,mBAET,MACJ,IAAK,iBACD/sc,GAAM6rG,eAAej3H,KAAKy5H,cAC1BruG,GAAM+rG,YAAYn3H,KAAKg8D,aAAcywB,EAAQ1lE,eAAgB/mB,KAAK8mB,aAClE,MACJ,IAAK,kBACDsE,GAAMirG,eAAe5pC,EAAQrnE,gBAAiBplB,KAAKg8D,aAAch8D,KAAKy5H,cACtEz5H,KAAKklB,iBACL,MACJ,QACI,IAAIy2c,OAAW,EACfA,EAAW37d,KAAK+ud,cAAczkd,EAAMmiF,EAASC,GAC7CvB,EAAO9vF,UAAUmsF,kBAAkBlmF,KAAKtB,KAAM27d,EAAS3mL,YAAa2mL,EAAS3M,gBAS7FyE,EAAap4d,UAAUkkC,cAAgB,WACnC,MAAO,gBAMXk0b,EAAap4d,UAAU+7d,UAAY,WAC/B,GAAKp3d,KAAKilB,QAGV,GAAIjlB,KAAK6zd,gBACL7zd,KAAK45d,mBADT,CAYA,GARA55d,KAAK6zd,iBAAkB,EACnB7zd,KAAK64d,gBAAkB74d,KAAK4vT,UAAY5vT,KAAKs0d,mBAAmBzxX,MAAQ7iG,KAAKs0d,mBAAmBzxX,KAAK,IACrG7iG,KAAK4vT,UAAW,EAChB5vT,KAAK6wd,iBAAiB7wd,KAAKs0d,mBAAmBr7R,UAAWj5L,KAAKs0d,mBAAmBzxX,KAAM,MAAM,KAExFplG,EAAkBuC,KAAK6iG,QAAU1lG,EAAY6C,KAAK6iG,OAAS7iG,KAAK6iG,KAAK/+F,UAAUK,SAASwqd,GAAoBC,UACjH5ud,KAAK+iM,aAELv3L,GAAQkb,UAAY1mB,KAAKg2d,iBAAkB,CAC3C,IAAIx9J,EAAUx4T,KACdnE,OAAO+/d,WAAa,WAChBpjK,EAAQ+8J,aAEZ1oX,QAAQgvX,aAAc,IAErBp+d,EAAkBuC,KAAK6iG,KAAKzoF,SAAS,MAAOpa,KAAK6iG,KAAK/+F,UAAUK,SAASwqd,GAAoBC,SAC9F5ud,KAAK8qH,cAETpnH,EAAW1D,KAAK6uH,iBAAmB2pB,wBAAyBx4I,KAAK+hM,WAAa/hM,KAAK+hM,WAAWz+L,GAAK,SAMvGmwd,EAAap4d,UAAUk6d,UAAY,WAC3Bv1d,KAAKo0d,aAAwC,iBAAzBp0d,KAAKu/B,kBACzBnU,GAAMhuB,SAAS4C,KAAKysB,KAAMzsB,KAAKg8D,aAAch8D,KAAK+mB,eAAgB/mB,KAAKolB,iBACvEplB,KAAKo0d,aAAc,EACd32d,EAAkBuC,KAAKiS,OAQxBjS,KAAKk1d,kBAPLl1d,KAAK+hM,WAAa/hM,KAAK25L,cAAc35L,KAAKiS,OAC1CjS,KAAK23d,mBAAmB33d,KAAK+hM,WAAY,MAAM,GAC3C/hM,KAAKk4d,eAAmC,OAAlBl4d,KAAKq7D,UAC3Br7D,KAAKm4d,qBAOjBn4d,KAAKwwH,aACL,IAAI7kG,EAAW3rB,KAAKy/L,cACmB,KAAnCz/L,KAAKg8D,aAAah/D,MAAMkT,QAAkBlQ,KAAK8hM,eAAiB9hM,KAAKy0d,iBACpEh3d,EAAkBuC,KAAK+hM,aAAe/hM,KAAKg8D,aAAah/D,QAAU2uB,EAASc,QAC5EzsB,KAAKy0d,gBAAiB,EACtBz0d,KAAKgwD,UAObyja,EAAap4d,UAAUo/H,QAAU,WAC7B,GAAKz6H,KAAKilB,UAGNjlB,KAAK6uH,gBAAgB/qH,UAAUK,SAAS0ud,GAAoBr3R,SAAhE,CAGA,IAAInhE,GAAY,EACZr6H,KAAKk5M,cAAgB1tM,GAAQkb,WAC7B1mB,KAAKy5H,aAAah/G,UAAUwuG,SAAW,EACvCjpH,KAAKy5H,aAAah/G,UAAUvY,QAC5BlC,KAAKk5M,cAAe,EACpB7+E,GAAY,GAEXA,GACDr6H,KAAK6uH,gBAAgB3sH,QAEzByB,GAAU3D,KAAKy5H,aAAah/G,YAAao4c,GAAoBC,aAC7D9yd,KAAKm2d,YAMT1C,EAAap4d,UAAUq/H,SAAW,WACzB16H,KAAKilB,UAGVjlB,KAAKg0d,SAAU,EACfh0d,KAAKu1d,YACLv1d,KAAK6uH,gBAAgBqe,OACrB7oI,GAAarE,KAAKy5H,aAAah/G,YAAao4c,GAAoBC,eAOpEW,EAAap4d,UAAUiX,QAAU,WAC7B,IAAIvS,EAAQC,KAOZ,GANAA,KAAK4vT,UAAW,EAChB5vT,KAAKu1d,YACLv1d,KAAKu3d,cACDv3d,KAAK6iG,MACL7iG,KAAK6jN,oBAEL7jN,KAAKgB,SAAYhB,KAAKgB,QAAQ8C,UAAUK,SAAS,KAAOnE,KAAKu/B,iBAAjE,EAGiB,WAAY,gBAAiB,mBAC1C,cAAe,YAAa,kBAAmB,gBAAiB,gBAChE,wBAAyB,eAAgB,gBAAiB,cAC1D,iBAAkB,aAAc,qBAC1BngC,QAAQ,SAAUpC,GACxB+C,EAAMi8D,aAAatwD,gBAAgB1O,KAEvCgD,KAAKg8D,aAAax4D,aAAa,WAAYxD,KAAKipH,UAChDjpH,KAAKg8D,aAAal4D,UAAUS,OAAO,WACnC6mB,GAAMhuB,SAAS,GAAI4C,KAAKg8D,aAAch8D,KAAK+mB,eAAgB/mB,KAAKolB,iBAChEplB,KAAKgB,QAAQ0D,MAAM4xC,QAAU,QACzBt2C,KAAKy5H,aAAah/G,UAAUpG,cAAcrR,UAAYhD,KAAKy1d,iBAC3Dpwd,EAAOrF,KAAKy5H,aAAah/G,YAGzBza,KAAKy5H,aAAah/G,UAAUpG,cAAcnP,aAAalF,KAAKgB,QAAShB,KAAKy5H,aAAah/G,WACvFpV,EAAOrF,KAAKy5H,aAAah/G,YAE7B0wE,EAAO9vF,UAAUiX,QAAQhR,KAAKtB,QAOlCyzd,EAAap4d,UAAUs3O,SAAW,WAO9B,OANK3yO,KAAK6iG,OACF7iG,KAAKujE,sBAAsBC,KAC3BxjE,KAAK8zd,kBAAmB,GAE5B9zd,KAAK+iM,cAEF/iM,KAAKi5L,UAAY9tG,EAAO9vF,UAAUs3O,SAASrxO,KAAKtB,MAAQ,MAEnE6qF,IACI3jF,EAAS,OACVusd,EAAap4d,UAAW,gBAAY,GACvCwvF,IACI3jF,EAAS,SACVusd,EAAap4d,UAAW,aAAS,GACpCwvF,IACI3jF,EAAS,UACVusd,EAAap4d,UAAW,mBAAe,GAC1CwvF,IACI3jF,EAAS,SACVusd,EAAap4d,UAAW,kBAAc,GACzCwvF,IACI3jF,EAAS,OACVusd,EAAap4d,UAAW,mBAAe,GAC1CwvF,IACI3jF,EAAS,OACVusd,EAAap4d,UAAW,4BAAwB,GACnDwvF,IACI3jF,OACDusd,EAAap4d,UAAW,sBAAkB,GAC7CwvF,IACI3jF,EAAS,OACVusd,EAAap4d,UAAW,aAAS,GACpCwvF,IACI3jF,EAAS,OACVusd,EAAap4d,UAAW,qBAAiB,GAC5CwvF,IACI3jF,EAAS,OACVusd,EAAap4d,UAAW,sBAAkB,GAC7CwvF,IACI3jF,EAAS,OACVusd,EAAap4d,UAAW,sBAAkB,GAC7CwvF,IACI3jF,GAAS,IACVusd,EAAap4d,UAAW,sBAAkB,GAC7CwvF,IACI3jF,GAAS,IACVusd,EAAap4d,UAAW,gBAAY,GACvCwvF,IACI3jF,EAAS,OACVusd,EAAap4d,UAAW,YAAQ,GACnCwvF,IACI3jF,EAAS,OACVusd,EAAap4d,UAAW,aAAS,GACpCwvF,IACI3jF,EAAS,OACVusd,EAAap4d,UAAW,aAAS,GACpCwvF,IACI3jF,EAAS,UACVusd,EAAap4d,UAAW,sBAAkB,GAC7CwvF,IACI3jF,GAAS,IACVusd,EAAap4d,UAAW,uBAAmB,GAC9CwvF,IACI/hF,KACD2qd,EAAap4d,UAAW,iBAAa,GACxCwvF,IACI/hF,KACD2qd,EAAap4d,UAAW,cAAU,GACrCwvF,IACI/hF,KACD2qd,EAAap4d,UAAW,kBAAc,GACzCwvF,IACI/hF,KACD2qd,EAAap4d,UAAW,YAAQ,GACnCwvF,IACI/hF,KACD2qd,EAAap4d,UAAW,aAAS,GACpCwvF,IACI/hF,KACD2qd,EAAap4d,UAAW,YAAQ,GACnCwvF,IACI/hF,KACD2qd,EAAap4d,UAAW,aAAS,GACpCo4d,EAAe5oY,IACXzhF,GACDqqd,IAEL3E,ICpmEExkY,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAWhEi2b,GAAoB73R,KAAO,aAC3B,IAAIrmE,IACAl6G,UAAW,KACX0rG,YAkBA21W,GAA0B,SAAU3wY,GAKpC,SAAS2wY,EAAS9od,EAAShS,GACvB,OAAOmqF,EAAO7pF,KAAKtB,KAAMgT,EAAShS,IAAYhB,KA+jBlD,OApkBAsqF,GAAUwxY,EAAU3wY,GAYpB2wY,EAASzge,UAAUoX,UAAY,WAC3B04E,EAAO9vF,UAAUoX,UAAUnR,KAAKtB,OAEpC87d,EAASzge,UAAUg7d,UAAY,WACE,aAAzBr2d,KAAKu/B,kBACLh6B,GAAanB,IAAIpE,KAAKy5H,aAAatT,QAAQ,GAAI,YAAanmH,KAAKi5M,YAAaj5M,MAC9EuF,GAAanB,IAAIpE,KAAKy5H,aAAah/G,UAAW,OAAQza,KAAK+1d,OAAQ/1d,OAElEvC,EAAkBuC,KAAKy5H,aAAatT,QAAQ,KAC7C5gH,GAAanB,IAAIpE,KAAKy5H,aAAatT,QAAQ,GAAI,YAAanmH,KAAKs2d,cAAet2d,MAEpFuF,GAAanB,IAAIpE,KAAKg8D,aAAc,QAASh8D,KAAK+7d,YAAa/7d,MAC1DA,KAAKq2E,WACN9wE,GAAanB,IAAIpE,KAAKg8D,aAAc,QAASh8D,KAAKw5d,QAASx5d,MAC3DuF,GAAanB,IAAIpE,KAAKg8D,aAAc,QAASh8D,KAAKw4d,WAAYx4d,MAC9DuF,GAAanB,IAAIpE,KAAKg8D,aAAc,UAAWh8D,KAAK04d,aAAc14d,OAEtEA,KAAKu2d,mBAETuF,EAASzge,UAAU49M,YAAc,SAAUp4M,IACjCb,KAAKm1d,gBAAkB30d,SAASmlH,gBAAkB3lH,KAAKg8D,cACxDx7D,SAASmlH,cAAc7hH,UAAUK,SAAS0ud,GAAoB/gd,SAAUtG,GAAQkb,WAAalb,GAAQkb,UACtG7lB,EAAE2kB,kBAGVs2c,EAASzge,UAAUwzH,cAAgB,WAC/B,OAAO7uH,KAAKg8D,cAEhB8/Z,EAASzge,UAAUoge,WAAa,SAAUhvc,GACtCrB,GAAMhuB,SAAS4C,KAAKysB,KAAMzsB,KAAKg8D,aAAch8D,KAAK+mB,eAAgB/mB,KAAKolB,iBACvEplB,KAAKg8d,cACLh8d,KAAK+6M,mBAET+gR,EAASzge,UAAUqge,YAAc,SAAU1+d,GACnCgD,KAAKi8d,YACLj8d,KAAKk8d,gBAAgBl8d,KAAKhD,OAG1BgD,KAAKk8d,gBAAgB,MAEzBl8d,KAAK+6M,kBACL/6M,KAAK81d,kBAETgG,EAASzge,UAAU6ge,gBAAkB,SAAUl/d,GAC3C,IAAI0iN,EAAajiN,EAAkBT,GAAS,KAAOA,EAAMkQ,WACzDke,GAAMhuB,SAASsiN,EAAY1/M,KAAKg8D,aAAch8D,KAAK+mB,eAAgB/mB,KAAKolB,iBACxEplB,KAAKgH,eAAgBhK,MAAOA,EAAOyvB,KAAMzvB,EAAOiV,MAAO,OAAQ,GAC/DjS,KAAKinM,YAAcjnM,KAAKiS,MACxB,IAAI2Z,EAAS5rB,KAAK4rB,OACdD,KACJA,EAASC,EAAOa,MAAQhvB,EAAkBT,GAAS,KAAOA,EAAMkQ,WAChEye,EAASC,EAAO5uB,OAASS,EAAkBT,GAAS,KAAOA,EAAMkQ,WACjElN,KAAKq7D,SAAW1vC,EAChB3rB,KAAK6d,KAAO,KACR7d,KAAKo7H,gBAAkBp7H,KAAKhD,OAC5BgD,KAAKq4d,kBAAkB,OAG/ByD,EAASzge,UAAUw6d,aAAe,WAC9B,GAAKp4d,EAAkBuC,KAAKhD,OAYvB,GAAIgD,KAAKysB,MAAQhvB,EAAkBuC,KAAKhD,OAAQ,EAC7C4zH,EAAK5wH,KAAK01d,iBAAiB11d,KAAKysB,OAEhCzsB,KAAKoqN,aAAax5F,EAAI,OAGtBxlG,GAAMhuB,SAAS4C,KAAKysB,KAAMzsB,KAAKg8D,aAAch8D,KAAK+mB,eAAgB/mB,KAAKolB,iBACvEplB,KAAKg8d,oBAITh8d,KAAKoqN,aAAapqN,KAAK25L,cAAc35L,KAAKinM,aAAc,UAvBxB,CAChC,IAAIr2E,GAAAA,EAAK5wH,KAAK21d,kBAAkB31d,KAAKhD,QAEjCgD,KAAKoqN,aAAax5F,EAAI,MAEjB5wH,KAAKi8d,YACVj8d,KAAKk8d,gBAAgBl8d,KAAKhD,OAG1BgD,KAAKk8d,gBAAgB,MAgB7Bl8d,KAAK81d,iBACL1qc,GAAMhuB,SAAS4C,KAAKysB,KAAMzsB,KAAKg8D,aAAch8D,KAAK+mB,eAAgB/mB,KAAKolB,kBAE3E02c,EAASzge,UAAUi6d,kBAAoB,WAcnC,OAZI3hW,YAAa3zH,KAAKgB,QAAQsC,GAAK,WAC/BsO,KAAQ,WACRy1M,oBAAqB,OACrBhrJ,kBAAmBr8D,KAAKwzd,cAAclwd,GACtC64d,gBAAiB,OACjB3oW,gBAAiB,QACjBkG,gBAAiB15H,KAAKq2E,SAASnpE,WAC/B4V,aAAgB,MAChBC,YAAe,MACfC,eAAkB,MAClBC,WAAc,UAItB64c,EAASzge,UAAUo9d,YAAc,SAAU53d,GACvCb,KAAKg0d,SAAU,EACXh0d,KAAK64d,eACL1tY,EAAO9vF,UAAUo9d,YAAYn3d,KAAKtB,KAAMa,GACF,KAAlCb,KAAKkzd,YAAYl2d,MAAMkT,QACvBlQ,KAAKo8d,aAAap8d,KAAKi5L,UAAUt2L,cAAc,IAAMkwd,GAAoBjiW,OAIzE5wH,KAAKi5L,WAAyC,KAA5Bj5L,KAAKg8D,aAAah/D,OAAgBgD,KAAKi0d,iBACzDj0d,KAAKo8d,aAAap8d,KAAKi5L,UAAUt2L,cAAc,IAAMkwd,GAAoBjiW,KAE7E5wH,KAAKw6D,kBAAkB35D,KAG/Bi7d,EAASzge,UAAUo6d,eAAiB,WAChC,MAAO,gBAEXqG,EAASzge,UAAU+9d,aAAe,WAE9B,OADAp5d,KAAKkzd,YAAclzd,KAAKg8D,aAChBh8D,KAAK64d,cAAgB74d,KAAKy5H,aAAe9E,IAErDmnW,EAASzge,UAAUw1d,iBAAmB,SAAU53R,EAAWp2F,EAAMhiG,EAAG0zd,GAChEppY,EAAO9vF,UAAUw1d,iBAAiBvvd,KAAKtB,KAAMi5L,EAAWp2F,EAAMhiG,GAC1Db,KAAKy0d,gBACLz0d,KAAK+6M,mBAEJ/6M,KAAKi0d,iBAA4C,aAAzBj0d,KAAKu/B,iBAAkCv/B,KAAKg0d,SACrEh0d,KAAKq8d,gBAGbP,EAASzge,UAAU4+d,gBAAkB,WACjC,IAAItuc,EAAW3rB,KAAKy0d,gBAAmBhoc,KAAM,IAAOzsB,KAAKy/L,cACrDjwD,EAAWxvI,KAAK6iG,KAAKlgG,cAAc,IAAMkwd,GAAoBrjV,UAEjE,GADiB7jH,EAASc,OAASzsB,KAAKg8D,aAAah/D,QAAUS,EAAkB+xI,GAE7E,OAAOA,EAEX,IAAKhkI,GAAQkb,WAAa1mB,KAAK00d,kBAAoBlpd,GAAQkb,YACtDjpB,EAAkBuC,KAAK25L,gBAAkB35L,KAAK25L,cAAcl9L,OAAS,EAAG,CACzE,IAEIkpH,EADazqD,GADAl7D,KAAKg8D,aAAah/D,MACCgD,KAAK25L,cAAe,cAAc,GACvC97K,KAC/B,GAAKpgB,EAAkBkoH,GAWf3lH,KAAKy0d,gBAAqD,KAAnCz0d,KAAKg8D,aAAah/D,MAAMkT,SAC/ClQ,KAAK85I,cACL95I,KAAK6iG,KAAK12F,UAAY,OAbS,CACnC,IAAI2S,EAAQ9e,KAAK8xd,gBAAgBnsW,EAAc9yG,aAAa,eAAiB,EACzEkD,EAASgf,SAAS5nB,iBAAiBnN,KAAK25L,cAAc,GAAI,MAAMvsL,iBAAiB,UAAW,IAChG,IAAK40C,MAAMjsC,IAAoC,iBAAzB/V,KAAKu/B,gBAAoC,CAC3Dv/B,KAAK85I,cACL,IAAI+0U,EAAY7ud,KAAK4rB,OAAOwtK,QAAUp5L,KAAK25L,cAAc,GAAGjoJ,aAAe,EAC3E1xC,KAAK6iG,KAAK12F,UAAY2S,EAAQ/I,EAAS84c,EACvClrd,GAAUgiH,GAAgBktW,GAAoB3wd,QAStD,OAAOyjH,EAGP,OAAO,MAGfm2W,EAASzge,UAAU+B,SAAW,SAAUyD,GAIpC,OAHIA,GAAgB,YAAXA,EAAE6F,MAAmC,UAAb7F,EAAEs1D,QAC/Bn2D,KAAK44d,sBAEL54d,KAAKs8d,UAAqC,aAAzBt8d,KAAKu/B,iBAAkC1+B,GAAgB,YAAXA,EAAE6F,MAAmC,UAAb7F,EAAEs1D,QACvFn2D,KAAKi0d,iBAAkB,EACvBj0d,KAAKq8d,aAAax7d,IACX,GAGAsqF,EAAO9vF,UAAU+B,SAASkE,KAAKtB,KAAMa,IAGpDi7d,EAASzge,UAAUsmB,YAAc,WACzBlkB,EAAkBuC,KAAK02d,kBACvB12d,KAAK02d,eAAiB12d,KAAKy5H,aAAatT,QAAQ,IAAMnmH,KAAKy5H,aAAan0G,YACxE3hB,GAAU3D,KAAK02d,gBAAiB7D,GAAoBU,aACpD/4c,IACIrT,OAAQnH,KAAK02d,eACb1gd,MAAOxK,GAAQkb,SAAW,OAAS,SAEvC/E,GAAY3hB,KAAK02d,kBAGzBoF,EAASzge,UAAUqnB,YAAc,WACxBjlB,EAAkBuC,KAAK02d,kBACxBh0c,GAAY1iB,KAAK02d,gBACjB12d,KAAK02d,eAAe10d,UAAY,GAChCqC,GAAarE,KAAK02d,gBAAiB7D,GAAoBU,aACvDvzd,KAAK02d,eAAiB,OAG9BoF,EAASzge,UAAUkhe,YAAc,SAAU52W,EAAe62W,GAItD,GAHKA,GACDx8d,KAAKo8d,aAAaz2W,GAElB3lH,KAAKs8d,WAAat8d,KAAKi0d,gBAAiB,CACxC,IAAIpqV,EAAe7pI,KAAKmwd,eAAexqW,EAAc9yG,aAAa,eAAe3F,WAC7Euvd,EAAmBz8d,KAAKymN,kBAAkB9gG,EAAc9yG,aAAa,eAC5C,aAAzB7S,KAAKu/B,kBACAv/B,KAAK84D,YAAc94D,KAAKo7H,gBAAkBqhW,EAM3Cz8d,KAAK23d,mBAAmBhyW,EAAe,MAAM,IAL7C3lH,KAAK23d,mBAAmBhyW,EAAe,MACvC3lH,KAAK84D,YAAa,EAClB94D,KAAKo7H,cAAgBp7H,KAAKymN,kBAAkB9gG,EAAc9yG,aAAa,iBAM1E7S,KAAK08d,kBAAkB7yV,IACxB7pI,KAAK28d,qBAAqB9yV,KAItCiyV,EAASzge,UAAUqhe,kBAAoB,SAAU1/d,GAC7C,GAAIwO,GAAQoe,UAAW,CACnB,IAAI6iT,EAAgBzsU,KAAK24d,qBACrBiE,EAAU58d,KAAKw0d,iBAAiB31c,IAChCg+c,EAASpwJ,EAAc5tT,IACvBi+c,EAAY98d,KAAKw0d,iBAAiBj3d,MAClCw/d,EAAWtwJ,EAAclvU,MAC7B,OAAgB,IAAZq/d,IAAmBA,IAAY5/d,EAAMP,QAAUqge,IAAc9/d,EAAMP,QAClEqge,EAAYC,GAAYH,EAAUC,GAAYD,IAAYC,GAAUC,IAAcC,GAQvF,OAAO,GAGfjB,EAASzge,UAAU20D,MAAQ,SAAUnvD,EAAGmrB,IAChCvuB,EAAkBuuB,IAA0B,eAAbA,IAC/Bm/D,EAAO9vF,UAAU20D,MAAM1uD,KAAKtB,KAAMa,IAG1Ci7d,EAASzge,UAAU27d,kBAAoB,SAAUh2d,GAC7C,OAAQvD,EAAkBuD,IAE9B86d,EAASzge,UAAUghe,aAAe,SAAUx7d,GACxC,IAAIm8d,EAAiBn8d,IAAmB,SAAbA,EAAEs1D,QAAkC,OAAbt1D,EAAEs1D,QACnC,SAAbt1D,EAAEs1D,QAAkC,QAAbt1D,EAAEs1D,QAAiC,WAAbt1D,EAAEs1D,QAAoC,aAAbt1D,EAAEs1D,QACxEwvD,EAAgBq3W,EAAgBh9d,KAAK25L,cAAc35L,KAAKinM,aAAejnM,KAAKi6d,kBAChF,GAAKx8d,EAAkBkoH,GASlB,GAAgC,KAA5B3lH,KAAKg8D,aAAah/D,MAAc,CACrCgD,KAAKinM,YAAc,KACnBjnM,KAAK6iG,KAAK12F,UAAY,EACtB,IAAI6kd,EAAYhxd,KAAK6iG,KAAKlgG,cAAc,IAAMkwd,GAAoBjiW,IAClE5wH,KAAKo8d,aAAapL,QAGlBhxd,KAAKinM,YAAc,KACnBjnM,KAAK+6M,kBACL/6M,KAAK85I,kBAlB8B,CACnC,IAAKkjV,EAAe,CAChB,IAAIhge,EAAQgD,KAAKymN,kBAAkB9gG,EAAc9yG,aAAa,eAC9D7S,KAAKinM,YAAcjnM,KAAK8xd,gBAAgB90d,GACxCgD,KAAKinM,YAAexpM,EAAkBuC,KAAKinM,aAAkC,KAAnBjnM,KAAKinM,YAEnEjnM,KAAKi0d,gBAA8C,KAA5Bj0d,KAAKg8D,aAAah/D,OAAuBgD,KAAKi0d,gBACrEj0d,KAAKu8d,YAAY52W,EAAeq3W,KAcxClB,EAASzge,UAAUm/D,kBAAoB,SAAU35D,GAC7Cb,KAAKo3d,YACA35d,EAAkBuC,KAAKkvd,YACxBlvd,KAAKq8d,aAAax7d,GAClBA,EAAE2kB,mBAIVs2c,EAASzge,UAAUshe,qBAAuB,SAAU9yV,GAChD,IAAIj6D,EAAY5vE,KAAK24d,qBACjB37d,EAAQgD,KAAKg8D,aAAah/D,MAAMg6B,OAAO,EAAG44C,EAAUryE,OACxD,GAAIP,GAAUA,EAAM4Y,gBAAkBi0H,EAAa7yG,OAAO,EAAG44C,EAAUryE,OAAOqY,cAAgB,CAC1F,IAAI8pM,EAAa1iN,EAAQ6sI,EAAa7yG,OAAOh6B,EAAMP,OAAQotI,EAAaptI,QACxE2uB,GAAMhuB,SAASsiN,EAAY1/M,KAAKg8D,aAAch8D,KAAK+mB,eAAgB/mB,KAAKolB,iBACxEplB,KAAKg8D,aAAaj2C,kBAAkB6pD,EAAUryE,MAAOyC,KAAKg8D,aAAah/D,MAAMP,aAG7E2uB,GAAMhuB,SAASysI,EAAc7pI,KAAKg8D,aAAch8D,KAAK+mB,eAAgB/mB,KAAKolB,iBAC1EplB,KAAKg8D,aAAaj2C,kBAAkB,EAAG/lB,KAAKg8D,aAAah/D,MAAMP,SAIvEq/d,EAASzge,UAAU4zd,eAAiB,SAAUxic,GAC1C,OAAO0+D,EAAO9vF,UAAU4zd,eAAe3td,KAAKtB,KAAMysB,GAAM,EAAMzsB,KAAKmvJ,eAEvE2sU,EAASzge,UAAUk8d,YAAc,WACA,aAAzBv3d,KAAKu/B,kBACLh6B,GAAahB,OAAOvE,KAAKy5H,aAAatT,QAAQ,GAAI,YAAanmH,KAAKi5M,aACpE1zM,GAAahB,OAAOvE,KAAKy5H,aAAah/G,UAAW,OAAQza,KAAK+1d,SAE7Dt4d,EAAkBuC,KAAKy5H,aAAatT,QAAQ,KAC7C5gH,GAAahB,OAAOvE,KAAKy5H,aAAatT,QAAQ,GAAI,YAAanmH,KAAKs2d,eAExE/wd,GAAahB,OAAOvE,KAAKg8D,aAAc,QAASh8D,KAAK+7d,aAChD/7d,KAAKq2E,WACN9wE,GAAahB,OAAOvE,KAAKg8D,aAAc,QAASh8D,KAAKw5d,SACrDj0d,GAAahB,OAAOvE,KAAKg8D,aAAc,QAASh8D,KAAKw4d,YACrDjzd,GAAahB,OAAOvE,KAAKg8D,aAAc,UAAWh8D,KAAK04d,eAE3D14d,KAAKw2d,qBAETsF,EAASzge,UAAU+uN,aAAe,SAAUx5F,EAAI/vH,GAC5CsqF,EAAO9vF,UAAU+uN,aAAa9oN,KAAKtB,KAAM4wH,EAAI/vH,GACxCpD,EAAkBmzH,IAAQ5wH,KAAKs8d,UAAat8d,KAAK00d,iBAClD10d,KAAK85I,eAGbgiV,EAASzge,UAAUi8d,kBAAoB,SAAUz2d,GAC7C,IAAI+vH,EACA5wH,KAAK2sJ,eACL/7B,EAAK5wH,KAAK6iG,KAAKlgG,cAAc,IAAMkwd,GAAoB3wd,UAEnDlC,KAAKoqN,aAAax5F,EAAI/vH,GACtBb,KAAKg0d,SAAU,GAEfh0d,KAAK84D,aACL94D,KAAKy0d,gBAAiB,EACtBz0d,KAAKg1d,cAAcn0d,KAGV,UAAbA,EAAEs1D,QAAyD,KAAnCn2D,KAAKg8D,aAAah/D,MAAMkT,OAChDlQ,KAAKgwD,MAAMnvD,GAENb,KAAKg0d,UAAYh0d,KAAK84D,YAAcr7D,EAAkBmzH,IAC3D5wH,KAAKg8d,cAETh8d,KAAKu1d,aAETuG,EAASzge,UAAU+ge,aAAe,SAAUxrW,GACxC5wH,KAAK+6M,kBACD/6M,KAAKqyH,UAAUzB,KAAQA,EAAG9sH,UAAUK,SAAS0ud,GAAoBrjV,YACjExvI,KAAK85I,cACLlpB,EAAG9sH,UAAUM,IAAIyud,GAAoB3wd,SAI7C45d,EAASzge,UAAU0ge,YAAc,SAAUl7d,GACnC2K,GAAQkb,WAAa1mB,KAAKm1d,iBAC1Bn1d,KAAKk5M,cAAe,GAExBl5M,KAAKm2d,WAET2F,EAASzge,UAAUi7d,cAAgB,SAAUz1d,GACzCA,EAAE2kB,iBACEha,GAAQkb,WAAa1mB,KAAKm1d,iBAC1Bn1d,KAAKk5M,cAAe,GAExB/tH,EAAO9vF,UAAUi7d,cAAch1d,KAAKtB,KAAMa,IAE9Ci7d,EAASzge,UAAU2ge,YAAc,WAC7B,IAAIh/d,EAAQgD,KAAKivd,eAAejvd,KAAKg8D,aAAah/D,OAClD,GAAKgD,KAAKi8d,aAA2C,KAA5Bj8d,KAAKg8D,aAAah/D,MAMtC,GAAuC,KAAnCgD,KAAKg8D,aAAah/D,MAAMkT,OAAe,CAC5C,IAAIkrH,EAAgBp7H,KAAKhD,MACzB,GAAIS,EAAkBT,GAAQ,CAC1B,IAAI4qB,EAAsC,KAA5B5nB,KAAKg8D,aAAah/D,MAAe,KAAOgD,KAAKg8D,aAAah/D,MACpE4uB,EAAS5rB,KAAK4rB,OACdre,OAAY,EAChBA,GAAckf,KAAM7E,EAAS/J,SACxB7d,KAAKk1H,SACNl1H,KAAKwmB,QAAQ,uBAAwBjZ,GAEzC,IAAIsQ,EAAOtQ,EAAUsQ,KACjB8N,KACA9N,GAAQhhB,EAAS+uB,EAAOa,KAAM5O,IAAShhB,EAAS+uB,EAAO5uB,MAAO6gB,GAC9D8N,EAAW9N,GAGXzgB,EAASwuB,EAAOa,KAAM7E,EAAS+D,GAC/BvuB,EAASwuB,EAAO5uB,MAAO4qB,EAAS+D,IAEpC3rB,KAAKq7D,SAAW1vC,EAChB,IAAIsxc,GACAxwc,KAAM5vB,EAAS+uB,EAAOa,KAAMzsB,KAAKq7D,UACjCr+D,MAAOH,EAAS+uB,EAAO5uB,MAAOgD,KAAKq7D,UACnCppD,MAAO,MAEXjS,KAAKgH,cAAci2d,GAAY,GAC/Bj9d,KAAKoqN,aAAa,KAAM,MACxBpqN,KAAKy0d,gBAAiB,OAGtBz0d,KAAKy0d,gBAAiB,EACtBz0d,KAAKgH,eAAgBhK,MAAOA,IAE5Bo+H,IAAkBp7H,KAAKhD,OACvBgD,KAAKg1d,cAAc,WAGlBh1d,KAAKi8d,cACVj8d,KAAKy0d,gBAAiB,QA3CtBz0d,KAAKgH,eAAgBhK,MAAOA,IACxBS,EAAkBuC,KAAKhD,QACvBouB,GAAMhuB,SAAS,GAAI4C,KAAKg8D,aAAch8D,KAAK+mB,eAAgB/mB,KAAKolB,kBAgD5E02c,EAASzge,UAAUmsF,kBAAoB,SAAUiF,EAASC,GACtD1sF,KAAKkyd,kBAAkB,QAAS,cAAezlY,GAC/C,IAAK,IAAIruF,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKmvF,GAAUruF,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC9D,IAAIkM,EAAOzH,EAAGzE,GACd,OAAQkM,GACJ,IAAK,WACD8gB,GAAMwqG,YAAY51H,KAAKq2E,SAAUr2E,KAAKg8D,cAClCh8D,KAAKq2E,UACL9wE,GAAahB,OAAOvE,KAAKg8D,aAAc,QAASh8D,KAAKw4d,YACrDjzd,GAAahB,OAAOvE,KAAKg8D,aAAc,UAAWh8D,KAAK04d,gBAGvDnzd,GAAanB,IAAIpE,KAAKg8D,aAAc,QAASh8D,KAAKw4d,WAAYx4d,MAC9DuF,GAAanB,IAAIpE,KAAKg8D,aAAc,UAAWh8D,KAAK04d,aAAc14d,OAEtE,MACJ,IAAK,iBACDA,KAAKo5d,eACDp5d,KAAK64d,eAA0C,aAAzB74d,KAAKu/B,iBAAkC9hC,EAAkBuC,KAAK6iG,OACpF1X,EAAO9vF,UAAU0nM,WAAWzhM,KAAKtB,MAErC,MACJ,IAAK,cACD,MACJ,QACI,IAAIk9d,OAAa,EACjBA,EAAal9d,KAAK+ud,cAAczkd,EAAMmiF,EAASC,GAC/CvB,EAAO9vF,UAAUmsF,kBAAkBlmF,KAAKtB,KAAMk9d,EAAWloL,YAAakoL,EAAWlO,gBASjG8M,EAASzge,UAAU0wG,OAAS,WACxB5gB,EAAO9vF,UAAU0wG,OAAOzqG,KAAKtB,MAC7BA,KAAKo5d,eACDp5d,KAAK64d,eAA0C,aAAzB74d,KAAKu/B,iBAAkC9hC,EAAkBuC,KAAK6iG,OACpF1X,EAAO9vF,UAAU0nM,WAAWzhM,KAAKtB,OAQzC87d,EAASzge,UAAUkkC,cAAgB,WAC/B,MAAO,YAMXu8b,EAASzge,UAAUk6d,UAAY,WAC3B,IAAI71Q,EAAyC,KAA5B1/M,KAAKg8D,aAAah/D,MAAe,KAAOgD,KAAKg8D,aAAah/D,MAC3E,IAAKS,EAAkBuC,KAAKkvd,UAAW,CACnC,IAAIiO,EAAWn9d,KAAKo0d,YAChBp0d,KAAKo0d,cACLhpc,GAAMhuB,SAAS4C,KAAKm0d,YAAan0d,KAAKg8D,aAAch8D,KAAK+mB,eAAgB/mB,KAAKolB,iBAC9EplB,KAAKo0d,aAAc,GAEnBp0d,KAAKs8d,UACLt8d,KAAK44d,sBAET,IAAIjtc,EAAW3rB,KAAKy0d,gBAAmBhoc,KAAM,IAAOzsB,KAAKy/L,cACrDjwD,EAAWxvI,KAAK6iG,KAAKlgG,cAAc,IAAMkwd,GAAoBrjV,UACjE,GAAI7jH,EAASc,OAASzsB,KAAKg8D,aAAah/D,QAAUS,EAAkB+xI,GAMhE,OALIxvI,KAAK84D,aACL94D,KAAKg1d,cAAc,MACnBh1d,KAAKy0d,gBAAiB,QAE1BtpY,EAAO9vF,UAAUk6d,UAAUj0d,KAAKtB,MAGpC,GAA6B,aAAzBA,KAAKu/B,iBAAqE,KAAnCv/B,KAAKg8D,aAAah/D,MAAMkT,OAAe,CAC9E,IAAIktd,EAAalia,GAAOl7D,KAAKg8D,aAAah/D,MAAOgD,KAAK25L,cAAe,SAAS,GAC9E35L,KAAK+hM,WAAaq7R,EAAWv/c,KACzBpgB,EAAkB2/d,EAAWnrd,SAC7Bmrd,EAAWnrd,MAAQipD,GAAOl7D,KAAKg8D,aAAah/D,MAAOgD,KAAK25L,cAAe,cAAc,GAAM1nL,OAE/FjS,KAAKinM,YAAcm2R,EAAWnrd,MACzBxU,EAAkBuC,KAAK+hM,YAGnBo7R,IACLn9d,KAAKy0d,gBAAiB,EACtBz0d,KAAK+6M,mBAJL/6M,KAAK23d,mBAAmB33d,KAAK+hM,WAAY,MAAM,GAOlD/hM,KAAKo0d,cAAep0d,KAAKg0d,SAAYh0d,KAAK8hM,cAC3C9hM,KAAKg8d,cAGTv+d,EAAkBuC,KAAKkvd,WAAalvd,KAAKi8d,cAAgBx+d,EAAkBiiN,IAAeA,IAAe1/M,KAAKhD,OAC9GgD,KAAKg8d,cAET7wY,EAAO9vF,UAAUk6d,UAAUj0d,KAAKtB,OAMpC87d,EAASzge,UAAUo/H,QAAU,WACpBz6H,KAAKilB,UAGNzZ,GAAQkb,WAAa1mB,KAAKm1d,iBAC1Bn1d,KAAKk5M,cAAe,GAExB/tH,EAAO9vF,UAAUo/H,QAAQn5H,KAAKtB,QAElC6qF,IACI3jF,GAAS,IACV40d,EAASzge,UAAW,gBAAY,GACnCwvF,IACI3jF,GAAS,IACV40d,EAASzge,UAAW,mBAAe,GACtCwvF,IACI3jF,OACD40d,EAASzge,UAAW,sBAAkB,GACzCwvF,IACI3jF,GAAS,IACV40d,EAASzge,UAAW,sBAAkB,GACzCwvF,IACI3jF,EAAS,OACV40d,EAASzge,UAAW,aAAS,GAChCwvF,IACI3jF,EAAS,OACV40d,EAASzge,UAAW,aAAS,GAChCwvF,IACI3jF,GAAS,IACV40d,EAASzge,UAAW,uBAAmB,GAC1CwvF,IACI/hF,KACDgzd,EAASzge,UAAW,4BAAwB,GAC/CwvF,IACI/hF,KACDgzd,EAASzge,UAAW,iBAAa,GACpCwvF,IACI3jF,EAAS,OACV40d,EAASzge,UAAW,qBAAiB,GACxCwvF,IACI3jF,EAAS,UACV40d,EAASzge,UAAW,sBAAkB,GACzCwvF,IACI3jF,EAAS,OACV40d,EAASzge,UAAW,4BAAwB,GAC/Cyge,EAAWjxY,IACPzhF,GACD0yd,IAELrI,ICpnBEnpY,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAiBhEi2b,GAAoB73R,KAAO,iBAC3B63R,GAAoBn9a,KAAO,8CAY3B,IAAI2nb,GAA8B,SAAUlyY,GAKxC,SAASkyY,EAAarqd,EAAShS,GAC3B,IAAIjB,EAAQorF,EAAO7pF,KAAKtB,KAAMgT,EAAShS,IAAYhB,KAEnD,OADAD,EAAMu9d,YAAa,EACZv9d,EAyTX,OAhUAuqF,GAAU+yY,EAAclyY,GAcxBkyY,EAAahie,UAAUoX,UAAY,WAC/B04E,EAAO9vF,UAAUoX,UAAUnR,KAAKtB,OAEpCq9d,EAAahie,UAAUo6d,eAAiB,WACpC,MAAO,oBAEX4H,EAAahie,UAAUsnM,SAAW,SAAUjnI,GACxC,IAAIw9Z,EAAcx9Z,EAAQA,EAAMr8D,QAAUW,KAAK07D,MAAQ17D,KAAK07D,MAAMr8D,QAAU,IAAIgkE,GAC5Ek6Z,EAAmC,KAArBv9d,KAAK46D,aAAuBn9D,EAAkBuC,KAAKhD,OAAoBgD,KAAKu9d,WAAf,QAC3E3ia,EAAoC,KAArB56D,KAAK46D,aAAuBn9D,EAAkBuC,KAAKhD,OAAuBgD,KAAK46D,YAAlB56D,KAAKhD,MACrF,GAAIgD,KAAKs9d,WACL,OAAOpE,EAEX,GAAyB,OAArBl5d,KAAK46D,YAAsB,CAC3B,IAAIypB,EAAWrkF,KAAKqvd,WAAWrvd,KAAKujE,YAAY60H,OAChD,IAAMp4L,KAAKujE,sBAAsBC,IAA6B,WAAb6gB,IAAsC,WAAbA,EAGrE,CACD,IAAIm5Y,EAAW//d,EAAkBuC,KAAK4rB,OAAO5uB,OAA6B,GAApBgD,KAAK4rB,OAAO5uB,MAClEk8d,EAAYr1Z,MAAM25Z,EAASD,EAAY3ia,EAAa56D,KAAK26D,WAAY36D,KAAKmvJ,mBAJ1E+pU,EAAYr1Z,MAAM,GAAI05Z,EAAY3ia,EAAa56D,KAAK26D,WAAY36D,KAAKmvJ,cAU7E,OAHK1xJ,EAAkBuC,KAAKy9d,kBACxBvE,EAAY9oU,KAAKpwJ,KAAKy9d,iBAEnBvE,GAEXmE,EAAahie,UAAUo9d,YAAc,SAAU53d,GAC3C,IAAId,EAAQC,KACZA,KAAKg0d,SAAU,EACfh0d,KAAKy0d,gBAAiB,EAClBh3d,EAAkBuC,KAAK6iG,OACvB1X,EAAO9vF,UAAU0nM,WAAWzhM,KAAKtB,MAAM,GAE3C,IAAI09d,EAA4B,KAAd78d,EAAEinB,SAAgC,KAAdjnB,EAAEinB,QAExC,GADA9nB,KAAK46D,YAAc56D,KAAKkzd,YAAYl2d,MAChC0ge,EAIA,OAHA19d,KAAK46D,YAAmC,KAArB56D,KAAK46D,YAAqB,KAAO56D,KAAK46D,YACzD56D,KAAK6zd,iBAAkB,OACvB7zd,KAAKswd,UAAUtwd,KAAKujE,WAAYvjE,KAAK4rB,QAGzC5rB,KAAK84D,YAAa,EAClB94D,KAAKinM,YAAc,KACnB,IAAI15L,GACAurd,sBAAsB,EACtBrsc,KAAMzsB,KAAKkzd,YAAYl2d,MACvB+7d,WAAY,SAAUx1Z,EAAY7H,EAAO9vC,GACjCre,EAAUsrB,SAGd94B,EAAMu9d,YAAa,EACnBv9d,EAAM49d,aAAap6Z,EAAY7H,EAAO9vC,KAE1CiN,QAAQ,GAEZ74B,KAAKwmB,QAAQ,YAAajZ,GACtBA,EAAUsrB,QAGT74B,KAAKs9d,YAAe/vd,EAAUurd,sBAC/B94d,KAAK29d,aAAa39d,KAAKujE,WAAY,KAAMvjE,KAAK4rB,SAGtDyxc,EAAahie,UAAUsie,aAAe,SAAUp6Z,EAAY7H,EAAO9vC,GAC/D5rB,KAAK6zd,iBAAkB,EACE,KAArB7zd,KAAK46D,cAAuB56D,KAAK46D,YAAYn+D,QAAUuD,KAAK8uI,WAAa9uI,KAAKs9d,YAC9Et9d,KAAKswd,UAAU/sZ,EAAY33C,EAAQ8vC,GAGnC17D,KAAKu1d,aAGb8H,EAAahie,UAAU20D,MAAQ,SAAUnvD,EAAGmrB,IACpCvuB,EAAkBuuB,IAA0B,eAAbA,IAC/Bm/D,EAAO9vF,UAAU20D,MAAM1uD,KAAKtB,KAAMa,GAElCb,KAAK6zd,iBACL7zd,KAAKu1d,aAGb8H,EAAahie,UAAUw1d,iBAAmB,SAAU53R,EAAWp2F,EAAMhiG,EAAG0zd,GACpEv0d,KAAKqxd,mBAAqB,KAC1BlmY,EAAO9vF,UAAUw1d,iBAAiBvvd,KAAKtB,KAAMi5L,EAAWp2F,EAAMhiG,GAC9D,IAAIgd,EAAO7d,KAAK6iG,KAAKlgG,cAAc,IAAMkwd,GAAoBjiW,IACxDnzH,EAAkBogB,IACnBxZ,GAAawZ,GAAOg1c,GAAoB3wd,OAE5ClC,KAAK49d,kBAETP,EAAahie,UAAUuie,eAAiB,WACpC,GAAI59d,KAAKs8d,WAAa7+d,EAAkBuC,KAAK25L,cAAc,IAAK,CAC5D,IAAIl/H,GAASz6D,KAAK25L,cAAc,IAE3Bl8L,EADYy9D,GAAOl7D,KAAKg8D,aAAah/D,MAAOy9D,EAAO,aAAcz6D,KAAK26D,YACzC98C,OAC9BstE,EAAO9vF,UAAUkhe,YAAYj7d,KAAKtB,KAAMA,KAAK25L,cAAc,IAAI,KAI3E0jS,EAAahie,UAAU+uN,aAAe,SAAUx5F,EAAI/vH,GAChD,GAAKb,KAAKqyH,UAAUzB,GAGpB,IAAKnzH,EAAkBoD,IAAiB,YAAXA,EAAE6F,MAAmC,UAAb7F,EAAEs1D,QAAsBn2D,KAAKqyH,UAAUzB,GAAK,CAC7F,IAAI5zH,EAAQgD,KAAKymN,kBAAkB71F,EAAG/9G,aAAa,eACnD7S,KAAKinM,YAAcjnM,KAAK8xd,gBAAgB90d,GACxCgD,KAAKo8d,aAAaxrW,GAClB5wH,KAAK+hM,WAAanxE,EAClB5wH,KAAKskN,kBAAkBzjN,GACnBb,KAAKs8d,WACLt8d,KAAKi0d,iBAAkB,EACvB9oY,EAAO9vF,UAAUkhe,YAAYj7d,KAAKtB,KAAM4wH,IAE5CltH,EAAW1D,KAAKg8D,cAAgBw8E,wBAAyBx4I,KAAK+hM,WAAa/hM,KAAK+hM,WAAWz+L,GAAK,YAGhG6nF,EAAO9vF,UAAU+uN,aAAa9oN,KAAKtB,KAAM4wH,EAAI/vH,IAGrDw8d,EAAahie,UAAU81d,WAAa,SAAU5tZ,EAAYs6Z,GACtD,IAAI99d,EAAQC,KACR4rB,EAASu/D,EAAO9vF,UAAU81d,WAAW7vd,KAAKtB,KAAMujE,EAAYs6Z,GAChE,GAAIpge,EAAkBmuB,EAAOwqK,aACzBxqK,EAAOwqK,YAAc,SAAUv1L,GACvBd,EAAMmjW,WACNznS,GAAgB56D,EAAEgd,KAAM9d,EAAM66D,YAAa76D,EAAM46D,WAAY56D,EAAMw9d,iBAI1E,CACD,IAAIO,EAAgBlyc,EAAOwqK,YAC3BxqK,EAAOwqK,YAAc,SAAUv1L,GACvBd,EAAMmjW,WACNznS,GAAgB56D,EAAEgd,KAAM9d,EAAM66D,YAAa76D,EAAM46D,WAAY56D,EAAMw9d,YAEvEO,EAAcvie,MAAMwE,GAAQc,KAGpC,OAAO+qB,GAGXyxc,EAAahie,UAAUsmB,YAAc,WAC7BlkB,EAAkBuC,KAAK02d,kBACvB12d,KAAK02d,eAAiB12d,KAAKy5H,aAAatT,QAAQ,IAAMnmH,KAAKy5H,aAAan0G,aACpE8F,GAAMyrG,WAAW,wCAAuC72H,KAAKy5H,aAAah/G,WAC9E9W,GAAU3D,KAAK02d,gBAAiB7D,GAAoBU,aACpD/4c,IACIrT,OAAQnH,KAAK02d,eACb1gd,MAAOxK,GAAQkb,SAAW,OAAS,SAEvC/E,GAAY3hB,KAAK02d,kBAGzB2G,EAAahie,UAAUqnB,YAAc,WAC5BjlB,EAAkBuC,KAAK02d,kBACxBh0c,GAAY1iB,KAAK02d,gBACjBryd,GAAarE,KAAK02d,gBAAiB7D,GAAoBU,aACnDvzd,KAAK02d,eAAe5yd,UAAUK,SA3L1B,sBA4LJkB,EAAOrF,KAAK02d,gBAGZ12d,KAAK02d,eAAe10d,UAAY,GAEpChC,KAAK02d,eAAiB,OAG9B2G,EAAahie,UAAUw9d,YAAc,WACjC,OAAO,GAEXwE,EAAahie,UAAUyvH,YAAc,WACjC9qH,KAAK6iG,KAAK12F,UAAY,EACtBg/E,EAAO9vF,UAAUyvH,YAAYxpH,KAAKtB,OAEtCq9d,EAAahie,UAAUy7d,cAAgB,WACnC,MAAkD,KAAnC92d,KAAKg8D,aAAah/D,MAAMkT,QAE3Cmtd,EAAahie,UAAU+/d,cAAgB,WACnC,OAAOp7d,KAAK+9d,iBAEhBV,EAAahie,UAAU27d,kBAAoB,SAAUh2d,GACjD,OAAO,GAMXq8d,EAAahie,UAAU+7d,UAAY,WAC1Bp3d,KAAKilB,UAGNjlB,KAAK6zd,gBACL7zd,KAAK45d,gBAGT55d,KAAK6zd,iBAAkB,EACvB7zd,KAAKi0d,iBAAkB,EACnBx2d,EAAkBuC,KAAK6iG,MACvB7iG,KAAK+iM,aAGL/iM,KAAKswd,UAAUtwd,KAAKujE,WAAYvjE,KAAK4rB,WAO7Cyxc,EAAahie,UAAUk6d,UAAY,WAC/BpqY,EAAO9vF,UAAUk6d,UAAUj0d,KAAKtB,MAChCA,KAAKinM,aAAe,GAMxBo2R,EAAahie,UAAUmsF,kBAAoB,SAAUiF,EAASC,GAC1D1sF,KAAKkyd,kBAAkB,QAAS,cAAezlY,GAC/C,IAAK,IAAIruF,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKmvF,GAAUruF,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC9D,IAAIkM,EAAOzH,EAAGzE,GACd,OAAQkM,GACJ,IAAK,kBACD,GAAItK,KAAK+9d,gBAAiB,CACtB,IAAI5sW,EAAS/lG,GAAMyrG,WAAWg8V,GAAoBn9a,KAAM11C,KAAKy5H,aAAah/G,WAC1Eza,KAAKy5H,aAAatT,QAAQ,GAAKgL,EAC/B5rH,GAAanB,IAAIpE,KAAKy5H,aAAatT,QAAQ,GAAI,QAASnmH,KAAKs2d,cAAet2d,WAG5EqF,EAAOrF,KAAKy5H,aAAatT,QAAQ,IACjCnmH,KAAKy5H,aAAatT,QAAQ,GAAK,KAEnC,MACJ,QACI,IAAI63W,OAAW,EACfA,EAAWh+d,KAAK+ud,cAAczkd,EAAMmiF,EAASC,GAC7CvB,EAAO9vF,UAAUmsF,kBAAkBlmF,KAAKtB,KAAMg+d,EAAShpL,YAAagpL,EAAShP,gBAS7FqO,EAAahie,UAAUkkC,cAAgB,WACnC,MAAO,gBAMX89b,EAAahie,UAAU0wG,OAAS,WAC5B5gB,EAAO9vF,UAAU0wG,OAAOzqG,KAAKtB,OAGjC6qF,IACI9iF,GAAU/K,MAAO,KAAM02E,QAAS,KAAM0lH,QAAS,MAAQ8C,KACxDmhS,EAAahie,UAAW,cAAU,GACrCwvF,IACI3jF,GAAS,IACVm2d,EAAahie,UAAW,kBAAc,GACzCwvF,IACI3jF,GAAS,IACVm2d,EAAahie,UAAW,uBAAmB,GAC9CwvF,IACI3jF,GAAS,IACVm2d,EAAahie,UAAW,iBAAa,GACxCwvF,IACI3jF,EAAS,KACVm2d,EAAahie,UAAW,uBAAmB,GAC9CwvF,IACI3jF,OACDm2d,EAAahie,UAAW,sBAAkB,GAC7CwvF,IACI3jF,EAAS,OACVm2d,EAAahie,UAAW,aAAS,GACpCwvF,IACI3jF,EAAS,IACVm2d,EAAahie,UAAW,iBAAa,GACxCwvF,IACI3jF,EAAS,aACVm2d,EAAahie,UAAW,kBAAc,GACzCwvF,IACI/hF,KACDu0d,EAAahie,UAAW,iBAAa,GACxCwvF,IACI3jF,EAAS,OACVm2d,EAAahie,UAAW,aAAS,GACpCwvF,IACI3jF,EAAS,UACVm2d,EAAahie,UAAW,sBAAkB,GAC7CwvF,IACI3jF,EAAS,OACVm2d,EAAahie,UAAW,qBAAiB,GAC5CwvF,IACI3jF,EAAS,OACVm2d,EAAahie,UAAW,4BAAwB,GACnDwvF,IACI3jF,GAAS,IACVm2d,EAAahie,UAAW,sBAAkB,GAC7CwvF,IACI3jF,EAAS,OACVm2d,EAAahie,UAAW,YAAQ,GACnCgie,EAAexyY,IACXzhF,GACDi0d,IAELvB,I3XxWE3/Z,GAAY,eACZC,GAAY,eACZE,GAAW,cACXC,GAAc,iB4XTd+tB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAgB5DipL,GAAQ,gBAKRo4Q,GAAY,kBAGZC,GAAO,UAEPC,GAAa,gBACbC,GAAgB,kBAGhBC,GAAY,cAEZC,GAAkB,+BAKlBC,GAAkB,oBA4BlBC,GAA6B,SAAUrzY,GAKvC,SAASqzY,EAAYzoY,EAAQ/0F,GACzB,IAAIjB,EAAQorF,EAAO7pF,KAAKtB,KAAM+1F,EAAQ/0F,IAAYhB,KAIlD,OAHAD,EAAMm0d,YAAa,EACnBn0d,EAAM0+d,mBAAoB,EAC1B1+d,EAAM2+d,eAAgB,EACf3+d,EAymFX,OAlnFAuqF,GAAUk0Y,EAAarzY,GAYvBqzY,EAAYnje,UAAUsje,UAAY,SAAUrwb,GACpCA,EACAtuC,KAAK87D,eAAeh4D,UAAUM,IA5C1B,SA+CJpE,KAAK87D,eAAeh4D,UAAUS,OA/C1B,SAiDJvE,KAAKqnH,WACLrnH,KAAKqnH,SAASn0G,UAAYo7B,EAC1BtuC,KAAKqnH,SAASz7D,aAGtB4ya,EAAYnje,UAAUw1F,gBAAkB,WACpC,IAAIgB,KAWJ,MAVkB,aAAd7xF,KAAK+9B,OACL/9B,KAAK4+d,kBAAmB,EACxB5+d,KAAK6+d,kBAAmB,EACxB7+d,KAAK8+d,oBAAqB,EAC1B9+d,KAAKm1d,gBAAiB,EACtBtjY,EAAQrtF,MACJ6sF,OAAQ,oBACRpxF,MAAOD,SAGR6xF,GAEX2sY,EAAYnje,UAAU0je,oBAAsB,WACxC,GAAIzge,OAAOhB,KAAK0C,KAAK81E,gBAAgBr5E,OACjC,IAAK,IAAI2B,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAK0C,KAAK81E,gBAAiB13E,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC1E,IAAI+3E,EAAWtzE,EAAGzE,GAClB,OAAQ+3E,GACJ,IAAK,QACDn2E,KAAK87D,eAAeh4D,UAAUM,IAAIpE,KAAK81E,eAAeK,IACtDn2E,KAAKytJ,aAAa3pJ,UAAUM,IAAIpE,KAAK81E,eAAeK,IACpD,MACJ,IAAK,WACDn2E,KAAKy/B,QAAO,GACZ,MACJ,IAAK,cACDz/B,KAAKg8D,aAAax4D,aAAa2yE,EAAUn2E,KAAK81E,eAAeK,IAC7D,MACJ,SACuB,MAGH53E,QAAQ43E,IAAa,EACjCn2E,KAAKgB,QAAQwC,aAAa2yE,EAAUn2E,KAAK81E,eAAeK,KAHxC,OAAQ,WAAY,gBAAiB,QAKnC53E,QAAQ43E,IAAa,EACvCn2E,KAAKwzd,cAAchwd,aAAa2yE,EAAUn2E,KAAK81E,eAAeK,KAL7C,QAAS,OAAQ,QAAS,SAOxB53E,QAAQ43E,IAAa,EACxCn2E,KAAK87D,eAAet4D,aAAa2yE,EAAUn2E,KAAK81E,eAAeK,IAG/Dn2E,KAAKg8D,aAAax4D,aAAa2yE,EAAUn2E,KAAK81E,eAAeK,OAOrFqoZ,EAAYnje,UAAU2je,eAAiB,SAAU1wb,GACzCA,GAAuB,aAAdtuC,KAAK+9B,KACd/9B,KAAKg8D,aAAax4D,aAAa,WAAY,QAG3CxD,KAAKg8D,aAAatwD,gBAAgB,aAG1C8yd,EAAYnje,UAAU4je,kBAAoB,SAAU3wb,GAC5CA,GACItuC,KAAKk/d,aAAaz+d,WAClBT,KAAKk/d,aAAax6d,MAAM4xC,QAAU,GAGlCt2C,KAAKm/d,iBAAiBx9d,YAAY3B,KAAKk/d,cAE3Cl/d,KAAKm/d,iBAAiBr7d,UAAUS,OAAOg6d,MAGvCv+d,KAAKk/d,aAAax6d,MAAM4xC,QAAU,OAClCt2C,KAAKm/d,iBAAiBr7d,UAAUM,IAAIm6d,MAG5CC,EAAYnje,UAAU+je,eAAiB,WAC/Bp/d,KAAKiT,WACLjT,KAAKytJ,aAAa3pJ,UAAUM,IAAIpE,KAAKiT,UACrCjT,KAAK87D,eAAeh4D,UAAUM,IAAIpE,KAAKiT,YAG/Curd,EAAYnje,UAAUgke,aAAe,WACjC,GAAI7zd,GAAQkb,UAA2B,aAAd1mB,KAAK+9B,MAAuB/9B,KAAKm1d,eAAiB,CACvE,IAAI98J,EAAUr4T,KACdnE,OAAO+/d,WAAa,WAChBvjK,EAAQk9J,aAEZ1oX,QAAQgvX,aAAc,IAE1B,IAAItud,GAAcqxD,MAAO5+D,KAAKqnH,SAAUxuF,QAAQ,GAEhD,GADA74B,KAAKwmB,QAAQ,OAAQjZ,IACjBA,EAAUsrB,OAAd,CAYA,GARA74B,KAAKs/d,uBACL9+d,SAASuL,KAAKpK,YAAY3B,KAAKqnH,SAASrmH,SACxChB,KAAK45d,eACa,aAAd55d,KAAK+9B,MACLp6B,GAAU3D,KAAK87D,iBA7IP,gBA+IZ97D,KAAKqnH,SAASpD,MAPIxsF,KAAM,SAAUvsB,SAAU,MAQ5CxH,EAAW1D,KAAKg8D,cAAgBw3D,gBAAiB,UAC5CxzH,KAAKu/d,aAAc,CACpB,IAAItmS,EAAYj5L,KAAK6iG,KAAKlgG,cAAc,MACpCs2L,IACAj5L,KAAKw/d,SAAWvmS,EAAUr3L,UAAYq3L,EAAUr3L,WAAU,GAAQq3L,GAEtEj5L,KAAKu/d,cAAe,EAExBv/d,KAAKy/d,iBAAiB,MACtBz/d,KAAK+N,OAAO,WAAaojF,OAAQ,oBAAqB1xD,OAAsB,aAAdz/B,KAAK+9B,KAAqBl9B,EAAGb,SAE/Fw+d,EAAYnje,UAAUike,qBAAuB,WACzC,GAAIt/d,KAAKi5L,WAAaj5L,KAAKi5L,UAAUt2L,cAAc,MAC7Cgsd,GAAoB/9V,IAAK,CAC3B,IAAI5vH,OAAU,EAWE,QATZA,EADc,aAAdhB,KAAK+9B,KACK/9B,KAAK6iG,KAAKlgG,cAAc,MAC5Bgsd,GAAoB/9V,GAAK,SACzBqtW,GAAY,KAGRj+d,KAAKi5L,UAAUt2L,cAAc,MACjCgsd,GAAoB/9V,GAAK,SACzBqtW,GAAY,QAGlBj+d,KAAK85I,cACL95I,KAAK0/d,aAAa1+d,MAI9Bw9d,EAAYnje,UAAUske,oBAAsB,SAAUnje,GAClD,IAAImpH,EACAnpH,EACAmpH,EAAgBzqD,GAAO1+D,EAAMwD,KAAK25L,cAAe,aAAc35L,KAAK26D,YAGhE36D,KAAKhD,OAASgD,KAAKhD,MAAMP,OACzBy+D,GAAOl7D,KAAKhD,MAAMgD,KAAKhD,MAAMP,OAAS,GAAIuD,KAAK25L,cAAe,aAAc35L,KAAK26D,YAGjFgrD,EAAgB,KAGpBA,GAAwC,OAAvBA,EAAc9nG,OAC/B7d,KAAK0/d,aAAa/5W,EAAc9nG,MAChC7d,KAAK+6d,aAAap1W,EAAc9nG,KAAM8nG,EAAc1zG,SAG5Dusd,EAAYnje,UAAUi6d,kBAAoB,WAUtC,OARIp/V,gBAAiB,QACjBvC,YAAa3zH,KAAKgB,QAAQsC,GAAK,WAC/BsO,KAAQ,UACR6kS,uBAAwB,OACxBj+J,wBAAyB,OACzB/kB,gBAAiB,OACjBD,gBAAiB,UAIzBgrW,EAAYnje,UAAUuke,eAAiB,WACnCl8d,EAAW1D,KAAKi5L,WAAa31L,GAAMtD,KAAKgB,QAAQsC,GAAK,WAAYsO,KAAQ,UAAWy8G,cAAe,UACnG,IAAIwxW,IAAiB7/d,KAAKg8D,aAAqB,SAC/Ct4D,EAAW1D,KAAKg8D,aAAch8D,KAAKs1d,qBAC/BuK,GACAn8d,EAAW1D,KAAKg8D,cAAgBk6D,gBAAiB,SAErD,IAAItF,EAEA7iG,GADJ6iG,EAAK5wH,KAAK6iG,KAAKrhG,iBAAiB,MAAQmtd,GAAoB/9V,KAC9Cn0H,OACd,GAAIm0H,GAAMA,EAAGn0H,OACT,KAAOsxB,EAAO,GACyC,SAA/C6iG,EAAG7iG,EAAO,GAAGlb,aAAa,kBAC1B+9G,EAAG7iG,EAAO,GAAGvqB,aAAa,gBAAiB,SAE/CuqB,KAIZywc,EAAYnje,UAAUyke,oBAAsB,SAAUj/d,GAClD,IAAI+C,EAEA5G,GADJ4G,EAAW5D,KAAK+/d,sBAAsBv+d,iBAAiB,iBAClCoC,EAASnH,OAAS,GAAGoW,aAAa,cAQvD,GAPKpV,EAAkBuC,KAAKhD,SACxBgD,KAAKgge,WAAahge,KAAKhD,MAAMqE,SAEjCrB,KAAKige,YAAYjje,EAAO6D,GACxBb,KAAKkge,sBACLlge,KAAKmge,gBAAgBnge,KAAKoge,eAC1Bpge,KAAKqge,mBACDrge,KAAKw/d,UAAYx/d,KAAKkvd,SAAU,CAChC,IAAIrsX,EAAO7iG,KAAKw/d,SAAS59d,UAAY5B,KAAKw/d,SAAS59d,WAAU,GAAQ5B,KAAKw/d,SAC1Ex/d,KAAK6wd,iBAAiBhuX,EAAM7iG,KAAKsge,UACjCtge,KAAKuge,qBAIb/B,EAAYnje,UAAUy1d,gBAAkB,SAAUjwd,GAC9CsqF,EAAO9vF,UAAUy1d,gBAAgBxvd,KAAKtB,KAAMa,GAC5Cb,KAAK8qH,cACL9qH,KAAKq/d,gBAETb,EAAYnje,UAAUwzH,cAAgB,WAKlC,OAJA7uH,KAAKwge,mBAAqBxge,KAAKg8D,aACb,aAAdh8D,KAAK+9B,MACL/9B,KAAK+N,OAAO,iBAAmBojF,OAAQ,oBAAqB1xD,OAAsB,aAAdz/B,KAAK+9B,OAEtE/9B,KAAKwge,mBAAmBxje,OAEnCwhe,EAAYnje,UAAUw1d,iBAAmB,SAAU53R,EAAWp2F,EAAMhiG,EAAG0zd,GACnEppY,EAAO9vF,UAAUw1d,iBAAiBvvd,KAAKtB,KAAMi5L,EAAWp2F,EAAMhiG,GAC5C,aAAdb,KAAK+9B,MAAuB/9B,KAAKyge,eACjCzge,KAAK+N,OAAO,aAAeojF,OAAQ,oBAAqB1xD,OAAsB,aAAdz/B,KAAK+9B,OAEpE/9B,KAAKw/d,UAAax/d,KAAKsge,SAKlB7ie,EAAkBuC,KAAKsge,WAAsC,IAAzBtge,KAAKsge,SAAS7je,SACxDuD,KAAKsge,SAAWz9X,IALhB7iG,KAAKw/d,SAAWvmS,EAAUr3L,UAAYq3L,EAAUr3L,WAAU,GAAQq3L,EAClEj5L,KAAKsge,SAAWz9X,EAChB7iG,KAAK0ge,mBAAqB1ge,KAAK25L,gBAK9B35L,KAAK2ge,mBAAqB99X,EAAKpmG,QAAU,IAAMuD,KAAK4+d,kBAAoB5+d,KAAK8yd,YAAc9yd,KAAKm1d,eACjGn1d,KAAK4ge,oBAAoB5ge,KAAK6ge,UAAW7ge,KAAK4rB,SAG9C5rB,KAAKhD,OAASgD,KAAKhD,MAAMP,QACzBuD,KAAKuge,mBAETvge,KAAK4/d,iBACL5/d,KAAK8ge,mBACL9ge,KAAK4jN,iBACAnmN,EAAkBuC,KAAK+ge,kBACxB/ge,KAAK+ge,kBAEJtje,EAAkBuC,KAAKghe,kBACxBhhe,KAAKghe,kBAELhhe,KAAKihe,cACLjhe,KAAKkhe,qBACLlhe,KAAKmhe,gBACLnhe,KAAKohe,qBACLphe,KAAKqhe,iBAAiB,KAAMrhe,KAAKhD,MAAO,OAE5CgD,KAAK8qH,cACL9qH,KAAK45d,eACD55d,KAAK6zd,kBACL7zd,KAAK6zd,iBAAkB,EACvB7zd,KAAKq/d,kBAGbb,EAAYnje,UAAUkle,iBAAmB,WACrC,IAAIvje,EACAgE,EACAqC,EAAYrD,KAAK6+d,iBACjBZ,GACAtP,GAAoBn/U,SACxB,IAAK/xI,EAAkBuC,KAAKhD,OACxB,IAAK,IAAIiV,EAAQ,GAAIxU,EAAkBuC,KAAKhD,MAAMiV,IAASA,IAGvD,GAFAjV,EAAQgD,KAAKhD,MAAMiV,GACnBjR,EAAUhB,KAAKi5L,UAAUt2L,cAAc,kBAAoB3F,EAAQ,MACtD,CAWT,GAVA2G,GAAU3C,GAAUqC,GAChBrD,KAAK6+d,kBAAoB79d,EAAQ6mM,iBAC9B7mM,EAAQ2lM,uBAAuB7iM,UAAUK,SAASwqd,GAAoB57X,UACpE/xF,EAAQq/G,oBACTr/G,EAAQq/G,mBAAmBv8G,UAAUK,SAASwqd,GAAoB57X,SACtEpvF,GAAU3C,EAAQ2lM,wBAAyBtjM,GAE3CrD,KAAK6+d,kBAAoB7+d,KAAK4rB,OAAOwtK,UAAYp4L,EAAQ2lM,uBAAuB7iM,UAAUK,SAAS85d,KACnGj+d,KAAKshe,cAActke,GAEnBgD,KAAK6+d,kBAAoB79d,EAAQ8C,UAAUK,SAASwqd,GAAoBzsd,OAAQ,CAChFmC,GAAarD,GAAU2td,GAAoBzsd,OAC3C,IAAI+ud,EAAUjwd,EAAQqT,cAAc7S,iBAAiB,IACjDmtd,GAAoB/9V,GAAK,SAAWqtW,GAAY,KAChDhN,EAAQx0d,OAAS,EACjBkH,GAAUstd,EAAQ,IAAKtC,GAAoBzsd,QAG3ClC,KAAK+vd,aACLpsd,GAAU3D,KAAK6iG,MAAO8rX,GAAoBC,SAIlD,GADA5td,EAAQwC,aAAa,gBAAiB,QACpB,aAAdxD,KAAK+9B,MAAuB/8B,EAAQ8C,UAAUK,SAAS,YAAa,CACpE,IAAIo9d,EAAYvge,EAAQmE,kBAAkB0N,aAAa,gBACvD,GAAIpV,EAAkB8je,IAA4B,UAAdA,EAAuB,CACvD,IAAIthe,GACAkxF,OAAQ,oBACR1xD,OAAsB,aAAdz/B,KAAK+9B,KACb6yF,GAAI5vH,EACJH,EAAG,MAEPb,KAAK+N,OAAO,aAAc9N,KAM9CD,KAAKwhe,iBACLxhe,KAAKyhe,qBAETjD,EAAYnje,UAAUime,cAAgB,SAAUtke,GAC5C,IAAIgE,EACA0ge,EACAr+d,EAAYrD,KAAK6+d,iBACjBZ,GACAtP,GAAoBn/U,SACxBkyV,EAAW1ge,EAAUhB,KAAKi5L,UAAUt2L,cAAc,kBAAoB3F,EAAQ,MAC9E,IAAIb,EAAI,EACJonB,EAAI,EACJwK,GAAO,EACP4zc,GAAQ,EACZ,GACQ3ge,GAAWA,EAAQ2lM,yBACd3lM,EAAQ2lM,uBAAuB7iM,UAAUK,SAAS85d,KACnDj9d,EAAQ2lM,uBAAuB7iM,UAAUK,SAASwqd,GAAoB/9V,MAC1E7iG,GAAO,IAENA,IAAS/sB,GAAYA,EAAQ2lM,wBAC3B3lM,EAAQ2lM,uBAAuB7iM,UAAUK,SAASwqd,GAAoB57X,OACzE52F,EAAI,GAGJ6E,EAAUA,EAAQ2lM,uBAElB+6R,GAAYA,EAASrhX,qBAChBqhX,EAASrhX,mBAAmBv8G,UAAUK,SAAS85d,KAChDyD,EAASrhX,mBAAmBv8G,UAAUK,SAASwqd,GAAoB/9V,MACvE+wW,GAAQ,IAEPA,IAAUD,GAAaA,EAASrhX,oBAC9BqhX,EAASrhX,mBAAmBv8G,UAAUK,SAASwqd,GAAoB57X,OACtExvE,EAAI,GAGJm+c,EAAWA,EAASrhX,yBAEnBlkH,EAAI,IAAMonB,EAAI,IACnBwK,GAAQ4zc,IAAU3ge,EAAQ2lM,uBAAuB7iM,UAAUK,SAAS85d,IACpEt6d,GAAU3C,EAAQ2lM,wBAAyBtjM,GAEtC0qB,GAAQ4zc,GAAS3ge,EAAQ2lM,uBAAuB7iM,UAAUK,SAAS85d,KACxE55d,GAAarD,EAAQ2lM,wBAAyBtjM,IAGtDm7d,EAAYnje,UAAUmme,eAAiB,WACnC,IAAII,EAAc5he,KAAK6iG,KAAKrhG,iBAAiB,MAAQmtd,GAAoB/9V,IAAIn0H,OACzEole,EAAoB7he,KAAK6iG,KAAKrhG,iBAAiB,MAAQmtd,GAAoBn/U,UAAU/yI,OACpFmle,IAAgBC,GAAqC,aAAd7he,KAAK+9B,MAAuB/9B,KAAKyge,eACzEzge,KAAK+N,OAAO,kBAAoBojF,OAAQ,oBAAqB1xD,OAAsB,aAAdz/B,KAAK+9B,KAAqB/gC,MAAO,UAErG4ke,IAAgBC,GAAqC,aAAd7he,KAAK+9B,MAAuB/9B,KAAKyge,eACzEzge,KAAK+N,OAAO,kBAAoBojF,OAAQ,oBAAqB1xD,OAAsB,aAAdz/B,KAAK+9B,KAAqB/gC,MAAO,aAG9Gwhe,EAAYnje,UAAUyme,UAAY,SAAUjhe,GACnCb,KAAK+he,aAA6B,aAAd/he,KAAK+9B,KAQpB/9B,KAAK+he,aAA6B,aAAd/he,KAAK+9B,MAAwB/9B,KAAK2sJ,eAC5D3sJ,KAAKo3d,YARwB,KAAzBp3d,KAAK6uH,gBACL7uH,KAAKo3d,YAGLp3d,KAAKu1d,aAOjBiJ,EAAYnje,UAAU2me,MAAQ,SAAUnhe,GACpC,IAAId,EAAQC,KACZ,GAAkB,aAAdA,KAAK+9B,OAAwB/9B,KAAK+he,YAAa,CAG1Ctke,EAFMyrB,OAAOC,aAAatoB,EAAEinB,SACNnY,MAAM,SAE7B3P,KAAKk0d,YAAa,GAI1B,GADAl0d,KAAKk0d,WAAcl0d,KAAK2sJ,eAA+B,IAAd9rJ,EAAEinB,SAAkB9nB,KAAKk0d,WAC9Dl0d,KAAKk0d,WAIL,OAHAl0d,KAAKk0d,YAAa,EAClBl0d,KAAKiie,gBACLjie,KAAKkie,mBACGrhe,EAAEinB,SACN,QAKI,IAJK9nB,KAAK2sJ,eAAiB3sJ,KAAK+he,aAC5B/he,KAAKo3d,YAETp3d,KAAK8he,UAAUjhe,GACXb,KAAKmie,oBAAsBnie,KAAKm1d,gBAAiC,IAAdt0d,EAAEinB,QACrD9nB,KAAKs/d,2BAEJ,CACD,IAAI7yc,EAAOzsB,KAAK6uH,gBAEhB,GADA7uH,KAAK8nB,QAAUjnB,EAAEinB,QACb9nB,KAAKm1d,eAAgB,CACrB,IAAIx4U,GACAm8U,sBAAsB,EACtBrsc,KAAMzsB,KAAK6uH,gBACXkqW,WAAY,SAAUx1Z,EAAY7H,EAAO9vC,GACjC+wH,EAAY9jH,SAGhB94B,EAAMu9d,YAAa,EACnBv9d,EAAMqie,oBAAqB,EAC3Brie,EAAMsie,YAAY9+Z,EAAY7H,EAAO9vC,KAEzCtvB,MAAOuE,EACPg4B,QAAQ,GAGZ,GADA74B,KAAKwmB,QAAQ,YAAam2H,GACtBA,EAAY9jH,OACZ,OAEC74B,KAAKs9d,YAAe3gV,EAAYm8U,uBACjC94d,KAAK29d,cAAe,EACpB39d,KAAKqie,YAAYrie,KAAKujE,WAAY,KAAMvjE,KAAK4rB,aAGhD,CAAA,GAAI5rB,KAAK4+d,iBAAkB,CAC5B,IAAIlja,EAAQ,IAAI2H,GAChB3H,EAAkB,KAATjvC,EAAeivC,EAAMmI,MAAM7jE,KAAK4rB,OAAOa,KAAM,aAAcA,EAAMzsB,KAAK26D,WAAY36D,KAAKmvJ,cAAgBzzF,EAChH17D,KAAKqie,YAAYrie,KAAKsge,SAAU5ka,EAAO17D,KAAK4rB,QAC5C,MAGA,IAAI+tK,OAAgB,EACpBA,EAAgB35L,KAAK6iG,KAAKrhG,iBAAiB,MAAQmtd,GAAoB/9V,GAAK,0BAC5E,IAAIjL,EAAgBzqD,GAAOl7D,KAAK6uH,gBAAiB8qE,EAAe,aAAc35L,KAAK26D,YAC/EgrD,GAAwC,OAAvBA,EAAc9nG,MAC/B7d,KAAK0/d,aAAa/5W,EAAc9nG,MAChC7d,KAAK6iG,KAAK12F,UACNw5G,EAAc9nG,KAAKjS,wBAAwBmK,OAAS4vG,EAAc1zG,OAExC,KAAzBjS,KAAK6uH,gBACV7uH,KAAK85I,cAGL95I,KAAKs/d,2BAOjCd,EAAYnje,UAAUsnM,SAAW,SAAUjnI,GACvC,IAAIw9Z,EAAcx9Z,EAAQA,EAAMr8D,QAAUW,KAAK07D,MAAQ17D,KAAK07D,MAAMr8D,QAAU,IAAIgkE,GAChF,GAAIrjE,KAAK29d,aAAc,CACnB,GAA6B,OAAzB39d,KAAK6uH,gBAA0B,CAC/B,IAAIxqC,EAAWrkF,KAAKqvd,WAAWrvd,KAAKujE,YAAY60H,OAChD,IAAMp4L,KAAKujE,sBAAsBC,IAA6B,WAAb6gB,IAAsC,WAAbA,EAGrE,CACD,IAAIz4D,EAAS5rB,KAAK4rB,OAClBstc,EAAYr1Z,MAAOpmE,EAAkBmuB,EAAOa,MAAsB,GAAdb,EAAOa,KAAW,aAAczsB,KAAK6uH,gBAAiB7uH,KAAK26D,WAAY36D,KAAKmvJ,mBAJhI+pU,EAAYr1Z,MAAM,GAAI,aAAc7jE,KAAK6uH,gBAAiB7uH,KAAK26D,WAAY36D,KAAKmvJ,cAOxF,OAAO+pU,EAGP,GAAIl5d,KAAKujE,sBAAsBC,KAAgB/lE,EAAkBuC,KAAKhD,SAAWgD,KAAKoie,mBAAoB,CAGtG,IAAK,IAFDjla,OAAY,EACZpxC,EAAQtuB,EAAkBuC,KAAK4rB,OAAO5uB,OAASgD,KAAK4rB,OAAOa,KAAOzsB,KAAK4rB,OAAO5uB,MACzEb,EAAI,EAAGA,EAAI6D,KAAKhD,MAAMP,OAAQN,IAE/BghE,EADM,IAANhhE,EACY,IAAIwoE,GAAU54C,EAAO,QAAS/rB,KAAKhD,MAAMb,IAGzCghE,EAAU2H,GAAG/4C,EAAO,QAAS/rB,KAAKhD,MAAMb,IAG5D,OAAO,IAAIknE,IAAQQ,MAAM1G,GAGzB,OAAOzB,IAAgB17D,KAAK07D,MAAQ17D,KAAK07D,MAAQ,IAAI2H,KAIjEm7Z,EAAYnje,UAAUgne,YAAc,SAAU9+Z,EAAY7H,EAAO9vC,GAC7D,GAAoC,KAAhC5rB,KAAK6uH,gBAAgB3+G,OAAe,CACpC,IAAI2yF,EAAO7iG,KAAKw/d,SAAS59d,UAAY5B,KAAKw/d,SAAS59d,WAAU,GAAQ5B,KAAKw/d,SACtEx/d,KAAKsie,cACLtie,KAAK2ge,mBAAoB,EACzB3ge,KAAK6wd,iBAAiBhuX,EAAM7iG,KAAKsge,UAC7Btge,KAAKhD,OAASgD,KAAKhD,MAAMP,QACzBuD,KAAKuge,mBAEY,IAAjBvge,KAAK8nB,SACL9nB,KAAKs/d,uBAETt/d,KAAK+N,OAAO,WAAaojF,OAAQ,oBAAqB1xD,OAAsB,aAAdz/B,KAAK+9B,KAAqBl9B,EAAGb,aAI/FA,KAAKswd,UAAU/sZ,EAAY33C,EAAQ8vC,GAC/B17D,KAAK4+d,mBACCr7Z,aAAsBC,IAIxBxjE,KAAK2ge,mBAAoB,EACzB3ge,KAAK6ge,UAAYnla,GAJjB17D,KAAK4ge,oBAAoBlla,EAAO9vC,IAQ5C5rB,KAAK45d,gBAET4E,EAAYnje,UAAUule,oBAAsB,SAAUlla,EAAO9vC,GACzD,IAAI22c,GAAcvie,KAAKivd,eAAejvd,KAAKg8D,aAAah/D,MAAOgD,KAAK26D,YACpE,GAAI36D,KAAK4+d,kBAAoB2D,EAAY,CACrC,IAAIvle,EAAQgD,KAAKg8D,aAAah/D,MAG9B,GAA4B,kBAFTS,EAAkBuC,KAAKsge,WAAatge,KAAKsge,SAAS7je,OAAS,EAC1EuD,KAAKsge,SAAS,GAAKtge,KAAKsge,UACU,CAClC,IAAI30c,KACJvuB,EAASwuB,EAAOa,KAAMzvB,EAAO2uB,GAC7BvuB,EAASwuB,EAAO5uB,MAAOA,EAAO2uB,IAC1Bm4K,EAAWj0I,KAAKuB,MAAMvB,KAAKC,UAAU9vD,KAAKkvd,YACrC7mc,OAAO,EAAG,EAAGsD,GACtB3rB,KAAKswd,UAAUxsR,EAAUl4K,GAAkB5rB,KAAK4rB,OAAQ8vC,OAEvD,CACD,IAAIooI,GAAY9jM,KAAKg8D,aAAah/D,OAClCgD,KAAKswd,UAAUxsR,EAAUl4K,GAAkB5rB,KAAK4rB,SAGpD5rB,KAAKhD,OAASgD,KAAKhD,MAAMP,QACzBuD,KAAKuge,oBAGb/B,EAAYnje,UAAUo6d,eAAiB,WACnC,MAAO,mBAEX+I,EAAYnje,UAAUmne,aAAe,SAAU3he,GAC3Cb,KAAKihe,aAAc,GACfjhe,KAAKq2E,UAAar2E,KAAKilB,UAGvBpkB,EAAEsG,SAAWnH,KAAKk/d,cAIjBl/d,KAAK8yd,YAA4B,aAAd9yd,KAAK+9B,MACzB/9B,KAAKg8D,aAAa95D,QAEJ,aAAdlC,KAAK+9B,MACL/9B,KAAKy6H,UAEL55H,EAAEsG,SAAiE,IAAvDtG,EAAEsG,OAAOrD,UAAUoJ,WAAW3O,QAAQ4/d,IAC9Cn+d,KAAK2sJ,eACL3sJ,KAAK45d,iBAIR55d,KAAK2sJ,eAAiB3sJ,KAAK+he,YAC5B/he,KAAKo3d,aAGLp3d,KAAKu1d,YACa,aAAdv1d,KAAK+9B,MACL/9B,KAAKy6H,WAGb55H,EAAE2kB,mBAxBE3kB,EAAE2kB,mBA0BVg5c,EAAYnje,UAAUokC,OAAS,SAAU6O,GACjCA,GACAtuC,KAAK87D,eAAeh4D,UAAUS,OAnoB3B,cAooBHvE,KAAKg8D,aAAatwD,gBAAgB,YAClChI,EAAW1D,KAAKg8D,cAAgBk6D,gBAAiB,YAGjDl2H,KAAK87D,eAAeh4D,UAAUM,IAxoB3B,cAyoBHpE,KAAKg8D,aAAax4D,aAAa,WAAY,QAC3CE,EAAW1D,KAAKg8D,cAAgBk6D,gBAAiB,UAEjDl2H,KAAKilB,UAAYqpB,IACjBtuC,KAAKilB,QAAUqpB,GAEnBtuC,KAAKu1d,aAETiJ,EAAYnje,UAAU06d,OAAS,SAAU7jR,GACrC,IAAI/qM,EAIJ,GAHK1J,EAAkBy0M,KACnB/qM,EAAS+qM,EAAIplE,eAEb9sI,KAAKqnH,UAAY7mH,SAASuL,KAAK5H,SAASnE,KAAKqnH,SAASrmH,UAAYhB,KAAKqnH,SAASrmH,QAAQmD,SAASgD,GAC/E,aAAdnH,KAAK+9B,MACL/9B,KAAKg8D,aAAa95D,YAF1B,CAMA,GAAkB,aAAdlC,KAAK+9B,MAAuBvyB,GAAQwiG,OAASvwG,EAAkBy0M,GAG/D,OAFAlyM,KAAK8yd,YAAa,OAClB9yd,KAAK87D,eAAeh4D,UAAUS,OAAOshN,IAGzC,GAAI7lN,KAAKy+d,kBAIL,OAHAvsR,EAAI1sL,iBACJxlB,KAAKg8D,aAAa95D,aAClBlC,KAAKy+d,mBAAoB,GAG7Bz+d,KAAK8yd,YAAa,EAClB9yd,KAAK87D,eAAeh4D,UAAUS,OAAOshN,IACnB,QAAd7lN,KAAK+9B,MAAgC,aAAd/9B,KAAK+9B,OAC5B/9B,KAAKy/d,iBAAiB,MACtBz/d,KAAKyie,mBAETzie,KAAKqhe,iBAAiBnvR,EAAKlyM,KAAKhD,MAAOgD,KAAKgge,YAC5Chge,KAAK2T,cAAc3T,KAAKwzd,cAAe,UACvCxzd,KAAKk/d,aAAax6d,MAAM4xC,QAAU,OAC9Bt2C,KAAK2sJ,eACL3sJ,KAAKu1d,YAETv1d,KAAKqge,mBACLrge,KAAKwmB,QAAQ,QACbxmB,KAAKi7L,SAAU,EACXzvL,GAAQkb,UAA0B,cAAd1mB,KAAK+9B,MAAsC,aAAd/9B,KAAK+9B,MACtD/9B,KAAK0ie,kBAET1ie,KAAKkge,sBACLlge,KAAK2ie,oB5X3lBb,SAA+B7ma,EAAgBqja,EAAkBnie,EAAO+pB,EAAgBD,GACpFg1C,EAAeh4D,UAAUS,OAAO,iBAChC,IAAI8O,EAAQ8rd,EAAiBx8d,cAAc,IAAMy5D,IAC7Cp/D,GAASA,EAAMP,QAAU,GAAwB,SAAnBsqB,IAA8BtpB,EAAkB4V,KAC1EA,EAAMvP,UAAUK,SAASm4D,KACzBj4D,GAAagP,GAAQipD,IAEzB34D,GAAU0P,GAAQkpD,K4XqlBlBqma,CAAe5ie,KAAK87D,eAAgB97D,KAAKm/d,iBAAkBn/d,KAAKhD,MAAOgD,KAAK+mB,eAAgB/mB,KAAK8mB,aACjG9mB,KAAKohe,uBAET5C,EAAYnje,UAAUsne,kBAAoB,WACjC3ie,KAAKhD,OAAUgD,KAAKhD,MAAMP,OAI3BuD,KAAK+7D,cAAcj4D,UAAUM,IAAIi6d,IAHjCr+d,KAAK+7D,cAAcj4D,UAAUS,OAAO85d,KAM5CG,EAAYnje,UAAUwne,eAAiB,SAAUv7d,EAAU0B,GACvD,OAAO6mD,KAAKC,UAAUxoD,EAASjG,QAAQw2B,UAAYg4B,KAAKC,UAAU9mD,EAAS3H,QAAQw2B,SAEvF2mc,EAAYnje,UAAUgme,iBAAmB,SAAU/ke,EAAOk+S,EAAQjzS,GAC9D,IAAID,EAAWkzS,MACXxxS,EAAWzB,MACf,GAAIvH,KAAK8ie,YAAc9ie,KAAK6ie,eAAev7d,EAAU0B,GAAW,CAC5D,IAAIuE,GACA1M,EAAGvE,EACH0M,SAAUzB,EACVvK,MAAOw9S,EACP14G,eAAcxlM,EACd0E,QAAShB,KAAKgB,SAElBhB,KAAKwmB,QAAQ,SAAUjZ,KAG/Bixd,EAAYnje,UAAU0ne,eAAiB,WACnC,IAAIhtd,EAAS/V,KAAK6iG,KAAK/+F,UAAUK,SAASwqd,GAAoBC,QAAU,KACpEzhd,iBAAiBnN,KAAK2yO,WAAW,GAAI,MAAMvlO,iBAAiB,UAChE,OAAOf,KAAKoxB,MAAMz9B,KAAK6iG,KAAKj3F,wBAAwBmK,OAASgf,SAAShf,EAAQ,MAElFyod,EAAYnje,UAAU47d,gBAAkB,SAAU7vV,GAC9C,IAEI48K,EAFA78Q,EAAannC,KAAK6iG,KAAKrhG,iBAAiB,MACtCmtd,GAAoB/9V,GAAK,SAAWqtW,GAAY,0BAEtDj6K,EAAe58K,GAAS,EAAIjgG,EAAWigG,EAAQ,GAAKjgG,EAAW,GAC/DnnC,KAAK0/d,aAAa17K,GAClBhkT,KAAK+6d,aAAa/2K,EAAchkT,KAAK8xd,gBAAgB9tK,EAAanxS,aAAa,iBAGnF2rd,EAAYnje,UAAU87d,kBAAoB,SAAU/vV,GACrCpnI,KAAK2yO,WAAhB,IAGIqxE,EAFA78Q,EAAannC,KAAK6iG,KAAKrhG,iBAAiB,MACtCmtd,GAAoB/9V,GAAK,SAAWqtW,GAAY,0BAEtDj6K,EAAe58K,GAASjgG,EAAW1qC,OAAS0qC,EAAWigG,EAAQ,GAAKjgG,EAAWA,EAAW1qC,OAAS,GACnGuD,KAAK0/d,aAAa17K,GAClBhkT,KAAK+6d,aAAa/2K,EAAchkT,KAAK8xd,gBAAgB9tK,EAAanxS,aAAa,iBAEnF2rd,EAAYnje,UAAUs3O,SAAW,WAI7B,OAHK3yO,KAAK6iG,MACN1X,EAAO9vF,UAAU0wG,OAAOzqG,KAAKtB,MAE1BA,KAAKi5L,UAAYj5L,KAAKi5L,UAAUz3L,iBAAiB,IAAMmtd,GAAoB/9V,GAC5E,SAAWqtW,GAAY,KAAO,MAExCO,EAAYnje,UAAUo/H,QAAU,WAC5B,SAAIz6H,KAAKilB,SAAYjlB,KAAKq2E,YACtBr2E,KAAKkie,mBACLlie,KAAK8yd,YAAa,EACb9yd,KAAKhD,MAINgD,KAAKgge,WAAahge,KAAKhD,MAAMqE,QAH7BrB,KAAKgge,WAAahge,KAAKhD,MAKvBgD,KAAKhD,OAASgD,KAAKhD,MAAMP,SACP,cAAduD,KAAK+9B,MAAsC,aAAd/9B,KAAK+9B,KAClC/9B,KAAK+/d,sBAAsBr7d,MAAM4xC,QAAU,GAG3Ct2C,KAAKgje,mBAES,aAAdhje,KAAK+9B,OACL/9B,KAAKije,YAAYv+d,MAAM4xC,QAAU,SAGvB,aAAdt2C,KAAK+9B,MACL/9B,KAAK+7D,cAAcj4D,UAAUS,OAAO85d,IAEpCr+d,KAAKi7L,UACLj7L,KAAKg8D,aAAa95D,QAClBlC,KAAKwmB,QAAQ,SACbxmB,KAAKi7L,SAAU,GAEdj7L,KAAK87D,eAAeh4D,UAAUK,SAAS0hN,KACxC7lN,KAAK87D,eAAeh4D,UAAUM,IAAIyhN,I5XtsBlD,SAAgC/pJ,EAAgBqja,GAC5Crja,EAAeh4D,UAAUM,IAAI,iBAC7B,IAAIiP,EAAQ8rd,EAAiBx8d,cAAc,IAAMy5D,IAC5C3+D,EAAkB4V,KACnB1P,GAAU0P,GAAQipD,IACdjpD,EAAMvP,UAAUK,SAASo4D,KACzBl4D,GAAagP,GAAQkpD,K4XksBrB2ma,CAAgBlje,KAAK87D,eAAgB97D,KAAKm/d,kBACtCn/d,KAAK2sJ,eACL3sJ,KAAK45d,gBAEF,IAMf4E,EAAYnje,UAAU2ne,iBAAmB,WACnB,aAAdhje,KAAK+9B,KACL/9B,KAAKije,YAAYv+d,MAAM4xC,QAAU,GAGjCt2C,KAAKmje,iBAAiBz+d,MAAM4xC,QAAU,GAE1Ct2C,KAAKm/d,iBAAiBr7d,UAAUM,IA1xBX,gBA4xBzBo6d,EAAYnje,UAAU+ne,iBAAmB,WACrCpje,KAAKmje,iBAAiBz+d,MAAM4xC,QAAU,OACtCt2C,KAAKm/d,iBAAiBr7d,UAAUS,OA9xBX,gBAgyBzBi6d,EAAYnje,UAAU4me,cAAgB,WAClC,IAAIn1c,EAAO,EACP9sB,KAAK8mB,cACLgG,EAAOA,EAAO9sB,KAAKg8D,aAAal1C,YAAYrqB,OAASqwB,EAAO9sB,KAAKg8D,aAAal1C,YAAYrqB,QAE1FuD,KAAKg8D,aAAah/D,MAAMP,OAASqwB,EACjC9sB,KAAKg8D,aAAalvC,KAAO9sB,KAAKg8D,aAAah/D,MAAMP,OAGjDuD,KAAKg8D,aAAalvC,KAAOA,GAGjC0xc,EAAYnje,UAAUsxJ,YAAc,WAChC,OAA+B,OAAtB3sJ,KAAKytJ,cAA+D,OAApCztJ,KAAKytJ,aAAap5I,eAE/Dmqd,EAAYnje,UAAUu+d,aAAe,WAC7B55d,KAAKqnH,UAAYrnH,KAAKqje,YACtBrje,KAAKqnH,SAASrgH,eAAgBgP,MAAOhW,KAAKsje,mBAC1Ctje,KAAKqnH,SAAS3F,gBAAgB1hH,KAAK87D,kBAG3C0ia,EAAYnje,UAAU8me,gBAAkB,WACpC,OAAOnie,KAAK6uH,gBAAgBpyH,OAAS,GAEzC+he,EAAYnje,UAAUkoe,gBAAkB,SAAUz7c,GAC9C,OAAQA,GACJ,KAAK,GACD9nB,KAAKu1d,YACa,aAAdv1d,KAAK+9B,MACL/9B,KAAKg8D,aAAa95D,QAEtB,MACJ,KAAK,GACIlC,KAAK2sJ,eACN3sJ,KAAKo3d,cAKrBoH,EAAYnje,UAAUmoe,oBAAsB,WACxC,IAAI1L,EAAc93d,KAAK6iG,KAAKlgG,cAAc,IAAMgsd,GAAoBzsd,OAC/DzE,EAAkBq6d,IACnB93d,KAAKg8D,aAAax4D,aAAa,wBAAyBs0d,EAAYx0d,KAG5Ek7d,EAAYnje,UAAUooe,UAAY,SAAU5ie,GACxC,IAAIb,KAAKq2E,WAAar2E,KAAKilB,SAAyB,aAAdjlB,KAAK+9B,QAG3C/9B,KAAK0+d,eAAgB,IACjB79d,EAAEinB,QAAU,KAAOjnB,EAAEinB,QAAU,MAAnC,CAGA,GAAIjnB,EAAE01G,OAGF,OAFAv2G,KAAKuje,gBAAgB1ie,EAAEinB,cACvBjnB,EAAE2kB,iBAGD,GAAIxlB,KAAK2sJ,cAAe,CACzB,IAAImrU,EAAc93d,KAAK6iG,KAAKlgG,cAAc,IAAMgsd,GAAoBzsd,OAEpE,OAAQrB,EAAEinB,SACN,KAAK,GACL,KAAK,GAAI,MACT,KAAK,GAOD,OANAjnB,EAAE2kB,sBACEsyc,IACA93d,KAAK8xd,gBAAgBgG,EAAYjld,aAAa,eAC9C7S,KAAKi3d,qBARC,EAQ6Bj3d,KAAK+ie,kBACxC/ie,KAAKwje,wBAGb,KAAK,GAOD,OANA3ie,EAAE2kB,sBACEsyc,IACA93d,KAAK8xd,gBAAgBgG,EAAYjld,aAAa,eAC9C7S,KAAKm3d,uBAhBC,EAgB+Bn3d,KAAK+ie,kBAC1C/ie,KAAKwje,wBAGb,KAAK,GACD3ie,EAAE2kB,iBACFxlB,KAAK0je,YAAY,GACjB1je,KAAKwje,sBACL,MACJ,KAAK,GACD3ie,EAAE2kB,iBACFxlB,KAAK0je,WAAW,GAChB1je,KAAKwje,sBACL,MACJ,KAAK,GAMD,OALA3ie,EAAE2kB,iBACFxlB,KAAKu1d,iBACa,aAAdv1d,KAAK+9B,MACL/9B,KAAKg8D,aAAa95D,SAG1B,KAAK,GAKD,OAJArB,EAAE2kB,sBACgB,aAAdxlB,KAAK+9B,MACL/9B,KAAK2je,YAAY9ie,IAGzB,KAAK,GAKD,YAJkB,aAAdb,KAAK+9B,OACLl9B,EAAE2kB,iBACFxlB,KAAK2je,YAAY9ie,KAGzB,KAAK,EACDA,EAAE2kB,iBACFxlB,KAAKu1d,YACLv1d,KAAKg8D,aAAa95D,QAClBlC,KAAK87D,eAAeh4D,UAAUM,IAAIyhN,UAI1C,OAAQhlN,EAAEinB,SACN,KAAK,GACL,KAAK,EACL,KAAK,GACL,KAAK,GACL,KAAK,GACD,OACJ,KAAK,GACG9nB,KAAK+he,aACL/he,KAAKo3d,YAET,MACJ,KAAK,GAGD,OAFAv2d,EAAE2kB,sBACFxlB,KAAK4je,eAIb5je,KAAKmie,mBACLnie,KAAKq+M,cAAcx9M,GAEL,aAAdb,KAAK+9B,MAAuB/9B,KAAK6je,sBACjC7je,KAAK8je,iBAAiBjje,GAE1Bb,KAAKiie,gBACLjie,KAAK45d,iBAET4E,EAAYnje,UAAUyoe,iBAAmB,SAAUjje,GAC7B,IAAdA,EAAEinB,SAA0C,KAAzB9nB,KAAK6uH,gBACxB7uH,KAAKsie,aAAc,EAGnBtie,KAAKsie,aAAc,GAG3B9D,EAAYnje,UAAUgjN,cAAgB,SAAUx9M,GAC5C,GAAmB,cAAdb,KAAK+9B,MAAsC,aAAd/9B,KAAK+9B,MAAwB/9B,KAAKhD,OAASgD,KAAKhD,MAAMP,OACpF,OAAQoE,EAAEinB,SACN,KAAK,GACDjnB,EAAE2kB,iBACFxlB,KAAK+je,QAAQ,EAAGlje,GAChB,MACJ,KAAK,GACDA,EAAE2kB,iBACFxlB,KAAK+je,OAAO,EAAGlje,GACf,MACJ,KAAK,EACDb,KAAK8/d,oBAAoBj/d,GACzB,MACJ,KAAK,GACDb,KAAKgke,mBAAmBnje,QAI/B,GAAkB,IAAdA,EAAEinB,SAA+B,cAAd9nB,KAAK+9B,MACzB/9B,KAAKhD,OAASgD,KAAKhD,MAAMP,OAAQ,CACjCoE,EAAE2kB,iBACF,IAAIuI,EAAO/tB,KAAKhD,MAAMgD,KAAKhD,MAAMP,OAAS,GAC1CuD,KAAKige,YAAYlyc,EAAMltB,GACvBb,KAAKmge,gBAAgBnge,KAAKoge,eAC1Bpge,KAAK2/d,oBAAoB5xc,KAIrCywc,EAAYnje,UAAUsoe,YAAc,SAAU9ie,GAC1Cb,KAAKkge,sBACLlge,KAAKike,gBAAgBpje,GACjBb,KAAK6+d,kBACL7+d,KAAKs/d,wBAGbd,EAAYnje,UAAUuoe,aAAe,WACjC,IAAI71c,EAAO/tB,KAAKgge,WAAahge,KAAKgge,WAAW3+d,WACzCrB,KAAKhD,OAASgD,KAAK6ie,eAAe7ie,KAAKhD,MAAO+wB,KAC9C/tB,KAAKhD,MAAQ+wB,EACb/tB,KAAKkhe,qBACa,cAAdlhe,KAAK+9B,MAAsC,aAAd/9B,KAAK+9B,KAClC/9B,KAAK+/d,sBAAsBr7d,MAAM4xC,QAAU,GAG3Ct2C,KAAKgje,mBAEThje,KAAKohe,qBACDphe,KAAKhD,MAAMP,OACXuD,KAAKkie,mBAGLlie,KAAKkke,oBAGblke,KAAKqge,oBAET7B,EAAYnje,UAAU0/d,aAAe,SAAUh5R,EAAYkF,GACvD,IAAI+zR,EAAgBh7d,KAAK6iG,KAAKj3F,wBAAwBmK,OAClDkld,EAAal5R,EAAW3tL,UAAY2tL,EAAWn2L,wBAAwBmK,OAAS/V,KAAK6iG,KAAK12F,UAC1F+ud,EAAal7d,KAAK6iG,KAAK12F,UAAY8ud,EAAaD,EAChDG,EAAYp5R,EAAW3tL,UAAY2tL,EAAWn2L,wBAAwBmK,OAAS/V,KAAK6iG,KAAK12F,UAC7Fgvd,EAAWn7d,KAAK4rB,OAAOwtK,UAAYj8L,EAAY6C,KAAKqxd,oBAChD8J,EAAWn7d,KAAKqxd,mBAAmBzld,wBAAwBmK,OAASold,EACpD,IAAhBl0R,EACAjnM,KAAK6iG,KAAK12F,UAAY,EAEjB8ud,EAAaD,EAClBh7d,KAAK6iG,KAAK12F,UAAY+ud,EAEfC,EAAW,GAAKn7d,KAAK6iG,KAAKj3F,wBAAwBmK,OAASold,IAClEn7d,KAAK6iG,KAAK12F,UAAY+ud,IAG9BsD,EAAYnje,UAAU8Q,UAAY,SAAU41L,EAAYkF,GACpD,IAAIi0R,EAAan5R,EAAW3tL,UAAYpU,KAAK6iG,KAAK12F,UACjC41L,EAAW3tL,UAAY2tL,EAAWn2L,wBAAwBmK,OAAS/V,KAAK6iG,KAAK12F,UAC9F+ud,EAAal7d,KAAK4rB,OAAOwtK,UAAYj8L,EAAY6C,KAAKqxd,oBAClD6J,EAAal7d,KAAKqxd,mBAAmBzld,wBAAwBmK,OAASmld,EAC1E,IAAIC,EAAYp5R,EAAW3tL,UAAY2tL,EAAWn2L,wBAAwBmK,OAAS/V,KAAK6iG,KAAK12F,UACzE,IAAhB86L,EACAjnM,KAAK6iG,KAAK12F,UAAY,EAEjB+ud,EAAa,EAClBl7d,KAAK6iG,KAAK12F,UAAYnM,KAAK6iG,KAAK12F,UAAY+ud,EAErCC,EAAW,GAAKn7d,KAAK6iG,KAAKj3F,wBAAwBmK,OAASold,IAClEn7d,KAAK6iG,KAAK12F,UAAY41L,EAAW3tL,WAAapU,KAAK4rB,OAAOwtK,UAAYj8L,EAAY6C,KAAKqxd,oBACnFrxd,KAAKqxd,mBAAmBzld,wBAAwBmK,OAAS,KAGrEyod,EAAYnje,UAAU4oe,gBAAkB,SAAUpje,GAC9C,IAAI+vH,EAAK5wH,KAAK6iG,KAAKlgG,cAAc,MAAQgsd,GAAoBzsd,OACzDo7N,EAAQt9N,KAAKhD,OAASgD,KAAKhD,MAAMP,OAASuD,KAAKhD,MAAMP,OAAS,EACvD,OAAPm0H,IACIA,EAAG9sH,UAAUK,SAAS,cACtBm5N,GAAgB,GAEhBt9N,KAAKqyH,UAAUzB,IAAO0sG,EAAQt9N,KAAKmke,yBACnCnke,KAAKoke,oBAAoBxzW,EAAI/vH,GAC7Bb,KAAK0/d,aAAa9uW,GACA,aAAd5wH,KAAK+9B,MACL/9B,KAAKyie,kBACLzie,KAAK2ie,oBACL3ie,KAAKmge,gBAAgBnge,KAAKoge,gBAG1Bpge,KAAKmge,gBAAgBnge,KAAKoge,eAE9Bpge,KAAKqge,mBACa,aAAdrge,KAAK+9B,MACL/9B,KAAKy/d,iBAAiB7uW,EAAG/0G,aAE7B7b,KAAK45d,eACD55d,KAAKhD,OAASgD,KAAKhD,MAAMP,SACzBuD,KAAKwjN,sBACLxjN,KAAKuge,qBAGTvge,KAAK8+d,oBACL9+d,KAAKu1d,aAGbv1d,KAAKohe,sBAET5C,EAAYnje,UAAUoke,iBAAmB,SAAUjje,GAC/C,IAAKwD,KAAKm1d,gBAAkBn1d,KAAK4+d,mBAAqB5+d,KAAKw/d,UAAYx/d,KAAKkvd,SAAU,CAClF,IAAIrsX,OAAO,EAEPA,EADmB,eAAnB7iG,KAAK43L,WAAiD,cAAnB53L,KAAK43L,UACjC53L,KAAKi5L,UAAUr3L,UAAY5B,KAAKi5L,UAAUr3L,WAAU,GAAQ5B,KAAKi5L,UAGjEj5L,KAAKw/d,SAAS59d,UAAY5B,KAAKw/d,SAAS59d,WAAU,GAAQ5B,KAAKw/d,SAE1Ex/d,KAAK6wd,iBAAiBhuX,EAAM7iG,KAAKsge,UACjCtge,KAAK2/d,oBAAoBnje,GACrBwD,KAAKhD,OAASgD,KAAKhD,MAAMP,QACzBuD,KAAKuge,qBAIjB/B,EAAYnje,UAAU2oe,mBAAqB,SAAUnje,GACjD,IACIktB,EADAs2c,EAAerke,KAAK+/d,sBAAsBp9d,cAAc,QAAUy7d,IAEjD,OAAjBiG,IACK5me,EAAkBuC,KAAKhD,SACxBgD,KAAKgge,WAAahge,KAAKhD,MAAMqE,SAGpB,QADb0sB,EAAOs2c,EAAahkX,sBAEhBrgH,KAAKkge,sBACLlge,KAAKske,iBAAiBv2c,EAAMltB,IAEhCb,KAAKige,YAAYoE,EAAaxxd,aAAa,cAAehS,GAC1Db,KAAKqge,oBAELrge,KAAK8+d,oBACL9+d,KAAKu1d,aAGbiJ,EAAYnje,UAAUkpe,UAAY,SAAUj2b,GACxC,IACIr8B,EADArO,EAAW5D,KAAK6iG,KAAKrhG,iBAAiB,MAAQmtd,GAAoB/9V,IAElEhtH,EAASnH,OAAS,IAClBuD,KAAK85I,cACL7nI,EAAQq8B,EAAQ,EAAK1qC,EAASnH,OAAS,EACvCuD,KAAK0/d,aAAa97d,EAASqO,IAC3BjS,KAAK+6d,aAAan3d,EAASqO,GAAQA,IAEvCjS,KAAKwje,uBAEThF,EAAYnje,UAAUqoe,WAAa,SAAUxvd,GACzC,GAAIlU,KAAK6iG,KAAM,CACX,IAAIj/F,EAAW5D,KAAK6iG,KAAKrhG,iBAAiB,MACpCmtd,GAAoB/9V,GACpB,SAAWqtW,GAAY,0BACzBoG,EAAerke,KAAK6iG,KAAKlgG,cAAc,MAAQgsd,GAAoBzsd,OACnE6rB,GAAQ,EACZ,GAAInqB,EAASnH,OAAQ,CACjB,IAAK,IAAIwV,EAAQ,EAAGA,EAAQrO,EAASnH,OAAQwV,IACzC,GAAIrO,EAASqO,KAAWoyd,EAAc,CAClCt2c,EAAO9b,EACP,MAGJiC,EAAW,EACP6Z,EAAQnqB,EAASnH,OAAS,IAC1BuD,KAAK85I,cACL95I,KAAK0/d,aAAa97d,IAAWmqB,IAC7B/tB,KAAK+6d,aAAan3d,EAASmqB,GAAOA,IAIlCA,EAAO,IACP/tB,KAAK85I,cACL95I,KAAK0/d,aAAa97d,IAAWmqB,IAC7B/tB,KAAKmM,UAAUvI,EAASmqB,GAAOA,OAMnDywc,EAAYnje,UAAU0oe,OAAS,SAAU7vd,EAAUrT,GAC/C,IAAI+C,EACAyge,EACAt2c,EACJnqB,EAAW5D,KAAK+/d,sBAAsBv+d,iBAAiB,gBAElC,QADrB6ie,EAAerke,KAAK+/d,sBAAsBp9d,cAAc,QAAUy7d,KAE1Dlqd,EAAW,GACXlU,KAAKske,iBAAiB1ge,EAASA,EAASnH,OAAS,GAAIoE,GAIrDqT,EAAW,EAEE,QADb6Z,EAAOs2c,EAAa19R,0BAEhB3mM,KAAKkge,sBACLlge,KAAKske,iBAAiBv2c,EAAMltB,KAIhCktB,EAAOs2c,EAAahkX,mBACpBrgH,KAAKkge,sBACQ,OAATnyc,GACA/tB,KAAKske,iBAAiBv2c,EAAMltB,KAK5C29d,EAAYnje,UAAUmpe,UAAY,SAAU3je,GACxC,GAAIb,KAAKilB,QAAS,CACd,IAAIviB,EAAOmD,EAAQhF,EAAEsG,OAAQ,YAC7BnH,KAAKkge,sBACLlge,KAAKske,iBAAiB5he,EAAM7B,KAGpC29d,EAAYnje,UAAU6ke,oBAAsB,WACpClge,KAAK+/d,uBACL//d,KAAK0ie,mBAGblE,EAAYnje,UAAUipe,iBAAmB,SAAUtje,EAASH,GACxD8C,GAAU3C,GAAUo9d,IACpBp+d,KAAKwmB,QAAQ,gBAAiB3lB,IAElC29d,EAAYnje,UAAUope,aAAe,SAAU5je,GAC3C,GAAgB,IAAZA,EAAE81G,OAA4B,IAAb91G,EAAEswH,QAGnBnxH,KAAKilB,UAAYjlB,KAAKq2E,SAAU,CAChC,IAAIr1E,EAAUH,EAAEsG,OAAOkN,cACnBrX,EAAQgD,KAAKymN,kBAAkBzlN,EAAQ6R,aAAa,eAQxD,GAPI7S,KAAK2sJ,eAA+B,aAAd3sJ,KAAK+9B,MAC3B/9B,KAAKu1d,YAEJv1d,KAAK8yd,YACN9yd,KAAKg8D,aAAa95D,QAEtBlC,KAAKige,YAAYjje,EAAO6D,GACpBpD,EAAkBuC,KAAK6iG,KAAKlgG,cAAc,kBAAoB3F,EAAQ,QAAUgD,KAAKw/d,UAAYx/d,KAAKkvd,SAAU,CAChH,IAAIrsX,EAAO7iG,KAAKw/d,SAAS59d,UAAY5B,KAAKw/d,SAAS59d,WAAU,GAAQ5B,KAAKw/d,SAC1Ex/d,KAAK6wd,iBAAiBhuX,EAAM7iG,KAAKsge,UAErCtge,KAAKmge,gBAAgBnge,KAAKoge,eAC1Bpge,KAAKqge,mBACLx/d,EAAE2kB,mBAGVg5c,EAAYnje,UAAUgle,iBAAmB,WACrCrge,KAAKg8D,aAAah/D,MAAQ,GAC1BgD,KAAKohe,sBAET5C,EAAYnje,UAAU+le,mBAAqB,WACnCphe,KAAK8mB,aAAuC,UAAxB9mB,KAAK+mB,eACrB/mB,KAAKhD,OAASgD,KAAKhD,MAAMP,OACzBuD,KAAKg8D,aAAal1C,YAAc,GAGhC9mB,KAAKg8D,aAAal1C,YAAc9mB,KAAK8mB,YAIzC9mB,KAAK0ke,oBAET1ke,KAAKiie,iBAETzD,EAAYnje,UAAU4ke,YAAc,SAAUjje,EAAOk1M,GACjD,IAAIjgM,EAAQjS,KAAKhD,MAAMuB,QAAQyB,KAAKymN,kBAAkBzpN,IAClDqG,EAAYrD,KAAK6+d,iBACjBZ,GACAtP,GAAoBn/U,SACxB,IAAe,IAAXv9H,EAAc,CACd,IAAIjR,EAAUhB,KAAK6iG,KAAKlgG,cAAc,kBAAoB3F,EAAQ,MAC9DuQ,GACA1M,EAAGqxM,EACHr0L,KAAM7c,EACNq6D,SAAUr7D,KAAK4yd,eAAe51d,GAC9B8kM,eAAcoQ,EACdr5K,QAAQ,GAGZ,GADA74B,KAAKwmB,QAAQ,WAAYjZ,GACrBA,EAAUsrB,OACV,OAEJ74B,KAAKhD,MAAMqrB,OAAOpW,EAAO,GACzBjS,KAAKgH,eAAgBhK,SAAUud,UAAWva,KAAKhD,SAAU,GACzC,OAAZgE,IACAA,EAAQwC,aAAa,gBAAiB,SACtCa,GAAarD,GAAUqC,GACvBrD,KAAK+N,OAAO,cACRojF,OAAQ,oBACR1xD,OAAsB,aAAdz/B,KAAK+9B,KAAqB6yF,GAAI5vH,EACtCH,EAAGb,KAAMiS,MAAOA,IAEpBjS,KAAK+N,OAAO,cAAgBojF,OAAQ,oBAAqB1xD,OAAsB,aAAdz/B,KAAK+9B,KAAqB6yF,GAAI5vH,EAASH,EAAGqxM,IAC3GxuM,EAAW1D,KAAKg8D,cAAgBw8E,wBAAyBx3I,EAAQsC,KAC5DtD,KAAKhD,MAAMP,SAAWuD,KAAKsge,SAAS7je,QAA0B,aAAduD,KAAK+9B,MAAuB/9B,KAAKyge,eAClFzge,KAAK+N,OAAO,kBAAoBojF,OAAQ,oBAAqB1xD,OAAsB,aAAdz/B,KAAK+9B,KAAqB/gC,MAAO,aAG1GgD,KAAK6+d,kBAAoB7+d,KAAK4rB,OAAOwtK,SACrCp5L,KAAKshe,cAActke,GAEvBgD,KAAK2ke,gBAAe,EAAM3ne,GAC1BgD,KAAK4ke,WAAW5ne,GAChBgD,KAAK6ke,mBAEL,IADY7ke,KAAKhD,OAASgD,KAAKhD,MAAMP,OAASuD,KAAKhD,MAAMP,OAAS,GACtDuD,KAAKmke,uBAAwB,CAGrC9/d,EAFiBrE,KAAK6iG,KAAKrhG,iBAAiB,MACtCmtd,GAAoB/9V,GAAK,mBACP,aAE5B5wH,KAAKwmB,QAAQ,UAAWjZ,KAGhCixd,EAAYnje,UAAUspe,eAAiB,SAAUr2b,EAAOtxC,GACpD,GAAIgD,KAAKm1d,eAAgB,CACrB,IAAI2P,EAAW9ke,KAAKw/d,SAAS78d,cAAc,kBAAoB3F,EAAQ,MACnE8ne,IACIx2b,GACAw2b,EAASthe,aAAa,gBAAiB,SACvCa,GAAayge,GAAW9ke,KAAK6+d,iBACzBZ,GACAtP,GAAoBn/U,UACN,aAAdxvI,KAAK+9B,OACL+mc,EAAS3/d,kBAAkB3B,aAAa,eAAgB,SACxDa,GAAayge,EAAS3/d,kBAAkB4iI,kBAAmB,cAI/D+8V,EAASthe,aAAa,gBAAiB,QACvCG,GAAUmhe,GAAW9ke,KAAK6+d,iBACtBZ,GACAtP,GAAoBn/U,UACN,aAAdxvI,KAAK+9B,OACL+mc,EAAS3/d,kBAAkB3B,aAAa,eAAgB,QACxDG,GAAUmhe,EAAS3/d,kBAAkB4iI,kBAAmB,gBAM5Ey2V,EAAYnje,UAAUupe,WAAa,SAAU5ne,GACzC,GAAIgD,KAAK+/d,sBAAuB,CAC5B,IAAI/+d,EAAUhB,KAAK+/d,sBAAsBp9d,cAAc,oBAAsB3F,EAAQ,MACjFgE,GACAuD,EAAOvD,KAInBw9d,EAAYnje,UAAUwpe,iBAAmB,WACjC7ke,KAAKhD,MAAMP,QACNgB,EAAkBuC,KAAK+/d,yBACvB//d,KAAK+/d,sBAAsBr7d,MAAM4xC,QAAU,IAE9B,cAAdt2C,KAAK+9B,MAAsC,aAAd/9B,KAAK+9B,MAClC/9B,KAAKgje,mBAEThje,KAAKkie,qBAGAzke,EAAkBuC,KAAK+/d,yBACxB//d,KAAK+/d,sBAAsBr7d,MAAM4xC,QAAU,QAE1C74C,EAAkBuC,KAAKmje,oBACvBnje,KAAKmje,iBAAiBz+d,MAAM4xC,QAAU,QAE3Ct2C,KAAKkke,qBAGb1F,EAAYnje,UAAUytE,SAAW,SAAU9rE,EAAOyvB,EAAMylL,GAC/ClyM,KAAKhD,QACNgD,KAAKhD,UAETgD,KAAKgH,eAAgBhK,SAAUud,UAAWva,KAAKhD,OAAQA,MAAW,GAClE,IAAIgE,EAAUhB,KAAK6iG,KAAKlgG,cAAc,kBAAoB3F,EAAQ,MAClEgD,KAAK85I,cACD94I,IACAhB,KAAK0/d,aAAa1+d,GAClBhB,KAAK+ke,iBAAiB/je,IAER,cAAdhB,KAAK+9B,MAAsC,aAAd/9B,KAAK+9B,MAClC/9B,KAAKgle,QAAQv4c,EAAMzvB,EAAOk1M,GAE1BlyM,KAAK6+d,kBAAoB7+d,KAAK4rB,OAAOwtK,SACrCp5L,KAAKshe,cAActke,GAEvBgD,KAAK6ke,mBACL7ke,KAAKyhe,qBAETjD,EAAYnje,UAAUome,kBAAoB,WAEtC,IADYzhe,KAAKhD,OAASgD,KAAKhD,MAAMP,OAASuD,KAAKhD,MAAMP,OAAS,KACpDuD,KAAKmke,uBAAwB,CAGvCxge,EAFiB3D,KAAK6iG,KAAKrhG,iBAAiB,MACtCmtd,GAAoB/9V,GAAK,mBACV,eAG7B4tW,EAAYnje,UAAU4pe,eAAiB,SAAUjoe,EAAOk1M,EAAKlxM,EAASkke,GAClE,GAAIlle,KAAK8ie,aAAeoC,EAAc,CAClC,IAAI33d,GACA1M,EAAGqxM,EACHr0L,KAAM7c,EACNq6D,SAAUr7D,KAAK4yd,eAAe51d,GAC9B8kM,eAAcoQ,EACdr5K,QAAQ,GAGZ,GADA74B,KAAKwmB,QAAQ,SAAUjZ,GACnBA,EAAUsrB,OACV,OAAO,EAGf,OAAO,GAEX2lc,EAAYnje,UAAU2pe,QAAU,SAAUv4c,EAAMzvB,EAAO6D,GACnD,GAAIb,KAAK+/d,sBAAuB,CAC5B,IAAIlid,EAAO7d,KAAKmle,QAAQ14c,EAAMzvB,EAAO6D,GACrC,GAAIgd,EAAKgb,OACL,OAEJ74B,KAAK+/d,sBAAsBp+d,YAAYkc,EAAK7c,WAGpDw9d,EAAYnje,UAAUqne,gBAAkB,WACpC,IAAI9+d,EACAwhe,EAIJ,GAHAxhe,EAAW5D,KAAK+/d,sBAAsBv+d,iBAAiB,gBACvD4je,EAAgBple,KAAK+/d,sBAAsBv+d,iBAAiB,QAAU28d,GAAWjhe,MAAM,KAAK,IAC5FmH,EAAYT,EAAUw6d,IAClB5yd,GAAQkb,SACR,IAAK,IAAIzU,EAAQ,EAAGA,EAAQmzd,EAAc3oe,OAAQwV,IAC9Cmzd,EAAcnzd,GAAOvN,MAAM4xC,QAAU,QAIjDkob,EAAYnje,UAAUgqe,wBAA0B,SAAUxke,GACtD,IAAIyke,EAAWz/d,EAAQhF,EAAEsG,OAAQ,YAC7Bo+d,EAAYD,EAAS3ie,cAAc,QAAUw7d,GAAWjhe,MAAM,KAAK,IACnE8C,KAAKilB,UAAYjlB,KAAKq2E,WACjBivZ,EAASxhe,UAAUK,SAASi6d,MAC7Bp+d,KAAK0ie,kBACL6C,EAAU7ge,MAAM4xC,QAAU,GAC1Bgvb,EAASxhe,UAAUM,IAAIg6d,KAE3Bp+d,KAAK45d,eACL/4d,EAAE2kB,mBAGVg5c,EAAYnje,UAAU8pe,QAAU,SAAU3oe,EAAMQ,EAAO6D,GACnD,IAAIw6D,GAAa5uC,KAAMzvB,EAAOA,MAAOA,GACjCwoe,EAAOrke,EAAc,QACrBkC,UAAW66d,GACXz6d,OAASgie,aAAczoe,EAAOkjC,MAAS1jC,KAEvCkpe,EAAcvke,EAAc,QAAUkC,UAv5C/B,kBAw5CPkie,EAAYpke,EAAc,QAAUkC,UAAW86d,KAInD,GAHIn+d,KAAKsge,WACLjla,EAAWr7D,KAAK4yd,eAAe51d,IAE/BgD,KAAKk4d,gBAAkBz6d,EAAkB49D,GAEzC,IAAK,IAAIj9D,EAAK,EAAGyE,EADImM,GAAQhP,KAAKk4d,cACZvjb,CAAe0mB,GAAWj9D,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAClE,IAAIyf,EAAOhb,EAAGzE,GACdsne,EAAY/je,YAAYkc,QAI5B6nd,EAAY1je,UAAYxF,EAE5Bgpe,EAAK7je,YAAY+je,GACjB,IAAIn4d,GACAu0L,eAAcjhM,EACdw6D,SAAUA,EACVx6D,EAAGA,EACH8ke,SAAU,SAAU9he,GAChBF,GAAU6he,GAAO3he,IAErBg1B,QAAQ,GAGZ,OADA74B,KAAKwmB,QAAQ,UAAWjZ,GACpBA,EAAUsrB,QACDA,QAAQ,EAAM73B,QAASwke,IAEhCh6d,GAAQkb,UACR8+c,EAAK1he,UAAUM,IAx6CT,cAy6CNgB,GAAQmge,GAAYC,GACpBD,EAAU7ge,MAAM4xC,QAAU,OAC1B/wC,GAAanB,IAAIohe,EAAM,QAASxle,KAAKqle,wBAAyBrle,QAG9DuF,GAAanB,IAAIohe,EAAM,YAAaxle,KAAKwke,UAAWxke,MAChDA,KAAKolB,iBACLogd,EAAK7je,YAAY4je,IAGzBhge,GAAanB,IAAImhe,EAAW,YAAavle,KAAKyke,aAAczke,OACnD64B,QAAQ,EAAO73B,QAASwke,KAErChH,EAAYnje,UAAUioe,eAAiB,WACnC,IAAIttd,EAAQzT,EAAWvC,KAAK8jN,YAC5B,GAAI9tM,EAAMzX,QAAQ,MAAQ,EAAG,CAEzByX,GADkBhW,KAAKm/d,iBAAiBvzd,wBAA6B,MAAI4P,WAAWxF,GAAS,KAC1E9I,WAAa,KAEpC,OAAO8I,GAEXwod,EAAYnje,UAAUuqe,QAAU,WACxB5le,KAAKilB,UAAYjlB,KAAKq2E,UACtBr2E,KAAKkie,oBAGb1D,EAAYnje,UAAUwqe,SAAW,WACxB7le,KAAK8yd,aACN9yd,KAAKk/d,aAAax6d,MAAM4xC,QAAU,SAG1Ckob,EAAYnje,UAAU81d,WAAa,SAAU5tZ,EAAY33C,GACrD,IAAI8nD,GAAUj2E,EAAkBmuB,EAAO8nD,SACnCoyZ,EAAgBl6c,EAAO3oB,WAQ3B,OAPAjD,KAAK+le,mBAAsC,OAAhBn6c,EAAOa,MAAkC,OAAjBb,EAAO5uB,OACtD4uB,OAAQk6c,EAAej1W,SAAUn9C,EAAS6iH,gBAAkBkC,cAAe,kBACzE7sK,QAAU5uB,MAAO,SACvB0B,EAAOsB,KAAK+le,mBAAoB/le,KAAK+le,mBAAoBn6c,GAAQ,GAC/C,aAAd5rB,KAAK+9B,MACL/9B,KAAK+N,OAAO,cAAgBojF,OAAQ,oBAAqB1xD,OAAsB,aAAdz/B,KAAK+9B,KAAqBwlC,WAAYA,EAAYuia,cAAeA,IAE/H9le,KAAK+le,oBAEhBvH,EAAYnje,UAAUyvH,YAAc,WAChC,IAAI/qH,EAAQC,KAIZ,GAHKA,KAAK6iG,MACN1X,EAAO9vF,UAAU0wG,OAAOzqG,KAAKtB,OAE5BA,KAAKqnH,SAAU,CAChB,IAAIpnH,GAAS44B,QAAQ,GAErB,GADA74B,KAAKwmB,QAAQ,aAAcvmB,GACvBA,EAAK44B,OACL,OAEJr4B,SAASuL,KAAKpK,YAAY3B,KAAKytJ,cAC/B,IAAIu4U,EAAgBjxc,SAAS/0B,KAAK6nN,YAAa,IA6B/C,GA5BA7nN,KAAKytJ,aAAa/oJ,MAAMC,WAAa,SACjC3E,KAAKq5L,iBACLr5L,KAAK85d,oBACLkM,GAAiBhme,KAAK4kF,OAAOh5E,wBAAwBmK,QAEzD3Q,GAAQpF,KAAK6iG,MAAO7iG,KAAKytJ,cACrBztJ,KAAK6mH,iBACL7mH,KAAK+mH,oBACLi/W,GAAiBhme,KAAKstM,OAAO1hM,wBAAwBmK,QAEvC,aAAd/V,KAAK+9B,MAAuB/9B,KAAKyge,eACjCzge,KAAK+N,OAAO,aAAeojF,OAAQ,oBAAqB1xD,OAAsB,aAAdz/B,KAAK+9B,OACrEioc,GAAiBhme,KAAKime,iBAEH,aAAdjme,KAAK+9B,MAAwB/9B,KAAKyge,eAAmBzge,KAAKq5L,gBAAmBr5L,KAAK6mH,eAIpE,aAAd7mH,KAAK+9B,MAAwB/9B,KAAKyge,gBACvCzge,KAAK+N,OAAO,aAAeojF,OAAQ,oBAAqB1xD,OAAsB,aAAdz/B,KAAK+9B,OACrEioc,EAAgBjxc,SAAS/0B,KAAK6nN,YAAa,IACvC7nN,KAAKq5L,gBAAkBr5L,KAAK4kF,SAC5BohZ,GAAiBhme,KAAK4kF,OAAOh5E,wBAAwBmK,QAErD/V,KAAK6mH,gBAAkB7mH,KAAKstM,SAC5B04R,GAAiBhme,KAAKstM,OAAO1hM,wBAAwBmK,UAVzD/V,KAAK+N,OAAO,aAAeojF,OAAQ,oBAAqB1xD,OAAsB,aAAdz/B,KAAK+9B,OACrEioc,EAAgBjxc,SAAS/0B,KAAK6nN,YAAa,KAY7B,aAAd7nN,KAAK+9B,KAAqB,CAC1B,IAAIyhK,GACAruG,OAAQ,oBACR1xD,OAAsB,aAAdz/B,KAAK+9B,KACb4zF,aAAc3xH,KAAKytJ,cAEvBztJ,KAAK+N,OAAO,YAAayxL,GACzBwmS,GAAiBhme,KAAK+5d,gBACtBp2d,GAAU3D,KAAKytJ,cAAe,cAET,SAArBztJ,KAAK6nN,aACL7nN,KAAK6iG,KAAKn+F,MAAM6uD,UAAYhxD,EAAWyje,GACvChme,KAAKytJ,aAAa/oJ,MAAM6uD,UAAYhxD,EAAWvC,KAAK6nN,cAGpD7nN,KAAK6iG,KAAKn+F,MAAM6uD,UAAYhxD,EAAWvC,KAAK6nN,aAEhD7nN,KAAKqnH,SAAW,IAAI7F,GAAMxhH,KAAKytJ,cAC3Bz3I,MAAOhW,KAAKsje,iBAAkB7/W,WAAY,WAAYvvG,UAAYkC,EAAG,OAAQC,EAAG,UAChF+rG,SAAUpiH,KAAK87D,eAAgBioD,WAAa3tG,EAAG,OAAQC,EAAG,QAAUpK,QAAS,EAC7EiH,UAAWlT,KAAKkT,UAChBuvD,OAAQziE,KAAKyiE,OACbxgE,MAAO,WACClC,EAAMsnH,SAASrmH,QAAQqT,eACvBhP,EAAOtF,EAAMsnH,SAASrmH,UAG9BU,KAAM,WACF3B,EAAMgO,OAAO,cAAgBojF,OAAQ,oBAAqB1xD,OAAuB,aAAf1/B,EAAMg+B,KAAqB/gC,MAAO,aAG5GgD,KAAKqnH,SAASplH,QACdjC,KAAKytJ,aAAa/oJ,MAAMC,WAAa,GACnB,aAAd3E,KAAK+9B,MAAuBvyB,GAAQkb,UACpC1mB,KAAK+N,OAAO,mBAAqBojF,OAAQ,oBAAqB1xD,OAAsB,aAAdz/B,KAAK+9B,SAIvFygc,EAAYnje,UAAUy+d,kBAAoB,WAElC95d,KAAK4kF,QACL5kF,KAAK4kF,OAAOrgF,SAEhBvE,KAAK4kF,OAASpkF,SAASW,cAAc,OACrCwC,GAAU3D,KAAK4kF,QAviDV,gBA0iDL,IAAK,IADDhhF,EADaoL,GAAQhP,KAAKq5L,eACf1kJ,KACN5mB,EAAO,EAAGA,EAAOnqB,EAASnH,OAAQsxB,IACvC/tB,KAAK4kF,OAAOjjF,YAAYiC,EAASmqB,IAEnB,aAAd/tB,KAAK+9B,MAAuB/9B,KAAKyge,cACjC57d,GAAS7E,KAAK4kF,QAAS5kF,KAAKytJ,cAG5BroJ,GAAQpF,KAAK4kF,QAAS5kF,KAAKytJ,cAE/BloJ,GAAanB,IAAIpE,KAAK4kF,OAAQ,YAAa5kF,KAAKkme,gBAAiBlme,OAErEw+d,EAAYnje,UAAU0rH,kBAAoB,WAElC/mH,KAAKstM,QACLttM,KAAKstM,OAAO/oM,SAEhBvE,KAAKstM,OAAS9sM,SAASW,cAAc,OACrCwC,GAAU3D,KAAKstM,QA5jDV,gBA+jDL,IAAK,IADD1pM,EADaoL,GAAQhP,KAAK6mH,eACflyE,KACN5mB,EAAO,EAAGA,EAAOnqB,EAASnH,OAAQsxB,IACvC/tB,KAAKstM,OAAO3rM,YAAYiC,EAASmqB,IAErC3oB,GAAQpF,KAAKstM,QAASttM,KAAKytJ,cAC3BloJ,GAAanB,IAAIpE,KAAKstM,OAAQ,YAAattM,KAAKkme,gBAAiBlme,OAErEw+d,EAAYnje,UAAU8qe,SAAW,SAAUtle,GACvC,GAAIb,KAAKilB,UAAYjlB,KAAKq2E,SAAU,CAChC,IAAItoD,OAAO,EACPiyc,EAAahge,KAAKhD,MAAQgD,KAAKhD,MAAMqE,WACzC,IAAK0sB,EAAO/tB,KAAKhD,MAAM,GAA0B,IAAtBgD,KAAKhD,MAAMP,OAAcsxB,EAAO/tB,KAAKhD,MAAM,GAClEgD,KAAKige,YAAYlyc,EAAMltB,GAE3B,GAAIb,KAAKw/d,UAAYx/d,KAAKkvd,SAAU,CAChC,IAAIrsX,EAAO7iG,KAAKw/d,SAAS59d,UAAY5B,KAAKw/d,SAAS59d,WAAU,GAAQ5B,KAAKw/d,SAC1Ex/d,KAAK6wd,iBAAiBhuX,EAAM7iG,KAAKsge,UAErCtge,KAAKs/d,uBACLt/d,KAAKmge,gBAAgBnge,KAAKoge,eACR,QAAdpge,KAAK+9B,MACL/9B,KAAKyie,kBAETzie,KAAKqge,mBACDrge,KAAK2sJ,eACL3sJ,KAAK45d,eAEJ55d,KAAK8yd,aACN9yd,KAAKqhe,iBAAiBxge,EAAGb,KAAKhD,MAAOgje,GACnB,aAAdhge,KAAK+9B,MACL/9B,KAAKg8D,aAAa95D,SAGR,aAAdlC,KAAK+9B,OACL/9B,KAAKohe,qBACLphe,KAAK2ie,qBAET9he,EAAE2kB,mBAGVg5c,EAAYnje,UAAU8na,aAAe,WACjCnja,KAAK45d,gBACA55d,KAAK8yd,YAAc9yd,KAAKije,aAAejje,KAAKije,YAAY5ud,eACzDrU,KAAKyie,mBAGbjE,EAAYnje,UAAU+6d,kBAAoB,WACtCp2d,KAAKhD,MAAQ,MAEjBwhe,EAAYnje,UAAUg7d,UAAY,WAC9B9wd,GAAanB,IAAIpE,KAAKm/d,iBAAkB,YAAan/d,KAAKwie,aAAcxie,MACxEuF,GAAanB,IAAIvI,OAAQ,SAAUmE,KAAKmja,aAAcnja,MACtDuF,GAAanB,IAAIpE,KAAKg8D,aAAc,QAASh8D,KAAKy6H,QAASz6H,MAC3DuF,GAAanB,IAAIpE,KAAKg8D,aAAc,UAAWh8D,KAAKyje,UAAWzje,MAC/DuF,GAAanB,IAAIpE,KAAKg8D,aAAc,QAASh8D,KAAKgie,MAAOhie,MACvC,aAAdA,KAAK+9B,MACLx4B,GAAanB,IAAIpE,KAAKg8D,aAAc,QAASh8D,KAAKw5d,QAASx5d,MAE/DuF,GAAanB,IAAIpE,KAAKg8D,aAAc,OAAQh8D,KAAK+1d,OAAQ/1d,MACzDuF,GAAanB,IAAIpE,KAAKm/d,iBAAkB,YAAan/d,KAAK4le,QAAS5le,MACnE,IAAI+xI,EAAclsI,EAAQ7F,KAAKg8D,aAAc,QACzC+1E,GACAxsI,GAAanB,IAAI2tI,EAAa,QAAS/xI,KAAKo2d,kBAAmBp2d,MAEnEuF,GAAanB,IAAIpE,KAAKm/d,iBAAkB,WAAYn/d,KAAK6le,SAAU7le,MACnEuF,GAAanB,IAAIpE,KAAKk/d,aAAc,UAAWl/d,KAAKmme,SAAUnme,OAElEw+d,EAAYnje,UAAUm+d,QAAU,WACxBx5d,KAAK0+d,cACL1+d,KAAKk0d,YAAa,EAGlBl0d,KAAKk0d,YAAa,EAEtBl0d,KAAK0+d,eAAgB,GAEzBF,EAAYnje,UAAUoX,UAAY,WAC9BzS,KAAK0zd,iBACLvoY,EAAO9vF,UAAUoX,UAAUnR,KAAKtB,OAEpCw+d,EAAYnje,UAAUq4d,eAAiB,WACnC1zd,KAAK0ge,sBACL1ge,KAAK6zd,iBAAkB,EACvB7zd,KAAK29d,cAAe,EACpB39d,KAAKoie,oBAAqB,EAC1Bpie,KAAKu/d,cAAe,EACpBv/d,KAAKqje,WAAY,EACjBrje,KAAKs9d,YAAa,EAClBt9d,KAAKi7L,SAAU,EACfj7L,KAAKk1H,SAAU,EACfl1H,KAAKsie,aAAc,GAEvB9D,EAAYnje,UAAU09d,WAAa,SAAUqH,GACzC,IAGIryc,EAHAvxB,EAAO,GACP4pe,EAAsB,cAAdpme,KAAK+9B,MAAsC,aAAd/9B,KAAK+9B,KAC1CtR,KAEAq3K,EAAW9jM,KAAKkvd,SAGpB,GAFAlvd,KAAKkvd,SAAWlvd,KAAKsge,SACrBtge,KAAKwzd,cAAcxxd,UAAY,IAC1BvE,EAAkBuC,KAAKhD,OACxB,IAAK,IAAIiV,EAAQ,GAAIxU,EAAkBuC,KAAKhD,MAAMiV,IAASA,IAOvDzV,IALIuxB,EADA/tB,KAAKkvd,SACElvd,KAAKmwd,eAAenwd,KAAKhD,MAAMiV,IAG/BjS,KAAKhD,MAAMiV,IAEPmud,EAAgB,IAC/B3zc,EAAKjoB,KAAKupB,GACV/tB,KAAKwzd,cAAcxxd,WAAa,4BAA8BhC,KAAKhD,MAAMiV,GAAS,KAAOA,EAAQ,YAGzGjS,KAAKysB,KAAOA,EAAKvf,WACbk5d,IACApme,KAAKmje,iBAAiBnhe,UAAYxF,GAEtCwD,KAAKkvd,SAAWprR,GAEpB06R,EAAYnje,UAAU6le,mBAAqB,WACvC,GAAIlhe,KAAK6iG,KAAM,CACX,IAAIp2E,OAAO,EAGPzrB,OAAU,EACVhE,OAAQ,EAKZ,GAJIgD,KAAK+/d,wBACL//d,KAAK+/d,sBAAsB/9d,UAAY,IAE3ChC,KAAKwjN,uBACA/lN,EAAkBuC,KAAKhD,OACxB,IAAK,IAAIiV,EAAQ,GAAIxU,EAAkBuC,KAAKhD,MAAMiV,IAASA,IAKvD,GAJAjV,EAAQgD,KAAKhD,MAAMiV,GACnBjR,EAAUhB,KAAK6+d,iBAAmB7+d,KAAKi5L,UAAUt2L,cAAc,kBAAoB3F,EAAQ,MACrFgD,KAAK6iG,KAAKlgG,cAAc,kBAAoB3F,EAAQ,MAC1DyvB,EAAOzsB,KAAKmwd,eAAenzd,GACtBgE,GAAsD,SAA1CA,EAAQ6R,aAAa,kBACjC7R,GAAsD,SAA1CA,EAAQ6R,aAAa,kBAA+B7S,KAAK6+d,mBACnD,QAAd7+d,KAAK+9B,MAAgC,YAAd/9B,KAAK+9B,MACjCtR,EAAOzsB,KAAKmwd,eAAenzd,GAC3BgD,KAAKgle,QAAQv4c,EAAMzvB,GACnBgD,KAAK+ke,iBAAiB/je,QAErB,GAAIhE,GAASgD,KAAK4+d,iBAAkB,CACrC,IAAIyH,EAAYrme,KAAKkvd,SAASzyd,OAC1B6K,KACJlK,EAAS4C,KAAK4rB,OAAOa,KAAMzvB,EAAOsK,GAClClK,EAAS4C,KAAK4rB,OAAO5uB,MAAOA,EAAOsK,GACnCtH,KAAKskM,QAAQh9L,EAAU++d,GACvB55c,EAAOzsB,KAAKmwd,eAAenzd,GAC3BgD,KAAKgle,QAAQv4c,EAAMzvB,GACnBgD,KAAK+ke,iBAAiB/je,GAIhB,aAAdhB,KAAK+9B,MACL/9B,KAAKyie,kBACLzie,KAAKqhe,iBAAiB,KAAMrhe,KAAKhD,MAAOgD,KAAKgge,YAC7Chge,KAAK2ie,oBACL3ie,KAAKmge,gBAAgBnge,KAAKoge,gBAG1Bpge,KAAKmge,gBAAgBnge,KAAKoge,eAEZ,aAAdpge,KAAK+9B,MAAuB/9B,KAAKyge,eAAiBhje,EAAkBuC,KAAKhD,QACzEgD,KAAK+N,OAAO,kBAAoBojF,OAAQ,oBAAqB1xD,OAAsB,aAAdz/B,KAAK+9B,KAAqB/gC,MAAO,YAErGgD,KAAK8yd,aACY,QAAd9yd,KAAK+9B,KACL/9B,KAAK+/d,sBAAsBr7d,MAAM4xC,QAAU,GAExB,cAAdt2C,KAAK+9B,MAAsC,aAAd/9B,KAAK+9B,MACvC/9B,KAAKgje,sBAKrBxE,EAAYnje,UAAUg3H,UAAY,SAAUzB,GACxC,OAAQA,IAAOA,EAAG9sH,UAAUK,SAASwqd,GAAoBzwW,YAAc0S,EAAG9sH,UAAUK,SAASwqd,GAAoB57X,QAC7G69B,EAAG9sH,UAAUK,SAASwqd,GAAoB/9V,KAGlD4tW,EAAYnje,UAAU+oe,oBAAsB,SAAUxzW,EAAI/vH,GACtD,IAAI7D,EAAQgD,KAAKymN,kBAAkB71F,EAAG/9G,aAAa,eAC/C4Z,EAAOzsB,KAAKmwd,eAAenzd,GAE/B,GADAgD,KAAK4/L,cACA5/L,KAAKhD,QAAwC,IAA/BgD,KAAKhD,MAAMuB,QAAQvB,GAuBlCgD,KAAKige,YAAYjje,EAAO6D,OAvByB,CAEjD,GADiBb,KAAKile,eAAejoe,EAAO6D,EAAG+vH,EAA0C,SAArCA,EAAG/9G,aAAa,kBAEhE,OAEJ,IAAK7S,KAAK4+d,kBAAoB5+d,KAAKm1d,kBAAoBn1d,KAAKw/d,SAAS78d,cAAc,kBAAoB3F,EAAQ,MAAO,CAClH,IAAI+wB,EAAO6iG,EAAGhvH,WAAU,GACpBpF,EAAOwD,KAAK4yd,eAAe51d,GAC/BoI,GAAQ2oB,GAAO/tB,KAAKw/d,UACpBx/d,KAAKsge,SAAS97d,KAAKxE,KAAK4yd,eAAe51d,IACvC,IAAIuQ,GACA2kJ,QAAS11J,EACTq8B,QAAQ,GAGZ,GADA74B,KAAKwmB,QAAQ,uBAAwBjZ,GACjCA,EAAUsrB,OACV,OAGR74B,KAAK2ge,mBAAoB,EACzB3ge,KAAK8oE,SAAS9rE,EAAOyvB,EAAM5rB,KAMnC29d,EAAYnje,UAAUmoN,oBAAsB,WACxC,IAAIngN,EAAYrD,KAAK6+d,iBACjBZ,GACAtP,GAAoBn/U,SACpBl9E,EAAgBtyD,KAAK6iG,KAAKrhG,iBAAiB,IAAM6B,GACjD0qB,EAAOukC,EAAc71D,OACzB,GAAI61D,GAAiBA,EAAc71D,OAE/B,IADA4H,EAAYiuD,EAAejvD,GACpB0qB,EAAO,GACVukC,EAAcvkC,EAAO,GAAGvqB,aAAa,gBAAiB,SACtDuqB,IAGR,IAAKtwB,EAAkBuC,KAAKw/d,UAAW,CACnC,IAAI8G,EAActme,KAAKw/d,SAASh+d,iBAAiB,IAAM6B,GACnDs+d,EAAQ2E,EAAY7pe,OACxB,GAAI6pe,GAAeA,EAAY7pe,OAE3B,IADA4H,EAAYiie,EAAajje,GAClBs+d,EAAQ,GACX2E,EAAY3E,EAAQ,GAAGn+d,aAAa,gBAAiB,SACnC,aAAdxD,KAAK+9B,OACLuoc,EAAY3E,EAAQ,GAAGx8d,kBAAkB3B,aAAa,eAAgB,SACtEa,GAAaiie,EAAY3E,EAAQ,GAAGx8d,kBAAkB4iI,kBAAmB,YAE7E45V,MAMhBnD,EAAYnje,UAAUukM,YAAc,WAChC,IAAIusB,EAAcnsN,KAAK6iG,KAAKrhG,iBAAiB,IAAMmtd,GAAoB9hV,OACnEs/E,GAAeA,EAAY1vN,QAC3B4H,EAAY8nN,EAAawiQ,GAAoB9hV,QAIrD2xV,EAAYnje,UAAUy+I,YAAc,WAChC,GAAI95I,KAAK6iG,KAAM,CACX,IAAIspH,EAAcnsN,KAAK6iG,KAAKrhG,iBAAiB,IAAMmtd,GAAoBzsd,OACnEqke,EAAWvme,KAAKw/d,SAASh+d,iBAAiB,IAAMmtd,GAAoBzsd,OACpEiqN,GAAeA,EAAY1vN,SAC3B4H,EAAY8nN,EAAawiQ,GAAoBzsd,OAC7CmC,EAAYkie,EAAU5X,GAAoBzsd,UAKtDs8d,EAAYnje,UAAUmre,aAAe,SAAU51W,GACvC5wH,KAAKilB,SAAWjlB,KAAKqyH,UAAUzB,KAC/B5wH,KAAK4/L,cACLj8L,GAAUitH,GAAK+9V,GAAoB9hV,SAI3C2xV,EAAYnje,UAAUqke,aAAe,SAAU1+d,GACvChB,KAAKilB,SAAWjlB,KAAKqyH,UAAUrxH,KAC/BhB,KAAK85I,cACLn2I,GAAU3C,GAAU2td,GAAoBzsd,SAGhDs8d,EAAYnje,UAAU0pe,iBAAmB,SAAU/je,GAC/C,IAAIqC,EAAYrD,KAAK6+d,iBACjBZ,GACAtP,GAAoBn/U,SACxB,GAAIxvI,KAAKqyH,UAAUrxH,KAAaA,EAAQ8C,UAAUK,SAASwqd,GAAoB9hV,OAAQ,CAInF,GAHAlpI,GAAU3C,GAAUqC,GACpBrD,KAAK2ke,gBAAe,EAAO3je,EAAQ6R,aAAa,eAChD7R,EAAQwC,aAAa,gBAAiB,QACpB,aAAdxD,KAAK+9B,KAAqB,CAC1B,IAAI0oc,EAAYzle,EAAQmE,kBAAkB0N,aAAa,iBACrC,UAAd4zd,GAAyBhpe,EAAkBgpe,KAC3Czme,KAAK+N,OAAO,cAAgBojF,OAAQ,oBAAqB1xD,OAAsB,aAAdz/B,KAAK+9B,KAAqB6yF,GAAI5vH,EAASH,EAAGb,OAGnHA,KAAK+N,OAAO,cAAgBojF,OAAQ,oBAAqB1xD,OAAsB,aAAdz/B,KAAK+9B,KAAqB6yF,GAAI5vH,EAASH,EAAGb,OACxE,OAA/BA,KAAK+/d,uBACL//d,KAAKkge,sBAETx8d,EAAW1D,KAAKg8D,cAAgBw8E,wBAAyBx3I,EAAQsC,OAGzEk7d,EAAYnje,UAAU8ke,gBAAkB,SAAUuG,GAC9C1me,KAAK+4d,WAAW2N,IAEpBlI,EAAYnje,UAAU6nN,aAAe,SAAUriN,GAC3Cb,KAAKy+d,mBAAoB,EACzB,IACI7tW,EAAK/qH,EADIhF,EAAEsG,OACU,IAAMwnd,GAAoB/9V,IACnD,GAAI5wH,KAAKqyH,UAAUzB,GAAK,CACpB,IAAI0sG,EAAQt9N,KAAKhD,OAASgD,KAAKhD,MAAMP,OAASuD,KAAKhD,MAAMP,OAAS,EAC9Dm0H,EAAG9sH,UAAUK,SAAS,cACtBm5N,GAAgB,GAEhBA,EAAQt9N,KAAKmke,yBACbnke,KAAKoke,oBAAoBxzW,EAAI/vH,GAC7Bb,KAAK0/d,aAAa9uW,IACb5wH,KAAK4+d,kBAAoB5+d,KAAKm1d,iBAAmBn1d,KAAKw/d,UAAYx/d,KAAKkvd,UACtD,aAAdlvd,KAAK+9B,MACL/9B,KAAK2/d,oBAAoB/uW,EAAG/9G,aAAa,eAE7C7S,KAAKuge,oBAGLvge,KAAKqge,oBAGK,aAAdrge,KAAK+9B,MACL/9B,KAAKyie,kBACLzie,KAAK2ie,oBACL3ie,KAAKmge,gBAAgBnge,KAAKoge,gBAG1Bpge,KAAKmge,gBAAgBnge,KAAKoge,eAE9Bpge,KAAKwhe,iBACLxhe,KAAK45d,eACD55d,KAAK6+d,kBACL7+d,KAAKs/d,uBAELt/d,KAAK8+d,mBACL9+d,KAAKu1d,YAGL10d,EAAE2kB,iBAENxlB,KAAKqge,wBAGLx/d,EAAE2kB,iBAEY,aAAdxlB,KAAK+9B,MACL/9B,KAAKy/d,iBAAiBhie,EAAkBmzH,GAAM,KAAOA,EAAG/0G,aAE5D7b,KAAKohe,sBAET5C,EAAYnje,UAAUgoN,YAAc,SAAUxiN,GAC1C,IAAI6pN,EAAY7kN,EAAQhF,EAAEsG,OAAQ,IAAMwnd,GAAoB/9V,IAC5D5wH,KAAKwme,aAAa97Q,IAEtB8zQ,EAAYnje,UAAUioN,aAAe,SAAUziN,GAC3Cb,KAAK4/L,eAET4+R,EAAYnje,UAAU6qe,gBAAkB,SAAUrle,GAC9CA,EAAE2kB,iBACFxlB,KAAKy+d,mBAAoB,GAE7BD,EAAYnje,UAAUm8d,gBAAkB,SAAU32d,GAC9C,GAAkB,aAAdb,KAAK+9B,KAAqB,CAC1B,IAAI52B,EAAStG,EAAEsG,QACR1J,EAAkBuC,KAAKqnH,WAAaxhH,EAAQsB,EAAQ,IAAMnH,KAAKqnH,SAASrmH,QAAQsC,KAClFtD,KAAK87D,eAAe33D,SAAStD,EAAEsG,QAIhCnH,KAAKy+d,mBAAqBjzd,GAAQwiG,MAA8B,SAAtBxiG,GAAQmb,KAAK8Q,OAAqBj3B,SAASmlH,gBAAkB3lH,KAAKg8D,aAH5Gh8D,KAAKy+d,mBAAoB,IAOrCD,EAAYnje,UAAUuoN,eAAiB,WACnCr+M,GAAanB,IAAI5D,SAAU,YAAaR,KAAKw3d,gBAAiBx3d,MAC9DuF,GAAanB,IAAIpE,KAAK6iG,KAAM,YAAa7iG,KAAKkme,gBAAiBlme,MAC/DuF,GAAanB,IAAIpE,KAAK6iG,KAAM,UAAW7iG,KAAKkjN,aAAcljN,MAC1DuF,GAAanB,IAAIpE,KAAK6iG,KAAM,YAAa7iG,KAAKqjN,YAAarjN,MAC3DuF,GAAanB,IAAIpE,KAAK6iG,KAAM,WAAY7iG,KAAKsjN,aAActjN,OAG/Dw+d,EAAYnje,UAAUyle,iBAAmB,WACrCv7d,GAAahB,OAAO/D,SAAU,YAAaR,KAAKw3d,iBAC5Cx3d,KAAK6iG,OACLt9F,GAAahB,OAAOvE,KAAK6iG,KAAM,YAAa7iG,KAAKkme,iBACjD3ge,GAAahB,OAAOvE,KAAK6iG,KAAM,UAAW7iG,KAAKkjN,cAC/C39M,GAAahB,OAAOvE,KAAK6iG,KAAM,YAAa7iG,KAAKqjN,aACjD99M,GAAahB,OAAOvE,KAAK6iG,KAAM,WAAY7iG,KAAKsjN,gBAIxDk7Q,EAAYnje,UAAU6oe,iBAAmB,WAChClke,KAAKhD,OAAUgD,KAAKhD,MAAMP,QAAsC,KAA5BuD,KAAKg8D,aAAah/D,QACvDgD,KAAKk/d,aAAax6d,MAAM4xC,QAAU,SAG1Ckob,EAAYnje,UAAU6me,iBAAmB,WAChClie,KAAKhD,OAASgD,KAAKhD,MAAMP,QAAuC,KAA5BuD,KAAKg8D,aAAah/D,MACvDgD,KAAKk/d,aAAax6d,MAAM4xC,QAAU,GAGlCt2C,KAAKk/d,aAAax6d,MAAM4xC,QAAU,QAG1Ckob,EAAYnje,UAAUsmB,YAAc,WAC5BlkB,EAAkBuC,KAAK02d,kBACiB,SAApC12d,KAAKk/d,aAAax6d,MAAM4xC,QACxBt2C,KAAK02d,eAAiB12d,KAAKk/d,cAG3Bl/d,KAAK02d,eAAiBv1d,EAAc,QAAUkC,UAAWi7d,GAAkB,uBAC3Et+d,KAAKm/d,iBAAiBx9d,YAAY3B,KAAK02d,iBAE3C/yd,GAAU3D,KAAK02d,gBAv9DR,sBAw9DPl8c,IACIrT,OAAQnH,KAAK02d,eACb1gd,MAAOxK,GAAQkb,SAAW,OAAS,SAEvC/E,GAAY3hB,KAAK02d,kBAGzB8H,EAAYnje,UAAUqnB,YAAc,WAC3BjlB,EAAkBuC,KAAK02d,kBACxBh0c,GAAY1iB,KAAK02d,gBACjBryd,GAAarE,KAAK02d,gBAl+DX,sBAm+DH12d,KAAK02d,eAAe5yd,UAAUK,SAl+D1B,qBAm+DJkB,EAAOrF,KAAK02d,gBAGZ12d,KAAK02d,eAAe10d,UAAY,GAEpChC,KAAK02d,eAAiB,OAG9B8H,EAAYnje,UAAUone,gBAAkB,WAQpC,GAPIzie,KAAKmje,kBACLnje,KAAKoje,mBAELpje,KAAK+/d,wBACL//d,KAAK+/d,sBAAsBr7d,MAAM4xC,QAAU,QAE/Ct2C,KAAKije,YAAYv+d,MAAM4xC,QAAU,GAC7Bt2C,KAAKhD,OAASgD,KAAKhD,MAAMP,OAAQ,CACjC,IAAID,EAAO,GACPuxB,OAAO,EACP+1K,OAAW,EACXmkD,EAAY,EACZ0+O,OAAc,EACd3wM,OAAY,EAChBh2R,KAAKije,YAAYjhe,UAAY,GAC7B,IAMI4ke,EADO,IAAIpvX,GAAK,aAJhBy4W,kBAAmB,mBACnBC,sBAAuB,qBACvB2W,sBAAuB,oBAEkB7me,KAAKgO,QACzB+lE,YAAY,yBACjC+yZ,EAAe3le,EAAc,QAC7BkC,UA9gEK,aAghELsxC,EAAiB3lC,GAAQ43d,GAC7BE,EAAanle,YAAYgzC,GAAiB71B,MAAS9e,KAAKhD,MAAMP,SAAU,IACxEuD,KAAKije,YAAYthe,YAAYmle,GAC7B,IAAIC,EAAaD,EAAal7d,wBAAwBoK,MACtDzR,EAAOuie,GACP9me,KAAKije,YAAYjhe,UAAY,GACbhC,KAAK+7D,cAAcnwD,wBAAwBoK,MAA3D,IACIgxd,EAAmBjyc,SAASl5B,OAAOsR,iBAAiBnN,KAAKm/d,kBAAkBnpd,MAAO,IAClF+e,SAASl5B,OAAOsR,iBAAiBnN,KAAKm/d,kBAAkBh3Q,YAAa,IACrEpzL,SAASl5B,OAAOsR,iBAAiBnN,KAAKm/d,kBAAkBj3Q,aAAc,IACtE++Q,OAAc,EAClB,IAAKxpe,EAAkBuC,KAAKhD,OACxB,IAAK,IAAIiV,EAAQ,GAAIxU,EAAkBuC,KAAKhD,MAAMiV,IAASA,IAAS,CAEhE,GADAzV,GAAmB,IAAVyV,EAAe,GAAKjS,KAAKoge,cAAgB,IAC9Cpge,KAAKsge,UAAYtge,KAAKsge,SAAS7je,OAC/B,GAAkB,aAAduD,KAAK+9B,KAAqB,CAC1Bkpc,EAAc,IACd,IAAIC,EAAUlne,KAAKkvd,SACnBlvd,KAAKkvd,SAAWlvd,KAAKsge,SACrBvyc,EAAO/tB,KAAKmwd,eAAenwd,KAAKhD,MAAMiV,IACtCjS,KAAKkvd,SAAWgY,OAGhBD,EAAc,EACdl5c,EAAO/tB,KAAKmwd,eAAenwd,KAAKhD,MAAMiV,SAI1C8b,EAAO/tB,KAAKhD,MAAMiV,GAMtB,GAJAzV,GAAQuxB,EACRA,EAAO/tB,KAAKije,YAAYjhe,UACxBhC,KAAKije,YAAYjhe,UAAYxF,GAC7Bmqe,EAAc3me,KAAKije,YAAYr3d,wBAAwBoK,OACnCgxd,EAAmBC,EAAa,MAC/B9re,IAAb2oM,IACA/1K,EAAO+1K,EACP7xL,EAAQg2O,EAAY,GAExBjoP,KAAKije,YAAYjhe,UAAY+rB,EAC7BioQ,EAAYh2R,KAAKhD,MAAMP,OAASwV,EAChC,MAEM00d,EAAcI,GAAeC,GACnCljS,EAAWtnM,EACXyrP,EAAYh2O,GAEG,IAAVA,IACL6xL,EAAW,GACXmkD,GAAa,GAIrB+tC,EAAY,IACZ8wM,EAAa9ke,UAAY,GACzB8ke,EAAanle,YAAYgzC,GAAiB71B,MAASk3Q,IAAa,IAChEh2R,KAAKije,YAAYthe,YAAYmle,SAIjC9me,KAAKije,YAAYjhe,UAAY,GAC7BhC,KAAKije,YAAYv+d,MAAM4xC,QAAU,QAGzCkob,EAAYnje,UAAUk8d,YAAc,WAChChyd,GAAahB,OAAOvE,KAAKm/d,iBAAkB,YAAan/d,KAAKwie,cAC7Dj9d,GAAahB,OAAO1I,OAAQ,SAAUmE,KAAKmja,cAC3C59Z,GAAahB,OAAOvE,KAAKg8D,aAAc,QAASh8D,KAAKy6H,SACrDl1H,GAAahB,OAAOvE,KAAKg8D,aAAc,UAAWh8D,KAAKyje,WACrC,aAAdzje,KAAK+9B,MACLx4B,GAAahB,OAAOvE,KAAKg8D,aAAc,QAASh8D,KAAKw5d,SAEzDj0d,GAAahB,OAAOvE,KAAKg8D,aAAc,QAASh8D,KAAKgie,OACrD,IAAIjwV,EAAclsI,EAAQ7F,KAAKg8D,aAAc,QACzC+1E,GACAxsI,GAAahB,OAAOwtI,EAAa,QAAS/xI,KAAKo2d,mBAEnD7wd,GAAahB,OAAOvE,KAAKg8D,aAAc,OAAQh8D,KAAK+1d,QACpDxwd,GAAahB,OAAOvE,KAAKm/d,iBAAkB,YAAan/d,KAAK4le,SAC7Drge,GAAahB,OAAOvE,KAAKm/d,iBAAkB,WAAYn/d,KAAK6le,UAC5Dtge,GAAahB,OAAOvE,KAAKk/d,aAAc,YAAal/d,KAAKmme,WAE7D3H,EAAYnje,UAAU8re,cAAgB,SAAU74b,GAC5C,IAAIsiF,EAIAn0H,GAHJm0H,EAAK5wH,KAAK6iG,KAAKrhG,iBAAiB8sC,EAC5B,iDACA,kDACY7xC,OAChB,GAAIm0H,GAAMA,EAAGn0H,OACT,KAAOA,EAAS,GACZuD,KAAKoke,oBAAoBxzW,EAAGn0H,EAAS,GAAI,MACzCA,IAGU,QAAduD,KAAK+9B,MAAmB/9B,KAAK2sJ,cAI7B3sJ,KAAK+7D,cAAcj4D,UAAUS,OAAO85d,IAHpCr+d,KAAKyie,kBAKS,aAAdzie,KAAK+9B,MACL/9B,KAAKyie,kBACLzie,KAAK2ie,oBACL3ie,KAAKmge,gBAAgBnge,KAAKoge,gBAG1Bpge,KAAKmge,gBAAgBnge,KAAKoge,eAE9Bpge,KAAKohe,sBAET5C,EAAYnje,UAAU6vN,UAAY,WAC1BlrN,KAAKqnH,UACLrnH,KAAKqnH,SAASrgH,eAAgBy7D,OAAUziE,KAAKyiE,UAGrD+7Z,EAAYnje,UAAU42d,iBAAmB,SAAU3nd,GAC3C7M,EAAkBuC,KAAK6iG,MACvB7iG,KAAK8qH,cAGL9qH,KAAKswd,UAAUtwd,KAAKujE,YAEpBvjE,KAAKhD,OAASgD,KAAKhD,MAAMP,QACzBuD,KAAKuge,oBAGb/B,EAAYnje,UAAU+re,aAAe,WACjCpne,KAAKihe,aAAc,EACnBjhe,KAAK8qH,eAKT0zW,EAAYnje,UAAUmxG,eAAiB,WACnC,OAAOxsG,KAAKgtG,cAAc,WAO9BwxX,EAAYnje,UAAUmsF,kBAAoB,SAAUiF,EAASC,GACrDD,EAAQlpB,aAAe9lE,EAAkBa,OAAOhB,KAAKmvF,EAAQlpB,eAC7DvjE,KAAKw/d,SAAW,KAChBx/d,KAAKsge,SAAW,MAEpBtge,KAAKkyd,kBAAkB,QAAS,cAAezlY,GAC/C,IAAK,IAAIruF,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKmvF,GAAUruF,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC9D,IAAIkM,EAAOzH,EAAGzE,GACd,OAAQkM,GACJ,IAAK,QACL,IAAK,aACiB,aAAdtK,KAAK+9B,MAAuB/9B,KAAKyge,gBAC5Bhje,EAAkBuC,KAAKqnH,YACxBrnH,KAAKqnH,SAAS/0G,UACdtS,KAAKqnH,SAAW,MAEpBrnH,KAAK8qH,eAET,MACJ,IAAK,iBACD9qH,KAAK++d,sBACL,MACJ,IAAK,kBACD/+d,KAAKi/d,kBAAkBxyY,EAAQrnE,iBAC/B,MACJ,IAAK,QACIplB,KAAK6iG,KAGA7iG,KAAK8yd,aACX9yd,KAAKkhe,qBACa,QAAdlhe,KAAK+9B,MACL/9B,KAAKyie,kBAETzie,KAAK2ie,oBACL3ie,KAAKohe,qBACLphe,KAAKqhe,iBAAiB,KAAMrhe,KAAKhD,MAAO0vF,EAAQ1vF,QAThDgD,KAAKone,eAWT,MACJ,IAAK,QACDnhe,EAAkBjG,KAAK87D,gBAAkB9lD,MAASzT,EAAWkqF,EAAQz2E,SACrEhW,KAAKqnH,SAASrgH,eAAgBgP,MAAOhW,KAAKsje,mBAC1C,MACJ,IAAK,cACDtje,KAAKohe,qBACL,MACJ,IAAK,uBACDphe,KAAK+N,OAAO,wBAA0Bsrd,qBAAsB5sY,EAAQ4sY,uBACpE,MACJ,IAAK,gBACiB,QAAdr5d,KAAK+9B,MACL/9B,KAAKyie,kBAETzie,KAAK+4d,WAAWtsY,EAAQ2zY,eACxB,MACJ,IAAK,WACDpge,KAAKytJ,aAAa3pJ,UAAUS,OAAOmoF,EAAQz5E,UAC3CjT,KAAK87D,eAAeh4D,UAAUS,OAAOmoF,EAAQz5E,UAC7CjT,KAAKo/d,iBACL,MACJ,IAAK,YACDp/d,KAAK2+d,UAAUlyY,EAAQv5E,WACvBi4E,EAAO9vF,UAAUmsF,kBAAkBlmF,KAAKtB,KAAMysF,EAASC,GACvD,MACJ,IAAK,WACD1sF,KAAKg/d,eAAevyY,EAAQpW,UAC5Br2E,KAAKu1d,YACL,MACJ,IAAK,UACDv1d,KAAKu1d,YACLv1d,KAAKy/B,OAAOgtD,EAAQxnE,SACpB,MACJ,IAAK,gBACGjlB,KAAKqnH,WACLrnH,KAAKqnH,SAAS/0G,UACdtS,KAAKqnH,SAAW,MAEpBrnH,KAAK8qH,cACL,MACJ,IAAK,mBACD9qH,KAAKqne,eACL,MACJ,IAAK,iBACDrne,KAAK0ke,oBACL,MACJ,IAAK,uBACD,MACJ,IAAK,gBACD1ke,KAAK+N,OAAO,iBAAiB,GAC7B,MACJ,IAAK,cACL,IAAK,iBACL,IAAK,iBACG/N,KAAKqnH,WACLrnH,KAAKqnH,SAAS/0G,UACdtS,KAAKqnH,SAAW,MAEpBrnH,KAAK8qH,cACL,MACJ,QACI,IAAIw8W,OAAU,EACdA,EAAUtne,KAAK+ud,cAAczkd,EAAMmiF,EAASC,GAC5CvB,EAAO9vF,UAAUmsF,kBAAkBlmF,KAAKtB,KAAMsne,EAAQtyL,YAAasyL,EAAQtY,gBAS3FwP,EAAYnje,UAAUk6d,UAAY,WAE9B,GAAIv1d,KAAK2sJ,cAAe,CACpB,IAAIp/I,GAAcqxD,MAAO5+D,KAAKqnH,SAAUxuF,QAAQ,GAEhD,GADA74B,KAAKwmB,QAAQ,QAASjZ,GAClBA,EAAUsrB,OACV,OAEJ,IAAIwxL,GACA5yL,KAAM,UACNvsB,SAAU,IACVrL,MAVI,KAYRG,KAAK6zd,iBAAkB,EACvB7zd,KAAK87D,eAAeh4D,UAAUS,OA3wEtB,eA4wERvE,KAAKqnH,SAAS9lC,KAAK,IAAIjpD,GAAU+xL,IACjC3mN,EAAW1D,KAAKg8D,cAAgBw3D,gBAAiB,UACjDxzH,KAAK+N,OAAO,cAAgBojF,OAAQ,oBAAqB1xD,OAAsB,aAAdz/B,KAAK+9B,KAAqB/gC,MAAO,UAClGgD,KAAKqnH,SAAS9lC,OACdl9E,GAAa7D,SAASuL,KAAM/L,KAAKqnH,SAASrmH,SAAU,uBAO5Dw9d,EAAYnje,UAAU+7d,UAAY,WAC9B,GAAKp3d,KAAKilB,QAAV,CAGA,IAAKjlB,KAAKi5L,UAGN,OAFAj5L,KAAK6zd,iBAAkB,OACvB1oY,EAAO9vF,UAAU0wG,OAAOzqG,KAAKtB,MAGjC,IAAIune,EAAevne,KAAKi5L,UAAUz3L,iBAAiB,kBAAuB/E,OACtE+qe,EAAWxne,KAAKi5L,UAAUz3L,iBAAiB,MACzCmtd,GAAoB/9V,GAAK,IAAMqtW,IAAWxhe,OAC5C8qe,EAAe,GAAMA,IAAiBC,EACtCxne,KAAK6zd,iBAAkB,EAG3B7zd,KAAKq/d,iBASTb,EAAYnje,UAAUuK,UAAY,SAAU0oC,GACxC,IAAIvuC,EAAQC,KACZ,GAAIvC,EAAkBuC,KAAK6iG,MACvB7iG,KAAKghe,gBAAkB,WACnB,GAAmB,aAAfjhe,EAAMg+B,MAAuBh+B,EAAM0ge,cAAe,CAClD,IAAIxge,GACAkxF,OAAQ,oBACR1xD,OAAuB,aAAf1/B,EAAMg+B,KACd/gC,MAAOsxC,EAAQ,QAAU,WAE7BvuC,EAAMgO,OAAO,iBAAkB9N,GAEnCF,EAAMone,cAAc74b,GACpBvuC,EAAMihe,gBAAkB,MAE5B71Y,EAAO9vF,UAAU0wG,OAAOzqG,KAAKtB,UAE5B,CAED,GADAA,KAAKghe,gBAAkB,KACL,aAAdhhe,KAAK+9B,MAAuB/9B,KAAKyge,cAAe,CAChD,IAAIxge,GACAkxF,OAAQ,oBACR1xD,OAAsB,aAAdz/B,KAAK+9B,KACb/gC,MAAOsxC,EAAQ,QAAU,WAE7BtuC,KAAK+N,OAAO,iBAAkB9N,GAElCD,KAAKmne,cAAc74b,KAG3Bkwb,EAAYnje,UAAUkkC,cAAgB,WAClC,MAAO,eAOXi/b,EAAYnje,UAAU0wG,OAAS,WAC3B,IAAIhsG,EAAQC,KACZA,KAAK8ie,YAAa,EAClB9ie,KAAKihe,aAAc,EACnBjhe,KAAK+7D,cAAgB56D,EAAc,QAAUkC,UA52E7B,eA62EhBrD,KAAKije,YAAc9he,EAAc,QAAUkC,UAAWoke,8BAA0Clke,OAAQ,kBACxGvD,KACKk/d,aAAe/9d,EAAc,QAC9BkC,UAAWi7d,GAAiB/6d,OAAQ,kBAExCvD,KAAKm/d,iBAAmBh+d,EAAc,OAASkC,UA33EjC,2BA43EdrD,KAAK87D,eAAiB36D,EAAc,OAASkC,UA73E9B,gCA83EG,aAAdrD,KAAK+9B,MACLp6B,GAAU3D,KAAK87D,gBAAiB,cAEhCtwD,GAAQkb,UACR1mB,KAAKm/d,iBAAiBr7d,UAAUM,IAh4Ef,iBAk4ErBpE,KAAK87D,eAAep3D,MAAMsR,MAAQzT,EAAWvC,KAAKgW,OAClDhW,KAAK87D,eAAen6D,YAAY3B,KAAKm/d,kBACrCn/d,KAAKytJ,aAAetsJ,EAAc,OAASmC,GAAItD,KAAKgB,QAAQsC,GAAK,SAAUD,UAt3E/D,8CAu3EM,cAAdrD,KAAK+9B,MAAsC,aAAd/9B,KAAK+9B,MAClC/9B,KAAKmje,iBAAmBhie,EAAc,QAAUkC,UAz3EpC,iBAy3EkEE,OAAQ,iBACtFvD,KAAKm/d,iBAAiBx9d,YAAY3B,KAAKmje,oBAGvCnje,KAAK+/d,sBAAwB5+d,EAAc,QACvCkC,UAx4EG,qBAy4EHE,OAAQ,iBAEZvD,KAAKm/d,iBAAiBx9d,YAAY3B,KAAK+/d,wBAEzB,QAAd//d,KAAK+9B,MACL/9B,KAAKm/d,iBAAiBx9d,YAAY3B,KAAKije,aAE3Cjje,KAAKm/d,iBAAiBx9d,YAAY3B,KAAK+7D,eACnC/7D,KAAKolB,kBAAoB5Z,GAAQkb,SACjC1mB,KAAKm/d,iBAAiBx9d,YAAY3B,KAAKk/d,cAGvCl/d,KAAKm/d,iBAAiBr7d,UAAUM,IAAIm6d,IAExCv+d,KAAKqne,eACLrne,KAAKg8D,aAAe76D,EAAc,SAC9BkC,UA74EQ,iBA84ERI,OACIwf,WAAY,QACZvc,KAAM,OACNoc,aAAc,MACdkuG,SAAU,OAGdhxH,KAAKgB,QAAQgC,UAAYhD,KAAKy1d,mBAC9Bz1d,KAAKgB,QAAQ0D,MAAM4xC,QAAU,QAE7Bt2C,KAAKgB,QAAQgC,UAAYhD,KAAKy1d,kBAC9Bz1d,KAAKgB,QAAQW,YAAY3B,KAAK87D,gBAC9B97D,KAAK+7D,cAAcp6D,YAAY3B,KAAKg8D,gBAGpCh8D,KAAKgB,QAAQqT,cAAcnP,aAAalF,KAAK87D,eAAgB97D,KAAKgB,SAClEhB,KAAK+7D,cAAcp6D,YAAY3B,KAAKg8D,cACpCh8D,KAAK+7D,cAAcp6D,YAAY3B,KAAKgB,SACpChB,KAAKgB,QAAQ0K,gBAAgB,aAEL,UAAxB1L,KAAK+mB,eACL80C,GAAiB77D,KAAK87D,eAAgB97D,KAAK+7D,cAAe/7D,KAAKgB,QAAShB,KAAKg8D,aAAch8D,KAAKhD,MAAOgD,KAAK+mB,eAAgB/mB,KAAK8mB,aAEpG,UAAxB9mB,KAAK+mB,gBACV/mB,KAAKohe,qBAETphe,KAAKgB,QAAQ0D,MAAM+I,QAAU,GAC7B,IAAInK,EAAKtD,KAAKgB,QAAQ6R,aAAa,MAAQ7S,KAAKgB,QAAQ6R,aAAa,MAAQrT,EAAY,oBACzFQ,KAAKgB,QAAQsC,GAAKA,EAClBtD,KAAKwzd,cAAgBryd,EAAc,UAC/BsC,OAAS4qH,cAAe,OAAQkT,MAp6EvB,iBAo6EgDvQ,SAAY,KAAMojB,SAAY,UAE3Fp0I,KAAKm/d,iBAAiBx9d,YAAY3B,KAAKwzd,eACvCxzd,KAAK02M,oBAAoB12M,KAAKgB,QAAShB,KAAKwzd,eAC1B,aAAdxzd,KAAK+9B,MACL/9B,KAAKkke,mBAETlke,KAAKq2d,YACLr2d,KAAKy/B,OAAOz/B,KAAKilB,SACjBjlB,KAAK2+d,UAAU3+d,KAAKkT,WAChBlT,KAAKhD,OAASgD,KAAKhD,MAAMP,QACzBuD,KAAK8qH,cACC9qH,KAAKujE,sBAAsBC,GAK7BxjE,KAAK+ge,gBAAkB,WACnBhhe,EAAM+ie,YAAa,EACnB/ie,EAAMmhe,qBACNnhe,EAAMohe,gBACNphe,EAAMghe,gBAAkB,KACxBhhe,EAAM+ie,YAAa,IATvB9ie,KAAKkhe,qBACLlhe,KAAKmhe,kBAaTnhe,KAAKmhe,gBAETnhe,KAAK8ie,YAAa,EAClB9ie,KAAK0ne,kBAETlJ,EAAYnje,UAAUqse,eAAiB,WAC/B1ne,KAAKgB,QAAQ+kH,aAAa,cAC1B/lH,KAAKy6H,WAGb+jW,EAAYnje,UAAUqpe,kBAAoB,Y5X37E9C,SAA+B5oa,EAAgBqja,EAAkBpja,EAAeC,EAAch/D,EAAO+pB,EAAgBD,GACjH,IAEI6gd,EAFAC,EAAqBzI,EAAiBx8d,cAAc,IAAMy5D,IAC1Di7D,EAAY8nW,EAAiBx8d,cAAc,IAAMw5D,IAEhD1+D,EAAkBmqe,GAUnBnra,GAAez/D,EAAOg/D,EADtB2ra,EAAmC,OAAhB7gd,EAAwBA,EAAc,KARzD6gd,EAAkBC,EAAmB3sa,UACrC51D,EAAO02D,EAAcp5D,cAAc,IAAMy5D,KACzCK,GAAez/D,EAAOg/D,EAAc2ra,GAC/Blqe,EAAkB45H,IACnBhyH,EAAO02D,EAAcp5D,cAAc,IAAMw5D,MAOjDL,EAAeh4D,UAAUS,OAAO,iB4X46E5B0yH,CAAej3H,KAAK87D,eAAgB97D,KAAKm/d,iBAAkBn/d,KAAK+7D,cAAe/7D,KAAKg8D,aAAch8D,KAAKhD,MAAOgD,KAAK+mB,eAAgB/mB,KAAK8mB,aAC5G,UAAxB9mB,KAAK+mB,gBACL80C,GAAiB77D,KAAK87D,eAAgB97D,KAAK+7D,cAAe/7D,KAAKgB,QAAShB,KAAKg8D,aAAch8D,KAAKhD,MAAOgD,KAAK+mB,eAAgB/mB,KAAK8mB,cAGzI03c,EAAYnje,UAAUgse,aAAe,WACf,aAAdrne,KAAK+9B,MAAuB/9B,KAAK6ne,kBACjC7ne,KAAKm2T,SAAWh1T,EAAc,QAAUkC,UA/8EjC,kCAg9EPrD,KAAKm/d,iBAAiBx9d,YAAY3B,KAAKm2T,UACvCxyT,GAAU3D,KAAKm/d,mBAAoB,iBAG9B1he,EAAkBuC,KAAKm2T,YACxBn2T,KAAKm2T,SAAS9hT,cAAc/O,YAAYtF,KAAKm2T,UAC7C9xT,GAAarE,KAAKm/d,mBAAoB,kBAIlDX,EAAYnje,UAAU8le,cAAgB,WAChB,QAAdnhe,KAAK+9B,MACL/9B,KAAKyie,kBAETzie,KAAKo/d,iBACLp/d,KAAK++d,sBACL/+d,KAAKg/d,eAAeh/d,KAAKq2E,UACzBr2E,KAAK2ie,qBAOTnE,EAAYnje,UAAUiX,QAAU,WACxBtS,KAAKqnH,UACLrnH,KAAKqnH,SAAS9lC,OAElBvhF,KAAK+N,OA7+EC,cA8+EN/N,KAAK8ge,mBACL9ge,KAAKu3d,cACLv3d,KAAK6iG,KAAO,KACZ7iG,KAAKqnH,SAAW,KAChBrnH,KAAKw/d,SAAW,KAChBx/d,KAAKsge,SAAW,KAChBn1Y,EAAO9vF,UAAUiX,QAAQhR,KAAKtB,MAG9B,IAFA,IAAI+tB,GAAQ,WAAY,gBAAiB,mBAAoB,eACzDtxB,EAASsxB,EAAKtxB,OACXA,EAAS,GACZuD,KAAKg8D,aAAatwD,gBAAgBqiB,EAAKtxB,EAAS,IAChDA,IAEJuD,KAAKgB,QAAQ0D,MAAM4xC,QAAU,QACzBt2C,KAAK87D,eAAeznD,gBAChBrU,KAAK87D,eAAeznD,cAAcrR,UAAYhD,KAAKy1d,iBACnDlxd,EAAOvE,KAAK87D,iBAGZ97D,KAAK87D,eAAeznD,cAAcnP,aAAalF,KAAKgB,QAAShB,KAAK87D,gBAClEv3D,EAAOvE,KAAK87D,mBAKxB+uB,IACI3jF,EAAS,OACVs3d,EAAYnje,UAAW,gBAAY,GACtCwvF,IACI3jF,EAAS,SACVs3d,EAAYnje,UAAW,aAAS,GACnCwvF,IACI3jF,EAAS,UACVs3d,EAAYnje,UAAW,mBAAe,GACzCwvF,IACI3jF,EAAS,SACVs3d,EAAYnje,UAAW,kBAAc,GACxCwvF,IACI3jF,EAAS,OACVs3d,EAAYnje,UAAW,mBAAe,GACzCwvF,IACI3jF,EAAS,OACVs3d,EAAYnje,UAAW,4BAAwB,GAClDwvF,IACI3jF,OACDs3d,EAAYnje,UAAW,sBAAkB,GAC5CwvF,IACI3jF,EAAS,OACVs3d,EAAYnje,UAAW,qBAAiB,GAC3CwvF,IACI3jF,EAAS,OACVs3d,EAAYnje,UAAW,sBAAkB,GAC5CwvF,IACI3jF,EAAS,OACVs3d,EAAYnje,UAAW,sBAAkB,GAC5CwvF,IACI3jF,EAAS,OACVs3d,EAAYnje,UAAW,oBAAgB,GAC1CwvF,IACI3jF,GAAS,IACVs3d,EAAYnje,UAAW,sBAAkB,GAC5CwvF,IACI3jF,GAAS,IACVs3d,EAAYnje,UAAW,wBAAoB,GAC9CwvF,IACI3jF,GAAS,IACVs3d,EAAYnje,UAAW,uBAAmB,GAC7CwvF,IACI3jF,EAAS,MACVs3d,EAAYnje,UAAW,8BAA0B,GACpDwvF,IACI3jF,GAAS,IACVs3d,EAAYnje,UAAW,gBAAY,GACtCwvF,IACI3jF,EAAS,OACVs3d,EAAYnje,UAAW,YAAQ,GAClCwvF,IACI3jF,EAAS,OACVs3d,EAAYnje,UAAW,aAAS,GACnCwvF,IACI3jF,GAAS,IACVs3d,EAAYnje,UAAW,wBAAoB,GAC9CwvF,IACI3jF,GAAS,IACVs3d,EAAYnje,UAAW,0BAAsB,GAChDwvF,IACI3jF,EAAS,YACVs3d,EAAYnje,UAAW,YAAQ,GAClCwvF,IACI3jF,EAAS,MACVs3d,EAAYnje,UAAW,qBAAiB,GAC3CwvF,IACI3jF,GAAS,IACVs3d,EAAYnje,UAAW,kBAAc,GACxCwvF,IACI3jF,GAAS,IACVs3d,EAAYnje,UAAW,wBAAoB,GAC9CwvF,IACI3jF,EAAS,UACVs3d,EAAYnje,UAAW,sBAAkB,GAC5CwvF,IACI3jF,GAAS,IACVs3d,EAAYnje,UAAW,qBAAiB,GAC3CwvF,IACI3jF,EAAS,eACVs3d,EAAYnje,UAAW,qBAAiB,GAC3CwvF,IACI3jF,EAAS,iBACVs3d,EAAYnje,UAAW,uBAAmB,GAC7CwvF,IACI3jF,GAAS,IACVs3d,EAAYnje,UAAW,4BAAwB,GAClDwvF,IACI3jF,GAAS,IACVs3d,EAAYnje,UAAW,mBAAe,GACzCwvF,IACI/hF,KACD01d,EAAYnje,UAAW,cAAU,GACpCwvF,IACI/hF,KACD01d,EAAYnje,UAAW,gBAAY,GACtCwvF,IACI/hF,KACD01d,EAAYnje,UAAW,eAAW,GACrCwvF,IACI/hF,KACD01d,EAAYnje,UAAW,kBAAc,GACxCwvF,IACI/hF,KACD01d,EAAYnje,UAAW,YAAQ,GAClCwvF,IACI/hF,KACD01d,EAAYnje,UAAW,aAAS,GACnCwvF,IACI/hF,KACD01d,EAAYnje,UAAW,YAAQ,GAClCwvF,IACI/hF,KACD01d,EAAYnje,UAAW,aAAS,GACnCwvF,IACI/hF,KACD01d,EAAYnje,UAAW,qBAAiB,GAC3CwvF,IACI/hF,KACD01d,EAAYnje,UAAW,iBAAa,GACvCwvF,IACI/hF,KACD01d,EAAYnje,UAAW,eAAW,GACrCwvF,IACI/hF,KACD01d,EAAYnje,UAAW,4BAAwB,GAClDmje,EAAc3zY,IACVzhF,GACDo1d,IAEL1P,IC5rFEloK,GAAQ,UAMRqsK,GAAqB,0CAIrBrwU,GAAY,eAOZklV,GAAmC,WACnC,SAASA,EAAkBxne,GACvBN,KAAK+ne,YACL/ne,KAAK4sS,aACL5sS,KAAKM,OAASA,EACdN,KAAKtD,mBAkZT,OAhZAore,EAAkBzse,UAAUkkC,cAAgB,WACxC,MAAO,qBAEXuoc,EAAkBzse,UAAUqB,iBAAmB,WACvCsD,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAOslF,GAAG,aAAc5lF,KAAKgoe,cAAehoe,MACjDA,KAAKM,OAAOslF,GAAG,aAAc5lF,KAAKmxd,WAAYnxd,MAC9CA,KAAKM,OAAOslF,GAAG,YAAa5lF,KAAKioe,aAAcjoe,MAC/CA,KAAKM,OAAOslF,GAAG,iBAAkB5lF,KAAKwhe,eAAgBxhe,MACtDA,KAAKM,OAAOslF,GAAG,YAAa5lF,KAAKo5d,aAAcp5d,MAC/CA,KAAKM,OAAOslF,GAAG,OAAQ5lF,KAAK+1d,OAAQ/1d,MACpCA,KAAKM,OAAOslF,GAAG,gBAAiB5lF,KAAK6uH,cAAe7uH,MACpDA,KAAKM,OAAOslF,GAAG,kBAAmB5lF,KAAKkoe,mBAAoBloe,MAC3DA,KAAKM,OAAOslF,GAAG,aAAc5lF,KAAKmoe,SAAUnoe,MAC5CA,KAAKM,OAAOslF,GAAG,UAAW5lF,KAAKooe,WAAYpoe,MAC3CA,KAAKM,OAAOslF,GAAG,aAAc5lF,KAAKqoe,cAAeroe,MACjDA,KAAKM,OAAOslF,GAAG,gBAAiB5lF,KAAK23G,UAAW33G,MAChDA,KAAKM,OAAOslF,GAAG,uBAAwB5lF,KAAK01H,eAAgB11H,MAC5DuF,GAAanB,IAAI5D,SAAU,YAAaR,KAAKw3d,gBAAiBx3d,QAElE8ne,EAAkBzse,UAAUuB,oBAAsB,WAC1CoD,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAO0lF,IAAI,aAAchmF,KAAKgoe,eACnChoe,KAAKM,OAAO0lF,IAAI,aAAchmF,KAAKmxd,YACnCnxd,KAAKM,OAAO0lF,IAAI,YAAahmF,KAAKioe,cAClCjoe,KAAKM,OAAO0lF,IAAI,iBAAkBhmF,KAAKwhe,gBACvCxhe,KAAKM,OAAO0lF,IAAI,YAAahmF,KAAKo5d,cAClCp5d,KAAKM,OAAO0lF,IAAI,OAAQhmF,KAAK+1d,QAC7B/1d,KAAKM,OAAO0lF,IAAI,gBAAiBhmF,KAAK6uH,eACtC7uH,KAAKM,OAAO0lF,IAAI,kBAAmBhmF,KAAKkoe,oBACxCloe,KAAKM,OAAO0lF,IAAI,aAAchmF,KAAKmoe,UACnCnoe,KAAKM,OAAO0lF,IAAI,UAAWhmF,KAAKooe,YAChCpoe,KAAKM,OAAO0lF,IAAI,aAAchmF,KAAKqoe,eACnCroe,KAAKM,OAAO0lF,IAAI,gBAAiBhmF,KAAK23G,WACtC33G,KAAKM,OAAO0lF,IAAI,uBAAwBhmF,KAAK01H,gBAC7CnwH,GAAahB,OAAO/D,SAAU,YAAaR,KAAKw3d,mBAEpDsQ,EAAkBzse,UAAU81d,WAAa,SAAUlxd,GAC/C,IAAIF,EAAQC,KACZ,GAAIvC,EAAkBuC,KAAKM,OAAOyle,mBAAmB3vS,aACjDp2L,KAAKM,OAAOyle,mBAAmB3vS,YAAc,SAAUv1L,GACnDd,EAAMuoe,cAAczne,QAGvB,CACD,IAAIi9d,EAAgB99d,KAAKM,OAAOyle,mBAAmB3vS,YACnDp2L,KAAKM,OAAOyle,mBAAmB3vS,YAAc,SAAUv1L,GACnDd,EAAMuoe,cAAczne,GACpBi9d,EAAcvie,MAAMwE,GAAQc,OAKxCine,EAAkBzse,UAAUq6H,eAAiB,SAAUlsH,GACnD4hB,GAAMsqG,eAAelsH,EAAM6vd,qBAAsBr5d,KAAKkzd,cAE1D4U,EAAkBzse,UAAUite,cAAgB,SAAUzne,GAClD,IAAIgd,EAOJ,GAAuB,wBAFnBA,EAJCpgB,EAAkBoD,EAAEgd,MAIdhd,EAHAA,EAAEgd,MAKJxa,WAAyD,sBAAnBwa,EAAKxa,UAAmC,CACnF,IAAIsnT,EAAc73S,IAAe,GAC7B4iC,EAAOjwC,EAAO,cAAeoY,GACxBA,EAAKhL,aAAa,YAC3BgL,EAAK3Y,aAAaylT,EAAa9sS,EAAKtM,WAAW9T,EAAkBi4C,GAAQ,EAAI,IAC7EjwC,EAAO,WAAqBklT,GAChBllT,EAAO,WAAqBklT,GACxC,OAAO9sS,EAGP,OAAOA,GAGfiqd,EAAkBzse,UAAU4se,aAAe,WACnCjoe,KAAKM,OAAOmge,eACRhje,EAAkBuC,KAAKuoe,kBACvBvoe,KAAKuoe,eAAiBpne,EAAc,OAChCkC,UAzGC,uBA2GLrD,KAAKwoe,cAAgBrne,EAAc,QAC/BkC,UAAW,eAEfrD,KAAKwoe,cAAc3sd,YAAc,GACjC7b,KAAKuoe,eAAe5me,YAAY3B,KAAKwoe,eACrCxoe,KAAK23G,YACL33G,KAAKsoe,cAActoe,KAAKuoe,gBACpBvoe,KAAKM,OAAO+4L,iBACP57L,EAAkBuC,KAAKmzd,cAIxB/td,GAAQpF,KAAKuoe,gBAAiBvoe,KAAKM,OAAOmtJ,cAH1CroJ,GAAQpF,KAAKuoe,gBAAiBvoe,KAAKmzd,eAMtCnzd,KAAKM,OAAO+4L,iBACR57L,EAAkBuC,KAAKmzd,cAIxBtud,GAAS7E,KAAKuoe,gBAAiBvoe,KAAKM,OAAOmtJ,cAH3CroJ,GAAQpF,KAAKuoe,gBAAiBvoe,KAAKmzd,eAM3C5td,GAAanB,IAAIpE,KAAKuoe,eAAgB,YAAavoe,KAAKm/G,aAAcn/G,OAEtEA,KAAKM,OAAOuiG,KAAK/+F,UAAUK,SAAS,YACpCnE,KAAKuoe,eAAe7je,MAAM4xC,QAAU,OAGpCt2C,KAAKuoe,eAAe7je,MAAM4xC,QAAU,QAExCt2C,KAAKM,OAAO2le,gBAAkBjme,KAAKuoe,eAAe38d,wBAAwBmK,QAEpEtY,EAAkBuC,KAAKuoe,kBAC7Bvoe,KAAKuoe,eAAel0d,cAAc/O,YAAYtF,KAAKuoe,gBACnDvoe,KAAKuoe,eAAiB,OAG9BT,EAAkBzse,UAAUiX,QAAU,WAClCtS,KAAKpD,uBAETkre,EAAkBzse,UAAU2se,cAAgB,SAAU/ne,GAClD,IAAIkH,EAcJ,GANIA,EAPC1J,EAAkBwC,EAAKY,GAOfZ,EAAK2wH,GAAGmX,iBAAiBx2H,WAAW,GANnC9T,EAAkBwC,EAAKY,EAAEsG,QAG7BlH,EAAK2wH,GAAGjuH,cAAc,uBAAuB4O,WAAW,GAF1DtR,EAAKY,EAAEsG,OAAOrD,UAAUK,SAAS,WAC7BlE,EAAKY,EAAEsG,OAASlH,EAAK2wH,GAAGjuH,cAAc,uBAAuB4O,WAAW,GAMhFvR,KAAKM,OAAOmxd,eACZtqd,EAASlH,EAAK2wH,GAAGzrH,kBAAkBoM,WAAW,IAElDvR,KAAK0tT,aAAe7nT,EAAQsB,EAAQ,wBAC/B1J,EAAkBuC,KAAK0tT,cAAe,CACvC,IAAI5vC,EAAer4Q,EAAO,WAAqBzF,KAAK0tT,cAEpD1tT,KAAK2sT,kBAAkB3sT,KAAK0tT,aAAc5vC,EAAah6Q,UAAUK,SAASyiT,IAAQ3mT,EAAK2wH,GAAI3wH,EAAKY,GADhF,KAIxBine,EAAkBzse,UAAUsxT,kBAAoB,SAAUmF,EAAWlmG,EAASh7F,EAAI/vH,EAAG+E,GACjF5F,KAAK++G,YAAY+yM,EAAWlmG,EAAU,UAAY,QAAS/qN,GAAG,EAAM+E,IAExEkie,EAAkBzse,UAAU8jH,aAAe,SAAUt+G,GACjD,IAAIsG,EAEAA,EADAtG,EAAEutG,cAActqG,UAAUK,SAASnE,KAAKuoe,eAAelle,WAC9CxC,EAAEutG,cAAcjpG,kBAAkB4iI,iBAGlClnI,EAAEutG,cAEfpuG,KAAK0tT,aAAe7nT,EAAQsB,EAAQ,uBAEpC,IAAK1J,EAAkBuC,KAAK0tT,cAAe,CACvC,IAAI5vC,EAAer4Q,EAAO,WAAqBzF,KAAK0tT,cACpD1tT,KAAK2sT,kBAAkB3sT,KAAK0tT,aAAc5vC,EAAah6Q,UAAUK,SAASyiT,IAAQ,KAAM/lT,GAH5E,GAKhBA,EAAE2kB,kBAENsid,EAAkBzse,UAAU0jH,YAAc,SAAUhtG,EAASu8B,EAAOztC,EAAG+rT,EAAWhnT,GAC9E,IAAIo5G,EACA5rG,EAAYrB,EAAQrE,uBAnMZ,WAmMkD,GAChD,UAAV4gC,GAAsBl7B,EAAUtP,UAAUK,SAASyiT,IASpC,YAAVt4Q,IAAwBl7B,EAAUtP,UAAUK,SAASyiT,KAAUxzS,EAAUtP,UAAUK,SAzMhF,aA0MRE,GAAa+O,IAAawzS,GA1MlB,WA2MR5nM,EAAY,QACRp5G,IACA5F,KAAKM,OAAOsF,WAAU,GACtB5F,KAAK23G,eAbTvkG,EAAUtP,UAAUS,OAjMZ,UAkMR6O,EAAUtP,UAAUM,IAAIwiT,IACxB5nM,EAAY,OACRp5G,IACA5F,KAAKM,OAAOsF,WAAU,GACtB5F,KAAK23G,WAAU,KAYlBl6G,EADLuhH,EAAsB,UAAV1wE,EAAoB,OAAmB,YAAVA,EAAsB,QAAU0wE,IAErEjtG,EAAQvO,aAAa,eAAgBw7G,IAG7C8oX,EAAkBzse,UAAU+9d,aAAe,SAAUn5d,GACjD,GAAIxC,EAAkBuC,KAAKmzd,cAAe,CACtCnzd,KAAKmzd,aAAehyd,EAAc,QAC9BkC,UApNG,oBAsNPrD,KAAKkzd,YAAc/xd,EAAc,SAC7BsC,OAASiD,KAAM,QACfrD,UAzNE,mBA2NNrD,KAAKM,OAAOU,QAAQP,WAAWyE,aAAalF,KAAKkzd,YAAalzd,KAAKM,OAAOU,SAC1E,IAAIy6L,GAAW,EAgCf,OA/BIjwL,GAAQkb,WACR+0K,GAAW,EACXz7L,KAAKM,OAAO+ie,WAAY,GAE5Brje,KAAK22d,eAAiBvrc,GAAM2rG,aACxB/1H,QAAShB,KAAKkzd,YACd/sW,QAASs1E,GArOJ,yCAqOgCw3R,KAAuBA,IAC5Dhwd,YAAc6jB,YAAa9mB,KAAKM,OAAO+4d,wBAE3Cj0d,GAAQpF,KAAK22d,eAAel8c,WAAYza,KAAKmzd,cAC7Ctud,GAAS7E,KAAKmzd,cAAelzd,EAAK0xH,cAClCjuH,EAAW1D,KAAKkzd,aACZh9V,gBAAiB,QACjBvC,YAAa3zH,KAAKM,OAAOU,QAAQsC,GAAK,WACtCsO,KAAQ,UACR4mI,wBAAyB,KACzB11H,aAAgB,MAChBC,YAAe,MACfC,eAAkB,MAClBC,WAAc,UAElBjjB,KAAKs5d,iBAAmBt5d,KAAKkzd,YAAY7+c,cAAc1R,cAAc,IAAMigJ,KACtEp3I,GAAQkb,UAAY1mB,KAAKs5d,mBAC1B/zd,GAAanB,IAAIpE,KAAKs5d,iBAAkB,YAAat5d,KAAKq4I,UAAWr4I,MACrEA,KAAKs5d,iBAAiB50d,MAAMC,WAAa,UAE7CY,GAAanB,IAAIpE,KAAKkzd,YAAa,QAASlzd,KAAKM,OAAOk5d,QAASx5d,KAAKM,QACtEiF,GAAanB,IAAIpE,KAAKkzd,YAAa,QAASlzd,KAAKM,OAAO0he,MAAOhie,KAAKM,QACpEiF,GAAanB,IAAIpE,KAAKkzd,YAAa,UAAWlzd,KAAKM,OAAOmje,UAAWzje,KAAKM,QAC1EiF,GAAanB,IAAIpE,KAAKkzd,YAAa,OAAQlzd,KAAK+1d,OAAQ/1d,MACxDA,KAAKM,OAAOy5d,gBAAmB/5d,KAAK22d,eAAel8c,UAAuB,cAAE7O,wBAAwBmK,OAC7F/V,KAAK22d,iBAIpBmR,EAAkBzse,UAAU++d,gBAAkB,SAAUv5d,GACpDb,KAAKM,OAAOi1d,YACZlxd,GAAa7D,SAASuL,KAAM/L,KAAKM,OAAO+mH,SAASrmH,SA9PnC,sBAgQlB8me,EAAkBzse,UAAUg9I,UAAY,SAAUx3I,GAC9Cb,KAAKM,OAAOkge,mBAAmBxje,MAAQ,GACvCgD,KAAKM,OAAOs5d,eACZ55d,KAAKM,OAAOm/d,iBAAiB,MAC7Bz/d,KAAKs5d,iBAAiB50d,MAAMC,WAAa,SACzC3E,KAAKkzd,YAAYhxd,QACjBlC,KAAKooe,WAAWvne,GAChBA,EAAE2kB,kBAENsid,EAAkBzse,UAAU6se,mBAAqB,WAC7Cloe,KAAKM,OAAO+mH,SAASrmH,QAAQ8C,UAAUM,IAzQlC,gBA0QLpE,KAAKM,OAAO+mH,SAASrmH,QAAQ8C,UAAUM,IA7Q5B,uBA8QXpE,KAAKM,OAAO+mH,SAASnzG,UAAakC,EAAG,EAAGC,EAAG,GAC3CrW,KAAKM,OAAO+mH,SAASz7D,WACrBloD,EAAW1D,KAAKM,OAAO+mH,SAASrmH,SAAW0D,MAAO,2CAClDf,GAAUnD,SAASuL,KAAM/L,KAAKM,OAAO+mH,SAASrmH,SA/QhC,qBAgRdhB,KAAKk6d,uBACLl6d,KAAKm6d,gBAAkBn6d,KAAK22d,eAAel8c,UAAU9X,cAAc,gBACnE3C,KAAKs5d,iBAAmBt5d,KAAK22d,eAAel8c,UAAU9X,cAAc,IAAMigJ,IAC1E5iJ,KAAKs5d,iBAAiB50d,MAAMC,WAAa,SACzCY,GAAanB,IAAIpE,KAAKm6d,gBAAiB,QAASn6d,KAAKo6d,gBAAiBp6d,MACtEuF,GAAanB,IAAIpE,KAAKs5d,iBAAkB,QAASt5d,KAAKq4I,UAAWr4I,OAErE8ne,EAAkBzse,UAAU6+d,qBAAuB,WAC/C,IAAIH,EAAkB/5d,KAAKkzd,YAAY7+c,cAAczI,wBAAwBmK,OAC7E/V,KAAKM,OAAO+mH,SAASrmH,QAAQ0D,MAAM6uD,UAAY,OAC/CvzD,KAAKM,OAAO+mH,SAASrmH,QAAQ0D,MAAMsR,MAAQ,OAC3ChW,KAAKM,OAAOuiG,KAAKn+F,MAAM6uD,UAAa13D,OAAOyd,YAAcygd,EAAmB,KAC5E/5d,KAAKM,OAAOuiG,KAAKn+F,MAAMqR,OAAUla,OAAOyd,YAAcygd,EAAmB,KACzE,IAAIY,EAAe36d,KAAKkzd,YAAY7+c,cAAc1R,cAAc,IAAMigJ,IACtEv9I,EAAOrF,KAAKkzd,aACZyH,EAAatmd,cAAcnP,aAAalF,KAAKkzd,YAAayH,IAE9DmN,EAAkBzse,UAAUwzH,cAAgB,WAGxC,OAFA7uH,KAAKM,OAAOkge,mBAAqBxge,KAAKkzd,YACtClzd,KAAKs5d,iBAAiB50d,MAAMC,WAAsD,KAAzC3E,KAAKM,OAAOkge,mBAAmBxje,MAAe,SAAW,UAC3FgD,KAAKM,OAAOkge,mBAAmBxje,OAE1C8qe,EAAkBzse,UAAU06d,OAAS,SAAUl1d,GAC3C,IAAIsG,EAOJ,GANIqE,GAAQwiG,OACR7mG,GAAU1J,EAAkBoD,IAAMA,EAAEsG,QAEnCqE,GAAQwiG,OACT7mG,GAAU1J,EAAkBoD,IAAMA,EAAEisI,eAEpCtsI,SAASuL,KAAK5H,SAASnE,KAAKM,OAAO+mH,SAASrmH,UAAYhB,KAAKM,OAAO+mH,SAASrmH,QAAQmD,SAASgD,KAAYqE,GAAQwiG,KAClHhuG,KAAKkzd,YAAYhxd,YADrB,CAIA,GAAIlC,KAAKM,OAAOm+d,kBAIZ,OAHA59d,EAAE2kB,iBACFxlB,KAAKkzd,YAAYhxd,aACjBlC,KAAKM,OAAOm+d,mBAAoB,GAGhCj+d,SAASuL,KAAK5H,SAASnE,KAAKM,OAAO+mH,SAASrmH,WAAahB,KAAKM,OAAO+mH,SAASrmH,QAAQ8C,UAAUK,SAAS,mBACzGnE,KAAKM,OAAOwyd,YAAa,EACzB9yd,KAAKM,OAAO+ge,iBAAiBxge,EAAGb,KAAKM,OAAOtD,MAAOgD,KAAKM,OAAO0/d,YAC/Dhge,KAAKM,OAAOqT,cAAc3T,KAAKM,OAAOkzd,cAAe,WAErDhzd,SAASuL,KAAK5H,SAASnE,KAAKM,OAAO+mH,SAASrmH,WAC3ChB,KAAKM,OAAO+mH,SAASrmH,QAAQ8C,UAAUK,SAAS,mBACjDnE,KAAKM,OAAOwyd,YAAa,EACzB9yd,KAAKM,OAAOw7D,eAAeh4D,UAAUS,OA9TrC,iBA+TAvE,KAAKM,OAAOkmB,QAAQ,QACpBxmB,KAAKM,OAAO26L,SAAU,IAEtBz6L,SAASuL,KAAK5H,SAASnE,KAAKM,OAAO+mH,SAASrmH,UAC3ChB,KAAKM,OAAO+mH,SAASrmH,QAAQ8C,UAAUK,SAAS,kBAAqBqH,GAAQkb,UAC9E1mB,KAAKM,OAAOi1d,cAGpBuS,EAAkBzse,UAAUm8d,gBAAkB,SAAU32d,GACpD,IAAIsG,EAAStG,EAAEsG,QACV1J,EAAkBuC,KAAKM,OAAO+mH,WAAaxhH,EAAQsB,EAAQ,IAAMnH,KAAKM,OAAO+mH,SAASrmH,QAAQsC,KAC/FzC,EAAE2kB,kBAEC/nB,EAAkBuC,KAAKM,OAAO+mH,WAAaxhH,EAAQsB,EAAQ,IAAMnH,KAAKM,OAAO+mH,SAASrmH,QAAQsC,KAChGtD,KAAKM,OAAOw7D,eAAe33D,SAAStD,EAAEsG,QASvCnH,KAAKM,OAAOm+d,mBAAqBjzd,GAAQwiG,MAA8B,SAAtBxiG,GAAQmb,KAAK8Q,OAAqBj3B,SAASmlH,gBAAkB3lH,KAAKkzd,aAR/Glzd,KAAKM,OAAOw7D,eAAeh4D,UAAUK,SAASwqd,GAAoBzsd,QAAUlC,KAAKM,OAAOqsJ,iBACxF3sJ,KAAKM,OAAOwyd,YAAa,EACzB9yd,KAAKM,OAAOi1d,YACZv1d,KAAKM,OAAOy1d,SACZ/1d,KAAKM,OAAO26L,SAAU,GAMzBj7L,KAAKM,OAAOw7D,eAAe33D,SAAStD,EAAEsG,UAAWnH,KAAKM,OAAOw7D,eAAeh4D,UAAUK,SAAS,kBAC/FnE,KAAKM,OAAOqsJ,eACb3sJ,KAAKM,OAAOy1d,OAAOl1d,IAG3Bine,EAAkBzse,UAAU8se,SAAW,SAAUtne,GAC7Cb,KAAKM,OAAOw7D,eAAeh4D,UAAUS,OA9VjC,iBA+VY,UAAZ1D,EAAE7D,OACFgD,KAAKkzd,YAAYhxd,QAEL,UAAZrB,EAAE7D,QACFgD,KAAKkzd,YAAYl2d,MAAQ,GACzBgD,KAAKs5d,iBAAiB50d,MAAMC,WAAa,WAGjDmje,EAAkBzse,UAAUmme,eAAiB,SAAU3ge,GACnC,UAAZA,EAAE7D,OAA0E,SAArDgD,KAAKuoe,eAAe11d,aAAa,kBACxD7S,KAAK++G,YAAY/+G,KAAKuoe,eAAgB1ne,EAAE7D,MAAO,KAAM,MAAM,GAC3DgD,KAAK23G,WAAU,IAEH,YAAZ92G,EAAE7D,QACFgD,KAAK++G,YAAY/+G,KAAKuoe,eAAgB1ne,EAAE7D,MAAO,KAAM,MAAM,GAC3DgD,KAAK23G,cAGbmwX,EAAkBzse,UAAUs8G,UAAY,SAAU0hT,GAC9C,GAAkC,eAA9Br5Z,KAAKM,OAAOmoe,eAAkE,iBAAhCzoe,KAAKM,OAAOooe,gBAAoC,CAC9F,IAAIz5d,EAAWoqZ,EAAWr5Z,KAAKM,OAAOooe,gBAAkB1oe,KAAKM,OAAOmoe,cAEpEzoe,KAAKwoe,cAAc3sd,YAAc,GAEjC,IAAK,IAAIzd,EAAK,EAAGyE,EADAmM,GAAQC,EACH0lC,KAAoBv2C,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC5D,IAAIyf,EAAOhb,EAAGzE,GACd4B,KAAKwoe,cAAc3sd,YAAcgC,EAAKhC,iBAGzC,CACD,IACIwpG,EAAO,IAAI7N,GAAK,aADDixX,cAAe,aAAcC,gBAAiB,gBACpB1oe,KAAKM,OAAO0N,QACzDhO,KAAKwoe,cAAc3sd,YAAcw9Y,EAAWh0S,EAAKtxC,YAAY,mBAAqBsxC,EAAKtxC,YAAY,mBAG3G+zZ,EAAkBzse,UAAUgte,cAAgB,SAAUpoe,GAC9CA,EAAK2wH,GAAG9sH,UAAUK,SAAS,YAC3BnE,KAAK+ne,SAASvje,KAAKvE,EAAK2wH,GAAGhvH,WAAU,IAGrC5B,KAAK+ne,SAAS1/c,OAAOpoB,EAAKgS,MAAO,IAGzC61d,EAAkBzse,UAAU+se,WAAa,SAAUnoe,GAC/C,GAAID,KAAKM,OAAOuje,uBAAyBpme,EAAkBuC,KAAKM,OAAOtD,OAAQ,CAC3E,IAAI2re,EAAgB3oe,KAAKM,OAAO24L,UAAUz3L,iBAAiB,eAAe/E,OAEtEmse,EAAQzne,EAAc,MACtBkC,UAAW,iCAEClC,EAAc,OAC1Bwne,EAAgB,IAChBvje,EAAOpF,KAAKM,OAAO24L,UAAUz3L,iBAAiB,eAAgBone,GAE9Djle,EADQ3D,KAAKM,OAAO24L,UAAUz3L,iBAAiB,eAC/B,kBAChBqD,GAAS+je,GAAQ5oe,KAAKM,OAAOuiG,OAEjC7iG,KAAKM,OAAOg/d,yBAGbwI,KC3aPniQ,GAA4B,WAC5B,SAASA,IACL3lO,KAAK6oe,gBACL7oe,KAAK8oe,kBACL9oe,KAAK6d,QA6HT,OA3HAvf,OAAOuJ,eAAe89N,EAAWtqO,UAAW,UAIxCqM,IAAK,WACD,OAAO1H,KAAK6oe,aAAapse,QAE7BkL,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe89N,EAAWtqO,UAAW,QAIxCqM,IAAK,WACD,OAAO1H,KAAKssG,WAEhB3kG,YAAY,EACZC,cAAc,IAKlB+9N,EAAWtqO,UAAUixG,QAAU,WAC3BtsG,KAAK6d,QACL,IAAK,IAAI1hB,EAAI,EAAGA,EAAI6D,KAAK6oe,aAAapse,OAAQN,IAC1C6D,KAAK6d,KAAKrZ,KAAKxE,KAAK6oe,aAAa1se,IAErC,OAAO6D,KAAK6d,MAKhB8nN,EAAWtqO,UAAU+I,IAAM,SAAU/G,EAAKL,GACtC,GAAIS,EAAkBJ,GAClB,MAAM,IAAIk0P,eAAe,uCAQ7B,OANYvxP,KAAK6oe,aAAatqe,QAAQlB,GAE1B,IACR2C,KAAK6oe,aAAarke,KAAKnH,GACvB2C,KAAK8oe,eAAetke,KAAKxH,IAEtB,GAQX2oO,EAAWtqO,UAAUqM,IAAM,SAAUrK,GACjC,GAAII,EAAkBJ,GAClB,MAAM,IAAIk0P,eAAe,8BAE7B,IAAIt/O,EAAQjS,KAAK6oe,aAAatqe,QAAQlB,GACtC,GAAI4U,EAAQ,GAAKA,EAAQjS,KAAK6oe,aAAapse,OAAS,EAChD,MAAM,IAAIq6N,WAAW,kDAGrB,OAAO92N,KAAK8oe,eAAe72d,IAMnC0zN,EAAWtqO,UAAUgM,IAAM,SAAUhK,EAAKL,GACtC,GAAIS,EAAkBJ,GAClB,MAAM,IAAIk0P,eAAe,8BAE7B,IAAIt/O,EAAQjS,KAAK6oe,aAAatqe,QAAQlB,GACtC,GAAI4U,EAAQ,GAAKA,EAAQjS,KAAK6oe,aAAapse,OAAS,EAChD,MAAM,IAAIq6N,WAAW,kDAGrB92N,KAAK8oe,eAAe72d,GAASjV,GAMrC2oO,EAAWtqO,UAAUkJ,OAAS,SAAUlH,GACpC,GAAII,EAAkBJ,GAClB,MAAM,IAAIk0P,eAAe,8BAE7B,IAAIt/O,EAAQjS,KAAK6oe,aAAatqe,QAAQlB,GACtC,GAAI4U,EAAQ,GAAKA,EAAQjS,KAAK6oe,aAAapse,OAAS,EAChD,MAAM,IAAIq6N,WAAW,kDAKrB,OAFA92N,KAAK6oe,aAAaxgd,OAAOpW,EAAO,GAChCjS,KAAK8oe,eAAezgd,OAAOpW,EAAO,IAC3B,GAMf0zN,EAAWtqO,UAAUorO,YAAc,SAAUppO,GACzC,GAAII,EAAkBJ,GAClB,MAAM,IAAIk0P,eAAe,8BAE7B,IAAIt/O,EAAQjS,KAAK6oe,aAAatqe,QAAQlB,GACtC,QAAI4U,EAAQ,GAAKA,EAAQjS,KAAK6oe,aAAapse,OAAS,IAQxDkpO,EAAWtqO,UAAU20D,MAAQ,WACzBhwD,KAAK6oe,gBACL7oe,KAAK8oe,mBAKTnjQ,EAAWtqO,UAAUiX,QAAU,WAC3BtS,KAAKgwD,QACLhwD,KAAK6oe,kBAAe1te,EACpB6E,KAAK8oe,oBAAiB3te,GAEnBwqO,KChIPojQ,GAA+B,WAC/B,SAASA,EAAcrie,GACnB1G,KAAKgpe,eAAiB,EACtBhpe,KAAKipe,iBAAmBvie,EACxB1G,KAAKkpe,eAAiB,IAAIvjQ,GAirB9B,OA5qBAojQ,EAAc1te,UAAU8te,QAAU,SAAU5se,EAAQyvB,EAAUo9c,GAC1D,IAAID,GAAU,EACd,OAAQnpe,KAAKipe,kBACT,KAAK,EACDE,EAAUnpe,KAAKqpe,cAAc9se,EAAQyvB,EAAUo9c,GAC/C,MACJ,KAAK,EACDD,EAAUnpe,KAAKspe,uBAAuB/se,EAAQyvB,EAAUo9c,GACxD,MACJ,KAAK,EACDD,EAAUnpe,KAAKupe,uBAAuBhte,EAAQyvB,EAAUo9c,GACxD,MACJ,KAAK,EACDD,EAAUnpe,KAAKwpe,kBAAkBjte,EAAQyvB,EAAUo9c,GACnD,MACJ,KAAK,EACDD,EAAUnpe,KAAKype,eAAelte,EAAQyvB,EAAUo9c,GAChD,MACJ,KAAK,EACDD,EAAUnpe,KAAK0pe,iBAAiBnte,EAAQyvB,EAAUo9c,GAClD,MACJ,KAAK,EACDD,EAAUnpe,KAAK2pe,kBAAkBpte,EAAQyvB,EAAUo9c,GACnD,MACJ,KAAK,EACDD,EAAUnpe,KAAK4pe,mBAAmBrte,EAAQyvB,EAAUo9c,GACpD,MACJ,KAAK,EACDD,EAAUnpe,KAAK6pe,iBAAiBtte,EAAQyvB,EAAUo9c,GAClD,MACJ,KAAK,GACDD,EAAUnpe,KAAK8pe,qBAAqBvte,EAAQyvB,EAAUo9c,GAK9D,OAAOD,GAGXJ,EAAc1te,UAAU0ue,WAAa,SAAU/9c,EAAUzvB,EAAQyte,EAAkBZ,EAAeH,GAC9F,IAAIgB,OAAc9ue,EACdmO,EAAey/d,EAAcmB,gBAAgBjB,EAAkBj9c,GAC/DhsB,KAAKkpe,eAAeziQ,YAAYn9N,KAChC2ge,EAAcjqe,KAAKkpe,eAAexhe,IAAI4B,IAE1C,IAAI6ge,OAAchve,EAQlB,OAPI6wB,IAAag+c,EACbG,EAAcf,EAET7se,EAAOkqO,YAAYn9N,KACxB6ge,EAAc5te,EAAOmL,IAAI4B,MAGvB2ge,IAAgBE,IAAiB1se,EAAkBwse,KAAiBxse,EAAkB0se,IAAgBF,IAAgBE,IAQhIpB,EAAcmB,gBAAkB,SAAUjB,EAAkBj9c,GACxD,IAAItlB,EAAO,EACX,OAAQuie,GACJ,KAAK,EACDvie,EAAO1G,KAAKoqe,sBAAsBp+c,GAClC,MACJ,KAAK,EACDtlB,EAAO1G,KAAKqqe,+BAA+Br+c,GAC3C,MACJ,KAAK,EACDtlB,EAAO1G,KAAKsqe,0BAA0Bt+c,GACtC,MACJ,KAAK,EACDtlB,EAAO1G,KAAKuqe,0BAA0Bv+c,GACtC,MACJ,KAAK,EACDtlB,EAAO1G,KAAKwqe,uBAAuBx+c,GACnC,MACJ,KAAK,EACDtlB,EAAO1G,KAAKyqe,iBAAiBz+c,GAC7B,MACJ,KAAK,EACDtlB,EAAO1G,KAAK0qe,kBAAkB1+c,GAC9B,MACJ,KAAK,EACDtlB,EAAO1G,KAAK2qe,mBAAmB3+c,GAC/B,MACJ,KAAK,EACDtlB,EAAO1G,KAAK4qe,iBAAiB5+c,GAC7B,MACJ,KAAK,GACDtlB,EAAO1G,KAAK6qe,qBAAqB7+c,GAKzC,OAAOtlB,GAEXqie,EAAc0B,iBAAmB,SAAUz+c,GACvC,MAAiB,0BAAbA,EACO,EAEM,aAAbA,EACO,EAEM,WAAbA,EACO,EAEM,eAAbA,EACO,EAEM,eAAbA,EACO,EAEM,oBAAbA,EACO,EAEM,wBAAbA,EACO,EAEM,cAAbA,EACO,EAEM,mBAAbA,EACO,EAEM,uBAAbA,EACO,GAEJ,GAEX+8c,EAAc2B,kBAAoB,SAAU1+c,GACxC,MAAiB,WAAbA,EACO,EAEM,oBAAbA,EACO,EAEJ,GAEX+8c,EAAc4B,mBAAqB,SAAU3+c,GACzC,MAAiB,eAAbA,EACO,EAEM,gBAAbA,EACO,EAEM,cAAbA,EACO,EAEM,iBAAbA,EACO,EAEM,gBAAbA,EACO,EAEM,eAAbA,EACO,EAEM,mBAAbA,EACO,EAEM,mBAAbA,EACO,EAEM,uBAAbA,EACO,EAEJ,GAEX+8c,EAAc6B,iBAAmB,SAAU5+c,GACvC,MAAiB,qBAAbA,EACO,EAEM,YAAbA,EACO,EAEM,oBAAbA,EACO,EAEM,iBAAbA,EACO,EAEM,iBAAbA,EACO,EAEJ,GAEX+8c,EAAcyB,uBAAyB,SAAUx+c,GAC7C,MAAiB,oBAAbA,EACO,EAEM,oBAAbA,EACO,EAEM,iBAAbA,EACO,EAEJ,GAEX+8c,EAAcwB,0BAA4B,SAAUv+c,GAChD,MAAiB,eAAbA,EACO,EAEM,gBAAbA,EACO,EAEM,cAAbA,EACO,EAEM,iBAAbA,EACO,EAEM,eAAbA,EACO,EAEM,YAAbA,EACO,EAEM,sBAAbA,EACO,EAEM,uBAAbA,EACO,EAEM,mBAAbA,EACO,EAEM,cAAbA,EACO,GAEJ,GAEX+8c,EAAcqB,sBAAwB,SAAUp+c,GAC5C,MAAiB,UAAbA,EACO,EAEM,cAAbA,EACO,EAEM,cAAbA,EACO,EAEM,WAAbA,EACO,EAEM,UAAbA,EACO,EAEM,iBAAbA,EACO,EAEJ,GAEX+8c,EAAcsB,+BAAiC,SAAUr+c,GACrD,MAAiB,cAAbA,EACO,EAEM,eAAbA,EACO,EAEM,aAAbA,EACO,EAEM,SAAbA,EACO,EAEM,WAAbA,EACO,EAEM,cAAbA,EACO,EAEM,kBAAbA,EACO,EAEM,sBAAbA,EACO,EAEM,mBAAbA,EACO,EAEJ,GAEX+8c,EAAcuB,0BAA4B,SAAUt+c,GAChD,MAAiB,eAAbA,EACO,EAEM,gBAAbA,EACO,EAEM,oBAAbA,EACO,EAEM,kBAAbA,EACO,EAEM,kBAAbA,EACO,EAEM,iBAAbA,EACO,EAEM,gBAAbA,EACO,EAEM,oBAAbA,EACO,EAEM,iBAAbA,EACO,EAEJ,GAEX+8c,EAAc8B,qBAAuB,SAAU7+c,GAC3C,MAAiB,mBAAbA,EACO,EAEM,mBAAbA,EACO,EAEM,uBAAbA,EACO,EAEM,6BAAbA,EACO,EAEM,cAAbA,EACO,EAEM,eAAbA,EACO,EAEM,eAAbA,EACO,EAEM,cAAbA,EACO,EAEM,gBAAbA,EACO,EAEM,iBAAbA,EACO,GAEJ,GAKX+8c,EAAc1te,UAAUgue,cAAgB,SAAU9se,EAAQyte,EAAkBZ,GACxE,OAAIppe,KAAK+pe,WAAW,QAASxte,EAAQyte,EAAkBZ,EAAe,MAGlEppe,KAAK+pe,WAAW,YAAaxte,EAAQyte,EAAkBZ,EAAe,MAGtEppe,KAAK+pe,WAAW,YAAaxte,EAAQyte,EAAkBZ,EAAe,MAGtEppe,KAAK+pe,WAAW,SAAUxte,EAAQyte,EAAkBZ,EAAe,MAGnEppe,KAAK+pe,WAAW,QAASxte,EAAQyte,EAAkBZ,EAAe,KAGlEppe,KAAK+pe,WAAW,eAAgBxte,EAAQyte,EAAkBZ,EAAe,QAQjFL,EAAc1te,UAAUiue,uBAAyB,SAAU/se,EAAQyte,EAAkBZ,GACjF,OAAIppe,KAAK+pe,WAAW,YAAaxte,EAAQyte,EAAkBZ,EAAe,MAGtEppe,KAAK+pe,WAAW,aAAcxte,EAAQyte,EAAkBZ,EAAe,MAGvEppe,KAAK+pe,WAAW,WAAYxte,EAAQyte,EAAkBZ,EAAe,MAGrEppe,KAAK+pe,WAAW,OAAQxte,EAAQyte,EAAkBZ,EAAe,MAGjEppe,KAAK+pe,WAAW,SAAUxte,EAAQyte,EAAkBZ,EAAe,MAGnEppe,KAAK+pe,WAAW,YAAaxte,EAAQyte,EAAkBZ,EAAe,MAGtEppe,KAAK+pe,WAAW,gBAAiBxte,EAAQyte,EAAkBZ,EAAe,MAG1Eppe,KAAK+pe,WAAW,oBAAqBxte,EAAQyte,EAAkBZ,EAAe,KAG9Eppe,KAAK+pe,WAAW,iBAAkBxte,EAAQyte,EAAkBZ,EAAe,WAKnFL,EAAc1te,UAAUkue,uBAAyB,SAAUhte,EAAQyte,EAAkBZ,GACjF,OAAIppe,KAAK+pe,WAAW,aAAcxte,EAAQyte,EAAkBZ,EAAe,MAGvEppe,KAAK+pe,WAAW,cAAexte,EAAQyte,EAAkBZ,EAAe,MAGxEppe,KAAK+pe,WAAW,kBAAmBxte,EAAQyte,EAAkBZ,EAAe,MAG5Eppe,KAAK+pe,WAAW,gBAAiBxte,EAAQyte,EAAkBZ,EAAe,MAG1Eppe,KAAK+pe,WAAW,gBAAiBxte,EAAQyte,EAAkBZ,EAAe,MAG1Eppe,KAAK+pe,WAAW,eAAgBxte,EAAQyte,EAAkBZ,EAAe,MAGzEppe,KAAK+pe,WAAW,cAAexte,EAAQyte,EAAkBZ,EAAe,MAGxEppe,KAAK+pe,WAAW,kBAAmBxte,EAAQyte,EAAkBZ,EAAe,KAG5Eppe,KAAK+pe,WAAW,eAAgBxte,EAAQyte,EAAkBZ,EAAe,WAQjFL,EAAc1te,UAAUmue,kBAAoB,SAAUjte,EAAQyte,EAAkBZ,GAC5E,OAAIppe,KAAK+pe,WAAW,aAAcxte,EAAQyte,EAAkBZ,EAAe,MAGvEppe,KAAK+pe,WAAW,cAAexte,EAAQyte,EAAkBZ,EAAe,MAGxEppe,KAAK+pe,WAAW,YAAaxte,EAAQyte,EAAkBZ,EAAe,MAGtEppe,KAAK+pe,WAAW,eAAgBxte,EAAQyte,EAAkBZ,EAAe,MAGzEppe,KAAK+pe,WAAW,aAAcxte,EAAQyte,EAAkBZ,EAAe,MAGvEppe,KAAK+pe,WAAW,UAAWxte,EAAQyte,EAAkBZ,EAAe,MAGpEppe,KAAK+pe,WAAW,oBAAqBxte,EAAQyte,EAAkBZ,EAAe,MAG9Eppe,KAAK+pe,WAAW,qBAAsBxte,EAAQyte,EAAkBZ,EAAe,MAG/Eppe,KAAK+pe,WAAW,iBAAkBxte,EAAQyte,EAAkBZ,EAAe,KAG3Eppe,KAAK+pe,WAAW,YAAaxte,EAAQyte,EAAkBZ,EAAe,YAQ9EL,EAAc1te,UAAUoue,eAAiB,SAAUlte,EAAQyte,EAAkBZ,GACzE,OAAIppe,KAAK+pe,WAAW,kBAAmBxte,EAAQyte,EAAkBZ,EAAe,MAG5Eppe,KAAK+pe,WAAW,kBAAmBxte,EAAQyte,EAAkBZ,EAAe,KAG5Eppe,KAAK+pe,WAAW,eAAgBxte,EAAQyte,EAAkBZ,EAAe,KAQjFL,EAAc1te,UAAUque,iBAAmB,SAAUnte,EAAQyte,EAAkBZ,GAC3E,OAAIppe,KAAK+pe,WAAW,wBAAyBxte,EAAQyte,EAAkBZ,EAAe,MAGlFppe,KAAK+pe,WAAW,WAAYxte,EAAQyte,EAAkBZ,EAAe,MAGrEppe,KAAK+pe,WAAW,SAAUxte,EAAQyte,EAAkBZ,EAAe,MAGnEppe,KAAK+pe,WAAW,aAAcxte,EAAQyte,EAAkBZ,EAAe,MAGvEppe,KAAK+pe,WAAW,aAAcxte,EAAQyte,EAAkBZ,EAAe,MAGvEppe,KAAK+pe,WAAW,kBAAmBxte,EAAQyte,EAAkBZ,EAAe,MAG5Eppe,KAAK+pe,WAAW,sBAAuBxte,EAAQyte,EAAkBZ,EAAe,MAGhFppe,KAAK+pe,WAAW,YAAaxte,EAAQyte,EAAkBZ,EAAe,MAGtEppe,KAAK+pe,WAAW,iBAAkBxte,EAAQyte,EAAkBZ,EAAe,KAG3Eppe,KAAK+pe,WAAW,qBAAsBxte,EAAQyte,EAAkBZ,EAAe,YAQvFL,EAAc1te,UAAUsue,kBAAoB,SAAUpte,EAAQyte,EAAkBZ,GAC5E,OAAIppe,KAAK+pe,WAAW,SAAUxte,EAAQyte,EAAkBZ,EAAe,KAGnEppe,KAAK+pe,WAAW,kBAAmBxte,EAAQyte,EAAkBZ,EAAe,IAQpFL,EAAc1te,UAAUuue,mBAAqB,SAAUrte,EAAQyte,EAAkBZ,GAC7E,OAAIppe,KAAK+pe,WAAW,aAAcxte,EAAQyte,EAAkBZ,EAAe,MAGvEppe,KAAK+pe,WAAW,cAAexte,EAAQyte,EAAkBZ,EAAe,MAGxEppe,KAAK+pe,WAAW,YAAaxte,EAAQyte,EAAkBZ,EAAe,MAGtEppe,KAAK+pe,WAAW,eAAgBxte,EAAQyte,EAAkBZ,EAAe,MAGzEppe,KAAK+pe,WAAW,cAAexte,EAAQyte,EAAkBZ,EAAe,MAGxEppe,KAAK+pe,WAAW,aAAcxte,EAAQyte,EAAkBZ,EAAe,MAGvEppe,KAAK+pe,WAAW,iBAAkBxte,EAAQyte,EAAkBZ,EAAe,MAG3Eppe,KAAK+pe,WAAW,iBAAkBxte,EAAQyte,EAAkBZ,EAAe,KAG3Eppe,KAAK+pe,WAAW,qBAAsBxte,EAAQyte,EAAkBZ,EAAe,WAQvFL,EAAc1te,UAAUwue,iBAAmB,SAAUtte,EAAQyte,EAAkBZ,GAC3E,OAAIppe,KAAK+pe,WAAW,mBAAoBxte,EAAQyte,EAAkBZ,EAAe,MAG7Eppe,KAAK+pe,WAAW,UAAWxte,EAAQyte,EAAkBZ,EAAe,MAGpEppe,KAAK+pe,WAAW,kBAAmBxte,EAAQyte,EAAkBZ,EAAe,MAG5Eppe,KAAK+pe,WAAW,eAAgBxte,EAAQyte,EAAkBZ,EAAe,KAGzEppe,KAAK+pe,WAAW,eAAgBxte,EAAQyte,EAAkBZ,EAAe,OAQjFL,EAAc1te,UAAUyue,qBAAuB,SAAUvte,EAAQyte,EAAkBZ,GAC/E,OAAIppe,KAAK+pe,WAAW,iBAAkBxte,EAAQyte,EAAkBZ,EAAe,OAG3Eppe,KAAK+pe,WAAW,iBAAkBxte,EAAQyte,EAAkBZ,EAAe,OAG3Eppe,KAAK+pe,WAAW,qBAAsBxte,EAAQyte,EAAkBZ,EAAe,OAG/Eppe,KAAK+pe,WAAW,2BAA4Bxte,EAAQyte,EAAkBZ,EAAe,OAGrFppe,KAAK+pe,WAAW,YAAaxte,EAAQyte,EAAkBZ,EAAe,OAGtEppe,KAAK+pe,WAAW,aAAcxte,EAAQyte,EAAkBZ,EAAe,OAGvEppe,KAAK+pe,WAAW,aAAcxte,EAAQyte,EAAkBZ,EAAe,OAGvEppe,KAAK+pe,WAAW,YAAaxte,EAAQyte,EAAkBZ,EAAe,OAGtEppe,KAAK+pe,WAAW,cAAexte,EAAQyte,EAAkBZ,EAAe,MAGxEppe,KAAK+pe,WAAW,eAAgBxte,EAAQyte,EAAkBZ,EAAe,aAQjFL,EAAc1te,UAAUyve,WAAa,SAAU9uc,EAAQhQ,EAAUhvB,EAAOise,GAGpE,IAAK,IAFD3/d,EAAey/d,EAAcmB,gBAAgBjB,EAAkBj9c,GAC/D1uB,EAAO0+B,EAAOktc,eAAe58X,UACxBnwG,EAAI,EAAGA,EAAImB,EAAKb,OAAQN,IACzBmB,EAAKnB,KAAOmN,EACZtJ,KAAKkpe,eAAe9ke,IAAIkF,EAActM,GAGtCgD,KAAKkpe,eAAe9ke,IAAI9G,EAAKnB,GAAI6/B,EAAOktc,eAAexhe,IAAIpK,EAAKnB,KAGnE6/B,EAAOktc,eAAeziQ,YAAYn9N,IACnCtJ,KAAKkpe,eAAe9ke,IAAIkF,EAActM,IAM9C+re,EAAc1te,UAAU0ve,gBAAkB,SAAU/uc,GAGhD,IAAK,IAFD8wE,EAAO9wE,EAAOgvc,kBACd1te,EAAO0C,KAAKkpe,eAAe5re,KACtBnB,EAAI,EAAGA,EAAImB,EAAKb,OAAQN,IACxB2wG,EAAK25H,YAAYnpO,EAAKnB,KACvB2wG,EAAK1oG,IAAI9G,EAAKnB,GAAI6D,KAAKkpe,eAAexhe,IAAIpK,EAAKnB,KAGvD,OAAO2wG,GAKXi8X,EAAc1te,UAAU2ve,gBAAkB,WAGtC,IAAK,IAFDl+X,EAAO,IAAI64H,GACXroO,EAAO0C,KAAKkpe,eAAe5re,KACtBnB,EAAI,EAAGA,EAAImB,EAAKb,OAAQN,IAC7B2wG,EAAK1oG,IAAI9G,EAAKnB,GAAI6D,KAAKkpe,eAAexhe,IAAIpK,EAAKnB,KAEnD,OAAO2wG,GAYXi8X,EAAc1te,UAAUiX,QAAU,WACzB7U,EAAkBuC,KAAKkpe,iBACxBlpe,KAAKkpe,eAAe52d,UAExBtS,KAAKkpe,oBAAiB/te,EACtB6E,KAAKgpe,oBAAiB7te,EACtB6E,KAAKipe,sBAAmB9te,GAErB4te,KCrrBPkC,GAAgC,WAChC,SAASA,IACLjre,KAAKy6D,SA6ET,OAxEAwwa,EAAe5ve,UAAU6ve,gBAAkB,SAAUlvc,EAAQt1B,GAEzD,IAAK,IADDyke,OAAgBhwe,EACXgB,EAAI,EAAGA,EAAI6D,KAAKy6D,MAAMh+D,OAAQN,IACnC,GAAI6D,KAAKy6D,MAAMt+D,GAAGgte,QAAQntc,OAAQ7gC,OAAWA,GAAY,CACrDgwe,EAAgBnre,KAAKy6D,MAAMt+D,GAC3B,MAYR,OATIsB,EAAkB0te,KAClBA,EAAgB,IAAIpC,GAAcrie,IACpBwie,eAAiBltc,EAC/Bmvc,EAAcnC,eAAiB,EAC/Bhpe,KAAKy6D,MAAMj2D,KAAK2me,IAGhBA,EAAcnC,iBAEXmC,GAKXF,EAAe5ve,UAAU+ve,mBAAqB,SAAUC,EAAcr/c,EAAUhvB,GAE5E,IAAK,IADDmue,OAAgBhwe,EACXgB,EAAI,EAAGA,EAAI6D,KAAKy6D,MAAMh+D,OAAQN,IACnC,GAAI6D,KAAKy6D,MAAMt+D,GAAGgte,QAAQkC,EAAanC,eAAgBl9c,EAAUhvB,GAAQ,CACrEmue,EAAgBnre,KAAKy6D,MAAMt+D,GAC3B,MAcR,OAXIsB,EAAkB0te,KAClBA,EAAgB,IAAIpC,GAAcsC,EAAapC,mBACjC6B,WAAWO,EAAcr/c,EAAUhvB,EAAOque,EAAapC,kBACrEkC,EAAcnC,eAAiB,EAC/Bhpe,KAAKy6D,MAAMj2D,KAAK2me,IAGhBA,EAAcnC,iBAElBhpe,KAAKuE,OAAO8me,GACZA,OAAelwe,EACRgwe,GAKXF,EAAe5ve,UAAUkJ,OAAS,SAAU8me,GACxCA,EAAarC,iBACTqC,EAAarC,gBAAkB,IAC/Bhpe,KAAKy6D,MAAMpyC,OAAOroB,KAAKy6D,MAAMl8D,QAAQ8se,GAAe,GACpDA,EAAa/4d,UACb+4d,OAAelwe,IAMvB8ve,EAAe5ve,UAAU20D,MAAQ,WAC7B,GAAIvyD,EAAkBuC,KAAKy6D,OACvB,IAAK,IAAIt+D,EAAI,EAAGA,EAAI6D,KAAKy6D,MAAMh+D,OAAQN,IACnC6D,KAAKy6D,MAAMt+D,GAAGmW,UAGtBtS,KAAKy6D,UAKTwwa,EAAe5ve,UAAUiX,QAAU,WAC/BtS,KAAKgwD,QACLhwD,KAAKy6D,WAAQt/D,GAEV8ve,KCpFP3gZ,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GA0B5D0uc,GAAgC,SAAUngZ,GAK1C,SAASmgZ,EAAet4d,EAAShS,GAC7B,IAAIjB,EAAQorF,EAAO7pF,KAAKtB,KAAMgT,EAAShS,IAAYhB,KAiVnD,OA/UAD,EAAMwre,sBAAuB,EAI7Bxre,EAAMyre,mBAAoB,EAI1Bzre,EAAM0re,iBAAkB,EAIxB1re,EAAM2re,kBAAmB,EAIzB3re,EAAMw2F,YAASp7F,EACf4E,EAAM4re,kBAAmB,EAIzB5re,EAAM6re,qBAAkBzwe,EAIxB4E,EAAM8re,aAAe,GAIrB9re,EAAM+re,iCAA8B3we,EAIpC4E,EAAMgse,mCAAgC5we,EAItC4E,EAAMise,6BAA0B7we,EAIhC4E,EAAMkse,8BAA2B9we,EAIjC4E,EAAMmse,2BAAwB/we,EAI9B4E,EAAMose,wBAAqBhxe,EAI3B4E,EAAMqse,+BAAgC,EAItCrse,EAAMsse,YAAc,UAIpBtse,EAAMuse,wBAAyB,EAI/Bvse,EAAMwse,kBAAmB,EAIzBxse,EAAM49a,eACF6uD,MAAS,QACThsK,IAAO,MACPisK,KAAQ,OACRC,GAAM,KACNxnV,OAAU,SACV93H,KAAQ,OACRu/c,kBAAmB,kBACnBzyb,MAAS,SACT0yb,QAAW,UACXC,aAAc,aACdC,UAAa,YACbh3N,KAAQ,OACRnE,OAAU,SACVC,MAAS,QACT+B,QAAW,UACXo5N,mBAAoB,mBACpBC,sBAAuB,sBACvBC,QAAW,UACXC,iBAAkB,iBAClBC,WAAY,WACZC,QAAW,UACXC,gBAAiB,gBACjBC,kCAAmC,kCACnCC,+CAAgD,+CAChDC,qBAAsB,qBACtBnwP,IAAO,MACP00B,OAAU,SACV07N,uBAAwB,uBACxBC,uBAAwB,uBACxBC,8BAA+B,8BAC/BC,eAAgB,eAChBC,0BAA2B,0BAC3BC,QAAW,UACXpzS,KAAQ,OACRqzS,OAAU,SACVt+O,IAAO,MACPu+O,aAAgB,eAChBC,aAAgB,eAChBv+O,QAAW,UACXC,WAAc,aACd4tE,OAAU,SACV2wK,OAAU,SACVC,kBAAqB,oBACrBC,kBAAqB,oBACrBC,sBAAyB,wBACzBC,mBAAsB,qBACtBC,mBAAsB,qBACtBC,uBAA0B,yBAC1BC,kBAAqB,oBACrBC,kBAAqB,oBACrBC,sBAAyB,wBACzBC,WAAc,aACdC,WAAc,aACdC,eAAkB,iBAClBC,SAAY,WACZC,UAAa,YACbC,OAAU,SACVC,MAAS,QACTC,MAAS,QACTC,MAAS,QACTC,MAAS,QACTC,OAAU,SACVC,OAAU,SACVC,QAAW,UACXC,MAAS,QACTC,UAAa,YACbC,UAAa,YACbC,GAAM,KACNC,GAAM,KACNC,GAAM,KACNC,GAAM,KACNC,GAAM,KACNC,cAAe,cACfC,yBAA0B,yBAC1BC,uBAAwB,uBACxBC,YAAa,YACbvxL,OAAU,SACVwxL,OAAU,SACVvzK,OAAU,UACVwzK,MAAS,QACTh5E,OAAU,SACVi5E,YAAe,cACfpkP,UAAa,YACbJ,SAAY,WACZykP,oBAAqB,oBACrBC,oBAAqB,oBACrBC,2BAA4B,2BAC5BC,SAAU,SACVC,QAAW,UACXC,uBAAwB,uBACxBC,sBAAuB,sBACvBC,aAAgB,eAChBC,cAAe,cACfC,eAAgB,eAChBC,yCAA0C,yCAC1CC,gCAAiC,gCACjCC,OAAU,SACVC,oBAAqB,mBACrBC,aAAc,aACdC,YAAa,YACbC,YAAa,YACbC,YAAa,YACbC,YAAa,YACbC,YAAa,YACbC,YAAa,YACbC,YAAa,YACbC,YAAa,YACbC,YAAa,YACbC,iBAAkB,iBAClBlpP,OAAU,SACVmpP,iBAAkB,iBAClBC,qBAAsB,qBACtBC,UAAW,UACXC,OAAU,SACVC,MAAS,QACTC,QAAW,UACXC,IAAO,MACPhnF,IAAO,MACPh8J,OAAU,SACVijP,QAAW,UACXC,QAAW,UACXjlO,KAAQ,OACRklO,WAAY,WACZC,mBAAoB,mBACpBC,eAAgB,eAChBC,gBAAiB,gBACjBC,eAAgB,eAChBC,cAAe,oBACfC,WAAY,iBACZC,kBAAmB,kBACnBC,QAAW,UACXC,mBAAoB,mBACpBC,iBAAkB,iBAClBC,OAAU,SACVC,QAAW,UACXC,YAAe,cACfC,cAAe,cACfC,QAAW,UACXC,aAAc,aACdC,QAAW,UACXC,aAAc,aACdC,GAAM,KACNC,OAAU,SACVC,eAAgB,eAChBC,MAAS,QACTC,GAAM,KACNl2C,SAAY,WACZm2C,QAAW,UACXC,KAAQ,6BACRC,aAAc,aACdC,yBAA0B,yBAC1BC,UAAW,UACXC,UAAW,UACXC,UAAW,UACXC,UAAW,UACXC,UAAW,UACXC,UAAW,UACXC,UAAW,UACXC,UAAW,UACXC,UAAW,UACXC,gBAAiB,gBACjBC,8BAA+B,8BAC/BC,wBAAyB,8BACzBC,WAAY,WACZC,aAAc,qBACdC,QAAW,WACXC,iBAAkB,iBAClBC,aAAc,aACdC,qBAAsB,qBACtBx2L,IAAO,gBACPy2L,MAAS,QACTC,OAAU,SACVC,QAAW,UACXC,SAAY,WACZC,SAAY,WACZC,UAAa,YACbv+c,OAAU,SACVw+c,eAAgB,eAChBC,OAAU,SACVC,QAAW,UACXC,eAAgB,eAChBC,WAAY,WACZC,aAAc,aACdx5K,KAAQ,OACRy5K,aAAc,aACd3zP,UAAa,kBACb4zP,aAAc,aACdC,QAAW,UACXC,cAAiB,gBACjBC,YAAe,cACfC,UAAa,YACbC,uBAAwB,uBACxBx0P,QAAW,UACXI,KAAQ,OACRC,OAAU,SACVo0P,WAAc,aACd94D,IAAO,MACPD,KAAQ,OACRE,MAAS,QACT34B,UAAa,YACbyxF,iBAAkB,iBAClBC,iBAAkB,iBAClBC,oBAAqB,oBACrBC,mBAAoB,mBACpBC,UAAa,YACbC,cAAe,cACfC,eAAgB,eAChBC,eAAgB,eAChBC,cAAe,cACfC,eAAgB,eAChB51D,OAAU,SACV61D,eAAgB,eAChBC,aAAc,aACdC,gBAAiB,gBACjBC,YAAa,YACbC,cAAe,cACf5mR,KAAQ,OACR6mR,WAAc,aACdC,QAAW,UACXC,QAAW,UACXC,cAAe,cACfC,mBAAoB,mBACpBC,KAAQ,OACRC,aAAc,aACdC,YAAa,YACbC,UAAW,UACXC,OAAQ,OACRC,kBAAmB,kBACnBC,WAAY,WACZC,uBAAwB,uBACxBC,qBAAsB,qBACtBC,iBAAkB,iBAClBC,MAAS,QACTC,aAAc,eACdC,WAAc,aACdC,KAAQ,OACRC,aAAc,aACdC,iBAAkB,iBAClBC,gCAAiC,gCACjCC,WAAc,aACdC,wBAAyB,wBACzBC,UAAa,YACbC,eAAgB,eAChBC,aAAc,aACdC,SAAY,WACZC,aAAc,aACdC,qBAAsB,qBACtBC,SAAY,0YAKZC,OAAU,SACVC,SAAU,SACVC,cAAe,cACfC,cAAe,cACfC,mBAAoB,mBACpBC,eAAgB,eAChBC,IAAO,MACPC,QAAW,UACXC,gBAAiB,gBACjBC,oBAAqB,qBAEzBp6e,EAAMq6e,OAAS,IAAIC,GAAiBt6e,GACpCA,EAAMw2F,OAAS,IAAI+jZ,GAAWv6e,EAAMq6e,QAC7Br6e,EAgiCX,OAt3CAuqF,GAAUghZ,EAAgBngZ,GAwV1BovZ,EAAmBjP,EACnBhte,OAAOuJ,eAAeyje,EAAejwe,UAAW,yBAI5CqM,IAAK,WACD,OAAO1H,KAAKure,sBAEhBlke,IAAK,SAAUrK,GACXgD,KAAKure,qBAAuBvue,EAC5BgD,KAAKo6e,OAAOI,oBAEhB7ye,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeyje,EAAejwe,UAAW,aAI5CqM,IAAK,WACD,OAAK1H,KAAKy6e,kBAAoBh9e,EAAkBuC,KAAKo6e,QAC1C,EAEJp6e,KAAKo6e,OAAOlvQ,MAAMzuO,QAE7BkL,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeyje,EAAejwe,UAAW,aAM5CqM,IAAK,WACD,OAAO1H,KAAKmtU,iBAEhBxlU,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeyje,EAAejwe,UAAW,UAM5CqM,IAAK,WACD,OAAO1H,KAAK06e,cAEhB/ye,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeyje,EAAejwe,UAAW,iBAK5CqM,IAAK,WACD,OAAO1H,KAAK26e,qBAEhBhze,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeyje,EAAejwe,UAAW,eAK5CqM,IAAK,WACD,OAAO1H,KAAK46e,mBAEhBjze,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeyje,EAAejwe,UAAW,eAI5CqM,IAAK,WACD,OAAO1H,KAAKgB,QAAQsC,IAExBqE,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeyje,EAAejwe,UAAW,oBAI5CqM,IAAK,WACD,OAAO1H,KAAK66e,oBAEhBxze,IAAK,SAAUrK,GACXgD,KAAK66e,mBAAqB79e,GAE9B2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeyje,EAAejwe,UAAW,qBAM5CqM,IAAK,WACD,OAAO1H,KAAK86e,sBAAwBr9e,EAAkBuC,KAAK26e,sBAE/Dhze,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeyje,EAAejwe,UAAW,iBAM5CqM,IAAK,WACD,IAAKjK,EAAkBuC,KAAKmtU,iBACxB,OAAOntU,KAAK4vE,UAAUmra,oBAI9Bpze,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeyje,EAAejwe,UAAW,eAM5CqM,IAAK,WACD,IAAKjK,EAAkBuC,KAAKmtU,iBACxB,OAAOntU,KAAK4vE,UAAUora,kBAI9Brze,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeyje,EAAejwe,UAAW,kBAI5CqM,IAAK,WACD,OAAO1H,KAAKi7e,YAAcx9e,EAAkBuC,KAAK06e,eAAiBj9e,EAAkBuC,KAAKmtU,kBAE7FxlU,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeyje,EAAejwe,UAAW,0BAM5CqM,IAAK,WACD,OAAO1H,KAAKk7e,qBAAuBz9e,EAAkBuC,KAAKmse,qBAE9Dxke,YAAY,EACZC,cAAc,IAElB0je,EAAejwe,UAAUoX,UAAY,WACjCzS,KAAK4re,oBAGTN,EAAejwe,UAAU0wG,OAAS,WAG9B,GAFA/rG,KAAKo6e,OAAOe,uBACZn7e,KAAKo7e,aACA39e,EAAkBuC,KAAKgB,SAAU,CAClC,IAAIyZ,EAAYza,KAAKgB,QACrByZ,EAAU/V,MAAM4uD,UAAY,QAC5B74C,EAAU/V,MAAM8uD,SAAW,UAOnC83a,EAAejwe,UAAUkkC,cAAgB,WACrC,MAAO,kBAMX+rc,EAAejwe,UAAUmsF,kBAAoB,SAAU5kE,EAAO8pE,GAC1D,IAAK,IAAItuF,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKslB,GAAQxkB,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAE5D,OADWyE,EAAGzE,IAEV,IAAK,aACG4B,KAAKo6e,SACLp6e,KAAKo6e,OAAOhsa,WAAaxrD,EAAMwrD,YAEnC,MACJ,IAAK,SACDpuE,KAAKq7e,kBACL,MACJ,IAAK,cACI59e,EAAkBuC,KAAKs7e,oBAAsBt7e,KAAKs7e,kBAAkBC,mBACrEv7e,KAAKs7e,kBAAkBE,qBAAoB,MAM/DlQ,EAAejwe,UAAUggf,gBAAkB,WACvC,GAAoB,KAAhBr7e,KAAKgO,OAAe,CACpB,IAAIq3G,EAAO,IAAI7N,GAAK,iBAAkBx3G,KAAK29a,eAC3Ct4T,EAAK1N,UAAU33G,KAAKgO,QACpBL,GAAW3N,KAAKgO,QACZhO,KAAKs7e,mBACLt7e,KAAKs7e,kBAAkBG,gBAAgBp2X,GAEvCrlH,KAAKkse,uBACLlse,KAAKkse,sBAAsBwP,oBAAoBr2X,GAE/CrlH,KAAK27e,uBACL37e,KAAK27e,sBAAsBC,oBAAoBv2X,GAE/CrlH,KAAK67e,kBACL77e,KAAK67e,iBAAiBC,eAAez2X,GAErCrlH,KAAK+7e,uBACL/7e,KAAK+7e,sBAAsBC,oBAAoB32X,GAE/CrlH,KAAK46e,mBACL56e,KAAK46e,kBAAkBqB,gBAAgB52X,GAEvCrlH,KAAKk8e,kBACLl8e,KAAKk8e,iBAAiBC,eAAe92X,GAErCrlH,KAAK8re,6BACL9re,KAAK8re,4BAA4BsQ,wBAAwB/2X,GAEzDrlH,KAAK+re,+BACL/re,KAAK+re,8BAA8BsQ,6BAA6Bh3X,GAEhErlH,KAAKgse,yBACLhse,KAAKgse,wBAAwBsQ,sBAAsBj3X,GAEnDrlH,KAAKise,0BACLjse,KAAKise,yBAAyBsQ,uBAAuBl3X,GAErDrlH,KAAKw8e,mBACLx8e,KAAKw8e,kBAAkBC,gBAAgBp3X,GAEvCrlH,KAAK08e,mBACL18e,KAAK08e,kBAAkBC,gBAAgBt3X,GAEvCrlH,KAAK48e,6BACL58e,KAAK48e,4BAA4BC,yBAAyBx3X,KAQtEimX,EAAejwe,UAAUmxG,eAAiB,WACtC,MAAO,kBAEX8+X,EAAejwe,UAAUyhf,kCAAoC,WACrD98e,KAAKo6e,kBAAkB2C,IACvB/8e,KAAKo6e,OAAO4C,sBAMpB1R,EAAejwe,UAAU4hf,yBAA2B,WAChD,OAAOj9e,KAAKgB,SAKhBsqe,EAAejwe,UAAU6hf,kBAAoB,WACzCl9e,KAAKwmB,QAAQ,kBAKjB8kd,EAAejwe,UAAU8hf,mBAAqB,WAC1Cn9e,KAAKwmB,QAAQ,mBAKjB8kd,EAAejwe,UAAU+hf,oBAAsB,YACtCp9e,KAAKo6e,OAAOiD,oBAAsB7xe,GAAQkb,UAAY1mB,KAAK06e,cAC5D16e,KAAK06e,aAAa4C,cAEtBt9e,KAAKwmB,QAAQ,oBAKjB8kd,EAAejwe,UAAUkif,qBAAuB,WAC5Cv9e,KAAKwmB,QAAQ,qBAKjB8kd,EAAejwe,UAAUmif,eAAiB,WACtC,GAAIx9e,KAAKo6e,QAAUp6e,KAAKo6e,OAAOlvQ,MAAMzuO,OAAS,GACtCuD,KAAKo6e,OAAOqD,aAAahhf,OAAS,EAAG,CACrC,IAAIyuO,EAAQlrO,KAAKo6e,OAAOqD,aACpBlwe,GACAkwR,UAAWvyD,EAAM,GAAGj5N,MAAQ,EAC5Byre,QAASxyQ,EAAMA,EAAMzuO,OAAS,GAAGwV,MAAQ,GAE7CjS,KAAKwmB,QAAQ,aAAcjZ,KAQvC+9d,EAAejwe,UAAUsif,oBAAsB,SAAUC,GACjD59e,KAAKkse,wBAA0Blse,KAAK69e,gBAAkB79e,KAAKo6e,QAC3Dp6e,KAAKkse,sBAAsBjoX,KAAK25X,IAOxCtS,EAAejwe,UAAUyif,oBAAsB,WACvC99e,KAAK27e,wBAA0B37e,KAAK69e,gBAAkB79e,KAAKo6e,QAC3Dp6e,KAAK27e,sBAAsB13X,QAOnCqnX,EAAejwe,UAAU0if,eAAiB,SAAUC,GAC5Ch+e,KAAK67e,mBAAqB77e,KAAK69e,gBAAkB79e,KAAKo6e,QACtDp6e,KAAK67e,iBAAiBkC,eAAeC,IAO7C1S,EAAejwe,UAAU4if,sBAAwB,WACzCj+e,KAAKgse,0BAA4Bhse,KAAK69e,gBAAkB79e,KAAKo6e,QAC7Dp6e,KAAKgse,wBAAwB/nX,QAOrCqnX,EAAejwe,UAAU6if,uBAAyB,WAC1Cl+e,KAAKise,2BAA6Bjse,KAAK69e,gBAAkB79e,KAAKo6e,QAC9Dp6e,KAAKise,yBAAyBhoX,QAOtCqnX,EAAejwe,UAAU8if,gBAAkB,WACnCn+e,KAAKw8e,oBAAsBx8e,KAAK69e,gBAAkB79e,KAAKo6e,QACvDp6e,KAAKw8e,kBAAkBv4X,QAO/BqnX,EAAejwe,UAAU+if,0BAA4B,WAC7Cp+e,KAAK48e,8BAAgC58e,KAAK69e,gBAAkB79e,KAAKo6e,QACjEp6e,KAAK48e,4BAA4B34X,QAQzCqnX,EAAejwe,UAAUgjf,gBAAkB,WACnCr+e,KAAK08e,oBAAsB18e,KAAK69e,gBAAkB79e,KAAKo6e,QACvDp6e,KAAK08e,kBAAkBz4X,QAO/BqnX,EAAejwe,UAAUijf,oBAAsB,WACvCt+e,KAAK+7e,wBAA0B/7e,KAAK69e,gBAAkB79e,KAAKo6e,QAC3Dp6e,KAAK+7e,sBAAsB93X,QAOnCqnX,EAAejwe,UAAUkjf,mBAAqB,WACtCv+e,KAAKw+e,uBAAyBx+e,KAAK69e,gBAAkB79e,KAAKo6e,QAC1Dp6e,KAAKw+e,qBAAqBv6X,QAOlCqnX,EAAejwe,UAAUojf,iBAAmB,WACpCz+e,KAAK0+e,qBAAuB1+e,KAAK69e,gBAAkB79e,KAAKo6e,QACxDp6e,KAAK0+e,mBAAmBz6X,QAOhCqnX,EAAejwe,UAAUsjf,eAAiB,WAClC3+e,KAAKk8e,mBAAqBl8e,KAAK69e,gBAAkB79e,KAAKo6e,QACtDp6e,KAAKk8e,iBAAiByC,kBAO9BrT,EAAejwe,UAAUujf,0BAA4B,WAC7C5+e,KAAK8re,8BAAgC9re,KAAK69e,gBAAkB79e,KAAKo6e,QACjEp6e,KAAK8re,4BAA4B7nX,QAOzCqnX,EAAejwe,UAAUwjf,4BAA8B,WAC/C7+e,KAAK+re,gCAAkC/re,KAAK69e,gBAAkB79e,KAAKo6e,QACnEp6e,KAAK+re,8BAA8B9nX,QAI3CqnX,EAAejwe,UAAUw1F,gBAAkB,WACvC,IAAIgB,KA6HJ,OA5HI7xF,KAAK8+e,aACLjtZ,EAAQrtF,MACJ6sF,OAAQ,QAASpxF,WAGrBD,KAAK++e,kBAAoB/+e,KAAKg/e,kBAAoBh/e,KAAKi/e,kBAAoBj/e,KAAKk/e,iBAAmBl/e,KAAKm/e,eACxGttZ,EAAQrtF,MACJ6sF,OAAQ,aAAcpxF,MAAOD,KAAKo6e,UAGtCp6e,KAAKg/e,kBACLntZ,EAAQrtF,MACJ6sF,OAAQ,aAAcpxF,UAG1BD,KAAKi/e,kBACLptZ,EAAQrtF,MACJ6sF,OAAQ,aAAcpxF,WAG1BD,KAAKk/e,iBAAmBl/e,KAAK0nd,cAAgB1nd,KAAKm/e,gBAClDttZ,EAAQrtF,MACJ6sF,OAAQ,YAAapxF,MAAOD,QAE5BA,KAAKo/e,mBACLvtZ,EAAQrtF,MACJ6sF,OAAQ,cAAepxF,MAAOD,KAAKo6e,WAI3Cp6e,KAAK0nd,eACL71X,EAAQrtF,MACJ6sF,OAAQ,SAAUpxF,MAAOD,QAEzBA,KAAKq/e,mBACLxtZ,EAAQrtF,MACJ6sF,OAAQ,cAAepxF,MAAOD,KAAKo6e,WAI3Cp6e,KAAKm/e,eACLttZ,EAAQrtF,MACJ6sF,OAAQ,SAAUpxF,MAAOD,KAAKo6e,UAE9Bp6e,KAAKk7e,oBACLrpZ,EAAQrtF,MACJ6sF,OAAQ,eAAgBpxF,MAAOD,KAAMA,KAAKo6e,UAG9Cp6e,KAAK86e,qBACLjpZ,EAAQrtF,MACJ6sF,OAAQ,gBAAiBpxF,MAAOD,QAGpCA,KAAKs/e,uBACLztZ,EAAQrtF,MACJ6sF,OAAQ,kBAAmBpxF,MAAOD,KAAKo6e,UAG3Cp6e,KAAKu/e,mBACL1tZ,EAAQrtF,MACJ6sF,OAAQ,cAAepxF,MAAOD,KAAKo6e,UAGvCp6e,KAAKw/e,sBACL3tZ,EAAQrtF,MACJ6sF,OAAQ,iBAAkBpxF,MAAOD,KAAKo6e,UAG1Cp6e,KAAKy/e,6BACL5tZ,EAAQrtF,MACJ6sF,OAAQ,wBAAyBpxF,MAAOD,KAAKo6e,UAGjDp6e,KAAK0/e,uBACL7tZ,EAAQrtF,MACJ6sF,OAAQ,kBAAmBpxF,MAAOD,KAAKo6e,UAG3Cp6e,KAAK2/e,oBACL9tZ,EAAQrtF,MACJ6sF,OAAQ,eAAgBpxF,MAAOD,KAAKo6e,UAExCvoZ,EAAQrtF,MACJ6sF,OAAQ,cAAepxF,MAAOD,KAAKo6e,UAEvCvoZ,EAAQrtF,MACJ6sF,OAAQ,4BAA6BpxF,MAAOD,KAAKo6e,WAGrDp6e,KAAK4/e,kBACL/tZ,EAAQrtF,MACJ6sF,OAAQ,aAAcpxF,MAAOD,KAAKo6e,UAGtCp6e,KAAK6/e,uBACLhuZ,EAAQrtF,MACJ6sF,OAAQ,kBAAmBpxF,MAAOD,KAAKo6e,UAG3Cp6e,KAAK8/e,kBACLjuZ,EAAQrtF,MACJ6sF,OAAQ,aAAcpxF,MAAOD,KAAKo6e,UAGtCp6e,KAAK+/e,8BACLluZ,EAAQrtF,MACJ6sF,OAAQ,wBAAyBpxF,MAAOD,KAAKo6e,UAEjDvoZ,EAAQrtF,MACJ6sF,OAAQ,oBAAqBpxF,MAAOD,KAAKo6e,WAG7Cp6e,KAAKggf,+BACLnuZ,EAAQrtF,MACJ6sF,OAAQ,0BAA2BpxF,MAAOD,KAAKo6e,UAGnDp6e,KAAKigf,0BACLpuZ,EAAQrtF,MACJ6sF,OAAQ,qBAAsBpxF,MAAOD,KAAKo6e,WAI/CvoZ,GAOXy5Y,EAAejwe,UAAUqG,KAAO,SAAUw+e,GACjCzif,EAAkBuC,KAAKo6e,UACxBp6e,KAAK88e,oCACL98e,KAAKo6e,OAAO99N,SACZt8Q,KAAKo6e,OAAO+F,iBACZngf,KAAKo6e,OAAO72e,OAAS,IAAI68e,IACpB3if,EAAkByif,IAAalgf,KAAKo6e,SACrCp6e,KAAKo6e,OAAOiG,kBAAkBrgf,KAAKu2F,OAAO+pZ,sBAAsBJ,IAC5Dlgf,KAAK06e,cACL16e,KAAK06e,aAAa6F,4BAUlCjV,EAAejwe,UAAUmlf,aAAe,SAAUnnK,GAC9C,QAAI57U,EAAkBuC,KAAKo6e,SAAW/gK,EAAa,GAAKA,EAAar5U,KAAKo6e,OAAOlvQ,MAAMzuO,UAGvFuD,KAAKo6e,OAAOoG,aAAannK,EAAa,IAC/B,IAMXiyJ,EAAejwe,UAAUolf,iBAAmB,WACxCzgf,KAAK8+e,YAAc9+e,KAAK++e,iBAAmB/+e,KAAKg/e,iBAAmBh/e,KAAKi/e,iBAClEj/e,KAAKk/e,gBAAkBl/e,KAAKo/e,kBAAoBp/e,KAAK0nd,aAAe1nd,KAAKq/e,kBACrEr/e,KAAKm/e,aAAen/e,KAAKk7e,mBAAqBl7e,KAAK86e,oBAC/C96e,KAAKs/e,sBAAwBt/e,KAAKu/e,kBAAoBv/e,KAAKw/e,qBACvDx/e,KAAKy/e,4BAA8Bz/e,KAAK0/e,sBAAwB1/e,KAAK2/e,kBACjE3/e,KAAK4/e,iBAAmB5/e,KAAK6/e,sBAAwB7/e,KAAK8/e,iBACtD9/e,KAAK+/e,4BAA8B//e,KAAKggf,8BACpChgf,KAAKigf,0BAA2B,EAE9D1F,EAAiBnuY,OAAOs0Y,GAAOC,GAAYC,GAAYC,GAAYz0I,GAAWlxS,GAAQ4lb,GAAQC,GAAcC,GAAelmM,GAAammM,GAAaC,GAAiBC,GAAaC,GAAgBC,GAAuBC,GAAiBC,GAAaC,GAAYC,GAAiBC,GAA2BC,GAAYC,GAAuBC,GAAyBC,GAAoBC,GAAmBC,KAOvZ1W,EAAejwe,UAAUyvS,OAAS,SAAU90R,EAAOD,GAC3C/V,KAAKgB,WACAvD,EAAkBuY,IAAUA,EAAQ,MACrChW,KAAKgB,QAAQ0D,MAAMsR,MAAQA,EAAQ,OAElCvY,EAAkBsY,IAAWA,EAAS,MACvC/V,KAAKgB,QAAQ0D,MAAMqR,OAASA,EAAS,MAErC/V,KAAKo6e,QACLp6e,KAAKo6e,OAAO6H,qBAOxB3W,EAAejwe,UAAUo/H,QAAU,WAC3Bz6H,KAAKo6e,QACLp6e,KAAKo6e,OAAO8H,eAQpB5W,EAAejwe,UAAU8mf,QAAU,SAAUC,GACrC3kf,EAAkB2kf,KAClBA,EAAc,QAEdpif,KAAKo6e,SACLp6e,KAAKo6e,OAAOgI,YAAcA,IAOlC9W,EAAejwe,UAAU0F,MAAQ,SAAUE,GACvC,GAAIxD,EAAkBuC,KAAKo6e,QACvB,MAAM,IAAIx5e,MAAM,sBAEpB,IAAIZ,KAAKqif,YAIL,MAAM,IAAIzhf,MAAM,4CAHhBZ,KAAKqif,YAAYthf,MAAMf,KAAKo6e,OAAQn5e,IAS5Cqqe,EAAejwe,UAAUq0D,UAAY,WAEjC,KAAI1vD,KAAK++e,kBAAoB/+e,KAAKsif,4BAA4B3B,IAI1D,MAAM,IAAI//e,MAAM,kDAEpB,OALWZ,KAAKsif,iBAAiB5yb,aAYrC47a,EAAejwe,UAAUoyF,KAAO,SAAUsjI,EAAU4vC,GAEhD,GADA5vC,EAAWA,GAAY,WACnBtzN,EAAkBuC,KAAKo6e,QACvB,MAAM,IAAIx5e,MAAM,sBAEpB,GAAmB,SAAf+/P,GAAyB3gQ,KAAKuif,iBAC1Bvif,KAAKuif,kBACLvif,KAAKuif,iBAAiB90Z,KAAKztF,KAAKo6e,OAAQrpR,QAG3C,GAAmB,QAAf4vC,GAAwB3gQ,KAAKwif,iBAClCxif,KAAKwif,iBAAiB/0Z,KAAKztF,KAAKo6e,OAAQrpR,OAEvC,CAAA,GAAmB,SAAf4vC,IAAyB3gQ,KAAK++e,mBAAoB/+e,KAAKsif,iBAQ5D,MAAM,IAAI1hf,MAAM,uDAPhB,IAAI6hf,EAAazif,KAAK0vD,YAClByxF,EAAO,IAAIgwE,MAAMsxR,IACjB/7e,KAAM,qBAEVoqN,GAAKrjI,KAAKsjI,EAAW,QAAS5vE,KAUtCmqV,EAAejwe,UAAUgoO,WAAa,SAAUs9B,GAC5C,IAAI5gQ,EAAQC,KACZ,GAAIvC,EAAkBuC,KAAKo6e,QACvB,MAAM,IAAIx5e,MAAM,qBAEpB,OAAO,IAAIgiF,QAAQ,SAAUC,EAASC,GACf,SAAf69K,GAAyB5gQ,EAAMwif,iBAC/B1/Z,EAAQ9iF,EAAMwif,iBAAiBl/Q,WAAWtjO,EAAMq6e,SAE5B,QAAfz5O,GAAwB5gQ,EAAMyif,iBACnC3/Z,EAAQ9iF,EAAMyif,iBAAiBn/Q,WAAWtjO,EAAMq6e,SAE5B,SAAfz5O,GAAyB5gQ,EAAMg/e,kBAAoBh/e,EAAMuif,kBAC9Dz/Z,EAAQ9iF,EAAMuif,iBAAiBj/Q,WAAWtjO,EAAMq6e,YAO5D9O,EAAejwe,UAAU+/e,UAAY,WACjC,IAAI1oO,EAAU,IAAIgwO,GAClBhwO,EAAQzgQ,MAAQ,EAChBygQ,EAAQiwO,cAAgB,IAAIC,GAAelwO,GAC3C,IAAImwO,EAAY,IAAIC,GACpBD,EAAU5we,MAAQ,EAClB4we,EAAUjF,gBAAkB,IAAImF,GAAiBF,GACjDA,EAAU7E,gBAAkB,IAAIgF,GAAiBH,GACjDnwO,EAAQuwO,aAAaz+e,KAAKq+e,GAC1BA,EAAUK,gBAAkBxwO,EAC5B,IAAI1sB,KACJA,EAASxhP,KAAKkuQ,GAEd,IAAIywO,EAAMnjf,KAAKu2F,OAAO6sZ,mBAAoBx+Z,UAAY0oH,UAAY+1S,cAAgBC,cAAgBC,mBAAqBC,yBAAuBrof,GAC9I,GAAI6E,KAAKo6e,SACLp6e,KAAK88e,oCACL98e,KAAKo6e,OAAOqJ,eAAej/e,KAAK2+e,GAChCnjf,KAAKo6e,OAAOiG,kBAAkBr6P,GAC1BhmP,KAAK06e,cAAc,CACnB16e,KAAK06e,aAAa6F,yBAClB,IAAI77e,EAAQ1E,KAAKo6e,OAAO72e,OAAOmgf,WAAW,UAC1Cb,EAAUjF,gBAAgB+F,UAAYj/e,EACtCm+e,EAAUjF,gBAAgBgG,WAAWD,UAAYj/e,IAQ7D4me,EAAejwe,UAAUwof,cAAgB,SAAUC,GAC/C,OAAI9jf,KAAKo6e,OACEp6e,KAAKo6e,OAAO72e,OAAOsgf,cAAcC,OAQhDxY,EAAejwe,UAAU0of,UAAY,SAAUD,GAC3C,OAAI9jf,KAAKo6e,OACEp6e,KAAKo6e,OAAO72e,OAAOwgf,UAAUD,OAS5CxY,EAAejwe,UAAU2of,WAAa,SAAUC,GAC5C,OAAQA,GACJ,IAAK,YACDjkf,KAAKs+e,sBACL,MACJ,IAAK,QACDt+e,KAAKm+e,kBACL,MACJ,IAAK,WACDn+e,KAAKu+e,qBACL,MACJ,IAAK,kBACDv+e,KAAKo+e,4BACL,MACJ,IAAK,YACDp+e,KAAK89e,sBACL,MACJ,IAAK,OACD99e,KAAK2+e,iBACL,MACJ,IAAK,SACD3+e,KAAKy+e,mBACL,MACJ,IAAK,QACDz+e,KAAKq+e,kBACL,MACJ,IAAK,YACDr+e,KAAK29e,sBACL,MACJ,IAAK,OACD39e,KAAK+9e,iBACL,MACJ,IAAK,kBACD/9e,KAAK4+e,4BACL,MACJ,IAAK,oBACD5+e,KAAK6+e,8BACL,MACJ,IAAK,eACD7+e,KAAKk+e,2BAOjB5S,EAAejwe,UAAU6of,gBAAkB,WAClCzmf,EAAkBuC,KAAKs7e,oBAAuB79e,EAAkBuC,KAAKo6e,SACtEp6e,KAAKs7e,kBAAkBE,qBAAoB,IAMnDlQ,EAAejwe,UAAUiX,QAAU,WAC/B64E,EAAO9vF,UAAUiX,QAAQhR,KAAKtB,MAC9BA,KAAKmkf,0BACA1mf,EAAkBuC,KAAKo6e,SACxBp6e,KAAKo6e,OAAO9ne,UAEhBtS,KAAKo6e,YAASj/e,EACTsC,EAAkBuC,KAAKgB,WACxBhB,KAAKgB,QAAQ8C,UAAUS,OAAO,oBAC9BvE,KAAKgB,QAAQgB,UAAY,IAE7BhC,KAAKgB,aAAU7F,EACf6E,KAAK4re,mBACL5re,KAAK4re,qBAAkBzwe,GAE3Bmwe,EAAejwe,UAAU8of,wBAA0B,WAC3Cnkf,KAAKqif,cACLrif,KAAKqif,YAAY/ve,UACjBtS,KAAKqif,iBAAclnf,GAEnB6E,KAAKsif,mBACLtif,KAAKsif,iBAAiBhwe,UACtBtS,KAAKsif,sBAAmBnnf,GAExB6E,KAAKs7e,oBACLt7e,KAAKs7e,kBAAkBhpe,UACvBtS,KAAKs7e,uBAAoBngf,GAExBsC,EAAkBuC,KAAK+7e,yBACxB/7e,KAAK+7e,sBAAsBzpe,UAC3BtS,KAAK+7e,2BAAwB5gf,GAE7B6E,KAAKokf,eACLpkf,KAAKokf,aAAa9xe,UAClBtS,KAAKokf,kBAAejpf,GAEpB6E,KAAK46e,oBACL56e,KAAK46e,kBAAkBtoe,UACvBtS,KAAK46e,uBAAoBz/e,GAEzB6E,KAAK06e,eACL16e,KAAK06e,aAAapoe,UAClBtS,KAAK06e,kBAAev/e,GAEpB6E,KAAKmtU,kBACLntU,KAAKmtU,gBAAgB76T,UACrBtS,KAAKmtU,qBAAkBhyU,GAEvB6E,KAAK26e,sBACL36e,KAAK26e,oBAAoBroe,UACzBtS,KAAK26e,yBAAsBx/e,GAE1BsC,EAAkBuC,KAAKkse,yBACxBlse,KAAKkse,sBAAsB55d,UAC3BtS,KAAKkse,2BAAwB/we,GAE7B6E,KAAK27e,wBACL37e,KAAK27e,sBAAsBrpe,UAC3BtS,KAAK27e,2BAAwBxgf,GAE7B6E,KAAK67e,mBACL77e,KAAK67e,iBAAiBvpe,UACtBtS,KAAK67e,sBAAmB1gf,GAExB6E,KAAKk8e,mBACLl8e,KAAKk8e,iBAAiB5pe,UACtBtS,KAAKk8e,sBAAmB/gf,GAExB6E,KAAKmse,qBACLnse,KAAKmse,mBAAmB75d,UACxBtS,KAAKmse,wBAAqBhxe,GAE1B6E,KAAK8re,8BACL9re,KAAK8re,4BAA4Bx5d,UACjCtS,KAAK8re,iCAA8B3we,GAEnC6E,KAAK+re,gCACL/re,KAAK+re,8BAA8Bz5d,UACnCtS,KAAK+re,mCAAgC5we,GAErC6E,KAAKgse,0BACLhse,KAAKgse,wBAAwB15d,UAC7BtS,KAAKgse,6BAA0B7we,GAE/B6E,KAAKise,2BACLjse,KAAKise,yBAAyB35d,UAC9BtS,KAAKise,8BAA2B9we,GAEhC6E,KAAKw8e,oBACLx8e,KAAKw8e,kBAAkBlqe,UACvBtS,KAAKw8e,uBAAoBrhf,GAEzB6E,KAAK08e,oBACL18e,KAAK08e,uBAAoBvhf,GAEzB6E,KAAKw+e,uBACLx+e,KAAKw+e,qBAAqBlse,UAC1BtS,KAAKw+e,0BAAuBrjf,GAE5B6E,KAAK08e,oBACL18e,KAAK08e,kBAAkBpqe,UACvBtS,KAAK08e,uBAAoBvhf,GAEzB6E,KAAKwif,mBACLxif,KAAKwif,iBAAiBlwe,UACtBtS,KAAKwif,sBAAmBrnf,GAExB6E,KAAKuif,mBACLvif,KAAKuif,iBAAiBjwe,UACtBtS,KAAKuif,sBAAmBpnf,GAExB6E,KAAK48e,8BACL58e,KAAK48e,4BAA4Btqe,UACjCtS,KAAK48e,iCAA8Bzhf,IAG3C0vF,IACI3jF,EAAS,IACVoke,EAAejwe,UAAW,kBAAc,GAC3CwvF,IACI3jF,GAAS,IACVoke,EAAejwe,UAAW,kBAAc,GAC3CwvF,IACI3jF,GAAS,IACVoke,EAAejwe,UAAW,mBAAe,GAC5CwvF,IACI3jF,GAAS,IACVoke,EAAejwe,UAAW,uBAAmB,GAChDwvF,IACI3jF,GAAS,IACVoke,EAAejwe,UAAW,oBAAgB,GAC7CwvF,IACI3jF,GAAS,IACVoke,EAAejwe,UAAW,2BAAuB,GACpDwvF,IACI3jF,GAAS,IACVoke,EAAejwe,UAAW,wBAAoB,GACjDwvF,IACI3jF,GAAS,IACVoke,EAAejwe,UAAW,wBAAoB,GACjDwvF,IACI3jF,GAAS,IACVoke,EAAejwe,UAAW,wBAAoB,GACjDwvF,IACI3jF,GAAS,IACVoke,EAAejwe,UAAW,yBAAqB,GAClDwvF,IACI3jF,GAAS,IACVoke,EAAejwe,UAAW,yBAAqB,GAClDwvF,IACI3jF,GAAS,IACVoke,EAAejwe,UAAW,6BAAyB,GACtDwvF,IACI3jF,GAAS,IACVoke,EAAejwe,UAAW,4BAAwB,GACrDwvF,IACI3jF,GAAS,IACVoke,EAAejwe,UAAW,mCAA+B,GAC5DwvF,IACI3jF,GAAS,IACVoke,EAAejwe,UAAW,oBAAgB,GAC7CwvF,IACI3jF,GAAS,IACVoke,EAAejwe,UAAW,6BAAyB,GACtDwvF,IACI3jF,GAAS,IACVoke,EAAejwe,UAAW,wBAAoB,GACjDwvF,IACI3jF,GAAS,IACVoke,EAAejwe,UAAW,mCAA+B,GAC5DwvF,IACI3jF,GAAS,IACVoke,EAAejwe,UAAW,qCAAiC,GAC9DwvF,IACI3jF,GAAS,IACVoke,EAAejwe,UAAW,6BAAyB,GACtDwvF,IACI3jF,GAAS,IACVoke,EAAejwe,UAAW,yBAAqB,GAClDwvF,IACI3jF,GAAS,IACVoke,EAAejwe,UAAW,wBAAoB,GACjDwvF,IACI3jF,GAAS,IACVoke,EAAejwe,UAAW,gCAA4B,GACzDwvF,IACI3jF,GAAS,IACVoke,EAAejwe,UAAW,yBAAqB,GAClDwvF,IACI3jF,GAAS,IACVoke,EAAejwe,UAAW,0BAAsB,GACnDwvF,IACI/hF,KACDwie,EAAejwe,UAAW,sBAAkB,GAC/CwvF,IACI/hF,KACDwie,EAAejwe,UAAW,kBAAc,GAC3CwvF,IACI/hF,KACDwie,EAAejwe,UAAW,wBAAoB,GACjDwvF,IACI/hF,KACDwie,EAAejwe,UAAW,uBAAmB,GAChDwvF,IACI/hF,KACDwie,EAAejwe,UAAW,uBAAmB,GAChDwvF,IACI/hF,KACDwie,EAAejwe,UAAW,qBAAiB,GAC9Ciwe,EAAiBiP,EAAmB1vZ,IAChCzhF,GACDkie,GAEH,IAAIiP,GACNhvY,IC75CEm1Y,GAAuB,WACvB,SAASA,KA8GT,OAzGAA,EAAMrlf,UAAUkkC,cAAgB,WAC5B,MAAO,SAQXmhd,EAAMrlf,UAAU0F,MAAQ,SAAUq5e,EAAQn5e,GACtCjB,KAAKiB,YAAYm5e,EAAQjxZ,UAAUF,UAAWhoF,IAMlDy/e,EAAMrlf,UAAU4F,YAAc,SAAUm5e,EAAQiK,EAAkBpjf,GAC9D,IAAI8U,EAAS/V,KAAKskf,cAAclK,EAAOlvQ,OACnCl1N,EAAQhW,KAAKukf,aAAanK,EAAOlvQ,OACjCs5Q,EAAehkf,SAASW,cAAc,OAC1Cqjf,EAAa9/e,MAAMsR,MAAQ,OAC3Bwue,EAAa9/e,MAAMqR,OAAS,OAC5Byue,EAAa9/e,MAAMmV,SAAW,SAE9B7Z,KAAKykf,qBAAqBrK,EAAQoK,GAC9B/mf,EAAkBwD,KAClBA,EAAcpF,OAAO6F,KAAK,GAAI,QAAS,qCAEE,IAAxC2if,EAAiB9lf,QAAQ,YAAgE,IAA1C8lf,EAAiB9lf,QAAQ,YAEzE0C,EAAYT,SAASuB,MAAM,mBAE3Bd,EAAYT,SAASuB,MAAM,uOAAyOiU,EAAM9I,WAAa,MAAQ6I,EAAO7I,WAAa,2EAKnTjM,EAAYT,SAASuB,MAAM,0CAA4CiU,EAAM9I,WAAa,MAAQ6I,EAAO7I,WAAa,qCAG1HjM,EAAYT,SAASuB,MAAMyif,EAAaxif,UAAY,uFACpDwif,OAAerpf,EACf8F,EAAYT,SAASyB,QACrBhB,EAAYiB,QACZ,IAAIC,EAAWC,YAAY,WACnBnB,EAAYoB,QACZpB,EAAYF,QACZE,EAAYgB,QACZK,cAAcH,KAEnB,MAMPu+e,EAAMrlf,UAAUopf,qBAAuB,SAAUrK,EAAQp5e,GAGrD,IAAK,IADD0jf,EAAa,GACRvof,EAAI,EAAGA,EAAIi+e,EAAOlvQ,MAAMzuO,OAAQN,IAAK,CAC1C,IAAI8zJ,EAAOmqV,EAAOlvQ,MAAM/uO,GACpBmjP,EAAarvF,EAAK00V,kBAAkB5ue,OACpC2lR,EAAYzrI,EAAK00V,kBAAkB3ue,MACvCoke,EAAOruY,OAAO64Y,YAAa,EAC3BxK,EAAOruY,OAAO84Y,cAAc50V,EAAM,EAAG,EAAG,EAAG,GAC3C,IAAI60V,EAAY1K,EAAOruY,OAAOg5Y,WAAWh3Z,YACzCqsZ,EAAOruY,OAAO64Y,YAAa,EAE3BF,GAAc,iBAAmBI,EAAY,2CAA6CppN,EAAUxuR,WAAa,cAAgBoyO,EAAWpyO,WAAa,qBAE7JlM,EAAQgB,UAAY0if,GAOxBhE,EAAMrlf,UAAUkpf,aAAe,SAAUr5Q,GAErC,IAAK,IADDl1N,EAAQ,EACH7Z,EAAI,EAAGA,EAAI+uO,EAAMzuO,OAAQN,IAC1B6Z,EAAQk1N,EAAM/uO,GAAGwof,kBAAkB3ue,QACnCA,EAAQk1N,EAAM/uO,GAAGwof,kBAAkB3ue,OAG3C,OAAOA,GAMX0qe,EAAMrlf,UAAUipf,cAAgB,SAAUp5Q,GAEtC,IAAK,IADDn1N,EAAS,EACJ5Z,EAAI,EAAGA,EAAI+uO,EAAMzuO,OAAQN,IAC1B4Z,EAASm1N,EAAM/uO,GAAGwof,kBAAkB5ue,SACpCA,EAASm1N,EAAM/uO,GAAGwof,kBAAkB5ue,QAG5C,OAAOA,GAKX2qe,EAAMrlf,UAAUiX,QAAU,aAGnBoue,KC5GPkC,GAAgC,WAChC,SAASA,EAAerif,GACpBP,KAAKglf,yBAAsB7pf,EAC3B6E,KAAKilf,UAAY1kf,EAkPrB,OAhPAjC,OAAOuJ,eAAe+6e,EAAevnf,UAAW,kBAC5CqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,mBAEjC/F,IAAK,SAAUrK,GACXgD,KAAKg3H,iBAAiB,iBAAkBh6H,IAE5C2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe+6e,EAAevnf,UAAW,kBAC5CqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,mBAEjC/F,IAAK,SAAUrK,GACXgD,KAAKg3H,iBAAiB,iBAAkBh6H,IAE5C2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe+6e,EAAevnf,UAAW,sBAC5CqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,uBAEjC/F,IAAK,SAAUrK,GACXgD,KAAKg3H,iBAAiB,qBAAsBh6H,IAEhD2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe+6e,EAAevnf,UAAW,4BAC5CqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,6BAEjC/F,IAAK,SAAUrK,GACXgD,KAAKg3H,iBAAiB,2BAA4Bh6H,IAEtD2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe+6e,EAAevnf,UAAW,cAC5CqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,eAEjC/F,IAAK,SAAUrK,GACXgD,KAAKg3H,iBAAiB,aAAch6H,IAExC2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe+6e,EAAevnf,UAAW,eAC5CqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,gBAEjC/F,IAAK,SAAUrK,GACXgD,KAAKg3H,iBAAiB,cAAeh6H,IAEzC2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe+6e,EAAevnf,UAAW,aAC5CqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,cAEjC/F,IAAK,SAAUrK,GACXgD,KAAKg3H,iBAAiB,YAAah6H,IAEvC2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe+6e,EAAevnf,UAAW,cAC5CqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,eAEjC/F,IAAK,SAAUrK,GACXgD,KAAKg3H,iBAAiB,aAAch6H,IAExC2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe+6e,EAAevnf,UAAW,gBAC5CqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,iBAEjC/F,IAAK,SAAUrK,GACXgD,KAAKg3H,iBAAiB,eAAgBh6H,IAE1C2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe+6e,EAAevnf,UAAW,aAC5CqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,cAEjC/F,IAAK,SAAUrK,GACXgD,KAAKg3H,iBAAiB,YAAah6H,IAEvC2K,YAAY,EACZC,cAAc,IAElBg7e,EAAevnf,UAAUiX,QAAU,WAC1B7U,EAAkBuC,KAAKglf,sBACxBpC,EAAesC,qBAAqB3gf,OAAOvE,KAAKglf,qBAEpDhlf,KAAKglf,yBAAsB7pf,GAE/Bynf,EAAevnf,UAAU8pf,SAAW,SAAUn5d,GAC1C,IAAKvuB,EAAkBuC,KAAKglf,qBAAsB,CAC9C,IAAI17e,EAAey/d,GAAcmB,gBAAgBlqe,KAAKglf,oBAAoB/b,iBAAkBj9c,GAC5F,OAAOhsB,KAAKglf,oBAAoB9b,eAAeziQ,YAAYn9N,GAE/D,OAAO,GAEXs5e,EAAewC,wBAA0B,SAAUp5d,GAC/C,IAAIhvB,OAAQ7B,EACZ,OAAQ6wB,GACJ,IAAK,iBAGL,IAAK,iBACDhvB,EAAQ,GACR,MACJ,IAAK,qBAGL,IAAK,2BACDA,GAAQ,EACR,MACJ,IAAK,YACDA,EAAQ,IACR,MACJ,IAAK,aACDA,EAAQ,IACR,MACJ,IAAK,aAGL,IAAK,YAGL,IAAK,cAGL,IAAK,eACDA,EAAQ,GAGhB,OAAOA,GAEX4lf,EAAevnf,UAAU+R,iBAAmB,SAAU4e,GAElD,GADehsB,KAAKmlf,SAASn5d,GACf,CACV,IAAI1iB,EAAey/d,GAAcmB,gBAAgB0Y,EAAe3Z,iBAAkBj9c,GAClF,IAAKvuB,EAAkBuC,KAAKglf,sBAAwBhlf,KAAKglf,oBAAoB9b,eAAeziQ,YAAYn9N,GACpG,OAAOtJ,KAAKglf,oBAAoB9b,eAAexhe,IAAI4B,GAG3D,OAAOs5e,EAAewC,wBAAwBp5d,IAElD42d,EAAevnf,UAAU27H,iBAAmB,SAAUhrG,EAAUhvB,GAI5D,IAHIS,EAAkBT,IAAoB,KAAVA,KAC5BA,EAAQ4lf,EAAewC,wBAAwBp5d,IAE/CvuB,EAAkBuC,KAAKglf,qBACvBhlf,KAAKqlf,8BAA8Br5d,EAAUhvB,OAE5C,CACD,IAAIsM,EAAey/d,GAAcmB,gBAAgBlqe,KAAKglf,oBAAoB/b,iBAAkBj9c,GAC5F,GAAIhsB,KAAKglf,oBAAoB9b,eAAeziQ,YAAYn9N,IACpDtJ,KAAKglf,oBAAoB9b,eAAexhe,IAAI4B,KAAkBtM,EAE9D,OAGJgD,KAAKglf,oBAAsBpC,EAAesC,qBAAqB9Z,mBAAmBpre,KAAKglf,oBAAqBh5d,EAAUhvB,KAG9H4lf,EAAevnf,UAAUgqf,8BAAgC,SAAUr5d,EAAUkyG,GACzE,IAAIonX,EAA0B,IAAI3/Q,GAClC3lO,KAAKulf,uBAAuB,iBAAkBv5d,EAAUkyG,EAAWonX,GACnEtlf,KAAKulf,uBAAuB,iBAAkBv5d,EAAUkyG,EAAWonX,GACnEtlf,KAAKulf,uBAAuB,qBAAsBv5d,EAAUkyG,EAAWonX,GACvEtlf,KAAKulf,uBAAuB,2BAA4Bv5d,EAAUkyG,EAAWonX,GAC7Etlf,KAAKulf,uBAAuB,YAAav5d,EAAUkyG,EAAWonX,GAC9Dtlf,KAAKulf,uBAAuB,aAAcv5d,EAAUkyG,EAAWonX,GAC/Dtlf,KAAKulf,uBAAuB,aAAcv5d,EAAUkyG,EAAWonX,GAC/Dtlf,KAAKulf,uBAAuB,YAAav5d,EAAUkyG,EAAWonX,GAC9Dtlf,KAAKulf,uBAAuB,cAAev5d,EAAUkyG,EAAWonX,GAChEtlf,KAAKulf,uBAAuB,eAAgBv5d,EAAUkyG,EAAWonX,GAEjEtlf,KAAKglf,oBAAsBpC,EAAesC,qBAAqBha,gBAAgBoa,EAAyB1C,EAAe3Z,mBAG3H2Z,EAAevnf,UAAUkqf,uBAAyB,SAAUv5d,EAAUg+c,EAAkB9rW,EAAWonX,GAC/F,IAAIh8e,EACJA,EAAey/d,GAAcmB,gBAAgB0Y,EAAe3Z,iBAAkBj9c,GAC1EA,IAAag+c,EACbsb,EAAwBlhf,IAAIkF,EAAc40H,GAG1ConX,EAAwBlhf,IAAIkF,EAAcs5e,EAAewC,wBAAwBp5d,KAGzF42d,EAAevnf,UAAUmqf,WAAa,SAAUxpd,EAAQ6wE,GAChDA,IAAYA,EAAQ44Y,WAAa54Y,EAAQ64Y,WACzC1lf,KAAKglf,oBAAsBhpd,EAAOgpd,oBAG7Bvnf,EAAkBu+B,KACdv+B,EAAkBu+B,EAAOgpd,sBAAwBhpd,EAAOgpd,oBAAoB9b,gBAC7Elpe,KAAK2lf,0BAA0B3pd,IAK/C4md,EAAevnf,UAAUsqf,0BAA4B,SAAU3pd,GAC3D,IAAI8wE,OAAO3xG,EACP6E,KAAKglf,sBACLl4Y,EAAO9sG,KAAKglf,oBAAoBja,gBAAgB/uc,EAAOgpd,qBACP,IAA5Chlf,KAAKglf,oBAAoBhc,iBACzB4Z,EAAesC,qBAAqB3gf,OAAOvE,KAAKglf,qBAChDhlf,KAAKglf,yBAAsB7pf,IAGnC6E,KAAKglf,oBAAsB,IAAIjc,GAAc6Z,EAAe3Z,kBACxDxre,EAAkBqvG,KAClBA,EAAO9sG,KAAKglf,oBAAoBja,gBAAgB/uc,EAAOgpd,sBAE3Dhlf,KAAKglf,oBAAsBpC,EAAesC,qBAAqBha,gBAAgBp+X,EAAM81Y,EAAe3Z,mBAExG2Z,EAAevnf,UAAUuqf,YAAc,WACnC,IAAI5pd,EAAS,IAAI4md,EAEjB,OADA5md,EAAOgpd,oBAAsBhlf,KAAKglf,oBAC3Bhpd,GAEX4md,EAAe5yb,MAAQ,WACnBhwD,KAAKklf,qBAAqBl1b,SAE9B4yb,EAAesC,qBAAuB,IAAIja,GAC1C2X,EAAe3Z,iBAAmB,GAC3B2Z,KCxPPiD,GAAgC,WAChC,SAASA,KAUT,OARAA,EAAexqf,UAAUiX,QAAU,WAC1B7U,EAAkBuC,KAAK8lf,oBACxB9lf,KAAK8lf,kBAAkBxze,UAE3BtS,KAAK+lf,iBAAc5qf,EACnB6E,KAAKgmf,aAAU7qf,EACf6E,KAAK8lf,uBAAoB3qf,GAEtB0qf,KCVPI,GAAuB,WACvB,SAASA,IACLjmf,KAAKkmf,QAAU,EACflmf,KAAKmmf,cAAgB,EACrBnmf,KAAKomf,gBAAkB,EACvBpmf,KAAKqmf,kBAAelrf,EACpB6E,KAAKsmf,kBA+CT,OA7CAL,EAAM5qf,UAAUkrf,aAAe,SAAUR,GACrC,IACIS,EAAgBxmf,KAAKymf,iBAAiBV,GAO1C,OANKtof,EAAkB+of,IAAmB/of,EAAkB+of,EAAcV,mBAI1D9lf,KAAKqmf,aAAajna,OAAO2ma,GAHzBS,EAAcV,mBAOlCG,EAAM5qf,UAAUorf,iBAAmB,SAAUV,GACzC,IAAK,IAAI5pf,EAAI,EAAGA,EAAI6D,KAAKsmf,eAAe7pf,OAAQN,IAC5C,GAAI6D,KAAKsmf,eAAenqf,aAAc0pf,GAAgB,CAClD,IAAIW,EAAgBxmf,KAAKsmf,eAAenqf,GACxC,GAAIqqf,EAAcT,cAAgBA,EAC9B,OAAOS,IAMvBP,EAAM5qf,UAAUiX,QAAU,WACjB7U,EAAkBuC,KAAKsmf,kBACxBtmf,KAAKsmf,mBAETtmf,KAAKomf,oBAAiBjrf,EACtB6E,KAAKkmf,YAAS/qf,EACd6E,KAAKmmf,kBAAehrf,EACpB6E,KAAKsmf,oBAAiBnrf,GAE1B8qf,EAAM5qf,UAAUqrf,UAAY,SAAU7jZ,GAC7BplG,EAAkBuC,KAAKomf,kBAA4C,IAAzBpmf,KAAKomf,iBAChDpmf,KAAKomf,eAAiBvjZ,EAAKujZ,gBAE1B3of,EAAkBuC,KAAKkmf,UAA4B,IAAjBlmf,KAAKkmf,SACxClmf,KAAKkmf,OAASrjZ,EAAKqjZ,QAElBzof,EAAkBuC,KAAKmmf,gBAAwC,IAAvBnmf,KAAKmmf,eAC9Cnmf,KAAKmmf,aAAetjZ,EAAKsjZ,cAExB1of,EAAkBuC,KAAKsmf,iBAAkD,IAA/Btmf,KAAKsmf,eAAe7pf,SAC/DuD,KAAKsmf,eAAiBzjZ,EAAKyjZ,iBAG5BL,KCjDPU,GAA6B,WAC7B,SAASA,EAAYpmf,GACjBP,KAAK4mf,sBAAmBzrf,EACxB6E,KAAKilf,eAAY9pf,EACjB6E,KAAK2jf,eAAYxof,EACjB6E,KAAK6iG,UAAO1nG,EACZ6E,KAAKilf,UAAY1kf,EAsLrB,OApLAjC,OAAOuJ,eAAe8+e,EAAYtrf,UAAW,UACzCqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,WAEjC/F,IAAK,SAAU6+e,GACXlmf,KAAKg3H,iBAAiB,SAAUkvX,IAEpCv+e,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe8+e,EAAYtrf,UAAW,mBACzCqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,oBAEjC/F,IAAK,SAAUrK,GACXgD,KAAKg3H,iBAAiB,kBAAmBh6H,IAE7C2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe8+e,EAAYtrf,UAAW,aACzCqM,IAAK,WACD,IAAIm7F,OAAO1nG,EACX,GAAKsC,EAAkBuC,KAAK6iG,MAMxB,IADA,IAAIgkZ,EAAgB7mf,KAAK2jf,WACjBlmf,EAAkBopf,IAAgB,CACtC,GAAIA,EAAcjJ,gBAAgBgG,WAAW/gZ,KAAM,CAC/CA,EAAOgkZ,EAAcjJ,gBAAgBgG,WAAW/gZ,KAChD,MAGAgkZ,EAAgBA,EAAcC,aAXtCjkZ,EAAO7iG,KAAK6iG,KAehB,OAAKplG,EAAkBolG,QAInB,EAHOA,EAAK0jZ,aAAavmf,KAAK+mf,kBAMtCp/e,YAAY,EACZC,cAAc,IAElB++e,EAAYtrf,UAAU+R,iBAAmB,SAAU4e,GAC/C,GAAKhsB,KAAKmlf,SAASn5d,GAkBd,CACG1iB,EAAey/d,GAAcmB,gBAAgByc,EAAY1d,iBAAkBj9c,GAC/E,IAAKvuB,EAAkBuC,KAAK4mf,mBAAqB5mf,KAAK4mf,iBAAiB1d,eAAeziQ,YAAYn9N,GAC9F,OAAOtJ,KAAK4mf,iBAAiB1d,eAAexhe,IAAI4B,QApBpD,GAAItJ,KAAK2jf,qBAAqBqD,GAAiB,CAG3C,IADA,IAAIrD,EAAY3jf,KAAK2jf,WACblmf,EAAkBkmf,KAClBA,EAAU/F,gBAAgBgG,WAAWuB,SAASn5d,IAI9C23d,EAAYA,EAAUmD,QAG9B,IAAKrpf,EAAkBkmf,GAAY,CAC/B,IAAIr6e,EAAey/d,GAAcmB,gBAAgByc,EAAY1d,iBAAkBj9c,GAC/E,OAAO23d,EAAU/F,gBAAgBgG,WAAWgD,iBAAiB1d,eAAexhe,IAAI4B,IAU5F,OAAOq9e,EAAYvB,wBAAwBp5d,IAE/C26d,EAAYtrf,UAAU27H,iBAAmB,SAAUhrG,EAAUhvB,GAIzD,IAHIS,EAAkBT,IAAoB,KAAVA,KAC5BA,EAAQ2pf,EAAYvB,wBAAwBp5d,IAE5CvuB,EAAkBuC,KAAK4mf,kBACvB5mf,KAAKinf,2BAA2Bj7d,EAAUhvB,OAEzC,CACD,IAAIsM,EAAey/d,GAAcmB,gBAAgBlqe,KAAK4mf,iBAAiB3d,iBAAkBj9c,GACzF,GAAIhsB,KAAK4mf,iBAAiB1d,eAAeziQ,YAAYn9N,IACjDtJ,KAAK4mf,iBAAiB1d,eAAexhe,IAAI4B,KAAkBtM,EAE3D,OAEJgD,KAAK4mf,iBAAmBD,EAAYO,kBAAkB9b,mBAAmBpre,KAAK4mf,iBAAkB56d,EAAUhvB,KAGlH2pf,EAAYtrf,UAAU4rf,2BAA6B,SAAUj7d,EAAUkyG,GACnE,IAAIipX,EAAuB,IAAIxhR,GAC/B3lO,KAAKonf,oBAAoB,SAAUp7d,EAAUkyG,EAAWipX,GACxDnnf,KAAKonf,oBAAoB,kBAAmBp7d,EAAUkyG,EAAWipX,GACjEnnf,KAAK4mf,iBAAmBD,EAAYO,kBAAkBhc,gBAAgBic,EAAsBR,EAAY1d,mBAG5G0d,EAAYtrf,UAAU+rf,oBAAsB,SAAUp7d,EAAUg+c,EAAkB9rW,EAAWipX,GACzF,IAAI79e,EACJA,EAAey/d,GAAcmB,gBAAgByc,EAAY1d,iBAAkBj9c,GACvEA,IAAag+c,GACbmd,EAAqB/if,IAAIkF,EAAc40H,IAG/CyoX,EAAYvB,wBAA0B,SAAUp5d,GAC5C,IAAIhvB,OAAQ7B,EACZ,OAAQ6wB,GACJ,IAAK,SACDhvB,GAAS,EACT,MACJ,IAAK,kBACDA,EAAQ,EAGhB,OAAOA,GAEX2pf,EAAYtrf,UAAUmqf,WAAa,SAAUxpd,GACpCv+B,EAAkBu+B,KACdv+B,EAAkBu+B,EAAO4qd,oBAC1B5mf,KAAKkmf,OAASlqd,EAAOkqd,OACrBlmf,KAAK+mf,gBAAkB/qd,EAAO+qd,iBAE7Btpf,EAAkBu+B,EAAO6mE,QAC1B7iG,KAAK6iG,KAAO7mE,EAAO6mE,QAI/B8jZ,EAAYtrf,UAAU8pf,SAAW,SAAUn5d,GACvC,IAAKvuB,EAAkBuC,KAAK4mf,kBAAmB,CAC3C,IAAIt9e,EAAey/d,GAAcmB,gBAAgBlqe,KAAK4mf,iBAAiB3d,iBAAkBj9c,GACzF,OAAOhsB,KAAK4mf,iBAAiB1d,eAAeziQ,YAAYn9N,GAE5D,OAAO,GAEXq9e,EAAYtrf,UAAUgsf,YAAc,WAC3B5pf,EAAkBuC,KAAK4mf,mBAA8D,IAAzC5mf,KAAK4mf,iBAAiB5d,gBACnE2d,EAAYO,kBAAkB3if,OAAOvE,KAAK4mf,kBAE9C5mf,KAAK4mf,sBAAmBzrf,EACxB6E,KAAK6iG,UAAO1nG,GAEhBwrf,EAAYtrf,UAAUiX,QAAU,WAC5BtS,KAAKqnf,eAETV,EAAY32b,MAAQ,WAChBhwD,KAAKknf,kBAAkBl3b,SAE3B22b,EAAYtrf,UAAUisf,WAAa,SAAU3D,GACzC3jf,KAAK2jf,UAAYA,GAMrBgD,EAAYtrf,UAAUwB,SAAW,SAAUmvB,GACvC,OAAOhsB,KAAKmlf,SAASn5d,GAAYhsB,KAAKoN,iBAAiB4e,QAAY7wB,GAMvEwrf,EAAYtrf,UAAUksf,YAAc,SAAUvrd,GACtCv+B,EAAkBuC,KAAKnD,SAAS,aAChCmD,KAAKkmf,OAASlqd,EAAOn/B,SAAS,WAE9BY,EAAkBuC,KAAKnD,SAAS,sBAChCmD,KAAK+mf,gBAAkB/qd,EAAOn/B,SAAS,oBAEtCY,EAAkBu+B,EAAO6mE,QACtBplG,EAAkBuC,KAAK6iG,QACvB7iG,KAAK6iG,KAAO,IAAIojZ,IAEpBjmf,KAAK6iG,KAAK6jZ,UAAU1qd,EAAO6mE,QAGnC8jZ,EAAYO,kBAAoB,IAAIjc,GACpC0b,EAAY1d,iBAAmB,EACxB0d,KC5LPa,GAA0B,WAC1B,SAASA,KAgDT,OA9CAlpf,OAAOuJ,eAAe2/e,EAASnsf,UAAW,YACtCqM,IAAK,WACD,OAAO1H,KAAKynf,YAEhBpgf,IAAK,SAAUrK,GACXgD,KAAKynf,WAAazqf,GAEtB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe2/e,EAASnsf,UAAW,kBACtCqM,IAAK,WACD,OAAO1H,KAAK0nf,kBAEhBrgf,IAAK,SAAUrK,GACXgD,KAAK0nf,iBAAmB1qf,GAE5B2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe2/e,EAASnsf,UAAW,oBACtCqM,IAAK,WACD,OAAO1H,KAAK2nf,eAEhBtgf,IAAK,SAAUrK,GACXgD,KAAK2nf,cAAgB3qf,GAEzB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe2/e,EAASnsf,UAAW,aACtCqM,IAAK,WACD,OAAO1H,KAAK4nf,QAEhBvgf,IAAK,SAAUrK,GACXgD,KAAK4nf,OAAS5qf,GAElB2K,YAAY,EACZC,cAAc,IAElB4/e,EAASnsf,UAAUiX,QAAU,WACzBtS,KAAKkU,cAAW/Y,EAChB6E,KAAK6nf,oBAAiB1sf,EACtB6E,KAAK8nf,sBAAmB3sf,EACxB6E,KAAK4nf,YAASzsf,GAEXqsf,KAMPzE,GAAkC,WAClC,SAASA,EAAiBxif,GACtBP,KAAK+nf,2BAAwB5sf,EAC7B6E,KAAKilf,eAAY9pf,EACjB6E,KAAK2jf,eAAYxof,EACjB6E,KAAKgof,UAAO7sf,EACZ6E,KAAKilf,UAAY1kf,EACjBP,KAAK4jf,WAAa,IAAI+C,GAAY3mf,MAClCA,KAAKgof,QA8YT,OA5YAjF,EAAiB1nf,UAAU4sf,eAAiB,WACxC,IAAIC,KACJ,IAAKzqf,EAAkBuC,KAAK2jf,WAAY,CAIpC,IAFA,IAAIA,EAAY3jf,KAAK2jf,UACjBwE,EAAW,IAAIxiR,IACXloO,EAAkBkmf,IAAY,CAClC,IAAK,IAAIvlf,EAAK,EAAGyE,EAAK8gf,EAAU/F,gBAAgBoK,KAAM5pf,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACxE,IAAI01G,EAAMjxG,EAAGzE,GACR+pf,EAAS1hR,YAAY3yH,EAAI5/F,WAC1Bi0e,EAAS/jf,IAAI0vG,EAAI5/F,SAAU4/F,GAGnC6vY,EAAYA,EAAUmD,QAE1B,IAAK,IAAI7if,EAAK,EAAGwG,EAAK09e,EAAS7qf,KAAM2G,EAAKwG,EAAGhO,OAAQwH,IAAM,CACvD,IAAI5G,EAAMoN,EAAGxG,GACRjE,KAAKoof,WAAW/qf,IACjB6qf,EAAO1jf,KAAK2jf,EAASzgf,IAAIrK,IAIjC6qf,GADAA,EAASA,EAAO3te,OAAOva,KAAKgof,KAAKhhd,OAAO,SAAUmc,GAAK,OAAuB,IAAfA,EAAEjvC,UAAuC,IAArBivC,EAAE0kc,mBACrEhwd,KAAK,SAAUsrB,EAAGrmB,GAAK,OAAOqmB,EAAEjvC,SAAW4oB,EAAE5oB,WAEjE,OAAOg0e,GAEXnF,EAAiB1nf,UAAU+sf,WAAa,SAAUl0e,GAC9C,IAAK,IAAI/X,EAAI,EAAGA,EAAI6D,KAAKgof,KAAKvrf,OAAQN,IAClC,GAAI6D,KAAKgof,KAAK7rf,GAAG0rf,iBAAmB3ze,EAChC,OAAO,EAGf,OAAO,GAEX5V,OAAOuJ,eAAek7e,EAAiB1nf,UAAW,cAC9CqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,eAEjC/F,IAAK,SAAUrK,GACXgD,KAAKg3H,iBAAiB,aAAch6H,IAExC2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAek7e,EAAiB1nf,UAAW,eAC9CqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,gBAEjC/F,IAAK,SAAUrK,GACXgD,KAAKg3H,iBAAiB,cAAeh6H,IAEzC2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAek7e,EAAiB1nf,UAAW,mBAC9CqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,oBAEjC/F,IAAK,SAAUrK,GACXgD,KAAKg3H,iBAAiB,kBAAmBh6H,IAE7C2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAek7e,EAAiB1nf,UAAW,iBAC9CqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,kBAEjC/F,IAAK,SAAUrK,GACXgD,KAAKg3H,iBAAiB,gBAAiBh6H,IAE3C2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAek7e,EAAiB1nf,UAAW,gBAC9CqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,iBAEjC/F,IAAK,SAAUrK,GACXgD,KAAKg3H,iBAAiB,eAAgBh6H,IAE1C2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAek7e,EAAiB1nf,UAAW,eAC9CqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,gBAEjC/F,IAAK,SAAUrK,GACXgD,KAAKg3H,iBAAiB,cAAeh6H,IAEzC2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAek7e,EAAiB1nf,UAAW,mBAC9CqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,oBAEjC/F,IAAK,SAAUrK,GACXgD,KAAKg3H,iBAAiB,kBAAmBh6H,IAE7C2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAek7e,EAAiB1nf,UAAW,iBAC9CqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,kBAEjC/F,IAAK,SAAUrK,GACXgD,KAAKg3H,iBAAiB,gBAAiBh6H,IAE3C2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAek7e,EAAiB1nf,UAAW,gBAC9CqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,iBAEjC/F,IAAK,SAAUrK,GACXgD,KAAKg3H,iBAAiB,eAAgBh6H,IAE1C2K,YAAY,EACZC,cAAc,IAElBm7e,EAAiB1nf,UAAUgtf,6BAA+B,SAAUr8d,GAChE,GAAIhsB,KAAK4jf,WAAWsC,OAAS,GAAKlmf,KAAK4jf,WAAWmD,iBAAmB,EAAG,CACpE,IAAI50V,EAAQnyJ,KAAK4jf,WAAW0E,UACxBh/e,EAAey/d,GAAcmB,gBAAgB6Y,EAAiB9Z,iBAAkBj9c,GAEpF,OAAKvuB,EAAkB00J,IAAW10J,EAAkB00J,EAAMyrV,gBAAgBmK,yBAA0B51V,EAAMyrV,gBAAgBmK,sBAAsB7e,eAAeziQ,YAAYn9N,QAIvK,EAHO6oJ,EAAMyrV,gBAAgBmK,sBAAsB7e,eAAexhe,IAAI4B,KAQlFy5e,EAAiB1nf,UAAU+R,iBAAmB,SAAU4e,GACpD,GAAKhsB,KAAKmlf,SAASn5d,GAwBd,CACG1iB,EAAey/d,GAAcmB,gBAAgB6Y,EAAiB9Z,iBAAkBj9c,GACpF,IAAKvuB,EAAkBuC,KAAK+nf,wBAA0B/nf,KAAK+nf,sBAAsB7e,eAAeziQ,YAAYn9N,GACxG,OAAOtJ,KAAK+nf,sBAAsB7e,eAAexhe,IAAI4B,OA3B/B,CAC1B,IAAIi/e,EAAevof,KAAKqof,6BAA6Br8d,GACrD,IAAKvuB,EAAkB8qf,GACnB,OAAOA,EAGP,GAAIvof,KAAK2jf,qBAAqBqD,GAAiB,CAG3C,IADA,IAAIrD,EAAY3jf,KAAK2jf,WACblmf,EAAkBkmf,KAClBA,EAAU/F,gBAAgBuH,SAASn5d,IAInC23d,EAAYA,EAAUmD,QAG9B,IAAKrpf,EAAkBkmf,GAAY,CAC/B,IAAIr6e,EAAey/d,GAAcmB,gBAAgB6Y,EAAiB9Z,iBAAkBj9c,GACpF,OAAO23d,EAAU/F,gBAAgBmK,sBAAsB7e,eAAexhe,IAAI4B,KAW1F,OAAOtJ,KAAKwof,gBAAgBx8d,IAEhC+2d,EAAiB1nf,UAAUmtf,gBAAkB,SAAUx8d,GACnD,IAAI1iB,EAAey/d,GAAcmB,gBAAgB6Y,EAAiB9Z,iBAAkBj9c,GAChFy8d,EAAqBzof,KAAK0of,0BAE9B,OAAKjrf,EAAkBgrf,IAAwBhrf,EAAkBgrf,EAAmBV,yBAA0BU,EAAmBV,sBAAsB7e,eAAeziQ,YAAYn9N,GAIvKy5e,EAAiBqC,wBAAwBp5d,GAHzCy8d,EAAmBV,sBAAsB7e,eAAexhe,IAAI4B,IAM3Ey5e,EAAiB1nf,UAAUqtf,wBAA0B,WACjD,IAAID,EAMJ,OALKhrf,EAAkBuC,KAAKilf,YACnBxnf,EAAkBuC,KAAKilf,UAAU0D,cAClCF,EAAqBzof,KAAKilf,UAAU0D,WAAW14V,KAAKmqV,OAAOwD,iBAG5D6K,GAEX1F,EAAiB1nf,UAAU27H,iBAAmB,SAAUhrG,EAAUhvB,GAI9D,IAHIS,EAAkBT,IAAoB,KAAVA,KAC5BA,EAAQ+lf,EAAiBqC,wBAAwBp5d,IAEjDvuB,EAAkBuC,KAAK+nf,uBACvB/nf,KAAK4of,gCAAgC58d,EAAUhvB,OAE9C,CACD,IAAIsM,EAAey/d,GAAcmB,gBAAgBlqe,KAAK+nf,sBAAsB9e,iBAAkBj9c,GAC9F,GAAIhsB,KAAK+nf,sBAAsB7e,eAAeziQ,YAAYn9N,IACtDtJ,KAAK+nf,sBAAsB7e,eAAexhe,IAAI4B,KAAkBtM,EAEhE,OAGJgD,KAAK+nf,sBAAwBhF,EAAiB8F,uBAAuBzd,mBAAmBpre,KAAK+nf,sBAAuB/7d,EAAUhvB,KAGtI+lf,EAAiB1nf,UAAUutf,gCAAkC,SAAU58d,EAAUkyG,GAC7E,IAAI4qX,EAAuB,IAAInjR,GAC/B3lO,KAAK+of,oBAAoB,aAAc/8d,EAAUkyG,EAAW4qX,GAC5D9of,KAAK+of,oBAAoB,cAAe/8d,EAAUkyG,EAAW4qX,GAC7D9of,KAAK+of,oBAAoB,kBAAmB/8d,EAAUkyG,EAAW4qX,GACjE9of,KAAK+of,oBAAoB,gBAAiB/8d,EAAUkyG,EAAW4qX,GAC/D9of,KAAK+of,oBAAoB,gBAAiB/8d,EAAUkyG,EAAW4qX,GAC/D9of,KAAK+of,oBAAoB,eAAgB/8d,EAAUkyG,EAAW4qX,GAC9D9of,KAAK+of,oBAAoB,cAAe/8d,EAAUkyG,EAAW4qX,GAC7D9of,KAAK+of,oBAAoB,kBAAmB/8d,EAAUkyG,EAAW4qX,GACjE9of,KAAK+of,oBAAoB,eAAgB/8d,EAAUkyG,EAAW4qX,GAE9D9of,KAAK+nf,sBAAwBhF,EAAiB8F,uBAAuB3d,gBAAgB4d,EAAsB/F,EAAiB9Z,mBAGhI8Z,EAAiB1nf,UAAU0tf,oBAAsB,SAAU/8d,EAAUg+c,EAAkB9rW,EAAW4qX,GAC9F,IAAIx/e,EACJA,EAAey/d,GAAcmB,gBAAgB6Y,EAAiB9Z,iBAAkBj9c,GAC5EA,IAAag+c,GACb8e,EAAqB1kf,IAAIkF,EAAc40H,IAG/C6kX,EAAiBqC,wBAA0B,SAAUp5d,GACjD,IAAIhvB,OAAQ7B,EACZ,OAAQ6wB,GACJ,IAAK,aAGL,IAAK,cAGL,IAAK,kBACDhvB,EAAQ,EACR,MACJ,IAAK,gBACDA,EAAQ,OACR,MACJ,IAAK,gBAGL,IAAK,eACDA,EAAQ,EACR,MACJ,IAAK,cACDA,EAAQ,EACR,MACJ,IAAK,kBACDA,EAAQ,WACR,MACJ,IAAK,YACDA,EAAQ,SACR,MACJ,IAAK,eACDA,EAAQ,WAGhB,OAAOA,GAEX+lf,EAAiB1nf,UAAUgsf,YAAc,WAChC5pf,EAAkBuC,KAAK4jf,aACxB5jf,KAAK4jf,WAAWyD,cAEf5pf,EAAkBuC,KAAK+nf,wBAAwE,IAA9C/nf,KAAK+nf,sBAAsB/e,gBAC7E+Z,EAAiB8F,uBAAuBtkf,OAAOvE,KAAK+nf,uBAExD/nf,KAAK+nf,2BAAwB5sf,EAC7B6E,KAAK2jf,eAAYxof,GAErB4nf,EAAiB1nf,UAAUiX,QAAU,WAMjC,GALAtS,KAAKqnf,cACA5pf,EAAkBuC,KAAK4jf,aACxB5jf,KAAK4jf,WAAWtxe,UAEpBtS,KAAK4jf,gBAAazof,OACAA,IAAd6E,KAAKgof,KAAoB,CACzB,IAAK,IAAI7rf,EAAI,EAAGA,EAAI6D,KAAKgof,KAAKvrf,OAAQN,IAClC6D,KAAKgof,KAAK7rf,GAAGmW,UAEjBtS,KAAKgof,UAAO7sf,IAGpB4nf,EAAiB1nf,UAAUmqf,WAAa,SAAUxpd,GAC9C,IAAKv+B,EAAkBu+B,KACdv+B,EAAkBu+B,EAAO+rd,wBAC1B/nf,KAAKgpf,4BAA4Bhtd,GAEhCv+B,EAAkBu+B,EAAO4nd,aAC1B5jf,KAAK4jf,WAAW4B,WAAWxpd,EAAO4nd,YAEjCnmf,EAAkBu+B,EAAO2nd,aAC1B3jf,KAAK2jf,UAAY3nd,EAAO2nd,YAEvBlmf,EAAkBu+B,EAAOgsd,OAC1B,IAAK,IAAI7rf,EAAI,EAAGA,EAAI6/B,EAAOgsd,KAAKvrf,OAAQN,IACpC6D,KAAKgof,KAAK7rf,GAAK6/B,EAAOgsd,KAAK7rf,IAK3C4mf,EAAiB1nf,UAAU2tf,4BAA8B,SAAUhtd,GAC/D,IAAI8wE,OAAO3xG,EACP6E,KAAK+nf,wBACLj7Y,EAAO9sG,KAAK+nf,sBAAsBhd,gBAAgB/uc,EAAO+rd,uBACP,IAA9C/nf,KAAK+nf,sBAAsB/e,iBAC3B+Z,EAAiB8F,uBAAuBtkf,OAAOvE,KAAK+nf,uBACpD/nf,KAAK+nf,2BAAwB5sf,IAGrC6E,KAAK+nf,sBAAwB,IAAIhf,GAAcga,EAAiB9Z,kBAC5Dxre,EAAkBqvG,KAClBA,EAAO9sG,KAAK+nf,sBAAsBhd,gBAAgB/uc,EAAO+rd,wBAE7D/nf,KAAK+nf,sBAAwBhF,EAAiB8F,uBAAuB3d,gBAAgBp+X,EAAMi2Y,EAAiB9Z,mBAEhH8Z,EAAiB1nf,UAAUuqf,YAAc,WACrC,IAAI5pd,EAAS,IAAI+md,OAAiB5nf,GAWlC,OAVA6gC,EAAO+rd,sBAAwB/nf,KAAK+nf,sBACpC/rd,EAAO2nd,UAAY3jf,KAAK2jf,UACpBlmf,EAAkBuC,KAAK4jf,YACvB5nd,EAAO4nd,gBAAazof,GAGpB6gC,EAAO4nd,WAAa,IAAI+C,GACxB3qd,EAAO4nd,WAAWsC,OAASlmf,KAAK4jf,WAAWsC,OAC3Clqd,EAAO4nd,WAAWmD,gBAAkB/mf,KAAK4jf,WAAWmD,iBAEjD/qd,GAEX+md,EAAiB1nf,UAAU8pf,SAAW,SAAUn5d,GAC5C,IAAKvuB,EAAkBuC,KAAK+nf,yBAA2Btqf,EAAkBuC,KAAK+nf,sBAAsB7e,gBAAiB,CACjH,IAAI5/d,EAAey/d,GAAcmB,gBAAgBlqe,KAAK+nf,sBAAsB9e,iBAAkBj9c,GAC9F,OAAOhsB,KAAK+nf,sBAAsB7e,eAAeziQ,YAAYn9N,GAEjE,OAAO,GAEXy5e,EAAiB/yb,MAAQ,WACrBhwD,KAAK6of,uBAAuB74b,SAEhC+yb,EAAiB1nf,UAAUisf,WAAa,SAAU3D,GAC9C3jf,KAAK2jf,UAAYA,EACjB3jf,KAAK4jf,WAAW0D,WAAWtnf,KAAK2jf,YAMpCZ,EAAiB1nf,UAAUwB,SAAW,SAAUmvB,GAC5C,OAAOhsB,KAAKmlf,SAASn5d,GAAYhsB,KAAKoN,iBAAiB4e,QAAY7wB,GAMvE4nf,EAAiB1nf,UAAUksf,YAAc,SAAUvrd,GAC3Cv+B,EAAkBuC,KAAKnD,SAAS,iBAChCmD,KAAKipf,WAAajtd,EAAOn/B,SAAS,eAElCY,EAAkBuC,KAAKnD,SAAS,kBAChCmD,KAAKkpf,YAAcltd,EAAOn/B,SAAS,gBAEnCY,EAAkBuC,KAAKnD,SAAS,sBAChCmD,KAAK49O,gBAAkB5hN,EAAOn/B,SAAS,oBAEvCY,EAAkBuC,KAAKnD,SAAS,oBAChCmD,KAAKmpf,cAAgBntd,EAAOn/B,SAAS,kBAErCY,EAAkBuC,KAAKnD,SAAS,mBAChCmD,KAAKopf,aAAeptd,EAAOn/B,SAAS,iBAEpCY,EAAkBuC,KAAKnD,SAAS,kBAChCmD,KAAKsgP,YAActkN,EAAOn/B,SAAS,gBAEnCY,EAAkBuC,KAAKnD,SAAS,sBAChCmD,KAAKqpf,gBAAkBrtd,EAAOn/B,SAAS,oBAEvCY,EAAkBuC,KAAKnD,SAAS,oBAChCmD,KAAK2gC,cAAgB3E,EAAOn/B,SAAS,kBAErCY,EAAkBuC,KAAKnD,SAAS,mBAChCmD,KAAKspf,aAAettd,EAAOn/B,SAAS,iBAEpCY,EAAkBuC,KAAK4jf,aACvB5jf,KAAK4jf,WAAW2D,YAAYvrd,EAAO4nd,aAG3Cb,EAAiB8F,uBAAyB,IAAI5d,GAC9C8X,EAAiB9Z,iBAAmB,EAC7B8Z,KC7cPC,GAAkC,WAClC,SAASA,EAAiBzif,GACtBP,KAAKupf,2BAAwBpuf,EAC7B6E,KAAKilf,eAAY9pf,EACjB6E,KAAKwpf,mBAAgBruf,EACrB6E,KAAKilf,UAAY1kf,EAwXrB,OAtXAjC,OAAOuJ,eAAem7e,EAAiB3nf,UAAW,QAC9CqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,SAEjC/F,IAAK,SAAUrK,GACXgD,KAAKg3H,iBAAiB,OAAQh6H,IAElC2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAem7e,EAAiB3nf,UAAW,UAC9CqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,WAEjC/F,IAAK,SAAUrK,GACXgD,KAAKg3H,iBAAiB,SAAUh6H,IAEpC2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAem7e,EAAiB3nf,UAAW,YAC9CqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,aAEjC/F,IAAK,SAAUrK,GACXgD,KAAKg3H,iBAAiB,WAAYh6H,IAEtC2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAem7e,EAAiB3nf,UAAW,cAC9CqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,eAEjC/F,IAAK,SAAUrK,GACXgD,KAAKg3H,iBAAiB,aAAch6H,IAExC2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAem7e,EAAiB3nf,UAAW,aAC9CqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,cAEjC/F,IAAK,SAAUrK,GACXgD,KAAKg3H,iBAAiB,YAAah6H,IAEvC2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAem7e,EAAiB3nf,UAAW,iBAC9CqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,kBAEjC/F,IAAK,SAAUrK,GACXgD,KAAKg3H,iBAAiB,gBAAiBh6H,IAE3C2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAem7e,EAAiB3nf,UAAW,qBAC9CqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,sBAEjC/F,IAAK,SAAUrK,GACXgD,KAAKg3H,iBAAiB,oBAAqBh6H,IAE/C2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAem7e,EAAiB3nf,UAAW,kBAC9CqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,mBAEjC/F,IAAK,SAAUrK,GACXgD,KAAKg3H,iBAAiB,iBAAkBh6H,IAE5C2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAem7e,EAAiB3nf,UAAW,aAC9CqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,cAEjC/F,IAAK,SAAUrK,GACXgD,KAAKg3H,iBAAiB,YAAah6H,IAEvC2K,YAAY,EACZC,cAAc,IAElBo7e,EAAiB3nf,UAAU+R,iBAAmB,SAAU4e,GACpD,GAAKhsB,KAAKmlf,SAASn5d,GAYd,CACD,IAAI1iB,EAAey/d,GAAcmB,gBAAgB8Y,EAAiB/Z,iBAAkBj9c,GACpF,IAAKvuB,EAAkBuC,KAAKupf,wBAA0Bvpf,KAAKupf,sBAAsBrgB,eAAeziQ,YAAYn9N,GACxG,OAAOtJ,KAAKupf,sBAAsBrgB,eAAexhe,IAAI4B,OAf/B,CAC1B,IAAImgf,EAAiBzpf,KAAK0pf,oBAAoB19d,GAC9C,IAAKvuB,EAAkBgsf,GACnB,OAAOA,EAGP,IAAIE,EAAiB3pf,KAAK4pf,eAAe59d,GACzC,IAAKvuB,EAAkBksf,GACnB,OAAOA,EAUnB,OAAO3pf,KAAKwof,gBAAgBx8d,IAEhCg3d,EAAiB3nf,UAAUmtf,gBAAkB,SAAUx8d,GACnD,IAAI1iB,EAAey/d,GAAcmB,gBAAgB8Y,EAAiB/Z,iBAAkBj9c,GAChF69d,EAAqB7pf,KAAK8pf,0BAE9B,OAAKrsf,EAAkBosf,IAAwBpsf,EAAkBosf,EAAmBN,yBAA0BM,EAAmBN,sBAAsBrgB,eAAeziQ,YAAYn9N,GAIvK05e,EAAiBoC,wBAAwBp5d,GAHzC69d,EAAmBN,sBAAsBrgB,eAAexhe,IAAI4B,IAM3E05e,EAAiB3nf,UAAUyuf,wBAA0B,WACjD,IAAID,EAWJ,OAVKpsf,EAAkBuC,KAAKilf,aACnBxnf,EAAkBuC,KAAKilf,UAAUpC,WAI7Bplf,EAAkBuC,KAAKilf,UAAU0D,cAClCkB,EAAqB7pf,KAAKilf,UAAU0D,WAAW14V,KAAKmqV,OAAO4D,iBAJ/D6L,EAAqB7pf,KAAKilf,UAAUpC,UAAU8F,WAAW14V,KAAKmqV,OAAO4D,iBAQtE6L,GAEX7G,EAAiB3nf,UAAUuuf,eAAiB,SAAU59d,GAElD,IAAI23d,EAiBJ,IAhBKlmf,EAAkBuC,KAAKilf,aACnBxnf,EAAkBuC,KAAKilf,UAAUpC,WAK7B7if,KAAKilf,qBAAqBnC,KAAqBrlf,EAAkBuC,KAAKilf,UAAUrH,iBACjF+F,EAAY3jf,KAAKilf,UAAUrH,gBAAgB+F,UAGtClmf,EAAkBuC,KAAKilf,qBAAqB+B,MAC7CrD,EAAY3jf,KAAKilf,UAAU6B,SATnCnD,EAAY3jf,KAAKilf,UAAUpC,UAAUjF,gBAAgB+F,YAcrDlmf,EAAkBkmf,KAClBA,EAAU3F,gBAAgBmH,SAASn5d,IAInC23d,EAAYA,EAAUmD,QAG9B,IAAKrpf,EAAkBkmf,GAAY,CAC/B,IAAIr6e,EAAey/d,GAAcmB,gBAAgB8Y,EAAiB/Z,iBAAkBj9c,GACpF,OAAO23d,EAAU3F,gBAAgBuL,sBAAsBrgB,eAAexhe,IAAI4B,KAIlF05e,EAAiB3nf,UAAUquf,oBAAsB,SAAU19d,GAEvD,IAAI23d,EAAY3jf,KAAKwpf,cACrB,IAAK/rf,EAAkBkmf,GACnB,MAAQlmf,EAAkBkmf,IAAiC,2BAAnBA,EAAUlsd,MAAmC,CAEjF,GADaksd,EAAU3F,gBAAgBmH,SAASn5d,GACpC,CACR,IAAI+9d,EAAqBhhB,GAAcmB,gBAAgB8Y,EAAiB/Z,iBAAkBj9c,GAC1F,OAAO23d,EAAU3F,gBAAgBuL,sBAAsBrgB,eAAexhe,IAAIqif,GAG1EpG,EAAYA,EAAUmD,UAMtC9D,EAAiB3nf,UAAU27H,iBAAmB,SAAUhrG,EAAUhvB,GAI9D,IAHIS,EAAkBT,IAAoB,KAAVA,KAC5BA,EAAQgmf,EAAiBoC,wBAAwBp5d,IAEjDvuB,EAAkBuC,KAAKupf,uBACvBvpf,KAAKgqf,gCAAgCh+d,EAAUhvB,OAE9C,CACD,IAAIsM,EAAey/d,GAAcmB,gBAAgBlqe,KAAKupf,sBAAsBtgB,iBAAkBj9c,GAC9F,GAAIhsB,KAAKupf,sBAAsBrgB,eAAeziQ,YAAYn9N,IAEtDtJ,KAAKupf,sBAAsBrgB,eAAexhe,IAAI4B,KAAkBtM,EAChE,OAGJgD,KAAKupf,sBAAwBvG,EAAiBiH,uBAAuB7e,mBAAmBpre,KAAKupf,sBAAuBv9d,EAAUhvB,KAGtIgmf,EAAiB3nf,UAAU2uf,gCAAkC,SAAUh+d,EAAUkyG,GAC7E,IAAIgsX,EAAuB,IAAIvkR,GAC/B3lO,KAAKmqf,yBAAyB,YAAan+d,EAAUkyG,EAAWgsX,GAChElqf,KAAKmqf,yBAAyB,aAAcn+d,EAAUkyG,EAAWgsX,GACjElqf,KAAKmqf,yBAAyB,WAAYn+d,EAAUkyG,EAAWgsX,GAC/Dlqf,KAAKmqf,yBAAyB,OAAQn+d,EAAUkyG,EAAWgsX,GAC3Dlqf,KAAKmqf,yBAAyB,SAAUn+d,EAAUkyG,EAAWgsX,GAC7Dlqf,KAAKmqf,yBAAyB,YAAan+d,EAAUkyG,EAAWgsX,GAChElqf,KAAKmqf,yBAAyB,gBAAiBn+d,EAAUkyG,EAAWgsX,GACpElqf,KAAKmqf,yBAAyB,oBAAqBn+d,EAAUkyG,EAAWgsX,GACxElqf,KAAKmqf,yBAAyB,iBAAkBn+d,EAAUkyG,EAAWgsX,GACrElqf,KAAKmqf,yBAAyB,YAAan+d,EAAUkyG,EAAWgsX,GAEhElqf,KAAKupf,sBAAwBvG,EAAiBiH,uBAAuB/e,gBAAgBgf,EAAsBlH,EAAiB/Z,mBAGhI+Z,EAAiB3nf,UAAU8uf,yBAA2B,SAAUn+d,EAAUg+c,EAAkB9rW,EAAWgsX,GACnG,IAAI5gf,EACJA,EAAey/d,GAAcmB,gBAAgB8Y,EAAiB/Z,iBAAkBj9c,GAC5EA,IAAag+c,GACbkgB,EAAqB9lf,IAAIkF,EAAc40H,IAG/C8kX,EAAiBoC,wBAA0B,SAAUp5d,GACjD,IAAIhvB,OAAQ7B,EACZ,OAAQ6wB,GACJ,IAAK,OAGL,IAAK,SACDhvB,GAAQ,EACR,MACJ,IAAK,WACDA,EAAQ,GACR,MACJ,IAAK,YAGL,IAAK,gBACDA,EAAQ,OACR,MACJ,IAAK,oBACDA,EAAQ,SACR,MACJ,IAAK,iBACDA,EAAQ,UACR,MACJ,IAAK,YACDA,EAAQ,UACR,MACJ,IAAK,aACDA,EAAQ,UACR,MACJ,IAAK,YACDA,EAAQ,yBAGhB,OAAOA,GAEXgmf,EAAiB3nf,UAAU+uf,cAAgB,SAAUpud,GACjD,OAAQh8B,KAAK6sB,WAAamP,EAAOnP,UAC1B7sB,KAAKitB,aAAe+O,EAAO/O,YAC3BjtB,KAAK0uC,OAAS1S,EAAO0S,MACrB1uC,KAAKuxC,SAAWvV,EAAOuV,QACvBvxC,KAAKqqf,oBAAsBrud,EAAOqud,mBAClCrqf,KAAKk1Q,YAAcl5O,EAAOk5O,WAC1Bl1Q,KAAKsqf,YAActud,EAAOsud,WAC1Btqf,KAAKuqf,gBAAkBvud,EAAOuud,eAC9Bvqf,KAAKwqf,iBAAmBxud,EAAOwud,gBAE1CxH,EAAiB3nf,UAAUovf,aAAe,SAAUzud,GAChD,OAAOh8B,KAAKwpf,gBAAkBxtd,EAAOwtd,eACjCxpf,KAAKupf,wBAA0Bvtd,EAAOutd,uBAE9CvG,EAAiB3nf,UAAUuqf,YAAc,WACrC,IAAI5pd,EAAS,IAAIgnd,OAAiB7nf,GAGlC,OAFA6gC,EAAOutd,sBAAwBvpf,KAAKupf,sBACpCvtd,EAAOwtd,cAAgBxpf,KAAKwpf,cACrBxtd,GAEXgnd,EAAiB3nf,UAAU8pf,SAAW,SAAUn5d,GAC5C,IAAKvuB,EAAkBuC,KAAKupf,yBAA2B9rf,EAAkBuC,KAAKupf,sBAAsBrgB,gBAAiB,CACjH,IAAI5/d,EAAey/d,GAAcmB,gBAAgBlqe,KAAKupf,sBAAsBtgB,iBAAkBj9c,GAC9F,OAAOhsB,KAAKupf,sBAAsBrgB,eAAeziQ,YAAYn9N,GAEjE,OAAO,GAEX05e,EAAiB3nf,UAAUgsf,YAAc,WAChC5pf,EAAkBuC,KAAKupf,wBAAwE,IAA9Cvpf,KAAKupf,sBAAsBvgB,gBAC7Ega,EAAiBiH,uBAAuB1lf,OAAOvE,KAAKupf,uBAExDvpf,KAAKupf,2BAAwBpuf,EAC7B6E,KAAKwpf,mBAAgBruf,GAEzB6nf,EAAiB3nf,UAAUiX,QAAU,WACjCtS,KAAKqnf,eAETrE,EAAiB3nf,UAAUmqf,WAAa,SAAUxpd,GACzCv+B,EAAkBu+B,MACdv+B,EAAkBu+B,EAAOutd,wBAA0Bvtd,EAAOutd,sBAAsBrgB,gBACjFlpe,KAAK0qf,4BAA4B1ud,GAEhCv+B,EAAkBu+B,EAAOwtd,iBAC1Bxpf,KAAKwpf,cAAgBxtd,EAAOwtd,iBAIxCxG,EAAiB3nf,UAAUqvf,4BAA8B,SAAU1ud,GAC/D,IAAI8wE,OAAO3xG,EACP6E,KAAKupf,wBACLz8Y,EAAO9sG,KAAKupf,sBAAsBxe,gBAAgB/uc,EAAOutd,uBACP,IAA9Cvpf,KAAKupf,sBAAsBvgB,iBAC3Bga,EAAiBiH,uBAAuB1lf,OAAOvE,KAAKupf,uBACpDvpf,KAAKupf,2BAAwBpuf,IAGrC6E,KAAKupf,sBAAwB,IAAIxgB,GAAcia,EAAiB/Z,kBAC5Dxre,EAAkBqvG,KAClBA,EAAO9sG,KAAKupf,sBAAsBxe,gBAAgB/uc,EAAOutd,wBAE7Dvpf,KAAKupf,sBAAwBvG,EAAiBiH,uBAAuB/e,gBAAgBp+X,EAAMk2Y,EAAiB/Z,mBAEhH+Z,EAAiBhzb,MAAQ,WACrBhwD,KAAKiqf,uBAAuBj6b,SAEhCgzb,EAAiB3nf,UAAUisf,WAAa,SAAUkC,GAC9Cxpf,KAAKwpf,cAAgBA,GAMzBxG,EAAiB3nf,UAAUwB,SAAW,SAAUmvB,GAC5C,OAAOhsB,KAAKmlf,SAASn5d,GAAYhsB,KAAKoN,iBAAiB4e,QAAY7wB,GAMvE6nf,EAAiB3nf,UAAUksf,YAAc,SAAUvrd,GAC3Cv+B,EAAkBuC,KAAKnD,SAAS,WAChCmD,KAAK0uC,KAAO1S,EAAOn/B,SAAS,SAE5BY,EAAkBuC,KAAKnD,SAAS,aAChCmD,KAAKuxC,OAASvV,EAAOn/B,SAAS,WAE9BY,EAAkBuC,KAAKnD,SAAS,eAChCmD,KAAK6sB,SAAWmP,EAAOn/B,SAAS,aAEhCY,EAAkBuC,KAAKnD,SAAS,iBAChCmD,KAAKitB,WAAa+O,EAAOn/B,SAAS,eAElCY,EAAkBuC,KAAKnD,SAAS,gBAChCmD,KAAKk1Q,UAAYl5O,EAAOn/B,SAAS,cAEjCY,EAAkBuC,KAAKnD,SAAS,oBAChCmD,KAAKuqf,cAAgBvud,EAAOn/B,SAAS,kBAErCY,EAAkBuC,KAAKnD,SAAS,wBAChCmD,KAAKqqf,kBAAoBrud,EAAOn/B,SAAS,sBAEzCY,EAAkBuC,KAAKnD,SAAS,qBAChCmD,KAAKwqf,eAAiBxud,EAAOn/B,SAAS,mBAEtCY,EAAkBuC,KAAKnD,SAAS,gBAChCmD,KAAKsqf,UAAYtud,EAAOn/B,SAAS,eAGzCmmf,EAAiBiH,uBAAyB,IAAIhf,GAC9C+X,EAAiB/Z,iBAAmB,EAC7B+Z,KCjYP2H,GAA+B,WAC/B,SAASA,KAsRT,OA7QAA,EAAch2Y,OAAS,SAAUi2Y,EAAU34e,EAAOwa,GAC9C,OAAIxa,GAAS,GACD24e,EAASvpf,MAAM,EAAG4Q,GAASwa,EAAOm+d,EAASvpf,MAAM4Q,IAAQkP,KAAK,IAG/DsL,EAAOzsB,MAUtB2qf,EAAcpmf,OAAS,SAAUkoB,EAAMxa,EAAOxV,GAC1C,OAAc,IAAVwV,EACOwa,EAAKvI,UAAUjS,EAAQ,EAAGwa,EAAKhwB,QAG/BgwB,EAAKvI,UAAU,EAAGjS,GAASwa,EAAKvI,UAAUjS,EAAQ,EAAGwa,EAAKhwB,SAUzEkuf,EAAcE,WAAa,SAAUp+d,EAAMq+d,GAEvC,IAAK,IADD74e,OAAQ9W,EACHooB,EAAI,EAAGA,EAAIune,EAAmBruf,OAAQ8mB,IAAK,CAChD,IAAIwK,EAAOtB,EAAKluB,QAAQusf,EAAmBvne,KAC7B,IAAVwK,GAAetwB,EAAkBwU,GACjCA,EAAQ8b,GAEO,IAAVA,GAAeA,EAAO9b,IAC3BA,EAAQ8b,GAGhB,OAAOtwB,EAAkBwU,IAAU,EAAIA,GAQ3C04e,EAAcI,eAAiB,SAAUt+d,EAAMq+d,GAC3C,IAAK,IAAI3uf,EAAIswB,EAAKhwB,OAAS,EAAGN,GAAK,EAAGA,IAClC,IAAK,IAAIonB,EAAI,EAAGA,GAAKune,EAAmBruf,OAAS,EAAG8mB,IAChD,GAAIkJ,EAAKtwB,KAAO2uf,EAAmBvne,GAC/B,OAAOpnB,EAInB,OAAQ,GAOZwuf,EAAcK,YAAc,SAAUxrM,GAClC,IAAI96S,EAAQlE,SAASW,cAAc,SAC/BuD,EAAMA,MAAMo7D,QACZp7D,EAAMA,MAAMo7D,QAAU0/O,EAGtB96S,EAAM/C,YAAYnB,SAASw0C,eAAewqQ,IAE9Ch/S,SAASe,qBAAqB,QAAQ,GAAGI,YAAY+C,IAOzDimf,EAAcM,sBAAwB,SAAUT,GAC5C,IAAIh0d,EAAQ,UACZ,OAAQg0d,GACJ,IAAK,SACDh0d,EAAQ,UACR,MACJ,IAAK,cACDA,EAAQ,UACR,MACJ,IAAK,YACDA,EAAQ,UACR,MACJ,IAAK,OACDA,EAAQ,UACR,MACJ,IAAK,OACDA,EAAQ,UACR,MACJ,IAAK,MACDA,EAAQ,UACR,MACJ,IAAK,WACDA,EAAQ,UACR,MACJ,IAAK,OACDA,EAAQ,UACR,MACJ,IAAK,QACDA,EAAQ,UACR,MACJ,IAAK,SACDA,EAAQ,UACR,MACJ,IAAK,UACDA,EAAQ,UACR,MACJ,IAAK,aACDA,EAAQ,UACR,MACJ,IAAK,SACDA,EAAQ,UACR,MACJ,IAAK,SACDA,EAAQ,UACR,MACJ,IAAK,QACDA,EAAQ,UAGhB,OAAOA,GAOXm0d,EAAcO,oBAAsB,SAAUp3d,GAE1C,OADY62d,EAAcltd,MAAe,GAAR3J,EAAa,GAAK,IAQvD62d,EAAcQ,oBAAsB,SAAUC,GAE1C,OADYT,EAAcltd,MAAe,GAAR2td,EAAa,GAAK,IAOvDT,EAAcU,uBAAyB,SAAUjmW,GAC7C,OAAIA,aAAkBkmW,IAAwC,IAArBlmW,EAAOmmW,WACpC9tf,EAAkB2nJ,EAAOomW,UAE5BpmW,aAAkBkmW,IAAwC,IAArBlmW,EAAOmmW,WACzC9tf,EAAkB2nJ,EAAOqmW,cAAgBhuf,EAAkB2nJ,EAAOomW,WAGlE/tf,EAAkB2nJ,EAAOqmW,aAQzCd,EAAce,YAAc,SAAUj/d,GAClC,IAAKhvB,EAAkBgvB,IAAyB,IAAhBA,EAAKhwB,OACjC,IAAK,IAAIN,EAAI,EAAGA,EAAIswB,EAAKhwB,OAAQN,IACN,MAAnBswB,EAAKtN,OAAOhjB,KAEZswB,EAAOA,EAAKld,QAAQ,IAAK,KAIrC,OAAOkd,GAOXk+d,EAAcgB,UAAY,SAAUl/d,GAEhC,IADA,IAAItwB,EAAI,EACAA,EAAIswB,EAAKhwB,QACG,MAAZgwB,EAAKtwB,GADYA,KAKzB,OAAOswB,EAAKvI,UAAU/nB,EAAGswB,EAAKhwB,SAOlCkuf,EAAciB,QAAU,SAAUn/d,GAE9B,IADA,IAAItwB,EAAIswB,EAAKhwB,OAAS,EACdN,GAAK,GACO,MAAZswB,EAAKtwB,GADGA,KAKhB,OAAOswB,EAAKvI,UAAU,EAAG/nB,EAAI,IAOjCwuf,EAAc96V,SAAW,SAAUpjI,GAC/B,OAAKhvB,EAAkBgvB,IAAyB,IAAhBA,EAAKhwB,QACA,MAA1BgwB,EAAKA,EAAKhwB,OAAS,IAWlCkuf,EAAckB,qBAAuB,SAAU7N,EAAiB8N,EAAU9vd,GACtEgid,EAAgBtvc,KAAOo9c,EAAW9vd,EAAO0S,KAAO1S,EAAOn/B,SAAS,QAChEmhf,EAAgBzsc,OAASu6c,EAAW9vd,EAAOuV,OAASvV,EAAOn/B,SAAS,UACpEmhf,EAAgBnxd,SAAWi/d,EAAW9vd,EAAOnP,SAAWmP,EAAOn/B,SAAS,YACxEmhf,EAAgB/wd,WAAa6+d,EAAW9vd,EAAO/O,WAAa+O,EAAOn/B,SAAS,cAC5Emhf,EAAgB9oO,UAAY42O,EAAW9vd,EAAOk5O,UAAYl5O,EAAOn/B,SAAS,aAC1Emhf,EAAgBuM,cAAgBuB,EAAW9vd,EAAOuud,cAAgBvud,EAAOn/B,SAAS,iBAClFmhf,EAAgBqM,kBAAoByB,EAAW9vd,EAAOqud,kBAAoBrud,EAAOn/B,SAAS,qBAC1Fmhf,EAAgBwM,eAAiBsB,EAAW9vd,EAAOwud,eAAiBxud,EAAOn/B,SAAS,kBACpFmhf,EAAgBsM,UAAYwB,EAAW9vd,EAAOsud,UAAYtud,EAAOn/B,SAAS,aAC1Emhf,EAAgB+N,UAAatuf,EAAkBu+B,EAAOwtd,oBAA6Cruf,EAA5B6gC,EAAOwtd,cAAc/xd,MAShGkzd,EAAcltd,MAAQ,SAAUzgC,EAAOgvf,GAEnC,IAAK,IADDj+d,EAAO/wB,EACFb,EAAI,EAAGA,EAAI6vf,EAAe7vf,IAC/B4xB,GAAc,GAElBA,EAAO1hB,KAAKoxB,MAAM1P,GAClB,IAAS5xB,EAAI,EAAGA,EAAI6vf,EAAe7vf,IAC/B4xB,GAAc,GAElB,OAAOA,GAKX48d,EAAcsB,WAAa,MAI3BtB,EAAcuB,UAAY,MAI1BvB,EAAcwB,qBAAuB,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACpE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,KACtCxB,KAMPzwc,GAAuB,WACvB,SAASA,EAAMusB,EAAWC,GACtB1mE,KAAKosf,IAAM,EACXpsf,KAAKqsf,IAAM,EACXrsf,KAAKosf,IAAM3lb,EACXzmE,KAAKqsf,IAAM3lb,EA6Cf,OA3CApoE,OAAOuJ,eAAeqyC,EAAM7+C,UAAW,KAKnCqM,IAAK,WACD,OAAO1H,KAAKosf,KAEhB/kf,IAAK,SAAUrK,GACXgD,KAAKosf,IAAMpvf,GAEf2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeqyC,EAAM7+C,UAAW,KAKnCqM,IAAK,WACD,OAAO1H,KAAKqsf,KAEhBhlf,IAAK,SAAUrK,GACXgD,KAAKqsf,IAAMrvf,GAEf2K,YAAY,EACZC,cAAc,IAKlBsyC,EAAM7+C,UAAUkE,KAAO,SAAUu0B,GAC7B9zB,KAAKosf,IAAMt4d,EAAMs4d,IACjBpsf,KAAKqsf,IAAMv4d,EAAMu4d,KAMrBnyc,EAAM7+C,UAAUiX,QAAU,WACtBtS,KAAKosf,SAAMjxf,EACX6E,KAAKqsf,SAAMlxf,GAER++C,KCpVPowC,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAiBxC2ha,GAAwB,WAGxB,OAFA,gBAQAtF,GAAiC,SAAU77Z,GAE3C,SAAS67Z,EAAgBzmf,GACrB,IAAIR,EAAQorF,EAAO7pF,KAAKtB,OAASA,KAIjC,OAHAD,EAAMklf,UAAY1kf,EAClBR,EAAM69e,gBAAkB,IAAImF,GAAiBhjf,GAC7CA,EAAMi+e,gBAAkB,IAAIgF,GAAiBjjf,GACtCA,EAgBX,OAtBAuqF,GAAU08Z,EAAiB77Z,GAQ3B67Z,EAAgB3rf,UAAUiX,QAAU,WAChCtS,KAAKg+e,gBAAgB1re,UACrBtS,KAAK49e,gBAAgBtre,WAEzB00e,EAAgB3rf,UAAUkxf,UAAY,SAAUC,GAC5Cxsf,KAAKy3B,KAAO+0d,EAAU/0d,KACtBz3B,KAAKilf,UAAYuH,EAAUvH,UAC3Bjlf,KAAK0G,KAAO8lf,EAAU9lf,KACtB1G,KAAKsoC,KAAOkkd,EAAUlkd,KACtBtoC,KAAK8mf,QAAU0F,EAAU1F,QACzB9mf,KAAKmzD,KAAOq5b,EAAUr5b,KACtBnzD,KAAKg+e,gBAAgBwH,WAAWgH,EAAUxO,iBAC1Ch+e,KAAK49e,gBAAgB4H,WAAWgH,EAAU5O,kBAEvCoJ,GACTsF,IAKEG,GAAiC,SAAUtha,GAE3C,SAASsha,EAAgBlsf,GACrB,IAAIR,EAAQorF,EAAO7pF,KAAKtB,OAASA,KAGjC,OAFAD,EAAMklf,UAAY1kf,EAClBR,EAAMi+e,gBAAkB,IAAIgF,GAAiBjjf,GACtCA,EAaX,OAlBAuqF,GAAUmia,EAAiBtha,GAO3Bsha,EAAgBpxf,UAAUiX,QAAU,WAChCtS,KAAKg+e,gBAAgB1re,WAEzBm6e,EAAgBpxf,UAAUkxf,UAAY,SAAUG,GAC5C1sf,KAAKy3B,KAAOi1d,EAAUj1d,KACtBz3B,KAAKilf,UAAYyH,EAAUzH,UAC3Bjlf,KAAK0G,KAAOgmf,EAAUhmf,KACtB1G,KAAKsoC,KAAOokd,EAAUpkd,KACtBtoC,KAAK8mf,QAAU4F,EAAU5F,QACzB9mf,KAAKg+e,gBAAgBwH,WAAWkH,EAAU1O,kBAEvCyO,GACTH,IAKElM,GAAyB,WACzB,SAASA,IACLpgf,KAAKmnC,cAqET,OAlEA7oC,OAAOuJ,eAAeu4e,EAAQ/kf,UAAW,UACrCqM,IAAK,WACD,OAAO1H,KAAKmnC,WAAW1qC,QAE3BkL,YAAY,EACZC,cAAc,IAElBw4e,EAAQ/kf,UAAUkJ,OAAS,SAAUsZ,GACjC7d,KAAKmnC,WAAannC,KAAKmnC,WAAWH,OAAO,SAAUmc,GAAK,OAAQA,EAAE1rB,OAAS5Z,EAAK4Z,QAEpF2od,EAAQ/kf,UAAUmJ,KAAO,SAAUqZ,GAI/B,OAHY,MAARA,QAAyB1iB,IAAT0iB,GAChB7d,KAAKmnC,WAAW3iC,KAAKqZ,GAElB,GAEXuie,EAAQ/kf,UAAUixG,QAAU,SAAUr6F,GAClC,OAAIjS,KAAKmnC,WAAW1qC,OAASwV,EAClBjS,KAAKmnC,WAAWl1B,GAEpB,MAEXmue,EAAQ/kf,UAAUkD,QAAU,SAAUsf,GAClC,OAAO7d,KAAKmnC,WAAW5oC,QAAQsf,IAEnCuie,EAAQ/kf,UAAU8I,SAAW,SAAU0Z,GACnC,IAAI5L,EAAQjS,KAAKmnC,WAAW5oC,QAAQsf,GACpC,OAAO5L,GAAS,GAAKA,EAAQjS,KAAKmnC,WAAW1qC,QAEjD2jf,EAAQ/kf,UAAU20D,MAAQ,WACtB,KAAOhwD,KAAKmnC,WAAW1qC,OAAS,GAC5BuD,KAAKmnC,WAAWilH,OAGxBg0V,EAAQ/kf,UAAUqof,WAAa,SAAUjsd,EAAM/wB,GAE3C,IAAK,IADDimf,EACKvuf,EAAK,EAAGyE,EAAK7C,KAAKmnC,WAAY/oC,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACzD,IAAIpB,EAAQ6F,EAAGzE,GACXpB,EAAMy6B,OAASA,IACfk1d,EAAc3vf,EACTS,EAAkBiJ,IAAS1J,EAAM0J,OAASA,IAC3Cimf,EAAc3vf,IAI1B,OAAO2vf,GAEXvM,EAAQ/kf,UAAUwof,cAAgB,SAAUn9e,GACxC,OAAO1G,KAAKmnC,WAAWH,OAAO,SAAUmc,GAAK,OAAQA,EAAEz8C,OAASA,IAAUkxB,IAAI,SAAUurB,GAAK,OAAOA,EAAE1rB,QAG1G2od,EAAQ/kf,UAAU0of,UAAY,SAAUr9e,GAGpC,IAAK,IADDkmf,KACKxuf,EAAK,EAAGyuf,EAFJ7sf,KAAKmnC,WAAWH,OAAO,SAAUmc,GAAK,OAAQA,EAAEz8C,OAASA,IAAUkxB,IAAI,SAAUurB,GAAK,OAAOA,IAEtE/kD,EAAKyuf,EAASpwf,OAAQ2B,IAAM,CAC5D,IAAIsG,EAAQmof,EAASzuf,GACjBuuf,KACAG,KACJA,EAAkB9O,mBAClB2M,GAAckB,qBAAqBiB,EAAkB9O,iBAAiB,EAAMt5e,EAAMs5e,iBAClF2O,EAAYl1d,KAAO/yB,EAAM+yB,KACzBk1d,EAAYjof,MAAQmrD,KAAKC,UAAUg9b,GACnCF,EAAapof,KAAKmof,GAEtB,OAAOC,GAEJxM,KChJP2M,GAAyB,WACzB,SAASA,EAAQxsf,GACbP,KAAKgtf,wBAAqB7xf,EAC1B6E,KAAKilf,eAAY9pf,EACjB6E,KAAKilf,UAAY1kf,EAuhBrB,OArhBAjC,OAAOuJ,eAAeklf,EAAQ1xf,UAAW,SACrCqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,UAEjC/F,IAAK,SAAUrK,GACXgD,KAAKg3H,iBAAiB,QAASh6H,IAEnC2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeklf,EAAQ1xf,UAAW,aACrCqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,cAEjC/F,IAAK,SAAUrK,GACXgD,KAAKg3H,iBAAiB,YAAah6H,IAEvC2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeklf,EAAQ1xf,UAAW,aACrCqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,cAEjC/F,IAAK,SAAUrK,GACXgD,KAAKg3H,iBAAiB,YAAah6H,IAEvC2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeklf,EAAQ1xf,UAAW,UACrCqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,WAEjC/F,IAAK,SAAUrK,GACXgD,KAAKg3H,iBAAiB,SAAUh6H,IAEpC2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeklf,EAAQ1xf,UAAW,SACrCqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,UAEjC/F,IAAK,SAAUrK,GACXgD,KAAKg3H,iBAAiB,QAASh6H,IAEnC2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeklf,EAAQ1xf,UAAW,gBACrCqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,iBAEjC/F,IAAK,SAAUrK,GACXgD,KAAKg3H,iBAAiB,eAAgBh6H,IAE1C2K,YAAY,EACZC,cAAc,IAElBmlf,EAAQ1xf,UAAU+R,iBAAmB,SAAU4e,GAE3C,GADehsB,KAAKmlf,SAASn5d,GACf,CACV,IAAI1iB,EAAey/d,GAAcmB,gBAAgB6iB,EAAQ9jB,iBAAkBj9c,GAC3E,IAAKvuB,EAAkBuC,KAAKgtf,qBAAuBhtf,KAAKgtf,mBAAmB9jB,eAAeziQ,YAAYn9N,GAClG,OAAOtJ,KAAKgtf,mBAAmB9jB,eAAexhe,IAAI4B,GAG1D,OAAOyjf,EAAQ3H,wBAAwBp5d,IAE3C+ge,EAAQ1xf,UAAU27H,iBAAmB,SAAUhrG,EAAUhvB,GAIrD,IAHIS,EAAkBT,IAAoB,KAAVA,KAC5BA,EAAQ+vf,EAAQ3H,wBAAwBp5d,IAExCvuB,EAAkBuC,KAAKgtf,oBACvBhtf,KAAKitf,uBAAuBjhe,EAAUhvB,OAErC,CACD,IAAIsM,EAAey/d,GAAcmB,gBAAgBlqe,KAAKgtf,mBAAmB/jB,iBAAkBj9c,GAC3F,GAAIhsB,KAAKgtf,mBAAmB9jB,eAAeziQ,YAAYn9N,IACnDtJ,KAAKgtf,mBAAmB9jB,eAAexhe,IAAI4B,KAAkBtM,EAE7D,OAEJgD,KAAKgtf,mBAAqBD,EAAQG,oBAAoB9hB,mBAAmBpre,KAAKgtf,mBAAoBhhe,EAAUhvB,KAGpH+vf,EAAQ1xf,UAAU4xf,uBAAyB,SAAUjhe,EAAUkyG,GAC3D,IAAIivX,EAAyB,IAAIxnR,GACjC3lO,KAAKotf,sBAAsB,QAASphe,EAAUkyG,EAAWivX,GACzDntf,KAAKotf,sBAAsB,YAAaphe,EAAUkyG,EAAWivX,GAC7Dntf,KAAKotf,sBAAsB,YAAaphe,EAAUkyG,EAAWivX,GAC7Dntf,KAAKotf,sBAAsB,SAAUphe,EAAUkyG,EAAWivX,GAC1Dntf,KAAKotf,sBAAsB,QAASphe,EAAUkyG,EAAWivX,GACzDntf,KAAKotf,sBAAsB,eAAgBphe,EAAUkyG,EAAWivX,GAChEntf,KAAKgtf,mBAAqBD,EAAQG,oBAAoBhiB,gBAAgBiiB,EAAwBJ,EAAQ9jB,mBAG1G8jB,EAAQ1xf,UAAU+xf,sBAAwB,SAAUphe,EAAUg+c,EAAkB9rW,EAAWivX,GACvF,IAAI7jf,EACJA,EAAey/d,GAAcmB,gBAAgB6iB,EAAQ9jB,iBAAkBj9c,GACnEA,IAAag+c,EACbmjB,EAAuB/of,IAAIkF,EAAc40H,GAGzCivX,EAAuB/of,IAAIkF,EAAcyjf,EAAQ3H,wBAAwBp5d,KAGjF+ge,EAAQ3H,wBAA0B,SAAUp5d,GACxC,IAAIhvB,OAAQ7B,EACZ,OAAQ6wB,GACJ,IAAK,QACDhvB,EAAQ,UACR,MACJ,IAAK,YACDA,EAAQ,OACR,MACJ,IAAK,YACDA,EAAQ,EACR,MACJ,IAAK,SACDA,GAAQ,EACR,MACJ,IAAK,QACDA,EAAQ,EACR,MACJ,IAAK,eACDA,GAAQ,EAGhB,OAAOA,GAEX+vf,EAAQ1xf,UAAUklP,aAAe,WAE7B,OAAQvgP,KAAK+gU,WACT,IAAK,OACL,IAAK,UACD,OAAO,EACX,IAAK,SACL,IAAK,SACL,IAAK,oBACL,IAAK,oBACL,IAAK,wBACL,IAAK,qBACL,IAAK,qBACL,IAAK,yBACL,IAAK,oBACL,IAAK,oBACL,IAAK,wBACL,IAAK,WACL,IAAK,YAIG,IAAK,IAFDssL,EAAYrtf,KAAKstf,wBAAwBttf,KAAK+gU,UAAW/gU,KAAKotF,WAC9Dp3E,EAAQ,EACH7Z,EAAI,EAAGA,EAAIkxf,EAAU5wf,OAAQN,IAClC6Z,GAASq3e,EAAUlxf,GAEvB,OAAO6Z,EAEf,IAAK,SACL,IAAK,eACL,IAAK,eACL,IAAK,MACL,IAAK,UACL,IAAK,aACL,IAAK,QACD,OAAOhW,KAAKotF,UAChB,IAAK,aACD,OAA2B,MAAnBptF,KAAKotF,UAAoB,EAAI,IACzC,IAAK,aACD,YACJ,IAAK,iBACL,IAAK,SACD,OAAOptF,KAAKotF,UAEpB,OAAOptF,KAAKotF,WAGhB2/Z,EAAQ1xf,UAAUiyf,wBAA0B,SAAUvsL,EAAW3zO,GAC7D,IAAImga,GAAmBnga,GACvB,OAAQ2zO,GACJ,IAAK,SACDwsL,GAAmB,EAAG,EAAG,GACzB,MACJ,IAAK,oBACDA,GAAmB,GAAI,KAAO,KAC9B,MACJ,IAAK,oBACDA,IAAoB,KAAO,IAAM,GACjC,MACJ,IAAK,qBACDA,GAAmB,EAAG,GAAK,IAC3B,MACJ,IAAK,qBACDA,GAAmB,GAAK,GAAK,GAC7B,MACJ,IAAK,oBACDA,IAAoB,IAAK,GAAI,KAC7B,MACJ,IAAK,oBACDA,IAAoB,IAAM,GAAI,KAC9B,MACJ,IAAK,SACDA,GAAmB,EAAG,EAAG,EAAG,EAAG,GAC/B,MACJ,IAAK,wBACDA,IAAoB,KAAO,IAAM,GAAI,KAAO,KAC5C,MACJ,IAAK,yBACDA,GAAmB,GAAK,GAAK,EAAG,GAAK,IACrC,MACJ,IAAK,wBACDA,IAAoB,IAAM,GAAI,IAAK,GAAI,KACvC,MACJ,IAAK,WACL,IAAK,YACDA,GAAmB,IAAM,EAAG,EAAG,EAAG,KAG1C,GAA+B,IAA3BA,EAAgB9wf,OAChB,OAAQ2wF,GAEZ,IAAK,IAAIjxF,EAAI,EAAGA,EAAIoxf,EAAgB9wf,OAAQN,IACpCoxf,EAAgBpxf,IAAM,EACtBoxf,EAAgBpxf,GAAKoxf,EAAgBpxf,GAAKixF,EAG1Cmga,EAAgBpxf,GAAKkQ,KAAKE,IAAIghf,EAAgBpxf,IAGtD,OAAOoxf,GAEXR,EAAQ1xf,UAAUmyf,gBAAkB,WAChC,IAAIC,EAAS,EACTC,EAAgB1tf,KAAK2tf,mBACrBC,EAAe5tf,KAAK6tf,kBACxB,OAAQ7tf,KAAK+gU,WACT,IAAK,SACL,IAAK,eACL,IAAK,UACL,IAAK,aACL,IAAK,SACL,IAAK,SACL,IAAK,oBACL,IAAK,oBACL,IAAK,wBACL,IAAK,qBACL,IAAK,qBACL,IAAK,yBACL,IAAK,oBACL,IAAK,oBACL,IAAK,wBACL,IAAK,aACL,IAAK,aACL,IAAK,iBACL,IAAK,WACL,IAAK,YACL,IAAK,SACL,IAAK,QACL,IAAK,QACD0sL,EAASC,EAAgBE,EACzB,MACJ,IAAK,MACL,IAAK,eACDH,EAAS,EAGjB,OAAOA,GAEXV,EAAQ1xf,UAAUwyf,gBAAkB,WAChC,IAAID,EAAe,EACnB,OAAQ5tf,KAAK+gU,WACT,IAAK,SACD6sL,EAAe,EACf,MACJ,IAAK,QACDA,EAAe,EACf,MACJ,IAAK,SACDA,EAAe,EACf,MACJ,IAAK,MACDA,EAAe,EACf,MACJ,IAAK,eACDA,EAAe,EACf,MACJ,IAAK,UACDA,EAAe,EACf,MACJ,IAAK,aACDA,EAAe,EACf,MACJ,IAAK,SACDA,EAAe,EACf,MACJ,IAAK,oBACDA,EAAe,EACf,MACJ,IAAK,oBACDA,EAAe,GACf,MACJ,IAAK,wBACDA,EAAe,GACf,MACJ,IAAK,qBACDA,EAAe,GACf,MACJ,IAAK,qBACDA,EAAe,GACf,MACJ,IAAK,yBACDA,EAAe,GACf,MACJ,IAAK,oBACDA,EAAe,GACf,MACJ,IAAK,oBACDA,EAAe,GACf,MACJ,IAAK,wBACDA,EAAe,GACf,MACJ,IAAK,aACDA,EAAe,GACf,MACJ,IAAK,aACDA,EAAe,GACf,MACJ,IAAK,eACDA,EAAe,GACf,MACJ,IAAK,iBACDA,EAAe,GACf,MACJ,IAAK,WACDA,EAAe,GACf,MACJ,IAAK,YACDA,EAAe,GACf,MACJ,IAAK,SACDA,EAAe,GACf,MACJ,IAAK,QACDA,EAAe,GAGvB,OAAOA,GAEXb,EAAQ1xf,UAAUsyf,iBAAmB,WAEjC,IAAI3wf,EAAQ,EACZ,OAAQgD,KAAK+gU,WACT,IAAK,SACL,IAAK,MACL,IAAK,eACL,IAAK,eACL,IAAK,UACL,IAAK,aACD/jU,EAAQ,EACR,MACJ,IAAK,SACDA,EAAQ,EACR,MACJ,IAAK,SACDA,EAAQ,EACR,MACJ,IAAK,oBAGL,IAAK,oBACDA,EAAQ,EACR,MACJ,IAAK,wBACDA,EAAQ,EACR,MACJ,IAAK,qBAGL,IAAK,qBACDA,EAAQ,EACR,MACJ,IAAK,yBACDA,EAAQ,EACR,MACJ,IAAK,oBAGL,IAAK,oBACDA,EAAQ,EACR,MACJ,IAAK,wBACDA,EAAQ,EACR,MACJ,IAAK,aACDA,EAAQ,EACR,MACJ,IAAK,aACDA,EAAQ,EACR,MACJ,IAAK,iBACDA,EAAQ,EACR,MACJ,IAAK,WACL,IAAK,YACDA,EAAQ,EACR,MACJ,IAAK,SACL,IAAK,QACL,IAAK,QACDA,EAAQ,EAGhB,OAAOA,GAEX+vf,EAAQ1xf,UAAUyyf,cAAgB,WAC9B,IAAI9wf,EAAQ,EACZ,OAAQgD,KAAK+gU,WACT,IAAK,SACD/jU,EAAQ,EACR,MACJ,IAAK,QACDA,EAAQ,EACR,MACJ,IAAK,SACDA,EAAQ,EACR,MACJ,IAAK,MACDA,EAAQ,EACR,MACJ,IAAK,eACDA,EAAQ,EACR,MACJ,IAAK,UACDA,EAAQ,EACR,MACJ,IAAK,aACDA,EAAQ,EACR,MACJ,IAAK,SACDA,EAAQ,EACR,MACJ,IAAK,oBACDA,EAAQ,EACR,MACJ,IAAK,oBACDA,EAAQ,GACR,MACJ,IAAK,wBACDA,EAAQ,GACR,MACJ,IAAK,qBACDA,EAAQ,GACR,MACJ,IAAK,qBACDA,EAAQ,GACR,MACJ,IAAK,yBACDA,EAAQ,GACR,MACJ,IAAK,oBACDA,EAAQ,GACR,MACJ,IAAK,oBACDA,EAAQ,GACR,MACJ,IAAK,wBACDA,EAAQ,GACR,MACJ,IAAK,aACDA,EAAQ,GACR,MACJ,IAAK,aACDA,EAAQ,GACR,MACJ,IAAK,eACDA,EAAQ,GACR,MACJ,IAAK,iBACDA,EAAQ,GACR,MACJ,IAAK,WACDA,EAAQ,GACR,MACJ,IAAK,YACDA,EAAQ,GACR,MACJ,IAAK,SACDA,EAAQ,GACR,MACJ,IAAK,QACDA,EAAQ,GAGhB,OAAOA,GAEX+vf,EAAQ1xf,UAAU8pf,SAAW,SAAUn5d,GACnC,IAAKvuB,EAAkBuC,KAAKgtf,oBAAqB,CAC7C,IAAI1jf,EAAey/d,GAAcmB,gBAAgBlqe,KAAKgtf,mBAAmB/jB,iBAAkBj9c,GAC3F,OAAOhsB,KAAKgtf,mBAAmB9jB,eAAeziQ,YAAYn9N,GAE9D,OAAO,GAEXyjf,EAAQ1xf,UAAUuqf,YAAc,WAC5B,IAAIthd,EAAS,IAAIyod,OAAQ5xf,GAMzB,OALAmpC,EAAO9N,MAAQx2B,KAAKw2B,MACpB8N,EAAOy8R,UAAY/gU,KAAK+gU,UACxBz8R,EAAO8oD,UAAYptF,KAAKotF,UACxB9oD,EAAO0N,OAAShyC,KAAKgyC,OACrB1N,EAAOzG,MAAQ79B,KAAK69B,MACbyG,GAEXyod,EAAQ1xf,UAAUiX,QAAU,WACnB7U,EAAkBuC,KAAKgtf,qBACxBD,EAAQG,oBAAoB3of,OAAOvE,KAAKgtf,oBAE5Chtf,KAAKgtf,wBAAqB7xf,GAE9B4xf,EAAQ1xf,UAAUmqf,WAAa,SAAUlhd,GAChC7mC,EAAkB6mC,IAAY7mC,EAAkB6mC,EAAO0od,sBACxDhtf,KAAKw2B,MAAQ8N,EAAO9N,MACpBx2B,KAAK+gU,UAAYz8R,EAAOy8R,UACxB/gU,KAAKotF,UAAY9oD,EAAO8oD,UACxBptF,KAAKgyC,OAAS1N,EAAO0N,OACrBhyC,KAAK69B,MAAQyG,EAAOzG,QAG5Bkvd,EAAQ/8b,MAAQ,WACZhwD,KAAKktf,oBAAoBl9b,SAE7B+8b,EAAQG,oBAAsB,IAAIjiB,GAClC8hB,EAAQ9jB,iBAAmB,EACpB8jB,KC7hBPgB,GAA0B,WAC1B,SAASA,EAASxtf,GACdP,KAAKguf,OAAS,IAAIjB,GAAQ/sf,MAC1BA,KAAKiuf,QAAU,IAAIlB,GAAQ/sf,MAC3BA,KAAKkuf,MAAQ,IAAInB,GAAQ/sf,MACzBA,KAAKmuf,SAAW,IAAIpB,GAAQ/sf,MAC5BA,KAAKouf,aAAe,IAAIrB,GAAQ/sf,MAChCA,KAAKquf,WAAa,IAAItB,GAAQ/sf,MAC9BA,KAAKsuf,aAAe,IAAIvB,GAAQ/sf,MAChCA,KAAKuuf,eAAiB,IAAIxB,GAAQ/sf,MAClCA,KAAKwuf,YAAc,EACnBxuf,KAAKilf,UAAY1kf,EAoKrB,OAlKAjC,OAAOuJ,eAAekmf,EAAS1yf,UAAW,QACtCqM,IAAK,WACD,OAAO1H,KAAKguf,QAEhB3mf,IAAK,SAAUrK,GACXgD,KAAKguf,OAAShxf,GAElB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAekmf,EAAS1yf,UAAW,SACtCqM,IAAK,WACD,OAAO1H,KAAKiuf,SAEhB5mf,IAAK,SAAUrK,GACXgD,KAAKiuf,QAAUjxf,GAEnB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAekmf,EAAS1yf,UAAW,OACtCqM,IAAK,WACD,OAAO1H,KAAKkuf,OAEhB7mf,IAAK,SAAUrK,GACXgD,KAAKkuf,MAAQlxf,GAEjB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAekmf,EAAS1yf,UAAW,UACtCqM,IAAK,WACD,OAAO1H,KAAKmuf,UAEhB9mf,IAAK,SAAUrK,GACXgD,KAAKmuf,SAAWnxf,GAEpB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAekmf,EAAS1yf,UAAW,cACtCqM,IAAK,WACD,OAAO1H,KAAKouf,cAEhB/mf,IAAK,SAAUrK,GACXgD,KAAKouf,aAAepxf,GAExB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAekmf,EAAS1yf,UAAW,YACtCqM,IAAK,WACD,OAAO1H,KAAKquf,YAEhBhnf,IAAK,SAAUrK,GACXgD,KAAKquf,WAAarxf,GAEtB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAekmf,EAAS1yf,UAAW,cACtCqM,IAAK,WACD,OAAO1H,KAAKsuf,cAEhBjnf,IAAK,SAAUrK,GACXgD,KAAKsuf,aAAetxf,GAExB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAekmf,EAAS1yf,UAAW,gBACtCqM,IAAK,WACD,OAAO1H,KAAKuuf,gBAEhBlnf,IAAK,SAAUrK,GACXgD,KAAKuuf,eAAiBvxf,GAE1B2K,YAAY,EACZC,cAAc,IAElBmmf,EAAS1yf,UAAUiX,QAAU,WACpB7U,EAAkBuC,KAAKwM,OACxBxM,KAAKwM,KAAK8F,UAET7U,EAAkBuC,KAAK0M,MACxB1M,KAAK0M,IAAI4F,UAER7U,EAAkBuC,KAAK2M,SACxB3M,KAAK2M,OAAO2F,UAEX7U,EAAkBuC,KAAKyM,QACxBzM,KAAKyM,MAAM6F,UAEV7U,EAAkBuC,KAAKwuH,aACxBxuH,KAAKwuH,WAAWl8G,UAEf7U,EAAkBuC,KAAKyuH,WACxBzuH,KAAKyuH,SAASn8G,UAEb7U,EAAkBuC,KAAKyuf,eACxBzuf,KAAKyuf,aAAan8e,UAEjB7U,EAAkBuC,KAAK0uf,aACxB1uf,KAAK0uf,WAAWp8e,UAEpBtS,KAAKkuf,WAAQ/yf,EACb6E,KAAKmuf,cAAWhzf,EAChB6E,KAAKguf,YAAS7yf,EACd6E,KAAKiuf,aAAU9yf,EACf6E,KAAKouf,kBAAejzf,EACpB6E,KAAKquf,gBAAalzf,EAClB6E,KAAKuuf,oBAAiBpzf,EACtB6E,KAAKsuf,kBAAenzf,EACpB6E,KAAKwuf,iBAAcrzf,EACnB6E,KAAK2uf,aAAUxzf,GAEnB4yf,EAAS1yf,UAAUuqf,YAAc,WAC7B,IAAI3wN,EAAU,IAAI84N,OAAS5yf,GAS3B,OARA85R,EAAQvoR,IAAMjP,EAAkBuC,KAAK0M,UAAOvR,EAAY6E,KAAK0M,IAAIk5e,cACjE3wN,EAAQtoR,OAASlP,EAAkBuC,KAAK2M,aAAUxR,EAAY6E,KAAK2M,OAAOi5e,cAC1E3wN,EAAQzoR,KAAO/O,EAAkBuC,KAAKwM,WAAQrR,EAAY6E,KAAKwM,KAAKo5e,cACpE3wN,EAAQxoR,MAAQhP,EAAkBuC,KAAKyM,YAAStR,EAAY6E,KAAKyM,MAAMm5e,cACvE3wN,EAAQzmK,WAAa/wH,EAAkBuC,KAAKwuH,iBAAcrzH,EAAY6E,KAAKwuH,WAAWo3X,cACtF3wN,EAAQxmK,SAAWhxH,EAAkBuC,KAAKyuH,eAAYtzH,EAAY6E,KAAKyuH,SAASm3X,cAChF3wN,EAAQy5N,WAAajxf,EAAkBuC,KAAK0uf,iBAAcvzf,EAAY6E,KAAK0uf,WAAW9I,cACtF3wN,EAAQw5N,aAAehxf,EAAkBuC,KAAKyuf,mBAAgBtzf,EAAY6E,KAAKyuf,aAAa7I,cACrF3wN,GAEX84N,EAAS1yf,UAAUmqf,WAAa,SAAUvwN,IACjCx3R,EAAkBw3R,EAAQzoR,OAASyoR,EAAQzoR,gBAAgBugf,KAC5D/sf,KAAKwM,KAAO,IAAIugf,GAAQ/sf,MACxBA,KAAKwM,KAAKg5e,WAAWvwN,EAAQzoR,QAE5B/O,EAAkBw3R,EAAQxoR,QAAUwoR,EAAQxoR,iBAAiBsgf,KAC9D/sf,KAAKyM,MAAQ,IAAIsgf,GAAQ/sf,MACzBA,KAAKyM,MAAM+4e,WAAWvwN,EAAQxoR,SAE7BhP,EAAkBw3R,EAAQvoR,MAAQuoR,EAAQvoR,eAAeqgf,KAC1D/sf,KAAK0M,IAAM,IAAIqgf,GAAQ/sf,MACvBA,KAAK0M,IAAI84e,WAAWvwN,EAAQvoR,OAE3BjP,EAAkBw3R,EAAQtoR,SAAWsoR,EAAQtoR,kBAAkBogf,KAChE/sf,KAAK2M,OAAS,IAAIogf,GAAQ/sf,MAC1BA,KAAK2M,OAAO64e,WAAWvwN,EAAQtoR,UAE9BlP,EAAkBw3R,EAAQzmK,aAAeymK,EAAQzmK,sBAAsBu+X,KACxE/sf,KAAKwuH,WAAa,IAAIu+X,GAAQ/sf,MAC9BA,KAAKwuH,WAAWg3X,WAAWvwN,EAAQzmK,cAElC/wH,EAAkBw3R,EAAQxmK,WAAawmK,EAAQxmK,oBAAoBs+X,KACpE/sf,KAAKyuH,SAAW,IAAIs+X,GAAQ/sf,MAC5BA,KAAKyuH,SAAS+2X,WAAWvwN,EAAQxmK,YAEhChxH,EAAkBw3R,EAAQw5N,eAAiBx5N,EAAQw5N,wBAAwB1B,KAC5E/sf,KAAKyuf,aAAe,IAAI1B,GAAQ/sf,MAChCA,KAAKyuf,aAAajJ,WAAWvwN,EAAQw5N,gBAEpChxf,EAAkBw3R,EAAQy5N,aAAez5N,EAAQy5N,sBAAsB3B,KACxE/sf,KAAK0uf,WAAa,IAAI3B,GAAQ/sf,MAC9BA,KAAK0uf,WAAWlJ,WAAWvwN,EAAQy5N,cAGpCX,KC7KPa,GAA0B,WAC1B,SAASA,EAASruf,GACdP,KAAK6uf,yBAAsB1zf,EAC3B6E,KAAKilf,eAAY9pf,EACjB6E,KAAKilf,UAAY1kf,EA6HrB,OA3HAjC,OAAOuJ,eAAe+mf,EAASvzf,UAAW,mBACtCqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,oBAEjC/F,IAAK,SAAUrK,GACXgD,KAAKg3H,iBAAiB,kBAAmBh6H,IAE7C2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe+mf,EAASvzf,UAAW,mBACtCqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,oBAEjC/F,IAAK,SAAUrK,GACXgD,KAAKg3H,iBAAiB,kBAAmBh6H,IAE7C2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe+mf,EAASvzf,UAAW,gBACtCqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,iBAEjC/F,IAAK,SAAUrK,GACXgD,KAAKg3H,iBAAiB,eAAgBh6H,IAE1C2K,YAAY,EACZC,cAAc,IAElBgnf,EAASvzf,UAAU+R,iBAAmB,SAAU4e,GAE5C,GADehsB,KAAKmlf,SAASn5d,GACf,CACV,IAAI1iB,EAAey/d,GAAcmB,gBAAgB0kB,EAAS3lB,iBAAkBj9c,GAC5E,IAAKvuB,EAAkBuC,KAAK6uf,sBAAwB7uf,KAAK6uf,oBAAoB3lB,eAAeziQ,YAAYn9N,GACpG,OAAOtJ,KAAK6uf,oBAAoB3lB,eAAexhe,IAAI4B,GAG3D,OAAOslf,EAASxJ,wBAAwBp5d,IAE5C4ie,EAASvzf,UAAU27H,iBAAmB,SAAUhrG,EAAUhvB,GAItD,IAHIS,EAAkBT,IAAoB,KAAVA,KAC5BA,EAAQ4xf,EAASxJ,wBAAwBp5d,IAEzCvuB,EAAkBuC,KAAK6uf,qBACvB7uf,KAAK8uf,wBAAwB9ie,EAAUhvB,OAEtC,CACD,IAAIsM,EAAey/d,GAAcmB,gBAAgBlqe,KAAK6uf,oBAAoB5lB,iBAAkBj9c,GAC5F,GAAIhsB,KAAK6uf,oBAAoB3lB,eAAeziQ,YAAYn9N,IACpDtJ,KAAK6uf,oBAAoB3lB,eAAexhe,IAAI4B,KAAkBtM,EAE9D,OAEJgD,KAAK6uf,oBAAsBD,EAASG,qBAAqB3jB,mBAAmBpre,KAAK6uf,oBAAqB7ie,EAAUhvB,KAGxH4xf,EAASxJ,wBAA0B,SAAUp5d,GACzC,IAAIhvB,OAAQ7B,EACZ,OAAQ6wB,GACJ,IAAK,kBACDhvB,EAAQ,UACR,MACJ,IAAK,kBACDA,EAAQ,QACR,MACJ,IAAK,eACDA,EAAQ,cAGhB,OAAOA,GAEX4xf,EAASvzf,UAAUyzf,wBAA0B,SAAU9ie,EAAUkyG,GAC7D,IAAI8wX,EAAoB,IAAIrpR,GAC5B3lO,KAAKivf,iBAAiB,kBAAmBjje,EAAUkyG,EAAW8wX,GAC9Dhvf,KAAKivf,iBAAiB,kBAAmBjje,EAAUkyG,EAAW8wX,GAC9Dhvf,KAAKivf,iBAAiB,eAAgBjje,EAAUkyG,EAAW8wX,GAE3Dhvf,KAAK6uf,oBAAsBD,EAASG,qBAAqB7jB,gBAAgB8jB,EAAmBJ,EAAS3lB,mBAGzG2lB,EAASvzf,UAAU4zf,iBAAmB,SAAUjje,EAAUg+c,EAAkB9rW,EAAW8wX,GACnF,IAAI1lf,EACJA,EAAey/d,GAAcmB,gBAAgB0kB,EAAS3lB,iBAAkBj9c,GACpEA,IAAag+c,EACbglB,EAAkB5qf,IAAIkF,EAAc40H,GAGpC8wX,EAAkB5qf,IAAIkF,EAAcslf,EAASxJ,wBAAwBp5d,KAG7E4ie,EAASvzf,UAAUiX,QAAU,WACpB7U,EAAkBuC,KAAK6uf,sBACxBD,EAASG,qBAAqBxqf,OAAOvE,KAAK6uf,qBAE9C7uf,KAAK6uf,yBAAsB1zf,GAE/Byzf,EAASvzf,UAAUuqf,YAAc,WAC7B,IAAIsJ,EAAU,IAAIN,OAASzzf,GAI3B,OAHA+zf,EAAQv9b,gBAAkB3xD,KAAK2xD,gBAC/Bu9b,EAAQC,gBAAkBnvf,KAAKmvf,gBAC/BD,EAAQE,aAAepvf,KAAKovf,aACrBF,GAEXN,EAASvzf,UAAUmqf,WAAa,SAAU0J,GACjCzxf,EAAkByxf,IAAazxf,EAAkByxf,EAAQL,uBAC1D7uf,KAAK2xD,gBAAkBu9b,EAAQv9b,gBAC/B3xD,KAAKmvf,gBAAkBD,EAAQC,gBAC/Bnvf,KAAKovf,aAAeF,EAAQE,eAGpCR,EAASvzf,UAAU8pf,SAAW,SAAUn5d,GACpC,IAAKvuB,EAAkBuC,KAAK6uf,qBAAsB,CAC9C,IAAIvlf,EAAey/d,GAAcmB,gBAAgBlqe,KAAK6uf,oBAAoB5lB,iBAAkBj9c,GAC5F,OAAOhsB,KAAK6uf,oBAAoB3lB,eAAeziQ,YAAYn9N,GAE/D,OAAO,GAEXslf,EAAS5+b,MAAQ,WACbhwD,KAAK+uf,qBAAqB/+b,SAE9B4+b,EAASG,qBAAuB,IAAI9jB,GACpC2jB,EAAS3lB,iBAAmB,EACrB2lB,KC/HPS,GAA8B,WAC9B,SAASA,EAAaC,GAClBtvf,KAAKuvf,uBAAoBp0f,EACzB6E,KAAKi1R,QAAU,IAAI84N,GAAS/tf,MAC5BA,KAAKkvf,QAAU,IAAIN,GAAS5uf,MAC5BA,KAAKilf,eAAY9pf,EACjB6E,KAAKilf,UAAYqK,EACjBtvf,KAAKwvf,uBAAuB,IAAK,EAAG,IAAK,GAuQ7C,OArQAlxf,OAAOuJ,eAAewnf,EAAah0f,UAAW,eAC1CqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,gBAEjC/F,IAAK,SAAUrK,GACX,GAAIA,EAAQ,GAAKA,EAAQ,MACrB,MAAM,IAAI85N,WAAW,sDAEzB92N,KAAKg3H,iBAAiB,cAAeh6H,IAEzC2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAewnf,EAAah0f,UAAW,cAC1CqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,eAEjC/F,IAAK,SAAUrK,GACXgD,KAAKg3H,iBAAiB,aAAch6H,IAExC2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAewnf,EAAah0f,UAAW,aAC1CqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,cAEjC/F,IAAK,SAAUrK,GACXgD,KAAKg3H,iBAAiB,YAAah6H,IAEvC2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAewnf,EAAah0f,UAAW,eAC1CqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,gBAEjC/F,IAAK,SAAUrK,GACXgD,KAAKg3H,iBAAiB,cAAeh6H,IAEzC2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAewnf,EAAah0f,UAAW,gBAC1CqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,iBAEjC/F,IAAK,SAAUrK,GACXgD,KAAKg3H,iBAAiB,eAAgBh6H,IAE1C2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAewnf,EAAah0f,UAAW,cAC1CqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,eAEjC/F,IAAK,SAAUrK,GACX,GAAIA,GAAS,MAAQA,EAAQ,KACzB,MAAM,IAAI85N,WAAW,yDAEzB92N,KAAKg3H,iBAAiB,aAAch6H,IAExC2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAewnf,EAAah0f,UAAW,kBAC1CqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,mBAEjC/F,IAAK,SAAUrK,GACXgD,KAAKg3H,iBAAiB,iBAAkBh6H,IAE5C2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAewnf,EAAah0f,UAAW,kBAC1CqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,mBAEjC/F,IAAK,SAAUrK,GACXgD,KAAKg3H,iBAAiB,iBAAkBh6H,IAE5C2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAewnf,EAAah0f,UAAW,sBAC1CqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,uBAEjC/F,IAAK,SAAUrK,GACXgD,KAAKg3H,iBAAiB,qBAAsBh6H,IAEhD2K,YAAY,EACZC,cAAc,IAElBynf,EAAah0f,UAAU+R,iBAAmB,SAAU4e,GAEhD,GADehsB,KAAKmlf,SAASn5d,GACf,CACV,IAAI1iB,EAAey/d,GAAcmB,gBAAgBmlB,EAAapmB,iBAAkBj9c,GAChF,IAAKvuB,EAAkBuC,KAAKuvf,oBAAsBvvf,KAAKuvf,kBAAkBrmB,eAAeziQ,YAAYn9N,GAChG,OAAOtJ,KAAKuvf,kBAAkBrmB,eAAexhe,IAAI4B,GAGzD,OAAO+lf,EAAajK,wBAAwBp5d,IAEhDqje,EAAah0f,UAAU27H,iBAAmB,SAAUhrG,EAAUhvB,GAI1D,IAHIS,EAAkBT,IAAoB,KAAVA,KAC5BA,EAAQqyf,EAAajK,wBAAwBp5d,IAE7CvuB,EAAkBuC,KAAKuvf,mBACvBvvf,KAAKyvf,4BAA4Bzje,EAAUhvB,OAE1C,CACD,IAAIsM,EAAey/d,GAAcmB,gBAAgBlqe,KAAKuvf,kBAAkBtmB,iBAAkBj9c,GAC1F,GAAIhsB,KAAKuvf,kBAAkBrmB,eAAeziQ,YAAYn9N,IAClDtJ,KAAKuvf,kBAAkBrmB,eAAexhe,IAAI4B,KAAkBtM,EAE5D,OAEJgD,KAAKuvf,kBAAoBF,EAAaK,mBAAmBtkB,mBAAmBpre,KAAKuvf,kBAAmBvje,EAAUhvB,KAGtHqyf,EAAah0f,UAAUo0f,4BAA8B,SAAUzje,EAAUkyG,GACrE,IAAIyxX,EAAwB,IAAIhqR,GAChC3lO,KAAK4vf,qBAAqB,cAAe5je,EAAUkyG,EAAWyxX,GAC9D3vf,KAAK4vf,qBAAqB,aAAc5je,EAAUkyG,EAAWyxX,GAC7D3vf,KAAK4vf,qBAAqB,YAAa5je,EAAUkyG,EAAWyxX,GAC5D3vf,KAAK4vf,qBAAqB,eAAgB5je,EAAUkyG,EAAWyxX,GAC/D3vf,KAAK4vf,qBAAqB,cAAe5je,EAAUkyG,EAAWyxX,GAC9D3vf,KAAK4vf,qBAAqB,aAAc5je,EAAUkyG,EAAWyxX,GAC7D3vf,KAAK4vf,qBAAqB,iBAAkB5je,EAAUkyG,EAAWyxX,GACjE3vf,KAAK4vf,qBAAqB,iBAAkB5je,EAAUkyG,EAAWyxX,GACjE3vf,KAAK4vf,qBAAqB,qBAAsB5je,EAAUkyG,EAAWyxX,GACrE3vf,KAAKuvf,kBAAoBF,EAAaK,mBAAmBxkB,gBAAgBykB,EAAuBN,EAAapmB,mBAGjHomB,EAAah0f,UAAUu0f,qBAAuB,SAAU5je,EAAUg+c,EAAkB9rW,EAAWyxX,GAC3F,IAAIrmf,EACJA,EAAey/d,GAAcmB,gBAAgBmlB,EAAapmB,iBAAkBj9c,GACxEA,IAAag+c,GACb2lB,EAAsBvrf,IAAIkF,EAAc40H,IAGhDmxX,EAAajK,wBAA0B,SAAUp5d,GAC7C,IAAIhvB,OAAQ7B,EACZ,OAAQ6wB,GACJ,IAAK,cACDhvB,EAAQ,EACR,MACJ,IAAK,aACDA,EAAQ,IACR,MACJ,IAAK,YAGL,IAAK,eACDA,EAAQ,EACR,MACJ,IAAK,cACDA,EAAQ,IACR,MACJ,IAAK,aACDA,EAAQ,EACR,MACJ,IAAK,iBACDA,EAAQ,OACR,MACJ,IAAK,iBACDA,EAAQ,EACR,MACJ,IAAK,qBACDA,EAAQ,QAGhB,OAAOA,GAEXqyf,EAAah0f,UAAUm0f,uBAAyB,SAAUhjf,EAAME,EAAKD,EAAOE,GACxE3M,KAAKkrP,WAAa1+O,EAClBxM,KAAKmrP,UAAYz+O,EACjB1M,KAAKorP,YAAc3+O,EACnBzM,KAAKqrP,aAAe1+O,GAExB0if,EAAah0f,UAAUw0f,uBAAyB,WAC5C7vf,KAAKi1R,QAAQzoR,KAAKu0T,UAAY,SAC9B/gU,KAAKi1R,QAAQzoR,KAAK4gF,UAAY,GAC9BptF,KAAKi1R,QAAQxoR,MAAMs0T,UAAY,SAC/B/gU,KAAKi1R,QAAQxoR,MAAM2gF,UAAY,GAC/BptF,KAAKi1R,QAAQvoR,IAAIq0T,UAAY,SAC7B/gU,KAAKi1R,QAAQvoR,IAAI0gF,UAAY,GAC7BptF,KAAKi1R,QAAQtoR,OAAOo0T,UAAY,SAChC/gU,KAAKi1R,QAAQtoR,OAAOygF,UAAY,GAChCptF,KAAKi1R,QAAQzmK,WAAWuyM,UAAY,SACpC/gU,KAAKi1R,QAAQzmK,WAAWphC,UAAY,GACpCptF,KAAKi1R,QAAQxmK,SAASsyM,UAAY,SAClC/gU,KAAKi1R,QAAQxmK,SAASrhC,UAAY,IAEtCiia,EAAah0f,UAAUiX,QAAU,WACxB7U,EAAkBuC,KAAKi1R,UACxBj1R,KAAKi1R,QAAQ3iR,UAEZ7U,EAAkBuC,KAAKkvf,UACxBlvf,KAAKkvf,QAAQ58e,UAEZ7U,EAAkBuC,KAAKuvf,oBACxBF,EAAaK,mBAAmBnrf,OAAOvE,KAAKuvf,mBAEhDvvf,KAAKuvf,uBAAoBp0f,EACzB6E,KAAKi1R,aAAU95R,EACf6E,KAAKkvf,aAAU/zf,GAEnBk0f,EAAah0f,UAAUuqf,YAAc,WACjC,IAAIkK,EAAc,IAAIT,OAAal0f,GAYnC,OAXA20f,EAAY7G,WAAajpf,KAAKipf,WAC9B6G,EAAYC,eAAiB/vf,KAAK+vf,eAClCD,EAAYl5N,YAAc52R,KAAK42R,YAC/Bk5N,EAAY5kQ,WAAalrP,KAAKkrP,WAC9B4kQ,EAAY1kQ,YAAcprP,KAAKorP,YAC/B0kQ,EAAY3kQ,UAAYnrP,KAAKmrP,UAC7B2kQ,EAAYzkQ,aAAerrP,KAAKqrP,aAChCykQ,EAAYE,eAAiBhwf,KAAKgwf,eAClCF,EAAYG,mBAAqBjwf,KAAKiwf,mBACtCH,EAAY76N,QAAUx3R,EAAkBuC,KAAKi1R,cAAW95R,EAAY6E,KAAKi1R,QAAQ2wN,cACjFkK,EAAYZ,QAAUzxf,EAAkBuC,KAAKkvf,cAAW/zf,EAAY6E,KAAKkvf,QAAQtJ,cAC1EkK,GAEXT,EAAah0f,UAAU8pf,SAAW,SAAUn5d,GACxC,IAAKvuB,EAAkBuC,KAAKuvf,mBAAoB,CAC5C,IAAIjmf,EAAey/d,GAAcmB,gBAAgBlqe,KAAKuvf,kBAAkBtmB,iBAAkBj9c,GAC1F,OAAOhsB,KAAKuvf,kBAAkBrmB,eAAeziQ,YAAYn9N,GAE7D,OAAO,GAEX+lf,EAAah0f,UAAUmqf,WAAa,SAAUxpd,GACrCv+B,EAAkBu+B,KACdv+B,EAAkBu+B,EAAOuzd,qBAC1Bvvf,KAAK42R,YAAc56P,EAAO46P,YAC1B52R,KAAKkrP,WAAalvN,EAAOkvN,WACzBlrP,KAAKmrP,UAAYnvN,EAAOmvN,UACxBnrP,KAAKorP,YAAcpvN,EAAOovN,YAC1BprP,KAAKqrP,aAAervN,EAAOqvN,aAC3BrrP,KAAKipf,WAAajtd,EAAOitd,WACzBjpf,KAAK+vf,eAAiB/zd,EAAO+zd,eAC7B/vf,KAAKgwf,eAAiBh0d,EAAOg0d,eAC7Bhwf,KAAKiwf,mBAAqBj0d,EAAOi0d,oBAEhCxyf,EAAkBu+B,EAAOi5P,WAC1Bj1R,KAAKi1R,QAAU,IAAI84N,GAAS/tf,MAC5BA,KAAKi1R,QAAQuwN,WAAWxpd,EAAOi5P,UAE9Bx3R,EAAkBu+B,EAAOkzd,WAC1Blvf,KAAKkvf,QAAU,IAAIN,GAAS5uf,MAC5BA,KAAKkvf,QAAQ1J,WAAWxpd,EAAOkzd,YAI3CG,EAAar/b,MAAQ,WACjBhwD,KAAK0vf,mBAAmB1/b,SAE5Bq/b,EAAaK,mBAAqB,IAAIzkB,GACtCokB,EAAapmB,iBAAmB,EACzBomB,KC/QPa,GAA4B,WAC5B,SAASA,EAAW3vf,GAChBP,KAAKmwf,qBAAkBh1f,EAIvB6E,KAAKi1R,QAAU,IAAI84N,GAAS/tf,MAI5BA,KAAKilf,eAAY9pf,EAIjB6E,KAAKowf,YAAc,EAInBpwf,KAAKqwf,WAAa,EAClBrwf,KAAKilf,UAAY1kf,EAmQrB,OAjQAjC,OAAOuJ,eAAeqof,EAAW70f,UAAW,cACxCqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,eAEjC/F,IAAK,SAAUrK,GACXgD,KAAKg3H,iBAAiB,aAAch6H,IAExC2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeqof,EAAW70f,UAAW,mBACxCqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,oBAEjC/F,IAAK,SAAUrK,GACXgD,KAAKg3H,iBAAiB,kBAAmBh6H,IAE7C2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeqof,EAAW70f,UAAW,uBACxCqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,wBAEjC/F,IAAK,SAAUrK,GACXgD,KAAKg3H,iBAAiB,sBAAuBh6H,IAEjD2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeqof,EAAW70f,UAAW,aACxCqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,cAEjC/F,IAAK,SAAUrK,GACXgD,KAAKg3H,iBAAiB,YAAah6H,IAEvC2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeqof,EAAW70f,UAAW,kBACxCqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,mBAEjC/F,IAAK,SAAUrK,GACXgD,KAAKg3H,iBAAiB,iBAAkBh6H,IAE5C2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeqof,EAAW70f,UAAW,sBACxCqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,uBAEjC/F,IAAK,SAAUrK,GACXgD,KAAKg3H,iBAAiB,qBAAsBh6H,IAEhD2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeqof,EAAW70f,UAAW,yBACxCqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,0BAEjC/F,IAAK,SAAUrK,GACXgD,KAAKg3H,iBAAiB,wBAAyBh6H,IAEnD2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeqof,EAAW70f,UAAW,YACxCqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,aAEjC/F,IAAK,SAAUrK,GACXgD,KAAKg3H,iBAAiB,WAAYh6H,IAEtC2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeqof,EAAW70f,UAAW,UACxCqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,WAEjC/F,IAAK,SAAUrK,GACG,IAAVA,GAAoC,YAApBgD,KAAKswf,YAAgD,YAApBtwf,KAAKswf,WAG7B,SAApBtwf,KAAKswf,aACVtzf,EAAQ,GAHRA,EAAQ,EAKZgD,KAAKg3H,iBAAiB,SAAUh6H,IAEpC2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeqof,EAAW70f,UAAW,cACxCqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,eAEjC/F,IAAK,SAAUrK,GAEPgD,KAAK+V,OADK,YAAV/Y,GAAiC,YAAVA,EACT,EAGA,EAElBgD,KAAKg3H,iBAAiB,aAAch6H,IAExC2K,YAAY,EACZC,cAAc,IAElBsof,EAAW70f,UAAU+R,iBAAmB,SAAU4e,GAE9C,GADehsB,KAAKmlf,SAASn5d,GACf,CACV,IAAI1iB,EAAey/d,GAAcmB,gBAAgBgmB,EAAWjnB,iBAAkBj9c,GAC9E,IAAKvuB,EAAkBuC,KAAKmwf,kBAAoBnwf,KAAKmwf,gBAAgBjnB,eAAeziQ,YAAYn9N,GAC5F,OAAOtJ,KAAKmwf,gBAAgBjnB,eAAexhe,IAAI4B,GAGvD,OAAO4mf,EAAW9K,wBAAwBp5d,IAE9Ckke,EAAW70f,UAAU27H,iBAAmB,SAAUhrG,EAAUhvB,GAIxD,IAHIS,EAAkBT,IAAoB,KAAVA,KAC5BA,EAAQkzf,EAAW9K,wBAAwBp5d,IAE3CvuB,EAAkBuC,KAAKmwf,iBACvBnwf,KAAKuwf,0BAA0Bvke,EAAUhvB,OAExC,CACD,IAAIsM,EAAey/d,GAAcmB,gBAAgBlqe,KAAKmwf,gBAAgBlnB,iBAAkBj9c,GACxF,GAAIhsB,KAAKmwf,gBAAgBjnB,eAAeziQ,YAAYn9N,IAChDtJ,KAAKmwf,gBAAgBjnB,eAAexhe,IAAI4B,KAAkBtM,EAE1D,OAEJgD,KAAKmwf,gBAAkBD,EAAWM,iBAAiBplB,mBAAmBpre,KAAKmwf,gBAAiBnke,EAAUhvB,KAG9Gkzf,EAAW70f,UAAUk1f,0BAA4B,SAAUvke,EAAUkyG,GACjE,IAAIuyX,EAAsB,IAAI9qR,GAC9B3lO,KAAK0wf,mBAAmB,wBAAyB1ke,EAAUkyG,EAAWuyX,GACtEzwf,KAAK0wf,mBAAmB,WAAY1ke,EAAUkyG,EAAWuyX,GACzDzwf,KAAK0wf,mBAAmB,SAAU1ke,EAAUkyG,EAAWuyX,GACvDzwf,KAAK0wf,mBAAmB,aAAc1ke,EAAUkyG,EAAWuyX,GAC3Dzwf,KAAK0wf,mBAAmB,aAAc1ke,EAAUkyG,EAAWuyX,GAC3Dzwf,KAAK0wf,mBAAmB,kBAAmB1ke,EAAUkyG,EAAWuyX,GAChEzwf,KAAK0wf,mBAAmB,sBAAuB1ke,EAAUkyG,EAAWuyX,GACpEzwf,KAAK0wf,mBAAmB,YAAa1ke,EAAUkyG,EAAWuyX,GAC1Dzwf,KAAK0wf,mBAAmB,iBAAkB1ke,EAAUkyG,EAAWuyX,GAC/Dzwf,KAAK0wf,mBAAmB,qBAAsB1ke,EAAUkyG,EAAWuyX,GACnEzwf,KAAK0wf,mBAAmB,sBAAuB1ke,EAAUkyG,EAAWuyX,GACpEzwf,KAAKmwf,gBAAkBD,EAAWM,iBAAiBtlB,gBAAgBulB,EAAqBP,EAAWjnB,mBAGvGinB,EAAW70f,UAAUq1f,mBAAqB,SAAU1ke,EAAUg+c,EAAkB9rW,EAAWuyX,GACvF,IAAInnf,EACJA,EAAey/d,GAAcmB,gBAAgBgmB,EAAWjnB,iBAAkBj9c,GACtEA,IAAag+c,GACbymB,EAAoBrsf,IAAIkF,EAAc40H,IAG9CgyX,EAAW9K,wBAA0B,SAAUp5d,GAC3C,IAAIhvB,OAAQ7B,EACZ,OAAQ6wB,GACJ,IAAK,wBACDhvB,GAAQ,EACR,MACJ,IAAK,WACDA,GAAQ,EACR,MACJ,IAAK,SACDA,EAAQ,EACR,MACJ,IAAK,aACDA,EAAQ,OACR,MACJ,IAAK,aAGL,IAAK,kBACDA,EAAQ,EACR,MACJ,IAAK,sBACDA,EAAQ,QACR,MACJ,IAAK,YAGL,IAAK,iBACDA,EAAQ,EACR,MACJ,IAAK,qBACDA,EAAQ,QAGhB,OAAOA,GAEXkzf,EAAW70f,UAAUuqf,YAAc,WAC/B,IAAI5pd,EAAS,IAAIk0d,EAWjB,OAVAl0d,EAAO20d,sBAAwB3wf,KAAK2wf,sBACpC30d,EAAOs0d,WAAatwf,KAAKswf,WACzBt0d,EAAOjmB,OAAS/V,KAAK+V,OACrBimB,EAAOlQ,SAAW9rB,KAAK8rB,SACvBkQ,EAAO40d,WAAa5wf,KAAK4wf,WACzB50d,EAAO60d,gBAAkB7wf,KAAK6wf,gBAC9B70d,EAAO80d,oBAAsB9wf,KAAK8wf,oBAClC90d,EAAO+0d,UAAY/wf,KAAK+wf,UACxB/0d,EAAOg1d,eAAiBhxf,KAAKgxf,eAC7Bh1d,EAAOi1d,mBAAqBjxf,KAAKixf,mBAC1Bj1d,GAEXk0d,EAAW70f,UAAU8pf,SAAW,SAAUn5d,GACtC,IAAKvuB,EAAkBuC,KAAKmwf,iBAAkB,CAC1C,IAAI7mf,EAAey/d,GAAcmB,gBAAgBlqe,KAAKmwf,gBAAgBlnB,iBAAkBj9c,GACxF,OAAOhsB,KAAKmwf,gBAAgBjnB,eAAeziQ,YAAYn9N,GAE3D,OAAO,GAEX4mf,EAAW70f,UAAUmqf,WAAa,SAAUxpd,GACnCv+B,EAAkBu+B,KACdv+B,EAAkBu+B,EAAOm0d,mBAC1Bnwf,KAAK2wf,sBAAwB30d,EAAO20d,sBACpC3wf,KAAK8rB,SAAWkQ,EAAOlQ,SACvB9rB,KAAKswf,WAAat0d,EAAOs0d,WACzBtwf,KAAK+V,OAASimB,EAAOjmB,OACrB/V,KAAK4wf,WAAa50d,EAAO40d,WACzB5wf,KAAK6wf,gBAAkB70d,EAAO60d,gBAC9B7wf,KAAK8wf,oBAAsB90d,EAAO80d,oBAClC9wf,KAAK+wf,UAAY/0d,EAAO+0d,UACxB/wf,KAAKgxf,eAAiBh1d,EAAOg1d,eAC7Bhxf,KAAKixf,mBAAqBj1d,EAAOi1d,oBAEhCxzf,EAAkBu+B,EAAOi5P,WAC1Bj1R,KAAKi1R,QAAU,IAAI84N,GAAS/tf,MAC5BA,KAAKi1R,QAAQgwN,UAAYjpd,EACzBh8B,KAAKi1R,QAAQuwN,WAAWxpd,EAAOi5P,YAI3Ci7N,EAAW70f,UAAUiX,QAAU,WACtB7U,EAAkBuC,KAAKi1R,UACxBj1R,KAAKi1R,QAAQ3iR,UAEZ7U,EAAkBuC,KAAKmwf,kBACxBD,EAAWM,iBAAiBjsf,OAAOvE,KAAKmwf,iBAE5Cnwf,KAAKowf,iBAAcj1f,EACnB6E,KAAKqwf,gBAAal1f,EAClB6E,KAAKi1R,aAAU95R,EACf6E,KAAKmwf,qBAAkBh1f,GAE3B+0f,EAAWlgc,MAAQ,WACfhwD,KAAKwwf,iBAAiBxgc,SAE1Bkgc,EAAWM,iBAAmB,IAAIvlB,GAClCilB,EAAWjnB,iBAAmB,EACvBinB,KCrRPgB,GAA6B,WAC7B,SAASA,EAAY3wf,GACjBP,KAAKmxf,sBAAmBh2f,EACxB6E,KAAKi1R,QAAU,IAAI84N,GAAS/tf,MAC5BA,KAAKkvf,QAAU,IAAIN,GAAS5uf,MAC5BA,KAAKilf,UAAY1kf,EACjBP,KAAKi1R,QAAU,IAAI84N,GAAS/tf,MAC5BA,KAAKkvf,QAAU,IAAIN,GAAS5uf,MAiQhC,OA/PA1B,OAAOuJ,eAAeqpf,EAAY71f,UAAW,cACzCqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,eAEjC/F,IAAK,SAAUrK,GACXgD,KAAKg3H,iBAAiB,aAAch6H,IAExC2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeqpf,EAAY71f,UAAW,eACzCqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,gBAEjC/F,IAAK,SAAUrK,GACXgD,KAAKg3H,iBAAiB,cAAeh6H,IAEzC2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeqpf,EAAY71f,UAAW,aACzCqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,cAEjC/F,IAAK,SAAUrK,GACXgD,KAAKg3H,iBAAiB,YAAah6H,IAEvC2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeqpf,EAAY71f,UAAW,gBACzCqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,iBAEjC/F,IAAK,SAAUrK,GACXgD,KAAKg3H,iBAAiB,eAAgBh6H,IAE1C2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeqpf,EAAY71f,UAAW,aACzCqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,cAEjC/F,IAAK,SAAUrK,GACXgD,KAAKg3H,iBAAiB,YAAah6H,IAEvC2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeqpf,EAAY71f,UAAW,cACzCqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,eAEjC/F,IAAK,SAAUrK,GACXgD,KAAKg3H,iBAAiB,aAAch6H,IAExC2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeqpf,EAAY71f,UAAW,WACzCqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,YAEjC/F,IAAK,SAAUrK,GACXgD,KAAKg3H,iBAAiB,UAAWh6H,IAErC2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeqpf,EAAY71f,UAAW,kBACzCqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,mBAEjC/F,IAAK,SAAUrK,GACXgD,KAAKg3H,iBAAiB,iBAAkBh6H,IAE5C2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeqpf,EAAY71f,UAAW,qBACzCqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,sBAEjC/F,IAAK,SAAUrK,GACXgD,KAAKg3H,iBAAiB,oBAAqBh6H,IAE/C2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeqpf,EAAY71f,UAAW,sBACzCqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,uBAEjC/F,IAAK,SAAUrK,GACXgD,KAAKg3H,iBAAiB,qBAAsBh6H,IAEhD2K,YAAY,EACZC,cAAc,IAElBspf,EAAY71f,UAAU+R,iBAAmB,SAAU4e,GAE/C,GADehsB,KAAKmlf,SAASn5d,GACf,CACV,IAAI1iB,EAAey/d,GAAcmB,gBAAgBgnB,EAAYjoB,iBAAkBj9c,GAC/E,IAAKvuB,EAAkBuC,KAAKmxf,mBAAqBnxf,KAAKmxf,iBAAiBjoB,eAAeziQ,YAAYn9N,GAC9F,OAAOtJ,KAAKmxf,iBAAiBjoB,eAAexhe,IAAI4B,GAGxD,OAAO4nf,EAAY9L,wBAAwBp5d,IAE/Ckle,EAAY71f,UAAU27H,iBAAmB,SAAUhrG,EAAUhvB,GAIzD,IAHIS,EAAkBT,IAAoB,KAAVA,KAC5BA,EAAQk0f,EAAY9L,wBAAwBp5d,IAE5CvuB,EAAkBuC,KAAKmxf,kBACvBnxf,KAAKoxf,2BAA2Bple,EAAUhvB,OAEzC,CACD,IAAIsM,EAAey/d,GAAcmB,gBAAgBlqe,KAAKmxf,iBAAiBloB,iBAAkBj9c,GACzF,GAAIhsB,KAAKmxf,iBAAiBjoB,eAAeziQ,YAAYn9N,IACjDtJ,KAAKmxf,iBAAiBjoB,eAAexhe,IAAI4B,KAAkBtM,EAE3D,OAEJgD,KAAKmxf,iBAAmBD,EAAYG,kBAAkBjmB,mBAAmBpre,KAAKmxf,iBAAkBnle,EAAUhvB,KAGlHk0f,EAAY71f,UAAU+1f,2BAA6B,SAAUple,EAAUkyG,GACnE,IAAIozX,EAAuB,IAAI3rR,GAC/B3lO,KAAKuxf,oBAAoB,aAAcvle,EAAUkyG,EAAWozX,GAC5Dtxf,KAAKuxf,oBAAoB,YAAavle,EAAUkyG,EAAWozX,GAC3Dtxf,KAAKuxf,oBAAoB,eAAgBvle,EAAUkyG,EAAWozX,GAC9Dtxf,KAAKuxf,oBAAoB,cAAevle,EAAUkyG,EAAWozX,GAC7Dtxf,KAAKuxf,oBAAoB,YAAavle,EAAUkyG,EAAWozX,GAC3Dtxf,KAAKuxf,oBAAoB,aAAcvle,EAAUkyG,EAAWozX,GAC5Dtxf,KAAKuxf,oBAAoB,UAAWvle,EAAUkyG,EAAWozX,GACzDtxf,KAAKuxf,oBAAoB,iBAAkBvle,EAAUkyG,EAAWozX,GAChEtxf,KAAKuxf,oBAAoB,oBAAqBvle,EAAUkyG,EAAWozX,GACnEtxf,KAAKuxf,oBAAoB,qBAAsBvle,EAAUkyG,EAAWozX,GACpEtxf,KAAKmxf,iBAAmBD,EAAYG,kBAAkBnmB,gBAAgBomB,EAAsBJ,EAAYjoB,mBAG5GioB,EAAY71f,UAAUk2f,oBAAsB,SAAUvle,EAAUg+c,EAAkB9rW,EAAWozX,GACzF,IAAIhof,EACJA,EAAey/d,GAAcmB,gBAAgBgnB,EAAYjoB,iBAAkBj9c,GACvEA,IAAag+c,GACbsnB,EAAqBltf,IAAIkF,EAAc40H,IAG/CgzX,EAAY9L,wBAA0B,SAAUp5d,GAC5C,IAAIhvB,OAAQ7B,EACZ,OAAQ6wB,GACJ,IAAK,aAGL,IAAK,YAGL,IAAK,eAGL,IAAK,cACDhvB,OAAQ7B,EACR,MACJ,IAAK,YACD6B,EAAQ,EACR,MACJ,IAAK,aAGL,IAAK,UACDA,EAAQ,EACR,MACJ,IAAK,iBACDA,EAAQ,EACR,MACJ,IAAK,oBACDA,EAAQ,MACR,MACJ,IAAK,qBACDA,EAAQ,QAGhB,OAAOA,GAEXk0f,EAAY71f,UAAUm2f,gBAAkB,WACpC,QAAS/zf,EAAkBuC,KAAKkrP,aACxBztP,EAAkBuC,KAAKorP,cACvB3tP,EAAkBuC,KAAKqrP,eACvB5tP,EAAkBuC,KAAKmrP,aAEnC+lQ,EAAY71f,UAAUiX,QAAU,WACvB7U,EAAkBuC,KAAKi1R,UACxBj1R,KAAKi1R,QAAQ3iR,UAEZ7U,EAAkBuC,KAAKkvf,UACxBlvf,KAAKkvf,QAAQ58e,UAEZ7U,EAAkBuC,KAAKmxf,mBACxBD,EAAYG,kBAAkB9sf,OAAOvE,KAAKmxf,kBAE9Cnxf,KAAKmxf,sBAAmBh2f,EACxB6E,KAAKi1R,aAAU95R,EACf6E,KAAKkvf,aAAU/zf,GAEnB+1f,EAAY71f,UAAUuqf,YAAc,WAChC,IAAI5pd,EAAS,IAAIk1d,OAAY/1f,GAW7B,OAVA6gC,EAAO03B,kBAAoB1zD,KAAK0zD,kBAChC13B,EAAOkvN,WAAalrP,KAAKkrP,WACzBlvN,EAAOovN,YAAcprP,KAAKorP,YAC1BpvN,EAAOmvN,UAAYnrP,KAAKmrP,UACxBnvN,EAAOqvN,aAAerrP,KAAKqrP,aAC3BrvN,EAAOg0d,eAAiBhwf,KAAKgwf,eAC7Bh0d,EAAOi0d,mBAAqBjwf,KAAKiwf,mBACjCj0d,EAAOq5P,UAAYr1R,KAAKq1R,UACxBr5P,EAAOi5P,QAAUx3R,EAAkBuC,KAAKi1R,cAAW95R,EAAY6E,KAAKi1R,QAAQ2wN,cAC5E5pd,EAAOkzd,QAAUzxf,EAAkBuC,KAAKkvf,cAAW/zf,EAAY6E,KAAKkvf,QAAQtJ,cACrE5pd,GAEXk1d,EAAY71f,UAAU8pf,SAAW,SAAUn5d,GACvC,IAAKvuB,EAAkBuC,KAAKmxf,kBAAmB,CAC3C,IAAI7nf,EAAey/d,GAAcmB,gBAAgBlqe,KAAKmxf,iBAAiBloB,iBAAkBj9c,GACzF,OAAOhsB,KAAKmxf,iBAAiBjoB,eAAeziQ,YAAYn9N,GAE5D,OAAO,GAEX4nf,EAAY71f,UAAUmqf,WAAa,SAAUxpd,GACpCv+B,EAAkBu+B,KACdv+B,EAAkBu+B,EAAOm1d,oBAC1Bnxf,KAAKq1R,UAAYr5P,EAAOq5P,UACxBr1R,KAAKkrP,WAAalvN,EAAOkvN,WACzBlrP,KAAKmrP,UAAYnvN,EAAOmvN,UACxBnrP,KAAKorP,YAAcpvN,EAAOovN,YAC1BprP,KAAKqrP,aAAervN,EAAOqvN,aAC3BrrP,KAAKgwf,eAAiBh0d,EAAOg0d,eAC7Bhwf,KAAKm4R,WAAan8P,EAAOm8P,WACzBn4R,KAAKi3R,QAAUj7P,EAAOi7P,QACtBj3R,KAAKiwf,mBAAqBj0d,EAAOi0d,mBACjCjwf,KAAK0zD,kBAAoB13B,EAAO03B,mBAE/Bj2D,EAAkBu+B,EAAOkzd,WAC1Blvf,KAAKkvf,QAAU,IAAIN,GAAS5uf,MAC5BA,KAAKkvf,QAAQ1J,WAAWxpd,EAAOkzd,UAE9Bzxf,EAAkBu+B,EAAOi5P,WAC1Bj1R,KAAKi1R,QAAU,IAAI84N,GAAS/tf,MAC5BA,KAAKi1R,QAAQuwN,WAAWxpd,EAAOi5P,YAI3Ci8N,EAAYlhc,MAAQ,WAChBhwD,KAAKqxf,kBAAkBrhc,SAE3Bkhc,EAAYG,kBAAoB,IAAIpmB,GACpCimB,EAAYjoB,iBAAmB,EACxBioB,KCjRP5ma,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAkBxCz0D,GAAsB,WACtB,SAASA,EAAKnpB,EAAGC,EAAGgJ,EAAOD,GACvB/V,KAAK+M,EAAIA,EACT/M,KAAKgN,EAAIA,EACThN,KAAKgW,MAAQA,EACbhW,KAAK+V,OAASA,EAsBlB,OApBAzX,OAAOuJ,eAAequB,EAAK76B,UAAW,SAIlCqM,IAAK,WACD,OAAO1H,KAAK+M,EAAI/M,KAAKgW,OAEzBrO,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAequB,EAAK76B,UAAW,UAIlCqM,IAAK,WACD,OAAO1H,KAAKgN,EAAIhN,KAAK+V,QAEzBpO,YAAY,EACZC,cAAc,IAEXsuB,KAMP4mS,GAAwB,WACxB,SAASA,EAAO5xE,EAAYC,EAAWC,EAAaC,GAChDrrP,KAAKwM,KAAO0+O,EACZlrP,KAAK0M,IAAMy+O,EACXnrP,KAAKyM,MAAQ2+O,EACbprP,KAAK2M,OAAS0+O,EAiBlB,OAZAyxE,EAAOzhU,UAAUgE,MAAQ,WACrB,OAAO,IAAIy9T,EAAO98T,KAAKwM,KAAMxM,KAAK0M,IAAK1M,KAAKyM,MAAOzM,KAAK2M,SAK5DmwT,EAAOzhU,UAAUiX,QAAU,WACvBtS,KAAKwM,UAAOrR,EACZ6E,KAAKyM,WAAQtR,EACb6E,KAAK0M,SAAMvR,EACX6E,KAAK2M,YAASxR,GAEX2hU,KAMP20L,GAAwB,WACxB,SAASA,IAILzxf,KAAKijf,gBAILjjf,KAAK+M,EAAI,EAIT/M,KAAKgN,EAAI,EAIThN,KAAKgW,MAAQ,EAIbhW,KAAK+V,OAAS,EAId/V,KAAKiS,MAAQ,EA0UjB,OAxUA3T,OAAOuJ,eAAe4pf,EAAOp2f,UAAW,gBAIpCqM,IAAK,WACD,OAAI1H,gBAAgB0if,IAAc1if,KAAKiwJ,KAC5BjwJ,KAAKiwJ,KAAKyhW,YAAYnzf,QAAQyB,MAEhCA,KAAKkjf,iBAAmBljf,KAAKkjf,gBAAgBD,aAC3Cjjf,KAAKkjf,gBAAgBD,aAAa1kf,QAAQyB,OAE7C,GAEZ2H,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4pf,EAAOp2f,UAAW,cAIpCqM,IAAK,WACD,OAAO1H,KAAKijf,aAAaxmf,OAAS,EAAIuD,KAAKijf,aAAa,QAAK9nf,GAEjEwM,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4pf,EAAOp2f,UAAW,aAIpCqM,IAAK,WACD,OAAO1H,KAAKijf,aAAaxmf,OAAS,EAC9BuD,KAAKijf,aAAajjf,KAAKijf,aAAaxmf,OAAS,QAAKtB,GAE1DwM,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4pf,EAAOp2f,UAAW,kBAIpCqM,IAAK,WACD,IAAIiqf,EAAS3xf,KACTiS,EAAQjS,KAAK4xf,aAOjB,OALID,EADAA,aAAkBjP,GACTzwe,EAAQ,EAAI0/e,EAAO1hW,KAAKyhW,YAAYz/e,EAAQ,QAAK9W,EAGjD8W,EAAQ,EAAI0/e,EAAOzO,gBAAgBD,aAAahxe,EAAQ,QAAK9W,GAI9EwM,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4pf,EAAOp2f,UAAW,cAIpCqM,IAAK,WACD,IAAIiqf,EAAS3xf,KACTiS,EAAQjS,KAAK4xf,aACjB,IAAe,IAAX3/e,EAWJ,OAPI0/e,EADAA,aAAkBjP,GACTzwe,EAAQ0/e,EAAO1hW,KAAKyhW,YAAYj1f,OAAS,EAC9Ck1f,EAAO1hW,KAAKyhW,YAAYz/e,EAAQ,QAAK9W,EAGhC8W,EAAQ0/e,EAAOzO,gBAAgBD,aAAaxmf,OAAS,EAC1Dk1f,EAAOzO,gBAAgBD,aAAahxe,EAAQ,QAAK9W,GAI7DwM,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4pf,EAAOp2f,UAAW,0BAIpCqM,IAAK,WACD,IAAIiqf,EAAS3xf,KACTiS,EAAQjS,KAAK4xf,aACjB,KAAI3/e,EAAQ,GAAZ,CAGA,GAAI0/e,aAAkBjP,GAClB,GAAIzwe,EAAQ,EACR0/e,EAASA,EAAO1hW,KAAKyhW,YAAYz/e,EAAQ,OAExC,CACD,IAAIg+I,EAAO0hW,EAAO1hW,KAAK4hW,aACvBF,EAAS1hW,GAAQA,EAAKyhW,YAAYj1f,OAAS,EAAIwzJ,EAAKyhW,YAAYzhW,EAAKyhW,YAAYj1f,OAAS,QAAKtB,OAInG,GAAI8W,EAAQ,EACR0/e,EAASA,EAAOzO,gBAAgBD,aAAahxe,EAAQ,OAEpD,CACD,IAAI6/e,OAAoB32f,EASxB,IARIw2f,EAAOzO,2BAA2B6O,GAClCD,EAAoBH,EAAOzO,gBAAgB8O,yBAEpCL,EAAOzO,2BAA2B+O,IACtCN,EAAOzO,2BAA2BgP,KAErCJ,EAAoBH,EAAOzO,gBAAgBiP,wBAExCL,GAA+D,IAA1CA,EAAkB7O,aAAaxmf,SACvDq1f,EAAoBA,EAAkBK,wBAClC10f,EAAkBq0f,MAI1BH,EAASG,GAAqBA,EAAkBl0f,cAAgB+zf,EAAOzO,gBAAgBtlf,YACnFk0f,EAAkBhqX,eAAY3sI,EAG1C,OAAOw2f,IAEXhqf,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4pf,EAAOp2f,UAAW,sBAIpCqM,IAAK,WACD,IAAIiqf,EAAS3xf,KACTiS,EAAQjS,KAAK4xf,aACjB,KAAI3/e,EAAQ,GAAZ,CAGA,GAAI0/e,aAAkBjP,GAClB,GAAIzwe,EAAQ0/e,EAAO1hW,KAAKyhW,YAAYj1f,OAAS,EACzCk1f,EAASA,EAAO1hW,KAAKyhW,YAAYz/e,EAAQ,OAExC,CACD,IAAIg+I,EAAO0hW,EAAO1hW,KAAK4uI,SACvB8yN,EAAS1hW,GAAQA,EAAKyhW,YAAYj1f,OAAS,EAAIwzJ,EAAKyhW,YAAY,QAAKv2f,OAIzE,GAAI8W,EAAQ0/e,EAAOzO,gBAAgBD,aAAaxmf,OAAS,EACrDk1f,EAASA,EAAOzO,gBAAgBD,aAAahxe,EAAQ,OAEpD,CACD,IAAImgf,OAAgBj3f,EASpB,IARIw2f,EAAOzO,2BAA2B6O,GAClCK,EAAgBT,EAAOzO,gBAAgBmP,qBAEhCV,EAAOzO,2BAA2B+O,IACtCN,EAAOzO,2BAA2BgP,KAErCE,EAAgBT,EAAOzO,gBAAgBoP,oBAEpCF,GAAuD,IAAtCA,EAAcnP,aAAaxmf,SAC/C21f,EAAgBA,EAAcE,oBAC1B70f,EAAkB20f,MAI1BT,EAASS,GAAiBA,EAAcx0f,cAAgB+zf,EAAOzO,gBAAgBtlf,YAC3Ew0f,EAAcx1e,gBAAazhB,EAGvC,OAAOw2f,IAEXhqf,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4pf,EAAOp2f,UAAW,uBAIpCqM,IAAK,WAED,GADa1H,gBACS+xf,GAClB,OAFS/xf,KAEKgyf,yBAGd,IAAIznX,EALKvqI,KAKamyf,uBACtB,OAAI5nX,aAAoBgoX,IANfvyf,KAMqCiS,QAAUs4H,EAASt4H,MACtDs4H,OADX,GAMR5iI,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4pf,EAAOp2f,UAAW,mBAIpCqM,IAAK,WAED,GADa1H,gBACS+xf,GAClB,OAFS/xf,KAEKqyf,qBAGd,IAAI/pd,EALKtoC,KAKSsyf,mBAClB,OAAIhqd,aAAgBiqd,IANXvyf,KAMiCiS,QAAUq2B,EAAKr2B,MAC9Cq2B,OADX,GAMR3gC,YAAY,EACZC,cAAc,IAKlB6pf,EAAOp2f,UAAUm3f,wBAA0B,WAGvC,IAFA,IAAIC,KACAd,EAAS3xf,KAAK0yf,oBACXf,GACHc,EAAQv3f,QAAQy2f,GAChBA,EAASA,EAAOe,oBAEpB,OAAOD,GAKXhB,EAAOp2f,UAAUs3f,gBAAkB,WAG/B,IAFA,IAAIF,EAAUzyf,KAAKwyf,0BACfb,EAAS3xf,KACN2xf,GACHc,EAAQjuf,KAAKmtf,GACbA,EAASA,EAAOiB,gBAEpB,OAAOH,GAKXhB,EAAOp2f,UAAUw3f,cAAgB,SAAUzY,GACvC,IAAIp/S,EAAOh7L,KACPyyf,EAAUzyf,KAAK2yf,kBACnB,GAAIF,EAAQh2f,OAAS,EAEjB,IADAu+L,EAAOy3T,EAAQ90a,QACR80a,EAAQh2f,OAAS,GAAG,CACvB,IAAIq2f,EAAcL,EAAQ90a,QAC1Bq9G,EAAK97K,QAAQ4ze,EAAa1Y,GAMlC,OAHIp/S,aAAgB+3T,IAChB/3T,EAAKg4T,YAAY5Y,GAEdp/S,GAEXy2T,EAAOp2f,UAAU6jB,QAAU,SAAUyye,EAAQvX,GACzC,GAAIuX,EAAO1O,aAAaxmf,OAAS,EAAG,CAChC,IAAIqrI,EAAY9nI,KAAK8nI,UACrB,GAAIA,aAAqBirX,GACrBjrX,EAAU+qX,cAAczY,OAEvB,CACD,IAAIx9d,EAAa+0e,EAAO/0e,aAClB+0e,aAAkBoB,KAAgBjrX,aAAqB2pX,GAAU70e,aAAsB60e,GACzF3pX,EAAU71H,QAAU2K,EAAW3K,OAC/B61H,EAAU5oH,QAAQyye,EAAO1O,aAAatla,QAASy8Z,GAGvDp6e,KAAKizf,WAAWtB,EAAO1O,cACvB0O,EAAO1O,gBAEX0O,EAAOuB,gBAAgB9Y,IAK3BqX,EAAOp2f,UAAU43f,WAAa,SAAUhQ,GACpC,KAAOA,EAAaxmf,OAAS,GAAG,CAC5B,IAAIk1f,EAAS1O,EAAatla,QAC1B,GAAIg0a,aAAkBwB,IAAcnzf,gBAAgB8if,GAChD6O,EAAO9O,UAAY7if,KACnBA,KAAK+V,QAAU47e,EAAO57e,YAErB,GAAI47e,aAAkBF,EAAQ,CAC/B,IAAI3pX,EAAY9nI,KAAK8nI,UACrB6pX,EAAOzO,gBAAkBljf,KACzB2xf,EAAO3kf,EAAI86H,aAAqB2pX,EAAS3pX,EAAU96H,EAAI86H,EAAU/xH,OAAS/V,KAAKgN,EAC/EhN,KAAK+V,QAAU47e,EAAO57e,OAE1B/V,KAAKijf,aAAaz+e,KAAKmtf,KAM/BF,EAAOp2f,UAAUiK,YAAc,SAAU2M,GACjCA,GAAS,GAAKA,EAAQjS,KAAKijf,aAAaxmf,QACxCuD,KAAKijf,aAAa56d,OAAOpW,EAAO,IAMxCw/e,EAAOp2f,UAAUiX,QAAU,WACvB,GAAItS,KAAKijf,aACL,KAAOjjf,KAAKijf,aAAaxmf,OAAS,GAAG,CACjC,IAAI4D,EAAQL,KAAKijf,aAAa72V,OAC1B/rJ,aAAiB8yf,IAAc9yf,aAAiBoxf,IAChDpxf,EAAMiS,UAIlBtS,KAAKijf,kBAAe9nf,EAChB6E,KAAKkjf,iBACLljf,KAAKkjf,gBAAgB59e,YAAYtF,KAAK4xf,cAE1C5xf,KAAKkjf,qBAAkB/nf,EAIvB6E,KAAKy8B,YAASthC,EACd6E,KAAK+M,OAAI5R,EACT6E,KAAKgN,OAAI7R,EACT6E,KAAKgW,WAAQ7a,EACb6E,KAAK+V,YAAS5a,EACd6E,KAAKiS,WAAQ9W,GAEVs2f,KAMP2B,GAAgC,SAAUjoa,GAE1C,SAASioa,IACL,IAAIrzf,EAAmB,OAAXorF,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAKhE,OADAD,EAAMszf,qBAAkBl4f,EACjB4E,EAmDX,OA1DAuqF,GAAU8oa,EAAgBjoa,GAS1B7sF,OAAOuJ,eAAeurf,EAAe/3f,UAAW,iBAI5CqM,IAAK,WAED,OADgB1H,gBACS0if,GADT1if,KAEKqzf,gBAFLrzf,KAIGiwJ,KAJHjwJ,KAKKiwJ,KAAKyhW,YAAY,GAAG/O,mBADpC,GAQTt7e,IAAK,SAAUrK,GACPgD,gBAAgB0if,KAChB1if,KAAKqzf,gBAAkBr2f,IAG/B2K,YAAY,EACZC,cAAc,IAKlBwrf,EAAe/3f,UAAUi4f,qBAAuB,SAAUC,GActD,GAVIA,EAFOvzf,gBACS0if,GADT1if,KAEkBiS,MAAQ,IAAMshf,GAGU,IAL1Cvzf,KAKEwzf,iBAAiBj1f,QAAQ,UACV,KAAYg1f,EAGZ,KAAYA,GAGnC91f,EAZMuC,KAYiBiwJ,MAAO,CAG/B,OAFSjwJ,KAAKiwJ,KAAKmqV,OACIlvQ,MAAM3sO,QAAQyB,KAAKiwJ,MACvB,IAAMsjW,EAE7B,OAAOA,GAEJH,GACT3B,IAKE/O,GAA4B,SAAUv3Z,GAKtC,SAASu3Z,IACL,OAAOv3Z,EAAO7pF,KAAKtB,OAASA,KAuGhC,OA5GAsqF,GAAUo4Z,EAAYv3Z,GAUtBu3Z,EAAWrnf,UAAUw9C,OAAS,SAAU84c,GACpC,OAAOA,aAAkBjP,GAAciP,EAAOhP,gBAAkB3if,KAAK2if,eAKzED,EAAWrnf,UAAUi4f,qBAAuB,SAAUC,GAIlD,GADAA,EADWvzf,KACciS,MAAQ,IAAMshf,GAClC91f,EAFMuC,KAEiBiwJ,MAAO,CAG/B,OAFSjwJ,KAAKiwJ,KAAKmqV,OACIlvQ,MAAM3sO,QAAQyB,KAAKiwJ,MACvB,IAAMsjW,EAE7B,OAAOA,GAKX7Q,EAAWrnf,UAAUo4f,mBAAqB,SAAUC,GAChD,IAAK,IAAIv3f,EAAI,EAAGA,EAAI6D,KAAKijf,aAAaxmf,OAAQN,IAC1C,GAAI6D,KAAKijf,aAAa9mf,GAAG6Q,GAAK0mf,EAAW1mf,GACjChN,KAAKijf,aAAa9mf,GAAG6Q,EAAIhN,KAAKijf,aAAa9mf,GAAG4Z,QAAW29e,EAAW1mf,EACxE,OAAOhN,KAAKijf,aAAa9mf,GAAGs3f,mBAAmBC,GAGvD,IAAIC,OAAkBx4f,EAStB,OARI6E,KAAKijf,aAAaxmf,OAAS,IAEvBk3f,EADA3zf,KAAKijf,aAAa,GAAGj2e,GAAK0mf,EAAW1mf,EACnBhN,KAAKijf,aAAajjf,KAAKijf,aAAaxmf,OAAS,GAAGg3f,mBAAmBC,GAGnE1zf,KAAKijf,aAAa,GAAGwQ,mBAAmBC,IAG3DC,GAKXjR,EAAWrnf,UAAU63f,gBAAkB,SAAU9Y,GAChCp6e,KAAK+V,OAClB,IAAKtY,EAAkBuC,KAAKijf,cAAe,CACvC,IAAK,IAAIt4V,EAAI,EAAGA,EAAI3qJ,KAAKijf,aAAaxmf,OAAQkuJ,IAAK,CAC/C,IAAIipW,EAAc5zf,KAAKijf,aAAat4V,GAOpC,GALIipW,EAAYV,gBAAgB9Y,GAK5B38e,EAAkBuC,KAAKijf,cACvB,MAEJt4V,IAEJ3qJ,KAAKijf,kBAAe9nf,EASxB,IAAKsC,EAAkBuC,KAAKiwJ,MAAO,CAC/B,IAAIh+I,EAAQjS,KAAK4xf,aACb5xf,KAAK4xf,cAAgB,IACrB5xf,KAAKiwJ,KAAKyhW,YAAYrpe,OAAOpW,EAAO,GACC,IAAjCjS,KAAKiwJ,KAAKyhW,YAAYj1f,OACtBuD,KAAKiwJ,KAAK39I,UAGJtS,gBAAgBkyf,IACnBlyf,KAAKiwJ,KAAK4jW,eAAiB7zf,KAC9BA,KAAKiwJ,KAAK4jW,kBAAe14f,EAEnB6E,gBAAgBkyf,IACnBlyf,KAAKiwJ,KAAK6jW,eAAiB9zf,OAC9BA,KAAKiwJ,KAAK6jW,kBAAe34f,GAE7B6E,KAAKiwJ,UAAO90J,GAGpB6E,KAAKsS,WAKTowe,EAAWrnf,UAAUiX,QAAU,WAI3BtS,KAAK2if,mBAAgBxnf,EACrB6E,KAAKiwJ,UAAO90J,EACZgwF,EAAO9vF,UAAUiX,QAAQhR,KAAKtB,OAE3B0if,GACT0Q,IAKElB,GAAoC,SAAU/ma,GAE9C,SAAS+ma,EAAmBxrf,GACxB,IAAI3G,EAAQorF,EAAO7pF,KAAKtB,OAASA,KAEjC,OADAD,EAAMyzf,iBAAmB9sf,EAClB3G,EAwCX,OA5CAuqF,GAAU4na,EAAoB/ma,GAS9B+ma,EAAmB72f,UAAUo4f,mBAAqB,SAAU3/d,KAM5Do+d,EAAmB72f,UAAUw9C,OAAS,SAAU84c,GAE5C,OAAOA,aAAkBO,GAClBP,EAAOzO,kBAAoBljf,KAAKkjf,iBAK3CgP,EAAmB72f,UAAUgE,MAAQ,WAEjC,IAAK,IADD00f,EAAe,IAAI7B,EAAmBlyf,KAAKwzf,kBACtCr3f,EAAI,EAAGA,EAAI6D,KAAKijf,aAAaxmf,OAAQN,IAAK,CAC/C,IAAI63f,EAAQh0f,KAAKijf,aAAa9mf,GAAGkD,QACjC00f,EAAa9Q,aAAaz+e,KAAKwvf,GAC/BA,EAAM/hf,MAAQ9V,EACd63f,EAAM9Q,gBAAkB6Q,EAM5B,OAJAA,EAAahnf,EAAI/M,KAAK+M,EACtBgnf,EAAa/mf,EAAIhN,KAAKgN,EACtB+mf,EAAah+e,OAAS,EACtBg+e,EAAa/9e,MAAQ,EACd+9e,GAKX7B,EAAmB72f,UAAU63f,gBAAkB,SAAU9Y,GACrDp6e,KAAKiwJ,UAAO90J,EACZgwF,EAAO9vF,UAAUiX,QAAQhR,KAAKtB,OAE3Bkyf,GACTkB,IAKEb,GAA6B,SAAUpna,GAEvC,SAASona,IACL,OAAkB,OAAXpna,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KA+H/D,OAjIAsqF,GAAUioa,EAAapna,GAIvB7sF,OAAOuJ,eAAe0qf,EAAYl3f,UAAW,cAIzCqM,IAAK,WAED,IADA,IAAIiqf,EAAS3xf,KACN2xf,EAAOzO,iBAAiB,CAC3B,GAAIyO,EAAOzO,2BAA2BkQ,GAClC,OAAOzB,EAAOzO,gBAElByO,EAASA,EAAOzO,kBAIxBv7e,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe0qf,EAAYl3f,UAAW,cAIzCqM,IAAK,WAED,OADe1H,gBACS8if,IADT9if,KACqC49e,2BAA2BmF,GADhE/if,KAEK49e,gBAAgBqL,WAFrBjpf,gBAIc+yf,IAJd/yf,KAIsC8vf,uBAAuBT,GAJ7Drvf,KAKK8vf,YAAY7G,WAEzB,GAEXthf,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe0qf,EAAYl3f,UAAW,eAIzCqM,IAAK,WAED,OADe1H,gBACS8if,IADT9if,KACqC49e,2BAA2BmF,GADhE/if,KAEK49e,gBAAgBsL,YAE7B,GAEXvhf,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe0qf,EAAYl3f,UAAW,iBAIzCqM,IAAK,WACD,OAAO1H,KAAKkjf,2BAA2B6O,IAE3Cpqf,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe0qf,EAAYl3f,UAAW,oBAIzCqM,IAAK,WACD,OAAO1H,KAAK2of,sBAAsBuJ,IAEtCvqf,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe0qf,EAAYl3f,UAAW,kBAIzCqM,IAAK,WACD,GAAI1H,KAAKkjf,2BAA2B6O,GAChC,OAAO/xf,KAAKkjf,iBAIpBv7e,YAAY,EACZC,cAAc,IAKlB2qf,EAAYl3f,UAAUi4f,qBAAuB,SAAUC,GAGnD,GADAA,EADWvzf,KACckjf,gBAAgBD,aAAa1kf,QAD3CyB,MAC2D,IAAMuzf,GACvE91f,EAFMuC,KAEiBkjf,iBAAkB,CAC1C,GAHOljf,KAGEkjf,2BAA2BqP,EAChC,OAJGvyf,KAISkjf,gBAAgBoQ,qBAAqBC,GAJ9Cvzf,KAMOkjf,2BAA2BkQ,KACrCG,EAPGvzf,KAOsBkjf,gBAAgBoQ,qBAAqBC,IAGtE,OAAOA,GAKXhB,EAAYl3f,UAAUg4E,SAAW,WAC7B,OAAIrzE,gBAAgB8if,IAAmB9if,gBAAgB+yf,GAC5C/yf,KAAKkjf,gBAAgBD,aAAa1kf,QAAQyB,MAE5CA,gBAAgBiyf,GACdjyf,KAAKi0f,WAAWhR,aAAa1kf,QAAQyB,MAEvCA,gBAAgB+xf,GACd/xf,KAAKk0f,SAASjR,aAAa1kf,QAAQyB,MAEvC,GAKXuyf,EAAYl3f,UAAU84f,kBAAoB,WACtC,GAAIn0f,KAAKo0f,cACL,OAAOp0f,KAAKq0f,eAAeC,WAAWj/N,WAAar1R,KAAKq0f,eAAe53d,OAAOjwB,KAAOxM,KAAKq0f,eAAe53d,OAAOhwB,OAGhH,IACIk2e,EADa3if,KAAK2of,WACShG,cAC/B,OAAOA,EAAcjnN,WAAainN,EAAcz3P,WAAay3P,EAAcv3P,cAG5EmnQ,GACTd,IAKE3O,GAAiC,SAAU33Z,GAK3C,SAAS23Z,IACL,IAAI/if,EAAQorF,EAAO7pF,KAAKtB,OAASA,KAGjC,OAFAD,EAAM69e,gBAAkB,IAAImF,GAAiBhjf,GAC7CA,EAAMi+e,gBAAkB,IAAIgF,GAAiBjjf,GACtCA,EAwJX,OAhKAuqF,GAAUw4Z,EAAiB33Z,GAa3B23Z,EAAgBznf,UAAUw9C,OAAS,SAAU84c,GACzC,OAAOA,aAAkB7O,GAAmB6O,EAAO/T,kBAAoB59e,KAAK49e,iBAKhFkF,EAAgBznf,UAAUi/O,QAAU,WAChC,GAAI78O,EAAkBuC,KAAKijf,eAA8C,IAA7Bjjf,KAAKijf,aAAaxmf,OAC1D,OAAO,EAEX,IAAK,IAAI8mB,EAAI,EAAGA,EAAIvjB,KAAKijf,aAAaxmf,OAAQ8mB,IAE1C,IAAK,IADDgxe,EAAgBv0f,KAAKijf,aAAa1/d,GAC7BpnB,EAAI,EAAGA,EAAIo4f,EAAcn6e,SAAS3d,OAAQN,IAAK,CACpD,IAAIipJ,EAASmvW,EAAcn6e,SAASje,GACpC,GAAsB,IAAlBipJ,EAAO3oJ,SAGP2oJ,aAAkBovW,IAAkBpvW,aAAkBqvW,IAAmBrvW,aAAkBsvW,IACvFtvW,aAAkBkmW,IAAmBX,GAAcU,uBAAuBjmW,IAC9E,OAAO,EAInB,OAAO,GAKX09V,EAAgBznf,UAAUs5f,UAAY,SAAUhpf,EAAQipf,GAKpD,IAAK,IAJDxvW,OAASjqJ,EACT2jB,EAAQ,EACR+1e,GAAY,EACZC,EAAiB90f,KAAK2yf,kBACjBxse,EAAI,EAAGA,EAAI2ue,EAAer4f,OAAQ0pB,IAEvC,IAAK,IADDwre,EAASmD,EAAe3ue,GACnB5C,EAAI,EAAGA,EAAIoue,EAAO1O,aAAaxmf,OAAQ8mB,IAE5C,IAAK,IADDuqC,EAAO6jc,EAAO1O,aAAa1/d,GACtBpnB,EAAI,EAAGA,EAAI2xD,EAAK1zC,SAAS3d,OAAQN,IAEtC,MADAipJ,EAASt3F,EAAK1zC,SAASje,cACD44f,IAAtB,CAQA,IALKF,IAAczvW,aAAkBovW,IAAkBpvW,aAAkBqvW,IAClErvW,aAAkBsvW,IAAsBtvW,aAAkBkmW,IAC1DX,GAAcU,uBAAuBjmW,MACxCyvW,GAAY,GAEZA,GAAalpf,GAAUmT,EAAQsmI,EAAO3oJ,OAEtC,OADAm4f,EAAiBjpf,EAASmT,GACjB9d,QAAWokJ,EAAQnzI,MAAS2if,GAEzC91e,GAASsmI,EAAO3oJ,OAO5B,OAHIkP,EAASmT,IACT81e,EAAgBn3f,EAAkB2nJ,GAAUz5I,EAASy5I,EAAO3oJ,SAEvDuE,QAAWokJ,EAAQnzI,MAAS2if,IAKzC9R,EAAgBznf,UAAU25f,UAAY,WAElC,IAAK,IADDv4f,EAAS,EACJ8mB,EAAI,EAAGA,EAAIvjB,KAAKijf,aAAaxmf,OAAQ8mB,IAE1C,IAAK,IADDuqC,EAAO9tD,KAAKijf,aAAa1/d,GACpBpnB,EAAI,EAAGA,EAAI2xD,EAAK1zC,SAAS3d,OAAQN,IAAK,CAC3C,IAAI6E,EAAU8sD,EAAK1zC,SAASje,GACxB6E,aAAmB+zf,KAGvBt4f,GAAUuE,EAAQvE,QAG1B,OAAOA,GAKXqmf,EAAgBznf,UAAUo4f,mBAAqB,SAAU3/d,KAMzDgvd,EAAgBznf,UAAUgE,MAAQ,WAC9B,IAAIwjf,EAAY,IAAIC,EACpBD,EAAUjF,gBAAgB4H,WAAWxlf,KAAK49e,iBAC1CiF,EAAU7E,gBAAgBwH,WAAWxlf,KAAKg+e,iBAC1C,IAAK,IAAI7hf,EAAI,EAAGA,EAAI6D,KAAKijf,aAAaxmf,OAAQN,IAAK,CAC/C,IACI84f,EADOj1f,KAAKijf,aAAa9mf,GACRkD,QACrBwjf,EAAUI,aAAaz+e,KAAKywf,GAC5BA,EAAUpS,UAAYA,EAM1B,OAJAA,EAAU91e,EAAI/M,KAAK+M,EACnB81e,EAAU71e,EAAIhN,KAAKgN,EACnB61e,EAAU9se,OAAS/V,KAAK+V,OACxB8se,EAAU7se,MAAQhW,KAAKgW,MAChB6se,GAKXC,EAAgBznf,UAAU63f,gBAAkB,SAAU9Y,GAClD,IAAIrke,EAAS/V,KAAK+V,OAClB,IAAKtY,EAAkBuC,KAAKijf,cAAe,CACvC,IAAK,IAAI9mf,EAAI,EAAGA,EAAI6D,KAAKijf,aAAaxmf,OAAQN,IAAK,CAM/C,GALa6D,KAAKijf,aAAa9mf,GACxBmW,UAC0B,IAA7BtS,KAAKijf,aAAaxmf,QAAgBgB,EAAkBuC,KAAKijf,aAAa,GAAG7oe,YACzEpa,KAAKijf,kBAAe9nf,GAEpBsC,EAAkBuC,KAAKijf,cACvB,MAEJ9mf,IAEJ6D,KAAKijf,kBAAe9nf,EAEnBsC,EAAkBuC,KAAKkjf,kBAAqBzlf,EAAkBuC,KAAKkjf,gBAAgBD,gBAC5B,IAArDjjf,KAAKkjf,gBAAgBD,aAAa1kf,QAAQyB,QAC7CA,KAAKkjf,gBAAgBD,aAAa56d,OAAOroB,KAAKkjf,gBAAgBD,aAAa1kf,QAAQyB,MAAO,GAC1FA,KAAKkjf,gBAAgBnte,QAAUA,GAC1BtY,EAAkBuC,KAAKkjf,gBAAgBD,eAA8D,IAA7Cjjf,KAAKkjf,gBAAgBD,aAAaxmf,SACxFuD,KAAKkjf,2BAA2BR,IACnC1if,KAAKkjf,gBAAgBgQ,gBAAgB9Y,GAEzCp6e,KAAKkjf,qBAAkB/nf,GAE3B6E,KAAKsS,WAKTwwe,EAAgBznf,UAAUiX,QAAU,WAIhCtS,KAAK49e,qBAAkBzif,EAIvB6E,KAAKg+e,qBAAkB7if,EACvBgwF,EAAO9vF,UAAUiX,QAAQhR,KAAKtB,OAE3B8if,GACTyP,IAKEQ,GAA6B,SAAU5na,GAEvC,SAAS4na,IACL,IAAIhzf,EAAQorF,EAAO7pF,KAAKtB,OAASA,KA0BjC,OAzBAD,EAAMstO,MAAQ,EAIdttO,EAAMmrP,WAAa,EAInBnrP,EAAMorP,UAAY,EAIlBprP,EAAMqrP,YAAc,EAIpBrrP,EAAMsrP,aAAe,EACrBtrP,EAAM08B,OAAS,IAAIqgS,GAAO/8T,EAAMmrP,WAAYnrP,EAAMorP,UAAWprP,EAAMqrP,YAAarrP,EAAMsrP,cACtFtrP,EAAMm1f,gBAAkB,EACxBn1f,EAAMo1f,iBAAmB,EACzBp1f,EAAMq1f,eAAiB,EACvBr1f,EAAMs1f,kBAAoB,EAC1Bt1f,EAAM+vf,YAAc,IAAIT,GAAatvf,GACrCA,EAAMu1f,YAAc,IAAIC,GACxBx1f,EAAMy1f,qBAAuB,IAAI7vR,GAC1B5lO,EAipBX,OA7qBAuqF,GAAUyoa,EAAa5na,GA8BvB7sF,OAAOuJ,eAAekrf,EAAY13f,UAAW,iBAIzCqM,IAAK,WACD,OAAsB,EAAb1H,KAAKqtO,QAAgB,GAAO,GAKzChmO,IAAK,SAAUrK,GACXgD,KAAKqtO,MAAuB,IAAbrtO,KAAKqtO,OAAkBrwO,EAAQ,EAAI,IAAM,GAE5D2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAekrf,EAAY13f,UAAW,kBAIzCqM,IAAK,WACD,OAAsB,EAAb1H,KAAKqtO,QAAgB,GAAO,GAKzChmO,IAAK,SAAUrK,GACXgD,KAAKqtO,MAAuB,IAAbrtO,KAAKqtO,OAAkBrwO,EAAQ,EAAI,IAAM,GAE5D2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAekrf,EAAY13f,UAAW,UAIzCqM,IAAK,WACD,OAA8B,IAAT,EAAb1H,KAAKqtO,QAKjBhmO,IAAK,SAAUrK,GACXgD,KAAKqtO,MAAuB,IAAbrtO,KAAKqtO,OAAiBrwO,EAAQ,EAAI,IAErD2K,YAAY,EACZC,cAAc,IAKlBmrf,EAAY13f,UAAUw9C,OAAS,SAAU84c,GACrC,OAAOA,aAAkBoB,GAAepB,EAAO7B,cAAgB9vf,KAAK8vf,aAKxEiD,EAAY13f,UAAU23f,YAAc,SAAU5Y,GAC1C,IAAK,IAAIj+e,EAAI,EAAGA,EAAI6D,KAAKijf,aAAaxmf,OAAQN,IAAK,CAC/C,IAAIukE,EAAM1gE,KAAKijf,aAAa9mf,GACI,IAA5BukE,EAAIuib,aAAaxmf,QACjBikE,EAAIpuD,UACJnW,KAGAukE,EAAI+0b,aAAarb,KAO7B2Y,EAAY13f,UAAU8I,SAAW,SAAUuxf,GACvC,GAAI11f,KAAK64C,OAAO68c,EAAUzB,YACtB,OAAO,EAEX,KAAOyB,EAAUzB,WAAWG,eAAe,CACvC,GAAIp0f,KAAK64C,OAAO68c,EAAUzB,YACtB,OAAO,EAEXyB,EAAYA,EAAUzB,WAAWI,eAErC,OAAOr0f,KAAK64C,OAAO68c,EAAUzB,aAKjClB,EAAY13f,UAAUs6f,cAAgB,SAAUC,GAC5C,IAAI5/e,EAAQhW,KAAKm0f,oBAGjB,OADAn+e,EAAQA,EAAQhW,KAAKipf,WAAajpf,KAAKkpf,cACvB,EAAIlze,EAAQ,GAEhC+8e,EAAY13f,UAAUw6f,cAAgB,WAElC,IAAK,IADD7/e,EAAQ,EACH7Z,EAAI,EAAGA,EAAI6D,KAAKijf,aAAaxmf,OAAQN,IAAK,CAG/C,IAAK,IAFD2gS,EAAW,EACXp8N,EAAM1gE,KAAKijf,aAAa9mf,GACnBonB,EAAI,EAAGA,EAAIm9C,EAAIuib,aAAaxmf,OAAQ8mB,IACzCu5Q,GAAYp8N,EAAIuib,aAAa1/d,GAAG+we,WAAWj/N,UAE3Cr/Q,EAAQ8mR,IACR9mR,EAAQ8mR,GAGhB,OAAO9mR,GAKX+8e,EAAY13f,UAAUy6f,oBAAsB,SAAUzoe,GAClD,IAAI0oe,EAAa1oe,EAgBjB,MAf4C,UAAxCrtB,KAAK8vf,YAAYG,oBACdjwf,KAAK8vf,YAAYE,eAAiB,EACrC+F,EAAa/1f,KAAK8vf,YAAYE,eAGc,YAAxChwf,KAAK8vf,YAAYG,oBACdjwf,KAAK8vf,YAAYE,eAAiB,EACrC+F,EAAaA,EAAa/1f,KAAK8vf,YAAYE,eAAiB,KAI5Dhwf,KAAK8vf,YAAYG,mBAAqB,QACtCjwf,KAAK8vf,YAAYE,eAAiB+F,GAGnCA,GAKXhD,EAAY13f,UAAU26f,aAAe,SAAUhG,EAAgBC,EAAoBz5e,EAAgBysD,GAC/F,IAAIoyN,EAAY26N,EAUhB,MAT2B,YAAvBC,EACA56N,EAAa26N,EAAiBx5e,EAAkB,IAEpB,UAAvBy5e,EACL56N,EAAY26N,EAENvyf,EAAkBwlE,KACxBoyN,EAAYpyN,EAAKgzb,4BAEd5gO,GAKX09N,EAAY13f,UAAU66f,qBAAuB,SAAU7oe,GAGnD,IAAK,IADDiQ,EAASjQ,EADIrtB,KAAK61f,gBAEb15f,EAAI,EAAGA,EAAI6D,KAAKijf,aAAaxmf,OAAQN,IAAK,CAC/C,IAAIukE,EAAM1gE,KAAKijf,aAAa9mf,GAC5BukE,EAAIy1b,UAAUnF,gBAAkB1zd,EAChCojC,EAAIy1b,UAAUtF,iBAAmBvzd,EACjC,IAAK,IAAI/Z,EAAI,EAAGA,EAAIm9C,EAAIuib,aAAaxmf,OAAQ8mB,IACzCm9C,EAAIuib,aAAa1/d,GAAG+we,WAAWj/N,WAAa/3P,IAOxDy1d,EAAY13f,UAAUo4f,mBAAqB,SAAU3/d,GAEjD,IAAK,IADD6/d,OAAkBx4f,EACbgB,EAAI,EAAGA,EAAI6D,KAAKijf,aAAaxmf,OAAQN,IAC1C,GAAI6D,KAAKijf,aAAa9mf,GAAG6Q,GAAK8mB,EAAM9mB,GAC5BhN,KAAKijf,aAAa9mf,GAAG6Q,EAAIhN,KAAKijf,aAAa9mf,GAAG4Z,QAAW+d,EAAM9mB,EAAG,CACtE2mf,EAAkB3zf,KAAKijf,aAAa9mf,GAAGs3f,mBAAmB3/d,GAC1D,MAGR,OAAO6/d,GAKXZ,EAAY13f,UAAU+6f,cAAgB,WAKlC,IAAK,IAJDC,KACAC,KACA9/e,EAAiBxW,KAAK21f,eAAc,GACpCI,EAAa/1f,KAAK81f,oBAAoBt/e,GACjCra,EAAI,EAAGA,EAAI6D,KAAKijf,aAAaxmf,OAAQN,IAAK,CAC/C,IAAIukE,EAAM1gE,KAAKijf,aAAa9mf,GACxBg6f,EAAYz1b,EAAIy1b,UAEhBh+N,EAAaz3N,EAAIy1b,UAAUvF,WAC3B2F,EAAa,EACbF,EAAS93f,QAAQg4f,GAAc,GAC/BF,EAAS7xf,KAAK+xf,GAIlBA,GADYv2f,KAAKg2f,aAAaG,EAAUtF,gBAAiBsF,EAAUrF,oBAAqBiF,EAAY,MAEpG,IAAIS,EAAcnqf,KAAKoxB,MAAM84d,GACzBF,EAAS93f,QAAQi4f,GAAe,GAChCH,EAAS7xf,KAAKgyf,GAElB,IAAK,IAAIjze,EAAI,EAAGA,EAAIm9C,EAAIuib,aAAaxmf,OAAQ8mB,IAAK,CAE9C,IAAK,IADD0/C,EAAOvC,EAAIuib,aAAa1/d,GACnB4C,EAAI,EAAGA,EAAImwe,EAAa75f,OAAQ0pB,IACrC,KAAImwe,EAAanwe,GAAGwhT,YAAcxvC,GAAlC,CAGA,IAAIlB,EAAUq/N,EAAanwe,GAAGmue,WAAWr9N,QACrCw/N,GAAoB,EACpBH,EAAanwe,GAAGwhT,YAAcxvC,GAE1Bs+N,GAAoB,EAEhBlze,IAAMm9C,EAAIuib,aAAaxmf,OAAS,GAAKikE,EAAIy1b,UAAUpF,UAAY,IAG/DwF,GADYv2f,KAAKg2f,aAAaM,EAAanwe,GAAGmue,WAAWtE,eAAgBsG,EAAanwe,GAAGmue,WAAWrE,mBAAoB8F,EAAY,QAY5IQ,GADYv2f,KAAKg2f,aAAaM,EAAanwe,GAAGmue,WAAWtE,eAAgBsG,EAAanwe,GAAGmue,WAAWrE,mBAAoB8F,EAAY,MAGnIU,GAAqBlze,IAAMm9C,EAAIuib,aAAaxmf,OAAS,IACtDg6f,GAAoB,GAEpBA,GAAqBt6f,EAAIm6f,EAAanwe,GAAG+te,SAASzzN,UAAaxJ,EAAU,IACzEq/N,EAAajue,OAAOlC,EAAG,GACvBA,KAKR,GAAI88C,EAAKqxb,WAAWr9N,QAAU,EAC1B,GAA4B,IAAxBq/N,EAAa75f,QAAgB65f,EAAaA,EAAa75f,OAAS,GAAGkrU,aAAexvC,EAClFm+N,EAAa9xf,KAAKy+D,QAGlB,IAAK,IAAI8N,EAAIulb,EAAa75f,OAAQs0E,EAAI,EAAGA,IACjCulb,EAAavlb,EAAI,GAAG42P,YAAcxvC,GAClCm+N,EAAajue,OAAO0oD,EAAI,EAAG,EAAG9N,GAK9Ck1N,GAAcl1N,EAAKqxb,WAAWn8N,WAG9Bo+N,GADYv2f,KAAKg2f,aAAa/yb,EAAKqxb,WAAWtE,eAAgB/sb,EAAKqxb,WAAWrE,mBAAoB8F,EAAY,MAE9G,IAAIpqf,EAASU,KAAKoxB,MAAM84d,GACpBF,EAAS93f,QAAQoN,GAAU,GAC3B0qf,EAAS7xf,KAAKmH,GAEd4X,IAAMm9C,EAAIuib,aAAaxmf,OAAS,GAAK05f,EAAUpF,UAAY,IAE3DwF,GADYv2f,KAAKg2f,aAAaG,EAAUnF,eAAgB,QAAS+E,EAAY,MAEzEM,EAAS93f,QAAQ8N,KAAKoxB,MAAM84d,IAAe,GAC3CF,EAAS7xf,KAAK6H,KAAKoxB,MAAM84d,IAE7Bp+N,GAAcg+N,EAAUpF,YAIpCsF,EAASx+d,KAAK,SAAUsrB,EAAGrmB,GAAK,OAAOqmB,EAAIrmB,IACvCu5d,EAAS55f,OAAS,IAAMuD,KAAKs1f,YAAYv3b,QAAQthE,QACjDuD,KAAK02f,kBAAkBL,EAAUN,IAGzChD,EAAY13f,UAAUq7f,kBAAoB,SAAUL,EAAU7/e,GAC1D,IAAK,IAAIra,EAAI,EAAGA,EAAI6D,KAAKijf,aAAaxmf,OAAQN,IAAK,CAC/C,IAAIukE,EAAM1gE,KAAKijf,aAAa9mf,GACxBukE,EAAIy1b,UAAUtF,iBAAmB,IACjCnwb,EAAIy1b,UAAUvF,WAAalwb,EAAIi2b,aAAaN,GAAW,EAAG7/e,IAE9D,IAAK,IAAI+M,EAAI,EAAGA,EAAIm9C,EAAIuib,aAAaxmf,OAAQ8mB,IAAK,CAC9C,IAAI0/C,EAAOvC,EAAIuib,aAAa1/d,GACxB40Q,EAAaz3N,EAAIi2b,aAAaN,EAAUpzb,EAAKoQ,WAAY78D,GACzD2hR,EAAa,GAAKl1N,EAAKqxb,WAAWn8N,aAAeA,IACjDl1N,EAAKqxb,WAAWn8N,WAAaA,GAGjCz3N,EAAIy1b,UAAUnF,gBAAkB,IAChCtwb,EAAIy1b,UAAUpF,UAAYrwb,EAAIi2b,aAAaN,EAAU31b,EAAIuib,aAAaxmf,OAAQ+Z,MAO1Fu8e,EAAY13f,UAAUu7f,kBAAoB,WACtC,IAAI52f,KAAK62f,cAAT,CAIA72f,KAAKs1f,YAAYwB,eACjB,IAAItgf,EAAiB,EACjBu/e,EAAa,EACbgB,KACAC,EAAsD,SAAxCh3f,KAAK8vf,YAAYG,mBAGnCz5e,EAAiBxW,KAAK21f,eAAc,GACpCI,EAAa/1f,KAAK81f,oBAAoBt/e,GACtC,IAAK,IAAIra,EAAI,EAAGA,EAAI6D,KAAKijf,aAAaxmf,OAAQN,IAAK,CAC/C,IAAIukE,EAAM1gE,KAAKijf,aAAa9mf,GACxBg6f,EAAYz1b,EAAIy1b,UAChBh+N,EAAa,EACb9C,EAAY,EACZ1pR,EAAS,EACTwqf,EAAUvF,WAAa,IACvBv7N,EAAYr1R,KAAKg2f,aAAaG,EAAUtF,gBAAiBnwb,EAAIy1b,UAAUlF,mBAAoB8E,EAAY,MACvG/1f,KAAKs1f,YAAY2B,WAAW9+N,EAAYA,EAAag+N,EAAUvF,WAAYv7N,EAAWA,EAAW1pR,EAAS0pR,IAE9G,IAAK,IAAI9xQ,EAAI,EAAGA,EAAIm9C,EAAIuib,aAAaxmf,OAAQ8mB,IAAK,CAC9C,IAAI0/C,EAAOvC,EAAIuib,aAAa1/d,GACG,IAA3Bwze,EAAgBt6f,SAChBwmE,EAAK0kQ,YAAcxvC,GAEvB,IAAK,IAAIhyQ,EAAI,EAAGA,EAAI4we,EAAgBt6f,OAAQ0pB,IAAK,CAC7C,IAAI+we,EAAiBH,EAAgB5we,GACrC,GAAI+we,EAAevvL,YAAcxvC,EAC7Bl1N,EAAK0kQ,YAAcxvC,MADvB,CAIA,IAAIlB,EAAU,EACVw/N,GAAoB,EAExB,GADAx/N,EAAUigO,EAAe5C,WAAWr9N,QAChCigO,EAAevvL,YAAcxvC,EAC7Bl1N,EAAK0kQ,YAAcxvC,EACnBs+N,GAAoB,MAEnB,CAEDphO,EAAYr1R,KAAKg2f,aAAakB,EAAe5C,WAAWtE,eAAgBkH,EAAe5C,WAAWrE,mBAAoB8F,EAAYmB,GAClI,IAAIC,EAAaD,EAAejB,2BAK5Bj2f,KAAKs1f,YAAYv3b,QAAQthE,OAAS,GAClCuD,KAAKs1f,YAAY2B,WAAW9+N,EAAYA,EAAan4R,KAAKs1f,YAAYv3b,QAAQx/D,QAAQ24f,EAAeE,aAAeF,EAAe5C,WAAWn8N,WAAY9C,EAAW8hO,EAAYxrf,GAAU0pR,GAC3LpyN,EAAK0kQ,YAAcxvC,IAInBn4R,KAAKs1f,YAAY2B,WAAW9+N,EAAYA,EAAa++N,EAAevvL,YAAcuvL,EAAe5C,WAAWn8N,WAAY9C,EAAW8hO,EAAYxrf,GAAU0pR,GACzJpyN,EAAK0kQ,YAAcxvC,GAGtBs+N,GAAqBlze,IAAMm9C,EAAIuib,aAAaxmf,OAAS,IACtDg6f,GAAoB,GAEpBA,GAAqBt6f,EAAI+6f,EAAehD,SAASzzN,UAAaxJ,EAAU,IACxE8/N,EAAgB1ue,OAAOlC,EAAG,GAC1BA,MAKR,GAAI88C,EAAKqxb,WAAWr9N,QAAU,EAC1B,GAA+B,IAA3B8/N,EAAgBt6f,QAAgBs6f,EAAgBA,EAAgBt6f,OAAS,GAAGkrU,aAAexvC,EAC3F4+N,EAAgBvyf,KAAKy+D,QAGrB,IAAK,IAAI8N,EAAIgmb,EAAgBt6f,OAAQs0E,EAAI,EAAGA,IACpCgmb,EAAgBhmb,EAAI,GAAG42P,YAAcxvC,GACrC4+N,EAAgB1ue,OAAO0oD,EAAI,EAAG,EAAG9N,GAKjDoyN,EAAYr1R,KAAKg2f,aAAa/yb,EAAKqxb,WAAWtE,eAAgB/sb,EAAKqxb,WAAWrE,mBAAoB8F,EAAY9yb,GAC9G,IAAIzP,EAAWyP,EAAKgzb,2BACpBj2f,KAAKs1f,YAAY2B,WAAW9+N,EAAYA,GAAcl1N,EAAKqxb,WAAWn8N,WAAY9C,EAAW7hO,EAAU7nD,GAAU0pR,GAC7G9xQ,IAAMm9C,EAAIuib,aAAaxmf,OAAS,GAAK05f,EAAUnF,eAAiB,IAChE37N,EAAYr1R,KAAKg2f,aAAaG,EAAUnF,eAAgB,QAAS+E,EAAY,MAC7E/1f,KAAKs1f,YAAY2B,WAAW9+N,EAAYA,GAAcg+N,EAAUpF,UAAW17N,EAAWA,EAAW1pR,GAAU0pR,KAIvHr1R,KAAKs1f,YAAY+B,uBAEjBr3f,KAAKs1f,YAAYgC,WAAW9gf,EAAgBu/e,EAAYiB,GAExDh3f,KAAKu3f,gBAAgBxB,EAAYiB,KAKrCjE,EAAY13f,UAAUk8f,gBAAkB,SAAUxB,EAAYiB,GAC1D,IAAK,IAAI76f,EAAI,EAAGA,EAAI6D,KAAKijf,aAAaxmf,OAAQN,IAAK,CAC/C,IAAIq7f,EAAKx3f,KAAKijf,aAAa9mf,GACvBg6f,EAAYqB,EAAGrB,UACfA,EAAUvF,WAAa,IACvBuF,EAAU/F,YAAcpwf,KAAKs1f,YAAYU,aAAa,EAAGG,EAAUvF,WAAYmF,EAAYiB,IAE/F,IAAK,IAAIzze,EAAI,EAAGA,EAAIi0e,EAAGvU,aAAaxmf,OAAQ8mB,IAAK,CAC7C,IAAI0/C,EAAOu0b,EAAGvU,aAAa1/d,GAE3B0/C,EAAKqxb,WAAWj/N,UAAYr1R,KAAKs1f,YAAYU,aAAa/yb,EAAK0kQ,YAAa1kQ,EAAKqxb,WAAWn8N,WAAY49N,EAAYiB,GAEzE,YAAvC/zb,EAAKqxb,WAAWrE,qBAChBhtb,EAAKqxb,WAAWtE,eAAiB/sb,EAAKqxb,WAAWj/N,UACjDpyN,EAAKqxb,WAAWrE,mBAAqB,SAGzCkG,EAAUpF,UAAY,IACtBoF,EAAU9F,WAAarwf,KAAKs1f,YAAYU,aAAa,EAAGG,EAAUpF,UAAWgF,EAAYiB,MAOrGjE,EAAY13f,UAAUo8f,eAAiB,SAAUpqe,GAE7C,IAAK,IADDrX,EAAQ,EACH7Z,EAAI,EAAGA,EAAI6D,KAAKijf,aAAaxmf,OAAQN,IAAK,CAG/C,IAAK,IAFDukE,EAAM1gE,KAAKijf,aAAa9mf,GACxB2gS,EAAW,EACNv5Q,EAAI,EAAGA,EAAIm9C,EAAIuib,aAAaxmf,OAAQ8mB,IAAK,CAC9C,IAAI0/C,EAAOvC,EAAIuib,aAAa1/d,GAC5Bu5Q,GAAY98R,KAAKg2f,aAAa/yb,EAAKqxb,WAAWtE,eAAgB/sb,EAAKqxb,WAAWrE,mBAAoB5ie,EAAa41C,GAE/GjtD,EAAQ8mR,IACR9mR,EAAQ8mR,GAGhB,OAAO9mR,GAKX+8e,EAAY13f,UAAU0pQ,YAAc,SAAUrzJ,GAC1C,IAAIgmZ,EAAsB13f,KAAKs1f,YAAYqC,gBACvCnhf,EAAiBxW,KAAK81f,oBAAoB91f,KAAK21f,eAAc,IAC7Dn/e,GAAkBkhf,GAC0B,SAAxC13f,KAAK8vf,YAAYG,qBACjBjwf,KAAK8vf,YAAYG,mBAAqB,SAGF,SAAxCjwf,KAAK8vf,YAAYG,oBAC2B,UAAxCjwf,KAAK8vf,YAAYG,qBACjBjwf,KAAK8vf,YAAYE,eAAiBhwf,KAAKy3f,eAAejhf,KAYlEu8e,EAAY13f,UAAUu8f,sBAAwB,SAAUC,EAAqBC,GACzE,IAAI96f,EAAQ,EAGZ,OAFAA,EAAS66f,EAAsBC,EAAc,KAC7C96f,EAAQqP,KAAKoxB,MAAMzgC,IACJ,IAAMA,EAAQ,KAKjC+1f,EAAY13f,UAAUgE,MAAQ,WAC1B,IAAI4gE,EAAQ,IAAI8yb,EAChB9yb,EAAMq1b,YAAct1f,KAAKs1f,YAAYj2f,QACrC4gE,EAAM6vb,YAAYtK,WAAWxlf,KAAK8vf,aAClC,IAAK,IAAI3zf,EAAI,EAAGA,EAAI6D,KAAKijf,aAAaxmf,OAAQN,IAAK,CAC/C,IAAIukE,EAAM1gE,KAAKijf,aAAa9mf,GAAGkD,QAC/B4gE,EAAMgjb,aAAaz+e,KAAKk8D,GACxBA,EAAIwib,gBAAkBjjb,EACtBS,EAAIzuD,MAAQ9V,EAOhB,OALA8jE,EAAMlzD,EAAI/M,KAAK+M,EACfkzD,EAAMjzD,EAAIhN,KAAKgN,EACfizD,EAAMlqD,OAAS/V,KAAK+V,OACpBkqD,EAAMjqD,MAAQhW,KAAKgW,MACnBiqD,EAAMijb,gBAAkBljf,KAAKkjf,gBACtBjjb,GAKX8yb,EAAYgF,WAAa,SAAUx3f,GAC/B,GAAIA,aAAgBwtf,GAAU,CAC1B,IAAIrtb,EAAMuxb,GAAe+F,SAASz3f,GAClC,OAAK9C,EAAkBijE,GAGdngE,EAAK0kf,qBAAqBoK,IAAgB9uf,EAAK0kf,UAAUA,qBAAqB8N,EAC5Exyf,EAAK0kf,UAAUA,eAGtB,EANOvkb,EAAIuzb,aAcvBlB,EAAY13f,UAAU48f,qBAAuB,WACzC,IAAI5qe,EAAcrtB,KAAKm0f,oBACnB9nf,KAAKoxB,MAAMpQ,GAAehhB,KAAKoxB,MAAMz9B,KAAK61f,kBAC1C71f,KAAKk2f,qBAAqB7oe,GAE9B,IAAK,IAAIlxB,EAAI,EAAGA,EAAI6D,KAAKijf,aAAaxmf,OAAQN,IAE1C,IAAK,IADDukE,EAAM1gE,KAAKijf,aAAa9mf,GACnBonB,EAAI,EAAGA,EAAIm9C,EAAIuib,aAAaxmf,OAAQ8mB,IAEzC,IAAK,IADD0/C,EAAOvC,EAAIuib,aAAa1/d,GACnB4C,EAAI,EAAGA,EAAI88C,EAAKggb,aAAaxmf,OAAQ0pB,IACtC88C,EAAKggb,aAAa98d,aAAc4se,GAChC9vb,EAAKggb,aAAa98d,GAAG8xe,wBASzClF,EAAY13f,UAAU68f,2BAA6B,SAAUC,EAAWC,GAIpE,IAAK,IAHDt2b,KACAvkE,EAAQ46f,EAAUxwL,YAClB9oT,EAAMu5e,EAAQzwL,YAAcywL,EAAQ9D,WAAWn8N,WAC1Ch8R,EAAI,EAAGA,EAAI6D,KAAKijf,aAAaxmf,OAAQN,IAE1C,IAAK,IADDukE,EAAM1gE,KAAKijf,aAAa9mf,GACnBonB,EAAI,EAAGA,EAAIm9C,EAAIuib,aAAaxmf,OAAQ8mB,IAAK,CAC9C,IAAI0/C,EAAOvC,EAAIuib,aAAa1/d,GACxBokT,EAAc1kQ,EAAK0kQ,YACnBxvC,EAAal1N,EAAKqxb,WAAWn8N,WAC5BwvC,EAAcxvC,EAAa56R,GAASoqU,EAAcxvC,EAAat5Q,GAAS8oT,EAAcpqU,GAASoqU,EAAc9oT,EAC1GijD,EAAMvjE,QAAQ0kE,GAAQ,GACtBnB,EAAMt9D,KAAKy+D,GAGT0kQ,EAAcpqU,GAASoqU,EAAc9oT,GAAO8oT,EAAcxvC,EAAat5Q,GACzE8oT,EAAcpqU,GAASoqU,EAAcxvC,EAAat5Q,EAClDijD,EAAMvjE,QAAQ0kE,GAAQ,GACtBnB,EAAMt9D,KAAKy+D,GAGV0kQ,IAAgBpqU,GAASoqU,EAAcxvC,IAAet5Q,GACvDijD,EAAMvjE,QAAQ0kE,GAAQ,GACtBnB,EAAMt9D,KAAKy+D,GAK3B,OAAOnB,GAOXixb,EAAY13f,UAAUg9f,uBAAyB,SAAUC,GACrD,IAAK,IAAI53b,EAAM,EAAGA,EAAM1gE,KAAKijf,aAAaxmf,OAAQikE,IAC9C1gE,KAAKijf,aAAavib,GAAK63b,qBAAqBD,IAMpDvF,EAAY13f,UAAUm9f,wBAA0B,SAAUC,EAAW/ye,GACjE,IAAK,IAAIvpB,EAAI,EAAGA,EAAIs8f,EAAUh8f,OAAQN,IAAK,CAC7Bs8f,EAAUt8f,GAChB+mf,gBAAkBljf,KACtBA,KAAKijf,aAAa56d,OAAO3C,EAAY,EAAG+ye,EAAUt8f,IAEtD6D,KAAK04f,eAAehze,GACpB1lB,KAAK62f,eAAgB,EACrB72f,KAAK42f,oBACL52f,KAAK62f,eAAgB,GAKzB9D,EAAY13f,UAAUq9f,eAAiB,SAAUhze,GAC7C,IAAK,IAAIvpB,EAAIupB,EAAYvpB,EAAI6D,KAAKijf,aAAaxmf,OAAQN,IAAK,CACxD,IAAIukE,EAAM1gE,KAAKijf,aAAa9mf,GAC5BukE,EAAIzuD,MAAQ9V,EACZ,IAAK,IAAIonB,EAAI,EAAGA,EAAIm9C,EAAIuib,aAAaxmf,OAAQ8mB,IACzCm9C,EAAIuib,aAAa1/d,GAAGtR,MAAQsR,EAC5Bm9C,EAAIuib,aAAa1/d,GAAGk9Q,SAAW//N,EAAI+/N,SAEvC/6Q,MAMRqte,EAAY13f,UAAU63f,gBAAkB,SAAU9Y,GAC9C,IAAIrke,EAAS/V,KAAK+V,OAClB,IAAKtY,EAAkBuC,KAAKijf,cAAe,CACvC,IAAK,IAAI1/d,EAAI,EAAGA,EAAIvjB,KAAKijf,aAAaxmf,OAAQ8mB,IAAK,CAC/C,IAAIoue,OAASx2f,EAMb,GAJAw2f,EADkB3xf,KAAKijf,aAAa1/d,GAE/B9lB,EAAkBk0f,IACnBA,EAAOuB,gBAAgB9Y,GAEvB38e,EAAkBuC,KAAKijf,cACvB,MAEJ1/d,IAEJvjB,KAAKijf,kBAAe9nf,EAEnBsC,EAAkBuC,KAAKkjf,mBACnBzlf,EAAkBuC,KAAKkjf,gBAAgBD,iBACiB,IAArDjjf,KAAKkjf,gBAAgBD,aAAa1kf,QAAQyB,OAC1CA,KAAKkjf,gBAAgBD,aAAa56d,OAAOroB,KAAKkjf,gBAAgBD,aAAa1kf,QAAQyB,MAAO,GAE9FA,KAAKkjf,gBAAgBnte,QAAUA,GAC1BtY,EAAkBuC,KAAKkjf,gBAAgBD,eAA8D,IAA7Cjjf,KAAKkjf,gBAAgBD,aAAaxmf,SACxFuD,KAAKkjf,2BAA2BR,IACnC1if,KAAKkjf,gBAAgBgQ,gBAAgB9Y,IAG7Cp6e,KAAKkjf,qBAAkB/nf,GAE3B6E,KAAKsS,WAKTygf,EAAY13f,UAAUiX,QAAU,WAI5BtS,KAAK8vf,iBAAc30f,EAInB6E,KAAKw1f,0BAAuBr6f,EAC5B6E,KAAK24f,cACL34f,KAAK24f,gBAAax9f,EAIlB6E,KAAKs1f,iBAAcn6f,EACnB6E,KAAKqtO,WAAQlyO,EACb6E,KAAKkrP,gBAAa/vP,EAClB6E,KAAKmrP,eAAYhwP,EACjB6E,KAAKorP,iBAAcjwP,EACnB6E,KAAKqrP,kBAAelwP,EACpB6E,KAAK44f,kBAAez9f,EACpB6E,KAAKkyC,iBAAc/2C,EACnB6E,KAAKkgC,WAAQ/kC,EACbgwF,EAAO9vF,UAAUiX,QAAQhR,KAAKtB,OAE3B+yf,GACTR,IAKEN,GAAgC,SAAU9ma,GAE1C,SAAS8ma,IACL,IAAIlyf,EAAQorF,EAAO7pF,KAAKtB,OAASA,KAQjC,OAJAD,EAAMy1f,wBACNz1f,EAAMq1f,eAAiB,EACvBr1f,EAAMs1f,kBAAoB,EAC1Bt1f,EAAMo2f,UAAY,IAAIjG,GAAWnwf,GAC1BA,EA4RX,OAtSAuqF,GAAU2na,EAAgB9ma,GAY1B7sF,OAAOuJ,eAAeoqf,EAAe52f,UAAW,YAI5CqM,IAAK,WACD,OAAI1H,KAAKkjf,gBACEljf,KAAKkjf,gBAAgBD,aAAa1kf,QAAQyB,OAE7C,GAEZ2H,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeoqf,EAAe52f,UAAW,cAI5CqM,IAAK,WACD,GAAI1H,KAAKkjf,2BAA2B6P,GAChC,OAAO/yf,KAAKkjf,iBAIpBv7e,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeoqf,EAAe52f,UAAW,WAI5CqM,IAAK,WACD,IAAIuK,EAAQjS,KAAK4xf,aACjB,GAAI3/e,GAAS,GAAKA,EAAQjS,KAAKi0f,WAAWhR,aAAaxmf,OAAS,EAC5D,OAAOuD,KAAKi0f,WAAWhR,aAAahxe,EAAQ,IAIpDtK,YAAY,EACZC,cAAc,IAKlBqqf,EAAe52f,UAAUw9C,OAAS,SAAU84c,GACxC,OAAOA,aAAkBM,GAAkBN,EAAOwE,YAAcn2f,KAAKm2f,WAKzElE,EAAe52f,UAAUo6f,aAAe,SAAUrb,GAC9C,IAAK,IAAIj+e,EAAI,EAAGA,EAAI6D,KAAKijf,aAAaxmf,OAAQN,IAAK,CAC/C,IAAI8mE,EAAOjjE,KAAKijf,aAAa9mf,GAE7B,GADA8mE,EAAK4vb,cAAczY,GACa,IAA5Bn3a,EAAKqxb,WAAWr9N,QAAe,CACdh0N,EAAKltD,OAASktD,EAAKxmC,OAAO/vB,IAAMu2D,EAAKxmC,OAAO9vB,OACxD3M,KAAK+V,OAAS/V,KAAKi0f,WAAWnE,YAAYl5N,YAAe3zN,EAAKltD,SAC/D/V,KAAK+V,OAAS/V,KAAKi0f,WAAWnE,YAAYl5N,YAAc3zN,EAAKltD,WAQ7Ek8e,EAAe+F,SAAW,SAAUz3f,GAChC,GAAIA,aAAgBwtf,GAAU,CAC1B,IAAI9qb,EAAO8ub,GAAgB8G,UAAUt4f,GACrC,OAAK9C,EAAkBwlE,GAGd1iE,EAAK0kf,qBAAqBiL,IAAc3vf,EAAK0kf,UAAUA,qBAAqBgN,EAC1E1xf,EAAK0kf,UAAUA,eAGtB,EANOhib,EAAKixb,WAcxBjC,EAAe52f,UAAUk5R,QAAU,SAAUkM,EAAU5H,GACnD,IAAK,IAAI18R,EAAI,EAAGA,EAAI6D,KAAKijf,aAAaxmf,OAAQN,IAAK,CAC/C,IAAI8mE,EAAOjjE,KAAKijf,aAAa9mf,GAC7B,GAAI8mE,EAAKw9N,WAAaA,GAAYx9N,EAAKhxD,QAAU4mR,EAC7C,OAAO51N,IAQnBgvb,EAAe52f,UAAUk9f,qBAAuB,SAAUD,GAGtD,IAAK,IAFDx2b,EAAQ9hE,KAAKijf,aACb5tN,EAAYijO,EAAmBx2b,EAAMrlE,OAChCwmE,EAAO,EAAGA,EAAOnB,EAAMrlE,OAAQwmE,IACpCnB,EAAMmB,GAAMqxb,WAAWtE,eAAiB36N,GAMhD48N,EAAe52f,UAAUs7f,aAAe,SAAUmC,EAAW7mf,EAAOuE,GAChE,IAAIuif,EAAa,EACb/if,EAAQ,EACRi+e,EAAaj0f,KAAKi0f,WAClBkC,EAAYn2f,KAAKm2f,UACrB,IAAe,IAAXlkf,EACA+D,EAAQi+e,EAAW+B,aAAaG,EAAUtF,gBAAiBsF,EAAUrF,oBAAqBt6e,EAAgB,WAO1G,GAJAuif,GAAc9E,EAAW+B,aAAaG,EAAUtF,gBAAiBsF,EAAUrF,oBAAqBt6e,EAAgB,MAC5GvE,EAAQ,IACR8mf,GAAc/4f,KAAKg5f,cAAc/mf,EAAOuE,IAExCvE,EAAQjS,KAAKijf,aAAaxmf,OAAQ,CAClC,IAAIwmE,EAAOjjE,KAAKijf,aAAahxe,GAC7B+D,EAAQi+e,EAAW+B,aAAa/yb,EAAKqxb,WAAWtE,eAAgB/sb,EAAKqxb,WAAWrE,mBAAoBz5e,EAAgB,WAGpHR,EAAQi+e,EAAW+B,aAAaG,EAAUnF,eAAgBmF,EAAUlF,mBAAoBz6e,EAAgB,MAGhH,IAAIyif,EAAiBj5f,KAAKk5f,eAAeJ,EAAWC,GAEpD,OADmB/4f,KAAKk5f,eAAeJ,EAAWC,EAAa/if,GACzCijf,GAE1BhH,EAAe52f,UAAU69f,eAAiB,SAAUJ,EAAWntf,GAC3DA,EAASU,KAAKoxB,MAAM9xB,GACpB,IAAIsG,EAAQ,EACZ,GAAI6mf,EAAUv6f,QAAQoN,IAAW,EAC7BsG,EAAQ6mf,EAAUv6f,QAAQoN,OAEzB,CACD,IAAK,IAAIxP,EAAI,EAAGA,EAAI28f,EAAUr8f,OAAQN,IAClC,GAAI28f,EAAU38f,GAAKwP,EACf,OAAOxP,EAGf8V,EAAQ6mf,EAAUr8f,OAAS,EAE/B,OAAOwV,GAEXggf,EAAe52f,UAAU29f,cAAgB,SAAU/mf,EAAOuE,GAGtD,IAAK,IAFDuif,EAAa,EACb9E,EAAaj0f,KAAKi0f,WACb93f,EAAI,EAAGA,EAAI6D,KAAKijf,aAAaxmf,OAAQN,IAAK,CAC/C,IAAIm4f,EAAat0f,KAAKijf,aAAa9mf,GAAGm4f,WACtC,GAAIn4f,IAAM8V,EACN,MAEJ8mf,GAAc9E,EAAW+B,aAAa1B,EAAWtE,eAAgBsE,EAAWrE,mBAAoBz5e,EAAgB,MAEpH,OAAOuif,GAKX9G,EAAe52f,UAAU89f,wBAA0B,WAG/C,IAAK,IAFDpC,EAAkB/2f,KAAKo5f,6BACvB9gO,EAAkBt4R,KAAKygS,SAClBtkS,EAAI,EAAGA,EAAI46f,EAAgBt6f,OAAQN,IAAK,CAC7C,IAAIk9f,EAActC,EAAgB56f,GACjBk9f,EAAYnF,SAASzzN,SAAW44N,EAAY/E,WAAWr9N,QAAU,GAEhEqB,IACd+gO,EAAY/E,WAAWr9N,SAAW,KAO9Cg7N,EAAe52f,UAAU+9f,2BAA6B,SAAUE,GAG5D,IAFA,IAAIvC,KACAr2b,EAAM44b,EAAUt5f,KAAOA,KAAKu5f,gBACxB97f,EAAkBijE,IAAM,CAC5B,IAAK,IAAIvkE,EAAI,EAAGA,EAAIukE,EAAIuib,aAAaxmf,OAAQN,IAAK,CAC9C,IAAI8mE,EAAOvC,EAAIuib,aAAa9mf,GACxB8mE,EAAKqxb,WAAWr9N,QAAU,GAC1B8/N,EAAgB1ue,OAAO,EAAG,EAAG46C,GAGrCvC,EAAMA,EAAI64b,eAEd,OAAOxC,GAKX9E,EAAe52f,UAAUo4f,mBAAqB,SAAU3/d,GACpD,IAAK,IAAI33B,EAAI,EAAGA,EAAI6D,KAAKijf,aAAaxmf,OAAQN,IAAK,CAC/C,IAAI4Q,EAAIV,KAAKoxB,MAAMz9B,KAAKijf,aAAa9mf,GAAG4Q,GACxC,GAAIA,EAAI/M,KAAKijf,aAAa9mf,GAAGsgC,OAAOjwB,KAAO,GAAKsnB,EAAM/mB,GAC9CA,EAAI/M,KAAKijf,aAAa9mf,GAAG6Z,OAAU8d,EAAM/mB,EAC7C,OAAO/M,KAAKijf,aAAa9mf,GAExB,GAAIA,IAAM6D,KAAKijf,aAAaxmf,OAAS,GAClCuD,KAAKijf,aAAa9mf,GAAG4Q,EAAI/M,KAAKijf,aAAa9mf,GAAG6Z,MAAS,GAAK8d,EAAM/mB,EACtE,OAAO/M,KAAKijf,aAAa9mf,GAGjC,IAAIq9f,OAAar+f,EASjB,OARI6E,KAAKijf,aAAaxmf,OAAS,IAEvB+8f,EADAx5f,KAAKijf,aAAa,GAAGl2e,GAAK+mB,EAAM/mB,EACnB/M,KAAKijf,aAAajjf,KAAKijf,aAAaxmf,OAAS,GAAGg3f,mBAAmB3/d,GAGnE9zB,KAAKijf,aAAa,GAAGwQ,mBAAmB3/d,IAGtD0le,GAKXvH,EAAe52f,UAAU63f,gBAAkB,SAAU9Y,GACjD,IAAIrke,EAAS/V,KAAK+V,OAClB,IAAKtY,EAAkBuC,KAAKijf,cAAe,CACvC,IAAK,IAAI9mf,EAAI,EAAGA,EAAI6D,KAAKijf,aAAaxmf,OAAQN,IAAK,CAG/C,GAFa6D,KAAKijf,aAAa9mf,GACxB+2f,gBAAgB9Y,GACnB38e,EAAkBuC,KAAKijf,cACvB,MAEJ9mf,IAEJ6D,KAAKijf,kBAAe9nf,EAEnBsC,EAAkBuC,KAAKkjf,kBACnBzlf,EAAkBuC,KAAKkjf,gBAAgBD,gBACxCjjf,KAAKkjf,gBAAgBD,aAAa56d,OAAOroB,KAAKkjf,gBAAgBD,aAAa1kf,QAAQyB,MAAO,IACrFvC,EAAkBuC,KAAKkjf,gBAAgBD,eAA8D,IAA7Cjjf,KAAKkjf,gBAAgBD,aAAaxmf,SACxFuD,KAAKkjf,2BAA2B6P,GACnC/yf,KAAKkjf,gBAAgBgQ,gBAAgB9Y,GAEhCp6e,KAAKkjf,gBAAgBA,2BAA2BR,KACrD1if,KAAKkjf,gBAAgBA,gBAAgBnte,QAAUA,GAEnD/V,KAAKkjf,gBAAgBnte,QAAUA,GAGvC/V,KAAKsS,WAKT2/e,EAAe52f,UAAUgE,MAAQ,WAC7B,IAAIqhE,EAAM,IAAIuxb,EACdvxb,EAAIy1b,UAAU3Q,WAAWxlf,KAAKm2f,WAC9Bz1b,EAAI00b,eAAiBp1f,KAAKo1f,eAC1B10b,EAAI20b,kBAAoBr1f,KAAKq1f,kBAC7B,IAAK,IAAIl5f,EAAI,EAAGA,EAAI6D,KAAKijf,aAAaxmf,OAAQN,IAAK,CAC/C,IAAI8mE,EAAOjjE,KAAKijf,aAAa9mf,GAAGkD,QAChCqhE,EAAIuib,aAAaz+e,KAAKy+D,GACtBA,EAAKigb,gBAAkBxib,EACvBuC,EAAKhxD,MAAQ9V,EACb8mE,EAAKw9N,SAAWzgS,KAAKygS,SAMzB,OAJA//N,EAAI3zD,EAAI/M,KAAK+M,EACb2zD,EAAI1zD,EAAIhN,KAAKgN,EACb0zD,EAAI3qD,OAAS/V,KAAK+V,OAClB2qD,EAAI1qD,MAAQhW,KAAKgW,MACV0qD,GAKXuxb,EAAe52f,UAAUiX,QAAU,WAI/BtS,KAAKm2f,eAAYh7f,EACjB6E,KAAKm2f,eAAYh7f,EACjB6E,KAAKw1f,wBACLx1f,KAAKw1f,0BAAuBr6f,EAC5B6E,KAAKo1f,oBAAiBj6f,EACtB6E,KAAKq1f,uBAAoBl6f,EACzBgwF,EAAO9vF,UAAUiX,QAAQhR,KAAKtB,OAE3Biyf,GACTM,IAKER,GAAiC,SAAU5ma,GAE3C,SAAS4ma,IACL,IAAIhyf,EAAQorF,EAAO7pF,KAAKtB,OAASA,KASjC,OALAD,EAAM0gS,UAAY,EAClB1gS,EAAM08B,OAAS,IAAIqgS,GAAO/8T,EAAMmrP,WAAYnrP,EAAMorP,UAAWprP,EAAMqrP,YAAarrP,EAAMsrP,cACtFtrP,EAAMm1f,gBAAkB,EACxBn1f,EAAMo1f,iBAAmB,EACzBp1f,EAAMu0f,WAAa,IAAIpD,GAAYnxf,GAC5BA,EA8zBX,OAz0BAuqF,GAAUyna,EAAiB5ma,GAa3B7sF,OAAOuJ,eAAekqf,EAAgB12f,UAAW,eAI7CqM,IAAK,WACD,OAAO1H,KAAKi0f,WAAWqB,YAAYv3b,QAAQ/9D,KAAK2nU,cAEpDhgU,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAekqf,EAAgB12f,UAAW,cAI7CqM,IAAK,WACD,OAAI1H,KAAKs0f,YAAct0f,KAAKs0f,WAAW9C,kBAC5Bxxf,KAAKs0f,WAAWppQ,WAEjBztP,EAAkBuC,KAAKi0f,aAAgBx2f,EAAkBuC,KAAKi0f,WAAWnE,aAIxE,EAHA9vf,KAAKi0f,WAAWnE,YAAY5kQ,YAM3CvjP,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAekqf,EAAgB12f,UAAW,aAI7CqM,IAAK,WACD,OAAI1H,KAAKs0f,YAAct0f,KAAKs0f,WAAW9C,kBAC5Bxxf,KAAKs0f,WAAWnpQ,UAEjB1tP,EAAkBuC,KAAKi0f,aAAgBx2f,EAAkBuC,KAAKi0f,WAAWnE,aAIxE,EAHA9vf,KAAKi0f,WAAWnE,YAAY3kQ,WAM3CxjP,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAekqf,EAAgB12f,UAAW,eAI7CqM,IAAK,WACD,OAAI1H,KAAKs0f,YAAct0f,KAAKs0f,WAAW9C,kBAC5Bxxf,KAAKs0f,WAAWlpQ,YAEjB3tP,EAAkBuC,KAAKi0f,aAAgBx2f,EAAkBuC,KAAKi0f,WAAWnE,aAIxE,EAHA9vf,KAAKi0f,WAAWnE,YAAY1kQ,aAM3CzjP,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAekqf,EAAgB12f,UAAW,gBAI7CqM,IAAK,WACD,OAAI1H,KAAKs0f,YAAct0f,KAAKs0f,WAAW9C,kBAC5Bxxf,KAAKs0f,WAAWjpQ,aAEjB5tP,EAAkBuC,KAAKi0f,aAAgBx2f,EAAkBuC,KAAKi0f,WAAWnE,aAIxE,EAHA9vf,KAAKi0f,WAAWnE,YAAYzkQ,cAM3C1jP,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAekqf,EAAgB12f,UAAW,aAI7CqM,IAAK,WACD,OAAI1H,KAAKk0f,SACEl0f,KAAKk0f,SAASjR,aAAa1kf,QAAQyB,OAEtC,GAEZ2H,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAekqf,EAAgB12f,UAAW,cAI7CqM,IAAK,WACD,GAAI1H,KAAKkjf,2BAA2B+O,GAChC,OAAOjyf,KAAKkjf,gBAAgB+Q,YAIpCtsf,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAekqf,EAAgB12f,UAAW,YAI7CqM,IAAK,WACD,OAAO1H,KAAKkjf,iBAEhBv7e,YAAY,EACZC,cAAc,IAKlBmqf,EAAgB12f,UAAUw9C,OAAS,SAAU84c,GACzC,OAAOA,aAAkBI,GAAmBJ,EAAO2C,aAAet0f,KAAKs0f,YAK3EvC,EAAgB12f,UAAUo+f,kBAAoB,WAE1C,IADA,IAAIx5b,EAAQjgE,KAAKi0f,WACVh0b,aAAiB8yb,IAAe9yb,EAAMo0b,0BAA0BtC,GACnE9xb,EAAQA,EAAMo0b,eAAeoF,oBAEjC,OAAOx5b,GAKX8xb,EAAgB12f,UAAU22f,uBAAyB,WAC/C,GAAIhyf,KAAKkjf,2BAA2B+O,GAAgB,CAChD,IAAIvxb,EAAM1gE,KAAKkjf,gBACf,EAAG,CAEC,GADAxib,EAAMA,EAAIyxb,uBACN10f,EAAkBijE,IAAQA,EAAIzuD,MAAQjS,KAAKygS,SAC3C,MAEJ,IAAIi5N,EAAeh5b,EAAI6zN,QAAQv0R,KAAKygS,SAAUzgS,KAAKiS,OACnD,GAAIynf,EACA,OAAOA,QAENh5b,KAOjBqxb,EAAgB12f,UAAUg3f,mBAAqB,WAC3C,IAAIp7N,EAAUj3R,KAAKs0f,WAAWr9N,QAC9B,GAAIj3R,KAAKkjf,2BAA2B+O,GAAgB,CAChD,IAAIvxb,EAAM1gE,KAAKkjf,gBACf,EAAG,CAEC,GADAxib,EAAMA,EAAI4xb,mBACN70f,EAAkBijE,IAAQA,EAAIzuD,MAAQjS,KAAKygS,SAAWxJ,EACtD,MAEJ,IAAI0iO,EAAWj5b,EAAI6zN,QAAQv0R,KAAKygS,SAAUzgS,KAAKiS,OAC/C,GAAI0nf,EACA,OAAOA,QAENj5b,KAOjBqxb,EAAgB12f,UAAUo4f,mBAAqB,SAAU3/d,GACrD,IAAK,IAAI33B,EAAI,EAAGA,EAAI6D,KAAKijf,aAAaxmf,OAAQN,IAC1C,GAAI6D,KAAKijf,aAAa9mf,GAAG6Q,GAAK8mB,EAAM9mB,GAC5BhN,KAAKijf,aAAa9mf,GAAG6Q,EAAIhN,KAAKijf,aAAa9mf,GAAG4Z,QAAW+d,EAAM9mB,EACnE,OAAOhN,KAAKijf,aAAa9mf,GAAGs3f,mBAAmB3/d,GAGvD,IAAI6/d,OAAkBx4f,EAStB,OARI6E,KAAKijf,aAAaxmf,OAAS,IAEvBk3f,EADA3zf,KAAKijf,aAAa,GAAGj2e,GAAK8mB,EAAM9mB,EACdhN,KAAKijf,aAAajjf,KAAKijf,aAAaxmf,OAAS,GAAGg3f,mBAAmB3/d,GAGnE9zB,KAAKijf,aAAa,GAAGwQ,mBAAmB3/d,IAG3D6/d,GAKX5B,EAAgB12f,UAAU0pQ,YAAc,SAAUirP,GACH,SAAvChwf,KAAKs0f,WAAWrE,oBAChBjwf,KAAKs0f,WAAWtE,eAAiBA,EACjChwf,KAAKs0f,WAAWrE,mBAAqB,SAEO,UAAvCjwf,KAAKs0f,WAAWrE,mBACrBjwf,KAAKs0f,WAAWtE,eAAiBA,EAEW,YAAvChwf,KAAKs0f,WAAWrE,qBACrBjwf,KAAKs0f,WAAWtE,eAAiBhwf,KAAK43f,sBAAsB5H,IAEhEhwf,KAAKs0f,WAAWj/N,UAAY26N,GAKhC+B,EAAgB12f,UAAUu8f,sBAAwB,SAAUgC,GACxD,IAAI58f,EAAQ,EACRqwB,EAAcrtB,KAAKi0f,WAAW0B,eAAc,GAIhD,OAFA34f,EAAS48f,EADQ55f,KAAKi0f,WAAW6B,oBAAoBzoe,GACT,KAC5CrwB,EAAQqP,KAAKoxB,MAAMzgC,IACJ,IAAMA,EAAQ,KAKjC+0f,EAAgB8H,kBAAoB,SAAUnE,GAC1C,IAAIoE,OAAa3+f,EACb4+f,EAAarE,EAAUpB,WAAWr/N,QAClC+kO,EAAcv8f,EAAkBi4f,EAAUxB,eAAmD/4f,EAAvCu6f,EAAUxB,SAASiC,UAAUlhO,QACnFglO,EAAgBx8f,EAAkBi4f,EAAUzB,iBAAyD94f,EAA3Cu6f,EAAUzB,WAAWnE,YAAY76N,QAO/F,GANKx3R,EAAkBs8f,EAAWvtf,QAC9Bstf,EAAaC,EAAWvtf,MAExB/O,EAAkBq8f,KAClBA,EAAapE,EAAUwE,iCAAiCJ,EAAYE,EAAYC,IAEhFvE,EAAUzB,WAAWnE,YAAYl5N,YAAc,EAC/CkjO,EAAapE,EAAUwE,iCAAiCJ,EAAYE,EAAYC,OAE/E,CACD,IAAIE,OAAWh/f,EACf,GAAKsC,EAAkBi4f,EAAU6D,iBAI5B,IAAK7D,EAAUpB,WAAWn8N,WAAa,GAAKu9N,EAAU/tL,YAAc,IAAM+tL,EAAUxB,SAASzzN,SAAW,EAEzG,IADA,IAAI25N,EAAc1E,EAAUxB,SAASqF,gBAC7B97f,EAAkB28f,IAAgBA,EAAYnX,aAAaxmf,OAAS,GAAG,CAC3E,IAAK,IAAIN,EAAI,EAAGA,EAAIi+f,EAAYnX,aAAaxmf,OAAQN,IAAK,CACtD,IAAIk+f,EAAcD,EAAYnX,aAAa9mf,GAC3C,GAAIk+f,EAAY1yL,YAAc0yL,EAAY/F,WAAWn8N,aAAeu9N,EAAU/tL,YAAa,CACvFwyL,EAAWC,EAAYnX,aAAa9mf,GACpC,OAGR,IAAKsB,EAAkB08f,GACnB,MAEJC,EAAcA,EAAYb,qBAf9BY,EAAWzE,EAAU6D,eAkBzBO,EAAapE,EAAU4E,0BAA0BR,EAAYK,GAKjE,OAHI18f,EAAkBq8f,KAClBA,EAAa,IAAI/M,GAAQ2I,EAAUpB,WAAWr/N,UAE3C6kO,GAKX/H,EAAgB12f,UAAUk/f,mBAAqB,WAW3C,OAVkB,GAetBxI,EAAgB12f,UAAUm/f,oBAAsB,WAE3Bx6f,KAAKi0f,WAWtB,OAZkB,GAiBtBlC,EAAgB12f,UAAUo/f,eAAiB,WACvC,IAAIC,EAAoB16f,KAAKi0f,YAAcj0f,KAAKi0f,WAAWnE,YAAc9vf,KAAKi0f,WAAWnE,YAAYl5N,YAAc,EAYnH,OAT0C,IAAtC52R,KAAKk0f,SAASjR,aAAaxmf,OACe,EAApBi+f,EAEE,IAAnB16f,KAAK64R,WAAmB74R,KAAK64R,YAAc74R,KAAKk0f,SAASjR,aAAaxmf,OAAS,EAC9Di+f,EAAqBA,EAAoB,EAGzCA,GAO9B3I,EAAgB12f,UAAU46f,yBAA2B,WAGjD,OADej2f,KAAKkrP,WAAalrP,KAAKorP,YAAcprP,KAAKu6f,qBAAuBv6f,KAAKw6f,sBAAwBx6f,KAAKy6f,kBAMtH1I,EAAgB12f,UAAUi/f,0BAA4B,SAAUR,EAAYJ,GAExE,GAAKj8f,EAAkBi8f,KAAmBj8f,EAAkBq8f,IAAyC,SAAzBA,EAAW/4L,YAAyB+4L,EAAWa,cACvH,KAAKl9f,EAAkBq8f,IAAiBA,EAAW7U,UAAUA,qBAAqBoK,IAE9E,OAAOrvf,KAAKk6f,iCAAiCJ,EAAY7H,GAAe+F,SAAS8B,EAAW7U,WAAWkR,UAAUlhO,QAAS89N,GAAYgF,WAAW+B,EAAW7U,WAAW6K,YAAY76N,aAGtL,CACD,IACI2lO,OAAsBz/f,EAK1B,GAHKsC,EAAkBi8f,EAAapF,WAAWr/N,UAAax3R,EAAkBi8f,EAAapF,WAAWr/N,QAAQxoR,QAA8D,SAApDitf,EAAapF,WAAWr/N,QAAQxoR,MAAMs0T,YAC1J65L,EAAsBlB,EAAapF,WAAWr/N,QAAQxoR,OAErDhP,EAAkBm9f,IAA0D,SAAlCA,EAAoB75L,WAG9D,KAAKtjU,EAAkBq8f,IAAiBA,EAAW7U,UAAUA,qBAAqBoK,IAEnF,OAAOrvf,KAAKk6f,iCAAiCJ,EAAY7H,GAAe+F,SAAS8B,EAAW7U,WAAWkR,UAAUlhO,QAAS89N,GAAYgF,WAAW+B,EAAW7U,WAAW6K,YAAY76N,cAJlKj1R,KAAK66f,yBAAyBD,EAAqBd,GAO5E,OAAOA,GAKX/H,EAAgB12f,UAAUw/f,yBAA2B,SAAUv2d,EAAQw2d,GAGnE,GAAIr9f,EAAkB6mC,GAClB,OAAOw2d,EAEN,GAAIr9f,EAAkBq9f,GACvB,OAAOx2d,EAEX,IAAIy2d,EAAez2d,EAAOkpd,kBACtBwN,EAAuBF,EAAetN,kBAE1C,GAAIuN,IAAiBC,EAAsB,CAEvC,IAAIC,EAAiB32d,EAAOwpd,gBACxBoN,EAAyBJ,EAAehN,gBAC5C,GAAImN,IAAmBC,EAAwB,CAE3C,IAAIC,EAAiBn7f,KAAKo7f,gBAAgB92d,EAAO9N,OAC7C6ke,EAAKF,EAAev+d,EACpB0+d,EAAKH,EAAet+d,EACpB0+d,EAAKJ,EAAer+d,EACpB0+d,EAAyBx7f,KAAKo7f,gBAAgBN,EAAetke,OAC7Dile,EAAKD,EAAuB5+d,EAC5B8+d,EAAKF,EAAuB3+d,EAC5B8+d,EAAKH,EAAuB1+d,EAC5B8+d,EAAoBP,EAAKE,EAAM,EAAID,EACnCO,EAA4BJ,EAAKE,EAAM,EAAID,EAC/C,OAAIE,IAAqBC,GACrBD,EAAoBL,EAAM,EAAID,EAC9BO,EAA4BF,EAAM,EAAID,EAClCE,IAAqBC,EACjBP,IAAOI,EACAp3d,EAEFg3d,EAAKI,EACHZ,EAGAx2d,EAGNs3d,EAAmBC,EACjBf,EAGAx2d,GAGNs3d,EAAmBC,EACjBf,EAGAx2d,EAGV,OAAI22d,EAAiBC,EACf52d,EAGAw2d,EAGV,OAAIC,EAAeC,EACb12d,EAGAw2d,GAMf/I,EAAgB12f,UAAU6+f,iCAAmC,SAAUJ,EAAYE,EAAYC,GAC3F,OAAKx8f,EAAkBq8f,IAAyC,SAAzBA,EAAW/4L,aAAyB+4L,EAAWa,cAEvD,SAAzBb,EAAW/4L,WAAiD,IAAzB+4L,EAAW1sa,WAAwC,YAArB0sa,EAAWtje,QAIxE/4B,EAAkBq8f,IAAgBA,EAAW7U,qBAAqB8I,IAA6E,IAAhEgE,EAAgB8G,UAAUiB,EAAW7U,WAAWt9K,aAChIlqU,EAAkBw8f,IAAkBx8f,EAAkBw8f,EAAaztf,QACpEstf,EAAaG,EAAaztf,MAEvBstf,GAEDr8f,EAAkBu8f,IACpBv8f,EAAkBu8f,EAAWvrY,WAA+C,SAAlCurY,EAAWvrY,SAASsyM,UAG5DtjU,EAAkBw8f,IACpBx8f,EAAkBw8f,EAAaxrY,WAAiD,SAApCwrY,EAAaxrY,SAASsyM,UAI/D+4L,EAHAA,EAAaG,EAAaxrY,SAJ1BqrY,EAAaE,EAAWvrY,SAXxBqrY,GAwBf/H,EAAgB+J,mBAAqB,SAAUpG,GAC3C,IAAIqG,OAAc5ggB,EACd4+f,EAAarE,EAAUpB,WAAWr/N,QAClC+kO,EAAcv8f,EAAkBi4f,EAAUxB,eAAmD/4f,EAAvCu6f,EAAUxB,SAASiC,UAAUlhO,QACnFglO,EAAgBx8f,EAAkBi4f,EAAUzB,iBAAyD94f,EAA3Cu6f,EAAUzB,WAAWnE,YAAY76N,QAO/F,GANKx3R,EAAkBs8f,EAAWttf,SAC9Bsvf,EAAchC,EAAWttf,OAEzBhP,EAAkBs+f,KAClBA,EAAcrG,EAAUsG,kCAAkCD,EAAa/B,EAAYC,IAEnFvE,EAAUzB,WAAWnE,YAAYl5N,YAAc,EAC/CmlO,EAAcrG,EAAUsG,kCAAkCD,EAAa/B,EAAYC,OAElF,CACD,IAAIN,OAAWx+f,EACVsC,EAAkBi4f,EAAUuG,cAC7BtC,EAAWjE,EAAUuG,YAGzBF,EAAcrG,EAAUwG,2BAA2BH,EAAapC,GAKpE,OAHIl8f,EAAkBs+f,KAClBA,EAAc,IAAIhP,GAAQ2I,EAAUpB,WAAWr/N,UAE5C8mO,GAKXhK,EAAgB12f,UAAU6ggB,2BAA6B,SAAUH,EAAapC,GAE1E,GAAIl8f,EAAkBk8f,KAAel8f,EAAkBs+f,IAA2C,SAA1BA,EAAYh7L,YAAyBg7L,EAAYpB,cACrH,KAAKl9f,EAAkBs+f,IAAkBA,EAAY9W,UAAUA,qBAAqBoK,IAEhF,OAAOrvf,KAAKg8f,kCAAkCD,EAAa9J,GAAe+F,SAAS+D,EAAY9W,WAAWkR,UAAUlhO,QAAS89N,GAAYgF,WAAWgE,EAAY9W,WAAW6K,YAAY76N,aAG1L,CACD,IAAIknO,OAAqBhhgB,EAKzB,GAHKsC,EAAkBk8f,EAASrF,WAAWr/N,UAAax3R,EAAkBk8f,EAASrF,WAAWr/N,QAAQzoR,OAAwD,SAA/Cmtf,EAASrF,WAAWr/N,QAAQzoR,KAAKu0T,YAC5Io7L,EAAqBxC,EAASrF,WAAWr/N,QAAQzoR,OAEhD/O,EAAkB0+f,IAAwD,SAAjCA,EAAmBp7L,UAC7D,OAAO/gU,KAAK66f,yBAAyBkB,EAAaI,GAEjD,KAAK1+f,EAAkBs+f,IAAkBA,EAAY9W,UAAUA,qBAAqBoK,IAErF,OAAOrvf,KAAKg8f,kCAAkCD,EAAa9J,GAAe+F,SAAS+D,EAAY9W,WAAWkR,UAAUlhO,QAAS89N,GAAYgF,WAAWgE,EAAY9W,WAAW6K,YAAY76N,SAG/L,OAAO8mO,GAKXhK,EAAgB12f,UAAU2ggB,kCAAoC,SAAUD,EAAa/B,EAAYC,GAC7F,OAAKx8f,EAAkBs+f,IAA2C,SAA1BA,EAAYh7L,aAAyBg7L,EAAYpB,cAEzD,SAA1BoB,EAAYh7L,WAAkD,IAA1Bg7L,EAAY3ua,WAAyC,YAAtB2ua,EAAYvle,QAI3E/4B,EAAkBs+f,IAAiBA,EAAY9W,qBAAqB8I,IAAagE,EAAgB8G,UAAUkD,EAAY9W,WAAWt9K,cAAgBoqL,EAAgB8G,UAAUkD,EAAY9W,WAAWiP,SAASjR,aAAaxmf,OAAS,GACnOgB,EAAkBw8f,IAAkBx8f,EAAkBw8f,EAAaxtf,SACpEsvf,EAAc9B,EAAaxtf,OAExBsvf,GAEDt+f,EAAkBu8f,IACpBv8f,EAAkBu8f,EAAWvrY,WAA+C,SAAlCurY,EAAWvrY,SAASsyM,UAG5DtjU,EAAkBw8f,IACpBx8f,EAAkBw8f,EAAaxrY,WAAiD,SAApCwrY,EAAaxrY,SAASsyM,UAI/Dg7L,EAHAA,EAAc9B,EAAaxrY,SAJ3BstY,EAAc/B,EAAWvrY,SAXzBstY,GAwBfhK,EAAgBqK,iBAAmB,SAAU1G,GACzC,IAAI2G,OAAYlhgB,EACZ4+f,EAAarE,EAAUpB,WAAWr/N,QAClC+kO,EAAcv8f,EAAkBi4f,EAAUxB,eAAmD/4f,EAAvCu6f,EAAUxB,SAASiC,UAAUlhO,QACnFglO,EAAgBx8f,EAAkBi4f,EAAUzB,iBAAyD94f,EAA3Cu6f,EAAUzB,WAAWnE,YAAY76N,QAO/F,GANKx3R,EAAkBs8f,EAAWrtf,OAC9B2vf,EAAYtC,EAAWrtf,KAEvBjP,EAAkB4+f,KAClBA,EAAY3G,EAAU4G,gCAAgCD,EAAWrC,EAAYC,IAE7EvE,EAAUzB,WAAWnE,YAAYl5N,YAAc,EAC/CylO,EAAY3G,EAAU4G,gCAAgCD,EAAWrC,EAAYC,OAE5E,CAID,IAHA,IAAIsC,OAAcphgB,EAEdqhgB,EAAU9G,EAAUxB,SAASqF,gBACzB97f,EAAkB++f,IAAYA,EAAQvZ,aAAaxmf,OAAS,GAAG,CACnE,IAAK,IAAIN,EAAI,EAAGA,EAAIqggB,EAAQvZ,aAAaxmf,OAAQN,IAAK,CAElD,IADIk+f,EAAcmC,EAAQvZ,aAAa9mf,IACvBwrU,YAAc0yL,EAAY/F,WAAWn8N,WAAa,GAAKu9N,EAAU/tL,YAAa,CAC1F40L,EAAcC,EAAQvZ,aAAa9mf,GACnC,OAGR,IAAKsB,EAAkB8+f,GACnB,MAKJ,GAHAC,EAAUA,EAAQjD,eAGd97f,EAAkB++f,IAAY/+f,EAAkB8+f,GAEhD,GADAC,EAAU9G,EAAUxB,SAASqF,eACzB7D,EAAU/tL,YAAc60L,EAAQvZ,aAAaxmf,OAC7C,IAASN,EAAI,EAAGA,EAAIqggB,EAAQvZ,aAAaxmf,OAAQN,IAAK,CAClD,IAAIk+f,EACJ,IADIA,EAAcmC,EAAQvZ,aAAa9mf,IACvBwrU,cAAgB+tL,EAAU/tL,YAAa,CACnD40L,EAAcC,EAAQvZ,aAAa9mf,GACnC,YAORoggB,EAAc7G,EAAUxB,SAASqF,eAAetW,aAAayS,EAAUxB,SAASqF,eAAetW,aAAaxmf,OAAS,GAKjI4/f,EAAY3G,EAAU+G,yBAAyBJ,EAAWE,GAK9D,OAHI9+f,EAAkB4+f,KAClBA,EAAY,IAAItP,GAAQ2I,EAAUpB,WAAWr/N,UAE1ConO,GAKXtK,EAAgB12f,UAAUohgB,yBAA2B,SAAUJ,EAAWK,GAEtE,GAAIj/f,EAAkBi/f,KAAsBj/f,EAAkB4+f,IAAuC,SAAxBA,EAAUt7L,YAAyBs7L,EAAU1B,cACtH,KAAKl9f,EAAkB4+f,IAAgBA,EAAUpX,UAAUA,qBAAqBoK,IAE5E,OAAOrvf,KAAKs8f,gCAAgCD,EAAWpK,GAAe+F,SAASqE,EAAUpX,WAAWkR,UAAUlhO,QAAS89N,GAAYgF,WAAWsE,EAAUpX,WAAW6K,YAAY76N,aAGlL,CACD,IAAI0nO,OAA0BxhgB,EAK9B,GAHKsC,EAAkBi/f,EAAgBpI,WAAWr/N,UAAax3R,EAAkBi/f,EAAgBpI,WAAWr/N,QAAQtoR,SAAmE,SAAxD+vf,EAAgBpI,WAAWr/N,QAAQtoR,OAAOo0T,YACrK47L,EAA0BD,EAAgBpI,WAAWr/N,QAAQzoR,OAE5D/O,EAAkBk/f,IAAkE,SAAtCA,EAAwB57L,UACvE,OAAO/gU,KAAK66f,yBAAyBwB,EAAWM,GAE/C,KAAKl/f,EAAkB4+f,IAAgBA,EAAUpX,UAAUA,qBAAqBoK,IAEjF,OAAOrvf,KAAKs8f,gCAAgCD,EAAWpK,GAAe+F,SAASqE,EAAUpX,WAAWkR,UAAUlhO,QAAS89N,GAAYgF,WAAWsE,EAAUpX,WAAW6K,YAAY76N,SAGvL,OAAOonO,GAKXtK,EAAgB12f,UAAUihgB,gCAAkC,SAAUD,EAAWrC,EAAYC,GACzF,OAAKx8f,EAAkB4+f,IAAuC,SAAxBA,EAAUt7L,aAAyBs7L,EAAU1B,cAErD,SAAxB0B,EAAUt7L,WAAgD,IAAxBs7L,EAAUjva,WAAuC,YAApBiva,EAAU7le,QAIrE/4B,EAAkB4+f,IAAeA,EAAUpX,qBAAqB8I,IAAkF,IAArEgE,EAAgB8G,UAAUwD,EAAUpX,WAAWiP,SAASzzN,UACtIhjS,EAAkBw8f,IAAkBx8f,EAAkBw8f,EAAavtf,OACpE2vf,EAAYpC,EAAavtf,KAEtB2vf,GAED5+f,EAAkBu8f,IACpBv8f,EAAkBu8f,EAAWxrY,aAAmD,SAApCwrY,EAAWxrY,WAAWuyM,UAGhEtjU,EAAkBw8f,IACpBx8f,EAAkBw8f,EAAazrY,aAAqD,SAAtCyrY,EAAazrY,WAAWuyM,UAInEs7L,EAHAA,EAAYpC,EAAazrY,WAJzB6tY,EAAYrC,EAAWxrY,WAXvB6tY,GAwBftK,EAAgB6K,oBAAsB,SAAUlH,GAC5C,IAAImH,OAAe1hgB,EACf4+f,EAAarE,EAAUpB,WAAWr/N,QAClC+kO,EAAcv8f,EAAkBi4f,EAAUxB,eAAmD/4f,EAAvCu6f,EAAUxB,SAASiC,UAAUlhO,QACnFglO,EAAgBx8f,EAAkBi4f,EAAUzB,iBAAyD94f,EAA3Cu6f,EAAUzB,WAAWnE,YAAY76N,QAQ/F,GAPKx3R,EAAkBs8f,EAAWptf,UAC9Bkwf,EAAe9C,EAAWptf,QAE1BlP,EAAkBo/f,KAElBA,EAAenH,EAAUoH,mCAAmCD,EAAc7C,EAAYC,IAEtFvE,EAAUzB,WAAWnE,YAAYl5N,YAAc,EAC/CimO,EAAenH,EAAUoH,mCAAmCD,EAAc7C,EAAYC,OAErF,CACD,IAAI8C,OAAiB5hgB,EACjB0kS,EAAU61N,EAAUxB,SAAS+H,YAC5Bx+f,EAAkBoiS,IAAY61N,EAAU/tL,YAAc9nC,EAAQojN,aAAaxmf,SAC5EsggB,EAAiBl9N,EAAQojN,aAAayS,EAAU/tL,cAGpDk1L,EAAenH,EAAUsH,4BAA4BH,EAAcE,GAKvE,OAHIt/f,EAAkBo/f,KAClBA,EAAe,IAAI9P,GAAQ2I,EAAUpB,WAAWr/N,UAE7C4nO,GAKX9K,EAAgB12f,UAAU2hgB,4BAA8B,SAAUH,EAAcE,GAE5E,GAAIt/f,EAAkBs/f,KAAqBt/f,EAAkBo/f,IAA6C,SAA3BA,EAAa97L,YAAyB87L,EAAalC,cAC9H,KAAKl9f,EAAkBo/f,IAAmBA,EAAa5X,UAAUA,qBAAqBoK,IAElF,OAAOrvf,KAAK88f,mCAAmCD,EAAc5K,GAAe+F,SAAS6E,EAAa5X,WAAWkR,UAAUlhO,QAAS89N,GAAYgF,WAAW8E,EAAa5X,WAAW6K,YAAY76N,aAG9L,CACD,IAAIgoO,OAA0B9hgB,EAK9B,GAHKsC,EAAkBs/f,EAAezI,WAAWr/N,UAAax3R,EAAkBs/f,EAAezI,WAAWr/N,QAAQvoR,MAA4D,SAApDqwf,EAAezI,WAAWr/N,QAAQvoR,IAAIq0T,YAC5Jk8L,EAA0BF,EAAezI,WAAWr/N,QAAQvoR,MAE3DjP,EAAkBw/f,IAAkE,SAAtCA,EAAwBl8L,UACvE,OAAO/gU,KAAK66f,yBAAyBgC,EAAcI,GAElD,KAAKx/f,EAAkBo/f,IAAmBA,EAAa5X,UAAUA,qBAAqBoK,IAEvF,OAAOrvf,KAAK88f,mCAAmCD,EAAc5K,GAAe+F,SAAS6E,EAAa5X,WAAWkR,UAAUlhO,QAAS89N,GAAYgF,WAAW8E,EAAa5X,WAAW6K,YAAY76N,SAGnM,OAAO4nO,GAKX9K,EAAgB12f,UAAUyhgB,mCAAqC,SAAUD,EAAc7C,EAAYC,GAC/F,OAAKx8f,EAAkBo/f,IAA6C,SAA3BA,EAAa97L,aAAyB87L,EAAalC,cAE3D,SAA3BkC,EAAa97L,WAAmD,IAA3B87L,EAAazva,WAA0C,YAAvByva,EAAarme,QAI9E/4B,EAAkBo/f,IAAkBA,EAAa5X,qBAAqB8I,IAAagE,EAAgB8G,UAAUgE,EAAa5X,WAAWiP,SAASzzN,SAAWsxN,EAAgB8G,UAAUgE,EAAa5X,WAAWqP,WAAWr9N,UAAY86N,EAAgB8G,UAAUgE,EAAa5X,WAAWgP,WAAWhR,aAAaxmf,QAC7SgB,EAAkBw8f,IAAkBx8f,EAAkBw8f,EAAattf,UACpEkwf,EAAe5C,EAAattf,QAEzBkwf,GAEDp/f,EAAkBu8f,IACpBv8f,EAAkBu8f,EAAWxrY,aAAmD,SAApCwrY,EAAWxrY,WAAWuyM,UAGhEtjU,EAAkBw8f,IACpBx8f,EAAkBw8f,EAAazrY,aAAqD,SAAtCyrY,EAAazrY,WAAWuyM,UAInE87L,EAHAA,EAAe5C,EAAazrY,WAJ5BquY,EAAe7C,EAAWxrY,WAX1BquY,GAqBf9K,EAAgB12f,UAAU+/f,gBAAkB,SAAU79d,GAClD,GAAIA,EAAW,CACXA,EAAYA,EAAUhuB,QAAQ,oBAAqB,IACnD,IAAI2tf,EAAYnoe,SAASwI,EAAW,IAIpC,OAASX,EAHAsge,GAAa,GAAM,IAGXrge,EAFRqge,GAAa,EAAK,IAEFpge,EADL,IAAZoge,KAQhBnL,EAAgB8G,UAAY,SAAUt4f,GAClC,GAAIA,aAAgBwtf,GAChB,OAAIxtf,EAAK0kf,qBAAqBiM,IAAe3wf,EAAK0kf,UAAUA,qBAAqB8M,EACtExxf,EAAK0kf,UAAUA,eAGtB,GAQZ8M,EAAgB12f,UAAU63f,gBAAkB,SAAU9Y,GAKlD,IAAK38e,EAAkBuC,KAAKijf,cAAe,CACvC,IAAK,IAAI9mf,EAAI,EAAGA,EAAI6D,KAAKijf,aAAaxmf,OAAQN,IAAK,CAC/C,IAAIw1f,EAAS3xf,KAAKijf,aAAa9mf,GAE3Bw1f,EAAOuB,gBAAgB9Y,GAK3Bj+e,IAEJ6D,KAAKijf,kBAAe9nf,EAExB6E,KAAKsS,WAKTy/e,EAAgB12f,UAAUgE,MAAQ,WAC9B,IAAI4jE,EAAO,IAAI8ub,EACf9ub,EAAKqxb,WAAW9O,WAAWxlf,KAAKs0f,YAChC,IAAK,IAAIn4f,EAAI,EAAGA,EAAI6D,KAAKijf,aAAaxmf,OAAQN,IAAK,CAC/C,IAAI63f,EAAQh0f,KAAKijf,aAAa9mf,GAAGkD,QACjC4jE,EAAKggb,aAAaz+e,KAAKwvf,GACvBA,EAAM9Q,gBAAkBjgb,EACxB+wb,EAAM/hf,MAAQ9V,EAYlB,OAVA8mE,EAAKiyb,gBAAkBl1f,KAAKk1f,gBAC5Bjyb,EAAKkyb,iBAAmBn1f,KAAKm1f,iBACzBn1f,KAAKy8B,SACLwmC,EAAKxmC,OAASz8B,KAAKy8B,OAAOp9B,SAE9B4jE,EAAK0kQ,YAAc3nU,KAAK2nU,YACxB1kQ,EAAKl2D,EAAI/M,KAAK+M,EACdk2D,EAAKj2D,EAAIhN,KAAKgN,EACdi2D,EAAKltD,OAAS/V,KAAK+V,OACnBktD,EAAKjtD,MAAQhW,KAAKgW,MACXitD,GAKX8ub,EAAgB12f,UAAUiX,QAAU,WAIhCtS,KAAKs0f,gBAAan5f,EAClB6E,KAAKygS,cAAWtlS,EAChB6E,KAAK2nU,iBAAcxsU,EACnBgwF,EAAO9vF,UAAUiX,QAAQhR,KAAKtB,OAE3B+xf,GACTQ,IAKEY,GAA4B,WAI5B,SAASA,EAAWgK,GAIhBn9f,KAAKoa,YAILpa,KAAK+M,EAAI,EAIT/M,KAAKgN,EAAI,EAIThN,KAAKgW,MAAQ,EAIbhW,KAAK+V,OAAS,EACd/V,KAAK6if,UAAYsa,EA+MrB,OA7MA7+f,OAAOuJ,eAAesrf,EAAW93f,UAAW,gBAIxCqM,IAAK,WACD,OAAI1H,KAAK6if,WAAa7if,KAAK6if,UAAUI,aAC1Bjjf,KAAK6if,UAAUI,aAAa1kf,QAAQyB,OAEvC,GAEZ2H,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAesrf,EAAW93f,UAAW,YAIxCqM,IAAK,WACD,IAAIm7e,EAAY7if,KAAK6if,UACjB1xO,EAAYnxQ,KAAK4xf,aACrB,GAAIzgP,GAAa0xO,EAAUI,aAAaxmf,OAAS,EAC7C,OAAOomf,EAAUI,aAAa9xO,EAAY,GAEzC,GAAI0xO,EAAU+P,gBAAiB,CAChC,IAAI9kc,EAAO+0b,EAAU+P,gBAAgBh2e,WACrC,GAAIkxC,aAAgBqlc,GAAcrlc,EAAK+0b,UAAUhqc,OAAO74C,KAAK6if,WACzD,OAAO/0b,IAKnBnmD,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAesrf,EAAW93f,UAAW,gBAIxCqM,IAAK,WACD,IAAIm7e,EAAY7if,KAAK6if,UACjB1xO,EAAYnxQ,KAAK4xf,aACjBwL,EAAiBva,EAAU6P,oBAC/B,GAAIvhP,EAAY,EACZ,OAAO0xO,EAAUI,aAAa9xO,EAAY,GAEzC,GAAIisP,aAA0Bta,GAAiB,CAChD,IAAIh1b,EAAOsvc,EAAet1X,UAC1B,GAAIh6E,aAAgBqlc,GAAcrlc,EAAK+0b,UAAUhqc,OAAO74C,KAAK6if,WACzD,OAAO/0b,IAKnBnmD,YAAY,EACZC,cAAc,IAKlBurf,EAAW93f,UAAUgigB,YAAc,WAC/B,IAAIprf,EAAQjS,KAAK4xf,aACjB,OAAI3/e,GAAS,QAA4C9W,IAAvC6E,KAAK6if,UAAU6P,qBACZ,IAAVzgf,GAOfkhf,EAAW93f,UAAUiigB,WAAa,WAC9B,IAAIrrf,EAAQjS,KAAK4xf,aACjB,OAAI3/e,GAAS,QAAwC9W,IAAnC6E,KAAK6if,UAAU+P,iBACtB3gf,IAAUjS,KAAK6if,UAAUI,aAAaxmf,OAAS,GAO9D02f,EAAW93f,UAAUq0C,UAAY,SAAU01G,EAAQnzI,GAC/C,GAAIxU,EAAkB2nJ,GAClB,OAAOnzI,EAKX,IAAK,IAHDsrf,EAAYtrf,EACZ67C,EAAOs3F,EAAOt3F,KAET3xD,GADOipJ,EAAOt3F,KAAK+0b,UAAUI,aAAa1kf,QAAQ6mJ,EAAOt3F,MACrD,GAAG3xD,EAAI2xD,EAAK1zC,SAAS3d,OAAQN,IAAK,CAC3C,IAAIo4f,EAAgBzmc,EAAK1zC,SAASje,GAClC,GAAIipJ,IAAWmvW,EACX,MAEAA,aAAyBQ,KAG7BwI,GAAahJ,EAAc93f,QAE/B,OAAO8ggB,GAKXpK,EAAW93f,UAAUmigB,aAAe,WAGhC,IAAK,IAFDhH,EAAc,EACd13e,EAAQ,EACH3iB,EAAI,EAAGA,EAAI6D,KAAKoa,SAAS3d,OAAQN,IAAK,CAC3C,IAAIo4f,EAAgBv0f,KAAKoa,SAASje,GACL,IAAzBo4f,EAAc93f,SAGd83f,aAAyBQ,MAGzBR,aAAyBC,IAAkBD,aAAyBE,IACjEF,aAAyBG,IAAuBH,aAAyBjJ,IACzEX,GAAcU,uBAAuBkJ,MACxCiC,EAAc13e,EAAQy1e,EAAc93f,QAExCqiB,GAASy1e,EAAc93f,SAE3B,OAAO+5f,GAKXrD,EAAW93f,UAAUs5f,UAAY,SAAUhpf,EAAQipf,GAC/C,IAAIL,OAAgBp5f,EAChB2jB,EAAQ,EACR+1e,GAAY,EAChB,GAA6B,IAAzB70f,KAAKoa,SAAS3d,QACVuD,KAAKy9f,aAAc,CACnB,IAAIC,EAAa19f,KAAKy9f,aAAarjf,SAASpa,KAAKy9f,aAAarjf,SAAS3d,OAAS,GAChF,GAAIihgB,aAAsBlJ,IAAsC,OAApBkJ,EAAWjxe,KAGnD,OAFA8ne,EAAgBv0f,KAAKy9f,aAAarjf,SAASpa,KAAKy9f,aAAarjf,SAAS3d,OAAS,GAC/Em4f,EAAgB,GACP5zf,QAAWuzf,EAAetif,MAAS2if,GAIxD,IAAK,IAAIz4f,EAAI,EAAGA,EAAI6D,KAAKoa,SAAS3d,OAAQN,IAEtC,MADAo4f,EAAgBv0f,KAAKoa,SAASje,cACD44f,IAA7B,CAQA,IALKF,IAAcN,aAAyBC,IAAkBD,aAAyBE,IAChFF,aAAyBG,IACzBH,aAAyBjJ,IAAmBX,GAAcU,uBAAuBkJ,MACpFM,GAAY,GAEZA,GAAalpf,GAAUmT,EAAQy1e,EAAc93f,OAE7C,OADAm4f,EAAiBjpf,EAASmT,GACjB9d,QAAWuzf,EAAetif,MAAS2if,GAEhD91e,GAASy1e,EAAc93f,OAK3B,OAHIkP,EAASmT,IACT81e,EAAgBn3f,EAAkB82f,GAAiB5of,EAAS4of,EAAc93f,SAErEuE,QAAWuzf,EAAetif,MAAS2if,IAKhDzB,EAAW93f,UAAUi4f,qBAAuB,SAAUC,GAGlD,OADAA,EADWvzf,KACc6if,UAAUI,aAAa1kf,QADrCyB,MACqD,IAAMuzf,EAD3Dvzf,KAEF6if,qBAAqB0P,GAFnBvyf,KAGK6if,UAAUyQ,qBAAqBC,GAExCA,GAKXJ,EAAW93f,UAAUgE,MAAQ,WAEzB,IAAK,IADDyuD,EAAO,IAAIqlc,OAAWh4f,GACjBooB,EAAI,EAAGA,EAAIvjB,KAAKoa,SAAS3d,OAAQ8mB,IAAK,CAC3C,IACIlkB,EADUW,KAAKoa,SAASmJ,GACRlkB,QACpByuD,EAAK1zC,SAAS5V,KAAKnF,GACnBA,EAAMyuD,KAAOA,EAIjB,OAFAA,EAAK93C,MAAQhW,KAAKgW,MAClB83C,EAAK/3C,OAAS/V,KAAK+V,OACZ+3C,GAKXqlc,EAAW93f,UAAUiX,QAAU,WAC3B,IAAK7U,EAAkBuC,KAAKoa,UAAW,CACnC,IAAK,IAAIje,EAAI,EAAGA,EAAI6D,KAAKoa,SAAS3d,OAAQN,IACtC6D,KAAKoa,SAASje,GAAGmW,UAErBtS,KAAKoa,YAETpa,KAAKoa,cAAWjf,EACZ6E,KAAK6if,WACL7if,KAAK6if,UAAUv9e,YAAYtF,KAAK4xf,cAEpC5xf,KAAK6if,eAAY1nf,EACjB6E,KAAK+M,OAAI5R,EACT6E,KAAKgN,OAAI7R,EACT6E,KAAKgW,WAAQ7a,EACb6E,KAAK+V,YAAS5a,GAEXg4f,KAMPwK,GAA4B,WAI5B,SAASA,IAIL39f,KAAK+M,EAAI,EAIT/M,KAAKgN,EAAI,EAIThN,KAAKgW,MAAQ,EAIbhW,KAAK+V,OAAS,EAId/V,KAAKy8B,OAAS,IAAIqgS,GAAO,EAAG,EAAG,EAAG,GAIlC98T,KAAKg+e,qBAAkB7if,EACvB6E,KAAKg+e,gBAAkB,IAAIgF,GAAiBhjf,MAC5CA,KAAKy8B,OAAS,IAAIqgS,GAAO,EAAG,EAAG,EAAG,GA+RtC,OA1RA6gM,EAAWtigB,UAAUuigB,mBAAqB,SAAUxjB,GAChD,GAAMp6e,gBAAgBsrf,GAGtB,GAAuB,IAAnBtrf,KAAKurf,UAAiB,CAElB9tf,EADauC,KACgBwrf,YAC7Bxrf,KAAK69f,2BAA2B79f,KAAK8tD,KAFxB9tD,KAAAA,OAG8B,IAAvCo6e,EAAOxud,OAAOrtB,QAHLyB,OAITo6e,EAAOxud,OAAOpnB,KAJLxE,YAQhB,GAAuB,IAAnBA,KAAKurf,UAAiB,CAO3B,GAJI9tf,EAFiBuC,KAEgByrf,aACjCzrf,KAAK89f,qCAAqC99f,KAAK8tD,KAH9B9tD,KAAAA,MAAAA,KAKNyrf,WAAWsS,eALL/9f,MAMhBvC,EANgBuC,KAMiByrf,YAAa,CAE/C,IAAIuS,EAAah+f,KAAK69f,2BAA2B79f,KAAK8tD,KARrC9tD,KAQ0Dyrf,WAR1Dzrf,MASbvC,EATauC,KASoBwrf,WAAawS,IATjCh+f,KAUEwrf,SAVFxrf,KAU4Byrf,WAAWD,UAVvCxrf,KAYEwrf,WAZFxrf,KAaEwrf,SAASuS,eAbX/9f,WAiBpB,CAGGvC,EAFWuC,KAEgByrf,aAC3Bzrf,KAAKi+f,4BAA4Bj+f,KAAK8tD,KAH3B9tD,KAAAA,QAUvB29f,EAAWtigB,UAAU4igB,4BAA8B,SAAUnwc,EAAM09b,EAAU0S,GACzE,IAAI/3e,EAAI2nC,EAAK1zC,SAAS3d,OAAS,EAC3BqxD,EAAK1zC,SAAS7b,QAAQ2/f,IAAiB,IACvC/3e,EAAI2nC,EAAK1zC,SAAS7b,QAAQ2/f,GAAgB,GAE9C,IAAK,IAAI36e,EAAI4C,EAAG5C,GAAK,EAAGA,IAAK,CACzB,IAAImtD,EAAY5iB,EAAK1zC,SAASmJ,GAC9B,GAAImtD,aAAqB46a,GAAiB,CACtC,GAA4B,IAAxB56a,EAAU66a,UAaV,OAZI9tf,EAAkBizE,EAAU86a,YAC5BA,EAASC,WAAa/6a,EAClBjzE,EAAkBizE,EAAU86a,YAC5B96a,EAAU86a,SAAWA,GAErBA,EAASuS,gBAAkBtggB,EAAkB+tf,EAASuS,eAAetS,cACrED,EAASuS,eAAetS,WAAa/6a,EACjCjzE,EAAkBizE,EAAUqtb,kBAC5Brtb,EAAUqtb,eAAiBvS,EAASuS,mBAIxCtggB,EAAkB+tf,EAASC,YAEN,IAAxB/6a,EAAU66a,WAAmB9tf,EAAkBizE,EAAU86a,YAC9DA,EAASuS,eAAiBrtb,EAC1BA,EAAU86a,SAAWA,EAChB/tf,EAAkBizE,EAAU+6a,cAC7BD,EAASC,WAAa/6a,EAAU+6a,cAKhD,GAAI39b,EAAK2vc,aACLz9f,KAAKi+f,4BAA4Bnwc,EAAK2vc,aAAcjS,EAAUxrf,WAE7D,GAAI8tD,EAAK+0b,UAAUsP,kCAAkCrP,GAAiB,CACvE,IAAIqb,EAAgBrwc,EAAK+0b,UAAUsP,uBAEnCnyf,KAAKi+f,4BAA4BE,EAAclb,aAAakb,EAAclb,aAAaxmf,OAAS,GAAI+uf,EAAUxrf,MAElH,OAAO,GAKX29f,EAAWtigB,UAAUwigB,2BAA6B,SAAU/vc,EAAM29b,EAAYyS,GAC1E,IAAI/hgB,EAAI,EACJ2xD,EAAK1zC,SAAS7b,QAAQ2/f,IAAiB,IACvC/hgB,EAAI2xD,EAAK1zC,SAAS7b,QAAQ2/f,GAAgB,GAE9C,IAAK,IAAI36e,EAAIpnB,EAAGonB,EAAIuqC,EAAK1zC,SAAS3d,OAAQ8mB,IAAK,CAC3C,IAAIhjB,EAAOutD,EAAK1zC,SAASmJ,GACzB,GAAIhjB,aAAgB+qf,GAAiB,CACjC,GAAuB,IAAnB/qf,EAAKgrf,UAOL,OANI9tf,EAAkB8C,EAAKkrf,cACvBA,EAAWD,SAAWjrf,GAEtBkrf,EAAWD,UAAY/tf,EAAkBguf,EAAWD,SAASC,cAC7DA,EAAWD,SAASC,WAAaA,IAE9B,EAEN,GAAIhuf,EAAkBguf,EAAWsS,gBAAiB,CACnD,GAAuB,IAAnBx9f,EAAKgrf,YAAmB9tf,EAAkB8C,EAAKkrf,YAQ/C,OAAO,EANP,GADAA,EAAWsS,eAAiBx9f,GACvB9C,EAAkB8C,EAAKirf,UAExB,OADAC,EAAWD,SAAWjrf,EAAKirf,UACpB,IAe3B,OANI19b,EAAKswc,SACLp+f,KAAK69f,2BAA2B/vc,EAAKswc,SAAU3S,EAAYzrf,MAEtD8tD,EAAK+0b,UAAUyP,8BAA8BxP,IAClD9if,KAAK69f,2BAA2B/vc,EAAK+0b,UAAUyP,mBAAmBrP,aAAa,GAAIwI,EAAYzrf,OAE5F,GAKX29f,EAAWtigB,UAAUyigB,qCAAuC,SAAUhwc,EAAMiwc,EAAgBG,GACxF,IAAIjsf,EAAQ67C,EAAK1zC,SAAS3d,OAAS,EAC/BqxD,EAAK1zC,SAAS7b,QAAQ2/f,IAAiB,IACvCjsf,EAAQ67C,EAAK1zC,SAAS7b,QAAQ2/f,GAAgB,GAElD,IAAK,IAAI/hgB,EAAI8V,EAAO9V,GAAK,EAAGA,IAAK,CAC7B,IAAIg+B,EAAe2zB,EAAK1zC,SAASje,GACjC,GAAIg+B,aAAwBmxd,IACpBnxd,aAAwBmxd,IAA8C,IAA3Bnxd,EAAaoxd,UAIxD,OAHI9tf,EAAkB08B,EAAa4je,kBAC/BA,EAAetS,WAAatxd,IAExB18B,EAAkBsggB,EAAetS,YAIrD,GAAI39b,EAAK2vc,aACLz9f,KAAK89f,qCAAqChwc,EAAK2vc,aAAcM,EAAgB/9f,UAE5E,CAAA,KAAI8tD,EAAK+0b,UAAUyP,8BAA8BxP,IAMlD,OAAO,EAJPh1b,EAAOA,EAAK+0b,UAAUsP,uBAAuBlP,aAAan1b,EAAK+0b,UAAUsP,uBAAuBlP,aAAaxmf,OAAS,GACtHuD,KAAK89f,qCAAqChwc,EAAMiwc,EAAgB/9f,MAKpE,OAAO,GAEX1B,OAAOuJ,eAAe81f,EAAWtigB,UAAW,UAIxCqM,IAAK,WACD,OAAO1H,KAAKg1f,aAEhBrtf,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe81f,EAAWtigB,UAAW,gBAIxCqM,IAAK,WACD,OAAO1H,KAAK8tD,gBAAgBqlc,IAAcnzf,KAAK8tD,KAAK1zC,SAAWpa,KAAK8tD,KAAK1zC,SAAS7b,QAAQyB,OAAS,GAEvG2H,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe81f,EAAWtigB,UAAW,mBAIxCqM,IAAK,WACD,IAAIuK,EAAQjS,KAAK4xf,aACjB,GAAI3/e,EAAQ,GAAKA,EAAQjS,KAAK8tD,KAAK1zC,SAAS3d,OACxC,OAAOuD,KAAK8tD,KAAK1zC,SAASnI,EAAQ,IAI1CtK,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe81f,EAAWtigB,UAAW,eAIxCqM,IAAK,WACD,IAAIuK,EAAQjS,KAAK4xf,aACjB,GAAI3/e,GAAS,GAAKA,EAAQjS,KAAK8tD,KAAK1zC,SAAS3d,OAAS,EAClD,OAAOuD,KAAK8tD,KAAK1zC,SAASnI,EAAQ,IAI1CtK,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe81f,EAAWtigB,UAAW,YAIxCqM,IAAK,WACD,IAAIuK,EAAQjS,KAAK8tD,KAAK1zC,SAAS7b,QAAQyB,MACnCmxQ,EAAYnxQ,KAAK8tD,KAAK+0b,UAAUI,aAAa1kf,QAAQyB,KAAK8tD,MAC9D,OAAI77C,EAAQjS,KAAK8tD,KAAK1zC,SAAS3d,OAAS,EAC7BuD,KAAK8tD,KAAK1zC,SAASnI,EAAQ,GAE7Bk/P,EAAYnxQ,KAAK8tD,KAAK+0b,UAAUI,aAAaxmf,OAAS,EACpDuD,KAAK8tD,KAAK+0b,UAAUI,aAAa9xO,EAAY,GAAG/2P,SAAS,QAD/D,GAKTzS,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe81f,EAAWtigB,UAAW,gBAIxCqM,IAAK,WACD,IAAIuK,EAAQjS,KAAK8tD,KAAK1zC,SAAS7b,QAAQyB,MACnCmxQ,EAAYnxQ,KAAK8tD,KAAK+0b,UAAUI,aAAa1kf,QAAQyB,KAAK8tD,MAC9D,GAAI77C,EAAQ,EACR,OAAOjS,KAAK8tD,KAAK1zC,SAASnI,EAAQ,GAEjC,GAAIk/P,EAAY,EAAG,CACpB,IAAIktP,EAAar+f,KAAK8tD,KAAK+0b,UAAUI,aAAa9xO,EAAY,GAC9D,OAAOktP,EAAWjkf,SAASikf,EAAWjkf,SAAS3d,OAAS,KAIhEkL,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe81f,EAAWtigB,UAAW,aAIxCqM,IAAK,WACD,GAAI1H,KAAK8tD,KACL,OAAO9tD,KAAK8tD,KAAK+0b,WAIzBl7e,YAAY,EACZC,cAAc,IAKlB+1f,EAAWtigB,UAAUiX,QAAU,WAC3B,IAAK7U,EAAkBuC,KAAK8tD,OAAS9tD,KAAK8tD,KAAK1zC,UAAYpa,KAAK8tD,KAAK1zC,SAAS7b,QAAQyB,OAAS,EAAG,CAC9F,IAAIiS,EAAQjS,KAAK8tD,KAAK1zC,SAAS7b,QAAQyB,MACvCA,KAAK8tD,KAAK1zC,SAASiO,OAAOpW,EAAO,GAErCjS,KAAK8tD,UAAO3yD,EACR6E,KAAKg+e,iBACLh+e,KAAKg+e,gBAAgB1re,UAEzBtS,KAAKg+e,qBAAkB7if,EACnB6E,KAAKy8B,QACLz8B,KAAKy8B,OAAOnqB,UAEhBtS,KAAKy8B,YAASthC,EACd6E,KAAK+M,OAAI5R,EACT6E,KAAKgN,OAAI7R,EACT6E,KAAKgW,WAAQ7a,EACb6E,KAAK+V,YAAS5a,GAKlBwigB,EAAWW,gBAAkBp1e,OAAOC,aAAa,OAC1Cw0e,KAMPrS,GAAiC,SAAUnga,GAE3C,SAASmga,EAAgB5kf,GACrB,IAAI3G,EAAQorF,EAAO7pF,KAAKtB,OAASA,KAajC,OATAD,EAAMwrf,UAAY,EAIlBxrf,EAAMw+f,aAAc,EACpBx+f,EAAMy+f,wBAAqBrjgB,EAC3B4E,EAAM0+f,4BAAyBtjgB,EAC/B4E,EAAM2+f,sBAAmBvjgB,EACzB4E,EAAMwrf,UAAY7kf,EACX3G,EA8DX,OA7EAuqF,GAAUgha,EAAiBnga,GAiB3B7sF,OAAOuJ,eAAeyjf,EAAgBjwf,UAAW,cAC7CqM,IAAK,WACD,OAAO1H,KAAKw+f,oBAEhBn3f,IAAK,SAAU0kB,GACX/rB,KAAKw+f,mBAAqBzye,GAE9BpkB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeyjf,EAAgBjwf,UAAW,kBAC7CqM,IAAK,WACD,OAAO1H,KAAKy+f,wBAEhBp3f,IAAK,SAAU0kB,GACX/rB,KAAKy+f,uBAAyB1ye,GAElCpkB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeyjf,EAAgBjwf,UAAW,YAC7CqM,IAAK,WACD,OAAO1H,KAAK0+f,kBAEhBr3f,IAAK,SAAU0kB,GACX/rB,KAAK0+f,iBAAmB3ye,GAE5BpkB,YAAY,EACZC,cAAc,IAKlB0jf,EAAgBjwf,UAAU25f,UAAY,WAClC,OAAO,GAKX1J,EAAgBjwf,UAAUgE,MAAQ,WAC9B,IAAI0sB,EAAQ,IAAIu/d,EAAgBtrf,KAAKurf,WAOrC,OANAx/d,EAAMiyd,gBAAgBwH,WAAWxlf,KAAKg+e,iBAClCh+e,KAAKy8B,SACL1Q,EAAM0Q,OAASz8B,KAAKy8B,OAAOp9B,SAE/B0sB,EAAM/V,MAAQhW,KAAKgW,MACnB+V,EAAMhW,OAAS/V,KAAK+V,OACbgW,GAKXu/d,EAAgBjwf,UAAUiX,QAAU,WAChCtS,KAAKurf,eAAYpwf,EACjB6E,KAAKu+f,iBAAcpjgB,EACnB6E,KAAKw+f,wBAAqBrjgB,EAC1B6E,KAAK0+f,sBAAmBvjgB,EACxB6E,KAAKy+f,4BAAyBtjgB,EAC9BgwF,EAAO9vF,UAAUiX,QAAQhR,KAAKtB,OAE3Bsrf,GACTqS,IAKEnJ,GAAgC,SAAUrpa,GAE1C,SAASqpa,IACL,IAAIz0f,EAAQorF,EAAO7pF,KAAKtB,OAASA,KASjC,OALAD,EAAM4+f,eAAiB,EAIvB5+f,EAAM0sB,KAAO,GACN1sB,EA6BX,OAxCAuqF,GAAUkqa,EAAgBrpa,GAgB1Bqpa,EAAen5f,UAAU25f,UAAY,WACjC,OAAOh1f,KAAKysB,KAAOzsB,KAAKysB,KAAKhwB,OAAS,GAK1C+3f,EAAen5f,UAAUgE,MAAQ,WAC7B,IAAIsjE,EAAO,IAAI6xb,EAQf,OAPA7xb,EAAKq7a,gBAAgBwH,WAAWxlf,KAAKg+e,iBACrCr7a,EAAKl2C,KAAOzsB,KAAKysB,KACbzsB,KAAKy8B,SACLkmC,EAAKlmC,OAASz8B,KAAKy8B,OAAOp9B,SAE9BsjE,EAAK3sD,MAAQhW,KAAKgW,MAClB2sD,EAAK5sD,OAAS/V,KAAK+V,OACZ4sD,GAKX6xb,EAAen5f,UAAUiX,QAAU,WAC/BtS,KAAKysB,UAAOtxB,EACZgwF,EAAO9vF,UAAUiX,QAAQhR,KAAKtB,OAE3Bw0f,GACTmJ,IAKEiB,GAAqC,SAAUzza,GAE/C,SAASyza,IACL,IAAI7+f,EAAQorF,EAAO7pF,KAAKtB,OAASA,KAEjC,OADAD,EAAM8+f,UAAY,GACX9+f,EA2BX,OA/BAuqF,GAAUs0a,EAAqBzza,GAM/B7sF,OAAOuJ,eAAe+2f,EAAoBvjgB,UAAW,QACjDqM,IAAK,WACD,OAAO1H,KAAK6+f,WAEhBx3f,IAAK,SAAUrK,GACXgD,KAAK6+f,UAAY7hgB,GAErB2K,YAAY,EACZC,cAAc,IAKlBg3f,EAAoBvjgB,UAAUgE,MAAQ,WAClC,IAAIsjE,EAAO,IAAIi8b,EASf,OARAj8b,EAAKq7a,gBAAgBwH,WAAWxlf,KAAKg+e,iBACrCr7a,EAAK8ob,WAAazrf,KAAKyrf,WACvB9ob,EAAKl2C,KAAOzsB,KAAKysB,KACbzsB,KAAKy8B,SACLkmC,EAAKlmC,OAASz8B,KAAKy8B,OAAOp9B,SAE9BsjE,EAAK3sD,MAAQhW,KAAKgW,MAClB2sD,EAAK5sD,OAAS/V,KAAK+V,OACZ4sD,GAEJi8b,GACTpK,IAKEsK,GAA+B,SAAU3za,GAEzC,SAAS2za,IACL,IAAI/+f,EAAQorF,EAAO7pF,KAAKtB,OAASA,KASjC,OALAD,EAAMg/f,QAAU,GAIhBh/f,EAAMi/f,UAAY,OACXj/f,EAyBX,OApCAuqF,GAAUw0a,EAAe3za,GAgBzB2za,EAAczjgB,UAAUiX,QAAU,WAC9BtS,KAAK++f,aAAU5jgB,EACf6E,KAAKg/f,eAAY7jgB,GAKrB2jgB,EAAczjgB,UAAUgE,MAAQ,WAC5B,IAAIsjE,EAAO,IAAIm8b,EAUf,OATAn8b,EAAKq7a,gBAAgBwH,WAAWxlf,KAAKg+e,iBACrCr7a,EAAKo8b,QAAU/+f,KAAK++f,QACpBp8b,EAAKq8b,UAAYh/f,KAAKg/f,UACtBr8b,EAAKl2C,KAAOzsB,KAAKysB,KACbzsB,KAAKy8B,SACLkmC,EAAKlmC,OAASz8B,KAAKy8B,OAAOp9B,SAE9BsjE,EAAK3sD,MAAQhW,KAAKgW,MAClB2sD,EAAK5sD,OAAS/V,KAAK+V,OACZ4sD,GAEJm8b,GACTtK,IAKEE,GAAoC,SAAUvpa,GAE9C,SAASupa,EAAmBhuf,GACxB,IAAI3G,EAAQorF,EAAO7pF,KAAKtB,OAASA,KAKjC,OAJAD,EAAMk/f,eAAiB,EACvBl/f,EAAMm/f,kBAAe/jgB,EACrB4E,EAAMo/f,OAAS,GACfp/f,EAAMk/f,eAAiBv4f,EAChB3G,EA4EX,OAnFAuqF,GAAUoqa,EAAoBvpa,GAS9B7sF,OAAOuJ,eAAe6sf,EAAmBr5f,UAAW,gBAIhDqM,IAAK,WACD,OAAO1H,KAAKi/f,gBAEhBt3f,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe6sf,EAAmBr5f,UAAW,QAIhDqM,IAAK,WACD,OAAO1H,KAAKm/f,QAKhB93f,IAAK,SAAUowB,GACXz3B,KAAKm/f,OAAS1ne,GAElB9vB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe6sf,EAAmBr5f,UAAW,aAIhDqM,IAAK,WACD,OAAO1H,KAAKk/f,cAKhB73f,IAAK,SAAU5F,GACXzB,KAAKk/f,aAAez9f,GAExBkG,YAAY,EACZC,cAAc,IAKlB8sf,EAAmBr5f,UAAU25f,UAAY,WACrC,OAAO,GAKXN,EAAmBr5f,UAAUiX,QAAU,WACnCtS,KAAKy3B,UAAOt8B,EACZ6E,KAAKyB,eAAYtG,EACjB6E,KAAKi/f,oBAAiB9jgB,GAS1Bu5f,EAAmBr5f,UAAUgE,MAAQ,WACjC,IAAIsjE,EAAO,IAAI+xb,EAAmB10f,KAAKo/f,cAQvC,OAPAz8b,EAAKlrC,KAAOz3B,KAAKy3B,KACjBkrC,EAAKlhE,UAAYzB,KAAKyB,UAClBzB,KAAKy8B,SACLkmC,EAAKlmC,OAASz8B,KAAKy8B,OAAOp9B,SAE9BsjE,EAAK3sD,MAAQhW,KAAKgW,MAClB2sD,EAAK5sD,OAAS/V,KAAK+V,OACZ4sD,GAEJ+xb,GACTiJ,IAKElJ,GAAiC,SAAUtpa,GAE3C,SAASspa,EAAgB4K,GACrB,IAAIt/f,EAAQorF,EAAO7pF,KAAKtB,OAASA,KASjC,OARAD,EAAMu/f,SAAW,GACjBv/f,EAAMw/f,gBAAapkgB,EACnB4E,EAAMy/f,iBAAkB,EAIxBz/f,EAAM0/f,YAAa,EACnB1/f,EAAMy/f,gBAAkBH,EACjBt/f,EAoFX,OA/FAuqF,GAAUmqa,EAAiBtpa,GAa3B7sF,OAAOuJ,eAAe4sf,EAAgBp5f,UAAW,iBAI7CqM,IAAK,WACD,OAAO1H,KAAKw/f,iBAEhB73f,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4sf,EAAgBp5f,UAAW,WAI7CqM,IAAK,WAID,OAHIjK,EAAkBuC,KAAKu/f,cACvBv/f,KAAKu/f,WAAa/+f,SAASW,cAAc,QAEtCnB,KAAKu/f,YAEhB53f,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4sf,EAAgBp5f,UAAW,UAI7CqM,IAAK,WACD,OAAO,GAEXC,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4sf,EAAgBp5f,UAAW,eAI7CqM,IAAK,WACD,OAAO1H,KAAKs/f,UAKhBj4f,IAAK,SAAUrK,GACXgD,KAAKs/f,SAAWtigB,EACXS,EAAkBT,KACnBgD,KAAKgB,QAAQ1B,IAAMU,KAAKs/f,WAGhC33f,YAAY,EACZC,cAAc,IAKlB6sf,EAAgBp5f,UAAU25f,UAAY,WAClC,OAAO,GAKXP,EAAgBp5f,UAAUgE,MAAQ,WAC9B,IAAIi2L,EAAQ,IAAIm/T,EAAgBz0f,KAAKq/f,eASrC,OARA/pU,EAAM0oT,gBAAgBwH,WAAWxlf,KAAKg+e,iBACtC1oT,EAAMulJ,YAAc76U,KAAK66U,YACzBvlJ,EAAMmqU,WAAaz/f,KAAKy/f,WACxBnqU,EAAMt/K,MAAQhW,KAAKgW,MACnBs/K,EAAMv/K,OAAS/V,KAAK+V,OAChB/V,KAAKy8B,SACL64J,EAAM74J,OAASz8B,KAAKy8B,OAAOp9B,SAExBi2L,GAKXm/T,EAAgBp5f,UAAUiX,QAAU,WAChCtS,KAAKu/f,gBAAapkgB,EAClB6E,KAAK66U,iBAAc1/U,EACnB6E,KAAKw/f,qBAAkBrkgB,EACvBgwF,EAAO9vF,UAAUiX,QAAQhR,KAAKtB,OAE3By0f,GACTkJ,IAKE5I,GAAoC,SAAU5pa,GAE9C,SAAS4pa,EAAmBzM,EAAWoX,GACnC,IAAI3/f,EAAQorF,EAAO7pF,KAAKtB,OAASA,KAWjC,OAPAD,EAAM4+f,eAAiB,EAIvB5+f,EAAM4/f,mBAAoB,EAC1B5/f,EAAMuof,UAAYA,EAClBvof,EAAM4/f,kBAAoBD,EACnB3/f,EA6BX,OA1CAuqF,GAAUyqa,EAAoB5pa,GAkB9B4pa,EAAmB15f,UAAU25f,UAAY,WACrC,OAAOh1f,KAAKysB,KAAOzsB,KAAKysB,KAAKhwB,OAAS,GAK1Cs4f,EAAmB15f,UAAUgE,MAAQ,WACjC,IAAIwjG,EAAO,IAAIkyZ,EAAmB/0f,KAAKsof,UAAWtof,KAAK2/f,mBAQvD,OAPA98Z,EAAKp2E,KAAOzsB,KAAKysB,KACjBo2E,EAAK87Z,eAAiB3+f,KAAK2+f,eACvB3+f,KAAKy8B,SACLomE,EAAKpmE,OAASz8B,KAAKy8B,OAAOp9B,SAE9BwjG,EAAK7sF,MAAQhW,KAAKgW,MAClB6sF,EAAK9sF,OAAS/V,KAAK+V,OACZ8sF,GAKXkyZ,EAAmB15f,UAAUiX,QAAU,WACnCtS,KAAKysB,UAAOtxB,EACZgwF,EAAO9vF,UAAUiX,QAAQhR,KAAKtB,OAE3B+0f,GACT4I,IAKEiC,GAAsB,WAItB,SAASA,IAKL5/f,KAAK2kf,kBAAoB,IAAIzud,GAAK,GAAI,GAAI,IAAK,MAI/Cl2B,KAAK6/f,4BAA6B,EAMlC7/f,KAAK0xf,eAIL1xf,KAAK6zf,kBAAe14f,EAIpB6E,KAAK8zf,kBAAe34f,EA2ExB,OAxEAmD,OAAOuJ,eAAe+3f,EAAKvkgB,UAAW,SAIlCqM,IAAK,WACD,OAAI1H,KAAKo6e,OACEp6e,KAAKo6e,OAAOlvQ,MAAM3sO,QAAQyB,OAE7B,GAEZ2H,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe+3f,EAAKvkgB,UAAW,gBAIlCqM,IAAK,WACD,IAAIuK,EAAQjS,KAAKiS,MACjB,GAAIA,EAAQ,EACR,OAAOjS,KAAKo6e,OAAOlvQ,MAAMj5N,EAAQ,IAIzCtK,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe+3f,EAAKvkgB,UAAW,YAIlCqM,IAAK,WACD,IAAIuK,EAAQjS,KAAKiS,MACjB,GAAIA,EAAQjS,KAAKo6e,OAAOlvQ,MAAMzuO,OAAS,EACnC,OAAOuD,KAAKo6e,OAAOlvQ,MAAMj5N,EAAQ,IAIzCtK,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe+3f,EAAKvkgB,UAAW,gBAIlCqM,IAAK,WACD,OAAI1H,KAAK0xf,YAAYj1f,OAAS,EACnBuD,KAAK0xf,YAAY,GAAGz/e,OAEvB,GAEZtK,YAAY,EACZC,cAAc,IAElBg4f,EAAKvkgB,UAAUiX,QAAU,WACjBtS,KAAK6zf,cACL7zf,KAAK6zf,aAAavhf,UAEtBtS,KAAK6zf,kBAAe14f,EAChB6E,KAAK8zf,cACL9zf,KAAK8zf,aAAaxhf,UAEtBtS,KAAK8zf,kBAAe34f,EACpB6E,KAAK0xf,eACL1xf,KAAK0xf,iBAAcv2f,EACdsC,EAAkBuC,KAAKo6e,SACnB38e,EAAkBuC,KAAKo6e,OAAOlvQ,QAC/BlrO,KAAKo6e,OAAO0lB,WAAW9/f,MAG/BA,KAAKo6e,YAASj/e,GAEXykgB,KAMPrK,GAA8B,WAC9B,SAASA,IACLv1f,KAAK+/f,gBAIL//f,KAAK+1f,WAAa,EAmLtB,OAjLAz3f,OAAOuJ,eAAe0tf,EAAal6f,UAAW,WAC1CqM,IAAK,WACD,OAAO1H,KAAK+/f,cAEhBp4f,YAAY,EACZC,cAAc,IAKlB2tf,EAAal6f,UAAUy7f,aAAe,WAClC,IAAK,IAAI36f,EAAI,EAAGA,EAAI6D,KAAK+/f,aAAatjgB,OAAQN,IAC1C6D,KAAK+/f,aAAa5jgB,GAAGmW,UAEzBtS,KAAK+/f,iBAKTxK,EAAal6f,UAAU2kgB,4BAA8B,SAAUC,EAAqBC,GAEhF,IAAK,IADDlqf,EAAQ,EACH7Z,EAAI8jgB,EAAqB9jgB,EAAI+jgB,EAAgB/jgB,IAClD6Z,GAAShW,KAAK+/f,aAAa5jgB,GAAG6zf,eAElC,OAAOh6e,GAKXu/e,EAAal6f,UAAU47f,WAAa,SAAUkJ,EAAoBhoO,EAAYniR,EAAOw9C,EAAU7nD,GAC3F,IAAK,IAAIxP,EAAI6D,KAAK+9D,QAAQthE,OAAQN,EAAIg8R,EAAYh8R,IAC9C6D,KAAK+9D,QAAQv5D,KAAK,IAAI47f,IAG1B,IAAK,IADD9iO,EAAiB,EACZ/5Q,EAAI48e,EAAoB58e,EAAI40Q,EAAY50Q,IAC7C+5Q,GAAkBt9R,KAAK+9D,QAAQx6C,GAAGyse,iBAIvB73N,EAAagoO,EACX,IAAM7iO,EAAiBtnR,IACpChW,KAAK+9D,QAAQo6N,EAAa,GAAG63N,gBAAmBh6e,EAAQsnR,GAExD9pO,EAAWxzD,KAAK+9D,QAAQo6N,EAAa,GAAG3kO,WACxCxzD,KAAK+9D,QAAQo6N,EAAa,GAAG3kO,SAAWA,GAExC7nD,EAAS3L,KAAK+9D,QAAQo6N,EAAa,GAAGkoO,YACtCrggB,KAAK+9D,QAAQo6N,EAAa,GAAGkoO,UAAY10f,IAMjD4pf,EAAal6f,UAAUs8f,cAAgB,WAEnC,IAAK,IADD3hf,EAAQ,EACH7Z,EAAI,EAAGA,EAAI6D,KAAK+9D,QAAQthE,OAAQN,IAAK,CAE1C6Z,GADahW,KAAK+9D,QAAQ5hE,GACV6zf,eAEpB,OAAOh6e,GAKXu/e,EAAal6f,UAAUilgB,aAAe,SAAU9pf,EAAgB+pf,EAAqBvJ,GAEjF,IAAIwJ,EAAmBxggB,KAAK23f,gBAU5B,GAPI33f,KAAK+1f,WADLiB,GACkBuJ,EAAsBC,EAAmBA,EAGzCD,EAIlBC,IAAqBxggB,KAAK+1f,WAAY,CACtC,IAAIz4d,EAASt9B,KAAK+1f,WAAayK,EAC/Blje,EAAS0kB,MAAM1kB,GAAU,EAAIA,EAC7B,IAAK,IAAInhC,EAAI,EAAGA,EAAI6D,KAAK+9D,QAAQthE,OAAQN,IAAK,CAC1C,IAAI0gE,EAAS78D,KAAK+9D,QAAQ5hE,GAE1B,GAAImhC,EAASu/B,EAAOmzb,eAAiBnzb,EAAOrJ,SACxC,OAAO,EAGf,OAAO,EAGP,OAAO,GAMf+hc,EAAal6f,UAAUi8f,WAAa,SAAU9gf,EAAgB+pf,EAAqBvJ,GAE/E,IAAIwJ,EAAmBxggB,KAAK23f,gBAU5B,GAPI33f,KAAK+1f,WADLiB,GACkBuJ,EAAsBC,EAAmBA,EAGzCD,EAIlBC,IAAqBxggB,KAAK+1f,WAE1B,IAAK,IADDz4d,EAASt9B,KAAK+1f,WAAayK,EACtBrkgB,EAAI,EAAGA,EAAI6D,KAAK+9D,QAAQthE,OAAQN,IAAK,CAC1C,IAAI0gE,EAAS78D,KAAK+9D,QAAQ5hE,GAC1B0gE,EAAOmzb,eAAiB1yd,EAASu/B,EAAOmzb,iBAOpDuF,EAAal6f,UAAU26f,aAAe,SAAUruL,EAAaxvC,EAAYooO,EAAqBvJ,GAC1F,IAAIhhf,EAAQ,EACZ,GAAIghf,EAEA,IAAK,IADD3hO,EAAYkrO,EAAsBvggB,KAAK+/f,aAAatjgB,OAC/CN,EAAI,EAAGA,EAAIg8R,EAAYh8R,IAC5B6Z,GAASq/Q,OAIb,IAASl5R,EAAI,EAAGA,EAAIg8R,EAAYh8R,IAC5B6Z,GAAShW,KAAK+/f,aAAa5jgB,EAAIwrU,GAAaqoL,eAGpD,OAAOh6e,GAKXu/e,EAAal6f,UAAUg8f,qBAAuB,WAC1C,IAAK,IAAIl7f,EAAI,EAAGA,EAAI6D,KAAK+9D,QAAQthE,OAAQN,IAC3B,IAANA,EACI6D,KAAK+9D,QAAQ5hE,GAAG6zf,iBAAmBhwf,KAAK+9D,QAAQ5hE,GAAGkkgB,YACnDrggB,KAAK+9D,QAAQ5hE,GAAG6zf,eAAiBhwf,KAAK+9D,QAAQ5hE,GAAGkkgB,WAMjDrggB,KAAK+9D,QAAQ5hE,EAAI,GAAGkkgB,UAAYrggB,KAAK+9D,QAAQ5hE,GAAG6zf,eAAiBhwf,KAAK+9D,QAAQ5hE,GAAGkkgB,YACjFrggB,KAAK+9D,QAAQ5hE,GAAG6zf,eAAiBhwf,KAAK+9D,QAAQ5hE,GAAGkkgB,UAAYrggB,KAAK+9D,QAAQ5hE,EAAI,GAAGkkgB,YAQjG9K,EAAal6f,UAAUgE,MAAQ,WAC3B,IAAIi2f,EAAc,IAAIC,EACtBD,EAAYS,WAAa/1f,KAAK+1f,WAC9B,IAAK,IAAI55f,EAAI,EAAGA,EAAI6D,KAAK+9D,QAAQthE,OAAQN,IACrCm5f,EAAYv3b,QAAQv5D,KAAKxE,KAAK+9D,QAAQ5hE,GAAGkD,SAE7C,OAAOi2f,GAKXC,EAAal6f,UAAUiX,QAAU,WAC7B,IAAK7U,EAAkBuC,KAAK+/f,cACxB,IAAK,IAAI5jgB,EAAI,EAAGA,EAAI6D,KAAK+/f,aAAatjgB,OAAQN,IAAK,CAClC6D,KAAK+/f,aAAa5jgB,GACxBmW,UAGftS,KAAK+/f,gBACL//f,KAAK+/f,kBAAe5kgB,EACpB6E,KAAK+1f,gBAAa56f,GAEfo6f,KAMP6K,GAAyB,WACzB,SAASA,IAILpggB,KAAKgwf,eAAiB,EAItBhwf,KAAKwzD,SAAW,EAIhBxzD,KAAKo+B,SAAW,EAIhBp+B,KAAKqggB,UAAY,EAoBrB,OAfAD,EAAQ/kgB,UAAUgE,MAAQ,WACtB,IAAIw9D,EAAS,IAAIujc,EAIjB,OAHAvjc,EAAOmzb,eAAiBhwf,KAAKgwf,eAC7Bnzb,EAAOrJ,SAAWxzD,KAAKwzD,SACvBqJ,EAAOz+B,SAAWp+B,KAAKo+B,SAChBy+B,GAKXujc,EAAQ/kgB,UAAUiX,QAAU,WACxBtS,KAAKgwf,oBAAiB70f,EACtB6E,KAAKwzD,cAAWr4D,EAChB6E,KAAKo+B,cAAWjjC,GAEbilgB,KClkIPK,GAAmB,oBACnBC,GAAkB,mBAClBC,GAAoB,qBACpBC,GAA2B,4BAC3BC,GAAyB,0BACzBC,GAAwB,yBACxBC,GAA6B,8BAC7BC,GAA6B,8BAC7BC,GAA+B,gCAC/BC,GAA6B,8BAC7BC,GAA0B,2BAC1BC,GAAwB,gCACxBC,GAAoB,4BACpBC,GAA2B,4BAC3BC,GAA2B,4BAC3BC,GAA2B,4BAC3BC,GAA2B,4BAC3BC,GAA2B,4BAC3BC,GAA0B,2BAC1BC,GAAoC,qCACpCC,GAAyB,0BACzBC,GAA4B,6BAC5BC,GAAyB,0BACzBC,GAAiC,kCACjCC,GAAyB,0BAIzBnnN,GAA6B,WAI7B,SAASA,EAAYs/L,GACjB,IAAIr6e,EAAQC,KAIZA,KAAKkigB,yBAAsB/mgB,EAM3B6E,KAAKmigB,sBAAwB,SAAU7lgB,GAC/ByD,EAAMqigB,iBAAiBrigB,EAAMq6e,OAAOxqa,aACpC7vE,EAAMmigB,oBAAoBxggB,KAAKpF,EAAM0Q,EAAG1Q,EAAMyQ,GAC9CzQ,EAAMkpB,mBAGdxlB,KAAKo6e,OAASA,EACd,IAAIpse,EAAS,IAAIwpG,GAAK,iBAAkBx3G,KAAKo6e,OAAOkV,MAAM3xE,eAC1D3va,EAAO2pG,UAAU33G,KAAKo6e,OAAOkV,MAAMthf,QACnCL,GAAW3N,KAAKo6e,OAAOkV,MAAMthf,QAC7BhO,KAAKi8e,gBAAgBjue,GA8bzB,OAzbA8sS,EAAYz/S,UAAUkkC,cAAgB,WAClC,MAAO,eAQXu7Q,EAAYz/S,UAAU4gf,gBAAkB,SAAUomB,GAC9C,IAAItigB,EAAQC,KACRsD,EAAKtD,KAAKo6e,OAAOkV,MAAMtuf,QAAQsC,GACnCtD,KAAKuyb,YAAc/xb,SAASW,cAAc,OAC1CnB,KAAKuyb,YAAYjvb,GAAKtD,KAAKo6e,OAAOkV,MAAMh9W,YAAc,mBACtD9xI,SAASuL,KAAKpK,YAAY3B,KAAKuyb,aAC/B,IAAIxhU,EAAKvwH,SAASW,cAAc,MAChC4vH,EAAGrsH,MAAMsR,MAAQ,OACjB+6G,EAAGztH,GAAKtD,KAAKo6e,OAAOkV,MAAMh9W,YAAc,wBACxCvhB,EAAGrsH,MAAM49f,UAAY,OACrBvxY,EAAGrsH,MAAM+3B,OAAS,MAClBs0F,EAAGrsH,MAAM00D,QAAU,MACnB23D,EAAGrsH,MAAM6uD,UAAY,OACrBw9D,EAAGwxY,cAAgBvigB,KAAKwigB,0BACxBxigB,KAAKuyb,YAAY5wb,YAAYovH,GAC7B,IAAI6rL,IAEInwR,KAAM41e,EAAWtub,YAAY,OAC7BL,QAAS,mBACTpwE,GAAIA,EAAKo9f,KAGTj0e,KAAM41e,EAAWtub,YAAY,QAC7BL,QAAS,oBACTpwE,GAAIA,EAAKm9f,KAGTh0e,KAAM41e,EAAWtub,YAAY,SAC7BL,QAAS,qBACTpwE,GAAIA,EAAKq9f,KAGT1vY,WAAW,IAGXxkG,KAAM41e,EAAWtub,YAAY,gBAC7BL,QAAS,4BACTpwE,GAAIA,EAAKs9f,KAGTn0e,KAAM41e,EAAWtub,YAAY,cAC7BL,QAAS,0BACTpwE,GAAIA,EAAKu9f,KAGTp0e,KAAM41e,EAAWtub,YAAY,sBAC7BL,QAAS,kCACTpwE,GAAIA,EAAK0+f,KAGTv1e,KAAM41e,EAAWtub,YAAY,cAC7BL,QAAS,0BACTpwE,GAAIA,EAAK2+f,KAGThxY,WAAW,IAGXxkG,KAAM41e,EAAWtub,YAAY,aAC7BL,QAAS,0BACTpwE,GAAIA,EAAKw9f,KAGTr0e,KAAM41e,EAAWtub,YAAY,qBAC7BL,QAAS,8BACTpwE,GAAIA,EAAK49f,KAGTz0e,KAAM41e,EAAWtub,YAAY,kBAC7BL,QAAS,8BACTpwE,GAAIA,EAAKy9f,KAGTt0e,KAAM41e,EAAWtub,YAAY,kBAC7BL,QAAS,8BACTpwE,GAAIA,EAAK09f,KAGTv0e,KAAM41e,EAAWtub,YAAY,oBAC7BL,QAAS,gCACTpwE,GAAIA,EAAK29f,KAGThwY,WAAW,IAGXxkG,KAAM41e,EAAWtub,YAAY,QAC7BL,QAAS,qBACTpwE,GAAIA,EAAK69f,KAGT10e,KAAM41e,EAAWtub,YAAY,aAC7BL,QAAS,yBACTpwE,GAAIA,EAAK89f,KAGTnwY,WAAW,IAGXxkG,KAAM41e,EAAWtub,YAAY,oBAC7BzwE,GAAIA,EAAK+9f,GACT3tb,QAAS,uBAGTjnD,KAAM41e,EAAWtub,YAAY,eAC7BzwE,GAAIA,EAAKy+f,GACTrub,QAAS,gCAGTjnD,KAAM41e,EAAWtub,YAAY,UAC7BzwE,GAAIA,EAAKg+f,GACT5tb,QAAS,UACTjZ,QAEQhuC,KAAM41e,EAAWtub,YAAY,gBAC7BzwE,GAAIA,EAAKk+f,GACT9tb,QAAS,6BAGTjnD,KAAM41e,EAAWtub,YAAY,gBAC7BzwE,GAAIA,EAAKm+f,GACT/tb,QAAS,6BAGTjnD,KAAM41e,EAAWtub,YAAY,eAC7BzwE,GAAIA,EAAKq+f,GACTjub,QAAS,4BAGTjnD,KAAM41e,EAAWtub,YAAY,gBAC7BzwE,GAAIA,EAAKo+f,GACThub,QAAS,+BAKjBjnD,KAAM41e,EAAWtub,YAAY,UAC7BzwE,GAAIA,EAAKi+f,GACT7tb,QAAS,UACTjZ,QAEQhuC,KAAM41e,EAAWtub,YAAY,gBAC7BzwE,GAAIA,EAAKs+f,GACTlub,QAAS,8BAGTjnD,KAAM41e,EAAWtub,YAAY,cAC7BzwE,GAAIA,EAAKu+f,GACTnub,QAAS,2BAGTjnD,KAAM41e,EAAWtub,YAAY,iBAC7BzwE,GAAIA,EAAKw+f,GACTpub,QAAS,gCAKrB+ub,GACAt7f,OAAQ,IAAMnH,KAAKo6e,OAAOkV,MAAMh9W,YAAc,mBAC9C73E,MAAOmiP,EACPn3S,OAAQ,SAAUxF,GACd,IAAI4d,EAAO5d,EAAKe,QAAQsC,GACxBvD,EAAM2igB,sBAAsB7kf,KAGpC7d,KAAKkigB,oBAAsB,IAAI1vE,GAAKiwE,EAAa,IAAMzigB,KAAKo6e,OAAOkV,MAAMh9W,YAAc,yBACvFtyI,KAAKkigB,oBAAoB/rd,WAAa,WAC9Bp2C,EAAMq6e,QAAUr6e,EAAMq6e,OAAOxqa,YAC7B9rE,EAAU/D,EAAMq6e,OAAOxqa,UAAU+yb,UAAY,0BAC7C5igB,EAAMq6e,OAAOxqa,UAAUgzb,cAG/B5igB,KAAKkigB,oBAAoBrvE,QAAU,WAC3B9yb,EAAMq6e,QAAUr6e,EAAMq6e,OAAOxqa,YAC7B9rE,EAAU/D,EAAMq6e,OAAOxqa,UAAU+yb,OAAQ,6BACzC5igB,EAAMq6e,OAAO8H,iBAOzBpnM,EAAYz/S,UAAUmngB,0BAA4B,WAC9C,OAAO,GAOX1nN,EAAYz/S,UAAUqngB,sBAAwB,SAAU7kf,GACpD,IAAIva,EAAKtD,KAAKo6e,OAAOkV,MAAMtuf,QAAQsC,GACnC,OAAQua,GACJ,KAAKva,EAAKm9f,GACNzggB,KAAKo6e,OAAOxqa,UAAUrwE,OACtB,MACJ,KAAK+D,EAAKo9f,GACN1ggB,KAAKo6e,OAAOkV,MAAMuT,OAAOp4F,MACzB,MACJ,KAAKnna,EAAKq9f,GACD3ggB,KAAKo6e,OAAOkV,MAAMzR,gBACnB79e,KAAKo6e,OAAOkV,MAAM5U,aAAaooB,mBAAc3ngB,GAEjD,MACJ,KAAKmI,EAAKs9f,GACD5ggB,KAAKo6e,OAAOkV,MAAMzR,gBACnB79e,KAAKo6e,OAAOkV,MAAM5U,aAAaqoB,YAEnC,MACJ,KAAKz/f,EAAKu9f,GACD7ggB,KAAKo6e,OAAOkV,MAAMzR,gBACnB79e,KAAKo6e,OAAOkV,MAAM1S,4BAA4B34X,OAElD,MACJ,KAAK3gH,EAAK69f,GACFnhgB,KAAKo6e,OAAOkV,MAAMzT,kBAClB77e,KAAKo6e,OAAOkV,MAAMzT,iBAAiBkC,iBAEvC,MACJ,KAAKz6e,EAAKy9f,GACN/ggB,KAAKo6e,OAAOxqa,UAAUozb,oBACtB,MACJ,KAAK1/f,EAAK09f,GACNhhgB,KAAKo6e,OAAOxqa,UAAUqzb,gBACtB,MACJ,KAAK3/f,EAAK49f,GACV,KAAK59f,EAAKw9f,GACF9ggB,KAAKo6e,OAAOkV,MAAMvT,uBAClB/7e,KAAKo6e,OAAOkV,MAAMvT,sBAAsB93X,OAE5C,MACJ,KAAK3gH,EAAK29f,GACNjhgB,KAAKo6e,OAAOkV,MAAMuT,OAAOK,kBACzB,MACJ,KAAK5/f,EAAK89f,GACFphgB,KAAKo6e,OAAOkV,MAAMpjB,uBAClBlse,KAAKo6e,OAAOkV,MAAMpjB,sBAAsBjoX,OAE5C,MACJ,KAAK3gH,EAAK+9f,GACNrhgB,KAAKo6e,OAAOkV,MAAMxjB,4BAA4B7nX,OAC9C,MACJ,KAAK3gH,EAAKy+f,GACN/hgB,KAAKo6e,OAAOkV,MAAMuT,OAAOM,aACzB,MACJ,KAAK7/f,EAAKk+f,GACNxhgB,KAAKo6e,OAAOkV,MAAMuT,OAAOO,WAAU,GACnC,MACJ,KAAK9/f,EAAKm+f,GACNzhgB,KAAKo6e,OAAOkV,MAAMuT,OAAOO,WAAU,GACnC,MACJ,KAAK9/f,EAAKq+f,GACN3hgB,KAAKo6e,OAAOkV,MAAMuT,OAAOQ,cAAa,GACtC,MACJ,KAAK//f,EAAKo+f,GACN1hgB,KAAKo6e,OAAOkV,MAAMuT,OAAOQ,cAAa,GACtC,MACJ,KAAK//f,EAAKs+f,GACN5hgB,KAAKo6e,OAAOkV,MAAMuT,OAAOS,cACzB,MACJ,KAAKhggB,EAAKu+f,GACN7hgB,KAAKo6e,OAAOkV,MAAMuT,OAAOU,YACzB,MACJ,KAAKjggB,EAAKw+f,GACN9hgB,KAAKo6e,OAAOkV,MAAMuT,OAAOW,eACzB,MACJ,KAAKlggB,EAAK0+f,GACNhigB,KAAKo6e,OAAOkV,MAAM5U,aAAa+oB,uBAAuBzjgB,KAAKo6e,OAAOxqa,WAClE,MACJ,KAAKtsE,EAAK2+f,GACNjigB,KAAKo6e,OAAOkV,MAAM5U,aAAagpB,sBAAsB1jgB,KAAKo6e,OAAOxqa,aAI7EkrO,EAAYz/S,UAAU+mgB,iBAAmB,SAAUxyb,GAC/C,IAAI0/a,EAAQtvf,KAAKo6e,OAAOkV,MACpBhsf,EAAKgsf,EAAMtuf,QAAQsC,GACnB/D,EAAOiB,SAASosB,eAAetpB,EAAKm9f,IACpCh2F,EAAMjqa,SAASosB,eAAetpB,EAAKo9f,IACnC50F,EAAQtra,SAASosB,eAAetpB,EAAKq9f,IACrCgD,EAAcnjgB,SAASosB,eAAetpB,EAAKs9f,IAC3CgD,EAAYpjgB,SAASosB,eAAetpB,EAAKu9f,IACzCn0e,EAAOlsB,SAASosB,eAAetpB,EAAK69f,IACpCte,EAAYrif,SAASosB,eAAetpB,EAAK89f,IACzCyC,EAAkBrjgB,SAASosB,eAAetpB,EAAK+9f,IAC/CyC,EAActjgB,SAASosB,eAAetpB,EAAKg+f,IAC3CgC,EAAc9igB,SAASosB,eAAetpB,EAAKi+f,IAC3C4B,EAAa3igB,SAASosB,eAAetpB,EAAKy+f,IAC1C7uc,EAAY1yD,SAASosB,eAAetpB,EAAKw9f,IACzCiD,EAAgBvjgB,SAASosB,eAAetpB,EAAKy9f,IAC7CiD,EAAgBxjgB,SAASosB,eAAetpB,EAAK49f,IAC7C+B,EAAgBzigB,SAASosB,eAAetpB,EAAK09f,IAC7CkC,EAAkB1igB,SAASosB,eAAetpB,EAAK29f,IAC/CgD,EAAoBzjgB,SAASosB,eAAetpB,EAAK0+f,IACjDkC,EAAY1jgB,SAASosB,eAAetpB,EAAK2+f,IAsB7C,GArBAx3F,EAAI/la,MAAM4xC,QAAU,OACpBw1X,EAAMpna,MAAM4xC,QAAU,OACtBw1X,EAAMt5R,YAAY9tI,MAAM4xC,QAAU,OAClC4c,EAAUxuD,MAAM4xC,QAAU,OAC1Bytd,EAAcr/f,MAAM4xC,QAAU,OAC9B2sd,EAAcv+f,MAAM4xC,QAAU,OAC9B0td,EAAct/f,MAAM4xC,QAAU,OAC9B4sd,EAAgBx+f,MAAM4xC,QAAU,OAChC4sd,EAAgB1wX,YAAY9tI,MAAM4xC,QAAU,OAC5C6sd,EAAWz+f,MAAM4xC,QAAU,OAC3B5pB,EAAKhoB,MAAM4xC,QAAU,OACrBusc,EAAUn+e,MAAM4xC,QAAU,OAC1Busc,EAAUrwW,YAAY9tI,MAAM4xC,QAAU,OACtCwtd,EAAYp/f,MAAM4xC,QAAU,OAC5Bgtd,EAAY5+f,MAAM4xC,QAAU,OAC5Butd,EAAgBn/f,MAAM4xC,QAAU,OAChCqtd,EAAYj/f,MAAM4xC,QAAU,OAC5Bstd,EAAUl/f,MAAM4xC,QAAU,OAC1B2td,EAAkBv/f,MAAM4xC,QAAU,OAClC4td,EAAUx/f,MAAM4xC,QAAU,OAC1B4td,EAAU1xX,YAAY9tI,MAAM4xC,QAAU,OAClC74C,EAAkBmyE,GAClB,OAAO,EAWX,GATAA,EAAUu0b,cACNv0b,EAAU0qK,SACVmwL,EAAI3ma,UAAUM,IAAI,cAClB7E,EAAKuE,UAAUM,IAAI,gBAGnBqma,EAAI3ma,UAAUS,OAAO,cACrBhF,EAAKuE,UAAUS,OAAO,eAEtB+qf,EAAMzR,eACN,OAAO,EAgBX,GAdApzE,EAAI/la,MAAM4xC,QAAU,QACpBw1X,EAAMpna,MAAM4xC,QAAU,QACtBw1X,EAAMt5R,YAAY9tI,MAAM4xC,QAAU,QAClCwtd,EAAYhggB,UAAUM,IAAI,eAC1Bk/f,EAAYx/f,UAAUM,IAAI,eAC1Bu/f,EAAY7/f,UAAUM,IAAI,eAC1Bw/f,EAAU9/f,UAAUM,IAAI,eACxB++f,EAAWr/f,UAAUM,IAAI,eACrBkrf,EAAM/iB,mBAAqB9ue,EAAkB6xf,EAAMuT,OAAOuB,YAC1Dt4F,EAAMhoa,UAAUS,OAAO,cAGvBuna,EAAMhoa,UAAUM,IAAI,cAEM,oBAA1BwrE,EAAUy0b,YACVV,EAAYj/f,MAAM4xC,QAAU,QAC5Bstd,EAAUl/f,MAAM4xC,QAAU,QAC1B4td,EAAU1xX,YAAY9tI,MAAM4xC,QAAU,YAErC,CACD,IAAI/4C,EAAQqyE,EAAUryE,MAClBshB,EAAM+wD,EAAU/wD,IACU,SAA1B+wD,EAAUy0b,aAC+D,WAAtE/U,EAAM5U,aAAa6L,aAAahpf,EAAMslf,WAAWyhB,mBACpDL,EAAkBv/f,MAAM4xC,QAAU,QAClC4td,EAAUx/f,MAAM4xC,QAAU,QAC1B4td,EAAU1xX,YAAY9tI,MAAM4xC,QAAU,SAEhB/4C,EAAMslf,UAAUuR,iBAAmBv1e,EAAIgke,UAAUuR,eACpE72f,EAAMslf,UAAUwR,iBAAmBx1e,EAAIgke,UAAUwR,gBACjDzkb,EAAU20b,eAAehngB,EAAMslf,UAAUwR,eAAgB92f,EAAOshB,IAEnEq0C,EAAUpvD,UAAUM,IAAI,cAGpB8uD,EAAUpvD,UAAUK,SAAS,eAC7B+uD,EAAUpvD,UAAUS,OAAO,cAGvBqrE,EAAU40b,8BACDlZ,KAAoB17a,EAAU60b,gBAC/CV,EAAcr/f,MAAM4xC,QAAU,QAC9B2sd,EAAcv+f,MAAM4xC,QAAU,QAC1Bg5c,EAAMvT,wBACNioB,EAAct/f,MAAM4xC,QAAU,SAElC4sd,EAAgBx+f,MAAM4xC,QAAU,QAChC4sd,EAAgB1wX,YAAY9tI,MAAM4xC,QAAU,SAGxCg5c,EAAMvT,wBACN7ob,EAAUxuD,MAAM4xC,QAAU,SA8BtC,OA1BIt2C,KAAKo6e,OAAOkV,MAAM1/a,UAAUryE,MAAMslf,UAAUuR,eACzCp0f,KAAKo6e,OAAOkV,MAAM1/a,UAAU/wD,IAAIgke,UAAUuR,eAC7CvR,EAAUrwW,YAAY9tI,MAAM4xC,QAAU,QAClCg5c,EAAMxjB,8BACN+3B,EAAgBn/f,MAAM4xC,QAAU,SAEpCwtd,EAAYp/f,MAAM4xC,QAAU,QAC5Bgtd,EAAY5+f,MAAM4xC,QAAU,QACxBt2C,KAAKo6e,OAAOkV,MAAMuT,OAAO6B,kBACzBvB,EAAWz+f,MAAM4xC,QAAU,WAI3Bt2C,KAAKo6e,OAAOkV,MAAMzT,mBAClBnvd,EAAKhoB,MAAM4xC,QAAU,QACrB5pB,EAAKm7K,gBAAgBnjM,MAAM4xC,QAAU,SAErCt2C,KAAKo6e,OAAOkV,MAAMpjB,wBAClB2W,EAAUn+e,MAAM4xC,QAAU,UAGJ,UAA1Bs5B,EAAUy0b,cACV33e,EAAKhoB,MAAM4xC,QAAU,OACrBusc,EAAUn+e,MAAM4xC,QAAU,OAC1B4sd,EAAgB1wX,YAAY9tI,MAAM4xC,QAAU,SAEzC,GAMXwkQ,EAAYz/S,UAAUiX,QAAU,WACxBtS,KAAKkigB,qBACLligB,KAAKkigB,oBAAoB5vf,UAEzBtS,KAAKuyb,cACDvyb,KAAKuyb,YAAYl+a,eACjBrU,KAAKuyb,YAAYl+a,cAAc/O,YAAYtF,KAAKuyb,aAEpDvyb,KAAKuyb,YAAYvwb,UAAY,IAEjChC,KAAKuyb,iBAAcp3b,EACnB6E,KAAKkigB,yBAAsB/mgB,GAExB2/S,KClfP6pN,GAA+B,WAC/B,SAASA,IACL3kgB,KAAK4kgB,kBAAoB,EACzB5kgB,KAAKo/E,UAwBT,OAtBA9gF,OAAOuJ,eAAe88f,EAActpgB,UAAW,kBAC3CqM,IAAK,WACD,OAAO1H,KAAK4kgB,kBAEhBv9f,IAAK,SAAU++e,GACXpmf,KAAK4kgB,iBAAmBxe,GAE5Bz+e,YAAY,EACZC,cAAc,IAElB+8f,EAActpgB,UAAUiX,QAAU,WAC9B,IAAK7U,EAAkBuC,KAAKo/E,QAAS,CACjC,IAAK,IAAIjjF,EAAI,EAAGA,EAAI6D,KAAKo/E,OAAO3iF,OAAQN,IAAK,CACzC,IAAImsf,EAAYtof,KAAKo/E,OAAOjjF,GAC5Bmsf,EAAUh2e,UACVtS,KAAKo/E,OAAO/2D,OAAOroB,KAAKo/E,OAAO7gF,QAAQ+pf,GAAY,GACnDnsf,IAEJ6D,KAAKo/E,UAETp/E,KAAKo/E,YAASjkF,GAEXwpgB,KCrBPE,GAA4B,WAC5B,SAASA,EAAWtkgB,GAChBP,KAAK8kgB,qBAAkB3pgB,EACvB6E,KAAK49e,qBAAkBzif,EACvB6E,KAAKg+e,qBAAkB7if,EAEnB6E,KAAKilf,UAAY1kf,EAKrBP,KAAKg+e,gBAAkB,IAAIgF,QAAiB7nf,GAC5C6E,KAAK49e,gBAAkB,IAAImF,QAAiB5nf,GA8IhD,OA5IAmD,OAAOuJ,eAAeg9f,EAAWxpgB,UAAW,oBACxCqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,qBAEjC/F,IAAK,SAAUi9f,GACXtkgB,KAAKg3H,iBAAiB,mBAAoBstY,IAE9C38f,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeg9f,EAAWxpgB,UAAW,mBACxCqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,oBAEjC/F,IAAK,SAAU09f,GACX/kgB,KAAKg3H,iBAAiB,kBAAmB+tY,IAE7Cp9f,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeg9f,EAAWxpgB,UAAW,WACxCqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,YAEjC/F,IAAK,SAAU2+e,GACXhmf,KAAKg3H,iBAAiB,UAAWgvX,IAErCr+e,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeg9f,EAAWxpgB,UAAW,gBACxCqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,iBAEjC/F,IAAK,SAAU29f,GACXhlgB,KAAKg3H,iBAAiB,eAAgBguY,IAE1Cr9f,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeg9f,EAAWxpgB,UAAW,gBACxCqM,IAAK,WACD,OAAO1H,KAAKoN,iBAAiB,iBAEjC/F,IAAK,SAAU49f,GACXjlgB,KAAKg3H,iBAAiB,eAAgBiuY,IAE1Ct9f,YAAY,EACZC,cAAc,IAElBi9f,EAAWxpgB,UAAU+R,iBAAmB,SAAU4e,GAC9C,IAAI1iB,EAAey/d,GAAcmB,gBAAgB26B,EAAW57B,iBAAkBj9c,GAC9E,OAAKvuB,EAAkBuC,KAAK8kgB,kBAAoB9kgB,KAAK8kgB,gBAAgB57B,eAAeziQ,YAAYn9N,GACrFtJ,KAAK8kgB,gBAAgB57B,eAAexhe,IAAI4B,GAE5Cu7f,EAAWzf,wBAAwBp5d,IAE9C64e,EAAWxpgB,UAAU27H,iBAAmB,SAAUhrG,EAAUhvB,GAIxD,IAHIS,EAAkBT,IAAoB,KAAVA,KAC5BA,EAAQ6ngB,EAAWzf,wBAAwBp5d,IAE3CvuB,EAAkBuC,KAAK8kgB,iBACvB9kgB,KAAKklgB,2BAA2Bl5e,EAAUhvB,OAEzC,CACD,IAAIsM,EAAey/d,GAAcmB,gBAAgBlqe,KAAK8kgB,gBAAgB77B,iBAAkBj9c,GACxF,GAAIhsB,KAAK8kgB,gBAAgB57B,eAAeziQ,YAAYn9N,IAEhDtJ,KAAK8kgB,gBAAgB57B,eAAexhe,IAAI4B,KAAkBtM,EAC1D,OAGJgD,KAAK8kgB,gBAAkBD,EAAWM,iBAAiB/5B,mBAAmBpre,KAAK8kgB,gBAAiB94e,EAAUhvB,KAG9G6ngB,EAAWxpgB,UAAU6pgB,2BAA6B,SAAUl5e,EAAUkyG,GAClE,IAAIknY,EAAsB,IAAIz/R,GAC9B3lO,KAAKqlgB,oBAAoB,mBAAoBr5e,EAAUkyG,EAAWknY,GAClEplgB,KAAKqlgB,oBAAoB,UAAWr5e,EAAUkyG,EAAWknY,GACzDplgB,KAAKqlgB,oBAAoB,kBAAmBr5e,EAAUkyG,EAAWknY,GACjEplgB,KAAKqlgB,oBAAoB,eAAgBr5e,EAAUkyG,EAAWknY,GAC9DplgB,KAAKqlgB,oBAAoB,eAAgBr5e,EAAUkyG,EAAWknY,GAE9DplgB,KAAK8kgB,gBAAkBD,EAAWM,iBAAiBj6B,gBAAgBk6B,EAAqBP,EAAW57B,mBAGvG47B,EAAWxpgB,UAAUgqgB,oBAAsB,SAAUr5e,EAAUg+c,EAAkB9rW,EAAWgsX,GACxF,IAAI5gf,EACJA,EAAey/d,GAAcmB,gBAAgB26B,EAAW57B,iBAAkBj9c,GACtEA,IAAag+c,EACbkgB,EAAqB9lf,IAAIkF,EAAc40H,GAGvCgsX,EAAqB9lf,IAAIkF,EAAcu7f,EAAWzf,wBAAwBp5d,KAGlF64e,EAAWzf,wBAA0B,SAAUp5d,GAC3C,IAAIhvB,OAAQ7B,EACZ,OAAQ6wB,GACJ,IAAK,mBACDhvB,EAAQ,SACR,MACJ,IAAK,UACDA,EAAQ,EACR,MACJ,IAAK,kBACDA,EAAQ,MACR,MACJ,IAAK,eACDA,EAAQ,GACR,MACJ,IAAK,eACDA,EAAQ,EAGhB,OAAOA,GAEX6ngB,EAAWxpgB,UAAUiX,QAAU,WACtB7U,EAAkBuC,KAAKg+e,kBACxBh+e,KAAKg+e,gBAAgB1re,UAEpB7U,EAAkBuC,KAAK49e,kBACxB59e,KAAK49e,gBAAgBtre,UAEpB7U,EAAkBuC,KAAK8kgB,kBACxBD,EAAWM,iBAAiB5ggB,OAAOvE,KAAK8kgB,iBAE5C9kgB,KAAK8kgB,qBAAkB3pgB,EACvB6E,KAAKg+e,qBAAkB7if,EACvB6E,KAAK49e,qBAAkBzif,GAE3B0pgB,EAAW70c,MAAQ,WACfhwD,KAAKmlgB,iBAAiBn1c,SAE1B60c,EAAWS,UAAY,IACvBT,EAAWU,aAAe,IAC1BV,EAAWW,YAAc,IACzBX,EAAWY,aAAe,KAC1BZ,EAAWM,iBAAmB,IAAIl6B,GAClC45B,EAAW57B,iBAAmB,EACvB47B,KCzJPvtG,GAAwB,WAIxB,SAASA,EAAO8iF,GAIZp6e,KAAK0lgB,aAAc,EAInB1lgB,KAAK2lgB,eAAgB,EACrB3lgB,KAAKyrf,gBAAatwf,EAClB6E,KAAK4lgB,cAAgB,EACrB5lgB,KAAK6lgB,YAAc,EACnB7lgB,KAAK8lgB,gBAAkB,EACvB9lgB,KAAK+lgB,aAAc,EACnB/lgB,KAAKo6e,OAASA,EAw+IlB,OAn+IA9iF,EAAOj8Z,UAAUw1D,OAAS,WAEX7wD,KAAKo6e,OAAOlvQ,MAAM,GACbwmR,YAAY,IAKhCp6F,EAAOj8Z,UAAUiX,QAAU,WACvBtS,KAAKo6e,YAASj/e,EACd6E,KAAKhD,WAAQ7B,EACb6E,KAAK0lgB,iBAAcvqgB,EACnB6E,KAAK2lgB,mBAAgBxqgB,EACrB6E,KAAKyrf,gBAAatwf,EAClB6E,KAAK4lgB,mBAAgBzqgB,EACrB6E,KAAK6lgB,iBAAc1qgB,EACnB6E,KAAK8lgB,qBAAkB3qgB,EACvB6E,KAAK+lgB,iBAAc5qgB,GAMvBm8Z,EAAOj8Z,UAAU2qgB,YAAc,SAAUhgR,GAErC,IAAK,IADD/1F,EACK9zJ,EAAI,EAAGA,EAAI6pP,EAASvpP,OAAQN,IAAK,CACtC,IAAIu2Q,EAAU1sB,EAAS7pP,GAGvB,GAFA8zJ,EAAOjwJ,KAAKo6e,OAAO6rB,cAAcvzP,GACjC1yQ,KAAKkmgB,cAAclmgB,KAAKo6e,OAAO+rB,iBAAkBzzP,GAC7C1yQ,KAAKo6e,OAAOlvQ,MAAMzuO,OAAS,EAAG,CAE9B,IAAK,IADDyzJ,EAAY,EACP1oI,EAAM,EAAGA,EAAMxnB,KAAKo6e,OAAOlvQ,MAAMzuO,OAAQ+qB,IAAO,CACrD,IAAI4+e,EAAWpmgB,KAAKo6e,OAAOlvQ,MAAM1jN,GAGjC,GAFuB4+e,EAASC,aACpB3zP,EAAQzgQ,OACYm0f,IAAan2W,EACzC,MAEJC,IAEAA,EAAYlwJ,KAAKo6e,OAAOlvQ,MAAMzuO,OAAS,GACvCuD,KAAKo6e,OAAOksB,WAAWp2W,EAAWD,GAG1CjwJ,KAAKumgB,cAAc7zP,EAAS,EAAG1yQ,KAAKo6e,QAExCp6e,KAAKwmgB,sBACLxmgB,KAAKo6e,OAAOI,mBACZx6e,KAAK2lgB,eAAgB,GAQzBruG,EAAOj8Z,UAAUkrgB,cAAgB,SAAU7zP,EAASzgQ,EAAOmoe,EAAQqsB,GAC/D,IACIC,EADA1S,EAAQthP,EAAQ91P,WAEpB,GACI5c,KAAKo6e,OAAOusB,yBAAyB3S,GAAO,GAC5C0S,EAAY1mgB,KAAK4mgB,YAAY5S,EAAO/hf,GACpCA,EAAQ,EACRjS,KAAKo6e,OAAOusB,yBAAyB3S,GAAO,GAC5CA,EAAQ0S,QACH1S,IAQb18F,EAAOj8Z,UAAUwrgB,mBAAqB,SAAUn0P,EAAS0nO,EAAQnqV,GAE7D,IAAI62W,EAAqB1sB,EAAO2sB,2BAA2Br0P,GAAS,GACpE,GAAIo0P,EAAoB,CACpB,IAAIlib,EAASkib,EAAmBzngB,QAChCulF,EAAOqrE,KAAOA,EACdmqV,EAAO4sB,mBAAmBt0P,EAAQiwO,eAAe,GACjD1yV,EAAK4jW,aAAe7zf,KAAKingB,wBAAwB7sB,EAAQx1Z,GACzD5kF,KAAKkngB,2BAA2Btib,GAIpC,GADAkib,EAAqB1sB,EAAO2sB,2BAA2Br0P,GAAS,GACxC,CACpB,IAAIplE,EAASw5T,EAAmBzngB,QAChCiuM,EAAOr9C,KAAOA,EACdmqV,EAAO4sB,mBAAmBt0P,EAAQiwO,eAAe,GACjD1yV,EAAK6jW,aAAe9zf,KAAKingB,wBAAwB7sB,EAAQ9sS,GACzDttM,KAAKkngB,2BAA2B55T,KAMxCgqN,EAAOj8Z,UAAU6rgB,2BAA6B,SAAU3mgB,GACpD,IAAI8lgB,EAAe9lgB,EAAK0vJ,KAAKo2W,aACzBc,EAAYnngB,KAAKo6e,OAAOgtB,gBAAgB7mgB,EAAKizf,kBAC7Cn0f,EAAQkB,EAAKlB,QACjBW,KAAKo6e,OAAOqJ,eAAe4iB,GAAcc,GAAa9ngB,EACtD,IAAK,IAAIkkB,EAAI,EAAGA,EAAIlkB,EAAM4jf,aAAaxmf,OAAQ8mB,IAAK,CAChD,IAAIljB,EAAQhB,EAAM4jf,aAAa1/d,GAC3BljB,aAAiB0yf,IACjB/yf,KAAKqngB,iBAAiBhngB,GAAO,GAAO,GAG5C,OAAOhB,GAEXi4Z,EAAOj8Z,UAAUisgB,wBAA0B,SAAU3V,GACjD,IAAI/0e,EAAa+0e,EAAO/0e,WACxB,GACQA,aAAsBkme,GACtB9if,KAAKungB,qBAAqB3qf,GAG1B5c,KAAKwngB,iBAAiB5qf,SAGrBA,EAAaA,EAAWq/e,aAKrC3kG,EAAOj8Z,UAAUksgB,qBAAuB,SAAU5V,GAC9C,IAAK,IAAIpue,EAAI,EAAGA,EAAIoue,EAAO1O,aAAaxmf,OAAQ8mB,IAE5C,IAAK,IADDuqC,EAAO6jc,EAAO1O,aAAa1/d,GACtBpnB,EAAI,EAAGA,EAAI2xD,EAAK1zC,SAAS3d,OAAQN,IAAK,CAC3C,IAAI6E,EAAU8sD,EAAK1zC,SAASje,GACxB6E,aAAmBsqf,IAAyC,IAAtBtqf,EAAQuqf,WAC9Cvqf,EAAQ48f,mBAAmB59f,KAAKo6e,UAQhD9iF,EAAOj8Z,UAAUmsgB,iBAAmB,SAAU7V,GAC1C,IAAK,IAAIx1f,EAAI,EAAGA,EAAIw1f,EAAO1O,aAAaxmf,OAAQN,IAE5C,IAAK,IADDukE,EAAMixb,EAAO1O,aAAa9mf,GACrBonB,EAAI,EAAGA,EAAIm9C,EAAIuib,aAAaxmf,OAAQ8mB,IAEzC,IAAK,IADD0/C,EAAOvC,EAAIuib,aAAa1/d,GACnB4C,EAAI,EAAGA,EAAI88C,EAAKggb,aAAaxmf,OAAQ0pB,IAAK,CAC/C,IAAI6te,EAAQ/wb,EAAKggb,aAAa98d,GAC1B6te,aAAiBlR,GACjB9if,KAAKungB,qBAAqBvT,GAG1Bh0f,KAAKwngB,iBAAiBxT,KAY1C18F,EAAOj8Z,UAAU4rgB,wBAA0B,SAAU7sB,EAAQuX,GAEzD,GADA3xf,KAAKo6e,OAAOqtB,yBAAyB9V,EAAQvX,EAAO+rB,kBACjB,IAA/BxU,EAAO1O,aAAaxmf,OAAc,CAClC,IAAIirgB,EAAY,IAAI5kB,GAChBh1b,EAAO,IAAIqlc,GAAWuU,GAC1BA,EAAUzkB,aAAaz+e,KAAKspD,GAC5B6jc,EAAO1O,aAAaz+e,KAAKkjgB,GACzBA,EAAUxkB,gBAAkByO,EAEhC3xf,KAAKsngB,wBAAwB3V,GAC7B,IAAK,IAAIx1f,EAAI,EAAGA,EAAIw1f,EAAO1O,aAAaxmf,OAAQN,IAAK,CACjD,IAAI63f,EAAQrC,EAAO1O,aAAa9mf,GAChCi+e,EAAOusB,yBAAyB3S,GAAO,GACvCh0f,KAAK4mgB,YAAY5S,EAAO,GACxB5Z,EAAOusB,yBAAyB3S,GAAO,GAE3C,IAAIttf,EAAOirf,EAAO6B,iBAIlB,MAHa,cAAT9sf,GAAiC,eAATA,GAAkC,oBAATA,GACjD1G,KAAK2ngB,mBAAmBvtB,EAAOwtB,WAAW56f,EAAIote,EAAO+rB,iBAAiBn5f,EAAG2kf,GAEtEA,GAOXr6F,EAAOj8Z,UAAUssgB,mBAAqB,SAAUE,EAAUlf,GACtDA,EAAW37e,GAAK66f,EAChB,IAAK,IAAI1rgB,EAAI,EAAGA,EAAIwsf,EAAW1F,aAAaxmf,OAAQN,IAAK,CACrD,IAAI2rgB,EAAcnf,EAAW1F,aAAa9mf,GACtC2rgB,aAAuBhlB,IACvBglB,EAAY/6f,EAAI+6f,EAAY/6f,EAC5B+6f,EAAY96f,EAAI86f,EAAY96f,EAAI66f,GAGhC7ngB,KAAK+ngB,iCAAiCD,EAAaD,KAS/DvwG,EAAOj8Z,UAAU0sgB,iCAAmC,SAAUC,EAAaH,GACvEG,EAAYh7f,EAAIg7f,EAAYh7f,EAAI66f,EAChC,IAAK,IAAI1rgB,EAAI,EAAGA,EAAI6rgB,EAAY/kB,aAAaxmf,OAAQN,IAAK,CACtD,IAAI2rgB,EAAcE,EAAY/kB,aAAa9mf,GACvC2rgB,aAAuB7V,IACvBjyf,KAAKiogB,oCAAoCH,EAAaD,KASlEvwG,EAAOj8Z,UAAU4sgB,oCAAsC,SAAUC,EAAWL,GACxEK,EAAUl7f,EAAIk7f,EAAUl7f,EAAI66f,EAC5B,IAAK,IAAI1rgB,EAAI,EAAGA,EAAI+rgB,EAAUjlB,aAAaxmf,OAAQN,IAC/C6D,KAAKmogB,qCAAqCD,EAAUjlB,aAAa9mf,GAAI0rgB,IAQ7EvwG,EAAOj8Z,UAAU8sgB,qCAAuC,SAAU3O,EAAYqO,GAC1ErO,EAAWxsf,EAAIwsf,EAAWxsf,EAAI66f,EAC9B,IAAK,IAAI1rgB,EAAI,EAAGA,EAAIq9f,EAAWvW,aAAaxmf,OAAQN,IAC5Cq9f,EAAWvW,aAAa9mf,aAAc2mf,IACtC0W,EAAWvW,aAAa9mf,GAAG4Q,EAAIysf,EAAWvW,aAAa9mf,GAAG4Q,EAC1Dysf,EAAWvW,aAAa9mf,GAAG6Q,EAAIwsf,EAAWvW,aAAa9mf,GAAG6Q,EAAI66f,GAG9D7ngB,KAAK+ngB,iCAAiCvO,EAAWvW,aAAa9mf,GAAI0rgB,IAS9EvwG,EAAOj8Z,UAAUurgB,YAAc,SAAU5S,EAAO/hf,EAAOm2f,GAQnD,OANIpU,aAAiBlR,GACL9if,KAAKqogB,gBAAgBrU,EAAO/hf,GAG5BjS,KAAKsogB,YAAYtU,EAAO/hf,IAEvBqgf,oBAMrBh7F,EAAOj8Z,UAAUktgB,mBAAqB,SAAUj1Z,EAAM6pZ,GAClD,IACIA,EAAgB7iR,WAAc78O,EAAkB0/f,EAAgBvf,kBACb,WAAlDuf,EAAgBvf,gBAAgBj9c,eAAgF,UAAlDw8d,EAAgBvf,gBAAgBj9c,gBACxC,IAAvDw8d,EAAgBvf,gBAAgBgG,WAAWsC,OAgB3CiX,EAAgBnnf,MAAQs9F,EAAKt9F,MAC7Bmnf,EAAgBpwf,EAAIumG,EAAKvmG,EACzBowf,EAAgBnwf,EAAIsmG,EAAKtmG,MAlBiC,CAC1D,IAEIgJ,EAAQhW,KAAKo6e,OAAOouB,WAAWC,sBAAsBtL,EAAgBnf,iBACrExxe,EAAO8mG,EAAKvmG,EACsC,WAAlDowf,EAAgBvf,gBAAgBj9c,cAChCn0B,IAAS8mG,EAAKt9F,MAAQA,GAAS,EAG/BxJ,GAAQ8mG,EAAKt9F,MAAQA,EAEzBmnf,EAAgBnnf,MAAQA,EACxBmnf,EAAgBpwf,EAAIP,EACpB2wf,EAAgBnwf,EAAIsmG,EAAKtmG,EAO7B,OAAOmwf,GAMX7lG,EAAOj8Z,UAAUqtgB,cAAgB,SAAUvL,GACvC,IAAIrvc,OAAO3yD,EAKX,OAJA2yD,EAAO,IAAIqlc,GAAWgK,GACtBrvc,EAAK93C,MAAQmnf,EAAgBnnf,MAC7Bmnf,EAAgBla,aAAaz+e,KAAKspD,GAClCA,EAAK+0b,UAAYsa,EACVrvc,GAOXwpW,EAAOj8Z,UAAUgtgB,gBAAkB,SAAUxlB,EAAW1xO,GAGpD,GAFAnxQ,KAAKuogB,mBAAmBvogB,KAAKo6e,OAAO+rB,iBAAkBtjB,GACtD7if,KAAK2ogB,gBAAgB9lB,GACjBA,EAAUvoQ,UACVt6O,KAAK4ogB,sBAAsB/lB,GAAW,QAKtC,IAFA,IAAI/0b,EAAOqjN,EAAY0xO,EAAUI,aAAaxmf,OAC1Comf,EAAUI,aAAa9xO,QAAah2Q,EACjC2yD,aAAgBqlc,IAAY,CAC/B,GAAIrlc,EAAKuvc,eAAiB5/f,EAAkBuC,KAAKyrf,cACxChuf,EAAkBolf,EAAUjF,iBAAkB,CAE/C,IAAIhgQ,GAAmB+sQ,GAAcO,oBAAoBrI,EAAUjF,gBAAgBhgQ,iBACnF59O,KAAKo6e,OAAOyuB,kBAAkBjrR,GAItCilQ,GADA/0b,EAAO9tD,KAAK6/O,WAAW/xL,EAAM,IACZ+0b,UACjB/0b,EAAOA,EAAKswc,SAIpB,OADAp+f,KAAK8ogB,mBAAmB9ogB,KAAKo6e,OAAQyI,GAC9BA,GAEXvrF,EAAOj8Z,UAAU0tgB,kBAAoB,WACjC/ogB,KAAK6lgB,YAAc,EACnB7lgB,KAAK8lgB,gBAAkB,EACvB9lgB,KAAK4lgB,cAAgB,GAEzBtuG,EAAOj8Z,UAAU2tgB,wBAA0B,SAAUl7c,GAEjD,IADA,IAAIswc,EAAWtwc,EAAKswc,SACbA,aAAoBjL,IAAY,CACnC,GAAIiL,EAAShkf,SAAS3d,OAAS,EAAG,CAC9B,IAAIuE,EAAUo9f,EAAShkf,SAASiO,OAAO,EAAG,GAAG,GAC7CylC,EAAK1zC,SAAS5V,KAAKxD,GACnBA,EAAQ8sD,KAAOA,EACf,MAG+C,IAA3Cswc,EAASvb,UAAUI,aAAaxmf,OAChC2hgB,EAASvb,UAAUvwe,UAGnB8rf,EAAS9rf,UAEb8rf,EAAWtwc,EAAKswc,WAI5B9mG,EAAOj8Z,UAAUwkP,WAAa,SAAU/xL,EAAMhvC,GAC1C,IAAI+je,EAAY/0b,EAAK+0b,UACQ,IAAzB/0b,EAAK1zC,SAAS3d,QACduD,KAAKgpgB,wBAAwBl7c,GAEjC,IAAI9sD,EAAU8sD,EAAK1zC,SAAS0E,GAE5B,IADA9e,KAAK+ogB,oBACE/ngB,aAAmB28f,IACtB39f,KAAKmqR,cAAcnpR,EAAS6hf,GAC5B/0b,EAAO9sD,EAAQ8sD,KACf9sD,EAAUA,EAAQiogB,YAEtB,OAAOn7c,GAGXwpW,EAAOj8Z,UAAU8uR,cAAgB,SAAUnpR,EAAS6hf,GAChD,IAAI/0b,EAAO9sD,EAAQ8sD,KACfrhC,EAAO,GACPxa,EAAQjR,EAAQ4wf,aACpB,GAAI5wf,aAAmBsqf,GAcnB,OAb0B,IAAtBtqf,EAAQuqf,YAA4D,IAAzCvrf,KAAKo6e,OAAOxud,OAAOrtB,QAAQyC,IACtDhB,KAAKo6e,OAAOxud,OAAOpnB,KAAKxD,GAE5BhB,KAAKkpgB,sBAAsBlogB,QACvBA,EAAQ8sD,KAAKwvc,cAAgB7/f,EAAkBuD,EAAQ2wT,YAAc3xT,KAAK+lgB,aACtEtogB,EAAkBuD,EAAQ+8f,iBAC1B/9f,KAAK4ogB,sBAAsB/lB,GAAW,EAAO7hf,EAAQ8sD,MAEzD9tD,KAAKmpgB,eAAer7c,IAEfrwD,EAAkBuD,EAAQiogB,cAAgBjpgB,KAAKo6e,OAAO+rB,iBAAiBnwf,MAAQ,IAAMhV,EAAQ8sD,KAAKwvc,cACvGt9f,KAAKgpgB,wBAAwBl7c,IAIrC,GAAI9sD,aAAmB+zf,IAAsB/0f,KAAK+lgB,aAAe/kgB,aAAmB0zf,GAOhF,OANIj3f,EAAkBuD,EAAQiogB,cAAgBjpgB,KAAKo6e,OAAO+rB,iBAAiBnwf,MAAQ,IAAMhV,EAAQ8sD,KAAKwvc,cAClGt9f,KAAKgpgB,wBAAwBl7c,QAE7B9sD,EAAQ8sD,KAAKwvc,cAAgB7/f,EAAkBuD,EAAQiogB,cACvDjpgB,KAAKmpgB,eAAer7c,IAI5B,IAAI93C,EAAQhV,EAAQgV,MA+BpB,GA9BIhV,aAAmB49f,GAEN,MADbnye,EAAOzsB,KAAKo6e,OAAOgvB,eAAepogB,EAAQyqf,WAAYzqf,EAAQ6hf,UAAU8F,WAAW14V,OAE/EjvJ,EAAQyrB,KAAOA,EAGfA,EAAOzrB,EAAQyrB,KAGdzrB,aAAmBwzf,KACxBx0f,KAAKqpgB,qCAAqCrogB,EAAQyrB,KAAMzrB,GACxDyrB,EAAOzrB,EAAQyrB,MAGfzrB,aAAmBwzf,KACnBx+e,EAAQhW,KAAKo6e,OAAOouB,WAAWc,YAAYtogB,EAASA,EAAQg9e,iBACvC,OAAjBh9e,EAAQyrB,OACRzrB,EAAQgV,MAAQhW,KAAKupgB,YAAY1mB,EAAW7if,KAAKo6e,OAAQnoe,EAAO67C,EAAM9sD,KAG1EhB,KAAKo6e,kBAAkBC,IACpBr6e,KAAKo6e,OAAO+rB,iBAAiBpwf,OAAS/U,EAAQ+U,QAAU/V,KAAKo6e,OAAO+rB,iBAAiBn5f,IAAMhN,KAAKo6e,OAAOwtB,WAAW56f,IACrHhN,KAAKwpgB,eAAexpgB,KAAKo6e,OAAQtsb,GAC7B9sD,aAAmB49f,IACnB5+f,KAAKypgB,gBAAgBzogB,GAErBA,EAAQglO,iBACRhmO,KAAK0pgB,eAAe1ogB,EAAQglO,kBAGhChwN,EAAQhW,KAAKo6e,OAAO+rB,iBAAiBnwf,QAAUhW,KAAKo6e,OAAO/5c,SAE3DrgC,KAAK2pgB,iBAAiB9mB,EAAW7hf,GAC7BvD,EAAkBuD,EAAQiogB,cAAgBjpgB,KAAKo6e,OAAO+rB,iBAAiBnwf,MAAQ,IAAMhV,EAAQ8sD,KAAKwvc,aAClGt9f,KAAKgpgB,wBAAwBl7c,IAEvB9sD,EAAQ8sD,KAAKwvc,cAAgB7/f,EAAkBuD,EAAQiogB,cAAuD,IAAvCjpgB,KAAKo6e,OAAO+rB,iBAAiBnwf,OAC1GhW,KAAKmpgB,eAAer7c,QAGvB,GAAI9sD,aAAmBwzf,GACxB,GAAqB,OAAjBxzf,EAAQyrB,KAAe,CACvB,IAAIm9e,EAAc5ogB,EAAQ8sD,KAC1B9tD,KAAK6pgB,sBAAsBD,EAAaA,EAAYxvf,SAAS7b,QAAQyC,IACrEhB,KAAKmpgB,eAAeS,GAEpB5ogB,EAAQgV,MAAQhW,KAAKupgB,YAAY1mB,EAAW7if,KAAKo6e,OAAQnoe,EAAO67C,EAAM9sD,GACtEhB,KAAK2pgB,iBAAiB9mB,EAAW7hf,QAIjC,GACI8sD,EAAO9sD,EAAQ8sD,KACf9tD,KAAK8pgB,uBAAuBh8c,EAAM9sD,EAASA,EAAQyrB,KAAMzrB,EAAQgV,MAAOhV,EAAQg9e,iBAChFh+e,KAAK+pgB,8BAA8Bj8c,EAAM9sD,GACrCA,aAAmB49f,IACnB5+f,KAAKypgB,gBAAgBzogB,SAEpBA,EAAQ8sD,OAASA,GAAQ9tD,KAAK0pgB,eAAe1ogB,SAI1D,GACI8sD,EAAO9sD,EAAQ8sD,KACf9tD,KAAKgqgB,0BAA0BnnB,EAAW7hf,GAC1ChB,KAAK+pgB,8BAA8Bj8c,EAAM9sD,GACrCA,aAAmB49f,IACnB5+f,KAAKypgB,gBAAgBzogB,SAEpBA,EAAQ8sD,OAASA,GAAQ9tD,KAAK0pgB,eAAe1ogB,IAE1D,GAAa,OAATyrB,EAAe,CACf,IAAIk/L,EAAe79J,EAAK1zC,SAAS7b,QAAQyC,GACrC2qN,GAAgB,GAChB3rN,KAAK6pgB,sBAAsB/7c,EAAM69J,IAGrC3qN,EAAQ8sD,KAAKwvc,cAAgB7/f,EAAkBuD,EAAQiogB,cAAyB,OAATx8e,KACvEzsB,KAAKmpgB,eAAenogB,EAAQ8sD,MACf,OAATrhC,GAAiBhvB,EAAkBuD,EAAQ2wT,WAC3C3xT,KAAK4ogB,sBAAsB/lB,GAAW,EAAM/0b,GAAM,KAI9DwpW,EAAOj8Z,UAAUougB,gBAAkB,SAAUzogB,GAEzC,IAAIyrB,EAAOzsB,KAAKo6e,OAAOgvB,eAAepogB,EAAQyqf,WAAYzqf,EAAQ6hf,UAAU8F,WAAW14V,MAC1E,KAATxjI,IACAzrB,EAAQyrB,KAAOA,EACfzsB,KAAKo6e,OAAOouB,WAAWc,YAAYtogB,EAASA,EAAQg9e,mBAG5D1mF,EAAOj8Z,UAAU0ugB,8BAAgC,SAAUj8c,EAAM9sD,IACzD8sD,IAAS9sD,EAAQ8sD,MAAQ9sD,EAAQ8sD,OAASA,GAAQrwD,EAAkBuD,EAAQiogB,eACxEjogB,EAAQ8sD,KAAKwvc,eACjBt9f,KAAKmpgB,eAAer7c,GAEpB9sD,EAAQ8sD,OAASA,GAAQ9tD,KAAKo6e,kBAAkBC,IAC7Cr6e,KAAKo6e,OAAO+rB,iBAAiBpwf,OAAS/U,EAAQ+U,QACjD/V,KAAKo6e,OAAO+rB,iBAAiBn5f,IAAMhN,KAAKo6e,OAAOwtB,WAAW56f,EAC1DhN,KAAKwpgB,eAAexpgB,KAAKo6e,OAAQp5e,EAAQ8sD,MAEpC9sD,EAAQ8sD,OAASA,GAAQrwD,EAAkBuD,EAAQiogB,cACrDn7c,EAAK+0b,UAAU/6W,YAAch6E,IAASA,EAAKwvc,cAAgBt9f,KAAKo6e,OAAO+rB,iBAAiBpwf,QAAU,GACrG/V,KAAKiqgB,8BAA8Bn8c,IAG3CwpW,EAAOj8Z,UAAUgugB,qCAAuC,SAAU58e,EAAMzrB,GACpE,IACIiR,EAAQ04e,GAAcE,WAAWp+d,GADzB,KAAM,OAElB,GAAIxa,GAAS,EAAG,CACZ,IAAIi4f,EAAYz9e,EAAKxa,IACF,OAAdi4f,GAA+B,OAATz9e,GAAiC,OAAdy9e,GAA+B,OAATz9e,IAChEzsB,KAAKmqgB,sBAAsBnqgB,KAAKo6e,OAAQp5e,EAASiR,EAAOi4f,KAOpE5yG,EAAOj8Z,UAAU4ugB,8BAAgC,SAAUn8c,GACvD,IAAIswc,EAAWtwc,EAAKswc,SAChBA,IAA+D,IAAnDtwc,EAAK+0b,UAAUI,aAAa1kf,QAAQ6/f,KAChDA,EAASvb,UAAUI,aAAa56d,OAAO+1e,EAASxM,aAAc,GAC9D9jc,EAAK+0b,UAAUI,aAAaz+e,KAAK45f,GACjCA,EAASvb,UAAY/0b,EAAK+0b,YAGlCvrF,EAAOj8Z,UAAUqugB,eAAiB,SAAUn1f,GACxCvU,KAAK+ogB,oBAGL,IAAK,IAFDj7c,EAAOv5C,EAAeu5C,KACtB93C,EAAQ,EACH7Z,EAAI,EAAGA,EAAI2xD,EAAK1zC,SAAS3d,OAAQN,IAAK,CAC3C,IAAI6E,EAAU8sD,EAAK1zC,SAASje,GAE5B,GADA6Z,GAAShV,EAAQgV,MACbzB,IAAmBvT,EACnB,MAGR,IAAIopgB,EAAqBpqgB,KAAKo6e,OAAO+rB,iBAAiBnwf,MAAQA,EAAQ,EAetE,OAdKo0f,EAWI71f,EAAeyxN,iBACpBhmO,KAAK0pgB,eAAen1f,EAAeyxN,kBAXnChmO,KAAKo6e,OAAOiwB,YAAYrqgB,KAAKo6e,OAAO+rB,iBAAiBp5f,EAAIiJ,GACW,YAAhEzB,EAAeu5C,KAAK+0b,UAAUjF,gBAAgBj9c,eAC9CpsB,aAA0Bigf,IAC1Bx0f,KAAKsqgB,2BAA2B/1f,GAEhC9W,EAAkB8W,EAAe00f,cAAgBjpgB,KAAKo6e,OAAO+rB,iBAAiBnwf,MAAQ,IAClFzB,EAAeu5C,KAAKwvc,cACxBt9f,KAAKgpgB,wBAAwBl7c,IAM9Bs8c,GAEX9yG,EAAOj8Z,UAAU6tgB,sBAAwB,SAAUlogB,GAC/C,GAA0B,IAAtBA,EAAQuqf,UACHvrf,KAAK+lgB,aAAiBtogB,EAAkBuD,EAAQwqf,YAAaxqf,EAAQu9f,cACtEv+f,KAAKo6e,OAAOmwB,YAAY/lgB,KAAKxD,GAC7BhB,KAAK+lgB,aAAc,EACnB/kgB,EAAQu9f,aAAc,QAGzB,GAAIv+f,KAAKo6e,OAAOmwB,YAAY9tgB,OAAS,EACtC,GAA0B,IAAtBuE,EAAQuqf,UAAiB,EACrBx/d,EAAQ/rB,KAAKo6e,OAAOmwB,YAAYvqgB,KAAKo6e,OAAOmwB,YAAY9tgB,OAAS,IAC3DshgB,iBAAmB/8f,GAAavD,EAAkBsuB,EAAMy/d,YAAaz/d,EAAMwye,cACjFv+f,KAAK+lgB,aAAc,OAGtB,CACD,IAAIh6e,EACA/qB,KADA+qB,EAAQ/rB,KAAKo6e,OAAOmwB,YAAYvqgB,KAAKo6e,OAAOmwB,YAAY9tgB,OAAS,IAC/C+uf,WAClBxrf,KAAKo6e,OAAOmwB,YAAYn+W,MACxBpsJ,KAAK+lgB,aAAc,KASnCzuG,EAAOj8Z,UAAUutgB,sBAAwB,SAAU/lB,EAAW2nB,EAAa18c,EAAM28c,GAC7EA,GAAehtgB,EAAkBgtgB,IAAwBA,EAEzD,IAGIpM,EAHAqM,EAAoB1qgB,KAAKo6e,OAAOouB,WAAWmC,qBAAqB9nB,EAAU7E,iBAC1Ezqb,EAAYm3c,EAAkBp7B,OAC9B6Z,EAAgBnpf,KAAK4qgB,iBAAiB/nB,GAGtCwb,EADAxb,EAAUI,aAAaxmf,OAAS,IAAMgugB,EACzB5nB,EAAUI,aAAa,GAGvBunB,EAAcxqgB,KAAK0ogB,cAAc7lB,GAAa/0b,EAG3D9tD,KAAKo6e,kBAAkBC,IACpBr6e,KAAKo6e,OAAO+rB,iBAAiBpwf,OAASoze,EAAgB51b,GACtDvzD,KAAKo6e,OAAO+rB,iBAAiBn5f,IAAMhN,KAAKo6e,OAAOwtB,WAAW56f,GAC7DhN,KAAKwpgB,eAAexpgB,KAAKo6e,OAAQikB,GAGrC,IAAI/9Q,EAActgP,KAAK6qgB,eAAehoB,EAAWtvb,GACpBm3c,EAAkBI,gBAE1C9od,MAAMhiD,KAAK4lgB,gBACTryc,EAAYvzD,KAAK4lgB,gBACpBryc,EAAYvzD,KAAK4lgB,cACQ5lgB,KAAK8lgB,iBAElC,IAAI36Q,EAAY,EACZE,EAAe,EACfH,EAAa,EACbn1O,EAASw9C,EACT81b,EAAkBxG,EAAUjF,gBAAgByL,gBACxB,aAApBA,EACI/oQ,EAAc/sL,EACd83L,GAAgB/K,EAAc/sL,EAG9B43L,GAAa7K,EAAc/sL,EAGN,YAApB81b,EACLl+P,GAAa7K,GAAe6K,EAAYp1O,EAASs1O,GAE5C/K,EAAc6K,EAAYp1O,EAASs1O,IACxCF,GAAa7K,GAAe6K,EAAYp1O,EAASs1O,IAErDF,GAAag+P,EACb99P,GAAgBs/P,GAAcO,oBAAoBrI,EAAUjF,gBAAgBwL,cAC5E,IAAK,IAAIjtf,EAAI,EAAGA,EAAIkigB,EAAWjkf,SAAS3d,OAAQN,IAAK,CACjD,IAAI6E,EAAUq9f,EAAWjkf,SAASje,GAClC,GAAI6E,aAAmB+zf,GAAoB,CACvC,IAAIp0d,EAAgBkid,EAAUjF,gBAAgBj9c,cACxB,UAAlBA,EACAuqN,EAAalrP,KAAKo6e,OAAOwtB,WAAW5xf,MAAQhV,EAAQgV,MAE7B,WAAlB2qB,IACLuqN,GAAclrP,KAAKo6e,OAAOwtB,WAAW5xf,MAAQhV,EAAQgV,OAAS,GAElEhV,EAAQy7B,OAAS,IAAIqgS,GAAO5xE,EAAYC,EAAW,EAAGE,GACtDrqP,EAAQ8sD,KAAOuwc,EACfA,EAAWtof,OAASo1O,EAAYp1O,EAASs1O,GAGjDgzQ,EAAWtof,OAASo1O,EAAYp1O,EAASs1O,EACzCrrP,KAAKo6e,OAAO2wB,WAAW/qgB,KAAKo6e,OAAO+rB,iBAAiBn5f,EAAIqxf,EAAWtof,SAMvEuhZ,EAAOj8Z,UAAUstgB,gBAAkB,SAAU9lB,GACpC7if,KAAK+lgB,eACDtogB,EAAkBolf,EAAUjF,mBACzBngf,EAAkBolf,EAAUjF,gBAAgBgG,cAC5Cnmf,EAAkBuC,KAAKo6e,OAAO4wB,YAAYnoB,EAAUjF,gBAAgBgG,WAAWsC,UACnFrD,EAAUjF,gBAAgBgG,WAAWmD,iBAAmB,GACrDlE,EAAUjF,gBAAgBgG,WAAWmD,gBAAkB,GAC1D/mf,KAAKirgB,oBAAoBpoB,GACzB7if,KAAKkrgB,WAAWroB,EAAW7if,KAAKo6e,SAE3ByI,EAAUjF,gBAAgBgG,aAA+D,IAAjDf,EAAUjF,gBAAgBgG,WAAWsC,QAClFlmf,KAAKirgB,oBAAoBpoB,KAQrCvrF,EAAOj8Z,UAAU6vgB,WAAa,SAAUroB,EAAWzI,GAC/C,IAAIv3Y,EAAOu3Y,EAAO4wB,YAAYnoB,EAAUjF,gBAAgBgG,WAAWsC,QACnE9L,EAAOyuB,mBAAmBle,GAAcO,oBAAoBrI,EAAUjF,gBAAgBhgQ,kBACtF,IAAIutR,EAAmBnrgB,KAAKumf,aAAa1jZ,EAAMggZ,EAAUjF,gBAAgBgG,WAAWmD,iBAIhFsX,EAAaxb,EAAUI,aAAa,GACpCxlf,EAAkB4ggB,KAClBA,EAAa,IAAIlL,GAAWtQ,GAC5BA,EAAUI,aAAaz+e,KAAK65f,IAEhC,IAAIr9f,EAAU,IAAI+zf,GAAmBoW,GAAkB,GACvDnqgB,EAAQ8sD,KAAOuwc,EAC2B,WAAtC8M,EAAiB7G,iBACjBtjgB,EAAQyrB,KAAO0+e,EAAiBnG,aAGhChkgB,EAAQyrB,KAAOzsB,KAAKorgB,cAAcvoB,EAAUjF,gBAAgBgG,YAEhExJ,EAAOouB,WAAW6C,eAAerqgB,EAAS6hf,GAC1C,IAAI2mB,EAQJ,GAPIxpgB,KAAKo6e,kBAAkBC,IACpBr6e,KAAKo6e,OAAO+rB,iBAAiBpwf,OAAS/U,EAAQ+U,QAAU/V,KAAKo6e,OAAO+rB,iBAAiBn5f,IAAMhN,KAAKo6e,OAAOwtB,WAAW56f,IACrHw8f,GAAiB,GAErBpvB,EAAOiwB,YAAYjwB,EAAO+rB,iBAAiBp5f,EAAI/L,EAAQgV,OAEvDqof,EAAWjkf,SAASiO,OAAO,EAAG,EAAGrnB,GACQ,SAArCmqgB,EAAiBpG,gBAA4B,CAE7C,GADA/jgB,EAAU,IAAI+zf,GAAmBoW,GAAkB,GACV,QAArCA,EAAiBpG,gBAA2B,CAC5C/jgB,EAAQyrB,KAAO,KACf,IAAIxa,EAAQosf,EAAWjkf,SAAS7b,QAAQyC,GACxCA,EAAQgV,MAAQhW,KAAKupgB,YAAY1mB,EAAWzI,EAAQnoe,EAAOosf,OAAYljgB,QAGvE6F,EAAQyrB,KAAO,IACf2td,EAAOouB,WAAW6C,eAAerqgB,EAAS6hf,GAE9CzI,EAAOiwB,YAAYjwB,EAAO+rB,iBAAiBp5f,EAAI/L,EAAQgV,OAEvDqof,EAAWjkf,SAASiO,OAAO,EAAG,EAAGrnB,GACjCA,EAAQ8sD,KAAOuwc,EAEnB,GAAImL,EAGA,OAFAxpgB,KAAKwpgB,eAAexpgB,KAAKo6e,OAAQikB,QACjCr+f,KAAK0pgB,eAAe1ogB,GAGiB,SAArCmqgB,EAAiBpG,iBACjB3qB,EAAOyuB,kBAAkBle,GAAcO,oBAAoBrI,EAAUjF,gBAAgBhgQ,mBAS7F05K,EAAOj8Z,UAAU6qgB,cAAgB,SAAU5yZ,EAAMq+Y,GAC7C,IAAIhJ,EAWJ,OATIA,EADAgJ,GAIa,IAAIjP,GAErBiG,EAAW3ye,MAAQs9F,EAAKt9F,MACxB2ye,EAAW57e,EAAIumG,EAAKvmG,EACpB47e,EAAW37e,EAAIsmG,EAAKtmG,EAEb27e,GAMXrxF,EAAOj8Z,UAAUiwgB,cAAgB,SAAUjlB,GACvC,IAAK,IAAIlqf,EAAIkqf,EAAajna,OAAO3iF,OAAQN,EAAI,EAAGA,IAAK,CACjD,IAAImsf,EAAY,IAAIuc,GAAWxe,GAC3Bp+d,EAAM9rB,EAAI,EACkC,WAA5Ckqf,EAAajna,OAAO,GAAGklb,kBACvBhc,EAAUgc,iBAAmB,SAC7Bhc,EAAU0c,aAAuB,IAAR/8e,EAAY,IAAmB,IAARA,EAAY,IAAW,IACvEqge,EAAUtK,gBAAgB/wd,YAAaq7d,EAAU0c,aAAwC,eAGzF1c,EAAUgc,iBAAmBtkgB,KAAKurgB,oBAAoBtjf,GACtDqge,EAAU0c,aAAe,KAAO7ogB,EAAI,GAAG+Q,WAAa,IACpDo7e,EAAUtC,QAAU,EACpBsC,EAAU2c,aAAe9ogB,GAE7Bmsf,EAAU1K,gBAAkB,IAAImF,QAAiB5nf,GACjDmtf,EAAU1K,gBAAgBqL,WAAa,IAAM9sf,EAAI,GACjDmsf,EAAU1K,gBAAgBhgQ,iBAAmB,GAC7CyoQ,EAAajna,OAAO56E,KAAK8jf,KAGjChxF,EAAOj8Z,UAAUwugB,sBAAwB,SAAUxL,EAAY1yS,EAAc6/S,GACzE,IAAI3oB,EAAYwb,EAAWxb,UACvB4oB,KACAt6P,EAAY0xO,EAAUI,aAAa1kf,QAAQ8/f,GAC1C5ggB,EAAkB+tgB,IACnBC,EAAgBjngB,KAAKgngB,GAIzB,IAAK,IAFDE,OAAgBvwgB,EAEXgB,EAAIwvN,EAAe,EAAGxvN,EAAIkigB,EAAWjkf,SAAS3d,OAAQN,IAC3DsvgB,EAAgBjngB,KAAK65f,EAAWjkf,SAASje,IAE7C,GAAIsvgB,EAAgBhvgB,OAAS,EAAG,CAExBivgB,EADAv6P,IAAc0xO,EAAUI,aAAaxmf,OAAS,EAC9B,IAAI02f,GAAWtQ,GAGfA,EAAUI,aAAa9xO,EAAY,GAEvD,IAAK,IAAI5tP,EAAI,EAAGA,EAAIkof,EAAgBhvgB,OAAQ8mB,IACxCkof,EAAgBlof,GAAGuqC,KAAO49c,EAE9BrN,EAAWjkf,SAASiO,OAAOsjM,EAAe,EAAG0yS,EAAWjkf,SAAS3d,OAAS,GAC1EivgB,EAActxf,SAAWqxf,EAAgBlxf,OAAOmxf,EAActxf,WACP,IAAnDyoe,EAAUI,aAAa1kf,QAAQmtgB,IAC/B7oB,EAAUI,aAAa56d,OAAO8oP,EAAY,EAAG,EAAGu6P,KAQ5Dp0G,EAAOj8Z,UAAUsugB,iBAAmB,SAAU9mB,EAAW7hf,GACrDhB,KAAKo6e,OAAOiwB,YAAYrqgB,KAAKo6e,OAAO+rB,iBAAiBp5f,EAAI/L,EAAQgV,OACjB,YAA5C6se,EAAUjF,gBAAgBj9c,eAA+B3/B,aAAmBwzf,IAC5Ex0f,KAAKsqgB,2BAA2BtpgB,IAOxCs2Z,EAAOj8Z,UAAU2ugB,0BAA4B,SAAUnnB,EAAW7hf,GACnDA,EAAQ8sD,KACnB,GAAI9sD,EAAQ8sD,KAAK1zC,SAAS3d,OAAS,EAAG,CAClC,IAAIupO,EAAkBhlO,EAAQglO,gBAC1B/zN,EAAQjR,EAAQ4wf,aAGhB5wf,EAAQ8sD,KAAK1zC,SAAS3d,OAAS,GAC3BupO,GAAmBhmO,KAAKo6e,OAAO+rB,iBAAiBp5f,IAAM/M,KAAKo6e,OAAOwtB,WAAW76f,IAC7EkF,GAAS,GAGjBjS,KAAK6pgB,sBAAsB7ogB,EAAQ8sD,KAAM77C,KAWjDqlZ,EAAOj8Z,UAAUswgB,YAAc,SAAUtN,EAAYxb,EAAW6a,EAAYjxe,EAAMzW,EAAOgoe,GACrF,IAAI/re,EAAQjS,KAAK4rgB,oBAAoB5rgB,KAAKo6e,OAAO+rB,iBAAiBnwf,MAAOyW,EAAMzW,EAAOgoe,GACtF,GAAI/re,EAAQ,GAAKA,EAAQyrf,EAAWjhgB,OAAQ,CACxC,IAAI8B,EAAU8/f,EAAWjkf,SAAS7b,QAAQm/f,GAEtC8N,GADY3oB,EAAUI,aAAa1kf,QAAQ8/f,GACtB,IAAI7J,IAG7B,GAFA/ne,EAAOA,EAAKvI,UAAUjS,GACtBu5f,EAAmB/+e,KAAOA,EACV,MAAZA,EAAK,GAAY,CAGjBxa,GAFiBwa,EAAKhwB,QACtBgwB,EAAOk+d,GAAcgB,UAAUl/d,IACJhwB,OAE/B+ugB,EAAmBxtB,gBAAgBwH,WAAWkY,EAAW1f,iBACzDwtB,EAAmBx1f,MAAQhW,KAAKo6e,OAAOouB,WAAWjmQ,SAASipQ,EAAmB/+e,KAAMuxd,GACpF0f,EAAWjxe,KAAOixe,EAAWjxe,KAAKuK,OAAO,EAAG/kB,GAC5Cyrf,EAAW1nf,OAASw1f,EAAmBx1f,MACvCw1f,EAAmBz1f,OAAS2nf,EAAW3nf,OACvCy1f,EAAmB7M,eAAiBjB,EAAWiB,eAC/C3+f,KAAK6pgB,sBAAsBxL,EAAY9/f,EAASitgB,GAChDxrgB,KAAK2pgB,iBAAiB9mB,EAAW6a,GACR,IAArBA,EAAW1nf,OACXqof,EAAWjkf,SAASiO,OAAO9pB,EAAS,KAYhD+4Z,EAAOj8Z,UAAUwwgB,iBAAmB,SAAUxN,EAAY/ne,EAAa7J,EAAMzW,EAAOgoe,GAChF,IAAI6E,EAAYwb,EAAWxb,UAEvB5we,EAAQjS,KAAK8rgB,6BAA6B9rgB,KAAKo6e,OAAOwtB,WAAW5xf,MAAOhW,KAAKo6e,OAAO+rB,iBAAiBnwf,MAAOyW,EAAMzW,EAAOgoe,GACzH+tB,EAAa,EACb95f,EAAQqkB,EAAY75B,SACpBsvgB,EAAa/rgB,KAAKo6e,OAAOouB,WAAWwD,+BAA+Bv/e,EAAKvI,UAAU,EAAGjS,GAAQ+re,GAC7Fvxd,EAAOA,EAAKvI,UAAUjS,IAEtB85f,EAAa/rgB,KAAKo6e,OAAO+rB,iBAAiBnwf,OAASsgB,EAAYw3B,KAAK1zC,SAAS7b,QAAQ+3B,GAAe,GACpGt2B,KAAK6pgB,sBAAsBxL,EAAY/ne,EAAYw3B,KAAK1zC,SAAS7b,QAAQ+3B,GAAe,GAE5F,IAAI/3B,EAAU8/f,EAAWjkf,SAAS7b,QAAQ+3B,GAC1C,GAAIrkB,EAAQqkB,EAAY75B,OAAQ,CACZomf,EAAUI,aAAa1kf,QAAQ8/f,GAA/C,IACI4N,EAAkB,IAAIzX,GAC1ByX,EAAgBx/e,KAAOA,EACvB6J,EAAY7J,KAAO6J,EAAY7J,KAAKuK,OAAO,EAAG/kB,GAC9Cg6f,EAAgBjuB,gBAAgBwH,WAAWlvd,EAAY0nd,iBACvDiuB,EAAgBj2f,MAAQhW,KAAKo6e,OAAOouB,WAAWjmQ,SAAS0pQ,EAAgBx/e,KAAMuxd,GAC9E1nd,EAAYtgB,OAASi2f,EAAgBj2f,MACrCi2f,EAAgBl2f,OAASugB,EAAYvgB,OACrCk2f,EAAgBtN,eAAiBroe,EAAYqoe,eAC7CN,EAAWjkf,SAASiO,OAAOiO,EAAYs7d,aAAe,EAAG,EAAGqa,GAC5DjsgB,KAAK6pgB,sBAAsBxL,EAAY9/f,GACvCyB,KAAK2pgB,iBAAiB9mB,EAAWvsd,GACP,IAAtBA,EAAYtgB,OACZqof,EAAWjkf,SAASiO,OAAO9pB,EAAS,QAKxCyB,KAAK6pgB,sBAAsBxL,EAAY9/f,GACvCyB,KAAK2pgB,iBAAiB9mB,EAAWvsd,IAOzCghY,EAAOj8Z,UAAUivgB,2BAA6B,SAAUh0e,GACpD,IAGI0F,EAHAqie,EAAa/ne,EAAYw3B,KACzBvvD,EAAU8/f,EAAWjkf,SAAS7b,QAAQ+3B,GACtC7J,EAAO6J,EAAY7J,KAGvB,GADsBA,EAAKvc,OAAO3R,QAAQ,MACnB,EAAG,CACtB8/f,EAAWjkf,SAASiO,OAAO9pB,EAAS,IACpCy9B,EAAS1F,EAAY0nd,iBACCnxd,SAEtB,IAFA,IACI5a,EAAQqkB,EAAY75B,OAASkuf,GAAcgB,UAAUl/d,GAAMhwB,OACxDwV,EAAQqkB,EAAY75B,QAET,KADdwV,EAAQjS,KAAKksgB,uBAAuBz/e,EAAMxa,KACvBA,IAAUqkB,EAAY75B,QAGzC,GAAIwV,EAAQqkB,EAAY75B,OAAQ,CAC5B,IAAIwvgB,EAAkB,IAAIzX,GACtB2X,EAAe1/e,EAAKvI,UAAU,EAAGjS,GAER,OAD7Bwa,EAAOA,EAAKvI,UAAUjS,IACbiS,UAAU,EAAG,KAElBjS,GAASwa,EAAKhwB,OAASkuf,GAAcgB,UAAUl/d,GAAMhwB,QAEzDwvgB,EAAgBx/e,KAAO0/e,EACvBF,EAAgBjuB,gBAAgBwH,WAAWlvd,EAAY0nd,iBACvDiuB,EAAgBn+c,KAAOuwc,EACvB4N,EAAgBj2f,MAAQhW,KAAKo6e,OAAOouB,WAAWjmQ,SAAS0pQ,EAAgBx/e,KAAMuP,GAC9Eiwe,EAAgBl2f,OAASugB,EAAYvgB,OACrCk2f,EAAgBtN,eAAiBroe,EAAYqoe,eAC7CN,EAAWjkf,SAASiO,OAAO9pB,EAAS,EAAG0tgB,GACvC31e,EAAY7J,KAAOA,EACnB6J,EAAYtgB,OAASi2f,EAAgBj2f,MACX,IAAtBsgB,EAAYtgB,OACZqof,EAAWjkf,SAASiO,OAAOg2e,EAAWjkf,SAAS7b,QAAQ+3B,GAAc,GAEzErkB,EAAQ,EACR1T,IAGR+3B,EAAY7J,KAAOA,EACnB4xe,EAAWjkf,SAASiO,OAAO9pB,EAAS,EAAG+3B,KAW/CghY,EAAOj8Z,UAAUyugB,uBAAyB,SAAUzL,EAAYr9f,EAASyrB,EAAMzW,EAAOgoe,GAClF,IAAI6E,EAAYwb,EAAWxb,UACvBupB,GAAgB,EAChBn6f,GAAS,EACb,GAA+B,MAAzBwa,EAAKvI,UAAU,EAAG,GAAa,CACjC,IAAImof,EAAYr2f,EACZs2f,EAAkB,EAOtB,GANAA,EAAkB3hB,GAAciB,QAAQn/d,GAAMluB,QAAQ,KAAO,GAC7D0T,EAAQq6f,GAEI,IACRD,EAAYrsgB,KAAKo6e,OAAOouB,WAAWwD,+BAA+Bv/e,EAAKprB,MAAM,EAAG4Q,GAAQ+re,IAExFh+e,KAAKo6e,OAAO+rB,iBAAiBnwf,MAAQq2f,IAErCD,EAAgBpsgB,KAAKusgB,qBAAqBlO,EAAYA,EAAWjkf,SAAS7b,QAAQyC,GAAUg9e,IAIxF,YAKR/re,EAAQ,EAER+D,GAAShW,KAAKo6e,OAAO+rB,iBAAiBnwf,MAEtChW,KAAK2pgB,iBAAiB9mB,EAAW7hf,GAE5BorgB,IAAkBn6f,EAAQ,IAA4B,IAAvBwa,EAAKluB,QAAQ,MACjDyB,KAAK2rgB,YAAYtN,EAAYxb,EAAW7hf,EAASyrB,EAAMzW,EAAOgoe,GAG9Dh+e,KAAK6rgB,iBAAiBxN,EAAYr9f,EAASyrB,EAAMzW,EAAOgoe,IAWhE1mF,EAAOj8Z,UAAU8ugB,sBAAwB,SAAU/vB,EAAQz3a,EAAM1wD,EAAOu6f,GAEpE,IAAIC,EAAc9pc,EAAK7U,KAAK1zC,SAAS7b,QAAQokE,GACzC3lE,EAAQ2lE,EAAKl2C,KACbg/P,EAAYzuR,EAAMknB,UAAUjS,GAC5By6f,EAAsB,OAAZF,EAAmB,IAAI1N,GAAkB,IAAItK,GAI3D,GAHAkY,EAAQ5+c,KAAO6U,EAAK7U,KACpB4+c,EAAQ1uB,gBAAgBwH,WAAW7ib,EAAKq7a,iBACxCr7a,EAAK7U,KAAK1zC,SAASiO,OAAOokf,EAAc,EAAG,EAAGC,GAC1Cz6f,EAAQ,GAA0B,IAArBw5Q,EAAUhvR,OACvBiwgB,EAAQjgf,KAAOzvB,EAAMknB,UAAUjS,GAC/B0wD,EAAKl2C,KAAOzvB,EAAMknB,UAAU,EAAGjS,QAE9B,GAAIA,EAAQ,EAAG,CAChBy6f,EAAQjgf,KAAO+/e,EACf,IAAIv7d,EAAU,IAAIujd,GAClBvjd,EAAQ6c,KAAO6U,EAAK7U,KACpB7c,EAAQxkB,KAAOzvB,EAAMknB,UAAUjS,EAAQ,GACvCg/B,EAAQ+sc,gBAAgBwH,WAAW7ib,EAAKq7a,iBACxCr7a,EAAK7U,KAAK1zC,SAASiO,OAAOokf,EAAc,EAAG,EAAGx7d,GAC9C0xB,EAAKl2C,KAAOzvB,EAAMknB,UAAU,EAAGjS,OAEZ,KAAdw5Q,IACLihP,EAAQjgf,KAAOzvB,EAAMknB,UAAUjS,EAAQ,GACvC0wD,EAAKl2C,KAAO+/e,IAMpBl1G,EAAOj8Z,UAAU8tgB,eAAiB,SAAUr7c,GACxC,IAAI+0b,EAAY/0b,EAAK+0b,UACjB8pB,EAAa9pB,EAAUjF,gBACvBgvB,EAAmB9+c,EAAKuvc,cACxBwP,EAAiB/+c,EAAKwvc,aACtBvnf,EAAS,EACT+2f,EAAa,EACb1jB,EAAe,EACfD,EAAgB,EAChB7oQ,EAAc,EACd1C,EAAkB,EAatB,GAZA59O,KAAK+sgB,iBAAiBj/c,GACtB/3C,EAAS/V,KAAK4lgB,cACdkH,EAAa/2f,EAAS/V,KAAK8lgB,gBAEvB8G,IACAzjB,EAAgBnpf,KAAK4qgB,iBAAiB/nB,GACtCjlQ,EAAkB+sQ,GAAcO,oBAAoByhB,EAAW/uR,kBAG/DivR,IACAzjB,EAAeuB,GAAcO,oBAAoByhB,EAAWvjB,eAE5Dpnc,MAAMhiD,KAAK4lgB,eAAgB,CAE3B,IAAIoH,EAAchtgB,KAAKo6e,OAAOouB,WAAWh8e,YAAY,IAAKq2d,EAAU7E,iBAEpE8uB,GADA/2f,EAASi3f,EAAY19B,QACC09B,EAAYlC,oBAIlCgC,GADA/2f,EAAS/V,KAAK4lgB,eACQ5lgB,KAAK8lgB,gBAG/BxlR,EAActgP,KAAK6qgB,eAAehoB,EAAW9se,GACV,YAA/B42f,EAAWtjB,iBACR/oQ,EAAcwsR,EAAa9sgB,KAAK6lgB,cACnCvlR,EAAcwsR,EAAa9sgB,KAAK6lgB,aAEpC,IAAI7gO,EAAW,EACXioO,EAAkB,EAClBtse,EAAgBgse,EAAWhse,cAE/B,GAAsB,SAAlBA,GAA4B3gC,KAAKo6e,OAAO/5c,WAAgC,YAAlBM,IAA+Bkse,GAAiB,CAEtG,IAAIK,EAAmBltgB,KAAKmtgB,YAAYr/c,EAAwB,YAAlBntB,EAA6Bsse,EAAiBrvR,GAC5FonD,EAAWkoO,EAAiBloO,SAC5BioO,EAAkBC,EAAiBE,WAIvC,IAAK,IAFDC,GAAc,EACdhkB,EAAkBsjB,EAAWtjB,gBACxBltf,EAAI,EAAGA,EAAI2xD,EAAK1zC,SAAS3d,OAAQN,IAAK,CAC3C,IAAIgvP,EAAY,EACZE,EAAe,EACfH,EAAa,EACbwyQ,EAAa5vc,EAAK1zC,SAASje,GAE3BmxgB,EAAgBttgB,KAAKutgB,kBAAkB7P,EAAYvyQ,EAAWE,EAAcyhR,EAAYO,EAAaroO,EAAUrkQ,EAAesse,EAAiB9wgB,IAAM2xD,EAAK1zC,SAAS3d,OAAS,GAChL0uP,EAAYmiR,EAAcniR,UAC1BE,EAAeiiR,EAAcjiR,aAC7BgiR,EAAcC,EAAcD,YAC5BJ,EAAkBK,EAAcL,gBAER,aAApB5jB,EACI/oQ,EAAcvqO,EACds1O,GAAgB/K,EAAcvqO,EAG9Bo1O,GAAa7K,EAAcvqO,EAGN,YAApBsze,EACLl+P,GAAa7K,GAAe6K,EAAYuyQ,EAAW3nf,OAASs1O,GAEvD/K,EAAc6K,EAAYuyQ,EAAW3nf,OAASs1O,IACnDF,GAAa7K,GAAe6K,EAAYuyQ,EAAW3nf,OAASs1O,IAEhEF,GAAag+P,EACb99P,GAAgB+9P,GACL,IAANjtf,KAAauhgB,aAAsBpS,KACnCoS,EAAWQ,wBAAwB5S,IAAyD,IAAtCoS,EAAWQ,aAAa3S,WACxEmS,EAAWQ,aAAazS,YAA4E,IAA9D39b,EAAK1zC,SAAS7b,QAAQm/f,EAAWQ,aAAazS,eAC3F39b,EAAK/3C,OAASo1O,EAAYuyQ,EAAW3nf,OAASs1O,EACxB,UAAlB1qN,EAEAuqN,EAAa85C,EAEU,WAAlBrkQ,IAELuqN,EAAa85C,EAAW,IAGhC04N,EAAWjhe,OAAS,IAAIqgS,GAAO5xE,EAAYC,EAAW,EAAGE,GACzDqyQ,EAAW5vc,KAAOA,EAEtB9tD,KAAKo6e,OAAO2wB,WAAW/qgB,KAAKo6e,OAAO+rB,iBAAiBn5f,EAAI8gD,EAAK/3C,SAEjEuhZ,EAAOj8Z,UAAU0xgB,iBAAmB,SAAUj/c,GAC1C,IAAK,IAAI3xD,EAAI,EAAGA,EAAI2xD,EAAK1zC,SAAS3d,OAAQN,IAAK,CAC3C,IAAI6E,EAAU8sD,EAAK1zC,SAASje,GACxB6E,aAAmBwzf,IAAkBxzf,aAAmB+zf,IACpD/0f,KAAK4lgB,cAAgB5kgB,EAAQ+U,SAC7B/V,KAAK4lgB,cAAgB5kgB,EAAQ+U,OAC7B/V,KAAK8lgB,gBAAkB9kgB,EAAQ29f,gBAE/B3+f,KAAK6lgB,YAAc7lgB,KAAK8lgB,kBACxB9lgB,KAAK6lgB,YAAc7lgB,KAAK8lgB,kBAGvB9lgB,KAAK6lgB,YAAc7kgB,EAAQ+U,SAChC/V,KAAK6lgB,YAAc7kgB,EAAQ+U,UAOvCuhZ,EAAOj8Z,UAAUmugB,eAAiB,SAAUpvB,EAAQtsb,GAChD,IAAIqvc,EAAkBrvc,EAAK+0b,UACvB5we,EAAQ,EACPxU,EAAkBqwD,KACnB77C,EAAQkrf,EAAgBla,aAAa1kf,QAAQuvD,IACjC,IACRqvc,EAAgBpnf,OAASqke,EAAO+rB,iBAAiBn5f,EAAImwf,EAAgBnwf,GAG7E,IAAIwggB,EAAWxtgB,KAAKytgB,qBAAqBtQ,GAGzC,GAFAn9f,KAAKo6e,OAAOszB,iBAAiBF,EAAS7qB,cAAe6qB,EAASv9W,MAC9DjwJ,KAAKo6e,OAAOusB,yBAAyBxJ,GAAiB,GAClDlrf,EAAQ,EAAG,CACX,IAAI07f,OAAgB,EAEhBA,EADAH,EAAS5wf,sBAAsBkme,IAAmB0qB,EAAS5wf,WAAWi8B,OAAOskd,GAC7DqQ,EAAS5wf,WAGT,IAAIkme,IAExB6qB,EAAgB3tgB,KAAKuogB,mBAAmBvogB,KAAKo6e,OAAO+rB,iBAAkBwH,IACxD17f,MAAQkrf,EAAgBlrf,MAEtC,IAAK,IADD27f,EAAc,EACTzxgB,EAAI8V,EAAO9V,EAAIghgB,EAAgBla,aAAaxmf,OAAQN,IAAK,CAC9D,IAAIkigB,EAAalB,EAAgBla,aAAa9mf,GAC9CkigB,EAAWxb,UAAY8qB,EACvBA,EAAc1qB,aAAa56d,OAAOulf,EAAa,EAAGvP,GAClDA,EAAWxb,UAAY8qB,EACvBC,IAEJD,EAAc/vB,gBAAkBuf,EAAgBvf,gBAChD+vB,EAAc3vB,gBAAkBmf,EAAgBnf,gBAChDmf,EAAgBla,aAAa56d,OAAOpW,GACpCkrf,EAAkBwQ,OAGlBxQ,EAAgBja,gBAAgB59e,YAAY63f,EAAgBvL,eAER,IAApD4b,EAASvqB,aAAa1kf,QAAQ4+f,IAC9BqQ,EAASvqB,aAAa56d,OAAO,EAAG,EAAG80e,GAEvCA,EAAgBja,gBAAkBsqB,EAClCxtgB,KAAKo6e,OAAOqtB,yBAAyBtK,EAAiBn9f,KAAKo6e,OAAO+rB,mBAetE7uG,EAAOj8Z,UAAUkygB,kBAAoB,SAAUvsgB,EAASmqP,EAAWE,EAAcyhR,EAAYO,EAAaroO,EAAUrkQ,EAAesse,EAAiBY,GAChJ,GAAI7sgB,aAAmBwzf,IAAkBxzf,aAAmB+zf,GAAoB,CAC5E,IAAIz+d,EAAct1B,aAAmBwzf,GAAiBxzf,OAAU7F,EAG5DwjgB,EAAiB39f,aAAmBwzf,GAAiBl+d,EAAYqoe,eAAiB39f,EAAQ29f,eAI9F,GAHAxzQ,GAAanrP,KAAK6lgB,YAAclH,EAChCtzQ,GAAgByhR,GAAc9rgB,EAAQ+U,OAAS4of,IAE1ClhgB,EAAkB64B,IAAkC,YAAlBqK,GAA+Bsse,EAAkB,EAAG,CAEvF,IAAIj3f,EAAQsgB,EAAYtgB,MACpByW,EAAO6J,EAAY7J,KAKvB,GAJK4gf,IAEDA,GADA5gf,EAAOk+d,GAAcgB,UAAUl/d,IACXhwB,OAAS,GAE7B4wgB,EAAa,CACb,IAAID,EAAa3gf,EAAKhwB,OAASkuf,GAAce,YAAYj/d,GAAMhwB,OAC3DoxgB,IACAT,GAAc3gf,EAAKhwB,OAASkuf,GAAciB,QAAQn/d,GAAMhwB,QAExDwwgB,EAAkBG,IAClBp3f,EAAQhW,KAAKo6e,OAAOouB,WAAWwD,+BAA+Bv/e,EAAM6J,EAAY0nd,iBAChFovB,EAAaH,GAEbG,EAAa,IACb92e,EAAYtgB,MAAQA,EAAQgvR,EAAWooO,EACvCH,GAAmBG,UAM/BC,GAAc,EAEdliR,GAAanrP,KAAK6lgB,YAAc7kgB,EAAQ+U,OACxCs1O,GAAgByhR,EAEpB,OAAS3hR,UAAaA,EAAWE,aAAgBA,EAAcgiR,YAAeA,EAAaJ,gBAAmBA,IAQlH31G,EAAOj8Z,UAAUytgB,mBAAqB,SAAU1uB,EAAQ+iB,GACpD,GAAIA,EAAgB/I,cAAe,CAC/B,IAAIoF,EAAa2D,EAAgB9I,eAGjC,GAFA8I,EAAgBpnf,OAASqke,EAAO+rB,iBAAiBn5f,EAAImwf,EAAgBnwf,EAEjEvP,EAAkB0/f,EAAgB9I,iBAAmB52f,EAAkB0/f,EAAgB9I,eAAeH,WACnGz2f,EAAkB0/f,EAAgB9I,eAAeH,SAASiC,WAC7D,OAEiE,YAAjEgH,EAAgB9I,eAAeH,SAASiC,UAAU7F,WAClDkJ,EAAWzjf,OAAS40e,GAAcO,oBAAoBiS,EAAgB9I,eAAeH,SAASiC,UAAUpgf,SAInGyjf,GAAY/8f,QAAU,GAAsE,YAAjE0ggB,EAAgB9I,eAAeH,SAASiC,UAAU7F,WAC9EkJ,EAAWzjf,OAAS1J,KAAKC,IAAIq+e,GAAcO,oBAAoBiS,EAAgB9I,eAAeH,SAASiC,UAAUpgf,QAAS/V,KAAK8tgB,qBAAqBtU,IAGpJA,EAAWzjf,OAASyjf,EAAWzjf,OAASonf,EAAgBpnf,OAOhEonf,EAAgBja,gBAAkBsW,OAGlC2D,EAAgBpnf,OAASqke,EAAO+rB,iBAAiBn5f,EAAImwf,EAAgBnwf,EAOrEmwf,EAAgBxU,sBAAsBuJ,KACtCiL,EAAgBja,gBAAgBnte,QAAUonf,EAAgBpnf,OACtD/V,KAAKo6e,OAAOkV,MAAMye,wBAA4F,IAAnE5Q,EAAgBxU,WAAW6K,iBAAiBj1f,QAAQ,WAC/FyB,KAAKgugB,yBAAyB7Q,EAAgBxU,WAAY3of,KAAKo6e,UAO3E9iF,EAAOj8Z,UAAU2ygB,yBAA2B,SAAUrc,EAAQvX,GAC1D,IAAI96P,EAAaqyQ,EAAO1hW,KAAKyhW,YAAY,GAAG/O,cAAcrjQ,WAC1D,IAAmD,IAA/CqyQ,EAAO6B,iBAAiBj1f,QAAQ,UAAkB,CAClD,IAEIk1a,EAFAw6F,EAAiBtc,EAAO1hW,KAAKyhW,YAAY,GAAG/O,cAAcsrB,eAC1Dl4f,EAAS40e,GAAcO,oBAAoB5rQ,EAAa2uR,GAExDtc,EAAO3kf,EAAI2kf,EAAO57e,OAASA,EAC3B09Z,EAAQ19Z,GAAU47e,EAAO3kf,EAAI2kf,EAAO57e,QAE/B47e,EAAO3kf,EAAI2kf,EAAO57e,OAASA,IAChC09Z,EAASk+E,EAAO3kf,EAAI2kf,EAAO57e,OAAUA,GAEpCtY,EAAkBg2a,KACnBA,EAAQ19Z,GAAU47e,EAAO3kf,EAAI2kf,EAAO57e,QACpC/V,KAAK2ngB,mBAAmBl0F,EAAOk+E,GAC/BvX,EAAO+rB,iBAAiBn5f,GAAKyma,KAQzCnc,EAAOj8Z,UAAUkxgB,qBAAuB,SAAUz+c,EAAM77C,EAAO+re,GAC3Clwb,EAAK+0b,UAGrB,IAAK,IAFDupB,GAAgB,EAChB8B,EAAkB,EACb/xgB,EAAI8V,EAAQ,EAAG9V,GAAK,EAAGA,IAAK,CACjC,IAAIm6B,EAAcw3B,EAAK1zC,SAASje,GAChC,GAAIm6B,aAAuBk+d,GAAgB,CACvC,IAAI/ne,EAAO6J,EAAY7J,KAEvB,GADAyhf,EAAkB/xgB,EACdswB,EAAKhwB,OAAS,GAA+B,MAA1BgwB,EAAKA,EAAKhwB,OAAS,GAAY,CAClD,GAAIN,IAAM8V,EAAQ,EAEd,OADAjS,KAAK6pgB,sBAAsB/7c,EAAM77C,EAAQ,IAClC,EAEXm6f,GAAgB,EAChB,MAEC,GAAa,OAAT3/e,EACL,OAAO,EAEN,GAAIA,EAAKluB,QAAQ,MAAQ,EAAG,CAC7B6tgB,GAAgB,EAChB,IAAIt9H,EAAUriX,EAAKosE,YAAY,KAAO,EAElCoza,EAAkB,IAAIzX,GAC1ByX,EAAgBx/e,KAAOA,EAAKuK,OAAO83W,GACnCm9H,EAAgBjuB,gBAAgBwH,WAAWlvd,EAAY0nd,iBACvD1nd,EAAY7J,KAAOA,EAAKuK,OAAO,EAAG83W,GAClC9uY,KAAKo6e,OAAOouB,WAAWc,YAAY2C,EAAiBjuB,GACpD1nd,EAAYtgB,OAASi2f,EAAgBj2f,MACrCsgB,EAAYvgB,OAASk2f,EAAgBl2f,OACX,IAAtBugB,EAAYtgB,OACZ83C,EAAK1zC,SAASiO,OAAOlsB,EAAG,GAG5B2xD,EAAK1zC,SAASiO,OAAOlsB,EAAI,EAAG,EAAG8vgB,GAC/B,YAGH,KAAM31e,aAAuBy+d,IAAqB,CAEnDmZ,EAAkB/xgB,EAClBiwgB,GAAgB,EAChB,OAGR,GAAIA,KACA8B,EACsBpgd,EAAK1zC,SAAS3d,OAAQ,CAEnC,IADDsvgB,EAAa,EACjB,IAAS5vgB,EAAI+xgB,EAAiB/xgB,EAAI2xD,EAAK1zC,SAAS3d,OAAQN,IACpD4vgB,GAAcj+c,EAAK1zC,SAASje,GAAG6Z,MAC/BhW,KAAK6pgB,sBAAsB/7c,EAAM3xD,EAAI,GACrCA,IAEJ6D,KAAKo6e,OAAOyuB,kBAAkBkD,GAGtC,OAAOK,GAKX90G,EAAOj8Z,UAAU4vgB,oBAAsB,SAAUpoB,GAC7C,GAAsC,IAAlCA,EAAUI,aAAaxmf,OAA3B,CAGA,IAAIqxD,EAAO+0b,EAAUI,aAAa,GAClC,IAAIxlf,EAAkBqwD,EAAK1zC,UAG3B,IAAK,IAAIje,EAAI,EAAGA,EAAI2xD,EAAK1zC,SAAS3d,QAC1BqxD,EAAK1zC,SAASje,aAAc44f,GADM54f,IAElC2xD,EAAK1zC,SAASiO,OAAOlsB,EAAG,GACxBA,MAaZm7Z,EAAOj8Z,UAAU+vgB,cAAgB,SAAUxnB,GACvC,IAAI/gZ,EAAO7iG,KAAKo6e,OAAO4wB,YAAYpnB,EAAWsC,QAC1CH,EAAcnC,EAAWmD,gBACzBuB,EAAYtof,KAAKumf,aAAa1jZ,EAAM+gZ,EAAWmD,iBAE9Btpf,EAAkBolG,EAAKyjZ,iBAAkBzjZ,EAAKyjZ,eAAeP,GAelF,OADA/lf,KAAKmugB,iBAAiBtra,EAAMkjZ,GACrB/lf,KAAKougB,YAAYvra,EAAMkjZ,EAAauC,IAQ/ChxF,EAAOj8Z,UAAUgzgB,kBAAoB,SAAUtnB,EAAiBlkZ,GAE5D,IAAI2jZ,EAAiB/of,EAAkBolG,EAAKyjZ,qBAAyDnrf,EAAvC0nG,EAAKyjZ,eAAeS,GAClF,IAAKtpf,EAAkB+of,IAAkB/of,EAAkB+of,EAAcV,mBACrE,OAAOU,EAAcR,QAEzB,IAAIsC,EAAYtof,KAAKumf,aAAa1jZ,EAAMkkZ,GACxC,OAAItpf,EAAkB6qf,GACX,EAGAA,EAAUtC,SASzB1uF,EAAOj8Z,UAAU8ygB,iBAAmB,SAAUtra,EAAMkkZ,GAChD,GAAK/mf,KAAKo6e,OAAOk0B,cAAc7nS,YAAYzmO,KAAKo6e,OAAOm0B,oBAAoB1ra,EAAKujZ,iBAQ3E,CAED,IAAIhna,EAASp/E,KAAKo6e,OAAOk0B,cAAc5mgB,IAAI1H,KAAKo6e,OAAOm0B,oBAAoB1ra,EAAKujZ,iBAChF,GAAIhna,EAAOqnJ,YAAYsgR,GAAkB,CACrC,IAAIf,EAAU5ma,EAAO13E,IAAIq/e,GACzB3na,EAAO/3E,IAAI0/e,EAAiBf,EAAU,GAEtC,IADA,IAAID,EAAcgB,EAAkB,EAC7BhB,EAAc/lf,KAAKo6e,OAAOm0B,oBAAoB1ra,EAAKujZ,gBAAgBhna,OAAO3iF,QAAQ,CACjF6rf,EAAYtof,KAAKumf,aAAa1jZ,EAAMkjZ,GAEpC3ma,EAAOqnJ,YAAYs/Q,IAAgBuC,EAAU2c,aAAele,GAC5D3na,EAAO76E,OAAOwhf,GAMlBA,SAGH,CAED,IADIA,EAAcgB,GACV3na,EAAOqnJ,YAAYs/Q,EAAc,IAAMA,EAAc,GAAG,CACxDuC,EAAYtof,KAAKumf,aAAa1jZ,EAAMkjZ,EAAc,GAEtD3ma,EAAOh7E,IAAI2hf,EAAc,EAAG/lf,KAAKqugB,kBAAkBtoB,EAAc,EAAGljZ,IAKpEkjZ,IAEAC,EAAUhmf,KAAKqugB,kBAAkBtnB,EAAiBlkZ,GACtDzjB,EAAOh7E,IAAI2if,EAAiBf,QAzC8D,CAC9F,IAAIwoB,EAAW,IAAI7oS,GACnB3lO,KAAKo6e,OAAOk0B,cAAclqgB,IAAIpE,KAAKo6e,OAAOm0B,oBAAoB1ra,EAAKujZ,gBAAiBooB,GAEpF,IAAK,IADDlmB,EAAYtof,KAAKumf,aAAa1jZ,EAAMkkZ,GAC/B5qf,EAAI,EAAGA,GAAK4qf,EAAiB5qf,IAClCqygB,EAASpqgB,IAAIjI,EAAG6D,KAAKqugB,kBAAkBlygB,EAAG0mG,MA+CtDy0T,EAAOj8Z,UAAU+ygB,YAAc,SAAUK,EAAS1nB,EAAiBokB,GAC/D,IAAIuD,EAAWvD,EAAiBnG,aAEhC,GAAIhlgB,KAAKo6e,OAAOk0B,cAAc7nS,YAAYzmO,KAAKo6e,OAAOm0B,oBAAoBE,EAAQroB,iBAG9E,IAAK,IAFDhna,EAASp/E,KAAKo6e,OAAOk0B,cAAc5mgB,IAAI1H,KAAKo6e,OAAOm0B,oBAAoBE,EAAQroB,iBAC/E9of,EAAO8hF,EAAO9hF,KACTnB,EAAI,EAAGA,EAAImB,EAAKb,OAAQN,IAAK,CAClC,IAAI4pf,EAAczof,EAAKnB,GACnBwygB,EAAW,KAAO5oB,EAAc,GAAG74e,WACnCo7e,EAAYtof,KAAKumf,aAAakoB,EAAS1oB,GAC3C,GAAI2oB,EAAS/+f,MAAMg/f,GAAW,CAC1B,GAAI5oB,EAAcgB,EACd,MAAO,GAGP2nB,EADKtvb,EAAOqnJ,YAAYs/Q,KAAiBtof,EAAkB6qf,GAChDomB,EAASn/f,QAAQo/f,EAAU3ugB,KAAK4ugB,qBAAqBtmB,EAAWlpa,EAAO13E,IAAIq+e,KAG3E2oB,EAASn/f,QAAQo/f,EAAU,MAKtD,OAAOD,GAOXp3G,EAAOj8Z,UAAUwzgB,YAAc,SAAUjgY,GAIrC,IAAIkgY,EAAWlgY,EAAS,GACpB68I,EAAY78I,EAAS,GACP,IAAd68I,IAEAA,EAAY,GACZqjP,KAKJ,IAFA,IAAI9lR,EAAS9/N,OAAOC,aAAa,GAASsiQ,GACtCsjP,EAAY,GACTD,GAAY,GACfC,GAAwB/lR,EAAO97O,WAC/B4hgB,IAEJ,OAAOC,GAQXz3G,EAAOj8Z,UAAUuzgB,qBAAuB,SAAUtmB,EAAWymB,GACzD,OAAQzmB,EAAUgc,kBACd,IAAK,UACD,OAAOtkgB,KAAKgvgB,WAAWD,GAAWtkf,cACtC,IAAK,WACD,OAAOzqB,KAAKgvgB,WAAWD,GAAWn5f,cACtC,IAAK,WACD,OAAO5V,KAAK6ugB,YAAYE,GAAWtkf,cACvC,IAAK,YACD,OAAOzqB,KAAK6ugB,YAAYE,GAAWn5f,cACvC,IAAK,SACD,OAAO,EAAY1I,WACvB,IAAK,cACD,OAAOlN,KAAKivgB,iBAAiBF,GACjC,IAAK,SAEL,IAAK,cAEL,IAAK,UAEL,IAAK,UAEL,IAAK,UACD,OAAO,EAAY7hgB,WACvB,QACI,MAAO,KASnBoqZ,EAAOj8Z,UAAUgzR,eAAiB,SAAUz/I,EAAQ6/I,EAAWzlC,GAE3D,IADA,IAAI0lC,EAAe,GACZ9/I,GAAU6/I,GACb7/I,GAAU6/I,EACVC,GAAgB1lC,EAChBhpP,KAAKhD,MAAQ4xI,EAEjB,OAAO8/I,EAAaxhR,YAMxBoqZ,EAAOj8Z,UAAU4zgB,iBAAmB,SAAUF,GAC1C,OAAIA,EAAY,GACL,IAAMA,EAAU7hgB,WAGhB6hgB,EAAU7hgB,YAQzBoqZ,EAAOj8Z,UAAU2zgB,WAAa,SAAUpgY,GACpC,IAAIw/I,EAAS,GAeb,OAdApuR,KAAKhD,MAAQ4xI,EACbw/I,GAAUpuR,KAAKquR,eAAeruR,KAAKhD,MAAO,IAAM,KAChDoxR,GAAUpuR,KAAKquR,eAAeruR,KAAKhD,MAAO,IAAK,MAC/CoxR,GAAUpuR,KAAKquR,eAAeruR,KAAKhD,MAAO,IAAK,KAC/CoxR,GAAUpuR,KAAKquR,eAAeruR,KAAKhD,MAAO,IAAK,MAC/CoxR,GAAUpuR,KAAKquR,eAAeruR,KAAKhD,MAAO,IAAK,KAC/CoxR,GAAUpuR,KAAKquR,eAAeruR,KAAKhD,MAAO,GAAI,MAC9CoxR,GAAUpuR,KAAKquR,eAAeruR,KAAKhD,MAAO,GAAI,KAC9CoxR,GAAUpuR,KAAKquR,eAAeruR,KAAKhD,MAAO,GAAI,MAC9CoxR,GAAUpuR,KAAKquR,eAAeruR,KAAKhD,MAAO,GAAI,KAC9CoxR,GAAUpuR,KAAKquR,eAAeruR,KAAKhD,MAAO,EAAG,MAC7CoxR,GAAUpuR,KAAKquR,eAAeruR,KAAKhD,MAAO,EAAG,KAC7CoxR,GAAUpuR,KAAKquR,eAAeruR,KAAKhD,MAAO,EAAG,OAC7CoxR,GAAUpuR,KAAKquR,eAAeruR,KAAKhD,MAAO,EAAG,MAC/BkQ,YAQlBoqZ,EAAOj8Z,UAAUkrf,aAAe,SAAU1jZ,EAAMkkZ,GAC5C,IAAKtpf,EAAkBolG,GAAO,CAC1B,IAAIwjZ,EAAermf,KAAKo6e,OAAOm0B,oBAAoB1ra,EAAKujZ,iBACnD3of,EAAkBolG,IAASwjZ,EAAajna,OAAO3iF,QAAUsqf,GACvDA,GAAmB,GAAKA,EAAkB,GAC7C/mf,KAAKsrgB,cAAcjlB,GAEvB,IAAI6oB,OAAmB/zgB,EAKvB,IAHUsC,EAAkBolG,EAAKyjZ,kBACzB7of,EAAoByxgB,EAAmBrsa,EAAKyjZ,eAAeS,MAC1Dtpf,EAAkByxgB,EAAiBppB,mBAExC,OAAOopB,EAAiBppB,kBAEvB,IAAKrof,EAAkB4of,IAAiBU,GAAmB,GAAKA,EAAkBV,EAAajna,OAAO3iF,OACvG,OAAO4pf,EAAajna,OAAO2na,KAWvCzvF,EAAOj8Z,UAAUkugB,YAAc,SAAU1mB,EAAWzI,EAAQnoe,EAAOosf,EAAYr9f,GAC3E,IAAImugB,EAAY,EACZC,GAAc,EACdpnB,EAAOnF,EAAUjF,gBAAgBqK,iBAErC,GAAI7N,EAAO+rB,iBAAiBp5f,EAAIqte,EAAOwtB,WAAW76f,EAC9C,OAAOqte,EAAOwtB,WAAW76f,EAAIqte,EAAO+rB,iBAAiBp5f,EAGzD,IAAImH,EAAWkme,EAAO+rB,iBAAiBp5f,GAClCqte,EAAOwtB,WAAW76f,EAAI49e,GAAcO,oBAAoBrI,EAAUjF,gBAAgBqL,aACnFomB,EAAkB1kB,GAAcO,oBAAoB9Q,EAAOi1B,iBAC/D,GAAoB,IAAhBrnB,EAAKvrf,QAA8B,IAAbyX,GAAsC,IAApBm7f,EAGvC,CACD,GAAIrnB,EAAKvrf,OAAS,EACd,IAAK,IAAIN,EAAI,EAAGA,EAAI6rf,EAAKvrf,OAAQN,IAAK,CAClC,IAAImzgB,EAAc3kB,GAAcO,oBAAoBlD,EAAK7rf,GAAG+X,UAC5D,GAAiC,SAA7B8ze,EAAK7rf,GAAG2rf,kBAA+B5ze,EAAWo7f,EAAa,CAC/DH,EAAYG,EACZF,GAAc,EACT3xgB,EAAkBuD,KACnBA,EAAQg+f,UAAYhX,EAAK7rf,GAAG6igB,UAC5Bh+f,EAAQ+9f,QAAU,IAEtB,MAEC,GAAiC,UAA7B/W,EAAK7rf,GAAG2rf,kBAAgC5ze,EAAWo7f,EAAa,CACrE,IAAIC,EAAWD,EAAcp7f,EACzB8B,EAAQhW,KAAKwvgB,iBAAiBv9f,EAAQ,EAAGosf,EAAYxb,GAErDwsB,EADAr5f,EAAQu5f,EACUA,EAAWv5f,EAGX,EAEtBm5f,EAAYj7f,EACZk7f,GAAc,EACT3xgB,EAAkBuD,KACnBA,EAAQg+f,UAAYhX,EAAK7rf,GAAG6igB,UAC5Bh+f,EAAQ+9f,QAAU,IAEtB,OAIZ,IAAKqQ,EAAa,CACd,IAAI3xb,EAAgC,IAAvBpxE,KAAKoxB,MAAMvpB,IAAkD,IAA9B7H,KAAKoxB,MAAM4xe,IAA2B,IAElFF,IADW9igB,KAAKoxB,MAAMvpB,GAAYupE,GAAQpxE,KAAKoxB,MAAM4xe,GAClC,GAAKA,EAE5B,OAAQF,EAAYj7f,EAAY,EAAIi7f,EAAYj7f,EAAWm7f,EAvC3D,OAAOA,GAgDf/3G,EAAOj8Z,UAAUm0gB,iBAAmB,SAAUv9f,EAAOosf,EAAYxb,GAG7D,IAFA,IAAI7se,EAAQ,EACR+vf,GAAc,EACX9zf,EAAQosf,EAAWjkf,SAAS3d,QAAQ,CACvC,IAAIihgB,EAAaW,EAAWjkf,SAASnI,GAerC,GAdKyrf,aAAsBpS,IAAqBoS,aAAsBhJ,IAAuBqR,GACrFrI,aAAsBpS,KACO,IAAzBoS,EAAWnS,UACXwa,GAAc,EAEgB,IAAzBrI,EAAWnS,YAChBwa,GAAc,IAGtBrI,EAAW1nf,MAAQ,GAGnBhW,KAAKo6e,OAAOouB,WAAWc,YAAY5L,EAAYA,EAAW1f,iBAE1D0f,aAAsBlJ,IAAsC,OAApBkJ,EAAWjxe,KACnD,OAAOzW,EAGPA,GAAgB0nf,EAAW1nf,MAE/B/D,IAEJ,OAAO+D,GASXshZ,EAAOj8Z,UAAUuwgB,oBAAsB,SAAU6D,EAAmBhjf,EAAMzW,EAAOgoe,GAG7E,IAFA,IAAI/re,EAAQ,EACRxV,EAASgwB,EAAKhwB,OACXwV,EAAQxV,GAAQ,CACnB,IAAI6nO,EAAYtkO,KAAKksgB,uBAAuBz/e,EAAMxa,GAChC,IAAdqyN,GAAmBA,IAAc7nO,IACjC6nO,EAAY7nO,EAAS,GAEzB,IAAIsvgB,EAAa/1f,EAIjB,IAHKsuN,EAAY7nO,EAAS,GAAM6nO,IAAc7nO,EAAS,GAA6B,MAAxBgwB,EAAK63M,EAAY,KAAgBryN,IAAUqyN,IACnGynS,EAAa/rgB,KAAKo6e,OAAOouB,WAAWwD,+BAA+Bv/e,EAAKprB,MAAM,EAAGijO,GAAY05Q,MAE7F+tB,GAAc0D,GAGb,CACa,IAAVx9f,GAA2B,MAAZwa,EAAK,KACpBxa,EAAQjS,KAAKksgB,uBAAuBz/e,EAAM,IAE9C,MANAxa,EAAQqyN,EAShB,OAAOryN,GAWXqlZ,EAAOj8Z,UAAUywgB,6BAA+B,SAAU4D,EAAkBC,EAAuBljf,EAAMzW,EAAOgoe,GAE5G,IAAK,IADDvhf,EAASgwB,EAAKhwB,OACTN,EAAI,EAAGA,EAAIM,EAAQN,IAAK,CAC7B,IAAI4vgB,EAAa/1f,EAIjB,GAHI7Z,EAAI,EAAIM,IACRsvgB,EAAa/rgB,KAAKo6e,OAAOouB,WAAWwD,+BAA+Bv/e,EAAKvI,UAAU,EAAG/nB,EAAI,GAAI6hf,IAE7F+tB,EAAa4D,EACb,OAAU,IAANxzgB,GAAW4vgB,EAAa2D,EAEhBjzgB,EAAS,GAAiB,MAAZgwB,EAAK,GAAczsB,KAAKksgB,uBAAuBz/e,EAAM,GAAK,EAE7EtwB,EAGf,OAAO,GAQXm7Z,EAAOj8Z,UAAU8xgB,YAAc,SAAU9O,EAAYuR,EAASxC,EAAYxvR,GAItE,IAAK,IAHD5nO,EAAQ,EACR65f,GAAY,EACZC,EAAW,GACN3zgB,EAAIkigB,EAAWjkf,SAAS3d,OAAS,EAAGN,GAAK,EAAGA,IAAK,CACtD,IAAI6E,EAAUq9f,EAAWjkf,SAASje,GAClC,GAAI6E,aAAmBwzf,GAAgB,CACnC,IAAIub,EAAc/ugB,EAAQyrB,KAC1Bqjf,EAAWC,EAAcD,GACrBD,GAAqC,KAAvBE,EAAY7/f,QAAiC,OAAhB6/f,EASrCF,IACN75f,GAAShV,EAAQgV,QATb20e,GAAc96V,SAASkgX,GACvB/5f,GAAShW,KAAKo6e,OAAOouB,WAAWwD,+BAA+B+D,EAAa/ugB,EAAQg9e,iBAGpFhoe,GAAShV,EAAQgV,MAErB65f,GAAY,QAOhBC,EAAW,IAAMA,EACjBD,GAAY,EACZ75f,GAAShV,EAAQgV,MAEhB45f,IACD55f,EAAQ3J,KAAKoxB,MAAMznB,IAI3Bo3f,GADA0C,EAAWA,EAAS5/f,QACEzT,OAASkuf,GAAce,YAAYokB,GAAUrzgB,OACnE,IAAIuoS,EAAYhlS,KAAKo6e,OAAOwtB,WAAW5xf,MAAQ4nO,EAAkB5nO,EAQjE,OAPIgvR,GAAY,GAAqB,IAAfooO,GAAoBwC,GACtCxC,EAAa,EACbpoO,EAAW,GAEN4qO,IACL5qO,GAAsBooO,IAEjBpoO,SAAYA,EAAUooO,WAAcA,IAOjD91G,EAAOj8Z,UAAUuvgB,iBAAmB,SAAU/nB,GAC1C,IAAIsG,EAAgB,EAUpB,OATItG,EAAU0W,0BAA0BzW,GAChCD,EAAU0W,eAAe3b,gBAAgBwL,aAAevG,EAAUjF,gBAAgBuL,gBAElFA,EAAgBtG,EAAUjF,gBAAgBuL,cAAgBtG,EAAU0W,eAAe3b,gBAAgBwL,cAIvGD,EAAgBtG,EAAUjF,gBAAgBuL,cAEvCA,GAQX7xF,EAAOj8Z,UAAUwvgB,eAAiB,SAAUhoB,EAAWtvb,GACnD,GAAI91D,EAAkBolf,EAAUjF,iBAC5B,OAAO,EAEX,IAAIt9P,EAAc,EAClB,OAAQuiQ,EAAUjF,gBAAgByL,iBAC9B,IAAK,UACL,IAAK,UACD/oQ,EAAcuiQ,EAAUjF,gBAAgBt9P,YACxC,MACJ,QACIA,EAAcuiQ,EAAUjF,gBAAgBt9P,YAAc/sL,EAG9D,OAAO+sL,GAMXg3K,EAAOj8Z,UAAU20gB,qBAAuB,SAAUntB,EAAW/0b,GACzD,IAAI6jc,EAAS9O,EACb,SAAIplf,EAAkBk0f,EAAO1O,eAAuD,IAAtC0O,EAAO1O,aAAa1kf,QAAQuvD,QAGlEA,EAAK1zC,SAAS3d,OAAS,IAAMgB,EAAkBolf,EAAU0W,iBACtD1W,EAAU0W,0BAA0BzW,KAChCh1b,EAAK+0b,UAAU5we,QAAU4we,EAAU0W,eAAetnf,QAUrEqlZ,EAAOj8Z,UAAU40gB,oBAAsB,SAAUjvgB,GAC7C,IAAI6hf,EAAY7hf,EAAQ8sD,KAAK+0b,UACzBqtB,EAAiBrtB,EAAUI,aAAaJ,EAAUI,aAAaxmf,OAAS,GACxE0zgB,EAAaD,EAAe91f,SAAS81f,EAAe91f,SAAS3d,OAAS,GAC1E,OAAIuE,IAAYmvgB,IAEJA,aAAsB7kB,MAAwB6kB,aAAsB3b,IAAsC,OAApB2b,EAAW1jf,QASjH6qY,EAAOj8Z,UAAU6wgB,uBAAyB,SAAUz/e,EAAM/G,GACtD,IAAIjpB,EAASgwB,EAAKhwB,OAGd6nO,EADI73M,EAAKluB,QAAQ,IAAKmnB,GAAc,EAExC,GAAkB,IAAd4+M,GAAmBA,IAAc7nO,EACjC,OAAO6nO,EAEX,KAA2B,MAApB73M,EAAK63M,MACRA,IACkB7nO,IAItB,OAAO6nO,GAMXgzL,EAAOj8Z,UAAU+0gB,uBAAyB,SAAUpI,EAAaqI,EAAYC,GACzE,IAAIrxO,EAAaqxO,EAAeD,EAAWA,EAAW5zgB,OAAS,GAAK4zgB,EAAWA,EAAW5zgB,OAAS,GAC/FgkS,EAAWxB,EAAW2yN,aACtB2e,EAAevI,EAAYA,EAAYvrgB,OAAS,GAChD6zgB,IACA7vO,GAAY,GAGhB,IAAK,IADD+vO,EAAcvxO,EAAWikN,gBAAgBD,aAAa56d,OAAOo4Q,GACxDtkS,EAAI,EAAGA,EAAIq0gB,EAAY/zgB,OAAQN,IACpCo0gB,EAAattB,aAAaz+e,KAAKgsgB,EAAYr0gB,IAC3Cq0gB,EAAYr0gB,GAAG+mf,gBAAkBqtB,GAUzCj5G,EAAOj8Z,UAAUo1gB,mBAAqB,SAAUxtc,EAAMqwC,EAAMo9Z,EAAkBC,GAE1E,IAAIC,EAAkB,EAClBC,EAAY,EACZrkgB,EAAO,EACPE,EAAMgkgB,EACNjkgB,EAAQ,EACRE,EAASgkgB,EACRlzgB,EAAkBwlE,EAAKqxb,cACpBrxb,EAAKqxb,WAAW9C,mBAEhBhlf,EAAO/O,EAAkBwlE,EAAKqxb,WAAWppQ,YAAcy/P,GAAcO,oBAAoBjob,EAAKgxb,WAAWnE,YAAY5kQ,YAAcy/P,GAAcO,oBAAoBjob,EAAKqxb,WAAWppQ,YACrLz+O,EAAQhP,EAAkBwlE,EAAKqxb,WAAWlpQ,aAAeu/P,GAAcO,oBAAoBjob,EAAKgxb,WAAWnE,YAAY1kQ,aAAeu/P,GAAcO,oBAAoBjob,EAAKqxb,WAAWlpQ,eAGxL5+O,EAAOm+e,GAAcO,oBAAoBjob,EAAKgxb,WAAWnE,YAAY5kQ,YACrEz+O,EAAQk+e,GAAcO,oBAAoBjob,EAAKgxb,WAAWnE,YAAY1kQ,eAG9EnoL,EAAKxmC,OAAS,IAAIqgS,GAAOtwT,EAAME,EAAKD,EAAOE,GAC3Cs2D,EAAKjtD,MAAQ20e,GAAcO,oBAAoBjob,EAAKqxb,WAAWj/N,WAC1D53R,EAAkBwlE,EAAKs2b,kBAExBqX,EAAkB3tc,EAAKs2b,eAAe5xL,YAAc1kQ,EAAKs2b,eAAejF,WAAWn8N,YAGvF04O,EAAapzgB,EAAkBwlE,EAAKgxb,aAAgBx2f,EAAkBwlE,EAAKgxb,WAAWnE,aAA4F,EAA7EnF,GAAcO,oBAAoBjob,EAAKgxb,WAAWnE,YAAYl5N,aACnK,IAAIk6O,EAAuB,EAqC3B,OApCIF,EAAkB3tc,EAAK0kQ,cAEvBmpM,EAAuBnmB,GAAcO,oBAAoBjob,EAAKgxb,WAAWqB,YAAY0K,4BAA4B4Q,EAAiB3tc,EAAK0kQ,cAC/G,IAApBipM,IACAE,GAA8CD,EAAY,IAGlE5tc,EAAKl2D,EAAIumG,EAAKvmG,EAAI+jgB,EAAuB7tc,EAAKxmC,OAAOjwB,KACrDy2D,EAAKj2D,EAAIsmG,EAAKtmG,EAAIi2D,EAAKxmC,OAAO/vB,IAAMmkgB,EACpC5tc,EAAKjtD,MAAQitD,EAAKjtD,MAAQitD,EAAKxmC,OAAOjwB,KAAOy2D,EAAKxmC,OAAOhwB,MACrDokgB,EAAY,IACZ5tc,EAAKl2D,GAAK8jgB,EACyC,IAA/C5tc,EAAKgxb,WAAWqB,YAAYv3b,QAAQthE,OACpCwmE,EAAKjtD,OAAqB,EAAZ66f,EAEY,IAArB5tc,EAAK0kQ,aAAqB1kQ,EAAK0kQ,cAAgB1kQ,EAAKgxb,WAAWqB,YAAYv3b,QAAQthE,OAAS,EACjGwmE,EAAKjtD,OAAuB,EAAZ66f,EAAiBA,EAAY,EAG7C5tc,EAAKjtD,OAAS66f,GAMtB5tc,EAAKiyb,gBAAkBvK,GAAcO,oBAAoB6G,GAAgB8H,kBAAkB52b,GAAMs9K,gBACjGt9K,EAAKl2D,GAAKk2D,EAAKiyb,gBACfjyb,EAAKjtD,OAASitD,EAAKiyb,iBACf2b,EAAY,GAAK5tc,EAAK41N,YAAc51N,EAAKixb,SAASjR,aAAaxmf,OAAS,KACxEwmE,EAAKkyb,iBAAmBpD,GAAgB+J,mBAAmB74b,GAAMs9K,eACjEt9K,EAAKjtD,OAASitD,EAAKkyb,kBAGvBlyb,EAAKxmC,OAAOjwB,KAAOy2D,EAAKxmC,OAAOjwB,KAAOy2D,EAAKiyb,gBAC3Cjyb,EAAKxmC,OAAOhwB,MAAQw2D,EAAKxmC,OAAOhwB,MAAQw2D,EAAKkyb,iBAEtClyb,GASXq0V,EAAOj8Z,UAAU01gB,iBAAmB,SAAU32B,EAAQ42B,EAAiBx4O,EAAe93N,EAAKuwc,GAEvF,IAAIjJ,EAAcgJ,EAAgB,GAC9B/+f,EAAQ+1f,EAAY/kB,aAAaxmf,OACjCy0gB,OAAa/1gB,EACbg2gB,EAAiB34O,EAAcj6R,QAAQmiE,GAS3C,GARIywc,EAAiB,EACjBD,EAAa14O,EAAc24O,EAAiB,GAGvCzwc,EAAIyxb,kCAAkCF,KAE3Cif,EAAaxwc,EAAIyxb,yBAEhB10f,EAAkByzgB,GAAa,CAIhC,GAHAlJ,EAAckJ,EAAWhuB,gBAEzBjxe,EAAQ+1f,EAAY/kB,aAAa1kf,QAAQ2ygB,GAAc,EACnD7kgB,KAAKoxB,MAAMijC,EAAI1zD,KAAOX,KAAKoxB,MAAMyze,EAAWlkgB,EAAIkkgB,EAAWn7f,QAAS,CACpE,IAAIipS,EAAYgyN,EAAgBzygB,QAAQypgB,GACpChpN,EAAY,GAAKgyN,EAAgBv0gB,QAEjCuD,KAAKoxgB,eAAeh3B,EAAO+rB,iBAAkB6K,GAAiB,GAGlE/+f,GADA+1f,EAAcgJ,EAAgBhyN,EAAY,IACtBikM,aAAaxmf,OAEjC00gB,EAAiB,IACjBl/f,EAAQ,GAGhBjS,KAAKqxgB,6BAA6BrJ,EAAatnc,EAAKzuD,GACpDjS,KAAKsxgB,6BAA6BN,EAAiBtwc,EAAK05a,GAEpD15a,EAAIwib,iBAAmBxib,EAAIwib,kBAAoB8kB,IACI,IAAnDtnc,EAAIwib,gBAAgBD,aAAa1kf,QAAQmiE,IACzCA,EAAIwib,gBAAgBD,aAAa56d,OAAOq4C,EAAIwib,gBAAgBD,aAAa1kf,QAAQmiE,GAAM,IAE5C,IAA3Csnc,EAAY/kB,aAAa1kf,QAAQmiE,IACjCsnc,EAAY/kB,aAAa56d,OAAOpW,EAAO,EAAGyuD,GAE9CA,EAAIwib,gBAAkB8kB,EACtBA,EAAYjyf,OAASiyf,EAAYjyf,OAAS2qD,EAAI3qD,OACzCtY,EAAkBuqgB,EAAY9kB,oBAC5B8kB,EAAY9kB,gBAAgBD,aAAa1kf,QAAQypgB,IAAgB,IAClEA,EAAY9kB,2BAA2BgP,KACzC8V,EAAY9kB,gBAAgBnte,QAAU2qD,EAAI3qD,QAE9C/V,KAAKuxgB,yBAAyBn3B,GAAQ,EAAO42B,EAAiBx4O,EAAe93N,GAAK,EAAOuwc,GACzF72B,EAAO2wB,WAAWrqc,EAAI1zD,EAAI0zD,EAAI3qD,SAUlCuhZ,EAAOj8Z,UAAUg2gB,6BAA+B,SAAUrJ,EAAatnc,EAAKktc,GACxE,IAAI32O,EAAU,EACd,GAAwC,IAApC+wO,EAAY/kB,aAAaxmf,QAAgC,IAAhBmxgB,EAA7C,CAIA,IAAK,IAAIzxgB,EAAI,EAAGA,EAAIukE,EAAIuib,aAAaxmf,OAAQN,IAAK,CAC9C,IAAIq9f,EAAa94b,EAAIuib,aAAa9mf,GAElC86R,EAAWx5R,EAAkB+7f,IAAe/7f,EAAkB+7f,EAAWlF,YAAer9N,EAAUuiO,EAAWlF,WAAWr9N,QACxHj3R,KAAKwxgB,2BAA2Bv6O,EAASv2N,GAE7C,IAAKjjE,EAAkBijE,EAAIuzb,YACvB,IAAS93f,EAAI,EAAGA,EAAIukE,EAAIuzb,WAAWuB,qBAAqB/4f,OAAQN,IAC5D,GAAIukE,EAAIuzb,WAAWuB,qBAAqBl4f,KAAKnB,KAAOukE,EAAIzuD,MAAO,CAE3D,IAAK,IAAIsR,EAAI,EAAGA,EAAIqqf,EAAarqf,IAAK,CAClC,IAAIkuf,EAAgBzJ,EAAY/kB,aAAa1/d,GAC7CvjB,KAAK0xgB,gBAAgBD,EAAe/wc,GAExCA,EAAIuzb,WAAWuB,qBAAqBjxf,OAAOm8D,EAAIuzb,WAAWuB,qBAAqBl4f,KAAKnB,IACpF,YAlBR6D,KAAK0xgB,gBAAgBhxc,EAAKA,IA6BlC42V,EAAOj8Z,UAAUq2gB,gBAAkB,SAAUD,EAAe/wc,GAGxD,IAAK,IAFD+/N,EAAW//N,EAAIzuD,MACfglR,EAAU,EACL96R,EAAI,EAAGA,EAAIs1gB,EAAcxuB,aAAaxmf,OAAQN,IAAK,CACxD,IAAIq9f,EAAaiY,EAAcxuB,aAAa9mf,GAK5C,GAHA86R,EAAWx5R,EAAkB+7f,IAAe/7f,EAAkB+7f,EAAWlF,YAAer9N,EAAUuiO,EAAWlF,WAAWr9N,QAExHj3R,KAAKwxgB,2BAA2Bv6O,EAASv2N,GACrC+/N,EAAW+4N,EAAW/4N,UAAaxJ,EAAU,EAAG,CAChD,IAAI06O,EAAmBnY,EAAWxsf,EAAIwsf,EAAWzjf,OAASyjf,EAAW/8d,OAAO9vB,OAAS+zD,EAAI1zD,EACrF0zD,EAAI3qD,OAAS47f,IACbjxc,EAAI3qD,OAAS47f,MAM7Br6G,EAAOj8Z,UAAUm2gB,2BAA6B,SAAUv6O,EAASv2N,GACzDu2N,EAAU,IAAMx5R,EAAkBijE,EAAIuzb,cAEjCvzb,EAAIuzb,WAAWuB,qBAAqB/uR,YAAY/lK,EAAIzuD,MAAQglR,EAAU,IACvEv2N,EAAIuzb,WAAWuB,qBAAqBpxf,IAAIs8D,EAAIzuD,MAAQglR,EAAU,EAAGv2N,EAAIzuD,SAUjFqlZ,EAAOj8Z,UAAUi2gB,6BAA+B,SAAUN,EAAiBtwc,EAAK05a,GACxE15a,EAAIuzb,WAAWnE,YAAYl5N,YAAc,GAKrCo6O,EAAgBv0gB,OAAS,GAAKikE,EAAI1zD,IAAMote,EAAOwtB,WAAW56f,GAAKote,aAAkBC,KACjF35a,EAAI3qD,OAAS2qD,EAAI3qD,OAAS40e,GAAcO,oBAAoBxqb,EAAIuzb,WAAWnE,YAAYl5N,aAAe,IASlH0gI,EAAOj8Z,UAAUu2gB,aAAe,SAAUlxc,EAAK05a,GAG3C,IAAK,IAFD35M,EAAW//N,EAAIzuD,MACfglR,EAAU,EACL96R,EAAI,EAAGA,EAAIi+e,EAAOy3B,oBAAoBp1gB,OAAQN,IAAK,CACxD,IAAI21gB,EAAe13B,EAAOy3B,oBAAoB11gB,GAG9C,GADA86R,EAAWx5R,EAAkBq0gB,IAAiBr0gB,EAAkBq0gB,EAAaxd,YAAer9N,EAAU66O,EAAaxd,WAAWr9N,QAC1HwJ,EAAWqxO,EAAarxO,UAAaxJ,EAAU,EAC/C,OAAO,EAGf,OAAO,GAOXqgI,EAAOj8Z,UAAU02gB,6BAA+B,SAAUrxc,GAEtD,IAAK,IADDsxc,EAAW,EACN71gB,EAAI,EAAGA,EAAIukE,EAAIuib,aAAaxmf,OAAQN,IAAK,CAC9C,IAAI8mE,EAAOvC,EAAIuib,aAAa9mf,GAC5B,GAAI61gB,EAAW/uc,EAAK0kQ,YAChB,OAAO,EAEXqqM,GAAY/uc,EAAKqxb,WAAWn8N,WAEhC,OAAO65O,EAAWtxc,EAAIuzb,WAAWqB,YAAYv3b,QAAQthE,QAUzD66Z,EAAOj8Z,UAAU42gB,aAAe,SAAUC,EAAgB93B,EAAQ42B,EAAiBx4O,EAAes8N,GAY9F,OAXI90f,KAAKmygB,qBAAqB/3B,EAAOwtB,WAAWj7f,OAAQulgB,IAAmBA,EAAejvB,aAAaxmf,OAAS,GAC5Gq4f,EAAiB90f,KAAKoygB,wBAAwBh4B,EAAOwtB,WAAWj7f,OAAQqkgB,EAAiBx4O,EAAe05O,IACpG93B,EAAOy3B,oBAAoBp1gB,OAAS,GAAKq4f,IAAmBod,IAE5DlygB,KAAKqygB,0BAA0Bj4B,EAAQ42B,EAAiBlc,EAAgBod,EAAetgB,aAAe,IAK1G5xf,KAAKqygB,0BAA0Bj4B,EAAQ42B,EAAiBlc,EAAgBod,EAAetgB,aAAe,GAEnGkD,GAQXx9F,EAAOj8Z,UAAU+2gB,wBAA0B,SAAUzlgB,EAAQqkgB,EAAiBx4O,EAAe05O,GAGzF,IAAK,IAFDpd,OAAiB35f,EACjBslS,EAAWyxO,EAAejggB,MACrB9V,EAAI,EAAGA,EAAI+1gB,EAAejvB,aAAaxmf,OAAQN,IAAK,CACzD,IAAIq9f,EAAa0Y,EAAejvB,aAAa9mf,GACzC21gB,EAAe9xgB,KAAKsygB,kBAAkB3lgB,GAAQ,EAAMqkgB,EAAiBx4O,EAAeghO,GACxF,IAAK/7f,EAAkBq0gB,GAAe,CAClC,GAAIA,IAAiBtY,EAEjB,OAAO0Y,GAEgD,IAAvDA,EAAejvB,aAAa1kf,QAAQuzgB,IACpCI,EAAejvB,aAAa56d,OAAO6pf,EAAejvB,aAAa1kf,QAAQuzgB,GAAe,IAEhF,IAAN31gB,GAAW+1gB,EAAen8f,OAASyjf,EAAWzjf,OAASyjf,EAAW/8d,OAAO/vB,IAAM8sf,EAAW/8d,OAAO9vB,UACjGulgB,EAAen8f,OAASyjf,EAAWzjf,OAASyjf,EAAW/8d,OAAO/vB,IAAM8sf,EAAW/8d,OAAO9vB,QAEtFlP,EAAkBq3f,MAElBA,EAAiB,IAAI7C,IACN/O,gBAAkBgvB,EAAehvB,gBAChD4R,EAAe7if,MAAQiggB,EAAejggB,MACtC6if,EAAeqB,UAAY+b,EAAe/b,UAC1Cn2f,KAAKuygB,qBAAqBL,EAAgBpd,GAC1CA,EAAe/+e,OAAS,EACxByiR,EAAch0R,KAAKswf,IAEvB,IAAI79N,EAAU,EAEdA,EAAWx5R,EAAkBq0gB,IAAiBr0gB,EAAkBq0gB,EAAaxd,YAAer9N,EAAU66O,EAAaxd,WAAWr9N,QAC1HwJ,EAAWqxO,EAAarxO,UAAaxJ,EAAU,GAC5C69N,EAAe/+e,OAAS+7f,EAAa/7f,OAAS+7f,EAAar1e,OAAO/vB,IAAMolgB,EAAar1e,OAAO9vB,SAC/Fmof,EAAe/+e,OAAS+7f,EAAa/7f,OAAS+7f,EAAar1e,OAAO/vB,IAAMolgB,EAAar1e,OAAO9vB,QAEhGmof,EAAe7R,aAAaz+e,KAAKstgB,GACjCA,EAAa5uB,gBAAkB4R,GAGvC,OAAOA,GAQXx9F,EAAOj8Z,UAAUm3gB,qBAAuB,SAAUC,EAAcpC,EAAY3vc,GACxE,IAAIV,EAAYhgE,KAAK+/D,aAAaW,GAAMA,IACpC05a,EAASp6e,KAAKo6e,OAEdtud,EAAW40C,EAAIy1b,UAAUrqe,SACzB4mf,EAA0Bhyc,EAAIy1b,UAAUxF,sBACxCL,EAAa5vb,EAAIy1b,UAAU7F,WAC3B15N,EAAc,EACd93Q,EAAQ,EACRozf,EAAiBxxc,EACjBiyc,GAAqB,EAKzB,IAJIjyc,EAAIuzb,WAAW2e,iBAAmB9mf,IAClC40C,EAAIuzb,WAAW2e,gBAAiB,GAEpCh8O,EAAgBn5R,EAAkBijE,EAAIuzb,aAAgBx2f,EAAkBijE,EAAIuzb,WAAWnE,aAA4F,EAA5EnF,GAAcO,oBAAoBxqb,EAAIuzb,WAAWnE,YAAYl5N,aAC7J93Q,EAAQuxf,EAAW5zgB,QAAQ,CAE9B,GADAqiB,EAAQuxf,EAAW5zgB,OACfikE,EAAIuzb,WAAWG,eAAwD,IAAtCha,EAAOy3B,oBAAoBp1gB,QAAgBy1gB,EAAellgB,EAAIklgB,EAAen8f,OAAS6gR,GAAewjN,EAAOwtB,WAAWj7f,OACxJ3M,KAAK+wgB,iBAAiB32B,EAAQq4B,EAAcpC,EAAY6B,OAEvD,CAED,GAAI93B,EAAOy3B,oBAAoBp1gB,OAAS,GAAKy1gB,EAAellgB,EAAIklgB,EAAen8f,QAAUqke,EAAOwtB,WAAWj7f,OAAQ,CAE/G,IADmB3M,KAAK4xgB,aAAalxc,EAAK05a,GACvB,CACXp6e,KAAK+xgB,6BAA6Brxc,IAAQwxc,EAAellgB,GAAKote,EAAOwtB,WAAW56f,GAChFhN,KAAKqygB,0BAA0Bj4B,EAAQq4B,EAAcP,EAAgBA,EAAetgB,aAAe,GAEvG5xf,KAAK+wgB,iBAAiB32B,EAAQq4B,EAAcpC,EAAY6B,GACxD,UAGR,IAAIpd,EAAiBod,EACjBlK,EAAcyK,EAAaA,EAAah2gB,OAAS,GACrD,GAAIujE,EAAYkyc,EAAellgB,EAAIote,EAAOwtB,WAAWj7f,OAEjD,IAAK+lgB,GAA4B5mf,GAAY40C,EAAIuzb,WAAW2e,gBAAmC,YAAftiB,GAA4B3F,GAAcO,oBAAoBxqb,EAAIy1b,UAAUpgf,QAAUqke,EAAOwtB,WAAWj7f,QASpL,IAPoB,YAAf2jf,GAA4B3F,GAAcO,oBAAoBxqb,EAAIy1b,UAAUpgf,QAAUqke,EAAO+rB,iBAAiBpwf,QAAU28f,GAA4C,YAAfpiB,GAA4B4hB,EAAellgB,IAAMote,EAAOwtB,WAAW56f,GAAsB,SAAfsjf,GAAyBoiB,KACzP5d,EAAiB90f,KAAKiygB,aAAaC,EAAgB93B,EAAQq4B,EAAcpC,EAAYvb,IAEtE,YAAfxE,GAA4B4hB,EAAellgB,IAAMote,EAAOwtB,WAAW56f,IACnEhN,KAAK+wgB,iBAAiB32B,EAAQq4B,EAAcpC,EAAY6B,GACxDpzf,KAEAgN,GAAY40C,EAAIuzb,WAAW2e,eAAgB,CAC3Clyc,EAAIuzb,WAAWrva,QAAS,EACxBlkB,EAAIuzb,WAAW2e,gBAAiB,EAChClyc,EAAIuzb,WAAW2E,aAAe,EAC9B,IAAI1tR,OAAQ/vO,EAIZ,GAFA+vO,EAAQkvQ,EAAOlvQ,OAEVztO,EAAkBytO,GACnB,IAAK,IAAI/uO,EAAI,EAAGA,EAAI+uO,EAAMzuO,OAAQN,IAC1B+uO,EAAM/uO,GAAG0jgB,6BACT30R,EAAM/uO,GAAG0jgB,4BAA6B,QAOlC,SAAfvP,GAAwC,YAAfA,IAA6BoiB,EAMnC,YAAfpiB,GAA4B4hB,EAAellgB,IAAMote,EAAOwtB,WAAW56f,IACxEhN,KAAK+wgB,iBAAiB32B,EAAQq4B,EAAcpC,EAAY6B,GACxDpzf,KANM6re,GAAcO,oBAAoBxqb,EAAIy1b,UAAUpgf,QAAUqke,EAAOwtB,WAAWj7f,QAAWulgB,EAAellgB,IAAMote,EAAOwtB,WAAW56f,IAChI8nf,EAAiB90f,KAAKiygB,aAAaC,EAAgB93B,EAAQq4B,EAAcpC,EAAYvb,QAShG,CAGG90f,KAAK+xgB,6BAA6Brxc,KAASgyc,GAChBR,EAAellgB,GAAKote,EAAOwtB,WAAW56f,KACjE8nf,EAAiB90f,KAAKiygB,aAAaC,EAAgB93B,EAAQq4B,EAAcpC,EAAYvb,IAI7F,IAAKr3f,EAAkBq3f,GAAiB,CACpC,GAAIA,IAAmBod,EAAgB,CACnClygB,KAAK+wgB,iBAAiB32B,EAAQq4B,EAAcpC,EAAY6B,EAAgBA,EAAeryO,SAEvF7/R,KAAK6ygB,oBAAoBJ,EAAcpC,EAAY3vc,EAAIuzb,WAAYie,EAAeryO,SACpE4yO,EAAal0gB,QAAQ2zgB,EAAehvB,iBACpC,GAAKuvB,EAAah2gB,QAE5BuD,KAAKoxgB,eAAeh3B,EAAO+rB,iBAAkBsM,GAAc,GAE/DP,EAAiBpd,MAEhB,CACD,GAAIp0b,EAAIzuD,MAAQ,EAIZ,GAFAjS,KAAK6ygB,oBAAoBJ,EAAcpC,EAAY3vc,EAAIuzb,WAAYvzb,GAE/DA,EAAIyxb,kCAAkCF,GAAgB,CAEtD,IAAIif,EAAaxwc,EAAIyxb,uBACrB,GAAIxH,GAAcltd,MAAMy0e,EAAellgB,EAAG,KAAO29e,GAAcltd,MAAMyze,EAAWlkgB,EAAIkkgB,EAAWn7f,OAAQ,GAAI,CACvF08f,EAAal0gB,QAAQ2ygB,EAAWhuB,iBAChC,GAAKuvB,EAAah2gB,QAE9BuD,KAAKoxgB,eAAeh3B,EAAO+rB,iBAAkBsM,GAAc,QAK/DzygB,KAAKoxgB,eAAeh3B,EAAO+rB,iBAAkBsM,GAAc,QAK/DzygB,KAAKoxgB,eAAeh3B,EAAO+rB,iBAAkBsM,GAAc,GAGnEE,GAAqB,EACrB7zf,IAEJkpf,EAAcyK,EAAaA,EAAah2gB,OAAS,GACjD,IAAIq2gB,OAAiB33gB,EACrB,GAAIs3gB,EAAah2gB,OAAS,EAEtBq2gB,EAAiBL,EAAaA,EAAah2gB,OAAS,GAAGymf,oBAEtD,CAED4vB,EADoBpyc,EAAIuzb,WAAW9B,uBACJjP,gBAG9Bzlf,EAAkBq1gB,IACP14B,EAAOlvQ,MAAM3sO,QAAQu0gB,EAAe7iX,MAExCvvF,EAAIuzb,WAAW/Q,gBAAgBjxe,MAA3C,IACI02e,OAAa,EACbqL,OAAQ,EAERA,EADA2e,GAA8C,IAAxBF,EAAah2gB,OAC3Bg2gB,EAAaA,EAAah2gB,OAAS,GAGnCg2gB,EAAaA,EAAah2gB,OAAS,GAE/Cksf,EAAa3of,KAAKytgB,qBAAqBzZ,GACvC,IAAI+e,EAAcN,EAAaA,EAAah2gB,OAAS,GAcrD,GAZIk2gB,GAEkB,IAAdjyc,EAAIzuD,OAAe8ggB,EAAY7vB,kBAAsF,IAAnE6vB,EAAY7vB,gBAAgBD,aAAa1kf,QAAQw0gB,IACnGA,EAAY7vB,gBAAgBD,aAAa56d,OAAO0qf,EAAY7vB,gBAAgBD,aAAa1kf,QAAQw0gB,GAAc,GAGvHpqB,EAAW1F,aAAa/nf,QAAQ63gB,GAChCA,EAAY7vB,gBAAkByF,GAC1BgqB,GAAsBjyc,EAAIzuD,MAAQ,GAAKo+f,EAAW5zgB,OAAS,IAC3DuD,KAAKowgB,uBAAuBqC,EAAcpC,GAAasC,GAE3DA,GAAqB,EACjBjyc,EAAIuzb,WAAWrva,QAAUstb,EAAen8f,OAASqke,EAAOwtB,WAAWj7f,OAAQ,CAE3Eyte,EAAO44B,qBAAqBnT,4BAA6B,EAGzDzlB,EAAOusB,yBAAyBjmc,EAAIuzb,YAAY,EAAMwe,GAGtD3d,EAAe/nf,EAAI+nf,EAAe/nf,EAClC+nf,EAAe9nf,EAAIg7f,EAAYh7f,EAAI0zD,EAAIuzb,WAAW2E,aAElD,IAAIiY,EAAYj6O,EAAc,EAC9B52R,KAAKizgB,0BAA0BjL,EAAYh7f,EAAI0zD,EAAIuzb,WAAW2E,aAAeiY,EAAW/b,OAEvF,CAED1a,EAAOusB,yBAAyBjmc,EAAIuzb,YAAY,EAAMwe,GAGtD3d,EAAe/nf,EAAI+nf,EAAe/nf,EAClC+nf,EAAe9nf,EAAIg7f,EAAYh7f,EAE3B6jgB,EAAYj6O,EAAc,EAC9B52R,KAAKizgB,0BAA0BjL,EAAYh7f,EAAI6jgB,EAAW/b,KAQtE,GAJIhpe,GAAY40C,EAAIuzb,WAAW2e,iBAC3Blyc,EAAIuzb,WAAWrva,QAAS,EACxBlkB,EAAIuzb,WAAW2E,aAAe54b,EAAYU,EAAIuzb,WAAW2E,cAEzD9se,IAAaruB,EAAkBuC,KAAKy4R,UAAU/3N,EAAIuzb,cAAgBvzb,EAAIzuD,QAAUjS,KAAKy4R,UAAU/3N,EAAIuzb,YAAYhif,MAAO,CACtH,IAAI2mf,EAAe54f,KAAKkzgB,gBAAgBxyc,EAAIuzb,WAAYvzb,EAAK2vc,GAI7D,IAHIzX,EAAel4b,EAAIuzb,WAAW2E,cAAgBA,EAAel4b,EAAIuzb,WAAW2E,gBAC5El4b,EAAIuzb,WAAW2E,aAAeA,GAE9Bl4b,EAAIuzb,WAAW2E,aAAexe,EAAOwtB,WAAW7xf,OAAQ,CACxD2qD,EAAIuzb,WAAWrva,QAAS,EACxBlkB,EAAIuzb,WAAW2e,gBAAiB,EAChClyc,EAAIuzb,WAAW2E,aAAe,EAE9B,IADI1tR,EAAQkvQ,EAAOlvQ,MACV/uO,EAAI,EAAGA,EAAI+uO,EAAMzuO,OAAQN,IAC1B+uO,EAAM/uO,GAAG0jgB,6BACT30R,EAAM/uO,GAAG0jgB,4BAA6B,IAKlD4S,EAAah2gB,OAAS,GAAKikE,EAAIuzb,WAAWrva,QAAUstb,EAAen8f,OAASqke,EAAO+rB,iBAAiBx5f,SACnGyte,EAAO44B,qBAAqBnT,6BAC7BzlB,EAAO44B,qBAAqBnT,4BAA6B,KAUrEvoG,EAAOj8Z,UAAUo9R,UAAY,SAAUx4N,GACnC,IAAI2kB,OAASzpF,EACTuzF,GAAO,EACXzuB,EAAQA,EAAM0yb,kBAAkB,GAChC,IAAK,IAAIx2f,EAAI,EAAGA,EAAI8jE,EAAMgjb,aAAaxmf,OAAQN,IAAK,CAChD,IAAIukE,EAAMT,EAAMgjb,aAAa9mf,GAO7B,GANIukE,EAAIy1b,UAAUrqe,SACd84D,EAASlkB,EAGTguB,GAAO,GAENA,EACD,MAGR,OAAO9J,GAOX0yU,EAAOj8Z,UAAU63gB,gBAAkB,SAAUjf,EAAYvzb,EAAK83N,GAC1D,IAAIziR,EAAS,EACb,GAAI2qD,EAAIuzb,WAAWhR,aAAaxmf,OAAS,GAAKw3f,EAAWhR,aAAa,GAAGkT,UAAUrqe,SAC/E,IAAK,IAAI3vB,EAAI,EAAGA,EAAI83f,EAAWhR,aAAaxmf,OAAQN,IAAK,CACrD,IAAIg3gB,EAAQlf,EAAWhR,aAAa9mf,GACpC,IAAIg3gB,EAAMhd,UAAUrqe,SAIhB,MAHA/V,GAAkB/V,KAAK+/D,aAAaozc,EAAO36O,GAOvD,OAAOziR,GAMXuhZ,EAAOj8Z,UAAU+3gB,kBAAoB,SAAUnwc,GAC9BjjE,KAAKo6e,OAAlB,IAEI8tB,EAAYjlc,EAAKixb,SACNgU,EAAUn7f,EACzB,GAAIm7f,EAAUjlB,aAAaxmf,OAAS,EAAG,CACnC,IAAI42gB,EAAanL,EAAUjlB,aAAailB,EAAUjlB,aAAaxmf,OAAS,GAC7D42gB,EAAWtmgB,EAAIsmgB,EAAWr9f,MAAQq9f,EAAW52e,OAAOhwB,MAUnE,GAPAw2D,EAAKigb,gBAAkBglB,GAGlBzqgB,EAAkBwlE,EAAKixb,WAAoD,YAAvCjxb,EAAKixb,SAASiC,UAAU7F,YAA4B3F,GAAcO,oBAAoBjob,EAAKixb,SAASiC,UAAUpgf,QAAU,GAAwB,IAAnBktD,EAAK41N,YACvKqvO,EAAUnyf,OAASmyf,EAAUnyf,OAAS40e,GAAcO,oBAAoBjob,EAAKixb,SAASiC,UAAUpgf,SAGpE,IAA5BktD,EAAKqxb,WAAWr9N,QAAe,CAC/B,IAAI3B,EAAaryN,EAAKltD,OAASktD,EAAKxmC,OAAO/vB,IAAMu2D,EAAKxmC,OAAO9vB,OACzDu7f,EAAUnyf,OAAS40e,GAAcO,oBAAoBjob,EAAKgxb,WAAWnE,YAAYl5N,aAAetB,IAChG4yO,EAAUnyf,OAASu/Q,EAAaq1N,GAAcO,oBAAoBjob,EAAKgxb,WAAWnE,YAAYl5N,gBAW1G0gI,EAAOj8Z,UAAUk2gB,yBAA2B,SAAUn3B,EAAQk5B,EAA0BtC,EAAiBx4O,EAAe0vO,EAAWqL,EAAYtC,GAC3I,IAAK,IAAI90gB,EAAI,EAAGA,EAAI+rgB,EAAUjlB,aAAaxmf,OAAQN,IAAK,CACpD,IAAIq3gB,EAAc,EACdha,OAAar+f,EAKb87R,EAAU,EAGd,GAFAA,GAHAuiO,EAFkB0O,EAAUjlB,aAAa9mf,IAKpBm4f,WAAWr9N,QAChCu8O,EAAc7oB,GAAcO,oBAAoBsO,EAAWvF,WAAWnE,YAAYl5N,aAC9EK,EAAU,EAAG,CACb,IAAIw8O,EAAwBvL,EAAUhlB,gBAAgBD,aAAa1kf,QAAQ2pgB,GAEvEwL,EAAwBD,EAAwBx8O,EAAU,GAAKixO,EAAUj2f,MAAQunf,EAAW/4N,WAC5F25M,EAAOwtB,WAAWj7f,OAAS6sf,EAAWxsf,EAAIwsf,EAAWzjf,OAASyjf,EAAW/8d,OAAO9vB,QAC7E+mgB,GAAyBD,EAAwB,IACpDzzgB,KAAK2zgB,uBAAuBna,EAAYwX,EAAiBx4O,EAAe4hN,GAE5E,IAAIw5B,EAAmB1L,EACvB,GAAIwL,EAAwB,EACxB,GAAIA,EAAwBxL,EAAUhlB,gBAAgBD,aAAaxmf,OAAQ,CACvE,IAAIo3gB,EAAgB3L,EAAUhlB,gBAAgBD,aAAaywB,GACvDG,aAAyB5hB,KACzB2hB,EAAmBC,KACM5C,IACrB2C,EAAmB1L,QAM3B0L,EAAmB1L,EAAUhlB,gBAAgBD,aAAailB,EAAUhlB,gBAAgBD,aAAaxmf,OAAS,GAG9G+8f,EAAWxsf,EAAIwsf,EAAWzjf,OAASyjf,EAAW/8d,OAAO9vB,OAASingB,EAAiB5mgB,EAAI4mgB,EAAiB79f,OACpGyjf,EAAWzjf,OAAS69f,EAAiB5mgB,EAAI4mgB,EAAiB79f,OAASyjf,EAAWxsf,EAAIwsf,EAAW/8d,OAAO9vB,OAG/F4mgB,GAAcK,GAA4C,IAAvBA,EAAiB5mgB,GAAuC,IAA5B4mgB,EAAiB79f,QAAiByjf,EAAWxsf,EAAIwsf,EAAWzjf,OAASyjf,EAAW/8d,OAAO9vB,OAASingB,EAAiB5mgB,EAAI4mgB,EAAiB79f,SAC1M69f,EAAiB79f,OAASyjf,EAAWxsf,EAAIwsf,EAAWzjf,OAASyjf,EAAW/8d,OAAO9vB,OAASingB,EAAiB5mgB,QAiBzGwmgB,EAAc,GAKVxC,EAAgBv0gB,OAAS,GAAKyrgB,EAAUl7f,IAAMote,EAAOwtB,WAAW56f,GAAKote,aAAkBC,KACvFm5B,GAA4B,GAGpCha,EAAWzjf,OAASmyf,EAAUnyf,OAASyjf,EAAW/8d,OAAO/vB,IAAM8sf,EAAW/8d,OAAO9vB,OAAS6mgB,EAE9FxzgB,KAAK8zgB,0BAA0B15B,EAAQ42B,EAAiBx4O,EAAeghO,GAEvE,IADA,IAAI7H,EAASuW,EAAUhlB,gBAChByO,EAAOzO,2BAA2BuO,IACrCE,EAASA,EAAOzO,gBAEpB,IAAIjzV,OAAO90J,EACPw2f,aAAkBjP,KAClBzyV,EAAO0hW,EAAO1hW,OAGbmqV,aAAkBC,KAA2D,IAAvCD,EAAOqD,aAAal/e,QAAQ0xJ,IAAiBqjX,IACpFtzgB,KAAK+zgB,2BAA2Bva,GAAY,GAAO,KAkB/DliG,EAAOj8Z,UAAUy4gB,0BAA4B,SAAU15B,EAAQ4tB,EAAaxvO,EAAeghO,GACvF,IAAK,IAAIr9f,EAAI,EAAGA,EAAIq9f,EAAWvW,aAAaxmf,OAAQN,IAC5Cq9f,EAAWvW,aAAa9mf,aAAc42f,IACtC/yf,KAAKg0gB,2BAA2BhM,EAAaxvO,EAAeghO,EAAWvW,aAAa9mf,KAShGm7Z,EAAOj8Z,UAAU0kE,aAAe,SAAUW,EAAK83N,GAC3C,IAAIziR,EAAS,EACb,GAAiC,YAA7B2qD,EAAIy1b,UAAU7F,WACdv6e,EAAS2qD,EAAIy1b,UAAUpgf,WAEtB,CACD,IAAK,IAAI5Z,EAAI,EAAGA,EAAIq8R,EAAc/7R,OAAQN,IAClCq8R,EAAcr8R,aAAc81f,KAC5Bl8e,EAASyiR,EAAcr8R,GAAG4Z,OAASA,GAG3CA,EAAS1J,KAAKC,IAAIyJ,EAAQ2qD,EAAIy1b,UAAUpgf,QAE5C,OAAOA,GAQXuhZ,EAAOj8Z,UAAUs4gB,uBAAyB,SAAUna,EAAYwX,EAAiBx4O,EAAe4hN,GAC5F,IAAI03B,EAAe9xgB,KAAKsygB,kBAAkBl4B,EAAOwtB,WAAWj7f,QAAQ,EAAOqkgB,EAAiBx4O,EAAeghO,GACtG/7f,EAAkBq0gB,IAEnB13B,EAAOy3B,oBAAoBrtgB,KAAKstgB,IASxCx6G,EAAOj8Z,UAAUg3gB,0BAA4B,SAAUj4B,EAAQ42B,EAAiB9I,EAAW+L,GACvF,IAAIzngB,EAAO07f,EAAUn7f,EACjBgpf,EAAa,EACjBA,EAAa/1f,KAAK61f,cAAcqS,EAAUjU,YAC1C,IAAK,IAAI93f,EAAI,EAAGA,EAAI+rgB,EAAUjlB,aAAaxmf,OAAQN,IAAK,CACpD,IAAIq9f,EAAa0O,EAAUjlB,aAAa9mf,GACxC,GAAIkQ,KAAKoxB,MAAMjxB,GAAQH,KAAKoxB,MAAM+7d,EAAWzsf,EAAIysf,EAAW/8d,OAAOjwB,MAAO,CACtE,GAAIxM,KAAKk0gB,uBAAuBhM,EAAW9tB,EAAQ5te,EAAMrQ,GAAI,CACzDA,IACA,SAEJ,IAAIs+B,EAAWyte,EAAUjlB,aAAaxmf,OAEtC,GADAuD,KAAKm0gB,8BAA8BjM,EAAW8I,EAAiBxkgB,EAAMrQ,EAAG83gB,GACpEx5e,EAAWyte,EAAUjlB,aAAaxmf,OAAQ,CAC1CN,IACA,UAIR,GADAqQ,GAAQgtf,EAAW/8d,OAAOjwB,KAAOgtf,EAAWxjf,MAAQwjf,EAAW/8d,OAAOhwB,MAClEtQ,IAAM+rgB,EAAUjlB,aAAaxmf,OAAS,GAAK4P,KAAKoxB,MAAMjxB,GAAQH,KAAKoxB,MAAMyqe,EAAUn7f,EAAIgpf,GAA3F,CACI,GAAI/1f,KAAKk0gB,uBAAuBhM,EAAW9tB,EAAQ5te,EAAMrQ,EAAI,GACzD,SAEJ6D,KAAKm0gB,8BAA8BjM,EAAW8I,EAAiBxkgB,EAAMrQ,EAAI,EAAG83gB,SAMpF,IAAKx2gB,EAAkByqgB,EAAUjlB,eAAmD,IAAlCilB,EAAUjlB,aAAaxmf,SAAiB29e,EAAOy3B,oBAAoBp1gB,OAAS,EAC1H,IAAK,IAAI8mB,EAAI,EAAGA,EAAI62d,EAAOy3B,oBAAoBp1gB,OAAQ8mB,IAAK,CACxD,IAAIoue,EAASvX,EAAOy3B,oBAAoBtuf,GACxC,GAAIlX,KAAKoxB,MAAMjxB,IAASH,KAAKoxB,MAAMk0d,EAAO5kf,EAAI4kf,EAAOl1d,OAAOjwB,MAAO,CAC/D,GAAIxM,KAAKk0gB,uBAAuBhM,EAAW9tB,EAAQ5te,EAAM+W,GAAI,CACzDA,IACA,SAEJ,IAAIzE,EAAQopf,EAAUjlB,aAAaxmf,OAEnC,GADAuD,KAAKm0gB,8BAA8BjM,EAAW8I,EAAiBxkgB,EAAM+W,EAAG0wf,GACpEn1f,EAAQopf,EAAUjlB,aAAaxmf,OAAQ,CACvC8mB,IACA,UAIR,GADA/W,GAAQmlf,EAAOl1d,OAAOjwB,KAAOmlf,EAAO37e,MAAQ27e,EAAOl1d,OAAOhwB,MACtD8W,IAAM2kf,EAAUjlB,aAAaxmf,OAAS,GAAK4P,KAAKoxB,MAAMjxB,GACtDH,KAAKoxB,MAAMyqe,EAAUn7f,EAAIgpf,GAD7B,CAEI,GAAI/1f,KAAKk0gB,uBAAuBhM,EAAW9tB,EAAQ5te,EAAM+W,EAAI,GACzD,SAEJvjB,KAAKm0gB,8BAA8BjM,EAAW8I,EAAiBxkgB,EAAM+W,EAAI,EAAG0wf,SAKpF75B,EAAOy3B,oBAAoBp1gB,OAAS,IACpC29e,EAAOy3B,yBAUfv6G,EAAOj8Z,UAAU64gB,uBAAyB,SAAUhM,EAAW9tB,EAAQ5te,EAAMyF,GACzE,IAAI2kR,EAAc,EACdsxO,EAAUjU,WAAWnE,YAAYl5N,YAAc,IAC/CA,EAAc+zN,GAAcO,oBAAoBgd,EAAUjU,WAAWnE,YAAYl5N,cAErF,IAAK,IAAIz6R,EAAI,EAAGA,EAAIi+e,EAAOy3B,oBAAoBp1gB,OAAQN,IAAK,CACxD,IAAI21gB,EAAe13B,EAAOy3B,oBAAoB11gB,GAC9C,GAAIkQ,KAAKoxB,MAAMjxB,KAAUH,KAAKoxB,MAAMq0e,EAAa/kgB,EAAI+kgB,EAAar1e,OAAOjwB,MAQrE,OAPA07f,EAAUjlB,aAAa56d,OAAOpW,EAAO,EAAG6/f,GACxCA,EAAa5uB,gBAAkBglB,EAE3B4J,EAAa9kgB,IAAMk7f,EAAUl7f,EAAI8kgB,EAAar1e,OAAO/vB,IAAMkqR,GAC3D52R,KAAKizgB,0BAA0B/K,EAAUl7f,EAAGk7f,GAEhD9tB,EAAOy3B,wBACA,EAGf,OAAO,GASXv6G,EAAOj8Z,UAAU84gB,8BAAgC,SAAUl1O,EAAY+xO,EAAiBxkgB,EAAMyF,EAAOgigB,GAEjG,IAAK,IADDjM,EAAcgJ,EAAgBA,EAAgBv0gB,OAAS,GAClDN,EAAI83gB,EAAkB93gB,GAAK,EAAGA,IAGnC,IAAK,IAFD+rgB,EAAYF,EAAY/kB,aAAa9mf,GACrCi4gB,EAAelM,EAAUn7f,EACpBwW,EAAI,EAAGA,EAAI2kf,EAAUjlB,aAAaxmf,OAAQ8mB,IAAK,CACpD,IAAI0zQ,EAAU,EACVuiO,EAAa0O,EAAUjlB,aAAa1/d,GACxC,GAAIlX,KAAKoxB,MAAMjxB,KAAUH,KAAKoxB,MAAM22e,GAAe,CAG/C,IAFAn9O,EAAWx5R,EAAkB+7f,IAAe/7f,EAAkB+7f,EAAWlF,YAAer9N,EACpFuiO,EAAWlF,WAAWr9N,SACZ,EAAG,CACb,IAAIo9O,EAAkBr0gB,KAAKs0gB,iBAAiB9a,GAC5Cv6N,EAAWgkN,aAAa56d,OAAOpW,EAAO,EAAGoigB,GACzCA,EAAgBnxB,gBAAkBjkN,EAEtC,OAEJm1O,GAAgB5a,EAAW/8d,OAAOjwB,KAAOgtf,EAAWxjf,MAAQwjf,EAAW/8d,OAAOhwB,QAW1F6qZ,EAAOj8Z,UAAUi3gB,kBAAoB,SAAU3lgB,EAAQ4ngB,EAAoBvD,EAAiBx4O,EAAeghO,GACvG,IAAI1E,OAAiB35f,EACrB,GAAIq+f,EAAWxsf,EAAIwsf,EAAWzjf,OAASpJ,EAAS6sf,EAAW/8d,OAAO9vB,OAC9D,IAAK,IAAIxQ,EAAI,EAAGA,EAAIq9f,EAAWvW,aAAaxmf,OAAQN,IAChD,GAAIq9f,EAAWvW,aAAa9mf,aAAc2mf,GAAiB,CACvD,IAAIqa,EAAkB3D,EAAWvW,aAAa9mf,GAC1Cq4gB,EAAex0gB,KAAKy0gB,yBAAyB9ngB,EAAS6sf,EAAW/8d,OAAO9vB,OAAQwwf,GACpF,IAAK1/f,EAAkB+2gB,GAAe,CAClC,GAAU,IAANr4gB,GAAWq4gB,IAAiBrX,EAE5B,OAAO3D,GAE4C,IAAnDA,EAAWvW,aAAa1kf,QAAQi2gB,KAChChb,EAAWvW,aAAa56d,OAAOmxe,EAAWvW,aAAa1kf,QAAQi2gB,GAAe,GAC9Er4gB,KAEJq9f,EAAWzjf,QAAUy+f,EAAaz+f,OAC9BtY,EAAkBq3f,KAElBA,EAAiB90f,KAAKs0gB,iBAAiB9a,IAE3C1E,EAAe/+e,QAAUy+f,EAAaz+f,OACtC++e,EAAe7R,aAAaz+e,KAAKgwgB,GACjCA,EAAatxB,gBAAkB4R,OAGlC,CACD,IAAIkT,EAAcxO,EAAWvW,aAAa9mf,GACtCu4gB,GAAY1M,GAEhB,GAAIr7f,EAAS6sf,EAAW/8d,OAAO9vB,OAASq7f,EAAYh7f,EAAIg7f,EAAYjyf,OAAQ,CACxE,IAAI4+f,EAAc3M,EAAYjyf,OAE1B6+f,EAAgB50gB,KAAK60gB,0BAA0BlogB,EAAS6sf,EAAW/8d,OAAO9vB,OAAQ+ngB,EAAU1M,GAChG,IAAKvqgB,EAAkBm3gB,GAAgB,CACnC,GAAU,IAANz4gB,GAAWy4gB,IAAkB5M,EAE7B,OAAOxO,GAE6C,IAApDA,EAAWvW,aAAa1kf,QAAQq2gB,IAChCpb,EAAWvW,aAAa56d,OAAOmxe,EAAWvW,aAAa1kf,QAAQq2gB,GAAgB,GAC/Ez4gB,IACAq9f,EAAWzjf,QAAU6+f,EAAc7+f,QAGnCyjf,EAAWzjf,QAAU4+f,EAAc3M,EAAYjyf,OAE/CtY,EAAkBq3f,KAElBA,EAAiB90f,KAAKs0gB,iBAAiB9a,IAE3C1E,EAAe/+e,QAAU6+f,EAAc7+f,OACvC++e,EAAe7R,aAAaz+e,KAAKowgB,GACjCA,EAAc1xB,gBAAkB4R,IAUpD,OAJIr3f,EAAkBq3f,IAAmByf,IAErCzf,EAAiB90f,KAAKs0gB,iBAAiB9a,IAEpC1E,GAOXx9F,EAAOj8Z,UAAUkwgB,oBAAsB,SAAUvugB,GAC7C,OAAQA,GACJ,KAAK,EACD,MAAO,SACX,KAAK,EACD,MAAO,UACX,KAAK,EACD,MAAO,WACX,KAAK,EACD,MAAO,WACX,KAAK,EACD,MAAO,YACX,KAAK,EACD,MAAO,UACX,KAAK,EACD,MAAO,SACX,KAAK,EACD,MAAO,cACX,KAAK,EACD,MAAO,cACX,KAAK,EACD,MAAO,SACX,KAAK,GACD,MAAO,UACX,KAAK,GACD,MAAO,UACX,QACI,MAAO,SAOnBs6Z,EAAOj8Z,UAAUi5gB,iBAAmB,SAAUrxc,GAC1C,IAAIu2b,EAAa,IAAIzH,GAUrB,OATAyH,EAAWlF,WAAarxb,EAAKqxb,WAC7BkF,EAAWvnf,MAAQgxD,EAAKhxD,MACxBunf,EAAW/4N,SAAWx9N,EAAKw9N,SAC3B+4N,EAAW7xL,YAAc1kQ,EAAK0kQ,YAC9B6xL,EAAWtW,gBAAkBjgb,EAAKigb,gBAClCljf,KAAKuygB,qBAAqBtvc,EAAMu2b,GAChCA,EAAW/8d,OAASwmC,EAAKxmC,OACzB+8d,EAAWtE,gBAAkBvK,GAAcO,oBAAoBjob,EAAKiyb,iBACpEsE,EAAWrE,iBAAmBxK,GAAcO,oBAAoBjob,EAAKkyb,kBAC9DqE,GAKXliG,EAAOj8Z,UAAUy5gB,kBAAoB,SAAU70c,GAC3C,IAAI80c,EAAW,IAAIhiB,GASnB,OARI9yb,EAAM2kB,SACNmwb,EAASnwb,OAAS3kB,EAAM2kB,OACxBmwb,EAASnc,aAAe34b,EAAM24b,cAElCmc,EAAS9igB,MAAQguD,EAAMhuD,MACvB8igB,EAASjlB,YAAc7vb,EAAM6vb,YAC7BilB,EAASzf,YAAcr1b,EAAMq1b,YAC7Byf,EAASle,cAAgB52b,EAAM42b,cACxBke,GAOXz9G,EAAOj8Z,UAAUo5gB,yBAA2B,SAAU9ngB,EAAQwwf,GAG1D,IAAK,IAFD6X,EAAa7X,EAAgBnwf,EAC7B8nf,OAAiB35f,EACZgB,EAAI,EAAGA,EAAIghgB,EAAgBla,aAAaxmf,OAAQN,IAAK,CAC1D,IAAIkigB,EAAalB,EAAgBla,aAAa9mf,GAC9C,GAAIwQ,EAASqogB,EAAa3W,EAAWtof,OAAQ,CACzC,GAAU,IAAN5Z,EAAS,CACT,GAAIkigB,EAAWxb,UAAUK,2BAA2B6O,IAE5CsM,EAAWxb,UAAUK,gBAAgBl2e,IAAMmwf,EAAgBnwf,EAAG,CAC9DgogB,GAAc3W,EAAWtof,OACzB,SAGR++e,EAAiBqI,EACjB,OAEsD,IAAtDA,EAAgBla,aAAa1kf,QAAQ8/f,KACrClB,EAAgBla,aAAa56d,OAAO80e,EAAgBla,aAAa1kf,QAAQ8/f,GAAa,GACtFligB,KAEJghgB,EAAgBpnf,QAAUsof,EAAWtof,OACjCtY,EAAkBq3f,KAElBA,EAAiB,IAAIhS,IACN9E,gBAAkBmf,EAAgBnf,gBACjD8W,EAAelX,gBAAkBuf,EAAgBvf,gBACjDkX,EAAe7if,MAAQkrf,EAAgBlrf,MACvCjS,KAAKuygB,qBAAqBpV,EAAiBrI,GAC3CA,EAAe/+e,OAASsof,EAAWtof,QAGnC++e,EAAe/+e,QAAUsof,EAAWtof,OAExC++e,EAAe7R,aAAaz+e,KAAK65f,GACjCA,EAAWxb,UAAYiS,EAE3BkgB,GAAc3W,EAAWtof,OAE7B,OAAO++e,GASXx9F,EAAOj8Z,UAAUw5gB,0BAA4B,SAAUlogB,EAAQqkgB,EAAiBhJ,GAG5E,IAAK,IAFDiN,EAAYjN,EAAYh7f,EACxB8nf,OAAiB35f,EACZgB,EAAI,EAAGA,EAAI6rgB,EAAY/kB,aAAaxmf,OAAQN,IAAK,CACtD,IAAI+rgB,OAAY/sgB,EAKZ6kE,GAFJkoc,EAFkBF,EAAY/kB,aAAa9mf,IAIjB4Z,OAC1B,GAAIpJ,EAASsogB,EAAYj1c,IAAcviE,EAAkBq3f,GAAiB,CAGtE,IAAIogB,OAAc/5gB,EACdg6gB,GAA2B,EAQ/B,GAPK13gB,EAAkByqgB,IAAezqgB,EAAkByqgB,EAAU/R,aAC9Dgf,EAA2BjN,EAAU/R,UAAUxF,uBAE/CwkB,IAEAD,EAAez3gB,EAAkBq3f,IAAmB90f,KAAKmygB,qBAAqBxlgB,EAAQu7f,GAAclogB,KAAKoygB,wBAAwBzlgB,EAAQqkgB,GAAkB9I,GAAYA,GAAaA,IAEnLzqgB,EAAkBy3gB,GAAc,CACjC,GAAU,IAAN/4gB,GAAW+4gB,IAAgBhN,EAE3B,OAAOF,GAE4C,IAAnDA,EAAY/kB,aAAa1kf,QAAQ22gB,IACjClN,EAAY/kB,aAAa56d,OAAO2/e,EAAY/kB,aAAa1kf,QAAQ22gB,GAAc,GAC/E/4gB,IACA6rgB,EAAYjyf,QAAUm/f,EAAYn/f,QAGlCiyf,EAAYjyf,QAAUiqD,EAAYkoc,EAAUnyf,OAE5CtY,EAAkBq3f,IAElBA,EAAiB90f,KAAK80gB,kBAAkB9M,GACxChogB,KAAKuygB,qBAAqBvK,EAAalT,GACvCA,EAAe/+e,OAASm/f,EAAYn/f,QAGpC++e,EAAe/+e,QAAUm/f,EAAYn/f,OAEzC++e,EAAe7R,aAAaz+e,KAAK0wgB,GACjCA,EAAYhyB,gBAAkB4R,GAGtCmgB,GAAa/M,EAAUnyf,OAE3B,OAAO++e,GAOXx9F,EAAOj8Z,UAAU+5gB,sBAAwB,SAAUzogB,EAAQ0ogB,GACvD,IAAIhX,EAAagX,EAAWpyB,aAAa,GACrCqyB,EAAajX,EAAWxb,UAAUK,gBAMtC,GAAIljf,KAAKo6e,OAAOm7B,8BACZ,GAAIv1gB,KAAKo6e,OAAO+rB,iBAAiBn5f,IAAMhN,KAAKo6e,OAAOwtB,WAAW56f,GAAKqogB,EAAWrogB,EAAIqxf,EAAWtof,QAAUpJ,EACnG,OAAO,OAKX,GAAI2ogB,EAAWrhB,WAAWG,cAAe,CAErC,IAAIohB,OAAsBr6gB,EAM1B,GALIm6gB,EAAWpyB,2BAA2B+O,IACtCqjB,EAAWpyB,gBAAgBA,2BAA2B6P,IACnDuiB,EAAWpyB,gBAAgBA,gBAAgBA,2BAA2B6O,KACzEyjB,EAAsBF,EAAWpyB,gBAAgBA,gBAAgBA,kBAEhEzlf,EAAkB+3gB,IAAwBF,EAAWpyB,gBAAgBl2e,IAAMwogB,EAAoBxogB,GAC7FqogB,EAAWrogB,EAAIqxf,EAAWtof,QAAUpJ,EACvC,OAAO,OAGV,GAAI2ogB,EAAWpyB,gBAAgBl2e,IAAMhN,KAAKo6e,OAAOwtB,WAAW56f,GAAKqogB,EAAWrogB,EAAIqxf,EAAWtof,QAAUpJ,EACtG,OAAO,EAGf,OAAQ0ogB,EAAWrogB,EAAIqxf,EAAWtof,QAAUpJ,GAQhD2qZ,EAAOj8Z,UAAUo6gB,uBAAyB,SAAU9ogB,EAAQq7f,GACxD,IAAIE,OAAY/sgB,EACZu6gB,GAAQ,EAQZ,OALAxN,EAFkBF,EAAY/kB,aAAa,GAItCxlf,EAAkByqgB,KACnBwN,EAAQ11gB,KAAKmygB,qBAAqBxlgB,EAAQu7f,IAEvCwN,GAOXp+G,EAAOj8Z,UAAU82gB,qBAAuB,SAAUxlgB,EAAQu7f,GACtD,IAAK,IAAI/rgB,EAAI,EAAGA,EAAI+rgB,EAAUjlB,aAAaxmf,OAAQN,IAAK,CACpD,IAAIq9f,EAAa0O,EAAUjlB,aAAa9mf,GACxC,IAAK6D,KAAK21gB,sBAAsBhpgB,EAAQ6sf,GACpC,OAAO,EAGf,OAAO,GAOXliG,EAAOj8Z,UAAUs6gB,sBAAwB,SAAUhpgB,EAAQ6sf,GACvD,GAAuC,IAAnCA,EAAWvW,aAAaxmf,OACxB,OAAO,EAEX,GAAI+8f,EAAWvW,aAAa,aAAcH,GAAiB,CACvD,IAAIuyB,EAAa7b,EAAWvW,aAAa,GACzC,OAAOjjf,KAAKo1gB,sBAAsBzogB,EAAS6sf,EAAW/8d,OAAO9vB,OAAQ0ogB,GAGrE,IAAIrN,EAAcxO,EAAWvW,aAAa,GAC1C,OAAOjjf,KAAKy1gB,uBAAuB9ogB,EAAS6sf,EAAW/8d,OAAO9vB,OAAQq7f,IAQ9E1wG,EAAOj8Z,UAAUk3gB,qBAAuB,SAAU5gB,EAAQ1xb,GACtDA,EAAMlzD,EAAI4kf,EAAO5kf,EACjBkzD,EAAMjzD,EAAI2kf,EAAO3kf,EACjBizD,EAAMjqD,MAAQ27e,EAAO37e,OAQzBshZ,EAAOj8Z,UAAUu6gB,4BAA8B,SAAUlpgB,EAAKs7f,GAC1D,IAAK,IAAI7rgB,EAAI,EAAGA,EAAI6rgB,EAAY/kB,aAAaxmf,OAAQN,IAAK,CACtD,IAAI+rgB,EAAYF,EAAY/kB,aAAa9mf,GACzC+rgB,EAAUn7f,EAAIm7f,EAAUn7f,EACxBm7f,EAAUl7f,EAAIN,EACd1M,KAAKizgB,0BAA0BvmgB,EAAKw7f,GACpCx7f,GAAOw7f,EAAUnyf,SASzBuhZ,EAAOj8Z,UAAU43gB,0BAA4B,SAAUvmgB,EAAKw7f,GACxD,IAAIhjJ,EAAU,EACVgjJ,EAAUjU,WAAWnE,YAAYl5N,YAAc,IAC/CsuF,EAAUylI,GAAcO,oBAAoBgd,EAAUjU,WAAWnE,YAAYl5N,cAEjF,IAAK,IAAIz6R,EAAI,EAAGA,EAAI+rgB,EAAUjlB,aAAaxmf,OAAQN,IAAK,CACpD,IAAIq9f,EAAa0O,EAAUjlB,aAAa9mf,GACxCq9f,EAAWzsf,EAAIysf,EAAWzsf,EAC1Bysf,EAAWxsf,EAAIN,EAAM8sf,EAAW/8d,OAAO/vB,IAAMw4W,EAC7CllX,KAAK61gB,2BAA2Brc,EAAWxsf,EAAGwsf,KAQtDliG,EAAOj8Z,UAAUw6gB,2BAA6B,SAAUnpgB,EAAK8sf,GACzD,IAAK,IAAIr9f,EAAI,EAAGA,EAAIq9f,EAAWvW,aAAaxmf,OAAQN,IAChDq9f,EAAWvW,aAAa9mf,GAAG4Q,EAAIysf,EAAWvW,aAAa9mf,GAAG4Q,EAC1Dysf,EAAWvW,aAAa9mf,GAAG6Q,EAAIN,EAC3B8sf,EAAWvW,aAAa9mf,aAAc42f,IACtC/yf,KAAK41gB,4BAA4BlpgB,EAAK8sf,EAAWvW,aAAa9mf,IAElEuQ,GAAO8sf,EAAWvW,aAAa9mf,GAAG4Z,QAU1CuhZ,EAAOj8Z,UAAU04gB,2BAA6B,SAAUva,EAAYsc,EAAe1hB,GAC/E,GAAIoF,EAAWvF,WAAW/Q,2BAA2BR,IAAc0R,EAAe,CAC9E,IAAIrqG,EAAe/pZ,KAAK+1gB,gBAAgBvc,EAAYsc,GAEpD91gB,KAAKg2gB,kCAAkCxc,EAAYzvG,EAAc+rH,KASzEx+G,EAAOj8Z,UAAU26gB,kCAAoC,SAAUxc,EAAYzvG,EAAc+rH,GACrF,GAAqB,IAAjB/rH,EAIJ,IAAK,IADDr8X,EAAW8re,EAAWxsf,EAAI+8Y,EACrB5tZ,EAAI,EAAGA,EAAIq9f,EAAWvW,aAAaxmf,OAAQN,IAC5Cq9f,EAAWvW,aAAa9mf,aAAc2mf,GACtC0W,EAAWvW,aAAa9mf,GAAG6Q,EAAI0gB,EAG/BA,EAAW1tB,KAAKi2gB,0BAA0Bzc,EAAWvW,aAAa9mf,GAAIuxB,EAAUoof,GAEpFpof,GAAsB8re,EAAWvW,aAAa9mf,GAAG4Z,QASzDuhZ,EAAOj8Z,UAAU46gB,0BAA4B,SAAUjO,EAAat6e,EAAUoof,GAC1E9N,EAAYh7f,EAAI0gB,GAAsBs6e,EAAY5S,eAElD,IAAK,IAAIj5f,EAAI,EAAGA,EAAI6rgB,EAAY/kB,aAAaxmf,OAAQN,IAAK,CACtD,IAAI+rgB,EAAYF,EAAY/kB,aAAa9mf,GACzC+rgB,EAAUl7f,EAAI0gB,EACd,IAAK,IAAInK,EAAI,EAAGA,EAAI2kf,EAAUjlB,aAAaxmf,OAAQ8mB,IAAK,CACpD,IAAIi2e,EAAa0O,EAAUjlB,aAAa1/d,GACxCi2e,EAAWxsf,EAAI0gB,EAAW8re,EAAW/8d,OAAO/vB,IANlC,EAOV1M,KAAK+zgB,2BAA2Bva,EAAYsc,GAAe,GAE/Dpof,GAAsBw6e,EAAUnyf,OAEpC,OAAO2X,GAOX4pY,EAAOj8Z,UAAU06gB,gBAAkB,SAAUvc,EAAYsc,GAErD,IAAI91c,EAAY,EACZkoc,EAAY1O,EAAWtW,gBACvB9pb,EAAUogc,EAAW/8d,OAAO/vB,IAAM8sf,EAAW/8d,OAAO9vB,OAEpDqzD,GADCviE,EAAkB+7f,EAAWlF,aAAekF,EAAWlF,WAAWr9N,QAAU,EACjEuiO,EAAWzjf,QAGRtY,EAAkByqgB,GAAgC,EAAnBA,EAAUnyf,QAAcqjD,EAG1E,IAAI88c,EAAoBl2gB,KAAK8tgB,qBAAqBtU,GAE9CzvG,EAAe,EAUnB,OATI/pV,EAAYk2c,IACZnsH,EAAe/pV,EAAYk2c,EACqB,WAA5C1c,EAAWlF,WAAW5gc,kBACtBq2V,GAA8B,GAEoB,QAA5CyvG,EAAWlF,WAAW5gc,mBAA+Boid,KAC3D/rH,EAAe,IAGhBA,GAMXuN,EAAOj8Z,UAAUyygB,qBAAuB,SAAUtU,GAC9C,GAAI/7f,EAAkB+7f,EAAWvW,cAC7B,OAAO,EAGX,IAAK,IADDljG,EAAgB,EACX5jZ,EAAI,EAAGA,EAAIq9f,EAAWvW,aAAaxmf,OAAQN,IAC5Cq9f,EAAWvW,aAAa9mf,GACxB4jZ,GAAiBy5G,EAAWvW,aAAa9mf,GAAG4Z,OAMpD,OAAOgqY,GAOXuX,EAAOj8Z,UAAU86gB,mBAAqB,SAAUlhP,GAC5C,GAAKx3R,EAAkBw3R,EAAQzoR,MAG1B,CACD,IAAI83B,EAAS,IAAIyod,GAAQ93N,GAGzB,OAFA3wP,EAAOy8R,UAAY,SACnBz8R,EAAO8oD,UAAY,IACZ9oD,EANP,OAAO2wP,EAAQzoR,MAcvB8qZ,EAAOj8Z,UAAU+6gB,oBAAsB,SAAUnhP,GAC7C,GAAKx3R,EAAkBw3R,EAAQxoR,OAG1B,CACD,IAAI63B,EAAS,IAAIyod,GAAQ93N,GAGzB,OAFA3wP,EAAOy8R,UAAY,SACnBz8R,EAAO8oD,UAAY,IACZ9oD,EANP,OAAO2wP,EAAQxoR,OAcvB6qZ,EAAOj8Z,UAAUg7gB,kBAAoB,SAAUphP,GAC3C,GAAKx3R,EAAkBw3R,EAAQvoR,KAG1B,CACD,IAAI43B,EAAS,IAAIyod,GAAQ93N,GAGzB,OAFA3wP,EAAOy8R,UAAY,SACnBz8R,EAAO8oD,UAAY,IACZ9oD,EANP,OAAO2wP,EAAQvoR,KAcvB4qZ,EAAOj8Z,UAAUi7gB,qBAAuB,SAAUrhP,GAC9C,GAAKx3R,EAAkBw3R,EAAQtoR,QAG1B,CACD,IAAI23B,EAAS,IAAIyod,GAAQ93N,GAGzB,OAFA3wP,EAAOy8R,UAAY,SACnBz8R,EAAO8oD,UAAY,IACZ9oD,EANP,OAAO2wP,EAAQtoR,QAcvB2qZ,EAAOj8Z,UAAUk7gB,wBAA0B,SAAU7gB,GACjD,IACIqE,OAAa5+f,EAGjB,OAFA4+f,EAAarE,EAAUpB,WAAWr/N,QACf8kO,EAAWrL,YAQlCp3F,EAAOj8Z,UAAUm7gB,0BAA4B,SAAU9gB,GACnD,IACIqE,OAAa5+f,EAGjB,OAFA4+f,EAAarE,EAAUpB,WAAWr/N,QACb8kO,EAAWtL,cAQpCn3F,EAAOj8Z,UAAUw6f,cAAgB,SAAU51b,GAEvC,IAAK,IADDjqD,EAAQ,EACH7Z,EAAI,EAAGA,EAAI8jE,EAAMgjb,aAAaxmf,OAAQN,IAAK,CAGhD,IAAK,IAFDukE,EAAMT,EAAMgjb,aAAa9mf,GACzB2gS,EAAW,EACNv5Q,EAAI,EAAGA,EAAIm9C,EAAIuib,aAAaxmf,OAAQ8mB,IAAK,CAC9C,IAAI0/C,EAAOvC,EAAIuib,aAAa1/d,GAC5Bu5Q,GAAY6tN,GAAcO,oBAAoBjob,EAAKqxb,WAAWj/N,WAE9Dr/Q,EAAQ8mR,IACR9mR,EAAQ8mR,GAGhB,OAAO9mR,GAMXshZ,EAAOj8Z,UAAUo7gB,qBAAuB,SAAUC,EAAUt8B,GACxD,IAAI4Z,EAAQ0iB,EACR5hB,EAAiBd,EAAMrB,kBACvB+T,EAAY5R,EAAeA,EAAer4f,OAAS,GAAG61f,oBACtD70f,EAAkBipgB,IAAc1mgB,KAAKo6e,OAAOu8B,eAAiB3iB,KAC7Dh0f,KAAKo6e,OAAOu8B,kBAAex7gB,GAG/B,IADA,IAAIy7gB,GAAsB,EACnBlQ,aAAqBnU,IAAa,CACrC,IAAIskB,OAAgB17gB,EAChB24Q,EAASkgP,EAAMrB,kBACnBkkB,EAAgB/iQ,EAAOA,EAAOr3Q,OAAS,GAKvCu3f,EAAQ0S,EACJtsB,EAAOu8B,eAAiB3iB,IACxB5Z,EAAOu8B,kBAAex7gB,GAE1By7gB,GAAsB,EACtB,IAAI3a,OAAa9ggB,EAGjB,GAFA8ggB,EAAajI,EAAMrB,kBAAkB,GAEH,IAA9BvY,EAAOmwB,YAAY9tgB,SAAiBgB,EAAkBw+f,IAAe4a,EAAc3zB,kBAAoB+Y,EAAW/Y,iBAC9GyH,GAAcltd,MAAMw+d,EAAWjvf,EAAG,KAAO29e,GAAcltd,MAAMo5e,EAAc7pgB,EAAI6pgB,EAAc9ggB,OAAQ,GAAK,CACzGtY,EAAkB28e,EAAOu8B,gBAC1Bv8B,EAAOu8B,aAAe3iB,GAE1B,MAGJ,GADA4iB,GAAsB,EAClBx8B,EAAOkV,MAAM9jB,mBAAmD,IAA9B4O,EAAOmwB,YAAY9tgB,OAAc,CACnE29e,EAAOu8B,aAAe3iB,EACtB,MAGAA,EAAQA,EAAMnB,cAAc7yf,KAAKo6e,QACjC,IAAIyI,OAAY,EACZg0B,EAAc3zB,kBAAoB8Q,EAAM9Q,iBAExCljf,KAAK82gB,sBAAsB9iB,EAAO6iB,EAAc3zB,gBAAiB2zB,EAAcjlB,aAAe,GAAG,GAEjGoC,aAAiBjB,IACjB/yf,KAAKqngB,iBAAiBrT,GAAO,GAAM,GACnCA,EAAM6C,eAAgB,EACtBhU,EAAY7if,KAAKo6e,OAAOxqa,UAAUmnc,6BAA6B/iB,IAG/DnR,EAAYmR,EAEXh0f,KAAKo6e,OAAOkV,MAAsB,kBAAKtvf,KAAKo6e,OAAOkV,MAAM5U,cAC1D16e,KAAKo6e,OAAOkV,MAAM5U,aAAas8B,qBAAqBn0B,GAExDzI,EAAOusB,yBAAyB3S,GAAO,GACvCh0f,KAAKo6e,OAAOvpb,OAAO+1c,YAAY5S,EAAO,GACtC5Z,EAAOusB,yBAAyB3S,GAAO,GAG3C0S,GADA5R,EAAiB4R,EAAU/T,mBACAmC,EAAer4f,OAAS,GAAG61f,mBAErDlY,EAAOkV,MAAM9jB,mBAAqBxre,KAAKo6e,OAAOu8B,eAAiB3iB,GAChEh0f,KAAKo6e,OAAOkV,MAAM5U,aAAau8B,uBAAuBjjB,EAAO4iB,IAMrEt/G,EAAOj8Z,UAAU67gB,wBAA0B,SAAUr0B,EAAWs0B,EAAiBxrT,GAE7E,IAAIj/M,EAAM1M,KAAKo6e,OAAOxqa,UAAUkvM,OAAOq4P,GACnC3qgB,EAAOxM,KAAKo6e,OAAOwtB,WAAW76f,EAClC/M,KAAKo6e,OAAO2wB,WAAWr+f,GACvB1M,KAAKo6e,OAAOiwB,YAAY79f,IAK5B8qZ,EAAOj8Z,UAAU+7gB,eAAiB,SAAUpjB,GAExC,IADA,IAAIrC,EAASqC,EACNrC,EAAOzO,iBAAiB,CAC3B,GAAIyO,EAAOzO,2BAA2BkQ,GAClC,OAAOzB,EAEXA,EAASA,EAAOzO,kBAOxB5rF,EAAOj8Z,UAAUg8gB,kBAAoB,SAAUla,EAAiBhsP,EAAWmmQ,GACnEt3gB,KAAKo6e,OAAOu8B,eAAiBxZ,GAC7Bn9f,KAAKu3gB,2BAA2Bpa,EAAgBlrf,MAAOkrf,EAAgBja,gBAAiBia,GAAiB,GAGzGA,EAAgB/I,cAChBp0f,KAAKw3gB,cAAcra,GAGnBn9f,KAAKy3gB,aAAata,EAAiBhsP,GAEnCgsP,EAAgBxU,sBAAsBuJ,KAC6B,IAAnEiL,EAAgBxU,WAAW6K,iBAAiBj1f,QAAQ,WACpDyB,KAAKgugB,yBAAyB7Q,EAAgBxU,WAAY3of,KAAKo6e,SAMvE9iF,EAAOj8Z,UAAUm8gB,cAAgB,SAAUxjB,GAEvC,IAAI/zb,EAAQjgE,KAAKo3gB,eAAepjB,GAI5Buc,EAAetwc,EAAM4yb,cAAc7yf,KAAKo6e,QAC5Cm2B,EAAa1Z,eAAgB,EAC7B0Z,EAAa3Z,oBACb2Z,EAAa1Z,eAAgB,EAC7B,IAAIlO,EAAa4nB,EAAartB,gBAU9B,GATIljf,KAAKo6e,OAAOkV,MAAMye,uBAAyB/Z,EAAM0jB,kBACjD/uB,EAAW5ye,QAAUw6f,EAAax6f,OAElC/V,KAAKo6e,OAAOu9B,2BAA2B13c,EAAM0ob,WAAWhG,cAAe3if,KAAKo6e,OAAOw9B,gBAAgB33c,GAAQ0ob,EAAW14V,OAGtHjwJ,KAAKo6e,OAAOszB,iBAAiB/kB,EAAWhG,cAAegG,EAAW14V,MAGlEjwJ,KAAKo6e,OAAOkV,MAAM7U,kBAAoBz6e,KAAKo6e,OAAOkV,MAAM5U,aAAc,CACtE,IAAIm9B,EAAU73gB,KAAKo6e,OAAOxqa,UAAUmnc,6BAA6BxG,GACjEvwgB,KAAKo6e,OAAOkV,MAAM5U,aAAas8B,qBAAqBa,GAExD73gB,KAAKo6e,OAAOusB,yBAAyB4J,GAAc,GAEnDA,EAAaxjgB,GAAKwjgB,EAAarb,gBAC/Bqb,EAAavjgB,GAAKujgB,EAAanb,eAE/Bp1f,KAAKo6e,OAAO2wB,WAAWwF,EAAavjgB,GACpChN,KAAKqngB,iBAAiBkJ,GAAc,GAAM,GAC1CvwgB,KAAK4mgB,YAAY2J,EAAc,GAAG,GAClCvwgB,KAAKo6e,OAAOusB,yBAAyB4J,GAAc,GACnDvwgB,KAAKy2gB,qBAAqBlG,EAAcvwgB,KAAKo6e,SAKjD9iF,EAAOj8Z,UAAUgsgB,iBAAmB,SAAUpnc,EAAO63c,EAAeC,GAChE93c,EAAMlqD,OAAS,EACX+hgB,IACA73c,EAAMjzD,EAAI,EACVizD,EAAMlzD,EAAI,GAEd,IAAK,IAAI5Q,EAAI,EAAGA,EAAI8jE,EAAMgjb,aAAaxmf,OAAQN,IAAK,CAChD,IAAIukE,EAAMT,EAAMgjb,aAAa9mf,GAC7B6D,KAAKg4gB,eAAet3c,EAAKo3c,EAAeC,KAMhDzgH,EAAOj8Z,UAAU28gB,eAAiB,SAAUt3c,EAAKo3c,EAAeC,GAC5Dr3c,EAAI3qD,OAAS,EACT+hgB,IACAp3c,EAAI1zD,EAAI,EACR0zD,EAAI3zD,EAAI,GAEZ,IAAK,IAAI5Q,EAAI,EAAGA,EAAIukE,EAAIuib,aAAaxmf,OAAQN,IAAK,CAC9C,IAAI8mE,EAAOvC,EAAIuib,aAAa9mf,GAC5B6D,KAAKi4gB,gBAAgBh1c,EAAM60c,EAAeC,KAMlDzgH,EAAOj8Z,UAAU48gB,gBAAkB,SAAUh1c,EAAM60c,EAAeC,GAC9D90c,EAAKltD,OAAS,EACV+hgB,IACA70c,EAAKj2D,EAAI,EACTi2D,EAAKl2D,EAAI,GAEb,IAAK,IAAI5Q,EAAI,EAAGA,EAAI8mE,EAAKggb,aAAaxmf,OAAQN,IAAK,CAC/C,IAAI63f,EAAQ/wb,EAAKggb,aAAa9mf,GAC1B63f,aAAiBlR,GACbi1B,IACA/jB,EAAMj+e,OAAS,GAInB/V,KAAKqngB,iBAAiBrT,EAAO8jB,EAAeC,KAWxDzgH,EAAOj8Z,UAAUk8gB,2BAA6B,SAAUW,EAAYvvB,EAAYqL,EAAOmkB,GACnF,IAAK16gB,EAAkBuC,KAAKo6e,OAAOkV,QAC5Btvf,KAAKo6e,OAAOkV,MAAM7jB,gBACrB,GAAIkd,aAAsByK,GAAgB,CACtC,IAAIglB,EAAcp4gB,KAAKq4gB,iBAAiB1vB,EAAYuvB,GACpD,GAAIz6gB,EAAkB26gB,GAClB,OAUJ,GARIzvB,aAAsBuJ,IAEtBlyf,KAAKo6e,OAAOu9B,2BAA2BhvB,EAAWhG,eAAkE,IAAnDgG,EAAW6K,iBAAiBj1f,QAAQ,UAAkBoqf,EAAW14V,MAClImoX,EAAYl1B,gBAAgBnte,QAAUqigB,EAAYrigB,QAGlD/V,KAAKo6e,OAAOszB,iBAAiB/kB,EAAWhG,cAAegG,EAAW14V,MAElEioX,EAAa,EAAG,CAChB,IAAIhH,EAAakH,EAAYzlB,kBAAkB,GAAGR,uBAClDnyf,KAAKo6e,OAAO2wB,WAAWmG,EAAWlkgB,EAAIkkgB,EAAWn7f,QAC7CqigB,EAAYl1B,kBAAoBguB,EAAWhuB,iBAE3Cljf,KAAK82gB,sBAAsBsB,EAAalH,EAAWhuB,gBAAiBguB,EAAWtf,aAAe,GAAG,GAGzG,IAAI0mB,OAAmB,GACvBF,EAAcA,EAAYvlB,cAAc7yf,KAAKo6e,mBAClB2Y,IACvB/yf,KAAKqngB,iBAAiB+Q,GAAa,GAAM,GACzCA,EAAYvhB,eAAgB,EAC5ByhB,EAAmBt4gB,KAAKo6e,OAAOxqa,UAAUmnc,6BAA6BqB,IAGtEE,EAAmBF,EAElBp4gB,KAAKo6e,OAAOkV,MAAsB,kBAAKtvf,KAAKo6e,OAAOkV,MAAM5U,cAC1D16e,KAAKo6e,OAAOkV,MAAM5U,aAAas8B,qBAAqBsB,GAExDt4gB,KAAKo6e,OAAOusB,yBAAyByR,GAAa,GAClDp4gB,KAAKo6e,OAAOvpb,OAAO+1c,YAAYwR,EAAa,GAAG,GAC/Cp4gB,KAAKo6e,OAAOusB,yBAAyByR,GAAa,GAC9CD,EACAn4gB,KAAKu4gB,iBAAiBH,GAGtBp4gB,KAAKy2gB,qBAAqB2B,EAAap4gB,KAAKo6e,aAG/C,GAAIuO,aAAsBoJ,GAAiB,CAC5C,IAAI9xb,EAAQjgE,KAAKo6e,OAAOvpb,OAAOumd,eAAezuB,EAAWsL,WAAWtB,kBAAkB,IACtF3yf,KAAKw3gB,cAAc7uB,EAAWsL,YAC9Bj0f,KAAKy2gB,qBAAqBx2c,EAAOjgE,KAAKo6e,UAIlD9iF,EAAOj8Z,UAAUg9gB,iBAAmB,SAAUn1B,EAAiBg1B,GAE3D,IADA,IAAI7R,EAAenjB,EAAgBjxe,MAC5Bixe,GAAmBA,EAAgBjxe,QAAUo0f,GAAc,CAC9D,GAAInjB,EAAgBD,aAAaxmf,OAAS,GAAKymf,EAAgBtme,WAAW3K,OAASimgB,GAC/Eh1B,EAAgBp7W,UAAU71H,OAASimgB,EACnC,IAAK,IAAI/7gB,EAAI,EAAGA,EAAI+mf,EAAgBD,aAAaxmf,OAAQN,IAAK,CAC1D,IAAI63f,EAAQ9Q,EAAgBD,aAAa9mf,GACzC,GAAI63f,EAAM/hf,QAAUimgB,EAChB,OAAOlkB,EAInB,KAAI9Q,aAA2BR,IAI3B,MAHAQ,EAAkBA,EAAgBoP,qBAe9Ch7F,EAAOj8Z,UAAUitgB,YAAc,SAAUroc,EAAOv6C,GACvCu6C,EAAM42b,gBACP52b,EAAM22b,oBACN32b,EAAM42b,eAAgB,GAE1B,IAAI2hB,GAAav4c,GACjBjgE,KAAKoxgB,eAAepxgB,KAAKo6e,OAAO+rB,iBAAkBqS,GAClDx4gB,KAAKo6e,OAAOq+B,0BAA0Bx4c,GAAO,GAC7C,IAAIn0C,EAAWm0C,EAAMgjb,aAAa,GAAGkT,UAAUrqe,SAC3Cm0C,EAAMgjb,aAAaxmf,OAAS,IAC5BwjE,EAAM2kB,OAAS94D,EACfm0C,EAAM2yc,eAAiB9mf,EACvBm0C,EAAM24b,aAAe,GAGzB,IADA,IAAIl4b,EAAMT,EAAMgjb,aAAav9d,GACtBg7C,GAEHA,GADAA,EAAM1gE,KAAK04gB,UAAUF,EAAW93c,IACtBm/N,QAGd,OADA7/R,KAAK6ygB,oBAAoB2F,KAAev4c,GACjCu4c,EAAUA,EAAU/7gB,OAAS,IAQxC66Z,EAAOj8Z,UAAU+1gB,eAAiB,SAAU99Z,EAAMrzC,EAAO2qB,GACrD,IAAIo9a,EAAc/nc,EAAMA,EAAMxjE,OAAS,GAuBvC,OAtBImuF,IACAo9a,EAAchogB,KAAK80gB,kBAAkB9M,GACrC/nc,EAAMz7D,KAAKwjgB,IAEfA,EAAYhyf,MAAQs9F,EAAKt9F,MACzBgyf,EAAYj7f,EAAIumG,EAAKvmG,EACrBi7f,EAAYh7f,EAAIsmG,EAAKtmG,EAEjBg7f,EAAYlY,YAAYl5N,YAAc,IACtCoxO,EAAYjyf,OAASiyf,EAAYjyf,OAAS40e,GAAcO,oBAAoB8c,EAAYlY,YAAYl5N,aAEpGoxO,EAAY9S,gBAAkBvK,GAAcO,oBAAoBlrf,KAAKm2gB,mBAAmBnO,EAAYlY,YAAY76N,SAAS10C,gBACzHynR,EAAY7S,iBAAmBxK,GAAcO,oBAAoBlrf,KAAKo2gB,oBAAoBpO,EAAYlY,YAAY76N,SAAS10C,gBAE3HynR,EAAY5S,eAAiBzK,GAAcO,oBAAoBlrf,KAAKq2gB,kBAAkBrO,EAAYlY,YAAY76N,SAAS10C,gBACvHynR,EAAY3S,kBAAoB1K,GAAcO,oBAAoBlrf,KAAKs2gB,qBAAqBtO,EAAYlY,YAAY76N,SAAS10C,gBAC7HynR,EAAYj7f,GAAKi7f,EAAY9S,gBAC7B8S,EAAYh7f,GAAKg7f,EAAY5S,eAC7B4S,EAAYhyf,OAASgyf,EAAY9S,gBACjC8S,EAAYhyf,OAASgyf,EAAY7S,iBACjC6S,EAAYjyf,QAAUiyf,EAAY3S,mBAE/B2S,GAOX1wG,EAAOj8Z,UAAUw3gB,oBAAsB,SAAU3jX,EAAQqpI,EAAMt4N,EAAOgxc,GAClE,IAAI72B,EAASp6e,KAAKo6e,OACd4tB,EAAc94W,EAAOA,EAAOzyJ,OAAS,GACpCwjE,EAAMm0b,gBACPp0f,KAAKg0gB,2BAA2B9kX,EAAQqpI,EAAMyvO,EAAaiJ,GACvDjJ,EAAY/kB,aAAaxmf,OAAS,GAAKurgB,EAAYh7f,IAAMg7f,EAAY/kB,aAAa,GAAGj2e,IACrFg7f,EAAYh7f,EAAIg7f,EAAY/kB,aAAa,GAAGj2e,IAUhDizD,EAAM6vb,YAAYl5N,YAAc,IAE5BoxO,EAAYh7f,EAAIg7f,EAAYjyf,OAAS40e,GAAcO,oBAAoBjrb,EAAM6vb,YAAYl5N,aAAewjN,EAAOwtB,WAAWj7f,QAAUyte,aAAkBC,KAItJ2tB,EAAYjyf,OAASiyf,EAAYjyf,OAAS40e,GAAcO,oBAAoBjrb,EAAM6vb,YAAYl5N,aAAe,GAGjHwjN,EAAO2wB,WAAW/C,EAAYh7f,EAAIg7f,EAAYjyf,SAE9CkqD,EAAM0ob,sBAAsBuJ,KAC5Bjyb,EAAMijb,gBAAgBnte,QAAUkqD,EAAMlqD,OAClC/V,KAAKo6e,OAAOkV,MAAMye,wBAAkF,IAAzD9tc,EAAM0ob,WAAW6K,iBAAiBj1f,QAAQ,WACrFyB,KAAKgugB,yBAAyB/tc,EAAM0ob,WAAY3of,KAAKo6e,UAWjE9iF,EAAOj8Z,UAAU24gB,2BAA6B,SAAU9kX,EAAQqpI,EAAMyvO,EAAaiJ,GAC/E,IAAK,IAAI90gB,EAAI,EAAGA,EAAI6rgB,EAAY/kB,aAAaxmf,OAAQN,IAAK,CACtD,IAAI+rgB,EAAYF,EAAY/kB,aAAa9mf,GACzC,GAAI+rgB,IAAc+I,EACd,MAEJjxgB,KAAKuxgB,yBAAyBvxgB,KAAKo6e,QAAQ,EAAMlrV,EAAQqpI,EAAM2vO,GAAW,EAAM+I,KAUxF35G,EAAOj8Z,UAAUq9gB,UAAY,SAAU1Q,EAAatnc,GAChD,IAAI05a,EAASp6e,KAAKo6e,OACdi2B,GAAc3vc,GACdixb,EAAS3xf,KAAK24gB,kBAAkBv+B,EAAO+rB,iBAAkBkK,GAC7Dj2B,EAAOw+B,uBAAuBl4c,GAAK,GACnC,IAAK,IAAIvkE,EAAI,EAAGA,EAAIukE,EAAIuib,aAAaxmf,OAAQN,IAAK,CAC9C,IAAI8mE,EAAOvC,EAAIuib,aAAa9mf,GAE5B6D,KAAK64gB,WAAW51c,EAAMjjE,KAAK84gB,4BAA4Bp4c,EAAK,GAAKA,EAAI00b,eAAgBp1f,KAAK84gB,4BAA4Bp4c,EAAK,GAAKA,EAAI20b,kBAAmB1D,GAE3JvX,EAAOw+B,uBAAuBl4c,GAAK,GACnC,IAAI63N,GAAQ73N,GAEZ,OADA1gE,KAAKwygB,qBAAqBxK,EAAazvO,EAAM73N,GACtC63N,EAAKA,EAAK97R,OAAS,IAM9B66Z,EAAOj8Z,UAAUs9gB,kBAAoB,SAAUrla,EAAM5yC,GACjD,IAAIwnc,EAAYxnc,EAAIA,EAAIjkE,OAAS,GACjCyrgB,EAAUn7f,EAAIumG,EAAKvmG,EAAIm7f,EAAU/R,UAAUtF,gBAC3CqX,EAAUl7f,EAAIsmG,EAAKtmG,EACnBk7f,EAAUlyf,MAAQs9F,EAAKt9F,MACvB,IAAIy4E,EAAc,EAClB,IAAKhxF,EAAkByqgB,EAAUjU,cAAgBx2f,EAAkByqgB,EAAUjU,WAAWnE,cACjFoY,EAAUjU,WAAWnE,YAAYl5N,YAAc,EAAG,CACrDsxO,EAAUnyf,OAASmyf,EAAUnyf,OAAS40e,GAAcO,oBAAoBgd,EAAUjU,WAAWnE,YAAYl5N,aAEzG,IAAK,IAAIrzQ,EAAI,EAAGA,EAAI2kf,EAAUjlB,aAAaxmf,OAAQ8mB,IAC/C,IAAK9lB,EAAkByqgB,EAAUjlB,aAAa1/d,GAAG+we,cACzC72f,EAAkByqgB,EAAUjlB,aAAa1/d,GAAG+we,WAAWr/N,SAAU,CAErE,IAAIj/Q,EAAQ+7e,GAAgB6K,oBAAoBsL,EAAUjlB,aAAa1/d,IAAIg9N,eACvEvqO,EAAQy4E,IACRA,EAAcz4E,GAM1B,GADAkyf,EAAU7S,kBAAoB1K,GAAcO,oBAAoBz8Z,GAC5Dy5a,EAAUj2f,MAAQ,IAAMxU,EAAkByqgB,EAAU3O,gBAAiB,CACrE,IAAIiD,EAAU0L,EAAU3O,eACxB9qa,EAAc,EACd,IAAK,IAAItyF,EAAI,EAAGA,EAAIqggB,EAAQvZ,aAAaxmf,OAAQN,IAE7C,IAAKsB,EAAkB++f,EAAQvZ,aAAa9mf,GAAGm4f,cAAgB72f,EAAkB++f,EAAQvZ,aAAa9mf,GAAGm4f,WAAWr/N,SAAU,EACtHj4R,EAAQ+0f,GAAgB6K,oBAAoBJ,EAAQvZ,aAAa9mf,IAAIokP,gBAC7D9xJ,IACRA,EAAczxF,GAK1BkrgB,EAAU9S,eAAiBzK,GAAcO,oBAAoBz8Z,IAGrE,IAAKhxF,EAAkByqgB,EAAUjlB,cAC7B,IAAS9mf,EAAI,EAAGA,EAAI+rgB,EAAUjlB,aAAaxmf,OAAQN,IAE/C,IAAKsB,EAAkByqgB,EAAUjlB,aAAa9mf,GAAGm4f,cAAgB72f,EAAkByqgB,EAAUjlB,aAAa9mf,GAAGm4f,WAAWr/N,SAAU,EAC1Hj4R,EAAQ+0f,GAAgBqK,iBAAiB8L,EAAUjlB,aAAa9mf,IAAIokP,gBAC5D9xJ,IACRA,EAAczxF,GAS9B,GAHAkrgB,EAAU9S,eAAiBzK,GAAcO,oBAAoBz8Z,IAGxDhxF,EAAkByqgB,EAAUjU,cAAgBx2f,EAAkByqgB,EAAUjU,WAAWnE,cAAgBoY,EAAUjU,WAAWnE,YAAYl5N,aAAe,GAAKsxO,EAAUznO,WAAaynO,EAAUjU,WAAWhR,aAAaxmf,OAAS,EAAG,CAE9N,IAASN,EAAI,EAAGA,EAAI+rgB,EAAUjlB,aAAaxmf,OAAQN,IAE/C,IAAKsB,EAAkByqgB,EAAUjlB,aAAa9mf,GAAGm4f,cAAgB72f,EAAkByqgB,EAAUjlB,aAAa9mf,GAAGm4f,WAAWr/N,SAAU,CAC9H,IAAIj4R,GAAAA,EAAQ+0f,GAAgB6K,oBAAoBsL,EAAUjlB,aAAa9mf,IAAIokP,gBAC/D9xJ,IACRA,EAAczxF,GAK1BkrgB,EAAU7S,kBAAoB1K,GAAcO,oBAAoBz8Z,GAGpE,OAAOy5a,GAOX5wG,EAAOj8Z,UAAUy9gB,4BAA8B,SAAUp4c,EAAKq4c,GAC1D,GAAIt7gB,EAAkBijE,EAAIuib,cACtB,OAAO,EAGX,IAAK,IADDjmf,EAAQ,EACHb,EAAI,EAAGA,EAAIukE,EAAIuib,aAAaxmf,OAAQN,IACzC,GAAIukE,EAAIuib,aAAaxmf,OAAS,EAAG,CAC7B,IAAI63f,EAAa5zb,EAAIuib,aAAa9mf,GAAGm4f,WACrC,GAAIA,EAAW9C,kBACS,IAAhBunB,IAAsBt7gB,EAAkB62f,EAAWnpQ,YACnDw/P,GAAcO,oBAAoBoJ,EAAWnpQ,WAAanuP,EAC1DA,EAAQ2tf,GAAcO,oBAAoBoJ,EAAWnpQ,WAEhC,IAAhB4tR,IAAsBt7gB,EAAkB62f,EAAWjpQ,eACxDs/P,GAAcO,oBAAoBoJ,EAAWjpQ,cAAgBruP,IAC7DA,EAAQ2tf,GAAcO,oBAAoBoJ,EAAWjpQ,mBAGxD,CACD,IAAIykQ,EAAcpvb,EAAIuib,aAAa9mf,GAAG83f,WAAWnE,YAC7B,IAAhBipB,GAAqBpuB,GAAcO,oBAAoB4E,EAAY3kQ,WAAanuP,EAChFA,EAAQ2tf,GAAcO,oBAAoB4E,EAAY3kQ,WAEjC,IAAhB4tR,GAAqBpuB,GAAcO,oBAAoB4E,EAAYzkQ,cAAgBruP,IACxFA,EAAQ2tf,GAAcO,oBAAoB4E,EAAYzkQ,gBAKtE,OAAOruP,GAUXs6Z,EAAOj8Z,UAAUw9gB,WAAa,SAAU51c,EAAMytc,EAAkBC,EAAqBrhB,GACjF,IAAIlV,EAASp6e,KAAKo6e,OAGlB,GAFAp6e,KAAKywgB,mBAAmBxtc,EAAMm3a,EAAO+rB,iBAAkBuK,EAAkBC,GACzEv2B,EAAO4+B,wBAAwB/1c,GAAM,GACJ,IAA7BA,EAAKggb,aAAaxmf,OAAc,CAChC,IAAI0ggB,EAAkB,IAAIra,GAC1Bqa,EAAgBnf,gBAAkB,IAAIgF,GACtCma,EAAgBvf,gBAAkB,IAAImF,GACtCoa,EAAgBlrf,MAAQ,EACxB,IAAIosf,EAAa,IAAIlL,QAAWh4f,GAChCgigB,EAAgBla,aAAaz+e,KAAK65f,GAClCp7b,EAAKggb,aAAaz+e,KAAK24f,GAE3B,IAAK,IAAIhhgB,EAAI,EAAGA,EAAI8mE,EAAKggb,aAAaxmf,OAAQN,IAAK,CAC/C,IAAI63f,EAAQ/wb,EAAKggb,aAAa9mf,GAC9Bi+e,EAAOusB,yBAAyB3S,GAAO,GACvCA,EAAM9Q,gBAAkBjgb,EACxBjjE,KAAK4mgB,YAAY5S,EAAO,GACxB5Z,EAAOusB,yBAAyB3S,GAAO,GAE3Ch0f,KAAKozgB,kBAAkBnwc,GACvBm3a,EAAO4+B,wBAAwB/1c,GAAM,IAOzCq0V,EAAOj8Z,UAAU49gB,mBAAqB,WAClC,GAAIx7gB,EAAkBuC,KAAKo6e,OAAOu8B,eAAiBl5gB,EAAkBuC,KAAKo6e,OAAOu8B,aAAazzB,iBAC1Fljf,KAAKo6e,OAAOu8B,kBAAex7gB,MAD/B,CAIA,IAAI64f,EAAQh0f,KAAKo6e,OAAOu8B,aACpBtQ,EAAerS,EAAMrL,WAAW12e,MACpCjS,KAAKk5gB,uBAAuBllB,EAAOh0f,KAAKo6e,QAMxC,IALA,IAAIw8B,GAAsB,EAGtB9hB,EAAiBd,EAAMrB,kBACvB+T,EAAY5R,EAAeA,EAAer4f,OAAS,GAAG61f,mBACnDoU,aAAqBnU,IAAemU,EAAU/d,WAAW12e,QAAUo0f,GAAc,CACpF,IAAIwQ,OAAgB17gB,EAChB24Q,EAASkgP,EAAMrB,kBACnBkkB,EAAgB/iQ,EAAOA,EAAOr3Q,OAAS,GAEvCm6gB,GAAsB,EACtB,IAAI3a,OAAa9ggB,EAUjB,GATA24Q,GAHAkgP,EAAQ0S,GAGO/T,kBACXqB,aAAiBlR,GACjBmZ,EAAanoP,EAAO,GAGhBkgP,aAAiBjB,KACjBkJ,EAAanoP,EAAO,IAGxB+iQ,EAAc3zB,kBAAoB+Y,EAAW/Y,iBACzCyH,GAAcltd,MAAMw+d,EAAWjvf,EAAG,KAAO29e,GAAcltd,MAAMz9B,KAAKo6e,OAAO+rB,iBAAiBn5f,EAAG,IACjGvP,EAAkBw+f,EAAWA,YAC7B,MAEJ2a,GAAsB,EACtB52gB,KAAKk5gB,uBAAuBllB,EAAOh0f,KAAKo6e,QAExCssB,GADA5R,EAAiBd,EAAMrB,mBACImC,EAAer4f,OAAS,GAAG61f,mBAEtDtyf,KAAKo6e,OAAOkV,MAAM5U,cAClB16e,KAAKo6e,OAAOkV,MAAM5U,aAAau8B,uBAAuBjjB,EAAO4iB,GAEjE52gB,KAAKo6e,OAAOu8B,kBAAex7gB,EAC3B,IAAIi/e,EAASp6e,KAAKo6e,OAElBA,EAAO++B,mBACPn5gB,KAAKwmgB,sBACLpsB,EAAOI,qBAMXljF,EAAOj8Z,UAAUmrgB,oBAAsB,WACnC,IAAK,IAAIrqgB,EAAI,EAAGA,EAAI6D,KAAKo6e,OAAOxud,OAAOnvB,OAAQN,IAAK,CAChD,IAAIsvf,EAAazrf,KAAKo6e,OAAOxud,OAAOzvB,GACpC,IAAKsB,EAAkBuC,KAAKo6e,OAAOxqa,WAAY,CAC3C,IAAIwpc,EAAYp5gB,KAAKo6e,OAAOxqa,UAAUypc,aAAa5tB,GACnD,IAAKhuf,EAAkB27gB,IAAcA,EAAUxjgB,cAAcjG,MAAM,YAAa,CAC5E,IAAI2mB,EAAcm1d,EAAWsS,eAAepsM,SAC5C,IAAKl0T,EAAkB64B,GAAc,CACjCA,EAAY7J,KAAOzsB,KAAKo6e,OAAOlvQ,MAAMzuO,OAAOyQ,WAC5C,IAAI21e,EAAY4I,EAAW39b,KAAK+0b,UAChC,IAAKplf,EAAkBolf,EAAU8F,cAAgBlrf,EAAkBolf,EAAU8F,WAAW14V,MAAO,CAC3F,IAAIkhH,EAAY0xO,EAAUI,aAAa1kf,QAAQktf,EAAW39b,MACtD69J,EAAe8/R,EAAW39b,KAAK1zC,SAAS7b,QAAQ+3B,GACpDt2B,KAAKq3gB,kBAAkBx0B,EAAW1xO,EAAWxlD,SAOrE2rM,EAAOj8Z,UAAU69gB,uBAAyB,SAAUxC,EAAUt8B,GAC1D,IACI4Z,EAAQ0iB,EAaZ12gB,KAAKs5gB,kBAAkBtlB,EAAO5Z,GAE1Bp6e,KAAKo6e,OAAOkV,MAAM5U,cAClB16e,KAAKo6e,OAAOkV,MAAM5U,aAAa6+B,wBAAwBvlB,IAI/D18F,EAAOj8Z,UAAUi+gB,kBAAoB,SAAUtlB,EAAO5Z,GAC9C4Z,aAAiBlR,GACjB9if,KAAKw5gB,oBAAoBxlB,EAAO5Z,GAE3B4Z,aAAiBjB,IACtB/yf,KAAKy5gB,qBAAqBzlB,EAAO5Z,IAGzC9iF,EAAOj8Z,UAAUm+gB,oBAAsB,SAAU32B,EAAWzI,GAKxD,IAAK,IAJDs/B,EAAc15gB,KAAK25gB,6BAA6B92B,EAAW,GAC3DiwB,EAAiB4G,EAAY/wB,WAC7B12e,EAAQyngB,EAAYzngB,MACpBi/f,OAAa/1gB,EACRgB,EAAI,EAAGA,EAAI0mf,EAAU8P,kBAAkBl2f,OAAQN,IAAK,CACzD,IAAIw1f,EAAS9O,EAAU8P,kBAAkBx2f,GACzC,IAAKsB,EAAkByzgB,GAAa,CAEhC,GADAlxgB,KAAK45gB,sBAAsBjoB,EAAQvX,EAAQ82B,GACvCzzgB,EAAkBk0f,EAAO1O,eAAgD,IAA/B0O,EAAO1O,aAAaxmf,OAAc,CAC5EN,IACA,SAEJ+0gB,OAAa/1gB,EACT23gB,IAAmBnhB,EAAOzO,kBAC1B4vB,EAAiBnhB,EAAOzO,iBAGhC,GAAIljf,KAAK65gB,kBAAkBloB,EAAQvX,GAE/B82B,EAAavf,EACbA,EAAO3kf,EAAIote,EAAO+rB,iBAAiBn5f,EACnCote,EAAO2wB,WAAW3wB,EAAO+rB,iBAAiBn5f,EAAI2kf,EAAO57e,QAEhDtY,EAAkBq1gB,IAAmBA,IAAmBnhB,EAAOzO,kBAChEjxe,IACAjS,KAAK82gB,sBAAsBnlB,EAAQmhB,EAAgB7ggB,GAAO,QAG7D,CACD,IAAI6ngB,EAAsB95gB,KAAK8yf,YAAYnB,EAAQvX,EAAQ04B,EAAgB7ggB,EAAQ,GACnFi/f,OAAa/1gB,EACT23gB,IAAmBnhB,EAAOzO,kBAC1B4vB,EAAiBnhB,EAAOzO,gBACxB/mf,KAEJ8V,EAAQ6ggB,EAAe7vB,aAAa1kf,QAAQozf,GACxCmoB,IACAhH,EAAiBjwB,EAAU8P,kBAAkBx2f,EAAI,GAAG+mf,oBAQpE5rF,EAAOj8Z,UAAU0+gB,iBAAmB,SAAU95c,EAAOm6a,GACjD,IAAIlrV,GAAUjvF,GACdjgE,KAAKoxgB,eAAepxgB,KAAKo6e,OAAO+rB,iBAAkBj3W,GAClDlvJ,KAAKo6e,OAAOq+B,0BAA0Bx4c,GAAO,GAE7C,IADA,IAAIS,EAAMT,EAAMgjb,aAAa,GACtBvib,GAEHA,GADAA,EAAM1gE,KAAKg6gB,eAAe9qX,EAAQxuF,IACxBm/N,QAGd,OADA7/R,KAAK6ygB,oBAAoB3jX,KAAYjvF,GAC9BivF,EAAOA,EAAOzyJ,OAAS,IAKlC66Z,EAAOj8Z,UAAU2+gB,eAAiB,SAAU9qX,EAAQxuF,GAChD,IAAI05a,EAASp6e,KAAKo6e,OACd7hN,GAAQ73N,GACC1gE,KAAK24gB,kBAAkBv+B,EAAO+rB,iBAAkB5tO,GAC7D6hN,EAAOw+B,uBAAuBl4c,GAAK,GACnC,IAAK,IAAIvkE,EAAI,EAAGA,EAAIukE,EAAIuib,aAAaxmf,OAAQN,IAAK,CAC9C,IAAI8mE,EAAOvC,EAAIuib,aAAa9mf,GAE5B6D,KAAKi6gB,gBAAgBh3c,EAAMjjE,KAAK84gB,4BAA4Bp4c,EAAK,GAAKA,EAAI00b,eAAgBp1f,KAAK84gB,4BAA4Bp4c,EAAK,GAAKA,EAAI20b,mBAI7I,OAFAjb,EAAOw+B,uBAAuBl4c,GAAK,GACnC1gE,KAAKwygB,qBAAqBtjX,EAAQqpI,EAAM73N,GACjC63N,EAAKA,EAAK97R,OAAS,IAK9B66Z,EAAOj8Z,UAAU4+gB,gBAAkB,SAAUh3c,EAAMytc,EAAkBC,GACjE,IAAIv2B,EAASp6e,KAAKo6e,OAClBp6e,KAAKywgB,mBAAmBxtc,EAAMm3a,EAAO+rB,iBAAkBuK,EAAkBC,GACzEv2B,EAAO4+B,wBAAwB/1c,GAAM,GACrC,IAAK,IAAI9mE,EAAI,EAAGA,EAAI8mE,EAAKggb,aAAaxmf,OAAQN,IAAK,CAC/C,IAAI63f,EAAQ/wb,EAAKggb,aAAa9mf,GAC9Bi+e,EAAOusB,yBAAyB3S,GAAO,GACnCA,aAAiBlR,GACjB9if,KAAKk6gB,qBAAqBlmB,GAG1Bh0f,KAAK+5gB,iBAAiB/lB,EAAO5Z,GAEjCA,EAAOusB,yBAAyB3S,GAAO,GAE3Ch0f,KAAKozgB,kBAAkBnwc,GACvBm3a,EAAO4+B,wBAAwB/1c,GAAM,IAKzCq0V,EAAOj8Z,UAAU6+gB,qBAAuB,SAAUr3B,GAC9C7if,KAAKuogB,mBAAmBvogB,KAAKo6e,OAAO+rB,iBAAkBtjB,GACtD7if,KAAKo6e,OAAO2wB,WAAW/qgB,KAAKo6e,OAAO+rB,iBAAiBn5f,EAAI61e,EAAU9se,QAClE/V,KAAK8ogB,mBAAmB9ogB,KAAKo6e,OAAQyI,IAEzCvrF,EAAOj8Z,UAAUo+gB,qBAAuB,SAAUx5c,EAAOm6a,GACrD,IAAI71a,EAAUvkE,KAAK25gB,6BAA6B15c,EAAO,GACnD6yc,EAAiBvuc,EAAQokb,WACzB12e,EAAQsyD,EAAQtyD,MAChB6ggB,IAAmB7yc,EAAMijb,iBACzBljf,KAAK82gB,sBAAsB72c,EAAO6yc,EAAgB7ggB,EAAQ,GAAG,GAEjEguD,EAAMjzD,EAAIhN,KAAKo6e,OAAO+rB,iBAAiBn5f,EACvChN,KAAKm6gB,4BAA4Bl6c,GAAO,GACxC,IACIm6c,EAAgBn6c,EAAM4yb,cAAc7yf,KAAKo6e,QAC7Cp6e,KAAKo6e,OAAOvpb,OAAO+kd,4BAA4BwE,EAAcptgB,EAAGotgB,GAChEp6gB,KAAKqngB,iBAAiB+S,GAAe,GAAM,GAC3Cp6gB,KAAK+5gB,iBAAiBK,EAAep6gB,KAAKo6e,QAC1Cp6e,KAAKm6gB,4BAA4Bl6c,GAAO,IAE5Cq3V,EAAOj8Z,UAAU8+gB,4BAA8B,SAAUl6c,EAAOo6c,GAE5D,IAAK,IAAIl+gB,EAAI,EAAGA,EAAI8jE,EAAM0yb,kBAAkBl2f,OAAQN,IAGhD,IAAK,IAFDm+gB,EAAcr6c,EAAM0yb,kBAAkBx2f,GAEjConB,EAAI,EAAGA,EAAI+2f,EAAYr3B,aAAaxmf,OAAQ8mB,IAGjD,IAAK,IAFD2kf,EAAYoS,EAAYr3B,aAAa1/d,GAEhC4C,EAAI,EAAGA,EAAI+hf,EAAUjlB,aAAaxmf,OAAQ0pB,IAAK,CACpD,IAAIqze,EAAa0O,EAAUjlB,aAAa98d,GAExCnmB,KAAKo6e,OAAOvpb,OAAOkjd,2BAA2Bva,EAAY6gB,GAAa,KAMvF/iH,EAAOj8Z,UAAUy3f,YAAc,SAAUqK,EAAiB/iB,EAAQmgC,EAAoBtogB,GAClF,IAAIkuO,EAAYg9Q,EAAgBla,aAAa,GACzCu3B,EAAmBx6gB,KAAKy6gB,oBAAoBt6R,EAAWi6P,GACvDsgC,EAAgBvd,EAAgBxK,kBAChCgoB,EAAiBxd,EAAgBja,gBACrC,GAAI9I,EAAO+rB,iBAAiBpwf,QAAUykgB,EAAkB,CACpD,IAAI1lB,OAAiB35f,EACjBy/gB,EAAcF,EAAcn8gB,QAAQ4+f,GACpCyd,EAAeF,EAAcj+gB,OAAS,EAEtCk+gB,GADA7lB,EAAiB4lB,EAAcE,EAAc,IACb13B,kBAGhC4R,EAAiB,IAAIhS,IACN7we,MAAQkrf,EAAgBlrf,MACvC6if,EAAe9W,gBAAkBmf,EAAgBnf,gBACjD8W,EAAelX,gBAAkBuf,EAAgBvf,gBACjDkX,EAAe9+e,MAAQmnf,EAAgBnnf,MACvC8+e,EAAe/nf,EAAIowf,EAAgBpwf,EACnC+nf,EAAe9nf,EAAImwf,EAAgBnwf,EACnC0tgB,EAAcl2gB,KAAKswf,IAEnBylB,IAAuBpd,EAAgBja,iBACvCljf,KAAK82gB,sBAAsB3Z,EAAiBod,EAAoBtogB,GAAO,GAE3E,IAAK,IAAI9V,EAAIghgB,EAAgBla,aAAaxmf,OAAS,EAAGN,EAAI,IAClD6D,KAAK65gB,kBAAkB1c,EAAiB/iB,GADaj+e,IAAK,CAK1D,IAAI2xD,EAAOqvc,EAAgBla,aAAa9mf,GAExC6D,KAAK66gB,8BAA8B/sd,EAAMgnc,EAAgB,GAGjE,GAAIr3f,EAAkBq3f,EAAe5R,kBAAoB4R,EAAe7R,aAAaxmf,OAAS,EAAG,CAC7F,IAAIuQ,EAAIote,EAAO+rB,iBAAiBn5f,EAE5B46f,EAAa,IAAI1xe,GAAKkkd,EAAOwtB,WAAW76f,EAAGqte,EAAOwtB,WAAW56f,EAAGote,EAAOwtB,WAAW5xf,MAAOoke,EAAOwtB,WAAW7xf,QAC3G+kgB,EAAa,IAAI5kf,GAAKkkd,EAAO+rB,iBAAiBp5f,EAAGqte,EAAO+rB,iBAAiBn5f,EAAGote,EAAO+rB,iBAAiBnwf,MAAOoke,EAAO+rB,iBAAiBpwf,QAOvI,IALA4kgB,EAAiB36gB,KAAKytgB,qBAAqBtQ,IAE5Bla,aAAa56d,OAAO,EAAG,EAAGyse,GACzC6lB,EAAe5kgB,QAAU++e,EAAe/+e,OACxC++e,EAAe5R,gBAAkBy3B,EACU,IAAvCA,EAAe13B,aAAaxmf,QAAgBk+gB,EAAe/9f,sBAAsBkme,IACjF63B,EAAe/9f,WAAWi8B,OAAOskd,GAGjC,OAFAA,EAAgBpwf,EAAIowf,EAAgBpwf,EACpCowf,EAAgBnwf,EAAIA,GACb,EAIPote,EAAOwtB,WAAaA,EACpBxtB,EAAO+rB,iBAAmB2U,QAKlCH,EAAiB36gB,KAAK+6gB,0BAA0BR,EAAoBv6gB,KAAKo6e,QACrE+iB,EAAgBja,kBAAoBy3B,IACpCA,EAAiB36gB,KAAKytgB,qBAAqBtQ,GAC3Cn9f,KAAK82gB,sBAAsB3Z,EAAiBwd,EAAgB,GAAG,IAWvE,OARIJ,IAAuBpd,EAAgBja,iBACvCia,EAAgBnwf,EAAIote,EAAO+rB,iBAAiBn5f,EAC5Cote,EAAO2wB,WAAW3wB,EAAO+rB,iBAAiBn5f,EAAImwf,EAAgBpnf,SAI9Dqke,EAAOszB,iBAAiBiN,EAAeh4B,cAAeg4B,EAAe1qX,OAElE,GAEXqnQ,EAAOj8Z,UAAUo/gB,oBAAsB,SAAUpc,EAAYjkB,GACzD,IAAIrke,EAAS,EAEb,GAAmC,IAA/Bsof,EAAWjkf,SAAS3d,QAAiD,IAA/B4hgB,EAAWjkf,SAAS3d,QAAgB4hgB,EAAWjkf,SAAS,aAAc26e,IAAuD,IAA/BsJ,EAAWjkf,SAAS3d,QAAgB4hgB,EAAWjkf,SAAS,aAAc26e,IAAsBsJ,EAAWjkf,SAAS,aAAc26e,GAAsB,CAKxR,GAFAh/e,EAASqke,EAAOxqa,UAAU+6b,qBAAqBtM,EAAWxb,UAF1C,EACG,GAC2E9se,OAC9FA,GAHgB,EAIZsof,EAAWjkf,SAAS3d,OAAS,EAAG,CAE5BsZ,GADA/U,EAAUq9f,EAAWjkf,SAAS,IACbqiB,OAAO/vB,IAAM1L,EAAQ+U,SACtCA,EAAS/U,EAAQy7B,OAAO/vB,IAAM1L,EAAQ+U,cAK9C,IAAK,IAAI5Z,EAAI,EAAGA,EAAIkigB,EAAWjkf,SAAS3d,OAAQN,IAAK,CACjD,IAAI6E,EACA+U,GADA/U,EAAUq9f,EAAWjkf,SAASje,IACbsgC,OAAO/vB,IAAM1L,EAAQ+U,SACtCA,EAAS/U,EAAQy7B,OAAO/vB,IAAM1L,EAAQ+U,QAIlD,OAAOA,GAEXuhZ,EAAOj8Z,UAAU0/gB,0BAA4B,SAAUpyB,EAAYvO,GAC/D,IAAIugC,OAAiBx/gB,EACjB+0J,EAAY,EAChBA,EAAYkqV,EAAOlvQ,MAAM3sO,QAAQoqf,EAAW14V,MAC5C,IAAIA,OAAO90J,EACP8W,OAAQ9W,EAEZ,GADA8W,EAAQ02e,EAAW12e,MACfi+I,IAAckqV,EAAOlvQ,MAAMzuO,OAAS,GACjC29e,EAAOlvQ,MAAMh7E,EAAY,GAAGm2W,eAAiBp0f,EAAO,CACvD,IAAI4kgB,EAAgB,IAAIn0B,GACxBm0B,EAAcl0B,cAAgBgG,EAAWhG,cACzCk0B,EAAc5kgB,MAAQ02e,EAAW12e,MACjCg+I,EAAOmqV,EAAO6rB,cAAc4Q,GACxBz8B,EAAOlvQ,MAAMh7E,EAAY,GAAGm2W,eAAiBp0f,GAC7Cmoe,EAAOksB,WAAWp2W,EAAY,EAAGD,GAErC0qX,EAAiB1qX,EAAKyhW,YAAY,QAIlCipB,GADA1qX,EAAOmqV,EAAOlvQ,MAAMh7E,EAAY,IACVwhW,YAAY,GAEtC,OAAOipB,GAEXrjH,EAAOj8Z,UAAUw+gB,kBAAoB,SAAU1c,EAAiB/iB,GAC5D,IAAI4gC,EAAW7d,EAAgBla,aAAaka,EAAgBla,aAAaxmf,OAAS,GAC9EsZ,EAASonf,EAAgBpnf,OACzBykgB,EAAmBx6gB,KAAKy6gB,oBAAoBO,EAAU5gC,GAI1D,OAHI4gC,EAASjlgB,OAASykgB,IAClBzkgB,GAAUilgB,EAASjlgB,OAASykgB,GAEzBpgC,EAAO+rB,iBAAiBpwf,QAAUA,GAG7CuhZ,EAAOj8Z,UAAUu+gB,sBAAwB,SAAUzc,EAAiB/iB,EAAQmf,GACxE,IAAK,IAAIp9f,EAAI,EAAGA,EAAIghgB,EAAgBla,aAAaxmf,OAAQN,IAAK,CAC1D,IAAI2xD,EAAOqvc,EAAgBla,aAAa9mf,GACpCq+gB,EAAmBx6gB,KAAKy6gB,oBAAoB3sd,EAAMssb,GACtD,KAAIA,EAAO+rB,iBAAiBpwf,QAAUykgB,GASjC,CACD,IAAI7xB,EAAa4Q,EAAerW,gBAC5By3B,EAAiB36gB,KAAK+6gB,0BAA0BpyB,EAAYvO,GAC5DuO,IAAegyB,GACf36gB,KAAK82gB,sBAAsB3Z,EAAiBwd,EAAgB,GAAG,GAGnEvgC,EAAOszB,iBAAiBiN,EAAeh4B,cAAeg4B,EAAe1qX,MACrE,MAZA,GAHAjwJ,KAAK66gB,8BAA8B/sd,EAAMyrc,EAAgBA,EAAetW,aAAaxmf,QACrFN,IACAi+e,EAAO2wB,WAAW3wB,EAAO+rB,iBAAiBn5f,EAAI8gD,EAAK/3C,QAC/CtY,EAAkB0/f,EAAgBla,cAClC,QAehB3rF,EAAOj8Z,UAAUw/gB,8BAAgC,SAAUxc,EAAY4c,EAAoBhpgB,GAClFxU,EAAkB4ggB,EAAWxb,aAC9Bwb,EAAWxb,UAAUI,aAAa56d,OAAOg2e,EAAWxb,UAAUI,aAAa1kf,QAAQ8/f,GAAa,GAChGA,EAAWxb,UAAU9se,QAAUsof,EAAWtof,OACrCtY,EAAkB4ggB,EAAWxb,UAAUK,mBACxCmb,EAAWxb,UAAUK,gBAAgBnte,QAAUsof,EAAWtof,SAG1DtY,EAAkB4ggB,EAAWxb,UAAUI,eAA8D,IAA7Cob,EAAWxb,UAAUI,aAAaxmf,SAC1F4hgB,EAAWxb,UAAUqQ,gBAAgBlzf,KAAKo6e,SAGlD6gC,EAAmBh4B,aAAa56d,OAAOpW,EAAO,EAAGosf,GACjDA,EAAWxb,UAAYo4B,EACvBA,EAAmBllgB,QAAUsof,EAAWtof,OACnCtY,EAAkBw9gB,EAAmB/3B,mBACtC+3B,EAAmB/3B,gBAAgBnte,QAAUsof,EAAWtof,SAGhEuhZ,EAAOj8Z,UAAUk9gB,iBAAmB,SAAU7B,GAE1C,IADA,IAAI1iB,EAAQ0iB,EACL1iB,EAAMiI,sBAAsB1J,IAC/ByB,EAAQA,EAAMiI,WACdj8f,KAAKk5gB,uBAAuBllB,EAAOh0f,KAAKo6e,SAGhD9iF,EAAOj8Z,UAAUy7gB,sBAAwB,SAAUnlB,EAAQhJ,EAAY12e,EAAOipgB,GAC1E,IAAKz9gB,EAAkBk0f,EAAOzO,mBAC1ByO,EAAOzO,gBAAgBD,aAAa56d,OAAOspe,EAAOzO,gBAAgBD,aAAa1kf,QAAQozf,GAAS,GAChGA,EAAOzO,gBAAgBnte,QAAU4ye,EAAW5ye,QACvCtY,EAAkBk0f,EAAOzO,gBAAgBD,eAAgE,IAA/C0O,EAAOzO,gBAAgBD,aAAaxmf,SAC5Fk1f,EAAOzO,2BAA2BR,IAAciP,EAAOzO,kBAAoByF,GAAcuyB,GAAkB,CAC9G,IAAIjrX,EAAO0hW,EAAOzO,gBAAgBjzV,KAC9BjwJ,KAAKo6e,OAAOlvQ,MAAMlrO,KAAKo6e,OAAOlvQ,MAAMzuO,OAAS,KAAOwzJ,IACR,IAA5CjwJ,KAAKo6e,OAAOqD,aAAal/e,QAAQ0xJ,IACjCjwJ,KAAKo6e,OAAO+gC,iBAEhBxpB,EAAOzO,gBAAgBgQ,gBAAgBlzf,KAAKo6e,QAGpDuO,EAAW1F,aAAa56d,OAAOpW,EAAO,EAAG0/e,GACzChJ,EAAW5ye,QAAU4ye,EAAW5ye,OAChC47e,EAAOzO,gBAAkByF,GAE7BrxF,EAAOj8Z,UAAUs+gB,6BAA+B,SAAU3lB,EAAO/hf,GAC7DA,EAAQ,EACR,IAAI6ggB,OAAiB33gB,EACjBighB,EAAgBpnB,EAAM7B,uBAG1B,OAFA2gB,EAAiBsI,EAAgBA,EAAcl4B,gBAAkB8Q,EAAM9Q,gBACvEjxe,EAAQmpgB,EAAgBtI,EAAe7vB,aAAa1kf,QAAQ68gB,GAAiBpnB,EAAM9Q,gBAAgBD,aAAa1kf,QAAQy1f,IAC/GrL,WAAYmqB,EAAgB7ggB,MAAOA,IAEhDqlZ,EAAOj8Z,UAAUoygB,qBAAuB,SAAUzZ,GAC9C,IAAIjof,EAAOiof,EAAMrL,WAEbz4V,EADOnkJ,EAAKkkJ,KACKh+I,MAAQ,EACzB4sR,OAAW1jS,EACXqygB,OAAWrygB,EAgBf,IAfI6E,KAAKo6e,OAAOlvQ,MAAMzuO,OAASyzJ,IAES,KADpC2uI,EAAW7+R,KAAKo6e,OAAOlvQ,MAAMh7E,IAChBwhW,YAAYj1f,QAAiBsP,EAAK8sC,OAAOgmP,EAAS6yN,YAAY,KAIvE8b,EAAW3uO,EAAS6yN,YAAY,GAChC1xf,KAAKo6e,OAAOszB,iBAAiBF,EAAS7qB,cAAe6qB,EAASv9W,OAJ9D4uI,OAAW1jS,GAOfsC,EAAkBohS,KAClB2uO,EAAWxtgB,KAAKq7gB,gBAAgBtvgB,GAChC8yR,EAAW7+R,KAAKo6e,OAAO6rB,cAAcuH,EAAUt9W,MAGhD,CACC,IAAI2sE,EAAY9wN,EAAK+7H,UACrB,GAAIksX,IAAUn3R,EACV,MAEJ9wN,EAAKk3e,aAAa72V,MAClBohX,EAASvqB,aAAa56d,OAAO,EAAG,EAAGw0M,GACnCA,EAAUqmR,gBAAkBsqB,EAC5BA,EAASz3f,QAAU8mN,EAAU9mN,OAEjC,OAAOy3f,GAEXl2G,EAAOj8Z,UAAUgghB,gBAAkB,SAAUtvgB,GACzC,IAAIuvgB,EAAUt7gB,KAAKkmgB,cAAclmgB,KAAKo6e,OAAO+rB,kBAG7C,OAFAmV,EAAQ34B,cAAgB52e,EAAK42e,cAC7B24B,EAAQrpgB,MAAQlG,EAAKkG,MACdqpgB,GAUXhkH,EAAOj8Z,UAAUo8gB,aAAe,SAAU50B,EAAW1xO,GAC7CnxQ,KAAKo6e,OAAOkV,MAAM7U,kBAAoBz6e,KAAKo6e,OAAOkV,MAAM5U,cACxD16e,KAAKo6e,OAAOkV,MAAM5U,aAAas8B,qBAAqBn0B,GAExD,IAAIwb,EAOAkd,GALAld,EADAxb,EAAUjF,gBAAgBgG,aAA+D,IAAjDf,EAAUjF,gBAAgBgG,WAAWsC,OAChErD,EAAU8P,kBAAkB,GAAG/1e,WAG/Bime,EAAUI,aAAa9xO,IAEVssP,aAC1BhggB,EAAkB89gB,KAClBA,EAAeld,GAEIkd,EAAa14B,UAApC,IACI8F,EAAa9F,EAAUK,gBAU3B,GATAyF,EAAW5ye,QAAU8se,EAAU9se,OAC3B/V,KAAKo6e,OAAOkV,MAAMye,uBAAyBlrB,EAAU60B,iBAErD13gB,KAAKo6e,OAAOu9B,2BAA2B90B,EAAU8F,WAAWhG,cAAe3if,KAAKo6e,OAAOw9B,gBAAgB/0B,GAAY8F,EAAW14V,MAG9HjwJ,KAAKo6e,OAAOszB,iBAAiB/kB,EAAWhG,cAAegG,EAAW14V,MAEtEjwJ,KAAKo6e,OAAOusB,yBAAyB9jB,GAAW,GAC5C04B,EAAa14B,UAAUvoQ,UACvBt6O,KAAKo6e,OAAO2wB,WAAWloB,EAAU71e,GACjChN,KAAKqogB,gBAAgBxlB,EAAW,OAE/B,CAGD,GAFA7if,KAAKk3gB,wBAAwBqE,EAAa14B,UAAW04B,EAAc,GACnEv7gB,KAAK2ogB,gBAAgB4S,EAAa14B,WAC9B04B,EAAale,gBAAkB5/f,EAAkBolf,EAAUjF,iBAAkB,CAC7E,IAAIhgQ,GAAmB+sQ,GAAcO,oBAAoBrI,EAAUjF,gBAAgBhgQ,iBACnF59O,KAAKo6e,OAAOyuB,kBAAkBjrR,GAElC,GAEIilQ,GADA04B,EAAev7gB,KAAK6/O,WAAW07R,EAAc,IACpB14B,UACzB04B,EAAeA,EAAand,eACvBmd,GACTv7gB,KAAK8ogB,mBAAmB9ogB,KAAKo6e,OAAQyI,GACrC7if,KAAKo6e,OAAOusB,yBAAyB9jB,GAAW,GAEpD7if,KAAKy2gB,qBAAqB5zB,EAAW7if,KAAKo6e,SAEvC9iF,KC9/IPkkH,GAA0B,WAC1B,SAASA,EAASphC,GACdp6e,KAAK4kf,YAAa,EAClB5kf,KAAKu6a,SAAW,EAChBv6a,KAAKy6a,QAAU,EACfz6a,KAAK+lgB,aAAc,EACnB/lgB,KAAKo6e,OAASA,EA04BlB,OAx4BA97e,OAAOuJ,eAAe2zgB,EAASnghB,UAAW,cAKtCqM,IAAK,WACD,OAAI1H,KAAK4kf,YACDnnf,EAAkBuC,KAAKy7gB,gBACvBz7gB,KAAKy7gB,aAAej7gB,SAASW,cAAc,UAC3CnB,KAAKy7gB,aAAavub,WAAW,MAAMO,QAEhCztF,KAAKy7gB,cAETh+gB,EAAkBuC,KAAKo6e,aAAUj/e,EAAY6E,KAAKo6e,OAAOshC,iBAEpE/zgB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe2zgB,EAASnghB,UAAW,mBAItCqM,IAAK,WACD,OAAOjK,EAAkBuC,KAAKo6e,aAAUj/e,EAAY6E,KAAKo6e,OAAOuhC,iBAEpEh0gB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe2zgB,EAASnghB,UAAW,eAItCqM,IAAK,WACD,OAAO1H,KAAK+kf,WAAW73Z,WAAW,OAEtCvlF,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe2zgB,EAASnghB,UAAW,oBAItCqM,IAAK,WACD,OAAO1H,KAAK27gB,gBAAgBzub,WAAW,OAE3CvlF,YAAY,EACZC,cAAc,IAKlB4zgB,EAASnghB,UAAUughB,SAAW,SAAUplf,GACpC,OAAIA,EAAM/5B,OAAS,GACE,MAAb+5B,EAAM,IACFA,EAAM/5B,OAAS,EACR+5B,EAAMQ,OAAO,EAAG,GAI5BR,GAWXglf,EAASnghB,UAAUwpf,cAAgB,SAAU50V,EAAMzjJ,EAAME,EAAKsJ,EAAOD,GACjE,IAAItY,EAAkBuC,KAAK+kf,cAAetnf,EAAkBwyJ,GAA5D,CAGAjwJ,KAAK67gB,YAAY1tb,UAAYnuF,KAAK47gB,SAAS57gB,KAAKo6e,OAAOzob,iBACvD3xD,KAAK67gB,YAAYnub,YACjB1tF,KAAK67gB,YAAYztb,SAAS5hF,EAAME,EAAKsJ,EAAOD,GAC5C/V,KAAK67gB,YAAYvtb,YACjBtuF,KAAK67gB,YAAYtub,YAAcvtF,KAAKo6e,OAAOkV,MAAMjjB,YACjDrse,KAAK67gB,YAAYvsF,WAAW9ib,EAAME,EAAKsJ,EAAOD,GAC9C/V,KAAKu6a,SAAW/ta,EAChBxM,KAAKy6a,QAAU/ta,EACX1M,KAAK4kf,WACL5kf,KAAK87gB,YAAY7rX,IAGjBjwJ,KAAK67gB,YAAYnub,YACjB1tF,KAAK67gB,YAAYpub,OACjBztF,KAAK67gB,YAAYxof,KAAK7mB,EAAME,EAAKsJ,EAAOD,GACxC/V,KAAK67gB,YAAYp+R,QAEjBxtF,EAAK4jW,cACL7zf,KAAK+7gB,gBAAgB9rX,EAAMA,EAAK4jW,cAEhC5jW,EAAK6jW,cACL9zf,KAAK+7gB,gBAAgB9rX,EAAMA,EAAK6jW,cAEpC,IAAK,IAAI33f,EAAI,EAAGA,EAAI8zJ,EAAKyhW,YAAYj1f,OAAQN,IACzC6D,KAAK+rG,OAAOkkD,EAAMA,EAAKyhW,YAAYv1f,IAEnC6D,KAAKo6e,OAAOkV,MAAMye,wBAA0B/tgB,KAAK4kf,YACjD5kf,KAAKg8gB,sBAAsB/rX,EAAMjwJ,KAAKu6a,SAAUv6a,KAAKy6a,QAASxqR,EAAK4jW,cAEvE7zf,KAAKu6a,SAAW,EAChBv6a,KAAKy6a,QAAU,EACfz6a,KAAK67gB,YAAYhub,YAMrB2tb,EAASnghB,UAAUyghB,YAAc,SAAU7rX,GACvCjwJ,KAAK67gB,YAAYryF,UAAU,EAAG,EAAGxpb,KAAK+kf,WAAW/ue,MAAOhW,KAAK+kf,WAAWhve,QACxE/V,KAAKi8gB,iBAAiBzyF,UAAU,EAAG,EAAGxpb,KAAK27gB,gBAAgB3lgB,MAAOhW,KAAK27gB,gBAAgB5lgB,QACvF/V,KAAK67gB,YAAYhub,UACjB7tF,KAAKi8gB,iBAAiBpub,UACtB,IAAI73E,EAAQi6I,EAAK00V,kBAAkB3ue,MAC/BD,EAASk6I,EAAK00V,kBAAkB5ue,OAChCmmgB,EAAM7vgB,KAAKC,IAAI,EAAGzQ,OAAOsghB,kBAAoB,GAC7Cn8gB,KAAK+kf,WAAW/ue,QAAUA,EAAQkmgB,GAAOl8gB,KAAK+kf,WAAWhve,SAAWA,EAASmmgB,IAC7El8gB,KAAK+kf,WAAWhve,OAASA,EAASmmgB,EAClCl8gB,KAAK+kf,WAAW/ue,MAAQA,EAAQkmgB,EAChCl8gB,KAAK+kf,WAAWrgf,MAAMqR,OAASA,EAAS,KACxC/V,KAAK+kf,WAAWrgf,MAAMsR,MAAQA,EAAQ,KACtChW,KAAK67gB,YAAY5tb,YAAc,EAC/BjuF,KAAK67gB,YAAYpwd,MAAMywd,EAAKA,KAQpCV,EAASnghB,UAAU0ghB,gBAAkB,SAAU9rX,EAAMmsX,GACjDp8gB,KAAK67gB,YAAY5tb,YAAcjuF,KAAKo6e,OAAOkV,MAAMye,sBAAwB,EAAI,IAC7E,IAAK,IAAI5xgB,EAAI,EAAGA,EAAIighB,EAAen5B,aAAaxmf,OAAQN,IAAK,CACzD,IAAIw1f,EAASyqB,EAAen5B,aAAa9mf,GACzC6D,KAAKq8gB,aAAapsX,EAAM0hW,GAE5B3xf,KAAK67gB,YAAY5tb,YAAcjuF,KAAKo6e,OAAOkV,MAAMye,sBAAwB,IAAO,GAEpFyN,EAASnghB,UAAU2ghB,sBAAwB,SAAU/rX,EAAMzjJ,EAAME,EAAKilf,GAElE,IAAIxmQ,EAAYw/P,GAAcO,oBAAoBj7V,EAAKyhW,YAAY,GAAG/O,cAAcx3P,WAChFn+O,EAAIhN,KAAKs8gB,eAAejwgB,KAAKC,IAAKqlf,EAAO3kf,EAAI2kf,EAAO57e,OAASo1O,IAC7DuwC,EAAY17R,KAAKs8gB,eAAersX,EAAK00V,kBAAkB3ue,OACvDi3E,EAAMjtF,KAAK67gB,YACf5ub,EAAIQ,OACJR,EAAIgB,YAAc,IAElBjuF,KAAKu8gB,eAAetvb,EAAKzgF,EAAME,EAAMM,EAAG0uR,GACxC,IAAIh1R,EAAO1G,KAAKw8gB,oBAAoBvsX,GAAM,GAC1ChjE,EAAIvgE,KAAO,YACX,IAAI1W,EAAQi3E,EAAIzgE,YAAY9lB,GAAMsP,MAGlC,GAFAhW,KAAKy8gB,uBAAuBxvb,EAAKzgF,EAAO,EAAGE,EAAMM,EAAGgJ,EAAQ,GAAI,IAChEhW,KAAK08gB,2BAA2Bzvb,EAAKvmF,EAAM8F,EAAO,GAAIQ,EAAIN,EAAM,IAC5DujJ,EAAK6jW,aAAc,CAEnB,IAAIma,EAAiBtjB,GAAcO,oBAAoBj7V,EAAKyhW,YAAY,GAAG/O,cAAcsrB,gBAErF0O,EAAe38gB,KAAKs8gB,eAAersX,EAAK00V,kBAAkB5ue,QAC1D/V,KAAKs8gB,eAAejwgB,KAAKC,IAAI2jJ,EAAK6jW,aAAa/9e,OAASk4f,EAAgBtjB,GAAcO,oBAAoBj7V,EAAK6jW,aAAanR,cAAct3P,gBAC9IrrP,KAAKu8gB,eAAetvb,EAAKzgF,EAAME,EAAMiwgB,EAAcjhP,GACnDh1R,EAAO1G,KAAKw8gB,oBAAoBvsX,GAAM,GACtCj6I,EAAQi3E,EAAIzgE,YAAY9lB,GAAMsP,MAC9BhW,KAAKy8gB,uBAAuBxvb,EAAKzgF,EAAO,EAAGE,EAAMiwgB,EAAe,GAAI3mgB,EAAQ,GAAI,IAChFhW,KAAK08gB,2BAA2Bzvb,EAAKvmF,EAAM8F,EAAO,GAAIE,EAAMiwgB,EAAe,GAC3E1vb,EAAIY,YAGZ2tb,EAASnghB,UAAUmhhB,oBAAsB,SAAUvsX,EAAMnkI,GACrD,IAAIplB,EAaJ,OAZAA,EAAOolB,EAAW,SAAW,SACzBmkI,EAAKyhW,YAAY,GAAG/O,cAAci6B,oBAA0D,IAApC58gB,KAAKo6e,OAAOlvQ,MAAM3sO,QAAQ0xJ,GAClFvpJ,EAAOolB,EAAW,oBAAsB,oBAEnCmkI,EAAKyhW,YAAY,GAAG/O,cAAck6B,2BAEnCn2gB,GADC1G,KAAKo6e,OAAOlvQ,MAAM3sO,QAAQ0xJ,GAAQ,GAAK,GAAM,EACvCnkI,EAAW,mBAAqB,mBAGhCA,EAAW,kBAAoB,mBAGvCplB,GAEX80gB,EAASnghB,UAAUkhhB,eAAiB,SAAUtvb,EAAKlgF,EAAGC,EAAGgJ,GACrDi3E,EAAIS,YACJT,EAAIM,YAAc,UAClBN,EAAIG,UAAY,EAChBH,EAAIK,aAAa,EAAG,IACpBL,EAAIU,OAAO5gF,EAAGC,GACdigF,EAAIW,OAAO7gF,EAAIiJ,EAAOhJ,GACtBigF,EAAInvD,SACJmvD,EAAIK,gBACJL,EAAIqB,aAERktb,EAASnghB,UAAUohhB,uBAAyB,SAAUxvb,EAAKlgF,EAAGC,EAAG6/N,EAAGnsI,GAChEzT,EAAIS,YACJT,EAAIkB,UAAY,YAChBlB,EAAImB,SAASrhF,EAAGC,EAAG6/N,EAAGnsI,GACtBzT,EAAIM,YAAc,QAClBN,EAAIqiW,WAAWvib,EAAGC,EAAG6/N,EAAGnsI,GACxBzT,EAAIqB,aAERktb,EAASnghB,UAAUqhhB,2BAA6B,SAAUzvb,EAAK7yD,EAASrtB,EAAGC,GACvEigF,EAAIS,YACJT,EAAIkB,UAAY,UAChBlB,EAAImC,aAAe,aACnBnC,EAAIqC,SAASl1D,EAASrtB,EAAGC,GACzBigF,EAAIqB,aAORktb,EAASnghB,UAAU0wG,OAAS,SAAUkkD,EAAM04V,GACxC,IAAK,IAAIxsf,EAAI,EAAGA,EAAIwsf,EAAW1F,aAAaxmf,OAAQN,IAAK,CACrD,IAAIw1f,EAAShJ,EAAW1F,aAAa9mf,GAC3B,IAANA,GAAWwsf,EAAW1F,aAAa,aAAc8P,IAAe9iW,EAAK4vW,4BAErE7/f,KAAK4/S,aAAa3vJ,EAAM0hW,EAAQ3xf,KAAKo6e,OAAOvpb,OAAO4nO,UAAUkwN,EAAW1F,aAAa,KAEzFjjf,KAAKq8gB,aAAapsX,EAAM0hW,KAQhC6pB,EAASnghB,UAAUghhB,aAAe,SAAUpsX,EAAM0hW,GAC1CA,aAAkB7O,GAClB9if,KAAK88gB,sBAAsB7sX,EAAM0hW,GAGjC3xf,KAAK+8gB,kBAAkB9sX,EAAM0hW,IAUrC6pB,EAASnghB,UAAUukT,aAAe,SAAU3vJ,EAAM0hW,EAAQ/sa,GACtD,IAAInnF,EAAkBmnF,GAAtB,CAIA,IAAK,IADDl4E,EAAMujJ,EAAKmqV,OAAOwtB,WAAW56f,EACxB7Q,EAAI,EAAGA,GAAKyoF,EAAO67M,SAAUtkS,IAAK,CACvC,GAAmE,IAA/DyoF,EAAOqva,WAAWtB,kBAAkB,GAAG1P,aAAaxmf,OACpD,OAEJ,IAAIikE,EAAMkkB,EAAOqva,WAAWtB,kBAAkB,GAAG1P,aAAa,GAC1D4Q,EAAenzb,EAAIrhE,QACvBw0f,EAAa3Q,gBAAkBxib,EAAIwib,gBAEnCjzV,EAAKmqV,OAAOqtB,yBAAyB5T,EAAc,IAAI39d,GAAK+5H,EAAKmqV,OAAOwtB,WAAW76f,EAAGL,EAAKmnf,EAAa79e,MAAO69e,EAAa99e,SAC5Hk6I,EAAKmqV,OAAOvpb,OAAOoid,0BAA0BvmgB,EAAKmnf,GAGlD,IAAK,IAFD5wb,OAAO9nE,EAEFooB,EAAI,EAAGA,EAAIswe,EAAa5Q,aAAaxmf,OAAQ8mB,IAClD0/C,EAAO4wb,EAAa5Q,aAAa1/d,GACjCvjB,KAAKg9gB,sBAAsB/sX,EAAMhtF,GAErCv2D,GAAOmnf,EAAa99e,OAEpB47e,EAAO3kf,IAAMN,GAEbujJ,EAAKmqV,OAAOvpb,OAAO+kd,4BAA4BlpgB,EAAKilf,KAQ5D6pB,EAASnghB,UAAUyhhB,sBAAwB,SAAU7sX,EAAMolX,GAGvD,IAAK,IAFD3ogB,EAAM2ogB,EAAWrogB,EACjBR,EAAO6ogB,EAAWtogB,EACb5Q,EAAI,EAAGA,EAAIk5gB,EAAWpyB,aAAaxmf,OAAQN,IAAK,CACrD,IAAIw1f,EAAS0jB,EAAWpyB,aAAa9mf,GACrC6D,KAAKsqY,WAAWqnH,EAAQ1hW,EAAMzjJ,EAAME,GACpCA,GAAOilf,EAAO57e,SAQtBylgB,EAASnghB,UAAU0hhB,kBAAoB,SAAU9sX,EAAM+3W,GACnD,IAAK,IAAI7rgB,EAAI,EAAGA,EAAI6rgB,EAAY/kB,aAAaxmf,OAAQN,IAAK,CACtD,IAAIw1f,EAASqW,EAAY/kB,aAAa9mf,GACtC6D,KAAKi9gB,qBAAqBhtX,EAAM0hW,GAC5BqW,EAAYlY,YAAYl5N,YAAc,GACtC52R,KAAKk9gB,mBAAmBlV,KASpCwT,EAASnghB,UAAU4hhB,qBAAuB,SAAUhtX,EAAMi4W,GACtD,IAAK,IAAI/rgB,EAAI,EAAGA,EAAI+rgB,EAAUjlB,aAAaxmf,OAAQN,IAAK,CACpD,IAAIw1f,EAASuW,EAAUjlB,aAAa9mf,GACpC6D,KAAKg9gB,sBAAsB/sX,EAAM0hW,KAQzC6pB,EAASnghB,UAAU2hhB,sBAAwB,SAAU/sX,EAAMupW,GACvD,GAAKx5f,KAAK4kf,cACF5kf,KAAKs8gB,eAAe9iB,EAAWxsf,EAAG,GAAKwsf,EAAWzjf,OAAS/V,KAAKo6e,OAAOhsa,WAAa,GACpFpuE,KAAKs8gB,eAAe9iB,EAAWxsf,EAAG,GAAKhN,KAAKo6e,OAAO+iC,cAAcpngB,QAFzE,EAOK/V,KAAK4kf,YAAc30V,EAAKmqV,OAAOkV,MAAM1/a,WAAaqgF,EAAKmqV,OAAOkV,MAAM1/a,UAAUwtc,gBAAgB3ghB,OAAS,GACxGwzJ,EAAKmqV,OAAOkV,MAAM1/a,UAAUytc,2BAA2Br9gB,KAAKi8gB,iBAAkBziB,GAElFx5f,KAAKs9gB,uBAAuBrtX,EAAKmqV,OAAQof,GACzC,IAAK,IAAIr9f,EAAI,EAAGA,EAAIq9f,EAAWvW,aAAaxmf,OAAQN,IAAK,CACrD,IAAIw1f,EAAS6H,EAAWvW,aAAa9mf,GACjC6Z,EAAQwjf,EAAWxjf,MAAQwjf,EAAW/8d,OAAOjwB,KAAOgtf,EAAWtE,gBACnEl1f,KAAK00B,SAAS8ke,EAAWzsf,EAAGysf,EAAWxsf,EAAGhN,KAAKs8gB,eAAetmgB,GAAQhW,KAAKs8gB,eAAe9iB,EAAWzjf,SACrG/V,KAAKq8gB,aAAapsX,EAAM0hW,GACxB3xf,KAAK67gB,YAAYhub,aAUzB2tb,EAASnghB,UAAUivY,WAAa,SAAU+zH,EAAYpuW,EAAMzjJ,EAAME,GAO9D,IANK1M,KAAK4kf,YAAc30V,EAAKmqV,OAAOkV,MAAM1/a,WAAaqgF,EAAKmqV,OAAOkV,MAAM1/a,UAAUwtc,gBAAgB3ghB,OAAS,GACxGwzJ,EAAKmqV,OAAOkV,MAAM1/a,UAAU2tc,sBAAsBv9gB,KAAKi8gB,iBAAkB5d,EAAY3xf,GAErF2xf,EAAWhB,gBACX7wf,GAAQm+e,GAAcO,oBAAoBmT,EAAWxb,UAAUjF,gBAAgBhgQ,kBAE/E59O,KAAKo6e,OAAOkV,MAAMhU,oBAEb79e,EAAkBwyJ,EAAKmqV,OAAOkV,MAAMhU,kBAAkBkiC,qBAAuBvtX,EAAKmqV,OAAOkV,MAAMhU,kBAAkBkiC,mBAAmB/2S,YAAY43R,GAEjJ,IAAK,IADDof,EAAaxtX,EAAKmqV,OAAOkV,MAAMhU,kBAAkBkiC,mBAAmB91gB,IAAI22f,GACnEligB,EAAI,EAAGA,EAAIshhB,EAAWhhhB,OAAQN,IACnC6D,KAAK67gB,YAAY1tb,UAAY,UAE7BnuF,KAAK67gB,YAAYztb,SAASpuF,KAAKs8gB,eAAemB,EAAWthhB,GAAGqQ,KAAM,GAAIxM,KAAKs8gB,eAAe5vgB,EAAK,GAAI1M,KAAKs8gB,eAAemB,EAAWthhB,GAAG6Z,OAAQhW,KAAKs8gB,eAAeje,EAAWtof,SAIxL,IAAS5Z,EAAI,EAAGA,EAAIkigB,EAAWjkf,SAAS3d,OAAQN,IAAK,CACjD,IAAIuhgB,EAAaW,EAAWjkf,SAASje,GACrC,GAAIuhgB,aAAsBpS,IAAmBtrf,KAAK+lgB,aACxB,IAArBrI,EAAW1nf,OAAqC,IAAtB0nf,EAAW3nf,OAClC/V,KAAK+lgB,cACLrI,EAAW1nf,MAAQ,GAEvBxJ,GAAQkxf,EAAW1nf,MAAQ0nf,EAAWjhe,OAAOjwB,KAC7CxM,KAAK09gB,gBAAgBhgB,OANzB,CASA,IAAIigB,EAAa39gB,KAAK49gB,sBAAsBvf,GACvCr+f,KAAK4kf,cACF5kf,KAAKs8gB,eAAe5vgB,EAAMgxf,EAAWjhe,OAAO/vB,IAAK,GAAKgxf,EAAW3nf,OAAS/V,KAAKo6e,OAAOhsa,WAAa,GACnGpuE,KAAKs8gB,eAAe5vgB,EAAMgxf,EAAWjhe,OAAO/vB,IAAK,GAAK1M,KAAKo6e,OAAO+iC,cAAcpngB,SAKpF2nf,aAAsB3I,GACtB/0f,KAAK69gB,yBAAyBngB,EAAYlxf,EAAME,EAAKixgB,GAEhDjgB,aAAsBjJ,GAC3Bz0f,KAAK89gB,sBAAsBpgB,EAAYlxf,EAAME,EAAKixgB,GAGlD39gB,KAAK+9gB,qBAAqBrgB,EAAYlxf,EAAME,EAAKixgB,GAErDnxgB,GAAQkxf,EAAW1nf,MAAQ0nf,EAAWjhe,OAAOjwB,MAbrCA,GAAQkxf,EAAW1nf,MAAQ0nf,EAAWjhe,OAAOjwB,QAgB7DgvgB,EAASnghB,UAAUqihB,gBAAkB,SAAU18gB,GACvCA,aAAmBsqf,KACO,IAAtBtqf,EAAQuqf,UACF9tf,EAAkBuD,EAAQwqf,YAAaxqf,EAAQu9f,cACjDv+f,KAAK+lgB,aAAc,GAGI,IAAtB/kgB,EAAQuqf,WAAyC,IAAtBvqf,EAAQuqf,YACxCvrf,KAAK+lgB,aAAc,KAQ/ByV,EAASnghB,UAAUuihB,sBAAwB,SAAUvf,GAGjD,IAAK,IAFDtof,EAAS,EACToX,EAAa,EACRhxB,EAAI,EAAGA,EAAIkigB,EAAWjkf,SAAS3d,OAAQN,IACxCkigB,EAAWjkf,SAASje,aAAcmvf,IACA,IAAjC+S,EAAWjkf,SAASje,GAAG6Z,OAAiD,IAAlCqof,EAAWjkf,SAASje,GAAG4Z,QAG9DA,EAASsof,EAAWjkf,SAASje,GAAG4Z,OAASsof,EAAWjkf,SAASje,GAAGsgC,OAAO/vB,MACvEqJ,EAASsof,EAAWjkf,SAASje,GAAGsgC,OAAO/vB,IAAM2xf,EAAWjkf,SAASje,GAAG4Z,OACpEoX,EAAakxe,EAAWjkf,SAASje,GAAG4Z,OAAS,IAGrD,OAAOA,EAAS,EAAIoX,GASxBquf,EAASnghB,UAAUwihB,yBAA2B,SAAUngB,EAAYlxf,EAAME,EAAKixgB,GAC3E,IAAIxyR,EAAYuyQ,EAAWjhe,OAAO/vB,IAC9Bw+O,EAAawyQ,EAAWjhe,OAAOjwB,KAC/BwvB,EAAS0he,EAAWpV,UAAUtK,gBAC9BggC,EAAuBtgB,EAAW5vc,KAAK+0b,UAAU7E,gBACjDxnd,EAA6B,YAArBwF,EAAOsud,UAA0B0zB,EAAqB1zB,UAAYtud,EAAOsud,UACrFtqf,KAAK67gB,YAAYzsb,aAAe,MAChC,IAAI1gD,EAAO,GACP6C,EAAS,GACTtkB,EAAmC,YAAtB+O,EAAO/O,WAA2B+wf,EAAqB/wf,WAAa+O,EAAO/O,WACxFJ,EAA+B,KAApBmP,EAAOnP,SAAkBmxf,EAAqBnxf,SAAWmP,EAAOnP,SAE3Ew9d,EAAiD,WAA7Brud,EAAOqud,kBAAiC2zB,EAAqB3zB,kBAAoBrud,EAAOqud,kBAChH37c,EAAO1S,EAAO0S,KAAO,OAASsve,EAAqBtve,KAAO,OAAS,GACnE6C,EAASvV,EAAOuV,OAAS,SAAWyse,EAAqBzse,OAAS,SAAW,GAC7E1kB,EAAwB,IAAbA,EAAiB,GAAMA,GAAkC,WAAtBw9d,EAAiC,EAAI,KACnF,IAAIE,EAAyC,SAAzBvud,EAAOuud,cAA2ByzB,EAAqBzzB,cAAgBvud,EAAOuud,cAC9FC,EAA2C,YAA1Bxud,EAAOwud,eAA+BwzB,EAAqBxzB,eAC5Exud,EAAOwud,eACY,YAAnBA,IACuC,MAAnCA,EAAetme,UAAU,EAAG,GAC5BlkB,KAAK67gB,YAAY1tb,UAAYw8Z,GAAcM,sBAAsBT,GAGjExqf,KAAK67gB,YAAY1tb,UAAYnuF,KAAK47gB,SAASpxB,GAG/Cxqf,KAAK67gB,YAAYztb,SAASpuF,KAAKs8gB,eAAe9vgB,EAAO0+O,EAAY,GAAIlrP,KAAKs8gB,eAAe5vgB,EAAMy+O,EAAW,GAAInrP,KAAKs8gB,eAAe5e,EAAW1nf,OAAQhW,KAAKs8gB,eAAe5e,EAAW3nf,UAExL/V,KAAK67gB,YAAYnvf,KAAOgiB,EAAO,IAAM6C,EAAS,IAAM1kB,EAAW7sB,KAAKo6e,OAAOhsa,WAAa,MAAanhD,EAC3E,cAAtBo9d,IACAl/P,GAAauyQ,EAAW3nf,OAAS2nf,EAAW3nf,OAAS,KAEzD/V,KAAK67gB,YAAY1tb,UAAYnuF,KAAK47gB,SAASplf,GAE3Cx2B,KAAK67gB,YAAYvsb,SAASoua,EAAWjxe,KAAMzsB,KAAKs8gB,eAAe9vgB,EAAO0+O,EAAY,GAAIlrP,KAAKs8gB,eAAe5vgB,EAAMy+O,EAAW,GAAInrP,KAAKs8gB,eAAe5e,EAAW1nf,QACrI,SAArBgmB,EAAOk5O,WAAyBz3Q,EAAkBu+B,EAAOk5O,YACzDl1Q,KAAKi+gB,gBAAgBvgB,EAAYlxf,EAAME,EAAKixgB,EAAYnnf,EAAOwF,EAAOk5O,UAAWm1O,GAE/D,SAAlBE,GACAvqf,KAAKk+gB,oBAAoBxgB,EAAYlxf,EAAME,EAAKsvB,EAAOuud,cAAe/zd,EAAO6zd,IAWrFmxB,EAASnghB,UAAU0ihB,qBAAuB,SAAUrgB,EAAYlxf,EAAME,EAAKixgB,GACvE,IAAIQ,GAAe,EACfj7B,EAAkBwa,EAAW5vc,KAAK+0b,UAAUK,gBAC5CA,aAA2B6O,KAC3BosB,EAAkE,YAAlDj7B,EAAgBgR,SAASiC,UAAU7F,YAEvD,IAAInlQ,EAAYuyQ,EAAWjhe,OAAO/vB,IAC9Bw+O,EAAawyQ,EAAWjhe,OAAOjwB,KAC/B2xgB,GAEAn+gB,KAAK00B,SAASwud,EAAgBn2e,EAAGm2e,EAAgBl2e,EAAGhN,KAAKs8gB,eAAep5B,EAAgBlte,OAAQhW,KAAKs8gB,eAAep5B,EAAgBnte,SAExI,IAAIimB,EAAS0he,EAAW1f,gBACM,YAA1Bhid,EAAOwud,iBACuC,MAA1Cxud,EAAOwud,eAAetme,UAAU,EAAG,GACnClkB,KAAK67gB,YAAY1tb,UAAYw8Z,GAAcM,sBAAsBjvd,EAAOwud,gBAGxExqf,KAAK67gB,YAAY1tb,UAAYnuF,KAAK47gB,SAAS5/e,EAAOwud,gBAGtDxqf,KAAK67gB,YAAYztb,SAASpuF,KAAKs8gB,eAAe9vgB,EAAO0+O,EAAY,GAAIlrP,KAAKs8gB,eAAe5vgB,EAAMy+O,EAAW,GAAInrP,KAAKs8gB,eAAe5e,EAAW1nf,OAAQhW,KAAKs8gB,eAAe5e,EAAW3nf,UAExL,IAAIygB,EAAQwF,EAAOsud,UACnBtqf,KAAK67gB,YAAYzsb,aAAe,MAChC,IAAI1gD,EAAO,GACP6C,EAAS,GACT1kB,EAAW,GACf6hB,EAAO1S,EAAO0S,KAAO,OAAS,GAC9B6C,EAASvV,EAAOuV,OAAS,SAAW,GACpC1kB,EAA+B,IAApBmP,EAAOnP,SAAiB,GAAMmP,EAAOnP,UAAyC,WAA7BmP,EAAOqud,kBAAiC,EAAI,KACxGrqf,KAAK67gB,YAAYnvf,KAAOgiB,EAAO,IAAM6C,EAAS,IAAM1kB,EAAW7sB,KAAKo6e,OAAOhsa,WAAa,MAAapyC,EAAO/O,WAC3E,cAA7B+O,EAAOqud,oBACPl/P,GAAauyQ,EAAW3nf,OAAS2nf,EAAW3nf,OAAS,KAEzD/V,KAAK67gB,YAAY1tb,UAAYnuF,KAAK47gB,SAASplf,GAC3C,IAAI4nf,EAAcp+gB,KAAKs8gB,eAAe5e,EAAW1nf,OAC7CyW,EAAOixe,EAAWjxe,KAEtB,GAAIixe,aAAsBoB,GAAe,CACrC,IAAIuf,EAAa3gB,EACU,KAAvB2gB,EAAWtf,SAAmBthgB,EAAkB4ghB,EAAWrf,YAAuC,SAAzBqf,EAAWrf,UAIxD,KAAvBqf,EAAWtf,UAChBtye,EAAO4xf,EAAWtf,UAJlBtye,EAAOzsB,KAAKs+gB,aAAa5gB,GACzB2gB,EAAWtf,QAAUtye,GAO7BzsB,KAAK67gB,YAAYvsb,SAAS7iE,EAAMzsB,KAAKs8gB,eAAe9vgB,EAAO0+O,EAAY,GAAIlrP,KAAKs8gB,eAAe5vgB,EAAMy+O,EAAW,GAAIizR,GAC3F,SAArBpif,EAAOk5O,WAAyBz3Q,EAAkBu+B,EAAOk5O,YAEzDl1Q,KAAKi+gB,gBAAgBvgB,EAAYlxf,EAAME,EAAKixgB,EAAYnnf,EAAOwF,EAAOk5O,UAAWl5O,EAAOqud,mBAE/D,SAAzBrud,EAAOuud,eAA6B9sf,EAAkBu+B,EAAOuud,gBAC7Dvqf,KAAKk+gB,oBAAoBxgB,EAAYlxf,EAAME,EAAKsvB,EAAOuud,cAAe/zd,EAAOwF,EAAOqud,mBAEpF8zB,GACAn+gB,KAAK67gB,YAAYhub,WAMzB2tb,EAASnghB,UAAUijhB,aAAe,SAAU5gB,GAIxC,IAHA,IAAI2O,EAAY,EACZkS,EAAYv+gB,KAAKw+gB,mBAAmB9gB,EAAWsB,WAC/CD,EAAUwf,EACP7gB,EAAW1nf,MAAQq2f,GACtBA,EAAYrsgB,KAAKo6e,OAAOouB,WAAWjmQ,SAASw8P,EAASrB,EAAW1f,iBAChE+gB,GAAoBwf,EAExB,OAAOxf,EAAQ19f,MAAM,GAAI,IAK7Bm6gB,EAASnghB,UAAUmjhB,mBAAqB,SAAUxf,GAC9C,IAAIuf,EAAY,GAChB,OAAQvf,GACJ,IAAK,MACDuf,EAAY,IACZ,MACJ,IAAK,SACDA,EAAY,IACZ,MACJ,IAAK,aACDA,EAAY,IAGpB,OAAOA,GASX/C,EAASnghB,UAAUq5B,SAAW,SAAUosW,EAAMC,EAAM/qX,EAAOD,GACvD/V,KAAK67gB,YAAYnub,YACjB1tF,KAAK67gB,YAAYpub,OACjBztF,KAAK67gB,YAAYxof,KAAKrzB,KAAKs8gB,eAAex7I,EAAM,GAAI9gY,KAAKs8gB,eAAev7I,EAAM,GAAI/qX,EAAOD,GACzF/V,KAAK67gB,YAAYp+R,QAarB+9R,EAASnghB,UAAU4ihB,gBAAkB,SAAUvgB,EAAYlxf,EAAME,EAAKixgB,EAAYnnf,EAAO0+O,EAAWm1O,GAChG,IAAIo0B,EAAiB/gB,EAAW3nf,QAAgC,WAAtBs0e,EAAiC,EAAI,KAC3El/P,EAAYuyQ,EAAWjhe,OAAO/vB,IAC9BgygB,EAAkBD,EAAiB,GACnCzxgB,EAAI,EACkB,cAAtBq9e,GAAqCqT,aAAsB3I,IAC3D/nf,EAAKyxgB,EAAiB,EAAIC,EAAmBhygB,EAE7CM,IADAm+O,GAAauyQ,EAAW3nf,OAAS0ogB,GAChB,EAAItzR,EAAY,GAGjCn+O,EAAI2wgB,EAAajxgB,EAGrB1M,KAAK67gB,YAAYztb,SAASpuF,KAAKs8gB,eAAe9vgB,EAAOkxf,EAAWjhe,OAAOjwB,KAAM,GAAIxM,KAAKs8gB,eAAetvgB,EAAG,GAAIhN,KAAKs8gB,eAAe5e,EAAW1nf,OAAQhW,KAAKs8gB,eAAeoC,KAY3KlD,EAASnghB,UAAU6ihB,oBAAsB,SAAUxgB,EAAYlxf,EAAME,EAAK69e,EAAe/zd,EAAO6zd,GAC5F,IAAIo0B,EAAiB/gB,EAAW3nf,QAAgC,WAAtBs0e,EAAiC,EAAI,KAC3El/P,EAAYuyQ,EAAWjhe,OAAO/vB,IACR,cAAtB29e,IACAl/P,GAAauyQ,EAAW3nf,OAAS0ogB,GAErC/xgB,GAAOy+O,EAAY,EAAIA,EAAY,EACnC,IAAIh+N,EAAasxf,EAAiB,GAC9BzxgB,EAAKyxgB,EAAiB,EAAM,GAAMtxf,EAClCkkP,EAAY,EAIhB,IAHsB,iBAAlBk5O,IACAv9e,GAAKmgB,GAEFkkP,GAA+B,iBAAlBk5O,EAAmC,EAAI,IACvDl5O,IAEArxQ,KAAK67gB,YAAYztb,SAASpuF,KAAKs8gB,eAAe9vgB,EAAOkxf,EAAWjhe,OAAOjwB,KAAM,GAAIxM,KAAKs8gB,eAAetvgB,EAAIN,EAAK,GAAI1M,KAAKs8gB,eAAe5e,EAAW1nf,OAAQhW,KAAKs8gB,eAAenvf,IAC7KngB,GAAK,EAAImgB,GAWjBquf,EAASnghB,UAAUyihB,sBAAwB,SAAUpgB,EAAYlxf,EAAME,EAAKixgB,GACxE,IAAIxyR,EAAYuyQ,EAAWjhe,OAAO/vB,IAC9Bw+O,EAAawyQ,EAAWjhe,OAAOjwB,KACnCxM,KACK67gB,YAAYzsb,aAAe,MAChC,IAAIuvb,EAAc,EACdC,GAAY,EAChB,GAAIzzR,EAAY,GAAKuyQ,EAAW5vc,KAAK+0b,UAAU7se,MAAQ0nf,EAAW1nf,MAAO,CACrE,IAAI6ogB,EAAenhB,EAAW5vc,KAAK+0b,UAAUK,gBAI7C,GAAI27B,aAAwB9sB,GAAiB,CACzC,IAAI9I,EAAa,EACjB,GAAI41B,EAAa57B,aAAa,aAAcH,GAAiB,CAEzDmG,EADc41B,EAAa57B,aAAa,GACnBrF,gBAAgBqL,WAEzC01B,EAAcE,EAAa7ogB,MAAQ6ogB,EAAapif,OAAOjwB,KAAOqygB,EAAa3pB,gBAAkBjM,EAC7F21B,GAAY,EAEZ5+gB,KAAK00B,SAASloB,EAAO0+O,EAAYx+O,EAAMy+O,EAAWnrP,KAAKs8gB,eAAeqC,GAAc3+gB,KAAKs8gB,eAAeuC,EAAa9ogB,UAGzH2nf,EAAW+B,YAKXz/f,KAAK67gB,YAAYnsb,UAAUgua,EAAW18f,QAAShB,KAAKs8gB,eAAe9vgB,EAAO0+O,EAAY,GAAIlrP,KAAKs8gB,eAAe5vgB,EAAMy+O,EAAW,GAAInrP,KAAKs8gB,eAAe5e,EAAW1nf,OAAQhW,KAAKs8gB,eAAe5e,EAAW3nf,SAEzM6ogB,GACA5+gB,KAAK67gB,YAAYhub,WAOzB2tb,EAASnghB,UAAU6hhB,mBAAqB,SAAUlV,GAC9C,IAAIn3c,EAAS,IAAIymW,GAAOt3Z,KAAKo6e,QACzBn6a,EAAQ+nc,EACZA,EAAYhyf,MAAQhW,KAAKo6e,OAAOvpb,OAAOglc,cAAc51b,GACrD,IAAI37B,EAASusB,EAAOwld,kBAAkBp2c,EAAM6vb,YAAY76N,SACpD7nM,EAAY,EAGhBA,EAAYu9Z,GAAcO,oBAAoB5md,EAAOi8M,gBAErDvgP,KAAK8+gB,mBAAmBx6e,EAAQ0je,EAAYj7f,EAAIi7f,EAAYvre,OAAOjwB,KAAO4gF,EAAY,EAAG46a,EAAYh7f,EAAGg7f,EAAYj7f,EAAIi7f,EAAYvre,OAAOjwB,KAAO4gF,EAAY,EAAG46a,EAAYh7f,EAAIg7f,EAAYjyf,OAAQq3E,GAErM9oD,EAASusB,EAAOwld,kBAAkBp2c,EAAM6vb,YAAY76N,SACpD7nM,EAAY,EAEZA,EAAYu9Z,GAAcO,oBAAoB5md,EAAOi8M,gBAErDvgP,KAAK8+gB,mBAAmBx6e,EAAQ0je,EAAYj7f,EAAIi7f,EAAYvre,OAAOjwB,KAAO4gF,EAAW46a,EAAYh7f,EAAIogF,EAAY,EAAG46a,EAAYj7f,EAAIi7f,EAAYhyf,MAAQo3E,EAAY46a,EAAYvre,OAAOhwB,MAAOu7f,EAAYh7f,EAAIogF,EAAY,EAAGA,GAE7N9oD,EAASusB,EAAOuld,oBAAoBn2c,EAAM6vb,YAAY76N,SACtD7nM,EAAY,EAEZA,EAAYu9Z,GAAcO,oBAAoB5md,EAAOi8M,gBAErDvgP,KAAK8+gB,mBAAmBx6e,EAAQ0je,EAAYj7f,EAAIi7f,EAAYhyf,MAAQgyf,EAAYvre,OAAOhwB,MAAQ2gF,EAAY,EAAG46a,EAAYh7f,EAAGg7f,EAAYj7f,EAAIi7f,EAAYhyf,MAAQgyf,EAAYvre,OAAOhwB,MAAQ2gF,EAAY,EAAG46a,EAAYh7f,EAAIg7f,EAAYjyf,OAAQq3E,GAE/O9oD,EAASusB,EAAOyld,qBAAqBr2c,EAAM6vb,YAAY76N,SACvD7nM,EAAY,EAEZA,EAAYu9Z,GAAcO,oBAAoB5md,EAAOi8M,gBAErDvgP,KAAK8+gB,mBAAmBx6e,EAAQ0je,EAAYj7f,EAAIi7f,EAAYvre,OAAOjwB,KAAO4gF,EAAW46a,EAAYh7f,EAAIg7f,EAAYjyf,OAASq3E,EAAY,EAAG46a,EAAYj7f,EAAIi7f,EAAYhyf,MAAQo3E,EAAY46a,EAAYvre,OAAOhwB,MAAOu7f,EAAYh7f,EAAIg7f,EAAYjyf,OAASq3E,EAAY,EAAGA,IAQ3Qoub,EAASnghB,UAAUiihB,uBAAyB,SAAUljC,EAAQof,GAC1D,IAAI3oc,EAASupb,EAAOvpb,OAEhB6kc,EAAY8D,EACZulB,EAAgB,EAChBC,EAAmB,EACnBC,EAAiB,EACjBC,EAAkB,EAClBnpgB,EAAS,EACH2/e,EAAUpB,WAAWr/N,QAC3BukO,EAAWtW,2BAA2B+O,KACtC+sB,EAAmBxlB,EAAW/8d,OAAO9vB,OAAS6sf,EAAWtW,gBAAgBmS,kBACzE0pB,EAAgBvlB,EAAW/8d,OAAO/vB,IAAM8sf,EAAWtW,gBAAgBkS,gBAEvE6pB,EAAiBzlB,EAAW/8d,OAAOjwB,KAAOgtf,EAAWtE,gBACrDgqB,EAAkB1lB,EAAW/8d,OAAOhwB,MAAQ+sf,EAAWrE,iBAO/Cp/e,EANHtY,EAAkBi4f,EAAUxB,WAAyD,YAA5CwB,EAAUxB,SAASiC,UAAU7F,YAIlE7yf,EAAkBi4f,EAAUxB,YAAcwB,EAAUxB,UAAUz3f,QAAU,EAEhE4P,KAAKC,IAAIq+e,GAAcO,oBAAoBwK,EAAUxB,SAASiC,UAAUpgf,QAASyjf,EAAWzjf,QAAUgpgB,EAAgBC,EAGtHxlB,EAAWzjf,OAASgpgB,EAAgBC,EARxCr0B,GAAcO,oBAAoBwK,EAAUxB,SAASiC,UAAUpgf,QAAUgpgB,EAAgBC,EAWtGh/gB,KAAKm/gB,qBAAqBppgB,EAAQyjf,GAClC,IAAIl1d,EAASytd,GAAgB8H,kBAAkBnE,GAC3Ctoa,EAAY,EAEhBA,EAAYu9Z,GAAcO,oBAAoB5md,EAAOi8M,gBAErDvgP,KAAK8+gB,mBAAmBx6e,EAAQk1d,EAAWzsf,EAAIkygB,EAAiB7xb,EAAWosa,EAAWxsf,EAAI+xgB,EAAevlB,EAAWzsf,EAAIkygB,EAAiB7xb,EAAWosa,EAAWxsf,EAAIwsf,EAAWzjf,OAASipgB,EAAkB5xb,GAEzM9oD,EAASytd,GAAgBqK,iBAAiB1G,GAE1Ctoa,EAAYu9Z,GAAcO,oBAAoB5md,EAAOi8M,gBAErDvgP,KAAK8+gB,mBAAmBx6e,EAAQk1d,EAAWzsf,EAAIysf,EAAW/8d,OAAOjwB,KAAMgtf,EAAWxsf,EAAIwsf,EAAW/8d,OAAO/vB,IAAM0gF,EAAY,EAAGosa,EAAWzsf,EAAIysf,EAAWxjf,MAAQwjf,EAAW/8d,OAAOhwB,MAAO+sf,EAAWxsf,EAAIwsf,EAAW/8d,OAAO/vB,IAAM0gF,EAAY,EAAGA,IAE1Osoa,EAAUzB,WAAWnE,YAAYl5N,YAAc,GAAK8+N,EAAU78N,YAAc68N,EAAUxB,SAASjR,aAAaxmf,OAAS,KACrH6nC,EAASytd,GAAgB+J,mBAAmBpG,GAE5Ctoa,EAAYu9Z,GAAcO,oBAAoB5md,EAAOi8M,gBAErDvgP,KAAK8+gB,mBAAmBx6e,EAAQk1d,EAAWzsf,EAAIysf,EAAWxjf,MAAQwjf,EAAW/8d,OAAOhwB,MAAQ2gF,EAAY,EAAGosa,EAAWxsf,EAAI+xgB,EAAevlB,EAAWzsf,EAAIysf,EAAWxjf,MAAQwjf,EAAW/8d,OAAOhwB,MAAQ2gF,EAAY,EAAGosa,EAAWxsf,EAAIwsf,EAAWzjf,OAASipgB,EAAkB5xb,IAG7Q,IAAIyyM,EAAU61N,EAAUxB,SAAS+H,WAG7BmjB,GAAgC,EACpC,IAAK3hhB,EAAkBoiS,GAAU,CAC7B,IAAIw/O,OAAgBlkhB,GAEpBkkhB,EAAgBx/O,aAEaoyN,IAErBuH,EAAWtW,2BAA2B+O,IAAkBuH,EAAWtW,gBAAgBA,2BAA2B6P,KAC9GqsB,GAAoH,IAApF5lB,EAAWtW,gBAAgBA,gBAAgBD,aAAa1kf,QAAQ8ghB,KAIxG3pB,EAAUzB,WAAWnE,YAAYl5N,YAAc,GAAK8+N,EAAUxB,SAASzzN,WAAai1N,EAAUzB,WAAWhR,aAAaxmf,OAAS,GAC3Hi5f,EAAUpB,WAAWr9N,QAAU,GAC5By+N,EAAUxB,SAASzzN,SAAWi1N,EAAUpB,WAAWr9N,UAAYy+N,EAAUzB,WAAWhR,aAAaxmf,SACvG2ihB,KAED96e,EAAUoxd,EAAUpB,WAAWr9N,QAAU,GAAKy+N,EAAUxB,SAASzzN,SAAWi1N,EAAUpB,WAAWr9N,UAAYy+N,EAAUzB,WAAWhR,aAAaxmf,OAE3Ii5f,EAAUmF,yBAAyBnF,EAAUpB,WAAWr/N,QAAQtoR,OAAQolf,GAAgB6K,oBAAoBlH,IAE1G3D,GAAgB6K,oBAAoBlH,GAG1Ctoa,EAAYu9Z,GAAcO,oBAAoB5md,EAAOi8M,gBAErDvgP,KAAK8+gB,mBAAmBx6e,EAAQk1d,EAAWzsf,EAAIysf,EAAW/8d,OAAOjwB,KAAMgtf,EAAWxsf,EAAIwsf,EAAWzjf,OAASipgB,EAAmB5xb,EAAY,EAAGosa,EAAWzsf,EAAIysf,EAAWxjf,MAAQwjf,EAAW/8d,OAAOhwB,MAAO+sf,EAAWxsf,EAAIwsf,EAAWzjf,OAASipgB,EAAmB5xb,EAAY,EAAGA,IAGhR9oD,EAASusB,EAAO0ld,wBAAwB7gB,IAGxCtoa,EAAYu9Z,GAAcO,oBAAoB5md,EAAOi8M,iBACrC,GAEZvgP,KAAK8+gB,mBAAmBx6e,EAAQk1d,EAAWzsf,EAAIkygB,EAAgBzlB,EAAWxsf,EAAIwsf,EAAWzjf,OAASipgB,EAAkBxlB,EAAWzsf,EAAIysf,EAAWxjf,MAAQkpgB,EAAiB1lB,EAAWxsf,EAAI+xgB,EAAe3xb,GAGzM9oD,EAASusB,EAAO2ld,0BAA0B9gB,IAG1Ctoa,EAAYu9Z,GAAcO,oBAAoB5md,EAAOi8M,iBACrC,GAEZvgP,KAAK8+gB,mBAAmBx6e,EAAQk1d,EAAWzsf,EAAIkygB,EAAgBzlB,EAAWxsf,EAAI+xgB,EAAevlB,EAAWzsf,EAAIysf,EAAWxjf,MAAQkpgB,EAAiB1lB,EAAWxsf,EAAIwsf,EAAWzjf,OAASipgB,EAAkB5xb,IAS7Moub,EAASnghB,UAAU8jhB,qBAAuB,SAAUppgB,EAAQyjf,GACxD,IAAIlF,EAAakF,EAAWlF,WACxBzlE,EAAiD,YAAvCylE,EAAWpF,QAAQv9b,gBAC7B6nc,EAAWvF,WAAWnE,YAAYZ,QAAQv9b,gBAAkB2ic,EAAWpF,QAAQv9b,gBAEnF,GADA3xD,KAAK67gB,YAAYnub,YACD,UAAZmhW,EAAqB,CACrB7ub,KAAK67gB,YAAY1tb,UAAYnuF,KAAK47gB,SAAS/sF,GAC3C,IAAIrib,EAAOgtf,EAAWzsf,EAAIysf,EAAW/8d,OAAOjwB,KAAOgtf,EAAWtE,gBAC1Dr0c,EAAQ24c,EAAWxsf,EAAI29e,GAAcO,oBAAoBsO,EAAWruQ,WAEpEn1O,EAAQwjf,EAAWxjf,MAAQwjf,EAAW/8d,OAAOjwB,KAAOgtf,EAAW/8d,OAAOhwB,MAAQ+sf,EAAWtE,gBAAkBsE,EAAWrE,iBAE1Hn1f,KAAK67gB,YAAYztb,SAASpuF,KAAKs8gB,eAAe9vgB,EAAM,GAAIxM,KAAKs8gB,eAAez7d,EAAO,GAAI7gD,KAAKs8gB,eAAetmgB,GAAQhW,KAAKs8gB,eAAevmgB,IACvI/V,KAAK67gB,YAAYvtb,cAazBktb,EAASnghB,UAAUyjhB,mBAAqB,SAAUx6e,EAAQzF,EAAQC,EAAQksS,EAAMF,EAAM19O,GAClFptF,KAAK67gB,YAAYnub,YACjB1tF,KAAK67gB,YAAYlub,OAAO3tF,KAAKs8gB,eAAez9e,EAAQ,GAAI7+B,KAAKs8gB,eAAex9e,EAAQ,IACpF9+B,KAAK67gB,YAAYjub,OAAO5tF,KAAKs8gB,eAAetxM,EAAM,GAAIhrU,KAAKs8gB,eAAexxM,EAAM,IAChF9qU,KAAK67gB,YAAYzub,UAAYptF,KAAKs8gB,eAAelvb,GAEjDptF,KAAK67gB,YAAYtub,YAAcjpD,EAAO9N,MAClC42D,EAAY,GACZptF,KAAK67gB,YAAY/9e,SAErB99B,KAAK67gB,YAAYvtb,aAQrBktb,EAASnghB,UAAUihhB,eAAiB,SAAUt/gB,EAAO0J,GACjD,GAAI1G,KAAK4kf,WACL,OAAO5nf,EAEPS,EAAkBiJ,KAClBA,EAAO,GAGX,OADQ1J,EAAQgD,KAAKo6e,OAAOhsa,YACP,IAAT1nE,EAAa1G,KAAKu6a,SAAqB,IAAT7za,EAAa1G,KAAKy6a,QAAU,IAK1E+gG,EAASnghB,UAAUiX,QAAU,WACzBtS,KAAKo6e,YAASj/e,EACTsC,EAAkBuC,KAAKy7gB,gBACxBz7gB,KAAKy7gB,aAAaz5gB,UAAY,IAElChC,KAAKy7gB,kBAAetghB,GAEjBqghB,KCj5BP8D,GAA4B,WAC5B,SAASA,EAAWllC,GAChBp6e,KAAKsvf,MAAQlV,EACR38e,EAAkB28e,KACnBp6e,KAAK2F,QAAUy0e,EAAOmlC,kBA0M9B,OAvMAjhhB,OAAOuJ,eAAey3gB,EAAWjkhB,UAAW,iBACxCqM,IAAK,WACD,MAAO,KAEXC,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAey3gB,EAAWjkhB,UAAW,iBACxCqM,IAAK,WACD,MAAO,KAEXC,YAAY,EACZC,cAAc,IAKlB03gB,EAAWjkhB,UAAUotgB,sBAAwB,SAAUzqB,GACnD,OAAOh+e,KAAKuiQ,SAASviQ,KAAKw/gB,cAAexhC,IAK7CshC,EAAWjkhB,UAAUsvgB,qBAAuB,SAAU3sB,GAElD,IAAIhoe,EAAQhW,KAAKuiQ,SAASviQ,KAAKw/gB,cAAexhC,GAI1CwqB,EAAaxogB,KAAKqiP,UAAU27P,GAChC,OACI3O,MAASr5d,EAAOs5d,OAAUk5B,EAAWl5B,OAAQw7B,eAAkBtC,EAAWsC,iBAMlFwU,EAAWjkhB,UAAUiugB,YAAc,SAAU5L,EAAY1f,GAErD,IAAIyhC,EAAmB,EACvBA,EAAmBz/gB,KAAKuiQ,SAASm7P,EAAWjxe,KAAMuxd,GAClD0f,EAAW1nf,MAAQypgB,EAEnB,IAAIjX,EAAaxogB,KAAKqiP,UAAU27P,GAMhC,OALA0f,EAAW3nf,OAASyyf,EAAWl5B,OAC/BouB,EAAWiB,eAAiB6J,EAAWsC,eACa,MAAhDpN,EAAWjxe,KAAKixe,EAAWjxe,KAAKhwB,OAAS,KACzCgjhB,EAAmBz/gB,KAAKuiQ,SAASooP,GAAciB,QAAQ8R,EAAWjxe,MAAOuxd,IAEtEyhC,GAKXH,EAAWjkhB,UAAUgnP,UAAY,SAAU27P,GAGvC,IAAI3gf,EAAM2C,KAAK0/gB,cAAc1hC,GAC7B,IAAKvgf,EAAkBuC,KAAKsvf,MAAMqwB,qBAAqBtihB,IACnD,OAAO2C,KAAKsvf,MAAMqwB,qBAAqBtihB,GAE3C,IAAIuihB,EAAW5/gB,KAAK6/gB,kBAAkB7hC,GAEtC,OADAh+e,KAAKsvf,MAAMqwB,qBAAqBtihB,GAAOuihB,EAChCA,GAKXN,EAAWjkhB,UAAUqkhB,cAAgB,SAAU1hC,GAC3C,IAAI8hC,EAAa9hC,EAAgB/wd,WAAWsuC,oBAQ5C,OAPAukd,GAAc,IAAM9hC,EAAgBnxd,SAChCmxd,EAAgBtvc,OAChBoxe,GAAc,SAEd9hC,EAAgBzsc,SAChBuue,GAAc,WAEXA,GAKXR,EAAWjkhB,UAAUwkhB,kBAAoB,SAAU7hC,GAC/C,IAAI/qO,EAAa,EACb0rP,EAAiB,EACjBohB,EAAcv/gB,SAASW,cAAc,QACzC4+gB,EAAYz8gB,GAAK,WACjBy8gB,EAAYr7gB,MAAMwoB,WAAa,SAC/B6yf,EAAY9kd,UAAY,IACxBj7D,KAAKgghB,WAAWD,EAAa/hC,GAClBx9e,SAASe,qBAAqB,QAAzC,IACIgod,EAAY/od,SAASW,cAAc,OACvCood,EAAU7kd,MAAM4xC,QAAU,eAC1B,IAAIgxB,EAAU9mE,SAASW,cAAc,OACrCmmE,EAAQ9jE,aAAa,QAAS,0EAC9B+ld,EAAU5nd,YAAYo+gB,GACtBx2D,EAAU5nd,YAAY2lE,GACtB9mE,SAASuL,KAAKpK,YAAY4nd,GAE1Bt2M,EAAa8sQ,EAAYrue,aAEzB,IAAIuue,EAAaF,EAAY3rgB,UAI7B,OAFAuqf,EADoBr3b,EAAQlzD,UACK6rgB,EACjCz/gB,SAASuL,KAAKzG,YAAYikd,IACjB+lB,OAAUr8N,EAAY63P,eAAkBnM,IAKrD2gB,EAAWjkhB,UAAU2wgB,+BAAiC,SAAUv/e,EAAMuxd,GAClE,OAAOh+e,KAAKuiQ,SAASooP,GAAciB,QAAQn/d,GAAOuxd,IAKtDshC,EAAWjkhB,UAAUknQ,SAAW,SAAU91O,EAAMuxd,GACxCvxd,EAAK9c,MAAM,OACX8c,EAAKld,QAAQ,KAAMvP,KAAKkghB,eAE5B,IAAIxxe,EAAO,GACP6C,EAAS,GACTtkB,EAAa,GACbJ,EAAWmxd,EAAgBnxd,SAM/B,OALA6hB,EAAOsvc,EAAgBtvc,KAAO,OAAS,GACvC6C,EAASysc,EAAgBzsc,OAAS,SAAW,GAC7CtkB,EAAa+wd,EAAgB/wd,WAC7BJ,EAAwB,IAAbA,EAAiB,GAAMA,GAAkD,WAAtCmxd,EAAgBqM,kBAAiC,EAAI,KACnGrqf,KAAK2F,QAAQ+mB,KAAOgiB,EAAO,IAAM6C,EAAS,IAAM1kB,EAAW,MAAaI,EACjEjtB,KAAK2F,QAAQ6mB,YAAYC,GAAMzW,OAK1CspgB,EAAWjkhB,UAAU2khB,WAAa,SAAUD,EAAa/hC,GACrD,IAAKvgf,EAAkBsihB,KAAiBtihB,EAAkBugf,GAAkB,CACrC,KAA/BA,EAAgB/wd,aAChB8yf,EAAYr7gB,MAAMuoB,WAAa+wd,EAAgB/wd,YAEnD,IAAIJ,EAAWmxd,EAAgBnxd,SAC3BA,GAAY,KACZA,EAAW,IAEfkzf,EAAYr7gB,MAAMmoB,SAAWA,EAAS3f,WAAa,KAC/C8we,EAAgBtvc,OAChBqxe,EAAYr7gB,MAAMqoB,WAAa,QAE/Bixd,EAAgBzsc,SAChBwue,EAAYr7gB,MAAMsoB,UAAY,YAO1Csyf,EAAWjkhB,UAAUmxB,YAAc,SAAUC,EAAMuxd,GAE/C,IAAIhoe,EAAQhW,KAAKuiQ,SAAS91O,EAAMuxd,GAI5BwqB,EAAaxogB,KAAKqiP,UAAU27P,GAChC,OACI3O,MAASr5d,EAAOs5d,OAAUk5B,EAAWl5B,OAAQw7B,eAAkBtC,EAAWsC,iBAMlFwU,EAAWjkhB,UAAUgwgB,eAAiB,SAAU3N,EAAY7a,GACxD,IAAI7md,EAAS,IAAIgnd,QAAiB7nf,GAC9BglhB,EAAsBziB,EAAWpV,UAAUtK,gBAC3CggC,EAAuBn7B,EAAU7E,gBACrChid,EAAOnP,SAA4C,KAAjCszf,EAAoBtzf,SAAkBmxf,EAAqBnxf,SAAWszf,EAAoBtzf,SAC5GmP,EAAO/O,WAAgD,YAAnCkzf,EAAoBlzf,WAA2B+wf,EAAqB/wf,WAClFkzf,EAAoBlzf,WAC1B,IAAIyhB,EAAO,GACP6C,EAAS,GACT84c,EAA8D,WAA1C81B,EAAoB91B,kBACxC2zB,EAAqB3zB,kBAAoB81B,EAAoB91B,kBACjE37c,EAAOyxe,EAAoBzxe,KAAO,OAASsve,EAAqBtve,KAAO,OAAS,GAChF6C,EAAS4ue,EAAoB5ue,OAAS,SAAWyse,EAAqBzse,OAAS,SAAW,GAC1FvV,EAAOqud,kBAAoBA,EACvB37c,IACA1S,EAAO0S,MAAO,GAEd6C,IACAvV,EAAOuV,QAAS,GAEpBmsd,EAAW1nf,MAAQhW,KAAKuiQ,SAASm7P,EAAWjxe,KAAMuP,GAElD,IAAIwse,EAAaxogB,KAAKqiP,UAAUrmN,GAChC0he,EAAW3nf,OAASyyf,EAAWl5B,OAC/BouB,EAAWiB,eAAiB6J,EAAWsC,gBAE3CwU,EAAWjkhB,UAAUiX,QAAU,WAC3BtS,KAAKsvf,WAAQn0f,EACb6E,KAAK2F,aAAUxK,GAEZmkhB,KChNPzkV,GAAsB,WACtB,SAASA,EAAKu/S,GACV,IAAIr6e,EAAQC,KACZA,KAAKoghB,qBAAuB,SAAU9jhB,GAClC,IAAsB,IAAlBA,EAAMurB,QAAkB,CACxBvrB,EAAMkpB,iBAEN,GADYlpB,EAAMwP,MAAQ/L,EAAMq6e,OAAOimC,gBAAgBlsgB,WAC3CpU,EAAMq6e,OAAOkmC,cAAc17gB,YAAa,CAChD,IAAI27gB,EAAQp3b,UAAUF,UAAUt5E,MAAM,WAAarT,EAAMohI,OAAS,EAAIphI,EAAMmhI,WAAa,EACrFrvD,EAAaruE,EAAMq6e,OAAOhsa,WAC1Bmyc,EACInyc,GAAc,IACdA,GAAc,GAGdA,EAAa,EAIbA,GAAc,GACdA,GAAc,GAGdA,EAAa,GAGrBruE,EAAMq6e,OAAOhsa,WAAaA,KAItCpuE,KAAKo6e,OAASA,EA6BlB,OA3BAv/S,EAAKx/L,UAAUmlhB,cAAgB,SAAUxjhB,GACrCgD,KAAKyghB,sBACAhjhB,EAAkBuC,KAAKo6e,OAAOxqa,YAC/B5vE,KAAKo6e,OAAOxqa,UAAU8wc,sBAE1B1ghB,KAAKo6e,OAAOumC,0BACPljhB,EAAkBuC,KAAKo6e,OAAOkV,MAAMnjB,qBACrCnse,KAAKo6e,OAAOkV,MAAMnjB,mBAAmBy0C,6BAEzC5ghB,KAAKo6e,OAAOkV,MAAM/R,wBAGtB1iT,EAAKx/L,UAAUolhB,oBAAsB,WAC7BzghB,KAAKo6e,OAAOhsa,WAAa,EACzBpuE,KAAKo6e,OAAOhsa,WAAa,EAEpBpuE,KAAKo6e,OAAOhsa,WAAa,KAC9BpuE,KAAKo6e,OAAOhsa,WAAa,IAE7BpuE,KAAK+lW,QAETlrK,EAAKx/L,UAAU0qW,KAAO,WAClB,IAAIq0I,EAASp6e,KAAKo6e,OAClBA,EAAOymC,eACPzmC,EAAO0mC,aACP1mC,EAAO8H,eAEJrnT,KC/DPvwG,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GA2BxCoyZ,GAA8B,WAE9B,SAASA,EAAauS,GAClB,IAAIvvf,EAAQC,KAIZA,KAAKqgC,UAAW,EAIhBrgC,KAAKszP,iBAAcn4P,EACnB6E,KAAK+ghB,0BAAuB5lhB,EAC5B6E,KAAKghhB,wBAAqB7lhB,EAI1B6E,KAAKuqgB,eAILvqgB,KAAK6xgB,uBAIL7xgB,KAAKihhB,cACLjhhB,KAAK+5G,SAAW,EAChB/5G,KAAK+qB,OAAS,EACd/qB,KAAKkhhB,gBAAiB,EAItBlhhB,KAAKu1gB,8BAA+B,EAIpCv1gB,KAAKmhhB,cAAgB,EAIrBnhhB,KAAKohhB,eAAiB,EAItBphhB,KAAKqhhB,uBAAoBlmhB,EAIzB6E,KAAKshhB,mBAAgBnmhB,EAIrB6E,KAAK2xD,gBAAkB,UAIvB3xD,KAAKoX,aAAe,EAIpBpX,KAAK2W,cAAgB,EAKrB3W,KAAK4ia,aAAc,EAInB5ia,KAAKuhhB,gCAAiC,EAItCvhhB,KAAKwhhB,kBAAmB,EAIxBxhhB,KAAKyhhB,cAAe,EAIpBzhhB,KAAK0hhB,uBAAwB,EAI7B1hhB,KAAK2hhB,yBAA2B,EAIhC3hhB,KAAKq9e,oBAAqB,EAI1Br9e,KAAK4hhB,sBAAuB,EAI5B5hhB,KAAK6hhB,uBAAwB,EAI7B7hhB,KAAK8hhB,kBAAmB,EAIxB9hhB,KAAKmJ,OAAS,GAIdnJ,KAAK6uO,OAAS,GAId7uO,KAAK4rB,UAIL5rB,KAAK2/gB,wBAIL3/gB,KAAKqvgB,gBAAkB,GAIvBrvgB,KAAKs8Q,SAILt8Q,KAAKmgf,iBAILngf,KAAKuD,OAAS,IAAI68e,GAIlBpgf,KAAK+hhB,sBAAmB5mhB,EAIxB6E,KAAKgihB,qBAAsB,EAC3BhihB,KAAKiihB,2BAA4B,EACjCjihB,KAAKkihB,cAAgB,OAIrBlihB,KAAKmihB,mBAILnihB,KAAKoihB,aAAc,EAInBpihB,KAAKqihB,gBAAkB,IAAInoe,GAAM,EAAG,GACpCl6C,KAAKsihB,mBAAqB,EAK1BtihB,KAAKuihB,iBAAmB,SAAUjmhB,GAC9BA,EAAMkpB,iBACNzlB,EAAMs9e,oBAAqB,GAM/Br9e,KAAKwihB,mBAAqB,SAAUlmhB,GAChCA,EAAMkpB,iBACNzlB,EAAM6hhB,sBAAuB,GAMjC5hhB,KAAKyihB,eAAiB,SAAUnmhB,GAC5BA,EAAMkpB,iBACNzlB,EAAM6hhB,sBAAuB,EAC7B7hhB,EAAM+hhB,kBAAmB,GAG7B9hhB,KAAK0ihB,eAAiB,SAAUzihB,IACvBxC,EAAkBsC,EAAMuvf,MAAMnjB,qBAAuBpse,EAAMuvf,MAAMnjB,mBAAmBw2C,uBAClF5ihB,EAAMuvf,MAAMnjB,mBAAmBy2C,kBAC9B3ihB,aAAgB8/M,WAChBhgN,EAAM8ihB,kBAAkB5ihB,GAEnBA,aAAgB+/M,YACrBjgN,EAAM+ihB,kBAAkB7ihB,KAKpCD,KAAK+ihB,oBAAsB,SAAUzmhB,GAC5ByD,EAAMuvf,MAAMzR,eAIb99e,EAAMijhB,YAAY/nd,UAAY,GAH9Bl7D,EAAMuvf,MAAM5U,aAAaqoC,oBAAoBzmhB,IAWrD0D,KAAKijhB,QAAU,SAAU3mhB,GAChByD,EAAMuvf,MAAMzR,gBACb99e,EAAMuvf,MAAM5U,aAAaooB,cAAcxmgB,GAE3CyD,EAAMijhB,YAAY/nd,UAAY,GAC9B3+D,EAAMkpB,kBAMVxlB,KAAKk2d,WAAa,WACd,IAAKz4d,EAAkBsC,EAAM6vE,WAAY,CACrC,GAAI7vE,EAAMuvf,MAAM1U,mBAAqB76e,EAAMuvf,MAAM1U,kBAAkBsnB,qBACa,UAA5EnigB,EAAMuvf,MAAM1U,kBAAkBsnB,oBAAoBlhgB,QAAQ0D,MAAM4xC,QAChE,OAEJv2C,EAAM6vE,UAAUszc,cAOxBljhB,KAAKkif,YAAc,WACXnif,EAAM6vE,YACN7vE,EAAMijhB,YAAY9ghB,QAClBnC,EAAM6vE,UAAUgzb,cAMxB5igB,KAAKuvH,cAAgB,WACjBxvH,EAAM8ghB,eACN9ghB,EAAMy6e,mBACN,IAAI2oC,EAAWpjhB,EAAMqX,aAAerX,EAAMo9gB,cAAcpngB,OACpDotgB,EAAWpjhB,EAAMughB,cAAc5ue,eAC/B3xC,EAAMsghB,gBAAgBl0gB,UAAYpM,EAAMqX,cAAgB+rgB,EAAWpjhB,EAAMughB,cAAc5ue,eAE9E3xC,aACSs6e,KAAqB58e,EAAkBsC,EAAMuvf,QAC/Dvvf,EAAMuvf,MAAM9R,kBAOpBx9e,KAAKojhB,eAAiB,WAClB,IACIC,EADAjpC,EAASr6e,EAGbsjhB,EAAcljhB,WAAW,WAChB1C,EAAkB28e,EAAOkV,QAAW7xf,EAAkBsC,EAAMuvf,MAAMtuf,WACnEo5e,EAAOkpC,yBAAyB9ihB,SAASosB,eAAewtd,EAAOkV,MAAMtuf,QAAQsC,KAC7E82e,EAAOI,mBACF/8e,EAAkBsC,EAAM6vE,YACzB7vE,EAAM6vE,UAAU8wc,sBAEpBtmC,EAAOumC,0BACHvmC,EAAOkV,MAAM1U,mBAAqBR,EAAOkV,MAAM1U,kBAAkBsnB,qBACjE9nB,EAAOkV,MAAM1U,kBAAkBsnB,oBAAoBjggB,QAEnDohhB,GACAnjhB,aAAamjhB,KAGtB,MAKPrjhB,KAAKujhB,cAAgB,SAAUjnhB,GACvByD,EAAMuvf,MAAM1U,mBACZ76e,EAAMuvf,MAAM1U,kBAAkBunB,sBAAsB7lgB,IAQ5D0D,KAAKwjhB,oBAAsB,SAAUlnhB,GACjC,KAAIyD,EAAM0hhB,cAAgBnlhB,EAAMuP,QAAW9L,EAAMo9gB,cAAcnngB,OAASjW,EAAMo9gB,cAAcnngB,MAAQjW,EAAMsghB,gBAAgBhzf,cACnH/wB,EAAM2P,QAAWlM,EAAMo9gB,cAAcpngB,QAAUhW,EAAMo9gB,cAAcpngB,OAAShW,EAAMsghB,gBAAgB/yf,eAGpG7vB,EAAkBsC,EAAM6vE,YAAY,CACrC7vE,EAAMyja,aAAalna,GAEfyD,EAAM0jhB,oBAAoBnnhB,KAAWyD,EAAMuvf,MAAMzR,gBAAkB99e,EAAMuvf,MAAMo0B,yBAA2BjmhB,EAAkBsC,EAAMuvf,MAAMnjB,mBAAmBw3C,yBAC3J5jhB,EAAMuvf,MAAMnjB,mBAAmBy2C,iBAAkB,GAErDtmhB,EAAMkpB,iBACDzlB,EAAM0hhB,cACP1hhB,EAAM6vE,UAAUszc,YAEpB,IAAIU,EAAc,IAAI1pe,GAAM59C,EAAMuP,QAASvP,EAAM2P,SAC7Cynf,EAAa3zf,EAAM8jhB,gBAAgBD,GAAa,GAMpD,GALA7jhB,EAAMsihB,gBAAgBt1gB,EAAI2mf,EAAW3mf,EACrChN,EAAMsihB,gBAAgBr1gB,EAAI0mf,EAAW1mf,EAErCjN,EAAMkihB,0BAA4BlihB,EAAM6vE,UAAUk0c,uBAAuBF,EAAa7jhB,EAAMuzP,cAAgBvzP,EAAM6vE,UAAUm0c,uBAAuBH,EAAa7jhB,EAAMuzP,aACtKvzP,EAAMwhhB,gCAAiC,GAClCxhhB,EAAMuvf,MAAMzR,iBAAmB99e,EAAMuvf,MAAM5U,aAAaspC,YAAYC,oBAAoBvwB,IACzF3zf,EAAMuvf,MAAM5U,aAAaspC,YAAYE,mBAAmBxwB,IASxD,OARA3zf,EAAM6vE,UAAUszc,YAChBnjhB,EAAM6ia,aAAc,EACpB7ia,EAAMwhhB,gCAAiC,OACnCxhhB,EAAM0jhB,oBAAoBnnhB,KAC1ByD,EAAMuvf,MAAM5U,aAAaspC,YAAYnyE,cAAc9kc,EAAI2mf,EAAW3mf,EAClEhN,EAAMuvf,MAAM5U,aAAaspC,YAAYnyE,cAAc7kc,EAAI0mf,EAAW1mf,EAClEjN,EAAMuvf,MAAM5U,aAAaspC,YAAYG,aAAazwB,KAU1D,GANIp3f,EAAMurB,UACN9nB,EAAMyhhB,kBAAmB,GAEzBzhhB,EAAMuvf,MAAM1/a,UAAU0qK,UACtBv6O,EAAM2hhB,uBAAwB,GAEd,IAAhBplhB,EAAMq6G,QAAgB52G,EAAMuvf,MAAM1/a,UAAU0qK,SACzCv6O,EAAM6vE,UAAUw0c,yBAAyBrkhB,EAAMskhB,cAAc3wB,GAAaA,GAE7E,YADAp3f,EAAMkpB,iBAGVzlB,EAAM0hhB,cAAe,EACrB1hhB,EAAM6ia,aAAc,EACpB7ia,EAAMmif,cAENnif,EAAMgrB,MAAQ5qB,WAAW,WACrBJ,EAAMg6G,WACiB,IAAnBh6G,EAAMg6G,WACNh6G,EAAMg6G,SAAW,IAEtB,OAQX/5G,KAAKskhB,oBAAsB,SAAUhohB,GAEjC,GADAA,EAAMkpB,kBACD/nB,EAAkBsC,EAAM6vE,WAAY,CAErC,IAAK7vE,EAAMuvf,MAAMzR,gBAAkB99e,EAAMuvf,MAAMo0B,wBACxC3jhB,EAAMuvf,MAAMnjB,mBAAmBy2C,gBAIlC,YAHK7ihB,EAAMuvf,MAAMnjB,mBAAmBo4C,uBAChCxkhB,EAAMuvf,MAAMnjB,mBAAmBq4C,2BAA2BlohB,IAIlE,IAAIsnhB,EAAc,IAAI1pe,GAAM59C,EAAMuP,QAASvP,EAAM2P,SAC7Cynf,EAAa3zf,EAAM8jhB,gBAAgBD,GAAc7jhB,EAAMuvf,MAAMye,uBACjE,GAAIhugB,EAAM6ia,YAAa,CACnB,IAAKnla,EAAkBsC,EAAMuzP,aAAc,CACvC,IAAI7sL,EAAYitb,EAAW3mf,EACvB25D,EAAYgtb,EAAW1mf,EAC3B,IAAKjN,EAAMuvf,MAAMzR,gBAAkB99e,EAAMiihB,oBACrCjihB,EAAMuvf,MAAM5U,aAAaspC,YAAYS,eAAe/wB,QAMpD,GAHM3zf,EAAM0hhB,cAAgB1hhB,EAAMwhhB,gCAAkCxhhB,EAAM4hhB,yBAA2B,GACjG5hhB,EAAM2khB,+BAA+BhxB,EAAY,GAEjD3zf,EAAM0jhB,oBAAoBnnhB,GAAQ,CAClCA,EAAMkpB,iBACN,IAAIm/f,EAASj+c,EACT43T,EAAev+X,EAAMuvf,MAAM1/a,UAAU/wD,IACrC+lgB,EAAe,IAAI1qe,GAAMusB,EAAWk+c,GACnC5khB,EAAMuvf,MAAMo0B,wBAA2B3jhB,EAAMuvf,MAAMnjB,mBAAmBw2C,uBACvE5ihB,EAAMuvf,MAAM1/a,UAAUi1c,iBAAiBD,EAActmJ,GAEzDv+X,EAAMwhhB,gCAAiC,GAInDxhhB,EAAM6vE,UAAUk1c,2BAEf/khB,EAAMiihB,qBAAwBjihB,EAAMwhhB,gCACrCxhhB,EAAMyja,aAAalna,GAEnByD,EAAMiihB,qBACNjihB,EAAM6vE,UAAUszc,cAS5BljhB,KAAK+khB,YAAc,SAAUzohB,GACzB,IAAKmB,EAAkBsC,EAAM6vE,WAAY,CACrC7vE,EAAM0hhB,cAAe,EACrB,IAAImC,EAAc,IAAI1pe,GAAM59C,EAAMuP,QAASvP,EAAM2P,SACjD,GAAIlM,EAAM6vE,UAAUo1c,2BAA2BpB,EAAa7jhB,EAAM8jhB,gBAAgBD,GAAa,IAC3F,QAGA7jhB,EAAM6vE,UAAU0qK,SAAY78O,EAAkBsC,EAAMuzP,cAAiB71P,EAAkBsC,EAAMuvf,MAAM1/a,UAAUryE,SAC7GwC,EAAMuvf,MAAM1/a,UAAUq1c,oBACtBllhB,EAAM6vE,UAAUk1c,2BAChB/khB,EAAMg6G,SAAW,KAS7B/5G,KAAK6ihB,kBAAoB,SAAUvmhB,GAC/BA,EAAMkpB,iBACNzlB,EAAMmlhB,oBAAqB,EAC3B,IAAItB,EAAc,IAAI1pe,GAAM59C,EAAMuP,QAASvP,EAAM2P,SAC7Cynf,EAAa3zf,EAAM8jhB,gBAAgBD,GAAa,GACpD,IAAKnmhB,EAAkBsC,EAAM6vE,WAAY,CACrC,IAAImqC,EAAW,EAoDf,GAnDKvuG,GAAQwiG,KAMT+L,EAAWh6G,EAAMg6G,SALbz9G,EAAMohI,OAAS,IACf3jB,EAAWz9G,EAAMohI,QAMrB39H,EAAMiihB,qBACNjihB,EAAMuvf,MAAM5U,aAAaspC,YAAYmB,sBAAsBzxB,IAE3D3zf,EAAM6ia,aAAgB7ia,EAAMwhhB,gCACxB9jhB,EAAkBsC,EAAMuzP,cAAiB71P,EAAkBsC,EAAMuvf,MAAM1/a,UAAUryE,QAChFwC,EAAMuvf,MAAMo0B,wBAA2B3jhB,EAAMuvf,MAAMnjB,mBAAmBy2C,kBACpC,IAAnC7ihB,EAAM4hhB,0BAAmC5hhB,EAAMiihB,sBAC/CjihB,EAAM2khB,+BAA+BhxB,EAAY35Y,GAC7CvuG,GAAQwiG,MAAqB,IAAb+L,GAChBh6G,EAAM6vE,UAAUo1c,2BAA2BpB,EAAalwB,IAGhE3zf,EAAM6vE,UAAUk1c,4BAEfrnhB,EAAkBsC,EAAMuzP,cAAiB71P,EAAkBsC,EAAMuvf,MAAM1/a,UAAUryE,SAC9EwC,EAAMuvf,MAAM1/a,UAAU0qK,UAAWv6O,EAAMuvf,MAAM1/a,UAAUw1c,mBACxD9ohB,EAAMurB,SAAW9nB,EAAMuvf,MAAMljB,gCAC3Brse,EAAMuvf,MAAMljB,iCAAuE,IAArCrse,EAAM0jhB,oBAAoBnnhB,IAC7EyD,EAAM6vE,UAAUy1c,yBAAyB3xB,GAAY,IAEpD3zf,EAAMuvf,MAAMzR,gBAAkB99e,EAAMulhB,sBAAsB5xB,IAC3D3zf,EAAM6vE,UAAU21c,kBAGfxlhB,EAAMuvf,MAAMzR,gBAAkB99e,EAAMuvf,MAAMo0B,wBAA0B3jhB,EAAMuvf,MAAMnjB,mBAAmBy2C,kBACpG7ihB,EAAMuvf,MAAMnjB,mBAAmBq5C,kBAC/BzlhB,EAAM0lhB,iBAAiB1lhB,EAAMuvf,MAAM1/a,UAAUryE,MAAOwC,EAAMuvf,MAAM1/a,UAAU/wD,KAC1E9e,EAAMuvf,MAAMnjB,mBAAmBy2C,iBAAkB,EACjD7ihB,EAAMuvf,MAAMnjB,mBAAmBu5C,gCAG/B3lhB,EAAMuvf,MAAMo0B,wBAA0B3jhB,EAAMuvf,MAAMnjB,mBAAmBw2C,wBAA0BllhB,EAAkBsC,EAAM6vE,UAAU+yb,SACjI5igB,EAAM6vE,UAAU+yb,MAAMj+f,MAAM4xC,QAAU,QAE1Cv2C,EAAM6ia,aAAc,EACpB7ia,EAAMwhhB,gCAAiC,EACvCxhhB,EAAM0hhB,cAAe,EACrB1hhB,EAAM2hhB,uBAAwB,EAC9B3hhB,EAAMyhhB,kBAAmB,EACzBzhhB,EAAMmif,cACFnif,EAAMmlhB,oBACNnlhB,EAAM6vE,UAAUszc,YAEhBnjhB,EAAMuvf,MAAMo0B,uBAAwB,CACpC,IAAIiC,EAAe5lhB,EAAMuvf,MAAMnjB,mBAC/Bw5C,EAAa/C,iBAAkB,EAC/B+C,EAAapB,uBAAwB,EACrCoB,EAAax5Z,eAAYhxH,EACzBwqhB,EAAav5Z,cAAWjxH,EAE5B4E,EAAMkihB,2BAA4B,IAQ1CjihB,KAAK4lhB,qBAAuB,SAAUtphB,GAClC,GAAIyD,EAAM6vE,UAAW,CAmBjB,GAlBA7vE,EAAMs9e,oBAAqB,EAC3Bt9e,EAAM+hhB,kBAAmB,EACzB/hhB,EAAM6hhB,sBAAuB,EAC7B7hhB,EAAM8hhB,uBAAwB,EAC9B9hhB,EAAM0hhB,cAAe,EACjB1hhB,EAAMmhhB,eACiB,IAAnBnhhB,EAAMg6G,SACNh6G,EAAMg6G,SAAW,GAGjBh6G,EAAMg6G,SAAW,EACjBh6G,EAAMmhhB,gBAAiB,IAI3BnhhB,EAAMmhhB,gBAAiB,EACvBnhhB,EAAMg6G,SAAW,GAEQ,IAAzBz9G,EAAM63C,QAAQ13C,OAAc,CAC5BsD,EAAM8lhB,MAAQvphB,EAAM63C,QAAQ,GAAGC,QAC/Br0C,EAAM+lhB,MAAQxphB,EAAM63C,QAAQ,GAAGE,QAC3Bt0C,EAAMuvf,MAAM1/a,UAAU0qK,UACtBv6O,EAAM2hhB,uBAAwB,GAElC3hhB,EAAM6ia,aAAc,EACpB7ia,EAAMwhhB,gCAAiC,EACvC,IAAIztf,OAAQ,EAKZ,GAJI/zB,EAAM6ia,cACN9uY,EAAQ/zB,EAAMgmhB,oBAAoBzphB,IAEtCw3B,EAAQ/zB,EAAM8jhB,gBAAgB/vf,GAAO,GACjC/zB,EAAMuvf,MAAMo0B,uBAAwB,CACpC,IAAIsC,EAAYjmhB,EAAMuvf,MAAMnjB,mBAAmB85C,qBAAqBnyf,GACpE/zB,EAAMuvf,MAAMnjB,mBAAmBw3C,sBAAwBqC,EAAU9qY,gBAGjEn7I,EAAMuvf,MAAMo0B,yBAA2BjmhB,EAAkBsC,EAAMuvf,MAAMnjB,mBAAmBw3C,yBACxF5jhB,EAAMuvf,MAAMnjB,mBAAmBy2C,iBAAkB,GAErD,IAAI71gB,EAAIhN,EAAMuvf,MAAM1/a,UAAU/wD,IAAI6O,SAAS3gB,EACvCC,EAAIjN,EAAM6vE,UAAUs2c,eAAenmhB,EAAMuvf,MAAM1/a,UAAU/wD,IAAK9e,EAAMuvf,MAAM1/a,UAAU0qK,SAAW,EAEnGv6O,EAAM4hhB,0BAA6B7tf,EAAM9mB,GAAKA,GAAK8mB,EAAM9mB,GAAKA,EAAI,IAAM8mB,EAAM9mB,GAAKA,GAAK8mB,EAAM9mB,GAAKA,EAAI,MAC/F8mB,EAAM/mB,GAAKA,GAAK+mB,EAAM/mB,GAAKA,EAAI,IAAM+mB,EAAM/mB,GAAKA,GAAK+mB,EAAM/mB,GAAKA,EAAI,IAAO,EAAI,EAClFhN,EAAMuvf,MAAM1/a,UAAU0qK,SAA8C,IAAnCv6O,EAAM4hhB,2BACxC50gB,EAAIhN,EAAMuvf,MAAM1/a,UAAUryE,MAAMmwB,SAAS3gB,EACzCC,EAAIjN,EAAM6vE,UAAUs2c,eAAenmhB,EAAMuvf,MAAM1/a,UAAUryE,OAAO,GAAS,EAEzEwC,EAAM4hhB,0BAA6B7tf,EAAM9mB,GAAKA,GAAK8mB,EAAM9mB,GAAKA,EAAI,IAAM8mB,EAAM9mB,GAAKA,GAAK8mB,EAAM9mB,GAAKA,EAAI,MAC/F8mB,EAAM/mB,GAAKA,GAAK+mB,EAAM/mB,GAAKA,EAAI,IAAM+mB,EAAM/mB,GAAKA,GAAK+mB,EAAM/mB,GAAKA,EAAI,IAAO,EAAI,IAG1FtP,EAAkBsC,EAAMuvf,MAAM1U,oBAAsB76e,EAAMuvf,MAAM1U,kBAAkBsnB,qBACnFnigB,EAAMuvf,MAAM1U,kBAAkBsnB,oBAAoBjggB,SAElDlC,EAAM4hhB,0BAA4BrlhB,EAAM63C,QAAQ13C,OAAS,IACzDH,EAAMkpB,iBAEVzlB,EAAMgrB,MAAQ5qB,WAAW,WACrBJ,EAAMmhhB,gBAAiB,GACxB,OAQXlhhB,KAAKmmhB,oBAAsB,SAAU7phB,GACjC,IACIsnhB,EADAhyc,EAAQt1E,EAAM63C,QAElB,IAAK12C,EAAkBsC,EAAM6vE,WAAY,CAErC,GAAI7vE,EAAMuvf,MAAM5U,cAAgB36e,EAAMuvf,MAAMo0B,wBAA0B3jhB,EAAMuvf,MAAMnjB,mBAAmBy2C,gBAMjG,OALAtmhB,EAAMkpB,sBACDzlB,EAAMuvf,MAAMnjB,mBAAmBo4C,wBAChCxkhB,EAAMuvf,MAAMnjB,mBAAmBi6C,2BAA2B9phB,GAC1DyD,EAAM6vE,UAAU+yb,MAAMj+f,MAAM4xC,QAAU,SAI9C,GAAIv2C,EAAM6ia,YAAa,CACnBghH,EAAc7jhB,EAAMgmhB,oBAAoBzphB,GACxC,IAAIo3f,EAAa3zf,EAAM8jhB,gBAAgBD,GAAa,GACpD,GAAI7jhB,EAAM4hhB,yBAA2B,EAAsC,CACvErlhB,EAAMkpB,iBACN,IAAIm/f,EAASjxB,EAAW1mf,EACpBsxX,EAAev+X,EAAMuvf,MAAM1/a,UAAU/wD,IAErC60e,EAAW1mf,GAAK,GAChB23gB,GAAUjxB,EAAW1mf,EAAI,EAAI,EAAI0mf,EAAW1mf,EAAI,GAGhD23gB,GAAU,KAEdrmJ,EAAkD,IAAnCv+X,EAAM4hhB,yBAAiC5hhB,EAAM6vE,UAAUryE,MAAQwC,EAAM6vE,UAAU/wD,IAC9F60e,EAAa,IAAIx5c,GAAMw5c,EAAW3mf,EAAG43gB,GACrC5khB,EAAMuvf,MAAM1/a,UAAUi1c,iBAAiBnxB,EAAYp1H,GACnDv+X,EAAMwhhB,gCAAiC,EAE3CxhhB,EAAM6vE,UAAUk1c,4BAGxB,GAAIlzc,EAAMn1E,OAAS,EAAG,CAClBH,EAAMkpB,iBACNzlB,EAAM6ia,aAAc,EACpB7ia,EAAM8lhB,OAASj0c,EAAM,GAAGx9B,QAAUw9B,EAAM,GAAGx9B,SAAW,EACtDr0C,EAAM+lhB,OAASl0c,EAAM,GAAGv9B,QAAUu9B,EAAM,GAAGv9B,SAAW,EAEtD,IAAIgye,EAAch6gB,KAAKQ,KAAKR,KAAK87D,IAAKyJ,EAAM,GAAGx9B,QAAUw9B,EAAM,GAAGx9B,QAAU,GAAK/nC,KAAK87D,IAAKyJ,EAAM,GAAGv9B,QAAUu9B,EAAM,GAAGv9B,QAAU,IAC7Ht0C,EAAMqhhB,eAAiB,EACnBiF,EAActmhB,EAAMqhhB,cACpBrhhB,EAAMumhB,mBAAmBhqhB,GAEpB+phB,EAActmhB,EAAMqhhB,eACzBrhhB,EAAMwmhB,kBAAkBjqhB,GAGvByD,EAAMquE,WAAa,GACK,IAAzBruE,EAAMqhhB,eACFiF,EAActmhB,EAAMqhhB,eACpBrhhB,EAAMwmhB,kBAAkBjqhB,IAIF,IAAzByD,EAAMqhhB,eACPrhhB,EAAMquE,WAAa,GACfi4c,EAActmhB,EAAMqhhB,eACpBrhhB,EAAMwmhB,kBAAkBjqhB,GAIpCyD,EAAMqhhB,cAAgBiF,IAQ9BrmhB,KAAK8ihB,kBAAoB,SAAUxmhB,GAC/B,IAAKmB,EAAkBsC,EAAM6vE,WAAY,CACrC,IAAI97C,EAAQ/zB,EAAMgmhB,oBAAoBzphB,GAClCo3f,EAAa3zf,EAAM8jhB,gBAAgB/vf,GAAO,GACV,IAAhCx3B,EAAMqiE,eAAeliE,SACrBsD,EAAM8lhB,WAAQ1qhB,EACd4E,EAAM+lhB,WAAQ3qhB,GAEV4E,EAAM6ia,aAAgB7ia,EAAMwhhB,gCAAmC9jhB,EAAkBsC,EAAMuzP,cAAiB71P,EAAkBsC,EAAMuvf,MAAM1/a,UAAUryE,SACzG,IAAnCwC,EAAM4hhB,2BACN5hhB,EAAM2khB,+BAA+B,IAAIxqe,GAAMw5c,EAAW3mf,EAAG2mf,EAAW1mf,GAAIjN,EAAMg6G,UAC3D,IAAnBh6G,EAAMg6G,UACNh6G,EAAM6vE,UAAUo1c,2BAA2Blxf,EAAO4/d,IAGtD3zf,EAAMuvf,MAAM1/a,UAAU0qK,SACtBv6O,EAAM6vE,UAAU8wc,sBAEpB3ghB,EAAM6vE,UAAUk1c,4BAEfrnhB,EAAkBsC,EAAMuzP,cAAiB71P,EAAkBsC,EAAM6vE,UAAUryE,QACxEwC,EAAMwhhB,kCAAmCxhhB,EAAM6vE,UAAU0qK,SAC7Dv6O,EAAM6vE,UAAU60b,kBAAoB1kgB,EAAMuvf,MAAMo0B,wBAC5C3jhB,EAAMuvf,MAAMo0B,yBAA2B3jhB,EAAMuvf,MAAMnjB,mBAAmBy2C,mBAC1E7ihB,EAAM6vE,UAAUy1c,yBAAyB3xB,GAAY,GAEzD3zf,EAAM6ia,aAAc,EACpB7ia,EAAM4hhB,yBAA2B,EACjC5hhB,EAAM2hhB,uBAAwB,EAC9B3hhB,EAAMwhhB,gCAAiC,GAEvCxhhB,EAAMuvf,MAAMo0B,wBAA0B3jhB,EAAMuvf,MAAMnjB,mBAAmBy2C,kBACrE7ihB,EAAMuvf,MAAMnjB,mBAAmBq5C,kBAC/BzlhB,EAAMuvf,MAAMnjB,mBAAmBy2C,iBAAkB,EACjD7ihB,EAAMuvf,MAAMnjB,mBAAmBo4C,uBAAwB,EACvDxkhB,EAAM0lhB,iBAAiB1lhB,EAAMuvf,MAAM1/a,UAAUryE,MAAOwC,EAAMuvf,MAAM1/a,UAAU/wD,KAC1E9e,EAAMuvf,MAAMnjB,mBAAmBu5C,gCAG/B3lhB,EAAMuvf,MAAMo0B,wBAA0B3jhB,EAAMuvf,MAAMnjB,mBAAmBw2C,uBAAyB5ihB,EAAM0hhB,eACpG1hhB,EAAM03D,WAAW/yD,MAAM4xC,QAAU,OACjCv2C,EAAMuvH,SAAS5qH,MAAM4xC,QAAU,QAKnCh6C,EAAMkpB,iBAEVzlB,EAAMqhhB,eAAiB,EACvBrhhB,EAAM0hhB,cAAe,EAChB1hhB,EAAMmhhB,iBACPnhhB,EAAMg6G,SAAW,GAEjBh6G,EAAMmlhB,oBACNnlhB,EAAM6vE,UAAUszc,aAOxBljhB,KAAKwmhB,gBAAkB,SAAUlqhB,GACzBkP,GAAQkb,UACJ7qB,OAAO4qhB,eAAeC,eAAiB3mhB,EAAMoJ,OAAO1M,QACpDsD,EAAM6vE,UAAU+2c,4BAA4B5mhB,EAAMijhB,YAAY/nd,UAAUx+D,SAG5EH,EAAMurB,SAA8B,KAAlBvrB,EAAMwrB,SAAkC,KAAhBxrB,EAAMq6G,SAChD52G,EAAMyhhB,kBAAmB,IAOjCxhhB,KAAK4mhB,kBAAoB,SAAUtqhB,GAC/B,IAAIuqhB,GAAY,EACZxphB,EAAMf,EAAMq6G,OAASr6G,EAAMwrB,QAC3B+C,KAAQvuB,EAAMurB,UAAWvrB,EAAM4gI,UAA4B,KAAR7/H,EACnDsgF,EAAQrhF,EAAMm6G,SAAWn6G,EAAMm6G,SAAqB,KAARp5G,EAC5C22G,EAAM13G,EAAMi6G,OAASj6G,EAAMi6G,OAAmB,KAARl5G,EAC1C,GAAIwtB,IAAS8yD,IAAUq2B,EACnB,OAAQ32G,GACJ,KAAK,GACDf,EAAMkpB,iBACNzlB,EAAMuvf,MAAMvuf,QACZ8lhB,GAAY,EACZ,MACJ,KAAK,GACDvqhB,EAAMkpB,iBACNzlB,EAAMuvf,MAAM7ha,KAAkC,KAA7B1tF,EAAMuvf,MAAMzjB,aAAsB,SAAW9re,EAAMuvf,MAAMzjB,aAAc,QACxFg7C,GAAY,EAInBA,GAAcpphB,EAAkBsC,EAAM6vE,YACvC7vE,EAAM6vE,UAAUg3c,kBAAkBtqhB,EAAOuuB,EAAM8yD,EAAOq2B,GAEtD6ya,GACAvqhB,EAAMkpB,kBAGdxlB,KAAKsvf,MAAQA,EACbtvf,KAAKkrO,SACLlrO,KAAK+rG,OAAS,IAAIyva,GAASx7gB,MAC3BA,KAAKs8Q,SACLt8Q,KAAKmgf,iBACLngf,KAAKg+e,gBAAkB,IAAIgF,GAAiBhjf,MAC5CA,KAAK49e,gBAAkB,IAAImF,GAAiB/if,MAC5CA,KAAKsugB,cAAgB,IAAI3oS,GACzB3lO,KAAKyjf,kBACLzjf,KAAKuD,OAAS,IAAI68e,GAClBpgf,KAAK+hhB,iBAAmB,IAAIp8S,GAC5B3lO,KAAK8mhB,kBACL9mhB,KAAK+mhB,UAAY,IAAIphT,GA0vCzB,OAxvCArnO,OAAOuJ,eAAek1e,EAAa1hf,UAAW,mBAM1CqM,IAAK,WASD,OARIjK,EAAkBuC,KAAKgnhB,qBACvBhnhB,KAAKgnhB,kBAAoBxmhB,SAASW,cAAc,UAChDnB,KAAKgnhB,kBAAkB95b,WAAW,MAAMO,QAEvChwF,EAAkBuC,KAAKsghB,gBACrBtghB,KAAKgnhB,kBAAkB3ygB,gBAAkBrU,KAAKsghB,eACjDtghB,KAAKsghB,cAAc3+gB,YAAY3B,KAAKgnhB,mBAEjChnhB,KAAKgnhB,mBAEhBr/gB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAek1e,EAAa1hf,UAAW,mBAK1CqM,IAAK,WASD,OARIjK,EAAkBuC,KAAKinhB,qBACvBjnhB,KAAKinhB,kBAAoBzmhB,SAASW,cAAc,UAChDnB,KAAK27gB,gBAAgBzub,WAAW,MAAMO,QAErChwF,EAAkBuC,KAAKsghB,gBACrBtghB,KAAKinhB,kBAAkB5ygB,gBAAkBrU,KAAKsghB,eACjDtghB,KAAKsghB,cAAc3+gB,YAAY3B,KAAKinhB,mBAEjCjnhB,KAAKinhB,mBAEhBt/gB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAek1e,EAAa1hf,UAAW,oBAK1CqM,IAAK,WACD,OAAO1H,KAAK07gB,gBAAgBxub,WAAW,OAE3CvlF,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAek1e,EAAa1hf,UAAW,oBAK1CqM,IAAK,WACD,OAAO1H,KAAK27gB,gBAAgBzub,WAAW,OAE3CvlF,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAek1e,EAAa1hf,UAAW,wBAI1CqM,IAAK,WACD,GAA0B,IAAtB1H,KAAKkrO,MAAMzuO,OAGf,OAAOuD,KAAKkrO,MAAMlrO,KAAKkrO,MAAMzuO,OAAS,IAE1CkL,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAek1e,EAAa1hf,UAAW,iBAK1CqM,IAAK,WACD,OAAO1H,KAAKknhB,iBAEhBv/gB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAek1e,EAAa1hf,UAAW,cAK1CqM,IAAK,WACD,OAAO1H,KAAKsihB,oBAEhBj7gB,IAAK,SAAUrK,GACPgD,KAAKsihB,qBAAuBtlhB,IAC5BgD,KAAKmhhB,cAAgBnhhB,KAAKouE,WAC1BpuE,KAAKsihB,mBAAqBtlhB,EAC1BgD,KAAK8yE,WAAW0tc,cAAcxjhB,GAC9BgD,KAAKsvf,MAAMlhb,WAAapxE,IAGhC2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAek1e,EAAa1hf,UAAW,aAK1CqM,IAAK,WACD,OAAO1H,KAAKsvf,MAAM1/a,WAEtBjoE,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAek1e,EAAa1hf,UAAW,sBAK1CqM,IAAK,WACD,OAAO1H,KAAK+ghB,sBAEhB15gB,IAAK,SAAUrK,GACXgD,KAAK+ghB,qBAAuB/jhB,GAEhC2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAek1e,EAAa1hf,UAAW,oBAK1CqM,IAAK,WACD,OAAO1H,KAAKghhB,oBAEhB35gB,IAAK,SAAUrK,GACXgD,KAAKghhB,mBAAqBhkhB,GAE9B2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAek1e,EAAa1hf,UAAW,UAK1CqM,IAAK,WAID,OAHK1H,KAAKmnhB,gBACNnnhB,KAAKonhB,aAEFpnhB,KAAKmnhB,gBAEhBx/gB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAek1e,EAAa1hf,UAAW,WAK1CqM,IAAK,WAID,OAHK1H,KAAKqnhB,iBACNrnhB,KAAKsnhB,cAEFtnhB,KAAKqnhB,iBAEhB1/gB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAek1e,EAAa1hf,UAAW,eAK1CqM,IAAK,WACD,OAAO1H,KAAKkihB,eAEhB76gB,IAAK,SAAUrK,GACXgD,KAAKkihB,cAAgBllhB,EACrBgD,KAAKunhB,qBAAqBvnhB,KAAKkihB,gBAEnCv6gB,YAAY,EACZC,cAAc,IAElBm1e,EAAa1hf,UAAUyrhB,gBAAkB,WAErC9mhB,KAAK+hhB,iBAAiB39gB,IAAI,SAAU,wDAEpCpE,KAAK+hhB,iBAAiB39gB,IAAI,YAAa,+ZAEvCpE,KAAK+hhB,iBAAiB39gB,IAAI,YAAa,8ZAEvCpE,KAAK+hhB,iBAAiB39gB,IAAI,YAAa,8ZAEvCpE,KAAK+hhB,iBAAiB39gB,IAAI,YAAa,4ZAEvCpE,KAAK+hhB,iBAAiB39gB,IAAI,YAAa,8YAEvCpE,KAAK+hhB,iBAAiB39gB,IAAI,YAAa,8YAEvCpE,KAAK+hhB,iBAAiB39gB,IAAI,yBAA0B,wDAEpDpE,KAAK+hhB,iBAAiB39gB,IAAI,iBAAkB,0KAE5CpE,KAAK+hhB,iBAAiB39gB,IAAI,iBAAkB,0KAE5CpE,KAAK+hhB,iBAAiB39gB,IAAI,iBAAkB,2KAE5CpE,KAAK+hhB,iBAAiB39gB,IAAI,iBAAkB,wKAE5CpE,KAAK+hhB,iBAAiB39gB,IAAI,iBAAkB,0JAE5CpE,KAAK+hhB,iBAAiB39gB,IAAI,iBAAkB,0JAE5CpE,KAAK+hhB,iBAAiB39gB,IAAI,YAAa,8JAEvCpE,KAAK+hhB,iBAAiB39gB,IAAI,OAAQ,gHAElCpE,KAAK+hhB,iBAAiB39gB,IAAI,OAAQ,mIAElCpE,KAAK+hhB,iBAAiB39gB,IAAI,OAAQ,mIAElCpE,KAAK+hhB,iBAAiB39gB,IAAI,OAAQ,mIAElCpE,KAAK+hhB,iBAAiB39gB,IAAI,OAAQ,mIAElCpE,KAAK+hhB,iBAAiB39gB,IAAI,OAAQ,mIAElCpE,KAAK+hhB,iBAAiB39gB,IAAI,OAAQ,mIAElCpE,KAAK+hhB,iBAAiB39gB,IAAI,OAAQ,mIAElCpE,KAAK+hhB,iBAAiB39gB,IAAI,OAAQ,oIAKtC24e,EAAa1hf,UAAU2hf,mBAAqB,WACxCh9e,KAAKyjf,kBACLzjf,KAAK4rB,UACL5rB,KAAK+mhB,UAAU/2d,QACfhwD,KAAKuD,OAAOysD,QACZhwD,KAAKg+e,gBAAgBqJ,cACrBrnf,KAAK49e,gBAAgByJ,eAKzBtK,EAAa1hf,UAAUkzgB,oBAAsB,SAAUjrgB,GACnD,IAAI7F,EAAkBuC,KAAKmgf,eAG3B,IAAK,IAAIhkf,EAAI,EAAGA,EAAI6D,KAAKmgf,cAAc1jf,OAAQN,IAAK,CAChD,IAAIkqf,EAAermf,KAAKmgf,cAAchkf,GACtC,GAAIkqf,aAAwBse,IAAiBte,EAAaD,iBAAmB9if,EACzE,OAAO+if,IAQnBtJ,EAAa1hf,UAAU2vgB,YAAc,SAAU1ngB,GAC3C,IAAI7F,EAAkBuC,KAAKs8Q,OAG3B,IAAK,IAAIngR,EAAI,EAAGA,EAAI6D,KAAKs8Q,MAAM7/Q,OAAQN,IACnC,IAAKsB,EAAkBuC,KAAKs8Q,MAAMngR,KAAO6D,KAAKs8Q,MAAMngR,GAAG+pf,SAAW5if,EAC9D,OAAOtD,KAAKs8Q,MAAMngR,IAQ9B4gf,EAAayqC,mBAAqB,SAAUl/B,GACxC,OAAIA,EAAUrD,qBAAqBY,GACxByC,EAAUrD,UAAUc,YAEtBuC,EAAUrD,qBAAqB0f,KAAkBlngB,EAAkB6qf,EAAUrD,UAAU7la,QACrFkpa,EAAUrD,UAAU7la,OAAO7gF,QAAQ+pf,IAGlC,GAOhBvL,EAAa1hf,UAAUoshB,aAAe,SAAUC,GAE5C,IAAK,IADDX,KACK5qhB,EAAI,EAAGA,EAAI6D,KAAK+mhB,UAAUzphB,KAAKb,OAAQN,IAAK,CACjD,IAAIwrhB,EAAW3nhB,KAAK+mhB,UAAUzphB,KAAKnB,IAC/BurhB,GAA2C,IAA1BC,EAASpphB,QAAQ,OAClCwohB,EAAUvihB,KAAKmjhB,GAGvB,OAAOZ,GAMXhqC,EAAa1hf,UAAU8/e,qBAAuB,WAC1C,IAAI19e,EAAkBuC,KAAKsvf,MAAMtuf,SAAjC,CAGA,IACIA,EAAUR,SAASosB,eAAe5sB,KAAKsvf,MAAMtuf,QAAQsC,IACzDtD,KAAKqghB,gBAAkBl/gB,EAAc,OAASmC,GAAItD,KAAKsvf,MAAMh9W,YAAc,qBAC3EtyI,KAAKqghB,gBAAgB37gB,MAAMo7D,QAAU,0DACrC9+D,EAAQW,YAAY3B,KAAKqghB,iBACzBrghB,KAAKqghB,gBAAgBp3Z,SAAW,EAChCjpH,KAAKqghB,gBAAgB37gB,MAAMkjhB,QAAU,OACrC5nhB,KAAKsghB,cAAgBn/gB,EAAc,OAASmC,GAAItD,KAAKsvf,MAAMh9W,YAAc,iBAAkBjvI,UAAW,oBACtGrD,KAAKqghB,gBAAgB1+gB,YAAY3B,KAAKsghB,eACtCtghB,KAAKsghB,cAAc57gB,MAAMgI,IAAM,MAC/B1M,KAAKsghB,cAAc57gB,MAAM8H,KAAO,MAChCxM,KAAKsghB,cAAc57gB,MAAMwP,SAAW,WACpClU,KAAKsghB,cAAc57gB,MAAM2ka,cAAgB,OACzCrpa,KAAKgjhB,YAAcxihB,SAASW,cAAc,OAC1CnB,KAAKgjhB,YAAY6E,gBAAkB,OACnC7nhB,KAAKgjhB,YAAYt+gB,MAAMwP,SAAW,QAClClU,KAAKgjhB,YAAYt+gB,MAAM8H,KAAO,SAC9BxM,KAAKgjhB,YAAYt+gB,MAAMsR,MAAQ,OAC/BhW,KAAKgjhB,YAAYt+gB,MAAMqR,OAAS,OAChC/V,KAAKgjhB,YAAY1/gB,GAAKtD,KAAKsvf,MAAMh9W,YAAc,eAC/C9xI,SAASuL,KAAKpK,YAAY3B,KAAKgjhB,aAC/BhjhB,KAAKgjhB,YAAY1/gB,GAAKtC,EAAQsC,GAAK,eACnC9C,SAASuL,KAAKpK,YAAY3B,KAAKgjhB,aAC3BhjhB,KAAKsvf,MAAMo0B,wBACX1jhB,KAAKsvf,MAAMnjB,mBAAmB27C,yBAElC9nhB,KAAKsjhB,yBAAyBtihB,GAC9BhB,KAAK6wD,OAAS,IAAIymW,GAAOt3Z,MACzBA,KAAKwogB,WAAa,IAAI8W,GAAWt/gB,MACjCA,KAAK8yE,WAAa,IAAI+nH,GAAK76L,MAI3BA,KAAK+nhB,mBACL/nhB,KAAKq2d,cAKT0mB,EAAa1hf,UAAUg7d,UAAY,WAC1B54d,EAAkBuC,KAAK4vE,YACxB5vE,KAAK4vE,UAAUo4c,YAEnBhohB,KAAKgjhB,YAAYtmhB,iBAAiB,QAASsD,KAAKijhB,SAChDjjhB,KAAKgjhB,YAAYtmhB,iBAAiB,QAASsD,KAAK+ihB,qBAChD/ihB,KAAKgjhB,YAAYtmhB,iBAAiB,OAAQsD,KAAKk2d,YAC/Cl2d,KAAKgjhB,YAAYtmhB,iBAAiB,UAAWsD,KAAK4mhB,mBAClD5mhB,KAAKgjhB,YAAYtmhB,iBAAiB,mBAAoBsD,KAAKuihB,kBAC3DvihB,KAAKgjhB,YAAYtmhB,iBAAiB,oBAAqBsD,KAAKwihB,oBAC5DxihB,KAAKgjhB,YAAYtmhB,iBAAiB,iBAAkBsD,KAAKyihB,gBACzDzihB,KAAKqghB,gBAAgB3jhB,iBAAiB,SAAUsD,KAAKuvH,eACrDvvH,KAAKqghB,gBAAgB3jhB,iBAAiB,YAAasD,KAAKwjhB,qBACxDxjhB,KAAKqghB,gBAAgB3jhB,iBAAiB,YAAasD,KAAKskhB,qBACxDtkhB,KAAKqghB,gBAAgB3jhB,iBAAiB,cAAesD,KAAKujhB,eAC1DvjhB,KAAKqghB,gBAAgB3jhB,iBAAiB,WAAYsD,KAAK+khB,aACvD/khB,KAAKqghB,gBAAgB3jhB,iBAAiB,UAAWsD,KAAK6ihB,mBACtDhnhB,OAAOa,iBAAiB,SAAUsD,KAAKojhB,gBACvCvnhB,OAAOa,iBAAiB,QAASsD,KAAKwmhB,iBACtC3qhB,OAAOa,iBAAiB,UAAWsD,KAAK0ihB,gBACxC7mhB,OAAOa,iBAAiB,WAAYsD,KAAK0ihB,gBACzC1ihB,KAAKqghB,gBAAgB3jhB,iBAAiB,aAAcsD,KAAK4lhB,sBACzD5lhB,KAAKqghB,gBAAgB3jhB,iBAAiB,YAAasD,KAAKmmhB,qBACxDnmhB,KAAKqghB,gBAAgB3jhB,iBAAiB,WAAYsD,KAAK8ihB,mBACnD35b,UAAUF,UAAUt5E,MAAM,YAC1B3P,KAAKqghB,gBAAgB3jhB,iBAAiB,iBAAkBsD,KAAK8yE,WAAWstc,sBAE5EpghB,KAAKqghB,gBAAgB3jhB,iBAAiB,aAAcsD,KAAK8yE,WAAWstc,uBAKxErjC,EAAa1hf,UAAU+rhB,WAAa,WAC3BpnhB,KAAKmnhB,iBACNnnhB,KAAKiohB,aAAe9mhB,EAAc,OAASkC,UAAW,oBACtD7C,SAASuL,KAAKpK,YAAY3B,KAAKiohB,cAC/BjohB,KAAKmnhB,eAAiB,IAAIria,IACtB39G,OAAQ3G,SAASuL,KAAM46G,eAAe,EACtCK,eAAe,EAAMxvF,SAAS,EAAOxhB,MAAO,MAAOwvG,SAAS,EAAMtxG,UAAYkC,EAAG,SAAUC,EAAG,UAAYosD,OAAQ,KAEtHziE,KAAKmnhB,eAAezlhB,KAAO1B,KAAK4vE,UAAUszc,UAC1CljhB,KAAKmnhB,eAAe5zZ,YAAcvzH,KAAKkif,YACvClif,KAAKmnhB,eAAe9we,SAASr2C,KAAKiohB,gBAM1ClrC,EAAa1hf,UAAUishB,YAAc,WACjC,IAAKtnhB,KAAKqnhB,gBAAiB,CACvB,IAAIlghB,EAAShG,EAAc,OAASkC,UAAW,oBAC/C7C,SAASuL,KAAKpK,YAAYwF,GAC1BnH,KAAKqnhB,gBAAkB,IAAIvia,IACvB39G,OAAQ3G,SAASuL,KAAM46G,eAAe,EACtCK,eAAe,EAAMxvF,SAAS,EAAOxhB,MAAO,MAAOwvG,SAAS,EAAMtxG,UAAYkC,EAAG,SAAUC,EAAG,OAASosD,OAAQ,KAEnHziE,KAAKqnhB,gBAAgBhxe,SAASlvC,KAOtC41e,EAAa1hf,UAAUwlhB,aAAe,WAClC7ghB,KAAKu/gB,iBAAiB/1F,UAAU,EAAG,EAAGxpb,KAAK07gB,gBAAgB1lgB,MAAOhW,KAAK07gB,gBAAgB3lgB,QACvF/V,KAAKi8gB,iBAAiBzyF,UAAU,EAAG,EAAGxpb,KAAK27gB,gBAAgB3lgB,MAAOhW,KAAK27gB,gBAAgB5lgB,SAM3Fgne,EAAa1hf,UAAUglf,kBAAoB,SAAUr6P,GACjDhmP,KAAK6ghB,eACD7ghB,KAAKsvf,MAAM5U,eACX16e,KAAKsvf,MAAM5U,aAAawtC,aACxBlohB,KAAKsvf,MAAM5U,aAAaytC,cAAgB,GAE5CnohB,KAAK2/gB,wBACL3/gB,KAAKsvf,MAAM7U,kBAAmB,EAC9B,IAAK,IAAIt+e,EAAI,EAAGA,EAAI6D,KAAKkrO,MAAMzuO,OAAQN,IACnC6D,KAAKkrO,MAAM/uO,GAAGu1f,YAAY,GAAGp/e,UAEjCtS,KAAKkrO,SACAztO,EAAkBuC,KAAKsugB,gBACxBtugB,KAAKsugB,cAAct+c,QAElBvyD,EAAkBuC,KAAKsvf,MAAM84B,gBAC9BpohB,KAAKsvf,MAAM84B,cAAc91gB,UAE7BtS,KAAKsvf,MAAM7U,kBAAmB,EAC9Bz6e,KAAK6wD,OAAO80c,eAAgB,EAC5B3lgB,KAAK6wD,OAAOm1c,YAAYhgR,GACpBhmP,KAAKsvf,MAAM1/a,WACX5vE,KAAKsvf,MAAM1/a,UAAU4uI,YAAYx+M,KAAKsvf,MAAM+4B,cAAerohB,KAAKsvf,MAAM+4B,eAEtErohB,KAAKsvf,MAAMhU,mBACXt7e,KAAKsvf,MAAMhU,kBAAkBE,qBAAoB,GAErDx7e,KAAKsvf,MAAMnS,sBAKfJ,EAAa1hf,UAAU0shB,iBAAmB,WACtC,IAAIrjhB,EAAQ,+GAER4zG,EAAU,+KACdt4G,KAAKy3D,WAAat2D,EAAc,OAASkC,UAAW,kBAAmBE,OAAQmB,IAC/E,IAAInH,EAAQ4D,EAAc,OAASoC,OAAQ+0G,IAC3Ct4G,KAAKsvH,SAAWnuH,EAAc,OAASkC,UAAW,kBAAmBE,OAAQmB,IAC7E1E,KAAKy3D,WAAW/yD,MAAM4xC,QAAU,OAChC,IAAIz3B,EAAM1d,EAAc,OAASoC,OAAQ+0G,IACzCt4G,KAAKy3D,WAAW91D,YAAYpE,GAC5ByC,KAAKsvH,SAAS3tH,YAAYkd,GAC1B7e,KAAKsvH,SAAS5qH,MAAM4xC,QAAU,OAC9Bt2C,KAAKqghB,gBAAgB1+gB,YAAY3B,KAAKy3D,YACtCz3D,KAAKqghB,gBAAgB1+gB,YAAY3B,KAAKsvH,WAM1CytX,EAAa1hf,UAAUslhB,wBAA0B,WAC7C,GAAsC,SAAlC3ghB,KAAKy3D,WAAW/yD,MAAM4xC,UAAuB74C,EAAkBuC,KAAK4vE,WACpE,GAAK5vE,KAAK4vE,UAAU0qK,QAkBhBt6O,KAAK4vE,UAAU8wc,0BAlBU,CACzB,IAAI1zgB,EAAIhN,KAAK4vE,UAAUs2c,eAAelmhB,KAAK4vE,UAAUryE,OAAO,GACxD0yJ,EAAOjwJ,KAAK4vE,UAAUqzM,QAAQjjR,KAAK4vE,UAAUryE,MAAMslf,WAGnDpoE,GAAWxqR,EAAK00V,kBAAkB33e,EAFzBhN,KAEoCsohB,SAAWtohB,KAAKkrO,MAAM3sO,QAAQ0xJ,GAAQ,IAAMjwJ,KAAKouE,WAFrFpuE,KAEyGsohB,SAAWtohB,KAAKkrO,MAAM3sO,QAAQ0xJ,GAAQ,GAE5JjwJ,KAAKy3D,WAAW/yD,MAAM8H,KAAOyjJ,EAAK00V,kBAAkB53e,GAAKV,KAAKoxB,MAAMz9B,KAAK4vE,UAAUryE,MAAMmwB,SAAS3gB,GAAK/M,KAAKouE,WAAa,IAAM,KAC/HpuE,KAAKy3D,WAAW/yD,MAAMgI,IAAM+ta,EAAW,EAAMz6a,KAAKouE,WAAc,KAC3DpuE,KAAK4vE,UAAU0qK,UAChBttO,EAAIhN,KAAK4vE,UAAUs2c,eAAelmhB,KAAK4vE,UAAU/wD,KAAK,GACtDoxI,EAAOjwJ,KAAK4vE,UAAUqzM,QAAQjjR,KAAK4vE,UAAU/wD,IAAIgke,YAGrD7if,KAAKsvH,SAAS5qH,MAAM8H,KAAOyjJ,EAAK00V,kBAAkB53e,GAAKV,KAAKoxB,MAAMz9B,KAAK4vE,UAAU/wD,IAAI6O,SAAS3gB,GAAK/M,KAAKouE,WAAa,IAAM,KAC3HpuE,KAAKsvH,SAAS5qH,MAAMgI,IAAM+ta,EAAWzta,EAAIhN,KAAKouE,WAAc,OAOxE2ua,EAAa1hf,UAAUiqhB,sBAAwB,SAAU1B,GACrD,IAAIjyB,EAAS3xf,KAAKqkhB,cAAcT,GAChC,IAAKnmhB,EAAkBk0f,IAAWA,EAAOv3e,SAAS,aAAc26e,GAAoB,CAChF,IAAIvof,EAAOxM,KAAKuohB,aAAa52B,GACzB37e,EAAQ27e,EAAOv3e,SAAS,GAAGpE,MAC3BD,EAAS47e,EAAOv3e,SAAS,GAAGrE,OAChC,GAAI/V,KAAKwohB,aAAah8gB,EAAMmlf,EAAO9O,UAAU71e,EAAGgJ,EAAOD,EAAQ6tgB,GAE3D,OADA5jhB,KAAKyohB,oBAAsB92B,GACpB,EAGf,OAAO,GAWX5U,EAAa1hf,UAAUmthB,aAAe,SAAUz7gB,EAAGC,EAAGgJ,EAAOD,EAAQ29e,GACjE,OAAKA,EAAW3mf,EAAIA,GAAK2mf,EAAW3mf,GAAKA,EAAIiJ,GAAW09e,EAAW1mf,EAAIA,GAAK0mf,EAAW1mf,GAAKA,EAAI+I,GAQpGgne,EAAa1hf,UAAUkthB,aAAe,SAAU52B,GAC5C,IAAInlf,EAAOmlf,EAAO9O,UAAU91e,EACxB6we,EAAkB+T,EAAO9O,UAAUjF,gBACnC59e,KAAK4vE,UAAUogc,qBAAqBre,KACE,UAAlC/T,EAAgBj9c,eAChBn0B,GAAQm+e,GAAcO,oBAAoBtN,EAAgBhgQ,iBAC1DpxO,GAAQm+e,GAAcO,oBAAoBtN,EAAgBqL,aAG1Dz8e,GAAQm+e,GAAcO,oBAAoBtN,EAAgBhgQ,kBAGlE,IAAI58O,EAAU2wf,EAAOv3e,SAAS,GAI9B,OAHIpZ,aAAmB+zf,KACnBvof,GAAQxL,EAAQy7B,OAAOjwB,MAEpBA,GAKXuwe,EAAa1hf,UAAUoohB,oBAAsB,SAAUnnhB,GACnD0D,KAAKyhhB,cAAe,EAEpB,OAAkB,KADLnlhB,EAAMq6G,OAASr6G,EAAM60H,SAMtC4rX,EAAa1hf,UAAU0qhB,oBAAsB,SAAUzphB,GACnD,IACIqP,EADgB3L,KAAKqghB,gBACEz0gB,wBACvB88gB,EAAoBpshB,EAAM63C,QAAQ,GAClC12C,EAAkBirhB,KAClBA,EAAoBpshB,EAAMqiE,eAAe,IAE7C,IAAI9yD,EAAU68gB,EAAkB58gB,MAAQH,EAAOa,KAC3CP,EAAUy8gB,EAAkBx8gB,MAAQP,EAAOe,IAC/C,OAAO,IAAIwtC,GAAMruC,EAASI,IAM9B8we,EAAa1hf,UAAUkrhB,kBAAoB,SAAUjqhB,GACjD0D,KAAKmhhB,cAAgBnhhB,KAAKouE,WAC1B,IAAIu6c,EAAoB3ohB,KAAKouE,WAAa,IACtCu6c,EAAoB,GAAKA,EAAoB,IAC7CA,GAAwC,KAExCA,EAAoB,KACpBA,EAAoB,IAExB3ohB,KAAKouE,WAAau6c,GAMtB5rC,EAAa1hf,UAAUirhB,mBAAqB,SAAUhqhB,GAClD0D,KAAKmhhB,cAAgBnhhB,KAAKouE,WAC1B,IAAIu6c,EAAoB3ohB,KAAKouE,WAAa,IACtCu6c,EAAoB,IACpBA,GAAwC,KAExCA,EAAoB,IACpBA,EAAoB,GAExB3ohB,KAAKouE,WAAau6c,GAMtB5rC,EAAa1hf,UAAUkpf,aAAe,SAAUt0V,GAE5C,OADYA,EAAK00V,kBAAkB3ue,OAOvC+me,EAAa1hf,UAAUykgB,WAAa,SAAU7vW,GACtCjwJ,KAAKszP,cAAgBrjG,IACrBjwJ,KAAKszP,iBAAcn4P,GAEvB,IAAI8W,EAAQjS,KAAKkrO,MAAM3sO,QAAQ0xJ,GAE/BjwJ,KAAKkrO,MAAM7iN,OAAOpW,EAAO,GAIzB,IAAKxU,EADQuC,KACiBy9e,eADjBz9e,KAEe,aAAEzB,QAAQ0xJ,IAAS,EAAG,CAC1C,IAAIC,EAHClwJ,KAG+B,aAAEzB,QAAQ0xJ,GAHzCjwJ,KAIe,aAAEqoB,OAAO6nI,EAAW,GAKhD,IAAK,IAAI/zJ,EAAI,EAAGA,EAAI6D,KAAKkrO,MAAMzuO,OAAQN,IACjB6D,KAAKkrO,MAAM/uO,GAAGwof,kBAAkB5ue,OAG5Ck6I,EAAK00V,kBAAkB5ue,OAEjC,IAAIrJ,EAAM,GAIV,GAHIuF,EAAQ,IACRvF,GAAO1M,KAAKkrO,MAAMj5N,EAAQ,GAAG0ye,kBAAkBh4e,SAEpC,IAAXsF,EACA,IAAS9V,EAAI8V,EAAO9V,EAAI6D,KAAKkrO,MAAMzuO,OAAQN,KAEvC8zJ,EAAOjwJ,KAAKkrO,MAAM/uO,IAEbwof,kBAAoB,IAAIzud,GAAK+5H,EAAK00V,kBAAkB53e,EAAGL,EAAKujJ,EAAK00V,kBAAkB3ue,MAAOi6I,EAAK00V,kBAAkB5ue,QACtHrJ,EAAMujJ,EAAK00V,kBAAkBh4e,OAAS,GACtCsjJ,EAAK4vW,4BAA6B,GAa9C9iB,EAAa1hf,UAAU4mf,iBAAmB,WACtC,IACIjhf,EAAUhB,KAAKsvf,MAAMrS,2BADZj9e,KAENsjhB,yBAAyBtihB,GAFnBhB,KAGNw6e,mBACF/8e,EAAkBuC,KAAK4vE,YACxB5vE,KAAK4vE,UAAU8wc,uBAMvB3jC,EAAa1hf,UAAUiohB,yBAA2B,SAAUtihB,GACxD,IAAKvD,EAAkBuD,GAAU,CAC7B,IAAIqyB,EAAOryB,EAAQ4K,wBACfoK,EAAQ,EACRD,EAAS,EAEb,GADAA,EAASsd,EAAKtd,OAAS,EAAIsd,EAAKtd,OAAS,IACrC/V,KAAKsvf,MAAMhU,mBAAqBt7e,KAAKsvf,MAAMhU,kBAAkBC,kBAAmB,CAChF,IAAIqtC,EAAc5ohB,KAAKsvf,MAAMhU,kBAAkButC,YAAYj9gB,wBAC3DoK,EAASqd,EAAKrd,MAAQ4ygB,EAAY5ygB,MAAS,EAAKqd,EAAKrd,MAAQ4ygB,EAAY5ygB,MAAS,SAGlFA,EAAQqd,EAAKrd,MAAQ,EAAIqd,EAAKrd,MAAQ,IAE1ChW,KAAKqghB,gBAAgB37gB,MAAMqR,OAASA,EAAO7I,WAAa,KACxDlN,KAAKqghB,gBAAgB37gB,MAAMsR,MAAQ3J,KAAKwmB,KAAK7c,GAAS,KACtDhW,KAAKknhB,gBAAkB,IAAIhxf,GAAK,EAAG,EAAGlgB,EAAOD,GAC7C/V,KAAK07gB,gBAAgB1lgB,MAAQA,EAC7BhW,KAAK07gB,gBAAgB3lgB,OAASA,EAC9B/V,KAAK27gB,gBAAgB3lgB,MAAQA,EAC7BhW,KAAK27gB,gBAAgB5lgB,OAASA,IAOtCgne,EAAa1hf,UAAUsrgB,yBAA2B,SAAU3S,EAAO80B,EAAc9X,GAC7E,IAAI/nB,EAAa0B,GAAcO,oBAAoB8I,EAAM/K,YACrDC,EAAcyB,GAAcO,oBAAoB8I,EAAM9K,aAC1D,GAAI4/B,EACA,GAAI90B,aAAiBjB,IAAeie,EAAiB,CACjD,IAAIhJ,EAAcgJ,EAAgB,GAClChxgB,KAAKmmgB,iBAAiBp5f,EAAI/M,KAAK4ngB,WAAW76f,EAAIi7f,EAAYj7f,EAC1D/M,KAAKmmgB,iBAAiBnwf,MAAQhW,KAAK4ngB,WAAW5xf,MAAQgyf,EAAYhyf,OAElEgyf,EAAcgJ,EAAgBA,EAAgBv0gB,OAAS,IAC3CsQ,EAAI/M,KAAKmmgB,iBAAiBp5f,EACtCi7f,EAAYh7f,EAAIhN,KAAKmmgB,iBAAiBn5f,EACtChN,KAAK4ngB,WAAa,IAAI1xe,GAAKl2B,KAAK4ngB,WAAW76f,EAAG/M,KAAK4ngB,WAAW56f,EAAGhN,KAAK4ngB,WAAW5xf,MAAOhW,KAAK4ngB,WAAW7xf,QAExG/V,KAAKmmgB,iBAAmB,IAAIjwe,GAAKl2B,KAAKmmgB,iBAAiBp5f,EAAG/M,KAAKmmgB,iBAAiBn5f,EAAGhN,KAAKmmgB,iBAAiBnwf,MAAOhW,KAAKmmgB,iBAAiBpwf,YAErI,CAED,GAAIi+e,aAAiBjB,KAAgBt1f,EAAkBu2f,EAAMlE,cAAqD,SAArCkE,EAAMlE,YAAYC,eAA2B,CACtH,IAAIgG,EAAa/1f,KAAK6wD,OAAOglc,cAAc7B,GAEvC/K,EADqC,WAArC+K,EAAMlE,YAAYC,gBACJ/vf,KAAK4ngB,WAAW5xf,MAAQ+/e,GAAc,EAGvC/1f,KAAK4ngB,WAAW5xf,MAAQ+/e,EAEzC/1f,KAAKihhB,WAAWz8gB,KAAKykf,GAEzBjpf,KAAKmmgB,iBAAiBp5f,EAAI/M,KAAK4ngB,WAAW76f,EAAI/M,KAAK4ngB,WAAW76f,EAAIk8e,EAClE,IAAIjze,EAAQhW,KAAK4ngB,WAAW5xf,OAASize,EAAaC,GAClDlpf,KAAKmmgB,iBAAiBnwf,MAAQhW,KAAK4ngB,WAAW5xf,MAAQA,EAAQ,EAAIA,EAAQ,EAE1EhW,KAAK4ngB,WAAa,IAAI1xe,GAAKl2B,KAAK4ngB,WAAW76f,EAAG/M,KAAK4ngB,WAAW56f,EAAGhN,KAAK4ngB,WAAW5xf,MAAOhW,KAAK4ngB,WAAW7xf,QAExG/V,KAAKmmgB,iBAAmB,IAAIjwe,GAAKl2B,KAAKmmgB,iBAAiBp5f,EAAG/M,KAAKmmgB,iBAAiBn5f,EAAGhN,KAAKmmgB,iBAAiBnwf,MAAOhW,KAAKmmgB,iBAAiBpwf,YAGzI,CAEGi+e,aAAiBjB,IAAoD,SAArCiB,EAAMlE,YAAYC,gBAA6B/vf,KAAKihhB,WAAWxkhB,OAAS,IACxGwsf,EAAajpf,KAAKihhB,WAAW70X,OAEjCpsJ,KAAKmmgB,iBAAiBp5f,EAAI/M,KAAK4ngB,WAAW76f,EAAI/M,KAAK4ngB,WAAW76f,EAAIk8e,EAC9Djze,EAAQhW,KAAK4ngB,WAAW5xf,MAAQize,EAAaC,EACjDlpf,KAAKmmgB,iBAAiBnwf,MAAQhW,KAAK4ngB,WAAW5xf,MAAQA,EAAQ,EAAIA,EAAQ,EAC1EhW,KAAK4ngB,WAAa,IAAI1xe,GAAKl2B,KAAK4ngB,WAAW76f,EAAG/M,KAAK4ngB,WAAW56f,EAAGhN,KAAK4ngB,WAAW5xf,MAAOhW,KAAK4ngB,WAAW7xf,QAExG/V,KAAKmmgB,iBAAmB,IAAIjwe,GAAKl2B,KAAKmmgB,iBAAiBp5f,EAAG/M,KAAKmmgB,iBAAiBn5f,EAAGhN,KAAKmmgB,iBAAiBnwf,MAAOhW,KAAKmmgB,iBAAiBpwf,UAO9Igne,EAAa1hf,UAAUgvgB,YAAc,SAAUt9f,GACvCA,EAAI/M,KAAKmmgB,iBAAiBp5f,IAC1BA,EAAI/M,KAAKmmgB,iBAAiBp5f,GAE1BA,EAAI/M,KAAKmmgB,iBAAiB15f,OAASzM,KAAKqgC,WACxCtzB,EAAI/M,KAAKmmgB,iBAAiB15f,OAE9BzM,KAAKmmgB,iBAAiBnwf,MAAQhW,KAAKmmgB,iBAAiB15f,MAAQM,EAAI/M,KAAKmmgB,iBAAiB15f,MAAQM,EAAI,EAClG/M,KAAKmmgB,iBAAiBp5f,EAAIA,GAM9Bgwe,EAAa1hf,UAAU0vgB,WAAa,SAAU/9f,GACtCA,EAAIhN,KAAKmmgB,iBAAiBn5f,IAC1BA,EAAIhN,KAAKmmgB,iBAAiBn5f,GAE1BA,EAAIhN,KAAKmmgB,iBAAiBx5f,SAC1BK,EAAIhN,KAAKmmgB,iBAAiBx5f,QAE9B3M,KAAKmmgB,iBAAiBpwf,OAAS/V,KAAKmmgB,iBAAiBx5f,OAASK,EAC9DhN,KAAKmmgB,iBAAiBp5f,EAAI/M,KAAK4ngB,WAAW76f,EAC1C/M,KAAKmmgB,iBAAiBnwf,MAAQhW,KAAK4ngB,WAAW5xf,MAC9ChW,KAAKmmgB,iBAAiBn5f,EAAIA,GAM9B+ve,EAAa1hf,UAAUwtgB,kBAAoB,SAAU7yf,GACjDhW,KAAKmmgB,iBAAiBp5f,GAAKiJ,EACvBhW,KAAKmmgB,iBAAiBnwf,MAAQA,EAAQ,EACtChW,KAAKmmgB,iBAAiBnwf,OAASA,EAG/BhW,KAAKmmgB,iBAAiBnwf,MAAQ,GAOtC+me,EAAa1hf,UAAUirgB,WAAa,SAAUr0f,EAAOg+I,GAC7CjwJ,KAAKkrO,MAAM3sO,QAAQ0xJ,IAAS,GAC5BjwJ,KAAKkrO,MAAM7iN,OAAOroB,KAAKkrO,MAAM3sO,QAAQ0xJ,GAAO,GAEhDjwJ,KAAKkrO,MAAM7iN,OAAOroB,KAAKkrO,MAAM3sO,QAAQ0xJ,GAAO,EAAGA,GAC/C,IAAIvjJ,EAAM,GACNuF,EAAQ,IACRvF,GAAO1M,KAAKkrO,MAAMj5N,EAAQ,GAAG0ye,kBAAkBh4e,QAEnD,IAAK,IAAIxQ,EAAI8V,EAAO9V,EAAI6D,KAAKkrO,MAAMzuO,OAAQN,KAEvC8zJ,EAAOjwJ,KAAKkrO,MAAM/uO,IACbwof,kBAAoB,IAAIzud,GAAK+5H,EAAK00V,kBAAkB53e,EAAGL,EAAKujJ,EAAK00V,kBAAkB3ue,MAAOi6I,EAAK00V,kBAAkB5ue,QACtHrJ,EAAMujJ,EAAK00V,kBAAkBh4e,OAAS,IAO9Cowe,EAAa1hf,UAAUqygB,iBAAmB,SAAU/qB,EAAe1yV,GAC/D,IAAIvjJ,EAAM,EACNq8gB,EAAiB,GACjB9a,EAAiB,GAChBxwgB,EAAkBklf,KACnBj2e,EAAMi+e,GAAcO,oBAAoBvI,EAAcx3P,WACtD49R,EAAiBp+B,GAAcO,oBAAoBvI,EAAcomC,gBACjE9a,EAAiBtjB,GAAcO,oBAAoBvI,EAAcsrB,iBAEhExwgB,EAAkBwyJ,EAAK4jW,gBACxBnnf,EAAML,KAAKC,IAAIy8gB,EAAiB94X,EAAK4jW,aAAa99e,OAAQrJ,IAE9D,IAAIC,EAAS,KAAQg+e,GAAcO,oBAAoBvI,EAAct3P,cAChE5tP,EAAkBwyJ,EAAK6jW,gBAExBnnf,EAAS,KAAQN,KAAKC,IAAI2hgB,EAAiBh+W,EAAK6jW,aAAa/9e,OAAQ40e,GAAcO,oBAAoBvI,EAAct3P,gBAEzH,IAAIr1O,EAAQ,EAEPvY,EAAkBklf,KACnB3se,EAAQ20e,GAAcO,oBAAoBvI,EAAcjnN,UAAYinN,EAAcz3P,WAAay3P,EAAcv3P,aACpGu/P,GAAcO,oBAAoBvI,EAAcrjQ,aAEzDtpO,EAAQ,IACRA,EAAQ,GAGZhW,KAAK4ngB,WAAa,IAAI1xe,GAAKy0d,GAAcO,oBAAoBvI,EAAcz3P,YAAax+O,EAAKsJ,EAAO20e,GAAcO,oBAAoBvI,EAAcrjQ,YAAc5yO,EAAMC,GACxK3M,KAAKmmgB,iBAAmB,IAAIjwe,GAAKl2B,KAAK4ngB,WAAW76f,EAAG/M,KAAK4ngB,WAAW56f,EAAGhN,KAAK4ngB,WAAW5xf,MAAOhW,KAAK4ngB,WAAW7xf,SAMlHgne,EAAa1hf,UAAUo9gB,0BAA4B,SAAUzQ,EAAa8gB,GAClEA,IACA9ohB,KAAKmmgB,iBAAiBn5f,EAAIhN,KAAKmmgB,iBAAiBn5f,EAAIg7f,EAAY5S,eAChEp1f,KAAKmmgB,iBAAiBp5f,EAAI/M,KAAKmmgB,iBAAiBp5f,EAAIi7f,EAAY9S,kBAOxEnY,EAAa1hf,UAAU2thB,yBAA2B,SAAUhhB,GACxDhogB,KAAKmmgB,iBAAiBp5f,EAAI/M,KAAK4ngB,WAAW76f,EAAIi7f,EAAYj7f,EAC1D/M,KAAKmmgB,iBAAiBnwf,MAAQhW,KAAK4ngB,WAAW5xf,MAAQgyf,EAAYhyf,OAMtE+me,EAAa1hf,UAAUu9gB,uBAAyB,SAAUl4c,EAAKood,GAE3D,IAAI9gB,EAActnc,EAAIuzb,WAClB60B,IAIA9ohB,KAAKmmgB,iBAAiBp5f,EAAI/M,KAAK4ngB,WAAW76f,EAAIi7f,EAAYj7f,EAC1D/M,KAAKmmgB,iBAAiBnwf,MAAQhW,KAAK4ngB,WAAW5xf,MAAQgyf,EAAYhyf,MAClEhW,KAAK4ngB,WAAa,IAAI1xe,GAAKl2B,KAAK4ngB,WAAW76f,EAAG/M,KAAK4ngB,WAAW56f,EAAGhN,KAAK4ngB,WAAW5xf,MAAOhW,KAAK4ngB,WAAW7xf,QAExG/V,KAAKmmgB,iBAAmB,IAAIjwe,GAAKl2B,KAAKmmgB,iBAAiBp5f,EAAG/M,KAAKmmgB,iBAAiBn5f,EAAGhN,KAAKmmgB,iBAAiBnwf,MAAOhW,KAAKmmgB,iBAAiBpwf,UAO9Igne,EAAa1hf,UAAU29gB,wBAA0B,SAAU/1c,EAAM6ld,GAE7D,IAAI5gB,EAAYjlc,EAAKixb,SACjBsF,EAAav2b,EACb6ld,GACA9ohB,KAAKmmgB,iBAAiBp5f,EAAI/M,KAAK4ngB,WAAW76f,EAAIysf,EAAWzsf,EACzD/M,KAAKmmgB,iBAAiBn5f,EAAIwsf,EAAWxsf,EACrChN,KAAKmmgB,iBAAiBnwf,MAAQhW,KAAK4ngB,WAAW5xf,MAAQwjf,EAAWxjf,MAAQ,EAAIwjf,EAAWxjf,MAAQ,EAC5FhW,gBAAgBq6e,KAChBr6e,KAAKmmgB,iBAAiBpwf,OAASuhB,OAAOymS,mBAE1C/9T,KAAK4ngB,WAAa,IAAI1xe,GAAKl2B,KAAK4ngB,WAAW76f,EAAG/M,KAAK4ngB,WAAW56f,EAAGhN,KAAK4ngB,WAAW5xf,MAAOhW,KAAK4ngB,WAAW7xf,QAExG/V,KAAKmmgB,iBAAmB,IAAIjwe,GAAKl2B,KAAKmmgB,iBAAiBp5f,EAAG/M,KAAKmmgB,iBAAiBn5f,EAAGhN,KAAKmmgB,iBAAiBnwf,MAAOhW,KAAKmmgB,iBAAiBpwf,UAGtI/V,KAAKmmgB,iBAAiBp5f,EAAI/M,KAAK4ngB,WAAW76f,EAAIysf,EAAWzsf,EAAIysf,EAAWxjf,MAAQwjf,EAAW/8d,OAAOhwB,MAC9Fy7f,EAAUn7f,EAAIm7f,EAAUlyf,MAAQhW,KAAK4ngB,WAAW76f,EAAI,EACpD/M,KAAKmmgB,iBAAiBnwf,MAAQhW,KAAK4ngB,WAAW5xf,MAAQ,EAGtDhW,KAAKmmgB,iBAAiBnwf,MAAQhW,KAAK4ngB,WAAW5xf,MAAQkyf,EAAUn7f,EAAIm7f,EAAUlyf,MAAQhW,KAAK4ngB,WAAW76f,EAG1G/M,KAAKmmgB,iBAAiBn5f,EAAIwsf,EAAWxsf,EAAIwsf,EAAW/8d,OAAO/vB,IAAMi+e,GAAcO,oBAAoBjob,EAAKgxb,WAAWnE,YAAYl5N,aAC1H3zN,EAAKgxb,WAAWG,gBACjBp0f,KAAKmmgB,iBAAiBpwf,OAAS/V,KAAK4ngB,WAAWj7f,OAASu7f,EAAUl7f,EAAI,EAAIhN,KAAK4ngB,WAAWj7f,OAASu7f,EAAUl7f,EAAI,GAErHhN,KAAK4ngB,WAAa,IAAI1xe,GAAKl2B,KAAK4ngB,WAAW76f,EAAG/M,KAAK4ngB,WAAW56f,EAAGhN,KAAK4ngB,WAAW5xf,MAAOhW,KAAK4ngB,WAAW7xf,QAExG/V,KAAKmmgB,iBAAmB,IAAIjwe,GAAKl2B,KAAKmmgB,iBAAiBp5f,EAAG/M,KAAKmmgB,iBAAiBn5f,EAAGhN,KAAKmmgB,iBAAiBnwf,MAAOhW,KAAKmmgB,iBAAiBpwf,UAU9Igne,EAAa1hf,UAAUosgB,yBAA2B,SAAU9V,EAAQr+Y,GAChEq+Y,EAAO5kf,EAAIumG,EAAKvmG,EAChB4kf,EAAO3kf,EAAIsmG,EAAKtmG,EAChB2kf,EAAO37e,MAAQs9F,EAAKt9F,OASxB+me,EAAa1hf,UAAUqphB,+BAAiC,SAAUd,EAAa7pa,GAC3E,IAAI43Y,EAAS3xf,KAAKqkhB,cAAcT,GAIhC,GAHKnmhB,EAAkBk0f,IACnB3xf,KAAK4vE,UAAUq5c,mBAAmBt3B,EAAQiyB,GAE1C7pa,EAAW,EAAG,CAGd,GAFA/5G,KAAK4ia,aAAc,EACnB5ia,KAAK0hhB,uBAAwB,EACH,IAAtB1hhB,KAAKkrO,MAAMzuO,OACX,OAGCgB,EAAkBuC,KAAKszP,cAAiB71P,EAAkBuC,KAAKsvf,MAAM1/a,UAAUryE,SAC5Ew8G,EAAW,GAAM,EACjB/5G,KAAKsvf,MAAM1/a,UAAUq1c,oBAGrBjlhB,KAAKsvf,MAAM1/a,UAAUs5c,4BAWrCnsC,EAAa1hf,UAAUoqhB,iBAAmB,SAAU34P,EAAeq8P,GAC/D,KAAInphB,KAAKsvf,MAAMo0B,wBAA0B1jhB,KAAKsvf,MAAMnjB,mBAAmBy2C,iBAChE5ihB,KAAKiihB,2BAA6BjihB,KAAKgihB,qBAD9C,CAIA,IAAI3jB,EAAar+f,KAAK4vE,UAAUw5c,sBAAsBD,EAAYtS,cAAesS,EAAYx9gB,QAAQ,GACrG,IAAIlO,EAAkB4ggB,GAAtB,CAGUr+f,KAAK4vE,UAAUkvM,OAAOu/O,GAChC,GAAIr+f,KAAK4ia,YAAa,CAClB,IAAIymH,EAAiBrphB,KAAK4vE,UAAUw5c,sBAAsBD,EAAYtS,cAAesS,EAAYx9gB,QAAQ,GACrG29gB,EAAUtphB,KAAK4vE,UAAUkvM,OAAOuqQ,GAChCA,IAAmBhrB,GAAc8qB,EAAYz7f,SAAS1gB,GAAKs8gB,IAC3DjrB,EAAagrB,GAGRhrB,EAAWtof,OAAxB,IAEI2ne,EAAU19e,KAAK4vE,UAAUqzM,QAAQo7O,EAAWxb,WAChD7if,KAAKszP,YAAcoqP,EACnB,IAAI3we,EAAI,EACJC,EAAI,EAIR,GAHahN,gBAEwBq6e,GACnB,CACd,GACI58e,EAAkBigf,GAClB,OAEJ,IAAIhiN,EAAYgiN,EAAQiH,kBAAkB3ue,OAC1CjJ,GAAK/M,KAAKm9gB,cAAcnngB,MAAQ0lR,EAAY17R,KAAKouE,YAAc,GACvD,KACJrhE,EAAI,IAGRC,EAAI0we,EAAQiH,kBAAkB33e,EAAIhN,KAAKouE,YAAcpuE,KAAKkrO,MAAM3sO,QAAQm/e,GAAW,GAd1E19e,KAcsFsohB,SAAW,EAAItohB,KAAKouE,YAEvH,IAAIjiE,EAAYnM,KAAKoX,aACjBpL,EAAahM,KAAK2W,cAClB2oO,EAAat/O,KAAKm9gB,cAAcpngB,OAChCwzgB,EAAYvphB,KAAK4vE,UAAU45c,gBAAgBxphB,KAAKsvf,MAAM1/a,UAAU/wD,KAAK,GACrEssO,EAAYo+R,EAAUp+R,UACtBs+R,EAAcF,EAAUxzgB,OAC5BhJ,GAAMo8gB,EAAYz7f,SAAU,EAAI1tB,KAAKouE,WAGhCjiE,EAAY,IAFjBa,IAAMm8gB,EAAYz7f,SAAS1gB,EAAIm+O,GAAanrP,KAAKouE,YAG7CpuE,KAAKqghB,gBAAgBl0gB,UAAaa,EAAI,GAEjCb,EAAYmzO,EAAatyO,EAAIy8gB,EAClCzphB,KAAKqghB,gBAAgBl0gB,UAAYa,EAAIy8gB,EAAcnqS,EAAa,GAGhEt/O,KAAK4vE,UAAU85c,kBAAkB58P,EAAe4wN,GAEpD19e,KAAK4vE,UAAU85c,kBAAkB58P,EAAe4wN,GAChD,IAAIisC,EAAiB3phB,KAAKqghB,gBAAgBz7gB,YAAc5E,KAAKqghB,gBAAgBhzf,YACzErhB,EAAae,EACb/M,KAAKqghB,gBAAgBr0gB,WAAae,EArCzB/M,KAqCqCsghB,cAAc17gB,YAAc,IAAO,GAE5EoH,EAAahM,KAAKm9gB,cAAcnngB,MAAQjJ,EAAI48gB,IACjD3phB,KAAKqghB,gBAAgBr0gB,WAAaA,EAxCzBhM,KAwC8CsghB,cAAc17gB,YAAc,IAAO,GAAK+khB,MAOvG5sC,EAAa1hf,UAAUgphB,cAAgB,SAAUT,GAC7C,OAAO5jhB,KAAKophB,sBAAsBxF,GAAa,IAMnD7mC,EAAa1hf,UAAU+thB,sBAAwB,SAAUxF,EAAagG,GAClE,IAAIj4B,OAASx2f,EACb,IAAKsC,EAAkBuC,KAAKszP,aAAc,CACtC,IAAI2vP,OAAe,EACnB,GAAIjjf,KAAKsvf,MAAMye,sBAAuB,CAClC,IAAI99W,EAAOjwJ,KAAKszP,YAEZonL,GADU16a,KAAK4vE,UAAUi6c,WAAW55X,GACvBA,EAAK00V,kBAAkB5ue,QACpC6if,EAAevsf,KAAKC,IAAK2jJ,EAAK4jW,aAAa7mf,EAAIijJ,EAAK4jW,aAAa99e,OAAS40e,GAAcO,oBAAoBj7V,EAAKyhW,YAAY,GAAG/O,cAAcx3P,YAAcnrP,KAAKouE,WACjK6/b,EAAiBtjB,GAAcO,oBAAoBj7V,EAAKyhW,YAAY,GAAG/O,cAAcsrB,gBACrF0O,EAAgB1sX,EAAK00V,kBAAkB5ue,OACvC1J,KAAKC,IAAI2jJ,EAAK6jW,aAAa/9e,OAASk4f,EAAiC,EAAjBA,GAiBxD,GAhBI2b,EAEI3mC,EADAjjf,KAAK43gB,gBAAgB53gB,KAAK4vE,UAAUryE,MAAMslf,WAC3B7if,KAAKszP,YAAYugQ,aAGjB7zf,KAAKszP,YAAYwgQ,aAIhC8vB,EAAY52gB,GAAK0ta,GAAckpG,EAAY52gB,GAAK2vgB,EAChD15B,EAAejjf,KAAKszP,YAAYwgQ,aAE1B8vB,EAAa,GAAK,GAAMA,EAAa,GAAKhrB,IAChD3V,EAAejjf,KAAKszP,YAAYugQ,cAGpCp2f,EAAkBwlf,GAClB,OAEJ,OAAOjjf,KAAK4vE,UAAUk6c,wBAAwB7mC,EAAc2gC,GAG5D,IAAK,IAAIznhB,EAAI,EAAGA,EAAI6D,KAAKszP,YAAYo+P,YAAYj1f,OAAQN,IAAK,CAC1D,IAAIu1f,EAAc1xf,KAAKszP,YAAYo+P,YAAYv1f,GAE/C,GADAw1f,EAAS3xf,KAAK4vE,UAAUk6c,wBAAwBp4B,EAAakyB,IACxDnmhB,EAAkBk0f,GACnB,OAKhB,OAAOA,GAKX5U,EAAa1hf,UAAUu8gB,gBAAkB,SAAU5jB,GAC/C,OAASA,EAAM9Q,2BAA2BgP,KAAqB,CAC3D,IAAK8B,EAAM9Q,gBACP,OAAO,EAEX8Q,EAAQA,EAAM9Q,gBAElB,OAAqE,IAA9D8Q,EAAM9Q,gBAAgBsQ,iBAAiBj1f,QAAQ,WAM1Dw+e,EAAa1hf,UAAU0uhB,wBAA0B,YAEhC/phB,KAAKwhhB,kBAAqBxhhB,KAAK4ia,YAExC5ia,KAAKsvf,MAAM1/a,UAAUo6c,4CACrBhqhB,KAAKi8gB,iBAAiBzyF,UAAU,EAAG,EAAGxpb,KAAK27gB,gBAAgB3lgB,MAAOhW,KAAK27gB,gBAAgB5lgB,SAU/Fgne,EAAa1hf,UAAU89gB,iBAAmB,WAGtC,IAAK,IAFD8Q,GAAmB,EAEd1mgB,EAAI,EAAGA,EAAIvjB,KAAKkrO,MAAMzuO,OAAQ8mB,IAAK,CACxC,IAAI0sI,EAAOjwJ,KAAKkrO,MAAM3nN,GACU,IAA5B0sI,EAAKyhW,YAAYj1f,QAA4D,IAA5CwzJ,EAAKyhW,YAAY,GAAGzO,aAAaxmf,SAE9D8mB,IAAMvjB,KAAKkrO,MAAMzuO,OAAS,GALzBuD,gBAKgDq6e,KAAoE,IALpHr6e,KAK2Ey9e,aAAal/e,QAAQyB,KAAKkrO,MAAM3nN,MAC5G0mgB,GAAmB,GAEvBjqhB,KAAK8/f,WAAW9/f,KAAKkrO,MAAM3nN,IAC3BA,KAGJ0mgB,GACAjqhB,KAAKm7gB,kBAMbp+B,EAAa1hf,UAAU8/gB,eAAiB,WACpC,GAAIn7gB,KAAK4vE,UAAUryE,MAAMslf,WAAa7if,KAAK4vE,UAAUryE,MAAMslf,UAAU8F,WAAY,CAC7E,IAAI14V,EAAOjwJ,KAAK4vE,UAAUryE,MAAMslf,UAAU8F,WAAW14V,KACjDh5I,EAAkBjX,KAAKm9gB,cAAcpngB,OACzC/V,KAAKqghB,gBAAgBl0gB,UAAY8jJ,EAAK00V,kBAAkBh4e,OAASsK,IAOzE8le,EAAa1hf,UAAU+tgB,eAAiB,SAAU3d,EAAYx7V,GAC1D,IAAKxyJ,EAAkBwyJ,KAAUxyJ,EAAkBuC,KAAK4vE,WAAY,CAChE,IACIs6c,EADYlqhB,KAAK4vE,UAAUypc,aAAa5tB,GACjBvuf,MAAM,KACjC,GAAIgthB,EAAWzthB,OAAS,EAAG,CACvB,IAAI0thB,EAAgBD,EAAW,GAAG36gB,QAAQ,YAAa,IAAIW,OAAO0F,cAC9Dw0gB,EAAeF,EAAW,GAAG36gB,QAAQ,YAAa,IAAIW,OAC1D,OAAQi6gB,GACJ,IAAK,OACD,OAAOnqhB,KAAKqqhB,aAAaD,EAAen6X,EAAKh+I,MAAQ,GACzD,IAAK,WACD,OAAOjS,KAAKqqhB,aAAaD,EAAcn6X,EAAKmqV,OAAOlvQ,MAAMzuO,UAMzE,MAAO,IAKXsgf,EAAa1hf,UAAUgvhB,aAAe,SAAU37gB,EAAS1R,GACrD,OAAQ0R,GACJ,IAAK,aACD,OAAO1O,KAAK6wD,OAAOg+c,YAAY7xgB,GAAOytB,cAC1C,IAAK,aACD,OAAOzqB,KAAK6wD,OAAOg+c,YAAY7xgB,GAAO4Y,cAC1C,IAAK,QACD,OAAO5V,KAAK6wD,OAAOm+c,WAAWhygB,GAAO4Y,cACzC,IAAK,QACD,OAAO5V,KAAK6wD,OAAOm+c,WAAWhygB,GAAOytB,cACzC,QACI,OAAOztB,EAAMkQ,aAMzB6ve,EAAa1hf,UAAUiX,QAAU,WACxB7U,EAAkBuC,KAAKsvf,QACxBtvf,KAAKu3d,cAETv3d,KAAKkrO,SACLlrO,KAAKkrO,WAAQ/vO,EACb6E,KAAKuqgB,eACLvqgB,KAAKuqgB,iBAAcpvgB,EACnB6E,KAAK6xgB,uBACL7xgB,KAAK6xgB,yBAAsB12gB,EAC3B6E,KAAK4rB,UACL5rB,KAAK4rB,YAASzwB,EACV6E,KAAK6wD,QACL7wD,KAAK6wD,OAAOv+C,UAEhBtS,KAAK6wD,YAAS11D,EACTsC,EAAkBuC,KAAK+rG,SACxB/rG,KAAK+rG,OAAOz5F,UAEhBtS,KAAK+rG,YAAS5wG,EACV6E,KAAKmnhB,gBACLnnhB,KAAKmnhB,eAAe70gB,UAExBtS,KAAKmnhB,oBAAiBhshB,EAClB6E,KAAKiohB,cAAgBjohB,KAAKiohB,aAAa5zgB,eACvCrU,KAAKiohB,aAAa5zgB,cAAc/O,YAAYtF,KAAKiohB,cAErDjohB,KAAKiohB,kBAAe9shB,EACfsC,EAAkBuC,KAAKy3D,cACxBz3D,KAAKy3D,WAAWz1D,UAAY,IAE5BhC,KAAKwogB,YACLxogB,KAAKwogB,WAAWl2f,UAEpBtS,KAAKwogB,gBAAartgB,EAClB6E,KAAKy3D,gBAAat8D,EACbsC,EAAkBuC,KAAKsvH,YACxBtvH,KAAKsvH,SAASttH,UAAY,IAE9BhC,KAAKsvH,cAAWn0H,EACXsC,EAAkBuC,KAAKgnhB,qBACxBhnhB,KAAKgnhB,kBAAkBhlhB,UAAY,IAEvChC,KAAKgnhB,uBAAoB7rhB,EACpBsC,EAAkBuC,KAAKinhB,qBACxBjnhB,KAAKinhB,kBAAkBjlhB,UAAY,IAEvChC,KAAKinhB,uBAAoB9rhB,EACpBsC,EAAkBuC,KAAKgjhB,eACxBhjhB,KAAKgjhB,YAAYhhhB,UAAY,IAEjChC,KAAKgjhB,iBAAc7nhB,EACdsC,EAAkBuC,KAAKsghB,iBACxBtghB,KAAKsghB,cAAct+gB,UAAY,IAEnChC,KAAKsghB,mBAAgBnlhB,EAChBsC,EAAkBuC,KAAKqghB,mBACxBrghB,KAAKqghB,gBAAgBr+gB,UAAY,IAErChC,KAAKqghB,qBAAkBllhB,EACvB6E,KAAKsvf,WAAQn0f,EACb6E,KAAK2/gB,0BAAuBxkhB,GAKhC4hf,EAAa1hf,UAAUk8d,YAAc,WACjCv3d,KAAKqghB,gBAAgBzjhB,oBAAoB,SAAUoD,KAAKuvH,eACxDvvH,KAAKqghB,gBAAgBzjhB,oBAAoB,YAAaoD,KAAKwjhB,qBAC3DxjhB,KAAKqghB,gBAAgBzjhB,oBAAoB,YAAaoD,KAAKskhB,qBAC3DtkhB,KAAKgjhB,YAAYpmhB,oBAAoB,QAASoD,KAAK+ihB,qBACnD/ihB,KAAKgjhB,YAAYpmhB,oBAAoB,QAASoD,KAAKijhB,SACnDjjhB,KAAKqghB,gBAAgBzjhB,oBAAoB,cAAeoD,KAAKujhB,eAC7DvjhB,KAAKgjhB,YAAYpmhB,oBAAoB,OAAQoD,KAAKk2d,YAClDl2d,KAAKgjhB,YAAYpmhB,oBAAoB,UAAWoD,KAAK4mhB,mBACrD5mhB,KAAKgjhB,YAAYpmhB,oBAAoB,mBAAoBoD,KAAKuihB,kBAC9DvihB,KAAKgjhB,YAAYpmhB,oBAAoB,oBAAqBoD,KAAKwihB,oBAC/DxihB,KAAKgjhB,YAAYpmhB,oBAAoB,iBAAkBoD,KAAKyihB,gBAC5DzihB,KAAKqghB,gBAAgBzjhB,oBAAoB,UAAWoD,KAAK6ihB,mBACzD7ihB,KAAKqghB,gBAAgBzjhB,oBAAoB,WAAYoD,KAAK+khB,aAC1DlphB,OAAOe,oBAAoB,SAAUoD,KAAKojhB,gBAC1CvnhB,OAAOe,oBAAoB,QAASoD,KAAKwmhB,iBACzC3qhB,OAAOe,oBAAoB,UAAWoD,KAAK0ihB,gBAC3C7mhB,OAAOe,oBAAoB,WAAYoD,KAAK0ihB,iBAEzC3lC,KAMP1C,GAAkC,SAAUlvZ,GAK5C,SAASkvZ,EAAiBiV,GACtB,IAAIvvf,EAAQorF,EAAO7pF,KAAKtB,KAAMsvf,IAAUtvf,KAUxC,OATAD,EAAMw6a,SAAW,GAIjBx6a,EAAMuohB,QAAU,GAIhBvohB,EAAM09e,gBACFhgf,EAAkB6xf,IAAU7xf,EAAkB6xf,EAAMtuf,SAC7CjB,EAwhBf,OAxiBAuqF,GAAU+vZ,EAAkBlvZ,GAwB5BkvZ,EAAiBh/e,UAAU4qgB,cAAgB,SAAUvzP,EAASzgQ,GAC1D,IACI8uX,EAAO/gY,KAAKsohB,QACZtohB,KAAKkrO,MAAMzuO,OAAS,IACpBskY,EAAO/gY,KAAKkrO,MAAMlrO,KAAKkrO,MAAMzuO,OAAS,GAAGkof,kBAAkBh4e,OAAS3M,KAAKsohB,SAE7E,IAAIr4X,EAAO,IAAI2vW,GACf3vW,EAAKmqV,OAASp6e,KAEd,IAAI07R,EAAaj+R,EAAkBi1Q,EAAQiwO,eAAsF,IAArEgI,GAAcO,oBAAoBx4O,EAAQiwO,cAAcjnN,WAEhHp8C,EAAc7hP,EAAkBi1Q,EAAQiwO,eAAuF,KAAtEgI,GAAcO,oBAAoBx4O,EAAQiwO,cAAcrjQ,YACjHwhJ,GAAQ9gY,KAAKm9gB,cAAcnngB,MAAQ0lR,EAAY17R,KAAKouE,YAAc,EAgBtE,OAfI0yT,EAAO9gY,KAAKu6a,WACZz5C,EAAO9gY,KAAKu6a,UAEhBtqR,EAAK00V,kBAAoB,IAAIzud,GAAK4qW,EAAMC,EAAMrlG,EAAWp8C,GACrD7hP,EAAkBwU,GAClBjS,KAAKkrO,MAAM1mO,KAAKyrJ,GAGhBjwJ,KAAKkrO,MAAM7iN,OAAOpW,EAAO,EAAGg+I,GAEhCjwJ,KAAK0tgB,iBAAiBh7P,EAAQiwO,cAAe1yV,GAC7CA,EAAKyhW,YAAYltf,KAAKkuQ,GACtBziH,EAAKyhW,YAAYzhW,EAAKyhW,YAAYj1f,OAAS,GAAGwzJ,KAAOA,EACrDjwJ,KAAK6wD,OAAOg2c,mBAAmBn0P,EAzBlB1yQ,KAyBmCiwJ,GAChDjwJ,KAAK0tgB,iBAAiBh7P,EAAQiwO,cAAe1yV,GACtCA,GAKXoqV,EAAiBh/e,UAAUmoa,aAAe,SAAUlna,GAChD,IAKImhhB,EACAjxgB,EACAE,EAPA49gB,OAAiBnvhB,EACjB+F,EAAMlB,KAAKqghB,gBACXvsf,EAAQ,IAAIomB,GAAM59C,EAAMuP,QAASvP,EAAM2P,SACvCynf,EAAa1zf,KAAK6jhB,gBAAgB/vf,GAAO,GACzC69d,EAAS3xf,KAAKqkhB,cAAc3wB,GAI5BmP,EAAU7igB,KAAKsvf,MAAMzR,oBAA2C1if,EAA1B6E,KAAKsvf,MAAM5U,aACjD6vC,IAAc1nB,GAASA,EAAOmhB,YAAYE,mBAAmBxwB,GAC7D82B,IAAe3nB,GAASA,EAAOmhB,YAAYC,oBAAoBvwB,GAC/D+2B,EAAiB,GACrB,GAAIzqhB,KAAKsvf,MAAMo0B,uBAAwB,CACnC,IAAIsC,EAAYhmhB,KAAKsvf,MAAMnjB,mBAAmBu+C,cAAch3B,GAC5D1zf,KAAKsvf,MAAMnjB,mBAAmBw3C,sBAAwBqC,EAAU9qY,gBAChEuvY,EAAiBzE,EAAUyE,eAE/B,IAAIE,EAAW,EACVlthB,EAAkBk0f,KACnBg5B,EAAW3qhB,KAAK4vE,UAAUg7c,iBAAiBj5B,GAC3C24B,EAAiBtqhB,KAAK4vE,UAAUi7c,oCAAoCl5B,EAAQ+B,GAC5E+pB,EAAaz9gB,KAAK4vE,UAAUk7c,qBAAqBn5B,OAAQx2f,EAAW,EAAGu4f,GAAY,GACnFlnf,EAAOxM,KAAK4vE,UAAU8uM,QAAQizO,GAC9Bjlf,EAAM1M,KAAK4vE,UAAUkvM,OAAO6yO,GAC5B3xf,KAAK4vE,UAAUm7c,6BAA6BT,EAAgB34B,EAAQ+B,EAAW3mf,IAE9EtP,EAAkB6shB,MAAoBhuhB,EAAMurB,SAC7C7nB,KAAKsvf,MAAMljB,gCAAkCpse,KAAKsvf,MAAMljB,gCAInDsnB,EAAW3mf,GAAK49gB,GACrBruhB,EAAMuP,QAAW7L,KAAKm9gB,cAAcnngB,OAAShW,KAAKm9gB,cAAcnngB,MAAQhW,KAAKqghB,gBAAgBhzf,cAC7F/wB,EAAM2P,QAAWjM,KAAKm9gB,cAAcpngB,QAAU/V,KAAKm9gB,cAAcpngB,OAAS/V,KAAKqghB,gBAAgB/yf,cAC3FttB,KAAK4vE,UAAU0qK,QACfp5O,EAAIwD,MAAM+0D,OAAS,OAGnBv4D,EAAIwD,MAAM+0D,OAASz5D,KAAK4vE,UAAUw0c,yBAAyBzyB,EAAQ+B,GAAc,UAAY,OAIjGxyf,EAAIwD,MAAM+0D,OAAS,UAElBh8D,EAAkBgthB,IAAsC,KAAnBA,GAGhChthB,EAAkBgghB,IAAeA,EAAW2H,iBAAmB54gB,EAAOknf,EAAW3mf,GAAKL,EAAMgnf,EAAW1mf,GAC7GR,EAAOmlf,EAAO37e,MAAQ09e,EAAW3mf,GAAKL,EAAMilf,EAAO57e,OAAS29e,EAAW1mf,IACvE9L,EAAIwD,MAAM+0D,OAAS,QAJnBv4D,EAAIwD,MAAM+0D,OAASgxd,EAMnBF,EACArphB,EAAIwD,MAAM+0D,OAAS,aAEd+wd,IACLtphB,EAAIwD,MAAM+0D,OAAS,eA3BnBv4D,EAAIwD,MAAM+0D,OAAS,WAkC3B4gb,EAAiBh/e,UAAUwohB,gBAAkB,SAAUxxf,EAAc24f,GACjE,IAAIl3f,EAAQ,IAAIomB,GAAM7nB,EAAatlB,EAAGslB,EAAarlB,GACnD8mB,EAAM/mB,GAAK/M,KAAKqghB,gBAAgBr0gB,WAChC8nB,EAAM9mB,GAAKhN,KAAKqghB,gBAAgBl0gB,UAChC,IAAK,IAAIhQ,EAAI,EAAGA,EAAI6D,KAAKkrO,MAAMzuO,OAAQN,IAAK,CACxC,IAAI8zJ,EAAOjwJ,KAAKkrO,MAAM/uO,GAClBs+a,GAAWxqR,EAAK00V,kBAAkB33e,EAAIhN,KAAKsohB,SAAWnshB,EAAI,IAAM6D,KAAKouE,WAAapuE,KAAKsohB,SAAWnshB,EAAI,GACtGmjP,EAAcrvF,EAAK00V,kBAAkB5ue,OAAS/V,KAAKouE,WAAcpuE,KAAKsohB,QACtE/tG,EAAWtqR,EAAK00V,kBAAkB53e,EAClCyta,GAAcvqR,EAAK00V,kBAAkBl4e,MAAQ8ta,GAAYv6a,KAAKouE,WAAcmsW,EAChF,GAAIE,GAAW3mZ,EAAM9mB,GAAKyta,EAAUn7L,GAAcxrN,EAAM9mB,EAcpD,OAbIg+gB,IACAhrhB,KAAKszP,YAAcrjG,GAEvBn8H,EAAM9mB,GAAK8mB,EAAM9mB,KAAiBhN,KAAKouE,WACnCt6C,EAAM/mB,EAAIyta,EACV1mZ,EAAM/mB,EAAIkjJ,EAAK00V,kBAAkBl4e,MAE5BqnB,EAAM/mB,EAAIwta,EACfzmZ,EAAM/mB,EAAI,EAGV+mB,EAAM/mB,GAAK+mB,EAAM/mB,EAAIwta,GAAYv6a,KAAKouE,WAEnCt6C,EAGf,OAAOA,GAMXumd,EAAiBh/e,UAAUkshB,qBAAuB,SAAUnlC,GACxD,IAAIpse,EAAQhW,KAAKm9gB,cAAcnngB,MAC3BD,EAAS/V,KAAKm9gB,cAAcpngB,OAC5B28P,EAAU1yQ,KAAKy9e,aAAa,GAAGiU,YAAY,GAC3Ch2N,EAAYivN,GAAcO,oBAAoBx4O,EAAQiwO,cAAcjnN,WACpEp8C,EAAaqrQ,GAAcO,oBAAoBx4O,EAAQiwO,cAAcrjQ,YACzE,OAAQ8iQ,GACJ,IAAK,aACD,GAAIrse,EAAS,GAAKupO,EAAa,EAAG,CAC9B,IAAIlxK,GAAcpuE,KAAKm9gB,cAAcpngB,OAAS,EAAI/V,KAAKsohB,SAAWtohB,KAAKsohB,QAAU,IAAMhpS,EACnFlxK,IAAepuE,KAAKouE,WACf3wE,EAAkBuC,KAAKsvf,MAAM1/a,YAAenyE,EAAkBuC,KAAKsvf,MAAM1/a,UAAUryE,QACnFE,EAAkBuC,KAAKsvf,MAAM1/a,UAAU/wD,MACxC7e,KAAKylhB,iBAAiBzlhB,KAAKsvf,MAAM1/a,UAAUryE,MAAOyC,KAAKsvf,MAAM1/a,UAAU/wD,KAI3E7e,KAAKouE,WAAaA,EAG1B,MACJ,IAAK,eACGp4D,EAAQ,GAAK0lR,EAAY,IACzB17R,KAAKouE,YAAcpuE,KAAKm9gB,cAAcnngB,MAAQ,IAAM0lR,GAExD,MACJ,QACI17R,KAAKouE,WAAa,IAO9Bisa,EAAiBh/e,UAAUylhB,WAAa,WACpC,IAAImK,EAAkBjrhB,KAAKmhhB,cACvBlxX,EAAO,KACPi7X,EAAiB,EACjBzF,GAAmB,EACvB,GAAIzlhB,KAAK4vE,WAAanyE,EAAkBuC,KAAK6lhB,OAASpohB,EAAkBuC,KAAK8lhB,QAAS,CAClF,IAAI/4gB,EAAI,EACJC,EAAI,EACJ0we,EAAU19e,KAAK4vE,UAAUqzM,QAAQjjR,KAAK4vE,UAAU/wD,IAAIg4f,cAAch0B,YACtE91e,GAAK/M,KAAKm9gB,cAAcnngB,MAAQ0ne,EAAQiH,kBAAkB3ue,MAAQi1gB,GAAmB,GAC7E,KACJl+gB,EAAI,IAGRC,EAAI0we,EAAQiH,kBAAkB33e,EAAIi+gB,GAAmBjrhB,KAAKkrO,MAAM3sO,QAAQm/e,GAAW,GAAK19e,KAAKsohB,SAAW,EAAI2C,GAC5G,IAAI1B,EAAYvphB,KAAK4vE,UAAU45c,gBAAgBxphB,KAAKsvf,MAAM1/a,UAAU/wD,KAAK,GACrEssO,EAAYo+R,EAAUp+R,UACRo+R,EAAUxzgB,OAC5BhJ,GAAM/M,KAAK4vE,UAAU/wD,IAAI6O,SAAU,EAAIu9f,EACvCj+gB,IAAMhN,KAAK4vE,UAAU/wD,IAAI6O,SAAS1gB,EAAIm+O,GAAa8/R,EAC/Cl+gB,GAAK/M,KAAK2W,eAAiB5J,GAAK/M,KAAKm9gB,cAAcnngB,OACnDhJ,GAAKhN,KAAKoX,cAAgBpK,GAAKhN,KAAKoX,aAAepX,KAAKm9gB,cAAcpngB,SACtE0vgB,GAAmB,GAG3B,IAAK,IAAItphB,EAAI,EAAGA,EAAI6D,KAAKkrO,MAAMzuO,OAAQN,IACnC+uhB,GAAkClrhB,KAAKkrO,MAAM/uO,GAAGwof,kBAAkB5ue,OAGjE,IADDo1gB,EAAkB,EACtB,IAAShvhB,EAAI,EAAGA,EAAI6D,KAAKkrO,MAAMzuO,OAAQN,IAC/BgvhB,EAAkBnrhB,KAAKkrO,MAAM/uO,GAAGwof,kBAAkB3ue,QAClDm1gB,EAAkBnrhB,KAAKkrO,MAAM/uO,GAAGwof,kBAAkB3ue,OAI1D,IAAID,EAAUm1gB,EAAiBlrhB,KAAKouE,YAAcpuE,KAAKkrO,MAAMzuO,OAAS,GAAKuD,KAAKsohB,SAAW,EAAItohB,KAAKouE,YAAepuE,KAAKm9gB,cAAcpngB,OAClIq1gB,EAAWD,EAAkBnrhB,KAAKouE,WAAapuE,KAAKm9gB,cAAcnngB,MAKtE,GAJIhW,KAAKm9gB,cAAcnngB,MAAQm1gB,EAAkBnrhB,KAAKouE,WAAa,KAC/Dg9c,GAAY,IAGZr1gB,EAAS,EAAG,CACZ,IAAI/Y,EAAQgD,KAAKoX,aACjB,GAAIpX,KAAKy9e,aAAahhf,OAAS,EAAG,CAG9B,IAAI4uhB,IAFJp7X,EAAOjwJ,KAAKy9e,aAAa,IAEDkH,kBAAkB33e,GAAKijJ,EAAKh+I,MAAQ,GAAKjS,KAAKsohB,SAAW2C,GAAmBh7X,EAAKh+I,MAAQ,GAAKjS,KAAKsohB,QACvHxC,EAAQ9lhB,KAAK8lhB,MACbrohB,IACAqohB,EAAQ9lhB,KAAKm9gB,cAAcpngB,OAAS,GAGxC,IADA,IAAIu1gB,EAAQtuhB,EAAQ8ohB,EACbwF,EAAQD,EAAep7X,EAAK00V,kBAAkB5ue,OAASk1gB,GAAkB,CAC5E,IAAI/6X,EAAYD,EAAKh+I,MAAQ,EAC7B,GAAIi+I,IAAclwJ,KAAKkrO,MAAMzuO,OACzB,MAIJ4uhB,IAFAp7X,EAAOjwJ,KAAKkrO,MAAMh7E,IAEEy0V,kBAAkB33e,GAAKijJ,EAAKh+I,MAAQ,GAAKjS,KAAKsohB,SAAW2C,GAAmBh7X,EAAKh+I,MAAQ,GAAKjS,KAAKsohB,QAK3HtrhB,GAFgBizJ,EAAK00V,kBAAkB33e,GAAKijJ,EAAKh+I,MAAQ,GAAKjS,KAAKsohB,SAAWtohB,KAAKouE,YAAc6hF,EAAKh+I,MAAQ,GAAKjS,KAAKsohB,SAChHgD,EAAQD,EAAe,EAAIC,EAAQD,GAAeC,EAAQD,IAAgBrrhB,KAAKouE,WAAa68c,IACjFnF,EACnBA,EAAQ9lhB,KAAKm9gB,cAAcpngB,OAAS,EAExC/V,KAAKqghB,gBAAgBl0gB,UAAYnP,OAGjCgD,KAAKqghB,gBAAgBl0gB,UAAY,EAGrC,GAAIi/gB,EAAW,EAAG,CACVpuhB,EAAQgD,KAAK2W,cACjB,GAAI3W,KAAKy9e,aAAahhf,OAAS,EAAG,CACjB,OAATwzJ,IACAA,EAAOjwJ,KAAKy9e,aAAa,IAE7B,IAAIooC,EAAQ7lhB,KAAK6lhB,MACbpohB,EAAkBoohB,KAClBA,EAAQ7lhB,KAAKm9gB,cAAcnngB,MAAQ,GAEvC,IAAIkS,EAAa+nI,EAAK00V,kBAAkB3ue,MAAQi1gB,EAAmBh7X,EAAK00V,kBAAkB3ue,MACtFu4W,EAAQvxX,EAAQ6ohB,EAIpB7ohB,EAFeizJ,EAAK00V,kBAAkB53e,GAC9BwhX,EAAQt+N,EAAK00V,kBAAkB53e,EAAK,EAAIwhX,EAAQt+N,EAAK00V,kBAAkB53e,GAAKwhX,EAAQt+N,EAAK00V,kBAAkB53e,IAAM/M,KAAKouE,WAAalmD,IACxH29f,EACnBA,EAAQ7lhB,KAAKm9gB,cAAcnngB,MAAQ,EAEvChW,KAAKqghB,gBAAgBr0gB,WAAahP,OAGlCgD,KAAKqghB,gBAAgBr0gB,WAAa,EAEtChM,KAAKw6e,mBACDirC,GACAzlhB,KAAKylhB,iBAAiBzlhB,KAAK4vE,UAAUryE,MAAOyC,KAAK4vE,UAAU/wD,MAOnEw7d,EAAiBh/e,UAAU0rgB,2BAA6B,SAAUr0P,EAAS5mP,GACvE,OAAO9rB,KAAKurhB,uBAAuBvrhB,KAAKw8gB,oBAAoB9pQ,EAAS5mP,GAAW4mP,EAAQzgQ,QAM5Fooe,EAAiBh/e,UAAUmhhB,oBAAsB,SAAU9pQ,EAAS5mP,GAChE,IAAIplB,EASJ,OARAA,EAAOolB,EAAW,YAAc,aAE5B4mP,EAAQiwO,cAAci6B,oBAA6C,IAAtB58gB,KAAKkrO,MAAMzuO,QAAgBuD,KAAKkrO,MAAMlrO,KAAKkrO,MAAMzuO,OAAS,GAAGi1f,YAAY,GAAGz/e,QAAUygQ,EAAQzgQ,MAGtIygQ,EAAQiwO,cAAck6B,0BAA4B78gB,KAAKkrO,MAAMzuO,OAAS,GAAM,IACjFiK,EAAOolB,EAAW,aAAe,cAHjCplB,EAAOolB,EAAW,kBAAoB,kBAKnCplB,GAQX2ze,EAAiBh/e,UAAUkwhB,uBAAyB,SAAU7khB,EAAM2/f,GAChE,GAAIrmgB,KAAKyjf,eAAe4iB,GAAe,CACnC,IAAIp0f,EAAQjS,KAAKongB,gBAAgB1ggB,GAC7Bqtf,EAAe/zf,KAAKyjf,eAAe4iB,GAAcp0f,GAKrD,OAJK8hf,IACDA,EAAe/zf,KAAKwrhB,yBAAyB9khB,GAC7C1G,KAAKyjf,eAAe4iB,GAAcp0f,GAAS8hf,GAExCA,EAEN,GAAIsS,EAAe,EACpB,OAAOrmgB,KAAKurhB,uBAAuB7khB,EAAM2/f,EAAe,IAIhEhsB,EAAiBh/e,UAAUmwhB,yBAA2B,SAAU9khB,GAC5D,IAAIqtf,EAAe,IAAI7B,GAAmBxrf,GACtCm8e,EAAY,IAAIC,GAEpB,OADAD,EAAUI,aAAaz+e,KAAK,IAAI2uf,GAAWtQ,IACpCkR,GAOX1Z,EAAiBh/e,UAAU+rgB,gBAAkB,SAAU1ggB,GACnD,OAAQA,GACJ,IAAK,YACD,OAAO,EACX,IAAK,YACD,OAAO,EACX,IAAK,aACD,OAAO,EACX,IAAK,aACD,OAAO,EACX,IAAK,kBACD,OAAO,EACX,IAAK,kBACD,OAAO,IAOnB2ze,EAAiBh/e,UAAU2rgB,mBAAqB,SAAUrkB,EAAe72d,GAErE,IAAI9V,EAAQ20e,GAAcO,oBAAoBvI,EAAcjnN,UAAYinN,EAAcz3P,WAAay3P,EAAcv3P,aAC7Gp1O,EAAQ,IACRA,EAAQ,GAIRhW,KAAK4ngB,WAFL97e,EAEkB,IAAIoK,GAAKy0d,GAAcO,oBAAoBvI,EAAcz3P,YAAay/P,GAAcO,oBAAoBvI,EAAcomC,gBAAiB/ygB,EAAO20e,GAAcO,oBAAoBvI,EAAcrjQ,YAAcqrQ,GAAcO,oBAAoBvI,EAAcomC,iBAI5P,IAAI7yf,GAAKy0d,GAAcO,oBAAoBvI,EAAcz3P,YAAay/P,GAAcO,oBAAoBvI,EAAcrjQ,WAAaqjQ,EAAcsrB,gBAAiBj4f,EAAO20e,GAAcO,oBAAoBvI,EAAcrjQ,WAAaqjQ,EAAcsrB,iBAE1QjugB,KAAKmmgB,iBAAmB,IAAIjwe,GAAKl2B,KAAK4ngB,WAAW76f,EAAG/M,KAAK4ngB,WAAW56f,EAAGhN,KAAK4ngB,WAAW5xf,MAAOhW,KAAK4ngB,WAAW7xf,SAKlHske,EAAiBh/e,UAAUs8gB,2BAA6B,SAAUh1B,EAAe72d,EAAUmkI,GAEvF,GADAjwJ,KAAKgngB,mBAAmBrkB,EAAe72d,IAClCA,GACGmkI,EAAK6jW,aAAa9mf,EAAIhN,KAAKmmgB,iBAAiBn5f,EAAG,CAE/C,IAAI+I,EAAS40e,GAAcO,oBAAoBvI,EAAcrjQ,WAAaqjQ,EAAcsrB,gBAAkBh+W,EAAK6jW,aAAa/9e,OAC5H/V,KAAKmmgB,iBAAiBn5f,EAAIijJ,EAAK6jW,aAAa9mf,EAC5ChN,KAAKmmgB,iBAAiBpwf,OAASA,IAQ3Cske,EAAiBh/e,UAAUmlf,aAAe,SAAUtwV,GAEhD,IAAK,IADDxjJ,EAAM,EACDvQ,EAAI,EAAGA,EAAI6D,KAAKkrO,MAAMzuO,SAC3BiQ,EAAM1M,KAAKkrO,MAAM/uO,GAAGwof,kBAAkB33e,EAAKhN,KAAKsohB,QAAU,EACtDnshB,IAAM+zJ,GAFyB/zJ,KAMvC6D,KAAKqghB,gBAAgBl0gB,UAAYO,EACjC1M,KAAKw6e,oBAMTH,EAAiBh/e,UAAUm/e,iBAAmB,WAE1C,IAAK,IADDzke,EAAS,EACJ5Z,EAAI,EAAGA,EAAI6D,KAAKkrO,MAAMzuO,OAAQN,IACnC4Z,GAAkB/V,KAAKkrO,MAAM/uO,GAAGwof,kBAAkB5ue,OAGjD,IADDC,EAAQ,EACZ,IAAS7Z,EAAI,EAAGA,EAAI6D,KAAKkrO,MAAMzuO,OAAQN,IAC/B6Z,EAAQhW,KAAKkrO,MAAM/uO,GAAGwof,kBAAkB3ue,QACxCA,EAAQhW,KAAKkrO,MAAM/uO,GAAGwof,kBAAkB3ue,OAGhD,IAAIQ,EAAkBR,EAAQhW,KAAKouE,WAA+B,EAAhBpuE,KAAKu6a,SACnDtja,EAAmBlB,EAAS/V,KAAKouE,YAAepuE,KAAKkrO,MAAMzuO,OAAS,GAAKuD,KAAKsohB,QAC9EmD,EAAczrhB,KAAKm9gB,cAAcnngB,MACjC01gB,EAAe1rhB,KAAKm9gB,cAAcpngB,OAClC/V,KAAKm9gB,cAAcnngB,QAAUhW,KAAKqghB,gBAAgBhzf,YAClDo+f,GAAgBzrhB,KAAKm9gB,cAAcnngB,MAAQhW,KAAKqghB,gBAAgBhzf,YAE3DpW,EAAkBy0gB,IACvBD,GAAezrhB,KAAKqghB,gBAAgBz7gB,YAAc5E,KAAKqghB,gBAAgBhzf,aAEvE7W,EAAiBi1gB,IACjBC,GAAiB1rhB,KAAKm9gB,cAAcpngB,OAAS/V,KAAKqghB,gBAAgB/yf,cAEtEtX,EAAQQ,EAAiBi1gB,EAAcj1gB,EAAiBi1gB,EACxD11gB,EAASkB,EAAkBy0gB,EAAez0gB,EAAkBy0gB,EACxD32f,SAAS/0B,KAAKsghB,cAAc57gB,MAAMsR,MAAMzG,QAAQ,KAAM,IAAK,MAAQyG,GACnE+e,SAAS/0B,KAAKsghB,cAAc57gB,MAAMqR,OAAOxG,QAAQ,KAAM,IAAK,MAAQyG,IACpEhW,KAAKsghB,cAAc57gB,MAAMsR,MAAQA,EAAM9I,WAAa,KACpDlN,KAAKsghB,cAAc57gB,MAAMqR,OAASA,EAAO7I,WAAa,MAK1D,IAAIy+gB,EAAoBt/gB,KAAKC,IAAI,EAAGzQ,OAAOsghB,kBAAoB,GAC3Dn8gB,KAAK07gB,gBAAgB1lgB,QAAU3J,KAAK+S,MAAMqsgB,EAAcE,IACrD3rhB,KAAK07gB,gBAAgB3lgB,SAAW1J,KAAK+S,MAAMssgB,EAAeC,KAC7D3rhB,KAAK07gB,gBAAgB1lgB,MAAQy1gB,EAAcE,EAC3C3rhB,KAAK07gB,gBAAgB3lgB,OAAS21gB,EAAeC,EAC7C3rhB,KAAK07gB,gBAAgBh3gB,MAAMsR,MAAQy1gB,EAAc,KACjDzrhB,KAAK07gB,gBAAgBh3gB,MAAMqR,OAAS21gB,EAAe,KACnD1rhB,KAAKu/gB,iBAAiB9zd,MAAMkge,EAAmBA,GAC/C3rhB,KAAK27gB,gBAAgB3lgB,MAAQy1gB,EAAcE,EAC3C3rhB,KAAK27gB,gBAAgB5lgB,OAAS21gB,EAAeC,EAC7C3rhB,KAAK27gB,gBAAgBj3gB,MAAMsR,MAAQy1gB,EAAc,KACjDzrhB,KAAK27gB,gBAAgBj3gB,MAAMqR,OAAS21gB,EAAe,KACnD1rhB,KAAKi8gB,iBAAiBxwd,MAAMkge,EAAmBA,IAEnD3rhB,KAAKu/gB,iBAAiBtxb,YAAc,EACpCjuF,KAAKi8gB,iBAAiBhub,YAAc,GACpC,IAAS9xF,EAAI,EAAGA,EAAI6D,KAAKkrO,MAAMzuO,OAAQN,IAAK,CACxC,IAAIqQ,GAAQwJ,EAAQhW,KAAKkrO,MAAM/uO,GAAGwof,kBAAkB3ue,MAAQhW,KAAKouE,YAAc,EAC3E5hE,EAAOxM,KAAKu6a,SAEZv6a,KAAKkrO,MAAM/uO,GAAGwof,kBAAoB,IAAIzud,GAAK1pB,EAAMxM,KAAKkrO,MAAM/uO,GAAGwof,kBAAkB33e,EAAGhN,KAAKkrO,MAAM/uO,GAAGwof,kBAAkB3ue,MAAOhW,KAAKkrO,MAAM/uO,GAAGwof,kBAAkB5ue,QAI3J/V,KAAKkrO,MAAM/uO,GAAGwof,kBAAoB,IAAIzud,GAAKl2B,KAAKu6a,SAAUv6a,KAAKkrO,MAAM/uO,GAAGwof,kBAAkB33e,EAAGhN,KAAKkrO,MAAM/uO,GAAGwof,kBAAkB3ue,MAAOhW,KAAKkrO,MAAM/uO,GAAGwof,kBAAkB5ue,QAG5K/V,KAAK4rhB,wBAAwBp1gB,EAAgBS,EAAiBw0gB,EAAaC,EAAc11gB,EAAOD,IAGpGske,EAAiBh/e,UAAUuwhB,wBAA0B,SAAUp1gB,EAAgBS,EAAiBw0gB,EAAaC,EAAc11gB,EAAOD,GAE1GyF,WAAWxb,KAAKqghB,gBAAgB37gB,MAAMqR,QACnCyF,WAAWxb,KAAKsghB,cAAc57gB,MAAMqR,QAC3D/V,KAAKoX,aAAepX,KAAKqghB,gBAAgBl0gB,UACzCnM,KAAK07gB,gBAAgBh3gB,MAAMwP,SAAW,WACtClU,KAAK07gB,gBAAgBh3gB,MAAMgI,IAAM1M,KAAKoX,aAAalK,WAAa,KAChElN,KAAK27gB,gBAAgBj3gB,MAAMwP,SAAW,WACtClU,KAAK27gB,gBAAgBj3gB,MAAMgI,IAAM1M,KAAKoX,aAAalK,WAAa,KAChElN,KAAK2W,cAAgB3W,KAAKqghB,gBAAgBr0gB,WAC1ChM,KAAK07gB,gBAAgBh3gB,MAAM8H,KAAOxM,KAAK2W,cAAgB,KACvD3W,KAAK27gB,gBAAgBj3gB,MAAM8H,KAAOxM,KAAK2W,cAAgB,KACvD3W,KAAK6rhB,sBAMTxxC,EAAiBh/e,UAAUwwhB,mBAAqB,WAC5C7rhB,KAGKy9e,gBAGL,IAAK,IAFD1ne,EAAS/V,KAAKm9gB,cAAcpngB,OAC5B04G,EAAWzuH,KAAKqghB,gBAAgBl0gB,UAC3BhQ,EAAI,EAAGA,EAAI6D,KAAKkrO,MAAMzuO,OAAQN,IAAK,CACxC,IAAI8zJ,EAAOjwJ,KAAKkrO,MAAM/uO,GAClB6Q,GAAKijJ,EAAK00V,kBAAkB33e,EAAIhN,KAAKsohB,SAAWnshB,EAAI,IAAM6D,KAAKouE,WAAapuE,KAAKsohB,SAAWnshB,EAAI,GAChG2vhB,EAAQ77X,EAAK00V,kBAAkB5ue,OAAS/V,KAAKouE,WAC7C29c,EAAS97X,EAAK00V,kBAAkB53e,GACrBC,GAAKyhH,GAAYzhH,GAAKyhH,EAAW14G,GAC9B/I,EAAI8+gB,GAASr9Z,GAAYzhH,EAAI8+gB,GAASr9Z,EAAW14G,GACjD/I,GAAKyhH,GAAYzhH,EAAI8+gB,GAASr9Z,EAAW14G,IAGvD/V,KAAKgshB,eAAe/7X,EAAM87X,EAAQ/+gB,KAO9Cqte,EAAiBh/e,UAAU2whB,eAAiB,SAAU/7X,EAAMljJ,EAAGC,GAC3D,IAAIgJ,EAAQi6I,EAAK00V,kBAAkB3ue,MAAQhW,KAAKouE,WAC5Cr4D,EAASk6I,EAAK00V,kBAAkB5ue,OAAS/V,KAAKouE,WAE9CpuE,KAAKsvf,MAAMo0B,6BAAwEvohB,IAA9C6E,KAAKsvf,MAAMnjB,mBAAmB74O,aAA6BtzP,KAAKsvf,MAAMnjB,mBAAmB74O,cAAgBrjG,GAAQjwJ,KAAKsvf,MAAMnjB,mBAAmBw2C,uBACpL3ihB,KAAKsvf,MAAMnjB,mBAAmB8/C,yBAAyBl/gB,EAAGC,EAAGgJ,EAAOD,GAExE/V,KAAKy9e,aAAaj5e,KAAKyrJ,GACvBjwJ,KAAKkshB,WAAWj8X,EAAMljJ,EAAGC,EAAGgJ,EAAOD,IAKvCske,EAAiBh/e,UAAU6whB,WAAa,SAAUj8X,EAAMljJ,EAAGC,EAAGgJ,EAAOD,GACjE/V,KAAK+rG,OAAO84Y,cAAc50V,EAAMljJ,EAAI/M,KAAK2W,cAAe3J,EAAIhN,KAAKoX,aAAcpB,EAAOD,IAM1Fske,EAAiBh/e,UAAU8whB,mBAAqB,WAC5C,KAAI1uhB,EAAkBuC,KAAKy9e,eAAiBz9e,KAAKy9e,aAAahhf,OAAS,GAAvE,CAGAuD,KAAK6ghB,eACL,IAAK,IAAI1khB,EAAI,EAAGA,EAAI6D,KAAKy9e,aAAahhf,OAAQN,IAAK,CAC/C,IAAI8zJ,EAAOjwJ,KAAKy9e,aAAathf,GACzB6Z,EAAQi6I,EAAK00V,kBAAkB3ue,MAAQhW,KAAKouE,WAC5Cr4D,EAASk6I,EAAK00V,kBAAkB5ue,OAAS/V,KAAKouE,WAC9CrhE,EAAIkjJ,EAAK00V,kBAAkB53e,EAC3BC,GAAKijJ,EAAK00V,kBAAkB33e,EAAIhN,KAAKsohB,SAAWnshB,EAAI,IAAM6D,KAAKouE,WAAapuE,KAAKsohB,SAAWnshB,EAAI,GACpG6D,KAAKkshB,WAAWj8X,EAAMljJ,EAAGC,EAAGgJ,EAAOD,MAGpCske,GACT0C,IC1iFEzC,GAA4B,WAC5B,SAASA,EAAWF,GAEhBp6e,KAAKo6e,YAASj/e,EACd6E,KAAKo6e,OAASA,EAguBlB,OA9tBA97e,OAAOuJ,eAAeyye,EAAWj/e,UAAW,aACxCqM,IAAK,WACD,OAAO1H,KAAKo6e,QAAUp6e,KAAKo6e,OAAOkV,MAAM5jB,kBAE5C/je,YAAY,EACZC,cAAc,IAMlB0ye,EAAWj/e,UAAUilf,sBAAwB,SAAU58a,GACnD,IAAIsiL,KACAomS,EAAav8d,KAAKuB,MAAMsS,GAkB5B,OAjBA1jE,KAAKqshB,qBAAqBD,EAAWpuC,gBAAiBh+e,KAAKo6e,OAAO4D,iBAClEh+e,KAAKsshB,qBAAqBF,EAAWxuC,gBAAiB59e,KAAKo6e,OAAOwD,iBAC7Dngf,EAAkB2uhB,EAAW38f,cAC9BzvB,KAAKo6e,OAAOzob,gBAAkB3xD,KAAK47gB,SAASwQ,EAAW38f,WAAW+G,QAEjE/4B,EAAkB2uhB,EAAWjsC,gBAC9Bngf,KAAKushB,kBAAkBH,EAAYpshB,KAAKo6e,OAAO+F,eAE9C1if,EAAkB2uhB,EAAW9vQ,QAC9Bt8Q,KAAKwshB,UAAUJ,EAAYpshB,KAAKo6e,OAAO99N,OAEtC7+Q,EAAkB2uhB,EAAW7ohB,SAC9BvD,KAAKyshB,YAAYL,EAAYpshB,KAAKo6e,OAAO72e,QAExC9F,EAAkB2uhB,EAAWpmS,WAC9BhmP,KAAK0shB,cAAcN,EAAWpmS,SAAUA,GAErCA,GAEXs0P,EAAWj/e,UAAUoxhB,YAAc,SAAUjwhB,EAAM+G,GAC/C,IAAK,IAAIpH,EAAI,EAAGA,EAAIK,EAAK+G,OAAO9G,OAAQN,IAChCsB,EAAkBuC,KAAKo6e,OAAO72e,OAAOmgf,WAAWlnf,EAAK+G,OAAOpH,GAAGs7B,QAC/Dz3B,KAAK2shB,WAAWnwhB,EAAMA,EAAK+G,OAAOpH,GAAIoH,IAIlD+2e,EAAWj/e,UAAUsxhB,WAAa,SAAUnwhB,EAAMkI,EAAOnB,GACrD,IAAIqphB,EACJ,IAAKnvhB,EAAkBiH,EAAMgC,MAAO,CAahC,GAZmB,cAAfhC,EAAMgC,QACNkmhB,EAAS,IAAI5lC,IACNtgf,KAAO,aAEC,cAAfhC,EAAMgC,QACNkmhB,EAAS,IAAIngC,IACN/lf,KAAO,aAEbjJ,EAAkBiH,EAAM+yB,QACzBm1f,EAAOn1f,KAAO/yB,EAAM+yB,MAExBl0B,EAAOiB,KAAKoohB,IACPnvhB,EAAkBiH,EAAMoif,SAAU,CACnC,IAAIA,EAAUvjf,EAAOmgf,WAAWh/e,EAAMoif,SACtC,GAAKrpf,EAAkBqpf,GAKlB,CACD,IAAI+lC,EAAa7shB,KAAK8shB,SAASpohB,EAAMoif,QAAStqf,GAC1CuwhB,OAAc,EAMVA,EALHtvhB,EAAkBovhB,IAAeA,EAAWnmhB,OAASkmhB,EAAOlmhB,KAIzC,cAAhBkmhB,EAAOlmhB,KACOmpD,KAAKuB,MAAM,wDAGXvB,KAAKuB,MAAM,0DAPfy7d,EAUlB7shB,KAAK2shB,WAAWnwhB,EAAMuwhB,EAAaxphB,GACnCqphB,EAAO9lC,QAAUvjf,EAAOmgf,WAAWqpC,EAAYt1f,WAnB3Cqvd,EAAQpgf,OAASkmhB,EAAOlmhB,OACxBkmhB,EAAO9lC,QAAUA,GAqB7B,IAAKrpf,EAAkBiH,EAAMyuD,MAAO,CAChC,IAAIA,EAAO5vD,EAAOmgf,WAAWh/e,EAAMyuD,MAC/B65d,EAAYhthB,KAAK8shB,SAASpohB,EAAMyuD,KAAM32D,GACtCuwhB,OAAc,EAClB,GAAItvhB,EAAkB01D,GAAO,CACzB,GAAI11D,EAAkBuvhB,GAAY,CAE9B,IAAIC,KACJA,EAAWjvC,gBAAkBt5e,EAAMs5e,gBACnCivC,EAAWx1f,KAAO/yB,EAAM+yB,KAAO,QAC/Bw1f,EAAWvmhB,KAAO,YAElBumhB,EAAWnmC,QAA4B,WAAlBpif,EAAMoif,QAAuB,yBAA4Bpif,EAAMoif,QAAU,QAC9FimC,EAAcE,OAGdF,EAAcC,EAElBhthB,KAAK2shB,WAAWnwhB,EAAMuwhB,EAAaxphB,GACnCqphB,EAAOz5d,KAAO11D,EAAkB8F,EAAOmgf,WAAWqpC,EAAYt1f,OAAS/yB,EAAMyuD,KAAO5vD,EAAOmgf,WAAWqpC,EAAYt1f,WAGlHm1f,EAAOz5d,KAAOA,EAStB,GANK11D,EAAkBiH,EAAMs5e,kBACzBh+e,KAAKqshB,qBAAqB3nhB,EAAMs5e,gBAAiB4uC,EAAO5uC,iBAEvDvgf,EAAkBiH,EAAMk5e,kBACzB59e,KAAKsshB,qBAAqB5nhB,EAAMk5e,gBAAiBgvC,EAAOhvC,kBAEvDngf,EAAkBiH,EAAM4jC,MACzB,GAAI5jC,EAAM4jC,OAAS5jC,EAAM+yB,KACrBm1f,EAAOtkf,KAAOskf,MAEb,CACD,IAAItkf,EAAO/kC,EAAOmgf,WAAWh/e,EAAM4jC,MACnC,GAAK7qC,EAAkB6qC,IAASA,EAAK5hC,OAASkmhB,EAAOlmhB,KAGhD,CACD,IAAIwmhB,EAAkBlthB,KAAK8shB,SAASpohB,EAAM4jC,KAAM9rC,GAC3CiB,EAAkByvhB,GAKnBN,EAAOtkf,KAAOskf,GAJd5shB,KAAK2shB,WAAWnwhB,EAAM0whB,EAAiB3phB,GACvCqphB,EAAOtkf,KAAO/kC,EAAOmgf,WAAWwpC,EAAgBz1f,YANpDm1f,EAAOtkf,KAAOA,KAgBlCgyc,EAAWj/e,UAAUyxhB,SAAW,SAAUr1f,EAAMj7B,GAC5C,IAAK,IAAIL,EAAI,EAAGA,EAAIK,EAAK+G,OAAO9G,OAAQN,IACpC,GAAIK,EAAK+G,OAAOpH,GAAGs7B,OAASA,EACxB,OAAOj7B,EAAK+G,OAAOpH,IAK/Bm+e,EAAWj/e,UAAUkxhB,kBAAoB,SAAU/vhB,EAAM2jf,GACrD,IAAK,IAAIhkf,EAAI,EAAGA,EAAIK,EAAK2jf,cAAc1jf,OAAQN,IAAK,CAChD,IAAIkqf,EAAe,IAAIse,GACnBwoB,EAAW3whB,EAAK2jf,cAAchkf,GAElC,GADAgkf,EAAc37e,KAAK6hf,IACd5of,EAAkB0vhB,KACd1vhB,EAAkB0vhB,EAAS/mC,kBAC5BC,EAAaD,eAAiB+mC,EAAS/mC,iBAEtC3of,EAAkB0vhB,EAAS/tc,SAC5B,IAAK,IAAI77D,EAAI,EAAGA,EAAI4pgB,EAAS/tc,OAAO3iF,OAAQ8mB,IAAK,CAC7C,IAAI4uI,EAAQg7X,EAAS/tc,OAAO77D,GAC5B,IAAK9lB,EAAkB00J,GAAQ,CAC3B,IAAIm2V,EAAYtof,KAAKothB,eAAej7X,EAAOk0V,GAC3CA,EAAajna,OAAO56E,KAAK8jf,OAOjDhO,EAAWj/e,UAAU+xhB,eAAiB,SAAU5whB,EAAM8yf,GAClD,IAAIhH,EAAY,IAAIuc,GAAWvV,GAmB/B,MAlB8B,WAA1B9yf,EAAK8ngB,kBACLhc,EAAUgc,iBAAmB,SAC7Bhc,EAAU0c,aAAgBvngB,EAAkBjB,EAAKwogB,cAAoC,GAApBxogB,EAAKwogB,eAGtE1c,EAAUgc,iBAAmB9ngB,EAAK8ngB,iBAClChc,EAAUtC,QAAUxpf,EAAKwpf,QACzBsC,EAAU0c,aAAgBvngB,EAAkBjB,EAAKwogB,cAAoC,GAApBxogB,EAAKwogB,aAClExogB,EAAKyogB,cAAgB,EACrB3c,EAAU2c,aAAezogB,EAAKyogB,aAG9B3c,EAAU2c,aAAezogB,EAAKupf,aAGtCuC,EAAUyc,gBAAkBvogB,EAAKuogB,gBACjC/kgB,KAAKqshB,qBAAqB7vhB,EAAKwhf,gBAAiBsK,EAAUtK,iBAC1Dh+e,KAAKsshB,qBAAqB9vhB,EAAKohf,gBAAiB0K,EAAU1K,iBACnD0K,GAEXhO,EAAWj/e,UAAUmxhB,UAAY,SAAUhwhB,EAAM6whB,GAC7C,IAAK,IAAIlxhB,EAAI,EAAGA,EAAIK,EAAK8/Q,MAAM7/Q,OAAQN,IAAK,CACxC,IAAI0mG,EAAO,IAAIojZ,GACX3pO,EAAQ9/Q,EAAK8/Q,MAAMngR,GAClBsB,EAAkB6+Q,EAAM8pO,kBACzBvjZ,EAAKujZ,eAAiB9pO,EAAM8pO,eAC5BvjZ,EAAKwjZ,aAAermf,KAAKo6e,OAAOm0B,oBAAoBjyP,EAAM8pO,iBAE9DinC,EAAe7ohB,KAAKq+F,GACfplG,EAAkB6+Q,EAAM4pO,UACzBrjZ,EAAKqjZ,OAAS5pO,EAAM4pO,QAEpB5pO,EAAM31Q,eAAe,mBACrB3G,KAAKsthB,mBAAmBhxQ,EAAMgqO,eAAgBzjZ,KAI1Dy3Y,EAAWj/e,UAAUiyhB,mBAAqB,SAAU9whB,EAAMqmG,GACtD,IAAIplG,EAAkBjB,GAGtB,IAAK,IAAIL,EAAI,EAAGA,EAAIK,EAAKC,OAAQN,IAAK,CAClC,IAAImqf,EAAiB,IAAIT,GACrBW,EAAgBhqf,EAAKL,GACzBmqf,EAAeN,QAAUQ,EAAcR,QACvCM,EAAeP,YAAcS,EAAcT,YACtCtof,EAAkB+of,EAAcV,qBACjCQ,EAAeR,kBAAoB9lf,KAAKothB,eAAe5mC,EAAcV,kBAAmBQ,IAE5FzjZ,EAAKyjZ,eAAe9hf,KAAK8hf,KAGjChM,EAAWj/e,UAAUqxhB,cAAgB,SAAUlwhB,EAAMwpP,GACjD,IAAK,IAAI7pP,EAAI,EAAGA,EAAIK,EAAKC,OAAQN,IAAK,CAClC,IAAIu2Q,EAAU,IAAIgwO,GAClBhwO,EAAQiwO,cAAgB,IAAIC,GAAelwO,GAC3CA,EAAQzgQ,MAAQ9V,EAChB,IAAI0hB,EAAOrhB,EAAKL,GACXsB,EAAkBogB,EAAK8ke,gBACxB3if,KAAKuthB,mBAAmB1vgB,EAAK8ke,cAAejwO,EAAQiwO,eAEnDllf,EAAkBogB,EAAK4le,iBACxBzjf,KAAKo6e,OAAOqJ,eAAej/e,KAAKxE,KAAKojf,kBAAkBvle,EAAK4le,eAAgBzjf,KAAKo6e,OAAOqJ,iBAE5Fzjf,KAAKwthB,cAAc3vgB,EAAKi2P,OAAQpB,GAChC,IAAK,IAAIlrP,EAAM,EAAGA,EAAMkrP,EAAQuwO,aAAaxmf,OAAQ+qB,IACjDkrP,EAAQuwO,aAAaz7d,GAAK07d,gBAAkBxwO,EAEhD1sB,EAASxhP,KAAKkuQ,KAMtB4nO,EAAWj/e,UAAU+nf,kBAAoB,SAAU5mf,EAAMinf,GACrD,IAAIN,KACJ,IAAK1lf,EAAkBjB,EAAKooF,QAAS,CACjC,IAAI6oc,EAAY,IAAIv7B,GAAmB,aACvC/O,EAAI,GAAKsqC,EACTzthB,KAAKwthB,cAAchxhB,EAAKooF,OAAOkvL,OAAQ25Q,GAE3C,IAAKhwhB,EAAkBjB,EAAK8wM,QAAS,CACjC,IAAIogV,EAAY,IAAIx7B,GAAmB,aACvC/O,EAAI,GAAKuqC,EACT1thB,KAAKwthB,cAAchxhB,EAAK8wM,OAAOwmE,OAAQ45Q,GAE3C,IAAKjwhB,EAAkBjB,EAAK6mf,YAAa,CACrC,IAAIA,EAAa,IAAI6O,GAAmB,cACxC/O,EAAI,GAAKE,EACTrjf,KAAKwthB,cAAchxhB,EAAK6mf,WAAWvvO,OAAQuvO,GAE/C,IAAK5lf,EAAkBjB,EAAK8mf,YAAa,CACrC,IAAIA,EAAa,IAAI4O,GAAmB,cACxC/O,EAAI,GAAKG,EACTtjf,KAAKwthB,cAAchxhB,EAAK8mf,WAAWxvO,OAAQwvO,GAE/C,IAAK7lf,EAAkBjB,EAAK+mf,iBAAkB,CAC1C,IAAIA,EAAkB,IAAI2O,GAAmB,mBAC7C/O,EAAI,GAAKI,EACTvjf,KAAKwthB,cAAchxhB,EAAK+mf,gBAAgBzvO,OAAQyvO,GAEpD,IAAK9lf,EAAkBjB,EAAKgnf,iBAAkB,CAC1C,IAAIA,EAAkB,IAAI0O,GAAmB,mBAC7C/O,EAAI,GAAKK,EACTxjf,KAAKwthB,cAAchxhB,EAAKgnf,gBAAgB1vO,OAAQ0vO,GAEpD,OAAOL,GAEX7I,EAAWj/e,UAAUmyhB,cAAgB,SAAUhxhB,EAAMk2Q,GACjD1yQ,KAAK2thB,UAAUnxhB,EAAMk2Q,EAAQuwO,aAAcvwO,IAE/C4nO,EAAWj/e,UAAUsyhB,UAAY,SAAUnxhB,EAAMs3Q,EAAQr5P,GACrD,IAAKhd,EAAkBjB,GACnB,IAAK,IAAIL,EAAI,EAAGA,EAAIK,EAAKC,OAAQN,IAAK,CAClC,IAAI63f,EAAQx3f,EAAKL,GACjB,GAAI63f,EAAMrtf,eAAe,WAAY,CACjC,IAEIk8e,EAAY,IAAIC,GACpBD,EAAU7E,gBAAkB,IAAIgF,GAAiBH,GACjDA,EAAUjF,gBAAkB,IAAImF,GAAiBF,GACjD7if,KAAKqshB,qBAAqBr4B,EAAMhW,gBAAiB6E,EAAU7E,iBAC3Dh+e,KAAKsshB,qBAAqBt4B,EAAMpW,gBAAiBiF,EAAUjF,iBAC3D,IAAIgwC,OAAW,EACVnwhB,EAAkBu2f,EAAMpW,kBAAqBngf,EAAkBu2f,EAAMpW,gBAAgBmO,YAEjFtuf,EADLmwhB,EAAW5thB,KAAKo6e,OAAO72e,OAAOmgf,WAAWsQ,EAAMpW,gBAAgBmO,UAAW,eAEtElJ,EAAUjF,gBAAgB0J,WAAWsmC,GAGzC55B,EAAM65B,QAAQpxhB,OAAS,GACvBuD,KAAK8thB,eAAe95B,EAAM65B,QAAShrC,GAff,GAiBxB/uO,EAAOtvQ,KAAKq+e,GACZA,EAAU5we,MAAQ9V,EAClB0mf,EAAUK,gBAAkBzoe,OAEvBu5e,EAAMrtf,eAAe,SAC1B3G,KAAK+thB,WAAW/5B,EAAOlgP,EAAQ33Q,EAAGse,KAKlD6/d,EAAWj/e,UAAU0yhB,WAAa,SAAU/5B,EAAOlgP,EAAQ7hQ,EAAOygQ,GAC9D,IAAIzyM,EAAQ,IAAI8yb,GAChB9yb,EAAMhuD,MAAQA,EACdguD,EAAM6vb,YAAc,IAAIT,GAAapvb,GAChCxiE,EAAkBu2f,EAAMlE,cACzB9vf,KAAKguhB,iBAAiBh6B,EAAMlE,YAAa7vb,EAAM6vb,aAEnD7vb,EAAM//B,MAAQ8zd,EAAM9zd,MACpB+/B,EAAM/tB,YAAc8hd,EAAM9hd,YAC1B,IAAK,IAAI/1C,EAAI,EAAGA,EAAI63f,EAAMz7N,KAAK97R,OAAQN,IAAK,CACxC,IAAIukE,EAAM,IAAIuxb,GACdvxb,EAAIy1b,UAAY,IAAIjG,GAAWxvb,GAC/B,IAAIutd,EAAWj6B,EAAMz7N,KAAKp8R,GAC1B,GAAI8xhB,EAAStnhB,eAAe,aAAc,CACtC3G,KAAKkuhB,eAAeD,EAAS93B,UAAWz1b,EAAIy1b,WAC5Cn2f,KAAKmuhB,mBAAmBF,EAAUvtd,EAAIy1b,WACtCn2f,KAAKmuhB,mBAAmBF,EAAS93B,UAAWz1b,EAAIy1b,WAChDz1b,EAAIzuD,MAAQ9V,EACZ,IAAK,IAAIonB,EAAI,EAAGA,EAAIywe,EAAMz7N,KAAKp8R,GAAG2lE,MAAMrlE,OAAQ8mB,IAAK,CACjD,IAAI0/C,EAAO,IAAI8ub,GACf9ub,EAAKqxb,WAAa,IAAIpD,GAAYjub,GAClCvC,EAAIuib,aAAaz+e,KAAKy+D,GACtBA,EAAKigb,gBAAkBxib,EACvBuC,EAAKhxD,MAAQsR,EACb0/C,EAAKw9N,SAAWtkS,EACZ63f,EAAMz7N,KAAKp8R,GAAG2lE,MAAMv+C,GAAG5c,eAAe,eACtC3G,KAAKouhB,gBAAgBp6B,EAAMz7N,KAAKp8R,GAAG2lE,MAAMv+C,GAAG+we,WAAYrxb,EAAKqxb,YAEjEt0f,KAAKwthB,cAAcx5B,EAAMz7N,KAAKp8R,GAAG2lE,MAAMv+C,GAAGuwP,OAAQ7wM,IAG1DhD,EAAMgjb,aAAaz+e,KAAKk8D,GACxBA,EAAIwib,gBAAkBjjb,EAE1BA,EAAMijb,gBAAkBxwO,EACxBoB,EAAOtvQ,KAAKy7D,GACZA,EAAM42b,eAAgB,GAE1Bvc,EAAWj/e,UAAU8yhB,mBAAqB,SAAU3xhB,EAAM25f,GACjD14f,EAAkBjB,EAAKo0f,cACxBuF,EAAUvF,WAAap0f,EAAKo0f,YAE3Bnzf,EAAkBjB,EAAKq0f,mBACxBsF,EAAUtF,gBAAkBr0f,EAAKq0f,iBAEhCpzf,EAAkBjB,EAAKs0f,uBACxBqF,EAAUrF,oBAAsBt0f,EAAKs0f,qBAEpCrzf,EAAkBjB,EAAKu0f,aACxBoF,EAAUpF,UAAYv0f,EAAKu0f,WAE1Btzf,EAAkBjB,EAAKw0f,kBACxBmF,EAAUnF,eAAiBx0f,EAAKw0f,gBAE/Bvzf,EAAkBjB,EAAKy0f,sBACxBkF,EAAUlF,mBAAqBz0f,EAAKy0f,qBAG5C3W,EAAWj/e,UAAUyyhB,eAAiB,SAAUtxhB,EAAMqmf,EAAWwrC,GAE7D,IAAK,IADDhwB,EAAa,IAAIlL,GAAWtQ,GACvB1mf,EAAI,EAAGA,EAAIK,EAAKC,OAAQN,IAAK,CAClC,IAAIipJ,EAAS5oJ,EAAKL,GAClB,GAAIipJ,EAAOz+I,eAAe,QAAS,CAC/B,IAAI2vB,OAAcn7B,EAclB,GAbI6E,KAAKo6e,OAAOgoC,aACZ9rf,EAAc,IAAIsoe,IACNnT,WAAazrf,KAAKo6e,OAAOmwB,YAAYvqgB,KAAKo6e,OAAOmwB,YAAY9tgB,OAAS,GAGlF65B,EADqB,OAAhB8uH,EAAO34H,KACE,IAAIqye,GAGJ,IAAItK,GAEtBl+d,EAAY0nd,gBAAkB,IAAIgF,GAAiB1sd,GACnDt2B,KAAKqshB,qBAAqBjnY,EAAO44V,gBAAiB1nd,EAAY0nd,gBAAiBqwC,IAE1E5whB,EAAkB2nJ,EAAO44V,mBAAqBvgf,EAAkB2nJ,EAAO44V,gBAAgB+N,WAAY,CACpG,IAAIW,EAAY1sf,KAAKo6e,OAAO72e,OAAOmgf,WAAWt+V,EAAO44V,gBAAgB+N,UAAW,aAChFz1d,EAAY0nd,gBAAgBsJ,WAAWoF,GAE3Cp2d,EAAY7J,KAAO24H,EAAO34H,KAC1B6J,EAAYw3B,KAAOuwc,EACnBA,EAAWjkf,SAAS5V,KAAK8xB,QAExB,GAAI8uH,EAAOz+I,eAAe,eAAgB,CAC3C,IAAI2uL,EAAQ,IAAIm/T,GAAgBj4f,EAAKL,GAAGkjgB,eACxC/pU,EAAMmqU,WAAajjgB,EAAKL,GAAGsjgB,WAC3BnqU,EAAM0oT,gBAAkB,IAAIgF,GAAiB1tT,GAC7CA,EAAMxnI,KAAOuwc,EACbA,EAAWjkf,SAAS5V,KAAK8wL,GACzBA,EAAMulJ,YAAcz1L,EAAOy1L,YAC3BvlJ,EAAMt/K,MAAQ20e,GAAcO,oBAAoB9lW,EAAOpvI,OACvDs/K,EAAMv/K,OAAS40e,GAAcO,oBAAoB9lW,EAAOrvI,QACxD/V,KAAKqshB,qBAAqBjnY,EAAO44V,gBAAiB1oT,EAAM0oT,sBAEvD,GAAI54V,EAAOz+I,eAAe,gBAAmBy+I,EAAOz+I,eAAe,cAAqC,IAArBy+I,EAAOmmW,UAAkB,CAC7G,IAAIE,EAAa,IAAIH,GAAgB,GACrCG,EAAW8S,YAAcn5W,EAAOm5W,YAChCv+f,KAAKo6e,OAAOmwB,YAAY/lgB,KAAKinf,GAC7BA,EAAW39b,KAAOuwc,EAClBr+f,KAAKo6e,OAAOxud,OAAOpnB,KAAKinf,GACxB4S,EAAWjkf,SAAS5V,KAAKinf,QAExB,GAAIrmW,EAAOz+I,eAAe,aAAc,CACzC,IAAIolB,OAAQ5wB,EACZ,GAAyB,IAArBiqJ,EAAOmmW,WAGP,GAFAx/d,EAAQ,IAAIu/d,GAAgB,GAC5Btrf,KAAK+9f,eAAiBhye,EAClB/rB,KAAKo6e,OAAOmwB,YAAY9tgB,OAAS,EAAG,CACpCsvB,EAAM0/d,WAAazrf,KAAKo6e,OAAOmwB,YAAYvqgB,KAAKo6e,OAAOmwB,YAAY9tgB,OAAS,GAC5EsvB,EAAM0/d,WAAWsS,eAAiBhye,EAElC,IAAIuigB,EAAkBjwB,EAAWjkf,SAAS3d,OAC1C,GAAI6xhB,GAAmB,GAAMjwB,EAAWjkf,SAASk0gB,EAAkB,aAAchjC,IAC1E+S,EAAWjkf,SAASk0gB,EAAkB,GAAG/vB,aACxCF,EAAWjkf,SAASk0gB,EAAkB,aAAc95B,GAAiB,CAClD6J,EAAWjkf,SAASk0gB,EAAkB,GAAG7hgB,KAC3C9c,MAAM,UACvB3P,KAAKo6e,OAAOgoC,aAAc,UAKZ,IAArBh9X,EAAOmmW,YACZx/d,EAAQ,IAAIu/d,GAAgB,GAExBtrf,KAAKo6e,OAAOmwB,YAAY9tgB,OAAS,IACjCsvB,EAAM0/d,WAAazrf,KAAKo6e,OAAOmwB,YAAYvqgB,KAAKo6e,OAAOmwB,YAAY9tgB,OAAS,GAC5EsvB,EAAM0/d,WAAWD,SAAWz/d,IAE3BtuB,EAAkBsuB,EAAM0/d,aAAe1/d,EAAM0/d,WAAWsS,iBACzDhye,EAAMgye,eAAiBhye,EAAM0/d,WAAWsS,eACxChye,EAAM0/d,WAAWsS,eAAevS,SAAWz/d,GAG/C/rB,KAAKo6e,OAAOmwB,YAAYlif,OAAOroB,KAAKo6e,OAAOmwB,YAAY9tgB,OAAS,EAAG,GACnEuD,KAAK+9f,oBAAiB5igB,EACtB6E,KAAKo6e,OAAOgoC,aAAc,EAC1BpihB,KAAKo6e,OAAO+nC,gBAAgB39gB,KAAKunB,EAAM0/d,aAE3C1/d,EAAM+hC,KAAOuwc,EACbA,EAAWjkf,SAAS5V,KAAKunB,QAExB,GAAIq5H,EAAOz+I,eAAe,gBAAiB,CAC5C,IAAIghhB,OAAWxshB,EAKf,GAJAwshB,EAAW,IAAIjzB,GAAmBtvW,EAAOg6W,cACzCuoB,EAASlwf,KAAO2tH,EAAO3tH,KACvB4me,EAAWjkf,SAAS5V,KAAKmjhB,GACzBA,EAAS75d,KAAOuwc,EACY,IAAxBj5W,EAAOg6W,aACPp/f,KAAKo6e,OAAO2sC,UAAU3ihB,IAAIujhB,EAASlwf,KAAMkwf,QAExC,GAA4B,IAAxBviY,EAAOg6W,cACRp/f,KAAKo6e,OAAO2sC,UAAUtgT,YAAYkhT,EAASlwf,MAAO,CAClD,IAAI82f,EAAgBvuhB,KAAKo6e,OAAO2sC,UAAUr/gB,IAAIighB,EAASlwf,MACvD82f,EAAc9shB,UAAYkmhB,EAC1BA,EAASlmhB,UAAY8shB,IAKrC1rC,EAAUI,aAAaz+e,KAAK65f,IAEhC/jB,EAAWj/e,UAAU2yhB,iBAAmB,SAAUQ,EAAc1+B,GAC5D9vf,KAAKyuhB,aAAaD,EAAav5P,QAAS66N,EAAY76N,SAC/Cx3R,EAAkB+whB,EAAa53P,eAChCk5N,EAAYl5N,YAAc43P,EAAa53P,aAEtCn5R,EAAkB+whB,EAAatjS,cAChC4kQ,EAAY5kQ,WAAasjS,EAAatjS,YAErCztP,EAAkB+whB,EAAarjS,aAChC2kQ,EAAY3kQ,UAAYqjS,EAAarjS,WAEpC1tP,EAAkB+whB,EAAapjS,eAChC0kQ,EAAY1kQ,YAAcojS,EAAapjS,aAEtC3tP,EAAkB+whB,EAAanjS,gBAChCykQ,EAAYzkQ,aAAemjS,EAAanjS,cAEvC5tP,EAAkB+whB,EAAavlC,cAChC6G,EAAY7G,WAAaulC,EAAavlC,YAE1Cjpf,KAAK0uhB,aAAaF,EAAat/B,QAASY,EAAYZ,SAC/Czxf,EAAkB+whB,EAAaz+B,kBAChCD,EAAYC,eAAiBy+B,EAAaz+B,gBAEzCtyf,EAAkB+whB,EAAax+B,kBAChCF,EAAYE,eAAiBw+B,EAAax+B,gBAEzCvyf,EAAkB+whB,EAAav+B,sBAChCH,EAAYG,mBAAqBu+B,EAAav+B,qBAGtD3V,EAAWj/e,UAAU+yhB,gBAAkB,SAAUI,EAAcl6B,GACtD72f,EAAkB+whB,KACnBxuhB,KAAKyuhB,aAAaD,EAAav5P,QAASq/N,EAAWr/N,SAC9Cu5P,EAAaG,sBAGd3uhB,KAAK4uhB,gBAAgBJ,EAAcl6B,GAElC72f,EAAkB+whB,EAAan5P,aAChCi/N,EAAWj/N,UAAYm5P,EAAan5P,WAEnC53R,EAAkB+whB,EAAar2P,cAChCm8N,EAAWn8N,WAAaq2P,EAAar2P,YAEpC16R,EAAkB+whB,EAAav3P,WAChCq9N,EAAWr9N,QAAUu3P,EAAav3P,SAEtCj3R,KAAK0uhB,aAAaF,EAAat/B,QAASoF,EAAWpF,SAC9Czxf,EAAkB+whB,EAAa96d,qBAChC4gc,EAAW5gc,kBAAoB86d,EAAa96d,mBAE3Cj2D,EAAkB+whB,EAAav+B,sBAChCqE,EAAWrE,mBAAqBu+B,EAAav+B,oBAE5Cxyf,EAAkB+whB,EAAax+B,kBAChCsE,EAAWtE,eAAiBw+B,EAAax+B,kBAIrD1V,EAAWj/e,UAAUuzhB,gBAAkB,SAAUJ,EAAcl6B,GACtD72f,EAAkB+whB,EAAatjS,cAChCopQ,EAAWppQ,WAAasjS,EAAatjS,YAEpCztP,EAAkB+whB,EAAapjS,eAChCkpQ,EAAWlpQ,YAAcojS,EAAapjS,aAErC3tP,EAAkB+whB,EAAarjS,aAChCmpQ,EAAWnpQ,UAAYqjS,EAAarjS,WAEnC1tP,EAAkB+whB,EAAanjS,gBAChCipQ,EAAWjpQ,aAAemjS,EAAanjS,eAG/CivP,EAAWj/e,UAAU6yhB,eAAiB,SAAUM,EAAcr4B,GACrD14f,EAAkB+whB,KACd/whB,EAAkB+whB,EAAa79B,yBAChCwF,EAAUxF,sBAAwB69B,EAAa79B,uBAE9Clzf,EAAkB+whB,EAAa1igB,YAChCqqe,EAAUrqe,SAAW0igB,EAAa1igB,UAEjCruB,EAAkB+whB,EAAal+B,cAChC6F,EAAU7F,WAAak+B,EAAal+B,YAEnC7yf,EAAkB+whB,EAAaz4gB,UAChCogf,EAAUpgf,OAASy4gB,EAAaz4gB,QAEpC/V,KAAKyuhB,aAAaD,EAAav5P,QAASkhO,EAAUlhO,WAG1DqlN,EAAWj/e,UAAUozhB,aAAe,SAAUI,EAAeC,GACpDrxhB,EAAkBoxhB,KACnB7uhB,KAAK+uhB,YAAYF,EAAcrihB,KAAMsihB,EAAWtihB,MAChDxM,KAAK+uhB,YAAYF,EAAcpihB,MAAOqihB,EAAWrihB,OACjDzM,KAAK+uhB,YAAYF,EAAcnihB,IAAKoihB,EAAWpihB,KAC/C1M,KAAK+uhB,YAAYF,EAAclihB,OAAQmihB,EAAWnihB,QAClD3M,KAAK+uhB,YAAYF,EAAcpga,SAAUqga,EAAWrga,UACpDzuH,KAAK+uhB,YAAYF,EAAcrga,WAAYsga,EAAWtga,YACtDxuH,KAAK+uhB,YAAYF,EAAcpgC,aAAcqgC,EAAWrgC,cACxDzuf,KAAK+uhB,YAAYF,EAAcngC,WAAYogC,EAAWpgC,cAG9DpU,EAAWj/e,UAAU0zhB,YAAc,SAAUC,EAAcF,GAClDrxhB,EAAkBuxhB,KACdvxhB,EAAkBuxhB,EAAax4f,SAChCs4f,EAAWt4f,MAAQx2B,KAAK47gB,SAASoT,EAAax4f,QAE7C/4B,EAAkBuxhB,EAAajuN,aAChC+tN,EAAW/tN,UAAYiuN,EAAajuN,WAEnCtjU,EAAkBuxhB,EAAa5hc,aAChC0hc,EAAW1hc,UAAY4hc,EAAa5hc,WAEnC3vF,EAAkBuxhB,EAAar0B,gBAChCm0B,EAAWn0B,aAAeq0B,EAAar0B,gBAInDrgB,EAAWj/e,UAAUqzhB,aAAe,SAAUO,EAAeC,GACpDzxhB,EAAkBwxhB,KACdxxhB,EAAkBwxhB,EAAct9d,mBACjCu9d,EAAYv9d,gBAAkB3xD,KAAK47gB,SAASqT,EAAct9d,kBAEzDl0D,EAAkBwxhB,EAAc9/B,mBACjC+/B,EAAY//B,gBAAkBnvf,KAAK47gB,SAASqT,EAAc9/B,kBAEzD1xf,EAAkBwxhB,EAAcE,WACjCD,EAAY9/B,aAAe6/B,EAAcE,WAIrD70C,EAAWj/e,UAAUgxhB,qBAAuB,SAAUmC,EAAcxwC,EAAiBqwC,GACjF,IAAK5whB,EAAkB+whB,GAAe,CAClC,GAAIH,GAAqBG,EAAa7nhB,eAAe,gBAEjD,YADA3G,KAAKqshB,qBAAqBmC,EAAaY,aAAcpxC,GAGpDvgf,EAAkB+whB,EAAankC,qBAChCrM,EAAgBqM,kBAAoBmkC,EAAankC,mBAEhD5sf,EAAkB+whB,EAAat5Q,aAChC8oO,EAAgB9oO,UAAYs5Q,EAAat5Q,WAExCz3Q,EAAkB+whB,EAAajkC,iBAChCvM,EAAgBuM,cAAgBikC,EAAajkC,eAE5C9sf,EAAkB+whB,EAAa3hgB,YAChCmxd,EAAgBnxd,SAAW2hgB,EAAa3hgB,UAEvCpvB,EAAkB+whB,EAAavhgB,cAChC+wd,EAAgB/wd,WAAauhgB,EAAavhgB,YAEzCxvB,EAAkB+whB,EAAa9/e,QAChCsvc,EAAgBtvc,KAAO8/e,EAAa9/e,MAEnCjxC,EAAkB+whB,EAAaj9e,UAChCysc,EAAgBzsc,OAASi9e,EAAaj9e,QAErC9zC,EAAkB+whB,EAAahkC,kBAChCxM,EAAgBwM,eAAiBgkC,EAAahkC,gBAE7C/sf,EAAkB+whB,EAAalkC,aAChCtM,EAAgBsM,UAAYtqf,KAAK47gB,SAAS4S,EAAalkC,cAInEhQ,EAAWj/e,UAAUughB,SAAW,SAAUplf,GAEtC,OADmBA,GACI,WAE3B8jd,EAAWj/e,UAAUixhB,qBAAuB,SAAUkC,EAAc5wC,GAC3Dngf,EAAkB+whB,KACd/whB,EAAkB+whB,EAAavlC,cAChCrL,EAAgBqL,WAAaulC,EAAavlC,YAEzCxrf,EAAkB+whB,EAAatlC,eAChCtL,EAAgBsL,YAAcslC,EAAatlC,aAE1Czrf,EAAkB+whB,EAAa5wS,mBAChCggQ,EAAgBhgQ,gBAAkB4wS,EAAa5wS,iBAE9CngP,EAAkB+whB,EAAaplC,gBAChCxL,EAAgBwL,aAAeolC,EAAaplC,cAE3C3rf,EAAkB+whB,EAAarlC,iBAChCvL,EAAgBuL,cAAgBqlC,EAAarlC,eAE5C1rf,EAAkB+whB,EAAaluS,eAChCs9P,EAAgBt9P,YAAckuS,EAAaluS,aAE1C7iP,EAAkB+whB,EAAanlC,mBAChCzL,EAAgByL,gBAAkBmlC,EAAanlC,iBAE9C5rf,EAAkB+whB,EAAa7tf,iBAChCi9c,EAAgBj9c,cAAgB6tf,EAAa7tf,eAE5CljC,EAAkB+whB,EAAallC,gBAChC1L,EAAgB0L,aAAeklC,EAAallC,cAEhD1L,EAAgBgG,WAAa,IAAI+C,GAC7B6nC,EAAa7nhB,eAAe,eAC5B3G,KAAKqvhB,gBAAgBb,EAAc5wC,EAAgBgG,YAEnD4qC,EAAa7nhB,eAAe,SAC5B3G,KAAKsvhB,aAAad,EAAaxmC,KAAMpK,EAAgBoK,QAIjE1N,EAAWj/e,UAAUg0hB,gBAAkB,SAAUr7B,EAAOpQ,GAC/Cnmf,EAAkBu2f,EAAMpQ,cACpBnmf,EAAkBu2f,EAAMpQ,WAAWsC,UACpCtC,EAAWsC,OAAS8N,EAAMpQ,WAAWsC,OACrCtC,EAAW/gZ,KAAO7iG,KAAKo6e,OAAO4wB,YAAYhX,EAAMpQ,WAAWsC,SAE1Dzof,EAAkBu2f,EAAMpQ,WAAWmD,mBACpCnD,EAAWmD,gBAAkBiN,EAAMpQ,WAAWmD,mBAI1DzM,EAAWj/e,UAAUkyhB,mBAAqB,SAAU/whB,EAAMmmf,GACjDllf,EAAkBjB,EAAKk/R,aACxBinN,EAAcjnN,UAAYl/R,EAAKk/R,WAE9Bj+R,EAAkBjB,EAAK8iP,cACxBqjQ,EAAcrjQ,WAAa9iP,EAAK8iP,YAE/B7hP,EAAkBjB,EAAK0uP,cACxBy3P,EAAcz3P,WAAa1uP,EAAK0uP,YAE/BztP,EAAkBjB,EAAK2uP,aACxBw3P,EAAcx3P,UAAY3uP,EAAK2uP,WAE9B1tP,EAAkBjB,EAAK4uP,eACxBu3P,EAAcv3P,YAAc5uP,EAAK4uP,aAEhC3tP,EAAkBjB,EAAK6uP,gBACxBs3P,EAAct3P,aAAe7uP,EAAK6uP,cAEjC5tP,EAAkBjB,EAAKushB,kBACxBpmC,EAAcomC,eAAiBvshB,EAAKushB,gBAEnCtrhB,EAAkBjB,EAAKyxgB,kBACxBtrB,EAAcsrB,eAAiBzxgB,EAAKyxgB,gBAEnCxwgB,EAAkBjB,EAAKoghB,sBACxBj6B,EAAci6B,mBAAqBpghB,EAAKoghB,oBAEvCn/gB,EAAkBjB,EAAKqghB,4BACxBl6B,EAAck6B,yBAA2BrghB,EAAKqghB,2BAGtDviC,EAAWj/e,UAAUi0hB,aAAe,SAAUC,EAAOvnC,GACjD,IAAK,IAAI7rf,EAAI,EAAGA,EAAIozhB,EAAM9yhB,OAAQN,IAAK,CACnC,IAAIqzhB,EAAU,IAAIhoC,GAClBgoC,EAAQt7gB,SAAWq7gB,EAAMpzhB,GAAG+X,SAC5Bs7gB,EAAQxwB,UAAYuwB,EAAMpzhB,GAAG6igB,UAC7BwwB,EAAQ3nC,eAAiB0nC,EAAMpzhB,GAAG0rf,eAClC2nC,EAAQ1nC,iBAAmBynC,EAAMpzhB,GAAG2rf,iBACpCE,EAAKxjf,KAAKgrhB,KAGXl1C,KCxuBPm1C,GAA0C,WAI1C,SAASA,EAAyB7/c,GAC9B5vE,KAAK0vhB,YAASv0hB,EACd6E,KAAK2vhB,cAAWx0hB,EAChB6E,KAAK4vhB,iBAAcz0hB,EACnB6E,KAAK6vhB,qBAAkB10hB,EACvB6E,KAAK8vhB,yBAAsB30hB,EAC3B6E,KAAK+vhB,sBAAmB50hB,EACxB6E,KAAKgwhB,WAAa,EAClBhwhB,KAAKiwhB,iBAAc90hB,EACnB6E,KAAK4vE,UAAYA,EAgUrB,OA9TAtxE,OAAOuJ,eAAe4nhB,EAAyBp0hB,UAAW,YAItDqM,IAAK,WACD,OAAO1H,KAAKgwhB,YAEhB3ohB,IAAK,SAAUrK,GACPA,IAAUgD,KAAKgwhB,aAGnBhwhB,KAAKgwhB,WAAahzhB,EAClBgD,KAAKkwhB,sBAAsB,cAE/BvohB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4nhB,EAAyBp0hB,UAAW,cAItDqM,IAAK,WACD,OAAO1H,KAAKmwhB,cAEhB9ohB,IAAK,SAAUrK,GACPA,IAAUgD,KAAKmwhB,eAGnBnwhB,KAAKmwhB,aAAenzhB,EACpBgD,KAAKkwhB,sBAAsB,gBAE/BvohB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4nhB,EAAyBp0hB,UAAW,aAItDqM,IAAK,WACD,OAAO1H,KAAKiwhB,aAEhB5ohB,IAAK,SAAUrK,GACPA,IAAUgD,KAAKiwhB,cAGnBjwhB,KAAKiwhB,YAAcjzhB,EACnBgD,KAAKkwhB,sBAAsB,eAE/BvohB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4nhB,EAAyBp0hB,UAAW,QAItDqM,IAAK,WACD,OAAO1H,KAAK0vhB,QAEhBrohB,IAAK,SAAUrK,GACPA,IAAUgD,KAAK0vhB,SAGnB1vhB,KAAK0vhB,OAAS1yhB,EACdgD,KAAKkwhB,sBAAsB,UAE/BvohB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4nhB,EAAyBp0hB,UAAW,UAItDqM,IAAK,WACD,OAAO1H,KAAK2vhB,UAEhBtohB,IAAK,SAAUrK,GACPA,IAAUgD,KAAKuxC,SAGnBvxC,KAAK2vhB,SAAW3yhB,EAChBgD,KAAKkwhB,sBAAsB,YAE/BvohB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4nhB,EAAyBp0hB,UAAW,iBAItDqM,IAAK,WACD,OAAO1H,KAAK6vhB,iBAEhBxohB,IAAK,SAAUrK,GACPA,IAAUgD,KAAK6vhB,kBAGnB7vhB,KAAK6vhB,gBAAkB7yhB,EACvBgD,KAAKkwhB,sBAAsB,mBAE/BvohB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4nhB,EAAyBp0hB,UAAW,qBAItDqM,IAAK,WACD,OAAO1H,KAAK8vhB,qBAEhBzohB,IAAK,SAAUrK,GACPA,IAAUgD,KAAK8vhB,sBAGnB9vhB,KAAK8vhB,oBAAsB9yhB,EAC3BgD,KAAKkwhB,sBAAsB,uBAE/BvohB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4nhB,EAAyBp0hB,UAAW,aAItDqM,IAAK,WACD,OAAO1H,KAAK4vhB,aAEhBvohB,IAAK,SAAUrK,GACPA,IAAUgD,KAAK4vhB,cAGnB5vhB,KAAK4vhB,YAAc5yhB,EACnBgD,KAAKkwhB,sBAAsB,eAE/BvohB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe4nhB,EAAyBp0hB,UAAW,kBAItDqM,IAAK,WACD,OAAO1H,KAAK+vhB,kBAEhB1ohB,IAAK,SAAUrK,GACPA,IAAUgD,KAAK+vhB,mBAGnB/vhB,KAAK+vhB,iBAAmB/yhB,EACxBgD,KAAKkwhB,sBAAsB,oBAE/BvohB,YAAY,EACZC,cAAc,IAElB6nhB,EAAyBp0hB,UAAU+R,iBAAmB,SAAU4e,GAC5D,OAAQA,GACJ,IAAK,OACD,OAAOhsB,KAAK0uC,KAChB,IAAK,SACD,OAAO1uC,KAAKuxC,OAChB,IAAK,WACD,GAAIvxC,KAAK6sB,UAAY,EACjB,OAAO7sB,KAAK6sB,SAEhB,OACJ,IAAK,aACD,OAAO7sB,KAAKitB,WAChB,IAAK,gBACD,OAAOjtB,KAAKuqf,cAChB,IAAK,oBACD,OAAOvqf,KAAKqqf,kBAChB,IAAK,iBACD,OAAOrqf,KAAKwqf,eAChB,IAAK,YACD,OAAOxqf,KAAKk1Q,UAChB,IAAK,YACD,OAAOl1Q,KAAKsqf,UAChB,QACI,SAOZmlC,EAAyBp0hB,UAAU60hB,sBAAwB,SAAUlmhB,GAEjE,IAAKvM,EAAkBuC,KAAK4vE,aAAe5vE,KAAK4vE,UAAUwgd,YAAapwhB,KAAK4vE,UAAU0/a,MAAMzR,gBAAmB79e,KAAK4vE,UAAU0/a,MAAM7U,mBAAoBz6e,KAAK4vE,UAAU0/a,MAAM5jB,kBAAsB1re,KAAK4vE,UAAUygd,wBAG7M5yhB,EAAkBuC,KAAK4vE,aAAenyE,EAAkBuC,KAAK4vE,UAAUryE,SAAWyC,KAAK4vE,UAAUygd,qBAAsB,CACxH,IAAIC,EAAgBtwhB,KAAKoN,iBAAiBpD,GACrCvM,EAAkB6yhB,IACnBtwhB,KAAK4vE,UAAU0/a,MAAM5U,aAAa61C,uBAAuBvmhB,EAAcsmhB,KAUnFb,EAAyBp0hB,UAAUmqf,WAAa,SAAUxpd,GACtDh8B,KAAK+rf,UAAatuf,EAAkBu+B,EAAOwtd,eAA6C,yBAA5Bxtd,EAAOwtd,cAAc/xd,KACjFz3B,KAAK6sB,SAAWmP,EAAOnP,SACvB7sB,KAAKitB,WAAa+O,EAAO/O,WACzBjtB,KAAK0uC,KAAO1S,EAAO0S,KACnB1uC,KAAKuxC,OAASvV,EAAOuV,OACrBvxC,KAAKqqf,kBAAoBrud,EAAOqud,kBAChCrqf,KAAKk1Q,UAAYl5O,EAAOk5O,UACxBl1Q,KAAKsqf,UAAYtud,EAAOsud,UACxBtqf,KAAKwqf,eAAiBxud,EAAOwud,eAC7Bxqf,KAAKuqf,cAAgBvud,EAAOuud,eAOhCklC,EAAyBp0hB,UAAUm1hB,cAAgB,SAAUx0f,GACpDv+B,EAAkBuC,KAAK0uC,OAAS1uC,KAAK0uC,OAAS1S,EAAO0S,OACtD1uC,KAAK0uC,UAAOvzC,GAEXsC,EAAkBuC,KAAKuxC,SAAWvxC,KAAKuxC,SAAWvV,EAAOuV,SAC1DvxC,KAAKuxC,YAASp2C,GAEI,IAAlB6E,KAAK6sB,UAAkB7sB,KAAK6sB,WAAamP,EAAOnP,WAChD7sB,KAAK6sB,SAAW,GAEfpvB,EAAkBuC,KAAKitB,aAAejtB,KAAKitB,aAAe+O,EAAO/O,aAClEjtB,KAAKitB,gBAAa9xB,GAEjBsC,EAAkBuC,KAAKwqf,iBAAmBxqf,KAAKwqf,iBAAmBxud,EAAOwud,iBAC1Exqf,KAAKwqf,oBAAiBrvf,GAErBsC,EAAkBuC,KAAKqqf,oBAAsBrqf,KAAKqqf,oBAAsBrud,EAAOqud,oBAChFrqf,KAAKqqf,uBAAoBlvf,GAExBsC,EAAkBuC,KAAKsqf,YAAetqf,KAAKsqf,YAActud,EAAOsud,YACjEtqf,KAAKsqf,eAAYnvf,GAEhBsC,EAAkBuC,KAAKk1Q,YAAcl1Q,KAAKk1Q,YAAcl5O,EAAOk5O,YAChEl1Q,KAAKk1Q,eAAY/5Q,GAEhBsC,EAAkBuC,KAAKuqf,gBAAkBvqf,KAAKuqf,gBAAkBvud,EAAOuud,gBACxEvqf,KAAKuqf,mBAAgBpvf,IAS7Bs0hB,EAAyBp0hB,UAAUuqf,YAAc,SAAU6qC,GACvDzwhB,KAAK0uC,KAAO+hf,EAAyB/hf,KACrC1uC,KAAKuxC,OAASk/e,EAAyBl/e,OACvCvxC,KAAKk1Q,UAAYu7Q,EAAyBv7Q,UAC1Cl1Q,KAAKuqf,cAAgBkmC,EAAyBlmC,cAC9Cvqf,KAAKqqf,kBAAoBomC,EAAyBpmC,kBAClDrqf,KAAKwqf,eAAiBimC,EAAyBjmC,eAC/Cxqf,KAAK6sB,SAAW4jgB,EAAyB5jgB,SACzC7sB,KAAKitB,WAAawjgB,EAAyBxjgB,WAC3CjtB,KAAKsqf,UAAYmmC,EAAyBnmC,UAC1Ctqf,KAAK+rf,UAAY0kC,EAAyB1kC,WAQ9C0jC,EAAyBp0hB,UAAU+uf,cAAgB,SAAUpud,GACzD,OAAQh8B,KAAK6sB,WAAamP,EAAOnP,UAC1B7sB,KAAKuqf,gBAAkBvud,EAAOuud,eAC9Bvqf,KAAK0uC,OAAS1S,EAAO0S,MACrB1uC,KAAKitB,aAAe+O,EAAO/O,YAC3BjtB,KAAKk1Q,YAAcl5O,EAAOk5O,WAC1Bl1Q,KAAKwqf,iBAAmBxud,EAAOwud,gBAC/Bxqf,KAAKuxC,SAAWvV,EAAOuV,QACvBvxC,KAAKqqf,oBAAsBrud,EAAOqud,mBAClCrqf,KAAKsqf,YAActud,EAAOsud,WAOrCmlC,EAAyBp0hB,UAAUgsf,YAAc,WAC7Crnf,KAAKgwhB,WAAa,EAClBhwhB,KAAK0vhB,YAASv0hB,EACd6E,KAAK2vhB,cAAWx0hB,EAChB6E,KAAKmwhB,kBAAeh1hB,EACpB6E,KAAKiwhB,iBAAc90hB,EACnB6E,KAAK4vhB,iBAAcz0hB,EACnB6E,KAAK6vhB,qBAAkB10hB,EACvB6E,KAAK+vhB,sBAAmB50hB,EACxB6E,KAAK8vhB,yBAAsB30hB,EAC3B6E,KAAK+rf,eAAY5wf,GAOrBs0hB,EAAyBp0hB,UAAUiX,QAAU,WACzCtS,KAAKgwhB,gBAAa70hB,EAClB6E,KAAK0vhB,YAASv0hB,EACd6E,KAAK2vhB,cAAWx0hB,EAChB6E,KAAKmwhB,kBAAeh1hB,EACpB6E,KAAKiwhB,iBAAc90hB,EACnB6E,KAAK4vhB,iBAAcz0hB,EACnB6E,KAAK6vhB,qBAAkB10hB,EACvB6E,KAAK8vhB,yBAAsB30hB,EAC3B6E,KAAK+vhB,sBAAmB50hB,EACxB6E,KAAK4vE,eAAYz0E,EACjB6E,KAAK+rf,eAAY5wf,GAEds0hB,KAMPiB,GAA0C,WAI1C,SAASA,EAAyB9gd,EAAWwqa,GAEzCp6e,KAAK2whB,aAAe,EACpB3whB,KAAK4whB,cAAgB,EACrB5whB,KAAK6whB,gBAAkB,EACvB7whB,KAAK8whB,eAAiB,EACtB9whB,KAAK+whB,qBAAkB51hB,EACvB6E,KAAKgxhB,kBAAoB,EACzBhxhB,KAAKixhB,cAAgB,EACrBjxhB,KAAKkxhB,uBAAoB/1hB,EACzB6E,KAAKmxhB,mBAAqB,EAC1BnxhB,KAAK4vE,UAAYA,EACjB5vE,KAAKo6e,OAASA,EAmdlB,OAjdA97e,OAAOuJ,eAAe6ohB,EAAyBr1hB,UAAW,cAKtDqM,IAAK,WACD,OAAO1H,KAAK2whB,cAEhBtphB,IAAK,SAAUrK,GACPA,IAAUgD,KAAK2whB,eAGnB3whB,KAAK2whB,aAAe3zhB,EACpBgD,KAAKkwhB,sBAAsB,gBAE/BvohB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe6ohB,EAAyBr1hB,UAAW,eAKtDqM,IAAK,WACD,OAAO1H,KAAK4whB,eAEhBvphB,IAAK,SAAUrK,GACPA,IAAUgD,KAAK4whB,gBAGnB5whB,KAAK4whB,cAAgB5zhB,EACrBgD,KAAKkwhB,sBAAsB,iBAE/BvohB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe6ohB,EAAyBr1hB,UAAW,mBAKtDqM,IAAK,WACD,OAAO1H,KAAKgxhB,mBAEhB3phB,IAAK,SAAUrK,GACPA,IAAUgD,KAAKgxhB,oBAGnBhxhB,KAAKgxhB,kBAAoBh0hB,EACzBgD,KAAKkwhB,sBAAsB,qBAE/BvohB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe6ohB,EAAyBr1hB,UAAW,iBAKtDqM,IAAK,WACD,OAAO1H,KAAK+whB,iBAEhB1phB,IAAK,SAAUrK,GACPA,IAAUgD,KAAK+whB,kBAGnB/whB,KAAK+whB,gBAAkB/zhB,EACvBgD,KAAKkwhB,sBAAsB,mBAE/BvohB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe6ohB,EAAyBr1hB,UAAW,gBAKtDqM,IAAK,WACD,OAAO1H,KAAK8whB,gBAEhBzphB,IAAK,SAAUrK,GACPA,IAAUgD,KAAK8whB,iBAGnB9whB,KAAK8whB,eAAiB9zhB,EACtBgD,KAAKkwhB,sBAAsB,kBAE/BvohB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe6ohB,EAAyBr1hB,UAAW,iBAKtDqM,IAAK,WACD,OAAO1H,KAAK6whB,iBAEhBxphB,IAAK,SAAUrK,GACPA,IAAUgD,KAAK6whB,kBAGnB7whB,KAAK6whB,gBAAkB7zhB,EACvBgD,KAAKkwhB,sBAAsB,mBAE/BvohB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe6ohB,EAAyBr1hB,UAAW,eAKtDqM,IAAK,WACD,OAAO1H,KAAKixhB,eAEhB5phB,IAAK,SAAUrK,GACPA,IAAUgD,KAAKixhB,gBAGnBjxhB,KAAKixhB,cAAgBj0hB,EACrBgD,KAAKkwhB,sBAAsB,iBAE/BvohB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe6ohB,EAAyBr1hB,UAAW,mBAKtDqM,IAAK,WACD,OAAO1H,KAAKkxhB,mBAEhB7phB,IAAK,SAAUrK,GACPA,IAAUgD,KAAKkxhB,oBAGnBlxhB,KAAKkxhB,kBAAoBl0hB,EACzBgD,KAAKkwhB,sBAAsB,qBAE/BvohB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe6ohB,EAAyBr1hB,UAAW,mBAKtDqM,IAAK,WACD,OAAO1H,KAAKmxhB,mBAEhB9phB,IAAK,SAAUrK,GACPA,IAAUgD,KAAKmxhB,oBAGnBnxhB,KAAKmxhB,kBAAoBn0hB,EACzBgD,KAAKkwhB,sBAAsB,qBAE/BvohB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe6ohB,EAAyBr1hB,UAAW,YAItDqM,IAAK,WACD,IAAIk8e,OAAazof,EACb0nG,EAAO7iG,KAAKo6e,OAAO4wB,YAAYhrgB,KAAKkmf,QACxC,GAAIrjZ,aAAgBojZ,IAASjmf,KAAKmxhB,mBAAqB,GAAKnxhB,KAAKmxhB,kBAAoB,EAAG,CACpF,IAAI7oC,EAAYzlZ,EAAK0jZ,aAAavmf,KAAK+mf,iBACvC,GAAIuB,aAAqBuc,GACrB,GAAmC,WAA/Bvc,EAAUgc,iBACV1gB,EAAa0E,EAAU0c,iBAEtB,CACDphB,EAAa0E,EAAU0c,aACvB,IAAK,IAAI7ogB,EAAI,EAAGA,EAAI,EAAGA,IAAK,CACxB,IAAIi1hB,EAAe,KAAOj1hB,EAAI,GAC9B,GAAIynf,EAAWrlf,QAAQ6yhB,IAAiB,EAAG,CACvC,IAAIj/X,EAAQh2J,IAAM6D,KAAKmxhB,kBAAoB7oC,EAAYzlZ,EAAK0jZ,aAAapqf,GACrEuygB,EAAW1ugB,KAAK4vE,UAAU0/a,MAAMlV,OAAOvpb,OAAO+9c,qBAAqBz8W,EAAO,GAC9EyxV,EAAaA,EAAWr0e,QAAQ6hhB,EAAc1iB,MAMlE,OAAO9qB,GAEXj8e,YAAY,EACZC,cAAc,IAElB8ohB,EAAyBr1hB,UAAU+R,iBAAmB,SAAU4e,GAC5D,OAAQA,GACJ,IAAK,aACD,OAAOhsB,KAAKipf,WAChB,IAAK,cACD,OAAOjpf,KAAKkpf,YAChB,IAAK,kBACD,OAAOlpf,KAAK49O,gBAChB,IAAK,gBACD,OAAO59O,KAAKmpf,cAChB,IAAK,eACD,OAAOnpf,KAAKopf,aAChB,IAAK,gBACD,OAAOppf,KAAK2gC,cAChB,IAAK,cACD,OAAO3gC,KAAKsgP,YAChB,IAAK,kBACD,OAAOtgP,KAAKqpf,gBAChB,QACI,SAOZqnC,EAAyBr1hB,UAAU60hB,sBAAwB,SAAUlmhB,GACjE,IAAKvM,EAAkBuC,KAAK4vE,aACvB5vE,KAAK4vE,UAAU0/a,MAAMzR,gBAAmB79e,KAAK4vE,UAAU0/a,MAAM7U,kBAC1Dz6e,KAAK4vE,UAAUygd,wBAGlB5yhB,EAAkBuC,KAAK4vE,aAAenyE,EAAkBuC,KAAK4vE,UAAUryE,SAAWyC,KAAK4vE,UAAUygd,qBAAsB,CACxH,IAAI31C,EAAe16e,KAAK4vE,UAAU0/a,MAAM5U,aACpC19e,EAAQgD,KAAKoN,iBAAiBpD,GAClC,KAAsB,eAAjBA,GAAkD,gBAAjBA,GAAmD,oBAAjBA,GAC/DhN,IAAU,MAAQA,EAAQ,MAC/B,OAEiB,oBAAjBgN,EACA0we,EAAa22C,oBAAoBrxhB,KAAKo6e,OAAO4wB,YAAYhrgB,KAAKkmf,QAASlmf,KAAK+mf,iBAG5ErM,EAAa42C,uBAAuBtnhB,EAAchN,EAAwB,kBAAjBgN,GAAiD,KAUtH0mhB,EAAyBr1hB,UAAUmqf,WAAa,SAAUxpd,GACtDh8B,KAAK+rf,UAAatuf,EAAkBu+B,EAAO2nd,WAAqC,SAAxB3nd,EAAO2nd,UAAUlsd,KACzEz3B,KAAKipf,WAAajtd,EAAOitd,WACzBjpf,KAAKkpf,YAAcltd,EAAOktd,YAC1Blpf,KAAK49O,gBAAkB5hN,EAAO4hN,gBAC9B59O,KAAKopf,aAAeptd,EAAOotd,aAC3Bppf,KAAKmpf,cAAgBntd,EAAOmtd,cAC5Bnpf,KAAKsgP,YAActkN,EAAOskN,YAC1BtgP,KAAKqpf,gBAAkBrtd,EAAOqtd,gBAC9Brpf,KAAK2gC,cAAgB3E,EAAO2E,cACvBljC,EAAkBu+B,EAAO4nd,aAAgBnmf,EAAkBu+B,EAAO4nd,WAAWsC,SAK9Elmf,KAAKkmf,YAAS/qf,EACd6E,KAAK+mf,gBAAkB,IALvB/mf,KAAKkmf,OAASlqd,EAAO4nd,WAAWsC,OAChClmf,KAAK+mf,gBAAkB/qd,EAAO4nd,WAAWmD,kBAYjD2pC,EAAyBr1hB,UAAUk2hB,aAAe,SAAUv1f,GACpDv+B,EAAkBu+B,KAGjBv+B,EAAkBuC,KAAKopf,gBACxBptd,EAAOotd,aAAeppf,KAAKopf,cAE1B3rf,EAAkBuC,KAAKmpf,iBACxBntd,EAAOmtd,cAAgBnpf,KAAKmpf,eAE3B1rf,EAAkBuC,KAAKipf,cACxBjtd,EAAOitd,WAAajpf,KAAKipf,YAExBxrf,EAAkBuC,KAAKkpf,eACxBltd,EAAOktd,YAAclpf,KAAKkpf,aAEzBzrf,EAAkBuC,KAAK2gC,iBACxB3E,EAAO2E,cAAgB3gC,KAAK2gC,eAE3BljC,EAAkBuC,KAAKsgP,eACxBtkN,EAAOskN,YAActgP,KAAKsgP,aAEzB7iP,EAAkBuC,KAAKqpf,mBACxBrtd,EAAOqtd,gBAAkBrpf,KAAKqpf,iBAE7B5rf,EAAkBuC,KAAK49O,mBACxB5hN,EAAO4hN,gBAAkB59O,KAAK49O,mBAQtC8yS,EAAyBr1hB,UAAUm1hB,cAAgB,SAAUx0f,GACpDv+B,EAAkBuC,KAAKipf,aAAejpf,KAAKipf,aAAejtd,EAAOitd,aAClEjpf,KAAKipf,gBAAa9tf,GAEjBsC,EAAkBuC,KAAKkpf,cAAgBlpf,KAAKkpf,cAAgBltd,EAAOktd,cACpElpf,KAAKkpf,iBAAc/tf,GAElBsC,EAAkBuC,KAAK49O,kBAAoB59O,KAAK49O,kBAAoB5hN,EAAO4hN,kBAC5E59O,KAAK49O,qBAAkBziP,GAEF,IAArB6E,KAAKsgP,aAAqBtgP,KAAKsgP,cAAgBtkN,EAAOskN,cACtDtgP,KAAKsgP,YAAc,IAEK,IAAxBtgP,KAAKmpf,eAAwBnpf,KAAKmpf,gBAAkBntd,EAAOmtd,gBAC3Dnpf,KAAKmpf,eAAiB,IAEC,IAAvBnpf,KAAKopf,cAAuBppf,KAAKopf,eAAiBptd,EAAOotd,eACzDppf,KAAKopf,cAAgB,GAEpB3rf,EAAkBuC,KAAKqpf,kBAAoBrpf,KAAKqpf,kBAAoBrtd,EAAOqtd,kBAC5Erpf,KAAKqpf,qBAAkBluf,GAEtBsC,EAAkBuC,KAAK2gC,gBAAkB3gC,KAAK2gC,gBAAkB3E,EAAO2E,gBACxE3gC,KAAK2gC,mBAAgBxlC,GAGrB6E,KAAK+mf,iBAAmB,IAAMtpf,EAAkBuC,KAAKkmf,UAAYzof,EAAkBu+B,EAAO4nd,aAAe5nd,EAAO4nd,WAAWmD,kBAAoB/mf,KAAK+mf,mBACpJ/mf,KAAK+mf,iBAAmB,IAGxBtpf,EAAkBu+B,EAAO4nd,aAAenmf,EAAkBu+B,EAAO4nd,WAAWsC,UAAazof,EAAkBuC,KAAKkmf,SAAWlmf,KAAKkmf,SAAWlqd,EAAO4nd,WAAWsC,UAC7Jlmf,KAAKkmf,YAAS/qf,IAQtBu1hB,EAAyBr1hB,UAAUgsf,YAAc,WAC7Crnf,KAAKipf,WAAa,EAClBjpf,KAAKkpf,YAAc,EACnBlpf,KAAKmpf,cAAgB,EACrBnpf,KAAKopf,aAAe,EACpBppf,KAAK49O,gBAAkB,EACvB59O,KAAKsgP,YAAc,EACnBtgP,KAAK2gC,mBAAgBxlC,EACrB6E,KAAKqpf,qBAAkBluf,EACvB6E,KAAKkmf,YAAS/qf,EACd6E,KAAK+mf,iBAAmB,EACxB/mf,KAAK+rf,eAAY5wf,GAOrBu1hB,EAAyBr1hB,UAAUm2hB,QAAU,WACzC,IAAI3ub,EAAO7iG,KAAKo6e,OAAO4wB,YAAYhrgB,KAAKkmf,QACxC,IAAKzof,EAAkBolG,GAAO,CAC1B,IAAI4ra,EAAU,IAAIxoB,GACdI,EAAe,IAAIse,GACnB8sB,EAAsBzxhB,KAAKo6e,OAAOm0B,oBAAoB1ra,EAAKujZ,gBAC3Dyc,EAAS7igB,KAAK4vE,UAAU0/a,MAAM5U,aAClC,GAAKj9e,EAAkBg0hB,GAQnBprC,EAAajna,OAAO56E,KAAK,IAAIqggB,GAAWxe,SAPxC,IAAK,IAAIlqf,EAAI,EAAGA,EAAIs1hB,EAAoBryc,OAAO3iF,OAAQN,IAAK,CACxD,IAAIg2J,EAAQ0wW,EAAO6uB,eAAeD,EAAoBryc,OAAOjjF,IAC7Dkqf,EAAajna,OAAO56E,KAAK2tJ,GACzBA,EAAM8yV,UAAYoB,EAM1B,IAAK5of,EAAkBolG,EAAKyjZ,gBACxB,IAASnqf,EAAI,EAAGA,EAAI0mG,EAAKyjZ,eAAe7pf,OAAQN,IAAK,CACjD,IAAIqqf,EAAgBqc,EAAO8uB,mBAAmB9ub,EAAKyjZ,eAAenqf,IAClEsygB,EAAQnoB,eAAe9hf,KAAKgif,GAMpC,OAHAioB,EAAQpoB,aAAeA,EACvBooB,EAAQroB,eAAiBC,EAAaD,eACtCqoB,EAAQtoB,aAAetjZ,EAAKqjZ,OACrBuoB,IASfiiB,EAAyBr1hB,UAAUu2hB,QAAU,SAAUnjB,GACnD,IAAIzugB,KAAKo6e,OAAOkV,MAAMzR,gBAAmB79e,KAAKo6e,OAAOkV,MAAM7U,iBAA3D,CAGA,IAAI53Y,EAAO7iG,KAAKo6e,OAAO4wB,YAAYhrgB,KAAKkmf,QACpC/+c,OAAahsC,EACbs2hB,EAAsBhjB,EAAUzugB,KAAKo6e,OAAOm0B,oBAAoBE,EAAQroB,qBAAkBjrf,EAC9F,GAAKsC,EAAkBolG,IAAUplG,EAAkBgxgB,IAC3ChxgB,EAAkBg0hB,IAAwBhjB,EAAQtoB,eAAiBtjZ,EAAKqjZ,OAyBtEzof,EAAkBgxgB,GAaxBzugB,KAAK4vE,UAAU0/a,MAAM5U,aAAam3C,iBAAY12hB,IAZ9C6E,KAAK4vE,UAAU0/a,MAAM7jB,iBAAkB,EAClChue,EAAkBg0hB,KAAoF,IAA5DzxhB,KAAKo6e,OAAO+F,cAAc5hf,QAAQkzhB,IAC7EzxhB,KAAKo6e,OAAO+F,cAAc37e,KAAKithB,IAES,IAAxCzxhB,KAAKo6e,OAAO99N,MAAM/9Q,QAAQkwgB,IAC1BzugB,KAAKo6e,OAAO99N,MAAM93Q,KAAKiqgB,GAG3BzugB,KAAK4vE,UAAU0/a,MAAM7jB,iBAAkB,EACvCzre,KAAK4vE,UAAU0/a,MAAM5U,aAAam3C,YAAYpjB,QAnCsC,CACpF,IAAIqjB,EAAY9xhB,KAAKo6e,OAAOkV,MAAM84B,cAClBpohB,KAAKo6e,OAAOvpb,OAAO01b,aAAa1jZ,EAAM,GACtD7iG,KAAK4vE,UAAU0/a,MAAM7jB,iBAAkB,EACvCzre,KAAKo6e,OAAOkV,MAAM5U,aAAaq3C,eAAe/xhB,KAAK4vE,WAC/Ckid,IACA3qf,EAAa2qf,EAAUE,2BAA2BP,EAAqB5ub,IAE3E7iG,KAAKo6e,OAAOkV,MAAM5U,aAAau3C,uBAC3BH,GACAA,EAAUI,iBAAiBlyhB,KAAK4vE,UAAWzoC,GAE/CnnC,KAAK4vE,UAAU0/a,MAAM7jB,iBAAkB,EACvCzre,KAAKo6e,OAAOk0B,cAAct+c,QAE1BhwD,KAAKo6e,OAAOkV,MAAM5U,aAAay3C,sBAC/BnyhB,KAAKo6e,OAAOkV,MAAM5U,aAAa03C,6BAA4B,GACvDN,GAAaA,EAAUO,yBACnBP,EAAUO,uBAAuBC,mBAAmB71hB,OAAS,GAC7Dq1hB,EAAUO,uBAAuBrgE,kBAErC8/D,EAAUS,iBAEdvyhB,KAAKo6e,OAAOkV,MAAM5U,aAAawC,uBAuBvCwzC,EAAyBr1hB,UAAUiX,QAAU,WACzCtS,KAAK2whB,kBAAex1hB,EACpB6E,KAAK4whB,mBAAgBz1hB,EACrB6E,KAAK6whB,qBAAkB11hB,EACvB6E,KAAK8whB,oBAAiB31hB,EACtB6E,KAAKgxhB,uBAAoB71hB,EACzB6E,KAAKixhB,mBAAgB91hB,EACrB6E,KAAK+whB,qBAAkB51hB,EACvB6E,KAAKkxhB,uBAAoB/1hB,EACzB6E,KAAKkmf,YAAS/qf,EACd6E,KAAKmxhB,uBAAoBh2hB,EACzB6E,KAAKo6e,YAASj/e,EACd6E,KAAK4vE,eAAYz0E,EACjB6E,KAAK+rf,eAAY5wf,GAEdu1hB,KAMP8B,GAAwC,WAIxC,SAASA,EAAuB5id,GAC5B5vE,KAAKyyhB,0BAAuBt3hB,EAC5B6E,KAAK0yhB,gCAA6Bv3hB,EAClC6E,KAAK4vE,UAAYA,EAwSrB,OAtSAtxE,OAAOuJ,eAAe2qhB,EAAuBn3hB,UAAW,cAIpDqM,IAAK,WACD,OAAO1H,KAAK2yhB,cAEhBtrhB,IAAK,SAAUrK,GACXgD,KAAK2yhB,aAAe31hB,EACpBgD,KAAKkwhB,sBAAsB,eAE/BvohB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe2qhB,EAAuBn3hB,UAAW,aAIpDqM,IAAK,WACD,OAAO1H,KAAK4yhB,aAEhBvrhB,IAAK,SAAUrK,GACXgD,KAAK4yhB,YAAc51hB,EACnBgD,KAAKkwhB,sBAAsB,cAE/BvohB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe2qhB,EAAuBn3hB,UAAW,cAIpDqM,IAAK,WACD,OAAO1H,KAAK6yhB,cAEhBxrhB,IAAK,SAAUrK,GACXgD,KAAK6yhB,aAAe71hB,EACpBgD,KAAKkwhB,sBAAsB,eAE/BvohB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe2qhB,EAAuBn3hB,UAAW,gBAIpDqM,IAAK,WACD,OAAO1H,KAAK8yhB,gBAEhBzrhB,IAAK,SAAUrK,GACXgD,KAAK8yhB,eAAiB91hB,EACtBgD,KAAKkwhB,sBAAsB,iBAE/BvohB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe2qhB,EAAuBn3hB,UAAW,aAIpDqM,IAAK,WACD,OAAO1H,KAAK+yhB,aAEhB1rhB,IAAK,SAAUrK,GACXgD,KAAK+yhB,YAAc/1hB,EACnBgD,KAAKkwhB,sBAAsB,cAE/BvohB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe2qhB,EAAuBn3hB,UAAW,eAIpDqM,IAAK,WACD,OAAO1H,KAAKgzhB,eAEhB3rhB,IAAK,SAAUrK,GACXgD,KAAKgzhB,cAAgBh2hB,EACrBgD,KAAKkwhB,sBAAsB,gBAE/BvohB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe2qhB,EAAuBn3hB,UAAW,kBAIpDqM,IAAK,WACD,OAAO1H,KAAKizhB,kBAEhB5rhB,IAAK,SAAUrK,GACXgD,KAAKizhB,iBAAmBj2hB,EACxBgD,KAAKkwhB,sBAAsB,mBAE/BvohB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe2qhB,EAAuBn3hB,UAAW,kBAIpDqM,IAAK,WACD,OAAO1H,KAAKkzhB,kBAEhB7rhB,IAAK,SAAUrK,GACXgD,KAAKkzhB,iBAAmBl2hB,EACxBgD,KAAKkwhB,sBAAsB,mBAE/BvohB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe2qhB,EAAuBn3hB,UAAW,sBAIpDqM,IAAK,WACD,OAAO1H,KAAKyyhB,sBAEhBprhB,IAAK,SAAUrK,GACXgD,KAAKyyhB,qBAAuBz1hB,EAC5BgD,KAAKkwhB,sBAAsB,uBAE/BvohB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe2qhB,EAAuBn3hB,UAAW,4BAIpDqM,IAAK,WACD,OAAO1H,KAAK0yhB,4BAEhBrrhB,IAAK,SAAUrK,GACXgD,KAAK0yhB,2BAA6B11hB,EAClCgD,KAAKkwhB,sBAAsB,6BAE/BvohB,YAAY,EACZC,cAAc,IAQlB4qhB,EAAuBn3hB,UAAUmqf,WAAa,SAAUxpd,GACpDh8B,KAAKs/O,WAAatjN,EAAOsjN,WACzBt/O,KAAK07R,UAAY1/P,EAAO0/P,UACxB17R,KAAKkrP,WAAalvN,EAAOkvN,WACzBlrP,KAAKmrP,UAAYnvN,EAAOmvN,UACxBnrP,KAAKorP,YAAcpvN,EAAOovN,YAC1BprP,KAAKqrP,aAAervN,EAAOqvN,aAC3BrrP,KAAK+ohB,eAAiB/sf,EAAO+sf,eAC7B/ohB,KAAKiugB,eAAiBjye,EAAOiye,eAC7BjugB,KAAK48gB,mBAAqB5gf,EAAO4gf,mBACjC58gB,KAAK68gB,yBAA2B7gf,EAAO6gf,0BAE3C2V,EAAuBn3hB,UAAU60hB,sBAAwB,SAAUlmhB,GAC/D,IAAI4lE,EAAY5vE,KAAK4vE,UACrB,IAAKnyE,EAAkBmyE,MAAeA,EAAUwgd,WAAaxgd,EAAU0/a,MAAM5jB,kBACtE97Z,EAAU0/a,MAAMzR,iBAAmBjua,EAAU0/a,MAAM7U,kBAClD7qa,EAAUygd,wBAGb5yhB,EAAkBmyE,KAAenyE,EAAkBmyE,EAAUryE,SAAWqyE,EAAUygd,qBAAsB,CACzG,IAAIrzhB,EAAQgD,KAAKmzhB,iBAAiBnphB,GAC7BvM,EAAkBT,IACnB4yE,EAAU0/a,MAAM5U,aAAa04C,qBAAqBpphB,EAAchN,KAI5Ew1hB,EAAuBn3hB,UAAU83hB,iBAAmB,SAAUnphB,GAC1D,OAAQA,GACJ,IAAK,aACD,GAAIhK,KAAKs/O,WAAa,EAClB,OAAOt/O,KAAKs/O,WAEhB,OACJ,IAAK,YACD,GAAIt/O,KAAK07R,UAAY,EACjB,OAAO17R,KAAK07R,UAEhB,OACJ,IAAK,aACD,GAAI17R,KAAKkrP,YAAc,EACnB,OAAOlrP,KAAKkrP,WAEhB,OACJ,IAAK,cACD,GAAIlrP,KAAKorP,aAAe,EACpB,OAAOprP,KAAKorP,YAEhB,OACJ,IAAK,YACD,GAAIprP,KAAKmrP,WAAa,EAClB,OAAOnrP,KAAKmrP,UAEhB,OACJ,IAAK,eACD,GAAInrP,KAAKqrP,cAAgB,EACrB,OAAOrrP,KAAKqrP,aAEhB,OACJ,IAAK,qBACD,IAAK5tP,EAAkBuC,KAAK48gB,oBACxB,OAAO58gB,KAAK48gB,mBAEhB,OACJ,IAAK,2BACD,IAAKn/gB,EAAkBuC,KAAK68gB,0BACxB,OAAO78gB,KAAK68gB,yBAEhB,OACJ,IAAK,iBACD,OAAO78gB,KAAKizhB,iBAChB,IAAK,iBACD,OAAOjzhB,KAAKiugB,eAChB,QACI,SAQZukB,EAAuBn3hB,UAAUm1hB,cAAgB,SAAUx0f,GACnDh8B,KAAKs/O,WAAa,GAAKt/O,KAAKs/O,aAAetjN,EAAOsjN,aAClDt/O,KAAKs/O,WAAa,GAElBt/O,KAAK07R,UAAY,GAAK17R,KAAK07R,YAAc1/P,EAAO0/P,YAChD17R,KAAK07R,UAAY,GAEjB17R,KAAKkrP,YAAc,GAAKlrP,KAAKkrP,aAAelvN,EAAOkvN,aACnDlrP,KAAKkrP,YAAc,GAEnBlrP,KAAKmrP,WAAa,GAAKnrP,KAAKmrP,YAAcnvN,EAAOmvN,YACjDnrP,KAAKmrP,WAAa,GAElBnrP,KAAKorP,aAAe,GAAKprP,KAAKorP,cAAgBpvN,EAAOovN,cACrDprP,KAAKorP,aAAe,GAEpBprP,KAAKqrP,cAAgB,GAAKrrP,KAAKqrP,eAAiBrvN,EAAOqvN,eACvDrrP,KAAKqrP,cAAgB,GAEG,IAAxBrrP,KAAK+ohB,gBAAwB/ohB,KAAK+ohB,iBAAmB/sf,EAAO+sf,iBAC5D/ohB,KAAK+ohB,eAAiB,GAEE,IAAxB/ohB,KAAKiugB,gBAAwBjugB,KAAKiugB,iBAAmBjye,EAAOiye,iBAC5DjugB,KAAKiugB,eAAiB,GAErBxwgB,EAAkBuC,KAAK48gB,qBAAuB58gB,KAAK48gB,qBAAuB5gf,EAAO4gf,qBAClF58gB,KAAK48gB,wBAAqBzhhB,GAEzBsC,EAAkBuC,KAAK68gB,2BAA6B78gB,KAAK68gB,2BAA6B7gf,EAAO6gf,2BAC9F78gB,KAAK68gB,8BAA2B1hhB,IAQxCq3hB,EAAuBn3hB,UAAUgsf,YAAc,WAC3Crnf,KAAK+ohB,eAAiB,EACtB/ohB,KAAKiugB,eAAiB,EACtBjugB,KAAKs/O,WAAa,EAClBt/O,KAAK07R,UAAY,EACjB17R,KAAKkrP,YAAc,EACnBlrP,KAAKorP,aAAe,EACpBprP,KAAKmrP,WAAa,EAClBnrP,KAAKqrP,cAAgB,EACrBrrP,KAAK48gB,wBAAqBzhhB,EAC1B6E,KAAK68gB,8BAA2B1hhB,GAOpCq3hB,EAAuBn3hB,UAAUiX,QAAU,WACvCtS,KAAKizhB,sBAAmB93hB,EACxB6E,KAAKkzhB,sBAAmB/3hB,EACxB6E,KAAK2yhB,kBAAex3hB,EACpB6E,KAAK4yhB,iBAAcz3hB,EACnB6E,KAAK6yhB,kBAAe13hB,EACpB6E,KAAKgzhB,mBAAgB73hB,EACrB6E,KAAK+yhB,iBAAc53hB,EACnB6E,KAAK8yhB,oBAAiB33hB,EACtB6E,KAAKyyhB,0BAAuBt3hB,EAC5B6E,KAAK0yhB,gCAA6Bv3hB,EAClC6E,KAAK4vE,eAAYz0E,GAEdq3hB,KAMPa,GAAsC,WAItC,SAASA,EAAqBzjd,GAC1B5vE,KAAK2whB,aAAe,EACpB3whB,KAAKszhB,kBAAen4hB,EACpB6E,KAAKuzhB,sBAAmBp4hB,EACxB6E,KAAKwzhB,cAAgB,EACrBxzhB,KAAK6yhB,aAAe,EACpB7yhB,KAAKgzhB,cAAgB,EACrBhzhB,KAAK+yhB,YAAc,EACnB/yhB,KAAK8yhB,eAAiB,EACtB9yhB,KAAKyzhB,iBAAmB,EACxBzzhB,KAAK4vE,UAAYA,EAqSrB,OAnSAtxE,OAAOuJ,eAAewrhB,EAAqBh4hB,UAAW,SAKlDqM,IAAK,WACD,OAAO1H,KAAK0zhB,SAEhBrshB,IAAK,SAAUrK,GACXgD,KAAK0zhB,QAAU12hB,GAEnB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAewrhB,EAAqBh4hB,UAAW,cAKlDqM,IAAK,WACD,OAAO1H,KAAK2whB,cAEhBtphB,IAAK,SAAUrK,GACPA,IAAUgD,KAAK2whB,eAGnB3whB,KAAK2whB,aAAe3zhB,EACpBgD,KAAKkwhB,sBAAsB,gBAE/BvohB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAewrhB,EAAqBh4hB,UAAW,aAKlDqM,IAAK,WACD,OAAO1H,KAAK+yhB,aAEhB1rhB,IAAK,SAAUrK,GACPA,IAAUgD,KAAK+yhB,cAGnB/yhB,KAAK+yhB,YAAc/1hB,EACnBgD,KAAKkwhB,sBAAsB,eAE/BvohB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAewrhB,EAAqBh4hB,UAAW,cAKlDqM,IAAK,WACD,OAAO1H,KAAKszhB,cAEhBjshB,IAAK,SAAUrK,GACPA,IAAUgD,KAAKszhB,eAGnBtzhB,KAAKszhB,aAAet2hB,EACpBgD,KAAKkwhB,sBAAsB,gBAE/BvohB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAewrhB,EAAqBh4hB,UAAW,kBAKlDqM,IAAK,WACD,OAAO1H,KAAKuzhB,kBAEhBlshB,IAAK,SAAUrK,GACPA,IAAUgD,KAAKuzhB,mBAGnBvzhB,KAAKuzhB,iBAAmBv2hB,EACxBgD,KAAKkwhB,sBAAsB,oBAE/BvohB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAewrhB,EAAqBh4hB,UAAW,cAKlDqM,IAAK,WACD,OAAO1H,KAAK6yhB,cAEhBxrhB,IAAK,SAAUrK,GACPA,IAAUgD,KAAK6yhB,eAGnB7yhB,KAAK6yhB,aAAe71hB,EACpBgD,KAAKkwhB,sBAAsB,gBAE/BvohB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAewrhB,EAAqBh4hB,UAAW,gBAKlDqM,IAAK,WACD,OAAO1H,KAAK8yhB,gBAEhBzrhB,IAAK,SAAUrK,GACPA,IAAUgD,KAAK8yhB,iBAGnB9yhB,KAAK8yhB,eAAiB91hB,EACtBgD,KAAKkwhB,sBAAsB,kBAE/BvohB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAewrhB,EAAqBh4hB,UAAW,eAKlDqM,IAAK,WACD,OAAO1H,KAAKwzhB,eAEhBnshB,IAAK,SAAUrK,GACPA,IAAUgD,KAAKwzhB,gBAGnBxzhB,KAAKwzhB,cAAgBx2hB,EACrBgD,KAAKkwhB,sBAAsB,iBAE/BvohB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAewrhB,EAAqBh4hB,UAAW,eAKlDqM,IAAK,WACD,OAAO1H,KAAKgzhB,eAEhB3rhB,IAAK,SAAUrK,GACPA,IAAUgD,KAAKgzhB,gBAGnBhzhB,KAAKgzhB,cAAgBh2hB,EACrBgD,KAAKkwhB,sBAAsB,iBAE/BvohB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAewrhB,EAAqBh4hB,UAAW,kBAKlDqM,IAAK,WACD,OAAO1H,KAAKyzhB,kBAEhBpshB,IAAK,SAAUrK,GACPA,IAAUgD,KAAKyzhB,mBAGnBzzhB,KAAKyzhB,iBAAmBz2hB,EACxBgD,KAAKkwhB,sBAAsB,oBAE/BvohB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAewrhB,EAAqBh4hB,UAAW,sBAKlDqM,IAAK,WACD,OAAO1H,KAAK2zhB,sBAEhBtshB,IAAK,SAAUrK,GACPA,IAAUgD,KAAK2zhB,uBAGnB3zhB,KAAK2zhB,qBAAuB32hB,EAC5BgD,KAAKkwhB,sBAAsB,wBAE/BvohB,YAAY,EACZC,cAAc,IAElByrhB,EAAqBh4hB,UAAU+R,iBAAmB,SAAUpD,GACxD,OAAQA,GACJ,IAAK,iBACD,OAAOhK,KAAK+vf,eAChB,IAAK,aACD,OAAO/vf,KAAKipf,WAChB,IAAK,cACD,OAAOjpf,KAAK42R,YAChB,IAAK,aACD,OAAO52R,KAAKkrP,WAChB,IAAK,cACD,OAAOlrP,KAAKorP,YAChB,IAAK,YACD,OAAOprP,KAAKmrP,UAChB,IAAK,eACD,OAAOnrP,KAAKqrP,aAChB,IAAK,aACD,IAAI6jQ,EAAU,IAAIN,GAElB,OADAM,EAAQv9b,gBAAkB3xD,KAAKyvB,WACxBy/d,EACX,IAAK,iBACD,OAAOlvf,KAAKgwf,eAChB,IAAK,qBACD,OAAOhwf,KAAKiwf,mBAChB,QACI,SAGZojC,EAAqBh4hB,UAAU60hB,sBAAwB,SAAUlmhB,GAC7D,IAAKvM,EAAkBuC,KAAK4vE,aAAe5vE,KAAK4vE,UAAUwgd,WAClDpwhB,KAAK4vE,UAAU0/a,MAAM7U,mBAAoBz6e,KAAK4vE,UAAU0/a,MAAMzR,iBAC/D79e,KAAK4vE,UAAU0/a,MAAM5jB,kBAAsB1re,KAAK4vE,UAAUygd,wBAG5D5yhB,EAAkBuC,KAAK4vE,aAAenyE,EAAkBuC,KAAK4vE,UAAUryE,SAAWyC,KAAK4vE,UAAUygd,qBAAsB,CACxH,IAAIrzhB,EAAQgD,KAAKoN,iBAAiBpD,GACb,eAAjBA,IACAA,EAAe,WAEdvM,EAAkBT,IACnBgD,KAAK4vE,UAAU0/a,MAAM5U,aAAak5C,mBAAmB5phB,EAAchN,KAU/Eq2hB,EAAqBh4hB,UAAUmqf,WAAa,SAAUxpd,GAClDh8B,KAAKipf,WAAajtd,EAAOitd,WACzBjpf,KAAKyvB,WAAauM,EAAOkzd,QAAQv9b,gBACjC3xD,KAAK+vf,eAAiB/zd,EAAO+zd,eAC7B/vf,KAAKkrP,WAAalvN,EAAOkvN,WACzBlrP,KAAKorP,YAAcpvN,EAAOovN,YAC1BprP,KAAKmrP,UAAYnvN,EAAOmvN,UACxBnrP,KAAKqrP,aAAervN,EAAOqvN,aAC3BrrP,KAAK42R,YAAc56P,EAAO46P,YAC1B52R,KAAKgwf,eAAiBh0d,EAAOg0d,eAC7Bhwf,KAAKiwf,mBAAqBj0d,EAAOi0d,oBAOrCojC,EAAqBh4hB,UAAUgsf,YAAc,WACzCrnf,KAAKigE,WAAQ9kE,EACb6E,KAAKipf,WAAa,EAClBjpf,KAAKyvB,gBAAat0B,EAClB6E,KAAKipf,WAAa,EAClBjpf,KAAKkrP,WAAa,EAClBlrP,KAAKorP,YAAc,EACnBprP,KAAKmrP,UAAY,EACjBnrP,KAAKqrP,aAAe,EACpBrrP,KAAK42R,YAAc,EACnB52R,KAAK+vf,oBAAiB50f,GAO1Bk4hB,EAAqBh4hB,UAAUiX,QAAU,WACrCtS,KAAK2whB,kBAAex1hB,EACpB6E,KAAKszhB,kBAAen4hB,EACpB6E,KAAK2whB,kBAAex1hB,EACpB6E,KAAK6yhB,kBAAe13hB,EACpB6E,KAAKgzhB,mBAAgB73hB,EACrB6E,KAAK+yhB,iBAAc53hB,EACnB6E,KAAK8yhB,oBAAiB33hB,EACtB6E,KAAKwzhB,mBAAgBr4hB,EACrB6E,KAAKuzhB,sBAAmBp4hB,EACxB6E,KAAK0zhB,aAAUv4hB,EACf6E,KAAK4vE,eAAYz0E,GAEdk4hB,KAMPQ,GAAqC,WAIrC,SAASA,EAAoBjkd,GACzB5vE,KAAK8zhB,yBAAsB34hB,EAC3B6E,KAAK6yhB,aAAe,EACpB7yhB,KAAKgzhB,cAAgB,EACrBhzhB,KAAK+yhB,YAAc,EACnB/yhB,KAAK8yhB,eAAiB,EACtB9yhB,KAAKszhB,kBAAen4hB,EACpB6E,KAAK2zhB,0BAAuBx4hB,EAC5B6E,KAAK4vE,UAAYA,EAuRrB,OArRAtxE,OAAOuJ,eAAegshB,EAAoBx4hB,UAAW,qBAKjDqM,IAAK,WACD,OAAO1H,KAAK8zhB,qBAEhBzshB,IAAK,SAAUrK,GACPA,IAAUgD,KAAK8zhB,sBAGnB9zhB,KAAK8zhB,oBAAsB92hB,EAC3BgD,KAAKkwhB,sBAAsB,uBAE/BvohB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAegshB,EAAoBx4hB,UAAW,cAMjDqM,IAAK,WACD,OAAO1H,KAAK6yhB,cAEhBxrhB,IAAK,SAAUrK,GACPA,IAAUgD,KAAK6yhB,eAGnB7yhB,KAAK6yhB,aAAe71hB,EACpBgD,KAAKkwhB,sBAAsB,gBAE/BvohB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAegshB,EAAoBx4hB,UAAW,eAKjDqM,IAAK,WACD,OAAO1H,KAAKgzhB,eAEhB3rhB,IAAK,SAAUrK,GACPA,IAAUgD,KAAKgzhB,gBAGnBhzhB,KAAKgzhB,cAAgBh2hB,EACrBgD,KAAKkwhB,sBAAsB,iBAE/BvohB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAegshB,EAAoBx4hB,UAAW,aAKjDqM,IAAK,WACD,OAAO1H,KAAK+yhB,aAEhB1rhB,IAAK,SAAUrK,GACPA,IAAUgD,KAAK+yhB,cAGnB/yhB,KAAK+yhB,YAAc/1hB,EACnBgD,KAAKkwhB,sBAAsB,eAE/BvohB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAegshB,EAAoBx4hB,UAAW,gBAKjDqM,IAAK,WACD,OAAO1H,KAAK8yhB,gBAEhBzrhB,IAAK,SAAUrK,GACPA,IAAUgD,KAAK8yhB,iBAGnB9yhB,KAAK8yhB,eAAiB91hB,EACtBgD,KAAKkwhB,sBAAsB,kBAE/BvohB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAegshB,EAAoBx4hB,UAAW,cAKjDqM,IAAK,WACD,OAAO1H,KAAKszhB,cAGhBjshB,IAAK,SAAUrK,GACPA,IAAUgD,KAAKszhB,eAGnBtzhB,KAAKszhB,aAAet2hB,EACpBgD,KAAKkwhB,sBAAsB,gBAE/BvohB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAegshB,EAAoBx4hB,UAAW,sBAMjDqM,IAAK,WACD,OAAO1H,KAAK2zhB,sBAEhBtshB,IAAK,SAAUrK,GACPA,IAAUgD,KAAK2zhB,uBAGnB3zhB,KAAK2zhB,qBAAuB32hB,EAC5BgD,KAAKkwhB,sBAAsB,wBAE/BvohB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAegshB,EAAoBx4hB,UAAW,kBAKjDqM,IAAK,WACD,OAAO1H,KAAKyzhB,kBAEhBpshB,IAAK,SAAUrK,GACPA,IAAUgD,KAAKyzhB,mBAGnBzzhB,KAAKyzhB,iBAAmBz2hB,EACxBgD,KAAKkwhB,sBAAsB,oBAE/BvohB,YAAY,EACZC,cAAc,IAGlBishB,EAAoBx4hB,UAAU60hB,sBAAwB,SAAUlmhB,GAC5D,IAAI4lE,EAAY5vE,KAAK4vE,UACrB,IAAKnyE,EAAkBmyE,GAAY,CAC/B,IAAKA,EAAUwgd,YAAcxgd,EAAU0/a,MAAM7U,kBACtC7qa,EAAU0/a,MAAMzR,gBAAkBjua,EAAU0/a,MAAM5jB,oBAAsB97Z,EAAUygd,qBACrF,OAEJ,IAAK5yhB,EAAkBuC,KAAK4vE,UAAUryE,SAAWyC,KAAK4vE,UAAUygd,qBAAsB,CAClF,IAAIrzhB,EAAQgD,KAAKoN,iBAAiBpD,GACb,eAAjBA,IACAA,EAAe,WAEdvM,EAAkBT,IACnBgD,KAAK4vE,UAAU0/a,MAAM5U,aAAaq5C,uBAAuB/phB,EAAchN,MAKvF62hB,EAAoBx4hB,UAAU+R,iBAAmB,SAAUpD,GACvD,OAAQA,GACJ,IAAK,oBACD,OAAOhK,KAAK0zD,kBAChB,IAAK,aACD,OAAO1zD,KAAKkrP,WAChB,IAAK,cACD,OAAOlrP,KAAKorP,YAChB,IAAK,YACD,OAAOprP,KAAKmrP,UAChB,IAAK,eACD,OAAOnrP,KAAKqrP,aAChB,IAAK,iBACD,OAAOrrP,KAAKgwf,eAChB,IAAK,qBACD,OAAOhwf,KAAKiwf,mBAChB,IAAK,aACD,IAAIf,EAAU,IAAIN,GAElB,OADAM,EAAQv9b,gBAAkB3xD,KAAKyvB,WACxBy/d,EACX,QACI,SASZ2kC,EAAoBx4hB,UAAUmqf,WAAa,SAAUxpd,GACjDh8B,KAAKkrP,WAAalvN,EAAOkvN,WACzBlrP,KAAKorP,YAAcpvN,EAAOovN,YAC1BprP,KAAKmrP,UAAYnvN,EAAOmvN,UACxBnrP,KAAKqrP,aAAervN,EAAOqvN,aAC3BrrP,KAAKyvB,WAAauM,EAAOkzd,QAAQv9b,gBACjC3xD,KAAK0zD,kBAAoB13B,EAAO03B,kBAChC1zD,KAAKgwf,eAAiBh0d,EAAOg0d,eAC7Bhwf,KAAKiwf,mBAAqBj0d,EAAOi0d,oBAOrC4jC,EAAoBx4hB,UAAU24hB,gBAAkB,WAC5Ch0hB,KAAKkrP,gBAAa/vP,EAClB6E,KAAKorP,iBAAcjwP,EACnB6E,KAAKmrP,eAAYhwP,EACjB6E,KAAKqrP,kBAAelwP,EACpB6E,KAAKyvB,gBAAat0B,EAClB6E,KAAK0zD,uBAAoBv4D,GAO7B04hB,EAAoBx4hB,UAAUm1hB,cAAgB,SAAUx0f,GAC/Cv+B,EAAkBuC,KAAKkrP,aAAelrP,KAAKkrP,aAAelvN,EAAOkvN,aAClElrP,KAAKkrP,gBAAa/vP,GAEjBsC,EAAkBuC,KAAKmrP,YAAcnrP,KAAKmrP,YAAcnvN,EAAOmvN,YAChEnrP,KAAKmrP,eAAYhwP,GAEhBsC,EAAkBuC,KAAKorP,cAAgBprP,KAAKorP,cAAgBpvN,EAAOovN,cACpEprP,KAAKorP,iBAAcjwP,GAElBsC,EAAkBuC,KAAKqrP,eAAiBrrP,KAAKqrP,eAAiBrvN,EAAOqvN,eACtErrP,KAAKqrP,kBAAelwP,GAEnBsC,EAAkBuC,KAAKyvB,aAAezvB,KAAKyvB,aAAeuM,EAAOkzd,QAAQv9b,kBAC1E3xD,KAAKyvB,gBAAat0B,GAEjBsC,EAAkBuC,KAAK0zD,oBAAsB1zD,KAAK0zD,oBAAsB13B,EAAO03B,oBAChF1zD,KAAK0zD,uBAAoBv4D,GAExBsC,EAAkBuC,KAAKgwf,iBAAmBhwf,KAAKgwf,iBAAmBh0d,EAAOg0d,iBAC1Ehwf,KAAKgwf,oBAAiB70f,GAErBsC,EAAkBuC,KAAKiwf,qBAAuBjwf,KAAKiwf,qBAAuBj0d,EAAOi0d,qBAClFjwf,KAAKiwf,wBAAqB90f,IAQlC04hB,EAAoBx4hB,UAAUgsf,YAAc,WACxCrnf,KAAKyvB,gBAAat0B,EAClB6E,KAAKqrP,aAAe,EACpBrrP,KAAKkrP,WAAa,EAClBlrP,KAAKorP,YAAc,EACnBprP,KAAKmrP,UAAY,EACjBnrP,KAAK0zD,uBAAoBv4D,GAO7B04hB,EAAoBx4hB,UAAUiX,QAAU,WACpCtS,KAAKszhB,kBAAen4hB,EACpB6E,KAAK8zhB,yBAAsB34hB,EAC3B6E,KAAK8yhB,oBAAiB33hB,EACtB6E,KAAK6yhB,kBAAe13hB,EACpB6E,KAAKgzhB,mBAAgB73hB,EACrB6E,KAAK+yhB,iBAAc53hB,EACnB6E,KAAK4vE,eAAYz0E,GAEd04hB,KAMPI,GAAoC,WAIpC,SAASA,EAAmBrkd,GACxB5vE,KAAKk0hB,cAAW/4hB,EAChB6E,KAAKm0hB,kBAAeh5hB,EACpB6E,KAAKo0hB,gBAAaj5hB,EAClB6E,KAAKq0hB,gCAA6Bl5hB,EAClC6E,KAAK4vE,UAAYA,EAsKrB,OApKAtxE,OAAOuJ,eAAeoshB,EAAmB54hB,UAAW,UAKhDqM,IAAK,WACD,OAAO1H,KAAKk0hB,UAEhB7shB,IAAK,SAAUrK,GACPA,IAAUgD,KAAKk0hB,WAGnBl0hB,KAAKk0hB,SAAWl3hB,EAChBgD,KAAKkwhB,sBAAsB,YAE/BvohB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeoshB,EAAmB54hB,UAAW,cAKhDqM,IAAK,WACD,OAAO1H,KAAKm0hB,cAEhB9shB,IAAK,SAAUrK,GACPA,IAAUgD,KAAKm0hB,eAGnBn0hB,KAAKm0hB,aAAen3hB,EACpBgD,KAAKkwhB,sBAAsB,gBAE/BvohB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeoshB,EAAmB54hB,UAAW,YAKhDqM,IAAK,WACD,OAAO1H,KAAKo0hB,YAEhB/shB,IAAK,SAAUrK,GACPA,IAAUgD,KAAKo0hB,aAGnBp0hB,KAAKo0hB,WAAap3hB,EAClBgD,KAAKkwhB,sBAAsB,cAE/BvohB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeoshB,EAAmB54hB,UAAW,yBAKhDqM,IAAK,WACD,OAAO1H,KAAKq0hB,4BAEhBhthB,IAAK,SAAUrK,GACPA,IAAUgD,KAAKq0hB,6BAGnBr0hB,KAAKq0hB,2BAA6Br3hB,EAClCgD,KAAKkwhB,sBAAsB,2BAE/BvohB,YAAY,EACZC,cAAc,IAElBqshB,EAAmB54hB,UAAU60hB,sBAAwB,SAAUlmhB,GAC3D,IAAI4lE,EAAY5vE,KAAK4vE,UACrB,IAAKnyE,EAAkBmyE,KAAeA,EAAUwgd,YAAaxgd,EAAU0/a,MAAMzR,gBACrEjua,EAAU0/a,MAAM7U,mBAAoB7qa,EAAU0/a,MAAM5jB,kBAAsB97Z,EAAUygd,wBAGvF5yhB,EAAkBmyE,KAAenyE,EAAkBmyE,EAAUryE,SAAWqyE,EAAUygd,qBAAsB,CACzG,IAAIrzhB,EAAQgD,KAAKoN,iBAAiBpD,GAC7BvM,EAAkBT,IACnB4yE,EAAU0/a,MAAM5U,aAAa45C,sBAAsBtqhB,EAAchN,KAI7Ei3hB,EAAmB54hB,UAAU+R,iBAAmB,SAAUpD,GACtD,OAAQA,GACJ,IAAK,SACD,OAAOhK,KAAK+V,OAChB,IAAK,aACD,OAAO/V,KAAKswf,WAChB,IAAK,WACD,OAAOtwf,KAAK8rB,SAChB,IAAK,wBACD,OAAO9rB,KAAK2wf,sBAChB,QACI,SASZsjC,EAAmB54hB,UAAUmqf,WAAa,SAAUxpd,GAChDh8B,KAAK+V,OAASimB,EAAOjmB,OACrB/V,KAAKswf,WAAat0d,EAAOs0d,WACzBtwf,KAAK2wf,sBAAwB30d,EAAO20d,sBACpC3wf,KAAK8rB,SAAWkQ,EAAOlQ,UAO3BmogB,EAAmB54hB,UAAUm1hB,cAAgB,SAAUx0f,GAC9Cv+B,EAAkBuC,KAAK+V,SAAW/V,KAAK+V,SAAWimB,EAAOjmB,SAC1D/V,KAAK+V,YAAS5a,GAEbsC,EAAkBuC,KAAKswf,aAAetwf,KAAKswf,aAAet0d,EAAOs0d,aAClEtwf,KAAKswf,gBAAan1f,GAEjBsC,EAAkBuC,KAAK2wf,wBAA0B3wf,KAAK2wf,wBAA0B30d,EAAO20d,wBACxF3wf,KAAK2wf,2BAAwBx1f,GAE5BsC,EAAkBuC,KAAK8rB,WAAa9rB,KAAK8rB,WAAakQ,EAAOlQ,WAC9D9rB,KAAK8rB,cAAW3wB,IAQxB84hB,EAAmB54hB,UAAUk5hB,eAAiB,WAC1Cv0hB,KAAK+V,YAAS5a,EACd6E,KAAKswf,gBAAan1f,EAClB6E,KAAK2wf,2BAAwBx1f,EAC7B6E,KAAK8rB,cAAW3wB,GAOpB84hB,EAAmB54hB,UAAUgsf,YAAc,WACvCrnf,KAAK+V,OAAS,EACd/V,KAAKswf,gBAAan1f,EAClB6E,KAAK2wf,2BAAwBx1f,EAC7B6E,KAAK8rB,cAAW3wB,GAOpB84hB,EAAmB54hB,UAAUiX,QAAU,WACnCtS,KAAKk0hB,cAAW/4hB,EAChB6E,KAAKm0hB,kBAAeh5hB,EACpB6E,KAAKq0hB,gCAA6Bl5hB,EAClC6E,KAAKo0hB,gBAAaj5hB,EAClB6E,KAAK4vE,eAAYz0E,GAEd84hB,KAMPO,GAAsC,WAItC,SAASA,EAAqB5kd,GAC1B5vE,KAAK4vE,UAAYA,EA2DrB,OAzDAtxE,OAAOuJ,eAAe2shB,EAAqBn5hB,UAAW,SAIlDqM,IAAK,WACD,OAAI1H,KAAKs1L,MACEt1L,KAAKs1L,MAAMt/K,MAEf,GAEXrO,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe2shB,EAAqBn5hB,UAAW,UAIlDqM,IAAK,WACD,OAAI1H,KAAKs1L,MACEt1L,KAAKs1L,MAAMv/K,OAEf,GAEXpO,YAAY,EACZC,cAAc,IAOlB4shB,EAAqBn5hB,UAAUyvS,OAAS,SAAU90R,EAAOD,GACrD/V,KAAKy0hB,kBAAkBz+gB,EAAOD,IAMlCy+gB,EAAqBn5hB,UAAUo5hB,kBAAoB,SAAUz+gB,EAAOD,GAC5D/V,KAAKs1L,OACDt1L,KAAK4vE,UAAU0/a,MAAM5U,cACrB16e,KAAK4vE,UAAU0/a,MAAM5U,aAAag6C,cAAc10hB,KAAKs1L,MAAOt/K,EAAOD,IAO/Ey+gB,EAAqBn5hB,UAAUs5hB,gBAAkB,SAAUr/V,GACvDt1L,KAAKs1L,MAAQA,GAKjBk/V,EAAqBn5hB,UAAUu5hB,iBAAmB,WAC9C50hB,KAAKs1L,WAAQn6L,GAEVq5hB,KC38DPK,GAA4B,WAC5B,SAASA,IAEL70hB,KAAKQ,cAAWrF,EAKhB6E,KAAK80hB,WAAa,EAgoBtB,OAznBAD,EAAWx5hB,UAAU05hB,UAAY,SAAUv0hB,GACvCR,KAAKQ,SAAWA,EAEhB,IAAK,IADDmsM,EAAO,GACFxwM,EAAI,EAAGA,EAAIqE,EAASwlP,SAASvpP,OAAQN,IAC1CwwM,EAAO3sM,KAAKg1hB,iBAAiBx0hB,EAASwlP,SAAS7pP,IAEnD,OAAOwwM,GAKXkoV,EAAWx5hB,UAAU25hB,iBAAmB,SAAUtiR,GAE9C,IAAK,IADDtoO,EAAS,GACJjuC,EAAI,EAAGA,EAAIu2Q,EAAQoB,OAAOr3Q,OAAQN,IAAK,CAC5C,IAAI63f,EAAQthP,EAAQoB,OAAO33Q,GACvB63f,EAAMrtf,eAAe,WACrByjC,GAAUpqC,KAAKi1hB,mBAAmBjhC,GAGlC5pd,GAAUpqC,KAAKk1hB,eAAelhC,GAGtC,OAAO5pd,GAMXyqf,EAAWx5hB,UAAU45hB,mBAAqB,SAAUpyC,GAChD,IAAIsyC,EAAa,GAGbC,KAWJ,OAVAA,EAAc5whB,KAAK,UAAYxE,KAAKq1hB,wBAAwBxyC,EAAW,IAF1D,GAEwE,KACrFsyC,GAAcn1hB,KAAKs1hB,oBAAoB,IAAKF,GACX,IAA7BvyC,EAAUgrC,QAAQpxhB,OAElB04hB,GAAc,SAGdA,EAAan1hB,KAAKu1hB,iBAAiB1yC,EAAWsyC,GAElDA,GAAcn1hB,KAAKw1hB,OAAO,MAO9BX,EAAWx5hB,UAAUk6hB,iBAAmB,SAAU1yC,EAAWsyC,GAGzD,IAFA,IAAI/vY,OAASjqJ,EACTgB,EAAI,EACD0mf,EAAUgrC,QAAQpxhB,OAASN,GAAG,CAEjC,IADAipJ,EAASy9V,EAAUgrC,QAAQ1xhB,IAChBwK,eAAe,eACtBwuhB,GAAcn1hB,KAAKy1hB,wBAAwBrwY,QAE1C,GAAIA,EAAOz+I,eAAe,aAC3B,GAAyB,IAArBy+I,EAAOmmW,UAAiB,CACxBvrf,KAAK80hB,WAAa,EAClB,IAAIM,KACJA,EAAc5whB,KAAK,UAAYxE,KAAK01hB,qBAAqBtwY,EAAO44V,gBAAiB,IAAM,KACvFm3C,GAAcn1hB,KAAKs1hB,oBAAoB,IAAKF,QAElB,IAArBhwY,EAAOmmW,UACZvrf,KAAK80hB,WAAa,GAGlBK,GAAcn1hB,KAAKw1hB,OAAO,KAC1Bx1hB,KAAK80hB,WAAa,OAGrB,CACD,IAAIrogB,EAAOhvB,EAAkB2nJ,EAAO34H,MAAQ,GAAK24H,EAAO34H,KAIxD,GAHwB,IAApBzsB,KAAK80hB,aACLK,GAAcn1hB,KAAK21hB,cAAclpgB,EAAM24H,EAAO44V,kBAE1B,IAApBh+e,KAAK80hB,WAAkB,CAEvBK,GAAc,WADE1ogB,EAAKld,QAAQ,IAAM,IACGA,QAAQ,YAAa,IAAIW,OAC/DilhB,GAAc,IACdA,GAAc,IAEM,IAApBn1hB,KAAK80hB,aACLK,GAAc1ogB,GAGtBtwB,IAEJ,OAAOg5hB,GAMXN,EAAWx5hB,UAAUs6hB,cAAgB,SAAU/qC,EAAU5M,GACrD,IAAI43C,EAAY,GAChB,IAAgC,IAA5BhrC,EAASrsf,QAAQ,MAEjB,OADAq3hB,GAAa,QACI1ohB,WAErB,IAAIkohB,KACJp1hB,KAAK01hB,qBAAqB13C,EAAiB,IAC3Co3C,EAAc5whB,KAAK,UAAYxE,KAAK01hB,qBAAqB13C,EAAiB,IAAM,KAChF43C,GAAa51hB,KAAKs1hB,oBAAoB,OAAQF,GAsB9C,OAFAQ,GADW51hB,KAAK61hB,gBAAgBjrC,EAAS19e,aAEzC0ohB,GAAa51hB,KAAKw1hB,OAAO,SACRtohB,YAMrB2nhB,EAAWx5hB,UAAUo6hB,wBAA0B,SAAUngW,GACrD,IAAIwgW,EAAa,GACbV,KACJp1hB,KAAK01hB,qBAAqBpgW,EAAM0oT,gBAAiB,IACjD,IAAI/7F,EAAc,GACbxkZ,EAAkB63L,EAAMulJ,eACzBonE,EAAc3sN,EAAMulJ,aAExB,IAAI7kU,EAAQ20e,GAAcO,oBAAoB51T,EAAMt/K,OAChDD,EAAS40e,GAAcO,oBAAoB51T,EAAMv/K,QAMrD,OALAq/gB,EAAc5whB,KAAK,UAAWwR,EAAM9I,WAAa,KACjDkohB,EAAc5whB,KAAK,WAAYuR,EAAO7I,WAAa,KACnDkohB,EAAc5whB,KAAK,QAASy9Y,EAAc,KAC1C6zI,GAAc91hB,KAAKs1hB,oBAAoB,MAAOF,IAC9CU,GAAe91hB,KAAKw1hB,OAAO,QACTtohB,YAMtB2nhB,EAAWx5hB,UAAU06hB,cAAgB,SAAU9yd,GAC3C,IAAIkyd,EAAa,GACbC,KACAY,EAAW,GACfZ,KACK33hB,EAAkBwlE,EAAKqxb,cAExB8gC,EAAc5whB,KAAK,YAAcy+D,EAAKqxb,WAAWpF,QAAQv9b,gBAAkB,KAEvEsR,EAAKqxb,WAAWn8N,WAAa,GAC7Bi9P,EAAc5whB,KAAK,YAAcy+D,EAAKqxb,WAAWn8N,WAAWjrR,WAAa,KAEzE+1D,EAAKqxb,WAAWr9N,QAAU,GAC1Bm+P,EAAc5whB,KAAK,YAAcy+D,EAAKqxb,WAAWr9N,QAAQ/pR,WAAa,KAExC,IAA9B+1D,EAAKqxb,WAAWj/N,WAChB+/P,EAAc5whB,KAAK,UAAYy+D,EAAKqxb,WAAWj/N,UAAUnoR,WAAa,KAEhC,QAAtC+1D,EAAKqxb,WAAW5gc,mBAChB0he,EAAc5whB,KAAK,WAAay+D,EAAKqxb,WAAW5gc,kBAAkBxmD,WAAW0I,cAAgB,KAE5FnY,EAAkBwlE,EAAKqxb,WAAWppQ,aAA8C,IAA/BjoL,EAAKqxb,WAAWppQ,aAClE8qS,GAAa,gBAAkB/yd,EAAKqxb,WAAWppQ,WAAWh+O,WAAa,OAEtEzP,EAAkBwlE,EAAKqxb,WAAWlpQ,cAAgD,IAAhCnoL,EAAKqxb,WAAWlpQ,cACnE4qS,GAAa,iBAAmB/yd,EAAKqxb,WAAWlpQ,YAAYl+O,WAAa,OAExEzP,EAAkBwlE,EAAKqxb,WAAWnpQ,YAA4C,IAA9BloL,EAAKqxb,WAAWnpQ,YACjE6qS,GAAa,eAAiB/yd,EAAKqxb,WAAWnpQ,UAAUj+O,WAAa,OAEpEzP,EAAkBwlE,EAAKqxb,WAAWjpQ,eAAkD,IAAjCpoL,EAAKqxb,WAAWjpQ,eACpE2qS,GAAa,kBAAoB/yd,EAAKqxb,WAAWjpQ,aAAan+O,WAAa,OAE1EzP,EAAkBwlE,EAAKqxb,WAAWr/N,WACnC+gQ,GAAYh2hB,KAAKi2hB,0BAA0Bhzd,EAAKqxb,WAAWr/N,WAG3C,IAApB+gQ,EAASv5hB,QACT24hB,EAAc5whB,KAAK,UAAYwxhB,EAAW,KAE9Cb,GAAen1hB,KAAKs1hB,oBAAoB,KAAMF,GAC9C,IAAK,IAAIjvgB,EAAI,EAAGA,EAAI88C,EAAK6wM,OAAOr3Q,OAAQ0pB,IAAK,CACzC,IAAI6te,EAAQ/wb,EAAK6wM,OAAO3tP,GACpB6te,EAAMrtf,eAAe,QACrBwuhB,GAAcn1hB,KAAKk1hB,eAAelhC,GAGlCmhC,GAAcn1hB,KAAKi1hB,mBAAmBjhC,GAI9C,OADAmhC,GAAen1hB,KAAKw1hB,OAAO,OAO/BX,EAAWx5hB,UAAU65hB,eAAiB,SAAUj1d,GAC5C,IAAI0sI,EAAO,GACXA,GAAQ3sM,KAAKk2hB,oBAAoBj2d,GACjC,IAAK,IAAI18C,EAAI,EAAGA,EAAI08C,EAAMs4N,KAAK97R,OAAQ8mB,IACnCopL,GAAQ3sM,KAAKm2hB,aAAal2d,EAAMs4N,KAAKh1Q,IAGzC,OADAopL,GAAQ3sM,KAAKo2hB,qBAOjBvB,EAAWx5hB,UAAU86hB,aAAe,SAAUz1d,GAC1C,IAAIisI,EAAO,GACXA,GAAQ3sM,KAAKq2hB,kBAAkB31d,GAC/B,IAAK,IAAIv6C,EAAI,EAAGA,EAAIu6C,EAAIoB,MAAMrlE,OAAQ0pB,IAClCwmL,GAAQ3sM,KAAK+1hB,cAAcr1d,EAAIoB,MAAM37C,IAEzC,OAAOwmL,GAMXkoV,EAAWx5hB,UAAUg6hB,wBAA0B,SAAUxyC,EAAWx/e,EAAWizhB,GAC3E,IAAIC,EAAiB,GAGrB,OAFAA,GAAkBv2hB,KAAKw2hB,yBAAyB3zC,EAAU7E,iBAC1Du4C,GAAkBv2hB,KAAKy2hB,yBAAyB5zC,EAAUjF,gBAAiB04C,IAM/EzB,EAAWx5hB,UAAUq6hB,qBAAuB,SAAU13C,EAAiB36e,GACnE,OAAOrD,KAAKw2hB,yBAAyBx4C,IAKzC62C,EAAWx5hB,UAAUq7hB,0BAA4B,SAAUzhQ,GACvD,IAAI6/G,EAAc,GAyBlB,OAxBAA,GAAgB,qBAAuB90Y,KAAK22hB,uBAAuB1hQ,EAAQzoR,KAAKu0T,WAChF+zE,GAAe,IACfA,GAAgB,qBAAuB7/G,EAAQzoR,KAAK4gF,UAAUlgF,WAAa,KAC3E4nY,GAAe,IACfA,GAAgB,qBAAuB7/G,EAAQzoR,KAAKgqB,MACpDs+W,GAAe,IACfA,GAAgB,sBAAwB90Y,KAAK22hB,uBAAuB1hQ,EAAQxoR,MAAMs0T,WAClF+zE,GAAe,IACfA,GAAgB,sBAAwB7/G,EAAQxoR,MAAM2gF,UAAUlgF,WAAa,KAC7E4nY,GAAe,IACfA,GAAgB,sBAAwB7/G,EAAQxoR,MAAM+pB,MACtDs+W,GAAe,IACfA,GAAgB,oBAAsB90Y,KAAK22hB,uBAAuB1hQ,EAAQvoR,IAAIq0T,WAC9E+zE,GAAe,IACfA,GAAgB,oBAAsB7/G,EAAQvoR,IAAI0gF,UAAUlgF,WAAa,KACzE4nY,GAAe,IACfA,GAAgB,oBAAsB7/G,EAAQvoR,IAAI8pB,MAClDs+W,GAAe,IACfA,GAAgB,uBAAyB90Y,KAAK22hB,uBAAuB1hQ,EAAQtoR,OAAOo0T,WACpF+zE,GAAe,IACfA,GAAgB,uBAAyB7/G,EAAQtoR,OAAOygF,UAAUlgF,WAAa,KAC/E4nY,GAAe,IACfA,GAAgB,uBAAyB7/G,EAAQtoR,OAAO6pB,MACxDs+W,GAAe,KAMnB+/I,EAAWx5hB,UAAU46hB,0BAA4B,SAAUhhQ,GAiCvD,MA/Bc,oBAAA,qBAoClB4/P,EAAWx5hB,UAAUu7hB,qBAAuB,SAAUtyf,EAAQuyf,GAC1D,IAAI/hJ,EAAc,GAQlB,OAPAA,GAAgB,UAAY+hJ,EAAiB,UAAY72hB,KAAK22hB,uBAAuBryf,EAAOy8R,WAC5F+zE,GAAe,IACXxwW,EAAO8oD,UAAY,IACnB0nT,GAAgB,UAAY+hJ,EAAiB,UAAYvyf,EAAO8oD,UAAUlgF,WAAa,OAG3F4nY,GAAgB,UAAY+hJ,EAAiB,UAAYvyf,EAAO9N,MAAQ,KAM5Eq+f,EAAWx5hB,UAAUs7hB,uBAAyB,SAAU51N,GACpD,OAAQA,GACJ,IAAK,OACD,MAAO,OACX,IAAK,SACD,MAAO,QACX,IAAK,MACD,MAAO,SACX,IAAK,eACL,IAAK,eACL,IAAK,UACL,IAAK,aACD,MAAO,SACX,IAAK,SACL,IAAK,SACL,IAAK,oBACL,IAAK,oBACL,IAAK,wBACL,IAAK,qBACL,IAAK,qBACL,IAAK,yBACL,IAAK,oBACL,IAAK,oBACL,IAAK,wBACD,MAAO,SACX,IAAK,aACD,MAAO,QACX,IAAK,aACD,MAAO,SACX,IAAK,iBACD,MAAO,QACX,IAAK,WACD,MAAO,QACX,IAAK,YACD,MAAO,SACX,IAAK,SACD,MAAO,SACX,IAAK,QACD,MAAO,QACX,QACI,MAAO,UAOnB8zN,EAAWx5hB,UAAUm7hB,yBAA2B,SAAUx4C,GACtD,IAAKvgf,EAAkBugf,EAAgBoxC,cACnC,OAAOpvhB,KAAKw2hB,yBAAyBx4C,EAAgBoxC,cAEzD,IAAIkB,EACA5jC,EAAY,GAmEhB,OAlEI1O,EAAgBtvc,OAChBg+c,GAAa,cACbA,GAAa,IACbA,GAAa,OACbA,GAAa,KAEjBA,GAAa,aACbA,GAAa,IACT1O,EAAgBzsc,OAChBm7c,GAAa,SAGbA,GAAa,SAEjBA,GAAa,IAEyB,iBAAlC1O,EAAgBuM,eAAsE,iBAAlCvM,EAAgBuM,gBACpEmC,GAAa,kBACbA,GAAa,IACbA,GAAa,eACbA,GAAa,KAIyB,gBAAtC1O,EAAgBqM,mBAA6E,cAAtCrM,EAAgBqM,oBACvEqC,GAAa,iBACbA,GAAa,IACbA,GAAmD,gBAAtC1O,EAAgBqM,kBAAsC,QAAU,MAC7EqC,GAAa,KAGZjvf,EAAkBugf,EAAgBwM,kBACnCkC,GAAa,mBACbA,GAAa,IACbA,GAAa1O,EAAgBwM,eAAet9e,WAC5Cw/e,GAAa,KAGjB4jC,EAAgBtyC,EAAgBsM,UAC3B7sf,EAAkB6yhB,KACnB5jC,GAAa,QACbA,GAAa,IACbA,GAAa4jC,EACb5jC,GAAa,KAEZjvf,EAAkBugf,EAAgB9oO,YAA4C,SAA9B8oO,EAAgB9oO,YACjEw3O,GAAa,kBACbA,GAAa,IACbA,GAAa,YACbA,GAAa,KAEjB4jC,EAAgBtyC,EAAgBnxd,SAC3BpvB,EAAkB6yhB,KACnB5jC,GAAa,YACbA,GAAa,IACbA,GAAa4jC,EAAcpjhB,WAC3Bw/e,GAAa,KACbA,GAAa,KAEjB4jC,EAAgBtyC,EAAgB/wd,WAC3BxvB,EAAkB6yhB,KACnB5jC,GAAa,cACbA,GAAa,IACbA,GAAa4jC,EAAcpjhB,WAC3Bw/e,GAAa,KAEVA,EAAUx/e,YAKrB2nhB,EAAWx5hB,UAAUo7hB,yBAA2B,SAAU74C,EAAiB04C,GACvE,IAAK74hB,EAAkBmgf,EAAgBwxC,cACnC,OAAOpvhB,KAAKy2hB,yBAAyB74C,EAAgBwxC,aAAckH,GAEvE,IAAIhG,EACA9jC,EAAY,GAmDhB,OAlDA8jC,EAAgB1yC,EAAgBj9c,cAC3BljC,EAAkB6yhB,KACnB9jC,GAAa,cAAgB8jC,EAAc16gB,cAAgB,KAE/D06gB,EAAgB1yC,EAAgBuL,cAC3B1rf,EAAkB6yhB,KACnB9jC,GAAa,cAAgB8jC,EAAcpjhB,WAAa,QAE5DojhB,EAAgB1yC,EAAgBsL,YAC3Bzrf,EAAkB6yhB,KACnB9jC,GAAa,gBAAkB8jC,EAAcpjhB,WAAa,QAE9DojhB,EAAgB1yC,EAAgBwL,aAC3B3rf,EAAkB6yhB,KACnB9jC,GAAa,iBAAmB8jC,EAAcpjhB,WAAa,QAE/DojhB,EAAgB1yC,EAAgBqL,WAC5BqtC,IACI74hB,EAAkB6yhB,GAClBA,GAAiB,GAGjBA,GAAiB,IAGpB7yhB,EAAkB6yhB,KACnB9jC,GAAa,eAAiB8jC,EAAcpjhB,WAAa,QAE7DojhB,EAAgB1yC,EAAgBhgQ,gBAC5B04S,IACI74hB,EAAkB6yhB,GAClBA,EAAgB,GAGhBA,GAAiB,IAGpB7yhB,EAAkB6yhB,IAAoC,IAAlBA,IACrC9jC,GAAa,eAAiB8jC,EAAcpjhB,WAAa,OAE7DojhB,EAAgB1yC,EAAgBt9P,YAC3B7iP,EAAkB6yhB,KAOnB9jC,GAAa,gBALT8jC,EADoC,aAApC1yC,EAAgByL,iBACiB,IAAhBinC,GAAqBpjhB,WAAa,KAGnCojhB,EAAcpjhB,WAAa,QAI5Cs/e,EAAUt/e,YAKrB2nhB,EAAWx5hB,UAAUi6hB,oBAAsB,SAAUwB,EAAUC,GAC3D,IAAIx3J,EAAK,GACTA,GAAM,IACNA,GAAMu3J,EACN,IAAK,IAAI36hB,EAAI,EAAGA,EAAI46hB,EAAgBt6hB,OAAQN,IACxCojY,GAAM,IACNA,GAAMw3J,EAAgB56hB,GAK1B,MAHiB,MAAb26hB,IACAv3J,GAAM,KAEHA,GAKXs1J,EAAWx5hB,UAAU27hB,UAAY,SAAUF,GACvC,IAAIpvf,EAAI,GAIR,OAHAA,GAAK,IACLA,GAAKovf,EACLpvf,GAAK,KAMTmtf,EAAWx5hB,UAAUm6hB,OAAS,SAAUsB,GACpC,IAAIv3J,EAAK,GAKT,OAJAA,GAAM,IACNA,GAAM,IACNA,GAAMu3J,EACNv3J,GAAM,KAMVs1J,EAAWx5hB,UAAU66hB,oBAAsB,SAAUj2d,GACjD,IAAIk1d,EAAa,GACb8B,EAAa,GACb7B,KAuBJ,OAtBAA,EAAc5whB,KAAK,cACd/G,EAAkBwiE,EAAM6vb,eAEzBslC,EAAc5whB,KAAK,YAAcy7D,EAAM6vb,YAAYZ,QAAQv9b,gBAAkB,KAExC,IAAjCsO,EAAM6vb,YAAY7G,YAClBmsC,EAAc5whB,KAAK,gBAAkBy7D,EAAM6vb,YAAY7G,WAAW/7e,WAAa,OAE/E+yD,EAAM6vb,YAAYl5N,YAAc,EAChCw+P,EAAc5whB,KAAK,iBAAqD,GAAhCy7D,EAAM6vb,YAAYl5N,YAAoB,GAAM,GAAG1pR,WAAa,KAGpG+phB,+BAEJ7B,EAAc5whB,KAAK,mBACd/G,EAAkBwiE,EAAM6vb,YAAY76N,WACrCgiQ,GAAcj3hB,KAAK02hB,0BAA0Bz2d,EAAM6vb,YAAY76N,WAG7C,IAAtBgiQ,EAAWx6hB,QACX24hB,EAAc5whB,KAAK,UAAWyyhB,EAAW/phB,WAAa,KAEnDiohB,GAAen1hB,KAAKs1hB,oBAAoB,QAASF,IAK5DP,EAAWx5hB,UAAU+6hB,kBAAoB,WACrC,IAAIjB,EAAa,GAEjB,OADAA,GAAen1hB,KAAKw1hB,OAAO,UAM/BX,EAAWx5hB,UAAUg7hB,kBAAoB,SAAU31d,GAC/C,IAAIy0d,EAAa,GACbC,KAOJ,OANI10d,EAAIy1b,UAAUrqe,WACdqpgB,GAAen1hB,KAAKg3hB,UAAU,UAE9Bt2d,EAAIy1b,UAAUpgf,OAAS,GACvBq/gB,EAAc5whB,KAAK,WAAak8D,EAAIy1b,UAAUpgf,OAAS,KAEpDo/gB,EAAan1hB,KAAKs1hB,oBAAoB,KAAMF,IAKvDP,EAAWx5hB,UAAU67hB,gBAAkB,SAAUx2d,GAC7C,IAAIy0d,EAAa,GAKjB,OAJAA,GAAen1hB,KAAKw1hB,OAAO,MACvB90d,EAAIy1b,UAAUrqe,WACdqpgB,GAAen1hB,KAAKw1hB,OAAO,UAExBL,GAKXN,EAAWx5hB,UAAUw6hB,gBAAkB,SAAUppgB,GAC7C,GAAa,OAATA,EACA,MAAO,SAEX,IAAI0/e,EAAe1/e,EAAKvvB,MAAM,KAC1Bi6hB,EAAW,GACf,GAAIhrB,EAAa1vgB,OAAS,EAAG,CACzB06hB,EAAWhrB,EAAa,GACxB,IAAK,IAAIhwgB,EAAI,EAAGA,EAAIgwgB,EAAa1vgB,OAAS,EAAGN,IACzCg7hB,GAAY,SAAWhrB,EAAahwgB,EAAI,GAGhD,OAAOg7hB,GAEJtC,KCtoBPuC,GAA8B,WAC9B,SAASA,EAAa9nC,GAIlBtvf,KAAK0tB,SAAW,IAAIwsB,GAAM,EAAG,GAI7Bl6C,KAAKq3hB,kBAAmB,EACxBr3hB,KAAKsvf,MAAQA,EACbtvf,KAAKo6e,OAASp6e,KAAKsvf,MAAMlV,OA89D7B,OA59DA97e,OAAOuJ,eAAeuvhB,EAAa/7hB,UAAW,aAI1CqM,IAAK,WACD,OAAO1H,KAAK62gB,cAAch0B,WAE9Bl7e,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeuvhB,EAAa/7hB,UAAW,sBAI1CqM,IAAK,WACD,OAAO1H,KAAK2L,SAAW3L,KAAKsvf,MAAM1/a,UAAU0nd,eAAet3hB,KAAK6if,YAEpEl7e,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeuvhB,EAAa/7hB,UAAW,aAI1CqM,IAAK,WACD,OAAO1H,KAAKsvf,MAAM1/a,WAEtBjoE,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeuvhB,EAAa/7hB,UAAW,wBAK1CqM,IAAK,WACD,OAAO1H,KAAKu3hB,gCAEhB5vhB,YAAY,EACZC,cAAc,IAMlBwvhB,EAAa/7hB,UAAUgE,MAAQ,WAC3B,IAAIi/X,EAAe,IAAI84J,EAAap3hB,KAAKsvf,OAIzC,OAHAhxH,EAAau4I,cAAgB72gB,KAAK62gB,cAClCv4I,EAAa3yX,OAAS3L,KAAK2L,OAC3B2yX,EAAa5wW,SAAW1tB,KAAK0tB,SACtB4wW,GAMX84J,EAAa/7hB,UAAUm8hB,wBAA0B,SAAU1pe,EAAM9sD,EAASiR,EAAOwlhB,GAE7E,IAAI5qB,GAAiB,EACjBpvgB,EAAkBuD,GAClBhB,KAAK62gB,cAAgB/od,GAGrB9tD,KAAK62gB,cAAgB71gB,EAAQ8sD,KACzB9sD,EAAQ2wT,oBAAoB25L,IAAmBr5e,EAAQjR,EAAQvE,SAC/DowgB,EAAiB7sgB,KAAK4vE,UAAU8nd,qBAAqB12hB,EAASA,EAAQvE,UAG9EuD,KAAK0tB,SAAW+pgB,EAEZz3hB,KAAK2L,OADLkhgB,EACc7sgB,KAAK4vE,UAAU+nd,mBAAmB33hB,KAAK62gB,cAAch0B,WAAa,EAGlE7if,KAAK62gB,cAAcnne,UAAU1uC,EAASiR,IAO5DmlhB,EAAa/7hB,UAAUu8hB,oBAAsB,SAAU9pe,EAAMniD,EAAQ+hB,GACjE1tB,KAAK62gB,cAAgB/od,EACrB9tD,KAAK2L,OAASA,EACV+hB,aAAoBwsB,IACpBl6C,KAAK0tB,SAASnuB,KAAKmuB,IAO3B0pgB,EAAa/7hB,UAAUwd,YAAc,SAAUi1C,EAAM+pe,GACjD73hB,KAAK62gB,cAAgB/od,EACrB9tD,KAAK2L,OAASkshB,EAAkB73hB,KAAK4vE,UAAU0nd,eAAexpe,EAAK+0b,WAC7D7if,KAAK4vE,UAAU+nd,mBAAmB7pe,EAAK+0b,WAAa,EAC1D7if,KAAK83hB,wBAAuB,IAMhCV,EAAa/7hB,UAAU08hB,oBAAsB,SAAUz5J,GACnDt+X,KAAK62gB,cAAgBv4I,EAAau4I,cAClC72gB,KAAK2L,OAAS2yX,EAAa3yX,OAC3B3L,KAAK0tB,SAAW4wW,EAAa5wW,UAMjC0pgB,EAAa/7hB,UAAU28hB,2BAA6B,SAAUzkC,GAC1D,IAAIthf,GAAUA,MAAOshf,GACjB1Q,EAAY7if,KAAKi4hB,mBAAmBhmhB,GACxCjS,KAAK2L,OAAS6P,WAAWvJ,EAAMA,OAC/BjS,KAAKk4hB,qBAAqBr1C,EAAW7if,KAAK2L,SAK9CyrhB,EAAa/7hB,UAAU4nR,QAAU,SAAU/uQ,GACvC,IACIjC,EAAQiC,EAASjC,MAAM1T,QAAQ,KAC/B+I,EAAW,IAOf,OANI2K,GAAS,IACT3K,EAAW4M,EAASjC,MAAMiS,UAAU,EAAGjS,GACvCiC,EAASjC,MAAQiC,EAASjC,MAAMiS,UAAUjS,GAAO1C,QAAQ,IAAK,KAElE0C,EAAQ8iB,SAASztB,EAAU,IACpBtH,KAAKo6e,OAAOlvQ,MAAMj5N,IAM7BmlhB,EAAa/7hB,UAAU48hB,mBAAqB,SAAU/jhB,GAClD,IAAIzW,EAAkByW,EAASjC,OAA/B,CAGA,IAAIg+I,EAAOjwJ,KAAKijR,QAAQ/uQ,GAExB,OADYlU,KAAKqkhB,mBAAclphB,EAAW+Y,EAAU+7I,KAMxDmnY,EAAa/7hB,UAAUgphB,cAAgB,SAAU1yB,EAAQz9e,EAAU+7I,GAC/D,IAAIxyJ,EAAkByW,EAASjC,OAA/B,CAGA,IAAIA,EAAQiC,EAASjC,MAAM1T,QAAQ,KAC/BvB,EAAQ,IA4BZ,GA3BIiV,GAAS,IACTjV,EAAQkX,EAASjC,MAAMiS,UAAU,EAAGjS,GACpCiC,EAASjC,MAAQiC,EAASjC,MAAMiS,UAAUjS,GAAO1C,QAAQ,IAAK,KAEpD,MAAVvS,GAA2B,MAAVA,EAEb20f,EADU,MAAV30f,EACSizJ,EAAK4jW,aAGL5jW,EAAK6jW,aAGZr2f,EAAkBwyJ,KACxB0hW,EAAS1hW,EAAKyhW,YAAY,IAE9Bz/e,EAAQ8iB,SAAS/3B,EAAO,IACpB20f,aAAkByB,KAClBnhf,EAAQiC,EAASjC,MAAM1T,QAAQ,KAC/BvB,EAAQ,IACRA,EAAQkX,EAASjC,MAAMiS,UAAU,EAAGjS,GACpCiC,EAASjC,MAAQiC,EAASjC,MAAMiS,UAAUjS,GAAO1C,QAAQ,IAAK,IAC9D0C,EAAQ8iB,SAAS/3B,EAAO,KAExB20f,aAAkBM,IAAkBhgf,GAAS0/e,EAAO1O,aAAaxmf,SACjEyX,EAASjC,MAAQ,MACjBA,EAAQ0/e,EAAO1O,aAAaxmf,OAAS,GAErCwV,GAAS,GAAKA,EAAQ0/e,EAAO1O,aAAaxmf,OAAQ,CAClD,IAAI4D,EAAQsxf,EAAO1O,aAAahxe,GAChC,GAAI5R,aAAiB8yf,GAIjB,OAHIj/e,EAASjC,MAAM1T,QAAQ,KAAO,IAC9B2V,EAASjC,MAAQ,KAEd5R,EAEX,GAAIA,aAAiBoxf,GAAQ,CACzB,GAAIv9e,EAASjC,MAAM1T,QAAQ,KAAO,EAC9B,OAAOyB,KAAKqkhB,cAAchkhB,EAAO6T,GAIjC,GAAI7T,aAAiB0yf,GACjB,OAAO/yf,KAAKqkhB,cAAcrkhB,KAAK4vE,UAAUmnc,6BAA6B12gB,GAAQ6T,GAE7E,GAAI7T,aAAiB4xf,KAAmD,IAAjC/9e,EAASjC,MAAM1T,QAAQ,KAC/D,OAAOyB,KAAK4vE,UAAUmnc,6BAA6B12gB,EAAM4zf,YAAYhR,aAAa,GAEtF,aAIP,GAAI0O,EAAOW,8BAA8Bb,GAE1C,OADAv9e,EAASjC,MAAQ,IACb0/e,EAAOW,8BAA8BS,GAC9B/yf,KAAK4vE,UAAUmnc,6BAA6BplB,EAAOW,oBAAoB11e,WAE3E5c,KAAKqkhB,cAAc1yB,EAAOW,mBAAoBp+e,KAQ7DkjhB,EAAa/7hB,UAAUy8hB,uBAAyB,SAAUK,GAClDn4hB,KAAK62gB,eAAiB72gB,KAAKsvf,MAAM7jB,iBAAmBzre,KAAKq3hB,mBACzDr3hB,KAAK0tB,SAAW1tB,KAAK4vE,UAAUwod,4BAA4Bp4hB,KAAK62gB,cAAe72gB,KAAK2L,OAAQwshB,KAOpGf,EAAa/7hB,UAAUg9hB,iBAAmB,SAAU/5J,GAChD,OAAOt+X,KAAK62gB,gBAAkBv4I,EAAau4I,eACpC72gB,KAAK2L,SAAW2yX,EAAa3yX,QAMxCyrhB,EAAa/7hB,UAAUi9hB,kBAAoB,SAAUh6J,GACjD,GAAI7gY,EAAkB6gY,GAClB,MAAM,IAAI19X,MAAM,8BAEpB,OAAOZ,KAAK6if,YAAcvkH,EAAaukH,WAM3Cu0C,EAAa/7hB,UAAUk9hB,cAAgB,SAAUj6J,GAC7C,GAAI7gY,EAAkB6gY,GAClB,MAAM,IAAI19X,MAAM,8BAEpB,GAAIZ,KAAK62gB,gBAAkBv4I,EAAau4I,cACpC,OAAO72gB,KAAK2L,OAAS2yX,EAAa3yX,OAEtC,IAAI2sgB,EAAmBt4gB,KAAK62gB,cAAch0B,UACtCA,EAAYvkH,EAAau4I,cAAch0B,UAC3C,OAAIy1B,IAAqBz1B,EACdy1B,EAAiBr1B,aAAa1kf,QAAQyB,KAAK62gB,eAAiBh0B,EAAUI,aAAa1kf,QAAQ+/X,EAAau4I,eAE/GyB,EAAiBp1B,kBAAoBL,EAAUK,gBAC3Co1B,EAAiBlkB,cACVkkB,EAAiBjkB,eAAepR,aAAa1kf,QAAQ+5gB,GACxDz1B,EAAUwR,eAAepR,aAAa1kf,QAAQskf,GAO1Cy1B,EAAiBp1B,gBAAgBD,aAAa1kf,QAAQ+5gB,GACzDz1B,EAAUK,gBAAgBD,aAAa1kf,QAAQskf,GAGrD7if,KAAKsvf,MAAM1/a,UAAU2od,cAAcjgB,EAAkBz1B,IAMhEu0C,EAAa/7hB,UAAUm9hB,aAAe,SAAUl6J,GAC5C,GAAI7gY,EAAkB6gY,GAClB,MAAM,IAAI19X,MAAM,8BAEpB,GAAIZ,KAAK62gB,gBAAkBv4I,EAAau4I,cACpC,OAAO72gB,KAAK2L,OAAS2yX,EAAa3yX,OAEtC,GAAI3L,KAAK62gB,cAAch0B,YAAcvkH,EAAau4I,cAAch0B,UAC5D,OAAO7if,KAAK62gB,cAAch0B,UAAUI,aAAa1kf,QAAQyB,KAAK62gB,eAC1Dv4I,EAAau4I,cAAch0B,UAAUI,aAAa1kf,QAAQ+/X,EAAau4I,eAE/E,IAAI4hB,EAAiBz4hB,KAAK62gB,cAAch0B,UACpC61C,EAAep6J,EAAau4I,cAAch0B,UAC9C,OAAI41C,EAAev1C,gBAAgBjxe,QAAUymhB,EAAax1C,gBAAgBjxe,MAClEwmhB,EAAerkC,cACRqkC,EAAepkC,eAAepR,aAAa1kf,QAAQk6hB,GACtDC,EAAarkC,eAAepR,aAAa1kf,QAAQm6hB,GAM7CD,EAAev1C,gBAAgBD,aAAa1kf,QAAQk6hB,GACvDC,EAAax1C,gBAAgBD,aAAa1kf,QAAQm6hB,GAGxD14hB,KAAKsvf,MAAM1/a,UAAU4od,aAAaC,EAAgBC,IAM7DtB,EAAa/7hB,UAAUk8hB,6BAA+B,WAClD,OAAOv3hB,KAAKszf,qBAAqBtzf,KAAK62gB,cAAe72gB,KAAK2L,OAAOuB,aAKrEkqhB,EAAa/7hB,UAAUi4f,qBAAuB,SAAUxlc,EAAMylc,GAE1D,OADWzlc,EAAAA,EAEKwlc,qBAAqBC,GAE9BA,GAKX6jC,EAAa/7hB,UAAU68hB,qBAAuB,SAAUpqe,EAAM6qe,GAC1D34hB,KAAK62gB,cAAgB/od,EACrB9tD,KAAK2L,OAASgthB,EACd34hB,KAAK83hB,wBAAuB,IAKhCV,EAAa/7hB,UAAUu9hB,yBAA2B,SAAUv6B,EAAY1yf,GACpE,IAAIikV,EAAa5vV,KAAK4vE,UAAUipd,cAAcx6B,GAC1CltP,EAAYktP,EAAWxb,UAAUI,aAAa1kf,QAAQ8/f,GAC1D,GAAI1yf,EAASikV,EAAa,EAA1B,CACI,IAAIkpM,OAAiB,EACrB,GAAI3nR,GAAaktP,EAAWxb,UAAUI,aAAaxmf,OAAS,EAAG,CAC3D,IAAIiqgB,EAAY1mgB,KAAK4vE,UAAUmpd,qBAAqB16B,EAAWxb,WAC3D6jB,GAAaA,EAAUz0f,QAAUosf,EAAWxb,UAAU5we,QACtD6mhB,EAAiBpyB,EAAU9pf,iBAI/Bk8gB,EAAiBz6B,EAAWxb,UAAUI,aAAa9xO,EAAY,GAEnEnxQ,KAAK44hB,yBAAyBE,EAAgBnthB,EAASikV,QAGtD,GAAIjkV,EAAS,EAAb,CACD,IAAIqthB,EAAW36B,EAAWxb,UAAUI,aAAa9xO,EAAY,GACzD8nR,EAAej5hB,KAAK4vE,UAAUipd,cAAcG,GAAYrthB,EAC5D3L,KAAK44hB,yBAAyBI,EAAUC,QAIxCj5hB,KAAK62gB,cAAgBxY,EACrBr+f,KAAK2L,OAASA,EAElB3L,KAAK83hB,wBAAuB,IAMhCV,EAAa/7hB,UAAU69hB,iBAAmB,SAAUjyU,GAC5CxpN,EAAkBwpN,KAClBA,GAAa,GAEjB,IAAI7hE,EAASplJ,KAAK4vE,UAAUupd,mBAAmBn5hB,KAAK62gB,cAAe72gB,KAAK2L,QACxE,GAAIy5I,aAAkBkmW,IAAwC,IAArBlmW,EAAOmmW,YAAoB9tf,EAAkB2nJ,EAAOomW,UAAW,CACpG,GAAIvkS,EAGA,OAFAjnN,KAAKo5hB,yBAAyBh0Y,QAC9BplJ,KAAKk5hB,mBAIL,IAAIpre,EAAOs3F,EAAOomW,SAAS19b,KACvB09b,EAAWpmW,EAAOomW,SAClB6tC,EAAiBvre,EAAKpe,UAAU87c,EAAU,GAC1C8tC,EAAgBt5hB,KAAKszf,qBAAqBxlc,EAAMure,EAAenshB,YACnE,GAAIkqhB,EAAamC,mBAAmBv5hB,KAAK4vE,UAAU/wD,IAAI04gB,+BAAgC+B,GAGnF,YADAt5hB,KAAK4vE,UAAU/wD,IAAI26gB,aAAap0Y,EAAOomW,SAAU,GAGrDxrf,KAAKw5hB,aAAap0Y,EAAOomW,SAAU,GAG3C,IAAItwB,EAAal7d,KAAK4vE,UAAU6pd,mBAAmBz5hB,KAAK62gB,cAAe72gB,KAAK2L,QACxEwlQ,EAAYnxQ,KAAK6if,UAAUI,aAAa1kf,QAAQyB,KAAK62gB,eACrD5kgB,EAAQ,EACZ,GAAIipd,EAAal7d,KAAK2L,OAAQ,CAC1B3L,KAAK2L,OAASuvd,EACd,IAAIv0c,EAAO3mB,KAAK62gB,cAAcliB,UAAU30f,KAAK2L,OAAQsG,GAGrD,GAFAmzI,EAASz+H,EAAK3lB,QACdiR,EAAQ0U,EAAK1U,OACRxU,EAAkB2nJ,IAAWnzI,IAAUmzI,EAAO3oJ,QAAU2oJ,EAAOusK,oBAAoB25L,GAAiB,CACrG,IAAIouC,EAAkB15hB,KAAK4vE,UAAU+pd,oBAAoBv0Y,EAAOusK,UAE5D+nO,aAA2BpuC,IAAiD,IAA9BouC,EAAgBnuC,YAC9DnmW,EAASs0Y,EACT15hB,KAAK2L,OAAS3L,KAAK62gB,cAAcnne,UAAU01G,EAAQ,UAI1D,GAAI+rH,EAAY,EAAInxQ,KAAK6if,UAAUI,aAAaxmf,OAAQ,CACzD,IAAIq8hB,EAAiB94hB,KAAK6if,UAAUI,aAAa9xO,EAAY,GACzD2nR,IACA94hB,KAAK62gB,cAAgBiiB,EACrB94hB,KAAK2L,OAAS3L,KAAK4vE,UAAUgqd,mBAAmB55hB,KAAK62gB,gBAEzD,IAAIgjB,EAAY75hB,KAAK62gB,cAAcliB,UAAU30f,KAAK2L,OAAQsG,GAC1DmzI,EAASy0Y,EAAU74hB,QACnBiR,EAAQ4nhB,EAAU5nhB,MACdmzI,aAAkBkmW,IAAwC,IAArBlmW,EAAOmmW,WAC5Cvrf,KAAK2L,cAIT3L,KAAK85hB,4BAA4B7nhB,GAAO,GAG5CjS,KAAK83hB,wBAAuB,IAMhCV,EAAa/7hB,UAAU0+hB,+BAAiC,SAAUnqd,GAC9D,IAAIoqd,EACAC,EAAcj6hB,KAAK62gB,cAAch0B,UAOjCplf,EALAu8hB,EADAC,EAAY7lC,cACQxkb,EAAUsqd,yBAAyBD,EAAY5lC,gBAG/Czkb,EAAUuqd,0BAA0BF,MAK5Dj6hB,KAAK62gB,cAAgBmjB,EAAkB/2C,aAAa+2C,EAAkB/2C,aAAaxmf,OAAS,GAC5FuD,KAAK2L,OAAS3L,KAAK62gB,cAAcrZ,eAAiB,IAEtD45B,EAAa/7hB,UAAUy+hB,4BAA8B,SAAUllC,EAAewlC,GAE1E,IAAIh1Y,EACAyyY,GAAkB,EAClBlqB,OAAgBxygB,EAChBg2Q,EAAYnxQ,KAAK6if,UAAUI,aAAa1kf,QAAQyB,KAAK62gB,eACzD,GAAKujB,GAGA,GAAIjpR,EAAY,EAAInxQ,KAAK6if,UAAUI,aAAaxmf,OAAQ,CACzD,IAAIq8hB,EAAiB94hB,KAAK6if,UAAUI,aAAa9xO,EAAY,GACzD2nR,IACA94hB,KAAK62gB,cAAgBiiB,EACrB94hB,KAAK2L,OAAS,QAKlB,GADAgigB,EAAgB3tgB,KAAK4vE,UAAUyqd,sBAAsBr6hB,KAAK6if,YACrDplf,EAAkBkwgB,IACfA,EAAczqB,2BAA2B6O,GACzC,GAAI/xf,KAAK4vE,UAAUryE,MAAMslf,UAAUuR,cAAe,CAG9CyjC,GADoB73hB,KAAK4vE,UAAU0qd,mBAAmBt6hB,KAAK4vE,UAAUryE,MAAMslf,UAAUwR,eAAgBsZ,EAActZ,gBAClFJ,WAAW9vf,SAASwpgB,EAActZ,qBAGnEwjC,GAAkB,OAnB9BlqB,EAAgB3tgB,KAAK4vE,UAAU2qd,sBAAsBv6hB,KAAK6if,YAwBzDplf,EAAkBkwgB,IAAkBA,EAAc1qB,aAAaxmf,OAAS,IACpEo7hB,GAKD73hB,KAAK62gB,cAAgBlJ,EAAc1qB,aAAa0qB,EAAc1qB,aAAaxmf,OAAS,GACpFuD,KAAK2L,OAAS3L,KAAK4vE,UAAUipd,cAAc74hB,KAAK62gB,eAAiB,IALjE72gB,KAAK62gB,cAAgBlJ,EAAc/wf,WACnC5c,KAAK2L,OAASyuhB,EAAc,EAAIp6hB,KAAK4vE,UAAUgqd,mBAAmB55hB,KAAK62gB,iBAO/E,IAAIgjB,EAAY75hB,KAAK62gB,cAAcliB,UAAU30f,KAAK2L,OAAQipf,GAC1DxvW,EAASy0Y,EAAU74hB,QACnB4zf,EAAgBilC,EAAU5nhB,MACtBmzI,aAAkBkmW,IAAwC,IAArBlmW,EAAOmmW,WAC5Cvrf,KAAK2L,UAGbyrhB,EAAa/7hB,UAAUm/hB,2BAA6B,SAAUvohB,EAAOmohB,GACjE,IAAIK,EACAr1Y,EACA+rH,EAAYnxQ,KAAK6if,UAAUI,aAAa1kf,QAAQyB,KAAK62gB,eACrD9d,EAAa/4f,KAAK4vE,UAAU8qd,uBAAuB16hB,KAAK62gB,cAAch0B,UAAW7if,KAAK2L,QAC1F,GAAI3L,KAAK2L,OAASotf,EACd/4f,KAAK2L,OAASotf,OAEb,GAAI5nP,EAAY,EAAG,CACpB,IAAIk4Q,EAAiBrphB,KAAK6if,UAAUI,aAAa9xO,EAAY,GACzDk4Q,IACArphB,KAAK62gB,cAAgBwS,EACrBrphB,KAAK2L,OAAS3L,KAAK62gB,cAAcrZ,oBAGpC,CAED,IAAIw8B,OAAoB7+hB,EACpB08hB,GAAkB,EACtB,GAAKuC,GAKD,GADAJ,EAAoBh6hB,KAAK4vE,UAAU+qd,0BAA0B36hB,KAAK6if,YAC7Dplf,EAAkBu8hB,IACfA,EAAkB92C,2BAA2B6O,GAC7C,GAAI/xf,KAAK4vE,UAAUryE,MAAMslf,UAAUuR,cAAe,CAG9CyjC,GADoB73hB,KAAK4vE,UAAU0qd,mBAAmBt6hB,KAAK4vE,UAAUryE,MAAMslf,UAAUwR,eAAgB2lC,EAAkB3lC,gBACtFJ,WAAW9vf,SAAS61hB,EAAkB3lC,qBAGvEwjC,GAAkB,OAZ9BmC,EAAoBh6hB,KAAK4vE,UAAUuqd,0BAA0Bn6hB,KAAK6if,WAiBjEplf,EAAkBu8hB,KACdnC,GAKD73hB,KAAK62gB,cAAgBmjB,EAAkBp9gB,WACvC5c,KAAK2L,OAAS3L,KAAK4vE,UAAUgqd,mBAAmB55hB,KAAK62gB,iBALrD72gB,KAAK62gB,cAAgBmjB,EAAkB/2C,aAAa+2C,EAAkB/2C,aAAaxmf,OAAS,GAC5FuD,KAAK2L,OAAS3L,KAAK62gB,cAAcrZ,iBAe7C,GAPAvrf,EAAQ,EACRwohB,EAAaz6hB,KAAK62gB,cAAcliB,UAAU30f,KAAK2L,OAAQsG,GACvDmzI,EAASq1Y,EAAWz5hB,QACpBiR,EAAQwohB,EAAWxohB,MACfmzI,aAAkBkmW,IAAwC,IAArBlmW,EAAOmmW,WAC5Cvrf,KAAK2L,SAELy5I,aAAkBkmW,GAAiB,CAEnC,IAAIsvC,EAAiB56hB,KAAK4vE,UAAUird,wBAAwBz1Y,GACvD3nJ,EAAkBm9hB,KACnBx1Y,EAASw1Y,EACT56hB,KAAK62gB,cAAgBzxX,EAAOt3F,KAC5B9tD,KAAK2L,OAAS3L,KAAK62gB,cAAcnne,UAAU01G,EAAQA,EAAO3oJ,QACtD2oJ,aAAkBkmW,IAAwC,IAArBlmW,EAAOmmW,WAC5Cvrf,KAAK2L,UAKjB3L,KAAK83hB,wBAAuB,IAKhCV,EAAa/7hB,UAAUy/hB,iCAAmC,WACtD,IAAIj4C,EAAY7if,KAAK62gB,cAAch0B,UAC9Bplf,EAAkBuC,KAAK4vE,UAAU2qd,sBAAsB13C,MAExD7if,KAAK62gB,cAAgB72gB,KAAK4vE,UAAU2qd,sBAAsB13C,GAAWjme,WACrE5c,KAAK2L,OAAS3L,KAAK4vE,UAAU0nd,eAAez0C,GAC5C7if,KAAK83hB,wBAAuB,KAOpCV,EAAa/7hB,UAAU0/hB,qBAAuB,WAC1C,IAAI9ohB,EAAQ,EACRwohB,EAAaz6hB,KAAK62gB,cAAcliB,UAAU30f,KAAK2L,OAAQsG,GACvDmzI,EAASq1Y,EAAWz5hB,QACxBiR,EAAQwohB,EAAWxohB,MACHjS,KAAK6if,UAAUI,aAAa1kf,QAAQyB,KAAK62gB,eACrDzxX,aAAkBkmW,IAAwC,IAArBlmW,EAAOmmW,YAAoB9tf,EAAkB2nJ,EAAOqmW,aACzFzrf,KAAKg7hB,6BAA6B51Y,GAEtCplJ,KAAKw6hB,2BAA2BvohB,GAAO,IAM3CmlhB,EAAa/7hB,UAAU+9hB,yBAA2B,SAAU3tC,GACxD,IAAIrmW,EACA3nJ,EAAkBguf,EAAWsS,gBAC7B34W,EAASqmW,EAAWD,UAGpBpmW,EAASqmW,EAAWsS,eACpB/9f,KAAK62gB,cAAgBzxX,EAAOt3F,KAExB9tD,KAAK62gB,gBAAkBprB,EAAWD,SAAS19b,MAAS9tD,KAAK4vE,UAAUqrd,eAAej7hB,KAAK6if,UAAWz9V,EAAQqmW,EAAWD,YACrHpmW,EAASqmW,EAAWD,WAG5Bxrf,KAAK62gB,cAAgBzxX,EAAOt3F,KAC5B9tD,KAAK2L,OAAS3L,KAAK62gB,cAAcnne,UAAU01G,EAAQ,IAMvDgyY,EAAa/7hB,UAAU6/hB,aAAe,WAClC,IAAItmC,EAAgB,EAChBilC,EAAY75hB,KAAK62gB,cAAcliB,UAAU30f,KAAK2L,OAAQipf,GACtDxvW,EAASy0Y,EAAU74hB,QAEvB,GADA4zf,EAAgBilC,EAAU5nhB,OACrBjS,KAAKsvf,MAAM1/a,UAAU0qK,UAAY78O,EAAkB2nJ,GAAS,CAC7D,IAAI+1Y,EAAan7hB,KAAK4vE,UAAUwrd,0BAA0Bh2Y,EAAQwvW,GAClE,GAAIumC,aAAsB7vC,IAA4C,IAAzB6vC,EAAW5vC,UAAiB,CACrE,IAAIgI,EAAoBvzf,KAAKsvf,MAAM1/a,UAAUryE,MAAMg6hB,+BAE/C8B,EAAiB8B,EAAW3vC,SAAS19b,KAAKpe,UAAUyrf,EAAW3vC,SAAU,GAEzE8tC,EAAgBt5hB,KAAKszf,qBAAqB6nC,EAAW3vC,SAAS19b,KAAMure,EAAenshB,YACvF,IAAKkqhB,EAAamC,mBAAmBD,EAAe/lC,GAIhD,YADAvzf,KAAKsvf,MAAM1/a,UAAUryE,MAAM26hB,qBAAqBiD,EAAW3vC,SAAS19b,KAAMure,IAKtF,GAAIj0Y,aAAkBkmW,IAAwC,IAArBlmW,EAAOmmW,YAAoB9tf,EAAkB2nJ,EAAOqmW,YAAa,CAClG8H,EAAoBvzf,KAAKsvf,MAAM1/a,UAAUryE,MAAMg6hB,+BAC/C8B,EAAiBj0Y,EAAOt3F,KAAKpe,UAAU01G,EAAQ,GAC/Ck0Y,EAAgBt5hB,KAAKszf,qBAAqBluW,EAAOt3F,KAAMure,EAAenshB,YAC1E,IAAKkqhB,EAAamC,mBAAmBhmC,EAAmB+lC,GAAgB,CAGpE,IAAI+B,EAAmBj2Y,EAAOqmW,WAAW39b,KAAKpe,UAAU01G,EAAOqmW,WAAY,GAK3E,OAJAzrf,KAAK62gB,cAAgBzxX,EAAOqmW,WAAW39b,KACvC9tD,KAAK2L,OAAS0vhB,OAEdr7hB,KAAK83hB,wBAAuB,GAGhC93hB,KAAKg7hB,6BAA6B51Y,GAEtCplJ,KAAKw6hB,2BAA2B5lC,GAAe,IAMnDwiC,EAAa/7hB,UAAUmkb,YAAc,WACjC,IAAIo1E,EAAgB,EAChBilC,EAAY75hB,KAAK62gB,cAAcliB,UAAU30f,KAAK2L,OAAQipf,GACtDxvW,EAASy0Y,EAAU74hB,QAEvB,GADA4zf,EAAgBilC,EAAU5nhB,OACrBxU,EAAkB2nJ,GAAS,CAC5B,IAAKplJ,KAAKsvf,MAAM1/a,UAAU0qK,SAAWs6Q,IAAkBxvW,EAAO3oJ,QAAU2oJ,aAAkBkmW,IAC9D,IAArBlmW,EAAOmmW,UAAiB,CAC3B,IAAIgI,EAAoBvzf,KAAKsvf,MAAM1/a,UAAUryE,MAAMg6hB,+BAE/C8D,EAAmBj2Y,EAAOqmW,WAAW39b,KAAKpe,UAAU01G,EAAOqmW,WAAY,GAEvE6vC,EAAkBt7hB,KAAKszf,qBAAqBluW,EAAOqmW,WAAW39b,KAAMute,EAAiBnuhB,YACzF,IAAKkqhB,EAAamC,mBAAmBhmC,EAAmB+nC,GAIpD,YADAt7hB,KAAKsvf,MAAM1/a,UAAUryE,MAAM26hB,qBAAqB9yY,EAAOqmW,WAAW39b,KAAMute,GAIhFj2Y,EAASplJ,KAAK4vE,UAAUwrd,0BAA0Bh2Y,EAAQwvW,GAE9D,GAAIxvW,aAAkBkmW,KAAoB7tf,EAAkB2nJ,EAAOomW,UAAW,CAC1E,IACI+vC,EAAsB,EAEtBC,EAH0Bx7hB,KAAKsvf,MAAM1/a,UAAUryE,MAAMslf,UAGH8R,UAAU30f,KAAKsvf,MAAM1/a,UAAUryE,MAAMoO,OAAQ4vhB,GAC/FE,EAAuBD,EAAwBx6hB,QACnDu6hB,EAAsBC,EAAwBvphB,MAE9C,GADuBjS,KAAK4vE,UAAUwrd,0BAA0BK,EAAsBF,KAC7Dn2Y,EAUrB,OALAA,EAASA,EAAOomW,SAChBxrf,KAAK62gB,cAAgBzxX,EAAOt3F,KAC5B9tD,KAAK2L,OAAS3L,KAAK62gB,cAAcnne,UAAU01G,EAAQ,QAEnDplJ,KAAK83hB,wBAAuB,GAR5B93hB,KAAKo5hB,yBAAyBh0Y,QAY5BA,aAAkBkmW,KACC,IAArBlmW,EAAOmmW,WAAwC,IAArBnmW,EAAOmmW,aACrCvrf,KAAK62gB,cAAgBzxX,EAAOt3F,KAC5B9tD,KAAK2L,OAAS3L,KAAK62gB,cAAcnne,UAAU01G,EAAQ,IAEvDwvW,EAAgB,EAChB,IAAI15B,EAAal7d,KAAK4vE,UAAU6pd,mBAAmBz5hB,KAAK62gB,cAAe72gB,KAAK2L,QACxElP,EAASuD,KAAK4vE,UAAUipd,cAAc74hB,KAAK62gB,eAC3ChK,EAAiB7sgB,KAAK4vE,UAAUqgc,oBAAoBjwgB,KAAK62gB,eAC7D,GAAI72gB,KAAK2L,OAASuvd,EAAY,CAC1Bl7d,KAAK2L,OAASuvd,EACd,IAAIwgE,EAAc17hB,KAAK62gB,cAAcliB,UAAU30f,KAAK2L,OAAQipf,GAG5D,GAFAxvW,EAASs2Y,EAAY16hB,QACrB4zf,EAAgB8mC,EAAYzphB,OACvBxU,EAAkB2nJ,IAAWwvW,IAAkBxvW,EAAO3oJ,QAAU2oJ,EAAOusK,oBAAoB25L,GAAiB,CAC7G,IAAIouC,EAAkB15hB,KAAK4vE,UAAU+pd,oBAAoBv0Y,EAAOusK,UAE5D+nO,aAA2BpuC,IAAiD,IAA9BouC,EAAgBnuC,YAC9DnmW,EAASs0Y,EACT15hB,KAAK2L,OAAS3L,KAAK62gB,cAAcnne,UAAU01G,EAAQ,UAItDplJ,KAAK2L,SAAWuvd,GAAcl7d,KAAK2L,OAASlP,EAAS,GAAKowgB,EAC/D7sgB,KAAK2L,OAASlP,EAAS,EAGvBuD,KAAK85hB,4BAA4BllC,GAAe,GAGpD50f,KAAK83hB,wBAAuB,IAMhCV,EAAa/7hB,UAAUm+hB,aAAe,SAAUp0Y,EAAQnzI,GACpDjS,KAAK62gB,cAAgBzxX,EAAOt3F,KAC5B9tD,KAAK2L,OAAS3L,KAAK62gB,cAAcnne,UAAU01G,EAAQnzI,GAEnDjS,KAAK83hB,wBAAuB,IAMhCV,EAAamC,mBAAqB,SAAUh8hB,EAAOshB,GAC/C,GAAIthB,IAAUshB,EACV,OAAO,EAEXthB,EAAQA,EAAMgS,QAAQ,MAAO,IAC7BsP,EAAMA,EAAItP,QAAQ,MAAO,IACzBhS,EAAQA,EAAMgS,QAAQ,MAAO,IAC7BsP,EAAMA,EAAItP,QAAQ,MAAO,IACzBhS,EAAQA,EAAMgS,QAAQ,MAAO,IAC7BsP,EAAMA,EAAItP,QAAQ,MAAO,IACzB,IAAIoW,EAAiBpoB,EAAML,MAAM,KAC7B2oB,EAAehH,EAAI3hB,MAAM,KACzBT,EAASkpB,EAAelpB,OACxBA,EAASopB,EAAappB,SACtBA,EAASopB,EAAappB,OAAS,GAEnC,IAAK,IAAIN,EAAI,EAAGA,EAAIM,EAAQN,IAAK,CAC7B,IAAIq6f,EAAch7e,WAAWmK,EAAexpB,IACxCkkgB,EAAY7kf,WAAWqK,EAAa1pB,IACxC,GAAIq6f,IAAgB6J,EAChB,OAAO7J,EAAc6J,EAG7B,OAAO,GAMX+2B,EAAa/7hB,UAAU2/hB,6BAA+B,SAAUxvC,GAC5D,IAAIpmW,EAEAA,EADA3nJ,EAAkB+tf,EAASuS,gBAClB/9f,KAAK4vE,UAAUird,wBAAwBrvC,EAASC,YAGhDzrf,KAAK4vE,UAAUird,wBAAwBrvC,GAEpDxrf,KAAK62gB,cAAgBzxX,EAAOt3F,KAC5B9tD,KAAK2L,OAAS3L,KAAK62gB,cAAcnne,UAAU01G,EAAQA,aAAkBkmW,GAAkB,EAAIlmW,EAAO3oJ,SAMtG26hB,EAAa/7hB,UAAUsgiB,wBAA0B,SAAUj1hB,GACvD,IAAI25f,EAAYrggB,KAAK62gB,cAAcrZ,eAC/By8B,EAAcj6hB,KAAK62gB,cAAch0B,UACjCjza,EAAY5vE,KAAK4vE,UACrB,GAAa,IAATlpE,GAAe1G,KAAK2L,SAAW00f,GAAarggB,KAAK2L,SAAW00f,EAAY,EAA5E,CAGA,GAAIrggB,KAAK2L,SAAW00f,EAAY,EAC5BrggB,KAAK2L,OAAS00f,OAEb,GAAIrggB,KAAK2L,SAAWikE,EAAU0nd,eAAe2C,IAAgBj6hB,KAAK62gB,gBAAkBojB,EAAYh3C,aAAa,GAAI,CAClH,IAAI+2C,EAAoBpqd,EAAUuqd,0BAA0BF,GAC5D,GAAIx8hB,EAAkBu8hB,GAClB,OAEJh6hB,KAAK62gB,cAAgBmjB,EAAkB/2C,aAAa+2C,EAAkB/2C,aAAaxmf,OAAS,GAC5FuD,KAAK2L,OAAS3L,KAAK62gB,cAAcrZ,mBAEhC,CACD,GAAIx9f,KAAK2L,SAAWikE,EAAUgqd,mBAAmB55hB,KAAK62gB,eAAgB,CAClE,IAAI1lQ,EAAY8oR,EAAYh3C,aAAa1kf,QAAQyB,KAAK62gB,eAClD1lQ,EAAY,GAAK,IACjBnxQ,KAAK62gB,cAAgBojB,EAAYh3C,aAAa9xO,EAAY,GAC1DnxQ,KAAK2L,OAAS3L,KAAK62gB,cAAcrZ,gBAGzC,IAEI5I,EAAgB,EAChBilC,EAAY75hB,KAAK62gB,cAAcliB,UAAU30f,KAAK2L,OAAQipf,GACtDxvW,EAASy0Y,EAAU74hB,QACvB4zf,EAAgBilC,EAAU5nhB,MAE1BjS,KAAK47hB,sBAAsBx2Y,EAAQx1E,EAAWglb,EAAeluf,EAAO0+I,aAAkBkmW,IAAwC,IAArBlmW,EAAOmmW,WAPhG,GACG,EAMwIvrf,MAElJ,IAAT0G,GACA1G,KAAK67hB,kBAET77hB,KAAK83hB,wBAAuB,KAOhCV,EAAa/7hB,UAAUygiB,kBAAoB,SAAU12Y,EAAQwvW,EAAeluf,EAAMq1hB,EAAWC,EAAc7S,EAAa8S,GAChH72Y,aAAkBovW,GAClBx0f,KAAKk8hB,sBAAsB92Y,EAAQwvW,EAAeluf,EAAMq1hB,EAAWC,EAAc7S,EAAa8S,GAEzF72Y,aAAkBqvW,GAEvBz0f,KAAKm8hB,uBAAuB/2Y,EAAQwvW,EAAeluf,EAAMq1hB,EAAWC,EAAc7S,EAAa8S,GAE1F72Y,aAAkBkmW,IAAwC,IAArBlmW,EAAOmmW,UAEjDvrf,KAAKo8hB,4BAA4Bh3Y,EAAQwvW,EAAeluf,EAAMq1hB,EAAWC,EAAc7S,EAAa8S,GAE/F72Y,aAAkBkmW,IAAwC,IAArBlmW,EAAOmmW,WAAmBnmW,aAAkBsvW,GAEtF10f,KAAKq8hB,gCAAgCj3Y,EAAQwvW,EAAeluf,EAAMq1hB,EAAWC,EAAc7S,EAAa8S,GAEnG72Y,aAAkBkmW,IAAwC,IAArBlmW,EAAOmmW,WAEjDvrf,KAAKs8hB,0BAA0Bl3Y,EAAQwvW,EAAeluf,EAAMq1hB,EAAWC,EAAc7S,EAAa8S,IAQ1G7E,EAAa/7hB,UAAU+giB,4BAA8B,SAAU3wC,EAAYmJ,EAAeluf,EAAMq1hB,EAAWC,EAAc7S,EAAa8S,GAClI,IAAIzlC,EAAc/K,EAAW39b,KAAKpe,UAAU+7c,EAAY,GAC1BA,EAAWhvf,OACzC,GAAIgB,EAAkBguf,EAAWsS,gBAC7B/9f,KAAKs8hB,0BAA0B7wC,EAAWD,SAAU,EAAG9kf,EAAMq1hB,EAAWC,EAAc7S,EAAa8S,QAElG,GAAa,IAATv1hB,EAEL1G,KAAKq8hB,gCAAgC5wC,EAAWsS,eAAgB,EAAGr3f,EAAMq1hB,EAAWC,EAAc7S,EAAa8S,QAE9G,IAAKx+hB,EAAkBguf,EAAWD,UAAW,CAC9C,IAAIpmW,EAASqmW,EAAWsS,eAQxB,GANI34W,EAAOt3F,KAAK+0b,YAAc4I,EAAWD,SAAS19b,KAAK+0b,WAAc7if,KAAK4vE,UAAUqrd,eAAe71Y,EAAOt3F,KAAK+0b,UAAWz9V,EAAQqmW,EAAWD,YACzIpmW,EAASqmW,EAAWD,UAGxBxrf,KAAK87hB,kBAAkB12Y,EAAQ,EAAG1+I,IAAQyihB,EAAYtmC,YAAc4I,EAAW39b,KAAK+0b,WAAasmC,EAAYx9gB,SAAW6qf,GAAcwlC,EAAc7S,EAAa8S,GAE7JD,IAAiBv+hB,EAAkBguf,EAAWsS,iBAAoBorB,EAAYtmC,YAAc4I,EAAW39b,KAAK+0b,WAAesmC,EAAYx9gB,SAAW8/e,EAAWsS,eAAejwc,KAAKpe,UAAU+7c,EAAWsS,eAAgBtS,EAAWsS,eAAethgB,QAEhP,YADA0shB,EAAY+O,qBAAqBzsC,EAAW39b,KAAM0oc,GAGjDwlC,GAED7S,EAAY+O,qBAAqBzsC,EAAWD,SAAS19b,KAAM29b,EAAWD,SAAS19b,KAAKpe,UAAU+7c,EAAWD,SAAUC,EAAWD,SAAS/uf,WASnJ26hB,EAAa/7hB,UAAU8giB,uBAAyB,SAAU7mW,EAAOs/T,EAAeluf,EAAMq1hB,EAAWC,EAAc7S,EAAa8S,GACxH,GAAIF,EAGA,OAFA5S,EAAY+O,qBAAqB5iW,EAAMxnI,KAAMwnI,EAAMxnI,KAAKpe,UAAU4lJ,EAAOs/T,SACzEonC,GAAe,GAGnB,GAAsB,IAAlBpnC,EAAqB,CACrB,IAAI4B,EAAclhU,EAAMxnI,KAAKpe,UAAU4lJ,EAAO,GAC9C0mW,GAAe,EACX7S,EAAYx9gB,SAAW6qf,EACnB/4f,EAAkB63L,EAAMq8H,UACxBw3N,EAAY+O,qBAAqB5iW,EAAMxnI,KAAM0oc,EAAclhU,EAAM74L,QAGjEuD,KAAK87hB,kBAAkBxmW,EAAMq8H,SAAU,EAAGjrT,EAAMq1hB,EAAWC,EAAc7S,EAAa8S,GAI1F9S,EAAY+O,qBAAqB5iW,EAAMxnI,KAAM0oc,QAG3C/4f,EAAkB63L,EAAMq8H,WAC9B3xT,KAAK87hB,kBAAkBxmW,EAAMq8H,SAAU,EAAGjrT,EAAMq1hB,EAAWC,EAAc7S,EAAa8S,IAO9F7E,EAAa/7hB,UAAU6giB,sBAAwB,SAAUv5d,EAAMiyb,EAAeluf,EAAMq1hB,EAAWC,EAAc7S,EAAa8S,GACtH,GAAkB,OAAdt5d,EAAKl2C,MAA+B,OAAdk2C,EAAKl2C,KAAe,CAC1C,GAAIsvgB,EAGA,OAFA5S,EAAY+O,qBAAqBv1d,EAAK7U,KAAM6U,EAAK7U,KAAKpe,UAAUizB,EAAMiyb,SACtEonC,GAAe,GAGnB,GAAsB,IAAlBpnC,EAAqB,CACrBonC,GAAe,EACf,IAAIxlC,EAAc7zb,EAAK7U,KAAKpe,UAAUizB,EAAM,GACxCwmd,EAAYx9gB,SAAW6qf,EACvB2yB,EAAY+O,qBAAqBv1d,EAAK7U,KAAM0oc,EAAc7zb,EAAKlmE,QAG/D0shB,EAAY+O,qBAAqBv1d,EAAK7U,KAAM0oc,QAG1C/4f,EAAkBklE,EAAKgvP,WAC7B3xT,KAAK87hB,kBAAkBn5d,EAAKgvP,SAAU,EAAGjrT,EAAMq1hB,EAAWC,EAAc7S,EAAa8S,OAGxF,CACD,IAAIM,EAAe,EACnB,GAAsB,IAAlB3nC,GAAuBonC,IAA8E,IAA7DrxC,GAAcwB,oBAAoB5tf,QAAQokE,EAAKl2C,KAAK,KAE5F,GADA08f,EAAY+O,qBAAqBv1d,EAAK7U,KAAM6U,EAAK7U,KAAKpe,UAAUizB,EAAMiyb,IAClEmnC,EACA,YAGH,GAAInnC,EAAgBjyb,EAAKlmE,OAAQ,CAElC,IAAIskT,EAAM6zM,EAAgB,GAAKjyb,EAAKl2C,KAAKhwB,OAAS,GAAKm4f,EAAgBjyb,EAAKl2C,KAAKprB,MAAMuzf,EAAejyb,EAAKlmE,QAAUkmE,EAAKl2C,KAE1H,IAAsB,KADtB8vgB,EAAe5xC,GAAcE,WAAW9pM,EAAK4pM,GAAcwB,sBAClC,CACrB,GAAI4vC,EAEA,YADAC,GAAe,GAGnB,IAAIrwhB,EAASg3D,EAAK7U,KAAKpe,UAAUizB,EAAM45d,EAAe3nC,GAEtD,IAAKqnC,GAAsC,MAAtBl7O,EAAIw7O,MAA2BP,GAAgBr5d,EAAK7U,KAAK+0b,YAAcsmC,EAAYtmC,WAAal3e,IAAWw9gB,EAAYx9gB,OAGxI,OAFAqwhB,GAAe,OACf7S,EAAY+O,qBAAqBv1d,EAAK7U,KAAMniD,GAIhD,IADA4whB,IACOA,EAAex7O,EAAItkT,SAA4E,IAAlEkuf,GAAcwB,oBAAoB5tf,QAAQwiT,EAAIw7O,MACpD,MAAtBx7O,EAAIw7O,IAA+C,MAAtBx7O,EAAIw7O,KAGrCA,IAEJP,GAAe,EACXO,EAAex7O,EAAItkT,OAEnB0shB,EAAY+O,qBAAqBv1d,EAAK7U,KAAM6U,EAAK7U,KAAKpe,UAAUizB,EAAM45d,EAAe3nC,IAE/En3f,EAAkBklE,EAAKgvP,UAM7Bw3N,EAAY+O,qBAAqBv1d,EAAK7U,KAAM6U,EAAK7U,KAAKpe,UAAUizB,EAAM45d,EAAe3nC,IAJrF50f,KAAK87hB,kBAAkBn5d,EAAKgvP,SAAU,EAAGjrT,EAAMq1hB,EAAWC,EAAc7S,EAAa8S,QAOnFx+hB,EAAkBklE,EAAKgvP,UAI7Bw3N,EAAY+O,qBAAqBv1d,EAAK7U,KAAM6U,EAAK7U,KAAK0vc,gBAHtDx9f,KAAK87hB,kBAAkBn5d,EAAKgvP,SAAU,EAAGjrT,EAAMq1hB,EAAWC,EAAc7S,EAAa8S,QAMnFx+hB,EAAkBklE,EAAKgvP,WAC7B3xT,KAAK87hB,kBAAkBn5d,EAAKgvP,SAAU,EAAGjrT,EAAMq1hB,EAAWC,EAAc7S,EAAa8S,KASjG7E,EAAa/7hB,UAAUghiB,gCAAkC,SAAUt+B,EAAgBnJ,EAAeluf,EAAMq1hB,EAAWC,EAAc7S,EAAa8S,GACrIx+hB,EAAkBsggB,EAAepsM,WAClC3xT,KAAK87hB,kBAAkB/9B,EAAepsM,SAAU,EAAGjrT,EAAMq1hB,EAAWC,EAAc7S,EAAa8S,IAQvG7E,EAAa/7hB,UAAUihiB,0BAA4B,SAAU9wC,EAAUoJ,EAAeluf,EAAMq1hB,EAAWC,EAAc7S,EAAa8S,GAC9H,IAAIzlC,EAAchL,EAAS19b,KAAKpe,UAAU87c,EAAU,GAChD6U,EAAY7J,EAAchL,EAAS/uf,OACnC0shB,EAAYx9gB,SAAW6qf,IACvB2yB,EAAY+O,qBAAqB1sC,EAAS19b,KAAMuyc,GAC5C5igB,EAAkB+tf,EAAS75L,aAI9Bl0T,EAAkB+tf,EAAS75L,UAO5Bw3N,EAAY+O,qBAAqB1sC,EAAS19b,KAAM0oc,IANhDx2f,KAAK87hB,kBAAkBtwC,EAAS75L,SAAU,EAAGjrT,GAAM,EAAOs1hB,EAAc7S,EAAa8S,GACjF9S,EAAYx9gB,SAAW00f,GACvB8oB,EAAY+O,qBAAqB1sC,EAAS19b,KAAM0oc,IAMxDwlC,GAAe,IAOnB5E,EAAa/7hB,UAAUugiB,sBAAwB,SAAUx2Y,EAAQx1E,EAAWglb,EAAeluf,EAAMq1hB,EAAWlnC,EAAWmnC,EAAc7S,GAC7H/jY,aAAkBovW,GAElBx0f,KAAKw8hB,0BAA0Bp3Y,EAAQx1E,EAAWglb,EAAeluf,EAAMq1hB,EAAWlnC,EAAWmnC,EAAc7S,GAEtG/jY,aAAkBqvW,GAEvBz0f,KAAKy8hB,2BAA2Br3Y,EAAQx1E,EAAWglb,EAAeluf,EAAMq1hB,EAAWlnC,EAAWmnC,EAAc7S,GAEvG/jY,aAAkBkmW,IAAwC,IAArBlmW,EAAOmmW,UAEjDvrf,KAAK08hB,gCAAgCt3Y,EAAQx1E,EAAWglb,EAAeluf,EAAMq1hB,EAAWlnC,EAAWmnC,EAAc7S,GAE5G/jY,aAAkBkmW,IAAwC,IAArBlmW,EAAOmmW,UAEjDvrf,KAAK28hB,oCAAoCv3Y,EAAQx1E,EAAWglb,EAAeluf,EAAMq1hB,EAAWlnC,EAAWmnC,EAAc7S,GAEhH/jY,aAAkBkmW,IAAwC,IAArBlmW,EAAOmmW,UAEjDvrf,KAAK48hB,8BAA8Bx3Y,EAAQx1E,EAAWglb,EAAeluf,EAAMq1hB,EAAWlnC,EAAWmnC,EAAc7S,GAE1G/jY,aAAkBsvW,GACvB10f,KAAK68hB,8BAA8Bz3Y,EAAQx1E,EAAWglb,EAAeluf,EAAMq1hB,EAAWlnC,EAAWmnC,EAAc7S,GAE1G/jY,aAAkB2vW,IAAsB3vW,EAAO84W,cAEpDl+f,KAAKw8hB,0BAA0Bp3Y,EAAO84W,aAActub,EAAWglb,EAAeluf,EAAMq1hB,EAAWlnC,EAAWmnC,EAAc7S,IAIhIiO,EAAa/7hB,UAAUwhiB,8BAAgC,SAAUlV,EAAU/3c,EAAWglb,EAAeluf,EAAMq1hB,EAAWlnC,EAAWmnC,EAAc7S,GAC3I,GAAIxB,EAASzpB,cACT,GAAIypB,EAASzpB,wBAAwB1J,GAAgB,CACjD,IAAIpvW,EAASuiY,EAASzpB,aAClBvT,GAAcI,eAAe3lW,EAAO34H,KAAMk+d,GAAcwB,uBAAyB/mW,EAAO34H,KAAKhwB,OAAS,EACtGuD,KAAK47hB,sBAAsBx2Y,EAAQx1E,EAAWglb,EAAeluf,EAAMq1hB,EAAWlnC,EAAWmnC,EAAc7S,GAGvGA,EAAY+O,qBAAqBvQ,EAAS75d,KAAM65d,EAAS75d,KAAKpe,UAAUi4e,EAAU,UAK1FwB,EAAY+O,qBAAqBvQ,EAAS75d,KAAM8hB,EAAUgqd,mBAAmBjS,EAAS75d,QAQ9Fspe,EAAa/7hB,UAAUuhiB,8BAAgC,SAAUpxC,EAAU57a,EAAWglb,EAAeluf,EAAMq1hB,EAAWlnC,EAAWmnC,EAAc7S,GAC3I,IAAI3yB,EAAchL,EAAS19b,KAAKpe,UAAU87c,EAAU,GAChD6U,EAAY7J,EAAchL,EAAS/uf,OACvC,GAAIgB,EAAkB+tf,EAASuS,gBAC3B/9f,KAAK08hB,gCAAgClxC,EAASC,WAAY77a,EAAW,EAAGlpE,EAAMq1hB,EAAWlnC,EAAWmnC,EAAc7S,QAEjH,GAAa,IAATzihB,GAAejJ,EAAkB+tf,EAAS0S,eAK9C,IAAKzggB,EAAkB+tf,EAASC,aAAwB,IAAT/kf,EAAY,CAQ5D,IALIjJ,EAFA2nJ,EAASomW,EAAS0S,eAEY94W,EAAOt3F,KAAK+0b,YAAc2I,EAASC,WAAW39b,KAAK+0b,YAAcjza,EAAUqrd,eAAe71Y,EAAOt3F,KAAK+0b,UAAWz9V,EAAQomW,EAASC,eAChKrmW,EAASomW,EAASC,YAGtBzrf,KAAK47hB,sBAAsBx2Y,EAAQx1E,EAAWw1E,EAAO3oJ,OAAQiK,IAAQyihB,EAAYtmC,YAAc2I,EAAS19b,KAAK+0b,WAAasmC,EAAYx9gB,SAAW00f,GAAYxL,EAAWmnC,EAAc7S,GAClL6S,GAAgB7S,EAAYtmC,YAAc2I,EAAS19b,KAAK+0b,WACrDsmC,EAAYx9gB,SAAW6qf,EAE1B,YADA2yB,EAAY+O,qBAAqB1sC,EAAS19b,KAAMuyc,GAG/C27B,GAED7S,EAAY+O,qBAAqB1sC,EAASC,WAAW39b,KAAM09b,EAASC,WAAW39b,KAAKpe,UAAU87c,EAASC,WAAY,SApBzD,CAC9D,IAAIrmW,EAASomW,EAAS0S,aAEtBl+f,KAAK47hB,sBAAsBx2Y,EAAQx1E,EAAWw1E,EAAO3oJ,OAAQiK,EAAO0+I,aAAkBkmW,IAAwC,IAArBlmW,EAAOmmW,UAAkBsJ,EAAWmnC,EAAc7S,KA0BnKiO,EAAa/7hB,UAAUshiB,oCAAsC,SAAU5+B,EAAgBnub,EAAWglb,EAAeluf,EAAMq1hB,EAAWlnC,EAAWmnC,EAAc7S,GACvJnphB,KAAK08hB,gCAAgC3+B,EAAetS,WAAY77a,EAAWmub,EAAetS,WAAWhvf,OAAQiK,EAAMq1hB,EAAWlnC,EAAWmnC,EAAc7S,IAO3JiO,EAAa/7hB,UAAUqhiB,gCAAkC,SAAUjxC,EAAY77a,EAAWglb,EAAeluf,EAAMq1hB,EAAWlnC,EAAWmnC,EAAc7S,GAC/I,IAAI3yB,EAAc/K,EAAW39b,KAAKpe,UAAU+7c,EAAY,GACpD4U,EAAY7J,EAAc/K,EAAWhvf,OACrC0shB,EAAYx9gB,SAAW00f,GACvB8oB,EAAY+O,qBAAqBzsC,EAAW39b,KAAM0oc,GAEjD/4f,EAAkBguf,EAAWyS,cAW9BirB,EAAY+O,qBAAqBzsC,EAAW39b,KAAM8hB,EAAUgqd,mBAAmBnuC,EAAW39b,QAT1F9tD,KAAK47hB,sBAAsBnwC,EAAWyS,aAActub,EAAW67a,EAAWyS,aAAazhgB,OAAQiK,GAAM,EAAOmuf,EAAWmnC,EAAc7S,GACjIA,EAAYx9gB,SAAW6qf,IACV,IAAT9vf,GAAejJ,EAAkBguf,EAAWsS,iBAE5CorB,EAAY+O,qBAAqBzsC,EAAW39b,KAAM29b,EAAWsS,eAAejwc,KAAKpe,UAAU+7c,EAAWsS,eAAgBtS,EAAWsS,eAAethgB,YAahK26hB,EAAa/7hB,UAAUohiB,2BAA6B,SAAUnnW,EAAO1lH,EAAWglb,EAAeluf,EAAMq1hB,EAAWlnC,EAAWmnC,EAAc7S,GACrI,GAAI4S,EAGA,OAFA5S,EAAY+O,qBAAqB5iW,EAAMxnI,KAAMwnI,EAAMxnI,KAAKpe,UAAU4lJ,EAAOs/T,SACzEonC,GAAe,GAGnB,GAAIpnC,IAAkBt/T,EAAM74L,OAAQ,CAChC,IAAI4jgB,EAAY/qU,EAAMxnI,KAAKpe,UAAU4lJ,EAAOA,EAAM74L,QAC9C4jgB,IAAc8oB,EAAYx9gB,OAC1Bw9gB,EAAY+O,qBAAqB5iW,EAAMxnI,KAAMuyc,EAAY/qU,EAAM74L,QAG/D0shB,EAAY+O,qBAAqB5iW,EAAMxnI,KAAMuyc,QAG3C5igB,EAAkB63L,EAAM4oU,eAE9Bl+f,KAAK47hB,sBAAsBtmW,EAAM4oU,aAActub,EAAW0lH,EAAM4oU,aAAazhgB,OAAQiK,EAAMq1hB,EAAWlnC,EAAWmnC,EAAc7S,IAQvIiO,EAAa/7hB,UAAUmhiB,0BAA4B,SAAU75d,EAAMiN,EAAWglb,EAAeluf,EAAMq1hB,EAAWlnC,EAAWmnC,EAAc7S,GACnI,GAAkB,OAAdxmd,EAAKl2C,MAA+B,OAAdk2C,EAAKl2C,KAAe,CAC1C,GAAIsvgB,EAEA,YADAC,GAAe,GAGnB,GAAIpnC,IAAkBjyb,EAAKlmE,OAAQ,CAC/Bu/hB,GAAe,EACf,IAAI37B,EAAY19b,EAAK7U,KAAKpe,UAAUizB,EAAMA,EAAKlmE,QAC3C4jgB,IAAc8oB,EAAYx9gB,OAC1Bw9gB,EAAY+O,qBAAqBv1d,EAAK7U,KAAMuyc,EAAY19b,EAAKlmE,QAG7D0shB,EAAY+O,qBAAqBv1d,EAAK7U,KAAMuyc,QAG1C5igB,EAAkBklE,EAAKu7b,eAE7Bl+f,KAAK47hB,sBAAsBj5d,EAAKu7b,aAActub,EAAWjN,EAAKu7b,aAAazhgB,OAAQiK,EAAMq1hB,EAAWlnC,EAAWmnC,EAAc7S,OAGhI,CACD,IAAI2T,EAAiB,EACrB,IAAKjoC,EAAW,CACZ,KAAOD,EAAgB,GAAsC,MAAjCjyb,EAAKl2C,KAAKmoe,EAAgB,IAClDA,IAEJu0B,EAAY+O,qBAAqBv1d,EAAK7U,KAAM6U,EAAK7U,KAAKpe,UAAUizB,EAAMiyb,IAE1E,GAAIA,EAAgB,EAAG,CAEnB,GADAC,GAAY,EACU,IAAlBD,GAAuBonC,IAA+E,IAA9DrxC,GAAcwB,oBAAoB5tf,QAAQokE,EAAKl2C,KAAK,IAG5F,OAFA08f,EAAY+O,qBAAqBv1d,EAAK7U,KAAM6U,EAAK7U,KAAKpe,UAAUizB,EAAMiyb,SACtEonC,GAAe,GAGnB,IAAIj7O,EAAMp+O,EAAKl2C,KAAKhwB,OAASm4f,EAAgBjyb,EAAKl2C,KAAKprB,MAAM,EAAGuzf,GAAiBjyb,EAAKl2C,KAEtF,IAAwB,KADxBqwgB,EAAiBnyC,GAAcI,eAAehqM,EAAK4pM,GAAcwB,sBACtC,CACvB,GAAI4vC,EAEA,YADAC,GAAe,GAGnB,KAAOc,EAAiB,GAAKd,GAAwC,MAAxBj7O,EAAI+7O,KACgC,IAAzEnyC,GAAcwB,oBAAoB5tf,QAAQwiT,EAAI+7O,EAAiB,KACnEA,IAMJ,GAJ4B,MAAxB/7O,EAAI+7O,IAAmD,MAAxB/7O,EAAI+7O,IAA4Bd,GAC/Dc,IAEJd,GAAe,EACXc,EAAiB,EAAG,CACpB,IAAInxhB,EAASg3D,EAAK7U,KAAKpe,UAAUizB,EAAMm6d,GACnCn6d,EAAK7U,KAAK+0b,YAAcsmC,EAAYtmC,WAAal3e,IAAWw9gB,EAAYx9gB,OAExE3L,KAAKw8hB,0BAA0B75d,EAAMiN,EAAWglb,EAAeluf,EAAMq1hB,EAAWlnC,EAAWmnC,EAAc7S,GAGzGA,EAAY+O,qBAAqBv1d,EAAK7U,KAAMniD,QAG3Cg3D,EAAKu7b,wBAAwB1J,GAElCx0f,KAAK47hB,sBAAsBj5d,EAAKu7b,aAActub,EAAWjN,EAAKu7b,aAAazhgB,OAAQiK,EAAMq1hB,EAAWlnC,EAAWmnC,EAAc7S,GAG7HA,EAAY+O,qBAAqBv1d,EAAK7U,KAAM6U,EAAK7U,KAAKpe,UAAUizB,EAAM,SAI1E3iE,KAAK+8hB,sBAAsBp6d,EAAMiN,EAAWglb,EAAeluf,EAAMq1hB,EAAWlnC,EAAWmnC,EAAc7S,QAIzGnphB,KAAK+8hB,sBAAsBp6d,EAAMiN,EAAWglb,EAAeluf,EAAMq1hB,EAAWlnC,EAAWmnC,EAAc7S,KASjHiO,EAAa/7hB,UAAU0hiB,sBAAwB,SAAUp6d,EAAMiN,EAAWglb,EAAeluf,EAAMq1hB,EAAWlnC,EAAWmnC,EAAc7S,GAC3Hxmd,EAAKu7b,wBAAwBP,IAAch7b,EAAK7U,OAAS6U,EAAKu7b,aAAapwc,KAE3E9tD,KAAK47hB,sBAAsBj5d,EAAKu7b,aAActub,EAAWjN,EAAKu7b,aAAazhgB,OAAQiK,EAAMq1hB,EAAWlnC,EAAWmnC,EAAc7S,GAG7HA,EAAY+O,qBAAqBv1d,EAAK7U,KAAM8hB,EAAUgqd,mBAAmBj3d,EAAK7U,QAOtFspe,EAAa/7hB,UAAU2hiB,8BAAgC,SAAU34T,EAAc44T,GAC3E,IAAI3+J,EAAe,IAAI84J,EAAap3hB,KAAKsvf,OACzChxH,EAAa05J,2BAA2B3zT,GACxCi6J,EAAa+4J,kBAAmB,EAEhC,IADA,IAAI6F,GAAkB,EACf74T,IAAiB44T,GAAqB7F,EAAamC,mBAAmBl1T,EAAc44T,IAAoB,CAC3G,IAAKC,EAAiB,CAClB5+J,EAAa46J,kBAAiB,GAG9B,GAAI70T,IAFYi6J,EAAai5J,+BAGzB,MAGR,IAAI3iC,EAAgB,EAChBilC,EAAYv7J,EAAau4I,cAAcliB,UAAUr2H,EAAa3yX,OAAQipf,GACtExvW,EAASy0Y,EAAU74hB,QAEvB,GADA4zf,EAAgBilC,EAAU5nhB,OACrBxU,EAAkB2nJ,GAAS,CAC5B,IAAIm2Y,EAAsBv7hB,KAAK4vE,UAAUryE,MAAMg6hB,+BAC/C,GAAI3iC,IAAkBxvW,EAAO3oJ,QAAU2oJ,aAAkBkmW,IAAwC,IAArBlmW,EAAOmmW,UAAiB,CAChG,GAAInmW,EAAOt3F,KAAKpe,UAAU01G,EAAQ,KAAOplJ,KAAK2L,OAC1C,OAEJ,IAAI0yf,EAAaj5W,EAAOqmW,WAAW39b,KAC/Bute,EAAmBh9B,EAAW3ud,UAAU01G,EAAOqmW,WAAY,GAC3D6vC,EAAkBt7hB,KAAKszf,qBAAqB+K,EAAYg9B,EAAiBnuhB,YACxEkqhB,EAAamC,mBAAmBgC,EAAqBD,IACtDt7hB,KAAK4vE,UAAUryE,MAAM26hB,qBAAqB75B,EAAYg9B,GAG9D,IAAIF,EAAan7hB,KAAK4vE,UAAUwrd,0BAA0Bh2Y,EAAQwvW,IAC7Dn3f,EAAkB09hB,IAAeA,aAAsBx9B,KACxDv4W,EAAS+1Y,GAIjB,GADA+B,EAAmB93Y,aAAkBkmW,IAAwC,IAArBlmW,EAAOmmW,YAAoB9tf,EAAkB2nJ,EAAOomW,UACvF,CACjB,GAAIpmW,EAAOt3F,KAAKpe,UAAU01G,EAAQ,KAAOplJ,KAAK2L,OAC1C,OAEJ,IAAI6/e,EAAWpmW,EAAOomW,SAElB6tC,GADY7tC,EAAS19b,KAAK+0b,UACT2I,EAAS19b,KAAKpe,UAAU87c,EAAU,IACnD8tC,EAAgBt5hB,KAAKszf,qBAAqB9H,EAAS19b,KAAMure,EAAenshB,YAC5E,IAAKkqhB,EAAamC,mBAAmBD,EAAe2D,GAGhD,YADAj9hB,KAAKw5hB,aAAap0Y,EAAOomW,SAAU,GAGvCltH,EAAak7J,aAAap0Y,EAAOomW,SAAU,GAE/CnnR,EAAei6J,EAAai5J,iCAOpCH,EAAa/7hB,UAAU8hiB,+BAAiC,SAAU94T,EAAc44T,GAC5E,IAAI3+J,EAAe,IAAI84J,EAAap3hB,KAAKsvf,OACzChxH,EAAa05J,2BAA2B3zT,GACxCi6J,EAAa+4J,kBAAmB,EAEhC,IADA,IAAIkE,EAAsBv7hB,KAAK4vE,UAAUryE,MAAMg6hB,+BACxClzT,IAAiB44T,GAAqB7F,EAAamC,mBAAmB0D,EAAmB54T,IAAe,CAC3G,IAAIuwR,EAAgB,EAChBilC,EAAYv7J,EAAau4I,cAAcliB,UAAUr2H,EAAa3yX,OAAQipf,GACtExvW,EAASy0Y,EAAU74hB,QAEvB,GADA4zf,EAAgBilC,EAAU5nhB,OACrBxU,EAAkB2nJ,GAAS,CAC5B,IAAI+1Y,EAAan7hB,KAAK4vE,UAAUwrd,0BAA0Bh2Y,EAAQwvW,GAClE,GAAIumC,aAAsB7vC,IAA4C,IAAzB6vC,EAAW5vC,UAAiB,CACrE,IAAI1I,EAAYs4C,EAAW3vC,SAAS19b,KAChCure,EAAiBx2C,EAAUnzc,UAAUyrf,EAAW3vC,SAAU,GAC1D8tC,EAAgBt5hB,KAAKszf,qBAAqBzQ,EAAWw2C,EAAenshB,YACnEkqhB,EAAamC,mBAAmBD,EAAeiC,KAChDv7hB,KAAK4vE,UAAUryE,MAAM26hB,qBAAqBr1C,EAAWw2C,GACrDkC,EAAsBjC,IAIlC,GAAIl0Y,aAAkBkmW,IAAwC,IAArBlmW,EAAOmmW,YAAoB9tf,EAAkB2nJ,EAAOqmW,YAAa,CACtG,IAAI39b,EAAOs3F,EAAOqmW,WAAW39b,KACzB29b,EAAarmW,EAAOqmW,WACpB4vC,EAAmBvte,EAAKpe,UAAU+7c,EAAY,GAC9C6vC,EAAkBt7hB,KAAKszf,qBAAqBxlc,EAAMute,EAAiBnuhB,YACvE,IAAKkqhB,EAAamC,mBAAmB0D,EAAmB3B,GAGpD,YADAt7hB,KAAKw5hB,aAAap0Y,EAAOqmW,WAAY,GAGzCntH,EAAak7J,aAAap0Y,EAAOqmW,WAAY,QAG7CntH,EAAay8J,uBAEjB12T,EAAei6J,EAAai5J,iCAMpCH,EAAa/7hB,UAAU+hiB,uBAAyB,SAAUxtd,EAAWytd,GACjE,IAAI1xhB,EAASikE,EAAUgqd,mBAAmB55hB,KAAK62gB,eAC/C,GAAI72gB,KAAK2L,SAAWA,GAAU0xhB,EAAyB,CAEnD,GADqBr9hB,KAAKs9hB,kCAEtBt9hB,KAAK+5hB,+BAA+Bnqd,QAEnC,IAAKnyE,EAAkBmyE,EAAUuqd,0BAA0Bn6hB,KAAK62gB,cAAch0B,YAAa,CAC5F,IAAI06C,EAAiB3td,EAAUuqd,0BAA0Bn6hB,KAAK62gB,cAAch0B,WAC5E7if,KAAK62gB,cAAgB0mB,EAAet6C,aAAa,GACjDjjf,KAAK2L,OAASikE,EAAUgqd,mBAAmB55hB,KAAK62gB,qBAIpD72gB,KAAK62gB,cAAgB72gB,KAAK62gB,cAAch0B,UAAU8P,kBAAkB,GAAG1P,aAAa,GACpFjjf,KAAK2L,OAASA,EAElB3L,KAAK67hB,mBAKTzE,EAAa/7hB,UAAUwgiB,gBAAkB,WACrC,IAAIN,EAAsBv7hB,KAAKsvf,MAAM1/a,UAAUryE,MAAMg6hB,+BACjD0F,EAAoBj9hB,KAAKu3hB,+BACzBgE,IAAwB0B,GACxBj9hB,KAAKm9hB,+BAA+B5B,EAAqB0B,GAE7Dj9hB,KAAK83hB,wBAAuB,IAMhCV,EAAa/7hB,UAAUmiiB,6BAA+B,SAAU5td,EAAWytd,GACvE,IAAI7mC,EAAc5mb,EAAU0nd,eAAet3hB,KAAK6if,WAChD,GAAI7if,KAAK2L,SAAW6qf,GAAe6mC,EAAyB,CACnCr9hB,KAAKs9hB,kCAEtBt9hB,KAAK+5hB,+BAA+Bnqd,GAE9BnyE,EAAkBmyE,EAAUuqd,0BAA0Bn6hB,KAAK6if,cACjE7if,KAAK62gB,cAAgBjnc,EAAUuqd,0BAA0Bn6hB,KAAK6if,WAAWjme,WACzE5c,KAAK2L,OAASikE,EAAU0nd,eAAet3hB,KAAK6if,iBAIhD7if,KAAK62gB,cAAgB72gB,KAAK6if,UAAUjme,WACpC5c,KAAK2L,OAASikE,EAAUgqd,mBAAmB55hB,KAAK62gB,eAEpD,IAAI0kB,EAAsBv7hB,KAAKsvf,MAAM1/a,UAAUryE,MAAMg6hB,+BACjD0F,EAAoBj9hB,KAAKu3hB,+BACzBgE,IAAwB0B,GACxBj9hB,KAAKm9hB,+BAA+B5B,EAAqB0B,GAE7Dj9hB,KAAK83hB,wBAAuB,IAMhCV,EAAa/7hB,UAAUoiiB,2BAA6B,SAAU7td,EAAW8td,GAGrE,IADA,IAAIC,EAAoB39hB,KAAK62gB,cAAch0B,UACpC86C,EAAkB/qC,iBACrB+qC,EAAoBA,EAAkB/qC,gBAE1C5yf,KAAK62gB,cAAgB8mB,EAAkB16C,aAAa06C,EAAkB16C,aAAaxmf,OAAS,GAC5F,IAAI4jgB,EAAYrggB,KAAK62gB,cAAcrZ,eAAiB,EACpD,GAAIx9f,KAAK2L,SAAW00f,GAAaq9B,EAAqB,CAElD,GADmB19hB,KAAKs9hB,kCAEpBt9hB,KAAK49hB,kCAEJ,IAAKngiB,EAAkBmyE,EAAU2qd,sBAAsBv6hB,KAAK62gB,cAAch0B,YAAa,CACxF,IAAI61C,EAAe9od,EAAU2qd,sBAAsBv6hB,KAAK62gB,cAAch0B,WACtE7if,KAAK62gB,cAAgB6hB,EAAaz1C,aAAay1C,EAAaz1C,aAAaxmf,OAAS,GAClFuD,KAAK2L,OAAS3L,KAAK62gB,cAAcrZ,eAAiB,QAItDx9f,KAAK2L,OAAS00f,EAElBrggB,KAAK67hB,mBAKTzE,EAAa/7hB,UAAUkvM,OAAS,SAAU36H,EAAWpjE,GACjD,IAAIq2e,EAAY7if,KAAK62gB,cAAch0B,UAEnC7if,KAAK69hB,wBAAwBjud,GAAW,GAExC5vE,KAAK+6hB,uBACL,IAAI/B,OAAW79hB,EACXm9gB,EAAmBt4gB,KAAK62gB,cAAch0B,UAC1C,GAAIA,EAAUuR,eAAiBvR,IAAcy1B,GAAoBz1B,EAAUwR,iBAAmBikB,EAAiBjkB,iBAEtG52f,EAAkB66gB,EAAiBjkB,iBAAoBxR,EAAUwR,eAAeH,WAAaokB,EAAiBjkB,eAAeH,SAAY,CAC9I,IAAIA,EAAWokB,EAAiBjkB,eAAeH,SAC/C,GAAIA,EAAS/B,kCAAkCF,GAAgB,CAE3D,IAAIhvb,EAAO2M,EAAUkud,qBAAqB5pC,EAAS/B,uBAAwBmmB,EAAiBjkB,eAAgB7nf,GAAM,GAC9GuxhB,EAAgBnud,EAAUoud,iBAAiB/6d,GAC/CjjE,KAAK6Y,YAAYklhB,EAAc96C,aAAa86C,EAAc96C,aAAaxmf,OAAS,IAAI,OAEnF,CACD,IAAIwhiB,EAAY/pC,EAASD,WAAW9B,uBACpC,GACQ8rC,aAAqBlrC,KACrBkrC,EAAYrud,EAAUsud,uBAAuBD,UAE5CA,aAAqBlrC,IAC1BkrC,aAAqBn7C,IACrB9if,KAAK6Y,YAAYolhB,EAAUh7C,aAAag7C,EAAUh7C,aAAaxmf,OAAS,IAAI,GAGpFu8hB,EAAWppd,EAAUuud,uBAAuBn+hB,KAAK2L,OAAQ3L,KAAK62gB,mBAE7D,CACD,IAAKh0B,EAAUuR,eAAiBp0f,KAAK62gB,cAAch0B,UAAUuR,cAAe,CAEpEnxb,EAAO2M,EAAUkud,qBAAqB99hB,KAAK62gB,cAAch0B,UAAUwR,eAAeH,SAAUl0f,KAAK62gB,cAAch0B,UAAUwR,eAAgBr0f,KAAKsvf,MAAM1/a,UAAUwud,uBAAuB,GACrLL,EAAgBnud,EAAUoud,iBAAiB/6d,GAC/CjjE,KAAK6Y,YAAYklhB,EAAc96C,aAAa86C,EAAc96C,aAAaxmf,OAAS,IAAI,QAGnF,GAAIomf,EAAUuR,gBAAmB32f,EAAkBuC,KAAK62gB,cAAch0B,UAAUwR,iBAAmBxR,EAAUwR,eAAeH,SAAS/B,yBAA2BtP,EAAUwR,eAAeH,SAASxB,qBACnM7P,EAAUwR,eAAeH,SAAS/B,yBAA2Bnyf,KAAK62gB,cAAch0B,UAAUwR,eAAeH,SAAW,CAEhHjxb,EAAO2M,EAAUyud,oBAAoBr+hB,KAAK62gB,cAAch0B,UAAUwR,eAAeH,SAAUl0f,KAAK62gB,cAAch0B,UAAUwR,eAAgBr0f,KAAKsvf,MAAM1/a,UAAUwud,uBAAuB,GACpLL,EAAgBnud,EAAUoud,iBAAiB/6d,GAC/CjjE,KAAK6Y,YAAYklhB,EAAc96C,aAAa86C,EAAc96C,aAAaxmf,OAAS,IAAI,GAExFu8hB,EAAWppd,EAAUuud,uBAAuBn+hB,KAAK2L,OAAQ3L,KAAK62gB,eAGlE,IAAInqgB,EAAMkjE,EAAUkvM,OAAOk6Q,GAC3Bppd,EAAU0ud,yBAAyBtF,EAAU,IAAI9+e,GAAM1tC,EAAME,GAAM1M,MAAM,IAK7Eo3hB,EAAa/7hB,UAAUivM,SAAW,SAAU16H,EAAWpjE,GAEnD,IAAI2xf,EAAgBn+f,KAAK62gB,cAAch0B,UACtB7if,KAAK2L,OACtB3L,KAAKu+hB,sBAAsB3ud,GAAW,GACtC,IAAInzE,EAASuD,KAAK4vE,UAAU+nd,mBAAmB33hB,KAAK62gB,cAAch0B,WAC9D7if,KAAK2L,OAASlP,IACduD,KAAK2L,OAASlP,GAGlBuD,KAAKk5hB,mBACL,IAAI96B,OAAWjjgB,EAEf,GAAIgjgB,EAAc/J,eAAiB+J,IAAkBn+f,KAAK62gB,cAAch0B,WAAasb,EAAc9J,iBAAmBr0f,KAAK62gB,cAAch0B,UAAUwR,iBAAoB52f,EAAkBuC,KAAK62gB,cAAch0B,UAAUwR,iBAAmB8J,EAAc9J,eAAeH,WAAal0f,KAAK62gB,cAAch0B,UAAUwR,eAAeH,SAAW,CACtU,IAAIA,EAAWl0f,KAAK62gB,cAAch0B,UAAUwR,eAAeH,SAO3D,GALIiK,EAAc/J,eAAiBp0f,KAAK62gB,cAAch0B,UAAUuR,eAAiB+J,EAAc9J,eAAeC,WAAWr9N,QAAU,GAAKknO,EAAc9J,eAAeC,WAAWr9N,QAAUknO,EAAc9J,eAAeH,SAASzzN,WAAa09N,EAAc9J,eAAeJ,WAAWhR,aAAaxmf,SAG9Ry3f,EAAWl0f,KAAK62gB,cAAch0B,UAAUwR,eAAeJ,WAAWhR,aAAajjf,KAAK62gB,cAAch0B,UAAUwR,eAAeJ,WAAWhR,aAAaxmf,OAAS,IAE5Jy3f,EAAS5B,8BAA8BL,GAAgB,CAEvD,IAAIhvb,EAAOjjE,KAAK4vE,UAAUyud,oBAAoBnqC,EAAS5B,mBAAoBtyf,KAAK62gB,cAAch0B,UAAUwR,eAAgB7nf,GAAM,GAC9HxM,KAAK6Y,YAAY7Y,KAAK4vE,UAAU4ud,kBAAkBv7d,GAAMggb,aAAa,IAAI,OAExE,CACD,IAAIyjB,EAAY1mgB,KAAK4vE,UAAUmpd,qBAAqB7kC,EAASD,YAC7D,GACQyS,aAAqB3T,KACrB2T,EAAY1mgB,KAAK4vE,UAAU6ud,yBAAyB/3B,UAEnDA,aAAqB3T,IAC1B2T,aAAqB5jB,IACrB9if,KAAK6Y,YAAY6tf,EAAUzjB,aAAa,IAAI,GAGpDmb,EAAWxub,EAAUuud,uBAAuBn+hB,KAAK2L,OAAQ3L,KAAK62gB,mBAE7D,CACD,IAAK1Y,EAAc/J,eAAiBp0f,KAAK62gB,cAAch0B,UAAUuR,cAAe,CAExEnxb,EAAOjjE,KAAK4vE,UAAUyud,oBAAoBr+hB,KAAK62gB,cAAch0B,UAAUwR,eAAeH,SAAUl0f,KAAK62gB,cAAch0B,UAAUwR,eAAgBr0f,KAAKsvf,MAAM1/a,UAAUwud,uBAAuB,GAC7Lp+hB,KAAK6Y,YAAY7Y,KAAK4vE,UAAU4ud,kBAAkBv7d,GAAMggb,aAAa,IAAI,QAGxE,GAAIkb,EAAc/J,gBAAmB32f,EAAkBuC,KAAK62gB,cAAch0B,UAAUwR,iBAAmB8J,EAAc9J,eAAeH,SAAS5B,qBAAuB6L,EAAc9J,eAAeH,SAAStB,iBACxMuL,EAAc9J,eAAeH,SAAS5B,qBAAuBtyf,KAAK62gB,cAAch0B,UAAUwR,eAAeH,SAAW,CAEnHjxb,EAAO2M,EAAUyud,oBAAoBr+hB,KAAK62gB,cAAch0B,UAAUwR,eAAeH,SAAUl0f,KAAK62gB,cAAch0B,UAAUwR,eAAgBr0f,KAAKsvf,MAAM1/a,UAAUwud,uBAAuB,GACxLp+hB,KAAK6Y,YAAY+2D,EAAU4ud,kBAAkBv7d,GAAMggb,aAAa,IAAI,GAExEmb,EAAWxub,EAAUuud,uBAAuBn+hB,KAAK2L,OAAQ3L,KAAK62gB,eAGlE,IAAInqgB,EAAM1M,KAAK4vE,UAAUkvM,OAAOs/O,GAChCp+f,KAAK4vE,UAAU0ud,yBAAyBlgC,EAAU,IAAIlkd,GAAM1tC,EAAME,GAAM1M,MAAM,IAMlFo3hB,EAAa/7hB,UAAUwiiB,wBAA0B,SAAUjud,EAAW8ud,GAC9D1+hB,KAAK0tB,SAAS3gB,EAAI/M,KAAKo6e,OAAO+rB,iBAAiB15f,QAC/CzM,KAAK2L,OAAS3L,KAAK2L,OAAS,GAEhC,IAAIi+f,EAAch6b,EAAUw5c,sBAAsBpphB,KAAK62gB,cAAe72gB,KAAK2L,OAAQ+yhB,GAC/Ej5P,EAAe71N,EAAU+ud,wBAAwB/0B,GACjDpT,EAAc5mb,EAAU0nd,eAAet3hB,KAAK62gB,cAAch0B,WAC9D,GAAIplf,EAAkBgoS,IAAiBzlS,KAAK2L,OAAS6qf,EAAa,CAC9D,IAAIvkf,EAAQ,EAERmzI,GADAy0Y,EAAY75hB,KAAK62gB,cAAcliB,UAAU30f,KAAK2L,OAAQsG,IACnCjR,QACvBiR,EAAQ4nhB,EAAU5nhB,MACdmzI,aAAkBovW,IAAkC,OAAhBpvW,EAAO34H,OAC3CzsB,KAAK2L,OAAS6qf,QAGjB,IAAK/4f,EAAkBgoS,GAAe,CACvC,IAAImvN,EAAgBhlb,EAAUgvd,iBAAiBn5P,GAC/CzlS,KAAK62gB,cAAgBpxO,EAAa33O,KAClC9tD,KAAK2L,OAAS3L,KAAK62gB,cAAcnne,UAAU+1P,EAAcmvN,GACzDA,EAAgB,EAChB,IAAIilC,EACAz0Y,GADAy0Y,EAAY75hB,KAAK62gB,cAAcliB,UAAU30f,KAAK2L,OAAQipf,IACnC5zf,QAEvB,GADA4zf,EAAgBilC,EAAU5nhB,MACtBmzI,aAAkBkmW,GAAiB,CAEnC,IAAIuzC,EAAajvd,EAAUird,wBAAwBz1Y,GAC9C3nJ,EAAkBohiB,KACnBz5Y,EAASy5Y,EACT7+hB,KAAK62gB,cAAgBzxX,EAAOt3F,KAC5B9tD,KAAK2L,OAAS3L,KAAK62gB,cAAcnne,UAAU01G,EAAQA,EAAO3oJ,QACtD2oJ,aAAkBkmW,IAClBtrf,KAAK2L,WAKrB3L,KAAK83hB,wBAAuB,IAMhCV,EAAa/7hB,UAAUiiiB,gCAAkC,WACrD,SAAKt9hB,KAAK4vE,UAAUryE,MAAMslf,UAAUuR,gBAAiBp0f,KAAK6if,UAAUuR,eAC5Dp0f,KAAK4vE,UAAUryE,MAAMslf,UAAUwR,iBAAmBr0f,KAAK6if,UAAUwR,iBAC9Dr0f,KAAK4vE,UAAU20b,eAAevkgB,KAAK4vE,UAAUryE,MAAMslf,UAAUwR,eAAgBr0f,KAAK4vE,UAAUryE,MAAOyC,QASlHo3hB,EAAa/7hB,UAAUyjiB,sBAAwB,SAAUp4hB,EAAMu1hB,GAI3D,IAAI8C,EAAiB,EACjB1+B,EAAYrggB,KAAK62gB,cAAcrZ,eASnC,GARIx9f,KAAK4vE,UAAUogc,qBAAqBhwgB,KAAK62gB,iBACrC72gB,KAAK62gB,cAAcz8f,SAAS,aAAc26e,KAC1CgqC,EAAiB,GAEjB/+hB,KAAK62gB,cAAcz8f,SAAS,aAAc26e,KAC1CgqC,EAAiB,IAGrB/+hB,KAAK2L,OAASozhB,IAAmB1+B,GAAarggB,KAAK2L,SAAW00f,EAAY,EAC1E,GAAIrggB,KAAK2L,SAAW00f,GAAsB,IAAT35f,EAC7B1G,KAAKk4hB,qBAAqBl4hB,KAAK62gB,cAAexW,EAAY,OAEzD,CACD,IAAIsN,EAAgB3tgB,KAAK4vE,UAAU2qd,sBAAsBv6hB,KAAK62gB,cAAch0B,WAC5E,GAAIplf,EAAkBkwgB,GAClB,OAIJ,GAFA3tgB,KAAK62gB,cAAgBlJ,EAAc1qB,aAAa,GAChDjjf,KAAK2L,OAAS3L,KAAK4vE,UAAUgqd,mBAAmB55hB,KAAK62gB,eACxC,IAATnwgB,EAAY,CAEG1G,KAAKs9hB,kCAEhBt9hB,KAAK49hB,6BAGL59hB,KAAK8+hB,sBAAsBp4hB,EAAMu1hB,QAK5C,CACD,IAAIrnC,EAAgB,EAEhBilC,EAAY75hB,KAAK62gB,cAAcliB,UAAU30f,KAAK2L,OAAQipf,GACtDxvW,EAASy0Y,EAAU74hB,QACvB4zf,EAAgBilC,EAAU5nhB,MAC1BjS,KAAK87hB,kBAAkB12Y,EAAQwvW,EAAeluf,GAAM,GAJjC,EAIsD1G,KAAMi8hB,GAEnF,GAAa,IAATv1hB,EAAY,CACZ,IAAI60hB,EAAsBv7hB,KAAKsvf,MAAM1/a,UAAUryE,MAAMg6hB,+BACjD0F,EAAoBj9hB,KAAKu3hB,+BACzBgE,IAAwB0B,GACxBj9hB,KAAKg9hB,8BAA8BzB,EAAqB0B,GAGhEj9hB,KAAK83hB,wBAAuB,IAMhCV,EAAa/7hB,UAAUuiiB,2BAA6B,WAChD,IAAI/6C,EAAY7if,KAAK62gB,cAAch0B,UAC/B8qB,EAAiB9qB,EAAuB,cAAI7if,KAAK4vE,UAAUovd,qBAAqBn8C,EAAUwR,gBAC1Fr0f,KAAK4vE,UAAU2qd,sBAAsB13C,GACrCplf,EAAkBkwgB,KAGtB3tgB,KAAK62gB,cAAgBlJ,EAAc1qB,aAAa0qB,EAAc1qB,aAAaxmf,OAAS,GACpFuD,KAAK2L,OAAS3L,KAAK62gB,cAAcrZ,eAAiB,IAKtD45B,EAAa/7hB,UAAUgiiB,wBAA0B,SAAUztd,GACvD,IAAI4mb,EAAc5mb,EAAU0nd,eAAet3hB,KAAK62gB,cAAch0B,WAE9D,GAAI7if,KAAK2L,SAAW6qf,GAAgB/4f,EAAkBmyE,EAAUuqd,0BAA0Bn6hB,KAAK62gB,cAAch0B,YAMzG7if,KAAK2L,OAASikE,EAAU0nd,eAAet3hB,KAAK62gB,cAAch0B,eAN4D,CACtH,IAAIm3C,EAAoBpqd,EAAUuqd,0BAA0Bn6hB,KAAK62gB,cAAch0B,WAC/E7if,KAAK62gB,cAAgBmjB,EAAkB/2C,aAAa,GACpDjjf,KAAK2L,OAASikE,EAAU0nd,eAAet3hB,KAAK62gB,cAAch0B,WAK9D7if,KAAK83hB,wBAAuB,IAMhCV,EAAa/7hB,UAAUqjiB,mBAAqB,SAAU9ud,EAAWpjE,GAC7D,IAAI63N,EAAerkO,KAAKu3hB,+BACpB3tB,EAAch6b,EAAUuud,uBAAuBn+hB,KAAK2L,OAAQ3L,KAAK62gB,eAErE72gB,KAAK69hB,wBAAwBjud,GAAW,GACpC5vE,KAAK62gB,cAAch0B,UAAUuR,cAC7Bp0f,KAAKi/hB,cAAcrvd,GAGnB5vE,KAAKk7hB,eAET,IAAIlC,EAAWppd,EAAUuud,uBAAuBn+hB,KAAK2L,OAAQ3L,KAAK62gB,eAC9DqoB,EAAYtvd,EAAU8uM,QAAQs6Q,GAGlC,GAFgBppd,EAAU2yL,SAASy2R,GAAU,GAE7BkG,GAAa1yhB,GAAQo9f,IAAgBovB,EAAU,CAC3D,IAAIn4e,EAAQ+uB,EAAUkvM,OAAOk6Q,GACzBllgB,EAAQ,IAAIomB,GAAM1tC,EAAMq0C,GAC5B+uB,EAAU0ud,yBAAyBtF,EAAUllgB,EAAO9zB,MAAM,GAG9D,IAAIi9hB,EAAoBj9hB,KAAKu3hB,+BAC7Bv3hB,KAAKm9hB,+BAA+B94T,EAAc44T,IAKtD7F,EAAa/7hB,UAAUkjiB,sBAAwB,SAAU3ud,EAAWu5b,GAC5DnpgB,KAAK0tB,SAAS3gB,EAAI/M,KAAKo6e,OAAO+rB,iBAAiB15f,QAC/CzM,KAAK2L,OAAS3L,KAAK2L,OAAS,GAEhC,IAAIi+f,EAAch6b,EAAUuud,uBAAuBn+hB,KAAK2L,OAAQ3L,KAAK62gB,eACjEpxO,EAAe71N,EAAU+ud,wBAAwB/0B,GACrD,GAAInsgB,EAAkBgoS,IAAiBzlS,KAAK2L,SAAWikE,EAAUgqd,mBAAmB55hB,KAAK62gB,eACrF72gB,KAAK2L,OAASikE,EAAU+nd,mBAAmB33hB,KAAK6if,WAAa,EAC7D7if,KAAK83hB,wBAAuB,QAE3B,IAAKr6hB,EAAkBgoS,GAAe,CACvC,IAAI05P,EAAcv1B,EAAYxvf,SAASwvf,EAAYxvf,SAAS3d,OAAS,GACjEwV,EAAQ,EAGZ,GAFAA,GAASkthB,aAAuB3qC,GAAiB2qC,EAAY1iiB,OAAS,EACtEuD,KAAK62gB,cAAgBsoB,EAAYrxe,KAC7B77C,IAAUkthB,EAAY1iiB,QACnBgB,EAAkB0hiB,EAAYxtO,WAAa/hP,EAAUqgc,oBAAoBjwgB,KAAK62gB,eAAgB,CACjG,IAAIp8e,EAAWm1C,EAAUipd,cAAc74hB,KAAK62gB,eAC5C72gB,KAAK2L,OAASw9f,EAAiB1ue,EAAW,EAAIA,MAE7C,CAED,IADA,IAAI2qH,EAAS+5Y,GACL1hiB,EAAkB2nJ,IAAWA,EAAO3oJ,SAAWwV,GAASmzI,EAAOusK,oBAAoB25L,IAAiB,CACxG,IAAI6vC,EAAavrd,EAAU+pd,oBAAoBv0Y,EAAOusK,UAKtD,GAJIvsK,IAAW+1Y,IACX/1Y,EAAS+1Y,EACTlphB,EAAQ,GAERmzI,aAAkBkmW,IAAwC,IAArBlmW,EAAOmmW,YACxC9tf,EAAkB2nJ,EAAOomW,UAAW,CACxC,IAAIC,EAAarmW,EACb3nJ,EAAkBguf,EAAWsS,gBAC7B34W,EAASqmW,EAAWD,UAGpBpmW,EAASqmW,EAAWsS,eACpB/9f,KAAK62gB,cAAgBzxX,EAAOt3F,KACxB9tD,KAAK62gB,gBAAkBprB,EAAWD,SAAS19b,MACvC8hB,EAAUqrd,eAAej7hB,KAAK62gB,cAAch0B,UAAWz9V,EAAQqmW,EAAWD,YAC9EpmW,EAASqmW,EAAWD,WAG5Bxrf,KAAK62gB,cAAgBzxX,EAAOt3F,KAE5Bs3F,aAAkBkmW,KAClBr5e,EAAQ,GAGZA,IAAUmzI,EAAO3oJ,QAAUgB,EAAkB2nJ,EAAOusK,WACpD1/S,KAECk3f,GAAkB/jX,aAAkBu4W,IAA8B,OAAhBv4W,EAAO34H,MAC1Dxa,IAEJjS,KAAK2L,OAAS3L,KAAK62gB,cAAcnne,UAAU01G,EAAQnzI,GAEvDjS,KAAK83hB,uBAAuB3uB,KAOpCiuB,EAAa/7hB,UAAU8tgB,eAAiB,SAAU38f,GAC9C,IAAIojE,EAAY5vE,KAAK4vE,UACjB0uT,EAAe,IAAI84J,EAAap3hB,KAAKsvf,OACzChxH,EAAay5J,oBAAoB/3hB,MACjC,IAAIqkO,EAAerkO,KAAKu3hB,+BACN3nd,EAAUuud,uBAAuBn+hB,KAAK2L,OAAQ3L,KAAK62gB,eACjD72gB,KAAK2L,OAEzB3L,KAAKu+hB,sBAAsB3ud,GAAW,GACtC,IAAIwvd,GAAmB9gK,EAAa+5J,iBAAiBr4hB,MACrDs+X,EAAay5J,oBAAoB/3hB,MAC7BA,KAAK62gB,cAAch0B,UAAUuR,cAC7Bp0f,KAAKq/hB,gBAAgBzvd,IAGrB5vE,KAAKk5hB,mBACLl5hB,KAAKw/a,eAET,IAAI4+E,EAAWxub,EAAUuud,uBAAuBn+hB,KAAK2L,OAAQ3L,KAAK62gB,eAC9DqoB,EAAYtvd,EAAU8uM,QAAQ0/O,GAC9B34N,EAAe71N,EAAU+ud,wBAAwBvgC,GAEjDkhC,EAAiB7hiB,EAAkBgoS,GAAgB71N,EAAU2yL,SAAS67P,GAAU,GAAQxub,EAAU2vd,gBAAgBnhC,EAAU34N,EAAc,GAAKy5P,EAEnJ,GAAIA,EAAY1yhB,GAAS8yhB,EAAiB,EAAI9yhB,EAAO0yhB,EAAY,CAC7D,IAAIzrH,EAAQ7jW,EAAUkvM,OAAOs/O,GACzBtqe,EAAQ,IAAIomB,GAAM1tC,EAAMina,GAC5B7jW,EAAU0ud,yBAAyBlgC,EAAUtqe,EAAO9zB,MAAM,GAC9C4vE,EAAU2yL,SAAS67P,GAAU,GAC7B5xf,EAAO0yhB,GACfl/hB,KAAKu+hB,sBAAsB3ud,GAAW,QAGrCwvd,GAAmBp/hB,KAAK62gB,cAAch0B,UAAUuR,eAClDp0f,KAAK62gB,gBAAkB72gB,KAAKsvf,MAAM1/a,UAAUryE,MAAMs5gB,cACrD72gB,KAAK+3hB,oBAAoBz5J,GAEnB8gK,GACNp/hB,KAAKu+hB,sBAAsB3ud,GAAW,GAG1C,IAAIqtd,EAAoBj9hB,KAAKu3hB,+BAC7Bv3hB,KAAKg9hB,8BAA8B34T,EAAc44T,IAMrD7F,EAAa/7hB,UAAU4jiB,cAAgB,SAAUrvd,GAC7C,IAAI4vd,GAAoB,EACpB3ghB,EAAM7e,KAAKsvf,MAAM1/a,UAAU/wD,IAC3B4ghB,GAAuBz/hB,KAAKsvf,MAAM1/a,UAAU0qK,QAEhD,GADAklT,EAAoB3ghB,EAAIgke,UAAUuR,cACX,CACnB,IAAI+D,EAAYn4f,KAAK62gB,cAAch0B,UAAUwR,eACzC+D,EAAUv5e,EAAIgke,UAAUwR,eACxBqrC,EAAgB9vd,EAAU0qd,mBAAmBliC,EAASD,GAE1D,GADAqnC,EAAoBE,EAAczrC,WAAW9vf,SAASg0f,GAC/B,CACnBC,EAAUxob,EAAU+vd,gBAAgBvnC,EAASsnC,GAC7CvnC,EAAYvob,EAAU+vd,gBAAgBxnC,EAAWunC,GAEjD,IAAIE,EAAoBhwd,EAAUiwd,aAAaH,EAAe1/hB,KAAK62gB,cAAch0B,UAAUwR,gBACvFyrC,EAA0Blwd,EAAU20b,eAAem7B,EAAe1/hB,KAAM6e,GAK5E,GAJKihhB,IAEDA,EAA0B9/hB,KAAK62gB,cAAch0B,YAAcjza,EAAU4ud,kBAAkBkB,IAAkB1/hB,KAAK+/hB,qBAE7GH,GAAqBE,IAClBF,KAAuBniiB,EAAkB06f,EAAUjE,SAAS/B,wBAAyB,CAEzF,IAAIzxb,EAAMy3b,EAAUjE,SAAS/B,uBAEzBlvb,EAAO2M,EAAUkud,qBAAqBp9d,EAAKg/d,EAAe1/hB,KAAKsvf,MAAM1/a,UAAUwud,uBAAuB,GACtGpE,EAAoBpqd,EAAUoud,iBAAiB/6d,GAEnD,YADAjjE,KAAK6Y,YAAYmhhB,EAAkB/2C,aAAa,IAAI,GAGnD,GAAI28C,GAAqBE,GACvBriiB,EAAkB06f,EAAUjE,SAAS/B,0BAA4BytC,EACpE,GAAIH,EAAqB,CAErBtnC,EAAYA,EAAUjE,SAASjR,aAAa,GACxC+2C,EAAoBpqd,EAAU4ud,kBAAkBrmC,GACpDn4f,KAAK6Y,YAAYmhhB,EAAkB/2C,aAAa,IAAI,OAEnD,CAEDkV,EAAYA,EAAUjE,SAASjR,aAAakV,EAAUjE,SAASjR,aAAaxmf,OAAS,GACjFu9hB,EAAoBpqd,EAAUoud,iBAAiB7lC,GACnDn4f,KAAK6Y,YAAYmhhB,EAAkB/2C,aAAa,IAAI,KAKpE,IAAKu8C,EAAmB,CAEhBv8d,EAAO2M,EAAUowd,iBAAiBhgiB,KAAK62gB,cAAch0B,UAAUwR,gBACnE,GAAIorC,EAAqB,CAErBx8d,EAAOA,EAAKixb,SAASjR,aAAa,GAC9B+2C,EAAoBpqd,EAAU4ud,kBAAkBv7d,GACpDjjE,KAAK6Y,YAAYmhhB,EAAkB/2C,aAAa,IAAI,OAEnD,CAEDhgb,EAAOA,EAAKixb,SAASjR,aAAahgb,EAAKixb,SAASjR,aAAaxmf,OAAS,GAClEu9hB,EAAoBpqd,EAAUoud,iBAAiB/6d,GACnDjjE,KAAK6Y,YAAYmhhB,EAAkB/2C,aAAa,IAAI,IAI5Djjf,KAAKk7hB,gBAMT9D,EAAa/7hB,UAAUgkiB,gBAAkB,SAAUzvd,GAC/C,IAAI4vd,GAAoB,EACpBjG,EAAqBv5hB,KAAKsvf,MAAM1/a,UAAU0qK,SAAWt6O,KAAKsvf,MAAM1/a,UAAUqwd,UAE9E,GADAT,EAAoBx/hB,KAAKsvf,MAAM1/a,UAAUryE,MAAMslf,UAAUuR,cAClC,CACnB,IAAI+D,EAAYn4f,KAAKsvf,MAAM1/a,UAAUryE,MAAMslf,UAAUwR,eACjD+D,EAAUp4f,KAAK62gB,cAAch0B,UAAUwR,eACvCqrC,EAAgB9vd,EAAU0qd,mBAAmBniC,EAAWC,GAE5D,GADAonC,EAAoBE,EAAczrC,WAAW9vf,SAASi0f,GAC/B,CACnBD,EAAYvob,EAAU+vd,gBAAgBxnC,EAAWunC,GACjDtnC,EAAUxob,EAAU+vd,gBAAgBvnC,EAASsnC,GAE7C,IAAIE,EAAoBhwd,EAAUiwd,aAAaH,EAAe1/hB,KAAK62gB,cAAch0B,UAAUwR,gBACvFyrC,EAA0Blwd,EAAU20b,eAAem7B,EAAe1/hB,KAAKsvf,MAAM1/a,UAAUryE,MAAOyC,MAClG,IAAK4/hB,GAAqBE,IAClBF,KAAuBniiB,EAAkB26f,EAAQlE,SAAS5B,oBAAqB,CAEnF,IAAI5xb,EAAM03b,EAAQlE,SAAS5B,mBAEvBrvb,EAAO2M,EAAUyud,oBAAoB39d,EAAKg/d,EAAe1/hB,KAAKsvf,MAAM1/a,UAAUwud,uBAAuB,GACrGL,EAAgBnud,EAAUoud,iBAAiB/6d,GAE/C,YADAjjE,KAAK6Y,YAAYklhB,EAAc96C,aAAa86C,EAAc96C,aAAaxmf,OAAS,IAAI,GAGnF,GAAImjiB,GAAqBE,GACvBriiB,EAAkB26f,EAAQlE,SAAS5B,sBAAwBstC,EAC9D,GAAIrG,EAAoB,CAEpBnhC,EAAUA,EAAQlE,SAASjR,aAAamV,EAAQlE,SAASjR,aAAaxmf,OAAS,GAC3EshiB,EAAgBnud,EAAUoud,iBAAiB5lC,GAC/Cp4f,KAAK6Y,YAAYklhB,EAAc96C,aAAa86C,EAAc96C,aAAaxmf,OAAS,IAAI,OAEnF,CAED27f,EAAUA,EAAQlE,SAASjR,aAAa,GACpC86C,EAAgBnud,EAAU4ud,kBAAkBpmC,GAChDp4f,KAAK6Y,YAAYklhB,EAAc96C,aAAa86C,EAAc96C,aAAaxmf,OAAS,IAAI,KAKpG,IAAK+iiB,EAAmB,CAEhBv8d,EAAO2M,EAAUowd,iBAAiBhgiB,KAAK62gB,cAAch0B,UAAUwR,gBACnE,GAAIklC,EAAoB,CAEpBt2d,EAAOA,EAAKixb,SAASjR,aAAahgb,EAAKixb,SAASjR,aAAaxmf,OAAS,GAClEshiB,EAAgBnud,EAAUoud,iBAAiB/6d,GAC/CjjE,KAAK6Y,YAAYklhB,EAAc96C,aAAa86C,EAAc96C,aAAaxmf,OAAS,IAAI,QAEnF,GAAIwmE,EAAKixb,SAAS5B,mBAAoB,CAEvCrvb,EAAOA,EAAKixb,SAAS5B,mBAAmBrP,aAAa,GACjD86C,EAAgBnud,EAAU4ud,kBAAkBv7d,GAChDjjE,KAAK6Y,YAAYklhB,EAAc96C,aAAa86C,EAAc96C,aAAaxmf,OAAS,IAAI,IAI5FuD,KAAKw/a,eAKT43G,EAAa/7hB,UAAUiX,QAAU,WAC7BtS,KAAK2L,YAASxQ,EACd6E,KAAKq3hB,sBAAmBl8hB,EACnBsC,EAAkBuC,KAAK0tB,WACxB1tB,KAAK0tB,SAASpb,UAElBtS,KAAK0tB,cAAWvyB,EAChB6E,KAAK62gB,mBAAgB17gB,EACrB6E,KAAKsvf,WAAQn0f,EACb6E,KAAKo6e,YAASj/e,GAEXi8hB,KAMP8I,GAAqC,WACrC,SAASA,EAAoB1zhB,EAAMwJ,GAC/BhW,KAAKguf,OAAS,EACdhuf,KAAKmgiB,QAAU,EACfngiB,KAAKguf,OAASxhf,EACdxM,KAAKmgiB,QAAUnqhB,EAyCnB,OAvCA1X,OAAOuJ,eAAeq4hB,EAAoB7kiB,UAAW,QAIjDqM,IAAK,WACD,OAAO1H,KAAKguf,QAKhB3mf,IAAK,SAAUrK,GACXgD,KAAKguf,OAAShxf,GAElB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeq4hB,EAAoB7kiB,UAAW,SAIjDqM,IAAK,WACD,OAAO1H,KAAKmgiB,SAKhB94hB,IAAK,SAAUrK,GACXgD,KAAKmgiB,QAAUnjiB,GAEnB2K,YAAY,EACZC,cAAc,IAKlBs4hB,EAAoB7kiB,UAAUiX,QAAU,WACpCtS,KAAKmgiB,aAAUhliB,EACf6E,KAAKguf,YAAS7yf,GAEX+kiB,KAMP/6I,GAA2B,WAC3B,SAASA,EAAUi7I,EAAexwd,GAC9B5vE,KAAKqgiB,aAAe,GACpBrgiB,KAAKsgiB,SAAW,GAChBtgiB,KAAKugiB,gBAAiB,EACtB,IAAInnB,EAAYxpc,EAAUypc,aAAa+mB,GAEL,cADlBhnB,EAAUxjgB,cACZsO,UAAU,EAAG,IACvBlkB,KAAKwgiB,iBAAiBpnB,EAAUl1f,UAAU,GAAGhU,OAAQ0/D,GAiH7D,OA9GAtxE,OAAOuJ,eAAes9Y,EAAU9pZ,UAAW,kBAMvCqM,IAAK,WACD,OAAO1H,KAAKqgiB,cAEhB14hB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAes9Y,EAAU9pZ,UAAW,kBAMvCqM,IAAK,WACD,OAAO1H,KAAKsgiB,UAEhB34hB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAes9Y,EAAU9pZ,UAAW,YAMvCqM,IAAK,WACD,OAAO1H,KAAKygiB,cAEhB94hB,YAAY,EACZC,cAAc,IAOlBu9Y,EAAU9pZ,UAAUmliB,iBAAmB,SAAUxjiB,EAAO4yE,GAGpD,IAAK,IAFD2wJ,EAAQvjO,EAAME,MAAM,KACpBwjiB,GAAa,EACRvkiB,EAAI,EAAGA,EAAIokO,EAAM9jO,OAAQN,IAAK,CACnC,IAAI8sB,EAAOs3M,EAAMpkO,GACb8sB,EAAKxsB,OAAS,IAGL,QAATwsB,GAA2B,QAATA,EAClBy3gB,GAAa,EAEC,QAATz3gB,EACLjpB,KAAKugiB,gBAAiB,GAGtBt3gB,EAAOjpB,KAAK2giB,gBAAgB13gB,EAAkB,MAAZA,EAAK,GAAc,SAAO9tB,GACxDuliB,GACA1giB,KAAKsgiB,SAAWr3gB,EAChBy3gB,GAAa,GAGb1giB,KAAKqgiB,aAAep3gB,IAIhCjpB,KAAK4giB,eAETz7I,EAAU9pZ,UAAUsliB,gBAAkB,SAAU3jiB,EAAO6jiB,GACnD7jiB,EAAQA,EAAMknB,UAAU,GACxB,IAAI0B,EAAWi7gB,EAAU7jiB,EAAMuB,QAAQsiiB,IAAY,EAInD,OAHIj7gB,EAAW,IACXA,EAAW5oB,EAAMP,QAEdO,EAAMknB,UAAU,EAAG0B,GAAU1V,QAExCi1Y,EAAU9pZ,UAAUuliB,YAAc,WAE1BnjiB,EAAkBuC,KAAKqgiB,eAAiBrgiB,KAAKqgiB,aAAa5jiB,OAAS,EACnEuD,KAAKygiB,aAAe,qBAIpBzgiB,KAAKqgiB,aAAan8gB,UAAU,EAAG,GAC/BlkB,KAAKqgiB,aAAe,UAAYrgiB,KAAK8giB,eAEP,MAAzB9giB,KAAKqgiB,aAAa,KACvBrgiB,KAAKqgiB,aAAe,UAAYrgiB,KAAK8giB,gBAGC,YAAtC9giB,KAAKqgiB,aAAan8gB,UAAU,EAAG,IACU,aAAtClkB,KAAKqgiB,aAAan8gB,UAAU,EAAG,GAClClkB,KAAKygiB,aAAe,UAEuB,YAAtCzgiB,KAAKqgiB,aAAan8gB,UAAU,EAAG,GACpClkB,KAAKygiB,aAAe,QAGpBzgiB,KAAKygiB,aAAe,SAM5Bt7I,EAAU9pZ,UAAUiX,QAAU,WAC1BtS,KAAKqgiB,kBAAelliB,EACpB6E,KAAKsgiB,cAAWnliB,EAChB6E,KAAKygiB,kBAAetliB,EACpB6E,KAAKugiB,oBAAiBpliB,GAEnBgqZ,KAMPr6J,GAA6B,WAK7B,SAASA,EAAYi2S,GAIjB/giB,KAAKgW,MAAQ,EAIbhW,KAAK+V,OAAS,EACd/V,KAAKgW,MAAQ+qhB,EAAe/qhB,MAC5BhW,KAAK+V,OAASgrhB,EAAehrhB,OAUjC,OAJA+0O,EAAYzvP,UAAUiX,QAAU,WAC5BtS,KAAKgW,WAAQ7a,EACb6E,KAAK+V,YAAS5a,GAEX2vP,KCrrEPshH,GAA2B,WAI3B,SAASA,EAAU40L,GACf,IAAIjhiB,EAAQC,KAIZA,KAAKo+hB,sBAAwB,EAI7Bp+hB,KAAKihiB,iBAAkB,EAIvBjhiB,KAAKolhB,iBAAkB,EACvBplhB,KAAKkhiB,yBAAsB/liB,EAI3B6E,KAAK2igB,WAAQxngB,EAKb6E,KAAKqwhB,sBAAuB,EAI5BrwhB,KAAKmhiB,qBAAsB,EAC3BnhiB,KAAKohiB,oBAAqB,EAI1BphiB,KAAKo9gB,qBAAkBjihB,EAKvB6E,KAAKkjhB,UAAY,WACbnjhB,EAAM4igB,MAAMj+f,MAAM4xC,QAAU,QAEhCt2C,KAAKsvf,MAAQ0xC,EACbhhiB,KAAKo6e,OAASp6e,KAAKsvf,MAAMlV,OACzBp6e,KAAKzC,MAAQ,IAAI65hB,GAAap3hB,KAAKsvf,OACnCtvf,KAAK6e,IAAM,IAAIu4gB,GAAap3hB,KAAKsvf,OACjCtvf,KAAKo9gB,gBAAkB,IAAIz3S,GAC3B3lO,KAAKqhiB,kBAAoB,IAAI5R,GAAyBzvhB,MACtDA,KAAKshiB,kBAAoB,IAAI5Q,GAAyB1whB,KAAMA,KAAKo6e,QACjEp6e,KAAKqzf,gBAAkB,IAAIm/B,GAAuBxyhB,MAClDA,KAAKuhiB,YAAc,IAAItN,GAAmBj0hB,MAC1CA,KAAKwhiB,aAAe,IAAI3N,GAAoB7zhB,MAC5CA,KAAKyhiB,cAAgB,IAAIpO,GAAqBrzhB,MAC9CA,KAAK0hiB,oBAAsB,IAAIlN,GAAqBx0hB,MA8oNxD,OA5oNA1B,OAAOuJ,eAAeukW,EAAU/wW,UAAW,cAIvCqM,IAAK,WAID,OAHIjK,EAAkBuC,KAAK2hiB,gBACvB3hiB,KAAK2hiB,aAAe,IAAI9M,IAErB70hB,KAAK2hiB,cAEhBh6hB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeukW,EAAU/wW,UAAW,SAMvCqM,IAAK,WACD,IAAKjK,EAAkBuC,KAAKsvf,SAAW7xf,EAAkBuC,KAAKo6e,QAI1D,OAHI38e,EAAkBuC,KAAK4hiB,iBACvB5hiB,KAAK4hiB,cAAgB5hiB,KAAKsvf,MAAM+4B,eAE7BrohB,KAAK4hiB,eAOpBv6hB,IAAK,SAAUrK,GACXgD,KAAK4hiB,cAAgB5kiB,GAEzB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeukW,EAAU/wW,UAAW,mBAOvCqM,IAAK,WACD,OAAO1H,KAAKqhiB,mBAEhB15hB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeukW,EAAU/wW,UAAW,mBAMvCqM,IAAK,WACD,OAAO1H,KAAKshiB,mBAEhB35hB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeukW,EAAU/wW,UAAW,iBAMvCqM,IAAK,WACD,OAAO1H,KAAKqzf,iBAEhB1rf,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeukW,EAAU/wW,UAAW,eAMvCqM,IAAK,WACD,OAAO1H,KAAKyhiB,eAEhB95hB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeukW,EAAU/wW,UAAW,cAMvCqM,IAAK,WACD,OAAO1H,KAAKwhiB,cAEhB75hB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeukW,EAAU/wW,UAAW,aAMvCqM,IAAK,WACD,OAAO1H,KAAKuhiB,aAEhB55hB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeukW,EAAU/wW,UAAW,eAMvCqM,IAAK,WACD,OAAO1H,KAAK0hiB,qBAEhB/5hB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeukW,EAAU/wW,UAAW,OAKvCqM,IAAK,WACD,OAAO1H,KAAK6hiB,aAMhBx6hB,IAAK,SAAUrK,GACXgD,KAAK6hiB,YAAc7kiB,GAEvB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeukW,EAAU/wW,UAAW,aAKvCqM,IAAK,WACD,OAAK1H,KAAKsvf,MAAM7U,kBAAoBh9e,EAAkBuC,KAAKo6e,SACpD38e,EAAkBuC,KAAKo6e,OAAO0nD,oBAC1B,EAEJ9hiB,KAAKo6e,OAAOlvQ,MAAM3sO,QAAQyB,KAAKo6e,OAAO0nD,oBAAsB,GAEvEn6hB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeukW,EAAU/wW,UAAW,WAKvCqM,IAAK,WACD,OAAK1H,KAAKsvf,MAAM7U,kBAAoBh9e,EAAkBuC,KAAKo6e,SACpD38e,EAAkBuC,KAAKo6e,OAAO2nD,kBAC1B,EAEJ/hiB,KAAKo6e,OAAOlvQ,MAAM3sO,QAAQyB,KAAKo6e,OAAO2nD,kBAAoB,GAErEp6hB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeukW,EAAU/wW,UAAW,aAOvCqM,IAAK,WACD,OAAO1H,KAAKzC,MAAMg7hB,cAAcv4hB,KAAK6e,MAEzClX,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeukW,EAAU/wW,UAAW,WAOvCqM,IAAK,WACD,QAAIjK,EAAkBuC,KAAKzC,QAGpByC,KAAKzC,MAAM86hB,iBAAiBr4hB,KAAK6e,MAE5ClX,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeukW,EAAU/wW,UAAW,QAMvCqM,IAAK,WACD,OAAO1H,KAAKi+H,SAAQ,IAExBt2H,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeukW,EAAU/wW,UAAW,eAIvCqM,IAAK,WACD,OAAO1H,KAAKkhiB,qBAEhBv5hB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeukW,EAAU/wW,UAAW,aAIvCqM,IAAK,WACD,OAAOjK,EAAkBuC,KAAK6e,MAElClX,YAAY,EACZC,cAAc,IAElBwkW,EAAU/wW,UAAUkkC,cAAgB,WAChC,MAAO,aAMX6sU,EAAU/wW,UAAU2miB,WAAa,WAC7BhiiB,KAAKsvf,MAAMye,uBAAwB,EACnC/tgB,KAAKiiiB,2BAA2BjiiB,KAAKzC,MAAMslf,UAAU8F,WAAW14V,KAAK4jW,eAKzEznJ,EAAU/wW,UAAU6miB,WAAa,WAC7BliiB,KAAKsvf,MAAMye,uBAAwB,EACnC/tgB,KAAKiiiB,2BAA2BjiiB,KAAKzC,MAAMslf,UAAU8F,WAAW14V,KAAK6jW,eAKzE1nJ,EAAU/wW,UAAU8miB,kBAAoB,WACpCniiB,KAAKoiiB,uBAKTh2L,EAAU/wW,UAAUgniB,SAAW,SAAUhpN,GACrC,GAAIA,GAAc,GAAKA,GAAcr5U,KAAKo6e,OAAOlvQ,MAAMzuO,OAAQ,CAC3D,IAAIwzJ,EAAOjwJ,KAAKo6e,OAAOlvQ,MAAMmuG,EAAa,GAC1Cr5U,KAAKsiiB,oCAAoCryY,EAAKyhW,YAAY,MAMlEtlJ,EAAU/wW,UAAUkniB,YAAc,WACzBviiB,KAAKsvf,MAAMpQ,iBAGhBl/e,KAAKwiiB,uBAKTp2L,EAAU/wW,UAAUoniB,UAAY,WACvBziiB,KAAKsvf,MAAMpQ,iBAGhBl/e,KAAK0iiB,kBAKTt2L,EAAU/wW,UAAUsniB,aAAe,WAC1B3iiB,KAAKsvf,MAAMpQ,iBAGhBl/e,KAAK4iiB,wBAKTx2L,EAAU/wW,UAAUwniB,WAAa,WACxB7iiB,KAAKsvf,MAAMpQ,iBAGhBl/e,KAAK8iiB,mBAMT12L,EAAU/wW,UAAU0niB,WAAa,WACzB/iiB,KAAKsvf,MAAM5U,cACX16e,KAAKsvf,MAAM5U,aAAaqoD,cAOhC32L,EAAU/wW,UAAU2niB,aAAe,WAC3BhjiB,KAAKsvf,MAAM5U,cACX16e,KAAKsvf,MAAM5U,aAAasoD,gBAQhC52L,EAAU/wW,UAAU4niB,gBAAkB,SAAU/tR,GACxCl1Q,KAAKsvf,MAAMuT,QACX7igB,KAAKsvf,MAAMuT,OAAOogC,gBAAgB/tR,IAQ1Ck3F,EAAU/wW,UAAU6niB,oBAAsB,SAAU34C,GAC5Cvqf,KAAKsvf,MAAMuT,QACX7igB,KAAKsvf,MAAMuT,OAAOqgC,oBAAoB34C,IAQ9Cn+I,EAAU/wW,UAAU8niB,qBAAuB,SAAU34C,GAC7Cxqf,KAAKsvf,MAAMuT,QACX7igB,KAAKsvf,MAAMuT,OAAOsgC,qBAAqB34C,IAO/Cp+I,EAAU/wW,UAAU+niB,gBAAkB,WAC9BpjiB,KAAKsvf,MAAMuT,QACX7igB,KAAKsvf,MAAMuT,OAAOugC,mBAO1Bh3L,EAAU/wW,UAAUgoiB,kBAAoB,WAChCrjiB,KAAKsvf,MAAMuT,QACX7igB,KAAKsvf,MAAMuT,OAAOwgC,qBAQ1Bj3L,EAAU/wW,UAAUioiB,oBAAsB,SAAU3igB,GAC5C3gC,KAAKsvf,MAAMuT,QACX7igB,KAAKsvf,MAAMuT,OAAOygC,oBAAoB3igB,IAO9CyrU,EAAU/wW,UAAUkoiB,eAAiB,WAC7BvjiB,KAAKsvf,MAAMuT,QACX7igB,KAAKsvf,MAAMuT,OAAO0gC,kBAO1Bn3L,EAAU/wW,UAAUmoiB,eAAiB,WAC7BxjiB,KAAKsvf,MAAMuT,QACX7igB,KAAKsvf,MAAMuT,OAAO2gC,kBAM1Bp3L,EAAU/wW,UAAU2ngB,kBAAoB,WACpC,IAAIvX,EAAazrf,KAAKwkgB,oBAClB/Y,GACAzrf,KAAKyjiB,oBAAoBh4C,IAQjCr/I,EAAU/wW,UAAUooiB,oBAAsB,SAAUh4C,GAChD,IAAIv4b,EAAY,IAAIiyV,GAAUsmG,EAAYzrf,MACtCuN,GACAs5gB,WAAW,EACXia,eAAgB5te,EAAU4te,eAC1B4C,SAAUxwe,EAAUwwe,SACpBC,eAAgBzwe,EAAUywe,gBAE9B3jiB,KAAKsvf,MAAM9oe,QAAQ,kBAAmBjZ,GACjCA,EAAUs5gB,WACX7mhB,KAAKo6e,OAAOxqa,UAAUg0d,iBAAiB1we,EAAUywe,gBAAgB,IAMzEv3L,EAAU/wW,UAAU4ngB,cAAgB,WAChC,IAAI4gC,EAAiB7jiB,KAAKwkgB,oBACtBs/B,EAAW9jiB,KAAK+jiB,YAAYF,GAChC7jiB,KAAKgkiB,gBAAgBF,IAMzB13L,EAAU/wW,UAAU4oiB,mBAAqB,SAAUC,GAC3ClkiB,KAAKsvf,MAAMo0B,wBACX1jhB,KAAKsvf,MAAMnjB,mBAAmBg4D,mBAE9BnkiB,KAAKs6O,QACLt6O,KAAK0ghB,sBAGD1ghB,KAAKigiB,UACLjgiB,KAAKokiB,yBAAyBpkiB,KAAKzC,MAAOyC,KAAK6e,KAG/C7e,KAAKokiB,yBAAyBpkiB,KAAK6e,IAAK7e,KAAKzC,OAGrDyC,KAAKo6e,OAAOumC,0BACRujB,GACAlkiB,KAAKo6e,OAAOqrC,iBAAiBzlhB,KAAKzC,MAAOyC,KAAK6e,MAMtDutV,EAAU/wW,UAAUgpiB,sBAAwB,SAAUhmC,EAAYrof,EAAOxJ,EAAME,GACvEsJ,EAAQ,IACRA,EAAQ,GAEZ,IAAIi6I,EAAOjwJ,KAAKijR,QAAQo7O,EAAWxb,WAC/B9se,EAASsof,EAAWtof,OACpBuuhB,OAAkBnpiB,EACjB6E,KAAKo9gB,gBAAgB32S,YAAY43R,KAClCimC,EAAkB,IAAIpE,GAAoB1zhB,EAAMwJ,GAChDhW,KAAKo9gB,gBAAgBh5gB,IAAIi6f,EAAYimC,IAEzC,IAAIlqD,EAASp6e,KAAKo6e,OACd3/D,EAAUz6a,KAAK6phB,WAAW55X,GAC1BsqR,EAAWtqR,EAAK00V,kBAAkB53e,EACtC,GAAIqte,EAAOhje,cAAgBqja,GACpBA,EAAU2/D,EAAOhje,aAAegje,EAAOuhC,gBAAgB5lgB,OAAQ,CAClEqke,EAAO6hC,iBAAiB9tb,UAAY,OACpCisZ,EAAO6hC,iBAAiBhub,YAAc,GACtC,IAAI7f,EAAagsa,EAAOhsa,WACxBpuE,KAAKukiB,cAAct0Y,EAAMwqR,GAEzB2/D,EAAO6hC,iBAAiB7tb,SAAUmsV,EAAY/ta,EAAO4hE,EAAegsa,EAAOzje,cAAgB8ja,EAAW/ta,EAAM0hE,EAAegsa,EAAOhje,aAAcpB,EAAQo4D,EAAYr4D,EAASq4D,GAC7Kgsa,EAAO6hC,iBAAiBpub,YAOhCu+Q,EAAU/wW,UAAUmpiB,iCAAmC,SAAUhrC,GAC7D,IAAIvpW,EAAOjwJ,KAAKijR,QAAQu2O,GACpB8qC,OAAkBnpiB,EAClBqR,EAAOgtf,EAAWzsf,EAAIysf,EAAW/8d,OAAOjwB,KAAOgtf,EAAWtE,gBAC1Dl/e,EAAQwjf,EAAWxjf,MAAQwjf,EAAW/8d,OAAOjwB,KAC3Cgtf,EAAW/8d,OAAOhwB,MAAQ+sf,EAAWtE,gBAAkBsE,EAAWrE,iBACpEzof,EAAM8sf,EAAWxsf,EACjB+I,EAASyjf,EAAWzjf,OACpB0ka,EAAUz6a,KAAK6phB,WAAW55X,GAC1BsqR,EAAWtqR,EAAK00V,kBAAkB53e,EAClC03hB,EAAgBzkiB,KAAKo6e,OAAOhje,cAAgBqja,GACzCA,EAAUz6a,KAAKo6e,OAAOhje,aAAepX,KAAKo6e,OAAOuhC,gBAAgB5lgB,OAUxE,GATI/V,KAAKo9gB,gBAAgB32S,YAAY+yR,KACjC8qC,EAAkBtkiB,KAAKo9gB,gBAAgB11gB,IAAI8xf,GACvCirC,GAEAzkiB,KAAKo6e,OAAO6hC,iBAAiBzyF,UAAWjP,EAAY+pH,EAAgB93hB,KAAOxM,KAAKo6e,OAAOhsa,WAAcpuE,KAAKo6e,OAAOzje,cAAiB8ja,EAAW/ta,EAAM1M,KAAKo6e,OAAOhsa,WAAepuE,KAAKo6e,OAAOhje,aAAckthB,EAAgBtuhB,MAAQhW,KAAKo6e,OAAOhsa,WAAYr4D,EAAS/V,KAAKo6e,OAAOhsa,aAGrRk2d,EAAkB,IAAIpE,GAAoB1zhB,EAAMwJ,GAChDhW,KAAKo9gB,gBAAgBh5gB,IAAIo1f,EAAY8qC,GACjCG,EAAe,CACfzkiB,KAAKo6e,OAAO6hC,iBAAiB9tb,UAAY,OACzCnuF,KAAKo6e,OAAO6hC,iBAAiBhub,YAAc,GAC3C,IAAI7f,EAAapuE,KAAKo6e,OAAOhsa,WAC7BpuE,KAAKukiB,cAAct0Y,EAAMwqR,GAEzBz6a,KAAKo6e,OAAO6hC,iBAAiB7tb,SAAUmsV,EAAY/ta,EAAO4hE,EAAepuE,KAAKo6e,OAAOzje,cAAgB8ja,EAAW/ta,EAAM0hE,EAAepuE,KAAKo6e,OAAOhje,aAAcpB,EAAQo4D,EAAYr4D,EAASq4D,GAC5LpuE,KAAKo6e,OAAO6hC,iBAAiBpub,YAMrCu+Q,EAAU/wW,UAAUkpiB,cAAgB,SAAUt0Y,EAAMwqR,GAChD,IAAI2/D,EAASp6e,KAAKo6e,OACdpke,EAAQi6I,EAAK00V,kBAAkB3ue,MAAQoke,EAAOhsa,WAC9Cr4D,EAASk6I,EAAK00V,kBAAkB5ue,OAASqke,EAAOhsa,WAChD5hE,EAAOyjJ,EAAK00V,kBAAkB53e,EAClCqte,EAAO6hC,iBAAiBvub,YACxB0sZ,EAAO6hC,iBAAiBxub,OACxB2sZ,EAAO6hC,iBAAiB5of,KAAK7mB,EAAO4te,EAAOzje,cAAe8ja,EAAU2/D,EAAOhje,aAAcpB,EAAOD,GAChGqke,EAAO6hC,iBAAiBx+R,QAM5B2uH,EAAU/wW,UAAUkihB,sBAAwB,SAAUmnB,EAAe/yC,EAAQjlf,GACzE,GAAI1M,KAAKo9gB,gBAAgB32S,YAAYkrR,GAAS,CAC1C,IAAI57e,EAAS/V,KAAKo6e,OAAOruY,OAAOuwa,eAAe3qB,EAAO57e,QAClD0ngB,EAAaz9gB,KAAKo9gB,gBAAgB11gB,IAAIiqf,GACtC37e,EAAQhW,KAAKo6e,OAAOruY,OAAOuwa,eAAemB,EAAWzngB,OACrDxJ,EAAOxM,KAAKo6e,OAAOruY,OAAOuwa,eAAemB,EAAWjxgB,KAAM,GAC9Dk4hB,EAAcv2c,UAAY,OAC1B,IAAI8hE,EAAOjwJ,KAAKsvf,MAAM1/a,UAAUqzM,QAAQ0uO,EAAO9O,WAC/C7if,KAAKsvf,MAAM1/a,UAAU20d,cAAct0Y,EAAMjwJ,KAAKsvf,MAAM1/a,UAAUi6c,WAAW55X,IACzEy0Y,EAAct2c,SAAS5hF,EAAMxM,KAAKo6e,OAAOruY,OAAOuwa,eAAe5vgB,EAAK,GAAIsJ,EAAOD,GAC/E2uhB,EAAc72c,YAOtBu+Q,EAAU/wW,UAAUgihB,2BAA6B,SAAUqnB,EAAe/wC,GACtE,GAAI3zf,KAAKo9gB,gBAAgB32S,YAAYktR,GAAkB,CACnD,IAAI2wC,EAAkBtkiB,KAAKo9gB,gBAAgB11gB,IAAIisf,GAC3Cnnf,EAAOxM,KAAKo6e,OAAOruY,OAAOuwa,eAAegoB,EAAgB93hB,KAAM,GAC/Dq0C,EAAQ7gD,KAAKo6e,OAAOruY,OAAOuwa,eAAe3oB,EAAgB3mf,EAAG,GAC7DgJ,EAAQhW,KAAKo6e,OAAOruY,OAAOuwa,eAAegoB,EAAgBtuhB,OAC1DD,EAAS/V,KAAKo6e,OAAOruY,OAAOuwa,eAAe3oB,EAAgB59e,QAC/D2uhB,EAAcv2c,UAAY,OAC1B,IAAI8hE,EAAOjwJ,KAAKsvf,MAAM1/a,UAAUqzM,QAAQ0wO,GACxC3zf,KAAKsvf,MAAM1/a,UAAU20d,cAAct0Y,EAAMjwJ,KAAKsvf,MAAM1/a,UAAUi6c,WAAW55X,IACzEy0Y,EAAct2c,SAAS5hF,EAAMq0C,EAAO7qC,EAAOD,GAC3C2uhB,EAAc72c,YAOtBu+Q,EAAU/wW,UAAUspiB,yBAA2B,SAAUhzC,GACrD,IAAInlf,EAAO,EACPE,EAAM,EACNsJ,EAAQ,EACRD,EAAS,EACTk6I,OAAO90J,EACX,GAAIw2f,aAAkBwB,GAAY,CAC9B,IAAIkL,EAAa1M,EAIjB,GAFA1hW,EAAQxyJ,EADgB4ggB,EAAWxb,gBAEQ1nf,EAAvC6E,KAAKijR,QAASo7O,EAAoB,WAClC5ggB,EAAkBwyJ,GAClB,OAEJvjJ,EAAM1M,KAAK8+Q,OAAOu/O,GAClBtof,EAASsof,EAAWtof,YAEnB,GAAI47e,aAAkBI,GAAiB,CAGxC,GAFA9hW,EAAQxyJ,EAAkBk0f,QACCx2f,EAAvB6E,KAAKijR,QAAQ0uO,GACbl0f,EAAkBwyJ,GAClB,OAEJvjJ,EAAMilf,EAAO3kf,EACb+I,EAAS47e,EAAO57e,OAEpB,IAAItY,EAAkBwyJ,GAAtB,CAGA,IAAIwtX,EAAaz9gB,KAAKo9gB,gBAAgB11gB,IAAIiqf,GAC1C37e,EAAQyngB,EAAWzngB,MACnBxJ,EAAOixgB,EAAWjxgB,KAClB,IAAIo4hB,EAAW30Y,EAAK00V,kBAChBz0V,EAAYlwJ,KAAKo6e,OAAOlvQ,MAAM3sO,QAAQ0xJ,GACtCq4X,EAAUtohB,KAAKo6e,OAAOkuC,QACtB7tG,GAAWmqH,EAAS53hB,EAAIs7gB,GAAWp4X,EAAY,IAAMlwJ,KAAKo6e,OAAOhsa,WAAak6c,GAAWp4X,EAAY,GACrGqqR,EAAWqqH,EAAS73hB,EACpBqhE,EAAapuE,KAAKo6e,OAAOhsa,YACzBpuE,KAAKo6e,OAAOhje,cAAgBqja,GACzBA,EAAUz6a,KAAKo6e,OAAOhje,aAAepX,KAAKo6e,OAAOuhC,gBAAgB5lgB,SAEpE/V,KAAKo6e,OAAO6hC,iBAAiBzyF,UAAWjP,EAAY/ta,EAAO4hE,EAAcpuE,KAAKo6e,OAAOzje,cAAiB,GAAM8ja,EAAW/ta,EAAM0hE,EAAepuE,KAAKo6e,OAAOhje,aAAe,GAAKpB,EAAQo4D,EAAa,GAAKr4D,EAASq4D,EAAa,MAOpOg+R,EAAU/wW,UAAU4phB,kBAAoB,WACpC,IAAIn4P,EAAgB9sR,KAAKzC,MAAM8B,QAC3B8phB,EAAcnphB,KAAK6e,IAAIxf,QAC3BW,KAAK6kiB,uBAAuB/3Q,EAAeq8P,GAAa,GACxDnphB,KAAKw+M,YAAYsuE,EAAeq8P,IAMpC/8K,EAAU/wW,UAAU6thB,uBAAyB,WACpCzrhB,EAAkBuC,KAAKzC,SACxByC,KAAKzC,MAAM6/hB,uBAAuBp9hB,MAAM,GACxCA,KAAK6e,IAAI4+gB,2BAA2Bz9hB,MAAM,GAC1CA,KAAKo+hB,sBAAwBp+hB,KAAK6e,IAAI6O,SAAS3gB,EAC/C/M,KAAK8kiB,sBAAqB,KAOlC14L,EAAU/wW,UAAUwpiB,uBAAyB,SAAU/3Q,EAAeq8P,EAAa8S,GAC/E,IAAKx+hB,EAAkBqvR,GAAgB,CACnC,GAAIA,EAAcnhR,OAAS,EAAG,CAC1B,IAAIo5hB,EAAYj4Q,EAAcztR,QAC1Bu1f,EAAgB,EAChBilC,EAAY/sQ,EAAc+pP,cAAcliB,UAAU7nO,EAAcnhR,OAAQipf,GACxExvW,EAASy0Y,EAAU74hB,QACvB4zf,EAAgBilC,EAAU5nhB,OACrBxU,EAAkB2nJ,IAAWA,aAAkBkmW,IAAwC,IAArBlmW,EAAOmmW,UAEtEz+N,EAAcnhR,OAAS,KAAOlO,EAAkB2nJ,EAAO24W,iBAAmBtggB,EAAkB2nJ,EAAOqmW,cACnGs5C,EAAU7M,qBAAqB6M,EAAUluB,cAAe/pP,EAAcnhR,OAAS,GAC/Eo5hB,EAAUjG,sBAAsB,GAAG,GAC7BiG,EAAUliD,YAAc/1N,EAAc+1N,WAAakiD,EAAUp5hB,SAAWmhR,EAAcnhR,OAAS,GACjGmhR,EAAc6uQ,wBAAwB,IAGrC7uQ,EAAcnhR,OAAS,GAAKlO,EAAkB2nJ,EAAO24W,kBAC1DgnC,EAAU7M,qBAAqB6M,EAAUluB,cAAe/pP,EAAcnhR,OAAS,GAC/Eo5hB,EAAUjG,sBAAsB,GAAG,GAC7BiG,EAAUliD,YAAc/1N,EAAc+1N,WAAakiD,EAAUp5hB,SAAWmhR,EAAcnhR,QACxFmhR,EAAc6uQ,wBAAwB,KAK9CoJ,EAAU7M,qBAAqB6M,EAAUluB,cAAe/pP,EAAcnhR,OAAS,GAC/Eo5hB,EAAUjG,sBAAsB,GAAG,GAC7BiG,EAAUliD,YAAc/1N,EAAc+1N,WAAakiD,EAAUp5hB,SAAWmhR,EAAcnhR,QACxFmhR,EAAc6uQ,wBAAwB,IAIlDxS,EAAY2V,sBAAsB,EAAG7C,KAO7C7vL,EAAU/wW,UAAU2piB,uBAAyB,WACrCvniB,EAAkBuC,KAAKzC,SAG3ByC,KAAK6e,IAAIu+gB,uBAAuBp9hB,MAAM,GACtCA,KAAKo+hB,sBAAwBp+hB,KAAK6e,IAAI6O,SAAS3gB,EAC/C/M,KAAK8kiB,sBAAqB,KAM9B14L,EAAU/wW,UAAU4piB,qBAAuB,WACnCxniB,EAAkBuC,KAAKzC,SAG3ByC,KAAK6e,IAAI4+gB,2BAA2Bz9hB,MAAM,GAC1CA,KAAKo+hB,sBAAwBp+hB,KAAK6e,IAAI6O,SAAS3gB,EAC/C/M,KAAK8kiB,sBAAqB,KAM9B14L,EAAU/wW,UAAU69hB,iBAAmB,WAC/Bz7hB,EAAkBuC,KAAKzC,SAGvByC,KAAKs6O,UACLt6O,KAAKzC,MAAM27hB,mBACXl5hB,KAAK6e,IAAIk5gB,oBAAoB/3hB,KAAKzC,QAEtCyC,KAAKkliB,yBACLlliB,KAAKo+hB,sBAAwBp+hB,KAAKzC,MAAMmwB,SAAS3gB,EACjD/M,KAAK8kiB,sBAAqB,KAM9B14L,EAAU/wW,UAAUqiiB,oBAAsB,WAClCjgiB,EAAkBuC,KAAKzC,SAG3ByC,KAAK6e,IAAIi8gB,mCACT96hB,KAAKzC,MAAMw6hB,oBAAoB/3hB,KAAK6e,KACpC7e,KAAKo+hB,sBAAwBp+hB,KAAK6e,IAAI6O,SAAS3gB,EAC/C/M,KAAK8kiB,sBAAqB,KAM9B14L,EAAU/wW,UAAU0/hB,qBAAuB,WACnCt9hB,EAAkBuC,KAAKzC,SAGvByC,KAAKs6O,UACLt6O,KAAKzC,MAAMw9hB,uBACX/6hB,KAAK6e,IAAIk5gB,oBAAoB/3hB,KAAKzC,QAEtCyC,KAAKmliB,0BACLnliB,KAAKo+hB,sBAAwBp+hB,KAAKzC,MAAMmwB,SAAS3gB,EACjD/M,KAAK8kiB,sBAAqB,KAM9B14L,EAAU/wW,UAAUgiiB,wBAA0B,WACtC5/hB,EAAkBuC,KAAKzC,SAG3ByC,KAAK6e,IAAIw+gB,wBAAwBr9hB,MACjCA,KAAKzC,MAAMw6hB,oBAAoB/3hB,KAAK6e,KACpC7e,KAAKo+hB,sBAAwBp+hB,KAAK6e,IAAI6O,SAAS3gB,EAC/C/M,KAAK8kiB,sBAAqB,KAM9B14L,EAAU/wW,UAAU+piB,qBAAuB,WACnC3niB,EAAkBuC,KAAKzC,SAG3ByC,KAAK6e,IAAI6/gB,mBAAmB1+hB,KAAMA,KAAKo+hB,uBACvCp+hB,KAAK8kiB,sBAAqB,KAM9B14L,EAAU/wW,UAAUgqiB,gBAAkB,WAC9B5niB,EAAkBuC,KAAKzC,SAG3ByC,KAAK6e,IAAI0/gB,sBAAsBv+hB,MAAM,GACrCA,KAAKo+hB,sBAAwBp+hB,KAAK6e,IAAI6O,SAAS3gB,EAC/C/M,KAAK8kiB,sBAAqB,KAM9B14L,EAAU/wW,UAAUiqiB,kBAAoB,WAChC7niB,EAAkBuC,KAAKzC,SAG3ByC,KAAK6e,IAAIg/gB,wBAAwB79hB,MAAM,GACvCA,KAAKo+hB,sBAAwBp+hB,KAAK6e,IAAI6O,SAAS3gB,EAC/C/M,KAAK8kiB,sBAAqB,KAK9B14L,EAAU/wW,UAAUkvM,OAAS,WACrB9sM,EAAkBuC,KAAKzC,SAGtByC,KAAKs6O,UACFt6O,KAAKigiB,UACLjgiB,KAAK6e,IAAIk5gB,oBAAoB/3hB,KAAKzC,OAGlCyC,KAAKzC,MAAMw6hB,oBAAoB/3hB,KAAK6e,KAExC7e,KAAKo+hB,sBAAwBp+hB,KAAKzC,MAAMmwB,SAAS3gB,GAErD/M,KAAKo+hB,sBAAwBp+hB,KAAKzC,MAAMmwB,SAAS3gB,EACjD/M,KAAKzC,MAAMgtM,OAAOvqM,KAAMA,KAAKo+hB,uBAC7Bp+hB,KAAK6e,IAAIk5gB,oBAAoB/3hB,KAAKzC,OAClCyC,KAAK8kiB,sBAAqB,KAK9B14L,EAAU/wW,UAAUivM,SAAW,WACvB7sM,EAAkBuC,KAAKzC,SAGtByC,KAAKs6O,UACFt6O,KAAKigiB,UACLjgiB,KAAKzC,MAAMw6hB,oBAAoB/3hB,KAAK6e,KAGpC7e,KAAK6e,IAAIk5gB,oBAAoB/3hB,KAAKzC,OAEtCyC,KAAKo+hB,sBAAwBp+hB,KAAKzC,MAAMmwB,SAAS3gB,GAErD/M,KAAKzC,MAAM+sM,SAAStqM,KAAMA,KAAKo+hB,uBAC/Bp+hB,KAAK6e,IAAIk5gB,oBAAoB/3hB,KAAKzC,OAClCyC,KAAK8kiB,sBAAqB,KAE9B14L,EAAU/wW,UAAU6piB,uBAAyB,WACpClliB,KAAKs6O,UACFt6O,KAAKigiB,UACLjgiB,KAAKzC,MAAMw6hB,oBAAoB/3hB,KAAK6e,KAGpC7e,KAAK6e,IAAIk5gB,oBAAoB/3hB,KAAKzC,SAI9C6uW,EAAU/wW,UAAU8piB,wBAA0B,WACrCnliB,KAAKs6O,UACFt6O,KAAKigiB,UACLjgiB,KAAK6e,IAAIk5gB,oBAAoB/3hB,KAAKzC,OAGlCyC,KAAKzC,MAAMw6hB,oBAAoB/3hB,KAAK6e,OAOhDutV,EAAU/wW,UAAUojiB,yBAA2B,SAAUx+d,GACrD,GAAIA,EAAMgjb,aAAaxmf,OAAS,EAAG,CAC/B,IAAI8oiB,EAAWtle,EAAMgjb,aAAa,GAClC,GAAIsiD,EAAStiD,aAAaxmf,OAAS,EAAG,CAClC,IAAI+oiB,EAAYD,EAAStiD,aAAa,GACtC,GAAsC,IAAlCuiD,EAAUviD,aAAaxmf,OACvB,OAEJ,OAAO+oiB,EAAUviD,aAAa,MAS1C72I,EAAU/wW,UAAUyiiB,qBAAuB,SAAUp9d,EAAKy3b,EAAWstC,EAAiBC,GAClF,IAAIC,EAAY3liB,KAAK4liB,YAAYlle,EAAKy3b,GAClC0tC,EAAUF,EAAYxtC,EAAU7D,WAAWj/N,UAC3C3mM,GAAO,EACX,GAAIi3c,GAAaF,GAAmBA,EAAkBI,EAClD,IAAK,IAAI1/gB,EAAI,EAAGA,EAAIu6C,EAAIuib,aAAaxmf,OAAQ0pB,IAAK,CAC9C,IAAI3Z,EAAOxM,KAAK4liB,YAAYlle,EAAKA,EAAIuib,aAAa98d,IAClD,GAAIwke,GAAcltd,MAAMkogB,EAAW,IAAMh7C,GAAcltd,MAAMjxB,EAAM,IAC/Dm+e,GAAcltd,MAAMjxB,EAAM,GAAKm+e,GAAcltd,MAAMoogB,EAAS,GAE5D,OADAn3c,GAAO,EACAhuB,EAAIuib,aAAa98d,QAKhC,IAAK,IAAI5C,EAAI,EAAGA,EAAIm9C,EAAIuib,aAAaxmf,OAAQ8mB,IAAK,CAC9C,IAAIuihB,EAAW9liB,KAAK4liB,YAAYlle,EAAKA,EAAIuib,aAAa1/d,IACtD,GAAIuihB,GAAYL,GAAmBK,EAC/Bple,EAAIuib,aAAa1/d,GAAG+we,WAAWj/N,UAAYowQ,EAE3C,OADA/2c,GAAO,EACAhuB,EAAIuib,aAAa1/d,GAIpC,GAAImrE,EAAM,CACN,IAAKjxF,EAAkBijE,EAAIyxb,yBAA2BuzC,EAAgB,CAClE,IAAInsC,EAAiB74b,EAAIyxb,uBACzB,OAAOnyf,KAAK89hB,qBAAqBvkC,EAAgBpB,EAAWstC,EAAiBC,GAE5E,IAAKjoiB,EAAkBijE,EAAI4xb,sBAAwBozC,EACpD,OAAO1liB,KAAK89hB,qBAAqBp9d,EAAI4xb,mBAAoB6F,EAAWstC,EAAiBC,GAG7F,OAAOhle,EAAIuib,aAAa,IAK5B72I,EAAU/wW,UAAUmjiB,kBAAoB,SAAU9oC,GAC9C,KAAOA,EAAUhD,qBACbgD,EAAYA,EAAUhD,oBAE1B,IAAIqzC,EAAarwC,EAAU94e,WAC3B,OAAO5c,KAAKgmiB,uBAAuBD,IAOvC35L,EAAU/wW,UAAU6iiB,uBAAyB,SAAUj+d,GACnD,GAAIA,EAAMgjb,aAAaxmf,OAAS,EAAG,CAC/B,IAAIwpiB,EAAUhme,EAAMgjb,aAAahjb,EAAMgjb,aAAaxmf,OAAS,GACzDypiB,EAAWD,EAAQhjD,aAAagjD,EAAQhjD,aAAaxmf,OAAS,GAClE,OAAOypiB,EAASjjD,aAAaijD,EAASjjD,aAAaxmf,OAAS,KAQpE2vW,EAAU/wW,UAAU8qiB,gBAAkB,WAC9B1oiB,EAAkBuC,KAAKzC,SAG3ByC,KAAKmliB,0BACLnliB,KAAKzC,MAAMsgiB,wBAAwB79hB,MAAM,GACzCA,KAAK6e,IAAIk5gB,oBAAoB/3hB,KAAKzC,OAClCyC,KAAKo+hB,sBAAwBp+hB,KAAKzC,MAAMmwB,SAAS3gB,EACjD/M,KAAK8kiB,sBAAqB,KAM9B14L,EAAU/wW,UAAU+qiB,cAAgB,WAC5B3oiB,EAAkBuC,KAAKzC,SAG3ByC,KAAKkliB,yBACLlliB,KAAKzC,MAAMghiB,sBAAsBv+hB,MAAM,GACvCA,KAAK6e,IAAIk5gB,oBAAoB/3hB,KAAKzC,OAClCyC,KAAKo+hB,sBAAwBp+hB,KAAKzC,MAAMmwB,SAAS3gB,EACjD/M,KAAK8kiB,sBAAqB,KAM9B14L,EAAU/wW,UAAUwuhB,WAAa,SAAU55X,GAEvC,OAAQA,EAAK00V,kBAAkB33e,EAAIhN,KAAKo6e,OAAOkuC,SAAWtohB,KAAKo6e,OAAOlvQ,MAAM3sO,QAAQ0xJ,GAAQ,IAAMjwJ,KAAKo6e,OAAOhsa,WAAapuE,KAAKo6e,OAAOkuC,SAAWtohB,KAAKo6e,OAAOlvQ,MAAM3sO,QAAQ0xJ,GAAQ,IAMxLm8M,EAAU/wW,UAAUwphB,iBAAmB,SAAUjB,EAAatlJ,GAC1D,IAAI7gY,EAAkBuC,KAAKzC,OAA3B,CAIA,IAAIo0f,EAAS3xf,KAAKo6e,OAAOgvC,sBAAsBxF,GAAa,GACvDnmhB,EAAkBk0f,IACnB3xf,KAAKs+hB,yBAAyB3sC,EAAQiyB,EAAatlJ,GAAc,GAErEt+X,KAAKo+hB,sBAAwB9/J,EAAa5wW,SAAS3gB,EACnD,IAAIwuhB,EAAsBv7hB,KAAKzC,MAAMg6hB,+BACjC0F,EAAoBj9hB,KAAK6e,IAAI04gB,+BAC7BgE,IAAwB0B,IAEpB7F,GAAamC,mBAAmBgC,EAAqB0B,GACrD3+J,EAAa0+J,8BAA8BzB,EAAqB0B,GAGhE3+J,EAAa6+J,+BAA+B5B,EAAqB0B,IAGzEj9hB,KAAK8kiB,sBAAqB,KAQ9B14L,EAAU/wW,UAAU0/e,iBAAmB,WACnC,IACIiZ,EAAQh0f,KAAKo6e,OAAOlvQ,MAAM,GAAGwmR,YAAY,GAAGzO,aAAa,GAC7D,OAAOjjf,KAAKqmiB,oBAAoBryC,GAAO,IAM3C5nJ,EAAU/wW,UAAU2/e,eAAiB,WACjC,IAAI18G,OAAenjY,EACfkthB,EAAgBrohB,KAAKsvf,MAAM+4B,cAC3Bie,EAAWtmiB,KAAKo6e,OAAOlvQ,MAAMlrO,KAAKo6e,OAAOlvQ,MAAMzuO,OAAS,GAC5D,IAAKgB,EAAkB4qhB,IAAkBie,EAAS50C,YAAY,GAAGzO,aAAaxmf,OAAS,EAAG,CACtF,IAAIu3f,OAAQ74f,EAER24Q,EADUwyR,EAAS50C,YAAY,GACdzO,aAEjBpmR,EAAYi3C,EADEA,EAAOr3Q,OAAS,GAE9BogO,aAAqB01R,KACrByB,EAAQn3R,GAEZyhK,EAAet+X,KAAKqmiB,oBAAoBryC,GAAO,GAEnD,OAAO11H,GAOXlyB,EAAU/wW,UAAUkriB,oBAAsB,WACtC,IAAIC,OAAcrriB,EACbsC,EAAkBuC,KAAKsvf,MAAMk3C,eAC9BA,EAAcxmiB,KAAKsvf,MAAMk3C,aAExB/oiB,EAAkB+oiB,IACnBxmiB,KAAKsvf,MAAM1/a,UAAU62d,cAAcD,GAAa,GAEpDxmiB,KAAK8khB,4BAMT14K,EAAU/wW,UAAUqriB,qBAAuB,WACvC,IAAIre,OAAgBlthB,EACfsC,EAAkBuC,KAAKsvf,MAAM+4B,iBAC9BA,EAAgBrohB,KAAKsvf,MAAM+4B,eAE1B5qhB,EAAkB4qhB,IACnBrohB,KAAKsvf,MAAM1/a,UAAU62d,cAAcpe,GAAe,GAEtDrohB,KAAK8khB,4BAMT14K,EAAU/wW,UAAUsriB,qBAAuB,WACvC3miB,KAAK4miB,mBAAkB,GACvB5miB,KAAK8khB,4BAMT14K,EAAU/wW,UAAUwriB,sBAAwB,WACxC7miB,KAAK8miB,iBAAgB,GACrB9miB,KAAK8khB,4BAMT14K,EAAU/wW,UAAU0riB,qBAAuB,WACvC/miB,KAAK09hB,sBACL19hB,KAAK8khB,4BAMT14K,EAAU/wW,UAAU2riB,mBAAqB,WACrChniB,KAAKq9hB,0BACLr9hB,KAAK8khB,4BAMT14K,EAAU/wW,UAAU4riB,mBAAqB,WACrCjniB,KAAKkniB,iBACLlniB,KAAK8khB,4BAMT14K,EAAU/wW,UAAU8riB,iBAAmB,WACnCnniB,KAAKoliB,uBACLpliB,KAAK8khB,4BAMT14K,EAAU/wW,UAAU+riB,oBAAsB,WACtCpniB,KAAKqniB,gBACLrniB,KAAK8khB,4BAMT14K,EAAU/wW,UAAUisiB,mBAAqB,WACrCtniB,KAAKuniB,mBACLvniB,KAAK8khB,4BAMT14K,EAAU/wW,UAAUmsiB,0BAA4B,WAC5CxniB,KAAK4miB,mBAAkB,GACvB5miB,KAAK8khB,4BAMT14K,EAAU/wW,UAAUosiB,wBAA0B,WAC1CzniB,KAAKgliB,yBACLhliB,KAAK8khB,4BAMT14K,EAAU/wW,UAAUqsiB,2BAA6B,WAC7C1niB,KAAK8miB,iBAAgB,GACrB9miB,KAAK8khB,4BAMT14K,EAAU/wW,UAAUssiB,0BAA4B,WAC5C3niB,KAAKiliB,uBACLjliB,KAAK8khB,4BAMT14K,EAAU/wW,UAAUusiB,cAAgB,WAChC5niB,KAAK+6hB,uBACL/6hB,KAAK8khB,4BAMT14K,EAAU/wW,UAAUwsiB,YAAc,WAC9B7niB,KAAKohiB,oBAAqB,EAC1BphiB,KAAKuqM,SACLvqM,KAAKohiB,oBAAqB,EAC1BphiB,KAAK8khB,4BAMT14K,EAAU/wW,UAAUysiB,eAAiB,WACjC9niB,KAAKk5hB,mBACLl5hB,KAAK8khB,4BAMT14K,EAAU/wW,UAAU0siB,aAAe,WAC/B/niB,KAAKomiB,gBACLpmiB,KAAK8khB,4BAMT14K,EAAU/wW,UAAU2siB,cAAgB,WAChChoiB,KAAKmmiB,kBACLnmiB,KAAK8khB,4BAMT14K,EAAU/wW,UAAU4siB,cAAgB,WAChCjoiB,KAAKohiB,oBAAqB,EAC1BphiB,KAAKsqM,WACLtqM,KAAKohiB,oBAAqB,EAC1BphiB,KAAK8khB,4BAMT14K,EAAU/wW,UAAU6siB,kBAAoB,WACpCloiB,KAAKqliB,kBACLrliB,KAAK8khB,4BAMT14K,EAAU/wW,UAAU8siB,mBAAqB,WACrCnoiB,KAAKsliB,oBACLtliB,KAAK8khB,4BAMT14K,EAAU/wW,UAAU+siB,yBAA2B,WAC3C,IAAI5B,OAAcrriB,EACbsC,EAAkBuC,KAAKsvf,MAAMk3C,eAC9BA,EAAcxmiB,KAAKsvf,MAAMk3C,aAExB/oiB,EAAkB+oiB,KACnBxmiB,KAAK6e,IAAIhG,YAAY2thB,EAAY3vB,eAAe,GAChD72gB,KAAK8kiB,sBAAqB,IAE9B9kiB,KAAK8khB,4BAMT14K,EAAU/wW,UAAUgtiB,0BAA4B,WAC5C,IAAIhgB,OAAgBlthB,EACfsC,EAAkBuC,KAAKsvf,MAAM+4B,iBAC9BA,EAAgBrohB,KAAKsvf,MAAM+4B,eAE1B5qhB,EAAkB4qhB,KACnBrohB,KAAK6e,IAAIk5gB,oBAAoB1P,GAC7BrohB,KAAK8kiB,sBAAqB,IAE9B9kiB,KAAK8khB,4BAQT14K,EAAU/wW,UAAUitiB,aAAe,SAAUC,EAAkBC,GAC3D,IAAIjriB,EAAQyC,KAAKzC,MACbE,EAAkBF,KAGlBA,EAAMslf,UAAUuR,eAAiBp0f,KAAK6e,IAAIgke,UAAUuR,gBAAkBm0C,GAAoBC,GAEtFA,EACAxoiB,KAAKyoiB,qBAGLzoiB,KAAK0oiB,kBAGHH,IAAoBC,GAAgB/qiB,EAAkBF,IAAUA,EAAMoO,SAAW3L,KAAKs3hB,eAAe/5hB,EAAMslf,YAC7Gplf,EAAkBF,EAAMslf,UAAUjF,kBAAqBngf,EAAkBF,EAAMslf,UAAUjF,gBAAgBgG,cACnD,IAAvDrmf,EAAMslf,UAAUjF,gBAAgBgG,WAAWsC,QAAkBlmf,KAAKsvf,MAAMzR,eAGrE79e,KAAKsvf,MAAMzR,gBACjB79e,KAAKsvf,MAAM5U,aAAaiuD,gBAAgB,MAHxC3oiB,KAAKsvf,MAAM5U,aAAakuD,iBAAgBJ,GAK5CxoiB,KAAK8khB,6BAET14K,EAAU/wW,UAAUotiB,mBAAqB,WACrC,IAAI/yC,EAAY11f,KAAKzC,MAAMslf,UAAUwR,eACjC45B,EAAWv4B,EAAUxB,SACV+5B,EAASh6B,WACxB,GAAIx2f,EAAkBi4f,EAAU6D,iBAC5B,IAAK97f,EAAkBwwhB,EAAS97B,wBAAyB,CAErD,IAAIqK,OAAUrhgB,EACV8yhB,EAAS97B,kCAAkCF,KAC3CuK,EAAUyxB,EAAS97B,wBAEvBnyf,KAAK6oiB,wBAAwBrsC,EAAQvZ,aAAauZ,EAAQvZ,aAAaxmf,OAAS,IAAI,QAGvF,CAED,IAAI09f,OAAWh/f,EACXu6f,EAAU6D,0BAA0BxH,KACpCoI,EAAWzE,EAAU6D,gBAEzBv5f,KAAK6oiB,wBAAwB1uC,GAAU,KAG/C/tJ,EAAU/wW,UAAUqtiB,eAAiB,WACjC,IAAIhzC,EAAY11f,KAAKzC,MAAMslf,UAAUwR,eACjC45B,EAAWv4B,EAAUxB,SACV+5B,EAASh6B,WACxB,GAAIx2f,EAAkBi4f,EAAUuG,YAC5B,GAAIx+f,EAAkBwwhB,EAAS37B,sBAAwBtyf,KAAKsvf,MAAMzR,eAE9D79e,KAAKsvf,MAAM5U,aAAa0oB,WAAU,OAEjC,CAED,IAAIvjO,OAAU1kS,EACV8yhB,EAAS37B,8BAA8BL,KACvCpyN,EAAUouP,EAAS37B,oBAEvBtyf,KAAK6oiB,wBAAwBhpQ,EAAQojN,aAAa,IAAI,OAIzD,CAED,IAAI0W,OAAWx+f,EACXu6f,EAAUpD,8BAA8BP,KACxC4H,EAAWjE,EAAUpD,oBAEzBtyf,KAAK6oiB,wBAAwBlvC,GAAU,KAO/CvtJ,EAAU/wW,UAAUwtiB,wBAA0B,SAAUnzC,EAAWozC,GAC/D,IAAIC,EAAiB/oiB,KAAKw+hB,kBAAkB9oC,GACxCqoC,EAAgB/9hB,KAAKg+hB,iBAAiBtoC,GAC1C,GAAIqzC,IAAmBhL,GAAiBA,EAAczjT,UAClDt6O,KAAKgpiB,gBAAgBjL,GAAe,OAEnC,CACD,IAAIkL,EAAkBlL,EAAc96C,aAAa,GACjDjjf,KAAKzC,MAAMsb,YAAYkwhB,EAAe9lD,aAAa,IAAI,GACvDjjf,KAAK6e,IAAIq5gB,qBAAqB+Q,EAAiBA,EAAgBzrC,gBAC/Dx9f,KAAK8kiB,sBAAqB,KAOlC14L,EAAU/wW,UAAUmniB,oBAAsB,WACtC,IAAIjliB,EAAQyC,KAAKzC,MACbshB,EAAM7e,KAAK6e,IAKf,GAJK7e,KAAKigiB,YACN1iiB,EAAQyC,KAAK6e,IACbA,EAAM7e,KAAKzC,QAEVE,EAAkBF,KAAWE,EAAkBohB,KAASphB,EAAkBuC,KAAK87P,SAASv+P,EAAOshB,IAAO,CACvG,IACIohD,EADgBjgE,KAAKs6hB,mBAAmB/8hB,EAAMslf,UAAUwR,eAAgBx1e,EAAIgke,UAAUwR,gBAChEJ,WACtBi1C,EAAYlpiB,KAAKgmiB,uBAAuB/le,GACxCkpe,EAAWnpiB,KAAKopiB,sBAAsBnpe,GACtCt0D,EAASw9hB,EAASrha,UAAU01X,eAChCx9f,KAAKzC,MAAMsb,YAAYqwhB,EAAUjmD,aAAa,IAAI,GAClDjjf,KAAK6e,IAAIq5gB,qBAAqBiR,EAASrha,UAAWn8H,EAAS,GAE/D3L,KAAKqpiB,eAAerpiB,KAAKzC,MAAOyC,KAAK6e,MAMzCutV,EAAU/wW,UAAUuniB,qBAAuB,WACvC,IAAI0G,EAAetpiB,KAAKzC,MACpBgsiB,EAAavpiB,KAAK6e,IAMtB,GALK7e,KAAKigiB,YACNqJ,EAAetpiB,KAAK6e,IACpB0qhB,EAAavpiB,KAAKzC,QAGjBE,EAAkB6riB,KAAkB7riB,EAAkB8riB,KAAgB9riB,EAAkBuC,KAAK87P,SAASwtS,EAAcC,IAAc,CACnI,IAAI7J,EAAgB1/hB,KAAKs6hB,mBAAmBgP,EAAazmD,UAAUwR,eAAgBk1C,EAAW1mD,UAAUwR,gBACxG,GAAIqrC,EAAczrC,WAAW9vf,SAASoliB,EAAW1mD,UAAUwR,gBAAiB,CACxE,IAAI8D,EAAYn4f,KAAK2/hB,gBAAgB2J,EAAazmD,UAAUwR,eAAgBqrC,GACxEtnC,EAAUp4f,KAAK2/hB,gBAAgB4J,EAAW1mD,UAAUwR,eAAgBqrC,GACxE,GAAI1/hB,KAAK6/hB,aAAaH,EAAe6J,EAAW1mD,UAAUwR,gBAAiB,CAC7D8D,EAAUjE,SAApB,IACIs1C,EAAc9J,EAAczrC,WAAWiE,2BAA2BwnC,EAAeA,GACrF,GAAI8J,EAAY/siB,OAAS,EAAG,CACxB,IAAIysiB,EAAYlpiB,KAAKw+hB,kBAAkBgL,EAAY,IAC/CL,EAAWnpiB,KAAKg+hB,iBAAiBwL,EAAYA,EAAY/siB,OAAS,IACtEuD,KAAKzC,MAAMsb,YAAYqwhB,EAAUtshB,YAAY,GAC7C,IAAIo+f,EAAWmuB,EAASrha,UACxB9nI,KAAK6e,IAAIq5gB,qBAAqBld,EAAUA,EAASxd,eAAiB,QAGrE,CACD,IAAIisC,EAAuB/J,EAAczrC,WAAWiE,2BAA2BC,EAAWA,GACtFuxC,EAAqBhK,EAAczrC,WAAWiE,2BAA2BE,EAASA,GACtF,GAAIqxC,EAAqBhtiB,OAAS,GAAKitiB,EAAmBjtiB,OAAS,EAAG,CAC9DysiB,EAAYlpiB,KAAKw+hB,kBAAkBiL,EAAqB,IAExDN,EAAWnpiB,KAAKg+hB,iBAAiB0L,EAAmBA,EAAmBjtiB,OAAS,IACpFuD,KAAKzC,MAAMsb,YAAYqwhB,EAAUtshB,YAAY,GACzCo+f,EAAWmuB,EAASrha,UACxB9nI,KAAK6e,IAAIq5gB,qBAAqBld,EAAUA,EAASxd,eAAiB,MAKlFx9f,KAAKqpiB,eAAerpiB,KAAKzC,MAAOyC,KAAK6e,MAMzCutV,EAAU/wW,UAAUqniB,eAAiB,WACjC,IAAIiH,EAAW3piB,KAAKzC,MAChBqsiB,EAAS5piB,KAAK6e,IAKlB,GAJK7e,KAAKigiB,YACN0J,EAAW3piB,KAAK6e,IAChB+qhB,EAAS5piB,KAAKzC,QAEbE,EAAkBksiB,KAAclsiB,EAAkBmsiB,KAAYnsiB,EAAkBuC,KAAK87P,SAAS6tS,EAAUC,IAAU,CACnH,IAAIlK,OAAgB,EAEpB,IADAA,EAAgB1/hB,KAAKs6hB,mBAAmBqP,EAAS9mD,UAAUwR,eAAgBu1C,EAAO/mD,UAAUwR,iBAC1EJ,WAAW9vf,SAASyliB,EAAO/mD,UAAUwR,gBAAiB,CACpE,IAAI8D,EAAYn4f,KAAK2/hB,gBAAgBgK,EAAS9mD,UAAUwR,eAAgBqrC,GACpEtnC,EAAUp4f,KAAK2/hB,gBAAgBiK,EAAO/mD,UAAUwR,eAAgBqrC,GACpE,GAAI1/hB,KAAK6/hB,aAAaH,EAAekK,EAAO/mD,UAAUwR,gBAAiB,CACnE,IAAI3zb,EAAMy3b,EAAUjE,SAChBg1C,EAAYlpiB,KAAKw+hB,kBAAkB99d,EAAIuib,aAAa,IACpDkmD,EAAWnpiB,KAAKg+hB,iBAAiBt9d,EAAIuib,aAAavib,EAAIuib,aAAaxmf,OAAS,IAChFuD,KAAKzC,MAAMsb,YAAYqwhB,EAAUtshB,YAAY,GAC7C5c,KAAK6e,IAAIq5gB,qBAAqBiR,EAASrha,UAAWqha,EAASrha,UAAU01X,eAAiB,OAErF,CACG0rC,EAAYlpiB,KAAKw+hB,kBAAkBrmC,EAAUjE,SAASjR,aAAa,IACnEkmD,OAAW,EAEfA,EAAWnpiB,KAAKg+hB,iBAAiB5lC,EAAQlE,SAASjR,aAAamV,EAAQlE,SAASjR,aAAaxmf,OAAS,IACtGuD,KAAKzC,MAAMsb,YAAYqwhB,EAAUtshB,YAAY,GAC7C5c,KAAK6e,IAAIq5gB,qBAAqBiR,EAASrha,UAAWqha,EAASrha,UAAU01X,eAAiB,KAIlGx9f,KAAKqpiB,eAAerpiB,KAAKzC,MAAOyC,KAAK6e,MAMzCutV,EAAU/wW,UAAUyniB,gBAAkB,WAClC,IAAIvliB,EAAQyC,KAAKzC,MACbshB,EAAM7e,KAAK6e,IAKf,GAJK7e,KAAKigiB,YACN1iiB,EAAQyC,KAAK6e,IACbA,EAAM7e,KAAKzC,QAEXE,EAAkBuC,KAAK87P,SAASv+P,EAAOshB,IAA3C,CAGA,GAAI7e,KAAKs6O,SACL,GAAI/8O,EAAMslf,UAAUuR,gBAAkB32f,EAAkBF,EAAMslf,UAAUwR,gBAAiB,EACjF60C,EAAYlpiB,KAAKw+hB,kBAAkBjhiB,EAAMslf,UAAUwR,oBACnD80C,EAAWnpiB,KAAKg+hB,iBAAiBn/gB,EAAIgke,UAAUwR,kBAE/Cr0f,KAAKzC,MAAMsb,YAAYswhB,EAASvshB,YAAY,GAC5C5c,KAAK6e,IAAIq5gB,qBAAqBiR,EAASrha,UAAWqha,EAASrha,UAAU01X,eAAiB,KAGtFx9f,KAAKzC,MAAMsb,YAAYqwhB,EAAUtshB,YAAY,GAC7C5c,KAAK6e,IAAIq5gB,qBAAqBiR,EAASrha,UAAWqha,EAASrha,UAAU01X,eAAiB,SAI7F,CACD,IAAIkiC,EAAgB1/hB,KAAKggiB,iBAAiBziiB,EAAMslf,UAAUwR,gBAE1D,GAAIr0f,KAAK6/hB,aAAaH,EAAeniiB,EAAMslf,UAAUwR,iBAAmBr0f,KAAK6/hB,aAAaH,EAAe7ghB,EAAIgke,UAAUwR,gBAAiB,CACpI,IAAI60C,EAAYlpiB,KAAKw+hB,kBAAkBkB,GACnCyJ,EAAWnpiB,KAAKg+hB,iBAAiB0B,GAChCjiiB,EAAkByriB,IAAezriB,EAAkB0riB,KACpDnpiB,KAAKzC,MAAMsb,YAAYqwhB,EAAUtshB,YAAY,GAC7C5c,KAAK6e,IAAIq5gB,qBAAqBiR,EAASrha,UAAWqha,EAASrha,UAAU01X,eAAiB,KAIlGx9f,KAAKqpiB,eAAerpiB,KAAKzC,MAAOyC,KAAK6e,OAMzCutV,EAAU/wW,UAAUuK,UAAY,WAC5B,IAAIyihB,EACAme,EACJ,GAAIxmiB,KAAKsvf,MAAMye,sBAAuB,CAClC,IAAIha,EAAe/zf,KAAK6piB,mBAAmB7piB,KAAKzC,MAAMslf,WACtDwlC,EAAgBrohB,KAAKqmiB,oBAAoBtyC,EAAan3e,YAAY,GAClE4phB,EAAcxmiB,KAAKqmiB,oBAAoBtyC,EAAajsX,WAAW,QAG/DugZ,EAAgBrohB,KAAKsvf,MAAM+4B,cAC3Bme,EAAcxmiB,KAAKsvf,MAAMk3C,YAGxB/oiB,EAAkB4qhB,KACnBrohB,KAAKzC,MAAMw6hB,oBAAoB1P,GAC/BrohB,KAAK6e,IAAIq5gB,qBAAqBsO,EAAY3vB,cAAe2vB,EAAY76hB,OAAS,GAC9E3L,KAAKo+hB,sBAAwBp+hB,KAAK6e,IAAI6O,SAAS3gB,EAC/C/M,KAAK8kiB,sBAAqB,KAOlC14L,EAAU/wW,UAAU6riB,eAAiB,WAC7BzpiB,EAAkBuC,KAAKzC,SAG3ByC,KAAK6e,IAAIq8gB,eACTl7hB,KAAKo+hB,sBAAwBp+hB,KAAK6e,IAAI6O,SAAS3gB,EAC/C/M,KAAK8kiB,sBAAqB,KAM9B14L,EAAU/wW,UAAUgsiB,cAAgB,WAC5B5piB,EAAkBuC,KAAKzC,SAG3ByC,KAAK6e,IAAI2ga,cACTx/a,KAAKo+hB,sBAAwBp+hB,KAAK6e,IAAI6O,SAAS3gB,EAC/C/M,KAAK8kiB,sBAAqB,KAM9B14L,EAAU/wW,UAAUyuiB,qBAAuB,WACvC,SAAK9piB,KAAKzC,MAAMslf,UAAUuR,gBAAiBp0f,KAAK6e,IAAIgke,UAAUuR,eACtDp0f,KAAKzC,MAAMslf,UAAUwR,iBAAmBr0f,KAAK6e,IAAIgke,UAAUwR,iBACxDr0f,KAAKukgB,eAAevkgB,KAAKzC,MAAMslf,UAAUwR,eAAgBr0f,KAAKzC,MAAOyC,KAAK6e,OASzFutV,EAAU/wW,UAAUuriB,kBAAoB,SAAUp8U,GAC9C,IAAI/sN,EAAkBuC,KAAKzC,OAA3B,CAGqByC,KAAK8piB,uBAEtB9piB,KAAK6e,IAAIk7gB,+BAA+B/5hB,MAGxCA,KAAK6e,IAAI88gB,wBAAwBnxU,EAAe,EAAI,GAEpDA,GACAxqN,KAAKzC,MAAMw6hB,oBAAoB/3hB,KAAK6e,KAExC7e,KAAKo+hB,sBAAwBp+hB,KAAK6e,IAAI6O,SAAS3gB,EAC/C/M,KAAK8kiB,sBAAqB,KAM9B14L,EAAU/wW,UAAUyriB,gBAAkB,SAAUt8U,GAC5C,IAAI/sN,EAAkBuC,KAAKzC,OAA3B,CAGmByC,KAAK8piB,uBAEpB9piB,KAAK6e,IAAI++gB,6BAGT59hB,KAAK6e,IAAIighB,sBAAsBt0U,EAAe,EAAI,GAAG,GAErDA,GACAxqN,KAAKzC,MAAMw6hB,oBAAoB/3hB,KAAK6e,KAExC7e,KAAKo+hB,sBAAwBp+hB,KAAK6e,IAAI6O,SAAS3gB,EAC/C/M,KAAK8kiB,sBAAqB,KAM9B14L,EAAU/wW,UAAUksiB,iBAAmB,WAC/B9piB,EAAkBuC,KAAKzC,SAG3ByC,KAAK6e,IAAIsqf,eAAenpgB,KAAKo+hB,uBAC7Bp+hB,KAAK8kiB,sBAAqB,KAI9B14L,EAAU/wW,UAAU0uiB,gBAAkB,SAAUx2C,GAC5C,IAAIj1H,EAAe,IAAI84J,GAAap3hB,KAAKsvf,OAEzC,OADAhxH,EAAa05J,2BAA2BzkC,GACjCj1H,GAMXlyB,EAAU/wW,UAAU4iI,QAAU,SAAU+ra,GACpC,KAAIvsiB,EAAkBuC,KAAKzC,QAAUE,EAAkBuC,KAAK6e,MACrDphB,EAAkBuC,KAAKzC,MAAMslf,YAAcplf,EAAkBuC,KAAK6e,IAAIgke,YAD7E,CAIA,IAAI/1N,EAAgB9sR,KAAKzC,MACrB4rhB,EAAcnphB,KAAK6e,IACvB,OAAIiuQ,EAAcurQ,iBAAiBlP,GACxB,GAEJnphB,KAAKiqiB,gBAAgBn9Q,EAAeq8P,EAAa6gB,KAM5D59L,EAAU/wW,UAAU4uiB,gBAAkB,SAAU1siB,EAAOshB,EAAKmrhB,GACxD,GAAIzsiB,EAAMi7hB,aAAa35gB,GAAM,CACzB,IAAIkP,EAAOlP,EACXA,EAAMthB,EACNA,EAAQwwB,EAEZ,IAAI++P,EAAgBvvR,EAChB4rhB,EAActqgB,EAElB,KAAKphB,EAAkBF,IAAWE,EAAkBohB,IAASphB,EAAkBF,EAAMslf,YAAeplf,EAAkBohB,EAAIgke,YAAY,CAClI,IAAIn9d,EAAa,EACbE,EAAW,EACX4we,EAAcj5f,EAAMoO,OACpB00f,EAAYxhf,EAAIlT,OAChBu+hB,EAAiB3siB,EAAMs5gB,cAAcliB,UAAU6B,EAAa9we,GAChEA,EAAawkhB,EAAej4hB,MAC5B,IAAImzI,EAAS8kZ,EAAelpiB,QAE5B,GAAIokJ,aAAkBkmW,KAAoB7tf,EAAkB2nJ,EAAOomW,UAAW,CAC1E,IAAI2+C,EAAcnqiB,KAAKoqiB,kBAAkBhlZ,EAAQ1/H,GACjD0/H,EAAS+kZ,EAAYnpiB,QACrB0kB,EAAaykhB,EAAYl4hB,MAE7B,IAAIo4hB,EAAexrhB,EAAIg4f,cAAcliB,UAAU0L,EAAWz6e,GACtD0khB,EAAYD,EAAarpiB,QAC7B4kB,EAAWykhB,EAAap4hB,MACxB,IAAIwa,EAAO,GASX,GAPI24H,aAAkBqvW,IAAmBu1C,GAAgC,IAAftkhB,EACtD+G,EAAOkxe,GAAWW,gBAEbl5W,aAAkBovW,KAEvB/ne,EAAShvB,EAAkB2nJ,EAAO34H,OAA4B,KAAjB24H,EAAW,MAAaA,EAAO34H,KAAKhwB,OAASipB,EAAa+G,EAAO24H,EAAO34H,KAAKvI,UAAUwB,IAEpIonQ,EAAc+1N,YAAcsmC,EAAYtmC,UACpCz9V,aAAkBu4W,KACdv4W,IAAWklZ,GAAallZ,aAAkBovW,GAC1C/ne,EAAOA,EAAKhwB,OAASmpB,EAAWF,EAAa+G,EAAOA,EAAKvI,UAAU,EAAG0B,EAAWF,GAE5E0/H,EAAOusK,oBAAoBgsM,KAEhClxe,GAAczsB,KAAKuqiB,cAAcnlZ,EAAOusK,SAAUw3N,EAAYtmC,UAAWynD,EAAW1khB,EAAUokhB,UAKtG,GAAI5kZ,aAAkBu4W,IAAcv4W,EAAOusK,oBAAoBgsM,GAC3Dlxe,GAAczsB,KAAKuqiB,cAAcnlZ,EAAOusK,SAAUw3N,EAAYtmC,eAAW1nf,EAAW,EAAG6uiB,OAEtF,CAED,IAAIQ,EAAsBxqiB,KAAKo6e,OAAOxqa,UAAU2qd,sBAAsBztQ,EAAc+1N,WAEpF,IADAp2d,GAAc,MACNhvB,EAAkB+siB,IAAwBA,EAAoBlwT,WAAW,CAE7E,GADA7tN,GAAc,KACV+9gB,IAAwBrhB,EAAYtmC,UACpC,OAAOp2d,EAEX+9gB,EAAsBxqiB,KAAKo6e,OAAOxqa,UAAU2qd,sBAAsBiQ,GAEjE/siB,EAAkB+siB,IAAyBA,EAAoBlwT,YAEhE7tN,GAAczsB,KAAKuqiB,cAAcC,EAAoBvnD,aAAa,GAAG7oe,SAAS,GAAI+ugB,EAAYtmC,UAAWynD,EAAW1khB,EAAUokhB,IAQ1I,OAHI3pC,IAAe8oB,EAAyB,cAAE3rB,eAAiB,IAC3D/we,GAAc,MAEXA,IAQf2/U,EAAU/wW,UAAUkviB,cAAgB,SAAUh2C,EAAek2C,EAAoBH,EAAW1khB,EAAUokhB,GAClG,IAAIv9gB,EAAO,GACX,EAAG,CACC,GAAI8ne,IAAkB+1C,EAAW,CAC7B,GAAI/1C,aAAyBC,GAAgB,CACzC,IAAI7xb,EAAO4xb,EACL92f,EAAkBklE,EAAKl2C,OAAuB,KAAdk2C,EAAKl2C,OACnCk2C,EAAKl2C,KAAKhwB,OAASmpB,EACnB6G,GAAck2C,EAAKl2C,KAGnBA,GAAck2C,EAAKl2C,KAAKvI,UAAU,EAAG0B,SAKxC2ue,aAAyBE,IAAmBu1C,GAAiBpkhB,IAAa2ue,EAAc93f,SAC7FgwB,GAAckxe,GAAWW,iBAE7B,OAAO7xe,EAgBX,GAdI8ne,aAAyBC,GACzB/ne,GAAc8ne,EAAc9ne,KAEvB8ne,aAAyBE,IAAmBu1C,EACjDv9gB,GAAckxe,GAAWW,gBAEpB/J,aAAyBjJ,KAAoB7tf,EAAkB82f,EAAc/I,YAK9E+I,EAJC92f,EAAkB82f,EAAcwJ,gBAIjBxJ,EAAc/I,SAHd+I,EAAcwJ,gBAMlCtggB,EAAkB82f,EAAc5iM,UAChC,MAEJ4iM,EAAgBA,EAAc5iM,gBACxBl0T,EAAkB82f,IAC5B,GAAIk2C,IAAuBl2C,EAAczmc,KAAK+0b,UAC1C,OAAOp2d,EAIX,IADA,IAAI+9gB,EAAsBxqiB,KAAKo6e,OAAOxqa,UAAU2qd,sBAAsBhmC,EAAczmc,KAAK+0b,YACjFplf,EAAkB+siB,IAAwBA,EAAoBlwT,WAAW,CAE7E,GADA7tN,GAAc,KACV+9gB,IAAwBC,EACxB,OAAOh+gB,EAEX+9gB,EAAsBxqiB,KAAKo6e,OAAOxqa,UAAU2qd,sBAAsBiQ,GAEtE,IAAK/siB,EAAkB+siB,KAAyBA,EAAoBlwT,UAAW,CAC3E,IAAI+jR,EAAamsC,EAAoBvnD,aAAa,GAElDx2d,EAAOA,EAAO,KAAOzsB,KAAKuqiB,cAAclsC,EAAWjkf,SAAS,GAAIqwhB,EAAoBH,EAAW1khB,EAAUokhB,GAE7G,OAAOv9gB,GAOX2/U,EAAU/wW,UAAUg+gB,aAAe,SAAU5tB,GACzC,IAAI2tB,EAAY,GAChB,KAAM3tB,EAAWD,oBAAoBF,IACjC,OAAO8tB,EAEX,IAAIv2B,EAAY4I,EAAW5I,UACvB61C,EAAejtC,EAAWD,SAAS3I,UACnC4I,EAAWsS,0BAA0BzS,KACrCotC,EAAejtC,EAAWsS,eAAelb,WAE7C,IAAI6nD,EAAiBj/C,EAAW39b,KAAK8jc,aACjClse,EAAa+le,EAAWmG,aAC5B,EAAG,CAEC,GADAwnB,GAAap5gB,KAAK2qiB,qBAAqB9nD,EAAW6nD,EAAgBhlhB,GAC9Dm9d,IAAc61C,EACd,MAEJ71C,EAAY7if,KAAKu6hB,sBAAsB13C,GACvC6nD,EAAiB,EACjBhlhB,EAAa,QACRm9d,aAAqBC,IAC9B,OAAOs2B,EAAUlpgB,QAErBk8V,EAAU/wW,UAAUsviB,qBAAuB,SAAU9nD,EAAW6nD,EAAgBj+B,GAE5E,IAAK,IADD2M,EAAY,GACPj9gB,EAAIuuiB,EAAgBvuiB,EAAI0mf,EAAUI,aAAaxmf,OAAQN,IAAK,CAEjE,IAAK,IADD2xD,EAAO+0b,EAAUI,aAAa9mf,GACzBqrB,EAAMilf,EAAajlf,EAAMsmC,EAAK1zC,SAAS3d,OAAQ+qB,IAAO,CAC3D,IAAIxmB,EAAU8sD,EAAK1zC,SAASoN,GAI5B,GAHIxmB,aAAmBwzf,KACnB4kB,GAAap4gB,EAAQyrB,MAErBzrB,aAAmBsqf,KACO,IAAtBtqf,EAAQuqf,WAAyC,IAAtBvqf,EAAQuqf,WACvC,OAAO6tB,EAGf3M,EAAc,EAElB,OAAO2M,GAKXhtK,EAAU/wW,UAAUuviB,oBAAsB,WACtC,IAAI/nD,EAAY7if,KAAKzC,MAAMslf,UAI3B,IAHK7if,KAAKs6O,SAAYt6O,KAAKigiB,YACvBp9C,EAAY7if,KAAK6e,IAAIgke,WAElBA,aAAqBC,IAAmBD,EAAUI,aAAaxmf,OAAS,GAAG,CAC9E,IAAIqxD,EAAO+0b,EAAUjme,WACrB,GAAIkxC,EAAK1zC,SAAS3d,OAAS,EAAG,CAC1B,IAAIuE,EAAU8sD,EAAK1zC,SAAS,GACxB6uf,EAAcjogB,EAAQ2wT,SAC1B,GAAI3wT,aAAmBsqf,IAAyC,IAAtBtqf,EAAQuqf,WAAmB0d,aAAuBzU,IAC5B,IAAzDyU,EAAYx8e,KAAKvc,OAAO0F,cAAcrX,QAAQ,OACjD,OAAOyC,EAGf6hf,EAAYA,EAAUsP,yBAQ9B/lJ,EAAU/wW,UAAUwviB,iBAAmB,SAAUn4R,GAC7C,GAAIA,EAAQ4/O,8BAA8B5P,GAAY,CAClD,IAAIsR,EAAQthP,EAAQ4/O,mBAAmBrP,aAAa,GACpD,OAAOjjf,KAAKgmiB,uBAAuBhyC,KAO3C5nJ,EAAU/wW,UAAUyviB,qBAAuB,SAAUp4R,GACjD,GAAIA,EAAQy/O,kCAAkCzP,GAAY,CACtD,IAAIiG,EAAaj2O,EAAQy/O,uBACrB6B,EAAQrL,EAAW1F,aAAa0F,EAAW1F,aAAaxmf,OAAS,GACrE,OAAOuD,KAAKopiB,sBAAsBp1C,KAQ1C5nJ,EAAU/wW,UAAU0viB,wBAA0B,SAAU9ne,GACpD,IAAI8ie,EAAa9ie,EAAKggb,aAAa,GACnC,OAAI8iD,aAAsBjjD,GACfijD,EAGA/liB,KAAK+2gB,6BAA6BgvB,IAOjD35L,EAAU/wW,UAAU07gB,6BAA+B,SAAU92c,GACzD,GAAIA,EAAMgjb,aAAaxmf,OAAS,EAAG,CAC/B,IAEIu3f,EAFW/zb,EAAMgjb,aAAa,GACdA,aAAa,GAChBA,aAAa,GAC9B,OAAOjjf,KAAKgmiB,uBAAuBhyC,KAQ3C5nJ,EAAU/wW,UAAU2viB,2BAA6B,SAAU/qe,GACvD,GAAIA,EAAMgjb,aAAaxmf,OAAS,EAAG,CAC/B,IAEIogO,EAFU58J,EAAM6nE,UACGA,UACEA,UACzB,OAAO9nI,KAAKopiB,sBAAsBvsU,KAQ1CuvI,EAAU/wW,UAAU4viB,2BAA6B,SAAUhre,GACvD,GAAIA,EAAMgjb,aAAaxmf,OAAS,EAAG,CAC/B,IAEIogO,EAFM58J,EAAMrjD,WACGkrH,UACMA,UACzB,OAAO9nI,KAAKopiB,sBAAsBvsU,KAQ1CuvI,EAAU/wW,UAAU89hB,mBAAqB,SAAUrre,EAAMniD,GACrD,IAAIipf,EAAgB,EAChBilC,EAAY/re,EAAK6mc,UAAUhpf,EAAQipf,GACnCxvW,EAASy0Y,EAAU74hB,QAEvB,GADA4zf,EAAgBilC,EAAU5nhB,OACrBxU,EAAkB2nJ,IAAWwvW,IAAkBxvW,EAAO3oJ,QAAU2oJ,EAAOusK,oBAAoB25L,GAAiB,CAC7G,IAAIouC,EAAkB15hB,KAAK25hB,oBAAoBv0Y,EAAOusK,UAClD+nO,aAA2BpuC,IAAiD,IAA9BouC,EAAgBnuC,YAC9DnmW,EAASs0Y,GAGjB,OAAOt0Y,GAMXgnN,EAAU/wW,UAAU6viB,sBAAwB,SAAU9lZ,GAClD,OAAIA,EAAO84W,wBAAwB1J,GACxBpvW,EAAO84W,aAEd94W,EAAO84W,wBAAwB5S,IAAmBX,GAAcU,uBAAuBjmW,EAAO84W,cACxD,IAAlC94W,EAAO84W,aAAa3S,WAAqD,IAAlCnmW,EAAO84W,aAAa3S,UACpDnmW,EAAO84W,aAEX94W,EAAO84W,aAAazS,WAE1Bhuf,EAAkB2nJ,EAAO84W,mBAA9B,EACWl+f,KAAKkriB,sBAAuB9lZ,EAAmB,eAQ9DgnN,EAAU/wW,UAAU8viB,kBAAoB,SAAU/lZ,GAC9C,OAAIA,EAAOusK,oBAAoB6iM,GACpBpvW,EAAOusK,SAEdvsK,EAAOusK,oBAAoB25L,IAAoBX,GAAcU,uBAAuBjmW,EAAOusK,UACzD,IAA9BvsK,EAAOusK,SAAS45L,WAAiD,IAA9BnmW,EAAOusK,SAAS45L,UAC5CnmW,EAAOusK,SAEXvsK,EAAOusK,SAAS65L,SAEtB/tf,EAAkB2nJ,EAAOusK,eAA9B,EACW3xT,KAAKmriB,kBAAmB/lZ,EAAe,WAQtDgnN,EAAU/wW,UAAUo+f,kBAAoB,SAAUzF,GAS9C,GARIA,EAAMI,gBAEFJ,EADAA,EAAMK,eAAeJ,WAAWG,cACxBp0f,KAAKy5f,kBAAkBzF,EAAMK,eAAeJ,YAG5CD,EAAMK,eAAeJ,YAGjCD,aAAiBjB,GACjB,OAAOiB,GAOf5nJ,EAAU/wW,UAAUk9hB,cAAgB,SAAUh7hB,EAAOy2f,GACjD,GAAIz2f,EAAM62f,cAAe,CACrB,IAAIg3C,EAAQ7tiB,EAAM82f,eAClB,GAAIL,EAAMI,cAAe,CACrB,IAAIi3C,EAAQr3C,EAAMK,eAClB,GAAI+2C,IAAUC,EACV,OAAOD,EAAMnoD,aAAa1kf,QAAQhB,GAAS6tiB,EAAMnoD,aAAa1kf,QAAQy1f,GAE1E,GAAIo3C,EAAMl3C,WAAam3C,EAAMn3C,SACzB,OAAOk3C,EAAMvyQ,UAAYwyQ,EAAMxyQ,UAEnC,GAAIuyQ,EAAMn3C,aAAeo3C,EAAMp3C,WAC3B,OAAOm3C,EAAMl3C,SAASzzN,SAAW4qQ,EAAMn3C,SAASzzN,SAGpD,IAAIi/P,EAAgB1/hB,KAAKs6hB,mBAAmB8Q,EAAOC,GACnD,OAAI3L,EAAczrC,WAAW9vf,SAASkniB,IAClCD,EAAQpriB,KAAK2/hB,gBAAgByL,EAAO1L,GACpC2L,EAAQrriB,KAAK2/hB,gBAAgB0L,EAAO3L,GAChC0L,IAAU1L,EACH1/hB,KAAKu4hB,cAAch7hB,EAAO8tiB,EAAMp3C,YAEvCo3C,IAAU3L,EACH1/hB,KAAKu4hB,cAAc6S,EAAMn3C,WAAYD,GAE5C0rC,EAAcxrC,WAAam3C,EAAMn3C,SAC1BwrC,EAAc7mQ,UAAYwyQ,EAAMxyQ,UAEvC6mQ,EAAczrC,aAAeo3C,EAAMp3C,WAC5ByrC,EAAcxrC,SAASzzN,SAAW4qQ,EAAMn3C,SAASzzN,SAErDzgS,KAAKu4hB,cAAc6S,EAAMn3C,WAAYo3C,EAAMp3C,aAE/Cj0f,KAAKu4hB,cAAcmH,EAAczrC,WAAYj0f,KAAKy5f,kBAAkB4xC,EAAMp3C,aAGjF,IAAIA,EAAaj0f,KAAKy5f,kBAAkBl8f,GACxC,OAAOyC,KAAKu4hB,cAActkC,EAAYD,GAGzC,GAAIA,EAAMI,cAAe,CACtBH,EAAaj0f,KAAKy5f,kBAAkBzF,GACxC,OAAOh0f,KAAKu4hB,cAAch7hB,EAAO02f,GAI7B,GAAI12f,EAAM2lf,kBAAoB8Q,EAAM9Q,gBAChC,OAAO3lf,EAAM0U,MACT+hf,EAAM/hf,MAEd,GAAI1U,EAAM2lf,2BAA2BR,IAAcsR,EAAM9Q,2BAA2BR,GAAY,CAI5F,OAFgB1if,KAAKo6e,OAAOlvQ,MAAM3sO,QAAQhB,EAAM2lf,gBAAgBjzV,MAClDjwJ,KAAKo6e,OAAOlvQ,MAAM3sO,QAAQy1f,EAAM9Q,gBAAgBjzV,MAK1E,OAAO,GAKXm8M,EAAU/wW,UAAUm9hB,aAAe,SAAUj7hB,EAAOy2f,GAChD,GAAIz2f,EAAM62f,cAAe,CACrB,IAAIg3C,EAAQ7tiB,EAAM82f,eAElB,GAAIL,EAAMI,cAAe,CACrB,IAAIi3C,EAAQr3C,EAAMK,eAClB,GAAI+2C,IAAUC,EACV,OAAOD,EAAMnoD,aAAa1kf,QAAQhB,GAAS6tiB,EAAMnoD,aAAa1kf,QAAQy1f,GAE1E,GAAIo3C,EAAMl3C,WAAam3C,EAAMn3C,SACzB,OAAOk3C,EAAMvyQ,UAAYwyQ,EAAMxyQ,UAEnC,GAAIuyQ,EAAMn3C,aAAeo3C,EAAMp3C,WAC3B,OAAOm3C,EAAMl3C,SAASzzN,SAAW4qQ,EAAMn3C,SAASzzN,SAGpD,IAAIi/P,EAAgB1/hB,KAAKs6hB,mBAAmB8Q,EAAOC,GACnD,OAAI3L,EAAczrC,WAAW9vf,SAASkniB,IAClCD,EAAQpriB,KAAK2/hB,gBAAgByL,EAAO1L,GACpC2L,EAAQrriB,KAAK2/hB,gBAAgB0L,EAAO3L,GAChC0L,IAAU1L,EACH1/hB,KAAKw4hB,aAAaj7hB,EAAO8tiB,EAAMp3C,YAEtCo3C,IAAU3L,EACH1/hB,KAAKw4hB,aAAa4S,EAAMn3C,WAAYD,GAE3C0rC,EAAcxrC,WAAam3C,EAAMn3C,SAC1BwrC,EAAc7mQ,UAAYwyQ,EAAMxyQ,UAEvC6mQ,EAAczrC,aAAeo3C,EAAMp3C,WAC5ByrC,EAAcxrC,SAASzzN,SAAW4qQ,EAAMn3C,SAASzzN,SAErDzgS,KAAKw4hB,aAAa4S,EAAMn3C,WAAYo3C,EAAMp3C,aAE9Cj0f,KAAKw4hB,aAAakH,EAAczrC,WAAYj0f,KAAKy5f,kBAAkB4xC,EAAMp3C,aAGhF,IAAIA,EAAaj0f,KAAKy5f,kBAAkBl8f,GACxC,OAAOyC,KAAKw4hB,aAAavkC,EAAYD,GAGxC,GAAIA,EAAMI,cAAe,CACtBH,EAAaj0f,KAAKy5f,kBAAkBzF,GACxC,OAAOh0f,KAAKw4hB,aAAaj7hB,EAAO02f,GAGhC,GAAI12f,EAAM2lf,kBAAoB8Q,EAAM9Q,gBAChC,OAAO3lf,EAAM0U,MACT+hf,EAAM/hf,MAEd,GAAI1U,EAAM2lf,2BAA2BR,IAAcsR,EAAM9Q,2BAA2BR,GAAY,CAI5F,OAFgB1if,KAAKo6e,OAAOlvQ,MAAM3sO,QAAQhB,EAAM2lf,gBAAgBjzV,MAClDjwJ,KAAKo6e,OAAOlvQ,MAAM3sO,QAAQy1f,EAAM9Q,gBAAgBjzV,MAatE,OAAO,GAMXm8M,EAAU/wW,UAAUiwiB,oBAAsB,SAAUC,EAAenmZ,GAC/D,GAAImmZ,EAAcz9e,OAASs3F,EAAOt3F,KAC9B,OAAOy9e,EAAcz9e,KAAK1zC,SAAS7b,QAAQgtiB,GACvCnmZ,EAAOt3F,KAAK1zC,SAAS7b,QAAQ6mJ,GAErC,GAAImmZ,EAAcz9e,KAAK+0b,YAAcz9V,EAAOt3F,KAAK+0b,UAC7C,OAAO0oD,EAAcz9e,KAAK+0b,UAAUI,aAAa1kf,QAAQgtiB,EAAcz9e,MACjEs3F,EAAOt3F,KAAK+0b,UAAUI,aAAa1kf,QAAQ6mJ,EAAOt3F,MAE5D,IAAI2qe,EAAiB8S,EAAcz9e,KAAK+0b,UACpC61C,EAAetzY,EAAOt3F,KAAK+0b,UAC/B,GAAI41C,EAAev1C,kBAAoBw1C,EAAax1C,gBAAiB,CACjE,GAAIu1C,EAAerkC,cACf,OAAOqkC,EAAepkC,eAAepR,aAAa1kf,QAAQk6hB,GACtDC,EAAarkC,eAAepR,aAAa1kf,QAAQm6hB,GAEpD,KAAID,EAAev1C,2BAA2BgP,IAK/C,OAAOumC,EAAev1C,gBAAgBD,aAAa1kf,QAAQk6hB,GACvDC,EAAax1C,gBAAgBD,aAAa1kf,QAAQm6hB,GAG9D,OAAO14hB,KAAKu4hB,cAAcE,EAAgBC,IAM9CtsL,EAAU/wW,UAAUmwiB,mBAAqB,SAAUD,EAAenmZ,GAC9D,GAAImmZ,EAAcz9e,OAASs3F,EAAOt3F,KAC9B,OAAOy9e,EAAcz9e,KAAK1zC,SAAS7b,QAAQgtiB,GACvCnmZ,EAAOt3F,KAAK1zC,SAAS7b,QAAQ6mJ,GAErC,GAAImmZ,EAAcz9e,KAAK+0b,YAAcz9V,EAAOt3F,KAAK+0b,UAC7C,OAAO0oD,EAAcz9e,KAAK+0b,UAAUI,aAAa1kf,QAAQgtiB,EAAcz9e,MACjEs3F,EAAOt3F,KAAK+0b,UAAUI,aAAa1kf,QAAQ6mJ,EAAOt3F,MAE5D,IAAI2qe,EAAiB8S,EAAcz9e,KAAK+0b,UACpC61C,EAAetzY,EAAOt3F,KAAK+0b,UAC/B,GAAI41C,EAAev1C,kBAAoBw1C,EAAax1C,gBAAiB,CACjE,GAAIu1C,EAAerkC,cACf,OAAOqkC,EAAepkC,eAAepR,aAAa1kf,QAAQk6hB,GACtDC,EAAarkC,eAAepR,aAAa1kf,QAAQm6hB,GAEpD,KAAID,EAAev1C,2BAA2BgP,IAK/C,OAAOumC,EAAev1C,gBAAgBD,aAAa1kf,QAAQk6hB,GACvDC,EAAax1C,gBAAgBD,aAAa1kf,QAAQm6hB,GAG9D,OAAO14hB,KAAKw4hB,aAAaC,EAAgBC,IAM7CtsL,EAAU/wW,UAAU09hB,qBAAuB,SAAU/kC,GACjD,OAAIv2f,EAAkBu2f,EAAMiI,YACjBjI,EAAM1B,mBAEV0B,EAAMiI,YAMjB7vJ,EAAU/wW,UAAUowiB,yBAA2B,SAAUz3C,GACrD,OAAIv2f,EAAkBu2f,EAAMuF,gBACjBvF,EAAM7B,uBAEV6B,EAAMuF,gBAMjBntJ,EAAU/wW,UAAUk/hB,sBAAwB,SAAUvmC,GAClD,GAAIA,EAAM1B,8BAA8BxP,GACpC,OAAOkR,EAAM1B,mBAEZ,GAAI0B,EAAM1B,8BAA8BS,GACzC,OAAO/yf,KAAK+2gB,6BAA6B/iB,EAAM1B,oBAEnD,GAAI0B,EAAM9Q,2BAA2B6O,GACjC,OAAO/xf,KAAK0riB,qBAAqB13C,EAAM9Q,iBAEtC,GAAI8Q,EAAM9Q,2BAA2BR,GAAY,CACjCsR,EAAM9Q,gBACvB,OAAOljf,KAAK6qiB,iBAAiB72C,EAAM9Q,iBAElC,OAAI8Q,EAAM9Q,2BAA2BgP,IAAsBlyf,KAAKohiB,mBAC1DphiB,KAAK2riB,gCAAgC33C,QAD3C,GAQT5nJ,EAAU/wW,UAAUswiB,gCAAkC,SAAU33C,GAC5D,IACI0S,EADA3S,EAAeC,EAAM9Q,gBAEzB,IAAyD,IAArD6Q,EAAaP,iBAAiBj1f,QAAQ,UACtCmogB,EAAY3S,EAAa9jW,KAAK6jW,aAAal3e,eAE1C,CAAA,IAAIm3e,EAAa9jW,KAAK4uI,SAIvB,OAHA6nO,EAAY3S,EAAa9jW,KAAK4uI,SAASg1N,aAAaj3e,WAKxD,OAAI8pf,aAAqB5jB,GACd4jB,EAGA1mgB,KAAKy+hB,yBAAyB/3B,IAM7Ct6J,EAAU/wW,UAAUuwiB,mCAAqC,SAAU53C,GAC/D,IACIonB,EADArnB,EAAeC,EAAM9Q,gBAEzB,IAAyD,IAArD6Q,EAAaP,iBAAiBj1f,QAAQ,UACtC68gB,EAAgBrnB,EAAa9jW,KAAK4jW,aAAa/rX,cAE9C,CAAA,IAAIisX,EAAa9jW,KAAK4hW,aAIvB,OAHAupB,EAAgBrnB,EAAa9jW,KAAK4hW,aAAaiC,aAAahsX,UAKhE,OAAIszY,aAAyBt4B,GAClBs4B,EAGAp7gB,KAAKy+hB,yBAAyBrjB,IAO7ChvK,EAAU/wW,UAAU8+hB,0BAA4B,SAAUnmC,GACtD,OAAIA,EAAM7B,kCAAkCrP,GACjCkR,EAAM7B,uBAER6B,EAAM7B,kCAAkCY,GACtC/yf,KAAKgriB,2BAA4Bh3C,EAA4B,wBAEpEA,EAAM9Q,2BAA2B6O,GAC1B/xf,KAAK6riB,yBAA0B73C,EAAqB,iBAEtDA,EAAM9Q,2BAA2BR,GAC/B1if,KAAK8qiB,qBAAqB92C,EAAM9Q,iBAElC8Q,EAAM9Q,2BAA2BgP,IAAsBlyf,KAAKohiB,mBAC1DphiB,KAAK4riB,mCAAmC53C,QAD9C,GAST5nJ,EAAU/wW,UAAU2qiB,uBAAyB,SAAUhyC,GACnD,OAAIA,aAAiBlR,GACVkR,EAEFA,aAAiBjB,GACf/yf,KAAK+2gB,6BAA6B/iB,QADxC,GAST5nJ,EAAU/wW,UAAU+tiB,sBAAwB,SAAUp1C,GAClD,OAAIA,aAAiBlR,GACVkR,EAEFA,aAAiBjB,GACf/yf,KAAKgriB,2BAA2Bh3C,QADtC,GAST5nJ,EAAU/wW,UAAU4/hB,eAAiB,SAAUp4C,EAAWtlf,EAAOshB,GAE7D,IAAK,IAAI1iB,EADG0mf,EAAUI,aAAa1kf,QAAQhB,EAAMuwD,MAC7B3xD,EAAI0mf,EAAUI,aAAaxmf,OAAQN,IACnD,IAAK,IAAIonB,EAAI,EAAGA,EAAIs/d,EAAUI,aAAa9mf,GAAGie,SAAS3d,OAAQ8mB,IAAK,CAChE,IAAI6hI,EAASy9V,EAAUI,aAAa9mf,GAAGie,SAASmJ,GAChD,GAAsB,IAAlB6hI,EAAO3oJ,OAAX,CAGA,GAAI2oJ,IAAWvmI,EACX,OAAO,EAEX,GAAIumI,aAAkBovW,IAAkBpvW,aAAkBqvW,IAClDrvW,aAAkBkmW,IAAmBX,GAAcU,uBAAuBjmW,GAC9E,OAAO,GAInB,OAAO,GAMXgnN,EAAU/wW,UAAUs8hB,mBAAqB,SAAU90C,EAAWipD,EAAS3B,GAEnE,IAAK,IADD1tiB,EAAS,EACJ8mB,EAAI,EAAGA,EAAIs/d,EAAUI,aAAaxmf,OAAQ8mB,IAAK,CACpD,IAAIuqC,EAAO+0b,EAAUI,aAAa1/d,GAClC,GAAIuohB,aAAmB34C,IAAc24C,IAAYh+e,EAAM,CAC/Cq8e,IACA1tiB,GAAUuD,KAAK64hB,cAAc/qe,EAAMq8e,IAEvC,MAEJ1tiB,GAAUuD,KAAK64hB,cAAc/qe,GAEjC,OAAOrxD,GAMX2vW,EAAU/wW,UAAUw9hB,cAAgB,SAAU/qe,EAAMq8e,GAEhD,IAAK,IADD1tiB,EAAS,EACJN,EAAI,EAAGA,EAAI2xD,EAAK1zC,SAAS3d,OAAQN,IAAK,CAC3C,IAAI6E,EAAU8sD,EAAK1zC,SAASje,GAC5B,KAAI6E,aAAmB+zf,IAAvB,CAGA,GAAIo1C,GAAeA,EAAYnpiB,mBAAmB28f,IAAcwsC,EAAYnpiB,UAAYA,EAAS,CAC7FvE,GAAU0tiB,EAAYl4hB,MACtB,MAEJxV,GAAUuE,EAAQvE,QAEtB,OAAOA,GAMX2vW,EAAU/wW,UAAU0wiB,YAAc,SAAUlpD,EAAWl3e,GAInD,IAAK,IAHDmiD,OAAO3yD,EACPsB,EAAS,EACTuviB,EAAcnpD,EAAUI,aAAaxmf,OAChC8mB,EAAI,EAAGA,EAAIyohB,IAChBl+e,EAAO+0b,EAAUI,aAAa1/d,GAC9B9mB,EAASuD,KAAK64hB,cAAc/qe,KACxBniD,GAAUlP,GAAU8mB,IAAMyohB,EAAc,IAHfzohB,IAOzB5X,GAAkBlP,EAG1B,OAASqxD,KAAQA,EAAMniD,OAAUA,IAKrCygW,EAAU/wW,UAAU4wiB,eAAiB,SAAUn+e,EAAMniD,GAGjD,IAAK,IADD3K,OAAU7F,EACLgB,EAAI,EAAGA,EAAI2xD,EAAK1zC,SAAS3d,OAAQN,IAEtC,MADA6E,EAAU8sD,EAAK1zC,SAASje,cACD44f,IAAvB,CAGA,KAAIppf,EAAS3K,EAAQvE,SACXkP,IAAW3K,EAAQvE,OAAS,GAAKgB,EAAkBuD,EAAQ2wT,UAIjE,MAHAhmT,GAAkB3K,EAAQvE,OAMlC,OAASuE,QAAWA,EAASiR,MAAStG,IAM1CygW,EAAU/wW,UAAUi8hB,eAAiB,SAAUz0C,GAE3C,GAAIA,EAAUI,aAAaxmf,OAAS,EAAG,CACnC,IAAIwmf,EAAeJ,EAAUI,aAAa,GAC1C,OAAOjjf,KAAK45hB,mBAAmB32C,GAEnC,OALkB,GAUtB72I,EAAU/wW,UAAUu+hB,mBAAqB,SAAU9re,GAE/C,IAAK,IADD0oc,EAAc,EACTr6f,EAAI,EAAGA,EAAI2xD,EAAK1zC,SAAS3d,OAAQN,IAAK,CAC3C,IAAIipJ,EAASt3F,EAAK1zC,SAASje,GAC3B,GAAsB,IAAlBipJ,EAAO3oJ,OAAX,CAGA,GAAI2oJ,aAAkBovW,IAAkBpvW,aAAkBqvW,IAAmBrvW,aAAkBsvW,IACvFtvW,aAAkBkmW,IAAmBX,GAAcU,uBAAuBjmW,GAC9E,OAAOoxW,EAEPpxW,aAAkB2vW,KAGtByB,GAAepxW,EAAO3oJ,SAE1B,OAAO+5f,GAMXpqJ,EAAU/wW,UAAU6+hB,yBAA2B,SAAUj3d,GACrD,IAAKxlE,EAAkBwlE,EAAKkvb,wBAAyB,CACjD,GAAKnyf,KAAKigiB,UASL,CACD,IAAIxtC,EAAUxvb,EAAKkvb,uBAAuBlP,aAE1C,OADI+Q,EAAQvB,EAAQA,EAAQh2f,OAAS,cAChBqmf,GACVkR,EAIAh0f,KAAKksiB,8BAA8Bl4C,EAAM/Q,aAAa+Q,EAAM/Q,aAAaxmf,OAAS,IAhB7F,IAAIu3f,EACJ,OADIA,EAAQ/wb,EAAKkvb,uBAAuBlP,aAAa,cAChCH,GACVkR,EAGAh0f,KAAKmsiB,2BAA2Bn4C,GAenD,OAAOh0f,KAAKosiB,wBAAwBnpe,EAAKixb,WAM7C9nJ,EAAU/wW,UAAU+wiB,wBAA0B,SAAU1re,GACpD,IAAKjjE,EAAkBijE,EAAIyxb,wBAAyB,CAChD,GAAKnyf,KAAKigiB,UAMN,OAAOjgiB,KAAKksiB,8BAA8Bxre,EAAIyxb,wBAL9C,IACI6B,EADOtzb,EAAIyxb,uBAAuBlP,aAAa,GAClCA,aAAa,GAC9B,OAAOjjf,KAAKgmiB,uBAAuBhyC,GAM3C,OAAOh0f,KAAK26hB,0BAA0Bj6d,EAAIuzb,aAK9C7nJ,EAAU/wW,UAAUg/hB,sBAAwB,SAAUrmC,GAClD,OAAIA,EAAM1B,8BAA8BxP,GAC7BkR,EAAM1B,mBAER0B,EAAM1B,8BAA8BS,GACrC/yf,KAAKs6O,SAAWt6O,KAAKigiB,UACdjgiB,KAAKiriB,2BAA2Bj3C,EAAM1B,oBAGtCtyf,KAAKqsiB,0BAA0Br4C,EAAM1B,mBAAmBrP,aAAa,IAGhF+Q,EAAM9Q,2BAA2B6O,GAC1B/xf,KAAKg/hB,qBAAqBhrC,EAAM9Q,iBAElC8Q,EAAM9Q,2BAA2BR,GAC/B1if,KAAKssiB,iBAAiBt4C,EAAM9Q,sBADlC,GAST92I,EAAU/wW,UAAU2jiB,qBAAuB,SAAU/7d,GACjD,IAAKxlE,EAAkBwlE,EAAKqvb,oBAAqB,CAC7C,GAAItyf,KAAKs6O,SAAWt6O,KAAKigiB,UAAW,CAEhC,IAAIjsC,EAAQ/wb,EAAKqvb,mBAAmBrP,aAAahgb,EAAKqvb,mBAAmBrP,aAAaxmf,OAAS,GAC/F,OAAOuD,KAAKopiB,sBAAsBp1C,GAKlC,OADIA,EAAQ/wb,EAAKqvb,mBAAmBrP,aAAa,cAC5BH,GACVkR,EAGAh0f,KAAKqsiB,0BAA0Br4C,EAAM/Q,aAAa,IAIrE,OAAOjjf,KAAKusiB,oBAAoBtpe,EAAKixb,WAMzC9nJ,EAAU/wW,UAAUkxiB,oBAAsB,SAAU7re,GAChD,IAAKjjE,EAAkBijE,EAAI4xb,oBAAqB,CAE5C,GADyBtyf,KAAKs6O,SAAWt6O,KAAKigiB,UACtB,CAEpB,IAAIh9d,EAAOvC,EAAI4xb,mBAAmBrP,aAAavib,EAAI4xb,mBAAmBrP,aAAaxmf,OAAS,GACxFu3f,EAAQ/wb,EAAKggb,aAAahgb,EAAKggb,aAAaxmf,OAAS,GACzD,OAAOuD,KAAKopiB,sBAAsBp1C,GAGlC,OAAOh0f,KAAKqsiB,0BAA0B3re,EAAI4xb,oBAGlD,OAAOtyf,KAAKq6hB,sBAAsB35d,EAAIuzb,aAM1C7nJ,EAAU/wW,UAAUixiB,iBAAmB,SAAU55R,GAC7C,GAAIA,EAAQ4/O,8BAA8B5P,GAAY,CAClD,IAAIsR,EAAQthP,EAAQ4/O,mBAAmBrP,aAAa,GACpD,OAAI+Q,aAAiBlR,GACVkR,EAGHh0f,KAAKs6O,SAAWt6O,KAAKigiB,UACdjgiB,KAAKiriB,2BAA2Bj3C,GAGhCh0f,KAAKqsiB,0BAA0Br4C,EAAM/Q,aAAa,MASzE72I,EAAU/wW,UAAUgxiB,0BAA4B,SAAU3re,GAEtD,IAAIuC,EAAOvC,EAAIuib,aAAa,GAC5B,GAAIjjf,KAAKzC,MAAMslf,UAAUuR,eAClB1zb,EAAIuzb,WAAW9vf,SAASnE,KAAKzC,MAAMslf,UAAUwR,gBAAiB,CACjE,IAAI8D,EAAYn4f,KAAKwsiB,eAAe9re,EAAIuzb,WAAYj0f,KAAKzC,MAAMslf,UAAUwR,gBACzEpxb,EAAOjjE,KAAK89hB,qBAAqBp9d,EAAKy3b,EAAWn4f,KAAKo+hB,uBAAuB,GAEjF,IAAIpqC,EAAQ/wb,EAAKggb,aAAa,GAC9B,OAAOjjf,KAAKgmiB,uBAAuBhyC,IAKvC5nJ,EAAU/wW,UAAUs/hB,0BAA4B,SAAU3mC,GACtD,OAAIA,EAAM7B,kCAAkCrP,GACjCkR,EAAM7B,uBAER6B,EAAM7B,kCAAkCY,GACxC/yf,KAAKigiB,UAKCjgiB,KAAKksiB,8BAA8Bl4C,EAAM7B,uBAAuBlP,aAAa+Q,EAAM7B,uBAAuBlP,aAAaxmf,OAAS,IAJhIuD,KAAKmsiB,2BAA2Bn4C,EAAM7B,wBAOjD6B,EAAM9Q,2BAA2B6O,GAC1B/xf,KAAKk6hB,yBAAyBlmC,EAAM9Q,iBAEtC8Q,EAAM9Q,2BAA2BR,GAC/B1if,KAAKysiB,qBAAqBz4C,EAAM9Q,sBADtC,GAST92I,EAAU/wW,UAAUoxiB,qBAAuB,SAAU/5R,GACjD,GAAIA,EAAQy/O,kCAAkCzP,GAAY,CACtD,IAAIowB,EAAiBpgQ,EAAQy/O,uBACzB6B,EAAQ8e,EAAe7vB,aAAa6vB,EAAe7vB,aAAaxmf,OAAS,GAC7E,GAAIu3f,aAAiBlR,GACjB,OAAOkR,EAGP,GAAKh0f,KAAKigiB,UAGL,CACD,IAAIj4B,EAAchU,EAElB,OAAOh0f,KAAKksiB,8BAA8BlkC,EAAY/kB,aAAa+kB,EAAY/kB,aAAaxmf,OAAS,IALrG,OAAOuD,KAAKmsiB,2BAA2Bn4C,KAcvD5nJ,EAAU/wW,UAAU6wiB,8BAAgC,SAAUxre,GAE1D,IAAIuC,EAAOvC,EAAIuib,aAAavib,EAAIuib,aAAaxmf,OAAS,GACtD,GAAIuD,KAAKzC,MAAMslf,UAAUuR,eAClB1zb,EAAIuzb,WAAW9vf,SAASnE,KAAKzC,MAAMslf,UAAUwR,gBAAiB,CACjE,IAAI8D,EAAYn4f,KAAKwsiB,eAAe9re,EAAIuzb,WAAYj0f,KAAKzC,MAAMslf,UAAUwR,gBACzEpxb,EAAOjjE,KAAKq+hB,oBAAoB39d,EAAKy3b,EAAWn4f,KAAKo+hB,uBAAuB,GAEhF,IAAIpqC,EAAQ/wb,EAAKggb,aAAahgb,EAAKggb,aAAaxmf,OAAS,GACzD,OAAOuD,KAAKopiB,sBAAsBp1C,IAMtC5nJ,EAAU/wW,UAAUgjiB,oBAAsB,SAAU39d,EAAKy3b,EAAWu0C,EAAWC,GAC3E,IAAIpviB,EAAQyC,KAAK4liB,YAAYlle,EAAKy3b,GAC9Bt5e,EAAMthB,EAAQ46f,EAAU7D,WAAWj/N,UACnC3mM,GAAO,EACX,GAAInxF,GAASmviB,GAAaA,EAAY7thB,EAClC,IAAK,IAAI1iB,EAAIukE,EAAIuib,aAAaxmf,OAAS,EAAGN,GAAK,EAAGA,IAAK,CACnD,IAAIqQ,EAAOxM,KAAK4liB,YAAYlle,EAAKA,EAAIuib,aAAa9mf,IAClD,GAAIwuf,GAAcltd,MAAMlgC,EAAO,IAAMotf,GAAcltd,MAAMjxB,EAAM,IAC3Dm+e,GAAcltd,MAAMjxB,EAAM,GAAKm+e,GAAcltd,MAAM5e,EAAK,GAExD,OADA6vE,GAAO,EACAhuB,EAAIuib,aAAa9mf,QAKhC,IAASA,EAAIukE,EAAIuib,aAAaxmf,OAAS,EAAGN,GAAK,EAAGA,IAAK,CAEnD,IADIqQ,EAAOxM,KAAK4liB,YAAYlle,EAAKA,EAAIuib,aAAa9mf,MACtCuwiB,GAAalgiB,EAAOk0D,EAAIuib,aAAa9mf,GAAGm4f,WAAWj/N,UAAYq3Q,EAEvE,OADAh+c,GAAO,EACAhuB,EAAIuib,aAAa9mf,GAIpC,GAAIuyF,EAAM,CACN,IAAKjxF,EAAkBijE,EAAIyxb,yBAA2Bw6C,EAClD,OAAO3siB,KAAKq+hB,oBAAoB39d,EAAIyxb,uBAAwBgG,EAAWu0C,EAAWC,GAEjF,IAAKlviB,EAAkBijE,EAAI4xb,sBAAwBq6C,EACpD,OAAO3siB,KAAKq+hB,oBAAoB39d,EAAI4xb,mBAAoB6F,EAAWu0C,EAAWC,GAGtF,OAAOjse,EAAIuib,aAAavib,EAAIuib,aAAaxmf,OAAS,IAMtD2vW,EAAU/wW,UAAUmxiB,eAAiB,SAAUvse,EAAOy1b,GAClD,KAAOA,EAAUzB,WAAWG,eAAe,CACvC,GAAIn0b,EAAMpnB,OAAO68c,EAAUzB,YACvB,OAAOyB,EAEXA,EAAYA,EAAUzB,WAAWI,eAErC,OAAOqB,GAMXtpJ,EAAU/wW,UAAU8wiB,2BAA6B,SAAUlse,GACvD,GAAIA,EAAMgjb,aAAaxmf,OAAS,EAAG,CAC/B,IAEIogO,EAFU58J,EAAMgjb,aAAahjb,EAAMgjb,aAAaxmf,OAAS,GACtCwmf,aAAa,GACXA,aAAa,GACtC,OAAOjjf,KAAKgmiB,uBAAuBnpU,KAQ3CuvI,EAAU/wW,UAAUq/hB,uBAAyB,SAAU73C,EAAWl3e,GAC9D,GAAe,IAAXA,EACA,OAAO,EAIX,IAAK,IAFDihiB,EAAc,EACd9thB,EAAQ,EACH3iB,EAAI,EAAGA,EAAI0mf,EAAUI,aAAaxmf,OAAQN,IAE/C,IAAK,IADDkigB,EAAaxb,EAAUI,aAAa9mf,GAC/BonB,EAAI,EAAGA,EAAI86e,EAAWjkf,SAAS3d,OAAQ8mB,IAAK,CACjD,IAAI6hI,EAASi5W,EAAWjkf,SAASmJ,GACjC,GAAsB,IAAlB6hI,EAAO3oJ,OAAX,CAGA,GAAIkP,GAAUmT,EAAQsmI,EAAO3oJ,OACzB,OAAOkP,EAAS,IAAMmT,EAAQ8thB,EAAcjhiB,EAAS,GAErDy5I,aAAkBovW,IAAkBpvW,aAAkBqvW,IAClDrvW,aAAkBkmW,IAAmBX,GAAcU,uBAAuBjmW,MAC9EwnZ,EAAc9thB,EAAQsmI,EAAO3oJ,QAEjCqiB,GAASsmI,EAAO3oJ,QAGxB,OAAOkP,EAAS,IAAMmT,EAAQ8thB,EAAcjhiB,EAAS,GAMzDygW,EAAU/wW,UAAUo+hB,mBAAqB,SAAU3re,EAAMniD,GAErD,IAAK,IADDmT,EAAQ,EACH3iB,EAAI,EAAGA,EAAI2xD,EAAK1zC,SAAS3d,OAAQN,IAAK,CAC3C,IAAIipJ,EAASt3F,EAAK1zC,SAASje,GAC3B,KAAsB,IAAlBipJ,EAAO3oJ,QAAgB2oJ,aAAkB2vW,IAA7C,CAGA,GAAIppf,EAASmT,EAAQsmI,EAAO3oJ,SACpB2oJ,aAAkBovW,IAAkBpvW,aAAkBqvW,IAClDrvW,aAAkBkmW,IAAmBX,GAAcU,uBAAuBjmW,IAC9E,OAAQz5I,EAASmT,EAAQnT,EAASmT,GAAS,EAGnDA,GAASsmI,EAAO3oJ,QAEpB,OAAOkP,GAMXygW,EAAU/wW,UAAUsvgB,qBAAuB,SAAU9nB,EAAW13P,EAAWE,GACvE,IAAIv+N,EAAO9sB,KAAKo6e,OAAOouB,WAAWmC,qBAAqB9nB,EAAU7E,iBAC7D2gB,EAAiB7xe,EAAKg+e,eACtBv3c,EAAYzmC,EAAKwid,OACjBu9D,EAAoBluC,EACxB,GAAI9b,aAAqBC,GAAiB,CAEtC,GAAID,EAAUI,aAAaxmf,OAAS,EACfomf,EAAUI,aAAa,GAG5C,IAAI3iQ,EAActgP,KAAKo6e,OAAOvpb,OAAOg6c,eAAehoB,EAAWtvb,GAC3D41b,EAAgBnpf,KAAKo6e,OAAOvpb,OAAO+5c,iBAAiB/nB,GACxD13P,EAAY0hT,EAAoBluC,EAChCtzQ,EAAe93L,EAAYs5e,GAAqB//gB,EAAKwid,OAASqvB,GAE9D,IAAItV,EAAkBxG,EAAUjF,gBAAgByL,gBACxB,aAApBA,EACI/oQ,EAAc/sL,EACd83L,GAAgB/K,EAAc/sL,EAG9B43L,GAAa7K,EAAc/sL,EAGN,YAApB81b,EACLl+P,GAAa7K,GAAe6K,EAAYr+N,EAAKwid,OAASjkP,GAEjD/K,EAAc6K,EAAYr+N,EAAKwid,OAASjkP,IAC7CF,GAAa7K,GAAe6K,EAAYr+N,EAAKwid,OAASjkP,IAE1DF,GAAag+P,EACb99P,GAAgBw3P,EAAUjF,gBAAgBwL,aAE9C,OAASpze,MAAS8W,EAAKuid,MAAOt5d,OAAU+W,EAAKwid,OAAQnkP,UAAaA,EAAWE,aAAgBA,IAKjG+gH,EAAU/wW,UAAU+8hB,4BAA8B,SAAUtqe,EAAMniD,EAAQwshB,GACtE,GAAIrqe,EAAK+0b,UAAUvoQ,UAAW,CAC1B,IAAI6iR,EAAkBrvc,EAAK+0b,UACvBr2e,EAAO2wf,EAAgBpwf,EAC3B,GAAIowf,EAAgBla,aAAaxmf,OAAS,EAAG,CACzC,IAAI4hgB,EAAalB,EAAgBla,aAAa,GAC9Cz2e,EAAOxM,KAAK0+Q,QAAQ2/O,GAExB,IAEIvxe,EAAO9sB,KAAK2qgB,qBAAqB78c,EAAK+0b,UAF1B,EACG,GAKnB,OAHIl3e,EAAS,IACTa,GAAQsgB,EAAK9W,OAEV,IAAIkkC,GAAM1tC,EAAM2wf,EAAgBnwf,EANvB,GAShB,IAAI4nf,EAAgB,EAChBilC,EAAY/re,EAAK6mc,UAAUhpf,EAAQipf,GACnCxvW,EAASy0Y,EAAU74hB,QAYvB,OAXA4zf,EAAgBilC,EAAU5nhB,MAWnBjS,KAAK8siB,0BAA0B1nZ,EAAQwvW,EAAeujC,IAOrE/rL,EAAU/wW,UAAU+oiB,yBAA2B,SAAU7miB,EAAOshB,GAC5D,IAAIthB,EAAMslf,UAAUuR,eAAmBv1e,EAAIgke,UAAUuR,eAC5C72f,EAAMslf,UAAUwR,eAAex7c,OAAOh6B,EAAIgke,UAAUwR,kBACtDr0f,KAAKukgB,eAAehngB,EAAMslf,UAAUwR,eAAgB92f,EAAOshB,GAG7D,CACD,IAAIumI,OAASjqJ,EACT8W,EAAQ,EACZ,IAAKjS,KAAKsvf,MAAMzR,gBAAkBtgf,EAAMslf,YAAchke,EAAIgke,UACtD,GAAItlf,EAAMoO,OAAS,IAAMkT,EAAIlT,OAAQ,CACjC,IAAIkuhB,EAAYh7gB,EAAIg4f,cAAcliB,UAAU91e,EAAIlT,OAAQsG,GAGxD,GAFAmzI,EAASy0Y,EAAU74hB,QACnBiR,EAAQ4nhB,EAAU5nhB,MACdmzI,aAAkBqvW,GAAiB,CACjBl3f,EAAMs5gB,cAAcnne,UAAU01G,EAAQ,KACpC7nJ,EAAMoO,SACtBy5I,OAASjqJ,QAIhB,CACD,IAAIy5f,EAAgB,EAChBs1C,EAAiB3siB,EAAMs5gB,cAAcliB,UAAUp3f,EAAMoO,OAAQipf,GAC7Dm4C,EAAc7C,EAAelpiB,SACjC4zf,EAAgBs1C,EAAej4hB,SACT86hB,EAAYtwiB,SAC9BswiB,EAAc/siB,KAAKo7hB,0BAA0B2R,EAAan4C,IAE9D,IAAIy1C,EAAexrhB,EAAIg4f,cAAcliB,UAAU91e,EAAIlT,OAAQipf,GACvD01C,EAAYD,EAAarpiB,QAG7B,GAFA4zf,EAAgBy1C,EAAap4hB,MAEzB86hB,aAAuBzhD,IAAmBg/C,aAAqBh/C,KAAoB7tf,EAAkBsviB,EAAYhvC,gBAAiB,CAClI,IAAIivC,EAAaD,EAAYhvC,eAAepsM,SACxCq7O,aAAsBv4C,IAAmBu4C,EAAWr7O,WAAa24O,IACjEllZ,EAAS4nZ,IAKzB,IAAKhtiB,KAAKsvf,MAAMzR,gBAAkBz4V,aAAkBqvW,IAAmBz0f,KAAKsvf,MAAM7U,iBAAkB,CAChG,IAAIwyD,EAAgBjtiB,KAAKktiB,sBAAsB9nZ,EAAQnzI,GACnDyrf,EAAauvC,EAAcjsiB,QAC/BiR,EAAQg7hB,EAAch7hB,MAClBjS,KAAKsvf,MAAMo0B,yBACX1jhB,KAAKsvf,MAAMnjB,mBAAmBghE,qBAAqBzvC,GACnD19f,KAAKsvf,MAAMnjB,mBAAmBihE,oBAE9BptiB,KAAKo6e,OAAOqnC,eACZzhhB,KAAKo6e,OAAO3ib,WAAW/yD,MAAM4xC,QAAU,OACvCt2C,KAAKo6e,OAAO9qX,SAAS5qH,MAAM4xC,QAAU,aAIzCt2C,KAAKkjW,UAAU3lW,EAAMslf,UAAWtlf,EAAOshB,QAnD3C7e,KAAKqtiB,cAAc9viB,EAAMslf,UAAUwR,eAAgBr0f,KAAMzC,EAAOshB,IA0DxEutV,EAAU/wW,UAAU6nW,UAAY,SAAU2/I,EAAWtlf,EAAOshB,GACxD,IAAI08gB,EAAsB,EACtB0B,EAAoB,EACpBqQ,OAAenyiB,EACfoyiB,OAAapyiB,EACbg8gB,OAAkBh8gB,EAClBqyiB,OAAgBryiB,EAEhBsyiB,EAAeztiB,KAAK0tiB,mBAAmB7qD,EAAWtlf,EAAO+viB,EAAc/R,GAGvEpkB,EADA15gB,EADJ6viB,EAAeG,EAAazsiB,SAEN6hf,EAAUI,aAAa,GAGvBqqD,EAAax/e,KAEnCyte,EAAsBkS,EAAax7hB,MACnC,IAAI07hB,EAAa3tiB,KAAK4tiB,iBAAiB/uhB,EAAK0uhB,EAAYtQ,GAGpDuQ,GAFJD,EAAaI,EAAW3siB,SAEJusiB,EAAWz/e,KAGXjvC,EAAIgke,UAAUI,aAAapke,EAAIgke,UAAUI,aAAaxmf,OAAS,GAEnFwgiB,EAAoB0Q,EAAW17hB,MAC/B,IAAIvF,EAAM,EACNF,EAAO,EAKX,GAJK/O,EAAkB05gB,KACnBzqgB,EAAM1M,KAAK8+Q,OAAOq4P,GAClB3qgB,EAAOxM,KAAKu/hB,gBAAgBpoB,EAAiBm2B,EAAc/R,IAE1D99hB,EAAkB05gB,IAAoBA,IAAoBq2B,EAK1D,CACD,IAAK/viB,EAAkB05gB,GAAkB,CACrC,IAAIpqgB,EAAIoqgB,EAAgBt0B,UAAU91e,EAClC/M,KAAKqkiB,sBAAsBltB,EAAiBn3gB,KAAKuiQ,SAAS40Q,GAAiB,IAAS3qgB,EAAOO,GAAIP,EAAME,GACrG,IAAIykQ,EAAYgmQ,EAAgBt0B,UAAUI,aAAa1kf,QAAQ44gB,GAG/D,GADAn3gB,KAAK6tiB,mBAAmBhrD,EAAW1xO,EAAY,EAAGq8R,EAAeD,EAAYtQ,IAClB,IAAvDp6C,EAAUI,aAAa1kf,QAAQsgB,EAAIg4f,eACnC,OAGR72gB,KAAK8tiB,mBAAmBjrD,EAAWtlf,EAAOshB,OAhBgC,CAE1E,IAAIpS,EAAQzM,KAAKu/hB,gBAAgBiO,EAAeD,EAAYtQ,GAC5Dj9hB,KAAKqkiB,sBAAsBltB,EAAiB1qgB,EAAQD,EAAMA,EAAME,KAgBxE0/V,EAAU/wW,UAAUyyiB,mBAAqB,SAAUjrD,EAAWtlf,EAAOshB,GACjE,IAAIm1e,EAAQnR,EAAUyP,mBACjB70f,EAAkBu2f,KACfA,aAAiBlR,GACjB9if,KAAKkjW,UAAU8wJ,EAAOz2f,EAAOshB,GAG7B7e,KAAK+tiB,eAAe/5C,EAAOz2f,EAAOshB,KAS9CutV,EAAU/wW,UAAUqyiB,mBAAqB,SAAU7qD,EAAWtlf,EAAO+viB,EAAc/R,GAC/E,IAAI5vhB,EAASk3e,IAActlf,EAAMslf,UAAYtlf,EAAMoO,OAAS3L,KAAKs3hB,eAAez0C,GAC5EqnD,OAAiB/uiB,EASrB,GAPI+uiB,EADArnD,IAActlf,EAAMslf,UACHtlf,EAAMs5gB,cAAcliB,UAAUhpf,EAAQ4vhB,GAGtC14C,EAAUjme,WAAW+3e,UAAUhpf,EAAQ4vhB,GAE5D+R,EAAepD,EAAelpiB,QAC9Bu6hB,EAAsB2O,EAAej4hB,MACjCq7hB,aAAwBhiD,GAAiB,CACzC,IAAImvC,EAAaz6hB,KAAKoqiB,kBAAkBkD,EAAc/R,GACtD+R,EAAe7S,EAAWz5hB,QAC1Bu6hB,EAAsBd,EAAWxohB,MAKrC,OAHItG,IAAW3L,KAAK23hB,mBAAmBp6hB,EAAMslf,WAAa,GACtD04C,KAGAtphB,MAASsphB,EAAqBv6hB,QAAWssiB,IAOjDlhM,EAAU/wW,UAAUuyiB,iBAAmB,SAAU/uhB,EAAK0uhB,EAAYtQ,GAC9D,IAAIoN,EAAexrhB,EAAIg4f,cAAcliB,UAAU91e,EAAIlT,OAAQsxhB,GAG3D,GAFAsQ,EAAalD,EAAarpiB,QAC1Bi8hB,EAAoBoN,EAAap4hB,MAC7Bs7hB,aAAsBjiD,GAAiB,CACvC,IAAImvC,EAAaz6hB,KAAKoqiB,kBAAkBmD,EAAYtQ,GACpDsQ,EAAa9S,EAAWz5hB,QACxBi8hB,EAAoBxC,EAAWxohB,MAMnC,OAJgB4M,EAAIgke,UAAUI,aAAa1kf,QAAQsgB,EAAIg4f,iBACrCh4f,EAAIgke,UAAUI,aAAaxmf,OAAS,GAAKoiB,EAAIlT,SAAW3L,KAAK64hB,cAAch6gB,EAAIg4f,eAAiB,IAC9GomB,EAAoBsQ,EAAaA,EAAW9wiB,OAAS,EAAI,IAEpDwV,MAASgrhB,EAAmBj8hB,QAAWusiB,IAMpDnhM,EAAU/wW,UAAU+thB,sBAAwB,SAAUt7d,EAAMniD,EAAQw9f,GAChE,IAAI9K,OAAaljgB,EACjB,GAA6B,IAAzB2yD,EAAK1zC,SAAS3d,QAAgBqxD,aAAgBqlc,GAC9CkL,EAAavwc,MAEZ,CACD,IAAI8mc,EAAgB,EAChB6lC,EAAa3se,EAAK6mc,UAAUhpf,EAAQipf,GACpCxvW,EAASq1Y,EAAWz5hB,QACxB4zf,EAAgB6lC,EAAWxohB,MAC3Bosf,EAAaj5W,aAAkBu4W,GAAav4W,EAAOt3F,KAC7C9tD,KAAKguiB,4BAA4B5oZ,EAAQwvW,EAAeuU,GAElE,OAAO9K,GAMXjyJ,EAAU/wW,UAAU8iiB,uBAAyB,SAAUxyhB,EAAQmiD,GAC3D,IAAImgf,OAAa9yiB,EACjB,GAA6B,IAAzB2yD,EAAK1zC,SAAS3d,OACdwxiB,EAAangf,MAEZ,CACD,IAAI8mc,EAAgB,EAChB6lC,EAAa3se,EAAK6mc,UAAUhpf,EAAQipf,GACpCxvW,EAASq1Y,EAAWz5hB,QACxB4zf,EAAgB6lC,EAAWxohB,MAC3Bg8hB,EAAajuiB,KAAKqkhB,cAAcj/X,EAAQwvW,GAE5C,OAAOq5C,GAQX7hM,EAAU/wW,UAAU6yiB,eAAiB,SAAUjue,EAAOk4b,EAAWC,GAC7D,IAAI76f,EAAQyC,KAAK4liB,YAAYztC,EAAUjE,SAAUiE,GAC7Ct5e,EAAMthB,EAAQ46f,EAAU7D,WAAWj/N,UACnC84Q,EAAcnuiB,KAAK4liB,YAAYxtC,EAAQlE,SAAUkE,GACjDg2C,EAAeD,EAAc/1C,EAAQ9D,WAAWj/N,UAChD93R,EAAQ4wiB,IACR5wiB,EAAQ4wiB,GAERtvhB,EAAMuvhB,IACNvvhB,EAAMuvhB,GAEN7wiB,EAAQyC,KAAKo+hB,wBACb7giB,EAAQyC,KAAKo+hB,uBAEbv/gB,EAAM7e,KAAKo+hB,wBACXv/gB,EAAM7e,KAAKo+hB,uBAEf,IAAIiQ,EAAwBpue,EAAM0yb,kBAC9B27C,EAAkBD,EAAsB9viB,QAAQ45f,EAAUjE,SAASD,YACnEs6C,EAAgBF,EAAsB9viB,QAAQ65f,EAAQlE,SAASD,YACnE,GAAIq6C,IAAoBC,EAEpB,IAAK,IADDzvhB,EAAQmhD,EAAMgjb,aAAa1kf,QAAQ65f,EAAQlE,UACtC/3f,EAAI8jE,EAAMgjb,aAAa1kf,QAAQ45f,EAAUjE,UAAW/3f,GAAK2iB,EAAO3iB,IACrE6D,KAAKwuiB,aAAavue,EAAMgjb,aAAa9mf,GAAIoB,EAAOshB,OAM/C,CAAA,IAFDugR,EAAgB,EAChBqvQ,EAAc,EAClB,IAAStyiB,EAAImyiB,EAAiBnyiB,GAAKoyiB,EAAepyiB,IAAK,CACnD8jE,EAAQoue,EAAsBlyiB,GAE1BijS,EADAjjS,IAAMmyiB,EACUrue,EAAMgjb,aAAa1kf,QAAQ45f,EAAUjE,UAGrC,EAGhBu6C,EADAtyiB,IAAMoyiB,EACQtue,EAAMgjb,aAAa1kf,QAAQ65f,EAAQlE,UAGnCj0b,EAAMgjb,aAAaxmf,OAAS,EAE9C,IAAK,IAAI8mB,EAAI67Q,EAAe77Q,GAAKkrhB,EAAalrhB,IAC1CvjB,KAAKwuiB,aAAavue,EAAMgjb,aAAa1/d,GAAIhmB,EAAOshB,MAUhEutV,EAAU/wW,UAAU0yiB,eAAiB,SAAU9te,EAAO1iE,EAAOshB,GACzD7e,KAAK0uiB,kBAAkBzue,EAAMgjb,aAAa,GAAI1lf,EAAOshB,GAChDA,EAAIgke,UAAUuR,eACXn0b,EAAM97D,SAAS0a,EAAIgke,UAAUwR,iBACjCr0f,KAAK8tiB,mBAAmB7te,EAAO1iE,EAAOshB,IAO9CutV,EAAU/wW,UAAUuqiB,YAAc,SAAUlle,EAAKuC,GAC7C,IAAIz2D,EAAO,EAEX,OADAA,GAAQy2D,EAAKl2D,EAAIk2D,EAAKxmC,OAAOjwB,MAOjC4/V,EAAU/wW,UAAUsziB,oBAAsB,SAAUjue,GAChD,IAAKjjE,EAAkBijE,EAAI4xb,oBAAqB,CAC5C,IACI0B,EADOtzb,EAAI4xb,mBAAmBrP,aAAa,GAC9BA,aAAa,GAC9B,OAAOjjf,KAAKgmiB,uBAAuBhyC,GAEvC,OAAOh0f,KAAKu6hB,sBAAsB75d,EAAIuzb,aAM1C7nJ,EAAU/wW,UAAUuziB,wBAA0B,SAAUlue,GACpD,IAAKjjE,EAAkBijE,EAAIyxb,wBAAyB,CAEhD,IAAIlvb,EAAOvC,EAAIyxb,uBAAuBrqX,UAClCksX,EAAQ/wb,EAAK6kE,UAAY7kE,EAAK6kE,UAAa7kE,EAAwB,oBAAE6kE,UACzE,OAAO9nI,KAAKopiB,sBAAsBp1C,GAEtC,OAAOh0f,KAAKm6hB,0BAA0Bz5d,EAAIuzb,aAM9C7nJ,EAAU/wW,UAAUwziB,YAAc,SAAUnue,EAAKg1b,GAC7C,IAA6C,IAAzCh1b,EAAIuib,aAAa1kf,QAAQm3f,GACzB,OAAO,EAEX,KAAOA,EAAUzB,WAAWG,eAAe,CACvC,IAA6C,IAAzC1zb,EAAIuib,aAAa1kf,QAAQm3f,GACzB,OAAO,EAEXA,EAAYA,EAAUzB,WAAWI,eAErC,OAAgD,IAAzC3zb,EAAIuib,aAAa1kf,QAAQm3f,IAMpCtpJ,EAAU/wW,UAAUmziB,aAAe,SAAU9te,EAAKnjE,EAAOshB,GACrD,IAAK,IAAI1iB,EAAI,EAAGA,EAAIukE,EAAIuib,aAAaxmf,OAAQN,IAAK,CAC9C,IAAIqQ,EAAOxM,KAAK4liB,YAAYlle,EAAKA,EAAIuib,aAAa9mf,IAC9Cwuf,GAAcltd,MAAMlgC,EAAO,IAAMotf,GAAcltd,MAAMjxB,EAAM,IAC3Dm+e,GAAcltd,MAAMjxB,EAAM,GAAKm+e,GAAcltd,MAAM5e,EAAK,IACxD7e,KAAK8uiB,oBAAoBpue,EAAIuib,aAAa9mf,MAQtDiwW,EAAU/wW,UAAUqziB,kBAAoB,SAAUhue,EAAKnjE,EAAOshB,GAC1D,IAAK,IAAI1iB,EAAI,EAAGA,EAAIukE,EAAIuib,aAAaxmf,OAAQN,IACzC6D,KAAK8uiB,oBAAoBpue,EAAIuib,aAAa9mf,IAE1C0iB,EAAIgke,UAAUuR,eAAiBp0f,KAAK6uiB,YAAYnue,EAAK7hD,EAAIgke,UAAUwR,iBAG9D3zb,EAAI4xb,8BAA8BL,IACvCjyf,KAAK0uiB,kBAAkBhue,EAAI4xb,mBAAoB/0f,EAAOshB,IAO9DutV,EAAU/wW,UAAU2iiB,iBAAmB,SAAU/6d,GAC7C,KAAOA,EAAK2vb,iBACJ3vb,EAAK2vb,gBAAgB3P,aAAaxmf,OAAS,GAC3CwmE,EAAOA,EAAK2vb,gBAMpB,IAAI/1R,EAOJ,OALIA,EADA55J,EAAKggb,aAAaxmf,OAAS,EACfwmE,EAAK6kE,UAGL7kE,EAAKyvb,oBAAoB5qX,UAElC9nI,KAAKopiB,sBAAsBvsU,IAMtCuvI,EAAU/wW,UAAUwkiB,aAAe,SAAUkP,EAAY9re,GACrD,GAAI8re,EAAWl2f,OAAOoqB,GAClB,OAAO,EAEX,KAAOA,EAAKgxb,WAAWG,eAAe,CAClC,GAAI26C,EAAWl2f,OAAOoqB,EAAKgxb,WAAWI,gBAClC,OAAO,EAEXpxb,EAAOA,EAAKgxb,WAAWI,eAE3B,OAAO,GAMXjoJ,EAAU/wW,UAAUkpgB,eAAiB,SAAUthc,EAAM6pN,EAAeq8P,GAChE,IAAI4U,EAAgB/9hB,KAAKg+hB,iBAAiB/6d,GAG1C,OADkB86d,IAAkB5U,EAAYtmC,WAAasmC,EAAYx9gB,SAAW3L,KAAK23hB,mBAAmBoG,GAAiB,IACrG/9hB,KAAK6/hB,aAAa58d,EAAM6pN,EAAc+1N,UAAUwR,kBACnEr0f,KAAK6/hB,aAAa58d,EAAMkmd,EAAYtmC,UAAUwR,iBAMvDjoJ,EAAU/wW,UAAUi/hB,mBAAqB,SAAUr3d,EAAMyyb,GACrD,KAAOzyb,EAAKgxb,WAAWG,eAAe,CAClC,GAAInxb,EAAKgxb,WAAW9vf,SAASuxf,GACzB,OAAOzyb,EAEXA,EAAOA,EAAKgxb,WAAWI,eAE3B,OAAOpxb,GAMXmpS,EAAU/wW,UAAUskiB,gBAAkB,SAAU18d,EAAMy8d,GAClD,GAAIz8d,EAAKgxb,WAAWp7c,OAAO6mf,EAAczrC,YACrC,OAAOhxb,EAEX,KAAOA,EAAKgxb,WAAWG,eAAe,CAClC,GAAInxb,EAAKgxb,WAAWI,eAAex7c,OAAO6mf,GACtC,OAAOz8d,EAEXA,EAAOA,EAAKgxb,WAAWI,eAE3B,OAAOpxb,GAKXmpS,EAAU/wW,UAAU2ziB,iBAAmB,WAEnC,IAAK,IADDlte,KACK3lE,EAAI,EAAGA,EAAI6D,KAAKo9gB,gBAAgB9/gB,KAAKb,OAAQN,IAAK,CACvD,IAAIw1f,EAAS3xf,KAAKo9gB,gBAAgB9/gB,KAAKnB,GACnCw1f,aAAkBI,IAClBjwb,EAAMt9D,KAAKmtf,GAGnB,OAAO7vb,GAMXsqS,EAAU/wW,UAAUqwiB,qBAAuB,SAAUzoe,GACjD,GAAIA,EAAKqvb,oBAAsBrvb,EAAKqvb,8BAA8BP,GAAiB,CAG/E,IAAIiC,GADJ/wb,EAAOA,EAAKqvb,oBACK11e,WACjB,OAAIo3e,EACOh0f,KAAKgmiB,uBAAuBhyC,GAG5Bh0f,KAAK0riB,qBAAqBzoe,GAGzC,OAAOjjE,KAAK2uiB,oBAAoB1re,EAAKigb,kBAMzC92I,EAAU/wW,UAAUwwiB,yBAA2B,SAAU5oe,GACrD,IAAKxlE,EAAkBwlE,EAAKkvb,yBAA2Blvb,EAAKkvb,kCAAkCJ,GAAiB,CAE3G,IAAIiC,GADJ/wb,EAAOA,EAAKkvb,wBACKrqX,UACjB,OAAO9nI,KAAKopiB,sBAAsBp1C,GAEtC,OAAOh0f,KAAK4uiB,wBAAwB3re,EAAKixb,WAM7C9nJ,EAAU/wW,UAAU2kiB,iBAAmB,SAAU/8d,GAC7C,MAAQxlE,EAAkBwlE,EAAKgxb,aAAehxb,EAAKgxb,WAAWG,eAC1Dnxb,EAAOA,EAAKgxb,WAAWI,eAE3B,OAAOpxb,GAOXmpS,EAAU/wW,UAAUgyiB,cAAgB,SAAUpqe,EAAM2M,EAAWryE,EAAOshB,GAClE,GAAIA,EAAIgke,UAAUuR,cAAe,CAC7B,IAAIsrC,EAAgB1/hB,KAAKs6hB,mBAAmBr3d,EAAMpkD,EAAIgke,UAAUwR,gBAChE,GAAIqrC,EAAczrC,WAAW9vf,SAAS0a,EAAIgke,UAAUwR,gBAAiB,CACjE,IAAI8D,EAAYn4f,KAAK2/hB,gBAAgB18d,EAAMy8d,GACvCtnC,EAAUp4f,KAAK2/hB,gBAAgB9ghB,EAAIgke,UAAUwR,eAAgBqrC,GACjE,GAAI1/hB,KAAK6/hB,aAAaH,EAAe7ghB,EAAIgke,UAAUwR,gBAG3Cr0f,KAAKukgB,eAAem7B,EAAeniiB,EAAOshB,GAC1C7e,KAAK8uiB,oBAAoBpP,GAGrBvnC,IAAcunC,EACd1/hB,KAAKkjW,UAAU3lW,EAAMslf,UAAWtlf,EAAOshB,GAGvC7e,KAAKiviB,mBAAmB92C,EAAW56f,EAAOshB,QAOlD,GADA7e,KAAK8uiB,oBAAoBpP,GACrBA,EAAcxrC,SAASr7c,OAAOu/c,EAAQlE,UAGtC,IADAiE,EAAYunC,GACJjiiB,EAAkB06f,EAAU7F,sBAChC6F,EAAYA,EAAU7F,mBACtBtyf,KAAK8uiB,oBAAoB32C,GACrBA,IAAcC,UAMtBp4f,KAAKkuiB,eAAexO,EAAczrC,WAAYyrC,EAAetnC,QAKrEp4f,KAAKiviB,mBAAmBvP,EAAeniiB,EAAOshB,OAGjD,CACD,IAAIushB,EAAQpriB,KAAKggiB,iBAAiB/8d,GAClCjjE,KAAKiviB,mBAAmB7D,EAAO7tiB,EAAOshB,KAM9CutV,EAAU/wW,UAAU4ziB,mBAAqB,SAAUhse,EAAM1lE,EAAOshB,GAC5D7e,KAAK0uiB,kBAAkBzre,EAAKigb,gBAAiB3lf,EAAOshB,GACpD7e,KAAK8tiB,mBAAmB7qe,EAAKgxb,WAAY12f,EAAOshB,IAMpDutV,EAAU/wW,UAAUw/hB,wBAA0B,SAAUz1Y,GAEpD,IADA,IAAI8pZ,OAAsB/ziB,EACnBiqJ,aAAkBkmW,IACjBX,GAAcU,uBAAuBjmW,KACjCA,aAAkBkmW,IAAwC,IAArBlmW,EAAOmmW,UAC5C2jD,EAAsB9pZ,EAEjBA,aAAkBkmW,IAAwC,IAArBlmW,EAAOmmW,WACjD2jD,EAAsB9pZ,EAClB3nJ,EAAkB2nJ,EAAO24W,kBAEzBmxC,EADA9pZ,EAASA,EAAOqmW,aAMpByjD,EADA9pZ,EAASA,EAAOqmW,YAIxBrmW,EAASA,EAAO84W,aAEpB,OAAOzggB,EAAkByxiB,GAAuB9pZ,EAAS8pZ,GAM7D9iM,EAAU/wW,UAAUs+hB,oBAAsB,SAAUv0Y,GAEhD,IADA,IAAIs0Y,OAAkBv+hB,EACfiqJ,aAAkBkmW,IAAiB,CACtC,GAAyB,IAArBlmW,EAAOmmW,YAAoB9tf,EAAkB2nJ,EAAOomW,UACpD,OAAO/tf,EAAkBi8hB,GAAmBt0Y,EAASs0Y,EAE3B,IAArBt0Y,EAAOmmW,WAAoB9tf,EAAkB2nJ,EAAOqmW,cACzDiuC,EAAkBt0Y,GAEtBA,EAASA,EAAOusK,SAEpB,OAAQl0T,EAAkBi8hB,GAAmBt0Y,EAASs0Y,GAM1DttL,EAAU/wW,UAAU8ziB,qBAAuB,SAAU/pZ,EAAQnzI,GACzD,GAAImzI,EAAO3oJ,SAAWwV,GAASmzI,EAAOusK,oBAAoB25L,GAAiB,CAEvE,IAAI6vC,EAAan7hB,KAAK25hB,oBAAoBv0Y,EAAOusK,UAC7CwpO,aAAsB7vC,IAA4C,IAAzB6vC,EAAW5vC,YACpDnmW,EAAS+1Y,EACTlphB,EAAQ,QAGX,GAAc,IAAVA,GAAemzI,EAAO84W,wBAAwB5S,GAAiB,CAGpEr5e,GADAmzI,EADiBplJ,KAAK66hB,wBAAwBz1Y,EAAO84W,yBAE3B5S,GAAkB,EAAIlmW,EAAO3oJ,OACnD2oJ,aAAkBkmW,IAAwC,IAArBlmW,EAAOmmW,WAC5Ct5e,IAGR,OAASjR,QAAWokJ,EAAQnzI,MAASA,IAMzCm6V,EAAU/wW,UAAUyxiB,0BAA4B,SAAU1nZ,EAAQnzI,EAAOkmhB,GACrE,IAAIn3hB,OAAU7F,EAEVkjgB,OAAaljgB,EACjB,GAAIsC,EAFJuD,EAAUhB,KAAKoviB,cAAchqZ,EAAQnzI,EAAOkmhB,GAAcn3hB,UAExBvD,EAAkBuD,EAAQ8sD,MACxD,OAAIs3F,aAAkBkmW,IAAmBlmW,aAAkBsvW,GAChD10f,KAAKqviB,0BAA0BjqZ,GAEnC,IAAIlrG,GAAM,EAAG,GAExB,IAAIzd,EAASz7B,EAAQy7B,OACjB/vB,EAAM,EACNF,EAAO,EASX,GARIxL,aAAmBwzf,IAAmC,OAAjBxzf,EAAQyrB,MAAiBhvB,EAAkB2nJ,EAAOusK,WACvF0sM,EAAar+f,KAAKsviB,kBAAkBtuiB,EAAQ8sD,KAAK+0b,UAAW7hf,GAC5DiR,EAAQ,GAGRosf,EAAar9f,EAAQ8sD,KAEzBphD,EAAM1M,KAAK8+Q,OAAOu/O,GACdr9f,aAAmByzf,GAAiB,CACpC,IAAIz4d,EAASh7B,EAAQ8sD,KAAK+0b,UAAU7E,gBAChC48C,EAAiB56hB,KAAKuviB,uBAAuBnqZ,GACjD,GAAK3nJ,EAAkBm9hB,GAGlB,CACD,IAAIO,EAAan7hB,KAAKwviB,mBAAmBpqZ,GACpC3nJ,EAAkB09hB,KACnBn/f,EAASm/f,EAAWn9C,sBALxBhid,EAAS4+f,EAAe58C,gBAQ5B,IAAIyxD,EAAazviB,KAAKo6e,OAAOouB,WAAWnmR,UAAUrmN,GAC9C2xM,EAAS8hU,EAAWngE,OAASmgE,EAAW3kC,eACxC9pgB,EAAQy7B,OAAO/vB,IAAM1L,EAAQ+U,OAAS43N,EAAS,IAC/CjhO,GAAO1L,EAAQy7B,OAAO/vB,IAAM1L,EAAQ+U,OAAS43N,QAG1C3sO,aAAmBsqf,KAC1B5+e,GAAO+vB,EAAO/vB,IAAM,EAAI+vB,EAAO/vB,IAAM,GAGzC,OADAF,EAAQ/O,EAAkBuD,IAAYvD,EAAkB4ggB,GAAe,EAAIr+f,KAAKu/hB,gBAAgBlhC,EAAYr9f,EAASiR,GAC9G,IAAIioC,GAAM1tC,EAAME,IAM3B0/V,EAAU/wW,UAAUg0iB,0BAA4B,SAAUK,GACtD,IAAIhW,EAAkB15hB,KAAK2viB,4BAA4BD,GAEvD,GAAIjyiB,EAAkBi8hB,GAAkB,CACpC,IAAI/rB,EAAgB+hC,EAAY5hf,KAAK+0b,UACrC,OAAO7if,KAAK4viB,eAAejiC,GAG3B,OAAO3tgB,KAAK8siB,0BAA0BpT,EAAiB,GAAG,IAGlEttL,EAAU/wW,UAAUs0iB,4BAA8B,SAAUD,GACxD,GAAIA,aAAuBpkD,IAA6C,IAA1BokD,EAAYnkD,WACnDZ,GAAcU,uBAAuBqkD,GAAc,CACtD,IAAIjkD,EAAaikD,EAEbA,EADAjyiB,EAAkBguf,EAAWsS,gBACftS,EAAWD,SAGXC,EAAWsS,eAGjC,IAAI27B,OAAkBv+hB,EAItB,OAHKsC,EAAkBiyiB,EAAY/9O,YAC/B+nO,EAAkB15hB,KAAK25hB,oBAAoB+V,EAAY/9O,WAEpD+nO,GAMXttL,EAAU/wW,UAAUu0iB,eAAiB,SAAUj+C,GAC3C,IAAInlf,EAAOmlf,EAAO5kf,EACdL,EAAMilf,EAAO3kf,EACbqxf,OAAaljgB,EACbw2f,EAAO1O,aAAaxmf,OAAS,IAC7B4hgB,EAAa1M,EAAO1O,aAAa0O,EAAO1O,aAAaxmf,OAAS,GAC9D+P,GAAQxM,KAAKuiQ,SAAS87P,GAAY,IAEjC5ggB,EAAkB4ggB,KACnB3xf,EAAM1M,KAAK8+Q,OAAOu/O,IAEtB,IAEIvxe,EAAO9sB,KAAK2qgB,qBAAqBhZ,EAFrB,EACG,GAEnB,OAAO,IAAIz3c,GAAM1tC,EAAME,EAAMogB,EAAKq+N,YAMtCihH,EAAU/wW,UAAU+ziB,cAAgB,SAAU7D,EAAet5hB,EAAOk3f,GAChE,IAAIzL,OAAavigB,EAIjB,OAHMowiB,aAAyBjgD,IAAmBigD,aAAyB72C,KACvEgJ,EAAa6tC,IAERvqiB,QAAW08f,EAAYzrf,MAASA,IAK7Cm6V,EAAU/wW,UAAUk0iB,uBAAyB,SAAUnqZ,GACnD,OAAIA,EAAO84W,wBAAwB1J,GACxBpvW,EAAO84W,aAEbzggB,EAAkB2nJ,EAAO84W,mBAA9B,EACWl+f,KAAKuviB,uBAAuBnqZ,EAAO84W,eAQlD9xJ,EAAU/wW,UAAUm0iB,mBAAqB,SAAUpqZ,GAC/C,OAAIA,EAAOusK,oBAAoB6iM,GACpBpvW,EAAOusK,SAEbl0T,EAAkB2nJ,EAAOusK,eAA9B,EACW3xT,KAAKwviB,mBAAmBpqZ,EAAOusK,WAO9Cy6C,EAAU/wW,UAAU+/hB,0BAA4B,SAAUh2Y,EAAQwvW,GAC9D,GAAIxvW,aAAkBkmW,GAAiB,CAEnC,GAA6B,KADzBG,EAAarmW,GACFmmW,YACXnmW,EAASplJ,KAAK6viB,iBAAiBpkD,GAC3BA,IAAermW,GACf,OAAOqmW,EAGfmJ,EAAgB,EAEpB,MAAQn3f,EAAkB2nJ,IAAWwvW,IAAkBxvW,EAAO3oJ,QAAU2oJ,EAAOusK,oBAAoB25L,IAAiB,CAChH,IAAIouC,EAAkB15hB,KAAK25hB,oBAAqBv0Y,EAAe,UAC/D,GAAIs0Y,aAA2BpuC,IAAiD,IAA9BouC,EAAgBnuC,UAAiB,CAC/E,IAAIE,EAAaiuC,EAEjB,GADAt0Y,EAASplJ,KAAK6viB,iBAAiBpkD,IAC1Bhuf,EAAkB2nJ,IAAWqmW,IAAermW,EAC7C,OAAOqmW,EAEXmJ,EAAgB,OAGhBxvW,EAASs0Y,EAGjB,OAAOt0Y,GAKXgnN,EAAU/wW,UAAU6xiB,sBAAwB,SAAU9nZ,EAAQnzI,GAC1D,IAAIjR,OAAU7F,EAEd,OADA6F,EAAUokJ,GAENpkJ,QAAWA,EAASiR,MAASA,IAOrCm6V,EAAU/wW,UAAUgphB,cAAgB,SAAUj/X,EAAQnzI,GAClD,OAAOjS,KAAKguiB,4BAA4B5oZ,EAAQnzI,GAAO,IAK3Dm6V,EAAU/wW,UAAU2yiB,4BAA8B,SAAU5oZ,EAAQnzI,EAAOk3f,GACvE,IAAI2mC,EAAa9viB,KAAKoviB,cAAchqZ,EAAQnzI,EAAOk3f,GAC/CnogB,EAAU8uiB,EAAW9uiB,QAEzB,GADAiR,EAAQ69hB,EAAW79hB,OACdxU,EAAkBuD,GACnB,OAAImogB,GAAkBnogB,aAAmBwzf,IAAmC,OAAjBxzf,EAAQyrB,MAA2B,IAAVxa,EACzEjS,KAAKsviB,kBAAkBtuiB,EAAQ8sD,KAAK+0b,UAAW7hf,GAG/CA,EAAQ8sD,KAGvB,IAAIi/e,EAAc3nZ,EAEds0Y,EAAkB15hB,KAAK2viB,4BAA4B5C,GAEvD,GAAItviB,EAAkBi8hB,GAAkB,CACpC,IAAIr7B,OAAaljgB,EACbw2f,EAASo7C,EAAYj/e,KAAK+0b,UAI9B,OAHI8O,EAAO1O,aAAaxmf,OAAS,IAC7B4hgB,EAAa1M,EAAO1O,aAAa0O,EAAO1O,aAAaxmf,OAAS,IAE3D4hgB,EAGP,OAAOr+f,KAAKqkhB,cAAcqV,EAAiB,IAOnDttL,EAAU/wW,UAAUi0iB,kBAAoB,SAAUzsD,EAAW7hf,GACzD,IAAIq9f,OAAaljgB,EACbw2f,EAAS9O,EACb,GAAI8O,EAAO1O,aAAaxmf,OAAS,EAAG,CAChC,IAAIm+gB,EAAcjpB,EAAO1O,aAAa1kf,QAAQyC,EAAQ8sD,MAClD8sd,IAAgBjpB,EAAO1O,aAAaxmf,OAAS,GAC7Ck1f,EAAS9O,EAET+3B,GAAe,GAEVA,EAAcjpB,EAAO1O,aAAaxmf,OAAS,GAChDk1f,EAAS3xf,KAAKu6hB,sBAAsB13C,GACpC+3B,GAAe,GAEVA,EAAc,IAGnBA,GADAjpB,EAAS9O,GACYI,aAAa1kf,QAAQyC,EAAQ8sD,OAEtDuwc,EAAa1M,EAAO1O,aAAa23B,EAAc,GAEnD,OAAOvc,GAOXjyJ,EAAU/wW,UAAU00iB,eAAiB,SAAU3qZ,EAAQnzI,EAAO+pB,EAAQg0gB,EAAkB7kT,EAAW+hB,GAC/F,IACIlsQ,EADiBhB,KAAKoviB,cAAchqZ,EAAQnzI,GAAO,GAC1BjR,QACzBuqiB,EAAgBnmZ,EACpB,GAAI3nJ,EAAkBuD,GAClB,OAAIuqiB,aAAyBjgD,GAClBtrf,KAAKiwiB,wBAAwB1E,EAAevvgB,EAAQg0gB,EAAkB7kT,EAAW+hB,IAEnFn3P,OAAU/V,KAAKo6e,OAAOouB,WAAWnmR,UAAUrmN,GAAQszc,OAAQnkP,UAAaA,EAAW+hB,SAAYA,GAE5G,IAAIzwO,EAASz7B,EAAQy7B,OACjByzgB,EAAgBlviB,EAAQ+U,OACxBo6hB,EAAgB,EACpB,GAAInviB,aAAmByzf,GAAiB,CACpC,IAAImmC,EAAiB56hB,KAAKuviB,uBAAuBnqZ,GAC7C+1Y,EAAan7hB,KAAKwviB,mBAAmBpqZ,GACzC,GAAI3nJ,EAAkBm9hB,IAAmBn9hB,EAAkB09hB,GAAa,CACpE,IAAI1nH,EAAQ,EACR9ma,EAAS,EACTyjiB,EAAYhrZ,EAAOt3F,KAAK+0b,UACxB+8B,EAAW5/gB,KAAK2qgB,qBAAqBylC,EAAW38H,EAAO9ma,GAC3D8ma,EAAQmsG,EAASz0R,UACjBx+O,EAASizgB,EAASv0R,aAClB8kT,EAAgBvwB,EAAS7pgB,OACzBm3P,EAAWkjS,EAAUpyD,gBAAgBzsc,OAChCy+f,IACDG,GAAiBC,EAAUxyD,gBAAgBwL,kBAG9C,CAAA,GAAI3rf,EAAkBm9hB,GAEvB,OADA1tR,EAAWiuR,EAAWn9C,gBAAgBzsc,OAC/BvxC,KAAK+viB,eAAe5U,EAAY,EAAGA,EAAWn9C,gBAAiBgyD,EAAkB7kT,EAAW+hB,GAGnG,GAAKzvQ,EAAkB09hB,MAAen6hB,aAAmByzf,IAcrD,OAFAvnP,EAAW0tR,EAAe58C,gBAAgBzsc,OAEnCvxC,KAAK+viB,eAAenV,EAAgBA,EAAen+hB,OAAQm+hB,EAAe58C,gBAAiBgyD,EAAkB7kT,EAAW+hB,GAZ/H,IAAImjS,EAAerwiB,KAAKo6e,OAAOouB,WAAWnmR,UAAUrhP,EAAQg9e,iBACxDsyD,EAAaD,EAAa/gE,OAC1BqvB,EAAiB0xC,EAAavlC,eAElCqlC,EAAiBnviB,EAAQy7B,OAAO/vB,IAAM,GAAKiyf,EAAiB39f,EAAQy7B,OAAO/vB,IAAM1L,EAAQ+U,OAAU/U,EAAQy7B,OAAO/vB,IAAM1L,EAAQ+U,OAASu6hB,EAAa3xC,EAAiB2xC,EAClKN,IACDG,GAAiBnviB,EAAQy7B,OAAO9vB,aAU3C,CACD,IAAI09e,EAAoBrud,EAAOqud,kBAC3B7pT,EAAgB0vW,EACM,WAAtB7lD,GAAkC2lD,IAElCxvW,GAAgC,IACN,cAAtB6pT,IACAl/P,EAAY+kT,EAAgB1vW,IAGpC2vW,GAAiB1zgB,EAAO/vB,IAAM,EAAI+vB,EAAO/vB,IAAM,GAAK8zL,EAC/CwvW,IACDG,GAAiB1zgB,EAAO9vB,QAGhC,IAAKqjiB,EACD,OAASj6hB,OAAUo6hB,EAAehlT,UAAaA,EAAW+hB,SAAYA,GAE1E,IAAIn3P,EAAS/V,KAAKo6e,OAAOouB,WAAWnmR,UAAUrmN,GAAQszc,OAItD,OAHIv5d,EAASo6hB,IACTp6hB,EAASo6hB,IAEJp6hB,OAAUA,EAAQo1O,UAAaA,EAAW+hB,SAAYA,IAOnEk/F,EAAU/wW,UAAU40iB,wBAA0B,SAAUlD,EAAa/wgB,EAAQg0gB,EAAkB7kT,EAAW+hB,GACtG,IAAIwsR,EAAkB15hB,KAAK2viB,4BAA4B5C,GAEvD,GAAItviB,EAAkBi8hB,GAAkB,CACpC,IAAI/rB,EAAgBo/B,EAAYj/e,KAAK+0b,UACjC9se,EAAS/V,KAAKo6e,OAAOouB,WAAWmC,qBAAqB3ue,GAAQszc,OAC7Dt6D,EAAQ,EACRroa,EAAS,EACTizgB,EAAW5/gB,KAAK2qgB,qBAAqBgD,EAAe34F,EAAOroa,GAC3DwjiB,EAAgBvwB,EAAS7pgB,OAG7B,OAFAi/Z,EAAQ4qG,EAASz0R,UACjBx+O,EAASizgB,EAASv0R,aACb2kT,GAIDj6hB,EAASo6hB,IACTp6hB,EAASo6hB,IAEJp6hB,OAAUA,EAAQo1O,UAAaA,EAAW+hB,SAAYA,KAN3DijS,GAAiBxjiB,GACRoJ,OAAUo6hB,EAAehlT,UAAaA,EAAW+hB,SAAYA,IAQ1E,OAAOltQ,KAAK+viB,eAAerW,EAAiB,EAAG19f,EAAQg0gB,EAAkB7kT,EAAW+hB,IAQ5Fk/F,EAAU/wW,UAAU+uiB,kBAAoB,SAAUhlZ,EAAQqnX,GAEtD,IADA,IAAIoyB,EAAa7+hB,KAAK66hB,wBAAwBz1Y,GACvCy5Y,aAAsBvzC,KACzBuzC,EAAa7+hB,KAAKuviB,uBAAuB1Q,cACfvzC,KACtBuzC,EAAaA,EAAW3gC,cAGhC,IAAKzggB,EAAkBohiB,GAEnB,OADApyB,EAAcoyB,EAAWpiiB,QAChBuE,QAAW69hB,EAAY5shB,MAASw6f,GAE7CA,EAAc,EACd,IAAI0uB,EAAan7hB,KAAKo7hB,0BAA0Bh2Y,EAAQ,GACxD,GAAI+1Y,aAAsB7vC,IAA4C,IAAzB6vC,EAAW5vC,UAGpD,IADA4vC,GADAA,EAAaA,EAAWp9B,gBACApsM,SACjBwpO,aAAsB7vC,IACrB6vC,aAAsB7vC,IAA4C,IAAzB6vC,EAAW5vC,WACjDZ,GAAcU,uBAAuB8vC,KAEpCA,EADA19hB,EAAkB09hB,EAAWp9B,gBAChBo9B,EAAW3vC,SAGX2vC,EAAWp9B,gBAGhCo9B,EAAaA,EAAWxpO,SAGhC,OAAS3wT,QAAWm6hB,EAAYlphB,MAASw6f,IAO7CrgK,EAAU/wW,UAAUw0iB,iBAAmB,SAAUpkD,GAC7C,IAAIrmW,EAASqmW,EACb,GAAIhuf,EAAkBguf,EAAWsS,gBAC7B34W,EAASqmW,EAAWD,aAEnB,CAED,IAAI3I,GADJz9V,EAASqmW,EAAWsS,gBACGjwc,KAAK+0b,UAC5B,GAAIA,IAAc4I,EAAWD,SAAS19b,KAAK+0b,WACnC7if,KAAKi7hB,eAAep4C,EAAWz9V,EAAQqmW,EAAWD,UAItD,OAAOpmW,EAHPA,EAASqmW,EAAWD,SAM5B,OAAOpmW,GAMXgnN,EAAU/wW,UAAUq8hB,qBAAuB,SAAUtyY,EAAQnzI,GACzD,KAAOA,IAAUmzI,EAAO3oJ,QAAU2oJ,EAAOusK,oBAAoB25L,IAAiB,CAC1E,IAAIouC,EAAkB15hB,KAAK25hB,oBAAoBv0Y,EAAOusK,UAKtD,GAJA1/S,EAAQ,EACJynhB,aAA2BpuC,IAAiD,IAA9BouC,EAAgBnuC,YAC9DnmW,EAASs0Y,GAETt0Y,aAAkBkmW,IAAwC,IAArBlmW,EAAOmmW,YAAoB9tf,EAAkB2nJ,EAAOomW,UAAW,CACpG,IAAIC,EAAarmW,EACjB,GAAI3nJ,EAAkBguf,EAAWsS,gBAC7B34W,EAASqmW,EAAWD,SACpBv5e,EAAQ,MAEP,CAED,IAAI4we,GADJz9V,EAASqmW,EAAWsS,gBACGjwc,KAAK+0b,UAE5B,GADA5we,EAAQ,EACJ4we,IAAc4I,EAAWD,SAAS19b,KAAK+0b,WACnC7if,KAAKi7hB,eAAep4C,EAAWz9V,EAAQqmW,EAAWD,UAItD,MAHApmW,EAASqmW,EAAWD,WAQpC,OAAOv5e,IAAUmzI,EAAO3oJ,QAAUgB,EAAkB2nJ,EAAOusK,WAM/Dy6C,EAAU/wW,UAAU4nR,QAAU,SAAU0uO,GACpC,IAAI1hW,OAAO90J,EACX,GAAIw2f,EAAOzO,2BAA2BkQ,GAAgB,CACjCzB,EAAOzO,gBACxBjzV,EAAO0hW,EAAOzO,gBAAgBjzV,UAExBxyJ,EAAkBk0f,EAAOzO,mBAC/BjzV,EAAOjwJ,KAAKijR,QAAQ0uO,EAAOzO,kBAE/B,OAAOjzV,GAMXm8M,EAAU/wW,UAAU2uhB,yCAA2C,WAG3D,IAAK,IAFDumB,GAAsB,EACtB99C,EAAUzyf,KAAKo9gB,gBAAgB9/gB,KAC1BnB,EAAI,EAAGA,EAAIs2f,EAAQh2f,OAAQN,IAChC6D,KAAK2kiB,yBAAyBlyC,EAAQt2f,IACtCo0iB,GAAsB,EAG1B,OADAvwiB,KAAKo9gB,gBAAgBptd,QACdugf,GAMXnkM,EAAU/wW,UAAUm1iB,6BAA+B,SAAU7+C,GACzD,IAAK,IAAIx1f,EAAI,EAAGA,EAAIw1f,EAAO1O,aAAaxmf,OAAQN,IACxCw1f,EAAO1O,aAAa9mf,aAAcg3f,GAClCnzf,KAAKywiB,kCAAkC9+C,EAAO1O,aAAa9mf,IAEtDw1f,EAAO1O,aAAa9mf,aAAc41f,GACvC/xf,KAAK+phB,wBAAwBp4B,EAAO1O,aAAa9mf,IAE5Cw1f,EAAO1O,aAAa9mf,aAAcs1f,IACvCzxf,KAAKwwiB,6BAA6B7+C,EAAO1O,aAAa9mf,KASlEiwW,EAAU/wW,UAAUyuhB,wBAA0B,SAAUn4B,EAAQ79d,GAC5D,IAAK,IAAI33B,EAAI,EAAGA,EAAIw1f,EAAO1O,aAAaxmf,OAAQN,IAAK,CAEjD,IADI2rgB,EAAcnW,EAAO1O,aAAa9mf,cACXs1f,IAAUqW,EAAY96f,GAAK8mB,EAAM9mB,GACpD86f,EAAY96f,EAAI86f,EAAY/xf,QAAW+d,EAAM9mB,EACjD,OAAI86f,aAAuBhlB,GAChB9if,KAAK0wiB,wBAAwB5oC,EAAah0e,GAG1C9zB,KAAK2wiB,yBAAyB7oC,EAAah0e,GAI9D,IAAIg6B,OAAO3yD,EACX,GAAIw2f,EAAO1O,aAAaxmf,OAAS,EAAG,CAChC,IAAImgB,EAAa+0e,EAAO1O,aAAa,GACrC,GAAIrme,aAAsB60e,IAAU70e,EAAW5P,GAAK8mB,EAAM9mB,EAGlD8gD,EAFA6jc,EAAO1O,aAAa0O,EAAO1O,aAAaxmf,OAAS,aAAcqmf,GAExD9if,KAAK0wiB,wBAAwB/+C,EAAO1O,aAAa0O,EAAO1O,aAAaxmf,OAAS,GAAIq3B,GAIlF9zB,KAAK2wiB,yBAAyBh/C,EAAO1O,aAAa0O,EAAO1O,aAAaxmf,OAAS,GAAIq3B,OAG7F,CACD,IAAIg0e,OAAc3sgB,EACdyhB,aAAsB60e,KACtBqW,EAAclrf,GAEbnf,EAAkBqqgB,KAEfh6c,EADAg6c,aAAuBhlB,GAChB9if,KAAK0wiB,wBAAwB9zhB,EAAYkX,GAGzC9zB,KAAK2wiB,yBAAyB/zhB,EAAYkX,KAKjE,OAAOg6B,GAOXs+S,EAAU/wW,UAAUq1iB,wBAA0B,SAAU/+C,EAAQ79d,GAG5D,IAAK,IAFDmvd,EAAe0O,EAAO1O,aACtBv2e,EAAMilf,EAAO3kf,EACR7Q,EAAI,EAAGA,EAAI8mf,EAAaxmf,OAAQN,IAAK,CAC1C,GAAIuQ,GAAOonB,EAAM9mB,GACTN,EAAMu2e,EAAa9mf,GAAG4Z,QAAW+d,EAAM9mB,EAC3C,OAAOi2e,EAAa9mf,GAExBuQ,GAAOu2e,EAAa9mf,GAAG4Z,OAE3B,IAAIsof,OAAaljgB,EASjB,OARI8nf,EAAaxmf,OAAS,IAElB4hgB,EADA1M,EAAO3kf,GAAK8mB,EAAM9mB,EACLi2e,EAAaA,EAAaxmf,OAAS,GAGnCwmf,EAAa,IAG3Bob,GAOXjyJ,EAAU/wW,UAAUwyiB,mBAAqB,SAAUl8C,EAAQjse,EAAYomhB,EAASyB,EAAY3nhB,GAExF,IAAK,IADDlZ,EAAM,EACDvQ,EAAIupB,EAAYvpB,EAAIw1f,EAAO1O,aAAaxmf,OAAQN,IAAK,CAC1D,IAAI2xD,EAAO6jc,EAAO1O,aAAa9mf,GAC3BA,IAAMupB,IACNhZ,EAAM1M,KAAK8+Q,OAAOhxN,IAEtB,IAAIthD,EAAOxM,KAAK0+Q,QAAQ5wN,GACxB,GAAIA,IAASg+e,EAAS,CAElB,IAAIr/hB,EAAQzM,KAAKu/hB,gBAAgBuM,EAASyB,EAAY3nhB,GAEtD,YADA5lB,KAAKqkiB,sBAAsBv2e,EAAMrhD,EAAQD,EAAMA,EAAME,GAGzD1M,KAAKqkiB,sBAAsBv2e,EAAM9tD,KAAKuiQ,SAASz0M,GAAM,IAASthD,EAAOmlf,EAAO5kf,GAAIP,EAAME,GACtFA,GAAOohD,EAAK/3C,SAQpBq2V,EAAU/wW,UAAUs1iB,yBAA2B,SAAUh/C,EAAQ79d,GAE7D,IAAK,IADDuqe,OAAaljgB,EACRgB,EAAI,EAAGA,EAAIw1f,EAAO1O,aAAaxmf,OAAQN,IAAK,CAEjD,IAAI2rgB,EAAcnW,EAAO1O,aAAa9mf,GACtC,GAAI2rgB,aAAuB7V,IAAkB6V,EAAY96f,GAAK8mB,EAAM9mB,EAAG,CAEnE,IAAIwsf,OAAar+f,GACZsC,EAFL4ggB,EAAar+f,KAAK4wiB,uBAAuB9oC,EAAah0e,KAEhBuqe,EAAWxb,UAAUK,2BAA2B6O,KAClFyH,EAAa6E,EAAWxb,UAAUK,iBAEtC,IAAItsN,EAAc,EACdK,EAAU,EACd,IAAKx5R,EAAkB+7f,GAAa,CAChC,IAAIwO,EAAcxO,EAAWtF,SAAShR,gBACtCtsN,EAAc+zN,GAAcO,oBAAoB8c,EAAYlY,YAAYl5N,aACxEK,EAAUuiO,EAAWlF,WAAWr9N,QAEpC,IAAI45Q,EAAkB,EAClBC,EAAmB,EACnBC,EAAiB,EACjBC,EAAoB,EACxB,GAAIp6Q,EAAc,EAAG,CACjBi6Q,EAA2C,IAAzBr3C,EAAW3gO,UAAkBjC,EAAcA,EAAc,EAE3Ek6Q,EAAmBt3C,EAAW3gO,YAAc2gO,EAAWtF,SAASjR,aAAaxmf,OAAS,EAAIm6R,EAAcA,EAAc,EACtH,IAAIsxO,OAAY/sgB,EACZq+f,EAAWtW,2BAA2B+O,KACtCiW,EAAY1O,EAAWtW,iBAEvB8kB,OAAc7sgB,EACdq+f,EAAWtW,gBAAgBA,2BAA2B6P,KACtDiV,EAAcxO,EAAWtW,gBAAgBA,iBAExCzlf,EAAkByqgB,IAAezqgB,EAAkBuqgB,KACpD+oC,EAAkD,IAAjCv3C,EAAWtF,SAASzzN,SAAiB7J,EAAcA,EAAc,EAE9Eo6Q,EADAx3C,EAAWtF,SAASzzN,SAAWxJ,IAAYuiO,EAAWvF,WAAWhR,aAAaxmf,OAC1Dm6R,EAGAA,EAAc,GAI9C,IAAMn5R,EAAkB4ggB,IAAeA,EAAWxb,UAAU91e,GAAK+mB,EAAM/mB,GAChEsxf,EAAWxb,UAAU91e,EAAIsxf,EAAWrof,OAAS8d,EAAM/mB,GACnDsxf,EAAWxb,UAAU71e,GAAK8mB,EAAM9mB,GAAKhN,KAAK8+Q,OAAOu/O,GAAcA,EAAWtof,QAAU+d,EAAM9mB,IACxFvP,EAAkB+7f,IAAeA,EAAWzsf,EAAIysf,EAAW/8d,OAAOjwB,KAAOqkiB,GAAmB/8gB,EAAM/mB,GAChGysf,EAAWzsf,EAAIysf,EAAWxjf,MAAQwjf,EAAW/8d,OAAOhwB,MAAQqkiB,GAAoBh9gB,EAAM/mB,GACtFysf,EAAWxsf,EAAIwsf,EAAW/8d,OAAO/vB,IAAMqkiB,GAAkBj9gB,EAAM9mB,GAC/Dwsf,EAAWxsf,EAAIwsf,EAAWzjf,OAASyjf,EAAW/8d,OAAO9vB,OAASqkiB,GAAqBl9gB,EAAM9mB,EAChG,OAIZ,OAAOqxf,GAOXjyJ,EAAU/wW,UAAUu1iB,uBAAyB,SAAUj/C,EAAQ79d,GAC3D,IAAK,IAAI33B,EAAI,EAAGA,EAAIw1f,EAAO1O,aAAaxmf,OAAQN,IAAK,CACjD,IAAIy6R,EAAc,EAEdi6Q,EAAkB,EAClBC,EAAmB,EAMvB,IARAl6Q,EAAc+zN,GAAcO,oBAAoByG,EAAOsC,WAAWnE,YAAYl5N,cAG5D,IACdi6Q,EAAyD,IAAvCl/C,EAAO1O,aAAa9mf,GAAGwrU,YAAoB/wC,EAAcA,EAAc,EAEzFk6Q,EAAmBn/C,EAAO1O,aAAa9mf,GAAG08R,YAAc84N,EAAO1O,aAAa9mf,GAAG+3f,SAASjR,aAAaxmf,OAAS,EAAIm6R,EAAcA,EAAc,GAE9I+6N,EAAO1O,aAAa9mf,GAAG4Q,EAEvB4kf,EAAO1O,aAAa9mf,GAAGsgC,OAAOjwB,KAAOqkiB,GAAmB/8gB,EAAM/mB,GAAM4kf,EAAO1O,aAAa9mf,GAAG4Q,EAE3F4kf,EAAO1O,aAAa9mf,GAAG6Z,MAAS27e,EAAO1O,aAAa9mf,GAAGsgC,OAAOhwB,MAAQqkiB,GAAoBh9gB,EAAM/mB,EAChG,OAAO/M,KAAKixiB,wBAAwBt/C,EAAO1O,aAAa9mf,GAAI23B,GAGpE,IAAIuqe,OAAaljgB,EASjB,OARIw2f,EAAO1O,aAAaxmf,OAAS,IAEzB4hgB,EADA1M,EAAO1O,aAAa,GAAGl2e,GAAK+mB,EAAM/mB,EACrB/M,KAAKixiB,wBAAwBt/C,EAAO1O,aAAa0O,EAAO1O,aAAaxmf,OAAS,GAAIq3B,GAGlF9zB,KAAKixiB,wBAAwBt/C,EAAO1O,aAAa,GAAInvd,IAGnEuqe,GAKXjyJ,EAAU/wW,UAAU61iB,cAAgB,SAAUjue,GAC1C,GAAIA,EAAKggb,aAAaxmf,OAAS,EAC3B,OAAOwmE,EAAKggb,aAAa,IASjC72I,EAAU/wW,UAAUyziB,oBAAsB,SAAUn9C,GAChD,IAAIc,KACAd,EAAOe,qBAAuBf,EAAOiB,gBACrCH,EAAUd,EAAOgB,kBAGjBF,EAAQjuf,KAAKmtf,GAEjB,IAAK,IAAIx1f,EAAI,EAAGA,EAAIs2f,EAAQh2f,OAAQN,IAChCw1f,EAASc,EAAQt2f,GAEjB6D,KAAKwwiB,6BAA6B7+C,GAElC3xf,KAAKwkiB,iCAAiC7yC,IAO9CvlJ,EAAU/wW,UAAU0uhB,wBAA0B,SAAUp4B,GAChD3xf,KAAKo9gB,gBAAgB32S,YAAYkrR,KACjC3xf,KAAK2kiB,yBAAyBhzC,GAC9B3xf,KAAKo9gB,gBAAgB74gB,OAAOotf,KAOpCvlJ,EAAU/wW,UAAU41iB,wBAA0B,SAAUt/C,EAAQ79d,GAC5D,IAAK,IAAI33B,EAAI,EAAGA,EAAIw1f,EAAO1O,aAAaxmf,OAAQN,IAC5C,GAAIw1f,EAAO1O,aAAa9mf,GAAG6Q,GAAK8mB,EAAM9mB,GAC9B2kf,EAAO1O,aAAa9mf,GAAG6Q,EAAI2kf,EAAO1O,aAAa9mf,GAAG4Z,QAAW+d,EAAM9mB,EACvE,OAAI2kf,EAAO1O,aAAa9mf,aAAc2mf,GAC3B9if,KAAK0wiB,wBAAwB/+C,EAAO1O,aAAa9mf,GAAI23B,GAGrD9zB,KAAK2wiB,yBAAyBh/C,EAAO1O,aAAa9mf,GAAI23B,GAIzE,IAAIuqe,OAAaljgB,EAYjB,OAXIw2f,EAAO1O,aAAaxmf,OAAS,GACzBk1f,EAAO1O,aAAa,GAAGj2e,GAAK8mB,EAAM9mB,IAG9Bqxf,EAFA1M,EAAO1O,aAAa0O,EAAO1O,aAAaxmf,OAAS,aAAcqmf,GAElD9if,KAAK0wiB,wBAAwB/+C,EAAO1O,aAAa0O,EAAO1O,aAAaxmf,OAAS,GAAIq3B,GAGlF9zB,KAAK2wiB,yBAAyBh/C,EAAO1O,aAAa,GAAInvd,IAIxEuqe,GAOXjyJ,EAAU/wW,UAAU4thB,mBAAqB,SAAUt3B,EAAQ79d,GACvD,IAAIq9gB,EAAgBr9gB,EAChB9yB,OAAU7F,EACV8W,EAAQ,EACRmzgB,GAAkB,EAClBgsB,EAAqBpxiB,KAAK8qhB,qBAAqBn5B,EAAQ3wf,EAASiR,EAAO6hB,GAAO,GAC7Er2B,EAAkB2ziB,KACnBpwiB,EAAUowiB,EAAmBpwiB,QAC7BiR,EAAQm/hB,EAAmBn/hB,MAC3Bk/hB,EAAgBC,EAAmBD,cACnC/rB,EAAkBgsB,EAAmBhsB,gBACrCplhB,KAAKolhB,gBAAkBA,GAEvBA,GACAplhB,KAAKqxiB,eAAe1/C,EAAQ3wf,EAASiR,EAAOk/hB,GAC9B,IAAVl/hB,EACAjS,KAAKqniB,gBAGLrniB,KAAKkniB,kBAITlniB,KAAKqxiB,eAAe1/C,EAAQ3wf,EAASiR,EAAOk/hB,IAOpD/kM,EAAU/wW,UAAUyvhB,qBAAuB,SAAUn5B,EAAQvsW,EAAQnzI,EAAOk/hB,EAAeG,GACvF,IAAIlsB,GAAkB,EAClB14gB,EAAM1M,KAAK8+Q,OAAO6yO,GAClBnlf,EAAOmlf,EAAO9O,UAAU91e,EACxBwkiB,EAAgBvxiB,KAAKwxiB,gBAAgB7/C,EAAQnlf,GAC7CxL,EAAUuwiB,EAAcvwiB,QAE5B,GADAwL,EAAO+kiB,EAAc/kiB,KACjB/O,EAAkBuD,GAAU,CAC5B,IAAImqP,EAAY,EACZE,EAAe,EACfv+N,EAAO9sB,KAAK2qgB,qBAAqBhZ,EAAO9O,UAAW13P,EAAWE,GAClEF,EAAYr+N,EAAKq+N,UACjBE,EAAev+N,EAAKu+N,gBACCrrP,KAAKo6e,OAAOioC,gBAAgBr1gB,GAAKN,GAAO1M,KAAKo6e,OAAOioC,gBAAgBr1gB,EAAIN,EAAMilf,EAAO57e,SAAU/V,KAAKo6e,OAAOioC,gBAAgBt1gB,EAAIP,EAAOsgB,EAAK9W,QAC1Is7hB,GAAwBH,EAAcpkiB,EAAIP,EAAOsgB,EAAK9W,MAAQ,IAChFxJ,GAAQsgB,EAAK9W,MACT27e,EAAOv3e,SAAS3d,OAAS,IAEzBwV,GADAmzI,EAASusW,EAAOv3e,SAASu3e,EAAOv3e,SAAS3d,OAAS,IACnCA,QAEnBwV,KAEJk/hB,EAAgB,IAAIj3f,GAAM1tC,EAAM2+O,EAAY,EAAIz+O,EAAMy+O,EAAYz+O,QAGlE,IAAKjP,EAAkBuD,GAAU,CAC7B,GAAImwiB,EAAcpkiB,EAAIP,EAAOxL,EAAQy7B,OAAOjwB,KAAM,CAC9C,IAAK,IAAIrQ,EAAIw1f,EAAOv3e,SAAS7b,QAAQyC,GAAU7E,EAAIw1f,EAAOv3e,SAAS3d,SAC/DuE,EAAU2wf,EAAOv3e,SAASje,KACtBg1iB,EAAcpkiB,EAAIP,EAAOxL,EAAQy7B,OAAOjwB,KAAOxL,EAAQgV,OAAS7Z,IAAMw1f,EAAOv3e,SAAS3d,OAAS,IAF5BN,IAKvEqQ,GAAQxL,EAAQy7B,OAAOjwB,KAAOxL,EAAQgV,MAE1C,GAAIm7hB,EAAcpkiB,EAAIP,EAAOxL,EAAQy7B,OAAOjwB,KAAOxL,EAAQgV,MAEvD/D,EAAQjR,aAAmBwzf,GAAiBxzf,EAAQvE,OAAS,EAC7D+P,GAAQxL,EAAQy7B,OAAOjwB,KAAOxL,EAAQgV,WAErC,GAAIhV,aAAmBwzf,GAAgB,CACxC,IAAIznf,EAAIokiB,EAAcpkiB,EAAIP,EAAOxL,EAAQy7B,OAAOjwB,KAChDA,GAAQxL,EAAQy7B,OAAOjwB,KAGlB,IAFDoiX,EAAY,EACZp4J,EAAY,EAChB,IAASr6N,EAAI,EAAGA,GAAK6E,EAAQvE,OAAQN,IAAK,CACtC,IAAI6Z,EAAQ,EAOZ,GALIA,EADA7Z,IAAM6E,EAAQvE,OACNuE,EAAQgV,MAGRhW,KAAKo6e,OAAOouB,WAAWjmQ,SAASvhQ,EAAQyrB,KAAKuK,OAAO,EAAG76B,GAAI6E,EAAQg9e,iBAE3Ejxe,EAAIiJ,GAAS7Z,IAAM6E,EAAQvE,OAAQ,CAGnC,GAAIsQ,EAAI6hX,GADQ54W,EAAQ44W,GACQ,EAC5BpiX,GAAQwJ,EACRwgN,EAAYr6N,OAKZ,GAFAqQ,GAAQoiX,EACRp4J,EAAYr6N,EAAI,EACN,IAANA,GAAW6E,IAAY2wf,EAAOv3e,SAAS,GAAI,CAC3C,IAAIo4E,EAAWm/Z,EAAOv3e,SAAS7b,QAAQyC,GACjC2wf,EAAOv3e,SAASo4E,EAAW,aAAcuia,KAE3Cv+R,GADAx1N,EAAU2wf,EAAOv3e,SAASo4E,EAAW,cACNgia,GAAiBxzf,EAAQvE,OAAS,GAI7E,MAEJmyX,EAAY54W,EAEhB/D,EAAQukN,OAIR,GADA4uT,EAAkBpkhB,aAAmByzf,GACjC08C,EAAcpkiB,EAAIP,EAAOxL,EAAQy7B,OAAOjwB,KAAOxL,EAAQgV,MAAQ,EAC/D/D,EAAQ,EACRzF,GAAQxL,EAAQy7B,OAAOjwB,KAAOxL,EAAQgV,WAErC,GAAIhV,IAAY2wf,EAAOv3e,SAAS,KAAOgrgB,EAAiB,CACrD5yb,EAAWm/Z,EAAOv3e,SAAS7b,QAAQyC,GACjC2wf,EAAOv3e,SAASo4E,EAAW,aAAcuia,KAE3C9if,GADAjR,EAAU2wf,EAAOv3e,SAASo4E,EAAW,cACVgia,GAAiBxzf,EAAQvE,OAAS,GAIrEuE,aAAmBwzf,IAAmC,OAAjBxzf,EAAQyrB,OAC7Cxa,EAAQ,QAIZzF,GAAQxL,EAAQy7B,OAAOjwB,KAE3B,GAAIxL,aAAmBwzf,GACnB9nf,GAAO1L,EAAQy7B,OAAO/vB,IAAM,EAAI1L,EAAQy7B,OAAO/vB,IAAM,MAEpD,CACD,IAAI+kiB,EAAczxiB,KAAKo6e,OAAOouB,WAAWnmR,UAAUrhP,EAAQg9e,iBAEvD2gB,GADS8yC,EAAYniE,OACJmiE,EAAY3mC,gBACjCp+f,GAAO1L,EAAQy7B,OAAO/vB,IAAM1L,EAAQ+U,OAAS4of,EAEjDv5W,EAASpkJ,EACT,IAAI64hB,EAAY75hB,KAAKmviB,qBAAqB/pZ,EAAQnzI,GAClDmzI,EAASy0Y,EAAU74hB,QACnBiR,EAAQ4nhB,EAAU5nhB,MAClB,IAAI46f,EAAiBpvgB,EAAkB2nJ,EAAOusK,WAAa1/S,IAAUmzI,EAAO3oJ,OACxEi1iB,EAAYj0iB,EAAkB2nJ,EAAOusK,WAClCvsK,aAAkBovW,IAAkC,OAAhBpvW,EAAO34H,KAIlD,GAHI6khB,GAAwBlsZ,EAAOusK,oBAAoB25L,IAAmBr5e,IAAUmzI,EAAO3oJ,SACvFowgB,EAAiB7sgB,KAAK03hB,qBAAqBtyY,EAAQnzI,IAEnDq/hB,GAAwBzkC,GAAkB6kC,EAAW,CACjD17hB,EAAQ,EAEZ,GAAI62f,EAAgB,CAChB72f,EAAQhW,KAAKo6e,OAAOouB,WAAWC,sBAAsB9W,EAAO9O,UAAU7E,oBACjDh+e,KAAKo6e,OAAOioC,gBAAgBr1gB,GAAKN,GAAO1M,KAAKo6e,OAAOioC,gBAAgBr1gB,EAAIN,EAAMilf,EAAO57e,SAAU/V,KAAKo6e,OAAOioC,gBAAgBt1gB,EAAIP,EAAOwJ,IACrIm7hB,EAAcpkiB,EAAIP,EAAOwJ,EAAQ,IACnDxJ,GAAQwJ,EACR/D,EAAQmzI,EAAO3oJ,OAAS,QAIvBi1iB,IAELlliB,GADAwJ,EAAQhV,EAAQgV,MAEhB/D,EAAQmzI,EAAO3oJ,QAGvB00iB,EAAgB,IAAIj3f,GAAM1tC,EAAME,GAGxC,OACI1L,QAAWokJ,EACXnzI,MAASA,EACTk/hB,cAAiBA,EACjB/rB,gBAAmBA,IA2B3Bh5K,EAAU/wW,UAAUqjR,QAAU,SAAUizO,GACpC,IAAInlf,EAAOmlf,EAAO9O,UAAU91e,EACxB6we,EAAkB+T,EAAO9O,UAAUjF,gBACnC59e,KAAKgwgB,qBAAqBre,IAA+C,UAAlC/T,EAAgBj9c,gBACvDn0B,GAAQm+e,GAAcO,oBAAoBtN,EAAgBhgQ,kBAE9D,IAAK,IAAIzhP,EAAI,EAAGA,EAAIw1f,EAAOv3e,SAAS3d,OAAQN,IAAK,CAC7C,IAAI6E,EAAU2wf,EAAOv3e,SAASje,GAC9B,KAAI6E,aAAmB+zf,IAQlB,CACDvof,GAAQxL,EAAQy7B,OAAOjwB,KACvB,MARIA,GADM,IAANrQ,EACQ6E,EAAQy7B,OAAOjwB,KAAOxL,EAAQgV,MAG9BhV,EAAQgV,MAQ5B,OAAOxJ,GAMX4/V,EAAU/wW,UAAUyjR,OAAS,SAAU6yO,GAGnC,IAAK,IAFDjlf,EAAMilf,EAAO9O,UAAU71e,EACvB8R,EAAQ6ye,EAAO9O,UAAUI,aAAa1kf,QAAQozf,GACzCx1f,EAAI,EAAGA,EAAI2iB,EAAO3iB,IACvBuQ,GAAOilf,EAAO9O,UAAUI,aAAa9mf,GAAG4Z,OAE5C,OAAOrJ,GAMX0/V,EAAU/wW,UAAUm2iB,gBAAkB,SAAU7/C,EAAQnlf,GACpD,IAAIoxO,EAAkB,EAClB59O,KAAKgwgB,qBAAqBre,KAC1B/zQ,EAAkB+sQ,GAAcO,oBAAoByG,EAAO9O,UAAUjF,gBAAgBhgQ,kBAEzFpxO,GAAQoxO,EAER,IAAK,IADD58O,OAAU7F,EACLgB,EAAI,EAAGA,EAAIw1f,EAAOv3e,SAAS3d,OAAQN,IAExC,IADA6E,EAAU2wf,EAAOv3e,SAASje,cACH44f,GACnBvof,GAAQxL,EAAQy7B,OAAOjwB,KAAOxL,EAAQgV,MACtChV,OAAU7F,MAET,CAAA,KAAI6F,aAAmBsqf,IAAmBtqf,aAAmB0zf,IAC1D1zf,EAAQ2wT,oBAAoB25L,IAAmD,IAA/Btqf,EAAQ2wT,SAAS45L,WAIrE,MAHAvqf,OAAU7F,EAMlB,OAAS6F,QAAWA,EAASwL,KAAQA,IAOzC4/V,EAAU/wW,UAAUujiB,iBAAmB,SAAUlhC,GAC7C,IAAI9I,EAAgB,EACpB,GAAI8I,aAAsBlJ,GAEtB,IAAK,IADD11e,EAAQ4+e,EAAW5vc,KAAK1zC,SAAS7b,QAAQm/f,GACpCvhgB,EAAI,EAAGA,EAAI2iB,EAAO3iB,IAAK,CAC5B,IAAI6E,EAAU08f,EAAW5vc,KAAK1zC,SAASje,GACnC6E,aAAmBsqf,IAAmBtqf,aAAmB+zf,KAG7DH,GAAiB5zf,EAAQvE,QAGjC,OAAOm4f,GAMXxoJ,EAAU/wW,UAAU20gB,qBAAuB,SAAUre,GACjD,SAAIl0f,EAAkBk0f,EAAO9O,UAAU6P,sBACnCf,IAAWA,EAAO9O,UAAUjme,aAQpCwvV,EAAU/wW,UAAU40gB,oBAAsB,SAAUte,GAChD,SAAIl0f,EAAkBk0f,EAAO9O,UAAU+P,kBAChCjB,IAAWA,EAAO9O,UAAU/6W,YASvCskO,EAAU/wW,UAAUknQ,SAAW,SAAUovP,EAAQ2/C,GAC7C,IAAIt7hB,EAAQ,EACRhW,KAAKgwgB,qBAAqBre,KAC1B37e,GAAS20e,GAAcO,oBAAoByG,EAAO9O,UAAUjF,gBAAgBhgQ,kBAEhF,IAAK,IAAIzhP,EAAI,EAAGA,EAAIw1f,EAAOv3e,SAAS3d,OAAQN,IACxC6Z,GAAS27e,EAAOv3e,SAASje,GAAGsgC,OAAOjwB,KAAOmlf,EAAOv3e,SAASje,GAAG6Z,MAMjE,OAJIs7hB,GAAwB3/C,EAAO9O,UAAUI,aAAa1kf,QAAQozf,KAAYA,EAAO9O,UAAUI,aAAaxmf,OAAS,GAC9GgB,EAAkBk0f,EAAO9O,UAAU+P,mBACtC58e,GAAShW,KAAKo6e,OAAOouB,WAAWC,sBAAsB9W,EAAO9O,UAAU7E,kBAEpEhoe,GAMXo2V,EAAU/wW,UAAUkkiB,gBAAkB,SAAU5tC,EAAQ+L,EAAYzrf,GAChE,IAAIzF,EAAOmlf,EAAO9O,UAAU91e,EACxB/M,KAAKgwgB,qBAAqBre,KAE1Bnlf,GAAQm+e,GAAcO,oBAAoByG,EAAO9O,UAAUjF,gBAAgBhgQ,kBAE/E,IAAI9+N,EAAQ6ye,EAAOv3e,SAAS7b,QAAQm/f,IACJ,IAA3B/L,EAAOv3e,SAAS3d,QAAgBk1f,EAAOv3e,SAAS,aAAc26e,IAAmD,IAA3BpD,EAAOv3e,SAAS3d,QACpGk1f,EAAOv3e,SAAS,aAAc26e,IAAsBpD,EAAOv3e,SAAS,aAAc26e,MACrFj2e,EAAQ6ye,EAAOv3e,SAAS3d,QAE5B,IAAK,IAAIN,EAAI,EAAGA,EAAI2iB,EAAO3iB,IAAK,CACPw1f,EAAOv3e,SAASje,aACPmvf,KAGpB,IAANnvf,GAAWw1f,EAAOv3e,SAASje,aAAc44f,GACzCvof,GAAQmlf,EAAOv3e,SAASje,GAAG6Z,MAG3BxJ,GAAQmlf,EAAOv3e,SAASje,GAAGsgC,OAAOjwB,KAAOmlf,EAAOv3e,SAASje,GAAG6Z,OAMpE,GAHKvY,EAAkBiggB,KACnBlxf,GAAQkxf,EAAWjhe,OAAOjwB,MAE1Bkxf,aAAsBlJ,GAClBvif,IAAUyrf,EAAWjhgB,OACrB+P,GAAQkxf,EAAW1nf,MAEd/D,EAAQyrf,EAAWjhgB,OAExB+P,GAAQkxf,EAAW1nf,MAAQhW,KAAKo6e,OAAOouB,WAAWC,sBAAsB/K,EAAW5vc,KAAK+0b,UAAU7E,iBAIlGxxe,GAAQxM,KAAKo6e,OAAOouB,WAAWjmQ,SAASm7P,EAAWjxe,KAAKuK,OAAO,EAAG/kB,GAAQyrf,EAAW1f,sBAGxF,GAAI/re,EAAQ,EACb,GAAKxU,EAAkBiggB,IAAiBA,aAAsB3I,GAQ1Dvof,GAAQxM,KAAKo6e,OAAOouB,WAAWC,sBAAsB9W,EAAO9O,UAAU7E,sBANtE,GADAxxe,GAAQkxf,EAAW1nf,MACL,IAAV/D,EAAa,CACb,IAAI4we,EAAY6a,EAAW5vc,KAAK+0b,UAChCr2e,GAAQxM,KAAKo6e,OAAOouB,WAAWC,sBAAsB5lB,EAAU7E,iBAO3E,OAAOxxe,GAMX4/V,EAAU/wW,UAAUuvhB,iBAAmB,SAAUj5B,GAC7C,IAAInlf,EAAOmlf,EAAO9O,UAAU91e,EAO5B,OANI/M,KAAKgwgB,qBAAqBre,KAC1Bnlf,GAAQm+e,GAAcO,oBAAoByG,EAAO9O,UAAUjF,gBAAgBhgQ,kBAE3E+zQ,EAAOv3e,SAAS3d,OAAS,IACzB+P,GAAQmlf,EAAOv3e,SAAS,GAAGqiB,OAAOjwB,MAE/BA,GAMX4/V,EAAU/wW,UAAUijiB,yBAA2B,SAAU3sC,EAAQ79d,EAAOwqW,EAAcgzK,GAClF,IAGIK,EAHAR,EAAgBr9gB,EAChBsxH,OAASjqJ,EACT8W,EAAQ,EAGZmzI,GADAusZ,EAAoB3xiB,KAAK8qhB,qBAAqBn5B,EAAQvsW,EAAQnzI,EAAOk/hB,EAAeG,IACzDtwiB,QAC3BiR,EAAQ0/hB,EAAkB1/hB,MAC1Bk/hB,EAAgBQ,EAAkBR,cAClC7yK,EAAak5J,wBAAwB7lC,EAAQvsW,EAAQnzI,EAAOk/hB,IAMhE/kM,EAAU/wW,UAAUo1iB,kCAAoC,SAAU9+C,IACzDl0f,EAAkBuC,KAAKsvf,QAAUtvf,KAAKo9gB,gBAAgB3ghB,OAAS,GAChEuD,KAAK+phB,wBAAwB/phB,OAOrCosW,EAAU/wW,UAAUsjiB,wBAA0B,SAAUhtC,GAEpD,IAAK,IADD3wf,OAAU7F,EACLgB,EAAI,EAAGA,EAAIw1f,EAAOv3e,SAAS3d,SAChCuE,EAAU2wf,EAAOv3e,SAASje,cACH44f,GAFiB54f,IAGpC6E,OAAU7F,EAMlB,OAAO6F,GAOXorW,EAAU/wW,UAAUmjN,YAAc,SAAUsuE,EAAeq8P,GACvDnphB,KAAKzC,MAAMw6hB,oBAAoBjrQ,GAC/B9sR,KAAK6e,IAAIk5gB,oBAAoB5O,GAC7BnphB,KAAKo+hB,sBAAwBp+hB,KAAK6e,IAAI6O,SAAS3gB,EAC/C/M,KAAK8kiB,sBAAqB,IAM9B14L,EAAU/wW,UAAU2tiB,gBAAkB,SAAUnmD,EAAWg1C,GACvD,IAAI/pe,EAAO+0b,EAAUjme,WACrB,GAAIi7gB,EACA73hB,KAAKzC,MAAMsb,YAAYi1C,EAAM+pe,OAE5B,CACD,IAAIx3B,EAAYvyc,EAAK0vc,eACrBx9f,KAAKzC,MAAM26hB,qBAAqBpqe,EAAMuyc,GAE1CrggB,KAAK6e,IAAIk5gB,oBAAoB/3hB,KAAKzC,OAClCyC,KAAKo+hB,sBAAwBp+hB,KAAKzC,MAAMmwB,SAAS3gB,EACjD/M,KAAK8kiB,sBAAqB,IAK9B14L,EAAU/wW,UAAUgriB,oBAAsB,SAAUryC,EAAO49C,GACvD,IAAI19hB,EASJ,GARI8/e,aAAiBjB,KAEbiB,EADA49C,EACQ5xiB,KAAK+2gB,6BAA6B/iB,GAGlCh0f,KAAKgriB,2BAA2Bh3C,IAG5CA,aAAiBlR,GAEjB,GADA5ue,EAAW,IAAIkjhB,GAAap3hB,KAAKsvf,OAC7BsiD,EACA19hB,EAAS2E,YAAYm7e,EAAMp3e,YAAY,OAEtC,CACD,IAAIkxC,EAAOkmc,EAAMlsX,UACjB5zH,EAASgkhB,qBAAqBpqe,EAAMA,EAAK0vc,gBAGjD,OAAOtpf,GAMXk4V,EAAU/wW,UAAUoriB,cAAgB,SAAUnoK,EAAcwqK,GACxD,GAAIrriB,EAAkB6gY,GAClB,MAAM,IAAI19X,MAAM,8BAEpBZ,KAAKzC,MAAMw6hB,oBAAoBz5J,GAC/Bt+X,KAAK6e,IAAIk5gB,oBAAoBz5J,GAC7Bt+X,KAAKo+hB,sBAAwBp+hB,KAAK6e,IAAI6O,SAAS3gB,EAC/C/M,KAAK8kiB,sBAAqB,IAM9B14L,EAAU/wW,UAAUg2iB,eAAiB,SAAUhzC,EAAYr9f,EAASiR,EAAOwlhB,GACvEz3hB,KAAKzC,MAAMi6hB,wBAAwBn5B,EAAYr9f,EAASiR,EAAOwlhB,GAC/Dz3hB,KAAK6e,IAAIk5gB,oBAAoB/3hB,KAAKzC,OAClCyC,KAAKo+hB,sBAAwB3G,EAAiB1qhB,EAC9C/M,KAAK8kiB,sBAAqB,IAK9B14L,EAAU/wW,UAAUw2iB,QAAU,SAAUxzC,EAAY1yf,EAAQmmiB,GACxD9xiB,KAAKo6e,OAAO2vC,0BACZ/phB,KAAKzC,MAAMq7hB,yBAAyBv6B,EAAY1yf,GAChD3L,KAAK6e,IAAIk5gB,oBAAoB/3hB,KAAKzC,OAC7Bu0iB,GACD9xiB,KAAK8kiB,sBAAqB,IAOlC14L,EAAU/wW,UAAUguiB,eAAiB,SAAUv8Q,EAAeq8P,GAC1D,GAAI1rhB,EAAkBqvR,IAAkBrvR,EAAkB0rhB,GACtD,MAAM,IAAIvohB,MAAM,oCAEpB,GAAInD,EAAkBqvR,EAAc+1N,YAC7B/1N,EAAcnhR,OAAS3L,KAAK23hB,mBAAmB7qQ,EAAc+1N,WAAa,EAC7E,MAAM,IAAIjif,MAAM,oCAEpB,GAAInD,EAAkB0rhB,EAAYtmC,YAC3BsmC,EAAYx9gB,OAAS3L,KAAK23hB,mBAAmBxO,EAAYtmC,WAAa,EACzE,MAAM,IAAIjif,MAAM,kCAEhBksR,EAAcurQ,iBAAiBlP,GAE/BnphB,KAAKw+M,YAAYsuE,EAAeA,IAI5BA,EAAcyrQ,cAAcpP,GAE5BA,EAAY6T,8BAA8BlwQ,EAAcyqQ,+BAAgCpO,EAAYoO,gCAIpGzqQ,EAAckwQ,8BAA8B7T,EAAYoO,+BAAgCzqQ,EAAcyqQ,gCAE1Gv3hB,KAAKw+M,YAAYsuE,EAAeq8P,KAOxC/8K,EAAU/wW,UAAUypiB,qBAAuB,SAAUZ,GAC5ClkiB,KAAKs6O,UACFt6O,KAAKigiB,WACLjgiB,KAAKzC,MAAMu6hB,wBAAuB,GAClC93hB,KAAK6e,IAAIi5gB,wBAAuB,KAGhC93hB,KAAKzC,MAAMu6hB,wBAAuB,GAClC93hB,KAAK6e,IAAIi5gB,wBAAuB,KAGnC93hB,KAAKmhiB,qBACNnhiB,KAAK+xiB,kCAET/xiB,KAAKo6e,OAAO2vC,0BACZ/phB,KAAKmkgB,cACDnkgB,KAAKsvf,MAAM7jB,kBAAoBzre,KAAKsvf,MAAM9jB,mBAC1Cxre,KAAKikiB,oBAAmB,GAExBC,IACIlkiB,KAAKzC,MAAMslf,UAAU60B,mBAAqB13gB,KAAKsvf,MAAMye,sBACrD/tgB,KAAKsvf,MAAMye,uBAAwB,GAE7B/tgB,KAAKzC,MAAMslf,UAAU60B,kBAAoB13gB,KAAKsvf,MAAMye,wBAC1D/tgB,KAAKsvf,MAAMye,uBAAwB,GAEvC/tgB,KAAKsvf,MAAMlS,uBAEfp9e,KAAKo6e,OAAO8H,eAOhB91I,EAAU/wW,UAAU02iB,gCAAkC,WAClD/xiB,KAAKqwhB,sBAAuB,EAC5B,IAAIvjQ,EAAgB9sR,KAAKzC,MACrB4rhB,EAAcnphB,KAAK6e,IAClB7e,KAAKigiB,YACNnzQ,EAAgB9sR,KAAK6e,IACrBsqgB,EAAcnphB,KAAKzC,OAEvByC,KAAKgyiB,oBAAoBllR,EAAeq8P,GACxCnphB,KAAKiyiB,wBAAwBnlR,EAAeq8P,GAC5CnphB,KAAKkyiB,wBAAwBplR,EAAeq8P,GAC5CnphB,KAAKmyiB,sBAAsBrlR,EAAeq8P,GAC1CnphB,KAAKoyiB,oBAAoBtlR,EAAeq8P,GACnCnphB,KAAKolhB,iBACNplhB,KAAKqyiB,YAAYzd,mBAErB50hB,KAAKqwhB,sBAAuB,EAC5BrwhB,KAAKsyiB,yBAKTlmM,EAAU/wW,UAAU22iB,oBAAsB,SAAUz0iB,EAAOshB,GACvD,IAAIy2K,EACJ,GAAI/3L,EAAMs5gB,gBAAkBh4f,EAAIg4f,eAAiBt5gB,EAAMoO,OAAS,IAAMkT,EAAIlT,OAAQ,CAC9E,IAAIw+hB,EAActrhB,EAAIg4f,cAAcliB,UAAU91e,EAAIlT,OAAQ,GAC1D2pL,EAAQ60W,EAAYnpiB,QACRmpiB,EAAYl4hB,MACxB,GAAIqjL,aAAiBm/T,GAAiB,CAChBl3f,EAAMs5gB,cAAcnne,UAAU4lJ,EAAO,KACnC/3L,EAAMoO,SACtB2pL,OAAQn6L,IAIhBm6L,aAAiBm/T,GACjBz0f,KAAKqyiB,YAAY1d,gBAAgBr/V,GAGjCt1L,KAAKqyiB,YAAYzd,oBAGzBxoL,EAAU/wW,UAAUi3iB,sBAAwB,WACxC,IAAIC,IAAmBvyiB,KAAKqyiB,YAAY/8W,MACpCk9W,GAAoB/0iB,EAAkBuC,KAAK8vf,eAAgBryf,EAAkBuC,KAAK8vf,YAAY7vb,OAC9Fv7D,EAAQ1E,KAAKzC,MAAMslf,UAAUjF,gBAAgB+F,UACjD,GAAIj/e,aAAiBsif,IAA+D,IAA5Ctif,EAAM+yB,KAAK7hB,cAAcrX,QAAQ,OAAc,CAEnF,IAAKd,EADUuC,KAAK4qiB,uBAGhB,YADA5qiB,KAAKkhiB,oBAAsB,mBAInC,GAAIlhiB,KAAKzC,MAAMslf,UAAU60B,iBAAkB,CACvC,IAAI+6B,GAAqF,IAAxEzyiB,KAAKzC,MAAMslf,UAAU8F,WAAW6K,iBAAiBj1f,QAAQ,UAGlEyB,KAAKkhiB,oBAFTsR,EACID,EAC2BE,EAAa,mBAAqB,mBAGlCA,EAAa,kBAAoB,kBAI5DF,EAC2BE,EAAa,cAAgB,cAG7BA,EAAa,aAAe,kBAM3DzyiB,KAAKkhiB,oBADLsR,EAC2BD,EAAmB,aAAe,YAGlCA,EAAmB,QAAU,QASpEnmM,EAAU/wW,UAAU+2iB,oBAAsB,SAAU70iB,EAAOshB,GACvD,IAAI6zhB,EAAW1yiB,KAAK87P,SAASv+P,EAAOshB,GAC/BphB,EAAkBi1iB,GAQnB1yiB,KAAK8vf,YAAYzI,eAPjBrnf,KAAK8vf,YAAYtK,WAAWktD,EAAS5iD,aACrC9vf,KAAK8vf,YAAY7vb,MAAQyye,EACzB1yiB,KAAK2yiB,mBAAmBp1iB,EAAOshB,GAC/B7e,KAAK4yiB,kBAAkBr1iB,EAAOshB,KAWtCutV,EAAU/wW,UAAUs3iB,mBAAqB,SAAUp1iB,EAAOshB,GAClDthB,EAAMslf,UAAUuR,eAAiBv1e,EAAIgke,UAAUuR,eAC/Cp0f,KAAKs0f,WAAW9O,WAAWjof,EAAMslf,UAAUwR,eAAeC,YAC1Dt0f,KAAK6yiB,cAAct1iB,EAAMslf,UAAUwR,eAAeJ,WAAY12f,EAAOshB,IAIrE7e,KAAKs0f,WAAW0/B,mBAOxB5nL,EAAU/wW,UAAUu3iB,kBAAoB,SAAUr1iB,EAAOshB,GACjDthB,EAAMslf,UAAUuR,eAAiBv1e,EAAIgke,UAAUuR,eAC/Cp0f,KAAKm2f,UAAU3Q,WAAWjof,EAAMslf,UAAUwR,eAAeH,SAASiC,WAClEn2f,KAAK8yiB,aAAav1iB,EAAMslf,UAAUwR,eAAeJ,WAAY12f,EAAOshB,IAIpE7e,KAAKm2f,UAAUo+B,kBAOvBnoL,EAAU/wW,UAAUw3iB,cAAgB,SAAU5ye,EAAO1iE,EAAOshB,GACxD,IAAIthB,EAAMslf,UAAUwR,eAAex7c,OAAOh6B,EAAIgke,UAAUwR,gBAIxD,IAAK,IADDQ,GAAY,EACP14f,EAAI,EAAGA,EAAI8jE,EAAMgjb,aAAaxmf,OAAQN,IAAK,CAChD,IAAIukE,EAAMT,EAAMgjb,aAAa9mf,GAI7B,GAHIukE,IAAQnjE,EAAMslf,UAAUwR,eAAeH,WACvCW,GAAY,GAEZA,EACA,IAAK,IAAItxe,EAAI,EAAGA,EAAIm9C,EAAIuib,aAAaxmf,OAAQ8mB,IAAK,CAC9C,IAAI0/C,EAAOvC,EAAIuib,aAAa1/d,GAI5B,GAHIvjB,KAAKukgB,eAAethc,EAAM1lE,EAAOshB,IACjC7e,KAAKs0f,WAAWk8B,cAAcvtd,EAAKqxb,YAEnCrxb,IAASpkD,EAAIgke,UAAUwR,eAEvB,YADAr0f,KAAKs0f,WAAWk8B,cAAcvtd,EAAKqxb,eAWvDloJ,EAAU/wW,UAAUy3iB,aAAe,SAAU7ye,EAAO1iE,EAAOshB,GACvD,IAAIovgB,EAAW1whB,EAAMslf,UAAUwR,eAAeH,SAC9C,GAAI+5B,IAAapvgB,EAAIgke,UAAUwR,eAAeH,SAG9C,IAAK,IAAI/3f,EAAI8jE,EAAMgjb,aAAa1kf,QAAQ0vhB,GAAY,EAAG9xhB,EAAI8jE,EAAMgjb,aAAaxmf,OAAQN,IAAK,CACvF,IAAI42iB,EAAe9ye,EAAMgjb,aAAa9mf,GAEtC,GADA6D,KAAKm2f,UAAUq6B,cAAcuiB,EAAa58C,WACtC48C,IAAiBl0hB,EAAIgke,UAAUwR,eAAeH,SAC9C,SAQZ9nJ,EAAU/wW,UAAUygQ,SAAW,SAAUgxB,EAAeq8P,GACpD,IAAK1rhB,EAAkBqvR,EAAc+1N,UAAUwR,kBAAoB52f,EAAkB0rhB,EAAYtmC,UAAUwR,gBAAiB,CACxH,IAAI2+C,EAAalmR,EAAc+1N,UAAUwR,eAAeJ,WACpDg/C,EAAWnmR,EAAc+1N,UAAUwR,eAAeJ,WACtD,GAAI++C,IAAeC,EACf,OAAOD,EAGP,GAAIA,EAAW7uiB,SAAS2oR,EAAc+1N,UAAUwR,gBAC5C,OAAO2+C,EAEN,GAAIC,EAAS9uiB,SAAS2oR,EAAc+1N,UAAUwR,gBAC/C,OAAO4+C,EAEN,IAAKD,EAAW5+C,gBAAkB6+C,EAAS7+C,cAC5C,OAGA,EAAG,CAEC,IADA4+C,EAAaA,EAAW3+C,eAAeJ,cACpBg/C,GAAYD,EAAW7uiB,SAAS8uiB,EAAS5+C,gBACxD,OAAO2+C,EAEN,GAAIC,EAAS9uiB,SAAS6uiB,EAAW3+C,gBAClC,OAAO4+C,SAELx1iB,EAAkBu1iB,EAAW3+C,mBAMvDjoJ,EAAU/wW,UAAUwuiB,mBAAqB,SAAU71C,GAC/C,IAAIrL,EACJ,GAAIqL,EAAM9Q,2BAA2BkQ,GACjCzK,EAAaqL,EAAM9Q,qBAInB,IADAyF,EAAaqL,EAAM9Q,kBACVyF,aAAsByK,KAC3BzK,EAAaA,EAAWzF,gBAGhC,OAAOyF,GAQXv8I,EAAU/wW,UAAU82iB,sBAAwB,SAAU50iB,EAAOshB,GACzD,IAAIq0hB,EAAmBlziB,KAAK6piB,mBAAmBtsiB,EAAMslf,WACjDswD,EAAiBnziB,KAAK6piB,mBAAmBhrhB,EAAIgke,WACjD,IAAKplf,EAAkBy1iB,GAAmB,CACtClziB,KAAK2if,cAAc6C,WAAW0tD,EAAiBvwD,eAG/C,IAAK,IAFDywD,EAAiBpziB,KAAKo6e,OAAOlvQ,MAAM3sO,QAAQ20iB,EAAiBjjZ,MAC5DojZ,EAAerziB,KAAKo6e,OAAOlvQ,MAAM3sO,QAAQ40iB,EAAeljZ,MACnD9zJ,EAAIi3iB,EAAiB,EAAGj3iB,GAAKk3iB,EAAcl3iB,IAChD6D,KAAK2if,cAAc6tC,cAAcxwhB,KAAKo6e,OAAOlvQ,MAAM/uO,GAAGu1f,YAAY,GAAG/O,iBAUjFv2I,EAAU/wW,UAAU62iB,wBAA0B,SAAU30iB,EAAOshB,GAC3D7e,KAAKsziB,+BAA+B/1iB,EAAMslf,UAAW7if,KAAMzC,EAAOshB,IAKtEutV,EAAU/wW,UAAUi4iB,+BAAiC,SAAUzwD,EAAWjza,EAAWryE,EAAOshB,IAEpFthB,EAAMslf,UAAUuR,eAAmBv1e,EAAIgke,UAAUuR,eAC9C72f,EAAMslf,UAAUwR,iBAAmBx1e,EAAIgke,UAAUwR,iBACjDr0f,KAAKukgB,eAAehngB,EAAMslf,UAAUwR,eAAgB92f,EAAOshB,GAI9D7e,KAAKuziB,sCAAsC1wD,EAAWtlf,EAAOshB,GAH7D7e,KAAKwziB,iCAAiCj2iB,EAAMslf,UAAUwR,eAAgB92f,EAAOshB,IAUrFutV,EAAU/wW,UAAUk4iB,sCAAwC,SAAU1wD,EAAWtlf,EAAOshB,GAOpF,GANIthB,EAAMslf,YAAcA,EACpB7if,KAAK49e,gBAAgB4H,WAAW3C,EAAUjF,iBAG1C59e,KAAK49e,gBAAgB4yC,cAAc3tC,EAAUjF,iBAE7C/+d,EAAIgke,YAAcA,EAAtB,CAGA,IAAImR,EAAQh0f,KAAK+4hB,qBAAqBl2C,GACjCplf,EAAkBu2f,IACnBh0f,KAAKyziB,kCAAkCz/C,EAAOz2f,EAAOshB,KAM7DutV,EAAU/wW,UAAUo4iB,kCAAoC,SAAUz/C,EAAOz2f,EAAOshB,GACxEm1e,aAAiBlR,GACjB9if,KAAKuziB,sCAAsCv/C,EAAOz2f,EAAOshB,GAGzD7e,KAAK0ziB,kCAAkC1/C,EAAOz2f,EAAOshB,IAM7DutV,EAAU/wW,UAAUq4iB,kCAAoC,SAAUzze,EAAO1iE,EAAOshB,GAC5E,IAAK,IAAI1iB,EAAI,EAAGA,EAAI8jE,EAAMgjb,aAAaxmf,OAAQN,IAAK,CAEhD,IAAK,IADD8xhB,EAAWhud,EAAMgjb,aAAa9mf,GACzBonB,EAAI,EAAGA,EAAI0qgB,EAAShrC,aAAaxmf,OAAQ8mB,IAC9CvjB,KAAK2ziB,yBAAyB1lB,EAAShrC,aAAa1/d,IAExD,GAAI1E,EAAIgke,UAAUuR,eAAiBp0f,KAAK6uiB,YAAY5gB,EAAUpvgB,EAAIgke,UAAUwR,gBACxE,OAGR,IAAIL,EAAQh0f,KAAK+4hB,qBAAqB94d,GAEtCjgE,KAAKyziB,kCAAkCz/C,EAAOz2f,EAAOshB,IAMzDutV,EAAU/wW,UAAUs4iB,yBAA2B,SAAU1we,GACrD,IAAK,IAAI9mE,EAAI,EAAGA,EAAI8mE,EAAKggb,aAAaxmf,OAAQN,IAC1C6D,KAAK4ziB,0BAA0B3we,EAAKggb,aAAa9mf,KAMzDiwW,EAAU/wW,UAAUu4iB,0BAA4B,SAAU5/C,GAClDA,aAAiBlR,GACjB9if,KAAK6ziB,8BAA8B7/C,GAGnCh0f,KAAK8ziB,0BAA0B9/C,IAMvC5nJ,EAAU/wW,UAAUy4iB,0BAA4B,SAAUpB,GACtD,IAAK,IAAIv2iB,EAAI,EAAGA,EAAIu2iB,EAASzvD,aAAaxmf,OAAQN,IAE9C,IAAK,IADD8xhB,EAAWykB,EAASzvD,aAAa9mf,GAC5BonB,EAAI,EAAGA,EAAI0qgB,EAAShrC,aAAaxmf,OAAQ8mB,IAC9CvjB,KAAK2ziB,yBAAyB1lB,EAAShrC,aAAa1/d,KAOhE6oV,EAAU/wW,UAAUw4iB,8BAAgC,SAAUhxD,GAC1D7if,KAAK49e,gBAAgB4yC,cAAc3tC,EAAUjF,kBAMjDxxI,EAAU/wW,UAAUm4iB,iCAAmC,SAAUO,EAASx2iB,EAAOshB,GAC7E,GAAIA,EAAIgke,UAAUuR,cAAe,CAC7B,IAAIsrC,EAAgB1/hB,KAAKs6hB,mBAAmByZ,EAASl1hB,EAAIgke,UAAUwR,gBACnE,GAAIqrC,EAAczrC,WAAW9vf,SAAS0a,EAAIgke,UAAUwR,gBAAiB,CACjE,IAAI8D,EAAYn4f,KAAK2/hB,gBAAgBoU,EAASrU,GAC1CtnC,EAAUp4f,KAAK2/hB,gBAAgB9ghB,EAAIgke,UAAUwR,eAAgBqrC,GAC7D1/hB,KAAK6/hB,aAAaH,EAAe7ghB,EAAIgke,UAAUwR,gBAE3Cr0f,KAAKukgB,eAAem7B,EAAeniiB,EAAOshB,GAC1C7e,KAAK2ziB,yBAAyBjU,GAG1BvnC,IAAcunC,EACd1/hB,KAAKuziB,sCAAsCh2iB,EAAMslf,UAAWtlf,EAAOshB,GAGnE7e,KAAKg0iB,wBAAwB77C,EAAUjE,SAAU32f,EAAOshB,GAMhE7e,KAAKi0iB,qBAAqBvU,EAAczrC,WAAYyrC,EAAetnC,QAIvEp4f,KAAKg0iB,wBAAwBtU,EAAcxrC,SAAU32f,EAAOshB,OAG/D,CACD,IAAIokD,EAAOjjE,KAAKggiB,iBAAiB+T,GACjC/ziB,KAAKg0iB,wBAAwB/we,EAAKixb,SAAU32f,EAAOshB,KAM3DutV,EAAU/wW,UAAU44iB,qBAAuB,SAAUh0e,EAAOk4b,EAAWC,GACnE,IAAI87C,EAAcl0iB,KAAK4liB,YAAYztC,EAAUjE,SAAUiE,GACnDg8C,EAAYD,EAAc/7C,EAAU7D,WAAWj/N,UAC/C84Q,EAAcnuiB,KAAK4liB,YAAYxtC,EAAQlE,SAAUkE,GACjDg2C,EAAeD,EAAc/1C,EAAQ9D,WAAWj/N,UAChD6+Q,EAAc/F,IACd+F,EAAc/F,GAEdgG,EAAY/F,IACZ+F,EAAY/F,GAEZ8F,EAAcl0iB,KAAKo+hB,wBACnB8V,EAAcl0iB,KAAKo+hB,uBAEnB8V,EAAcl0iB,KAAKo+hB,wBACnB8V,EAAcl0iB,KAAKo+hB,uBAGvB,IAAK,IADDt/gB,EAAQmhD,EAAMgjb,aAAa1kf,QAAQ65f,EAAQlE,UACtC/3f,EAAI8jE,EAAMgjb,aAAa1kf,QAAQ45f,EAAUjE,UAAW/3f,GAAK2iB,EAAO3iB,IAErE,IAAK,IADD8xhB,EAAWhud,EAAMgjb,aAAa9mf,GACzBonB,EAAI,EAAGA,EAAI0qgB,EAAShrC,aAAaxmf,OAAQ8mB,IAAK,CACnD,IAAI0/C,EAAOgrd,EAAShrC,aAAa1/d,GAC7B/W,EAAOxM,KAAK4liB,YAAY3X,EAAUhrd,GAClC0nb,GAAcltd,MAAMy2gB,EAAa,IAAMvpD,GAAcltd,MAAMjxB,EAAM,IAC9Dm+e,GAAcltd,MAAMjxB,EAAM,GAAKm+e,GAAcltd,MAAM02gB,EAAW,IACjEn0iB,KAAK2ziB,yBAAyB1we,KAS9CmpS,EAAU/wW,UAAU24iB,wBAA0B,SAAU/lB,EAAU1whB,EAAOshB,GACrE,IAAK,IAAI1iB,EAAI8xhB,EAASxtP,SAAUtkS,EAAI8xhB,EAASh6B,WAAWhR,aAAaxmf,OAAQN,IAAK,CAE9E,IAAK,IADDukE,EAAMutd,EAASh6B,WAAWhR,aAAa9mf,GAClConB,EAAI,EAAGA,EAAIm9C,EAAIuib,aAAaxmf,OAAQ8mB,IACzCvjB,KAAK2ziB,yBAAyBjze,EAAIuib,aAAa1/d,IAEnD,GAAI1E,EAAIgke,UAAUuR,eAAiBp0f,KAAK6uiB,YAAYnue,EAAK7hD,EAAIgke,UAAUwR,gBACnE,OAGR,IAAIL,EAAQh0f,KAAK+4hB,qBAAqB9K,EAASh6B,YAE/Cj0f,KAAKyziB,kCAAkCz/C,EAAOz2f,EAAOshB,IAQzDutV,EAAU/wW,UAAU42iB,wBAA0B,SAAU10iB,EAAOshB,GAE3D,GADA7e,KAAKg+e,gBAAgBwH,WAAWjof,EAAMslf,UAAU7E,iBAC5Czgf,EAAMslf,YAAchke,EAAIgke,YAAatlf,EAAMs5gB,cAAcvZ,cACtD//f,EAAMoO,SAAW3L,KAAK64hB,cAAct7hB,EAAMs5gB,gBAAkBt5gB,EAAMoO,OAAS,IAAMkT,EAAIlT,OAD5F,CAIA,IAAIyoiB,EAAO72iB,EAAMslf,UAIjB,IAHItlf,EAAMoO,SAAW3L,KAAK23hB,mBAAmByc,IAAUp0iB,KAAKs6O,UACxD85T,EAAOp0iB,KAAKu6hB,sBAAsB6Z,KAE9B32iB,EAAkB22iB,IAASA,IAASv1hB,EAAIgke,WAAauxD,EAAK95T,WAC9D85T,EAAOp0iB,KAAKu6hB,sBAAsB6Z,GAEtC,IAAIzoiB,EAASyoiB,IAAS72iB,EAAMslf,UAAYtlf,EAAMoO,OAAS,EAEvD,IAAKlO,EAAkB22iB,KAAUA,EAAK95T,UAAW,CAC7C,IAAIpmO,EAAW,IAAIkjhB,GAAap3hB,KAAKsvf,OACjC+kD,EAAW92iB,EAAMs5gB,cAAcliB,UAAUhpf,EAH7B,GAIZ8rhB,EAAmBz3hB,KAAKo4hB,4BAA4B76hB,EAAMs5gB,cAAelrgB,GAAQ,GACrFuI,EAASsjhB,wBAAwBj6hB,EAAMs5gB,cAAew9B,EAASrziB,QAASqziB,EAASpiiB,MAAOwlhB,GACxFz3hB,KAAKs0iB,+BAA+BF,EAAMp0iB,KAAMkU,EAAU2K,MAOlEutV,EAAU/wW,UAAUi5iB,+BAAiC,SAAUzxD,EAAWjza,EAAWk9M,EAAeq8P,GAE5Fr8P,EAAc+1N,qBAAqBC,IAAmBh2N,EAAc+1N,UAAUuR,iBACzE+0B,EAAYtmC,UAAUuR,eACpBtnO,EAAc+1N,UAAUwR,iBAAmB80B,EAAYtmC,UAAUwR,gBACjEr0f,KAAKukgB,eAAez3O,EAAc+1N,UAAUwR,eAAgBvnO,EAAeq8P,IAClFnphB,KAAKu0iB,8BAA8BznR,EAAc+1N,UAAUwR,eAAgBzkb,EAAWk9M,EAAeq8P,GAGrGnphB,KAAKw0iB,mBAAmB3xD,EAAW/1N,EAAeq8P,IAQ1D/8K,EAAU/wW,UAAUo5iB,8BAAgC,SAAUC,EAAan3iB,EAAOshB,GAC9E,IAAK,IAAI1iB,EAAIu4iB,EAAYj0Q,SAAUtkS,EAAIu4iB,EAAYzgD,WAAWhR,aAAaxmf,OAAQN,IAAK,CAEpF,IAAK,IADD8xhB,EAAWymB,EAAYzgD,WAAWhR,aAAa9mf,GAC1ConB,EAAI,EAAGA,EAAI0qgB,EAAShrC,aAAaxmf,OAAQ8mB,IAC9CvjB,KAAK20iB,mCAAmC1mB,EAAShrC,aAAa1/d,GAAIhmB,EAAOshB,GAE7E,GAAIA,EAAIgke,UAAUuR,eAAiBp0f,KAAK6uiB,YAAY5gB,EAAUpvgB,EAAIgke,UAAUwR,gBACxE,OAGR,IAAIL,EAAQh0f,KAAK+4hB,qBAAqB2b,EAAYzgD,YAElDj0f,KAAK40iB,2BAA2B5gD,EAAOz2f,EAAOshB,IAMlDutV,EAAU/wW,UAAUk5iB,8BAAgC,SAAU7+C,EAAW9lb,EAAWryE,EAAOshB,GACvF,GAAIA,EAAIgke,UAAUuR,cAAe,CAC7B,IAAIsrC,EAAgB1/hB,KAAKs6hB,mBAAmB5kC,EAAW72e,EAAIgke,UAAUwR,gBACrE,GAAIqrC,EAAczrC,WAAW9vf,SAAS0a,EAAIgke,UAAUwR,gBAAiB,CACjE,IAAI8D,EAAYn4f,KAAK2/hB,gBAAgBjqC,EAAWgqC,GAC5CtnC,EAAUp4f,KAAK2/hB,gBAAgB9ghB,EAAIgke,UAAUwR,eAAgBqrC,GAC7D1/hB,KAAK6/hB,aAAaH,EAAe7ghB,EAAIgke,UAAUwR,gBAE3Cr0f,KAAKukgB,eAAem7B,EAAeniiB,EAAOshB,GAC1C7e,KAAK20iB,mCAAmCjV,EAAeniiB,EAAOshB,GAG1Ds5e,IAAcunC,EACd1/hB,KAAKw0iB,mBAAmBj3iB,EAAMslf,UAAWtlf,EAAOshB,GAGhD7e,KAAKy0iB,8BAA8Bt8C,EAAUjE,SAAU32f,EAAOshB,GAMtE7e,KAAK60iB,kCAAkCnV,EAAczrC,WAAYyrC,EAAetnC,EAAS76f,EAAOshB,QAIpG7e,KAAKy0iB,8BAA8B/U,EAAcxrC,SAAU32f,EAAOshB,OAGrE,CACD,IAAIokD,EAAOjjE,KAAKggiB,iBAAiBtqC,GACjC11f,KAAKy0iB,8BAA8Bxxe,EAAKixb,SAAU32f,EAAOshB,KAOjEutV,EAAU/wW,UAAUw5iB,kCAAoC,SAAU50e,EAAOk4b,EAAWC,EAAStrO,EAAeq8P,GACxG,IAAI2rB,EAAU90iB,KAAK4liB,YAAYztC,EAAUjE,SAAUiE,GAC/C48C,EAAQD,EAAU38C,EAAU7D,WAAWj/N,UACvC84Q,EAAcnuiB,KAAK4liB,YAAYxtC,EAAQlE,SAAUkE,GACjDg2C,EAAeD,EAAc/1C,EAAQ9D,WAAWj/N,UAChDy/Q,EAAU3G,IACV2G,EAAU3G,GAEV4G,EAAQ3G,IACR2G,EAAQ3G,GAER0G,EAAU90iB,KAAKo+hB,wBACf0W,EAAU90iB,KAAKo+hB,uBAEf2W,EAAQ/0iB,KAAKo+hB,wBACb2W,EAAQ/0iB,KAAKo+hB,uBAGjB,IAAK,IADDt/gB,EAAQmhD,EAAMgjb,aAAa1kf,QAAQ65f,EAAQlE,UACtC/3f,EAAI8jE,EAAMgjb,aAAa1kf,QAAQ45f,EAAUjE,UAAW/3f,GAAK2iB,EAAO3iB,IAErE,IAAK,IADDukE,EAAMT,EAAMgjb,aAAa9mf,GACpBonB,EAAI,EAAGA,EAAIm9C,EAAIuib,aAAaxmf,OAAQ8mB,IAAK,CAC9C,IAAI0/C,EAAOvC,EAAIuib,aAAa1/d,GACxB/W,EAAOxM,KAAK4liB,YAAYlle,EAAKuC,GAC7B0nb,GAAcltd,MAAMq3gB,EAAS,IAAMnqD,GAAcltd,MAAMjxB,EAAM,IAC7Dm+e,GAAcltd,MAAMjxB,EAAM,GAAKm+e,GAAcltd,MAAMs3gB,EAAO,IAC1D/0iB,KAAK20iB,mCAAmC1xe,EAAM6pN,EAAeq8P,KAS7E/8K,EAAU/wW,UAAUm5iB,mBAAqB,SAAU3xD,EAAWtlf,EAAOshB,GACjE,GAAIgke,IAActlf,EAAMslf,WAAaA,IAAchke,EAAIgke,WAIvD,GAAIhke,EAAIgke,YAAcA,GAAatlf,EAAMslf,YAAcA,GAA4B,IAAfhke,EAAIlT,OAAxE,CAGA,IAAI6qf,EAAc,EACd/5f,EAASuD,KAAK23hB,mBAAmB90C,GACrC,GAAIA,IAActlf,EAAMslf,UAAW,CAC/B2T,EAAcj5f,EAAMoO,OAGpB,GADgB3L,KAAKg1iB,mBAAmBnyD,EAAWtlf,EAAOshB,EAAKpiB,GAE3D,OAGR,IAAI06gB,GAA2E,IAAzDt0B,EAAUI,aAAa1kf,QAAQhB,EAAMs5gB,eACvDh0B,EAAUI,aAAa1kf,QAAQhB,EAAMs5gB,eAAiB,EACtD22B,GAAuE,IAAvD3qD,EAAUI,aAAa1kf,QAAQsgB,EAAIg4f,eACnDh0B,EAAUI,aAAa1kf,QAAQsgB,EAAIg4f,eAAiBh0B,EAAUI,aAAaxmf,OAAS,EACpF4jgB,EAAYxhf,EAAIlT,OAChBk3e,IAAchke,EAAIgke,YAClBwd,EAAY5jgB,GAGhB,IAAK,IADDw4iB,GAAuB,EAClB94iB,EAAIg7gB,EAAiBh7gB,GAAKqxiB,EAAerxiB,IAAK,CACnD,IAAIkigB,EAAaxb,EAAUI,aAAa9mf,GACpCA,IAAMg7gB,IACN3gB,EAAcx2f,KAAK45hB,mBAAmBv7B,IAGtCgC,EADAhC,IAAex/e,EAAIg4f,cACPh4f,EAAIlT,OAGJ3L,KAAK64hB,cAAcx6B,GAGnC,IAAK,IADDv/e,EAAQ,EACHyE,EAAI,EAAGA,EAAI86e,EAAWjkf,SAAS3d,OAAQ8mB,IAAK,CACjD,IAAI6hI,EAASi5W,EAAWjkf,SAASmJ,GACjC,GAAIize,GAAe13e,EAAQsmI,EAAO3oJ,OAC9BqiB,GAASsmI,EAAO3oJ,WADpB,CAIA,GAAI2oJ,aAAkBkmW,IAAwC,IAArBlmW,EAAOmmW,WACzCZ,GAAcU,uBAAuBjmW,GAAS,CACjD,IAAI+1Y,EAAa19hB,EAAkB2nJ,EAAO24W,gBACtC34W,EAAOomW,SAAWpmW,EAAO24W,eAC7B,GACIj/e,GAASsmI,EAAO3oJ,OAChB2oJ,EAASA,EAAOusK,SAChBx1T,WACMsB,EAAkB2nJ,IAAWA,IAAW+1Y,GAClD8Z,GAAuB,EAE3B,GAAI7vZ,aAAkBkmW,IAAwC,IAArBlmW,EAAOmmW,WACzCZ,GAAcU,uBAAuBjmW,IAAW6vZ,EAAsB,CACzE,IAAIC,EAAc9vZ,EAAOqmW,WACzB,GACIzrf,KAAKg+e,gBAAgBwyC,cAAc0kB,EAAYl3D,iBAC/Ck3D,EAAcA,EAAYvjP,iBACnBujP,aAAuB5pD,KAKtC,GAHIlmW,aAAkBovW,IAClBx0f,KAAKg+e,gBAAgBwyC,cAAcprY,EAAO44V,iBAE1Cvgf,EAAkB2nJ,IAAWi7W,GAAavhf,EAAQsmI,EAAO3oJ,OACzD,MAEJqiB,GAASsmI,EAAO3oJ,SAGxB,GAAIoiB,EAAIgke,YAAcA,EAAtB,CAGA,IAAImR,EAAQh0f,KAAK+4hB,qBAAqBl2C,GACjCplf,EAAkBu2f,IACnBh0f,KAAK40iB,2BAA2B5gD,EAAOz2f,EAAOshB,UA5E9C7e,KAAKm1iB,2BAA2BtyD,EAAW7if,OA+EnDosW,EAAU/wW,UAAU25iB,mBAAqB,SAAUZ,EAAMzK,EAAUC,EAAQntiB,GACvE,IAAIwV,EAAQ,EACRukf,EAAcmzC,EAASh+hB,OACvBypiB,EAAiBzL,EAAS9yB,cAAcliB,UAAU6B,EAAavkf,GACnEA,EAAQmjiB,EAAenjiB,MACvB,IAAImzI,EAASgwZ,EAAep0iB,QAC5B,GAAIvD,EAAkB2nJ,GAAS,CACJukZ,EAAS9mD,UAAUI,aAAa1kf,QAAQoriB,EAAS9yB,eACxE,GAAI8yB,EAAS9yB,cAAcpZ,aAGvB,OAFAr4W,EAASukZ,EAAS9yB,cAAcpZ,aAAarjf,SAASuvhB,EAAS9yB,cAAcpZ,aAAarjf,SAAS3d,OAAS,GAC5GuD,KAAKg+e,gBAAgBwH,WAAWpgW,EAAO44V,kBAChC,EAGf,GAAIwY,EAAc/5f,EAAQ,CACtB,GAAIuD,KAAKs6O,QAAS,CACd,GAAIl1F,aAAkBovW,IAAmBpvW,aAAkBkmW,KAC9B,IAArBlmW,EAAOmmW,WAAwC,IAArBnmW,EAAOmmW,WAAmB,CACxD,IAAI2S,EAAel+f,KAAKuviB,uBAAuBnqZ,GAC3B,IAAhBoxW,GAAqB0H,IACrB94W,EAAS84W,GAEbl+f,KAAKg+e,gBAAgBwH,WAAWpgW,EAAO44V,sBAGlCvgf,EAAkBuC,KAAKuviB,uBAAuBnqZ,IAGzC3nJ,EAAkBuC,KAAKwviB,mBAAmBpqZ,IAIhDplJ,KAAKg+e,gBAAgBwH,WAAW4uD,EAAKp2D,iBAHrCh+e,KAAKg+e,gBAAgBwH,WAAWxlf,KAAKwviB,mBAAmBpqZ,GAAQ44V,iBAHhEh+e,KAAKg+e,gBAAgBwH,WAAWxlf,KAAKuviB,uBAAuBnqZ,GAAQ44V,iBAS5E,OAAO,EAGH/re,IAAUmzI,EAAO3oJ,QAAWgB,EAAkB2nJ,EAAOusK,UAGhDvsK,aAAkBovW,GACvBx0f,KAAKg+e,gBAAgBwH,WAAWpgW,EAAO44V,iBAElC54V,aAAkBkmW,IACvBtrf,KAAKg+e,gBAAgBwH,WAAWxlf,KAAKq1iB,mCAAmCjwZ,IANxEplJ,KAAKg+e,gBAAgBwH,WAAWxlf,KAAKs1iB,4BAA4BlwZ,SAWzE,GAAI3oJ,IAAWmtiB,EAAOj+hB,OAalB,OAZIy5I,aAAkBovW,IAAkBpvW,aAAkBkmW,GACtDtrf,KAAKg+e,gBAAgBwH,WAAWpgW,EAAO44V,iBAEjCvgf,EAAkB2nJ,GAOxBplJ,KAAKg+e,gBAAgBwH,WAAW4uD,EAAKp2D,iBALhCvgf,EADL2nJ,EAASplJ,KAAKuviB,uBAAuBnqZ,KAEjCplJ,KAAKg+e,gBAAgBwH,WAAWpgW,EAAO44V,kBAMxC,EAGf,OAAO,GAKX5xI,EAAU/wW,UAAUu5iB,2BAA6B,SAAU5gD,EAAOz2f,EAAOshB,GACjEm1e,aAAiBlR,GACjB9if,KAAKw0iB,mBAAmBxgD,EAAOz2f,EAAOshB,GAGtC7e,KAAKu1iB,0BAA0BvhD,EAAOz2f,EAAOshB,IAMrDutV,EAAU/wW,UAAUk6iB,0BAA4B,SAAUt1e,EAAO1iE,EAAOshB,GACpE,IAAK,IAAI1iB,EAAI,EAAGA,EAAI8jE,EAAMgjb,aAAaxmf,OAAQN,IAAK,CAEhD,IAAK,IADDukE,EAAMT,EAAMgjb,aAAa9mf,GACpBonB,EAAI,EAAGA,EAAIm9C,EAAIuib,aAAaxmf,OAAQ8mB,IACzCvjB,KAAK20iB,mCAAmCj0e,EAAIuib,aAAa1/d,GAAIhmB,EAAOshB,GAExE,GAAIA,EAAIgke,UAAUuR,eAAiBp0f,KAAK6uiB,YAAYnue,EAAK7hD,EAAIgke,UAAUwR,gBACnE,OAGR,IAAIqiB,EAAW12gB,KAAK+4hB,qBAAqB94d,GAEzCjgE,KAAK40iB,2BAA2Bl+B,EAAUn5gB,EAAOshB,IAMrDutV,EAAU/wW,UAAUs5iB,mCAAqC,SAAU1xe,EAAM1lE,EAAOshB,GAC5E,IAAK,IAAI1iB,EAAI,EAAGA,EAAI8mE,EAAKggb,aAAaxmf,OAAQN,IAC1C6D,KAAK40iB,2BAA2B3xe,EAAKggb,aAAa9mf,GAAIoB,EAAOshB,IAMrEutV,EAAU/wW,UAAU85iB,2BAA6B,SAAUtyD,EAAWjza,GAClE,IAAK,IAAIzzE,EAAI,EAAGA,EAAI0mf,EAAUI,aAAaxmf,OAAQN,IAE/C,IAAK,IADD8xiB,EAAaprD,EAAUI,aAAa9mf,GAC/BonB,EAAI,EAAGA,EAAI0qhB,EAAW7zhB,SAAS3d,OAAQ8mB,IAAK,CACjD,IAAIviB,EAAUitiB,EAAW7zhB,SAASmJ,GAC5BviB,aAAmByzf,IAAmBzzf,aAAmBsqf,IAC3D17a,EAAUoua,gBAAgBwyC,cAAcxvhB,EAAQg9e,mBAShE5xI,EAAU/wW,UAAUi6iB,4BAA8B,SAAUlwZ,GACxD,IAAI2nZ,EAAc/siB,KAAKwviB,mBAAmBpqZ,GAC1C,GAAI3nJ,EAAkBsviB,GAClB,OAAO3nZ,EAAO44V,gBAElB,IAAIyN,OAAatwf,EAMjB,OALI4xiB,aAAuBzhD,IACM,IAAzBG,EAAWF,YACXE,EAAashD,GAGjBtviB,EAAkBguf,GACXshD,EAAY/uD,gBAGZh+e,KAAKq1iB,mCAAmC5pD,IAOvDr/I,EAAU/wW,UAAUg6iB,mCAAqC,SAAU5pD,GAC/D,IAAIshD,EAActhD,EACdd,GAAcU,uBAAuBI,KAEjCshD,EADAtviB,EAAkBguf,EAAWsS,gBACftS,EAAWD,SAGXC,EAAWsS,gBAGjC,IAAI27B,OAAkBv+hB,EAMtB,OALKsC,EAAkBsviB,EAAYp7O,YAE/B+nO,EAAkB15hB,KAAK25hB,oBAAoBoT,EAAYp7O,WAGvDl0T,EAAkBi8hB,GACXqT,EAAY/uD,gBAEhB07C,EAAgB17C,iBAM3B5xI,EAAU/wW,UAAU+ohB,yBAA2B,SAAUzyB,EAAQ79d,GAC7D,GAAIr2B,EAAkBuC,KAAKzC,QAAUyC,KAAKs6O,SAAW78O,EAAkBk0f,GACnE,OAAO,EAEX,IAAI74b,GAAa,EACjB,EAAG,CACC,GAAI94D,KAAKo9gB,gBAAgB32S,YAAYkrR,GAAS,CAC1C,IAAI6jD,OAAQ,EAER7jD,aAAkBwB,IAClBqiD,EAAQx1iB,KAAKsvf,MAAM1/a,UAAUkvM,OAAO6yO,GAC7B3xf,KAAKsvf,MAAM1/a,UAAU8uM,QAAQizO,KAGpC6jD,EAAQ7jD,EAAO3kf,EACR2kf,EAAO5kf,GAElB,IAAI0wgB,EAAaz9gB,KAAKo9gB,gBAAgB11gB,IAAIiqf,GAC1C74b,EAAa2kd,EAAWjxgB,MAAQsnB,EAAM/mB,GAAKyoiB,GAAS1hhB,EAAM9mB,GACtDwoiB,EAAQ7jD,EAAO57e,QAAU+d,EAAM9mB,GAAKywgB,EAAWjxgB,KAAOixgB,EAAWzngB,OAAS8d,EAAM/mB,EAExF4kf,EAAUA,aAAkBwB,GAAcxB,EAAO9O,UAAY8O,EAAOzO,uBAC9Dzlf,EAAkBk0f,KAAY74b,GACxC,OAAOA,GAMXszS,EAAU/wW,UAAUo6iB,6BAA+B,WAC/C,IAAIz5gB,EAAS,IAAI+md,GAEjB,OADA/if,KAAK49e,gBAAgB2zC,aAAav1f,GAC3BA,GAOXowU,EAAU/wW,UAAUq6iB,wBAA0B,SAAU7yD,EAAWkb,EAAgBvS,EAAUmqD,EAAe35gB,GACxG,IAAIo4gB,EAAOvxD,EACX,GAAIuxD,IAAS5oD,EAAS19b,KAAK+0b,UAEvB,OADA8yD,GAAgB,GACPC,YAAa,4BAA6BD,cAAiBA,EAAe35gB,OAAUA,GAKjG,IAAK,IAHD45gB,EAAc,GACdzkS,EAAYijS,EAAKnxD,aAAa1kf,QAAQw/f,EAAejwc,MACrD77C,EAAQmiiB,EAAKnxD,aAAa9xO,GAAW/2P,SAAS7b,QAAQw/f,GACjDx6e,EAAI4tP,EAAW5tP,EAAI6whB,EAAKnxD,aAAaxmf,OAAQ8mB,IAAK,CACvD,IAAI86e,EAAa+1C,EAAKnxD,aAAa1/d,GAC/BA,IAAM4tP,IACNl/P,GAAS,GAEb,IAAK,IAAI9V,EAAI8V,EAAQ,EAAG9V,EAAIkigB,EAAWjkf,SAAS3d,OAAQN,IAAK,CACzD,IAAIipJ,EAASi5W,EAAWjkf,SAASje,GACjC,GAAIipJ,IAAWomW,EACX,OAASoqD,YAAeA,EAAaD,cAAiBA,EAAe35gB,OAAUA,GAEnF,GAAIopH,aAAkBovW,GAClBohD,GAAexwZ,EAAO34H,KACtBuP,EAASopH,EAAO44V,oBAEf,CAAA,KAAI54V,aAAkBkmW,IAavB,OADAqqD,GAAgB,GACPC,YAAe,4BAA6BD,cAAiBA,EAAe35gB,OAAUA,GAZ3FopH,aAAkBkmW,IAAwC,IAArBlmW,EAAOmmW,YACxC9tf,EAAkB2nJ,EAAOomW,YAEzBv5e,EADAxU,EAAkB2nJ,EAAO24W,gBACjBM,EAAWjkf,SAAS7b,QAAQ6mJ,EAAOomW,UAGnC6S,EAAWjkf,SAAS7b,QAAQ6mJ,EAAO24W,mBAU/D,OAAS63C,YAAeA,EAAaD,cAAiBA,EAAe35gB,OAAUA,IAMnFowU,EAAU/wW,UAAUgqhB,yBAA2B,SAAUzB,EAAanC,GAClE,IAAI1hhB,EAAQC,KACR2xf,EAAS3xf,KAAKo6e,OAAOiqC,cAAcT,GACvC,IAAKnmhB,EAAkBk0f,GAAS,CAC5B,IAAIkyC,EAAiB7jiB,KAAK6qhB,oCAAoCl5B,EAAQiyB,GAEjEnmhB,EAAkBomiB,KACnB7jiB,KAAKo6e,OAAOsqC,+BAA+Bd,EAAa,GACxD5jhB,KAAKyjiB,oBAAoBI,GACzB1jiB,WAAW,WACHJ,EAAMq6e,SACNr6e,EAAMq6e,OAAOqnC,aAAeA,EAC5B1hhB,EAAMq6e,OAAO8H,cACbnif,EAAMq6e,OAAOqnC,cAAe,QAShDr1K,EAAU/wW,UAAU0oiB,YAAc,SAAUt4C,GACxC,IAAIv4b,EAAY,IAAIiyV,GAAUsmG,EAAYzrf,MACtCmzD,EAAOD,EAAU4te,eAUrB,OATI5te,EAAUywe,eAAelniB,OAAS,IACE,MAAhCy2D,EAAUywe,eAAe,KAAelmiB,EAAkB01D,IAAyB,IAAhBA,EAAK12D,OAIxE02D,GAAQ,IAAMD,EAAUywe,eAHxBxwe,EAAO,oBAMfD,EAAU5gD,UACH6gD,GAMXi5S,EAAU/wW,UAAU0vhB,6BAA+B,SAAUt/B,EAAYkG,EAAQ7wH,GAC7E,GAAI2qH,EAAY,CACZ,GAAIzrf,KAAKsvf,MAAM1U,mBACgE,UAA3E56e,KAAKsvf,MAAM1U,kBAAkBsnB,oBAAoBlhgB,QAAQ0D,MAAM4xC,QAC/D,OAECt2C,KAAK61iB,iBACN71iB,KAAK61iB,eAAiB10iB,EAAc,OAASkC,UAAW,iBACxDrD,KAAKo6e,OAAOimC,gBAAgB1+gB,YAAY3B,KAAK61iB,iBAEjD71iB,KAAK61iB,eAAenxiB,MAAM4xC,QAAU,QACpC,IAAI+uE,EAAO,IAAI7N,GAAK,iBAAkBx3G,KAAKsvf,MAAM3xE,eACjDt4T,EAAK1N,UAAU33G,KAAKsvf,MAAMthf,QAC1B,IAAI8niB,EAAczwb,EAAKtxC,YAAY,wBAC/B/zE,KAAKsvf,MAAMljB,gCACX0pE,EAAc,QAAUA,GAE5B,IAAIhS,EAAW9jiB,KAAK+jiB,YAAYt4C,GAChCzrf,KAAK61iB,eAAe7ziB,UAAY8hiB,EAAW,WAAagS,EAAc,OACtE,IAAIC,EAAY/1iB,KAAK8+Q,OAAO6yO,GAAU3xf,KAAKo6e,OAAOhsa,WAC9C6hF,EAAOjwJ,KAAKijR,QAAQ0uO,EAAO9O,WAC3Brse,EAAiBxW,KAAKo6e,OAAOimC,gBAAgBz0gB,wBAAwBoK,MAAQhW,KAAKo6e,OAAOimC,gBAAgBr0gB,WACzGQ,EAAOyjJ,EAAK00V,kBAAkB53e,EAAI+zX,EAAO9gY,KAAKo6e,OAAOhsa,WACpD5hE,EAAOxM,KAAK61iB,eAAexohB,YAAc,GAAM7W,IAChDhK,GAAgBxM,KAAK61iB,eAAexohB,aAAe7W,EAAiBhK,GAAS,IAEjF,IAAIwpiB,EAAQh2iB,KAAK6phB,WAAW55X,IAAS8lZ,EAAY/1iB,KAAK61iB,eAAenkgB,cACrEskgB,EAAQA,EAAQh2iB,KAAKo6e,OAAOimC,gBAAgBl0gB,UAAY6piB,EAAQA,EAAQrkD,EAAO57e,OAAS/V,KAAK61iB,eAAenkgB,aAC5G1xC,KAAKi2iB,YAAYzpiB,EAAMwpiB,GAClBv4iB,EAAkBuC,KAAKk2iB,eAAiBzqD,IAAezrf,KAAKk2iB,eAC7Dl2iB,KAAKm2iB,cAAcjiiB,UAAakC,EAAG5J,EAAM6J,EAAG2/hB,IAEhDh2iB,KAAKm2iB,cAAclyb,OACnBjkH,KAAKk2iB,aAAezqD,OAGpBzrf,KAAKmkgB,eAOb/3J,EAAU/wW,UAAU46iB,YAAc,SAAUlpiB,EAAGC,GACtChN,KAAKm2iB,gBACNn2iB,KAAKm2iB,cAAgB,IAAI30b,GAAMxhH,KAAK61iB,gBAChC9/hB,OAAQ,OACRC,MAAO,OACPosG,SAAUpiH,KAAKo6e,OAAOimC,gBAAgBhsgB,cACtCH,UAAYkC,EAAGrJ,EAAGsJ,EAAGrJ,OAQjCo/V,EAAU/wW,UAAU8ogB,YAAc,WAC9BnkgB,KAAKk2iB,kBAAe/6iB,EAChB6E,KAAKm2iB,gBACLn2iB,KAAKm2iB,cAAc50d,OACnBvhF,KAAKm2iB,cAAc7jiB,UACnBtS,KAAKm2iB,mBAAgBh7iB,EACrB6E,KAAK61iB,eAAenxiB,MAAM4xC,QAAU,SAO5C81T,EAAU/wW,UAAUwvhB,oCAAsC,SAAUl5B,EAAQykD,GACxE,IAAIhxZ,OAASjqJ,EACTuR,EAAM1M,KAAK8+Q,OAAO6yO,GAClB0kD,EAAgBr2iB,KAAK4qhB,iBAAiBj5B,GAC1C,KAAIykD,EAAeppiB,EAAIN,GAAO0piB,EAAeppiB,EAAIN,EAAMilf,EAAO57e,QACvDqgiB,EAAerpiB,EAAIspiB,GAAiBD,EAAerpiB,EAAIspiB,EAAgB1kD,EAAO9O,UAAU7se,OAD/F,CAIA,IAAIxJ,EAAOmlf,EAAO9O,UAAU91e,EACxBwkiB,EAAgBvxiB,KAAKwxiB,gBAAgB7/C,EAAQnlf,GACjDA,EAAO+kiB,EAAc/kiB,KACrB,IAAIxL,EAAUuwiB,EAAcvwiB,QAC5B,GAAIvD,EAAkBuD,GAAU,CAC5B,IAAIgV,EAAQhW,KAAKo6e,OAAOouB,WAAWC,sBAAsB9W,EAAO9O,UAAU7E,iBAC1E,GAAIo4D,EAAerpiB,GAAKspiB,EAAgBrgiB,GAASogiB,EAAerpiB,GAAKspiB,EAAgBrgiB,EAAO,CAExF,IAAIsgiB,KACAvqhB,EAAQ/rB,KAAKu2iB,mBAAmB5kD,EAAO9O,UAAWyzD,GAGtD,OAFAA,KACAA,OAAgBn7iB,EACT4wB,OAGV,CACD,GAAIqqhB,EAAerpiB,EAAIP,EAAOxL,EAAQy7B,OAAOjwB,KACzC,IAAK,IAAIrQ,EAAIw1f,EAAOv3e,SAAS7b,QAAQyC,GAAU7E,EAAIw1f,EAAOv3e,SAAS3d,SAC/DuE,EAAU2wf,EAAOv3e,SAASje,KACtBi6iB,EAAerpiB,EAAIP,EAAOxL,EAAQy7B,OAAOjwB,KAAOxL,EAAQgV,OAAS7Z,IAAMw1f,EAAOv3e,SAAS3d,OAAS,IAF7BN,IAKvEqQ,GAAQxL,EAAQy7B,OAAOjwB,KAAOxL,EAAQgV,MAG9CovI,EAASpkJ,EACLgV,EAAQhV,EAAQy7B,OAAOjwB,KAAOxL,EAAQgV,MAK1C,GAJIvY,EAAkB2nJ,EAAOusK,YAEzB37S,GAAShW,KAAKo6e,OAAOouB,WAAWC,sBAAsBrjX,EAAOt3F,KAAK+0b,UAAU7E,kBAE5Eo4D,EAAerpiB,GAAKP,EAAOwJ,EAAO,CAE9BsgiB,KACAvqhB,EAAQ/rB,KAAKw2iB,0BAA0BpxZ,EAAOt3F,KAAK+0b,UAAWz9V,EAAQkxZ,GAG1E,OAFAA,KACAA,OAAgBn7iB,EACT4wB,MASnBqgV,EAAU/wW,UAAUmpgB,kBAAoB,WACpC,IAAI/mgB,EAAkBuC,KAAK6e,KAA3B,CAGA,IAAI5M,EAAQ,EACRs5hB,EAAgBvriB,KAAK6e,IAAIg4f,cAAcliB,UAAU30f,KAAK6e,IAAIlT,OAAQsG,GACtEA,EAAQs5hB,EAAct5hB,MACtB,IAAImzI,EAASmmZ,EAAcvqiB,QACvBs1iB,KACAvqhB,OAAQ5wB,EACZ,GAAIsC,EAAkB2nJ,GAClBr5H,EAAQ/rB,KAAKu2iB,mBAAmBv2iB,KAAK6e,IAAIgke,UAAWyzD,OAEnD,CACD,IAAIzzD,EAAYz9V,EAAOt3F,KAAK+0b,UAC5B92d,EAAQ/rB,KAAKw2iB,0BAA0B3zD,EAAWz9V,EAAQkxZ,GAG9D,OADAA,KACOvqhB,IAKXqgV,EAAU/wW,UAAUk7iB,mBAAqB,SAAU1zD,EAAWyzD,GAC1D,IAAK,IAAIn6iB,EAAI,EAAGA,EAAI6D,KAAKo6e,OAAOxud,OAAOnvB,OAAQN,IAC3C,IAAsD,IAAlDm6iB,EAAc/3iB,QAAQyB,KAAKo6e,OAAOxud,OAAOzvB,MAAcsB,EAAkBuC,KAAKo6e,OAAOxud,OAAOzvB,GAAG4hgB,gBAAnG,CAIIu4C,EAAc9xiB,KAAKxE,KAAKo6e,OAAOxud,OAAOzvB,IAE1C,IAAI4vB,EAAQ/rB,KAAKq5gB,aAAar5gB,KAAKo6e,OAAOxud,OAAOzvB,IAEjD,IADA4vB,EAAQA,EAAM7b,OAAO0F,eACXjG,MAAM,eAAiB3P,KAAKy2iB,yBAAyBz2iB,KAAKo6e,OAAOxud,OAAOzvB,GAAI0mf,GAClF,OAAO7if,KAAKo6e,OAAOxud,OAAOzvB,KAWtCiwW,EAAU/wW,UAAUm7iB,0BAA4B,SAAU3zD,EAAWz9V,EAAQx5H,GACzE,IAAK,IAAIzvB,EAAI,EAAGA,EAAI6D,KAAKo6e,OAAOxud,OAAOnvB,OAAQN,IAC3C,IAA+C,IAA3CyvB,EAAOrtB,QAAQyB,KAAKo6e,OAAOxud,OAAOzvB,MAAcsB,EAAkBuC,KAAKo6e,OAAOxud,OAAOzvB,GAAG4hgB,gBAA5F,CAIInye,EAAOpnB,KAAKxE,KAAKo6e,OAAOxud,OAAOzvB,IAEnC,IAAIi9gB,EAAYp5gB,KAAKq5gB,aAAar5gB,KAAKo6e,OAAOxud,OAAOzvB,IAErD,IADAi9gB,EAAYA,EAAUlpgB,OAAO0F,eACfjG,MAAM,gBAAkB3P,KAAK02iB,sBAAsB12iB,KAAKo6e,OAAOxud,OAAOzvB,GAAIipJ,IAAWplJ,KAAKykgB,gBACpG,OAAOzkgB,KAAKo6e,OAAOxud,OAAOzvB,GAGlC,GAAI0mf,EAAUK,2BAA2BR,MAAgBG,aAAqBqP,IAC1E,OAAOlyf,KAAKw2iB,0BAA0B3zD,EAAUK,gBAAiB99V,EAAQx5H,IAOjFwgV,EAAU/wW,UAAUs7iB,SAAW,SAAUtyU,GACrC,GAAqB,KAAjBA,IAAuB5mO,EAAkB4mO,GAA7C,CAGA,IAAIpyN,GAAUA,MAAOoyN,GACjBp0E,EAAOjwJ,KAAKzC,MAAM0lR,QAAQhxQ,GAC1B2kiB,EAAY3kiB,EAAMA,MAAM1T,QAAQ,KAChCvB,EAAQiV,EAAMA,MAAMiS,UAAU,EAAG0yhB,GACrC3kiB,EAAMA,MAAQA,EAAMA,MAAMiS,UAAU0yhB,GAAWrniB,QAAQ,IAAK,IAC5D,IAAIo5e,EAAa14V,EAAKyhW,YAAY38d,SAAS/3B,EAAO,KAClD,OAAOgD,KAAK62iB,iBAAiBluD,EAAY12e,EAAMA,SAMnDm6V,EAAU/wW,UAAUw7iB,iBAAmB,SAAUllD,EAAQz9e,GACrD,GAAiB,KAAbA,IAAmBzW,EAAkByW,GAAzC,CAGA,IAAIjC,EAAQiC,EAAS3V,QAAQ,KACzBvB,EAAQkX,EAASgQ,UAAU,EAAGjS,GAClCiC,EAAWA,EAASgQ,UAAUjS,GAAO1C,QAAQ,IAAK,IAClD,IAAIhP,EAAOoxf,EAQX,MADA1/e,EAAQ8iB,SAAS/3B,EAAO,MACX,GAAKiV,EAAQ0/e,EAAO1O,aAAaxmf,QAmB1C,OAAO8D,EAlBP,IAAIF,EAAQsxf,EAAO1O,gBACnB,KAAI/ue,EAAS3V,QAAQ,MAAQ,GAazB,OAAO8B,EAZP,GAAIA,aAAiByif,GAIjB,OAHI5ue,EAAS3V,QAAQ,MAAQ,IACzB2V,EAAW,KAER7T,EAEX,GAAIA,aAAiBkyf,GAAa,CAE9B,OADevyf,KAAK62iB,iBAAiBx2iB,EAAO6T,GAWxD,OAAO3T,IAMX6rW,EAAU/wW,UAAUq7iB,sBAAwB,SAAUjrD,EAAYrmW,GAC9D,QAAK3nJ,EAAkBguf,EAAWD,WAAc/tf,EAAkBguf,EAAWsS,kBACrE/9f,KAAKsriB,oBAAoB7/C,EAAWsS,eAAgB34W,KAC7CplJ,KAAKwriB,mBAAmB//C,EAAWD,SAAUpmW,IAShEgnN,EAAU/wW,UAAUo7iB,yBAA2B,SAAUhrD,EAAY5I,GACjE,IAAKplf,EAAkBguf,EAAWD,YAAc/tf,EAAkBguf,EAAWsS,gBAAiB,CAC1F,IAAI+4C,EAAiBrrD,EAAWsS,eAAejwc,KAAK+0b,UACpD,GAAI4I,EAAWsS,eAAejwc,KAAK+0b,YAAcA,GAC1C7if,KAAKu4hB,cAAcue,EAAgBj0D,GAAY,CAElD,OADuB4I,EAAWD,SAAS19b,KAAK+0b,YACnBA,GAAa7if,KAAKw4hB,aAAase,EAAgBj0D,IAGpF,OAAO,GAMXz2I,EAAU/wW,UAAUopgB,aAAe,WAC/B,GAAIzkgB,KAAKzC,MAAMslf,UAAUvoQ,WAAat6O,KAAK6e,IAAIgke,UAAUvoQ,UACrD,OAAO,EAEX,IAAIwyC,EAAgB9sR,KAAKzC,MACrB4rhB,EAAcnphB,KAAK6e,IAClB7e,KAAKigiB,YACNnzQ,EAAgB9sR,KAAK6e,IACrBsqgB,EAAcnphB,KAAKzC,OAEvB,IAAIq3f,EAAgB,EAChB6lC,EAAa3tQ,EAAc+1N,UAAU8R,UAAU7nO,EAAcnhR,OAAQipf,GACrExvW,EAASq1Y,EAAWz5hB,SACxB4zf,EAAgB6lC,EAAWxohB,SACLmzI,EAAO3oJ,SACzB2oJ,EAASplJ,KAAKo7hB,0BAA0Bh2Y,EAAQwvW,IAGpD,IAAI01C,GADJ7P,EAAatR,EAAYtmC,UAAU8R,UAAUw0B,EAAYx9gB,OAAQipf,IACtC5zf,QAE3B,GADA4zf,EAAgB6lC,EAAWxohB,MACvBmzI,aAAkBkmW,IAAwC,IAArBlmW,EAAOmmW,WACzC++C,aAAqBh/C,IAA2C,IAAxBg/C,EAAU/+C,WAAmBnmW,EAAO24W,eAAgB,CAC/F,IAAIivC,EAAa5nZ,EAAO24W,eAAepsM,SACvC,GAAIq7O,aAAsBv4C,IAAmBu4C,EAAWr7O,WAAa24O,EACjE,OAAO,EAGf,OAAO,GAMXl+L,EAAU/wW,UAAUkqhB,eAAiB,WACjC,IAEIwxB,EAFa/2iB,KAAKo6e,OAAOquC,oBAEGn1B,qBADhB,KAEZxmO,EAAgB9sR,KAAK+piB,gBAAgBgN,GACrC5tB,EAAcnphB,KAAK+piB,gBAAgBgN,GACvC/2iB,KAAKw+M,YAAYsuE,EAAeq8P,GAChCnphB,KAAKg3iB,kBAAkBh3iB,KAAKo6e,OAAOquC,qBACnCzohB,KAAKkhiB,oBAAsB,QAM/B90L,EAAU/wW,UAAU27iB,kBAAoB,SAAU/I,GAC9C,IAAIj4hB,EAAQi4hB,EAAW7zhB,SAAS,GAAGpE,MAC/BxJ,EAAOxM,KAAKo6e,OAAOmuC,aAAa0lB,GAChCvhiB,EAAMuhiB,EAAWprD,UAAU71e,EAC/BhN,KAAKqkiB,sBAAsB4J,EAAYj4hB,EAAOxJ,EAAME,GACpD1M,KAAKo6e,OAAO8qC,oBAAqB,GAKrC94K,EAAU/wW,UAAU47iB,gBAAkB,SAAU5E,GAC5CryiB,KAAKsvf,MAAM9jB,mBAAoB,EAC/B,IAAI1+M,EAAgB9sR,KAAKzC,MACrB4rhB,EAAcnphB,KAAK6e,IAClB7e,KAAKigiB,YACNnzQ,EAAgB9sR,KAAK6e,IACrBsqgB,EAAcnphB,KAAKzC,OAEvB,IAAI6nJ,EAAS,KACTnzI,EAAQ,EACR4we,EAAY/1N,EAAc+1N,UAC9B,GAAIA,IAAcsmC,EAAYtmC,WACvB/1N,EAAcnhR,OAAS,IAAMw9gB,EAAYx9gB,OAAQ,CACpD,IAAIkuhB,EAAYh3C,EAAU8R,UAAUw0B,EAAYx9gB,OAAQsG,GACxDmzI,EAASy0Y,EAAU74hB,QACnBiR,EAAQ4nhB,EAAU5nhB,MAEtB,GAAImzI,aAAkBqvW,GAAiB,CACnC,IAAIz+e,EAAQovI,EAAOpvI,MACfD,EAASqvI,EAAOrvI,OAKpB,GAJAqvI,EAAOpvI,MAAQq8hB,EAAYr8hB,MAC3BovI,EAAOrvI,OAASs8hB,EAAYt8hB,OAC5Bs8hB,EAAYr8hB,MAAQA,EACpBq8hB,EAAYt8hB,OAASA,EACJ,MAAb8se,GAAkD,MAA7BA,EAAUK,iBAA2Bljf,KAAKsvf,MAAM5U,aAAc,CACnF,IAAIvpO,EAAY0xO,EAAUI,aAAa1kf,QAAQ6mJ,EAAOt3F,MAClD69J,EAAevmE,EAAOt3F,KAAK1zC,SAAS7b,QAAQ6mJ,GAChDplJ,KAAKo6e,OAAOvpb,OAAOwmd,kBAAkBx0B,EAAW1xO,EAAWxlD,GAC3D3rN,KAAKikiB,oBAAmB,MAQpC73L,EAAU/wW,UAAU67iB,wBAA0B,SAAUj3e,EAAOk4b,EAAWC,GAMtE,IAAK,IALD++C,EAAmBh/C,EAAUxwL,YAC7ByvO,EAAiBh/C,EAAQzwL,YAAcywL,EAAQ9D,WAAWn8N,WAAa,EACvEk/Q,EAAgBl/C,EAAUjE,SAASjif,MACnCw8hB,EAAcr2C,EAAQlE,SAASjif,MAC/B6vD,KACK3lE,EAAI,EAAGA,EAAI8jE,EAAMgjb,aAAaxmf,OAAQN,IAAK,CAChD,IAAIukE,EAAMT,EAAMgjb,aAAa9mf,GAC7B,GAAIukE,EAAIzuD,OAASoliB,GAAiB32e,EAAIzuD,OAASw8hB,EAC3C,IAAK,IAAIlrhB,EAAI,EAAGA,EAAIm9C,EAAIuib,aAAaxmf,OAAQ8mB,IAAK,CAC9C,IAAI0/C,EAAOvC,EAAIuib,aAAa1/d,GACxB0/C,EAAK0kQ,aAAewvO,GAAoBl0e,EAAK0kQ,aAAeyvO,GAC5Dt1e,EAAMt9D,KAAKy+D,GAIvB,GAAIvC,EAAIzuD,MAAQw8hB,EACZ,MAGR,OAAO3se,GAMXsqS,EAAU/wW,UAAUkE,KAAO,WACnBS,KAAKs6O,SAGTt6O,KAAKs3iB,qBAAoB,IAK7BlrM,EAAU/wW,UAAUi8iB,oBAAsB,SAAUC,GAEhD,IAAIzqR,EAAgB9sR,KAAKzC,MACrB4rhB,EAAcnphB,KAAK6e,IAClB7e,KAAKigiB,YACNnzQ,EAAgB9sR,KAAK6e,IACrBsqgB,EAAcnphB,KAAKzC,OAGvB,IAAIiD,EAAWR,KAAKsvf,MAAMhN,iBAAiBvgf,MAAM+qR,EAAc+pP,cAAe/pP,EAAcnhR,OAAQw9gB,EAAYtS,cAAesS,EAAYx9gB,QAAQ,GAE/I3L,KAAKsvf,MAAM5U,eACX16e,KAAKsvf,MAAM5U,aAAa0pB,WAAav0c,KAAKC,UAAUtvD,IAExD,IAAImsM,EAAO3sM,KAAKw3iB,WAAWziB,UAAUv0hB,GACrCR,KAAKgkiB,gBAAgBr3V,GACjB4qW,GACAv3iB,KAAKsvf,MAAM5U,aAAa+8D,UAAUz3iB,MAEtCA,KAAKo6e,OAAO8H,eAMhB91I,EAAU/wW,UAAU2oiB,gBAAkB,SAAUxve,GAC5C34D,OAAO4qhB,eAAeixB,kBACtB,IAAIx2iB,EAAMV,SAASW,cAAc,OACjCD,EAAIwD,MAAM8H,KAAO,WACjBtL,EAAIwD,MAAMgI,IAAM,WAChBxL,EAAIc,UAAYwyD,EAChBh0D,SAASuL,KAAKpK,YAAYT,GAC1B,IAAI6wB,EAAQvxB,SAASm3iB,cACrB5lhB,EAAM6lhB,mBAAmB12iB,GACzBrF,OAAO4qhB,eAAeoxB,SAAS9lhB,GAC/B,IAAI+lhB,GAAc,EAClB,IACIA,EAAct3iB,SAASu3iB,YAAY,QAEvC,MAAOl3iB,YAIHhF,OAAO4qhB,eAAeixB,kBACtBx2iB,EAAIT,WAAW6E,YAAYpE,GAC3BlB,KAAKo6e,OAAOimC,gBAAgBn+gB,QAEhC,OAAO41iB,GAOX1rM,EAAU/wW,UAAUungB,UAAY,WAE5B,IAAI3yW,EAAQxyJ,EAAkBuC,KAAKo6e,OAAO9mP,aAAyCtzP,KAAKo6e,OAAO44B,qBAAtChzgB,KAAKo6e,OAAO9mP,YACrE,KAAI71P,EAAkBwyJ,IAASjwJ,KAAKo6e,OAAO4nC,qBAAuBhihB,KAAKsvf,MAAMo0B,wBAA0B1jhB,KAAKsvf,MAAMnjB,mBAAmBw2C,uBAArI,CAGA,IAAIn2gB,EAAOyjJ,EAAK00V,kBAAkB53e,EAC9BN,EAAQwjJ,EAAK00V,kBAAkB3ue,MAAQhW,KAAKo6e,OAAOhsa,WAAa5hE,EACpE,IAAKxM,KAAKsvf,MAAMo0B,yBAA2B1jhB,KAAKsvf,MAAMnjB,mBAAmBw2C,sBAErE,IAAI3ihB,KAAKs6O,SAAat6O,KAAKsvf,MAAMzR,iBAAkB79e,KAAKsvf,MAAMhjB,uBASrDtse,KAAKolhB,kBAAoBplhB,KAAKsvf,MAAMo0B,uBACzC1jhB,KAAK2igB,MAAMj+f,MAAM4xC,QAAU,SAGM,UAA7Bt2C,KAAK2igB,MAAMj+f,MAAM4xC,SAAuB74C,EAAkBuC,SAC1DA,KAAK2igB,MAAMj+f,MAAM4xC,QAAU,YAdoD,CACnF,IAAI0hgB,EAAYjjhB,SAAS/0B,KAAK2igB,MAAMj+f,MAAM8H,KAAK+C,QAAQ,KAAM,IAAK,IAE9DvP,KAAK2igB,MAAMj+f,MAAM4xC,QADjB0hgB,EAAYxriB,GAAQwriB,EAAYvriB,EACL,OAGA,QAYvC,GAAKhP,EAAkBuC,QAASA,KAAKo6e,OAAOqnC,cAAiBzhhB,KAAKsvf,MAAMzR,eAwBpE79e,KAAKo6e,OAAO3ib,WAAW/yD,MAAM4xC,QAAU,OACvCt2C,KAAKo6e,OAAO9qX,SAAS5qH,MAAM4xC,QAAU,WAzB+C,CACpF,IAAI2hgB,EAAiBljhB,SAAS/0B,KAAKo6e,OAAO3ib,WAAW/yD,MAAM8H,KAAK+C,QAAQ,KAAM,IAAK,IAAM,GACrF2oiB,EAAenjhB,SAAS/0B,KAAKo6e,OAAO9qX,SAAS5qH,MAAM8H,KAAK+C,QAAQ,KAAM,IAAK,IAAM,GACjF0xQ,EAASjhR,KAAKm4iB,iBAAiBn4iB,KAAKzC,OACpC0jR,IAEIjhR,KAAKo6e,OAAO9qX,SAAS5qH,MAAM4xC,QAD3B4hgB,EAAe1riB,GAAQ0riB,EAAezriB,EACD,OAGA,QAEpCzM,KAAKs6O,UACN9tO,EAAOy0Q,EAAO0jO,kBAAkB53e,EAChCN,EAAQw0Q,EAAO0jO,kBAAkB3ue,MAAQhW,KAAKo6e,OAAOhsa,WAAa5hE,GAGlExM,KAAKo6e,OAAO3ib,WAAW/yD,MAAM4xC,QAD7B2hgB,EAAiBzriB,GAAQyriB,EAAiBxriB,EACH,OAGA,YAavD2/V,EAAU/wW,UAAUsrhB,4BAA8B,SAAU10gB,GACxDjS,KAAKo6e,OAAO4oC,YAAY9ghB,QACxB,IAAI7B,EAAQL,KAAKo6e,OAAO4oC,YAAYzxgB,WAAWvR,KAAKo6e,OAAO4oC,YAAYzxgB,WAAW9U,OAAS,GAC3F,GAAI4D,EAAO,CACP,IAAI0xB,EAAQvxB,SAASm3iB,cACrB5lhB,EAAMqmhB,SAAS/3iB,EAAO4R,GACtB8f,EAAMmmR,UAAS,GACfr8S,OAAO4qhB,eAAeixB,kBACtB77iB,OAAO4qhB,eAAeoxB,SAAS9lhB,KAOvCq6U,EAAU/wW,UAAU2shB,UAAY,WAC5BhohB,KAAK2igB,MAAQxhgB,EAAc,OACvBoC,OAAQ,oBACRF,UAAW,4CAEfrD,KAAKo6e,OAAOimC,gBAAgB1+gB,YAAY3B,KAAK2igB,QAMjDv2J,EAAU/wW,UAAUqlhB,oBAAsB,WACtC,IAAIywB,EAAgBnxiB,KAAK6e,IAAI6O,SACzBuiI,EAAOjwJ,KAAKm4iB,iBAAiBn4iB,KAAK6e,KACtC,GAAIoxI,EAAM,CACNjwJ,KAAK2igB,MAAMj+f,MAAM8H,KAAOyjJ,EAAK00V,kBAAkB53e,EAAKV,KAAKoxB,MAAM0zgB,EAAcpkiB,GAAK/M,KAAKo6e,OAAOhsa,WAAc,KAC5G,IAAIm7c,EAAYvphB,KAAKwphB,gBAAgBxphB,KAAKsvf,MAAM1/a,UAAU/wD,KACtDssO,EAAYo+R,EAAUp+R,UAEtBivP,GADcmvC,EAAUxzgB,OACf/V,KAAKo6e,QAEd3/D,GAAWxqR,EAAK00V,kBAAkB33e,EAAIote,EAAOkuC,SAAWtohB,KAAKo6e,OAAOlvQ,MAAM3sO,QAAQ0xJ,GAAQ,IAAMjwJ,KAAKo6e,OAAOhsa,WAAagsa,EAAOkuC,SAAWtohB,KAAKo6e,OAAOlvQ,MAAM3sO,QAAQ0xJ,GAAQ,GACjLjwJ,KAAK2igB,MAAMj+f,MAAMgI,IAAM+ta,EAAWpua,KAAKoxB,MAAM0zgB,EAAcnkiB,EAAIm+O,GAAanrP,KAAKo6e,OAAOhsa,WAAc,KACvC,cAA3DpuE,KAAKsvf,MAAM1/a,UAAUoua,gBAAgBqM,oBACrCrqf,KAAK2igB,MAAMj+f,MAAMgI,IAAM8O,WAAWxb,KAAK2igB,MAAMj+f,MAAMgI,KAAQ8O,WAAWxb,KAAK2igB,MAAMj+f,MAAMqR,QAAU,EAAK,OAEtG/V,KAAKo6e,OAAOqnC,cAAyD,SAAzCzhhB,KAAKo6e,OAAO3ib,WAAW/yD,MAAM4xC,WAEzDt2C,KAAKo6e,OAAO3ib,WAAW/yD,MAAM8H,KAAOyjJ,EAAK00V,kBAAkB53e,GAAKV,KAAKoxB,MAAM0zgB,EAAcpkiB,GAAK/M,KAAKo6e,OAAOhsa,WAAa,IAAM,KAC7HpuE,KAAKo6e,OAAO3ib,WAAW/yD,MAAMgI,IAAM+ta,GAAY02H,EAAcnkiB,EAAIu8gB,EAAUxzgB,QAAU/V,KAAKo6e,OAAOhsa,WAAc,KAE/GpuE,KAAKo6e,OAAO9qX,SAAS5qH,MAAM8H,KAAOyjJ,EAAK00V,kBAAkB53e,GAAKV,KAAKoxB,MAAM0zgB,EAAcpkiB,GAAK/M,KAAKo6e,OAAOhsa,WAAa,IAAM,KAC3HpuE,KAAKo6e,OAAO9qX,SAAS5qH,MAAMgI,IAAM+ta,GAAY02H,EAAcnkiB,EAAIu8gB,EAAUxzgB,QAAU/V,KAAKo6e,OAAOhsa,WAAc,QAOzHg+R,EAAU/wW,UAAU88iB,iBAAmB,SAAUjkiB,GAC7C,IAAImqf,EAAar+f,KAAKophB,sBAAsBl1gB,EAAS2igB,cAAe3igB,EAASvI,QAAQ,GACrF,GAAI0yf,EACA,OAAOr+f,KAAKijR,QAAQo7O,EAAWxb,YAQvCz2I,EAAU/wW,UAAUmuhB,gBAAkB,SAAUlrJ,EAAc+5K,GAC1D,IAEI11C,EAFAx3Q,EAAY,EACZ+hB,GAAW,EAEXj7P,EAAQ,EACRw3gB,EAAc,EAIlB,GAHIzphB,KAAKg+e,gBAAgBzsc,SACrB27N,EAAWltQ,KAAKg+e,gBAAgBzsc,QAEhC+sV,EAAaukH,UAAUvoQ,UAAW,CAClC,IAAIuoQ,EAAYvkH,EAAaukH,UACzBx3P,EAAe,EACfitT,EAAgBt4iB,KAAK2qgB,qBAAqB9nB,EAAW13P,EAAWE,GACpEF,EAAYmtT,EAAcntT,UAC1BE,EAAeitT,EAAcjtT,aAC7B,IAAIt1O,EAASuiiB,EAAcviiB,OAC3B0zgB,EAAct+R,EAAY,EAAIA,EAAYp1O,EAASA,EAC9CsiiB,IACDr4iB,KAAK2igB,MAAMj+f,MAAMqR,OAAS0zgB,EAAczphB,KAAKo6e,OAAOhsa,WAAa,MAErE+8K,EAAY,MAEX,CACD,IAAIsvS,EAAan8J,EAAau4I,cAAcliB,UAAUr2H,EAAa3yX,OAAQsG,GAC3EA,EAAQwohB,EAAWxohB,MACnB,IAAImzI,EAASq1Y,EAAWz5hB,QACnBvD,EAAkB2nJ,KAEnBqkY,GADA9mB,EAAQ3igB,KAAK+viB,eAAe3qZ,EAAQnzI,EAAOmzI,EAAO44V,iBAAiB,EAAM7yP,EAAW+hB,IAChEn3P,OACfsiiB,IACDr4iB,KAAK2igB,MAAMj+f,MAAMqR,OAAS4sf,EAAM5sf,OAAS/V,KAAKo6e,OAAOhsa,WAAa,OAY9E,OARKiqe,IAEGr4iB,KAAK2igB,MAAMj+f,MAAM2I,UADjB6/P,EAC6B,gBAGA,KAIjC/hB,UAAaA,EACbp1O,OAAU0zgB,IAOlBr9K,EAAU/wW,UAAUquhB,kBAAoB,SAAU58P,EAAe4wN,GAC7D,IAAKjgf,EAAkBigf,GAEnB,GADA19e,KAAKo6e,OAAO2nD,iBAAmBrkD,EAC3B19e,KAAKsvf,MAAM1/a,UAAU0qK,QACrBt6O,KAAKo6e,OAAO0nD,mBAAqBpkD,MAEhC,CAED,IAAIy5B,EAAkBn3gB,KAAKm+hB,uBAAuBrxQ,EAAcnhR,OAAQmhR,EAAc+1N,UAAUI,aAAa,IAEzGxlN,EAAYz9R,KAAKijR,QAAQk0P,EAAgBt0B,WACxCplf,EAAkBggS,KACnBz9R,KAAKo6e,OAAO0nD,mBAAqBrkQ,GAI7Cz9R,KAAK8khB,4BAMT14K,EAAU/wW,UAAU6qhB,eAAiB,SAAU5nJ,EAAc0xK,GACzD,IAAIrjiB,EAAS2xX,EAAa5wW,SAAS1gB,EACnC,GAAIsxX,EAAaukH,UAAUvoQ,UAAW,CAClC,IAAIuoQ,EAAYvkH,EAAaukH,UACzB13P,EAAY,EACZE,EAAe,EACfu0R,EAAW5/gB,KAAK2qgB,qBAAqB9nB,EAAW13P,EAAWE,GAC/DF,EAAYy0R,EAASz0R,UACrBE,EAAeu0R,EAASv0R,aACxB1+O,GAAUizgB,EAAS7pgB,OACnBpJ,GAAUw+O,EACL6kT,IACDrjiB,GAAU0+O,OAGb,CACD,IAAIp5O,EAAQ,EACRwohB,EAAan8J,EAAaukH,UAAU8R,UAAUr2H,EAAa3yX,OAAQsG,GACnEmzI,EAASq1Y,EAAWz5hB,QACxBiR,EAAQwohB,EAAWxohB,MACfk5O,EAAY,EAAhB,IACI+hB,GAAW,EAEXqrS,EAAkBv4iB,KAAK+viB,eAAe3qZ,EAAQnzI,EAAOmzI,EAAO44V,iBAAiB,EAAO7yP,EAAW+hB,GACnG/hB,EAAYotT,EAAgBptT,UAC5B+hB,EAAWqrS,EAAgBrrS,SAC3BvgQ,GAAU4riB,EAAgBxiiB,OACtBi6hB,IACArjiB,GAAUg+e,GAAcO,oBAAoB5sH,EAAaukH,UAAUjF,gBAAgBwL,eAG3F,OAAOz8e,GAOXy/V,EAAU/wW,UAAUyphB,yBAA2B,WAC3C9khB,KAAK4igB,aAQTx2J,EAAU/wW,UAAUurhB,kBAAoB,SAAUtqhB,EAAOuuB,EAAM8yD,EAAOq2B,GAClE,IAAI32G,EAAMf,EAAMq6G,OAASr6G,EAAMwrB,QAC/B,IAAI+C,GAAS8yD,GAAUq2B,EA0ClB,IAAIr2B,GAAU9yD,GAASmpF,EA4BvB,GAAIr2B,GAAS9yD,IAASmpF,EACvB,OAAQ32G,GACJ,KAAK,GACD2C,KAAKooiB,2BACL,MACJ,KAAK,GACDpoiB,KAAKqoiB,4BACL,MACJ,KAAK,GACDroiB,KAAKwniB,4BACL,MACJ,KAAK,GACDxniB,KAAKyniB,0BACL,MACJ,KAAK,GACDzniB,KAAK0niB,6BACL,MACJ,KAAK,GACD1niB,KAAK2niB,iCAKb,OAAQtqiB,GAOJ,KAAK,GACDf,EAAMkpB,iBACNxlB,KAAKo6e,OAAOimC,gBAAgBl0gB,WAAanM,KAAKo6e,OAAO+iC,cAAcpngB,OACnE,MACJ,KAAK,GACDzZ,EAAMkpB,iBACNxlB,KAAKo6e,OAAOimC,gBAAgBl0gB,WAAanM,KAAKo6e,OAAO+iC,cAAcpngB,OACnE,MACJ,KAAK,GACD/V,KAAK+niB,eACLzriB,EAAMkpB,iBACN,MACJ,KAAK,GACDxlB,KAAKgoiB,gBACL1riB,EAAMkpB,iBACN,MACJ,KAAK,GACDxlB,KAAK4niB,gBACLtriB,EAAMkpB,iBACN,MACJ,KAAK,GACDxlB,KAAK6niB,cACLvriB,EAAMkpB,iBACN,MACJ,KAAK,GACDxlB,KAAK8niB,iBACLxriB,EAAMkpB,iBACN,MACJ,KAAK,GACDxlB,KAAKioiB,gBACL3riB,EAAMkpB,sBAvFd,OAAQnoB,GACJ,KAAK,GACD2C,KAAKkoiB,oBACL5riB,EAAMkpB,iBACN,MACJ,KAAK,GACDxlB,KAAKmoiB,qBACL7riB,EAAMkpB,iBACN,MACJ,KAAK,GACDxlB,KAAKiniB,qBACL3qiB,EAAMkpB,iBACN,MACJ,KAAK,GACDxlB,KAAKmniB,mBACL7qiB,EAAMkpB,iBACN,MACJ,KAAK,GACDxlB,KAAKoniB,sBACL9qiB,EAAMkpB,iBACN,MACJ,KAAK,GACDxlB,KAAKsniB,qBACLhriB,EAAMkpB,sBAhEd,OADAxlB,KAAKo6e,OAAOonC,kBAAmB,EACvBnkhB,GAOJ,KAAK,GACD2C,KAAKumiB,sBACL,MACJ,KAAK,GACDvmiB,KAAK0miB,uBACL,MACJ,KAAK,GACD1miB,KAAK2miB,uBACL,MACJ,KAAK,GACD3miB,KAAKgniB,qBACL,MACJ,KAAK,GACDhniB,KAAK6miB,wBACL,MACJ,KAAK,GACD7miB,KAAK+miB,uBACL,MACJ,KAAK,GACD/miB,KAAKsvf,MAAM1/a,UAAUhqE,YACrB,MACJ,KAAK,GACDtJ,EAAMkpB,iBACNxlB,KAAKT,OACL,MACJ,KAAK,GACDjD,EAAMkpB,iBACD/nB,EAAkBuC,KAAKsvf,MAAMhU,oBAC9Bt7e,KAAKsvf,MAAMhU,kBAAkBE,qBAAoB,GAiG5Dx7e,KAAKsvf,MAAMzR,gBACZ79e,KAAKsvf,MAAM5U,aAAaksC,kBAAkBtqhB,EAAOuuB,EAAM8yD,EAAOq2B,GAE9Dh0G,KAAKsvf,MAAMhU,oBAEN79e,EAAkBuC,KAAKsvf,MAAMhU,kBAAkBkiC,qBAAuBx9gB,KAAKsvf,MAAMhU,kBAAkBkiC,mBAAmB/ghB,OAAS,GAChIuD,KAAKsvf,MAAMhU,kBAAkBk9D,uBAGf,KAAlBl8iB,EAAMwrB,SAAkC,KAAhBxrB,EAAMq6G,QACzBl5G,EAAkBuC,KAAKsvf,MAAMhU,oBAC9Bt7e,KAAKsvf,MAAMhU,kBAAkBE,qBAAoB,GAEjDx7e,KAAKsvf,MAAMye,uBACX/tgB,KAAKoiiB,wBAQjBh2L,EAAU/wW,UAAU2phB,2BAA6B,SAAUlxf,EAAO2khB,GAC9D,IAAIxoZ,EAAOjwJ,KAAKo6e,OAAO9mP,YACvB,GAAItzP,KAAK8jhB,uBAAuBhwf,EAAOm8H,GAAO,CAC1C,GAAIjwJ,KAAK04iB,uBAAuB5khB,EAAOm8H,GACnC,OAAIjwJ,KAAKsvf,MAAMye,uBAGR/tgB,KAAKiiiB,2BAA2BhyY,EAAK4jW,cAEhD,GAAI7zf,KAAK+jhB,uBAAuBjwf,EAAOm8H,GACnC,OAAIjwJ,KAAKsvf,MAAMye,uBAGR/tgB,KAAKiiiB,2BAA2BhyY,EAAK6jW,cAGpD,QAAI9zf,KAAKsvf,MAAMye,wBACX/tgB,KAAKsvf,MAAMye,uBAAwB,EACnC/tgB,KAAKo6e,OAAOsqC,+BAA+B+zB,EAAW,IAC/C,IAOfrsM,EAAU/wW,UAAUyohB,uBAAyB,SAAUhwf,EAAOm8H,GAC1D,OAAKjwJ,KAAKo6e,OAAOzje,cAAgBmd,EAAM/mB,GAAMkjJ,EAAK00V,kBAAkB53e,GAC/D/M,KAAKo6e,OAAOzje,cAAgBmd,EAAM/mB,GAAOkjJ,EAAK00V,kBAAkB53e,EAAKkjJ,EAAK00V,kBAAkB3ue,MAAQhW,KAAKo6e,OAAOhsa,YAQzHg+R,EAAU/wW,UAAUq9iB,uBAAyB,SAAU5khB,EAAOm8H,GAC1D,IAAIwqR,EAAUz6a,KAAK6phB,WAAW55X,GAC1B2oW,EAAe,EACf3oW,EAAK4jW,eACL+E,EAAgB3oW,EAAK4jW,aAAa7mf,EAAIijJ,EAAK4jW,aAAa99e,QAE5D,IAAIA,EAAS1J,KAAKC,IAAIssf,EAAcjO,GAAcO,oBAAoBj7V,EAAKyhW,YAAY,GAAG/O,cAAcx3P,YAClGnrP,KAAKo6e,OAAOhsa,WAClB,OAAKpuE,KAAKo6e,OAAOhje,aAAe0c,EAAM9mB,GAAMyta,GAAYz6a,KAAKo6e,OAAOhje,aAAe0c,EAAM9mB,GAAMyta,EAAU1ka,GAQ7Gq2V,EAAU/wW,UAAU0ohB,uBAAyB,SAAUjwf,EAAOm8H,GAC1D,IAAI20Y,EAAW30Y,EAAK00V,kBAChBlqE,EAAUz6a,KAAK6phB,WAAW55X,GAC1ByqR,EAAaD,EAAWmqH,EAAS7uhB,OAAS/V,KAAKo6e,OAAOhsa,WACtD6/b,EAAiBtjB,GAAcO,oBAAoBj7V,EAAKyhW,YAAY,GAAG/O,cAAcsrB,gBACrF0O,EAAe,EACf1sX,EAAK6jW,eACL6oB,EAAe1sX,EAAK6jW,aAAa/9e,QAGrC,IAAIA,GAAU6uhB,EAAS7uhB,OACnB1J,KAAKC,IAAIqwgB,EAAe1O,EAAgBtjB,GAAcO,oBAAoBj7V,EAAKyhW,YAAY,GAAG/O,cAAct3P,gBAAkBrrP,KAAKo6e,OAAOhsa,WAC9I,OAAKpuE,KAAKo6e,OAAOhje,aAAe0c,EAAM9mB,GAAM0ta,GAAe16a,KAAKo6e,OAAOhje,aAAe0c,EAAM9mB,GAAMyta,EAAU1ka,GAQhHq2V,EAAU/wW,UAAU4miB,2BAA6B,SAAUtwC,GAGvD,OAFA3xf,KAAKsvf,MAAMye,uBAAwB,EACnC/tgB,KAAKsiiB,oCAAoC3wC,IAClC,GAKXvlJ,EAAU/wW,UAAUiniB,oCAAsC,SAAU3wC,GAChE,IAAIqC,EAAQrC,EAAO/0e,WACfo3e,aAAiBjB,KACjBiB,EAAQh0f,KAAKy+hB,yBAAyBzqC,IAE1Ch0f,KAAKgpiB,gBAAgBh1C,GAAO,IAMhC5nJ,EAAU/wW,UAAU+miB,oBAAsB,WACtC,IAAInyY,EAAOjwJ,KAAKijR,QAAQjjR,KAAKzC,MAAMslf,WACnC7if,KAAKsiiB,oCAAoCryY,EAAKyhW,YAAY,IAC1D1xf,KAAKsvf,MAAMye,uBAAwB,GAMvC3hK,EAAU/wW,UAAUiX,QAAU,WACrB7U,EAAkBuC,KAAKkhiB,uBACxBlhiB,KAAKkhiB,yBAAsB/liB,GAE/B6E,KAAK2igB,WAAQxngB,EACb6E,KAAKkhiB,yBAAsB/liB,EAC3B6E,KAAKo+hB,2BAAwBjjiB,EAC7B6E,KAAKo6e,YAASj/e,EACd6E,KAAKsvf,WAAQn0f,GAQjBixW,EAAU/wW,UAAUuoiB,iBAAmB,SAAUnsgB,EAAMkhhB,GACnD,IAAI5xB,EAAY/mhB,KAAKo6e,OAAO2sC,UAC5B,GAAIA,EAAUtgT,YAAYhvM,GAAO,CAE7B,IAAImhhB,EAAe7xB,EAAUr/gB,IAAI+vB,GAC7B9rB,EAASitiB,EAAa9qf,KAAKpe,UAAUkpgB,EAAc,GACnD9rR,EAAgB,IAAIsqQ,GAAap3hB,KAAKo6e,OAAOkV,OAEjD,GADAxiO,EAAcorQ,qBAAqB0gB,EAAa9qf,KAAMniD,GAClDgtiB,EACA34iB,KAAKo6e,OAAOxqa,UAAU4uI,YAAYsuE,EAAeA,OAEhD,CAED,IAAI+rR,EAAaD,EAAan3iB,UAC1Bq3iB,EAAYD,EAAW/qf,KAAKpe,UAAUmpgB,EAAY,GAClD1vB,EAAc,IAAIiO,GAAap3hB,KAAKo6e,OAAOkV,OAC/C65B,EAAY+O,qBAAqB2gB,EAAW/qf,KAAMgrf,GAElD94iB,KAAKo6e,OAAOxqa,UAAU4uI,YAAYsuE,EAAeq8P,MAQ7D/8K,EAAU/wW,UAAU09iB,eAAiB,SAAUthhB,GAC3Cz3B,KAAK4jiB,iBAAiBnsgB,IAM1B20U,EAAU/wW,UAAU29iB,YAAc,WAG9B,IAFA,IAAIn2D,EAAY7if,KAAKzC,MAAMslf,UACvBo2D,OAAU99iB,OACQA,IAAd0nf,GAA2B7if,KAAKk5iB,WAAWr2D,IAC/Co2D,EAAUp2D,EACVA,EAAYA,EAAUsP,uBAE1B,QAAgBh3f,IAAZ89iB,EAAuB,CACvB,IAAI56C,EAAa46C,EAAQh2D,aAAa,GACtC,QAAmB9nf,IAAfkjgB,EACA,OAAOA,EAAWjkf,SAAS,KAQvCgyV,EAAU/wW,UAAU69iB,WAAa,SAAUr2D,GACvC,IAAIn+e,EAAQm+e,EAAUjF,gBAAgB+F,UACtC,YAAkBxof,IAAVuJ,IAAqE,IAA7CA,EAAM+yB,KAAK7hB,cAAcrX,QAAQ,QAE9D6tW,KC/sNP+sM,GAAkC,WAClC,SAASA,EAAiB7pD,GACtBtvf,KAAK80iB,aAAU35iB,EACf6E,KAAK+0iB,WAAQ55iB,EACb6E,KAAKsvf,MAAQA,EAwCjB,OAtCAhxf,OAAOuJ,eAAesxiB,EAAiB99iB,UAAW,UAC9CqM,IAAK,WACD,OAAO1H,KAAKsvf,MAAMlV,QAEtBzye,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAesxiB,EAAiB99iB,UAAW,SAC9CqM,IAAK,WACD,OAAO1H,KAAK80iB,SAEhBztiB,IAAK,SAAUrK,GACXgD,KAAK80iB,QAAU93iB,GAEnB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAesxiB,EAAiB99iB,UAAW,OAC9CqM,IAAK,WACD,OAAO1H,KAAK+0iB,OAEhB1tiB,IAAK,SAAUrK,GACXgD,KAAK+0iB,MAAQ/3iB,GAEjB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAesxiB,EAAiB99iB,UAAW,QAC9CqM,IAAK,WACD,OAAO1H,KAAKo6e,OAAOxqa,UAAUq6d,gBAAgBjqiB,KAAKzC,MAAOyC,KAAK6e,KAAK,IAEvElX,YAAY,EACZC,cAAc,IAElBuxiB,EAAiB99iB,UAAUiX,QAAU,WACjCtS,KAAKzC,WAAQpC,EACb6E,KAAK6e,SAAM1jB,GAERg+iB,KC1CPC,GAAmC,WACnC,SAASA,EAAkB9pD,GACvBtvf,KAAKqkO,cAAgB,EACrBrkO,KAAKsvf,MAAQA,EAmDjB,OAjDAhxf,OAAOuJ,eAAeuxiB,EAAkB/9iB,UAAW,UAC/CqM,IAAK,WACD,YAAuBvM,IAAnB6E,KAAKq5iB,UACE,EAEJr5iB,KAAKq5iB,UAAU58iB,QAE1BkL,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeuxiB,EAAkB/9iB,UAAW,uBAC/CqM,IAAK,WACD,UAAuBvM,IAAnB6E,KAAKq5iB,WAA2Br5iB,KAAKqkO,aAAe,GAAKrkO,KAAKqkO,cAAgBrkO,KAAKvD,QAGvF,OAAOuD,KAAKq5iB,UAAUr5iB,KAAKqkO,eAE/B18N,YAAY,EACZC,cAAc,IAElBwxiB,EAAkB/9iB,UAAUi+iB,UAAY,WACpC,IAAIC,EAAmB,IAAIJ,GAAiBn5iB,KAAKsvf,OAKjD,OAJI7xf,EAAkBuC,KAAKq5iB,aACvBr5iB,KAAKq5iB,cAETr5iB,KAAKq5iB,UAAU70iB,KAAK+0iB,GACbA,GAEXH,EAAkB/9iB,UAAUm+iB,aAAe,WAEvC,GADAx5iB,KAAKqkO,cAAgB,GAChB5mO,EAAkBuC,KAAKq5iB,WACxB,IAAK,IAAIl9iB,EAAI6D,KAAKq5iB,UAAU58iB,OAAS,EAAGN,GAAK,EAAGA,IAC5C6D,KAAKq5iB,UAAUl9iB,GAAGmW,UAClBtS,KAAKq5iB,UAAUhxhB,OAAOlsB,EAAG,IAIrCi9iB,EAAkB/9iB,UAAUkD,QAAU,SAAUQ,GAC5C,OAAItB,EAAkBuC,KAAKq5iB,YACf,EAELr5iB,KAAKq5iB,UAAU96iB,QAAQQ,IAElCq6iB,EAAkB/9iB,UAAUiX,QAAU,WAC7B7U,EAAkBuC,KAAKq5iB,YACxBr5iB,KAAKw5iB,eAETx5iB,KAAKq5iB,eAAYl+iB,GAEdi+iB,KCnDPK,GAA4B,WAC5B,SAASA,EAAWnqD,GAChBtvf,KAAKisf,WAAa,MAClBjsf,KAAKksf,UAAY,MACjBlsf,KAAKsvf,MAAQA,EA2OjB,OAzOAhxf,OAAOuJ,eAAe4xiB,EAAWp+iB,UAAW,UACxCqM,IAAK,WACD,OAAO1H,KAAKsvf,MAAMlV,QAEtBzye,YAAY,EACZC,cAAc,IAElB6xiB,EAAWp+iB,UAAUq+iB,KAAO,SAAUhriB,EAASiriB,GAC3C,OAAO35iB,KAAK45iB,SAASlriB,EAASiriB,EAAY,UAG9CF,EAAWp+iB,UAAUu+iB,SAAW,SAAUlriB,EAASiriB,EAAYE,GACpC,iBAAZnriB,IACPA,EAAU1O,KAAK85iB,cAAcpriB,EAASiriB,SAEbx+iB,IAAzB0+iB,IACAA,EAAuB,SAE3B,IAAInpX,EAAU,IAAI0oX,GAAkBp5iB,KAAKsvf,OAEzC,OADAtvf,KAAK+5iB,aAAarpX,EAAShiL,GAAS,EAAMiriB,EAAYE,GAC/CnpX,EAA4BspX,qBAEvCP,EAAWp+iB,UAAUy+iB,cAAgB,SAAUG,EAAYlkd,GAUvD,OATIkkd,EAAW17iB,QAAQ,OAAS,IAC5B07iB,EAAaA,EAAW/8iB,MAAM,MAAMikB,KAAK,SAEzC84hB,EAAW17iB,QAAQ,MAAQ,IAC3B07iB,EAAa,KAAOA,GAET,cAAXlkd,GAAqC,2BAAXA,IAC1Bkkd,EAAaj6iB,KAAKisf,WAAaguD,EAAaj6iB,KAAKksf,WAE9C,IAAIloe,OAAOi2hB,EAAwB,kBAAXlkd,GAAyC,2BAAXA,EAAuC,IAAM,OAE9G0jd,EAAWp+iB,UAAU6+iB,eAAiB,SAAUxriB,GAC5C,IAAIyriB,EAAYn6iB,KAAKisf,WAAajsf,KAAKksf,UACnCkuD,EAAgB1riB,EAAQxB,WAC5B,OAAiC,IAAzBktiB,EAAc39iB,QAAgB29iB,IAAkBD,GAG5DV,EAAWp+iB,UAAUg/iB,QAAU,SAAU3riB,EAASiriB,EAAYE,GACnC,iBAAZnriB,IACPA,EAAU1O,KAAK85iB,cAAcpriB,EAASiriB,SAEbx+iB,IAAzB0+iB,IACAA,EAAuB,SAE3B,IAAInpX,EAAU,IAAI0oX,GAAkBp5iB,KAAKsvf,OAKzC,GAJAtvf,KAAK+5iB,aAAarpX,EAAShiL,GAAS,EAAOiriB,EAAYE,GACnDnpX,EAAQj0L,OAAS,GAAKi0L,EAAQ2zC,aAAe,IAC7C3zC,EAAQ2zC,aAAe,IAEtB5mO,EAAkBizL,EAAQspX,qBAC3B,OAAOtpX,GAKf+oX,EAAWp+iB,UAAU0+iB,aAAe,SAAUrpX,EAAShiL,EAAS4riB,EAAcX,EAAYY,GACtF,IAAIv6iB,KAAKk6iB,eAAexriB,GAAxB,MAGmBvT,IAAfw+iB,IACAA,EAAa,QAEjB,IAAIv0Z,OAASjqJ,EACT0qB,OAAe1qB,EAInB,QAH4BA,IAAxBo/iB,IACA10hB,EAAe7lB,KAAKsvf,MAAM1/a,UAAU/wD,UAEZ1jB,IAAxBo/iB,GAAqCD,QAAiCn/iB,IAAjB0qB,QAAyD1qB,IAA3B0qB,EAAag9d,WAC5Fh9d,EAAag9d,qBAAqBC,GAAiB,CACnD,IAAI8R,EAAgB,EAMpB,GAFAxvW,GADImvW,EAAgB1ue,EAAagxf,cAAcliB,UAAU30f,KAAKsvf,MAAM1/a,UAAUryE,MAAMoO,OAAQipf,IACrE5zf,QACvB4zf,EAAgBL,EAActif,OACzBxU,EAAkB2nJ,GAAS,CAC5B,IAAIolZ,OAAsBrviB,EAG1B,IADAqviB,EAAsBxqiB,KAAKw6iB,WAAWp1Z,EAAQ12I,EAASiriB,EAAY/kD,EAAe0lD,EAAc5pX,EAAS7qK,GAC/E,IAAnB6qK,EAAQj0L,SAAiBgB,EAAkB+siB,IAAsB,CACpE,MAAQ/siB,EAAkB+siB,IAAoE,IAA5CA,EAAoBvnD,aAAaxmf,QAE/E+tiB,EAAsBxqiB,KAAKsvf,MAAM1/a,UAAUi7d,iBAAiBL,EAAoBtnD,iBAEpF,GAAIzlf,EAAkB+siB,GAClB,MAEJ,IAAInsC,EAAamsC,EAAoBvnD,aAAa,GAOlD,GALI79V,EADAi5W,EAAWjkf,SAAS,aAAc26e,GACxBsJ,EAAWjkf,SAAS,aAAco6e,GAAkB6J,EAAWjkf,SAAS,QAAKjf,EAG9EkjgB,EAAWjkf,SAAS,GAE7B3c,EAAkB2nJ,GAClB,MAGJolZ,EAAsBxqiB,KAAKw6iB,WAAWp1Z,EAAQ12I,EAASiriB,EAAY,EAAGW,EAAc5pX,EAAS7qK,GAEjG,GAAI6qK,EAAQj0L,OAAS,EACjB,QAKhB,IAAIi2Q,EAEJ,IADAA,EAAU1yQ,KAAKo6e,OAAOlvQ,MAAM,GAAGwmR,YAAY,IACnCj0f,EAAkBi1Q,IAA4C,IAAhCA,EAAQuwO,aAAaxmf,QACvDi2Q,EAAUA,EAAQupP,WAEtB,IAAIx+f,EAAkBi1Q,IAA4C,IAAhCA,EAAQuwO,aAAaxmf,OAAvD,CAKA,IAFA,IAAI0ggB,EAAkBn9f,KAAKsvf,MAAM1/a,UAAUo2d,uBAAuBtzR,EAAQuwO,aAAa,KAE/Exlf,EAAkB0/f,IAA4D,IAAxCA,EAAgBla,aAAaxmf,QAAoE,IAApD0ggB,EAAgBla,aAAa,GAAG7oe,SAAS3d,QAChI0ggB,EAAkBn9f,KAAKsvf,MAAM1/a,UAAU2qd,sBAAsBp9B,GAEjE,MAAQ1/f,EAAkB0/f,IAAoBA,EAAgBla,aAAaxmf,OAAS,GAAG,CACnF,IAAI83f,EACAkmD,GADAlmD,EAAgB4I,EAAgBla,aAAa,IACnB7oe,SAAS,GACvC,GAAI3c,EAAkBg9iB,GAClB,MAKJ,IAHAz6iB,KAAKw6iB,WAAWC,EAAW/riB,EAASiriB,EAAY,EAAGW,EAAc5pX,EAAS7qK,GAC1Es3e,EAAkBn9f,KAAKsvf,MAAM1/a,UAAU2qd,sBAAsBp9B,IAErD1/f,EAAkB0/f,IAA6D,IAAxCA,EAAgBla,aAAaxmf,QAAqE,IAApD0ggB,EAAgBla,aAAa,GAAG7oe,SAAS3d,QAClI0ggB,EAAkBn9f,KAAKsvf,MAAM1/a,UAAU2qd,sBAAsBp9B,GAGjEm9C,IAAiB78iB,EAAkBizL,IAAYA,EAAQj0L,UAK/Dg9iB,EAAWp+iB,UAAUm/iB,WAAa,SAAUjmD,EAAe7lf,EAASqnF,EAAQ6+Z,EAAe0lD,EAAc5pX,EAAS7qK,GAK9G,IAJA,IAAIgogB,EAAUt5B,EACVmmD,EAAgB,GAChBC,EAAQ,IAAIh1U,KAEb,CAEC,GAAI4uR,aAAyBC,KAAoB/2f,EAAkB82f,EAAc9ne,OAAgC,KAAvB8ne,EAAc9ne,KACpGkuhB,EAAMv2iB,IAAImwf,EAAemmD,EAAcj+iB,QAGnCi+iB,GADAnmD,IAAkBs5B,EACet5B,EAAc9ne,KAAKvI,UAAU0we,GAG7BL,EAAkB,UAGtD,GAAIA,aAAyBjJ,GAAiB,CAC/C,IAAIG,EAAa8I,EACZ92f,EAAkBguf,EAAWD,YAE9B+I,EAAgB92f,EAAkBguf,EAAWsS,gBAAkBtS,EAAWD,SAAWC,EAAWsS,gBAGxG,IAAKtggB,EAAkB82f,IAAkB92f,EAAkB82f,EAAc5iM,UACrE,MAECl0T,EAAkB82f,KACnBA,EAAgBA,EAAc5iM,UAOtC,IAJA,IAEIipP,EAFAnuhB,EAAOiuhB,EAAcxtiB,WACrBlH,MAGIvI,EAAkBm9iB,EAAclsiB,EAAQuuB,KAAKxQ,KACjDzmB,EAAQxB,KAAKo2iB,GAEjB,IAAK,IAAIz+iB,EAAI,EAAGA,EAAI6J,EAAQvJ,OAAQN,IAAK,CAIrC,IAAK,IAHDwT,EAAQ3J,EAAQ7J,GAChB4C,EAAS2xL,EAAQ4oX,YACjBuB,EAAWF,EAAMr9iB,KACZkqB,EAAM,EAAGA,EAAMqzhB,EAASp+iB,OAAQ+qB,IAAO,CAC5C,IAAIm7C,EAAOk4e,EAASrzhB,GAChB9B,EAAai1hB,EAAMjziB,IAAIi7D,GACvBm4e,EAAan4e,EAAKlmE,OAKtB,GAHIkmE,IAASkrd,IACTitB,GAAclmD,GAEdn3f,EAAkBsB,EAAOxB,QAAUoS,EAAMsC,MAAQyT,EAAao1hB,EAAY,CAC1E,IAAI7oiB,EAAQtC,EAAMsC,MAAQyT,EAEtBi9C,IAASkrd,IACT57gB,GAAS2if,GAEb,IAAIjpf,EAAUg3D,EAAS,KAAEjzB,UAAUizB,EAAM1wD,GACzClT,EAAOxB,MAAQyC,KAAK+piB,gBAAgBpne,EAAK7U,KAAMniD,EAAOuB,YACtDnO,EAAOxB,MAAMmwB,SAAW1tB,KAAKsvf,MAAM1/a,UAAUwod,4BAA4Bz1d,EAAK7U,KAAMniD,GAAQ,GAC5F5M,EAAOxB,MAAM26hB,qBAAqBv1d,EAAK7U,KAAMniD,GAEjD,GAAIgE,EAAMsC,MAAQtC,EAAM,GAAGlT,QAAUipB,EAAao1hB,EAAY,CACtD7oiB,EAAStC,EAAMsC,MAAQtC,EAAM,GAAGlT,OAAUipB,EAE1Ci9C,IAASkrd,IACT57gB,GAAS2if,GAETjpf,EAAUg3D,EAAS,KAAEjzB,UAAUizB,EAAM1wD,GACzClT,EAAO8f,IAAM7e,KAAK+piB,gBAAgBpne,EAAK7U,KAAMniD,EAAOuB,YACpDnO,EAAO8f,IAAI6O,SAAW1tB,KAAKsvf,MAAM1/a,UAAUwod,4BAA4Bz1d,EAAK7U,KAAMniD,GAAQ,GAC1F5M,EAAO8f,IAAIq5gB,qBAAqBv1d,EAAK7U,KAAMniD,GAC3C,OAGR,GAAI2uiB,EAEA,YADA5pX,EAAQ2zC,aAAe,GAGlB3zC,EAAQ2zC,aAAe,GAAKx+M,EAAa0ygB,cAAcx5hB,EAAOxB,SAEnEmzL,EAAQ2zC,aAAe3zC,EAAQnyL,QAAQQ,IAK/C,OADsBiB,KAAKsvf,MAAM1/a,UAAU2qd,sBAAsBhmC,EAAczmc,KAAK+0b,YAGxF42D,EAAWp+iB,UAAU0uiB,gBAAkB,SAAU1rC,EAAY9K,GACzD,IAAIj1H,EAAe,IAAI84J,GAAap3hB,KAAKsvf,OACrCr9e,EAAQqsX,EAAag1H,qBAAqB+K,EAAY9K,GAE1D,OADAj1H,EAAa05J,2BAA2B/lhB,GACjCqsX,GAEJm7K,KAMPsB,GAAkC,WAClC,SAASA,EAAiBvuiB,EAAMwJ,GAC5BhW,KAAKg7iB,aAAe,EACpBh7iB,KAAKi7iB,cAAgB,EACrBj7iB,KAAKg7iB,aAAexuiB,EACpBxM,KAAKi7iB,cAAgBjliB,EAsBzB,OApBA1X,OAAOuJ,eAAekziB,EAAiB1/iB,UAAW,QAC9CqM,IAAK,WACD,OAAO1H,KAAKg7iB,cAEhB3ziB,IAAK,SAAUrK,GACXgD,KAAKg7iB,aAAeh+iB,GAExB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAekziB,EAAiB1/iB,UAAW,SAC9CqM,IAAK,WACD,OAAO1H,KAAKi7iB,eAEhB5ziB,IAAK,SAAUrK,GACXgD,KAAKi7iB,cAAgBj+iB,GAEzB2K,YAAY,EACZC,cAAc,IAEXmziB,KC/QP7/e,GAAwB,WAIxB,SAASA,EAAOo0b,GACZtvf,KAAKsvf,MAAQA,EACbtvf,KAAKk7iB,WAAa,IAAIzB,GAAWz5iB,KAAKsvf,OACtCtvf,KAAKm7iB,kBAAoB,IAAI/B,GAAkBp5iB,KAAKsvf,OAoTxD,OAlTAhxf,OAAOuJ,eAAeqzD,EAAO7/D,UAAW,UAIpCqM,IAAK,WACD,OAAO1H,KAAKsvf,MAAMlV,QAEtBzye,YAAY,EACZC,cAAc,IAKlBszD,EAAO7/D,UAAUkkC,cAAgB,WAC7B,MAAO,UAQX27B,EAAO7/D,UAAUq+iB,KAAO,SAAUjthB,EAAM2uhB,GAChC39iB,EAAkB29iB,KAClBA,EAAc,QAElB,IACIr8iB,EADa,IAAI06iB,GAAWz5iB,KAAKsvf,OACboqD,KAAKjthB,EAAM2uhB,GAC9B39iB,EAAkBsB,IACnBiB,KAAKq7iB,SAASt8iB,IAStBm8D,EAAO7/D,UAAUg/iB,QAAU,SAAU5thB,EAAM2uhB,GACnC39iB,EAAkB29iB,KAClBA,EAAc,QAElB,IACI1qX,EADa,IAAI+oX,GAAWz5iB,KAAKsvf,OACZ+qD,QAAQ5thB,EAAM2uhB,IAClC39iB,EAAkBizL,IAAYA,EAAQj0L,OAAS,IAChDuD,KAAKq7iB,SAAS3qX,EAAQ2oX,UAAU3oX,EAAQ2zC,eACxCrkO,KAAKkjW,UAAUxyK,KAUvBx1H,EAAO7/D,UAAUigjB,mBAAqB,SAAUrB,EAAYsB,EAAeH,GACvE,GAAoB,KAAfnB,IAAqBx8iB,EAAkBw8iB,IAAmC,KAAlBsB,IAAwB99iB,EAAkB89iB,GAAvG,CAGI99iB,EAAkB29iB,KAClBA,EAAc,QAElB,IAAIF,EAAa,IAAIzB,GAAWz5iB,KAAKsvf,OACjC6rD,EAAoB,IAAI/B,GAAkBp5iB,KAAKsvf,OAC/C5+T,EAAUwqX,EAAWb,QAAQJ,EAAYmB,IACxC39iB,EAAkBizL,IAAYA,EAAQj0L,OAAS,IAChDuD,KAAKsvf,MAAMlL,aAAai3D,SAAS3qX,EAAQ2oX,UAAU3oX,EAAQ2zC,eAC3DrkO,KAAKsvf,MAAMlL,aAAalhJ,UAAUxyK,GAClC1wL,KAAKw7iB,WAAWD,EAAeJ,MAUvCjgf,EAAO7/D,UAAUogjB,gBAAkB,SAAUxB,EAAYsB,EAAeH,GACpE,IAAK39iB,EAAkBw8iB,IAA8B,KAAfA,GAAyC,KAAlBsB,IAAwB99iB,EAAkB89iB,GAAvG,CAGI99iB,EAAkB29iB,KAClBA,EAAc,QAElB,IAAIF,EAAa,IAAIzB,GAAWz5iB,KAAKsvf,OACjC6rD,EAAoB,IAAI/B,GAAkBp5iB,KAAKsvf,OAC/Cvwf,EAASm8iB,EAAWxB,KAAKO,EAAYmB,GACzC,IAAK39iB,EAAkBsB,GAAS,CAC5BiB,KAAKq7iB,SAASt8iB,GACdo8iB,EAAkB7B,YAClB6B,EAAkB9B,UAAU,GAAKt6iB,EACjCiB,KAAKuP,QAAQgsiB,EAAex8iB,EAAQo8iB,GACpC,IAAIlpiB,EAAQjS,KAAKsvf,MAAM1/a,UAAU/wD,IAAI04gB,+BACrCx4hB,EAASm8iB,EAAWtB,SAASK,EAAYmB,EAAanpiB,GACtDkpiB,EAAkB7B,YAClB6B,EAAkB9B,UAAU,GAAKt6iB,EACjCiB,KAAKsvf,MAAMlL,aAAai3D,SAASt8iB,MAMzCm8D,EAAO7/D,UAAUggjB,SAAW,SAAU9B,GAClC,IAAIh8iB,EAAQg8iB,EAAiBh8iB,MACzBshB,EAAM06hB,EAAiB16hB,IAEtBphB,EAAkBuC,KAAKsvf,QAAW7xf,EAAkBuC,KAAKsvf,MAAM1/a,YAAenyE,EAAkBF,IAAWE,EAAkBohB,IAASphB,EAAkBF,EAAMslf,YAAeplf,EAAkBohB,EAAIgke,YACpM7if,KAAKsvf,MAAM1/a,UAAU4uI,YAAYjhN,EAAOshB,IAMhDq8C,EAAO7/D,UAAU6nW,UAAY,SAAUi4M,GACnC,GAAIn7iB,KAAKsvf,MAAMhU,kBAAmB,CAC9Bt7e,KAAKsvf,MAAMhU,kBAAkBkiC,mBAAqB,IAAI73S,GACtD,IAAK,IAAIxpO,EAAI,EAAGA,EAAIg/iB,EAAkB9B,UAAU58iB,OAAQN,IAAK,CACzD,IAAI4C,EAASo8iB,EAAkB9B,UAAUl9iB,GACzC6D,KAAK07iB,gBAAgB38iB,GAEzBiB,KAAKo6e,OAAO+xC,uBAMpBjxd,EAAO7/D,UAAUqgjB,gBAAkB,SAAU38iB,GACzCiB,KAAKsvf,MAAMhU,kBAAkBqgE,sBAAsB58iB,EAAOxB,MAAMslf,UAAW9jf,EAAOxB,MAAOwB,EAAO8f,MAKpGq8C,EAAO7/D,UAAUugjB,qBAAuB,SAAU78iB,GAC1CtB,EAAkBsB,IAAsB,KAAXA,IAG7BtB,EAAkBuC,KAAKsvf,MAAM1jB,mBAC7B5re,KAAKsvf,MAAM1jB,oBAEf5re,KAAKsvf,MAAM1jB,gBAAgBpne,KAAKzF,KAKpCm8D,EAAO7/D,UAAUwgjB,kBAAoB,SAAUV,GAC3C,IAAK,IAAIh/iB,EAAI,EAAGA,EAAIg/iB,EAAkB9B,UAAU58iB,OAAQN,IAAK,CACzD,IAAI4C,EAASo8iB,EAAkB9B,UAAUl9iB,GACzC6D,KAAK87iB,2BAA2B/8iB,KAMxCm8D,EAAO7/D,UAAUygjB,2BAA6B,SAAU/8iB,GACpD,GAAoB,MAAhBA,EAAOxB,OAA+B,MAAdwB,EAAO8f,KAAyC,MAA1B9f,EAAOxB,MAAMslf,WAA6C,MAAxB9jf,EAAO8f,IAAIgke,UAAmB,CAC9G,IACIk5D,OAAa,EAEbr2hB,EAAa,EACbm0gB,EAAY96hB,EAAOxB,MAAMs5gB,cAAcliB,UAAU51f,EAAOxB,MAAMoO,OAAQ+Z,GACtE0/H,EAASy0Y,EAAU74hB,QACvB0kB,EAAam0gB,EAAU5nhB,MACvB,IAAI9I,EAAS,GACT8+B,EAAY,EAChB,GAAIm9G,aAAkBkmW,GAAiB,CACnC,IAAI6+C,EAAcnqiB,KAAKsvf,MAAM1/a,UAAUw6d,kBAAkBhlZ,EAAQ1/H,GAC7DykhB,EAAYnpiB,QAAQ2wT,oBAAoB6iM,IACxCpvW,EAAS+kZ,EAAYnpiB,QAAQ2wT,SAC7BjsS,EAAaykhB,EAAYl4hB,QAGzBmzI,EAAS+kZ,EAAYnpiB,QACrB0kB,EAAaykhB,EAAYl4hB,OAGjC,IAAI+piB,EAASh8iB,KAAKsvf,MAAM1/a,UAAUs9d,sBAAsB9nZ,EAAQ1/H,GAC5DoL,EAAMkrhB,EAAOh7iB,QAEjB,GADA0kB,EAAas2hB,EAAO/piB,MACT,MAAP6e,EAAa,CACTA,aAAe0je,IAAkB9ue,EAAa,IAC9Cvc,EAAS2nB,EAAIrE,KAAKvI,UAAU,EAAGwB,IAEnC,IAAIu2hB,EAAWnrhB,EAAIg9B,KAAK1zC,SAAS7b,QAAQuyB,GAGzC,IADAmX,EAAY9+B,EAAO0vF,YAAY,KACxB5wD,EAAY,GAAKg0gB,EAAW,GAAKnrhB,EAAIg9B,KAAK1zC,SAAS6hiB,EAAW,aAAcznD,IAC/Errf,EAAS2nB,EAAIg9B,KAAK1zC,SAAS6hiB,EAAW,GAAGxvhB,KAAOtjB,EAChD8yiB,IACAh0gB,EAAY9+B,EAAO0vF,YAAY,KAGvC,IAAIqjd,EAAa/yiB,EAAO0vF,YAAY,MAChCqjd,EAAa,EACb/yiB,EAASA,EAAO+a,UAAU,EAAGg4hB,IAG7Bj0gB,EAAY9+B,EAAO0vF,YAAY,MACN,EAAI1vF,EAASA,EAAO+a,UAAU+jB,EAAY,GAEzDlpC,EAAO0tB,KACrB,IAAI7G,EAAW,EACXykhB,EAAetriB,EAAO8f,IAAIg4f,cAAcliB,UAAU51f,EAAO8f,IAAIlT,OAAQia,GACrE0khB,EAAYD,EAAarpiB,QAW7B,GAVA4kB,EAAWykhB,EAAap4hB,MACxB8piB,EAAa,GAEC,MAAVC,IAGAlrhB,GADAkrhB,EAASh8iB,KAAKsvf,MAAM1/a,UAAUs9d,sBAAsB5C,EAAW1khB,IAClD5kB,QACb4kB,EAAWo2hB,EAAO/piB,OAGX,MAAP6e,EAAa,CACTA,aAAe0je,IAAkB5ue,EAAWkL,EAAIr0B,SAChDs/iB,EAAajrhB,EAAIrE,KAAKvI,UAAU0B,IAIpC,IAFIq2hB,EAAWnrhB,EAAIg9B,KAAK1zC,SAAS7b,QAAQuyB,GAElCmrhB,EAAW,EAAInrhB,EAAIg9B,KAAK1zC,SAAS3d,QAAWq0B,EAAIg9B,KAAK1zC,SAAS6hiB,EAAW,aAAcznD,IAAoB1je,EAAIg9B,KAAK1zC,SAAS6hiB,EAAW,aAAc3wD,IACrJx6d,EAAIg9B,KAAK1zC,SAAS6hiB,EAAW,aAAc3wD,GAC3C2wD,GAAsB,GAGtBF,GAA0BjrhB,EAAIg9B,KAAK1zC,SAAS6hiB,EAAW,GAAGxvhB,KAC1DwvhB,GAAsB,GAIlCh0gB,EAAY8zgB,EAAWljd,YAAY,KACnCkjd,EAA4B,OAAfA,EAAsBA,EAAa,GAAKA,EAErD,IAAItzW,EAAc,qEAAuEt/L,EAAS,iEAAmEpK,EAAO0tB,KAAO,UAAYsvhB,EAAa,QAC5M/7iB,KAAK47iB,qBAAqBnzW,KAWlCvtI,EAAO7/D,UAAUkU,QAAU,SAAU4siB,EAAap9iB,EAAQ2xL,GACtD,GAAIjzL,EAAkBuC,KAAKo6e,OAAOkV,MAAMhU,mBACpC,OAAO,EAEN79e,EAAkBuC,KAAKo6e,SACxBp6e,KAAKo6e,OAAOkV,MAAMhU,kBAAkBk9D,uBAExCx4iB,KAAKo6e,OAAOkV,MAAMlL,aAAai3D,SAAS3qX,EAAQ2oX,UAAU,IAC1D,IAAIlwB,EAAcnphB,KAAKo6e,OAAOxqa,UAAUryE,MAExC,GADYmzL,EAAQnyL,QAAQQ,GAChB,EACR,OAAO,EAEXiB,KAAKsvf,MAAM5U,aAAa0hE,WAAWD,GAAa,GAChD,IAAIE,EAAoBt9iB,EAAOxB,MAC3B++iB,EAAkBv9iB,EAAO8f,IAEzBiuQ,GADawvR,EAAgB3wiB,OAAU0wiB,EAAkB1wiB,OAASwwiB,EAAY1/iB,OAC9D,IAAI26hB,GAAap3hB,KAAKo6e,OAAOkV,QAGjD,OAFAxiO,EAAcorQ,qBAAqBokB,EAAgBzlC,cAAesS,EAAYx9gB,OAASwwiB,EAAY1/iB,QACnGuD,KAAKo6e,OAAOxqa,UAAU4uI,YAAY2qU,EAAar8P,GACxC,GAQX5xN,EAAO7/D,UAAUmgjB,WAAa,SAAUW,EAAazrX,GAEjD,GAAIjzL,EAAkBuC,KAAKo6e,OAAOkV,QAAUtvf,KAAKo6e,OAAOkV,MAAMzR,gBAAkBpgf,EAAkBizL,IAAYjzL,EAAkBuC,KAAKo6e,OAAOkV,MAAMhU,mBAC9I,OAAO,EAEXt7e,KAAKo6e,OAAOkV,MAAMhU,kBAAkBk9D,uBAChCx4iB,KAAKsvf,MAAM84B,eACXpohB,KAAKsvf,MAAM84B,cAAcm0B,mBAAmBv8iB,KAAKsvf,MAAM1/a,UAAW,cAEtE,IAAI9wD,EAAQ4xK,EAAQj0L,OACpBuD,KAAKo6e,OAAOkV,MAAM7jB,iBAAkB,EACpC,IAAK,IAAItve,EAAI2iB,EAAQ,EAAG3iB,GAAK,EAAGA,IAC5B6D,KAAKo6e,OAAOkV,MAAMlL,aAAai3D,SAAS3qX,EAAQ2oX,UAAUl9iB,IAC1D6D,KAAKsvf,MAAM5U,aAAa0hE,WAAWD,GAAa,GAChDzrX,EAAQ2oX,UAAUl9iB,GAAGmW,UAQzB,OANItS,KAAKsvf,MAAM84B,gBAAkB3qhB,EAAkBuC,KAAKsvf,MAAM84B,cAAco0B,oBACxEx8iB,KAAKsvf,MAAM84B,cAAcq0B,uBAGzBz8iB,KAAKsvf,MAAM5U,aAAagiE,4BAA4B,GAEjD59hB,GAKXo8C,EAAO7/D,UAAUiX,QAAU,WACnBtS,KAAKm7iB,mBACLn7iB,KAAKm7iB,kBAAkB7oiB,WAGxB4oD,KC5TP+lb,GAA6B,WAM7B,SAASA,EAAY07D,GACjB,IAAI58iB,EAAQC,KAIZA,KAAKu7e,mBAAoB,EACzBv7e,KAAK25iB,WAAa,OAClB35iB,KAAKgkE,eAAY7oE,EACjB6E,KAAK48iB,eAAYzhjB,EACjB6E,KAAK68iB,aAAU1hjB,EACf6E,KAAK88iB,WAAa,aAClB98iB,KAAK+8iB,YAAc,UACnB/8iB,KAAKg9iB,eAAiB,aACtBh9iB,KAAKi9iB,kBAAoB,UACzBj9iB,KAAKk9iB,qBAAuB,cAC5Bl9iB,KAAKm9iB,kBAAoB,mBACzBn9iB,KAAKo9iB,cAAgB,EACrBp9iB,KAAKyrI,kBACLzrI,KAAKq9iB,eAAgB,EACrBr9iB,KAAKs9iB,gBAAkB,UACvBt9iB,KAAKu9iB,aAAe,OACpBv9iB,KAAKw9iB,oBAAsB,aAC3Bx9iB,KAAKy9iB,uBAAyB,YAI9Bz9iB,KAAK09iB,iBAAcvijB,EAInB6E,KAAKghT,WAAY,EAIjBhhT,KAAKw9gB,wBAAqBrihB,EAM1B6E,KAAK29iB,gBAAkB,SAAU19iB,GAC7B,GAAIA,EAAKikT,gBAAkBjkT,EAAKy6D,cAAe,CAC3C,IAAIkjf,EAAcp9iB,SAASmC,cAAc,cAAgB1C,EAAKikT,eAC1D25P,EAAUr9iB,SAASmC,cAAc,cAAgB1C,EAAKy6D,eAC1Dmjf,EAAQ34iB,aAAa04iB,EAAYz4iB,kBAAmB04iB,EAAQjhiB,YAErC,IAAvB3c,EAAKy6D,eAAwBj9D,EAAkB+C,SAASmC,cAAc,cAAgB1C,EAAKy6D,kBAC3F36D,EAAMs9iB,eAAgB,EACtBt9iB,EAAM+9iB,cAEiB,IAAvB79iB,EAAKy6D,eAAwBj9D,EAAkB+C,SAASmC,cAAc,cAAgB1C,EAAKy6D,kBAC3F36D,EAAMs9iB,eAAgB,EACtBt9iB,EAAMg+iB,kBAGd/9iB,KAAKg+iB,mBAAqB,WACtBj+iB,EAAMk+iB,yBACNl+iB,EAAMy4iB,uBACN,IAAI0F,EAAYn+iB,EAAMo+iB,YAAYnhjB,MAClC,GAAkB,KAAdkhjB,EAAJ,CAGA,IAAIxviB,EAAU3O,EAAMq6e,OAAOkV,MAAMlL,aAAa82D,WAAWpB,cAAcoE,EAAWn+iB,EAAM45iB,YAEpF5C,EADeh3iB,EAAMq6e,OAAOxqa,UAAU/wD,IACR04gB,+BAClCx3hB,EAAM2wL,QAAU3wL,EAAMq6e,OAAOkV,MAAMlL,aAAa82D,WAAWb,QAAQ3riB,EAAS3O,EAAM45iB,WAAY5C,GACzE,MAAjBh3iB,EAAM2wL,SAAmB3wL,EAAM2wL,QAAQj0L,OAAS,EAChDsD,EAAMq+iB,wBAGNr+iB,EAAMq6e,OAAO+xC,qBACbpshB,EAAMs+iB,WAAWr8iB,UAAYjC,EAAMu+iB,YAAYvqe,YAAY,cAC3Dh0E,EAAMw+iB,gBAAgB75iB,MAAM4xC,QAAU,QACtCv2C,EAAMy+iB,iBAAiB95iB,MAAM4xC,QAAU,OACvCv2C,EAAM0+iB,oBACN1+iB,EAAMy+iB,iBAAiBx8iB,UAAY,MAQ3ChC,KAAK0+iB,iBAAmB,SAAUz+iB,GAC1BF,EAAM4+iB,WAAWnsiB,SAAWzS,EAAM6+iB,WAAWpsiB,QAC7CzS,EAAM45iB,WAAa,yBAEd55iB,EAAM4+iB,WAAWnsiB,UAAazS,EAAM6+iB,WAAkB,QAC3D7+iB,EAAM45iB,WAAa,iBAEZ55iB,EAAM4+iB,WAAkB,SAAK5+iB,EAAM6+iB,WAAWpsiB,QACrDzS,EAAM45iB,WAAa,YAGnB55iB,EAAM45iB,WAAa,OAEvB55iB,EAAMi+iB,sBAOVh+iB,KAAK6+iB,YAAc,SAAU5+iB,GACrBF,EAAM4+iB,WAAWnsiB,SAAWzS,EAAM6+iB,WAAWpsiB,QAC7CzS,EAAM45iB,WAAa,0BAEZ55iB,EAAM4+iB,WAAkB,SAAK5+iB,EAAM6+iB,WAAWpsiB,QACrDzS,EAAM45iB,WAAa,YAEd55iB,EAAM4+iB,WAAWnsiB,UAAazS,EAAM6+iB,WAAkB,QAC3D7+iB,EAAM45iB,WAAa,gBAGnB55iB,EAAM45iB,WAAa,OAEvB55iB,EAAMi+iB,sBAyBVh+iB,KAAK8+iB,aAAe,WAChB/+iB,EAAMg/iB,WAAWrijB,iBAAiB,QAASqD,EAAMi/iB,yBACjDj/iB,EAAMk/iB,qBAAqBvijB,iBAAiB,QAASqD,EAAMm/iB,+BAC3Dn/iB,EAAMo/iB,yBAAyBzijB,iBAAiB,QAASqD,EAAMq/iB,mCAC/Dr/iB,EAAMo+iB,YAAYzhjB,iBAAiB,UAAWqD,EAAM0je,WACpD1je,EAAMo+iB,YAAYzhjB,iBAAiB,QAASqD,EAAMs/iB,8BAClDt/iB,EAAMy+iB,iBAAiB9hjB,iBAAiB,QAASqD,EAAMu/iB,sBACvDv/iB,EAAMw/iB,YAAY7ijB,iBAAiB,QAASqD,EAAMkC,OAClDlC,EAAMy/iB,cAAc9ijB,iBAAiB,QAASqD,EAAM0/iB,sBACpD1/iB,EAAM2/iB,iBAAiBhjjB,iBAAiB,QAASqD,EAAM4/iB,0BAM3D3/iB,KAAK89iB,WAAa,WACd/9iB,EAAM6/iB,WAAWl7iB,MAAM4xC,QAAU,OACjCv2C,EAAM8/iB,cAAcn7iB,MAAM4xC,QAAU,OAC/B74C,EAAkBsC,EAAM2wL,UAAqC,IAAzB3wL,EAAM2wL,QAAQj0L,SACnDsD,EAAM+/iB,SAASp7iB,MAAM4xC,QAAU,OAC/Bv2C,EAAMy+iB,iBAAiBx8iB,UAAY,GACnCjC,EAAMy+iB,iBAAiB95iB,MAAM4xC,QAAU,OACvCv2C,EAAMs+iB,WAAWr8iB,UAAYjC,EAAMu+iB,YAAYvqe,YAAY,eAE/Dh0E,EAAMy+iB,iBAAiB95iB,MAAMqR,OAAShW,EAAMy+iB,iBAAiB9sgB,aAAe3xC,EAAMggjB,qBAAqBrugB,aAAe,KACtH3xC,EAAMggjB,qBAAqBr7iB,MAAM4xC,QAAU,OAC3Cv2C,EAAMigjB,QAAQt7iB,MAAM4xC,QAAU,QAC9Bv2C,EAAMs+iB,WAAW35iB,MAAM4xC,QAAU,QACjCv2C,EAAM0rI,kBAEN1rI,EAAM0rI,eAAejnI,KAAKzE,EAAMw/iB,YAAax/iB,EAAMkgjB,oBAAqBlgjB,EAAMmgjB,uBAAwBngjB,EAAMo+iB,YAAap+iB,EAAMg/iB,WAAYh/iB,EAAMo/iB,yBAA0Bp/iB,EAAMk/iB,qBAAsBl/iB,EAAM4+iB,WAAY5+iB,EAAM6+iB,YAC/N7+iB,EAAMq9iB,aAAe,EACrBr9iB,EAAMo+iB,YAAY14iB,SAClB1F,EAAMogjB,uBAEVngjB,KAAKq/iB,6BAA+B,WACO,IAAnCt/iB,EAAMo+iB,YAAYnhjB,MAAMP,QACxBsD,EAAMy/iB,cAActhc,UAAW,EAC/Bn+G,EAAM2/iB,iBAAiBxhc,UAAW,IAGlCn+G,EAAMy/iB,cAActhc,UAAW,EAC/Bn+G,EAAM2/iB,iBAAiBxhc,UAAW,IAO1Cl+G,KAAK+9iB,cAAgB,WACjBh+iB,EAAMigjB,QAAQt7iB,MAAM4xC,QAAU,QAC9Bv2C,EAAM6/iB,WAAWl7iB,MAAM4xC,QAAU,QACjCv2C,EAAMggjB,qBAAqBr7iB,MAAM4xC,QAAU,QAC3Cv2C,EAAMy+iB,iBAAiB95iB,MAAMqR,OAAShW,EAAMy+iB,iBAAiB9sgB,aAAe3xC,EAAMggjB,qBAAqBrugB,aAAe,KACtH3xC,EAAMs9iB,eAAgB,EACtBt9iB,EAAMk+iB,yBACNl+iB,EAAMy4iB,uBACNz4iB,EAAMq6e,OAAO+xC,qBAC0B,IAAnCpshB,EAAMo+iB,YAAYnhjB,MAAMP,QACxBsD,EAAMy/iB,cAActhc,UAAW,EAC/Bn+G,EAAM2/iB,iBAAiBxhc,UAAW,IAGlCn+G,EAAMy/iB,cAActhc,UAAW,EAC/Bn+G,EAAM2/iB,iBAAiBxhc,UAAW,GAEtCn+G,EAAM0rI,kBAEN1rI,EAAM0rI,eAAejnI,KAAKzE,EAAMw/iB,YAAax/iB,EAAMkgjB,oBAAqBlgjB,EAAMmgjB,uBAAwBngjB,EAAMo+iB,YAAap+iB,EAAMg/iB,WAAYh/iB,EAAMo/iB,yBAA0Bp/iB,EAAMk/iB,qBAAsBl/iB,EAAM4+iB,WAAY5+iB,EAAM6+iB,WAAY7+iB,EAAMqgjB,YAAargjB,EAAMy/iB,cAAez/iB,EAAM2/iB,kBACzR3/iB,EAAMq9iB,aAAe,EACW,KAA5Br9iB,EAAMo+iB,YAAYnhjB,MAClB+C,EAAMo+iB,YAAY14iB,SAGlB1F,EAAMqgjB,YAAY36iB,SAEU,KAA5B1F,EAAMo+iB,YAAYnhjB,OAClB+C,EAAMi+iB,qBAEVj+iB,EAAMogjB,uBAOVngjB,KAAKqgjB,sBAAwB,SAAU/jjB,GAKnC,GAAsB,IAAlBA,EAAMwrB,QAAe,CACrBxrB,EAAMkpB,iBACN,IAAI86hB,OAAanljB,EAEbmljB,EADAhkjB,EAAMm6G,SAC+B,IAAvB12G,EAAMq9iB,cAAsB3/iB,EAAkBsC,EAAMq9iB,cAC9Dr9iB,EAAM0rI,eAAehvI,OAAS,EAAIsD,EAAMq9iB,aAAe,EAG7Cr9iB,EAAM0rI,eAAehvI,OAAS,IAAMsD,EAAMq9iB,cAAgB3/iB,EAAkBsC,EAAMq9iB,cAC5F,EAAIr9iB,EAAMq9iB,aAAe,GAE7Bp8iB,EAAUjB,EAAM0rI,eAAe60a,IAC3Bp+iB,QACJlB,aAAmBqpd,kBACnBrpd,EAAQyE,SAEZ1F,EAAMq9iB,aAAekD,EACjBt/iB,aAAmB+9L,eACnBh/L,EAAM0lhB,iBAAiBzkhB,QAG1B,GAAsB,KAAlB1E,EAAMwrB,SAEX,GAAIxrB,EAAM6K,SAAWpH,EAAMo+iB,aAAe7hjB,EAAM6K,SAAWpH,EAAMw/iB,YAAa,CAC1EjjjB,EAAMkpB,iBAEN,IAAe,KADXvT,EAAQlS,EAAM0rI,eAAeltI,QAAQjC,EAAM6K,SAC7B,CACd,IAAI07F,EAAO9iG,EAAM0rI,eAAex5H,GAChC4wF,EAAKwjB,QACLxjB,EAAK3gG,QACLnC,EAAMq9iB,aAAenriB,SAI5B,IAAsB,KAAlB3V,EAAMwrB,SAAoC,KAAlBxrB,EAAMwrB,UACU,SAAzC/nB,EAAMy+iB,iBAAiB95iB,MAAM4xC,QAAoB,CACjD,IAAIrkC,OAAQ,EACRjR,OAAU,EACQ,KAAlB1E,EAAMwrB,QACF/nB,EAAMq9iB,aAAe,EACjBr9iB,EAAMq9iB,aAAe,EAAIr9iB,EAAM0rI,eAAehvI,UAC9CuE,EAAUjB,EAAM0rI,eAAe1rI,EAAMq9iB,aAAe,IAC5Cl7iB,QACRnC,EAAMq9iB,aAAer9iB,EAAMq9iB,aAAe,IAI9CnriB,EAASlS,EAAM0rI,eAAehvI,OAASsD,EAAMy+iB,iBAAiBpkiB,SAAS3d,OAAUsD,EAAM2wL,QAAQ2zC,aAAe,GAClGtkO,EAAM0rI,eAAehvI,UAC7BuE,EAAUjB,EAAM0rI,eAAex5H,IACvB/P,QACRnC,EAAMq9iB,aAAenriB,GAKzBlS,EAAMq9iB,aAAe,IACrBnriB,EAAQlS,EAAMq9iB,aAAe,GAC7Bp8iB,EAAUjB,EAAM0rI,eAAex5H,IACvB/P,QACRnC,EAAMq9iB,aAAenriB,KAUzCjS,KAAKy/iB,qBAAuB,WACN1/iB,EAAM8ohB,YAAxB,IACI03B,EAAWxgjB,EAAMo+iB,YAAYnhjB,MAC7Bm/iB,EAAcp8iB,EAAMqgjB,YAAYpjjB,MAChC0zL,EAAU3wL,EAAMq6e,OAAOkV,MAAMlL,aAAa+2D,kBAC9C,GAAiB,KAAboF,IAAoB9ijB,EAAkB8ijB,IACF,MAAhCxgjB,EAAMq6e,OAAOkV,MAAM1/a,UAAmB,CACtC,IAAI4we,EAAgBzgjB,EAAMq6e,OAAOkV,MAAM1/a,UAAUnjD,KAC5C1sB,EAAMq6e,OAAOkV,MAAM1/a,UAAU0qK,QAOlC,IAAI5rO,EAAU3O,EAAMq6e,OAAOkV,MAAMlL,aAAa82D,WAAWpB,cAAcyG,EAAUxgjB,EAAM45iB,YAEnF1niB,EADelS,EAAMq6e,OAAOxqa,UAAUryE,MACjBg6hB,+BACrBx4hB,EAASgB,EAAMq6e,OAAOkV,MAAMlL,aAAa82D,WAAWtB,SAASlriB,EAAS3O,EAAM45iB,WAAY1niB,GAO5F,QANe9W,IAAX4D,IACAgB,EAAMq6e,OAAOkV,MAAMlL,aAAai3D,SAASt8iB,GACzCgB,EAAM+/iB,SAASp7iB,MAAM4xC,QAAU,QAEnCo6I,EAAQ4oX,YACR5oX,EAAQ2oX,UAAU,GAAKt6iB,EAClBtB,EAAkBsB,GAqBnBgB,EAAM+/iB,SAASp7iB,MAAM4xC,QAAU,QAC/Bv2C,EAAM+/iB,SAAS99iB,UAAYjC,EAAMu+iB,YAAYvqe,YAAYh0E,EAAMy9iB,0BArB/D,GAAIz+iB,EAAO0tB,OAAS+zhB,EAAe,CAC/B,IAAIjxiB,EAAU9R,EAAkB0+iB,GAAe,GAAKA,EACpDp8iB,EAAMq6e,OAAOkV,MAAMlL,aAAa70e,QAAQA,EAASxQ,EAAQ2xL,GACzD,IAAI93F,EAAY74F,EAAMq6e,OAAOkV,MAAMlL,aAAa82D,WAAWpB,cAAcyG,EAAUxgjB,EAAM45iB,YAErF7qK,EADiB/uY,EAAMq6e,OAAOxqa,UAAU/wD,IACf04gB,+BAC7Bx4hB,EAASgB,EAAMq6e,OAAOkV,MAAMlL,aAAa82D,WAAWtB,SAAShhd,EAAW74F,EAAM45iB,WAAY7qK,GAC1Fp+M,EAAQ4oX,YACR5oX,EAAQ2oX,UAAU,GAAKt6iB,OACR5D,IAAX4D,GACAgB,EAAM+/iB,SAASp7iB,MAAM4xC,QAAU,OAC/Bv2C,EAAMq6e,OAAOkV,MAAMlL,aAAai3D,SAASt8iB,KAGzCgB,EAAM+/iB,SAASp7iB,MAAM4xC,QAAU,QAC/Bv2C,EAAM+/iB,SAAS99iB,UAAYjC,EAAMu+iB,YAAYvqe,YAAYh0E,EAAMy9iB,uBAUnFz9iB,EAAMy+iB,iBAAiB95iB,MAAM4xC,QAAU,QAM3Ct2C,KAAK2/iB,wBAA0B,WAC3B5/iB,EAAMy7iB,aACNz7iB,EAAMy+iB,iBAAiB95iB,MAAM4xC,QAAU,QAM3Ct2C,KAAKg/iB,wBAA0B,WAE3B,IAAIhjf,EAAex7D,SAASosB,eAAe7sB,EAAMq6e,OAAOkV,MAAMh9W,YAAc,2BAExE7lH,EAAOuvC,EAAah/D,MACxB,GAAa,KAATyvB,EAAJ,CAGA,GAAI1sB,EAAMg/iB,WAAWj7iB,UAAUK,SAAS,6BAYpC,OAXApE,EAAMg/iB,WAAWj7iB,UAAUM,IAAI,uBAC/BrE,EAAMg/iB,WAAWj7iB,UAAUS,OAAO,6BAClCy3D,EAAah/D,MAAQ,GACrB+C,EAAMs+iB,WAAWr8iB,UAAYjC,EAAMu+iB,YAAYvqe,YAAY,cAC3Dh0E,EAAMw+iB,gBAAgB75iB,MAAM4xC,QAAU,QACtCv2C,EAAMy+iB,iBAAiB95iB,MAAM4xC,QAAU,OACvCv2C,EAAM0+iB,oBACN1+iB,EAAMy+iB,iBAAiBx8iB,UAAY,GACnCjC,EAAMk+iB,yBACNl+iB,EAAMy4iB,4BACNz4iB,EAAMq6e,OAAO+xC,qBAGbpshB,EAAMg/iB,WAAWj7iB,UAAUK,SAAS,wBAA0BsoB,EAAKhwB,QAAU,IAC7EsD,EAAMg/iB,WAAWj7iB,UAAUM,IAAI,6BAC/BrE,EAAMg/iB,WAAWj7iB,UAAUS,OAAO,uBAClCxE,EAAMs/iB,gCAEVt/iB,EAAMk+iB,yBACNl+iB,EAAMy4iB,uBACN,IAAIiI,EAAW1gjB,EAAMq6e,OAAOkV,MAAMlL,aAAa82D,WAAWpB,cAAcrthB,EAAM1sB,EAAM45iB,YAEhF1niB,EADelS,EAAMq6e,OAAOxqa,UAAU/wD,IACjB04gB,+BAEzB,GADAx3hB,EAAM2wL,QAAU3wL,EAAMq6e,OAAOkV,MAAMlL,aAAa82D,WAAWb,QAAQoG,EAAU1gjB,EAAM45iB,WAAY1niB,GAC1E,MAAjBlS,EAAM2wL,SAAmB3wL,EAAM2wL,QAAQj0L,OAAS,EAAG,CACnDsD,EAAMq+iB,uBACNr+iB,EAAMogjB,sBACN,IAAIO,EAAyB3gjB,EAAMq6e,OAAOkV,MAAMrS,2BAA2Bvrc,aAAe,IAC1F3xC,EAAMy+iB,iBAAiB95iB,MAAMqR,OAAS2qiB,EAAyB,UAG/D3gjB,EAAMs+iB,WAAWr8iB,UAAYjC,EAAMu+iB,YAAYvqe,YAAY,cAC3Dh0E,EAAMw+iB,gBAAgB75iB,MAAM4xC,QAAU,QACtCv2C,EAAMy+iB,iBAAiB95iB,MAAM4xC,QAAU,OACvCv2C,EAAM0+iB,oBACN1+iB,EAAMy+iB,iBAAiBx8iB,UAAY,KAO3ChC,KAAKk/iB,8BAAgC,WACjC,GAAuF,MAAnF1+iB,SAASosB,eAAe7sB,EAAMq6e,OAAOkV,MAAMh9W,YAAc,wBACyC,SAAlG9xI,SAASosB,eAAe7sB,EAAMq6e,OAAOkV,MAAMh9W,YAAc,uBAAuB5tI,MAAM4xC,QAAoB,CAC1G,GAAIv2C,EAAM2wL,QAAQ2zC,aAAetkO,EAAM2wL,QAAQj0L,OAAS,EAAG,CACvDsD,EAAM2wL,QAAQ2zC,aAAetkO,EAAM2wL,QAAQ2zC,aAAe,EAC1D,IAAIs8U,EAAiB5gjB,EAAM2wL,QAAQ2oX,UAAUt5iB,EAAM2wL,QAAQ2zC,cAE3DtkO,EAAMs+iB,WAAWr8iB,UAAYjC,EAAMu+iB,YAAYvqe,YAAY,YAAch0E,EAAM2wL,QAAQ2zC,aAAe,GAAKtkO,EAAMu+iB,YAAYvqe,YAAY,QAAUh0E,EAAM2wL,QAAQj0L,OACjK,IAAK,IAAIN,EAAI,EAAGA,EAAI4D,EAAMy+iB,iBAAiBpkiB,SAAS3d,OAAQN,IAAK,CAC7D,IAAI0mG,EAAO9iG,EAAMy+iB,iBAAiBpkiB,SAASje,GACvC0mG,EAAK/+F,UAAUK,SAAS,6BACxB0+F,EAAK/+F,UAAUS,OAAO,2BACtBs+F,EAAKzoF,SAAS,GAAGtW,UAAUS,OAAO,4BAClCs+F,EAAK/+F,UAAUM,IAAI,4BAG3B,IAAIqkM,EAAc1oM,EAAMy+iB,iBAAiBpkiB,SAASra,EAAM2wL,QAAQ2zC,cAC5D57B,EAAY3kM,UAAUK,SAAS,6BAC/BskM,EAAY3kM,UAAUS,OAAO,2BAC7BkkM,EAAY3kM,UAAUM,IAAI,2BAC1BqkM,EAAYruL,SAAS,GAAGtW,UAAUM,IAAI,4BACtCrE,EAAM0lhB,iBAAiBh9U,IAE3B1oM,EAAMq6e,OAAOkV,MAAMlL,aAAai3D,SAASsF,GACzC5gjB,EAAMq6e,OAAOkV,MAAMlL,aAAalhJ,UAAUnjW,EAAM2wL,aAE/C,CACGiwX,EAAiB5gjB,EAAM2wL,QAAQ2oX,UAAU,GAC7Ct5iB,EAAM2wL,QAAQ2zC,aAAe,EAE7BtkO,EAAMs+iB,WAAWr8iB,UAAYjC,EAAMu+iB,YAAYvqe,YAAY,YAAch0E,EAAM2wL,QAAQ2zC,aAAe,GAAKtkO,EAAMu+iB,YAAYvqe,YAAY,QAAUh0E,EAAM2wL,QAAQj0L,OACjK,IAAK,IAAI8mB,EAAI,EAAGA,EAAIxjB,EAAMy+iB,iBAAiBpkiB,SAAS3d,OAAQ8mB,IAAK,CAC7D,IAAI+4P,EAAQv8Q,EAAMy+iB,iBAAiBpkiB,SAASmJ,GACxC+4P,EAAMx4Q,UAAUK,SAAS,6BACzBm4Q,EAAMx4Q,UAAUS,OAAO,2BACvB+3Q,EAAMliQ,SAAS,GAAGtW,UAAUS,OAAO,4BACnC+3Q,EAAMx4Q,UAAUM,IAAI,4BAG5B,IAAIw8iB,EAAkB7gjB,EAAMy+iB,iBAAiBpkiB,SAASra,EAAM2wL,QAAQ2zC,cAChEu8U,EAAgB98iB,UAAUK,SAAS,6BACnCy8iB,EAAgB98iB,UAAUS,OAAO,2BACjCq8iB,EAAgB98iB,UAAUM,IAAI,2BAC9Bw8iB,EAAgBxmiB,SAAS,GAAGtW,UAAUM,IAAI,4BAC1CrE,EAAM0lhB,iBAAiBm7B,IAE3B7gjB,EAAMq6e,OAAOkV,MAAMlL,aAAai3D,SAASsF,GACzC5gjB,EAAMq6e,OAAOkV,MAAMlL,aAAalhJ,UAAUnjW,EAAM2wL,SAEpD3wL,EAAMq9iB,aAAer9iB,EAAM0rI,eAAeltI,QAAQwB,EAAMk/iB,wBAOhEj/iB,KAAKo/iB,kCAAoC,WACrC,GAAuF,MAAnF5+iB,SAASosB,eAAe7sB,EAAMq6e,OAAOkV,MAAMh9W,YAAc,wBACyC,SAAlG9xI,SAASosB,eAAe7sB,EAAMq6e,OAAOkV,MAAMh9W,YAAc,uBAAuB5tI,MAAM4xC,QAAoB,CAC1G,GAAmC,IAA/Bv2C,EAAM2wL,QAAQ2zC,aAAoB,CAClCtkO,EAAM2wL,QAAQ2zC,aAAetkO,EAAM2wL,QAAQj0L,OAAS,EAEpDsD,EAAMs+iB,WAAWr8iB,UAAYjC,EAAMu+iB,YAAYvqe,YAAY,WAAch0E,EAAM2wL,QAAc,OAAI3wL,EAAMu+iB,YAAYvqe,YAAY,QAAUh0E,EAAM2wL,QAAQj0L,OACvJ,IAAK,IAAIwV,EAAQ,EAAGA,EAAQlS,EAAMy+iB,iBAAiBpkiB,SAAS3d,OAAQwV,IAAS,EACrE4wF,EAAO9iG,EAAMy+iB,iBAAiBpkiB,SAASnI,IAClCnO,UAAUK,SAAS,6BACxB0+F,EAAK/+F,UAAUS,OAAO,2BACtBs+F,EAAKzoF,SAAS,GAAGtW,UAAUS,OAAO,4BAClCs+F,EAAK/+F,UAAUM,IAAI,4BAG3B,IAAI+2I,EAAYp7I,EAAMy+iB,iBAAiBpkiB,SAASra,EAAM2wL,QAAQ2zC,cAC1DlpF,EAAUr3I,UAAUK,SAAS,6BAC7Bg3I,EAAUr3I,UAAUS,OAAO,2BAC3B42I,EAAUr3I,UAAUM,IAAI,2BACxB+2I,EAAU/gI,SAAS,GAAGtW,UAAUM,IAAI,4BACpCrE,EAAM0lhB,iBAAiBtqY,IAE3B,IAAIwla,EAAiB5gjB,EAAM2wL,QAAQ2oX,UAAUt5iB,EAAM2wL,QAAQ2zC,cAC3DtkO,EAAMq6e,OAAOkV,MAAMlL,aAAai3D,SAASsF,GACzC5gjB,EAAMq6e,OAAOkV,MAAMlL,aAAalhJ,UAAUnjW,EAAM2wL,aAE/C,CAED3wL,EAAMs+iB,WAAWr8iB,UAAYjC,EAAMu+iB,YAAYvqe,YAAY,WAAch0E,EAAM2wL,QAAoB,aAAI3wL,EAAMu+iB,YAAYvqe,YAAY,QAAUh0E,EAAM2wL,QAAQj0L,OAC7JsD,EAAM2wL,QAAQ2zC,aAAetkO,EAAM2wL,QAAQ2zC,aAAe,EAC1D,IAAK,IAAI9gN,EAAI,EAAGA,EAAIxjB,EAAMy+iB,iBAAiBpkiB,SAAS3d,OAAQ8mB,IAAK,CAC7D,IAAIs/E,GAAAA,EAAO9iG,EAAMy+iB,iBAAiBpkiB,SAASmJ,IAClCzf,UAAUK,SAAS,6BACxB0+F,EAAK/+F,UAAUS,OAAO,2BACtBs+F,EAAKzoF,SAAS,GAAGtW,UAAUS,OAAO,4BAClCs+F,EAAK/+F,UAAUM,IAAI,4BAG3B,IAAIy8iB,EAAe9gjB,EAAMy+iB,iBAAiBpkiB,SAASra,EAAM2wL,QAAQ2zC,cAC7Dw8U,EAAa/8iB,UAAUK,SAAS,6BAChC08iB,EAAa/8iB,UAAUS,OAAO,2BAC9Bs8iB,EAAa/8iB,UAAUM,IAAI,2BAC3By8iB,EAAazmiB,SAAS,GAAGtW,UAAUM,IAAI,4BACvCrE,EAAM0lhB,iBAAiBo7B,IAEvBF,EAAiB5gjB,EAAM2wL,QAAQ2oX,UAAUt5iB,EAAM2wL,QAAQ2zC,cAC3DtkO,EAAMq6e,OAAOkV,MAAMlL,aAAai3D,SAASsF,GACzC5gjB,EAAMq6e,OAAOkV,MAAMlL,aAAalhJ,UAAUnjW,EAAM2wL,SAEpD3wL,EAAMq9iB,aAAer9iB,EAAM0rI,eAAeltI,QAAQwB,EAAMo/iB,4BAQhEn/iB,KAAKyje,UAAY,SAAUnne,GACvB,IAAI2sB,EAAO3sB,EAAMq6G,OAASr6G,EAAMwrB,QACnB,KAATmB,GAAiC,IAAlB3sB,EAAMwrB,SAAmC,KAAlBxrB,EAAMwrB,SAC5CxrB,EAAMkpB,iBACNzlB,EAAMigjB,QAAQt7iB,MAAMqR,OAAS,GAC7BhW,EAAM6mhB,qBAEQ,IAAT39f,GAAkD,IAAnClpB,EAAMo+iB,YAAYnhjB,MAAMP,OAC5CsD,EAAMw+iB,gBAAgB75iB,MAAM4xC,QAAU,QAEf,IAAlBh6C,EAAMwrB,SAAmC,KAAlBxrB,EAAMwrB,SAAoC,KAAlBxrB,EAAMwrB,SAC1D/nB,EAAMy4iB,uBACNz4iB,EAAMk+iB,yBACNl+iB,EAAMq6e,OAAO+xC,qBACbpshB,EAAMy+iB,iBAAiB95iB,MAAM4xC,QAAU,OACvCv2C,EAAMs+iB,WAAWr8iB,UAAYjC,EAAMu+iB,YAAYvqe,YAAY,cAC3Dh0E,EAAMw+iB,gBAAgB75iB,MAAM4xC,QAAU,OACtCv2C,EAAM0+iB,oBACN1+iB,EAAMy+iB,iBAAiBx8iB,UAAY,GAC/BjC,EAAMg/iB,WAAWj7iB,UAAUK,SAAS,+BACpCpE,EAAMg/iB,WAAWj7iB,UAAUM,IAAI,uBAC/BrE,EAAMg/iB,WAAWj7iB,UAAUS,OAAO,+BAGxB,KAAT0kB,GAAiC,KAAlB3sB,EAAMwrB,SAC1B/nB,EAAMy7e,qBAAoB,IAOlCx7e,KAAKiC,MAAQ,WACTlC,EAAM0+iB,oBACN1+iB,EAAMy7e,qBAAoB,GAC1Bz7e,EAAMy+iB,iBAAiBx8iB,UAAY,GACnCjC,EAAMq9iB,aAAe,EACrBr9iB,EAAMs9iB,eAAgB,GAO1Br9iB,KAAKs/iB,qBAAuB,SAAUr/iB,GAIlC,IAAK,IAHD6gjB,EAAc7gjB,EAAKkH,OACnBnG,EAAUjB,EAAMy+iB,iBAAiBpkiB,SACjCnI,EAAQ,EACH9V,EAAI,EAAGA,EAAI6E,EAAQvE,OAAQN,IAAK,CACrC,IAAI4kjB,EAAS//iB,EAAQ7E,GACjB4kjB,EAAOj9iB,UAAUK,SAAS,6BAC1B48iB,EAAOj9iB,UAAUS,OAAO,2BACxBw8iB,EAAO3miB,SAAS,GAAGtW,UAAUS,OAAO,4BACpCw8iB,EAAOj9iB,UAAUM,IAAI,4BAIxB,IADDy+F,EACJ,IAAS1mG,EAAI,EAAGA,EAAI6E,EAAQvE,OAAQN,IAC5B2kjB,IAAgB9/iB,EAAQ7E,KACxB8V,EAAQ9V,GACR0mG,EAAO7hG,EAAQ7E,IACN2H,UAAUK,SAAS,6BACxB0+F,EAAK/+F,UAAUS,OAAO,2BACtBs+F,EAAK/+F,UAAUM,IAAI,2BACnBy+F,EAAKzoF,SAAS,GAAGtW,UAAUM,IAAI,4BAC/BrE,EAAMq9iB,aAAer9iB,EAAM0rI,eAAeltI,QAAQskG,KAI9D,IAAI89c,EAAiB5gjB,EAAM2wL,QAAQ2oX,UAAUpniB,GAC7ClS,EAAM2wL,QAAQ2zC,aAAepyN,EAE7BlS,EAAMs+iB,WAAWr8iB,UAAYjC,EAAMu+iB,YAAYvqe,YAAY,YAAc9hE,EAAQ,GAAKlS,EAAMu+iB,YAAYvqe,YAAY,QAAUh0E,EAAM2wL,QAAQj0L,OAC5IsD,EAAMq6e,OAAOkV,MAAMlL,aAAai3D,SAASsF,GACzC5gjB,EAAMq6e,OAAOkV,MAAMlL,aAAalhJ,UAAUnjW,EAAM2wL,SAChD7tF,EAAK3gG,SAETlC,KAAKo6e,OAASuiE,EAwnBlB,OAnnBA17D,EAAY5lf,UAAUkkC,cAAgB,WAClC,MAAO,eAQX0hd,EAAY5lf,UAAUogf,gBAAkB,SAAU6iE,GACjCt+iB,KAAKo6e,OAClBp6e,KAAKs+iB,YAAcA,EACnBt+iB,KAAK6ohB,YAAc1nhB,EAAc,OAASkC,UAAW,UAAWE,OAAQ,kBACxEvD,KAAK6ohB,YAAYnshB,iBAAiB,UAAWsD,KAAKqgjB,uBAClDrgjB,KAAKwqd,UAAYrpd,EAAc,OAC3BkC,UAAWrD,KAAKo6e,OAAOkV,MAAMh9W,YAAc,4BAC3CtwI,UAAWs8iB,EAAYvqe,YAAY/zE,KAAK88iB,cAE5C98iB,KAAK6ohB,YAAYlnhB,YAAY3B,KAAKwqd,WAElCxqd,KAAKu/iB,YAAcp+iB,EAAc,UAAYkC,UAAW,gEAAiEC,GAAI,UAC7HtD,KAAK6ohB,YAAYlnhB,YAAY3B,KAAKu/iB,aAClC,IAAIyB,EAAY7/iB,EAAc,QAAUkC,UAAW,0CACnDrD,KAAKu/iB,YAAY59iB,YAAYq/iB,GAC7BhhjB,KAAKyrI,eAAejnI,KAAKxE,KAAKu/iB,aAC9Bv/iB,KAAKihjB,QAAU9/iB,EAAc,OAASmC,GAAItD,KAAKo6e,OAAOkV,MAAMh9W,YAAc,cAAejvI,UAAW,gBACpGrD,KAAK6ohB,YAAYlnhB,YAAY3B,KAAKihjB,SAClC,IAAIC,EAAY//iB,EAAc,OAASkC,UAAW,iBAClDrD,KAAKihjB,QAAQt/iB,YAAYu/iB,GACzBlhjB,KAAKmhjB,cAAgBhgjB,EAAc,OAASa,UAAWs8iB,EAAYvqe,YAAY/zE,KAAKu9iB,gBACpFv9iB,KAAKyrI,eAAejnI,KAAKxE,KAAKigjB,qBAC9BiB,EAAUv/iB,YAAY3B,KAAKmhjB,eAC3BnhjB,KAAKohjB,iBAAmBjgjB,EAAc,OAASa,UAAWs8iB,EAAYvqe,YAAY/zE,KAAKs9iB,mBACvFt9iB,KAAKyrI,eAAejnI,KAAKxE,KAAKkgjB,wBAC9BgB,EAAUv/iB,YAAY3B,KAAKohjB,kBAC3B,IAAIC,EAAalgjB,EAAc,OAASkC,UAAW,cAC/Ci+iB,EAAiBngjB,EAAc,OAASmC,GAAI,mBAChD+9iB,EAAW1/iB,YAAY2/iB,GACvBthjB,KAAKuhjB,kBAAoBpgjB,EAAc,OAASkC,UAAW,4BAC3DrD,KAAKwhjB,uBAAyBrgjB,EAAc,OAASkC,UAAW,sCAChErD,KAAKuhjB,kBAAkB5/iB,YAAY3B,KAAKwhjB,wBAExCxhjB,KAAKm+iB,YAAch9iB,EAAc,SAAWkC,UAAW,4BAA6BC,GAAItD,KAAKo6e,OAAOkV,MAAMh9W,YAAc,0BAA2B7uI,OAASqjB,YAAa,cAAgBvjB,OAAQ,oBACjMvD,KAAKwhjB,uBAAuB7/iB,YAAY3B,KAAKm+iB,aAC7Cn+iB,KAAK++iB,WAAa59iB,EAAc,QAC5BkC,UAAW,6DACXC,GAAItD,KAAKo6e,OAAOkV,MAAMh9W,YAAc,iBAExCtyI,KAAK++iB,WAAW91b,SAAW,EAC3BjpH,KAAKwhjB,uBAAuB7/iB,YAAY3B,KAAK++iB,YAC7C/+iB,KAAKyrI,eAAejnI,KAAKxE,KAAK++iB,YAE9B/+iB,KAAKm/iB,yBAA2Bh+iB,EAAc,QAAUkC,UAAW,2FACnErD,KAAKm/iB,yBAAyBl2b,SAAW,EACzCjpH,KAAKwhjB,uBAAuB7/iB,YAAY3B,KAAKm/iB,0BAC7Cn/iB,KAAKyrI,eAAejnI,KAAKxE,KAAKm/iB,0BAE9Bn/iB,KAAKi/iB,qBAAuB99iB,EAAc,QAAUkC,UAAW,+FAC/DrD,KAAKi/iB,qBAAqBh2b,SAAW,EACrCjpH,KAAKwhjB,uBAAuB7/iB,YAAY3B,KAAKi/iB,sBAC7Cj/iB,KAAKyrI,eAAejnI,KAAKxE,KAAKi/iB,sBAC9B,IAAI/9iB,EAAMC,EAAc,OAASkC,UAAW,sBAC5CrD,KAAK2+iB,WAAax9iB,EAAc,SAC5BsC,OAASiD,KAAM,YACfpD,GAAItD,KAAKo6e,OAAOkV,MAAMh9W,YAAc,eAExCpxI,EAAIS,YAAY3B,KAAK2+iB,YACrB3+iB,KAAKgkE,UAAY,IAAI66C,IAAWxrG,MAAO,aAAcb,SAAS,EAAO4N,OAAQpgB,KAAK6+iB,cAClF7+iB,KAAKgkE,UAAU3tB,SAASr2C,KAAK2+iB,YAC7B3+iB,KAAKyrI,eAAejnI,KAAKxE,KAAK2+iB,YAC9B3+iB,KAAK2+iB,WAAW11b,SAAW,EAC3BjpH,KAAK4+iB,WAAaz9iB,EAAc,SAC5BsC,OAASiD,KAAM,YACfpD,GAAItD,KAAKo6e,OAAOkV,MAAMh9W,YAAc,eAExCpxI,EAAIS,YAAY3B,KAAK4+iB,YACrB5+iB,KAAK48iB,UAAY,IAAI/9b,IAAWxrG,MAAO,cAAeb,SAAS,EAAO4N,OAAQpgB,KAAK0+iB,mBACnF1+iB,KAAK48iB,UAAUvmgB,SAASr2C,KAAK4+iB,YAC7B5+iB,KAAKyrI,eAAejnI,KAAKxE,KAAK4+iB,YAC9B5+iB,KAAK4+iB,WAAW31b,SAAW,EAC3BjpH,KAAKuhjB,kBAAkB5/iB,YAAYT,GACnC,IAAIugjB,EAAoBtgjB,EAAc,OACtCkgjB,EAAW1/iB,YAAY8/iB,GACvBzhjB,KAAK+/iB,qBAAuB5+iB,EAAc,OAASkC,UAAW,+BAAgCE,OAAQ,kBACtG89iB,EAAW1/iB,YAAY3B,KAAK+/iB,sBAC5B//iB,KAAKuhjB,kBAAkB5/iB,YAAY3B,KAAK+/iB,sBACxC//iB,KAAK0hjB,oBACL1hjB,KAAKggjB,QAAU7+iB,EAAc,OAASkC,UAAW,UAAWE,OAAQ,gCACpE+9iB,EAAe3/iB,YAAY3B,KAAKuhjB,mBAChCvhjB,KAAKu+iB,gBAAkBp9iB,EAAc,OAASoC,OAAQ,2BAA4BF,UAAW,6BAC7FrD,KAAKggjB,QAAQr+iB,YAAY3B,KAAKu+iB,iBAE9Bv+iB,KAAKq+iB,WAAal9iB,EAAc,OAASkC,UAAWrD,KAAKo6e,OAAOkV,MAAMh9W,YAAc,0BAA2BtwI,UAAWhC,KAAKs+iB,YAAYvqe,YAAY/zE,KAAKg9iB,gBAAiB15iB,GAAItD,KAAKo6e,OAAOkV,MAAMh9W,YAAc,mBACjNtyI,KAAKu+iB,gBAAgB58iB,YAAY3B,KAAKq+iB,YAEtCr+iB,KAAKw+iB,iBAAmBr9iB,EAAc,OAASmC,GAAItD,KAAKo6e,OAAOkV,MAAMh9W,YAAc,sBAAuB/uI,OAAQ,4EAA6EF,UAAW,2BAC1MrD,KAAKggjB,QAAQr+iB,YAAY3B,KAAKw+iB,kBAC9Bx+iB,KAAKuhjB,kBAAkB5/iB,YAAY3B,KAAKggjB,SACxChgjB,KAAKihjB,QAAQt/iB,YAAY0/iB,GACzBrhjB,KAAK09iB,YAAc,IAAI3+P,IAAMvvK,SAAUxvI,KAAK29iB,kBAC5C39iB,KAAK09iB,YAAYrngB,SAASr2C,KAAKihjB,SAC/B,IAAI78M,EAAapkW,KAAK09iB,YAAY18iB,QAAQ0M,uBAAuB,yBAAyB,GAC1F1N,KAAKigjB,oBAAsB77M,EAAW12V,uBAAuB,cAAc,GAC3E1N,KAAKigjB,oBAAoBn8iB,UAAUM,IAAI,2BACvCpE,KAAKigjB,oBAAoBh3b,SAAW,EACpC,IAAI04b,EAAgB3hjB,KAAK09iB,YAAY18iB,QAAQ0M,uBAAuB,yBAAyB,GAC7F1N,KAAKkgjB,uBAAyByB,EAAcj0iB,uBAAuB,cAAc,GACjF1N,KAAKkgjB,uBAAuBp8iB,UAAUM,IAAI,8BAC1CpE,KAAKkgjB,uBAAuBj3b,SAAW,EACvCjpH,KAAK8+iB,gBAKT79D,EAAY5lf,UAAUqmjB,kBAAoB,WACtC1hjB,KAAK4/iB,WAAaz+iB,EAAc,OAChCnB,KAAK+/iB,qBAAqBp+iB,YAAY3B,KAAK4/iB,YAC3C5/iB,KAAKogjB,YAAcj/iB,EAAc,SAC7BkC,UAAW,8BAA+BE,OAAQ,kBAClDE,OAASqjB,YAAa,kBAE1B9mB,KAAK4/iB,WAAWj+iB,YAAY3B,KAAKogjB,aACjC,IAAIwB,EAAmBzgjB,EAAc,OAASoC,OAAQ,oBAAqBF,UAAW,uBACtFrD,KAAK4/iB,WAAWj+iB,YAAYigjB,GAC5B5hjB,KAAKw/iB,cAAgBr+iB,EAAc,UAC/BkC,UAAW,mCACXE,OAAQ,oCACRvB,UAAWhC,KAAKs+iB,YAAYvqe,YAAY/zE,KAAKi9iB,qBAEjD2E,EAAiBjgjB,YAAY3B,KAAKw/iB,eAClCx/iB,KAAK0/iB,iBAAmBv+iB,EAAc,UAClCkC,UAAW,sCACXE,OAAQ,kBACRvB,UAAWhC,KAAKs+iB,YAAYvqe,YAAY/zE,KAAKk9iB,wBAEjD0E,EAAiBjgjB,YAAY3B,KAAK0/iB,kBAClC1/iB,KAAK8/iB,SAAW3+iB,EAAc,OAASoC,OAAQ,mCAC/CvD,KAAK4/iB,WAAWj+iB,YAAY3B,KAAK8/iB,UACjC,IAAI+B,EAAY1gjB,EAAc,OAASkC,UAAW,8BAClDrD,KAAK4/iB,WAAWj+iB,YAAYkgjB,GAC5B7hjB,KAAK6/iB,cAAgB1+iB,EAAc,OAASoC,OAAQ,kBACpDvD,KAAK4/iB,WAAWj+iB,YAAY3B,KAAK6/iB,gBAErC5+D,EAAY5lf,UAAU+ijB,qBAAuB,WACzCp+iB,KAAKo6e,OAAOkV,MAAMlL,aAAai3D,SAASr7iB,KAAK0wL,QAAQ2oX,UAAUr5iB,KAAK0wL,QAAQ2zC,eAC5ErkO,KAAKo6e,OAAOkV,MAAMlL,aAAalhJ,UAAUljW,KAAK0wL,SAC9C1wL,KAAKo6e,OAAOkV,MAAMlL,aAAay3D,kBAAkB77iB,KAAK0wL,SACtD1wL,KAAKw+iB,iBAAiB95iB,MAAM4xC,QAAU,QACtCt2C,KAAKu+iB,gBAAgB75iB,MAAM4xC,QAAU,QAGrC,IAAK,IAFDgmO,EAAQt8Q,KAAKo6e,OAAOkV,MAAM1jB,gBAC1Bn/c,EAAO,GACFtwB,EAAI,EAAGA,EAAImgR,EAAM7/Q,OAAQN,IAC9BswB,GAAQ6vP,EAAMngR,GAElB6D,KAAKy+iB,oBACLz+iB,KAAKw+iB,iBAAiBx8iB,UAAYyqB,EAClC,IAAStwB,EAAI,EAAGA,EAAI6D,KAAKw+iB,iBAAiBpkiB,SAAS3d,OAAQN,IACvD6D,KAAKyrI,eAAejnI,KAAKxE,KAAKw+iB,iBAAiBpkiB,SAASje,IAE5D,IAAI2ljB,EAAoB9hjB,KAAK0wL,QAAQ2zC,aAErCrkO,KAAKq+iB,WAAWr8iB,UAAYhC,KAAKs+iB,YAAYvqe,YAAY,YAAc+te,EAAoB,GAAK9hjB,KAAKs+iB,YAAYvqe,YAAY,QAAU/zE,KAAK0wL,QAAQj0L,OACpJ,IAAIgsM,EAAczoM,KAAKw+iB,iBAAiBpkiB,SAAS0niB,GAC7Cr5W,EAAY3kM,UAAUK,SAAS,6BAC/BskM,EAAY3kM,UAAUS,OAAO,2BAC7BkkM,EAAY3kM,UAAUM,IAAI,2BAC1BqkM,EAAYruL,SAAS,GAAGtW,UAAUM,IAAI,4BACtCpE,KAAKylhB,iBAAiBh9U,KAO9Bw4S,EAAY5lf,UAAUurhB,kBAAoB,WAEtC,IAAI5qd,EAAex7D,SAASosB,eAAe5sB,KAAKo6e,OAAOkV,MAAMh9W,YAAc,2BAC3Et2E,EAAakxE,OACb,IAAIzgH,EAAOuvC,EAAah/D,MACxB,GAAa,KAATyvB,EAAJ,CAGIA,EAAKhwB,QAAU,GAAKuD,KAAK++iB,WAAWj7iB,UAAUK,SAAS,yBACvDnE,KAAK++iB,WAAWj7iB,UAAUM,IAAI,6BAC9BpE,KAAK++iB,WAAWj7iB,UAAUS,OAAO,wBAErC,IAAIm8iB,EAAyB1gjB,KAAKo6e,OAAOkV,MAAMrS,2BAA2Bvrc,aAAe,IACzF1xC,KAAKi+iB,yBACLj+iB,KAAKw4iB,uBACL,IAAI9piB,EAAU1O,KAAKo6e,OAAOkV,MAAMlL,aAAa82D,WAAWpB,cAAcrthB,EAAMzsB,KAAK25iB,YAE7E1niB,EADejS,KAAKo6e,OAAOxqa,UAAU/wD,IAChB04gB,+BACzBv3hB,KAAK0wL,QAAU1wL,KAAKo6e,OAAOkV,MAAMlL,aAAa82D,WAAWb,QAAQ3riB,EAAS1O,KAAK25iB,WAAY1niB,GAC3F,IAAIy+K,EAAU1wL,KAAK0wL,QAInB,GAHIjzL,EAAkBizL,IAClB1wL,KAAKo6e,OAAO+xC,qBAED,MAAXz7V,GAAmBA,EAAQj0L,OAAS,EAAG,EAC8B,IAAhEuD,KAAKyrI,eAAeltI,QAAQyB,KAAKm/iB,2BAAqCn/iB,KAAKq9iB,eAC5Er9iB,KAAKyrI,eAAejnI,KAAKxE,KAAKm/iB,2BAE+B,IAA5Dn/iB,KAAKyrI,eAAeltI,QAAQyB,KAAKi/iB,uBAAiCj/iB,KAAKq9iB,eACxEr9iB,KAAKyrI,eAAejnI,KAAKxE,KAAKi/iB,sBAElCj/iB,KAAKo6e,OAAOkV,MAAMlL,aAAai3D,SAASr7iB,KAAK0wL,QAAQ2oX,UAAUr5iB,KAAK0wL,QAAQ2zC,eAC5ErkO,KAAKo6e,OAAOkV,MAAMlL,aAAalhJ,UAAUxyK,GACzC1wL,KAAKo6e,OAAOkV,MAAMlL,aAAay3D,kBAAkBnrX,GAEjD1wL,KAAKw+iB,iBAAiB95iB,MAAM4xC,QAAU,QACtCt2C,KAAKw+iB,iBAAiB95iB,MAAMqR,OAAS2qiB,EAAyB,KAC9D1gjB,KAAKu+iB,gBAAgB75iB,MAAM4xC,QAAU,QACrC,IAAIusD,EAAO7iG,KAAKo6e,OAAOkV,MAAM1jB,gBACzBrkS,EAAS,GACbvnM,KAAKy+iB,oBACLz+iB,KAAKw+iB,iBAAiBx8iB,UAAY,GAClC,IAAK,IAAI7F,EAAI,EAAGA,EAAI0mG,EAAKpmG,OAAQN,IAC7BorM,GAAU1kG,EAAK1mG,GAEnB6D,KAAKw+iB,iBAAiBx8iB,UAAYulM,EAClC,IAASprM,EAAI,EAAGA,EAAI6D,KAAKw+iB,iBAAiBpkiB,SAAS3d,OAAQN,IACvD6D,KAAKyrI,eAAejnI,KAAKxE,KAAKw+iB,iBAAiBpkiB,SAASje,IAEhD6D,KAAKw+iB,iBAAiBpkiB,SAAlC,IACIiqN,EAAerkO,KAAK0wL,QAAQ2zC,aAEhCrkO,KAAKq+iB,WAAWr8iB,UAAYhC,KAAKs+iB,YAAYvqe,YAAY,YAAcswJ,EAAe,GAAKrkO,KAAKs+iB,YAAYvqe,YAAY,QAAU/zE,KAAK0wL,QAAQj0L,OAC/I,IAAIgsM,EAAczoM,KAAKw+iB,iBAAiBpkiB,SAASiqN,GAC7C57B,EAAY3kM,UAAUK,SAAS,6BAC/BskM,EAAY3kM,UAAUS,OAAO,2BAC7BkkM,EAAY3kM,UAAUM,IAAI,2BAC1BqkM,EAAYruL,SAAS,GAAGtW,UAAUM,IAAI,6BAE1CpE,KAAKi/iB,qBAAqB/8iB,QAC1BlC,KAAKo9iB,aAAe,EACpBp9iB,KAAKmgjB,2BAMLngjB,KAAKq+iB,WAAWr8iB,UAAYhC,KAAKs+iB,YAAYvqe,YAAY,cACzD/zE,KAAKu+iB,gBAAgB75iB,MAAM4xC,QAAU,QACrCt2C,KAAKw+iB,iBAAiB95iB,MAAM4xC,QAAU,OACtCt2C,KAAKy+iB,oBACLz+iB,KAAKw+iB,iBAAiBx8iB,UAAY,KAG1Ci/e,EAAY5lf,UAAU8kjB,oBAAsB,YACnCngjB,KAAKq9iB,eAAiBr9iB,KAAKq+iB,WAAWv6iB,UAAUK,SAAS,gBAC1DnE,KAAKq+iB,WAAWv6iB,UAAUM,IAAI,8BAC9BpE,KAAKq+iB,WAAWv6iB,UAAUS,OAAO,gBAE5BvE,KAAKq9iB,eAAiBr9iB,KAAKq+iB,WAAWv6iB,UAAUK,SAAS,gCAC9DnE,KAAKq+iB,WAAWv6iB,UAAUM,IAAI,eAC9BpE,KAAKq+iB,WAAWv6iB,UAAUS,OAAO,gCAOzC08e,EAAY5lf,UAAUmgjB,WAAa,WACbx7iB,KAAK6ohB,YAAvB,IACI03B,EAAWvgjB,KAAKm+iB,YAAYnhjB,MAC5Bm/iB,EAAcn8iB,KAAKogjB,YAAYpjjB,MACnC,GAAiB,KAAbujjB,IAAoB9ijB,EAAkB8ijB,GAAW,CACjD,IAAI7xiB,EAAU1O,KAAKo6e,OAAOkV,MAAMlL,aAAa82D,WAAWpB,cAAcyG,EAAUvgjB,KAAK25iB,YAEjF1niB,EADejS,KAAKo6e,OAAOxqa,UAAU/wD,IAChB04gB,+BACrB7mW,EAAU1wL,KAAKo6e,OAAOkV,MAAMlL,aAAa82D,WAAWb,QAAQ3riB,EAAS1O,KAAK25iB,WAAY1niB,GACtF1C,EAAU9R,EAAkB0+iB,GAAe,GAAKA,EACpDn8iB,KAAKo6e,OAAOkV,MAAMlL,aAAao3D,WAAWjsiB,EAASmhL,GACnD1wL,KAAK8/iB,SAASp7iB,MAAM4xC,QAAU,QAC9Bt2C,KAAK8/iB,SAAS99iB,UAAYhC,KAAKs+iB,YAAYvqe,YAAY/zE,KAAKy9iB,wBAC5Dz9iB,KAAK6/iB,cAAcn7iB,MAAM4xC,QAAU,QACnC,IAAIx3B,EAAQrhB,EAAkBizL,GAAW,EAAIA,EAAQj0L,OAErDuD,KAAK6/iB,cAAc79iB,UAAYhC,KAAKm9iB,kBAAoBr+hB,EAAQ9e,KAAKs+iB,YAAYvqe,YAAY,mBAAqBwse,EAAWvgjB,KAAKs+iB,YAAYvqe,YAAY,YAAcooe,EAAc,OAQ9Ll7D,EAAY5lf,UAAUoqhB,iBAAmB,SAAU5ib,GAC/C,IACIn2F,EADA2mB,EAAOwvE,EAAKj3F,wBAEZynB,EAAK3mB,IAAM,GACXA,EAAM2mB,EAAK3mB,IAAMm2F,EAAKxuF,cAAczI,wBAAwBc,IACvDm2F,EAAKxuF,cAAcq9B,aAAehlC,GAAQm2F,EAAKnxD,cAC5CrlC,KAAKwmB,KAAKnmB,EAAMm2F,EAAKnxD,gBAAkBmxD,EAAKxuF,cAAco9S,eAC1D5uN,EAAKxuF,cAAclI,UAAYO,GAEnCm2F,EAAKxuF,cAAclI,UAAY02F,EAAKxuF,cAAclI,UAAa02F,EAAKxuF,cAAcq9B,aAAe,IAAO,IAEnGhlC,EAAM,IACXm2F,EAAKxuF,cAAclI,UAAY02F,EAAKxuF,cAAclI,UAAa02F,EAAKxuF,cAAcq9B,aAAe,IAAO,KAI5GmxD,EAAKxuF,cAAclI,UAAY,GAOvC80e,EAAY5lf,UAAUojjB,kBAAoB,WACtC,IAAK,IAAItijB,EAAI,EAAGA,EAAI6D,KAAKw+iB,iBAAiBpkiB,SAAS3d,OAAQN,IAAK,CAC5D,IAAI8V,EAAQjS,KAAKyrI,eAAeltI,QAAQyB,KAAKw+iB,iBAAiBpkiB,SAASje,KACxD,IAAX8V,GACAjS,KAAKyrI,eAAepjH,OAAOpW,EAAO,GAG1CjS,KAAKo9iB,aAAe,GAOxBn8D,EAAY5lf,UAAUmgf,oBAAsB,SAAUv3X,GAClD,IAAKxmH,EAAkBuC,KAAKo6e,OAAOkV,MAAMniL,iBACrC,GAAIlpN,EAAM,CAIN,GAHAjkH,KAAKs+iB,YAAc,IAAI9mc,GAAK,iBAAkBx3G,KAAKo6e,OAAOkV,MAAM3xE,eAChE39a,KAAKs+iB,YAAY3mc,UAAU33G,KAAKo6e,OAAOkV,MAAMthf,QAC7CL,GAAW3N,KAAKo6e,OAAOkV,MAAMthf,QACzBvQ,EAAkBuC,KAAK6ohB,aAAc,CACrC7ohB,KAAKy7e,gBAAgBz7e,KAAKs+iB,aAE1B,IAAIt9iB,EAAUR,SAASosB,eAAe5sB,KAAKo6e,OAAOkV,MAAMtuf,QAAQsC,IAC5Dy+iB,EAAsBvhjB,SAASW,cAAc,OACjD4gjB,EAAoB1+iB,UAAY,+BAChC0+iB,EAAoBv+iB,aAAa,QAAS,uBAC1Cu+iB,EAAoBpgjB,YAAY3B,KAAKo6e,OAAOkV,MAAMhU,kBAAkButC,aACpE7ohB,KAAKo6e,OAAOkV,MAAMrS,2BAA2Bt7e,YAAYogjB,GACzDA,EAAoBpgjB,YAAY3B,KAAKo6e,OAAOimC,iBAC5Cr/gB,EAAQW,YAAYogjB,GAExB/hjB,KAAK6ohB,YAAYnkhB,MAAM4xC,QAAU,QAC7Bt2C,KAAKo6e,OAAOkV,MAAMzR,eAClB79e,KAAK09iB,YAAY/3P,QAAQ,GAGzB3lT,KAAK09iB,YAAY/3P,QAAQ,GAAG,GAE5B3lT,KAAKghT,YAAchhT,KAAKo6e,OAAOkV,MAAMzR,gBACrC79e,KAAK09iB,YAAYj4iB,OAAO,GACxBzF,KAAKghT,WAAY,EACjBhhT,KAAKq9iB,eAAgB,GAGrBr9iB,KAAK09iB,YAAYj4iB,OAAO,GAE5BzF,KAAKwqd,UAAUxod,UAAYhC,KAAKs+iB,YAAYvqe,YAAY/zE,KAAK88iB,YAC7D98iB,KAAKu7e,mBAAoB,EAEzB,IAAI9wB,EAAUjqd,SAASosB,eAAe5sB,KAAKo6e,OAAOkV,MAAMrS,2BAA2B35e,GAAK,2BACpF0+iB,EAAehijB,KAAKo6e,OAAOkV,MAAM1/a,UAAUnjD,KAC/C,IAAKhvB,EAAkBukjB,GAAe,CAClC,IACI/viB,EAAQ04e,GAAcE,WAAWm3D,GADzB,KAAM,OAElBA,EAAe/viB,EAAQ,EAAI+viB,EAAeA,EAAa99hB,UAAU,EAAGjS,GAExEw4c,EAAQztd,MAAQgljB,EAChBv3F,EAAQhld,SACRzF,KAAKq+iB,WAAWr8iB,UAAY,GACxBhC,KAAK++iB,WAAWj7iB,UAAUK,SAAS,+BACnCnE,KAAK++iB,WAAWj7iB,UAAUM,IAAI,uBAC9BpE,KAAK++iB,WAAWj7iB,UAAUS,OAAO,8BAErCvE,KAAKo6e,OAAOxqa,UAAU+yb,MAAMj+f,MAAM4xC,QAAU,OAC5Ct2C,KAAKo9iB,aAAe,EACpBp9iB,KAAKyrI,kBACDzrI,KAAKq9iB,cAELr9iB,KAAKyrI,eAAejnI,KAAKxE,KAAKu/iB,YAAav/iB,KAAKigjB,oBAAqBjgjB,KAAKkgjB,uBAAwBlgjB,KAAKm+iB,YAAan+iB,KAAK++iB,WAAY/+iB,KAAKm/iB,yBAA0Bn/iB,KAAKi/iB,qBAAsBj/iB,KAAK2+iB,WAAY3+iB,KAAK4+iB,YAIrN5+iB,KAAKyrI,eAAejnI,KAAKxE,KAAKu/iB,YAAav/iB,KAAKigjB,oBAAqBjgjB,KAAKkgjB,uBAAwBlgjB,KAAKm+iB,YAAan+iB,KAAK++iB,WAAY/+iB,KAAKm/iB,yBAA0Bn/iB,KAAKi/iB,qBAAsBj/iB,KAAK2+iB,WAAY3+iB,KAAK4+iB,WAAY5+iB,KAAKogjB,YAAapgjB,KAAKw/iB,cAAex/iB,KAAK0/iB,kBAEhR1/iB,KAAKo6e,OAAO6H,uBAEX,CACD,IAAKxkf,EAAkBuC,KAAK6ohB,aAAc,CACtC7ohB,KAAKi+iB,yBACLj+iB,KAAKw4iB,uBACLx4iB,KAAKu7e,mBAAoB,EACzB,IAAI0mE,EAAgBzhjB,SAASosB,eAAe5sB,KAAKo6e,OAAOkV,MAAMh9W,YAAc,uBACxE3xI,EAAUH,SAASosB,eAAe5sB,KAAKo6e,OAAOkV,MAAMh9W,YAAc,kBACjE70I,EAAkBwkjB,IAAmBxkjB,EAAkBkD,KACxDshjB,EAAcv9iB,MAAM4xC,QAAU,OAC9Bt2C,KAAKy+iB,oBACLwD,EAAcjgjB,UAAY,GAC1BrB,EAAQqB,UAAYhC,KAAKs+iB,YAAYvqe,YAAY,eAGzD/zE,KAAKo6e,OAAO6H,mBACPxkf,EAAkBuC,KAAK6ohB,cACe,SAAnC7ohB,KAAK6ohB,YAAYnkhB,MAAM4xC,UACvBt2C,KAAKo6e,OAAOxqa,UAAU8wc,sBACtB1ghB,KAAK6ohB,YAAYnkhB,MAAM4xC,QAAU,QAGzCt2C,KAAKo6e,OAAO8H,cACZlif,KAAKo6e,OAAOxqa,UAAU+yb,MAAMj+f,MAAM4xC,QAAU,UAQxD2qc,EAAY5lf,UAAU6mjB,yBAA2B,SAAU7jD,GACvD,IAAI8jD,OAAehnjB,EACf6E,KAAKw9gB,mBAAmB/2S,YAAY43R,GACpC8jD,EAAenijB,KAAKw9gB,mBAAmB91gB,IAAI22f,IAG3C8jD,KACAnijB,KAAKw9gB,mBAAmBp5gB,IAAIi6f,EAAY8jD,IAE5C,IAAIC,EAAkB,IAAIrH,GAAiB,EAAG,GAE9C,OADAoH,EAAa39iB,KAAK49iB,GACXA,GAMXnhE,EAAY5lf,UAAU4ijB,uBAAyB,WACtCxgjB,EAAkBuC,KAAKo6e,OAAOkV,MAAM1jB,mBACrC5re,KAAKo6e,OAAOkV,MAAM1jB,qBAO1BqV,EAAY5lf,UAAUm9iB,qBAAuB,WACpC/6iB,EAAkBuC,KAAKw9gB,sBACxBx9gB,KAAKw9gB,mBAAmBxtd,QACxBhwD,KAAKw9gB,wBAAqBrihB,IAOlC8lf,EAAY5lf,UAAUsgjB,sBAAwB,SAAU94D,EAAWtlf,EAAOshB,GACtE,IAAI08gB,EAAsB,EACtB0B,EAAoB,EACpBqQ,EAAe,KACfC,EAAa,KAEblvC,EAAar+f,KAAKo6e,OAAOxqa,UAAU89d,mBAAmB7qD,EAAWtlf,EAAO+viB,EAAc/R,GAC1FA,EAAsBl9B,EAAWpsf,MAEjC,IAAIklgB,GADJm2B,EAAejvC,EAAWr9f,SACWssiB,EAAax/e,KAAO+0b,EAAUI,aAAa,GAC5E6oD,EAAU9riB,KAAKo6e,OAAOxqa,UAAUg+d,iBAAiB/uhB,EAAK0uhB,EAAYtQ,GACtEA,EAAoB6O,EAAQ75hB,MAE5B,IAAIu7hB,GADJD,EAAazB,EAAQ9qiB,SACYusiB,EAAWz/e,KACxCjvC,EAAIgke,UAAUI,aAAapke,EAAIgke,UAAUI,aAAaxmf,OAAS,GAC/DiQ,EAAM1M,KAAKo6e,OAAOxqa,UAAUkvM,OAAOq4P,GACnC3qgB,EAAOxM,KAAKo6e,OAAOxqa,UAAU2vd,gBAAgBpoB,EAAiBm2B,EAAc/R,GAChF,GAAK99hB,EAAkB05gB,IAAoBA,IAAoBq2B,GAM3D,IAAK/viB,EAAkB05gB,GAAkB,CACjCt0B,IAAcs0B,EAAgBt0B,YAC9BA,EAAYs0B,EAAgBt0B,WAGhC7if,KAAKqkiB,sBAAsBltB,EAAiBn3gB,KAAKo6e,OAAOxqa,UAAU2yL,SAAS40Q,GAAiB,IAAS3qgB,EAAO2qgB,EAAgBt0B,UAAU91e,GAAIP,EAAME,GAGhJ,IACK,IAHDykQ,EAAYgmQ,EAAgBt0B,UAAUI,aAAa1kf,QAAQ44gB,GAGtDh7gB,EAAI,EAAGA,EAAI0mf,EAAUI,aAAaxmf,OAAQN,IAAK,CAKpD,GAJI0mf,IAAcs0B,EAAgBt0B,YAC9B1xO,GAAa,GAEjBnxQ,KAAKqijB,gCAAgCx/D,EAAW1xO,EAAWq8R,EAAeD,EAAYtQ,GAClFp6C,IAAc2qD,EAAc3qD,UAC5B,OAGA1xO,EAAY,QAxBkD,CAE1E,IAAI1kQ,EAAQzM,KAAKo6e,OAAOxqa,UAAU2vd,gBAAgBiO,EAAeD,EAAYtQ,GAC7Ej9hB,KAAKqkiB,sBAAsBltB,EAAiB1qgB,EAAQD,EAAMA,EAAME,KA+BxEu0e,EAAY5lf,UAAUgnjB,gCAAkC,SAAU1wD,EAAQjse,EAAYomhB,EAASyB,EAAY3nhB,GAEvG,IAAK,IADDlZ,EAAM,EACD6W,EAAImC,EAAYnC,EAAIoue,EAAO1O,aAAaxmf,OAAQ8mB,IAAK,CAC1D,IAAI86e,EAAa1M,EAAO1O,aAAa1/d,GACjCA,IAAMmC,IACNhZ,EAAM1M,KAAKo6e,OAAOxqa,UAAUkvM,OAAOu/O,IAEvC,IAAI7xf,EAAOxM,KAAKo6e,OAAOxqa,UAAU8uM,QAAQ2/O,GACzC,GAAIA,IAAeytC,EAAS,CAExB,IAAIr/hB,EAAQzM,KAAKo6e,OAAOxqa,UAAU2vd,gBAAgBuM,EAASyB,EAAY3nhB,GAEvE,YADA5lB,KAAKqkiB,sBAAsBhmC,EAAY5xf,EAAQD,EAAMA,EAAME,GAG/D1M,KAAKqkiB,sBAAsBhmC,EAAYr+f,KAAKo6e,OAAOxqa,UAAU2yL,SAAS87P,GAAY,IAAS7xf,EAAOmlf,EAAO5kf,GAAIP,EAAME,GACnHA,GAAO2xf,EAAWtof,SAM1Bkre,EAAY5lf,UAAUgpiB,sBAAwB,SAAUhmC,EAAYrof,EAAOxJ,EAAME,GAC7E,IAAI41iB,EAAgBtijB,KAAKkijB,yBAAyB7jD,GAC9CpuW,EAAOjwJ,KAAKo6e,OAAOkV,MAAM1/a,UAAUqzM,QAAQo7O,EAAWxb,WAC5C5yV,EAAK00V,kBAAkB33e,EACtBijJ,EAAK00V,kBAAkB53e,EACtCu1iB,EAAc91iB,KAAOH,KAAKwmB,KAAKrmB,GAC/BE,EAAML,KAAKwmB,KAAKnmB,GAChB41iB,EAActsiB,MAAQ3J,KAAK+S,MAAMpJ,GACpB3J,KAAK+S,MAAMi/e,EAAWtof,QACrB/V,KAAKo6e,OAAOmlC,kBAM9Bt+B,EAAY5lf,UAAUiX,QAAU,WACxBtS,KAAK6ohB,cACL7ohB,KAAK6ohB,YAAY7mhB,UAAY,GAC7BhC,KAAK6ohB,iBAAc1thB,GAEnB6E,KAAKw+iB,mBACLx+iB,KAAKw+iB,iBAAiBx8iB,UAAY,GAClChC,KAAKw+iB,sBAAmBrjjB,GAExB6E,KAAKq+iB,aACLr+iB,KAAKq+iB,WAAWr8iB,UAAY,GAC5BhC,KAAKq+iB,gBAAaljjB,GAElB6E,KAAKu+iB,kBACLv+iB,KAAKu+iB,gBAAgBv8iB,UAAY,IAErChC,KAAKu+iB,qBAAkBpjjB,EACnB6E,KAAKm+iB,cACLn+iB,KAAKm+iB,YAAYnhjB,MAAQ,GACzBgD,KAAKm+iB,iBAAchjjB,GAEnB6E,KAAKwqd,YACLxqd,KAAKwqd,UAAUxod,UAAY,GAC3BhC,KAAKwqd,eAAYrvd,GAEjB6E,KAAKwhjB,yBACLxhjB,KAAKwhjB,uBAAuBx/iB,UAAY,GACxChC,KAAKwhjB,4BAAyBrmjB,GAE9B6E,KAAKogjB,cACLpgjB,KAAKogjB,YAAYp+iB,UAAY,GAC7BhC,KAAKogjB,iBAAcjljB,GAEnB6E,KAAKggjB,UACLhgjB,KAAKggjB,QAAQh+iB,UAAY,GACzBhC,KAAKggjB,aAAU7kjB,GAEf6E,KAAKw/iB,gBACLx/iB,KAAKw/iB,cAAcx9iB,UAAY,GAC/BhC,KAAKw/iB,mBAAgBrkjB,GAErB6E,KAAK0/iB,mBACL1/iB,KAAK0/iB,iBAAiB19iB,UAAY,GAClChC,KAAK0/iB,sBAAmBvkjB,GAExB6E,KAAK2+iB,aACL3+iB,KAAK2+iB,WAAW38iB,UAAY,GAC5BhC,KAAKgkE,eAAY7oE,GAEjB6E,KAAK4+iB,aACL5+iB,KAAK4+iB,WAAW58iB,UAAY,GAC5BhC,KAAK48iB,eAAYzhjB,GAEjB6E,KAAKuijB,eACLvijB,KAAKuijB,aAAavgjB,UAAY,GAC9BhC,KAAK68iB,aAAU1hjB,GAEdsC,EAAkBuC,KAAK0wL,UACxB1wL,KAAK0wL,QAAQp+K,UAEbtS,KAAKyrI,iBACLzrI,KAAKyrI,mBAETzrI,KAAKyrI,oBAAiBtwI,EACtB6E,KAAKkzf,mBAKTjS,EAAY5lf,UAAU63f,gBAAkB,WAChClzf,KAAK88iB,aACL98iB,KAAK88iB,gBAAa3hjB,GAElB6E,KAAK+8iB,cACL/8iB,KAAK+8iB,iBAAc5hjB,GAEnB6E,KAAKg9iB,iBACLh9iB,KAAKg9iB,oBAAiB7hjB,GAEtB6E,KAAKi9iB,oBACLj9iB,KAAKi9iB,uBAAoB9hjB,GAEzB6E,KAAKk9iB,uBACLl9iB,KAAKk9iB,0BAAuB/hjB,GAE5B6E,KAAKm9iB,oBACLn9iB,KAAKm9iB,uBAAoBhijB,IAG1B8lf,KChuCPuhE,GAA8B,WAI9B,SAASA,EAAajijB,GAClBP,KAAKyijB,WAAa,EAClBzijB,KAAK0ijB,gBAAkB,EACvB1ijB,KAAK2ijB,0BAAuBxnjB,EAC5B6E,KAAKsvf,MAAQ/uf,EACbP,KAAK6xc,cAAgB,IAAI33Z,GAAM,EAAG,GAw8BtC,OAt8BA57C,OAAOuJ,eAAe26iB,EAAannjB,UAAW,UAI1CqM,IAAK,WACD,OAAO1H,KAAKsvf,MAAMlV,QAEtBzye,YAAY,EACZC,cAAc,IAKlB46iB,EAAannjB,UAAUkkC,cAAgB,WACnC,MAAO,gBAKXijhB,EAAannjB,UAAU8phB,sBAAwB,SAAUzxB,GACjD1zf,KAAKsvf,MAAM84B,eACXpohB,KAAKsvf,MAAM84B,cAAcjD,sBAAsBzxB,EAAY1zf,MAE/DA,KAAKo6e,OAAO4nC,qBAAsB,EAClChihB,KAAK0ijB,iBAAmB,GAE5BF,EAAannjB,UAAU8ohB,aAAe,SAAUrwf,GAC5C9zB,KAAKsvf,MAAMlV,OAAO4nC,qBAAsB,EACxChihB,KAAK6xc,cAAc9kc,EAAI+mB,EAAM/mB,EAC7B/M,KAAK6xc,cAAc7kc,EAAI8mB,EAAM9mB,EAE7BhN,KAAKsvf,MAAM84B,cAAcw6B,oBAAoB9uhB,EAAO9zB,OAMxDwijB,EAAannjB,UAAU6ohB,mBAAqB,SAAUxwB,GAClD,IAAIx/e,EAAWlU,KAAK6ijB,2BAAsB1njB,EAAWu4f,GACrD,OAAkB,IAAdx/e,IAIAlU,KAAKyijB,WAAa,EAClBzijB,KAAK0ijB,gBAAkBxuiB,GAChB,IAGfsuiB,EAAannjB,UAAU4ohB,oBAAsB,SAAUvwB,GACnD,IAAIx/e,EAAWlU,KAAK8ijB,uBAAuBpvD,GAC3C,OAAkB,IAAdx/e,IAIAlU,KAAKyijB,WAAa,EAClBzijB,KAAK0ijB,gBAAkBxuiB,GAChB,IAQfsuiB,EAAannjB,UAAUynjB,uBAAyB,SAAUpvD,GACtD,IAAIx/e,GAAY,EAEZ8zf,EAAchogB,KAAK+ijB,eAAervD,GAClC8F,EAAax5f,KAAKyzf,mBAAmBC,GACrC98N,EAAcn5R,EAAkBuqgB,GAAe,EAAIA,EAAYlY,YAAYl5N,YAC/E,GAAIoxO,GAAepxO,EAAc,EAAG,CAGhC,GAFA52R,KAAK2ijB,qBAAuB36C,EAExBhogB,KAAKo6e,OAAOouC,aAAaxgB,EAAYj7f,EAAI49e,GAAcO,oBAAoB8c,EAAY9S,iBAAmB,IAAM8S,EAAYh7f,EAAG29e,GAAcO,oBAAoB8c,EAAY9S,iBAAmB,GAAK8S,EAAYjyf,OAAQ29e,GACzN,OAAOx/e,EAAW,EAGtB,IAAK,IADD8uiB,EAAiBh7C,EAAYj7f,EACxB5Q,EAAI,EAAGA,EAAI6rgB,EAAY1S,YAAYv3b,QAAQthE,OAAQN,IAAK,CAC7D,IAAI6zf,EAAiBrF,GAAcO,oBAAoB8c,EAAY1S,YAAYv3b,QAAQ5hE,GAAG6zf,gBAE1F,GAAKhwf,KAAKo6e,OAAOouC,aAAaw6B,EAAiB,EAAGh7C,EAAYh7f,EAAGg7f,EAAY9S,gBAd1D,EAckG8S,EAAYjyf,OAAQ29e,GACrI,OAAOx/e,EAAW/X,EAAI,EAAIA,EAAI,EAG7B,GAAIA,EAAI,GAAM6D,KAAKo6e,OAAOouC,aAAaw6B,EAAiBhzD,EAAiBizD,EAA0Bj7C,EAAYh7f,EAlBjG,EAkB0Hg7f,EAAYjyf,OAAQ29e,GAC7J,OAAOx/e,EAAY/X,EAAI,EAE3B6mjB,GAAkChzD,QAItC,IAAKvyf,EAAkB+7f,GAAa,CAGhC,GAFAx5f,KAAK2ijB,qBAAuBnpD,EAAWvF,WAEnCj0f,KAAKo6e,OAAOouC,aAAahvB,EAAWzsf,EAAIysf,EAAW/8d,OAAOjwB,KAAOy2iB,EAA0BzpD,EAAWxsf,EAAIwsf,EAAW/8d,OAAO/vB,IA5B7G,EA4BwI8sf,EAAWzjf,OAAQ29e,GAC1K,OAAOx/e,EAAWslf,EAAW7xL,YAG5B,GAAIlqU,EAAkB+7f,EAAWlH,qBAC/Btyf,KAAKo6e,OAAOouC,aAAahvB,EAAWzsf,EAAIysf,EAAW/8d,OAAOhwB,MAAQ+sf,EAAWxjf,MAAQitiB,EAA0BzpD,EAAWxsf,EAAIwsf,EAAW/8d,OAAO/vB,IAjCpI,EAiC+J8sf,EAAWzjf,OAAQ29e,GACjM,OAAOx/e,EAAYslf,EAAW7xL,YAAc6xL,EAAWlF,WAAWn8N,WAEjE,GAAIqhO,EAAWvW,aAAaxmf,OAAS,EACtC,OAAOuD,KAAKkjjB,+BAA+B1pD,EAAY9F,GAInE,OAAOx/e,GAOXsuiB,EAAannjB,UAAU6njB,+BAAiC,SAAU1pD,EAAY9F,GAC1E,IAAIx/e,GAAY,EACZiviB,EAAmBnjjB,KAAKojjB,yBAAyB1vD,EAAY8F,GAC7D6pD,OAAkBlojB,EACtB,IAAKsC,EAAkB0ljB,IAAqBA,EAAiBrzD,YAAYl5N,YAAc,EAAG,CAGtF,GAFA52R,KAAK2ijB,qBAAuBQ,EAExBnjjB,KAAKo6e,OAAOouC,aAAa26B,EAAiBp2iB,EAAIo2iB,EAAiBjuD,gBAAkB,IAAMiuD,EAAiBn2iB,EAAGm2iB,EAAiBjuD,gBAAkB,GAAKiuD,EAAiBptiB,OAAQ29e,GAC5K,OAAOx/e,EAAW,EAGtB,IAAK,IADD8uiB,EAAiBG,EAAiBp2iB,EAC7B5Q,EAAI,EAAGA,EAAIgnjB,EAAiB7tD,YAAYv3b,QAAQthE,OAAQN,IAAK,CAElE,IAAI6zf,EAAiBrF,GAAcO,oBAAoBi4D,EAAiB7tD,YAAYv3b,QAAQ5hE,GAAG6zf,gBAE/F,GAAKhwf,KAAKo6e,OAAOouC,aAAaw6B,EAAiB,EAAGG,EAAiBn2iB,EAAGm2iB,EAAiBjuD,gBAAkB,EAAGiuD,EAAiBptiB,OAAQ29e,GACjI,OAAOx/e,EAAW/X,EAAI,EAAIA,EAAI,EAG7B,GAAIA,EAAI,GAAM6D,KAAKo6e,OAAOouC,aAAaw6B,EAAiBhzD,EAAiB,EAAGmzD,EAAiBn2iB,EAAG,EAAGm2iB,EAAiBptiB,OAAQ29e,GAC7H,OAAOx/e,EAAY/X,EAAI,EAE3B6mjB,GAAkChzD,QAOtC,GAHKvyf,EAAkB0ljB,KACnBE,EAAkBF,EAAiB1vD,mBAAmBC,KAErDj2f,EAAkB4ljB,GAAkB,CAGrC,GAFArjjB,KAAK2ijB,qBAAuBU,EAAgBpvD,WAExCj0f,KAAKo6e,OAAOouC,aAAa66B,EAAgBt2iB,EAAIs2iB,EAAgB5mhB,OAAOjwB,KAAO,EAAG62iB,EAAgBr2iB,EAAIq2iB,EAAgB5mhB,OAAO/vB,IAAK,EAAG22iB,EAAgBttiB,OAAQ29e,GACzJ,OAAOx/e,EAAWmviB,EAAgB17O,YAEjC,GAAIlqU,EAAkB4ljB,EAAgB/wD,qBAEpCtyf,KAAKo6e,OAAOouC,aAAa66B,EAAgBt2iB,EAAIs2iB,EAAgB5mhB,OAAOhwB,MAAQ42iB,EAAgBrtiB,MAAQ,EAAGqtiB,EAAgBr2iB,EAAIq2iB,EAAgB5mhB,OAAO/vB,IAAK,EAAG22iB,EAAgBttiB,OAAQ29e,GACrL,OAAOx/e,EAAYmviB,EAAgB17O,YAAc07O,EAAgB/uD,WAAWn8N,WAE3E,GAAIkrR,EAAgBpgE,aAAaxmf,OAAS,EAC3C,OAAOuD,KAAKkjjB,+BAA+BG,EAAiB3vD,GAIxE,OAAOx/e,GAEXsuiB,EAAannjB,UAAUwnjB,sBAAwB,SAAUlxD,EAAQ+B,GAC7D,IAAIsU,OAAc7sgB,EACdq+f,OAAar+f,EACbsC,EAAkBk0f,IAClBqW,EAAchogB,KAAK+ijB,eAAervD,GAClC8F,EAAax5f,KAAKyzf,mBAAmBC,IAGrCsU,EAAchogB,KAAKojjB,yBAAyB1vD,EAAY/B,GAE5D,IAAI/6N,EAAcn5R,EAAkBuqgB,GAAe,EAAIA,EAAYlY,YAAYl5N,YAC/E,GAAIoxO,GAAepxO,EAAc,EAAG,CAGhC,GAFA52R,KAAK2ijB,qBAAuB36C,EAExBhogB,KAAKsvf,MAAMlV,OAAOouC,aAAaxgB,EAAYj7f,EAAGi7f,EAAYh7f,EAAIg7f,EAAYjyf,OAAS6gR,EAAa52R,KAAKsjjB,eAAet7C,EAAYlgY,WAAarqI,EAAkBuqgB,EAAYpV,iBAAmBoV,EAAY3S,kBAAoBz+N,EAAc,EAAI88N,GAChP,OAAOsU,EAAYlgY,UAAU24J,SAEjC,IAAK,IAAItkS,EAAI,EAAGA,EAAI6rgB,EAAY/kB,aAAaxmf,OAAQN,IAAK,CAEtD,IAAI+rgB,EAAYF,EAAY/kB,aAAa9mf,GACzC,GAAI6rgB,EAAY/kB,aAAa1kf,QAAQ2pgB,IAAc,GAE3ClogB,KAAKsvf,MAAMlV,OAAOouC,aAAatgB,EAAUn7f,EAAGm7f,EAAUl7f,EAAIk7f,EAAUnyf,OAAS6gR,EAAc,EAAG52R,KAAKsjjB,eAAep7C,GAAYtxO,EAAc,EAAG88N,GACnJ,OAAOwU,EAAUznO,eAQzB,GAHIunO,GAAexO,IACfA,EAAax5f,KAAKyzf,mBAAmBC,IAErC8F,EAAY,CACZ,IACIzjf,EAAS,EAQb,GANIA,GAHAmyf,EAAY1O,EAAWtW,iBAEbziN,WAAaynO,EAAUjU,WAAWhR,aAAaxmf,OAAS,EACzDyrgB,EAAU7S,kBAAoB,EAG9B6S,EAAU5V,mBAAmB8C,eAAiB,EAGvDp1f,KAAKsvf,MAAMlV,OAAOouC,aAAatgB,EAAUn7f,EAAGm7f,EAAUl7f,EAAIk7f,EAAUnyf,OAASA,EAAQmyf,EAAUlyf,MAAgB,EAATD,EAAY29e,GAElH,OADA1zf,KAAK2ijB,qBAAuBz6C,EAAUjU,WAC/BiU,EAAUznO,SAGjB,GAAI+4N,EAAWvW,aAAaxmf,OAAS,EACjC,OAAOuD,KAAK6ijB,sBAAsBrpD,EAAY9F,GAK9D,OAAQ,GAOZ8uD,EAAannjB,UAAUophB,eAAiB,SAAU/wB,GAC9C,IAAIhiZ,EAAY,EACQ,IAApB1xG,KAAKyijB,YACL/wc,EAAYgiZ,EAAW3mf,EAAI/M,KAAK6xc,cAAc9kc,EAC9C/M,KAAKujjB,sBAAsB7xc,KAG3BA,EAAYgiZ,EAAW1mf,EAAIhN,KAAK6xc,cAAc7kc,EAC9ChN,KAAKwjjB,eAAe9xc,KAG5B8wc,EAAannjB,UAAUmojB,eAAiB,SAAU9xc,GAC9C,IAAIzxC,EAAQjgE,KAAK2ijB,qBACjB,IAAIlljB,EAAkBwiE,IAAwB,IAAdyxC,EAAhC,CAGA,IAAI9hC,EAAY5vE,KAAKsvf,MAAM1/a,UAI3B,GAHI3P,EAAMm0b,gBACNp0f,KAAKsvf,MAAM7jB,iBAAkB,GAE7Bzre,KAAK0ijB,iBAAmB,EAAG,CAC3B,IAAIhif,EAAMT,EAAMgjb,aAAajjf,KAAK0ijB,iBAClC1ijB,KAAK0xgB,gBAAgBhxc,EAAKgxC,GAC1B9hC,EAAUy5d,eAAez5d,EAAUryE,MAAOqyE,EAAU/wD,KAExD,GAAIohD,EAAMm0b,cAAe,CACrB,IAAIlrF,EAAclpa,KAAKsvf,MAAMlV,OAAOvpb,OAAOumd,eAAen3c,GAC1DjgE,KAAKsvf,MAAM7jB,iBAAkB,EAC7Bxra,EAAQipW,EAEZlpa,KAAK6xc,cAAc7kc,GAAK29e,GAAcO,oBAAoBx5Y,GAC1D1xG,KAAKsvf,MAAMlV,OAAOvpb,OAAO2md,cAAcv3c,GACvCjgE,KAAKsvf,MAAM5U,aAAa+oE,SAASzjjB,KAAKsvf,MAAM1/a,aAMhD4ye,EAAannjB,UAAU0njB,eAAiB,SAAUn/B,GAC9C,IAAIjyB,OAASx2f,EACTm4P,EAActzP,KAAKsvf,MAAMlV,OAAO9mP,YACpC,IAAK71P,EAAkB61P,GACnB,IAAK,IAAIn3P,EAAI,EAAGA,EAAIm3P,EAAYo+P,YAAYj1f,OAAQN,IAAK,CACrD,IAAIwsf,EAAar1P,EAAYo+P,YAAYv1f,GAEzC,GADAw1f,EAAS3xf,KAAKojjB,yBAAyBx/B,EAAaj7B,IAC/Clrf,EAAkBk0f,GACnB,MAIZ,OAAOA,GAEX6wD,EAAannjB,UAAU+njB,yBAA2B,SAAUtvhB,EAAO69d,GAC/D,IAAK,IAAIpue,EAAI,EAAGA,EAAIoue,EAAO1O,aAAaxmf,OAAQ8mB,IAC5C,GAAIoue,EAAO1O,aAAa1/d,aAAcwve,GAAa,CAC/C,IAAI+U,EAAcnW,EAAO1O,aAAa1/d,GACtC,GAAIukf,EAAY96f,GAAK8mB,EAAM9mB,GAAM86f,EAAY96f,EAAI86f,EAAY/xf,QAAW+d,EAAM9mB,EAC1E,OAAO86f,IAWvB06C,EAAannjB,UAAUo4f,mBAAqB,SAAUmwB,GAClD,IAAIjyB,OAASx2f,EACTm4P,EAActzP,KAAKsvf,MAAMlV,OAAO9mP,YACpC,IAAK71P,EAAkB61P,GACnB,IAAK,IAAIn3P,EAAI,EAAGA,EAAIm3P,EAAYo+P,YAAYj1f,OAAQN,IAAK,CAGrD,GADAw1f,EADiBr+P,EAAYo+P,YAAYv1f,GACrBs3f,mBAAmBmwB,IAClCnmhB,EAAkBk0f,GACnB,MAIZ,OAAOA,GAEX6wD,EAAannjB,UAAUq2gB,gBAAkB,SAAUhxc,EAAKgxC,GACpD,IAAIykZ,EAAYz1b,EAAIy1b,UACpB,GAA6B,SAAzBA,EAAU7F,WAAuB,CACjC6F,EAAU7F,WAAa,UACvB,IAAI6iB,EAAQhd,EAAUlR,UAClBz2L,EAAgBxuT,KAAKsvf,MAAMlV,OAAOvpb,OAAOkP,aAAaozc,GAAQA,IAE9D3kN,EAAgB98M,GAAa,KAAOykZ,EAAUpgf,SAAWy4S,EAAgB98M,IACzEykZ,EAAUpgf,OAASy4S,EAAgB98M,QAKnCykZ,EAAUpgf,OAAS27F,GAAa,KAAOykZ,EAAUpgf,SAAWogf,EAAUpgf,OAAS27F,IAC/EykZ,EAAUpgf,OAASogf,EAAUpgf,OAAS27F,IAKlD8wc,EAAannjB,UAAUkojB,sBAAwB,SAAU7xc,GACrD,IAAIzxC,EAAQjgE,KAAK2ijB,qBACjB,IAAIlljB,EAAkBwiE,IAAwB,IAAdyxC,IAAmBj0G,EAAkBwiE,EAAMgjb,cAA3E,CAGA,IAAIygE,GAAgB,EAChB9ze,EAAY5vE,KAAKsvf,MAAM1/a,UAC3B5vE,KAAKsvf,MAAMuT,OAAOkvB,eAAenid,GACjC3P,EAAQA,EAAM4yb,cAAc7yf,KAAKo6e,QACjCp6e,KAAKsvf,MAAM7jB,iBAAkB,EAE7Bzre,KAAK2jjB,kBAAkB1jf,GACvB,IAAIzpD,EAAiBypD,EAAM01b,eAAc,GACrCiuD,EAAY3jf,EAAMgpb,WAClB8G,EAAiB9vb,EAAM6vb,YAAYC,eAIvC,GAHKngb,EAAU0qK,UACXopU,EAAgB1jjB,KAAK6jjB,0BAA0Bj0e,EAAW3P,EAAOyxC,IAEhEgyc,EAAL,CAIA,GAA6B,IAAzB1jjB,KAAK0ijB,gBAAuB,CAE5B,IAAI/6O,EAAc3nU,KAAK0ijB,gBACnBoB,EAAc7jf,EAAMq1b,YAAYv3b,QAAQ4pQ,GACxC3xT,EAAQ8tiB,EAAY9zD,eACxB,GAAIt+Y,EAAY,EAEZ,IADA,IAAIqyc,EAAgB,EACbryc,IAAcqyc,GAAe,EAC5B5pI,EAAWwwE,GAAcltd,MAAMqmhB,EAAY9zD,eAAiBt+Y,EAAW,KAC3Doyc,EAAYtwf,UACxBswf,EAAY9zD,eAAiB71E,EAE7BypI,GADAA,EAAY3jf,EAAMgpb,WAAav3Y,KACL,KAAQkyc,GAAa,KAAOA,EAAY,MAAS,KAC3EG,EAAgBryc,IAGhBqyc,EAAgBryc,EAChBA,GAAayoU,EAAW2pI,EAAYtwf,eAM5C,IADIuwf,EAAgB,EACbryc,IAAcqyc,GAAe,CAChC,IAAI5pI,GAAAA,EAAWwwE,GAAcltd,MAAMqmhB,EAAY9zD,eAAiBt+Y,EAAW,KAC3D,MACZoyc,EAAY9zD,eAAiB71E,EAE7BypI,GADAA,EAAY3jf,EAAMgpb,WAAav3Y,KACL,KAAQkyc,GAAa,KAAOA,EAAY,MAAS,KAC3EG,EAAgBryc,IAGhBqyc,EAAgBryc,EAChBA,GAAayoU,EAAW,MAIpC,IAAI6pI,EAAatyc,EAEM,SAAnBq+Y,GAA8B9vb,EAAMq1b,YAAYqC,gBAAkBnhf,GAA4D,SAAzCypD,EAAM6vb,YAAYG,qBACnGhwb,EAAMq1b,YAAYgL,aAAa9pf,EAAgBypD,EAAMq1b,YAAYS,WAAqD,SAAzC91b,EAAM6vb,YAAYG,oBAE/Fhwb,EAAMq1b,YAAYgC,WAAW9gf,EAAgBypD,EAAMq1b,YAAYS,WAAqD,SAAzC91b,EAAM6vb,YAAYG,oBAG7F6zD,EAAY9zD,eAAiBh6e,EAEjCguiB,EAAa,GAEM,WAAnBj0D,IACI9vb,EAAMq1b,YAAYqC,gBAAkBnhf,GAA2D,SAAzCypD,EAAM6vb,YAAYG,sBAC5E+zD,GAA0B,GAE9B/jf,EAAM6vb,YAAY7G,WAAgC,SAAnB8G,EAA4B6zD,EAAY,EACvE3jf,EAAMq1b,YAAYS,WAAa91b,EAAMq1b,YAAYqC,gBACjD33f,KAAKikjB,0BAA0Bhkf,GAC/BjgE,KAAKkkjB,gBAAgBjkf,GAAO,EAAM+jf,QAEjC,GAAc,OAAV/jf,GAAkBjgE,KAAK0ijB,kBAAoBzif,EAAMq1b,YAAYv3b,QAAQthE,OAE1EuD,KAAKmkjB,8BAA8Blkf,EAAOyxC,EAAWl7F,OAEpD,CACD,IAA8B,IAA1BxW,KAAK0ijB,gBAEL,YADA1ijB,KAAKsvf,MAAM7jB,iBAAkB,GAGjCzre,KAAKokjB,mBAAmBnkf,EAAOyxC,GAGnC1xG,KAAKsvf,MAAM7jB,iBAAkB,EAC7B77Z,EAAUy5d,eAAez5d,EAAUryE,MAAOqyE,EAAU/wD,UA1EhD7e,KAAKsvf,MAAM7jB,iBAAkB,IA+ErC+2E,EAAannjB,UAAUwojB,0BAA4B,SAAUj0e,EAAW3P,EAAOyxC,GAC3DzxC,EAAMgpb,WAAtB,IACIqsB,EAAat1gB,KAAKyzf,mBAAmBzzf,KAAK6xc,eAC9C,GAAIyjE,IAAe1lc,EAAUwtc,gBAAgB32S,YAAY6uS,IAAgBA,EAAW/b,gBAC7E3pb,EAAUwtc,gBAAgB32S,YAAa6uS,EAAyB,iBAAM,CACzE,IAAI+uC,EAAgBz0e,EAAUo/d,mBAC9B,GAA6B,IAAzBhviB,KAAK0ijB,gBACL1ijB,KAAKskjB,oBAAoBrkf,EAAOyxC,EAAW2yc,QAE1C,GAAc,OAAVpkf,GAAkBjgE,KAAK0ijB,kBAAoBzif,EAAMq1b,YAAYv3b,QAAQthE,OAAQ,CAElF,IAAK,IADD8njB,EAAuBvkjB,KAAKwkjB,eAAevkf,EAAOjgE,KAAK0ijB,iBAAiB,GACnEvmjB,EAAI,EAAGA,EAAIoojB,EAAqB9njB,OAAQN,IAAK,CAClD,IAAI8mE,EAAOshf,EAAqBpojB,IACK,IAAjCkojB,EAAc9ljB,QAAQ0kE,IACtBjjE,KAAKykjB,wBAAwBxhf,EAAMyuC,GAAW,GAItD1xG,KAAK0kjB,yBAAyBzkf,GAC9BA,EAAM8kM,YAAYrzJ,GAClB1xG,KAAKkkjB,gBAAgBjkf,GAAO,EAAMyxC,OAEjC,CACD,IAA8B,IAA1B1xG,KAAK0ijB,gBACL,OAAO,EAEX,IAAI/6O,EAAc3nU,KAAK0ijB,gBAEnBiC,GADAJ,EAAuBvkjB,KAAKwkjB,eAAevkf,EAAO0nQ,GAAa,GACvC3nU,KAAKwkjB,eAAevkf,EAAO0nQ,GAAa,IAChEi9O,EAAmB5kjB,KAAK6kjB,iBAAiB5kf,EAAO0nQ,GACpD,GAAI48O,EAAqB9njB,OAAS,IAAMmojB,EACpC,IAASzojB,EAAI,EAAGA,EAAIoojB,EAAqB9njB,OAAQN,KACW,IAApDkojB,EAAc9ljB,QAAQgmjB,EAAqBpojB,MAC3CoojB,EAAqBl8hB,OAAOlsB,EAAG,GAC/BA,KAIZ,GAAIwojB,EAAsBlojB,OAAS,IAAMmojB,EACrC,IAASzojB,EAAI,EAAGA,EAAIwojB,EAAsBlojB,OAAQN,KACW,IAArDkojB,EAAc9ljB,QAAQomjB,EAAsBxojB,MAC5CwojB,EAAsBt8hB,OAAOlsB,EAAG,GAChCA,KAKZ,GAAoC,IAAhCoojB,EAAqB9njB,QAAgBkojB,EAAsBlojB,OAAS,EACpE,IAASN,EAAI,EAAGA,EAAIwojB,EAAsBlojB,OAAQN,IAAK,EAC/C8mE,EAAO0hf,EAAsBxojB,IACxBo9f,gBACLgrD,EAAqB//iB,KAAKy+D,EAAKs2b,qBAItC,GAAqC,IAAjCorD,EAAsBlojB,QAAgB8njB,EAAqB9njB,OAAS,EACzE,IAASN,EAAI,EAAGA,EAAIoojB,EAAqB9njB,OAAQN,IAAK,EAC9C8mE,EAAOshf,EAAqBpojB,IACvB8/f,YACL0oD,EAAsBngjB,KAAKy+D,EAAKg5b,YAI5Cj8f,KAAK8kjB,mBAAmB7kf,EAAOskf,EAAsBI,EAAuBjzc,GAAW,GACvF1xG,KAAKkkjB,gBAAgBjkf,GAAO,EAAMyxC,GAEtC9hC,EAAUy5d,eAAez5d,EAAUryE,MAAOqyE,EAAU/wD,KAExD,OAAO,GAKX2jiB,EAAannjB,UAAUipjB,oBAAsB,SAAUrkf,EAAOyxC,EAAW2yc,GACrE,IAAIT,EAAY3jf,EAAMgpb,WAGlB87D,GAFwB/kjB,KAAKwkjB,eAAevkf,EAAOjgE,KAAK0ijB,iBAAiB,GAE3D2B,EAAc,GAAGnwD,UAC/BiC,EAAY4uD,EAAY5uD,UAC5B,GAAIA,EAAU/F,YAAc,EAAG,CAC3B,IAAI40D,EAAgB7uD,EAAU/F,YAAc1+Y,EAC5C,GAAIszc,EAAgB,EAChBhljB,KAAKiljB,iBAAiBF,EAAarzc,OAElC,CAED,GAAIszc,GADAE,EAAkBlljB,KAAKmljB,mBAAmBllf,EAAO8kf,KAThD,IAU6CC,EAAe,CAC7DpB,EAAY3jf,EAAMgpb,WAAa+7D,EAC/B/kf,EAAM6vb,YAAY7G,WAAa26D,IAAc,KAAQA,GAAa,KAAOA,EAAY,MAAS,KAC9F,IAAK,IAAIznjB,EAAI,EAAGA,EAAI8jE,EAAMgjb,aAAaxmf,OAAQN,IAAK,CAE5C4ojB,KADA92B,EAAWhud,EAAMgjb,aAAa9mf,KAE9B6D,KAAKiljB,iBAAiBh3B,GAAW+2B,WAOjD,GAAItzc,EAAY,EACZkyc,EAAY3jf,EAAMgpb,WAAav3Y,EAC/BzxC,EAAM6vb,YAAY7G,WAAa26D,IAAc,KAAQA,GAAa,KAAOA,EAAY,MAAS,KAC9F5jjB,KAAKoljB,oBAAoBnlf,EAAOokf,EAAe3yc,OAE9C,CACD,IAAIwzc,EAAkBlljB,KAAKmljB,mBAAmBllf,EAAO8kf,GAErD,GAA2B,IADF9kf,EAAM6vb,YAAY7G,WAEvC,IAAS9sf,EAAI,EAAGA,EAAI8jE,EAAMgjb,aAAaxmf,OAAQN,IAAK,CAChD,IAAI8xhB,EAAWhud,EAAMgjb,aAAa9mf,IACuB,IAArDkojB,EAAc9ljB,QAAQ0vhB,EAAShrC,aAAa,MAC5Cjjf,KAAKiljB,iBAAiBh3B,EAAUv8a,GAChC1xG,KAAKykjB,wBAAwBx2B,EAAShrC,aAAa,GAAIvxY,GAAW,QAIzE,CAED,GADiBwzc,EAAkBxzc,EAClB,EACbkyc,EAAY3jf,EAAMgpb,WAAav3Y,EAC/BzxC,EAAM6vb,YAAY7G,WAAa26D,IAAc,KAAQA,GAAa,KAAOA,EAAY,MAAS,KAC9F5jjB,KAAKoljB,oBAAoBnlf,EAAOokf,EAAe3yc,OAE9C,CACDkyc,EAAY3jf,EAAMgpb,WAAai8D,EAC/Bjlf,EAAM6vb,YAAY7G,WAAa26D,IAAc,KAAQA,GAAa,KAAOA,EAAY,MAAS,KAC9F,IAASznjB,EAAI,EAAGA,EAAI8jE,EAAMgjb,aAAaxmf,OAAQN,IAAK,CAC5C8xhB,EAAWhud,EAAMgjb,aAAa9mf,IACuB,IAArDkojB,EAAc9ljB,QAAQ0vhB,EAAShrC,aAAa,KAC5Cjjf,KAAKykjB,wBAAwBx2B,EAAShrC,aAAa,GAAIvxY,GAAW,GAClE1xG,KAAKiljB,iBAAiBh3B,EAAUv8a,EAAYwzc,IAG5ClljB,KAAKiljB,iBAAiBh3B,GAAWi3B,MAOzDlljB,KAAKkkjB,gBAAgBjkf,GAAO,EAAMyxC,IAEtC8wc,EAAannjB,UAAU+pjB,oBAAsB,SAAUnlf,EAAOokf,EAAe3yc,GACzE,IAAK,IAAIv1G,EAAI,EAAGA,EAAI8jE,EAAMgjb,aAAaxmf,OAAQN,IAAK,CAChD,IAAI8xhB,EAAWhud,EAAMgjb,aAAa9mf,IACuB,IAArDkojB,EAAc9ljB,QAAQ0vhB,EAAShrC,aAAa,IAC5Cjjf,KAAKykjB,wBAAwBx2B,EAAShrC,aAAa,GAAIvxY,GAAW,GAGlE1xG,KAAKiljB,iBAAiBh3B,GAAWv8a,KAO7C8wc,EAAannjB,UAAU8ojB,8BAAgC,SAAUlkf,EAAOyxC,EAAWl7F,GAO/E,IANA,IAAIu5e,EAAiB9vb,EAAM6vb,YAAYC,eAEnCs1D,EADiBplf,EAAM6vb,YAAYE,eAEnCroL,EAAc3nU,KAAK0ijB,gBACnB4C,EAAarlf,EAAMq1b,YAAYv3b,QAAQ4pQ,EAAc,GACrDo8O,EAAgB,EACbryc,IAAcqyc,GAAe,CAChC,IAAI5pI,EAAWwwE,GAAcltd,MAAM6nhB,EAAWt1D,eAAiBt+Y,EAAW,GACtEyoU,GAAYmrI,EAAW9xf,UACvB8xf,EAAWt1D,eAAiB71E,EAC5B4pI,EAAgBryc,IAGhBqyc,EAAgBryc,EAChBA,GAAayoU,EAAWmrI,EAAW9xf,UAG3CxzD,KAAKikjB,0BAA0Bhkf,IAC3Bolf,GAAiBplf,EAAMq1b,YAAYqC,gBAAkBnhf,KACrDypD,EAAM8kM,YAAYrzJ,GAClBzxC,EAAMq1b,YAAYS,WAAa91b,EAAMq1b,YAAYqC,iBAErD,IAAIqsD,EAAatyc,EACM,UAAnBq+Y,EACAi0D,EAAa,EAEW,WAAnBj0D,IACLi0D,GAA0B,GAE9BhkjB,KAAKkkjB,gBAAgBjkf,GAAO,EAAM+jf,IAKtCxB,EAAannjB,UAAU+ojB,mBAAqB,SAAUnkf,EAAOyxC,GACzD,IAAIi2N,EAAc3nU,KAAK0ijB,gBACnB4C,EAAarlf,EAAMq1b,YAAYv3b,QAAQ4pQ,EAAc,GACrDm8O,EAAc7jf,EAAMq1b,YAAYv3b,QAAQ4pQ,GAC5C,GAAIj2N,EAAY,EAEZ,IADA,IAAI6zc,GAAa,EACVA,GAAY,EACXprI,EAAWwwE,GAAcltd,MAAMqmhB,EAAY9zD,eAAiBt+Y,EAAW,KAC3Doyc,EAAYtwf,UACxBswf,EAAY9zD,eAAiB71E,EAC7BmrI,EAAWt1D,eAAiBs1D,EAAWt1D,eAAiBt+Y,EACxD6zc,GAAa,GAGb7zc,GAAayoU,EAAW2pI,EAAYtwf,cAM5C,IADI+xf,GAAa,EACVA,GAAY,CACf,IAAIprI,GAAAA,EAAWwwE,GAAcltd,MAAM6nhB,EAAWt1D,eAAiBt+Y,EAAW,KAC1D4zc,EAAW9xf,UACvB8xf,EAAWt1D,eAAiB71E,EAC5B2pI,EAAY9zD,eAAiB8zD,EAAY9zD,eAAiBt+Y,EAC1D6zc,GAAa,GAGb7zc,GAAayoU,EAAWmrI,EAAW9xf,SAK/CxzD,KAAKikjB,0BAA0Bhkf,GAE/BA,EAAMq1b,YAAYS,WAAa91b,EAAMq1b,YAAYqC,gBACjD33f,KAAKkkjB,gBAAgBjkf,GAAO,EAAMyxC,IAEtC8wc,EAAannjB,UAAU6ojB,gBAAkB,SAAUjkf,EAAOisJ,EAAUx6G,GAQhE,GAPIw6G,IACAjsJ,EAAMm2b,gBACNn2b,EAAM42b,eAAgB,GAE1B52b,EAAM22b,oBACN32b,EAAM42b,eAAgB,EACtB72f,KAAKo6e,OAAOkV,MAAM7jB,iBAAkB,EAChCxra,EAAMm0b,cAAe,CACrB,IAAIlrF,EAAclpa,KAAKo6e,OAAOvpb,OAAOumd,eAAen3c,GACpDjgE,KAAKo6e,OAAOvpb,OAAO2md,cAActuG,QAGjClpa,KAAKo6e,OAAOvpb,OAAO2md,cAAcv3c,GAErCjgE,KAAKsvf,MAAMuT,OAAO7oC,eAAeh6d,KAAKo6e,OAAOxqa,WAC7C5vE,KAAKsvf,MAAM5U,aAAa+oE,SAASzjjB,KAAKsvf,MAAM1/a,WACxC8hC,IACA1xG,KAAK6xc,cAAc9kc,GAAK49e,GAAcO,oBAAoBx5Y,GAC1D1xG,KAAK0ijB,gBAAkB1ijB,KAAK8ijB,uBAAuB9ijB,KAAK6xc,iBAGhE2wG,EAAannjB,UAAUmpjB,eAAiB,SAAUvkf,EAAO0nQ,EAAa69O,GAElE,IAAK,IADD1jf,KACK3lE,EAAI,EAAGA,EAAI8jE,EAAMgjb,aAAaxmf,OAAQN,IAE3C,IAAK,IADDukE,EAAMT,EAAMgjb,aAAa9mf,GACpBonB,EAAI,EAAGA,EAAIm9C,EAAIuib,aAAaxmf,OAAQ8mB,IAAK,CAC9C,IAAI0/C,EAAOvC,EAAIuib,aAAa1/d,GACxBiiiB,EACIvif,EAAK0kQ,YAAc1kQ,EAAKqxb,WAAWn8N,aAAewvC,GAClD7lQ,EAAMt9D,KAAKy+D,GAIXA,EAAK0kQ,cAAgBA,GACrB7lQ,EAAMt9D,KAAKy+D,GAK3B,OAAOnB,GAEX0gf,EAAannjB,UAAU4pjB,iBAAmB,SAAUvkf,EAAK/0D,GACjD+0D,EAAIy1b,UAAU/F,YAAczkf,IAAW+0D,EAAIy1b,UAAU/F,cACrD1vb,EAAIy1b,UAAU/F,YAAc1vb,EAAIy1b,UAAU/F,YAAczkf,EACxD+0D,EAAIy1b,UAAUtF,gBAAkBnwb,EAAIy1b,UAAU/F,cAGtDoyD,EAAannjB,UAAU8pjB,mBAAqB,SAAUllf,EAAOwlf,GAGzD,IAAK,IAFD70D,EAAa,EACblia,EAAO,EACFvyF,EAAI,EAAGA,EAAI8jE,EAAMgjb,aAAaxmf,OAAQN,IAAK,CAChD,IAAIukE,EAAMT,EAAMgjb,aAAa9mf,GACzBukE,IAAQ+kf,IACK,IAAT/2d,IACAkia,EAAalwb,EAAIy1b,UAAU/F,YAC3B1ha,KAEAhuB,EAAIy1b,UAAU/F,aAAeQ,IAC7BA,EAAalwb,EAAIy1b,UAAU/F,cAIvC,OAAOQ,GAEX4xD,EAAannjB,UAAUopjB,wBAA0B,SAAUxhf,EAAMyuC,EAAWg0c,GACxE,IAAI11D,EAAiB/sb,EAAKqxb,WAAWtE,eACM,SAAvC/sb,EAAKqxb,WAAWrE,qBAChBD,EAAiB/sb,EAAKqxb,WAAWj/N,UACjCpyN,EAAKqxb,WAAWrE,mBAAqB,SAEzC,IAAI01D,EAAe1if,EAAKm0b,YAAY5jc,SACO,YAAvCyP,EAAKqxb,WAAWrE,qBAChB01D,EAAe1if,EAAK20b,sBAAsB+tD,IAI1C1if,EAAKqxb,WAAWtE,eADhB01D,EACiC11D,EAAiBt+Y,EAAYi0c,EAAe31D,EAAiBt+Y,EAAYi0c,EAGzE31D,EAAiBt+Y,EAAYi0c,EAAe31D,EAAiBt+Y,EAAYi0c,GAIlHnD,EAAannjB,UAAUypjB,mBAAqB,SAAU7kf,EAAOskf,EAAsBI,EAAuBjzc,EAAWk0c,GACjH,GAAIrB,EAAqB9njB,OAAS,EAAG,CAEjC,IAAK,IADDiyF,GAAO,EACFvyF,EAAI,EAAGA,EAAIoojB,EAAqB9njB,OAAQN,IAAK,CAClD,IAAI8mE,EAAOshf,EAAqBpojB,GAChC6D,KAAKykjB,wBAAwBxhf,EAAMyuC,GAAW,GAC1CzuC,EAAK41N,YAAc51N,EAAKixb,SAASjR,aAAaxmf,OAAS,IACvDiyF,GAAO,GAGXA,GACA1uF,KAAK0kjB,yBAAyBzkf,GAGtC,GAAI0kf,EAAsBlojB,OAAS,EAAG,CAE7B,IADDghF,EAAO,EACX,IAASthF,EAAI,EAAGA,EAAIwojB,EAAsBlojB,OAAQN,IAAK,CAEnD,GAAuB,KADnB8mE,EAAO0hf,EAAsBxojB,IACxB08R,UAAiB,CACtB,IAAImsR,EAAgB/hf,EAAKixb,SAASiC,UAAU/F,YAAc1+Y,EACtDszc,GAAiB,EACjBhljB,KAAKiljB,iBAAiBhif,EAAKixb,SAAUxiZ,IAGjCj0B,IAASune,IACTvne,EAAOune,GAEX/hf,EAAKixb,SAASiC,UAAUtF,gBAAkB,EAC1C5tb,EAAKixb,SAASiC,UAAUrF,oBAAsB,QAGtD9wf,KAAKykjB,wBAAwBxhf,EAAMyuC,GAAW,GAElD,GAAa,IAATj0B,EAAY,CACZ,IAAImme,EAAY3jf,EAAMgpb,WAAaxra,EACnCxd,EAAM6vb,YAAY7G,WAAa26D,IAAc,KAAQA,GAAa,KAAOA,EAAY,MAAS,KAC9F,IAAK,IAAIrgiB,EAAI,EAAGA,EAAI08C,EAAMgjb,aAAaxmf,OAAQ8mB,IAAK,CAChD,IAAIm9C,EAAMT,EAAMgjb,aAAa1/d,IAC+B,IAAxDohiB,EAAsBpmjB,QAAQmiE,EAAIuib,aAAa,KAC/Cjjf,KAAKiljB,iBAAiBvkf,EAAK+c,EAAO,EAAIA,GAAQA,OAMlE+ke,EAAannjB,UAAUqpjB,yBAA2B,SAAUzkf,GAExD,IAAK,IADDumU,EAAcxmY,KAAKy3f,eAAex3b,GAAO,GACpC9jE,EAAI,EAAGA,EAAI8jE,EAAMgjb,aAAaxmf,OAAQN,IAAK,CAChD,IAAIukE,EAAMT,EAAMgjb,aAAa9mf,GACzB0pjB,EAAkB7ljB,KAAK8ljB,YAAYplf,GAAK,GAC5C,GAAI8lU,GAAeq/K,GAAmBnlf,EAAIy1b,UAAU9F,aAAe7pH,EAAcq/K,EAAiB,CAC9F,IAAI7ojB,EAAQwpY,EAAcq/K,EAC1Bnlf,EAAIy1b,UAAUnF,eAAiBh0f,EAC/B0jE,EAAIy1b,UAAU9F,WAAarzf,KAIvCwljB,EAAannjB,UAAUyqjB,YAAc,SAAUplf,EAAKqlf,GAChD,IAAIjpR,EAAW,EACXipR,IACAjpR,GAAsBp8N,EAAIy1b,UAAU/F,aAExC,IAAK,IAAIj0f,EAAI,EAAGA,EAAIukE,EAAIuib,aAAaxmf,OAAQN,IAAK,CAE9C2gS,GADWp8N,EAAIuib,aAAa9mf,GACXm4f,WAAWj/N,UAEhC,OAAOyH,GAEX0lR,EAAannjB,UAAUo8f,eAAiB,SAAUx3b,EAAO8lf,GAErD,IAAK,IADD/viB,EAAQ,EACH7Z,EAAI,EAAGA,EAAI8jE,EAAMgjb,aAAaxmf,OAAQN,IAAK,CAChD,IAAIukE,EAAMT,EAAMgjb,aAAa9mf,GACzB2gS,EAAW,EACXipR,IACAjpR,GAAsBp8N,EAAIy1b,UAAU/F,aAExC,IAAK,IAAI5oe,EAAM,EAAGA,EAAMk5C,EAAIuib,aAAaxmf,OAAQ+qB,IAAO,CAEpDs1Q,GADWp8N,EAAIuib,aAAaz7d,GACX8se,WAAWj/N,UAE5Br/Q,EAAQ8mR,IACR9mR,EAAQ8mR,GAGhB,OAAO9mR,GAEXwsiB,EAAannjB,UAAUwpjB,iBAAmB,SAAU5kf,EAAO0nQ,GAMvD,IAAK,IAJD08O,EADYrkjB,KAAKsvf,MAAM1/a,UACGo/d,mBAC1BgX,EAAkBhmjB,KAAKwkjB,eAAevkf,EAAO0nQ,GAAa,GAC1Ds+O,EAAmBjmjB,KAAKwkjB,eAAevkf,EAAO0nQ,GAAa,GAC3Dk9O,GAAmB,EACd1ojB,EAAI,EAAGA,EAAI6pjB,EAAgBvpjB,OAAQN,IAAK,CAC7C,IAAI+pjB,EAAaF,EAAgB7pjB,GACjC0ojB,GAA0D,IAAvCR,EAAc9ljB,QAAQ2njB,GAE7C,IAAKrB,EACD,IAAS1ojB,EAAI,EAAGA,EAAI8pjB,EAAiBxpjB,OAAQN,IAAK,CAC1C+pjB,EAAaD,EAAiB9pjB,GAClC0ojB,GAA0D,IAAvCR,EAAc9ljB,QAAQ2njB,GAGjD,OAAOrB,GAEXrC,EAAannjB,UAAU8qjB,gBAAkB,SAAUlmf,EAAOmmf,GACtD,IAAI3ojB,EAAkB2ojB,GAAtB,CAGAnmf,EAAQA,EAEJmmf,EAAiB9wD,cACjBr1b,EAAMq1b,YAAc8wD,EAAiB9wD,YAAYj2f,SAEhB,OAAjC+mjB,EAAiBt2D,cACjB7vb,EAAM6vb,YAAY7G,WAAam9D,EAAiBt2D,YAAY7G,WAC5Dhpb,EAAM6vb,YAAYE,eAAiBo2D,EAAiBt2D,YAAYE,eAChE/vb,EAAM6vb,YAAYG,mBAAqBm2D,EAAiBt2D,YAAYG,oBAExE,IAAK,IAAI9zf,EAAI,EAAGA,EAAI8jE,EAAMgjb,aAAaxmf,OAAQN,IAAK,CAChD,IAAIukE,EAAMT,EAAMgjb,aAAa9mf,GACzBg6f,EAAYiwD,EAAiB7tR,KAAKp8R,GACtCukE,EAAIy1b,UAAUvF,WAAauF,EAAUvF,WACrClwb,EAAIy1b,UAAUtF,gBAAkBsF,EAAUtF,gBAC1Cnwb,EAAIy1b,UAAUrF,oBAAsBqF,EAAUrF,oBAC9Cpwb,EAAIy1b,UAAUpF,UAAYoF,EAAUpF,UACpCrwb,EAAIy1b,UAAUnF,eAAiBmF,EAAUnF,eACzCtwb,EAAIy1b,UAAUlF,mBAAqBkF,EAAUlF,mBAC7C,IAAK,IAAI1te,EAAI,EAAGA,EAAIm9C,EAAIuib,aAAaxmf,OAAQ8mB,IAAK,CAC9C,IAAI0/C,EAAOvC,EAAIuib,aAAa1/d,GACxB+we,EAAa6B,EAAUr0b,MAAMv+C,GACjC0/C,EAAK0kQ,YAAc2sL,EAAW3sL,YAC9B1kQ,EAAKqxb,WAAWn8N,WAAam8N,EAAWn8N,WACxCl1N,EAAKqxb,WAAWtE,eAAiBsE,EAAWtE,eAC5C/sb,EAAKqxb,WAAWrE,mBAAqBqE,EAAWrE,oBAGxD,IAAIz5e,EAAiBypD,EAAM01b,eAAc,GACrCI,EAAa91b,EAAM61b,oBAAoBt/e,GAE3CypD,EAAMs3b,gBAAgBxB,EAAqD,SAAzC91b,EAAM6vb,YAAYG,sBAMxDuyD,EAAannjB,UAAUiojB,eAAiB,SAAU5if,GAC9C,IAAI1qD,EAAQ,EACZ,GAAI0qD,EAAIuib,aAAaxmf,OAAS,EAC1B,IAAK,IAAIN,EAAI,EAAGA,EAAIukE,EAAIuib,aAAaxmf,OAAQN,IACzC6Z,GAAS0qD,EAAIuib,aAAa9mf,GAAGm4f,WAAWj/N,UAGhD,OAAOr/Q,GAEXwsiB,EAAannjB,UAAUsojB,kBAAoB,SAAU1jf,GACjD,IAAK,IAAI9jE,EAAI,EAAGA,EAAI8jE,EAAMgjb,aAAaxmf,OAAQN,IAAK,CAChD,IAAIq7f,EAAKv3b,EAAMgjb,aAAa9mf,GACxBg6f,EAAYqB,EAAGrB,UACfA,EAAUvF,WAAa,IACvBuF,EAAUtF,gBAAkBsF,EAAU/F,YACtC+F,EAAUrF,oBAAsB,SAEpC,IAAK,IAAIvte,EAAI,EAAGA,EAAIi0e,EAAGvU,aAAaxmf,OAAQ8mB,IAAK,CAC7C,IAAI0/C,EAAOu0b,EAAGvU,aAAa1/d,GAC3B0/C,EAAKqxb,WAAWtE,eAAiB/sb,EAAKqxb,WAAWj/N,UACjDpyN,EAAKqxb,WAAWrE,mBAAqB,QAErCkG,EAAUpF,UAAY,IACtBoF,EAAUnF,eAAiBmF,EAAU9F,WACrC8F,EAAUlF,mBAAqB,WAI3CuxD,EAAannjB,UAAU4ojB,0BAA4B,SAAUhkf,GAGzD,IAAK,IAFD81b,EAAa91b,EAAMq1b,YAAYS,WAC/BswD,EAAqD,SAAzCpmf,EAAM6vb,YAAYG,mBACzB9zf,EAAI,EAAGA,EAAI8jE,EAAMgjb,aAAaxmf,OAAQN,IAAK,CAChD,IAAIukE,EAAMT,EAAMgjb,aAAa9mf,GAC7B,GAAIukE,EAAIy1b,UAAUvF,WAAa,EAAG,CAC9B,IAAI56e,EAAQiqD,EAAMq1b,YAAYU,aAAa,EAAGt1b,EAAIy1b,UAAUvF,WAAYmF,EAAYswD,GACpFrmjB,KAAKsmjB,sBAAsBtwiB,EAAO0qD,GAEtC,IAAK,IAAIn9C,EAAI,EAAGA,EAAIm9C,EAAIuib,aAAaxmf,OAAQ8mB,IAAK,CAC9C,IAAI0/C,EAAOvC,EAAIuib,aAAa1/d,GAC5B0/C,EAAK8hM,YAAY9kM,EAAMq1b,YAAYU,aAAa/yb,EAAK0kQ,YAAa1kQ,EAAKqxb,WAAWn8N,WAAY49N,EAAYswD,IAE1G3lf,EAAIy1b,UAAUpF,UAAY,GAE1B/wf,KAAKumjB,qBAAqBtmf,EAAMq1b,YAAYU,aAAat1b,EAAIuib,aAAaxmf,OAAQikE,EAAIy1b,UAAUpF,UAAWgF,EAAYswD,GAAY3lf,KAO/I8hf,EAAannjB,UAAUirjB,sBAAwB,SAAUtwiB,EAAO0qD,GAC5D,IAAIy1b,EAAYz1b,EAAIy1b,UACpB,GAAIngf,IAAUmgf,EAAU/F,YAKpB,GAJA+F,EAAU/F,YAAcp6e,EACc,SAAlCmgf,EAAUrF,sBACVqF,EAAUrF,oBAAsB,SAEE,UAAlCqF,EAAUrF,oBACVqF,EAAUtF,gBAAkBsF,EAAU/F,gBAErC,CAED,IAAI0H,EAAap3b,EAAIuzb,WAAW6B,oBAAoBp1b,EAAIuzb,WAAW0B,eAAc,IAC7E34f,EAAQ0jE,EAAIuzb,WAAW2D,sBAAsBzB,EAAU/F,YAAa0H,GACxE3B,EAAUtF,gBAAkB7zf,IAOxCwljB,EAAannjB,UAAUkrjB,qBAAuB,SAAUvwiB,EAAO0qD,GAC3D,IAAIy1b,EAAYz1b,EAAIy1b,UAOpB,GANIngf,IAAUmgf,EAAU9F,aACpB8F,EAAU9F,WAAar6e,GAEU,SAAjCmgf,EAAUlF,qBACVkF,EAAUlF,mBAAqB,SAEE,UAAjCkF,EAAUlF,mBACVkF,EAAUnF,eAAiBmF,EAAU9F,eAEpC,CAED,IAAIyH,EAAap3b,EAAIuzb,WAAW6B,oBAAoBp1b,EAAIuzb,WAAW0B,eAAc,IAC7E34f,EAAQ0jE,EAAIuzb,WAAW2D,sBAAsBzB,EAAU9F,WAAYyH,GACvE3B,EAAUnF,eAAiBh0f,IAG5BwljB,KCt8BP1hE,GAAwB,WAMxB,SAASA,EAAO1G,GACZ,IAAIr6e,EAAQC,KACZA,KAAK8xD,SACL9xD,KAAKwmjB,uBAAwB,EAC7BxmjB,KAAKy4hB,oBAAiBt9hB,EACtB6E,KAAK04hB,kBAAev9hB,EAIpB6E,KAAKymjB,kBAAmB,EAIxBzmjB,KAAKgkhB,iBAAc7ohB,EAInB6E,KAAKkohB,aACLlohB,KAAK0mjB,mBAAgBvrjB,EACrB6E,KAAK2mjB,qBAAuB,EAC5B3mjB,KAAK4mjB,2BAIL5mjB,KAAKmohB,cAAgB,EAIrBnohB,KAAKokgB,gBAAajpgB,EAClB6E,KAAK6mjB,iBAIL7mjB,KAAK8mjB,2BAA4B,EAIjC9mjB,KAAK+ihB,oBAAsB,SAAUzmhB,GACjC,GAAIkP,GAAQkb,SAAU,CAClB,IAAI0zd,EAASr6e,EAAMq6e,OACf2sE,EAAO,IAAI/iiB,OAAOkF,OAAOC,aAAa,KAAM,KAC5C69hB,EAAW,IAAIhjiB,OAAOkF,OAAOC,aAAa,IAAK,KACnDixd,EAAOjxe,OAASixe,EAAOjxe,OAAOoG,QAAQw3iB,EAAM,KAAKx3iB,QAAQy3iB,EAAU,KACnE,IACIC,GADAx6hB,EAAO2td,EAAO4oC,YAAYnngB,YAAYtM,QAAQw3iB,EAAM,KAAKx3iB,QAAQy3iB,EAAU,MACxD9iiB,UAAU,GACjC,GAAIk2d,EAAOiD,oBAAsBjD,EAAOwnC,qBAgBpC,OAfAxnC,EAAOwnC,sBAAuB,QACzBxnC,EAAOkV,MAAMzR,gBAAkBzD,EAAOkV,MAAM7U,kBACzCL,EAAOjxe,OAAO+a,UAAU,KAAO+iiB,IAC3BlnjB,EAAM6vE,UAAU0qK,SAEhBv6O,EAAM6vE,UAAUryE,MAAMq7hB,yBAAyBx+C,EAAOxqa,UAAUryE,MAAMs5gB,cAAe92gB,EAAM6vE,UAAUryE,MAAMoO,QAAUyue,EAAOjxe,OAAO1M,OAAS,IAC5IsD,EAAM4oiB,gBAAgBse,GACtB7sE,EAAOjxe,OAAS,IAAM+f,OAAOC,aAAa,KAAO89hB,IAGjDlnjB,EAAM4oiB,gBAAgBse,GACtB7sE,EAAOjxe,OAAS,IAAM+f,OAAOC,aAAa,KAAO89hB,KAM5D,GAAI7sE,EAAOiD,oBAAsBjD,EAAO0nC,kBAAsC,KAAlB1nC,EAAOvrQ,OAyBpE,OAxBIurQ,EAAOjxe,OAAO+a,UAAU,KAAO+iiB,EAC3BlnjB,EAAM6vE,UAAU0qK,SAAW8/P,EAAOiD,oBAClCjD,EAAOiD,oBAAqB,EAE5Bt9e,EAAM6vE,UAAUryE,MAAMq7hB,yBAAyBx+C,EAAOxqa,UAAUryE,MAAMs5gB,cAAe92gB,EAAM6vE,UAAUryE,MAAMoO,OAASyue,EAAOjxe,OAAO+a,UAAU,GAAGznB,QAC/IsD,EAAM6vE,UAAUmie,kCACM,KAAlB33D,EAAOvrQ,QAAiC,KAAhBo4U,GACxBlnjB,EAAM4oiB,gBAAgBse,IAGpBlnjB,EAAM6vE,UAAU0qK,UACtB8/P,EAAOiD,oBAAqB,EAC5Bt9e,EAAM4oiB,gBAAgBse,IAGL,KAAhBA,GACL7sE,EAAOiD,oBAAqB,EAC5Bt9e,EAAMmnjB,iBAED9sE,EAAOjxe,OAAO+a,UAAU,KAAO+iiB,GAAiC,KAAlB7sE,EAAOvrQ,SAC1DurQ,EAAOiD,oBAAqB,EAC5Bt9e,EAAM4oiB,gBAAgB,WAE1BvuD,EAAO0nC,kBAAmB,GAGzB,GAAI1nC,EAAO0nC,kBAAoB1nC,EAAOiD,qBAAuBjD,EAAOooC,mBAAoB,CACzF,GAAIykC,EAAYxqjB,OAAS29e,EAAOjxe,OAAO1M,QACnCwqjB,IAAgB7sE,EAAOjxe,OAAO+a,UAAU,EAAGk2d,EAAOjxe,OAAO1M,OAAS,IAAM29e,EAAO4oC,YAAY/nd,UAAUx+D,OAAS,EAE9G,YADAsD,EAAMmnjB,gBAGL,GAAsB,KAAlB9sE,EAAOvrQ,QACZurQ,EAAO4oC,YAAY/nd,UAAUm/a,EAAO4oC,YAAY/nd,UAAUx+D,OAAS,KAAOysB,OAAOC,aAAa,KAS9F,OARAixd,EAAOiD,oBAAqB,EAG5Bt9e,EAAM6vE,UAAUryE,MAAMq7hB,yBAAyBx+C,EAAOxqa,UAAUryE,MAAMs5gB,cAAe92gB,EAAM6vE,UAAUryE,MAAMoO,QAAUyue,EAAOjxe,OAAO1M,OAAS,IAC5IsD,EAAM6vE,UAAU/wD,IAAI+5gB,yBAAyBx+C,EAAOxqa,UAAU/wD,IAAIg4f,cAAe92gB,EAAM6vE,UAAU/wD,IAAIlT,OAASyue,EAAOvrQ,OAAOpyO,QAE5HsD,EAAM6vE,UAAUmie,uCAChBhyiB,EAAM4oiB,gBAAgBse,GAKjB,OAATx6hB,GAA0B,OAATA,GAA0B,MAATA,GAAsB2td,EAAOkV,MAAMzR,iBAA8C,IAA5BzD,EAAOonC,mBACjF,MAAT/0f,GAA4B,MAAZA,EAAK,IAAuB,KAATA,GAAeA,EAAKhwB,OAAS29e,EAAOjxe,OAAO1M,QAC9EwqjB,IAAgB7sE,EAAOjxe,OAAO+a,UAAU,EAAGk2d,EAAOjxe,OAAO1M,OAAS,IAClEsD,EAAMmnjB,gBACF9sE,EAAO4oC,YAAY/nd,UAAUx+D,OAAS,GACtCsD,EAAMu9e,eAG2B,IAAhC7wd,EAAKluB,QAAQ67e,EAAOjxe,SAAiBsjB,EAAKhwB,OAAS29e,EAAOjxe,OAAO1M,OACtEsD,EAAM4oiB,gBAAgBl8gB,EAAKvI,UAAUk2d,EAAOjxe,OAAO1M,UAEb,IAAjCgwB,EAAKluB,QAAQ67e,EAAOjxe,SAAkBsjB,EAAKA,EAAKhwB,OAAS,KAAOysB,OAAOC,aAAa,MAC5D,MAA1BsD,EAAKA,EAAKhwB,OAAS,IACjBwqjB,EAAY9niB,OAAO,GAAGvJ,cAAgBqxiB,EAAY5ljB,MAAM,KAAQ+4e,EAAOjxe,OAAO+a,UAAU,IAEzFnkB,EAAM6vE,UAAUryE,MAAM26hB,qBAAqB99C,EAAOxqa,UAAUryE,MAAMs5gB,cAAe92gB,EAAM6vE,UAAUryE,MAAMoO,QAAUyue,EAAOjxe,OAAO1M,OAAS,IAE5IsD,EAAM4oiB,gBAAgBse,IAED,IAAhBx6hB,EAAKhwB,QACVsD,EAAM4oiB,gBAAgB,UAI7B,CACD,IAAIl8gB,GAAAA,EAAO1sB,EAAMq6e,OAAO4oC,YAAY/nd,aACvB/xC,OAAOC,aAAa,KAEhB,OAATsD,GAA0B,OAATA,GAA0B,MAATA,GAAsB1sB,EAAMuvf,MAAMzR,iBAAoD,IAAlC99e,EAAMq6e,OAAOonC,kBACnGzhhB,EAAM4oiB,gBAAgBl8gB,GAI1B1sB,EAAM4oiB,gBAAgB,KAE1B5oiB,EAAMq6e,OAAO4oC,YAAY/nd,UAAY,KAQ7Cj7D,KAAKijhB,QAAU,SAAU3mhB,GAChByD,EAAMuvf,MAAMzR,gBACb99e,EAAM+igB,cAAcxmgB,GAExBA,EAAMkpB,kBAEVxlB,KAAKo6e,OAASA,EACdp6e,KAAKgkhB,YAAc,IAAIw+B,GAAaxijB,KAAKo6e,OAAOkV,OA06SpD,OAx6SAhxf,OAAOuJ,eAAei5e,EAAOzlf,UAAW,iBACpCqM,IAAK,WACD,OAAO1H,KAAKo6e,OAAOkV,MAAM84B,eAE7BzghB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAei5e,EAAOzlf,UAAW,aACpCqM,IAAK,WACD,GAAI1H,KAAKo6e,OACL,OAAOp6e,KAAKo6e,OAAOxqa,WAI3BjoE,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAei5e,EAAOzlf,UAAW,SACpCqM,IAAK,WACD,OAAO1H,KAAKo6e,OAAOkV,OAEvB3nf,YAAY,EACZC,cAAc,IAElBk5e,EAAOzlf,UAAUkkC,cAAgB,WAC7B,MAAO,UAEXuhd,EAAOzlf,UAAU8rjB,YAAc,SAAUl+hB,EAAMlqB,GAC3C,IAAIq6gB,EAAYnwf,EAChB,GAAIxrB,EAAkBsB,IACiB,eAA/Bq6gB,EAAUl1f,UAAU,EAAG,IAAsB,CAE7C,IAAIjS,GADJmngB,EAAYA,EAAUl1f,UAAU,IAAIhU,QACd3R,QAAQ,OAC9BQ,EAAS,KAAOq6gB,EAAUl1f,UAAU,EAAGjS,GAAO/B,OAAS,KAG/D,IAAI2ye,EAAY,IAAIC,GAChBh1b,EAAO,IAAIqlc,GAAWtQ,GACtB4I,EAAa,IAAIH,GAAgB,GACrCx9b,EAAK1zC,SAAS5V,KAAKinf,GACnB,IAAI27D,EAAgB,IAAI5yD,GACxB4yD,EAAc36hB,KAAOxD,EACrB6kC,EAAK1zC,SAAS5V,KAAK4ijB,GACnB,IAAIrpD,EAAiB,IAAIzS,GAAgB,GACzCyS,EAAetS,WAAaA,EAC5BA,EAAWsS,eAAiBA,EAC5Bjwc,EAAK1zC,SAAS5V,KAAKu5f,GACnB,IAAIspD,EAAkB,IAAI7yD,GAC1B6yD,EAAgB56hB,KAAO1tB,EACvB+uD,EAAK1zC,SAAS5V,KAAK6ijB,GACnB,IAAI77D,EAAW,IAAIF,GAAgB,GACnCE,EAASuS,eAAiBA,EAC1BvS,EAASC,WAAaA,EACtBA,EAAWD,SAAWA,EACtBuS,EAAevS,SAAWA,EAC1B19b,EAAK1zC,SAAS5V,KAAKgnf,GACnBC,EAAW39b,KAAOA,EAClB+0b,EAAUI,aAAaz+e,KAAKspD,GAC5B9tD,KAAKo6e,OAAOxud,OAAOpnB,KAAKinf,GACxB,IAAIgH,KACJA,EAAQjuf,KAAKq+e,GACb7if,KAAKsnjB,sBAAsB70D,IAM/B3R,EAAOzlf,UAAUova,IAAM,WACfzqa,KAAKsvf,MAAMzR,gBAAkB79e,KAAK4vE,UAAU0qK,SAGhDt6O,KAAK4vE,UAAU0ne,qBAAoB,IAMvCx2D,EAAOzlf,UAAU6hf,kBAAoB,WAC7Bl9e,KAAKo6e,OAAOkV,MAAM7jB,kBAAoBzre,KAAKo6e,OAAOkV,MAAM9jB,mBACxDxre,KAAKo6e,OAAOkV,MAAMpS,qBAO1B4D,EAAOzlf,UAAU+2hB,4BAA8B,SAAU8R,GACrDlkiB,KAAKg6d,eAAeh6d,KAAK4vE,WACzB5vE,KAAK4vE,UAAUryE,MAAMu6hB,wBAAuB,GACxC93hB,KAAK4vE,UAAU0qK,QACft6O,KAAK4vE,UAAU/wD,IAAIk5gB,oBAAoB/3hB,KAAK4vE,UAAUryE,OAGtDyC,KAAK4vE,UAAU/wD,IAAIi5gB,wBAAuB,GAE9C93hB,KAAK4vE,UAAUwud,sBAAwBp+hB,KAAK4vE,UAAU/wD,IAAI6O,SAAS3gB,EACnE/M,KAAK4vE,UAAUk1d,qBAAqBZ,IAMxCpjD,EAAOzlf,UAAUiif,YAAc,WAC3Bt9e,KAAKo6e,OAAOvrQ,OAAS,GACjB7uO,KAAK4vE,UAAUryE,MAAMslf,UAAUvoQ,WAA6C,IAAhCt6O,KAAK4vE,UAAUryE,MAAMoO,QACjE3L,KAAK4vE,UAAUryE,MAAMs5gB,cAAcxZ,eAA+C,IAA9Br9f,KAAK4vE,UAAU/wD,IAAIlT,QACvE3L,KAAK4vE,UAAU/wD,IAAIg4f,cAAcxZ,cACjCr9f,KAAKo6e,OAAOjxe,OAAS,GAGrBnJ,KAAKunjB,qBAETvnjB,KAAKo6e,OAAOjxe,OAAS,IAAM+f,OAAOC,aAAa,KAAOnpB,KAAKo6e,OAAOjxe,OAClEnJ,KAAKo6e,OAAO4oC,YAAY/nd,UAAYj7D,KAAKo6e,OAAOjxe,OAChDnJ,KAAKo6e,OAAOxqa,UAAU+2c,4BAA4B3mhB,KAAKo6e,OAAOjxe,OAAO1M,SAOzEqkf,EAAOzlf,UAAUksjB,mBAAqB,WAClC,IAAIntE,EAASp6e,KAAKo6e,OAClB,GAA4B,KAAxBp6e,KAAK4vE,UAAUnjD,KAAnB,CAKI,IAAI/G,EAAa,EACb+0gB,EAAaz6hB,KAAK4vE,UAAUryE,MAAMs5gB,cAAcliB,UAAU30f,KAAK4vE,UAAUryE,MAAMoO,OAAQ+Z,GACvF0/H,EAASq1Y,EAAWz5hB,QAExB,GADA0kB,EAAa+0gB,EAAWxohB,WACT9W,IAAXiqJ,EAAsB,CACtB,IAAIoia,EAAUxnjB,KAAK4vE,UAAUs9d,sBAAsB9nZ,EAAQ1/H,GACvDoL,EAAM02hB,EAAQxmjB,QAClB0kB,EAAa8hiB,EAAQv1iB,MACrB,IAAIw1iB,EAAa,EACjB,IAAKhqjB,EAAkBqzB,GAAM,CACzB,IAAI42hB,GAAc,EAQlB,IAPI52hB,aAAe0je,IAAkB9ue,EAAa,GAAKoL,EAAIg9B,KAAKuvc,gBAC5DjjB,EAAOjxe,OAAS,IAEdi8I,aAAkBovW,KACpBpvW,EAASplJ,KAAK4vE,UAAU2/d,uBAAuBnqZ,KAG3Cqia,EAAartE,EAAOjxe,OAAO0vF,YAAY,MAAQ,GAAKusD,aAAkBovW,IAC1E,GAAIpvW,EAAO84W,wBAAwB1J,KAAkD,IAAhCpa,EAAOjxe,OAAO5K,QAAQ,KAAa,CAUpF,GATKmpjB,EAKDttE,EAAOjxe,OAASi8I,EAAO34H,KAAO2td,EAAOjxe,QAJrCixe,EAAOjxe,OAASi8I,EAAO34H,KAAKvI,UAAU,EAAGwB,GACzCgiiB,GAAc,IAKlBtia,EAASA,EAAO84W,wBAEMnJ,GAClB,MAEE3vW,aAAkBovW,KACpBpvW,EAASplJ,KAAK4vE,UAAU2/d,uBAAuBnqZ,SAGlD,KAAMA,EAAO84W,wBAAwB1J,IAAiB,CAClDkzD,EAKDttE,EAAOjxe,OAASi8I,EAAO34H,KAAO2td,EAAOjxe,QAJrCixe,EAAOjxe,OAASi8I,EAAO34H,KAAKvI,UAAU,EAAGwB,GACzCgiiB,GAAc,GAKlB,MAGFttE,EAAOjxe,OAAO1M,OAAS,GAAiD,MAA5C29e,EAAOjxe,OAAOixe,EAAOjxe,OAAO1M,OAAS,IACvB,MAA5C29e,EAAOjxe,OAAOixe,EAAOjxe,OAAO1M,OAAS,IAIrCgrjB,GAAc,EACdrtE,EAAOjxe,OAAS,IAJhBs+iB,EAAartE,EAAOjxe,OAAO0vF,YAAY,KAM3CuhZ,EAAOjxe,OAASs+iB,EAAa,EAAIrtE,EAAOjxe,OAASixe,EAAOjxe,OAAO+a,UAAUujiB,GACtC,IAA/BrtE,EAAOjxe,OAAO5K,QAAQ,MAAc67e,EAAOjxe,OAAO1M,QAAU,IAC5D29e,EAAOjxe,OAASixe,EAAOjxe,OAAO+a,UAAU,IAG5C,IAAI0B,EAAW,EACX+hiB,EAAgB3njB,KAAK4vE,UAAU/wD,IAAIg4f,cAAcliB,UAAU30f,KAAK4vE,UAAU/wD,IAAIlT,OAAQia,GACtF0khB,EAAYqd,EAAc3mjB,QAK9B,GAJA4kB,EAAW+hiB,EAAc11iB,MACzBu1iB,EAAUxnjB,KAAK4vE,UAAUs9d,sBAAsB5C,EAAW1khB,GAC1DkL,EAAM02hB,EAAQxmjB,QACd4kB,EAAW4hiB,EAAQv1iB,MACf6e,EAAK,CACL,IAAI82hB,GAAc,EAKlB,IAJI92hB,aAAe0je,IAAkB5ue,EAAWkL,EAAIr0B,SAChD29e,EAAOvrQ,OAAS,KAGZ44U,EAAartE,EAAOvrQ,OAAOtwO,QAAQ,MAAQ,GAAK+riB,aAAqB91C,IACzE,GAAI81C,EAAU34O,oBAAoB6iM,KAAkD,IAAhCpa,EAAOvrQ,OAAOtwO,QAAQ,KACjEqpjB,EAKDxtE,EAAOvrQ,OAASurQ,EAAOvrQ,OAASy7T,EAAU79gB,MAJ1C2td,EAAOvrQ,OAAS/9M,EAAIrE,KAAKvI,UAAU0B,GACnCgiiB,GAAc,GAKlBtd,EAAYA,EAAU34O,cAErB,KAAM24O,EAAU34O,oBAAoB6iM,IAAiB,CACjDozD,EAKDxtE,EAAOvrQ,OAASurQ,EAAOvrQ,OAASy7T,EAAU79gB,MAJ1C2td,EAAOvrQ,OAAS/9M,EAAIrE,KAAKvI,UAAU0B,GACnCgiiB,GAAc,GAKlB,MAGRH,EAAartE,EAAOvrQ,OAAOtwO,QAAQ,KACnC67e,EAAOvrQ,OAAS44U,EAAa,EAAIrtE,EAAOvrQ,OAASurQ,EAAOvrQ,OAAO3qN,UAAU,EAAGujiB,WApGxFrtE,EAAOjxe,OAAS,IA+GxB23e,EAAOzlf,UAAUurhB,kBAAoB,SAAUtqhB,EAAOuuB,EAAM8yD,EAAOq2B,GAC/D,IAAI32G,EAAMf,EAAMq6G,OAASr6G,EAAMwrB,QAC/B,IAAI+C,GAAS8yD,GAAUq2B,EA8IlB,IAAIr2B,GAAU9yD,GAASmpF,EAcvB,GAAIr2B,GAAS9yD,IAASmpF,EACvB,OAAQ32G,GACJ,KAAK,GACI2C,KAAKsvf,MAAMzR,gBACZ79e,KAAKsvf,MAAM1/a,UAAUqzd,gBAAgB,UAEzC,MACJ,KAAK,GACIjjiB,KAAKsvf,MAAMzR,gBACZ79e,KAAKsvf,MAAM1/a,UAAU4zd,iBAEzBlniB,EAAMkpB,iBACN,MACJ,KAAK,IACDlpB,EAAMkpB,iBACDxlB,KAAKsvf,MAAMzR,gBACZ79e,KAAKuwhB,uBAAuB,WAAY,aAAa,GAEzD,MACJ,KAAK,IACDj0hB,EAAMkpB,iBACDxlB,KAAKsvf,MAAMzR,gBACZ79e,KAAKuwhB,uBAAuB,WAAY,aAAa,GAEzD,MACJ,KAAK,IACDj0hB,EAAMkpB,iBACDxlB,KAAKsvf,MAAMzR,gBACZ79e,KAAK6njB,wBAAwB,oBAIxC,IAAKlqe,GAAS9yD,GAAQmpF,EACvB,OAAQ32G,GACJ,KAAK,GACDf,EAAMkpB,kBACDxlB,KAAKsvf,MAAMzR,gBAAkB79e,KAAKsvf,MAAM7U,kBACzCz6e,KAAKmjiB,4BAMjB,OAAQ9liB,GACJ,KAAK,EACDf,EAAMkpB,iBACNxlB,KAAKknjB,gBACL,MACJ,KAAK,EACD5qjB,EAAMkpB,iBACFxlB,KAAKsvf,MAAMw4D,WACX9njB,KAAK4vE,UAAU04d,cAAa,GAAM,GAEtC,MACJ,KAAK,GACDhsiB,EAAMkpB,iBACNxlB,KAAK+njB,iBACL,MACJ,KAAK,GACD/njB,KAAKgojB,eACL1rjB,EAAMkpB,sBAzEd,OAAQnoB,GACJ,KAAK,EACDf,EAAMkpB,iBACFxlB,KAAKsvf,MAAMw4D,WACX9njB,KAAK4vE,UAAU04d,cAAa,GAAO,GAEvC,MACJ,KAAK,GACDtoiB,KAAKiojB,mBACL3rjB,EAAMkpB,sBAtJd,OADAxlB,KAAKo6e,OAAOonC,kBAAmB,EACvBnkhB,GACJ,KAAK,EACDf,EAAMkpB,iBACFxlB,KAAKsvf,MAAMw4D,WACX9njB,KAAK4vE,UAAU04d,cAAa,GAAO,GAEvC,MACJ,KAAK,GACDhsiB,EAAMkpB,iBACNxlB,KAAKsxhB,uBAAuB,gBAAiB,GAAG,GAAO,GACvD,MACJ,KAAK,GACDh1hB,EAAMkpB,iBACDxlB,KAAKsvf,MAAMzR,gBACZ79e,KAAKsxhB,uBAAuB,cAAe,GAAG,GAAO,GAEzD,MACJ,KAAK,GACDh1hB,EAAMkpB,iBACDxlB,KAAKsvf,MAAMzR,gBACZ79e,KAAKsxhB,uBAAuB,cAAe,GAAG,GAAO,GAEzD,MACJ,KAAK,GACDh1hB,EAAMkpB,iBACDxlB,KAAKsvf,MAAMzR,gBACZ79e,KAAKsxhB,uBAAuB,cAAe,KAAK,GAAO,GAE3D,MACJ,KAAK,GACDh1hB,EAAMkpB,iBACDxlB,KAAKsvf,MAAMzR,gBACZ79e,KAAK+iiB,aAET,MACJ,KAAK,GACDzmiB,EAAMkpB,kBACDxlB,KAAKsvf,MAAMzR,gBAAkB79e,KAAKsvf,MAAMzT,kBACzC77e,KAAKsvf,MAAMzT,iBAAiBkC,iBAEhC,MACJ,KAAK,GACI/9e,KAAKsvf,MAAMzR,gBACZ79e,KAAKsjiB,oBAAoB,UAE7BhniB,EAAMkpB,iBACN,MACJ,KAAK,GACDlpB,EAAMkpB,kBACDxlB,KAAKsvf,MAAMrU,YAAcj7e,KAAKsvf,MAAMhU,oBACrCt7e,KAAKsvf,MAAMhU,kBAAkBt6L,WAAY,EACzChhT,KAAKsvf,MAAMhU,kBAAkBE,qBAAoB,IAErD,MACJ,KAAK,GACDl/e,EAAMkpB,iBACDxlB,KAAKsvf,MAAMzR,gBACZ79e,KAAKgjiB,eAET,MACJ,KAAK,GACIhjiB,KAAKsvf,MAAMzR,gBACZ79e,KAAKsjiB,oBAAoB,WAE7BhniB,EAAMkpB,iBACN,MACJ,KAAK,GACDlpB,EAAMkpB,iBACFxlB,KAAKsvf,MAAMvT,wBAA0B/7e,KAAKsvf,MAAMzR,gBAChD79e,KAAKsvf,MAAMvT,sBAAsB93X,OAErC,MACJ,KAAK,GACIjkH,KAAKsvf,MAAMzR,gBACZ79e,KAAKsjiB,oBAAoB,QAE7BhniB,EAAMkpB,iBACN,MACJ,KAAK,GACIxlB,KAAKsvf,MAAMzR,gBACZ79e,KAAKsvf,MAAM1/a,UAAU2zd,iBAEzBjniB,EAAMkpB,iBACN,MACJ,KAAK,GACDlpB,EAAMkpB,iBACDxlB,KAAKsvf,MAAMzR,gBACZ79e,KAAKsvf,MAAMlU,YAEf,MACJ,KAAK,GACIp7e,KAAKsvf,MAAMzR,gBACZ79e,KAAKsjiB,oBAAoB,SAE7BhniB,EAAMkpB,iBACN,MACJ,KAAK,GACDlpB,EAAMkpB,iBACDxlB,KAAKsvf,MAAMzR,gBACZ79e,KAAKsvf,MAAM1/a,UAAUqzd,gBAAgB,UAEzC,MACJ,KAAK,GACD3miB,EAAMkpB,iBACDxlB,KAAKsvf,MAAMzR,gBACZ79e,KAAKsvf,MAAMuT,OAAOp4F,MAEtB,MACJ,KAAK,GACGzqa,KAAKsvf,MAAMxU,sBACX96e,KAAKoohB,cAAcjoG,OACnB7jb,EAAMkpB,kBAEV,MACJ,KAAK,GACGxlB,KAAKsvf,MAAMxU,sBACX96e,KAAKoohB,cAAcloG,OACnB5jb,EAAMkpB,kBAEV,MACJ,KAAK,IACDlpB,EAAMkpB,iBACDxlB,KAAKsvf,MAAMzR,gBACZ79e,KAAKuwhB,uBAAuB,WAAY,aAAa,GAEzD,MACJ,KAAK,IACDj0hB,EAAMkpB,iBACDxlB,KAAKsvf,MAAMzR,gBACZ79e,KAAKuwhB,uBAAuB,WAAY,aAAa,GAEzD,MACJ,KAAK,IACDj0hB,EAAMkpB,iBACDxlB,KAAKsvf,MAAMzR,gBACZ79e,KAAK6njB,wBAAwB,eAuFjD/mE,EAAOzlf,UAAU4sjB,iBAAmB,WAC3BjojB,KAAKsvf,MAAMzR,gBACZ79e,KAAK2oiB,gBAAgB,MAEzB3oiB,KAAK4vE,UAAUk1c,4BAMnBhkC,EAAOzlf,UAAU6rjB,cAAgB,WACxBlnjB,KAAKsvf,MAAMzR,gBACZ79e,KAAKsvf,MAAM5U,aAAawtE,cAE5BlojB,KAAK4vE,UAAUk1c,4BAMnBhkC,EAAOzlf,UAAU2sjB,aAAe,WACvBhojB,KAAKsvf,MAAMzR,gBACZ79e,KAAKsvf,MAAM5U,aAAaytE,WAE5BnojB,KAAK4vE,UAAUk1c,4BAMnBhkC,EAAOzlf,UAAU0sjB,eAAiB,WACzB/njB,KAAKsvf,MAAMzR,iBACRrye,GAAQkb,WACR1mB,KAAKo6e,OAAOiD,oBAAqB,GAErCr9e,KAAKsvf,MAAM5U,aAAa0tE,WAE5BpojB,KAAK4vE,UAAUk1c,4BAKnBhkC,EAAOzlf,UAAUstiB,gBAAkB,SAAUl8gB,GACzC,IAAI1sB,EAAQC,KACPA,KAAKsvf,MAAMzR,iBACR79e,KAAKqojB,gBACLnojB,aAAaF,KAAKqojB,gBAEtBvkjB,EAAU9D,KAAK4vE,UAAU+yb,UAAY,0BACrC3igB,KAAKsvf,MAAM5U,aAAa0hE,WAAW3vhB,GAAM,GAEzCzsB,KAAKqojB,eAAiBlojB,WAAW,WACzBJ,EAAMsojB,gBACNnojB,aAAaH,EAAMsojB,gBAEnBtojB,EAAM6vE,WAAa7vE,EAAM6vE,UAAU+yb,OACnC7+f,EAAU/D,EAAM6vE,UAAU+yb,OAAQ,8BAEvC,MAEP3igB,KAAK4vE,UAAUk1c,4BAOnBhkC,EAAOzlf,UAAUitjB,iBAAmB,SAAUtshB,EAAQz8B,GAClD,IAAIgpjB,EAAe,IAAIvlE,GACnBwlE,EAAUxojB,KAAK4vE,UAAUoua,gBA+B7B,OA9BIz+e,GACAgpjB,EAAa/iE,WAAWxpd,GAEvBv+B,EAAkB+qjB,EAAQ95gB,OAAS1S,EAAO0S,OAAS85gB,EAAQ95gB,OAC5D65gB,EAAa75gB,KAAO85gB,EAAQ95gB,MAE3BjxC,EAAkB+qjB,EAAQj3gB,SAAWvV,EAAOuV,SAAWi3gB,EAAQj3gB,SAChEg3gB,EAAah3gB,OAASi3gB,EAAQj3gB,QAE9Bi3gB,EAAQ37hB,SAAW,GAAKmP,EAAOnP,WAAa27hB,EAAQ37hB,WACpD07hB,EAAa17hB,SAAW27hB,EAAQ37hB,UAE/BpvB,EAAkB+qjB,EAAQv7hB,aAAe+O,EAAO/O,aAAeu7hB,EAAQv7hB,aACxEs7hB,EAAat7hB,WAAau7hB,EAAQv7hB,YAEjCxvB,EAAkB+qjB,EAAQh+D,iBAAmBxud,EAAOwud,iBAAmBg+D,EAAQh+D,iBAChF+9D,EAAa/9D,eAAiBg+D,EAAQh+D,gBAErC/sf,EAAkB+qjB,EAAQn+D,oBAAsBrud,EAAOqud,oBAAsBm+D,EAAQn+D,oBACtFk+D,EAAal+D,kBAAoBm+D,EAAQn+D,mBAExC5sf,EAAkB+qjB,EAAQl+D,YAActud,EAAOsud,YAAck+D,EAAQl+D,YACtEi+D,EAAaj+D,UAAYk+D,EAAQl+D,WAEhC7sf,EAAkB+qjB,EAAQtzS,YAAcl5O,EAAOk5O,YAAcszS,EAAQtzS,YACtEqzS,EAAarzS,UAAYszS,EAAQtzS,WAEhCz3Q,EAAkB+qjB,EAAQj+D,gBAAkBvud,EAAOuud,gBAAkBi+D,EAAQj+D,gBAC9Eg+D,EAAah+D,cAAgBi+D,EAAQj+D,eAElCg+D,GASXznE,EAAOzlf,UAAU+gjB,WAAa,SAAU3vhB,EAAMu0R,GAC1C,IACIynQ,EADA74e,EAAY5vE,KAAKo6e,OAAOxqa,UAExB84e,GAAY,EAChB1ojB,KAAKklhB,qBACLllhB,KAAK0+a,YAAY,UACjB,IAAI45H,EAAgBt4iB,KAAK2ojB,iBAAiB/4e,EAAUryE,OAWpD,GAVAyC,KAAKo6e,OAAOxqa,UAAUg5e,aAAe5ojB,KAAKszf,qBAAqBglD,EAAcz1D,UAAWy1D,EAAc3siB,OAAOuB,cACvG0iE,EAAU0qK,UAAYt6O,KAAKo6e,OAAOxqa,UAAUw1c,iBAC9CplhB,KAAKo6e,OAAO8qC,oBAAgD,SAA1Bt1c,EAAUy0b,eAC5Cz0b,EAAUqxd,iBAAkB,EAC5Brxd,EAAUuxd,qBAAsB,EAChCunB,EAAY1ojB,KAAK6ojB,uBAAuBj5e,GACxCA,EAAUuxd,qBAAsB,EAChCvxd,EAAUqxd,iBAAkB,GAEhCqX,EAAgBt4iB,KAAK2ojB,iBAAiB/4e,EAAUryE,OAC5CmrjB,EAAW,CAIX,GAHA94e,EAAU0/a,MAAM9jB,mBAAoB,EACpCxre,KAAK8ojB,wBACLL,EAAiB74e,EAAUryE,OACRslf,UAAUvoQ,UAAW,CACpC,IAAI33K,EAAO,IAAI6xb,GACX+zD,EAAevojB,KAAKsojB,iBAAiBG,EAAe5lE,UAAU7E,iBAAiB,GACnFr7a,EAAKq7a,gBAAgBwH,WAAW+iE,GAChC5lf,EAAKl2C,KAAOA,EACZk2C,EAAK7U,KAAO26f,EAAe5lE,UAAUI,aAAa,GAClDtgb,EAAKlmC,OAAS,IAAIqgS,GAAO,EAAG,EAAG,EAAG,GAClCn6P,EAAK7U,KAAK1zC,SAAS5V,KAAKm+D,GACwC,WAA3D8lf,EAAe5lE,UAAUjF,gBAAgBj9c,eACoB,UAA3D8nhB,EAAe5lE,UAAUjF,gBAAgBj9c,gBACoB,IAAhE8nhB,EAAe5lE,UAAUjF,gBAAgBgG,WAAWsC,SACpDuiE,EAAe5lE,UAAU91e,EAAI/M,KAAKo6e,OAAO+rB,iBAAiBp5f,GAE9D/M,KAAKo6e,OAAOvpb,OAAOwmd,kBAAkBoxC,EAAe5lE,UAAW,EAAG,OAEjE,CACD,IAAI+R,EAAgB,EAChBilC,EAAY4uB,EAAe5xC,cAAcliB,UAAU8zD,EAAe98iB,OAAQipf,GAC1ExvW,EAASy0Y,EAAU74hB,QACvB4zf,EAAgBilC,EAAU5nhB,MAG1B,IADIs2iB,EAAevojB,KAAKsojB,iBAAiBlja,EAAO44V,iBAAiB,IAChDyM,aAAarlW,EAAO44V,iBACjCh+e,KAAK+ojB,iBAAiB3ja,EAAQx1E,EAAWnjD,EAAMmoe,OAE9C,CACD,IAAIo0D,EAAW,IAAIx0D,GACnBw0D,EAASv8hB,KAAOA,EAChBu8hB,EAASl7f,KAAOs3F,EAAOt3F,KACvBk7f,EAAShrE,gBAAgBwH,WAAW+iE,GACpC,IAAI36C,EAAcxoX,EAAOwsW,aACzB,GAAIgD,IAAkBxvW,EAAO3oJ,OACzB2oJ,EAAOt3F,KAAK1zC,SAASiO,OAAOulf,EAAc,EAAG,EAAGo7C,QAE/C,GAAsB,IAAlBp0D,EACLxvW,EAAOt3F,KAAK1zC,SAASiO,OAAOulf,EAAa,EAAGo7C,OAE3C,CACD,GAAI5ja,aAAkBovW,GAAgB,CAClC,IAAIy0D,EAAe,IAAIz0D,GACvBy0D,EAAan7f,KAAOs3F,EAAOt3F,KAC3Bm7f,EAAajrE,gBAAgBwH,WAAWpgW,EAAO44V,iBAC/CirE,EAAax8hB,KAAO24H,EAAO34H,KAAKvI,UAAU0we,GAC1CxvW,EAAO34H,KAAO24H,EAAO34H,KAAKprB,MAAM,EAAGuzf,GACnCxvW,EAAOt3F,KAAK1zC,SAASiO,OAAOulf,EAAc,EAAG,EAAGq7C,GAEpD7ja,EAAOt3F,KAAK1zC,SAASiO,OAAOulf,EAAc,EAAG,EAAGo7C,GAEpDhpjB,KAAKo6e,OAAOvpb,OAAOwmd,kBAAkBoxC,EAAe5lE,UAAWz9V,EAAOt3F,KAAK8jc,aAAc,IAGjG5xf,KAAKk4hB,qBAAqBogB,EAAcz1D,UAAWy1D,EAAc3siB,OAAS8gB,EAAKhwB,QAAQ,GACvFuD,KAAKkpjB,oBAEAzrjB,EAAkBuC,KAAKoohB,gBAAmB3qhB,EAAkBuC,KAAKoohB,cAAco0B,qBAAyE,eAAjDx8iB,KAAKoohB,cAAco0B,mBAAmBrmf,SAC9In2D,KAAKo6e,OAAO8qC,qBACZllhB,KAAKoohB,cAAcmK,gBACnBvyhB,KAAKoohB,cAAcq0B,wBAKvBz8iB,KAAKyjjB,SAAS7ze,GAOlB,IAAKoxO,GAAa0nQ,IAAuB,MAATj8hB,GAAyB,OAATA,GAA0B,OAATA,GAAgB,CAC7E,IACI08hB,GAA0B1rjB,EADTmyE,EAAU40b,qBAE3B8xB,GAAS,EAIb,GAHe,OAAT7pgB,IACF6pgB,EAASt2hB,KAAKopjB,oBAAoBx5e,EAAoB,OAATnjD,IAE7C08hB,EACA,OAEC7yB,GAEDt2hB,KAAKqpjB,2BAA2Bz5e,GAAW,KAKvDkxa,EAAOzlf,UAAU+tjB,oBAAsB,SAAUx5e,EAAW05e,GAExD,IAAK7rjB,EADMmyE,EAAUgua,gBAAgB4zC,WAEjC,OAAO,EAEX,IAAI+3B,GAAc,EACdC,GAAgB,EAChB50D,EAAgB,EAChBilC,EAAYjqd,EAAUryE,MAAMs5gB,cAAcliB,UAAU/kb,EAAUryE,MAAMoO,OAAS,EAAGipf,GAChFxvW,EAASy0Y,EAAU74hB,QAEvB,GADA4zf,EAAgBilC,EAAU5nhB,QACpBmzI,aAAkBovW,IACpB,OAAO,EAMX,IAJA,IAAI7xb,EAAOyiF,EACP34H,EAAOk2C,EAAKl2C,KAAKvI,UAAU,EAAG0we,GAC9B60D,EAAW,EACXhtjB,EAAS,GACLgB,EAAkBklE,EAAKu7b,eAAe,CAE1C,KAAIv7b,EAAKu7b,wBAAwB1J,KAA8C,OAA3B7xb,EAAKu7b,aAAazxe,MAA0D,IAAzCk2C,EAAKu7b,aAAazxe,KAAKvc,OAAOzT,OAKrH,OAAO,EAJyB,OAA3BkmE,EAAKu7b,aAAazxe,KAAiBg9hB,GAAY,GAAKhtjB,EAAyC,IAAhCkmE,EAAKu7b,aAAazxe,KAAKhwB,OACrFkmE,EAAOA,EAAKu7b,aAKpBv7b,EAAOyiF,EACP,IAAInzI,EAAQ,EACRg3G,EAAWx8F,EAAKosE,YAAY,MAEhC,IADA5mF,EAASg3G,GAAY,EAAKA,EAAW,EAAIx8F,EAAKosE,YAAY,KAAO,EAC1Dl2B,EAAKu7b,wBAAwB1J,IAA4B,IAAVvif,GAAa,CAE/D,IAAIy3iB,GADJ/mf,EAAOA,EAAKu7b,cACYzxe,KAExBxa,GADAg3G,EAAWygc,EAAa7wd,YAAY,QACf,EAAKowB,EAAW,EAAIygc,EAAa7wd,YAAY,KAAO,EAEzEpsE,GADAA,EAAOk2C,EAAKl2C,KAAOA,GACPvI,UAAUjS,GAG1B,IAAI+yf,GADJv4e,EAAOk+d,GAAcgB,UAAUl/d,IACPvI,UAAU,EAAG,GACjCogf,EAAmBtkgB,KAAKurgB,oBAAoB9+e,EAAKvI,UAAU,EAAG,IAQlE,GAPyB,SAArBogf,GAA+BtkgB,KAAK2pjB,kBAAkB3kD,EAAmC,WAArBV,EAA+B73e,GACnG88hB,GAAc,EAETvpjB,KAAK4pjB,iBAAiBn9hB,KAC3B+8hB,GAAgB,EAChBD,GAAc,GAEdA,EAAa,CACbvpjB,KAAKu8iB,mBAAmB,YACxB,IAAI15D,EAAYz9V,EAAOy9V,UAEvBjza,EAAUryE,MAAM26hB,qBAAqBr1C,EAAUI,aAAa,GAAIJ,EAAUI,aAAa,GAAGvzc,UAAU01G,EAAQwvW,EAAgB,IAC5Hhlb,EAAU/wD,IAAIq5gB,qBAAqBr1C,EAAUI,aAAa,GAAI,GAC9Djjf,KAAK0+a,YAAY,UACjB1+a,KAAK6pjB,uBAAuBj6e,GAAW,GACvC5vE,KAAKyjjB,SAAS7ze,GAAW,GACzB,IAAIm1b,EAAkBukD,EAAQ,MAAQ,QACtCtkD,EAAgBwkD,EAAsC,KAAO/8hB,EAAKvI,UAAUuI,EAAKhwB,OAAS,EAAGgwB,EAAKhwB,QAAlE,KAAOuogB,EACvC,IAAI8kD,EAAkBr9hB,EAAKvI,UAAUuI,EAAKhwB,OAAS,EAAGgwB,EAAKhwB,OAAS,GACpE6ngB,EAAoBklD,EAAmCxpjB,KAAKurgB,oBAAoBu+C,GAA5CxlD,EACpC,IAAIhc,EAAY,IAAIuc,QAAW1pgB,GAC/Bmtf,EAAUgc,iBAAmBA,EACJ,WAArBA,EACa,MAAT73e,GACA67d,EAAU0c,aAAe,IACzB1c,EAAUtK,gBAAgB/wd,WAAa,UAEzB,MAATR,IACL67d,EAAU0c,aAAe,KAI7B1c,EAAU0c,aAAeA,EAE7B1c,EAAUyc,gBAAkBA,EAC5B,IAAI9b,EAAar5a,EAAUgua,gBAAgBqL,WAEvCX,EAAU1K,gBAAgBqL,WADb,IAAbwgE,GAA6B,IAAXhtjB,EACqBwsf,EAAa,GAAKwgE,EAAWhtjB,EAE/Dm4f,EAAgB,EACkB3L,EAAmC,KAArB2L,EAAgB,GAAW,GAE3E3L,EAAa,EACqBA,EAAa,GAGb,GAE3CX,EAAU1K,gBAAgBhgQ,iBAAmB,IACvC4rU,GAA0C,MAAzB/8hB,EAAKvI,UAAU,EAAG,IAAmC,OAApB4liB,EACpDxhE,EAAUtC,QAAU,EAGpBsC,EAAUtC,QAAU,EAExBhmf,KAAK+pjB,gBAAgBn6e,EAAW04a,GAC5Btof,KAAKoohB,gBAAkB3qhB,EAAkBuC,KAAKoohB,cAAco0B,oBAC5Dx8iB,KAAKoohB,cAAcq0B,uBAGnBz8iB,KAAKyjjB,SAAS7ze,GAGtB,OAAO25e,GAEXzoE,EAAOzlf,UAAUkwgB,oBAAsB,SAAUvugB,GAC7C,OAAQA,GACJ,IAAK,IACL,IAAK,IACD,MAAO,SACX,IAAK,IACD,MAAO,UACX,IAAK,IACD,MAAO,WACX,IAAK,IACD,MAAO,WACX,IAAK,IACD,MAAO,YACX,IAAK,IACL,IAAK,IACD,MAAO,SACX,IAAK,KACL,IAAK,KACD,MAAO,cACX,QACI,MAAO,SAGnB8jf,EAAOzlf,UAAU0ujB,gBAAkB,SAAUn6e,EAAW04a,GACxC14a,EAAUryE,MACjBqyE,EAAUqwd,WACHrwd,EAAU/wD,IAEtB,IAAIyuF,EAAU,IAAI24Y,GACdjmf,KAAKo6e,OAAO99N,MAAM7/Q,OAAS,EAC3B6wG,EAAQ44Y,OAASlmf,KAAKo6e,OAAO99N,MAAMt8Q,KAAKo6e,OAAO99N,MAAM7/Q,OAAS,GAAGypf,OAAS,EAG1E54Y,EAAQ44Y,OAAS,EAErB,IAAI8jE,EAAkB,IAAIrlD,GACtB9zc,EAAS7wD,KAAKo6e,OACdvpb,EAAOsvb,cAAc1jf,OAAS,EAC9ButjB,EAAgB5jE,eAAiBv1b,EAAOsvb,cAActvb,EAAOsvb,cAAc1jf,OAAS,GAAG2pf,eAAiB,EAGxG4jE,EAAgB5jE,eAAiB,EAErC94Y,EAAQ84Y,eAAiB4jE,EAAgB5jE,eACzCv1b,EAAOsvb,cAAc37e,KAAKwljB,GAC1BA,EAAgB5qe,OAAO56E,KAAK8jf,GAC5BA,EAAUrD,UAAY+kE,EACtBp6e,EAAUgua,gBAAgBg0C,QAAQtkb,GAClC19B,EAAUgua,gBAAgBmJ,gBAAkB,GAEhDjG,EAAOzlf,UAAUsujB,kBAAoB,SAAU3kD,EAAcilD,EAAUx9hB,GACnE,GAAIw9hB,EACA,MAAwB,KAAjBjlD,EAGP,IAAI/yf,EAAQwa,EAAKluB,QAAQymgB,GACzB,OAAyB,MAAjBA,GAAyC,MAAjBA,GACR,MAAjBA,GAAyC,MAAjBA,IAAoE,KAA3Cv4e,EAAKvI,UAAUjS,EAAOwa,EAAKhwB,OAAS,IAGpGqkf,EAAOzlf,UAAUuujB,iBAAmB,SAAUn9hB,GAG1C,IAAK,IAFDlJ,EACA2miB,GAAS,EACJ/tjB,EAAI,EAAGA,GAAKswB,EAAKhwB,OAAS,EAAGN,IAAK,CACvC,GAAuB,MAAnBswB,EAAKtN,OAAOhjB,GAAhB,CAIAonB,EAAIpnB,EACJ,MAJI+tjB,GAAS,EAMjB,IAAIllD,OAAe7pgB,EAOnB,OALI6pgB,EADmB,MAAnBv4e,EAAKtN,OAAOoE,GACGkJ,EAAKtN,OAAOoE,EAAI,GAGhBkJ,EAAKtN,OAAOoE,GAExB2miB,GAAUlqjB,KAAK2pjB,kBAAkB3kD,GAAc,EAAOv4e,IAEjEq0d,EAAOzlf,UAAU8ujB,uBAAyB,SAAUn2D,GAChD,IAAI/jW,OAAO90J,EAUX,OATI64f,EAAM9Q,2BAA2BR,GACjCzyV,EAAO+jW,EAAM9Q,gBAAgBjzV,KAExB+jW,EAAM9Q,2BAA2BgP,GACtCjiW,EAAO+jW,EAAM9Q,gBAAgBjzV,KAExB+jW,EAAM9Q,2BAA2B6O,KACtC9hW,EAAO+jW,EAAM9Q,gBAAgByF,WAAW14V,MAErCA,GAKX6wV,EAAOzlf,UAAU0tjB,iBAAmB,SAAU/njB,EAAS4uE,EAAWnjD,EAAMxa,GACpE,GAAIjR,aAAmBwzf,GAAgB,CACnCxzf,EAAQyrB,KAAOk+d,GAAch2Y,OAAO3zG,EAAQyrB,KAAMxa,EAAOwa,GACzD,IAAIo2d,EAAY7hf,EAAQ8sD,KAAK+0b,UACzB1xO,EAAY0xO,EAAUI,aAAa1kf,QAAQyC,EAAQ8sD,MACnD69J,EAAe3qN,EAAQ8sD,KAAK1zC,SAAS7b,QAAQyC,GACjDhB,KAAKo6e,OAAOvpb,OAAOwmd,kBAAkBx0B,EAAW1xO,EAAWxlD,QAEtD3qN,aAAmByzf,GACxBz0f,KAAKoqjB,gBAAgBppjB,EAAS4uE,EAAWnjD,EAAMxa,GAE1CjR,aAAmBsqf,GACE,IAAtBtqf,EAAQuqf,UACRvrf,KAAKqqjB,qBAAqBrpjB,EAAS4uE,EAAWnjD,EAAMxa,GAEzB,IAAtBjR,EAAQuqf,UACbvrf,KAAKsqjB,yBAAyBtpjB,EAAS4uE,EAAWnjD,EAAMxa,GAGxDjS,KAAKuqjB,mBAAmBvpjB,EAAS4uE,EAAWnjD,EAAMxa,GAGjDjR,aAAmB0zf,IACxB10f,KAAKwqjB,mBAAmBxpjB,EAAS4uE,EAAWnjD,EAAMxa,IAG1D6ue,EAAOzlf,UAAUgvjB,qBAAuB,SAAU5+D,EAAY77a,EAAWnjD,EAAMxa,GAC3E,IAAIw4iB,EAAU,IAAIj2D,GAClBi2D,EAAQh+hB,KAAOA,EACf,IAAI0kP,EAAYs6O,EAAW39b,KAAK+0b,UAAUI,aAAa1kf,QAAQktf,EAAW39b,MACtE48f,EAAYj/D,EAAW39b,KAAK1zC,SAAS7b,QAAQktf,GACjDg/D,EAAQzsE,gBAAgBwH,WAAWiG,EAAWzN,iBAC9CyN,EAAW39b,KAAK1zC,SAASiO,OAAOqiiB,EAAW,EAAGD,GAC9CA,EAAQ38f,KAAO29b,EAAW39b,KAC1B9tD,KAAKo6e,OAAOvpb,OAAOwmd,kBAAkB5rB,EAAW39b,KAAK+0b,UAAW1xO,EAAWu5S,IAE/E5pE,EAAOzlf,UAAUmvjB,mBAAqB,SAAUxpjB,EAAS4uE,EAAWnjD,EAAMxa,GACtE,IAAIw4iB,EAAU,IAAIj2D,GAClBi2D,EAAQh+hB,KAAOA,EACf,IAAI0kP,EAAYnwQ,EAAQ8sD,KAAK+0b,UAAUI,aAAa1kf,QAAQyC,EAAQ8sD,MAChE48f,EAAY1pjB,EAAQ8sD,KAAK1zC,SAAS7b,QAAQyC,GAC9CypjB,EAAQzsE,gBAAgBwH,WAAWxkf,EAAQg9e,iBAC3Ch9e,EAAQ8sD,KAAK1zC,SAASiO,OAAOqiiB,EAAW,EAAGD,GAC3CA,EAAQ38f,KAAO9sD,EAAQ8sD,KACvB9tD,KAAKo6e,OAAOvpb,OAAOwmd,kBAAkBr2gB,EAAQ8sD,KAAK+0b,UAAW1xO,EAAWu5S,IAE5E5pE,EAAOzlf,UAAUivjB,yBAA2B,SAAUvsD,EAAgBnub,EAAWnjD,EAAMxa,GACnF,IAAI2ohB,EAAiBhrd,EAAUs7d,sBAAsBntC,GACjDo9B,EAAavrd,EAAUu7d,kBAAkBptC,GACzCp7b,EAAO,IAAI6xb,GACf7xb,EAAKl2C,KAAOA,EACZ,IAAIi+hB,EAAY3sD,EAAejwc,KAAK1zC,SAAS7b,QAAQw/f,GACjD9rf,IAAU8rf,EAAethgB,QACzBiujB,IAEAjtjB,EAAkBm9hB,IAAmBn9hB,EAAkB09hB,GACvDx4d,EAAKq7a,gBAAgBwH,WAAWuY,EAAejwc,KAAK+0b,UAAU7E,iBAEzDvgf,EAAkBm9hB,GACvBj4d,EAAKq7a,gBAAgBwH,WAAW21C,EAAWn9C,iBAG3Cr7a,EAAKq7a,gBAAgBwH,WAAWo1C,EAAe58C,iBAEnD+f,EAAejwc,KAAK1zC,SAASiO,OAAOqiiB,EAAW,EAAG/nf,GAClDA,EAAK7U,KAAOiwc,EAAejwc,KAC3B,IAAIqjN,EAAY4sP,EAAejwc,KAAK+0b,UAAUI,aAAa1kf,QAAQw/f,EAAejwc,MAClF9tD,KAAKo6e,OAAOvpb,OAAOwmd,kBAAkBtZ,EAAejwc,KAAK+0b,UAAW1xO,EAAWu5S,IAEnF5pE,EAAOzlf,UAAUkvjB,mBAAqB,SAAU/+D,EAAU57a,EAAWnjD,EAAMxa,GACvE,IAAI0wD,EAAO,IAAI6xb,GACf7xb,EAAKl2C,KAAOA,EACZ,IAAIi+hB,EAAYl/D,EAAS19b,KAAK1zC,SAAS7b,QAAQitf,GAC/C7ob,EAAKq7a,gBAAgBwH,WAAWgG,EAASxN,iBACzCwN,EAAS19b,KAAK1zC,SAASiO,OAAOqiiB,EAAY,EAAG,EAAG/nf,GAChDA,EAAK7U,KAAO09b,EAAS19b,KACrB,IAAIqjN,EAAYq6O,EAAS19b,KAAK+0b,UAAUI,aAAa1kf,QAAQitf,EAAS19b,MACtE9tD,KAAKo6e,OAAOvpb,OAAOwmd,kBAAkB7rB,EAAS19b,KAAK+0b,UAAW1xO,EAAWu5S,IAE7E5pE,EAAOzlf,UAAU+ujB,gBAAkB,SAAU90X,EAAO1lH,EAAWnjD,EAAMxa,GACjE,IAAI04iB,EAAoB/6e,EAAUs7d,sBAAsB51W,GACpDs1X,EAAgBh7e,EAAUu7d,kBAAkB71W,GAC5CxnI,EAAOwnI,EAAMxnI,KACb9sD,EAAU,IAAIwzf,GACd3R,EAAY/0b,EAAK+0b,UACjB1xO,EAAY0xO,EAAUI,aAAa1kf,QAAQuvD,GAC/C9sD,EAAQyrB,KAAOA,EACf,IAAIi+hB,EAAY58f,EAAK1zC,SAAS7b,QAAQ+2L,GAClCrjL,IAAUqjL,EAAM74L,QAChBiujB,IAEAjtjB,EAAkBktjB,IAAsBltjB,EAAkBmtjB,GAC1D5pjB,EAAQg9e,gBAAgBwH,WAAW3C,EAAU7E,iBAExCvgf,EAAkBktjB,GACvB3pjB,EAAQg9e,gBAAgBwH,WAAWolE,EAAc5sE,iBAGjDh9e,EAAQg9e,gBAAgBwH,WAAWmlE,EAAkB3sE,iBAEzDlwb,EAAK1zC,SAASiO,OAAOqiiB,EAAW,EAAG1pjB,GACnCA,EAAQ8sD,KAAOA,EACf9tD,KAAKo6e,OAAOvpb,OAAOwmd,kBAAkBx0B,EAAW1xO,EAAWu5S,IAK/D5pE,EAAOzlf,UAAU6phB,mBAAqB,WAC9BllhB,KAAKo6e,OAAO8qC,qBACZllhB,KAAKu8iB,mBAAmB,cAEpBv8iB,KAAKo6e,OAAOxqa,UAAUryE,MAAMslf,UAAUjF,gBAAgBgG,aAA2F,IAA7E5jf,KAAKo6e,OAAOxqa,UAAUryE,MAAMslf,UAAUjF,gBAAgBgG,WAAWsC,QACrIlmf,KAAK6xhB,iBAAY12hB,KAK7B2lf,EAAOzlf,UAAUgujB,2BAA6B,SAAUz5e,EAAWi7e,EAAShoE,GACxE,IAAIp2d,EACAk2C,EACJ,GAAIkof,EAEAp+hB,GADAk2C,EAAOkgb,EAAU/6W,UAAU1tH,SAASyoe,EAAU/6W,UAAU1tH,SAAS3d,OAAS,IAC9DgwB,SAEX,CACD,IAAImoe,EAAgB,EAChBilC,EAAYjqd,EAAUryE,MAAMs5gB,cAAcliB,UAAU/kb,EAAUryE,MAAMoO,OAAS,EAAGipf,GAChFxvW,EAASy0Y,EAAU74hB,QAEvB,GADA4zf,EAAgBilC,EAAU5nhB,QACpBmzI,aAAkBovW,IACpB,OAGJ/ne,GADAk2C,EAAOyiF,GACK34H,KAAKvI,UAAU,EAAG0we,GAElC,IAAI3if,EAAQ,EACR64iB,EAAer+hB,EAAKosE,YAAY,MAEpC,IADA5mF,EAAS64iB,GAAgB,EAAKA,EAAe,EAAIr+hB,EAAKosE,YAAY,KAAO,EAClEl2B,EAAKu7b,wBAAwB1J,IAA4B,IAAVvif,GAAa,CAE/D,IAAIy3iB,GADJ/mf,EAAOA,EAAKu7b,cACYzxe,KAExBxa,GADA64iB,EAAepB,EAAa7wd,YAAY,QACf,EAAKiyd,EAAe,EAAIpB,EAAa7wd,YAAY,KAAO,EACjFpsE,EAAOk2C,EAAKl2C,KAAOA,EAGvB,IAAIs+hB,GADJt+hB,EAAOA,EAAKvI,UAAUjS,IACG2D,cACrBo1iB,GAAc,EAClB,GAAsC,aAAlCD,EAAc7miB,UAAU,EAAG,IACW,YAAlC6miB,EAAc7miB,UAAU,EAAG,IAAoB6miB,EAActujB,OAAS,GACpC,aAAlCsujB,EAAc7miB,UAAU,EAAG,IAAqB6miB,EAActujB,OAAS,GACrC,SAAlCsujB,EAAc7miB,UAAU,EAAG,IAAiB6miB,EAActujB,OAAS,GACjC,OAAlCsujB,EAAc7miB,UAAU,EAAG,IAAe6miB,EAActujB,OAAS,GAC/B,YAAlCsujB,EAAc7miB,UAAU,EAAG,IAAoB6miB,EAActujB,OAAS,EAC1EuujB,GAAc,EACwB,SAAlCD,EAAc7miB,UAAU,EAAG,IAAiB6miB,EAActujB,OAAS,IACnEgwB,EAAO,UAAYA,OAGtB,CACD,IAAIw+hB,EAAUx+hB,EAAKluB,QAAQ,KACvB2sjB,EAAWz+hB,EAAKluB,QAAQ,KACxB0sjB,EAAU,GAAKA,EAAUC,GAAYA,EAAWz+hB,EAAKhwB,OAAS,IAC9DuujB,GAAc,EACdv+hB,EAAO,UAAYA,GAG3B,GAAIu+hB,EAAa,CACb,IAAIrhB,EAAW,IAAIvS,GAAap3hB,KAAKo6e,OAAOkV,OAC5Cq6C,EAASzR,qBAAqBv1d,EAAK7U,KAAM6U,EAAK7U,KAAKpe,UAAUizB,EAAM1wD,IACnE,IAAI23hB,EAAS,IAAIxS,GAAap3hB,KAAKo6e,OAAOkV,OAC1C,GAAIu7D,EACAjhB,EAAO1R,qBAAqBv1d,EAAK7U,KAAM6U,EAAK7U,KAAK0vc,qBAGjD,GAAoD,IAAhD5tb,EAAU/wD,IAAIg4f,cAAcz8f,SAAS3d,QAAyC,IAAzBmzE,EAAU/wD,IAAIlT,OAAc,CACjF,IAAIqthB,EAAWppd,EAAU/wD,IAAIg4f,cAAcpZ,aAC3CmsC,EAAO1R,qBAAqBc,EAAUA,EAASx7B,qBAG/CosC,EAAO1R,qBAAqBtod,EAAU/wD,IAAIg4f,cAAejnc,EAAU/wD,IAAIlT,OAAS,GAGxF3L,KAAKmrjB,oBAAoBv7e,EAAWnjD,EAAMk9gB,EAAUC,KAG5D9oD,EAAOzlf,UAAU8vjB,oBAAsB,SAAUv7e,EAAWhiD,EAAKk/P,EAAeq8P,GAC5EnphB,KAAKu8iB,mBAAmB,uBACxB,IAAI6O,EAAYprjB,KAAK2ojB,iBAAiB77R,GAClCvvR,EAAQyC,KAAKszf,qBAAqB83D,EAAUvoE,UAAWuoE,EAAUz/iB,OAAOuB,YACxElN,KAAKoohB,eAAiBpohB,KAAKoohB,cAAco0B,qBACzCx8iB,KAAKoohB,cAAco0B,mBAAmBiM,eAAiBlrjB,GAG3DqyE,EAAUryE,MAAMw6hB,oBAAoBjrQ,GACpCl9M,EAAU/wD,IAAIk5gB,oBAAoB5O,GAElC,IAAIp7f,EAAO/tB,KAAKw0iB,mBAAmB5ke,GAC/B5zC,EAAS,IAAIgnd,GACjBhnd,EAAOwpd,WAAWz3d,GAClB,IAAIy9d,EAAWxrf,KAAKqrjB,uBAAuBz9hB,EAAKk/P,EAAeq8P,EAAantf,GAE5E4zC,EAAUryE,MAAM26hB,qBAAqB1sC,EAAS19b,KAAO09b,EAAa,KAAE97c,UAAU87c,EAAU,IAExF57a,EAAUryE,MAAM27hB,mBAChBtpd,EAAU/wD,IAAIk5gB,oBAAoBnod,EAAUryE,OAC5C6tjB,EAAYprjB,KAAK2ojB,iBAAiB/4e,EAAU/wD,KAC5C,IAAIA,EAAM7e,KAAKszf,qBAAqB83D,EAAUvoE,UAAWuoE,EAAUz/iB,OAAOuB,YACtElN,KAAKoohB,eAAiBpohB,KAAKoohB,cAAco0B,oBACzCx8iB,KAAKoohB,cAAco0B,mBAAmBrzB,YAActqgB,EACpD7e,KAAKoohB,cAAcq0B,uBACnBz8iB,KAAKyjjB,SAAS7ze,IAGd5vE,KAAK08iB,4BAA4B,EAAGn/iB,EAAOshB,IAGnDiie,EAAOzlf,UAAUiwjB,wBAA0B,SAAU17e,GACjD5vE,KAAK0+a,YAAY,aACjB1+a,KAAKurjB,gCAAgC37e,EAAW,YAAa,UAAU,GACnE5vE,KAAKoohB,eACLpohB,KAAKoohB,cAAcmK,gBAEvBvyhB,KAAKyjjB,SAAS7ze,GAAW,GAEzB5vE,KAAK0+a,YAAY,aACjB1+a,KAAKurjB,gCAAgC37e,EAAW,YAAa,WAAW,GACpE5vE,KAAKoohB,eACLpohB,KAAKoohB,cAAcmK,gBAEvBvyhB,KAAKyjjB,SAAS7ze,GAAW,IAG7Bkxa,EAAOzlf,UAAUgwjB,uBAAyB,SAAUz9hB,EAAKk/P,EAAeq8P,EAAantf,GACjF,IAAI4zC,EAAY5vE,KAAK4vE,UACrB5vE,KAAKo6e,OAAOvpb,OAAO60c,aAAc,EACjC1lgB,KAAKsrjB,wBAAwB17e,GAC7B5vE,KAAKo6e,OAAOvpb,OAAO60c,aAAc,EAEjC,IAAIla,EAAW,IAAIF,GAAgB,GACnCE,EAASxN,gBAAgBwH,WAAWxpd,GACpCwvd,EAAS19b,KAAO8hB,EAAU/wD,IAAIg4f,cAC9Bjnc,EAAUryE,MAAMw6hB,oBAAoBnod,EAAU/wD,KAE9C7e,KAAKwrjB,iBAAiBhgE,GAEtB57a,EAAUryE,MAAMw6hB,oBAAoBjrQ,GACpCl9M,EAAU/wD,IAAIk5gB,oBAAoBnod,EAAUryE,OAE5C,IAAIkhB,EAAQze,KAAKyrjB,qBAAqB77e,EAAW5zC,EAAQpO,GACrDujP,EAAYvhM,EAAUryE,MAAMslf,UAAUI,aAAa1kf,QAAQkgB,EAAMqvC,MACjE77C,EAAQwM,EAAMqvC,KAAK1zC,SAAS7b,QAAQkgB,GAGxC,OAFA+se,EAASoS,mBAAmB59f,KAAKo6e,QACjCp6e,KAAKo6e,OAAOvpb,OAAOwmd,kBAAkBznc,EAAUryE,MAAMslf,UAAW1xO,EAAWl/P,GACpEu5e,GAEX1K,EAAOzlf,UAAUowjB,qBAAuB,SAAU77e,EAAW5zC,EAAQpO,EAAK89hB,GAEtE,IAAIjtiB,EAAQ,IAAI6se,GAAgB,GAChC7se,EAAMu/d,gBAAgBwH,WAAWxpd,GACjCvd,EAAMqvC,KAAO8hB,EAAUryE,MAAMs5gB,cAC7B72gB,KAAKwrjB,iBAAiB/siB,GACtB,IAAIkkD,EAAO,IAAI6xb,GACf7xb,EAAKq7a,gBAAgBwH,WAAWxpd,GAE5B2mC,EAAKl2C,KADLi/hB,EACY,mBAAsB99hB,EAAM,KAG5B,eAAkBA,EAAM,KAExC+0C,EAAK7U,KAAO8hB,EAAUryE,MAAMs5gB,cAC5B72gB,KAAKwrjB,iBAAiB7of,GACtB,IAAIsuD,EAAY,IAAIq6X,GAAgB,GAIpC,OAHAr6X,EAAU+sX,gBAAgBwH,WAAWxpd,GACrCi1F,EAAUnjE,KAAO8hB,EAAUryE,MAAMs5gB,cACjC72gB,KAAKwrjB,iBAAiBv6b,GACfxyG,GAEXqie,EAAOzlf,UAAUswjB,qBAAuB,SAAUvma,GAW9C,GAVIA,aAAkBkmW,IAAwC,IAArBlmW,EAAOmmW,WACxCnmW,EAAOomW,WACHxrf,KAAKo6e,SACLp6e,KAAKo6e,OAAOknC,cAAgBl8X,EAC5BplJ,KAAKo6e,OAAOinC,kBAAoBj8X,EAAOt3F,KAAK+0b,WAGhDz9V,EAAOomW,cAAWrwf,GAGtBiqJ,aAAkBkmW,IAAwC,IAArBlmW,EAAOmmW,UACvC9tf,EAAkB2nJ,EAAOomW,YACtBxrf,KAAKo6e,SACLp6e,KAAKo6e,OAAOknC,cAAgBl8X,EAAOqmW,WACnCzrf,KAAKo6e,OAAOinC,kBAAoBj8X,EAAOt3F,KAAK+0b,WAEhDz9V,EAAOqmW,WAAWsS,oBAAiB5igB,EACnCiqJ,EAAOomW,SAASuS,oBAAiB5igB,QAGpC,GAAIiqJ,aAAkBkmW,IAAwC,IAArBlmW,EAAOmmW,WAC7CnmW,EAAOqmW,WAAY,CACdhuf,EAAkBuC,KAAKo6e,UACxBp6e,KAAKo6e,OAAOknC,cAAgBl8X,EAAOqmW,WACnCzrf,KAAKo6e,OAAOinC,kBAAoBj8X,EAAOt3F,KAAK+0b,WAEhD,IAAI+oE,EAAa5rjB,KAAKo6e,OAAOxud,OAAOrtB,QAAQ6mJ,EAAOqmW,aAC/B,IAAhBmgE,GACA5rjB,KAAKo6e,OAAOxud,OAAOvD,OAAOujiB,EAAY,GAE1Cxma,EAAOqmW,gBAAatwf,IAIhC2lf,EAAOzlf,UAAUm5iB,mBAAqB,SAAU5ke,GAC5C,GAAIA,EAAUryE,MAAMslf,UAAUvoQ,UAC1B,OAAO1qK,EAAUryE,MAAMslf,UAAU7E,gBAIjC,OADWpua,EAAUryE,MAAMs5gB,cAAcliB,UAAU/kb,EAAUryE,MAAMoO,OAAQ,GAC/D3K,QAAQg9e,iBAU5B8C,EAAOzlf,UAAUwwjB,gBAAkB,SAAUj+hB,EAAKgohB,EAAarxiB,EAAQmnjB,GACnE,IAAI97e,EAAY5vE,KAAKo6e,OAAOxqa,UAC5B,GAAIA,EAAUryE,MAAMslf,UAAUwR,iBAAmBzkb,EAAU/wD,IAAIgke,UAAUwR,eAGzE,GAAI9vf,EAEAvE,KAAK8rjB,wBAAwBl8e,EAAWhiD,EAAKgohB,EAAa8V,OAEzD,CAGD,IAAI5+R,EAAgBl9M,EAAUryE,MAC1B4rhB,EAAcv5c,EAAU/wD,IACvB+wD,EAAUqwd,YACXnzQ,EAAgBl9M,EAAU/wD,IAC1BsqgB,EAAcv5c,EAAUryE,OAE5B,IAAIwujB,EAAqB,IAAI30B,GAAap3hB,KAAKo6e,OAAOkV,OACtDy8D,EAAmBh0B,oBAAoBjrQ,GACvC,IAAI/+P,EAAO/tB,KAAKw0iB,mBAAmB5ke,GAC/B5zC,EAAS,IAAIgnd,QAAiB7nf,GAClC6gC,EAAOwpd,WAAWz3d,GAClB/tB,KAAKu8iB,mBAAmB,mBACxB,IAAI6O,EAAYprjB,KAAK2ojB,iBAAiB77R,GAClCvvR,EAAQyC,KAAKszf,qBAAqB83D,EAAUvoE,UAAWuoE,EAAUz/iB,OAAOuB,YACxElN,KAAKoohB,eAAiBpohB,KAAKoohB,cAAco0B,qBAEzCx8iB,KAAKoohB,cAAco0B,mBAAmBiM,eAAiBzojB,KAAKszf,qBAAqB83D,EAAUvoE,UAAWuoE,EAAUz/iB,OAAOuB,aAE3HlN,KAAKsrjB,wBAAwB17e,GAC7B5vE,KAAKo6e,OAAOvpb,OAAO60c,aAAc,EACjC54O,EAAcirQ,oBAAoB5O,GAElC,IAAI39B,EAAW,IAAIF,GAAgB,GACnCE,EAASxN,gBAAgBwH,WAAWxpd,GACpCwvd,EAAS19b,KAAO8hB,EAAU/wD,IAAIg4f,cAC9B/pP,EAAcirQ,oBAAoB5O,GAElCnphB,KAAKwrjB,iBAAiBhgE,GAEtB1+N,EAAcirQ,oBAAoBg0B,GAClC5iC,EAAY4O,oBAAoBjrQ,GAEhC,IAAIruQ,EAAQze,KAAKyrjB,qBAAqB77e,EAAW5zC,EAAQpO,EAAK89hB,GAC9DlgE,EAASoS,mBAAmB59f,KAAKo6e,QACjC,IAAIjpO,EAAYvhM,EAAUryE,MAAMslf,UAAUI,aAAa1kf,QAAQkgB,EAAMqvC,MACjE77C,EAAQwM,EAAMqvC,KAAK1zC,SAAS7b,QAAQkgB,GACxCze,KAAKo6e,OAAOvpb,OAAOwmd,kBAAkBznc,EAAUryE,MAAMslf,UAAW1xO,EAAWl/P,GAC3E,IAAIosf,EAAa7S,EAAS19b,KAC1B8hB,EAAUiie,QAAQxzC,EAAYA,EAAW3ud,UAAU87c,EAAUA,EAAS/uf,SAAS,GAC/E2ujB,EAAYprjB,KAAK2ojB,iBAAiBx/B,GAClC,IAAItqgB,EAAM7e,KAAKszf,qBAAqB83D,EAAUvoE,UAAWuoE,EAAUz/iB,OAAOuB,YACtElN,KAAKoohB,eAAiBpohB,KAAKoohB,cAAco0B,oBAEzCx8iB,KAAKoohB,cAAco0B,mBAAmBrzB,YAAcnphB,KAAKszf,qBAAqB83D,EAAUvoE,UAAWuoE,EAAUz/iB,OAAOuB,YACpHlN,KAAKoohB,cAAcq0B,wBAGnBz8iB,KAAK08iB,4BAA4B,EAAGn/iB,EAAOshB,KAIvDiie,EAAOzlf,UAAUywjB,wBAA0B,SAAUl8e,EAAWhiD,EAAKgohB,EAAa8V,GAC9E,IAAIjujB,EAAkBmyE,EAAUryE,SAG5ByC,KAAKgkgB,cAAcp0b,EAAWhiD,EAAKgohB,GAAvC,CAGA51iB,KAAK0+a,YAAY,mBACjB,IAAIgqI,GAAY,EAIhB,GAHK94e,EAAU0qK,UACXouU,EAAY1ojB,KAAK6ojB,uBAAuBj5e,IAExC84e,EAAW,CAEX,IAAI36hB,EAAO/tB,KAAKw0iB,mBAAmB5ke,GAC/B5zC,EAAS,IAAIgnd,GACjBhnd,EAAOwpd,WAAWz3d,GAClB/tB,KAAKgsjB,wBAAwBp8e,EAAWhiD,EAAKgohB,EAAa55gB,EAAQ0vhB,MAM1E5qE,EAAOzlf,UAAU2wjB,wBAA0B,SAAUp8e,EAAWhiD,EAAKgohB,EAAa55gB,EAAQ0vhB,GACtF1rjB,KAAK8ojB,uBACLl5e,EAAU0/a,MAAM9jB,mBAAoB,EACpC,IAEIxqe,KACAyqf,EAAa,IAAIH,GAAgB,GACrCtqf,EAAQwD,KAAKinf,GACb,IAAI9ob,EAAO,IAAI6xb,GAEX7xb,EAAKl2C,KADLi/hB,EACY,mBAAsB99hB,EAAM,KAG5B,eAAkBA,EAAM,KAExC5sB,EAAQwD,KAAKm+D,GACb,IAAIo7b,EAAiB,IAAIzS,GAAgB,GACzCtqf,EAAQwD,KAAKu5f,GACRtggB,EAAkBm4iB,IAAgC,KAAhBA,KACnCjze,EAAO,IAAI6xb,IACNxW,gBAAgB9oO,UAAY,SACjCvyM,EAAKq7a,gBAAgBsM,UAAY,UACjC3nb,EAAKl2C,KAAOmphB,EACZ50iB,EAAQwD,KAAKm+D,IAEjB,IAAI6ob,EAAW,IAAIF,GAAgB,GACnCtqf,EAAQwD,KAAKgnf,GACbxrf,KAAKisjB,cAAcjrjB,GACH4uE,EAAUryE,MAAMslf,UAChC2I,EAASoS,mBAAmB59f,KAAKo6e,SACe,IAA5Cp6e,KAAKo6e,OAAOxud,OAAOrtB,QAAQktf,IAC3Bzrf,KAAKo6e,OAAOxud,OAAOpnB,KAAKinf,GAEfD,EAAS19b,KAAKpe,UAAU87c,EAAU,GAC/C57a,EAAUiie,QAAQrmD,EAAS19b,KAAM09b,EAAS19b,KAAKpe,UAAU87c,EAAUA,EAAS/uf,SAAS,GACrFuD,KAAKkpjB,oBACLlpjB,KAAKyjjB,SAAS7ze,GAAW,IAE7Bkxa,EAAOzlf,UAAUmwjB,iBAAmB,SAAUxqjB,EAAS6qjB,GACnD7rjB,KAAK0+a,YAAY,gBACjB1+a,KAAKksjB,wBAAwBlsjB,KAAKo6e,OAAOxqa,UAAW5uE,GAChDhB,KAAKoohB,eACLpohB,KAAKoohB,cAAcmK,iBAM3BzxC,EAAOzlf,UAAU8wjB,2BAA6B,SAAUv8e,EAAWw1E,EAAQgna,GACnEpsjB,KAAKqsjB,sBACLz8e,EAAU0/a,MAAM9jB,mBAAoB,GAEnC57Z,EAAU0qK,SACXt6O,KAAK6ojB,uBAAuBj5e,GAEhC5vE,KAAK8ojB,uBACL9ojB,KAAKisjB,eAAe7ma,IAChBplJ,KAAKssjB,iBAAiB18e,IACtB5vE,KAAKusjB,sBAAsB38e,EAAUryE,OAAO,GAEhDyC,KAAKk9e,qBAST4D,EAAOzlf,UAAU2ogB,cAAgB,SAAUp0b,EAAWhiD,EAAKgohB,EAAa8V,GACpE,IAAIjgE,EAAa77a,EAAU40b,oBAC3B,GAAI/mgB,EAAkBguf,GAClB,OAAO,EAEXzrf,KAAK0+a,YAAY,mBACjB1+a,KAAKwmjB,sBAAwB/ojB,EAAkBuC,KAAKoohB,gBAC5CpohB,KAAKoohB,eAAiB3qhB,EAAkBuC,KAAKoohB,cAAciK,wBACnE,IAAIm6B,EAAc,GACd7W,GAAgB,EAEhB5nhB,EAAO/tB,KAAKw0iB,mBAAmB5ke,GAC/B5zC,EAAS,IAAIgnd,GACjBhnd,EAAOwpd,WAAWz3d,GAClB,IAAIgwe,OAAiB5igB,EACrB,IAAKsC,EAAkBguf,EAAWsS,gBAAiB,CAC/CA,EAAiBtS,EAAWsS,eAE5B,IAAI0uD,EAAW78e,EAAU8le,wBAAwBjqD,EAAWsS,eAAejwc,KAAK+0b,UAAW4I,EAAWsS,eAAgBtS,EAAWD,SAAUmqD,EAAe35gB,GAC1JwwhB,EAAcC,EAAS7W,YACvBD,EAAgB8W,EAAS9W,cACzB35gB,EAASywhB,EAASzwhB,OAEtB,IAAIrwB,EAAS8/e,EAAW39b,KAAKpe,UAAU+7c,EAAY,GAKnD,GAJA77a,EAAUryE,MAAM26hB,qBAAqBzsC,EAAW39b,KAAMniD,GACtDA,EAAS8/e,EAAWD,SAAS19b,KAAKpe,UAAU+7c,EAAWD,SAAU,GACjE57a,EAAU/wD,IAAIq5gB,qBAAqBzsC,EAAWD,SAAS19b,KAAMniD,GAC7D3L,KAAK6pjB,uBAAuBj6e,GAAW,IAClC+le,GAAiB6W,IAAgB5W,GAAen4iB,EAAkBsggB,GACnE/9f,KAAKgsjB,wBAAwBp8e,EAAWhiD,EAAKgohB,EAAa55gB,EAAQ0vhB,OAEjE,CAED1rjB,KAAK8ojB,uBACL,IAAI4D,EAAgB,IAAIphE,GAAgB,GACxCohE,EAAc1uE,gBAAgBwH,WAAWiG,EAAWzN,iBACpD0uE,EAAc5+f,KAAO8hB,EAAUryE,MAAMs5gB,cACrC72gB,KAAK2sjB,qBAAqBD,GAC1B,IAAI/pf,EAAO,IAAI6xb,GACf7xb,EAAKq7a,gBAAgBwH,WAAWiG,EAAWzN,iBAEvCr7a,EAAKl2C,KADLi/hB,EACY,mBAAsB99hB,EAAM,KAG5B,eAAkBA,EAAM,KAExC+0C,EAAK7U,KAAO8hB,EAAUryE,MAAMs5gB,cAC5B72gB,KAAK2sjB,qBAAqBhqf,GAC1B,IAAI7Q,EAAQ9xD,KAAKoohB,eAAiBpohB,KAAKoohB,cAAciK,uBACjDryhB,KAAKoohB,cAAciK,uBAAuBu6B,aAAe5sjB,KAAK8xD,MAClE9xD,KAAK6sjB,wBAAwBj9e,EAAW9d,EAAOisc,GAChCnub,EAAU/wD,IAAIg4f,cAAcliB,UAAU/kb,EAAU/wD,IAAIlT,OAAQ,GAAG3K,QACrE48f,mBAAmB59f,KAAKo6e,QACjC,IAAIyI,EAAY6pE,EAAc5+f,KAAK+0b,UAC/B1xO,EAAYu7S,EAAc5+f,KAAK+0b,UAAUI,aAAa1kf,QAAQmujB,EAAc5+f,MAC5E69J,EAAe+gW,EAAc5+f,KAAK1zC,SAAS7b,QAAQmujB,GACvD1sjB,KAAKo6e,OAAOvpb,OAAOwmd,kBAAkBx0B,EAAW1xO,EAAWxlD,GAC3D/7I,EAAUiie,QAAQ6a,EAAclhE,SAAS19b,KAAMniD,GAAQ,GACvD3L,KAAKkpjB,oBACLlpjB,KAAKyjjB,SAAS7ze,GAAW,GAI7B,OAFA5vE,KAAKwmjB,uBAAwB,EAC7BxmjB,KAAK8xD,UACE,GAGXgvb,EAAOzlf,UAAUwxjB,wBAA0B,SAAUj9e,EAAW9d,EAAOisc,GAGnE,IAAK,IADDlJ,GAAY,EACP14f,EAAI21D,EAAMr1D,OAAS,EAAGN,GAAK,EAAGA,IAAK,CACxC,IAAIoE,EAAOuxD,EAAM31D,GAEjB,IAAK04f,EAAW,CACZ,GAAIkJ,IAAmBx9f,EAGlB,CACD,GAAIA,aAAgBuif,IAAmBvif,IAASw9f,EAAejwc,KAAK+0b,UAAW,CAC3EgS,GAAY,EACZ,IAAIhS,OAAY1nf,EAChB,GAAIgB,IAAM21D,EAAMr1D,OAAS,EAAG,CACxBomf,EAAYjza,EAAUryE,MAAMslf,UAC5B,IAAIi0D,EAAiB/4C,EAAejwc,KAAK+0b,UACzC7if,KAAK8sjB,4BAA4BhW,EAAgBlne,EAAWmub,QAG5Dlb,EAAY7if,KAAK+sjB,qBAAqBhvD,EAAejwc,KAAK+0b,UAAWkb,GACrE/9f,KAAKgtjB,gBAAgBnqE,GAAW,GAEpCjza,EAAUo5d,gBAAgBp5d,EAAU2qd,sBAAsB13C,IAAY,GAE1E,SAjBAgS,GAAY,EAoBhBt0f,aAAgBo9f,GAChB39f,KAAK2sjB,qBAAqBpsjB,EAAKlB,SAE1BkB,aAAgBgyf,IACrBvyf,KAAKitjB,YAAY1sjB,EAAKlB,WAMlCyhf,EAAOzlf,UAAUyxjB,4BAA8B,SAAUjqE,EAAWjza,EAAWmub,GAG3E,IAAK,IAFD5sP,EAAY0xO,EAAUI,aAAa1kf,QAAQw/f,EAAejwc,MAC1D69J,EAAek3R,EAAUI,aAAa9xO,GAAW/2P,SAAS7b,QAAQw/f,GAC7Dx6e,EAAI4tP,EAAW5tP,EAAIs/d,EAAUI,aAAaxmf,OAAQ8mB,IAAK,CAC5D,IAAI86e,EAAaxb,EAAUI,aAAa1/d,GACpCA,IAAM4tP,IACNxlD,EAAe,GAEnB,IAAK,IAAIxvN,EAAIwvN,EAAcxvN,EAAIkigB,EAAWjkf,SAAS3d,OAAQN,IACvD6D,KAAK2sjB,qBAAqBtuD,EAAWjkf,SAASje,GAAGkD,WAI7Dyhf,EAAOzlf,UAAU0xjB,qBAAuB,SAAUG,EAAcnvD,GAC5D,IAAIlb,EAAY,IAAIC,GACpBD,EAAU7E,gBAAgBwH,WAAW0nE,EAAalvE,iBAClD6E,EAAUjF,gBAAgB4H,WAAW0nE,EAAatvE,iBAGlD,IAAK,IAFDzsO,EAAY+7S,EAAajqE,aAAa1kf,QAAQw/f,EAAejwc,MAC7D69J,EAAeuhW,EAAajqE,aAAa9xO,GAAW/2P,SAAS7b,QAAQw/f,GAChEx6e,EAAI4tP,EAAW5tP,EAAI2piB,EAAajqE,aAAaxmf,OAAQ8mB,IAAK,CAC/D,IAAI86e,EAAa6uD,EAAajqE,aAAa1/d,GACvCA,IAAM4tP,IACNxlD,EAAe,GAEnB,IAAK,IAAIxvN,EAAIwvN,EAAcxvN,EAAIkigB,EAAWjkf,SAAS3d,OAAQN,IACvD0mf,EAAUI,aAAa,GAAG7oe,SAAS5V,KAAK65f,EAAWjkf,SAASje,IAGpE,OAAO0mf,GAKX/B,EAAOzlf,UAAU6ngB,gBAAkB,WAC/B,IAAIljgB,KAAKsvf,MAAMzR,eAAf,CAGA,IAAIjua,EAAY5vE,KAAK4vE,UACjB67a,EAAa77a,EAAU40b,oBAC3B,IAAI/mgB,EAAkBguf,GAAtB,CAGA,IAAID,EAAWC,EAAWD,SACtBuS,EAAiBtS,EAAWsS,eAC5BguD,EAAqB,IAAI30B,GAAaxnd,EAAU0/a,OAEpDy8D,EAAmB7zB,qBAAqBzsC,EAAW39b,KAAO29b,EAAe,KAAE/7c,UAAU+7c,EAAY,IACjG,IAAI0hE,EAAyB,IAAI/1B,GAAaxnd,EAAU0/a,OAExD69D,EAAuBj1B,qBAAqBn6B,EAAejwc,KAAOiwc,EAAmB,KAAErud,UAAUqud,EAAgBA,EAAethgB,SAChIuD,KAAKu8iB,mBAAmB,mBACxB3se,EAAUryE,MAAM26hB,qBAAqB1sC,EAAS19b,KAAO09b,EAAa,KAAE97c,UAAU87c,EAAU,IACxF57a,EAAU/wD,IAAIk5gB,oBAAoBnod,EAAUryE,OAC5CyC,KAAKmojB,WACLv4e,EAAUryE,MAAMw6hB,oBAAoBo1B,GACpCntjB,KAAK0+a,YAAY,aACjB1+a,KAAKurjB,gCAAgC37e,EAAW,YAAa,QAAQ,GACjE5vE,KAAKoohB,eACLpohB,KAAKoohB,cAAcmK,gBAGvBvyhB,KAAK0+a,YAAY,aACjB1+a,KAAKurjB,gCAAgC37e,EAAW,iBAAaz0E,GAAW,GACpE6E,KAAKoohB,eACLpohB,KAAKoohB,cAAcmK,gBAEvBvyhB,KAAKyjjB,SAAS7ze,GAAW,GACzBA,EAAU/wD,IAAIk5gB,oBAAoBnod,EAAUryE,OAC5CqyE,EAAUryE,MAAMw6hB,oBAAoBg0B,GACpC/rjB,KAAK0+a,YAAY,UACjB1+a,KAAK6pjB,uBAAuBj6e,GAAW,GACvC5vE,KAAKyjjB,SAAS7ze,GAAW,GACrB5vE,KAAKoohB,gBAAkB3qhB,EAAkBuC,KAAKoohB,cAAco0B,qBAC5Dx8iB,KAAKoohB,cAAcq0B,0BAW3B37D,EAAOzlf,UAAUyngB,cAAgB,SAAUxmgB,EAAO8wjB,GAC9C,GAAIptjB,KAAKo6e,OAAOkV,MAAM/iB,iBAClBvse,KAAKqtjB,iBAEJ,CACG5vjB,EAAkB2vjB,KAClBA,EAAcvxjB,QAGlB,IAAIggB,EAAc,GAGE,MADpBA,GADmBuxiB,EAAYrkJ,cAAgBqkJ,EAAYrkJ,cAAgBzsa,EAAMysa,eACtDp8F,QAAQ,WAE/B3sU,KAAKstjB,cAAczxiB,GACnB7b,KAAKo6e,OAAO4oC,YAAYhhhB,UAAY,IAG5ChC,KAAKo6e,OAAO8H,eAKhBpB,EAAOzlf,UAAUgyjB,WAAa,WAE1B,GAAIrtjB,KAAKokgB,YAAcpkgB,KAAKsvf,MAAM/iB,iBAAkB,CAChD,IAAIjrN,EAAazxN,KAAKuB,MAAMpxD,KAAKokgB,YACjCpkgB,KAAKstjB,cAAchsS,KAG3Bw/N,EAAOzlf,UAAUkyjB,UAAY,SAAUC,GACnC,IAAI/6D,KACJ,GAA8B,mBAAU,CACpC,IAAIgmC,EAAiBz4hB,KAAK4vE,UAAUryE,MAAMslf,UACrC7if,KAAK4vE,UAAUqwd,YAChBxH,EAAiBz4hB,KAAK4vE,UAAU/wD,IAAIgke,WAExC,IAAI35c,KACA63Q,EAAMysQ,EAEVtkhB,GADA63Q,EAAMA,EAAIxxS,QAAQ,QAAS,OACjBrS,MAAM,MAChB,IAAK,IAAIf,EAAI,EAAGA,EAAI+sC,EAAIzsC,OAAQN,IAAK,CACjC,IAAIosjB,EAAevojB,KAAKsojB,iBAAiB7vB,EAAez6C,iBAAiB,GACrEyvE,EAAmBztjB,KAAKo6e,OAAOxqa,UAAU6le,+BACzC5yD,EAAY,IAAIC,GACpBD,EAAUjF,gBAAgB4H,WAAWioE,GACrC,IAAI3/f,EAAO,IAAIqlc,GAAWtQ,GAC1B,GAAI35c,EAAI/sC,GAAGM,OAAS,EAAG,CACnB,IAAI65B,EAAc,IAAIk+d,GACtBl+d,EAAY0nd,gBAAgBwH,WAAW+iE,GACvCjyhB,EAAY7J,KAAOyc,EAAI/sC,GACvB2xD,EAAK1zC,SAAS5V,KAAK8xB,GACnBA,EAAYw3B,KAAOA,EAEvB+0b,EAAUI,aAAaz+e,KAAKspD,GAC5B2kc,EAAQjuf,KAAKq+e,SAIjB,IAAS1mf,EAAI,EAAGA,EAAIqxjB,EAAaxnU,SAASvpP,OAAQN,IAC9C6D,KAAKo6e,OAAOkV,MAAM/4Z,OAAOo3b,UAAU6/B,EAAaxnU,SAAS7pP,GAAG23Q,OAAQ2+O,GAG5E,OAAOA,GAEX3R,EAAOzlf,UAAUiyjB,cAAgB,SAAUlzhB,GACvCp6B,KAAKsnjB,sBAAsBtnjB,KAAKutjB,UAAUnzhB,KAE9C0md,EAAOzlf,UAAUisjB,sBAAwB,SAAU70D,GAE/C,IAAI7ib,EAAY5vE,KAAKo6e,OAAOxqa,UACxB84e,GAAY,EAEhB,GADA1ojB,KAAKu8iB,mBAAmB,SACpBv8iB,KAAKo6e,OAAO8qC,mBAAoB,CAChC,IAAIriC,EAAYjza,EAAUryE,MAAMslf,UAC5BA,EAAUjF,gBAAgBgG,aAA+D,IAAjDf,EAAUjF,gBAAgBgG,WAAWsC,QAC7Elmf,KAAK6xhB,iBAAY12hB,GAGzB6E,KAAK0+a,YAAY,SACZ9uW,EAAU0qK,UAAWt6O,KAAKo6e,OAAO8qC,qBAClCwjC,EAAY1ojB,KAAK0tjB,8BAA8B99e,EAAWA,EAAUryE,MAAOqyE,EAAU/wD,MAErF6piB,EACA1ojB,KAAKwtjB,aAAa/6D,GAEbzyf,KAAKoohB,gBACVpohB,KAAKoohB,cAAciK,4BAAyBl3hB,GAE5C6E,KAAKoohB,eAAiBpohB,KAAKoohB,cAAco0B,oBACzCx8iB,KAAKoohB,cAAcmK,gBACnBvyhB,KAAKoohB,cAAcq0B,wBAGnBz8iB,KAAKyjjB,SAAS7ze,EAAWA,EAAU0qK,UAI3CwmQ,EAAOzlf,UAAUmyjB,aAAe,SAAU/6D,GAEtCzyf,KAAKo6e,OAAOkV,MAAM9jB,mBAAoB,EACtCxre,KAAK8ojB,uBACL9ojB,KAAKo6e,OAAOkV,MAAM7jB,iBAAkB,EACpCzre,KAAKo6e,OAAOkV,MAAM5jB,kBAAmB,EACrC1re,KAAK2tjB,gBAAgBl7D,GACrBzyf,KAAKkpjB,oBACLlpjB,KAAKo6e,OAAOkV,MAAM5jB,kBAAmB,EACrC1re,KAAKo6e,OAAOxqa,UAAUk1d,sBAAqB,IAE/ChkD,EAAOzlf,UAAUsyjB,gBAAkB,SAAUl7D,GACzC,IAAK,IAAIlve,EAAI,EAAGA,EAAIkve,EAAQh2f,OAAQ8mB,IAAK,CACrC,IAAIoue,EAASc,EAAQlve,GAIrB,GAHIoue,aAAkB7O,IAAkD,IAA/B6O,EAAO1O,aAAaxmf,SACzDk1f,EAAO1O,aAAa,GAAK,IAAIkQ,GAAWxB,IAExCpue,IAAMkve,EAAQh2f,OAAS,GAAKk1f,aAAkB7O,GAAiB,CAC/D,IAAI8qE,EAAej8D,EACfi8D,EAAa3qE,aAAaxmf,OAAS,GAChCmxjB,EAAa3qE,aAAa,GAAG7oe,SAAS3d,OAAS,GAClDuD,KAAKisjB,cAAc2B,EAAa3qE,aAAa,GAAG7oe,eAGnD,GAAIu3e,aAAkBY,GAAa,CACpC,IAAIkmC,EAAiBz4hB,KAAK4vE,UAAUryE,MAAMslf,UAC1C,GAAI8O,aAAkBoB,IAAe0lC,EAAerkC,cAAe,CAC/D,IAAIn0b,EAAQ0xb,EAERtke,EAAcorgB,EAAetkC,oBACjCl0b,EAAMi2b,qBAAqB7oe,GAE3Bske,aAAkBoB,IAAe0lC,EAAen+S,WAC7Cm+S,EAAel/B,0BAA0BxG,GAC5C/yf,KAAK6tjB,gBAAgBl8D,EAAQ8mC,EAAel/B,gBAG5Cv5f,KAAK8tjB,oBAAoBn8D,MAYzC7Q,EAAOzlf,UAAU0yjB,oBAAsB,SAAU9tf,EAAO80c,EAAUi5C,GAE9D,IAAIpgD,EAAc3tc,EAAMoT,WACxB,GAAI26e,EAEA,IAAK,IAAI7xjB,EAAI,EAAG8V,EAAQ,EAAG9V,EAAI8jE,EAAMgjb,aAAaxmf,OAAQN,IAAK8V,IAAS,CACpE,IAAIyuD,EAAMT,EAAMgjb,aAAa9mf,GAC7B44gB,EAAS9xB,aAAa56d,OAAOpW,EAAO,EAAGyuD,GACvCA,EAAIwib,gBAAkB6xB,EACtB90c,EAAMgjb,aAAa56d,OAAOlsB,EAAG,GAC7BA,IAGR,IAAImzf,EAAQrvb,EAAMijb,gBAClBljf,KAAKiujB,YAAYhuf,GAEQqvb,EAAMrM,aACZ56d,OAAOulf,EAAa,EAAGmH,GAC1CA,EAAS9igB,MAAQguD,EAAMhuD,MACvBguD,EAAMijb,qBAAkB/nf,EACxB45gB,EAAS7xB,gBAAkBoM,EAC3BylB,EAASle,eAAgB,EACzBke,EAASne,oBACTme,EAASle,eAAgB,EACzB72f,KAAKo6e,OAAOvpb,OAAOw2c,iBAAiB0N,GAAU,GAAM,GACpD/0gB,KAAKkujB,sBAAsBn5C,GAAU,GACrC/0gB,KAAKo6e,OAAOvpb,OAAO22c,iBAAiBuN,GACpC/0gB,KAAKo6e,OAAOvpb,OAAO0md,2BAA2BxC,EAAS9igB,MAAOq9e,EAAOylB,GAAU,IASnFj0B,EAAOzlf,UAAU8yjB,iBAAmB,SAAUv+e,EAAWokb,EAAO/zb,GAC5D,IAAIt0D,EAASikE,EAAUryE,MAAMoO,OACbikE,EAAUryE,MAAMslf,UAAUI,aAAa1kf,QAAQqxE,EAAUryE,MAAMs5gB,eAC3E7iB,aAAiBlR,IAAmBn3e,EAAS,IAG7C3L,KAAKoujB,YAAYx+e,EAAUryE,MAAMslf,UAAWmR,EAAO,EAAG,EAAGpkb,EAAUryE,MAAMslf,UAAUjme,WAAYjR,EAAQikE,EAAUryE,MAAMs5gB,eACvHjnc,EAAUo5d,gBAAgBp5d,EAAUryE,MAAMslf,WAAW,GACjD7if,KAAKqujB,oBAAoBz+e,IACzB5vE,KAAKusjB,sBAAsBvsjB,KAAKszf,qBAAqBU,EAAOrof,EAAOuB,aAAa,IAGpFvB,EAAS,GAAK3L,KAAKqujB,oBAAoBz+e,IACvC5vE,KAAKusjB,sBAAsB38e,EAAUryE,OAAO,GAEhD,IAAI0U,EAAQguD,EAAM2xb,aAMlB,GALA3xb,EAAMijb,gBAAgBD,aAAa56d,OAAOpW,EAAO,EAAG+hf,GACpDA,EAAM9Q,gBAAkBjjb,EAAMijb,gBAC9B8Q,EAAM/hf,MAAQguD,EAAMhuD,MACpBjS,KAAKkujB,sBAAsBl6D,GAAO,GAClCh0f,KAAKo6e,OAAOvpb,OAAO0md,2BAA2BvjB,EAAM/hf,MAAO+hf,EAAM9Q,gBAAiB8Q,GAAO,GACrFh0f,KAAKqujB,oBAAoBz+e,GAAY,CACrC,IAAIiza,OAAY1nf,EACZ64f,aAAiBlR,KACjBD,EAAYmR,GAEZA,aAAiBjB,KACjBlQ,EAAYjza,EAAUmnc,6BAA6B/iB,IAEvDh0f,KAAKusjB,sBAAsBvsjB,KAAKszf,qBAAqBzQ,EAAW,MAAM,KAU9E/B,EAAOzlf,UAAUo8iB,UAAY,SAAU7ne,GACnC,IAAIk9M,EAAgBl9M,EAAUryE,MAC1B4rhB,EAAcv5c,EAAU/wD,IACvB+wD,EAAUqwd,YACXnzQ,EAAgBl9M,EAAU/wD,IAC1BsqgB,EAAcv5c,EAAUryE,OAG5B,IAAI6tjB,EAAYprjB,KAAK2ojB,iBAAiB77R,GAEtC,GADAl9M,EAAUg5e,aAAe5ojB,KAAKszf,qBAAqB83D,EAAUvoE,UAAWuoE,EAAUz/iB,OAAOuB,YAErF4/Q,EAAc+1N,YAAcsmC,EAAYtmC,WAAa/1N,EAAcnhR,OAAS,IAAMw9gB,EAAYx9gB,OAG1EmhR,EAAc+1N,UAAU8R,UAAUw0B,EAAYx9gB,OADtD,GAEe3K,QAG/BhB,KAAK0+a,YAAY,OACjB9uW,EAAU0/a,MAAM9jB,mBAAoB,EAChCxre,KAAKoohB,eAAiBpohB,KAAKoohB,cAAciK,wBACrCryhB,KAAKqujB,oBAAoBz+e,IACzB5vE,KAAKusjB,sBAAsB38e,EAAUg5e,cAAc,GAG3D5ojB,KAAKsujB,sBAAsBnlC,EAAYtmC,UAAWjza,EAAWk9M,EAAeq8P,EAAa,GACzF,IAAI7qJ,EAAe,IAAI84J,GAAaxnd,EAAU0/a,OAC9Ctvf,KAAKg4hB,2BAA2B15J,EAAc1uT,EAAUg5e,cACxDh5e,EAAU62d,cAAcnoK,GAAc,GAClCt+X,KAAKoohB,eAAiBpohB,KAAKoohB,cAAciK,wBACrCryhB,KAAKssjB,iBAAiB18e,IACtB5vE,KAAKusjB,sBAAsB38e,EAAU/wD,KAAK,GAGlD7e,KAAKyjjB,SAAS7ze,IAElBkxa,EAAOzlf,UAAUsxjB,qBAAuB,SAAU3rjB,GAC9C,IAAI4uE,EAAY5vE,KAAK4vE,UACjBnzE,EAASuE,EAAQvE,OACjB67iB,EAAgBt4iB,KAAK2ojB,iBAAiB/4e,EAAUryE,OACpD,GAAIqyE,EAAUryE,MAAMslf,UAAUvoQ,UAAW,CACrC,IAAIuoQ,EAAYjza,EAAUryE,MAAMslf,UAChCA,EAAUI,aAAa,GAAG7oe,SAAS5V,KAAKxD,GACxCA,EAAQ8sD,KAAO+0b,EAAUI,aAAa,GACtCjif,EAAQ48f,mBAAmB59f,KAAKo6e,QAChCp6e,KAAKo6e,OAAOvpb,OAAOwmd,kBAAkBx0B,EAAW,EAAG,OAElD,CACD,IAAI+R,EAAgB,EAChBilC,EAAYjqd,EAAUryE,MAAMs5gB,cAAcliB,UAAU/kb,EAAUryE,MAAMoO,OAAQipf,GAC5E25D,EAAY10B,EAAU74hB,QAC1B4zf,EAAgBilC,EAAU5nhB,MAC1BjS,KAAKwujB,sBAAsBD,EAAWvtjB,EAAS4zf,GAAe,GAElE50f,KAAKk4hB,qBAAqBogB,EAAcz1D,UAAWy1D,EAAc3siB,OAASlP,GAAQ,IAEtFqkf,EAAOzlf,UAAU4wjB,cAAgB,SAAUjrjB,GACvC,IAAI4uE,EAAY5vE,KAAK4vE,UACjBnzE,EAAS,EACTomf,OAAY1nf,EACZg2Q,GAAa,EACbktP,OAAaljgB,EACbyygB,EAAc,EACd0qC,EAAgBt4iB,KAAK2ojB,iBAAiB/4e,EAAUryE,OACpD,GAAIqyE,EAAUryE,MAAMslf,UAAUvoQ,UAE1B+jR,GADAxb,EAAYjza,EAAUryE,MAAMslf,WACLI,aAAa,GACpC9xO,EAAY,MAEX,CACD,IAAIyjP,EAAgB,EAChBilC,EAAYjqd,EAAUryE,MAAMs5gB,cAAcliB,UAAU/kb,EAAUryE,MAAMoO,OAAQipf,GAC5E25D,EAAY10B,EAAU74hB,QAM1B,GALA4zf,EAAgBilC,EAAU5nhB,MAC1B4we,EAAY0rE,EAAUzggB,KAAK+0b,UAC3B1xO,EAAY0xO,EAAUI,aAAa1kf,QAAQgwjB,EAAUzggB,MACrD8/c,EAAc2gD,EAAU38D,aACxByM,EAAakwD,EAAUzggB,KACnB8mc,IAAkB25D,EAAU9xjB,OAC5BmxgB,SAEC,GAAsB,IAAlBhZ,EACDn3f,EAAkB8wjB,EAAUrwD,gBAC5B0P,EAAc,OAGjB,CACDA,IACA,IAAI6gD,EAAc,IAAIj6D,GACtBi6D,EAAYzwE,gBAAgBwH,WAAW+oE,EAAUvwE,iBACjDywE,EAAYhiiB,KAAO8hiB,EAAU9hiB,KAAKvI,UAAU0we,GAC5C25D,EAAU9hiB,KAAO8hiB,EAAU9hiB,KAAKuK,OAAO,EAAG49d,GAC1CyJ,EAAWjkf,SAASiO,OAAOulf,EAAa,EAAG6gD,GAC3CA,EAAY3ggB,KAAOyggB,EAAUzggB,MAGrC,IAAK,IAAI3xD,EAAI,EAAGA,EAAI6E,EAAQvE,OAAQN,IAChCM,GAAUuE,EAAQ7E,GAAGM,OACrB4hgB,EAAWjkf,SAASiO,OAAOulf,EAAa,EAAG5sgB,EAAQ7E,IACnD6E,EAAQ7E,GAAG2xD,KAAOuwc,EAClBr9f,EAAQ7E,GAAGyhgB,mBAAmB59f,KAAKo6e,QACnCwzB,IAEJ5tgB,KAAKo6e,OAAOvpb,OAAOwmd,kBAAkBx0B,EAAW1xO,EAAW,GAC3DnxQ,KAAKk4hB,qBAAqBogB,EAAcz1D,UAAWy1D,EAAc3siB,OAASlP,GAAQ,IAEtFqkf,EAAOzlf,UAAUmzjB,sBAAwB,SAAUxtjB,EAAS04d,EAAYznd,EAAOy8iB,GAC3E,IAAI5ggB,EAAO9sD,EAAQ8sD,KACf+0b,EAAY/0b,EAAK+0b,UACjB1xO,EAAYrjN,EAAK8jc,aACjBgc,EAAc5sgB,EAAQ4wf,aAC1B,GAAI3/e,IAAUjR,EAAQvE,OAClBmxgB,IACA9/c,EAAK1zC,SAASiO,OAAOulf,EAAa,EAAGl0C,QAEpC,GAAc,IAAVznd,EACDxU,EAAkBuD,EAAQk9f,eAC1Bl9f,EAAQ8sD,KAAK1zC,SAASiO,OAAO,EAAG,EAAGqxc,GACnCk0C,EAAc,GAGd5sgB,EAAQ8sD,KAAK1zC,SAASiO,OAAOulf,EAAa,EAAGl0C,OAGhD,CACDk0C,IACA,IAAIt3e,EAAc,IAAIk+d,GACtBl+d,EAAY0nd,gBAAgBwH,WAAWxkf,EAAQg9e,iBAC/C1nd,EAAY7J,KAAOzrB,EAAQyrB,KAAKvI,UAAUjS,GAC1CjR,EAAQyrB,KAAOzrB,EAAQyrB,KAAKuK,OAAO,EAAG/kB,GACtC67C,EAAK1zC,SAASiO,OAAOulf,EAAa,EAAGt3e,GACrCA,EAAYw3B,KAAO9sD,EAAQ8sD,KAE3BA,EAAK1zC,SAASiO,OAAOulf,EAAa,EAAGl0C,GACrCk0C,GAAe,EAEnBl0C,EAAW5ra,KAAO9sD,EAAQ8sD,KAC1B4ra,EAAWkkC,mBAAmB59f,KAAKo6e,QAC/Bs0E,GACA1ujB,KAAKo6e,OAAOvpb,OAAOwmd,kBAAkBx0B,EAAW1xO,EAAWy8P,IASnE9sB,EAAOzlf,UAAU4xjB,YAAc,SAAUj5D,GACrC,IAAI00D,GAAY,EACZ94e,EAAY5vE,KAAK4vE,UAQrB,GAPKA,EAAU0qK,UACXouU,EAAY1ojB,KAAK6ojB,uBAAuBj5e,IAEvC84e,GACD94e,EAAU62d,cAAc72d,EAAUryE,OAAO,GAE7CyC,KAAK8tjB,oBAAoB95D,GACrBh0f,KAAKqujB,oBAAoBz+e,GAAY,CACrC,IAAIiza,OAAY1nf,EAEZ0nf,EADAmR,aAAiBlR,GACLkR,EAGAh0f,KAAK4vE,UAAUmnc,6BAA6B/iB,GAG5Dh0f,KAAKusjB,sBAAsBvsjB,KAAKszf,qBAAqBzQ,EAAW,MAAM,GAE1E7if,KAAKk9e,qBAQT4D,EAAOzlf,UAAUyyjB,oBAAsB,SAAU95D,GAC7C,IAAIpkb,EAAY5vE,KAAK4vE,UAEjB++e,EAAY3ujB,KAAK4vE,UAAUryE,MAAMslf,UACrC,IAAKjza,EAAUryE,MAAMwiiB,mBAAoB,CACrC,GAAI/rC,aAAiBlR,GAEjB,YADA9if,KAAK4ujB,yBAAyB56D,GAAO,GAGzCh0f,KAAK8ojB,uBACL6F,EAAYA,EAAU97D,cAAc7yf,KAAKo6e,QAEzCp6e,KAAKo9f,eAAeuxD,EAAWA,EAAU/xiB,WAAY,EAAGgzD,EAAUryE,MAAMs5gB,cAAejnc,EAAUryE,MAAMoO,QAAQ,GAC/GikE,EAAUo5d,gBAAgBhpiB,KAAK4vE,UAAUryE,MAAMslf,WAAW,GAE9D,IAAI8F,EAAa/4a,EAAUryE,MAAMslf,UAAUK,gBACvCg1B,EAAatoc,EAAUryE,MAAMslf,UAAU5we,MACvC27f,EAAcjlB,EAAW1F,aAAa1kf,QAAQqxE,EAAUryE,MAAMslf,WAC7Dplf,EAAkBkrf,KACnBA,EAAW1F,aAAa56d,OAAOulf,EAAa,EAAG5Z,GAC/CA,EAAM9Q,gBAAkByF,EACxBqL,EAAM/hf,MAAQimgB,EACdlkB,EAAMj+e,OAAS,EACXi+e,aAAiBjB,KACjBiB,EAAM6C,eAAgB,EACtB7C,EAAM4C,oBACN5C,EAAM6C,eAAgB,GAE1B72f,KAAKkujB,sBAAsBl6D,GAAO,GAClCh0f,KAAKo6e,OAAOvpb,OAAO0md,2BAA2BW,EAAYvvB,EAAYqL,GAAO,KASrFlT,EAAOzlf,UAAUwzjB,YAAc,SAAUh0O,EAAa7kU,EAAOD,GACrD/V,KAAKsvf,MAAMzR,iBAGXpgf,EAAkBuY,KAClBA,EAAQ,KAERvY,EAAkBsY,KAClBA,EAAS,KAEb/V,KAAK8ujB,cAAcj0O,EAAa7kU,EAAOD,KAQ3C+qe,EAAOzlf,UAAUyogB,YAAc,SAAUvrO,EAAMx6N,GAC3C,IAAI4re,EAAW3piB,KAAK4vE,UAAUryE,MAC9B,IAAIyC,KAAKsvf,MAAMzR,gBAAmB8rD,EAAStR,iBAAiBr4hB,KAAK4vE,UAAU/wD,KAA3E,CAGA05Q,EAAOA,GAAQ,EACfx6N,EAAUA,GAAW,EACrB,IAAIkC,EAAQjgE,KAAK+ujB,YAAYx2R,EAAMx6N,GAC/B1wC,EAAcs8gB,EAAS9mD,UAAUsR,oBACrCl0b,EAAMo4b,uBAAuBhre,GAC7B,IAAI4wgB,EAAY0L,EAAS9mD,UAAU0W,eACnC,GAAIowC,EAAS9yB,cAAcxZ,eAAqC,IAApBssC,EAASh+hB,QAAgBsyhB,aAAqBlrC,GAGtF,OAFA/yf,KAAK6tjB,gBAAgB5tf,EAAOg+d,QAC5Bh+d,EAAM3tD,UAINtS,KAAK0+a,YAAY,eACjB1+a,KAAKo6e,OAAOkV,MAAM9jB,mBAAoB,EACtCxre,KAAKitjB,YAAYhtf,GAErB,IAAI+uf,EAAYhvjB,KAAK4vE,UAAUmnc,6BAA6B92c,GAAOgjb,aAAa,GAChF0mD,EAAS9whB,YAAYm2iB,GAAW,GAChChvjB,KAAK4vE,UAAU/wD,IAAIk5gB,oBAAoB4R,GACvC,IAAI5L,EAAgB/9hB,KAAK4vE,UAAUo7d,2BAA2B/qe,GAC1Dogc,EAAY09B,EAAc/oC,YAAc,EACxCh1f,KAAKoohB,eAAiBpohB,KAAKoohB,cAAciK,yBAEzCryhB,KAAKoohB,cAAciK,uBAAuBlJ,YAAcnphB,KAAKszf,qBAAqByqC,EAAe19B,EAAUnzf,aAE/GlN,KAAKyjjB,SAASzjjB,KAAK4vE,aAQvBkxa,EAAOzlf,UAAU+ngB,UAAY,SAAU6rD,EAAOnwiB,GAC1C,IAAIowiB,EAAeD,EAAQ,QAAU,QACrC,IAAIjvjB,KAAKsvf,MAAMzR,eAAf,CAGA,IAAI8rD,EAAW3piB,KAAK4vE,UAAUqwd,UAAYjgiB,KAAK4vE,UAAUryE,MAAQyC,KAAK4vE,UAAU/wD,IACnE7e,KAAK4vE,UAAUqwd,UAAYjgiB,KAAK4vE,UAAU/wD,IAAM7e,KAAK4vE,UAAUryE,MAC5E,GAAIosiB,EAAS9mD,UAAUuR,cAAe,CAC9Bp0f,KAAKqsjB,qBACLrsjB,KAAK0+a,YAA6B,UAAjBwwI,EAA2B,iBAAmB,kBAEnElvjB,KAAKo6e,OAAOkV,MAAM9jB,mBAAoB,EACtC,IAAI2sB,EAAYn4f,KAAKmvjB,aAAanvjB,KAAK4vE,UAAUqwd,WAC7C7nC,EAAUp4f,KAAKmvjB,cAAcnvjB,KAAK4vE,UAAUqwd,WAC5Chge,EAAQk4b,EAAUlE,WAAWpB,cAAc7yf,KAAKo6e,QAChD15a,EAAuB,UAAjBwuf,EAA2B92D,EAAQlE,SAAWiE,EAAUjE,SAClE,GAAIl0f,KAAKoohB,cACapohB,KAAKovjB,wBAAwBnvf,GAEnD,IAAIg8N,EAAWn9Q,GAAgB9e,KAAKqvjB,sBAChC92R,KACAtmR,EAAQyuD,EAAI+/N,SAChB,GAAqB,UAAjByuR,EAA0B,CAC1Bj9iB,IACA,IAAIq9iB,EAA6B7xjB,EAAkB26f,EAAQmB,iBACpDnB,EAAQzwL,cAAgBywL,EAAQmB,eAAe5xL,YAAc,EACjDywL,EAAQv/N,YAAcu/N,EAAQzwL,aAAe2nP,GACzD5uf,EAAI+/N,SAAW03N,EAAU7D,WAAWr9N,QAAU,IAAMmhO,EAAQlE,SAASzzN,UAEpE23N,EAAQ9D,WAAWr9N,QAAU,IACxBx5R,EAAkBijE,EAAIu7b,aAAev7b,EAAIu7b,sBAAsBhK,KAChEmG,EAAQ9D,WAAWr9N,SAAWgF,EAC9Bv7N,EAAMA,EAAIu7b,YAK1B,IAAK,IAAI9/f,EAAI,EAAGA,EAAI8/R,EAAU9/R,IAAK,CAC/B,IAAIozjB,EAAgBvvjB,KAAKwvjB,cAAc9uf,EAAsB,UAAjBwuf,EAA2B92D,EAAUD,EAAW+2D,GACxFO,EAASzvjB,KAAK0vjB,mBAAmBH,EAAczwiB,MAAO3iB,GAC1DszjB,EAAOt5D,UAAU3Q,WAAW9kb,EAAIy1b,WAChCn2f,KAAK2vjB,+BAA+BF,EAAQF,EAAcK,aAC1Dr3R,EAAK/zR,KAAKirjB,GAEdxvf,EAAMu4b,wBAAwBjgO,EAAMtmR,GACpC,IAAIgxD,OAAO9nE,EACP0nf,OAAY1nf,EAChB,GAAK8kE,EAAMgjb,aAAahxe,aAAkBggf,GACtChvb,EAAOhD,EAAMgjb,aAAahxe,GAAO2K,WACjCime,EAAY7if,KAAK4vE,UAAU4ud,kBAAkBv7d,OAE5C,CAED,IADA,IAAI0ub,OAASx2f,IACJw2f,aAAkBoB,KACvBpB,EAAS1xb,EAAMqyb,mBAEnBzP,EAAY7if,KAAK4vE,UAAUmnc,6BAA6BplB,GAE5D3xf,KAAKo6e,OAAOvpb,OAAO2md,cAAcv3c,GACjCjgE,KAAK4vE,UAAUo5d,gBAAgBnmD,GAAW,GAE9C7if,KAAKyjjB,SAASzjjB,KAAK4vE,WAAW,KAElCkxa,EAAOzlf,UAAUs0jB,+BAAiC,SAAUF,EAAQG,GAChE,IAAK,IAAIzzjB,EAAI,EAAGA,EAAIszjB,EAAOxsE,aAAaxmf,OAAQN,IAC5CszjB,EAAOxsE,aAAa9mf,GAAGm4f,WAAW9O,WAAWoqE,EAAYzzjB,IACzDszjB,EAAOxsE,aAAa9mf,GAAGm4f,WAAWr9N,QAAU,GAGpD6pN,EAAOzlf,UAAUm0jB,cAAgB,SAAU9uf,EAAKy3b,EAAW+2D,GAIvD,IAAK,IAHD54D,EAAe51b,EAAI04b,4BAA2B,GAC9Ct6e,EAAQ,EACR8wiB,KACKzzjB,EAAI,EAAGA,EAAIukE,EAAIuib,aAAaxmf,OAAQN,IAAK,CAY9C,IAAK,IAXD8mE,EAAOvC,EAAIuib,aAAa9mf,GACxB0zjB,GAAiB,EAQjBC,EAAgBryjB,EAAkBwlE,EAAKs2b,iBACpCt2b,EAAK0kQ,cAAgB1kQ,EAAKs2b,eAAe5xL,YAAc,EACrDpkT,EAAI,EAAGA,EAAI+ye,EAAa75f,OAAQ8mB,IACrC,GAAIusiB,EAAc,CACd,IAAIz2D,EAAc/C,EAAa/ye,GAC3BwsiB,EAAiB12D,EAAYnF,SAASzzN,SAAW44N,EAAY/E,WAAWr9N,QAAU,EAMtF,GALIh0N,EAAK0kQ,YAAc0xL,EAAY1xL,aAAe1kQ,EAAK41N,YAAc51N,EAAK0kQ,cACtEkoP,GAAiB,EACjB/wiB,IACA8wiB,EAAYprjB,KAAKy+D,EAAKqxb,aAEW,IAAjC6D,EAAU7D,WAAWr9N,QAQrB,GAAI84R,EAAiB9sf,EAAKixb,SAASzzN,SAAU,CACzC,GAAqB,UAAjByuR,GACG71D,EAAYnF,WAAaiE,EAAUjE,SACtC,SAGAmF,EAAY/E,WAAWr9N,SAAW,EAClCq/N,EAAajue,OAAO9E,EAAG,GACvBA,SAGC0/C,EAAK41N,YAAc51N,EAAK0kQ,aAAemoP,GAAgBC,IAAmB9sf,EAAKixb,SAASzzN,WACxE,UAAjByuR,GACA71D,EAAY/E,WAAWr9N,SAAW,EAClCq/N,EAAajue,OAAO9E,EAAG,GACvBA,MAGAzE,IACA8wiB,EAAYprjB,KAAK60f,EAAY/E,YAC7BgC,EAAajue,OAAO9E,EAAG,GACvBA,WAKR,GAAI81e,IAAgBlB,EAAW,CAC3B,GAAqB,UAAjB+2D,IACI71D,EAAYnF,WAAaiE,EAAUjE,UAAYmF,EAAY1xL,cAAgBwwL,EAAUxwL,aACzF,SAGI0xL,EAAY1xL,cAAgBwwL,EAAUxwL,aACnC0xL,EAAYnF,SAASzzN,WAAax9N,EAAKixb,SAASzzN,WAC/CsvR,EAAiB53D,EAAUjE,SAASzzN,UACf,UAAjByuR,GAA4Ba,IAAmB53D,EAAUjE,SAASzzN,YAC1E44N,EAAY/E,WAAWr9N,SAAW,EAClCq/N,EAAajue,OAAO9E,EAAG,GACvBA,OAOY,IAAhC+ye,EAAa/3f,QAAQ0kE,IAAgBA,EAAKqxb,WAAWr9N,QAAU,IAC/D44R,GAAiB,GAEhBA,IACD/wiB,IACA8wiB,EAAYprjB,KAAKy+D,EAAKqxb,aAG9B,OAASx1e,MAAOA,EAAO8wiB,YAAaA,IAExC9uE,EAAOzlf,UAAUwyjB,gBAAkB,SAAU5tf,EAAOg+d,GAIhD,GAHAj+hB,KAAK0+a,YAAY,kBACjBz+W,EAAMijb,gBAAkB+6C,EAAU/6C,gBAClC+6C,EAAYA,EAAUprC,cAAc7yf,KAAKo6e,QACrCp6e,KAAKoohB,cACapohB,KAAKovjB,wBAAwBnxB,GAEnD,IAAIv9d,EAAMu9d,EAAUh7C,aAAag7C,EAAUh7C,aAAaxmf,OAAS,GACjEwhiB,EAAUzlC,wBAAwBv4b,EAAMgjb,aAAcg7C,EAAUh7C,aAAaxmf,QAC7E,IAAIomf,EAAY7if,KAAK4vE,UAAU4ud,kBAAkB99d,EAAIu7b,WAAWhZ,aAAa,IAC7Ejjf,KAAKo6e,OAAOvpb,OAAO2md,cAAcymB,GACjCj+hB,KAAK4vE,UAAUo5d,gBAAgBnmD,GAAW,GACtC7if,KAAKoohB,eAAiBpohB,KAAKoohB,cAAciK,yBACzCryhB,KAAKusjB,sBAAsBvsjB,KAAK4vE,UAAUryE,OAAO,GACjDyC,KAAKusjB,sBAAsBvsjB,KAAK4vE,UAAU/wD,KAAK,IAEnD7e,KAAKyjjB,SAASzjjB,KAAK4vE,YAQvBkxa,EAAOzlf,UAAUgogB,aAAe,SAAU72f,EAAMsS,GAC5C,IAAI9e,KAAKsvf,MAAMzR,eAAf,CAGA,IAAImyE,EAAkBxjjB,EAAO,OAAS,QACtC,GAAIxM,KAAK4vE,UAAUryE,MAAMslf,UAAUuR,cAAe,CAC1Cp0f,KAAKqsjB,qBACLrsjB,KAAK0+a,YAAgC,SAApBsxI,EAA6B,mBAAqB,qBAEvEhwjB,KAAK4vE,UAAU0/a,MAAM9jB,mBAAoB,EACzC,IAAI2sB,EAAYn4f,KAAKmvjB,aAAanvjB,KAAK4vE,UAAUqwd,WAC7C7nC,EAAUp4f,KAAKmvjB,cAAcnvjB,KAAK4vE,UAAUqwd,WAC5Chge,EAAQk4b,EAAUjE,SAASD,WAAWpB,cAAc7yf,KAAKo6e,QAC7D,GAAIp6e,KAAKoohB,cAEapohB,KAAKovjB,wBAAwBnvf,GAEnDjgE,KAAK4vE,UAAU0/a,MAAM7jB,iBAAkB,EACvC,IAAI5yM,EAAYs/N,EAAUxwL,YACF,UAApBqoP,IACAn3R,EAAYu/N,EAAQzwL,YAAcywL,EAAQ9D,WAAWn8N,YAMzD,IACK,IALDsgQ,OAAiBt9hB,EACjB80jB,OAAU90jB,EACV26U,EAAch3T,GAAgB9e,KAAKkwjB,yBACnCn5D,KAEK56f,EAAI,EAAGA,EAAI25U,EAAa35U,IAC7B,IAAK,IAAIonB,EAAI,EAAGA,EAAI08C,EAAMgjb,aAAaxmf,OAAQ8mB,IAAK,CAChD,IAAIm9C,EAAMT,EAAMgjb,aAAa1/d,GAU7B,GATA0siB,EAAUjwjB,KAAKmwjB,aAAanwjB,KAAK4vE,UAAUoud,iBAAiB7lC,IAC5D83D,EAAQh+iB,MAAQsR,EAChB0siB,EAAQxvR,SAAW//N,EAAI+/N,SACvBwvR,EAAQ/sE,gBAAkBxib,EAC1Buvf,EAAQ37D,WAAW9O,WAAW2S,EAAU7D,YACxC27D,EAAQ37D,WAAWr9N,QAAU,EACzBx5R,EAAkBg7hB,KAClBA,EAAiBz4hB,KAAK4vE,UAAU4ud,kBAAkByxB,IAEpC,IAAdp3R,EACAn4N,EAAIuib,aAAa56d,OAAOwwQ,EAAW,EAAGo3R,OAErC,CAED,IAAK,IADDG,GAAiB,EACZz1N,EAAM,EAAGA,EAAMj6R,EAAIuib,aAAaxmf,OAAQk+V,IAAO,CACpD,IAAI01N,EAAU3vf,EAAIuib,aAAatoJ,GAc/B,GAZI01N,EAAQ/7D,WAAWr9N,QAAU,GAC7B8/N,EAAgBvyf,KAAK6rjB,GAErBA,EAAQ1oP,YAAc0oP,EAAQ/7D,WAAWn8N,aAAeU,GACxDn4N,EAAIuib,aAAa56d,OAAOgoiB,EAAQx3R,UAAY,EAAG,EAAGo3R,GAClDG,GAAiB,GAEZv3R,EAAYw3R,EAAQ1oP,aAAe0oP,EAAQ1oP,YAAc0oP,EAAQ/7D,WAAWn8N,WAAaU,GAC3FA,EAAYw3R,EAAQ1oP,YAAc0oP,EAAQ/7D,WAAWn8N,aACxDz3N,EAAIuib,aAAa56d,OAAOgoiB,EAAQx3R,UAAW,EAAGo3R,GAC9CG,GAAiB,GAEjBA,EACA,MAIR,IAAKA,GACGr5D,EAAgBt6f,OAAS,EACzB,IAAK,IAAI0pB,EAAI,EAAGA,EAAI4we,EAAgBt6f,OAAQ0pB,IAAK,CAC7C,IAAI+we,EAAiBH,EAAgB5we,GAmBrC,GAlBI+we,EAAehD,WAAaxzb,GACzBA,EAAI+/N,UAAYy2N,EAAehD,SAASzzN,SAAWy2N,EAAe5C,WAAWr9N,QAAU,IACtFigO,EAAevvL,YAAcuvL,EAAe5C,WAAWn8N,aAAeU,GAClEq+N,EAAer+N,UAAYn4N,EAAIuib,aAAaxmf,OAC5CikE,EAAIuib,aAAaz+e,KAAKyrjB,GAGtBvvf,EAAIuib,aAAa56d,OAAO6ue,EAAer+N,UAAW,EAAGo3R,GAEzDG,GAAiB,GAEZv3R,EAAYq+N,EAAevvL,aAChCuvL,EAAevvL,YAAcuvL,EAAe5C,WAAWn8N,WAAaU,GACjEA,EAAYq+N,EAAevvL,YAAcuvL,EAAe5C,WAAWn8N,aACtEz3N,EAAIuib,aAAa56d,OAAO6ue,EAAevvL,YAAa,EAAGsoP,GACvDG,GAAiB,IAGrBA,EACA,QAQ5Bnwf,EAAMy4b,eAAe,GACrB,IAAIxvF,EAAclpa,KAAKo6e,OAAOvpb,OAAOumd,eAAen3c,GAChDipW,EACAA,EAAY+uF,uBAGZh4b,EAAMg4b,uBAEVj4f,KAAK4vE,UAAU0/a,MAAM7jB,iBAAkB,EACvCxra,EAAM42b,eAAgB,EACtB52b,EAAM22b,oBACN32b,EAAM42b,eAAgB,EACtB72f,KAAKo6e,OAAOvpb,OAAO2md,cAAcv3c,GACjCjgE,KAAK4vE,UAAUryE,MAAMsb,YAAY4/gB,EAAe77gB,YAAY,GAC5D5c,KAAK4vE,UAAU/wD,IAAIhG,YAAY7Y,KAAK4vE,UAAUoud,iBAAiBiyB,GAASrziB,YAAY,IAChF5c,KAAKqsjB,qBAAuB5ujB,EAAkBuC,KAAKoohB,iBACnDpohB,KAAKyjjB,SAASzjjB,KAAK4vE,cAQ/Bkxa,EAAOzlf,UAAU0zjB,YAAc,SAAUx2R,EAAMx6N,GAC3B/9D,KAAK4vE,UAAUryE,MAAMslf,UAArC,IACI5ib,EAAQ,IAAI8yb,GAChB9yb,EAAM6vb,YAAc,IAAIT,GAAapvb,GACrCA,EAAM6vb,YAAYG,mBAAqB,OACvChwb,EAAM6vb,YAAYD,yBAElB,IADA,IAAI59e,EAAQ,EACLA,EAAQsmR,GAAM,CACjB,IAAI01P,EAAWjuhB,KAAK0vjB,mBAAmB3xf,EAAS9rD,GAChDg8gB,EAAS93B,UAAU7F,WAAa,OAChC29B,EAAS/qC,gBAAkBjjb,EAC3BA,EAAMgjb,aAAaz+e,KAAKyphB,GACxBh8gB,IAEJ,OAAOguD,GAEX6gb,EAAOzlf,UAAUq0jB,mBAAqB,SAAU3xf,EAAS0iO,GACrD,IAAIkuR,EAAY3ujB,KAAK4vE,UAAUryE,MAAMslf,UACjCorC,EAAW,IAAIh8B,GACnBg8B,EAAS93B,UAAY,IAAIjG,GAAW+9B,GACpCA,EAASh8gB,MAAQwuR,EACjB,IAAK,IAAItkS,EAAI,EAAGA,EAAI4hE,EAAS5hE,IAAK,CAC9B,IAAIu5f,EAAY11f,KAAKmwjB,aAAaxB,GAClCj5D,EAAUzjf,MAAQ9V,EAClBu5f,EAAUj1N,SAAWA,EACrBi1N,EAAUxS,gBAAkB+qC,EAC5BA,EAAShrC,aAAaz+e,KAAKkxf,GAE/B,OAAOu4B,GAEXntC,EAAOzlf,UAAU80jB,aAAe,SAAUttE,GACtC,IAAI6S,EAAY,IAAI3D,GAChBqiD,EAAO,IAAItxD,GAMf,OALAsxD,EAAKx2D,gBAAgB4H,WAAW3C,EAAUjF,iBAC1Cw2D,EAAKp2D,gBAAgBwH,WAAW3C,EAAU7E,iBAC1Co2D,EAAKlxD,gBAAkBwS,EACvBA,EAAUzS,aAAaz+e,KAAK4viB,GAC5B1+C,EAAUpB,WAAa,IAAIpD,GAAYwE,GAChCA,GAEX5U,EAAOzlf,UAAU60jB,uBAAyB,WACtC,IAAIpxiB,EAAQ,EACRvhB,EAAQyC,KAAK4vE,UAAUryE,MACvBshB,EAAM7e,KAAK4vE,UAAU/wD,IAKzB,GAJK7e,KAAK4vE,UAAUqwd,YAChB1iiB,EAAQyC,KAAK4vE,UAAU/wD,IACvBA,EAAM7e,KAAK4vE,UAAUryE,OAErBA,GAASshB,GAAO7e,KAAK4vE,UAAUksL,SAASv+P,EAAOshB,GAAM,CACrD,GAAIthB,EAAMslf,UAAUwR,iBAAmBx1e,EAAIgke,UAAUwR,eACjD,OAAOv1e,EAAQ,EAEnB,GAAIvhB,EAAMslf,UAAUwR,eAAeH,WAAar1e,EAAIgke,UAAUwR,eAAeH,SACzE,OAAOp1e,EAAQA,EAAQD,EAAIgke,UAAUwR,eAAex7N,UAAYt7R,EAAMslf,UAAUwR,eAAex7N,UAG/F/5Q,EAAQ,EAGR,IAAK,IADDuliB,EAAgB9mjB,EAAMslf,UAAUwR,eAAeJ,WAAWiE,2BAA2B36f,EAAMslf,UAAUwR,eAAgBx1e,EAAIgke,UAAUwR,gBAC9Hl4f,EAAI,EAAGA,EAAIkojB,EAAc5njB,OAAQN,IAClCoB,EAAMslf,UAAUwR,eAAeH,WAAamwD,EAAclojB,GAAG+3f,UAC7Dp1e,IAKhB,OAAiB,IAAVA,EAAc,EAAIA,GAE7Bgie,EAAOzlf,UAAUg0jB,oBAAsB,WACnC,IAAIvwiB,EAAQ,EACRvhB,EAAQyC,KAAK4vE,UAAUryE,MACvBshB,EAAM7e,KAAK4vE,UAAU/wD,IAKzB,OAJK7e,KAAK4vE,UAAUqwd,YAChB1iiB,EAAQyC,KAAK4vE,UAAU/wD,IACvBA,EAAM7e,KAAK4vE,UAAUryE,OAEpBE,EAAkBF,IAAWE,EAAkBohB,IAASphB,EAAkBuC,KAAK4vE,UAAUksL,SAASv+P,EAAOshB,IAU7F,IAAVC,EAAc,EAAIA,EAPVA,EAFPvhB,EAAMslf,UAAUwR,iBAAmBx1e,EAAIgke,UAAUwR,gBACjD92f,EAAMslf,UAAUwR,eAAeH,WAAar1e,EAAIgke,UAAUwR,eAAeH,SAC1D,EAGAp1e,EACX9e,KAAKswjB,aAAatwjB,KAAK4vE,UAAUqwd,WAAWx/P,SAAWzgS,KAAKswjB,YAAYtwjB,KAAK4vE,UAAUqwd,WAAWx/P,UAKlHqgN,EAAOzlf,UAAU8zjB,aAAe,SAAU7zK,GAQtC,IADA,IANIr4U,OAAO9nE,EACPg9f,EAAY78G,EAAUt7Y,KAAK4vE,UAAUryE,MAAMslf,UAAUwR,eACnDr0f,KAAK4vE,UAAU/wD,IAAIgke,UAAUwR,eAC/B+D,EAAU98G,EAAUt7Y,KAAK4vE,UAAU/wD,IAAIgke,UAAUwR,eAC/Cr0f,KAAK4vE,UAAUryE,MAAMslf,UAAUwR,eAEjC/E,GADJrsb,EAAOk1b,GACUlE,YACTx2f,EAAkB6xf,IAAUA,EAAMpM,2BAA2B6O,IAAmBzC,IAAU8I,EAAQnE,YAEtG3E,GADArsb,EAAOqsb,EAAMpM,iBACA+Q,WAEjB,OAAOhxb,GAEX69a,EAAOzlf,UAAUi1jB,YAAc,SAAUh1K,GAQrC,IADA,IANI56U,EACA8gO,EAAW85G,EAAUt7Y,KAAK4vE,UAAUryE,MAAMslf,UAAUwR,eAAeH,SACjEl0f,KAAK4vE,UAAU/wD,IAAIgke,UAAUwR,eAAeH,SAC9Cq8D,EAASj1K,EAAUt7Y,KAAK4vE,UAAU/wD,IAAIgke,UAAUwR,eAAeH,SAC7Dl0f,KAAK4vE,UAAUryE,MAAMslf,UAAUwR,eAAeH,SAEhD5E,GADJ5ub,EAAM8gO,GACUyyN,YACRx2f,EAAkB6xf,IAAUA,EAAMpM,2BAA2B6O,IAAmBzC,IAAUihE,EAAOt8D,YAErG3E,GADA5ub,EAAM4ub,EAAMpM,gBAAgBgR,UAChBD,WAEhB,OAAOvzb,GAEXogb,EAAOzlf,UAAUm1jB,cAAgB,SAAUl1K,GACvC,IAAIr7U,OAAQ9kE,EACR63iB,EAAahziB,KAAK4vE,UAAUryE,MAAMslf,UAAUwR,eAAeJ,WAC3Dg/C,EAAWjziB,KAAK4vE,UAAU/wD,IAAIgke,UAAUwR,eAAeJ,WAE3D,IADAh0b,EAAQq7U,EAAU03J,EAAaC,EACxBhze,EAAMijb,2BAA2B6O,IAAmB9xb,KAAWq7U,EAAU23J,EAAWD,IACvF/ye,EAAQA,EAAMijb,gBAAgB+Q,WAElC,OAAOh0b,GAMX6gb,EAAOzlf,UAAUo1jB,0BAA4B,WACzC,GAAKzwjB,KAAK0kgB,gBAAV,CAGI1kgB,KAAKqsjB,qBACLrsjB,KAAK0+a,YAAY,cAErB1+a,KAAK4vE,UAAU0/a,MAAM9jB,mBAAoB,EACrBxre,KAAK4vE,UAAUryE,MAAnC,IACI4rhB,EAAcnphB,KAAK4vE,UAAU/wD,IAC5B7e,KAAK4vE,UAAUqwd,YACAjgiB,KAAK4vE,UAAU/wD,IAC/BsqgB,EAAcnphB,KAAK4vE,UAAUryE,OAEjC,IAAImzjB,EAAiB1wjB,KAAKmvjB,aAAanvjB,KAAK4vE,UAAUqwd,WAClD0wB,EAAe3wjB,KAAKmvjB,cAAcnvjB,KAAK4vE,UAAUqwd,WACjDP,EAAgB1/hB,KAAK4vE,UAAU0qd,mBAAmBo2B,EAAgBC,GACtE,GAAIjxB,EAAczrC,WAAW9vf,SAASwsjB,KAC7B3wjB,KAAK4vE,UAAUiwd,aAAaH,EAAeixB,GAAe,CAE3D,IAAI1wf,EAAQywf,EAAez8D,WAAWpB,cAAc7yf,KAAKo6e,QACzDs2E,EAAiB1wjB,KAAK4vE,UAAU+vd,gBAAgB+wB,EAAgBhxB,GAChEixB,EAAe3wjB,KAAK4vE,UAAU+vd,gBAAgBgxB,EAAcjxB,GAE5D,IAAIkxB,EAAa5wjB,KAAK6wjB,mBAAmB5wf,EAAOywf,EAAgBC,GAC5D5yB,EAAgB/9hB,KAAK4vE,UAAUoud,iBAAiB4yB,GACpDznC,EAAYtwgB,YAAYklhB,EAAcj2Z,WAAW,IAGrD9nI,KAAKqsjB,qBAAuB5ujB,EAAkBuC,KAAKoohB,iBACnDpohB,KAAKyjjB,SAASzjjB,KAAK4vE,WAAW,KAGtCkxa,EAAOzlf,UAAUw1jB,mBAAqB,SAAU5wf,EAAOk4b,EAAWC,GAE5Cp4f,KAAKovjB,wBAAwBnvf,GAC/CjgE,KAAK4vE,UAAU0/a,MAAM7jB,iBAAkB,EAEvC,IAAIlue,EAAQyC,KAAK4vE,UAAUg2d,YAAYztC,EAAUjE,SAAUiE,GACvDt5e,EAAMthB,EAAQ46f,EAAU7D,WAAWj/N,UACnC84Q,EAAcnuiB,KAAK4vE,UAAUg2d,YAAYxtC,EAAQlE,SAAUkE,GAC3Dg2C,EAAeD,EAAc/1C,EAAQ9D,WAAWj/N,UAChDy7R,EAAW9wjB,KAAK+wjB,2BAA2BxzjB,EAAOshB,EAAKsvhB,EAAaC,GACxE7wiB,EAAQuzjB,EAASvzjB,MACjBshB,EAAMiyiB,EAASjyiB,IAIf,IAAK,IAHDC,EAAQmhD,EAAMgjb,aAAa1kf,QAAQ65f,EAAQlE,UAC3C88D,EAAgB/wf,EAAMgjb,aAAa1kf,QAAQ45f,EAAUjE,UACrD08D,OAAaz1jB,EACRgB,EAAI60jB,EAAe70jB,GAAK2iB,EAAO3iB,IAAK,CAEzC,IAAK,IADDukE,EAAMT,EAAMgjb,aAAa9mf,GACpBonB,EAAI,EAAGA,EAAIm9C,EAAIuib,aAAaxmf,OAAQ8mB,IAAK,CAC9C,IAAI0/C,EAAOvC,EAAIuib,aAAa1/d,GACxBoihB,EAAY3liB,KAAK4vE,UAAUg2d,YAAYlle,EAAKuC,GAChD,GAAI0nb,GAAcltd,MAAMlgC,EAAO,IAAMotf,GAAcltd,MAAMkogB,EAAW,IAC7Dh7C,GAAcltd,MAAMkogB,EAAW,GAAKh7C,GAAcltd,MAAM5e,EAAK,GAChE,GAAIphB,EAAkBmzjB,GAClBA,EAAa3tf,MAEZ,CACG9mE,IAAM60jB,IACNJ,EAAWt8D,WAAWtE,gBAAkB/sb,EAAKqxb,WAAWtE,eACxD4gE,EAAWt8D,WAAWn8N,YAAcl1N,EAAKqxb,WAAWn8N,WACpDn4R,KAAKixjB,aAAaL,EAAY3tf,IAElC,IAAK,IAAI98C,EAAI,EAAGA,EAAI88C,EAAKggb,aAAaxmf,OAAQ0pB,IAAK,CAC/C,IAAI6te,EAAQ/wb,EAAKggb,aAAa98d,GAC9B,GAAiC,IAA7B88C,EAAKggb,aAAaxmf,QAAgBu3f,aAAiBlR,IAClB,IAA9BkR,EAAM/Q,aAAaxmf,OACtB,MAEJm0jB,EAAW3tE,aAAaz+e,KAAKwvf,EAAM30f,SAEvCqhE,EAAIuib,aAAa56d,OAAO9E,EAAG,GAC3B0/C,EAAK3wD,UACLiR,KAIZ,GAAgC,IAA5Bm9C,EAAIuib,aAAaxmf,OAAc,CAC/B,IAAIgkS,EAAWxgO,EAAMgjb,aAAa1kf,QAAQmiE,GAC1CA,EAAIy4b,0BACJl5b,EAAMgjb,aAAa56d,OAAOo4Q,EAAU,GACpC//N,EAAIpuD,UACJwM,IACA3iB,KAeR,OAZKsB,EAAkBmzjB,IAAeI,EAAgBlyiB,IAClD8xiB,EAAWt8D,WAAWr9N,QAAUn4Q,EAAQkyiB,EAAgB,GAE5DhxjB,KAAKkxjB,2BAA2BN,GAChC3wf,EAAMy4b,eAAe,GACrBz4b,EAAMm2b,gBACNn2b,EAAM42b,eAAgB,EACtB52b,EAAM22b,oBACN32b,EAAM42b,eAAgB,EACtB72f,KAAKo6e,OAAOvpb,OAAO2md,cAAcv3c,GAEjCjgE,KAAK4vE,UAAU0/a,MAAM7jB,iBAAkB,EAChCmlF,GAEX9vE,EAAOzlf,UAAU41jB,aAAe,SAAUL,EAAYl7D,GAClD,IAAIy7D,OAAoBh2jB,EACpBi2jB,EAAc,KAOlB,GANK3zjB,EAAkBmzjB,EAAWt8D,WAAWr/N,WACzCk8R,EAAoBP,EAAWt8D,WAAWr/N,SAEzCx3R,EAAkBi4f,EAAUpB,WAAWr/N,WACxCm8R,EAAc17D,EAAUpB,WAAWr/N,UAEnCx3R,EAAkB0zjB,KAAsB1zjB,EAAkB2zjB,GAG9D,GAAI3zjB,EAAkB0zjB,IAClBA,EAAoB,IAAIpjE,GAAS6iE,EAAWt8D,aAC1B9O,WAAW4rE,OAE5B,CAAA,GAAI3zjB,EAAkB2zjB,GACvB,OAGIR,EAAW18D,SAASzzN,WAAai1N,EAAUxB,SAASzzN,WACpD0wR,EAAkBzkjB,IAAMkkjB,EAAW/1D,yBAAyBs2D,EAAkBzkjB,IAAK0kjB,EAAYzkjB,QAC/FwkjB,EAAkBxkjB,OAASikjB,EAAW/1D,yBAAyBs2D,EAAkBxkjB,OAAQykjB,EAAYzkjB,WAIjHm0e,EAAOzlf,UAAU61jB,2BAA6B,SAAUjuf,GACpD,IAAK,IAAI9mE,EAAI,EAAGA,EAAI8mE,EAAKggb,aAAaxmf,OAAQN,IAC1C8mE,EAAKggb,aAAa9mf,GAAG8V,MAAQ9V,GAMrC2kf,EAAOzlf,UAAUqpgB,cAAgB,WAC7B,GAAI1kgB,KAAK4vE,UAAU0qK,UAAYt6O,KAAK4vE,UAAUryE,MAAMslf,UAAUuR,gBAAkBp0f,KAAK4vE,UAAU/wD,IAAIgke,UAAUuR,cACzG,OAAO,EAEIp0f,KAAK4vE,UAAUryE,MACjByC,KAAK4vE,UAAU/wD,IACvB7e,KAAK4vE,UAAUqwd,YACLjgiB,KAAK4vE,UAAU/wD,IACjB7e,KAAK4vE,UAAUryE,OAE5B,IAAI46f,EAAYn4f,KAAKmvjB,aAAanvjB,KAAK4vE,UAAUqwd,WAC7C7nC,EAAUp4f,KAAKmvjB,cAAcnvjB,KAAK4vE,UAAUqwd,WAC5CP,EAAgB1/hB,KAAK4vE,UAAU0qd,mBAAmBniC,EAAWC,GACjE,GAAIsnC,EAAczrC,WAAW9vf,SAASi0f,KAC7Bp4f,KAAK4vE,UAAUiwd,aAAaH,EAAetnC,GAAU,CACtDD,EAAYn4f,KAAK4vE,UAAU+vd,gBAAgBxnC,EAAWunC,GACtDtnC,EAAUp4f,KAAK4vE,UAAU+vd,gBAAgBvnC,EAASsnC,GAClD,IAAIzoQ,EAAU,EACd,GAAIkhO,EAAUjE,WAAakE,EAAQlE,SAAU,CAEzC,IAAK,IADDm9D,EAAiBl5D,EAAUjE,SAASjR,aAAa1kf,QAAQ45f,GACpDh8f,EAAIk1jB,EAAgBl1jB,GAAKg8f,EAAUjE,SAASjR,aAAa1kf,QAAQ65f,GAAUj8f,IAAK,CACrF,IAAI8mE,EAAOk1b,EAAUjE,SAASjR,aAAa9mf,GACvCg+f,EAAWl3b,EAAKs2b,eACpB,GAAIp9f,IAAMk1jB,EAAgB,CACtB,GAAIpuf,EAAKqxb,WAAWr9N,UAAYA,EAC5B,OAAO,EAEX,IAAKx5R,EAAkB08f,IAChBl3b,EAAK0kQ,cAAiBwyL,EAAS7F,WAAWn8N,WAAagiO,EAASxyL,YACnE,OAAO,EAGf1wC,EAAUh0N,EAAKqxb,WAAWr9N,QAE9B,OAAO,EAEX,OAAOj3R,KAAKsxjB,6BAA6Bn5D,EAAUlE,WAAYkE,EAAWC,GAGlF,OAAO,GAEXtX,EAAOzlf,UAAUi2jB,6BAA+B,SAAUrxf,EAAOk4b,EAAWC,GACxE,IAAIt5e,EAAQmhD,EAAMgjb,aAAa1kf,QAAQ65f,EAAQlE,UAC3C88D,EAAgB/wf,EAAMgjb,aAAa1kf,QAAQ45f,EAAUjE,UACrDq9D,EAAYvxjB,KAAK4vE,UAAUg2d,YAAYztC,EAAUjE,SAAUiE,GAC3Dq5D,EAAUD,EAAYp5D,EAAU7D,WAAWj/N,UAC3C84Q,EAAcnuiB,KAAK4vE,UAAUg2d,YAAYxtC,EAAQlE,SAAUkE,GAC3Dg2C,EAAeD,EAAc/1C,EAAQ9D,WAAWj/N,UAChDy7R,EAAW9wjB,KAAK+wjB,2BAA2BQ,EAAWC,EAASrjB,EAAaC,GAChFmjB,EAAYT,EAASvzjB,MACrBi0jB,EAAUV,EAASjyiB,IAMnB,IAAK,IALD4yiB,EAAgB,EAChBC,EAAiB,EACjBC,GAAqB,EACrBC,GAAsB,EACtB76D,KACK56f,EAAI60jB,EAAe70jB,GAAK2iB,EAAO3iB,IAAK,CAKzC,IAAK,IAJDukE,EAAMT,EAAMgjb,aAAa9mf,GACzB01jB,EAAU,EACVC,EAAW,EACXj9D,GAAY,EACPtxe,EAAI,EAAGA,EAAIm9C,EAAIuib,aAAaxmf,OAAQ8mB,IAAK,CAC9C,IAAI0/C,EAAOvC,EAAIuib,aAAa1/d,GACxBoihB,EAAY3liB,KAAK4vE,UAAUg2d,YAAYlle,EAAKuC,GAChD,GAAIjjE,KAAK+xjB,yBAAyBR,EAAWC,EAAS7rB,GAAY,CAC9DgsB,GAAqB,EACrBC,GAAsB,EAClB3uf,EAAKqxb,WAAWr9N,QAAU,GAC1B8/N,EAAgBvyf,KAAKy+D,GAEpB4xb,IACDg9D,EAAUlsB,EACVmsB,EAAWnsB,EACX9wC,GAAY,GAEhB,IAAIsF,EAAWl3b,EAAKs2b,eACH,IAAbu4D,GAAkBnnE,GAAcltd,MAAMq0hB,EAAU,KAAOnnE,GAAcltd,MAAMkogB,EAAW,KACtFmsB,EAAWnsB,GAEfmsB,GAAYnnE,GAAcO,oBAAoBjob,EAAKqxb,WAAWj/N,WAC9D,IAAI28R,EAAsBhyjB,KAAKiyjB,+BAA+BV,EAAWC,EAASvuf,GAAM,GACpFivf,EAAsBlyjB,KAAKiyjB,+BAA+BV,EAAWC,EAASvuf,GAAM,GAGpFkvf,EAAyC,IAA3Bp7D,EAAgBt6f,QAA2C,IAA3Bs6f,EAAgBt6f,QAAgBs6f,EAAgB,KAAO9zb,EAErGmvf,EAAkBpyjB,KAAKqyjB,iBAAiBt7D,EAAiB9zb,EAAM+uf,EAAqBE,GAExF,GAAI/1jB,IAAM2iB,IAAUrhB,EAAkB08f,IAAal3b,EAAKqxb,WAAWr9N,QAAUkjO,EAAS7F,WAAWr9N,UACzFm7R,EACJ,OAAO,EAEX,GAAIj2jB,IAAM60jB,EACN,IAAK,IAAIjgf,EAAI,EAAGA,EAAIgmb,EAAgBt6f,OAAQs0E,IAAK,CAEzC,IAAIkmN,EAAW8/N,EAAgBhmb,GAAGmjb,SAASzzN,SAAWs2N,EAAgBhmb,GAAGujb,WAAWr9N,QAAW,EAC/F,GAAIA,GAAWv2N,EAAI+/N,SAAU,CAOzB,GANIs2N,EAAgBhmb,GAAG42P,YAAc1kQ,EAAK0kQ,YACtCiqP,GAAsB,EAGtBD,GAAqB,EAErBx1jB,IAAM2iB,GAASi4e,EAAgBhmb,KAAO9N,GACnCg0N,EAAWh0N,EAAKixb,SAASzzN,SAAWx9N,EAAKqxb,WAAWr9N,QAAU,EACjE,OAAO,EAEPA,IAAYv2N,EAAI+/N,UAAazgS,KAAKiyjB,+BAA+BV,EAAWC,EAASvuf,GAAM,IAC3F8zb,EAAgB1ue,OAAO0ue,EAAgBx4f,QAAQw4f,EAAgBhmb,IAAK,IAMxF,GAAIihf,IAAwBv0jB,EAAkB08f,IACvCg4D,GACClvf,EAAK0kQ,cAAgBwyL,EAASxyL,YAAc,GAAK3nU,KAAKsyjB,eAAervf,GACzE,OAAO,GAInB,GAAI9mE,IAAM60jB,EACNS,EAAgBI,EAChBH,EAAiBI,MAEhB,CACD,GAAIA,EAAW,GAAKD,EAAU,KACnBF,GAAsBtljB,KAAKoxB,MAAMg0hB,KAAmBpljB,KAAKoxB,MAAMo0hB,KAC9DD,GAAuBvljB,KAAKoxB,MAAMi0hB,KAAoBrljB,KAAKoxB,MAAMq0hB,IACrE,OAAO,EAGf,GAAI31jB,IAAM2iB,EACN,OAAO,GAInB,OAAO,GAEXgie,EAAOzlf,UAAUi3jB,eAAiB,SAAUrvf,GACxC,IAAIk3b,EAAWl3b,EAAKs2b,eAChBusC,EAAW9liB,KAAKo6e,OAAOxqa,UAAUg2d,YAAY3ie,EAAKixb,SAAUjxb,GAE5Dz2D,EADexM,KAAKo6e,OAAOxqa,UAAUg2d,YAAY3ie,EAAKixb,SAAUiG,GAC1CxP,GAAcO,oBAAoBiP,EAAS7F,WAAWj/N,WAChF,OAAIs1N,GAAcltd,MAAMjxB,EAAM,KAAOm+e,GAAcltd,MAAMqogB,EAAU,IAMvEhlD,EAAOzlf,UAAU02jB,yBAA2B,SAAUR,EAAWC,EAAS7rB,GACtE,OAAIh7C,GAAcltd,MAAM8zhB,EAAW,IAAM5mE,GAAcltd,MAAMkogB,EAAW,IACjEh7C,GAAcltd,MAAMkogB,EAAW,GAAKh7C,GAAcltd,MAAM+zhB,EAAS,IAM5E1wE,EAAOzlf,UAAU42jB,+BAAiC,SAAUV,EAAWC,EAASvuf,EAAMsvf,GAClF,IAAIC,EAAiBD,EAAStvf,EAAKs2b,eAAiBt2b,EAAKg5b,WACrD0pC,EAAY,EAChB,OAAIloiB,EAAkB+0jB,KAGtB7sB,EAAY3liB,KAAKo6e,OAAOxqa,UAAUg2d,YAAY4sB,EAAet+D,SAAUs+D,GAChExyjB,KAAK+xjB,yBAAyBR,EAAWC,EAAS7rB,KAG7D7kD,EAAOzlf,UAAUg3jB,iBAAmB,SAAUt7D,EAAiB9zb,EAAMwvf,EAAqBP,GACtF,IAAIQ,EAAYzvf,EAAKixb,SACrB,GAAI6C,EAAgBt6f,OAAS,EACzB,IAAK,IAAIN,EAAI,EAAGA,EAAI46f,EAAgBt6f,OAAQN,IAAK,CAC7C,IAAIw2jB,EAAmB57D,EAAgB56f,GAAG+3f,SACtCj9N,EAAW07R,EAAiBlyR,SAAWs2N,EAAgB56f,GAAGm4f,WAAWr9N,QAAW,EACpF,GAAI8/N,EAAgB56f,KAAO8mE,IAAoC,IAA3B8zb,EAAgBt6f,QAAgBuD,KAAK4yjB,qBAAqB77D,EAAiB9zb,MACtGivf,IAAuBO,EAC5B,OAAO,EAEX,GAAI17D,EAAgB56f,KAAO8mE,GAAQ0vf,EAAiBlyR,SAAWiyR,EAAUjyR,UAClExJ,IAAay7R,EAAUjyR,SAAWx9N,EAAKqxb,WAAWr9N,QAAU,EAC/D,OAAO,EAInB,OAAO,GAEX6pN,EAAOzlf,UAAUu3jB,qBAAuB,SAAU77D,EAAiB9zb,GAC/D,IAAK,IAAI9mE,EAAI,EAAGA,EAAI46f,EAAgBt6f,OAAQN,IACxC,GAAI46f,EAAgB56f,KAAO8mE,GAAQ8zb,EAAgB56f,GAAGwrU,cAAgB1kQ,EAAK0kQ,YACvE,OAAO,EAGf,OAAO,GAKXm5K,EAAOzlf,UAAUuzjB,yBAA2B,SAAUhB,EAAcrwQ,GAGhE,GAFAv9S,KAAK8ojB,uBACL9ojB,KAAKgtjB,gBAAgBY,EAAcrwQ,IAC9BA,EAAa,CACd,IAAIowN,OAAgB,EAChB2K,EAAmBs1C,EACvB,GAEIt1C,EADA3K,EAAgB3tgB,KAAK4vE,UAAU2qd,sBAAsBjiB,SAEhD3K,GAAiBA,EAAc90d,OAAO+0gB,IAC1CnwjB,EAAkBkwgB,GAInB3tgB,KAAK4vE,UAAUo5d,gBAAgB4kB,GAAc,GAH7C5tjB,KAAK4vE,UAAUo5d,gBAAgBr7B,GAAe,GAMtD3tgB,KAAKk9e,qBAET4D,EAAOzlf,UAAU2xjB,gBAAkB,SAAUY,EAAcrwQ,GACvD,IAAI8gN,EAAar+f,KAAK4vE,UAAUryE,MAAMs5gB,cAClClrgB,EAAS3L,KAAK4vE,UAAUryE,MAAMoO,OAC9B2sgB,EAAmBt4gB,KAAK4vE,UAAUryE,MAAMslf,UAE5C,GADAy1B,EAAmBA,EAAiBzlB,cAAc7yf,KAAKo6e,QACnD78L,EAAa,CAEb,IAAI9iR,EAAWz6B,KAAK4vE,UAAUipd,cAAcvgB,EAAiBxwY,WACzD+qb,EAAgBjF,EAAahxiB,WAAagxiB,EAAahxiB,WAAWxC,SAAS3d,OAAS,EAExFuD,KAAKoujB,YAAY91C,EAAkBs1C,EAAciF,EAAelnjB,EAAQ0yf,EAAY5je,EAAU69e,EAAiBxwY,gBAE1Gn8H,EAAS,GACd3L,KAAKoujB,YAAY91C,EAAkBs1C,EAAc,EAAG,EAAGt1C,EAAiB17f,WAAYjR,EAAQ0yf,GAEhG,IAAIvJ,EAAiBwjB,EAAiB3lB,kBAElCib,GADJ0K,EAAmB/6N,EAAcu3M,EAAeA,EAAer4f,OAAS,GAAKq4f,EAAe,IACzD5R,gBAAgBD,aAAa1kf,QAAQ+5gB,GACpE/6N,GACAqwN,IAEJ,IAAIjlB,EAAa2vB,EAAiBp1B,gBAClC0qE,EAAa37iB,MAAQqmgB,EAAiBrmgB,MACtC27iB,EAAa1qE,gBAAkByF,EAC/BA,EAAW1F,aAAa56d,OAAOulf,EAAa,EAAGggD,GAC/C5tjB,KAAKkujB,sBAAsB3wQ,EAAc+6N,EAAmBs1C,GAAc,GAC1EA,EAAa73iB,OAAS,EACtB/V,KAAKo6e,OAAOvpb,OAAO0md,2BAA2Bq2C,EAAa37iB,MAAO02e,EAAYilE,GAAc,IAGhG9sE,EAAOzlf,UAAU+yjB,YAAc,SAAU91C,EAAkBs1C,EAAchgD,EAAapX,EAAaw4D,EAAW3uD,EAAWyrC,GACrH,GAAyC,IAArC8hB,EAAa3qE,aAAaxmf,OAAc,CACxC,IAAIqxD,EAAO,IAAIqlc,GAAWy6D,GAC1BA,EAAa3qE,aAAaz+e,KAAKspD,GAEnC,IAAIglgB,GAAU,EACd9yjB,KAAKo6e,OAAOvpb,OAAOo6c,oBAAoBqN,GACvCt4gB,KAAKo6e,OAAOvpb,OAAOo6c,oBAAoB2iD,GACvC,IAAK,IAAIrqiB,EAAI,EAAGA,EAAI+0f,EAAiBr1B,aAAaxmf,OAAQ8mB,IAAK,CAC3D,IAAI86e,EAAaia,EAAiBr1B,aAAa1/d,GAC/C,GAAIyriB,IAAc3wD,GAAcytC,IAAYztC,EAAY,CACpDuP,EAAc5tgB,KAAK+yjB,YAAY10D,EAAY7H,EAAa6J,EAAWuN,EAAaggD,GAChF,MAEJ,GAAI9hB,IAAYztC,EAAY,CACxBuP,EAAc5tgB,KAAK+yjB,YAAY10D,EAAY,EAAGgC,EAAWuN,EAAaggD,GACtE,MAEKoB,IAAc3wD,GACnBy0D,GAAU,EAEVllD,EAAc5tgB,KAAK+yjB,YAAY10D,EAAY7H,EAAax2f,KAAKo6e,OAAOxqa,UAAUipd,cAAcx6B,GAAauP,EAAaggD,IAEjHkF,IACLllD,EAAc5tgB,KAAK+yjB,YAAY10D,EAAY,EAAGr+f,KAAKo6e,OAAOxqa,UAAUipd,cAAcx6B,GAAauP,EAAaggD,IAGpH5tjB,KAAKgzjB,gBAAgB16C,GAChBA,EAAiBlkB,eAClBp0f,KAAKo6e,OAAOvpb,OAAOwmd,kBAAkBiB,EAAkB,EAAG,IAOlEx3B,EAAOzlf,UAAU03jB,YAAc,SAAU10D,EAAY7H,EAAa6J,EAAWuN,EAAa/qB,GAGtF,IAAK,IAFD/je,EAAQ,EAEH3iB,GADOkigB,EAAWxb,UAAUI,aAAa1kf,QAAQ8/f,GAC7C,GAAGligB,EAAIkigB,EAAWjkf,SAAS3d,OAAQN,IAAK,CACjD,IAAIipJ,EAASi5W,EAAWjkf,SAASje,GACjC,GAAIq6f,GAAe13e,EAAQsmI,EAAO3oJ,QAAU2oJ,aAAkB2vW,GACpD3vW,aAAkB2vW,KACpBj2e,GAASsmI,EAAO3oJ,YAFxB,CAMA,IAAIipB,EAAa,EACb8we,EAAc13e,IACd4G,EAAa8we,EAAc13e,GAE/B,IAAI8G,EAAWy6e,EAAYvhf,EAO3B,GANI8G,EAAWw/H,EAAO3oJ,SAClBmpB,EAAWw/H,EAAO3oJ,QAElBipB,EAAa,IACb5G,GAAS4G,GAEM,IAAfA,GAAoBE,IAAaw/H,EAAO3oJ,OACxComf,EAAUjme,WAAWxC,SAASiO,OAAOulf,EAAa,EAAGxoX,GACrDA,EAAOt3F,KAAO+0b,EAAUjme,WACxBgxf,IAGAvP,EAAWjkf,SAASiO,OAAOlsB,EAAG,GAC9BA,SAGC,GAAIipJ,aAAkBovW,GAAgB,CAEvC,IAAI7xb,EAAO,IAAI6xb,GACf7xb,EAAKq7a,gBAAgBwH,WAAWpgW,EAAO44V,iBACvCr7a,EAAKl2C,KAAO24H,EAAO34H,KAAKuK,OAAOtR,EAAYE,EAAWF,GACtDm9d,EAAUjme,WAAWxC,SAASiO,OAAOulf,EAAa,EAAGjrc,GACrDA,EAAK7U,KAAO+0b,EAAUjme,WACtBgxf,IACAxoX,EAAO34H,KAAO24H,EAAO34H,KAAKprB,MAAM,EAAGqkB,GAAc0/H,EAAO34H,KAAKprB,MAAMukB,GAEvE,GAAIy6e,GAAavhf,EAAQ8G,EAAWF,EAChC,MAEJ5G,GAAS8G,EAAWF,GAExB,OAAOkof,GASX9sB,EAAOzlf,UAAUqhjB,4BAA8B,SAAUvmf,EAAQ54D,EAAOshB,GACpE,IAAI+wD,EAAY5vE,KAAKo6e,OAAOxqa,UAC5B,GAAe,IAAXzZ,EAAc,CACd,IAAI22N,EAAgB,IAAIsqQ,GAAaxnd,EAAU0/a,OAC/Ctvf,KAAKg4hB,2BAA2BlrQ,EAAevvR,GAC/CyC,KAAKo6e,OAAOvpb,OAAOwmd,kBAAkBvqP,EAAc+1N,UAAW,EAAG,GACjE7if,KAAKg4hB,2BAA2Bpod,EAAUryE,MAAOshB,GACjD7e,KAAKg4hB,2BAA2Bpod,EAAU/wD,IAAKA,GAEnD,GAAe,IAAXs3C,EAAc,CACV22N,EAAgB,IAAIsqQ,GAAaxnd,EAAU0/a,OAC/Ctvf,KAAKg4hB,2BAA2BlrQ,EAAevvR,GAC/C,IAAI4rhB,EAAc,IAAIiO,GAAaxnd,EAAU0/a,OAC7Ctvf,KAAKg4hB,2BAA2B7O,EAAatqgB,GAC7C7e,KAAKo6e,OAAOvpb,OAAOwmd,kBAAkBvqP,EAAc+1N,UAAW,EAAG,GAC7DsmC,EAAYtmC,YAAc/1N,EAAc+1N,WACxC7if,KAAKo6e,OAAOvpb,OAAOwmd,kBAAkB8R,EAAYtmC,UAAW,EAAG,GAGnEjza,EAAU0/a,MAAM9jB,oBAChBxre,KAAKo6e,OAAOvpb,OAAOood,qBACfj5gB,KAAKo6e,OAAOkV,MAAMye,uBAClB/tgB,KAAKizjB,4BAGbrjf,EAAU0/a,MAAM9jB,mBAAoB,EACpC57Z,EAAUryE,MAAMu6hB,wBAAuB,GACnClod,EAAU0qK,QACV1qK,EAAU/wD,IAAIk5gB,oBAAoBnod,EAAUryE,OAG5CqyE,EAAU/wD,IAAIi5gB,wBAAuB,GAEzClod,EAAUwud,sBAAwBxud,EAAU/wD,IAAI6O,SAAS3gB,EACzD6iE,EAAUk1d,sBAAqB,GAC/B9kiB,KAAKo6e,OAAO8H,cACZlif,KAAKo6e,OAAOI,mBACZx6e,KAAKk9e,oBACLl9e,KAAKymjB,kBAAmB,GAQ5B3lE,EAAOzlf,UAAUoojB,SAAW,SAAU7ze,EAAWs0d,GAC7C,GAAIlkiB,KAAKoohB,eAAiBpohB,KAAKoohB,cAAc8qC,0BASzC,OARIz1jB,EAAkBuC,KAAKoohB,cAAciK,yBACjCryhB,KAAKoohB,cAAciK,wBACuC,yBAArDryhB,KAAKoohB,cAAciK,uBAAuBl8d,QACa,yBAArDn2D,KAAKoohB,cAAciK,uBAAuBl8d,UACrDn2D,KAAKy4hB,oBAAiBt9hB,EACtB6E,KAAK04hB,kBAAev9hB,QAExB6E,KAAKymjB,kBAAmB,GAGxBhpjB,EAAkBuC,KAAKo6e,OAAOu8B,gBAC9B32gB,KAAKo6e,OAAO++B,mBACZn5gB,KAAKo6e,OAAOvpb,OAAO21c,sBACnBxmgB,KAAKo6e,OAAOI,mBACP5qa,EAAU0/a,MAAM9jB,oBACjB57Z,EAAUk1d,sBAAqB,GAC/B9kiB,KAAKy4hB,oBAAiBt9hB,EACtB6E,KAAK04hB,kBAAev9hB,IAGxBsC,EAAkBymiB,KAClBA,EAAqBt0d,EAAU0qK,SAE/B1qK,EAAU0/a,MAAM9jB,oBAChB57Z,EAAU0/a,MAAM9jB,mBAAoB,EACpC57Z,EAAU0/a,MAAM7jB,iBAAkB,EAClCzre,KAAKo6e,OAAOvpb,OAAOood,qBACfj5gB,KAAKo6e,OAAOkV,MAAMye,uBAClB/tgB,KAAKizjB,2BAETjzjB,KAAKg6d,eAAepqZ,GACpBA,EAAUwud,sBAAwBxud,EAAU/wD,IAAI6O,SAAS3gB,EACzD6iE,EAAUk1d,sBAAqB,GAC/B9kiB,KAAKo6e,OAAO8H,cACZlif,KAAKy4hB,oBAAiBt9hB,EACtB6E,KAAK04hB,kBAAev9hB,EACpB6E,KAAKo6e,OAAOvpb,OAAO60c,aAAc,GAEjC1lgB,KAAKoohB,eAAiBpohB,KAAKoohB,cAAciK,yBACc,gBAArDryhB,KAAKoohB,cAAciK,uBAAuBl8d,QACgB,iBAArDn2D,KAAKoohB,cAAciK,uBAAuBl8d,QACzCn2D,KAAKoohB,cAAc3iC,WAAazlf,KAAKoohB,cAAc1iC,aACvD1lf,KAAKoohB,cAAciK,uBAAuBC,mBAAmB71hB,OAAS,GACtEuD,KAAKoohB,cAAciK,uBAAuBrgE,kBAE9Chyd,KAAKoohB,cAAcmK,iBAEvBvyhB,KAAKk9e,qBAKT4D,EAAOzlf,UAAU43jB,yBAA2B,WACxCjzjB,KAAKmzjB,+BAA+BnzjB,KAAK4vE,UAAUryE,MAAMslf,UAAU8F,YACnE3of,KAAKozjB,iBAAiBpzjB,KAAK4vE,UAAUryE,MAAMslf,UAAU8F,aAKzD7H,EAAOzlf,UAAU83jB,+BAAiC,SAAU5yjB,GAIxD,IAAK,IAHD+yP,EAAc/yP,EAAK0vJ,KAEnBoja,EAAwC,gBAD5C9yjB,EAAOP,KAAKo6e,OAAOvpb,OAAOq2c,2BAA2B3mgB,IAC9Bizf,kBAA+D,eAA1Bjzf,EAAKizf,iBACxDr3f,EAAI,EAAGA,EAAI6D,KAAKo6e,OAAOlvQ,MAAMzuO,OAAQN,IAAK,CAC/C,IAAI8zJ,EAAOjwJ,KAAKo6e,OAAOlvQ,MAAM/uO,GAC7B,GAAKA,EAAI,IAAM,GAAM8zJ,EAAKyhW,YAAY,GAAG/O,cAAci6B,qBACH,IAAhDr8gB,EAAKizf,iBAAiBj1f,QAAQ,aAC9B,OAEe,IAAf0xJ,EAAKh+I,OAAeg+I,EAAKyhW,YAAY,GAAG/O,cAAci6B,qBACN,IAAhDr8gB,EAAKizf,iBAAiBj1f,QAAQ,cAG9B+0P,IAAgBrjG,IACZA,EAAKyhW,YAAY,GAAG/O,cAAck6B,yBAC9Bw2C,IAAel3jB,EAAI,GAAK,GAAM,EAC9B6D,KAAKszjB,uCAAuCrja,EAAM1vJ,GAAmD,IAA7CA,EAAKizf,iBAAiBj1f,QAAQ,WAE/E80jB,IAAel3jB,EAAI,GAAK,GAAM,GACjC8zJ,EAAKyhW,YAAY,GAAG/O,cAAci6B,oBAAuBzghB,EAAI,IAAM,GACnE6D,KAAKszjB,uCAAuCrja,EAAM1vJ,GAAmD,IAA7CA,EAAKizf,iBAAiBj1f,QAAQ,WAK9FyB,KAAKszjB,uCAAuCrja,EAAM1vJ,GAAmD,IAA7CA,EAAKizf,iBAAiBj1f,QAAQ,cAQtGuif,EAAOzlf,UAAUi4jB,uCAAyC,SAAUrja,EAAM0hW,EAAQ7le,GAC9E,GAAI6le,EAAO1hW,OAASA,EAAM,CACtB,IAAIsja,EAAW5hE,EAAOtyf,QACtBk0jB,EAAStja,KAAOA,EAChBjwJ,KAAKo6e,OAAO4sB,mBAAmBusD,EAAS5wE,cAAe72d,GACvDyniB,EAAWvzjB,KAAKo6e,OAAOvpb,OAAOo2c,wBAAwBjngB,KAAKo6e,OAAQm5E,GACnE,IAAIC,OAAiB,EACjB1niB,GACA0niB,EAAiBvja,EAAK4jW,aACtB5jW,EAAK4jW,aAAe0/D,IAGpBC,EAAiBvja,EAAK6jW,aACtB7jW,EAAK6jW,aAAey/D,GAExBC,EAAelhjB,YAMvBwue,EAAOzlf,UAAU+3jB,iBAAmB,SAAUr/D,GAC1C,IACI7jW,EADAxpJ,EAAOqtf,EAAaP,iBAEX,oBAAT9sf,GAAuC,oBAATA,EAC9BwpJ,EAAY,EAEP6jW,EAAapR,cAAck6B,yBAE5B3sX,EADA6jW,EAAapR,cAAci6B,mBACL,eAATl2gB,GAAkC,eAATA,EAAyB,EAAI,GAG5B,IAA1BA,EAAKnI,QAAQ,QAAkB,EAAI,EAKlC,KADlB2xJ,EAAY6jW,EAAapR,cAAci6B,mBAAqB,EAAI,IACZ,IAA7B58gB,KAAKo6e,OAAOlvQ,MAAMzuO,SACrCyzJ,EAAY,GAGpB,IAAID,EAAOjwJ,KAAKo6e,OAAOlvQ,MAAMh7E,GAC7B,IAAgC,IAA5BxpJ,EAAKnI,QAAQ,UAAkB,CAC/B,IAAIwniB,EAAa91Y,EAAKyhW,YAAY,GAAG90e,WACjCikC,EAAQ8pc,GAAcO,oBAAoB6I,EAAapR,cAAcx3P,WACrE49R,EAAiBp+B,GAAcO,oBAAoB6I,EAAapR,cAAcomC,gBAClFloe,EAAQx0C,KAAKC,IAAIy8gB,EAAiB94X,EAAK4jW,aAAa99e,OAAQ8qC,GACxDklf,EAAW/4hB,IAAM6zC,IACjB7gD,KAAKo6e,OAAOszB,iBAAiBz9W,EAAKyhW,YAAY,GAAG/O,cAAe1yV,GAChEjwJ,KAAKo6e,OAAOu8B,aAAeovB,QAI/B/liB,KAAKyzjB,wBAAwBxja,EAAM8jW,GAEnC/zf,KAAKo6e,OAAOu8B,eACZ32gB,KAAKo6e,OAAOk0B,cAAct+c,QAC1BhwD,KAAKo6e,OAAOvpb,OAAOood,uBAM3Bn4B,EAAOzlf,UAAUo4jB,wBAA0B,SAAUxja,EAAM6jW,GAGvD,IAAK,IADD6iB,EADAhuB,EAAa14V,EAAKyhW,YAAY,GAEzBv1f,EAAI,EAAGA,EAAIwsf,EAAW1F,aAAaxmf,OAAQN,IAAK,CACrD,IAAI63f,EAAQrL,EAAW1F,aAAa9mf,GACpC,GAAI63f,EAAMhnf,EAAIgnf,EAAMj+e,OAAS+9e,EAAa9mf,EAAG,CACzC2pgB,EAAe3iB,EACf,MAEJ,GAAIrL,EAAW1F,aAAaxmf,OAAS,IAAMN,GAAK63f,EAAMhnf,EAAIgnf,EAAMj+e,OAAS+9e,EAAa9mf,EAAG,CACrF2pgB,EAAe3iB,EACf,OAGRh0f,KAAKo6e,OAAOszB,iBAAiB/kB,EAAWhG,cAAe1yV,GACvDjwJ,KAAKo6e,OAAO2wB,WAAW4L,EAAa3pgB,GACpChN,KAAKo6e,OAAOu8B,aAAeA,GAa/B71B,EAAOzlf,UAAUk1hB,uBAAyB,SAAUvkgB,EAAUhvB,EAAOqiD,GACjE,IAAIuwB,EAAY5vE,KAAKo6e,OAAOxqa,UAC5B,IAAIA,EAAU0/a,MAAMzR,gBAAmBjua,EAAU0/a,MAAM7U,iBAAvD,CAGAp7b,GAAS5hD,EAAkB4hD,IAAkBA,EAC7C,IAAI8W,EAAUnqC,EAAS,GAAGvB,cAAgBuB,EAAS3qB,MAAM,GACrDwhf,EAAYjza,EAAUryE,MAAMslf,UACjBA,EAAUI,aAAaJ,EAAUI,aAAaxmf,OAAS,GACtE,GAAImzE,EAAU0qK,SAAqC,SAA1B1qK,EAAUy0b,YAI/B,OAHAz0b,EAAUuxd,qBAAsB,EAChCvxd,EAAUk1d,sBAAqB,QAC/Bl1d,EAAUuxd,qBAAsB,GAGpCnhiB,KAAK+xhB,eAAenid,GACpB5vE,KAAK0+a,YAAYvoX,GASa,SAA1ByZ,EAAUy0b,YAEVrkgB,KAAK0zjB,gCAAgC9jf,EAAW5jD,EAAUhvB,EAAOqiD,GAIjEr/C,KAAK2zjB,mCAAmC3niB,EAAUhvB,EAAOqiD,KAOjEyhc,EAAOzlf,UAAUq4jB,gCAAkC,SAAU9jf,EAAW5jD,EAAU+G,EAAQssB,GACtF,IAAIipc,EAAYtof,KAAKumf,aAAa32a,EAAUryE,MAAMslf,WAClD,IAAIplf,EAAkB6qf,GAAtB,CAGA,IAAItK,EAAkBsK,EAAUtK,gBAChC,OAAQhyd,GACJ,IAAK,OACDhsB,KAAK4zjB,gCAAgChkf,EAAWoua,EAAiB,QAAUA,EAAoB,MAC/F,MACJ,IAAK,SACDh+e,KAAK4zjB,gCAAgChkf,EAAWoua,EAAiB,UAAYA,EAAsB,QACnG,MACJ,IAAK,YACDh+e,KAAK4zjB,gCAAgChkf,EAAWoua,EAAiB,YAAajrd,GAC9E,MACJ,IAAK,aACD/yB,KAAK4zjB,gCAAgChkf,EAAWoua,EAAiB,aAAcjrd,GAC/E,MACJ,IAAK,WACD/yB,KAAK4zjB,gCAAgChkf,EAAWoua,EAAiB,WAAYjrd,GAC7E,MACJ,IAAK,iBACD/yB,KAAK4zjB,gCAAgChkf,EAAWoua,EAAiB,iBAAkBjrd,GACnF,MACJ,IAAK,oBACGird,EAAgBqM,oBAAsBt3d,IACtCA,EAAS,UAEb/yB,KAAK4zjB,gCAAgChkf,EAAWoua,EAAiB,oBAAqBjrd,GACtF,MACJ,IAAK,gBACGird,EAAgBuM,gBAAkBx3d,IAClCA,EAAS,QAEb/yB,KAAK4zjB,gCAAgChkf,EAAWoua,EAAiB,gBAAiBjrd,GAClF,MACJ,IAAK,YACGird,EAAgB9oO,YAAcniP,IAC9BA,EAAS,QAEb/yB,KAAK4zjB,gCAAgChkf,EAAWoua,EAAiB,YAAajrd,GAC9E,MACJ,IAAK,kBACD/yB,KAAK4zjB,gCAAgChkf,EAAWoua,OAAiB7if,EAAW43B,MAIxF+td,EAAOzlf,UAAUu4jB,gCAAkC,SAAUhkf,EAAW5zC,EAAQhQ,EAAUhvB,GACtFgD,KAAK0+a,YAAY,uBACjB1+a,KAAK6zjB,qBAAqB73hB,EAAQhQ,EAAUhvB,GAAO,GACnDgD,KAAKoohB,cAAcmK,gBACnBvyhB,KAAKyjjB,SAAS7ze,GACd5vE,KAAKk9e,qBAKT4D,EAAOzlf,UAAUy4jB,0BAA4B,SAAUlkf,EAAW5jD,EAAUhvB,GACxEgD,KAAK+zjB,uBAAuBnkf,EAAW5jD,EAAUhvB,GAAO,IAE5D8jf,EAAOzlf,UAAU04jB,uBAAyB,SAAUnkf,EAAW5jD,EAAUhvB,EAAOqiD,GAC5Er/C,KAAKo6e,OAAOkV,MAAM9jB,mBAAoB,EACtC,IAAIwoF,EAAwBpkf,EAAUryE,MAClC02jB,EAAsBrkf,EAAU/wD,IAC/B+wD,EAAUqwd,YACX+zB,EAAwBpkf,EAAU/wD,IAClCo1iB,EAAsBrkf,EAAUryE,OAEpCyC,KAAKk0jB,oBAAoBtkf,EAAWokf,GACpC,IAAI1rE,EAAYtof,KAAKumf,aAAa32a,EAAUryE,MAAMslf,WAClD7if,KAAK6zjB,qBAAqBvrE,EAAUtK,gBAAiBhyd,EAAUhvB,EAAOqiD,GACtEr/C,KAAKm0jB,0BAA0BH,EAAsBnxE,UAAWjza,EAAWokf,EAAuBC,IAKtGnzE,EAAOzlf,UAAUkrf,aAAe,SAAU1D,GACtC,IAAIuxE,OAAcj5jB,EACd4rf,EAAkB,EAKtB,GAJKtpf,EAAkBolf,EAAUjF,kBAAqBngf,EAAkBolf,EAAUjF,gBAAgBgG,cAC9FwwE,EAAcp0jB,KAAKo6e,OAAO4wB,YAAYnoB,EAAUjF,gBAAgBgG,WAAWsC,QAC3Ea,EAAkBlE,EAAUjF,gBAAgBgG,WAAWmD,kBAEtDtpf,EAAkB22jB,KAClB32jB,EAAkBuC,KAAKo6e,OAAOm0B,oBAAoB6lD,EAAYhuE,mBAE3D3of,EAAkBuC,KAAKo6e,OAAOm0B,oBAAoB6lD,EAAYhuE,gBAAgBhna,QAClF,OAAOp/E,KAAKo6e,OAAOvpb,OAAO01b,aAAa6tE,EAAartE,IAI5DjG,EAAOzlf,UAAUytjB,qBAAuB,WACpC,IAAIl5e,EAAY5vE,KAAKo6e,OAAOxqa,UACxB17D,EAAW07D,EAAUryE,MACpBqyE,EAAUqwd,YACX/rhB,EAAW07D,EAAU/wD,MAErB7e,KAAKoohB,eAAkB3qhB,EAAkBuC,KAAKoohB,cAAciK,yBACxD50hB,EAAkByW,IAClBzW,EAAkBuC,KAAKoohB,cAAciK,uBAAuBo2B,iBAC5DzojB,KAAKusjB,sBAAsBr4iB,GAAU,IAQjD4se,EAAOzlf,UAAU02hB,eAAiB,SAAUnid,GACxC,IAAIjpD,EAAO3mB,KAAK2ojB,iBAAiB/4e,EAAUryE,OAC3CyC,KAAKy4hB,eAAiB9xgB,EAAKk8d,UAC3B7if,KAAKw2f,YAAc7ve,EAAKhb,OACxBgb,EAAO3mB,KAAK2ojB,iBAAiB/4e,EAAU/wD,KACvC7e,KAAK04hB,aAAe/xgB,EAAKk8d,UACzB7if,KAAKqggB,UAAY15e,EAAKhb,QAM1Bm1e,EAAOzlf,UAAU8niB,qBAAuB,SAAU34C,GAC9C,IAAI56a,EAAY5vE,KAAKo6e,OAAOxqa,WACxBnyE,EAAkB+sf,IAAsC,YAAnBA,KACrCA,EAAiB,UAGjB56a,EAAUoua,gBAAgBwM,iBAAmBA,IAC7CA,EAAiB,WAErBxqf,KAAK4vE,UAAUoua,gBAAgBwM,eAAiBA,GAKpD1J,EAAOzlf,UAAU+niB,gBAAkB,WAC/B,IAAKpjiB,KAAKsvf,MAAMzR,eAAgB,CAC5B,IAAI7gf,EAA6D,cAArDgD,KAAK4vE,UAAUoua,gBAAgBqM,kBAAoC,SAAW,YAC1Frqf,KAAK4vE,UAAUoua,gBAAgBqM,kBAAoBrtf,IAM3D8jf,EAAOzlf,UAAUgoiB,kBAAoB,WACjC,IAAKrjiB,KAAKsvf,MAAMzR,eAAgB,CAC5B,IAAI7gf,EAA6D,gBAArDgD,KAAK4vE,UAAUoua,gBAAgBqM,kBAAsC,SAAW,cAC5Frqf,KAAK4vE,UAAUoua,gBAAgBqM,kBAAoBrtf,IAU3D8jf,EAAOzlf,UAAUkoiB,eAAiB,WACzBvjiB,KAAKsvf,MAAMzR,gBACZ79e,KAAKsxhB,uBAAuB,aAActxhB,KAAKo6e,OAAOi1B,iBAAiB,GAAM,IAMrFvuB,EAAOzlf,UAAUmoiB,eAAiB,WACzBxjiB,KAAKsvf,MAAMzR,gBACZ79e,KAAKsxhB,uBAAuB,cAAetxhB,KAAKo6e,OAAOi1B,iBAAiB,GAAM,IAMtFvuB,EAAOzlf,UAAUg5jB,UAAY,WACzBr0jB,KAAK4vE,UAAU0/a,MAAM5U,aAAam3C,iBAAY12hB,IAOlD2lf,EAAOzlf,UAAUi5jB,YAAc,SAAUC,EAAQtniB,GACxCjtB,KAAKsvf,MAAMzR,gBACZ79e,KAAKw0jB,uBAAuBD,EAAQ,SAAUtniB,IAStD6zd,EAAOzlf,UAAUo5jB,eAAiB,SAAUzvD,EAAcV,GACjDtkgB,KAAKsvf,MAAMzR,gBACZ79e,KAAKw0jB,uBAAuBxvD,EAAcV,EAAkB,YAQpExjB,EAAOzlf,UAAUwsjB,wBAA0B,SAAU6M,GACjD10jB,KAAK20jB,eAAe,EAAGD,IAK3B5zE,EAAOzlf,UAAUu5jB,gBAAkB,WAC/B,IAAIhlf,EAAY5vE,KAAKo6e,OAAOxqa,UAC5B5vE,KAAKu8iB,mBAAmB,eAGpB3se,EAAU0qK,UACV1qK,EAAUryE,MAAMigiB,6BAA6B5td,GAAW,GACxDA,EAAU/wD,IAAI4+gB,2BAA2B7td,GAAW,IAExD5vE,KAAK+xhB,eAAenid,GAChB5vE,KAAKoohB,eACLpohB,KAAKoohB,cAAcysC,kBAAkB,wBAEzC70jB,KAAK2zjB,mCAAmC,4BAAwBx4jB,GAAW,GAC3E6E,KAAKg6d,eAAepqZ,GAChB5vE,KAAKoohB,eACLpohB,KAAKoohB,cAAcmK,gBAEvBvyhB,KAAK+xhB,eAAenid,GAChB5vE,KAAKoohB,eACLpohB,KAAKoohB,cAAcysC,kBAAkB,wBAEzC70jB,KAAK80jB,8BAA8B,4BAAwB35jB,GAAW,GAClE6E,KAAKoohB,eACLpohB,KAAKoohB,cAAcmK,gBAEvBvyhB,KAAKg6d,eAAepqZ,GAChB5vE,KAAKoohB,gBAAkB3qhB,EAAkBuC,KAAKoohB,cAAco0B,qBAC5Dx8iB,KAAKoohB,cAAcq0B,uBAEvBz8iB,KAAKy4hB,oBAAiBt9hB,EACtB6E,KAAK04hB,kBAAev9hB,GAYxB2lf,EAAOzlf,UAAUs5jB,eAAiB,SAAUjujB,EAAM1J,GAC9C,IAAI4yE,EAAY5vE,KAAK4vE,UACrB,IAAIA,EAAU0/a,MAAMzR,gBAAmBjua,EAAU0/a,MAAM7U,iBAAvD,CAGA,IAAI3tN,EAAgBl9M,EAAUryE,MACZqyE,EAAU/wD,IACvB+wD,EAAUqwd,YACXnzQ,EAAgBl9M,EAAU/wD,IACZ+wD,EAAUryE,OAE5B,IAAIq3f,EAAgB,EAChBilC,EAAY/sQ,EAAc+pP,cAAcliB,UAAU7nO,EAAcnhR,OAAQipf,GACxExvW,EAASy0Y,EAAU74hB,QACvB4zf,EAAgBilC,EAAU5nhB,MAC1B,IAAI4we,EAAY/1N,EAAc+1N,UAI9B,GAHKplf,EAAkB2nJ,IAAWA,EAAO3oJ,SAAWm4f,GAAkB50f,KAAK4vE,UAAU0qK,UACjFl1F,EAASA,EAAOusK,UAEP,IAATjrT,EAAY,CACZ,IAAIqujB,EAAmB,OAClBt3jB,EAAkB2nJ,GAGb3nJ,EAAkBolf,KACxBkyE,EAAmBlyE,EAAU7E,gBAAgB9oO,WAH7C6/S,EAAmB3va,EAAO44V,gBAAgB9oO,UAK9Cl1Q,KAAK4vE,UAAUoua,gBAAgB9oO,UAAYl4Q,IAAU+3jB,EAAmB,OAAS/3jB,MAEhF,CACD,IAAIg4jB,EAAS,SACRv3jB,EAAkB2nJ,GAGb3nJ,EAAkBolf,KACxBmyE,EAASnyE,EAAU7E,gBAAgBqM,mBAHnC2qE,EAAS5va,EAAO44V,gBAAgBqM,kBAKhC2qE,IAAWh4jB,IACXA,EAAQ,UAEZgD,KAAK4vE,UAAUoua,gBAAgBqM,kBAAoBrtf,KAO3D8jf,EAAOzlf,UAAU2khB,WAAa,SAAUj0B,GACpC,IAAIrnf,EAAQ1E,KAAKo6e,OAAO72e,OAAOmgf,WAAWqI,QAC5B5wf,IAAVuJ,EACA1E,KAAKsxhB,uBAAuB,YAAa5shB,GAAO,GAAO,IAIvD1E,KAAKo6e,OAAOkV,MAAM/4Z,OAAOo2b,WAAW98d,KAAKuB,MAAMpxD,KAAKi1jB,qBAAsBplgB,KAAKuB,MAAMpxD,KAAKo6e,OAAO2nC,iBAAiBr6gB,IAAIqkf,IAAa/rf,KAAKo6e,OAAO72e,QAC/IvD,KAAKgghB,WAAWj0B,KAGxBjL,EAAOzlf,UAAU45jB,kBAAoB,WAEjC,IAAK,IADDC,EAAuB,cAClB92jB,EAAK,EAAGyE,EAAK7C,KAAKo6e,OAAO2nC,iBAAiBz1a,UAAWluG,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAChF,IAAI02E,EAASjyE,EAAGzE,GAChB82jB,GAAyBl1jB,KAAKo6e,OAAO2nC,iBAAiBr6gB,IAAIotE,GAAU,IAExE,OAAOogf,EAAqB7zjB,MAAM,GAAI,GAAK,MAM/Cy/e,EAAOzlf,UAAUklf,uBAAyB,WAMtC,IAAK,IALD40E,EAAiBn1jB,KAAKsvf,MAAMzL,cAAc,aAKrCzlf,EAAK,EAAGg3jB,GAJQ,SAAU,YAAa,YAAa,YAAa,YAAa,YAAa,aACjEpuhB,OAAO,SAAU/e,GAChD,OAAwC,IAAjCktiB,EAAe52jB,QAAQ0pB,KAEU7pB,EAAKg3jB,EAAa34jB,OAAQ2B,IAAM,CACxE,IAAI4jJ,EAASoza,EAAah3jB,GAC1B4B,KAAKgwE,YAAYhwE,KAAKo6e,OAAO2nC,iBAAiBr6gB,IAAIs6I,MAO1D8+V,EAAOzlf,UAAU20E,YAAc,SAAU+8c,GAErC,IAAIrohB,EAAQmrD,KAAKuB,MAAM27d,GAOvB,YALiB5xhB,IADF6E,KAAKo6e,OAAO72e,OAAOmgf,WAAWh/e,EAAM+yB,QAG/C/yB,EAAM+yB,KAAOz3B,KAAKq1jB,mBAAmB3wjB,EAAM+yB,OAE/Cz3B,KAAKo6e,OAAOkV,MAAM/4Z,OAAOo2b,WAAW98d,KAAKuB,MAAMpxD,KAAKi1jB,qBAAsBvwjB,EAAO1E,KAAKo6e,OAAO72e,QACtFvD,KAAKo6e,OAAO72e,OAAOmgf,WAAWh/e,EAAM+yB,OAK/Cqpd,EAAOzlf,UAAUg6jB,mBAAqB,SAAU59hB,GAG5C,IAFA,IAAI69hB,EAAat1jB,KAAKu1jB,cAAc99hB,GAChC/yB,EAAQ1E,KAAKo6e,OAAO72e,OAAOmgf,WAAW4xE,IAClC73jB,EAAkBiH,IACtB4wjB,EAAat1jB,KAAKq1jB,mBAAmB3wjB,EAAM+yB,MAC3C/yB,EAAQ1E,KAAKo6e,OAAO72e,OAAOmgf,WAAW4xE,GAE1C,OAAOA,GAEXx0E,EAAOzlf,UAAUk6jB,cAAgB,SAAU99hB,GACvC,IAAI+9hB,EAAa/9hB,EAAK9nB,MAAM,QAC5B,OACKlS,EAAkB+3jB,IAAeA,EAAW/4jB,OAAS,EAC/Cg7B,EAAKloB,QAAQimjB,EAAW,IAAKzgiB,SAASygiB,EAAW,GAAI,IAAM,GAAGtojB,YAG9DuqB,EAAO,MAOtBqpd,EAAOzlf,UAAUs4jB,mCAAqC,SAAU3niB,EAAU+G,EAAQssB,GAI9E,OAHI5hD,EAAkBuuB,KAClBA,EAAW,mBAEPA,GACJ,IAAK,OACDhsB,KAAKy1jB,sBAAsB,OAAQ1iiB,GACnC,MACJ,IAAK,SACD/yB,KAAKy1jB,sBAAsB,SAAU1iiB,GACrC,MACJ,IAAK,YACD/yB,KAAKy1jB,sBAAsB,YAAa1iiB,GACxC,MACJ,IAAK,aACD/yB,KAAKy1jB,sBAAsB,aAAc1iiB,GACzC,MACJ,IAAK,WACD/yB,KAAKurjB,gCAAgCvrjB,KAAKo6e,OAAOxqa,UAAW,WAAY78C,EAAQssB,GAChF,MACJ,IAAK,iBACDr/C,KAAKy1jB,sBAAsB,iBAAkB1iiB,GAC7C,MACJ,IAAK,oBACD/yB,KAAKy1jB,sBAAsB,oBAAqB1iiB,GAChD,MACJ,IAAK,gBACD/yB,KAAKy1jB,sBAAsB,gBAAiB1iiB,GAC5C,MACJ,IAAK,YACD/yB,KAAKy1jB,sBAAsB,YAAa1iiB,GACxC,MACJ,IAAK,YACD/yB,KAAKurjB,gCAAgCvrjB,KAAKo6e,OAAOxqa,UAAW,YAAa78C,GAAQ,GACjF,MACJ,IAAK,kBAGL,IAAK,uBACD/yB,KAAKy1jB,2BAAsBt6jB,EAAW43B,GAG9C/yB,KAAKyjjB,SAASzjjB,KAAKo6e,OAAOxqa,YAU9Bkxa,EAAOzlf,UAAUo6jB,sBAAwB,SAAUzpiB,EAAUhvB,GACzDgD,KAAKurjB,gCAAgCvrjB,KAAKo6e,OAAOxqa,UAAW5jD,EAAUhvB,GAAO,IAEjF8jf,EAAOzlf,UAAUkwjB,gCAAkC,SAAU37e,EAAW5jD,EAAUhvB,EAAOqiD,GACrFr/C,KAAKo6e,OAAOkV,MAAM9jB,mBAAoB,EACtC,IAAI1+M,EAAgBl9M,EAAUryE,MAC1B4rhB,EAAcv5c,EAAU/wD,IACvB+wD,EAAUqwd,YACXnzQ,EAAgBl9M,EAAU/wD,IAC1BsqgB,EAAcv5c,EAAUryE,OAE5ByC,KAAK01jB,+BAA+B5oS,EAAc+1N,UAAWjza,EAAWk9M,EAAeq8P,EAAan9f,EAAUhvB,EAAOqiD,IAGzHyhc,EAAOzlf,UAAUq6jB,+BAAiC,SAAU7yE,EAAWjza,EAAWryE,EAAOshB,EAAKmN,EAAUhvB,EAAOqiD,GAE3G,IAAI9hD,EAAMslf,UAAUuR,eAAmBv1e,EAAIgke,UAAUuR,eAC9C72f,EAAMslf,UAAUwR,iBAAmBx1e,EAAIgke,UAAUwR,iBACjDzkb,EAAU20b,eAAehngB,EAAMslf,UAAUwR,eAAgB92f,EAAOshB,GAanE7e,KAAK21jB,gBAAgB9yE,EAAWjza,EAAWryE,EAAOshB,EAAKmN,EAAUhvB,EAAOqiD,OAbE,CAC1E,IAAI4jB,OAAO,EACX1lE,EAAMslf,UAAUwR,eAAeJ,WAAWpB,cAAc7yf,KAAKo6e,QACzDp6e,KAAKqujB,oBAAoBz+e,IACzB5vE,KAAKusjB,sBAAsBhvjB,GAAO,GAEtC0lE,EAAO1lE,EAAMslf,UAAUwR,eACvBr0f,KAAK41jB,oBAAoB3yf,EAAM2M,EAAWryE,EAAOshB,EAAKmN,EAAUhvB,EAAOqiD,GACvE,IAAI4gB,EAAQgD,EAAKgxb,WAEjBj0f,KAAKo6e,OAAOvpb,OAAO0md,2BAA2Bt3c,EAAMhuD,MAAOguD,EAAMijb,gBAAiBjjb,GAAO,KAOjG6gb,EAAOzlf,UAAUw6jB,+BAAiC,SAAUhzE,EAAWjza,EAAW5jD,EAAUhvB,EAAOqiD,GAC/F,IAAK,IAAIljD,EAAI,EAAGA,EAAI0mf,EAAUI,aAAaxmf,OAAQN,IAE/C,IAAK,IADD2xD,EAAO+0b,EAAUI,aAAa9mf,GACzBonB,EAAI,EAAGA,EAAIuqC,EAAK1zC,SAAS3d,OAAQ8mB,IAAK,CAC3C,IAAIviB,EAAU8sD,EAAK1zC,SAASmJ,GAC5BvjB,KAAK6zjB,qBAAqB7yjB,EAAQg9e,gBAAiBhyd,EAAUhvB,EAAOqiD,GAG5Er/C,KAAK6zjB,qBAAqBhxE,EAAU7E,gBAAiBhyd,EAAUhvB,EAAOqiD,IAE1Eyhc,EAAOzlf,UAAUy6jB,sBAAwB,SAAUjzE,GAC/C,IAAIkzE,EAAiBlzE,EAAU8P,kBAC/B,OAAOojE,EAAeA,EAAet5jB,OAAS,IAGlDqkf,EAAOzlf,UAAU26jB,uCAAyC,SAAUhiE,EAAOz2f,EAAOshB,EAAKmN,EAAUhvB,EAAOqiD,GACpG,IAAI42gB,EAAmBjiE,EAAMrB,kBAC7BqB,EAAQiiE,EAAiBA,EAAiBx5jB,OAAS,GAE9CgB,EADLu2f,EAAQh0f,KAAKo6e,OAAOxqa,UAAUmpd,qBAAqB/kC,MAE3CA,aAAiBlR,GACjB9if,KAAK21jB,gBAAgB3hE,EAAOh0f,KAAKo6e,OAAOxqa,UAAWryE,EAAOshB,EAAKmN,EAAUhvB,EAAOqiD,GAGhFr/C,KAAKk2jB,wBAAwB,EAAGliE,EAAOh0f,KAAKo6e,OAAOxqa,UAAWryE,EAAOshB,EAAKmN,EAAUhvB,EAAOqiD,KAKvGyhc,EAAOzlf,UAAUs6jB,gBAAkB,SAAU9yE,EAAWjza,EAAWryE,EAAOshB,EAAKmN,EAAUhvB,EAAOqiD,GAC5Fwjc,EAAYA,EAAUgQ,cAAc7yf,KAAKo6e,QACzC,IAAIoc,EAAc,EACd/5f,EAASmzE,EAAU+nd,mBAAmB90C,GACtCs0B,GAA2E,IAAzDt0B,EAAUI,aAAa1kf,QAAQhB,EAAMs5gB,eACvDh0B,EAAUI,aAAa1kf,QAAQhB,EAAMs5gB,eAAiB,EACtDxW,EAAYxhf,EAAIlT,OAChB6hiB,GAAuE,IAAvD3qD,EAAUI,aAAa1kf,QAAQsgB,EAAIg4f,eACnDh0B,EAAUI,aAAa1kf,QAAQsgB,EAAIg4f,eAAiBh0B,EAAUI,aAAaxmf,OAAS,EAMxF,GALKgB,EAAkBmyE,IACfiza,IAActlf,EAAMslf,YACpB2T,EAAcj5f,EAAMoO,QAGvBk3e,EAAUhqc,OAAOh6B,EAAIgke,WAIrB,CACD,IAAIm4B,EAAWn4B,EAAUI,aAAaJ,EAAUI,aAAaxmf,OAAS,GAClEmzE,EAAUqgc,oBAAoB+K,IAAan8f,EAAIg4f,gBAAkBmE,GAC9D3a,IAAczwb,EAAUipd,cAAc7d,GAAY,GACrDh7gB,KAAK6zjB,qBAAqBhxE,EAAU7E,gBAAiBhyd,EAAUhvB,EAAOqiD,QAP1Er/C,KAAK6zjB,qBAAqBhxE,EAAU7E,gBAAiBhyd,EAAUhvB,EAAOqiD,GACtEghd,EAAY5jgB,EAUhB,IAAK,IAAIN,EAAIg7gB,EAAiBh7gB,GAAKqxiB,EAAerxiB,IAAK,CACnD,IAAI2xD,EAAO+0b,EAAUI,aAAa9mf,GAC9BA,IAAMg7gB,IACN3gB,EAAc5mb,EAAUgqd,mBAAmB9re,IAG3Cuyc,EADAvyc,IAASjvC,EAAIg4f,cACDh4f,EAAIlT,OAGJikE,EAAUipd,cAAc/qe,GAGxC,IAAK,IADDhvC,EAAQ,EACHyE,EAAI,EAAGA,EAAIuqC,EAAK1zC,SAAS3d,OAAQ8mB,IAAK,CAC3C,IAAIs2gB,EAAY/re,EAAK1zC,SAASmJ,GAC9B,KAAIs2gB,aAAqB9kC,IAGzB,GAAIyB,GAAe13e,EAAQ+6gB,EAAUp9hB,OACjCqiB,GAAS+6gB,EAAUp9hB,WADvB,CAIA,IAAIipB,EAAa,EACb8we,EAAc13e,IACd4G,EAAa8we,EAAc13e,GAE/B,IAAI8G,EAAWy6e,EAAYvhf,EACvBq3iB,EAAet8B,EAAUp9hB,OAK7B,GAJImpB,EAAWuwiB,IACXvwiB,EAAWuwiB,GAEf5yiB,GAAKvjB,KAAKo2jB,sBAAsBv8B,EAAWjqd,EAAWlqD,EAAYE,EAAUoG,EAAUhvB,EAAOqiD,GACzFghd,GAAavhf,EAAQq3iB,EACrB,MAEJr3iB,GAASq3iB,IAGjB,IAAIz9B,EAAe75gB,EAAIgke,UACvB7if,KAAKo6e,OAAOvpb,OAAOwmd,kBAAkBx0B,EAAWs0B,EAAiB,GAC7Dt0B,EAAUhqc,OAAO6/e,IAGrB14hB,KAAKg2jB,uCAAuCnzE,EAAWtlf,EAAOshB,EAAKmN,EAAUhvB,EAAOqiD,IAKxFyhc,EAAOzlf,UAAU0niB,WAAa,WAC1B,IAAI/iiB,KAAKo6e,OAAOkV,MAAMzR,eAAtB,CAGA,IAAI7gf,EAAQgD,KAAKq2jB,yBAAyB,QAC1Cr2jB,KAAK4vE,UAAUoua,gBAAgBtvc,KAAO1xC,IAK1C8jf,EAAOzlf,UAAU2niB,aAAe,WAC5B,IAAIhjiB,KAAKo6e,OAAOkV,MAAMzR,eAAtB,CAGA,IAAI7gf,EAAQgD,KAAKq2jB,yBAAyB,UAC1Cr2jB,KAAK4vE,UAAUoua,gBAAgBzsc,OAASv0C,IAE5C8jf,EAAOzlf,UAAUg7jB,yBAA2B,SAAUrqiB,GAClD,IAAIhvB,GAAQ,EACZ,GAAkB,SAAbgvB,GAAoC,WAAbA,EAAwB,CAChD,IAAI/Z,EAAQ,EACR1U,EAAQyC,KAAK4vE,UAAUryE,MACtByC,KAAK4vE,UAAUqwd,YAChB1iiB,EAAQyC,KAAK4vE,UAAU/wD,KAE3B,IAAIw/e,EAAa9ggB,EAAMs5gB,cACnBgjB,EAAYx7B,EAAW1J,UAAUp3f,EAAMoO,OAAQsG,GAC/CmzI,EAASy0Y,EAAU74hB,QAEvBiR,EAAQ4nhB,EAAU5nhB,MAClB,IAAI+re,EAAkBqgB,EAAWxb,UAAU7E,gBACtCvgf,EAAkB2nJ,KAMf44V,EALCh+e,KAAK4vE,UAAU0qK,SAAWroO,IAAUmzI,EAAO3oJ,OAK1B2oJ,EAAO44V,gBAJPvgf,EAAkB2nJ,EAAOusK,UAAY0sM,EAAWxb,UAAU7E,gBACtE54V,EAAOusK,SAASqsL,iBAMb,SAAbhyd,IACAhvB,GAAUghf,EAAoB,MAEjB,WAAbhyd,IACAhvB,GAAUghf,EAAsB,QAGxC,OAAOhhf,GAMX8jf,EAAOzlf,UAAU4niB,gBAAkB,SAAU/tR,GACpCl1Q,KAAKsvf,MAAMzR,gBACZ79e,KAAK20jB,eAAe,EAAGz/S,IAO/B4rO,EAAOzlf,UAAU6niB,oBAAsB,SAAU34C,GAC7C,IAAKvqf,KAAKsvf,MAAMzR,eAAgB,CAC5B,IAAI7gf,OAAQ,EAERA,EADAS,EAAkB8sf,GACuC,iBAAjDvqf,KAAK4vE,UAAUoua,gBAAgBuM,cAAmC,OAAS,eAG3EA,EAEZvqf,KAAK4vE,UAAUoua,gBAAgBuM,cAAgBvtf,IAGvD8jf,EAAOzlf,UAAUi7jB,eAAiB,SAAUt6hB,EAAQh/B,GAChD,GAAuB,sBAAcA,EAAQ,GAAyB,IAApBg/B,EAAOnP,UACrD,OAAOmP,EAAOnP,SAAW7vB,EAE7B,IAAIu5jB,GAAsB,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAChF,GAAuB,oBAAsB,cAAVv5jB,EAAuB,CACtD,GAAIg/B,EAAOnP,SAAW,EAClB,OAAOmP,EAAOnP,SAAW,EAExB,GAAImP,EAAOnP,UAAY,IAAMmP,EAAOnP,SAAW,GAChD,OAAO,GAEN,GAAImP,EAAOnP,UAAY,GACxB,OAAOmP,EAAOnP,SAAW,GAGzB,IAAK,IAAI1wB,EAAI,EAAGA,EAAIo6jB,EAAmB95jB,OAAQN,IAC3C,GAAI6/B,EAAOnP,SAAW0piB,EAAmBp6jB,GACrC,OAAOo6jB,EAAmBp6jB,QAKrC,GAAuB,oBAAsB,cAAVa,GAAyBg/B,EAAOnP,SAAW,EAAG,CAClF,GAAImP,EAAOnP,UAAY,EACnB,OAAOmP,EAAOnP,SAAW,EAExB,GAAImP,EAAOnP,SAAW,IAAMmP,EAAOnP,UAAY,GAChD,OAAO,GAEN,GAAImP,EAAOnP,SAAW,GACvB,OAAOmP,EAAOnP,SAAW,GAGzB,IAAS1wB,EAAI,EAAGA,EAAIo6jB,EAAmB95jB,OAAQN,IAC3C,GAAI6/B,EAAOnP,UAAY0piB,EAAmBp6jB,GACtC,OAAOo6jB,EAAmBp6jB,EAAI,GAK9C,OAAO6/B,EAAOnP,UAIlBi0d,EAAOzlf,UAAU+6jB,sBAAwB,SAAUhxa,EAAQx1E,EAAWlqD,EAAYE,EAAUoG,EAAUhvB,EAAOqiD,GACzG,OAAmB,IAAf35B,GAAoBE,IAAaw/H,EAAO3oJ,QACxCuD,KAAK6zjB,qBAAqBzua,EAAO44V,gBAAiBhyd,EAAUhvB,EAAOqiD,GAC5D,GAEF+lG,aAAkBovW,GAChBx0f,KAAKw2jB,aAAapxa,EAAQx1E,EAAWlqD,EAAYE,EAAUoG,EAAUhvB,EAAOqiD,GAEhF,GAGXyhc,EAAOzlf,UAAUm7jB,aAAe,SAAUpxa,EAAQx1E,EAAWlqD,EAAYE,EAAUoG,EAAUhvB,EAAOqiD,GAChG,IAKI/oB,EALAvpB,EAAI,EACJxM,EAAO6kJ,EACPnzI,EAAQmzI,EAAOt3F,KAAK1zC,SAAS7b,QAAQgC,GACzB6kJ,EAAOy9V,UACGI,aAAa1kf,QAAQ6mJ,EAAOt3F,MA8BtD,OA5BIpoC,EAAa,KACb4Q,EAAc,IAAIk+d,IACNxW,gBAAgBwH,WAAWpgW,EAAO44V,iBAC9C1nd,EAAYw3B,KAAOs3F,EAAOt3F,KAC1Bx3B,EAAY7J,KAAO24H,EAAO34H,KAAKuK,OAAOtR,EAAYE,EAAWF,GAC7D1lB,KAAK6zjB,qBAAqBv9hB,EAAY0nd,gBAAiBhyd,EAAUhvB,EAAOqiD,GACxEptC,IACA1R,EAAKutD,KAAK1zC,SAASiO,OAAOpW,EAAO,EAAGqkB,GACpCvpB,KAGA6Y,EAAWrlB,EAAK9D,UAChB65B,EAAc,IAAIk+d,IACNxW,gBAAgBwH,WAAWpgW,EAAO44V,iBAC9C1nd,EAAY7J,KAAOlsB,EAAKksB,KAAKvI,UAAU0B,GACvC0Q,EAAYw3B,KAAOs3F,EAAOt3F,KAC1B77C,IACA1R,EAAKutD,KAAK1zC,SAASiO,OAAOpW,EAAO,EAAGqkB,GACpCvpB,KAGe,IAAf2Y,GACA0/H,EAAO34H,KAAO24H,EAAO34H,KAAKuK,OAAO,EAAGpR,GACpC5lB,KAAK6zjB,qBAAqBzua,EAAO44V,gBAAiBhyd,EAAUhvB,EAAOqiD,IAGnE+lG,EAAO34H,KAAO24H,EAAO34H,KAAKuK,OAAO,EAAGtR,GAEjC3Y,GAIX+ze,EAAOzlf,UAAUu6jB,oBAAsB,SAAU3yf,EAAM2M,EAAWryE,EAAOshB,EAAKmN,EAAUhvB,EAAOqiD,GAC3F,GAAIxgC,EAAIgke,UAAUuR,cAAe,CAC7B,IAAIsrC,EAAgB9vd,EAAU0qd,mBAAmBr3d,EAAMpkD,EAAIgke,UAAUwR,gBACrE,GAAIqrC,EAAczrC,WAAW9vf,SAAS0a,EAAIgke,UAAUwR,gBAAiB,CACjE,IAAI8D,EAAYvob,EAAU+vd,gBAAgB18d,EAAMy8d,GAC5CtnC,EAAUxob,EAAU+vd,gBAAgB9ghB,EAAIgke,UAAUwR,eAAgBqrC,GAClE9vd,EAAUiwd,aAAaH,EAAe7ghB,EAAIgke,UAAUwR,gBAEhDzkb,EAAU20b,eAAem7B,EAAeniiB,EAAOshB,IAC/C7hB,EAAQgD,KAAKy2jB,8BAA8Bxzf,EAAM2M,EAAW5yE,EAAOgvB,GACnEhsB,KAAK02jB,+BAA+Bh3B,EAAe9vd,EAAW5jD,EAAUhvB,EAAOqiD,IAG3E84c,IAAcunC,EACd1/hB,KAAK21jB,gBAAgBp4jB,EAAMslf,UAAWjza,EAAWryE,EAAOshB,EAAKmN,EAAUhvB,EAAOqiD,GAG9Er/C,KAAK22jB,mBAAmBx+D,EAAUjE,SAAUtkb,EAAWryE,EAAOshB,EAAKmN,EAAUhvB,EAAOqiD,GAK5Fr/C,KAAK42jB,4BAA4Bl3B,EAAczrC,WAAYrkb,EAAW8vd,EAAetnC,EAASpse,EAAUhvB,EAAOqiD,QAInHr/C,KAAK22jB,mBAAmBj3B,EAAcxrC,SAAUtkb,EAAWryE,EAAOshB,EAAKmN,EAAUhvB,EAAOqiD,OAG3F,CACD,IAAIq2c,EAAY9lb,EAAUowd,iBAAiB/8d,GAC3CjjE,KAAK22jB,mBAAmBjhE,EAAUxB,SAAUtkb,EAAWryE,EAAOshB,EAAKmN,EAAUhvB,EAAOqiD,KAI5Fyhc,EAAOzlf,UAAUq7jB,+BAAiC,SAAUzzf,EAAM2M,EAAW5jD,EAAUhvB,EAAOqiD,GAC1F,IAAK,IAAIljD,EAAI,EAAGA,EAAI8mE,EAAKggb,aAAaxmf,OAAQN,IAAK,CAC/C,IAAI63f,EAAQ/wb,EAAKggb,aAAa9mf,GAC1B63f,aAAiBlR,GACjB9if,KAAK61jB,+BAA+B7hE,EAAOpkb,EAAW5jD,EAAUhvB,EAAOqiD,GAGvEr/C,KAAK62jB,2BAA2B7iE,EAAOpkb,EAAW5jD,EAAUhvB,EAAOqiD,KAM/Eyhc,EAAOzlf,UAAUs7jB,mBAAqB,SAAUj2f,EAAKkP,EAAWryE,EAAOshB,EAAKmN,EAAUhvB,EAAOqiD,GACzFriD,EAAQgD,KAAKy2jB,8BAA8B/1f,EAAIuib,aAAa,GAAIrza,EAAW5yE,EAAOgvB,GAClFhsB,KAAKk2jB,wBAAwBx1f,EAAI+/N,SAAU//N,EAAIuzb,WAAYrkb,EAAWryE,EAAOshB,EAAKmN,EAAUhvB,EAAOqiD,IAIvGyhc,EAAOzlf,UAAU66jB,wBAA0B,SAAUjkjB,EAAOguD,EAAO2P,EAAWryE,EAAOshB,EAAKmN,EAAUhvB,EAAOqiD,GACvG4gB,EAAQA,EAAM4yb,cAAc7yf,KAAKo6e,QACjC,IAAK,IAAIj+e,EAAI8V,EAAO9V,EAAI8jE,EAAMgjb,aAAaxmf,OAAQN,IAAK,CAEpD,IAAK,IADDukE,EAAMT,EAAMgjb,aAAa9mf,GACpBonB,EAAI,EAAGA,EAAIm9C,EAAIuib,aAAaxmf,OAAQ8mB,IACzCvjB,KAAK02jB,+BAA+Bh2f,EAAIuib,aAAa1/d,GAAIqsD,EAAW5jD,EAAUhvB,EAAOqiD,GAEzF,GAAIxgC,EAAIgke,UAAUuR,eAAiBxkb,EAAUi/d,YAAYnue,EAAK7hD,EAAIgke,UAAUwR,gBAExE,YADAr0f,KAAKo6e,OAAOvpb,OAAO0md,2BAA2Bt3c,EAAMhuD,MAAOguD,EAAMijb,gBAAiBjjb,GAAO,GAIjGjgE,KAAKo6e,OAAOvpb,OAAO0md,2BAA2Bt3c,EAAMhuD,MAAOguD,EAAMijb,gBAAiBjjb,GAAO,GACzFjgE,KAAKg2jB,uCAAuC/1f,EAAO1iE,EAAOshB,EAAKmN,EAAUhvB,EAAOqiD,IAGpFyhc,EAAOzlf,UAAUw7jB,2BAA6B,SAAU7uD,EAAap4b,EAAW5jD,EAAUhvB,EAAOqiD,GAC7F,IAAK,IAAIljD,EAAI,EAAGA,EAAI6rgB,EAAY/kB,aAAaxmf,OAAQN,IAEjD,IAAK,IADDukE,EAAMsnc,EAAY/kB,aAAa9mf,GAC1BonB,EAAI,EAAGA,EAAIm9C,EAAIuib,aAAaxmf,OAAQ8mB,IACzCvjB,KAAK02jB,+BAA+Bh2f,EAAIuib,aAAa1/d,GAAIqsD,EAAW5jD,EAAUhvB,EAAOqiD,IAKjGyhc,EAAOzlf,UAAUu7jB,4BAA8B,SAAU32f,EAAO2P,EAAWuob,EAAWC,EAASpse,EAAUhvB,EAAOqiD,GAC5G,IAAIy3gB,EAAgBlnf,EAAUg2d,YAAYztC,EAAUjE,SAAUiE,GAC1D4+D,EAAiBD,EAAgB3+D,EAAU7D,WAAWj/N,UACtD84Q,EAAcv+d,EAAUg2d,YAAYxtC,EAAQlE,SAAUkE,GACtDg2C,EAAeD,EAAc/1C,EAAQ9D,WAAWj/N,UAChDy7R,EAAW9wjB,KAAK+wjB,2BAA2B+F,EAAeC,EAAgB5oB,EAAaC,GAC3F0oB,EAAgBhG,EAASvzjB,MACzBw5jB,EAAiBjG,EAASjyiB,IAG1B,IAAK,IAFDC,EAAQmhD,EAAMgjb,aAAa1kf,QAAQ65f,EAAQlE,UAC3CW,GAAY,EACP14f,EAAI8jE,EAAMgjb,aAAa1kf,QAAQ45f,EAAUjE,UAAW/3f,GAAK2iB,EAAO3iB,IAErE,IAAK,IADDukE,EAAMT,EAAMgjb,aAAa9mf,GACpBonB,EAAI,EAAGA,EAAIm9C,EAAIuib,aAAaxmf,OAAQ8mB,IAAK,CAC9C,IAAI/W,EAAOojE,EAAUg2d,YAAYlle,EAAKA,EAAIuib,aAAa1/d,IACnDone,GAAcltd,MAAMq5hB,EAAe,IAAMnsE,GAAcltd,MAAMjxB,EAAM,IACnEm+e,GAAcltd,MAAMjxB,EAAM,GAAKm+e,GAAcltd,MAAMs5hB,EAAgB,KAC9DliE,IACD73f,EAAQgD,KAAKy2jB,8BAA8B/1f,EAAIuib,aAAa1/d,GAAIqsD,EAAW5yE,EAAOgvB,GAClF6oe,GAAY,GAEhB70f,KAAK02jB,+BAA+Bh2f,EAAIuib,aAAa1/d,GAAIqsD,EAAW5jD,EAAUhvB,EAAOqiD,MAKrGyhc,EAAOzlf,UAAU01jB,2BAA6B,SAAUxzjB,EAAOshB,EAAKsvhB,EAAaC,GAC7E,IAAIx+d,EAAY5vE,KAAKo6e,OAAOxqa,UAa5B,OAZIryE,EAAQ4wiB,IACR5wiB,EAAQ4wiB,GAERtvhB,EAAMuvhB,IACNvvhB,EAAMuvhB,GAEN7wiB,EAAQqyE,EAAUwud,wBAClB7giB,EAAQqyE,EAAUwud,uBAElBv/gB,EAAM+wD,EAAUwud,wBAChBv/gB,EAAM+wD,EAAUwud,wBAEX7giB,MAAOA,EAAOshB,IAAKA,IAEhCiie,EAAOzlf,UAAUo7jB,8BAAgC,SAAUxzf,EAAM2M,EAAW5yE,EAAOgvB,GAC/E,GAAuB,0BAAwB7wB,IAAV6B,IAAqC,SAAbgvB,GAAoC,WAAbA,GAAyB,CACzG,IAAI+8gB,EAAiBn5d,EAAU4ud,kBAAkBv7d,GAC7CjnC,EAAS+sgB,EAAe/qD,gBACxB+qD,EAAe9lD,aAAaxmf,OAAS,GAAKssiB,EAAe9lD,aAAa,GAAG7oe,SAAS3d,OAAS,IAC3Fu/B,EAAS+sgB,EAAe9lD,aAAa,GAAG7oe,SAAS,GAAG4je,iBAExDhhf,GAASg/B,EAAO5uB,iBAAiB4e,GAErC,OAAOhvB,GAMX8jf,EAAOzlf,UAAU27jB,6BAA+B,SAAUpnf,EAAW5zC,EAAQhQ,EAAUhvB,GACnFgD,KAAK6zjB,qBAAqB73hB,EAAQhQ,EAAUhvB,GAAO,IAEvD8jf,EAAOzlf,UAAU47jB,0BAA4B,SAAUzoC,EAAc0oC,GACjEA,EAAW3tE,sBAAwBilC,EAAajlC,sBAChD2tE,EAAW1tE,cAAgBglC,EAAahlC,eAE5C1I,EAAOzlf,UAAUw4jB,qBAAuB,SAAU73hB,EAAQhQ,EAAUhvB,EAAOqiD,GACnEA,GAAuB,aAAbrzB,IACVhvB,EAAQgD,KAAKs2jB,eAAet6hB,EAAQh/B,IAEpCgD,KAAKoohB,gBAAkB3qhB,EAAkBuC,KAAKoohB,cAAciK,0BAC5Dr1hB,EAAQgD,KAAKoohB,cAAciK,uBAAuB8kC,sBAAsBn7hB,EAAQhQ,EAAUhvB,IAE1FA,aAAiBgmf,GACbhjf,KAAKoohB,gBAAkBpohB,KAAKoohB,cAAc3iC,WAAazlf,KAAKoohB,cAAc1iC,WAC1E1lf,KAAKi3jB,0BAA0Bj6jB,EAAOg/B,GAGtCA,EAAOwpd,WAAWxof,GAItBS,EAAkBT,GAClBg/B,EAAOqrd,cAGM,SAAbr7d,EACAgQ,EAAO0S,KAAO1xC,EAEI,WAAbgvB,EACLgQ,EAAOuV,OAASv0C,EAEE,cAAbgvB,EACLgQ,EAAOsud,UAAYttf,EAED,eAAbgvB,EACLgQ,EAAO/O,WAAajwB,EAEF,aAAbgvB,EACLgQ,EAAOnP,SAAW7vB,EAEA,mBAAbgvB,EACLgQ,EAAOwud,eAAiBxtf,EAEN,sBAAbgvB,EACLgQ,EAAOqud,kBAAoBrtf,EAET,kBAAbgvB,EACLgQ,EAAOuud,cAAgBvtf,EAEL,cAAbgvB,EACLgQ,EAAOk5O,UAAYl4Q,EAED,cAAbgvB,IACLgQ,EAAOwtd,cAAgBxsf,IAM/B8jf,EAAOzlf,UAAUq5hB,cAAgB,SAAUh3B,EAAY1nf,EAAOD,GAC1D,IAAIqhjB,EAAiB,IAAItsU,GAAY4yQ,GACjC19f,KAAKoohB,gBACLpohB,KAAKoohB,cAAcysC,kBAAkB,iBACrC70jB,KAAKoohB,cAAciK,uBAAuBC,mBAAmB9thB,KAAK4yjB,IAEtEp3jB,KAAK+xhB,eAAe/xhB,KAAK4vE,WACzB8tb,EAAW1nf,MAAQA,EACnB0nf,EAAW3nf,OAASA,EAEpB/V,KAAKo6e,OAAOvpb,OAAOwmd,kBAAkB3Z,EAAW5vc,KAAK+0b,UAAW6a,EAAW5vc,KAAK8jc,aAAc,GAC9F5xf,KAAKyjjB,SAASzjjB,KAAK4vE,WAAW,GAC1B5vE,KAAKo6e,OAAOkV,MAAMnjB,oBAClBnse,KAAKo6e,OAAOkV,MAAMnjB,mBAAmBghE,qBAAqBzvC,IAOlE5c,EAAOzlf,UAAUioiB,oBAAsB,SAAU3igB,IACzC3gC,KAAKo6e,OAAOkV,MAAMzR,gBAAmB79e,KAAKo6e,OAAOkV,MAAM7U,mBAKtDh9e,EAAkBuC,KAAKo6e,OAAOxqa,UAAUgua,gBAAgBj9c,gBAAkB3gC,KAAKo6e,OAAOxqa,UAAUgua,gBAAgBj9c,gBAAkBA,EASnI3gC,KAAKsxhB,uBAAuB,gBAAiB3wf,GAAe,GAAO,GAR7C,SAAlBA,EACA3gC,KAAKsxhB,uBAAuB,gBAAiB,WAAW,GAAO,GAG/DtxhB,KAAKsxhB,uBAAuB,gBAAiB,QAAQ,GAAO,KAexExwC,EAAOzlf,UAAUi2hB,uBAAyB,SAAUtlgB,EAAUhvB,EAAOqiD,EAAQ6kf,GACzE,IAAI/te,EAAUnqC,EAAS,GAAGvB,cAAgBuB,EAAS3qB,MAAM,GACzDrB,KAAKo6e,OAAOkV,MAAM9jB,mBAAoB,EACtC,IAAI57Z,EAAY5vE,KAAKo6e,OAAOxqa,UAE5B,GADA5vE,KAAK0+a,YAAYvoX,IACbn2D,KAAKo6e,OAAOkV,MAAMzR,gBAAmB79e,KAAKo6e,OAAOkV,MAAM7U,iBAG3D,GAAiB,eAAbzud,IAC0C,IAAtC4jD,EAAUgua,gBAAgBsI,QAAiB7mc,EAC3Cr/C,KAAK4oiB,gBAAgB5riB,EAAQ,OAFrC,CAMA,GAAI4yE,EAAU0qK,QAAS,CACnBt6O,KAAK+xhB,eAAenid,GAChBvwB,GAAuB,eAAbrzB,IACVhvB,EAAQgD,KAAKq3jB,wBAAwBznf,EAAUryE,MAAMslf,UAAW7lf,IAEpE,IAAIo3iB,EAAOxke,EAAUryE,MAAMslf,UAAUgQ,cAAc7yf,KAAKo6e,QACxDp6e,KAAKs3jB,wBAAwBljB,EAAMpohB,EAAUhvB,EAAOqiD,GACpDr/C,KAAKu3jB,gBAAgBnjB,GAAM,QAI3Bp0iB,KAAK+xhB,eAAenid,GACpB5vE,KAAKw3jB,mCAAmCxriB,EAAUhvB,EAAOqiD,GAE7Dr/C,KAAKyjjB,SAAS7ze,KAOlBkxa,EAAOzlf,UAAUutiB,gBAAkB,SAAU6uB,GAEzC,IAKI1xE,EALA3L,EAASp6e,KAAKo6e,OAEdwD,GADa59e,KAAKo6e,OAAOxqa,UAAUryE,MAAMslf,UAAUjF,gBAAgBgG,WACjD5jf,KAAKo6e,OAAOxqa,UAAUryE,MAAMslf,UAAUjF,iBACxD/6Y,EAAOu3Y,EAAO4wB,YAAYptB,EAAgBgG,WAAWsC,QACzC9L,EAAOvpb,OAAO01b,aAAa1jZ,EAAM+6Y,EAAgBgG,WAAWmD,iBAGxEhB,EADA0xE,EACc75E,EAAgBgG,WAAWmD,gBAAkB,EAG7CnJ,EAAgBgG,WAAWmD,gBAAkB,EAG1Dtpf,EADe28e,EAAOvpb,OAAO01b,aAAa1jZ,EAAMkjZ,MAEjD/lf,KAAKqxhB,oBAAoBxub,EAAMkjZ,GAC/B3L,EAAOxqa,UAAUryE,MAAMu6hB,wBAAuB,GAC9C19C,EAAOxqa,UAAU/wD,IAAIi5gB,wBAAuB,GAC5C19C,EAAOxqa,UAAU8wc,wBASzB5/B,EAAOzlf,UAAUg2hB,oBAAsB,SAAUxub,EAAMkkZ,GACnC/mf,KAAKo6e,OAAOxqa,UAA5B,IACIg0a,EAAa,IAAI+C,IAChBlpf,EAAkBolG,IAASkkZ,GAAmB,GAAKA,EAAkB,IACtEnD,EAAWsC,OAASrjZ,EAAKqjZ,OACzBtC,EAAWmD,gBAAkBA,GAEjC/mf,KAAKsxhB,uBAAuB,aAAc1tC,GAAY,GAAO,IAMjE9C,EAAOzlf,UAAUm8jB,mCAAqC,SAAUxriB,EAAUhvB,EAAOqiD,GAC7E,IAAIuwB,EAAY5vE,KAAKo6e,OAAOxqa,UACX,eAAb5jD,GAA6BqzB,IAEzBriD,GADCS,EAAkBmyE,EAAUryE,QAAUqyE,EAAUryE,MAAMg7hB,cAAc3od,EAAU/wD,KACvE7e,KAAKq3jB,wBAAwBznf,EAAUryE,MAAMslf,UAAW7lf,GAGxDgD,KAAKq3jB,wBAAwBznf,EAAU/wD,IAAIgke,UAAW7lf,IAGtEgD,KAAK80jB,8BAA8B9oiB,EAAUhvB,EAAOqiD,IAExDyhc,EAAOzlf,UAAUg8jB,wBAA0B,SAAU/+C,EAAkBo/C,GACnE,IAAIC,EAAyBr/C,EAAiB16B,gBAAgBqL,WAC9D,GAAI0uE,EAAyB,EAAG,CAG5B,GAAID,EAAkB,GAAKC,EAAyBD,GAAmB,EACnE,OAAQC,EAGR,IAAI54B,GAAkB/+hB,KAAK43jB,iCAAiCD,GAAyBD,GACrF,OAAO34B,EAAiB24B,GAAoB,EAAI34B,EAAiBA,EAAiB24B,EAItF,OAAO13jB,KAAK43jB,gCAAgCD,EAAwBD,IAG5E52E,EAAOzlf,UAAUu8jB,gCAAkC,SAAU1jjB,EAAUwjjB,GACnE,IAAIjO,EAAWp9iB,KAAKE,IAAImrjB,GACxB,GAAiB,IAAbxjjB,GAA+B,IAAbu1iB,EAClB,OAAOiO,EAAkB,EAAIjO,EAAW,EAGxC,IAAIhse,EAAgC,IAAvBpxE,KAAKoxB,MAAMvpB,IAA2C,IAAvB7H,KAAKoxB,MAAMgshB,IAAoB,IAEvEoO,GADOxrjB,KAAKoxB,MAAMvpB,GAAYupE,GAAQpxE,KAAKoxB,MAAMgshB,GAC/BA,EAItB,OAHIiO,EAAkB,IAClBG,GAAapO,GAEToO,EAAY3jjB,GAAc,EAAIwjjB,EAAkBG,EAAY3jjB,GAG5E4se,EAAOzlf,UAAUy5jB,8BAAgC,SAAU9oiB,EAAUhvB,EAAOqiD,GAIxE,OAHI5hD,EAAkBuuB,KAClBA,EAAW,mBAEPA,GACJ,IAAK,eACDhsB,KAAK83jB,sBAAsB,eAAgB96jB,GAAO,GAClD,MACJ,IAAK,gBACDgD,KAAK83jB,sBAAsB,gBAAiB96jB,GAAO,GACnD,MACJ,IAAK,cACDgD,KAAK83jB,sBAAsB,cAAe96jB,GAAO,GACjD,MACJ,IAAK,aACDgD,KAAK83jB,sBAAsB,aAAc96jB,EAAOqiD,GAChD,MACJ,IAAK,kBACDr/C,KAAK83jB,sBAAsB,kBAAmB96jB,GAAO,GACrD,MACJ,IAAK,cACDgD,KAAK83jB,sBAAsB,cAAe96jB,GAAO,GACjD,MACJ,IAAK,kBACDgD,KAAK83jB,sBAAsB,kBAAmB96jB,GAAO,GACrD,MACJ,IAAK,gBACDgD,KAAK83jB,sBAAsB,gBAAiB96jB,GAAO,GACnD,MACJ,IAAK,aACDgD,KAAK83jB,sBAAsB,aAAc96jB,GAAO,GAChD,MACJ,IAAK,kBACDgD,KAAK83jB,2BAAsB38jB,EAAW6B,GAAO,GAC7C,MACJ,IAAK,YACDgD,KAAK83jB,sBAAsB,YAAa96jB,GAAO,GAC/C,MACJ,IAAK,uBAEDgD,KAAK83jB,2BAAsB38jB,EAAW6B,GAAO,KAYzD8jf,EAAOzlf,UAAUy8jB,sBAAwB,SAAU9riB,EAAUhvB,EAAOqiD,GAChE,IAAIuwB,EAAY5vE,KAAKo6e,OAAOxqa,UACxBk9M,EAAgBl9M,EAAUryE,MAC1B4rhB,EAAcv5c,EAAU/wD,IACvB+wD,EAAUqwd,YACXnzQ,EAAgBl9M,EAAU/wD,IAC1BsqgB,EAAcv5c,EAAUryE,OAG5ByC,KAAK+3jB,+BAA+BjrS,EAAeq8P,EAAan9f,EAAUhvB,EAAOqiD,IAGrFyhc,EAAOzlf,UAAU08jB,+BAAiC,SAAUx6jB,EAAOshB,EAAKmN,EAAUhvB,EAAOqiD,GACrF,IAAIuwB,EAAY5vE,KAAKo6e,OAAOxqa,UAC5B,IAAIryE,EAAMslf,UAAUuR,eAAmBv1e,EAAIgke,UAAUuR,eAC9C72f,EAAMslf,UAAUwR,iBAAmBx1e,EAAIgke,UAAUwR,iBACjDzkb,EAAU20b,eAAehngB,EAAMslf,UAAUwR,eAAgB92f,EAAOshB,GAWlE,CAED,IAAKphB,EAAkBT,KAAWgD,KAAK4vE,UAAU0qK,SAAwB,cAAbtuN,GAA4BhsB,KAAKg4jB,oBAAoBz6jB,EAAMslf,UAAWtlf,EAAOshB,EAAKmN,EAAUhvB,EAAOqiD,GAC3J,OAGAr/C,KAAKi4jB,gBAAgB16jB,EAAMslf,UAAWtlf,EAAOshB,EAAKmN,EAAUhvB,EAAOqiD,OAjBG,CAC1E,IAAI4jB,OAAO,EACX1lE,EAAMslf,UAAUwR,eAAeJ,WAAWpB,cAAc7yf,KAAKo6e,QACzDp6e,KAAKqujB,oBAAoBz+e,IACzB5vE,KAAKusjB,sBAAsBhvjB,GAAO,GAEtC0lE,EAAO1lE,EAAMslf,UAAUwR,eACvBr0f,KAAKk4jB,sBAAsBj1f,EAAM1lE,EAAOshB,EAAKmN,EAAUhvB,EAAOqiD,GAC9D,IAAI4gB,EAAQgD,EAAKgxb,WACjBj0f,KAAKo6e,OAAOvpb,OAAO0md,2BAA2Bt3c,EAAMhuD,MAAOguD,EAAMijb,gBAAiBjjb,GAAO,KAgBjG6gb,EAAOzlf,UAAUi8jB,wBAA0B,SAAUz0E,EAAW72d,EAAUhvB,EAAOqiD,GAC7E,IAAIrjB,EAAS6md,EAAUjF,gBAIvB,GAHIv+b,GAAuB,eAAbrzB,IACVhvB,EAAQg/B,EAAOitd,WAAajsf,GAEf,eAAbgvB,GAA6BhvB,aAAiB2pf,GAAa,CAC3D,IAAI/C,EAAa5mf,EACZ4mf,EAAWuB,SAAS,qBACrBvB,EAAWmD,gBAAkB/qd,EAAO4nd,WAAWmD,iBAoBvD,GAjBI/mf,KAAKoohB,gBAAkB3qhB,EAAkBuC,KAAKoohB,cAAciK,0BAC5Dr1hB,EAAQgD,KAAKoohB,cAAciK,uBAAuB8lC,wCAAwCn8hB,EAAQhQ,EAAUhvB,IAE5GA,aAAiB+lf,KACbtlf,EAAkBuuB,GACdhsB,KAAKoohB,gBAAkBpohB,KAAKoohB,cAAc3iC,WAAazlf,KAAKoohB,cAAc1iC,WAC1E1lf,KAAKo4jB,oBAAoBp7jB,EAAOg/B,GAGhCA,EAAOwpd,WAAWxof,GAGJ,eAAbgvB,IACLgQ,EAAO4nd,WAAa5mf,EAAM4mf,aAI9Bnmf,EAAkBT,GAGlB,OAFAg/B,EAAOqrd,mBACPrnf,KAAKo6e,OAAOvpb,OAAOwmd,kBAAkBr7e,EAAOipd,UAAW,EAAG,GAG9D,GAAiB,iBAAbj5d,EACAgQ,EAAOotd,aAAepsf,OAErB,GAAiB,kBAAbgvB,EACLgQ,EAAOmtd,cAAgBnsf,OAEtB,GAAiB,eAAbgvB,EACLgQ,EAAOitd,WAAajsf,OAEnB,GAAiB,oBAAbgvB,EACLgQ,EAAOqtd,gBAAkBrsf,OAExB,GAAiB,gBAAbgvB,EACLgQ,EAAOskN,YAActjP,OAEpB,GAAiB,gBAAbgvB,EACLgQ,EAAOktd,YAAclsf,OAEpB,GAAiB,oBAAbgvB,EACLgQ,EAAO4hN,gBAAkB5gP,OAExB,GAAiB,kBAAbgvB,EACLgQ,EAAO2E,cAAgB3jC,EACvBgD,KAAKo6e,OAAOvpb,OAAO60c,aAAc,OAEhC,GAAiB,cAAb15e,EACkB,qBACnBhvB,EAAQgD,KAAKo6e,OAAO72e,OAAOmgf,WAAW1mf,IAE1Cg/B,EAAOsrd,WAAWtqf,QAEjB,GAAiB,eAAbgvB,EASL,OARIhvB,aAAiB+lf,KACjB/if,KAAKq4jB,iCAAiCr8hB,EAAQh/B,GAC9CA,EAAQA,EAAM4mf,YAElB5nd,EAAO4nd,WAAW4B,WAAWxof,GAC7BgD,KAAKo6e,OAAOvpb,OAAOo6c,oBAAoBjve,EAAOipd,WAC9Cjlf,KAAKs4jB,mBAAmBt8hB,EAAOipd,UAAWjof,EAAOg/B,QACjDh8B,KAAKu3jB,gBAAgBv7hB,EAAOipd,WAAW,IAI/CnE,EAAOzlf,UAAU+8jB,oBAAsB,SAAU5pC,EAAc0oC,GAC3DA,EAAWnvE,sBAAwBymC,EAAazmC,sBAChDmvE,EAAWtzE,WAAa4qC,EAAa5qC,WACrCszE,EAAWvzE,UAAY6qC,EAAa7qC,WAExC7C,EAAOzlf,UAAUi9jB,mBAAqB,SAAUz1E,EAAWe,EAAY+oB,GAC/D/oB,aAAsB+C,IACtB3mf,KAEKu4jB,0BAA0B11E,EAAWe,IAGlD9C,EAAOzlf,UAAUk9jB,0BAA4B,SAAU11E,EAAWe,GAC9D,IAAI/gZ,EAAO7iG,KAAKo6e,OAAO4wB,YAAYpnB,EAAWsC,QAC1CsyE,OAAYr9jB,EACXsC,EAAkBolG,KACnB21d,EAAYx4jB,KAAKo6e,OAAOvpb,OAAO01b,aAAa1jZ,EAAM+gZ,EAAWmD,kBAE7DlE,aAAqBC,KAAoBrlf,EAAkB+6jB,KACvD/6jB,EAAkB+6jB,EAAU56E,mBAAqBngf,EAAkBolf,EAAUK,iBACjFljf,KAAKq4jB,iCAAiCx1E,EAAUjF,gBAAiB46E,EAAU56E,iBAEtEngf,EAAkBolG,KACvBggZ,EAAUjF,gBAAgBqL,WAAa,EACvCpG,EAAUjF,gBAAgBhgQ,gBAAkB,IASpDkjQ,EAAOzlf,UAAUg9jB,iCAAmC,SAAUI,EAAWC,GAChEj7jB,EAAkBi7jB,EAAUzvE,cAC7BwvE,EAAUxvE,WAAayvE,EAAUzvE,YAEhCxrf,EAAkBi7jB,EAAU96U,mBAC7B66U,EAAU76U,gBAAkB86U,EAAU96U,kBAM9CkjQ,EAAOzlf,UAAUoogB,uBAAyB,SAAU7zb,GAChD5vE,KAAKoohB,cAAcysC,kBAAkB,qBACrC70jB,KAAK24jB,+BAA+B/of,IAKxCkxa,EAAOzlf,UAAUs9jB,+BAAiC,SAAU/of,GACxD,IAAIiza,EAAYjza,EAAUryE,MAAMslf,UAC5B+1E,EAAgB54jB,KAAK64jB,yBAAyBh2E,GAC9C8pB,EAAa3sgB,KAAK84jB,mBAAmBj2E,EAAW+1E,EAAc7xE,gBAAiB6xE,EAAcG,aACjG/4jB,KAAKg5jB,aAAaJ,EAAcxE,YAAavxE,EAAW8pB,EAAYisD,EAAc7xE,gBAAiB6xE,EAAcG,aACjH/4jB,KAAKyjjB,SAAS7ze,GAAW,GACrB5vE,KAAKoohB,gBAAkB3qhB,EAAkBuC,KAAKoohB,cAAciK,yBAC5DryhB,KAAKoohB,cAAcmK,gBAEvBvyhB,KAAKo6e,OAAO8H,eAKhBpB,EAAOzlf,UAAUw9jB,yBAA2B,SAAUh2E,GAClD,IAAIuxE,OAAcj5jB,EACd4rf,EAAkB,EAClBgyE,EAAc,OACbt7jB,EAAkBolf,EAAUjF,kBACzBngf,EAAkBolf,EAAUjF,gBAAgBgG,cAChDwwE,EAAcp0jB,KAAKo6e,OAAO4wB,YAAYnoB,EAAUjF,gBAAgBgG,WAAWsC,QAC3Ea,EAAkBlE,EAAUjF,gBAAgBgG,WAAWmD,iBAE3D,IAAI3M,EAASp6e,KAAKo6e,OAClB,GAAwB,IAApB2M,IAA0Btpf,EAAkB22jB,KAC3C32jB,EAAkB28e,EAAOm0B,oBAAoB6lD,EAAYhuE,mBACtD3of,EAAkB28e,EAAOm0B,oBAAoB6lD,EAAYhuE,gBAAgBhna,OAAO2na,IAAmB,CACvG,IAAIuB,EAAYtof,KAAKo6e,OAAOvpb,OAAO01b,aAAa6tE,EAAartE,GACxDtpf,EAAkB6qf,KACnBywE,EAAczwE,EAAUgc,kBAGhC,OACI8vD,YAAaA,EACbrtE,gBAAiBA,EACjBgyE,YAAaA,IAMrBj4E,EAAOzlf,UAAU49jB,wBAA0B,SAAUrpf,EAAW5zC,GAC5D,IAAI6md,EAAYjza,EAAUryE,MAAMslf,UAC5B+1E,EAAgB54jB,KAAK64jB,yBAAyBh2E,GAClD7if,KAAKg5jB,aAAaJ,EAAcxE,YAAavxE,EAAW7md,EAAQ48hB,EAAc7xE,gBAAiB6xE,EAAcG,aAC7G/4jB,KAAKyjjB,SAAS7ze,GAAW,GACpBnyE,EAAkBuC,KAAKoohB,cAAciK,yBACtCryhB,KAAKoohB,cAAcmK,iBAG3BzxC,EAAOzlf,UAAU29jB,aAAe,SAAUn2d,EAAMmxZ,EAAOh4d,EAAQk9hB,EAAUC,GACrE,IAAI17jB,EAAkBu2f,GAAtB,CAGA,GAAIA,aAAiBlR,IACbjgZ,EAAKqjZ,SAAW8N,EAAMpW,gBAAgBgG,WAAWsC,QAC9CgzE,IAAallE,EAAMpW,gBAAgBgG,WAAWmD,gBAAiB,CAClE,IAAIqyE,EAAkBp5jB,KAAKoohB,cAAciK,uBACpC50hB,EAAkB27jB,KACnBp9hB,EAASo9hB,EAAgBC,0CAA0CrlE,EAAMpW,gBAAiB5hd,IAE9Fg4d,EAAMpW,gBAAgB4H,WAAWxpd,GACjCh8B,KAAKo6e,OAAOvpb,OAAOwmd,kBAAkBrjB,EAAO,EAAG,GAGvD,OAAOh0f,KAAKg5jB,aAAan2d,EAAMmxZ,EAAM1B,mBAAoBt2d,EAAQk9hB,EAAUC,KAE/Er4E,EAAOzlf,UAAUy9jB,mBAAqB,SAAUj2E,EAAWkD,EAAaozE,GACpE,IAAK17jB,EAAkBolf,EAAUsP,yBACzBtP,EAAUsP,kCAAkCrP,GAAiB,CAC7D,GAAKrlf,EAAkBolf,EAAUsP,uBAAuBvU,gBAAgBgG,cACO,IAAxEf,EAAUsP,uBAAuBvU,gBAAgBgG,WAAWsC,OAc/D,OAAOlmf,KAAK84jB,mBAAmBj2E,EAAUsP,uBAAwBpM,EAAaozE,GAb9E,IAAI7wE,EAAYtof,KAAKumf,aAAa1D,EAAUsP,wBAC5C,OAAoB,IAAhBpM,EACOlD,EAAUsP,uBAAuBvU,gBAEnCu7E,IAAa7wE,EAAUgc,kBACzBtkgB,KAAKs5jB,kBAAkBH,EAAU7wE,EAAUgc,kBACvCzhB,EAAUsP,uBAAuBvU,gBAGjC59e,KAAK84jB,mBAAmBj2E,EAAUsP,uBAAwBpM,EAAaozE,KAUlGr4E,EAAOzlf,UAAUi+jB,kBAAoB,SAAUH,EAAU/nC,GACrD,MAAkB,WAAb+nC,GAA0C,WAAjB/nC,GACL,WAAjBA,GAA0C,WAAb+nC,GAQzCr4E,EAAOzlf,UAAUqogB,sBAAwB,SAAU9zb,GAC/C5vE,KAAKoohB,cAAcysC,kBAAkB,oBACrC70jB,KAAKu5jB,cAAc3pf,IAKvBkxa,EAAOzlf,UAAUk+jB,cAAgB,SAAU3pf,GACvC,IAAIu7b,EAAmBnrgB,KAAKumf,aAAa32a,EAAUryE,MAAMslf,WACrDhgZ,EAAO,IAAIojZ,GACfpjZ,EAAKqjZ,OAASlmf,KAAKo6e,OAAO99N,MAAOt8Q,KAAKo6e,OAAO99N,MAAM7/Q,OAAS,GAAIypf,OAAS,EACzE,IAAIG,EAAe,IAAIse,GACvBte,EAAaD,eAAiBpmf,KAAKo6e,OAAO+F,cAAengf,KAAKo6e,OAAO+F,cAAc1jf,OAAS,GAAI2pf,eAAiB,EACjHvjZ,EAAKujZ,eAAiBC,EAAaD,eACnCpmf,KAAKo6e,OAAO+F,cAAc37e,KAAK6hf,GAC/Brmf,KAAKw5jB,iBAAiBnzE,EAAc8kB,EAAkBtoa,GACtD7iG,KAAKo6e,OAAO99N,MAAM93Q,KAAKq+F,GACvB7iG,KAAKy5jB,sBAAsB7pf,EAAWizB,EAAKqjZ,SAK/CpF,EAAOzlf,UAAUo+jB,sBAAwB,SAAU7pf,EAAWs2a,GAC1D,IAAI0yE,EAAgB54jB,KAAK64jB,yBAAyBjpf,EAAUryE,MAAMslf,WAClE7if,KAAK05jB,uBAAuBd,EAAcxE,YAAaxkf,EAAUryE,MAAMslf,UAAWqD,GAClFlmf,KAAKyjjB,SAAS7ze,GAAW,GACrB5vE,KAAKoohB,gBAAkB3qhB,EAAkBuC,KAAKoohB,cAAciK,yBAC5DryhB,KAAKoohB,cAAcmK,gBAEvBvyhB,KAAK2mjB,qBAAuB,EAC5B3mjB,KAAK0mjB,mBAAgBvrjB,EACrB6E,KAAKo6e,OAAO8H,eAEhBpB,EAAOzlf,UAAUq+jB,uBAAyB,SAAU72d,EAAMmxZ,EAAO9N,GAC7D,IAAIzof,EAAkBu2f,GAAtB,CAGA,GAAIA,aAAiBlR,IACbjgZ,EAAKqjZ,SAAW8N,EAAMpW,gBAAgBgG,WAAWsC,OAAQ,CACzD,IAAIkzE,EAAkBp5jB,KAAKoohB,cAAciK,uBACpC50hB,EAAkB27jB,KACnBlzE,EAASkzE,EAAgBO,yCAAyC3lE,EAAMpW,gBAAgBgG,WAAYsC,IAExG8N,EAAMpW,gBAAgBgG,WAAWsC,OAASA,EACtClmf,KAAK0mjB,gBAAkB1yD,EAAMpW,gBAAgBgG,WAAWmD,kBACxD/mf,KAAK2mjB,qBAAuB,EAC5B3mjB,KAAK0mjB,cAAgB1yD,EAAMpW,gBAAgBgG,WAAWmD,iBAE1DiN,EAAMpW,gBAAgBgG,WAAWmD,gBAAkB/mf,KAAK2mjB,oBACxD3mjB,KAAKo6e,OAAOvpb,OAAOwmd,kBAAkBrjB,EAAO,EAAG,GAGvD,OAAOh0f,KAAK05jB,uBAAuB72d,EAAMmxZ,EAAM1B,mBAAoBpM,KAEvEpF,EAAOzlf,UAAUm+jB,iBAAmB,SAAUnzE,EAAc8kB,EAAkBtoa,GAI1E,IAAK,IAHDuub,EAAejmB,EAAiB7G,iBAChCs1D,KACAnoC,EAAsBtmB,EAAiBlmB,UAClC9of,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAEnBsB,EADD6qf,EAAYmpC,EAAoBryc,OAAOjjF,KAEvCy9jB,EAAcp1jB,KAAK8jf,EAAUgc,kBAIhC,IADDu1D,GAA+D,IAAzCD,EAAcr7jB,QAAQ6yhB,GAAuB,EAAIwoC,EAAcr7jB,QAAQ6yhB,GACjG,IAASj1hB,EAAI,EAAGA,EAAIs1hB,EAAoBryc,OAAO3iF,OAAQN,IAAK,CACxD,IAAImsf,EAAY,IAAIuc,GAAWxe,GACrB,IAANlqf,EACAmsf,EAAUgc,iBAAmB8sB,GAGD,IAAxByoC,GAA6BA,EAAsBD,EAAcn9jB,OAAS,EAC1Eo9jB,IAGAA,EAAsB,EAE1BvxE,EAAUgc,iBAAmBs1D,EAAcC,IAE/CvxE,EAAU0c,aAAe,KAAO7ogB,EAAI,GAAK,IACzCmsf,EAAUtC,QAAU,EACpBsC,EAAUtK,gBAAgBwH,WAAW2lB,EAAiBntB,iBACtDsK,EAAU1K,gBAAgB4H,WAAW2lB,EAAiBvtB,iBACtD0K,EAAU2c,aAAe9ogB,EACzBkqf,EAAajna,OAAO56E,KAAK8jf,KAIjCxH,EAAOzlf,UAAU48jB,gBAAkB,SAAUp1E,EAAWtlf,EAAOshB,EAAKmN,EAAUhvB,EAAOqiD,GACjFr/C,KAAK+xhB,eAAe/xhB,KAAK4vE,WACzBiza,EAAYA,EAAUgQ,cAAc7yf,KAAKo6e,QAEzCp6e,KAAKs3jB,wBAAwBz0E,EAAW72d,EAAUhvB,EAAOqiD,GACzDr/C,KAAKu3jB,gBAAgB10E,GAAW,GAChC7if,KAAKg6d,eAAeh6d,KAAK4vE,WACrBiza,EAAUhqc,OAAOh6B,EAAIgke,YAGzB7if,KAAK85jB,8BAA8Bj3E,EAAWtlf,EAAOshB,EAAKmN,EAAUhvB,EAAOqiD,IAG/Eyhc,EAAOzlf,UAAU28jB,oBAAsB,SAAUn1E,EAAWtlf,EAAOshB,EAAKmN,EAAUhvB,EAAOqiD,GACrF,IAAI89c,EAAkBta,EAAU8P,kBAChC,IAAK9ze,EAAIgke,YAAcA,IAAyD,IAA5Csa,EAAgB5+f,QAAQsgB,EAAIgke,cACvC,cAAf7lf,EAAM0J,MAA2B1J,EAAU,gBAAayvf,IAAqC,cAAfzvf,EAAM0J,MAAuB,CAC7G,IAAI3J,EAAsB,cAAfC,EAAM0J,KAAwB1J,EAAQA,EAAMm2D,KAEvD,OADAnzD,KAAK2zjB,mCAAmC3niB,EAAUjvB,EAAKsiD,IAChD,EAGf,OAAO,GAIXyhc,EAAOzlf,UAAU68jB,sBAAwB,SAAUj1f,EAAM1lE,EAAOshB,EAAKmN,EAAUhvB,EAAOqiD,GAClF,IAAIuwB,EAAY5vE,KAAKo6e,OAAOxqa,UAC5B,GAAI/wD,EAAIgke,UAAUuR,cAAe,CAC7B,IAAI2lE,EAAgBnqf,EAAU0qd,mBAAmBr3d,EAAMpkD,EAAIgke,UAAUwR,gBACrE,GAAI0lE,EAAc9lE,WAAW9vf,SAAS0a,EAAIgke,UAAUwR,gBAAiB,CACjE,IAAI8D,EAAYvob,EAAU+vd,gBAAgB18d,EAAM82f,GAC5C3hE,EAAUxob,EAAU+vd,gBAAgB9ghB,EAAIgke,UAAUwR,eAAgB0lE,GAClEnqf,EAAUiwd,aAAak6B,EAAel7iB,EAAIgke,UAAUwR,gBAEhDzkb,EAAU20b,eAAew1D,EAAex8jB,EAAOshB,IAC/C7hB,EAAQgD,KAAKg6jB,yBAAyBD,EAAe/tiB,EAAUhvB,GAC/DgD,KAAKi6jB,4BAA4BF,EAAe/tiB,EAAUhvB,EAAOqiD,IAG7D84c,IAAc4hE,EACd/5jB,KAAKi4jB,gBAAgB16jB,EAAMslf,UAAWtlf,EAAOshB,EAAKmN,EAAUhvB,EAAOqiD,GAGnEr/C,KAAKk6jB,wBAAwB/hE,EAAUjE,SAAU32f,EAAOshB,EAAKmN,EAAUhvB,EAAOqiD,GAMtFr/C,KAAKm6jB,yBAAyBJ,EAAc9lE,WAAY8lE,EAAe3hE,EAASpse,EAAUhvB,EAAOqiD,QAIrGr/C,KAAKk6jB,wBAAwBH,EAAc7lE,SAAU32f,EAAOshB,EAAKmN,EAAUhvB,EAAOqiD,OAGrF,CACD,IAAI+6gB,EAAQxqf,EAAUowd,iBAAiB/8d,GACvCjjE,KAAKk6jB,wBAAwBE,EAAMlmE,SAAU32f,EAAOshB,EAAKmN,EAAUhvB,EAAOqiD,KAGlFyhc,EAAOzlf,UAAU4+jB,4BAA8B,SAAUh3f,EAAMj3C,EAAUhvB,EAAOqiD,GAC5E,IAAK,IAAIljD,EAAI,EAAGA,EAAI8mE,EAAKggb,aAAaxmf,OAAQN,IAAK,CAC/C,IAAI63f,EAAQ/wb,EAAKggb,aAAa9mf,GAC1B63f,aAAiBlR,GACjB9if,KAAKs3jB,wBAAwBtjE,EAAOhoe,EAAUhvB,EAAOqiD,GAGrDr/C,KAAKq6jB,kCAAkCrmE,EAAOhoe,EAAUhvB,EAAOqiD,KAI3Eyhc,EAAOzlf,UAAU2+jB,yBAA2B,SAAU/2f,EAAMj3C,EAAUhvB,GAClE,GAAqB,kBAAVA,EAAqB,CAE5BA,GADgBgD,KAAKo6e,OAAOxqa,UAAU4ud,kBAAkBv7d,GACrC26a,gBAAgBxwe,iBAAiB4e,GAExD,OAAOhvB,GAIX8jf,EAAOzlf,UAAU6+jB,wBAA0B,SAAUI,EAAM/8jB,EAAOshB,EAAKmN,EAAUhvB,EAAOqiD,GACpFriD,EAAQgD,KAAKg6jB,yBAAyBM,EAAKr3E,aAAa,GAAIj3d,EAAUhvB,GACtE,IAAK,IAAIb,EAAIm+jB,EAAK75R,SAAUtkS,EAAIm+jB,EAAKrmE,WAAWhR,aAAaxmf,OAAQN,IAAK,CAEtE,IAAK,IADDukE,EAAM45f,EAAKrmE,WAAWhR,aAAa9mf,GAC9BonB,EAAI,EAAGA,EAAIm9C,EAAIuib,aAAaxmf,OAAQ8mB,IACzCvjB,KAAKi6jB,4BAA4Bv5f,EAAIuib,aAAa1/d,GAAIyI,EAAUhvB,EAAOqiD,GAE3E,GAAIxgC,EAAIgke,UAAUuR,eAAiBp0f,KAAKo6e,OAAOxqa,UAAUi/d,YAAYnue,EAAK7hD,EAAIgke,UAAUwR,gBACpF,OAGRr0f,KAAK85jB,8BAA8BQ,EAAKrmE,WAAY12f,EAAOshB,EAAKmN,EAAUhvB,EAAOqiD,IAIrFyhc,EAAOzlf,UAAU8+jB,yBAA2B,SAAUl6f,EAAOk4b,EAAWC,EAASpse,EAAUhvB,EAAOqiD,GAC9F,IAAIuwB,EAAY5vE,KAAKo6e,OAAOxqa,UACxBznD,EAAaynD,EAAUg2d,YAAYztC,EAAUjE,SAAUiE,GACvDjge,EAAW/P,EAAagwe,EAAU7D,WAAWj/N,UAC7C84Q,EAAcv+d,EAAUg2d,YAAYxtC,EAAQlE,SAAUkE,GACtDg2C,EAAeD,EAAc/1C,EAAQ9D,WAAWj/N,UAChDy7R,EAAW9wjB,KAAK+wjB,2BAA2B5oiB,EAAY+P,EAAUi2gB,EAAaC,GAClFjmhB,EAAa2oiB,EAASvzjB,MACtB26B,EAAW44hB,EAASjyiB,IAGpB,IAAK,IAFDC,EAAQmhD,EAAMgjb,aAAa1kf,QAAQ65f,EAAQlE,UAC3CW,GAAY,EACP9jb,EAAI9Q,EAAMgjb,aAAa1kf,QAAQ45f,EAAUjE,UAAWnjb,GAAKjyD,EAAOiyD,IAErE,IAAK,IADDrQ,EAAMT,EAAMgjb,aAAalya,GACpBxtD,EAAI,EAAGA,EAAIm9C,EAAIuib,aAAaxmf,OAAQ8mB,IAAK,CAC9C,IAAI/W,EAAOojE,EAAUg2d,YAAYlle,EAAKA,EAAIuib,aAAa1/d,IACnDlX,KAAKoxB,MAAMtV,IAAe9b,KAAKoxB,MAAMjxB,IAASH,KAAKoxB,MAAMjxB,GAAQH,KAAKoxB,MAAMvF,KACvE28d,IACD73f,EAAQgD,KAAKg6jB,yBAAyBt5f,EAAIuib,aAAa1/d,GAAIyI,EAAUhvB,GACrE63f,GAAY,GAEhB70f,KAAKi6jB,4BAA4Bv5f,EAAIuib,aAAa1/d,GAAIyI,EAAUhvB,EAAOqiD,MAMvFyhc,EAAOzlf,UAAUk/jB,qBAAuB,SAAUt6f,EAAO1iE,EAAOshB,EAAKmN,EAAUhvB,EAAOqiD,GAClF4gB,EAAQA,EAAM4yb,cAAc7yf,KAAKo6e,QAEjC,IAAK,IADDxqa,EAAY5vE,KAAKo6e,OAAOxqa,UACnBmB,EAAI,EAAGA,EAAI9Q,EAAMgjb,aAAaxmf,OAAQs0E,IAAK,CAEhD,IAAK,IADDk9c,EAAWhud,EAAMgjb,aAAalya,GACzB5qD,EAAI,EAAGA,EAAI8ngB,EAAShrC,aAAaxmf,OAAQ0pB,IAC9CnmB,KAAKi6jB,4BAA4BhsC,EAAShrC,aAAa98d,GAAI6F,EAAUhvB,EAAOqiD,GAEhF,GAAIxgC,EAAIgke,UAAUuR,eAAiBxkb,EAAUi/d,YAAY5gB,EAAUpvgB,EAAIgke,UAAUwR,gBAE7E,YADAr0f,KAAKo6e,OAAOvpb,OAAO0md,2BAA2Bt3c,EAAMhuD,MAAOguD,EAAMijb,gBAAiBjjb,GAAO,GAIjGjgE,KAAKo6e,OAAOvpb,OAAO0md,2BAA2Bt3c,EAAMhuD,MAAOguD,EAAMijb,gBAAiBjjb,GAAO,GACzFjgE,KAAK85jB,8BAA8B75f,EAAO1iE,EAAOshB,EAAKmN,EAAUhvB,EAAOqiD,IAG3Eyhc,EAAOzlf,UAAUy+jB,8BAAgC,SAAU9lE,EAAOz2f,EAAOshB,EAAKmN,EAAUhvB,EAAOqiD,GAC3F,IAAI42gB,EAAmBjiE,EAAMrB,kBAC7BqB,EAAQiiE,EAAiBA,EAAiBx5jB,OAAS,GAE9CgB,EADLu2f,EAAQh0f,KAAKo6e,OAAOxqa,UAAUmpd,qBAAqB/kC,MAE3CA,aAAiBlR,GACjB9if,KAAKi4jB,gBAAgBjkE,EAAOz2f,EAAOshB,EAAKmN,EAAUhvB,EAAOqiD,GAGzDr/C,KAAKu6jB,qBAAqBvmE,EAAOz2f,EAAOshB,EAAKmN,EAAUhvB,EAAOqiD,KAI1Eyhc,EAAOzlf,UAAUg/jB,kCAAoC,SAAUp6f,EAAOj0C,EAAUhvB,EAAOqiD,GACnF,IAAK,IAAItyC,EAAI,EAAGA,EAAIkzD,EAAMgjb,aAAaxmf,OAAQsQ,IAE3C,IAAK,IADD2zD,EAAMT,EAAMgjb,aAAal2e,GACpBC,EAAI,EAAGA,EAAI0zD,EAAIuib,aAAaxmf,OAAQuQ,IACzChN,KAAKi6jB,4BAA4Bv5f,EAAIuib,aAAaj2e,GAAIgf,EAAUhvB,EAAOqiD,IAYnFyhc,EAAOzlf,UAAU+3hB,qBAAuB,SAAUpngB,EAAUhvB,GACxD,GAAKS,EAAkBuuB,GAKnBhsB,KAAK0+a,YAAY,qBALa,CAC9B,IAAIvoX,EAAUnqC,EAAS,GAAGvB,cAAgBuB,EAAS3qB,MAAM,GACzDrB,KAAK0+a,YAAYvoX,GAKrBn2D,KAAKw6jB,oBAAoBxuiB,EAAUhvB,IASvC8jf,EAAOzlf,UAAUm/jB,oBAAsB,SAAUxuiB,EAAUhvB,GACvD,IAAI4yE,EAAY5vE,KAAKo6e,OAAOxqa,UAC5BA,EAAU0/a,MAAM9jB,mBAAoB,EACpC,IAAI1+M,EAAgBl9M,EAAUryE,MAC1B4rhB,EAAcv5c,EAAU/wD,IACvB+wD,EAAUqwd,YACXnzQ,EAAgBl9M,EAAU/wD,IAC1BsqgB,EAAcv5c,EAAUryE,OAE5B,IAAI61iB,EACAC,EACJrziB,KAAKo6e,OAAOymC,eAGZ,IAAK,IAFD45C,EAAoB3tS,EAAc+1N,UAAUK,gBAAgBjxe,MAC5DyojB,EAAkBvxC,EAAYtmC,UAAUK,gBAAgBjxe,MACnD9V,EAAI,EAAGA,EAAI6D,KAAKo6e,OAAOlvQ,MAAMzuO,OAAQN,IAC1C,GAAI6D,KAAKo6e,OAAOlvQ,MAAM/uO,GAAGu1f,YAAY,GAAGz/e,QAAUwojB,EAAmB,CACjErnB,EAAiBj3iB,EACjB,MAGR,IAASA,EAAIi3iB,EAAgBj3iB,EAAI6D,KAAKo6e,OAAOlvQ,MAAMzuO,OAAQN,IAAK,CAC5D,IAAIwsf,EAAa3of,KAAKo6e,OAAOlvQ,MAAM/uO,GAAGu1f,YAAY,GAElD,GADA2hD,EAAel3iB,EACVwsf,EAAW12e,QAAUwojB,KAGhB9xE,EAAW12e,OAASwojB,GAAsB9xE,EAAW12e,OAASyojB,GAAnE,CAIDrnB,EAAel3iB,EAAI,EACnB,OAOH,IAFDkjD,GAAS,EACTptC,EAAQ,EACZ,IAAS9V,EAAIi3iB,EAAgBj3iB,GAAKk3iB,EAAcl3iB,IACxC8V,IAAUjS,KAAKo6e,OAAOlvQ,MAAM/uO,GAAGu1f,YAAY,GAAGz/e,OAAUotC,IACxDA,GAAS,GAEbr/C,KAAK26jB,6BAA6B36jB,KAAKo6e,OAAOlvQ,MAAM/uO,GAAGu1f,YAAY,GAAG/O,cAAe32d,EAAUhvB,EAAOqiD,GACtGptC,EAAQjS,KAAKo6e,OAAOlvQ,MAAM/uO,GAAGu1f,YAAY,GAAGz/e,MAC5CotC,GAAS,EAEbr/C,KAAKmyhB,sBACLnyhB,KAAKk9e,qBAST4D,EAAOzlf,UAAUu4hB,mBAAqB,SAAU5ngB,EAAUhvB,GACtD,IAAIm5D,EAASn2D,KAAK46jB,qBAAqB5uiB,GACvChsB,KAAKo6e,OAAOkV,MAAM9jB,mBAAoB,EACtC,IAAI57Z,EAAY5vE,KAAKo6e,OAAOxqa,UACxB3P,EAAQ2P,EAAUryE,MAAMslf,UAAUwR,eAAeJ,WACrDh0b,EAAQA,EAAM4yb,cAAc7yf,KAAKo6e,QAC7Bxqa,EAAU0qK,SACVt6O,KAAK0+a,YAAYvoX,GACjBn2D,KAAK66jB,wBAAwBjrf,EAAW5jD,EAAUhvB,EAAOijE,IAGzDjgE,KAAK86jB,2BAA2B96jB,KAAK4vE,UAAWzZ,EAAQn5D,GAE5DijE,EAAMm2b,gBACNp2f,KAAK4vE,UAAU0/a,MAAM7jB,iBAAkB,EACvCzre,KAAKo6e,OAAOvpb,OAAO2md,cAAcv3c,GACjCjgE,KAAKyjjB,SAAS7ze,GAAW,IAE7Bkxa,EAAOzlf,UAAUu/jB,qBAAuB,SAAU5uiB,GAC9C,OAAQA,GACJ,IAAK,iBACD,MAAO,iBACX,IAAK,aACD,MAAO,kBACX,IAAK,aACD,MAAO,wBACX,IAAK,cACD,MAAO,yBACX,IAAK,eACD,MAAO,0BACX,IAAK,YACD,MAAO,uBACX,IAAK,iBACD,MAAO,sBACX,IAAK,qBACD,MAAO,0BACX,IAAK,UACD,MAAO,UACX,QACI,MAAO,uBAUnB80d,EAAOzlf,UAAUi5hB,sBAAwB,SAAUtogB,EAAUhvB,GACzD,IAAIm5D,EAASn2D,KAAK+6jB,aAAa/uiB,GAC/BhsB,KAAKo6e,OAAOkV,MAAM9jB,mBAAoB,EACtC,IAAI57Z,EAAY5vE,KAAKo6e,OAAOxqa,UAC5B,GAAIA,EAAU0qK,QAAS,CACnBt6O,KAAK0+a,YAAYvoX,GACLyZ,EAAUryE,MAAMslf,UAAUwR,eAAeH,SAASD,WAC9Dj0f,KAAKg7jB,sBAAsBprf,EAAW5jD,EAAUhvB,EAAO4yE,EAAUryE,MAAMslf,UAAUwR,eAAeH,eAGhGl0f,KAAK86jB,2BAA2B96jB,KAAK4vE,UAAWzZ,EAAQn5D,GAE5DgD,KAAKyjjB,SAAS7ze,GAAW,IAE7Bkxa,EAAOzlf,UAAU0/jB,aAAe,SAAU/uiB,GACtC,OAAQA,GACJ,IAAK,SACD,MAAO,YACX,IAAK,aACD,MAAO,gBACX,IAAK,WACD,MAAO,YACX,QACI,MAAO,0BASnB80d,EAAOzlf,UAAU04hB,uBAAyB,SAAU/ngB,EAAUhvB,GAC1D,IAAIm5D,EAASn2D,KAAKi7jB,mBAAmBjviB,GACrChsB,KAAKo6e,OAAOkV,MAAM9jB,mBAAoB,EACtC,IAAI57Z,EAAY5vE,KAAKo6e,OAAOxqa,UACxB3P,EAAQ2P,EAAUryE,MAAMslf,UAAUwR,eAAeJ,WACrDh0b,EAAQA,EAAM4yb,cAAc7yf,KAAKo6e,QAC7Bxqa,EAAU0qK,SACVt6O,KAAK0+a,YAAYvoX,GACjBn2D,KAAKk7jB,uBAAuBtrf,EAAW5jD,EAAUhvB,EAAO4yE,EAAUryE,MAAMslf,UAAUwR,eAAeC,YACjGr0b,EAAMm2b,gBACNp2f,KAAK4vE,UAAU0/a,MAAM7jB,iBAAkB,EACvCzre,KAAKo6e,OAAOvpb,OAAO2md,cAAcv3c,IAGjCjgE,KAAK86jB,2BAA2B96jB,KAAK4vE,UAAWzZ,EAAQn5D,GAE5DgD,KAAKyjjB,SAAS7ze,GAAW,IAE7Bkxa,EAAOzlf,UAAU4/jB,mBAAqB,SAAUjviB,GAC5C,OAAQA,GACJ,IAAK,oBACD,MAAO,+BACX,IAAK,aACD,MAAO,iBACX,IAAK,cACD,MAAO,kBACX,IAAK,eACD,MAAO,mBACX,IAAK,YACD,MAAO,gBACX,IAAK,iBACD,MAAO,qBACX,IAAK,UACD,MAAO,UACX,QACI,MAAO,2BAGnB80d,EAAOzlf,UAAUs/jB,6BAA+B,SAAUh4E,EAAe32d,EAAUhvB,EAAOqiD,GACtEr/C,KAAKo6e,OAAOxqa,UACxBvwB,GAAUr/C,KAAKoohB,gBAAkB3qhB,EAAkBuC,KAAKoohB,cAAciK,0BACtEr1hB,EAAQgD,KAAKoohB,cAAciK,uBAAuB8oC,gCAAgCx4E,EAAe32d,EAAUhvB,IAE3GS,EAAkBT,KAGlBA,aAAiB4lf,GACbnlf,EAAkBuuB,IAClB22d,EAAc6C,WAAWxof,EAAOgD,KAAKoohB,eAI5B,eAAbp8f,EACA22d,EAAcrjQ,WAAatiP,EAET,cAAbgvB,EACL22d,EAAcjnN,UAAY1+R,EAER,eAAbgvB,EACL22d,EAAcz3P,WAAaluP,EAET,gBAAbgvB,EACL22d,EAAcv3P,YAAcpuP,EAEV,cAAbgvB,EACL22d,EAAcx3P,UAAYnuP,EAER,iBAAbgvB,EACL22d,EAAct3P,aAAeruP,EAEX,uBAAbgvB,EACL22d,EAAci6B,mBAAqB5/gB,EAEjB,6BAAbgvB,EACL22d,EAAck6B,yBAA2B7/gB,EAEvB,mBAAbgvB,EACL22d,EAAcomC,eAAiB/rhB,EAEb,mBAAbgvB,IACL22d,EAAcsrB,eAAiBjxgB,KAMvC8jf,EAAOzlf,UAAU82hB,oBAAsB,WACnC,IAAIrlQ,EAAgB9sR,KAAKo6e,OAAOxqa,UAAUryE,MACtC4rhB,EAAcnphB,KAAKo6e,OAAOxqa,UAAU/wD,IACpCiuQ,EAAc0rQ,aAAarP,KAC3Br8P,EAAgB9sR,KAAKo6e,OAAOxqa,UAAU/wD,IACtCsqgB,EAAcnphB,KAAKo6e,OAAOxqa,UAAUryE,OAExC,IAAI69jB,EAAYp7jB,KAAK2ojB,iBAAiB77R,GAClCuuS,EAAUr7jB,KAAK2ojB,iBAAiB77R,GAChCpnQ,EAAa1lB,KAAKszf,qBAAqB8nE,EAAUv4E,UAAWu4E,EAAUzvjB,OAAOuB,YAC7E0Y,EAAW5lB,KAAKszf,qBAAqB+nE,EAAQx4E,UAAWw4E,EAAQ1vjB,OAAOuB,YAC3ElN,KAAKo6e,OAAOk0B,cAAct+c,QAE1B,IAAIg2L,EAAWhmP,KAAKs7jB,iBACpBt7jB,KAAKo6e,OAAOymC,eACZ7ghB,KAAKo6e,OAAOvpb,OAAOm1c,YAAYhgR,GAC/BhmP,KAAKo6e,OAAOkV,MAAM9jB,mBAAoB,EACtCxre,KAAKg4hB,2BAA2BlrQ,EAAepnQ,GAC/C1lB,KAAKg4hB,2BAA2B7O,EAAavjgB,GAC7C5lB,KAAKo6e,OAAOxqa,UAAUy5d,eAAev8Q,EAAeq8P,GACpDnphB,KAAKyjjB,SAASzjjB,KAAKo6e,OAAOxqa,YAE9Bkxa,EAAOzlf,UAAUigkB,eAAiB,WAC9B,IAAIt1U,KACAu1U,EAAcv7jB,KAAKo6e,OAAOlvQ,MAAM,GAAGwmR,YAAY,GACnD,GACI6pE,EAAcv7jB,KAAKw7jB,oBAAoBD,EAAav1U,SAC/Cu1U,GACT,OAAOv1U,GAEX86P,EAAOzlf,UAAUmgkB,oBAAsB,SAAU7yE,EAAY3iQ,GACzD,IAAIu0R,EAAqB5xB,EACrB56d,EAAO,IAAI20d,GACf30d,EAAK40d,cAAgBgG,EAAWhG,cAChC50d,EAAK9b,MAAQsogB,EAAmBtogB,MAChC,EAAG,CACCsogB,EAAqB5xB,EACjBA,EAAW7gX,WACX6gX,EAAW7gX,UAAU+qX,cAAc7yf,KAAKo6e,QAE5CuO,EAAaA,EAAW2J,mBACxB,IAAK,IAAI/ue,EAAI,EAAGA,EAAIg3f,EAAmBt3B,aAAaxmf,OAAQ8mB,IAAK,CAC7D,IAAIywe,EAAQumB,EAAmBt3B,aAAa1/d,GACxCywe,aAAiBjB,GACjB/yf,KAAKo6e,OAAOvpb,OAAOw2c,iBAAiBrT,GAAO,GAAM,IAGjDA,EAAMjnf,EAAI,EACVinf,EAAMhnf,EAAI,EACVgnf,EAAMh+e,MAAQ,EACdg+e,EAAMj+e,OAAS,GAEnBgY,EAAKk1d,aAAaz+e,KAAKwvf,GACvBumB,EAAmBt3B,aAAa56d,OAAO9E,EAAG,GAC1CA,IACAywe,EAAM9Q,gBAAkBn1d,EAE5B/tB,KAAKo6e,OAAOlvQ,MAAM7iN,OAAOkyf,EAAmBtqX,KAAKh+I,MAAO,SACnD02e,GAAc4xB,EAAmB1he,OAAO8vc,IAEjD,OADA3iQ,EAASxhP,KAAKupB,GACP46d,GAEX7H,EAAOzlf,UAAUy/jB,2BAA6B,SAAUlrf,EAAWzZ,EAAQn5D,GACvE,OAAQm5D,GACJ,IAAK,iBACDn2D,KAAKoohB,cAAcysC,kBAAkB,kBACrC70jB,KAAKy7jB,kBAAkB7rf,EAAW,iBAAkB5yE,GACpD,MACJ,IAAK,kBACDgD,KAAKoohB,cAAcysC,kBAAkB,mBACrC70jB,KAAKy7jB,kBAAkB7rf,EAAW,aAAc5yE,GAChD,MACJ,IAAK,qBACDgD,KAAKoohB,cAAcysC,kBAAkB,sBACrC70jB,KAAKy7jB,kBAAkB7rf,EAAW,cAAe5yE,GACjD,MACJ,IAAK,wBACDgD,KAAKoohB,cAAcysC,kBAAkB,yBACrC70jB,KAAKy7jB,kBAAkB7rf,EAAW,aAAc5yE,GAChD,MACJ,IAAK,yBACDgD,KAAKoohB,cAAcysC,kBAAkB,0BACrC70jB,KAAKy7jB,kBAAkB7rf,EAAW,cAAe5yE,GACjD,MACJ,IAAK,uBACDgD,KAAKoohB,cAAcysC,kBAAkB,wBACrC70jB,KAAKy7jB,kBAAkB7rf,EAAW,YAAa5yE,GAC/C,MACJ,IAAK,sBACDgD,KAAKoohB,cAAcysC,kBAAkB,uBACrC70jB,KAAKy7jB,kBAAkB7rf,EAAW,iBAAkB5yE,GACpD,MACJ,IAAK,0BACDgD,KAAKoohB,cAAcysC,kBAAkB,2BACrC70jB,KAAKy7jB,kBAAkB7rf,EAAW,qBAAsB5yE,GACxD,MACJ,IAAK,0BACDgD,KAAKoohB,cAAcysC,kBAAkB,2BACrC70jB,KAAKy7jB,kBAAkB7rf,EAAW,eAAgB5yE,GAClD,MACJ,IAAK,+BACDgD,KAAKoohB,cAAcysC,kBAAkB,gCACrC70jB,KAAK07jB,iBAAiB9rf,EAAW,oBAAqB5yE,GACtD,MACJ,IAAK,iBACDgD,KAAKoohB,cAAcysC,kBAAkB,kBACrC70jB,KAAK07jB,iBAAiB9rf,EAAW,aAAc5yE,GAC/C,MACJ,IAAK,kBACDgD,KAAKoohB,cAAcysC,kBAAkB,mBACrC70jB,KAAK07jB,iBAAiB9rf,EAAW,cAAe5yE,GAChD,MACJ,IAAK,gBACDgD,KAAKoohB,cAAcysC,kBAAkB,iBACrC70jB,KAAK07jB,iBAAiB9rf,EAAW,YAAa5yE,GAC9C,MACJ,IAAK,mBACDgD,KAAKoohB,cAAcysC,kBAAkB,oBACrC70jB,KAAK07jB,iBAAiB9rf,EAAW,eAAgB5yE,GACjD,MACJ,IAAK,qBACDgD,KAAKoohB,cAAcysC,kBAAkB,sBACrC70jB,KAAK07jB,iBAAiB9rf,EAAW,iBAAkB5yE,GACnD,MACJ,IAAK,yBACDgD,KAAKoohB,cAAcysC,kBAAkB,0BACrC70jB,KAAK07jB,iBAAiB9rf,EAAW,qBAAsB5yE,GACvD,MACJ,IAAK,UACDgD,KAAKoohB,cAAcysC,kBAAkB,WACrC70jB,KAAK07jB,iBAAiB9rf,EAAW,UAAW5yE,GAC5C,MACJ,IAAK,YACDgD,KAAKoohB,cAAcysC,kBAAkB,aACrC70jB,KAAK27jB,gBAAgB/rf,EAAW,SAAU5yE,GAC1C,MACJ,IAAK,gBACDgD,KAAKoohB,cAAcysC,kBAAkB,iBACrC70jB,KAAK27jB,gBAAgB/rf,EAAW,aAAc5yE,GAC9C,MACJ,IAAK,YACDgD,KAAKoohB,cAAcysC,kBAAkB,aACrC70jB,KAAK27jB,gBAAgB/rf,EAAW,WAAY5yE,GAC5C,MACJ,IAAK,wBACDgD,KAAKoohB,cAAcysC,kBAAkB,yBACrC70jB,KAAK27jB,gBAAgB/rf,EAAW,wBAAyB5yE,KAarE8jf,EAAOzlf,UAAUogkB,kBAAoB,SAAU7rf,EAAW5jD,EAAUhvB,GAChE,IAAI4+jB,EAAqBhsf,EAAUryE,MACZqyE,EAAU/wD,IAC5B+wD,EAAUqwd,YACX27B,EAAqBhsf,EAAU/wD,IACZ+wD,EAAUryE,OAEjCyC,KAAKk0jB,oBAAoBtkf,EAAWgsf,GAEpC57jB,KAAK66jB,wBAAwBjrf,EAAW5jD,EAAUhvB,EAAO4+jB,EAAmB/4E,UAAUwR,eAAeJ,aAUzGnT,EAAOzlf,UAAUqgkB,iBAAmB,SAAU9rf,EAAW5jD,EAAUhvB,GAC/D4yE,EAAU0/a,MAAM9jB,mBAAoB,EACpC,IAAIqwF,EAAmBjsf,EAAUryE,MACZqyE,EAAU/wD,IAC1B+wD,EAAUqwd,YACX47B,EAAmBjsf,EAAU/wD,IACZ+wD,EAAUryE,OAE/ByC,KAAKk0jB,oBAAoBtkf,EAAWisf,GACpC77jB,KAAK87jB,oBAAoBlsf,EAAW5jD,EAAUhvB,IAUlD8jf,EAAOzlf,UAAUsgkB,gBAAkB,SAAU/rf,EAAW5jD,EAAUhvB,GAC9D,IAAI++jB,EAAmBnsf,EAAUryE,MAC7By+jB,EAAiBpsf,EAAU/wD,IAC1B+wD,EAAUqwd,YACX87B,EAAmBnsf,EAAU/wD,IAC7Bm9iB,EAAiBpsf,EAAUryE,OAE/ByC,KAAKk0jB,oBAAoBtkf,EAAWmsf,GAEpC/7jB,KAAKi8jB,eAAeF,EAAiBl5E,UAAUwR,eAAeH,SAAU6nE,EAAkBC,EAAgBhwiB,EAAUhvB,IAExH8jf,EAAOzlf,UAAU64jB,oBAAsB,SAAUtkf,EAAW17D,GACpDlU,KAAKo6e,OAAOkV,MAAM3U,sBAAwBl9e,EAAkBuC,KAAKoohB,cAAciK,0BAC1E50hB,EAAkByW,GAKdzW,EAAkBuC,KAAKoohB,cAAciK,uBAAuBo2B,kBACjEzojB,KAAKoohB,cAAciK,uBAAuBo2B,eAAiB74e,EAAUryE,MAAMg6hB,gCALvE95hB,EAAkBuC,KAAKoohB,cAAciK,uBAAuBo2B,kBAC5DzojB,KAAKoohB,cAAciK,uBAAuBo2B,eAAiBv0iB,EAASqjhB,kCAQpFz2C,EAAOzlf,UAAU84jB,0BAA4B,SAAUtxE,EAAWjza,EAAWryE,EAAOshB,GAEhF,GADA+wD,EAAU0/a,MAAM7jB,iBAAkB,EAC9Blue,EAAMslf,UAAUuR,cAAe,CAE/B,IADA,IAAIn0b,EAAQ1iE,EAAMslf,UAAUwR,eAAeJ,WACpCh0b,EAAMm0b,eACTn0b,EAAQA,EAAMo0b,eAAeJ,WAEjCj0f,KAAKk8jB,yBAAyBj8f,EAAO2P,EAAWryE,EAAOshB,QAGvD7e,KAAKm8jB,kBAAkBt5E,EAAWjza,EAAWryE,EAAOshB,IAG5Diie,EAAOzlf,UAAU6gkB,yBAA2B,SAAUj8f,EAAO2P,EAAWryE,EAAOshB,GAC3E,IAAIu9iB,GAAU,EAGd,GAFAp8jB,KAAKo6e,OAAOvpb,OAAO0md,2BAA2Bt3c,EAAMhuD,MAAOguD,EAAMijb,gBAAiBjjb,GAAO,IAEpFxiE,EAAkBohB,EAAIgke,UAAUwR,iBAAmBp0b,EAAM97D,SAAS0a,EAAIgke,UAAUwR,gBACjF,OAAO,EAEX,IAAIL,EAAQpkb,EAAUmpd,qBAAqB94d,GAK3C,OAHKxiE,EAAkBu2f,KACnBooE,EAAUp8jB,KAAKq8jB,yBAAyBroE,EAAOpkb,EAAWryE,EAAOshB,IAE9Du9iB,GAEXt7E,EAAOzlf,UAAU8gkB,kBAAoB,SAAUt5E,EAAWjza,EAAWryE,EAAOshB,GACxE,GAAIthB,EAAMslf,YAAcA,EAAW,CACbtlf,EAAMoO,OACTikE,EAAU+nd,mBAAmB90C,GAD5C,IAEI+R,EAAgB,EAChB3if,EAAQ,EACR4nhB,EAAYh3C,EAAU8R,UAAUp3f,EAAMoO,OAAQipf,GAC9CxvW,EAASy0Y,EAAU74hB,QACvB4zf,EAAgBilC,EAAU5nhB,MACrBxU,EAAkB2nJ,KACfwvW,IAAkBxvW,EAAO3oJ,QAAWgB,EAAkB2nJ,EAAOusK,YAC7DvsK,EAASA,EAAOusK,UAEpB1/S,EAAQmzI,EAAOt3F,KAAK1zC,SAAS7b,QAAQ6mJ,IAEzC,IAAI+rH,EAAY,EACZ5zQ,EAAMs5gB,cAAch0B,YAAcA,IAClC1xO,EAAY0xO,EAAUI,aAAa1kf,QAAQhB,EAAMs5gB,eACjD5kgB,EAAQ1U,EAAMs5gB,cAAcz8f,SAAS7b,QAAQ6mJ,IAG7CA,aAAkBovW,KAAmBpvW,EAAOt3F,MAAQ77C,EAAQ,EAC5DjS,KAAKo6e,OAAOvpb,OAAOwmd,kBAAkBx0B,EAAW1xO,EAAWl/P,EAAQ,GAGnEjS,KAAKo6e,OAAOvpb,OAAOwmd,kBAAkBx0B,EAAW1xO,EAAWl/P,QAI/DjS,KAAKo6e,OAAOvpb,OAAOwmd,kBAAkBx0B,EAAW,EAAG,GAGvD,GAAIhke,EAAIgke,YAAcA,EAClB,OAAO,EAGX,IAAImR,EAAQpkb,EAAUmpd,qBAAqBl2C,GAC3C,OAAKplf,EAAkBu2f,IACZh0f,KAAKq8jB,yBAAyBroE,EAAOpkb,EAAWryE,EAAOshB,IAKtEiie,EAAOzlf,UAAUghkB,yBAA2B,SAAUroE,EAAOpkb,EAAWryE,EAAOshB,GAC3E,OAAIm1e,aAAiBlR,GACV9if,KAAKm8jB,kBAAkBnoE,EAAOpkb,EAAWryE,EAAOshB,QAGvD,GAORiie,EAAOzlf,UAAUk8jB,gBAAkB,SAAUvjE,EAAOmkB,GAChD,IAAIzlQ,OAAUv3Q,EACd,GAAI64f,EAAM9Q,2BAA2BkQ,GAAgB,EACjD1gP,EAAUshP,EAAM9Q,iBACID,aAAa1kf,QAAQy1f,IACpCv2f,EAAkBuC,KAAKo6e,OAAOkV,QAC5Btvf,KAAKo6e,OAAOkV,MAAM7jB,iBAErBzre,KAAKo6e,OAAOvpb,OAAO0md,2BAA2BvjB,EAAM/hf,MAAOygQ,EAASshP,GAAO,QAG9E,GAAIA,EAAM9Q,2BAA2B6O,GAAiB,CACvD,IAAI9ub,EAAO+wb,EAAM9Q,gBACjBjgb,EAAOjjE,KAAKo6e,OAAOxqa,UAAUowd,iBAAiB/8d,IACzCxlE,EAAkBuC,KAAKo6e,OAAOkV,QAC5Btvf,KAAKo6e,OAAOkV,MAAM7jB,iBACrBzre,KAAKo6e,OAAOvpb,OAAO2md,cAAcxjB,KAO7ClT,EAAOzlf,UAAUwtjB,uBAAyB,SAAUj5e,GAChD,OAAO5vE,KAAK0tjB,8BAA8B99e,EAAWA,EAAUryE,MAAOqyE,EAAU/wD,MAEpFiie,EAAOzlf,UAAUqyjB,8BAAgC,SAAU99e,EAAWk9M,EAAeq8P,GACjF,IAAIwgB,EAAW78Q,EACX88Q,EAASzgB,EAMb,GALKr8P,EAAcyrQ,cAAcpP,KAC7BwgB,EAAWxgB,EACXygB,EAAS98Q,GAGT68Q,EAAS9mD,YAAc+mD,EAAO/mD,WAAa8mD,EAAS9mD,UAAUI,aAAa1kf,QAAQoriB,EAAS9yB,iBAAmB8yB,EAAS9mD,UAAUI,aAAaxmf,OAAS,GACxJktiB,EAASh+hB,SAAWikE,EAAU+nd,mBAAmBgS,EAAS9mD,YAAc8mD,EAASh+hB,OAAS,IAAMi+hB,EAAOj+hB,OAGvG,OAFAikE,EAAU0/a,MAAM9jB,mBAAoB,EACpC57Z,EAAU62d,cAAckD,GAAU,IAC3B,EAEX,IAAI2O,EAAgBt4iB,KAAK2ojB,iBAAiBhf,GAC1C/5d,EAAUg5e,aAAe5ojB,KAAKszf,qBAAqBglD,EAAcz1D,UAAWy1D,EAAc3siB,OAAOuB,YACjG,IAAIw7iB,EAAY1ojB,KAAKs8jB,sBAAsB1yB,EAAO/mD,UAAWjza,EAAW+5d,EAAUC,GAC9EtrK,EAAe,IAAI84J,GAAaxnd,EAAU0/a,OAG9C,OAFAtvf,KAAKg4hB,2BAA2B15J,EAAc1uT,EAAUg5e,cACxDh5e,EAAU62d,cAAcnoK,GAAc,GAC/BoqL,GAEX5nE,EAAOzlf,UAAUihkB,sBAAwB,SAAUz5E,EAAWjza,EAAWryE,EAAOshB,GAE5E,QAAIA,EAAIgke,UAAUuR,eACXv1e,EAAIgke,YAAcjza,EAAUo7d,2BAA2BnshB,EAAIgke,UAAUwR,eAAeJ,eAClF12f,EAAMslf,UAAUuR,eAAiB72f,EAAMslf,UAAUwR,eAAeJ,aAAep1e,EAAIgke,UAAUwR,eAAeJ,eAGrHrkb,EAAU0/a,MAAM9jB,mBAAoB,EACpCxre,KAAKsujB,sBAAsBzrE,EAAWjza,EAAWryE,EAAOshB,EAAK,IACtD,IAGXiie,EAAOzlf,UAAUizjB,sBAAwB,SAAUzrE,EAAWjza,EAAWryE,EAAOshB,EAAK09iB,GACjF,IAAI3nE,EAAgB,EAChBilC,EAAYt8hB,EAAMs5gB,cAAcliB,UAAUp3f,EAAMoO,OAAQipf,GAC/CilC,EAAU74hB,QACvB4zf,EAAgBilC,EAAU5nhB,MAkB1B2if,EAAgB,GAChBilC,EAAYh7gB,EAAIg4f,cAAcliB,UAAU91e,EAAIlT,OAAQipf,IACjC5zf,QACnB4zf,EAAgBilC,EAAU5nhB,MAmBtB4M,EAAIgke,YAAcA,GAKlBhke,EAAIgke,UAAUuR,eAAmB72f,EAAMslf,UAAUuR,eAC9C72f,EAAMslf,UAAUwR,iBAAmBx1e,EAAIgke,UAAUwR,iBACjDzkb,EAAU20b,eAAe1lf,EAAIgke,UAAUwR,eAAgB92f,EAAOshB,GAKjE7e,KAAKw8jB,WAAW35E,EAAWtlf,EAAOshB,EAAK09iB,IAJvC19iB,EAAIgke,UAAUwR,eAAeJ,WAAWpB,cAAc7yf,KAAKo6e,QAC3Dp6e,KAAKy8jB,gBAAgB59iB,EAAIgke,UAAUwR,eAAgBzkb,EAAWryE,EAAOshB,EAAK09iB,IAR1Ev8jB,KAAKsujB,sBAAsBzviB,EAAIgke,UAAWjza,EAAWryE,EAAOshB,EAAK09iB,IAiBzEz7E,EAAOzlf,UAAU8ngB,WAAa,YACtBnjgB,KAAKsvf,MAAMzR,gBAAmB79e,KAAKsvf,MAAM7U,mBAGxCh9e,EAAkBuC,KAAKo6e,SAAYp6e,KAAK4vE,UAAU0qK,SACnDt6O,KAAKywjB,8BAMb3vE,EAAOzlf,UAAUiogB,YAAc,WAC3B,IAAItjgB,KAAKsvf,MAAMzR,eAAf,CAGA,IAAI8rD,EAAW3piB,KAAK4vE,UAAUqwd,UAAYjgiB,KAAK4vE,UAAUryE,MAAQyC,KAAK4vE,UAAU/wD,IAChF,GAAI8qhB,EAAS9mD,UAAUuR,cAAe,CAClC,IAAIn0b,EAAQjgE,KAAKwwjB,cAAcxwjB,KAAK4vE,UAAUqwd,WAAWptC,cAAc7yf,KAAKo6e,QAC5Ep6e,KAAK4vE,UAAU0/a,MAAM9jB,mBAAoB,EACrCxre,KAAKqsjB,sBACLrsjB,KAAK0+a,YAAY,eAEjB1+a,KAAKusjB,sBAAsB5iB,GAAU,IAEzC,IAAI9mD,EAAY7if,KAAK08jB,yBAAyBz8f,GAC1CjgE,KAAKoohB,eAAiBpohB,KAAKoohB,cAAciK,wBACzCryhB,KAAKoohB,cAAciK,uBAAuBu6B,aAAapojB,KAAKy7D,EAAM5gE,SAEtEW,KAAKiujB,YAAYhuf,GACjBjgE,KAAK4vE,UAAUo5d,gBAAgBnmD,GAAW,IACtC7if,KAAKqsjB,qBAAuB5ujB,EAAkBuC,KAAKoohB,iBACnDpohB,KAAKyjjB,SAASzjjB,KAAK4vE,cAO/Bkxa,EAAOzlf,UAAUmogB,aAAe,WAC5B,IAAIxjgB,KAAKsvf,MAAMzR,eAAf,CAGA,IAAI8rD,EAAW3piB,KAAK4vE,UAAUqwd,UAAYjgiB,KAAK4vE,UAAUryE,MAAQyC,KAAK4vE,UAAU/wD,IACnE7e,KAAK4vE,UAAUqwd,UAAYjgiB,KAAK4vE,UAAU/wD,IAAM7e,KAAK4vE,UAAUryE,MAC5E,GAAIosiB,EAAS9mD,UAAUuR,cAAe,CAClCp0f,KAAK4vE,UAAU0/a,MAAM9jB,mBAAoB,EACrCxre,KAAKqsjB,qBACLrsjB,KAAK0+a,YAAY,gBAErB,IAAIy5E,EAAYn4f,KAAKmvjB,aAAanvjB,KAAK4vE,UAAUqwd,WAC7C7nC,EAAUp4f,KAAKmvjB,cAAcnvjB,KAAK4vE,UAAUqwd,WAC5Chge,EAAQk4b,EAAUlE,WAAWpB,cAAc7yf,KAAKo6e,QAChDp6e,KAAKoohB,eAAiBpohB,KAAKoohB,cAAciK,wBACzCryhB,KAAKovjB,wBAAwBnvf,GAEjC,IAAI4ib,OAAY1nf,EAChB,GAAIi9f,EAAQ6D,WAAY,CACpB,IAAItC,EAAWvB,EAAQ6D,WACvBpZ,EAAY7if,KAAK4vE,UAAU4ud,kBAAkB7kC,QAE5C,GAAIxB,EAAUoB,eAAgB,CAC/B,IAAIG,EAAevB,EAAUoB,eAC7B1W,EAAY7if,KAAK4vE,UAAU4ud,kBAAkB9kC,GAE7Cj8f,EAAkBolf,KAClBA,EAAY7if,KAAK08jB,yBAAyBz8f,IAI9C,IAAK,IADD08f,EAAc18f,EAAMi4b,2BAA2BC,EAAWC,GACrDj8f,EAAI,EAAGA,EAAI8jE,EAAMgjb,aAAaxmf,OAAQN,IAAK,CAChD,IAAIukE,EAAMT,EAAMgjb,aAAa9mf,GAC7B,GAAgC,IAA5BukE,EAAIuib,aAAaxmf,OACbkgkB,EAAYp+jB,QAAQmiE,EAAIuib,aAAa,KAAO,IAC5Chjb,EAAMgjb,aAAa56d,OAAO43C,EAAMgjb,aAAa1kf,QAAQmiE,GAAM,GAC3DA,EAAIpuD,UACJnW,SAGH,CACD,IAAK,IAAIonB,EAAI,EAAGA,EAAIm9C,EAAIuib,aAAaxmf,OAAQ8mB,IAAK,CAC9C,IAAImye,EAAYh1b,EAAIuib,aAAa1/d,GAC7Bo5iB,EAAYp+jB,QAAQm3f,IAAc,IAClCh1b,EAAIuib,aAAa56d,OAAO9E,EAAG,GAC3Bmye,EAAUpjf,UACViR,KAGwB,IAA5Bm9C,EAAIuib,aAAaxmf,SACjBwjE,EAAMgjb,aAAa56d,OAAO43C,EAAMgjb,aAAa1kf,QAAQmiE,GAAM,GAC3DA,EAAIpuD,UACJnW,MAIsB,IAA9B8jE,EAAMgjb,aAAaxmf,QAEnBomf,EAAY7if,KAAK08jB,yBAAyBz8f,GAC1CjgE,KAAKiujB,YAAYhuf,GACbjgE,KAAKoohB,eAAiBpohB,KAAKoohB,cAAciK,yBACzCryhB,KAAKoohB,cAAciK,uBAAuBl8d,OAAS,eAEvD8J,EAAM3tD,YAGN2tD,EAAM42b,eAAgB,EACtB52b,EAAM22b,oBACN32b,EAAM42b,eAAgB,EACtB72f,KAAKo6e,OAAOvpb,OAAO2md,cAAcv3c,IAErCjgE,KAAK4vE,UAAUo5d,gBAAgBnmD,GAAW,IACtCplf,EAAkBuC,KAAKoohB,gBAAkBpohB,KAAKqsjB,sBAC9CrsjB,KAAKyjjB,SAASzjjB,KAAK4vE,WAAW,MAO1Ckxa,EAAOzlf,UAAUkogB,UAAY,WACzB,IAAIvjgB,KAAKsvf,MAAMzR,eAAf,CAGA,IAAI8rD,EAAY3piB,KAAK4vE,UAAUqwd,UAAiCjgiB,KAAK4vE,UAAUryE,MAApCyC,KAAK4vE,UAAU/wD,IAC5C7e,KAAK4vE,UAAUqwd,UAAmCjgiB,KAAK4vE,UAAU/wD,IAAtC7e,KAAK4vE,UAAUryE,MACxD,GAAIosiB,EAAS9mD,UAAUuR,cAAe,CAClC,IAAI+D,EAAYn4f,KAAKmvjB,aAAanvjB,KAAK4vE,UAAUqwd,WAC7C7nC,EAAUp4f,KAAKmvjB,cAAcnvjB,KAAK4vE,UAAUqwd,WAC5CjgiB,KAAKqsjB,qBACLrsjB,KAAK0+a,YAAY,aAErB1+a,KAAK4vE,UAAU0/a,MAAM9jB,mBAAoB,EACzC,IAAIvra,EAAQk4b,EAAUlE,WAAWpB,cAAc7yf,KAAKo6e,QAChD15a,EAAM1gE,KAAKswjB,aAAY,GACvBtwjB,KAAKoohB,eAAiBpohB,KAAKoohB,cAAciK,wBACzCryhB,KAAKovjB,wBAAwBnvf,GAEjC,IAAI4ib,OAAY1nf,EAChB,GAAIulE,EAAIu7b,WAAY,CAChB,IAAItC,EAAWj5b,EAAIu7b,WAAWhZ,aAAa,GAC3CJ,EAAY7if,KAAK4vE,UAAU4ud,kBAAkB7kC,GAKjD,GAHIl8f,EAAkBolf,KAClBA,EAAY7if,KAAK08jB,yBAAyBz8f,IAEzCjgE,KAAK4vE,UAAU0qK,QA4ChBt6O,KAAK48jB,UAAUl8f,OA5CU,CAEzB,IAAIg/d,EAAgB1/hB,KAAK4vE,UAAU0qd,mBAAmBniC,EAAWC,GACjE,GAAIsnC,EAAczrC,WAAW9vf,SAASi0f,GAGlC,GAFAD,EAAYn4f,KAAK4vE,UAAU+vd,gBAAgBxnC,EAAWunC,GACtDtnC,EAAUp4f,KAAK4vE,UAAU+vd,gBAAgBvnC,EAASsnC,GAC9C1/hB,KAAK4vE,UAAUiwd,aAAaH,EAAetnC,GAC3C13b,EAAMy3b,EAAUjE,SAChBl0f,KAAK48jB,UAAUl8f,OAEd,CACDA,EAAMy3b,EAAUjE,SAChB,IAAIq8D,EAASn4D,EAAQlE,SAGrB,GADArR,OAAY1nf,EACRo1jB,EAAOt0D,WAAY,CACftC,EAAW42D,EAAOt0D,WAAWhZ,aAAa,GAC9CJ,EAAY7if,KAAK4vE,UAAU4ud,kBAAkB7kC,GAE7Cl8f,EAAkBolf,KAClBA,EAAY7if,KAAK08jB,yBAAyBz8f,IAE9C,IAAK,IAAI9jE,EAAI,EAAGA,EAAI8jE,EAAMgjb,aAAaxmf,OAAQN,IAAK,CAChD,IAAI8xhB,EAAWhud,EAAMgjb,aAAa9mf,GAC9B8xhB,EAASxtP,UAAY//N,EAAI+/N,UAAYwtP,EAASxtP,UAAY8vR,EAAO9vR,WACjExgO,EAAMgjb,aAAa56d,OAAOlsB,EAAG,GAC7B8xhB,EAAS37gB,UACTnW,KAG0B,IAA9B8jE,EAAMgjb,aAAaxmf,QACnBuD,KAAKiujB,YAAYhuf,GACbjgE,KAAKoohB,eAAiBpohB,KAAKoohB,cAAciK,yBACzCryhB,KAAKoohB,cAAciK,uBAAuBl8d,OAAS,eAEvD8J,EAAM3tD,WAGNtS,KAAK68jB,YAAY58f,IAQjCjgE,KAAK4vE,UAAUo5d,gBAAgBnmD,GAAW,IACtCplf,EAAkBuC,KAAKoohB,gBAAkBpohB,KAAKqsjB,sBAC9CrsjB,KAAKyjjB,SAASzjjB,KAAK4vE,WAAW,MAI1Ckxa,EAAOzlf,UAAUuhkB,UAAY,SAAUl8f,GACnC,IAAIT,EAAQS,EAAIuzb,WACkB,IAA9Bh0b,EAAMgjb,aAAaxmf,QACnBuD,KAAKiujB,YAAYhuf,GACbjgE,KAAKoohB,eAAiBpohB,KAAKoohB,cAAciK,yBACzCryhB,KAAKoohB,cAAciK,uBAAuBl8d,OAAS,UAEvD8J,EAAM3tD,YAGN2tD,EAAMgjb,aAAa56d,OAAO43C,EAAMgjb,aAAa1kf,QAAQmiE,GAAM,GAC3DA,EAAIpuD,UACJtS,KAAK68jB,YAAY58f,KAGzB6gb,EAAOzlf,UAAUwhkB,YAAc,SAAU58f,GACrCA,EAAMy4b,eAAe,GACrBz4b,EAAM42b,eAAgB,EACtB52b,EAAM22b,oBACN32b,EAAM42b,eAAgB,EACtB72f,KAAKo6e,OAAOvpb,OAAO2md,cAAcv3c,IAErC6gb,EAAOzlf,UAAUqhkB,yBAA2B,SAAUz8f,GAClD,IAAI4ib,OAAY1nf,EACZ8ggB,EAAah8b,EAAMg8b,WAAah8b,EAAMg8b,WAAah8b,EAAMqyb,mBACzDiH,EAAiBt5b,EAAMs5b,eAAiBt5b,EAAMs5b,eAAiBt5b,EAAMkyb,uBASzE,OARI8J,EACApZ,EAAYoZ,aAAsBnZ,GAAkBmZ,EAC9Cj8f,KAAK4vE,UAAUmnc,6BAA6B9a,GAE7C1C,IACL1W,EAAY0W,aAA0BzW,GAAkByW,EAClDv5f,KAAK4vE,UAAUo7d,2BAA2BzxC,IAE7C1W,GAEX/B,EAAOzlf,UAAUmhkB,WAAa,SAAU35E,EAAWtlf,EAAOshB,EAAK09iB,GAC3D15E,EAAYA,EAAUgQ,cAAc7yf,KAAKo6e,QACzC,IAAIxqa,EAAY5vE,KAAKo6e,OAAOxqa,UACxBktf,EAAiBltf,EAAU0nd,eAAez0C,GAC1Ck6E,EAA0Bntf,EAAU0nd,eAAez4gB,EAAIgke,WACvD2T,EAAcsmE,EACdz8D,EAAY,EACZ28D,GAAyB,EACzBC,EAAiBj9jB,KAAK4vE,UAAUipd,cAAch2C,EAAU/6W,WACxDwwY,EAAmBz1B,EAEnBmsE,GADUnsE,EAAU8F,sBAAsBjG,IAAaG,EAAUK,qBACrD/nf,GACZqyiB,OAAgBryiB,EAChB0nf,IAActlf,EAAMslf,WACpB2T,EAAcj5f,EAAMoO,OACpBqjjB,EAAYzxjB,EAAMs5gB,cACdh4f,EAAIgke,UAAUuR,gBACd4oE,EAAyBh9jB,KAAKk9jB,qBAAqBr6E,EAAWhke,EAAIgke,aAItEmsE,EAAYnsE,EAAUjme,WAEtBime,IAActlf,EAAMslf,WAAajza,EAAUqxd,kBAC3Crxd,EAAUqxd,iBAAkB,GAE5Bp+C,IAAchke,EAAIgke,WAClB2qD,EAAgB3uhB,EAAIg4f,cACpBxW,EAAYxhf,EAAIlT,SAGhB6hiB,EAAgB3qD,EAAU/6W,UAC1Bu4X,EAAYrggB,KAAKo6e,OAAOxqa,UAAUipd,cAAch2C,EAAU/6W,YAE9D,IAAIksX,EAAQnR,EAAUsP,uBAMtB,GALIqE,EAAcsmE,GAAkBv/jB,EAAMs5gB,gBAAkBh0B,EAAU/6W,WAClE0uX,IAAgBymE,IAAmBp6E,IAAchke,EAAIgke,WAAahke,EAAIlT,SAAW6qf,EAAc,GAC/F3T,EAAUyP,qBAAuBzze,EAAIgke,WAAahke,EAAIlT,SAAWoxjB,KACjEC,GAAyB,GAEzBn+iB,EAAIgke,YAAcA,GAAahke,EAAIg4f,gBAAkBh0B,EAAU/6W,WAC9DjpH,EAAIg4f,gBAAkBh0B,EAAU/6W,WAAajpH,EAAIlT,QAAUikE,EAAUipd,cAAch2C,EAAU/6W,WAAa,CAC3G,IAAIq1b,EAAmB5/jB,EAAMslf,YAAcA,EAM3C,IALIhke,EAAIg4f,cAAcxZ,eAAiBx+e,EAAIlT,OAASmxjB,IAAmBj+iB,EAAIg4f,cAAcxZ,gBAErFr9f,KAAKo9jB,cAAcv6E,EAAWmsE,EAAWx4D,EAAag3C,EAAentC,EAAWk8D,IAG/E9+jB,EAAkBu2f,KAAWmpE,EAAkB,CAC9BnpE,EAAMrL,sBAAsBjG,IAAasR,EAAMrL,WAIjE3of,KAAKq9jB,YAAYrpE,EAAOpkb,EAAWryE,EAAOshB,EAAK09iB,QAGlD,CAAA,GAAIh/jB,EAAMslf,YAAcA,IAActlf,EAAMs5gB,gBAAkBh0B,EAAUjme,YACxErf,EAAMs5gB,gBAAkBh0B,EAAUjme,YAAc45e,EAAcsmE,GAG/D,OAAmB,IAAfP,OACA,GAGAjkD,EAAmBt4gB,KAAKo9f,eAAeva,EAAWA,EAAUjme,WAAY,EAAGoyiB,EAAWx4D,GAAa,GACnGx2f,KAAKs9jB,qBAAqBz6E,EAAWy1B,EAAkB/6gB,EAAOshB,EAAKm+iB,EAAwBT,QAC3Fv8jB,KAAKu9jB,gBAAgB16E,IAKzB,IAAI+qE,OAAezyjB,EACfighB,EAAgBv4B,EAAU0W,eAC1B4E,EAAiBid,aAAyBt4B,GAAmBs4B,OAAgBjghB,EAC7E8ggB,EAAapZ,EAAUyP,mBAC3B,GAAIiqE,EAAa,EAQb,GANA3O,EAAe5tjB,KAAKw9jB,oBAAoB36E,EAAWtlf,EAAOshB,EAAK09iB,EAAYp+D,GAC3En+f,KAAKiujB,YAAYprE,GACb7if,KAAKo6e,OAAOu8B,eAAiB9zB,IAC7B7if,KAAKo6e,OAAOu8B,kBAAex7gB,GAE/B6E,KAAKu9jB,gBAAgB16E,GAChBplf,EAAkBmwjB,IAQlB,GAAI/qE,IAActlf,EAAMslf,WAAaplf,EAAkBw+f,KAAgBx+f,EAAkB0ggB,GAAgB,CACtGxyf,EAAS3L,KAAK4vE,UAAU+nd,mBAAmBx5B,GAE/Cvub,EAAUg5e,aAAe5ojB,KAAKszf,qBAAqB6K,EAAexyf,EAAOuB,YACrElN,KAAKoohB,gBAAkB3qhB,EAAkBuC,KAAKoohB,cAAciK,0BAC5DryhB,KAAKusjB,sBAAsB38e,EAAUg5e,cAAc,GACnD5ojB,KAAKoohB,cAAciK,uBAAuBlJ,YAAcv5c,EAAUg5e,mBAdpC,CAClCh5e,EAAUg5e,aAAe5ojB,KAAKszf,qBAAqBs6D,EAAc,KACjE,IAAIjijB,EAASikE,EAAU+nd,mBAAmBi2B,GAAgB,EACtD5tjB,KAAKoohB,gBAAkB3qhB,EAAkBuC,KAAKoohB,cAAciK,0BAE5DryhB,KAAKoohB,cAAciK,uBAAuBlJ,YAAcnphB,KAAKszf,qBAAqBs6D,EAAcjijB,EAAOuB,aAuBnH,GAAI3P,EAAMslf,YAAcA,IAAcplf,EAAkBu2f,GAAQ,CAC1CA,EAAMrL,sBAAsBjG,IAAasR,EAAMrL,WAIjE3of,KAAKq9jB,YAAYrpE,EAAOpkb,EAAWryE,EAAOshB,EAAK09iB,IAGvDv8jB,KAAKs9jB,qBAAqBz6E,EAAWy1B,EAAkB/6gB,EAAOshB,EAAKm+iB,EAAwBT,IAM/Fz7E,EAAOzlf,UAAUmikB,oBAAsB,SAAUxpE,EAAOz2f,EAAOshB,EAAK09iB,EAAYviC,GAC5E,GAAIhmC,aAAiBlR,IAAmBkR,IAAUz2f,EAAMslf,WAAamR,aAAiBjB,GAAa,CAC/F,IAAI66D,OAAe,EAcnB,OAbInwjB,EAAkBu2f,EAAMiI,cAAgBx+f,EAAkBu8hB,IAAsBA,EAAkB1nC,8BAA8BS,MAChI66D,EAAe,IAAI9qE,GACA,IAAfy5E,GAAoBvoE,aAAiBlR,KACrC8qE,EAAa5vE,gBAAgBwH,WAAWwO,EAAMhW,iBAC9C4vE,EAAahwE,gBAAgB4H,WAAWwO,EAAMpW,kBAElDgwE,EAAa37iB,MAAQ+hf,EAAM/hf,MAAQ,EACnC27iB,EAAa1qE,gBAAkB8Q,EAAM9Q,gBACrCljf,KAAKo6e,OAAOvpb,OAAO0md,2BAA2Bq2C,EAAa37iB,MAAO27iB,EAAajlE,WAAYilE,GAAc,GACrG55D,EAAM9Q,2BAA2BuO,IACjCuC,EAAM9Q,gBAAgBD,aAAaz+e,KAAKopjB,IAGzCA,IAKf9sE,EAAOzlf,UAAU+hgB,eAAiB,SAAUqgE,EAAczO,EAAWx4D,EAAas1C,EAASzrC,EAAW4tD,GAClG,IAAIprE,EAAY,IAAIC,GACpBD,EAAUjF,gBAAkB,IAAImF,GAAiBF,GACjDA,EAAU7E,gBAAkB,IAAIgF,GAAiBH,GACjDA,EAAUjF,gBAAgB4H,WAAWi4E,EAAa7/E,iBAClDiF,EAAU7E,gBAAgBwH,WAAWi4E,EAAaz/E,iBAClD,IAAIqgB,EAAa,IAAIlL,GAAWtQ,GAChCA,EAAUI,aAAaz+e,KAAK65f,GAC5B,IAAI6Z,EAAaulD,EAAaxrjB,MAC1B27f,EAAc6vD,EAAa7rE,aAY/B,OAXA5xf,KAAKoujB,YAAYqP,EAAc56E,EAAW,EAAG2T,EAAaw4D,EAAW3uD,EAAWyrC,GAEhF2xB,EAAav6E,gBAAgBD,aAAa56d,OAAOulf,EAAa,EAAG/qB,GACjEA,EAAU5we,MAAQimgB,EAClBr1B,EAAUK,gBAAkBu6E,EAAav6E,gBACzCljf,KAAKkujB,sBAAsBrrE,GAAW,GAClCorE,GACAjujB,KAAKiujB,YAAYwP,GAGrBz9jB,KAAKo6e,OAAOvpb,OAAO0md,2BAA2BW,EAAYr1B,EAAUK,gBAAiBL,GAAW,GACzFA,GAKX/B,EAAOzlf,UAAU4yjB,YAAc,SAAUj6D,GACrC,IAAI/hf,EAEAixe,EACJljf,KAAK09jB,YAAY1pE,GACbA,EAAMI,eACNlR,EAAkB8Q,EAAMK,eACxBpif,EAAQ+hf,EAAMK,eAAepR,aAAa1kf,QAAQy1f,GAChCA,EAAMK,eAAepR,aACvCjjf,KAAKkujB,sBAAsBl6D,GAAO,GAClCA,EAAMK,eAAepR,aAAa56d,OAAOpW,EAAO,GAChD+hf,EAAM9Q,qBAAkB/nf,EACxB6E,KAAKo6e,OAAOvpb,OAAO0md,2BAA2BvjB,EAAM/hf,MAAOixe,EAAiB8Q,GAAO,KAInF/hf,GADAixe,EAAkB8Q,EAAM9Q,iBACAD,aAAa1kf,QAAQy1f,GAC3B9Q,EAAgBD,aAClCjjf,KAAKkujB,sBAAsBl6D,GAAO,GAClC9Q,EAAgBD,aAAa56d,OAAOpW,EAAO,GAC3C+hf,EAAM9Q,qBAAkB/nf,EACxB+nf,EAAgBnte,QAAUi+e,EAAMj+e,OAChC/V,KAAKo6e,OAAOvpb,OAAO0md,2BAA2BvjB,EAAM/hf,MAAOixe,EAAiB8Q,GAAO,KAG3FlT,EAAOzlf,UAAUqikB,YAAc,SAAU1pE,GACrC,IAAK,IAAI73f,EAAI,EAAGA,EAAI6D,KAAKo6e,OAAOxud,OAAOnvB,OAAQN,IAAK,CACpC6D,KAAKo6e,OAAOxud,OAAOzvB,GACrB2xD,KAAK+0b,YAAcmR,IACzBh0f,KAAKo6e,OAAOxud,OAAOvD,OAAOlsB,EAAG,GAC7BA,OAIZ2kf,EAAOzlf,UAAUkikB,gBAAkB,SAAUh9jB,GACrCA,aAAgB+qf,IAAsC,IAAnB/qf,EAAKgrf,YACE,IAAtCvrf,KAAKo6e,OAAOxud,OAAOrtB,QAAQgC,IAC3BP,KAAKo6e,OAAOxud,OAAOvD,OAAOroB,KAAKo6e,OAAOxud,OAAOrtB,QAAQgC,GAAO,GAGhEP,KAAKoohB,gBAAkB3qhB,EAAkBuC,KAAKoohB,cAAciK,wBAC5DryhB,KAAKoohB,cAAciK,uBAAuBu6B,aAAapojB,KAAKjE,GAEvDP,KAAKwmjB,uBACVxmjB,KAAK8xD,MAAMttD,KAAKjE,IAGxBugf,EAAOzlf,UAAUgikB,YAAc,SAAUrpE,EAAOpkb,EAAWryE,EAAOshB,EAAK09iB,GAC/DvoE,aAAiBlR,GACjB9if,KAAKw8jB,WAAWxoE,EAAOz2f,EAAOshB,EAAK09iB,GAGnCv8jB,KAAK29jB,iBAAiB3pE,EAAOpkb,EAAWryE,EAAOshB,EAAK09iB,IAI5Dz7E,EAAOzlf,UAAUohkB,gBAAkB,SAAU1oB,EAASnke,EAAWryE,EAAOshB,EAAK09iB,GACzE,IAAIqB,IAAwBrgkB,EAAMslf,UAAUuR,eAAiB2/C,EAAQ9/C,WAAW9vf,SAAS5G,EAAMslf,UAAUwR,iBACrG+mB,EAAgB24B,EAAQ9/C,WAAW9B,uBACvC,GAAI50f,EAAMslf,UAAUuR,cAAe,CAC/B,IAAIsrC,EAAgB9vd,EAAU0qd,mBAAmByZ,EAASx2iB,EAAMslf,UAAUwR,gBAC1E,GAAIqrC,EAAczrC,WAAW9vf,SAAS5G,EAAMslf,UAAUwR,gBAAiB,CACnE,IAAI8D,EAAYvob,EAAU+vd,gBAAgBoU,EAASrU,GACrC9vd,EAAU+vd,gBAAgBpiiB,EAAMslf,UAAUwR,eAAgBqrC,GACxE,GAAI9vd,EAAUiwd,aAAaH,EAAeniiB,EAAMslf,UAAUwR,gBAEtD,GAAIzkb,EAAU20b,eAAem7B,EAAeniiB,EAAOshB,GAG/C,GADA7e,KAAK69jB,mBAAmBn+B,EAAe9vd,GACpB,IAAf2sf,EAEAv8jB,KAAK89jB,mBAAmB/pB,EAAQ7/C,SAASD,WAAYrkb,EAAWryE,EAAOshB,EAAK09iB,OAE3E,EAEmBv8jB,KAAK+9jB,WAAWr+B,EAAe9vd,EAAW2sf,GAAY,IACrC,IAAfA,GAAoBv8jB,KAAKoohB,gBAC3CpohB,KAAKoohB,cAAciK,4BAAyBl3hB,QAKhDg9f,IAAcunC,EACd1/hB,KAAKw8jB,WAAW39iB,EAAIgke,UAAWtlf,EAAOshB,EAAK09iB,GAG3Cv8jB,KAAKg+jB,gBAAgB7lE,EAAWvob,EAAWryE,EAAOshB,EAAK09iB,QAK5C,IAAfA,EAEAv8jB,KAAK+9jB,WAAWhqB,EAASnke,EAAW,GAAG,GAIvC5vE,KAAK89jB,mBAAmBp+B,EAAczrC,WAAYrkb,EAAWryE,EAAOshB,EAAK09iB,QAMjFv8jB,KAAKg+jB,gBAAgBt+B,EAAe9vd,EAAWryE,EAAOshB,EAAK09iB,OAG9D,CAED,IAAIt5f,EAAO2M,EAAUowd,iBAAiB+T,GACtC/ziB,KAAKg+jB,gBAAgB/6f,EAAM2M,EAAWryE,EAAOshB,EAAK09iB,GAEtD,GAAIqB,EAAqB,CACJxiD,EAAczyB,sBAAsBjG,IAAa04B,EAAczyB,WAE3Elrf,EAAkB29gB,IAMnBp7gB,KAAKq9jB,YAAYjiD,EAAexrc,EAAWryE,EAAOshB,EAAK09iB,KAKnEz7E,EAAOzlf,UAAUyikB,mBAAqB,SAAU79f,EAAO2P,EAAWryE,EAAOshB,EAAK09iB,GAC1E,IACI0B,GAAgB,EAChB9ngB,EAAS,SACTgic,EAAY56f,EAAMslf,UAAUwR,eAC5B+D,EAAUv5e,EAAIgke,UAAUwR,eACxBr0f,KAAKoohB,gBAAkB3qhB,EAAkBuC,KAAKoohB,cAAciK,0BAC5Dl8d,EAASn2D,KAAKoohB,cAAciK,uBAAuBl8d,OAEnD8ngB,EAAqE,cAArDj+jB,KAAKoohB,cAAciK,uBAAuBl8d,QAA+E,gBAArDn2D,KAAKoohB,cAAciK,uBAAuBl8d,QAClE,gBAArDn2D,KAAKoohB,cAAciK,uBAAuBl8d,QAA6B14D,EAAkB06f,EAAUjE,SAASqF,iBAC5G97f,EAAkB26f,EAAQlE,SAAS+H,aAAoE,QAArDj8f,KAAKoohB,cAAciK,uBAAuBl8d,OACnGn2D,KAAKoohB,cAAciK,uBAAuBl8d,OAAS8ngB,EAAgB,cAAgB,aACrEj+jB,KAAKovjB,wBAAwBnvf,GAC3C2P,EAAU0/a,MAAM7jB,iBAAkB,GAStC,IAAK,IAPD0rE,EAAmBh/C,EAAUxwL,YAC7ByvO,EAAiBh/C,EAAQzwL,YAAcywL,EAAQ9D,WAAWn8N,WAAa,EACvEiH,EAAgB+4N,EAAU13N,SAC1BguQ,EAAcr2C,EAAQ33N,SAEtBo0N,GAAY,EAEP14f,EAAI,EAAGA,EAAI8jE,EAAMgjb,aAAaxmf,OAAQN,IAAK,CAChD,IAAIukE,EAAMT,EAAMgjb,aAAa9mf,GAC7B,GAAIukE,EAAIzuD,OAASmtR,GAAiB1+N,EAAIzuD,OAASw8hB,EAAa,CACxD,IAAK,IAAIlrhB,EAAI,EAAGA,EAAIm9C,EAAIuib,aAAaxmf,OAAQ8mB,IAAK,CAC9C,IAAI0/C,EAAOvC,EAAIuib,aAAa1/d,GAC5B,GAAI0/C,EAAK0kQ,aAAewvO,GAAoBl0e,EAAK0kQ,aAAeyvO,EAK5D,GAJKviD,IACD70f,KAAK69jB,mBAAmB56f,EAAM2M,GAC9Bilb,GAAY,GAEZopE,EAAe,CAEf,IAAIC,EAASx9f,EAAIuib,aAAa1/d,GAC9BvjB,KAAKkujB,sBAAsBgQ,GAAQ,GACnCx9f,EAAIuib,aAAa56d,OAAO9E,EAAG,GAC3BA,SAEKg5iB,EAAa,GACFv8jB,KAAK+9jB,WAAW96f,EAAM2M,EAAW2sf,GAAY,GAIzC,IAA5B77f,EAAIuib,aAAaxmf,SACjBuD,KAAKkujB,sBAAsBjuf,EAAMgjb,aAAa9mf,IAAI,GAClD8jE,EAAMgjb,aAAa56d,OAAOlsB,EAAG,GAC7BA,IACAsyiB,MAKZ7+d,EAAU0/a,MAAM7jB,iBAAkB,EACA,IAA9Bxra,EAAMgjb,aAAaxmf,QACnBmzE,EAAUg5e,aAAe5ojB,KAAKszf,qBAAqBrzb,EAAO,KAC1DjgE,KAAKm+jB,kBAAkBvuf,EAAWzZ,GAClCn2D,KAAKiujB,YAAYhuf,KAIjBA,EAAM42b,eAAgB,EACtB52b,EAAM22b,oBACN32b,EAAM42b,eAAgB,EACtB72f,KAAKo6e,OAAOvpb,OAAO2md,cAAcv3c,KAGzC6gb,EAAOzlf,UAAU0ikB,WAAa,SAAU96f,EAAM2M,EAAW2sf,EAAY6B,GAEjE,IAAIpqE,EAAQ/wb,EAAKggb,aAAa,GAC9B,GAAiC,IAA7Bhgb,EAAKggb,aAAaxmf,QAAgBu3f,aAAiBlR,IAAmBkR,EAAM15Q,UAC5E,OAAO,EAEX,IAAK,IAAIn+O,EAAI,EAAGA,EAAI8mE,EAAKggb,aAAaxmf,OAAQN,IAE1C,GADA63f,EAAQ/wb,EAAKggb,aAAa9mf,GACtBogkB,EAAa,EAAG,CAEhB,GAAIvoE,aAAiBlR,IAAgD,IAA7B7/a,EAAKggb,aAAaxmf,OAAc,CAIpE,IAAK,IAFDomf,EAAYmR,EAEPzwe,EAAI,EAAGA,EAAIs/d,EAAUI,aAAaxmf,OAAQ8mB,IAAK,CAEpD,IAAK,IADD6hI,EAASy9V,EAAUI,aAAa1/d,GAC3B4C,EAAI,EAAGA,EAAIi/H,EAAOhrI,SAAS3d,OAAQ0pB,IAAK,CAC7C,IAAInlB,EAAUokJ,EAAOhrI,SAAS+L,GAC9BnmB,KAAK2rjB,qBAAqB3qjB,GAC1BokJ,EAAOhrI,SAASiO,OAAOlC,EAAG,GAE1BA,IACInmB,KAAKq+jB,gBAAgBzuf,IACrB5vE,KAAKu9jB,gBAAgBv8jB,GAGzB6hf,EAAUI,aAAaxmf,OAAS,IAChComf,EAAUI,aAAa56d,OAAO9E,EAAG,GACjCA,KAGJvjB,KAAKq+jB,gBAAgBzuf,KAErBA,EAAUg5e,aAAe5ojB,KAAKszf,qBAAqBzQ,EAAW,KAC9D7if,KAAKusjB,sBAAsB38e,EAAUg5e,cAAc,IAEvD,MAEJ5ojB,KAAKiujB,YAAYj6D,GACjB73f,IACI6D,KAAKq+jB,gBAAgBzuf,IACrB5vE,KAAKu9jB,gBAAgBvpE,GAIjC,OAAO,GAEXlT,EAAOzlf,UAAU2ikB,gBAAkB,SAAU/6f,EAAM2M,EAAWryE,EAAOshB,EAAK09iB,GACtE,IAAItoE,EAAahxb,EAAKgxb,WACtB,GAAIrkb,EAAUi/d,YAAY56C,EAAWnsX,UAAWjpH,EAAIgke,UAAUwR,gBAC1Dr0f,KAAKs+jB,cAAcrqE,EAAYrkb,EAAW2sf,QAG1C,IAAK,IAAIpgkB,EAAI,EAAGA,EAAI83f,EAAWhR,aAAaxmf,OAAQN,IAAK,CACrD,IAAIukE,EAAMuzb,EAAWhR,aAAa9mf,GAOlC,GANIogkB,EAAa,IACbv8jB,KAAKkujB,sBAAsBxtf,GAAK,GAChCuzb,EAAWhR,aAAa56d,OAAOlsB,EAAG,GAClC6D,KAAKu9jB,gBAAgB78f,GACrBvkE,KAEA0iB,EAAIgke,UAAUuR,eAAiBxkb,EAAUi/d,YAAYnue,EAAK7hD,EAAIgke,UAAUwR,gBAExE,YADAr0f,KAAKo6e,OAAOvpb,OAAO2md,cAAcvjB,KAMjDnT,EAAOzlf,UAAUsikB,iBAAmB,SAAU19f,EAAO2P,EAAWryE,EAAOshB,EAAK09iB,GAExE,GADAt8f,EAAQA,EAAM4yb,cAAc7yf,KAAKo6e,QAC7B78e,EAAMslf,UAAUuR,eAAiBn0b,EAAM97D,SAAS5G,EAAMslf,UAAUwR,gBAAiB,CACjF,IAAIL,EAAQ/zb,EAAMkyb,uBAEdipB,EAAgBp7gB,KAAKw9jB,oBAAoBv9f,EAAO1iE,EAAOshB,EAAK09iB,EAAYvoE,aAAiBlR,GAAkBkR,OAAQ74f,GACvH,GAAIy0E,EAAUi/d,YAAY5ue,EAAMrjD,WAAYrf,EAAMslf,UAAUwR,gBACxDr0f,KAAKs+jB,cAAcr+f,EAAO2P,EAAW2sf,OAEpC,CACD,IAAIxnD,EAAW/0gB,KAAKu+jB,WAAWt+f,EAAO1iE,EAAMslf,UAAUwR,eAAeH,UACrEl0f,KAAKs+jB,cAAcr+f,EAAO2P,EAAW2sf,GACrCv8jB,KAAKo6e,OAAOvpb,OAAO0md,2BAA2BxC,EAAS9igB,MAAO8igB,EAAS7xB,gBAAiB6xB,GAAU,GAEjGt3gB,EAAkB29gB,KACnBxrc,EAAUg5e,aAAe5ojB,KAAKszf,qBAAqB8nB,EAAe,KAC9Dp7gB,KAAKoohB,gBAAkB3qhB,EAAkBuC,KAAKoohB,cAAciK,0BAC5DryhB,KAAKoohB,cAAciK,uBAAuBlJ,YAAcv5c,EAAUg5e,mBAIzE,CACD,IAAIlyC,EAAWz2c,EAAMkyb,uBACJlyb,EAAM0ob,sBAAsBjG,IAAazib,EAAM0ob,WAChE3of,KAAKs+jB,cAAcr+f,EAAO2P,EAAW2sf,GAChC9+jB,EAAkBi5gB,IAMnB12gB,KAAKq9jB,YAAY3mD,EAAU9mc,EAAWryE,EAAOshB,EAAK09iB,KAI9Dz7E,EAAOzlf,UAAUkjkB,WAAa,SAAUt+f,EAAOu+f,GAC3C,IAAIzpD,EAAW,IAAIhiB,GACnBgiB,EAASjlB,YAAYtK,WAAWvlb,EAAM6vb,aACtCilB,EAAS9igB,MAAQguD,EAAMhuD,MAEvB,IAAK,IAAI9V,EAAI,EAAGA,EAAI8jE,EAAMgjb,aAAaxmf,OAAQN,IAAK,CAChD,IAAIukE,EAAMT,EAAMgjb,aAAa9mf,GAC7B,GAAIukE,IAAQ89f,EACR,MAEJzpD,EAAS9xB,aAAaz+e,KAAKk8D,GAC3BA,EAAIwib,gBAAkB6xB,EACtB90c,EAAMgjb,aAAa56d,OAAOlsB,EAAG,GAC7BA,IAGJ,IAAIyxgB,EAAc3tc,EAAMoT,WAIxB,OAHApT,EAAMijb,gBAAgBD,aAAa56d,OAAOulf,EAAa,EAAGmH,GAC1DA,EAAS7xB,gBAAkBjjb,EAAMijb,gBACjCljf,KAAKkujB,sBAAsBn5C,GAAU,GAC9BA,GAEXj0B,EAAOzlf,UAAUwikB,mBAAqB,SAAU56f,EAAM2M,GAClD,IAAIm5d,EAAiBn5d,EAAUm7d,wBAAwB9ne,GACvD2M,EAAUg5e,aAAe5ojB,KAAKszf,qBAAqBy1C,EAAgB,MAKvEjoD,EAAOzlf,UAAUijkB,cAAgB,SAAUr+f,EAAO2P,EAAW2sf,GACrDA,EAAa,IACbv8jB,KAAKiujB,YAAYhuf,GACjBjgE,KAAKu9jB,gBAAgBt9f,KAG7B6gb,EAAOzlf,UAAU8ikB,kBAAoB,SAAUvuf,EAAWzZ,GAClDn2D,KAAKo6e,OAAOkV,MAAMmvE,oBAAsBhhkB,EAAkBuC,KAAKoohB,cAAciK,0BAC7EryhB,KAAKoohB,cAAciK,uBAAuBl8d,OAASA,IAG3D2qb,EAAOzlf,UAAUgjkB,gBAAkB,SAAUzuf,GAEzC,OAAO5vE,KAAKoohB,eAAiBpohB,KAAKoohB,cAAciK,wBAA+E,eAArDryhB,KAAKoohB,cAAciK,uBAAuBl8d,QAExH2qb,EAAOzlf,UAAU6hkB,qBAAuB,SAAUr6E,EAAW61C,GACzD,IAAIn7hB,EAAQyC,KAAKszf,qBAAqBzQ,EAAW,IAC7Chke,EAAM7e,KAAKszf,qBAAqBolC,EAAc,IAC9C/ygB,EAAiBpoB,EAAML,MAAM,KAC7B2oB,EAAehH,EAAI3hB,MAAM,KAC7B,OAAOyoB,EAAelpB,OAASopB,EAAappB,QAEhDqkf,EAAOzlf,UAAU+zjB,wBAA0B,SAAUnvf,GACjD,GAAIjgE,KAAKoohB,gBAAkB3qhB,EAAkBuC,KAAKoohB,cAAciK,wBAAyB,CAErF,IAAIqsC,EAAcz+f,EAAM5gE,QAQxB,OANAW,KAAKoohB,cAAciK,uBAAuBu6B,aAAapojB,KAAKk6jB,GAExD1+jB,KAAKo6e,OAAOxqa,UAAUryE,MAAMslf,UAAUuR,eACtCp0f,KAAKo6e,OAAOxqa,UAAUryE,MAAMslf,UAAUwR,eAAeJ,aAAeh0b,GACpEjgE,KAAKusjB,sBAAsBvsjB,KAAKszf,qBAAqBrzb,EAAO,MAAM,GAE/Dy+f,IAKf59E,EAAOzlf,UAAUiikB,qBAAuB,SAAUz6E,EAAWy1B,EAAkB/6gB,EAAOshB,EAAKm+iB,EAAwBT,GAC/G,GAAIv8jB,KAAKoohB,gBAAkBpohB,KAAKoohB,cAAc3iC,WAAazlf,KAAKoohB,cAAc1iC,YAAmE,UAArD1lf,KAAKoohB,cAAciK,uBAAuBl8d,OAAoB,CACtJ,IAAIw3c,EAAgB3tgB,KAAK4vE,UAAU2qd,sBAAsBjiB,GACzD,GAAI3K,GACIpwgB,EAAMoO,OAAS,GAAKgigB,IAAkB9uf,EAAIgke,WAAaA,IAActlf,EAAMslf,WACnB,UAArD7if,KAAKoohB,cAAciK,uBAAuBl8d,OAAoB,CAEjE,IAAIy3c,EAAc,EAClB5tgB,KAAKiujB,YAAY31C,GACjBt4gB,KAAKo6e,OAAOvpb,OAAOo6c,oBAAoB0C,GACvC3tgB,KAAKo6e,OAAOvpb,OAAOo6c,oBAAoBqN,GACvC,IAAK,IAAIn8gB,EAAI,EAAGA,EAAIm8gB,EAAiBr1B,aAAaxmf,OAAQN,IAAK,CAC3D,IAAI2xD,EAAOwqd,EAAiBr1B,aAAa9mf,GACzCwxgB,EAAc1qB,aAAa56d,OAAOulf,EAAa,EAAG9/c,GAClDwqd,EAAiBr1B,aAAa56d,OAAOlsB,EAAG,GACxCA,IACAyxgB,IACA9/c,EAAK+0b,UAAY8qB,EAErB3tgB,KAAKo6e,OAAOvpb,OAAOwmd,kBAAkB1J,EAAe,EAAG,GACvDqvD,GAAyB,EACzB,IAAIrxjB,EAAS3L,KAAK4vE,UAAUg5e,aAAa1kiB,UAAUlkB,KAAK4vE,UAAUg5e,aAAa/vd,YAAY,KAAO,GAClG74F,KAAK4vE,UAAUg5e,aAAe5ojB,KAAKszf,qBAAqBqa,EAAehigB,IAI/EqxjB,GACAh9jB,KAAK2+jB,oBAAoBrmD,EAAkBt4gB,KAAK4vE,UAAW2sf,IAInEz7E,EAAOzlf,UAAU+hkB,cAAgB,SAAUv6E,EAAWmsE,EAAWx4D,EAAas1C,EAASzrC,EAAWk8D,GAC9F,IAAI7T,GAAY,EAChB1ojB,KAAKo6e,OAAOvpb,OAAOo6c,oBAAoBpoB,GACtBA,EAAUI,aAAa1kf,QAAQywjB,GAChD,IAAK,IAAI7yjB,EAAI0mf,EAAUI,aAAaxmf,OAAS,EAAGN,GAAK,EAAGA,IAAK,CACzD,IAAIkigB,EAAaxb,EAAUI,aAAa9mf,GACxC,GAAI6yjB,IAAc3wD,GAAcytC,IAAYztC,EAAY,CACpDr+f,KAAK4+jB,cAAcvgE,EAAY7H,EAAa6J,GAC5CqoD,GAAY,EACZ,MAEJ,GAAI5c,IAAYztC,EACZqqD,GAAY,EACZ1ojB,KAAK4+jB,cAAcvgE,EAAY,EAAGgC,OAEjC,CAAA,GAAI2uD,IAAc3wD,EAAY,CAC/Br+f,KAAK4+jB,cAAcvgE,EAAY7H,EAAax2f,KAAKo6e,OAAOxqa,UAAUipd,cAAcx6B,IAChF,MAEKqqD,GACL1ojB,KAAK4+jB,cAAcvgE,EAAY,EAAGr+f,KAAKo6e,OAAOxqa,UAAUipd,cAAcx6B,KAG1EqqD,IACA1ojB,KAAKgzjB,gBAAgBnwE,GACrB7if,KAAKo6e,OAAOvpb,OAAOwmd,kBAAkBx0B,EAAW,EAAG,KAM3D/B,EAAOzlf,UAAUujkB,cAAgB,SAAUvgE,EAAY7H,EAAa6J,GAEhE,IAAK,IADDvhf,EAAQ9e,KAAK4vE,UAAUipd,cAAcx6B,GAChCligB,EAAIkigB,EAAWjkf,SAAS3d,OAAS,EAAGN,GAAK,EAAGA,IAAK,CACtD,IAAIipJ,EAASi5W,EAAWjkf,SAASje,GACjC,GAAIkkgB,GAAavhf,EAAQsmI,EAAO3oJ,OAC5BqiB,GAASsmI,EAAO3oJ,WADpB,CAIA,IAAImpB,EAAWw/H,EAAO3oJ,OAClBqiB,EAAQuhf,GAAcvhf,EAAQ8G,EAAWy6e,IACzCz6e,EAAWy6e,GAAavhf,EAAQsmI,EAAO3oJ,SAE3C,IAAIipB,EAAa,EAOjB,GANI5G,EAAQsmI,EAAO3oJ,OAAS+5f,IACxB9we,EAAa8we,GAAe13e,EAAQsmI,EAAO3oJ,SAE3CqiB,EAAQuhf,IACRvhf,GAAUsmI,EAAO3oJ,OAASmpB,GAEX,IAAfF,GAAoBE,IAAaw/H,EAAO3oJ,OAClCuD,KAAKoohB,gBAAkBpohB,KAAKoohB,cAAc3iC,WAAazlf,KAAKoohB,cAAc1iC,YACxEtgW,aAAkBsvW,IAClB10f,KAAK4mjB,wBAAwBpijB,KAAK4gJ,GAI1CplJ,KAAK2rjB,qBAAqBvma,GAC1BplJ,KAAKu9jB,gBAAgBl/D,EAAWjkf,SAASje,IACzCkigB,EAAWjkf,SAASiO,OAAOlsB,EAAG,QAG7B,GAAIipJ,aAAkBovW,GAAgB,CAEvC,IAAI7xb,EAAO,IAAI6xb,GACf7xb,EAAKq7a,gBAAgBwH,WAAWpgW,EAAO44V,iBACvCr7a,EAAKl2C,KAAO24H,EAAO34H,KAAKuK,OAAOtR,EAAYE,EAAWF,GACtD1lB,KAAKu9jB,gBAAgB56f,GACrByiF,EAAO34H,KAAO24H,EAAO34H,KAAKprB,MAAM,EAAGqkB,GAAc0/H,EAAO34H,KAAKprB,MAAMukB,GAEvE,GAAI4we,GAAe13e,GAAS8G,EAAWF,GACnC,MAEJ5G,GAAU8G,EAAWF,KAM7Bo7d,EAAOzlf,UAAU23jB,gBAAkB,SAAUnwE,GACzC,GAAIA,EAAUI,aAAaxmf,OAAS,EAChC,IAAK,IAAIN,EAAI,EAAGA,EAAI0mf,EAAUI,aAAaxmf,OAAQN,IAAK,CAEjB,IADlB0mf,EAAUI,aAAa9mf,GACzBie,SAAS3d,QAAgBomf,EAAUI,aAAaxmf,OAAS,IACpEomf,EAAUI,aAAa56d,OAAOlsB,EAAG,GACjCA,OAWhB2kf,EAAOzlf,UAAUq2hB,eAAiB,SAAUn1hB,GACxC,IAAI+rf,EAAY,IAAIuc,QAAW1pgB,GAE/B,OADA6E,KAAK6+jB,cAAcv2E,EAAW/rf,GACvB+rf,GAQXxH,EAAOzlf,UAAUwjkB,cAAgB,SAAU5gkB,EAAaqqf,GAC/C7qf,EAAkB6qf,EAAU1K,mBAC7B3/e,EAAY2/e,gBAAkB,IAAImF,GAAiB9kf,GACnDA,EAAY2/e,gBAAgB4H,WAAW8C,EAAU1K,kBAEhDngf,EAAkB6qf,EAAUtK,mBAC7B//e,EAAY+/e,gBAAkB,IAAIgF,GAAiB/kf,GACnDA,EAAY+/e,gBAAgBwH,WAAW8C,EAAUtK,kBAEhDvgf,EAAkB6qf,EAAUyc,mBAC7B9mgB,EAAY8mgB,gBAAkBzc,EAAUyc,iBAEvCtngB,EAAkB6qf,EAAUgc,oBAC7BrmgB,EAAYqmgB,iBAAmBhc,EAAUgc,kBAExC7mgB,EAAkB6qf,EAAU0c,gBAC7B/mgB,EAAY+mgB,aAAe1c,EAAU0c,cAEpCvngB,EAAkB6qf,EAAU2c,gBAC7BhngB,EAAYgngB,aAAe3c,EAAU2c,cAEpCxngB,EAAkB6qf,EAAUtC,WAC7B/nf,EAAY+nf,QAAUsC,EAAUtC,UAQxClF,EAAOzlf,UAAUs2hB,mBAAqB,SAAUp1hB,GAC5C,IAAIiqf,EAAgB,IAAIX,GAUxB,OATKpof,EAAkBlB,EAAOypf,WAC1BQ,EAAcR,QAAUzpf,EAAOypf,SAE9Bvof,EAAkBlB,EAAOupf,qBAC1BU,EAAcV,kBAAoBvpf,EAAOupf,mBAExCrof,EAAkBlB,EAAOwpf,eAC1BS,EAAcT,YAAcxpf,EAAOwpf,aAEhCS,GAMX1F,EAAOzlf,UAAU42hB,qBAAuB,WACpCjyhB,KAAKo6e,OAAO0kF,kBACZ,IAAK,IAAIv7iB,EAAI,EAAGA,EAAIvjB,KAAKo6e,OAAOlvQ,MAAMzuO,OAAQ8mB,IAE1C,IAAK,IADDole,EAAa3of,KAAKo6e,OAAOlvQ,MAAM3nN,GAAGmue,YAAY,GACzCv1f,EAAI,EAAGA,EAAIwsf,EAAW1F,aAAaxmf,OAAQN,IAChD6D,KAAK++jB,4BAA4Bp2E,EAAW1F,aAAa9mf,KAOrE2kf,EAAOzlf,UAAU0jkB,4BAA8B,SAAU/qE,GACrD,GAAIA,aAAiBlR,GACZrlf,EAAkBu2f,EAAMpW,kBACrBngf,EAAkBu2f,EAAMpW,gBAAgBgG,aACxCnmf,EAAkBu2f,EAAMpW,gBAAgBgG,WAAWsC,UACnDzof,EAAkBuC,KAAKo6e,OAAO0kF,kBAC9B9+jB,KAAKo6e,OAAO0kF,mBAEhB9+jB,KAAKo6e,OAAO0kF,eAAet6jB,KAAKwvf,SAGnC,GAAIA,aAAiBjB,GACtB,IAAK,IAAI52f,EAAI,EAAGA,EAAI63f,EAAM/Q,aAAaxmf,OAAQN,IAC3C,IAAK,IAAIonB,EAAI,EAAGA,EAAIywe,EAAM/Q,aAAa9mf,GAAG8mf,aAAaxmf,OAAQ8mB,IAE3D,IAAK,IADD0/C,EAAO+wb,EAAM/Q,aAAa9mf,GAAG8mf,aAAa1/d,GACrC4C,EAAI,EAAGA,EAAI88C,EAAKggb,aAAaxmf,OAAQ0pB,IAC1CnmB,KAAK++jB,4BAA4B97f,EAAKggb,aAAa98d,KAWvE26d,EAAOzlf,UAAUw2hB,YAAc,SAAUhvb,GACrC,IAAIjzB,EAAY5vE,KAAKo6e,OAAOxqa,UAC5B5vE,KAAK+xhB,eAAe/xhB,KAAKo6e,OAAOxqa,WAChC5vE,KAAK0+a,YAAY,cACjB,IAAI1iZ,EAAS,IAAI2qd,GACZlpf,EAAkBolG,KACnB7mE,EAAOkqd,OAASrjZ,EAAKqjZ,QAEzBlmf,KAAKo6e,OAAOkV,MAAM9jB,mBAAoB,EAClC57Z,EAAU0qK,SACVt6O,KAAKs3jB,wBAAwB1nf,EAAUryE,MAAMslf,UAAW,aAAc7md,GAAQ,GAC9Eh8B,KAAKu3jB,gBAAgB3nf,EAAUryE,MAAMslf,WAAW,IAGhD7if,KAAKw3jB,mCAAmC,aAAcx7hB,GAAQ,GAElEh8B,KAAKyjjB,SAAS7ze,IASlBkxa,EAAOzlf,UAAUm5jB,uBAAyB,SAAUx4hB,EAAQsoe,EAAkBr3e,GAC1E,IAAI2iD,EAAY5vE,KAAKo6e,OAAOxqa,UACxBizB,EAAOjzB,EAAUgua,gBAAgB4zC,UACjCtlU,GAAW,EACX3uN,EAAQqyE,EAAUryE,MACjBqyE,EAAUqwd,YACX1iiB,EAAQqyE,EAAU/wD,KAEtB,IAAIy5f,EAAmB/6gB,EAAMslf,UAC7B,GAAIplf,EAAkBolG,GAAO,CACzB,MAAQplG,EAAkB66gB,EAAiB/e,iBAAmB+e,EAAiB/e,0BAA0BzW,IAClGw1B,EAAiB/e,eAAej/Q,YAAoF,IAAvEg+R,EAAiB/e,eAAe3b,gBAAgBgG,WAAWsC,QAC3GoyB,EAAmBA,EAAiB/e,eAEpC+e,EAAiB/e,gBAAkB+e,EAAiB/e,0BAA0BzW,KACJ,IAAvEw1B,EAAiB/e,eAAe3b,gBAAgBgG,WAAWsC,SAC9DoyB,EAAmBA,EAAiB/e,eACpC12Z,EAAO7iG,KAAKo6e,OAAO4wB,YAAYsN,EAAiB16B,gBAAgBgG,WAAWsC,QAC3Eh6R,GAAW,GAGnB,IAAI8yW,OAAiB7jkB,EACrB,IAAKsC,EAAkBolG,GAAO,CAC1B,IAAIo8d,EAAWj/jB,KAAKo6e,OAAO4wB,YAAYsN,EAAiB16B,gBAAgBgG,WAAWsC,QACnF84E,EAAiBh/jB,KAAKo6e,OAAOvpb,OAAO01b,aAAa04E,EAAU3mD,EAAiB16B,gBAAgBgG,WAAWmD,iBAE3G,GAAItpf,EAAkBolG,KAAWplG,EAAkBolG,KAAWm8d,EAAe16D,mBAAqBA,GAC9F06D,EAAeh6D,eAAiBhpe,GAAWgjiB,EAAehhF,gBAAgB/wd,aAAeA,GAClD,WAApC+xiB,EAAe16D,kBAAkC,CACpDp4S,GAAW,EACXrpH,EAAO,IAAIojZ,GACPjmf,KAAKo6e,OAAO99N,MAAM7/Q,OAAS,EAC3BomG,EAAKqjZ,OAASlmf,KAAKo6e,OAAO99N,MAAMt8Q,KAAKo6e,OAAO99N,MAAM7/Q,OAAS,GAAGypf,OAAS,EAGvErjZ,EAAKqjZ,OAAS,EAElB,IAAIG,EAAe,IAAIse,GASvB,GARI3kgB,KAAKo6e,OAAO+F,cAAc1jf,OAAS,EACnC4pf,EAAaD,eAAiBpmf,KAAKo6e,OAAO+F,cAAcngf,KAAKo6e,OAAO+F,cAAc1jf,OAAS,GAAG2pf,eAAiB,EAG/GC,EAAaD,eAAiB,EAElCvjZ,EAAKujZ,eAAiBC,EAAaD,eACnCpmf,KAAKo6e,OAAO+F,cAAc37e,KAAK6hf,GAChB,WAAXrqd,GAAkC,eAAXA,GAAsC,cAAXA,EAClDh8B,KAAKsrgB,cAAcjlB,EAAcrqd,EAAQ4zC,OAExC,CACD,IAAI04a,EAAY,IAAIuc,GAAWxe,GAC/BiC,EAAUgc,iBAAmBA,EAC7Bhc,EAAU0c,aAAehpe,EACA,WAArBsoe,EACAhc,EAAUtC,QAAU,EAGpBsC,EAAUtK,gBAAgB/wd,WAAaA,EAE3Cq7d,EAAU1K,gBAAgBqL,WAAa,GACvCX,EAAU1K,gBAAgBhgQ,iBAAmB,GAC7CyoQ,EAAajna,OAAO56E,KAAK8jf,GACzB14a,EAAUgua,gBAAgBmJ,gBAAkB,EAEhDn3a,EAAUgua,gBAAgBg0C,QAAQ/ub,QAE5BplG,EAAkBolG,IAASqpH,EACjCt8I,EAAUgua,gBAAgBg0C,QAAQ/ub,GAGlCjzB,EAAUgua,gBAAgBg0C,aAAQz2hB,IAG1C2lf,EAAOzlf,UAAUiwgB,cAAgB,SAAU4zD,EAAiBC,EAAUvvf,GAElE,IAAK,IADDwvf,GAAoB,IAAU,IAAU,IAAU,IAAU,KACvDjjkB,EAAI+ikB,EAAgB9/e,OAAO3iF,OAAQN,EAAI,EAAGA,IAAK,CACpD,IAAImsf,EAAY,IAAIuc,GAAWq6D,GAC/B,GAAIC,EAASxvjB,MAAM,UACf24e,EAAUgc,iBAAmB,SAC7Bhc,EAAU0c,aAAeo6D,EAAiBjjkB,EAAI,EAAIA,EAAI,EAAIA,EAAI,EAAI,GAClEmsf,EAAUtK,gBAAgB/wd,WAAa9wB,EAAI,GAAW,IAANA,EAAU,YAAc,aAEvE,CACD,GAAIgjkB,EAASxvjB,MAAM,cAAe,CAC9B,IAAK,IAAI4T,EAAI,EAAGA,EAAIpnB,EAAI,EAAGonB,IACvB+ke,EAAU0c,cAAgB,KAAOzhf,EAAI,GAAGrW,WAAa,IAEzDo7e,EAAUgc,iBAAmB,cAG7Bhc,EAAU0c,aAAe,KAAO7ogB,EAAI,GAAG+Q,WAAa,IACpDo7e,EAAUgc,iBAAmBnogB,EAAI,GAAM,EAAI,SACrCA,EAAI,GAAM,EAAI,YAAc,WAEtCmsf,EAAUtC,QAAU,EACpBsC,EAAU2c,aAAe9ogB,EAGzBmsf,EAAU1K,gBAAgBqL,WADpB,IAAN9sf,EACuC,GAGA,GAAKA,EAEhDmsf,EAAU1K,gBAAgBhgQ,iBAAmB,GAC7CshV,EAAgB9/e,OAAO56E,KAAK8jf,GAC5B14a,EAAUgua,gBAAgBmJ,gBAAkB5qf,IAMpD2kf,EAAOzlf,UAAU+sjB,QAAU,WACvB,IAAIx4e,EAAY5vE,KAAKo6e,OAAOxqa,UAC5B,GAAIA,EAAU0qK,QAAS,CAEnB,IAAIgwS,EAAiB16c,EAAU40b,oBAE/B,IAD8B/mgB,EAAkB6shB,GAG5C,YADA16c,EAAU6zd,oBAAoBnZ,GAIlC,IADIznC,EAAYjza,EAAUryE,MAAMslf,WAClBvoQ,YAA8D,IAAjDuoQ,EAAUjF,gBAAgBgG,WAAWsC,OAG5D,YADAlmf,KAAKqxhB,oBAAoBrxhB,KAAKo6e,OAAO4wB,YAAYnoB,EAAUjF,gBAAgBgG,WAAWsC,QAASrD,EAAUjF,gBAAgBgG,WAAWmD,gBAAkB,GAI9J/mf,KAAK0+a,YAAY,SACjB,IAAIgqI,GAAY,EAMhB,GALA1ojB,KAAK4vE,UAAUuxd,qBAAsB,EAChCvxd,EAAU0qK,UAEXouU,EAAY1ojB,KAAK6ojB,uBAAuBj5e,IAExC84e,EAAW,CACX94e,EAAU0/a,MAAM9jB,mBAAoB,EACpCxre,KAAK8ojB,uBACL,IAAIsC,EAAYprjB,KAAK2ojB,iBAAiB/4e,EAAUryE,OAC5C8hkB,EAAer/jB,KAAKszf,qBAAqB83D,EAAUvoE,UAAWuoE,EAAUz/iB,OAAOuB,YACnFlN,KAAKs/jB,uBAAuB1vf,EAAWA,EAAUryE,MAAMslf,UAAWjza,EAAUryE,MAAMs5gB,cAAejnc,EAAUryE,MAAMoO,QACjH3L,KAAKg4hB,2BAA2Bpod,EAAUryE,MAAO8hkB,GACjD,IAAI1tQ,EAAW/hP,EAAUryE,MAAMslf,UAAUoZ,WACrCx+f,EAAkBk0T,KAClBA,EAAW/hP,EAAUmpd,qBAAqBnpd,EAAUryE,MAAMslf,YAE9Djza,EAAUo5d,gBAAgBr3O,GAAU,GACpC3xT,KAAKkpjB,oBAILlpjB,KAAKyjjB,SAAS7ze,GAEd,IAAIiza,GACCplf,EADDolf,EAAYjza,EAAUryE,MAAMslf,UAAU0W,kBACJ1W,EAAUvoQ,WAE5CuoQ,EAAU/6W,UAAU1tH,SAASyoe,EAAU/6W,UAAU1tH,SAAS3d,OAAS,aAAc+3f,IACjFx0f,KAAKqpjB,2BAA2Bz5e,GAAW,EAAMiza,GAGzD7if,KAAK4vE,UAAUuxd,qBAAsB,GAEzCrgD,EAAOzlf,UAAUikkB,uBAAyB,SAAU1vf,EAAW6tf,EAAc7zD,EAAaj+f,GACtF,IAAIiigB,EAAc,EACdsK,EAAaulD,EAAaxrjB,MAC1B4we,EAAY,IAAIC,GAChBub,EAAa,IAAIlL,GAAWtQ,GAIhC,GAHAA,EAAUI,aAAaz+e,KAAK65f,GAE5Bxb,EAAUjF,gBAAgBqH,UAAYpC,EAClC+mB,IAAgB6zD,EAAa31b,WAAan8H,IAAWikE,EAAUipd,cAAcjvB,GAEzE6zD,EAAa7/E,gBAAgB+F,WACsB,WAAhD85E,EAAa7/E,gBAAgB+F,UAAUlsd,MAAqBgmiB,EAAa7/E,gBAAgB+F,UAAUr7c,gBAAgB0+c,IACtHnE,EAAUjF,gBAAgB+F,UAAY85E,EAAa7/E,gBAAgB+F,UAAUr7c,KACzB,mBAAhDm1hB,EAAa7/E,gBAAgB+F,UAAUlsd,MACvCord,EAAUjF,gBAAgBgG,WAAW4B,WAAWi4E,EAAa7/E,gBAAgBgG,YAEjF5jf,KAAK4vE,UAAUuxd,qBAAsB,IAGrCt+C,EAAUjF,gBAAgB4H,WAAWi4E,EAAa7/E,iBAClDiF,EAAU7E,gBAAgBwH,WAAWi4E,EAAaz/E,kBAGtD4vB,IACAsK,QAEC,CACDr1B,EAAUjF,gBAAgB4H,WAAWi4E,EAAa7/E,iBAClDiF,EAAU7E,gBAAgBwH,WAAWi4E,EAAaz/E,iBAClDy/E,EAAeA,EAAa5qE,cAAc7yf,KAAKo6e,SAC3Czue,EAAS,IAAMi+f,EAAYvM,gBAC3Br9f,KAAKoujB,YAAYqP,EAAc56E,EAAW,EAAG,EAAG46E,EAAa7gjB,WAAYjR,EAAQi+f,GAGrF6zD,EADiBA,EAAa9qE,kBACJ,GAE9Bib,GAAe6vD,EAAapqf,WAC5B,IAAI54D,EAAYgjjB,EAAav6E,gBACZzoe,EAAUwoe,aAChB56d,OAAOulf,EAAa,EAAG/qB,GAClCA,EAAUK,gBAAkBzoe,EAC5Booe,EAAU5we,MAAQimgB,EAClBl4gB,KAAKkujB,sBAAsBrrE,GAAW,GAEtC7if,KAAKo6e,OAAOvpb,OAAO0md,2BAA2BW,EAAYz9f,EAAWooe,GAAW,IAKpF/B,EAAOzlf,UAAU6yjB,sBAAwB,SAAUl6D,EAAOurE,GACtD,IAAIj7V,EAAY0vR,EAAM9Q,gBAAgBD,aAAa1kf,QAAQy1f,GAAS,EACpE,GAAIA,EAAM9Q,2BAA2BR,GAEjC,IAAK,IADD88E,EAAsBxrE,EAAM9Q,gBAAgBjxe,MACvCsR,EAAIvjB,KAAKo6e,OAAOlvQ,MAAM3sO,QAAQy1f,EAAM9Q,gBAAgBjzV,MAAO1sI,EAAIvjB,KAAKo6e,OAAOlvQ,MAAMzuO,OAAQ8mB,IAAK,CACnG,IAAI0sI,EAAOjwJ,KAAKo6e,OAAOlvQ,MAAM3nN,GAC7B,GAAI0sI,EAAKyhW,YAAY,GAAGz/e,QAAUutjB,EAQ9B,OAPA,IAAK,IAAIr5iB,EAAIm+M,EAAWn+M,EAAI8pI,EAAKyhW,YAAY,GAAGzO,aAAaxmf,OAAQ0pB,IAAK,CACtE,IAAI2hf,EAAc73W,EAAKyhW,YAAY,GAAGzO,aAAa98d,GACnDnmB,KAAKy/jB,YAAY33D,EAAay3D,GAElCj7V,EAAY,OAOnB,GAAI0vR,EAAM9Q,2BAA2B6O,GAGtC,IAAK,IAFDjwb,EAAQkyb,EAAM9Q,gBAAgByP,kBAC9B32N,EAAmBl6N,EAAMvjE,QAAQy1f,EAAM9Q,iBAClCn2e,EAAIivR,EAAkBjvR,EAAI+0D,EAAMrlE,OAAQsQ,IAAK,CAElD,IAAK,IADD+mQ,EAAShyM,EAAM/0D,GAAGk2e,aACbj2e,EAAIs3N,EAAWt3N,EAAI8mQ,EAAOr3Q,OAAQuQ,IACvChN,KAAKy/jB,YAAY3rT,EAAO9mQ,GAAIuyjB,GAEhCvjS,EAAmB,EACnB13D,EAAY,OAGf,GAAI0vR,EAAM9Q,2BAA2B+O,GACtC,IAAK,IAAI91f,EAAImoO,EAAWnoO,EAAI63f,EAAM9Q,gBAAgBD,aAAaxmf,OAAQN,IAAK,CACxE,IAAI8mE,EAAO+wb,EAAM9Q,gBAAgBD,aAAa9mf,GAC1C8mE,EAAKw9N,WAAauzN,EAAM9Q,gBAAgBjxe,OACxCjS,KAAKy/jB,YAAYx8f,EAAMs8f,QAI9B,GAAIvrE,EAAM9Q,2BAA2B6P,GACtC,IAAS52f,EAAImoO,EAAWnoO,EAAI63f,EAAM9Q,gBAAgBD,aAAaxmf,OAAQN,IAAK,CACxE,IAAIukE,EAAMszb,EAAM9Q,gBAAgBD,aAAa9mf,GAC7C6D,KAAKy/jB,YAAY/+f,EAAK6+f,GACtB,IAASh8iB,EAAI,EAAGA,EAAIm9C,EAAIuib,aAAaxmf,OAAQ8mB,IACzCm9C,EAAIuib,aAAa1/d,GAAGk9Q,SAAW//N,EAAIzuD,WAK1C,GAAI+hf,EAAM9Q,2BAA2BgP,GACtC,IAAS/1f,EAAImoO,EAAWnoO,EAAI63f,EAAM9Q,gBAAgBD,aAAaxmf,OAAQN,IAAK,CACxE,IAAIuqgB,EAAY1S,EAAM9Q,gBAAgBD,aAAa9mf,GACnD6D,KAAKy/jB,YAAY/4D,EAAW64D,KAIxCz+E,EAAOzlf,UAAUokkB,YAAc,SAAU9tE,EAAQ5ye,GACzCA,EACA4ye,EAAO1/e,QAGP0/e,EAAO1/e,SAGf6ue,EAAOzlf,UAAU6tjB,kBAAoB,WACjC,IAAIt5e,EAAY5vE,KAAKo6e,OAAOxqa,UACxB5vE,KAAKoohB,gBAAkB3qhB,EAAkBuC,KAAKoohB,cAAciK,yBAC5DryhB,KAAKusjB,sBAAsB38e,EAAUryE,OAAO,IAMpDujf,EAAOzlf,UAAU6sjB,YAAc,WAC3B,IAAIt4e,EAAY5vE,KAAKo6e,OAAOxqa,UAC5B,GAAIA,EAAU0qK,QACVt6O,KAAK0/jB,gBAAgB9vf,GAAW,OAE/B,CACD5vE,KAAK0+a,YAAY,aACjB,IAAIihJ,EAAgB3/jB,KAAK6pjB,uBAAuBj6e,GAAW,GACvD5vE,KAAKoohB,eAAiBpohB,KAAKoohB,cAAciK,yBACrCstC,EACA3/jB,KAAKoohB,cAAciK,4BAAyBl3hB,GAGxC6E,KAAKssjB,iBAAiB18e,IACtB5vE,KAAKusjB,sBAAsB38e,EAAU/wD,KAAK,GAE9C7e,KAAKyjjB,SAAS7ze,OAQ9Bkxa,EAAOzlf,UAAUukkB,6BAA+B,WAE5C,IAAK,IADD1M,GAA0B,EACrB/2jB,EAAI,EAAGA,EAAI6D,KAAK4mjB,wBAAwBnqjB,OAAQN,IAAK,CAC1D,IAAI0jkB,EAAW7/jB,KAAK4mjB,wBAAwBzqjB,GAC5C,GAA8B,IAA1B0jkB,EAASzgE,aAAoB,CAC7B,IAAI0gE,EAAgBD,EACpB,GAAIC,GAAiBA,EAAcr+jB,YAAgF,IAAnEzB,KAAK4mjB,wBAAwBrojB,QAAQuhkB,EAAcr+jB,WAAmB,CAClH,IAAImkB,EAAW5lB,KAAK4mjB,wBAAwBrojB,QAAQuhkB,EAAcr+jB,WAC9DikB,EAAa1lB,KAAK4mjB,wBAAwBrojB,QAAQuhkB,GACtD9/jB,KAAK4mjB,wBAAwBv+hB,OAAOzC,EAAU,GAC9C5lB,KAAK4mjB,wBAAwBv+hB,OAAO3C,EAAY,QAGhD1lB,KAAKu8iB,mBAAmBv8iB,KAAKoohB,cAAciK,uBAAuBl8d,QAClEn2D,KAAKoohB,cAAcmK,gBACnBvyhB,KAAKwrjB,iBAAiBsU,EAAczgkB,SACpCW,KAAKoohB,cAAcq0B,uBACnByW,GAA0B,MAG7B,CACD,IAAI6M,EAAcF,EAClB,GAAIE,GAAeA,EAAYt+jB,YAA8E,IAAjEzB,KAAK4mjB,wBAAwBrojB,QAAQwhkB,EAAYt+jB,WAAmB,CACxGmkB,EAAW5lB,KAAK4mjB,wBAAwBrojB,QAAQwhkB,EAAYt+jB,WAC5DikB,EAAa1lB,KAAK4mjB,wBAAwBrojB,QAAQwhkB,GACtD//jB,KAAK4mjB,wBAAwBv+hB,OAAOzC,EAAU,GAC9C5lB,KAAK4mjB,wBAAwBv+hB,OAAO3C,EAAY,QAGhD1lB,KAAKu8iB,mBAAmBv8iB,KAAKoohB,cAAciK,uBAAuBl8d,QAClEn2D,KAAKoohB,cAAcmK,gBACnBvyhB,KAAKwrjB,iBAAiBuU,EAAY1gkB,SAClCW,KAAKoohB,cAAcq0B,uBACnByW,GAA0B,GAKtC,OADAlzjB,KAAK4mjB,2BACEsM,GAKXpyE,EAAOzlf,UAAUwujB,uBAAyB,SAAUj6e,EAAWowf,GAC3D,IAAIL,EAAgB3/jB,KAAKigkB,8BAA8Brwf,EAAWowf,EAAapwf,EAAUryE,MAAOqyE,EAAU/wD,KACtGy/W,EAAe,IAAI84J,GAAaxnd,EAAU0/a,OAC1C87D,EAAYprjB,KAAKkgkB,cAAejujB,MAAO29D,EAAUg5e,eACjDt1S,EAAWtzQ,KAAK+riB,YAAYqf,EAAUvoE,UAAWuoE,EAAUz/iB,QAG/D,OAFA2yX,EAAas6J,yBAAyBtlR,EAASxlN,KAAMwlN,EAAS3nQ,QAC9DikE,EAAU62d,cAAcnoK,GAAc,GAC/BqhM,GAKX7+E,EAAOzlf,UAAUqkkB,gBAAkB,SAAU9vf,EAAW81a,GACpD,IAAI74Y,EAAU7sG,KAAKoohB,cAEnB,GAAIv7a,IAAY64Y,IAAc74Y,EAAQknV,WAAalnV,EAAQinV,UAAW,CAClE,IAAIqsI,EAActzd,EAAQq7V,UAAUr7V,EAAQq7V,UAAUzrc,OAAS,GAC3D2jkB,EAAiBpgkB,KAAK2ojB,iBAAiB/4e,EAAUryE,OACjD8ikB,EAAergkB,KAAK2ojB,iBAAiB/4e,EAAU/wD,KAEnD,GAA2B,wBAAvBshjB,EAAYhqgB,QAAoCgqgB,EAAY1X,iBAAmBzojB,KAAKszf,qBAAqB8sE,EAAev9E,UAAWu9E,EAAez0jB,OAAOuB,aACzJizjB,EAAYh3C,cAAgBnphB,KAAKszf,qBAAqB+sE,EAAax9E,UAAWw9E,EAAa10jB,OAAOuB,YAElG,YADA2/F,EAAQqzU,OAIhB,IAAI2iE,EAAYjza,EAAUryE,MAAMslf,UAC5By9E,EAAoB1wf,EAAUryE,MAAMs5gB,cACpClrgB,EAASikE,EAAUryE,MAAMoO,OACzBipf,EAAgB,EAChBilC,EAAYymC,EAAkB3rE,UAAUhpf,EAAQipf,GAChDxvW,EAASy0Y,EAAU74hB,QAEvB,GADA4zf,EAAgBilC,EAAU5nhB,MAEtBmzI,aAAkBkmW,IAAwC,IAArBlmW,EAAOmmW,WACxCZ,GAAcU,uBAAuBjmW,GAAS,CAC9C,IAAI3mI,EAAQ2mI,EAAOqmW,WACf5se,EAAMumI,EAAOomW,SAIjB,OAHA57a,EAAUryE,MAAM26hB,qBAAqBz5gB,EAAMqvC,KAAMrvC,EAAMqvC,KAAKpe,UAAUjxB,EAAO,IAC7EmxD,EAAU/wD,IAAIq5gB,qBAAqBr5gB,EAAIivC,KAAMjvC,EAAIivC,KAAKpe,UAAU7wB,EAAK,GAAK,QAC1E+wD,EAAUk1d,sBAAqB,GAIvC,GAAI1/Y,aAAkBkmW,IAAwC,IAArBlmW,EAAOmmW,UAAiB,CAC7D,IAAIszC,EAAajvd,EAAUird,wBAAwBz1Y,GACnD,GAAIy5Y,aAAsBvzC,GAMtB,OALAlmW,EAASy5Y,EAAWpzC,WACpB5I,EAAYz9V,EAAOt3F,KAAK+0b,UACxBl3e,EAASy5I,EAAOt3F,KAAKpe,UAAU01G,EAAQ,GACvCx1E,EAAU/wD,IAAIq5gB,qBAAqB9yY,EAAOt3F,KAAMniD,QAChDikE,EAAUk1d,sBAAqB,GAG1BjG,IAAez5Y,IAEpBy9V,GADAz9V,EAASy5Y,GACU/we,KAAK+0b,UACxBl3e,EAASy5I,EAAOt3F,KAAKpe,UAAU01G,EAAQA,EAAO3oJ,SAGtD,GAAI2oJ,IAAWA,aAAkBsvW,IAA8C,IAAxBtvW,EAAOg6W,cACvDh6W,EAAO84W,wBAAwBxJ,MAC9BtvW,aAAkBsvW,KAElB7R,GADAz9V,EAASA,EAAO84W,cACGpwc,KAAK+0b,UACxBl3e,EAASy5I,EAAOt3F,KAAKpe,UAAU01G,EAAQA,EAAO3oJ,SAE5B,IAAlB2oJ,EAAO3oJ,QAAgB2oJ,EAAOusK,oBAAoB+iM,IAAsBtvW,EAAO84W,wBAAwBxJ,IAAoB,CACvHj2e,EAAQ2mI,EAAO84W,aACfr/e,EAAMumI,EAAOusK,SASjB,OARA/hP,EAAUryE,MAAM26hB,qBAAqBz5gB,EAAMqvC,KAAMrvC,EAAMqvC,KAAKpe,UAAUjxB,EAAO,IAC7EmxD,EAAU/wD,IAAIq5gB,qBAAqBr5gB,EAAIivC,KAAMjvC,EAAIivC,KAAKpe,UAAU7wB,EAAK,GAAK,GAC1E7e,KAAK0+a,YAAY,aACjB1+a,KAAK6pjB,uBAAuBj6e,GAAW,GACnC5vE,KAAKssjB,iBAAiB18e,IACtB5vE,KAAKusjB,sBAAsB38e,EAAU/wD,KAAK,QAE9C7e,KAAKyjjB,SAAS7ze,GAOtB,GAHK81a,GACD1lf,KAAK0+a,YAAY,aAEjB/ya,IAAWikE,EAAU0nd,eAAez0C,IAAcjza,EAAUryE,MAAMs5gB,cAAcxZ,cAAe,CAC/F,GAAIxa,EAAUjF,gBAAgBgG,aAA+D,IAAjDf,EAAUjF,gBAAgBgG,WAAWsC,OAE7E,YADAlmf,KAAK6xhB,iBAAY12hB,GAGrB,GAAkD,IAA9C0nf,EAAUjF,gBAAgBhgQ,gBAE1B,YADA59O,KAAKsxhB,uBAAuB,kBAAmB,GAAG,GAAO,GAG7D,GAA6C,IAAzCzuC,EAAUjF,gBAAgBqL,WAE1B,YADAjpf,KAAKsxhB,uBAAuB,aAAc,GAAG,GAAO,GAGxD,GAAgD,SAA5CzuC,EAAUjF,gBAAgBj9c,cAE1B,YADA3gC,KAAKsxhB,uBAAuB,gBAAiB,QAAQ,GAAO,GAGhE,GAAIzuC,EAAUsP,kCAAkCrP,GAAiB,CAC7Dlza,EAAU0/a,MAAM9jB,mBAAoB,EACpC,IAAIwuD,EAAoBn3C,EAAUsP,uBAIlC,GAAI6nC,EAAkB1/S,UAClBt6O,KAAKiujB,YAAYj0B,GACjBh6hB,KAAKu9jB,gBAAgBvjC,OAEpB,CACDh6hB,KAAKiujB,YAAYprE,GACjB,IAAIwd,EAAYrggB,KAAKo6e,OAAOxqa,UAAUipd,cAAcmB,EAAkBlyZ,WAClEo8K,EAAgB81O,EAAkB/2C,aAAaxmf,OAAS,EACxD4hgB,OAAa,EACjB,IAAKxb,EAAUvoQ,UACX,IAAK,IAAIn+O,EAAI,EAAGA,EAAI0mf,EAAUI,aAAaxmf,OAAQN,IAC/CkigB,EAAaxb,EAAUI,aAAa9mf,GACpC69hB,EAAkB/2C,aAAaz+e,KAAK65f,GACpCxb,EAAUI,aAAa56d,OAAOlsB,EAAG,GACjCA,IACAkigB,EAAWxb,UAAYm3C,EAG/Bh6hB,KAAKo6e,OAAOvpb,OAAOwmd,kBAAkB2iB,EAAmB91O,EAAe,GACvEt0O,EAAUiie,QAAQ7X,EAAkB/2C,aAAa/+L,GAAgBm8M,GAAW,GAC5ErggB,KAAKu9jB,gBAAgB16E,GAEzB7if,KAAKugkB,wBAELvgkB,KAAKyjjB,SAAS7ze,QAIV5vE,KAAKoohB,gBACLpohB,KAAKoohB,cAAciK,4BAAyBl3hB,OAInD,CACIuqf,IACD91a,EAAU0/a,MAAM9jB,mBAAoB,GAExC,IAAI8sE,EAAgBt4iB,KAAK2ojB,iBAAiB/4e,EAAUryE,OAEhDuxW,GADAuvJ,EAAazub,EAAUryE,MAAMs5gB,cACdlrgB,EAAS,GACxBmjW,EAAe,IACfuvJ,EAAaA,EAAWZ,aACxB3uJ,EAAe9uW,KAAKo6e,OAAOxqa,UAAUipd,cAAcx6B,GAAcvvJ,GAErE9uW,KAAKwgkB,eAAeniE,EAAYzub,EAAWk/R,GAC3C9uW,KAAKk4hB,qBAAqBogB,EAAcz1D,UAAWy1D,EAAc3siB,OAAS,GAAG,GAC7E3L,KAAKugkB,wBACA76E,EAID1lf,KAAKk9e,oBAHLl9e,KAAKyjjB,SAAS7ze,KAO1Bkxa,EAAOzlf,UAAUklkB,sBAAwB,SAAU3X,GAC/C,IAAIh5e,EAAY5vE,KAAKo6e,OAAOxqa,UACxB5vE,KAAKoohB,gBAAkB3qhB,EAAkBuC,KAAKoohB,cAAciK,0BACxD50hB,EAAkBmrjB,IAClB5ojB,KAAKusjB,sBAAsB38e,EAAUryE,OAAO,GAC5CyC,KAAKoohB,cAAciK,uBAAuBlJ,YAAcnphB,KAAKoohB,cAAciK,uBAAuBo2B,iBAGlGzojB,KAAKoohB,cAAciK,uBAAuBo2B,eAAiBG,EAC3D5ojB,KAAKoohB,cAAciK,uBAAuBlJ,YAAcy/B,KAIpE9nE,EAAOzlf,UAAUmlkB,eAAiB,SAAUniE,EAAYzub,EAAWjkE,GAG/D,IAAK,IAFDmT,EAAQ,EACRqyP,EAAYktP,EAAWxb,UAAUI,aAAa1kf,QAAQ8/f,GACjDligB,EAAI,EAAGA,EAAIkigB,EAAWjkf,SAAS3d,OAAQN,IAAK,CACjD,IAAIipJ,EAASi5W,EAAWjkf,SAASje,GACjC,KAAIipJ,aAAkB2vW,IAAtB,CAGA,GAAIppf,EAASmT,EAAQsmI,EAAO3oJ,OAAQ,CAChC,IAAIm4f,EAAgBjpf,EAASmT,EAC7B,GAAInT,IAAWmT,GAA2B,IAAlBsmI,EAAO3oJ,OAC3BuD,KAAK2rjB,qBAAqBvma,GAC1Bi5W,EAAWjkf,SAASiO,OAAOlsB,EAAG,GAC9B6D,KAAKo6e,OAAOvpb,OAAOwmd,kBAAkBhZ,EAAWxb,UAAW1xO,EAAWh1Q,GACtE6D,KAAKu9jB,gBAAgBn4a,OAEpB,CACD,IAAIziF,EAAO,IAAI6xb,GACf7xb,EAAKq7a,gBAAgBwH,WAAWpgW,EAAO44V,iBACvCr7a,EAAKl2C,KAAO24H,EAAO34H,KAAKuK,OAAO49d,EAAe,GAC9CxvW,EAAO34H,KAAOk+d,GAAcpmf,OAAO6gJ,EAAO34H,KAAMmoe,EAAe,GAC/D50f,KAAKo6e,OAAOvpb,OAAOwmd,kBAAkBhZ,EAAWxb,UAAW1xO,EAAWh1Q,GACtE6D,KAAKu9jB,gBAAgB56f,GAEzB,MAEJ7jD,GAASsmI,EAAO3oJ,UAMxBqkf,EAAOzlf,UAAU8sjB,SAAW,WACxB,IAAIv4e,EAAY5vE,KAAKo6e,OAAOxqa,UAC5B,GAAIA,EAAU0qK,QACVt6O,KAAKygkB,aAAa7wf,GAAW,OAE5B,CAID5vE,KAAK0+a,YAAY,UACjB1+a,KAAKigkB,8BAA8Brwf,GAAW,EAAOA,EAAUryE,MAAOqyE,EAAU/wD,KAChF,IAAIy/W,EAAe,IAAI84J,GAAaxnd,EAAU0/a,OAC9Ctvf,KAAKg4hB,2BAA2B15J,EAAc1uT,EAAUg5e,cACxDh5e,EAAU62d,cAAcnoK,GAAc,GAEtCt+X,KAAKyjjB,SAAS7ze,KAoBtBkxa,EAAOzlf,UAAUolkB,aAAe,SAAU7wf,EAAW81a,GAEjD,IAAI7C,EAAYjza,EAAUryE,MAAMslf,UAC5Bl3e,EAASikE,EAAUryE,MAAMoO,OACzBipf,EAAgB,EAChBilC,EAAYh3C,EAAU8R,UAAU/kb,EAAUryE,MAAMoO,OAAQipf,GACxDxvW,EAASy0Y,EAAU74hB,QAEvB,GADA4zf,EAAgBilC,EAAU5nhB,MACtB4we,EAAUjF,gBAAgBgG,aAA+D,IAAjDf,EAAUjF,gBAAgBgG,WAAWsC,QAC7Elmf,KAAKo6e,OAAO8qC,oBAAgD,SAA1Bt1c,EAAUy0b,YAC5CrkgB,KAAK6xhB,iBAAY12hB,OAFrB,CASA,GAJKsC,EAAkB2nJ,IAAWwvW,IAAkBxvW,EAAO3oJ,QAAWgB,EAAkB2nJ,EAAOusK,YAC3FvsK,EAASA,EAAOusK,SAChBijM,EAAgB,IAEfn3f,EAAkB2nJ,GAAS,CAC5B,IAAIs7a,OAAqBvlkB,EACrBggiB,EAAavrd,EAAU+pd,oBAAoBv0Y,GAI/C,GAHI+1Y,aAAsBx9B,KACtB+iE,EAAqBvlC,IAEpB19hB,EAAkBijkB,IAAuBA,aAA8Bp1E,IACpC,IAAjCo1E,EAAmBn1E,UAMtB,OALAnmW,EAASs7a,EAAmBl1E,SAC5B3I,EAAYz9V,EAAOt3F,KAAK+0b,UACxBl3e,EAASy5I,EAAOt3F,KAAKpe,UAAU01G,EAAQ,GACvCx1E,EAAU/wD,IAAIq5gB,qBAAqB9yY,EAAOt3F,KAAMniD,QAChDikE,EAAUk1d,sBAAqB,GAG1B1/Y,IAAWs7a,IAEhB79E,GADAz9V,EAASs7a,GACU5ygB,KAAK+0b,UACxBl3e,EAASy5I,EAAOt3F,KAAKpe,UAAU01G,EAAQ,GACnCA,aAAkBkmW,IAAwC,IAArBlmW,EAAOmmW,WAC5C5/e,KAIZ,GAAIy5I,IAAWA,aAAkBsvW,IAA8C,IAAxBtvW,EAAOg6W,cACvDh6W,EAAOusK,oBAAoB+iM,MAC1BtvW,aAAkBsvW,KAElB7R,GADAz9V,EAASA,EAAOusK,UACG7jQ,KAAK+0b,UACxBl3e,EAASy5I,EAAOt3F,KAAKpe,UAAU01G,EAAQ,IAErB,IAAlBA,EAAO3oJ,QAAgB2oJ,EAAOusK,oBAAoB+iM,IAC/CtvW,EAAO84W,wBAAwBxJ,IAAoB,CACtD,IAAIisE,EAAgBv7a,EAAO84W,aACvB6hE,EAAc36a,EAAOusK,SACzB/hP,EAAUryE,MAAM26hB,qBAAqByoC,EAAc7ygB,KAAM6ygB,EAAc7ygB,KAAKpe,UAAUixhB,EAAe,IACrG/wf,EAAU/wD,IAAIq5gB,qBAAqB6nC,EAAYjygB,KAAMiygB,EAAYjygB,KAAKpe,UAAUqwhB,EAAa,GAAK,GAClG//jB,KAAK0+a,YAAY,UACjB1+a,KAAKigkB,8BAA8Brwf,GAAW,EAAOA,EAAUryE,MAAOqyE,EAAU/wD,KAChF,IAAIy/W,EAAe,IAAI84J,GAAaxnd,EAAU0/a,OAI9C,OAHAtvf,KAAKg4hB,2BAA2B15J,EAAc1uT,EAAUg5e,cACxDh5e,EAAU62d,cAAcnoK,GAAc,QACtCt+X,KAAKyjjB,SAAS7ze,GAItB,GAAIA,EAAUryE,MAAMs5gB,cAAcvZ,cAAgB3xf,IAAW3L,KAAKo6e,OAAOxqa,UAAUipd,cAAcjpd,EAAUryE,MAAMs5gB,eAAgB,CAC7H,GAAIh0B,EAAUuR,eAAiB32f,EAAkBolf,EAAUoZ,YACvD,OAEJ,IAAI+9B,OAAoB7+hB,EAEpBwygB,EAAgB/9b,EAAU2qd,sBAAsB13C,GACpD,GAAIplf,EAAkBkwgB,GAAgB,CAClC,GAAIhigB,EAAS,EACT,OAMA,GAHIk3e,EAAU0W,0BAA0BzW,KACpCk3C,EAAoBn3C,EAAU0W,gBAE9B1W,EAAU0W,0BAA0BxG,GACpC,OAEJ,GAAIt1f,EAAkBu8hB,GAClB,OAKPt0C,GACD1lf,KAAK0+a,YAAY,UAErB,IAAI0sI,EAAYprjB,KAAK2ojB,iBAAiB/4e,EAAUryE,OAMhD,GALAqyE,EAAUg5e,aAAe5ojB,KAAKszf,qBAAqB83D,EAAUvoE,UAAWuoE,EAAUz/iB,OAAOuB,YACrFlN,KAAKqujB,oBAAoBz+e,IACzB5vE,KAAKugkB,sBAAsB3wf,EAAUg5e,cAEzCh5e,EAAU0/a,MAAM9jB,mBAAoB,EAChCqX,EAAUvoQ,UAGV,GAFAt6O,KAAKiujB,YAAYprE,GACjB7if,KAAKu9jB,gBAAgB16E,GACjBplf,EAAkBkwgB,GAClB,GAAIlwgB,EAAkBu8hB,GAAoB,CAEtC,IAAI4mC,EAAgBhxf,EAAU+nd,wBAlCvBx8hB,GAkC0D,EAC7D6E,KAAKoohB,gBAAkB3qhB,EAAkBuC,KAAKoohB,cAAciK,0BAC5DryhB,KAAKusjB,sBAAsB38e,EAAUryE,OAAO,GAE5CyC,KAAKoohB,cAAciK,uBAAuBlJ,YAAcnphB,KAAKszf,0BAtC1Dn4f,EAsC6FylkB,EAAc1zjB,kBAIlH0iE,EAAUo5d,gBAAgBhP,GAAmB,GAC7Ch6hB,KAAKugkB,6BAIT3wf,EAAUo5d,gBAAgBr7B,GAAe,OAG5C,CACD9qB,EAAYA,EAAUgQ,cAAc7yf,KAAKo6e,QAEzC,IAAIk+B,EAAmBt4gB,KAAKo9f,eAAeva,EAAWA,EAAUjme,WAAY,EAAGgzD,EAAUryE,MAAMs5gB,cAAejnc,EAAUryE,MAAMoO,QAAQ,GACtI3L,KAAK2+jB,oBAAoBrmD,EAAkB1oc,EAAW,GACtD5vE,KAAKu9jB,gBAAgB16E,GACrB7if,KAAKg4hB,2BAA2Bpod,EAAUryE,MAAOqyE,EAAUg5e,cAC3Dh5e,EAAU62d,cAAc72d,EAAUryE,OAAO,GAG7CyC,KAAKyjjB,SAAS7ze,QAId5vE,KAAK6gkB,qBAAqBjxf,EAAW81a,EAAW7C,KAGxD/B,EAAOzlf,UAAUwlkB,qBAAuB,SAAUjxf,EAAW81a,EAAW7C,GAC/D6C,IACD91a,EAAU0/a,MAAM9jB,mBAAoB,EACpCxre,KAAK0+a,YAAY,WAEjB1+a,KAAKqujB,oBAAoBz+e,KACzB5vE,KAAKusjB,sBAAsB38e,EAAUryE,OAAO,GAC5CyC,KAAKoohB,cAAciK,uBAAuBlJ,YAAcnphB,KAAKoohB,cAAciK,uBAAuBo2B,gBAEtG,IAAInQ,EAAgBt4iB,KAAK2ojB,iBAAiB/4e,EAAUryE,OAChD8ggB,EAAazub,EAAUryE,MAAMs5gB,cAC7B/nK,EAAel/R,EAAUryE,MAAMoO,OAC/BikV,EAAahgR,EAAUipd,cAAcjpd,EAAUryE,MAAMs5gB,eACrD/nK,GAAgBlf,IAChByuK,EAAaA,EAAWD,SACxBtvJ,GAA8Blf,GAElC5vV,KAAKwgkB,eAAeniE,EAAYzub,EAAWk/R,GAC3C9uW,KAAKk4hB,qBAAqBogB,EAAcz1D,UAAWy1D,EAAc3siB,QAAQ,GACpE+5e,EAID1lf,KAAKk9e,oBAHLl9e,KAAKyjjB,SAAS7ze,IAMtBkxa,EAAOzlf,UAAUsjkB,oBAAsB,SAAU97E,EAAWjza,EAAW2sf,GACnE,IAAI9+jB,EAAkBolf,EAAUK,iBAAhC,CAGAL,EAAYA,EAAUgQ,cAAc7yf,KAAKo6e,QACzC,IAAIuzB,EAAgB/9b,EAAU2qd,sBAAsB13C,GACpD,KAAIA,EAAUuR,eAAiB32f,EAAkBolf,EAAUoZ,aAAex+f,EAAkBkwgB,IAA5F,CAIc9qB,EAAUK,2BAA2BR,IAAaG,EAAUK,gBAA1E,IACIjjb,OAAQ9kE,EAOZ,GALI8kE,EADA2P,EAAUmpd,qBAAqBl2C,aAAsBkQ,GAC7Cnjb,EAAUmpd,qBAAqBl2C,QAG/B1nf,EAERwygB,EAAcvZ,gBAAkB32f,EAAkBwiE,IAAUA,EAAM97D,SAASwpgB,EAActZ,iBACzF,GAAIkoE,EAAa,EAAG,CAKhB,IAAI5wjB,EAAS,EACb3L,KAAKiujB,YAAYprE,GACjB7if,KAAKo6e,OAAOvpb,OAAOo6c,oBAAoB0C,GACvC3tgB,KAAKo6e,OAAOvpb,OAAOo6c,oBAAoBpoB,GACvC,IAAK,IAAI1mf,EAAI0mf,EAAUI,aAAaxmf,OAAS,EAAGN,GAAK,EAAGA,IAEpD,IAAK,IADD2xD,EAAO+0b,EAAUI,aAAa9mf,GACzBonB,EAAIuqC,EAAK1zC,SAAS3d,OAAS,EAAG8mB,GAAK,EAAGA,IAAK,CAChD,IAAIviB,EAAU8sD,EAAK1zC,SAASmJ,GAC5B5X,GAAU3K,EAAQvE,OAClBkxgB,EAAc/wf,WAAWxC,SAASlf,QAAQ8F,GAC1CA,EAAQ8sD,KAAO6/c,EAAc/wf,WAIrC5c,KAAKo6e,OAAOvpb,OAAOwmd,kBAAkB1J,EAAe,EAAG,GACnDhigB,EAAS,IACTikE,EAAUg5e,aAAe5ojB,KAAKszf,qBAAqBqa,EAAehigB,EAAOuB,mBAKjF,GAAIqvjB,EAAa,EAAG,CAKC15E,EAAUI,aAAaxmf,OACzBkxgB,EAAchb,kBAC7Bgb,EAAgBA,EAAc9a,cAAc7yf,KAAKo6e,QACjDp6e,KAAKo6e,OAAOvpb,OAAOo6c,oBAAoB0C,GACvC3tgB,KAAKo6e,OAAOvpb,OAAOo6c,oBAAoBpoB,GACvC7if,KAAK8gkB,0BAA0Bj+E,EAAW8qB,GAC1C,IAASxxgB,EAAI,EAAGA,EAAIwxgB,EAAc1qB,aAAaxmf,OAAQN,IAAK,CACxD,IAAIipJ,EAASuoX,EAAc1qB,aAAa9mf,GACxCwxgB,EAAc1qB,aAAa56d,OAAOlsB,EAAG,GACrC0mf,EAAUI,aAAaz+e,KAAK4gJ,GAC5BA,EAAOy9V,UAAYA,EACnB1mf,IAEsC,IAAtCwxgB,EAAc1qB,aAAaxmf,QAC3BkxgB,EAAc1qB,aAAaz+e,KAAK,IAAI2uf,GAAWwa,IAEnD3tgB,KAAKiujB,YAAYtgD,GACjB3tgB,KAAKo6e,OAAOvpb,OAAOwmd,kBAAkBx0B,EAAW,EAAG,GACnD7if,KAAKu9jB,gBAAgB5vD,OAIjC7sB,EAAOzlf,UAAUylkB,0BAA4B,SAAUxoD,EAAkB3K,GACjE3tgB,KAAKo6e,OAAOxqa,UAAUg5e,eAAiB5ojB,KAAKszf,qBAAqBqa,EAAe,WAC3CxygB,IAArCwygB,EAAcrb,qBAEdtyf,KAAKo6e,OAAOxqa,UAAUg5e,aAAe5ojB,KAAKszf,qBAAqBglB,EAAkBt4gB,KAAKo6e,OAAOxqa,UAAUipd,cAAcvgB,EAAiBxwY,WAAW56H,cAGzJ4ze,EAAOzlf,UAAUixjB,iBAAmB,SAAU18e,GAC1C,OAAQ5vE,KAAKoohB,gBAAkB3qhB,EAAkBuC,KAAKoohB,cAAciK,yBAC7D50hB,EAAkBuC,KAAKoohB,cAAciK,uBAAuBlJ,cAEvEroC,EAAOzlf,UAAUgzjB,oBAAsB,SAAUz+e,GAC7C,OAAQ5vE,KAAKoohB,gBAAkB3qhB,EAAkBuC,KAAKoohB,cAAciK,yBAC7D50hB,EAAkBuC,KAAKoohB,cAAciK,uBAAuBo2B,iBAEvE3nE,EAAOzlf,UAAUgxjB,kBAAoB,WACjC,OAAOrsjB,KAAKo6e,OAAOkV,MAAMmvE,oBAAsBz+jB,KAAKoohB,cAAc1iC,WAGtE5E,EAAOzlf,UAAU4kkB,8BAAgC,SAAUrwf,EAAWowf,EAAalzS,EAAeq8P,GAC9F,IAAIwgB,EAAW78Q,EACX88Q,EAASzgB,EACRr8P,EAAcyrQ,cAAcpP,KAC7BwgB,EAAWxgB,EACXygB,EAAS98Q,GAEb,IAAIs+R,EAAYprjB,KAAK2ojB,iBAAiBhf,GACtC/5d,EAAUg5e,aAAe5ojB,KAAKszf,qBAAqB83D,EAAUvoE,UAAWuoE,EAAUz/iB,OAAOuB,YACzF,IAAIyyjB,GAAgB,EACpB,GAAIK,GAAer2B,EAASrR,kBAAkBsR,GAAS,CAEnD,GAAID,EAASh+hB,OAASi+hB,EAAOj+hB,QAAUg+hB,EAASh+hB,SAAWikE,EAAU+nd,mBAAmBiS,EAAO/mD,WAAY,CAEvG88E,EADgB/vf,EAAUmpd,qBAAqB4Q,EAAS9mD,qBACnBkQ,KAGnB,IAAlB62C,EAAOj+hB,QAAgBi+hB,EAAOj+hB,OAASikE,EAAU+nd,mBAAmBiS,EAAO/mD,aACtE+mD,EAAO/mD,UAAUuR,eAAiB32f,EAAkBmsiB,EAAO/mD,UAAUoZ,cAC1E+jE,GAAc,GAGtB,IAAKL,EAAe,CAChB/vf,EAAU0/a,MAAM9jB,mBAAoB,EAChCxre,KAAKqujB,oBAAoBz+e,KACzB5vE,KAAKoohB,cAAciK,uBAAuBo2B,eAAiB74e,EAAUg5e,cAEzE,IAAI2T,EAAcyD,EAAc,EAAI,EACpChgkB,KAAKsujB,sBAAsB1kB,EAAO/mD,UAAWjza,EAAW+5d,EAAUC,EAAQ2yB,GAE9E,OAAOoD,GAMX7+E,EAAOzlf,UAAUqjb,YAAc,SAAUvoX,GACjCn2D,KAAKo6e,OAAOkV,MAAMmvE,mBAClBz+jB,KAAKoohB,cAAcysC,kBAAkB1+f,IAO7C2qb,EAAOzlf,UAAUkhjB,mBAAqB,SAAUpmf,GACxCn2D,KAAKo6e,OAAOkV,MAAMmvE,mBAClBz+jB,KAAKoohB,cAAcm0B,mBAAmBv8iB,KAAKo6e,OAAOxqa,UAAWzZ,IAWrE2qb,EAAOzlf,UAAUyzjB,cAAgB,SAAU1kT,EAAcp0P,EAAOD,GAC5D,IAAIgrjB,EAAkB,IAAItsE,IAAgB,GAC1CssE,EAAgBlmP,YAAczwE,EAC9B22T,EAAgB/qjB,MAAQA,EACxB+qjB,EAAgBhrjB,OAASA,EACzB/V,KAAKghkB,sBAAsBD,IAE/BjgF,EAAOzlf,UAAU2lkB,sBAAwB,SAAUD,GAC/C,IAAInxf,EAAY5vE,KAAKo6e,OAAOxqa,UAC5B5vE,KAAK0+a,YAAY,gBACjB1+a,KAAKihkB,eAAerxf,EAAWmxf,GAC/B/gkB,KAAKksjB,wBAAwBt8e,EAAWmxf,GACxC/gkB,KAAKyjjB,SAAS7ze,IAElBkxa,EAAOzlf,UAAU4lkB,eAAiB,SAAUrxf,EAAWmxf,GACnD,IAAIruT,EAAU9iM,EAAUryE,MAAMslf,UAAU8F,WACpCjtN,EAAYhpB,EAAQiwO,cAAcjnN,UAAYhpB,EAAQiwO,cAAcz3P,WAAawnB,EAAQiwO,cAAcv3P,YACvG9L,EAAaozB,EAAQiwO,cAAcrjQ,WAAaozB,EAAQiwO,cAAcx3P,UAAYunB,EAAQiwO,cAAcx3P,UAExG41U,EAAgB/qjB,MAAQ0lR,IACxBqlS,EAAgBhrjB,OAASgrjB,EAAgBhrjB,OAAS2lR,EAAYqlS,EAAgB/qjB,MAC9E+qjB,EAAgB/qjB,MAAQ0lR,GAExBqlS,EAAgBhrjB,OAASupO,IACzByhV,EAAgB/qjB,MAAQ+qjB,EAAgB/qjB,MAAQspO,EAAayhV,EAAgBhrjB,OAC7EgrjB,EAAgBhrjB,OAASupO,IAOjCwhQ,EAAOzlf,UAAU6wjB,wBAA0B,SAAUt8e,EAAW8tb,GACxD19f,KAAKqsjB,sBACLz8e,EAAU0/a,MAAM9jB,mBAAoB,GAEnC57Z,EAAU0qK,SACXt6O,KAAK6ojB,uBAAuBj5e,GAEhC5vE,KAAK8ojB,uBACL9ojB,KAAK2sjB,qBAAqBjvD,GACtB19f,KAAKssjB,iBAAiB18e,IACtB5vE,KAAKusjB,sBAAsB38e,EAAUryE,OAAO,GAEhDyC,KAAKk9e,qBAKT4D,EAAOzlf,UAAU6lkB,WAAa,WAC1B,IAAIv+E,EAAgB,IAAIC,GACpB5se,EAAQhW,KAAKo6e,OAAOxqa,UAAU+ya,cAAcjnN,UAC5C3lR,EAAS/V,KAAKo6e,OAAOxqa,UAAU+ya,cAAcrjQ,WAC7CtpO,EAAQD,IACR4se,EAAcjnN,UAAY3lR,EAC1B4se,EAAcrjQ,WAAatpO,GAE/BhW,KAAKozhB,0BAAqBj4hB,EAAWwnf,IAKzC7B,EAAOzlf,UAAU8lkB,YAAc,WAC3B,IAAIx+E,EAAgB,IAAIC,GACpB5se,EAAQhW,KAAKo6e,OAAOxqa,UAAU+ya,cAAcjnN,UAC5C3lR,EAAS/V,KAAKo6e,OAAOxqa,UAAU+ya,cAAcrjQ,WAC7CtpO,EAAQD,IACR4se,EAAcjnN,UAAY3lR,EAC1B4se,EAAcrjQ,WAAatpO,GAE/BhW,KAAKozhB,0BAAqBj4hB,EAAWwnf,IAEzC7B,EAAOzlf,UAAU+lkB,WAAa,WAC1B,IAAIpliB,EAAS,IAAI4md,GASjB,OARA5md,EAAOqvN,aAAerrP,KAAKo6e,OAAOxqa,UAAU+ya,cAAct3P,aAC1DrvN,EAAOmvN,UAAYnrP,KAAKo6e,OAAOxqa,UAAU+ya,cAAcx3P,UACvDnvN,EAAOkvN,WAAalrP,KAAKo6e,OAAOxqa,UAAU+ya,cAAcz3P,WACxDlvN,EAAOovN,YAAcprP,KAAKo6e,OAAOxqa,UAAU+ya,cAAcv3P,YACzDpvN,EAAOsjN,WAAat/O,KAAKo6e,OAAOxqa,UAAU+ya,cAAcrjQ,WACxDtjN,EAAO0/P,UAAY17R,KAAKo6e,OAAOxqa,UAAU+ya,cAAcjnN,UACvD1/P,EAAOiye,eAAiBjugB,KAAKo6e,OAAOxqa,UAAU+ya,cAAcsrB,eAC5Djye,EAAO+sf,eAAiB/ohB,KAAKo6e,OAAOxqa,UAAU+ya,cAAcomC,eACrD/sf,GAKX8kd,EAAOzlf,UAAUgmkB,kBAAoB,SAAUr1iB,GAC3C,IAAI22d,EAAgB3if,KAAKohkB,aACR,sBAAbp1iB,GAAiD,WAAbA,GACpC22d,EAAcx3P,UAAY,GAC1Bw3P,EAAct3P,aAAe,GAC7Bs3P,EAAcz3P,WAAa,GAC3By3P,EAAcv3P,YAAc,IAEV,WAAbp/N,GACL22d,EAAcx3P,UAAY,GAC1Bw3P,EAAct3P,aAAe,GAC7Bs3P,EAAcz3P,WAAa,GAC3By3P,EAAcv3P,YAAc,IAEV,aAAbp/N,GACL22d,EAAcx3P,UAAY,GAC1Bw3P,EAAct3P,aAAe,GAC7Bs3P,EAAcz3P,WAAa,GAC3By3P,EAAcv3P,YAAc,IAEV,SAAbp/N,GACL22d,EAAcx3P,UAAY,GAC1Bw3P,EAAct3P,aAAe,GAC7Bs3P,EAAcz3P,WAAa,IAC3By3P,EAAcv3P,YAAc,KAEV,aAAbp/N,GACL22d,EAAcx3P,UAAY,GAC1Bw3P,EAAct3P,aAAe,GAC7Bs3P,EAAcz3P,WAAa,GAC3By3P,EAAcv3P,YAAc,IAEV,sBAAbp/N,IACL22d,EAAcx3P,UAAY,GAC1Bw3P,EAAct3P,aAAe,GAC7Bs3P,EAAcz3P,WAAa,GAC3By3P,EAAcv3P,YAAc,IAEhCprP,KAAKozhB,0BAAqBj4hB,EAAWwnf,IAKzC7B,EAAOzlf,UAAUimkB,YAAc,SAAUt1iB,GACrC,IAAI22d,EAAgB3if,KAAKohkB,aACrBprjB,EAAQhW,KAAKo6e,OAAOxqa,UAAU+ya,cAAcjnN,UAC5C3lR,EAAS/V,KAAKo6e,OAAOxqa,UAAU+ya,cAAcrjQ,WAChC,WAAbtzN,EACIhW,EAAQD,GACR4se,EAAcjnN,UAAY,MAC1BinN,EAAcrjQ,WAAa,QAG3BqjQ,EAAcjnN,UAAY,MAC1BinN,EAAcrjQ,WAAa,OAGb,YAAbtzN,EACDhW,EAAQD,GACR4se,EAAcjnN,UAAY,MAC1BinN,EAAcrjQ,WAAa,SAG3BqjQ,EAAcjnN,UAAY,OAC1BinN,EAAcrjQ,WAAa,OAGb,UAAbtzN,EACDhW,EAAQD,GACR4se,EAAcjnN,UAAY,MAC1BinN,EAAcrjQ,WAAa,SAG3BqjQ,EAAcjnN,UAAY,OAC1BinN,EAAcrjQ,WAAa,OAGb,cAAbtzN,EACDhW,EAAQD,GACR4se,EAAcjnN,UAAY,IAC1BinN,EAAcrjQ,WAAa,QAG3BqjQ,EAAcjnN,UAAY,MAC1BinN,EAAcrjQ,WAAa,KAGb,cAAbtzN,EACDhW,EAAQD,GACR4se,EAAcjnN,UAAY,MAC1BinN,EAAcrjQ,WAAa,QAG3BqjQ,EAAcjnN,UAAY,MAC1BinN,EAAcrjQ,WAAa,OAGb,OAAbtzN,EACDhW,EAAQD,GACR4se,EAAcjnN,UAAY,MAC1BinN,EAAcrjQ,WAAa,SAG3BqjQ,EAAcjnN,UAAY,OAC1BinN,EAAcrjQ,WAAa,OAGb,OAAbtzN,EACDhW,EAAQD,GACR4se,EAAcjnN,UAAY,MAC1BinN,EAAcrjQ,WAAa,QAG3BqjQ,EAAcjnN,UAAY,MAC1BinN,EAAcrjQ,WAAa,OAGb,OAAbtzN,EACDhW,EAAQD,GACR4se,EAAcjnN,UAAY,MAC1BinN,EAAcrjQ,WAAa,QAG3BqjQ,EAAcjnN,UAAY,MAC1BinN,EAAcrjQ,WAAa,OAGb,OAAbtzN,EACDhW,EAAQD,GACR4se,EAAcjnN,UAAY,MAC1BinN,EAAcrjQ,WAAa,SAG3BqjQ,EAAcjnN,UAAY,OAC1BinN,EAAcrjQ,WAAa,OAGb,OAAbtzN,IACDhW,EAAQD,GACR4se,EAAcjnN,UAAY,MAC1BinN,EAAcrjQ,WAAa,QAG3BqjQ,EAAcjnN,UAAY,MAC1BinN,EAAcrjQ,WAAa,QAGnCt/O,KAAKozhB,0BAAqBj4hB,EAAWwnf,IAMzC7B,EAAOzlf,UAAU47gB,uBAAyB,SAAUP,EAAUE,GAE1D,IADA,IAAI5iB,EAAQ4iB,EAAsB52gB,KAAKo6e,OAAOxqa,UAAUmpd,qBAAqBriB,GAAYA,GACjFj5gB,EAAkBu2f,IAEtBh0f,KAAKu5gB,wBAAwBvlB,GAC7BA,EAAQA,EAAMrB,kBAAkBvmW,MAAMkmW,oBAM9CxR,EAAOzlf,UAAU27gB,qBAAuB,SAAUhjB,GAC9Ch0f,KAAKo6e,OAAOk0B,cAAct+c,QAG1B,IAAK,IADDuxgB,EADAl7D,EAAerS,EAAMrL,WAAW12e,MAE3BsR,EAAI,EAAGA,EAAIvjB,KAAKo6e,OAAOlvQ,MAAMzuO,OAAQ8mB,IAAK,CAC/C,IAAI0sI,EAAOjwJ,KAAKo6e,OAAOlvQ,MAAM3nN,GAC7B,GAAI0sI,EAAKyhW,YAAY,GAAGz/e,QAAUo0f,EAAc,CAC5Ck7D,EAAetxa,EAAKyhW,YAAY,GAAG90e,WACnC,OAIR,EAAG,CAEC,GADgB5c,KAAKwhkB,gBAAgBD,EAAcvtE,GAE/C,MAEJutE,EAAeA,EAAa5uE,kBAAkBvmW,MAAMkmW,yBAC/CivE,IAEbzgF,EAAOzlf,UAAUmmkB,gBAAkB,SAAU9qD,EAAU1iB,GAQnD,OANI0iB,aAAoB5zB,GACJ9if,KAAKyhkB,uBAAuB/qD,EAAU1iB,GAGtCh0f,KAAK0hkB,wBAAwBhrD,EAAU1iB,IAI/DlT,EAAOzlf,UAAUqmkB,wBAA0B,SAAUzhgB,EAAO+zb,GACxD,GAAIA,aAAiBjB,IAAe9yb,EAAMpnB,OAAOm7c,GAC7C,OAAO,EAEX,IAAItzb,EAAMT,EAAMrjD,WAChB,EAAG,CAEC,GADoB5c,KAAK2hkB,sBAAsBjhgB,EAAKszb,GAEhD,OAAO,EAEXtzb,EAAMA,EAAIiyb,kBAAkBvmW,MAAMkmW,yBAC7B5xb,GACT,OAAO,GAEXogb,EAAOzlf,UAAUsmkB,sBAAwB,SAAUjhgB,EAAKszb,GACpD,GAAIA,EAAMI,gBAA6G,IAA5F1zb,EAAIuib,aAAa1kf,QAAQyB,KAAKo6e,OAAOxqa,UAAUowd,iBAAiBhsC,EAAMK,iBAE7F,OAAO,EAEX,IAAIpxb,EAAOvC,EAAI9jD,WACf,GACI5c,KAAK4hkB,uBAAuB3+f,EAAM+wb,GAClC/wb,EAAOA,EAAKqvb,yBACPrvb,GACT,OAAO,GAEX69a,EAAOzlf,UAAUumkB,uBAAyB,SAAU3+f,EAAM+wb,GACtD,GAAiC,IAA7B/wb,EAAKggb,aAAaxmf,OAAtB,CAGA,IAAI8kkB,EAAet+f,EAAKrmD,WACxB,GACI5c,KAAKwhkB,gBAAgBD,EAAcvtE,GACnCutE,EAAeA,EAAa5uE,kBAAkBvmW,MAAMkmW,yBAC/CivE,KAMbzgF,EAAOzlf,UAAUk+gB,wBAA0B,SAAUvlB,GAC7CA,aAAiBlR,GACjB9if,KAAK6hkB,+BAA+B7tE,GAGpCh0f,KAAK8hkB,gCAAgC9tE,IAG7ClT,EAAOzlf,UAAUymkB,gCAAkC,SAAU7hgB,GACzD,IAAIS,EAAMT,EAAMrjD,WAChB,GACI5c,KAAK+hkB,8BAA8BrhgB,GACnCA,EAAMA,EAAIiyb,kBAAkBvmW,MAAMkmW,yBAC7B5xb,IAEbogb,EAAOzlf,UAAU0mkB,8BAAgC,SAAUrhgB,GACvD,IAAIuC,EAAOvC,EAAI9jD,WACf,GACI5c,KAAKgikB,+BAA+B/+f,GACpCA,EAAOA,EAAKqvb,yBACPrvb,IAEb69a,EAAOzlf,UAAU2mkB,+BAAiC,SAAU/+f,GACxD,GAAiC,IAA7BA,EAAKggb,aAAaxmf,OAAtB,CAGA,IAAI8kkB,EAAet+f,EAAKrmD,WACxB,GACI5c,KAAKu5gB,wBAAwBgoD,GAC7BA,EAAeA,EAAa5uE,kBAAkBvmW,MAAMkmW,yBAC/CivE,KAEbzgF,EAAOzlf,UAAUomkB,uBAAyB,SAAU5+E,EAAWmR,GAC3D,GAAInR,EAAUhqc,OAAOm7c,GACjB,OAAO,EAGP,IAAIogE,OAAcj5jB,EACd4rf,EAAkB,EAMtB,GALKtpf,EAAkBolf,EAAUjF,kBAAqBngf,EAAkBolf,EAAUjF,gBAAgBgG,cAC9FwwE,EAAcp0jB,KAAKo6e,OAAO4wB,YAAYnoB,EAAUjF,gBAAgBgG,WAAWsC,QAC3Ea,EAAkBlE,EAAUjF,gBAAgBgG,WAAWmD,kBAGtDtpf,EAAkB22jB,KAAiB32jB,EAAkBuC,KAAKo6e,OAAOm0B,oBAAoB6lD,EAAYhuE,mBAE9F3of,EAAkBuC,KAAKo6e,OAAOm0B,oBAAoB6lD,EAAYhuE,gBAAgBhna,OAAO2na,IAAmB,CAGlE,WAFnB/mf,KAAKo6e,OAAOvpb,OAAO01b,aAAa6tE,EAAartE,GAE/Cud,kBACjBtkgB,KAAKo6e,OAAOvpb,OAAOu6c,cAAcvoB,EAAUjF,gBAAgBgG,YAIvE,OAAO,GAEX9C,EAAOzlf,UAAUwmkB,+BAAiC,SAAUh/E,GACxD,IAAKplf,EAAkBuC,KAAKo6e,OAAO4wB,YAAYnoB,EAAUjF,gBAAgBgG,WAAWsC,SAAU,CAC1F,IAAIkuE,EAAcp0jB,KAAKo6e,OAAO4wB,YAAYnoB,EAAUjF,gBAAgBgG,WAAWsC,QAC3Ea,EAAkBlE,EAAUjF,gBAAgBgG,WAAWmD,gBAC3D,IAAKtpf,EAAkB22jB,KAAiB32jB,EAAkBuC,KAAKo6e,OAAOm0B,oBAAoB6lD,EAAYhuE,mBAE9F3of,EAAkBuC,KAAKo6e,OAAOm0B,oBAAoB6lD,EAAYhuE,gBAAgBhna,OAAOyja,EAAUjF,gBAAgBgG,WAAWmD,kBAAmB,CAGjJ,GAA0C,WAFnB/mf,KAAKo6e,OAAOvpb,OAAO01b,aAAa6tE,EAAartE,GAE/Cud,iBAA+B,CAChD,IAAItjgB,OAAU7F,EACd,GAAI0nf,EAAUI,aAAaxmf,OAAS,EAAG,CACnC,IAAI4hgB,EAAaxb,EAAUI,aAAa,GACpCob,EAAWjkf,SAAS3d,OAAS,IAC7BuE,EAAUq9f,EAAWjkf,SAAS,IAGjC3c,EAAkBuD,KACnBA,EAAQyrB,KAAOzsB,KAAKo6e,OAAOvpb,OAAOu6c,cAAcvoB,EAAUjF,gBAAgBgG,iBAU9F9C,EAAOzlf,UAAUstjB,iBAAmB,SAAUz0iB,GAC1C,OAAOlU,KAAKiikB,yBAAyB/tjB,EAAS2igB,cAAe3igB,EAASvI,SAK1Em1e,EAAOzlf,UAAU4mkB,yBAA2B,SAAUn0gB,EAAMo0gB,GAIxD,IAHA,IAAIr/E,EAAY/0b,EAAK+0b,UACjBl3e,EAAS3L,KAAK4vE,UAAU+nd,mBAAmB90C,EAAW/0b,GAAQo0gB,EAC9D33b,EAAWs4W,EAAU6P,oBAClBnoX,aAAoBu4W,IACvBD,EAAYt4W,EACZ5+H,GAAU3L,KAAKo6e,OAAOxqa,UAAU+nd,mBAAmB90C,GACnDt4W,EAAWs4W,EAAU6P,oBAEzB,OAAS7P,UAAaA,EAAWl3e,OAAUA,IAM/Cm1e,EAAOzlf,UAAU2+d,eAAiB,SAAUpqZ,GACxC,GAAI5vE,KAAKy4hB,eAAgB,CACrB,IAAInlR,EAAWtzQ,KAAK+riB,YAAY/riB,KAAKy4hB,eAAgBz4hB,KAAKw2f,aAC1D5mb,EAAUryE,MAAMq6hB,oBAAoBtkR,EAASxlN,KAAMwlN,EAAS3nQ,QAGhE,GADAikE,EAAUryE,MAAMu6hB,wBAAuB,GACnClod,EAAU0qK,QACV1qK,EAAU/wD,IAAIk5gB,oBAAoBnod,EAAUryE,WAE3C,CACD,GAAIyC,KAAK04hB,aAAc,CACfplR,EAAWtzQ,KAAK+riB,YAAY/riB,KAAK04hB,aAAc14hB,KAAKqggB,WACxDzwb,EAAU/wD,IAAI+4gB,oBAAoBtkR,EAASxlN,KAAMwlN,EAAS3nQ,QAE9DikE,EAAU/wD,IAAIi5gB,wBAAuB,KAO7Ch3C,EAAOzlf,UAAU0wiB,YAAc,SAAUlpD,EAAWl3e,GAChD,IAEIlP,EAASuD,KAAK4vE,UAAU+nd,mBAAmB90C,GAC3Cv6c,EAAOu6c,EAAU+P,gBAIrB,IAHIjnf,EAASlP,EAAS,GAAKgB,EAAkB6qC,KACzC38B,EAASlP,GAENkP,EAASlP,GAAU6rC,aAAgBw6c,IACtCn3e,GAAUlP,EACVomf,EAAYv6c,EACZ7rC,EAASuD,KAAK4vE,UAAU+nd,mBAAmB90C,GAC3Cv6c,EAAOu6c,EAAU+P,gBAErB,OAAO5yf,KAAK4vE,UAAUm8d,YAAYlpD,EAAWl3e,IAKjDm1e,EAAOzlf,UAAU68hB,qBAAuB,SAAUr1C,EAAWl3e,EAAQmmiB,GACjE,IAAIlie,EAAY5vE,KAAKo6e,OAAOxqa,UACxB0jM,EAAWtzQ,KAAK+riB,YAAYlpD,EAAWl3e,GAC3CikE,EAAUryE,MAAMq6hB,oBAAoBtkR,EAASxlN,KAAMwlN,EAAS3nQ,QAC5DikE,EAAU/wD,IAAIk5gB,oBAAoBnod,EAAUryE,OACvCu0iB,GACDlie,EAAUk1d,sBAAqB,IAMvChkD,EAAOzlf,UAAU28hB,2BAA6B,SAAU15J,EAAcsqL,GAClE,IAAIwC,EAAYprjB,KAAKkgkB,cAAejujB,MAAO22iB,IACvCt1S,EAAWtzQ,KAAK+riB,YAAYqf,EAAUvoE,UAAWuoE,EAAUz/iB,QAC/D2yX,EAAas6J,yBAAyBtlR,EAASxlN,KAAMwlN,EAAS3nQ,SAKlEm1e,EAAOzlf,UAAU8mkB,iBAAmB,SAAUn9D,GAO1C,IAAIoU,EAAY,SALZpU,EADAvngB,EAAkBungB,GACH,GAGA,OAASA,GAEa,mBACzChlgB,KAAKoikB,aAAahpD,IAKtBt4B,EAAOzlf,UAAUgnkB,gBAAkB,SAAUr9D,GAOzC,IAAIoU,EAAY,aALZpU,EADAvngB,EAAkBungB,GACH,GAGA,KAAQA,GAEkB,iBAC7ChlgB,KAAKoikB,aAAahpD,IAEtBt4B,EAAOzlf,UAAU+mkB,aAAe,SAAUhpD,GACtC,IAAIv2B,EAAY,IAAIC,GAChBh1b,EAAO,IAAIqlc,GAAWtQ,GACtB4I,EAAa,IAAIH,GAAgB,GACrCx9b,EAAK1zC,SAAS5V,KAAKinf,GACnB,IAAI62E,EAAY,IAAI1jE,GACpB0jE,EAAU72E,WAAaA,EACvB62E,EAAU71iB,KAAO,IACjB,IAAIA,EAAO,IAAI+ne,GACf/ne,EAAKA,KAAO2sf,EACZtrd,EAAK1zC,SAAS5V,KAAKioB,GACnB,IAAIsxe,EAAiB,IAAIzS,GAAgB,GACzCyS,EAAetS,WAAaA,EAC5BA,EAAWsS,eAAiBA,EAC5Bjwc,EAAK1zC,SAAS5V,KAAKu5f,GACnBjwc,EAAK1zC,SAAS5V,KAAK89jB,GACnB,IAAI92E,EAAW,IAAIF,GAAgB,GACnCE,EAASC,WAAaA,EACtBD,EAASuS,eAAiBA,EAC1BA,EAAevS,SAAWA,EAC1BC,EAAWD,SAAWA,EACtB19b,EAAK1zC,SAAS5V,KAAKgnf,GACnBC,EAAW39b,KAAOA,EAClB+0b,EAAUI,aAAaz+e,KAAKspD,GAC5B,IAAI2kc,KACJA,EAAQjuf,KAAKq+e,GACb7if,KAAKo6e,OAAOxud,OAAOpnB,KAAKinf,GACxBzrf,KAAKsnjB,sBAAsB70D,IAK/B3R,EAAOzlf,UAAUknkB,eAAiB,SAAU9qiB,GACxC,IAAIkwf,EAAW,IAAIjzB,GAAmB,GACtCizB,EAASlwf,KAAOA,EAChB,IAAI+qiB,EAAc,IAAI9tE,GAAmB,GACzC8tE,EAAY/qiB,KAAOA,EACnBkwf,EAASlmhB,UAAY+gkB,EACrBA,EAAY/gkB,UAAYkmhB,EACxB3nhB,KAAKo6e,OAAO2sC,UAAU3ihB,IAAIqzB,EAAMkwf,GAChC3nhB,KAAKu8iB,mBAAmB,kBACxBv8iB,KAAKyikB,gBAAgBD,IAAe76C,IAChC3nhB,KAAKoohB,eACLpohB,KAAKoohB,cAAcs6C,+BAEvB1ikB,KAAK4vE,UAAUryE,MAAMi6hB,wBAAwB7P,EAAS75d,KAAM65d,EAAU,EAAG3nhB,KAAK4vE,UAAUryE,MAAMmwB,UAC9F1tB,KAAK4vE,UAAU/wD,IAAI24gB,wBAAwBgrC,EAAY10gB,KAAM00gB,EAAa,EAAGxikB,KAAK4vE,UAAU/wD,IAAI6O,UAChG1tB,KAAK4vE,UAAUk1d,sBAAqB,GACpC9kiB,KAAKk9e,qBAKT4D,EAAOzlf,UAAUsnkB,eAAiB,SAAUC,GACxC,IACIj7C,EADY3nhB,KAAKo6e,OAAO2sC,UACHr/gB,IAAIk7jB,GAC7B,GAAIj7C,aAAoBjzB,GAAoB,CACtBizB,EAASlmhB,UAC3BzB,KAAK0+a,YAAY,kBACb1+a,KAAKoohB,gBACLpohB,KAAKoohB,cAAciK,uBAAuBwwC,gBAAgBl7C,GAC1D3nhB,KAAKoohB,cAAcmK,iBAEvBvyhB,KAAK8ikB,uBAAuBn7C,GAEhC3nhB,KAAKk9e,qBAKT4D,EAAOzlf,UAAUynkB,uBAAyB,SAAUn7C,GAChD3nhB,KAAKo6e,OAAO2sC,UAAUxihB,OAAOojhB,EAASlwf,MACtCkwf,EAAS75d,KAAK1zC,SAASiO,OAAOs/f,EAAS/1B,aAAc,GACrD+1B,EAASlmhB,UAAUqsD,KAAK1zC,SAASiO,OAAOs/f,EAASlmhB,UAAUmwf,aAAc,IAK7E9Q,EAAOzlf,UAAU0nkB,iBAAmB,WAChC,IAAIxlkB,EAAQyC,KAAK4vE,UAAUryE,MACvBshB,EAAM7e,KAAK4vE,UAAU/wD,IACrBy7N,EAAUt6O,KAAK4vE,UAAU0qK,QACxBt6O,KAAK4vE,UAAUqwd,YAChB1iiB,EAAQyC,KAAK4vE,UAAU/wD,IACvBA,EAAM7e,KAAK4vE,UAAUryE,OAEzB,IAAIylkB,EAAmBzlkB,EAAMs5gB,cAAcliB,UAAUp3f,EAAMoO,OAAQ,GAC/Ds3jB,EAAiBpkjB,EAAIg4f,cAAcliB,UAAU91e,EAAIlT,OAAQ,GAE7D,OAASpO,MAASA,EAAM8B,QAASwf,IAAOA,EAAIxf,QAAS2jkB,iBAAoBA,EAAkBC,eAAkBA,EAAgB3oV,QAAWA,IAK5IwmQ,EAAOzlf,UAAUonkB,eAAiB,SAAUS,EAAaC,GACrD,IAAIx8iB,EAAO3mB,KAAK+ikB,mBACXtlkB,EAAkB0lkB,IACnBnjkB,KAAKojkB,uBAAuBz8iB,EAAKppB,MAAO4lkB,GAEvC1lkB,EAAkBylkB,IACnBljkB,KAAKojkB,uBAAuBz8iB,EAAK9H,IAAKqkjB,IAM9CpiF,EAAOzlf,UAAU+nkB,uBAAyB,SAAUlvjB,EAAUtQ,GAC1D5D,KAAK4vE,UAAUy5d,eAAen1hB,EAAUA,GACxClU,KAAK0+a,YAAY,kBACjB1+a,KAAK8ojB,uBACL,IAAIl0D,EAAgB,EAChBilC,EAAY75hB,KAAK4vE,UAAUryE,MAAMs5gB,cAAcliB,UAAU30f,KAAKo6e,OAAOxqa,UAAUryE,MAAMoO,OAAQipf,GAC7F25D,EAAY10B,EAAU74hB,QAC1B4zf,EAAgBilC,EAAU5nhB,MAC1B,IAAIwzR,EAAe7hS,EAAS,GAC5B5D,KAAKwujB,sBAAsBD,EAAW9oR,EAAcmvN,GAAe,GAGnE,IAAK,IAFD3if,EAAQwzR,EAAamsN,aACrButC,EAAc15P,EACTtpS,EAAI,EAAGA,EAAIyH,EAASnH,OAAQN,IACjCgjiB,EAAcv7hB,EAASzH,GACvBspS,EAAa33O,KAAK1zC,SAASiO,OAAOpW,EAAQ9V,EAAG,EAAGgjiB,GAEpDjrhB,EAASsjhB,wBAAwB2H,EAAYrxe,KAAMqxe,EAAaA,EAAY1iiB,OAAQuD,KAAK4vE,UAAUryE,MAAMmwB,UACzG1tB,KAAK4vE,UAAUy5d,eAAen1hB,EAAUA,GACpClU,KAAKoohB,gBACDpohB,KAAKssjB,oBACLtsjB,KAAKusjB,sBAAsBvsjB,KAAK4vE,UAAUryE,OAAO,GAErDyC,KAAKoohB,cAAcmK,kBAM3BzxC,EAAOzlf,UAAUi4f,qBAAuB,SAAUU,EAAOrof,GACrD,IAAIsG,EACJ,GAAI+hf,EAAO,CACP,GAAIA,aAAiB9B,GAAoB,CACrC,IAAImxE,GAAyD,IAA9CrvE,EAAMR,iBAAiBj1f,QAAQ,UAAmB,IAAM,IACnE2xJ,EAAY8jW,EAAM/jW,KAAKh+I,MAAM/E,WACTlN,KAAKo6e,OAAOgtB,gBAAgBpT,EAAMR,kBAAkBtmf,WAE5E+E,EADmB+hf,EAAM/jW,KAAKo2W,aACP,IAAMg9D,EAAW,IAAMnza,EAAY,IAAMvkJ,OAGhEsG,EAAQ+hf,EAAM/hf,MAAQ,IAAMtG,EAEhC,GAAIqof,EAAM9Q,gBAKN,OAJI8Q,aAAiBjC,IAAmBiC,EAAMvzN,WAAauzN,EAAM9Q,gBAAgBjxe,QAC7EA,EAAQ+hf,EAAMvzN,SAAW,IAAMxuR,EAC/B+hf,EAAQA,EAAM9Q,iBAEXljf,KAAKszf,qBAAqBU,EAAM9Q,gBAAiBjxe,GAGhE,OAAOA,GAKX6ue,EAAOzlf,UAAUs7iB,SAAW,SAAUziiB,GAClC,IAAIy0e,EAAa3of,KAAKsjkB,cAAcpvjB,GACpC,OAAOlU,KAAK62iB,iBAAiBluD,EAAYz0e,IAM7C4se,EAAOzlf,UAAUw7iB,iBAAmB,SAAUllD,EAAQz9e,GAClD,GAAuB,KAAnBA,EAASjC,QAAgBxU,EAAkByW,GAA/C,CAGA,IAAIjC,EAAQiC,EAASjC,MAAM1T,QAAQ,KAC/BvB,EAAQkX,EAASjC,MAAMiS,UAAU,EAAGjS,GACxCiC,EAASjC,MAAQiC,EAASjC,MAAMiS,UAAUjS,GAAO1C,QAAQ,IAAK,IAC9D,IAAIhP,EAAOoxf,EAOX1/e,EAAQ8iB,SAAS/3B,EAAO,IACxB,IAAI8qgB,EAAc9ngB,KAAKujkB,gBAAgB5xE,EAAQ1/e,GAC/C,IAAI61f,EAoBA,OAASvngB,KAAQA,EAAM2T,SAAYA,GAnBnC,IAAI7T,EAAQyngB,EACZ,KAAI5zf,EAASjC,MAAM1T,QAAQ,MAAQ,GAc/B,OAASgC,KAAQF,EAAO6T,SAAYA,GAbpC,GAAI7T,aAAiByif,GAIjB,OAHI5ue,EAASjC,MAAM1T,QAAQ,MAAQ,IAC/B2V,EAASjC,MAAQ,MAEZ1R,KAAQF,EAAO6T,SAAYA,GAExC,GAAI7T,aAAiBoxf,GAAQ,CACzB,IAAI+xE,EAAWxjkB,KAAK62iB,iBAAiBx2iB,EAAO6T,GAE5C,OAAS3T,KAAU9C,EAAkB+lkB,QAA6BrokB,EAAhBqokB,EAASjjkB,KAAkB2T,SAAczW,EAAkB+lkB,QAAiCrokB,EAApBqokB,EAAStvjB,UAU/I,OAAS3T,KAAQA,EAAM2T,SAAYA,KAKvC4se,EAAOzlf,UAAU6kkB,aAAe,SAAUhsjB,GAEtC,OAAS2ue,UADO7if,KAAKyjkB,qBAAqBzjkB,KAAKsjkB,cAAcpvjB,GAAWA,GACzCvI,OAAQopB,SAAS7gB,EAASjC,MAAO,MAMpE6ue,EAAOzlf,UAAUookB,qBAAuB,SAAUhpjB,EAAWvG,GACzD,IAAIzW,EAAkByW,EAASjC,OAA/B,CAIA,IAAIA,EAAQiC,EAASjC,MAAM1T,QAAQ,KAC/BvB,EAAQ,IACRiV,GAAS,IACTjV,EAAQkX,EAASjC,MAAMiS,UAAU,EAAGjS,GACpCiC,EAASjC,MAAQiC,EAASjC,MAAMiS,UAAUjS,GAAO1C,QAAQ,IAAK,KAKlE0C,EAAQ8iB,SAAS/3B,EAAO,IACpByd,aAAqBw3e,IAAkBhgf,GAASwI,EAAUwoe,aAAaxmf,SACvEyX,EAASjC,MAAQ,MACjBA,EAAQwI,EAAUwoe,aAAaxmf,OAAS,GAE5C,IAAIqrgB,EAAc9ngB,KAAKujkB,gBAAgB9ojB,EAAWxI,GAClD,GAAI61f,EAAa,CACb,IAAIzngB,EAAQyngB,EACZ,GAAIzngB,aAAiByif,GAIjB,OAHI5ue,EAASjC,MAAM1T,QAAQ,KAAO,IAC9B2V,EAASjC,MAAQ,KAEd5R,EAEX,GAAIA,aAAiBoxf,GAAQ,CACzB,GAAIv9e,EAASjC,MAAM1T,QAAQ,KAAO,EAC9B,OAAOyB,KAAKyjkB,qBAAqBpjkB,EAAO6T,GAIxC,GAAI7T,aAAiB0yf,GACjB,OAAO/yf,KAAKo6e,OAAOxqa,UAAUmnc,6BAA6B12gB,GAE9D,aAIP,GAAIoa,EAAW,CAChB,IAAIwhf,EAAaxhf,EAAUk4e,kBAAkBvmW,MAAMkmW,mBACnD,GAAI2J,aAAsBxK,GAEtB,OADAv9e,EAASjC,MAAQ,IACbgqf,aAAsBlJ,GACf/yf,KAAKo6e,OAAOxqa,UAAUmnc,6BAA6B9a,GAEvDA,KAKnBnb,EAAOzlf,UAAUiokB,cAAgB,SAAUpvjB,GACvC,IAAIjC,EAAQiC,EAASjC,MAAM1T,QAAQ,KAC/BvB,EAAQkX,EAASjC,MAAMiS,UAAU,EAAGjS,GACxCiC,EAASjC,MAAQiC,EAASjC,MAAMiS,UAAUjS,GAAO1C,QAAQ,IAAK,IAC9D,IAAI82f,EAAetxe,SAAS/3B,EAAO,IAKnC,OAJAiV,EAAQ8iB,SAAS/3B,EAAO,IACxBiV,EAAQiC,EAASjC,MAAM1T,QAAQ,KAGjB,OAFdvB,EAAQkX,EAASjC,MAAMiS,UAAU,EAAGjS,KAEL,MAAVjV,EACVgD,KAAK0jkB,sBAAsBxvjB,IAEtCjC,EAAQ8iB,SAAS/3B,EAAO,IACjBgD,KAAK2jkB,sBAAsBt9D,EAAcp0f,KAEpD6ue,EAAOzlf,UAAUqokB,sBAAwB,SAAUxvjB,GAE/C,IAAIjC,EAAQiC,EAASjC,MAAM1T,QAAQ,KAC/BvB,EAAQkX,EAASjC,MAAMiS,UAAU,EAAGjS,GACxCiC,EAASjC,MAAQiC,EAASjC,MAAMiS,UAAUjS,GAAO1C,QAAQ,IAAK,IAC9D,IAAIuc,EAAqB,MAAV9uB,EACfiV,EAAQiC,EAASjC,MAAM1T,QAAQ,KAC/BvB,EAAQkX,EAASjC,MAAMiS,UAAU,EAAGjS,GACpCiC,EAASjC,MAAQiC,EAASjC,MAAMiS,UAAUjS,GAAO1C,QAAQ,IAAK,IAC9D0C,EAAQ8iB,SAAS/3B,EAAO,IACxB,IAAIizJ,EAAOjwJ,KAAKo6e,OAAOlvQ,MAAMj5N,GAC7B,OAAI6Z,EACOmkI,EAAK4jW,aAGL5jW,EAAK6jW,cAGpBhT,EAAOzlf,UAAUsokB,sBAAwB,SAAUt9D,EAAc6R,GAC7D,IAAK,IAAI/7gB,EAAI,EAAGA,EAAI6D,KAAKo6e,OAAOlvQ,MAAMzuO,OAAQN,IAAK,CAC/C,IAAIwsf,EAAa3of,KAAKo6e,OAAOlvQ,MAAM/uO,GAAGu1f,YAAY,GAClD,GAAI/I,EAAW12e,QAAUo0f,GACjB1d,EAAW/re,WAAW3K,OAASimgB,GAAcvvB,EAAW7gX,UAAU71H,OAASimgB,EAC3E,OAAOvvB,EAGf,GAAIA,EAAW12e,MAAQo0f,EACnB,QAQZvlB,EAAOzlf,UAAUkokB,gBAAkB,SAAU9ojB,EAAWy9f,GACpD,IAAIpQ,EACJ,GAAIrtf,EAAW,CACX,IAAK,IAAI8I,EAAI,EAAGA,EAAI9I,EAAUwoe,aAAaxmf,OAAQ8mB,IAC/C,GAAI9I,EAAUwoe,aAAa1/d,GAAGtR,QAAUimgB,EAAY,CAChDpQ,EAAcrtf,EAAUwoe,aAAa1/d,GACrC,MAGR,KAAKukf,GAAiBrtf,aAAqBy3e,IACvC,OAAOlyf,KAAKujkB,gBAAgB9ojB,EAAUm4e,gBAAiBslB,GAG/D,OAAOpQ,GAKXhnB,EAAOzlf,UAAUkxjB,sBAAwB,SAAUr4iB,EAAU0vjB,GACzD,GAAI5jkB,KAAKoohB,gBAAkB3qhB,EAAkBuC,KAAKoohB,cAAciK,wBAAyB,CACrF,IAAI9+B,OAAoB,EACxB,GAAIr/e,aAAoBkjhB,GAAc,CAClC,IAAIg0B,EAAYprjB,KAAK2ojB,iBAAiBz0iB,GACtCq/e,EAAoBvzf,KAAKszf,qBAAqB83D,EAAUvoE,UAAWuoE,EAAUz/iB,OAAOuB,iBAGpFqmf,EAAoBr/e,EAEpB0vjB,EACA5jkB,KAAKoohB,cAAciK,uBAAuBo2B,eAAiBl1D,EAG3Dvzf,KAAKoohB,cAAciK,uBAAuBlJ,YAAc51B,IAQpEzS,EAAOzlf,UAAUwokB,aAAe,SAAUtzY,GACtCvwL,KAAK0+a,YAAY,WACjB,IAAIirH,EAAW3piB,KAAK4vE,UAAUqwd,UAAYjgiB,KAAK4vE,UAAUryE,MAAQyC,KAAK4vE,UAAU/wD,IAC5E+qhB,EAAS5piB,KAAK4vE,UAAUqwd,UAAYjgiB,KAAK4vE,UAAU/wD,IAAM7e,KAAK4vE,UAAUryE,MACxE0iE,EAAQ0pe,EAAS9mD,UAAUwR,eAAeJ,WAE9C,GADAh0b,EAAQA,EAAM4yb,cAAc7yf,KAAKo6e,QAC7Bp6e,KAAKoohB,cACapohB,KAAKovjB,wBAAwBnvf,GAEnC0pe,EAAS9mD,UAAUwR,eAAnC,IAEIvyb,EADAs2b,EAAUwxC,EAAO/mD,UAAUwR,eAE3B/vd,EAAStkC,KAAK8jkB,UAAUvzY,EAAS4kJ,YAAa5kJ,EAASnjG,UAAWmjG,EAASukN,aAC/E,GAAI90Y,KAAK4vE,UAAU0qK,QAEO,mBAAlB/pD,EAAS7pL,MAA+C,eAAlB6pL,EAAS7pL,MAC7B,eAAlB6pL,EAAS7pL,MACT0xf,EAAQ9D,WAAWr/N,QAAQzoR,KAAKg5e,WAAWlhd,GAEzB,mBAAlBisJ,EAAS7pL,MAA+C,eAAlB6pL,EAAS7pL,MAC7B,cAAlB6pL,EAAS7pL,MACT0xf,EAAQ9D,WAAWr/N,QAAQvoR,IAAI84e,WAAWlhd,GAExB,mBAAlBisJ,EAAS7pL,MAA+C,eAAlB6pL,EAAS7pL,MAC7B,gBAAlB6pL,EAAS7pL,MACT0xf,EAAQ9D,WAAWr/N,QAAQxoR,MAAM+4e,WAAWlhd,GAE1B,mBAAlBisJ,EAAS7pL,MAA+C,eAAlB6pL,EAAS7pL,MAC7B,iBAAlB6pL,EAAS7pL,MACT0xf,EAAQ9D,WAAWr/N,QAAQtoR,OAAO64e,WAAWlhd,GAE3B,eAAlBisJ,EAAS7pL,MAA2C,kBAAlB6pL,EAAS7pL,MACtB,yBAAlB6pL,EAAS7pL,MACZ0xf,EAAQ9D,WAAWr/N,QAAQxmK,SAAS+2X,WAAWlhd,GAE7B,eAAlBisJ,EAAS7pL,MAA2C,kBAAlB6pL,EAAS7pL,MACtB,2BAAlB6pL,EAAS7pL,MACZ0xf,EAAQ9D,WAAWr/N,QAAQzmK,WAAWg3X,WAAWlhd,GAE/B,aAAlBisJ,EAAS7pL,MACT1G,KAAK+jkB,qBAAqB3rE,EAAQ9D,WAAWr/N,aAGhD,CACD,GAAsB,mBAAlB1kG,EAAS7pL,MAA+C,cAAlB6pL,EAAS7pL,KAE/C,IAAK,IADDs9jB,EAAehkkB,KAAKikkB,+BACf9nkB,EAAI,EAAGA,EAAI6nkB,EAAavnkB,OAAQN,IACrC6nkB,EAAa7nkB,GAAGm4f,WAAWr/N,QAAQvoR,IAAI84e,WAAWlhd,GAG1D,GAAsB,mBAAlBisJ,EAAS7pL,MAA+C,eAAlB6pL,EAAS7pL,KAE/C,IADIs9jB,EAAehkkB,KAAKkkkB,gCACf/nkB,EAAI,EAAGA,EAAI6nkB,EAAavnkB,OAAQN,IACrC6nkB,EAAa7nkB,GAAGm4f,WAAWr/N,QAAQzoR,KAAKg5e,WAAWlhd,GAG3D,GAAsB,mBAAlBisJ,EAAS7pL,MAA+C,gBAAlB6pL,EAAS7pL,KAE/C,IADIs9jB,EAAehkkB,KAAKmkkB,iCACfhokB,EAAI,EAAGA,EAAI6nkB,EAAavnkB,OAAQN,IACrC6nkB,EAAa7nkB,GAAGm4f,WAAWr/N,QAAQxoR,MAAM+4e,WAAWlhd,GAG5D,GAAsB,mBAAlBisJ,EAAS7pL,MAA+C,iBAAlB6pL,EAAS7pL,KAE/C,IADIs9jB,EAAehkkB,KAAKokkB,kCACfjokB,EAAI,EAAGA,EAAI6nkB,EAAavnkB,OAAQN,IACrC6nkB,EAAa7nkB,GAAGm4f,WAAWr/N,QAAQtoR,OAAO64e,WAAWlhd,GAKjE,GAAsB,iBAAlBisJ,EAAS7pL,MAA6C,eAAlB6pL,EAAS7pL,MAA2C,mBAAlB6pL,EAAS7pL,MAC1D,aAAlB6pL,EAAS7pL,KAAqB,CACjCo7D,EAAQ9hE,KAAKqkkB,qCACb,IAASlokB,EAAI,EAAGA,EAAI2lE,EAAMrlE,OAAQN,IAAK,CACnC,IAAI8mE,EAAOnB,EAAM3lE,GACK,aAAlBo0L,EAAS7pL,KACTu8D,EAAKqxb,WAAWr/N,QAAQvoR,IAAI84e,WAAWxlf,KAAKskkB,eAG5CrhgB,EAAKqxb,WAAWr/N,QAAQvoR,IAAI84e,WAAWlhd,IAInD,GAAsB,eAAlBisJ,EAAS7pL,MAA2C,mBAAlB6pL,EAAS7pL,MAA+C,gBAAlB6pL,EAAS7pL,MAC5D,aAAlB6pL,EAAS7pL,KAAqB,CACjCo7D,EAAQ9hE,KAAKukkB,oCACb,IAASpokB,EAAI,EAAGA,EAAI2lE,EAAMrlE,OAAQN,IAAK,CAC/B8mE,EAAOnB,EAAM3lE,GACK,aAAlBo0L,EAAS7pL,KACTu8D,EAAKqxb,WAAWr/N,QAAQzoR,KAAKg5e,WAAWxlf,KAAKskkB,eAG7CrhgB,EAAKqxb,WAAWr/N,QAAQzoR,KAAKg5e,WAAWlhd,IAI9B,eAAlBisJ,EAAS7pL,MAA2C,aAAlB6pL,EAAS7pL,MAC3C1G,KAAKwkkB,gBAAgBlgiB,EAAQisJ,EAAS7pL,MAEpB,kBAAlB6pL,EAAS7pL,MAA8C,yBAAlB6pL,EAAS7pL,MACzB,2BAAlB6pL,EAAS7pL,MAAuD,aAAlB6pL,EAAS7pL,MAC1D1G,KAAKykkB,mBAAmBngiB,EAAQisJ,EAAS7pL,KAAMu5D,GAEnDjgE,KAAK0kkB,yBAAyBzkgB,GAAO,GACrCjgE,KAAKyjjB,SAASzjjB,KAAK4vE,WAAW,GAC9B5vE,KAAKoohB,cAAcmK,iBAEvBzxC,EAAOzlf,UAAUmpkB,gBAAkB,SAAUlgiB,EAAQqgiB,GAEjD,IAAK,IADD7igB,EAAQ9hE,KAAK4vE,UAAUo/d,mBAClB7yiB,EAAI,EAAGA,EAAI2lE,EAAMrlE,OAAQN,IACX,aAAfwokB,GACA7igB,EAAM3lE,GAAGm4f,WAAWr/N,QAAQzoR,KAAKg5e,WAAWxlf,KAAKskkB,eACjDxigB,EAAM3lE,GAAGm4f,WAAWr/N,QAAQxoR,MAAM+4e,WAAWxlf,KAAKskkB,eAClDxigB,EAAM3lE,GAAGm4f,WAAWr/N,QAAQvoR,IAAI84e,WAAWxlf,KAAKskkB,eAChDxigB,EAAM3lE,GAAGm4f,WAAWr/N,QAAQtoR,OAAO64e,WAAWxlf,KAAKskkB,iBAGnDxigB,EAAM3lE,GAAGm4f,WAAWr/N,QAAQzoR,KAAKg5e,WAAWlhd,GAC5Cw9B,EAAM3lE,GAAGm4f,WAAWr/N,QAAQxoR,MAAM+4e,WAAWlhd,GAC7Cw9B,EAAM3lE,GAAGm4f,WAAWr/N,QAAQvoR,IAAI84e,WAAWlhd,GAC3Cw9B,EAAM3lE,GAAGm4f,WAAWr/N,QAAQtoR,OAAO64e,WAAWlhd,KAI1Dw8c,EAAOzlf,UAAUopkB,mBAAqB,SAAUngiB,EAAQqgiB,EAAY1kgB,GAEhE,IAAK,IADD6B,EAAQ9hE,KAAK4vE,UAAUo/d,mBAClB7yiB,EAAI,EAAGA,EAAI2lE,EAAMrlE,OAAQN,IAAK,CACnC,IAAI8mE,EAAOnB,EAAM3lE,GACbyokB,EAAoB3hgB,EAAKixb,WAAapyb,EAAMA,EAAMrlE,OAAS,GAAGy3f,SAC9D2wE,EAAmB5hgB,EAAK0kQ,YAAc1kQ,EAAKqxb,WAAWn8N,WAAa,IAAOr2N,EAAMA,EAAMrlE,OAAS,GAAGkrU,YAatG,GAZmB,aAAfg9P,GACA1hgB,EAAKqxb,WAAWr/N,QAAQxoR,MAAM+4e,WAAWxlf,KAAKskkB,eAC9CrhgB,EAAKqxb,WAAWr/N,QAAQtoR,OAAO64e,WAAWxlf,KAAKskkB,iBAG1CO,GAAkC,2BAAfF,GACpB1hgB,EAAKqxb,WAAWr/N,QAAQxoR,MAAM+4e,WAAWlhd,GAExCsgiB,GAAoC,yBAAfD,GACtB1hgB,EAAKqxb,WAAWr/N,QAAQtoR,OAAO64e,WAAWlhd,KAG7CsgiB,GAAoC,yBAAfD,EAAuC,CAE7D,IAAIG,EAAe7hgB,EAAKixb,SAASzzN,SAAWx9N,EAAKqxb,WAAWr9N,QACxD4I,EAAU5/N,EAAMgjb,aAAa6hF,GACjC,GAAIjlS,EAEA,IAAK,IADDwkR,EAAgBrkjB,KAAK+kkB,oCAAoCllS,EAAS58N,GAAM,GACnE1/C,EAAI,EAAGA,EAAI8giB,EAAc5njB,OAAQ8mB,IACnB,aAAfohjB,EACAtgB,EAAc9giB,GAAG+we,WAAWr/N,QAAQvoR,IAAI84e,WAAWxlf,KAAKskkB,eAGxDjgB,EAAc9giB,GAAG+we,WAAWr/N,QAAQvoR,IAAI84e,WAAWlhd,GAKnE,IAAKugiB,GAAkC,2BAAfF,EAGpB,IAAK,IADDK,EAAmBhlkB,KAAKilkB,4BAA4BhigB,EAAMhD,GACrD95C,EAAI,EAAGA,EAAI6+iB,EAAiBvokB,OAAQ0pB,IACtB,aAAfw+iB,EACAK,EAAiB7+iB,GAAGmue,WAAWr/N,QAAQzoR,KAAKg5e,WAAWxlf,KAAKskkB,eAG5DU,EAAiB7+iB,GAAGmue,WAAWr/N,QAAQzoR,KAAKg5e,WAAWlhd,KAS3Ew8c,EAAOzlf,UAAU4okB,6BAA+B,WAK5C,IAAK,IAHD9rE,GADWn4f,KAAK4vE,UAAUqwd,UAAYjgiB,KAAK4vE,UAAUryE,MAAQyC,KAAK4vE,UAAU/wD,KACvDgke,UAAUwR,eAC/B6wE,KACApjgB,EAAQ9hE,KAAK4vE,UAAUo/d,mBAClB7yiB,EAAI,EAAGA,EAAI2lE,EAAMrlE,OAAQN,IAC1B2lE,EAAM3lE,GAAG+3f,WAAaiE,EAAUjE,UAChCgxE,EAAe1gkB,KAAKs9D,EAAM3lE,IAGlC,OAAO+okB,GAKXpkF,EAAOzlf,UAAU6okB,8BAAgC,WAK7C,IAAK,IAHD/rE,GADWn4f,KAAK4vE,UAAUqwd,UAAYjgiB,KAAK4vE,UAAUryE,MAAQyC,KAAK4vE,UAAU/wD,KACvDgke,UAAUwR,eAC/Bvyb,EAAQ9hE,KAAK4vE,UAAUo/d,mBACvBm2B,KACKhpkB,EAAI,EAAGA,EAAI2lE,EAAMrlE,OAAQN,IAC1B2lE,EAAM3lE,GAAGwrU,cAAgBwwL,EAAUxwL,aACnCw9P,EAAgB3gkB,KAAKs9D,EAAM3lE,IAGnC,OAAOgpkB,GAKXrkF,EAAOzlf,UAAU8okB,+BAAiC,WAG9C,IAAK,IAFDrigB,EAAQ9hE,KAAK4vE,UAAUo/d,mBACvBg2B,KACK7okB,EAAI,EAAGA,EAAI2lE,EAAMrlE,OAAQN,IACzB2lE,EAAM3lE,GAAGwrU,YAAc7lQ,EAAM3lE,GAAGm4f,WAAWn8N,WAAa,IAAOr2N,EAAMA,EAAMrlE,OAAS,GAAGkrU,aACxFq9P,EAAiBxgkB,KAAKs9D,EAAM3lE,IAGpC,OAAO6okB,GAKXlkF,EAAOzlf,UAAU+okB,gCAAkC,WAK/C,IAAK,IAHDhsE,GADSp4f,KAAK4vE,UAAUqwd,UAAYjgiB,KAAK4vE,UAAU/wD,IAAM7e,KAAK4vE,UAAUryE,OACvDslf,UAAUwR,eAC3Bvyb,EAAQ9hE,KAAK4vE,UAAUo/d,mBACvBo2B,KACKjpkB,EAAI,EAAGA,EAAI2lE,EAAMrlE,OAAQN,IAC1B2lE,EAAM3lE,GAAG+3f,WAAakE,EAAQlE,UAC9BkxE,EAAkB5gkB,KAAKs9D,EAAM3lE,IAGrC,OAAOipkB,GAKXtkF,EAAOzlf,UAAU0okB,qBAAuB,SAAU9uS,GAC9C,IAAI3wP,EAAStkC,KAAKskkB,cAClBrvS,EAAQtoR,OAAO64e,WAAWlhd,GAC1B2wP,EAAQzoR,KAAKg5e,WAAWlhd,GACxB2wP,EAAQxoR,MAAM+4e,WAAWlhd,GACzB2wP,EAAQvoR,IAAI84e,WAAWlhd,GACvB2wP,EAAQxmK,SAAS+2X,WAAWlhd,GAC5B2wP,EAAQzmK,WAAWg3X,WAAWlhd,IAElCw8c,EAAOzlf,UAAUipkB,YAAc,WAC3B,IAAIhgiB,EAAS,IAAIyod,GAEjB,OADAzod,EAAOy8R,UAAY,UACZz8R,GAKXw8c,EAAOzlf,UAAUgpkB,mCAAqC,WAClD,IAAIvigB,KACA6ne,EAAW3piB,KAAK4vE,UAAUryE,MAC1BqsiB,EAAS5piB,KAAK4vE,UAAU/wD,IACvB7e,KAAK4vE,UAAUqwd,YAChB0J,EAAW3piB,KAAK4vE,UAAU/wD,IAC1B+qhB,EAAS5piB,KAAK4vE,UAAUryE,OAE5B,IAAI0iE,EAAQ0pe,EAAS9mD,UAAUwR,eAAeJ,WAC9Ch0b,EAAQA,EAAM4yb,cAAc7yf,KAAKo6e,QACjC,IAAI+d,EAAYwxC,EAAS9mD,UAAUwR,eAC/B+D,EAAUwxC,EAAO/mD,UAAUwR,eAC3BywE,EAAe1sE,EAAQlE,SAASzzN,SAAW23N,EAAQ9D,WAAWr9N,QAC9D4I,EAAU5/N,EAAMgjb,aAAa6hF,GACjC,GAAIjlS,EACA,GAAIu4N,EAAQ9D,WAAWn8N,WAAa,EAChC,IAAK,IAAIh8R,EAAIi8f,EAAQzwL,YAAaxrU,EAAIi8f,EAAQzwL,YAAcywL,EAAQ9D,WAAWn8N,WAAYh8R,IACvF2lE,EAAMt9D,KAAKq7R,EAAQojN,aAAa9mf,SAKpC,GADA2lE,EAAQ9hE,KAAK+kkB,oCAAoCllS,EAASu4N,IACrDp4f,KAAK4vE,UAAU0qK,QAChB,IAASn+O,EAAI,EAAGA,EAAI0jS,EAAQojN,aAAaxmf,OAAQN,IAAK,CAClD,IAAIkpkB,EAAmBxlS,EAAQojN,aAAa9mf,GAAGwrU,YAC3C09P,GAAoBltE,EAAUxwL,aAAe09P,GAAoBjtE,EAAQzwL,aACzE7lQ,EAAMt9D,KAAKq7R,EAAQojN,aAAa9mf,IAMpD,OAAO2lE,GAEXg/a,EAAOzlf,UAAU0pkB,oCAAsC,SAAUllS,EAAS58N,EAAMqigB,GAC5E,IAAIxjgB,KACJ,GAAImB,EAAKqxb,WAAWn8N,WAAa,EAC7B,IAAK,IAAIh8R,EAAI8mE,EAAK0kQ,YAAaxrU,EAAI8mE,EAAK0kQ,YAAc1kQ,EAAKqxb,WAAWn8N,WAAYh8R,IAC9E2lE,EAAMt9D,KAAKq7R,EAAQojN,aAAa9mf,SAIpC,GAAI6D,KAAK4vE,UAAU0qK,SAAWgrV,EAC1B,IAASnpkB,EAAI,EAAGA,EAAI0jS,EAAQojN,aAAaxmf,OAAQN,IACzC0jS,EAAQojN,aAAa9mf,GAAGwrU,cAAgB1kQ,EAAK0kQ,aAC7C7lQ,EAAMt9D,KAAKq7R,EAAQojN,aAAa9mf,IAKhD,OAAO2lE,GAKXg/a,EAAOzlf,UAAUkpkB,kCAAoC,WACjD,IAAIzigB,KACAyjgB,EAAavlkB,KAAK4vE,UAAUryE,MAC5BiokB,EAAWxlkB,KAAK4vE,UAAU/wD,IACzB7e,KAAK4vE,UAAUqwd,YAChBslC,EAAavlkB,KAAK4vE,UAAU/wD,IAC5B2mjB,EAAWxlkB,KAAK4vE,UAAUryE,OAE9B,IAAI0iE,EAAQslgB,EAAW1iF,UAAUwR,eAAeJ,WAChDh0b,EAAQA,EAAM4yb,cAAc7yf,KAAKo6e,QACjBmrF,EAAW1iF,UAAUwR,eACvBmxE,EAAS3iF,UAAUwR,eACjC,GAAIr0f,KAAK4vE,UAAU0qK,QAAS,CACxB,IAAI0pV,EAAeuB,EAAW1iF,UAAUwR,eACxCvyb,EAAQ9hE,KAAKilkB,4BAA4BjB,EAAc/jgB,QAKvD,IAAK,IADDokf,EAAgBrkjB,KAAKmkkB,iCAChBhokB,EAAI,EAAGA,EAAIkojB,EAAc5njB,OAAQN,IAAK,CAC3C,IAAI8mE,EAAOohf,EAAclojB,GACzB2lE,EAAQA,EAAMvnD,OAAOva,KAAKilkB,4BAA4BhigB,EAAMhD,IAGpE,OAAO6B,GAEXg/a,EAAOzlf,UAAU4pkB,4BAA8B,SAAUjB,EAAc/jgB,GACnE,IAAI6B,KAIJ,GAHIkigB,EAAa/nE,YACbn6b,EAAMt9D,KAAKw/jB,EAAa/nE,YAExB+nE,EAAa1vE,WAAWr9N,QAAU,EAElC,IAAK,IADD6tS,EAAed,EAAa9vE,SAASzzN,SAAWujS,EAAa1vE,WAAWr9N,QACnE96R,EAAI6nkB,EAAa9vE,SAASzzN,SAAW,EAAGtkS,EAAI2okB,EAAc3okB,IAAK,CACpE,IAAI0jS,EAAU5/N,EAAMgjb,aAAa9mf,GACjC,GAAI0jS,EACA,IAAK,IAAIt8Q,EAAI,EAAGA,EAAIs8Q,EAAQojN,aAAaxmf,OAAQ8mB,IACzCs8Q,EAAQojN,aAAa1/d,GAAGokT,cACxBq8P,EAAa/nE,WAAWt0L,aACxB7lQ,EAAMt9D,KAAKq7R,EAAQojN,aAAa1/d,IAMpD,OAAOu+C,GAKXg/a,EAAOzlf,UAAUyokB,UAAY,SAAU3uP,EAAa/nP,EAAW0nT,GAC3D,IAAIxwW,EAAS,IAAIyod,GAIjB,OAHAzod,EAAO9N,MAAQ2+S,GAAe,UAC9B7wS,EAAO8oD,UAAYA,GAAa,EAChC9oD,EAAOy8R,UAAY+zE,GAAe,SAC3BxwW,GAQXw8c,EAAOzlf,UAAUoqkB,qBAAuB,SAAU52C,EAAeg1C,GACxDpmkB,EAAkBoxhB,IAAmBpxhB,EAAkBoxhB,KACnDpxhB,EAAkBoxhB,EAAcnihB,MACjC1M,KAAK0lkB,YAAY72C,EAAcnihB,IAAKm3jB,EAAan3jB,KAEhDjP,EAAkBoxhB,EAAclihB,SACjC3M,KAAK0lkB,YAAY72C,EAAclihB,OAAQk3jB,EAAal3jB,QAEnDlP,EAAkBoxhB,EAAcrihB,OACjCxM,KAAK0lkB,YAAY72C,EAAcrihB,KAAMq3jB,EAAar3jB,MAEjD/O,EAAkBoxhB,EAAcpihB,QACjCzM,KAAK0lkB,YAAY72C,EAAcpihB,MAAOo3jB,EAAap3jB,OAElDhP,EAAkBoxhB,EAAcrga,aACjCxuH,KAAK0lkB,YAAY72C,EAAcrga,WAAYq1c,EAAar1c,YAEvD/wH,EAAkBoxhB,EAAcpga,WACjCzuH,KAAK0lkB,YAAY72C,EAAcpga,SAAUo1c,EAAap1c,UAErDhxH,EAAkBoxhB,EAAcngC,aACjC1uf,KAAK0lkB,YAAY72C,EAAcngC,WAAYm1E,EAAan1E,YAEvDjxf,EAAkBoxhB,EAAcpgC,eACjCzuf,KAAK0lkB,YAAY72C,EAAcpgC,aAAco1E,EAAap1E,gBAUtE3N,EAAOzlf,UAAUsqkB,aAAe,SAAU12C,EAAe02C,GAChDlokB,EAAkBkokB,IAAkBlokB,EAAkBwxhB,KAClDxxhB,EAAkBkokB,EAAah0gB,kBAC7Bs9d,EAAct9d,kBAAoBg0gB,EAAah0gB,kBAClDs9d,EAAct9d,gBAAkBg0gB,EAAah0gB,iBAE5Cl0D,EAAkBkokB,EAAax2E,kBAC7B8/B,EAAc9/B,kBAAoBw2E,EAAax2E,kBAClD8/B,EAAc9/B,gBAAkBw2E,EAAax2E,iBAE5C1xf,EAAkBkokB,EAAav2E,eAC7B6/B,EAAc7/B,eAAiBu2E,EAAav2E,eAC/C6/B,EAAc7/B,aAAeu2E,EAAav2E,gBAItDtO,EAAOzlf,UAAUqqkB,YAAc,SAAU12C,EAAc02C,GAC9CjokB,EAAkBuxhB,IAAkBvxhB,EAAkBiokB,KAClDjokB,EAAkBiokB,EAAYlviB,QAC5Bw4f,EAAax4f,QAAUkviB,EAAYlviB,QACtCw4f,EAAax4f,MAAQkviB,EAAYlviB,OAEhC/4B,EAAkBiokB,EAAY3kQ,YAC5BiuN,EAAajuN,YAAc2kQ,EAAY3kQ,YAC1CiuN,EAAajuN,UAAY2kQ,EAAY3kQ,WAEpCtjU,EAAkBiokB,EAAYt4e,YAC5B4hc,EAAa5hc,YAAcs4e,EAAYt4e,YAC1C4hc,EAAa5hc,UAAYs4e,EAAYt4e,WAEpC3vF,EAAkBiokB,EAAY1zhB,SAC5Bg9e,EAAah9e,SAAW0zhB,EAAY1zhB,SACvCg9e,EAAah9e,OAAS0zhB,EAAY1zhB,QAEjCv0C,EAAkBiokB,EAAY7niB,QAC5Bmxf,EAAanxf,QAAU6niB,EAAY7niB,QACtCmxf,EAAanxf,MAAQ6niB,EAAY7niB,SAU7Cijd,EAAOzlf,UAAUuqkB,cAAgB,SAAU5piB,GACvC,IAAKv+B,EAAkBuC,KAAK4vE,UAAUkgb,aAAc,CAChD9vf,KAAKo6e,OAAOkV,MAAM9jB,mBAAoB,EACtCxre,KAAKoohB,cAAcysC,kBAAkB,eACrC,IAAI50f,EAAQjgE,KAAK4vE,UAAUryE,MAAMslf,UAAUwR,eAAeJ,WAAWpB,cAAc7yf,KAAKo6e,QACxFp6e,KAAK6lkB,iBAAiB5lgB,OAAO9kE,EAAW6gC,GACxCh8B,KAAKyjjB,SAASzjjB,KAAK4vE,WAAW,KAMtCkxa,EAAOzlf,UAAUwqkB,iBAAmB,SAAU5lgB,EAAOj0C,EAAUhvB,GAC3DgD,KAAK66jB,wBAAwB76jB,KAAKo6e,OAAOxqa,eAAWz0E,EAAW6B,EAAOijE,IAG1E6gb,EAAOzlf,UAAUw/jB,wBAA0B,SAAUjrf,EAAW5jD,EAAUhvB,EAAOijE,GAC7E,IAAIuud,EAAevud,EAAM6vb,YACpBryf,EAAkBuC,KAAKoohB,cAAciK,0BACtCr1hB,EAAQgD,KAAKoohB,cAAciK,uBAAuByzC,2BAA2Bt3C,EAAcxigB,EAAUhvB,IAErGA,aAAiBqyf,GACb5xf,EAAkBuuB,IAClBhsB,KAAK+lkB,kBAAkBv3C,EAAcxxhB,IAI5B,mBAAbgvB,EACAwigB,EAAax+B,eAAiBhzf,EAEZ,eAAbgvB,EACLwigB,EAAavlC,WAAajsf,EAER,mBAAbgvB,EACLwigB,EAAaz+B,eAAiB/yf,EAEZ,gBAAbgvB,EACLwigB,EAAa53P,YAAc55R,EAET,eAAbgvB,EACLwigB,EAAatjS,WAAaluP,EAER,gBAAbgvB,EACLwigB,EAAapjS,YAAcpuP,EAET,cAAbgvB,EACLwigB,EAAarjS,UAAYnuP,EAEP,iBAAbgvB,EACLwigB,EAAanjS,aAAeruP,EAEV,uBAAbgvB,IACLwigB,EAAav+B,mBAAqBjzf,GAErB,YAAbgvB,EACAwigB,EAAat/B,QAAUlyf,EAEL,YAAbgvB,IACLwigB,EAAav5P,QAAUj4R,KAM/B8jf,EAAOzlf,UAAU0qkB,kBAAoB,SAAUj2E,EAAak2E,IACpDhmkB,KAAK8mjB,2BAA6B9mjB,KAAKoohB,cAAc3iC,WAClDzlf,KAAKoohB,cAAc1iC,aACjBjof,EAAkBqyf,EAAY76N,UAC/Bj1R,KAAKylkB,qBAAqB31E,EAAY76N,QAAS+wS,EAAY/wS,SAE1Dx3R,EAAkBqyf,EAAYZ,UAC/Blvf,KAAK2lkB,aAAa71E,EAAYZ,QAAS82E,EAAY92E,UAGtDlvf,KAAK8mjB,4BACFkf,EAAY7gF,SAAS,mBAAqB6gF,EAAYh2E,iBAAmBF,EAAYE,iBACrFF,EAAYE,eAAiBg2E,EAAYh2E,gBAEzCg2E,EAAY7gF,SAAS,uBAAyB6gF,EAAY/1E,qBAAuBH,EAAYG,qBAC7FH,EAAYG,mBAAqB+1E,EAAY/1E,oBAE7C+1E,EAAY7gF,SAAS,mBAAqB6gF,EAAYj2E,iBAAmBD,EAAYC,iBACrFD,EAAYC,eAAiBi2E,EAAYj2E,gBAEzCi2E,EAAY7gF,SAAS,eAAiB6gF,EAAY/8E,aAAe6G,EAAY7G,aAC7E6G,EAAY7G,WAAa+8E,EAAY/8E,aAG7Cjpf,KAAK0kkB,yBAAyB50E,EAAY7K,WAAW,IAEzDnE,EAAOzlf,UAAUqpkB,yBAA2B,SAAUzkgB,EAAOgmgB,GACrDhmgB,EAAMq1b,cACNr1b,EAAMy4b,eAAe,GACrBz4b,EAAMm2b,gBACNn2b,EAAM42b,eAAgB,GAE1B72f,KAAKo6e,OAAOvpb,OAAO2md,cAAcv3c,IASrC6gb,EAAOzlf,UAAU6qkB,YAAc,SAAUlqiB,GACrC,IAAIv+B,EAAkBuC,KAAK4vE,aAAcnyE,EAAkBu+B,GAA3D,CAGAh8B,KAAKoohB,cAAcysC,kBAAkB,aACrC70jB,KAAKo6e,OAAOkV,MAAM9jB,mBAAoB,EACtC,IAAI26F,EAAcnmkB,KAAK4vE,UAAUqwd,UAAYjgiB,KAAK4vE,UAAUryE,MAAQyC,KAAK4vE,UAAU/wD,IAC/EunjB,EAAYpmkB,KAAK4vE,UAAUqwd,UAAYjgiB,KAAK4vE,UAAU/wD,IAAM7e,KAAK4vE,UAAUryE,MACnE4okB,EAAYtjF,UAAUwR,eAAeJ,WAAWpB,cAAc7yf,KAAKo6e,QAC/Ep6e,KAAKi8jB,eAAekK,EAAYtjF,UAAUwR,eAAeH,SAAUiyE,EAAaC,OAAWjrkB,EAAW6gC,GACtGh8B,KAAKyjjB,SAASzjjB,KAAK4vE,WAAW,KAElCkxa,EAAOzlf,UAAU4gkB,eAAiB,SAAUv7f,EAAKnjE,EAAOshB,EAAKmN,EAAUhvB,GAEnE,GADAgD,KAAKg7jB,sBAAsBh7jB,KAAKo6e,OAAOxqa,UAAW5jD,EAAUhvB,EAAO0jE,GAC/D7hD,EAAIgke,UAAUwR,eAAeH,WAAaxzb,EAA9C,CAGA,IAAI+uf,EAAS/uf,EAAIu7b,WACZx+f,EAAkBgyjB,IACnBzvjB,KAAKi8jB,eAAexM,EAAQlyjB,EAAOshB,EAAKmN,EAAUhvB,KAG1D8jf,EAAOzlf,UAAU2/jB,sBAAwB,SAAUprf,EAAW5jD,EAAUhvB,EAAO0jE,GAC3E,IAAIslgB,EAActlgB,EAAIy1b,UACjB14f,EAAkBuC,KAAKoohB,cAAciK,0BACtCr1hB,EAAQgD,KAAKoohB,cAAciK,uBAAuBg0C,yBAAyBL,EAAah6iB,EAAUhvB,IAElGA,aAAiBkzf,GACbzyf,EAAkBuuB,IAClBhsB,KAAKsmkB,gBAAgBtpkB,EAAOgpkB,IAInB,eAAbh6iB,EACAg6iB,EAAY11E,WAAatzf,EAEP,WAAbgvB,EACLg6iB,EAAYjwjB,OAAS/Y,EAEH,aAAbgvB,EACLg6iB,EAAYl6iB,SAAW9uB,EAEL,0BAAbgvB,IACLg6iB,EAAYr1E,sBAAwB3zf,GAEnCS,EAAkBijE,EAAIuzb,aACvBj0f,KAAKu3jB,gBAAgB72f,EAAIuzb,YAAY,KAG7CnT,EAAOzlf,UAAUirkB,gBAAkB,SAAUtqiB,EAAQgqiB,GAC7ChqiB,EAAOmpd,SAAS,0BAA4Bnpd,EAAO20d,wBAA0Bq1E,EAAYr1E,wBACzFq1E,EAAYr1E,sBAAwB30d,EAAO20d,uBAE3C30d,EAAOmpd,SAAS,aAAenpd,EAAOlQ,WAAak6iB,EAAYl6iB,WAC/Dk6iB,EAAYl6iB,SAAWkQ,EAAOlQ,UAE9BkQ,EAAOmpd,SAAS,eAAiBnpd,EAAOs0d,aAAe01E,EAAY11E,aACnE01E,EAAY11E,WAAat0d,EAAOs0d,YAEhCt0d,EAAOmpd,SAAS,WAAanpd,EAAOjmB,SAAWiwjB,EAAYjwjB,SAC3DiwjB,EAAYjwjB,OAASimB,EAAOjmB,QAEhC/V,KAAK0kkB,yBAAyBsB,EAAY/gF,UAAUgP,YAAY,IASpEnT,EAAOzlf,UAAUkrkB,aAAe,SAAUvqiB,GAClCv+B,EAAkBuC,KAAK4vE,YAAcnyE,EAAkBu+B,KAG3Dh8B,KAAKoohB,cAAcysC,kBAAkB,cACrC70jB,KAAK87jB,oBAAoB97jB,KAAK4vE,eAAWz0E,EAAW6gC,GACpDh8B,KAAKyjjB,SAASzjjB,KAAK4vE,WAAW,KAKlCkxa,EAAOzlf,UAAUmrkB,kBAAoB,SAAU52f,EAAW5yE,GACtD,IAAIypkB,EAAoB72f,EAAUryE,MAC9BmpkB,EAAkB92f,EAAU/wD,IAC3B+wD,EAAUqwd,YACXwmC,EAAoB72f,EAAU/wD,IAC9B6njB,EAAkB92f,EAAUryE,OAEhCyC,KAAKk0jB,oBAAoBtkf,EAAW62f,GAEpCzmkB,KAAKo6e,OAAOkV,MAAMtjB,wBAAwB26F,sBAAsBF,EAAkB5jF,UAAUwR,eAAeH,SAAUuyE,EAAmBC,EAAiB1pkB,IAK7J8jf,EAAOzlf,UAAUygkB,oBAAsB,SAAUlsf,EAAW5jD,EAAUhvB,GAClE,IAAIO,EAAQqyE,EAAUryE,MAClBshB,EAAM+wD,EAAU/wD,IACf+wD,EAAUqwd,YACX1iiB,EAAQqyE,EAAU/wD,IAClBA,EAAM+wD,EAAUryE,OAOpB,IAAK,IAHDukE,EAFAq2b,EAAY56f,EAAMslf,UAAUwR,eAC5B+D,EAAUv5e,EAAIgke,UAAUwR,eAExBp0b,EAAQk4b,EAAUlE,WAAWpB,cAAc7yf,KAAKo6e,QAE3Cj0d,EAAIgye,EAAUxwL,YAAaxhT,GAAKiye,EAAQzwL,YAAaxhT,IAAK,CAC/D27C,EAAQ9hE,KAAK4mkB,wBAAwBzuE,EAAUlE,WAAYkE,EAAUjE,SAASzzN,SAAUt6Q,EAAGiye,EAAQlE,SAASzzN,UAC5G,IAAK,IAAItkS,EAAI,EAAGA,EAAI2lE,EAAMrlE,OAAQN,IACd6D,KAAKk7jB,uBAAuBl7jB,KAAKo6e,OAAOxqa,UAAW5jD,EAAUhvB,EAAO8kE,EAAM3lE,GAAGm4f,YAGrGt0f,KAAK0kkB,yBAAyBzkgB,GAAO,IAKzC6gb,EAAOzlf,UAAUurkB,wBAA0B,SAAU3mgB,EAAO+wf,EAAerpP,EAAak/P,GAEpF,IAAK,IADD/kgB,KACK3lE,EAAI60jB,EAAe70jB,GAAK0qkB,EAAa1qkB,IAE1C,IAAK,IADDukE,EAAMT,EAAMgjb,aAAa9mf,GACpBonB,EAAI,EAAGA,EAAIm9C,EAAIuib,aAAaxmf,OAAQ8mB,IACrCm9C,EAAIuib,aAAa1/d,GAAGokT,cAAgBA,GACpC7lQ,EAAMt9D,KAAKk8D,EAAIuib,aAAa1/d,IAIxC,OAAOu+C,GAEXg/a,EAAOzlf,UAAUmpjB,eAAiB,SAAUvkf,EAAO0nQ,EAAa69O,GAE5D,IAAK,IADD1jf,KACK37C,EAAI,EAAGA,EAAI85C,EAAMgjb,aAAaxmf,OAAQ0pB,IAE3C,IAAK,IADDu6C,EAAMT,EAAMgjb,aAAa98d,GACpBhqB,EAAI,EAAGA,EAAIukE,EAAIuib,aAAaxmf,OAAQN,IAAK,CAC9C,IAAI8mE,EAAOvC,EAAIuib,aAAa9mf,GACxBqpjB,EACIvif,EAAK0kQ,YAAc1kQ,EAAKqxb,WAAWn8N,aAAewvC,GAClD7lQ,EAAMt9D,KAAKy+D,GAIXA,EAAK0kQ,cAAgBA,GACrB7lQ,EAAMt9D,KAAKy+D,GAK3B,OAAOnB,GAKXg/a,EAAOzlf,UAAUw6f,cAAgB,SAAU51b,GACvC,OAAyC,IAArCA,EAAM6vb,YAAYE,gBAAiE,YAAzC/vb,EAAM6vb,YAAYG,mBACf,SAAzChwb,EAAM6vb,YAAYG,oBAA0E,UAAzChwb,EAAM6vb,YAAYG,mBAC9Dhwb,EAAM6vb,YAAYE,eAGgB,IAArC/vb,EAAM6vb,YAAYE,eACX,EAGArF,GAAcQ,oBAAoBnrf,KAAKo6e,OAAOwtB,WAAW5xf,OAAS,IAAMiqD,EAAM6vb,YAAYE,eAItGrF,GAAcQ,oBAAoBnrf,KAAKo6e,OAAOvpb,OAAOglc,cAAc51b,KAE9E6gb,EAAOzlf,UAAU6/jB,uBAAyB,SAAUtrf,EAAW5jD,EAAUhvB,EAAOgpkB,GAI5E,GAHKvokB,EAAkBuC,KAAKoohB,cAAciK,0BACtCr1hB,EAAQgD,KAAKoohB,cAAciK,uBAAuBy0C,0BAA0Bd,EAAah6iB,EAAUhvB,IAEnGA,aAAiBk0f,GAIjB,OAHIzzf,EAAkBuuB,IAClBhsB,KAAK+mkB,iBAAiB/pkB,EAAOgpkB,GAE1BhpkB,EAEM,eAAbgvB,EACAg6iB,EAAY96U,WAAaluP,EAEP,cAAbgvB,EACLg6iB,EAAY76U,UAAYnuP,EAEN,gBAAbgvB,EACLg6iB,EAAY56U,YAAcpuP,EAER,iBAAbgvB,EACLg6iB,EAAY36U,aAAeruP,EAET,mBAAbgvB,GACLg6iB,EAAYh2E,eAAiBhzf,EAC7BgpkB,EAAY3wS,UAAYr4R,GAEN,cAAbgvB,EACLg6iB,EAAY3wS,UAAYr4R,EAEN,eAAbgvB,EACLg6iB,EAAY7tS,WAAan7R,EAEP,YAAbgvB,EACLg6iB,EAAY/uS,QAAUj6R,EAEJ,uBAAbgvB,EACLg6iB,EAAY/1E,mBAAqBjzf,EAEf,sBAAbgvB,IACLg6iB,EAAYtygB,kBAAoB12D,GAEnB,YAAbgvB,EACAg6iB,EAAY92E,QAAUlyf,EAEJ,YAAbgvB,IACLg6iB,EAAY/wS,QAAUj4R,IAI9B8jf,EAAOzlf,UAAU0rkB,iBAAmB,SAAUzyE,EAAY0xE,GACjDvokB,EAAkB62f,IAAgB72f,EAAkBuokB,KACjDhmkB,KAAK8mjB,2BACArpjB,EAAkB62f,EAAWr/N,UAC9Bj1R,KAAKylkB,qBAAqBO,EAAY/wS,QAASq/N,EAAWr/N,SAEzDx3R,EAAkB62f,EAAWpF,UAC9Blvf,KAAK2lkB,aAAaK,EAAY92E,QAASoF,EAAWpF,WAKlDoF,EAAWnP,SAAS,mBAAqB6gF,EAAYh2E,iBAAmBsE,EAAWtE,iBACnFg2E,EAAYh2E,eAAiBsE,EAAWtE,gBAExCsE,EAAWnP,SAAS,uBAAyB6gF,EAAY/1E,qBAAuBqE,EAAWrE,qBAC3F+1E,EAAY/1E,mBAAqBqE,EAAWrE,oBAE5CqE,EAAWnP,SAAS,sBAAwB6gF,EAAYtygB,oBAAsB4gc,EAAW5gc,oBACzFsygB,EAAYtygB,kBAAoB4gc,EAAW5gc,sBAQ3Dotb,EAAOzlf,UAAUiX,QAAU,WACvBtS,KAAKo6e,YAASj/e,EACd6E,KAAK8xD,UAETgvb,EAAOzlf,UAAU2rkB,WAAa,SAAUhmkB,GACpC,GAAIA,aAAmBsqf,GAAiB,CACpC,IAAI2d,EAAcjogB,EAAQ2wT,SAC1B,GAAI3wT,aAAmBsqf,IAAyC,IAAtBtqf,EAAQuqf,WAAmB0d,aAAuBzU,IAC5B,IAAzDyU,EAAYx8e,KAAKvc,OAAO0F,cAAcrX,QAAQ,OACjD,OAAO,EAGf,OAAO,GAMXuif,EAAOzlf,UAAU0ngB,UAAY,SAAUkkE,GAInC,GAHIxpkB,EAAkBwpkB,KAClBA,EAAWjnkB,KAAK4vE,UAAUg7d,uBAEzB5qiB,KAAKgnkB,WAAWC,GAArB,CAIA,IAAIh+iB,EAAOjpB,KAAK4vE,UAAUypc,aAAa4tD,IACU,IAA7Ch+iB,EAAKsyC,oBAAoBh9D,QAAQ,QACjCyB,KAAKknkB,sBAAsBlnkB,KAAKmnkB,oBAAoBnnkB,KAAKonkB,eAAen+iB,EAAMg+iB,OAGtFnmF,EAAOzlf,UAAU+rkB,eAAiB,SAAUn+iB,EAAMg+iB,GAC9C,IAAII,KAIJ,GAHAA,EAAYC,mBAAoB,EAChCD,EAAYE,YAAa,EAEE,sBAAvBt+iB,EAAKrT,cACLyxjB,EAAYG,WAAa,EACzBH,EAAYI,SAAW,OAIvB,IAAK,IADDC,EAAWz+iB,EAAK/rB,MAAM,MACjBf,EAAI,EAAGA,EAAIurkB,EAASjrkB,OAAQN,IAAK,CACtC,IAAIwrkB,EAAQD,EAASvrkB,GACrB,GAAqB,IAAjBwrkB,EAAMlrkB,OAGV,OAAQkrkB,EAAM,IACV,IAAK,IACD,GAAKlqkB,EAAkBkqkB,EAAMh4jB,MAAM,SAM/B03jB,EAAYG,WAAa,EACzBH,EAAYI,SAAW,MAPkB,CACzC,IAAIrof,EAASuof,EAAMh4jB,MAAM,QAAQioB,IAAIN,QACrC+viB,EAAYG,WAAapof,EAAO,GAChCiof,EAAYI,SAAWrof,EAAO,GAMlC,MACJ,IAAK,IACDiof,EAAYO,kBAAmB,EAC/B,MACJ,IAAK,IACDP,EAAYC,mBAAoB,EAChC,MACJ,IAAK,IACDD,EAAYE,YAAa,EACzB,MACJ,IAAK,IACDF,EAAYQ,sBAAuB,EACnC,MACJ,IAAK,IACD7nkB,KAAK8nkB,cAAcT,EAAaM,IAMhD,IAAI3/E,EAAOi/E,EAASpkF,UAAUjF,gBAAgBoK,KAI9C,OAHIA,EAAKvrf,OAAS,IACd4qkB,EAAYroE,UAAYhX,EAAK,GAAGgX,WAE7BqoE,GAEXvmF,EAAOzlf,UAAUyskB,cAAgB,SAAUT,EAAaU,GACpDV,EAAYW,iBAMZ,IAAK,IADD5of,GADJ2of,GADAA,GADAA,GADAA,EAAUA,EAAQx4jB,QAAQ,IAAK,KACbA,QAAQ,IAAK,KACbA,QAAQ,IAAK,KACbW,QACGhT,MAAM,KAClB+U,EAAQ,EAAGA,EAAQmtE,EAAO3iF,OAAQwV,IACvCo1jB,EAAYW,cAAc5of,EAAOntE,IAAU8iB,SAASqqD,EAAOntE,EAAQ,GAAI,IACvEA,KAOR6ue,EAAOzlf,UAAU6rkB,sBAAwB,SAAUe,GAC/CjokB,KAAKu8iB,mBAAmB,OACpB9+iB,EAAkBwqkB,MAElBA,MACwBT,WAAa,EACrCS,EAAwBR,SAAW,EACnCQ,EAAwBL,kBAAmB,EAC3CK,EAAwBJ,sBAAuB,EAC/CI,EAAwBX,mBAAoB,EAC5CW,EAAwBV,YAAa,EACrCU,EAAwBjpE,UAAY,OAExC,IAAIioE,OAAW9rkB,EACX8tB,OAAO9tB,EACwB,oBAA/B6E,KAAK4vE,UAAUy0b,cACf4iE,EAAWjnkB,KAAK4vE,UAAUg7d,uBAE1Bq8B,aAAoB37E,KACpBtrf,KAAK4vE,UAAUryE,MAAMi6hB,wBAAwByvC,EAASn5gB,KAAMm5gB,EAAU,EAAGjnkB,KAAK4vE,UAAUryE,MAAMmwB,UAC9F1tB,KAAK4vE,UAAU/wD,IAAI24gB,wBAAwByvC,EAASz7E,SAAS19b,KAAMm5gB,EAASz7E,SAAU,EAAGxrf,KAAK4vE,UAAU/wD,IAAI6O,UAC5G1tB,KAAKmojB,YAGTl/hB,EAAOjpB,KAAKkokB,sBAAsBD,GAClC,IAAI9K,EAAmBn9jB,KAAK4vE,UAAUryE,MAAMwiiB,mBACxCqrB,EAAYprjB,KAAK2ojB,iBAAiB3ojB,KAAK4vE,UAAUryE,OACjD8hkB,EAAer/jB,KAAKszf,qBAAqB83D,EAAUvoE,UAAWuoE,EAAUz/iB,OAAOuB,YAG/Eulf,EAAUzyf,KAAKmokB,SAASnokB,KAAKmnkB,oBAAoBc,GAA0Bh/iB,GAAM,EAAMk0iB,GAC3F,GAAI1qE,EAAQh2f,OAAS,EAAG,CACpB,IAAI2rkB,EAAc,IAAItlF,GAClBulF,EAAc,IAAIl1E,GAAWi1E,GACjCA,EAAYnlF,aAAaz+e,KAAK6jkB,GAC9B,IAAIp2jB,EAAQ,EACPkrjB,IACDlrjB,EAAQ,GAEZ,IACIw5e,EADOgH,EAAQxgf,GAAOgxe,aAAa,GACjB7oe,SAAS,GAC/Bpa,KAAKsokB,eAAe78E,EAAY48E,GAChC51E,EAAQjuf,KAAK4jkB,GACbpokB,KAAKuokB,gBAAgB91E,GAEzBzyf,KAAKg4hB,2BAA2Bh4hB,KAAK4vE,UAAUryE,MAAO8hkB,GACtDr/jB,KAAK4vE,UAAU/wD,IAAIk5gB,oBAAoB/3hB,KAAK4vE,UAAUryE,OACtDyC,KAAKsnjB,sBAAsB70D,GAC3Bzyf,KAAKwokB,gBACDxokB,KAAKoohB,eACLpohB,KAAKoohB,cAAcs6C,gCAG3B5hF,EAAOzlf,UAAUktkB,gBAAkB,SAAU91E,GACzC,IAAIg2E,EAAY,IAAI3lF,GAChB4lF,EAAY,IAAIv1E,GAAWs1E,GAC/BA,EAAUxlF,aAAaz+e,KAAKkkkB,GAC5Bj2E,EAAQjuf,KAAKikkB,IAEjB3nF,EAAOzlf,UAAU6skB,sBAAwB,SAAUb,GAC/C,IAAIsB,EAAe,MAGdlrkB,EAAkB4pkB,EAAYG,aAA0C,IAA3BH,EAAYG,YAAqB/pkB,EAAkB4pkB,EAAYI,WAAsC,IAAzBJ,EAAYI,WACtIkB,EAAeA,EAAe,SAAWtB,EAAYG,WAAa,IAAMH,EAAYI,SAAW,KAE/FJ,EAAYC,oBAAsBD,EAAYE,aAC9CoB,GAA8B,YAE7BtB,EAAYC,oBACbqB,GAA8B,QAE9BtB,EAAYO,mBACZe,GAA8B,YAE9BtB,EAAYQ,uBACZc,GAA8B,QAElC,IAAIZ,EAAU/nkB,KAAK4okB,iBAAiBvB,GAIpC,OAHIU,EAAQtrkB,OAAS,IACjBkskB,GAA8BZ,GAE3BY,GAEX7nF,EAAOzlf,UAAUutkB,iBAAmB,SAAUvB,GAC1C,IAAIU,EAAU,GAEd,IAAKtqkB,EAAkB4pkB,EAAYW,eAC/B,IAAK,IAAI5pkB,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAK+pkB,EAAYW,eAAgB5pkB,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAChF,IAAIf,EAAMwF,EAAGzE,GACb2pkB,EAAUA,EAAU1qkB,EAAM,IAAMgqkB,EAAYW,cAAc3qkB,GAAK6P,WAAa,IAKpF,OAFA66jB,EAAUA,EAAQ1mkB,MAAM,GAAI,GAC5B0mkB,EAAU5+jB,SAAe4+jB,EAAU,KAMvCjnF,EAAOzlf,UAAUitkB,eAAiB,SAAU78E,EAAY4S,GACpD,IAAI7S,EAAW,IAAIF,GAAgB,GACnCE,EAASuS,eAAiBtS,EAAWsS,eACrCtS,EAAWsS,eAAevS,SAAWA,EACrCA,EAASC,WAAaA,EACtBD,EAASC,WAAWD,SAAWA,EAC/BA,EAAS19b,KAAOuwc,EAChBA,EAAWjkf,SAAS5V,KAAKgnf,IAE7B1K,EAAOzlf,UAAU8rkB,oBAAsB,SAAUE,GAmB7C,OAlBI5pkB,EAAkB4pkB,EAAYG,aAAeH,EAAYG,WAAa,KACtEH,EAAYG,WAAa,IAEzB/pkB,EAAkB4pkB,EAAYI,WAAaJ,EAAYI,SAAWJ,EAAYI,YAC9EJ,EAAYI,SAAWJ,EAAYG,WAAa,EAAIH,EAAYG,WAAa,GAE7E/pkB,EAAkB4pkB,EAAYO,oBAC9BP,EAAYO,kBAAmB,GAE/BnqkB,EAAkB4pkB,EAAYC,qBAC9BD,EAAYC,mBAAoB,GAEhC7pkB,EAAkB4pkB,EAAYE,cAC9BF,EAAYE,YAAa,GAEzB9pkB,EAAkB4pkB,EAAYW,iBAC9BX,EAAYW,kBAETX,GAOXvmF,EAAOzlf,UAAU8skB,SAAW,SAAUd,EAAajuD,EAAWyvD,EAAa1L,GACvE,IAAI2L,EAAa9okB,KAAKo6e,OAAOlvQ,MAAM,GAAGwmR,YAAY,GAC9Ce,KACJzyf,KAAK+okB,oBAAoB1B,GACrBA,EAAYQ,sBACZ7nkB,KAAKgpkB,oBAAoB3B,GAG7B,IADA,IAAI11E,EAASm3E,EAAW7lF,aAAa,QACnB9nf,IAAXw2f,GAAsB,CAEzB,GAAIA,aAAkB7O,KAAoB9if,KAAKipkB,eAAet3E,IAAY01E,EAAYQ,sBAAwB7nkB,KAAKkpkB,oBAAoBv3E,IAAW,CAC9I,IAAIixE,EAAe5ikB,KAAKmpkB,kBAAkBx3E,GAE1C3xf,KAAKopkB,iBAAiBz3E,EAAQc,EAAS2mB,EAAWwpD,EAAcyE,EAAawB,EAAa1L,GAC1F0L,GAAc,EAElBl3E,EAAS3xf,KAAK4vE,UAAU2qd,sBAAsB5oC,GAGlD,OADA3xf,KAAKkohB,aACEz1B,GAEX3R,EAAOzlf,UAAU2tkB,oBAAsB,SAAUz4Y,GAC7C,IAAK,IAAIp0L,EAAIo0L,EAASi3Y,WAAYrrkB,GAAKo0L,EAASk3Y,SAAUtrkB,IAAK,CAC3D,IAAIktkB,EAAa,QAAUltkB,EAAE+Q,WACzBzP,EAAkBuC,KAAKkohB,UAAUmhD,MACjCrpkB,KAAKkohB,UAAUmhD,GAAcltkB,KASzC2kf,EAAOzlf,UAAU0tkB,oBAAsB,SAAUx4Y,GAC7C,IACK,IAAIp0L,EAAIo0L,EAASi3Y,WAAYrrkB,GAAKo0L,EAASk3Y,SAAUtrkB,IAAK,CAC3D,IAAImtkB,EAAe,WAAantkB,EAAE+Q,WAC9BzP,EAAkBuC,KAAKkohB,UAAUohD,MACjCtpkB,KAAKkohB,UAAUohD,GAAgBntkB,GAGvC,IAAKsB,EAAkB8yL,EAASy3Y,eAC5B,IAAK,IAAI5pkB,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKizL,EAASy3Y,eAAgB5pkB,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC7E,IAAIf,EAAMwF,EAAGzE,GACb4B,KAAKkohB,UAAU7qhB,GAAOkzL,EAASy3Y,cAAc3qkB,KAOzDyjf,EAAOzlf,UAAU4tkB,eAAiB,SAAU70B,GACxC,IAAI1viB,EAAQ0viB,EAAKx2D,gBAAgB+F,UACjC,YAAcxof,IAAVuJ,IACOjH,EAAkBuC,KAAKkohB,UAAUxjhB,EAAM+yB,QAItDqpd,EAAOzlf,UAAU6tkB,oBAAsB,SAAU90B,GAC7C,IAAIroD,EAAYqoD,EAAKx2D,gBAAgB0L,aACrC,OAAO7rf,EAAkBuC,KAAKkohB,UAAUn8B,KAK5CjL,EAAOzlf,UAAUkukB,sBAAwB,SAAUlrE,EAAY+a,GAE3D,IAAI3tB,EAAa,IAAIH,GAAgB,GACrCG,EAAW8S,aAAc,EACzB9S,EAAW39b,KAAOuwc,EAClBA,EAAWjkf,SAAS5V,KAAKinf,GAEzB,IAAIn1d,EAAc,IAAIk+d,GACtBl+d,EAAY7J,KAAO2sf,EACnB9if,EAAYw3B,KAAOuwc,EACnBA,EAAWjkf,SAAS5V,KAAK8xB,GAEzB,IAAIyne,EAAiB,IAAIzS,GAAgB,GAKzC,OAJAyS,EAAetS,WAAaA,EAC5BsS,EAAetS,WAAWsS,eAAiBA,EAC3CA,EAAejwc,KAAOuwc,EACtBA,EAAWjkf,SAAS5V,KAAKu5f,GAClBtS,GAMX3K,EAAOzlf,UAAU+tkB,iBAAmB,SAAUz3E,EAAQc,EAAS2mB,EAAWwpD,EAAcyE,EAAawB,EAAa1L,GAC9G,IAAI1xE,OAAatwf,EACb89iB,OAAU99iB,EACVqukB,OAAUrukB,EAEd,GAAuB,IAAnBs3f,EAAQh2f,QAA+D,IAA/Cg2f,EAAQ,GAAGxP,aAAa,GAAG7oe,SAAS3d,QAAiBgB,EAAkBorkB,IAAiBA,EAG/G,CACD5vB,EAAU,IAAIn2D,GACd,IAAIiJ,OAAY5wf,EAEZsukB,EAAmB93E,EAAO/T,gBAAgB+F,UAAUlsd,KAEpDs0d,EADAs7E,EAAYQ,sBAAwBpqkB,EAAkBuC,KAAKkohB,UAAUuhD,IACzD93E,EAAO/T,gBAAgB0L,aAGvBmgF,EAEhB,IAAIC,EAAe,MAAQ1pkB,KAAKkohB,UAAUn8B,GACtCS,EAAYxsf,KAAKo6e,OAAO72e,OAAOmgf,WAAWgmF,EAAc,aAQ5D,GAPIjskB,EAAkB+uf,KAElBxsf,KAAKo6e,OAAOkV,MAAM/4Z,OAAOo2b,WAAW98d,KAAKuB,MAAMpxD,KAAKi1jB,qBAAsBplgB,KAAKuB,MAAMpxD,KAAKo6e,OAAO2nC,iBAAiBr6gB,IAAIgikB,IAAgB1pkB,KAAKo6e,OAAO72e,QAClJipf,EAAYxsf,KAAKo6e,OAAO72e,OAAOmgf,WAAWgmF,EAAc,cAE5DzwB,EAAQr7D,gBAAgB0J,WAAWkF,GAE/B66E,EAAYE,YAAcF,EAAYC,kBAAmB,CACzD,IAAI93C,EAAU,IAAIhoC,GAClBgoC,EAAQt7gB,SAAW,MACnBs7gB,EAAQxwB,UAAYqoE,EAAYroE,UAChCwwB,EAAQ3nC,eAAiB,EACzB2nC,EAAQ1nC,iBAAmB,QAC3BmxD,EAAQr7D,gBAAgBoK,KAAKxjf,KAAKgrhB,GAEtCg6C,EAAU,IAAIr2E,GAAW8lD,GACzBA,EAAQh2D,aAAaz+e,KAAKglkB,QA/B1BA,EAAU/2E,EAAQ,GAAGxP,aAAa,QAkCjB9nf,IAAhB0tkB,GAA8BA,IAC1BprkB,EAAkB0/jB,IAAsBA,GACzCn9jB,KAAKuokB,gBAAgB91E,GAEzBzyf,KAAKupkB,sBAAsBC,EAASpwD,IAGxC,IAAK,IADD3sf,EAAO,GACF0kP,EAAY,EAAGA,EAAYwgP,EAAO1O,aAAaxmf,OAAQ00Q,IAE5D,IAAK,IADDktP,EAAa1M,EAAO1O,aAAa9xO,GAC5BxlD,EAAe,EAAGA,EAAe0yS,EAAWjkf,SAAS3d,OAAQkvN,IAAgB,CAClF,IAAI3qN,EAAUq9f,EAAWjkf,SAASuxM,GAC9B3qN,aAAmBwzf,KACnB/ne,GAAczrB,EAAQyrB,MAIlC,GAAa,KAATA,EAAa,CAEb,GAAI46iB,EAAYO,uBAAsCzskB,IAAjBynkB,EACjCn3E,EAAazrf,KAAK2pkB,mBAAmBH,EAAS5G,EAAcn2iB,OAE3D,CACD,IAAIk2C,EAAO,IAAI6xb,GACf7xb,EAAKl2C,KAAOA,EACZk2C,EAAK7U,KAAO07gB,EACZA,EAAQpvjB,SAAS5V,KAAKm+D,GAG1B,GAAI0kgB,EAAYC,wBAAuCnskB,IAAjBynkB,EAA6B,CAC/D,GAAIyE,EAAYE,WAAY,CACxB,IAAIxoE,EAAU,IAAID,GAClBC,EAAQtye,KAAO,KACfsye,EAAQjxc,KAAO07gB,EACfA,EAAQpvjB,SAAS5V,KAAKu6f,GAE1B,IAAI6qE,EAAY5pkB,KAAK6pkB,oBAAoBjH,EAAc4G,EAASnC,EAAYE,WAAY51E,GACxF3xf,KAAKsokB,eAAesB,EAAWJ,GAE/BnC,EAAYO,uBAAmCzskB,IAAfswf,GAChCzrf,KAAKsokB,eAAe78E,EAAY+9E,GAGnC/rkB,EAAkBw7iB,IAAsB,KAATxshB,IAAeo8iB,GAC/Cp2E,EAAQjuf,KAAKy0iB,IAMrBn4D,EAAOzlf,UAAUsukB,mBAAqB,SAAUtrE,EAAYukE,EAAcn2iB,GACtE,IAAI2sf,EAAY,mBAAsBwpD,EAAe,KACjDn3E,EAAazrf,KAAKupkB,sBAAsBlrE,EAAY+a,GAEpDz2c,EAAO,IAAI6xb,GAIf,OAHA7xb,EAAKl2C,KAAOA,EACZk2C,EAAK7U,KAAOuwc,EACZA,EAAWjkf,SAAS5V,KAAKm+D,GAClB8ob,GAMX3K,EAAOzlf,UAAUwukB,oBAAsB,SAAUC,EAAczrE,EAAY0rE,EAAcp4E,GACrF,IAAIynB,EAAY,WAAa0wD,EAAe,QACxCr+E,EAAazrf,KAAKupkB,sBAAsBlrE,EAAY+a,GACpD3sf,GAAQzsB,KAAKo6e,OAAOlvQ,MAAM3sO,QAAQozf,EAAOhJ,WAAW14V,MAAQ,GAAG/iJ,WAE/Dy1D,EAAO,IAAIi8b,GASf,OARAj8b,EAAK8ob,WAAaA,EACbs+E,IACDt9iB,EAAO,IAAMA,GAEjBk2C,EAAKl2C,KAAOA,EACZk2C,EAAK7U,KAAOuwc,EACZA,EAAWjkf,SAAS5V,KAAKm+D,GACzB3iE,KAAK6mjB,cAAcijB,GAAgBnngB,EAC5B8ob,GAEX3K,EAAOzlf,UAAUmtkB,cAAgB,WAC7B,IAAK,IAAIpqkB,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAK0C,KAAK6mjB,eAAgBzojB,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACzE,IAAIf,EAAMwF,EAAGzE,GAET4rkB,GADWhqkB,KAAKo6e,OAAO2sC,UAAUr/gB,IAAIrK,GACjBwlf,UAAU8F,WAAW14V,KAAKh+I,MAAQ,GAAG/E,WACzDy1D,EAAO3iE,KAAK6mjB,cAAcxpjB,GAC9B,GAAI2skB,IAAYrngB,EAAKl2C,KAAM,CACvBk2C,EAAKl2C,KAAOu9iB,EACZ,IAAInnF,EAAYlgb,EAAKkgb,UACjB1xO,EAAY0xO,EAAUI,aAAa1kf,QAAQokE,EAAK7U,MAChD69J,EAAehpJ,EAAK7U,KAAK1zC,SAAS7b,QAAQokE,GAC9C3iE,KAAKo6e,OAAOvpb,OAAOwmd,kBAAkBx0B,EAAW1xO,EAAWxlD,MAOvEm1R,EAAOzlf,UAAU8tkB,kBAAoB,SAAUx3E,GAC3C,IAAIixE,OAAeznkB,EACfy0V,EAAa+hK,EAAO1O,aAAaxmf,OACrC,GAAImzV,EAAa,EAAG,CAChB,IAAIo/N,EAAYr9D,EAAO1O,aAAa,GAChC6oD,EAAUn6C,EAAO1O,aAAarzJ,EAAa,GAC/C,QAAmBz0V,IAAd6zjB,QAAyC7zjB,IAAZ2wiB,EAAwB,CACtD,IAAIwB,EAAe0hB,EAAU50iB,SAAS,GAGtC,IAAK3c,EAAkB6viB,IAAiBA,aAAwB54C,IAAoD,IAA9B44C,EAAaluC,cAAuBkuC,EAAa71gB,KAAK7hB,cAAcjG,MAAM,SAC5J,OAAO29hB,EAAa71gB,KAExB,IAAI81gB,EAAazB,EAAQ1xhB,SAAS0xhB,EAAQ1xhB,SAAS3d,OAAS,QACtCtB,IAAjBmyiB,QAA+CnyiB,IAAfoyiB,IACjCvtiB,KAAK4vE,UAAUryE,MAAMi6hB,wBAAwBw3B,EAAW1hB,EAAc,EAAGttiB,KAAK4vE,UAAUryE,MAAMmwB,UAC9F1tB,KAAK4vE,UAAU/wD,IAAI24gB,wBAAwBsU,EAASyB,EAAYA,EAAW9wiB,OAAQuD,KAAK4vE,UAAU/wD,IAAI6O,UACtGk1iB,EAAe5ikB,KAAKiqkB,uBACpBjqkB,KAAKuikB,eAAeK,KAIhC,OAAOA,GAKX9hF,EAAOzlf,UAAU4ukB,qBAAuB,WACpCjqkB,KAAKmohB,gBAGL,IAFA,IAAIrpgB,EAAQ,GAAK9e,KAAKmohB,cAAcj7gB,WAAWzQ,OAC3CyjI,EAAe,GACZphH,EAAQ,EAAI,GACfohH,EAAe,IAAMA,EACrBphH,IAGJ,MADmB,OAASohH,EAAelgI,KAAKmohB,eAG7CrnC,KC7lTPopF,GAA+B,WAC/B,SAASA,EAAc56E,EAAOtyP,GAC1Bh9P,KAAKmqkB,sBAAmBhvkB,EACxB6E,KAAKoqkB,yBAAsBjvkB,EAC3B6E,KAAKqqkB,eAAiB/6E,EACtBtvf,KAAKsqkB,kBAAoBttU,EAyC7B,OAvCA1+P,OAAOuJ,eAAeqikB,EAAc7ukB,UAAW,kBAI3CqM,IAAK,WACD,OAAO1H,KAAKmqkB,kBAKhB9ikB,IAAK,SAAUrK,GACXgD,KAAKmqkB,iBAAmBntkB,GAE5B2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeqikB,EAAc7ukB,UAAW,qBAI3CqM,IAAK,WACD,OAAO1H,KAAKoqkB,qBAKhB/ikB,IAAK,SAAUrK,GACXgD,KAAKoqkB,oBAAsBptkB,GAE/B2K,YAAY,EACZC,cAAc,IAKlBsikB,EAAc7ukB,UAAUiX,QAAU,WAC9BtS,KAAKqqkB,oBAAiBlvkB,EACtB6E,KAAKsqkB,uBAAoBnvkB,GAEtB+ukB,KAMPK,GAAyC,WACzC,SAASA,EAAwBC,EAAapT,GAC1Cp3jB,KAAKyqkB,mBAAgBtvkB,EACrB6E,KAAK0qkB,sBAAmBvvkB,EACxB6E,KAAKwqkB,YAAcA,EACnBxqkB,KAAKo3jB,eAAiBA,EA0C1B,OAxCA94jB,OAAOuJ,eAAe0ikB,EAAwBlvkB,UAAW,eAIrDqM,IAAK,WACD,OAAO1H,KAAKyqkB,eAKhBpjkB,IAAK,SAAUrK,GACXgD,KAAKyqkB,cAAgBztkB,GAEzB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe0ikB,EAAwBlvkB,UAAW,kBAIrDqM,IAAK,WACD,OAAO1H,KAAK0qkB,kBAKhBrjkB,IAAK,SAAUrK,GACXgD,KAAK0qkB,iBAAmB1tkB,GAE5B2K,YAAY,EACZC,cAAc,IAKlB2ikB,EAAwBlvkB,UAAUiX,QAAU,WACxCtS,KAAKwqkB,iBAAcrvkB,EACnB6E,KAAKo3jB,eAAe9kjB,UACpBtS,KAAKo3jB,oBAAiBj8jB,GAEnBovkB,KAMPI,GAAkC,WAClC,SAASA,EAAiB94H,EAAeskD,GACrCn2f,KAAK6xc,cAAgBA,EACrB7xc,KAAKm2f,UAAYA,EACjBn2f,KAAK4qkB,cAAgBz0E,EAAU7F,WAcnC,OAZAq6E,EAAiBtvkB,UAAUwvkB,cAAgB,SAAUphI,EAAQ6lD,GAEzD,IAAIw7E,EAAuB9qkB,KAAKm2f,UAAU7F,WAE1ChB,EAAM5U,aAAaspC,YAAYtS,gBAAgB1xgB,KAAKm2f,UAAUlR,UAAWx7C,EAASzpc,KAAK+pZ,cAAiB/pZ,KAAK+pZ,cAC7GulG,EAAMlV,OAAOvpb,OAAO2md,cAAcx3gB,KAAKm2f,UAAUlR,UAAUgP,YACvDj0f,KAAKm2f,UAAU7F,aAAetwf,KAAK4qkB,gBACnC5qkB,KAAKm2f,UAAU7F,WAAatwf,KAAK4qkB,eAGrC5qkB,KAAK4qkB,cAAgBE,GAElBH,KAMPI,GAAkC,WAClC,SAASA,EAAiB9qgB,EAAOqvb,GAC7Btvf,KAAKs1f,YAAc,IAAIC,GACvBv1f,KAAK8vf,YAAc,IAAIk7E,GACvBhrkB,KAAKu4R,QACLv4R,KAAKsvf,MAAQA,EACbtvf,KAAKirkB,eAAehrgB,GA+CxB,OA7CA8qgB,EAAiB1vkB,UAAU4vkB,eAAiB,SAAUhrgB,GAC9CA,EAAMq1b,cACNt1f,KAAKs1f,YAAcr1b,EAAMq1b,YAAYj2f,SAErC4gE,EAAM6vb,cACN9vf,KAAK8vf,YAAY7G,WAAahpb,EAAM6vb,YAAY7G,WAChDjpf,KAAK8vf,YAAYE,eAAiB/vb,EAAM6vb,YAAYE,eACpDhwf,KAAK8vf,YAAYG,mBAAqBhwb,EAAM6vb,YAAYG,oBAE5D,IAAK,IAAI9zf,EAAI,EAAGA,EAAI8jE,EAAMgjb,aAAaxmf,OAAQN,IAAK,CAChD,IAAIukE,EAAMT,EAAMgjb,aAAa9mf,GACzBg6f,EAAY,IAAI+0E,GACpB/0E,EAAUvF,WAAalwb,EAAIy1b,UAAUvF,WACrCuF,EAAUtF,gBAAkBnwb,EAAIy1b,UAAUtF,gBAC1CsF,EAAUrF,oBAAsBpwb,EAAIy1b,UAAUrF,oBAC9CqF,EAAUpF,UAAYrwb,EAAIy1b,UAAUpF,UACpCoF,EAAUnF,eAAiBtwb,EAAIy1b,UAAUnF,eACzCmF,EAAUlF,mBAAqBvwb,EAAIy1b,UAAUlF,mBAC7C,IAAK,IAAI1te,EAAI,EAAGA,EAAIm9C,EAAIuib,aAAaxmf,OAAQ8mB,IAAK,CAC9C,IAAI0/C,EAAOvC,EAAIuib,aAAa1/d,GACxB+we,EAAa,IAAI62E,GACrB72E,EAAW3sL,YAAc1kQ,EAAK0kQ,YAC9B2sL,EAAWn8N,WAAal1N,EAAKqxb,WAAWn8N,WACxCm8N,EAAWtE,eAAiB/sb,EAAKqxb,WAAWtE,eAC5CsE,EAAWrE,mBAAqBhtb,EAAKqxb,WAAWrE,mBAChDkG,EAAUr0b,MAAMt9D,KAAK8vf,GAEzBt0f,KAAKu4R,KAAK/zR,KAAK2xf,GAEnBn2f,KAAKorkB,uBAAyBprkB,KAAKsvf,MAAM5U,aAAa4Y,qBAAqBrzb,EAAO,MAEtF8qgB,EAAiB1vkB,UAAUiX,QAAU,WACjCtS,KAAKorkB,4BAAyBjwkB,EAC1B6E,KAAKs1f,cACLt1f,KAAKs1f,YAAYhjf,UACjBtS,KAAKs1f,iBAAcn6f,GAEnB6E,KAAK8vf,cACL9vf,KAAK8vf,YAAc,MAEnB9vf,KAAKu4R,OACLv4R,KAAKu4R,QACLv4R,KAAKu4R,UAAOp9R,IAGb4vkB,KAMPC,GAAwC,WAIxC,OAHA,gBASAE,GAAsC,WAItC,OAHA,WACIlrkB,KAAK8hE,aAQTqpgB,GAAuC,WAIvC,OAHA,gBASAE,GAAmC,WAInC,OAHA,SAA2Bv3iB,GACvB9zB,KAAK6xc,cAAgB/9a,MClNzBw3iB,GAAiC,WACjC,SAASA,EAAgB/qkB,GACrBP,KAAKurkB,QAAUhrkB,EACfP,KAAKo6e,OAAS75e,EAAK65e,OACnBp6e,KAAKwrkB,wBACLxrkB,KAAKyrkB,sBACLzrkB,KAAK0rkB,kBAmpCT,OAjpCAptkB,OAAOuJ,eAAeyjkB,EAAgBjwkB,UAAW,SAO7CqM,IAAK,WAAc,OAAO1H,KAAKurkB,SAC/B5jkB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeyjkB,EAAgBjwkB,UAAW,iBAK7CqM,IAAK,WACD,OAAO1H,KAAKsvf,MAAM84B,eAEtBzghB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeyjkB,EAAgBjwkB,UAAW,UAK7CqM,IAAK,WAAc,OAAO1H,KAAK2rkB,UAC/BtkkB,IAAK,SAAUrK,GAASgD,KAAK2rkB,SAAW3ukB,GACxC2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeyjkB,EAAgBjwkB,UAAW,sBAM7CqM,IAAK,WAAc,OAAO1H,KAAKwrkB,sBAC/B7jkB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeyjkB,EAAgBjwkB,UAAW,gBAI7CqM,IAAK,WACD,OAAO1H,KAAK0rkB,gBAEhB/jkB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeyjkB,EAAgBjwkB,UAAW,kBAM7CqM,IAAK,WAAc,OAAO1H,KAAK4rkB,kBAC/BvkkB,IAAK,SAAUrK,GAASgD,KAAK4rkB,iBAAmB5ukB,GAChD2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeyjkB,EAAgBjwkB,UAAW,gBAK7CqM,IAAK,WAAc,OAAO1H,KAAK6rkB,gBAC/BxkkB,IAAK,SAAUrK,GAASgD,KAAK6rkB,eAAiB7ukB,GAC9C2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeyjkB,EAAgBjwkB,UAAW,kBAK7CqM,IAAK,WAAc,OAAO1H,KAAK8rkB,kBAC/BzkkB,IAAK,SAAUrK,GAASgD,KAAK8rkB,iBAAmB9ukB,GAChD2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAeyjkB,EAAgBjwkB,UAAW,eAK7CqM,IAAK,WAAc,OAAO1H,KAAK+rkB,eAC/B1kkB,IAAK,SAAUrK,GAASgD,KAAK+rkB,cAAgB/ukB,GAC7C2K,YAAY,EACZC,cAAc,IAOlB0jkB,EAAgBjwkB,UAAU22d,gBAAkB,WACxC,IAAIo5F,EAAYprjB,KAAKsvf,MAAM5U,aAAaiuE,iBAAiB3ojB,KAAKsvf,MAAM1/a,UAAUryE,OAC9EyC,KAAK2lB,eAAiB3lB,KAAKsvf,MAAM5U,aAAa4Y,qBAAqB83D,EAAUvoE,UAAWuoE,EAAUz/iB,OAAOuB,YACzGk+iB,EAAYprjB,KAAKsvf,MAAM5U,aAAaiuE,iBAAiB3ojB,KAAKsvf,MAAM1/a,UAAU/wD,KAC1E7e,KAAK6lB,aAAe7lB,KAAKsvf,MAAM5U,aAAa4Y,qBAAqB83D,EAAUvoE,UAAWuoE,EAAUz/iB,OAAOuB,aAE3Go+jB,EAAgBjwkB,UAAUwnkB,gBAAkB,SAAUl7C,GAClD3nhB,KAAK4sjB,aAAapojB,MAAOmjhB,SAAYA,EAAUjigB,WAAciigB,EAAS/1B,aAAchse,SAAY+hgB,EAASlmhB,UAAUmwf,gBAEvH05E,EAAgBjwkB,UAAU2wkB,eAAiB,WACvC,IAAIC,EAAejskB,KAAK4sjB,aAAa,GACjCjlC,EAAWskD,EAAatkD,SACxB3nhB,KAAKoohB,cAAc3iC,WACnBzlf,KAAKo6e,OAAO2sC,UAAU3ihB,IAAIujhB,EAASlwf,KAAMkwf,GACzCA,EAAS75d,KAAK1zC,SAASiO,OAAO4jjB,EAAavmjB,WAAY,EAAGiigB,GAC1DA,EAASlmhB,UAAUqsD,KAAK1zC,SAASiO,OAAO4jjB,EAAarmjB,SAAU,EAAG+hgB,EAASlmhB,WAC3EzB,KAAKoohB,cAAc8jD,cAAclskB,QAGjCA,KAAKsvf,MAAM5U,aAAaooF,uBAAuBn7C,GAC/C3nhB,KAAKoohB,cAAclgF,UAAU1jc,KAAKxE,QAQ1CsrkB,EAAgBjwkB,UAAU8wkB,OAAS,WAC/B,GAAoB,mBAAhBnskB,KAAKm2D,OAAT,CAIAn2D,KAAKsvf,MAAM9jB,mBAAoB,EAC/B,IAAI4gG,OAA6BjxkB,EAC7BkxkB,OAA2BlxkB,EAC3BoC,EAAQyC,KAAK2lB,eACb9G,EAAM7e,KAAK6lB,aACX0zgB,EAAqBnC,GAAamC,mBAAmBh8hB,EAAOshB,GAChE,GAAI7e,KAAKsyhB,mBAAmB71hB,OAAS,GAAqB,cAAhBuD,KAAKm2D,QAA0C,yBAAhBn2D,KAAKm2D,QACvD,yBAAhBn2D,KAAKm2D,OACRi2gB,EAA6BpskB,KAAK+piB,gBAAgBxsiB,GAClD8ukB,EAA2BrskB,KAAK+piB,gBAAgBlrhB,GAChD7e,KAAKsskB,yBAAyBF,EAA4BC,OAEzD,CACD,IAAIE,EAAevskB,KAAK4sjB,aACxB5sjB,KAAK0rkB,kBACL,IAAIzrC,EAAY7I,GAAamC,mBAAmBv5hB,KAAKyojB,eAAgBzojB,KAAKmphB,aACtEqjD,EAAqBxskB,KAAK+piB,gBAAgB9J,EAAYjgiB,KAAKyojB,eAAiBzojB,KAAKmphB,aACjFmzB,EAAkBt8iB,KAAK+piB,gBAAgB9J,EAAYjgiB,KAAKmphB,YAAcnphB,KAAKyojB,gBAO/E,GANI+jB,EAAmBn0C,iBAAiBikB,GACpCt8iB,KAAKsvf,MAAM1/a,UAAU62d,cAAc+lC,GAAoB,GAGvDxskB,KAAKsvf,MAAM1/a,UAAUy5d,eAAemjC,EAAoBlwB,GAExC,oBAAhBt8iB,KAAKm2D,QAAgCn2D,KAAKoohB,cAAc1iC,UAAW,CACnE,IAAI+F,EAAazrf,KAAKsvf,MAAM1/a,UAAU40b,oBACtC,IAAK/mgB,EAAkBguf,GAAa,CAChC,IAAI9/e,EAAU8/e,EAAe,KAAE/7c,UAAU+7c,EAAY,GACrD+gF,EAAmBt0C,qBAAqBzsC,EAAW39b,KAAMniD,GACzD3L,KAAKsvf,MAAM1/a,UAAUryE,MAAMw6hB,oBAAoBy0C,GAC/C7gkB,EAAS8/e,EAAWD,SAAS19b,KAAKpe,UAAU+7c,EAAWD,SAAU,GACjE8wD,EAAgBpkB,qBAAqBzsC,EAAWD,SAAS19b,KAAMniD,IAGvE3L,KAAKoohB,cAAciK,uBAAyBryhB,KAC5CA,KAAK2lB,eAAiB3lB,KAAKyojB,eAC3BzojB,KAAKyojB,oBAAiBttjB,EACtB6E,KAAK6lB,aAAe7lB,KAAKmphB,YACzBnphB,KAAKmphB,iBAAchuhB,EACnB,IAAIsxkB,GAAkB,EACjBD,EAAmBn0C,iBAAiBikB,KACrCmwB,EAAkC,cAAhBzskB,KAAKm2D,QAA0C,WAAhBn2D,KAAKm2D,QAAuC,eAAhBn2D,KAAKm2D,QAC3D,gBAAhBn2D,KAAKm2D,SAC8B,eAAhBn2D,KAAKm2D,QAA2C,mBAAhBn2D,KAAKm2D,QACxC,mBAAhBn2D,KAAKm2D,QAA+C,qBAAhBn2D,KAAKm2D,QACzB,sBAAhBn2D,KAAKm2D,QAAkD,YAAhBn2D,KAAKm2D,QAC5B,gBAAhBn2D,KAAKm2D,QAA4C,iBAAhBn2D,KAAKm2D,QAA6C,cAAhBn2D,KAAKm2D,SAC3En2D,KAAKsvf,MAAM1/a,UAAU/wD,IAAIk5gB,oBAAoBukB,GACxCt8iB,KAAKsvf,MAAM1/a,UAAU0qK,UAClBt6O,KAAKoohB,cAAc1iC,UACnB1lf,KAAKsvf,MAAM5U,aAAamuE,uBAAuB7ojB,KAAKsvf,MAAM1/a,WAG1D5vE,KAAKsvf,MAAM5U,aAAamvE,uBAAuB7pjB,KAAKsvf,MAAM1/a,WAAW,KAKrF,IAAI88f,EAAe1skB,KAAKoohB,cAAc1iC,YAAc+mF,EACpDzskB,KAAK2skB,oBAAoBJ,EAAcG,EAAcnzC,EAAqBh8hB,EAAQshB,EAAKthB,IAAUshB,GAC7F4tjB,GACAzskB,KAAK4+jB,cAAc4N,EAAoBlwB,GAI/C,IAAIpY,GAAqB,GACpBlkiB,KAAKoohB,cAAc3iC,WAAahof,EAAkBuC,KAAKoohB,cAAco0B,sBACpD,mBAAhBx8iB,KAAKm2D,QAA+C,YAAhBn2D,KAAKm2D,QAAwC,mBAAhBn2D,KAAKm2D,QACjD,qBAAhBn2D,KAAKm2D,QACW,sBAAhBn2D,KAAKm2D,UAAoCn2D,KAAKoohB,cAAc1iC,WACX,UAAjD1lf,KAAKoohB,cAAco0B,mBAAmBrmf,WAC7Ci2gB,EAA6BpskB,KAAK+piB,gBAAgBxsiB,GAClD8ukB,EAA2BrskB,KAAK+piB,gBAAgBlrhB,GAChD7e,KAAKsvf,MAAM1/a,UAAU4uI,YAAY4tX,EAA4BC,GAC7DnoC,GAAqB,GAGzBlkiB,KAAKyojB,eAAiBlrjB,EACtByC,KAAKmphB,YAActqgB,EACnB7e,KAAKsvf,MAAM5U,aAAa+oE,SAASzjjB,KAAKsvf,MAAM1/a,UAAW5vE,KAAKsvf,MAAM1/a,UAAU0qK,SACxE4pT,GACAlkiB,KAAKo6e,OAAOqrC,iBAAiBzlhB,KAAKsvf,MAAM1/a,UAAUryE,MAAOyC,KAAKsvf,MAAM1/a,UAAU/wD,KAElF7e,KAAKg3iB,yBAtFDh3iB,KAAKgskB,kBAwFbV,EAAgBjwkB,UAAU27iB,kBAAoB,WAC1C,IAAKv5iB,EAAkBuC,KAAKoohB,cAAco0B,sBAElB,wBAAhBx8iB,KAAKm2D,QAAsF,eAAjDn2D,KAAKoohB,cAAco0B,mBAAmBrmf,QAA2C,eAAhBn2D,KAAKm2D,QAA0B,CAC1I,IACIw7b,EAD6B3xf,KAAK+piB,gBAAgB/piB,KAAK2lB,gBACnBkxf,cACxC72gB,KAAKo6e,OAAOxqa,UAAUone,kBAAkBrlD,KAIpD25E,EAAgBjwkB,UAAUujkB,cAAgB,SAAU4N,EAAoBlwB,GASpE,IAAM7+iB,EAAkB+ukB,EAAmB3pF,UAAUK,kBACjDspF,EAAmB3pF,UAAUK,2BAA2BR,KACtDjlf,EAAkB6+iB,EAAgBz5D,UAAUK,kBACvCo5D,EAAgBz5D,UAAUK,2BAA2BR,KACvDjlf,EAAkB+ukB,EAAmB3pF,UAAUK,mBAC5Czlf,EAAkB6+iB,EAAgBz5D,UAAUK,kBAC7CspF,EAAmB3pF,UAAUK,2BAA2B6O,IACxDuqD,EAAgBz5D,UAAUK,2BAA2B6O,KACpDt0f,EAAkB+ukB,EAAmB3pF,UAAU8F,YAAc,CAErE3of,KAAKsvf,MAAM1/a,UAAU4uI,YAAYguX,EAAoBlwB,GACrD,IAAIswB,EAA4B,cAAhB5skB,KAAKm2D,OACrBn2D,KAAKsvf,MAAM5U,aAAamvE,uBAAuB7pjB,KAAKsvf,MAAM1/a,UAAWg9f,KAG7EtB,EAAgBjwkB,UAAUixkB,yBAA2B,SAAU/ukB,EAAOshB,GAC9C,eAAhB7e,KAAKm2D,QAA2C,gBAAhBn2D,KAAKm2D,QAA4C,iBAAhBn2D,KAAKm2D,SACtEn2D,KAAKsvf,MAAM9jB,mBAAoB,GAEnCxre,KAAKsvf,MAAM1/a,UAAU4uI,YAAYjhN,EAAOshB,GACpB,gBAAhB7e,KAAKm2D,QAA4C,iBAAhBn2D,KAAKm2D,OACtCn2D,KAAK6skB,iBAEgB,gBAAhB7skB,KAAKm2D,QAA4C,iBAAhBn2D,KAAKm2D,OAC3Cn2D,KAAK8skB,4BAA4B9skB,KAAKm2D,QAEjB,cAAhBn2D,KAAKm2D,QACVn2D,KAAK+skB,oBAIbzB,EAAgBjwkB,UAAU2xkB,WAAa,WACnC,IAAInqE,EAAS7igB,KAAKsvf,MAAM5U,aACxB,OAAQ16e,KAAKm2D,QACT,IAAK,YACD0sc,EAAO68D,gBAAgB1/jB,KAAKsvf,MAAM1/a,WAAW,GAC7C,MACJ,IAAK,SACDizb,EAAO49D,aAAazgkB,KAAKsvf,MAAM1/a,WAAW,GAC1C,MACJ,IAAK,cACDizb,EAAOS,cACP,MACJ,IAAK,eACDT,EAAOW,eACP,MACJ,IAAK,YACDX,EAAOU,YACP,MACJ,IAAK,aACDV,EAAO4tD,4BACP,MACJ,IAAK,iBACD5tD,EAAOO,WAAU,GACjB,MACJ,IAAK,iBACDP,EAAOO,WAAU,GACjB,MACJ,IAAK,mBAGL,IAAK,oBACDP,EAAOQ,cAAa,KAWhCioE,EAAgBjwkB,UAAUsxkB,oBAAsB,SAAUJ,EAAcG,EAAcnvkB,EAAOyyiB,GAOzF,IANI08B,GAAiC,cAAhB1skB,KAAKm2D,QAA0C,WAAhBn2D,KAAKm2D,QAAuC,gBAAhBn2D,KAAKm2D,QAC9D,iBAAhBn2D,KAAKm2D,QAA6C,cAAhBn2D,KAAKm2D,QAA0C,mBAAhBn2D,KAAKm2D,QACzD,mBAAhBn2D,KAAKm2D,QAA+C,qBAAhBn2D,KAAKm2D,QAAiD,sBAAhBn2D,KAAKm2D,QAC5D,eAAhBn2D,KAAKm2D,QACRn2D,KAAKgtkB,aAELT,EAAa9vkB,OAAS,EACtB,GAAKuD,KAAKoohB,cAAc3iC,YAA8B,gBAAhBzlf,KAAKm2D,QAA4C,iBAAhBn2D,KAAKm2D,QACrD,cAAhBn2D,KAAKm2D,QAA0C,eAAhBn2D,KAAKm2D,SACnB,mBAAhBn2D,KAAKm2D,QAA+C,mBAAhBn2D,KAAKm2D,QAA+C,qBAAhBn2D,KAAKm2D,QAC1D,eAAhBn2D,KAAKm2D,QAA2C,sBAAhBn2D,KAAKm2D,QAAkD,YAAhBn2D,KAAKm2D,OAAuB,CAC1G,IAAIy3c,EAAc5tgB,KAAK2lB,eACnBque,EAAQh0f,KAAKsvf,MAAM5U,aAAai8D,UAAW1kiB,MAAO27f,IAAertgB,KACjE0skB,EAAWV,EAAaA,EAAa9vkB,OAAS,IAC7Cu3f,aAAiBjB,IAAeiB,EAAM7B,kCAAkCY,IAAeiB,EAAMI,gBAC3F64E,aAAoBl6E,IACnBiB,aAAiBlR,KAAoBkR,EAAMI,gBAC3CJ,EAAQA,EAAM7B,wBAElB6B,EAAQA,EAAMnB,cAAc7yf,KAAKo6e,QACjCp6e,KAAKsvf,MAAM5U,aAAaqzE,oBAAoB/5D,EAAOi5E,GAAU,GAC7DV,EAAalkjB,OAAOkkjB,EAAahukB,QAAQ0ukB,GAAW,IAE/CA,aAAoBl6E,IACzB/yf,KAAKsvf,MAAM5U,aAAauyE,YAAYggB,OAGvC,CACD,IAAI5N,EAAe9hkB,EACfy2f,EAAQh0f,KAAKsvf,MAAM5U,aAAai8D,UAAW1kiB,MAAOotjB,IAAgB9+jB,KAEtE,GAAIgskB,EAAa9vkB,OAAS,IAAsB,cAAhBuD,KAAKm2D,QAA0B65e,KACrDh8C,aAAiBjB,OAAkBiB,aAAiB9B,KAAuB,CAEjF,IADI+6E,EAAWV,EAAa,cACJzpF,IAAmB9if,KAAKsvf,MAAM1/a,UAAUryE,MAAMoO,OAAS,IAC3E3L,KAAKsvf,MAAM5U,aAAak0E,yBAAyBqe,GAAU,GAC3DV,EAAalkjB,OAAOkkjB,EAAahukB,QAAQ0ukB,GAAW,GAChDxvkB,EAAkBu2f,IAAQ,CAE1B,IAAI0S,EAAY1mgB,KAAKo6e,OAAOxqa,UAAU2qd,sBAAsB0yC,EAASt6E,kBAAkBvmW,OACvFpsJ,KAAKsvf,MAAM1/a,UAAUmpd,qBAAqBk0C,GACtCxvkB,EAAkBipgB,IAElB1mgB,KAAKsvf,MAAM1/a,UAAUo5d,gBAAgBikC,GAAU,GAI3D,GAAIA,aAAoBl6E,IAAe/yf,KAAKsvf,MAAM1/a,UAAUryE,MAAMoO,OAAS,EAAG,CAC1E,IAAIo6hB,EAAawmC,EAAaA,EAAa9vkB,OAAS,GACpD,GAAIspiB,aAAsBjjD,KACtB9if,KAAKsvf,MAAM5U,aAAak0E,yBAAyB7oB,GAAY,GAC7DwmC,EAAalkjB,OAAOkkjB,EAAahukB,QAAQwniB,GAAa,GAClDtoiB,EAAkBu2f,IAAQ,CAGtBv2f,EADAipgB,EAAY1mgB,KAAKo6e,OAAOxqa,UAAU2qd,sBAAsBwL,EAAWpzC,kBAAkBvmW,SAGrFpsJ,KAAKsvf,MAAM1/a,UAAUo5d,gBAAgBjD,GAAY,KAMrE,GAAIwmC,EAAa9vkB,OAAS,EAAG,CACzB,IAAIywT,EAAYq/Q,EAAaA,EAAa9vkB,OAAS,GACnD,GAAIu3f,aAAiBjB,KACjBiB,EAAQA,EAAMnB,cAAc7yf,KAAKo6e,QAC7BltL,aAAqB6lM,IAAa,CAClC/yf,KAAKsvf,MAAM5U,aAAaqzE,oBAAoB/5D,EAAO9mM,GAAW,GAC9Dq/Q,EAAalkjB,OAAOkkjB,EAAahukB,QAAQ2uT,GAAY,GACrDltT,KAAKyojB,eAAiBlrjB,EACtB,IAAI0+f,EAAa/uM,EAAUylM,kBAAkBvmW,MACzC6vW,EAAW3J,8BAA8BS,GACzCiB,EAAQiI,EAAW3J,oBAGnB+sE,EAAe9hkB,EACfy2f,EAAQh0f,KAAKsvf,MAAM5U,aAAai8D,UAAW1kiB,MAAOotjB,IAAgB9+jB,MAM9E,GAAI2sT,aAAqB41L,IAAmB9if,KAAKsvf,MAAM1/a,UAAUryE,MAAMoO,OAAS,GACzE3L,KAAKsvf,MAAM1/a,UAAUryE,MAAMoO,SAAW3L,KAAKsvf,MAAM1/a,UAAUipd,cAAc74hB,KAAKsvf,MAAM1/a,UAAUryE,MAAMslf,UAAU/6W,WAAY,CAC7H,IAAI+6X,EAAS7igB,KAAKsvf,MAAM5U,aACxBmoB,EAAO+rD,yBAAyB1hQ,GAAW,GAC3Cq/Q,EAAalkjB,OAAOkkjB,EAAahukB,QAAQ2uT,GAAY,GAEjC,UAAhBltT,KAAKm2D,QACL0sc,EAAOorD,YAAYjujB,KAAKsvf,MAAM1/a,UAAUryE,MAAMslf,WAGlD,IAAIA,EAAY7if,KAAKo6e,OAAOxqa,UAAU2qd,sBAAsBrtO,EAAUylM,kBAAkBvmW,OACnF3uJ,EAAkBolf,IACnB7if,KAAKsvf,MAAM1/a,UAAUo5d,gBAAgBnmD,GAAW,QAGnD,GAAI0pF,EAAa,aAAcx5E,IAAuC,IAAxBw5E,EAAa9vkB,OAAc,CAC1E,IAAIk1T,EAAW46Q,EAAa,GACxB56Q,aAAoBmxL,IAAmBnxL,EAASr3E,WAChDiyV,EAAalkjB,OAAOkkjB,EAAahukB,QAAQozT,GAAW,IAI5D46Q,EAAa9vkB,OAAS,IAClBu3f,aAAiBjB,KACjBiB,EAAQA,EAAMnB,cAAc7yf,KAAKo6e,SAErCp6e,KAAKktkB,mBAAmBX,EAAcv4E,MAKtDs3E,EAAgBjwkB,UAAU6xkB,mBAAqB,SAAUX,EAAcv4E,GACnE,IAAK,IAAI73f,EAAIowkB,EAAa9vkB,OAAS,EAAcN,GAAK,EAAGA,IAAK,CAC1D,IAAIoE,EAAOgskB,EAAapwkB,GACpBoE,aAAgBo9f,GAChB39f,KAAKsvf,MAAM5U,aAAawxE,wBAAwBlsjB,KAAKsvf,MAAM1/a,UAAWrvE,GAEjEA,aAAgBgyf,KACjBhyf,aAAgB0xf,GACZ+B,aAAiBjB,KACjBiB,EAAM/Q,aAAa56d,OARW,EAQG,EAAG9nB,GACpCP,KAAKsvf,MAAM5U,aAAawzE,sBAAsB3tjB,GAAM,GAC1C,IAANpE,GAAaowkB,EAAapwkB,EAAI,aAAc81f,IAE5Cjyf,KAAKo6e,OAAOvpb,OAAO0md,2BAA2BvjB,EAAM/hf,MAAO+hf,EAAM9Q,gBAAiB8Q,GAAO,IAI5FA,aAAiBjB,GACtB/yf,KAAKsvf,MAAM5U,aAAayzE,iBAAiBnujB,KAAKsvf,MAAM1/a,UAAWrvE,EAAMyzf,GAGrEh0f,KAAKsvf,MAAM5U,aAAauyE,YAAY1sjB,IAIhDgskB,MAEJjB,EAAgBjwkB,UAAUwxkB,eAAiB,WAEvC,GADA7skB,KAAKoohB,cAAciK,uBAAyBryhB,KACxB,gBAAhBA,KAAKm2D,OACDn2D,KAAKsyhB,mBAAmB,aAAcq4C,IAEtC3qkB,KAAKsyhB,mBAAmB,GAAGu4C,cAAc7qkB,KAAKoohB,cAAc1iC,UAAW1lf,KAAKsvf,YAIhF,GAAItvf,KAAKsyhB,mBAAmB,aAAcy4C,GAAkB,CAEJ,IAAhD/qkB,KAAKsvf,MAAM1/a,UAAUwtc,gBAAgB3ghB,QACrCuD,KAAKsvf,MAAM1/a,UAAUq0d,oBAAmB,GAE5C,IAAIkpC,EAAuBntkB,KAAKsyhB,mBAAmB,GAC/Cp+gB,EAAWi5jB,EAAqB/B,uBAChCp3E,EAAQh0f,KAAKsvf,MAAM5U,aAAai8D,UAAW1kiB,MAAOiC,IAAY3T,KAClE,GAAIyzf,aAAiBjB,GAAa,CAC9B,IAAIixB,EAAchkhB,KAAKsvf,MAAM5U,aAAaspC,YAK1C,GAJAhkhB,KAAKsvf,MAAMuT,OAAOkvB,eAAe/xhB,KAAKsvf,MAAM1/a,WAC5Cokb,EAAQA,EAAMnB,cAAc7yf,KAAKsvf,MAAMlV,QACvC4pC,EAAY2+B,qBAAuB3uD,EACnCh0f,KAAKsyhB,mBAAmBjqgB,OAAO,EAAG,GAC9BroB,KAAKoohB,cAAc3iC,WAAazlf,KAAKoohB,cAAc1iC,UAAW,CAC9D,IAAI0nF,EAA0B,IAAIrC,GAAiB/2E,EAAOh0f,KAAKsvf,OAC/Dtvf,KAAKsyhB,mBAAmBjqgB,OAAO,EAAG,EAAG+kjB,GACrCptkB,KAAKsvf,MAAM7jB,iBAAkB,EAC7Bu4C,EAAYmiC,gBAAgBniC,EAAY2+B,qBAAsBwqB,GAC9DnpD,EAAY2+B,qBAAqB9rD,eAAgB,EACjD72f,KAAKsvf,MAAM7jB,iBAAkB,EAC7Bu4C,EAAYkgC,gBAAgBlgC,EAAY2+B,sBAAsB,GAC9DwqB,EAAqB76jB,UACrB66jB,OAAuBhykB,MAM3CmwkB,EAAgBjwkB,UAAUyxkB,4BAA8B,SAAU32gB,GAI9D,GAHAn2D,KAAKsvf,MAAM9jB,mBAAoB,EAC/Bxre,KAAKoohB,cAAciK,uBAAyBryhB,KAC5CA,KAAKqtkB,qBAAuB,EACb,gBAAXl3gB,EAA0B,CAC1B,IAAIyZ,EAAY5vE,KAAKsvf,MAAM1/a,UACvB0kb,EAAat0f,KAAKsyhB,mBAAmB,GACzCtyhB,KAAKsvf,MAAM5U,aAAa8rF,kBAAkB52f,EAAW0kb,OAErC,iBAAXn+b,GACLn2D,KAAKsvf,MAAMrjB,yBAAyBqhG,wBAAwBttkB,KAAKsyhB,mBAAmB,IAExFtyhB,KAAKqtkB,qBAAuB,EAC5BrtkB,KAAKsvf,MAAM9jB,mBAAoB,GAEnC8/F,EAAgBjwkB,UAAU0uiB,gBAAkB,SAAUx2C,GAClD,IAAIj1H,EAAe,IAAI84J,GAAap3hB,KAAKsvf,OACrC87D,EAAYprjB,KAAKsvf,MAAM5U,aAAawlF,cAAejujB,MAAOshf,IAC1DjgP,EAAWtzQ,KAAKsvf,MAAM5U,aAAaqxD,YAAYqf,EAAUvoE,UAAWuoE,EAAUz/iB,QAElF,OADA2yX,EAAas6J,yBAAyBtlR,EAASxlN,KAAMwlN,EAAS3nQ,QACvD2yX,GASXgtM,EAAgBjwkB,UAAU8/jB,gCAAkC,SAAUn/hB,EAAQhQ,EAAUhvB,GACpF,GAAIgD,KAAKoohB,cAAc3iC,WAAazlf,KAAKoohB,cAAc1iC,UAAW,CAC9D,IAAI4sC,EAAqBtyhB,KAAKsyhB,mBAC1Bi7C,EAAkBvtkB,KAAKqtkB,qBAAuB/6C,EAAmB71hB,OACjE61hB,EAAmBtyhB,KAAKqtkB,sBAAwB/6C,EAAmBA,EAAmB71hB,OAAS,GAC/FgB,EAAkBuuB,IAClBhvB,EAAQuwkB,EACJvtkB,KAAKqtkB,qBAAuBrtkB,KAAKsyhB,mBAAmB71hB,OACpDuD,KAAKsyhB,mBAAmBtyhB,KAAKqtkB,sBAAwBrxiB,EAAO4pd,cAG5D5lf,KAAKsyhB,mBAAmBtyhB,KAAKsyhB,mBAAmB71hB,OAAS,GAAKu/B,EAAO4pd,gBAIzE5of,EAAQuwkB,EAAengkB,iBAAiB4e,GACxCuhjB,EAAe/nF,WAAWxpd,IAE9Bh8B,KAAKqtkB,4BAGL,GAAI5vkB,EAAkBuuB,GAClBhsB,KAAKsyhB,mBAAmB9thB,KAAKw3B,EAAO4pd,mBAEnC,CACD,IAAI4nF,EAAgB,IAAI5qF,GACxB4qF,EAAchoF,WAAWxpd,GACzBh8B,KAAKsyhB,mBAAmB9thB,KAAKgpkB,GAGrC,OAAOxwkB,GASXsukB,EAAgBjwkB,UAAU87jB,sBAAwB,SAAUn7hB,EAAQhQ,EAAUhvB,GAC1E,GAAIgD,KAAKoohB,cAAc3iC,WAAazlf,KAAKoohB,cAAc1iC,UAAW,CAE9D,IAAI6nF,EAAkBvtkB,KAAKqtkB,qBAAuBrtkB,KAAKsyhB,mBAAmB71hB,OAASuD,KAAKsyhB,mBAAmBtyhB,KAAKqtkB,sBAAwBrtkB,KAAKsyhB,mBAAmBtyhB,KAAKsyhB,mBAAmB71hB,OAAS,GAC7LgxkB,GAAa,EACjB,GAAIzxiB,EAAOipd,qBAAqB0Y,GAAY,CACxC,IAAI1uc,EAAajvD,KAAKyrkB,mBAAmBzrkB,KAAKqtkB,sBAC9C,GAAIrxiB,EAAOipd,UAAUxof,OAASwyD,EAAY,CACtCw+gB,GAAa,EACbztkB,KAAKyrkB,mBAAmBzrkB,KAAKqtkB,sBAAwBrxiB,EAAOipd,UAAUxof,OACtEuD,KAAKyrkB,mBAAmBpjjB,OAAOroB,KAAKqtkB,qBAAuB,EAAG,EAAGp+gB,EAAajzB,EAAOipd,UAAUxof,QAE/F,IAAIixkB,EAAa,IAAI1qF,QAAiB7nf,GACtCuykB,EAAWloF,WAAW+nF,GACtBvtkB,KAAKsyhB,mBAAmBjqgB,OAAOroB,KAAKqtkB,qBAAuB,EAAG,EAAGK,IAGrD,yBAAhB1tkB,KAAKm2D,OACDn2D,KAAKoohB,cAAc3iC,WACnBzof,EAAQuwkB,EACHE,IACDztkB,KAAKsyhB,mBAAmBjqgB,OAAOroB,KAAKqtkB,qBAAsB,GAC1DrtkB,KAAKqtkB,yBAITrtkB,KAAKsyhB,mBAAmB9thB,KAAKw3B,EAAO4pd,gBAIxC5of,EAAQuwkB,EACJvtkB,KAAKqtkB,qBAAuBrtkB,KAAKsyhB,mBAAmB71hB,OACpDuD,KAAKsyhB,mBAAmBtyhB,KAAKqtkB,sBAAwBrxiB,EAAO4pd,cAG5D5lf,KAAKsyhB,mBAAmBtyhB,KAAKsyhB,mBAAmB71hB,OAAS,GAAKu/B,EAAO4pd,eAG7E5lf,KAAKqtkB,2BAEJ,CACD,GAAI5vkB,EAAkBuuB,GAClBhsB,KAAKsyhB,mBAAmB9thB,KAAKw3B,EAAO4pd,mBAEnC,CACD,IAAI4nF,EAAgB,IAAIxqF,QAAiB7nf,GACzCqykB,EAAchoF,WAAWxpd,GACzBh8B,KAAKsyhB,mBAAmB9thB,KAAKgpkB,GAE7BxxiB,EAAOipd,qBAAqB0Y,GAC5B39f,KAAKyrkB,mBAAmBjnkB,KAAKw3B,EAAOipd,UAAUxof,QAG9CuD,KAAKyrkB,mBAAmBjnkB,KAAK,GAGrC,OAAOxH,GASXsukB,EAAgBjwkB,UAAU88jB,wCAA0C,SAAUn8hB,EAAQhQ,EAAUhvB,GAC5F,GAAIgD,KAAKoohB,cAAc3iC,WAAazlf,KAAKoohB,cAAc1iC,UAAW,CAE9D,IAAI6nF,EAAkBvtkB,KAAKqtkB,qBAAuBrtkB,KAAKsyhB,mBAAmB71hB,OAASuD,KAAKsyhB,mBAAmBtyhB,KAAKqtkB,sBAAwBrtkB,KAAKsyhB,mBAAmBtyhB,KAAKsyhB,mBAAmB71hB,OAAS,GACjM,GAAoB,yBAAhBuD,KAAKm2D,OAUL,OATIn2D,KAAKoohB,cAAc3iC,WACnBzof,EAAQuwkB,EACRvtkB,KAAKsyhB,mBAAmBjqgB,OAAOroB,KAAKqtkB,qBAAsB,GAC1DrtkB,KAAKqtkB,wBAGLrtkB,KAAKsyhB,mBAAmB9thB,KAAKw3B,EAAO4pd,eAExC5lf,KAAKqtkB,uBACErwkB,EAEX,GAAIS,EAAkBuuB,GASlB,OARAhvB,EAAQuwkB,EACJvtkB,KAAKqtkB,qBAAuBrtkB,KAAKsyhB,mBAAmB71hB,OACpDuD,KAAKsyhB,mBAAmBtyhB,KAAKqtkB,sBAAwBrxiB,EAAO4pd,cAG5D5lf,KAAKsyhB,mBAAmBtyhB,KAAKsyhB,mBAAmB71hB,OAAS,GAAKu/B,EAAO4pd,cAEzE5lf,KAAKqtkB,uBACErwkB,EAEX,GAAiB,eAAbgvB,EAMA,OALAhvB,EAAQ,IAAI+lf,QAAiB5nf,IACvBqqf,WAAW+nF,GACjBA,EAAe3pF,WAAa,IAAI+C,GAChC4mF,EAAe3pF,WAAW4B,WAAWxpd,EAAO4nd,YAC5C5jf,KAAKqtkB,uBACErwkB,EAEX,GAAiB,cAAbgvB,EACA,OAAKvuB,EAAkB8vkB,EAAe5pF,gBAOlC,IANA3mf,EAAQ,IAAIgqf,IACNuF,UAAUghF,EAAe5pF,WAC/B3jf,KAAKqtkB,uBACErwkB,GAMfA,EAAQuwkB,EAAengkB,iBAAiB4e,GACxCuhjB,EAAe/nF,WAAWxpd,GAC1Bh8B,KAAKqtkB,4BAGL,GAAI5vkB,EAAkBuuB,GAClBhsB,KAAKsyhB,mBAAmB9thB,KAAKw3B,EAAO4pd,mBAEnC,CACD,IAAI4nF,EAAgB,IAAIzqF,QAAiB5nf,GACzCqykB,EAAchoF,WAAWxpd,GACzBh8B,KAAKsyhB,mBAAmB9thB,KAAKgpkB,GAGrC,OAAOxwkB,GAKXsukB,EAAgBjwkB,UAAUg+jB,0CAA4C,SAAUz7E,EAAiB5gf,GAC7F,GAAIgD,KAAKoohB,cAAc3iC,WAAazlf,KAAKoohB,cAAc1iC,UAAW,CAW9D,OARA1of,EADsBgD,KAAKqtkB,qBAAuBrtkB,KAAKsyhB,mBAAmB71hB,OAASuD,KAAKsyhB,mBAAmBtyhB,KAAKqtkB,sBAAwBrtkB,KAAKsyhB,mBAAmBtyhB,KAAKsyhB,mBAAmB71hB,OAAS,GAE7LuD,KAAKqtkB,qBAAuBrtkB,KAAKsyhB,mBAAmB71hB,OACpDuD,KAAKsyhB,mBAAmBtyhB,KAAKqtkB,sBAAwBzvF,EAAgBgI,cAGrE5lf,KAAKsyhB,mBAAmBtyhB,KAAKsyhB,mBAAmB71hB,OAAS,GAAKmhf,EAAgBgI,cAElF5lf,KAAKqtkB,uBACErwkB,EAGP,IAAIwwkB,EAAgB,IAAIzqF,GAI5B,OAHIyqF,EAAchoF,WAAW5H,GACzB59e,KAAKsyhB,mBAAmB9thB,KAAKgpkB,GAE1BxwkB,GAOXsukB,EAAgBjwkB,UAAUs+jB,yCAA2C,SAAU/1E,EAAY5mf,GACvF,GAAIgD,KAAKoohB,cAAc3iC,WAAazlf,KAAKoohB,cAAc1iC,UAAW,CAW9D,OARA1of,EADcgD,KAAKqtkB,qBAAuBrtkB,KAAKsyhB,mBAAmB71hB,OAASuD,KAAKsyhB,mBAAmBtyhB,KAAKqtkB,sBAAwBrtkB,KAAKsyhB,mBAAmBtyhB,KAAKsyhB,mBAAmB71hB,OAAS,GAErLuD,KAAKqtkB,qBAAuBrtkB,KAAKsyhB,mBAAmB71hB,OACpDuD,KAAKsyhB,mBAAmBtyhB,KAAKqtkB,sBAAwBzpF,EAAWsC,OAGhElmf,KAAKsyhB,mBAAmBtyhB,KAAKsyhB,mBAAmB71hB,OAAS,GAAKmnf,EAAWsC,OAE7Elmf,KAAKqtkB,uBACErwkB,EAKX,OAFIgD,KAAKsyhB,mBAAmB9thB,KAAKo/e,EAAWsC,QAErClpf,GAOXsukB,EAAgBjwkB,UAAUsykB,6BAA+B,SAAUrlF,GAC/D,IAAItrf,EACJ,GAAIgD,KAAKoohB,cAAc3iC,WAAazlf,KAAKoohB,cAAc1iC,UAAW,CAE9D,IAAIkoF,EAAiB5tkB,KAAKqtkB,qBAAuBrtkB,KAAKsyhB,mBAAmB71hB,OAASuD,KAAKsyhB,mBAAmBtyhB,KAAKqtkB,sBAAwBrtkB,KAAKsyhB,mBAAmBtyhB,KAAKsyhB,mBAAmB71hB,OAAS,GAChMO,EAAQ4wkB,EACRA,EAAgB,IAAI1D,GAAc5hF,EAAWtof,KAAKsvf,MAAM5U,aAAag3C,eAAeppC,IAChFtof,KAAKqtkB,qBAAuBrtkB,KAAKsyhB,mBAAmB71hB,OACpDuD,KAAKsyhB,mBAAmBtyhB,KAAKqtkB,sBAAwBO,EAGrD5tkB,KAAKsyhB,mBAAmBtyhB,KAAKsyhB,mBAAmB71hB,OAAS,GAAKmxkB,EAElE5tkB,KAAKqtkB,4BAGLrtkB,KAAKsyhB,mBAAmB9thB,KAAK,IAAI0lkB,GAAc5hF,EAAWtof,KAAKsvf,MAAM5U,aAAag3C,eAAeppC,KACjGtrf,EAAQsrf,EAEZ,OAAOtrf,GAMXsukB,EAAgBjwkB,UAAU0xkB,iBAAmB,WACzC/skB,KAAKoohB,cAAciK,uBAAyBryhB,KAC5CA,KAAKqtkB,qBAAuB,EAC5B,IAAIrhjB,EAAWhsB,KAAKwsN,cAEpB,GADAxsN,KAAKo6e,OAAOkV,MAAM5U,aAAaq3C,eAAe/xhB,KAAKo6e,OAAOxqa,WACtC,yBAAhB5vE,KAAKm2D,QAAqCn2D,KAAKsyhB,mBAAmB,aAActvC,GAAkB,CAClG,GAAoB,wBAAhBhjf,KAAKm2D,OAEL,YADAn2D,KAAKsvf,MAAM5U,aAAao5E,0BAA0B9zjB,KAAKo6e,OAAOxqa,UAAW5jD,OAAU7wB,GAGvF6E,KAAKsvf,MAAM5U,aAAai5E,mCAAmC3niB,OAAU7wB,GAAW,QAE/E,GAAoB,yBAAhB6E,KAAKm2D,QAAqCn2D,KAAKsyhB,mBAAmB,aAAcvvC,GAAkB,CACvG,GAAoB,sBAAhB/if,KAAKm2D,OAGL,YADAn2D,KAAKsvf,MAAM5U,aAAau+E,wBAAwBj5jB,KAAKsvf,MAAM1/a,UAAW5vE,KAAKsyhB,mBAAmB,IAGlG,GAAoB,cAAhBtyhB,KAAKm2D,QAA0Bn2D,KAAKsyhB,mBAAmB,aAAcvvC,GAGrE,YADA/if,KAAKsvf,MAAM5U,aAAa88E,mCAAmCxriB,EAAUhsB,KAAKsyhB,mBAAmB,GAAG3uC,WAAW,GAG/G3jf,KAAKsvf,MAAM5U,aAAa88E,mCAAmCxriB,OAAU7wB,GAAW,QAE/E,GAAI6E,KAAKsyhB,mBAAmB,aAAc1vC,GAC3C5if,KAAKsvf,MAAM5U,aAAa8/E,oBAAoBxuiB,OAAU7wB,OAErD,CAAA,GAAoB,qBAAhB6E,KAAKm2D,OAEV,YADAn2D,KAAKsvf,MAAM5U,aAAa++E,sBAAsBz5jB,KAAKsvf,MAAM1/a,UAAW5vE,KAAKsyhB,mBAAmB,IAG3F,GAAItyhB,KAAKsyhB,mBAAmB,aAAcxnS,GAC3C9qP,KAAKsvf,MAAM1/a,UAAUqne,gBAAgBj3iB,KAAKsyhB,mBAAmB,SAE5D,GAAItyhB,KAAKsyhB,mBAAmB,aAAc43C,GAAe,CAE1D,IAAK,IADDltU,EAAW,IAAIr3B,GACVxpO,EAAI,EAAGA,EAAI6D,KAAKsyhB,mBAAmB71hB,OAAQN,IAAK,CACrD,IAAI0xkB,EAAgB7tkB,KAAKsyhB,mBAAmBn2hB,GAE5C6gQ,EAAS54P,IAAIjI,EAAG0xkB,GAEpB7tkB,KAAKoohB,cAAc0lD,kBAAkB9wU,GACrCA,EAAS1qP,UACT0qP,OAAW7hQ,OAEN6E,KAAKsyhB,mBAAmB,aAAcjjC,GAC3Crvf,KAAKsvf,MAAM5U,aAAa+gF,kBAAkBz7jB,KAAKsvf,MAAM1/a,UAAW5jD,OAAU7wB,GAErE6E,KAAKsyhB,mBAAmB,aAAcphC,IAC3Clxf,KAAKsvf,MAAM9jB,mBAAoB,EAC/Bxre,KAAKsvf,MAAM5U,aAAaghF,iBAAiB17jB,KAAKsvf,MAAM1/a,UAAW5jD,OAAU7wB,IAEpE6E,KAAKsyhB,mBAAmB,aAAcpiC,IAC3Clwf,KAAKsvf,MAAM5U,aAAaihF,gBAAgB37jB,KAAKsvf,MAAM1/a,UAAW5jD,OAAU7wB,GAE5E6E,KAAKqtkB,qBAAuB,EACR,yBAAhBrtkB,KAAKm2D,QAAqD,yBAAhBn2D,KAAKm2D,QAC/Cn2D,KAAKsvf,MAAM5U,aAAa1gB,eAAeh6d,KAAKo6e,OAAOxqa,YAS3D07f,EAAgBjwkB,UAAU0ykB,uBAAyB,SAAU/H,EAAahqiB,EAAQikC,GAC9E,IAAIutgB,EAQJ,GALIA,EAFA/vkB,EAAkBuokB,EAAY36U,eAAiB5tP,EAAkBuokB,EAAY76U,YAC1E1tP,EAAkBuokB,EAAY56U,cAAgB3tP,EAAkBuokB,EAAY96U,YAC/DlrP,KAAKgukB,gBAAgB/tgB,EAAM6vb,aAG3B9vf,KAAKgukB,gBAAgBhI,GAErChmkB,KAAKoohB,cAAc3iC,WAAazlf,KAAKoohB,cAAc1iC,UAAW,CAW9D,OARA1pd,EADsBh8B,KAAKqtkB,qBAAuBrtkB,KAAKsyhB,mBAAmB71hB,OAASuD,KAAKsyhB,mBAAmBtyhB,KAAKqtkB,sBAAwBrtkB,KAAKsyhB,mBAAmBtyhB,KAAKsyhB,mBAAmB71hB,OAAS,GAE7LuD,KAAKqtkB,qBAAuBrtkB,KAAKsyhB,mBAAmB71hB,OACpDuD,KAAKsyhB,mBAAmBtyhB,KAAKqtkB,sBAAwBrtkB,KAAKgukB,gBAAgBhI,GAG1EhmkB,KAAKsyhB,mBAAmBtyhB,KAAKsyhB,mBAAmB71hB,OAAS,GAAKuD,KAAKgukB,gBAAgBhI,GAEvFhmkB,KAAKqtkB,uBACErxiB,EAKX,OAFIh8B,KAAKsyhB,mBAAmB9thB,KAAKgpkB,GAE1BxxiB,GAEXsviB,EAAgBjwkB,UAAU2ykB,gBAAkB,SAAUhyiB,GAClD,IAAIs4d,EAAa,IAAIpD,GAKrB,OAJAoD,EAAWnpQ,UAAYnvN,EAAOmvN,UAC9BmpQ,EAAWlpQ,YAAcpvN,EAAOovN,YAChCkpQ,EAAWjpQ,aAAervN,EAAOqvN,aACjCipQ,EAAWppQ,WAAalvN,EAAOkvN,WACxBopQ,GAOXg3E,EAAgBjwkB,UAAU4ykB,wBAA0B,SAAUjyiB,GAC1D,IAAIwxiB,EAAgBxtkB,KAAKkukB,iBAAiBlyiB,GAC1C,GAAIh8B,KAAKoohB,cAAc3iC,WAAazlf,KAAKoohB,cAAc1iC,UAAW,CAExC1lf,KAAKqtkB,qBAAuBrtkB,KAAKsyhB,mBAAmB71hB,OAASuD,KAAKsyhB,mBAAmBtyhB,KAAKqtkB,sBAAwBrtkB,KAAKsyhB,mBAAmBtyhB,KAAKsyhB,mBAAmB71hB,OAAS,GAC7LuD,KAAKqtkB,qBAAuBrtkB,KAAKsyhB,mBAAmB71hB,OACpDuD,KAAKsyhB,mBAAmBjqgB,OAAOroB,KAAKqtkB,qBAAsB,EAAGG,GAG7DxtkB,KAAKsyhB,mBAAmBjqgB,OAAOroB,KAAKsyhB,mBAAmB71hB,OAAS,EAAG,EAAG+wkB,GAE1ExtkB,KAAKqtkB,4BAGLrtkB,KAAKsyhB,mBAAmB9thB,KAAKgpkB,IAGrClC,EAAgBjwkB,UAAU6ykB,iBAAmB,SAAUlyiB,GACnD,IAAI8zd,EAAc,IAAIT,GAMtB,OALAS,EAAY3kQ,UAAYnvN,EAAOmvN,UAC/B2kQ,EAAY1kQ,YAAcpvN,EAAOovN,YACjC0kQ,EAAYzkQ,aAAervN,EAAOqvN,aAClCykQ,EAAY5kQ,WAAalvN,EAAOkvN,WAChC4kQ,EAAYl5N,YAAc56P,EAAO46P,YAC1Bk5N,GAEXw7E,EAAgBjwkB,UAAUmxN,YAAc,WACpC,OAAQxsN,KAAKm2D,QACT,IAAK,OACD,MAAO,OACX,IAAK,SACD,MAAO,SACX,IAAK,YACD,MAAO,YACX,IAAK,aACD,MAAO,aACX,IAAK,WACD,MAAO,WACX,IAAK,iBACD,MAAO,iBACX,IAAK,oBACD,MAAO,oBACX,IAAK,gBACD,MAAO,gBACX,IAAK,YACD,MAAO,YACX,IAAK,eACD,MAAO,eACX,IAAK,gBACD,MAAO,gBACX,IAAK,aACD,MAAO,aACX,IAAK,cACD,MAAO,cACX,IAAK,kBACD,MAAO,kBACX,IAAK,kBACD,MAAO,kBACX,IAAK,cACD,MAAO,cACX,IAAK,gBACD,MAAO,gBACX,IAAK,aACD,MAAO,aACX,IAAK,aACD,MAAO,aACX,IAAK,YACD,MAAO,YACX,IAAK,iBACD,MAAO,iBACX,IAAK,kBACD,MAAO,aACX,IAAK,qBACD,MAAO,cACX,IAAK,aACL,IAAK,iBACL,IAAK,wBACD,MAAO,aACX,IAAK,cACL,IAAK,kBACL,IAAK,yBACD,MAAO,cACX,IAAK,YACL,IAAK,gBACL,IAAK,uBACD,MAAO,YACX,IAAK,eACL,IAAK,mBACL,IAAK,0BACD,MAAO,eACX,IAAK,+BACD,MAAO,oBACX,IAAK,YACD,MAAO,SACX,IAAK,gBACD,MAAO,aACX,IAAK,YACD,MAAO,WACX,IAAK,wBACD,MAAO,wBACX,IAAK,sBACL,IAAK,qBACD,MAAO,iBACX,IAAK,0BACL,IAAK,yBACD,MAAO,qBACX,IAAK,UACD,MAAO,UACX,IAAK,YACD,MAAO,cAInBm1gB,EAAgBjwkB,UAAU8ykB,0BAA4B,SAAUnijB,EAAUg+c,GACtE,IAAIhte,EA4BJ,MA3BiB,SAAbgvB,EACAhvB,EAAQgte,EAAiBt7b,KAEP,WAAb1iB,EACLhvB,EAAQgte,EAAiBz4b,OAEP,cAAbvlB,EACLhvB,EAAQgte,EAAiBsgB,UAEP,eAAbt+d,EACLhvB,EAAQgte,EAAiB/8c,WAEP,aAAbjB,EACLhvB,EAAQgte,EAAiBn9c,SAEP,mBAAbb,EACLhvB,EAAQgte,EAAiBwgB,eAEP,sBAAbx+d,EACLhvB,EAAQgte,EAAiBqgB,kBAEP,kBAAbr+d,EACLhvB,EAAQgte,EAAiBugB,cAEP,cAAbv+d,IACLhvB,EAAQgte,EAAiB90N,WAEtBl4Q,GASXsukB,EAAgBjwkB,UAAUyqkB,2BAA6B,SAAU9piB,EAAQhQ,EAAUhvB,GAC/E,GAAIgD,KAAKoohB,cAAc3iC,WAAazlf,KAAKoohB,cAAc1iC,UAAW,CAE9D,IAAI0oF,EAAuBpukB,KAAKqtkB,qBAAuBrtkB,KAAKsyhB,mBAAmB71hB,OAASuD,KAAKsyhB,mBAAmBtyhB,KAAKqtkB,sBAAwBrtkB,KAAKsyhB,mBAAmBtyhB,KAAKsyhB,mBAAmB71hB,OAAS,GACtM,GAAIgB,EAAkBuuB,GASlB,OARAhvB,EAAQoxkB,EACJpukB,KAAKqtkB,qBAAuBrtkB,KAAKsyhB,mBAAmB71hB,OACpDuD,KAAKsyhB,mBAAmBtyhB,KAAKqtkB,sBAAwBrxiB,EAAO4pd,cAG5D5lf,KAAKsyhB,mBAAmBtyhB,KAAKsyhB,mBAAmB71hB,OAAS,GAAKu/B,EAAO4pd,cAEzE5lf,KAAKqtkB,uBACErwkB,EAGPA,EADa,YAAbgvB,EACQoijB,EAAoBl/E,QAGpBk/E,EAAoBhhkB,iBAAiB4e,GAEjDoijB,EAAoB5oF,WAAWxpd,GAC/Bh8B,KAAKqtkB,2BAEJ,CACD,IAAIG,EAAgB,IAAIn+E,GACxBm+E,EAAchoF,WAAWxpd,GACzBh8B,KAAKsyhB,mBAAmB9thB,KAAKgpkB,GAEjC,OAAOxwkB,GASXsukB,EAAgBjwkB,UAAUgrkB,yBAA2B,SAAUlwE,EAAWnqe,EAAUhvB,GAChF,GAAIgD,KAAKoohB,cAAc3iC,WAAazlf,KAAKoohB,cAAc1iC,UAAW,CAE9D,IAAI6nF,EAAkBvtkB,KAAKqtkB,qBAAuBrtkB,KAAKsyhB,mBAAmB71hB,OAASuD,KAAKsyhB,mBAAmBtyhB,KAAKqtkB,sBAAwBrtkB,KAAKsyhB,mBAAmBtyhB,KAAKsyhB,mBAAmB71hB,OAAS,GACjM,GAAIgB,EAAkBuuB,GASlB,OARAhvB,EAAQuwkB,EACJvtkB,KAAKqtkB,qBAAuBrtkB,KAAKsyhB,mBAAmB71hB,OACpDuD,KAAKsyhB,mBAAmBtyhB,KAAKqtkB,sBAAwBl3E,EAAUvQ,cAG/D5lf,KAAKsyhB,mBAAmBtyhB,KAAKsyhB,mBAAmB71hB,OAAS,GAAK05f,EAAUvQ,cAE5E5lf,KAAKqtkB,uBACErwkB,EAEXA,EAAQuwkB,EAAengkB,iBAAiB4e,GACxCuhjB,EAAe/nF,WAAW2Q,GAC1Bn2f,KAAKqtkB,2BAEJ,CACD,IAAIG,EAAgB,IAAIt9E,GACxBs9E,EAAchoF,WAAW2Q,GACzBn2f,KAAKsyhB,mBAAmB9thB,KAAKgpkB,GAEjC,OAAOxwkB,GASXsukB,EAAgBjwkB,UAAUyrkB,0BAA4B,SAAUxyE,EAAYtoe,EAAUhvB,GAClF,GAAIgD,KAAKoohB,cAAc3iC,WAAazlf,KAAKoohB,cAAc1iC,UAAW,CAE9D,IAAI6nF,EAAkBvtkB,KAAKqtkB,qBAAuBrtkB,KAAKsyhB,mBAAmB71hB,OAASuD,KAAKsyhB,mBAAmBtyhB,KAAKqtkB,sBAAwBrtkB,KAAKsyhB,mBAAmBtyhB,KAAKsyhB,mBAAmB71hB,OAAS,GACjM,GAAIgB,EAAkBuuB,GASlB,OARAhvB,EAAQuwkB,EACJvtkB,KAAKqtkB,qBAAuBrtkB,KAAKsyhB,mBAAmB71hB,OACpDuD,KAAKsyhB,mBAAmBtyhB,KAAKqtkB,sBAAwB/4E,EAAW1O,cAGhE5lf,KAAKsyhB,mBAAmBtyhB,KAAKsyhB,mBAAmB71hB,OAAS,GAAK63f,EAAW1O,cAE7E5lf,KAAKqtkB,uBACErwkB,EAGPA,EADa,YAAbgvB,EACQuhjB,EAAer+E,QAGfq+E,EAAengkB,iBAAiB4e,GAE5CuhjB,EAAe/nF,WAAW8O,GAC1Bt0f,KAAKqtkB,2BAEJ,CACD,IAAIG,EAAgB,IAAIt8E,GACxBs8E,EAAchoF,WAAW8O,GACzBt0f,KAAKsyhB,mBAAmB9thB,KAAKgpkB,GAEjC,OAAOxwkB,GAKXsukB,EAAgBjwkB,UAAUiX,QAAU,WAShC,GARAtS,KAAK2lB,oBAAiBxqB,EACtB6E,KAAK6lB,kBAAe1qB,EACpB6E,KAAKyojB,oBAAiBttjB,EACtB6E,KAAKmphB,iBAAchuhB,EACdsC,EAAkBuC,KAAKyrkB,sBACxBzrkB,KAAKyrkB,sBACLzrkB,KAAKyrkB,wBAAqBtwkB,IAEzBsC,EAAkBuC,KAAKsyhB,oBAAqB,CAC7C,IAAK,IAAIn2hB,EAAI,EAAGA,EAAI6D,KAAKsyhB,mBAAmB71hB,OAAQN,IAAK,CACrD,IAAI6vB,EAAWhsB,KAAKsyhB,mBAAmBn2hB,GACnC6vB,aAAoBg3d,GACpBh3d,EAAS1Z,UAEJ0Z,aAAoB+2d,GACzB/2d,EAAS1Z,UAEJ0Z,aAAoB42d,GACzB52d,EAAS1Z,UAEJ0Z,aAAoBk+iB,IACzBl+iB,EAAS1Z,UAEbtS,KAAKsyhB,mBAAmBjqgB,OAAOroB,KAAKsyhB,mBAAmB/zhB,QAAQytB,GAAW,GAC1E7vB,IAEJ6D,KAAKwrkB,0BAAuBrwkB,EAEhC,IAAKsC,EAAkBuC,KAAK4sjB,cAAe,CACvC,IAASzwjB,EAAI,EAAGA,EAAI6D,KAAK4sjB,aAAanwjB,OAAQN,IAAK,CAC/C,IAAIoE,EAAOP,KAAK4sjB,aAAazwjB,GACzBoE,aAAgBuif,GAChBvif,EAAK2yf,gBAAgBlzf,KAAKo6e,QAErB75e,aAAgBo9f,IACrBp9f,EAAK+R,UAETtS,KAAK4sjB,aAAavkiB,OAAOroB,KAAK4sjB,aAAarujB,QAAQgC,GAAO,GAC1DpE,IAEJ6D,KAAK0rkB,oBAAiBvwkB,EAE1B6E,KAAKurkB,aAAUpwkB,GAEZmwkB,KC9pCPvqF,GAA8B,WAO9B,SAASA,EAAaxgf,EAAM65e,GAIxBp6e,KAAKqukB,wBAAqBlzkB,EAI1B6E,KAAKsukB,iBAAcnzkB,EAInB6E,KAAKuukB,mBAAgBpzkB,EAIrB6E,KAAKwukB,kBAAerzkB,EAIpB6E,KAAKyukB,oBAAiBtzkB,EAItB6E,KAAK0ukB,sBAAmBvzkB,EAIxB6E,KAAK2ukB,qBAAkBxzkB,EAIvB6E,KAAK4ukB,oBAAiBzzkB,EAItB6E,KAAK6ukB,qBAAkB1zkB,EAIvB6E,KAAK8ukB,uBAAoB3zkB,EAIzB6E,KAAK+ukB,yBAAsB5zkB,EAI3B6E,KAAKgvkB,wBAAqB7zkB,EAI1B6E,KAAKivkB,0BAAuB9zkB,EAI5B6E,KAAKkvkB,4BAAyB/zkB,EAI9B6E,KAAKmvkB,2BAAwBh0kB,EAI7B6E,KAAKovkB,0BAAuBj0kB,EAI5B6E,KAAKqvkB,2BAAwBl0kB,EAI7B6E,KAAKsvkB,iBAAmB,EAIxBtvkB,KAAKuvkB,yBAAsBp0kB,EAI3B6E,KAAKo5jB,qBAAkBj+jB,EAIvB6E,KAAK4ihB,iBAAkB,EAIvB5ihB,KAAK2ihB,uBAAwB,EAI7B3ihB,KAAKukhB,uBAAwB,EAI7BvkhB,KAAK2jhB,2BAAwBxohB,EAI7B6E,KAAKosH,cAAWjxH,EAIhB6E,KAAKmsH,eAAYhxH,EACjB6E,KAAKsvf,MAAQ/uf,EACbP,KAAKuvkB,oBAAsB,IAAI5pW,GAC/B3lO,KAAKo6e,OAASA,EACdp6e,KAAKwvkB,mBAAqB,IAAIC,GAC1BhykB,EAAkBuC,KAAK0vkB,kBAAoB1vkB,KAAKo6e,QAAUp6e,KAAKo6e,OAAOkmC,eACtEtghB,KAAK8nhB,yBA+9Bb,OA59BAxphB,OAAOuJ,eAAek5e,EAAa1lf,UAAW,0BAK1CqM,IAAK,WACD,OAAO1H,KAAK2vkB,0BAKhBtokB,IAAK,SAAUrK,GACXgD,KAAK2vkB,yBAA2B3ykB,GAEpC2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAek5e,EAAa1lf,UAAW,kBAK1CqM,IAAK,WACD,OAAO1H,KAAKsvkB,kBAKhBjokB,IAAK,SAAUrK,GACXgD,KAAKsvkB,iBAAmBtykB,GAE5B2K,YAAY,EACZC,cAAc,IAKlBm5e,EAAa1lf,UAAUkkC,cAAgB,WACnC,MAAO,gBAWXwhd,EAAa1lf,UAAU4whB,yBAA2B,SAAUl/gB,EAAGC,EAAGgJ,EAAOD,GACrE/V,KAAK4vkB,uBAAuBlrkB,MAAMgI,IAAMM,EAAEE,WAAa,KACvDlN,KAAK4vkB,uBAAuBlrkB,MAAM8H,KAAOO,EAAEG,WAAa,KACxDlN,KAAK4vkB,uBAAuBlrkB,MAAM+pF,YAAc,MAChDzuF,KAAK4vkB,uBAAuBlrkB,MAAMqR,OAASA,EAAS,KACpD/V,KAAK4vkB,uBAAuBlrkB,MAAMsR,MAAQA,EAAQ,KAClDhW,KAAK4vkB,uBAAuBlrkB,MAAMitD,gBAAkB,cACpD3xD,KAAK4vkB,uBAAuBlrkB,MAAMmV,SAAW,SAC7C7Z,KAAK4vkB,uBAAuBlrkB,MAAMwP,SAAW,YAMjD6se,EAAa1lf,UAAUyshB,uBAAyB,WAC5C9nhB,KAAK4vkB,uBAAyBpvkB,SAASW,cAAc,OACrDnB,KAAK4vkB,uBAAuBlrkB,MAAM+9D,OAAS,IAC3CziE,KAAK4vkB,uBAAuBlrkB,MAAM4xC,QAAU,OAC5Ct2C,KAAKo6e,OAAOkmC,cAAc3+gB,YAAY3B,KAAK4vkB,yBAO/C7uF,EAAa1lf,UAAU8xiB,qBAAuB,SAAUzvC,GACpD19f,KAAKuvkB,oBAAoBv/gB,QAEzB,IAAI6/gB,EACCpykB,EAAkBuC,KAAKo6e,OAAO9mP,eAC/Bu8U,EAAY7vkB,KAAK4vkB,wBAEhBnykB,EAAkBoykB,IAAeA,EAAU1rkB,SAASnE,KAAK0vkB,mBAC1D1vkB,KAAK0vkB,gBAAkB1vkB,KAAK8vkB,gBAAgBD,EAAW7vkB,OAE3DA,KAAK0vkB,gBAAgBhrkB,MAAMsR,MAAS0nf,EAAgB,MAAI,KACxD19f,KAAK0vkB,gBAAgBhrkB,MAAMqR,OAAU2nf,EAAiB,OAAI,KAC1D19f,KAAK+vkB,uBAAyBryE,EAC9B,IAAIW,EAAaX,EAAW5vc,KACxBphD,EAAM1M,KAAKo6e,OAAOxqa,UAAUkvM,OAAOu/O,GAAcX,EAAWjhe,OAAO/vB,IACnEF,EAAOxM,KAAKo6e,OAAOxqa,UAAU2vd,gBAAgBlhC,EAAYX,EAAY,GACrEztW,EAAOjwJ,KAAKo6e,OAAOxqa,UAAUqzM,QAAQo7O,EAAWxb,WACpD7if,KAAKszP,YAAcrjG,EAGdxyJ,EAAkBoykB,KACnB7vkB,KAAK4vkB,uBAAuBlrkB,MAAM4xC,QAAU,QAC5Cu5hB,EAAUnrkB,MAAMsR,MAAQi6I,EAAK00V,kBAAkB3ue,MAAQ,KACvD65jB,EAAUnrkB,MAAMqR,OAASk6I,EAAK00V,kBAAkB5ue,OAAS,KACzD85jB,EAAUnrkB,MAAM8H,KAAOyjJ,EAAK00V,kBAAkB53e,EAAI,KAClD8ikB,EAAUnrkB,MAAMgI,IAAMujJ,EAAK00V,kBAAkB33e,EAAI,KACjD6ikB,EAAUnrkB,MAAM+pF,YAAc,MAC9Bohf,EAAUnrkB,MAAMitD,gBAAkB,cAClCk+gB,EAAUnrkB,MAAMmV,SAAW,SAC3Bg2jB,EAAUnrkB,MAAMwP,SAAW,YAE/B,IAAIi3gB,EAAkB,EAClBzvP,EAAY17R,KAAKo6e,OAAOmK,aAAat0V,GACxBjwJ,KAAKo6e,OAEtB+wC,EAAkB3vgB,WAAWxb,KAAK4vkB,uBAAuBlrkB,MAAMsR,OAC1DhW,KAAKo6e,OAAO+iC,cAAcnngB,MAA0BhW,KAAKo6e,OAAOhsa,WAIjEstN,EAAYyvP,GACyBnrhB,KAAKo6e,OAAOhsa,WAGjD6hF,EAAK00V,kBAAkB33e,EAAIhN,KAAKo6e,OAAOhsa,WAAcpuE,KAAKo6e,OAAOlvQ,MAAM3sO,QAAQ0xJ,GAAuBjwJ,KAAKo6e,OAAOhsa,WACtH,IAAI4hgB,EAAiBhwkB,KAAK4vkB,uBACtBK,EAAsBz0jB,WAAWw0jB,EAAetrkB,MAAMsR,OACtDk6jB,EAAuB10jB,WAAWw0jB,EAAetrkB,MAAMqR,QACvDo6jB,EAAuB30jB,WAAWxb,KAAK0vkB,gBAAgBhrkB,MAAMsR,OAC7Do6jB,EAAwB50jB,WAAWxb,KAAK0vkB,gBAAgBhrkB,MAAMqR,QAC9D0mB,GAAUz8B,KAAKqwkB,eAAiB,GAAK,EACrCr6jB,EAAQm6jB,EAAuB,EAAI1ziB,EACnC1mB,EAASq6jB,EAAwB,EAAI3ziB,EAiBzC,GAhBIzmB,GAASi6jB,EAAsBzjkB,GAAQxM,KAAKo6e,OAAOhsa,WAAa3xC,IAChEzmB,GAASi6jB,EAAsBzjkB,GAAQxM,KAAKo6e,OAAOhsa,YAEnDr4D,GAAUm6jB,EAAuBxjkB,GAAO1M,KAAKo6e,OAAOhsa,WAAa3xC,IACjE1mB,GAAUm6jB,EAAuBxjkB,GAAO1M,KAAKo6e,OAAOhsa,YAKxDpuE,KAAK4vkB,uBAAuBlrkB,MAAMsR,MAAQ+e,SAAS/0B,KAAK4vkB,uBAAuBlrkB,MAAMsR,MAAMzG,QAAQ,KAAM,IAAK,IAAMvP,KAAKo6e,OAAOhsa,WAAa,KAC7IpuE,KAAK4vkB,uBAAuBlrkB,MAAMqR,OAASgf,SAAS/0B,KAAK4vkB,uBAAuBlrkB,MAAMqR,OAAOxG,QAAQ,KAAM,IAAK,IAAMvP,KAAKo6e,OAAOhsa,WAAa,KAC/Ir4D,EAAS/V,KAAKo6e,OAAOruY,OAAOuwa,eAAe5e,EAAW3nf,QACtDC,EAAQhW,KAAKo6e,OAAOruY,OAAOuwa,eAAe5e,EAAW1nf,OACrDxJ,EAAOxM,KAAKo6e,OAAOruY,OAAOuwa,eAAe9vgB,GACzCE,EAAM1M,KAAKo6e,OAAOruY,OAAOuwa,eAAe5vgB,GACxC1M,KAAKswkB,wBAAwB9jkB,EAAME,EAAKsJ,EAAOD,EAAQ/V,OAClDA,KAAKuvkB,oBAAoB9oW,YAAY43R,GAAa,CACnD,IAAIkyE,EAAoB,IAAIC,GAAkB9yE,EAAW3nf,OAAQ2nf,EAAW1nf,OAC5EhW,KAAKuvkB,oBAAoBnrkB,IAAIi6f,EAAYkyE,KAOjDxvF,EAAa1lf,UAAU+xiB,iBAAmB,WACjC3viB,EAAkBuC,KAAK4vkB,0BACxB5vkB,KAAK4vkB,uBAAuBlrkB,MAAM4xC,QAAU,IAE3C74C,EAAkBuC,KAAKqukB,sBACxBrukB,KAAKqukB,mBAAmB3pkB,MAAM4xC,QAAU,IAEvC74C,EAAkBuC,KAAKyukB,kBACxBzukB,KAAKyukB,eAAe/pkB,MAAM4xC,QAAU,GACpCt2C,KAAKivkB,qBAAqBvqkB,MAAM4xC,QAAU,IAEzC74C,EAAkBuC,KAAK2ukB,mBACxB3ukB,KAAK2ukB,gBAAgBjqkB,MAAM4xC,QAAU,GACrCt2C,KAAKmvkB,sBAAsBzqkB,MAAM4xC,QAAU,IAE1C74C,EAAkBuC,KAAK0ukB,oBACxB1ukB,KAAK0ukB,iBAAiBhqkB,MAAM4xC,QAAU,GACtCt2C,KAAKkvkB,uBAAuBxqkB,MAAM4xC,QAAU,IAE3C74C,EAAkBuC,KAAK6ukB,mBACxB7ukB,KAAK6ukB,gBAAgBnqkB,MAAM4xC,QAAU,GACrCt2C,KAAKqvkB,sBAAsB3qkB,MAAM4xC,QAAU,IAE1C74C,EAAkBuC,KAAKwukB,gBACxBxukB,KAAKwukB,aAAa9pkB,MAAM4xC,QAAU,GAClCt2C,KAAKgvkB,mBAAmBtqkB,MAAM4xC,QAAU,IAEvC74C,EAAkBuC,KAAKsukB,eACxBtukB,KAAKsukB,YAAY5pkB,MAAM4xC,QAAU,GACjCt2C,KAAK8ukB,kBAAkBpqkB,MAAM4xC,QAAU,IAEtC74C,EAAkBuC,KAAK4ukB,kBACxB5ukB,KAAK4ukB,eAAelqkB,MAAM4xC,QAAU,GACpCt2C,KAAKovkB,qBAAqB1qkB,MAAM4xC,QAAU,IAEzC74C,EAAkBuC,KAAKuukB,iBACxBvukB,KAAKuukB,cAAc7pkB,MAAM4xC,QAAU,GACnCt2C,KAAK+ukB,oBAAoBrqkB,MAAM4xC,QAAU,IAE7Ct2C,KAAK2ihB,uBAAwB,GAMjC5hC,EAAa1lf,UAAU8oiB,iBAAmB,WACjC1miB,EAAkBuC,KAAK4vkB,0BACxB5vkB,KAAK4vkB,uBAAuBlrkB,MAAM4xC,QAAU,QAE3C74C,EAAkBuC,KAAKqukB,sBACxBrukB,KAAKqukB,mBAAmB3pkB,MAAM4xC,QAAU,QAEvC74C,EAAkBuC,KAAKyukB,kBACxBzukB,KAAKyukB,eAAe/pkB,MAAM4xC,QAAU,OACpCt2C,KAAKivkB,qBAAqBvqkB,MAAM4xC,QAAU,QAEzC74C,EAAkBuC,KAAK2ukB,mBACxB3ukB,KAAK2ukB,gBAAgBjqkB,MAAM4xC,QAAU,OACrCt2C,KAAKmvkB,sBAAsBzqkB,MAAM4xC,QAAU,QAE1C74C,EAAkBuC,KAAK0ukB,oBACxB1ukB,KAAK0ukB,iBAAiBhqkB,MAAM4xC,QAAU,OACtCt2C,KAAKkvkB,uBAAuBxqkB,MAAM4xC,QAAU,QAE3C74C,EAAkBuC,KAAK6ukB,mBACxB7ukB,KAAK6ukB,gBAAgBnqkB,MAAM4xC,QAAU,OACrCt2C,KAAKqvkB,sBAAsB3qkB,MAAM4xC,QAAU,QAE1C74C,EAAkBuC,KAAKwukB,gBACxBxukB,KAAKwukB,aAAa9pkB,MAAM4xC,QAAU,OAClCt2C,KAAKgvkB,mBAAmBtqkB,MAAM4xC,QAAU,QAEvC74C,EAAkBuC,KAAKsukB,eACxBtukB,KAAKsukB,YAAY5pkB,MAAM4xC,QAAU,OACjCt2C,KAAK8ukB,kBAAkBpqkB,MAAM4xC,QAAU,QAEtC74C,EAAkBuC,KAAK4ukB,kBACxB5ukB,KAAK4ukB,eAAelqkB,MAAM4xC,QAAU,OACpCt2C,KAAKovkB,qBAAqB1qkB,MAAM4xC,QAAU,QAEzC74C,EAAkBuC,KAAKuukB,iBACxBvukB,KAAKuukB,cAAc7pkB,MAAM4xC,QAAU,OACnCt2C,KAAK+ukB,oBAAoBrqkB,MAAM4xC,QAAU,QAE7Ct2C,KAAK2ihB,uBAAwB,EAC7B3ihB,KAAKszP,iBAAcn4P,GASvB4lf,EAAa1lf,UAAUy0kB,gBAAkB,SAAUD,EAAWlqD,GA2G1D,OA1GA3lhB,KAAKywkB,uBAAuB9qD,GAC5BkqD,EAAUlukB,YAAYgkhB,EAAa0oD,oBACnC1oD,EAAaqpD,mBAAqBxukB,SAASW,cAAc,OACzDwkhB,EAAaqpD,mBAAmBtqkB,MAAM+0D,OAAS,YAC/Cksd,EAAaqpD,mBAAmB1rkB,GAAKtD,KAAKo6e,OAAOkV,MAAMh9W,YAAc,sBACrEtyI,KAAKmmjB,gBAAgBxgC,EAAaqpD,oBAClCrpD,EAAaqpD,mBAAmBtqkB,MAAMsR,MAAShW,KAAKo6e,OAAOqnC,aAAwB,OAAT,OAC1EkE,EAAaqpD,mBAAmBtqkB,MAAMqR,OAAU/V,KAAKo6e,OAAOqnC,aAAwB,OAAT,OAC3EkE,EAAaqpD,mBAAmBtqkB,MAAM+I,QAAU,KAChDoikB,EAAUlukB,YAAYgkhB,EAAaqpD,oBACnCrpD,EAAa6oD,aAAehukB,SAASW,cAAc,OACnDwkhB,EAAa6oD,aAAalrkB,GAAKtD,KAAKo6e,OAAOkV,MAAMh9W,YAAc,gBAC/DqzY,EAAa6oD,aAAa9pkB,MAAM+0D,OAAS,YACzCz5D,KAAKmmjB,gBAAgBxgC,EAAa6oD,cAClCqB,EAAUlukB,YAAYgkhB,EAAa6oD,cACnC7oD,EAAampD,kBAAoBtukB,SAASW,cAAc,OACxDwkhB,EAAampD,kBAAkBpqkB,MAAM+0D,OAAS,YAC9Cksd,EAAampD,kBAAkBxrkB,GAAKtD,KAAKo6e,OAAOkV,MAAMh9W,YAAc,qBACpEtyI,KAAKmmjB,gBAAgBxgC,EAAampD,mBAClCnpD,EAAampD,kBAAkBpqkB,MAAMsR,MAAShW,KAAKo6e,OAAOqnC,aAAwB,OAAT,OACzEkE,EAAampD,kBAAkBpqkB,MAAMqR,OAAU/V,KAAKo6e,OAAOqnC,aAAwB,OAAT,OAC1EkE,EAAampD,kBAAkBpqkB,MAAM+I,QAAU,KAC/CoikB,EAAUlukB,YAAYgkhB,EAAampD,mBACnCnpD,EAAa2oD,YAAc9tkB,SAASW,cAAc,OAClDwkhB,EAAa2oD,YAAYhrkB,GAAKtD,KAAKo6e,OAAOkV,MAAMh9W,YAAc,eAC9DqzY,EAAa2oD,YAAY5pkB,MAAM+0D,OAAS,YACxCz5D,KAAKmmjB,gBAAgBxgC,EAAa2oD,aAClCuB,EAAUlukB,YAAYgkhB,EAAa2oD,aACnC3oD,EAAaopD,oBAAsBvukB,SAASW,cAAc,OAC1DwkhB,EAAaopD,oBAAoBrqkB,MAAM+0D,OAAS,WAChDksd,EAAaopD,oBAAoBzrkB,GAAKtD,KAAKo6e,OAAOkV,MAAMh9W,YAAc,uBACtEtyI,KAAKmmjB,gBAAgBxgC,EAAaopD,qBAClCppD,EAAaopD,oBAAoBrqkB,MAAMsR,MAAShW,KAAKo6e,OAAOqnC,aAAwB,OAAT,OAC3EkE,EAAaopD,oBAAoBrqkB,MAAMqR,OAAU/V,KAAKo6e,OAAOqnC,aAAwB,OAAT,OAC5EkE,EAAaopD,oBAAoBrqkB,MAAM+I,QAAU,KACjDoikB,EAAUlukB,YAAYgkhB,EAAaopD,qBACnCppD,EAAa4oD,cAAgB/tkB,SAASW,cAAc,OACpDwkhB,EAAa4oD,cAAcjrkB,GAAKtD,KAAKo6e,OAAOkV,MAAMh9W,YAAc,iBAChEqzY,EAAa4oD,cAAc7pkB,MAAM+0D,OAAS,WAC1Cz5D,KAAKmmjB,gBAAgBxgC,EAAa4oD,eAClCsB,EAAUlukB,YAAYgkhB,EAAa4oD,eACnC5oD,EAAawpD,sBAAwB3ukB,SAASW,cAAc,OAC5DwkhB,EAAawpD,sBAAsBzqkB,MAAM+0D,OAAS,YAClDksd,EAAawpD,sBAAsB7rkB,GAAKtD,KAAKo6e,OAAOkV,MAAMh9W,YAAc,yBACxEtyI,KAAKmmjB,gBAAgBxgC,EAAawpD,uBAClCxpD,EAAawpD,sBAAsBzqkB,MAAMsR,MAAShW,KAAKo6e,OAAOqnC,aAAwB,OAAT,OAC7EkE,EAAawpD,sBAAsBzqkB,MAAMqR,OAAU/V,KAAKo6e,OAAOqnC,aAAwB,OAAT,OAC9EkE,EAAawpD,sBAAsBzqkB,MAAM+I,QAAU,KACnDoikB,EAAUlukB,YAAYgkhB,EAAawpD,uBACnCxpD,EAAagpD,gBAAkBnukB,SAASW,cAAc,OACtDwkhB,EAAagpD,gBAAgBrrkB,GAAKtD,KAAKo6e,OAAOkV,MAAMh9W,YAAc,mBAClEqzY,EAAagpD,gBAAgBjqkB,MAAM+0D,OAAS,YAC5Cz5D,KAAKmmjB,gBAAgBxgC,EAAagpD,iBAClCkB,EAAUlukB,YAAYgkhB,EAAagpD,iBACnChpD,EAAaspD,qBAAuBzukB,SAASW,cAAc,OAC3DwkhB,EAAaspD,qBAAqBvqkB,MAAM+0D,OAAS,YACjDksd,EAAaspD,qBAAqB3rkB,GAAKtD,KAAKo6e,OAAOkV,MAAMh9W,YAAc,wBACvEtyI,KAAKmmjB,gBAAgBxgC,EAAaspD,sBAClCtpD,EAAaspD,qBAAqBvqkB,MAAMsR,MAAShW,KAAKo6e,OAAOqnC,aAAwB,OAAT,OAC5EkE,EAAaspD,qBAAqBvqkB,MAAMqR,OAAU/V,KAAKo6e,OAAOqnC,aAAwB,OAAT,OAC7EkE,EAAaspD,qBAAqBvqkB,MAAM+I,QAAU,KAClDoikB,EAAUlukB,YAAYgkhB,EAAaspD,sBACnCtpD,EAAa8oD,eAAiBjukB,SAASW,cAAc,OACrDwkhB,EAAa8oD,eAAenrkB,GAAKtD,KAAKo6e,OAAOkV,MAAMh9W,YAAc,kBACjEqzY,EAAa8oD,eAAe/pkB,MAAM+0D,OAAS,YAC3Cz5D,KAAKmmjB,gBAAgBxgC,EAAa8oD,gBAClCoB,EAAUlukB,YAAYgkhB,EAAa8oD,gBACnC9oD,EAAaupD,uBAAyB1ukB,SAASW,cAAc,OAC7DwkhB,EAAaupD,uBAAuBxqkB,MAAM+0D,OAAS,WACnDksd,EAAaupD,uBAAuB5rkB,GAAKtD,KAAKo6e,OAAOkV,MAAMh9W,YAAc,0BACzEtyI,KAAKmmjB,gBAAgBxgC,EAAaupD,wBAClCvpD,EAAaupD,uBAAuBxqkB,MAAMsR,MAAShW,KAAKo6e,OAAOqnC,aAAwB,OAAT,OAC9EkE,EAAaupD,uBAAuBxqkB,MAAMqR,OAAU/V,KAAKo6e,OAAOqnC,aAAwB,OAAT,OAC/EkE,EAAaupD,uBAAuBxqkB,MAAM+I,QAAU,KACpDoikB,EAAUlukB,YAAYgkhB,EAAaupD,wBACnCvpD,EAAa+oD,iBAAmBlukB,SAASW,cAAc,OACvDwkhB,EAAa+oD,iBAAiBprkB,GAAKtD,KAAKo6e,OAAOkV,MAAMh9W,YAAc,oBACnEqzY,EAAa+oD,iBAAiBhqkB,MAAM+0D,OAAS,WAC7Cz5D,KAAKmmjB,gBAAgBxgC,EAAa+oD,kBAClCmB,EAAUlukB,YAAYgkhB,EAAa+oD,kBACnC/oD,EAAa0pD,sBAAwB7ukB,SAASW,cAAc,OAC5DwkhB,EAAa0pD,sBAAsB3qkB,MAAM+0D,OAAS,WAClDksd,EAAa0pD,sBAAsB/rkB,GAAKtD,KAAKo6e,OAAOkV,MAAMh9W,YAAc,yBACxEtyI,KAAKmmjB,gBAAgBxgC,EAAa0pD,uBAClC1pD,EAAa0pD,sBAAsB3qkB,MAAMsR,MAAShW,KAAKo6e,OAAOqnC,aAAwB,OAAT,OAC7EkE,EAAa0pD,sBAAsB3qkB,MAAMqR,OAAU/V,KAAKo6e,OAAOqnC,aAAwB,OAAT,OAC9EkE,EAAa0pD,sBAAsB3qkB,MAAM+I,QAAU,KACnDoikB,EAAUlukB,YAAYgkhB,EAAa0pD,uBACnC1pD,EAAakpD,gBAAkBrukB,SAASW,cAAc,OACtDwkhB,EAAakpD,gBAAgBvrkB,GAAKtD,KAAKo6e,OAAOkV,MAAMh9W,YAAc,mBAClEqzY,EAAakpD,gBAAgBnqkB,MAAM+0D,OAAS,WAC5Cz5D,KAAKmmjB,gBAAgBxgC,EAAakpD,iBAClCgB,EAAUlukB,YAAYgkhB,EAAakpD,iBACnClpD,EAAaypD,qBAAuB5ukB,SAASW,cAAc,OAC3DwkhB,EAAaypD,qBAAqB1qkB,MAAM+0D,OAAS,WACjDksd,EAAaypD,qBAAqB9rkB,GAAKtD,KAAKo6e,OAAOkV,MAAMh9W,YAAc,wBACvEtyI,KAAKmmjB,gBAAgBxgC,EAAaypD,sBAClCzpD,EAAaypD,qBAAqB1qkB,MAAMsR,MAAShW,KAAKo6e,OAAOqnC,aAAwB,OAAT,OAC5EkE,EAAaypD,qBAAqB1qkB,MAAMqR,OAAU/V,KAAKo6e,OAAOqnC,aAAwB,OAAT,OAC7EkE,EAAaypD,qBAAqB1qkB,MAAM+I,QAAU,KAClDoikB,EAAUlukB,YAAYgkhB,EAAaypD,sBACnCzpD,EAAaipD,eAAiBpukB,SAASW,cAAc,OACrDwkhB,EAAaipD,eAAetrkB,GAAKtD,KAAKo6e,OAAOkV,MAAMh9W,YAAc,kBACjEqzY,EAAaipD,eAAelqkB,MAAM+0D,OAAS,WAC3Cz5D,KAAKmmjB,gBAAgBxgC,EAAaipD,gBAClCiB,EAAUlukB,YAAYgkhB,EAAaipD,gBAC5BjpD,EAAa0oD,oBAWxBttF,EAAa1lf,UAAUi1kB,wBAA0B,SAAU9jkB,EAAME,EAAKsJ,EAAOD,EAAQ4vgB,GAEjFA,EAAa0oD,mBAAmB3pkB,MAAMsR,MAAQA,EAAQ,KACtD2vgB,EAAa0oD,mBAAmB3pkB,MAAMqR,OAASA,EAAS,KACxD4vgB,EAAa0oD,mBAAmB3pkB,MAAM8H,KAAOA,EAAO,EAAI,KACxDm5gB,EAAa0oD,mBAAmB3pkB,MAAMgI,IAAMA,EAAM,KAElDi5gB,EAAa6oD,aAAa9pkB,MAAM8H,KAASA,EAAOwJ,EAAS,EAAK,KAC9D2vgB,EAAa6oD,aAAa9pkB,MAAMgI,IAAOA,EAAM,EAAK,KAClDi5gB,EAAa2oD,YAAY5pkB,MAAM8H,KAAQA,EAAO,EAAK,KACnDm5gB,EAAa2oD,YAAY5pkB,MAAMgI,IAAOA,EAAM,EAAK,KACjDi5gB,EAAa4oD,cAAc7pkB,MAAM8H,KAASgP,WAAWmqgB,EAAa2oD,YAAY5pkB,MAAM8H,MAASwJ,EAAQ,EAAM,EAAK,KAChH2vgB,EAAa4oD,cAAc7pkB,MAAMgI,IAAOA,EAAM,EAAK,KACnDi5gB,EAAagpD,gBAAgBjqkB,MAAM8H,KAAOm5gB,EAAa6oD,aAAa9pkB,MAAM8H,KAC1Em5gB,EAAagpD,gBAAgBjqkB,MAAMgI,IAAO8O,WAAWmqgB,EAAa6oD,aAAa9pkB,MAAMgI,KAAOqJ,EAAU,KACtG4vgB,EAAa8oD,eAAe/pkB,MAAM8H,KAAOm5gB,EAAa2oD,YAAY5pkB,MAAM8H,KACxEm5gB,EAAa8oD,eAAe/pkB,MAAMgI,IAAO8O,WAAWmqgB,EAAa2oD,YAAY5pkB,MAAMgI,KAAOqJ,EAAU,KACpG4vgB,EAAa+oD,iBAAiBhqkB,MAAM8H,KAAOm5gB,EAAa4oD,cAAc7pkB,MAAM8H,KAC5Em5gB,EAAa+oD,iBAAiBhqkB,MAAMgI,IAAO8O,WAAWmqgB,EAAa4oD,cAAc7pkB,MAAMgI,KAAOqJ,EAAU,KACxG4vgB,EAAakpD,gBAAgBnqkB,MAAM8H,KAASA,EAAOwJ,EAAS,EAAK,KACjE2vgB,EAAakpD,gBAAgBnqkB,MAAMgI,IAAO8O,WAAWmqgB,EAAa6oD,aAAa9pkB,MAAMgI,KAAQqJ,EAAS,EAAM,KAC5G4vgB,EAAaipD,eAAelqkB,MAAM8H,KAAOm5gB,EAAa2oD,YAAY5pkB,MAAM8H,KACxEm5gB,EAAaipD,eAAelqkB,MAAMgI,IAAO8O,WAAWmqgB,EAAa2oD,YAAY5pkB,MAAMgI,KAAQqJ,EAAS,EAAM,KAC1G4vgB,EAAaqpD,mBAAmBtqkB,MAAM8H,KAAQxM,KAAKo6e,OAAOqnC,aAA+Cj1gB,EAAOwJ,EAAS,GAAM,KAApDxJ,EAAOwJ,EAAS,EAAK,KAChG2vgB,EAAaqpD,mBAAmBtqkB,MAAMgI,IAAO1M,KAAKo6e,OAAOqnC,aAAmC/0gB,EAAM,GAAM,KAA/BA,EAAM,EAAK,KACpFi5gB,EAAampD,kBAAkBpqkB,MAAM8H,KAAQxM,KAAKo6e,OAAOqnC,aAAoCj1gB,EAAO,GAAM,KAAjCA,EAAO,EAAK,KACrFm5gB,EAAampD,kBAAkBpqkB,MAAMgI,IAAO1M,KAAKo6e,OAAOqnC,aAAmC/0gB,EAAM,GAAM,KAA/BA,EAAM,EAAK,KACnFi5gB,EAAaopD,oBAAoBrqkB,MAAM8H,KAASgP,WAAWmqgB,EAAampD,kBAAkBpqkB,MAAM8H,MAASwJ,EAAQ,EAAM,EAAK,KAC5H2vgB,EAAaopD,oBAAoBrqkB,MAAMgI,IAAO1M,KAAKo6e,OAAOqnC,aAAmC/0gB,EAAM,GAAM,KAA/BA,EAAM,EAAK,KACrFi5gB,EAAawpD,sBAAsBzqkB,MAAM8H,KAAOm5gB,EAAaqpD,mBAAmBtqkB,MAAM8H,KACtFm5gB,EAAawpD,sBAAsBzqkB,MAAMgI,IAAO8O,WAAWmqgB,EAAaqpD,mBAAmBtqkB,MAAMgI,KAAOqJ,EAAU,KAClH4vgB,EAAaspD,qBAAqBvqkB,MAAM8H,KAAOm5gB,EAAampD,kBAAkBpqkB,MAAM8H,KACpFm5gB,EAAaspD,qBAAqBvqkB,MAAMgI,IAAO8O,WAAWmqgB,EAAampD,kBAAkBpqkB,MAAMgI,KAAOqJ,EAAU,KAChH4vgB,EAAaupD,uBAAuBxqkB,MAAM8H,KAAOm5gB,EAAaopD,oBAAoBrqkB,MAAM8H,KACxFm5gB,EAAaupD,uBAAuBxqkB,MAAMgI,IAAO8O,WAAWmqgB,EAAaopD,oBAAoBrqkB,MAAMgI,KAAOqJ,EAAU,KACpH4vgB,EAAa0pD,sBAAsB3qkB,MAAM8H,KAAQxM,KAAKo6e,OAAOqnC,aAA+Cj1gB,EAAOwJ,EAAS,GAAM,KAApDxJ,EAAOwJ,EAAS,EAAK,KACnG2vgB,EAAa0pD,sBAAsB3qkB,MAAMgI,IAAO8O,WAAWmqgB,EAAaqpD,mBAAmBtqkB,MAAMgI,KAAQqJ,EAAS,EAAM,KACxH4vgB,EAAaypD,qBAAqB1qkB,MAAM8H,KAAOm5gB,EAAampD,kBAAkBpqkB,MAAM8H,KACpFm5gB,EAAaypD,qBAAqB1qkB,MAAMgI,IAAO8O,WAAWmqgB,EAAampD,kBAAkBpqkB,MAAMgI,KAAQqJ,EAAS,EAAM,KACtH/V,KAAK0wkB,uBAAuB/qD,GACxB3lhB,KAAKo6e,OAAOqnC,aACZzhhB,KAAK2wkB,0BAGL3wkB,KAAK4wkB,2BAQb7vF,EAAa1lf,UAAUq1kB,uBAAyB,SAAU/qD,GACtD3lhB,KAAKwvkB,mBAAmBnB,mBAAmBthkB,EAAIyO,WAAWmqgB,EAAa0oD,mBAAmB3pkB,MAAM8H,MAChGxM,KAAKwvkB,mBAAmBnB,mBAAmBrhkB,EAAIwO,WAAWmqgB,EAAa0oD,mBAAmB3pkB,MAAMgI,KAChG1M,KAAKwvkB,mBAAmBP,qBAAqBlikB,EAAIyO,WAAWmqgB,EAAaspD,qBAAqBvqkB,MAAM8H,MACpGxM,KAAKwvkB,mBAAmBP,qBAAqBjikB,EAAIwO,WAAWmqgB,EAAaspD,qBAAqBvqkB,MAAMgI,KACpG1M,KAAKwvkB,mBAAmBL,sBAAsBpikB,EAAIyO,WAAWmqgB,EAAawpD,sBAAsBzqkB,MAAM8H,MACtGxM,KAAKwvkB,mBAAmBL,sBAAsBnikB,EAAIwO,WAAWmqgB,EAAawpD,sBAAsBzqkB,MAAMgI,KACtG1M,KAAKwvkB,mBAAmBN,uBAAuBnikB,EAAIyO,WAAWmqgB,EAAaupD,uBAAuBxqkB,MAAM8H,MACxGxM,KAAKwvkB,mBAAmBN,uBAAuBlikB,EAAIwO,WAAWmqgB,EAAaupD,uBAAuBxqkB,MAAMgI,KACxG1M,KAAKwvkB,mBAAmBV,kBAAkB/hkB,EAAIyO,WAAWmqgB,EAAampD,kBAAkBpqkB,MAAM8H,MAC9FxM,KAAKwvkB,mBAAmBV,kBAAkB9hkB,EAAIwO,WAAWmqgB,EAAampD,kBAAkBpqkB,MAAMgI,KAC9F1M,KAAKwvkB,mBAAmBR,mBAAmBjikB,EAAIyO,WAAWmqgB,EAAaqpD,mBAAmBtqkB,MAAM8H,MAChGxM,KAAKwvkB,mBAAmBR,mBAAmBhikB,EAAIwO,WAAWmqgB,EAAaqpD,mBAAmBtqkB,MAAMgI,KAChG1M,KAAKwvkB,mBAAmBT,oBAAoBhikB,EAAIyO,WAAWmqgB,EAAaopD,oBAAoBrqkB,MAAM8H,MAClGxM,KAAKwvkB,mBAAmBT,oBAAoB/hkB,EAAIwO,WAAWmqgB,EAAaopD,oBAAoBrqkB,MAAMgI,KAClG1M,KAAKwvkB,mBAAmBJ,qBAAqBrikB,EAAIyO,WAAWmqgB,EAAaypD,qBAAqB1qkB,MAAM8H,MACpGxM,KAAKwvkB,mBAAmBJ,qBAAqBpikB,EAAIwO,WAAWmqgB,EAAaypD,qBAAqB1qkB,MAAMgI,KACpG1M,KAAKwvkB,mBAAmBH,sBAAsBtikB,EAAIyO,WAAWmqgB,EAAa0pD,sBAAsB3qkB,MAAM8H,MACtGxM,KAAKwvkB,mBAAmBH,sBAAsBrikB,EAAIwO,WAAWmqgB,EAAa0pD,sBAAsB3qkB,MAAMgI,MAO1Gq0e,EAAa1lf,UAAUo1kB,uBAAyB,SAAU9qD,GACtDA,EAAa0oD,mBAAqB7tkB,SAASW,cAAc,OACzDwkhB,EAAa0oD,mBAAmB/qkB,GAAKtD,KAAKo6e,OAAOkV,MAAMh9W,YAAc,oBACrEqzY,EAAa0oD,mBAAmB3pkB,MAAMwP,SAAW,WACjDyxgB,EAAa0oD,mBAAmB3pkB,MAAM4/B,OAAS,oBAC/Cqhf,EAAa0oD,mBAAmB3pkB,MAAM+9D,OAAS,KAC/Ckjd,EAAa0oD,mBAAmB3pkB,MAAMitD,gBAAkB,cACxDg0d,EAAa0oD,mBAAmB3pkB,MAAM4xC,QAAU,SAOpDyqc,EAAa1lf,UAAU8qjB,gBAAkB,SAAU0qB,GAC/CA,EAAkBnskB,MAAMwP,SAAW,WACnC28jB,EAAkBnskB,MAAMsR,MAAQ,MAChC66jB,EAAkBnskB,MAAMqR,OAAS,MACjC86jB,EAAkBnskB,MAAMmoB,SAAW,MACnCgkjB,EAAkBnskB,MAAM+9D,OAAS,OACjCougB,EAAkBnskB,MAAMitD,gBAAkB,UAC1Ck/gB,EAAkBnskB,MAAM4/B,OAAS,oBACjCusiB,EAAkBnskB,MAAMoskB,UAAY,2BACpCD,EAAkBnskB,MAAM8xB,MAAQ,WAOpCuqd,EAAa1lf,UAAU01kB,oBAAsB,SAAUr9E,EAAYnlI,EAAO+8J,GACtE/8J,GAAgBvuX,KAAKo6e,OAAOhsa,WAC5Bk9c,GAAgBtrhB,KAAKo6e,OAAOhsa,WAC5BpuE,KAAKmsH,UAAY1uH,EAAkBuC,KAAKmsH,WAAaoiQ,EAAQvuX,KAAKmsH,UAClEnsH,KAAKosH,SAAW3uH,EAAkBuC,KAAKosH,UAAYk/Z,EAAQtrhB,KAAKosH,SAChE,IAAIz0F,EACJ,OAAQ33B,KAAK2jhB,sBAAsBrghB,GAAGpG,MAAM,KAAK,IAC7C,IAAK,qBAEDqxX,GADA52V,EAAS33B,KAAKgxkB,iBAAiBt9E,IAChBlnf,KACf8+gB,EAAQ3zf,EAAOjrB,IACf,MACJ,IAAK,oBAED6hX,IADA52V,EAAS33B,KAAKixkB,gBAAgBv9E,IACdlnf,KAChB8+gB,GAAS3zf,EAAOjrB,IAChB,MACJ,IAAK,sBACD6hX,EAAQ,EACR+8J,EAAQtrhB,KAAKkxkB,kBAAkBx9E,GAC/B,MACJ,IAAK,wBAEDnlI,GADA52V,EAAS33B,KAAKmxkB,oBAAoBz9E,IACnBlnf,KACf8+gB,EAAQ3zf,EAAOjrB,IACf,MACJ,IAAK,uBAED6hX,IADA52V,EAAS33B,KAAKoxkB,mBAAmB19E,IACjBlnf,KAChB8+gB,GAAS3zf,EAAOjrB,IAChB,MACJ,IAAK,yBACD4+gB,EAAQ53B,EAAW1mf,EAAIs+gB,EACvB/8J,EAAQ,EACR,MACJ,IAAK,wBACDA,EAAQmlI,EAAW3mf,EAAIwhX,EACvB+8J,EAAQ,EACR,MACJ,IAAK,uBACD/8J,EAAQvuX,KAAKqxkB,mBAAmB39E,GAChC43B,EAAQ,EAKhB,GAAc,IAAV/8J,GAAyB,IAAV+8J,EAAa,CAC5B,IAAI35B,EAAS3xf,KAAK+vkB,uBAAuBjihB,KAAK+0b,UAC1CvtT,EAAQt1L,KAAK+vkB,uBACjB,IAAKtykB,EAAkBk0f,IAAWA,EAAOyC,cAAe,CACpD,IAAIoF,EAAa7H,EAAOzO,gBACxB,IAAKzlf,EAAkB+7f,GAAa,CAChC,IAAI0O,EAAY1O,EAAWtW,gBACvB/rP,EAAcwzP,GAAcO,oBAAoB51T,EAAMv/K,QACtDu7jB,EAAeppE,EAAUnyf,OAASohP,EAClCm0R,EAAQ,GAAKpjB,EAAUl7f,EAAIskkB,EAAen6U,EAAcm0R,EAAQtrhB,KAAKo6e,OAAOwtB,WAAWj7f,SACvF3M,KAAKukhB,uBAAwB,IAQzC,GAHIvkhB,KAAKsvf,MAAMmvE,mBACXz+jB,KAAKuxkB,2BAA2BvxkB,KAAK+vkB,yBAEpCtykB,EAAkBuC,KAAK+vkB,wBAAyB,CAEjD,IAAI/5jB,EAAQhW,KAAK+vkB,uBAAuB/5jB,MAAQu4W,EAAQ,GAAKvuX,KAAK+vkB,uBAAuB/5jB,MAAQu4W,EAAQ,GAErGx4W,EAAS/V,KAAK+vkB,uBAAuBh6jB,OAASu1gB,EAAQ,GAAKtrhB,KAAK+vkB,uBAAuBh6jB,OAASu1gB,EAAQ,GACxD,0BAAhDtrhB,KAAK2jhB,sBAAsBrghB,GAAGpG,MAAM,KAAK,IACU,uBAAhD8C,KAAK2jhB,sBAAsBrghB,GAAGpG,MAAM,KAAK,IACO,yBAAhD8C,KAAK2jhB,sBAAsBrghB,GAAGpG,MAAM,KAAK,IACO,sBAAhD8C,KAAK2jhB,sBAAsBrghB,GAAGpG,MAAM,KAAK,KAC5C6Y,EAAS/V,KAAK+vkB,uBAAuBh6jB,OAAS/V,KAAK+vkB,uBAAuB/5jB,MAAQA,EAClFA,EAAQhW,KAAK+vkB,uBAAuB/5jB,MAAQhW,KAAK+vkB,uBAAuBh6jB,OAASA,GAErF/V,KAAK+vkB,uBAAuB/5jB,MAAQA,EACpChW,KAAK+vkB,uBAAuBh6jB,OAASA,EACzB/V,KAAK+vkB,uBAAuBjihB,KAAK+0b,UAC7C7if,KAAKmtiB,qBAAqBntiB,KAAK+vkB,wBAEnC/vkB,KAAK4ihB,iBAAkB,IAQ/B7hC,EAAa1lf,UAAUmphB,2BAA6B,SAAUlohB,GAC1D,IAAKmB,EAAkBuC,KAAK2jhB,uBAAwB,CAChD,IAAIp1J,EAAQ/yW,WAAWxb,KAAK2jhB,sBAAsBj/gB,MAAM8H,MACpD8+gB,EAAQ9vgB,WAAWxb,KAAK2jhB,sBAAsBj/gB,MAAMgI,KACpDk3gB,EAAc,IAAI1pe,GAAM59C,EAAMuP,QAASvP,EAAM2P,SAC7Cynf,EAAa1zf,KAAKo6e,OAAOypC,gBAAgBD,GAAa,GAC1D5jhB,KAAK+wkB,oBAAoBr9E,EAAYnlI,EAAO+8J,KAGpDvqC,EAAa1lf,UAAU61kB,kBAAoB,SAAUx9E,GACjD,IAAI43B,EAiBJ,OAhBItrhB,KAAKosH,UAAYsnY,EAAW1mf,GAC5Bs+gB,EAAQtrhB,KAAKosH,SAAWsnY,EAAW1mf,EACnChN,KAAKosH,SAAWsnY,EAAW1mf,EACvBhN,KAAKo6e,kBAAkBC,IACnBr6e,KAAKosH,UAAYpsH,KAAKo6e,OAAOkuC,UAC7BgD,EAAQ,KAKhBA,GAAU53B,EAAW1mf,EAAIhN,KAAKosH,SAC9BpsH,KAAKosH,SAAWsnY,EAAW1mf,EACL,IAAlBhN,KAAKosH,WACLk/Z,GAAS,IAGVA,GAEXvqC,EAAa1lf,UAAUg2kB,mBAAqB,SAAU39E,GAClD,IAAInlI,EAaJ,OAZIvuX,KAAKmsH,WAAaunY,EAAW3mf,GAC7BwhX,EAAQvuX,KAAKmsH,UAAYunY,EAAW3mf,EACpC/M,KAAKmsH,UAAYunY,EAAW3mf,EACL,IAAnB/M,KAAKmsH,YACLoiQ,EAAQ,EACRvuX,KAAKmsH,UAAY3wG,WAAWxb,KAAK2jhB,sBAAsBj/gB,MAAM8H,SAIjE+hX,GAAUmlI,EAAW3mf,EAAI/M,KAAKmsH,UAC9BnsH,KAAKmsH,UAAYunY,EAAW3mf,GAEzBwhX,GAEXwyH,EAAa1lf,UAAU21kB,iBAAmB,SAAUt9E,GAQhD,OANI1zf,KAAKmsH,WAAaunY,EAAW3mf,GAAK/M,KAAKosH,UAAYsnY,EAAW1mf,EACrDhN,KAAKwxkB,sBAAsB99E,GAG3B1zf,KAAKyxkB,sBAAsB/9E,IAI5C3S,EAAa1lf,UAAU41kB,gBAAkB,SAAUv9E,GAQ/C,OANI1zf,KAAKmsH,WAAaunY,EAAW3mf,GAAK/M,KAAKosH,UAAYsnY,EAAW1mf,EACrDhN,KAAKwxkB,sBAAsB99E,GAG3B1zf,KAAKyxkB,sBAAsB/9E,IAI5C3S,EAAa1lf,UAAU81kB,oBAAsB,SAAUz9E,GAQnD,OANI1zf,KAAKmsH,WAAaunY,EAAW3mf,GAAK/M,KAAKosH,UAAYsnY,EAAW1mf,EACrDhN,KAAKwxkB,sBAAsB99E,GAG3B1zf,KAAKyxkB,sBAAsB/9E,IAI5C3S,EAAa1lf,UAAU+1kB,mBAAqB,SAAU19E,GAQlD,OANI1zf,KAAKmsH,WAAaunY,EAAW3mf,GAAK/M,KAAKosH,UAAYsnY,EAAW1mf,EACrDhN,KAAKwxkB,sBAAsB99E,GAG3B1zf,KAAKyxkB,sBAAsB/9E,IAI5C3S,EAAa1lf,UAAUm2kB,sBAAwB,SAAU99E,GACrD,IAAInlI,EACA+8J,EAKJ,OAJA/8J,EAAQmlI,EAAW3mf,EAAI/M,KAAKmsH,UAC5BnsH,KAAKmsH,UAAYunY,EAAW3mf,EAC5Bu+gB,EAAQ53B,EAAW1mf,EAAIhN,KAAKosH,SAC5BpsH,KAAKosH,SAAWsnY,EAAW1mf,GAClBR,KAAM+hX,EAAO7hX,IAAK4+gB,IAE/BvqC,EAAa1lf,UAAUo2kB,sBAAwB,SAAU/9E,GACrD,IAAInlI,EACA+8J,EAKJ,OAJA/8J,IAAUvuX,KAAKmsH,UAAYunY,EAAW3mf,GACtC/M,KAAKmsH,UAAYunY,EAAW3mf,EAC5Bu+gB,IAAUtrhB,KAAKosH,SAAWsnY,EAAW1mf,GACrChN,KAAKosH,SAAWsnY,EAAW1mf,GAClBR,KAAM+hX,EAAO7hX,IAAK4+gB,IAO/BvqC,EAAa1lf,UAAU+qhB,2BAA6B,SAAUsrD,GAC1D,IAAKj0kB,EAAkBuC,KAAK2jhB,uBAAwB,CAChD,IAAIp1J,EAAQ/yW,WAAWxb,KAAK2jhB,sBAAsBj/gB,MAAM8H,MAAQ,GAC5D8+gB,EAAQ9vgB,WAAWxb,KAAK2jhB,sBAAsBj/gB,MAAMgI,KAAO,GAC3DklE,EAAQ8/f,EAAWv9hB,QACnByve,EAAc,IAAI1pe,GAAM03B,EAAM,GAAGx9B,QAASw9B,EAAM,GAAGv9B,SACnDq/c,EAAa1zf,KAAKo6e,OAAOypC,gBAAgBD,GAAa,GAC1D,GAAInmhB,EAAkBuC,KAAK+vkB,yBAA2BtykB,EAAkBuC,KAAK+vkB,wBACzE,OAEJ/vkB,KAAK+wkB,oBAAoBr9E,EAAYnlI,EAAO+8J,KAQpDvqC,EAAa1lf,UAAUqvhB,cAAgB,SAAUh3B,GAC7C,IAAI3mf,EAAI/M,KAAKo6e,OAAOruY,OAAOuwa,eAAe5oB,EAAW3mf,EAAG,GACpDC,EAAIhN,KAAKo6e,OAAOruY,OAAOuwa,eAAe5oB,EAAW1mf,EAAG,GACxD0mf,EAAa,IAAIx5c,GAAMntC,EAAGC,GAC1B,IAAI2kkB,EAAsB3xkB,KAAKwvkB,mBAC3B/kD,EAAiB,GACjBvvY,OAAkB//I,EAClBy2kB,EAAeD,EAAoBzC,uBACnCnriB,EAAc4tiB,EAAoBxC,sBAClCrriB,EAAa6tiB,EAAoB1C,qBACjC4C,EAAYF,EAAoB5C,oBAChClriB,EAAW8tiB,EAAoB3C,mBAC/BpriB,EAAU+tiB,EAAoB7C,kBAC9BgD,EAAcH,EAAoBtC,sBAClC0C,EAAaJ,EAAoBvC,qBAmDrC,OAlDK3xkB,EAAkBuC,KAAKkvkB,yBAAyE,SAA9ClvkB,KAAKkvkB,uBAAuBxqkB,MAAM4xC,UAEhFo9c,EAAW3mf,EAAI6kkB,EAAa7kkB,GAAK2mf,EAAW3mf,GAAK6kkB,EAAa7kkB,EAAI,IAAQ2mf,EAAW1mf,EAAI4kkB,EAAa5kkB,GAAK0mf,EAAW1mf,GAAK4kkB,EAAa5kkB,EAAI,IAC7IkuI,EAAkBl7I,KAAKkvkB,uBACvBzkD,EAAiB,YAGX/2B,EAAW3mf,EAAIg3B,EAAYh3B,GAAK2mf,EAAW3mf,GAAKg3B,EAAYh3B,EAAI,IAAQ2mf,EAAW1mf,EAAI+2B,EAAY/2B,GAAK0mf,EAAW1mf,GAAK+2B,EAAY/2B,EAAI,IAC9IkuI,EAAkBl7I,KAAKmvkB,sBACvB1kD,EAAiB,aAGX/2B,EAAW3mf,EAAI+2B,EAAW/2B,GAAK2mf,EAAW3mf,GAAK+2B,EAAW/2B,EAAI,IAAQ2mf,EAAW1mf,EAAI82B,EAAW92B,GAAK0mf,EAAW1mf,GAAK82B,EAAW92B,EAAI,IAC1IkuI,EAAkBl7I,KAAKivkB,qBACvBxkD,EAAiB,aAGX/2B,EAAW3mf,EAAI8kkB,EAAU9kkB,GAAK2mf,EAAW3mf,GAAK8kkB,EAAU9kkB,EAAI,IAAQ2mf,EAAW1mf,EAAI6kkB,EAAU7kkB,GAAK0mf,EAAW1mf,GAAK6kkB,EAAU7kkB,EAAI,IACtIkuI,EAAkBl7I,KAAK+ukB,oBACvBtkD,EAAiB,YAGX/2B,EAAW3mf,EAAI82B,EAAS92B,GAAK2mf,EAAW3mf,GAAK82B,EAAS92B,EAAI,IAAQ2mf,EAAW1mf,EAAI62B,EAAS72B,GAAK0mf,EAAW1mf,GAAK62B,EAAS72B,EAAI,IAClIkuI,EAAkBl7I,KAAKgvkB,mBACvBvkD,EAAiB,aAGX/2B,EAAW3mf,EAAI62B,EAAQ72B,GAAK2mf,EAAW3mf,GAAK62B,EAAQ72B,EAAI,IAAQ2mf,EAAW1mf,EAAI42B,EAAQ52B,GAAK0mf,EAAW1mf,GAAK42B,EAAQ52B,EAAI,IAC9HkuI,EAAkBl7I,KAAK8ukB,kBACvBrkD,EAAiB,aAGX/2B,EAAW3mf,EAAIglkB,EAAWhlkB,GAAK2mf,EAAW3mf,GAAKglkB,EAAWhlkB,EAAI,IAAQ2mf,EAAW1mf,EAAI+kkB,EAAW/kkB,GAAK0mf,EAAW1mf,GAAK+kkB,EAAW/kkB,EAAI,IAC1IkuI,EAAkBl7I,KAAKovkB,qBACvB3kD,EAAiB,YAGX/2B,EAAW3mf,EAAI+kkB,EAAY/kkB,GAAK2mf,EAAW3mf,GAAK+kkB,EAAY/kkB,EAAI,IAAQ2mf,EAAW1mf,EAAI8kkB,EAAY9kkB,GAAK0mf,EAAW1mf,GAAK8kkB,EAAY9kkB,EAAI,IAC9IkuI,EAAkBl7I,KAAKqvkB,sBACvB5kD,EAAiB,aAGXhthB,EAAkBuC,KAAKqukB,qBAAwB36E,EAAW3mf,EAAIyO,WAAWxb,KAAKqukB,mBAAmB3pkB,MAAM8H,OAC1Gknf,EAAW3mf,GAAMyO,WAAWxb,KAAKqukB,mBAAmB3pkB,MAAM8H,MAAQgP,WAAWxb,KAAKqukB,mBAAmB3pkB,MAAMsR,QAC1G09e,EAAW1mf,EAAIwO,WAAWxb,KAAKqukB,mBAAmB3pkB,MAAMgI,MAErDgnf,EAAW1mf,GAAMwO,WAAWxb,KAAKqukB,mBAAmB3pkB,MAAMgI,KAAO8O,WAAWxb,KAAKqukB,mBAAmB3pkB,MAAMqR,UACjH00gB,EAAiB,UAGhBvvY,gBAAmBA,EAAiBuvY,eAAkBA,IAEnE1pC,EAAa1lf,UAAUu1kB,wBAA0B,WACxCnzkB,EAAkBuC,KAAKivkB,wBACxBjvkB,KAAKkvkB,uBAAuBxqkB,MAAMsR,MAAQ,OAC1ChW,KAAKkvkB,uBAAuBxqkB,MAAMqR,OAAS,OAC3C/V,KAAKmvkB,sBAAsBzqkB,MAAMsR,MAAQ,OACzChW,KAAKmvkB,sBAAsBzqkB,MAAMqR,OAAS,OAC1C/V,KAAKivkB,qBAAqBvqkB,MAAMsR,MAAQ,OACxChW,KAAKivkB,qBAAqBvqkB,MAAMqR,OAAS,OACzC/V,KAAK+ukB,oBAAoBrqkB,MAAMsR,MAAQ,OACvChW,KAAK+ukB,oBAAoBrqkB,MAAMqR,OAAS,OACxC/V,KAAKgvkB,mBAAmBtqkB,MAAMsR,MAAQ,OACtChW,KAAKgvkB,mBAAmBtqkB,MAAMqR,OAAS,OACvC/V,KAAK8ukB,kBAAkBpqkB,MAAMsR,MAAQ,OACrChW,KAAK8ukB,kBAAkBpqkB,MAAMqR,OAAS,OACtC/V,KAAKovkB,qBAAqB1qkB,MAAMsR,MAAQ,OACxChW,KAAKovkB,qBAAqB1qkB,MAAMqR,OAAS,OACzC/V,KAAKqvkB,sBAAsB3qkB,MAAMsR,MAAQ,OACzChW,KAAKqvkB,sBAAsB3qkB,MAAMqR,OAAS,SAQlDgre,EAAa1lf,UAAU4qhB,qBAAuB,SAAU+rD,GACpD,IAAIjlkB,EAAI/M,KAAKo6e,OAAOruY,OAAOuwa,eAAe01D,EAAYjlkB,EAAG,GACrDC,EAAIhN,KAAKo6e,OAAOruY,OAAOuwa,eAAe01D,EAAYhlkB,EAAG,GACzDglkB,EAAc,IAAI93hB,GAAMntC,EAAGC,GAC3B,IAAIilkB,EAA6BjykB,KAAKwvkB,mBAClC/kD,EAAiB,GACjBj9K,OAAmBryW,EACnBy2kB,EAAeK,EAA2B/C,uBAC1CnriB,EAAckuiB,EAA2B9C,sBACzCrriB,EAAamuiB,EAA2BhD,qBACxC4C,EAAYI,EAA2BlD,oBACvClriB,EAAWouiB,EAA2BjD,mBACtCpriB,EAAUquiB,EAA2BnD,kBACrCgD,EAAcG,EAA2B5C,sBACzC0C,EAAaE,EAA2B7C,qBAmD5C,OAlDK3xkB,EAAkBuC,KAAKkvkB,yBAAyE,SAA9ClvkB,KAAKkvkB,uBAAuBxqkB,MAAM4xC,UAEhF07hB,EAAYjlkB,EAAI6kkB,EAAa7kkB,GAAKilkB,EAAYjlkB,GAAK6kkB,EAAa7kkB,EAAI,IAAQilkB,EAAYhlkB,EAAI4kkB,EAAa5kkB,GAAKglkB,EAAYhlkB,GAAK4kkB,EAAa5kkB,EAAI,IACjJwgW,EAAmBxtW,KAAKkvkB,uBACxBzkD,EAAiB,YAGXunD,EAAYjlkB,EAAIg3B,EAAYh3B,GAAKilkB,EAAYjlkB,GAAKg3B,EAAYh3B,EAAI,IAAQilkB,EAAYhlkB,EAAI+2B,EAAY/2B,GAAKglkB,EAAYhlkB,GAAK+2B,EAAY/2B,EAAI,IAClJwgW,EAAmBxtW,KAAKmvkB,sBACxB1kD,EAAiB,aAGXunD,EAAYjlkB,EAAI+2B,EAAW/2B,GAAKilkB,EAAYjlkB,GAAK+2B,EAAW/2B,EAAI,IAAQilkB,EAAYhlkB,EAAI82B,EAAW92B,GAAKglkB,EAAYhlkB,GAAK82B,EAAW92B,EAAI,IAC9IwgW,EAAmBxtW,KAAKivkB,qBACxBxkD,EAAiB,aAGXunD,EAAYjlkB,EAAI8kkB,EAAU9kkB,GAAKilkB,EAAYjlkB,GAAK8kkB,EAAU9kkB,EAAI,IAAQilkB,EAAYhlkB,EAAI6kkB,EAAU7kkB,GAAKglkB,EAAYhlkB,GAAK6kkB,EAAU7kkB,EAAI,IAC1IwgW,EAAmBxtW,KAAK+ukB,oBACxBtkD,EAAiB,YAGXunD,EAAYjlkB,EAAI82B,EAAS92B,GAAKilkB,EAAYjlkB,GAAK82B,EAAS92B,EAAI,IAAQilkB,EAAYhlkB,EAAI62B,EAAS72B,GAAKglkB,EAAYhlkB,GAAK62B,EAAS72B,EAAI,IACtIwgW,EAAmBxtW,KAAKgvkB,mBACxBvkD,EAAiB,aAGXunD,EAAYjlkB,EAAI62B,EAAQ72B,GAAKilkB,EAAYjlkB,GAAK62B,EAAQ72B,EAAI,IAAQilkB,EAAYhlkB,EAAI42B,EAAQ52B,GAAKglkB,EAAYhlkB,GAAK42B,EAAQ52B,EAAI,IAClIwgW,EAAmBxtW,KAAK8ukB,kBACxBrkD,EAAiB,aAGXunD,EAAYjlkB,EAAIglkB,EAAWhlkB,GAAKilkB,EAAYjlkB,GAAKglkB,EAAWhlkB,EAAI,IAAQilkB,EAAYhlkB,EAAI+kkB,EAAW/kkB,GAAKglkB,EAAYhlkB,GAAK+kkB,EAAW/kkB,EAAI,IAC9IwgW,EAAmBxtW,KAAKovkB,qBACxB3kD,EAAiB,YAGXunD,EAAYjlkB,EAAI+kkB,EAAY/kkB,GAAKilkB,EAAYjlkB,GAAK+kkB,EAAY/kkB,EAAI,IAAQilkB,EAAYhlkB,EAAI8kkB,EAAY9kkB,GAAKglkB,EAAYhlkB,GAAK8kkB,EAAY9kkB,EAAI,IAClJwgW,EAAmBxtW,KAAKqvkB,sBACxB5kD,EAAiB,aAGXhthB,EAAkBuC,KAAKqukB,qBAAwB2D,EAAYjlkB,EAAIyO,WAAWxb,KAAKqukB,mBAAmB3pkB,MAAM8H,OAC3GwlkB,EAAYjlkB,GAAMyO,WAAWxb,KAAKqukB,mBAAmB3pkB,MAAM8H,MAAQgP,WAAWxb,KAAKqukB,mBAAmB3pkB,MAAMsR,QAC3Gg8jB,EAAYhlkB,EAAIwO,WAAWxb,KAAKqukB,mBAAmB3pkB,MAAMgI,MAEtDslkB,EAAYhlkB,GAAMwO,WAAWxb,KAAKqukB,mBAAmB3pkB,MAAMgI,KAAO8O,WAAWxb,KAAKqukB,mBAAmB3pkB,MAAMqR,UAClH00gB,EAAiB,UAGhBvvY,gBAAmBsyN,EAAkBi9K,eAAkBA,IAEpE1pC,EAAa1lf,UAAUs1kB,wBAA0B,WACxClzkB,EAAkBuC,KAAKivkB,wBACxBjvkB,KAAKkvkB,uBAAuBxqkB,MAAMsR,MAAQ,OAC1ChW,KAAKkvkB,uBAAuBxqkB,MAAMqR,OAAS,OAC3C/V,KAAKmvkB,sBAAsBzqkB,MAAMsR,MAAQ,OACzChW,KAAKmvkB,sBAAsBzqkB,MAAMqR,OAAS,OAC1C/V,KAAKivkB,qBAAqBvqkB,MAAMsR,MAAQ,OACxChW,KAAKivkB,qBAAqBvqkB,MAAMqR,OAAS,OACzC/V,KAAK+ukB,oBAAoBrqkB,MAAMsR,MAAQ,OACvChW,KAAK+ukB,oBAAoBrqkB,MAAMqR,OAAS,OACxC/V,KAAKgvkB,mBAAmBtqkB,MAAMsR,MAAQ,OACtChW,KAAKgvkB,mBAAmBtqkB,MAAMqR,OAAS,OACvC/V,KAAK8ukB,kBAAkBpqkB,MAAMsR,MAAQ,OACrChW,KAAK8ukB,kBAAkBpqkB,MAAMqR,OAAS,OACtC/V,KAAKovkB,qBAAqB1qkB,MAAMsR,MAAQ,OACxChW,KAAKovkB,qBAAqB1qkB,MAAMqR,OAAS,OACzC/V,KAAKqvkB,sBAAsB3qkB,MAAMsR,MAAQ,OACzChW,KAAKqvkB,sBAAsB3qkB,MAAMqR,OAAS,SAMlDgre,EAAa1lf,UAAUmqhB,gBAAkB,WACrCxlhB,KAAK+vkB,uBAAuB/5jB,MAAQwF,WAAWxb,KAAK0vkB,gBAAgBhrkB,MAAMsR,OAAShW,KAAKo6e,OAAOhsa,WAC/FpuE,KAAK+vkB,uBAAuBh6jB,OAASyF,WAAWxb,KAAK0vkB,gBAAgBhrkB,MAAMqR,QAAU/V,KAAKo6e,OAAOhsa,WACjGpuE,KAAKsvf,MAAM9jB,mBAAoB,EAC/Bxre,KAAKsvf,MAAM5U,aAAaq3C,eAAe/xhB,KAAKsvf,MAAM1/a,WAClD5vE,KAAKo6e,OAAOvpb,OAAOwmd,kBAAkBr3gB,KAAK+vkB,uBAAuBjihB,KAAK+0b,UAAW,EAAG,GACpF7if,KAAKsvf,MAAM5U,aAAa+oE,SAASzjjB,KAAKsvf,MAAM1/a,WAAW,GACvD5vE,KAAKo6e,OAAOI,oBAQhBuG,EAAa1lf,UAAUk2kB,2BAA6B,SAAUxwC,IACrDtjiB,EAAkBuC,KAAKsvf,QAAU7xf,EAAkBuC,KAAKo5jB,mBACzDp5jB,KAAKo5jB,gBAAkB,IAAIkS,GAAgBtrkB,KAAKsvf,OAChDtvf,KAAKo5jB,gBAAgBjjgB,OAAS,gBAC9Bn2D,KAAKo5jB,gBAAgBpnG,kBACrBhyd,KAAKo5jB,gBAAgB9mC,mBAAmB9thB,KAAK,IAAIsmP,GAAYi2S,MAOrEhgD,EAAa1lf,UAAUqqhB,6BAA+B,WAClD,IAAKjohB,EAAkBuC,KAAKsvf,SAAW7xf,EAAkBuC,KAAKo5jB,iBAAkB,CAC5E,IAAI/mB,EAAcryiB,KAAKo5jB,gBAAgB9mC,mBAAmB,GACtDtyhB,KAAK+vkB,uBAAuB/5jB,QAAUq8hB,EAAYr8hB,OAC/ChW,KAAK+vkB,uBAAuBh6jB,SAAWs8hB,EAAYt8hB,OACtD/V,KAAKo5jB,gBAAgB9mC,mBAAmBlmY,MAIxCpsJ,KAAKsvf,MAAM84B,cAAc8jD,cAAclskB,KAAKo5jB,iBAGhDp5jB,KAAKo5jB,qBAAkBj+jB,IAO/B4lf,EAAa1lf,UAAUulhB,2BAA6B,WAChD,IAAKnjhB,EAAkBuC,KAAK+vkB,wBAAyB,CACjD,IAAIryE,EAAa19f,KAAK+vkB,uBAClB1xE,EAAaX,EAAW5vc,KACxBjN,EAAQ7gD,KAAKo6e,OAAOxqa,UAAUkvM,OAAOu/O,GAAcX,EAAWjhe,OAAO/vB,IACrEF,EAAOxM,KAAKo6e,OAAOxqa,UAAU2vd,gBAAgBlhC,EAAYX,EAAY,GACrEtxY,EAAWvrE,EAAQ7gD,KAAKo6e,OAAOhsa,WAC/B+9C,EAAY3/G,EAAOxM,KAAKo6e,OAAOhsa,WAC/Br4D,EAAS/V,KAAKo6e,OAAOruY,OAAOuwa,eAAe5e,EAAW3nf,OAAQ,GAC9DC,EAAQhW,KAAKo6e,OAAOruY,OAAOuwa,eAAe5e,EAAW1nf,MAAO,GAChEhW,KAAKswkB,wBAAwBnkd,EAAWC,EAAUp2G,EAAOD,EAAQ/V,QAOzE+gf,EAAa1lf,UAAUiX,QAAU,WACxB7U,EAAkBuC,KAAKqukB,sBACxBrukB,KAAKqukB,mBAAmBrskB,UAAY,IAEnCvE,EAAkBuC,KAAKsukB,eACxBtukB,KAAKsukB,YAAYtskB,UAAY,IAE5BvE,EAAkBuC,KAAKuukB,iBACxBvukB,KAAKuukB,cAAcvskB,UAAY,IAE9BvE,EAAkBuC,KAAKwukB,gBACxBxukB,KAAKwukB,aAAaxskB,UAAY,IAE7BvE,EAAkBuC,KAAKyukB,kBACxBzukB,KAAKyukB,eAAezskB,UAAY,IAE/BvE,EAAkBuC,KAAK0ukB,oBACxB1ukB,KAAK0ukB,iBAAiB1skB,UAAY,IAEjCvE,EAAkBuC,KAAK2ukB,mBACxB3ukB,KAAK2ukB,gBAAgB3skB,UAAY,IAEhCvE,EAAkBuC,KAAK4ukB,kBACxB5ukB,KAAK4ukB,eAAe5skB,UAAY,IAE/BvE,EAAkBuC,KAAK6ukB,mBACxB7ukB,KAAK6ukB,gBAAgB7skB,UAAY,IAEhCvE,EAAkBuC,KAAK0vkB,mBACxB1vkB,KAAK0vkB,gBAAgB1tkB,UAAY,IAEhCvE,EAAkBuC,KAAKuvkB,sBACxBvvkB,KAAKuvkB,oBAAoBj9jB,UAExB7U,EAAkBuC,KAAK4vkB,0BACxB5vkB,KAAK4vkB,uBAAuB5tkB,UAAY,IAE5ChC,KAAK4vkB,4BAAyBz0kB,EAC9B6E,KAAKqukB,wBAAqBlzkB,EAC1B6E,KAAKsukB,iBAAcnzkB,EACnB6E,KAAKuukB,mBAAgBpzkB,EACrB6E,KAAKwukB,kBAAerzkB,EACpB6E,KAAKyukB,oBAAiBtzkB,EACtB6E,KAAK0ukB,sBAAmBvzkB,EACxB6E,KAAK2ukB,qBAAkBxzkB,EACvB6E,KAAK4ukB,oBAAiBzzkB,EACtB6E,KAAK6ukB,qBAAkB1zkB,EACvB6E,KAAK0vkB,qBAAkBv0kB,EACvB6E,KAAKuvkB,yBAAsBp0kB,EAC3B6E,KAAK4ihB,iBAAkB,EACvB5ihB,KAAK2ihB,uBAAwB,EAC7B3ihB,KAAK2vkB,8BAA2Bx0kB,EAEhC6E,KAAKsvkB,sBAAmBn0kB,EACxB6E,KAAKo6e,YAASj/e,EACd6E,KAAKsvf,WAAQn0f,GAEV4lf,KAMP0uF,GAAqC,WA0CrC,OAtCA,WAGQzvkB,KAAKqukB,mBAAqB,IAAIn0hB,GAAM,EAAG,GAI3Cl6C,KAAK8ukB,kBAAoB,IAAI50hB,GAAM,EAAG,GAItCl6C,KAAK+ukB,oBAAsB,IAAI70hB,GAAM,EAAG,GAIxCl6C,KAAKgvkB,mBAAqB,IAAI90hB,GAAM,EAAG,GAIvCl6C,KAAKivkB,qBAAuB,IAAI/0hB,GAAM,EAAG,GAIzCl6C,KAAKkvkB,uBAAyB,IAAIh1hB,GAAM,EAAG,GAI3Cl6C,KAAKmvkB,sBAAwB,IAAIj1hB,GAAM,EAAG,GAI1Cl6C,KAAKovkB,qBAAuB,IAAIl1hB,GAAM,EAAG,GAIzCl6C,KAAKqvkB,sBAAwB,IAAIn1hB,GAAM,EAAG,OAS9Cs2hB,GAAmC,WAMnC,SAASA,EAAkBz6jB,EAAQC,GAC/BhW,KAAKk0hB,SAAW,EAChBl0hB,KAAKmgiB,QAAU,EACfngiB,KAAKk0hB,SAAWn+gB,EAChB/V,KAAKmgiB,QAAUnqhB,EAoCnB,OAlCA1X,OAAOuJ,eAAe2okB,EAAkBn1kB,UAAW,UAK/CqM,IAAK,WACD,OAAO1H,KAAKk0hB,UAKhB7shB,IAAK,SAAUrK,GACXgD,KAAKk0hB,SAAWl3hB,GAEpB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe2okB,EAAkBn1kB,UAAW,SAK/CqM,IAAK,WACD,OAAO1H,KAAKmgiB,SAKhB94hB,IAAK,SAAUrK,GACXgD,KAAKmgiB,QAAUnjiB,GAEnB2K,YAAY,EACZC,cAAc,IAEX4okB,KCjsCPlmf,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAkBxCunf,GAA6B,SAAU/mf,GAEvC,SAAS+mf,EAAY3xkB,EAAMutJ,GACvB,IAAI/tJ,EAAQorF,EAAO7pF,KAAKtB,KAAMO,IAASP,KAGvC,OAFAD,EAAMoykB,oBAAqB,EAC3BpykB,EAAMoykB,mBAAqBrkb,EACpB/tJ,EA0EX,OA/EAuqF,GAAU4nf,EAAa/mf,GAOvB7sF,OAAOuJ,eAAeqqkB,EAAY72kB,UAAW,aAIzCqM,IAAK,WACD,OAAQjK,EAAkBuC,KAAKoykB,kBAEnCzqkB,YAAY,EACZC,cAAc,IAOlBsqkB,EAAY72kB,UAAUg3kB,kBAAoB,SAAUjZ,GAE1Cp5jB,KAAKoohB,cAAc3iC,WAAazlf,KAAKoohB,cAAc1iC,YACjDjof,EAAkBuC,KAAKoykB,mBACvBpykB,KAAKoykB,oBAETpykB,KAAKoykB,gBAAgB5tkB,KAAK40jB,KAOlC8Y,EAAY72kB,UAAU8wkB,OAAS,WAK3B,GAJAnskB,KAAKoohB,cAAco0B,mBAAqBx8iB,KACpB,sBAAhBA,KAAKm2D,SACLn2D,KAAKsvf,MAAM5U,aAAaosE,2BAA4B,IAEnDrpjB,EAAkBuC,KAAKoykB,iBACxB,GAAIpykB,KAAKoohB,cAAc3iC,UAEnB,IADA,IAAItpf,EAAI6D,KAAKoykB,gBAAgB31kB,OACtBN,EAAI,GAAG,CACY6D,KAAKoykB,gBAAgBj2kB,EAAI,GAC/BgwkB,SAChBhwkB,GAAQ,OAKZ,IADIA,EAAI,EACDA,EAAI6D,KAAKoykB,gBAAgB31kB,QAAQ,CACduD,KAAKoykB,gBAAgBj2kB,GAC3BgwkB,SAChBhwkB,GAAQ,EAIf6D,KAAKmykB,mBAINnykB,KAAKoohB,cAAcs6C,+BAHnB1ikB,KAAKoohB,cAAcq0B,wBAS3By1B,EAAY72kB,UAAUiX,QAAU,WAC5B,IAAK7U,EAAkBuC,KAAKoykB,iBAAkB,CAC1C,KAAOpykB,KAAKoykB,gBAAgB31kB,OAAS,GAAG,CACpC,IAAI28jB,EAAkBp5jB,KAAKoykB,gBAAgBpykB,KAAKoykB,gBAAgB31kB,OAAS,GACzE28jB,EAAgB9mjB,UAChBtS,KAAKoykB,gBAAgB/pjB,OAAOroB,KAAKoykB,gBAAgB7zkB,QAAQ66jB,GAAkB,GAE/Ep5jB,KAAKoykB,qBAAkBj3kB,EAE3BgwF,EAAO9vF,UAAUiX,QAAQhR,KAAKtB,OAE3BkykB,GACT5G,ICxFEtqF,GAA+B,WAI/B,SAASA,EAAczgf,GAEnBP,KAAKsykB,eACLtykB,KAAKuykB,eACLvykB,KAAKwykB,oBAILxykB,KAAKylf,WAAY,EAIjBzlf,KAAK0lf,WAAY,EACjB1lf,KAAKsvf,MAAQ/uf,EACbP,KAAKo6e,OAAS75e,EAAK65e,OACnBp6e,KAAKyykB,oBAAsB,IAAI9sW,GAC/B3lO,KAAK0ykB,YAAc,IACnB1ykB,KAAK2ykB,YAAc,IA6evB,OA3eAr0kB,OAAOuJ,eAAem5e,EAAc3lf,UAAW,sBAI3CqM,IAAK,WACD,OAAO1H,KAAKwykB,kBAAoBxykB,KAAKwykB,iBAAiB/1kB,OAAS,EAC3DuD,KAAKwykB,iBAAiBxykB,KAAKwykB,iBAAiB/1kB,OAAS,QAAKtB,GAElEkM,IAAK,SAAUrK,GACPA,aAAiBk1kB,GACjBlykB,KAAKwykB,iBAAiBhukB,KAAKxH,GAG3BgD,KAAKwykB,iBAAiBpmb,OAG9BzkJ,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAem5e,EAAc3lf,UAAW,aAM3CqM,IAAK,WAAc,OAAO1H,KAAKsykB,aAC/B3qkB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAem5e,EAAc3lf,UAAW,aAK3CqM,IAAK,WAAc,OAAO1H,KAAKuykB,aAC/B5qkB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAem5e,EAAc3lf,UAAW,aAI3CqM,IAAK,WACD,OAAOjK,EAAkBuC,KAAK0ykB,aAAe,EAAI1ykB,KAAK0ykB,aAE1DrrkB,IAAK,SAAUrK,GACX,GAAIA,EAAQ,EACR,MAAM,IAAI4D,MAAM,sDAEpBZ,KAAK0ykB,YAAc11kB,GAEvB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAem5e,EAAc3lf,UAAW,aAI3CqM,IAAK,WACD,OAAOjK,EAAkBuC,KAAK2ykB,aAAe,EAAI3ykB,KAAK2ykB,aAE1DtrkB,IAAK,SAAUrK,GACX,GAAIA,EAAQ,EACR,MAAM,IAAI4D,MAAM,sDAEpBZ,KAAK2ykB,YAAc31kB,GAEvB2K,YAAY,EACZC,cAAc,IAKlBo5e,EAAc3lf,UAAUkkC,cAAgB,WACpC,MAAO,iBAMXyhd,EAAc3lf,UAAUy4b,QAAU,WAC9B,OAAQr2b,EAAkBuC,KAAKkoc,YAAcloc,KAAKkoc,UAAUzrc,OAAS,GAMzEukf,EAAc3lf,UAAU04b,QAAU,WAC9B,OAAQt2b,EAAkBuC,KAAKmoc,YAAcnoc,KAAKmoc,UAAU1rc,OAAS,GAUzEukf,EAAc3lf,UAAUw5jB,kBAAoB,SAAU1+f,GAClDn2D,KAAKqyhB,uBAAyB,IAAIi5C,GAAgBtrkB,KAAKsvf,OACvDtvf,KAAKqyhB,uBAAuBl8d,OAASA,EACrCn2D,KAAKqyhB,uBAAuBrgE,mBAQhCgvB,EAAc3lf,UAAUkhjB,mBAAqB,SAAU3se,EAAWzZ,GAC9Dn2D,KAAKw8iB,mBAAqB,IAAI01B,GAAYtigB,EAAU0/a,OAAQ7xf,EAAkBuC,KAAKw8iB,qBACnFx8iB,KAAKw8iB,mBAAmBrmf,OAASA,EACjCn2D,KAAKw8iB,mBAAmBxqF,mBAK5BgvB,EAAc3lf,UAAUunjB,oBAAsB,SAAU/wG,EAAemyE,GACnE,GAA+B,IAA3BA,EAAYy+B,WACZzijB,KAAK60jB,kBAAkB,eAClBp3jB,EAAkBuC,KAAKqyhB,yBAExBryhB,KAAKqyhB,uBAAuBC,mBAAmB9thB,KAAK,IAAImmkB,GAAiB94H,EAAemyE,EAAY2+B,qBAAqB1/D,aAAa+gC,EAAY0+B,iBAAiBvsD,iBAKvK,GADAn2f,KAAK60jB,kBAAkB,gBACnB70jB,KAAKqyhB,uBAAwB,CAC7BrO,EAAY2+B,qBAAuB3+B,EAAY2+B,qBAAqB9vD,cAAc7yf,KAAKo6e,QACvF,IAAIgsE,EAAmB,IAAI2kB,GAAiB/mD,EAAY2+B,qBAAsB3ijB,KAAKsvf,OACnF82D,EAAiBv0G,cAAgBA,EACjC7xc,KAAKqyhB,uBAAuBC,mBAAmB9thB,KAAK4hjB,KAUhEplE,EAAc3lf,UAAU8phB,sBAAwB,SAAUrxf,EAAOkwf,GAC7D,GAA+B,IAA3BA,EAAYy+B,YACZ,IAAKhljB,EAAkBuC,KAAKqyhB,wBAAyB,CACjD,IAAIugD,EAAmB5ykB,KAAKqyhB,uBAAuBC,mBAAmB,GAClEsgD,EAAiB/gI,cAAc7kc,IAAM8mB,EAAM9mB,EAC3ChN,KAAKqyhB,uBAAuBC,mBAAmB71hB,OAAS,GAGxDm2kB,EAAiB7oL,aAAe4gG,GAAcQ,oBAAoBr3d,EAAM9mB,EAAI4lkB,EAAiB/gI,cAAc7kc,GAC3GhN,KAAKkskB,cAAclskB,KAAKqyhB,wBACxBryhB,KAAKqyhB,4BAAyBl3hB,SAKtC,IAAKsC,EAAkBuC,KAAKqyhB,wBAAyB,CACjD,IAAIwgD,EAAoB7ykB,KAAKqyhB,uBAAuBC,mBAAmB,GACnEugD,EAAkBhhI,cAAc9kc,IAAM+mB,EAAM/mB,EAC5C/M,KAAKqyhB,uBAAuBC,mBAAmB71hB,OAAS,GAGxDo2kB,EAAkB9oL,aAAe4gG,GAAcQ,oBAAoBr3d,EAAM/mB,EAAI8lkB,EAAkBhhI,cAAc9kc,GAC7G8lkB,EAAkBjtjB,SAAWo+f,EAAY8+B,uBAAuBhvhB,GAChE9zB,KAAKsvf,MAAM84B,cAAc8jD,cAAclskB,KAAKqyhB,wBAC5CryhB,KAAKqyhB,4BAAyBl3hB,KAU9C6lf,EAAc3lf,UAAU6wkB,cAAgB,SAAU9S,GAC9C,GAAKp5jB,KAAKsvf,MAAMmvE,kBAGhB,GAAIz+jB,KAAKylf,UAAW,CAIhB,GAHIhof,EAAkBuC,KAAKmoc,aACvBnoc,KAAKuykB,gBAELvykB,KAAKmoc,UAAU1rc,SAAWuD,KAAK8ykB,WAAa9ykB,KAAK8ykB,UAAY,EAAG,CAChE,IAAIh0jB,EAAQ9e,KAAK+ykB,UAAY,GAAK,GAAK,EACvC/ykB,KAAKuykB,YAAYlqjB,OAAO,EAAGvJ,GAE3B9e,KAAKmoc,UAAU1rc,OAASuD,KAAK8ykB,WAC7B9ykB,KAAKmoc,UAAU3jc,KAAK40jB,OAGvB,CAOD,GANKp5jB,KAAK0lf,WACN1lf,KAAKgzkB,iBAELv1kB,EAAkBuC,KAAKkoc,aACvBloc,KAAKsykB,gBAELtykB,KAAKkoc,UAAUzrc,SAAWuD,KAAK+ykB,WAAa/ykB,KAAK+ykB,UAAY,EAAG,CAC5Dj0jB,EAAQ9e,KAAK+ykB,UAAY,GAAK,GAAK,EACvC/ykB,KAAKsykB,YAAYjqjB,OAAO,EAAGvJ,GAE3B9e,KAAKkoc,UAAUzrc,OAASuD,KAAK+ykB,WAC7B/ykB,KAAKsykB,YAAY9tkB,KAAK40jB,KAQlCp4E,EAAc3lf,UAAUk3hB,cAAgB,WAChCvyhB,KAAKo6e,OAAOkV,MAAMmvE,oBAAsBhhkB,EAAkBuC,KAAKqyhB,2BAE1D50hB,EAAkBuC,KAAKqyhB,yBACrB50hB,EAAkBuC,KAAKqyhB,uBAAuBlJ,eACjDnphB,KAAKqyhB,uBAAuBlJ,YAAcnphB,KAAKqyhB,uBAAuBo2B,gBAErEhrjB,EAAkBuC,KAAKw8iB,oBAIxBx8iB,KAAKkskB,cAAclskB,KAAKqyhB,wBAHxBryhB,KAAKw8iB,mBAAmB61B,kBAAkBrykB,KAAKqyhB,wBAKnDryhB,KAAKqyhB,4BAAyBl3hB,IAMtC6lf,EAAc3lf,UAAU63jB,wBAA0B,WAC9C,IAAIA,GAA0B,EAW9B,OAVMlzjB,KAAKylf,WAAazlf,KAAK0lf,YACzBwtE,EAA0BlzjB,KAAKsvf,MAAM5U,aAAaklF,gCAElD5/jB,KAAKo6e,OAAOkV,MAAMmvE,oBAAsBhhkB,EAAkBuC,KAAKw8iB,qBAC/Dx8iB,KAAKuyhB,gBACL2gC,GAA0B,GAErBlzjB,KAAKsvf,MAAM5U,aAAa+rE,mBAC7ByM,GAA0B,GAEvBA,GAMXlyE,EAAc3lf,UAAUohjB,qBAAuB,WAC3C,IAAI7se,EAAY5vE,KAAKo6e,OAAOxqa,UAC5B,GAAI5vE,KAAKw8iB,mBAAmBy2B,UAAW,CACnC,GAAuC,wBAAnCjzkB,KAAKw8iB,mBAAmBrmf,OAAkC,CAC1D,IAAI22N,EAAgB,IAAIsqQ,GAAaxnd,EAAU0/a,OAC/Ctvf,KAAKsvf,MAAM5U,aAAas9C,2BAA2BlrQ,EAAe9sR,KAAKw8iB,mBAAmBiM,gBAEtF74e,EAAU0/a,MAAM84B,cAAc3iC,WAC9Bzlf,KAAKsvf,MAAM5U,aAAas9C,2BAA2Bpod,EAAUryE,MAAOyC,KAAKw8iB,mBAAmB72hB,gBAC5F3lB,KAAKsvf,MAAM5U,aAAas9C,2BAA2Bpod,EAAU/wD,IAAK7e,KAAKw8iB,mBAAmB32hB,gBAG1F7lB,KAAKsvf,MAAM5U,aAAas9C,2BAA2Bpod,EAAUryE,MAAOyC,KAAKw8iB,mBAAmBrzB,aAC5FnphB,KAAKsvf,MAAM5U,aAAas9C,2BAA2Bpod,EAAU/wD,IAAK7e,KAAKw8iB,mBAAmBrzB,cAGlG,GAAuC,oBAAnCnphB,KAAKw8iB,mBAAmBrmf,OAA8B,CAClD22N,EAAgB,IAAIsqQ,GAAaxnd,EAAU0/a,OAC/Ctvf,KAAKsvf,MAAM5U,aAAas9C,2BAA2BlrQ,EAAe9sR,KAAKw8iB,mBAAmBiM,gBAC1F,IAAIt/B,EAAc,IAAIiO,GAAaxnd,EAAU0/a,OAC7Ctvf,KAAKsvf,MAAM5U,aAAas9C,2BAA2B7O,EAAanphB,KAAKw8iB,mBAAmBrzB,aACxFnphB,KAAKo6e,OAAOvpb,OAAOwmd,kBAAkBvqP,EAAc+1N,UAAW,EAAG,GAC7DsmC,EAAYtmC,YAAc/1N,EAAc+1N,WACxC7if,KAAKo6e,OAAOvpb,OAAOwmd,kBAAkB8R,EAAYtmC,UAAW,EAAG,GAGhC,eAAnC7if,KAAKw8iB,mBAAmBrmf,OACxBn2D,KAAKsvf,MAAM5U,aAAay3C,sBAEnBvid,EAAU0/a,MAAM9jB,oBACrBxre,KAAKo6e,OAAOvpb,OAAOood,qBACfj5gB,KAAKsvf,MAAMye,uBACX/tgB,KAAKsvf,MAAM5U,aAAau4E,4BAIpCrjf,EAAU0/a,MAAM9jB,mBAAoB,EACpC57Z,EAAU0/a,MAAM7jB,iBAAkB,EAElC77Z,EAAUryE,MAAMu6hB,wBAAuB,GACnClod,EAAU0qK,QACV1qK,EAAU/wD,IAAIk5gB,oBAAoBnod,EAAUryE,OAG5CqyE,EAAU/wD,IAAIi5gB,wBAAuB,GAEzClod,EAAUwud,sBAAwBxud,EAAU/wD,IAAI6O,SAAS3gB,EACzD6iE,EAAUk1d,sBAAqB,GAC/B9kiB,KAAKo6e,OAAO8H,cACZlif,KAAK0ikB,+BACL1ikB,KAAKo6e,OAAOI,mBACZx6e,KAAKsvf,MAAM5U,aAAawC,qBAK5B8D,EAAc3lf,UAAUqnkB,6BAA+B,WACnD,IAAKjlkB,EAAkBuC,KAAKw8iB,oBAAqB,CAK7C,GAHI/+iB,EAAkBuC,KAAKw8iB,mBAAmBrzB,eAC1CnphB,KAAKw8iB,mBAAmBrzB,YAAcnphB,KAAKw8iB,mBAAmBiM,gBAE9DzojB,KAAKwykB,iBAAiB/1kB,OAAS,EAAG,CAChBuD,KAAKwykB,iBAAiBxykB,KAAKwykB,iBAAiB/1kB,OAAS,GAC3D41kB,kBAAkBrykB,KAAKw8iB,yBAGnCx8iB,KAAKkskB,cAAclskB,KAAKw8iB,oBAE5Bx8iB,KAAKw8iB,wBAAqBrhjB,IAWlC6lf,EAAc3lf,UAAU22hB,2BAA6B,SAAUP,EAAqB5ub,GAChF7iG,KAAKqyhB,uBAAyB,IAAIi5C,GAAgBtrkB,KAAKo6e,OAAOkV,OAC9Dtvf,KAAKqyhB,uBAAuBl8d,OAAS,OACrCn2D,KAAKqyhB,uBAAuBrgE,kBAE5B,IAAK,IADD7qb,EAAa,IAAIw+L,GACZxpO,EAAI,EAAGA,EAAIs1hB,EAAoBryc,OAAO3iF,OAAQN,IAAK,CACxD,IAAIijF,EAASp/E,KAAKo6e,OAAOm0B,oBAAoB1ra,EAAKujZ,gBAAgBhna,OAAOjjF,GAErE0xkB,GADQ7tkB,KAAKqyhB,uBAAuBs7C,6BAA6Bvuf,GACjD,IAAI8qf,GAAc9qf,EAAQqyc,EAAoBryc,OAAOjjF,KACpEsB,EAAkB2hF,IACnBp/E,KAAKo6e,OAAOkV,MAAM5U,aAAamkF,cAAcz/e,EAAQqyc,EAAoBryc,OAAOjjF,IAEpFgrC,EAAW/iC,IAAIjI,EAAG0xkB,GAEtB,OAAO1miB,GAQX65c,EAAc3lf,UAAU62hB,iBAAmB,SAAUtid,EAAWsjgB,GACxDz1kB,EAAkBuC,KAAKyykB,uBACvBzykB,KAAKyykB,oBAAsB,IAAI9sW,IAGnC,IAAK,IADDx+L,KACKhrC,EAAI,EAAGA,EAAI6D,KAAKo6e,OAAO0kF,eAAerikB,OAAQN,IAAK,CACxD,IACIwwgB,EADY3sgB,KAAKo6e,OAAO0kF,eAAe3ikB,GAChByhf,gBACvBw2E,EAAcp0jB,KAAKo6e,OAAO4wB,YAAY2B,EAAW/oB,WAAWsC,QAC5DoC,EAAYtof,KAAKo6e,OAAOvpb,OAAO01b,aAAa6tE,EAAaznD,EAAW/oB,WAAWmD,iBAEnF,GAAImsF,EAAuBzsW,YAAYkmS,EAAW/oB,WAAWmD,kBACtDmsF,EAAuBxrkB,IAAIilgB,EAAW/oB,WAAWmD,iBAAiBsjF,iBAAmB/hF,EAAW,CACnG,IAAI8uE,EAAiB,IAAIr0E,GAAiB,MAC1Cq0E,EAAenuE,WAAa0jB,EAAW1jB,WACvCmuE,EAAex5U,gBAAkB+uR,EAAW/uR,gBAC5C,IAAIof,EAAW,IAAIutU,GAAwB59D,EAAYyqD,GACvDjwhB,EAAW3iC,KAAKw4P,GAChBh9P,KAAKsvf,MAAM5U,aAAa29E,iCAAiC1rD,EAAYrkB,EAAU1K,kBAGvF59e,KAAKyykB,oBAAoBrukB,IAAIpE,KAAKqyhB,uBAAwBlrf,IAQ9D65c,EAAc3lf,UAAUyykB,kBAAoB,SAAUqF,GAClDnzkB,KAAKo6e,OAAOkV,MAAM7jB,iBAAkB,EACpCzre,KAAKsvf,MAAM5U,aAAau3C,uBACxB,IAAK,IAAI91hB,EAAI,EAAGA,EAAIg3kB,EAAmB71kB,KAAKb,OAAQN,IAAK,CACrD,IAAI4pf,EAAcotF,EAAmB71kB,KAAK,GACtCuwkB,EAAgBsF,EAAmBzrkB,IAAIq+e,GACtCtof,EAAkBuC,KAAKqyhB,0BAExBw7C,EAAgB7tkB,KAAKqyhB,uBAAuBs7C,6BAA6BE,EAAcxD,iBAE3FrqkB,KAAKsvf,MAAM5U,aAAamkF,cAAcgP,EAAcxD,eAAgBwD,EAAcvD,mBAEtFtqkB,KAAKozkB,oBACLpzkB,KAAKo6e,OAAOkV,MAAM7jB,iBAAkB,EACpCzre,KAAKo6e,OAAOk0B,cAAct+c,QAC1BhwD,KAAKo6e,OAAOlvQ,SACZlrO,KAAKo6e,OAAOvpb,OAAOA,SACnB,IAAI+e,EAAY5vE,KAAKo6e,OAAOxqa,UAC5BA,EAAUryE,MAAMu6hB,wBAAuB,GACnClod,EAAU0qK,QACV1qK,EAAU/wD,IAAIk5gB,oBAAoBnod,EAAUryE,OAG5CqyE,EAAU/wD,IAAIi5gB,wBAAuB,GAEzClod,EAAUwud,sBAAwBxud,EAAU/wD,IAAI6O,SAAS3gB,EACzD6iE,EAAUk1d,sBAAqB,GAC/B9kiB,KAAKuyhB,iBAMTvxC,EAAc3lf,UAAU+3kB,kBAAoB,WAExC,IAAK31kB,EAAkBuC,KAAKqyhB,yBACrBryhB,KAAKo6e,OAAOkV,MAAM84B,cAAcqqD,oBAAoBhsW,YAAYzmO,KAAKqyhB,wBAGxE,IAAK,IADDlrf,EAAannC,KAAKyykB,oBAAoB/qkB,IAAI1H,KAAKqyhB,wBAC1Cl2hB,EAAI,EAAGA,EAAIgrC,EAAW1qC,OAAQN,IAAK,CACxC,IAAI6gQ,EAAW,IAAI+lP,GAAiB,MACpC/lP,EAASisP,WAAa9hd,EAAWhrC,GAAGqukB,YAAYvhF,WAChDjsP,EAASpf,gBAAkBz2M,EAAWhrC,GAAGqukB,YAAY5sV,gBACrDz2M,EAAWhrC,GAAGqukB,YAAYhlF,WAAWr+c,EAAWhrC,GAAGi7jB,gBACnDjwhB,EAAWhrC,GAAGi7jB,eAAenuE,WAAajsP,EAASisP,WACnD9hd,EAAWhrC,GAAGi7jB,eAAex5U,gBAAkBof,EAASpf,kBAOpEojQ,EAAc3lf,UAAU6kb,KAAO,WAC3B,IAAIlgb,KAAKsvf,MAAMzR,gBAAmB79e,KAAK8zb,WAAc9zb,KAAKsvf,MAAMmvE,kBAAhE,CAIA,IAAI0B,EAAcngkB,KAAKkoc,UAAU97S,MACjCpsJ,KAAKylf,WAAY,EACjB06E,EAAYgM,SACZnskB,KAAKylf,WAAY,EACjBzlf,KAAKsvf,MAAM1/a,UAAUk1c,2BACrB9khB,KAAKsvf,MAAM5U,aAAaosE,2BAA4B,IAKxD9lE,EAAc3lf,UAAU8kb,KAAO,WAC3B,IAAIngb,KAAKsvf,MAAMzR,gBAAmB79e,KAAK+zb,WAAc/zb,KAAKsvf,MAAMmvE,kBAAhE,CAIA,IAAI0B,EAAcngkB,KAAKmoc,UAAU/7S,MACN,sBAAvB+za,EAAYhqgB,SACZn2D,KAAKsvf,MAAM5U,aAAaosE,2BAA4B,GAExD9mjB,KAAK0lf,WAAY,EACjBy6E,EAAYgM,SACZnskB,KAAK0lf,WAAY,EACjB1lf,KAAKsvf,MAAM1/a,UAAUk1c,2BACrB9khB,KAAKsvf,MAAM5U,aAAaosE,2BAA4B,IAKxD9lE,EAAc3lf,UAAUiX,QAAU,WAC9BtS,KAAKqzkB,eACLrzkB,KAAKsykB,iBAAcn3kB,EACnB6E,KAAKuykB,iBAAcp3kB,GAEvB6lf,EAAc3lf,UAAUg4kB,aAAe,WACnCrzkB,KAAKszkB,iBACLtzkB,KAAKgzkB,kBAEThyF,EAAc3lf,UAAUi4kB,eAAiB,WACrC,GAAItzkB,KAAK8zb,UACL,KAAO9zb,KAAKkoc,UAAUzrc,OAAS,GAAG,CAC9B,IAAI0jkB,EAAcngkB,KAAKkoc,UAAU97S,MACjC+za,EAAY7tjB,UACZ6tjB,OAAchlkB,IAI1B6lf,EAAc3lf,UAAU23kB,eAAiB,WACrC,GAAIhzkB,KAAK+zb,UACL,KAAO/zb,KAAKmoc,UAAU1rc,OAAS,GAAG,CAC9B,IAAI0jkB,EAAcngkB,KAAKmoc,UAAU/7S,MACjC+za,EAAY7tjB,UACZ6tjB,OAAchlkB,IAInB6lf,KCtgBPJ,GAA4B,WAC5B,SAASA,IAEL5gf,KAAKuzkB,aAAe,oBACpBvzkB,KAAKwzkB,UAAY,kBACjBxzkB,KAAKyzkB,cAAgB,qBACrBzzkB,KAAK0zkB,aAAe,oBACpB1zkB,KAAK2zkB,WAAa,cAClB3zkB,KAAK4zkB,WAAa,cAElB5zkB,KAAK6zkB,UAAY,mBAGjB7zkB,KAAK8zkB,QAAU,mBACf9zkB,KAAK+zkB,SAAW,oBAGhB/zkB,KAAKg0kB,iBAAmB,sBAexBh0kB,KAAKi0kB,oBAAsB,cAC3Bj0kB,KAAKk0kB,iBAAmB,+BAMxBl0kB,KAAKm0kB,mBAAqB,oBAC1Bn0kB,KAAKo0kB,mBAAqB,oBAI1Bp0kB,KAAKq0kB,eAAiB,kBACtBr0kB,KAAKs0kB,gBAAkB,+DACvBt0kB,KAAKu0kB,oBAAsB,mFAG3Bv0kB,KAAKw0kB,oBAAsB,8EAG3Bx0kB,KAAKy0kB,kBAAoB,4EAGzBz0kB,KAAK00kB,kBAAoB,4EACzB10kB,KAAK20kB,qBAAuB,+EAC5B30kB,KAAK40kB,kBAAoB,4EACzB50kB,KAAK60kB,uBAAyB,iFAC9B70kB,KAAK80kB,eAAiB,wEACtB90kB,KAAK+0kB,gBAAkB,6DACvB/0kB,KAAKg1kB,kBAAoB,sEACzBh1kB,KAAKi1kB,qBAAuB,wEAC5Bj1kB,KAAKk1kB,oBAAsB,2DAU3Bl1kB,KAAKm1kB,sBAAwB,+EAW7Bn1kB,KAAKo1kB,gBAAkB,+EAGvBp1kB,KAAKq1kB,cAAgB,6EAErBr1kB,KAAKs1kB,cAAgB,6EACrBt1kB,KAAKu1kB,gBAAkB,qFACvBv1kB,KAAKw1kB,iBAAmB,gFACxBx1kB,KAAKy1kB,cAAgB,6EAIrBz1kB,KAAK01kB,YAAc,2EACnB11kB,KAAK21kB,kBAAoB,kFACzB31kB,KAAK41kB,YAAc,wFACnB51kB,KAAK61kB,WAAa,0FAClB71kB,KAAK81kB,cAAgB,wFACrB91kB,KAAK+1kB,aAAe,4EACpB/1kB,KAAKg2kB,iBAAmB,gFACxBh2kB,KAAKi2kB,eAAiB,8EACtBj2kB,KAAKk2kB,eAAiB,8EAGtBl2kB,KAAKm2kB,iBAAmB,gFACxBn2kB,KAAKo2kB,gBAAkB,0EACvBp2kB,KAAKq2kB,wBAA0B,uFAO/Br2kB,KAAKs2kB,WAAa,+DAClBt2kB,KAAKu2kB,YAAc,yEACnBv2kB,KAAKw2kB,iBAAmB,2DACxBx2kB,KAAKy2kB,WAAa,wDAClBz2kB,KAAK02kB,aAAe,wDAEpB12kB,KAAK22kB,WAAa,sEAClB32kB,KAAK42kB,YAAc,+DACnB52kB,KAAK62kB,WAAa,gCAClB72kB,KAAK82kB,WAAa,0CAClB92kB,KAAK+2kB,aAAe,uCACpB/2kB,KAAKg3kB,aAAe,wCACpBh3kB,KAAKi3kB,YAAc,0EACnBj3kB,KAAKk3kB,YAAc,mCAGnBl3kB,KAAKm3kB,kBAAoB,4EACzBn3kB,KAAKo3kB,YAAc,8DACnBp3kB,KAAKq3kB,WAAa,6DAClBr3kB,KAAKs3kB,aAAe,uDAEpBt3kB,KAAKu3kB,qBAAuB,0EAC5Bv3kB,KAAKw3kB,YAAc,uEACnBx3kB,KAAKy3kB,eAAiB,yDACtBz3kB,KAAK03kB,YAAc,4DAGnB13kB,KAAK23kB,YAAc,4CACnB33kB,KAAK43kB,aAAe,uDAEpB53kB,KAAK63kB,aAAe,uDACpB73kB,KAAK83kB,kBAAoB,qEACzB93kB,KAAK+3kB,mBAAqB,sEAC1B/3kB,KAAKg4kB,iBAAmB,oEACxBh4kB,KAAKi4kB,eAAiB,kEACtBj4kB,KAAKk4kB,iBAAmB,oEAExBl4kB,KAAKm4kB,aAAe,uDACpBn4kB,KAAKo4kB,iBAAmB,2DAExBp4kB,KAAKq4kB,WAAa,sDAClBr4kB,KAAKs4kB,WAAa,iEAClBt4kB,KAAKu4kB,cAAgB,oEAErBv4kB,KAAKw4kB,kBAAoB,gBACzBx4kB,KAAKy4kB,iBAAmB,eACxBz4kB,KAAK04kB,OAAS,KACd14kB,KAAK24kB,SAAW,OAChB34kB,KAAK44kB,WAAa,SAClB54kB,KAAK64kB,eAAiB,aACtB74kB,KAAK84kB,cAAgB,eACrB94kB,KAAK+4kB,gBAAkB,GACvB/4kB,KAAKg5kB,iBAAmB,GACxBh5kB,KAAKi5kB,iBAAmB,EACxBj5kB,KAAKk5kB,iBAAmB,GACxBl5kB,KAAKm5kB,aAAe,MAMpBn5kB,KAAKo5kB,0BAA4B,aACjCp5kB,KAAKq5kB,gBAAkB,QACvBr5kB,KAAKs5kB,cAAgB,OACrBt5kB,KAAKu5kB,eAAiB,OACtBv5kB,KAAKw5kB,oBAAsB,MAC3Bx5kB,KAAKy5kB,oBAAsB,MAC3Bz5kB,KAAK05kB,YAAc,sDACnB15kB,KAAK25kB,aAAe,eACpB35kB,KAAK45kB,qBAAuB,gCAC5B55kB,KAAK65kB,gBAAkB,wBACvB75kB,KAAK85kB,mBAAqB,qBAC1B95kB,KAAK+5kB,gBAAkB,mBACvB/5kB,KAAKg6kB,oBAAsB,sBAC3Bh6kB,KAAKi6kB,mBAAqB,qBAC1Bj6kB,KAAKk6kB,iBAAmB,eACxBl6kB,KAAKm6kB,iBAAmB,eACxBn6kB,KAAKo6kB,mBAAqB,qBAC1Bp6kB,KAAKq6kB,gBAAkB,oBACvBr6kB,KAAKs6kB,oBAAsB,sBAC3Bt6kB,KAAKu6kB,mBAAqB,qBAC1Bv6kB,KAAKw6kB,cAAgB,oBACrBx6kB,KAAKy6kB,eAAiB,qBACtBz6kB,KAAK06kB,iBAAmB,uBACxB16kB,KAAK26kB,oBAAsB,sBAC3B36kB,KAAK46kB,iBAAmB,gBACxB56kB,KAAK66kB,2BAA6B,oBAClC76kB,KAAK86kB,oBAAsB,oBAC3B96kB,KAAK+6kB,kBAAoB,kBACzB/6kB,KAAKg7kB,gBAAkB,yBACvBh7kB,KAAKi7kB,gBAAkB,eACvBj7kB,KAAKk7kB,kBAAoB,kBACzBl7kB,KAAKm7kB,kBAAoB,iBACzBn7kB,KAAKo7kB,iBAAmB,kBACxBp7kB,KAAKq7kB,cAAgB,eACrBr7kB,KAAKs7kB,qBAAuB,uBAC5Bt7kB,KAAKu7kB,kBAAoB,oBAEzBv7kB,KAAKw7kB,sBAAwB,wBAC7Bx7kB,KAAKy7kB,0BAA4B,4BAEjCz7kB,KAAK07kB,sBAAwB,iCAC7B17kB,KAAK27kB,qBAAuB,gCAC5B37kB,KAAK47kB,sBAAwB,gCAC7B57kB,KAAK67kB,uBAAyB,iCAC9B77kB,KAAK87kB,uBAAyB,iCAC9B97kB,KAAK+7kB,4BAA8B,qFACnC/7kB,KAAKg8kB,qBAAuB,8EAC5Bh8kB,KAAKi8kB,yBAA2B,yDAChCj8kB,KAAKk8kB,aAAc,EACnBl8kB,KAAKm8kB,gBAAkB,EACvBn8kB,KAAKo8kB,SAAW,EAChBp8kB,KAAKq8kB,qBAAsB,EAC3Br8kB,KAAKs8kB,gBAAanhlB,EAyzFtB,OAtzFAylf,EAAWvlf,UAAUkkC,cAAgB,WACjC,MAAO,cAEXjhC,OAAOuJ,eAAe+4e,EAAWvlf,UAAW,aAExCqM,IAAK,WAID,OAHIjK,EAAkBuC,KAAKs8kB,cACvBt8kB,KAAKs8kB,eAEFt8kB,KAAKs8kB,YAEhB30kB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe+4e,EAAWvlf,UAAW,kBAExCqM,IAAK,WAID,YAH6BvM,IAAzB6E,KAAKu8kB,kBACLv8kB,KAAKu8kB,gBAAkB,IAAI52W,IAExB3lO,KAAKu8kB,iBAEhB50kB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe+4e,EAAWvlf,UAAW,kBAExCqM,IAAK,WAID,YAHiCvM,IAA7B6E,KAAKw8kB,sBACLx8kB,KAAKw8kB,oBAAsB,IAAI72W,IAE5B3lO,KAAKw8kB,qBAEhB70kB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe+4e,EAAWvlf,UAAW,sBAExCqM,IAAK,WAID,YAHiCvM,IAA7B6E,KAAKy8kB,sBACLz8kB,KAAKy8kB,oBAAsB,IAAI92W,IAE5B3lO,KAAKy8kB,qBAEhB90kB,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe+4e,EAAWvlf,UAAW,kBAExCqM,IAAK,WAID,YAH+BvM,IAA3B6E,KAAK08kB,oBACL18kB,KAAK08kB,kBAAoB,IAAI/2W,IAE1B3lO,KAAK08kB,mBAEhB/0kB,YAAY,EACZC,cAAc,IAKlBg5e,EAAWvlf,UAAUoyF,KAAO,SAAU2sZ,EAAQrpR,GAC1C/wN,KAAK0vD,UAAU0qb,GACfp6e,KAAK28kB,SAASlvf,KAAKsjI,EAAW,SAASz9B,KAAK,SAAUqpZ,GAClDA,EAASrqkB,YAEbtS,KAAKiC,SAKT2+e,EAAWvlf,UAAUgoO,WAAa,SAAU+2Q,GACxC,IAAIr6e,EAAQC,KAEZ,OADAA,KAAK0vD,UAAU0qb,GACR,IAAIx3Z,QAAQ,SAAUC,EAASC,GAClC/iF,EAAM48kB,SAASt5W,aAAa/vC,KAAK,SAAUnyC,GACvCphJ,EAAM48kB,SAASrqkB,UACf6uI,EAAO,IAAIgwE,MAAMhwE,IAASz6I,KAAM,4EAChCm8E,EAAQs+D,QAOpBy/V,EAAWvlf,UAAUiX,QAAU,WAC3BtS,KAAK48kB,gBACL58kB,KAAKm8kB,qBAAkBhhlB,EACvB6E,KAAKo8kB,cAAWjhlB,EAChB6E,KAAKq8kB,yBAAsBlhlB,EACvB6E,KAAK28kB,WACL38kB,KAAK28kB,SAASrqkB,UACdtS,KAAK28kB,cAAWxhlB,IAIxBylf,EAAWvlf,UAAUq0D,UAAY,SAAU0qb,GAEvC,IAAI55e,EAAW45e,EAAOkV,MAAMhN,iBAAiBvgf,QAC7C/B,KAAK68kB,YAAYr8kB,GACjBR,KAAK28kB,SAAW,IAAI35W,GACpBhjO,KAAK28kB,SAASG,iBAAmB,SACjC98kB,KAAK+8kB,eAAiB,IAAIp3W,GAC1B3lO,KAAKg9kB,WAAa,IAAIr3W,GAGtB3lO,KAAKi9kB,oBAELj9kB,KAAKk9kB,kBAELl9kB,KAAKm9kB,sBAOLn9kB,KAAKo9kB,oBAELp9kB,KAAKq9kB,0BAELr9kB,KAAKs9kB,yBAELt9kB,KAAKu9kB,wBAnBDC,GAyBJx9kB,KAAKy9kB,4BAKLz9kB,KAAK09kB,yBAEL19kB,KAAK29kB,6BAUL39kB,KAAK49kB,4BAEL59kB,KAAK69kB,2BA5CDL,GA8CJx9kB,KAAK48kB,iBAGTh8F,EAAWvlf,UAAUwhlB,YAAc,SAAUr8kB,GACzCR,KAAKQ,SAAWA,EAChBR,KAAK89kB,UAAYt9kB,EAASwlP,SAC1BhmP,KAAK+9kB,OAASv9kB,EAAS87Q,MACvBt8Q,KAAKg+kB,eAAiBx9kB,EAAS2/e,cAC/Bngf,KAAKi+kB,mBAAqBz9kB,EAASw9e,gBACnCh+e,KAAKk+kB,mBAAqB19kB,EAASo9e,gBACnC59e,KAAKm+kB,qBAAuB39kB,EAAS6ugB,gBACrCrvgB,KAAKo+kB,QAAU59kB,EAAS+C,QAG5Bq9e,EAAWvlf,UAAUuhlB,cAAgB,WAEjC58kB,KAAK0yQ,aAAUv3Q,EACf6E,KAAKk8kB,iBAAc/glB,EACnB6E,KAAKq+kB,gBAAaljlB,EAClB6E,KAAK6if,eAAY1nf,EACjB6E,KAAKigE,WAAQ9kE,EACb6E,KAAK0gE,SAAMvlE,EACX6E,KAAK+zf,kBAAe54f,EACpB6E,KAAKQ,cAAWrF,EAChB6E,KAAK89kB,eAAY3ilB,EACjB6E,KAAK+9kB,YAAS5ilB,EACd6E,KAAKg+kB,oBAAiB7ilB,EACtB6E,KAAKi+kB,wBAAqB9ilB,EAC1B6E,KAAKk+kB,wBAAqB/ilB,EAC1B6E,KAAKm+kB,0BAAuBhjlB,EAC5B6E,KAAKm8kB,gBAAkB,EACvBn8kB,KAAKo8kB,SAAW,EAChBp8kB,KAAKq8kB,qBAAsB,EACvBr8kB,KAAK08kB,oBACL18kB,KAAK08kB,kBAAkBpqkB,UACvBtS,KAAK08kB,uBAAoBvhlB,GAEzB6E,KAAK+8kB,iBACL/8kB,KAAK+8kB,eAAezqkB,UACpBtS,KAAK+8kB,oBAAiB5hlB,GAEtB6E,KAAKg9kB,aACLh9kB,KAAKg9kB,WAAW1qkB,UAChBtS,KAAKg9kB,gBAAa7hlB,GAElB6E,KAAKu8kB,kBACLv8kB,KAAKu8kB,gBAAgBjqkB,UACrBtS,KAAKu8kB,qBAAkBphlB,GAEvB6E,KAAKw8kB,sBACLx8kB,KAAKw8kB,oBAAoBlqkB,UACzBtS,KAAKw8kB,yBAAsBrhlB,GAE3B6E,KAAKy8kB,sBACLz8kB,KAAKy8kB,oBAAoBnqkB,UACzBtS,KAAKy8kB,yBAAsBthlB,IAInCylf,EAAWvlf,UAAU4hlB,kBAAoB,WACrC,IAAIn9W,EAAS,IAAI5N,GACjB4N,EAAOzM,kBAAkB,IAAK,WAAYrzN,KAAKs2kB,YAC/Ct2kB,KAAKs+kB,4BAA4Bx+W,GACjC9/N,KAAKu+kB,sBAAsBz+W,GAC3BA,EAAO1M,kBACP,IAAIorX,EAAc,IAAIv7W,GAAenD,EAAO9O,OAAQhxN,KAAKuzkB,cACzDvzkB,KAAK28kB,SAASr4Y,QAAQk6Y,IAE1B59F,EAAWvlf,UAAUijlB,4BAA8B,SAAUx+W,GACzDA,EAAO9L,qBAAqB,QAAS,WAAO74N,EAAW6E,KAAK83kB,mBAC5D93kB,KAAKy+kB,YAAY3+W,GACjBA,EAAO9L,qBAAqB,QAAS,YAAQ74N,EAAW6E,KAAK+3kB,oBAC7Dj4W,EAAO9L,qBAAqB,QAAS,UAAM74N,EAAW6E,KAAKu2kB,aAC3Dz2W,EAAO9L,qBAAqB,QAAS,WAAO74N,EAAW6E,KAAKg3kB,cAC5Dl3W,EAAO9L,qBAAqB,QAAS,SAAK74N,EAAW6E,KAAKs2kB,YAC1Dt2kB,KAAK0+kB,SAAS5+W,GACdA,EAAO9L,qBAAqB,QAAS,WAAO74N,EAAW6E,KAAKs3kB,cAC5Dx3W,EAAO9L,qBAAqB,QAAS,WAAO74N,EAAW6E,KAAKk4kB,kBAC5Dp4W,EAAO9L,qBAAqB,KAAM,iBAAa74N,EAAW,iBAE9Dylf,EAAWvlf,UAAUqjlB,SAAW,SAAU5+W,GACtCA,EAAO9L,qBAAqB,QAAS,WAAO74N,EAAW6E,KAAK63kB,cAC5D/3W,EAAO9L,qBAAqB,QAAS,WAAO74N,EAAW6E,KAAKm4kB,cAC5Dr4W,EAAO9L,qBAAqB,QAAS,WAAO74N,EAAW6E,KAAKg4kB,kBAC5Dl4W,EAAO9L,qBAAqB,QAAS,WAAO74N,EAAW6E,KAAKi4kB,iBAEhEr3F,EAAWvlf,UAAUojlB,YAAc,SAAU3+W,GACzCA,EAAO9L,qBAAqB,QAAS,UAAM74N,EAAW6E,KAAKo3kB,aAC3Dt3W,EAAO9L,qBAAqB,QAAS,SAAK74N,EAAW6E,KAAK82kB,YAC1Dh3W,EAAO9L,qBAAqB,QAAS,SAAK74N,EAAW6E,KAAK22kB,YAC1D72W,EAAO9L,qBAAqB,QAAS,SAAK74N,EAAW6E,KAAKq3kB,YAC1Dv3W,EAAO9L,qBAAqB,QAAS,SAAK74N,EAAW6E,KAAK62kB,aAG9Dj2F,EAAWvlf,UAAUkjlB,sBAAwB,SAAUz+W,GACnDA,EAAOzM,uBAAkBl4N,EAAW,OAAQ6E,KAAKs2kB,YAEjD,IAAK,IADDx3jB,EAAQ9e,KAAKQ,SAASwlP,SAASvpP,OAC1BN,EAAI,EAAGA,EAAI2iB,EAAO3iB,IACvB6D,KAAK0yQ,QAAU1yQ,KAAKQ,SAASwlP,SAAS7pP,GACtC6D,KAAKk8kB,YAAc//kB,IAAM2iB,EAAQ,EACjC9e,KAAKg1hB,iBAAiBl1T,EAAQ9/N,KAAK0yQ,QAASv2Q,IAAM2iB,EAAQ,GAC1D9e,KAAK0yQ,aAAUv3Q,EAEnB2kO,EAAO1M,mBAGXwtR,EAAWvlf,UAAU25hB,iBAAmB,SAAUl1T,EAAQ4yC,EAASx/O,GAC/DlzB,KAAKq+kB,WAAa3rU,EAClB1yQ,KAAK2+kB,mBAAmB7+W,EAAQ4yC,EAAQoB,OAAQ5gP,GAC5CA,GACAlzB,KAAK4+kB,2BAA2B9+W,EAAQ4yC,GAE5C1yQ,KAAKq+kB,gBAAaljlB,GAGtBylf,EAAWvlf,UAAUujlB,2BAA6B,SAAU9+W,EAAQ4yC,GAChE5yC,EAAOzM,kBAAkB,IAAK,SAAUrzN,KAAKs2kB,YACzC5jU,EAAQ+wO,gBACRzjf,KAAK6+kB,qBAAqB/+W,EAAQ4yC,EAAQ+wO,gBAM9Czjf,KAAK8+kB,qBAAqBh/W,EAAQ,YAClC9/N,KAAK++kB,mBAAmBj/W,EAAQ4yC,EAAQiwO,eACxC3if,KAAKg/kB,iBAAiBl/W,EAAQ4yC,QAoBAv3Q,IAA1Bu3Q,EAAQiwO,eAA+BjwO,EAAQiwO,cAAci6B,qBAC7D98S,EAAOzM,uBAAkBl4N,EAAW,UAAW6E,KAAKs2kB,YACpDx2W,EAAO1M,mBAUX0M,EAAO1M,mBAGXwtR,EAAWvlf,UAAU2jlB,iBAAmB,SAAUl/W,EAAQ4yC,GACtD5yC,EAAOzM,uBAAkBl4N,EAAW,OAAQ6E,KAAKs2kB,YACjDx2W,EAAO9L,0BAAqB74N,EAAW,aAAc6E,KAAKs2kB,WAAY,KACtEx2W,EAAO9L,0BAAqB74N,EAAW,QAAS6E,KAAKs2kB,WAAY,KACjEx2W,EAAO1M,mBAgCXwtR,EAAWvlf,UAAU0jlB,mBAAqB,SAAUj/W,EAAQm/W,QACtC9jlB,IAAd8jlB,IACAj/kB,KAAKk/kB,kBAAkBp/W,EAAQm/W,GAC/Bj/kB,KAAKm/kB,qBAAqBr/W,EAAQm/W,IAatCn/W,EAAOzM,uBAAkBl4N,EAAW,YAAa6E,KAAKs2kB,YActDx2W,EAAO1M,mBAKXwtR,EAAWvlf,UAAU6jlB,kBAAoB,SAAUp/W,EAAQm/W,GACvDn/W,EAAOzM,uBAAkBl4N,EAAW,OAAQ6E,KAAKs2kB,YAEjDx2W,EAAO9L,0BAAqB74N,EAAW,IAAK6E,KAAKs2kB,WAAYt2kB,KAAKo/kB,kBAAkBH,EAAUvjT,UAAY17R,KAAKg5kB,kBAAkB9rkB,YAEjI4yN,EAAO9L,0BAAqB74N,EAAW,IAAK6E,KAAKs2kB,WAAYt2kB,KAAKo/kB,kBAAkBH,EAAU3/V,WAAat/O,KAAKg5kB,kBAAkB9rkB,YAKlI4yN,EAAO1M,mBAGXwtR,EAAWvlf,UAAU8jlB,qBAAuB,SAAUr/W,EAAQm/W,GAC1Dn/W,EAAOzM,uBAAkBl4N,EAAW,QAAS6E,KAAKs2kB,YAClD,IAAIjuN,EAAch8W,KAAKoxB,MAAMwhjB,EAAU9zV,UAAYnrP,KAAKg5kB,kBACxDl5W,EAAO9L,0BAAqB74N,EAAW,MAAO6E,KAAKs2kB,WAAYjuN,EAAYn7W,YAC3Em7W,EAAch8W,KAAKoxB,MAAMwhjB,EAAU7zV,YAAcprP,KAAKg5kB,kBACtDl5W,EAAO9L,0BAAqB74N,EAAW,QAAS6E,KAAKs2kB,WAAYjuN,EAAYn7W,YAC7Em7W,EAAch8W,KAAKoxB,MAAMwhjB,EAAU5zV,aAAerrP,KAAKg5kB,kBACvDl5W,EAAO9L,0BAAqB74N,EAAW,SAAU6E,KAAKs2kB,WAAYjuN,EAAYn7W,YAC9Em7W,EAAch8W,KAAKoxB,MAAMwhjB,EAAU/zV,WAAalrP,KAAKg5kB,kBACrDl5W,EAAO9L,0BAAqB74N,EAAW,OAAQ6E,KAAKs2kB,WAAYjuN,EAAYn7W,YAE5E4yN,EAAO9L,0BAAqB74N,EAAW,SAAU6E,KAAKs2kB,WAAYt2kB,KAAKo/kB,kBAAkBH,EAAUl2D,eAAiB/ohB,KAAKg5kB,kBAAkB9rkB,YAE3I4yN,EAAO9L,0BAAqB74N,EAAW,SAAU6E,KAAKs2kB,WAAYt2kB,KAAKo/kB,kBAAkBH,EAAUhxE,eAAiBjugB,KAAKg5kB,kBAAkB9rkB,YAC3I4yN,EAAO9L,0BAAqB74N,EAAW,SAAU6E,KAAKs2kB,WAAY,KAClEx2W,EAAO1M,mBAGXwtR,EAAWvlf,UAAUyjlB,qBAAuB,SAAUh/W,EAAQu/W,GAC1Dv/W,EAAOzM,kBAAkB,IAAK,OAAQrzN,KAAKs2kB,YAC3Cx2W,EAAO9L,qBAAqB,IAAK,MAAOh0N,KAAKs2kB,WAAY+I,GACzDv/W,EAAO1M,mBAGXwtR,EAAWvlf,UAAUwjlB,qBAAuB,SAAU/+W,EAAQ2jR,GAC1D,IAAI67F,EAAO,GACX,QAAuBnklB,IAAnBsof,EAA8B,CAC9Bzjf,KAAKq8kB,oBAAsBr8kB,KAAK0yQ,QAAQiwO,cAAck6B,yBACtD,IAAI0iE,EAAK97F,EAAeF,gBACpBg8F,GAAMA,EAAGzrU,QAAUyrU,EAAGzrU,OAAOr3Q,OAAS,IACtCqjO,EAAOzM,uBAAkBl4N,EAAW,kBAAmB6E,KAAKs2kB,YAC5Dx2W,EAAO9L,0BAAqB74N,EAAW,OAAQ6E,KAAKs2kB,WAAY,SAChEgJ,EAAOt/kB,KAAKw/kB,wBACZ1/W,EAAO9L,0BAAqB74N,EAAW,KAAM6E,KAAK22kB,WAAY2I,GAC9Dt/kB,KAAKy/kB,gBAAgBF,EAAI,kBAAmBD,GAC5Cx/W,EAAO1M,oBAEXmsX,EAAK97F,EAAeD,kBACV+7F,EAAGzrU,QAAUyrU,EAAGzrU,OAAOr3Q,OAAS,IACtCqjO,EAAOzM,uBAAkBl4N,EAAW,kBAAmB6E,KAAKs2kB,YAC5Dx2W,EAAO9L,0BAAqB74N,EAAW,OAAQ6E,KAAKs2kB,WAAY,SAChEgJ,EAAOt/kB,KAAKw/kB,wBACZ1/W,EAAO9L,0BAAqB74N,EAAW,KAAM6E,KAAK22kB,WAAY2I,GAC9Dt/kB,KAAKy/kB,gBAAgBF,EAAI,kBAAmBD,GAC5Cx/W,EAAO1M,oBAEXmsX,EAAK97F,EAAeJ,aACVk8F,EAAGzrU,QAAUyrU,EAAGzrU,OAAOr3Q,OAAS,IACtCqjO,EAAOzM,uBAAkBl4N,EAAW,kBAAmB6E,KAAKs2kB,YAC5Dx2W,EAAO9L,0BAAqB74N,EAAW,OAAQ6E,KAAKs2kB,WAAY,QAChEgJ,EAAOt/kB,KAAKw/kB,wBACZ1/W,EAAO9L,0BAAqB74N,EAAW,KAAM6E,KAAK22kB,WAAY2I,GAC9Dt/kB,KAAKy/kB,gBAAgBF,EAAI,aAAcD,GACvCx/W,EAAO1M,oBAEXmsX,EAAK97F,EAAeH,aACVi8F,EAAGzrU,QAAUyrU,EAAGzrU,OAAOr3Q,OAAS,IACtCqjO,EAAOzM,uBAAkBl4N,EAAW,kBAAmB6E,KAAKs2kB,YAC5Dx2W,EAAO9L,0BAAqB74N,EAAW,OAAQ6E,KAAKs2kB,WAAY,QAChEgJ,EAAOt/kB,KAAKw/kB,wBACZ1/W,EAAO9L,0BAAqB74N,EAAW,KAAM6E,KAAK22kB,WAAY2I,GAC9Dt/kB,KAAKy/kB,gBAAgBF,EAAI,aAAcD,GACvCx/W,EAAO1M,oBAEXmsX,EAAK97F,EAAe7+Z,SACV26f,EAAGzrU,QAAUyrU,EAAGzrU,OAAOr3Q,OAAS,IACtCqjO,EAAOzM,uBAAkBl4N,EAAW,kBAAmB6E,KAAKs2kB,YAC5Dx2W,EAAO9L,0BAAqB74N,EAAW,OAAQ6E,KAAKs2kB,WAAY,WAChEgJ,EAAOt/kB,KAAKw/kB,wBACZ1/W,EAAO9L,0BAAqB74N,EAAW,KAAM6E,KAAK22kB,WAAY2I,GAC9Dt/kB,KAAKy/kB,gBAAgBF,EAAI,YAAaD,GACtCx/W,EAAO1M,oBAEXmsX,EAAK97F,EAAen2S,SACViyY,EAAGzrU,QAAUyrU,EAAGzrU,OAAOr3Q,OAAS,IACtCqjO,EAAOzM,uBAAkBl4N,EAAW,kBAAmB6E,KAAKs2kB,YAC5Dx2W,EAAO9L,0BAAqB74N,EAAW,OAAQ6E,KAAKs2kB,WAAY,WAChEgJ,EAAOt/kB,KAAKw/kB,wBACZ1/W,EAAO9L,0BAAqB74N,EAAW,KAAM6E,KAAK22kB,WAAY2I,GAC9Dt/kB,KAAKy/kB,gBAAgBF,EAAI,YAAaD,GACtCx/W,EAAO1M,qBAKnBwtR,EAAWvlf,UAAUoklB,gBAAkB,SAAUF,EAAIG,EAAQp8kB,GACzD,IAAIq8kB,EAAS,IAAIh6W,GACjB3lO,KAAKyjf,eAAer/e,IAAIs7kB,EAAQC,GAChC3/kB,KAAKyjf,eAAe/7e,IAAIg4kB,GAAQt7kB,IAAId,EAAIi8kB,IAG5C3+F,EAAWvlf,UAAUsjlB,mBAAqB,SAAU7+W,EAAQ8/W,EAAiBC,GACzE,IAAK,IAAI1jlB,EAAI,EAAGA,EAAIyjlB,EAAgBnjlB,OAAQN,IACxC6D,KAAK8/kB,kBAAkBhgX,EAAQ8/W,EAAgBzjlB,GAAI0jlB,IAI3Dj/F,EAAWvlf,UAAUyklB,kBAAoB,SAAUhgX,EAAQjiN,EAAMgikB,GAC7D,GAAIpilB,EAAkBogB,GAClB,MAAM,IAAIjd,MAAM,oCAEpB,GAAIid,EAAKlX,eAAe,WACpB3G,KAAK6if,UAAYhle,EACjB7d,KAAKi1hB,mBAAmBn1T,EAAQjiN,EAAMgikB,GACtC7/kB,KAAK6if,eAAY1nf,OAIjB,IAAK,IADD8kE,EAAQpiD,EACH1hB,EAAI,EAAGA,EAAI8jE,EAAMs4N,KAAK97R,OAAQN,IACnC,GAAI8jE,EAAMs4N,KAAKp8R,GAAG2lE,MAAMrlE,OAAS,EAAG,CAChCuD,KAAKk1hB,eAAep1T,EAAQ7/J,GAC5B,QAMhB2gb,EAAWvlf,UAAU45hB,mBAAqB,SAAUn1T,EAAQ+iR,EAAWg9F,GACnE,GAAIpilB,EAAkBolf,GAClB,MAAM,IAAIjif,MAAM,qCAEpB,IAAI8ga,EAAM1ha,KAAKq+kB,YAEVwB,GAAiBn+K,EAAI/6Z,eAAe,kBAClC+6Z,EAAI5tJ,OAAOv1Q,QAAQskf,KAAenhF,EAAI5tJ,OAAOr3Q,OAAS,IACzDqjO,EAAOzM,kBAAkB,IAAK,IAAKrzN,KAAKs2kB,YACxCx2W,EAAOzM,uBAAkBl4N,EAAW,MAAO6E,KAAKs2kB,YAChDt2kB,KAAK4+kB,2BAA2B9+W,EAAQ4hM,GACxC5hM,EAAO1M,kBACP0M,EAAO1M,mBAQX0M,EAAOzM,kBAAkB,IAAK,IAAKrzN,KAAKs2kB,YACxCx2W,EAAOzM,uBAAkBl4N,EAAW,MAAO6E,KAAKs2kB,YAChDt2kB,KAAKy2hB,yBAAyB32T,EAAQ+iR,EAAUjF,gBAAiBiF,GACjE/iR,EAAO1M,kBAGPpzN,KAAK+/kB,wBAAwBjgX,EAAQ+iR,EAAUgrC,SAC/C/tT,EAAO1M,mBAGXwtR,EAAWvlf,UAAU0klB,wBAA0B,SAAUjgX,EAAQkgX,GAE7D,IAAK,IADD9hF,OAAe/igB,EACVgB,EAAI,EAAGA,EAAI6jlB,EAAUvjlB,OAAQN,IAAK,CACvC,IAAI0hB,EAAOmikB,EAAU7jlB,GACjB0hB,EAAKlX,eAAe,aACpB3G,KAAKiglB,wBAAwBngX,EAAQjiN,GAEhCA,EAAKlX,eAAe,eACzB3G,KAAKkglB,iBAAiBpgX,EAAQjiN,GAEzBA,EAAKlX,eAAe,gBACzB3G,KAAKmglB,kBAAkBrgX,EAAQjiN,GAG/B7d,KAAKoglB,mBAAmBtgX,EAAQjiN,EAAMqgf,GAE1CA,EAAergf,IAIvB+ie,EAAWvlf,UAAU8klB,kBAAoB,SAAUrgX,EAAQ6nT,GACvD,IAAI04D,EAAarglB,KAAKsglB,cAAc34D,EAASlwf,MACzCmriB,EAAej7C,EAASlwf,KACE,IAA1Bkwf,EAASvoB,cACTt/R,EAAOzM,kBAAkB,IAAK,gBAAiBrzN,KAAKs2kB,YACpDx2W,EAAO9L,qBAAqB,IAAK,OAAQh0N,KAAKs2kB,WAAY1T,IAE3B,IAA1Bj7C,EAASvoB,cACdt/R,EAAOzM,kBAAkB,IAAK,cAAerzN,KAAKs2kB,YAEtDx2W,EAAO9L,qBAAqB,IAAK,KAAMh0N,KAAKs2kB,WAAY+J,EAAWnzkB,YACnE4yN,EAAO1M,mBAEXwtR,EAAWvlf,UAAUillB,cAAgB,SAAU7ojB,GAC3C,IAAIxlB,EAAQjS,KAAK+mhB,UAAUxohB,QAAQk5B,GAKnC,OAJIxlB,EAAQ,IACRA,EAAQjS,KAAK+mhB,UAAUtqhB,OACvBuD,KAAK+mhB,UAAUvihB,KAAKizB,IAEjBxlB,GAGX2ue,EAAWvlf,UAAU6klB,iBAAmB,SAAUpgX,EAAQxqC,GAClDA,EAAMt/K,OAAS,GAAKs/K,EAAMv/K,QAAU,IACpC+pN,EAAOzM,uBAAkBl4N,EAAW,IAAK6E,KAAKs2kB,YAC9Ct2kB,KAAKw2hB,yBAAyB12T,EAAQxqC,EAAM0oT,iBAC5Ch+e,KAAKuglB,iBAAiBzgX,EAAQxqC,GAC9BwqC,EAAO1M,oBAIfwtR,EAAWvlf,UAAUkllB,iBAAmB,SAAUzgX,EAAQxqC,GACtDwqC,EAAOzM,uBAAkBl4N,EAAW,UAAW6E,KAAKs2kB,YACpDt2kB,KAAKwglB,uBAAuB1gX,EAAQxqC,GACpCwqC,EAAO1M,mBAGXwtR,EAAWvlf,UAAUmllB,uBAAyB,SAAU1gX,EAAQxqC,GAC5DwqC,EAAOzM,uBAAkBl4N,EAAW,SAAU6E,KAAKu2kB,aACnDz2W,EAAOzM,uBAAkBl4N,EAAW,SAAU6E,KAAKu2kB,aACnD,IAAIlojB,EAAKhiB,KAAKoxB,MAAM63J,EAAMt/K,MAAQhW,KAAKm5kB,cACvCr5W,EAAO9L,0BAAqB74N,EAAW,UAAMA,EAAWkzB,EAAGnhB,YAC3D,IAAIohB,EAAKjiB,KAAKoxB,MAAM63J,EAAMv/K,OAAS/V,KAAKm5kB,cACxCr5W,EAAO9L,0BAAqB74N,EAAW,UAAMA,EAAWmzB,EAAGphB,YAC3D4yN,EAAO1M,kBAaPpzN,KAAKyglB,yBAAyB3gX,EAAQxqC,GACtCwqC,EAAO1M,mBAEXwtR,EAAWvlf,UAAUu2J,WAAa,SAAU8ub,EAAcC,GACtD,OAAOA,EAAYlklB,OAAS,GAAKiklB,EAAax8jB,UAAU,EAAGy8jB,EAAYlklB,UAAYkklB,GAGvF//F,EAAWvlf,UAAUollB,yBAA2B,SAAU3gX,EAAQ8gX,GAC9D,IAAIt9kB,EAAK,GACTA,EAAKtD,KAAK6glB,cAAcD,GAGxB9gX,EAAOzM,kBAAkB,KAAM,QAASrzN,KAAKu2kB,aAC7Cz2W,EAAO9L,0BAAqB74N,EAAW,UAAMA,GAAY6E,KAAKo8kB,YAAYlvkB,YAG1E4yN,EAAO9L,0BAAqB74N,EAAW,YAAQA,EAAW,IAAI+R,YAI9D4yN,EAAO9L,0BAAqB74N,EAAW,aAASA,EAAW,IAI3D2kO,EAAO1M,kBACP0M,EAAOzM,kBAAkB,IAAK,UAAWrzN,KAAKy2kB,YAC9C32W,EAAOzM,kBAAkB,IAAK,cAAerzN,KAAKy2kB,YAClD32W,EAAO9L,0BAAqB74N,EAAW,WAAOA,EAAW6E,KAAKw2kB,kBAC9D12W,EAAOzM,kBAAkB,MAAO,MAAOrzN,KAAKw2kB,kBAC5C12W,EAAOzM,kBAAkB,MAAO,UAAWrzN,KAAKw2kB,kBAChD12W,EAAOzM,kBAAkB,MAAO,QAASrzN,KAAKw2kB,kBAC9C12W,EAAO9L,0BAAqB74N,EAAW,UAAMA,EAAW,KACxD2kO,EAAO9L,0BAAqB74N,EAAW,YAAQA,EAAW,IAC1D2kO,EAAO9L,0BAAqB74N,EAAW,aAASA,EAAW,IAC3D2kO,EAAO1M,kBACP0M,EAAOzM,kBAAkB,MAAO,WAAYrzN,KAAKw2kB,kBACjD12W,EAAOzM,kBAAkB,IAAK,WAAYrzN,KAAKy2kB,YAC/C32W,EAAO9L,0BAAqB74N,EAAW,sBAAkBA,EAAW,KACpE2kO,EAAO9L,0BAAqB74N,EAAW,0BAAsBA,EAAW,KACxE2kO,EAAO1M,kBACP0M,EAAO1M,kBACP0M,EAAO1M,kBACP0M,EAAOzM,kBAAkB,MAAO,WAAYrzN,KAAKw2kB,kBACjD12W,EAAOzM,kBAAkB,IAAK,OAAQrzN,KAAKy2kB,YACvCz2kB,KAAK4xJ,WAAWgvb,EAAQ/lQ,YAAa,cACrC/6G,EAAO9L,qBAAqB,IAAK,QAASh0N,KAAK22kB,WAAYrzkB,GAGvDtD,KAAK8glB,eAAer6W,YAAYnjO,KAKhCtD,KAAK8glB,eAAev8kB,OAAOjB,GAC3BtD,KAAK+glB,eAAe38kB,IAAId,EAAIs9kB,EAAQ/lQ,aACpC/6G,EAAO9L,0BAAqB74N,EAAW,OAAQ6E,KAAK22kB,WAAYrzkB,IAIxEw8N,EAAO1M,kBACP0M,EAAOzM,kBAAkB,IAAK,UAAWrzN,KAAKy2kB,YAC9C32W,EAAO1M,kBACP0M,EAAOzM,kBAAkB,IAAK,UAAWrzN,KAAKy2kB,YAC9C32W,EAAOzM,kBAAkB,IAAK,WAAYrzN,KAAKy2kB,YAC/C32W,EAAO1M,kBACP0M,EAAO1M,kBACP0M,EAAO1M,kBACP0M,EAAOzM,kBAAkB,MAAO,OAAQrzN,KAAKw2kB,kBAC7C12W,EAAO9L,0BAAqB74N,EAAW,cAAUA,EAAW,QAC5D2kO,EAAOzM,kBAAkB,IAAK,OAAQrzN,KAAKy2kB,YAG3C32W,EAAOzM,kBAAkB,IAAK,MAAOrzN,KAAKy2kB,YAC1C32W,EAAO9L,0BAAqB74N,EAAW,SAAKA,EAAW,KACvD2kO,EAAO9L,0BAAqB74N,EAAW,SAAKA,EAAW,KACvD2kO,EAAO1M,kBACP0M,EAAOzM,kBAAkB,IAAK,MAAOrzN,KAAKy2kB,YAC1C,IAAIpojB,EAAKhiB,KAAKoxB,MAAOmjjB,EAAQ5qkB,MAAQhW,KAAKm5kB,cAC1Cr5W,EAAO9L,0BAAqB74N,EAAW,UAAMA,EAAWkzB,EAAGnhB,YAC3D,IAAIohB,EAAKjiB,KAAKoxB,MAAOmjjB,EAAQ7qkB,OAAS/V,KAAKm5kB,cAC3Cr5W,EAAO9L,0BAAqB74N,EAAW,UAAMA,EAAWmzB,EAAGphB,YAC3D4yN,EAAO1M,kBACP0M,EAAO1M,kBACP0M,EAAOzM,kBAAkB,IAAK,WAAYrzN,KAAKy2kB,YAC/C32W,EAAO9L,0BAAqB74N,EAAW,YAAQA,EAAW,QAC1D2kO,EAAOzM,kBAAkB,IAAK,QAASrzN,KAAKy2kB,YAC5C32W,EAAO1M,kBACP0M,EAAO1M,kBAYP0M,EAAO1M,kBACP0M,EAAO1M,kBACP0M,EAAO1M,kBACP0M,EAAO1M,mBAGXwtR,EAAWvlf,UAAUwllB,cAAgB,SAAUD,GAC3C,IAAIt9kB,EAAK,GACL09kB,EAAShhlB,KAAK6if,UAsBlB,OAnBI7if,KAAK+zf,aACLzwf,EAAKtD,KAAKihlB,kBAAkBjhlB,KAAK+zf,aAAc6sF,GAGpC,KAAPt9kB,IACI09kB,EAAOr6kB,eAAe,kBAAoBq6kB,EAAOr6kB,eAAe,cAChErD,EAAKtD,KAAKkhlB,iBAAiBlhlB,KAAK8glB,eAAgBF,IAarDt9kB,GAGXs9e,EAAWvlf,UAAU6llB,iBAAmB,SAAUC,EAAiB7rZ,GAC/D,IAAI8rZ,EAAa,GAcjB,OAHAA,EAAaphlB,KAAKw/kB,wBAClB2B,EAAgB/8kB,IAAIg9kB,EAAY9rZ,GAEzB8rZ,GAGXxgG,EAAWvlf,UAAU4llB,kBAAoB,SAAU1B,EAAIjqZ,GAKnD,IAAK,IAJDhyL,EAAK,GAEL+9kB,EAAW,GACX3sgB,EAAQ10E,KAAKyjf,eAAenmf,KACvBnB,EAAI,EAAGA,EAAIu4E,EAAMj4E,OAAQN,IAG9B,IAAK,IAFDwjlB,EAAS3/kB,KAAKyjf,eAAe/7e,IAAIgtE,EAAMv4E,IACvCmllB,EAAS3B,EAAOrilB,KACXimB,EAAI,EAAGA,EAAI+9jB,EAAO7klB,OAAQ8mB,IAC/B,GAAIo8jB,EAAOj4kB,IAAI45kB,EAAO/9jB,MAAQg8jB,EAAI,CAC9B8B,EAAWC,EAAO/9jB,GAClB,IAAIg+jB,OAAe,EACfvhlB,KAAKwhlB,mBAAmB/6W,YAAY46W,IACpCE,EAAevhlB,KAAKwhlB,mBAAmB95kB,IAAI25kB,GAC3C/9kB,EAAKtD,KAAKkhlB,iBAAiBK,EAAcjsZ,KAGzCisZ,EAAe,IAAI57W,GACnBriO,EAAKtD,KAAKkhlB,iBAAiBK,EAAcjsZ,GACzCt1L,KAAKwhlB,mBAAmBp9kB,IAAIi9kB,EAAUE,IAKtD,OAAOj+kB,GAGXs9e,EAAWvlf,UAAU65hB,eAAiB,SAAUp1T,EAAQ7/J,GACpD,KAAIA,EAAMs4N,KAAK97R,QAAU,GAAzB,CAGA,IAAI6yf,EAAQtvf,KAAKigE,MACjBjgE,KAAKigE,MAAQA,EACb6/J,EAAOzM,uBAAkBl4N,EAAW,MAAO6E,KAAKs2kB,YAChD,IAAIxmF,EAAc7vb,EAAMs4N,KAAK,GAAG49N,UAChCn2f,KAAKyhlB,qBAAqB3hX,EAAQgwR,EAAa7vb,GAC/CjgE,KAAK0hlB,mBAAmB5hX,EAAQ7/J,GAChCjgE,KAAK2hlB,mBAAmB7hX,EAAQ7/J,EAAMs4N,MACtCz4D,EAAO1M,kBACPpzN,KAAKigE,MAAQqvb,IAGjB1O,EAAWvlf,UAAUqmlB,mBAAqB,SAAU5hX,EAAQ7/J,GACxD6/J,EAAOzM,uBAAkBl4N,EAAW,UAAW6E,KAAKs2kB,YAC1B,IAAtBr2gB,EAAMkC,KAAK1lE,QACXuD,KAAK4hlB,qBAAqB9hX,EAAQ7/J,EAAMkC,MAE5C29J,EAAO1M,mBAGXwtR,EAAWvlf,UAAUsmlB,mBAAqB,SAAU7hX,EAAQy4D,GACxD,GAAIA,EAAK97R,OAAS,EACd,IAAK,IAAIN,EAAI,EAAGA,EAAIo8R,EAAK97R,OAAQN,IAAK,CAClC,IAAIukE,EAAM63N,EAAKp8R,GACXukE,EAAIoB,MAAMrlE,OAAS,GACnBuD,KAAKm2hB,aAAar2T,EAAQp/J,KAM1Ckgb,EAAWvlf,UAAU86hB,aAAe,SAAUr2T,EAAQp/J,GAClD,IAAI4ub,EAAQtvf,KAAK0gE,IACjB1gE,KAAK0gE,IAAMA,EACXo/J,EAAOzM,uBAAkBl4N,EAAW,KAAM6E,KAAKs2kB,YAC/Ct2kB,KAAK6hlB,mBAAmB/hX,EAAQp/J,GAChC1gE,KAAK8hlB,eAAehiX,EAAQp/J,EAAIoB,OAChCg+J,EAAO1M,kBACPpzN,KAAK0gE,IAAM4ub,GAGf1O,EAAWvlf,UAAUwmlB,mBAAqB,SAAU/hX,EAAQp/J,GAGxD,GAFAo/J,EAAOzM,uBAAkBl4N,EAAW,OAAQ6E,KAAKs2kB,YAE7C51gB,EAAIy1b,UAAUpgf,OAAS,EAAG,CAC1B+pN,EAAOzM,uBAAkBl4N,EAAW,WAAY6E,KAAKs2kB,YACpB,YAA7B51gB,EAAIy1b,UAAU7F,WACdxwR,EAAO9L,qBAAqB,IAAK,QAASh0N,KAAKs2kB,WAAY,SAEzB,YAA7B51gB,EAAIy1b,UAAU7F,YACnBxwR,EAAO9L,qBAAqB,IAAK,QAASh0N,KAAKs2kB,WAAY,WAE/D,IAAIvgkB,EAAS/V,KAAKo/kB,kBAAkB1+gB,EAAIy1b,UAAUpgf,OAAS/V,KAAKg5kB,kBAAkB9rkB,WAClF4yN,EAAO9L,qBAAqB,IAAK,MAAOh0N,KAAKs2kB,WAAYvgkB,GACzD+pN,EAAO1M,kBAEX,IAAI+iS,EAAYz1b,EAAIy1b,UAEhBvF,EAAauF,EAAUvF,WACvBA,EAAa,IACb9wR,EAAOzM,uBAAkBl4N,EAAW,aAAc6E,KAAKs2kB,YACvDx2W,EAAO9L,qBAAqB,IAAK,MAAOh0N,KAAKs2kB,WAAY1lF,EAAW1jf,YACpE4yN,EAAO1M,mBAGX,IAAI29R,EAAYoF,EAAUpF,UAO1B,GANIA,EAAY,IACZjxR,EAAOzM,uBAAkBl4N,EAAW,YAAa6E,KAAKs2kB,YACtDx2W,EAAO9L,qBAAqB,IAAK,MAAOh0N,KAAKs2kB,WAAYvlF,EAAU7jf,YACnE4yN,EAAO1M,mBAGPw9R,EAAa,EAAG,CAEhB,OADA9wR,EAAOzM,uBAAkBl4N,EAAW,UAAW6E,KAAKs2kB,YAC5CngF,EAAUrF,qBACd,IAAK,UACD,IAAI96e,EAAQhW,KAAKo/kB,kBAAkBjpF,EAAUtF,gBAAkB7wf,KAAKk5kB,kBAAkBhskB,WACtF4yN,EAAO9L,qBAAqB,IAAK,MAAOh0N,KAAKs2kB,WAAYtgkB,GACzD8pN,EAAO9L,qBAAqB,IAAK,OAAQh0N,KAAKs2kB,WAAY,OAC1D,MACJ,IAAK,QACD,IAAIyL,EAAa/hlB,KAAKo/kB,kBAAkBjpF,EAAUtF,gBAAkB7wf,KAAK+4kB,iBAAiB7rkB,WAC1F4yN,EAAO9L,qBAAqB,IAAK,MAAOh0N,KAAKs2kB,WAAYyL,GACzDjiX,EAAO9L,qBAAqB,IAAK,OAAQh0N,KAAKs2kB,WAAY,OAGlEx2W,EAAO1M,kBAGX,GAAI29R,EAAY,EAAG,CAEf,OADAjxR,EAAOzM,uBAAkBl4N,EAAW,SAAU6E,KAAKs2kB,YAC3CngF,EAAUlF,oBACd,IAAK,UACGj7e,EAAQhW,KAAKo/kB,kBAAkBjpF,EAAUnF,eAAiBhxf,KAAKk5kB,kBAAkBhskB,WACrF4yN,EAAO9L,qBAAqB,IAAK,MAAOh0N,KAAKs2kB,WAAYtgkB,GACzD8pN,EAAO9L,qBAAqB,IAAK,OAAQh0N,KAAKs2kB,WAAY,OAC1D,MACJ,IAAK,QACGyL,EAAa/hlB,KAAKo/kB,kBAAkBjpF,EAAUnF,eAAiBhxf,KAAK+4kB,iBAAiB7rkB,WACzF4yN,EAAO9L,qBAAqB,IAAK,MAAOh0N,KAAKs2kB,WAAYyL,GACzDjiX,EAAO9L,qBAAqB,IAAK,OAAQh0N,KAAKs2kB,WAAY,OAGlEx2W,EAAO1M,kBAGN+iS,EAAUxF,wBACX7wR,EAAOzM,uBAAkBl4N,EAAW,YAAa6E,KAAKs2kB,YACtDx2W,EAAO1M,mBAGP+iS,EAAUrqe,WACVg0M,EAAOzM,uBAAkBl4N,EAAW,YAAa6E,KAAKs2kB,YACtDx2W,EAAO1M,mBAEX0M,EAAO1M,mBAGXwtR,EAAWvlf,UAAUymlB,eAAiB,SAAUhiX,EAAQh+J,GACpD,IAAK,IAAI3lE,EAAI,EAAGA,EAAI2lE,EAAMrlE,OAAQN,IAC9B6D,KAAK+1hB,cAAcj2T,EAAQh+J,EAAM3lE,KAIzCykf,EAAWvlf,UAAU06hB,cAAgB,SAAUj2T,EAAQ78J,GACnD,IAAIqsb,EAAQtvf,KAAKq+kB,WAIjB,GAHAr+kB,KAAKq+kB,WAAap7gB,EAClB68J,EAAOzM,uBAAkBl4N,EAAW,KAAM6E,KAAKs2kB,YAC/Ct2kB,KAAKgilB,oBAAoBliX,EAAQ78J,EAAKqxb,YAClCrxb,EAAK6wM,OAAOr3Q,OAAS,EAGrB,IAFA,IAAI61d,EAAY,EACZz0c,OAAO1iB,EACJm3d,EAAYrvZ,EAAK6wM,OAAOr3Q,QAC3BohB,EAAOolD,EAAK6wM,OAAOw+M,GACnBtyd,KAAK8/kB,kBAAkBhgX,EAAQjiN,GAAM,GACrCy0c,GAAa,OAIjBxyP,EAAOzM,uBAAkBl4N,EAAW,IAAK6E,KAAKs2kB,YAC9Cx2W,EAAOzM,uBAAkBl4N,EAAW,MAAO6E,KAAKs2kB,YAChDx2W,EAAOzM,uBAAkBl4N,EAAW,SAAU6E,KAAKs2kB,YACnDx2W,EAAO9L,qBAAqB,IAAK,MAAOh0N,KAAKs2kB,WAAY,UACzDx2W,EAAO1M,kBACP0M,EAAO1M,kBACP0M,EAAO1M,kBAEX0M,EAAO1M,kBACPpzN,KAAKq+kB,WAAa/uF,GAGtB1O,EAAWvlf,UAAU2mlB,oBAAsB,SAAUliX,EAAQw0R,GACzD,IAAIrxb,EAAOjjE,KAAKq+kB,WAEPr+kB,KAAKigE,MAAM6vb,YAEX9vf,KAAK0gE,IAAIy1b,UAClBr2R,EAAOzM,uBAAkBl4N,EAAW,OAAQ6E,KAAKs2kB,YAIjDt2kB,KAAKiilB,mBAAmBniX,EAAQ78J,GAEhCjjE,KAAKkilB,mBAAmBpiX,EAAQw0R,GAEhCt0f,KAAKmilB,kBAAkBriX,EAAQ78J,GAE/B68J,EAAOzM,uBAAkBl4N,EAAW,YAAa6E,KAAKs2kB,YACtDt2kB,KAAKoilB,iBAAiBtiX,EAAQw0R,EAAWr/N,QAAS,GAClDn1D,EAAO1M,kBAEPpzN,KAAKqilB,iBAAiBviX,EAAQ78J,EAAKqxb,WAAWpF,SAe9Clvf,KAAKsilB,4BAA4BxiX,EAAQw0R,GAazCt0f,KAAKuilB,2BAA2BziX,EAAQw0R,EAAW5gc,mBA2BnDosK,EAAO1M,mBAGXwtR,EAAWvlf,UAAU4mlB,mBAAqB,SAAUniX,EAAQ78J,GACxD,IAAIu/gB,EAAKv/gB,EAAKqxb,WACdx0R,EAAOzM,uBAAkBl4N,EAAW,MAAO6E,KAAKs2kB,YAClB,YAA1BkM,EAAGvyF,oBACHnwR,EAAO9L,0BAAqB74N,EAAW,OAAQ6E,KAAKs2kB,WAAY,OAEhEx2W,EAAO9L,0BAAqB74N,EAAW,IAAK6E,KAAKs2kB,WAAYt2kB,KAAKo/kB,kBAAkBoD,EAAGxyF,eAAiBhwf,KAAKk5kB,kBAAkBhskB,aAEhG,UAA1Bs1kB,EAAGvyF,oBAERnwR,EAAO9L,0BAAqB74N,EAAW,IAAK6E,KAAKs2kB,WAAYt2kB,KAAKo/kB,kBAAkBoD,EAAGxyF,eAAiBhwf,KAAK+4kB,iBAAiB7rkB,YAC9H4yN,EAAO9L,0BAAqB74N,EAAW,OAAQ6E,KAAKs2kB,WAAY,SAGhEx2W,EAAO9L,0BAAqB74N,EAAW,OAAQ6E,KAAKs2kB,WAAY,QAChEx2W,EAAO9L,0BAAqB74N,EAAW,IAAK6E,KAAKs2kB,WAAY,MAEjEx2W,EAAO1M,mBAGXwtR,EAAWvlf,UAAU6mlB,mBAAqB,SAAUpiX,EAAQw0R,GACxD,IAEImuF,EAFAx/gB,EAAOjjE,KAAKq+kB,WACZqE,GAAe,EAEfr+W,EAAephK,EAAK0kQ,YACpB9uC,EAAY74R,KAAK0gE,IAAIoB,MAAMvjE,QAAQ0kE,GACnC+7O,EAAYnmB,EAAY,EAAI74R,KAAK0gE,IAAIoB,MAAM+2N,EAAY,GAAG8uC,YAAc1kQ,EAAK0kQ,YAQjF,GAPI1kQ,EAAK0kQ,cAAgB9uC,GACrB4pT,EAAUx/gB,EAAK0kQ,YACf+6Q,GAAe,GAGfA,GAAe,GAEdA,EAAc,CACG,IAAd7pT,IACAx0D,EAAephK,EAAK0kQ,YACpB3oB,GAAa,GAEjB,IAAK,IAAI7iT,EAAI6iT,EAAW7iT,EAAIkoO,EAAcloO,IACtCsmlB,EAAUzjS,EAAY,EACtBA,GAAa,EACTh/S,KAAK+8kB,eAAet2W,YAAYg8W,IAChCzilB,KAAK2ilB,YAAY7iX,EAAQ2iX,EAASx/gB,GAI1Cqxb,EAAWr9N,QAAU,GACrBn3D,EAAOzM,uBAAkBl4N,EAAW,SAAU6E,KAAKs2kB,YACnDt2kB,KAAK+8kB,eAAe34kB,IAAIq+kB,EAASnuF,EAAWr9N,QAAU,GAClDq9N,EAAWn8N,WAAa,GACxBn4R,KAAKg9kB,WAAW54kB,IAAIq+kB,EAASnuF,EAAWn8N,YAE5Cr4D,EAAO9L,qBAAqB,IAAK,MAAOh0N,KAAKs2kB,WAAY,WACzDx2W,EAAO1M,mBAEFpzN,KAAK+8kB,eAAet2W,YAAYg8W,IAAYC,EACjD1ilB,KAAK2ilB,YAAY7iX,EAAQ2iX,EAASx/gB,GAE7BjjE,KAAK+8kB,eAAet2W,YAAYoyD,EAAY,IAAM6pT,QAAkCvnlB,IAAlB8nE,EAAK0uP,WAC5E8wR,EAAUx/gB,EAAK0kQ,YAAc,EAC7B7nG,EAAO1M,kBACP0M,EAAOzM,kBAAkB,IAAK,IAAKrzN,KAAKs2kB,YACxCx2W,EAAO1M,kBACP0M,EAAO1M,kBACP0M,EAAOzM,uBAAkBl4N,EAAW,KAAM6E,KAAKs2kB,YAC/Cx2W,EAAOzM,uBAAkBl4N,EAAW,OAAQ6E,KAAKs2kB,YACjDt2kB,KAAK4ilB,oBAAoBH,EAAS3iX,GAClCA,EAAOzM,uBAAkBl4N,EAAW,SAAU6E,KAAKs2kB,YACnDx2W,EAAO9L,qBAAqB,IAAK,MAAOh0N,KAAKs2kB,WAAY,YACzDx2W,EAAO1M,kBACPpzN,KAAK6ilB,eAAeJ,KAG5B7hG,EAAWvlf,UAAUsnlB,YAAc,SAAU7iX,EAAQ2iX,EAASx/gB,GAC1DjjE,KAAK4ilB,oBAAoBH,EAAS3iX,GAClCA,EAAOzM,uBAAkBl4N,EAAW,SAAU6E,KAAKs2kB,YACnDx2W,EAAO9L,qBAAqB,IAAK,MAAOh0N,KAAKs2kB,WAAY,YACzDx2W,EAAO1M,kBACP0M,EAAO1M,kBACP0M,EAAOzM,kBAAkB,IAAK,IAAKrzN,KAAKs2kB,YACxCx2W,EAAO1M,kBACP0M,EAAO1M,kBACP0M,EAAOzM,uBAAkBl4N,EAAW,KAAM6E,KAAKs2kB,YAC/Cx2W,EAAOzM,uBAAkBl4N,EAAW,OAAQ6E,KAAKs2kB,YACjDt2kB,KAAKiilB,mBAAmBniX,EAAQ78J,GAChCjjE,KAAK6ilB,eAAeJ,IAExB7hG,EAAWvlf,UAAUunlB,oBAAsB,SAAUH,EAAS3iX,GACtD9/N,KAAKg9kB,WAAW1/kB,KAAKb,OAAS,GAAKuD,KAAKg9kB,WAAWv2W,YAAYg8W,KAC/D3iX,EAAOzM,uBAAkBl4N,EAAW,WAAY6E,KAAKs2kB,YACrDx2W,EAAO9L,qBAAqB,IAAK,MAAOh0N,KAAKs2kB,WAAYt2kB,KAAKg9kB,WAAWt1kB,IAAI+6kB,GAASv1kB,YACtF4yN,EAAO1M,oBAGfwtR,EAAWvlf,UAAUwnlB,eAAiB,SAAUJ,GACvCzilB,KAAK+8kB,eAAer1kB,IAAI+6kB,GAAW,GAAO,GAC3CzilB,KAAK+8kB,eAAex4kB,OAAOk+kB,GACvBzilB,KAAKg9kB,WAAW1/kB,KAAKb,OAAS,GAAKuD,KAAKg9kB,WAAWv2W,YAAYg8W,IAC/DzilB,KAAKg9kB,WAAWz4kB,OAAOk+kB,IAI3BzilB,KAAK+8kB,eAAe11kB,IAAIo7kB,EAASzilB,KAAK+8kB,eAAer1kB,IAAI+6kB,GAAW,IAI5E7hG,EAAWvlf,UAAU8mlB,kBAAoB,SAAUriX,EAAQ78J,GAEvD,GAAIA,EAAKqxb,WAAWn8N,WAAa,EAAG,CAChC,IAAIx8R,EAAMsnE,EAAKqxb,WAAWn8N,WAC1Br4D,EAAOzM,uBAAkBl4N,EAAW,WAAY6E,KAAKs2kB,YACrDx2W,EAAO9L,qBAAqB,IAAK,MAAOh0N,KAAKs2kB,WAAY36kB,EAAIuR,YAC7D4yN,EAAO1M,oBAIfwtR,EAAWvlf,UAAUinlB,4BAA8B,SAAUxiX,EAAQw0R,KA6BrE1T,EAAWvlf,UAAUknlB,2BAA6B,SAAUziX,EAAQzwK,GAEhE,OADAywK,EAAOzM,uBAAkBl4N,EAAW,SAAU6E,KAAKs2kB,YAC3CjnhB,GACJ,IAAK,MACDywK,EAAO9L,qBAAqB,IAAK,MAAOh0N,KAAKs2kB,WAAY,OACzD,MACJ,IAAK,SACDx2W,EAAO9L,qBAAqB,IAAK,MAAOh0N,KAAKs2kB,WAAY,UACzD,MACJ,QACIx2W,EAAO9L,qBAAqB,IAAK,MAAOh0N,KAAKs2kB,WAAY,UAGjEx2W,EAAO1M,mBAGXwtR,EAAWvlf,UAAUumlB,qBAAuB,SAAU9hX,EAAQ39J,GAC1D,IAAK,IAAIhmE,EAAI,EAAG2iB,EAAQqjD,EAAK1lE,OAAQN,EAAI2iB,EAAO3iB,IAAK,CACjD,IAAI2mlB,EAAYz2kB,KAAKoxB,MAAgB,GAAV0kC,EAAKhmE,IAChC2jO,EAAOzM,uBAAkBl4N,EAAW,UAAW6E,KAAKs2kB,YACpDx2W,EAAO9L,0BAAqB74N,EAAW,IAAK6E,KAAKs2kB,WAAYwM,EAAU51kB,YACvE4yN,EAAO1M,oBAKfwtR,EAAWvlf,UAAUomlB,qBAAuB,SAAU3hX,EAAQ9jM,EAAQikC,GAMlE6/J,EAAOzM,uBAAkBl4N,EAAW,QAAS6E,KAAKs2kB,YAoBlDt2kB,KAAK+ilB,oBAAoBjjX,EAAQ7/J,GACjCjgE,KAAKgjlB,wBAAwBljX,EAAQ7/J,EAAM6vb,aAC3C9vf,KAAKijlB,qBAAqBnjX,EAAQ7/J,EAAM6vb,aACxC9vf,KAAKkjlB,0BAA0BpjX,EAAQ7/J,EAAM6vb,aAC7C9vf,KAAKmjlB,sBAAsBrjX,EAAQ7/J,EAAM6vb,aACzC9vf,KAAKqilB,iBAAiBviX,EAAQ7/J,EAAM6vb,YAAYZ,SAChDlvf,KAAKojlB,mBAAmBtjX,EAAQ7/J,EAAM6vb,aAiCjCryf,EAAkBwiE,IACnB6/J,EAAO1M,mBAIfwtR,EAAWvlf,UAAUgnlB,iBAAmB,SAAUviX,EAAQ9jM,GAEtD8jM,EAAOzM,uBAAkBl4N,EAAW,MAAO6E,KAAKs2kB,YAChDx2W,EAAO9L,0BAAqB74N,EAAW,OAAQ6E,KAAKs2kB,WAAYt2kB,KAAK47gB,SAAS5/e,EAAO21B,kBACtD,UAA3B31B,EAAOmzd,gBACPrvR,EAAO9L,0BAAqB74N,EAAW,QAAS6E,KAAKs2kB,WAAY,QAGjEx2W,EAAO9L,0BAAqB74N,EAAW,QAAS6E,KAAKs2kB,WAAYt2kB,KAAK47gB,SAAS5/e,EAAOmzd,kBAE1FrvR,EAAO9L,qBAAqB,IAAK,MAAOh0N,KAAKs2kB,WAAYt2kB,KAAKqjlB,gBAAgBrnjB,EAAOozd,eACrFtvR,EAAO1M,mBAGXwtR,EAAWvlf,UAAUgolB,gBAAkB,SAAUj0F,GAC7C,OAAQA,GACJ,IAAK,kBACL,IAAK,qBACL,IAAK,qBACD,MAAO,OACX,IAAK,mBACD,MAAO,QACX,IAAK,sBACD,MAAO,QACX,IAAK,mBACL,IAAK,sBACD,MAAO,QACX,IAAK,mBACL,IAAK,sBACD,MAAO,QACX,IAAK,mBACL,IAAK,sBACD,MAAO,QACX,IAAK,mBACL,IAAK,sBACD,MAAO,QACX,IAAK,mBACD,MAAO,QACX,IAAK,sBACD,MAAO,QACX,IAAK,mBACL,IAAK,sBACD,MAAO,QACX,IAAK,mBACL,IAAK,sBACD,MAAO,QACX,IAAK,mBACL,IAAK,sBACD,MAAO,QACX,IAAK,mBACL,IAAK,sBACD,MAAO,QACX,IAAK,mBACD,MAAO,QACX,IAAK,sBACD,MAAO,QACX,IAAK,mBACL,IAAK,sBACD,MAAO,QACX,IAAK,mBACL,IAAK,sBACD,MAAO,QACX,IAAK,mBACL,IAAK,sBACD,MAAO,QACX,IAAK,mBACL,IAAK,sBACD,MAAO,QACX,IAAK,mBACD,MAAO,QACX,IAAK,sBACD,MAAO,QACX,IAAK,mBACL,IAAK,sBACD,MAAO,QACX,IAAK,mBACL,IAAK,sBACD,MAAO,QACX,IAAK,eACD,MAAO,gBACX,IAAK,mBACD,MAAO,YACX,IAAK,2BACD,MAAO,YACX,IAAK,0BACD,MAAO,oBACX,IAAK,wBACD,MAAO,aACX,IAAK,wBACD,MAAO,aACX,IAAK,sBACD,MAAO,aACX,IAAK,uBACD,MAAO,gBACX,IAAK,sBACD,MAAO,wBACX,IAAK,oBACD,MAAO,iBACX,IAAK,oBACD,MAAO,iBACX,IAAK,eACD,MAAO,QACX,IAAK,kBACD,MAAO,iBACX,QACI,MAAO,UAInBxO,EAAWvlf,UAAU8nlB,sBAAwB,SAAUrjX,EAAQ9jM,GAC7CA,EAAOi5P,QAGrBn1D,EAAOzM,uBAAkBl4N,EAAW,aAAc6E,KAAKs2kB,YACvDt2kB,KAAKoilB,iBAAiBtiX,EAAQ9jM,EAAOi5P,QAAS,GAC9Cn1D,EAAO1M,mBAGXwtR,EAAWvlf,UAAU+mlB,iBAAmB,SAAUtiX,EAAQm1D,EAASquT,GAC/DtjlB,KAAKujlB,gBAAgBzjX,EAAQm1D,EAAQvoR,IAAK,MAAO42kB,GACjDtjlB,KAAKujlB,gBAAgBzjX,EAAQm1D,EAAQzoR,KAAM,OAAQ82kB,GACnDtjlB,KAAKujlB,gBAAgBzjX,EAAQm1D,EAAQtoR,OAAQ,SAAU22kB,GACvDtjlB,KAAKujlB,gBAAgBzjX,EAAQm1D,EAAQxoR,MAAO,QAAS62kB,GACrDtjlB,KAAKujlB,gBAAgBzjX,EAAQm1D,EAAQzmK,WAAY,UAAW80d,GAC5DtjlB,KAAKujlB,gBAAgBzjX,EAAQm1D,EAAQxmK,SAAU,UAAW60d,GAC1DtjlB,KAAKujlB,gBAAgBzjX,EAAQm1D,EAAQw5N,aAAc,QAAS60F,GAC5DtjlB,KAAKujlB,gBAAgBzjX,EAAQm1D,EAAQy5N,WAAY,QAAS40F,IAG9D1iG,EAAWvlf,UAAU+nlB,mBAAqB,SAAUtjX,EAAQ9jM,KAU5D4kd,EAAWvlf,UAAUkolB,gBAAkB,SAAUzjX,EAAQx7L,EAAQthC,EAASo3V,GACtE,IAAI06C,EAAcxwW,EAAOy8R,UACrByiR,EAAMl/iB,EAAO8oD,UAAYgtQ,EACzBv8T,EAAQyG,EAAOzG,MACnB,GAAoB,YAAhBi3W,EAIA,OAHAh1K,EAAOzM,uBAAkBl4N,EAAW6H,EAAShD,KAAKs2kB,YAClDx2W,EAAO9L,qBAAqB,IAAK,MAAOh0N,KAAKs2kB,WAAY,YACzDx2W,EAAO1M,kBAGe,SAAhB0hL,IAA2BxwW,EAAOq2d,cAAiB6oF,GAAM,IAGnE1jX,EAAOzM,uBAAkBl4N,EAAW6H,EAAShD,KAAKs2kB,YAClDx2W,EAAO9L,qBAAqB,IAAK,MAAOh0N,KAAKs2kB,WAAYt2kB,KAAKyjlB,eAAe3uM,IAO7Eh1K,EAAO9L,0BAAqB74N,EAAW,QAAS6E,KAAKs2kB,WAAYt2kB,KAAK47gB,SAASt3e,EAAO9N,QAEtFspM,EAAO9L,0BAAqB74N,EAAW,KAAM6E,KAAKs2kB,WAAYt2kB,KAAKo/kB,kBAAkBoE,GAAIt2kB,YACzF4yN,EAAO9L,0BAAqB74N,EAAW,QAAS6E,KAAKs2kB,WAAYz4iB,EAAM3wB,YACnEo3B,EAAO0N,QACP8tL,EAAO9L,0BAAqB74N,EAAW,SAAU6E,KAAKs2kB,WAAY,MAEtEx2W,EAAO1M,oBAGXwtR,EAAWvlf,UAAUoolB,eAAiB,SAAU3uM,GAC5C,OAAQA,GACJ,IAAK,UACD,MAAO,UACX,IAAK,eACD,MAAO,eACX,IAAK,SACD,MAAO,SACX,IAAK,MACD,MAAO,SACX,IAAK,UACD,MAAO,UACX,IAAK,eACD,MAAO,SACX,IAAK,aACD,MAAO,aACX,IAAK,SACD,MAAO,SACX,IAAK,oBACD,MAAO,oBACX,IAAK,oBACD,MAAO,oBACX,IAAK,wBACD,MAAO,wBACX,IAAK,qBACD,MAAO,qBACX,IAAK,qBACD,MAAO,qBACX,IAAK,yBACD,MAAO,yBACX,IAAK,oBACD,MAAO,oBACX,IAAK,oBACD,MAAO,oBACX,IAAK,wBACD,MAAO,wBACX,IAAK,QACD,MAAO,QACX,IAAK,aACD,MAAO,OACX,IAAK,aACD,MAAO,aACX,IAAK,iBACD,MAAO,iBACX,IAAK,YACD,MAAO,gBACX,IAAK,WACD,MAAO,eACX,IAAK,SACD,MAAO,SACX,IAAK,QACD,MAAO,QAGX,QACI,MAAO,WAInB8rG,EAAWvlf,UAAU6nlB,0BAA4B,SAAUpjX,EAAQ9jM,GAC/D8jM,EAAOzM,uBAAkBl4N,EAAW,SAAU6E,KAAKs2kB,YACnD,IAAIoN,EAAcr3kB,KAAKoxB,MAAMzB,EAAOitd,WAAajpf,KAAK+4kB,iBACtDj5W,EAAO9L,0BAAqB74N,EAAW,IAAK6E,KAAKs2kB,WAAYoN,EAAYx2kB,YACzE4yN,EAAO9L,0BAAqB74N,EAAW,OAAQ6E,KAAKs2kB,WAAY,OAChEx2W,EAAO1M,mBAGXwtR,EAAWvlf,UAAU4nlB,qBAAuB,SAAUnjX,EAAQ9jM,IACrDv+B,EAAkBu+B,EAAO46P,cAAgB56P,EAAO46P,aAAe,IAChE92D,EAAOzM,uBAAkBl4N,EAAW,iBAAkB6E,KAAKs2kB,YAE3Dx2W,EAAO9L,0BAAqB74N,EAAW,IAAK6E,KAAKs2kB,WAAYt2kB,KAAKo/kB,kBAAkBpjjB,EAAO46P,YAAc52R,KAAKg5kB,kBAAkB9rkB,YAChI4yN,EAAO9L,0BAAqB74N,EAAW,OAAQ6E,KAAKs2kB,WAAY,OAChEx2W,EAAO1M,oBAIfwtR,EAAWvlf,UAAU0nlB,oBAAsB,SAAUjjX,EAAQ7/J,GAEzD,GADA6/J,EAAOzM,uBAAkBl4N,EAAW,OAAQ6E,KAAKs2kB,YACJ,YAAzCr2gB,EAAM6vb,YAAYG,mBAElBnwR,EAAO9L,0BAAqB74N,EAAW,IAAK6E,KAAKs2kB,YAAar2gB,EAAM6vb,YAAYE,eAAiBhwf,KAAKk5kB,kBAAkBhskB,YACxH4yN,EAAO9L,0BAAqB74N,EAAW,OAAQ6E,KAAKs2kB,WAAY,YAE/D,GAA6C,UAAzCr2gB,EAAM6vb,YAAYG,mBAAgC,CACvD,IAAI8F,EAAa1pf,KAAKoxB,MAAMwiC,EAAM6vb,YAAYE,eAAiBhwf,KAAK+4kB,iBACpEj5W,EAAO9L,0BAAqB74N,EAAW,IAAK6E,KAAKs2kB,WAAYvgF,EAAW7of,YACxE4yN,EAAO9L,0BAAqB74N,EAAW,OAAQ6E,KAAKs2kB,WAAY,YAGhEx2W,EAAO9L,0BAAqB74N,EAAW,IAAK6E,KAAKs2kB,WAAY,KAC7Dx2W,EAAO9L,0BAAqB74N,EAAW,OAAQ6E,KAAKs2kB,WAAY,QAEpEx2W,EAAO1M,mBAGXwtR,EAAWvlf,UAAU2nlB,wBAA0B,SAAUljX,EAAQ9jM,GAE7D,OADA8jM,EAAOzM,uBAAkBl4N,EAAW,KAAM6E,KAAKs2kB,YACvCt6iB,EAAO+zd,gBACX,IAAK,QACDjwR,EAAO9L,qBAAqB,IAAK,MAAOh0N,KAAKs2kB,WAAY,SACzD,MACJ,IAAK,SACDx2W,EAAO9L,qBAAqB,IAAK,MAAOh0N,KAAKs2kB,WAAY,UACzD,MACJ,QACIx2W,EAAO9L,qBAAqB,IAAK,MAAOh0N,KAAKs2kB,WAAY,QAGjEx2W,EAAO1M,mBAGXwtR,EAAWvlf,UAAU4klB,wBAA0B,SAAUngX,EAAQ/zM,GAC7D+zM,EAAOzM,uBAAkBl4N,EAAW,IAAK6E,KAAKs2kB,YAC9Ct2kB,KAAKw2hB,yBAAyB12T,EAAQ/zM,EAAMiyd,iBAC5Cl+Q,EAAOzM,uBAAkBl4N,EAAW,UAAW6E,KAAKs2kB,YACpD,IAAI5vkB,EAA2B,IAApBqlB,EAAMw/d,UAAkB,QACT,IAApBx/d,EAAMw/d,UAAkB,MAAQ,WACtCzrR,EAAO9L,0BAAqB74N,EAAW,cAAe6E,KAAKs2kB,WAAY5vkB,GACvEo5N,EAAO1M,kBACP0M,EAAO1M,mBAGXwtR,EAAWvlf,UAAU+klB,mBAAqB,SAAUtgX,EAAQn9J,EAAMu7b,GAG9D,GAFAp+R,EAAOzM,kBAAkB,IAAK,IAAKrzN,KAAKs2kB,YACxCt2kB,KAAKw2hB,yBAAyB12T,EAAQn9J,EAAKq7a,iBACzB,OAAdr7a,EAAKl2C,KACLqzM,EAAOhM,wBAAmB34N,EAAW,MAAO6E,KAAKs2kB,gBAAYn7kB,QAE5D,GAAkB,OAAdwnE,EAAKl2C,KACVqzM,EAAOhM,wBAAmB34N,EAAW,KAAM6E,KAAKs2kB,gBAAYn7kB,OAE3D,CACD,IAAIwolB,GAAWlmlB,EAAkByggB,IAC1BA,EAAav3f,eAAe,cAA2C,IAA3Bu3f,EAAa3S,UAChEzrR,EAAOzM,uBAAkBl4N,EAAWwolB,EAAU,YAAc,IAAK3jlB,KAAKs2kB,YACtEx2W,EAAO9L,qBAAqB,MAAO,QAASh0N,KAAK+2kB,aAAc,YAC/Dj3W,EAAO/L,YAAYpxJ,EAAKl2C,MACxBqzM,EAAO1M,kBAEX0M,EAAO1M,mBAGXwtR,EAAWvlf,UAAUo7hB,yBAA2B,SAAU32T,EAAQ89Q,EAAiBiF,GAC1Eplf,EAAkBmgf,EAAgBmO,aACnCjsR,EAAOzM,uBAAkBl4N,EAAW,SAAU6E,KAAKs2kB,YACnDx2W,EAAO9L,qBAAqB,IAAK,MAAOh0N,KAAKs2kB,WAAY14F,EAAgBmO,WACzEjsR,EAAO1M,mBAEN31N,EAAkBolf,GAInB7if,KAAK4jlB,oBAAoB9jX,EAAQ89Q,EAAgBgG,YAHjD5jf,KAAK4jlB,oBAAoB9jX,EAAQ+iR,EAAUjF,gBAAgBgG,YAK/D5jf,KAAK6jlB,0BAA0B/jX,EAAQ89Q,GACvC59e,KAAK8jlB,qBAAqBhkX,EAAQ89Q,GAClC59e,KAAK+jlB,4BAA4BjkX,EAAQ89Q,EAAgBj9c,gBACpDljC,EAAkBmgf,EAAgBoK,OAASpK,EAAgBoK,KAAKvrf,OAAS,GAC1EuD,KAAKgklB,cAAclkX,EAAQ89Q,EAAgBoK,OAInDpH,EAAWvlf,UAAU2olB,cAAgB,SAAUlkX,EAAQqoR,GACnDroR,EAAOzM,kBAAkB,IAAK,OAAQrzN,KAAKs2kB,YAC3C,IAAK,IAAIn6kB,EAAI,EAAGA,EAAIgsf,EAAS1rf,OAAQN,IACjC6D,KAAKiklB,aAAankX,EAAQqoR,EAAShsf,IAEvC2jO,EAAO1M,mBAEXwtR,EAAWvlf,UAAU4olB,aAAe,SAAUnkX,EAAQ0vT,GAClD,IAAIt7gB,EAAW,EACf4rN,EAAOzM,kBAAkB,IAAK,MAAOrzN,KAAKs2kB,YACjB,IAArB9mD,EAAQt7gB,UAA6C,IAA3Bs7gB,EAAQ3nC,gBAClC3ze,EAAWs7gB,EAAQ3nC,eAAiB7nf,KAAKg5kB,iBACzCl5W,EAAO9L,qBAAqB,IAAK,MAAOh0N,KAAKs2kB,WAAY,WAGzDpikB,EAAWs7gB,EAAQt7gB,SAAWlU,KAAKg5kB,iBACnCl5W,EAAO9L,qBAAqB,IAAK,MAAOh0N,KAAKs2kB,WAAYt2kB,KAAKkklB,oBAAoB10D,EAAQ1nC,oBAEzFrqf,EAAkB+xhB,EAAQxwB,YAAqC,SAAtBwwB,EAAQxwB,WAClDl/R,EAAO9L,qBAAqB,IAAK,SAAUh0N,KAAKs2kB,WAAYt2kB,KAAKs+gB,aAAakR,EAAQxwB,YAE1Fl/R,EAAO9L,qBAAqB,IAAK,MAAOh0N,KAAKs2kB,WAAYpikB,EAAShH,WAAa,IAC/E4yN,EAAO1M,mBAEXwtR,EAAWvlf,UAAUijhB,aAAe,SAAUtf,GAC1C,OAAQA,GACJ,IAAK,MACD,MAAO,MACX,IAAK,SACD,MAAO,SACX,IAAK,aACD,MAAO,aACX,QACI,MAAO,SAGnBpe,EAAWvlf,UAAU6olB,oBAAsB,SAAUp8F,GACjD,OAAQA,GACJ,IAAK,MACD,MAAO,MACX,IAAK,SACD,MAAO,SACX,IAAK,UACD,MAAO,UACX,IAAK,OACD,MAAO,OACX,IAAK,OACD,MAAO,MACX,IAAK,QACD,MAAO,QACX,QACI,MAAO,UAUnBlH,EAAWvlf,UAAUuolB,oBAAsB,SAAU9jX,EAAQlqI,GA6BpDn4F,EAAkBm4F,EAAGswZ,SAAYzof,EAAkBm4F,EAAGmxZ,mBACvDjnR,EAAOzM,uBAAkBl4N,EAAW,QAAS6E,KAAKs2kB,YAC7C74kB,EAAkBm4F,EAAGmxZ,mBAA4C,IAAxBnxZ,EAAGmxZ,kBAC7CjnR,EAAOzM,uBAAkBl4N,EAAW,OAAQ6E,KAAKs2kB,YACjDx2W,EAAO9L,qBAAqB,IAAK,MAAOh0N,KAAKs2kB,WAAY1gf,EAAGmxZ,gBAAgB75e,YAC5E4yN,EAAO1M,mBAEN31N,EAAkBm4F,EAAGswZ,UAA0B,IAAftwZ,EAAGswZ,SACpCpmR,EAAOzM,uBAAkBl4N,EAAW,QAAS6E,KAAKs2kB,YAClDx2W,EAAO9L,qBAAqB,IAAK,MAAOh0N,KAAKs2kB,YAAa1gf,EAAGswZ,OAAS,GAAGh5e,YACzE4yN,EAAO1M,mBAEX0M,EAAO1M,oBAkBfwtR,EAAWvlf,UAAU0olB,4BAA8B,SAAUjkX,EAAQqkX,GACjE,IAAK1mlB,EAAkB0mlB,GAAe,CAClCrkX,EAAOzM,uBAAkBl4N,EAAW,KAAM6E,KAAKs2kB,YAC/C,IAAIjnhB,OAAY,EAChB,OAAQ80hB,GACJ,IAAK,SACD90hB,EAAY,SACZ,MACJ,IAAK,QACDA,EAAY,QACZ,MACJ,IAAK,UACDA,EAAY,OACZ,MACJ,QACIA,EAAY,OAGpBywK,EAAO9L,qBAAqB,IAAK,MAAOh0N,KAAKs2kB,WAAYjnhB,GACzDywK,EAAO1M,oBAIfwtR,EAAWvlf,UAAUwolB,0BAA4B,SAAU/jX,EAAQ89Q,GA8C/D,OA7CA99Q,EAAOzM,uBAAkBl4N,EAAW,UAAW6E,KAAKs2kB,YAY/C74kB,EAAkBmgf,EAAgBuL,gBACnCrpR,EAAO9L,0BAAqB74N,EAAW,SAAU6E,KAAKs2kB,WAAYt2kB,KAAKo/kB,kBAAkBxhG,EAAgBuL,cAAgBnpf,KAAKg5kB,kBAAkB9rkB,YAc/IzP,EAAkBmgf,EAAgBwL,eAEnCtpR,EAAO9L,0BAAqB74N,EAAW,QAAS6E,KAAKs2kB,WAAYt2kB,KAAKo/kB,kBAAkBxhG,EAAgBwL,aAAeppf,KAAKg5kB,kBAAkB9rkB,YAclJ4yN,EAAO9L,0BAAqB74N,EAAW,OAAQ6E,KAAKs2kB,WAAY,OAExD14F,EAAgByL,iBACpB,IAAK,UACDvpR,EAAO9L,0BAAqB74N,EAAW,WAAY6E,KAAKs2kB,WAAY,WACpE,MACJ,IAAK,UACDx2W,EAAO9L,0BAAqB74N,EAAW,WAAY6E,KAAKs2kB,WAAY,SACpE,MACJ,QACIx2W,EAAO9L,0BAAqB74N,EAAW,WAAY6E,KAAKs2kB,WAAY,QAG5Ex2W,EAAO1M,mBAGXwtR,EAAWvlf,UAAUyolB,qBAAuB,SAAUhkX,EAAQ89Q,GAC1D99Q,EAAOzM,uBAAkBl4N,EAAW,MAAO6E,KAAKs2kB,YAC3C74kB,EAAkBmgf,EAAgBqL,aAEnCnpR,EAAO9L,0BAAqB74N,EAAW,OAAQ6E,KAAKs2kB,WAAYt2kB,KAAKo/kB,kBAAkBxhG,EAAgBqL,WAAajpf,KAAK+4kB,iBAAiB7rkB,YAEzIzP,EAAkBmgf,EAAgBsL,cAEnCppR,EAAO9L,0BAAqB74N,EAAW,QAAS6E,KAAKs2kB,WAAYt2kB,KAAKo/kB,kBAAkBxhG,EAAgBsL,YAAclpf,KAAK+4kB,iBAAiB7rkB,YAE3IzP,EAAkBmgf,EAAgBhgQ,mBAC/BggQ,EAAgBhgQ,gBAAkB,EAElC9d,EAAO9L,0BAAqB74N,EAAW,UAAW6E,KAAKs2kB,WAAYt2kB,KAAKo/kB,mBAAmB,EAAIxhG,EAAgBhgQ,gBAAkB59O,KAAK+4kB,iBAAiB7rkB,YAIvJ4yN,EAAO9L,0BAAqB74N,EAAW,YAAa6E,KAAKs2kB,WAAYt2kB,KAAKo/kB,kBAAkBxhG,EAAgBhgQ,gBAAkB59O,KAAK+4kB,iBAAiB7rkB,aAG5J4yN,EAAO1M,mBAGXwtR,EAAWvlf,UAAU6hlB,gBAAkB,WACnC,IAAIp9W,EAAS,IAAI5N,GACjB4N,EAAOzM,kBAAkB,IAAK,SAAUrzN,KAAKs2kB,YAC7Cx2W,EAAO9L,qBAAqB,QAAS,UAAM74N,EAAW6E,KAAKo3kB,aAC3Dt3W,EAAO9L,qBAAqB,QAAS,SAAK74N,EAAW6E,KAAK22kB,YAC1D72W,EAAO9L,qBAAqB,QAAS,SAAK74N,EAAW6E,KAAKs2kB,YAC1Dx2W,EAAO9L,qBAAqB,QAAS,WAAO74N,EAAW6E,KAAK63kB,cAC5D/3W,EAAO9L,qBAAqB,QAAS,WAAO74N,EAAW6E,KAAKm4kB,cAC5Dr4W,EAAO9L,qBAAqB,KAAM,iBAAa74N,EAAW,WAE1D6E,KAAKoklB,uBAAuBtkX,GAE5B9/N,KAAKqklB,wBAAwBvkX,GAC7BA,EAAO1M,kBACP,IAAIkxX,EAAiB,IAAIrhX,GAAenD,EAAO9O,OAAQhxN,KAAKwzkB,WAC5DxzkB,KAAK28kB,SAASr4Y,QAAQggZ,IAG1B1jG,EAAWvlf,UAAU+olB,uBAAyB,SAAUtkX,GACpDA,EAAOzM,uBAAkBl4N,EAAW,cAAe6E,KAAKs2kB,YAGxDx2W,EAAOzM,uBAAkBl4N,EAAW,aAAc6E,KAAKs2kB,YAEvDt2kB,KAAKw2hB,yBAAyB12T,EAAQ9/N,KAAKi+kB,oBAC3Cn+W,EAAO1M,kBAgCP0M,EAAOzM,uBAAkBl4N,EAAW,aAAc6E,KAAKs2kB,YAClD74kB,EAAkBuC,KAAKk+kB,sBACxBp+W,EAAOzM,uBAAkBl4N,EAAW,MAAO6E,KAAKs2kB,YAChDt2kB,KAAKy2hB,yBAAyB32T,EAAQ9/N,KAAKk+kB,wBAAoB/ilB,GAC/D2kO,EAAO1M,mBAEX0M,EAAO1M,kBAoBP0M,EAAO1M,mBAEXwtR,EAAWvlf,UAAUgplB,wBAA0B,SAAUvkX,GACrD,IAAK,IAAI3jO,EAAI,EAAGA,EAAI6D,KAAKo+kB,QAAQ3hlB,OAAQN,IAAK,CAC1C,IAAIuI,EAAQ1E,KAAKo+kB,QAAQjilB,GACzB2jO,EAAOzM,uBAAkBl4N,EAAW,QAAS6E,KAAKs2kB,YAClD,IAAI5vkB,EAAsB,cAAfhC,EAAMgC,KAAuB,YAAc,YACtDo5N,EAAO9L,qBAAqB,IAAK,OAAQh0N,KAAKs2kB,WAAY5vkB,GAC1Do5N,EAAO9L,qBAAqB,IAAK,UAAWh0N,KAAKs2kB,WAAY5xkB,EAAM+yB,MAEnEqoM,EAAOzM,uBAAkBl4N,EAAW,OAAQ6E,KAAKs2kB,YACjDx2W,EAAO9L,qBAAqB,IAAK,MAAOh0N,KAAKs2kB,WAAY5xkB,EAAM+yB,MAC/DqoM,EAAO1M,kBAEF31N,EAAkBiH,EAAMoif,WACzBhnR,EAAOzM,uBAAkBl4N,EAAW,UAAW6E,KAAKs2kB,YACpDx2W,EAAO9L,qBAAqB,IAAK,MAAOh0N,KAAKs2kB,WAAY5xkB,EAAMoif,SAC/DhnR,EAAO1M,mBAGN31N,EAAkBiH,EAAM4jC,QACzBw3L,EAAOzM,uBAAkBl4N,EAAW,OAAQ6E,KAAKs2kB,YACjDx2W,EAAO9L,qBAAqB,IAAK,MAAOh0N,KAAKs2kB,WAAY5xkB,EAAM4jC,MAC/Dw3L,EAAO1M,mBAGN31N,EAAkBiH,EAAMyuD,QACzB2sK,EAAOzM,uBAAkBl4N,EAAW,OAAQ6E,KAAKs2kB,YACjDx2W,EAAO9L,qBAAqB,IAAK,MAAOh0N,KAAKs2kB,WAAY5xkB,EAAMyuD,MAC/D2sK,EAAO1M,mBAEQ,cAAf1uN,EAAMgC,OACNo5N,EAAOzM,uBAAkBl4N,EAAW,MAAO6E,KAAKs2kB,YAChDt2kB,KAAKy2hB,yBAAyB32T,EAAQp7N,EAAMk5e,qBAAiBzif,GAC7D2kO,EAAO1M,mBAGXpzN,KAAKw2hB,yBAAyB12T,EAAQp7N,EAAMs5e,iBAC5Cl+Q,EAAO1M,oBAIfwtR,EAAWvlf,UAAUm7hB,yBAA2B,SAAU12T,EAAQk+Q,GAqB9D,GApBAl+Q,EAAOzM,uBAAkBl4N,EAAW,MAAO6E,KAAKs2kB,YAC3C74kB,EAAkBugf,EAAgB+N,aACnCjsR,EAAOzM,uBAAkBl4N,EAAW,SAAU6E,KAAKs2kB,YACnDx2W,EAAO9L,qBAAqB,IAAK,MAAOh0N,KAAKs2kB,WAAYt4F,EAAgB+N,WACzEjsR,EAAO1M,mBAEN31N,EAAkBugf,EAAgB/wd,cACnC6yM,EAAOzM,uBAAkBl4N,EAAW,SAAU6E,KAAKs2kB,YACnDx2W,EAAO9L,0BAAqB74N,EAAW,QAAS6E,KAAKs2kB,WAAYt4F,EAAgB/wd,YACjF6yM,EAAO9L,0BAAqB74N,EAAW,QAAS6E,KAAKs2kB,WAAYt4F,EAAgB/wd,YACjF6yM,EAAO9L,0BAAqB74N,EAAW,WAAY6E,KAAKs2kB,WAAYt4F,EAAgB/wd,YACpF6yM,EAAO9L,0BAAqB74N,EAAW,KAAM6E,KAAKs2kB,WAAYt4F,EAAgB/wd,YAC9E6yM,EAAO1M,mBAEN31N,EAAkBugf,EAAgBtvc,OACnC1uC,KAAKuklB,sBAAsBzkX,EAAQ,IAAKk+Q,EAAgBtvc,MAEvDjxC,EAAkBugf,EAAgBzsc,SACnCvxC,KAAKuklB,sBAAsBzkX,EAAQ,IAAKk+Q,EAAgBzsc,SAEvD9zC,EAAkBugf,EAAgBuM,eACnC,OAAQvM,EAAgBuM,eACpB,IAAK,eACDvqf,KAAKuklB,sBAAsBzkX,EAAQ,UAAU,GAC7C,MACJ,IAAK,eACD9/N,KAAKuklB,sBAAsBzkX,EAAQ,WAAW,GAC9C,MACJ,QACI9/N,KAAKuklB,sBAAsBzkX,EAAQ,UAAU,GAC7C9/N,KAAKuklB,sBAAsBzkX,EAAQ,WAAW,GAyB1D,GArBKriO,EAAkBugf,EAAgBsM,aACnCxqR,EAAOzM,uBAAkBl4N,EAAW,QAAS6E,KAAKs2kB,YAClDx2W,EAAO9L,qBAAqB,IAAK,MAAOh0N,KAAKs2kB,WAAYt2kB,KAAK47gB,SAAS59B,EAAgBsM,YACvFxqR,EAAO1M,mBAEN31N,EAAkBugf,EAAgBnxd,YACnCizM,EAAOzM,uBAAkBl4N,EAAW,KAAM6E,KAAKs2kB,YAE/Cx2W,EAAO9L,qBAAqB,IAAK,MAAOh0N,KAAKs2kB,WAAYt2kB,KAAKo/kB,kBAA6C,EAA3BphG,EAAgBnxd,UAAc3f,YAC9G4yN,EAAO1M,mBAEN31N,EAAkBugf,EAAgBwM,iBAAsD,YAAnCxM,EAAgBwM,iBACtE1qR,EAAOzM,uBAAkBl4N,EAAW,YAAa6E,KAAKs2kB,YACtDx2W,EAAO9L,qBAAqB,IAAK,MAAOh0N,KAAKs2kB,WAAYt2kB,KAAKwklB,kBAAkBxmG,EAAgBwM,iBAChG1qR,EAAO1M,mBAEN31N,EAAkBugf,EAAgB9oO,YAA4C,SAA9B8oO,EAAgB9oO,YACjEp1C,EAAOzM,uBAAkBl4N,EAAW,IAAK6E,KAAKs2kB,YAC9Cx2W,EAAO9L,qBAAqB,IAAK,MAAOh0N,KAAKs2kB,WAAYt2kB,KAAKyklB,kBAAkBzmG,EAAgB9oO,YAChGp1C,EAAO1M,oBAEN31N,EAAkBugf,EAAgBqM,mBAAoB,CAEvD,OADAvqR,EAAOzM,uBAAkBl4N,EAAW,YAAa6E,KAAKs2kB,YAC9Ct4F,EAAgBqM,mBACpB,IAAK,YACDvqR,EAAO9L,qBAAqB,IAAK,MAAOh0N,KAAKs2kB,WAAY,aACzD,MACJ,IAAK,cACDx2W,EAAO9L,qBAAqB,IAAK,MAAOh0N,KAAKs2kB,WAAY,eACzD,MACJ,QACIx2W,EAAO9L,qBAAqB,IAAK,MAAOh0N,KAAKs2kB,WAAY,YAGjEx2W,EAAO1M,kBAEX0M,EAAO1M,mBAEXwtR,EAAWvlf,UAAUughB,SAAW,SAAUplf,GAStC,OARIA,EAAM/5B,OAAS,IACE,MAAb+5B,EAAM,KACNA,EAAQA,EAAMQ,OAAO,IAErBR,EAAM/5B,OAAS,IACf+5B,EAAQA,EAAMQ,OAAO,EAAG,KAGzBR,GAGXoqd,EAAWvlf,UAAUoplB,kBAAoB,SAAUC,GAC/C,OAAQA,GACJ,IAAK,kBACD,MAAO,kBACX,IAAK,eACD,MAAO,eACX,IAAK,YACD,MAAO,cACX,IAAK,WACD,MAAO,WACX,IAAK,gBACD,MAAO,gBACX,IAAK,UACD,MAAO,UACX,IAAK,aACD,MAAO,aACX,IAAK,SACD,MAAO,SACX,IAAK,cACD,MAAO,cACX,IAAK,SACD,MAAO,SACX,IAAK,SACD,MAAO,SACX,IAAK,QACD,MAAO,QACX,IAAK,OACD,MAAO,OACX,IAAK,aACD,MAAO,aACX,IAAK,YACD,MAAO,YACX,IAAK,QACD,MAAO,QACX,QACI,MAAO,SAGnB9jG,EAAWvlf,UAAUmplB,kBAAoB,SAAUthP,GAC/C,OAAQA,GAEJ,IAAK,cACD,MAAO,QAEX,IAAK,YACD,MAAO,OAEX,IAAK,OACD,MAAO,UAEX,IAAK,OACD,MAAO,OAEX,IAAK,MACD,MAAO,MAEX,IAAK,WACD,MAAO,WAEX,IAAK,OACD,MAAO,WAEX,IAAK,QACD,MAAO,YAEX,IAAK,SACD,MAAO,cAEX,IAAK,UACD,MAAO,UAEX,IAAK,aACD,MAAO,aAEX,IAAK,SACD,MAAO,WAEX,IAAK,SACD,MAAO,YAEX,IAAK,QACD,MAAO,QAEX,QACI,MAAO,WAOnB09I,EAAWvlf,UAAUkplB,sBAAwB,SAAUzkX,EAAQpuN,EAAK1U,GAChE8iO,EAAOzM,uBAAkBl4N,EAAWuW,EAAK1R,KAAKs2kB,YACzCt5kB,GACD8iO,EAAO9L,0BAAqB74N,EAAW,MAAO6E,KAAKs2kB,WAAY,KAEnEx2W,EAAO1M,mBAGXwtR,EAAWvlf,UAAU8hlB,oBAAsB,WACvC,GAAmC,IAA/Bn9kB,KAAKQ,SAAS87Q,MAAM7/Q,OAAxB,CAGA,IAAIqjO,EAAS,IAAI5N,GACjB4N,EAAOzM,kBAAkB,IAAK,YAAarzN,KAAKs2kB,YAChDt2kB,KAAKs+kB,4BAA4Bx+W,GAEjC9/N,KAAK2klB,4BAA4B7kX,EAAQ9/N,KAAKQ,SAAS2/e,eACvDngf,KAAK4klB,uBAAuB9kX,EAAQ9/N,KAAKQ,SAAS87Q,OAElDx8C,EAAO1M,kBACP,IAAIkxX,EAAiB,IAAIrhX,GAAenD,EAAO9O,OAAQhxN,KAAKyzkB,eAC5DzzkB,KAAK28kB,SAASr4Y,QAAQggZ,KAG1B1jG,EAAWvlf,UAAUsplB,4BAA8B,SAAU7kX,EAAQ+kX,GACjE,IAAK,IAAI1olB,EAAI,EAAGA,EAAI0olB,EAAWpolB,OAAQN,IAAK,CACxC,IAAIkqf,EAAew+F,EAAW1olB,GAC9B2jO,EAAOzM,uBAAkBl4N,EAAW,cAAe6E,KAAKs2kB,YACxDx2W,EAAO9L,0BAAqB74N,EAAW,gBAAiB6E,KAAKs2kB,WAAYjwF,EAAaD,eAAel5e,YACrG4yN,EAAOzM,uBAAkBl4N,EAAW,OAAQ6E,KAAKs2kB,YACjDx2W,EAAO9L,0BAAqB74N,EAAW,MAAO6E,KAAKs2kB,WAAYt2kB,KAAK8klB,eACpEhlX,EAAO1M,kBACP,IAAK,IAAI2xX,EAAO,EAAGn1kB,EAAMy2e,EAAajna,OAAO3iF,OAAQsolB,EAAOn1kB,EAAKm1kB,IAC7D/klB,KAAKgllB,mBAAmBllX,EAAQumR,EAAajna,OAAO2lgB,GAAOA,GAE/DjlX,EAAO1M,oBAIfwtR,EAAWvlf,UAAUuplB,uBAAyB,SAAU9kX,EAAQ+kX,GAC5D,IAAK,IAAI1olB,EAAI,EAAGA,EAAI0olB,EAAWpolB,OAAQN,IAAK,CACxC,IAAI0mG,EAAOgif,EAAW1olB,GACtB2jO,EAAOzM,uBAAkBl4N,EAAW,MAAO6E,KAAKs2kB,YAChDx2W,EAAO9L,0BAAqB74N,EAAW,QAAS6E,KAAKs2kB,YAAazze,EAAKqjZ,OAAS,GAAGh5e,YACnF4yN,EAAOzM,uBAAkBl4N,EAAW,gBAAiB6E,KAAKs2kB,YAC1Dx2W,EAAO9L,0BAAqB74N,EAAW,MAAO6E,KAAKs2kB,WAAYzze,EAAKujZ,eAAel5e,YACnF4yN,EAAO1M,kBACP0M,EAAO1M,oBAGfwtR,EAAWvlf,UAAUyplB,YAAc,WAC/B,OAAQz4kB,KAAK+S,YAAM/S,KAAK4S,UAAuC,MAAW/R,SAAS,IAAIud,eAE3Fm2d,EAAWvlf,UAAU+jlB,kBAAoB,SAAUzjlB,GAC/C,OAAO0Q,KAAKoxB,MAAM9hC,IAGtBilf,EAAWvlf,UAAU2plB,mBAAqB,SAAUllX,EAAQwoR,EAAW28F,GACnEnlX,EAAOzM,uBAAkBl4N,EAAW,MAAO6E,KAAKs2kB,YAChDx2W,EAAO9L,0BAAqB74N,EAAW,OAAQ6E,KAAKs2kB,WAAY2O,EAAW/3kB,YAC3E4yN,EAAOzM,uBAAkBl4N,EAAW,QAAS6E,KAAKs2kB,YAClDx2W,EAAO9L,0BAAqB74N,EAAW,MAAO6E,KAAKs2kB,WAAYhuF,EAAUtC,QAAQ94e,YACjF4yN,EAAO1M,kBACP0M,EAAOzM,uBAAkBl4N,EAAW,SAAU6E,KAAKs2kB,YACnDx2W,EAAO9L,0BAAqB74N,EAAW,MAAO6E,KAAKs2kB,WAAYt2kB,KAAKkllB,gBAAgB58F,EAAUgc,mBAC9FxkS,EAAO1M,kBACHk1R,EAAU2c,aAAe,IACzBnlS,EAAOzM,uBAAkBl4N,EAAW,aAAc6E,KAAKs2kB,YACvDx2W,EAAO9L,0BAAqB74N,EAAW,MAAO6E,KAAKs2kB,WAAY,KAC/Dx2W,EAAO1M,mBAYXpzN,KAAKmllB,qBAAqBrlX,EAAQwoR,GAClCtof,KAAKollB,mBAAmBtlX,EAAQwoR,EAAW28F,EAAa,GAoBxDnlX,EAAOzM,uBAAkBl4N,EAAW,MAAO6E,KAAKs2kB,YAChDt2kB,KAAKy2hB,yBAAyB32T,EAAQwoR,EAAU1K,qBAAiBzif,GACjE2kO,EAAO1M,kBACPpzN,KAAKw2hB,yBAAyB12T,EAAQwoR,EAAUtK,iBAChDl+Q,EAAO1M,mBAEXwtR,EAAWvlf,UAAU6plB,gBAAkB,SAAU9zD,GAC7C,IAAIi0D,EACJ,OAAQj0D,GACJ,IAAK,SACDi0D,EAAc,UACd,MACJ,IAAK,UACDA,EAAc,aACd,MACJ,IAAK,WACDA,EAAc,aACd,MACJ,IAAK,WACDA,EAAc,cACd,MACJ,IAAK,YACDA,EAAc,cACd,MAcJ,QACIA,EAAc,SAGtB,OAAOA,GAGXzkG,EAAWvlf,UAAU+plB,mBAAqB,SAAUtlX,EAAQwoR,EAAWg9F,GACnExlX,EAAOzM,uBAAkBl4N,EAAW,UAAW6E,KAAKs2kB,YACpDx2W,EAAO9L,0BAAqB74N,EAAW,MAAO6E,KAAKs2kB,WAAahuF,EAAsB,cACtFxoR,EAAO1M,mBAGXwtR,EAAWvlf,UAAU8plB,qBAAuB,SAAUrlX,EAAQwoR,GAC1D,IAAIi9F,EAGAA,EAD8B,QAA9Bj9F,EAAUyc,gBACL,MAE8B,UAA9Bzc,EAAUyc,gBACV,QAGA,UAETjlS,EAAOzM,uBAAkBl4N,EAAW,OAAQ6E,KAAKs2kB,YACjDx2W,EAAO9L,0BAAqB74N,EAAW,MAAO6E,KAAKs2kB,WAAYiP,GAC/DzlX,EAAO1M,mBAEXwtR,EAAWvlf,UAAU+hlB,kBAAoB,WACrC,IAAIt9W,EAAS,IAAI5N,GACjB4N,EAAOzM,kBAAkB,IAAK,WAAYrzN,KAAKs2kB,YAC/Ct2kB,KAAKy+kB,YAAY3+W,GAMjBA,EAAO9L,qBAAqB,QAAS,WAAO74N,EAAW6E,KAAKg3kB,cAC5Dl3W,EAAO9L,qBAAqB,QAAS,WAAO74N,EAAW6E,KAAK63kB,cAC5D/3W,EAAO9L,qBAAqB,QAAS,WAAO74N,EAAW6E,KAAKm4kB,cAC5Dr4W,EAAO9L,qBAAqB,QAAS,UAAM74N,EAAW6E,KAAK03kB,aAC3D53W,EAAO9L,qBAAqB,KAAM,iBAAa74N,EAAW,WA0B1D2kO,EAAOzM,kBAAkB,IAAK,OAAQrzN,KAAKs2kB,YAa3Cx2W,EAAO9L,qBAAqB,IAAK,MAAOh0N,KAAKs2kB,WAAY,QAGzDx2W,EAAO9L,qBAAqB,IAAK,UAAWh0N,KAAKs2kB,WAAY,OAC7Dx2W,EAAO1M,kBAIP0M,EAAOzM,uBAAkBl4N,EAAW,yBAA0B6E,KAAKs2kB,YACnEx2W,EAAO1M,kBAGP0M,EAAOzM,uBAAkBl4N,EAAW,iBAAkB6E,KAAKs2kB,YAC3D,IAAIkP,EAAWn5kB,KAAKoxB,MAAMz9B,KAAKm+kB,qBAAuBn+kB,KAAK+4kB,iBAC3Dj5W,EAAO9L,0BAAqB74N,EAAW,MAAO6E,KAAKs2kB,WAAYkP,EAASt4kB,YACxE4yN,EAAO1M,kBAEHpzN,KAAKq8kB,sBACLv8W,EAAOzM,uBAAkBl4N,EAAW,oBAAqB6E,KAAKs2kB,YAC9Dx2W,EAAO1M,mBAKX0M,EAAOzM,uBAAkBl4N,EAAW,SAAU6E,KAAKs2kB,YACnDx2W,EAAOzM,uBAAkBl4N,EAAW,gBAAiB6E,KAAKs2kB,YAC1Dx2W,EAAO9L,0BAAqB74N,EAAW,OAAQ6E,KAAKs2kB,WAAY,qBAChEx2W,EAAO9L,0BAAqB74N,EAAW,MAAO6E,KAAKs2kB,WAAY,4CAC/Dx2W,EAAO9L,0BAAqB74N,EAAW,MAAO6E,KAAKs2kB,WAAY,MAC/Dx2W,EAAO1M,kBACP0M,EAAO1M,kBACP0M,EAAO1M,kBACP,IAAIkxX,EAAiB,IAAIrhX,GAAenD,EAAO9O,OAAQhxN,KAAK0zkB,cAC5D1zkB,KAAK28kB,SAASr4Y,QAAQggZ,IAE1B1jG,EAAWvlf,UAAUgilB,wBAA0B,aAG/Cz8F,EAAWvlf,UAAUiilB,uBAAyB,aAG9C18F,EAAWvlf,UAAUkilB,mBAAqB,SAAU96f,KAGpDm+Z,EAAWvlf,UAAUoilB,0BAA4B,aAGjD78F,EAAWvlf,UAAUqilB,uBAAyB,WAC1C19kB,KAAKyllB,sBAAsB,cAC3BzllB,KAAKyllB,sBAAsB,cAC3BzllB,KAAKyllB,sBAAsB,mBAC3BzllB,KAAKyllB,sBAAsB,mBAC3BzllB,KAAKyllB,sBAAsB,aAC3BzllB,KAAKyllB,sBAAsB,cAG/B7kG,EAAWvlf,UAAUoqlB,sBAAwB,SAAU/F,GACnD,GAAmC,IAA/B1/kB,KAAKyjf,eAAehnf,OAAxB,CAGA,IAAIiplB,EACAC,EACJ,GAAK3llB,KAAKyjf,eAAeh9Q,YAAYi5W,GAKrC,IAAK,IAFDC,EAAS3/kB,KAAKyjf,eAAe/7e,IAAIg4kB,GACjCH,OAAKpklB,EACAgB,EAAI,EAAGA,EAAIwjlB,EAAOrilB,KAAKb,OAAQN,IAAK,CACzC,IAAImH,EAAKq8kB,EAAOrilB,KAAKnB,GACrBojlB,EAAKI,EAAOj4kB,IAAIpE,GACD,eAAXo8kB,GAAsC,oBAAXA,GAChB,cAAXA,GACAgG,EAAmB1llB,KAAK2zkB,WAAarwkB,EAAGiM,QAAQ,MAAO,IAAM,OAC7Do2kB,EAAuB3llB,KAAKm0kB,mBAAqB7wkB,EAAGiM,QAAQ,MAAO,IAAM,YACzEvP,KAAK4llB,gBAAgBrG,EAAIj8kB,EAAIoilB,EAAkBC,KAG/CD,EAAmB1llB,KAAK4zkB,WAAatwkB,EAAGiM,QAAQ,MAAO,IAAM,OAC7Do2kB,EAAuB3llB,KAAKo0kB,mBAAqB9wkB,EAAGiM,QAAQ,MAAO,IAAM,YACzEvP,KAAK6llB,gBAAgBtG,EAAIj8kB,EAAIoilB,EAAkBC,OAK3D/kG,EAAWvlf,UAAUuqlB,gBAAkB,SAAUhhgB,EAAQthF,EAAIoilB,EAAkBC,GAC3E3llB,KAAK+zf,aAAenva,EACpB,IAAIk7I,EAAS,IAAI5N,GACjB4N,EAAOzM,kBAAkB,IAAK,MAAOrzN,KAAKs2kB,YAC1Ct2kB,KAAK8llB,wBAAwBhmX,GAC7B,IAAIwvR,EAAQtvf,KAAKq+kB,WACjBr+kB,KAAKq+kB,WAAaz5f,EAClB5kF,KAAK2+kB,mBAAmB7+W,EAAQl7I,EAAOkvL,QAAQ,GAC/C9zQ,KAAKq+kB,WAAa/uF,EAClBxvR,EAAO1M,kBACP,IAAIkxX,EAAiB,IAAIrhX,GAAenD,EAAO9O,OAAQ00X,GACvD1llB,KAAK28kB,SAASr4Y,QAAQggZ,GACtBtklB,KAAK+llB,qBAAqBzilB,EAAIqilB,GAC9B3llB,KAAK+zf,kBAAe54f,GAGxBylf,EAAWvlf,UAAU0qlB,qBAAuB,SAAUzG,EAAMqG,GAKxD,GAJiB3llB,KAAKwhlB,mBAAmB/6W,YAAY64W,GAIrD,CACI,IAAIx/W,EAAS,IAAI5N,GACjB4N,EAAOzM,uBAAkBl4N,EAAW,gBAAiB6E,KAAK42kB,aAC1D52kB,KAAKgmlB,yBAAyBhmlB,KAAKwhlB,mBAAmB95kB,IAAI43kB,GAAOx/W,GAajEA,EAAO1M,kBACP,IAAIkxX,EAAiB,IAAIrhX,GAAenD,EAAO9O,OAAQ20X,GACvD3llB,KAAK28kB,SAASr4Y,QAAQggZ,KAM9B1jG,EAAWvlf,UAAUyqlB,wBAA0B,SAAUhmX,GACrDA,EAAO9L,qBAAqB,QAAS,SAAK74N,EAAW6E,KAAK62kB,YAC1D/2W,EAAO9L,qBAAqB,QAAS,WAAO74N,EAAW6E,KAAKg3kB,cAC5Dl3W,EAAO9L,qBAAqB,QAAS,SAAK74N,EAAW6E,KAAK82kB,YAC1Dh3W,EAAO9L,qBAAqB,QAAS,UAAM74N,EAAW6E,KAAKo3kB,aAC3Dt3W,EAAO9L,qBAAqB,QAAS,SAAK74N,EAAW6E,KAAK22kB,YAC1D72W,EAAO9L,qBAAqB,QAAS,SAAK74N,EAAW6E,KAAKq3kB,YAC1Dv3W,EAAO9L,qBAAqB,QAAS,WAAO74N,EAAW6E,KAAKs3kB,cAC5Dx3W,EAAO9L,qBAAqB,QAAS,SAAK74N,EAAW6E,KAAKy2kB,YAC1D32W,EAAO9L,qBAAqB,QAAS,WAAO74N,EAAW6E,KAAKw2kB,kBAC5D12W,EAAO9L,qBAAqB,QAAS,UAAM74N,EAAW6E,KAAKu2kB,aAC3Dz2W,EAAO9L,qBAAqB,QAAS,WAAO74N,EAAW6E,KAAK83kB,mBAC5Dh4W,EAAO9L,qBAAqB,QAAS,YAAQ74N,EAAW6E,KAAK+3kB,oBAC7D/3kB,KAAK0+kB,SAAS5+W,GACdA,EAAO9L,qBAAqB,QAAS,WAAO74N,EAAW6E,KAAKk4kB,kBAC5Dp4W,EAAO9L,qBAAqB,KAAM,iBAAa74N,EAAW,iBAG9Dylf,EAAWvlf,UAAUwqlB,gBAAkB,SAAUv4Y,EAAQhqM,EAAIoilB,EAAkBC,GAC3E3llB,KAAK+zf,aAAezmT,EACpB,IAAIwyB,EAAS,IAAI5N,GACjB4N,EAAOzM,kBAAkB,IAAK,MAAOrzN,KAAKs2kB,YAC1Ct2kB,KAAK8llB,wBAAwBhmX,GAC7B9/N,KAAK2+kB,mBAAmB7+W,EAAQxyB,EAAOwmE,QAAQ,GAC/Ch0C,EAAO1M,kBACP,IAAIkxX,EAAiB,IAAIrhX,GAAenD,EAAO9O,OAAQ00X,GACvD1llB,KAAK28kB,SAASr4Y,QAAQggZ,GACtBtklB,KAAK+llB,qBAAqBzilB,EAAIqilB,IAElC/kG,EAAWvlf,UAAUsilB,2BAA6B,WAC9C,IAAI79W,EAAS,IAAI5N,GACjB4N,EAAOzM,uBAAkBl4N,EAAW,gBAAiB6E,KAAK42kB,aAC1D52kB,KAAKimlB,sBAAsBnmX,EAAQ9/N,KAAKw/kB,wBAAyBx/kB,KAAKy1kB,cAAe,cACrFz1kB,KAAKimlB,sBAAsBnmX,EAAQ9/N,KAAKw/kB,wBAAyBx/kB,KAAKo1kB,gBAAiB,gBAEnFp1kB,KAAKQ,SAAS87Q,MAAM7/Q,OAAS,GAC7BuD,KAAKimlB,sBAAsBnmX,EAAQ9/N,KAAKw/kB,wBAAyBx/kB,KAAKw1kB,iBAAkB,iBAE5Fx1kB,KAAKkmlB,+BAA+BpmX,GAMpC9/N,KAAKgmlB,yBAAyBhmlB,KAAK8glB,eAAgBhhX,GASnDA,EAAO1M,kBACP,IAAIkxX,EAAiB,IAAIrhX,GAAenD,EAAO9O,OAAQhxN,KAAKk0kB,kBAC5Dl0kB,KAAK28kB,SAASr4Y,QAAQggZ,GACtBtklB,KAAK+zf,kBAAe54f,GAGxBylf,EAAWvlf,UAAU2qlB,yBAA2B,SAAUl4J,EAAQhuN,GAC9D,GAAIguN,EAAOrxb,OAAS,EAIhB,IAAK,IAHDo3kB,EAAY,GACZsS,OAAoB,EACpB7olB,EAAOwwb,EAAOxwb,KACTnB,EAAI,EAAGA,EAAImB,EAAKb,OAAQN,IAAK,CAGlC,GADAgqlB,EADar4J,EAAOpmb,IAAIpK,EAAKnB,IACF0+U,YACvBp9U,EAAkB0olB,GAClBtS,EAAY7zkB,KAAK6zkB,UAAY,UAC7B7zkB,KAAKimlB,sBAAsBnmX,EAAQxiO,EAAKnB,GAAI6D,KAAK+1kB,aAAclC,EAAUtkkB,QAAQ,QAAS,SAEzF,CACD,IAAIquI,EAAY,GACZwoc,EAAsB,GACtBpmlB,KAAK4xJ,WAAWu0b,EAAmB,2BACnCvoc,EAAY,OACZwoc,EAAsBD,EAAkB52kB,QAAQ,yBAA0B,KAErEvP,KAAK4xJ,WAAWu0b,EAAmB,6BACxCvoc,EAAY,OACZwoc,EAAsBD,EAAkB52kB,QAAQ,2BAA4B,KAEvEvP,KAAK4xJ,WAAWu0b,EAAmB,4BACxCvoc,EAAY,QACZwoc,EAAsBD,EAAkB52kB,QAAQ,0BAA2B,KAEtEvP,KAAK4xJ,WAAWu0b,EAAmB,2BACxCvoc,EAAY,OACZwoc,EAAsBD,EAAkB52kB,QAAQ,yBAA0B,KAErEvP,KAAK4xJ,WAAWu0b,EAAmB,4BACxCvoc,EAAY,OACZwoc,EAAsBD,EAAkB52kB,QAAQ,0BAA2B,KAEtEvP,KAAK4xJ,WAAWu0b,EAAmB,4BACxCvoc,EAAY,QACZwoc,EAAsBD,EAAkB52kB,QAAQ,0BAA2B,KAEtEvP,KAAK4xJ,WAAWu0b,EAAmB,2BACxCvoc,EAAY,OACZwoc,EAAsBD,EAAkB52kB,QAAQ,yBAA0B,KAErEvP,KAAK4xJ,WAAWu0b,EAAmB,2BACxCvoc,EAAY,OACZwoc,EAAsBD,EAAkB52kB,QAAQ,yBAA0B,KAErEvP,KAAK4xJ,WAAWu0b,EAAmB,4BACxCvoc,EAAY,OACZwoc,EAAsBD,EAAkB52kB,QAAQ,0BAA2B,KAEtEvP,KAAK4xJ,WAAWu0b,EAAmB,6BACxCvoc,EAAY,OACZwoc,EAAsBD,EAAkB52kB,QAAQ,2BAA4B,KAG5EquI,EAAY,QAEhBi2b,EAAY7zkB,KAAK6zkB,UAAYv2kB,EAAKnB,GAAKyhJ,EACvC59I,KAAKimlB,sBAAsBnmX,EAAQxiO,EAAKnB,GAAI6D,KAAK+1kB,aAAclC,EAAUtkkB,QAAQ,QAAS,KAG1F,IAAI82kB,EAAY,IAAIl1X,MAAMnxN,KAAKi0P,cAAcmyV,KACzC9B,EAAiB,IAAIrhX,GAAeojX,EAAWxS,GAEnD7zkB,KAAK28kB,SAASr4Y,QAAQggZ,MAYtC1jG,EAAWvlf,UAAU44P,cAAgB,SAAUniP,GAC3C,IACIoiP,EACAC,EACAC,EAEAC,EACAC,EACAgyV,EAPA/xV,EAAS,oEAQTp4P,EAAI,EACJq4P,EAAc,EAGdnzK,EAA6B,GADjCvvE,EAAQA,EAAMvC,QAAQ,sBAAuB,KACrB9S,OAAa,EAOrC,GANIqV,EAAMqN,OAAOrN,EAAMrV,OAAS,KAAO83P,EAAOp1O,OAAO,KACjDkiE,IAEAvvE,EAAMqN,OAAOrN,EAAMrV,OAAS,KAAO83P,EAAOp1O,OAAO,KACjDkiE,IAEAA,EAAc,GAAM,EAOpB,MAAM,IAAIzgF,MAAM,6CAGpB,IADA,IAAI8zO,EAAS,IAAIrgF,WAAyB,EAAdhzE,GACrBllF,EAAI2V,EAAMrV,QAKby3P,EAJOK,EAAOh2P,QAAQuT,EAAMqN,OAAOhjB,OAInB,GAHhBk4P,EAAOE,EAAOh2P,QAAQuT,EAAMqN,OAAOhjB,QAGL,EAC9Bg4P,GAAgB,GAAPE,IAAc,GAHvBC,EAAOC,EAAOh2P,QAAQuT,EAAMqN,OAAOhjB,QAGE,EACrCi4P,GAAgB,EAAPE,IAAa,GAHtBgyV,EAAO/xV,EAAOh2P,QAAQuT,EAAMqN,OAAOhjB,OAInCu4O,EAAO8f,KAAiBN,EACX,KAATI,IACA5f,EAAO8f,KAAiBL,GAEf,KAATmyV,IACA5xW,EAAO8f,KAAiBJ,GAGhC,OAAO1f,GAEXksQ,EAAWvlf,UAAUkrlB,4BAA8B,SAAUzmX,GAGzD,IAAK,IADDxiO,EAAO0C,KAAK+glB,eAAezjlB,KACtBnB,EAAI,EAAGA,EAAI6D,KAAK+glB,eAAezjlB,KAAKb,OAAQN,IACjD6D,KAAKimlB,sBAAsBnmX,EAAQxiO,EAAKnB,GAAI6D,KAAK+1kB,aAAc/1kB,KAAK+glB,eAAer5kB,IAAIpK,EAAKnB,MAIpGykf,EAAWvlf,UAAU6qlB,+BAAiC,SAAUpmX,GAC5D9/N,KAAKwmlB,oBAAoB1mX,EAAQ,cACjC9/N,KAAKwmlB,oBAAoB1mX,EAAQ,cACjC9/N,KAAKwmlB,oBAAoB1mX,EAAQ,mBACjC9/N,KAAKwmlB,oBAAoB1mX,EAAQ,mBACjC9/N,KAAKwmlB,oBAAoB1mX,EAAQ,aACjC9/N,KAAKwmlB,oBAAoB1mX,EAAQ,cAGrC8gR,EAAWvlf,UAAUmrlB,oBAAsB,SAAU1mX,EAAQ4/W,GACzD,IACI+G,EADAf,EAAmB,GAEvB,GAAK1llB,KAAKyjf,eAAeh9Q,YAAYi5W,GAIrC,IAAK,IADDC,EAAS3/kB,KAAKyjf,eAAe/7e,IAAIg4kB,GAC5BvjlB,EAAI,EAAGA,EAAIwjlB,EAAOrilB,KAAKb,OAAQN,IAAK,CACzC,IAAImH,EAAKq8kB,EAAOrilB,KAAKnB,GACN,eAAXujlB,GAAsC,oBAAXA,GAChB,cAAXA,GACAgG,EAAmB,SAAWpilB,EAAGiM,QAAQ,MAAO,IAAM,OACtDk3kB,EAAUzmlB,KAAKs1kB,gBAGfoQ,EAAmB,SAAWpilB,EAAGiM,QAAQ,MAAO,IAAM,OACtDk3kB,EAAUzmlB,KAAKq1kB,eAEnBr1kB,KAAKimlB,sBAAsBnmX,EAAQx8N,EAAImjlB,EAASf,KAIxD9kG,EAAWvlf,UAAU4qlB,sBAAwB,SAAUnmX,EAAQ4mX,EAAgBC,EAAkBC,GAC7F9mX,EAAOzM,uBAAkBl4N,EAAW,oBAAgBA,GACpD2kO,EAAO9L,0BAAqB74N,EAAW,UAAMA,EAAWurlB,GACxD5mX,EAAO9L,0BAAqB74N,EAAW,YAAQA,EAAWwrlB,GAC1D7mX,EAAO9L,0BAAqB74N,EAAW,cAAUA,EAAWyrlB,EAAWr3kB,QAAQ,KAAM,KAAKA,QAAQ,KAAM,MAEpGo3kB,IAAqB3mlB,KAAKg2kB,kBAAoBh2kB,KAAK4xJ,WAAWg1b,EAAY,YAAc5mlB,KAAK4xJ,WAAWg1b,EAAY,aAAe5mlB,KAAK4xJ,WAAWg1b,EAAY,cAmB/J9mX,EAAO9L,0BAAqB74N,EAAW,kBAAcA,EAAW,YAEpE2kO,EAAO1M,mBAGXwtR,EAAWvlf,UAAUmklB,sBAAwB,WACzC,MAAO,SAAWx/kB,KAAKm8kB,iBAE3Bv7F,EAAWvlf,UAAUuilB,0BAA4B,WAC7C,IAAI99W,EAAS,IAAI5N,GACjBlyN,KAAK6mlB,sBACL/mX,EAAOzM,uBAAkBl4N,EAAW,gBAAiB6E,KAAK42kB,aAC1D52kB,KAAKimlB,sBAAsBnmX,EAAQ9/N,KAAKw/kB,wBAAyBx/kB,KAAKu1kB,gBAAiBv1kB,KAAKuzkB,cAI5FzzW,EAAO1M,kBACP,IAAIkxX,EAAiB,IAAIrhX,GAAenD,EAAO9O,OAAQhxN,KAAKi0kB,qBAC5Dj0kB,KAAK28kB,SAASr4Y,QAAQggZ,IAE1B1jG,EAAWvlf,UAAUwilB,sBAAwB,SAAUp7f,GACnD,IAAIq9I,EAAS,IAAI5N,GACjB4N,EAAOzM,uBAAkBl4N,EAAW,QAAS,gEAM7C6E,KAAK8mlB,4BAA4BhnX,EAAQ,OAAQ9/N,KAAKk1kB,qBACtDl1kB,KAAK8mlB,4BAA4BhnX,EAAQ,MAAO9/N,KAAKq0kB,iBAKjDr0kB,KAAK8glB,eAAerklB,OAAS,GAAKuD,KAAK+glB,eAAetklB,OAAS,GAAKuD,KAAKwhlB,mBAAmB/klB,OAAS,KACrGuD,KAAK8mlB,4BAA4BhnX,EAAQ,MAAO,aAChD9/N,KAAK8mlB,4BAA4BhnX,EAAQ,MAAO,aAChD9/N,KAAK8mlB,4BAA4BhnX,EAAQ,MAAO,eAChD9/N,KAAK8mlB,4BAA4BhnX,EAAQ,MAAO,eAChD9/N,KAAK8mlB,4BAA4BhnX,EAAQ,MAAO,aAChD9/N,KAAK8mlB,4BAA4BhnX,EAAQ,MAAO,gBAChD9/N,KAAK8mlB,4BAA4BhnX,EAAQ,MAAO,cAChD9/N,KAAK8mlB,4BAA4BhnX,EAAQ,OAAQ,cACjD9/N,KAAK8mlB,4BAA4BhnX,EAAQ,OAAQ,cACjD9/N,KAAK8mlB,4BAA4BhnX,EAAQ,MAAO,cAChD9/N,KAAK8mlB,4BAA4BhnX,EAAQ,MAAO,kBAapD9/N,KAAK+mlB,6BAA6BjnX,EAAQ9/N,KAAKuzkB,aAAcvzkB,KAAKu0kB,qBAIlEv0kB,KAAK+mlB,6BAA6BjnX,EAAQ9/N,KAAKyzkB,cAAezzkB,KAAK20kB,sBAQnE30kB,KAAK+mlB,6BAA6BjnX,EAAQ9/N,KAAKwzkB,UAAWxzkB,KAAK40kB,mBAE/D50kB,KAAK+mlB,6BAA6BjnX,EAAQ9/N,KAAK0zkB,aAAc1zkB,KAAKw0kB,qBAYlEx0kB,KAAKgnlB,wBAAwBlnX,GAG7BA,EAAO1M,kBACP,IAAIkxX,EAAiB,IAAIrhX,GAAenD,EAAO9O,OAAQhxN,KAAKg0kB,kBAC5Dh0kB,KAAK28kB,SAASr4Y,QAAQggZ,IAG1B1jG,EAAWvlf,UAAU2rlB,wBAA0B,SAAUlnX,GACrD9/N,KAAKinlB,kCAAkCnnX,EAAQ,cAC/C9/N,KAAKinlB,kCAAkCnnX,EAAQ,cAC/C9/N,KAAKinlB,kCAAkCnnX,EAAQ,mBAC/C9/N,KAAKinlB,kCAAkCnnX,EAAQ,mBAC/C9/N,KAAKinlB,kCAAkCnnX,EAAQ,aAC/C9/N,KAAKinlB,kCAAkCnnX,EAAQ,cAGnD8gR,EAAWvlf,UAAU4rlB,kCAAoC,SAAUnnX,EAAQ0zR,GACvE,IAAI/wa,EACAykgB,EACJ,GAAKlnlB,KAAKyjf,eAAeh9Q,YAAY+sR,GAIrC,IAAK,IADDmsF,EAAS3/kB,KAAKyjf,eAAe/7e,IAAI8rf,GAC5Br3f,EAAI,EAAGA,EAAIwjlB,EAAOrilB,KAAKb,OAAQN,IAAK,CACzC,IAAImH,EAAKq8kB,EAAOrilB,KAAKnB,GACI,eAArBq3f,GAA0D,oBAArBA,GAChB,cAArBA,GACA0zF,EAAWlnlB,KAAK2zkB,WAAarwkB,EAAGiM,QAAQ,MAAO,IAAM,OACrDkzE,EAAcziF,KAAK00kB,oBAGnBwS,EAAWlnlB,KAAK4zkB,WAAatwkB,EAAGiM,QAAQ,MAAO,IAAM,OACrDkzE,EAAcziF,KAAKy0kB,mBAEvBz0kB,KAAK+mlB,6BAA6BjnX,EAAQonX,EAAUzkgB,KAI5Dm+Z,EAAWvlf,UAAU0rlB,6BAA+B,SAAUjnX,EAAQonX,EAAUzkgB,GAC5Eq9I,EAAOzM,uBAAkBl4N,EAAW,gBAAYA,GAChD2kO,EAAO9L,0BAAqB74N,EAAW,gBAAYA,EAAW,IAAM+rlB,EAAS33kB,QAAQ,KAAM,MAC3FuwN,EAAO9L,0BAAqB74N,EAAW,mBAAeA,EAAWsnF,GACjEq9I,EAAO1M,mBAGXwtR,EAAWvlf,UAAUyrlB,4BAA8B,SAAUhnX,EAAQliF,EAAWn7D,GAC5Eq9I,EAAOzM,uBAAkBl4N,EAAW,eAAWA,GAC/C2kO,EAAO9L,0BAAqB74N,EAAW,iBAAaA,EAAWyiJ,GAC/DkiF,EAAO9L,0BAAqB74N,EAAW,mBAAeA,EAAWsnF,GACjEq9I,EAAO1M,mBAGXwtR,EAAWvlf,UAAUwrlB,oBAAsB,WACvC7mlB,KAAKm8kB,gBAAkB,GAE3Bv7F,EAAWvlf,UAAU4G,MAAQ,aAGtB2+e,KChiGPC,GAA4B,WAC5B,SAASA,IACL7gf,KAAKysB,KAAO,GACZzsB,KAAKmnlB,gBAAkB,EACvBnnlB,KAAKonlB,SAAU,EAoKnB,OAlKAvmG,EAAWxlf,UAAUkkC,cAAgB,WACjC,MAAO,cAKXshd,EAAWxlf,UAAUoyF,KAAO,SAAU2sZ,EAAQrpR,GAC1C/wN,KAAK0vD,UAAU0qb,GACf,IAAIt6Q,EAAS,IAAIhI,GACjB93N,KAAKo0N,cAAc0L,GACnBA,EAAOryI,KAAKsjI,EAAW,SAK3B8vR,EAAWxlf,UAAUgoO,WAAa,SAAU+2Q,GACxCp6e,KAAK0vD,UAAU0qb,GACf,IAAIt+P,EAAe,IAAIhkB,GACvB93N,KAAKo0N,cAAc0nB,GACnB,IAAI36F,EAAO26F,EAAa9qB,OAExB,OADA8qB,EAAaxpO,UAEN,IAAIswE,QAAQ,SAAUC,EAASC,GAClCD,EAAQs+D,MAGhB0/V,EAAWxlf,UAAUq0D,UAAY,SAAU0qb,GACvC,IAAI55e,EAAW45e,EAAOkV,MAAMhN,iBAAiBvgf,QAC7C/B,KAAK68kB,YAAYr8kB,IAErBqgf,EAAWxlf,UAAUwhlB,YAAc,SAAUr8kB,GACzCR,KAAKQ,SAAWA,EAChBR,KAAK89kB,UAAYt9kB,EAASwlP,UAE9B66P,EAAWxlf,UAAU+4N,cAAgB,SAAU0nB,GAC3C,IAAI42B,OAAUv3Q,EACVonR,EAAeviR,KAAKQ,SAASwlP,SAASvpP,OAAS,EAC/CojlB,GAAgB,EACpB7/kB,KAAKqnlB,sBACL,IAAK,IAAIlrlB,EAAI,EAAGA,GAAKomR,EAAcpmR,IAC/Bu2Q,EAAU1yQ,KAAKQ,SAASwlP,SAAS7pP,GACjC0jlB,EAAiB1jlB,IAAMomR,EACvBviR,KAAKsnlB,UAAUxrW,EAAc42B,EAAQoB,QACrC9zQ,KAAKunlB,aAAazrW,GAClB97O,KAAKwnlB,gBAAgB90U,EAASmtU,GAElC,IAAK,IAAIt8jB,EAAI,EAAGA,GAAKg/P,EAAch/P,IAC/BmvP,EAAU1yQ,KAAKQ,SAASwlP,SAASziO,GACjCvjB,KAAKynlB,oBAAoB3rW,EAAc42B,IAM/CmuO,EAAWxlf,UAAUislB,UAAY,SAAUxrW,EAAc/vO,GAGrD,IAAK,IAFD27kB,EAAiB37kB,EAAKtP,OAAS,EAC/BkrlB,OAAWxslB,EACNgB,EAAI,EAAGA,GAAKurlB,EAAgBvrlB,IAEjC,IADAwrlB,EAAW57kB,EAAK5P,IACHwK,eAAe,WAAY,CACpC,IAAIihlB,EAAcD,IAAa3nlB,KAAKmpiB,SACpCnpiB,KAAK6nlB,eAAe/rW,EAAc6rW,EAAUC,QAG5C5nlB,KAAK8nlB,WAAWhsW,EAAc6rW,IAI1C9mG,EAAWxlf,UAAUwslB,eAAiB,SAAU/rW,EAAc+mQ,EAAW+kG,GACrE,IAAK,IAAIzrlB,EAAI,EAAGA,EAAI0mf,EAAUgrC,QAAQpxhB,OAAQN,IAAK,CAC/C,IAAI0hB,EAAOgle,EAAUgrC,QAAQ1xhB,GACzB0hB,EAAKlX,eAAe,aACpB3G,KAAKonlB,QAA6B,IAAnBvpkB,EAAK0te,UAEf1te,EAAKlX,eAAe,UAAY3G,KAAKonlB,SAC1CpnlB,KAAKqtP,UAAUvR,EAAcj+N,EAAK4O,MAGrCm7jB,GACD5nlB,KAAKunlB,aAAazrW,IAO1B+kQ,EAAWxlf,UAAUyslB,WAAa,SAAUhsW,EAAc77K,GACtD,IAAK,IAAI9jE,EAAI,EAAGA,EAAI8jE,EAAMs4N,KAAK97R,OAAQN,IAEnC,IAAK,IADDukE,EAAMT,EAAMs4N,KAAKp8R,GACZonB,EAAI,EAAGA,EAAIm9C,EAAIoB,MAAMrlE,OAAQ8mB,IAAK,CACvC,IAAI0/C,EAAOvC,EAAIoB,MAAMv+C,GACrBvjB,KAAKsnlB,UAAUxrW,EAAc74K,EAAK6wM,UAO9C+sO,EAAWxlf,UAAUoslB,oBAAsB,SAAU3rW,EAAc42B,GAE3Dj1Q,EADiBi1Q,EAAQ+wO,kBAIxBhmf,EAAkBi1Q,EAAQ+wO,eAAe7+Z,SAC1C5kF,KAAKsnlB,UAAUxrW,EAAc42B,EAAQ+wO,eAAe7+Z,OAAOkvL,QAE3DpB,EAAQ+wO,eAAen2S,QACvBttM,KAAKsnlB,UAAUxrW,EAAc42B,EAAQ+wO,eAAen2S,OAAOwmE,QAE3DpB,EAAQ+wO,eAAeH,YACvBtjf,KAAKsnlB,UAAUxrW,EAAc42B,EAAQ+wO,eAAeH,WAAWxvO,QAE/DpB,EAAQ+wO,eAAeJ,YACvBrjf,KAAKsnlB,UAAUxrW,EAAc42B,EAAQ+wO,eAAeJ,WAAWvvO,QAE/DpB,EAAQ+wO,eAAeF,iBACvBvjf,KAAKsnlB,UAAUxrW,EAAc42B,EAAQ+wO,eAAeF,gBAAgBzvO,QAEpEpB,EAAQ+wO,eAAeD,iBACvBxjf,KAAKsnlB,UAAUxrW,EAAc42B,EAAQ+wO,eAAeD,gBAAgB1vO,UAM5E+sO,EAAWxlf,UAAUmslB,gBAAkB,SAAU90U,EAASwpU,GACtDl8kB,KAAKmnlB,mBAETtmG,EAAWxlf,UAAUkslB,aAAe,SAAUznX,GAC1CA,EAAOtH,UAAU,KAErBqoR,EAAWxlf,UAAUgyP,UAAY,SAAUvtB,EAAQrzM,GAC/CqzM,EAAO/9N,MAAM0qB,IAEjBo0d,EAAWxlf,UAAUgslB,oBAAsB,WACvC,IACI3lL,EADA9xZ,EAAM5P,KAAKQ,SAASwlP,SAASvpP,OAKjC,GAHImT,EAAM,IACN8xZ,EAAM1ha,KAAKQ,SAASwlP,SAASp2O,EAAM,KAElCnS,EAAkBika,GAAM,CAEzB,IAAK,IADDqmL,KACK5rlB,EAAI,EAAGA,EAAIula,EAAI5tJ,OAAOr3Q,OAAQN,IAC/Bula,EAAI5tJ,OAAO33Q,GAAGwK,eAAe,YAC7BohlB,EAAWvjlB,KAAKk9Z,EAAI5tJ,OAAO33Q,IAGnC,IAAI6rlB,EAASD,EAAWtrlB,OACpBurlB,EAAS,IACTholB,KAAKmpiB,SAAW4+C,EAAWC,EAAS,MAOhDnnG,EAAWxlf,UAAUiX,QAAU,WAC3BtS,KAAKQ,cAAWrF,EAChB6E,KAAKmpiB,cAAWhuiB,EAChB6E,KAAK89kB,eAAY3ilB,EACjB6E,KAAKgmP,cAAW7qP,GAEb0lf,KCrKPF,GAA4B,WAI5B,SAASA,EAAW2O,GAEhBtvf,KAAK8riB,aAAU3wiB,EACf6E,KAAKqggB,eAAYllgB,EACjB6E,KAAKo4f,aAAUj9f,EACf6E,KAAKm3iB,sBAAmBh8iB,EACxB6E,KAAKo3iB,oBAAiBj8iB,EACtB6E,KAAKs8Q,WAAQnhR,EACb6E,KAAKo6e,YAASj/e,EACd6E,KAAKQ,cAAWrF,EAChB6E,KAAKiolB,uBAAoB9slB,EACzB6E,KAAKo6e,OAASkV,EA2kBlB,OAzkBA3O,EAAWtlf,UAAUkkC,cAAgB,WACjC,MAAO,cAEXohd,EAAWtlf,UAAU20D,MAAQ,WACzBhwD,KAAKiolB,uBAAoB9slB,EACzB6E,KAAK8riB,aAAU3wiB,EACf6E,KAAKs8Q,WAAQnhR,EACb6E,KAAKQ,cAAWrF,GAMpBwlf,EAAWtlf,UAAUq0D,UAAY,WAC7B,OAAOG,KAAKC,UAAU9vD,KAAK+B,UAK/B4+e,EAAWtlf,UAAUgoO,WAAa,SAAU+2Q,GACxC,IAAIt+P,EAAe,IAAIhkB,GACvBgkB,EAAa/5O,MAAM/B,KAAK0vD,aACxB,IAAIyxF,EAAO26F,EAAa9qB,OAExB,OADA8qB,EAAaxpO,UAEN,IAAIswE,QAAQ,SAAUC,EAASC,GAClCD,EAAQs+D,MAOhBw/V,EAAWtlf,UAAU0G,MAAQ,SAAU+rD,EAAM0oc,EAAas1C,EAASzrC,EAAW4nF,GAS1E,GARIA,IACAjolB,KAAKiolB,mBAAoB,GAE7BjolB,KAAKs8Q,SACLt8Q,KAAKQ,YACLR,KAAKQ,SAASwlP,YACdhmP,KAAKQ,SAASw9e,gBAAkBh+e,KAAK6rf,qBAAqB7rf,KAAKo6e,OAAO4D,iBACtEh+e,KAAKQ,SAASo9e,gBAAkB59e,KAAKkolB,qBAAqBlolB,KAAKo6e,OAAOwD,iBAClE9vb,aAAgBqlc,IAAc24C,aAAmB34C,GAAY,CAE7D,IAAIw7D,EAAY7ggB,EAAK+0b,UACjBslG,EAAUr8C,EAAQjpD,UAClBsV,EAAYw2D,EAAUt6D,eACtB+D,EAAU+vF,EAAQ9zF,eAGlB3hP,GADai8S,EAAUhmE,WACb3of,KAAKoolB,cAAct6hB,EAAK+0b,UAAU8F,aAEhD,GADA3of,KAAKQ,SAASwlP,SAASxhP,KAAKkuQ,GACxBylP,IAAcC,GAAW36f,EAAkB26f,GAC3Cp4f,KAAK8riB,QAAUA,EACf9riB,KAAKqggB,UAAYA,OAIjB,GAAIlI,aAAqBpG,GAAiB,CACtC,IAAIihD,EAAa76C,EAAUsB,oBACvBw5C,EAAW76C,EAAQqB,oBACnBu5C,EAAWljD,cAAgBmjD,EAASnjD,cACpC9vf,KAAKo4f,QAAUA,EACfp4f,KAAKo3iB,eAAiBp3iB,KAAKo4f,QAAQzwL,YAAc3nU,KAAKo4f,QAAQ9D,WAAWn8N,WACzEn4R,KAAKm3iB,iBAAmBh/C,EAAUxwL,kBAItC3nU,KAAKo4f,QAAUA,EAGvB,GAAID,IAAcC,GAAW36f,EAAkB06f,GAAY,CACvD,IAAItV,EAAY7if,KAAKqolB,gBAAgBv6hB,EAAK+0b,WAC1CnwO,EAAQoB,OAAOtvQ,KAAKq+e,GACf7if,KAAK6nlB,eAAe/5hB,EAAK+0b,UAAWA,EAAWnwO,EAAQoB,OAAQhmN,EAAK8jc,aAAc4E,OAItF,CACD,IAAIv2b,EAAQjgE,KAAK+ujB,YAAY52D,EAAUlE,YACvCvhP,EAAQoB,OAAOtvQ,KAAKy7D,GACpBjgE,KAAK8nlB,WAAW3vF,EAAUlE,WAAYh0b,EAAOk4b,EAAUjE,SAAStC,aAAcl/O,EAAQoB,cAI1F,GAAI9zQ,KAAKo6e,OAAOlvQ,MAAMzuO,OAAS,EAAG,CAC9B,IAAIwzJ,EAAOjwJ,KAAKo6e,OAAOlvQ,MAAM,GACzBj7E,EAAKyhW,YAAYj1f,OAAS,GAC1BuD,KAAKsolB,gBAAgBr4b,EAAKyhW,YAAY,GAAI,GAItD1xf,KAAKuolB,YAAYvolB,KAAKo6e,QACtBp6e,KAAKwolB,WAAWxolB,KAAKo6e,QACrB,IAAIh9N,EAAMp9Q,KAAKQ,SAEf,OADAR,KAAKgwD,QACEotN,GAEXujO,EAAWtlf,UAAUitlB,gBAAkB,SAAU3/F,EAAY12e,GACzD,KAAM02e,aAAsBjG,IACxB,OAAO,EAEX,IAAIhwO,EAAU1yQ,KAAKoolB,cAAcz/F,GAGjC,GAFA3of,KAAKQ,SAASwlP,SAASxhP,KAAKkuQ,GAC5B1yQ,KAAKyolB,mBAAmBzolB,KAAKo6e,OAAOqJ,eAAekF,EAAW12e,OAAQygQ,GAClE1yQ,KAAK0olB,WAAW//F,EAAW1F,aAAahxe,GAAQ,EAAGygQ,EAAQoB,QAC3D,OAAO,EAEX,IAAIxrO,EAAOqgd,EACX,GACIA,EAAargd,EACbA,EAAOA,EAAKgqd,yBACPhqd,aAAgBo6c,IAAcp6c,EAAKr2B,QAAU02e,EAAW12e,OACjE,OAAOjS,KAAKsolB,gBAAgBhgjB,EAAMr2B,IAEtC0ue,EAAWtlf,UAAUotlB,mBAAqB,SAAUtlG,EAAKzwO,GACjDj1Q,EAAkB0lf,KAGtBzwO,EAAQ+wO,eAAe7+Z,OAAS5kF,KAAK2olB,kBAAkBxlG,EAAI,IAC3DzwO,EAAQ+wO,eAAen2S,OAASttM,KAAK2olB,kBAAkBxlG,EAAI,IAC3DzwO,EAAQ+wO,eAAeJ,WAAarjf,KAAK2olB,kBAAkBxlG,EAAI,IAC/DzwO,EAAQ+wO,eAAeH,WAAatjf,KAAK2olB,kBAAkBxlG,EAAI,IAC/DzwO,EAAQ+wO,eAAeF,gBAAkBvjf,KAAK2olB,kBAAkBxlG,EAAI,IACpEzwO,EAAQ+wO,eAAeD,gBAAkBxjf,KAAK2olB,kBAAkBxlG,EAAI,MAExExC,EAAWtlf,UAAUstlB,kBAAoB,SAAUh3F,GAC/C,IAAIl0f,EAAkBk0f,GAAtB,CAGA,IAAIoC,KAKJ,OAJIpC,GAAUA,EAAO1O,cAAgB0O,EAAO1O,aAAaxmf,OAAS,IAC9Ds3f,EAAajgP,UACb9zQ,KAAK0olB,WAAW/2F,EAAO/0e,WAAY,EAAGm3e,EAAajgP,SAEhDigP,IAEXpT,EAAWtlf,UAAU+slB,cAAgB,SAAUz/F,GAC3C,IAAIj2O,KAcJ,OAbAA,EAAQiwO,iBACRjwO,EAAQiwO,cAAcjnN,UAAYitN,EAAWhG,cAAcjnN,UAC3DhpB,EAAQiwO,cAAcrjQ,WAAaqpQ,EAAWhG,cAAcrjQ,WAC5DozB,EAAQiwO,cAAcz3P,WAAay9P,EAAWhG,cAAcz3P,WAC5DwnB,EAAQiwO,cAAcv3P,YAAcu9P,EAAWhG,cAAcv3P,YAC7DsnB,EAAQiwO,cAAcx3P,UAAYw9P,EAAWhG,cAAcx3P,UAC3DunB,EAAQiwO,cAAct3P,aAAes9P,EAAWhG,cAAct3P,aAC9DqnB,EAAQiwO,cAAci6B,mBAAqBj0B,EAAWhG,cAAci6B,mBACpElqQ,EAAQiwO,cAAck6B,yBAA2Bl0B,EAAWhG,cAAck6B,yBAC1EnqQ,EAAQiwO,cAAcomC,eAAiBpgC,EAAWhG,cAAcomC,eAChEr2Q,EAAQiwO,cAAcsrB,eAAiBtlB,EAAWhG,cAAcsrB,eAChEv7P,EAAQoB,UACRpB,EAAQ+wO,kBACD/wO,GAEXiuO,EAAWtlf,UAAUqtlB,WAAa,SAAU/2F,EAAQ1/e,EAAO6hQ,GACvD,KAAM69O,aAAkBY,IACpB,OAAO,EAEX,GAAIZ,aAAkB7O,GAAiB,CACnC,IAAID,EAAY7if,KAAKqolB,gBAAgB12F,GAErC,GADA79O,EAAOtvQ,KAAKq+e,GACR7if,KAAK6nlB,eAAel2F,EAAQ9O,EAAW/uO,GACvC,OAAO,MAGV,CACD,IAAIk0P,EAAcrW,EACd1xb,EAAQjgE,KAAK+ujB,YAAY/mD,GAE7B,GADAl0P,EAAOtvQ,KAAKy7D,GACRjgE,KAAK8nlB,WAAW9/E,EAAa/nc,EAAO,EAAG6zM,GACvC,OAAO,EAGf,OAAO,GAEX6sO,EAAWtlf,UAAUutlB,eAAiB,SAAUj3F,EAAQ79O,GACpD,IAAIxrO,EAAOqpd,EAAOW,mBAClB,OAAIhqd,aAAgBiqd,IAAejqd,EAAK46c,gBAAgBjxe,QAAU0/e,EAAOzO,gBAAgBjxe,OAC9EjS,KAAK0olB,WAAW/2F,EAAOW,mBAAoB,EAAGx+O,IAI7D6sO,EAAWtlf,UAAUwslB,eAAiB,SAAU1qF,EAAiBta,EAAW/uO,EAAQ3C,EAAW5zQ,GACvFE,EAAkB0zQ,KAClBA,EAAY,GAEZ1zQ,EAAkBF,KAClBA,EAAQ,GAGZ,IADA,IAAI+qC,EAAO60d,EACJ70d,aAAgBw6c,IAAiB,CACpC,GAAI9if,KAAK6olB,WAAWvgjB,EAAM6oO,EAAW5zQ,EAAOslf,EAAUgrC,SAClD,OAAO,EAEX18Q,EAAY,EACZ5zQ,EAAQ,EAER+qC,GADA60d,EAAkB70d,GACKsqd,gBAE3B,OAAO5yf,KAAK4olB,eAAezrF,EAAiBrpP,IAEhD6sO,EAAWtlf,UAAUytlB,aAAe,SAAUh7hB,EAAM+/d,GAChD,IAAK,IAAI1xhB,EAAI,EAAGA,EAAI2xD,EAAK1zC,SAAS3d,OAAQN,IAAK,CAC3C,IAAI6E,EAAU8sD,EAAK1zC,SAASje,GAC5B,KAAI6E,aAAmB+zf,IAAvB,CAGA,IAAI3vW,EAASplJ,KAAK+olB,YAAY/nlB,GACzBvD,EAAkB2nJ,IACnByoY,EAAQrphB,KAAK4gJ,MAIzBu7V,EAAWtlf,UAAU0tlB,YAAc,SAAU/nlB,GACzC,IAAIokJ,KAoBJ,OAnBAA,EAAO44V,gBAAkBh+e,KAAK6rf,qBAAqB7qf,EAAQg9e,iBACvDh9e,aAAmBsqf,GACnBlmW,EAAOmmW,UAAYvqf,EAAQuqf,UAEtBvqf,aAAmByzf,IACxBrvW,EAAOy1L,YAAc75U,EAAQ65U,YAC7Bz1L,EAAOpvI,MAAQ20e,GAAcQ,oBAAoBnqf,EAAQgV,OACzDovI,EAAOrvI,OAAS40e,GAAcQ,oBAAoBnqf,EAAQ+U,SAErD/U,aAAmB0zf,IACxBtvW,EAAOg6W,aAAep+f,EAAQo+f,aAC9Bh6W,EAAO3tH,KAAOz2B,EAAQy2B,MAEjBz2B,aAAmBwzf,GACxBpvW,EAAO34H,KAAOzrB,EAAQyrB,KAGtB24H,OAASjqJ,EAENiqJ,GAEXu7V,EAAWtlf,UAAUwtlB,WAAa,SAAUhmG,EAAW1xO,EAAWxlQ,EAAQkihB,GAItE,IAAK,IAHDnogB,EAAayrP,EACbunR,EAAe14hB,KAAK8riB,mBAAmB34C,IAAcnzf,KAAK8riB,QAAQjpD,YAAcA,EAChFj9d,EAAW8ygB,EAAe14hB,KAAK8riB,QAAQl6C,aAAe/O,EAAUI,aAAaxmf,OAAS,EACjFN,EAAIupB,EAAYvpB,GAAKypB,EAAUzpB,IAAK,CACzC,IAAIkE,EAAQwif,EAAUI,aAAa9mf,GAC/B6D,KAAK8riB,UAAYzriB,GAAU8wQ,IAAch1Q,GAAgB,IAAXwP,EAC9C3L,KAAKw4N,UAAUn4N,EAAOsL,EAAQkihB,GAG9B7thB,KAAK8olB,aAAazolB,EAAOwthB,GAGjC,OAAO6K,GAEX/3C,EAAWtlf,UAAUm9N,UAAY,SAAU1qK,EAAMniD,EAAQkihB,GAKrD,IAAK,IAJDm7D,EAAQl7hB,IAAS9tD,KAAK8riB,QACtBm9C,GAAU,EACVrlJ,GAAQ,EACRnnc,EAAS,EACJ8mB,EAAI,EAAGA,EAAIuqC,EAAK1zC,SAAS3d,OAAQ8mB,IAAK,CAC3C,IAAIviB,EAAU8sD,EAAK1zC,SAASmJ,GAC5B,KAAIviB,aAAmB+zf,IAAvB,CAGA,IAAI3vW,OAASjqJ,EAIb,GAHAsB,GAAUuE,EAAQvE,OAClBwslB,EAAUxslB,EAASkP,EACnBi4b,EAAQolJ,GAASvslB,GAAUuD,KAAKqggB,UAC3B4oF,EAAL,CAKA,GAFA7jc,EAASplJ,KAAK+olB,YAAY/nlB,GAC1B6shB,EAAQA,EAAQpxhB,QAAU2oJ,EACtB3oJ,EAASkP,GAAUi4b,EAAO,CAC1B,GAAIx+S,EAAOz+I,eAAe,QAAS,CAC/B,IAAI+e,EAAajpB,EAASuE,EAAQvE,OAC9Bm4f,EAAgBjpf,EAAS+Z,EACzBE,EAAWg+a,EAAQ5jc,KAAKqggB,UAAY36e,EAAa1kB,EAAQvE,OAC7D2oJ,EAAO34H,KAAO24H,EAAO34H,KAAKvI,UAAU0we,EAAehve,GAEvDja,GAAU,EAEd,GAAIi4b,EACA,UAIZ+8C,EAAWtlf,UAAUgtlB,gBAAkB,SAAUlrF,GAC7C,IAAIta,KAIJ,OAHAA,EAAUjF,gBAAkB59e,KAAKkolB,qBAAqB/qF,EAAgBvf,iBACtEiF,EAAU7E,gBAAkBh+e,KAAK6rf,qBAAqBsR,EAAgBnf,iBACtE6E,EAAUgrC,WACHhrC,GAKXlC,EAAWtlf,UAAUwwf,qBAAuB,SAAU7vd,EAAQ8vd,GAC1D,IAAI9N,KAKJ,OAJA2M,GAAckB,qBAAqB7N,EAAiB8N,EAAU9vd,GAC1Dh8B,KAAKiolB,oBAAsBn8F,IAC3B9N,EAAgBoxC,aAAepvhB,KAAK6rf,qBAAqB7vd,GAAQ,IAE9Dgid,GAEX2C,EAAWtlf,UAAU6slB,qBAAuB,SAAUlsjB,EAAQ8vd,GAC1D,IAAIlO,KAgBJ,OAfAA,EAAgBqL,WAAa6C,EAAW9vd,EAAOitd,WAAajtd,EAAOn/B,SAAS,cAC5E+gf,EAAgBsL,YAAc4C,EAAW9vd,EAAOktd,YAAcltd,EAAOn/B,SAAS,eAC9E+gf,EAAgBhgQ,gBAAkBkuQ,EAAW9vd,EAAO4hN,gBAAkB5hN,EAAOn/B,SAAS,mBACtF+gf,EAAgBj9c,cAAgBmrd,EAAW9vd,EAAO2E,cAAgB3E,EAAOn/B,SAAS,iBAClF+gf,EAAgBuL,cAAgB2C,EAAW9vd,EAAOmtd,cAAgBntd,EAAOn/B,SAAS,iBAClF+gf,EAAgBwL,aAAe0C,EAAW9vd,EAAOotd,aAAeptd,EAAOn/B,SAAS,gBAChF+gf,EAAgBt9P,YAAcwrQ,EAAW9vd,EAAOskN,YAActkN,EAAOn/B,SAAS,eAC9E+gf,EAAgByL,gBAAkByC,EAAW9vd,EAAOqtd,gBAAkBrtd,EAAOn/B,SAAS,mBACtF+gf,EAAgBmO,UAAatuf,EAAkBu+B,EAAO2nd,gBAAqCxof,EAAxB6gC,EAAO2nd,UAAUlsd,KACpFmmd,EAAgB0L,aAAewC,EAAW9vd,EAAOstd,aAAettd,EAAOn/B,SAAS,gBAChF+gf,EAAgBgG,WAAa5jf,KAAKkplB,gBAAgBltjB,EAAO4nd,WAAYkI,GACrElO,EAAgBoK,KAAOhof,KAAKmplB,UAAUntjB,EAAOgsd,MACzChof,KAAKiolB,oBAAsBn8F,IAC3BlO,EAAgBwxC,aAAepvhB,KAAKkolB,qBAAqBlsjB,GAAQ,IAE9D4hd,GAEX+C,EAAWtlf,UAAU8tlB,UAAY,SAAUhhG,GACvC,KAAI1qf,EAAkB0qf,IAAaA,EAAS1rf,OAAS,GAArD,CAIA,IAAK,IADDurf,KACK7rf,EAAI,EAAGA,EAAIgsf,EAAS1rf,OAAQN,IAAK,CACtC,IAAIqzhB,EAAUrnC,EAAShsf,GACnB23G,KACJA,EAAI5/F,SAAWs7gB,EAAQt7gB,SACvB4/F,EAAI+zY,eAAiB2nC,EAAQ3nC,eAC7B/zY,EAAIg0Y,iBAAmB0nC,EAAQ1nC,iBAC/Bh0Y,EAAIkrZ,UAAYwwB,EAAQxwB,UACxBhX,EAAKxjf,KAAKsvG,GAEd,OAAOk0Y,IAKXrH,EAAWtlf,UAAU6tlB,gBAAkB,SAAUltjB,EAAQ8vd,GACrD,IAAIlI,KACAwlG,EAAcptjB,EAAOn/B,SAAS,UAQlC,OAPKY,EAAkB2rlB,IAAgBA,GAAe,IAClDxlG,EAAWsC,OAASkjG,EACpBxlG,EAAWmD,gBAAkB/qd,EAAOn/B,SAAS,mBACzCmD,KAAKs8Q,MAAM/9Q,QAAQy9B,EAAOkqd,QAAU,GACpClmf,KAAKs8Q,MAAM93Q,KAAKw3B,EAAOkqd,SAGxBtC,GAEXjD,EAAWtlf,UAAUyslB,WAAa,SAAU9/E,EAAa/nc,EAAOhuD,EAAO6hQ,GACnE,IAAI69O,EAASqW,EAAY/kB,aAAahxe,GACtC,GAAI0/e,aAAkBM,IACdjyf,KAAKqplB,SAAS13F,EAAQ1xb,EAAMs4N,MAC5B,OAAO,EAGf,IAAIjwP,EAAO0/d,EACX,GAEI1/d,GADA0/d,EAAc1/d,GACKsqd,sBACdtqd,aAAgBiqd,IACzB,OAAOvyf,KAAK4olB,eAAe5gF,EAAal0P,IAE5C6sO,EAAWtlf,UAAUgulB,SAAW,SAAUnhF,EAAW3vO,GACjD,KAAM2vO,aAAqBjW,IACvB,OAAO,EAEX,IAAIvxb,EAAM1gE,KAAKsplB,UAAUphF,GACzB3vO,EAAK/zR,KAAKk8D,GACV,IAAK,IAAIvkE,EAAI,EAAGA,EAAI+rgB,EAAUjlB,aAAaxmf,OAAQN,IAAK,CACpD,IAAIw1f,EAASuW,EAAUjlB,aAAa9mf,GACpC,GAAIw1f,aAAkBI,IACdmW,EAAUj2f,QAAU0/e,EAAOlxN,WACvBhjS,EAAkBuC,KAAKm3iB,mBAAqBxlD,EAAOhqL,aAAe3nU,KAAKm3iB,oBACvE15iB,EAAkBuC,KAAKo3iB,iBAAmBzlD,EAAOhqL,YAAc3nU,KAAKo3iB,iBACpEp3iB,KAAKuplB,UAAU53F,EAAQjxb,EAAIoB,OAC3B,OAAO,EAKvB,IAAIx5B,EAAO4/d,EACX,GAEI5/d,GADA4/d,EAAY5/d,GACKgqd,yBACZhqd,aAAgB2pd,IAAkB3pd,EAAKr2B,QAAUi2f,EAAUj2f,OACpE,OAAOjS,KAAKqplB,SAAS/gjB,EAAMiwP,IAE/BooN,EAAWtlf,UAAUkulB,UAAY,SAAU/vF,EAAY13b,GACnD,IAAImB,EAAOjjE,KAAKwplB,WAAWhwF,GAE3B,OADA13b,EAAMt9D,KAAKy+D,KACPjjE,KAAK0olB,WAAWlvF,EAAW58e,WAAY,EAAGqmD,EAAK6wM,SAG5C9zQ,KAAKo4f,mBAAmBrG,IAAkB/xf,KAAKo4f,QAAQ9D,aAAekF,EAAWlF,YAE5F3T,EAAWtlf,UAAU0zjB,YAAc,SAAU/mD,GACzC,IAAI/nc,KACJA,EAAMs4N,QACNt4N,EAAMkC,QACN,IAAK,IAAIhmE,EAAI,EAAGA,EAAI6rgB,EAAY1S,YAAYv3b,QAAQthE,OAAQN,IACxD8jE,EAAMkC,KAAKhmE,GAAK6rgB,EAAY1S,YAAYv3b,QAAQ5hE,GAAG6zf,eAKvD,OAHA/vb,EAAM6vb,YAAc9vf,KAAKyplB,iBAAiBzhF,EAAYlY,aACtD7vb,EAAM/tB,YAAc81d,EAAY91d,YAChC+tB,EAAM//B,MAAQ8ne,EAAY9ne,MACnB+/B,GAEX0gb,EAAWtlf,UAAUiulB,UAAY,SAAUphF,GACvC,IAAIxnc,KAGJ,OAFAA,EAAIoB,SACJpB,EAAIy1b,UAAYn2f,KAAK0plB,eAAexhF,EAAU/R,WACvCz1b,GAEXigb,EAAWtlf,UAAUmulB,WAAa,SAAUhwF,GACxC,IAAIv2b,KAIJ,OAHAA,EAAK6wM,UACL7wM,EAAKqxb,WAAat0f,KAAK2plB,gBAAgBnwF,EAAWlF,YAClDrxb,EAAK0kQ,YAAc6xL,EAAW7xL,YACvB1kQ,GAEX09a,EAAWtlf,UAAUuulB,aAAe,SAAUC,GAC1C,IAAI36F,KAIJ,OAHAA,EAAQv9b,gBAAkBk4hB,EAASl4hB,gBACnCu9b,EAAQC,gBAAkB06F,EAAS16F,gBACnCD,EAAQE,aAAey6F,EAASz6F,aACzBF,GAEXvO,EAAWtlf,UAAUyulB,YAAc,SAAUC,GACzC,IAAIzljB,KAOJ,OANAA,EAAO9N,MAAQuzjB,EAAQvzjB,MACvB8N,EAAOq2d,aAAeovF,EAAQpvF,aAC9Br2d,EAAOy8R,UAAYgpR,EAAQhpR,UAC3Bz8R,EAAO8oD,UAAY28f,EAAQ38f,UAC3B9oD,EAAO0N,OAAS+3iB,EAAQ/3iB,OACxB1N,EAAOzG,MAAQksjB,EAAQlsjB,MAChByG,GAEXq8c,EAAWtlf,UAAU2ulB,aAAe,SAAUC,GAC1C,IAAIh1T,KASJ,OARAA,EAAQvoR,IAAM1M,KAAK8plB,YAAYG,EAASv9kB,KACxCuoR,EAAQzoR,KAAOxM,KAAK8plB,YAAYG,EAASz9kB,MACzCyoR,EAAQxoR,MAAQzM,KAAK8plB,YAAYG,EAASx9kB,OAC1CwoR,EAAQtoR,OAAS3M,KAAK8plB,YAAYG,EAASt9kB,QAC3CsoR,EAAQw5N,aAAezuf,KAAK8plB,YAAYG,EAASx7F,cACjDx5N,EAAQy5N,WAAa1uf,KAAK8plB,YAAYG,EAASv7F,YAC/Cz5N,EAAQzmK,WAAaxuH,KAAK8plB,YAAYG,EAASz7d,YAC/CymK,EAAQxmK,SAAWzuH,KAAK8plB,YAAYG,EAASx7d,UACtCwmK,GAEX0rN,EAAWtlf,UAAUsulB,gBAAkB,SAAUO,GAC7C,IAAI51F,KAaJ,OAZAA,EAAWr/N,QAAUj1R,KAAKgqlB,aAAaE,EAAYj1T,SACnDq/N,EAAWpF,QAAUlvf,KAAK4plB,aAAaM,EAAYh7F,SACnDoF,EAAWnpQ,UAAY++V,EAAY/+V,UACnCmpQ,EAAWlpQ,YAAc8+V,EAAY9+V,YACrCkpQ,EAAWppQ,WAAag/V,EAAYh/V,WACpCopQ,EAAWjpQ,aAAe6+V,EAAY7+V,aACtCipQ,EAAWtE,eAAiBk6F,EAAYl6F,eACxCsE,EAAWrE,mBAAqBi6F,EAAYj6F,mBAC5CqE,EAAWj/N,UAAY60T,EAAY70T,UACnCi/N,EAAWn8N,WAAa+xT,EAAY/xT,WACpCm8N,EAAWr9N,QAAUizT,EAAYjzT,QACjCq9N,EAAW5gc,kBAAoBw2hB,EAAYx2hB,kBACpC4gc,GAEX3T,EAAWtlf,UAAUqulB,eAAiB,SAAUS,GAC5C,IAAIh0F,KAYJ,OAXAA,EAAUpgf,OAASo0kB,EAAWp0kB,OAC9Bogf,EAAUxF,sBAAwBw5F,EAAWx5F,sBAC7CwF,EAAU7F,WAAa65F,EAAW75F,WAClC6F,EAAUrqe,SAAWq+jB,EAAWr+jB,SAChCqqe,EAAUlhO,QAAUj1R,KAAKgqlB,aAAaG,EAAWl1T,SACjDkhO,EAAUvF,WAAau5F,EAAWv5F,WAClCuF,EAAUtF,gBAAkBs5F,EAAWt5F,gBACvCsF,EAAUrF,oBAAsBq5F,EAAWr5F,oBAC3CqF,EAAUpF,UAAYo5F,EAAWp5F,UACjCoF,EAAUnF,eAAiBm5F,EAAWn5F,eACtCmF,EAAUlF,mBAAqBk5F,EAAWl5F,mBACnCkF,GAEXxV,EAAWtlf,UAAUoulB,iBAAmB,SAAUW,GAC9C,IAAIt6F,KAYJ,OAXAA,EAAY76N,QAAUj1R,KAAKgqlB,aAAaI,EAAan1T,SACrD66N,EAAYZ,QAAUlvf,KAAK4plB,aAAaQ,EAAal7F,SACrDY,EAAYl5N,YAAcwzT,EAAaxzT,YACvCk5N,EAAY7G,WAAamhG,EAAanhG,WACtC6G,EAAYC,eAAiBq6F,EAAar6F,eAC1CD,EAAY3kQ,UAAYi/V,EAAaj/V,UACrC2kQ,EAAY1kQ,YAAcg/V,EAAah/V,YACvC0kQ,EAAY5kQ,WAAak/V,EAAal/V,WACtC4kQ,EAAYzkQ,aAAe++V,EAAa/+V,aACxCykQ,EAAYE,eAAiBo6F,EAAap6F,eAC1CF,EAAYG,mBAAqBm6F,EAAan6F,mBACvCH,GAEXnP,EAAWtlf,UAAUktlB,YAAc,SAAUnuG,GACzCp6e,KACKQ,SAAS+C,UACd,IAAK,IAAIpH,EAAI,EAAGA,EAAIi+e,EAAO72e,OAAO9G,OAAQN,IACtC6D,KAAKQ,SAAS+C,OAAOiB,KAAKxE,KAAKqqlB,WAAWjwG,EAAO72e,OAAO+oG,QAAQnwG,MAGxEwkf,EAAWtlf,UAAUgvlB,WAAa,SAAU3llB,GACxC,IAAIkohB,KAoBJ,OAnBAA,EAAOn1f,KAAO/yB,EAAM+yB,KACD,cAAf/yB,EAAMgC,OACNkmhB,EAAOlmhB,KAAO,YACdkmhB,EAAOhvC,gBAAkB59e,KAAKkolB,qBAAqBxjlB,EAAMk5e,iBACzDgvC,EAAO5uC,gBAAkBh+e,KAAK6rf,qBAAqBnnf,EAAMs5e,kBAE1C,cAAft5e,EAAMgC,OACNkmhB,EAAOlmhB,KAAO,YACdkmhB,EAAO5uC,gBAAkBh+e,KAAK6rf,qBAAqBnnf,EAAMs5e,kBAExDvgf,EAAkBiH,EAAMoif,WACzB8lC,EAAO9lC,QAAUpif,EAAMoif,QAAQrvd,MAE9Bh6B,EAAkBiH,EAAMyuD,QACzBy5d,EAAOz5d,KAAOzuD,EAAMyuD,KAAK17B,MAExBh6B,EAAkBiH,EAAM4jC,QACzBskf,EAAOtkf,KAAO5jC,EAAM4jC,KAAK7Q,MAEtBm1f,GAEXjsC,EAAWtlf,UAAUmtlB,WAAa,SAAUpuG,GACxC,IAAI+F,KACJngf,KAAKQ,SAAS87Q,SACd,IAAK,IAAIngR,EAAI,EAAGA,EAAIi+e,EAAO99N,MAAM7/Q,OAAQN,IAAK,CAC1C,IAAI0mG,EAAOu3Y,EAAO99N,MAAMngR,GACpB6D,KAAKs8Q,MAAM/9Q,QAAQskG,EAAKqjZ,SAAW,IACnClmf,KAAKQ,SAAS87Q,MAAM93Q,KAAKxE,KAAKsqlB,UAAUznf,IACpCs9Y,EAAc5hf,QAAQskG,EAAKujZ,gBAAkB,GAC7CjG,EAAc37e,KAAKq+F,EAAKujZ,iBAIpCpmf,KAAKQ,SAAS2/e,iBACd,IAAShkf,EAAI,EAAGA,EAAIi+e,EAAO+F,cAAc1jf,OAAQN,IAAK,CAClD,IAAIkqf,EAAejM,EAAO+F,cAAchkf,GACpC6D,KAAKs8Q,MAAM/9Q,QAAQ8nf,EAAaD,iBAAmB,GACnDpmf,KAAKQ,SAAS2/e,cAAc37e,KAAKxE,KAAKuqlB,kBAAkBlkG,MAIpE1F,EAAWtlf,UAAUkvlB,kBAAoB,SAAUC,GAC/C,IAAInkG,KACJA,EAAaD,eAAiBokG,EAAcpkG,eAC5CC,EAAajna,UACb,IAAK,IAAIjjF,EAAI,EAAGA,EAAIqulB,EAAcprgB,OAAO3iF,OAAQN,IAC7Ckqf,EAAajna,OAAOjjF,GAAK6D,KAAKyqlB,eAAeD,EAAcprgB,OAAOjjF,IAEtE,OAAOkqf,GAEX1F,EAAWtlf,UAAUivlB,UAAY,SAAUI,GACvC,IAAI7nf,KAIJ,OAHAA,EAAKujZ,eAAiBskG,EAAMtkG,eAE5BvjZ,EAAKqjZ,OAASwkG,EAAMxkG,OACbrjZ,GAEX89Y,EAAWtlf,UAAUovlB,eAAiB,SAAUE,GAC5C,IAAIriG,KAQJ,OAPAA,EAAUtK,gBAAkBh+e,KAAK6rf,qBAAqB8+F,EAAW3sG,iBACjEsK,EAAU1K,gBAAkB59e,KAAKkolB,qBAAqByC,EAAW/sG,iBACjE0K,EAAUyc,gBAAkB4lF,EAAW5lF,gBACvCzc,EAAUgc,iBAAmBqmF,EAAWrmF,iBACxChc,EAAU0c,aAAe2lF,EAAW3lF,aACpC1c,EAAU2c,aAAe0lF,EAAW1lF,aACpC3c,EAAUtC,QAAU2kG,EAAW3kG,QACxBsC,GAKX3H,EAAWtlf,UAAUiX,QAAU,WAC3BtS,KAAKs8Q,WAAQnhR,EACb6E,KAAK8riB,aAAU3wiB,EACf6E,KAAKqggB,eAAYllgB,EACjB6E,KAAKo6e,YAASj/e,GAEXwlf,KC3lBPO,GAAiC,WAIjC,SAASA,EAAgB9G,GACrB,IAAIr6e,EAAQC,KACZA,KAAK41iB,YAAc,GACnB51iB,KAAK4qlB,mBAAgBzvlB,EACrB6E,KAAK6qlB,sBAAmB1vlB,EACxB6E,KAAK8qlB,sBAAmB3vlB,EACxB6E,KAAK+mhB,aAIL/mhB,KAAK+qlB,gBAAkB,SAAUzulB,GAC7B,GAAsB,KAAlBA,EAAMwrB,QAAV,CAMmB/nB,EAAMuvf,MAAM1/a,UAAUnjD,KAAzC,IACIu+jB,EAAWjrlB,EAAMkrlB,WAAWjulB,MACe,SAA3CgulB,EAAS9mkB,UAAU,EAAG,GAAGtO,gBACzB7V,EAAMkrlB,WAAWjulB,MAAQ,UAAYgulB,GAEf,KAAtBjrlB,EAAM61iB,cACN71iB,EAAMmrlB,eAAelulB,MAAQgulB,GAEjCjrlB,EAAMorlB,kCAbiC,KAA/BprlB,EAAMmrlB,eAAelulB,OAA2C,KAA3B+C,EAAMkrlB,WAAWjulB,OACtD+C,EAAMqrlB,qBAiBlBprlB,KAAKqrlB,oBAAsB,WACvBtrlB,EAAM61iB,YAAc71iB,EAAMmrlB,eAAelulB,MACzC+C,EAAMorlB,+BAKVnrlB,KAAKsrlB,oBAAsB,WACvBvrlB,EAAMqrlB,qBAKVprlB,KAAKurlB,oBAAsB,WACvBxrlB,EAAMuvf,MAAMk8F,OAAOjqgB,OACnBxhF,EAAM0rlB,cAKVzrlB,KAAK0rlB,oBAAsB,WACvB3rlB,EAAMuvf,MAAMpN,cACZnif,EAAMgnhB,aACN,IAAK,IAAI5qhB,EAAI,EAAGA,EAAI4D,EAAMuvf,MAAMy3B,UAAUzphB,KAAKb,OAAQN,IAAK,CACxD,IAAIwrhB,EAAW5nhB,EAAMuvf,MAAMy3B,UAAUzphB,KAAKnB,GACZ,IAA1BwrhB,EAASpphB,QAAQ,MACjBwB,EAAMgnhB,UAAUvihB,KAAKmjhB,GAG7B,IAAIl8B,EAAa1rf,EAAMuvf,MAAM1/a,UAAU40b,oBACvC,GAAK/mgB,EAAkBguf,GAcnB1rf,EAAM61iB,YAAc71iB,EAAMuvf,MAAM1/a,UAAUquD,SAAQ,GACxB,KAAtBl+H,EAAM61iB,eACyD,IAA3D71iB,EAAM61iB,YAAYr3iB,QAAQ2qB,OAAOC,aAAa,UACT,IAArCppB,EAAM61iB,YAAYr3iB,QAAQ,QAA0D,IAAzCwB,EAAM61iB,YAAY/8c,YAAY,QACnB,IAAlD94F,EAAM61iB,YAAYv0iB,MAAM,GAAI,GAAG9C,QAAQ,OAC3CwB,EAAMmrlB,eAAelulB,MAAQ,4BAC7B+C,EAAMmrlB,eAAehte,UAAW,GAGhCn+G,EAAMmrlB,eAAelulB,MAAQ+C,EAAM61iB,iBAvBX,CAChC,IAAKn4iB,EAAkBguf,EAAWsS,gBAAiB,CAC/C,IAEI0uD,EAAW1sjB,EAAMuvf,MAAM1/a,UAAU8le,wBAAwBjqD,EAAWsS,eAAejwc,KAAK+0b,UAAW4I,EAAWsS,eAAgBtS,EAAWD,UAAU,OAF1Irwf,GAGb4E,EAAM61iB,YAAc6W,EAAS7W,YAC7B71iB,EAAMmrlB,eAAehte,SAAWuuc,EAAS9W,cAE7C51iB,EAAMmrlB,eAAelulB,MAAQ+C,EAAM61iB,YACnC,IAAIzif,EAAOpzD,EAAMuvf,MAAM1/a,UAAUm0d,YAAYt4C,GAC7C1rf,EAAMkrlB,WAAWjulB,MAAQ+C,EAAM6qlB,cAAgBz3hB,EAC/CpzD,EAAMuvf,MAAMk8F,OAAO5mgB,OAAS7kF,EAAM4rlB,SAAS53gB,YAAY,kBAgB3Dh0E,EAAM6rlB,YAAYlnlB,MAAM4xC,QAAU,OAClCv2C,EAAM8rlB,YAAYnnlB,MAAM4xC,QAAU,QAClCv2C,EAAMkrlB,WAAWvmlB,MAAM4xC,QAAU,QACjCv2C,EAAM+qlB,iBAAiBt4kB,SAAU,EACjCzS,EAAM8qlB,iBAAiBtnhB,WAAaxjE,EAAMuvf,MAAMy3B,UAAUzphB,KAC1DyC,EAAM+rlB,aAAetrlB,SAASkN,uBAAuB,kBAAkB,GACvE3N,EAAMorlB,8BACNprlB,EAAMkrlB,WAAW/olB,QACiC,SAA9CnC,EAAMuvf,MAAM1/a,UAAU+yb,MAAMj+f,MAAM4xC,UAClCv2C,EAAMuvf,MAAM1/a,UAAU+yb,MAAMj+f,MAAM4xC,QAAU,SAMpDt2C,KAAK+rlB,qBAAuB,WACxBhslB,EAAM0rlB,aACN1rlB,EAAMuvf,MAAMpN,eAGhBlif,KAAKgslB,oBAAsB,SAAU/rlB,GAC7BA,EAAKuS,SACLzS,EAAM6rlB,YAAYlnlB,MAAM4xC,QAAU,QAClCv2C,EAAM8qlB,iBAAiBtnhB,WAAaxjE,EAAMgnhB,UAC1ChnhB,EAAM8rlB,YAAYnnlB,MAAM4xC,QAAU,OAClCv2C,EAAMkrlB,WAAWvmlB,MAAM4xC,QAAU,SAGjCv2C,EAAM6rlB,YAAYlnlB,MAAM4xC,QAAU,OAClCv2C,EAAM8rlB,YAAYnnlB,MAAM4xC,QAAU,QAClCv2C,EAAMkrlB,WAAWvmlB,MAAM4xC,QAAU,UAGzCt2C,KAAKislB,iBAAmB,SAAUhslB,GACO,KAAjCF,EAAM8qlB,iBAAiB7tlB,QACvB+C,EAAM+rlB,aAAa5te,UAAW,IAGtCl+G,KAAKsvf,MAAQlV,EAsJjB,OAjJA8G,EAAgB7lf,UAAUkkC,cAAgB,WACtC,MAAO,mBAKX2hd,EAAgB7lf,UAAU2gf,oBAAsB,SAAUqmB,GACtD,IACI/+f,EAAKtD,KAAKsvf,MAAMA,MAAMh9W,YAAc,oBACxCtyI,KAAKmH,OAAShG,EAAc,OAASmC,GAAIA,EAAID,UAAW,mBACxD,IAAIoX,EAAYtZ,EAAc,OAC1By0iB,EAAcz0iB,EAAc,OAASkC,UAAW,2BAA4BrB,UAAWqggB,EAAWtub,YAAY,qBAClH/zE,KAAKkrlB,eAAiB/plB,EAAc,SAAWmC,GAAItD,KAAKsvf,MAAMA,MAAMh9W,YAAc,gBAAiBjvI,UAAW,qCAC9GrD,KAAKkrlB,eAAexulB,iBAAiB,QANtBsD,KAMwCqrlB,qBACvD5wkB,EAAU9Y,YAAYi0iB,GACtBn7hB,EAAU9Y,YAAY3B,KAAKkrlB,gBAC3BlrlB,KAAK6rlB,YAAc1qlB,EAAc,OAASkC,UAAW,2BAA4BrB,UAAWqggB,EAAWtub,YAAY,aACnH/zE,KAAKirlB,WAAa9plB,EAAc,SAAWmC,GAAItD,KAAKsvf,MAAMA,MAAMh9W,YAAc,YAAajvI,UAAW,mCAAoCI,OAASyolB,UAAW,UAC9JlslB,KAAKirlB,WAAWvulB,iBAAiB,QAXlBsD,KAWoC+qlB,iBACnD/qlB,KAAKirlB,WAAWvulB,iBAAiB,QAZlBsD,KAYoC+qlB,iBACnDtwkB,EAAU9Y,YAAY3B,KAAK6rlB,aAC3BpxkB,EAAU9Y,YAAY3B,KAAKirlB,YAC3BjrlB,KAAK4rlB,YAAczqlB,EAAc,OAASoC,OAAQ,kBAClD,IAAI4olB,EAAehrlB,EAAc,OAASkC,UAAW,2BAA4BrB,UAAWqggB,EAAWtub,YAAY,cAC/Gq4gB,EAAsBjrlB,EAAc,OAASkC,UAAW,gCAExDgplB,EAAgBlrlB,EAAc,SAAWmC,GAAI,sCACjD8olB,EAAoBzqlB,YAAY0qlB,GAEhCrslB,KAAK6qlB,iBAAmB,IAAIp3H,IAAelwZ,cAAgBnjD,OAAQpgB,KAAKislB,iBAAkBpkY,YAAa,QAAS7xM,MAAO,QAASi6c,kBAAmBoyC,EAAWtub,YAAY,wBAC1K/zE,KAAK6qlB,iBAAiBx0iB,SAASg2iB,GAC/BrslB,KAAK4rlB,YAAYjqlB,YAAYwqlB,GAC7BnslB,KAAK4rlB,YAAYjqlB,YAAYyqlB,GAC7B3xkB,EAAU9Y,YAAY3B,KAAK4rlB,aAE3B,IAAIU,EAAmBnrlB,EAAc,OAASkC,UAAW,2DACrDkplB,EAAgBprlB,EAAc,SAAWsC,OAASiD,KAAM,YAAcpD,GAAItD,KAAKmH,OAAO7D,GAAK,YAAaD,UAAWrD,KAAKmH,OAAO7D,GAAK,mBACxIgplB,EAAiB3qlB,YAAY4qlB,GAC7BvslB,KAAK8qlB,iBAAmB,IAAIjse,IAAWxrG,MAAOgvf,EAAWtub,YAAY,iBAAkB3zD,OAAQpgB,KAAKgslB,sBACpGhslB,KAAK8qlB,iBAAiBz0iB,SAASk2iB,GAC/B9xkB,EAAU9Y,YAAY2qlB,GACtBtslB,KAAKmH,OAAOxF,YAAY8Y,IAK5Byme,EAAgB7lf,UAAU4oH,KAAO,WAC7BjkH,KAAK2rlB,SAAW,IAAIn0e,GAAK,iBAAkBx3G,KAAKsvf,MAAMA,MAAM3xE,eAC5D39a,KAAK2rlB,SAASh0e,UAAU33G,KAAKsvf,MAAMA,MAAMthf,QACzCL,GAAW3N,KAAKsvf,MAAMA,MAAMthf,QACvBhO,KAAKmH,QACNnH,KAAKg8e,oBAAoBh8e,KAAK2rlB,UAElC3rlB,KAAKsvf,MAAMk8F,OAAO5mgB,OAAS5kF,KAAK2rlB,SAAS53gB,YAAY,oBACrD/zE,KAAKsvf,MAAMk8F,OAAOz1kB,OAAS,OAC3B/V,KAAKsvf,MAAMk8F,OAAOx1kB,MAAQ,OAC1BhW,KAAKsvf,MAAMk8F,OAAOpxjB,QAAUp6B,KAAKmH,OACjCnH,KAAKsvf,MAAMk8F,OAAOrle,UACVE,MAAOrmH,KAAKsrlB,oBACZlle,aAAehsF,QAASp6B,KAAK2rlB,SAAS53gB,YAAY,MAAO9gE,SAAU,wBAAyB+qG,WAAW,KAGvGqI,MAAOrmH,KAAKurlB,oBACZnle,aAAehsF,QAASp6B,KAAK2rlB,SAAS53gB,YAAY,UAAW9gE,SAAU,2BAE/EjT,KAAKsvf,MAAMk8F,OAAO5/hB,WAClB5rD,KAAKsvf,MAAMk8F,OAAOr1iB,WAAan2C,KAAK0rlB,oBACpC1rlB,KAAKsvf,MAAMk8F,OAAOvplB,MAAQjC,KAAK+rlB,qBAC/B/rlB,KAAKsvf,MAAMk8F,OAAOvne,QAKtBi9X,EAAgB7lf,UAAUkmF,KAAO,WAC7BvhF,KAAK+rlB,wBAET7qG,EAAgB7lf,UAAU8vlB,4BAA8B,WAC/C1tlB,EAAkBuC,KAAK8rlB,gBAExB9rlB,KAAK8rlB,aAAa5te,SAAsC,KAA1Bl+G,KAAKirlB,WAAWjulB,OAA8C,KAA9BgD,KAAKkrlB,eAAelulB,QAM1Fkkf,EAAgB7lf,UAAU+vlB,kBAAoB,WAC1C,IAAIx1C,EAAc51iB,KAAKkrlB,eAAelulB,MAAMkT,OACxCs8kB,EAAUxslB,KAAKirlB,WAAWjulB,MAAMkT,OAChCw7iB,GAAa,EAKjB,GAJKjujB,EAAkBuC,KAAK6qlB,iBAAiB7tlB,QAA0C,KAAhCgD,KAAK6qlB,iBAAiB7tlB,QACzEwvlB,EAAUxslB,KAAK6qlB,iBAAiB7tlB,MAChC0ujB,GAAa,GAED,KAAZ8gC,EAAJ,CAUA,GALI52C,EADgB,KAAhBA,GAAkC,KAAZ42C,EACRA,EAGAxslB,KAAKkrlB,eAAelulB,MAEjCS,EAAkBuC,KAAK4qlB,eAGvB,CACD,IAAIrmlB,EAASvE,KAAKsvf,MAAM1/a,UAAUnjD,OAASmphB,IAAgB51iB,KAAKkrlB,eAAehte,SAC/El+G,KAAKsvf,MAAMA,MAAM5U,aAAamxE,gBAAgB2gC,EAAS52C,EAAarxiB,EAAQmnjB,QAJ5E1rjB,KAAKsvf,MAAMA,MAAM5U,aAAaspB,cAAchkgB,KAAKsvf,MAAM1/a,UAAW48gB,EAAS52C,EAAa8V,GAM5F1rjB,KAAKsvf,MAAMk8F,OAAOjqgB,OAClBvhF,KAAK4qlB,mBAAgBzvlB,OAjBjB6E,KAAKsvf,MAAMk8F,OAAOjqgB,QAuB1B2/Z,EAAgB7lf,UAAUowlB,WAAa,WACnCzrlB,KAAKkrlB,eAAelulB,MAAQ,GAC5BgD,KAAKirlB,WAAWjulB,MAAQ,GACxBgD,KAAK41iB,YAAc,GACnB51iB,KAAKkrlB,eAAehte,UAAW,EAC/Bl+G,KAAK+mhB,cAKT7lC,EAAgB7lf,UAAUiX,QAAU,WAC5BtS,KAAKkrlB,iBACLlrlB,KAAKkrlB,eAAelplB,UAAY,GAChChC,KAAKkrlB,oBAAiB/vlB,GAEtB6E,KAAKirlB,aACLjrlB,KAAKirlB,WAAW52kB,cAAc/O,YAAYtF,KAAKirlB,YAC/CjrlB,KAAKirlB,gBAAa9vlB,GAEtB6E,KAAKsvf,WAAQn0f,EACRsC,EAAkBuC,KAAKmH,UACpBnH,KAAKmH,OAAOkN,eACZrU,KAAKmH,OAAOkN,cAAc/O,YAAYtF,KAAKmH,QAE/CnH,KAAKmH,OAAOnF,UAAY,GACxBhC,KAAKmH,YAAShM,IAGf+lf,KCzRPC,GAA6B,WAI7B,SAASA,EAAY/G,GACjB,IAAIr6e,EAAQC,KAIZA,KAAKyslB,iBAAmB,SAAUnwlB,GACR,KAAlBA,EAAMwrB,SAC2B,KAA7B/nB,EAAM2slB,aAAa1vlB,OAAgD,KAAhC+C,EAAM4slB,gBAAgB3vlB,OACzD+C,EAAM6slB,sBAOlB5slB,KAAKurlB,oBAAsB,WACvBxrlB,EAAMuvf,MAAMk8F,OAAOjqgB,QAKvBvhF,KAAK4slB,mBAAqB,WACtB,IAAI3wT,EAAWl8R,EAAM8slB,gBAAgB7vlB,MACjC84U,EAAc/1U,EAAM+slB,kBAAkB9vlB,MACpCS,EAAkBw+R,IAAax+R,EAAkBq4U,IACnD/1U,EAAMuvf,MAAMA,MAAMuT,OAAOiB,YAAY7nO,EAAU65C,GAEnD/1U,EAAMuvf,MAAMk8F,OAAOjqgB,QAEvBvhF,KAAKsvf,MAAQlV,EA2HjB,OAzHA+G,EAAY9lf,UAAUkkC,cAAgB,WAClC,MAAO,eAKX4hd,EAAY9lf,UAAUohf,gBAAkB,SAAU4lB,GAC9C,IACI/+f,EAAKtD,KAAKsvf,MAAMA,MAAMh9W,YAAc,gBACxCtyI,KAAKmH,OAAShG,EAAc,OAASmC,GAAIA,EAAID,UAAW,sBACxD,IAAIkmd,EAAYpod,EAAc,OAC1B4rlB,EAAkB5rlB,EAAc,OAChCkC,UAAW,mCAAoCrB,UAAWqggB,EAAWtub,YAAY,iBAEjFi5gB,EAAc7rlB,EAAc,OAASkC,UAAW,gCACpDrD,KAAK2slB,gBAAkBxrlB,EAAc,SACjCsC,OAASiD,KAAM,QAAUpD,GAAItD,KAAKsvf,MAAMA,MAAMh9W,YAAc,YAEhE06c,EAAYrrlB,YAAY3B,KAAK2slB,iBAC7B,IAAIM,EAAe9rlB,EAAc,OAC7BkC,UAAW,mCAAoCrB,UAAWqggB,EAAWtub,YAAY,cAEjFm5gB,EAAW/rlB,EAAc,OAASkC,UAAW,gCACjDrD,KAAK0slB,aAAevrlB,EAAc,SAC9BsC,OAASiD,KAAM,QAAUpD,GAAItD,KAAKsvf,MAAMA,MAAMh9W,YAAc,QAEhE46c,EAASvrlB,YAAY3B,KAAK0slB,cAC1BnjI,EAAU5nd,YAAYorlB,GACtBxjI,EAAU5nd,YAAYqrlB,GACtBzjI,EAAU5nd,YAAYsrlB,GACtB1jI,EAAU5nd,YAAYurlB,GACtBltlB,KAAKmH,OAAOxF,YAAY4nd,GACxBvpd,KAAK2slB,gBAAgBjwlB,iBAAiB,QAzBvBsD,KAyByCyslB,kBACxDzslB,KAAK0slB,aAAahwlB,iBAAiB,QA1BpBsD,KA0BsCyslB,kBACrDzslB,KAAK6slB,gBAAkB,IAAIh1d,IACvB77F,OAAQ,IACRh/B,MAAO,EACP+iB,IAAK,EACLzT,IAAK,MACLs/F,mBAAmB,IAEvB5rG,KAAK6slB,gBAAgBx2iB,SAASr2C,KAAK0slB,cACnC1slB,KAAK8slB,kBAAoB,IAAIj1d,IACzB77F,OAAQ,IACRh/B,MAAO,EACP+iB,IAAK,EACLzT,IAAK,GACLs/F,mBAAmB,IAEvB5rG,KAAK8slB,kBAAkBz2iB,SAASr2C,KAAK2slB,kBAKzCxrG,EAAY9lf,UAAU4oH,KAAO,WACzB,IAAIo+Y,EAAa,IAAI7qZ,GAAK,iBAAkBx3G,KAAKsvf,MAAMA,MAAM3xE,eAC7D0kF,EAAW1qZ,UAAU33G,KAAKsvf,MAAMA,MAAMthf,QACtCL,GAAW3N,KAAKsvf,MAAMA,MAAMthf,QACvBhO,KAAKmH,QACNnH,KAAKy8e,gBAAgB4lB,GAEwB,SAA7CrigB,KAAKsvf,MAAM1/a,UAAU+yb,MAAMj+f,MAAM4xC,UACjCt2C,KAAKsvf,MAAM1/a,UAAU+yb,MAAMj+f,MAAM4xC,QAAU,QAE/Ct2C,KAAKsvf,MAAMk8F,OAAO5mgB,OAASy9a,EAAWtub,YAAY,gBAClD/zE,KAAKsvf,MAAMk8F,OAAOz1kB,OAAS,OAC3B/V,KAAKsvf,MAAMk8F,OAAOx1kB,MAAQ,OAC1BhW,KAAKsvf,MAAMk8F,OAAOpxjB,QAAUp6B,KAAKmH,OACjCnH,KAAKsvf,MAAMk8F,OAAOr1iB,WAAan2C,KAAKsvf,MAAMpN,YAC1Clif,KAAKsvf,MAAMk8F,OAAOrle,UACVE,MAAOrmH,KAAK4slB,mBACZxme,aAAehsF,QAASioe,EAAWtub,YAAY,MAAO9gE,SAAU,oBAAqB+qG,WAAW,KAGhGqI,MAAOrmH,KAAKurlB,oBACZnle,aAAehsF,QAASioe,EAAWtub,YAAY,UAAW9gE,SAAU,2BAE5EjT,KAAK6slB,gBAAgB7vlB,MAAQ,EAC7BgD,KAAK8slB,kBAAkB9vlB,MAAQ,EAC/BgD,KAAKsvf,MAAMk8F,OAAOvplB,MAAQjC,KAAKsvf,MAAMpN,YACrClif,KAAKsvf,MAAMk8F,OAAO5/hB,WAClB5rD,KAAKsvf,MAAMk8F,OAAOvne,QAKtBk9X,EAAY9lf,UAAUiX,QAAU,WAwB5B,GAvBItS,KAAK2slB,kBACD3slB,KAAK2slB,gBAAgBt4kB,eACrBrU,KAAK2slB,gBAAgBt4kB,cAAc/O,YAAYtF,KAAK2slB,iBAExD3slB,KAAK2slB,qBAAkBxxlB,GAEvB6E,KAAK0slB,eACD1slB,KAAK0slB,aAAar4kB,eAClBrU,KAAK0slB,aAAar4kB,cAAc/O,YAAYtF,KAAK0slB,cAErD1slB,KAAK0slB,kBAAevxlB,GAEpB6E,KAAK8slB,oBACL9slB,KAAK8slB,kBAAkBx6kB,UACvBtS,KAAK8slB,uBAAoB3xlB,GAEzB6E,KAAK6slB,kBACL7slB,KAAK6slB,gBAAgBv6kB,UACrBtS,KAAK6slB,qBAAkB1xlB,GAE3B6E,KAAK2slB,qBAAkBxxlB,EACvB6E,KAAK0slB,kBAAevxlB,EACpB6E,KAAKsvf,WAAQn0f,GACRsC,EAAkBuC,KAAKmH,QAAS,CAC7BnH,KAAKmH,OAAOkN,eACZrU,KAAKmH,OAAOkN,cAAc/O,YAAYtF,KAAKmH,QAE/C,IAAK,IAAIhL,EAAI,EAAGA,EAAI6D,KAAKmH,OAAOoK,WAAW9U,OAAQN,IAC/C6D,KAAKmH,OAAO7B,YAAYtF,KAAKmH,OAAOoK,WAAWpV,IAC/CA,IAEJ6D,KAAKmH,YAAShM,IAGfgmf,KC3JPC,GAAgC,WAIhC,SAASA,EAAehH,GACpB,IAAIr6e,EAAQC,KACZA,KAAKmtlB,YAAc,WACfptlB,EAAMuvf,MAAMA,MAAM5U,aAAa6nF,eAAexikB,EAAMqtlB,aAAapwlB,OACjE+C,EAAMuvf,MAAMk8F,OAAOjqgB,QAGvBvhF,KAAKqtlB,cAAgB,SAAUptlB,GAC3BF,EAAMqtlB,aAAapwlB,MAAQiD,EAAKwsB,KAEhC,IAAIzvB,EAAQwD,SAASosB,eAAe,qBACpC5vB,EAAM+oB,kBAAkB,EAAG9lB,EAAKwsB,KAAKhwB,QACrCO,EAAMkF,SAEVlC,KAAKstlB,aAAe,WAChBvtlB,EAAMuvf,MAAM1/a,UAAUmpe,eAAeh5iB,EAAMqtlB,aAAapwlB,QAE5DgD,KAAK2ikB,eAAiB,WAClB5ikB,EAAMuvf,MAAMA,MAAM5U,aAAaioF,eAAe5ikB,EAAMqtlB,aAAapwlB,OACjE+C,EAAMkkH,QAEVjkH,KAAKsvf,MAAQlV,EAqGjB,OAhGAgH,EAAe/lf,UAAUkkC,cAAgB,WACrC,MAAO,kBAKX6hd,EAAe/lf,UAAUkylB,mBAAqB,SAAUlrF,EAAY0kB,GAChE,IACIzjhB,EAAKtD,KAAKsvf,MAAMA,MAAMh9W,YAAc,mBACxCtyI,KAAKmH,OAAShG,EAAc,OAASmC,GAAIA,EAAID,UAAW,kBACxD,IACImqlB,EAAYrslB,EAAc,OAASa,UADrBqggB,EAAWtub,YAAY,kBACsB1wE,UAAW,yBAC1ErD,KAAKmH,OAAOxF,YAAY6rlB,GACxB,IAAIC,EAAYtslB,EAAc,OAASkC,UAAW,sBAClDrD,KAAKmH,OAAOxF,YAAY8rlB,GACxB,IAAIjjI,EAAYrpd,EAAc,OAASkC,UAAW,oBAClDoqlB,EAAU9rlB,YAAY6od,GACtB,IAAIkjI,EAAavslB,EAAc,OAASkC,UAAW,0BACnDmnd,EAAU7od,YAAY+rlB,GAEtB1tlB,KAAKotlB,aAAejslB,EAAc,SAAWkC,UAAW,mCAAoCC,GAAI,sBAChGtD,KAAKotlB,aAAa5plB,aAAa,OAAQ,QACvCkqlB,EAAW/rlB,YAAY3B,KAAKotlB,cAC5B,IAAIO,EAAcxslB,EAAc,OAASkC,UAAW,yBAA0BC,GAAI,sBAClFknd,EAAU7od,YAAYgslB,GACX3tlB,KAAKsvf,MAAMy3B,UAAUzphB,KAChC0C,KAAK4tlB,iBAAmB,IAAIzxZ,IACxB54H,WAAYwjd,EACZ9zgB,SAAU,wBAEdjT,KAAK4tlB,iBAAiBv3iB,SAASs3iB,GAC/B3tlB,KAAK4tlB,iBAAiBlxlB,iBAAiB,SAAUsD,KAAKqtlB,eACtD,IAAIQ,EAAY1slB,EAAc,OAASkC,UAAW,sBAClDoqlB,EAAU9rlB,YAAYkslB,GACtB,IAAIC,EAAe3slB,EAAc,OAASkC,UAAW,yBACrDwqlB,EAAUlslB,YAAYmslB,GACtB,IAAIC,EAAmB5slB,EAAc,UAAYa,UAAW,MAAOsB,GAAI,QACvEwqlB,EAAanslB,YAAYoslB,GACT,IAAIhwe,IAAS9qG,SAAU,oBAC7BojC,SAAS03iB,GACnBA,EAAiBrxlB,iBAAiB,QAASsD,KAAKmtlB,aAChD,IAAIa,EAAkB7slB,EAAc,OAASkC,UAAW,4BACxDwqlB,EAAUlslB,YAAYqslB,GACtB,IAAIC,EAAsB9slB,EAAc,UAAYa,UAAW,SAAUsB,GAAI,WAC7E0qlB,EAAgBrslB,YAAYsslB,GACT,IAAIlwe,IAAS9qG,SAAU,oBAC7BojC,SAAS43iB,GACtBA,EAAoBvxlB,iBAAiB,QAASsD,KAAK2ikB,gBACnD,IAAIurB,EAAgB/slB,EAAc,OAASkC,UAAW,0BACtDwqlB,EAAUlslB,YAAYuslB,GACtB,IAAIC,EAAoBhtlB,EAAc,UAAYa,UAAW,QAASsB,GAAI,SAC1E4qlB,EAAcvslB,YAAYwslB,GACT,IAAIpwe,IAAS9qG,SAAU,oBAC7BojC,SAAS83iB,GACpBA,EAAkBzxlB,iBAAiB,QAASsD,KAAKstlB,eAKrDlsG,EAAe/lf,UAAU4oH,KAAO,WAC5B,IAAI8ia,EAAY/mhB,KAAKsvf,MAAMm4B,eACvBkkE,EAAW,IAAIn0e,GAAK,iBAAkBx3G,KAAKsvf,MAAMA,MAAM3xE,eAC3DguK,EAASh0e,UAAU33G,KAAKsvf,MAAMA,MAAMthf,QACpCL,GAAW3N,KAAKsvf,MAAMA,MAAMthf,QAE5BhO,KAAKutlB,mBAAmB5B,EAAU5kE,GAElC/mhB,KAAKsvf,MAAMk8F,OAAO5mgB,OAAS,WAC3B5kF,KAAKsvf,MAAMk8F,OAAOz1kB,OAAS,OAC3B/V,KAAKsvf,MAAMk8F,OAAOx1kB,MAAQ,OAC1BhW,KAAKsvf,MAAMk8F,OAAOpxjB,QAAUp6B,KAAKmH,OACjCnH,KAAKsvf,MAAMk8F,OAAOr1iB,WAAan2C,KAAKsvf,MAAMpN,YAC1Clif,KAAKsvf,MAAMk8F,OAAOvplB,MAAQjC,KAAKsvf,MAAMpN,YACrClif,KAAKsvf,MAAMk8F,OAAOrle,UACVE,MAAOrmH,KAAKoulB,cAAc9ylB,KAAK0E,MAC/BomH,aAAehsF,QAASuxjB,EAAS53gB,YAAY,UAAW9gE,SAAU,wBAAyB+qG,WAAW,KAE9Gh+G,KAAKsvf,MAAMk8F,OAAO5/hB,WAClB5rD,KAAKsvf,MAAMk8F,OAAOvne,QAEtBm9X,EAAe/lf,UAAU+ylB,cAAgB,WACrCpulB,KAAKsvf,MAAMk8F,OAAOjqgB,QAKtB6/Z,EAAe/lf,UAAUiX,QAAU,WAC3BtS,KAAKotlB,eACLptlB,KAAKotlB,aAAa7olB,SAClBvE,KAAKotlB,kBAAejylB,GAEpB6E,KAAK4tlB,mBACL5tlB,KAAK4tlB,iBAAiBt7kB,UACtBtS,KAAK4tlB,sBAAmBzylB,IAGzBimf,KC5HPC,GAAuC,WAIvC,SAASA,EAAsBjH,GAC3B,IAAIr6e,EAAQC,KAIZA,KAAKqulB,yBAA2B,WAC5BtulB,EAAMuvf,MAAMpN,cACZnif,EAAMs5U,WAAW7mU,SAAU,EAC3BzS,EAAMwnkB,WAAWrpd,UAAW,EAC5Bn+G,EAAMwnkB,WAAW/0jB,SAAU,EAC3BzS,EAAMi/f,UAAU/5e,SAAU,EAC1BllB,EAAMmzD,UAAU1gD,SAAU,EAC1BzS,EAAM2E,MAAM8N,SAAU,EACtBzS,EAAM6nhB,QAAQp1gB,SAAU,EACxBzS,EAAM6nhB,QAAQ1pa,UAAW,EACzBn+G,EAAMuulB,UAAUrpkB,SAAU,GAK9BjlB,KAAKuulB,0BAA4B,WAC7BxulB,EAAMyulB,0BACNzulB,EAAMuvf,MAAMpN,eAKhBlif,KAAKurlB,oBAAsB,WACvBxrlB,EAAMuvf,MAAMk8F,OAAOjqgB,OACnBxhF,EAAMyulB,2BAGVxulB,KAAKqtlB,cAAgB,SAAUptlB,GAC3BF,EAAMqtlB,aAAapwlB,MAAQiD,EAAKwsB,KAEhC,IAAIzvB,EAAQwD,SAASosB,eAAe,WACpC5vB,EAAM+oB,kBAAkB,EAAG9lB,EAAKwsB,KAAKhwB,QACrCO,EAAMkF,SAEVlC,KAAKq+e,gBAAkB,WACd5gf,EAAkBsC,EAAMuvf,MAAMA,MAAM5S,oBACrC38e,EAAMuvf,MAAMA,MAAM5S,kBAAkBz4X,KAAKlkH,EAAMqtlB,aAAapwlB,QAGpEgD,KAAKyulB,qBAAuB,SAAUnylB,GAClC,IACIy2B,KACJ,OAFaz2B,EAAMU,OAGf,KAAK,EACD+1B,GAAU,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MACzDhzB,EAAM2ulB,cAAc37jB,GACpB,MACJ,KAAK,EACDA,GAAU,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MACxDhzB,EAAM2ulB,cAAc37jB,GACpB,MACJ,KAAK,EACDA,GAAU,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,MACvDhzB,EAAM2ulB,cAAc37jB,GACpB,MACJ,KAAK,EACDA,GAAU,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,MACtDhzB,EAAM2ulB,cAAc37jB,GACpB,MACJ,KAAK,EACDA,GAAU,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,MACrDhzB,EAAM2ulB,cAAc37jB,GACpB,MACJ,KAAK,EACDA,GAAU,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,MACpDhzB,EAAM2ulB,cAAc37jB,GACpB,MACJ,KAAK,EACDA,GAAU,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,MACnDhzB,EAAM2ulB,cAAc37jB,GACpB,MACJ,KAAK,EACDA,GAAU,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAClDhzB,EAAM2ulB,cAAc37jB,GACpB,MACJ,KAAK,EACDA,GAAU,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAClDhzB,EAAM2ulB,cAAc37jB,KAIhC/yB,KAAK0ulB,cAAgB,SAAUC,GAC3B5ulB,EAAM6ulB,SAAS5xlB,MAAQ2xlB,EAAS,GAChC5ulB,EAAM8ulB,SAAS7xlB,MAAQ2xlB,EAAS,GAChC5ulB,EAAM+ulB,SAAS9xlB,MAAQ2xlB,EAAS,GAChC5ulB,EAAMgvlB,SAAS/xlB,MAAQ2xlB,EAAS,GAChC5ulB,EAAMivlB,SAAShylB,MAAQ2xlB,EAAS,GAChC5ulB,EAAMkvlB,SAASjylB,MAAQ2xlB,EAAS,GAChC5ulB,EAAMmvlB,SAASlylB,MAAQ2xlB,EAAS,GAChC5ulB,EAAMovlB,SAASnylB,MAAQ2xlB,EAAS,GAChC5ulB,EAAMqvlB,SAASpylB,MAAQ2xlB,EAAS,IAEpC3ulB,KAAKouC,MAAQ,WACTruC,EAAMuulB,UAAUrpkB,SAAU,EAC1BllB,EAAMuulB,UAAUtxlB,MAAQ,EACxB+C,EAAM6nhB,QAAQ1pa,UAAW,EACzBn+G,EAAM6nhB,QAAQp1gB,SAAU,EAExBzS,EAAM2ulB,eADQ,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,OAE3D3ulB,EAAMsvlB,OAAOrylB,MAAQ,MAEzBgD,KAAKsvlB,YAAc,SAAUrvlB,GACzB,IAAIsvlB,EAAetvlB,EAAKiqd,WAAWltd,MAE/BuylB,IADQxvlB,EAAMyvlB,gBAAgBvvlB,EAAKiqd,aACQ,KAAjBqlI,EAC1BxvlB,EAAMuulB,UAAUrpkB,SAAU,GAG1BllB,EAAMuulB,UAAUrpkB,SAAU,EAC1BllB,EAAM0vlB,eAGdzvlB,KAAK0vlB,mBAAqB,SAAUzvlB,GAChC,IAAIsvlB,EAAetvlB,EAAKiqd,WAAWltd,MAE/B+C,EAAMuulB,UAAUrpkB,QADC,KAAjBsqkB,EAMAxvlB,EAAMsvlB,SAAWpvlB,EAAKiqd,aACtBnqd,EAAM6nhB,QAAQp1gB,SAAU,EACxBzS,EAAM6nhB,QAAQ1pa,UAAW,IAMjCl+G,KAAK2vlB,sBAAwB,SAAU1vlB,GAC/BA,EAAKuS,SACLzS,EAAMwnkB,WAAW/0jB,SAAU,EAC3BzS,EAAMwnkB,WAAWrpd,UAAW,EAC5Bn+G,EAAMi/f,UAAU/5e,SAAU,IAG1BllB,EAAMwnkB,WAAWrpd,UAAW,EAC5Bn+G,EAAMi/f,UAAU/5e,SAAU,IAMlCjlB,KAAK4vlB,sBAAwB,SAAU3vlB,GAC/BA,EAAKuS,QACLzS,EAAMi/f,UAAU/5e,SAAU,EAG1BllB,EAAMi/f,UAAU/5e,SAAU,GAMlCjlB,KAAK6vlB,iBAAmB,SAAU5vlB,GAC1BA,EAAKuS,SACLzS,EAAM6ulB,SAAS1we,UAAW,EAC1Bn+G,EAAM8ulB,SAAS3we,UAAW,EAC1Bn+G,EAAM+ulB,SAAS5we,UAAW,EAC1Bn+G,EAAMgvlB,SAAS7we,UAAW,EAC1Bn+G,EAAMivlB,SAAS9we,UAAW,EAC1Bn+G,EAAMkvlB,SAAS/we,UAAW,EAC1Bn+G,EAAMmvlB,SAAShxe,UAAW,EAC1Bn+G,EAAMovlB,SAASjxe,UAAW,EAC1Bn+G,EAAMqvlB,SAASlxe,UAAW,EAC1Bn+G,EAAMsvlB,OAAOnxe,UAAW,IAGxBn+G,EAAM6ulB,SAAS1we,UAAW,EAC1Bn+G,EAAM8ulB,SAAS3we,UAAW,EAC1Bn+G,EAAM+ulB,SAAS5we,UAAW,EAC1Bn+G,EAAMgvlB,SAAS7we,UAAW,EAC1Bn+G,EAAMivlB,SAAS9we,UAAW,EAC1Bn+G,EAAMkvlB,SAAS/we,UAAW,EAC1Bn+G,EAAMmvlB,SAAShxe,UAAW,EAC1Bn+G,EAAMovlB,SAASjxe,UAAW,EAC1Bn+G,EAAMqvlB,SAASlxe,UAAW,EAC1Bn+G,EAAMsvlB,OAAOnxe,UAAW,IAMhCl+G,KAAK8vlB,8BAAgC,WACjC,IAAIzoB,GACAG,WAAY,EACZC,SAAU1nkB,EAAMuulB,UAAUtxlB,MAC1B4qkB,iBAAkB7nkB,EAAMmzD,UAAU1gD,QAClC80jB,kBAAmBvnkB,EAAMs5U,WAAW7mU,QACpC+0jB,WAAYxnkB,EAAMwnkB,WAAW/0jB,QAC7Bwsf,UAAWj/f,EAAMi/f,UAAUhigB,MAC3B6qkB,qBAAsB9nkB,EAAM6nhB,QAAQp1gB,SAExCzS,EAAMgwlB,kBAAkB1oB,GACxBtnkB,EAAMuvf,MAAMA,MAAM5U,aAAawsF,sBAAsBG,GACrDtnkB,EAAMuvf,MAAMk8F,OAAOjqgB,QAKvBvhF,KAAKwulB,wBAA0B,WAC3BzulB,EAAMs5U,WAAW7mU,SAAU,EAC3BzS,EAAMwnkB,WAAW/0jB,SAAU,EAC3BzS,EAAMi/f,UAAUhigB,MAAQ,GACxB+C,EAAMmzD,UAAU1gD,SAAU,EAC1BzS,EAAM2E,MAAM8N,SAAU,EACtBzS,EAAM6nhB,QAAQp1gB,SAAU,EACxBzS,EAAMsvlB,OAAOrylB,MAAQ,IAEzBgD,KAAKsvf,MAAQlV,EAugBjB,OArgBAiH,EAAsBhmf,UAAUkkC,cAAgB,WAC5C,MAAO,yBAMX8hd,EAAsBhmf,UAAUwhf,yBAA2B,SAAU7ue,GACjE,IACIgilB,EAAUhwlB,KAAKsvf,MAAMA,MAAMh9W,YAC3BhvI,EAAK0slB,EAAU,cACnBhwlB,KAAKmH,OAAShG,EAAc,OAASmC,GAAIA,EAAID,UAAW,2BACxDrD,KAAKsvf,MAAMA,MAAMtuf,QAAQW,YAAY3B,KAAKmH,QAE1C,IAAI8olB,EAAa9ulB,EAAc,OAASmC,GAAI,cAAeD,UAAW,+BACtErD,KAAKmH,OAAOxF,YAAYsulB,GAExB,IAAIC,EAAW/ulB,EAAc,OAASmC,GAAI0slB,EAAU,YAAa3slB,UAAW,4BAA6BE,OAAQ,uBAAwBvB,UAAWgM,EAAO+lE,YAAY,aACvKk8gB,EAAWtulB,YAAYuulB,GAEvB,IAAIC,EAAiBhvlB,EAAc,OAASmC,GAAI,eAAgBC,OAAQ,kCACxE0slB,EAAWtulB,YAAYwulB,GAEvB,IAAIC,EAAkBjvlB,EAAc,OAASoC,OAAQ,qBAAsBF,UAAW,mCACtF4slB,EAAWtulB,YAAYyulB,GAEvB,IAAIC,EAAuBlvlB,EAAc,OAASmC,GAAI,qBAAsBC,OAAQ,4CACpF0slB,EAAWtulB,YAAY0ulB,GAEvB,IAAIC,EAAwBnvlB,EAAc,OAASkC,UAAW,mCAAoCE,OAAQ,iBAC1G0slB,EAAWtulB,YAAY2ulB,GAEvB,IAAIC,EAAgBpvlB,EAAc,OAASmC,GAAI,iBAAkBD,UAAW,+BACxEg2U,EAAal4U,EAAc,SAC3BsC,OAASiD,KAAQ,YAAcpD,GAAItD,KAAKmH,OAAO7D,GAAK,gBAExDitlB,EAAc5ulB,YAAY03U,GAE1B,IAAIm3Q,EAAgBrvlB,EAAc,OAASmC,GAAI,iBAAkBD,UAAW,+BACxEkkkB,EAAapmkB,EAAc,SAC3BsC,OAASiD,KAAQ,YAAcpD,GAAItD,KAAKmH,OAAO7D,GAAK,gBAExDktlB,EAAc7ulB,YAAY4lkB,GAE1BvnkB,KAAKq5U,WAAa,IAAIx6N,IAAWxrG,MAAOrF,EAAO+lE,YAAY,qBAAsBvhE,SAAS,EAAM4N,OAAQpgB,KAAK2vlB,wBAE7G3vlB,KAAKunkB,WAAa,IAAI1od,IAAWxrG,MAAOrF,EAAO+lE,YAAY,4BAA6BvhE,SAAS,EAAM4N,OAAQpgB,KAAK4vlB,wBACpH5vlB,KAAKq5U,WAAWhjS,SAASgjS,GACzBr5U,KAAKunkB,WAAWlxhB,SAASkxhB,GACzB,IAAIkpB,EAAStvlB,EAAc,OAASmC,GAAI,UAAWD,UAAW,yBAE1DqtlB,EAAoBvvlB,EAAc,OAASmC,GAAI,uBAE/CqtlB,EAAiBxvlB,EAAc,SAAWmC,GAAI0slB,EAAU,kBAAmB3slB,UAAW,uBAAwBrB,UAAWgM,EAAO+lE,YAAY,iBAChJ28gB,EAAkB/ulB,YAAYgvlB,GAC9B,IAAIC,EAAezvlB,EAAc,OAASmC,GAAI,kBAC1C07f,EAAY79f,EAAc,UAC1BmC,GAAI0slB,EAAU,aACdhulB,UAAW,wBAA0BgM,EAAO+lE,YAAY,UACpD,yCAA2C/lE,EAAO+lE,YAAY,wBAC9D,mCAAqC/lE,EAAO+lE,YAAY,uBACxD,uCAAyC/lE,EAAO+lE,YAAY,gBAAkB,cAEtF68gB,EAAajvlB,YAAYq9f,GACzByxF,EAAO9ulB,YAAY+ulB,GACnBD,EAAO9ulB,YAAYivlB,GACnBT,EAAexulB,YAAY4ulB,GAC3BJ,EAAexulB,YAAY6ulB,GAC3BL,EAAexulB,YAAY8ulB,GAC3BzwlB,KAAKg/f,UAAY,IAAIvrC,IAAez9c,MAAO,MAC3ChW,KAAKg/f,UAAU3od,SAAS2od,GACxB,IAAI9rc,EAAY/xD,EAAc,SAC1BsC,OAASiD,KAAQ,YAAcpD,GAAItD,KAAKmH,OAAO7D,GAAK,eAExD8slB,EAAgBzulB,YAAYuxD,GAC5BlzD,KAAKkzD,UAAY,IAAI2rD,IAAWxrG,MAAOrF,EAAO+lE,YAAY,0CAA2CvhE,SAAS,IAC9GxS,KAAKkzD,UAAU7c,SAAS6c,GAExB,IAAI29hB,EAAU1vlB,EAAc,OAASmC,GAAI,WAAYD,UAAW,6BAE5DytlB,EAAoB3vlB,EAAc,OAASmC,GAAI,qBAAsBD,UAAW,gCAEhF0tlB,EAAiB5vlB,EAAc,SAAWmC,GAAI0slB,EAAU,kBAAmB3slB,UAAW,uBAAwBrB,UAAWgM,EAAO+lE,YAAY,kBAChJ+8gB,EAAkBnvlB,YAAYovlB,GAE9B,IAAIC,EAAe7vlB,EAAc,OAASmC,GAAI,gBAAiBD,UAAW,+BAEtEirlB,EAAYntlB,EAAc,SAAWmC,GAAI0slB,EAAU,aAAcvslB,OAASiD,KAAQ,UACtFsqlB,EAAarvlB,YAAY2slB,GACzBuC,EAAQlvlB,YAAYmvlB,GACpBD,EAAQlvlB,YAAYqvlB,GACpBZ,EAAgBzulB,YAAYkvlB,GAC5B7wlB,KAAKsulB,UAAY,IAAIz2d,IAAiB77F,OAAQ,IAAKh/B,MAAO,EAAG+iB,IAAK,EAAGzT,IAAK,EAAG0J,MAAO,IAAKoK,OAAQpgB,KAAKyulB,uBACtGzulB,KAAKsulB,UAAUj4iB,SAASi4iB,GAExB,IAAI2C,EAAgB9vlB,EAAc,OAASmC,GAAI,iBAAkBD,UAAW,+BAExE6tlB,EAAkB/vlB,EAAc,OAASmC,GAAI0slB,EAAU,mBAAoB3slB,UAAW,qDAAsDE,OAAQ,uBAAwBvB,UAAWgM,EAAO+lE,YAAY,mCAC9Ms8gB,EAAqB1ulB,YAAYsvlB,GACjCZ,EAAqB1ulB,YAAYuvlB,GACjC,IAAIxslB,EAAQvD,EAAc,SACtBsC,OAASiD,KAAQ,YAAcpD,GAAItD,KAAKmH,OAAO7D,GAAK,WAExD+slB,EAAqB1ulB,YAAY+C,GACjC1E,KAAK0E,MAAQ,IAAIm6G,IAAWxrG,MAAOrF,EAAO+lE,YAAY,UAAWvhE,SAAS,EAAM4N,OAAQpgB,KAAK6vlB,mBAC7F7vlB,KAAK0E,MAAM2xC,SAAS3xC,GACpB,IAAIu7D,EAAQ9+D,EAAc,SAAWoC,OAAQ,oBACzC4tlB,EAAMhwlB,EAAc,MACpBiwlB,EAAMjwlB,EAAc,MAAQoC,OAAQ,mCACpC8tlB,EAAiBlwlB,EAAc,SAE/Ba,UAAWgM,EAAO+lE,YAAY,qBAAsB1wE,UAAW,2DAA4DC,GAAItD,KAAKmH,OAAO7D,GAAK,oBAEpJ8tlB,EAAIzvlB,YAAY0vlB,GAChB,IAAIC,EAAMnwlB,EAAc,MACpBowlB,EAAWpwlB,EAAc,SACzBa,UAAWgM,EAAO+lE,YAAY,cAAe1wE,UAAW,2DACxDC,GAAItD,KAAKmH,OAAO7D,GAAK,cAEzBgulB,EAAI3vlB,YAAY4vlB,GAChBJ,EAAIxvlB,YAAYyvlB,GAChBD,EAAIxvlB,YAAY2vlB,GAChBrxhB,EAAMt+D,YAAYwvlB,GAElB,IAAIK,EAAWrwlB,EAAc,OAASmC,GAAI,YAAaD,UAAW,uBAC9DoulB,EAAStwlB,EAAc,SACvBuwlB,EAAMvwlB,EAAc,MACpBwwlB,EAAMxwlB,EAAc,MACpBywlB,EAAgBzwlB,EAAc,SAC9Ba,UAAWgM,EAAO+lE,YAAY,aAC9B1wE,UAAW,2BAA4BC,GAAItD,KAAKmH,OAAO7D,GAAK,mBAEhEqulB,EAAIhwlB,YAAYiwlB,GAChB,IAAIC,EAAM1wlB,EAAc,MACxBnB,KAAK4ulB,SAAWztlB,EAAc,SAAWmC,GAAI,YAAaD,UAAW,mCACrErD,KAAK4ulB,SAAS5xlB,MAAQ,IACtBgD,KAAK4ulB,SAASlylB,iBAAiB,QAASsD,KAAKsvlB,aAC7CuC,EAAIlwlB,YAAY3B,KAAK4ulB,UACrB8C,EAAI/vlB,YAAYgwlB,GAChBD,EAAI/vlB,YAAYkwlB,GAChB,IAAIC,EAAM3wlB,EAAc,MACpB4wlB,EAAM5wlB,EAAc,MACpB6wlB,EAAgB7wlB,EAAc,SAC9Ba,UAAWgM,EAAO+lE,YAAY,aAC9B1wE,UAAW,2BAA4BC,GAAItD,KAAKmH,OAAO7D,GAAK,mBAEhEyulB,EAAIpwlB,YAAYqwlB,GAChB,IAAIC,EAAM9wlB,EAAc,MACxBnB,KAAK6ulB,SAAW1tlB,EAAc,SAAWmC,GAAI,YAAaD,UAAW,mCACrErD,KAAK6ulB,SAAS7xlB,MAAQ,IACtBgD,KAAK6ulB,SAASnylB,iBAAiB,QAASsD,KAAKsvlB,aAC7C2C,EAAItwlB,YAAY3B,KAAK6ulB,UACrBiD,EAAInwlB,YAAYowlB,GAChBD,EAAInwlB,YAAYswlB,GAChB,IAAIC,EAAM/wlB,EAAc,MACpBgxlB,EAAMhxlB,EAAc,MACpBixlB,EAAgBjxlB,EAAc,SAC9Ba,UAAWgM,EAAO+lE,YAAY,aAC9B1wE,UAAW,2BAA4BC,GAAItD,KAAKmH,OAAO7D,GAAK,mBAEhE6ulB,EAAIxwlB,YAAYywlB,GAChB,IAAIC,EAAMlxlB,EAAc,MACxBnB,KAAK8ulB,SAAW3tlB,EAAc,SAAWmC,GAAI,YAAaD,UAAW,mCACrErD,KAAK8ulB,SAAS9xlB,MAAQ,IACtBgD,KAAK8ulB,SAASpylB,iBAAiB,QAASsD,KAAKsvlB,aAC7C+C,EAAI1wlB,YAAY3B,KAAK8ulB,UACrBoD,EAAIvwlB,YAAYwwlB,GAChBD,EAAIvwlB,YAAY0wlB,GAChB,IAAIC,EAAMnxlB,EAAc,MACpBoxlB,EAAMpxlB,EAAc,MACpBqxlB,EAAgBrxlB,EAAc,SAC9Ba,UAAWgM,EAAO+lE,YAAY,aAC9B1wE,UAAW,2BAA4BC,GAAItD,KAAKmH,OAAO7D,GAAK,mBAEhEivlB,EAAI5wlB,YAAY6wlB,GAChB,IAAIC,EAAOtxlB,EAAc,MACzBnB,KAAK+ulB,SAAW5tlB,EAAc,SAAWmC,GAAI,YAAaD,UAAW,mCACrErD,KAAK+ulB,SAASrylB,iBAAiB,QAASsD,KAAKsvlB,aAC7CmD,EAAK9wlB,YAAY3B,KAAK+ulB,UACtBuD,EAAI3wlB,YAAY4wlB,GAChBD,EAAI3wlB,YAAY8wlB,GAChB,IAAIC,EAAMvxlB,EAAc,MACpBwxlB,EAAOxxlB,EAAc,MACrByxlB,GAAgBzxlB,EAAc,SAC9Ba,UAAWgM,EAAO+lE,YAAY,aAC9B1wE,UAAW,2BAA4BC,GAAItD,KAAKmH,OAAO7D,GAAK,mBAEhEqvlB,EAAKhxlB,YAAYixlB,IACjB,IAAIC,GAAO1xlB,EAAc,MACzBnB,KAAKgvlB,SAAW7tlB,EAAc,SAAWmC,GAAI,YAAaD,UAAW,mCACrErD,KAAKgvlB,SAAStylB,iBAAiB,QAASsD,KAAKsvlB,aAC7CuD,GAAKlxlB,YAAY3B,KAAKgvlB,UACtB0D,EAAI/wlB,YAAYgxlB,GAChBD,EAAI/wlB,YAAYkxlB,IAChB,IAAIC,GAAM3xlB,EAAc,MACpB4xlB,GAAO5xlB,EAAc,MACrB6xlB,GAAgB7xlB,EAAc,SAC9Ba,UAAWgM,EAAO+lE,YAAY,aAC9B1wE,UAAW,2BAA4BC,GAAItD,KAAKmH,OAAO7D,GAAK,mBAEhEyvlB,GAAKpxlB,YAAYqxlB,IACjB,IAAIC,GAAO9xlB,EAAc,MACzBnB,KAAKivlB,SAAW9tlB,EAAc,SAAWmC,GAAI,YAAaD,UAAW,mCACrErD,KAAKivlB,SAASvylB,iBAAiB,QAASsD,KAAKsvlB,aAC7C2D,GAAKtxlB,YAAY3B,KAAKivlB,UACtB6D,GAAInxlB,YAAYoxlB,IAChBD,GAAInxlB,YAAYsxlB,IAChB,IAAIC,GAAM/xlB,EAAc,MACpBgylB,GAAOhylB,EAAc,MACrBiylB,GAAgBjylB,EAAc,SAC9Ba,UAAWgM,EAAO+lE,YAAY,aAC9B1wE,UAAW,2BAA4BC,GAAItD,KAAKmH,OAAO7D,GAAK,mBAEhE6vlB,GAAKxxlB,YAAYyxlB,IACjB,IAAIC,GAAOlylB,EAAc,MACzBnB,KAAKkvlB,SAAW/tlB,EAAc,SAAWmC,GAAI,YAAaD,UAAW,mCACrErD,KAAKkvlB,SAASxylB,iBAAiB,QAASsD,KAAKsvlB,aAC7C+D,GAAK1xlB,YAAY3B,KAAKkvlB,UACtBgE,GAAIvxlB,YAAYwxlB,IAChBD,GAAIvxlB,YAAY0xlB,IAChB,IAAIC,GAAMnylB,EAAc,MACpBoylB,GAAOpylB,EAAc,MACrBqylB,GAAgBrylB,EAAc,SAC9Ba,UAAWgM,EAAO+lE,YAAY,aAC9B1wE,UAAW,2BAA4BC,GAAItD,KAAKmH,OAAO7D,GAAK,mBAEhEiwlB,GAAK5xlB,YAAY6xlB,IACjB,IAAIC,GAAOtylB,EAAc,MACzBnB,KAAKmvlB,SAAWhulB,EAAc,SAAWmC,GAAI,YAAaD,UAAW,mCACrErD,KAAKmvlB,SAASzylB,iBAAiB,QAASsD,KAAKsvlB,aAC7CmE,GAAK9xlB,YAAY3B,KAAKmvlB,UACtBmE,GAAI3xlB,YAAY4xlB,IAChBD,GAAI3xlB,YAAY8xlB,IAChB,IAAIC,GAAOvylB,EAAc,MACrBwylB,GAAOxylB,EAAc,MACrByylB,GAAgBzylB,EAAc,SAC9Ba,UAAWgM,EAAO+lE,YAAY,aAC9B1wE,UAAW,2BAA4BC,GAAItD,KAAKmH,OAAO7D,GAAK,mBAEhEqwlB,GAAKhylB,YAAYiylB,IACjB,IAAIC,GAAO1ylB,EAAc,MACzBnB,KAAKovlB,SAAWjulB,EAAc,SAAWmC,GAAI,YAAaD,UAAW,mCACrErD,KAAKovlB,SAAS1ylB,iBAAiB,QAASsD,KAAKsvlB,aAC7CuE,GAAKlylB,YAAY3B,KAAKovlB,UACtBsE,GAAK/xlB,YAAYgylB,IACjBD,GAAK/xlB,YAAYkylB,IACjB,IAAIC,GAAO3ylB,EAAc,MACrB4ylB,GAAO5ylB,EAAc,MACrB6ylB,GAAc7ylB,EAAc,SAC5Ba,UAAWgM,EAAO+lE,YAAY,UAC9B1wE,UAAW,2BAA4BC,GAAItD,KAAKmH,OAAO7D,GAAK,iBAEhEywlB,GAAKpylB,YAAYqylB,IACjB,IAAIC,GAAO9ylB,EAAc,MACzBnB,KAAKqvlB,OAASlulB,EAAc,SAAWmC,GAAI,UAAWD,UAAW,mCACjErD,KAAKqvlB,OAAO3ylB,iBAAiB,QAASsD,KAAK0vlB,oBAC3CuE,GAAKtylB,YAAY3B,KAAKqvlB,QACtByE,GAAKnylB,YAAYoylB,IACjBD,GAAKnylB,YAAYsylB,IACjBxC,EAAO9vlB,YAAY+vlB,GACnBD,EAAO9vlB,YAAYmwlB,GACnBL,EAAO9vlB,YAAYuwlB,GACnBT,EAAO9vlB,YAAY2wlB,GACnBb,EAAO9vlB,YAAY+wlB,GACnBjB,EAAO9vlB,YAAYmxlB,IACnBrB,EAAO9vlB,YAAYuxlB,IACnBzB,EAAO9vlB,YAAY2xlB,IACnB7B,EAAO9vlB,YAAY+xlB,IACnBjC,EAAO9vlB,YAAYmylB,IACnBtC,EAAS7vlB,YAAY8vlB,GACrB,IAAIyC,GAAiB/ylB,EAAc,OAASkC,UAAW,8BACvD6wlB,GAAevylB,YAAYs+D,GAC3Bi0hB,GAAevylB,YAAY6vlB,GAC3BnB,EAAqB1ulB,YAAYuylB,IAEjC,IAAIC,GAAYhzlB,EAAc,OAASmC,GAAI,aAAcC,OAAQ,mBACjE8slB,EAAqB1ulB,YAAYwylB,IACjC,IAAIC,GAASjzlB,EAAc,OAASmC,GAAI,YAEpC+wlB,GAAalzlB,EAAc,OAASmC,GAAI,cAAeD,UAAW,2DAClEukhB,GAAUzmhB,EAAc,SACxBsC,OAASiD,KAAQ,YAAcpD,GAAI,aAEvC+wlB,GAAW1ylB,YAAYimhB,IACvBwsE,GAAOzylB,YAAY0ylB,IACnBF,GAAUxylB,YAAYyylB,IACtBp0lB,KAAK4nhB,QAAU,IAAI/oa,IAAWxrG,MAAOrF,EAAO+lE,YAAY,kBAAmBvhE,SAAS,IACpFxS,KAAK4nhB,QAAQvxe,SAASuxe,IACtB,IAAI0sE,GAAiBnzlB,EAAc,OAASkC,UAAW,0BACvD8wlB,GAAUxylB,YAAY2ylB,IACtB,IAAIC,GAAepzlB,EAAc,UAAYa,UAAW,QAASsB,GAAI,UACrEgxlB,GAAe3ylB,YAAY4ylB,IACT,IAAIx2e,IAAS9qG,SAAU,iBAC7BojC,SAASk+iB,IACrBA,GAAa73lB,iBAAiB,QAASsD,KAAKouC,OAE5C,IAAIomjB,GAAerzlB,EAAc,OAASmC,GAAI,gBAAiBD,UAAW,+BAEtEoxlB,GAAiBtzlB,EAAc,OAC/BmC,GAAI0slB,EAAU,kBAAmB3slB,UAAW,gDAC5CrB,UAAWgM,EAAO+lE,YAAY,aAElCu8gB,EAAsB3ulB,YAAY6ylB,IAClClE,EAAsB3ulB,YAAY8ylB,IAClC,IAAI/G,GAAavslB,EAAc,OAASkC,UAAW,6BACnDitlB,EAAsB3ulB,YAAY+rlB,IAClC1tlB,KAAKotlB,aAAejslB,EAAc,SAAWkC,UAAW,UAAWC,GAAI,YACvEtD,KAAKotlB,aAAa5plB,aAAa,OAAQ,QACvCkqlB,GAAW/rlB,YAAY3B,KAAKotlB,cAC5B,IAAIsH,GAAcvzlB,EAAc,OAASkC,UAAW,uBAEpDrD,KAAK4kM,iBAAmB,IAAIzI,IAAW54H,YADpB,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,SAC3BtwD,SAAU,oBAC1EjT,KAAK4kM,iBAAiBvuJ,SAASq+iB,IAC/B10lB,KAAK4kM,iBAAiBloM,iBAAiB,SAAUsD,KAAKqtlB,eACtDiD,EAAsB3ulB,YAAY+ylB,IAClC,IAAIC,GAAkBxzlB,EAAc,OAASkC,UAAW,2BACxDitlB,EAAsB3ulB,YAAYgzlB,IAClC,IAAIC,GAAgBzzlB,EAAc,UAAYa,UAAW,SAAUsB,GAAI,WACvEqxlB,GAAgBhzlB,YAAYizlB,IACT,IAAI72e,IAAS9qG,SAAU,iBAC7BojC,SAASu+iB,IACtBA,GAAcl4lB,iBAAiB,QAASsD,KAAKq+e,kBAKjDgD,EAAsBhmf,UAAU4oH,KAAO,WACnC,IAAIo+Y,EAAa,IAAI7qZ,GAAK,iBAAkBx3G,KAAKsvf,MAAMA,MAAM3xE,eAC7D0kF,EAAW1qZ,UAAU33G,KAAKsvf,MAAMA,MAAMthf,QACtCL,GAAW3N,KAAKsvf,MAAMA,MAAMthf,QACvBhO,KAAKmH,QACNnH,KAAK68e,yBAAyBwlB,GAElCrigB,KAAKsvf,MAAMk8F,OAAO5mgB,OAASy9a,EAAWtub,YAAY,qBAClD/zE,KAAKsvf,MAAMk8F,OAAOx1kB,MAAQ,OAC1BhW,KAAKsvf,MAAMk8F,OAAOz1kB,OAAS,OAC3B/V,KAAKsvf,MAAMk8F,OAAOpxjB,QAAUp6B,KAAKmH,OACjCnH,KAAKsvf,MAAMk8F,OAAOr1iB,WAAan2C,KAAKqulB,yBACpCrulB,KAAKsvf,MAAMk8F,OAAOvplB,MAAQjC,KAAKuulB,0BAC/BvulB,KAAKsvf,MAAMk8F,OAAOrle,UACVE,MAAOrmH,KAAK8vlB,8BACZ1pe,aAAehsF,QAASioe,EAAWtub,YAAY,MAAO9gE,SAAU,oBAAqB+qG,WAAW,KAGhGqI,MAAOrmH,KAAKurlB,oBACZnle,aAAehsF,QAASioe,EAAWtub,YAAY,UAAW9gE,SAAU,yBAE5EjT,KAAKsvf,MAAMk8F,OAAO5/hB,WAClB5rD,KAAKsvf,MAAMk8F,OAAOvne,QAEtBo9X,EAAsBhmf,UAAUo0lB,WAAa,WACb,KAAxBzvlB,KAAK4ulB,SAAS5xlB,QACdgD,KAAKsulB,UAAUtxlB,MAAQ,GAEC,KAAxBgD,KAAK6ulB,SAAS7xlB,QACdgD,KAAKsulB,UAAUtxlB,MAAQ,GAEC,KAAxBgD,KAAK8ulB,SAAS9xlB,QACdgD,KAAKsulB,UAAUtxlB,MAAQ,GAEC,KAAxBgD,KAAK+ulB,SAAS/xlB,QACdgD,KAAKsulB,UAAUtxlB,MAAQ,GAEC,KAAxBgD,KAAKgvlB,SAAShylB,QACdgD,KAAKsulB,UAAUtxlB,MAAQ,GAEC,KAAxBgD,KAAKivlB,SAASjylB,QACdgD,KAAKsulB,UAAUtxlB,MAAQ,GAEC,KAAxBgD,KAAKkvlB,SAASlylB,QACdgD,KAAKsulB,UAAUtxlB,MAAQ,GAEC,KAAxBgD,KAAKmvlB,SAASnylB,QACdgD,KAAKsulB,UAAUtxlB,MAAQ,GAEC,KAAxBgD,KAAKovlB,SAASpylB,QACdgD,KAAKsulB,UAAUtxlB,MAAQ,IAG/Bqkf,EAAsBhmf,UAAUm0lB,gBAAkB,SAAUxulB,GACxD,OAAQA,GACJ,KAAKhB,KAAK4ulB,SACN,MAAO,IACX,KAAK5ulB,KAAK6ulB,SACN,MAAO,IACX,KAAK7ulB,KAAK8ulB,SACN,MAAO,IACX,KAAK9ulB,KAAK+ulB,SACN,MAAO,IACX,KAAK/ulB,KAAKgvlB,SACN,MAAO,IACX,KAAKhvlB,KAAKivlB,SACN,MAAO,IACX,KAAKjvlB,KAAKkvlB,SACN,MAAO,IACX,KAAKlvlB,KAAKmvlB,SACN,MAAO,IACX,KAAKnvlB,KAAKovlB,SACN,MAAO,IACX,QACI,MAAO,MAGnB/tG,EAAsBhmf,UAAUw5lB,gBAAkB,SAAU5ilB,GACxD,OAAQA,GACJ,KAAK,EACD,OAAO8iB,SAAS/0B,KAAK4ulB,SAAS5xlB,OAClC,KAAK,EACD,OAAO+3B,SAAS/0B,KAAK6ulB,SAAS7xlB,OAClC,KAAK,EACD,OAAO+3B,SAAS/0B,KAAK8ulB,SAAS9xlB,OAClC,KAAK,EACD,OAAO+3B,SAAS/0B,KAAK+ulB,SAAS/xlB,OAClC,KAAK,EACD,OAAO+3B,SAAS/0B,KAAKgvlB,SAAShylB,OAClC,KAAK,EACD,OAAO+3B,SAAS/0B,KAAKivlB,SAASjylB,OAClC,KAAK,EACD,OAAO+3B,SAAS/0B,KAAKkvlB,SAASlylB,OAClC,KAAK,EACD,OAAO+3B,SAAS/0B,KAAKmvlB,SAASnylB,OAClC,KAAK,EACD,OAAO+3B,SAAS/0B,KAAKovlB,SAASpylB,OAClC,QACI,OAAO,IAGnBqkf,EAAsBhmf,UAAU00lB,kBAAoB,SAAU1oB,GAC1DA,EAAYW,iBAKZ,IAAK,IAHD8sB,EAAgB,EAChBC,EAAc,EACdC,GAAa,EACR74lB,EAAI,EAAGA,GAAKkrkB,EAAYI,SAAUtrkB,IAAK,CAC5C,IAAImtf,EAAetpf,KAAK60lB,gBAAgB14lB,GACxC,GAAIA,IAAMmtf,EACgB,IAAlBwrG,IACAA,EAAgB34lB,EAChB64lB,GAAa,GAEZA,IACDD,EAAc54lB,QAKlB,GADA64lB,GAAa,EACQ,IAAjB1rG,EAAoB,CACpB,IAAIggF,EAlBI,WAkB2BntkB,EAAE+Q,WACrCm6jB,EAAYW,cAAcsB,GAAgBhgF,GAItD+9E,EAAYG,WAAastB,EACzBztB,EAAYI,SAAWstB,EACG,KAAtB/0lB,KAAKqvlB,OAAOrylB,QACZqqkB,EAAYW,cAAsB,QAAKhokB,KAAKqvlB,OAAOrylB,QAM3Dqkf,EAAsBhmf,UAAUiX,QAAU,WA6CtC,GA5CItS,KAAKq5U,aACLr5U,KAAKq5U,WAAW/mU,UAChBtS,KAAKq5U,gBAAal+U,GAElB6E,KAAKunkB,aACLvnkB,KAAKunkB,WAAWj1jB,UAChBtS,KAAKunkB,gBAAapskB,GAElB6E,KAAKg/f,YACLh/f,KAAKg/f,UAAU1sf,UACftS,KAAKg/f,eAAY7jgB,GAEjB6E,KAAKsulB,YACLtulB,KAAKsulB,UAAUh8kB,UACftS,KAAKsulB,eAAYnzlB,GAEjB6E,KAAKkzD,YACLlzD,KAAKkzD,UAAU5gD,UACftS,KAAKkzD,eAAY/3D,GAEjB6E,KAAK0E,QACL1E,KAAK0E,MAAM4N,UACXtS,KAAK0E,WAAQvJ,GAEb6E,KAAK4nhB,UACL5nhB,KAAK4nhB,QAAQt1gB,UACbtS,KAAK4nhB,aAAUzshB,GAEf6E,KAAK4kM,mBACL5kM,KAAK4kM,iBAAiBtyL,UACtBtS,KAAK4kM,sBAAmBzpM,GAE5B6E,KAAK4ulB,cAAWzzlB,EAChB6E,KAAK6ulB,cAAW1zlB,EAChB6E,KAAK8ulB,cAAW3zlB,EAChB6E,KAAK+ulB,cAAW5zlB,EAChB6E,KAAKgvlB,cAAW7zlB,EAChB6E,KAAKivlB,cAAW9zlB,EAChB6E,KAAKkvlB,cAAW/zlB,EAChB6E,KAAKmvlB,cAAWh0lB,EAChB6E,KAAKovlB,cAAWj0lB,EAChB6E,KAAKqvlB,YAASl0lB,EACd6E,KAAKotlB,kBAAejylB,EACpB6E,KAAKsvf,WAAQn0f,GACRsC,EAAkBuC,KAAKmH,QAAS,CAC7BnH,KAAKmH,OAAOkN,eACZrU,KAAKmH,OAAOkN,cAAc/O,YAAYtF,KAAKmH,QAE/C,IAAK,IAAI2X,EAAQ,EAAGA,EAAQ9e,KAAKmH,OAAOoK,WAAW9U,OAAQqiB,IACvD9e,KAAKmH,OAAO7B,YAAYtF,KAAKmH,OAAOoK,WAAWuN,IAC/CA,IAEJ9e,KAAKmH,YAAShM,IAGfkmf,KC9tBPC,GAAiC,WAIjC,SAASA,EAAgBlH,GACrB,IAAIr6e,EAAQC,KACZA,KAAKi1lB,YAAa,EAIlBj1lB,KAAKk1lB,oBAAsB,WACvBn1lB,EAAMuvf,MAAMpN,cACZ,IAAIS,EAAgB5if,EAAMuvf,MAAM1/a,UAAU+ya,cAC1C5if,EAAMo1lB,aAAan4lB,MAAQ2lf,EAAcx3P,UACzCprP,EAAMq1lB,cAAcp4lB,MAAQ2lf,EAAcz3P,WAC1CnrP,EAAMs1lB,gBAAgBr4lB,MAAQ2lf,EAAct3P,aAC5CtrP,EAAMu1lB,eAAet4lB,MAAQ2lf,EAAcv3P,YAC3CrrP,EAAMw1lB,SAASv4lB,MAAQ2lf,EAAcjnN,UACrC37R,EAAMy1lB,UAAUx4lB,MAAQ2lf,EAAcrjQ,WACtCv/O,EAAM01lB,UAAUjjlB,QAAUmwe,EAAck6B,yBACxC98gB,EAAM21lB,UAAUljlB,QAAUmwe,EAAci6B,mBACxC78gB,EAAM41lB,UAAU34lB,MAAQ2lf,EAAcomC,eACtChphB,EAAM61lB,UAAU54lB,MAAQ2lf,EAAcsrB,eAClClugB,EAAMw1lB,SAASv4lB,MAAQ+C,EAAMy1lB,UAAUx4lB,MACvC+C,EAAM81lB,UAAUrjlB,SAAU,EAG1BzS,EAAM+1lB,SAAStjlB,SAAU,GAMjCxS,KAAK+1lB,qBAAuB,WACxBh2lB,EAAMyulB,0BACNzulB,EAAMuvf,MAAMpN,eAKhBlif,KAAKurlB,oBAAsB,WACvBxrlB,EAAMuvf,MAAMk8F,OAAOjqgB,OACnBxhF,EAAMyulB,2BAKVxulB,KAAKg2lB,wBAA0B,SAAU15lB,GACf,KAAlBA,EAAMwrB,SACN/nB,EAAMk2lB,4BAMdj2lB,KAAKi2lB,yBAA2B,WAC5B,IAAItzG,EAAgB,IAAIC,GACxBD,EAAct3P,aAAetrP,EAAMs1lB,gBAAgBr4lB,MACnD2lf,EAAcx3P,UAAYprP,EAAMo1lB,aAAan4lB,MAC7C2lf,EAAcz3P,WAAanrP,EAAMq1lB,cAAcp4lB,MAC/C2lf,EAAcv3P,YAAcrrP,EAAMu1lB,eAAet4lB,MACjD2lf,EAAcjnN,UAAY37R,EAAMw1lB,SAASv4lB,MACzC2lf,EAAcrjQ,WAAav/O,EAAMy1lB,UAAUx4lB,MAC3C2lf,EAAck6B,yBAA2B98gB,EAAM01lB,UAAUjjlB,QACzDmwe,EAAci6B,mBAAqB78gB,EAAM21lB,UAAUljlB,QACnDmwe,EAAcomC,eAAiBhphB,EAAM41lB,UAAU34lB,MAC/C2lf,EAAcsrB,eAAiBlugB,EAAM61lB,UAAU54lB,MAC/C+C,EAAMuvf,MAAMA,MAAM5U,aAAa04C,0BAAqBj4hB,EAAWwnf,GAC/D5if,EAAMuvf,MAAMk8F,OAAOjqgB,QAKvBvhF,KAAKk2lB,kBAAoB,SAAU55lB,GAC/B,IAAIU,EAAQV,EAAMU,MACd2lf,EAAgB5if,EAAMuvf,MAAM1/a,UAAU+ya,cAC9BA,EAAcjnN,UACbinN,EAAcrjQ,WACvBv/O,EAAMuvf,MAAM1/a,UAAU+ya,cAAcjnN,UAAY37R,EAAMuvf,MAAM1/a,UAAU+ya,cAAcrjQ,YAAcv/O,EAAM81lB,UAAUrjlB,QAClHzS,EAAMk1lB,YAAa,EAGnBl1lB,EAAMk1lB,YAAa,EAET,WAAVj4lB,EACI+C,EAAMk1lB,YACNl1lB,EAAMw1lB,SAASv4lB,MAAQ,IACvB+C,EAAMy1lB,UAAUx4lB,MAAQ,MAGxB+C,EAAMw1lB,SAASv4lB,MAAQ,IACvB+C,EAAMy1lB,UAAUx4lB,MAAQ,KAGb,YAAVA,EACD+C,EAAMk1lB,YACNl1lB,EAAMw1lB,SAASv4lB,MAAQ,IACvB+C,EAAMy1lB,UAAUx4lB,MAAQ,OAGxB+C,EAAMw1lB,SAASv4lB,MAAQ,KACvB+C,EAAMy1lB,UAAUx4lB,MAAQ,KAGb,UAAVA,EACD+C,EAAMk1lB,YACNl1lB,EAAMw1lB,SAASv4lB,MAAQ,IACvB+C,EAAMy1lB,UAAUx4lB,MAAQ,OAGxB+C,EAAMw1lB,SAASv4lB,MAAQ,KACvB+C,EAAMy1lB,UAAUx4lB,MAAQ,KAGb,cAAVA,EACD+C,EAAMk1lB,YACNl1lB,EAAMw1lB,SAASv4lB,MAAQ,IACvB+C,EAAMy1lB,UAAUx4lB,MAAQ,MAGxB+C,EAAMw1lB,SAASv4lB,MAAQ,IACvB+C,EAAMy1lB,UAAUx4lB,MAAQ,KAGb,cAAVA,EACD+C,EAAMk1lB,YACNl1lB,EAAMw1lB,SAASv4lB,MAAQ,IACvB+C,EAAMy1lB,UAAUx4lB,MAAQ,MAGxB+C,EAAMw1lB,SAASv4lB,MAAQ,IACvB+C,EAAMy1lB,UAAUx4lB,MAAQ,KAGb,OAAVA,EACD+C,EAAMk1lB,YACNl1lB,EAAMw1lB,SAASv4lB,MAAQ,MACvB+C,EAAMy1lB,UAAUx4lB,MAAQ,UAGxB+C,EAAMw1lB,SAASv4lB,MAAQ,QACvB+C,EAAMy1lB,UAAUx4lB,MAAQ,OAGb,OAAVA,EACD+C,EAAMk1lB,YACNl1lB,EAAMw1lB,SAASv4lB,MAAQ,MACvB+C,EAAMy1lB,UAAUx4lB,MAAQ,QAGxB+C,EAAMw1lB,SAASv4lB,MAAQ,MACvB+C,EAAMy1lB,UAAUx4lB,MAAQ,OAGb,OAAVA,EACD+C,EAAMk1lB,YACNl1lB,EAAMw1lB,SAASv4lB,MAAQ,OACvB+C,EAAMy1lB,UAAUx4lB,MAAQ,QAGxB+C,EAAMw1lB,SAASv4lB,MAAQ,MACvB+C,EAAMy1lB,UAAUx4lB,MAAQ,QAGb,OAAVA,EACD+C,EAAMk1lB,YACNl1lB,EAAMw1lB,SAASv4lB,MAAQ,MACvB+C,EAAMy1lB,UAAUx4lB,MAAQ,SAGxB+C,EAAMw1lB,SAASv4lB,MAAQ,OACvB+C,EAAMy1lB,UAAUx4lB,MAAQ,OAGb,OAAVA,EACD+C,EAAMk1lB,YACNl1lB,EAAMw1lB,SAASv4lB,MAAQ,MACvB+C,EAAMy1lB,UAAUx4lB,MAAQ,QAGxB+C,EAAMw1lB,SAASv4lB,MAAQ,MACvB+C,EAAMy1lB,UAAUx4lB,MAAQ,OAGb,eAAVA,IACD+C,EAAMk1lB,YACNl1lB,EAAMw1lB,SAASv4lB,MAAQ,MACvB+C,EAAMy1lB,UAAUx4lB,MAAQ,QAGxB+C,EAAMw1lB,SAASv4lB,MAAQ,MACvB+C,EAAMy1lB,UAAUx4lB,MAAQ,SAOpCgD,KAAKkhkB,WAAa,SAAU5kkB,GACxByD,EAAM81lB,UAAUrjlB,SAAU,EAC1B,IAAIwD,EAAQjW,EAAMw1lB,SAASv4lB,MACvB+Y,EAAShW,EAAMy1lB,UAAUx4lB,MACzBgZ,EAAQD,IACRhW,EAAMw1lB,SAASv4lB,MAAQ+Y,EACvBhW,EAAMy1lB,UAAUx4lB,MAAQgZ,IAMhChW,KAAKmhkB,YAAc,SAAU7kkB,GACzByD,EAAM+1lB,SAAStjlB,SAAU,EACzB,IAAIwD,EAAQjW,EAAMw1lB,SAASv4lB,MACvB+Y,EAAShW,EAAMy1lB,UAAUx4lB,MACzBgZ,EAAQD,IACRhW,EAAMw1lB,SAASv4lB,MAAQ+Y,EACvBhW,EAAMy1lB,UAAUx4lB,MAAQgZ,IAMhChW,KAAKwulB,wBAA0B,WAC3BzulB,EAAMo2lB,UAAUn5lB,WAAQ7B,EACxB4E,EAAMo1lB,aAAan4lB,WAAQ7B,EAC3B4E,EAAMs1lB,gBAAgBr4lB,WAAQ7B,EAC9B4E,EAAMq1lB,cAAcp4lB,WAAQ7B,EAC5B4E,EAAMu1lB,eAAet4lB,WAAQ7B,EAC7B4E,EAAM41lB,UAAU34lB,WAAQ7B,EACxB4E,EAAM61lB,UAAU54lB,WAAQ7B,EACxB4E,EAAMw1lB,SAASv4lB,WAAQ7B,EACvB4E,EAAMy1lB,UAAUx4lB,WAAQ7B,EACxB4E,EAAM01lB,UAAUjjlB,SAAU,EAC1BzS,EAAM21lB,UAAUljlB,SAAU,EAC1BzS,EAAM+1lB,SAAStjlB,SAAU,EACzBzS,EAAM81lB,UAAUrjlB,SAAU,GAE9BxS,KAAKsvf,MAAQlV,EA2WjB,OAzWAkH,EAAgBjmf,UAAUkkC,cAAgB,WACtC,MAAO,mBAKX+hd,EAAgBjmf,UAAUugf,oBAAsB,SAAU5te,GACtD,IAAI1K,EAAKtD,KAAKsvf,MAAMA,MAAMh9W,YAAc,oBACxCtyI,KAAKmH,OAAShG,EAAc,OAASmC,GAAIA,EAAID,UAAW,iCACxDrD,KAAKsvf,MAAMA,MAAMtuf,QAAQW,YAAY3B,KAAKmH,QAC1C,IAAIivlB,EAAiBj1lB,EAAc,OAASmC,GAAItD,KAAKmH,OAAO7D,GAAK,wBACjEtD,KAAKmH,OAAOxF,YAAYy0lB,GACxBp2lB,KAAKq2lB,UAAYl1lB,EAAc,OAC3BmC,GAAItD,KAAKmH,OAAO7D,GAAK,qBAAsBC,OAAQ,oCAEvDvD,KAAKs2lB,SAAWn1lB,EAAc,OAC1BmC,GAAItD,KAAKmH,OAAO7D,GAAK,wBAAyBC,OAAQ,oCAE1DvD,KAAKu2lB,UAAYp1lB,EAAc,OAC3BmC,GAAItD,KAAKmH,OAAO7D,GAAK,2BAA4BC,OAAQ,oCAG7D,IAAIizlB,EAAQr1lB,EAAc,OAASmC,GAAItD,KAAKmH,OAAO7D,GAAK,sBAAuBD,UAAW,6BACtFo/M,EAAkBthN,EAAc,OAASkC,UAAW,iBACpDozlB,EAAet1lB,EAAc,OAC7BmC,GAAItD,KAAKmH,OAAO7D,GAAK,gBAAiBtB,UAAWgM,EAAO+lE,YAAY,YAEpE2ihB,EAAcv1lB,EAAc,OAC5BmC,GAAItD,KAAKmH,OAAO7D,GAAK,eAAgBtB,UAAWgM,EAAO+lE,YAAY,WAEnE4ihB,EAAex1lB,EAAc,OAC7BmC,GAAItD,KAAKmH,OAAO7D,GAAK,gBAAiBtB,UAAWgM,EAAO+lE,YAAY,YAExE0uI,EAAgB9gN,YAAY80lB,GAC5Bh0Y,EAAgB9gN,YAAY+0lB,GAC5Bj0Y,EAAgB9gN,YAAYg1lB,GAC5B,IAAI95Z,EAAmB17L,EAAc,OAASkC,UAAW,cACrDuzlB,EAAgBz1lB,EAAc,OAASmC,GAAItD,KAAKmH,OAAO7D,GAAK,mBAC5DuzlB,EAAe11lB,EAAc,OAASmC,GAAItD,KAAKmH,OAAO7D,GAAK,kBAC3DwzlB,EAAgB31lB,EAAc,OAASmC,GAAItD,KAAKmH,OAAO7D,GAAK,mBAChEszlB,EAAcj1lB,YAAY3B,KAAKq2lB,WAC/BQ,EAAal1lB,YAAY3B,KAAKs2lB,UAC9BQ,EAAcn1lB,YAAY3B,KAAKu2lB,WAC/B15Z,EAAiBl7L,YAAYi1lB,GAC7B/5Z,EAAiBl7L,YAAYk1lB,GAC7Bh6Z,EAAiBl7L,YAAYm1lB,GAC7BN,EAAM70lB,YAAY8gN,GAClB+zY,EAAM70lB,YAAYk7L,GAClBu5Z,EAAez0lB,YAAY60lB,GAC3Bx2lB,KAAK+2lB,qBAAqB/2lB,KAAKq2lB,UAAWrolB,GAC1ChO,KAAKg3lB,wBAAwBh3lB,KAAKs2lB,SAAUtolB,GAC5ChO,KAAKi3lB,qBAAqBj3lB,KAAKu2lB,UAAWvolB,GAC1C,IAAIkplB,EAAS,IAAIn4S,MAAQy3S,GACzBx2lB,KAAKmH,OAAOzK,iBAAiB,QAASsD,KAAKg2lB,yBACrBkB,EAAOl2lB,QAAQ0M,uBAAuB,yBAAyB,GAC3CA,uBAAuB,cAAc,GAC3D5J,UAAUM,IAAI,0CAKtCk9e,EAAgBjmf,UAAU07lB,qBAAuB,SAAU/1lB,EAASgN,GAChE,IAAImplB,EAAYh2lB,EAAc,OAC1BmC,GAAI,aACJD,UAAW,oCAAqCE,OAAQ,kBAGxD6zlB,EAAgBj2lB,EAAc,OAASmC,GAAI,cAAeD,UAAW,2CACzE8zlB,EAAUx1lB,YAAYy1lB,GAEtB,IAAIC,EAAiBl2lB,EAAc,OAASkC,UAAW,4CACvD8zlB,EAAUx1lB,YAAY01lB,GACtB,IAAIC,EAAWn2lB,EAAc,SACzBa,UAAWgM,EAAO+lE,YAAY,OAAQ1wE,UAAW,iCACjDC,GAAItD,KAAKmH,OAAO7D,GAAK,YAAaC,OAAQ,iCAE1Cg0lB,EAAap2lB,EAAc,SAC3BsC,OAASiD,KAAQ,QAAUpD,GAAItD,KAAKmH,OAAO7D,GAAK,SAEhDk0lB,EAAiBr2lB,EAAc,SAC/Ba,UAAWgM,EAAO+lE,YAAY,UAC9B1wE,UAAW,uCAAwCC,GAAItD,KAAKmH,OAAO7D,GAAK,iBAExEm0lB,EAAgBt2lB,EAAc,SAC9BsC,OAASiD,KAAQ,QACjBpD,GAAItD,KAAKmH,OAAO7D,GAAK,YAEzB8zlB,EAAcz1lB,YAAY21lB,GAC1BF,EAAcz1lB,YAAY41lB,GAC1BH,EAAcz1lB,YAAY61lB,GAC1BJ,EAAcz1lB,YAAY81lB,GAC1B,IAAIC,EAAev2lB,EAAc,SAC7Ba,UAAWgM,EAAO+lE,YAAY,QAAS1wE,UAAW,iCAAkCE,OAAQ,+BAC5FD,GAAItD,KAAKmH,OAAO7D,GAAK,eAErBq0lB,EAAcx2lB,EAAc,SAC5BsC,OAASiD,KAAQ,QAAUpD,GAAItD,KAAKmH,OAAO7D,GAAK,UAEhDs0lB,EAAaz2lB,EAAc,SAC3Ba,UAAWgM,EAAO+lE,YAAY,SAC9BzwE,GAAItD,KAAKmH,OAAO7D,GAAK,cAAeD,UAAW,yCAE/Cw0lB,EAAe12lB,EAAc,SAC7BsC,OAASiD,KAAQ,QACjBpD,GAAItD,KAAKmH,OAAO7D,GAAK,WAEzB+zlB,EAAe11lB,YAAY+1lB,GAC3BL,EAAe11lB,YAAYg2lB,GAC3BN,EAAe11lB,YAAYi2lB,GAC3BP,EAAe11lB,YAAYk2lB,GAC3B72lB,EAAQW,YAAYw1lB,GACpBn3lB,KAAKm1lB,aAAe,IAAIt9d,IAAiB76H,MAAO,GAAIgZ,MAAO,IAAKsjH,SAAU,IAC1Et5H,KAAKm1lB,aAAa9+iB,SAASkhjB,GAC3Bv3lB,KAAKo1lB,cAAgB,IAAIv9d,IAAiB76H,MAAO,GAAIgZ,MAAO,IAAKsjH,SAAU,IAC3Et5H,KAAKo1lB,cAAc/+iB,SAASshjB,GAC5B33lB,KAAKq1lB,gBAAkB,IAAIx9d,IAAiB76H,MAAO,GAAIgZ,MAAO,IAAKsjH,SAAU,IAC7Et5H,KAAKq1lB,gBAAgBh/iB,SAASohjB,GAC9Bz3lB,KAAKs1lB,eAAiB,IAAIz9d,IAAiB76H,MAAO,GAAIgZ,MAAO,IAAKsjH,SAAU,IAC5Et5H,KAAKs1lB,eAAej/iB,SAASwhjB,GAE7B,IAAIC,EAAiB32lB,EAAc,OAASmC,GAAI,kBAAmBD,UAAW,2CAE1E00lB,EAAsB52lB,EAAc,OAASmC,GAAI,uBAAwBD,UAAW,gCAAiCrB,UAAWgM,EAAO+lE,YAAY,iBACnJikhB,EAAqB72lB,EAAc,OAASmC,GAAI,sBAAuBC,OAAQ,iBAAkBF,UAAW,yCAC5G40lB,EAAc92lB,EAAc,OAASmC,GAAI,eAAgBC,OAAQ,yBACjEuylB,EAAW30lB,EAAc,SACzBsC,OAASiD,KAAQ,eAAiBpD,GAAItD,KAAKmH,OAAO7D,GAAK,cAEvD40lB,EAAe/2lB,EAAc,OAASmC,GAAI,kBAC1CuylB,EAAY10lB,EAAc,SAC1BsC,OAASiD,KAAQ,eAAiBpD,GAAItD,KAAKmH,OAAO7D,GAAK,eAE3D20lB,EAAYt2lB,YAAYm0lB,GACxBoC,EAAav2lB,YAAYk0lB,GACzBmC,EAAmBr2lB,YAAYs2lB,GAC/BD,EAAmBr2lB,YAAYu2lB,GAC/BJ,EAAen2lB,YAAYo2lB,GAC3BD,EAAen2lB,YAAYq2lB,GAC3Bh4lB,KAAK81lB,SAAW,IAAI/1e,IAAc1sG,MAAOrF,EAAO+lE,YAAY,YAAavhE,SAAS,EAAM4N,OAAQpgB,KAAKkhkB,aACrGlhkB,KAAK61lB,UAAY,IAAI91e,IAAc1sG,MAAOrF,EAAO+lE,YAAY,aAAc3zD,OAAQpgB,KAAKmhkB,cACxFnhkB,KAAK81lB,SAASz/iB,SAASy/iB,GACvB91lB,KAAK61lB,UAAUx/iB,SAASw/iB,GACxB70lB,EAAQW,YAAYm2lB,IAKxBx2G,EAAgBjmf,UAAU27lB,wBAA0B,SAAUh2lB,EAASgN,GACnE,IAAImqlB,EAAUh3lB,EAAc,OACxBmC,GAAI,WACJD,UAAW,2CAGX+0lB,EAAcj3lB,EAAc,OAASmC,GAAI,YAAaD,UAAW,2CACrE80lB,EAAQx2lB,YAAYy2lB,GAEpB,IAAIC,EAAel3lB,EAAc,OAASkC,UAAW,4CACrD80lB,EAAQx2lB,YAAY02lB,GACpB,IAAIC,EAAan3lB,EAAc,SAC3Ba,UAAWgM,EAAO+lE,YAAY,SAAU1wE,UAAW,iCACnDC,GAAItD,KAAKmH,OAAO7D,GAAK,cAAeC,OAAQ,iCAE5Cg1lB,EAAep3lB,EAAc,SAC7BsC,OAASiD,KAAQ,QAAUpD,GAAItD,KAAKmH,OAAO7D,GAAK,WAEpD80lB,EAAYz2lB,YAAY22lB,GACxBF,EAAYz2lB,YAAY42lB,GACxB,IAAIC,EAAcr3lB,EAAc,SAC5Ba,UAAWgM,EAAO+lE,YAAY,UAAW1wE,UAAW,iCAAkCE,OAAQ,+BAC9FD,GAAItD,KAAKmH,OAAO7D,GAAK,iBAErBm1lB,EAAgBt3lB,EAAc,SAC9BsC,OAASiD,KAAQ,QAAUpD,GAAItD,KAAKmH,OAAO7D,GAAK,YAEpD+0lB,EAAa12lB,YAAY62lB,GACzBH,EAAa12lB,YAAY82lB,GACzBz3lB,EAAQW,YAAYw2lB,GACpBn4lB,KAAKu1lB,SAAW,IAAI19d,IAAiB76H,MAAO,IAAKgZ,MAAO,IAAKsjH,SAAU,IACvEt5H,KAAKu1lB,SAASl/iB,SAASkijB,GACvBv4lB,KAAKw1lB,UAAY,IAAI39d,IAAiB76H,MAAO,IAAKgZ,MAAO,IAAKsjH,SAAU,IACxEt5H,KAAKw1lB,UAAUn/iB,SAASoijB,GAExB,IAAIC,EAAev3lB,EAAc,OAASmC,GAAI,gBAAiBC,OAAQ,eAAgBF,UAAW,sCAC9F8ylB,EAAYh1lB,EAAc,UAC1BmC,GAAItD,KAAKmH,OAAO7D,GAAK,aAAcC,OAAQ,oCAC3CvB,UAAW,0BAA4BgM,EAAO+lE,YAAY,UACtD,oCAAsC/lE,EAAO+lE,YAAY,WACzD,kCAAoC/lE,EAAO+lE,YAAY,SACvD,sCAAwC/lE,EAAO+lE,YAAY,aAC3D,sCAAwC/lE,EAAO+lE,YAAY,aAC3D,+BAAiC/lE,EAAO+lE,YAAY,MACpD,+BAAiC/lE,EAAO+lE,YAAY,MACpD,+BAAiC/lE,EAAO+lE,YAAY,MACpD,+BAAiC/lE,EAAO+lE,YAAY,MACpD,+BAAiC/lE,EAAO+lE,YAAY,MACpD,uCAAyC/lE,EAAO+lE,YAAY,eAAiB,cAErF2khB,EAAa/2lB,YAAYw0lB,GACzBn2lB,KAAKm2lB,UAAY,IAAI1iI,IAAerzc,OAAQpgB,KAAKk2lB,kBAAmBlglB,MAAO,UAC3EhW,KAAKm2lB,UAAU9/iB,SAAS8/iB,GACxBn1lB,EAAQW,YAAY+2lB,IAKxBp3G,EAAgBjmf,UAAU47lB,qBAAuB,SAAUj2lB,EAASgN,GAEhE,IAAI2qlB,EAAYx3lB,EAAc,OAASmC,GAAI,aAAcD,UAAW,6CAEhEu1lB,EAAez3lB,EAAc,OAASmC,GAAI,gBAAiBC,OAAQ,gBAAiBF,UAAW,wCAC/FoylB,EAAYt0lB,EAAc,SAC1BsC,OAASiD,KAAQ,YAAcpD,GAAItD,KAAKmH,OAAO7D,GAAK,eAExDs1lB,EAAaj3lB,YAAY8zlB,GAEzB,IAAIoD,EAAe13lB,EAAc,OAASmC,GAAI,gBAAiBC,OAAQ,gBAAiBF,UAAW,yCAC/FqylB,EAAYv0lB,EAAc,SAC1BsC,OAASiD,KAAQ,YAAcpD,GAAItD,KAAKmH,OAAO7D,GAAK,UAExDu1lB,EAAal3lB,YAAY+zlB,GACzBiD,EAAUh3lB,YAAYi3lB,GACtBD,EAAUh3lB,YAAYk3lB,GACtB74lB,KAAKy1lB,UAAY,IAAI52e,IAAWxrG,MAAOrF,EAAO+lE,YAAY,4BAC1D/zE,KAAK01lB,UAAY,IAAI72e,IAAWxrG,MAAOrF,EAAO+lE,YAAY,0BAC1D/zE,KAAKy1lB,UAAUp/iB,SAASo/iB,GACxBz1lB,KAAK01lB,UAAUr/iB,SAASq/iB,GACxB10lB,EAAQW,YAAYg3lB,GAEpB,IAAIG,EAAe33lB,EAAc,OAASmC,GAAI,gBAAiBD,UAAW,kCACtEk9G,EAAYp/G,EAAc,SAC1Ba,UAAWgM,EAAO+lE,YAAY,aAAczwE,GAAItD,KAAKmH,OAAO7D,GAAK,eAErEw1lB,EAAan3lB,YAAY4+G,GACzBv/G,EAAQW,YAAYm3lB,GAEpB,IAAIC,EAAc53lB,EAAc,OAASmC,GAAI,wBAAyBD,UAAW,oCAAqCE,OAAQ,kBAE1Hy1lB,EAAgB73lB,EAAc,OAASmC,GAAI,iBAAkBD,UAAW,8CAC5E01lB,EAAYp3lB,YAAYq3lB,GAExB,IAAIC,EAAiB93lB,EAAc,OAASkC,UAAW,+CACvD01lB,EAAYp3lB,YAAYs3lB,GACxB,IAAIC,EAAc/3lB,EAAc,SAC5Ba,UAAWgM,EAAO+lE,YAAY,UAAW1wE,UAAW,iCACpDC,GAAItD,KAAKmH,OAAO7D,GAAK,eAAgBC,OAAQ,iCAE7CoylB,EAAYx0lB,EAAc,SAC1BsC,OAASiD,KAAQ,QAAUpD,GAAItD,KAAKmH,OAAO7D,GAAK,YAEpD01lB,EAAcr3lB,YAAYu3lB,GAC1BF,EAAcr3lB,YAAYg0lB,GAC1B,IAAIwD,EAAch4lB,EAAc,SAC5Ba,UAAWgM,EAAO+lE,YAAY,UAAW1wE,UAAW,iCAAkCE,OAAQ,+BAC9FD,GAAItD,KAAKmH,OAAO7D,GAAK,iBAErBsylB,EAAYz0lB,EAAc,SAC1BsC,OAASiD,KAAQ,QAAUpD,GAAItD,KAAKmH,OAAO7D,GAAK,YAEpD21lB,EAAet3lB,YAAYw3lB,GAC3BF,EAAet3lB,YAAYi0lB,GAC3B50lB,EAAQW,YAAYo3lB,GACpB/4lB,KAAK21lB,UAAY,IAAI99d,IAAiB76H,MAAO,IAAKgZ,MAAO,IAAKsjH,SAAU,IACxEt5H,KAAK21lB,UAAUt/iB,SAASs/iB,GACxB31lB,KAAK41lB,UAAY,IAAI/9d,IAAiB76H,MAAO,IAAKgZ,MAAO,IAAKsjH,SAAU,IACxEt5H,KAAK41lB,UAAUv/iB,SAASu/iB,IAK5Bt0G,EAAgBjmf,UAAU4oH,KAAO,WAC7B,IAAIo+Y,EAAa,IAAI7qZ,GAAK,iBAAkBx3G,KAAKsvf,MAAMA,MAAM3xE,eAC7D0kF,EAAW1qZ,UAAU33G,KAAKsvf,MAAMA,MAAMthf,QACtCL,GAAW3N,KAAKsvf,MAAMA,MAAMthf,QACvBhO,KAAKmH,QACNnH,KAAK47e,oBAAoBymB,GAE7BrigB,KAAKsvf,MAAMk8F,OAAO5mgB,OAASy9a,EAAWtub,YAAY,cAClD/zE,KAAKsvf,MAAMk8F,OAAOx1kB,MAAQ,OAC1BhW,KAAKsvf,MAAMk8F,OAAOz1kB,OAAS,OAC3B/V,KAAKsvf,MAAMk8F,OAAOpxjB,QAAUp6B,KAAKmH,OACjCnH,KAAKsvf,MAAMk8F,OAAOr1iB,WAAan2C,KAAKk1lB,oBACpCl1lB,KAAKsvf,MAAMk8F,OAAOvplB,MAAQjC,KAAK+1lB,qBAC/B/1lB,KAAKsvf,MAAMk8F,OAAOrle,UACVE,MAAOrmH,KAAKi2lB,yBACZ7ve,aAAehsF,QAASioe,EAAWtub,YAAY,MAAO9gE,SAAU,4BAA6B+qG,WAAW,KAGxGqI,MAAOrmH,KAAKurlB,oBACZnle,aAAehsF,QAASioe,EAAWtub,YAAY,UAAW9gE,SAAU,iCAE5EjT,KAAKsvf,MAAMk8F,OAAO5/hB,WAClB5rD,KAAKsvf,MAAMk8F,OAAOvne,QAKtBq9X,EAAgBjmf,UAAUiX,QAAU,WAsDhC,GArDItS,KAAKm1lB,eACLn1lB,KAAKm1lB,aAAa7ilB,UAClBtS,KAAKm1lB,kBAAeh6lB,GAEpB6E,KAAKo1lB,gBACLp1lB,KAAKo1lB,cAAc9ilB,UACnBtS,KAAKo1lB,mBAAgBj6lB,GAErB6E,KAAKq1lB,kBACLr1lB,KAAKq1lB,gBAAgB/ilB,UACrBtS,KAAKq1lB,qBAAkBl6lB,GAEvB6E,KAAKs1lB,iBACLt1lB,KAAKs1lB,eAAehjlB,UACpBtS,KAAKs1lB,oBAAiBn6lB,GAEtB6E,KAAK21lB,YACL31lB,KAAK21lB,UAAUrjlB,UACftS,KAAK21lB,eAAYx6lB,GAEjB6E,KAAK41lB,YACL51lB,KAAK41lB,UAAUtjlB,UACftS,KAAK41lB,eAAYz6lB,GAEjB6E,KAAKu1lB,WACLv1lB,KAAKu1lB,SAASjjlB,UACdtS,KAAKu1lB,cAAWp6lB,GAEhB6E,KAAKw1lB,YACLx1lB,KAAKw1lB,UAAUljlB,UACftS,KAAKw1lB,eAAYr6lB,GAEjB6E,KAAKm2lB,YACLn2lB,KAAKm2lB,UAAU7jlB,UACftS,KAAKm2lB,eAAYh7lB,GAEjB6E,KAAKy1lB,YACLz1lB,KAAKy1lB,UAAUnjlB,UACftS,KAAKy1lB,eAAYt6lB,GAEjB6E,KAAK01lB,YACL11lB,KAAK01lB,UAAUpjlB,UACftS,KAAK01lB,eAAYv6lB,GAEjB6E,KAAK81lB,WACL91lB,KAAK81lB,SAASxjlB,UACdtS,KAAK81lB,cAAW36lB,GAEhB6E,KAAK61lB,YACL71lB,KAAK61lB,UAAUvjlB,UACftS,KAAK61lB,eAAY16lB,GAErB6E,KAAKsvf,WAAQn0f,GACRsC,EAAkBuC,KAAKmH,QAAS,CAC7BnH,KAAKmH,OAAOkN,eACZrU,KAAKmH,OAAOkN,cAAc/O,YAAYtF,KAAKmH,QAE/C,IAAK,IAAIugC,EAAI,EAAGA,EAAI1nC,KAAKmH,OAAOoK,WAAW9U,OAAQirC,IAC/C1nC,KAAKmH,OAAO7B,YAAYtF,KAAKmH,OAAOoK,WAAWm2B,IAC/CA,IAEJ1nC,KAAKmH,YAAShM,IAGfmmf,KC1lBPG,GAAiC,WAIjC,SAASA,EAAgBrH,GACrB,IAAIr6e,EAAQC,KAEZA,KAAKipf,gBAAa9tf,EAClB6E,KAAKkpf,iBAAc/tf,EACnB6E,KAAKmpf,mBAAgBhuf,EACrB6E,KAAKopf,kBAAejuf,EACpB6E,KAAK2gC,mBAAgBxlC,EACrB6E,KAAK49O,qBAAkBziP,EACvB6E,KAAKixhB,mBAAgB91hB,EACrB6E,KAAKqpf,qBAAkBluf,EACvB6E,KAAK49e,qBAAkBzif,EAIvB6E,KAAKo5lB,uBAAyB,SAAU98lB,GACd,KAAlBA,EAAMwrB,SACN/nB,EAAMs5lB,wBAGdr5lB,KAAKs5lB,oBAAsB,SAAUh9lB,GACjCyD,EAAMopf,cAAgB7sf,EAAMU,OAEhCgD,KAAKu5lB,mBAAqB,SAAUj9lB,GAChCyD,EAAMqpf,aAAe9sf,EAAMU,OAE/BgD,KAAKw5lB,iBAAmB,SAAUl9lB,GAC9ByD,EAAMkpf,WAAa3sf,EAAMU,OAE7BgD,KAAKy5lB,kBAAoB,SAAUn9lB,GAC/ByD,EAAMmpf,YAAc5sf,EAAMU,OAE9BgD,KAAK05lB,uBAAyB,SAAUp9lB,GACpCyD,EAAMkxhB,cAAgB30hB,EAAMU,OAEhCgD,KAAK25lB,sBAAwB,SAAUr9lB,GACnCyD,EAAM69O,gBAAkBthP,EAAMU,OAElCgD,KAAK45lB,sBAAwB,SAAU35lB,GACnCF,EAAM4gC,cAAgB1gC,EAAKjD,OAK/BgD,KAAK0ulB,cAAgB,SAAUpylB,GAC3B,IAAIshf,EAAkB79e,EAAMuvf,MAAM1/a,UAAUgua,gBAC5C,OAAQ79e,EAAM85lB,QAAQ5nlB,OAClB,KAAK,EACuC,IAApC2re,EAAgBhgQ,kBAChB79O,EAAM+5lB,KAAK98lB,MAAQ,GAEvB,MACJ,KAAK,EACuC,IAApC4gf,EAAgBhgQ,iBAAyBngP,EAAkBmgf,EAAgBhgQ,iBAC3E79O,EAAM+5lB,KAAK98lB,MAAQ,GAEd4gf,EAAgBhgQ,gBAAkB,IACvC79O,EAAM+5lB,KAAK98lB,OAAU4gf,EAA+B,iBAExD,MACJ,KAAK,EACuC,IAApCA,EAAgBhgQ,iBAAyBngP,EAAkBmgf,EAAgBhgQ,iBAC3EggQ,EAAgBhgQ,iBAAmB,GAE9BggQ,EAAgBhgQ,gBAAkB,IACvC79O,EAAM+5lB,KAAK98lB,OAAU4gf,EAA+B,mBAQpE59e,KAAK+5lB,gBAAkB,SAAUz9lB,GAC7B,IAAImB,EAAkBsC,EAAMugP,aAG5B,OAAQvgP,EAAMugP,YAAYruO,OACtB,KAAK,EACDlS,EAAMspf,gBAAkB,UACxBtpf,EAAMi6lB,KAAKh9lB,MAAQ,GACnB,MACJ,KAAK,EACD+C,EAAMspf,gBAAkB,UACxBtpf,EAAMi6lB,KAAKh9lB,MAAQ,GACnB,MACJ,KAAK,EACD+C,EAAMspf,gBAAkB,WACxBtpf,EAAMi6lB,KAAKh9lB,MAAQ,IAQ/BgD,KAAKi6lB,oBAAsB,WACvB,IAAIC,EAEAA,EADAn6lB,EAAM69e,gBACY79e,EAAM69e,gBAGN79e,EAAMuvf,MAAM1/a,UAAUgua,gBAE5C,IAAIu8G,EAAap6lB,EAAMsvD,UAAUp9C,MAE7BkolB,EADkC,WAAlCD,EAAgBv5jB,cACH,EAE0B,SAAlCu5jB,EAAgBv5jB,cACR,EAE0B,UAAlCu5jB,EAAgBv5jB,cACR,EAGA,EAEjB5gC,EAAMsvD,UAAUp9C,MAAQkolB,EACxBp6lB,EAAM8whB,gBAAgB7zhB,MAAQk9lB,EAAgB/wG,cAC9Cppf,EAAM+whB,eAAe9zhB,MAAQk9lB,EAAgB9wG,aAC7Crpf,EAAM4whB,aAAa3zhB,MAAQk9lB,EAAgBjxG,WAC3Clpf,EAAM6whB,cAAc5zhB,MAAQk9lB,EAAgBhxG,YAC5Cnpf,EAAM+5lB,KAAK98lB,MAAQk9lB,EAAgBt8W,gBACnC,IAAIw8W,EAAiBr6lB,EAAMugP,YAAYruO,MAEnCmolB,EADoC,YAApCF,EAAgB7wG,gBACC,EAEwB,YAApC6wG,EAAgB7wG,gBACJ,EAGA,EAErBtpf,EAAMugP,YAAYruO,MAAQmolB,EAC1Br6lB,EAAMi6lB,KAAKh9lB,MAAQk9lB,EAAgB55W,YACe,SAA9CvgP,EAAMuvf,MAAM1/a,UAAU+yb,MAAMj+f,MAAM4xC,UAClCv2C,EAAMuvf,MAAM1/a,UAAU+yb,MAAMj+f,MAAM4xC,QAAU,SAMpDt2C,KAAKq5lB,qBAAuB,WACxB,IAAI1sF,EACA0tF,EACAt6lB,EAAM69e,iBACN+uB,EAAa5sgB,EAAM69e,gBACnBy8G,GAAU,IAGV1tF,EAAa,IAAI5pB,GACjBs3G,GAAU,GAET58lB,EAAkBsC,EAAMopf,iBACzBwjB,EAAWxjB,cAAgBppf,EAAMopf,eAEhC1rf,EAAkBsC,EAAMqpf,gBACzBujB,EAAWvjB,aAAerpf,EAAMqpf,cAE/B3rf,EAAkBsC,EAAMspf,mBACzBsjB,EAAWtjB,gBAAkBtpf,EAAMspf,iBAElC5rf,EAAkBsC,EAAMkpf,cACzB0jB,EAAW1jB,WAAalpf,EAAMkpf,YAE7Bxrf,EAAkBsC,EAAMmpf,eACzByjB,EAAWzjB,YAAcnpf,EAAMmpf,aAE9Bzrf,EAAkBsC,EAAMkxhB,iBACzBtkB,EAAWrsR,YAAcvgP,EAAMkxhB,eAE9BxzhB,EAAkBsC,EAAM69O,mBACzB+uR,EAAW/uR,gBAAkB79O,EAAM69O,iBAElCngP,EAAkBsC,EAAM4gC,iBACzBgse,EAAWhse,cAAgB5gC,EAAM4gC,eAEjC05jB,EACAt6lB,EAAMu6lB,kBAAkB3tF,GAGxB5sgB,EAAMuvf,MAAMA,MAAM5S,kBAAkBo7E,wBAExC/3jB,EAAMuvf,MAAMk8F,OAAOjqgB,QAKvBvhF,KAAKu6lB,qBAAuB,WACxBx6lB,EAAMkpf,gBAAa9tf,EACnB4E,EAAMqpf,kBAAejuf,EACrB4E,EAAMopf,mBAAgBhuf,EACtB4E,EAAM69O,qBAAkBziP,EACxB4E,EAAM4gC,mBAAgBxlC,EACtB4E,EAAMmpf,iBAAc/tf,EACpB4E,EAAMkxhB,mBAAgB91hB,EACtB4E,EAAMspf,qBAAkBluf,EACxB4E,EAAM69e,qBAAkBzif,EACxB4E,EAAMuvf,MAAMk8F,OAAOjqgB,OACnBxhF,EAAMuvf,MAAMpN,eAEhBlif,KAAKsvf,MAAQlV,EAwPjB,OAnPAqH,EAAgBpmf,UAAUkkC,cAAgB,WACtC,MAAO,mBAMXkid,EAAgBpmf,UAAUqgf,oBAAsB,SAAU1te,GACtD,IACIgilB,EAAUhwlB,KAAKsvf,MAAMA,MAAMh9W,YAC3BhvI,EAAK0slB,EAAU,oBACnBhwlB,KAAKmH,OAAShG,EAAc,OAASmC,GAAIA,EAAID,UAAW,4BAExD,IAAInC,EAAMC,EAAc,OAASmC,GAAI,eAAgBC,OAAQ,iBACzD0slB,EAAa9ulB,EAAc,OAASmC,GAAI,aAAcC,OAAQ,2BAA4BF,UAAW,gCAErG6slB,EAAW/ulB,EAAc,OAASmC,GAAI0slB,EAAU,YAAa3slB,UAAW,wBAAyBrB,UAAWgM,EAAO+lE,YAAY,aAC/HymhB,EAAar5lB,EAAc,OAASmC,GAAI0slB,EAAU,cAAe3slB,UAAW,sBAAuBrB,UAAWgM,EAAO+lE,YAAY,eACjI1kB,EAAYluD,EAAc,UAC1BmC,GAAI0slB,EAAU,aACdhulB,UAAW,0BAA4BgM,EAAO+lE,YAAY,UACtD,iCAAmC/lE,EAAO+lE,YAAY,QACtD,kCAAoC/lE,EAAO+lE,YAAY,SACvD,oCAAsC/lE,EAAO+lE,YAAY,WAAa,cAE9Ek8gB,EAAWtulB,YAAYuulB,GACvBD,EAAWtulB,YAAY64lB,GACvBvK,EAAWtulB,YAAY0tD,GAEvB,IAAIoriB,EAAet5lB,EAAc,OAASmC,GAAI,gBAAiBC,OAAQ,8BAA+BF,UAAW,gCAC7Gq3lB,EAAmBv5lB,EAAc,OAASmC,GAAI,iBAAkBC,OAAQ,kCAC5Ek3lB,EAAa94lB,YAAY+4lB,GAEzB,IAAIC,EAAoBx5lB,EAAc,OAASkC,UAAW,oCAAqCE,OAAQ,mCACvGk3lB,EAAa94lB,YAAYg5lB,GAEzB,IAAIC,EAAaz5lB,EAAc,OAASmC,GAAI,cAAeC,OAAQ,8BAA+BF,UAAW,gCACzGw3lB,EAAiB15lB,EAAc,OAASmC,GAAI,eAAgBC,OAAQ,kCACxEq3lB,EAAWj5lB,YAAYk5lB,GAEvB,IAAIC,EAAkB35lB,EAAc,OAASkC,UAAW,oCAAqCE,OAAQ,mCACrGq3lB,EAAWj5lB,YAAYm5lB,GAEvB,IAAIC,EAAc55lB,EAAc,OAC5BmC,GAAI0slB,EAAU,eAAgB3slB,UAAW,wBAAyBrB,UAAWgM,EAAO+lE,YAAY,iBAEhGinhB,EAAkB75lB,EAAc,OAChCmC,GAAI0slB,EAAU,eACd3slB,UAAW,sBAAuBrB,UAAWgM,EAAO+lE,YAAY,iBAGhEk1a,EAAa9nf,EAAc,SAAWmC,GAAI0slB,EAAU,cAAevslB,OAASiD,KAAQ,UACpFu0lB,EAAe95lB,EAAc,OAASmC,GAAI0slB,EAAU,gBAAiB3slB,UAAW,sBAAuBrB,UAAWgM,EAAO+lE,YAAY,aACrI8lhB,EAAU14lB,EAAc,UACxBmC,GAAI0slB,EAAU,WACdhulB,UAAW,wBAA0BgM,EAAO+lE,YAAY,QACpD,uCAAyC/lE,EAAO+lE,YAAY,cAC5D,oCAAsC/lE,EAAO+lE,YAAY,WAAa,eAE9E2mhB,EAAiB/4lB,YAAYo5lB,GAC7BL,EAAiB/4lB,YAAYq5lB,GAC7BN,EAAiB/4lB,YAAYsnf,GAC7ByxG,EAAiB/4lB,YAAYs5lB,GAC7BP,EAAiB/4lB,YAAYk4lB,GAE7B,IAAIqB,EAAiB/5lB,EAAc,OAASmC,GAAI0slB,EAAU,eAAgB3slB,UAAW,sBAAuBrB,UAAWgM,EAAO+lE,YAAY,gBACtIm1a,EAAc/nf,EAAc,SAAWmC,GAAI0slB,EAAU,eAAgBvslB,OAASiD,KAAQ,UAEtFy0lB,EAAUh6lB,EAAc,SAAWmC,GAAI0slB,EAAU,WAAY3slB,UAAW,sBAAuBrB,UAAWgM,EAAO+lE,YAAY,QAC7HqnhB,EAAKj6lB,EAAc,SAAWmC,GAAI0slB,EAAU,MAAOvslB,OAASiD,KAAQ,UACxEi0lB,EAAkBh5lB,YAAYu5lB,GAC9BP,EAAkBh5lB,YAAYunf,GAC9ByxG,EAAkBh5lB,YAAYw5lB,GAC9BR,EAAkBh5lB,YAAYy5lB,GAE9B,IAAIC,EAAal6lB,EAAc,OAASa,UAAWgM,EAAO+lE,YAAY,WAAY1wE,UAAW,wBAAyBC,GAAI0slB,EAAU,gBAChIsL,EAAcn6lB,EAAc,OAASkC,UAAW,sBAAuBrB,UAAWgM,EAAO+lE,YAAY,UAAWzwE,GAAI0slB,EAAU,iBAE9H7mG,EAAgBhof,EAAc,SAAWmC,GAAI0slB,EAAU,iBAAkBvslB,OAASiD,KAAQ,UAC1F60lB,EAAiBp6lB,EAAc,OAASmC,GAAI0slB,EAAU,kBAAmB3slB,UAAW,sBAAuBrB,UAAWgM,EAAO+lE,YAAY,kBAEzIusK,EAAcn/O,EAAc,UAC5BmC,GAAI0slB,EAAU,eAAgBzslB,OAAQ,eACtCvB,UAAW,4BAA8BgM,EAAO+lE,YAAY,YACxD,oCAAsC/lE,EAAO+lE,YAAY,WACzD,qCAAuC/lE,EAAO+lE,YAAY,YAAc,cAEhF8mhB,EAAel5lB,YAAY05lB,GAC3BR,EAAel5lB,YAAY25lB,GAC3BT,EAAel5lB,YAAYwnf,GAC3B0xG,EAAel5lB,YAAY45lB,GAC3BV,EAAel5lB,YAAY2+O,GAE3B,IAAIk7W,EAAar6lB,EAAc,OAASa,UAAWgM,EAAO+lE,YAAY,SAAU1wE,UAAW,sBAAuBC,GAAI0slB,EAAU,gBAC5H5mG,EAAejof,EAAc,SAAWmC,GAAI0slB,EAAU,gBAAiBvslB,OAASiD,KAAQ,UAExF+0lB,EAAUt6lB,EAAc,OAASa,UAAWgM,EAAO+lE,YAAY,MAAOzwE,GAAI0slB,EAAU,WAAY3slB,UAAW,wBAC3Gq4lB,EAAgBv6lB,EAAc,SAAWmC,GAAI0slB,EAAU,iBAAkBvslB,OAASiD,KAAQ,UAC9Fo0lB,EAAgBn5lB,YAAY65lB,GAC5BV,EAAgBn5lB,YAAYynf,GAC5B0xG,EAAgBn5lB,YAAY85lB,GAC5BX,EAAgBn5lB,YAAY+5lB,GAC5Bx6lB,EAAIS,YAAYsulB,GAChB/ulB,EAAIS,YAAY84lB,GAChBv5lB,EAAIS,YAAYi5lB,GAChB56lB,KAAKmH,OAAOxF,YAAYT,GACxBlB,KAAK2whB,aAAe,IAAI94Z,IACpB77F,OAAQ,KAAMh/B,MAAO,EAAG+iB,KAAM,KAAMzT,IAAK,KAAM0J,MAAO,IAAK41F,mBAAmB,EAAOxrF,OAAQpgB,KAAKw5lB,mBAEtGx5lB,KAAK2whB,aAAat6e,SAAS4yc,GAC3Bjpf,KAAK4whB,cAAgB,IAAI/4Z,IACrB77F,OAAQ,KAAMh/B,MAAO,EAAG+iB,KAAM,KAAMzT,IAAK,KAAM0J,MAAO,IAAK41F,mBAAmB,EAAOxrF,OAAQpgB,KAAKy5lB,oBAEtGz5lB,KAAK4whB,cAAcv6e,SAAS6yc,GAC5Blpf,KAAK85lB,KAAO,IAAIjie,IACZ77F,OAAQ,KAAMh/B,MAAO,EAAG+iB,IAAK,EAAGzT,IAAK,KAAM0J,MAAO,IAAK41F,mBAAmB,EAAOxrF,OAAQpgB,KAAK25lB,wBAElG35lB,KAAK85lB,KAAKzjjB,SAAS+kjB,GACnBp7lB,KAAK6whB,gBAAkB,IAAIh5Z,IACvB77F,OAAQ,KAAMh/B,MAAO,EAAG+iB,IAAK,EAAGzT,IAAK,KAAM0J,MAAO,IAAKi2E,KAAM,EAAG2f,mBAAmB,EACnFxrF,OAAQpgB,KAAKs5lB,sBAEjBt5lB,KAAK6whB,gBAAgBx6e,SAAS8yc,GAC9Bnpf,KAAK8whB,eAAiB,IAAIj5Z,IACtB77F,OAAQ,KAAMh/B,MAAO,EAAG+iB,IAAK,EAAGzT,IAAK,KAAM0J,MAAO,IAAKi2E,KAAM,EAAG2f,mBAAmB,EACnFxrF,OAAQpgB,KAAKu5lB,qBAEjBv5lB,KAAK8whB,eAAez6e,SAAS+yc,GAC7Bppf,KAAKg6lB,KAAO,IAAInie,IACZ77F,OAAQ,KAAMh/B,MAAO,EAAG+iB,IAAK,EAAGzT,IAAK,KAAM0J,MAAO,IAAKi2E,KAAM,GAAK2f,mBAAmB,EAAOxrF,OAAQpgB,KAAK05lB,yBAE7G15lB,KAAK65lB,QAAU,IAAIpmI,IAAerzc,OAAQpgB,KAAK0ulB,cAAe14kB,MAAO,MACrEhW,KAAK65lB,QAAQxjjB,SAASwjjB,GACtB75lB,KAAKsgP,YAAc,IAAImzO,IAAerzc,OAAQpgB,KAAK+5lB,gBAAiB/jlB,MAAO,UAC3EhW,KAAKsgP,YAAYjqM,SAASiqM,GAC1BtgP,KAAKqvD,UAAY,IAAIoka,IAAez9c,MAAO,IAAKoK,OAAQpgB,KAAK45lB,wBAC7D55lB,KAAKqvD,UAAUhZ,SAASgZ,GACxBrvD,KAAKg6lB,KAAK3jjB,SAASqljB,GACnB17lB,KAAKmH,OAAOzK,iBAAiB,QAlIdsD,KAkIgCo5lB,yBAOnD33G,EAAgBpmf,UAAUi/lB,kBAAoB,SAAU18G,GACpD59e,KAAKsvf,MAAMA,MAAM5U,aAAah8D,YAAY,mBAC1C,IAAI9uW,EAAY5vE,KAAKsvf,MAAM1/a,UAC3B5vE,KAAKsvf,MAAMA,MAAM9jB,mBAAoB,EACjCxre,KAAKsvf,MAAM1/a,UAAU0qK,QACrBt6O,KAAKsvf,MAAMA,MAAM5U,aAAa48E,wBAAwB1nf,EAAUryE,MAAMslf,eAAW1nf,EAAWyif,GAAiB,GAG7G59e,KAAKsvf,MAAMA,MAAM5U,aAAa88E,mCAAmC,kBAAmB55E,GAAiB,GAEzG59e,KAAKsvf,MAAMA,MAAM5U,aAAa+oE,SAAS7ze,IAK3C6xa,EAAgBpmf,UAAU4oH,KAAO,SAAU25X,GACnCA,IACA59e,KAAK49e,gBAAkBA,GAE3B,IAAI+9G,EAAQ,IAAInkf,GAAK,iBAAkBx3G,KAAKsvf,MAAMA,MAAM3xE,eACxDg+K,EAAMhkf,UAAU33G,KAAKsvf,MAAMA,MAAMthf,QACjCL,GAAW3N,KAAKsvf,MAAMA,MAAMthf,QACvBhO,KAAKmH,QACNnH,KAAK07e,oBAAoBigH,GAE7B37lB,KAAKi6lB,sBACLj6lB,KAAKsvf,MAAMk8F,OAAO5mgB,OAAS,YAC3B5kF,KAAKsvf,MAAMk8F,OAAOpxjB,QAAUp6B,KAAKmH,OACjCnH,KAAKsvf,MAAMk8F,OAAOz1kB,OAAS,OAC3B/V,KAAKsvf,MAAMk8F,OAAOx1kB,MAAQ,OAC1BhW,KAAKsvf,MAAMk8F,OAAOrle,UACVE,MAAOrmH,KAAKq5lB,qBACZjze,aAAehsF,QAASuhkB,EAAM5nhB,YAAY,MAAO9gE,SAAU,qBAAsB+qG,WAAW,KAG5FqI,MAAOrmH,KAAKu6lB,qBACZn0e,aAAehsF,QAASuhkB,EAAM5nhB,YAAY,UAAW9gE,SAAU,0BAEvEjT,KAAKsvf,MAAMk8F,OAAOr1iB,WAAan2C,KAAKsvf,MAAMpN,YAC1Clif,KAAKsvf,MAAMk8F,OAAOvplB,MAAQjC,KAAKsvf,MAAMpN,YACrClif,KAAKsvf,MAAMk8F,OAAO5/hB,WAClB5rD,KAAKsvf,MAAMk8F,OAAOvne,QAKtBw9X,EAAgBpmf,UAAUiX,QAAU,WAyChC,GAxCItS,KAAK8whB,iBACL9whB,KAAK8whB,eAAex+gB,UACpBtS,KAAK8whB,oBAAiB31hB,GAEtB6E,KAAK6whB,kBACL7whB,KAAK6whB,gBAAgBv+gB,UACrBtS,KAAK6whB,qBAAkB11hB,GAEvB6E,KAAK2whB,eACL3whB,KAAK2whB,aAAar+gB,UAClBtS,KAAK2whB,kBAAex1hB,GAEpB6E,KAAK4whB,gBACL5whB,KAAK4whB,cAAct+gB,UACnBtS,KAAK4whB,mBAAgBz1hB,GAErB6E,KAAK85lB,OACL95lB,KAAK85lB,KAAKxnlB,UACVtS,KAAK85lB,UAAO3+lB,GAEZ6E,KAAKg6lB,OACLh6lB,KAAKg6lB,KAAK1nlB,UACVtS,KAAKg6lB,UAAO7+lB,GAEZ6E,KAAKqvD,YACLrvD,KAAKqvD,UAAUjvC,YAASjlB,EACxB6E,KAAKqvD,UAAU/8C,WAEnBtS,KAAKqvD,eAAYl0D,EACb6E,KAAKsgP,cACLtgP,KAAKsgP,YAAYlgO,YAASjlB,EAC1B6E,KAAKsgP,YAAYhuO,WAErBtS,KAAKsgP,iBAAcnlP,EACf6E,KAAK65lB,UACL75lB,KAAK65lB,QAAQz5kB,YAASjlB,EACtB6E,KAAK65lB,QAAQvnlB,WAEjBtS,KAAK65lB,aAAU1+lB,EACf6E,KAAKsvf,WAAQn0f,GACRsC,EAAkBuC,KAAKmH,QAAS,CAC7BnH,KAAKmH,OAAOkN,eACZrU,KAAKmH,OAAOkN,cAAc/O,YAAYtF,KAAKmH,QAE/C,IAAK,IAAI6lJ,EAAI,EAAGA,EAAIhtJ,KAAKmH,OAAOoK,WAAW9U,OAAQuwJ,IAC/ChtJ,KAAKmH,OAAO7B,YAAYtF,KAAKmH,OAAOoK,WAAWy7I,IAC/CA,IAEJhtJ,KAAKmH,YAAShM,IAGfsmf,KCpcPm6G,GAA+B,WAI/B,SAASA,IACL57lB,KAAK67lB,YAAS1gmB,EACd6E,KAAK87lB,mBAAgB3gmB,EAIrB6E,KAAKwrlB,YAASrwlB,EACd6E,KAAK+lf,YAAc,EAmKvB,OAjKAznf,OAAOuJ,eAAe+zlB,EAAcvgmB,UAAW,eAI3CqM,IAAK,WACD,OAAO1H,KAAK87lB,eAKhBz0lB,IAAK,SAAUrK,GACXgD,KAAK87lB,cAAgB9+lB,GAEzB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe+zlB,EAAcvgmB,UAAW,QAI3CqM,IAAK,WACD,OAAO1H,KAAK67lB,QAKhBx0lB,IAAK,SAAUrK,GACPS,EAAkBT,GAClBgD,KAAKs5L,aAGLt5L,KAAK67lB,OAAS7+lB,GAGtB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe+zlB,EAAcvgmB,UAAW,aAI3CqM,IAAK,WACD,IAAKjK,EAAkBuC,KAAK6iG,OAAS7iG,KAAK+lf,aAAe,GAAK/lf,KAAK+lf,YAAc,EAAG,CAChF,GAAKtof,EAAkBuC,KAAKwrlB,OAAOl8F,MAAMif,oBAAoBvugB,KAAK6iG,KAAKujZ,iBAMlE,CACDpmf,KAAKwrlB,OAAOl8F,MAAMhzO,MAAM93Q,KAAKxE,KAAK6iG,MAClC,IAAIwjZ,EAAermf,KAAK6iG,KAAKwjZ,aACxBrmf,KAAK6iG,KAAKwjZ,gBACXA,EAAe,IAAIse,IACNve,eAAiBpmf,KAAK6iG,KAAKujZ,gBAE5C,IAAI21G,EAAe,IAAIl3F,GAAWxe,GAWlC,OAVA01G,EAAa/9G,gBAAkB,IAAIgF,GAAiB+4G,GACpDA,EAAan+G,gBAAkB,IAAImF,GAAiBg5G,GACpDA,EAAan+G,gBAAgBqL,WAAa,GAC1C8yG,EAAan+G,gBAAgBhgQ,iBAAmB,GAChDm+W,EAAa/2F,aAAe,IAAM,GAAI93f,WAAa,IACnD6ulB,EAAaz3F,iBAAmB,UAChCy3F,EAAah3F,gBAAkB,MAC/Bg3F,EAAa/1G,QAAU,EACvB+1G,EAAa92F,aAAe,EAC5BjlgB,KAAKwrlB,OAAOl8F,MAAMnP,cAAc37e,KAAK6hf,GAC9Brmf,KAAKwrlB,OAAOl8F,MAAMif,oBAAoBvugB,KAAK6iG,KAAKujZ,gBAAgBhna,OAAO,GApB9E,OAHIp/E,KAAKwrlB,OAAOl8F,MAAMif,oBAAoBvugB,KAAK6iG,KAAKujZ,gBAAgBhna,OAAO3iF,QAAUuD,KAAK+lf,aACtF/lf,KAAKsrgB,gBAEFtrgB,KAAKwrlB,OAAOl8F,MAAMif,oBAAoBvugB,KAAK6iG,KAAKujZ,gBAAgBhna,OAAOp/E,KAAK+lf,eA0B/Fp+e,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe+zlB,EAAcvgmB,UAAW,oBAI3CqM,IAAK,WACD,OAAKjK,EAAkBuC,KAAKsof,WAGrB,SAFItof,KAAKsof,UAAUgc,kBAO9Bj9f,IAAK,SAAUrK,GACNS,EAAkBuC,KAAKsof,aACxBtof,KAAKsof,UAAUgc,iBAAmBtngB,IAG1C2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe+zlB,EAAcvgmB,UAAW,mBAI3CqM,IAAK,WACD,OAAKjK,EAAkBuC,KAAKsof,WAGrB,OAFItof,KAAKsof,UAAUyc,iBAO9B19f,IAAK,SAAUrK,GACNS,EAAkBuC,KAAKsof,aACxBtof,KAAKsof,UAAUyc,gBAAkB/ngB,IAGzC2K,YAAY,EACZC,cAAc,IAElBg0lB,EAAcvgmB,UAAUi+L,WAAa,WACjCt5L,KAAK6iG,KAAO,IAAIojZ,GAChBjmf,KAAK6iG,KAAKqjZ,OAASlmf,KAAKwrlB,OAAOl8F,MAAMhzO,MAAM7/Q,OAAS,EACpD,IAAI4pf,EAAe,IAAIse,GACvBte,EAAaD,eAAiBpmf,KAAKwrlB,OAAOl8F,MAAMnP,cAAc1jf,OAAS,EACvEuD,KAAK6iG,KAAKujZ,eAAiBC,EAAaD,eACxCpmf,KAAKwrlB,OAAOl8F,MAAMhzO,MAAM93Q,KAAKxE,KAAK6iG,MAClC,IAAIylZ,EAAY,IAAIuc,GAAWxe,GAC/BiC,EAAU1K,gBAAkB,IAAImF,GAAiBuF,GACjDA,EAAU1K,gBAAgBqL,WAAa,GACvCX,EAAU1K,gBAAgBhgQ,iBAAmB,GAC7C0qQ,EAAUtK,gBAAkB,IAAIgF,GAAiBsF,GACjDA,EAAU0c,aAAe,MACzB1c,EAAUtC,QAAU,EACpBK,EAAajna,OAAO56E,KAAK8jf,GACzBtof,KAAKwrlB,OAAOl8F,MAAMnP,cAAc37e,KAAK6hf,IAEzCu1G,EAAcvgmB,UAAUiwgB,cAAgB,WACpC,IAAK7tgB,EAAkBuC,KAAK6iG,QAAUplG,EAAkBuC,KAAK6iG,KAAKujZ,gBAC9D,IAAK,IAAIjqf,EAAI6D,KAAKwrlB,OAAOl8F,MAAMif,oBAAoBvugB,KAAK6iG,KAAKujZ,gBAAgBhna,OAAO3iF,OAAQN,EAAI,EAAGA,IAAK,CACpG,IAAI4/lB,EAAe,IAAIl3F,GAAW7kgB,KAAKwrlB,OAAOl8F,MAAMif,oBAAoBvugB,KAAK6iG,KAAKujZ,iBAClF21G,EAAa/9G,gBAAkB,IAAIgF,GAAiB+4G,GACpDA,EAAan+G,gBAAkB,IAAImF,GAAiBg5G,GACpDA,EAAan+G,gBAAgBqL,WAAuB,IAAT9sf,EAAI,GAC/C4/lB,EAAan+G,gBAAgBhgQ,iBAAmB,GAChDm+W,EAAa/2F,aAAe,KAAO7ogB,EAAI,GAAG+Q,WAAa,IACvD6ulB,EAAaz3F,iBAAmB,SAChCy3F,EAAah3F,gBAAkB,MAC/Bg3F,EAAa/1G,QAAU,EACvB+1G,EAAa92F,aAAe9ogB,EAC3B6D,KAAKwrlB,OAAY,MAAEj9E,oBAAoBvugB,KAAK6iG,KAAKujZ,gBAAgBhna,OAAO56E,KAAKu3lB,KAO1FH,EAAcvgmB,UAAUiX,QAAU,WAC9BtS,KAAK6iG,UAAO1nG,EACZ6E,KAAK+kgB,qBAAkB5pgB,EACvB6E,KAAK+lf,iBAAc5qf,EACnB6E,KAAKskgB,sBAAmBnpgB,GAErBygmB,KCzKPp6G,GAA4B,WAI5B,SAASA,EAAWpH,GAChB,IAAIr6e,EAAQC,KAIZA,KAAKwrlB,YAASrwlB,EACd6E,KAAKmH,YAAShM,EAId6E,KAAKsvf,WAAQn0f,EACb6E,KAAKg8lB,eAAY7gmB,EACjB6E,KAAKgmf,aAAU7qf,EACf6E,KAAKioN,gBAAa9sN,EAClB6E,KAAKi8lB,eAAY9gmB,EACjB6E,KAAKk8lB,sBAAmB/gmB,EACxB6E,KAAKm8lB,sBAAmBhhmB,EACxB6E,KAAK4tR,iBAAczyR,EACnB6E,KAAKglgB,kBAAe7pgB,EACpB6E,KAAKo8lB,eAAYjhmB,EAIjB6E,KAAKq8lB,uBAAwB,EAC7Br8lB,KAAKs8lB,oBAAsB,SAAUr8lB,GACjCF,EAAMi8lB,UAAU1zG,UAAU1K,gBAAgBqL,WAAahpf,EAAKjD,OAEhEgD,KAAKu8lB,oBAAsB,SAAUt8lB,GACjCF,EAAMi8lB,UAAU1zG,UAAUtC,QAAU/lf,EAAKjD,OAE7CgD,KAAKw8lB,wBAA0B,SAAUv8lB,GACrCF,EAAMi8lB,UAAUj2G,YAAchxd,SAAS90B,EAAKjD,MAAMqE,MAAMpB,EAAKjD,MAAMP,OAAS,GAAI,IAAM,EAClFgB,EAAkBsC,EAAMuof,aAGxB7qf,EAAkBsC,EAAMuof,UAAUtK,mBAClCj+e,EAAMuof,UAAUtK,gBAAkB,IAAIgF,GAAiBjjf,EAAMi8lB,UAAU1zG,YAEtE7qf,EAAkBsC,EAAMuof,UAAU1K,mBACnC79e,EAAMuof,UAAU1K,gBAAkB,IAAImF,GAAiBhjf,EAAMi8lB,UAAU1zG,YAE3Evof,EAAM08lB,qBACN18lB,EAAM28lB,0BAEV18lB,KAAK28lB,sBAAwB,SAAU18lB,GACnCF,EAAMi8lB,UAAU1zG,UAAU0c,aAAe/kgB,EAAKkH,OAAOnK,OAEzDgD,KAAK48lB,wBAA0B,SAAU38lB,GACrCF,EAAMi8lB,UAAU1zG,UAAU1K,gBAAgBhgQ,gBAAkB39O,EAAKjD,OAErEgD,KAAK68lB,8BAAgC,SAAU58lB,GACvCA,EAAKjD,QACL+C,EAAMi8lB,UAAUj3F,gBAAkB9kgB,EAAKjD,QAG/CgD,KAAK88lB,2BAA6B,SAAU78lB,GACxCF,EAAMi8lB,UAAU13F,iBAAmBrkgB,EAAKjD,MACxC,IAAIgogB,EAAe,KAAOjlgB,EAAMgmf,YAAc,GAAG74e,WAE7C6vlB,EAAsBv8lB,SAASosB,eAAe7sB,EAAMuvf,MAAMA,MAAMh9W,YAAc,iBACzC,WAArCvyI,EAAMuof,UAAUgc,kBAChBvkgB,EAAMuof,UAAU0c,aAAe,IAC/B+3F,EAAoB//lB,MAAQ+C,EAAMuof,UAAU0c,aAC5CjlgB,EAAMuof,UAAUtK,gBAAgB/wd,WAAa,cAGJ,SAArCltB,EAAMuof,UAAUgc,mBAChBvkgB,EAAMuof,UAAU0c,aAAe,IAE9BjlgB,EAAMuof,UAAU0c,aAAar1f,MAAMq1f,IAAsD,SAArCjlgB,EAAMuof,UAAUgc,mBACrEvkgB,EAAMuof,UAAU0c,aAAeA,EAAe,KAElD+3F,EAAoB//lB,MAAQ+C,EAAMuof,UAAU0c,eAGpDhlgB,KAAKg9lB,eAAiB,WAClBj9lB,EAAMuvf,MAAMpN,cACRzkf,EAAkBsC,EAAMuvf,MAAMA,SAGlCvvf,EAAMi8lB,UAAY,IAAIJ,GACtB77lB,EAAMi8lB,UAAUxQ,OAASzrlB,EACrBA,EAAMuvf,MAAM1/a,UAAUgua,gBAAgBmJ,gBAAkB,IACxDhnf,EAAMi8lB,UAAUj2G,YAAchmf,EAAMuvf,MAAM1/a,UAAUgua,gBAAgBmJ,iBAExEhnf,EAAMi8lB,UAAUn5f,KAAO9iG,EAAMuvf,MAAM1/a,UAAUgua,gBAAgB4zC,UACzD/zhB,EAAkBsC,EAAMuof,aAGxB7qf,EAAkBsC,EAAMuof,UAAUtK,mBAClCj+e,EAAMuof,UAAUtK,gBAAkB,IAAIgF,GAAiBjjf,EAAMi8lB,UAAU1zG,YAEvE7qf,EAAkBsC,EAAMuof,UAAU1K,mBAClC79e,EAAMuof,UAAU1K,gBAAkB,IAAImF,GAAiBhjf,EAAMi8lB,UAAU1zG,YAE3Evof,EAAM08lB,qBAC4C,SAA9C18lB,EAAMuvf,MAAM1/a,UAAU+yb,MAAMj+f,MAAM4xC,UAClCv2C,EAAMuvf,MAAM1/a,UAAU+yb,MAAMj+f,MAAM4xC,QAAU,WAGpDt2C,KAAK+9e,eAAiB,WAClBh+e,EAAMuvf,MAAMA,MAAMzT,iBAAiBkC,eAAeh+e,EAAMuof,UAAUtK,kBAEtEh+e,KAAK6xhB,YAAc,WACVp0hB,EAAkBsC,EAAMuvf,QACzBvvf,EAAMuvf,MAAM1/a,UAAUgua,gBAAgBg0C,QAAQ7xhB,EAAM8iG,MAExD9iG,EAAMuvf,MAAM2tG,QAAQ17gB,OACpBxhF,EAAMuvf,MAAMpN,eAEhBlif,KAAKurlB,oBAAsB,WACvBxrlB,EAAMm9lB,0BACNn9lB,EAAMuvf,MAAM2tG,QAAQ17gB,OACpBxhF,EAAMuvf,MAAMpN,cACZnif,EAAMs8lB,uBAAwB,GAElCr8lB,KAAKm9lB,gBAAkB,WACnBp9lB,EAAMm9lB,0BACNn9lB,EAAMuvf,MAAMpN,cACZnif,EAAMs8lB,uBAAwB,GAElCr8lB,KAAKsvf,MAAQlV,EACbp6e,KAAKg8lB,UAAY,IAAIJ,GA4RzB,OA1RAt9lB,OAAOuJ,eAAe25e,EAAWnmf,UAAW,aAIxCqM,IAAK,WACD,IAAKjK,EAAkBuC,KAAKg8lB,WACxB,OAAOh8lB,KAAKg8lB,UAAU1zG,WAI9B3gf,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe25e,EAAWnmf,UAAW,QAIxCqM,IAAK,WACD,IAAKjK,EAAkBuC,KAAKg8lB,WACxB,OAAOh8lB,KAAKg8lB,UAAUn5f,MAI9Bl7F,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe25e,EAAWnmf,UAAW,eAIxCqM,IAAK,WACD,OAAI1H,KAAKsof,UAAUrD,qBAAqBY,GAC7B7lf,KAAKsof,UAAUrD,UAAUc,YAG3B/lf,KAAKsof,UAAUrD,qBAAqB0f,KAAkBlngB,EAAkBuC,KAAKsof,UAAUrD,UAAU7la,QAC/Fp/E,KAAKsof,UAAUrD,UAAU7la,OAAO7gF,QAAQyB,KAAKsof,YAG5C,GAGhB3gf,YAAY,EACZC,cAAc,IAKlB45e,EAAWnmf,UAAUkkC,cAAgB,WACjC,MAAO,cAKXiid,EAAWnmf,UAAUsjf,eAAiB,WAClC,IAAI3we,EAAS,IAAIwpG,GAAK,iBAAkBx3G,KAAKsvf,MAAMA,MAAM3xE,eACzD3va,EAAO2pG,UAAU33G,KAAKsvf,MAAMA,MAAMthf,QAClCL,GAAW3N,KAAKsvf,MAAMA,MAAMthf,QACvBhO,KAAKmH,QACNnH,KAAKm8e,eAAenue,GAExBhO,KAAKq8lB,uBAAwB,EAC7Br8lB,KAAKsvf,MAAM2tG,QAAQr4gB,OAAS52E,EAAO+lE,YAAY,QAC/C/zE,KAAKsvf,MAAM2tG,QAAQlnlB,OAAS,OAC5B/V,KAAKsvf,MAAM2tG,QAAQjnlB,MAAQ,OAC3BhW,KAAKsvf,MAAM2tG,QAAQ7ikB,QAAUp6B,KAAKmH,OAClCnH,KAAKsvf,MAAM2tG,QAAQ92e,UACXE,MAAOrmH,KAAK+9e,eACZ33X,aAAehsF,QAASpsB,EAAO+lE,YAAY,QAAS9gE,SAAU,mCAE9DozG,MAAOrmH,KAAK6xhB,YACZzra,aAAehsF,QAASpsB,EAAO+lE,YAAY,MAAO9gE,SAAU,oBAAqB+qG,WAAW,KAG5FqI,MAAOrmH,KAAKurlB,oBACZnle,aAAehsF,QAASpsB,EAAO+lE,YAAY,UAAW9gE,SAAU,uBAExEjT,KAAKsvf,MAAM2tG,QAAQrxiB,WACnB5rD,KAAKsvf,MAAM2tG,QAAQ9mjB,WAAan2C,KAAKg9lB,eACrCh9lB,KAAKsvf,MAAM2tG,QAAQh7lB,MAAQjC,KAAKm9lB,gBAChCn9lB,KAAKsvf,MAAM2tG,QAAQ/olB,UAAakC,EAAG,SAAUC,EAAG,OAChDrW,KAAKsvf,MAAM2tG,QAAQh5e,QAMvBu9X,EAAWnmf,UAAU8gf,eAAiB,SAAUnue,GAC5C,IACIskI,EAActyI,KAAKsvf,MAAMA,MAAMh9W,YAC/BhvI,EAAKgvI,EAAc,eACvBtyI,KAAKmH,OAAShG,EAAc,OAASmC,GAAIA,EAAID,UAAW,kBACxDrD,KAAKsvf,MAAMA,MAAMtuf,QAAQW,YAAY3B,KAAKmH,QAE1C,IAAIi2lB,EAAej8lB,EAAc,OAASa,UAAW,cAAgBswI,EAAc,iFAAmFtkI,EAAO+lE,YAAY,cAAgB,sBAAwBu+D,EAAc,sEAAwEtkI,EAAO+lE,YAAY,0BAA4B,qDAAuDu+D,EAAc,uBAAyBtkI,EAAO+lE,YAAY,WAAa,oBAAsB/lE,EAAO+lE,YAAY,WAAa,oBAAsB/lE,EAAO+lE,YAAY,WAAa,oBAAsB/lE,EAAO+lE,YAAY,WAAa,oBAAsB/lE,EAAO+lE,YAAY,WAAa,oBAAsB/lE,EAAO+lE,YAAY,WAAa,oBAAsB/lE,EAAO+lE,YAAY,WAAa,oBAAsB/lE,EAAO+lE,YAAY,WAAa,oBAAsB/lE,EAAO+lE,YAAY,WAAa,uBACp5B/zE,KAAKmH,OAAOxF,YAAYy7lB,GACxB,IAAIl8lB,EAAMC,EAAc,OAEpBk8lB,EAAiBl8lB,EAAc,OAASa,UAAW,qDAAuDswI,EAAc,yEAA2EtkI,EAAO+lE,YAAY,iBAAmB,sBAAwBu+D,EAAc,2EAA6EtkI,EAAO+lE,YAAY,+BAAiC,sDAAwDu+D,EAAc,yBAA2BtkI,EAAO+lE,YAAY,UAAY,oBAAsB/lE,EAAO+lE,YAAY,WAAa,oBAAsB/lE,EAAO+lE,YAAY,YAAc,oBAAsB/lE,EAAO+lE,YAAY,YAAc,oBAAsB/lE,EAAO+lE,YAAY,aAAe,oBAAsB/lE,EAAO+lE,YAAY,UAAY,oBAAsB/lE,EAAO+lE,YAAY,gBAAkB,oBAAsB/lE,EAAO+lE,YAAY,UAAY,oBAAsB/lE,EAAO+lE,YAAY,WAAa,oBAAsB/lE,EAAO+lE,YAAY,gBAAkB,oBAAsB/lE,EAAO+lE,YAAY,WAAa,oBAAsB/lE,EAAO+lE,YAAY,YAAc,gCAAkCu+D,EAAc,6EAA+EtkI,EAAO+lE,YAAY,YAAc,kCAAoCu+D,EAAc,eACr0CpxI,EAAIS,YAAY07lB,GAEhB,IAAIC,EAAkBn8lB,EAAc,OAASkC,UAAW,uBAAwBrB,UAAW,wBAA0BswI,EAAc,sFAAwFtkI,EAAO+lE,YAAY,yBAA2B,uBAAyBu+D,EAAc,iIAAmIA,EAAc,iDAAmDA,EAAc,6EAA+EtkI,EAAO+lE,YAAY,cAAgB,sDAAwDu+D,EAAc,uBAAyBtkI,EAAO+lE,YAAY,cAAgB,6BACtvB7yE,EAAIS,YAAY27lB,GAChBt9lB,KAAKmH,OAAOxF,YAAYT,GAExB,IAAIq8lB,EAAap8lB,EAAc,OAASa,UAAW,qDAAuDswI,EAAc,oEAAsEtkI,EAAO+lE,YAAY,WAAa,sBAAwBu+D,EAAc,0EAA4EtkI,EAAO+lE,YAAY,kBAAoB,kCAAoCu+D,EAAc,2BAA6BA,EAAc,qFAAuFtkI,EAAO+lE,YAAY,sBAAwB,sDAAwDu+D,EAAc,6BAA+BtkI,EAAO+lE,YAAY,OAAS,oBAAsB/lE,EAAO+lE,YAAY,SAAW,oBAAsB/lE,EAAO+lE,YAAY,WAAa,qEAAuEu+D,EAAc,yEAA2EtkI,EAAO+lE,YAAY,cAAgB,kCAAoCu+D,EAAc,uBACtjCtyI,KAAKmH,OAAOxF,YAAY47lB,GACxB,IAAIC,EAAiBh9lB,SAASosB,eAAe0lH,EAAc,YACvDmrd,EAAsBj9lB,SAASosB,eAAe0lH,EAAc,eAC5Dord,EAAmBl9lB,SAASosB,eAAe0lH,EAAc,cAC7DtyI,KAAKgmf,QAAU,IAAInuX,IACf77F,OAAQ,IACRs9F,SAAU,EACVv5G,IAAK,EACLzT,IAAK,GACL0J,MAAO,QACP41F,mBAAmB,IAEvB5rG,KAAKgmf,QAAQtpf,iBAAiB,SA9BfsD,KA8BkCu8lB,qBACjDv8lB,KAAKgmf,QAAQ3vc,SAASmnjB,GACtBx9lB,KAAKioN,WAAa,IAAIpwF,IAClB77F,OAAQ,IACRs9F,SAAU,EACVv5G,IAAK,EACLzT,IAAK,KACL0J,MAAO,QACPi2E,KAAM,EACN2f,mBAAmB,IAEvB5rG,KAAKioN,WAAWvrN,iBAAiB,SAzClBsD,KAyCqCs8lB,qBACpDt8lB,KAAKioN,WAAW5xK,SAASonjB,GACzBz9lB,KAAKi8lB,UAAY,IAAIpke,IACjB77F,OAAQ,IACR1vB,IAAK,KACL2/E,KAAM,EACNj2E,MAAO,QACP41F,mBAAmB,IAEvB5rG,KAAKi8lB,UAAUv/lB,iBAAiB,SAlDjBsD,KAkDoC48lB,yBACnD58lB,KAAKi8lB,UAAU5ljB,SAASqnjB,GACxB,IAAIp1G,EAAY9nf,SAASosB,eAAe0lH,EAAc,cACtDtyI,KAAKk8lB,iBAAmB,IAAIzoI,IAAe5rQ,YAAa,QAAS7xM,MAAO,QAASoK,OArDlEpgB,KAqDmFw8lB,0BAClGx8lB,KAAKk8lB,iBAAiB7ljB,SAASiyc,GAC/B,IAAIq1G,EAAyBn9lB,SAASosB,eAAe0lH,EAAc,oBACnEtyI,KAAKm8lB,iBAAmB,IAAI1oI,IAAe5rQ,YAAa,QAAS7xM,MAAO,QAASoK,OAxDlEpgB,KAwDmF68lB,gCAClG78lB,KAAKm8lB,iBAAiB9ljB,SAASsnjB,GAC/B,IAAIC,EAAiBp9lB,SAASosB,eAAe0lH,EAAc,gBAC3DtyI,KAAK4tR,YAAc,IAAI6lM,IAAe5rQ,YAAa,QAAS7xM,MAAO,QAASoK,OA3D7DpgB,KA2D8E88lB,6BAC7F98lB,KAAK4tR,YAAYv3O,SAASunjB,GAC1B59lB,KAAKglgB,aAAexkgB,SAASosB,eAAe0lH,EAAc,iBAC1DtyI,KAAKglgB,aAAatogB,iBAAiB,SA9DpBsD,KA8DuC28lB,uBACtD,IAAIkB,EAAiBr9lB,SAASosB,eAAe0lH,EAAc,cAC3DtyI,KAAKo8lB,UAAY,IAAI3oI,IAAe5rQ,YAAa,QAAS7xM,MAAO,UACjEhW,KAAKo8lB,UAAU/ljB,SAASwnjB,GACxB,IAAI1se,EAAS3wH,SAASosB,eAAe0lH,EAAc,cACnDtyI,KAAK89lB,kBAAoB,IAAI9njB,IAAUhgC,MAAO,MAE9ChW,KAAK89lB,kBAAkB1jkB,QAAUpsB,EAAO+lE,YAAY,YACpD/zE,KAAK89lB,kBAAkB5plB,SAAW,WAClClU,KAAK89lB,kBAAkBznjB,SAAS86E,IAEpCqwX,EAAWnmf,UAAUqhmB,sBAAwB,WAIzC,IAAK,IAHDpqd,EAActyI,KAAKsvf,MAAMA,MAAMh9W,YAC/Bg2W,EAAY9nf,SAASosB,eAAe0lH,EAAc,cAClD8pd,EAAY57lB,SAASosB,eAAe0lH,EAAc,cAC7Cn2I,EAAI,EAAGA,EAAIigmB,EAAUpplB,QAAQvW,OAAQN,EAC1CigmB,EAAUpplB,QAAQzO,OAAOpI,GAE7B,GAAgC,IAA5Bmsf,EAAU5tb,cAAqB,EAC3Bq7B,EAASv1F,SAASW,cAAc,WAC7BnE,MAAQ,aACf+4F,EAAO/zF,UAAY,aACnBo6lB,EAAUz6lB,YAAYo0F,OAErB,CACD,IAAS55F,EAAImsf,EAAU5tb,cAAev+D,EAAI,EAAGA,IAAK,CAC9C,IAAI4hmB,EAAWv9lB,SAASW,cAAc,UACtC48lB,EAAS/gmB,MAAQ,SAAWb,EAC5B4hmB,EAAS/7lB,UAAY,SAAW7F,EAChCigmB,EAAUz6lB,YAAYo8lB,GAE1B,IAAIhogB,GAAAA,EAASv1F,SAASW,cAAc,WAC7BnE,MAAQ,aACf+4F,EAAO/zF,UAAY,aACnBo6lB,EAAUz6lB,YAAYo0F,GAE1BqmgB,EAAU1hiB,cAAgB,GAE9B8mb,EAAWnmf,UAAU2imB,qBAAuB,SAAU15F,GAClD,OAAQA,GACJ,IAAK,SAAU,OAAO,EACtB,IAAK,UAAW,OAAO,EACvB,IAAK,WAAY,OAAO,EACxB,IAAK,WAAY,OAAO,EACxB,IAAK,YAAa,OAAO,EACzB,IAAK,SAAU,OAAO,EACtB,IAAK,cAAe,OAAO,EAC3B,IAAK,SAAU,OAAO,EACtB,IAAK,UAAW,OAAO,EACvB,IAAK,cAAe,OAAO,EAC3B,IAAK,UAAW,OAAO,GACvB,IAAK,UAAW,OAAO,GACvB,QAAS,OAAO,KAGxB9iB,EAAWnmf,UAAU4imB,yBAA2B,SAAUl5F,GACtD,OAAQA,GACJ,IAAK,MACD,OAAO,EACX,IAAK,QACD,OAAO,EACX,QACI,OAAO,IAGnBvjB,EAAWnmf,UAAUohmB,mBAAqB,WAEfj8lB,SAASosB,eAAe5sB,KAAKsvf,MAAMA,MAAMh9W,YAAc,cAC9EtyI,KAAKgmf,QAAQhpf,MAAQgD,KAAKg8lB,UAAU1zG,UAAUtC,QAC9Chmf,KAAKioN,WAAWjrN,MAAQgD,KAAKg8lB,UAAU1zG,UAAU1K,gBAAgBqL,WACjEjpf,KAAKi8lB,UAAUj/lB,MAAQgD,KAAKg8lB,UAAU1zG,UAAU1K,gBAAgBhgQ,gBAChE59O,KAAKm8lB,iBAAiBlqlB,MAAQjS,KAAKi+lB,yBAAyBj+lB,KAAKg8lB,UAAUj3F,iBAC3E/kgB,KAAKglgB,aAAahogB,MAAQgD,KAAKg8lB,UAAU1zG,UAAU0c,aACnDhlgB,KAAK4tR,YAAY37Q,MAAQjS,KAAKg+lB,qBAAqBh+lB,KAAKg8lB,UAAU13F,kBAClEtkgB,KAAKk8lB,iBAAiBjqlB,MAAQjS,KAAKg8lB,UAAUj2G,YAC7C/lf,KAAKg8lB,UAAUj2G,YAAc/lf,KAAKg8lB,UAAUj2G,aAEhDvE,EAAWnmf,UAAU6hmB,wBAA0B,WAC3Cl9lB,KAAKm8lB,iBAAiBlqlB,OAAS,EAC/BjS,KAAKglgB,aAAahogB,MAAQ,IAC1BgD,KAAK4tR,YAAY37Q,OAAS,EAC1BjS,KAAKk8lB,iBAAiBjqlB,OAAS,EAC/BjS,KAAKo8lB,UAAUnqlB,OAAS,EACxBjS,KAAKg8lB,UAAU1plB,WAKnBkve,EAAWnmf,UAAUiX,QAAU,WA+B3B,GA9BItS,KAAKi8lB,WACLj8lB,KAAKi8lB,UAAU3plB,UAEnBtS,KAAKi8lB,eAAY9gmB,EACjB6E,KAAKwrlB,YAASrwlB,EACV6E,KAAKm8lB,kBACLn8lB,KAAKm8lB,iBAAiB7plB,UAE1BtS,KAAKm8lB,sBAAmBhhmB,EACpB6E,KAAKk8lB,kBACLl8lB,KAAKk8lB,iBAAiB5plB,UAE1BtS,KAAKk8lB,sBAAmB/gmB,EACpB6E,KAAKioN,YACLjoN,KAAKioN,WAAW31M,UAEpBtS,KAAKioN,gBAAa9sN,EACd6E,KAAKgmf,SACLhmf,KAAKgmf,QAAQ1ze,UAEjBtS,KAAKgmf,aAAU7qf,EACX6E,KAAK4tR,aACL5tR,KAAK4tR,YAAYt7Q,UAErBtS,KAAK4tR,iBAAczyR,EACnB6E,KAAKglgB,kBAAe7pgB,EAChB6E,KAAKo8lB,WACLp8lB,KAAKo8lB,UAAU9plB,UAEnBtS,KAAKo8lB,eAAYjhmB,GACZsC,EAAkBuC,KAAKmH,QAAS,CAC7BnH,KAAKmH,OAAOkN,eACZrU,KAAKmH,OAAOkN,cAAc/O,YAAYtF,KAAKmH,QAE/C,IAAK,IAAIsgC,EAAI,EAAGA,EAAIznC,KAAKmH,OAAOoK,WAAW9U,OAAQgrC,IAC/CznC,KAAKmH,OAAO7B,YAAYtF,KAAKmH,OAAOoK,WAAWk2B,IAC/CA,IAEJznC,KAAKmH,YAAShM,EAElB6E,KAAKsvf,WAAQn0f,EACb6E,KAAKg8lB,eAAY7gmB,GAEdqmf,KC7ZPD,GAA6B,WAI7B,SAASA,EAAYnH,GACjB,IAAIr6e,EAAQC,KACZA,KAAKmH,YAAShM,EACd6E,KAAK8jf,eAAY3of,EACjB6E,KAAKk+lB,kBAAe/imB,EACpB6E,KAAKm+lB,oBAAiBhjmB,EACtB6E,KAAKo+lB,sBAAmBjjmB,EACxB6E,KAAKiP,cAAW9T,EAChB6E,KAAKitB,gBAAa9xB,EAClB6E,KAAK6sB,cAAW1xB,EAChB6E,KAAKg+e,qBAAkB7if,EACvB6E,KAAK49e,qBAAkBzif,EAEvB6E,KAAKq+lB,WAAa,SAAUp+lB,GACxB,OAAQA,EAAK4d,KAAKva,IACd,IAAK,aACDvD,EAAMg+e,iBACN,MACJ,IAAK,kBACDh+e,EAAM49e,sBACN,MACJ,IAAK,kBACD59e,EAAMu+lB,8BAIlBt+lB,KAAKu+lB,gBAAkB,WACnBx+lB,EAAMi+e,gBAAgBtvc,MAAQ3uC,EAAMi+e,gBAAgBtvc,KACpD3uC,EAAMy+lB,uBAAkBrjmB,IAE5B6E,KAAKy+lB,kBAAoB,WACrB1+lB,EAAMi+e,gBAAgBzsc,QAAUxxC,EAAMi+e,gBAAgBzsc,OACtDxxC,EAAMy+lB,uBAAkBrjmB,IAE5B6E,KAAK0+lB,qBAAuB,WACxB3+lB,EAAMi+e,gBAAgB9oO,UAAgD,SAApCn1Q,EAAMi+e,gBAAgB9oO,UAAuB,SAAW,OAC1Fn1Q,EAAMy+lB,uBAAkBrjmB,IAG5B6E,KAAKw+lB,kBAAoB,SAAUv+lB,GAC3BF,EAAMi+e,gBAAgBtvc,KACjB3uC,EAAM2uC,KAAK5qC,UAAUK,SAAS,aAC/BpE,EAAM2uC,KAAK5qC,UAAUM,IAAI,YAIzBrE,EAAM2uC,KAAK5qC,UAAUK,SAAS,aAC9BpE,EAAM2uC,KAAK5qC,UAAUS,OAAO,YAGhCxE,EAAMi+e,gBAAgBzsc,OACjBxxC,EAAMwxC,OAAOztC,UAAUK,SAAS,aACjCpE,EAAMwxC,OAAOztC,UAAUM,IAAI,YAI3BrE,EAAMwxC,OAAOztC,UAAUK,SAAS,aAChCpE,EAAMwxC,OAAOztC,UAAUS,OAAO,iBAGEpJ,IAApC4E,EAAMi+e,gBAAgB9oO,WAA+D,SAApCn1Q,EAAMi+e,gBAAgB9oO,UAClEn1Q,EAAMm1Q,UAAUpxQ,UAAUK,SAAS,cACpCpE,EAAMm1Q,UAAUpxQ,UAAUM,IAAI,YAC9BrE,EAAMi+e,gBAAgB9oO,UAAY,UAIlCn1Q,EAAMm1Q,UAAUpxQ,UAAUK,SAAS,cACnCpE,EAAMm1Q,UAAUpxQ,UAAUS,OAAO,YACjCxE,EAAMi+e,gBAAgB9oO,UAAY,SAK9Cl1Q,KAAK2+lB,eAAiB,SAAU1+lB,GAC5BF,EAAMi+e,gBAAgBnxd,SAAW5sB,EAAKjD,OAG1CgD,KAAK4+lB,kBAAoB,SAAU3+lB,GAC/BF,EAAMi+e,gBAAgB/wd,WAAahtB,EAAKjD,OAG5CgD,KAAK6+lB,gBAAkB,SAAU5+lB,GAC7BF,EAAMi+e,gBAAgBsM,UAAYrqf,EAAK4pI,aAAayc,MAExDtmJ,KAAK8+lB,iBAAmB,WACwB,SAAxC/+lB,EAAM69e,gBAAgBj9c,cACtB5gC,EAAM69e,gBAAgBj9c,cAAgB,UAGtC5gC,EAAM69e,gBAAgBj9c,cAAgB,OAE1C5gC,EAAM+3jB,yBAEV93jB,KAAK++lB,kBAAoB,WACuB,UAAxCh/lB,EAAM69e,gBAAgBj9c,cACtB5gC,EAAM69e,gBAAgBj9c,cAAgB,OAGtC5gC,EAAM69e,gBAAgBj9c,cAAgB,QAE1C5gC,EAAM+3jB,yBAEV93jB,KAAKg/lB,mBAAqB,WACsB,WAAxCj/lB,EAAM69e,gBAAgBj9c,cACtB5gC,EAAM69e,gBAAgBj9c,cAAgB,OAGtC5gC,EAAM69e,gBAAgBj9c,cAAgB,SAE1C5gC,EAAM+3jB,yBAEV93jB,KAAKi/lB,oBAAsB,WACqB,YAAxCl/lB,EAAM69e,gBAAgBj9c,cACtB5gC,EAAM69e,gBAAgBj9c,cAAgB,OAGtC5gC,EAAM69e,gBAAgBj9c,cAAgB,UAE1C5gC,EAAM+3jB,yBAEV93jB,KAAKk/lB,2BAA6B,WAC9Bn/lB,EAAM69e,gBAAgBuL,eAAiB,EACvCppf,EAAM69e,gBAAgBwL,cAAgB,GAE1Cppf,KAAKm/lB,2BAA6B,WAC1Bp/lB,EAAM69e,gBAAgBuL,eAAiB,EACvCppf,EAAM69e,gBAAgBuL,eAAiB,EAGvCppf,EAAM69e,gBAAgBuL,cAAgB,EAEtCppf,EAAM69e,gBAAgBwL,cAAgB,EACtCrpf,EAAM69e,gBAAgBwL,cAAgB,EAGtCrpf,EAAM69e,gBAAgBwL,aAAe,GAM7Cppf,KAAKo/lB,gBAAkB,SAAUn/lB,GAC7B,IAAIo/lB,EAAYp/lB,EAAKiqd,WAAWltd,MAChC,GAA6B,cAAzB+C,EAAMu/lB,iBAAmC7hmB,EAAkB4hmB,IAA4B,KAAdA,IAAqBt/lB,EAAMw/lB,sBAAuB,CAC3H,IAAIh8lB,EAASxD,EAAMuvf,MAAMA,MAAMlV,OAAO72e,OAAOsgf,cAAc9jf,EAAMu/lB,gBAC7Dv/lB,EAAMy/lB,SACNj8lB,EAASA,EAAOyjC,OAAO,SAAUnmC,GAAK,OAAOA,IAAMd,EAAM0/lB,iBAE7Dl8lB,EAAOiB,KAAK66lB,GACZt/lB,EAAMo+lB,eAAe56hB,WAAahgE,EAClCxD,EAAMo+lB,eAAelslB,MAAQ,KAC7BlS,EAAMo+lB,eAAelslB,MAAQ1O,EAAOhF,QAAQ8gmB,GAC5Ct/lB,EAAMo+lB,eAAevyiB,aAM7B5rD,KAAK0/lB,eAAiB,WACF3/lB,EAAMoH,OAAOuG,uBAAuB,qCAAqCmQ,KAAK,GAAG7gB,MACjG+C,EAAM4/lB,2BAMV3/lB,KAAK4/lB,gBAAkB,SAAU3/lB,GAC7B,GAAIA,EAAK6hM,aAAc,CACnB,IAAIp7L,OAAO,EACQ,cAAfzG,EAAKjD,QACL+C,EAAM2E,MAAQ,IAAI+nf,GAClB/lf,EAAO,aAEQ,cAAfzG,EAAKjD,OAAwC,oCAAfiD,EAAKjD,QACnC+C,EAAM2E,MAAQ,IAAIsif,GAClBtgf,EAAO,aAEX3G,EAAM8/lB,gBACN9/lB,EAAM+/lB,iBAAiBp5lB,KAI/B1G,KAAK+/lB,mBAAqB,SAAU9/lB,KAOpCD,KAAKggmB,qBAAuB,SAAU//lB,GAC9BA,EAAK6hM,eACL/hM,EAAMw/lB,uBAAwB,IAOtCv/lB,KAAK+9e,eAAiB,WACbtgf,EAAkBsC,EAAMuvf,MAAMA,MAAMzT,mBACrC97e,EAAMuvf,MAAMA,MAAMvR,eAAeh+e,EAAMi+e,iBAE3Cj+e,EAAM01jB,yBAKVz1jB,KAAK29e,oBAAsB,WAClBlgf,EAAkBsC,EAAMuvf,MAAMA,MAAMpjB,wBACrCnse,EAAMuvf,MAAMA,MAAM3R,oBAAoB59e,EAAM69e,kBAMpD59e,KAAKs+lB,0BAA4B,WAC7Bv+lB,EAAMkgmB,sBAAwB,IAAIv+G,GAA0B3hf,EAAMuvf,MAAMA,MAAMlV,QAC9Er6e,EAAMkgmB,sBAAsBC,uBAAuBngmB,EAAM2E,MAAMk5e,gBAAgBgG,WAAY7jf,EAAMsmf,eAKrGrmf,KAAKmgmB,gBAAkB,WACnB,IAAIp0G,EAAYhsf,EAAMqgmB,iBAAiBpjmB,MACvC,KAAI+uf,EAAUtvf,OAAS,GA+CnB,MAAM,IAAImE,MAAM,0BA9ChB,IACIk0E,EADApwE,EAAQ3E,EAAMuvf,MAAMA,MAAMlV,OAAO72e,OAAOmgf,WAAWqI,GAEvD,GAAKtuf,EAAkBiH,GAmBlB,CAED,IAAIoif,EAAU/mf,EAAMuvf,MAAMA,MAAMlV,OAAO72e,OAAOmgf,WAAW3jf,EAAMm+lB,aAAalhmB,OAC9C,cAA1B+C,EAAM+jf,UAAU9mf,OAAmD,oCAA1B+C,EAAM+jf,UAAU9mf,QACrD+uf,IAAchsf,EAAMo+lB,eAAenhmB,MACnC+C,EAAM2E,MAAM4jC,KAAOvoC,EAAM2E,MAGzB3E,EAAM2E,MAAM4jC,KAAOvoC,EAAMuvf,MAAMA,MAAMlV,OAAO72e,OAAOmgf,WAAW3jf,EAAMo+lB,eAAenhmB,OAEvF+C,EAAM4rT,cAGV5rT,EAAM2E,MAAMyuD,KAAkC,oCAA1BpzD,EAAM+jf,UAAU9mf,MAA+C+C,EAAMsgmB,gBAAgBt0G,QAAa5wf,EACtH4E,EAAM2E,MAAMgC,KAAO3G,EAAMu/lB,eACzBv/lB,EAAM2E,MAAM+yB,KAAOs0d,EACnBhsf,EAAM2E,MAAMoif,QAAUA,EAEtB/mf,EAAMuvf,MAAMA,MAAMlV,OAAO72e,OAAOiB,KAAKzE,EAAM2E,OAC3CowE,EAASi3a,EACThsf,EAAMuvf,MAAMA,MAAM5U,aAAaslC,WAAWlrc,QAtC1C/0E,EAAM2E,MAAMgC,KAAO3G,EAAMu/lB,eACzBv/lB,EAAM2E,MAAMoif,QAAU/mf,EAAMuvf,MAAMA,MAAMlV,OAAO72e,OAAOmgf,WAAW3jf,EAAMm+lB,aAAalhmB,OACtD,cAA1B+C,EAAM+jf,UAAU9mf,OAAmD,oCAA1B+C,EAAM+jf,UAAU9mf,QACzD+C,EAAM2E,MAAM4jC,KAAOvoC,EAAMuvf,MAAMA,MAAMlV,OAAO72e,OAAOmgf,WAAW3jf,EAAMo+lB,eAAenhmB,OACnF+C,EAAM2E,MAAMs5e,gBAAgBuJ,YAAY7if,EAAMs5e,iBAC9Cj+e,EAAM2E,MAAMk5e,gBAAgB2J,YAAY7if,EAAMk5e,iBAC9C79e,EAAM4rT,aAEN5rT,EAAM2E,MAAMyuD,KAAkC,oCAA1BpzD,EAAM+jf,UAAU9mf,MAA+C+C,EAAMsgmB,gBAAgBt0G,EAAWhsf,EAAMy/lB,aAAUrkmB,GAGxI4E,EAAM2E,MAAM+yB,KAAO/yB,EAAM+yB,KACzBq9C,EAASpwE,EAAM+yB,KACf/yB,EAAQ3E,EAAM2E,MACd3E,EAAMuvf,MAAMA,MAAM9jB,mBAAoB,EACtCzre,EAAMuvf,MAAMA,MAAM5U,aAAay3C,sBAC/BpyhB,EAAMuvf,MAAMA,MAAM9jB,mBAAoB,EAwB1Czre,EAAMuvf,MAAMA,MAAMlV,OAAO6iH,QAAQ17gB,OAKjCxhF,EAAM2E,OAKd1E,KAAKsgmB,gBAAkB,SAAUrgmB,GAC7BF,EAAMuvf,MAAMA,MAAMlV,OAAO8H,cACzBnif,EAAMw/lB,uBAAwB,EAE9Bx/lB,EAAMqgmB,iBAAmBrgmB,EAAMoH,OAAOuG,uBAAuB,qCAAqCmQ,KAAK,GACvG9d,EAAMqgmB,iBAAiBpjmB,MAAQ,KAC1B+C,EAAMy/lB,SACPz/lB,EAAM+jf,UAAU7xe,MAAQ,GAE5B,IAAIwlB,EACA13B,EAAMy/lB,SACNz/lB,EAAMqgmB,iBAAiBpjmB,MAAQ+C,EAAM0/lB,cACrChokB,EAAO13B,EAAM0/lB,eAGjB1/lB,EAAMwgmB,SAAWxgmB,EAAMuvf,MAAM2tG,QAAQj8lB,QAAQ0M,uBAAuB,uBAAuBmQ,KAAK,GAChG9d,EAAM4/lB,0BACN5/lB,EAAM+/lB,iBAAiB//lB,EAAMu/lB,eAAgB7nkB,GAC7C13B,EAAM01jB,sBAAsB11jB,EAAM2E,MAAMs5e,iBACxCj+e,EAAM+3jB,sBAAsB/3jB,EAAM2E,MAAMk5e,kBAK5C59e,KAAKurlB,oBAAsB,YAClBxrlB,EAAMy/lB,QAAUz/lB,EAAM2E,OACvB3E,EAAM2E,MAAM4N,UAEhBvS,EAAMuvf,MAAMA,MAAMlV,OAAO6iH,QAAQ17gB,QAKrCvhF,KAAKwgmB,iBAAmB,WACpBzgmB,EAAMuvf,MAAMA,MAAMlV,OAAO8H,eAE7Blif,KAAKsvf,MAAQlV,EAsiBjB,OAjiBAmH,EAAYlmf,UAAUkkC,cAAgB,WAClC,MAAO,eAMXgid,EAAYlmf,UAAUshf,gBAAkB,SAAU0lB,GAC9C,IACI/+f,EAAKtD,KAAKsvf,MAAMA,MAAMh9W,YAAc,SACxCtyI,KAAKmH,OAAShG,EAAc,OAASmC,GAAIA,EAAID,UAAW,sBACxD,IAAIoX,EAAYtZ,EAAc,OAE1B8B,EAAa9B,EAAc,OAASkC,UAAW,wBAAyBrB,UAAWqggB,EAAWtub,YAAY,gBAC9Gt5D,EAAU9Y,YAAYsB,GACtB,IAAIw9lB,EAAmBt/lB,EAAc,OAASoC,OAAQ,eAAgBF,UAAW,4BACjFoX,EAAU9Y,YAAY8+lB,GACtB,IAAIC,EAAev/lB,EAAc,OAASkC,UAAW,wBACrDo9lB,EAAiB9+lB,YAAY++lB,GAC7B,IAAIjpkB,EAAOt2B,EAAc,OAASkC,UAAW,kBAAmBrB,UAAWqggB,EAAWtub,YAAY,QAAU,MAC5G2shB,EAAa/+lB,YAAY81B,GAEzB,IAAIkpkB,EAAYx/lB,EAAc,SAAWmC,GAAItD,KAAKsvf,MAAMA,MAAMh9W,YAAc,cAAe/uI,OAAQ,eAAgBF,UAAW,sCAC9Hs9lB,EAAUjkmB,iBAAiB,QAASsD,KAAK0/lB,gBACzCiB,EAAUjkmB,iBAAiB,QAASsD,KAAK0/lB,gBACzCiB,EAAUjkmB,iBAAiB,OAAQsD,KAAKo/lB,iBACxCsB,EAAa/+lB,YAAYg/lB,GACzB,IAAIC,EAAoBz/lB,EAAc,OACtCs/lB,EAAiB9+lB,YAAYi/lB,GAE7B,IAAI98G,EAAY3if,EAAc,OAASkC,UAAW,uBAAwBrB,UAAWqggB,EAAWtub,YAAY,cAAgB,MAC5H6shB,EAAkBj/lB,YAAYmif,GAC9B,IAAI+8G,EAAsB1/lB,EAAc,OAASkC,UAAW,8BACxDy9lB,EAAiB3/lB,EAAc,UAAYmC,GAAI,0BAEnDw9lB,EAAe9+lB,UAAY,uGAC3B6+lB,EAAoBl/lB,YAAYm/lB,GAChC9gmB,KAAK8jf,UAAY,IAAIrwB,IAAerzc,OAAQpgB,KAAK4/lB,gBAAiB/3Y,YAAa,QAAS7xM,MAAO,UAC/FhW,KAAK8jf,UAAUztc,SAASyqjB,GACxBF,EAAkBj/lB,YAAYk/lB,GAE9B,IAAIE,EAAoB5/lB,EAAc,OAASoC,OAAQ,eAAgBF,UAAW,8BAClFoX,EAAU9Y,YAAYo/lB,GACtB,IAAIC,EAAuB7/lB,EAAc,OAASkC,UAAW,wBAC7D09lB,EAAkBp/lB,YAAYq/lB,GAE9B,IAAI9C,EAAe/8lB,EAAc,OAASkC,UAAW,4BAA6BrB,UAAWqggB,EAAWtub,YAAY,kBAAoB,MACxIithB,EAAqBr/lB,YAAYu8lB,GACjC,IAAI+C,EAAyB9/lB,EAAc,OAASkC,UAAW,kCAE3D69lB,EAAoB//lB,EAAc,SAAWmC,GAAI,oCAErD29lB,EAAuBt/lB,YAAYu/lB,GACnClhmB,KAAKk+lB,aAAe,IAAIzqI,IAAelwZ,cAAgB99D,OAAQzF,KAAK+/lB,mBAAoBl4Y,YAAa,QAAS7xM,MAAO,UACrHhW,KAAKk+lB,aAAa7njB,SAAS6qjB,GAC3BF,EAAqBr/lB,YAAYs/lB,GACjC,IAAIE,EAAyBhgmB,EAAc,OAASkC,UAAW,wBAC/D09lB,EAAkBp/lB,YAAYw/lB,GAE9B,IAAIhD,EAAiBh9lB,EAAc,OAASkC,UAAW,6BAA8BrB,UAAWqggB,EAAWtub,YAAY,iCAAmC,MAC1JothB,EAAuBx/lB,YAAYw8lB,GACnC,IAAIiD,EAA2BjgmB,EAAc,OAASkC,UAAW,mCAE7Dg+lB,EAAsBlgmB,EAAc,SAAWmC,GAAI,qCAGvD89lB,EAAyBz/lB,YAAY0/lB,GACrCrhmB,KAAKm+lB,eAAiB,IAAI1qI,IAAelwZ,cAAgB99D,OAAQzF,KAAKggmB,qBAAsBn4Y,YAAa,QAAS7xM,MAAO,UACzHhW,KAAKm+lB,eAAe9njB,SAASgrjB,GAC7BF,EAAuBx/lB,YAAYy/lB,GAEnC,IAAIE,EAAangmB,EAAc,OAASkC,UAAW,wBAAyBrB,UAAWqggB,EAAWtub,YAAY,gBAC9Gt5D,EAAU9Y,YAAY2/lB,GACtB,IAAIC,EAAapgmB,EAAc,OAASkC,UAAW,2BACnDoX,EAAU9Y,YAAY4/lB,GACtB,IAAIC,EAAiBrgmB,EAAc,OAASoC,OAAQ,sCACpDg+lB,EAAW5/lB,YAAY6/lB,GACvBxhmB,KAAKyhmB,kBAAkBD,GACvB,IAAIE,EAAsBvgmB,EAAc,OAASoC,OAAQ,eAAgBF,UAAW,sBACpFk+lB,EAAW5/lB,YAAY+/lB,GACvB1hmB,KAAK2hmB,uBAAuBD,GAkB5B1hmB,KAAK4hmB,qBAAqBnnlB,EAAW4nf,GACrCrigB,KAAKmH,OAAOxF,YAAY8Y,IAE5B8me,EAAYlmf,UAAUummB,qBAAuB,SAAUr4I,EAAW84C,GAC9D,IAAItigB,EAAQC,KACR6hmB,EAAY1gmB,EAAc,UAAYmC,GAAI,wBAAyBtB,UAAWqggB,EAAWtub,YAAY,YACzG8thB,EAAUn9lB,MAAMqR,OAAS,OACzBwzc,EAAU5nd,YAAYkgmB,GACtB,IAAIpniB,IAAWhuC,KAAM41e,EAAWtub,YAAY,UAAWzwE,GAAI,eACrDmpB,KAAM41e,EAAWtub,YAAY,eAAgBzwE,GAAI,oBACjDmpB,KAAM41e,EAAWtub,YAAY,eAAgBzwE,GAAI,oBACnDw+lB,EAAc,IAAIzxe,IAClB51D,MAAOA,EAAOxnD,SAAU,4BACxBqgH,iBAAkB,SAAUrzH,GACM,cAA1BF,EAAM+jf,UAAU9mf,OACO,cAAnBiD,EAAK4d,KAAK4O,MACVxsB,EAAKe,QAAQ8C,UAAUM,IAAI,cAER,cAAnBnE,EAAK4d,KAAK4O,MACVxsB,EAAKe,QAAQ8C,UAAUM,IAAI,gBAIR,cAAnBnE,EAAK4d,KAAK4O,MACVxsB,EAAKe,QAAQ8C,UAAUS,OAAO,cAEX,cAAnBtE,EAAK4d,KAAK4O,MACVxsB,EAAKe,QAAQ8C,UAAUS,OAAO,kBAK9Cu9lB,EAAYzrjB,SAASwrjB,GACrBC,EAAYplmB,iBAAiB,SAAUsD,KAAKq+lB,aAEhD98G,EAAYlmf,UAAUommB,kBAAoB,SAAUl4I,GAChD,IAAIw4I,EAAoB5gmB,EAAc,UAAYmC,GAAItD,KAAKmH,OAAO7D,GAAK,cACvEy+lB,EAAkB//lB,UAAY,6qBAO9Bund,EAAU5nd,YAAYogmB,GACtB/hmB,KAAKitB,WAAa,IAAI6uc,IAClB9ld,MAAO,QAAS8tM,WAAY,QAC5B7wM,SAAU,4BAA6BmN,OAAQpgB,KAAK4+lB,oBAExD5+lB,KAAKitB,WAAW7H,iBAAkB,EAClCplB,KAAKitB,WAAWopB,SAAS0rjB,GACzB,IAAIC,EAAkB7gmB,EAAc,SACpCood,EAAU5nd,YAAYqgmB,GAEtBhimB,KAAK6sB,SAAW,IAAIivc,IAChBv4Z,YAFkB,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAEhDvtD,MAAO,OAAQ/C,SAAU,4BACrDmN,OAAQpgB,KAAK2+lB,iBAEjB3+lB,KAAK6sB,SAASzH,iBAAkB,EAChCplB,KAAK6sB,SAASwpB,SAAS2rjB,GACvB,IAAIC,EAAkB9gmB,EAAc,OAASkC,UAAW,iCACxDkmd,EAAU5nd,YAAYsgmB,GAEtBjimB,KAAK0uC,KAAO1uC,KAAKkimB,oBAAoBD,EAAiB,YAAa,8BAA+BjimB,KAAKsvf,MAAMA,MAAMh9W,YAAc,eACjItyI,KAAK0uC,KAAKhyC,iBAAiB,QAASsD,KAAKu+lB,iBAEzCv+lB,KAAKuxC,OAASvxC,KAAKkimB,oBAAoBD,EAAiB,cAAe,8BAA+BjimB,KAAKsvf,MAAMA,MAAMh9W,YAAc,iBACrItyI,KAAKuxC,OAAO70C,iBAAiB,QAASsD,KAAKy+lB,mBAE3Cz+lB,KAAKk1Q,UAAYl1Q,KAAKkimB,oBAAoBD,EAAiB,iBAAkB,8BAA+BjimB,KAAKsvf,MAAMA,MAAMh9W,YAAc,oBAC3ItyI,KAAKk1Q,UAAUx4Q,iBAAiB,QAASsD,KAAK0+lB,sBAC9C,IAAIyD,EAAmBhhmB,EAAc,SAAWsC,OAASiD,KAAM,SAAWrD,UAAW,gCACrFkmd,EAAU5nd,YAAYwgmB,GACtBnimB,KAAKsqf,UAAY,IAAItlW,IAAc/xI,SAAU,+BAAgCmN,OAAQpgB,KAAK6+lB,kBAC1F7+lB,KAAKsqf,UAAUj0c,SAAS8rjB,IAE5B5gH,EAAYlmf,UAAUsmmB,uBAAyB,SAAUp4I,GACrD,IAAIxpd,EAAQC,KACRoimB,EAAejhmB,EAAc,OAASkC,UAAW,sCACrDkmd,EAAU5nd,YAAYygmB,GACtBpimB,KAAKqimB,UAAYrimB,KAAKkimB,oBAAoBE,EAAc,kBAAmB,+BAC3EpimB,KAAKqimB,UAAU3lmB,iBAAiB,QAASsD,KAAK8+lB,kBAC9C9+lB,KAAKsimB,YAActimB,KAAKkimB,oBAAoBE,EAAc,oBAAqB,+BAC/EpimB,KAAKsimB,YAAY5lmB,iBAAiB,QAASsD,KAAKg/lB,oBAChDh/lB,KAAKunkB,WAAavnkB,KAAKkimB,oBAAoBE,EAAc,mBAAoB,+BAC7EpimB,KAAKunkB,WAAW7qkB,iBAAiB,QAASsD,KAAK++lB,mBAC/C/+lB,KAAK4vgB,QAAU5vgB,KAAKkimB,oBAAoBE,EAAc,eAAgB,oCACtEpimB,KAAK4vgB,QAAQlzgB,iBAAiB,QAASsD,KAAKi/lB,qBAC5C,IAAIsD,EAAiBphmB,EAAc,OAASkC,UAAW,sCACvDkmd,EAAU5nd,YAAY4gmB,GACtBvimB,KAAKwimB,kBAAoBximB,KAAKkimB,oBAAoBK,EAAgB,sBAAuB,qCACzFvimB,KAAKwimB,kBAAkB9lmB,iBAAiB,QAAS,WAC7CqD,EAAM69e,gBAAgBt9P,YAAc,EACpCvgP,EAAM+3jB,0BAGV93jB,KAAKyimB,wBAA0BzimB,KAAKkimB,oBAAoBK,EAAgB,8BAA+B,+BACvGvimB,KAAKyimB,wBAAwB/lmB,iBAAiB,QAAS,WACnDqD,EAAM69e,gBAAgBt9P,YAAc,IACpCvgP,EAAM+3jB,0BAEV93jB,KAAK0imB,kBAAoB1imB,KAAKkimB,oBAAoBK,EAAgB,sBAAuB,oCACzFvimB,KAAK0imB,kBAAkBhmmB,iBAAiB,QAAS,WAC7CqD,EAAM69e,gBAAgBt9P,YAAc,EACpCvgP,EAAM+3jB,0BAEV,IAAI8iC,EAAaz5lB,EAAc,OAASkC,UAAW,sCACnDkmd,EAAU5nd,YAAYi5lB,GACtB,IAAIzxG,EAAgBnpf,KAAKkimB,oBAAoBtH,EAAY,sBAAuB,qCAC5ExxG,EAAeppf,KAAKkimB,oBAAoBtH,EAAY,qBAAsB,oCAC9EzxG,EAAczsf,iBAAiB,QAASsD,KAAKk/lB,4BAC7C91G,EAAa1sf,iBAAiB,QAASsD,KAAKm/lB,4BAC5C,IAAIwD,EAAexhmB,EAAc,OAASkC,UAAW,6CACrDkmd,EAAU5nd,YAAYghmB,GACD3imB,KAAKkimB,oBAAoBS,EAAc,cAAe,qCAC5DjmmB,iBAAiB,QAAS,WACjCqD,EAAM69e,gBAAgBqL,YAAc,GACpClpf,EAAM69e,gBAAgBqL,YAAc,GAGpClpf,EAAM69e,gBAAgBqL,WAAa,IAGtBjpf,KAAKkimB,oBAAoBS,EAAc,eAAgB,+BAC7DjmmB,iBAAiB,QAAS,WACrCqD,EAAM69e,gBAAgBqL,YAAc,MAG5C1H,EAAYlmf,UAAU6mmB,oBAAsB,SAAU34I,EAAW71Y,EAASrwE,EAAWC,GACjF,IAAIs/lB,EAAgBzhmB,EAAc,UAC7B1D,EAAkB6F,KACnBs/lB,EAAct/lB,GAAKA,GAEvBimd,EAAU5nd,YAAYihmB,GAGtB,OAFa,IAAI7kf,IAASrqC,QAASA,EAASzgE,SAAU5P,IAC/CgzC,SAASusjB,GACTA,GAEXrhH,EAAYlmf,UAAUwkmB,cAAgB,WACL,cAAzB7/lB,KAAK8jf,UAAU9mf,OACfgD,KAAKm+lB,eAAel5kB,SAAU,EAE9BjlB,KAAKmH,OAAOuG,uBAAuB,qBAAqBmQ,KAAK,GAAGra,aAAa,QAAS,kDAGtFxD,KAAKm+lB,eAAel5kB,SAAU,EAC9BjlB,KAAKmH,OAAOuG,uBAAuB,qBAAqBmQ,KAAK,GAAGnS,gBAAgB,SAChF1L,KAAKmH,OAAOuG,uBAAuB,qBAAqBmQ,KAAK,GAAGra,aAAa,QAAS,iBAE1FxD,KAAKk+lB,aAAaj5kB,SAAU,GAKhCs8d,EAAYlmf,UAAU4oH,KAAO,SAAU8nY,EAAWnna,GAC9C,IAAI+mgB,EAAW,IAAIn0e,GAAK,iBAAkBx3G,KAAKsvf,MAAMA,MAAM3xE,eAC3D39a,KAAKw/lB,QAAW/hmB,EAAkBsuf,IAAcA,EAAUtvf,OAAS,EACnEuD,KAAKy/lB,cAAgB1zG,EACrB/rf,KAAKqmf,aAAe,IAAIse,GAExB,IAAIjggB,EAAQ1E,KAAKsvf,MAAMA,MAAMlV,OAAO72e,OAAOmgf,WAAWqI,GACtD/rf,KAAK0E,MAAS1E,KAAKw/lB,OAAiC96lB,GAAgB1E,KAAK8shB,SAAS/gC,GAAtD,IAAI/E,GAChC2kG,EAASh0e,UAAU33G,KAAKsvf,MAAMA,MAAMthf,QACpCL,GAAW3N,KAAKsvf,MAAMA,MAAMthf,QACvBhO,KAAKmH,QACNnH,KAAK28e,gBAAgBgvG,GAErBlulB,EAAkBmnF,KAClBA,EAAS+mgB,EAAS53gB,YAAY,qBAElC/zE,KAAKsvf,MAAMA,MAAMlV,OAAO6iH,QAAQr4gB,OAASA,EACzC5kF,KAAKsvf,MAAMA,MAAMlV,OAAO6iH,QAAQlnlB,OAAS,OACzC/V,KAAKsvf,MAAMA,MAAMlV,OAAO6iH,QAAQjnlB,MAAQ,OACxChW,KAAKsvf,MAAMA,MAAMlV,OAAO6iH,QAAQ7ikB,QAAUp6B,KAAKmH,OAC/CnH,KAAKsvf,MAAMA,MAAMlV,OAAO6iH,QAAQ92e,UACxBE,MAAOrmH,KAAKmgmB,gBACZ/5e,aAAehsF,QAASuxjB,EAAS53gB,YAAY,MAAO9gE,SAAU,sBAAuB+qG,WAAW,KAGhGqI,MAAOrmH,KAAKurlB,oBACZnle,aAAehsF,QAASuxjB,EAAS53gB,YAAY,UAAW9gE,SAAU,2BAE1EjT,KAAK6/lB,gBACL7/lB,KAAKsvf,MAAMA,MAAMlV,OAAO6iH,QAAQrxiB,WAChC5rD,KAAKsvf,MAAMA,MAAMlV,OAAO6iH,QAAQ9mjB,WAAan2C,KAAKsgmB,gBAClDtgmB,KAAKsvf,MAAMA,MAAMlV,OAAO6iH,QAAQh7lB,MAAQjC,KAAKwgmB,iBAC7CxgmB,KAAKsvf,MAAMA,MAAMlV,OAAO6iH,QAAQ/olB,UAAakC,EAAG,SAAUC,EAAG,UAC7DrW,KAAKsvf,MAAMA,MAAMlV,OAAO6iH,QAAQh5e,QAEpCs9X,EAAYlmf,UAAUswT,WAAa,WAC/B,IAAIu6L,EAASlmf,KAAK0E,MAAMk5e,gBAAgBgG,WAAWsC,OAC/CA,GAAU,IAC0F,IAAhGlmf,KAAKsvf,MAAMA,MAAMlV,OAAO99N,MAAMt1O,OAAO,SAAUmc,GAAK,OAAQA,EAAE+ic,SAAWA,IAAYzpf,OACrFuD,KAAKsvf,MAAMA,MAAMlV,OAAO99N,MAAM93Q,KAAKxE,KAAK0E,MAAMk5e,gBAAgBgG,WAAW/gZ,OAGzE7iG,KAAKsvf,MAAMA,MAAMlV,OAAO99N,MAAQt8Q,KAAKsvf,MAAMA,MAAMlV,OAAO99N,MAAMt1O,OAAO,SAAUmc,GAAK,OAAQA,EAAE+ic,SAAWA,IACzGlmf,KAAKsvf,MAAMA,MAAMlV,OAAO99N,MAAM93Q,KAAKxE,KAAK0E,MAAMk5e,gBAAgBgG,WAAW/gZ,SAGvC,IAAtC7iG,KAAKqmf,aAAaD,gBAClBpmf,KAAKsvf,MAAMA,MAAMlV,OAAO+F,cAAc37e,KAAKxE,KAAKqmf,eAGxD9E,EAAYlmf,UAAUglmB,gBAAkB,SAAU5okB,EAAM+nkB,GACpD,IAAI9yG,EAcJ,OAZIA,EADA8yG,EACYx/lB,KAAKsvf,MAAMA,MAAMlV,OAAO72e,OAAOmgf,WAAYjsd,EAAO,QAAU,aAG5D,IAAIg1d,GAEpBC,EAAUhmf,KAAO,YACjBgmf,EAAUj1d,KAAOA,EAAO,QACxBi1d,EAAU1O,gBAAkBh+e,KAAK0E,MAAMs5e,gBAAgB4H,cACvD8G,EAAU5F,QAAU9mf,KAAK0E,MAAMoif,QAC1B04G,GACDx/lB,KAAKsvf,MAAMA,MAAMlV,OAAO72e,OAAOiB,KAAKkof,GAEjC1sf,KAAKsvf,MAAMA,MAAMlV,OAAO72e,OAAOmgf,WAAWgJ,EAAUj1d,KAAM,cAKrE8pd,EAAYlmf,UAAUo6jB,sBAAwB,SAAUz3E,GAC/Cvgf,EAAkBugf,KACnBh+e,KAAKg+e,gBAAkBA,GAE3Bh+e,KAAKitB,WAAWjwB,MAAQgD,KAAKg+e,gBAAgB/wd,WAC7CjtB,KAAK6sB,SAAS7vB,MAAQgD,KAAKg+e,gBAAgBnxd,SAC3C7sB,KAAKsqf,UAAUttf,MAAQgD,KAAKg+e,gBAAgBsM,UAC5Ctqf,KAAKw+lB,uBAAkBrjmB,IAK3Bomf,EAAYlmf,UAAUy8jB,sBAAwB,SAAU+qC,GAC/CplmB,EAAkBolmB,KACnB7imB,KAAK49e,gBAAkBilH,GAEgB,SAAvC7imB,KAAK49e,gBAAgBj9c,eAChB3gC,KAAKqimB,UAAUv+lB,UAAUK,SAAS,aACnCnE,KAAKqimB,UAAUv+lB,UAAUM,IAAI,YAE7BpE,KAAKunkB,WAAWzjkB,UAAUK,SAAS,aACnCnE,KAAKunkB,WAAWzjkB,UAAUS,OAAO,YAEjCvE,KAAKsimB,YAAYx+lB,UAAUK,SAAS,aACpCnE,KAAKsimB,YAAYx+lB,UAAUS,OAAO,YAElCvE,KAAK4vgB,QAAQ9rgB,UAAUK,SAAS,aAChCnE,KAAK4vgB,QAAQ9rgB,UAAUS,OAAO,aAGU,UAAvCvE,KAAK49e,gBAAgBj9c,eACtB3gC,KAAKqimB,UAAUv+lB,UAAUK,SAAS,aAClCnE,KAAKqimB,UAAUv+lB,UAAUS,OAAO,YAE/BvE,KAAKunkB,WAAWzjkB,UAAUK,SAAS,aACpCnE,KAAKunkB,WAAWzjkB,UAAUM,IAAI,YAE9BpE,KAAKsimB,YAAYx+lB,UAAUK,SAAS,aACpCnE,KAAKsimB,YAAYx+lB,UAAUS,OAAO,YAElCvE,KAAK4vgB,QAAQ9rgB,UAAUK,SAAS,aAChCnE,KAAK4vgB,QAAQ9rgB,UAAUS,OAAO,aAGU,WAAvCvE,KAAK49e,gBAAgBj9c,eACtB3gC,KAAKqimB,UAAUv+lB,UAAUK,SAAS,aAClCnE,KAAKqimB,UAAUv+lB,UAAUS,OAAO,YAEhCvE,KAAKunkB,WAAWzjkB,UAAUK,SAAS,aACnCnE,KAAKunkB,WAAWzjkB,UAAUS,OAAO,YAEhCvE,KAAKsimB,YAAYx+lB,UAAUK,SAAS,aACrCnE,KAAKsimB,YAAYx+lB,UAAUM,IAAI,YAE/BpE,KAAK4vgB,QAAQ9rgB,UAAUK,SAAS,aAChCnE,KAAK4vgB,QAAQ9rgB,UAAUS,OAAO,aAGU,YAAvCvE,KAAK49e,gBAAgBj9c,gBACtB3gC,KAAKqimB,UAAUv+lB,UAAUK,SAAS,aAClCnE,KAAKqimB,UAAUv+lB,UAAUS,OAAO,YAEhCvE,KAAKunkB,WAAWzjkB,UAAUK,SAAS,aACnCnE,KAAKunkB,WAAWzjkB,UAAUS,OAAO,YAEjCvE,KAAKsimB,YAAYx+lB,UAAUK,SAAS,aACpCnE,KAAKsimB,YAAYx+lB,UAAUS,OAAO,YAEjCvE,KAAK4vgB,QAAQ9rgB,UAAUK,SAAS,aACjCnE,KAAK4vgB,QAAQ9rgB,UAAUM,IAAI,aAGM,IAArCpE,KAAK49e,gBAAgBt9P,aACrBtgP,KAAKwimB,kBAAkB1+lB,UAAUM,IAAI,YACrCpE,KAAKyimB,wBAAwB3+lB,UAAUS,OAAO,YAC9CvE,KAAK0imB,kBAAkB5+lB,UAAUS,OAAO,aAEE,MAArCvE,KAAK49e,gBAAgBt9P,aAC1BtgP,KAAKwimB,kBAAkB1+lB,UAAUS,OAAO,YACxCvE,KAAKyimB,wBAAwB3+lB,UAAUM,IAAI,YAC3CpE,KAAK0imB,kBAAkB5+lB,UAAUS,OAAO,aAEE,IAArCvE,KAAK49e,gBAAgBt9P,aAC1BtgP,KAAKwimB,kBAAkB1+lB,UAAUS,OAAO,YACxCvE,KAAKyimB,wBAAwB3+lB,UAAUS,OAAO,YAC9CvE,KAAK0imB,kBAAkB5+lB,UAAUM,IAAI,cAGrCpE,KAAKwimB,kBAAkB1+lB,UAAUS,OAAO,YACxCvE,KAAKyimB,wBAAwB3+lB,UAAUS,OAAO,YAC9CvE,KAAK0imB,kBAAkB5+lB,UAAUS,OAAO,cAGhDg9e,EAAYlmf,UAAUskmB,wBAA0B,WACvClimB,EAAkBuC,KAAKugmB,YACxBvgmB,KAAKugmB,SAASrif,SAA4C,KAAhCl+G,KAAKogmB,iBAAiBpjmB,QAGxDukf,EAAYlmf,UAAUikmB,aAAe,WACjC,MAC6B,oCAAzBt/lB,KAAK8jf,UAAU9mf,OAAwE,cAAzBgD,KAAK8jf,UAAU9mf,MACtE,YAGA,aAGfukf,EAAYlmf,UAAUykmB,iBAAmB,SAAUp5lB,EAAM+wB,GACrD,IAAIl0B,EAASvD,KAAKsvf,MAAMA,MAAMlV,OAAO72e,OAAOsgf,cAAcn9e,GAG1D,GAFA1G,KAAKm+lB,eAAe56hB,WAAahgE,EACjCvD,KAAKm+lB,eAAelslB,MAAQ,KACxBwlB,EAAM,CACNz3B,KAAKk+lB,aAAa36hB,WAAahgE,EAAOyjC,OAAO,SAAUnmC,GAAK,OAAOA,IAAM42B,IACzEz3B,KAAKk+lB,aAAajslB,MAAQ,KAC1B,IAAIvN,EAAQ1E,KAAK8shB,SAASr1f,GAmB1B,GAlBI/yB,EAAMoif,mBAAmB59d,QAAUzrB,EAAkBiH,EAAMoif,SAC3D9mf,KAAKk+lB,aAAaj5kB,SAAU,EAI5BjlB,KAAKk+lB,aAAajslB,MAAQ1O,EAAOhF,QAAQmG,EAAMoif,QAAQrvd,OAAS,EAAIl0B,EAAOhF,QAAQmG,EAAMoif,QAAQrvd,MAAQ,EAE1F,cAAf/yB,EAAMgC,KACDjJ,EAAkBiH,EAAMyuD,MAIzBnzD,KAAK8jf,UAAU7xe,MAAQ,EAHvBjS,KAAK8jf,UAAU7xe,MAAQ,EAO3BjS,KAAK8jf,UAAU7xe,MAAQ,GAEtBxU,EAAkBiH,EAAM4jC,MAAO,CAChC,IAAIw6jB,EAAUp+lB,EAAM4jC,KAAK7Q,KACrBxlB,EAAQ,EACR1O,EAAOhF,QAAQukmB,IAAY,IAC3B7wlB,EAAQ1O,EAAOhF,QAAQukmB,IAE3B9imB,KAAKm+lB,eAAelslB,MAAQA,EAC5BjS,KAAKu/lB,sBAAyBuD,IAAYrrkB,OAG7C,CACDz3B,KAAKk+lB,aAAa36hB,WAAahgE,EAC/BvD,KAAKk+lB,aAAajslB,MAAQ,KAC1B,IAAI8wlB,EAAe,EACnB,GAAI/imB,KAAKsvf,MAAMA,MAAMniL,gBAAiB,CAClC,IAAI4+K,OAAY,EAEZA,EADS,cAATrlf,EACY1G,KAAKsvf,MAAMA,MAAM1/a,UAAUoua,gBAAgB+N,UAG3C/rf,KAAKsvf,MAAMA,MAAM1/a,UAAUgua,gBAAgBmO,UAE3Dg3G,EAAex/lB,EAAOhF,QAAQwtf,GAElC/rf,KAAKk+lB,aAAajslB,MAAQ8wlB,EAC1B/imB,KAAKm+lB,eAAelslB,MAAQ,EAE5BjS,KAAKw/lB,OACLx/lB,KAAK8jf,UAAU7+d,SAAU,EAGzBjlB,KAAK8jf,UAAU7+d,SAAU,EAE7BjlB,KAAKk+lB,aAAatyiB,WAClB5rD,KAAKm+lB,eAAevyiB,YAExB21b,EAAYlmf,UAAUyxhB,SAAW,SAAU/gC,GAMvC,OAJItuf,EAAkBuC,KAAKsvf,MAAMA,MAAMlV,OAAO72e,OAAOmgf,WAAWqI,KAE5D/rf,KAAKsvf,MAAMA,MAAMuT,OAAO7yb,YAAYhwE,KAAKsvf,MAAMA,MAAMlV,OAAO2nC,iBAAiBr6gB,IAAIqkf,IAE9E/rf,KAAKsvf,MAAMA,MAAMlV,OAAO72e,OAAOmgf,WAAWqI,IAKrDxK,EAAYlmf,UAAUiX,QAAU,WAE5B,GADAtS,KAAKsvf,WAAQn0f,GACRsC,EAAkBuC,KAAKmH,QAAS,CAC7BnH,KAAKmH,OAAOkN,eACZrU,KAAKmH,OAAOkN,cAAc/O,YAAYtF,KAAKmH,QAE/C,IAAK,IAAIwjJ,EAAI,EAAGA,EAAI3qJ,KAAKmH,OAAOoK,WAAW9U,OAAQkuJ,IAC/C3qJ,KAAKmH,OAAO7B,YAAYtF,KAAKmH,OAAOoK,WAAWo5I,IAC/CA,IAEJ3qJ,KAAKmH,YAAShM,EAEd6E,KAAK8jf,WACL9jf,KAAK8jf,UAAUxxe,UAEnBtS,KAAK8jf,eAAY3of,EACb6E,KAAKk+lB,cACLl+lB,KAAKk+lB,aAAa5rlB,UAEtBtS,KAAKk+lB,kBAAe/imB,EAChB6E,KAAKm+lB,gBACLn+lB,KAAKm+lB,eAAe7rlB,UAExBtS,KAAKm+lB,oBAAiBhjmB,EAClB6E,KAAKo+lB,kBACLp+lB,KAAKo+lB,iBAAiB9rlB,UAE1BtS,KAAKo+lB,sBAAmBjjmB,EACpB6E,KAAKiP,UACLjP,KAAKiP,SAASqD,UAElBtS,KAAKiP,cAAW9T,EACZ6E,KAAK0E,QACL1E,KAAK0E,WAAQvJ,GAEb6E,KAAKqmf,eACLrmf,KAAKqmf,kBAAelrf,GAEpB6E,KAAKigmB,uBACLjgmB,KAAKigmB,sBAAsB3tlB,UAE/BtS,KAAKigmB,2BAAwB9kmB,GAE1Bomf,KCt2BPG,GAA2C,WAI3C,SAASA,EAA0Bi7D,GAC/B,IAAI58iB,EAAQC,KACZA,KAAKiqjB,UAAW,EAIhBjqjB,KAAKgjmB,gBAAkB,SAAU/imB,GAC7BF,EAAMkqjB,UAAW,EACjBlqjB,EAAMkjmB,iBAAiBhjmB,GACnBA,EAAKmuG,cAActqG,UAAUK,SAAS,4BACtCpE,EAAMilgB,kBAAe7pgB,EACrB4E,EAAMukgB,sBAAmBnpgB,GAEpB8E,EAAKmuG,cAActqG,UAAUK,SAAS,kCAC3CpE,EAAMilgB,aAAe,MACrBjlgB,EAAMukgB,iBAAmB,UAEpBrkgB,EAAKmuG,cAActqG,UAAUK,SAAS,oCAC3CpE,EAAMilgB,aAAe,MACrBjlgB,EAAMukgB,iBAAmB,UAEpBrkgB,EAAKmuG,cAActqG,UAAUK,SAAS,gCAC3CpE,EAAMilgB,aAAe,MACrBjlgB,EAAMukgB,iBAAmB,WAEpBrkgB,EAAKmuG,cAActqG,UAAUK,SAAS,iCAC3CpE,EAAMilgB,aAAe,MACrBjlgB,EAAMukgB,iBAAmB,YAEpBrkgB,EAAKmuG,cAActqG,UAAUK,SAAS,wCAC3CpE,EAAMilgB,aAAe,MACrBjlgB,EAAMukgB,iBAAmB,aAEpBrkgB,EAAKmuG,cAActqG,UAAUK,SAAS,iCAC3CpE,EAAMilgB,aAAe,MACrBjlgB,EAAMukgB,iBAAmB,aAEpBrkgB,EAAKmuG,cAActqG,UAAUK,SAAS,kCAC3CpE,EAAMilgB,aAAe,MACrBjlgB,EAAMukgB,iBAAmB,aAMjCtkgB,KAAKkjmB,gBAAkB,SAAUjjmB,GAC7BF,EAAMkqjB,UAAW,EACjBlqjB,EAAMkjmB,iBAAiBhjmB,GACnBA,EAAKmuG,cAActqG,UAAUK,SAAS,kBACtCpE,EAAMk8F,YAAS9gG,EACf4E,EAAMktB,gBAAa9xB,GAEd8E,EAAKmuG,cAActqG,UAAUK,SAAS,iBAC3CpE,EAAMk8F,OAAS,IACfl8F,EAAMktB,WAAa,UAEdhtB,EAAKmuG,cAActqG,UAAUK,SAAS,oBAC3CpE,EAAMk8F,OAAS,KACfl8F,EAAMktB,WAAa,UAEdhtB,EAAKmuG,cAActqG,UAAUK,SAAS,oBAC3CpE,EAAMk8F,OAAS,IACfl8F,EAAMktB,WAAa,aAEdhtB,EAAKmuG,cAActqG,UAAUK,SAAS,oBAC3CpE,EAAMk8F,OAAS,IACfl8F,EAAMktB,WAAa,aAEdhtB,EAAKmuG,cAActqG,UAAUK,SAAS,mBAC3CpE,EAAMk8F,OAAS,IACfl8F,EAAMktB,WAAa,aAEdhtB,EAAKmuG,cAActqG,UAAUK,SAAS,mBAC3CpE,EAAMk8F,OAAS,IACfl8F,EAAMktB,WAAa,cAM3BjtB,KAAKmjmB,0BAA4B,WAE7BpjmB,EAAMuvf,MAAMpN,eAKhBlif,KAAKojmB,2BAA6B,WAC9BrjmB,EAAMyulB,0BACNzulB,EAAMuvf,MAAMpN,eAKhBlif,KAAKurlB,oBAAsB,WACvBxrlB,EAAMkqjB,UAAW,EACjBlqjB,EAAMukgB,sBAAmBnpgB,EACzB4E,EAAMilgB,kBAAe7pgB,EACrB4E,EAAMk8F,YAAS9gG,EACf4E,EAAMktB,gBAAa9xB,EACnB4E,EAAMuvf,MAAMk8F,OAAOjqgB,OACnBxhF,EAAMyulB,2BAKVxulB,KAAKmgmB,gBAAkB,WACfpgmB,EAAMuvf,MAAMA,MAAMlV,OAAO99N,MAAM7/Q,OAAS,GACxCsD,EAAM6jf,WAAW/gZ,KAAKqjZ,OAASnmf,EAAMuvf,MAAMA,MAAMlV,OAAO99N,MAAMv8Q,EAAMuvf,MAAMA,MAAMlV,OAAO99N,MAAM7/Q,OAAS,GAAGypf,OAAS,EAClHnmf,EAAM6jf,WAAWsC,OAASnmf,EAAM6jf,WAAW/gZ,KAAKqjZ,SAGhDnmf,EAAM6jf,WAAW/gZ,KAAKqjZ,OAAS,EAC/Bnmf,EAAM6jf,WAAWsC,OAAS,GAE1Bnmf,EAAMuvf,MAAMA,MAAMlV,OAAO+F,cAAc1jf,OAAS,EAEhDsD,EAAMsmf,aAAaD,eAAiBrmf,EAAMuvf,MAAMA,MAAMlV,OAAO+F,cAAcpgf,EAAMuvf,MAAMA,MAAMlV,OAAO+F,cAAc1jf,OAAS,GAAG2pf,eAAiB,EAG/Irmf,EAAMsmf,aAAaD,eAAiB,EAExCrmf,EAAM6jf,WAAW/gZ,KAAKujZ,eAAiBrmf,EAAMsmf,aAAaD,eAC1D,IAAIkC,EAAY,IAAIuc,GAAW9kgB,EAAMsmf,cACrCiC,EAAUgc,iBAAoB7mgB,EAAkBsC,EAAMukgB,kBAA6C,SAAzBvkgB,EAAMukgB,iBAChFhc,EAAU0c,aAAejlgB,EAAMkqjB,SAAWlqjB,EAAMk8F,OAASl8F,EAAMilgB,aAC5B,WAA/B1c,EAAUgc,mBACVhc,EAAUtC,QAAU,GAExBsC,EAAUtK,gBAAgB/wd,WAAcxvB,EAAkBsC,EAAMktB,YAAiC,UAAnBltB,EAAMktB,WACpFq7d,EAAU1K,gBAAgBqL,WAAa,GACvCX,EAAU1K,gBAAgBhgQ,iBAAmB,GAC7C79O,EAAMsmf,aAAajna,OAAO56E,KAAK8jf,GAC/Bvof,EAAM6jf,WAAWmD,gBAAkB,EACnChnf,EAAM6jf,WAAW/gZ,KAAKwjZ,aAAetmf,EAAMsmf,aAC3Ctmf,EAAMuvf,MAAMk8F,OAAOjqgB,QAEvBvhF,KAAKsvf,MAAQqtD,EA+NjB,OA1NAj7D,EAA0Brmf,UAAUkkC,cAAgB,WAChD,MAAO,6BAKXmid,EAA0Brmf,UAAUgomB,0BAA4B,SAAUr1lB,GACtE,IACI1K,EAAKtD,KAAKsvf,MAAMA,MAAMh9W,YAC1BtyI,KAAKmH,OAAShG,EAAc,OAASmC,GAAIA,EAAK,4BAA6BD,UAAW,2BACtF,IAAIigmB,EAAYnimB,EAAc,OAASmC,GAAIA,EAAK,yBAA0BD,UAAW,+BACrFrD,KAAKmH,OAAOxF,YAAY2hmB,GACxBtjmB,KAAKujmB,iBAAiBjgmB,GACtBtD,KAAKwjmB,iBAAiBlgmB,GAEtB,IAAI4zlB,EAAS,IAAIn4S,IACbtkP,QAEQmqB,QAAUn4D,KAAQze,EAAO+lE,YAAY,cAErC35C,QAAU,IAAM92B,EAAK,YAGrBshF,QAAUn4D,KAAQze,EAAO+lE,YAAY,YAErC35C,QAAU,IAAM92B,EAAK,YAG7BigT,iBAAkB,OAClBvtS,MAAO,MAGXkhlB,EAAO7gjB,SAASitjB,GAChBtjmB,KAAKsvf,MAAMA,MAAMtuf,QAAQW,YAAY3B,KAAKmH,QAC1C+vlB,EAAOhliB,WAEXwvb,EAA0Brmf,UAAUkomB,iBAAmB,SAAUjgmB,GAC7D,IAAImgmB,EAAgBtimB,EAAc,OAASkC,UAAW,2BAA4BC,GAAIA,EAAK,YAC3FmgmB,EAAc/+lB,MAAM4xC,QAAU,OAC9BmtjB,EAAc/+lB,MAAMqR,OAAS,QAC7B,IAAI2tlB,EAAQvimB,EAAc,MACtBoC,OAAQ,gCACRD,GAAI,WACJD,UAAW,wFAEfogmB,EAAc9hmB,YAAY+hmB,GAC1B,IAAIC,EAAe3jmB,KAAK4jmB,wBAAwBF,GAC5CG,EAAoB7jmB,KAAK8jmB,oBAAoBJ,EAAO,KAAM,KAAM,KAAM,iCACtEK,EAAsB/jmB,KAAK8jmB,oBAAoBJ,EAAO,KAAM,KAAM,KAAM,mCACxEM,EAAkBhkmB,KAAK8jmB,oBAAoBJ,EAAO,KAAM,MAAO,OAAQ,+BACvEO,EAAoBjkmB,KAAK8jmB,oBAAoBJ,EAAO,KAAM,KAAM,KAAM,gCACtEQ,EAAuBlkmB,KAAK8jmB,oBAAoBJ,EAAO,KAAM,KAAM,KAAM,gCACzES,EAAyBnkmB,KAAK8jmB,oBAAoBJ,EAAO,KAAM,KAAM,KAAM,uCAC3EU,EAAmBpkmB,KAAK8jmB,oBAAoBJ,EAAO,KAAM,MAAO,OAAQ,gCAC5EC,EAAajnmB,iBAAiB,QAASsD,KAAKgjmB,iBAC5Ca,EAAkBnnmB,iBAAiB,QAASsD,KAAKgjmB,iBACjDe,EAAoBrnmB,iBAAiB,QAASsD,KAAKgjmB,iBACnDgB,EAAgBtnmB,iBAAiB,QAASsD,KAAKgjmB,iBAC/CiB,EAAkBvnmB,iBAAiB,QAASsD,KAAKgjmB,iBACjDmB,EAAuBznmB,iBAAiB,QAASsD,KAAKgjmB,iBACtDkB,EAAqBxnmB,iBAAiB,QAASsD,KAAKgjmB,iBACpDoB,EAAiB1nmB,iBAAiB,QAASsD,KAAKgjmB,iBAChDhjmB,KAAKmH,OAAOxF,YAAY8hmB,IAE5B/hH,EAA0Brmf,UAAUyomB,oBAAsB,SAAUJ,EAAOW,EAAOhmX,EAAOimX,EAAOjhmB,GAC5F,IAAIkhmB,EAAQpjmB,EAAc,MACtBoC,OAAQ,gBACRF,UAAW,iGAAmGA,IAElHqgmB,EAAM/hmB,YAAY4imB,GAElB,IAAIvimB,EAAY,QAAUqimB,EAAQ,qDAAuDhmX,EAAQ,mCAE7FmmX,EAAarjmB,EAAc,OAC3BkC,UAAW,iCACXC,GAAI,iBAAkBtB,UAH1BA,GAAa,qBAAuBsimB,EAAQ,oDAO5C,OAFAC,EAAM7/lB,MAAMiqZ,SAAW,OACvB41M,EAAM5imB,YAAY6imB,GACXD,GAEX7iH,EAA0Brmf,UAAUuomB,wBAA0B,SAAUF,GACpE,IAAIa,EAAQpjmB,EAAc,MACtBoC,OAAQ,gBAERF,UAAW,0HAEfqgmB,EAAM/hmB,YAAY4imB,GAClB,IACIC,EAAarjmB,EAAc,OAC3BkC,UAAW,iCACXC,GAAI,iBAAkBtB,UAHV,8DAOhB,OAFAuimB,EAAM7/lB,MAAMiqZ,SAAW,OACvB41M,EAAM5imB,YAAY6imB,GACXD,GAEX7iH,EAA0Brmf,UAAUopmB,oBAAsB,SAAUf,EAAOhwhB,EAASrwE,GAChF,IAAIkhmB,EAAQpjmB,EAAc,MACtBoC,OAAQ,iBACRF,UAAW,wGAA0GA,IAEzHqgmB,EAAM/hmB,YAAY4imB,GAElB,IAAIC,EAAarjmB,EAAc,OAASkC,UAAW,8DAA+DC,GAAI,mBAClHohmB,EAAYvjmB,EAAc,OAASkC,UAAWqwE,IAGlD,OAFA8whB,EAAW7imB,YAAY+imB,GACvBH,EAAM5imB,YAAY6imB,GACXD,GAEX7iH,EAA0Brmf,UAAUmomB,iBAAmB,SAAUlgmB,GAC7D,IAAIqhmB,EAAgBxjmB,EAAc,OAASkC,UAAW,wCAAyCC,GAAIA,EAAK,YACxGqhmB,EAAcjgmB,MAAM4xC,QAAU,OAC9BqujB,EAAcjgmB,MAAMqR,OAAS,QAC7B,IAAI2tlB,EAAQvimB,EAAc,MACtBoC,OAAQ,gCAAiCD,GAAI,WAC7CD,UAAW,wFAEfshmB,EAAchjmB,YAAY+hmB,GAC1B,IAAIkB,EAAa5kmB,KAAKykmB,oBAAoBf,EAAO,+CAAgD,iBAC7FmB,EAAY7kmB,KAAKykmB,oBAAoBf,EAAO,8CAA+C,gBAE3FoB,EAAe9kmB,KAAKykmB,oBAAoBf,EAAO,iDAAkD,mBACjGqB,EAAe/kmB,KAAKykmB,oBAAoBf,EAAO,iDAAkD,mBAEjGsB,EAAehlmB,KAAKykmB,oBAAoBf,EAAO,iDAAkD,mBACjGuB,EAAcjlmB,KAAKykmB,oBAAoBf,EAAO,gDAAiD,kBAC/FwB,EAAallmB,KAAKykmB,oBAAoBf,EAAO,+CAAgD,iBACjGkB,EAAWlomB,iBAAiB,QAASsD,KAAKkjmB,iBAC1C2B,EAAUnomB,iBAAiB,QAASsD,KAAKkjmB,iBACzC4B,EAAapomB,iBAAiB,QAASsD,KAAKkjmB,iBAC5C6B,EAAaromB,iBAAiB,QAASsD,KAAKkjmB,iBAC5C8B,EAAatomB,iBAAiB,QAASsD,KAAKkjmB,iBAC5C+B,EAAYvomB,iBAAiB,QAASsD,KAAKkjmB,iBAC3CgC,EAAWxomB,iBAAiB,QAASsD,KAAKkjmB,iBAE1CljmB,KAAKmH,OAAOxF,YAAYgjmB,IAK5BjjH,EAA0Brmf,UAAU6kmB,uBAAyB,SAAUt8G,EAAYyC,GAC1E5of,EAAkBmmf,GAInB5jf,KAAK4jf,WAAa,IAAI+C,GAHtB3mf,KAAK4jf,WAAaA,EAKlBnmf,EAAkBuC,KAAK4jf,WAAW/gZ,QAClC7iG,KAAK4jf,WAAW/gZ,KAAO,IAAIojZ,IAE1Bxof,EAAkB4of,GAInBrmf,KAAKqmf,aAAe,IAAIse,GAHxB3kgB,KAAKqmf,aAAeA,EAKxB,IAAIr4e,EAAS,IAAIwpG,GAAK,iBAAkBx3G,KAAKsvf,MAAMA,MAAM3xE,eACzD3va,EAAO2pG,UAAU33G,KAAKsvf,MAAMA,MAAMthf,QAClCL,GAAW3N,KAAKsvf,MAAMA,MAAMthf,QACvBhO,KAAKmH,QACNnH,KAAKqjmB,0BAA0Br1lB,GAEnChO,KAAKsvf,MAAMk8F,OAAO5mgB,OAAS52E,EAAO+lE,YAAY,yBAC9C/zE,KAAKsvf,MAAMk8F,OAAOx1kB,MAAQ,OAC1BhW,KAAKsvf,MAAMk8F,OAAOz1kB,OAAS,OAC3B/V,KAAKsvf,MAAMk8F,OAAOpxjB,QAAUp6B,KAAKmH,OACjCnH,KAAKsvf,MAAMk8F,OAAOr1iB,WAAan2C,KAAKmjmB,0BACpCnjmB,KAAKsvf,MAAMk8F,OAAOvplB,MAAQjC,KAAKojmB,2BAC/BpjmB,KAAKsvf,MAAMk8F,OAAOt3kB,UAAakC,EAAG,SAAUC,EAAG,UAC/CrW,KAAKsvf,MAAMk8F,OAAOrle,UACVE,MAAOrmH,KAAKmgmB,gBACZ/5e,aAAehsF,QAASpsB,EAAO+lE,YAAY,MAAO9gE,SAAU,iCAAkC+qG,WAAW,KAGzGqI,MAAOrmH,KAAKurlB,oBACZnle,aAAehsF,QAASpsB,EAAO+lE,YAAY,UAAW9gE,SAAU,sCAExEjT,KAAKsvf,MAAMk8F,OAAO5/hB,WAClB5rD,KAAKsvf,MAAMk8F,OAAOvne,QAEtBy9X,EAA0Brmf,UAAU4nmB,iBAAmB,SAAUhjmB,GAE7D,IAAK,IADD0sM,EAAO1sM,EAAKmuG,cAAc/5F,cACrBlY,EAAI,EAAGA,EAAIwwM,EAAKxnI,kBAAmBhpE,IACpCwwM,EAAKp7L,WAAWpV,GAAG2H,UAAUK,SAAS,qBACtCwoM,EAAKp7L,WAAWpV,GAAG2H,UAAUS,OAAO,oBAG5CtE,EAAKmuG,cAActqG,UAAUM,IAAI,qBAKrCs9e,EAA0Brmf,UAAUmzlB,wBAA0B,aAM9D9sG,EAA0Brmf,UAAUiX,QAAU,WAU1C,GATAtS,KAAKsvf,WAAQn0f,EACT6E,KAAK4jf,aACL5jf,KAAK4jf,WAAWtxe,UAChBtS,KAAK4jf,gBAAazof,GAElB6E,KAAKqmf,eACLrmf,KAAKqmf,aAAa/ze,UAClBtS,KAAKqmf,kBAAelrf,GAEpB6E,KAAKmH,QAAUnH,KAAKmH,OAAOkN,cAAe,CAC1CrU,KAAKmH,OAAOkN,cAAc/O,YAAYtF,KAAKmH,QAC3C,IAAK,IAAI4pE,EAAI,EAAGA,EAAI/wE,KAAKmH,OAAOoK,WAAW9U,OAAQs0E,IAC/C/wE,KAAKmH,OAAO7B,YAAYtF,KAAKmH,OAAOoK,WAAWw/D,IAC/CA,IAEJ/wE,KAAKmH,YAAShM,IAGfumf,KC7WPC,GAA4B,WAI5B,SAASA,EAAWg7D,GAChB,IAAI58iB,EAAQC,KACZA,KAAKmlmB,uBAAoBhqmB,EACzB6E,KAAKolmB,kBAAejqmB,EACpB6E,KAAKqlmB,mBAAgBlqmB,EACrB6E,KAAKslmB,kBAAenqmB,EACpB6E,KAAKulmB,iBAAcpqmB,EACnB6E,KAAKwlmB,mBAAgBrqmB,EACrB6E,KAAKylmB,sBAAmBtqmB,EACxB6E,KAAK0lmB,yBAAsBvqmB,EAC3B6E,KAAK2lmB,iBAAcxqmB,EACnB6E,KAAK4lmB,eAAYzqmB,EAEjB6E,KAAK0uC,UAAOvzC,EACZ6E,KAAKuxC,YAASp2C,EACd6E,KAAKk1Q,eAAY/5Q,EACjB6E,KAAKuqf,mBAAgBpvf,EACrB6E,KAAKqqf,uBAAoBlvf,EACzB6E,KAAK6sB,cAAW1xB,EAChB6E,KAAKitB,gBAAa9xB,EAClB6E,KAAKsqf,eAAYnvf,EAIjB6E,KAAKg+e,qBAAkB7if,EAIvB6E,KAAK6lmB,eAAiB,WAClB9lmB,EAAMuvf,MAAMpN,cACZ,IAAIlE,EAwBJ,GAtBIA,EADAj+e,EAAMi+e,gBACYj+e,EAAMi+e,gBAGNj+e,EAAMuvf,MAAMA,MAAM1/a,UAAUoua,gBAElDj+e,EAAMqlmB,aAAapomB,MAAQghf,EAAgB/wd,WACtC+wd,EAAgBtvc,MAASsvc,EAAgBzsc,OAIrCysc,EAAgBtvc,OAASsvc,EAAgBzsc,QAC9CxxC,EAAMslmB,cAAcromB,MAAQ+C,EAAMulmB,aAAatomB,MAC/C+C,EAAMslmB,cAAcpzlB,MAAQ,IAEtB+re,EAAgBtvc,MAAQsvc,EAAgBzsc,QAC9CxxC,EAAMslmB,cAAcromB,MAAQ+C,EAAMulmB,aAAatomB,MAC/C+C,EAAMslmB,cAAcpzlB,MAAQ,GAEvB+re,EAAgBtvc,MAAQsvc,EAAgBzsc,SAC7CxxC,EAAMslmB,cAAcromB,MAAQ+C,EAAMulmB,aAAatomB,MAC/C+C,EAAMslmB,cAAcpzlB,MAAQ,IAb5BlS,EAAMslmB,cAAcromB,MAAQ+C,EAAMulmB,aAAatomB,MAC/C+C,EAAMslmB,cAAcpzlB,MAAQ,IAc3BxU,EAAkBugf,EAAgBnxd,UACnC,IAAK,IAAI1wB,EAAI,EAAGA,GAAK,GAAIA,IAAK,CAC1B,IAAIs+D,EAAQ16D,EAAMulmB,aAAa3yX,WAC/B,GAAIqrQ,EAAgBnxd,SAAS3f,aAAeutD,EAAMt+D,GAAG6F,UAAW,CAC5DjC,EAAMulmB,aAAatomB,MAAQghf,EAAgBnxd,SAC3C9sB,EAAMulmB,aAAarzlB,MAAQ9V,EAC3B,OAIPsB,EAAkBugf,EAAgBsM,WAInCvqf,EAAMwlmB,YAAYvomB,MAAQ,UAH1B+C,EAAMwlmB,YAAYvomB,MAAQghf,EAAgBsM,UAKZ,SAA9BtM,EAAgB9oO,UAChBn1Q,EAAMylmB,cAAcvzlB,MAAQ,EAEO,WAA9B+re,EAAgB9oO,YACrBn1Q,EAAMylmB,cAAcvzlB,MAAQ,GAEM,iBAAlC+re,EAAgBuM,cAChBxqf,EAAM0lmB,iBAAiBjzlB,SAAU,EAEM,iBAAlCwre,EAAgBuM,cACrBxqf,EAAM2lmB,oBAAoBlzlB,SAAU,GAGpCzS,EAAM0lmB,iBAAiBjzlB,SAAU,EACjCzS,EAAM2lmB,oBAAoBlzlB,SAAU,GAEE,gBAAtCwre,EAAgBqM,kBAChBtqf,EAAM4lmB,YAAYnzlB,SAAU,EAEe,cAAtCwre,EAAgBqM,kBACrBtqf,EAAM6lmB,UAAUpzlB,SAAU,GAG1BzS,EAAM4lmB,YAAYnzlB,SAAU,EAC5BzS,EAAM6lmB,UAAUpzlB,SAAU,GAEoB,SAA9CzS,EAAMuvf,MAAM1/a,UAAU+yb,MAAMj+f,MAAM4xC,UAClCv2C,EAAMuvf,MAAM1/a,UAAU+yb,MAAMj+f,MAAM4xC,QAAU,SAMpDt2C,KAAK8lmB,gBAAkB,WACnB/lmB,EAAMyulB,0BACNzulB,EAAMuvf,MAAMpN,eAKhBlif,KAAKurlB,oBAAsB,WACvBxrlB,EAAMuvf,MAAMk8F,OAAOjqgB,OACnBxhF,EAAMyulB,2BAKVxulB,KAAK+lmB,mBAAqB,WACtB,IAAI/pkB,EAEAA,EADAj8B,EAAMi+e,gBACGj+e,EAAMi+e,gBAGN,IAAIgF,QAAiB7nf,GAE7BsC,EAAkBsC,EAAM2uC,QACzB1S,EAAO0S,KAAO3uC,EAAM2uC,MAEnBjxC,EAAkBsC,EAAMwxC,UACzBvV,EAAOuV,OAASxxC,EAAMwxC,SAErB9zC,EAAkBsC,EAAM8sB,WAAa9sB,EAAM8sB,SAAW,IACvDmP,EAAOnP,SAAW9sB,EAAM8sB,UAEvBpvB,EAAkBsC,EAAMuqf,aACzBtud,EAAOsud,UAAYvqf,EAAMuqf,WAExB7sf,EAAkBsC,EAAMsqf,qBACzBrud,EAAOqud,kBAAoBtqf,EAAMsqf,mBAEhC5sf,EAAkBsC,EAAMwqf,iBACzBvud,EAAOuud,cAAgBxqf,EAAMwqf,eAE5B9sf,EAAkBsC,EAAMm1Q,aACzBl5O,EAAOk5O,UAAYn1Q,EAAMm1Q,WAExBz3Q,EAAkBsC,EAAMktB,cACzB+O,EAAO/O,WAAaltB,EAAMktB,YAEzBltB,EAAMi+e,gBAIPj+e,EAAMuvf,MAAMA,MAAM5S,kBAAkB+4E,wBAHpC11jB,EAAMimmB,kBAAkBjmmB,EAAMuvf,MAAM1/a,UAAW5zC,GAKnDj8B,EAAMuvf,MAAMk8F,OAAOjqgB,QAEvBvhF,KAAK2+lB,eAAiB,SAAU1+lB,GAC5BF,EAAM8sB,SAAW5sB,EAAKjD,OAE1BgD,KAAKimmB,gBAAkB,SAAUhmmB,GAC7BF,EAAMitB,UAAY/sB,EAAKjD,OAE3BgD,KAAKkmmB,iBAAmB,SAAUjmmB,GAC9BF,EAAMktB,WAAahtB,EAAKjD,OAE5BgD,KAAKmmmB,gBAAkB,SAAUlmmB,GAC7BF,EAAMm1Q,UAAYj1Q,EAAKjD,OAE3BgD,KAAK6+lB,gBAAkB,SAAU5+lB,GACxBxC,EAAkBwC,EAAK4pI,gBACxB9pI,EAAMuqf,UAAYrqf,EAAK4pI,aAAa9sG,MAG5C/8B,KAAKommB,mBAAqB,SAAUnmmB,GAChCF,EAAMsmmB,uBAAuBpmmB,GACzBA,EAAKuS,QACLzS,EAAMwqf,cAAgB,eAGtBxqf,EAAMwqf,cAAgB,QAG9Bvqf,KAAKsmmB,mBAAqB,SAAUrmmB,GAChCF,EAAMsmmB,uBAAuBpmmB,GACzBA,EAAKuS,QACLzS,EAAMwqf,cAAgB,eAGtBxqf,EAAMwqf,cAAgB,QAG9Bvqf,KAAKummB,kBAAoB,SAAUtmmB,GAC/BF,EAAMsmmB,uBAAuBpmmB,GACzBA,EAAKuS,QACLzS,EAAMsqf,kBAAoB,cAG1Btqf,EAAMsqf,kBAAoB,UAGlCrqf,KAAKwmmB,gBAAkB,SAAUvmmB,GAC7BF,EAAMsmmB,uBAAuBpmmB,GACzBA,EAAKuS,QACLzS,EAAMsqf,kBAAoB,YAG1Btqf,EAAMsqf,kBAAoB,UAGlCrqf,KAAKsvf,MAAQqtD,EA+VjB,OA7VAr+iB,OAAOuJ,eAAe85e,EAAWtmf,UAAW,aAIxCqM,IAAK,WACD,OAAO1H,KAAKmlmB,mBAKhB99lB,IAAK,SAAUrK,GAEX,OADAgD,KAAKmlmB,kBAAoBnomB,EACjBgD,KAAKgtB,WACT,IAAK,OACDhtB,KAAK0uC,MAAO,EACZ1uC,KAAKuxC,QAAS,EACd,MACJ,IAAK,SACDvxC,KAAK0uC,MAAO,EACZ1uC,KAAKuxC,QAAS,EACd,MACJ,IAAK,aACDvxC,KAAK0uC,MAAO,EACZ1uC,KAAKuxC,QAAS,EACd,MACJ,IAAK,UACDvxC,KAAK0uC,MAAO,EACZ1uC,KAAKuxC,QAAS,IAI1B5pC,YAAY,EACZC,cAAc,IAKlB+5e,EAAWtmf,UAAUkkC,cAAgB,WACjC,MAAO,cAEXoid,EAAWtmf,UAAUirN,mBAAqB,SAAU5/M,EAAMpD,EAAID,GAM1D,OALclC,EAAc,SACxBsC,OAASiD,KAAMA,GACfpD,GAAIA,EACJD,UAAWA,KAOnBs+e,EAAWtmf,UAAUygf,eAAiB,SAAU9te,GAC5C,IACIy4lB,EACAC,EACAC,EACAC,EACAC,EACAvjmB,EAAKtD,KAAKsvf,MAAMA,MAAMh9W,YAC1BtyI,KAAKmH,OAAShG,EAAc,OAASmC,GAAIA,EAAK,oBAAqBD,UAAW,kBAC9E,IAAIyjmB,EAAU9mmB,KAAK+mmB,WAAW/4lB,GAC9BhO,KAAKmH,OAAOxF,YAAYmlmB,GACxB,IAAI3O,EAAUn4lB,KAAKgnmB,eAAeh5lB,GAClChO,KAAKmH,OAAOxF,YAAYw2lB,GACxB,IAAI8O,EAAW9lmB,EAAc,OAASmC,GAAIA,EAAK,aAAcC,OAAQ,qBACrEvD,KAAKknmB,aAAe/lmB,EAAc,OAASmC,GAAIA,EAAK,gBAAiBD,UAAW,0BAChF,IAAI8jmB,EAAiBhmmB,EAAc,SAC/BkC,UAAW,yDAA0DrB,UAAWgM,EAAO+lE,YAAY,gBAEvG/zE,KAAKknmB,aAAavlmB,YAAYwlmB,GAC9B,IAAIhF,EAAmBnimB,KAAKsmN,mBAAmB,QAAStmN,KAAKmH,OAAO7D,GAAK,YAAa,uBACtFtD,KAAKknmB,aAAavlmB,YAAYwgmB,GAC9B8E,EAAStlmB,YAAY3B,KAAKknmB,cAC1BlnmB,KAAKmH,OAAOxF,YAAYslmB,GACxB,IAAIG,EAAiBjmmB,EAAc,OAASmC,GAAIA,EAAK,oBACjD+jmB,EAAoBlmmB,EAAc,OAClCkC,UAAW,8CACXC,GAAItD,KAAKmH,OAAO7D,GAAK,wBAEzBmjmB,EAActlmB,EAAc,SAAWkC,UAAW,+BAAgCrB,UAAWgM,EAAO+lE,YAAY,aAChHszhB,EAAkB1lmB,YAAY8kmB,GAC9BC,EAAuB1mmB,KAAKsmN,mBAAmB,WAAYtmN,KAAKmH,OAAO7D,GAAK,iBAAkB,IAC9F+jmB,EAAkB1lmB,YAAY+kmB,GAC9BC,EAAqB3mmB,KAAKsmN,mBAAmB,WAAYtmN,KAAKmH,OAAO7D,GAAK,eAAgB,IAC1F+jmB,EAAkB1lmB,YAAYglmB,GAC9BS,EAAezlmB,YAAY0lmB,GAC3B,IAAIC,EAAoBnmmB,EAAc,OAASkC,UAAW,qBAAsBC,GAAIA,EAAK,wBACzFsjmB,EAAmB5mmB,KAAKsmN,mBAAmB,WAAYtmN,KAAKmH,OAAO7D,GAAK,aAAc,IACtFgkmB,EAAkB3lmB,YAAYilmB,GAC9BC,EAA6B7mmB,KAAKsmN,mBAAmB,WAAYtmN,KAAKmH,OAAO7D,GAAK,uBAAwB,IAC1GgkmB,EAAkB3lmB,YAAYklmB,GAC9BO,EAAezlmB,YAAY2lmB,GAC3BtnmB,KAAKmH,OAAOxF,YAAYylmB,GACxBpnmB,KAAKsvf,MAAMA,MAAMtuf,QAAQW,YAAY3B,KAAKmH,QAC1CnH,KAAKulmB,YAAc,IAAIvgd,IACnB5kI,OAAQpgB,KAAK6+lB,gBAAiB7hmB,MAAO,YAEzCgD,KAAKulmB,YAAYlvjB,SAAS8rjB,GAC1BnimB,KAAKylmB,iBAAmB,IAAI5mf,IACxBz+F,OAAQpgB,KAAKommB,mBACbnzlB,SAAU,0BACVI,MAAOrF,EAAO+lE,YAAY,mBAE9B/zE,KAAKylmB,iBAAiBpvjB,SAASqwjB,GAC/B1mmB,KAAK0lmB,oBAAsB,IAAI7mf,IAC3Bz+F,OAAQpgB,KAAKsmmB,mBACbrzlB,SAAU,mCACVI,MAAOrF,EAAO+lE,YAAY,0BAE9B/zE,KAAK0lmB,oBAAoBrvjB,SAASwwjB,GAClC7mmB,KAAK4lmB,UAAY,IAAI/mf,IACjBxrG,MAAOrF,EAAO+lE,YAAY,aAC1B3zD,OAAQpgB,KAAKwmmB,kBAEjBxmmB,KAAK4lmB,UAAUvvjB,SAASuwjB,GACxB5mmB,KAAK2lmB,YAAc,IAAI9mf,IACnBxrG,MAAOrF,EAAO+lE,YAAY,eAC1B9gE,SAAU,0BAA2BmN,OAAQpgB,KAAKummB,oBAEtDvmmB,KAAK2lmB,YAAYtvjB,SAASswjB,IAE9BhlH,EAAWtmf,UAAU2rmB,eAAiB,SAAUh5lB,GAC5C,IAAI6e,EACAsrkB,EACA70lB,EAAKtD,KAAKsvf,MAAMA,MAAMh9W,YAC1B6ld,EAAUh3lB,EAAc,OAASmC,GAAIA,EAAK,2BAA4BD,UAAW,gDACjF,IAAIkkmB,EAAcpmmB,EAAc,OAASmC,GAAIA,EAAK,iCAC9CkkmB,EAAYrmmB,EAAc,SAAWkC,UAAW,uBAAwBrB,UAAWgM,EAAO+lE,YAAY,UACtGxwE,EAAS,kDACbspB,EAAW1rB,EAAc,UAAYmC,GAAItD,KAAKmH,OAAO7D,GAAK,YAAaC,OAAQA,KACtEvB,UAAY,iTAGrBulmB,EAAY5lmB,YAAY6lmB,GACxBD,EAAY5lmB,YAAYkrB,GACxBsrkB,EAAQx2lB,YAAY4lmB,GACpB,IAMIE,EANAC,EAAcvmmB,EAAc,OAC5BkC,UAAW,yBACXC,GAAIA,EAAK,iCAGTqkmB,EAAiBxmmB,EAAc,SAAWkC,UAAW,uBAAwBrB,UADtEgM,EAAO+lE,YAAY,eAa9B,OAVA0zhB,EAAmBtmmB,EAAc,UAAYmC,GAAItD,KAAKmH,OAAO7D,GAAK,aAAcC,OAAQA,IACxFkkmB,EAAiBzlmB,UAAY,WAAagM,EAAO+lE,YAAY,QAAU,qCACvE2zhB,EAAY/lmB,YAAYgmmB,GACxBD,EAAY/lmB,YAAY8lmB,GACxBtP,EAAQx2lB,YAAY+lmB,GACpB1nmB,KAAKslmB,aAAe,IAAIxpI,IAAW17c,OAAQpgB,KAAK2+lB,eAAgB92Y,YAAa,QAAS7xM,MAAO,UAC7FhW,KAAKslmB,aAAalglB,iBAAkB,EACpCplB,KAAKslmB,aAAajvjB,SAASxpB,GAC3B7sB,KAAKwlmB,cAAgB,IAAI/xI,IAAerzc,OAAQpgB,KAAKmmmB,gBAAiBt+Y,YAAa,QAAS7xM,MAAO,UACnGhW,KAAKwlmB,cAAcnvjB,SAASoxjB,GACrBtP,GAEXx2G,EAAWtmf,UAAU0rmB,WAAa,SAAU/4lB,GACxC,IAAI1K,EAAKtD,KAAKsvf,MAAMA,MAAMh9W,YACtBw0d,EAAU3lmB,EAAc,OAASmC,GAAIA,EAAK,WAAYD,UAAW,0BACjEukmB,EAAczmmB,EAAc,OAASmC,GAAIA,EAAK,iBAC9CukmB,EAAgB1mmB,EAAc,SAC9BkC,UAAW,uBACXrB,UAAWgM,EAAO+lE,YAAY,UAE9B+zhB,EAAiB3mmB,EAAc,UAAYmC,GAAItD,KAAKmH,OAAO7D,GAAK,cACpEwkmB,EAAe9lmB,UAAY,6qBAO3B4lmB,EAAYjmmB,YAAYkmmB,GACxBD,EAAYjmmB,YAAYmmmB,GACxBhB,EAAQnlmB,YAAYimmB,GACpB,IAAIG,EACAC,EACAC,EACJF,EAAc5mmB,EAAc,OAASkC,UAAW,yBAA0BC,GAAIA,EAAK,eAAgBC,OAAQ,iBAC3GykmB,EAAiB7mmB,EAAc,SAAWkC,UAAW,uBAAwBrB,UAAWgM,EAAO+lE,YAAY,gBAc3G,OAZAk0hB,EAAkB9mmB,EAAc,UAAYmC,GAAItD,KAAKmH,OAAO7D,GAAK,aAAcC,OAD/D,mDAEhB0kmB,EAAgBjmmB,UAAY,WACxBgM,EAAO+lE,YAAY,WAAa,oBAAsB/lE,EAAO+lE,YAAY,QAAU,oBACnF/lE,EAAO+lE,YAAY,UAAY,oBAAsB/lE,EAAO+lE,YAAY,cAAgB,YAC5Fg0hB,EAAYpmmB,YAAYqmmB,GACxBD,EAAYpmmB,YAAYsmmB,GACxBnB,EAAQnlmB,YAAYommB,GACpB/nmB,KAAKolmB,aAAe,IAAItpI,IAAW17c,OAAQpgB,KAAKkmmB,iBAAkBr+Y,YAAa,QAAS7xM,MAAO,UAC/FhW,KAAKolmB,aAAahglB,iBAAkB,EACpCplB,KAAKolmB,aAAa/ujB,SAASyxjB,GAC3B9nmB,KAAKqlmB,cAAgB,IAAI5xI,IAAerzc,OAAQpgB,KAAKimmB,gBAAiBp+Y,YAAa,QAAS7xM,MAAO,UACnGhW,KAAKqlmB,cAAchvjB,SAAS4xjB,GACrBnB,GAKXnlH,EAAWtmf,UAAU0if,eAAiB,SAAUC,GACxCA,IACAh+e,KAAKg+e,gBAAkBA,GAE3B,IAAIhwe,EAAS,IAAIwpG,GAAK,iBAAkBx3G,KAAKsvf,MAAMA,MAAM3xE,eACzD3va,EAAO2pG,UAAU33G,KAAKsvf,MAAMA,MAAMthf,QAClCL,GAAW3N,KAAKsvf,MAAMA,MAAMthf,QACvBhO,KAAKmH,QACNnH,KAAK87e,eAAe9te,GAExBhO,KAAKsvf,MAAMk8F,OAAO5mgB,OAAS52E,EAAO+lE,YAAY,QAC9C/zE,KAAKsvf,MAAMk8F,OAAOx1kB,MAAQ,OAC1BhW,KAAKsvf,MAAMk8F,OAAOz1kB,OAAS,OAC3B/V,KAAKsvf,MAAMk8F,OAAOpxjB,QAAUp6B,KAAKmH,OACjCnH,KAAKsvf,MAAMk8F,OAAOr1iB,WAAan2C,KAAK6lmB,eACpC7lmB,KAAKsvf,MAAMk8F,OAAOvplB,MAAQjC,KAAK8lmB,gBAC/B9lmB,KAAKsvf,MAAMk8F,OAAOrle,UACVE,MAAOrmH,KAAK+lmB,mBACZ3/e,aAAehsF,QAASpsB,EAAO+lE,YAAY,MAAO9gE,SAAU,qBAAsB+qG,WAAW,KAG7FqI,MAAOrmH,KAAKurlB,oBACZnle,aAAehsF,QAASpsB,EAAO+lE,YAAY,UAAW9gE,SAAU,0BAExEjT,KAAKsvf,MAAMk8F,OAAO5/hB,WAClB5rD,KAAKsvf,MAAMk8F,OAAOvne,QAQtB09X,EAAWtmf,UAAU2qmB,kBAAoB,SAAUp2hB,EAAW5zC,GAE1D,GADAh8B,KAAKsvf,MAAMA,MAAM5U,aAAah8D,YAAY,mBACtC9uW,EAAU0qK,QAOV,OANI1qK,EAAUryE,MAAMoO,SAAWikE,EAAU+nd,mBAAmB/nd,EAAUryE,MAAMslf,aAExE7if,KAAKsvf,MAAMA,MAAM5U,aAAas8E,6BAA6Bpnf,EAAWA,EAAUryE,MAAMslf,UAAU7E,qBAAiB7if,EAAW6gC,GAC5Hh8B,KAAKsvf,MAAMA,MAAM5U,aAAa+oE,SAAS7ze,SAE3C5vE,KAAKsvf,MAAMpN,cAKXlif,KAAKsvf,MAAMA,MAAM5U,aAAaq3C,eAAe/xhB,KAAKsvf,MAAM1/a,WACxD5vE,KAAKsvf,MAAMA,MAAM5U,aAAai5E,mCAAmC,kBAAmB33hB,GAAQ,IAMpG2ld,EAAWtmf,UAAUgrmB,uBAAyB,SAAUpmmB,GAChDD,KAAKylmB,iBAAiBjzlB,SAAWxS,KAAK0lmB,oBAAoBlzlB,UAC1DxS,KAAKylmB,iBAAiBjzlB,SAAU,EAChCxS,KAAK0lmB,oBAAoBlzlB,SAAU,EAC/BvS,EAAK3D,MAAM8xG,cAAc9qG,KAAOtD,KAAKmH,OAAO7D,GAAK,uBACjDtD,KAAK0lmB,oBAAoBlzlB,SAAU,EAGnCxS,KAAKylmB,iBAAiBjzlB,SAAU,GAGpCxS,KAAK2lmB,YAAYnzlB,SAAWxS,KAAK4lmB,UAAUpzlB,UAC3CxS,KAAK4lmB,UAAUpzlB,SAAU,EACzBxS,KAAK2lmB,YAAYnzlB,SAAU,EACvBvS,EAAK3D,MAAM8xG,cAAc9qG,KAAOtD,KAAKmH,OAAO7D,GAAK,aACjDtD,KAAK4lmB,UAAUpzlB,SAAU,EAGzBxS,KAAK2lmB,YAAYnzlB,SAAU,IAOvCmve,EAAWtmf,UAAUmzlB,wBAA0B,WAC3CxulB,KAAKolmB,aAAapomB,MAAQ,GAC1BgD,KAAKslmB,aAAatomB,MAAQ,GAC1BgD,KAAKqlmB,cAAcromB,MAAQ,GAC3BgD,KAAKylmB,iBAAiBjzlB,SAAU,EAChCxS,KAAK0lmB,oBAAoBlzlB,SAAU,EACnCxS,KAAK2lmB,YAAYnzlB,SAAU,EAC3BxS,KAAK4lmB,UAAUpzlB,SAAU,EACzBxS,KAAK0uC,UAAOvzC,EACZ6E,KAAKuxC,YAASp2C,EACd6E,KAAKk1Q,eAAY/5Q,EACjB6E,KAAKuqf,mBAAgBpvf,EACrB6E,KAAKqqf,uBAAoBlvf,EACzB6E,KAAKulmB,YAAYnllB,YAASjlB,EAC1B6E,KAAKsqf,eAAYnvf,EACjB6E,KAAK6sB,cAAW1xB,EAChB6E,KAAKitB,gBAAa9xB,GAKtBwmf,EAAWtmf,UAAUiX,QAAU,WAM3B,GALAtS,KAAKsvf,WAAQn0f,EACT6E,KAAKg+e,kBACLh+e,KAAKg+e,gBAAgB1re,UACrBtS,KAAKg+e,qBAAkB7if,IAEtBsC,EAAkBuC,KAAKmH,QAAS,CAC7BnH,KAAKmH,OAAOkN,eACZrU,KAAKmH,OAAOkN,cAAc/O,YAAYtF,KAAKmH,QAE/C,IAAK,IAAI4pE,EAAI,EAAGA,EAAI/wE,KAAKmH,OAAOoK,WAAW9U,OAAQs0E,IAC/C/wE,KAAKmH,OAAO7B,YAAYtF,KAAKmH,OAAOoK,WAAWw/D,IAC/CA,IAEJ/wE,KAAKmH,YAAShM,EAEd6E,KAAKolmB,cACLplmB,KAAKolmB,aAAa9ylB,UAEtBtS,KAAKolmB,kBAAejqmB,EAChB6E,KAAKqlmB,eACLrlmB,KAAKqlmB,cAAc/ylB,UAEvBtS,KAAKqlmB,mBAAgBlqmB,EACjB6E,KAAKslmB,cACLtlmB,KAAKslmB,aAAahzlB,UAEtBtS,KAAKslmB,kBAAenqmB,EAChB6E,KAAKulmB,aACLvlmB,KAAKulmB,YAAYjzlB,UAErBtS,KAAKulmB,iBAAcpqmB,EACf6E,KAAKwlmB,eACLxlmB,KAAKwlmB,cAAclzlB,UAEvBtS,KAAKwlmB,mBAAgBrqmB,EACjB6E,KAAKylmB,kBACLzlmB,KAAKylmB,iBAAiBnzlB,UAE1BtS,KAAKylmB,sBAAmBtqmB,EACpB6E,KAAK0lmB,qBACL1lmB,KAAK0lmB,oBAAoBpzlB,UAE7BtS,KAAK0lmB,yBAAsBvqmB,EACvB6E,KAAK2lmB,aACL3lmB,KAAK2lmB,YAAYrzlB,UAErBtS,KAAK2lmB,iBAAcxqmB,EACf6E,KAAK4lmB,WACL5lmB,KAAK4lmB,UAAUtzlB,UAEnBtS,KAAK4lmB,eAAYzqmB,GAEdwmf,KCnjBPC,GAAuC,WAIvC,SAASA,EAAsBxH,GAC3B,IAAIr6e,EAAQC,KACZA,KAAKqljB,eAAgB,EACrBrljB,KAAKkomB,cAAe,EAIpBlomB,KAAKmomB,iCAAkC,EAIvCnomB,KAAKoomB,gCAAiC,EACtCpomB,KAAKk3lB,YAAS/7lB,EAId6E,KAAKqomB,sBAAuB,EAI5BromB,KAAKsomB,uBAAwB,EAC7BtomB,KAAKuomB,aAAe,WAChBxomB,EAAMuvf,MAAMpN,cACZnif,EAAMyomB,oBAAoBltmB,KAAKyE,IAKnCC,KAAKyomB,2BAA6B,WAC9B1omB,EAAMw3d,YAAYj8d,KAAKyE,GACvBA,EAAMuvf,MAAMpN,eAKhBlif,KAAK0omB,qBAAuB,WACxB,IAAI94hB,EAAY7vE,EAAMuvf,MAAM1/a,UAkB5B,GAjBK7vE,EAAM4omB,eAAen2lB,SAAYzS,EAAM4omB,eAAezpf,gBACnDzhH,EAAkBmyE,EAAUkgb,YAAYE,iBAA4D,IAAzCpgb,EAAUkgb,YAAYE,kBACjFjwf,EAAM+vf,YAAYE,eAAiB,EACnCjwf,EAAM+vf,YAAYG,mBAAqB,SAG3Clwf,EAAM+vf,YAAY3K,SAAS,mBAA0D,SAArCplf,EAAM+vf,YAAYC,iBAC9Dtyf,EAAkBmyE,EAAUkgb,YAAY7G,aAAoD,IAArCr5a,EAAUkgb,YAAY7G,cAC7Elpf,EAAM+vf,YAAY7G,WAAa,GAGlClpf,EAAM6omB,kBAAkBp2lB,SAAYzS,EAAM6omB,kBAAkB1pf,gBACzDzhH,EAAkBmyE,EAAUumb,UAAUpgf,SAA0C,IAA/B65D,EAAUumb,UAAUpgf,UACrEhW,EAAMo2f,UAAU7F,WAAa,UAC7Bvwf,EAAMo2f,UAAUpgf,OAAS,GAG5BhW,EAAM8omB,2BAA2Br2lB,SAAYzS,EAAM8omB,2BAA2B3pf,eAO/E,GAA4C,YAAxCn/G,EAAMu0f,WAAWrE,qBACZlwf,EAAM+vf,YAAY3K,SAAS,oBAAsBplf,EAAM+vf,YAAY3K,SAAS,uBACqB,IAA/Fplf,EAAMuvf,MAAM1/a,UAAUryE,MAAMslf,UAAUwR,eAAeJ,WAAWnE,YAAYE,eAAsB,CAErG,IAAIx5e,EAAiBzW,EAAMuvf,MAAM1/a,UAAUryE,MAAMslf,UAAUwR,eAAeJ,WAAW0B,eAAc,GAC/FI,EAAah2f,EAAMuvf,MAAM1/a,UAAUryE,MAAMslf,UAAUwR,eAAeJ,WAAW6B,oBAAoBt/e,GACrGzW,EAAM+vf,YAAYG,mBAAqB,UACvClwf,EAAM+vf,YAAYE,eAAiB+F,EAAapL,GAAcQ,oBAAoBprf,EAAMuvf,MAAMsY,WAAW5xf,OAAS,UAbtHvY,EAAkBmyE,EAAU0kb,WAAWtE,iBAA2D,IAAxCpgb,EAAU0kb,WAAWtE,kBAC/Ejwf,EAAMu0f,WAAWrE,mBAAqB,QACtClwf,EAAMu0f,WAAWtE,eAAiB,GAetCjwf,EAAM+omB,iBACN/omB,EAAMo2f,UAAUpgf,OAAShW,EAAM+omB,gBAEnC/omB,EAAMuvf,MAAMA,MAAM5U,aAAa6hE,mBAAmB,mBAClDx8iB,EAAMuvf,MAAMA,MAAM5U,aAAakrF,cAAc7lkB,EAAM+vf,aACnD/vf,EAAMuvf,MAAMA,MAAM5U,aAAawrF,YAAYnmkB,EAAMo2f,WACjDp2f,EAAMuvf,MAAMA,MAAM5U,aAAa6rF,aAAaxmkB,EAAMu0f,YAClDv0f,EAAMuvf,MAAMA,MAAM84B,cAAcq0B,uBAChC18iB,EAAMgpmB,6BACNhpmB,EAAMuvf,MAAMpN,eAKhBlif,KAAKgpmB,wBAA0B,WAC3B,GAAIjpmB,EAAMsomB,qBAAsB,CAC5B,IAAI/zG,EAAav0f,EAAMuvf,MAAMA,MAAMtjB,wBAAwBsoB,WAC3Dv0f,EAAMuvf,MAAMA,MAAMtjB,wBAAwBi9H,oBAAoB30G,GAElE,GAAIv0f,EAAMuomB,sBAAuB,CAC7B,IAAIx4G,EAAc/vf,EAAMuvf,MAAMA,MAAMrjB,yBAAyB6jB,YAC7D/vf,EAAMuvf,MAAMA,MAAMrjB,yBAAyBi9H,qBAAqBp5G,GAEpE/vf,EAAMsomB,sBAAuB,EAC7BtomB,EAAMuomB,uBAAwB,GAKlCtomB,KAAKu3d,YAAc,WAEfx3d,EAAM4omB,eAAevolB,YAASjlB,EAC9B4E,EAAMopmB,cAAc/olB,YAASjlB,EAC7B4E,EAAMqpmB,eAAehplB,YAASjlB,EAC9B4E,EAAMspmB,cAAcjplB,YAASjlB,EAE7B4E,EAAM6omB,kBAAkBxolB,YAASjlB,EACjC4E,EAAMupmB,aAAalplB,YAASjlB,EAC5B4E,EAAM6qkB,cAAcxqjB,YAASjlB,EAC7B4E,EAAMu+R,aAAal+Q,YAASjlB,EAC5B4E,EAAMwpmB,cAAcnplB,YAASjlB,EAE7B4E,EAAM8omB,2BAA2BzolB,YAASjlB,EAC1C4E,EAAMypmB,aAAapplB,YAASjlB,EAC5B4E,EAAM0pmB,cAAcrplB,YAASjlB,EAC7B4E,EAAMu0f,WAAWhif,UACjBvS,EAAMo2f,UAAU7jf,UAChBvS,EAAM+vf,YAAYx9e,UAClBvS,EAAM+omB,oBAAiB3tmB,EACvB4E,EAAMuvf,MAAM2tG,QAAQv7lB,KAAO3B,EAAMuvf,MAAM1/a,UAAUszc,UAAU5nhB,KAAKyE,EAAMuvf,QAK1Etvf,KAAK+omB,2BAA6B,WAC9BhpmB,EAAMuvf,MAAM2tG,QAAQ17gB,OACpBxhF,EAAMuvf,MAAMpN,eAKhBlif,KAAK0pmB,oBAAsB,WACvB,IAAIjqkB,EAAU1/B,EAAM4omB,eAAen2lB,SAAWzS,EAAM4omB,eAAezpf,cACnEn/G,EAAMopmB,cAAclklB,QAAUwa,EAC9B1/B,EAAMqpmB,eAAenklB,QAAUwa,EAE3B1/B,EAAM+vf,YAAYG,mBADlBxwd,EACuE,WAA/B1/B,EAAMqpmB,eAAepsmB,MACzD,QAAU+C,EAAMqpmB,eAAepsmB,MAGI+C,EAAMuvf,MAAM1/a,UAAUkgb,YAAYG,oBAMjFjwf,KAAK2pmB,qBAAuB,SAAUrtmB,GAClCyD,EAAM6pmB,kCAAkC7pmB,EAAM8pmB,UAC9C,IAAI7omB,EAAU1E,EAAM6K,OACpBrD,EAAU9C,GAAU,gCAAiC,oCACjDA,EAAQ8C,UAAUK,SAAS,6BAC3BpE,EAAMspmB,cAAcpklB,SAAU,EAG9BllB,EAAMspmB,cAAcpklB,SAAU,EAElCllB,EAAM+vf,YAAYC,eAAiBhwf,EAAM+pmB,qBAK7C9pmB,KAAK+pmB,uBAAyB,WAC1BhqmB,EAAM6qkB,cAAc3ljB,QAAUllB,EAAM6omB,kBAAkBp2lB,QACtDzS,EAAMupmB,aAAarklB,QAAUllB,EAAM6omB,kBAAkBp2lB,QACjDzS,EAAM6qkB,cAAc3ljB,QACpBllB,EAAMo2f,UAAU7F,WAAavwf,EAAM6qkB,cAAc5tkB,MAGjD+C,EAAMo2f,UAAU7F,WAAavwf,EAAMuvf,MAAM1/a,UAAUumb,UAAU7F,YAMrEtwf,KAAKgqmB,wBAA0B,WAC3BjqmB,EAAM0pmB,cAAcxklB,QAAUllB,EAAM8omB,2BAA2Br2lB,QAC/DzS,EAAMypmB,aAAavklB,QAAUllB,EAAM8omB,2BAA2Br2lB,SAKlExS,KAAKiqmB,oBAAsB,SAAU3tmB,GACjCyD,EAAMmqmB,4BAA4BnqmB,EAAMoqmB,SAExCrmmB,EADcxH,EAAM6K,QACA,gCAAiC,6BACrDpH,EAAMu0f,WAAW5gc,kBAAoB3zD,EAAMqqmB,oBAM/CpqmB,KAAKk+e,uBAAyB,WAC1Bn+e,EAAMuvf,MAAMA,MAAMrjB,yBAAyBhoX,OAC3ClkH,EAAMuvf,MAAM2tG,QAAQj8lB,QAAQ0D,MAAM2ka,cAAgB,QAKtDrpa,KAAKqqmB,oCAAsC,WACvCtqmB,EAAMuvf,MAAMA,MAAMvjB,8BAA8B9nX,OAChDlkH,EAAMuvf,MAAM2tG,QAAQj8lB,QAAQ0D,MAAM2ka,cAAgB,QAKtDrpa,KAAKi+e,sBAAwB,WACzBl+e,EAAMuvf,MAAMA,MAAMtjB,wBAAwB/nX,OAC1ClkH,EAAMuvf,MAAM2tG,QAAQj8lB,QAAQ0D,MAAM2ka,cAAgB,QAEtDrpa,KAAKsvf,MAAQlV,EAm8BjB,OAj8BA97e,OAAOuJ,eAAe+5e,EAAsBvmf,UAAW,cAInDqM,IAAK,WACD,OAAIjK,EAAkBuC,KAAKwhiB,cAChBxhiB,KAAKwhiB,aAAe,IAAItwC,GAE5Blxf,KAAKwhiB,cAKhBn6hB,IAAK,SAAUrK,GACXgD,KAAKwhiB,aAAexkiB,GAExB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe+5e,EAAsBvmf,UAAW,eAInDqM,IAAK,WACD,OAAIjK,EAAkBuC,KAAKyhiB,gBACvBzhiB,KAAKyhiB,cAAgB,IAAIpyC,GAClBrvf,KAAKyhiB,eAETzhiB,KAAKyhiB,eAKhBp6hB,IAAK,SAAUrK,GACXgD,KAAKyhiB,cAAgBzkiB,GAEzB2K,YAAY,EACZC,cAAc,IAElBtJ,OAAOuJ,eAAe+5e,EAAsBvmf,UAAW,aAInDqM,IAAK,WACD,OAAIjK,EAAkBuC,KAAKsqmB,oBACvBtqmB,KAAKsqmB,kBAAoB,IAAIp6G,GACtBlwf,KAAKsqmB,mBAETtqmB,KAAKsqmB,mBAEhB3imB,YAAY,EACZC,cAAc,IAElBg6e,EAAsBvmf,UAAUkkC,cAAgB,WAC5C,MAAO,yBAKXqid,EAAsBvmf,UAAU+gf,wBAA0B,SAAUimB,GAChE,IAAI/+f,EAAKtD,KAAKsvf,MAAMA,MAAMh9W,YAAc,yBACxCtyI,KAAKmH,OAAShG,EAAc,OAASmC,GAAIA,EAAID,UAAW,8BACxDrD,KAAKsvf,MAAMA,MAAMtuf,QAAQW,YAAY3B,KAAKmH,QAC1C,IAAIivlB,EAAiBj1lB,EAAc,OAASmC,GAAItD,KAAKmH,OAAO7D,GAAK,kBACjEtD,KAAKmH,OAAOxF,YAAYy0lB,GACxBp2lB,KAAK6pmB,SAAW1omB,EAAc,OAC1BmC,GAAItD,KAAKmH,OAAO7D,GAAK,mCAAoCD,UAAW,6BAExErD,KAAKuqmB,OAASppmB,EAAc,OACxBmC,GAAItD,KAAKmH,OAAO7D,GAAK,0BAA2BD,UAAW,6BAE/DrD,KAAKmqmB,QAAUhpmB,EAAc,OACzBmC,GAAItD,KAAKmH,OAAO7D,GAAK,2BAA4BD,UAAW,6BAEhE,IAAImnmB,EAAgBrpmB,EAAc,OAASkC,UAAW,qCAElDmzlB,EAAQr1lB,EAAc,OAASmC,GAAItD,KAAKmH,OAAO7D,GAAK,4BAA6BD,UAAW,wBAC5Fo/M,EAAkBthN,EAAc,OAASkC,UAAW,iBACpDonmB,EAActpmB,EAAc,OAC5BmC,GAAItD,KAAKmH,OAAO7D,GAAK,eAAgBtB,UAAWqggB,EAAWtub,YAAY,WAEvE22hB,EAAYvpmB,EAAc,OAC1BmC,GAAItD,KAAKmH,OAAO7D,GAAK,aAActB,UAAWqggB,EAAWtub,YAAY,SAErE42hB,EAAaxpmB,EAAc,OAC3BmC,GAAItD,KAAKmH,OAAO7D,GAAK,cAAetB,UAAWqggB,EAAWtub,YAAY,UAE1E0uI,EAAgB9gN,YAAY8omB,GAC5BhoZ,EAAgB9gN,YAAY+omB,GAC5BjoZ,EAAgB9gN,YAAYgpmB,GAC5B,IAAI9ta,EAAmB17L,EAAc,OAASkC,UAAW,cACrDunmB,EAAezpmB,EAAc,OAASmC,GAAItD,KAAKmH,OAAO7D,GAAK,kBAC3DunmB,EAAa1pmB,EAAc,OAASmC,GAAItD,KAAKmH,OAAO7D,GAAK,gBACzDwnmB,EAAc3pmB,EAAc,OAASmC,GAAItD,KAAKmH,OAAO7D,GAAK,iBAC9DsnmB,EAAajpmB,YAAY3B,KAAK6pmB,UAC9BgB,EAAWlpmB,YAAY3B,KAAKuqmB,QAC5BO,EAAYnpmB,YAAY3B,KAAKmqmB,SAC7Btta,EAAiBl7L,YAAYipmB,GAC7B/ta,EAAiBl7L,YAAYkpmB,GAC7Bhua,EAAiBl7L,YAAYmpmB,GAC7BtU,EAAM70lB,YAAY8gN,GAClB+zY,EAAM70lB,YAAYk7L,GAClBu5Z,EAAez0lB,YAAY60lB,GAC3Bx2lB,KAAK+qmB,oBAAoB/qmB,KAAK6pmB,SAAUxnG,GACxCrigB,KAAKgrmB,uBAAuBhrmB,KAAKuqmB,OAAQloG,GACzCrigB,KAAKirmB,wBAAwBjrmB,KAAKmqmB,QAAS9nG,GAC3CrigB,KAAKk3lB,OAAS,IAAIn4S,MAAQy3S,GAC1Bx2lB,KAAKmH,OAAOxF,YAAY6omB,GAExB,IAAK,IADDU,EAAmBlrmB,KAAK6pmB,SAASn8lB,uBAAuB1N,KAAK6pmB,SAASvmmB,GAAK,wBACtEnH,EAAI,EAAGA,EAAI+umB,EAAiBzumB,OAAQN,IACzC+umB,EAAiB/umB,GAAGO,iBAAiB,QAASsD,KAAK2pmB,sBAGlD,IADDwB,EAAgBnrmB,KAAKmqmB,QAAQz8lB,uBAAuB1N,KAAKmqmB,QAAQ7mmB,GAAK,6BAC1E,IAASnH,EAAI,EAAGA,EAAIgvmB,EAAc1umB,OAAQN,IACtCgvmB,EAAchvmB,GAAGO,iBAAiB,QAASsD,KAAKiqmB,qBAE/BjqmB,KAAKk3lB,OAAOl2lB,QAAQ0M,uBAAuB,yBAAyB,GACjDA,uBAAuB,cAAc,GAC1D5J,UAAUM,IAAI,oCACdpE,KAAKk3lB,OAAOl2lB,QAAQ0M,uBAAuB,yBAAyB,GACnDA,uBAAuB,cAAc,GACxD5J,UAAUM,IAAI,kCACXpE,KAAKk3lB,OAAOl2lB,QAAQ0M,uBAAuB,yBAAyB,GAClDA,uBAAuB,cAAc,GACzD5J,UAAUM,IAAI,mCAChCpE,KAAKk3lB,OAAOl2lB,QAAQ0M,uBAAuB,eAAe,GAAGhJ,MAAM+H,MAAQ,SAK/Em1e,EAAsBvmf,UAAU4oH,KAAO,WACnC,IAAIo+Y,EAAa,IAAI7qZ,GAAK,iBAAkBx3G,KAAKsvf,MAAMA,MAAM3xE,eAC7D0kF,EAAW1qZ,UAAU33G,KAAKsvf,MAAMA,MAAMthf,QACtCL,GAAW3N,KAAKsvf,MAAMA,MAAMthf,QACvBhO,KAAKmH,QACNnH,KAAKo8e,wBAAwBimB,GAEgB,SAA7CrigB,KAAKsvf,MAAM1/a,UAAU+yb,MAAMj+f,MAAM4xC,UACjCt2C,KAAKsvf,MAAM1/a,UAAU+yb,MAAMj+f,MAAM4xC,QAAU,QAE/Ct2C,KAAKsvf,MAAM2tG,QAAQr4gB,OAASy9a,EAAWtub,YAAY,oBACnD/zE,KAAKsvf,MAAM2tG,QAAQ/olB,UAAakC,EAAG,SAAUC,EAAG,UAChDrW,KAAKsvf,MAAM2tG,QAAQjnlB,MAAQ,OAC3BhW,KAAKsvf,MAAM2tG,QAAQlnlB,OAAS,OAC5B/V,KAAKsvf,MAAM2tG,QAAQ7ikB,QAAUp6B,KAAKmH,OAClCnH,KAAKsvf,MAAM2tG,QAAQ9mjB,WAAan2C,KAAKuomB,aACrCvomB,KAAKsvf,MAAM2tG,QAAQh7lB,MAAQjC,KAAKyomB,2BAChCzomB,KAAKsvf,MAAM2tG,QAAQv7lB,KAAO1B,KAAKq2d,UAAU/6d,KAAK0E,MAC9CA,KAAKsvf,MAAM2tG,QAAQ92e,UACXE,MAAOrmH,KAAK0omB,qBACZtif,aAAehsF,QAASioe,EAAWtub,YAAY,MAAO9gE,SAAU,2BAA4B+qG,WAAW,KAGvGqI,MAAOrmH,KAAK+omB,2BACZ3if,aAAehsF,QAASioe,EAAWtub,YAAY,UAAW9gE,SAAU,gCAG5EjT,KAAKsvf,MAAM2tG,QAAQrxiB,WACnB5rD,KAAKsvf,MAAM2tG,QAAQh5e,QAKvB29X,EAAsBvmf,UAAU+vmB,mBAAqB,SAAUnriB,GAC3DA,EAAMm2b,gBACNn2b,EAAM42b,eAAgB,EACtB52b,EAAM22b,oBACN32b,EAAM42b,eAAgB,EACtB72f,KAAKsvf,MAAM1/a,UAAU0/a,MAAM7jB,iBAAkB,EAC7Czre,KAAKsvf,MAAMz+b,OAAO2md,cAAcv3c,GAChCjgE,KAAKsvf,MAAMA,MAAM5U,aAAa+oE,SAASzjjB,KAAKsvf,MAAM1/a,WAClD5vE,KAAKsvf,MAAMA,MAAM5U,aAAa03C,6BAA4B,GAC1D,IAAIvlb,EAAU7sG,KAAKsvf,MAAMA,MAAM84B,cAC3Bv7a,GAAWA,EAAQwlb,yBACfxlb,EAAQwlb,uBAAuBC,mBAAmB71hB,OAAS,GAC3DowG,EAAQwlb,uBAAuBrgE,kBAEnCnlX,EAAQ0lb,iBAEZvyhB,KAAKsvf,MAAMA,MAAM5U,aAAawC,qBAKlC0E,EAAsBvmf,UAAUmtmB,oBAAsB,WAClDxomB,KAAKqrmB,qBACLrrmB,KAAKsrmB,wBACLtrmB,KAAKurmB,yBACAvrmB,KAAKsvf,MAAMA,MAAMvjB,8BAIlB/re,KAAKwrmB,wBAAwBttf,UAAW,EAHxCl+G,KAAKwrmB,wBAAwBttf,UAAW,EAQ5Cl+G,KAAKyrmB,kBAAkBvtf,UAAW,EAKlCl+G,KAAK0rmB,iBAAiBxtf,UAAW,GAMrC0jY,EAAsBvmf,UAAUg7d,UAAY,WACxCr2d,KAAKsvf,MAAM1/a,UAAUszc,YAErBljhB,KAAK2omB,eAAevolB,OAASpgB,KAAK0pmB,oBAAoBpumB,KAAK0E,MAC3DA,KAAKmpmB,cAAc/olB,OAASpgB,KAAK2rmB,mBAAmBrwmB,KAAK0E,MACzDA,KAAKopmB,eAAehplB,OAASpgB,KAAK4rmB,uBAAuBtwmB,KAAK0E,MAC9DA,KAAKqpmB,cAAcjplB,OAASpgB,KAAK6rmB,mBAAmBvwmB,KAAK0E,MAEzDA,KAAK4omB,kBAAkBxolB,OAASpgB,KAAK+pmB,uBAAuBzumB,KAAK0E,MACjEA,KAAKspmB,aAAalplB,OAASpgB,KAAK8rmB,kBAAkBxwmB,KAAK0E,MACvDA,KAAK4qkB,cAAcxqjB,OAASpgB,KAAK+rmB,sBAAsBzwmB,KAAK0E,MAC5DA,KAAKupmB,cAAcnplB,OAASpgB,KAAKgsmB,uBAAuB1wmB,KAAK0E,MAC7DA,KAAKs+R,aAAal+Q,OAASpgB,KAAKismB,eAAe3wmB,KAAK0E,MAEpDA,KAAK6omB,2BAA2BzolB,OAASpgB,KAAKgqmB,wBAAwB1umB,KAAK0E,MAC3EA,KAAKwpmB,aAAapplB,OAASpgB,KAAKksmB,kBAAkB5wmB,KAAK0E,MACvDA,KAAKypmB,cAAcrplB,OAASpgB,KAAKmsmB,sBAAsB7wmB,KAAK0E,OAOhE4hf,EAAsBvmf,UAAU0vmB,oBAAsB,SAAU/pmB,EAASqhgB,GACrE,IAAI5nf,EAAYtZ,EAAc,OAASmC,GAAItC,EAAQsC,GAAK,wBACpD8omB,EAAajrmB,EAAc,OAC3BmC,GAAImX,EAAUnX,GAAK,aAActB,UAAWqggB,EAAWtub,YAAY,QACnExwE,OAAQ,+DAAgEF,UAAW,oCAEnFgpmB,EAAkBlrmB,EAAc,OAASoC,OAAQ,0BACjD+omB,EAAkBnrmB,EAAc,OAChCoC,OAAQ,eACRF,UAAW,6BAEXkpmB,EAAkBprmB,EAAc,OAChCkC,UAAW,4CAEX43b,EAAS95b,EAAc,OACvBoC,OAAQ,mBACRF,UAAW,oCAEX63b,EAAS/5b,EAAc,OACvBoC,OAAQ,sCACRF,UAAW,8CAEXmpmB,EAAkBrrmB,EAAc,OAChCwnmB,EAAiBxnmB,EAAc,SAC/BmC,GAAItC,EAAQsC,GAAK,yBAA0BG,OAASiD,KAAQ,cAEhE1G,KAAKgwf,eAAiB7uf,EAAc,SAAWmC,GAAItC,EAAQsC,GAAK,oBAChE,IAAImpmB,EAAatrmB,EAAc,OAC3BiomB,EAAiBjomB,EAAc,UAC/Ba,UAAW,WAAaqggB,EAAWtub,YAAY,SAC3C,oBAAsBsub,EAAWtub,YAAY,WAAa,YAAazwE,GAAItC,EAAQsC,GAAK,oBAE5FopmB,EAAYvrmB,EAAc,SAC1Ba,UAAWqggB,EAAWtub,YAAY,cAAexwE,OAAQ,sDAEzDopmB,EAAkBxrmB,EAAc,OAChCa,UAAWqggB,EAAWtub,YAAY,aAAc1wE,UAAW,kCAC3DE,OAAQ,iDAERqpmB,EAAqBzrmB,EAAc,OAASoC,OAAQ,iBACpDspmB,EAAe7rmB,EAAQsC,GAAK,uBAC5BwpmB,EAAe3rmB,EAAc,OAASkC,UAAW,6BACrDrD,KAAKwM,KAAOrL,EAAc,OACtBkC,UAAW,qEAAuEwpmB,EAClFvpmB,GAAItC,EAAQsC,GAAK,kBAAmBC,OAAQ,sCAEhDupmB,EAAanrmB,YAAY3B,KAAKwM,MAC9B,IAAIugmB,EAAiB5rmB,EAAc,OAASkC,UAAW,6BACvDrD,KAAK0zB,OAASvyB,EAAc,OACxBkC,UAAW,wEAA0EwpmB,EACrFvpmB,GAAItC,EAAQsC,GAAK,oBAAqBC,OAAQ,sCAElDwpmB,EAAeprmB,YAAY3B,KAAK0zB,QAChC1zB,KAAKyM,MAAQtL,EAAc,OACvBoC,OAAQ,oCAAqCD,GAAItC,EAAQsC,GAAK,mBAC9DD,UAAW,uEAAyEwpmB,IAExF,IAAIrc,EAAgBrvlB,EAAc,OAASkC,UAAW,6BACtDmtlB,EAAc7ulB,YAAY3B,KAAKyM,OAC/B,IAAIugmB,EAAY7rmB,EAAc,SAC1Ba,UAAWqggB,EAAWtub,YAAY,QAAS1wE,UAAW,+BAEtD4pmB,EAAc9rmB,EAAc,SAC5Ba,UAAWqggB,EAAWtub,YAAY,UAAW1wE,UAAW,+BAExD6pmB,EAAa/rmB,EAAc,SAC3Ba,UAAWqggB,EAAWtub,YAAY,SAAU1wE,UAAW,+BAEvD8pmB,EAAuBhsmB,EAAc,OACrCkC,UAAW,8CAEX+pmB,EAAkBjsmB,EAAc,SAChCa,UAAWqggB,EAAWtub,YAAY,oBAClCxwE,OAAQ,wEAER8lmB,EAAgBlomB,EAAc,OAC9BoC,OAAQ,sBAEZvD,KAAKipf,WAAa9nf,EAAc,SAAWmC,GAAItC,EAAQsC,GAAK,iBAC5D,IAAI+pmB,EAAsBlsmB,EAAc,OACpCkC,UAAW,4BAEfrD,KAAKwrmB,wBAA0BrqmB,EAAc,UACzCa,UAAWqggB,EAAWtub,YAAY,uBAClCzwE,GAAItC,EAAQsC,GAAK,wBAAyBD,UAAW,0CAEzDrD,KAAKyrmB,kBAAoBtqmB,EAAc,UACnCkC,UAAW,yBAA0BrB,UAAWqggB,EAAWtub,YAAY,WACvEzwE,GAAItC,EAAQsC,GAAK,sBAErBtD,KAAKyrmB,kBAAkB/umB,iBAAiB,QAASsD,KAAKk+e,wBACtDl+e,KAAKwrmB,wBAAwB9umB,iBAAiB,QAASsD,KAAKqqmB,qCAC5DgD,EAAoB1rmB,YAAY3B,KAAKwrmB,yBACrC6B,EAAoB1rmB,YAAY3B,KAAKyrmB,mBACrC0B,EAAqBxrmB,YAAYyrmB,GACjC/D,EAAc1nmB,YAAY3B,KAAKipf,YAC/BkkH,EAAqBxrmB,YAAY0nmB,GACjCuD,EAAmBjrmB,YAAYmrmB,GAC/BF,EAAmBjrmB,YAAYormB,GAC/BH,EAAmBjrmB,YAAY6ulB,GAC/Bsc,EAAanrmB,YAAYqrmB,GACzBD,EAAeprmB,YAAYsrmB,GAC3Bzc,EAAc7ulB,YAAYurmB,GAC1BN,EAAmBjrmB,YAAYwrmB,GAC/B1ylB,EAAU9Y,YAAYyqmB,GACtBprmB,EAAQW,YAAY8Y,GACpB6xlB,EAAgB3qmB,YAAYgnmB,GAC5B0D,EAAgB1qmB,YAAY2qmB,GAC5BC,EAAgB5qmB,YAAY3B,KAAKgwf,gBACjCq8G,EAAgB1qmB,YAAY4qmB,GAC5BE,EAAW9qmB,YAAYynmB,GACvBnuK,EAAOt5b,YAAY+qmB,GACnBxxK,EAAOv5b,YAAY8qmB,GACnBD,EAAgB7qmB,YAAYs5b,GAC5BuxK,EAAgB7qmB,YAAYu5b,GAC5BmxK,EAAgB1qmB,YAAY6qmB,GAC5BxrmB,EAAQW,YAAY0qmB,GACpBrrmB,EAAQW,YAAYgrmB,GACpB3rmB,EAAQW,YAAYirmB,GACpB5rmB,EAAQW,YAAY0rmB,GACpBrtmB,KAAKmpmB,cAAgB,IAAItxe,IACrB76H,MAAO,EAAGs8H,SAAU,EAAGv5G,IAAK,EAAGzT,IAAK,KAAM0J,MAAO,IAAK41F,mBAAmB,IAE7E5rG,KAAKmpmB,cAAc9yjB,SAASr2C,KAAKgwf,gBACjChwf,KAAKqpmB,cAAgB,IAAIxxe,IACrB76H,MAAO,EAAGs8H,SAAU,EAAGv5G,KAAM,KAAMzT,IAAK,KAAM0J,MAAO,IAAK41F,mBAAmB,IAEjF5rG,KAAKqpmB,cAAchzjB,SAASr2C,KAAKipf,YACjCjpf,KAAK2omB,eAAiB,IAAI9pf,IACtBxrG,MAAOgvf,EAAWtub,YAAY,qBAElC/zE,KAAK2omB,eAAetyjB,SAASsyjB,GAC7B3omB,KAAKopmB,eAAiB,IAAI31I,IAAez9c,MAAO,UAChDhW,KAAKopmB,eAAe/yjB,SAAS+yjB,IAKjCxnH,EAAsBvmf,UAAUswmB,mBAAqB,WACjD3rmB,KAAK8vf,YAAYE,eAAiBhwf,KAAKmpmB,cAAcnsmB,OAKzD4kf,EAAsBvmf,UAAUuwmB,uBAAyB,WAEzC5rmB,KAAKsvf,MAAM1/a,UAAUryE,MAAMslf,UAAUwR,eAAeJ,WADhE,IAAIj3f,EAEAgZ,EAAQ20e,GAAcQ,oBAAoBnrf,KAAKsvf,MAAMsY,WAAW5xf,OACnC,YAA7BhW,KAAKopmB,eAAe38kB,MAA8E,YAAxDzsB,KAAKsvf,MAAM1/a,UAAUkgb,YAAYG,oBAC3Ejzf,EAAQgD,KAAKmpmB,cAAcnsmB,MAAQgZ,EAAQ,IAC3ChW,KAAKstmB,qBAAqBttmB,KAAKmpmB,cAAe,UAAWnsmB,IAEvB,WAA7BgD,KAAKopmB,eAAe38kB,MAA6E,UAAxDzsB,KAAKsvf,MAAM1/a,UAAUkgb,YAAYG,oBAC/Ejzf,EAAQgZ,EAAQ,IAAMhW,KAAKmpmB,cAAcnsmB,MACzCgD,KAAKstmB,qBAAqBttmB,KAAKmpmB,cAAe,QAASnsmB,KAK/CA,EAF0B,SAA9BgD,KAAKmpmB,cAAcntkB,OACc,WAA7Bh8B,KAAKopmB,eAAe38kB,KACZzW,EAAQ,IAAMhW,KAAKmpmB,cAAcnsmB,MAGjCgD,KAAKmpmB,cAAcnsmB,MAIE,YAA7BgD,KAAKopmB,eAAe38kB,KACZzsB,KAAKmpmB,cAAcnsmB,MAAQgZ,EAAQ,IAGnChW,KAAKmpmB,cAAcnsmB,MAInCgD,KAAKstmB,qBAAqBttmB,KAAKmpmB,cAA6C,WAA7BnpmB,KAAKopmB,eAAe38kB,KAAqB,QAAUzsB,KAAKopmB,eAAe38kB,KAAMzvB,IAEhIgD,KAAK8vf,YAAYG,mBAAmD,WAA7Bjwf,KAAKopmB,eAAe38kB,KAAqB,QAAUzsB,KAAKopmB,eAAe38kB,MAKlHm1d,EAAsBvmf,UAAUwwmB,mBAAqB,WACjD7rmB,KAAK8vf,YAAY7G,WAAajpf,KAAKqpmB,cAAcrsmB,OAErD4kf,EAAsBvmf,UAAUgwmB,mBAAqB,WAEjD,IAAIv7G,EAAc9vf,KAAKsvf,MAAM1/a,UAAUkgb,YACnCy9G,EAAgBz9G,EAAYE,eAAiB,EAC7CA,EAAiBF,EAAYE,eACjC,GAAIvyf,EAAkBqyf,EAAYE,gBAAiB,CAC/Chwf,KAAK2omB,eAAezpf,eAAgB,EAGpC8wY,EAFiBhwf,KAAKsvf,MAAM1/a,UAAUryE,MAAMslf,UAAUwR,eAAeJ,WAC9CpB,cAAc7yf,KAAKsvf,OACnBQ,YAAYE,oBAGnChwf,KAAK2omB,eAAen2lB,QAAU+6lB,EAElCvtmB,KAAKmpmB,cAAclklB,QAAUsolB,EAC7BvtmB,KAAKopmB,eAAenklB,QAAUsolB,EAC9BvtmB,KAAKstmB,qBAAqBttmB,KAAKmpmB,cAAer5G,EAAYG,mBAAoBD,GACvC,SAAnCF,EAAYG,oBAAoE,UAAnCH,EAAYG,mBACzDjwf,KAAKopmB,eAAen3lB,MAAQ,EAG5BjS,KAAKopmB,eAAen3lB,MAAQ,EAEhCjS,KAAKqpmB,cAAcrsmB,MAAQ8yf,EAAY7G,WACvCjpf,KAAKqpmB,cAAcpklB,QAAyC,SAA/B6qe,EAAYC,eACzCjsf,EAAU9D,KAAKwM,SAAW,gCAC1B1I,EAAU9D,KAAKyM,UAAY,gCAC3B3I,EAAU9D,KAAK0zB,WAAa,gCACO,SAA/Bo8d,EAAYC,eACZ/vf,KAAKwM,KAAK1I,UAAUM,IAAI,+BAEY,WAA/B0rf,EAAYC,eACjB/vf,KAAK0zB,OAAO5vB,UAAUM,IAAI,+BAEU,UAA/B0rf,EAAYC,gBACjB/vf,KAAKyM,MAAM3I,UAAUM,IAAI,gCAMjCw9e,EAAsBvmf,UAAUyumB,kBAAoB,WAGhD,IAAK,IAFDxmmB,EAAKtD,KAAK6pmB,SAASvmmB,GACnBkqmB,EAAextmB,KAAK6pmB,SAASn8lB,uBAAuBpK,EAAK,wBACpDigB,EAAI,EAAGA,EAAIiqlB,EAAa/wmB,OAAQ8mB,IAAK,CAE1C,GADkBiqlB,EAAajqlB,GACfzf,UAAUK,SAAS,+BAC/B,OAAU,IAANof,EACO,OAEI,IAANA,EACE,SAGA,UASvBq+d,EAAsBvmf,UAAUuumB,kCAAoC,SAAU5omB,GAG1E,IAAK,IAFDsC,EAAKtC,EAAQsC,GACbkqmB,EAAexsmB,EAAQ0M,uBAAuBpK,EAAK,wBAC9CigB,EAAI,EAAGA,EAAIiqlB,EAAa/wmB,OAAQ8mB,IAAK,CAC1C,IAAIkqlB,EAAcD,EAAajqlB,GAC3BkqlB,EAAY3pmB,UAAUK,SAAS,gCAC/BL,EAAU2pmB,GAAc,oCAAqC,kCASzE7rH,EAAsBvmf,UAAU2vmB,uBAAyB,SAAUhqmB,EAASqhgB,GACxE,IAAIvrM,EAAS31T,EAAc,OAASoC,OAAQ,iBACxCmqmB,EAAevsmB,EAAc,OAC7Ba,UAAWqggB,EAAWtub,YAAY,QAClCxwE,OAAQ,sDACRF,UAAW,oCAEXkmd,EAAYpod,EAAc,OAASoC,OAAQ,iCAC3CoqmB,EAAYxsmB,EAAc,OAC1BoC,OAAQ,+BACRF,UAAW,0BAEXulmB,EAAoBznmB,EAAc,SAClCsC,OAASiD,KAAQ,YAAcpD,GAAItC,EAAQsC,GAAK,qBAEhDsqmB,EAAYzsmB,EAAc,OAC1BoC,OAAQ,yBACRF,UAAW,oBAEfrD,KAAKggE,UAAY7+D,EAAc,SAC3BsC,OAASiD,KAAQ,QAAUpD,GAAMtC,EAAQsC,GAAK,sBAElD,IAAI43b,EAAS/5b,EAAc,OACvBoC,OAAQ,8DAERsqmB,EAAS1smB,EAAc,OACvBoC,OAAQ,mBACRF,UAAW,yCAEXyqmB,EAAS3smB,EAAc,OACvBoC,OAAQ,mBACRF,UAAW,6BAEXopmB,EAAatrmB,EAAc,OAC3BypkB,EAAgBzpkB,EAAc,UAC9Ba,UAAW,WAAaqggB,EAAWtub,YAAY,YACzC,oBAAsBsub,EAAWtub,YAAY,WAAa,YAChEzwE,GAAItC,EAAQsC,GAAK,iBAEjBopmB,EAAYvrmB,EAAc,SAC1Ba,UAAWqggB,EAAWtub,YAAY,iBAAkBxwE,OAAQ,qDAEhEuzT,EAAOn1T,YAAY+rmB,GACnB1smB,EAAQW,YAAYm1T,GACpB62S,EAAUhsmB,YAAYinmB,GACtBr/I,EAAU5nd,YAAYgsmB,GACtBC,EAAUjsmB,YAAY3B,KAAKggE,WAC3BupZ,EAAU5nd,YAAYismB,GACtBnB,EAAW9qmB,YAAYipkB,GACvBijC,EAAOlsmB,YAAY+qmB,GACnBoB,EAAOnsmB,YAAY8qmB,GACnBvxK,EAAOv5b,YAAYksmB,GACnB3yK,EAAOv5b,YAAYmsmB,GACnBvkJ,EAAU5nd,YAAYu5b,GACtBl6b,EAAQW,YAAY4nd,GACpB,IAAI64I,EAAejhmB,EAAc,OAC7Ba,UAAWqggB,EAAWtub,YAAY,WAAYxwE,OAAQ,eACtDF,UAAW,oCAGX0qmB,EAAoB5smB,EAAc,OAASkC,UAAW,kCACtD2qmB,EAAyB7smB,EAAc,OAASkC,UAAW,uCAC3DkmmB,EAAgBpomB,EAAc,SAC9BsC,OAASiD,KAAQ,YAAcpD,GAAItC,EAAQsC,GAAK,qBAEhDg7R,EAAen9R,EAAc,SAC7BsC,OAASiD,KAAQ,YAAcpD,GAAMtC,EAAQsC,GAAK,mBAEtDyqmB,EAAkBpsmB,YAAY4nmB,GAC9ByE,EAAuBrsmB,YAAY28R,GACnCt9R,EAAQW,YAAYygmB,GACpBphmB,EAAQW,YAAYosmB,GACpB/smB,EAAQW,YAAYqsmB,GACpBhumB,KAAKspmB,aAAe,IAAIzxe,IACpB76H,MAAO,EAAGs8H,SAAU,EAAGv5G,IAAK,EAAGzT,IAAK,KAAM0J,MAAO,IAAK41F,mBAAmB,IAE7E5rG,KAAKspmB,aAAajzjB,SAASr2C,KAAKggE,WAChChgE,KAAK4omB,kBAAoB,IAAI/pf,IACzBxrG,MAAOgvf,EAAWtub,YAAY,oBAElC/zE,KAAK4omB,kBAAkBvyjB,SAASuyjB,GAChC5omB,KAAK4qkB,cAAgB,IAAIn3G,IAAez9c,MAAO,UAC/ChW,KAAK4qkB,cAAcv0hB,SAASu0hB,GAC5B5qkB,KAAKupmB,cAAgB,IAAI1qf,IACrBxrG,MAAOgvf,EAAWtub,YAAY,qCAElC/zE,KAAKupmB,cAAclzjB,SAASkzjB,GAC5BvpmB,KAAKs+R,aAAe,IAAIz/K,IACpBxrG,MAAOgvf,EAAWtub,YAAY,kDAElC/zE,KAAKs+R,aAAajoP,SAASioP,IAE/BsjN,EAAsBvmf,UAAUiwmB,sBAAwB,WACpD,IAAIn1G,EAAYn2f,KAAKsvf,MAAM1/a,UAAUumb,UACjC83G,EAAmB93G,EAAUpgf,OAAS,GAA8B,YAAzBogf,EAAU7F,WAErD29G,EACAjumB,KAAK4omB,kBAAkBp2lB,SAAU,OAGJrX,IAAzBg7f,EAAU7F,YACVtwf,KAAK4omB,kBAAkB1pf,eAAgB,EACvC+uf,GAAkB,GAGlBjumB,KAAK4omB,kBAAkBp2lB,SAAU,EAGzCxS,KAAKspmB,aAAarklB,QAAUgplB,EAC5BjumB,KAAK4qkB,cAAc3ljB,QAAUgplB,EAGzBxwmB,EAAkBuC,KAAKsvf,MAAM1/a,UAAUumb,UAAUrqe,WACjD9rB,KAAKs+R,aAAap/K,eAAgB,EAClCl/G,KAAKs+R,aAAapgL,UAAW,GAExBl+G,KAAKsvf,MAAM1/a,UAAUumb,UAAUrqe,UACpC9rB,KAAKs+R,aAAa9rR,SAAU,EAC5BxS,KAAKs+R,aAAap/K,eAPF,EAQhBl/G,KAAKs+R,aAAapgL,UARF,IAWhBl+G,KAAKs+R,aAAa9rR,SAAU,EAC5BxS,KAAKs+R,aAAap/K,eAAgB,EAClCl/G,KAAKs+R,aAAapgL,UAbF,GAehBzgH,EAAkB04f,EAAUxF,uBAC5B3wf,KAAKupmB,cAAcrqf,eAAgB,EAGnCl/G,KAAKupmB,cAAc/2lB,QAAU2jf,EAAUxF,sBAE3C3wf,KAAKspmB,aAAatsmB,MAAQm5f,EAAUpgf,OACP,SAAzBogf,EAAU7F,YAAkD,YAAzB6F,EAAU7F,WAC7Ctwf,KAAK4qkB,cAAc34jB,MAAQ,EAG3BjS,KAAK4qkB,cAAc34jB,MAAQ,GAMnC2ve,EAAsBvmf,UAAUywmB,kBAAoB,WAChD9rmB,KAAK8omB,eAAiB9omB,KAAKspmB,aAAatsmB,OAK5C4kf,EAAsBvmf,UAAU0wmB,sBAAwB,WACpD/rmB,KAAKm2f,UAAU7F,WAAatwf,KAAK4qkB,cAAcn+iB,MAKnDm1d,EAAsBvmf,UAAU2wmB,uBAAyB,WACrDhsmB,KAAKm2f,UAAUxF,sBAAwB3wf,KAAKupmB,cAAc/2lB,SAK9Dove,EAAsBvmf,UAAU4wmB,eAAiB,WAC7CjsmB,KAAKm2f,UAAUrqe,SAAW9rB,KAAKs+R,aAAa9rR,SAsBhDove,EAAsBvmf,UAAU4vmB,wBAA0B,SAAUjqmB,EAASqhgB,GACzE,IAAI81F,EAAUh3lB,EAAc,OAASoC,OAAQ,iBACzCrC,EAAMC,EAAc,OACpBa,UAAWqggB,EAAWtub,YAAY,QAAS1wE,UAAW,kCACtDE,OAAQ,wDAER2qmB,EAAY/smB,EAAc,OAASoC,OAAQ,iCAC3C4qmB,EAAYhtmB,EAAc,OAC1BoC,OAAQ,+BACRF,UAAW,+BAEXwlmB,EAA6B1nmB,EAAc,SAC3CsC,OAASiD,KAAQ,YAAcpD,GAAItC,EAAQsC,GAAK,gCAEhDsqmB,EAAYzsmB,EAAc,OAC1BoC,OAAQ,yBACRF,UAAW,wBAEfrD,KAAKoumB,mBAAqBjtmB,EAAc,SACpCmC,GAAItC,EAAQsC,GAAK,0BAA2BG,OAASiD,KAAQ,UAEjE,IAAIw0b,EAAS/5b,EAAc,OACvBoC,OAAQ,8DAERsqmB,EAAS1smB,EAAc,OACvBoC,OAAQ,mBACRF,UAAW,+CAEXyqmB,EAAS3smB,EAAc,OACvBoC,OAAQ,gCAAiCF,UAAW,kCAEpDopmB,EAAatrmB,EAAc,OAC3BsomB,EAAgBtomB,EAAc,UAC9Ba,UAAW,WAAaqggB,EAAWtub,YAAY,SAAW,oBACtDsub,EAAWtub,YAAY,WAAa,YAAazwE,GAAMtC,EAAQsC,GAAK,uBAExEopmB,EAAYvrmB,EAAc,SAC1Ba,UAAWqggB,EAAWtub,YAAY,cAClCxwE,OAAQ,yCAEZ40lB,EAAQx2lB,YAAYT,GACpBF,EAAQW,YAAYw2lB,GACpBgW,EAAUxsmB,YAAYknmB,GACtBqF,EAAUvsmB,YAAYwsmB,GACtBP,EAAUjsmB,YAAY3B,KAAKoumB,oBAC3BF,EAAUvsmB,YAAYismB,GACtBnB,EAAW9qmB,YAAY8nmB,GACvBoE,EAAOlsmB,YAAY+qmB,GACnBoB,EAAOnsmB,YAAY8qmB,GACnBvxK,EAAOv5b,YAAYksmB,GACnB3yK,EAAOv5b,YAAYmsmB,GACnBI,EAAUvsmB,YAAYu5b,GACtBl6b,EAAQW,YAAYusmB,GACpB,IAAI9L,EAAejhmB,EAAc,OAC7Ba,UAAWqggB,EAAWtub,YAAY,sBAClCxwE,OAAQ,2BACRF,UAAW,oCAEXwpmB,EAAe7rmB,EAAQsC,GAAK,4BAC5B+qmB,EAAeltmB,EAAc,OAC7BoC,OAAQ,+BAER+qmB,EAAW,wEACXC,EAAcptmB,EAAc,OAASkC,UAAW,6BACpDrD,KAAKwumB,aAAertmB,EAAc,OAC9BoC,OAAQ+qmB,EAAUhrmB,GAAItC,EAAQsC,GAAK,sBACnCD,UAAW,kEAAoEwpmB,IAEnF0B,EAAY5smB,YAAY3B,KAAKwumB,cAC7B,IAAIzB,EAAiB5rmB,EAAc,OAASkC,UAAW,6BACvDrD,KAAKyumB,gBAAkBttmB,EAAc,OACjCoC,OAAQ+qmB,EAAUhrmB,GAAItC,EAAQsC,GAAK,yBACnCD,UAAW,qEAAuEwpmB,IAEtFE,EAAeprmB,YAAY3B,KAAKyumB,iBAChC,IAAIC,EAAiBvtmB,EAAc,OAASkC,UAAW,6BACvDrD,KAAK2umB,gBAAkBxtmB,EAAc,OACjCoC,OAAQ+qmB,EAAUhrmB,GAAItC,EAAQsC,GAAK,yBACnCD,UAAW,qEAAuEwpmB,IAEtF6B,EAAe/smB,YAAY3B,KAAK2umB,iBAChC,IAAIrX,EAAWn2lB,EAAc,SACzBa,UAAWqggB,EAAWtub,YAAY,OAAQ1wE,UAAW,+BAErDurmB,EAAcztmB,EAAc,SAC5Ba,UAAWqggB,EAAWtub,YAAY,UAAW1wE,UAAW,+BAExDwrmB,EAAc1tmB,EAAc,SAC5Ba,UAAWqggB,EAAWtub,YAAY,UAAW1wE,UAAW,+BAE5DrD,KAAK0rmB,iBAAmBvqmB,EAAc,UAClCa,UAAWqggB,EAAWtub,YAAY,WAAYzwE,GAAItC,EAAQsC,GAAK,oBAC/DD,UAAW,iEAEfgrmB,EAAa1smB,YAAY4smB,GACzBF,EAAa1smB,YAAYormB,GACzBsB,EAAa1smB,YAAY+smB,GACzBH,EAAY5smB,YAAY21lB,GACxByV,EAAeprmB,YAAYitmB,GAC3BF,EAAe/smB,YAAYktmB,GAC3B7tmB,EAAQW,YAAYygmB,GACpBphmB,EAAQW,YAAY0smB,GACpBrtmB,EAAQW,YAAY3B,KAAK0rmB,kBACzB1rmB,KAAK0rmB,iBAAiBhvmB,iBAAiB,QAASsD,KAAKi+e,uBACrDj+e,KAAKwpmB,aAAe,IAAI3xe,IACpB76H,MAAO,EAAGs8H,SAAU,EAAGv5G,IAAK,EAAGzT,IAAK,KAAM0J,MAAO,IAAK41F,mBAAmB,IAE7E5rG,KAAKwpmB,aAAanzjB,SAASr2C,KAAKoumB,oBAChCpumB,KAAK6omB,2BAA6B,IAAIhqf,IAAWxrG,MAAOgvf,EAAWtub,YAAY,qBAC/E/zE,KAAK6omB,2BAA2BxyjB,SAASwyjB,GACzC7omB,KAAKypmB,cAAgB,IAAIh2I,IAAez9c,MAAO,UAC/ChW,KAAKypmB,cAAcpzjB,SAASozjB,IAEhC7nH,EAAsBvmf,UAAUkwmB,uBAAyB,WACrD,IAAIj3G,EAAat0f,KAAKsvf,MAAM1/a,UAAU0kb,WAEtCt0f,KAAKkomB,aAAe5zG,EAAWtE,eAAiB,EAChD,IAAIA,EAAiBsE,EAAWtE,eAC5Bvyf,EAAkB62f,EAAWtE,iBAC7Bhwf,KAAK6omB,2BAA2B3pf,eAAgB,EAChD8wY,EAAiBhwf,KAAKsvf,MAAM1/a,UAAUryE,MAAMslf,UAAUwR,eAAeC,WAAWtE,gBAGhFhwf,KAAK6omB,2BAA2Br2lB,QAAUxS,KAAKkomB,aAEnDlomB,KAAKwpmB,aAAavklB,QAAUjlB,KAAKkomB,aACjClomB,KAAKypmB,cAAcxklB,QAAUjlB,KAAKkomB,aACI,SAAlC5zG,EAAWrE,oBAAmE,UAAlCqE,EAAWrE,mBACvDjwf,KAAKypmB,cAAcx3lB,MAAQ,EAG3BjS,KAAKypmB,cAAcx3lB,MAAQ,EAE/BjS,KAAKstmB,qBAAqBttmB,KAAKwpmB,aAAcl1G,EAAWrE,mBAAoBD,GAC5Elsf,EAAU9D,KAAKwumB,cAAe,6BAA8B,gCAC5D1qmB,EAAU9D,KAAKyumB,iBAAkB,6BAA8B,gCAC/D3qmB,EAAU9D,KAAK2umB,iBAAkB,6BAA8B,gCAC1B,QAAjCr6G,EAAW5gc,kBACX1zD,KAAKwumB,aAAa1qmB,UAAUM,IAAI,+BAEM,WAAjCkwf,EAAW5gc,kBAChB1zD,KAAKyumB,gBAAgB3qmB,UAAUM,IAAI,+BAEG,WAAjCkwf,EAAW5gc,mBAChB1zD,KAAK2umB,gBAAgB7qmB,UAAUM,IAAI,gCAM3Cw9e,EAAsBvmf,UAAU6umB,4BAA8B,SAAUlpmB,GAEpE,IAAK,IADD8tmB,EAAiB9tmB,EAAQ0M,uBAAuB1M,EAAQsC,GAAK,6BACxDigB,EAAI,EAAGA,EAAIurlB,EAAerymB,OAAQ8mB,IAAK,CAC5C,IAAI4nlB,EAAgB2D,EAAevrlB,GAC/B4nlB,EAAcrnmB,UAAUK,SAAS,gCACjCL,EAAUqnmB,GAAgB,6BAA8B,kCAOpEvpH,EAAsBvmf,UAAUiymB,qBAAuB,SAAU7iJ,EAASzub,EAAQh/B,GAE1Eytd,EAAQzub,OADG,SAAXA,GAAgC,UAAXA,EACJ,KAGA,OAErByub,EAAQx+X,KAAO,EACfw+X,EAAQnxV,SAAW,EACnBmxV,EAAQztd,MAAQA,GAKpB4kf,EAAsBvmf,UAAU+umB,iBAAmB,WAG/C,IAAK,IAFD9mmB,EAAKtD,KAAKmqmB,QAAQ7mmB,GAClBkqmB,EAAextmB,KAAKmqmB,QAAQz8lB,uBAAuBpK,EAAK,6BACnDigB,EAAI,EAAGA,EAAIiqlB,EAAa/wmB,OAAQ8mB,IAAK,CAE1C,GADkBiqlB,EAAajqlB,GACfzf,UAAUK,SAAS,+BAC/B,OAAU,IAANof,EACO,MAEI,IAANA,EACE,SAGA,SAInB,OAAOvjB,KAAKsvf,MAAM1/a,UAAU0kb,WAAW5gc,mBAK3Ckub,EAAsBvmf,UAAU6wmB,kBAAoB,WAChDlsmB,KAAKs0f,WAAWtE,eAAiBhwf,KAAKwpmB,aAAaxsmB,OAKvD4kf,EAAsBvmf,UAAU8wmB,sBAAwB,WACpD,IAAInvmB,EACAijE,EAAQjgE,KAAKsvf,MAAM1/a,UAAUryE,MAAMslf,UAAUwR,eAAeJ,WAC5Dz9e,EAAiBypD,EAAM01b,eAAc,GACrCI,EAAa91b,EAAM61b,oBAAoBt/e,GACX,YAA5BxW,KAAKypmB,cAAch9kB,MAA6E,YAAvDzsB,KAAKsvf,MAAM1/a,UAAU0kb,WAAWrE,oBACzEjzf,EAAQgD,KAAKwpmB,aAAaxsmB,MAAQ+4f,EAAa,IAC/C/1f,KAAKstmB,qBAAqBttmB,KAAKwpmB,aAAc,UAAWxsmB,IAEvB,WAA5BgD,KAAKypmB,cAAch9kB,MAA4E,UAAvDzsB,KAAKsvf,MAAM1/a,UAAU0kb,WAAWrE,oBAC7Ejzf,EAAQ+4f,EAAa,IAAM/1f,KAAKwpmB,aAAaxsmB,MAC7CgD,KAAKstmB,qBAAqBttmB,KAAKwpmB,aAAc,QAASxsmB,KAK9CA,EAFyB,SAA7BgD,KAAKwpmB,aAAaxtkB,OACc,WAA5Bh8B,KAAKypmB,cAAch9kB,KACXspe,EAAa,IAAM/1f,KAAKwpmB,aAAaxsmB,MAGrCgD,KAAKwpmB,aAAaxsmB,MAIE,YAA5BgD,KAAKypmB,cAAch9kB,KACXzsB,KAAKwpmB,aAAaxsmB,MAAQ+4f,EAAa,IAGvC/1f,KAAKwpmB,aAAaxsmB,MAIlCgD,KAAKstmB,qBAAqBttmB,KAAKwpmB,aAA2C,WAA5BxpmB,KAAKypmB,cAAch9kB,KAAqB,QAAUzsB,KAAKypmB,cAAch9kB,KAAMzvB,IAE7HgD,KAAKs0f,WAAWrE,mBAAkD,WAA5Bjwf,KAAKypmB,cAAch9kB,KAAqB,QAAUzsB,KAAKypmB,cAAch9kB,MAK/Gm1d,EAAsBvmf,UAAUiX,QAAU,WACtC,IAAK7U,EAAkBuC,KAAKmH,QAAS,CAC7BnH,KAAKmH,OAAOkN,eACZrU,KAAKmH,OAAOkN,cAAc/O,YAAYtF,KAAKmH,QAE/C,IAAK,IAAIugC,EAAI,EAAGA,EAAI1nC,KAAKmH,OAAOoK,WAAW9U,OAAQirC,IAC/C1nC,KAAKmH,OAAO7B,YAAYtF,KAAKmH,OAAOoK,WAAWm2B,IAC/CA,IAEJ1nC,KAAKmH,YAAShM,EAElB6E,KAAKwrlB,YAASrwlB,EACd6E,KAAKmH,YAAShM,EACd6E,KAAKmrmB,mBAAgBhwmB,EACrB6E,KAAK+vf,oBAAiB50f,EACtB6E,KAAKsvf,WAAQn0f,EACb6E,KAAK2omB,oBAAiBxtmB,EACtB6E,KAAKopmB,oBAAiBjumB,EACtB6E,KAAKgwf,oBAAiB70f,EACtB6E,KAAK4qkB,mBAAgBzvkB,EACrB6E,KAAK4omB,uBAAoBztmB,EACzB6E,KAAKggE,eAAY7kE,EACjB6E,KAAKypmB,mBAAgBtumB,EACrB6E,KAAK6omB,gCAA6B1tmB,EAClC6E,KAAKoumB,wBAAqBjzmB,EAC1B6E,KAAK6pmB,cAAW1umB,EAChB6E,KAAKuqmB,YAASpvmB,EACd6E,KAAKmqmB,aAAUhvmB,EACf6E,KAAKwM,UAAOrR,EACZ6E,KAAK0zB,YAASv4B,EACd6E,KAAKyM,WAAQtR,EACb6E,KAAKipf,gBAAa9tf,EAClB6E,KAAKupmB,mBAAgBpumB,EACrB6E,KAAKs+R,kBAAenjS,EACpB6E,KAAKwumB,kBAAerzmB,EACpB6E,KAAKyumB,qBAAkBtzmB,EACvB6E,KAAK2umB,qBAAkBxzmB,EACvB6E,KAAK8vf,YAAYx9e,UACjBtS,KAAKs0f,WAAWhif,UAChBtS,KAAK8vf,iBAAc30f,EACnB6E,KAAKs0f,gBAAan5f,GAEfymf,KC7pCPC,GAAyC,WAIzC,SAASA,EAAwBzH,GAC7B,IAAIr6e,EAAQC,KACZA,KAAKs0f,WAAa,IAAIpD,GACtBlxf,KAAK8vf,YAAc,IAAIT,GACvBrvf,KAAK+umB,+BAAiC,WAClC,IAAIC,EAAwBjvmB,EAAMuvf,MAAMA,MAAMxjB,4BAC1Ck4F,EAAejkkB,EAAMuvf,MAAM1/a,UAAUryE,MAAMslf,UAAUwR,eAErDp/N,OAAU95R,GACV4E,EAAMkvmB,eAAelvmB,EAAMmvmB,mBAAqBnvmB,EAAMkvmB,eAAelvmB,EAAMovmB,sBACxEpvmB,EAAMkvmB,eAAelvmB,EAAMqvmB,sBAAwBrvmB,EAAMkvmB,eAAelvmB,EAAMsvmB,yBAC9EtvmB,EAAMkvmB,eAAelvmB,EAAMuvmB,uBAAyBvvmB,EAAMkvmB,eAAelvmB,EAAMwvmB,wBAC/ExvmB,EAAMkvmB,eAAelvmB,EAAMyvmB,0BAA4BzvmB,EAAMkvmB,eAAelvmB,EAAM0vmB,2BACrFx6U,EAAU,IAAI84N,GACVhuf,EAAMkvmB,eAAelvmB,EAAMmvmB,oBAC3Bj6U,EAAQvoR,IAAM3M,EAAM+jkB,aAEpB/jkB,EAAMkvmB,eAAelvmB,EAAMovmB,uBAC3Bl6U,EAAQtoR,OAAS5M,EAAM+jkB,aAEvB/jkB,EAAMkvmB,eAAelvmB,EAAMuvmB,wBAC3Br6U,EAAQzoR,KAAOzM,EAAM+jkB,aAErB/jkB,EAAMkvmB,eAAelvmB,EAAMwvmB,yBAC3Bt6U,EAAQxoR,MAAQ1M,EAAM+jkB,aAEtB/jkB,EAAMkvmB,eAAelvmB,EAAMqvmB,uBAC3Bn6U,EAAQzmK,WAAazuH,EAAM+jkB,aAE3B/jkB,EAAMkvmB,eAAelvmB,EAAMsvmB,0BAC3Bp6U,EAAQxmK,SAAW1uH,EAAM+jkB,aAEzB/jkB,EAAMkvmB,eAAelvmB,EAAM0vmB,0BAC3Bx6U,EAAQw5N,aAAe1uf,EAAM+jkB,aAE7B/jkB,EAAMkvmB,eAAelvmB,EAAMyvmB,2BAC3Bv6U,EAAQy5N,WAAa3uf,EAAM+jkB,cAGnC,IAAI50E,EAAU,IAAIN,GACdlU,EAAe36e,EAAMuvf,MAAMA,MAAM5U,aAErC,GADAwU,EAAQv9b,gBAAkB5xD,EAAM2vmB,mBAAmB1ymB,MACd,IAAjC+C,EAAM4vmB,iBAAiB19lB,MACvBlS,EAAM6vmB,QAAU,EACZZ,IACAA,EAAsB5G,gCAAiC,GAE3DromB,EAAMu0f,WAAWr/N,QAAU,IAAI84N,GAC1Btwf,EAAkBw3R,GAGdl1R,EAAM8vmB,QAAQ/rmB,UAAUK,SAAS,2CACtCu2e,EAAa+qF,qBAAqB1lkB,EAAMu0f,WAAWr/N,QAAS,IAAI84N,IAHhErT,EAAa+qF,qBAAqB1lkB,EAAMu0f,WAAWr/N,QAASA,GAM3Dx3R,EAAkBumkB,EAAa1vE,WAAWpF,WAC3CA,EAAQC,gBAAkB60E,EAAa1vE,WAAWpF,QAAQC,gBAC1DD,EAAQE,aAAe40E,EAAa1vE,WAAWpF,QAAQE,cAE3Drvf,EAAMu0f,WAAWpF,QAAU,IAAIN,GAC/BlU,EAAairF,aAAa5lkB,EAAMu0f,WAAWpF,QAASA,OAEnD,CACG8/G,IACAA,EAAsB7G,iCAAkC,GAE5DpomB,EAAM6vmB,QAAU,EAChB,IAAIE,EAAqB/vmB,EAAMuvf,MAAMA,MAAM1/a,UAAUkgb,YAAY7vb,MAAM6vb,YACvE/vf,EAAM+vf,YAAYtK,WAAWsqH,GAC7B/vmB,EAAM+vf,YAAY76N,QAAU,IAAI84N,GAC3Btwf,EAAkBw3R,GAGdl1R,EAAM8vmB,QAAQ/rmB,UAAUK,SAAS,2CACtCu2e,EAAa+qF,qBAAqB1lkB,EAAM+vf,YAAY76N,QAAS,IAAI84N,IAHjErT,EAAa+qF,qBAAqB1lkB,EAAM+vf,YAAY76N,QAASA,GAM5Dx3R,EAAkBqymB,EAAmB5gH,WACtCA,EAAQC,gBAAkB2gH,EAAmB5gH,QAAQC,gBACrDD,EAAQE,aAAe0gH,EAAmB5gH,QAAQE,cAEtDrvf,EAAM+vf,YAAYZ,QAAU,IAAIN,GAChClU,EAAairF,aAAa5lkB,EAAM+vf,YAAYZ,QAASA,GAEzDnvf,EAAMimkB,cACNjmkB,EAAMgwmB,eAKV/vmB,KAAK+vmB,YAAc,WACfhwmB,EAAMuvf,MAAMk8F,OAAOjqgB,OACnBxhF,EAAMiwmB,8BAEVhwmB,KAAKgwmB,2BAA6B,WAC9BjwmB,EAAMuvf,MAAM2tG,QAAQj8lB,QAAQ0D,MAAM2ka,cAAgB,GAClDtpa,EAAMuvf,MAAMpN,eAEhBlif,KAAKiwmB,4BAA8B,SAAU3zmB,GACzC,IAAIkqC,EAAWlqC,EAAM6K,OAAO7D,GACxB4smB,EAAsBnwmB,EAAMoH,OAAO7D,GAEnCkjC,IAAa0pkB,EAAsB,aAAe1pkB,IAAa0pkB,EAAsB,uBAClF1pkB,IAAa0pkB,EAAsB,yBACtCnwmB,EAAMowmB,mCACNpwmB,EAAM8vmB,QAAQ/rmB,UAAUM,IAAI,0CAC5BrE,EAAMqwmB,4BAA4B,SAE7B5pkB,IAAa0pkB,EAAsB,YAAc1pkB,IAAa0pkB,EAAsB,sBACtF1pkB,IAAa0pkB,EAAsB,wBACtCnwmB,EAAMowmB,mCACNpwmB,EAAMswmB,OAAOvsmB,UAAUM,IAAI,0CAC3BrE,EAAMqwmB,4BAA4B,QAE7B5pkB,IAAa0pkB,EAAsB,YAAc1pkB,IAAa0pkB,EAAsB,sBACtF1pkB,IAAa0pkB,EAAsB,wBACtCnwmB,EAAMowmB,mCACNpwmB,EAAMuwmB,OAAOxsmB,UAAUM,IAAI,0CAC3BrE,EAAMqwmB,4BAA4B,SAGlCrwmB,EAAMowmB,mCACNpwmB,EAAMwwmB,UAAUzsmB,UAAUM,IAAI,0CAC9BrE,EAAMqwmB,4BAA4B,eAG1CpwmB,KAAKwwmB,4BAA8B,SAAUl0mB,GACzC,IACIkqC,EADSlqC,EAAM6K,OACG7D,GAElB4smB,GADoBnwmB,EAAMoH,OACJpH,EAAMoH,OAAO7D,IAEnCmtmB,EAAe,yCACnB1wmB,EAAMwwmB,UAAUlqf,QACZ7/E,IAAa0pkB,EAAsB,iCAAmC1pkB,IAAa0pkB,EAAsB,uBACtG1pkB,IAAa0pkB,EAAsB,gCACtCnwmB,EAAM2wmB,8BAA8BR,EAAqBO,EAAc1wmB,EAAMmvmB,kBAC7EnvmB,EAAM4wmB,2BAA2BT,EAAqBO,EAAc,eAAgB,sBAAuB,WAEtGjqkB,IAAa0pkB,EAAsB,oCACrC1pkB,IAAa0pkB,EAAsB,0BACnC1pkB,IAAa0pkB,EAAsB,mCACtCnwmB,EAAM2wmB,8BAA8BR,EAAqBO,EAAc1wmB,EAAMqvmB,qBAE7ErvmB,EAAM4wmB,2BAA2BT,EAAqBO,EAAc,0BAA2B,yBAA0B,cAEpHjqkB,IAAa0pkB,EAAsB,oCAAsC1pkB,IAAa0pkB,EAAsB,0BAC9G1pkB,IAAa0pkB,EAAsB,mCACtCnwmB,EAAM2wmB,8BAA8BR,EAAqBO,EAAc1wmB,EAAMovmB,qBAC7EpvmB,EAAM4wmB,2BAA2BT,EAAqBO,EAAc,eAAgB,yBAA0B,cAEzGjqkB,IAAa0pkB,EAAsB,uCACrC1pkB,IAAa0pkB,EAAsB,6BACnC1pkB,IAAa0pkB,EAAsB,sCACtCnwmB,EAAM2wmB,8BAA8BR,EAAqBO,EAAc1wmB,EAAM0vmB,wBAE7E1vmB,EAAM4wmB,2BAA2BT,EAAqBO,EAAc,6BAA8B,4BAA6B,iBAE1HjqkB,IAAa0pkB,EAAsB,qCAAuC1pkB,IAAa0pkB,EAAsB,2BAC/G1pkB,IAAa0pkB,EAAsB,oCACtCnwmB,EAAM2wmB,8BAA8BR,EAAqBO,EAAc1wmB,EAAMuvmB,sBAC7EvvmB,EAAM4wmB,2BAA2BT,EAAqBO,EAAc,eAAgB,0BAA2B,eAE1GjqkB,IAAa0pkB,EAAsB,uCACrC1pkB,IAAa0pkB,EAAsB,6BACnC1pkB,IAAa0pkB,EAAsB,sCACtCnwmB,EAAM2wmB,8BAA8BR,EAAqBO,EAAc1wmB,EAAMsvmB,wBAE7EtvmB,EAAM4wmB,2BAA2BT,EAAqBO,EAAc,wBAAyB,4BAA6B,iBAErHjqkB,IAAa0pkB,EAAsB,sCAAwC1pkB,IAAa0pkB,EAAsB,4BAChH1pkB,IAAa0pkB,EAAsB,qCACtCnwmB,EAAM2wmB,8BAA8BR,EAAqBO,EAAc1wmB,EAAMwvmB,uBAC7ExvmB,EAAM4wmB,2BAA2BT,EAAqBO,EAAc,eAAgB,2BAA4B,gBAE3GjqkB,IAAa0pkB,EAAsB,wCACrC1pkB,IAAa0pkB,EAAsB,8BACnC1pkB,IAAa0pkB,EAAsB,wCACtCnwmB,EAAM2wmB,8BAA8BR,EAAqBO,EAAc1wmB,EAAMyvmB,yBAE7EzvmB,EAAM4wmB,2BAA2BT,EAAqBO,EAAc,8BAA+B,6BAA8B,mBAGzIzwmB,KAAK4wmB,2BAA6B,WAC9B7wmB,EAAMwwmB,UAAUlqf,QACX5oH,EAAkBsC,EAAM4vmB,oBACY,IAAjC5vmB,EAAM4vmB,iBAAiB19lB,OACvBlS,EAAM8wmB,gCAAgCnsmB,MAAM4xC,QAAU,OACtDv2C,EAAM+wmB,6BAA6BpsmB,MAAM4xC,QAAU,OACnDv2C,EAAMgxmB,mBAAmBrsmB,MAAM4xC,QAAU,OACzCv2C,EAAMixmB,qBAAqBtsmB,MAAM4xC,QAAU,OAC3Cv2C,EAAM0vmB,uBAAuB/qmB,MAAM4xC,QAAU,GAC7Cv2C,EAAMyvmB,wBAAwB9qmB,MAAM4xC,QAAU,GAC9Cv2C,EAAMkxmB,+BAA+BvsmB,MAAM8H,KAAO,SAGlDzM,EAAM0vmB,uBAAuB/qmB,MAAM4xC,QAAU,OAC7Cv2C,EAAMyvmB,wBAAwB9qmB,MAAM4xC,QAAU,OAC9Cv2C,EAAM8wmB,gCAAgCnsmB,MAAM4xC,QAAU,GACtDv2C,EAAM+wmB,6BAA6BpsmB,MAAM4xC,QAAU,GACnDv2C,EAAMgxmB,mBAAmBrsmB,MAAM4xC,QAAU,GACzCv2C,EAAMixmB,qBAAqBtsmB,MAAM4xC,QAAU,GAC3Cv2C,EAAMkxmB,+BAA+BvsmB,MAAM8H,KAAO,WAI9DxM,KAAKkxmB,iCAAmC,SAAUjxmB,GAC9C,IAAKxC,EAAkBwC,EAAK4pI,cAAe,CACvC,IAAIrzG,EAAQv2B,EAAK4pI,aAAa9sG,IAC9Bh9B,EAAMoxmB,WAAWzsmB,MAAMitD,gBAAkBn7B,IAGjDx2B,KAAKoxmB,6BAA+B,SAAUnxmB,GAC1C,IAAKxC,EAAkBwC,EAAK4pI,cAAe,CACvC,IAAIrzG,EAAQv2B,EAAK4pI,aAAa9sG,IAC9Bh9B,EAAMoxmB,WAAWzsmB,MAAMywU,YAAc3+S,EACrCz2B,EAAMsxmB,wBAAwB3smB,MAAMitD,gBAAkBn7B,EACtDz2B,EAAMuxmB,uBAAuB5smB,MAAMitD,gBAAkBn7B,EACrDz2B,EAAMgxmB,mBAAmBrsmB,MAAMitD,gBAAkBn7B,EACjDz2B,EAAMixmB,qBAAqBtsmB,MAAMitD,gBAAkBn7B,IAG3Dx2B,KAAKsvf,MAAQlV,EAosBjB,OAlsBAyH,EAAwBxmf,UAAUkkC,cAAgB,WAC9C,MAAO,2BAMXsid,EAAwBxmf,UAAUghf,6BAA+B,SAAUiiE,GAEvEt+iB,KAAKmH,OAAShG,EAAc,OACxBmC,GAFWtD,KAEEsvf,MAAMA,MAAMh9W,YAAc,yBACvCjvI,UAAW,kCAEfrD,KAAKsvf,MAAMA,MAAMtuf,QAAQW,YAAY3B,KAAKmH,QAC1C,IAAIyuiB,EAAcz0iB,EAAc,OAC5Ba,UAAWs8iB,EAAYvqe,YAAY,WAAYxwE,OAAQ,gCACvDD,GAAItD,KAAKmH,OAAO7D,GAAK,gBAAiBD,UAAW,8BAEjDkumB,EAAmBpwmB,EAAc,OACjCoC,OAAQ,qGACRD,GAAItD,KAAKmH,OAAO7D,GAAK,qBAErBkumB,EAAiBrwmB,EAAc,OAE/BoC,OAAQ,wJACRD,GAAItD,KAAKmH,OAAO7D,GAAK,kBAErBmumB,EAAkBtwmB,EAAc,OAEhCoC,OAAQ,6HACRD,GAAItD,KAAKmH,OAAO7D,GAAK,oBAErBoumB,EAAYvwmB,EAAc,OAC1Ba,UAAWs8iB,EAAYvqe,YAAY,SAAUxwE,OAAQ,oCACrDF,UAAW,kCAEXsumB,EAAexwmB,EAAc,UAC7BmC,GAAItD,KAAKmH,OAAO7D,GAAK,2BAEzBqumB,EAAa3vmB,UAAY,WAAas8iB,EAAYvqe,YAAY,QAAU,oBAClEuqe,EAAYvqe,YAAY,UAAY,oBAAsBuqe,EAAYvqe,YAAY,OAAS,oBAC3Fuqe,EAAYvqe,YAAY,gBAAkB,oBAAsBuqe,EAAYvqe,YAAY,gBAAkB,oBAC1Guqe,EAAYvqe,YAAY,WAAa,oBAAsBuqe,EAAYvqe,YAAY,cAAgB,oBACnGuqe,EAAYvqe,YAAY,UAAY,oBAAsBuqe,EAAYvqe,YAAY,UAAY,oBAC9Fuqe,EAAYvqe,YAAY,qBAAuB,oBAC/Cuqe,EAAYvqe,YAAY,qBAAuB,oBAAsBuqe,EAAYvqe,YAAY,yBAC7F,oBAAsBuqe,EAAYvqe,YAAY,sBAAwB,oBACtEuqe,EAAYvqe,YAAY,sBAAwB,oBAAsBuqe,EAAYvqe,YAAY,0BAC9F,oBAAsBuqe,EAAYvqe,YAAY,qBAAuB,oBACrEuqe,EAAYvqe,YAAY,qBAAuB,oBAAsBuqe,EAAYvqe,YAAY,yBAC7F,oBAAsBuqe,EAAYvqe,YAAY,cAAgB,oBAC9Duqe,EAAYvqe,YAAY,cAAgB,oBAAsBuqe,EAAYvqe,YAAY,kBACtF,oBAAsBuqe,EAAYvqe,YAAY,YAAc,oBAAsBuqe,EAAYvqe,YAAY,aAC1G,oBAAsBuqe,EAAYvqe,YAAY,UAAY,oBAC1Duqe,EAAYvqe,YAAY,SAAW,oBAAsBuqe,EAAYvqe,YAAY,SAAW,YAClG,IAAI69hB,EAAYzwmB,EAAc,OAC1Ba,UAAWs8iB,EAAYvqe,YAAY,SAAUxwE,OAAQ,qDACrDF,UAAW,kCAEXwumB,EAAe1wmB,EAAc,SAC7BmC,GAAItD,KAAKmH,OAAO7D,GAAK,WAErBwumB,EAAY3wmB,EAAc,OAC1Ba,UAAWs8iB,EAAYvqe,YAAY,SAAUxwE,OAAQ,qBACrDF,UAAW,+BAEX0umB,EAA2B5wmB,EAAc,SACzCsC,OAASiD,KAAQ,SACjBpD,GAAItD,KAAKmH,OAAO7D,GAAK,gBACrBC,OAAQ,6CACRF,UAAW,sBAEX2umB,EAAc7wmB,EAAc,OAC5Ba,UAAWs8iB,EAAYvqe,YAAY,WAAYxwE,OAAQ,kCACvDF,UAAW,+BAEX4umB,EAAmB9wmB,EAAc,OACjCmC,GAAItD,KAAKmH,OAAO7D,GAAK,sBAAuBD,UAAW,2BAE3DrD,KAAK6vmB,QAAU1umB,EAAc,OACzBmC,GAAItD,KAAKmH,OAAO7D,GAAK,YACrBD,UAAW,sEAEf,IAAI6umB,EAAe/wmB,EAAc,SAC7Ba,UAAWs8iB,EAAYvqe,YAAY,QAAS1wE,UAAW,oCACvDE,OAAQ,mDACRD,GAAItD,KAAKmH,OAAO7D,GAAK,oBAErB6umB,EAAkBhxmB,EAAc,OAChCmC,GAAItD,KAAKmH,OAAO7D,GAAK,qBAAsBD,UAAW,0BAE1DrD,KAAKqwmB,OAASlvmB,EAAc,OACxBmC,GAAItD,KAAKmH,OAAO7D,GAAK,WACrBD,UAAW,sEAEf,IAAI+umB,EAAcjxmB,EAAc,SAC5Ba,UAAWs8iB,EAAYvqe,YAAY,OAAQ1wE,UAAW,oCACtDE,OAAQ,mDACRD,GAAItD,KAAKmH,OAAO7D,GAAK,mBAErB+umB,EAAkBlxmB,EAAc,OAChCmC,GAAItD,KAAKmH,OAAO7D,GAAK,qBAAsBD,UAAW,0BAE1DrD,KAAKswmB,OAASnvmB,EAAc,OACxBmC,GAAItD,KAAKmH,OAAO7D,GAAK,WACrBD,UAAW,sEAEf,IAAIivmB,EAAcnxmB,EAAc,SAC5Ba,UAAWs8iB,EAAYvqe,YAAY,OAAQ1wE,UAAW,oCACtDE,OAAQ,mDACRD,GAAItD,KAAKmH,OAAO7D,GAAK,mBAErBivmB,EAAqBpxmB,EAAc,OACnCmC,GAAItD,KAAKmH,OAAO7D,GAAK,wBAAyBD,UAAW,6BAE7DrD,KAAKuwmB,UAAYpvmB,EAAc,OAC3BmC,GAAItD,KAAKmH,OAAO7D,GAAK,cACrBD,UAAW,sEAEf,IAAImvmB,EAAiBrxmB,EAAc,SAC/Ba,UAAWs8iB,EAAYvqe,YAAY,UAAW1wE,UAAW,oCACzDE,OAAQ,mDACRD,GAAItD,KAAKmH,OAAO7D,GAAK,sBAEzBtD,KAAKyymB,mBAAqBtxmB,EAAc,OACpCmC,GAAItD,KAAKmH,OAAO7D,GAAK,wBAAyBD,UAAW,qEAE7DrD,KAAK0ymB,kBAAoBvxmB,EAAc,OACnCmC,GAAItD,KAAKmH,OAAO7D,GAAK,uBAAwBD,UAAW,oEAE5DrD,KAAK2ymB,kBAAoBxxmB,EAAc,OACnCmC,GAAItD,KAAKmH,OAAO7D,GAAK,uBAAwBD,UAAW,oEAE5DrD,KAAK4ymB,qBAAuBzxmB,EAAc,OACtCmC,GAAItD,KAAKmH,OAAO7D,GAAK,0BAA2BD,UAAW,uEAE/D,IAAIwvmB,EAAc1xmB,EAAc,OAC5Ba,UAAWs8iB,EAAYvqe,YAAY,WAAY1wE,UAAW,6BAC1DE,OAAQ,6CAEZvD,KAAKmxmB,WAAahwmB,EAAc,OAC5BoC,OAAQ,qEACRD,GAAItD,KAAKmH,OAAO7D,GAAK,eAAgBD,UAAW,gCAEpDrD,KAAKqxmB,wBAA0BlwmB,EAAc,OACzCoC,OAAQ,4FACRD,GAAItD,KAAKmH,OAAO7D,GAAK,8BACrBD,UAAW,wCAEfrD,KAAKsxmB,uBAAyBnwmB,EAAc,OACxCoC,OAAQ,4FACRD,GAAItD,KAAKmH,OAAO7D,GAAK,6BACrBD,UAAW,wCAEfrD,KAAK+wmB,mBAAqB5vmB,EAAc,OACpCoC,OAAQ,mEACRD,GAAItD,KAAKmH,OAAO7D,GAAK,wBACrBD,UAAW,wCAEfrD,KAAKgxmB,qBAAuB7vmB,EAAc,OACtCoC,OAAQ,mEACRD,GAAItD,KAAKmH,OAAO7D,GAAK,0BACrBD,UAAW,wCAEfrD,KAAK8ymB,0BAA4B3xmB,EAAc,OAC3CoC,OAAQ,2CAA4CD,GAAItD,KAAKmH,OAAO7D,GAAK,kCAE7EtD,KAAKkvmB,iBAAmB/tmB,EAAc,OAClCmC,GAAItD,KAAKmH,OAAO7D,GAAK,sBACrBD,UAAW,sEAEfrD,KAAK8wmB,6BAA+B3vmB,EAAc,OAC9CoC,OAAQ,2CAA4CD,GAAItD,KAAKmH,OAAO7D,GAAK,qCAE7EtD,KAAKovmB,oBAAsBjumB,EAAc,OACrCmC,GAAItD,KAAKmH,OAAO7D,GAAK,yBACrBD,UAAW,sEAEfrD,KAAK+ymB,6BAA+B5xmB,EAAc,OAC9CoC,OAAQ,4CAA6CD,GAAItD,KAAKmH,OAAO7D,GAAK,qCAE9EtD,KAAKmvmB,oBAAsBhumB,EAAc,OACrCmC,GAAItD,KAAKmH,OAAO7D,GAAK,yBACrBD,UAAW,sEAEfrD,KAAKgzmB,gCAAkC7xmB,EAAc,OACjDoC,OAAQ,4CAA6CD,GAAItD,KAAKmH,OAAO7D,GAAK,wCAE9EtD,KAAKyvmB,uBAAyBtumB,EAAc,OACxCmC,GAAItD,KAAKmH,OAAO7D,GAAK,4BACrBD,UAAW,sEAEfrD,KAAKizmB,8BAAgC9xmB,EAAc,OAC/CoC,OAAQ,2CAA4CD,GAAItD,KAAKmH,OAAO7D,GAAK,sCAE7EtD,KAAKsvmB,qBAAuBnumB,EAAc,OACtCmC,GAAItD,KAAKmH,OAAO7D,GAAK,0BACrBD,UAAW,sEAEfrD,KAAK6wmB,gCAAkC1vmB,EAAc,OACjDoC,OAAQ,4CAA6CD,GAAItD,KAAKmH,OAAO7D,GAAK,wCAE9EtD,KAAKqvmB,uBAAyBlumB,EAAc,OACxCmC,GAAItD,KAAKmH,OAAO7D,GAAK,4BACrBD,UAAW,sEAEfrD,KAAKixmB,+BAAiC9vmB,EAAc,OAChDoC,OAAQ,6CAA8CD,GAAItD,KAAKmH,OAAO7D,GAAK,uCAE/EtD,KAAKuvmB,sBAAwBpumB,EAAc,OACvCmC,GAAItD,KAAKmH,OAAO7D,GAAK,2BACrBD,UAAW,sEAEfrD,KAAKkzmB,iCAAmC/xmB,EAAc,OAClDoC,OAAQ,+CAAgDD,GAAItD,KAAKmH,OAAO7D,GAAK,yCAEjFtD,KAAKwvmB,wBAA0BrumB,EAAc,OACzCmC,GAAItD,KAAKmH,OAAO7D,GAAK,6BACrBD,UAAW,sEAEfrD,KAAKmzmB,4BAA8BhymB,EAAc,OAC7CmC,GAAItD,KAAKmH,OAAO7D,GAAK,+BACrBD,UAAW,yEAEfrD,KAAKozmB,+BAAiCjymB,EAAc,OAChDmC,GAAItD,KAAKmH,OAAO7D,GAAK,kCACrBD,UAAW,4EAEfrD,KAAKqzmB,+BAAiClymB,EAAc,OAChDmC,GAAItD,KAAKmH,OAAO7D,GAAK,kCACrBD,UAAW,4EAEfrD,KAAKszmB,kCAAoCnymB,EAAc,OACnDmC,GAAItD,KAAKmH,OAAO7D,GAAK,qCACrBD,UAAW,8EAEfrD,KAAKuzmB,gCAAkCpymB,EAAc,OACjDmC,GAAItD,KAAKmH,OAAO7D,GAAK,mCACrBD,UAAW,6EAEfrD,KAAKwzmB,kCAAoCrymB,EAAc,OACnDmC,GAAItD,KAAKmH,OAAO7D,GAAK,qCACrBD,UAAW,+EAEfrD,KAAKyzmB,iCAAmCtymB,EAAc,OAClDmC,GAAItD,KAAKmH,OAAO7D,GAAK,oCACrBD,UAAW,8EAEfrD,KAAK0zmB,mCAAqCvymB,EAAc,OACpDmC,GAAItD,KAAKmH,OAAO7D,GAAK,sCACrBD,UAAW,gFAEfrD,KAAK2zmB,gBAAkBxymB,EAAc,OAEjCoC,OAAQ,6HACRD,GAAItD,KAAKmH,OAAO7D,GAAK,mBAAoBD,UAAW,+BAExD,IAAIuwmB,EAAczymB,EAAc,OAC5Ba,UAAWs8iB,EAAYvqe,YAAY,WAAY1wE,UAAW,4BAC1DE,OAAQ,iCAERswmB,EAAW1ymB,EAAc,OAASoC,OAAQ,kBAC1C8P,EAAQlS,EAAc,OACtBa,UAAWs8iB,EAAYvqe,YAAY,QAAS1wE,UAAW,oDACvDE,OAAQ,0BAERuwmB,EAA4B3ymB,EAAc,SAC1CsC,OAASiD,KAAQ,SACjBpD,GAAItD,KAAKmH,OAAO7D,GAAK,iBAAkBC,OAAQ,yDAE/CwwmB,EAAW5ymB,EAAc,OACzBoC,OAAQ,uDAERrC,EAAMC,EAAc,OACpBoC,OAAQ,oCAAqCvB,UAAWs8iB,EAAYvqe,YAAY,YAChF1wE,UAAW,kCAEX2wmB,EAAU7ymB,EAAc,OAASoC,OAAQ,mCACzCosmB,EAAmBxumB,EAAc,UACjCa,UAAW,WAAas8iB,EAAYvqe,YAAY,QAAU,oBACvCuqe,EAAYvqe,YAAY,SAAW,YACtDzwE,GAAItD,KAAKmH,OAAO7D,GAAK,aAEzB0wmB,EAAQrymB,YAAYgumB,GACpB3vmB,KAAK6vmB,QAAQlumB,YAAY3B,KAAKyymB,oBAC9BzymB,KAAKqwmB,OAAO1umB,YAAY3B,KAAK0ymB,mBAC7B1ymB,KAAKswmB,OAAO3umB,YAAY3B,KAAK2ymB,mBAC7B3ymB,KAAKuwmB,UAAU5umB,YAAY3B,KAAK4ymB,sBAChCX,EAAiBtwmB,YAAY3B,KAAK6vmB,SAClCoC,EAAiBtwmB,YAAYuwmB,GAC7BC,EAAgBxwmB,YAAY3B,KAAKqwmB,QACjC8B,EAAgBxwmB,YAAYywmB,GAC5BC,EAAgB1wmB,YAAY3B,KAAKswmB,QACjC+B,EAAgB1wmB,YAAY2wmB,GAC5BC,EAAmB5wmB,YAAY3B,KAAKuwmB,WACpCgC,EAAmB5wmB,YAAY6wmB,GAC/BjB,EAAiB5vmB,YAAYqwmB,GAC7BT,EAAiB5vmB,YAAYswmB,GAC7BV,EAAiB5vmB,YAAYwwmB,GAC7BZ,EAAiB5vmB,YAAY0wmB,GAC7Bd,EAAiB5vmB,YAAY4wmB,GAC7BvymB,KAAKqvmB,uBAAuB1tmB,YAAY3B,KAAKwzmB,mCAC7CxzmB,KAAKuvmB,sBAAsB5tmB,YAAY3B,KAAKyzmB,kCAC5CzzmB,KAAKsvmB,qBAAqB3tmB,YAAY3B,KAAKuzmB,iCAC3CvzmB,KAAKkvmB,iBAAiBvtmB,YAAY3B,KAAKmzmB,6BACvCnzmB,KAAKovmB,oBAAoBztmB,YAAY3B,KAAKozmB,gCAC1CpzmB,KAAKmvmB,oBAAoBxtmB,YAAY3B,KAAKqzmB,gCAC1CrzmB,KAAKwvmB,wBAAwB7tmB,YAAY3B,KAAK0zmB,oCAC9C1zmB,KAAKyvmB,uBAAuB9tmB,YAAY3B,KAAKszmB,mCAC7CtzmB,KAAK6wmB,gCAAgClvmB,YAAY3B,KAAKqvmB,wBACtDrvmB,KAAKizmB,8BAA8BtxmB,YAAY3B,KAAKsvmB,sBACpDtvmB,KAAKixmB,+BAA+BtvmB,YAAY3B,KAAKuvmB,uBACrDvvmB,KAAKkzmB,iCAAiCvxmB,YAAY3B,KAAKwvmB,yBACvDxvmB,KAAKgzmB,gCAAgCrxmB,YAAY3B,KAAKyvmB,wBACtDzvmB,KAAK+ymB,6BAA6BpxmB,YAAY3B,KAAKmvmB,qBACnDnvmB,KAAK8wmB,6BAA6BnvmB,YAAY3B,KAAKovmB,qBACnDpvmB,KAAK8ymB,0BAA0BnxmB,YAAY3B,KAAKkvmB,kBAChDuC,EAAgB9vmB,YAAYkxmB,GAC5BpB,EAAgB9vmB,YAAY3B,KAAKmxmB,YACjCM,EAAgB9vmB,YAAY3B,KAAKqxmB,yBACjCI,EAAgB9vmB,YAAY3B,KAAKgxmB,sBACjCS,EAAgB9vmB,YAAY3B,KAAKsxmB,wBACjCG,EAAgB9vmB,YAAY3B,KAAK+wmB,oBACjCU,EAAgB9vmB,YAAY3B,KAAK6wmB,iCACjCY,EAAgB9vmB,YAAY3B,KAAKizmB,+BACjCxB,EAAgB9vmB,YAAY3B,KAAKixmB,gCACjCQ,EAAgB9vmB,YAAY3B,KAAKkzmB,kCACjCzB,EAAgB9vmB,YAAY3B,KAAKgzmB,iCACjCvB,EAAgB9vmB,YAAY3B,KAAK+ymB,8BACjCtB,EAAgB9vmB,YAAY3B,KAAK8wmB,8BACjCW,EAAgB9vmB,YAAY3B,KAAK8ymB,2BACjCiB,EAASpymB,YAAYT,GACrB6ymB,EAASpymB,YAAYqymB,GACrBH,EAASlymB,YAAY0R,GACrBwgmB,EAASlymB,YAAYmymB,GACrBD,EAASlymB,YAAYoymB,GACrB/zmB,KAAK2zmB,gBAAgBhymB,YAAYiymB,GACjC5zmB,KAAK2zmB,gBAAgBhymB,YAAYkymB,GACjCrC,EAAe7vmB,YAAY+vmB,GAC3BF,EAAe7vmB,YAAYgwmB,GAC3BH,EAAe7vmB,YAAYiwmB,GAC3BJ,EAAe7vmB,YAAYkwmB,GAC3BL,EAAe7vmB,YAAYmwmB,GAC3BN,EAAe7vmB,YAAYowmB,GAC3B/xmB,KAAKmH,OAAOxF,YAAYi0iB,GACxB51iB,KAAKmH,OAAOxF,YAAY4vmB,GACxBvxmB,KAAKmH,OAAOxF,YAAY6vmB,GACxBxxmB,KAAKmH,OAAOxF,YAAY8vmB,GACxBzxmB,KAAKmH,OAAOxF,YAAY3B,KAAK2zmB,iBAE7B1B,EAAiBv1mB,iBAAiB,QAASsD,KAAKiwmB,6BAChDkC,EAAgBz1mB,iBAAiB,QAASsD,KAAKiwmB,6BAC/CoC,EAAgB31mB,iBAAiB,QAASsD,KAAKiwmB,6BAC/CsC,EAAmB71mB,iBAAiB,QAASsD,KAAKiwmB,6BAElDjwmB,KAAK6wmB,gCAAgCn0mB,iBAAiB,QAASsD,KAAKwwmB,6BACpExwmB,KAAKizmB,8BAA8Bv2mB,iBAAiB,QAASsD,KAAKwwmB,6BAClExwmB,KAAKixmB,+BAA+Bv0mB,iBAAiB,QAASsD,KAAKwwmB,6BACnExwmB,KAAK8ymB,0BAA0Bp2mB,iBAAiB,QAASsD,KAAKwwmB,6BAC9DxwmB,KAAK+ymB,6BAA6Br2mB,iBAAiB,QAASsD,KAAKwwmB,6BACjExwmB,KAAK8wmB,6BAA6Bp0mB,iBAAiB,QAASsD,KAAKwwmB,6BACjExwmB,KAAKkzmB,iCAAiCx2mB,iBAAiB,QAASsD,KAAKwwmB,6BACrExwmB,KAAKgzmB,gCAAgCt2mB,iBAAiB,QAASsD,KAAKwwmB,6BAEpExwmB,KAAKyuF,YAAc,IAAIopC,IACnB76H,MAAO,EAAG+iB,IAAK,EAAGzT,IAAK,EAAGgtH,SAAU,EACpCtjH,MAAO,IAAK41F,mBAAmB,IAEnC5rG,KAAKyuF,YAAYp4C,SAASw7jB,GAC1B7xmB,KAAK80Y,YAAc,IAAI2+E,IACnBz9c,MAAO,QAAS6xM,YAAa,QAAS51M,MAAO,IAEjDjS,KAAK80Y,YAAYz+V,SAASs7jB,GAC1B3xmB,KAAK2vmB,iBAAmB,IAAIl8I,IACxBz9c,MAAO,QAASoK,OAAQpgB,KAAK4wmB,2BAA4B3+lB,MAAO,IAEpEjS,KAAK2vmB,iBAAiBt5jB,SAASs5jB,GAC/B3vmB,KAAKi0mB,kBAAoB,IAAIjvd,IACzBhoJ,MAAO,UAAWojB,OAAQpgB,KAAKoxmB,+BAEnCpxmB,KAAKi0mB,kBAAkB59jB,SAAS07jB,GAChC/xmB,KAAK0vmB,mBAAqB,IAAI1qd,IAC1BhoJ,MAAO,UAAWojB,OAAQpgB,KAAKkxmB,mCAEnClxmB,KAAK0vmB,mBAAmBr5jB,SAASy9jB,IAErCjyH,EAAwBxmf,UAAU2qkB,YAAc,WAC5BhmkB,KAAKsvf,MAAM1/a,UAA3B,IACI8qa,EAAe16e,KAAKsvf,MAAMA,MAAM5U,aACpCA,EAAa6hE,mBAAmB,qBAChC7hE,EAAaosE,2BAA4B,EACpB,IAAjB9mjB,KAAK4vmB,QACLl1H,EAAa6rF,aAAavmkB,KAAKs0f,YAG/B5Z,EAAakrF,cAAc5lkB,KAAK8vf,aAE/Bryf,EAAkBuC,KAAKsvf,MAAMA,MAAM84B,cAAco0B,qBAClDx8iB,KAAKsvf,MAAMA,MAAM84B,cAAcq0B,uBAEnC/hE,EAAaosE,2BAA4B,GAE7CjlE,EAAwBxmf,UAAUyokB,UAAY,WAC1C,IAAIx/hB,EAAS,IAAIyod,GAIjB,OAHAzod,EAAO9N,MAAQx2B,KAAKi0mB,kBAAkBj3mB,MACtCsnC,EAAOy8R,UAAY/gU,KAAK80Y,YAAYroX,KACpC6X,EAAO8oD,UAAYptF,KAAKyuF,YAAYzxF,MAC7BsnC,GAEXu9c,EAAwBxmf,UAAU4zmB,eAAiB,SAAUjumB,GACzD,OAAOA,EAAQ8C,UAAUK,SAAS,2CAKtC09e,EAAwBxmf,UAAU4oH,KAAO,WACrC,IAAIq6b,EAAc,IAAI9mc,GAAK,iBAAkBx3G,KAAKsvf,MAAMA,MAAM3xE,eAC9D2gI,EAAY3mc,UAAU33G,KAAKsvf,MAAMA,MAAMthf,QACvCL,GAAW3N,KAAKsvf,MAAMA,MAAMthf,QACvBhO,KAAKmH,QACNnH,KAAKq8e,6BAA6BiiE,GAEtCt+iB,KAAKk0mB,sCACLl0mB,KAAKsvf,MAAMk8F,OAAOpxjB,QAAUp6B,KAAKmH,OACjCnH,KAAKsvf,MAAMk8F,OAAO5mgB,OAAS05d,EAAYvqe,YAAY,uBACnD/zE,KAAKsvf,MAAMk8F,OAAOr1iB,WAAan2C,KAAKsvf,MAAMpN,YAC1Clif,KAAKsvf,MAAMk8F,OAAOvplB,MAAQjC,KAAKgwmB,2BAC/BhwmB,KAAKsvf,MAAMk8F,OAAOt3kB,UAAakC,EAAG,SAAUC,EAAG,OAC/CrW,KAAKsvf,MAAMk8F,OAAOx1kB,MAAQ,OAC1BhW,KAAKsvf,MAAMk8F,OAAOz1kB,OAAS,OAC3B/V,KAAKsvf,MAAMk8F,OAAOrle,UACVE,MAAOrmH,KAAK+umB,+BACZ3of,aAAehsF,QAASkkhB,EAAYvqe,YAAY,MAAO9gE,SAAU,qCAAsC+qG,WAAW,KAGlHqI,MAAOrmH,KAAK+vmB,YACZ3pf,aAAehsF,QAASkkhB,EAAYvqe,YAAY,UAAW9gE,SAAU,0CAE7EjT,KAAKsvf,MAAMk8F,OAAO5/hB,WAClB5rD,KAAKsvf,MAAMk8F,OAAOvne,QAEtB49X,EAAwBxmf,UAAU80mB,iCAAmC,WAEjE,IAAK,IADDgE,EAAcn0mB,KAAKmH,OAAOuG,uBAAuB,oCAC5C6V,EAAI,EAAGA,EAAI4wlB,EAAY13mB,OAAQ8mB,IACpC,IAAoF,IAAhF4wlB,EAAY5wlB,GAAGlgB,UAAU9E,QAAQ,0CAAkD,CACnF,IAAI61mB,EAAgBD,EAAY5wlB,GAAGlgB,UACnC+wmB,EAAgBA,EAAc7kmB,QAAQ,yCAA0C,IAChF4kmB,EAAY5wlB,GAAGlgB,UAAY+wmB,IAIvCvyH,EAAwBxmf,UAAU+0mB,4BAA8B,SAAUl8lB,GACtE,OAAQA,GACJ,IAAK,OACDlU,KAAKkvmB,iBAAiBprmB,UAAUS,OAAO,0CACvCvE,KAAKovmB,oBAAoBtrmB,UAAUS,OAAO,0CAC1CvE,KAAKmvmB,oBAAoBrrmB,UAAUS,OAAO,0CAC1CvE,KAAKyvmB,uBAAuB3rmB,UAAUS,OAAO,0CAC7CvE,KAAKwvmB,wBAAwB1rmB,UAAUS,OAAO,0CAC9CvE,KAAKuvmB,sBAAsBzrmB,UAAUS,OAAO,0CAC5CvE,KAAKsvmB,qBAAqBxrmB,UAAUS,OAAO,0CAC3CvE,KAAKqvmB,uBAAuBvrmB,UAAUS,OAAO,0CAC7CvE,KAAKq0mB,+BAA+B,QACpC,MACJ,IAAK,MACDr0mB,KAAKovmB,oBAAoBtrmB,UAAUS,OAAO,0CAC1CvE,KAAKyvmB,uBAAuB3rmB,UAAUS,OAAO,0CAC7CvE,KAAKwvmB,wBAAwB1rmB,UAAUS,OAAO,0CAC9CvE,KAAKqvmB,uBAAuBvrmB,UAAUS,OAAO,0CAC7CvE,KAAKkvmB,iBAAiBprmB,UAAUM,IAAI,0CACpCpE,KAAKmvmB,oBAAoBrrmB,UAAUM,IAAI,0CACvCpE,KAAKuvmB,sBAAsBzrmB,UAAUM,IAAI,0CACzCpE,KAAKsvmB,qBAAqBxrmB,UAAUM,IAAI,0CACxCpE,KAAKq0mB,+BAA+B,OACpC,MACJ,IAAK,MACDr0mB,KAAKyvmB,uBAAuB3rmB,UAAUS,OAAO,0CAC7CvE,KAAKwvmB,wBAAwB1rmB,UAAUS,OAAO,0CAC9CvE,KAAKqvmB,uBAAuBvrmB,UAAUM,IAAI,0CAC1CpE,KAAKkvmB,iBAAiBprmB,UAAUM,IAAI,0CACpCpE,KAAKmvmB,oBAAoBrrmB,UAAUM,IAAI,0CACvCpE,KAAKuvmB,sBAAsBzrmB,UAAUM,IAAI,0CACzCpE,KAAKsvmB,qBAAqBxrmB,UAAUM,IAAI,0CACxCpE,KAAKovmB,oBAAoBtrmB,UAAUM,IAAI,0CACvCpE,KAAKq0mB,+BAA+B,SAIhDxyH,EAAwBxmf,UAAUg5mB,+BAAiC,SAAUC,GACzE,OAAQA,GACJ,IAAK,OACDt0mB,KAAKmxmB,WAAWzsmB,MAAM4/B,OAAS,OAC/BtkC,KAAKqxmB,wBAAwB3smB,MAAM4xC,QAAU,OAC7Ct2C,KAAKsxmB,uBAAuB5smB,MAAM4xC,QAAU,OAC5Ct2C,KAAKgxmB,qBAAqBtsmB,MAAM4xC,QAAU,OAC1Ct2C,KAAK+wmB,mBAAmBrsmB,MAAM4xC,QAAU,OACxC,MACJ,IAAK,MACDt2C,KAAKmxmB,WAAWzsmB,MAAM4/B,OAAS,+BAC/BtkC,KAAKqxmB,wBAAwB3smB,MAAM4xC,QAAU,OAC7Ct2C,KAAKsxmB,uBAAuB5smB,MAAM4xC,QAAU,OAC5Ct2C,KAAKgxmB,qBAAqBtsmB,MAAM4xC,QAAU,OAC1Ct2C,KAAK+wmB,mBAAmBrsmB,MAAM4xC,QAAU,OACxC,MACJ,IAAK,MACDt2C,KAAKmxmB,WAAWzsmB,MAAM4/B,OAAS,+BAC/BtkC,KAAKqxmB,wBAAwB3smB,MAAM4xC,QAAU,OAC7Ct2C,KAAKsxmB,uBAAuB5smB,MAAM4xC,QAAU,OAC5Ct2C,KAAKgxmB,qBAAqBtsmB,MAAM4xC,QAAU,QAC1Ct2C,KAAK+wmB,mBAAmBrsmB,MAAM4xC,QAAU,UAIpDurc,EAAwBxmf,UAAUq1mB,8BAAgC,SAAUR,EAAqBO,EAAczvmB,GACvGA,EAAQ8C,UAAUK,SAASssmB,GAC3BzvmB,EAAQ8C,UAAUS,OAAOksmB,GAGzBzvmB,EAAQ8C,UAAUM,IAAIqsmB,IAI9B5uH,EAAwBxmf,UAAUs1mB,2BAA6B,SAAUT,EAAqBO,EAAcnlP,EAAcipP,EAAqBrgmB,GAC3I,IAAIsgmB,EAAah0mB,SAASosB,eAAesjlB,EAAsB5kP,GAC3DmpP,EAAiBj0mB,SAASosB,eAAesjlB,EAAsBqE,GAClD,WAAbrgmB,EACAlU,KAAK00mB,6BAA6BF,EAAYC,EAAgBhE,EAAc,cAE1D,cAAbv8lB,EACLlU,KAAK00mB,6BAA6BF,EAAYC,EAAgBhE,EAAc,WAE1D,cAAbv8lB,EACLlU,KAAK00mB,6BAA6BF,EAAYC,EAAgBhE,EAAc,iBAE1D,iBAAbv8lB,EACLlU,KAAK00mB,6BAA6BF,EAAYC,EAAgBhE,EAAc,WAE1D,eAAbv8lB,EACLlU,KAAK00mB,6BAA6BF,EAAYC,EAAgBhE,EAAc,eAE1D,iBAAbv8lB,EACLlU,KAAK00mB,6BAA6BF,EAAYC,EAAgBhE,EAAc,WAE1D,gBAAbv8lB,EACLlU,KAAK00mB,6BAA6BF,EAAYC,EAAgBhE,EAAc,gBAE1D,kBAAbv8lB,GACLlU,KAAK00mB,6BAA6BF,EAAYC,EAAgBhE,EAAc,YAGpF5uH,EAAwBxmf,UAAUq5mB,6BAA+B,SAAU1wmB,EAAKywmB,EAAgBhE,EAAczklB,GACtGyolB,EAAe3wmB,UAAUK,SAASssmB,IAA4C,WAA3BzklB,EAAS9uB,MAAM,KAAK,GAEvE8G,EAAIU,MAAMsnB,GAAY,+BAEjByolB,EAAe3wmB,UAAUK,SAASssmB,IAA8B,YAAbzklB,EACxDhoB,EAAIU,MAAMsnB,GAAY,QAGtBhoB,EAAIU,MAAMsnB,GAAY,QAI9B61d,EAAwBxmf,UAAU64mB,oCAAsC,WACpE,IACInzS,EACAoU,EACAswB,EACAh3Q,EAJAqha,EAAc9vf,KAAKsvf,MAAM1/a,UAAUkgb,YAAY7vb,MAAM6vb,YAKpDryf,EAAkBqyf,IAAiBryf,EAAkBqyf,EAAY76N,WAC9Dx3R,EAAkBqyf,EAAY76N,UAAYx3R,EAAkBqyf,EAAY76N,QAAQvoR,MAChFq0T,EAAY,EACZoU,EAAc,UACd1mP,EAAc,EACdg3Q,EAAY,YAGZ1kC,EAAY/gU,KAAK20mB,aAAa7kH,EAAY76N,QAAQvoR,IAAIq0T,WACtDoU,EAAc26K,EAAY76N,QAAQvoR,IAAI8pB,MACtCi4D,EAAcqha,EAAY76N,QAAQvoR,IAAI6zO,eACtCklH,EAAYqqJ,EAAYZ,QAAQv9b,kBAGnC3xD,KAAKuwmB,UAAUzsmB,UAAUK,SAAS,4CACnCnE,KAAKuwmB,UAAUzsmB,UAAUM,IAAI,0CAC7BpE,KAAK6vmB,QAAQ/rmB,UAAUS,OAAO,0CAC9BvE,KAAKqwmB,OAAOvsmB,UAAUS,OAAO,0CAC7BvE,KAAKswmB,OAAOxsmB,UAAUS,OAAO,2CAEjCvE,KAAKowmB,4BAA4B,OACjCpwmB,KAAKi0mB,kBAAkBj3mB,MAAQm4U,EAC/Bn1U,KAAK0vmB,mBAAmB1ymB,MAAQyoW,EAEhC,IAAImvQ,GACAztmB,OAAQnH,KAAKi0mB,kBAAmBpslB,SAAS,EACzC4uF,UAAU,EAAOE,MAAO,GAExBk+f,GACA1tmB,OAAQnH,KAAK0vmB,mBAAoB7nlB,SAAS,EAC1C4uF,UAAU,EAAOE,MAAO,GAG5B32G,KAAKkxmB,iCAAiC2D,GACtC70mB,KAAKoxmB,6BAA6BwD,GAClC50mB,KAAK2vmB,iBAAiB19lB,MAAQ,EAC9BjS,KAAKyvmB,uBAAuB/qmB,MAAM4xC,QAAU,OAC5Ct2C,KAAKwvmB,wBAAwB9qmB,MAAM4xC,QAAU,OAC7Ct2C,KAAKyuF,YAAYzxF,MAAQyxF,EACzBzuF,KAAK80Y,YAAY7iY,MAAQ8uT,GAE7B8gL,EAAwBxmf,UAAUs5mB,aAAe,SAAU5zS,GACvD,OAAQA,GACJ,IAAK,SAAU,OAAO,EACtB,IAAK,MAAO,OAAO,EACnB,IAAK,eAAgB,OAAO,EAC5B,IAAK,eAAgB,OAAO,EAC5B,IAAK,UAAW,OAAO,EACvB,IAAK,aAAc,OAAO,EAC1B,IAAK,SAAU,OAAO,EACtB,IAAK,SAAU,OAAO,EACtB,IAAK,oBAAqB,OAAO,EACjC,IAAK,oBAAqB,OAAO,GACjC,IAAK,wBAAyB,OAAO,GACrC,IAAK,qBAAsB,OAAO,GAClC,IAAK,qBAAsB,OAAO,GAClC,IAAK,yBAA0B,OAAO,GACtC,IAAK,oBAAqB,OAAO,GACjC,IAAK,oBAAqB,OAAO,GACjC,IAAK,wBAAyB,OAAO,GACrC,IAAK,aAAc,OAAO,GAC1B,IAAK,aAAc,OAAO,GAC1B,IAAK,iBAAkB,OAAO,GAC9B,IAAK,WAAY,OAAO,GACxB,IAAK,YAAa,OAAO,GACzB,IAAK,SAAU,OAAO,GACtB,IAAK,QAAS,OAAO,GACrB,IAAK,QAAS,OAAO,GAEzB,OAAO,GAKX8gL,EAAwBxmf,UAAUiX,QAAU,WACxC,IAAK7U,EAAkBuC,KAAKmH,QAAS,CAC7BnH,KAAKmH,OAAOkN,eACZrU,KAAKmH,OAAOkN,cAAc/O,YAAYtF,KAAKmH,QAE/C,IAAK,IAAIgf,EAAI,EAAGA,EAAInmB,KAAKmH,OAAOoK,WAAW9U,OAAQ0pB,IAC/CnmB,KAAKmH,OAAO7B,YAAYtF,KAAKmH,OAAOoK,WAAW4U,IAC/CA,IAEJnmB,KAAKmH,YAAShM,EAEd6E,KAAKs0f,aACLt0f,KAAKs0f,WAAWhif,UAChBtS,KAAKs0f,gBAAan5f,GAElB6E,KAAK8vf,cACL9vf,KAAK8vf,YAAYx9e,UACjBtS,KAAK8vf,iBAAc30f,GAEvB6E,KAAKwrlB,YAASrwlB,EACd6E,KAAKmH,YAAShM,EACTsC,EAAkBuC,KAAK80Y,cACxB90Y,KAAK80Y,YAAYxiY,UAErBtS,KAAK80Y,iBAAc35Y,EACnB6E,KAAKi0mB,uBAAoB94mB,EACzB6E,KAAKyymB,wBAAqBt3mB,EAC1B6E,KAAK0ymB,uBAAoBv3mB,EACzB6E,KAAK2ymB,uBAAoBx3mB,EACzB6E,KAAK4ymB,0BAAuBz3mB,EAC5B6E,KAAKmxmB,gBAAah2mB,EAClB6E,KAAKqxmB,6BAA0Bl2mB,EAC/B6E,KAAKsxmB,4BAAyBn2mB,EAC9B6E,KAAK+wmB,wBAAqB51mB,EAC1B6E,KAAKgxmB,0BAAuB71mB,EAC5B6E,KAAK8ymB,+BAA4B33mB,EACjC6E,KAAKkvmB,sBAAmB/zmB,EACxB6E,KAAK8wmB,kCAA+B31mB,EACpC6E,KAAKovmB,yBAAsBj0mB,EAC3B6E,KAAK+ymB,kCAA+B53mB,EACpC6E,KAAKmvmB,yBAAsBh0mB,EAC3B6E,KAAKgzmB,qCAAkC73mB,EACvC6E,KAAKyvmB,4BAAyBt0mB,EAC9B6E,KAAKizmB,mCAAgC93mB,EACrC6E,KAAKsvmB,0BAAuBn0mB,EAC5B6E,KAAK6wmB,qCAAkC11mB,EACvC6E,KAAKqvmB,4BAAyBl0mB,EAC9B6E,KAAKixmB,oCAAiC91mB,EACtC6E,KAAKuvmB,2BAAwBp0mB,EAC7B6E,KAAKkzmB,sCAAmC/3mB,EACxC6E,KAAKwvmB,6BAA0Br0mB,EAC/B6E,KAAKmzmB,iCAA8Bh4mB,EACnC6E,KAAKozmB,oCAAiCj4mB,EACtC6E,KAAKqzmB,oCAAiCl4mB,EACtC6E,KAAKszmB,uCAAoCn4mB,EACzC6E,KAAKuzmB,qCAAkCp4mB,EACvC6E,KAAKwzmB,uCAAoCr4mB,EACzC6E,KAAKyzmB,sCAAmCt4mB,EACxC6E,KAAK0zmB,wCAAqCv4mB,EAC1C6E,KAAK2zmB,qBAAkBx4mB,EACvB6E,KAAK0vmB,wBAAqBv0mB,EAC1B6E,KAAK2vmB,sBAAmBx0mB,GAErB0mf,KCt6BPC,GAAoC,WAIpC,SAASA,EAAmB1H,GACxB,IAAIr6e,EAAQC,KAIZA,KAAK80mB,yBAA2B,WAC5B,IAAIhlH,EAAc/vf,EAAMuvf,MAAM1/a,UAAUkgb,YACnCryf,EAAkBsC,EAAMs1lB,gBAAgBr4lB,OAAS+C,EAAMq1lB,cAAcp4lB,OACnE+C,EAAMu1lB,eAAet4lB,OAAS+C,EAAMo1lB,aAAan4lB,OAAS+C,EAAMg1mB,iBAAiB/3mB,QAChF8yf,EAAYzkQ,eAAiBtrP,EAAMs1lB,gBAAgBr4lB,OAChD8yf,EAAY5kQ,aAAenrP,EAAMq1lB,cAAcp4lB,OAC/C8yf,EAAY1kQ,cAAgBrrP,EAAMu1lB,eAAet4lB,OACjD8yf,EAAY3kQ,YAAcprP,EAAMo1lB,aAAan4lB,OAC7C8yf,EAAYl5N,cAAgB72R,EAAMg1mB,iBAAiB/3mB,QAC1D+C,EAAMuvf,MAAMA,MAAMxjB,4BAA4Bw8H,uBAAwB,EACtEvomB,EAAMi1mB,kBAAkBj1mB,EAAM+vf,aAC9B/vf,EAAMuvf,MAAMA,MAAMxjB,4BAA4Bk9H,2BAElDjpmB,EAAMk1mB,0BAKVj1mB,KAAKi1mB,uBAAyB,WAC1Bl1mB,EAAMuvf,MAAMk8F,OAAOjqgB,OACnBxhF,EAAMuvf,MAAMk8F,OAAOxqlB,QAAQ0D,MAAM2ka,cAAgB,GACjDtpa,EAAMuvf,MAAMpN,eAKhBlif,KAAKk1mB,yBAA2B,WACxBn1mB,EAAMo1mB,mBAAmB3imB,QACzBzS,EAAMg1mB,iBAAiB9vlB,SAAU,EAGjCllB,EAAMg1mB,iBAAiB9vlB,SAAU,GAMzCjlB,KAAKo1mB,aAAe,WAChBr1mB,EAAMuvf,MAAM2tG,QAAQj8lB,QAAQ0D,MAAM2ka,cAAgB,GAClDtpa,EAAMuvf,MAAMpN,eAEhBlif,KAAKsvf,MAAQlV,EAwMjB,OAtMA97e,OAAOuJ,eAAei6e,EAAmBzmf,UAAW,eAIhDqM,IAAK,WACD,OAAIjK,EAAkBuC,KAAKyhiB,eAChBzhiB,KAAKyhiB,cAAgB,IAAIpyC,GAE7Brvf,KAAKyhiB,eAEhB95hB,YAAY,EACZC,cAAc,IAKlBk6e,EAAmBzmf,UAAUkkC,cAAgB,WACzC,MAAO,sBAKXuid,EAAmBzmf,UAAUkhf,uBAAyB,SAAU8lB,GAC7CrigB,KAAKsvf,MACpBtvf,KAAKmH,OAAShG,EAAc,OACxBmC,GAAItD,KAAKsvf,MAAMA,MAAMh9W,YAAc,2BAA4BjvI,UAAW,2BAE9ErD,KAAKsvf,MAAMA,MAAMtuf,QAAQW,YAAY3B,KAAKmH,QAC1C,IAAI2xL,EAAW33L,EAAc,OAASoC,OAAQ,mDAC1C8xmB,EAAgBl0mB,EAAc,SAC9BmC,GAAItD,KAAKmH,OAAO7D,GAAK,iBAAkBD,UAAW,8BAClDrB,UAAWqggB,EAAWtub,YAAY,0BAEtC+kH,EAASn3L,YAAY0zmB,GACrBtzH,GAAkBuzH,4BAA4Bt1mB,KAAM84L,EAAUupU,GAC9D,IAAInhgB,EAAMC,EAAc,OAASoC,OAAQ,sCACrCgymB,EAAiBp0mB,EAAc,SAC/BkC,UAAW,8BACXC,GAAItD,KAAKmH,OAAO7D,GAAK,oBAEzBiymB,EAAevzmB,UAAYqggB,EAAWtub,YAAY,wBAClD7yE,EAAIS,YAAY4zmB,GAChB,IAAIC,EAASr0mB,EAAc,SACvBoC,OAAQ,uCAERuulB,EAAM3wlB,EAAc,MACpB4wlB,EAAM5wlB,EAAc,MACpBg0mB,EAAqBh0mB,EAAc,SACnCsC,OAASiD,KAAQ,YAAcpD,GAAItD,KAAKmH,OAAO7D,GAAK,eAEpD2ulB,EAAM9wlB,EAAc,MAAQoC,OAAQ,wBACxCvD,KAAKy1mB,mBAAqBt0mB,EAAc,SACpCsC,OAASiD,KAAQ,QAAUpD,GAAItD,KAAKmH,OAAO7D,GAAK,iBAEpDyulB,EAAIpwlB,YAAYwzmB,GAChBljB,EAAItwlB,YAAY3B,KAAKy1mB,oBACrB3jB,EAAInwlB,YAAYowlB,GAChBD,EAAInwlB,YAAYswlB,GAChBujB,EAAO7zmB,YAAYmwlB,GACnB5wlB,EAAIS,YAAY6zmB,GAChB,IAAIE,EAASl1mB,SAASW,cAAc,OACpCnB,KAAKmH,OAAOxF,YAAYT,GACxBlB,KAAKmH,OAAOxF,YAAY+zmB,GACxB11mB,KAAK+0mB,iBAAmB,IAAIl9e,IACxB76H,MAAO,EAAG+iB,IAAK,EAAGzT,IAAK,MAAO0J,MAAO,IACrCsjH,SAAU,EAAG1tB,mBAAmB,IAEpC5rG,KAAK+0mB,iBAAiB1+jB,SAASr2C,KAAKy1mB,oBACpCz1mB,KAAKm1mB,mBAAqB,IAAIt2f,IAC1BxrG,MAAOgvf,EAAWtub,YAAY,+BAC9B3zD,OAAQpgB,KAAKk1mB,yBACbjimB,SAAU,+BAEdjT,KAAKm1mB,mBAAmB9+jB,SAAS8+jB,IAKrCrzH,EAAmBzmf,UAAUs6mB,sBAAwB,WACjD,IAAI7lH,EAAc9vf,KAAKsvf,MAAM1/a,UAAUkgb,YACvC9vf,KAAK+0mB,iBAAiB/3mB,MAAQ8yf,EAAYl5N,YAC1C52R,KAAKq1lB,gBAAgBr4lB,MAAQ8yf,EAAYzkQ,aACzCrrP,KAAKm1lB,aAAan4lB,MAAQ8yf,EAAY3kQ,UACtCnrP,KAAKs1lB,eAAet4lB,MAAQ8yf,EAAY1kQ,YACxCprP,KAAKo1lB,cAAcp4lB,MAAQ8yf,EAAY5kQ,WACnC4kQ,EAAYl5N,YAAc,GAC1B52R,KAAKm1mB,mBAAmB3imB,SAAU,EAClCxS,KAAK+0mB,iBAAiB9vlB,SAAU,IAGhCjlB,KAAKm1mB,mBAAmB3imB,SAAU,EAClCxS,KAAK+0mB,iBAAiB9vlB,SAAU,IAMxC68d,EAAmBzmf,UAAU6tmB,qBAAuB,SAAUp5G,GAC1D9vf,KAAKsvf,MAAMA,MAAM84B,cAAcm0B,mBAAmBv8iB,KAAKsvf,MAAM1/a,UAAW,yBACxE5vE,KAAK41mB,yBAAyB9lH,GACzBryf,EAAkBuC,KAAKsvf,MAAMA,MAAM84B,cAAco0B,qBAClDx8iB,KAAKsvf,MAAMA,MAAM84B,cAAcq0B,wBAMvC36D,EAAmBzmf,UAAUiykB,wBAA0B,SAAUx9E,GAC7D9vf,KAAK61mB,2BAA2B/lH,IAKpChO,EAAmBzmf,UAAUu6mB,yBAA2B,SAAU9lH,GAC9D9vf,KAAKsvf,MAAMA,MAAM5U,aAAah8D,YAAY,gBAC1C1+a,KAAK61mB,2BAA2B/lH,IAKpChO,EAAmBzmf,UAAUw6mB,2BAA6B,SAAU/lH,GAChE,IAAImE,EAAaj0f,KAAKsvf,MAAM1/a,UAAUryE,MAAMs5gB,cAAch0B,UAAUwR,eAAeJ,WAE/E67G,GADJ77G,EAAaA,EAAWpB,cAAc7yf,KAAKsvf,QACPQ,YAC/Bryf,EAAkBuC,KAAKsvf,MAAMA,MAAM84B,cAAciK,yBAClDryhB,KAAKsvf,MAAMA,MAAM84B,cAAciK,uBAAuB47C,wBAAwB6hC,GAElFA,EAAmBl5U,YAAck5N,EAAYl5N,YAC7Ck5U,EAAmB5kX,WAAa4kQ,EAAY5kQ,WAC5C4kX,EAAmB3kX,UAAY2kQ,EAAY3kQ,UAC3C2kX,EAAmB1kX,YAAc0kQ,EAAY1kQ,YAC7C0kX,EAAmBzkX,aAAeykQ,EAAYzkQ,aAC9CrrP,KAAKsvf,MAAMA,MAAMxjB,4BAA4Bs/H,mBAAmBn3G,IAKpEnS,EAAmBzmf,UAAU25mB,kBAAoB,SAAUllH,GACvDA,EAAY5kQ,WAAalrP,KAAKo1lB,cAAcp4lB,MAC5C8yf,EAAY3kQ,UAAYnrP,KAAKm1lB,aAAan4lB,MAC1C8yf,EAAYzkQ,aAAerrP,KAAKq1lB,gBAAgBr4lB,MAChD8yf,EAAY1kQ,YAAcprP,KAAKs1lB,eAAet4lB,MAC1CgD,KAAKm1mB,mBAAmB3imB,UACxBs9e,EAAYl5N,YAAc52R,KAAK+0mB,iBAAiB/3mB,QAMxD8kf,EAAmBzmf,UAAU4oH,KAAO,WAChC,IAAI6xf,EAAiB,IAAIt+f,GAAK,iBAAkBx3G,KAAKsvf,MAAMA,MAAM3xE,eACjEm4L,EAAen+f,UAAU33G,KAAKsvf,MAAMA,MAAMthf,QAC1CL,GAAW3N,KAAKsvf,MAAMA,MAAMthf,QACvBhO,KAAKmH,QACNnH,KAAKu8e,uBAAuBu5H,GAEhC91mB,KAAK21mB,wBACL31mB,KAAKsvf,MAAMk8F,OAAO5mgB,OAASkxhB,EAAe/hiB,YAAY,iBACtD/zE,KAAKsvf,MAAMk8F,OAAOpxjB,QAAUp6B,KAAKmH,OACjCnH,KAAKsvf,MAAMk8F,OAAOr1iB,gBAAah7C,EAC/B6E,KAAKsvf,MAAMk8F,OAAOt3kB,UAAakC,EAAG,SAAUC,EAAG,OAE/CrW,KAAKsvf,MAAMk8F,OAAOz1kB,OAAS,OAC3B/V,KAAKsvf,MAAMk8F,OAAOx1kB,MAAQ,OAC1BhW,KAAKsvf,MAAMk8F,OAAO9plB,UAAOvG,EACzB6E,KAAKsvf,MAAMk8F,OAAOr1iB,WAAan2C,KAAKsvf,MAAMpN,YAC1Clif,KAAKsvf,MAAMk8F,OAAOvplB,MAAQjC,KAAKo1mB,aAC/Bp1mB,KAAKsvf,MAAMk8F,OAAOrle,UACVE,MAAOrmH,KAAK80mB,yBACZ1uf,aAAehsF,QAAS07kB,EAAe/hiB,YAAY,MAAO9gE,SAAU,2BAA4B+qG,WAAW,KAG3GqI,MAAOrmH,KAAKi1mB,uBACZ7uf,aAAehsF,QAAS07kB,EAAe/hiB,YAAY,UAAW9gE,SAAU,gCAEhFjT,KAAKsvf,MAAMk8F,OAAO5/hB,WAClB5rD,KAAKsvf,MAAMk8F,OAAOvne,QAKtB69X,EAAmBzmf,UAAUiX,QAAU,WACnC,IAAK7U,EAAkBuC,KAAKmH,QAAS,CAC7BnH,KAAKmH,OAAOkN,eACZrU,KAAKmH,OAAOkN,cAAc/O,YAAYtF,KAAKmH,QAE/C,IAAK,IAAIujF,EAAI,EAAGA,EAAI1qF,KAAKmH,OAAOoK,WAAW9U,OAAQiuF,IAC/C1qF,KAAKmH,OAAO7B,YAAYtF,KAAKmH,OAAOoK,WAAWm5E,IAC/CA,IAEJ1qF,KAAKmH,YAAShM,EAElB6E,KAAKwrlB,YAASrwlB,EACd6E,KAAKmH,YAAShM,EACd6E,KAAKsvf,WAAQn0f,EACb6E,KAAKy1mB,wBAAqBt6mB,EAC1B6E,KAAKm1mB,wBAAqBh6mB,GAEvB2mf,KC3PPC,GAAmC,WAInC,SAASA,EAAkB3H,GACvB,IAAIr6e,EAAQC,KAIZA,KAAKo1mB,aAAe,WAChBr1mB,EAAMuvf,MAAM2tG,QAAQj8lB,QAAQ0D,MAAM2ka,cAAgB,GAClDtpa,EAAMuvf,MAAMpN,eAKhBlif,KAAK+1mB,kBAAoB,WACjBh2mB,EAAMi2mB,oBAAoBxjmB,SAC1BzS,EAAMq1lB,cAAcnwkB,SAAU,EAC9BllB,EAAMu1lB,eAAerwkB,SAAU,EAC/BllB,EAAMs1lB,gBAAgBpwkB,SAAU,EAChCllB,EAAMo1lB,aAAalwkB,SAAU,IAG7BllB,EAAMq1lB,cAAcnwkB,SAAU,EAC9BllB,EAAMu1lB,eAAerwkB,SAAU,EAC/BllB,EAAMs1lB,gBAAgBpwkB,SAAU,EAChCllB,EAAMo1lB,aAAalwkB,SAAU,IAMrCjlB,KAAK80mB,yBAA2B,WAC5B,IAAIxgH,EAAav0f,EAAMuvf,MAAM1/a,UAAU0kb,WAClC72f,EAAkBsC,EAAMs1lB,gBAAgBr4lB,OAAS+C,EAAMq1lB,cAAcp4lB,OACnE+C,EAAMu1lB,eAAet4lB,OAAS+C,EAAMo1lB,aAAan4lB,QACnDs3f,EAAWjpQ,eAAiBtrP,EAAMs1lB,gBAAgBr4lB,OAASs3f,EAAWppQ,aAAenrP,EAAMq1lB,cAAcp4lB,OACnGs3f,EAAWlpQ,cAAgBrrP,EAAMu1lB,eAAet4lB,OAASs3f,EAAWnpQ,YAAcprP,EAAMo1lB,aAAan4lB,QAC5G+C,EAAMuvf,MAAMA,MAAMxjB,4BAA4Bu8H,sBAAuB,EACrEtomB,EAAMi1mB,kBAAkBj1mB,EAAMu0f,YAC9Bv0f,EAAMuvf,MAAMA,MAAMxjB,4BAA4Bk9H,2BAElDjpmB,EAAMk1mB,0BAKVj1mB,KAAKi1mB,uBAAyB,WAC1Bl1mB,EAAMuvf,MAAMk8F,OAAOjqgB,OACnBxhF,EAAMuvf,MAAMk8F,OAAOxqlB,QAAQ0D,MAAM2ka,cAAgB,IAErDrpa,KAAKsvf,MAAQlV,EA+RjB,OA7RA97e,OAAOuJ,eAAek6e,EAAkB1mf,UAAW,cAI/CqM,IAAK,WACD,OAAIjK,EAAkBuC,KAAKwhiB,cAChBxhiB,KAAKwhiB,aAAe,IAAItwC,GAE5Blxf,KAAKwhiB,cAEhB75hB,YAAY,EACZC,cAAc,IAKlBm6e,EAAkB1mf,UAAUkkC,cAAgB,WACxC,MAAO,qBAKXwid,EAAkB1mf,UAAUihf,sBAAwB,SAAU+lB,GAC3CrigB,KAAKsvf,MACpBtvf,KAAKmH,OAAShG,EAAc,OACxBmC,GAAItD,KAAKsvf,MAAMA,MAAMh9W,YAAc,0BAA2BjvI,UAAW,+BAE7ErD,KAAKsvf,MAAMA,MAAMtuf,QAAQW,YAAY3B,KAAKmH,QAC1C,IAAI2xL,EAAW33L,EAAc,OAASoC,OAAQ,mDAC1C8xmB,EAAgBl0mB,EAAc,SAC9BkC,UAAW,8BAA+BC,GAAItD,KAAKmH,OAAO7D,GAAK,mBAEnE+xmB,EAAcrzmB,UAAYqggB,EAAWtub,YAAY,gBACjD+kH,EAASn3L,YAAY0zmB,GACrB,IAAIp1iB,EAAQ9+D,EAAc,SACtBoC,OAAQ,oCAAqCF,UAAW,yBAExD2lY,EAAK7nY,EAAc,MACnBw1Q,EAAKx1Q,EAAc,MAAQkC,UAAW,2BACtC2ymB,EAAsB70mB,EAAc,SACpCsC,OAASiD,KAAQ,YAAcpD,GAAItD,KAAKmH,OAAO7D,GAAK,oBAExDqzQ,EAAGh1Q,YAAYq0mB,GACfhtO,EAAGrnY,YAAYg1Q,GACf12M,EAAMt+D,YAAYqnY,GAClBlwM,EAASn3L,YAAYs+D,GACrB8hb,EAAkBuzH,4BAA4Bt1mB,KAAM84L,EAAUupU,GAC9D,IAAIqzG,EAASl1mB,SAASW,cAAc,OACpCnB,KAAKmH,OAAOxF,YAAY+zmB,GACxB11mB,KAAKg2mB,oBAAsB,IAAIn3f,IAC3BxrG,MAAOgvf,EAAWtub,YAAY,2BAC9B3zD,OAAQpgB,KAAK+1mB,oBAEjB/1mB,KAAKg2mB,oBAAoB3/jB,SAAS2/jB,GAClCh2mB,KAAKg2mB,oBAAoBt5mB,iBAAiB,SAAUsD,KAAK+1mB,oBAK7Dh0H,EAAkB1mf,UAAU4oH,KAAO,WAC/B,IAAIgyf,EAAgB,IAAIz+f,GAAK,iBAAkBx3G,KAAKsvf,MAAMA,MAAM3xE,eAChEs4L,EAAct+f,UAAU33G,KAAKsvf,MAAMA,MAAMthf,QACzCL,GAAW3N,KAAKsvf,MAAMA,MAAMthf,QACvBhO,KAAKmH,QACNnH,KAAKs8e,sBAAsB25H,GAE/Bj2mB,KAAK21mB,wBACL31mB,KAAKsvf,MAAMk8F,OAAO5mgB,OAASqxhB,EAAcliiB,YAAY,gBACrD/zE,KAAKsvf,MAAMk8F,OAAOt3kB,UAAakC,EAAG,SAAUC,EAAG,OAC/CrW,KAAKsvf,MAAMk8F,OAAOz1kB,OAAS,OAC3B/V,KAAKsvf,MAAMk8F,OAAOx1kB,MAAQ,OAC1BhW,KAAKsvf,MAAMk8F,OAAOpxjB,QAAUp6B,KAAKmH,OACjCnH,KAAKsvf,MAAMk8F,OAAOr1iB,gBAAah7C,EAC/B6E,KAAKsvf,MAAMk8F,OAAO9plB,UAAOvG,EACzB6E,KAAKsvf,MAAMk8F,OAAOvplB,MAAQjC,KAAKo1mB,aAC/Bp1mB,KAAKsvf,MAAMk8F,OAAOrle,UACVE,MAAOrmH,KAAK80mB,yBACZ1uf,aAAehsF,QAAS67kB,EAAcliiB,YAAY,MAAO9gE,SAAU,kCAAmC+qG,WAAW,KAGjHqI,MAAOrmH,KAAKi1mB,uBACZ7uf,aAAehsF,QAAS67kB,EAAcliiB,YAAY,UAAW9gE,SAAU,uCAE/EjT,KAAKsvf,MAAMk8F,OAAOvne,QAKtB89X,EAAkB1mf,UAAUs6mB,sBAAwB,WAChD,IAAIrhH,EAAat0f,KAAKsvf,MAAM1/a,UAAU0kb,WAGtC,GAFAt0f,KAAKk2mB,YAAcz4mB,EAAkB62f,EAAWppQ,YAAcopQ,EAAWnpQ,WAClEmpQ,EAAWlpQ,aAAekpQ,EAAWjpQ,cACxCrrP,KAAKk2mB,YAAa,CAClB,IAAIpmH,EAAc9vf,KAAKsvf,MAAM1/a,UAAUkgb,YACvC9vf,KAAKm2mB,mBAAmBrmH,GAAa,GAAO,QAG5C9vf,KAAKm2mB,mBAAmB7hH,GAAY,GAAM,IAGlDvS,EAAkB1mf,UAAU86mB,mBAAqB,SAAUn6kB,EAAQo6kB,EAAeC,GAC9Er2mB,KAAKo1lB,cAAcp4lB,MAAQg/B,EAAOkvN,WAClClrP,KAAKs1lB,eAAet4lB,MAAQg/B,EAAOovN,YACnCprP,KAAKm1lB,aAAan4lB,MAAQg/B,EAAOmvN,UACjCnrP,KAAKq1lB,gBAAgBr4lB,MAAQg/B,EAAOqvN,aACpCrrP,KAAKo1lB,cAAcnwkB,QAAUmxlB,EAC7Bp2mB,KAAKs1lB,eAAerwkB,QAAUmxlB,EAC9Bp2mB,KAAKm1lB,aAAalwkB,QAAUmxlB,EAC5Bp2mB,KAAKq1lB,gBAAgBpwkB,QAAUmxlB,EAC/Bp2mB,KAAKg2mB,oBAAoBxjmB,QAAU6jmB,GAKvCt0H,EAAkB1mf,UAAU4tmB,oBAAsB,SAAU30G,GACxDt0f,KAAKsvf,MAAMA,MAAM84B,cAAcm0B,mBAAmBv8iB,KAAKsvf,MAAM1/a,UAAW,wBACxE5vE,KAAKsvf,MAAMA,MAAM5U,aAAah8D,YAAY,eAE1C,IAAIs0H,EAAahziB,KAAKsvf,MAAM1/a,UAAUryE,MAAMslf,UAAUwR,eAAeJ,WACrE++C,EAAaA,EAAWngD,cAAc7yf,KAAKsvf,OAC3Ctvf,KAAK2mkB,sBAAsB3mkB,KAAKsvf,MAAM1/a,UAAUryE,MAAMslf,UAAUwR,eAAeH,SAASrB,cAAc7yf,KAAKsvf,OAAQtvf,KAAKsvf,MAAM1/a,UAAUryE,MAAOyC,KAAKsvf,MAAM1/a,UAAU/wD,IAAKy1e,GACzKt0f,KAAKsvf,MAAMA,MAAM5U,aAAa+oE,SAASzjjB,KAAKsvf,MAAM1/a,WAAW,GACxDnyE,EAAkBuC,KAAKsvf,MAAMA,MAAM84B,cAAco0B,qBAClDx8iB,KAAKsvf,MAAMA,MAAM84B,cAAcq0B,wBAMvC16D,EAAkB1mf,UAAUsrkB,sBAAwB,SAAUjmgB,EAAKnjE,EAAOshB,EAAKy1e,GAE3E,GADAt0f,KAAKs2mB,yBAAyB51iB,EAAK4zb,GAC/Bz1e,EAAIgke,UAAUwR,eAAeH,WAAaxzb,EAA9C,CAGA,IAAI+uf,EAAS/uf,EAAIu7b,WACZx+f,EAAkBgyjB,IACnBzvjB,KAAK2mkB,sBAAsBlX,EAAQlyjB,EAAOshB,EAAKy1e,KAGvDvS,EAAkB1mf,UAAUi7mB,yBAA2B,SAAU51iB,EAAK4zb,GAClE,IAAK72f,EAAkBuC,KAAKsvf,MAAMA,MAAM84B,cAAciK,wBAAyB,CAC3E,IAAIm7C,EAAgB9sgB,EAAIuib,aAAa,GAAGqR,WAExCA,EAAat0f,KAAKsvf,MAAMA,MAAM84B,cAAciK,uBAAuB07C,uBAAuBP,EAAel5E,EAAY5zb,EAAIuzb,YAExHx2f,EAAkB62f,IACnBt0f,KAAKu2mB,yBAAyB71iB,EAAK4zb,IAM3CvS,EAAkB1mf,UAAUk7mB,yBAA2B,SAAU71iB,EAAK4zb,GAClE,IAAIkiH,EAAW91iB,EAAIuib,aACnBjjf,KAAKy2mB,aAAaD,EAAUliH,IAKhCvS,EAAkB1mf,UAAUo7mB,aAAe,SAAU30iB,EAAOwyb,GACxD,IAAK,IAAIn4f,EAAI,EAAGA,EAAI2lE,EAAMrlE,OAAQN,IAC9B6D,KAAK02mB,oBAAoB50iB,EAAM3lE,GAAGm4f,WAAYA,GAElDt0f,KAAKsvf,MAAMA,MAAMxjB,4BAA4Bs/H,mBAAmBtpiB,EAAM,GAAGmyb,aAK7ElS,EAAkB1mf,UAAUq7mB,oBAAsB,SAAUloF,EAAcl6B,GACtEk6B,EAAatjS,WAAaopQ,EAAWppQ,WACrCsjS,EAAarjS,UAAYmpQ,EAAWnpQ,UACpCqjS,EAAapjS,YAAckpQ,EAAWlpQ,YACtCojS,EAAanjS,aAAeipQ,EAAWjpQ,cAK3C02P,EAAkB1mf,UAAU25mB,kBAAoB,SAAU1gH,GACjDt0f,KAAKg2mB,oBAAoBxjmB,UAC1B8hf,EAAWppQ,WAAalrP,KAAKo1lB,cAAcp4lB,MAC3Cs3f,EAAWnpQ,UAAYnrP,KAAKm1lB,aAAan4lB,MACzCs3f,EAAWjpQ,aAAerrP,KAAKq1lB,gBAAgBr4lB,MAC/Cs3f,EAAWlpQ,YAAcprP,KAAKs1lB,eAAet4lB,QAMrD+kf,EAAkB1mf,UAAUiX,QAAU,WAClC,IAAK7U,EAAkBuC,KAAKmH,QAAS,CAC7BnH,KAAKmH,OAAOkN,eACZrU,KAAKmH,OAAOkN,cAAc/O,YAAYtF,KAAKmH,QAE/C,IAAK,IAAIwjJ,EAAI,EAAGA,EAAI3qJ,KAAKmH,OAAOoK,WAAW9U,OAAQkuJ,IAC/C3qJ,KAAKmH,OAAO7B,YAAYtF,KAAKmH,OAAOoK,WAAWo5I,IAC/CA,IAEJ3qJ,KAAKmH,YAAShM,EAElB6E,KAAKwrlB,YAASrwlB,EACd6E,KAAKmH,YAAShM,EACd6E,KAAKsvf,WAAQn0f,EACb6E,KAAKg2mB,yBAAsB76mB,GAK/B4mf,EAAkBuzH,4BAA8B,SAAU9pB,EAAQtqlB,EAAK8M,GACnE,IAAKvQ,EAAkB+tlB,GAAS,CAC5B,IAAIvrhB,EAAQ9+D,EAAc,SAAWkC,UAAW,yBAC5C8tlB,EAAMhwlB,EAAc,MAAQoC,OAAQ,8BACpC6tlB,EAAMjwlB,EAAc,MACpBm2lB,EAAWn2lB,EAAc,SACzBa,UAAWgM,EAAO+lE,YAAY,OAAQ1wE,UAAW,6BACjDC,GAAIkolB,EAAOrklB,OAAO7D,GAAK,cAEvBi0lB,EAAap2lB,EAAc,SAC3BsC,OAASiD,KAAQ,QAAUnD,OAAQ,aAAcD,GAAIkolB,EAAOrklB,OAAO7D,GAAK,SAE5E8tlB,EAAIzvlB,YAAY21lB,GAChBlG,EAAIzvlB,YAAY41lB,GAChB,IAAIjG,EAAMnwlB,EAAc,MAAQkC,UAAW,2BACvCszmB,EAAYx1mB,EAAc,SAC1Ba,UAAWgM,EAAO+lE,YAAY,QAAS1wE,UAAW,6BAClDC,GAAIkolB,EAAOrklB,OAAO7D,GAAK,eAEvBq0lB,EAAcx2lB,EAAc,SAC5BsC,OAASiD,KAAQ,QACjBnD,OAAQ,aAAcD,GAAIkolB,EAAOrklB,OAAO7D,GAAK,UAEjDgulB,EAAI3vlB,YAAYg1mB,GAChBrlB,EAAI3vlB,YAAYg2lB,GAChBxG,EAAIxvlB,YAAYyvlB,GAChBD,EAAIxvlB,YAAY2vlB,GAChB,IAAII,EAAMvwlB,EAAc,MAAQoC,OAAQ,8BACpCoulB,EAAMxwlB,EAAc,MAAQoC,OAAQ,eACpCsrmB,EAAc1tmB,EAAc,SAC5Ba,UAAWgM,EAAO+lE,YAAY,UAC9B1wE,UAAW,6BAA8BC,GAAIkolB,EAAOrklB,OAAO7D,GAAK,iBAEhEm0lB,EAAgBt2lB,EAAc,SAC9BsC,OAASiD,KAAQ,QACjBnD,OAAQ,aAAcD,GAAIkolB,EAAOrklB,OAAO7D,GAAK,YAEjDqulB,EAAIhwlB,YAAYktmB,GAChBld,EAAIhwlB,YAAY81lB,GAChB,IAAI5F,EAAM1wlB,EAAc,MAAQoC,OAAQ,eACpCq0lB,EAAaz2lB,EAAc,SAC3Ba,UAAWgM,EAAO+lE,YAAY,SAAUzwE,GAAIkolB,EAAOrklB,OAAO7D,GAAK,cAC/DD,UAAW,+BAEXw0lB,EAAe12lB,EAAc,SAC7BsC,OAASiD,KAAQ,QACjBnD,OAAQ,aAAcD,GAAIkolB,EAAOrklB,OAAO7D,GAAK,WAEjDuulB,EAAIlwlB,YAAYi2lB,GAChB/F,EAAIlwlB,YAAYk2lB,GAChBnG,EAAI/vlB,YAAYgwlB,GAChBD,EAAI/vlB,YAAYkwlB,GAChB5xhB,EAAMt+D,YAAYwvlB,GAClBlxhB,EAAMt+D,YAAY+vlB,GAClBxwlB,EAAIS,YAAYs+D,GAChBurhB,EAAOrklB,OAAOxF,YAAYT,GAC1BsqlB,EAAO2J,aAAe,IAAIt9d,IACtB76H,MAAO,EAAG+iB,IAAK,EAAGzT,IAAK,KAAM0J,MAAO,IAAKsjH,SAAU,EACnD1tB,mBAAmB,IAEvB4/e,EAAO2J,aAAa9+iB,SAASkhjB,GAC7B/L,EAAO4J,cAAgB,IAAIv9d,IACvB76H,MAAO,EAAG+iB,IAAK,EAAGzT,IAAK,KAAM0J,MAAO,IACpCsjH,SAAU,EAAG1tB,mBAAmB,IAEpC4/e,EAAO4J,cAAc/+iB,SAASshjB,GAC9BnM,EAAO6J,gBAAkB,IAAIx9d,IACzB76H,MAAO,EAAG+iB,IAAK,EAAGzT,IAAK,KAAM0J,MAAO,IAAKsjH,SAAU,EACnD1tB,mBAAmB,IAEvB4/e,EAAO6J,gBAAgBh/iB,SAASohjB,GAChCjM,EAAO8J,eAAiB,IAAIz9d,IACxB76H,MAAO,EAAG+iB,IAAK,EAAGzT,IAAK,KAAM0J,MAAO,IACpCsjH,SAAU,EAAG1tB,mBAAmB,IAEpC4/e,EAAO8J,eAAej/iB,SAASwhjB,KAGhC91G,KCpVPC,GAA8B,WAI9B,SAASA,EAAa5H,GAClB,IAAIr6e,EAAQC,KACZA,KAAK8/lB,iBAAmB,WAIpB,OAHiB//lB,EAAMuvf,MAAMA,MAAMlV,OAAO72e,OAAOsgf,cAAc,aAEpCtpe,QADF,SAAU,YAAa,YAAa,YAAa,YAAa,YAAa,cAC/CysB,OAAO,SAAU+lH,EAAG5wJ,EAAGgnD,GAAK,OAAOA,EAAE5kD,QAAQwuJ,KAAO5wJ,KAG7G6D,KAAK42mB,aAAe,WAChB72mB,EAAMuvf,MAAMk8F,OAAOjqgB,OACnBxhF,EAAMuvf,MAAMA,MAAM5S,kBAAkBz4X,KAAKlkH,EAAMgsf,UAAWhsf,EAAMsigB,WAAWtub,YAAY,kBAG3F/zE,KAAKqtlB,cAAgB,SAAUptlB,GAC3BF,EAAMgsf,UAAY9rf,EAAKwsB,MAE3BzsB,KAAK62mB,aAAe,WAChB92mB,EAAMuvf,MAAMk8F,OAAOjqgB,OACnBxhF,EAAMuvf,MAAMA,MAAM5S,kBAAkBz4X,QAExCjkH,KAAKsvf,MAAQlV,EAkFjB,OA7EA4H,EAAa3mf,UAAUkkC,cAAgB,WACnC,MAAO,gBAKXyid,EAAa3mf,UAAUy7mB,iBAAmB,SAAUz0G,EAAY9+f,GAC5D,IACID,EAAKtD,KAAKsvf,MAAMA,MAAMh9W,YAAc,iBACxCtyI,KAAKmH,OAAShG,EAAc,OAASmC,GAAIA,EAAID,UAAW,gBACxD,IACImqlB,EAAYrslB,EAAc,OAASa,UADrBqggB,EAAWtub,YAAY,UACsB1wE,UAAW,uBAC1ErD,KAAKmH,OAAOxF,YAAY6rlB,GACxB,IAAIC,EAAYtslB,EAAc,OAASkC,UAAW,oBAClDrD,KAAKmH,OAAOxF,YAAY8rlB,GACxB,IAAIjjI,EAAYrpd,EAAc,OAASkC,UAAW,kBAClDoqlB,EAAU9rlB,YAAY6od,GACtB,IAAImjI,EAAcxslB,EAAc,OAASkC,UAAW,uBAAwBC,GAAI,oBAChFknd,EAAU7od,YAAYgslB,GACtB3tlB,KAAK4tlB,iBAAmB,IAAIzxZ,IACxB54H,WAAYhgE,EACZ0P,SAAU,sBAEdjT,KAAK4tlB,iBAAiBv3iB,SAASs3iB,GAC/B3tlB,KAAK4tlB,iBAAiBlxlB,iBAAiB,SAAUsD,KAAKqtlB,eACtD,IAAIQ,EAAY1slB,EAAc,OAASkC,UAAW,oBAClDoqlB,EAAU9rlB,YAAYkslB,GACtB,IAAIkpB,EAAe51mB,EAAc,OAASkC,UAAW,uBACrDwqlB,EAAUlslB,YAAYo1mB,GACtB,IAAIC,EAAmB71mB,EAAc,UAAYa,UAAWqggB,EAAWtub,YAAY,OAAQzwE,GAAI,QAC/FyzmB,EAAap1mB,YAAYq1mB,GACT,IAAIj5f,IAAS9qG,SAAU,oBAC7BojC,SAAS2gkB,GACnBA,EAAiBt6mB,iBAAiB,QAASsD,KAAK62mB,cAChD,IAAII,EAAkB91mB,EAAc,OAASkC,UAAW,uBACxDwqlB,EAAUlslB,YAAYs1mB,GACtB,IAAIC,EAAsB/1mB,EAAc,UAAYa,UAAWqggB,EAAWtub,YAAY,UAAWzwE,GAAI,WACrG2zmB,EAAgBt1mB,YAAYu1mB,GACZ,IAAIn5f,IAAS9qG,SAAU,oBAC7BojC,SAAS6gkB,GACnBA,EAAoBx6mB,iBAAiB,QAASsD,KAAK42mB,eAKvD50H,EAAa3mf,UAAU4oH,KAAO,WAC1B,IAAI1gH,EAASvD,KAAK8/lB,mBACdz9F,EAAa,IAAI7qZ,GAAK,iBAAkBx3G,KAAKsvf,MAAMA,MAAM3xE,eAC7D0kF,EAAW1qZ,UAAU33G,KAAKsvf,MAAMA,MAAMthf,QACtCL,GAAW3N,KAAKsvf,MAAMA,MAAMthf,QAC5BhO,KAAKqigB,WAAaA,EAClBrigB,KAAK82mB,iBAAiBz0G,EAAY9+f,GAClCvD,KAAKsvf,MAAMk8F,OAAOpxjB,QAAUp6B,KAAKmH,OACjCnH,KAAKsvf,MAAMk8F,OAAOr1iB,WAAan2C,KAAKsvf,MAAMpN,YAC1Clif,KAAKsvf,MAAMk8F,OAAOvplB,MAAQjC,KAAKsvf,MAAMpN,YACrClif,KAAKsvf,MAAMk8F,OAAO5mgB,OAAS,SAC3B5kF,KAAKsvf,MAAMk8F,OAAOz1kB,OAAS,OAC3B/V,KAAKsvf,MAAMk8F,OAAOx1kB,MAAQ,OAC1BhW,KAAKsvf,MAAMk8F,OAAOrle,UACVE,MAAOrmH,KAAKm3mB,YAAY77mB,KAAK0E,MAC7BomH,aAAehsF,QAASioe,EAAWtub,YAAY,UAAW9gE,SAAU,wBAAyB+qG,WAAW,KAEhHh+G,KAAKsvf,MAAMk8F,OAAO5/hB,WAClB5rD,KAAKsvf,MAAMk8F,OAAOvne,QAEtB+9X,EAAa3mf,UAAU87mB,YAAc,WACjCn3mB,KAAKsvf,MAAMk8F,OAAOjqgB,QAKtByga,EAAa3mf,UAAUiX,QAAU,WACzBtS,KAAK4tlB,mBACL5tlB,KAAK4tlB,iBAAiBt7kB,UACtBtS,KAAK4tlB,sBAAmBzylB,IAGzB6mf,KC/GXo1H,GAAqBhrgB,OAAQirgB,GAAYC,GAAiBC,GAAiBC,GAAiBtmO,GAAgBumO,GAAaC,GAAaC,GAAoBC,GAAkBC,GAAkBC,GAAmBC,GAAsBC,GAAkBC,GAAqBC,GAA4BC,GAAsBC,GAAsBC,GAAiBC,GAAkBC,GAAmBC,GAAgCC,GAAiBC,GAA4BC,GAA8BC,GAAyBC,83DCAhhBC,GAAkB1sgB,OAAQ2sgB,Q9b6RtB/4iB,G+b1ROg5iB,6FjcmBX,SAAsC5+kB,GAElC,IAAK,IADD8xK,EAAiB9xK,EAAQ54B,iBAAiB,gBACrCrF,EAAI+vM,EAAezvM,OAAS,EAAGN,GAAK,EAAGA,IAAK,CACjD,IAAI62G,EAAWk5F,EAAe/vM,GAAGsE,WAC7BgsB,EAAOjsB,SAASw0C,eAAek3J,EAAe/vM,GAAG0f,aACrDm3F,EAASm2N,aAAa18S,EAAMy/K,EAAe/vM,uKkczB/C88mB,GAA2B,WAmB3B,OAlBA,WACIj5mB,KAAKk5mB,SAAW,EAChBl5mB,KAAKm5mB,UAAY,OACjBn5mB,KAAKotO,SAAW,UAChBptO,KAAK6sB,SAAW,GAChB7sB,KAAKsqf,UAAY,UACjBtqf,KAAKuxC,QAAS,EACdvxC,KAAK0uC,MAAO,EACZ1uC,KAAKk1Q,WAAY,EACjBl1Q,KAAKo5mB,UAAW,EAChBp5mB,KAAKwvD,OAAS,UACdxvD,KAAKuvD,OAAS,SACdvvD,KAAKq5mB,OAAS,EACdr5mB,KAAKglgB,aAAe,UACpBhlgB,KAAK0G,KAAO,WACZ1G,KAAKi1R,QAAU,IAAI64M,GACnB9te,KAAKs5mB,eAAgB,MAKzB38S,GAAsB,WAStB,OARA,WACI38T,KAAKwjlB,GAAK,GACVxjlB,KAAKy3B,KAAO,UACZz3B,KAAKgpH,GAAI,EACThpH,KAAK88B,GAAI,EACT98B,KAAK7D,GAAI,EACT6D,KAAKw2B,MAAQ,eAKjB+ilB,GAAyB,WAGzB,OAFA,gBAKAzsI,GAA2B,WAG3B,OAFA,gBAKA0sI,GAA8B,WAG9B,OAFA,gBAKAC,GAA4B,WAK5B,OAJA,WACIz5mB,KAAKy3B,KAAO,SACZz3B,KAAK05mB,KAAO,MAKhBC,GAAwB,WAKxB,OAJA,SAAgBr2mB,EAAI2lB,GAChBjpB,KAAKk5mB,SAAW51mB,EAChBtD,KAAK45mB,WAAa3wlB,MAQtB2zS,GAAwB,WAKxB,OAJA,SAAgBi9S,EAAOC,GACnB95mB,KAAK+gU,UAAY84S,EACjB75mB,KAAKw2B,MAAQsjlB,MAQjBhsI,GAAyB,WAQzB,OAPA,WACI9te,KAAKwM,KAAO,IAAIowT,GAAO,OAAQ,WAC/B58T,KAAKyM,MAAQ,IAAImwT,GAAO,OAAQ,WAChC58T,KAAK0M,IAAM,IAAIkwT,GAAO,OAAQ,WAC9B58T,KAAK2M,OAAS,IAAIiwT,GAAO,OAAQ,WACjC58T,KAAK40L,IAAM,IAAIgoI,GAAO,OAAQ,eC3FlCtyO,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAaxC8hZ,GAAsB,WAGtB,OAFA,gBAQAstI,GAAuB,SAAU5uhB,GAEjC,SAAS4uhB,IACL,IAAIh6mB,EAAmB,OAAXorF,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAgBhE,OAfAD,EAAMqE,IAAM,SAAU6+D,GAGlB,IAAK,IAFD+2iB,GAAW,EACXl7lB,EAAQ,EACH1gB,EAAK,EAAGyE,EAAK9C,EAAO3B,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvCyE,EAAGzE,GACL6T,QAAUgxD,EAAKhxD,QACjBlS,EAAM+e,GAASmkD,EACf+2iB,GAAW,GAEfl7lB,IAECk7lB,GACDj6mB,EAAMyE,KAAKy+D,IAGZljE,EAEX,OApBAuqF,GAAUyvhB,EAAO5uhB,GAoBV4uhB,GACTv7mB,OCzCE0/D,GAAwB,WAGxB,OAFA,gBCJAosB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAaxC61O,GAAqB,WAGrB,OAFA,gBAQAy5S,GAAsB,SAAU9uhB,GAEhC,SAAS8uhB,IACL,IAAIl6mB,EAAmB,OAAXorF,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAgBhE,OAfAD,EAAMqE,IAAM,SAAUs8D,GAGlB,IAAK,IAFDs5iB,GAAW,EACXl7lB,EAAQ,EACH1gB,EAAK,EAAGyE,EAAK9C,EAAO3B,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvCyE,EAAGzE,GACL6T,QAAUyuD,EAAIzuD,QAChBlS,EAAM+e,GAAS4hD,EACfs5iB,GAAW,GAEfl7lB,IAECk7lB,GACDj6mB,EAAMyE,KAAKk8D,IAGZ3gE,EAEX,OApBAuqF,GAAU2vhB,EAAM9uhB,GAoBT8uhB,GACTz7mB,OC5CE8rF,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAaxCuvhB,GAA4B,SAAU/uhB,GAEtC,SAAS+uhB,IACL,OAAkB,OAAX/uhB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAE/D,OAJAsqF,GAAU4vhB,EAAY/uhB,GAIf+uhB,GACT17mB,OCnBE8rF,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAaxCwvhB,GAA2B,WAI3B,OAHA,WACIn6mB,KAAKo6mB,mBAAoB,MAK7BC,GAA2B,WAG3B,OAFA,gBAKAn8L,GAA0B,WAG1B,OAFA,gBAKAo8L,GAA4B,WAG5B,OAFA,gBAKAC,GAA2B,WAG3B,OAFA,gBAQAC,GAA4B,SAAUrvhB,GAEtC,SAASqvhB,IACL,IAAIz6mB,EAAmB,OAAXorF,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAwBhE,OAvBAD,EAAMqE,IAAM,SAAUq2mB,GAGlB,IAAK,IAFDT,GAAW,EACXl7lB,EAAQ,EACH1gB,EAAK,EAAGyE,EAAK9C,EAAO3B,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC/C,IAAIs8mB,EAAQ73mB,EAAGzE,GACf,GAAIo8mB,EAAWG,eAAeD,EAAOD,GAAY,CAC7C,IAAIG,EAAmB,IAAIL,GAC3BK,EAAiB7tmB,EAAIV,KAAK0T,IAAI26lB,EAAM3tmB,EAAG0tmB,EAAU1tmB,GACjD6tmB,EAAiB5tmB,EAAIX,KAAK0T,IAAI26lB,EAAMrkmB,EAAGokmB,EAAUztmB,GACjD4tmB,EAAiB5kmB,MAAQ3J,KAAKC,IAAIoumB,EAAMrrI,MAAQqrI,EAAMtkmB,EAAGqkmB,EAAUzkmB,MAAQykmB,EAAU1tmB,GACrF6tmB,EAAiB7kmB,OAAS1J,KAAKC,IAAIoumB,EAAMprI,OAASorI,EAAMrkmB,EAAGokmB,EAAU1kmB,OAAS0kmB,EAAUztmB,GACxF4tmB,EAAiBC,IAAO96mB,EAAM+e,GAAO+7lB,IAAI39mB,MAAM,KAAK,GAAM,IAAOu9mB,EAAUI,IAAI39mB,MAAM,KAAK,GAC1F6C,EAAM+e,GAAS87lB,EACfH,EAAYG,EACZZ,GAAW,EAEfl7lB,IAKJ,OAHKk7lB,GACDj6mB,EAAMyE,KAAKi2mB,GAERA,GAEJ16mB,EAQX,OAlCAuqF,GAAUkwhB,EAAYrvhB,GA4BtBqvhB,EAAWG,eAAiB,SAAUnplB,EAAM4hL,GACxC,OAAQ5hL,EAAKzkB,GAAKqmM,EAAQrmM,EAAIqmM,EAAQp9L,OAC9Bo9L,EAAQrmM,GAAKykB,EAAKzkB,EAAIykB,EAAKxb,OAC3Bwb,EAAKxkB,GAAKomM,EAAQpmM,EAAIomM,EAAQr9L,QAC9Bq9L,EAAQpmM,GAAKwkB,EAAKxkB,EAAIwkB,EAAKzb,QAEhCykmB,GACTh8mB,OC5EEs8mB,GAAgC,WAChC,SAASA,EAAeltmB,GACpB5N,KAAKivE,KAAO,IAAIy7B,GA2CpB,OAtCAowgB,EAAez/mB,UAAUomE,kBAAoB,SAAUzlC,GACnD,OAAIA,EAAOt1B,KACA1G,KAAKivE,KAAK07B,cAAc3uE,GAGxBh8B,KAAKivE,KAAKC,gBAAgBlzC,IAiBzC8+kB,EAAez/mB,UAAUwiM,OAAS,SAAU7gM,EAAOg/B,GAC/C,IAAIj9B,EAAS/B,EAIb,OAHKS,EAAkBu+B,IAAYv+B,EAAkBT,KACjD+B,EAASi9B,EAAOh/B,IAEb+B,GAQX+7mB,EAAez/mB,UAAUu6iB,YAAc,SAAU54iB,EAAOg/B,GACpD,OAAOh8B,KAAK69L,OAAO7gM,EAAOgD,KAAKyhE,kBAAkBzlC,KAE9C8+kB,KChDPC,GAA2B,WAE3B,SAASA,EAAUr3iB,GAIf,GAHA1jE,KAAKg7mB,OAAS,GACdh7mB,KAAK6sY,UAAY,IAAIiuO,GACrB96mB,KAAKoxN,qBAAwBjoI,UAAUkoI,WACnB,OAAhB3tJ,EAAKngE,aAAmCpI,IAAhBuoE,EAAKngE,OAAsB,CACnDvD,KAAKi7mB,aAAe,IAAIC,IACxB,IAAK,IAAI/+mB,EAAI,EAAGA,EAAIunE,EAAKngE,OAAO9G,OAAQN,SACRhB,IAAxBuoE,EAAKngE,OAAOpH,GAAGs7B,WAAsDt8B,IAAhCuoE,EAAKngE,OAAOpH,GAAG6ogB,cACpDhlgB,KAAKi7mB,aAAa5zmB,IAAIq8D,EAAKngE,OAAOpH,GAAGs7B,KAAMisC,EAAKngE,OAAOpH,GAAG6ogB,cAK9C,OAApBthc,EAAKy3iB,iBAA2ChgnB,IAApBuoE,EAAKy3iB,YACjCn7mB,KAAKo7mB,eAAe13iB,EAAKy3iB,WAAW,IAyH5C,OArHAJ,EAAU1/mB,UAAU+/mB,eAAiB,SAAU13iB,GAEzB,OAAdA,EAAK60N,WAA+Bp9R,IAAduoE,EAAK60N,MAC3Bv4R,KAAKq7mB,UAAU33iB,EAAK60N,OAI5BwiV,EAAU1/mB,UAAUggnB,UAAY,SAAU9iV,GAEtC,IAAK,IADDz5Q,EAAQ,EACH1gB,EAAK,EAAGk9mB,EAAS/iV,EAAMn6R,EAAKk9mB,EAAO7+mB,OAAQ2B,IAAM,CACtD,IAAIsiE,EAAM46iB,EAAOl9mB,GAEjB,GAAkB,OAAdsiE,EAAIzuD,YAAgC9W,IAAdulE,EAAIzuD,MAQ1B,MAAMrR,MAAM,yBAPZ,KAAOke,EAAQ4hD,EAAIzuD,OACfjS,KAAKg7mB,QAAU,KACfl8lB,IAEJ9e,KAAKu7mB,SAAS76iB,KAQ1Bq6iB,EAAU1/mB,UAAUkgnB,SAAW,SAAU76iB,GACrC,GAAkB,OAAdA,EAAIoB,YAAgC3mE,IAAdulE,EAAIoB,MAE1B,IAAK,IADDhjD,EAAQ,EACH1gB,EAAK,EAAGyE,EAAK69D,EAAIoB,MAAO1jE,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACnD,IAAI6kE,EAAOpgE,EAAGzE,GAEd,GAAmB,OAAf6kE,EAAKhxD,YAAiC9W,IAAf8nE,EAAKhxD,MAQ5B,MAAMrR,MAAM,0BAPZ,KAAOke,EAAQmkD,EAAKhxD,OAChBjS,KAAKg7mB,QAAU,IACfl8lB,IAEJ9e,KAAKw7mB,UAAUv4iB,KAS/B83iB,EAAU1/mB,UAAUmgnB,UAAY,SAAUv4iB,GACtC,IAAIw4iB,EAAMz7mB,KAAKg7mB,YACI7/mB,IAAf8nE,EAAKjmE,QACDimE,EAAKjmE,iBAAiBgjB,UACH7kB,IAAf8nE,EAAKv+D,YAAmDvJ,IAA5B8nE,EAAKv+D,MAAMsggB,aAEvCy2G,GAAOz7mB,KAAK07mB,eAAe17mB,KAAK6sY,UAAU+oK,YAAY3ye,EAAKjmE,OAAS0J,KAAM,WAAYg7D,SAAUuB,EAAKv+D,MAAMsggB,qBAEvF7pgB,IAAf8nE,EAAKv+D,YAA2CvJ,IAApB8nE,EAAKv+D,MAAM+yB,MAAsBz3B,KAAKi7mB,aAAaU,IAAI14iB,EAAKv+D,MAAM+yB,MAEnGgklB,GAAOz7mB,KAAK07mB,eAAe17mB,KAAK6sY,UAAU+oK,YAAY3ye,EAAKjmE,OAAS0J,KAAM,WAAYg7D,SAAU1hE,KAAKi7mB,aAAavzmB,IAAIu7D,EAAKv+D,MAAM+yB,SAGjIgklB,GAAOx4iB,EAAKjmE,MAGa,kBAAhBimE,EAAU,MACvBw4iB,GAAOx4iB,EAAKjmE,MAAQ,OAAS,QAEA,iBAAhBimE,EAAU,WACJ9nE,IAAf8nE,EAAKv+D,YAAmDvJ,IAA5B8nE,EAAKv+D,MAAMsggB,aAEvCy2G,GAAOz7mB,KAAK07mB,eAAe17mB,KAAK6sY,UAAU+oK,YAAY3ye,EAAKjmE,OAASg/B,OAAQinC,EAAKv+D,MAAMsggB,qBAEnE7pgB,IAAf8nE,EAAKv+D,YAA2CvJ,IAApB8nE,EAAKv+D,MAAM+yB,MAAsBz3B,KAAKi7mB,aAAaU,IAAI14iB,EAAKv+D,MAAM+yB,MAEnGgklB,GAAOz7mB,KAAK07mB,eAAe17mB,KAAK6sY,UAAU+oK,YAAY3ye,EAAKjmE,OAASg/B,OAAQh8B,KAAKi7mB,aAAavzmB,IAAIu7D,EAAKv+D,MAAM+yB,SAG7GgklB,GAAOx4iB,EAAKjmE,MAIhBy+mB,GAAOz7mB,KAAK07mB,eAAez4iB,EAAKjmE,QAGxCgD,KAAKg7mB,OAASS,GAElBV,EAAU1/mB,UAAUqgnB,eAAiB,SAAU1+mB,GAC3C,OAA4B,IAAxBA,EAAMuB,QAAQ,KACPvB,EAAQ,IAAOA,EAAQ,IAGvBA,GAQf+9mB,EAAU1/mB,UAAUoyF,KAAO,SAAUsjI,GAEjC,GADA/wN,KAAKgxN,OAAS,IAAIG,MAAM,SAAWnxN,KAAKg7mB,SAAWt0mB,KAAM,2BACrD1G,KAAKoxN,mBACLjoI,UAAUkoI,WAAWrxN,KAAKgxN,OAAQD,OAEjC,CACD,IAAIW,EAAY71N,OAAO81N,IAAIC,gBAAgB5xN,KAAKgxN,QAC5C4qZ,EAAUp7mB,SAAS4C,gBAAgB,+BAAgC,KACvEw4mB,EAAQnqZ,SAAWV,EACnB6qZ,EAAQltlB,KAAOgjM,EACf,IAAIl+M,EAAUhT,SAASiT,YAAY,cACnCD,EAAQE,UAAU,SAAS,GAAM,GACjCkomB,EAAQjomB,cAAcH,GACtBrT,WAAW,WACPtE,OAAO81N,IAAIE,gBAAgBH,OAIvCqpZ,EAAU1/mB,UAAUgoO,WAAa,WAC7B,OAAO,IAAIlS,MAAM,SAAWnxN,KAAKg7mB,SAAWt0mB,KAAM,4BAE/Cq0mB,KC1IPc,GAA4B,WAC5B,SAASA,IAEL77mB,KAAK+7F,SAUT,OAPA8/gB,EAAWxgnB,UAAU+J,OAAS,SAAU6/C,GACpCjlD,KAAK+7F,MAAMv3F,KAAKygD,GAChBjlD,KAAKmhJ,UAAOhmJ,GAEhB0gnB,EAAWxgnB,UAAUygnB,QAAU,WAC3B,OAAO,IAAI3qZ,KAAKnxN,KAAK+7F,OAASr1F,KAAM,gBAEjCm1mB,KCHPE,GAA0B,WAE1B,SAASA,EAASr4iB,EAAMs4iB,EAAUjzhB,EAASkzhB,GA4BvC,GA3BAj8mB,KAAKk8mB,kBAAoB,EACzBl8mB,KAAKm8mB,kBACD,KACA,IACA,GACA,GAAK,KACL,GAAK,KACL,EACA,GAAK,GACL,GAAK,GAAO,OAGhBn8mB,KAAKo8mB,gBAAmB9xH,UAAW,UAAWp1O,WAAW,GAErDl1Q,KAAK+oF,aADO5tF,IAAZ4tF,EACeA,EAGA,QAGf/oF,KAAK42F,cADcz7F,IAAnB8gnB,EACgBA,EAGA,MAEpBj8mB,KAAKivE,KAAO,IAAIy7B,GAAqB1qG,KAAK+oF,SAC1C/oF,KAAKq8mB,UAAYL,EACA,SAAbA,EAAqB,CAiBrB,GAhBAh8mB,KAAK28kB,SAAW,IAAI35W,GACpBhjO,KAAKs8mB,gBACLt8mB,KAAKu8mB,UACLv8mB,KAAKw8mB,YACLx8mB,KAAKo+kB,WACLp+kB,KAAKy8mB,YAAc,IAAIvB,IACvBl7mB,KAAK08mB,WAAa,IAAIxB,IACtBl7mB,KAAK28mB,QAAU,IAAIzB,IACnBl7mB,KAAK48mB,OAAS,IAAI1B,IAClBl7mB,KAAKo+kB,QAAQ55kB,KAAK,IAAIy0mB,IACtBj5mB,KAAKu8mB,OAAO/3mB,KAAK,IAAIm4T,IAErB38T,KAAK08mB,WAAWr1mB,IAAI,SAAU,IAAIoymB,IAElCz5mB,KAAK68mB,YACL78mB,KAAK88mB,iBACe,OAAhBp5iB,EAAKngE,aAAmCpI,IAAhBuoE,EAAKngE,OAAsB,CAEnDvD,KAAKi7mB,aAAe,IAAIC,IACxB,IAAK,IAAI/+mB,EAAI,EAAGA,EAAIunE,EAAKngE,OAAO9G,OAAQN,IACpC,QAA4BhB,IAAxBuoE,EAAKngE,OAAOpH,GAAGs7B,KAAoB,CACnC,GAAKz3B,KAAK08mB,WAAWf,IAAIj4iB,EAAKngE,OAAOpH,GAAGs7B,MAwBpC,MAAM72B,MAAM,cAAgB8iE,EAAKngE,OAAOpH,GAAGs7B,KAAO,uBAvBlD,IAAI0+P,EAAY,IAAI8iV,GACpB9iV,EAAUmjV,eAAgB,EAC1Bt5mB,KAAK+8mB,gBAAgBr5iB,EAAKngE,OAAOpH,GAAIg6R,EAAW,QAChD,IAAI6mV,EAAe,IAAIvD,GACvBuD,EAAavllB,KAAO0+P,EAAU1+P,KAC9BullB,EAAatD,KAAQvjV,EAAUlkR,MAAQ,EACvCjS,KAAK08mB,WAAWr1mB,IAAI21mB,EAAavllB,KAAMullB,GAEvC,IAAIC,UACgC9hnB,IAAhCuoE,EAAKngE,OAAOpH,GAAG6ogB,eACfi4G,EAAQjhlB,OAAS0nC,EAAKngE,OAAOpH,GAAG6ogB,mBAER7pgB,IAAxBuoE,EAAKngE,OAAOpH,GAAGuK,KACfu2mB,EAAQv2mB,KAAOg9D,EAAKngE,OAAOpH,GAAGuK,KAG9Bu2mB,EAAQv2mB,KAAO,gBAEIvL,IAAnB8hnB,EAAQjhlB,QACRh8B,KAAKi7mB,aAAa5zmB,IAAIq8D,EAAKngE,OAAOpH,GAAGs7B,KAAMwllB,IAU/D,GAAwB,OAApBv5iB,EAAKy3iB,iBAA2ChgnB,IAApBuoE,EAAKy3iB,WAIjC,MAAMv6mB,MAAM,0BAHZZ,KAAKk9mB,iBAAiBx5iB,EAAKy3iB,YAMA,OAA3Bz3iB,EAAKy5iB,wBAAyDhinB,IAA3BuoE,EAAKy5iB,oBACxCn9mB,KAAKm9mB,kBAAoB,IAAIC,GAC7Bp9mB,KAAKq9mB,wBAAwB35iB,EAAKy5iB,kBAAmBn9mB,KAAKm9mB,yBAI9Dn9mB,KAAKs9mB,UAAY,IAAIvC,GAAUr3iB,GA03CvC,OAt3CAq4iB,EAAS1gnB,UAAUginB,wBAA0B,SAAUE,EAAuBJ,GAErC,OAAjCI,EAAsBC,aAAoDrinB,IAAjCoinB,EAAsBC,SAC/DL,EAAkBK,OAASD,EAAsBC,QAGd,OAAnCD,EAAsBE,eAAwDtinB,IAAnCoinB,EAAsBE,WACjEN,EAAkBM,SAAWF,EAAsBE,UAGhB,OAAnCF,EAAsBnjb,eAAwDj/L,IAAnCoinB,EAAsBnjb,WACjE+ib,EAAkB/ib,SAAWmjb,EAAsBnjb,UAGjB,OAAlCmjb,EAAsBG,cAAsDvinB,IAAlCoinB,EAAsBG,UAChEP,EAAkBO,QAAUH,EAAsBG,SAGhB,OAAlCH,EAAsBI,cAAsDxinB,IAAlCoinB,EAAsBI,UAChER,EAAkBQ,QAAUJ,EAAsBI,SAGhB,OAAlCJ,EAAsBK,cAAsDzinB,IAAlCoinB,EAAsBK,UAChET,EAAkBS,QAAUL,EAAsBK,SAGlB,OAAhCL,EAAsBr9kB,YAAkD/kC,IAAhCoinB,EAAsBr9kB,QAC9Di9kB,EAAkBj9kB,MAAQq9kB,EAAsBr9kB,OAGV,OAAtCq9kB,EAAsBM,kBAA8D1inB,IAAtCoinB,EAAsBM,cACpEV,EAAkBU,YAAcN,EAAsBM,aAGf,OAAvCN,EAAsB/jiB,mBAAgEr+E,IAAvCoinB,EAAsB/jiB,eACrE2jiB,EAAkB3jiB,aAAe+jiB,EAAsB/jiB,cAGxB,OAA/B+jiB,EAAsBO,WAAgD3inB,IAA/BoinB,EAAsBO,OAC7DX,EAAkBW,KAAOP,EAAsBO,MAGd,OAAjCP,EAAsB/4hB,aAAoDrpF,IAAjCoinB,EAAsB/4hB,SAC/D24hB,EAAkB34hB,OAAS+4hB,EAAsB/4hB,SAIzDu3hB,EAAS1gnB,UAAU6hnB,iBAAmB,SAAUx5iB,GAC5C1jE,KAAKm7mB,WAAa,IAAIjB,GAEtB,IAAK,IADDz9mB,EAASinE,EAAKjnE,OACTN,EAAI,EAAGA,EAAIM,EAAQN,IAAK,CAC7B,IAAI4hnB,EAAYr6iB,EAAKvnE,GACjB6hnB,EAAQ,IAAI7D,GAChBn6mB,KAAKmjgB,WAAa,IAAIq3G,GACtBx6mB,KAAKi+mB,iBAAmB,IAAI/C,IAC5Bl7mB,KAAKk+mB,eAEkB,OAAnBH,EAAUtmlB,WAAoCt8B,IAAnB4inB,EAAUtmlB,KACrCumlB,EAAMvmlB,KAAOsmlB,EAAUtmlB,KAGvBumlB,EAAMvmlB,KAAO,SAAWt7B,EAAI,GAAG+Q,WAEnC8wmB,EAAM/rmB,MAAS9V,EAAI,EAEO,OAAtB4hnB,EAAUhgjB,cAA0C5iE,IAAtB4inB,EAAUhgjB,SACxC/9D,KAAKm+mB,cAAcJ,EAAUhgjB,QAASigjB,GAGnB,OAAnBD,EAAUxlV,WAAoCp9R,IAAnB4inB,EAAUxlV,MACrCv4R,KAAKo+mB,WAAWL,EAAUxlV,KAAMylV,GAGX,OAArBD,EAAUM,aAAwCljnB,IAArB4inB,EAAUM,QACvCr+mB,KAAKs+mB,kBAAkBP,EAAUM,OAAQL,GAGhB,OAAzBD,EAAUQ,iBAAgDpjnB,IAAzB4inB,EAAUQ,YAC3Cv+mB,KAAKw+mB,iBAAiBT,EAAUQ,WAAYP,QAEpB7inB,IAAxB4inB,EAAU9+B,gBACoC9jlB,IAA1C4inB,EAAU9+B,UAAUm7B,oBACpB4D,EAAM5D,kBAAoB2D,EAAU9+B,UAAUm7B,mBAGtD4D,EAAM/rmB,MAAS9V,EAAI,EACnB6hnB,EAAM76G,WAAanjgB,KAAKmjgB,WACxB66G,EAAMS,WAAaz+mB,KAAKk+mB,YACxBl+mB,KAAKm7mB,WAAW32mB,KAAKw5mB,KAI7BjC,EAAS1gnB,UAAUqjnB,aAAe,SAAUttd,EAAUI,GAElD,IAAIzyJ,KAGJ,OAFAiB,KAAKmmjB,gBAAgB/0Z,EAAUryJ,GAC/BiB,KAAKmmjB,gBAAgB30Z,EAAQzyJ,GACtBA,GAGXg9mB,EAAS1gnB,UAAU8qjB,gBAAkB,SAAUw4D,EAAYC,GAEvD,IAAK,IADDthnB,EAAOgB,OAAOhB,KAAKqhnB,GACd1smB,EAAQ,EAAGA,EAAQ3U,EAAKb,OAAQwV,IACjB,SAAhB3U,EAAK2U,KACL2smB,EAASthnB,EAAK2U,IAAU0smB,EAAWrhnB,EAAK2U,MAIpD8pmB,EAAS1gnB,UAAUwjnB,YAAc,SAAUn+iB,EAAK7D,GAC5C,OAAO78D,KAAK8+mB,cAAcjijB,GAAU6D,EAAIxzD,YAE5C6umB,EAAS1gnB,UAAUyjnB,cAAgB,SAAUr+iB,GACzCA,IACA,IAAIs+iB,EAAgB,GACpB,EAAG,CACC,IAAIC,EAAgBv+iB,EAAM,GAC1BA,EAAMA,EAAM,GAAK,EACjBs+iB,EAAgB71lB,OAAOC,aAAa,GAAK61lB,GAAiBD,QACrDt+iB,GAAO,GAChB,OAAOs+iB,GAGXhD,EAAS1gnB,UAAUmjnB,iBAAmB,SAAU96iB,EAAMs6iB,GAClD,IACIiB,EADAC,EAAiB,GAErB,GAAqB,OAAjBx7iB,EAAKy7iB,cAAqChknB,IAAjBuoE,EAAKy7iB,QAAuB,CASrDF,EAAe,IARDv7iB,EAAKy7iB,QAQY,MANZ,OAAfz7iB,EAAK07iB,YAAiCjknB,IAAfuoE,EAAK07iB,MACpB17iB,EAAK07iB,MAGL17iB,EAAKy7iB,SAIrB,IAAIE,EACJ,GAAwB,OAApB37iB,EAAK47iB,iBAA2CnknB,IAApBuoE,EAAK47iB,WAA0B,CAC3D,IAAIA,EAAa57iB,EAAK47iB,WAClBC,OAAW,EAEXA,EADkB,OAAlB77iB,EAAK67iB,eAAuCpknB,IAAlBuoE,EAAK67iB,SACpB77iB,EAAK67iB,SAGL77iB,EAAK47iB,WAEpBD,EAAe,IAAMr/mB,KAAK8+mB,cAAcQ,GAAc,KAAOt/mB,KAAK8+mB,cAAcS,QAE/DpknB,IAAjB8jnB,IACAC,GAAmBlB,EAAMvmlB,KAAO,IAAMwnlB,QAErB9jnB,IAAjBkknB,QAA+ClknB,IAAjB8jnB,EAC9BC,GAAkB,IAAOlB,EAAMvmlB,KAAO,IAAM4nlB,OAEtBlknB,IAAjBkknB,IACLH,GAAmBlB,EAAMvmlB,KAAO,IAAM4nlB,GAEnB,KAAnBH,GACAl/mB,KAAKy8mB,YAAYp1mB,IAAI22mB,EAAM/rmB,MAAQ,EAAGitmB,IAI9CnD,EAAS1gnB,UAAUijnB,kBAAoB,SAAU56iB,EAAMs6iB,GACnDA,EAAMwB,YAAc,IAAIlF,GACP,OAAb52iB,EAAKhD,UAA6BvlE,IAAbuoE,EAAKhD,IAC1Bs9iB,EAAMwB,YAAY9+iB,IAAMgD,EAAKhD,IAG7Bs9iB,EAAMwB,YAAY9+iB,IAAM,EAER,OAAhBgD,EAAK7G,aAAmC1hE,IAAhBuoE,EAAK7G,OAC7BmhjB,EAAMwB,YAAY3ijB,OAAS6G,EAAK7G,OAGhCmhjB,EAAMwB,YAAY3ijB,OAAS,EAE/BmhjB,EAAMwB,YAAYv/J,SAAWjgd,KAAK6+mB,YAAYb,EAAMwB,YAAY9+iB,IAAM,EAAGs9iB,EAAMwB,YAAY3ijB,OAAS,IAGxGk/iB,EAAS1gnB,UAAU8inB,cAAgB,SAAUz6iB,EAAMs6iB,GAC/C,IAAIyB,EAAgB/7iB,EAAKjnE,OACzBuhnB,EAAMjgjB,WACN,IAAK,IAAIlB,EAAS,EAAGA,EAAS4ijB,EAAe5ijB,IAAU,CACnD,IAAI4D,EAAM,IAAIvC,GACd,GAA2B,OAAvBwF,EAAK7G,GAAQ5qD,YAAyC9W,IAAvBuoE,EAAK7G,GAAQ5qD,MAI5C,MAAMrR,MAAM,4BAHZ6/D,EAAIxuD,MAAQyxD,EAAK7G,GAAQ5qD,MAKF,OAAvByxD,EAAK7G,GAAQ7mD,YAAyC7a,IAAvBuoE,EAAK7G,GAAQ7mD,QAC5CyqD,EAAIzqD,MAAQ0tD,EAAK7G,GAAQ7mD,OAE7BgomB,EAAMjgjB,QAAQv5D,KAAKi8D,KAI3Bs7iB,EAAS1gnB,UAAU+inB,WAAa,SAAU16iB,EAAMs6iB,GAC5C,IAAI0B,EAAah8iB,EAAKjnE,OACtBuhnB,EAAMzlV,KAAO,IAAI0hV,GAEjB,IAAK,IADD0F,EAAQ,EACH/ilB,EAAI,EAAGA,EAAI8ilB,EAAY9ilB,IAAK,CACjC,IAAI8jC,EAAM1gE,KAAK4/mB,UAAUl8iB,EAAK9mC,GAAI+ilB,GAClCA,EAAQj/iB,EAAIzuD,MACZ+rmB,EAAMzlV,KAAKn0R,IAAIs8D,GAEnB1gE,KAAK6/mB,uBAAuB7B,IAEhCjC,EAAS1gnB,UAAUwknB,uBAAyB,SAAU7B,GAClD,IAAIj+mB,EAAQC,KACRA,KAAKmjgB,WAAW1mgB,OAAS,GACzBuD,KAAKi+mB,iBAAiB7+mB,QAAQ,SAAUpC,EAAOK,GAC3C,IAAIqjE,EAAMs9iB,EAAMzlV,KAAKvxP,OAAO,SAAUnpB,GAClC,OAAOA,EAAK5L,QAAUjV,EAAMgQ,IAC7B,GACH,GAAKvP,EAAkBijE,GAkBlB,CACD,IAAI63N,EAAOylV,EAAMzlV,KAAKvxP,OAAO,SAAUnpB,GACnC,OAAOA,EAAK5L,OAASjV,EAAMgQ,IAE3B8ymB,EAAc,IAAIt/S,GACtBs/S,EAAY7tmB,MAAQjV,EAAMgQ,EAC1B8ymB,EAAYh+iB,MAAQ,IAAIi4iB,GACxB+F,EAAYh+iB,MAAM19D,IAAIrE,EAAMyplB,WAAWxslB,EAAOK,IAC1CuwgB,EAAc,EACdr1O,EAAK97R,OAAS,IACdmxgB,EAAcowG,EAAMzlV,KAAKh6R,QAAQg6R,EAAKA,EAAK97R,OAAS,IAAM,GAE9DuhnB,EAAMzlV,KAAKlwQ,OAAOulf,EAAa,EAAGkyG,OA9BT,CACzB,IAAI78iB,EAAOvC,EAAIoB,MAAM96B,OAAO,SAAUnpB,GAClC,OAAOA,EAAK5L,QAAUjV,EAAM+P,IAC7B,GACH,GAAKtP,EAAkBwlE,GAGlB,CACD,IAAInB,EAAQpB,EAAIoB,MAAM96B,OAAO,SAAUnpB,GACnC,OAAOA,EAAK5L,OAASjV,EAAM+P,IAE3B6ggB,EAAc,EACd9rc,EAAMrlE,OAAS,IACfmxgB,EAAcltc,EAAIoB,MAAMvjE,QAAQujE,EAAMA,EAAMrlE,OAAS,IAAM,GAE/DikE,EAAIoB,MAAMz5C,OAAOulf,EAAa,EAAG7tgB,EAAMyplB,WAAWxslB,EAAOK,SAVzD4lE,EAAK88iB,WAAa/inB,EAAM+inB,eA8B5ChE,EAAS1gnB,UAAUmulB,WAAa,SAAUxslB,EAAOK,GAC7C,IAAI2inB,EAAe,IAAIvzI,GAKvB,OAJAuzI,EAAaC,QAAU5inB,EACvB2inB,EAAa/tmB,MAAQjV,EAAM+P,EAC3BizmB,EAAa7pV,UAAY,IAAI8iV,GAC7B+G,EAAaD,WAAa/inB,EAAM+inB,WACzBC,GAGXjE,EAAS1gnB,UAAUuknB,UAAY,SAAUl8iB,EAAM+8N,GAC3C,IAAI//N,EAAM,IAAI8/P,GAMd,GAJoB,OAAhB98P,EAAK3tD,aAAmC5a,IAAhBuoE,EAAK3tD,SAC7B2qD,EAAI3qD,OAAS2tD,EAAK3tD,QAGH,OAAf2tD,EAAKzxD,YAAiC9W,IAAfuoE,EAAKzxD,MAI5B,MAAMrR,MAAM,yBAMhB,OATI8/D,EAAIzuD,MAAQyxD,EAAKzxD,MAKC,OAAlByxD,EAAKsuX,eAAuC72b,IAAlBuoE,EAAKsuX,UAC/Bhyb,KAAKkgnB,cAAcx8iB,EAAKsuX,SAAUtxX,GAEtC1gE,KAAKmgnB,WAAWz8iB,EAAK5B,MAAOpB,GACrBA,GAGXq7iB,EAAS1gnB,UAAU6knB,cAAgB,SAAUx8iB,EAAMhD,GAC/CA,EAAIsxX,SAAW,IAAI9T,QACO/ib,IAAtBuoE,EAAK4lb,eACL5ob,EAAIsxX,SAASs3D,aAAe5lb,EAAK4lb,mBAEZnuf,IAArBuoE,EAAK08iB,cACL1/iB,EAAIsxX,SAASouL,YAAc18iB,EAAK08iB,kBAEdjlnB,IAAlBuoE,EAAKyqD,WACLztD,EAAIsxX,SAAS7jU,SAAWzqD,EAAKyqD,WAIrC4tf,EAAS1gnB,UAAU8knB,WAAa,SAAUz8iB,EAAMhD,GAC5CA,EAAIoB,MAAQ,IAAIi4iB,GAIhB,IACK,IAJDsG,OAAuBllnB,IAATuoE,EAAqBA,EAAKjnE,OAAS,EACjD6jnB,EAAU,EACVC,EAAU,EAELC,EAAS,EAAGA,EAASH,EAAaG,IAAU,CAEjD,IAAIC,EAAW/8iB,EAAK88iB,GAChBv9iB,EAAO,IAAIwpa,GAEf,GAAuB,OAAnBg0I,EAASxumB,YAAqC9W,IAAnBslnB,EAASxumB,MAIpC,MAAMrR,MAAM,0BAyBhB,GA5BIqiE,EAAKhxD,MAAQwumB,EAASxumB,MAKtBgxD,EAAKhxD,MAAQqumB,EACbA,EAAUr9iB,EAAKhxD,MAEVgxD,EAAKhxD,MAAQsumB,IAClBA,EAAUt9iB,EAAKhxD,OAGnBgxD,EAAKg9iB,QAAUjgnB,KAAK6+mB,YAAYn+iB,EAAIzuD,MAAOgxD,EAAKhxD,OAEvB,OAArBwumB,EAASxpV,cAAyC97R,IAArBslnB,EAASxpV,QACtCh0N,EAAKg0N,QAAUwpV,EAASxpV,QAAU,EAGlCh0N,EAAKg0N,QAAU,EAGM,OAArBwpV,EAAS/qV,cAAyCv6R,IAArBslnB,EAAS/qV,QACtCzyN,EAAKyyN,QAAU+qV,EAAS/qV,QAAU,EAGlCzyN,EAAKyyN,QAAU,EAGQ,OAAvB+qV,EAASvtjB,gBAA6C/3D,IAAvBslnB,EAASvtjB,UAAyB,CACjE,IAAIwtjB,EAAY,IAAIrG,QACcl/mB,IAA9BslnB,EAASvtjB,UAAU/rD,SACnBu5mB,EAAUv5mB,OAASs5mB,EAASvtjB,UAAU/rD,YACChM,IAAnCslnB,EAASvtjB,UAAU0if,YACnB3ye,EAAKjmE,MAAQyjnB,EAASvtjB,UAAU0if,YAGhC3ye,EAAKjmE,MAAQyjnB,EAASvtjB,UAAU/rD,OAEpC87D,EAAKv8D,KAAO1G,KAAK2gnB,iBAAiB19iB,EAAKjmE,OACvC0jnB,EAAU7F,IAAM53iB,EAAKg9iB,QACrBS,EAAUE,IAAO5gnB,KAAKk+mB,YAAYzhnB,OAAS,EAC3CuD,KAAKk+mB,YAAY15mB,KAAKk8mB,GACtBz9iB,EAAKkzN,UAAY,IAAI8iV,GAErBj5mB,KAAK+8mB,qBAAoC5hnB,IAAnBslnB,EAAS/7mB,MAAsB1E,KAAK0+mB,aAAa+B,EAAS/7mB,MAAO1E,KAAKo8mB,gBAAkBp8mB,KAAKo8mB,eAAiBn5iB,EAAKkzN,UAAW,UACpJlzN,EAAK88iB,WAAa98iB,EAAKkzN,UAAUlkR,OAIlB,OAAnBwumB,EAASzjnB,YAAqC7B,IAAnBslnB,EAASzjnB,QACpCimE,EAAKjmE,MAAQyjnB,EAASzjnB,MACtBimE,EAAKv8D,KAAO1G,KAAK2gnB,iBAAiB19iB,EAAKjmE,QAEpB,OAAnByjnB,EAAS/7mB,YAAqCvJ,IAAnBslnB,EAAS/7mB,YAA2CvJ,IAApB8nE,EAAK88iB,YAChE98iB,EAAKkzN,UAAY,IAAI8iV,GACjBh2iB,EAAKjmE,iBAAiBgjB,KACtBhgB,KAAK+8mB,gBAAgB0D,EAAS/7mB,MAAOu+D,EAAKkzN,UAAWlzN,EAAKv8D,KAAM,IAGhE1G,KAAK+8mB,gBAAgB0D,EAAS/7mB,MAAOu+D,EAAKkzN,UAAWlzN,EAAKv8D,MAE9Du8D,EAAK88iB,WAAa98iB,EAAKkzN,UAAUlkR,OAE5BgxD,EAAKjmE,iBAAiBgjB,OAC3BijD,EAAKkzN,UAAY,IAAI8iV,GACrBj5mB,KAAK+8mB,mBAAoB95iB,EAAKkzN,UAAWlzN,EAAKv8D,KAAM,IACpDu8D,EAAK88iB,WAAa98iB,EAAKkzN,UAAUlkR,OAErCjS,KAAK6gnB,cAAc59iB,GACnBjjE,KAAKmjgB,WAAanjgB,KAAK8gnB,kBAAkB79iB,EAAMvC,EAAIzuD,MAAOjS,KAAKmjgB,YAC/Dzic,EAAIoB,MAAM19D,IAAI6+D,GAGlBvC,EAAIi6e,MAAQ,EAAY,OAE5BohE,EAAS1gnB,UAAU0lnB,iBAAmB,SAAUr9iB,EAAMyyN,GAE9Cn2R,KAAK08mB,WAAWf,IAAIj4iB,EAAKjsC,QACzB0+P,EAAUlkR,MAAQjS,KAAKo+kB,QAAQp3iB,OAAO,SAAUmc,GAAK,OAAQA,EAAE1rB,OAASisC,EAAKjsC,OAAU,GAAGxlB,MAC1FkkR,EAAU1+P,KAAOisC,EAAKjsC,OAI9BsklB,EAAS1gnB,UAAU0hnB,gBAAkB,SAAUr5iB,EAAMyyN,EAAW6qV,EAAUC,GAEtE,GAAkB,OAAdv9iB,EAAKjsC,WAA+Bt8B,IAAduoE,EAAKjsC,KAAoB,CAC/C,IAAI0+P,EAAUmjV,cAKV,YADAt5mB,KAAK+gnB,iBAAiBr9iB,EAAMyyN,GAH5BA,EAAU1+P,KAAOisC,EAAKjsC,KAQP,OAAnBisC,EAAKy1iB,gBAAyCh+mB,IAAnBuoE,EAAKy1iB,YAChChjV,EAAUgjV,UAAYz1iB,EAAKy1iB,WAI/BhjV,EAAUlB,QAAU,IAAI64M,GAEH,OAAjBpqa,EAAKuxN,cAAqC95R,IAAjBuoE,EAAKuxN,SAC9Bj1R,KAAKkhnB,aAAax9iB,EAAKuxN,QAASkB,EAAUlB,QAAQrgG,KAG9B,OAApBlxH,EAAKo2b,iBAA2C3+f,IAApBuoE,EAAKo2b,YACjC95f,KAAKkhnB,aAAax9iB,EAAKo2b,WAAY3jO,EAAUlB,QAAQzoR,MAGhC,OAArBk3D,EAAKq4b,kBAA6C5ggB,IAArBuoE,EAAKq4b,aAClC/7f,KAAKkhnB,aAAax9iB,EAAKq4b,YAAa5lO,EAAUlB,QAAQxoR,OAGnC,OAAnBi3D,EAAK24b,gBAAyClhgB,IAAnBuoE,EAAK24b,WAChCr8f,KAAKkhnB,aAAax9iB,EAAK24b,UAAWlmO,EAAUlB,QAAQvoR,KAG9B,OAAtBg3D,EAAKm5b,mBAA+C1hgB,IAAtBuoE,EAAKm5b,cACnC78f,KAAKkhnB,aAAax9iB,EAAKm5b,aAAc1mO,EAAUlB,QAAQtoR,QAGrC,OAAlB+2D,EAAK0pK,eAAuCjyO,IAAlBuoE,EAAK0pK,WAC/B+oD,EAAU/oD,SAAW1pK,EAAK0pK,UAGR,OAAlB1pK,EAAK72C,eAAuC1xB,IAAlBuoE,EAAK72C,WAC/BspQ,EAAUtpQ,SAAW62C,EAAK72C,UAGP,OAAnB62C,EAAK4mb,gBAAyCnvf,IAAnBuoE,EAAK4mb,YAChCn0N,EAAUm0N,UAAY5mb,EAAK4mb,WAGX,OAAhB5mb,EAAKnyB,aAAmCp2C,IAAhBuoE,EAAKnyB,SAC7B4kP,EAAU5kP,OAASmyB,EAAKnyB,QAGV,OAAdmyB,EAAKh1B,WAA+BvzC,IAAduoE,EAAKh1B,OAC3BynP,EAAUznP,KAAOg1B,EAAKh1B,MAGN,OAAhBg1B,EAAKlU,aAAmCr0D,IAAhBuoE,EAAKlU,SAC7B2mO,EAAU3mO,OAASkU,EAAKlU,QAGR,OAAhBkU,EAAK21iB,aAAmCl+mB,IAAhBuoE,EAAK21iB,SAC7BljV,EAAUkjV,OAAS31iB,EAAK21iB,OACG,SAArBljV,EAAU3mO,QAA0C,UAArB2mO,EAAU3mO,SAC3C2mO,EAAU3mO,OAAS,SAIP,OAAhBkU,EAAKnU,aAAmCp0D,IAAhBuoE,EAAKnU,SAC7B4mO,EAAU5mO,OAASmU,EAAKnU,QAGL,OAAnBmU,EAAKwxM,gBAAyC/5Q,IAAnBuoE,EAAKwxM,YAChCihB,EAAUjhB,UAAYxxM,EAAKwxM,WAGT,OAAlBxxM,EAAK01iB,eAAuCj+mB,IAAlBuoE,EAAK01iB,WAC/BjjV,EAAUijV,SAAW11iB,EAAK01iB,UAGJ,OAAtB11iB,EAAKshc,mBAA+C7pgB,IAAtBuoE,EAAKshc,aACjB,OAAdthc,EAAKh9D,WAA+BvL,IAAduoE,EAAKh9D,KAC3ByvR,EAAU6uO,aAAehlgB,KAAKkvE,gBAAgBxL,EAAKshc,aAActhc,EAAKh9D,MAGtEyvR,EAAU6uO,aAAehlgB,KAAKkvE,gBAAgBxL,EAAKshc,aAAcg8G,QAG9C7lnB,IAAlB8lnB,GACL9qV,EAAU+iV,SAAW,GACrB/iV,EAAU6uO,aAAe,WAGzB7uO,EAAU6uO,aAAe,UAE7B7uO,EAAUlkR,MAAQjS,KAAKmhnB,iBAAiBhrV,IAE5C4lV,EAAS1gnB,UAAU+lnB,mBAAqB,SAAUp8G,EAAct+f,GAC5D,IAAIs1B,EAASh8B,KAAKkvE,gBAAgB81b,EAAct+f,GAChD,GAAIs1B,IAAWgpe,EAAc,CACzB,IAAIq8G,EAASrhnB,KAAK28mB,QAAQj1mB,IAAIs9f,GAC9B,QAAe7pgB,IAAXkmnB,IACAA,EAAOzH,WAAa59kB,EAChBh8B,KAAK28mB,QAAQhB,IAAI3/kB,IAAS,CAC1B,IAAK,IAAI59B,EAAK,EAAGyE,EAAK7C,KAAK88mB,cAAe1+mB,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC5D,IAAIkjnB,EAAez+mB,EAAGzE,GAClBkjnB,EAAapI,WAAamI,EAAOnI,WACjCoI,EAAapI,SAAWl5mB,KAAK28mB,QAAQj1mB,IAAIs0B,GAAQk9kB,UAGzD,IAAK,IAAIj1mB,EAAK,EAAGwG,EAAKzK,KAAK68mB,SAAU54mB,EAAKwG,EAAGhO,OAAQwH,IAAM,CACvD,IAAIs9mB,EAAU92mB,EAAGxG,GACbs9mB,EAAQrI,WAAamI,EAAOnI,WAC5BqI,EAAQrI,SAAWl5mB,KAAK28mB,QAAQj1mB,IAAIs0B,GAAQk9kB,cAOpE6C,EAAS1gnB,UAAU6zE,gBAAkB,SAAU81b,EAAct+f,GACzD,IAAI86mB,EACJ,OAAQ96mB,GACJ,IAAK,SACD,IACI86mB,EAAexhnB,KAAKivE,KAAKm8B,kBAAmBpvE,OAAQgpe,EAAcpua,SAAU52F,KAAK42F,WAErF,MAAOtS,GACHk9hB,EAAex8G,EAEnB,MACJ,IAAK,WACD,IACIw8G,EAAexhnB,KAAKivE,KAAKk8B,gBAAiBzpC,SAAUsjc,EAAct+f,KAAM,aAAc,GAE1F,MAAO49E,GACHk9hB,EAAex8G,EAEnB,MACJ,IAAK,OACD,IACIw8G,EAAexhnB,KAAKivE,KAAKk8B,gBAAiBzpC,SAAUsjc,EAAct+f,KAAM,SAAU,GAEtF,MAAO49E,GACHk9hB,EAAex8G,EAEnB,MACJ,IAAK,OACD,IACIw8G,EAAexhnB,KAAKivE,KAAKk8B,gBAAiBzpC,SAAUsjc,EAAct+f,KAAM,SAAU,GAEtF,MAAO49E,GACHk9hB,EAAex8G,EAEnB,MACJ,QACIw8G,EAAex8G,EAGvB,OAAOw8G,GAGXzF,EAAS1gnB,UAAU6lnB,aAAe,SAAUx9iB,EAAMp/B,GAC3B,OAAfo/B,EAAKltC,YAAiCr7B,IAAfuoE,EAAKltC,MAC5B8N,EAAO9N,MAAQktC,EAAKltC,MAGpB8N,EAAO9N,MAAQ,UAEI,OAAnBktC,EAAKq9P,gBAAyC5lU,IAAnBuoE,EAAKq9P,UAChCz8R,EAAOy8R,UAAYr9P,EAAKq9P,UAGxBz8R,EAAOy8R,UAAY,QAG3Bg7S,EAAS1gnB,UAAU8lnB,iBAAmB,SAAUz8mB,GAC5C,GAAIA,EAAM40mB,cAGN,OAFAt5mB,KAAKyhnB,mBAAmB/8mB,GACxB1E,KAAKo+kB,QAAQ55kB,KAAKE,GACX1E,KAAKo+kB,QAAQ3hlB,OAGpB,IAAIilnB,EAAgB1hnB,KAAK2hnB,aAAaj9mB,GACtC,OAAKg9mB,EAAc3inB,OAOR2inB,EAAczvmB,OANrBjS,KAAKyhnB,mBAAmB/8mB,GACxB1E,KAAKo+kB,QAAQ55kB,KAAKE,GACX1E,KAAKo+kB,QAAQ3hlB,SAQhCs/mB,EAAS1gnB,UAAUomnB,mBAAqB,SAAU/8mB,GAC9C,GAA2B,YAAvBA,EAAMsggB,eAA+BhlgB,KAAK28mB,QAAQhB,IAAIj3mB,EAAMsggB,cAAe,CAC3E,IAAI1hgB,EAAKtD,KAAK28mB,QAAQ7vlB,KAAO,IAC7B9sB,KAAK28mB,QAAQt1mB,IAAI3C,EAAMsggB,aAAc,IAAI20G,GAAOr2mB,EAAIoB,EAAMsggB,iBAGlE+2G,EAAS1gnB,UAAUumnB,UAAY,SAAUC,GAGrC,IAAK,IAFD9inB,GAAS,EACTkT,EAAQ,EACH7T,EAAK,EAAGyE,EAAK7C,KAAKu8mB,OAAQn+mB,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACrD,IAAIsuB,EAAO7pB,EAAGzE,GACd6T,IACA,IAAIq4e,OAAYnvf,EAUhB,QATiCA,IAA7B0mnB,EAAev3H,YACfA,EAAa,KAAOu3H,EAAev3H,UAAU/6e,QAAQ,IAAK,KAE9DxQ,EAAS2tB,EAAK8J,QAAU8zd,GACpB59d,EAAKoQ,IAAM+klB,EAAenzkB,MAC1BhiB,EAAKvwB,IAAM0lnB,EAAetwkB,QAC1B7kB,EAAKs8F,IAAM64f,EAAe3sW,WAC1BxoP,EAAK+K,OAASoqlB,EAAez0Y,UAC7B1gN,EAAK82jB,KAAOq+B,EAAeh1lB,SAE3B,MAIR,OADA5a,GAAgB,GACPA,MAAOA,EAAOlT,OAAQA,IAEnCg9mB,EAAS1gnB,UAAUymnB,YAAc,SAAUD,GACvC,IAAIE,EAAS,IAAI9I,GACjB,OAAIj5mB,KAAKginB,YAAYH,EAAe5sV,SACxB8sV,EAAO9sV,QAAQrgG,IAAIp+J,QAAUqrlB,EAAe5sV,QAAQrgG,IAAIp+J,OAC5DurlB,EAAO9sV,QAAQrgG,IAAImsI,YAAc8gT,EAAe5sV,QAAQrgG,IAAImsI,UAGxDghT,EAAO9sV,QAAQzoR,KAAKgqB,QAAUqrlB,EAAe5sV,QAAQzoR,KAAKgqB,OAC9DurlB,EAAO9sV,QAAQzoR,KAAKu0T,YAAc8gT,EAAe5sV,QAAQzoR,KAAKu0T,WAC9DghT,EAAO9sV,QAAQxoR,MAAM+pB,QAAUqrlB,EAAe5sV,QAAQxoR,MAAM+pB,OAC5DurlB,EAAO9sV,QAAQxoR,MAAMs0T,YAAc8gT,EAAe5sV,QAAQxoR,MAAMs0T,WAChEghT,EAAO9sV,QAAQvoR,IAAI8pB,QAAUqrlB,EAAe5sV,QAAQvoR,IAAI8pB,OACxDurlB,EAAO9sV,QAAQvoR,IAAIq0T,YAAc8gT,EAAe5sV,QAAQvoR,IAAIq0T,WAC5DghT,EAAO9sV,QAAQtoR,OAAO6pB,QAAUqrlB,EAAe5sV,QAAQtoR,OAAO6pB,OAC9DurlB,EAAO9sV,QAAQtoR,OAAOo0T,YAAc8gT,EAAe5sV,QAAQtoR,OAAOo0T,WAG9Eg7S,EAAS1gnB,UAAU2mnB,YAAc,SAAUC,GACvC,IAAIC,EAAiB,IAAIjJ,GACzB,OAAOiJ,EAAejtV,QAAQrgG,IAAIp+J,QAAUyrlB,EAAgBrtb,IAAIp+J,OAC5D0rlB,EAAejtV,QAAQrgG,IAAImsI,YAAckhT,EAAgBrtb,IAAImsI,WAErEg7S,EAAS1gnB,UAAUsmnB,aAAe,SAAUE,GAGxC,IACK,IAHD9inB,GAAS,EACTkT,EAAQ,EAEH7T,EAAK,EAAGyE,EAAK7C,KAAKo+kB,QAAShglB,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACtD,IAAIulf,EAAY9gf,EAAGzE,GAyBnB,GAxBAW,GAAS4kf,EAAU21H,gBAAyB31H,EAAUw1H,YAAc0I,EAAe1I,WAC/Ex1H,EAAUj1c,OAASmzkB,EAAenzkB,MAClCi1c,EAAUu1H,WAAa2I,EAAe3I,UACtCv1H,EAAUqhB,eAAiB68G,EAAe78G,cAC1CrhB,EAAUj9e,OAASm7mB,EAAen7mB,MAClCi9e,EAAU2G,YAAcu3H,EAAev3H,WACvC3G,EAAUv2Q,WAAay0Y,EAAez0Y,UACtCu2Q,EAAU92d,WAAag1lB,EAAeh1lB,UACtC82d,EAAUn0b,SAAWqyjB,EAAeryjB,QACpCm0b,EAAUpyc,SAAWswkB,EAAetwkB,QACpCoyc,EAAUzuO,YAAc2sW,EAAe3sW,WACvCyuO,EAAUp0b,SAAWsyjB,EAAetyjB,QACpCo0b,EAAU01H,SAAWwI,EAAexI,QACpC11H,EAAUy1H,WAAayI,EAAezI,UACrCz1H,EAAU1uN,QAAQrgG,IAAIp+J,QAAUqrlB,EAAe5sV,QAAQrgG,IAAIp+J,OACxDmtd,EAAU1uN,QAAQrgG,IAAImsI,YAAc8gT,EAAe5sV,QAAQrgG,IAAImsI,WAClE4iL,EAAU1uN,QAAQzoR,KAAKgqB,QAAUqrlB,EAAe5sV,QAAQzoR,KAAKgqB,OAC1Dmtd,EAAU1uN,QAAQzoR,KAAKu0T,YAAc8gT,EAAe5sV,QAAQzoR,KAAKu0T,WACjE4iL,EAAU1uN,QAAQxoR,MAAM+pB,QAAUqrlB,EAAe5sV,QAAQxoR,MAAM+pB,OAC/Dmtd,EAAU1uN,QAAQxoR,MAAMs0T,YAAc8gT,EAAe5sV,QAAQxoR,MAAMs0T,WACnE4iL,EAAU1uN,QAAQvoR,IAAI8pB,QAAUqrlB,EAAe5sV,QAAQvoR,IAAI8pB,OAC3Dmtd,EAAU1uN,QAAQvoR,IAAIq0T,YAAc8gT,EAAe5sV,QAAQvoR,IAAIq0T,WAC/D4iL,EAAU1uN,QAAQtoR,OAAO6pB,QAAUqrlB,EAAe5sV,QAAQtoR,OAAO6pB,OACjEmtd,EAAU1uN,QAAQtoR,OAAOo0T,YAAc8gT,EAAe5sV,QAAQtoR,OAAOo0T,WACjE,CACR9uT,EAAQ0xe,EAAU1xe,MAClB,OAGR,OAASA,MAAOA,EAAOlT,OAAQA,IAEnCg9mB,EAAS1gnB,UAAU8I,SAAW,SAAU8wD,EAAOp3C,GAC3C,IAAI5L,EAAQgjD,EAAM12D,QAAQsf,GAC1B,OAAO5L,GAAS,GAAKA,EAAQgjD,EAAMx4D,QAEvCs/mB,EAAS1gnB,UAAUslnB,iBAAmB,SAAU3jnB,GAC5C,OAAIA,aAAiBgjB,KACV,WAEiB,oBACjB,UAEiB,mBACjB,SAGA,UAGf+7lB,EAAS1gnB,UAAUwlnB,cAAgB,SAAU59iB,GACzC,IACI+4iB,EADAt1mB,EAAOu8D,EAAKv8D,KAEZ1J,EAAQimE,EAAKjmE,MACjB,OAAQ0J,GACJ,IAAK,WAED,GADA1J,EAAQgD,KAAKminB,SAASnlnB,QACC7B,IAAnB8nE,EAAKkzN,gBAAmDh7R,IAAxB8nE,EAAKkzN,UAAU1+P,MAC3Cz3B,KAAKi7mB,aAAaU,IAAI14iB,EAAKkzN,UAAU1+P,MAAO,CAC5C,IAAI7P,EAAU5nB,KAAKi7mB,aAAavzmB,IAAIu7D,EAAKkzN,UAAU1+P,MACnDz3B,KAAKohnB,mBAAmBx5lB,EAAQoU,OAAQpU,EAAQlhB,MAGxDs1mB,EAAW,IACX,MAEJ,IAAK,UACDh/mB,EAAQA,EAAQ,EAAI,EACpBg/mB,EAAW,IACX,MACJ,IAAK,SACDA,EAAW,SACY7gnB,IAAnB8nE,EAAKkzN,gBAAmDh7R,IAAxB8nE,EAAKkzN,UAAU1+P,MAC3Cz3B,KAAKi7mB,aAAaU,IAAI14iB,EAAKkzN,UAAU1+P,OACrCz3B,KAAKohnB,mBAAmBphnB,KAAKi7mB,aAAavzmB,IAAIu7D,EAAKkzN,UAAU1+P,MAAMuE,OAAQ,UAGnF,MACJ,IAAK,SACDh8B,KAAKk8mB,oBACLF,EAAW,IACNh8mB,KAAKmE,SAASnE,KAAKs8mB,aAAct/mB,IAClCgD,KAAKs8mB,aAAa93mB,KAAKxH,GAE3BA,EAAQgD,KAAKs8mB,aAAa/9mB,QAAQvB,GAK1CimE,EAAK+4iB,SAAWA,EAChB/4iB,EAAKjmE,MAAQA,GAEjB++mB,EAAS1gnB,UAAUgoO,WAAa,SAAU++Y,GACtC,IAAIrinB,EAAQC,KACZ,OAAQoinB,GACJ,IAAK,WACD,OAAO,IAAIx/hB,QAAQ,SAAUC,EAASC,GAClC,IAAI/lF,KACJA,EAAI6oP,SAAW7lP,EAAMu9mB,UAAUj6Y,aAC/BxgJ,EAAQ9lF,KAEhB,QACI,OAAO,IAAI6lF,QAAQ,SAAUC,EAASC,GAClC/iF,EAAMwxN,eACNxxN,EAAM48kB,SAASt5W,aAAa/vC,KAAK,SAAUnyC,GACvC,IAAIpkJ,KACJA,EAAI6oP,SAAW,IAAIz0B,MAAMhwE,IAASz6I,KAAM,sEACxCm8E,EAAQ9lF,SAK5Bg/mB,EAAS1gnB,UAAUoyF,KAAO,SAAUsjI,EAAUsxZ,GAC1C,IAAItinB,EAAQC,KACZ,GAAiB,OAAb+wN,QAAkC51N,IAAb41N,GAAuC,KAAbA,EAC/C,MAAM,IAAInwN,MAAM,6DAEpB,IAAI0hnB,EAAYvxZ,EAASphN,MAAM,UAC3B4ymB,EAAWxxZ,EAASphN,MAAM,SAC9B,GAAkB,OAAd2ymB,GAAsBA,EAAU,KAAQ,IAAMtinB,KAAKq8mB,UACnDr8mB,KAAKuxN,eACLvxN,KAAK28kB,SAASlvf,KAAKsjI,GAAUz9B,KAAK,WAC9BvzL,EAAM48kB,SAASrqkB,gBAGlB,CAAA,GAAiB,OAAbiwmB,GAAqBA,EAAS,KAAQ,IAAMvinB,KAAKq8mB,UAItD,MAAMz7mB,MAAM,8CAHZZ,KAAKs9mB,UAAU7vhB,KAAKsjI,KAM5BgrZ,EAAS1gnB,UAAUk2N,aAAe,WAC9BvxN,KAAKwinB,eACLxinB,KAAKyinB,iBACLzinB,KAAK0inB,mBACL1inB,KAAK2inB,aACL3inB,KAAK4inB,QAAQ5inB,KAAKm9mB,mBAClBn9mB,KAAK6inB,SAAS7inB,KAAKm9mB,mBACnBn9mB,KAAK8inB,kBACL9inB,KAAK+inB,uBACL/inB,KAAKgjnB,wBAETjH,EAAS1gnB,UAAUmnnB,aAAe,WAK9B,IAAK,IAHDS,EAAe,6TACfC,EAAS,WACTzmnB,EAASuD,KAAKm7mB,WAAW1+mB,OACpBN,EAAI,EAAGA,EAAIM,EAAQN,IAExB+mnB,GAAU,gBAAkBljnB,KAAKm7mB,WAAWh/mB,GAAGs7B,KAAO,eAAiBt7B,EAAI,GAAG+Q,WAAa,gBAAkB/Q,EAAI,GAAG+Q,WAAa,OAIrI,GAFAg2mB,GAAU,YACVD,GAAgBC,EACZljnB,KAAKy8mB,YAAY3vlB,KAAO,EAAG,CAC3B,IAAIq2lB,EAAe,iBACnBnjnB,KAAKy8mB,YAAYr9mB,QAAQ,SAAUpC,EAAOK,GACtC8lnB,GAAgB,wDAA0D9lnB,EAAM,KAAOL,EAAQ,mBAGnGimnB,GADAE,GAAgB,kBAGpBnjnB,KAAKojnB,aAAaH,EAAe,cAAe,oBAEpDlH,EAAS1gnB,UAAUonnB,eAAiB,WAEhC,IAAK,IADDhmnB,EAASuD,KAAKm7mB,WAAW1+mB,OACpBN,EAAI,EAAGA,EAAIM,EAAQN,IACxB6D,KAAKqjnB,cAAcrjnB,KAAKm7mB,WAAWh/mB,GAAIA,IAG/C4/mB,EAAS1gnB,UAAUgonB,cAAgB,SAAUrF,EAAO/rmB,GAChD,IAAIqxmB,EAAY,IAAIzH,GAEhB0H,EAAc,sWAUlB,GATKvF,EAAM5D,kBAIPmJ,iBAHAA,uEAKsBponB,IAAtB6inB,EAAMwB,cACN+D,GAAgBvjnB,KAAKwjnB,gBAAgBxF,SAEnB7inB,IAAlB6inB,EAAMjgjB,QAAuB,CAE7B,IAAK,IADD0ljB,EAAY,SACPrlnB,EAAK,EAAGyE,EAAKm7mB,EAAMjgjB,QAAS3/D,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvD,IAAIy+D,EAASh6D,EAAGzE,QAEKjD,IAAjB0hE,EAAO7mD,MACPytmB,GAAa,aAAgB5mjB,EAAY,MAAI,UAAaA,EAAY,MAAI,YAAc78D,KAAK0jnB,oBAAoB7mjB,EAAO7mD,OAAS,uBAGjIytmB,GAAa,aAAgB5mjB,EAAY,MAAI,UAAaA,EAAY,MAAI,oCAGlF0mjB,GAAgBE,EAAY,UAKhC,GAHAF,iBACAD,EAAUl+mB,OAAOm+mB,GACjBA,EAAc,QACKponB,IAAf6inB,EAAMzlV,KACN,IAAK,IAAIt0R,EAAK,EAAGwG,EAAKuzmB,EAAMzlV,KAAMt0R,EAAKwG,EAAGhO,OAAQwH,IAAM,CACpD,IAAIy8D,EAAMj2D,EAAGxG,GACT0/mB,EAAY,WAAcjjjB,EAAS,MAAI,KACtCjjE,EAAkBijE,EAAIi6e,SACvBgpE,GAAa,UAAYjjjB,EAAIi6e,MAAQ,WAEtBx/iB,IAAfulE,EAAI3qD,SACJ4tmB,GAAc,OAAS3jnB,KAAK4jnB,kBAAkBljjB,EAAI3qD,QAAU,4BAE3C5a,IAAjBulE,EAAIsxX,WACAtxX,EAAIsxX,SAAS7jU,WACbw1f,uBAE8BxonB,IAA9BulE,EAAIsxX,SAASs3D,eACbq6H,GAAc,iBAAmBjjjB,EAAIsxX,SAASs3D,aAAe,MAE7D5ob,EAAIsxX,SAASouL,cACbuD,sBAGRA,OACA,IAAK,IAAIpyS,EAAK,EAAGC,EAAK9wQ,EAAIoB,MAAOyvQ,EAAKC,EAAG/0U,OAAQ80U,IAAM,CACnD,IAAItuQ,EAAOuuQ,EAAGD,QACDp2U,IAAT8nE,QAAsC9nE,IAAf8nE,EAAKjmE,YAA0C7B,IAAnB8nE,EAAKkzN,YACxDwtV,GAAc,SAAW1gjB,EAAKg9iB,QAAU,UAClB9knB,IAAlB8nE,EAAK+4iB,WACL2H,GAAc,MAAQ1gjB,EAAK+4iB,SAAW,WAElB7gnB,IAApB8nE,EAAK88iB,aACL4D,GAAc,MAAQ1gjB,EAAK88iB,WAAa,MAE5C4D,aACmBxonB,IAAf8nE,EAAKjmE,MACL2mnB,GAAc,MAAQ1gjB,EAAKjmE,MAAQ,WAGnC2mnB,WAIZA,YACAL,EAAUl+mB,OAAOu+mB,GAIzB,GADAJ,kBACIvF,EAAM76G,WAAW1mgB,OAAS,EAAG,CAC7B8mnB,GAAgB,sBAAwBvF,EAAM76G,WAAW1mgB,OAAS,KAClE,IAAK,IAAIg1U,EAAK,EAAGC,EAAKssS,EAAM76G,WAAY1xL,EAAKC,EAAGj1U,OAAQg1U,IAAM,CAE1D8xS,GAAgB,mBADJ7xS,EAAGD,GAC4BopS,IAAM,OAErD0I,mBAEJ,GAAIvF,EAAMS,WAAWhinB,OAAS,EAAG,CAC7B8mnB,kBACA,IAAK,IAAIx9L,EAAK,EAAGC,EAAKg4L,EAAMS,WAAY14L,EAAKC,EAAGvpb,OAAQspb,IAAM,CAC1D,IAAI89L,EAAQ79L,EAAGD,GACfw9L,GAAgB,mBAAqBM,EAAMhJ,IAAM,cAAgBgJ,EAAMjD,IAAM,OAEjF2C,mBACAvjnB,KAAKojnB,aAAapjnB,KAAK8jnB,mBAAmB9F,GAAS,4BAA8BA,EAAM/rmB,MAAQ,aAGnGsxmB,qMACAD,EAAUl+mB,OAAOm+mB,GACjBvjnB,KAAKojnB,aAAaE,EAAUxH,UAAW,uBAA8B7pmB,EAAQ,GAAK,SAEtF8pmB,EAAS1gnB,UAAUqonB,oBAAsB,SAAUK,GAC/C,IACI97lB,EAAO87lB,EAASC,GAChBhknB,KAAKiknB,OAAOF,EAAS,GAFP,EAE0B,IAAM,IAAO,IACrDA,KACJ,OAAQ97lB,EAAM,GAJI,EAKZA,EAAoB,GALR,EAK2B,IAAS,OACjDA,EANa,EAM2B,IAAS,KAE1D8zlB,EAAS1gnB,UAAU4onB,MAAQ,SAAUl3mB,GACjC,IAAI49I,EAAI59I,EAAIA,EAAI,EAChB,OAAa,IAAN49I,IAAY59I,EAAI,GAAY,IAANA,GAAY,EAAIA,GAAM,EAAA,IAAY,EAAI49I,GAEvEoxd,EAAS1gnB,UAAUuonB,kBAAoB,SAAUG,GAC7C,OAAQA,EAAS/jnB,KAAKm8mB,iBAAiB,GAAKn8mB,KAAKm8mB,iBAAiB,IAEtEJ,EAAS1gnB,UAAUyonB,mBAAqB,SAAU9F,GAG9C,IAAK,IADDkG,EAAS,8IACJ9lnB,EAAK,EAAGyE,EAAKm7mB,EAAMS,WAAYrgnB,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC1D,IAAIylnB,EAAQhhnB,EAAGzE,GAEf8lnB,GAAU,wBAA0BL,EAAMjD,IAAM,kGAAoGiD,EAAM18mB,OAAS,6BAGvK,OADA+8mB,GAAU,oBAGdnI,EAAS1gnB,UAAUmonB,gBAAkB,SAAUxF,GAC3C,IAAImG,EAAa,gFACMnG,EAAMwB,YAAYv/J,SAAW,KAQpD,OAP8B,IAA1B+9J,EAAMwB,YAAY9+iB,MAClByjjB,GAAc,WAAanG,EAAMwB,YAAY9+iB,IAAM,MAEtB,IAA7Bs9iB,EAAMwB,YAAY3ijB,SAClBsnjB,GAAc,WAAanG,EAAMwB,YAAY3ijB,OAAS,MAE1DsnjB,GAAc,+BAGlBpI,EAAS1gnB,UAAUqnnB,iBAAmB,WAClC,IAAIjmnB,EAASuD,KAAKs8mB,aAAa7/mB,OAC/B,GAAIA,EAAS,EAAG,CAIZ,IAAK,IAFD2nnB,EAAW,2DAA6D3nnB,EAAS,YAAcuD,KAAKk8mB,kBAAoB,uEACxHmI,EAAK,GACAlonB,EAAI,EAAGA,EAAIM,EAAQN,IACxBkonB,GAAM,UACNA,GAAMrknB,KAAKsknB,cAActknB,KAAKs8mB,aAAangnB,IAC3CkonB,GAAM,YAEVA,GAAM,SACNrknB,KAAKojnB,aAAagB,EAAWC,EAAI,0BAGzCtI,EAAS1gnB,UAAUipnB,cAAgB,SAAUtnnB,GAUzC,OAT4B,IAAxBA,EAAMuB,QAAQ,OACdvB,EAAQA,EAAMuS,QAAQ,KAAM,WAEJ,IAAxBvS,EAAMuB,QAAQ,OACdvB,EAAQA,EAAMuS,QAAQ,KAAM,UAEJ,IAAxBvS,EAAMuB,QAAQ,OACdvB,EAAQA,EAAMuS,QAAQ,KAAM,SAEzBvS,GAEX++mB,EAAS1gnB,UAAUsnnB,WAAa,WAC5B3inB,KAAKuknB,wBAEL,IAAIC,EAAY,6RAChBA,GAAaxknB,KAAKyknB,oBAClBD,GAAaxknB,KAAK0knB,YAClBF,GAAaxknB,KAAK2knB,YAClBH,GAAaxknB,KAAK4knB,cAClBJ,GAAaxknB,KAAK6knB,mBAClBL,GAAaxknB,KAAK8knB,cAClBN,GAAaxknB,KAAK+knB,iBAClB/knB,KAAKojnB,aAAaoB,EAAY,gBAAiB,kBAEnDzI,EAAS1gnB,UAAUkpnB,sBAAwB,WACvC,IAAK,IAAInmnB,EAAK,EAAGyE,EAAK7C,KAAKo+kB,QAAShglB,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACtD,IAAIsG,EAAQ7B,EAAGzE,GACXmjnB,OAAUpmnB,EACVuJ,EAAM40mB,eACNiI,EAAU,IAAI/H,IACNE,KAAQh1mB,EAAMuN,MAAQ,GAG9BsvmB,EAAU,IAAIhI,IACNG,KAAO,EAGnB,IAAIsL,EAAoBhlnB,KAAK4hnB,UAAUl9mB,GACvC,GAAKsgnB,EAAkBjmnB,OAYnBwinB,EAAQ0D,OAASD,EAAkB/ymB,UAZR,CAC3B,IAAIya,EAAO,IAAIiwS,GACfjwS,EAAKoQ,EAAIp4B,EAAMgqC,KACfhiB,EAAKvwB,EAAIuI,EAAM6sC,OACf7kB,EAAK+K,KAAO/yB,EAAM0oO,SAClB1gN,EAAK82jB,GAAK9+kB,EAAMmoB,SAChBH,EAAKs8F,EAAItkH,EAAMwwQ,UACfxoP,EAAK8J,MAAS,KAAO9xB,EAAM4lf,UAAU/6e,QAAQ,IAAK,IAClDvP,KAAKu8mB,OAAO/3mB,KAAKkoB,GACjB60lB,EAAQ0D,OAASjlnB,KAAKu8mB,OAAO9/mB,OAAS,EAM1C,GAAwB,SAApBiI,EAAMy0mB,UAAsB,CAC5B,IAAIA,EAAY,KAAOz0mB,EAAMy0mB,UAAU5pmB,QAAQ,IAAK,IACpD,GAAIvP,KAAK48mB,OAAOjB,IAAIxC,GAAY,CAC5B,IAAI+L,EAASllnB,KAAK48mB,OAAOl1mB,IAAIyxmB,GAC7BoI,EAAQ2D,OAASA,MAEhB,CACGA,EAASllnB,KAAK48mB,OAAO9vlB,KAAO,EAChC9sB,KAAK48mB,OAAOv1mB,IAAI8xmB,EAAW+L,GAC3B3D,EAAQ2D,eAIZ3D,EAAQ2D,OAAS,EAWrB,GARKllnB,KAAK8hnB,YAAYp9mB,GAKlB68mB,EAAQ4D,SAAW,GAJnBnlnB,KAAKw8mB,SAASh4mB,KAAKE,EAAMuwR,SACzBssV,EAAQ4D,SAAWnlnB,KAAKw8mB,SAAS//mB,QAMV,YAAvBiI,EAAMsggB,aACN,GAAIhlgB,KAAK28mB,QAAQhB,IAAIj3mB,EAAMsggB,cAAe,CACtC,IAAIq8G,EAASrhnB,KAAK28mB,QAAQj1mB,IAAIhD,EAAMsggB,cACpCu8G,EAAQrI,SAAWmI,EAAOnI,aAEzB,CACD,IAAI51mB,EAAKtD,KAAK28mB,QAAQ7vlB,KAAO,IAC7B9sB,KAAK28mB,QAAQt1mB,IAAI3C,EAAMsggB,aAAc,IAAI20G,GAAOr2mB,EAAIoB,EAAMsggB,eAC1Du8G,EAAQrI,SAAW51mB,MAII,YAAvBoB,EAAMsggB,cAAiD,KAAnBtggB,EAAMw0mB,SAC1CqI,EAAQrI,SAAW,GAGnBqI,EAAQrI,SAAW,EAItBx0mB,EAAM40mB,gBACPiI,EAAQ6D,eAAiB,GAE7B7D,EAAQlyjB,UAAY,IAAIy9a,GACxBy0I,EAAQlyjB,UAAUgqjB,OAAS30mB,EAAM20mB,OACjCkI,EAAQlyjB,UAAUm/D,WAAa9pH,EAAM8qD,OACrC+xjB,EAAQlyjB,UAAUo/D,SAAW/pH,EAAM6qD,OACnCgyjB,EAAQlyjB,UAAU+pjB,SAAW10mB,EAAM00mB,SAAW,EAAI,EAC9C10mB,EAAM40mB,eACNt5mB,KAAK88mB,cAAct4mB,KAAK+8mB,GACxBvhnB,KAAK68mB,SAASr4mB,KAAK+8mB,IAInBvhnB,KAAK68mB,SAASr4mB,KAAK+8mB,KAI/BxF,EAAS1gnB,UAAUopnB,kBAAoB,WACnC,GAAIzknB,KAAK28mB,QAAQ7vlB,MAAQ,EAAG,CACxB,IAAIu4lB,EAAgB,mBAAsBrlnB,KAAK28mB,QAAY,KAAI,KAI/D,OAHA38mB,KAAK28mB,QAAQv9mB,QAAQ,SAAUpC,EAAOK,GAClCgonB,GAAiB,qBAAuBronB,EAAMk8mB,SAAW,iBAAmBl8mB,EAAM48mB,WAAWrqmB,QAAQ,KAAM,UAAY,SAEnH81mB,GAAiB,aAGzB,MAAO,IAGftJ,EAAS1gnB,UAAUqpnB,UAAY,WAE3B,IAAI13lB,EAAY,iBAAoBhtB,KAAKu8mB,OAAa,OAAI,KAC1D,GAAIv8mB,KAAKu8mB,OAAO9/mB,QAAU,EACtB,IAAK,IAAI2B,EAAK,EAAGyE,EAAK7C,KAAKu8mB,OAAQn+mB,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACrD,IAAIsuB,EAAO7pB,EAAGzE,GACd4uB,GAAa,SACTN,EAAKoQ,IACL9P,GAAa,SAEbN,EAAKvwB,IACL6wB,GAAa,SAEbN,EAAKs8F,IACLh8F,GAAa,SAEjBA,GAAa,YAAchtB,KAAK4jnB,kBAAkBl3lB,EAAK82jB,IAAM,OAC7Dx2jB,GAAa,eAAiBN,EAAK8J,MAAQ,OAC3CxJ,GAAa,cAAgBN,EAAK+K,KAAO,cAGjD,OAAOzK,EAAY,YAEvB+ulB,EAAS1gnB,UAAUspnB,UAAY,WAE3B,IAAIW,EAAa,kBAAoBtlnB,KAAK48mB,OAAO9vlB,KAAO,GAAK,8HAO7D,OANI9sB,KAAK48mB,OAAO9vlB,MAAQ,GACpB9sB,KAAK48mB,OAAOx9mB,QAAQ,SAAUpC,EAAOK,GAEjCionB,GAAc,wDAA0DjonB,EAAM,wDAG/EionB,EAAa,YAExBvJ,EAAS1gnB,UAAUupnB,YAAc,WAE7B,IAAIW,EAAe,oBAAsBvlnB,KAAKw8mB,SAAS//mB,OAAS,GAAK,oEACrE,GAAIuD,KAAKw8mB,SAAS//mB,QAAU,EACxB,IAAK,IAAI2B,EAAK,EAAGyE,EAAK7C,KAAKw8mB,SAAUp+mB,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvD,IAAI62R,EAAUpyR,EAAGzE,GACjB,GAAI4B,KAAKginB,YAAY/sV,GAAU,CAC3B,IAAIz+P,EAAQy+P,EAAQrgG,IAAIp+J,MAAMjnB,QAAQ,IAAK,IACvCwxT,EAAY9rC,EAAQrgG,IAAImsI,UAE5BwkT,GAAgB,wBAA0BxkT,EAAY,mBAAqBvqS,EAAQ,4BAA8BuqS,EAAY,mBAAqBvqS,EAAQ,2BAA6BuqS,EAAY,mBAAqBvqS,EAAQ,4BAA8BuqS,EAAY,mBAAqBvqS,EAAQ,8BAIvS+ulB,GAAgB,wBAA0BtwV,EAAQzoR,KAAKu0T,UAAY,mBAAqB9rC,EAAQzoR,KAAKgqB,MAAMjnB,QAAQ,IAAK,IAAM,4BAA8B0lR,EAAQxoR,MAAMs0T,UAAY,mBAAqB9rC,EAAQxoR,MAAM+pB,MAAMjnB,QAAQ,IAAK,IAAM,2BAA6B0lR,EAAQvoR,IAAIq0T,UAAY,mBAAqB9rC,EAAQvoR,IAAI8pB,MAAMjnB,QAAQ,IAAK,IAAM,4BAA8B0lR,EAAQtoR,OAAOo0T,UAAY,mBAAqB9rC,EAAQtoR,OAAO6pB,MAAMjnB,QAAQ,IAAK,IAAM,yBAIne,OAAOg2mB,EAAe,cAE1BxJ,EAAS1gnB,UAAU0pnB,eAAiB,WAChC,IAAIhlnB,EAAQC,KACRwlnB,EAAkB,uBAA0BxlnB,KAAK08mB,WAAe,KAAI,KAQxE,OAPA18mB,KAAK08mB,WAAWt9mB,QAAQ,SAAUpC,EAAOK,GACrCmonB,GAAmB,oBAAsBnonB,EAAM,WAAa0C,EAAM28mB,WAAWh1mB,IAAIrK,GAAKq8mB,KAAO,IACjF,WAARr8mB,IACAmonB,GAAmB,kBAEvBA,GAAmB,QAEhBA,GAAmB,iBAE9BzJ,EAAS1gnB,UAAUwpnB,iBAAmB,WAElC,IAAIY,EAAe,yBAA2BzlnB,KAAK88mB,cAAcrgnB,OAAS,GAAK,2DAC/E,GAAIuD,KAAK88mB,cAAcrgnB,QAAU,EAC7B,IAAK,IAAI2B,EAAK,EAAGyE,EAAK7C,KAAK88mB,cAAe1+mB,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC5D,IAAIsnnB,EAAc7inB,EAAGzE,GAErBqnnB,GAAgB,iBAAmBC,EAAYxM,SAAW,aAAewM,EAAYT,OAAS,aAAeS,EAAYR,OAAS,eAAiBQ,EAAYP,SAAW,UAC5IhqnB,IAA1BuqnB,EAAYr2jB,UACZo2jB,GAAgB,IAAMzlnB,KAAK2lnB,cAAcD,GAAe,QAGxDD,GAAgB,MAI5B,OAAOA,EAAe,mBAE1B1J,EAAS1gnB,UAAUypnB,YAAc,WAE7B,IAAIW,EAAe,oBAAsBzlnB,KAAK68mB,SAASpgnB,OAAS,GAAK,oEACrE,GAAIuD,KAAK68mB,SAASpgnB,QAAU,EACxB,IAAK,IAAI2B,EAAK,EAAGyE,EAAK7C,KAAK68mB,SAAUz+mB,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvD,IAAIwnnB,EAAS/inB,EAAGzE,GAEhBqnnB,GAAgB,iBAAmBG,EAAO1M,SAAW,aAAe0M,EAAOX,OAAS,aAAeW,EAAOV,OAAS,eAAiBU,EAAOT,SAAW,WAAaS,EAAOlM,KAAO,KACnJ,IAA1BkM,EAAOR,iBACPK,GAAgB,sBAEpBA,GAAgB,IAAMzlnB,KAAK2lnB,cAAcC,GAAU,QAG3D,OAAOH,EAAe,cAE1B1J,EAAS1gnB,UAAUsqnB,cAAgB,SAAUC,GACzC,IAAIC,EAAc,cAWlB,YAVoC1qnB,IAAhCyqnB,EAAOv2jB,UAAUm/D,aACjBq3f,GAAe,eAAiBD,EAAOv2jB,UAAUm/D,WAAa,WAElCrzH,IAA5ByqnB,EAAOv2jB,UAAUgqjB,SACjBwM,GAAe,WAAaD,EAAOv2jB,UAAUgqjB,OAAS,WAExBl+mB,IAA9ByqnB,EAAOv2jB,UAAUo/D,WACjBo3f,GAAe,aAAeD,EAAOv2jB,UAAUo/D,SAAW,MAE9Do3f,GAAe,aAAeD,EAAOv2jB,UAAU+pjB,SAAW,QAG9D2C,EAAS1gnB,UAAUunnB,QAAU,SAAUzF,GAEnC,IAAI2I,EAAY,uMACU3qnB,IAAtBginB,SACkChinB,IAA9BginB,EAAkBQ,UAClBmI,GAAa,YAAc3I,EAAkBQ,QAAU,mBAEzBxinB,IAA9BginB,EAAkBO,UAClBoI,GAAa,YAAc3I,EAAkBO,QAAU,eAG/D19mB,KAAKojnB,aAAc0C,EAAY,gBAAkB,qBAErD/J,EAAS1gnB,UAAUwnnB,SAAW,SAAU1F,GACpC,IAAIU,EAAc,IAAI79lB,KAElB+lmB,EAAa,+VACc5qnB,IAA3B6E,KAAKm9mB,wBAC4BhinB,IAA7BginB,EAAkBK,SAClBuI,GAAc,eAAiB5I,EAAkBK,OAAS,sBAE5BrinB,IAA9BginB,EAAkBS,UAClBmI,GAAc,eAAiB5I,EAAkBS,QAAU,sBAE5BzinB,IAA/BginB,EAAkB/ib,WAClB2rb,GAAc,gBAAkB5I,EAAkB/ib,SAAW,uBAE9Bj/L,IAA/BginB,EAAkBM,WAClBsI,GAAc,mBAAqB5I,EAAkBM,SAAW,0BAEpCtinB,IAA5BginB,EAAkBj9kB,QAClB6llB,GAAc,aAAe5I,EAAkBj9kB,MAAQ,oBAE5B/kC,IAA3BginB,EAAkBW,OAClBiI,GAAc,gBAAkB5I,EAAkBW,KAAO,uBAE5B3inB,IAA7BginB,EAAkB34hB,SAClBuhiB,GAAc,qBAAuB5I,EAAkB34hB,OAAS,4BAE9BrpF,IAAlCginB,EAAkBU,YAElBkI,GAAc,8CAAgD5I,EAAkBU,YAAYmI,cAAgB,qBAG5GD,GAAc,8CAAgDlI,EAAYmI,cAAgB,0BAEvD7qnB,IAAnCginB,EAAkB3jiB,aAElBusiB,GAAc,+CAAiD5I,EAAkB3jiB,aAAawsiB,cAAgB,sBAG9GD,GAAc,+CAAiDlI,EAAYmI,cAAgB,wBAI/FD,GAAc,8CAAgDlI,EAAYmI,cAAgB,qBAC1FD,GAAc,+CAAiDlI,EAAYmI,cAAgB,uBAG/FD,GAAc,uBACd/lnB,KAAKojnB,aAAa2C,EAAY,sBAElChK,EAAS1gnB,UAAU0nnB,qBAAuB,WAGtC/inB,KAAKojnB,aADa,glBACa,gBAEnCrH,EAAS1gnB,UAAU2nnB,qBAAuB,WAKtC,IAAK,IAHDiD,EAAa,8IACbxpnB,EAASuD,KAAKm7mB,WAAW1+mB,OACzBqiB,EAAQ,EACH3iB,EAAI,EAAGA,EAAIM,EAAQN,IAAK2iB,IAE7BmnmB,GAAc,yBAA2B9pnB,EAAI,GAAG+Q,WAAa,mHAAqH/Q,EAAI,GAAG+Q,WAAa,WAG1M+4mB,GAAc,2BAA6BnnmB,GAAO5R,WAAa,6GAC3DlN,KAAKk8mB,kBAAoB,IAEzB+J,GAAc,2BAA6BnnmB,GAAO5R,WAAa,4HAEnElN,KAAKojnB,aAAc6C,EAAa,mBAAqB,+BAEzDlK,EAAS1gnB,UAAUynnB,gBAAkB,WAKjC,IAAK,IAHDoD,EAAoB,8wBACpBC,EAAiB,GACjB1pnB,EAASuD,KAAKm7mB,WAAW1+mB,OACpBN,EAAI,EAAGA,EAAIM,EAAQN,IAExBgqnB,GAAkB,4CAA8ChqnB,EAAI,GAAG+Q,WAAa,mGAEpFlN,KAAKk8mB,kBAAoB,IAEzBgK,GAAqB,6IAEzBlmnB,KAAKojnB,aAAc8C,EAAoBC,EAAiB,WAAa,wBAEzEpK,EAAS1gnB,UAAU+nnB,aAAe,SAAUgD,EAAW3gZ,GACnD,GAA2B,mBAAU,CACjC,IAAItkF,EAAO,IAAIgwE,MAAMi1Z,IAAc1/mB,KAAM,eACrC83kB,EAAc,IAAIv7W,GAAe9hF,EAAMskF,GAC3CzlO,KAAK28kB,SAASr4Y,QAAQk6Y,OAErB,CACGA,EAAc,IAAIv7W,GAAemjZ,EAAW3gZ,GAChDzlO,KAAK28kB,SAASr4Y,QAAQk6Y,KAG9Bu9B,EAAS1gnB,UAAUylnB,kBAAoB,SAAU79iB,EAAMw9N,EAAU0iO,GAC7D,GAAqB,IAAjBlgc,EAAKg0N,SAAkC,IAAjBh0N,EAAKyyN,QAAe,CAC1C,IAAIglV,EAAQ,IAAIH,GAChBG,EAAM3tmB,EAAIk2D,EAAKhxD,MACfyomB,EAAM1kmB,MAAQitD,EAAKyyN,QACnBglV,EAAM1tmB,EAAIyzR,EACVi6U,EAAM3kmB,OAASktD,EAAKg0N,QACpB,IAAIkhO,EAAYn4f,KAAK6+mB,YAAYnE,EAAM1tmB,EAAG0tmB,EAAM3tmB,GAC5Cqrf,EAAUp4f,KAAK6+mB,YAAYp+U,EAAWi6U,EAAM3kmB,OAAQktD,EAAKhxD,MAAQyomB,EAAM1kmB,OAC3E0kmB,EAAMG,IAAM1iH,EAAY,IAAMC,EACb+K,EAAW/+f,IAAIs2mB,GAAhC,IACIn9mB,GAAUwP,EAAG2tmB,EAAM3tmB,EAAGC,EAAG0tmB,EAAM1tmB,GAC/B6R,GACA9R,EAAIk2D,EAAKhxD,MAAQyomB,EAAM1kmB,MAAQhJ,EAAIyzR,EAAWi6U,EAAM3kmB,QAExD/V,KAAKqmnB,wBAAwB9onB,EAAOshB,EAAKokD,GAE7C,OAAOkgc,GAEX44G,EAAS1gnB,UAAUgrnB,wBAA0B,SAAUC,EAAOC,EAAOtjjB,GACjE,IAAK,IAAIl2D,EAAIu5mB,EAAMv5mB,EAAGA,GAAKw5mB,EAAMx5mB,EAAGA,IAChC,IAAK,IAAIC,EAAIs5mB,EAAMt5mB,EAAGA,GAAKu5mB,EAAMv5mB,EAAGA,IAChChN,KAAKi+mB,iBAAiB52mB,IAAIrH,KAAK6+mB,YAAY7xmB,EAAGD,IAAMA,EAAGA,EAAGC,EAAGA,EAAG+ymB,WAAY98iB,EAAK88iB,cAU7FhE,EAAS1gnB,UAAUmrnB,YAAc,SAAU19gB,EAAM9sB,EAAOvE,GAIpD,GAAIqxB,GAAQ,GAAKA,GAAQ,MAAQ9sB,GAAS,GAAKA,GAAS,GAAI,CACxD,IACIhvE,EAAI87F,EAAO,EAEf,OAPc,OAMF,IAAJ97F,GAAYA,EAAI,EAAK,IAAOA,EAAI,IAAO,IAAOA,EAAI,IAAO,IAFtDhN,KAAKymnB,WAAW39gB,IAFT,EAAG,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MADvD,EAAG,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAKE9sB,EAAQ,GAAKvE,EAAM,GAGlG,MAAM,IAAI72E,MAAM,qBAQpBm7mB,EAAS1gnB,UAAUqrnB,YAAc,SAAUp/gB,EAAMD,EAAQxoG,GACrD,GAAIyoG,GAAQ,GAAKA,EAAO,IAAMD,GAAU,GAAKA,EAAS,IAAMxoG,GAAU,GAAKA,EAAS,GAAI,CAEpF,OAAsB,KADI,KAAPyoG,EAAuB,GAATD,EAAcxoG,GACjB,IAElC,MAAM,IAAI+B,MAAM,mBAMpBm7mB,EAAS1gnB,UAAUornB,WAAa,SAAU39gB,GACtC,OAAOA,EAAO,GAAM,IAAMA,EAAO,KAAQ,GAAKA,EAAO,KAAQ,IAKjEizgB,EAAS1gnB,UAAU8mnB,SAAW,SAAUxriB,GACpC,IAAIspD,EAAQ,EAGZ,GAAc,KADdA,EAAQjgI,KAAKwmnB,YAAY7viB,EAAK5Q,cAAgB4Q,EAAK1Q,WAAa,EAAI0Q,EAAKxQ,WAAanmE,KAAK0mnB,YAAY/viB,EAAKvQ,WAAYuQ,EAAKrQ,aAAcqQ,EAAKoB,eAE5I,OAAO,EAMX,GAAIkoD,EADmB,WAEnB,MAAM,IAAIr/H,MAAM,yBAGpB,OAASq/H,EANc0mf,aAMc,IADlB,OAGhB5K,KAGPqB,GAAmC,WAGnC,OAFA,8eCp+CAtC,GAAgC,WAChC,SAASA,EAAeltmB,GACpB5N,KAAKivE,KAAO,IAAIy7B,GACXjtG,EAAkBmQ,KACnB5N,KAAKivE,KAAK8Z,QAAUn7E,GAuC5B,OApCAktmB,EAAez/mB,UAAUomE,kBAAoB,SAAUzlC,GACnD,OAAIA,EAAOt1B,KACA1G,KAAKivE,KAAK07B,cAAc3uE,GAGxBh8B,KAAKivE,KAAKC,gBAAgBlzC,IAGzC8+kB,EAAez/mB,UAAUumE,kBAAoB,SAAU5lC,GACnD,OAAIA,EAAOt1B,KACA1G,KAAKivE,KAAK47B,cAAc7uE,GAGxBh8B,KAAKivE,KAAK67B,gBAAgB9uE,IAGzC8+kB,EAAez/mB,UAAUuiM,SAAW,SAAU5gM,EAAOg/B,EAAQt1B,GACzD,MAAa,SAATA,GAA4B,aAATA,GAAgC,WAATA,EACnCs1B,EAAOh/B,GAGPA,GAGf89mB,EAAez/mB,UAAUwiM,OAAS,SAAU7gM,EAAOg/B,GAC/C,IAAIj9B,EAAS/B,EAIb,OAHKS,EAAkBu+B,IAAYv+B,EAAkBT,KACjD+B,EAASi9B,EAAOh/B,IAEb+B,GAEX+7mB,EAAez/mB,UAAUsS,WAAa,SAAUC,GACvCnQ,EAAkBmQ,IACnBD,GAAWC,IAGZktmB,KC1CP58iB,GAAwB,WACxB,SAASA,EAAOlrD,GACZ,IAAIjT,EAAQC,KAMZA,KAAK4mnB,cAAe,EAMpB5mnB,KAAK6mnB,eAAgB,EAMrB7mnB,KAAKm1d,gBAAiB,EAMtBn1d,KAAK8mnB,eAAgB,EAMrB9mnB,KAAK+mnB,iBAAkB,EAMvB/mnB,KAAKgnnB,gBAAiB,EAKtBhnnB,KAAKinnB,qBAAsB,EAM3BjnnB,KAAK8gE,cAAe,EAapB9gE,KAAKgnC,UAMLhnC,KAAKknnB,qBAAsB,EAK3BlnnB,KAAKmnnB,QACLnnnB,KAAKonnB,cAAgB,aACrBppnB,EAAMgC,KAAMgT,GACZhT,KAAKN,IAAM0/D,GAAO,eAClB,IAAIiojB,EAAiB,IAAIvM,GA6BzB,GA5BI9nmB,EAAQgpB,SAAWhpB,EAAQgpB,OAAO0lC,UAAY1uD,EAAQgpB,OAAOA,UAC7Dh8B,KAAKqhE,aAAagmjB,EAAe5ljB,kBAAkBzuD,EAAQgpB,SAC3Dh8B,KAAK2hE,UAAU0ljB,EAAezljB,kBAAkB5uD,EAAQgpB,UAEvDh8B,KAAK+rB,QACN/rB,KAAKm1d,gBAAiB,EACtBn1d,KAAK8mnB,eAAgB,EACrB9mnB,KAAK4mnB,cAAe,GAEpB5mnB,KAAKgoC,WAAahoC,KAAKqyC,YACvBryC,KAAKqyC,UAAY,UAEjBryC,KAAKiP,UAAYjP,KAAKsnnB,oBACtBtnnB,KAAKg6B,WAAaqjC,GAAiBr9D,KAAKiP,UAAYjP,KAAKsnnB,mBAEzDtnnB,KAAKq5L,iBACLr5L,KAAKunnB,iBAAmBlqjB,GAAiBr9D,KAAKq5L,iBAE9Cr5L,KAAKgnC,OAAOyqb,eACZzxd,KAAKwnnB,eAAiBnqjB,GAAiBr9D,KAAKgnC,OAAOyqb,eAEnDzxd,KAAKynnB,oBAAsBhqnB,EAAkBuC,KAAK0nnB,WAA+B,iBAAlB1nnB,KAAK0nnB,YACpE1nnB,KAAK0nnB,SAAW,eAChB1nnB,KAAKmnnB,KAAKnsnB,QACNuoE,WAAYvjE,KAAKujE,WACjB7H,MAAO,IAAI2H,GAASz3C,QAAU5uB,MAAOgD,KAAKq+D,iBAAmBr+D,KAAK+rB,MAAOU,KAAMzsB,KAAKo+D,mBAGxFp+D,KAAK2nnB,aAAc,CACnB,IAAIC,EAAM5nnB,KAAK2nnB,aACf3nnB,KAAK2nnB,aAAe,SAAkB56mB,EAAGC,GACrC,GAA2B,eAAvBhN,KAAKonnB,cAAgC,CACrC,IAAIrhhB,EAAIh5F,EACRA,EAAIC,EACJA,EAAI+4F,EAER,OAAO6hhB,EAAI76mB,EAAGC,KAGjBhN,KAAK2nnB,cAAgB3nnB,KAAKynnB,oBAC3BznnB,KAAK2nnB,aAAe,SAAU56mB,EAAGC,GAG7B,OAFAD,EAAIlQ,EAASkD,EAAMq+D,gBAAiB2E,GAAehjE,KAAWgN,GAAG,IACjEC,EAAInQ,EAASkD,EAAMq+D,gBAAiB2E,GAAehjE,KAAWiN,GAAG,IAClC,eAAxBjN,EAAMqnnB,cAAiC3njB,GAASqyF,aAAa/kJ,EAAGC,GAAKyyD,GAASoyF,YAAY9kJ,EAAGC,KA2DhH,OAtDAkxD,EAAO7iE,UAAUwsnB,iBAAmB,WAChC,OAAO7nnB,KAAKonnB,eAGhBlpjB,EAAO7iE,UAAUysnB,iBAAmB,SAAUtylB,GAC1Cx1B,KAAKonnB,cAAgB5xlB,GAGzB0oC,EAAO7iE,UAAU2L,cAAgB,SAAU61D,GAGvC,IAAK,IADDv/D,EAAOgB,OAAOhB,KAAKu/D,GACd1gE,EAAI,EAAGA,EAAImB,EAAKb,OAAQN,IAC7B6D,KAAK1C,EAAKnB,IAAM0gE,EAAOv/D,EAAKnB,KAOpC+hE,EAAO7iE,UAAUosnB,gBAAkB,WAC/B,SAAUznnB,KAAKujE,aAAcvjE,KAAKo+D,kBAGtCF,EAAO7iE,UAAU0snB,aAAe,WAC5B,OAAO/nnB,KAAKgonB,UAGhB9pjB,EAAO7iE,UAAUgmE,aAAe,SAAUrkE,GACtCgD,KAAKgonB,SAAWhrnB,GAGpBkhE,EAAO7iE,UAAU4snB,UAAY,WACzB,OAAOjonB,KAAKkonB,UAGhBhqjB,EAAO7iE,UAAUsmE,UAAY,SAAU3kE,GACnCgD,KAAKkonB,SAAWlrnB,GAGpBkhE,EAAO7iE,UAAU8snB,kBAAoB,WACjC,OAAOnonB,KAAKg6B,YAGhBkkC,EAAO7iE,UAAU+snB,kBAAoB,WACjC,OAAOponB,KAAKunnB,kBAGhBrpjB,EAAO7iE,UAAUgtnB,sBAAwB,WACrC,OAAOronB,KAAKwnnB,gBAGhBtpjB,EAAO7iE,UAAUitnB,aAAe,WAC5B,OAAOtonB,KAAKuonB,kBAAoB,cAAgB,aAE7CrqjB,K3c+CPx+D,GAAM,EAqCNkgE,GAAc,K4ctQP4ojB,GAAgB,gBAEhBC,GAAiB,iBAEjBC,GAAc,cAEdC,GAAiB,iBAEjB34J,GAAgB,gBAEhB44J,GAAY,YAEZC,GAAe,eAEfC,GAAc,cAEdC,GAAiB,iBAEjBC,GAAgB,gBAEhBC,GAAgB,gBAEhBC,GAAe,eAEfC,GAAkB,kBAElBC,GAAiB,iBAEjBC,GAAkB,kBAElBC,GAAa,aAEbC,GAAa,aAEbC,GAAe,eAEfC,GAAU,UAEVC,GAAU,UAIVC,GAAgB,gBAEhBC,GAAkB,kBAIlBC,GAAW,WAEXC,GAAc,cAEdC,GAAc,cAwBdC,GAAkB,kBAElBC,GAA0B,0BAY1BC,GAAsB,sBAEtBC,GAAkB,kBAElBC,GAAmB,mBAMnBC,GAAc,eAEdC,GAAa,cAEbC,GAAY,aAEZC,GAAe,gBAEfC,GAAW,YAEXC,GAAU,WAEVC,GAAsB,wBAEtBvtM,GAAe,gBAEfwtM,GAAkB,mBAElBC,GAAkB,mBAIlBC,GAAe,kBAIfC,GAAe,mBAIfC,GAAiB,qBAIjBC,GAAiB,qBAIjBC,GAAkB,mBAIlBC,GAAyB,0BAIzBC,GAAgB,oBAIhBC,GAAkB,sBAYlBC,GAAwB,eAExBC,GAAoB,oBAEpBC,GAAc,cAEdzoU,GAAa,cAEb18L,GAAQ,QAER/zG,GAAU,UAEVm5mB,GAA0B,yBAI1BC,GAAqB,uBAErBC,GAAwB,0BAIxBC,GAAY,aAEZC,GAAc,eAEdC,GAAiB,mBAEjBC,GAAa,cAEbC,GAAqB,sBAIrBC,GAAsB,wBAEtBC,GAAW,WAEXC,GAAiB,kBAIjBC,GAAU,WAEVC,GAAiB,kBAEjBtzJ,GAAa,cAUbuzJ,GAAe,gBAIfC,GAAiB,kBAEjBC,GAAe,gBAEfC,GAAgB,iBAEhBC,GAAa,cAEbC,GAAkB,oBAElBC,GAAc,eAEdC,GAAY,aAIZC,GAAsB,sBAItBC,GAA2B,2BAI3BC,GAAoB,oBAIpBC,GAAyB,yBAMzBC,GAAe,eAUfC,GAAa,aAEbC,GAAsB,sBAEtBC,GAAkB,oBAElBC,GAAuB,uBAEvBC,GAAoB,oBAEpB78S,GAAgB,gBAEhB88S,GAAgB,gBAIhBC,GAAkB,kBAElBC,GAAoB,oBAEpBC,GAAa,cAEbC,GAAmB,mBAEnBC,GAAe,gBbtS1B,SAAW7U,GAEPA,EAASA,EAAe,KAAI,GAAK,OAEjCA,EAASA,EAAiB,OAAI,GAAK,SAEnCA,EAASA,EAAkB,QAAI,GAAK,UAEpCA,EAASA,EAAuB,aAAI,GAAK,eAEzCA,EAASA,EAAyB,eAAI,GAAK,iBAE3CA,EAASA,EAAiB,OAAI,GAAK,SAEnCA,EAASA,EAAiB,OAAI,GAAK,SAEnCA,EAASA,EAAuB,aAAI,GAAK,eAEzCA,EAASA,EAA4B,kBAAI,GAAK,oBAE9CA,EAASA,EAAiB,OAAI,GAAK,SAEnCA,EAASA,EAAuB,aAAI,IAAM,eAE1CA,EAASA,EAAwB,cAAI,IAAM,gBAE3CA,EAASA,EAAuB,aAAI,IAAM,eAE1CA,EAASA,EAAuB,aAAI,IAAM,eAE1CA,EAASA,EAAwB,cAAI,IAAM,gBA9B/C,CA+BGA,KAAaA,QAKhB,IAAW8U,IACX,SAAWA,GAEPA,EAAWA,EAAmB,OAAI,GAAK,SAEvCA,EAAWA,EAAoB,QAAI,GAAK,UAExCA,EAAWA,EAAoB,QAAI,GAAK,UAN5C,CAOGA,KAAeA,QAKlB,IAAWC,IACX,SAAWA,GACPA,EAAYA,EAAiB,IAAI,GAAK,MACtCA,EAAYA,EAAkB,KAAI,GAAK,OACvCA,EAAYA,EAAoB,OAAI,GAAK,SACzCA,EAAYA,EAAoB,OAAI,GAAK,SACzCA,EAAYA,EAAoB,OAAI,GAAK,SACzCA,EAAYA,EAAmB,MAAI,GAAK,QACxCA,EAAYA,EAAoB,OAAI,GAAK,SACzCA,EAAYA,EAA2B,cAAI,GAAK,gBAChDA,EAAYA,EAAuB,UAAI,GAAK,YAC5CA,EAAYA,EAAyB,YAAI,GAAK,cAC9CA,EAAYA,EAAuB,UAAI,IAAM,YAC7CA,EAAYA,EAAwB,WAAI,IAAM,aAZlD,CAaGA,KAAgBA,QcnDnB,IAAIC,GAAgC,WAKhC,SAASA,EAAe1tnB,EAAQ2tnB,EAAgB3sjB,GAC5CthE,KAAKkunB,qBACLlunB,KAAKmunB,aAAc,EACnBnunB,KAAK+yB,UACL/yB,KAAKounB,SAAWt7mB,IAAe,GAASN,SAAS,EAAMa,MAAO,MAC9DrT,KAAKqunB,UAAYv7mB,IAAe,GAASN,SAAS,EAAOa,MAAO,MAChErT,KAAKM,OAASA,EACdN,KAAKsD,GAAKtD,KAAKM,OAAOU,QAAQsC,GAC9BtD,KAAKshE,eAAiBA,EACtBthE,KAAKiunB,eAAiBA,EACtBjunB,KAAKqnnB,eAAiB,IAAIvM,GAAe96mB,KAAKM,OAAO0N,QACrDhO,KAAKounB,SAASlpnB,aAAa/D,EAAc,SACrCkC,UAAW,eAAgBI,OAASiD,KAAM,cAC1C1G,KAAKounB,SAASxxmB,YAClB5c,KAAKqunB,UAAUnpnB,aAAa/D,EAAc,SACtCkC,UAAW,eAAgBI,OAASiD,KAAQ,cAC5C1G,KAAKqunB,UAAUzxmB,YACnB5c,KAAKqunB,UAAU1rnB,cAAc,YAAYmB,UAAUM,IAAI,aACnDpE,KAAKM,OAAO4S,WACZvP,GAAU3D,KAAKounB,SAAUpunB,KAAKqunB,YAAa,UAwoBnD,OAhoBAL,EAAe3ynB,UAAUiX,QAAU,WAC/BtS,KAAK+vmB,eAETie,EAAe3ynB,UAAUkpB,WAAa,WAClChf,GAAanB,IAAIpE,KAAKghE,IAAK,QAAShhE,KAAKm/G,aAAcn/G,MACvDA,KAAKsunB,cAAgB3unB,EAASK,KAAKuunB,eAAgB,KACnDhpnB,GAAanB,IAAIpE,KAAKghE,IAAIr+D,cAAc,kBAAmB,QAAS3C,KAAKsunB,cAAetunB,OAE5FgunB,EAAe3ynB,UAAUmjH,aAAe,WACpCj5G,GAAahB,OAAOvE,KAAKghE,IAAK,QAAShhE,KAAKm/G,cAC5C,IAAIz8G,EAAO1C,KAAKghE,IAAIr+D,cAAc,kBAC9BD,GACA6C,GAAahB,OAAO7B,EAAM,QAAS1C,KAAKsunB,gBAGhDN,EAAe3ynB,UAAUmznB,eAAiB,SAAU3tnB,GACnCA,EAAEsG,OACJrD,UAAUK,SAAS,mBAC1BnE,KAAKyunB,OAAOzxnB,MAAQ,GACpBgD,KAAK0unB,oBACL1unB,KAAK2unB,mBACL3unB,KAAKyunB,OAAOvsnB,UAGpB8rnB,EAAe3ynB,UAAUkznB,eAAiB,SAAU1tnB,GAChDb,KAAK0unB,oBACL1unB,KAAK2unB,oBAETX,EAAe3ynB,UAAUsznB,iBAAmB,WACpC3unB,KAAKyunB,OAAOzxnB,MAAMP,OAClBqH,EAAU9D,KAAK4unB,OAAQ,qBAAsB,kBAG7C9qnB,EAAU9D,KAAK4unB,OAAQ,kBAAmB,sBAQlDZ,EAAe3ynB,UAAU0gV,kBAAoB,SAAU1+U,GACnD,OAAO2C,KAAK04E,UAAU3E,YAAY12E,IAEtC2wnB,EAAe3ynB,UAAU42d,iBAAmB,WACxC,IAAI1uZ,EAAavjE,KAAKgT,QAAQuwD,WAC9B,KAAMA,aAAsBC,IACxB,IAAK,IAAIrnE,EAAI,EAAGA,EAAIonE,EAAW9mE,OAAQN,IACnC,GAA0B,iBAAfonE,EAAyB,CAChC,IAAIxmE,KACJA,EAAIiD,KAAKgT,QAAQ+Y,OAASw3C,EAAWpnE,GACrConE,EAAWpnE,GAAKY,IAKhCixnB,EAAe3ynB,UAAUwznB,YAAc,SAAU77mB,GAC7ChT,KAAKgT,QAAUA,EACfhT,KAAKkunB,kBAAoBl7mB,EAAQ87mB,oBACjC9unB,KAAKgT,QAAQuwD,WAAavwD,EAAQuwD,WAClCvjE,KAAKiyd,mBACLjyd,KAAKgT,QAAQtM,KAAOsM,EAAQtM,MAAQ,SACpC1G,KAAKgT,QAAQgpB,OAAShpB,EAAQgpB,QAAU,GACxCh8B,KAAKgT,QAAQ+7mB,gBAAkB/7mB,EAAQ+7mB,iBAAmB/unB,KAAKM,OAAO2tnB,eAAelwjB,QACrF/9D,KAAKgT,QAAQo7I,cAAgBp7I,EAAQo7I,eAAiBpuJ,KAAKM,OAAO0unB,aAAajxjB,QAC/E/9D,KAAKgT,QAAQ0oD,MAAQ1oD,EAAQ0oD,OAAS,IAAI2H,GAC1CrjE,KAAKgT,QAAQi8mB,mBAAqBj8mB,EAAQi8mB,qBAAsB,EAChEjvnB,KAAK+yB,UACL/yB,KAAK04E,UAAY1lE,EAAQ0lE,UACzB14E,KAAKs9d,WAAatqd,EAAQ+7mB,gBAAgBtynB,QAE9CuxnB,EAAe3ynB,UAAU6znB,iBAAmB,SAAUl8mB,GAiClD,OAhCAhT,KAAKghE,IAAM7/D,EAAc,OACrBmC,GAAItD,KAAKsD,GAAKtD,KAAKgT,QAAQtM,KAAO,YAClCrD,UAAW,oCAEfrD,KAAKmvnB,KAAOhunB,EAAc,OAASkC,UAAW,sBACzC2P,EAAQo8mB,gBACTpvnB,KAAKyunB,OAASttnB,EAAc,SACxBmC,GAAItD,KAAKsD,GAAK,aACdD,UAAW,kBAEfrD,KAAK4unB,MAAQztnB,EAAc,QACvBkC,UAAW,yDAA0DI,OACjEiD,KAAM,OAAQw5B,MAAOlgC,KAAK+7U,kBAAkB,aAGpD/7U,KAAK65d,UAAY14d,EAAc,QAAUkC,UAAW,yBACpDrD,KAAK65d,UAAUl4d,YAAY3B,KAAKyunB,QAChCzunB,KAAKmvnB,KAAKxtnB,YAAY3B,KAAK65d,WAC3Bzuc,GAAM2rG,aACF/1H,QAAShB,KAAKyunB,OAAQ1nmB,eAAgB,QAAS9jB,YAC3C6jB,YAAa9mB,KAAK+7U,kBAAkB,aAG5C/7U,KAAK65d,UAAUl3d,cAAc,kBAAkBhB,YAAY3B,KAAK4unB,QAEpE5unB,KAAKqvnB,QAAUlunB,EAAc,OAASkC,UAAW,cACjDrD,KAAKsvnB,KAAOnunB,EAAc,OACtBmC,GAAItD,KAAKsD,GAAKtD,KAAKgT,QAAQtM,KAAO,gBAClCrD,UAAW,4BAEfrD,KAAKqvnB,QAAQ1tnB,YAAY3B,KAAKsvnB,MAC9BtvnB,KAAKmvnB,KAAKxtnB,YAAY3B,KAAKqvnB,SACpBrvnB,KAAKmvnB,MAEhBnB,EAAe3ynB,UAAU2of,WAAa,SAAUhxe,GAC5C,IAAI/S,GACAmsL,YAAamjc,GAAyBC,YAAaxvnB,KACnDyvnB,WAAYzvnB,KAAKgT,QAAQ+Y,MAAO2jmB,WAAY1vnB,KAAKgT,QAAQtM,KAAMmyB,QAAQ,GAE3E74B,KAAKM,OAAOkmB,QAAQmpmB,GAAoB1vnB,GACpCA,EAAK44B,SAGT74B,KAAKkiE,UAAY,IAAI4iD,IACjBttF,SAAS,EAAO4C,QAASp6B,KAAKmvnB,KAC9BltnB,MAAOjC,KAAK+vmB,YAAYz0mB,KAAK0E,MAC7BgW,OAASvY,EAAkBo2C,GAAa7gC,EAAQ7L,OAAQ,cACjDnH,KAAKM,OAAOU,QAAQ8C,UAAUK,SAAS,YAAc,IAAM,IAClEgD,OAAQnH,KAAKM,OAAOU,QAAS4oH,mBAAqB5xF,OAAQ,QAC1DmuF,UACQE,MAAOrmH,KAAK4vnB,SAASt0nB,KAAK0E,MAC1BomH,aACIhsF,QAASp6B,KAAK+7U,kBAAkB/7U,KAAK6vnB,QAAU,WAAa,gBAC5D58mB,SAAU,YAAa+qG,WAAW,KAItCqI,MAAOrmH,KAAK4vnB,SAASt0nB,KAAK0E,MAC1BomH,aAAenzG,SAAU,SAAUmnB,QAASp6B,KAAK+7U,kBAAkB/7U,KAAK6vnB,QAAU,eAAiB,kBAE3G/yX,QAAS98P,KAAK8vnB,cAAcx0nB,KAAK0E,MACjC0B,KAAM1B,KAAK6pH,WAAWvuH,KAAK0E,QAE/BA,KAAKkiE,UAAU7rB,SAASr2C,KAAKghE,KAC7BhhE,KAAKkiE,UAAUlhE,QAAQ0D,MAAM6uD,UAAY,QACzCvzD,KAAKkiE,UAAU+hD,OACfjkH,KAAKukB,aACL/J,IAAgBrT,OAAQnH,KAAKqvnB,UAC7B1tmB,GAAY3hB,KAAKqvnB,SACjBrvnB,KAAK+vnB,eAET/B,EAAe3ynB,UAAUy0nB,cAAgB,SAAUjvnB,GAC1C2K,GAAQkb,SAIT1mB,KAAKkiE,UAAUhuD,UAAakC,EAAG,SAAUC,EAAG,UAH5C4rD,GAAqBjiE,KAAKgT,QAAQ7L,OAAQnH,KAAKkiE,UAAWliE,KAAKM,QAKnEN,KAAKM,OAAOyN,OAAOiinB,GAA4BnvnB,IAEnDmtnB,EAAe3ynB,UAAUgjmB,WAAa,SAAUrrlB,GAC5ChT,KAAK6unB,YAAY77mB,GACjBhT,KAAKkvnB,iBAAiBl8mB,GACtBhT,KAAKgkf,WAAWhxe,IAEpBg7mB,EAAe3ynB,UAAU00mB,YAAc,WAC/B/vmB,KAAKkiE,YAAcliE,KAAKkiE,UAAU8kB,cAClChnF,KAAKM,OAAOyN,OAAOkinB,IAA0BlkmB,MAAO/rB,KAAKgT,QAAQ+Y,QACjE/rB,KAAKkiE,UAAU5vD,UACftS,KAAKw+G,eACLj6G,EAAOvE,KAAKghE,KACZhhE,KAAKghE,IAAM,OAGnBgtjB,EAAe3ynB,UAAU60nB,YAAc,WACnClwnB,KAAKgT,QAAQvX,SAAU06D,OAAQ,eAAgBpqC,MAAO/rB,KAAKgT,QAAQ+Y,SAEvEiimB,EAAe3ynB,UAAUu0nB,SAAW,SAAU/unB,GAC1C,GAAIb,KAAKmunB,YAAa,CAClB,GAAuC,UAAnCttnB,EAAEsG,OAAOnE,QAAQ4S,cAA2B,CAC5C,IAAI3V,GACAk2D,OAAQ,YAAag6jB,kBACjBpkmB,MAAO/rB,KAAKgT,QAAQ+Y,MACpBg4C,SAAuC,SAA7B/jE,KAAKgT,QAAQ6pD,OAAOn2D,MAAgD,aAA7B1G,KAAKgT,QAAQ6pD,OAAOn2D,KAAsB,QAAU,WACrG1J,MAAO6D,EAAEsG,OAAOnK,MAAOgnE,WAAW,EAAOt9D,KAAM1G,KAAKgT,QAAQ6pD,OAAOn2D,MAEvEqlB,MAAO/rB,KAAKgT,QAAQ+Y,OAExBlrB,EAAEsG,OAAOnK,MAAQgD,KAAKgT,QAAQvX,QAAQwE,GAAQD,KAAK+vmB,kBAElD,CACD,IAAItjlB,EAAO5rB,EAAEsG,OAAOyV,WAAWf,YAAYjG,cACvC5V,KAAK+7U,kBAAkB/7U,KAAK6vnB,QAAU,WAAa,gBAAgBj6mB,gBAAkB6W,EACrFzsB,KAAKownB,iBAEApwnB,KAAK+7U,kBAAkB,eAAenmU,gBAAkB6W,GAC7DzsB,KAAKkwnB,cAGblwnB,KAAK+vmB,kBAEqC,UAAnClvmB,EAAEsG,OAAOnE,QAAQ4S,gBACxB5V,KAAKkwnB,cACLlwnB,KAAK+vmB,gBAGbie,EAAe3ynB,UAAU+0nB,eAAiB,WACtC,IAAI59mB,KAAanR,MAAMC,KAAKtB,KAAKsvnB,KAAK9tnB,iBAAiB,+BACnD6unB,EAAO,QACPC,EAAgC,WAAtBtwnB,KAAKgT,QAAQtM,MACvB1G,KAAKgT,QAAQi8mB,mBACb5nM,GACAt7Z,MAAO/rB,KAAKgT,QAAQ+Y,MAAOoxC,UAAW,KACtC4G,SAAUssjB,EAAMrsjB,UAAWssjB,EAASnhe,aAAcnvJ,KAAKM,OAAO2tnB,eAAe9+d,cAE7E46U,EAAa/pe,KAAKuwnB,WAAa/9mB,EAAQ/V,QAAUuD,KAAKuwnB,SAAW/9mB,EAAQ/V,OAAS+V,EAAQ/V,OAC1Fste,IACAsmJ,EAAO,WACP79mB,KAAanR,MAAMC,KAAKtB,KAAKsvnB,KAAK9tnB,iBAAiB,iCACnD6lb,EAASlqX,UAAY,MACrBkqX,EAAStjX,SAAW,YAExB,IAAI/mE,EACAwznB,EACAj2jB,KACA4jf,EAAcn+iB,KAAK65d,UAAUl3d,cAAc,kBAC/C,GAAI6P,EAAQ/V,SAAWuD,KAAKuwnB,UAAapyE,EAAYnhjB,OAA+B,KAAtBmhjB,EAAYnhjB,MAAe,CACrF,IAAK,IAAIb,EAAI,EAAGA,EAAIqW,EAAQ/V,OAAQN,IAEhCq0nB,EAAO9xnB,MAAa1B,MADpBA,EAAQgD,KAAK+yB,OAAO8gB,GAAarhC,EAAQrW,GAAI,YAAY0W,aAAa,SAClCw0a,GAChCrqb,IAAUA,EAAMkQ,WAAWzQ,SAC3B+znB,EAAKzsjB,SAAWgma,EAAa,WAAa,SAE9Cxva,EAAK/1D,KAAKgsnB,GAEdxwnB,KAAKywnB,eAAel2jB,QAGpBv6D,KAAKkwnB,eAGblC,EAAe3ynB,UAAUo1nB,eAAiB,SAAUC,GAChD,IACIvzjB,EADAwzjB,EAAWD,EAAM,GAErB,IAAKjznB,EAAkBkznB,GAAW,CAC9BxzjB,EAAYwzjB,EAAS5rjB,YAAc4rjB,EAAS5rjB,YACxC,IAAIJ,GAAUgsjB,EAAS5kmB,MAAO4kmB,EAAS5sjB,SAAU4sjB,EAAS3znB,OAAQ2znB,EAAS3sjB,UAAW2sjB,EAASxhe,cACnG,IAAK,IAAI5rI,EAAI,EAAGA,EAAImtmB,EAAMj0nB,OAAQ8mB,IAC9B45C,OAAqChiE,IAAzBu1nB,EAAMntmB,GAAGwhD,YACjB5H,EAAUuzjB,EAAMntmB,GAAG45C,WAAWuzjB,EAAMntmB,GAAGwhD,aACvC5H,EAAUuzjB,EAAMntmB,GAAG45C,WAAWuzjB,EAAMntmB,GAAGwI,MAAO2kmB,EAAMntmB,GAAGwgD,SAAU2sjB,EAAMntmB,GAAGvmB,OAAQ0znB,EAAMntmB,GAAGygD,UAAW0sjB,EAAMntmB,GAAG4rI,cAEvH,IAAIlvJ,GACAk2D,OAAQ,YAAag6jB,iBAAkBO,EAAO3kmB,MAAO/rB,KAAKgT,QAAQ+Y,MAClEg5C,YAAaJ,GAAUG,GAAG3H,IAE9Bn9D,KAAKgT,QAAQvX,QAAQwE,KAG7B+tnB,EAAe3ynB,UAAUqznB,kBAAoB,WACzC,IAAIzmmB,EAAMjoB,KAAKyunB,OAAOzxnB,MAClB0+D,EAAQ17D,KAAKgT,QAAQ0oD,MAAMr8D,QAC3BuxnB,EAAgC,WAAtB5wnB,KAAKgT,QAAQtM,MAAqB8U,WAAWyM,GAAQzM,WAAWyM,GAAOA,EACjF87C,EAAW/jE,KAAKgT,QAAQtM,KAAO,aAAe,WAE9CyoJ,EAAenvJ,KAAKM,OAAO2tnB,eAAe9+d,aAC9Cyhe,EAAqB,KAAXA,QAA4Bz1nB,IAAXy1nB,OAAwBz1nB,EAAYy1nB,EAC/D,IAAIC,EACsB,YAAtB7wnB,KAAKgT,QAAQtM,YACEvL,IAAXy1nB,IACsF,IAAtF5wnB,KAAK+7U,kBAAkB,cAAcnmU,cAAcrX,QAAQqynB,EAAOh7mB,eAClEg7mB,EAAS,YAEOz1nB,IAAXy1nB,IACkF,IAAvF5wnB,KAAK+7U,kBAAkB,eAAenmU,cAAcrX,QAAQqynB,EAAOh7mB,iBACnEg7mB,EAAS,SAEbA,EAAoB,SAAXA,EACT7sjB,EAAW,SAEf,IAAI9jE,GACAmsL,YD1NmB,oBC2NnBojc,YAAaxvnB,KAAMyvnB,WAAYzvnB,KAAKgT,QAAQ+Y,MAAO8wC,OAAQ78D,KAAKgT,QAAQ6pD,OACxEkH,SAAUA,EAAUC,WAnBR,EAmB8BmrF,aAAcA,EAAc2he,kBAAmB,KACzFp1jB,MAAOA,GAIX,GAFA17D,KAAKM,OAAOkmB,QAAQmpmB,GAAoB1vnB,GACxC4wnB,EAAW,IAAIlsjB,GAAU3kE,KAAKgT,QAAQ+Y,MAAO9rB,EAAK8jE,SAAU6sjB,EAAQ3wnB,EAAK+jE,UAAW/jE,EAAKkvJ,cAC/D,SAAtBnvJ,KAAKgT,QAAQtM,MAAyC,aAAtB1G,KAAKgT,QAAQtM,KAAqB,CAGlE,GAFAkqnB,EAAS5wnB,KAAKqnnB,eAAezpb,SAAS31K,EAAKjoB,KAAKgT,QAAQk1mB,SAAUlonB,KAAKgT,QAAQtM,MAC/Eq9D,EAAW,QACPtmE,EAAkBmznB,IAAW3omB,EAAIxrB,OACjC,OAEJo0nB,EAAW/sjB,IACP/3C,MAAO/rB,KAAKgT,QAAQ+Y,MAAOg4C,SAAUA,EAAU/mE,MAAO4znB,EAAQ5sjB,WA/BtD,EAgCRmrF,aAAcA,IAGlBlnI,EAAIxrB,QACJi/D,EAAMmI,MAAMgtjB,GAEhB5wnB,EAAK6wnB,kBAAqBrznB,EAAkBwC,EAAK6wnB,mBAA8C,IAAzB7wnB,EAAK6wnB,kBAC3Ep1jB,EAAM00F,KAAKnwJ,EAAK6wnB,mBACZ9wnB,KAAKM,OAAOijE,YAAc,WAAYvjE,KAAKM,OAAOijE,WAClDvjE,KAAK+wnB,YAAY9wnB,EAAMy7D,GAGvB17D,KAAKgxnB,cAAct1jB,IAG3BsyjB,EAAe3ynB,UAAU41nB,qBAAuB,SAAUlzjB,GAMtD,IAAK,IAJDmzF,EAAa88d,EAAekD,aAAanzjB,GACzCozjB,KACAC,KACAC,EAAgBrxnB,KAAKM,OAAOgxnB,uBACvBlznB,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAK4zJ,GAAa9yJ,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACjE,IAAIkM,EAAOzH,EAAGzE,GACVqiE,EAAMyD,GAA2B55D,EAAM+mnB,GACvC5wjB,GACAzgE,KAAKM,OAAOyN,OAAOwjnB,IAAwBp0jB,UAAWi0jB,EAAYv0jB,OAAQ4D,IACtE2wjB,EAAWj0jB,UAAU+zF,WAAWz0J,QAChC00nB,EAAc3snB,KAAKmgE,GAAUG,GAAGssjB,EAAWj0jB,UAAU+zF,cAIzDige,EAAc3snB,KAAK0sJ,EAAW5mJ,IAGtC,OAAO6mnB,EAAc10nB,QAAUkoE,GAAUE,IAAIssjB,IAEjDnD,EAAe3ynB,UAAU00nB,WAAa,WAClC,IAAIr0jB,EAAQ,IAAI2H,IAChB3H,EAAQ17D,KAAKM,OAAOo7D,MAAMr8D,SACpBqxJ,gBACN,IAAIzwJ,GACAmsL,YAAaolc,GAA4BhC,YAAaxvnB,KAAM07D,MAAOA,EAAOo1jB,kBAAmB,MAEjG9wnB,KAAKM,OAAOkmB,QAAQmpmB,GAAoB1vnB,GACxCA,EAAK6wnB,kBAAqBrznB,EAAkBwC,EAAK6wnB,mBAA8C,IAAzB7wnB,EAAK6wnB,kBAC3Ep1jB,EAAM00F,KAAKnwJ,EAAK6wnB,mBACZ9wnB,KAAKM,OAAOijE,YAAc,WAAYvjE,KAAKM,OAAOijE,WAClDvjE,KAAK+wnB,YAAY9wnB,EAAMy7D,GAGvB17D,KAAKyxnB,qBAAqB/1jB,IAGlCsyjB,EAAe3ynB,UAAU01nB,YAAc,SAAU9wnB,EAAMy7D,GACnD,IAAI37D,EAAQC,KACFA,KAAK0xnB,aAAazxnB,EAAMy7D,GAC9Bm4H,QAAQP,KAAK,SAAUzyL,GACvBd,EAAM4xnB,YAAY9wnB,MAG1BmtnB,EAAe3ynB,UAAUq2nB,aAAe,SAAUzxnB,EAAMy7D,GACpD,IAAIptB,EACJA,EAAQtuC,KAAK4xnB,sBAAsBl2jB,GACnC,IAAIm2jB,EAAM,IAAIp+b,GAId,OAHAnlJ,EAAMi1B,WAAasujB,EAAIhviB,QACvBv0C,EAAM6nB,OAASl2D,EACfD,KAAKM,OAAOkmB,QAAQsrmB,GAAwBxjlB,GACrCujlB,GAGX7D,EAAe3ynB,UAAUu2nB,sBAAwB,SAAUl2jB,GACvD,IAAIq2jB,EAAS,IAAIjkc,GACblB,EAAK,IAAIppH,IAAc51C,IAAK,GAAIgmI,QAAS,IAAIk6B,KAC7Cx/I,EAAQyjlB,EAAOvlc,aAAaI,EAAIlxH,GAEpC,OADW7L,KAAKuB,MAAM9iB,EAAM9xC,OAIhCwxnB,EAAe3ynB,UAAUo2nB,qBAAuB,SAAU/1jB,GACtD,IAAI37D,EAAQC,KACZA,KAAKgT,QAAQuwD,WAAavjE,KAAKgT,QAAQuwD,sBAAsBC,GACzDxjE,KAAKgT,QAAQuwD,WAAa,IAAIC,GAAYxjE,KAAKgT,QAAQuwD,YAC3D,IAAIyujB,KACAC,KACAjynB,KAAKgT,QAAQ6pD,OAAO4qjB,oBACpBuK,EAAWxtnB,KAAKxE,KAAKgT,QAAQ6pD,OAAO0G,WAAWmrF,aAAa,IAAIrrF,KAChE4ujB,EAASztnB,KAAK,SAAUhI,GAAQ,OAAOuD,EAAMijE,eAAiBxmE,KAElEw1nB,EAAWxtnB,KAAKxE,KAAKgT,QAAQuwD,WAAWmrF,aAAahzF,IACrDu2jB,EAASztnB,KAAKxE,KAAK2xnB,YAAYr2nB,KAAK0E,OACpC,IAAI7D,EAAI,EACRymF,QAAQgyG,IAAIo9b,GAAY1+b,KAAK,SAAUzyL,GACnCA,EAAEzB,QAAQ,SAAU5C,GAChBy1nB,EAAS91nB,KAAKK,EAAKuC,aAI/BivnB,EAAe3ynB,UAAUs2nB,YAAc,SAAU9wnB,GAC7Cb,KAAKkynB,SAAWrxnB,EAChB,IAAI66D,EAAQ,IAAI2H,GAChB,GAAKrjE,KAAKgT,QAAQ+7mB,gBAAsB,OAAG,CAEvC,IAAK,IADDoD,KACKh2nB,EAAI,EAAGA,EAAI6D,KAAKgT,QAAQ+7mB,gBAAgBtynB,OAAQN,IAC/C6D,KAAKgT,QAAQ+7mB,gBAAgB5ynB,GAAG4vB,QAAU/rB,KAAKgT,QAAQ+Y,OACzD/rB,KAAKgT,QAAQ+7mB,gBAAgB5ynB,GAAG4vB,QAAU/rB,KAAKgT,QAAQorD,iBACvD+zjB,EAAK3tnB,KAAKxE,KAAKgT,QAAQ+7mB,gBAAgB5ynB,IAG/C,IAAIghE,EAAYn9D,KAAKixnB,qBAAqBkB,GACtCh1jB,GACAzB,EAAMmI,MAAM1G,GAIpB,IAAIp+D,EAAS,IAAIykE,GAAYxjE,KAAKkynB,UAAUjujB,aAAavI,GACrD+E,EAAMzgE,KAAKgT,QAAQ6pD,OACnBmF,EAAMgsjB,EAAeoE,YAAYrznB,EAAQiB,KAAKgT,QAAQ+Y,MAAO00C,EAAKzgE,KAAKgjE,gBAC3EhjE,KAAKqynB,aAAerwjB,EAAI0wF,YACxB1yJ,KAAKgsX,kBAAkB,MAAM,EAAMhsX,KAAKqynB,cACxCrynB,KAAKyunB,OAAOvsnB,QACZ,IAAIjC,GACAmsL,YAAakmc,GACb9C,YAAaxvnB,KAAMyvnB,WAAYzvnB,KAAKgT,QAAQ+Y,MAAO2jmB,WAAY1vnB,KAAKgT,QAAQtM,MAEhF1G,KAAKM,OAAOkmB,QAAQ+rmB,GAAuBtynB,IAE/C+tnB,EAAe3ynB,UAAU2wX,kBAAoB,SAAUtwT,EAAO8iE,EAAWj7D,GACrE5hD,GAAY3hB,KAAKqvnB,SAKjBrvnB,KAAKwynB,eACLxynB,KAAKyynB,kBAAkBlvjB,EAAYi7D,IAEvCwvf,EAAe3ynB,UAAU21nB,cAAgB,SAAUt1jB,GAC/C17D,KAAKyxnB,qBAAqB/1jB,IAE9BsyjB,EAAe3ynB,UAAUm3nB,aAAe,WACpCxynB,KAAKjB,UACL,IAAIo+D,EAAYn9D,KAAKixnB,qBAAqBjxnB,KAAKgT,QAAQ+7mB,iBACnDrzjB,EAAQ,IAAI2H,GACZlG,GACAzB,EAAMmI,MAAM1G,GAGhB,IAAK,IAAI/+D,EAAK,EAAGmhS,EADJ,IAAI/7N,GAAYxjE,KAAKkynB,UAAUjujB,aAAavI,GACrBt9D,EAAKmhS,EAAS9iS,OAAQ2B,IAAM,CAC5D,IAAI4jE,EAAMu9N,EAASnhS,GACnB4B,KAAKjB,OAAOlC,EAASmD,KAAKgT,QAAQ+Y,MAAOi2C,KAAQ,IAGzDgsjB,EAAe3ynB,UAAU8jH,aAAe,SAAUt+G,GAC9C,IAAIsG,EAAStG,EAAEsG,OACXzE,EAAOmxC,GAAa1sC,EAAQ,sBAIhC,GAHI0sC,GAAa1sC,EAAQ,gBACrBnH,KAAKwunB,eAAe3tnB,GAEpB6B,EAAM,CACN,IAAIkD,EAAYlD,EAAKC,cAAc,gBAC/BiD,EACA5F,KAAK0ynB,iBAAiB9snB,EAAU9B,UAAUK,SAAS,YAGnDu+D,GAAehgE,EAAK2R,eAExBrU,KAAK2ynB,0BACLjwnB,EAAKC,cAAc,iBAAiBT,UAG5C8rnB,EAAe3ynB,UAAUq3nB,gBAAkB,SAAUlgnB,GAEjD,IAAK,IAAIpU,EAAK,EAAGw0nB,KADDvxnB,MAAMC,KAAKtB,KAAKsvnB,KAAK9tnB,iBAAiB,aAClBpD,EAAKw0nB,EAASn2nB,OAAQ2B,IAAM,CAE5DykE,GADW+vjB,EAASx0nB,GACOoU,KAGnCw7mB,EAAe3ynB,UAAUwuH,WAAa,WAC9B7pH,KAAKM,OAAOU,QAAQ8C,UAAUK,SAAS,cACvCnE,KAAKkiE,UAAUlhE,QAAQ2B,cAAc,kBAAkBmB,UAAUS,OAAO,iBACxEvE,KAAKkiE,UAAUlhE,QAAQ2B,cAAc,UAAUT,UAGvD8rnB,EAAe3ynB,UAAUw3nB,eAAiB,SAAU71nB,EAAOwV,GACvD,IAAI9P,EAAO8P,EAAUxS,KAAKounB,SAASxsnB,WAAU,GACzC5B,KAAKqunB,UAAUzsnB,WAAU,GACzByR,EAAQ3Q,EAAKC,cAAc,YAG/B,GAFA0Q,EAAMrR,WAAavE,EAAkBT,IAAUA,EAAMkQ,WAAWzQ,OAASO,EACrEgD,KAAK+7U,kBAAkB,UACvB/7U,KAAKgT,QAAQ/D,SAAU,CACvBoE,EAAMrR,UAAY,GAClB,IAAI/B,KACJA,EAAKD,KAAKgT,QAAQ+Y,OAAS/uB,EAC3BqiE,GAAehsD,EAAOrT,KAAKgT,QAAQ/D,SAAShP,IAEhD,OAAOyC,GAEXsrnB,EAAe3ynB,UAAUs3nB,wBAA0B,WAC/C,IAAI/inB,EAAM5P,KAAKsvnB,KAAKl1mB,SAAS3d,OAAS,EAClC4G,KACAX,EAAO1C,KAAKsvnB,KAAK3snB,cAAc,gBAC/B6sI,EAAWxvI,KAAKsvnB,KAAK9tnB,iBAAiB,8BAA8B/E,OACpEyrH,EAAMloH,KAAKkiE,UAAUwjD,OAAO,GAChCwC,EAAIhK,UAAW,EACXtuG,IAAQ4/H,EACRnsI,GAAa,WAERmsI,EACLnsI,GAAa,WAGbA,GAAa,aACb6kH,EAAIhK,UAAW,GAEnBl+G,KAAKmunB,aAAejmgB,EAAIhK,SACxBgK,EAAIt8D,WACJvnD,GAAa3B,IAAQ,UAAW,SAAU,cAC1CiB,GAAUjB,GAAOW,IAErB2qnB,EAAe3ynB,UAAUo3nB,kBAAoB,SAAUj2nB,EAAMgiI,GACzD,IAAIs0f,EAAS3xnB,EAAc,OACvB+mH,EAAMloH,KAAKkiE,UAAUwjD,OAAO,GAEhC,GADA1lH,KAAKuwnB,SAAW/znB,EAAKC,OACjBD,EAAKC,OAAQ,CACb,IAAImJ,EAAYg9D,GAAmBxD,GAAO,QAASp/D,KAAK6ynB,eAAe7ynB,KAAK+7U,kBAAkB,cAAc,GAAQ,YACpHn2U,EAAUjD,cAAc,YAAYmB,UAAUM,IAAI,eAClD0unB,EAAOnxnB,YAAYiE,GACnB,IAAIu3D,EAAY,IAAIwH,GAAU,QAAS,QAAS3kE,KAAKgT,QAAQ+Y,OACzD/rB,KAAKgT,QAAQorD,kBACbjB,EAAYA,EAAU2H,GAAG,QAAS,QAAS9kE,KAAKgT,QAAQorD,kBAG5D,IAAK,IADD20jB,EAAgB,IAAIvvjB,GAAYxjE,KAAKgT,QAAQ+7mB,iBAAiB9qjB,cAAa,IAAIZ,IAAQQ,MAAM1G,IAAY1gE,OACpGN,EAAI,EAAGA,EAAIK,EAAKC,OAAQN,IAAK,CAClC,IAAIuD,EAAM0/D,GAAO,QACjBp/D,KAAK+yB,OAAOrzB,GAAO7C,EAAS,UAAWL,EAAKL,IAC5C,IAAIa,EAAQgD,KAAKqnnB,eAAexpb,OAAOhhM,EAASmD,KAAKgT,QAAQ+Y,MAAOvvB,EAAKL,IAAK6D,KAAKgT,QAAQg1mB,UAC3F8K,EAAOnxnB,YAAYihE,GAAmBljE,EAAKM,KAAK6ynB,eAAe71nB,EAAOgD,KAAKgznB,gBAAgBD,EAAe/ynB,KAAK+yB,OAAOrzB,KAAQ,aAElIM,KAAKsvnB,KAAKttnB,UAAY8wnB,EAAO9wnB,UAC7BhC,KAAK2ynB,0BACLzqgB,EAAIhK,UAAW,OAGf40gB,EAAOnxnB,YAAYR,EAAc,QAAUa,UAAWhC,KAAK+7U,kBAAkB,eAC7E/7U,KAAKsvnB,KAAKttnB,UAAY8wnB,EAAO9wnB,UAC7BkmH,EAAIhK,UAAW,EAEnBl+G,KAAKmunB,aAAejmgB,EAAIhK,SACxBgK,EAAIt8D,WACJ,IAAI3rD,GAASmsL,YAAaolc,GAA4BhC,YAAaxvnB,KAAMujE,WAAY/mE,GACrFwD,KAAKM,OAAOkmB,QAAQ+rmB,GAAuBtynB,GAC3CyiB,GAAY1iB,KAAKqvnB,UAErBrB,EAAe3ynB,UAAU23nB,gBAAkB,SAAUD,EAAe/1nB,GAChE,OAAKgD,KAAKs9d,aAAey1J,GAId/ynB,KAAKjB,OAAO/B,IAG3BgxnB,EAAeoE,YAAc,SAAU1ujB,EAAM33C,EAAO8wC,EAAQmG,GAOxD,IANA,IAEIhmE,EAFA6E,EAAM6hE,EAAKjnE,OACXsC,KAGAm0J,KACAhwF,EAAerG,GAAUA,EAAO4qjB,kBAC7B5lnB,KAGH,GAFA7E,EAAQ0mE,EAAK7hE,GACb7E,EAAQH,EAASkvB,EAAO/uB,KACnBS,EAAkBT,IACbA,KAASk2J,GAAS,CACpB,IAAIn2J,KACJA,EAAW,QAAIC,EACfk2J,EAAOl2J,IAAS,EAEhBI,EAAS2uB,EAAOtuB,EADhBT,EAAQkmE,EAAermE,EAASggE,EAAOuB,gBAAiB2E,GAAelG,KAAY7/D,EAAOgmE,GAAgB,IAAMhmE,GACrE,KAAOA,EAAOD,GACzDgC,EAAOyF,KAAKzH,GAIxB,OAAO0iE,GAASszB,MAAMtzB,GAAS5nC,KAAK94B,EAAQgtB,EAAO0zC,GAASoyF,aAAc,YAE9Em8d,EAAekD,aAAe,SAAUnzjB,GAIpC,IAAK,IAHDo0jB,EAAOnE,EAAeoE,YAAYr0jB,EAAS,SAAS20F,YACpDvrH,KACAi2B,KACKjhE,EAAI,EAAGA,EAAIg2nB,EAAK11nB,OAAQN,IAEH,KAD1BgrC,EAAa,IAAIq8B,GAAYzF,GAASkG,cAAa,IAAIZ,IAAQQ,MAAM,QAAS,QAASsujB,EAAKh2nB,GAAG4vB,SAChFtvB,SACX2gE,EAAK+0jB,EAAKh2nB,GAAG4vB,OAASiimB,EAAeiF,kBAAkB9rlB,IAG/D,OAAOi2B,GAEX4wjB,EAAeiF,kBAAoB,SAAUd,GACzC,IACIh1jB,EACAv+D,EAFAiD,EAAMswnB,EAAOA,EAAK11nB,OAAS,GAG/BmC,EAAQovnB,EAAekF,iBAAiBf,EAAK,KACvChje,cAAgB1xJ,EAAkBmB,EAAMuwJ,eAAgBvwJ,EAAMuwJ,aAEhEhyF,EADe,SAAfv+D,EAAM8H,MAAkC,aAAf9H,EAAM8H,KACnBo9D,GAAiBllE,GAGjBA,EAAMmmE,YAAcnmE,EAAMmmE,YAClC,IAAIJ,GAAU/lE,EAAMmtB,MAAOntB,EAAMmlE,SAAUnlE,EAAM5B,OAAQgxnB,EAAemF,aAAav0nB,GAAQA,EAAMuwJ,cAE3G,IAAK,IAAIzkE,EAAI,EAAGA,EAAI7oF,EAAK6oF,IACrByniB,EAAKzniB,GAAKsjiB,EAAekF,iBAAiBf,EAAKzniB,IAC3C7oF,EAAM,GAAK6oF,EAAI,GAA2B,OAAtByniB,EAAKzniB,GAAGvtB,UACP,SAAjBg1jB,EAAKzniB,GAAGhkF,MAAoC,aAAjByrnB,EAAKzniB,GAAGhkF,KACnCy2D,EAAU+zF,WAAW1sJ,KAAKs/D,GAAiBqujB,EAAKzniB,KAGhDvtB,EAAU+zF,WAAW1sJ,KAAK,IAAImgE,GAAUwtjB,EAAKzniB,GAAG3+D,MAAOommB,EAAKzniB,GAAG3mB,SAAUoujB,EAAKzniB,GAAG1tF,OAAQgxnB,EAAemF,aAAahB,EAAKzniB,IAAKyniB,EAAKzniB,GAAGykE,eAKvIhyF,EADiB,SAAjBg1jB,EAAKzniB,GAAGhkF,MAAoC,aAAjByrnB,EAAKzniB,GAAGhkF,KACvBy2D,EAAWg1jB,EAAKzniB,GAAY,WAAG5mB,GAAiBqujB,EAAKzniB,IAAKyniB,EAAKzniB,GAAGykE,cAGlEgje,EAAKzniB,GAAG3lB,YAChB5H,EAAUg1jB,EAAKzniB,GAAGvtB,WAAWg1jB,EAAKzniB,GAAG3lB,aACrC5H,EAAWg1jB,EAAKzniB,GAAY,WAAGyniB,EAAKzniB,GAAG3+D,MAAOommB,EAAKzniB,GAAG3mB,SAAUoujB,EAAKzniB,GAAG1tF,OAAQgxnB,EAAemF,aAAahB,EAAKzniB,IAAKyniB,EAAKzniB,GAAGykE,cAI9I,OAAOhyF,GAAa,MAExB6wjB,EAAemF,aAAe,SAAUnslB,GACpC,QAAIvpC,EAAkBupC,EAAOg9B,YAIlBh9B,EAAOg9B,WAGtBgqjB,EAAekF,iBAAmB,SAAUlslB,GAIxC,OAHqB,SAAhBA,EAAOtgC,MAAmC,aAAhBsgC,EAAOtgC,MAAuBsgC,EAAOhqC,iBAAiBgjB,QACjFgnB,EAAOtgC,KAAOsgC,EAAOtgC,MAAQ,QAE1BsgC,GAMXgnlB,EAAe3ynB,UAAUkkC,cAAgB,WACrC,MAAO,kBAEJyulB,KCvqBP95S,GAAsB,WAKtB,SAASA,EAAK5zU,EAAQghE,GAClBthE,KAAKoznB,WAAcC,WAAW,EAAOC,SAAU,KAAMvgiB,UACrD/yF,KAAKM,OAASA,EACdN,KAAKshE,eAAiBA,EACtBthE,KAAKm0U,kBACDn0U,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAOslF,GAAG2tiB,GAAkBvznB,KAAKwznB,QAASxznB,MAC/CA,KAAKM,OAAOslF,GAAG6tiB,GAAoBzznB,KAAK0znB,WAAY1znB,MACpDA,KAAKM,OAAOslF,GAAG+tiB,GAA2B3znB,KAAKm0U,gBAAiBn0U,MAChEA,KAAKM,OAAOslF,GAAGguiB,GAAgB5znB,KAAKsS,QAAStS,MAC7CA,KAAKM,OAAOslF,GAAGiuiB,GAAmB7znB,KAAK8znB,YAAa9znB,MACpDA,KAAKM,OAAOslF,GAAGmuiB,GAAwB/znB,KAAK2sU,QAAS3sU,OAgZzD,OA1YAk0U,EAAK74U,UAAU84U,gBAAkB,WAC7B,IAAI6/S,EAAOh0nB,KAAKM,OAChBN,KAAKwuJ,YAAcwle,EAAKzwjB,sBAAsBC,GAAcwwjB,EAAKzwjB,WAC5D9lE,EAAkBu2nB,EAAKzwjB,YAAc,IAAIC,GAAgB,IAAIA,GAAYwwjB,EAAKzwjB,YACnFywjB,EAAKt4jB,MAAQs4jB,EAAKt4jB,iBAAiB2H,GAAQ2wjB,EAAKt4jB,MAAQ,IAAI2H,IAOhE6wQ,EAAK74U,UAAUq1U,cAAgB,SAAUujT,GACrC,IACIv4jB,EADO17D,KAAKM,OACCo7D,MAAMr8D,QAOvB,OANAW,KAAKk5d,YAAYx9Z,GACjB17D,KAAKk0nB,YAAYx4jB,GACjB17D,KAAKm0nB,eAAez4jB,GACpB17D,KAAKo0nB,UAAU14jB,GACf17D,KAAKq0nB,UAAU34jB,EAAOu4jB,GACtBj0nB,KAAKs0nB,WAAW54jB,GACTA,GAEXw4Q,EAAK74U,UAAU84nB,eAAiB,SAAUz4jB,EAAO64jB,GAO7C,OANAv0nB,KAAKM,OAAOo/D,WAAWtgE,QAAQ,SAAUshE,GACrCA,EAAI3C,QAAQ3+D,QAAQ,SAAUy9D,IACdA,EAAOn2D,gBAAgBlI,MAAQq+D,EAAOn2D,MAAQm2D,EAAOn2D,OAC3DtH,QAAQ,SAAUsH,GAAQ,OAAOg1D,EAAMi1F,UAAUjqJ,EAAKkP,cAAeinD,EAAO9wC,aAGnF2vC,GAEXw4Q,EAAK74U,UAAUg5nB,UAAY,SAAU34jB,EAAOu4jB,GACxC,IAAID,EAAOh0nB,KAAKM,OAWhB,OAVK0znB,EAAKQ,aAAeR,EAAKz3b,wBAAsC,IAAb03b,IACnDD,EAAKzikB,aAAa+hM,YAAcjnP,KAAKC,IAAI,EAAG0nnB,EAAKzikB,aAAa+hM,aAC1D0gY,EAAKzikB,aAAagvN,WAAa,IAC/ByzW,EAAKzikB,aAAagvN,UAAY,GAE9ByzW,EAAKzikB,aAAa4+F,UAAY,IAC9B6je,EAAKzikB,aAAa4+F,SAAW,IAEjCz0F,EAAMu0F,KAAK+je,EAAKzikB,aAAa+hM,YAAa0gY,EAAKzikB,aAAa4+F,WAEzDz0F,GAEXw4Q,EAAK74U,UAAUi5nB,WAAa,SAAU54jB,GAClC,IAAIs4jB,EAAOh0nB,KAAKM,OAChB,GAAI0znB,EAAKlN,eAAiBkN,EAAKS,cAAc12jB,QAAQthE,OAEjD,IAAK,IADDshE,EAAUi2jB,EAAKS,cAAc12jB,QACxB5hE,EAAI,EAAG0F,EAAMk8D,EAAQthE,OAAQN,EAAI0F,EAAK1F,IAAK,CAChD,IAAI0gE,EAAS78D,KAAK00nB,iBAAiB32jB,EAAQ5hE,IACvCw4nB,EAAW93jB,EAAOoqjB,oBAClBjrlB,EAAS6gC,EAAO7gC,OAChB24lB,EACAj5jB,EAAMq3B,MAAMh1B,EAAQ5hE,GAAI6D,KAAK40nB,kBAAkBt5nB,KAAK0E,MAAOg8B,GAG3D0/B,EAAMq3B,MAAMh1B,EAAQ5hE,GAAI,MAIpC,OAAOu/D,GAEXw4Q,EAAK74U,UAAU+4nB,UAAY,SAAU14jB,GACjC,IAAIs4jB,EAAOh0nB,KAAKM,OAChB,IAAK0znB,EAAKpN,cAAgBoN,EAAKlN,gBAAkBkN,EAAKhF,aAAajxjB,QAAQthE,OAAQ,CAG/E,IAAK,IAFDshE,EAAUi2jB,EAAKhF,aAAajxjB,QAC5B82jB,KACK14nB,EAAI4hE,EAAQthE,OAAS,EAAGN,GAAK,EAAGA,IAAK,CAC1C,IAAIskE,EAAMzgE,KAAK00nB,iBAAiB32jB,EAAQ5hE,GAAG4vB,OACvC00C,GACAA,EAAIqnjB,iBAAiB/pjB,EAAQ5hE,GAAGq5B,WAEpC,IAAIw5H,EAAKvuF,EAAIknjB,eAAiB3nnB,KAAK+3T,WAAat3P,EAAIknjB,aAAarsnB,KAAKmlE,GAAO1C,EAAQ5hE,GAAGq5B,WAC1B,IAA1Dw+lB,EAAKS,cAAc12jB,QAAQx/D,QAAQw/D,EAAQ5hE,GAAG4vB,OAC9C2vC,EAAM+zF,OAAOhvF,EAAI10C,MAAOijI,GAGxB6le,EAAQrwnB,MAAOgxB,UAAWw5H,EAAIjjI,MAAO00C,EAAI10C,QAGxC5vB,EAAI,EAAb,IAAK,IAAW0F,EAAMgznB,EAAQp4nB,OAAQN,EAAI0F,EAAK1F,IAC3Cu/D,EAAM+zF,OAAOole,EAAQ14nB,GAAG4vB,MAAO8omB,EAAQ14nB,GAAGq5B,WAGlD,OAAOkmC,GAEXw4Q,EAAK74U,UAAU64nB,YAAc,SAAUx4jB,GACnC,IAAI37D,EAAQC,KACR80nB,EAAY90nB,KAAKM,OAAOy0nB,eACxBnpmB,EAASkpmB,EAAUlpmB,OAAOnvB,OAASq4nB,EAAUlpmB,OAAS5rB,KAAKM,OAAO00nB,aAAap9lB,IAAI,SAAUwzG,GAAK,OAAOA,EAAEr/G,QAC3GolmB,KAoBJ,OAnBInxnB,KAAKM,OAAOy0nB,eAAe13nB,IAAIZ,SAE3BuD,KAAKM,OAAOgxnB,uBAAuB70nB,QACnCmvB,EAAOxsB,QAAQ,SAAUqwnB,GACrB,IAAI5yjB,EAAS98D,EAAM20nB,iBAAiBjF,GAEhC5yjB,EAAO4qjB,kBACP0J,EAAgBpxnB,EAAMk1nB,mBAAmBp4jB,EAAQs0jB,GAGjDA,EAAc3snB,KAAK,IAAImgE,GAAU9H,EAAO9wC,MAAO+omB,EAAU/wjB,SAAU+wjB,EAAUz3nB,IAAKy3nB,EAAUn6jB,WAAYm6jB,EAAU3le,iBAG1HzzF,EAAMmI,MAAMc,GAAUG,GAAGqsjB,KAGzBz1jB,EAAM0zF,OAAO0le,EAAUz3nB,IAAKuuB,EAAQkpmB,EAAU/wjB,SAAU+wjB,EAAUn6jB,WAAYm6jB,EAAU3le,eAGzFzzF,GAEXw4Q,EAAK74U,UAAU69d,YAAc,SAAUx9Z,EAAOmB,EAAQq4jB,GAClD,IAAIlB,EAAOh0nB,KAAKM,OACZ6wnB,KAEAgE,KACA9D,EAAgBrxnB,KAAKM,OAAOgxnB,uBAChC,GAAI0C,EAAK7+J,gBAAkB6+J,EAAK/F,eAAelwjB,QAAQthE,OAAQ,CAG3D,IAAK,IAFDshE,EAAUlB,GAAkBm3jB,EAAK/F,eAAelwjB,QAChDq3jB,KACKh3nB,EAAK,EAAGyE,EAAKmxnB,EAAKj2jB,QAAS3/D,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAEtDg3nB,GADI30jB,EAAM59D,EAAGzE,IACD2tB,OAAS00C,EAAIz5B,OAAOtgC,KAAO+5D,EAAIz5B,OAAOtgC,KAAOstnB,EAAK/F,eAAevnnB,KAIjF,IAAK,IAFD2unB,KACAC,KACKrxnB,EAAK,EAAGsjX,EAAYxpT,EAAS95D,EAAKsjX,EAAU9qX,OAAQwH,IAAM,CAEpC,aAAvBmxnB,GADA30jB,EAAM8mT,EAAUtjX,IACJ8nB,QAAgD,UAAvBqpmB,EAAQ30jB,EAAI10C,OACjDspmB,EAAa7wnB,KAAKi8D,GAGlB60jB,EAAgB9wnB,KAAKi8D,GAG7B,GAAI40jB,EAAa54nB,OAEb,IAAK,IADD84nB,EAAiBvH,GAAekD,aAAamE,GACxC5qnB,EAAK,EAAG8mU,EAAKjzU,OAAOhB,KAAKi4nB,GAAiB9qnB,EAAK8mU,EAAG90U,OAAQgO,IAAM,CACrE,IAAIH,EAAOinU,EAAG9mU,IACVg2D,EAAMyD,GAA2B55D,EAAM+mnB,MAC/B6D,GACR/D,EAAgBnxnB,KAAKi1nB,mBAAmBx0jB,EAAK0wjB,GAC7CgE,EAAa3wnB,KAAKi8D,IAGlB0wjB,EAAc3snB,KAAK+wnB,EAAejrnB,IAI9C,GAAIgrnB,EAAgB74nB,OAChB,IAAK,IAAI+0U,EAAK,EAAGgkT,EAAoBF,EAAiB9jT,EAAKgkT,EAAkB/4nB,OAAQ+0U,IAAM,CACvF,IAAI/wQ,EAAM+0jB,EAAkBhkT,GACxBikT,EAAWz1nB,KAAK00nB,iBAAiBj0jB,EAAI10C,QACrCm4C,GAA2BzD,EAAI10C,MAAO/rB,KAAKM,OAAOgxnB,wBAClDoE,EAAQD,EAAS/unB,KACjBw9D,GAA2BzD,EAAI10C,MAAOslmB,KAAmB6D,GACzDC,EAAa3wnB,KAAKi8D,GAClB0wjB,EAAgBnxnB,KAAKi1nB,mBAAmBQ,EAAUtE,IAGpC,SAAVuE,GAA8B,aAAVA,EACpBvE,EAAc3snB,KAAK,IAAImgE,GAAUlE,EAAI10C,MAAO00C,EAAIsD,SAAUtD,EAAIzjE,OAAQyjE,EAAIuD,UAAWhkE,KAAKM,OAAO2tnB,eAAe9+d,eAGhHgie,EAAc3snB,KAAKs/D,GAAiBrD,IAKhD0wjB,EAAc10nB,OACdi/D,EAAMmI,MAAMc,GAAUE,IAAIssjB,IAG1BnxnB,KAAKM,OAAOyN,OAAO4nnB,OAG3B,OAAOj6jB,GAEXw4Q,EAAK74U,UAAU45nB,mBAAqB,SAAUx0jB,EAAK0wjB,GAC/C,IAAIC,KAOJ,OANI3wjB,IACAzgE,KAAKM,OAAOyN,OAAOwjnB,IAAwBp0jB,UAAWi0jB,EAAYv0jB,OAAQ4D,IACtE2wjB,EAAWj0jB,UAAU+zF,WAAWz0J,QAChC00nB,EAAc3snB,KAAK4snB,EAAWj0jB,YAG/Bg0jB,GAQXj9S,EAAK74U,UAAUsxU,QAAU,SAAU1sU,EAAMy7D,GACrC,IAAI37D,EAAQC,UACC,IAATC,IAAmBA,GAASmsL,YAAa,KAC7C,IAAI/uL,EAAM2C,KAAK41nB,OAAO31nB,EAAK+iE,gBACvB1kE,OAAOhB,KAAK2C,EAAK+iE,gBAAgBvmE,OACjCwD,EAAK+iE,eAAiBhjE,KAAKM,OAAOu1nB,2BACtC,GAAI71nB,KAAKM,OAAOijE,YAAc,WAAYvjE,KAAKM,OAAOijE,WAAY,CAE9D,OADUvjE,KAAK0xnB,aAAazxnB,EAAMy7D,EAAOr+D,GAC9Bw2L,QAGX,IAAIiic,OAAO,EACX,OAAQ71nB,EAAKmsL,aACT,IAAK,SACD1wH,EAAQA,GAAgB17D,KAAK0wU,gBAE7B,GAAY,IADFpyU,OAAOhB,KAAK2C,EAAKzD,MAAMC,OAE7Bq5nB,EAAO91nB,KAAKwuJ,YAAYjqJ,OAAOlH,EAAK4C,EAAKzD,KAAK,GAAI,KAAMk/D,OAEvD,CACD,IAAImxH,GACAC,gBACAE,kBACAD,mBAEJF,EAAQG,eAAiB/sL,EAAKzD,KAC9Bs5nB,EAAO91nB,KAAKwuJ,YAAYhnJ,YAAYqlL,EAASxvL,EAAK,KAAMq+D,EAAMg1F,iBAElE,MACJ,IAAK,OACDh1F,EAAQA,GAAgB17D,KAAK0wU,gBAC7BzwU,EAAKgS,MAAQxU,EAAkBwC,EAAKgS,OAAS,EAAIhS,EAAKgS,MACtD6jnB,EAAO91nB,KAAKwuJ,YAAY75C,OAAO10G,EAAKzD,KAAM,KAAMk/D,EAAOz7D,EAAKgS,OAGpE,OAAI6jnB,GAASt3nB,MAAMC,QAAQq3nB,IAAUA,EAAKnvnB,eAAe,kBAM9C3G,KAAK0uJ,aAAahzF,GALlBo6jB,EAAKxic,KAAK,SAAUv0L,GACvB,OAAOgB,EAAM2uJ,aAAahzF,MAQ1Cw4Q,EAAK74U,UAAUqzJ,aAAe,SAAUhzF,GACpC,IAAI37D,EAAQC,KACZ,GAAIA,KAAKwuJ,YAAYnsJ,MAAO,CACxB,IAAI0znB,EAAa,IAAItic,GASrB,OARYzzL,KAAKwuJ,YAAYnsJ,MACvBixL,KAAK,SAAUzyL,GACjBd,EAAMyuJ,YAAYE,aAAahzF,GAAO43H,KAAK,SAAUv0L,GACjDg3nB,EAAWlziB,QAAQ9jF,OAExB41L,MAAM,SAAU9zL,GACfk1nB,EAAWjziB,OAAOjiF,KAEfk1nB,EAAWlic,QAGlB,OAAO7zL,KAAKwuJ,YAAYE,aAAahzF,IAG7Cw4Q,EAAK74U,UAAUu5nB,kBAAoB,SAAU53nB,EAAO+uB,GACrC/rB,KAAKM,OAAhB,IACIghE,EAAiBthE,KAAKshE,eACtBzE,EAAS78D,KAAK00nB,iBAAiB3omB,GAC/B4qD,EAAO35E,EACN6/D,EAAOn2D,OACRm2D,EAAOn2D,KAAOiwE,EAAK/S,OAAU+S,EAAKvQ,WAAa,GAAKuQ,EAAKrQ,aAAe,GACpEqQ,EAAKoB,aAAe,GAAKpB,EAAK64H,kBAAoB,EAAI,WAAa,iBAEvE/xM,EAAkBo/D,EAAOkrjB,iBACzB1mjB,GAAaC,EAAgBzE,GAGjC,OADgBi+iB,GAAez/mB,UAAUwiM,OAAO7gM,EAAO6/D,EAAOkrjB,iBAGlE7zS,EAAK74U,UAAUy4nB,YAAc,SAAU7znB,GACnC,IAAIy7D,EAAQ17D,KAAK0wU,gBACb78I,EAAU,KAEVx2L,EAAM2C,KAAK41nB,OAAO31nB,EAAK+iE,gBACvB1kE,OAAOhB,KAAK2C,EAAK+iE,gBAAgBvmE,OAASwD,EAAK+iE,eAC/ChjE,KAAKM,OAAOu1nB,2BAIhB,OAHI71nB,KAAKM,OAAOijE,YAAc,WAAYvjE,KAAKM,OAAOijE,YAClDvjE,KAAK0xnB,aAAazxnB,EAAMy7D,EAAOr+D,GAE3B4C,EAAKmsL,aACT,IAAK,OACDyH,EAAU7zL,KAAKwuJ,YAAYnvG,OAAOhiD,EAAK4C,EAAKzD,KAAM,KAAMwD,KAAK0wU,iBAGrEzwU,EAAO,QAAI4zL,EACX7zL,KAAKM,OAAOyN,OAAOionB,GAAmB/1nB,IAG1Ci0U,EAAK74U,UAAUmM,YAAc,SAAUqlL,EAASxvL,GAC5C,IAAIq+D,EAAQ17D,KAAK0wU,gBAAgBhgL,gBACjC,GAAI,WAAY1wJ,KAAKM,OAAOijE,WAAY,CAE5BvjE,KAAK4xnB,sBAAsBl2jB,GACnC,IAAIq5H,EAAO,IAAItB,GACXxzL,GACAmsL,YAAa,YAAaS,QAASA,EAASxvL,IAAKA,EAAKq+D,MAAOA,EAC7DwoW,QAASnvO,EAAKlyG,SAIlB,OAFA7iF,KAAKi2nB,UAAW5C,WAAW,EAAMC,SAAUv+b,EAAKlyG,UAChD7iF,KAAKM,OAAOkmB,QAAQ0vmB,GAA0Bj2nB,GACvC80L,EAAKlB,QAIZ,OADc7zL,KAAKwuJ,YAAYhnJ,YAAYqlL,EAASxvL,EAAK,KAAM2C,KAAK0wU,gBAAgBhgL,kBAI5FwjL,EAAK74U,UAAUu6nB,OAAS,SAAUt4nB,GAC9B,GAAIA,GAAQA,EAAKb,OACb,OAAOa,EAAK,IAKpB42U,EAAK74U,UAAU08T,SAAW,WACtB,OAA+C,IAAxC/3T,KAAKwuJ,YAAYjrF,WAAWE,cAAwDtoE,IAApC6E,KAAKwuJ,YAAYjrF,WAAW31C,KAEvFsmT,EAAK74U,UAAUm4nB,QAAU,SAAU3ynB,GAC/B,IAAK,IAAI1E,EAAI0E,EAAE6xJ,QAAQj2J,OAAQN,EAAI,EAAGA,IAClC6D,KAAKwuJ,YAAYjrF,WAAWG,KAAKr7C,OAAOxnB,EAAEs1nB,QAAS,EAAGt1nB,EAAE6xJ,QAAQv2J,EAAI,KAG5E+3U,EAAK74U,UAAUq4nB,WAAa,SAAU7ynB,GAClC,IAAI6iE,EAAO1jE,KAAKwuJ,YAAYjrF,WAAWG,KACvC1jE,KAAKwuJ,YAAYjrF,WAAWG,KAAOA,EAAK18B,OAAO,SAAUhqC,EAAOiV,GAAS,OAAqC,IAA9BpR,EAAE6xJ,QAAQn0J,QAAQvB,MAEtGk3U,EAAK74U,UAAUq5nB,iBAAmB,SAAU3omB,GACxC,IAAI00C,EACJ,OAAQzgE,KAAKM,OAAkB,YAAE87B,KAAK,SAAUygC,GAE5C,OADA4D,EAAM5D,EACCA,EAAO9wC,QAAUA,KACtB00C,GAEVyzQ,EAAK74U,UAAUiX,QAAU,WACjBtS,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAO0lF,IAAIutiB,GAAkBvznB,KAAKwznB,SACvCxznB,KAAKM,OAAO0lF,IAAIytiB,GAAoBzznB,KAAK0znB,YACzC1znB,KAAKM,OAAO0lF,IAAI2tiB,GAA2B3znB,KAAKm0U,iBAChDn0U,KAAKM,OAAO0lF,IAAI2tiB,GAA2B3znB,KAAKsS,SAChDtS,KAAKM,OAAO0lF,IAAI6tiB,GAAmB7znB,KAAK8znB,aACxC9znB,KAAKM,OAAO0lF,IAAI+tiB,GAAwB/znB,KAAK2sU,WAEjDuH,EAAK74U,UAAUogU,SAAW,WACtB,OAAOz7T,KAAKoznB,WAEhBl/S,EAAK74U,UAAU46nB,SAAW,SAAU3nlB,GAChC,OAAOtuC,KAAKoznB,UAAY9klB,GAE5B4lS,EAAK74U,UAAUu2nB,sBAAwB,SAAUl2jB,GAC7C,IAAIq2jB,EAAS,IAAIjkc,GACblB,EAAK,IAAIppH,IAAc51C,IAAK,GAAIgmI,QAAS,IAAIk6B,KAC7Cx/I,EAAQyjlB,EAAOvlc,aAAaI,EAAIlxH,GAEpC,OAAOh9D,EADImxD,KAAKuB,MAAM9iB,EAAM9xC,MACR8xC,EAAMkgJ,UAE9B0lJ,EAAK74U,UAAUq2nB,aAAe,SAAUzxnB,EAAMy7D,EAAOr+D,GACjD,IACIixC,EADAvuC,EAAQC,KAERo2nB,EAAWn2nB,EACfquC,EAAQtuC,KAAK4xnB,sBAAsBl2jB,GACnC,IAAIm2jB,EAAM,IAAIp+b,GACVsB,EAAO,IAAItB,GACf,QAAyBt4L,IAArB8E,EAAKmsL,cAA8D,IAAjCpsL,KAAKoznB,UAAUiD,cAEjD,GADA/nlB,EAAM6nB,OAASl2D,EACU,SAArBA,EAAKmsL,aAA+C,WAArBnsL,EAAKmsL,YAA0B,CAC9D,IAAIkqc,EAAWr2nB,EACfq2nB,EAASj5nB,IAAMA,EACfi5nB,EAASholB,MAAQA,EACjBtuC,KAAKi2nB,UAAW5C,WAAW,EAAMC,SAAUv+b,EAAKlyG,UAChDuziB,EAASlyN,QAAUnvO,EAAKlyG,QACxB7iF,KAAKM,OAAOkmB,QAAQ0vmB,GAA0BI,GAC9Cvhc,EAAKlB,QAAQP,KAAK,SAAUzyL,GACxBd,EAAMk2nB,UAAW5C,WAAW,EAAMC,SAAUzB,EAAIhviB,QAASkQ,MAAOzkD,EAAMykD,MAAOrzB,WAAYpxB,EAAMoxB,aAC/F3/D,EAAMO,OAAOkmB,QAAQsrmB,GAAwBxjlB,UAIjDtuC,KAAKi2nB,UAAW5C,WAAW,EAAMC,SAAUzB,EAAIhviB,QAASkQ,MAAOzkD,EAAMykD,MAAOrzB,WAAYpxB,EAAMoxB,aAC9F1/D,KAAKM,OAAOkmB,QAAQsrmB,GAAwBxjlB,QAIhDtuC,KAAKi2nB,aACLpE,EAAIhviB,QAAQ7iF,KAAKM,OAAOijE,YAE5B,OAAOsujB,GAEJ39S,KCvaP1T,GAAqB,WACrB,SAASA,EAAIxtT,GACThV,EAAMgC,KAAMgT,GAQhB,OANAwtT,EAAInlU,UAAUgE,MAAQ,WAClB,IAAIqhE,EAAM,IAAI8/P,MAGd,OAFAxiU,EAAM0iE,EAAK1gE,MACX0gE,EAAIoB,MAAQ9hE,KAAK8hE,MAAMlqC,IAAI,SAAUqrC,GAAQ,OAAOA,EAAK5jE,UAClDqhE,GAEJ8/P,KCVPisK,GAAsB,WACtB,SAASA,EAAKz5d,GACVhT,KAAKu2nB,WAAY,EACjBv4nB,EAAMgC,KAAMgT,GAOhB,OALAy5d,EAAKpxe,UAAUgE,MAAQ,WACnB,IAAI4jE,EAAO,IAAIwpa,MAEf,OADAzue,EAAMilE,EAAMjjE,MACLijE,GAEJwpa,KCRP+pJ,GAAiC,WACjC,SAASA,EAAgBl1jB,EAAgBhhE,GACrCN,KAAKshE,eAAiBA,EACtBthE,KAAKM,OAASA,EAsFlB,OApFAk2nB,EAAgBn7nB,UAAU0wG,OAAS,SAAU0qhB,EAAU/1jB,EAAKvkE,EAAGw6Q,GAM3D,IAAK,IAJD+/W,EADmB12nB,KAAKshE,eAAeE,WAAW,uBAClBm1jB,gBAAgBj2jB,EAAIoB,MAAM3lE,GAAG6knB,UAAYhI,GAAS9kS,MAClFvxQ,EAAOjC,EAAIoB,MAAM3lE,GAAGy6nB,SAAWl2jB,EAAIoB,MAAM3lE,GAAGy6nB,SAC3CH,EAAS/gW,QAAUv5R,GAAMukE,EAAIoB,MAAMrlE,OAASg6nB,EAAS/gW,QAAUh1N,EAAIoB,MAAMrlE,OAASN,EACnFq7B,EAAU,EACLjU,EAAIpnB,EAAI,EAAGonB,EAAIpnB,EAAIwmE,GAAQp/C,EAAIm9C,EAAIoB,MAAMrlE,OAAQ8mB,KACzB,IAAzBm9C,EAAIoB,MAAMv+C,GAAGiU,QACbA,IAGAkpC,EAAIoB,MAAMv+C,GAAGgzmB,WAAY,EAGjC,GAAI/+lB,EAAU,EAAG,CACb,IAASjU,EAAIpnB,EAAIwmE,EAAMp/C,EAAIpnB,EAAIwmE,EAAOnrC,GAAWjU,EAAIm9C,EAAIoB,MAAMrlE,OAAQ8mB,IACnEm9C,EAAIoB,MAAMv+C,GAAGgzmB,WAAY,EAEzBp6nB,EAAIwmE,EAAOnrC,GAAWkpC,EAAIoB,MAAMrlE,SAChCkmE,GAASxmE,EAAIwmE,EAAOnrC,EAAWkpC,EAAIoB,MAAMrlE,QAcjD,OAXIikE,EAAIoB,MAAM3lE,GAAGy6nB,WACbl2jB,EAAIlkE,KAAKi6nB,EAAS55jB,OAAO9wC,OAAS20C,EAAIoB,MAAM3lE,GAAGyuf,SAC/Cj0O,EAAK+/W,EAAa3qhB,OAAOrrC,EAAIoB,MAAM3lE,GAAIukE,EAAIlkE,MAAQyV,MAAUxU,EAAkBijE,EAAIzuD,OAAgC,GAAvByuD,EAAIzuD,MAAM/E,cAEtGy1D,EAAO,GACPj/D,EAAWizQ,GAAM+e,QAAW/yN,EAAKz1D,WAAY2pnB,eAAgBl0jB,EAAKz1D,cAElElN,KAAKM,OAAOw2nB,4BAA+Bp2jB,EAAIoB,MAAM3lE,GAAGy6nB,UACvD52nB,KAAKymO,YAAYgwZ,EAAS55jB,OAAO9wC,MAAO0qmB,EAASj6nB,KAAKi6nB,EAAS55jB,OAAO9wC,SACvE/rB,KAAK+2nB,iBAAiBN,EAAS55jB,OAAO9wC,MAAO0qmB,EAASj6nB,KAAKi6nB,EAAS55jB,OAAO9wC,OAAQ0qmB,EAAS/gW,SAEzF/e,GAEX6/W,EAAgBn7nB,UAAU07nB,iBAAmB,SAAUC,EAAOx6nB,EAAMmmE,GAChE3iE,KAAKi3nB,cAAcj3nB,KAAKk3nB,WAAWF,EAAOx6nB,GAAOmmE,IAErD6zjB,EAAgBn7nB,UAAU67nB,WAAa,SAAUC,EAAO36nB,GACpD,OAAO26nB,EAAQ,KAAO36nB,EAAK0Q,YAE/BspnB,EAAgBn7nB,UAAU+7nB,SAAW,SAAU/5nB,GAC3C,OAAOA,EAAIH,MAAM,OAErBs5nB,EAAgBn7nB,UAAUorO,YAAc,SAAU0wZ,EAAO36nB,GACrD,OAAOwD,KAAKq3nB,gBAAgB1wnB,eAAe3G,KAAKk3nB,WAAWC,EAAO36nB,KAEtEg6nB,EAAgBn7nB,UAAUg8nB,cAAgB,WACtC,OAAOr3nB,KAAKM,OAAO6igB,YAEvBqzH,EAAgBn7nB,UAAU47nB,cAAgB,SAAU55nB,EAAKslE,GACrD3iE,KAAKM,OAAO6igB,WAAW9lgB,GAAOslE,GAElC6zjB,EAAgBn7nB,UAAUi8nB,mBAAqB,SAAU/+V,GAErD,IAAK,IADDg/V,EAASv3nB,KAAKq3nB,gBACTj5nB,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKi6nB,GAASn5nB,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC7D,IAAIf,EAAMwF,EAAGzE,GACTpB,EAAQu6nB,EAAOl6nB,GACfW,EAAQgC,KAAKo3nB,SAAS/5nB,GACtBsqU,EAAc3nU,KAAKw3nB,uBAAuBx5nB,EAAM,IAChDy5nB,EAAiBz3nB,KAAKM,OAAOo3nB,yBAC7B/0jB,EAAO3lE,GAASy6nB,EAAe,GAAK9vT,GACxC,GAAIA,EAAc8vT,EAAe,IAAM90jB,EAAO,EAC1C,IAAK,IAAI1+D,EAAK,EAAGq3mB,EAAS/iV,EAAMt0R,EAAKq3mB,EAAO7+mB,OAAQwH,IAAM,CACtD,IAAIy8D,EAAM46iB,EAAOr3mB,GACjB,GAAIy8D,EAAIlkE,KAAKwB,EAAM,IAAIkP,aAAelP,EAAM,GAAGkP,WAAY,CACvDwzD,EAAIoB,MAAM,GAAG80jB,SAAWj0jB,EACxBjC,EAAIoB,MAAM,GAAG8ob,SAAW5sf,EAAM,GAC9B,QAKhB,OAAOu6R,GAEXi+V,EAAgBn7nB,UAAUm8nB,uBAAyB,SAAUzrmB,GAOzD,OANYmxC,GAAqBl9D,KAAKM,OAAOq3nB,oBAAqB,SAAU95mB,EAAM5L,GAC9E,GAAI4L,EAAKkO,QAAUA,EACf,OAAO9Z,IAGZ,IAGAuknB,KCtFPoB,GAA6B,WAC7B,SAASA,EAAYt2jB,EAAgB0/iB,EAAU1gnB,GAC3CN,KAAKgB,QAAUG,EAAc,MAAQsC,OAASmO,KAAM,SACpD5R,KAAKghnB,SAAWA,EAChBhhnB,KAAKshE,eAAiBA,EACtBthE,KAAKM,OAASA,EAyJlB,OAhJAs3nB,EAAYv8nB,UAAU0wG,OAAS,SAAUrrC,EAAK3C,EAASr6D,EAAYm0nB,EAAaj2nB,GAC5E,OAAO5B,KAAK83nB,WAAWp3jB,EAAK3C,EAASr6D,EAAYm0nB,EAAaj2nB,IASlEg2nB,EAAYv8nB,UAAU62D,QAAU,SAAUwO,EAAK3C,EAASg6jB,EAAWr0nB,EAAYm0nB,GACvEE,IACAr3jB,EAAIlkE,KAAOkC,KAAWgiE,EAAImsH,SAC1B7sL,KAAKg4nB,kBAAkBt3jB,IAE3B,IAAIngE,EAAOP,KAAKM,OAAOU,QAAQ2B,cAAc,aAAe+9D,EAAIhhE,IAAM,KAClEspY,EAAKhpY,KAAK83nB,WAAWp3jB,EAAK3C,EAASr6D,EAAYm0nB,GAC/C/1jB,KAAWzgE,MAAMC,KAAK0nY,EAAGlnU,OAC7BvhE,EAAKyB,UAAY,GACjB,IAAK,IAAI5D,EAAK,EAAG65nB,EAAUn2jB,EAAO1jE,EAAK65nB,EAAQx7nB,OAAQ2B,IAAM,CACzD,IAAI6kE,EAAOg1jB,EAAQ75nB,GACnBmC,EAAKoB,YAAYshE,KAGzB20jB,EAAYv8nB,UAAUy8nB,WAAa,SAAUp3jB,EAAK3C,EAASr6D,EAAYm0nB,EAAaj2nB,GAChF,IAAIonY,EAAMvrY,EAAkBmE,GAAyB5B,KAAKgB,QAAQY,YAAzBA,EACrCs2nB,GAAY17nB,KAAMkkE,EAAIlkE,MACtBi6nB,GAAaj6nB,KAAMkkE,EAAIlkE,MACvB27nB,EAAWz5nB,KAAWgF,MACtB00nB,EAAgBp4nB,KAAKM,OAAO00nB,aAAahulB,OAAO,SAAUy5B,GAAO,MAAoB,aAAbA,EAAI/5D,MAAuB+5D,EAAI10C,QAAU,GACjH/uB,GAAQ,EACRo7nB,IACAp7nB,EAAQH,EAASu7nB,EAAcrsmB,MAAOmsmB,EAAQ17nB,OAE9CkkE,EAAI23jB,YACJ33jB,EAAI5H,WAAa94D,KAAKM,OAAOg4nB,wBAAwB/5nB,QAAQmiE,EAAIzuD,QAAU,GAAKjV,GAEhF0jE,EAAI23jB,WAAar4nB,KAAKM,OAAOi4nB,qBACG,UAA7Bv4nB,KAAKM,OAAOk4nB,cAA4Bx4nB,KAAKM,OAAOi8L,uBACvD77H,EAAI5H,YAAa,GAC+C,IAA5D94D,KAAKM,OAAOg4nB,wBAAwB/5nB,QAAQmiE,EAAIzuD,QAChDjS,KAAKM,OAAOg4nB,wBAAwB9znB,KAAKk8D,EAAIzuD,QAGrDjS,KAAKy4nB,sBAAsBzvP,EAAItoU,GAC/B01D,EAAc4yQ,EAAImvP,GAClB56jB,GAAsByrU,EAAItoU,EAAIh9D,YAE9B,IAAK,IADDg1nB,EAAmB14nB,KAAKshE,eAAeE,WAAW,uBAC7CrlE,EAAI,EAAG0F,EAAM6+D,EAAIoB,MAAMrlE,OAAQN,EAAI0F,EAAK1F,IAAK,CAClD,IAAI8mE,EAAOvC,EAAIoB,MAAM3lE,GACrB8mE,EAAKnK,WAAa4H,EAAI5H,WACtB,IAAI49jB,EAAegC,EAAiB/B,gBAAgBj2jB,EAAIoB,MAAM3lE,GAAG6knB,UAAYhI,GAAS9kS,MAClFzwU,GAAUwO,MAAUxU,EAAkBijE,EAAIzuD,OAAgC,GAAvByuD,EAAIzuD,MAAM/E,YAC7DwzD,EAAIy5O,UAAYz5O,EAAIoB,MAAM3lE,GAAG6knB,WAAahI,GAAS2f,eACnDl1nB,EAAa,MAAI,qBAErB,IAAIkzQ,EAAK+/W,EAAa3qhB,OAAOrrC,EAAIoB,MAAM3lE,GAAIukE,EAAIlkE,KAAMiH,GACrD,GAAIi9D,EAAIoB,MAAM3lE,GAAG6knB,WAAahI,GAAS4f,OAAQ,CAC3C,IAAIl4jB,EAAIoB,MAAM3lE,GAAG6knB,WAAahI,GAAS9kS,MAAQxzQ,EAAIoB,MAAM3lE,GAAG6knB,WAAahI,GAAS6f,iBAC9E74nB,KAAKM,OAAOkmB,QAAQgimB,GAAe9pnB,EAAO+3nB,GACtCxzjB,KAAM0zM,EAAI95M,OAAQoG,EAAKpG,OAAQ64N,QAAS,EACxC1yN,eAAgBtC,EAAIoB,MAAM3lE,GAAG6mE,kBAE7ByzjB,EAAS/gW,QAAU,GAAKh1N,EAAIoB,MAAM3lE,GAAGy6nB,SAAW,GAAG,CAEnDjgX,EADgB,IAAI6/W,GAAgBx2nB,KAAKshE,eAAgBthE,KAAKM,QAC/CyrG,OAAO0qhB,EAAU/1jB,EAAKvkE,EAAGw6Q,GAG3Cj2M,EAAIoB,MAAM3lE,GAAGo6nB,WACdvtP,EAAGrnY,YAAYg1Q,IAI3B,IAAI12Q,GAASygE,IAAKsoU,EAAIhpU,UAAWhgE,KAAKM,OAAO0/D,WAgB7C,GAfIU,EAAI23jB,WACJr4nB,KAAKM,OAAOkmB,QN5FE,eM4FoB9nB,EAAOw5nB,EAASj4nB,IAElDD,KAAKM,OAAOi8L,uBACZ27b,EAAQl4jB,UAAYhgE,KAAKM,OAAO0/D,WAEhCk4jB,EAAQl4jB,UACRgpU,EAAGtkY,MAAMqR,OAASminB,EAAQl4jB,UAAY,KAEjChgE,KAAKM,OAAO0/D,WAAagpU,EAAGrmY,cAAc,mBAC/CqmY,EAAGtkY,MAAMqR,OAAS/V,KAAKM,OAAO0/D,UAAY,MAE1CU,EAAIztD,UACJ+1X,EAAGllY,UAAUM,IAAIs8D,EAAIztD,UAErBjT,KAAKM,OAAOU,QAAQywT,aAAezxT,KAAKM,OAAOyV,QAAU/V,KAAKM,OAAOo/D,WAAWjjE,OAChF,IAASN,EAAI,EAAGA,EAAI6D,KAAKM,OAAOo/D,WAAWjjE,OAAQN,IAAK,CAGpD,GAAI6D,KAAKM,OAAOo/D,WAAWvjE,GAAW,WAAQ,QAAE,GAAG0qH,eAAgB,CAC/D,IAAIiygB,EAAc9vP,EAAGxnY,iBAAiB,kBACtC,GAAIs3nB,EAAYr8nB,OAAQ,CAEpBkH,GADuBm1nB,EAAYA,EAAYr8nB,OAAS,KAC3B,wBAK7C,OAAOusY,GAEX4uP,EAAYv8nB,UAAU28nB,kBAAoB,SAAUt3jB,GAChD,IAAK,IAAItiE,EAAK,EAAGyE,EAAK69D,EAAIoB,MAAO1jE,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACxCyE,EAAGzE,GACTm4nB,WAAY,EAErB,OAAO71jB,GAOXk3jB,EAAYv8nB,UAAUo9nB,sBAAwB,SAAUzvP,EAAItoU,GACxD,IAAIonF,KACAx9I,EAAqB,gBAArBA,EAAiD,WAAjDA,EAA6E,gBAC7EzG,KACA68D,EAAI23jB,WACJx0nB,EAAQW,KAAK,SAEbk8D,EAAIq4jB,UACJl1nB,EAAQW,KAAK,YAEZ/G,EAAkBijE,EAAIzuD,SACvB61I,EAAKx9I,GAAiBo2D,EAAIzuD,OAE1ByuD,EAAIu2N,UACJnvI,EAAKmvI,QAAUv2N,EAAIu2N,SAEnBv2N,EAAIhhE,MACJooJ,EAAKx9I,GAAgBo2D,EAAIhhE,KAEzBghE,EAAI5H,aACJgvF,EAAKx9I,IAAqB,IAEV,IAAhBo2D,EAAIlpC,SACJ3zB,EAAQW,KAAK,UAEjBsjJ,EAAKvmB,MAAQ19H,EACb05D,GAAsByrU,EAAIlhP,IAEvB8ve,KC9JPoB,GAAmC,WAInC,SAASA,EAAkB14nB,GACvBN,KAAKM,OAASA,EA4ElB,OA1EA04nB,EAAkB39nB,UAAU49nB,aAAe,SAAUz8nB,EAAMyD,GAGvD,IAAK,IAFDs4R,KACA7yQ,EAAa1lB,KAAKM,OAAOi8L,qBAAuBt8L,EAAKylB,WAAa,EAC7DvpB,EAAI,EAAG0F,EAAMvD,OAAOhB,KAAKd,GAAMC,OAAQN,EAAI0F,EAAK1F,IAAKupB,IAC1D6yQ,EAAKp8R,GAAK6D,KAAKk5nB,YAAY18nB,EAAKL,GAAIupB,GAExC,OAAO6yQ,GAEXygW,EAAkB39nB,UAAU89nB,cAAgB,WAExC,IAAIhH,KAIJ,OAHInynB,KAAKM,OAAO84nB,gBAAkBp5nB,KAAKM,OAAOq7R,YAC1Cw2V,EAAK3tnB,KAAKxE,KAAKq5nB,gBAAiB,KAAMrgB,GAAS2f,eAE5CxG,GAEX6G,EAAkB39nB,UAAU69nB,YAAc,SAAU18nB,EAAMyV,EAAOgB,EAAUommB,GACvE,IAAIrmmB,KACJA,EAAQgwD,kBACRhwD,EAAQtT,IAAM0/D,GAAO,YACrBpsD,EAAQxW,KAAOA,EACfwW,EAAQf,MAAQA,EAChBe,EAAQqmmB,OAASA,EACjBrmmB,EAAQqlnB,WAAY,EACpBrlnB,EAAQmnS,UAAW,EACnBnnS,EAAQC,SAAWA,EACnBD,EAAQ+lnB,WAAW/4nB,KAAKM,OAAOg5nB,cAAernnB,EAAQ,GAAM,EAC5De,EAAQ8lD,WAAa94D,KAAKM,OAAOg4nB,wBAAwB/5nB,QAAQ0T,IAAU,EAC3EjS,KAAKu5nB,qBAAqBvmnB,GAC1B,IAAI8uD,EAAQ9hE,KAAKm5nB,gBACbz4jB,EAAM,IAAI8/P,GAAIxtT,GAElB,OADA0tD,EAAIoB,MAAQA,EAAMvnD,OAAOva,KAAKw5nB,cAAcxmnB,IACrC0tD,GAEXs4jB,EAAkB39nB,UAAUk+nB,qBAAuB,SAAUvmnB,GACzDhT,KAAKM,OAAOgxnB,uBAAuBlynB,QAAQ,SAAUqhE,GACjDrjE,EAASqjE,EAAI10C,MAAOg3C,GAAetC,EAAKztD,EAAQxW,MAAOwW,EAAQgwD,mBAGvEg2jB,EAAkB39nB,UAAUm+nB,cAAgB,SAAUxmnB,GAClD,IAAIjT,EAAQC,KAER20J,KAIJ,OALc30J,KAAKM,OAAO00nB,aAElB51nB,QAAQ,SAAU2xc,EAAO9+b,GAC7B,OAAO0iJ,EAAInwJ,KAAKzE,EAAMs5nB,aAAatoL,EAAO/9b,EAAQtT,IAAKjC,EAAkBszc,EAAM/oa,eAAY7sC,EAAY69mB,GAAS6f,cAAe,KAAM5mnB,EAAOe,EAAQgwD,mBAEjJ2xF,GAEXqke,EAAkB39nB,UAAUg+nB,aAAe,SAAUx8jB,EAAQ8ijB,EAAOqB,EAAUtrV,EAAS+jW,EAAQz2jB,GAC3F,IAAI02jB,GACAlimB,QAAWqlC,EAAOrlC,QAClBmimB,YAAel8nB,EAAkBo/D,EAAO9wC,OAAS8wC,EAAO5tD,UACxDmwS,YAAe3hT,EAAkBo/D,EAAO5tD,UACxC2qnB,MAASja,EACT9ijB,OAAUA,EACVmkjB,SAAavjnB,EAAkBujnB,GAAuBhI,GAAS9kS,KAApB8sS,EAC3CtrV,QAAWA,EACX1tP,SAAY60B,EAAO70B,SACnBk7B,aAAgBrG,EAAO4qjB,iBAAmB5qjB,EAAO4qjB,kBACjDzkjB,eAAkBnG,EAAO4qjB,iBAAmB5qjB,EAAO4qjB,mBAAqB5qnB,EAASggE,EAAO9wC,MAAOi3C,IAKnG,OAHI02jB,EAAIC,YAAkC,aAApBD,EAAI78jB,OAAOn2D,QAC7BgznB,EAAIznnB,MAAQjS,KAAKM,OAAOu5nB,sBAAsBh9jB,EAAO9wC,QAElD,IAAI0gd,GAAKitJ,IAEpBV,EAAkB39nB,UAAUy+nB,YAAc,SAAUhonB,GAChD,IAAI/R,EAAQC,KAKZ,OAJA8R,EAAM1S,QAAQ,SAAUshE,GACpB3gE,EAAMw5nB,qBAAqB74jB,GAC3BA,EAAIoB,MAAQ/hE,EAAMy5nB,cAAc94jB,KAE7B5uD,GAEJknnB,KC3FP1uiB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAoBxCoviB,GAAuC,WAIvC,SAASA,EAAsBz5nB,GAC3BN,KAAKM,OAASA,EA2HlB,OAzHAy5nB,EAAsB1+nB,UAAUsxU,QAAU,WACtC,IAAI5sU,EAAQC,KACRu4R,KAUJ,OATAv4R,KAAKM,OAAOo/D,WAAWr+D,QAAQjC,QAAQ,SAAUshE,GAC7C,IAAI3C,EAAU2C,EAAI3C,QAAQ/2B,OAAO,SAAU61B,GACvC,QAASA,EAAOgqD,gBAAkBhqD,EAAOm9jB,qBAAuBn9jB,EAAOo9jB,uBAChEl6nB,EAAMm6nB,eAAer9jB,KAE5BkB,EAAQthE,QACR87R,EAAK/zR,MAAOu5D,QAASA,MAGtBw6N,GAEXwhW,EAAsB1+nB,UAAU6+nB,eAAiB,SAAUr9jB,GACvD,YAAiC1hE,IAA1B0hE,EAAOgqD,gBAElBkzgB,EAAsB1+nB,UAAU25nB,WAAa,SAAUz3nB,EAAOshB,GAC1D,IAAIk/C,KAQJ,OAPI/9D,KAAKM,OAAOwmnB,eACZ9mnB,KAAKM,OAAOm0nB,cAAc12jB,QAAQ3+D,QAAQ,SAAUpC,GAAS,OAAO+gE,EAAQv5D,KAAK,IAAI05D,WAErFl+D,KAAKM,OAAO84nB,gBAAmB37nB,EAAkBuC,KAAKM,OAAOq7R,YAC7D59N,EAAQv5D,KAAK,IAAI05D,QAErBH,EAAQv5D,KAAKjJ,MAAMwiE,EAAS/9D,KAAKM,OAAO00nB,cACjCv3nB,EAAkBF,GAASwgE,EAAUA,EAAQ18D,MAAM9D,EAAOshB,IAErEk7mB,EAAsB1+nB,UAAU49nB,aAAe,SAAUnnnB,EAAO7R,EAAM1C,EAAOshB,GACzE,IAAI9e,EAAQC,KACZ,GAA2C,IAAvCA,KAAKM,OAAO0uU,gBAAgBvyU,OAC5B,SAEJ,IAAID,EAAOwD,KAAKm6nB,iBAAiBronB,EAAO7R,GACpCs4R,KAIJ,OAHAv4R,KAAK2sU,UAAUvtU,QAAQ,SAAUshE,EAAKzuD,GAClCsmR,EAAK/zR,KAAKzE,EAAMq6nB,gBAAgB15jB,EAAKlkE,EAAKyV,GAAQhS,EAAOA,EAAKkyJ,WAAQh3J,EAAWoC,EAAOshB,MAErF05Q,GAEXwhW,EAAsB1+nB,UAAU++nB,gBAAkB,SAAUC,EAAY79nB,EAAM89nB,EAAK/8nB,EAAOshB,GACtF,IAAI9e,EAAQC,KACR20J,KACA4le,EAAUv6nB,KAAKw6nB,iBAAiBF,GAChCG,GAAqBh9nB,EAAkBuC,KAAKM,OAAOq7R,WACnD++V,EAAe16nB,KAAKM,OAAOm0nB,cAAc12jB,QAAQthE,QAAUuD,KAAKM,OAAO84nB,iBACtE37nB,EAAkBuC,KAAKM,OAAOq7R,WAAa,EAAI,GACpD37R,KAAKg1nB,WAAWz3nB,EAAOshB,GAAKzf,QAAQ,SAAUpC,EAAOiV,GAAS,OAAO0iJ,EAAInwJ,KAAKzE,EAAM46nB,iBAAiB39nB,EAAOq9nB,EAAYponB,GAASyonB,EAAe36nB,EAAM66nB,cAAgB5hB,GAAS6hB,OAAQN,EAAQtonB,GAAQwonB,MACvM,IAAI/5jB,EAAM,IAAI8/P,IAAMhkU,KAAMA,EAAMkH,YAAc69H,MAAO,kBAGrD,OAFA7gE,EAAIoB,MAAQ6yF,EACZj0F,EAAIlpC,QAAUm9H,EAAIv4H,KAAK,SAAU6mC,GAAQ,OAAOA,EAAK02jB,YAAc12jB,EAAKzrC,UACjEkpC,GAEXq5jB,EAAsB1+nB,UAAUs/nB,iBAAmB,SAAU99jB,EAAQw9jB,EAAYrZ,EAAU3H,EAAQohB,GAE/F,IAAIK,EAAUT,EAAWt8jB,QAAQ/2B,OAAO,SAAU+zlB,GAAW,OAAOA,EAAQtL,aAAe5yjB,EAAO9wC,QAAU,GACxGtoB,GAAUiB,OAAW2tC,UAAawqB,EAAOxqB,YACzCgnkB,IACA51mB,EAAM89H,MAAQ83e,GAEd57mB,EAAkB47mB,IAAWohB,IAC7Bh3nB,EAAM89H,MAAQ,yBAElB,IAAIm4f,GACAlimB,QAAWqlC,EAAOrlC,QAClBmimB,YAAel8nB,EAAkBq9nB,GACjC17U,WAAc07U,IAAYr9nB,EAAkBq9nB,EAAQj0gB,gBAC7Ci0gB,EAAQd,qBAAuBc,EAAQb,sBAC9Cp9jB,OAAUi+jB,MACVp3nB,WAAcD,EACdu9mB,SAAYA,GAEhB,OAAO,IAAIv0I,GAAKitJ,IAEpBK,EAAsB1+nB,UAAU8+nB,iBAAmB,SAAU39nB,EAAMyD,GAC/D,IAAIF,EAAQC,KACR+wc,KAEAiqL,KASJ,OAVkBh7nB,KAAK2sU,UAGXvtU,QAAQ,SAAUshE,GAC1Bs6jB,KACAt6jB,EAAI3C,QAAQ3+D,QAAQ,SAAUy9D,GAC1Bm+jB,EAASj7nB,EAAMwoH,YAAY1rD,EAAS58D,GAAQA,EAAKy/D,WAAcz/D,EAAOzD,EAAMw+nB,KAEhFjqL,EAAMvsc,KAAKw2nB,KAERjqL,GAEXgpL,EAAsB1+nB,UAAUm/nB,iBAAmB,SAAUh+nB,GACzD,OAAOwD,KAAKM,OAAOm0nB,cAAc12jB,QAAQnmC,IAAI,WAAc,MAAO,qBAEtEmimB,EAAsB1+nB,UAAUktH,YAAc,SAAU1rD,EAAQrgE,EAAMw+nB,GAClE,IAAIj7nB,EAAQC,KACR00E,EAAQ7X,EAAOn2D,KACfwI,KACA84mB,EAAWnrjB,EAAOkrjB,gBAAwC,SAAU5kkB,GAAK,OAAOA,GAChF4vC,EAAQv2F,EAmBZ,OAlBMk4E,aAAiBl2E,QACnBk2E,GAAS7X,EAAOn2D,OAEpBguE,EAAMt1E,QAAQ,SAAUsH,GACpB,IAAIrJ,EAAMw/D,EAAO9wC,MAAQ,MAAQrlB,EAAKkP,cAClCqlnB,EAAOp+jB,EAAO4yjB,WACdxnmB,EAAe,WAATvhB,GAAqBqsF,EAAMrzB,YAAcriE,KAAO01F,EAAMrzB,WAAaqzB,EAAMrzB,WAAWriE,GAC1FkiE,GAAmB74D,EAAMqsF,EAAMrzB,WAAaqzB,EAAQv2F,EAAMqgE,EAAQ98D,EAAMO,QAC5E06nB,EAAOC,GAAQD,EAAOC,OACtBD,EAAOC,GAAM59nB,GAAO4qB,EACpB+ymB,EAAOC,GAAMv0nB,GAASjJ,EAAkBwqB,GAAuB,IAAhB+/lB,EAAS//lB,GACpD8qE,EAAMhnE,QACNivmB,EAAOC,GAAMlvmB,MAAQgnE,EAAMhnE,MAC3BivmB,EAAOC,GAAM59nB,IAAM01F,EAAM11F,OAGjC6R,EAAO8sB,OAAS6gC,EAAOkrjB,eACvBlrjB,EAAO0rD,YAAYr5G,GACZ8rnB,GAEXjB,EAAsB1+nB,UAAUu/nB,YAAc,WAC1C,OAAO5hB,GAASkiB,SAEbnB,KAGPoB,GAA4C,SAAUhwiB,GAEtD,SAASgwiB,IACL,OAAkB,OAAXhwiB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAY/D,OAdAsqF,GAAU6wiB,EAA4BhwiB,GAItCgwiB,EAA2B9/nB,UAAU6+nB,eAAiB,SAAUr9jB,GAC5D,YAAsC1hE,IAA/B0hE,EAAOm9jB,qBAElBmB,EAA2B9/nB,UAAUm/nB,iBAAmB,SAAUroe,GAE9D,YADc,IAAVA,IAAoBA,EAAQnyJ,KAAKM,OAAOm0nB,cAAc12jB,QAAQthE,QAC3DuD,KAAKM,OAAOm0nB,cAAc12jB,QAAQnmC,IAAI,SAAUm1H,EAAGuF,GAAQ,OAAOA,GAAQH,EAAQ,EAAI,GAAK,qBAEtGgpe,EAA2B9/nB,UAAUu/nB,YAAc,WAC/C,OAAO5hB,GAASoiB,cAEbD,GACTpB,IAEEsB,GAA8C,SAAUlwiB,GAExD,SAASkwiB,IACL,OAAkB,OAAXlwiB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAkB/D,OApBAsqF,GAAU+wiB,EAA8BlwiB,GAIxCkwiB,EAA6BhgoB,UAAU6+nB,eAAiB,SAAUr9jB,GAC9D,YAAuC1hE,IAAhC0hE,EAAOo9jB,sBAElBoB,EAA6BhgoB,UAAUsxU,QAAU,WAE7C,OAAQxhP,EAAO9vF,UAAUsxU,QAAQrrU,KAAKtB,MAAM4hC,OAAO,SAAUC,EAAMwkD,GAE3D,OADAxkD,EAAKk8B,QAAUl8B,EAAKk8B,QAAQxjD,OAAO8rE,EAAItoB,SAChCl8B,IAHCk8B,eAMpBs9jB,EAA6BhgoB,UAAUi/O,QAAU,WAC7C,OAAoD,KAA5Ct6O,KAAK2sU,UAAU,GAAG5uQ,aAAethE,QAE7C4+nB,EAA6BhgoB,UAAUu/nB,YAAc,WACjD,OAAO5hB,GAASsiB,gBAEbD,GACTtB,IC/LEzviB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAoBxC4wiB,GAAqC,SAAUpwiB,GAE/C,SAASowiB,EAAoBj7nB,GACzB,IAAIP,EAAQorF,EAAO7pF,KAAKtB,KAAMM,IAAWN,KAMzC,OALAD,EAAMw4R,QACNx4R,EAAMkS,MAAQ,EACdlS,EAAMO,OAASA,EACfP,EAAMy7nB,gBAAkB,IAAIL,GAA2B76nB,GACvDP,EAAM07nB,gBAAkB,IAAIJ,GAA6B/6nB,GAClDP,EAmJX,OA3JAuqF,GAAUixiB,EAAqBpwiB,GAU/BowiB,EAAoBlgoB,UAAU49nB,aAAe,SAAUz8nB,EAAMyD,GACzD,GAAiD,IAA7CD,KAAKM,OAAOm0nB,cAAc12jB,QAAQthE,OAClC,OAAO0uF,EAAO9vF,UAAU49nB,aAAa33nB,KAAKtB,KAAMxD,EAAMyD,GAE1DD,KAAKu4R,QACLv4R,KAAKiS,MAAQjS,KAAKM,OAAOi8L,sBAAwBv8L,KAAKM,OAAOixD,aAAa+hM,YAAc,GAAK92P,EAAKk2J,QAAQj2J,OAAS,EACnH,IAAK,IAAIN,EAAI,EAAG0F,EAAMrF,EAAKC,OAAQN,EAAI0F,EAAK1F,IACxC6D,KAAK07nB,kBAAkB,EAAGl/nB,EAAKL,GAAIK,EAAK21J,OAG5C,OADAnyJ,KAAKiS,MAAQ,EACNjS,KAAKu4R,MAEhBgjW,EAAoBlgoB,UAAUqgoB,kBAAoB,SAAUzpnB,EAAOzV,EAAM89nB,GACrE,IAAInoe,EAAQmoe,EACZ,GAAI78nB,EAAkBjB,EAAKi+D,OACvB,GAAIh9D,EAAkBjB,EAAKm1J,WACvB3xJ,KAAKu4R,KAAOv4R,KAAKu4R,KAAKh+Q,OAAOva,KAAK27nB,iBAAiBn/nB,EAAMyV,SAGzD,IAAK,IAAIsR,EAAI,EAAG1hB,EAAMrF,EAAKC,OAAQ8mB,EAAI1hB,EAAK0hB,IACxCvjB,KAAK07nB,kBAAkBzpnB,EAAOzV,EAAK+mB,GAAI/mB,EAAK21J,YAKpDnyJ,KAAKu4R,KAAOv4R,KAAKu4R,KAAKh+Q,OAAOva,KAAK47nB,mBAAmBp/nB,EAAMyV,IACvDzV,EAAKi+D,OAASj+D,EAAKi+D,MAAMh+D,QACzBuD,KAAK07nB,kBAAkBzpnB,EAAQ,EAAGzV,EAAKi+D,MAAOj+D,EAAKi+D,MAAM03F,OAEzDnyJ,KAAKM,OAAOo/D,WAAWjjE,SACtBoG,EAAK7C,KAAKu4R,MAAM/zR,KAAKjJ,MAAMsH,EAAI7C,KAAKw7nB,gBAAgBvC,aAAaz8nB,GAAQ21J,MAAOA,KAGzF,IAAItvJ,GAER04nB,EAAoBlgoB,UAAUwgoB,mBAAqB,SAAU9vmB,EAAOstlB,EAAQ78mB,GACxE,IAAIuD,EAAQC,KACR8hE,KACAg6jB,KACAj/jB,EAAS78D,KAAKM,OAAOo0nB,iBAAiB3omB,GACtCghV,EAAU/sW,KAAKM,OAAOo3nB,yBACtB13nB,KAAKM,OAAOw2nB,6BACZj6jB,EAAS78D,KAAKM,OAAOy9D,QAAQ/2B,OAAO,SAAUi3B,GAAK,OAAOA,EAAElyC,QAAUA,IAAU,IAEpF,IAAIgwmB,EAAa/7nB,KAAKM,OAAOm0nB,cAAc12jB,QAAQthE,OAC/Cu3nB,EAAOh0nB,KAAKM,OAChB,IAAKN,KAAKM,OAAOw2nB,6BAA2D,IAA7B/pR,EAAQxuW,QAAQ86mB,GAAgB,CAC3E,IAAK,IAAIl9mB,EAAI,EAAGA,EAAIk9mB,EAAQl9mB,IACxB2lE,EAAMt9D,KAAKxE,KAAKg8nB,sBAEpBl6jB,EAAMt9D,KAAKxE,KAAKq5nB,gBAAiB,KAAMrgB,GAASijB,SAMpD,GAJA5iB,EAASr5mB,KAAKM,OAAOw2nB,2BAA6B,EAC7C92nB,KAAKM,OAAOq3nB,oBAAoBl7nB,OAASs/nB,GAAc/H,EAAKoF,gBAAkBpF,EAAKr4V,UAAY,EAAI,GAChG09U,GAAUr5mB,KAAKM,OAAOq3nB,oBAAoBl7nB,QAAU,EAAI,GAE5DuD,KAAKM,OAAOo/D,WAAWjjE,SAAWuD,KAAKy7nB,gBAAgBnhZ,UAAW,CAClE,IAAI4hZ,EAAel8nB,KAAKy7nB,gBAAgBxC,aAAaz8nB,GAAM,GAC3DkC,EAAOlC,EAAM0/nB,EAAa1/nB,MAC1B,IAAI2/nB,EAAW,EACfD,EAAap6jB,MAAM1lC,KAAK,SAAU6mC,EAAMhxD,GAA2B,OAAlBkqnB,EAAWlqnB,EAAcgxD,EAAKzrC,SAAWyrC,EAAK02jB,aAC/FmC,EAAWI,EAAap6jB,MAAMzgE,MAAM86nB,GAAUn1lB,OAAO,SAAUi8B,GAAQ,OAAOA,EAAKzrC,UAC/E0kmB,EAAa1kmB,SAAWskmB,EAAS,GAAGj/jB,OAAO9wC,QAAU/rB,KAAKM,OAAOq3nB,oBAAoB,GAAG5rmB,QACxF+vmB,EAAWA,EAASz6nB,MAAM,IAEiB,IAA3CrB,KAAKM,OAAOq3nB,oBAAoBl7nB,SAChCq/nB,MAEJziB,GAAkByiB,EAASr/nB,OAE/B,IACI2/nB,GAAQ,EAYZ,OAbap8nB,KAAKM,OAAOw2nB,2BAAwC92nB,KAAKM,OAAO00nB,cAAtBn4jB,IAElDz9D,QAAQ,SAAUqhE,EAAKxuD,GACxB,IAAIoqnB,EAAUD,IAAsC,IAA7BrvR,EAAQxuW,QAAQ86mB,GACnCgjB,IACAD,GAAQ,GAEZ,IAAIpb,GAAYjhnB,EAAMO,OAAOw2nB,4BAA8BuF,EACvDrjB,GAASsjB,aAAetjB,GAASujB,kBACrCljB,EAASt5mB,EAAMO,OAAOw2nB,4BAA8B9V,IAAahI,GAASsjB,aAAejjB,EAAS0iB,EAAa1iB,EAC/Gv3iB,EAAMt9D,KAAKzE,EAAMs5nB,aAAax8jB,EAAQ,KAAMmkjB,EAAU3H,MAE1Dv3iB,EAAMt9D,KAAKjJ,MAAMumE,EAAOg6jB,GACjBh6jB,GAEXy5jB,EAAoBlgoB,UAAUugoB,mBAAqB,SAAUp/nB,EAAM68mB,GAC/D,IAAIrmmB,KAEAytD,EAAMzgE,KAAKM,OAAOo0nB,iBAAiBl4nB,EAAKuvB,OAC5C/Y,EAAQxW,KAAOkC,KAAWlC,GACtBikE,IACAztD,EAAQxW,KAAKuvB,MAAQvvB,EAAKuvB,OAE9B/Y,EAAQqlnB,WAAY,EACpB,IAAI33jB,EAAM,IAAI8/P,GAAIxtT,GAIlB,OAHA0tD,EAAI24iB,OAASA,EACbr5mB,KAAKutnB,kBAAkB7sjB,GACvBA,EAAIoB,MAAQ9hE,KAAK67nB,mBAAmBr/nB,EAAKuvB,MAAOstlB,EAAQ34iB,EAAIlkE,MACrDkkE,GAEX66jB,EAAoBlgoB,UAAUkynB,kBAAoB,SAAU7sjB,GACxD,IAAIlkE,EAAOkkE,EAAIlkE,KACXikE,EAAMzgE,KAAKM,OAAOo0nB,iBAAiBl4nB,EAAKuvB,OACxC00C,GAAOA,EAAIgnjB,iBAAmBhnjB,EAAIgnjB,mBAClCrqnB,EAAS,aAAcqjE,EAAI7D,cAAc6D,EAAIrC,gBAAiB2E,GAAetC,KAASjkE,EAAKa,KAAK,GAAIojE,GAAMC,EAAIlkE,OAGtH++nB,EAAoBlgoB,UAAUsgoB,iBAAmB,SAAUn/nB,EAAM68mB,GAG7D,IAAK,IAFD9gV,KACAw0E,EAAU/sW,KAAKM,OAAOo3nB,yBACjBv7nB,EAAI,EAAG0F,EAAMrF,EAAKC,OAAQN,EAAI0F,EAAK1F,IAAK,CAC7Co8R,EAAKp8R,GAAK6D,KAAKk5nB,YAAY18nB,EAAKL,GAAI6D,KAAKiS,MAAO9V,OAAIhB,EAAY,kBAAmBk+mB,GACnF,IAAK,IAAI91lB,EAAI,EAAGA,EAAI81lB,EAAQ91lB,IACpBvjB,KAAKM,OAAOw2nB,6BAA2D,IAA7B/pR,EAAQxuW,QAAQ86mB,IAG9D9gV,EAAKp8R,GAAG2lE,MAAM5mE,QAAQ8E,KAAKg8nB,sBAE/Bh8nB,KAAKiS,QAET,OAAOsmR,GAEXgjW,EAAoBlgoB,UAAU2goB,mBAAqB,WAC/C,OAAOh8nB,KAAKq5nB,gBAAiB,KAAMrgB,GAAS6hB,SAEhDU,EAAoBlgoB,UAAUy+nB,YAAc,SAAUhonB,GAClD,IAAI/R,EAAQC,KACR+sW,EAAU/sW,KAAKM,OAAOo3nB,yBAgB1B,OAfA5lnB,EAAM1S,QAAQ,SAAUshE,GACpB,GAAIA,EAAI23jB,UAAW,CACf33jB,EAAIoB,MAAQ/hE,EAAMy5nB,cAAc94jB,GAChC,IAAK,IAAIn9C,EAAI,EAAGA,EAAIm9C,EAAI24iB,OAAQ91lB,IACxBxjB,EAAMO,OAAOw2nB,6BAA+D,IAAjC/pR,EAAQxuW,QAAQmiE,EAAI24iB,SAGnE34iB,EAAIoB,MAAM5mE,QAAQ6E,EAAMi8nB,0BAG3B,CACD,IAAIQ,EAAOz8nB,EAAM67nB,mBAAmBl7jB,EAAIlkE,KAAMkkE,EAAI24iB,QAClD34iB,EAAIoB,MAAQ06jB,EAAK16jB,SAGlBhwD,GAEJypnB,GACTvC,ICnKEyD,GAA+B,WAI/B,SAASA,EAAcn8nB,EAAQghE,GAC3B,IAAIvhE,EAAQC,KACZA,KAAKu4R,QACLv4R,KAAK08nB,cACL18nB,KAAK28nB,eACL38nB,KAAK4oT,UAAW,EAChB5oT,KAAKizG,KAAO,SAAUpyG,GAClBd,EAAMO,OAAOyN,OAAO6unB,IAAqBz1nB,OAAQtG,EAAEsG,OAAQwsG,eAAgB9yG,EAAE8yG,iBAC7EpvG,EAAO1D,EAAE8yG,iBAEb3zG,KAAK68nB,YAAc,SAAU58nB,GACzB,IAAI8xF,EAAM9xF,EACV,OAAO,WAEH,GADAF,EAAM+8nB,YAAYC,QAAQh9nB,EAAMi9nB,WAAWpgnB,YAAY,IACnD7c,EAAMO,OAAO0mF,YAAjB,CAGA,IAAIuxM,EAAOx4R,EAAMw4R,KAAKl3R,MAAM,GAW5B,GAVwC,IAApCtB,EAAMO,OAAO28nB,qBACb1kW,EAAOt4R,EAAKi9nB,SAAWn9nB,EAAM28nB,WAAa38nB,EAAM48nB,aAEpD58nB,EAAMO,OAAOyN,OAAOovnB,IAAuB5kW,KAAMA,EAAMt4R,KAAM8xF,IACzDhyF,EAAM6oT,WACN7oT,EAAMO,OAAOkmB,QAAQ42mB,OACjBr9nB,EAAMO,OAAO+8nB,eACbt9nB,EAAMO,OAAOyN,OAAOuvnB,IAAuBC,KAAM,cAGrDxriB,EAAK,CACL,IAAI57B,GAAU47B,EAAIq6F,aAAe,IAAIx2K,cAAgB,YACrD7V,EAAMO,OAAOyN,OAAOooD,EAAQ47B,GAE5BhyF,EAAM6oT,UACN7oT,EAAMO,OAAOoiB,iBAIzB1iB,KAAKM,OAASA,EACdN,KAAKshE,eAAiBA,EACtBthE,KAAK88nB,YAAc98nB,KAAKshE,eAAeE,WAAW,eAClDxhE,KAAKw9nB,UAAYx9nB,KAAKy9nB,oBAClBz9nB,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAOslF,GAAG83iB,GAAgC19nB,KAAK29nB,WAAY39nB,MAChEA,KAAKM,OAAOslF,GAAGg4iB,GAAwB59nB,KAAK4qnB,gBAAiB5qnB,MAC7DA,KAAKM,OAAOslF,GAAGi4iB,GAAiB79nB,KAAK89nB,kBAAmB99nB,OA0Y5D,OArYAy8nB,EAAcphoB,UAAU0ioB,YAAc,WAClC,IAAI/J,EAAOh0nB,KAAKM,OACZY,EAAMC,EAAc,OAASkC,UAAW,kBACxCy1L,EAAW33L,EAAc,OACzBkC,UAAW,cAEfrD,KAAK88nB,YAAYkB,WAAWllc,GAAYmlc,MAAM,IAC9C/8nB,EAAIS,YAAYm3L,GAChB94L,KAAKk+nB,SAASh9nB,GACd8ynB,EAAKhznB,QAAQW,YAAYT,IAK7Bu7nB,EAAcphoB,UAAU8ioB,YAAc,WAClC,IAAIC,EAAap+nB,KAAKg9nB,WACtBoB,EAAWz8nB,YAAY3B,KAAKq+nB,mBAAmB,mBAC/Cr+nB,KAAKs+nB,SAASF,EAAWz7nB,cAAc,aACvC3C,KAAK88nB,YAAYkB,WAAWh+nB,KAAK87P,YAC7ByiY,gBAAwD,aAAvCv+nB,KAAKM,OAAOk+nB,kBAAkB93nB,OAEnD1G,KAAKy+nB,wBACDz+nB,KAAKM,OAAOo+nB,YACZ1+nB,KAAKM,OAAOq+nB,mBAAmB76nB,UAAUM,IAAI,oBAQrDq4nB,EAAcphoB,UAAUgjoB,mBAAqB,SAAU/6nB,GACnD,IAAIw1L,EAAW94L,KAAKg9nB,WAAWpgnB,WAC3BqjD,EAAQ9+D,EAAc,SACtBkC,UAAW,UAAWI,OAClB+vgB,YAAa,SAAU5hgB,KAAM,OAC7BtO,GAAItD,KAAKM,OAAOU,QAAQsC,GAAKA,KAOrC,OAJAtD,KAAK4+nB,YAAY5+nB,KAAKM,OAAOU,QAAQ2B,cAAc,iBAAiBA,cAAc,YAAYf,WAAU,IACxGq+D,EAAMt+D,YAAY3B,KAAK6+nB,eACvB5+jB,EAAMt+D,YAAYR,EAAc,UAChC23L,EAASn3L,YAAYs+D,GACd64H,GAEX2jc,EAAcphoB,UAAUs0c,UAAY,SAAU/kb,GACtC5qB,KAAKM,OAAO28nB,qBACA,IAARrymB,GACA5qB,KAAK08nB,WAAa18nB,KAAKu4R,KACvBv4R,KAAK8+nB,kBAAoB9+nB,KAAK++nB,aAG9B/+nB,KAAK28nB,YAAc38nB,KAAKu4R,OASpCkkW,EAAcphoB,UAAU2joB,mBAAqB,SAAU/+nB,GACnD,IAAIF,EAAQC,UACC,IAATC,IAAmBA,MACvB,IAAI+znB,EAAOh0nB,KAAKM,OAChB,GAAoC,IAAhC0znB,EAAKhlT,gBAAgBvyU,OAAzB,CAGA,IAIIusY,EACAi2P,EALA17jB,EAAaywjB,EAAKhlT,gBAClBkwT,EAAO1+nB,SAASyE,yBAChBk6nB,EAAU3+nB,SAASyE,yBACnB84D,EAAUi2jB,EAAKgB,aAGf/vjB,EAAU+ujB,EAAKiJ,mBACfv8jB,EAAM,IAAIk3jB,GAAY53nB,KAAKshE,eAAgB,KAAMthE,KAAKM,QAC1DN,KAAK++nB,eACL/+nB,KAAKu4R,QACL,IAAI6mW,EAAQp/nB,KAAKg9nB,WAAWr6nB,cAAc,oBACtC08nB,EAAQr/nB,KAAKg9nB,WAAWr6nB,cAAc,qBACtC29S,EAAOtgT,KAAKg9nB,WAAWr6nB,cAAc,cACrC28nB,EAAYt/nB,KAAKw9nB,UAAUvE,aAAa11jB,EAAYtjE,GACpDxC,EAAkB6hoB,EAAU,GAAGx9jB,MAAM,MACrCu9jB,EAAM18nB,cAAc,SAASX,UAAY,IAE7C,IAAI4oB,EAAM00mB,EAAU,GAAGx9jB,MAAM,GAAG7vD,MAKhC,GAHIjS,KAAKM,OAAOi/nB,oBAAsBv/nB,KAAKM,OAAOi/nB,mBAAmBtwnB,UACjEjP,KAAKM,OAAOk/nB,iBAAiB,aAE7Bx/nB,KAAKM,OAAOw2nB,2BAA4B,CACxB,IAAIN,GAAgBx2nB,KAAKshE,eAAgBthE,KAAKM,QACpDg3nB,mBAAmBgI,GAG7Bt/nB,KAAKy/nB,MADLx6jB,GAAWr6C,GAAOq6C,EACLo6jB,EAAM18nB,cAAc,SAGpB3C,KAAK87P,WAAWn5P,cAAc,SAE/C,IAAK,IAAIxG,EAAI,EAAG0F,EAAMy9nB,EAAU7ioB,OAAQN,EAAI0F,EAAK1F,IAAK,CAClD,GAAK63nB,EAAK6D,YASL,CACD,IAAIj0nB,EAAWownB,EAAK0L,gBAAL1L,CAAsBt1nB,GAASuT,MAAO9V,GAAKonE,EAAWpnE,IAAK63nB,EAAM,eAChF,GAA4B,UAAxBpwnB,EAAS,GAAGZ,QAAqB,CACjC,IAAK,IAAIugB,EAAI,EAAGA,EAAI3f,EAASnH,OAAQ8mB,IAAK,CACtC,IAAIo8mB,EAA8C,OAAvC/7nB,EAAS2f,GAAGrR,SAAS0D,eAC5B+pnB,GAAS/7nB,EAAS2f,GAAG/hB,kBAAoBoC,EAAS2f,GAAG/hB,iBAAiB,MAAM/E,UAC5EusY,EAAK22P,EAAO/7nB,EAAS2f,GAAK3f,EAAS2f,GAAG5gB,cAAc,OAGxDqxnB,EAAK0K,YAAcvioB,EAAI63nB,EAAK0K,WAC5BS,EAAQx9nB,YAAYqnY,GAGpBk2P,EAAKv9nB,YAAYqnY,QAKjBA,EADAgrP,EAAK0K,YAAcvioB,EAAI63nB,EAAK0K,WACvBr/jB,GAAe8/jB,EAASv7nB,GAIxBy7D,GAAe6/jB,EAAMt7nB,QA9BlColY,EAAKtoU,EAAIqrC,OAAOuzhB,EAAUnjoB,GAAI4hE,GAC1Bi2jB,EAAK0K,YAAcvioB,EAAI63nB,EAAK0K,WAC5BS,EAAQx9nB,YAAYqnY,GAGpBk2P,EAAKv9nB,YAAYqnY,GA8BzB,GADAhpY,KAAKu4R,KAAK/zR,KAAK86nB,EAAUnjoB,IACrBmjoB,EAAUnjoB,GAAGk8nB,UAAW,CAExB,IAAI1hX,EAAKqyH,EAAGxnY,iBAAiB,2BAA2B,GACpDm1Q,GACAA,EAAG7yQ,UAAUM,IAAI,sBAErBpE,KAAK++nB,YAAYv6nB,KAAKwkY,GAE1BhpY,KAAK88nB,YAAYkB,WAAWh+nB,KAAK87P,YAAc8jY,SAAU5L,EAAKgB,aAAav4nB,OAAOyQ,aAEtFlN,KAAK2vc,UAAU/kb,GACXopmB,EAAK0K,cACLO,EAAWh6jB,EAAU+ujB,EAAK2K,mBAAmBh8nB,cAAsB,IAARioB,EAAY,kBACjE,oBAAoBjoB,cAAc,SAAWqxnB,EAAK6L,iBAAiBl9nB,cAAc,UAC9EX,UAAY,GACrBi9nB,EAASt9nB,YAAYw9nB,IAErBnL,EAAK0K,YAAsB,IAAR9zmB,GAAa01R,EAAK5uQ,eAAiBpa,OAAO08lB,EAAKj+mB,UAClEuqS,EAAK57S,MAAMqR,OAAUuqS,EAAK5uQ,aAAeutlB,EAASvtlB,aAAgB,MAElEuzB,GAAmB,IAARr6C,IACX5qB,KAAKg9nB,WAAWpgnB,WAAWlY,MAAMoV,UAAY,UAEjD7Z,EAAKs4R,KAAOv4R,KAAKu4R,KAAKl3R,MAAM,GAC5BpB,EAAKi9nB,SAA8C,IAAnCl9nB,KAAKM,OAAO28nB,qBAA6Bh9nB,EAAKi9nB,SAC9Dl9nB,KAAKiS,MAAQ2Y,EACbkyC,GAAkB,WACd/8D,EAAMO,OAAOyN,OAAO+xnB,OACf//nB,EAAMO,OAAOi8L,uBACdh4L,EAAOxE,EAAM0/nB,OACb1/nB,EAAM0/nB,MAAQt+nB,EAAc,UAE5B8jE,GACAllE,EAAM0/nB,MAAM99nB,YAAYu9nB,GACJ,IAAhBn/nB,EAAMkS,OACNlS,EAAM6oT,UAAW,EACjBw2U,EAAMz8nB,cAAc,SAAShB,YAAY5B,EAAM0/nB,SAG3C1/nB,EAAM0/nB,MAAMt6jB,kBAAoB,GAChCplE,EAAM0/nB,MAAM99nB,YAAYR,EAAc,MAAMQ,YAAYR,EAAc,QAE1EpB,EAAM6oT,UAAW,EACjBy2U,EAAM18nB,cAAc,SAAShB,YAAY5B,EAAM0/nB,OAC/CL,EAAM16nB,MAAMqR,OAAWspnB,EAAkB,aAAI1/jB,KAAuB,KACpE0/jB,EAAM36nB,MAAMoV,UAAoC,SAAxB/Z,EAAMO,OAAOyV,OAAoB,SAAW,OACpEqpnB,EAAM16nB,MAAMixY,iBAAmB,QAInC51Y,EAAMggoB,cAAchgoB,EAAM0/nB,MAAOP,EAAMj/nB,GAEvCglE,GAAmB,IAARr6C,GACX7qB,EAAMi/nB,mBAAmBtgoB,KAAWuB,IAExCi/nB,EAAO,MACRl/nB,KAAK68nB,YAAYn+nB,KAAWuB,OAEnCw8nB,EAAcphoB,UAAU0koB,cAAgB,SAAUN,EAAOP,EAAMj/nB,GAC3Dw/nB,EAAM99nB,YAAYu9nB,GAClBl/nB,KAAK87P,WAAWn6P,YAAY89nB,IAMhChD,EAAcphoB,UAAU2hoB,SAAW,WAC/B,OAAOh9nB,KAAKggoB,cAMhBvD,EAAcphoB,UAAU6ioB,SAAW,SAAU+B,GACzCjgoB,KAAKggoB,aAAeC,GAMxBxD,EAAcphoB,UAAUygQ,SAAW,WAC/B,OAAO97P,KAAKkgoB,cAMhBzD,EAAcphoB,UAAUijoB,SAAW,SAAUr+jB,GACzCjgE,KAAKkgoB,aAAejgkB,GAMxBw8jB,EAAcphoB,UAAU8koB,QAAU,WAC9B,OAAOngoB,KAAKM,OAAO28nB,mBAAqBj9nB,KAAK08nB,WAAa18nB,KAAKu4R,MAMnEkkW,EAAcphoB,UAAU+koB,eAAiB,WACrC,OAAOpgoB,KAAK28nB,aAMhBF,EAAcphoB,UAAUgloB,eAAiB,WACrC,OAAOrgoB,KAAKM,OAAO28nB,mBAAqBj9nB,KAAK8+nB,kBAAoB9+nB,KAAK++nB,aAM1EtC,EAAcphoB,UAAUiloB,sBAAwB,WAC5C,OAAOtgoB,KAAK++nB,aAMhBtC,EAAcphoB,UAAUkloB,eAAiB,SAAU38nB,GAC/C5D,KAAK++nB,YAAcn7nB,GAMvB64nB,EAAcphoB,UAAUwjoB,YAAc,WAClC,OAAO7+nB,KAAKwgoB,UAOhB/D,EAAcphoB,UAAUujoB,YAAc,SAAU6B,GAC5C,OAAOzgoB,KAAKwgoB,SAAWC,GAM3BhE,EAAcphoB,UAAUsioB,WAAa,SAAU5/jB,GAC3C,IAAIi2jB,EAAOh0nB,KAAKM,OACZ2kE,EAAU+ujB,EAAKiJ,mBACf1kW,KACJ,GAAItzN,EAKA,IAAK,IAJDy7jB,EAAQ1goB,KAAK08nB,WACbiE,EAAQ3goB,KAAK28nB,YACbiE,EAASF,EAAMjkoB,OACfokoB,OAAU,EACL1koB,EAAI,EAAGukE,OAAM,EAAQvkE,EAAIykoB,EAAQzkoB,IAAK,CAC3C0koB,EAAUF,EAAMxkoB,GAAG2lE,MAAMrlE,OACzBikE,EAAMggkB,EAAMvkoB,GAAGkD,QACf,IAAK,IAAIkkB,EAAI,EAAGA,EAAIs9mB,EAASt9mB,IACzBm9C,EAAIoB,MAAMt9D,KAAKm8nB,EAAMxkoB,GAAG2lE,MAAMv+C,IAElCg1Q,EAAK/zR,KAAKk8D,QAId63N,EAAOv4R,KAAKmgoB,UAEhB,IACIW,EACJvoW,EAAKn8P,KAAK,SAAUQ,GAElB,OAF2BA,EAAEy7lB,YAC3ByI,EAAUlkmB,GACLA,EAAEy7lB,YACX,IACK,IAAIp6jB,EAAI,EAAG8ikB,EAAOhjkB,EAAQthE,OAAQwhE,EAAI8ikB,EAAM9ikB,IAAK,CAClD,IAAIpB,EAASkB,EAAQE,GACjBrzC,EAAM5qB,KAAKM,OAAO0goB,yBAAyBnkkB,EAAOn9D,KAEtD,IAAIM,KAAKihoB,QAAQpkkB,EAAQikkB,EAASl2mB,GAAlC,CAGA,IAAIs2mB,GAAgC,IAAnBrkkB,EAAOrlC,QAAmB,GAAK,OAChD,GAAIytC,EACA,GAAIr6C,EAAMq6C,EACNh/D,EAAkBjG,KAAK6+nB,cAActtnB,WAAWqZ,IAAQ0rB,QAAW4qlB,QAElE,CAEDj7nB,EADa+tnB,EAAKv/kB,aAAa9xC,cAAc,qBAAqBA,cAAc,YACvD4O,WAAWqZ,EAAMq6C,IAAY3uB,QAAW4qlB,SAIrEj7nB,EAAkBjG,KAAK6+nB,cAActtnB,WAAWqZ,IAAQ0rB,QAAW4qlB,KAG3ElhoB,KAAKg/nB,oBAAqB5yc,YAAa,aAE3Cqwc,EAAcphoB,UAAUuvnB,gBAAkB,WACtC,GAAI5qnB,KAAK6+nB,cAAe,CACpB,IAAI4B,EAAWzgoB,KAAKM,OAAOU,QAAQ2B,cAAc,iBAAiBA,cAAc,YAAYf,WAAU,GACtG5B,KAAK87P,WAAWqtE,aAAas3T,EAAUzgoB,KAAK6+nB,eAC5C7+nB,KAAK4+nB,YAAY6B,KAGzBhE,EAAcphoB,UAAUojoB,sBAAwB,WAC5C,IAAIzK,EAAOh0nB,KAAKM,OACL,IAAI8yG,GAAU4ghB,EAAKv/kB,cAC1B8+D,OAAQ,eACRN,KAAMjzG,KAAKizG,QAGnBwphB,EAAcphoB,UAAU4loB,QAAU,SAAUpkkB,EAAQ6D,EAAKzuD,GAOrD,OAAOxU,EAAkBijE,IACrBjjE,EAAkBo/D,EAAOrlC,UACzBkpC,EAAIoB,MAAM7vD,GAAOulB,UAAYqlC,EAAOrlC,SAE5CilmB,EAAcphoB,UAAUoioB,kBAAoB,WACxC,OAAOz9nB,KAAKw9nB,UAAYx9nB,KAAKM,OAAOwmnB,cAAgB,IAAIyU,GAAoBv7nB,KAAKM,QAAU,IAAI04nB,GAAkBh5nB,KAAKM,SAE1Hm8nB,EAAcphoB,UAAU8loB,YAAc,SAAU1B,GAC5Cz/nB,KAAK87P,WAAWn6P,YAAY89nB,GACxBz/nB,KAAKM,OAAOo+nB,aACZ1+nB,KAAKM,OAAOq+nB,mBAAmBh8nB,cAAc,SAASX,UAAY,KAG1Ey6nB,EAAcphoB,UAAU+uN,aAAe,SAAU1qN,EAAK2H,EAAKytI,GACnD90I,KAAKM,OAAO28nB,oBACZj9nB,KAAKogoB,iBAAiBp5lB,OAAO,SAAU05B,GAAO,OAAOo0E,GAAYp1I,IAAQghE,EAAIhhE,MAAQN,QAAQ,SAAUshE,GAAO,OAAOA,EAAI5H,WAAazxD,IAE1IrH,KAAKmgoB,UAAUn5lB,OAAO,SAAU05B,GAAO,OAAOo0E,GAAYp1I,IAAQghE,EAAIhhE,MACjEN,QAAQ,SAAUshE,GACnBA,EAAI5H,WAAazxD,EACjBq5D,EAAIoB,MAAM1iE,QAAQ,SAAU6jE,GAAQ,OAAOA,EAAKnK,WAAazxD,OAGrEo1nB,EAAcphoB,UAAU+loB,cAAgB,SAAUnvnB,GAC9C,OAAOjS,KAAKM,OAAO+goB,cAAcpvnB,IAErCwqnB,EAAcphoB,UAAUimoB,mBAAqB,SAAUrvnB,GACnD,OAAOA,GAEXwqnB,EAAcphoB,UAAUkmoB,qBAAuB,SAAUtvnB,GACrD,OAAOjS,KAAKM,OAAOkhoB,qBAAqBvvnB,IAE5CwqnB,EAAcphoB,UAAUyioB,kBAAoB,SAAUj9nB,GACjC,UAAbA,EAAEswF,QAAsBtwF,EAAE4+B,SAC1Bz/B,KAAKw9nB,UAAYx9nB,KAAKy9nB,sBAGvBhB,KC5bPgF,GAA8B,WAI9B,SAASA,EAAanhoB,EAAQghE,GAC1B,IAAIvhE,EAAQC,KACZA,KAAK0hoB,OAAS,EACd1hoB,KAAKkP,OAAS,SAAUrO,GACpB,IAAImznB,EAAOj0nB,EAAMO,OACb6G,EAAStG,EAAE8xG,OAAOxrG,OAClBwvH,EAAY9iF,GAAa1sC,EAAQ,gBACrC,IAAM6snB,EAAKjN,kBAAmBiN,EAAKlN,gBAAoBrpnB,EAAkBk5H,IAClEA,EAAUn1H,iBAAiB,qBAAqB/E,OAAS,EAC5D,OAAO,EAEX,IAAIkloB,EAAgBxgoB,EAAc,OAASkC,UAAW,gDAClDrC,EAAUmG,EAAOrD,UAAUK,SAAS,gBAAkBgD,EAASwvH,EACnE,IAAK31H,IAAagznB,EAAKjN,iBAAmB/lnB,EAAQ8C,UAAUK,SAAS,uBACjE,OAAO,EAEX,IAEIs8D,EAFA1qD,EAAS/U,EAAQ0wC,aACjBkwlB,EAAgB5goB,EAAQ2B,cAAc,qBAAuB3B,EAAQ2B,cAAc,2BA4BvF,OA1BIi/nB,IAEInhkB,EADAz/D,EAAQ2B,cAAc,2BAChBqxnB,EAAK6N,mCAAmCD,EAAc3mkB,UAAU/qD,OAAQ8jnB,EAAKj2jB,SAG7Ei2jB,EAAK8N,eAAeF,EAAc/unB,aAAa,iBAEzD9S,EAAM88D,OAAS4D,EACfkhkB,EAAcn+nB,aAAa,eAAgBzD,EAAM88D,OAAOn9D,MAExD+gE,IAAQhjE,EAAkBgjE,EAAI44H,iBACW,IAArC54H,EAAI44H,eAAe96L,QAAQ,KAC3BojoB,EAAc3/nB,UAAYxB,SAASmC,cAAc89D,EAAI44H,gBAAgBr3L,UAAUkO,OAG/EyxnB,EAAc3/nB,UAAYy+D,EAAI44H,eAIlCsoc,EAAc9lnB,YAAc+lnB,EACxBnhkB,EAAItC,WAAan9D,EAAQmE,kBAAkBnD,UAEnD2/nB,EAAcj9nB,MAAMsR,MAAQhV,EAAQ4D,YAAc,KAClD+8nB,EAAcj9nB,MAAMqR,OAAS/U,EAAQ0wC,aAAe,KACpDiwlB,EAAcj9nB,MAAMyoB,YAAcpX,EAAS,GAAG7I,WAAa,KAC3D8mnB,EAAKhznB,QAAQW,YAAYggoB,GAClBA,GAEX3hoB,KAAKyvG,UAAY,SAAU5uG,GACvB,IAAImznB,EAAOj0nB,EAAMO,OACjB0znB,EAAKhznB,QAAQ2B,cAAc,gBAAgB+B,MAAM4xC,QAAU,OAC3D09kB,EAAKjmnB,OAAOg0nB,IAA0B56nB,OAAQtG,EAAEsG,OAAQ01D,OAAQ98D,EAAM88D,OAAQvgE,MAAOuE,EAAEvE,SAE3F0D,KAAK0wG,KAAO,SAAU7vG,GAClB,IAAImznB,EAAOj0nB,EAAMO,OACb6G,EAAStG,EAAEsG,OACf,GAAIA,EAAQ,CACR,IAAItB,EAAUkoU,EAAW5mU,EAAQ,WAC7B+wH,EAAen4H,EAAMO,OAAOU,QAAQ2B,cAAc,sBACtD,IAAKkD,GAAWA,EAAQgN,aAAa,QAAUmhnB,EAAKhznB,QAAQ6R,aAAa,MAMrE,OALA/O,EAAUo0H,GAAe,oBAAqB,sBAC1C87f,EAAKjN,kBACLiN,EAAKhznB,QAAQ2B,cAAc,qBAAqB+B,MAAM4xC,QAAU,OAChE09kB,EAAKhznB,QAAQ2B,cAAc,uBAAuB+B,MAAM4xC,QAAU,SAI1E09kB,EAAKjmnB,OAAOi0nB,IAAqB76nB,OAAQtG,EAAEsG,OAAQ01D,OAAQ98D,EAAM88D,OAAQvgE,MAAOuE,EAAEvE,UAG1F0D,KAAK+xG,SAAW,SAAUlxG,GACtB,IACIg4B,EADAm7lB,EAAOj0nB,EAAMO,OAEjB0znB,EAAKhznB,QAAQ2B,cAAc,gBAAgB+B,MAAM4xC,QAAU,SACrDzC,GAAahzC,EAAEsG,OAAQ,kBAAoB0sC,GAAahzC,EAAEsG,OAAQ,qBAClE6snB,EAAKjN,iBAAmBlzkB,GAAahzC,EAAEsG,OAAQ,kBAC/CtG,EAAEqO,OAAO2D,aAAa,iBAAmBghC,GAAahzC,EAAEsG,OAAQ,sBAClE5C,EAAO1D,EAAEqO,QACT2pB,GAAS,GAEbm7lB,EAAKjmnB,OAAOk0nB,IAAyB96nB,OAAQtG,EAAEsG,OAAQ7K,MAAOuE,EAAEvE,MAAOugE,OAAQ98D,EAAM88D,OAAQhkC,OAAQA,KAEzG74B,KAAKizG,KAAO,SAAUpyG,GAClB,IAAImznB,EAAOj0nB,EAAMO,OACbZ,EAAMmB,EAAE8yG,eAAe9gG,aAAa,gBACpChN,EAAUkoU,EAAWltU,EAAEsG,OAAQ,WACnC5C,EAAO1D,EAAE8yG,gBACL9tG,GAAWA,EAAQgN,aAAa,QAAUmhnB,EAAKhznB,QAAQ6R,aAAa,QAClEmhnB,EAAKjN,kBAAmBiN,EAAKlN,eAGnCkN,EAAKjmnB,OAAOm0nB,IAAqB/6nB,OAAQtG,EAAEsG,OAAQzH,IAAKA,KAE5DM,KAAKM,OAASA,EACdN,KAAKshE,eAAiBA,EACtBthE,KAAK88nB,YAAc98nB,KAAKshE,eAAeE,WAAW,eAClDxhE,KAAKmioB,aAAenioB,KAAKshE,eAAeE,WAAW,gBAC/CxhE,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAOslF,GAAG83iB,GAAgC19nB,KAAK29nB,WAAY39nB,MAChEA,KAAKM,OAAOslF,GAAGw8iB,GAA8BpioB,KAAKqioB,cAAerioB,OA+arE,OA1aAyhoB,EAAapmoB,UAAU0ioB,YAAc,WACjC,IAAI78nB,EAAMC,EAAc,OAASkC,UAAW,iBACxCy1L,EAAW33L,EAAc,OAASkC,UAAW,oBACjDnC,EAAIS,YAAYm3L,GAChB94L,KAAKk+nB,SAASh9nB,GACdlB,KAAKM,OAAOU,QAAQW,YAAYT,IAKpCugoB,EAAapmoB,UAAU8ioB,YAAc,WACjC,IAAImE,EAAYtioB,KAAKg9nB,WACrBsF,EAAU3goB,YAAY3B,KAAKuioB,qBAC3BvioB,KAAKs+nB,SAASgE,EAAU3/nB,cAAc,aACjC3C,KAAKM,OAAO28nB,qBACbj9nB,KAAKwioB,uBACLxioB,KAAKyioB,wBAETzioB,KAAKM,OAAOyN,OAAO20nB,IAA0BnqW,KAAMv4R,KAAKu4R,KAAMt4R,MAAQi9nB,SAA6C,IAAnCl9nB,KAAKM,OAAO28nB,uBAMhGwE,EAAapmoB,UAAU2hoB,SAAW,WAC9B,OAAOh9nB,KAAK2ioB,aAMhBlB,EAAapmoB,UAAU6ioB,SAAW,SAAU+B,GACxCjgoB,KAAK2ioB,YAAc1C,GAMvBwB,EAAapmoB,UAAUygQ,SAAW,WAC9B,OAAO97P,KAAK4ioB,aAMhBnB,EAAapmoB,UAAUijoB,SAAW,SAAUr+jB,GACxCjgE,KAAK4ioB,YAAc3ikB,GAMvBwhkB,EAAapmoB,UAAUwjoB,YAAc,WACjC,OAAO7+nB,KAAKwgoB,UAOhBiB,EAAapmoB,UAAUujoB,YAAc,SAAU6B,GAC3C,OAAOzgoB,KAAKwgoB,SAAWC,GAM3BgB,EAAapmoB,UAAU8koB,QAAU,WAE7B,OADYngoB,KAAK87P,WACJ+mY,MAAMtqW,MAOvBkpW,EAAapmoB,UAAUknoB,kBAAoB,WACvC,IAAItikB,EAAQjgE,KAAK+ujB,cACbj2X,EAAW94L,KAAKg9nB,WAAWpgnB,WAE/B,OADAk8K,EAASn3L,YAAYs+D,GACd64H,GAKX2oc,EAAapmoB,UAAU0zjB,YAAc,WACjC,IAAIilE,EAAOh0nB,KAAKM,OAEZ2/D,GADU+zjB,EAAKgB,aACP7znB,EAAc,SAAWkC,UAAW,UAAWI,OAAS+vgB,YAAa,SAAU5hgB,KAAM,WAE7FkxnB,GADW9ioB,KAAKg9nB,WAAWpgnB,WACX5c,KAAK0oH,uBACrBq6gB,EAAQD,EAAcC,MACtBtD,EAAQt+nB,EAAc,SAAWkC,UAAWrD,KAAKM,OAAOo+nB,WAAa,GAAK,WAC9E1+nB,KAAKgjoB,QAAU7hoB,EAAc,WAAaa,UAAWhC,KAAKM,OAAOU,QAAQsC,GAAK,gBAAiBD,UAAW,WAM1G,IAAK,IAHD4/nB,EAFAxC,EAAWt/nB,EAAc,YACzB+hoB,EAAU/hoB,EAAc,MAExBo3R,EAAOv4R,KAAKu4R,KAAOuqW,EAAcvqW,KAE5Bp8R,GADS,IAAIy7nB,GAAY53nB,KAAKshE,eAAgB03iB,GAASn6T,QACnD,GAAGh9S,EAAM02R,EAAK97R,OAAQN,EAAI0F,EAAK1F,IACxC,IAAK,IAAIonB,EAAI,EAAGspI,EAAQ0rI,EAAKp8R,GAAG2lE,MAAMrlE,OAAQ8mB,EAAIspI,EAAOtpI,IAAK,CAC/Cg1Q,EAAKp8R,GAAG2lE,MAAMv+C,GACzB0/mB,EAAW9hoB,EAAc,MACzB+hoB,EAAQvhoB,YAAYshoB,GAa5B,OAVIjP,EAAK7+J,gBAAkB6+J,EAAKpN,cAAgBoN,EAAKlN,gBACjD7mjB,EAAMn8D,UAAUM,IAAI,gBAExBpE,KAAKmjoB,eAAe1C,GACpBhB,EAAM99nB,YAAYuhoB,GAClBjjkB,EAAMt+D,YAAY3B,KAAK4+nB,YAAY6B,IACnCxgkB,EAAMt+D,YAAYohoB,GAClB9ikB,EAAMt+D,YAAY89nB,GAClBx/jB,EAAMt+D,YAAY3B,KAAKgjoB,SACvBhjoB,KAAK88nB,YAAYkB,WAAW/9jB,GAAS2/jB,SAAU5L,EAAKgB,aAAav4nB,OAAOyQ,aACjE+yD,GAEXwhkB,EAAapmoB,UAAUqtH,oBAAsB,WACzC,IAAIsrgB,EAAOh0nB,KAAKM,OACZy9D,EAAUi2jB,EAAKgB,aACf+N,EAAQ5hoB,EAAc,SACtBiioB,EAAYjioB,EAAc,MAAQkC,UAAW,mBAC7CggoB,EAAc,IAAIzL,GAAY53nB,KAAKshE,eAAgB03iB,GAASn6T,OAAQm1U,GACxEqP,EAAYrioB,QAAUoioB,EACtB,IACIE,EADA/qW,KAEJv4R,KAAKujoB,SAAWvjoB,KAAKwjoB,cACrB,IAAK,IAAIrnoB,EAAI,EAAG0F,EAAM7B,KAAKujoB,SAAUpnoB,EAAI0F,EAAK1F,IAC1Co8R,EAAKp8R,GAAK6D,KAAKk5nB,YAAY/8nB,GAC3Bo8R,EAAKp8R,GAAG2lE,SAEZy2N,EAAOv4R,KAAKm5nB,cAAc5gW,GAC1BA,EAAOv4R,KAAKyjoB,eAAelrW,GAC3B,IAASp8R,EAAI,EAAG0F,EAAM7B,KAAKujoB,SAAUpnoB,EAAI0F,EAAK1F,IAC1CmnoB,EAAYD,EAAYt3hB,OAAOwsL,EAAKp8R,GAAI4hE,GACpC/9D,KAAKM,OAAO0/D,WAAasjkB,EAAU3goB,cAAc,mBACjD2goB,EAAU5+nB,MAAMqR,OAAS/V,KAAKM,OAAO0/D,UAAY,MAErD+ikB,EAAMphoB,YAAY2hoB,GAMtB,OAHIP,MAAOA,EACPxqW,KAAMA,IAIdkpW,EAAapmoB,UAAU8noB,eAAiB,SAAU1C,GAC9C,IACIhgkB,EADA0xjB,EAAOnynB,KAAKM,OAAO00nB,aAEnBjoR,EAAU/sW,KAAKM,OAAOo3nB,yBAC1B,GAAI13nB,KAAKM,OAAOwmnB,cACZ,IAAK,IAAI3qnB,EAAI,EAAG0F,EAAM7B,KAAKM,OAAOm0nB,cAAc12jB,QAAQthE,OAAQN,EAAI0F,EAAK1F,IACjE6D,KAAKM,OAAOw2nB,6BAAsD,IAAxB/pR,EAAQxuW,QAAQpC,KAG9DskE,EAAMt/D,EAAc,OACpBs/nB,EAAS9+nB,YAAY8+D,KAGzBzgE,KAAKM,OAAO84nB,gBAAkBp5nB,KAAKM,OAAOq7R,aAC1Cl7N,EAAMt/D,EAAc,OACpBs/nB,EAAS9+nB,YAAY8+D,IAEzB,IAAStkE,EAAI,EAAG0F,EAAMswnB,EAAK11nB,OAAQN,EAAI0F,EAAK1F,IACxCskE,EAAMt/D,EAAc,QACI,IAApBgxnB,EAAKh2nB,GAAGq7B,SACRvxB,EAAkBw6D,GAAOnqB,QAAW,SAExCmqlB,EAAS9+nB,YAAY8+D,GAEzB,OAAOggkB,GAEXgB,EAAapmoB,UAAU89nB,cAAgB,SAAU5gW,GAI7C,IAAK,IAFDy7V,EAAOh0nB,KAAKM,OACZysW,EAAU/sW,KAAKM,OAAOo3nB,yBACjBv7nB,EAAI,EAAG0F,EAAM02R,EAAK97R,OAAQN,EAAI0F,EAAK1F,IAAK,CAC7C,GAAI63nB,EAAKlN,cACL,IAAK,IAAI7ojB,EAAI,EAAGmoQ,EAAQ4tT,EAAKS,cAAc12jB,QAAQthE,OAAQwhE,EAAImoQ,EAAOnoQ,IAC9Dj+D,KAAKM,OAAOw2nB,6BAAsD,IAAxB/pR,EAAQxuW,QAAQ0/D,IAG9Ds6N,EAAKp8R,GAAG2lE,MAAMt9D,KAAKxE,KAAKq5nB,gBAAiBrgB,GAAS0qB,gBAGtD1P,EAAKoF,gBAAkBpF,EAAKr4V,YAC5BpD,EAAKp8R,GAAG2lE,MAAMt9D,KAAKxE,KAAKq5nB,gBAAiBrgB,GAAS2qB,eAG1D,OAAOprW,GAEXkpW,EAAapmoB,UAAUoooB,eAAiB,SAAUlrW,GAC9C,IACIwqW,EAAQ/ioB,KAAKM,OAAOu/nB,kBAAoB7/nB,KAAKM,OAAOu/nB,iBAAiBl9nB,cAAc,SACnFwvnB,EAAOnynB,KAAKM,OAAOw2nB,2BAA6B92nB,KAAKM,OAAO00nB,aAAeh1nB,KAAKM,OAAOy9D,QAC3F/9D,KAAK0hoB,OAAS,EACd,IAAK,IAAIvloB,EAAI,EAAG0F,EAAMswnB,EAAK11nB,OAAQN,EAAI0F,EAAK1F,IACxCo8R,EAAOv4R,KAAK4joB,YAAYzR,EAAKh2nB,GAAIo8R,EAAM,EAAS,IAANp8R,GAAS,EAAOA,IAAO0F,EAAM,EAAIkhoB,GAE/E,OAAOxqW,GAEXkpW,EAAapmoB,UAAUuooB,YAAc,SAAUzR,EAAM55V,EAAMtmR,EAAO4xnB,EAAYC,EAAYC,EAAWC,GACjG,IAAIC,EAAUF,EAAY,aAAe,GACrC9+jB,EAAUjlE,KAAKM,OAAO28nB,mBAC1B,GAAK9K,EAAKp0jB,QAQL,CACD,IAAI23N,EAAU11R,KAAKkkoB,WAAW/R,EAAM,GACpC,GAAIz8V,EAAS,CACT,IAAIyuW,EAASnkoB,KAAKokoB,iBAAiBjS,EAAKp0jB,SAAWsmkB,WAAW,EAAOC,QAAQ,EAAM10nB,IAAK,MACnFq1D,GAAYA,KACP++jB,IAAchkoB,KAAKM,OAAOikoB,cAAgBvkoB,KAAK0hoB,OAAS,GAAMyC,EAAgB,YAC5EH,GAActuW,EAAU11R,KAAK0hoB,OAAS1hoB,KAAKM,OAAOikoB,gBAAkBJ,EAAOG,UACnF/rW,EAAKtmR,GAAO6vD,MAAMt9D,KAAK,IAAIioe,IACvBu0I,SAAUhI,GAASwrB,cAAe3nkB,OAAQs1jB,EAC1Cz8V,QAAS11R,KAAKykoB,WAAW/uW,EAASsuW,EAAWG,EAAOv0nB,QAIhE,IAAK,IAAIzT,EAAI,EAAG0F,EAAMswnB,EAAKp0jB,QAAQthE,OAAQN,EAAI0F,EAAK1F,IAChDo8R,EAAOv4R,KAAK4joB,YAAYzR,EAAKp0jB,QAAQ5hE,GAAIo8R,EAAMtmR,EAAQ,EAAG4xnB,EAAkB,IAAN1noB,EAASA,IAAO0F,EAAM,GAAMkioB,EAAWC,SArB5G/+jB,GAAYA,KACP++jB,IAAchkoB,KAAK0hoB,OAAS1hoB,KAAKM,OAAOikoB,eAAiBpS,EAAK+K,WAC5D8G,GAAahkoB,KAAK0hoB,QAAU1hoB,KAAKM,OAAOikoB,gBAAkBpS,EAAK+K,YACvE3kW,EAAKtmR,GAAO6vD,MAAMt9D,KAAKxE,KAAKq5nB,aAAalH,EAAMnZ,GAASn6T,OAAQ7+S,KAAKujoB,SAAWtxnB,GAAQ4xnB,EAAa,GAAMC,EAAa,cAAgB,IAAOG,EAAShynB,EAAOjS,KAAKM,OAAOokoB,oBAAoBvS,EAAKzynB,OAExMM,KAAK0hoB,SAmBT,OAAOnpW,GAEXkpW,EAAapmoB,UAAU+ooB,iBAAmB,SAAUjS,EAAMgS,GACtD,IAAK,IAAIhooB,EAAI,EAAGA,EAAIg2nB,EAAK11nB,OAAQN,IACzBg2nB,EAAKh2nB,GAAG4hE,QACRomkB,EAASnkoB,KAAKokoB,iBAAiBjS,EAAKh2nB,GAAG4hE,QAASomkB,IAG5ChS,EAAKh2nB,GAAG+goB,WACRiH,EAAOE,WAAY,EACnBF,EAAOv0nB,OAEXu0nB,EAAOG,OAASH,EAAOG,SAAWnS,EAAKh2nB,GAAG+goB,UACtCl9nB,KAAKM,OAAOu5nB,sBAAsB1H,EAAKh2nB,GAAG4vB,OAAS/rB,KAAKM,OAAOikoB,gBAG3E,OAAOJ,GAEX1C,EAAapmoB,UAAUopoB,WAAa,SAAU/uW,EAASsuW,EAAWW,GAC9D,IAAIC,EAAS5koB,KAAKM,OAAOikoB,cASzB,OARIvkoB,KAAKM,OAAO28nB,oBAAsBj9nB,KAAK0hoB,OAAShsW,EAAUkvW,IACtDZ,EACAtuW,EAAUA,GAAWkvW,EAAS5koB,KAAK0hoB,OAASkD,EAAS5koB,KAAK0hoB,OAAS,GAAKiD,EAGxEjvW,GAAqBA,GAAWkvW,EAAS5koB,KAAK0hoB,OAASkD,EAASD,EAAY3koB,KAAK0hoB,OAASiD,IAG3FjvW,GAEX+rW,EAAapmoB,UAAU69nB,YAAc,SAAUjnnB,GAC3C,OAAO,IAAIuuT,QAEfihU,EAAapmoB,UAAUg+nB,aAAe,SAAUx8jB,EAAQmkjB,EAAU/pV,EAAS5zR,EAAWo9R,EAAUuxO,GAC5F,IAAI0nH,GACAlimB,QAAWqlC,EAAOrlC,QAClBmimB,YAAc,EACdv6U,YAAe3hT,EAAkBo/D,EAAOw8H,gBACxCugc,MAAS,GACT/8jB,OAAUA,EACVmkjB,SAAYA,EACZ/pV,QAAWA,EACX5zR,UAAaA,EACb4O,MAASwuR,EACTuxO,SAAYA,GAKhB,QAHK0nH,EAAIziW,SAAWyiW,EAAIziW,QAAU,WACvByiW,EAAIziW,QAER,IAAIw1M,GAAKitJ,IAMpB+H,EAAapmoB,UAAUsioB,WAAa,SAAU5/jB,GAQ1C,IAAK,IAJDnzC,EAHAopmB,EAAOh0nB,KAAKM,OAEZ4goB,MADU7/nB,MAAMC,KAAKtB,KAAKmgoB,WACb,IAIbl7jB,EAAU+ujB,EAAKiJ,mBACVh/jB,EAAI,EAAG8ikB,EAAOhjkB,EAAQthE,OAAQwhE,EAAI8ikB,EAAM9ikB,IAAK,CAClD,IAAIpB,EAASkB,EAAQE,GAKrB,GAJArzC,EAAMopmB,EAAKgN,yBAAyBnkkB,EAAOn9D,MACpB,IAAnBm9D,EAAOrlC,UACP0pmB,EAAa,QAEbj8jB,EACA,GAAIr6C,EAAMq6C,EACNh/D,EAAkBjG,KAAK6+nB,cAAczknB,SAASwQ,IAAQ0rB,QAAW4qlB,QAEhE,CAEDj7nB,EADiB+tnB,EAAK2K,mBAAmBh8nB,cAAc,oBAAoBA,cAAc,YAC5DyX,SAASwQ,EAAMq6C,IAAY3uB,QAAW4qlB,SAIvEj7nB,EAAkBjG,KAAK6+nB,cAAczknB,SAASwQ,IAAQ0rB,QAAW4qlB,IAErElhoB,KAAK6koB,cAGbpD,EAAapmoB,UAAUgnoB,cAAgB,WACnCrioB,KAAK6koB,aAMTpD,EAAapmoB,UAAUwpoB,UAAY,WAC/B,IAAIvC,EAAYtioB,KAAKg9nB,WACjB/8jB,EAAQjgE,KAAK87P,WACb72L,EAAUjlE,KAAKM,OAAO28nB,mBAC1B14nB,EAAOvE,KAAK87P,YACZ77L,EAAM36D,YAAY26D,EAAMrjD,YACxBqjD,EAAM36D,YAAY26D,EAAM1uD,WAAW,IACnC,IAAIkvnB,EAAWt/nB,EAAc,YACzB2hoB,EAAgB9ioB,KAAK0oH,sBACzB1oH,KAAKu4R,KAAOuqW,EAAcvqW,KAC1Bt4N,EAAM/6D,aAAa49nB,EAAcC,MAAO9ikB,EAAMrjD,YAC9C5c,KAAKmjoB,eAAe1C,GACpBxgkB,EAAM/6D,aAAalF,KAAK4+nB,YAAY6B,GAAWxgkB,EAAMrjD,YACrD5c,KAAKs+nB,SAASr+jB,GACdjgE,KAAK+/nB,cAAc9/jB,GACnBjgE,KAAKM,OAAOyN,OAAO6vnB,OACnB59nB,KAAKmioB,aAAa2C,oBAClB9koB,KAAKM,OAAOykoB,sBACP9/jB,GACDjlE,KAAKwioB,uBAGT,IAAK,IADDjqW,KAAUl3R,MAAMC,KAAKghoB,EAAU9goB,iBAAiB,sBAC3CpD,EAAK,EAAGk9mB,EAAS/iV,EAAMn6R,EAAKk9mB,EAAO7+mB,OAAQ2B,IAAM,CACtD,IAAIsiE,EAAM46iB,EAAOl9mB,GACb4moB,KAAY3joB,MAAMC,KAAKo/D,EAAIl/D,iBAAiB,wBAC5CwjoB,EAAOvooB,QACPuooB,EAAOA,EAAOvooB,OAAS,GAAGqH,UAAUM,IAAI,0BAG3C6gE,GACDjlE,KAAKM,OAAOyN,OAAO20nB,IAA0BnqW,KAAMv4R,KAAKu4R,KAAMt4R,MAAQi9nB,SAA6C,IAAnCl9nB,KAAKM,OAAO28nB,sBAE5Fj9nB,KAAKM,OAAO+8nB,eAA2D,WAA1Cr9nB,KAAKM,OAAO2koB,iBAAiBC,UAC1DpqnB,GAAKy9Q,GAAM,IAGnBkpW,EAAapmoB,UAAU0koB,cAAgB,SAAU9/jB,GAC7CjgE,KAAKg9nB,WAAWpgnB,WAAWjb,YAAYs+D,IAE3CwhkB,EAAapmoB,UAAUmooB,YAAc,WAGjC,IAAK,IAFDl3nB,EAAM,EACN6lnB,EAAOnynB,KAAKM,OAAOy9D,QACd5hE,EAAI,EAAG0F,EAAMswnB,EAAK11nB,OAAQN,EAAI0F,EAAK1F,IAAK,CAC7C,IAAIwxM,EAAQ3tM,KAAKmloB,WAAWhT,EAAKh2nB,GAAI,GACjCmQ,EAAMqhM,IACNrhM,EAAMqhM,GAGd,OAAOrhM,EAAM,GAEjBm1nB,EAAapmoB,UAAU8poB,WAAa,SAAU1kkB,EAAKxuD,GAC/C,IAAI3F,EAAM2F,EACN4zc,KACJ,GAAIplZ,EAAI1C,QAAS,CACb9rD,IACA,IAAK,IAAI9V,EAAI,EAAG0F,EAAM4+D,EAAI1C,QAAQthE,OAAQN,EAAI0F,EAAK1F,IAC/C0pd,EAAQ1pd,GAAK6D,KAAKmloB,WAAW1kkB,EAAI1C,QAAQ5hE,GAAI8V,GAEjD,IAAK,IAAIsR,EAAI,EAAGA,EAAIsic,EAAQppd,OAAQ8mB,IAC5BjX,EAAMu5c,EAAQtic,KACdjX,EAAMu5c,EAAQtic,IAGtBtR,EAAQ3F,EAEZ,OAAO2F,GAEXwvnB,EAAapmoB,UAAU6ooB,WAAa,SAAUzjkB,EAAK7wD,GAC/C,GAAI6wD,EAAI1C,QACJ,IAAK,IAAI5hE,EAAI,EAAG0F,EAAM4+D,EAAI1C,QAAQthE,OAAQN,EAAI0F,EAAK1F,IAC/CyT,EAAM5P,KAAKkkoB,WAAWzjkB,EAAI1C,QAAQ5hE,GAAIyT,QAItC6wD,EAAIjpC,SACJ5nB,IAGR,OAAOA,GAEX6xnB,EAAapmoB,UAAUmnoB,qBAAuB,WAC1C,IAAIxO,EAAOh0nB,KAAKM,OAChB,GAAMN,KAAKM,OAAOymnB,iBAAoB/mnB,KAAKM,OAAOwmnB,eAAiB9mnB,KAAKM,OAAOm0nB,cAAc2Q,aAI7F,IAAK,IADDC,KAAgBhkoB,MAAMC,KAAK0ynB,EAAK2K,mBAAmBn9nB,iBAAiB,oBAC/DrF,EAAI,EAAG0F,EAAMwjoB,EAAW5ooB,OAAQN,EAAI0F,EAAK1F,IACnC,IAAIuxG,GAAU23hB,EAAWlpoB,IAChC+yG,WAAY,gBACZ70D,SAAU,EACVnrC,OAAQlP,KAAKkP,OACbugG,UAAWzvG,KAAKyvG,UAChBiB,KAAM1wG,KAAK0wG,KACXqB,SAAU/xG,KAAK+xG,SACf1D,MAAO,iBAInBozhB,EAAapmoB,UAAUonoB,qBAAuB,WAC1C,IAAIzO,EAAOh0nB,KAAKM,OACL,IAAI8yG,GAAU4ghB,EAAK2K,oBAC1BprhB,OAAQ,eACRN,KAAMjzG,KAAKizG,QAGZwuhB,KC5hBP6D,GAA8B,WAC9B,SAASA,EAAahloB,EAAQiloB,GAC1BvloB,KAAKgB,QAAUG,EAAc,MAAQkC,UAAW,YAAaI,OAASmO,KAAM,WAAYo/G,SAAU,QAClGhxH,KAAKwloB,UAAYrkoB,EAAc,SAAWkC,UAAW,gBAAiBI,OAASiD,KAAQ,cACvF1G,KAAKyloB,UAAYF,EAAQ/jkB,WAAW,gBACpCxhE,KAAK6sY,UAAY04P,EAAQ/jkB,WAAW,kBACpCxhE,KAAKM,OAASA,EA2MlB,OArMAgloB,EAAajqoB,UAAUqqoB,OAAS,WAC5B,MAAO,IAQXJ,EAAajqoB,UAAU2gC,OAAS,SAAU6gC,EAAQ7/D,EAAOR,GAIrD,OAHKiB,EAAkBo/D,EAAO7gC,UAC1Bh/B,EAAQgD,KAAK6sY,UAAUhvM,OAAO7gM,EAAO6/D,EAAOkrjB,iBAEzCtqnB,EAAkBT,GAAS,GAAKA,EAAMkQ,YAEjDo4nB,EAAajqoB,UAAUsqoB,SAAW,SAAUploB,EAAM0iE,EAAMzmE,EAAMkH,EAAYkioB,GACtE,IAAI7moB,EACJ,GAAIkkE,EAAKpG,OAAO5tD,SAAU,CACtB,IACI42nB,EAAYnnoB,KAAWlC,GAAOqG,KAASA,EAAiB,eAAI+ioB,EAAO/ioB,IAMvE,OALA9D,EAASkkE,EAAKpG,OAAOsrjB,mBAAZlljB,CAAgCvkE,GAASuT,MAASvO,EAAsB,OAAKmioB,GAAY7loB,KAAKM,OAAQ,YAC/G++D,GAAe9+D,EAAMxB,GACrBA,EAAS,KACTwB,EAAKiD,aAAa,aAAcjD,EAAK06D,UAAY,mCAC7CgI,EAAKpG,OAAOsB,aACT,EAEX,OAAO,EACP,IAAIt7D,GAQRyioB,EAAajqoB,UAAUyqoB,gBAAkB,SAAUjpkB,EAAQ7/D,EAAOR,GAC9D,IAAKiB,EAAkBo/D,EAAOgwU,WAC1B,GAAInwU,GAAuBG,EAAOgwU,UAAW,YAAa,CAEtD7vY,GAAQ,IAAI6vY,EADIhwU,EAAOgwU,YACChwY,SAASggE,EAAQrgE,QAGzCQ,EADiC,mBAArB6/D,EAAOgwU,UACXhwU,EAAOgwU,UAAUhwU,EAAQrgE,GAGzBqgE,EAAOgwU,UAAUhwY,SAASggE,EAAQrgE,GAGlD,OAAOQ,GASXsooB,EAAajqoB,UAAU0wG,OAAS,SAAU9oC,EAAMzmE,EAAMkH,GAClD,OAAO1D,KAAK+loB,YAAY9ikB,EAAMzmE,EAAMkH,IASxC4hoB,EAAajqoB,UAAU2qoB,UAAY,SAAUrvX,EAAI1zM,EAAMzmE,EAAMkH,GACzD,IAAInD,EAAOP,KAAK+loB,YAAY9ikB,EAAMzmE,EAAMkH,GACxCizQ,EAAG30Q,UAAY,GAEf,IAAK,IAAI5D,EAAK,EAAGgjE,KADC//D,MAAMC,KAAKf,EAAKgR,YACMnT,EAAKgjE,EAAW3kE,OAAQ2B,IAAM,CAClE,IAAIsE,EAAO0+D,EAAWhjE,GACtBu4Q,EAAGh1Q,YAAYe,KAGvB4ioB,EAAajqoB,UAAU0qoB,YAAc,SAAU9ikB,EAAMzmE,EAAMkH,GACvD,IAEIkioB,EAFArloB,EAAOP,KAAKgB,QAAQY,YACpBi7D,EAASoG,EAAKpG,OAEdoG,EAAKC,eACL0ikB,EAAQ3ikB,EAAKD,eAAe,KAAOngE,KAASA,EAAGg6D,EAAOuB,iBAAmBvB,EAAO7gC,OAAS,KAAO,GAAIn5B,IAGxG,IAAI8qC,EAAY3tC,KAAK0loB,SACjB1ooB,EAAQimE,EAAKC,aAAeljE,KAAKnD,SAASggE,EAAOuB,gBAAiBwnkB,EAAO/okB,GACzE78D,KAAKnD,SAASggE,EAAO9wC,MAAOvvB,EAAMqgE,GAMtC,GALoB,SAAhBA,EAAOn2D,MAAoBjJ,EAAkBT,KAC7CA,EAAQ,IAAIgjB,KAAKhjB,IAErBA,EAAQgD,KAAKg8B,OAAO6gC,EAAQ7/D,EAAOR,GACnCmxC,EAAY3wC,EAAMkQ,WACE,YAAhB2vD,EAAOn2D,OAAuBm2D,EAAOopkB,kBAAmB,CACxD,IAAIC,EAAuB,SAAVlpoB,GAA8B,UAAVA,EAAqB,KAAiB,SAAVA,EAAmB,OAAS,QAC7F2wC,EAAYu4lB,EAAYlmoB,KAAKyloB,UAAU1xjB,YAAYmyjB,GAAav4lB,EAEpE,IAAIw4lB,EAAgBnmoB,KAAK8loB,gBAAgBjpkB,EAAQ7/D,EAAOR,GAMxD,GALAmxC,EAAalwC,EAAkBo/D,EAAOgwU,WAAgFl/V,EAAnElwC,EAAkB0ooB,GAAiB,GAAKA,EAAcj5nB,WACzG3M,EAAKiD,aAAa,cAA6B,KAAdmqC,EAAmB,QAAUA,GAAa,kBAAoBs1B,EAAKpG,OAAOsB,YACtG1gE,EAAkBwlE,EAAKpG,OAAOsB,aAC/B59D,EAAKiD,aAAa,aAAcmqC,EAAY,kBAAoBs1B,EAAKpG,OAAOsB,YAE5En+D,KAAK2loB,SAASploB,EAAM0iE,EAAMzmE,EAAMkH,EAAYkioB,IAA0B,aAAhB/okB,EAAOn2D,KAC7D1G,KAAKomoB,WAAW7loB,EAAMotC,EAAWkvB,EAAOyrjB,aAAezrjB,EAAOyrjB,eAAiB,kBAE9E,GAAoB,aAAhBzrjB,EAAOn2D,KAAqB,CACjCnG,EAAKuD,UAAUM,IAAI,gBACnB7D,EAAKiD,aAAa,aAAc,aAO5BsuT,EAAYh/S,IAAe,GAASN,QALpCxV,IADAgD,KAAKM,OAAOk+nB,kBAAkB6H,kBACZ,SAAVrpoB,EAK4CqW,MAAO,OACrDnO,aAAalF,KAAKwloB,UAAU5joB,YAAakwT,EAAUl1S,YAC7Drc,EAAKoB,YAAYmwT,GAMrB,GAJiC,UAA7B9xT,KAAKM,OAAOk4nB,cAA4Bx4nB,KAAKM,OAAOi8L,uBACpDt5H,EAAKnK,YAAa,GAEtB94D,KAAK61E,cAAct1E,EAAM0iE,EAAMv/D,GACX,YAAhBm5D,EAAOn2D,MAAsBm2D,EAAOopkB,kBAAmB,CACvD,IAAIzznB,EAAUwvC,MAAMjtB,SAAS/3B,EAAMkQ,WAAY,KAAiB,SAAVlQ,EAAmB+3B,SAAS/3B,EAAMkQ,WAAY,IAAM,EACtG4kT,EAAYh/S,IAAe,GAASN,QAASA,EAASa,MAAO,MACjE9S,EAAKyB,UAAY,GACjB8vT,EAAUhuT,UAAUM,IAAI,uBACxB7D,EAAKoB,YAAYmwT,GACjBvxT,EAAKiD,aAAa,aAAcgP,EAAU,kBAAoBywD,EAAKpG,OAAOsB,YAE9E,OAAO59D,EACP,IAAIsC,GAQRyioB,EAAajqoB,UAAU+qoB,WAAa,SAAU7loB,EAAMotC,EAAW3hB,GAG3D,YAFiB,IAAbA,IAAuBA,EAAW,aACtCzrB,EAAKyrB,GAAY2hB,EACVptC,GAKX+koB,EAAajqoB,UAAUw6E,cAAgB,SAAUt1E,EAAM0iE,EAAMv/D,GACzD,IAAIm5D,EAASoG,EAAKpG,OAClB78D,KAAKsmoB,uBAAuB/loB,EAAM0iE,EAAsB,aAAhBpG,EAAOn2D,MAC/C62D,GAAsBh9D,EAAMmD,GAC5B65D,GAAsBh9D,EAAM0iE,EAAKv/D,YAC7Bm5D,EAAOW,kBACPD,GAAsBh9D,EAAMs8D,EAAOW,kBAEnCX,EAAOxqB,YACP9xC,EAAKmE,MAAM2tC,UAAYwqB,EAAOxqB,WAEV,SAApBwqB,EAAO0pkB,SACPhmoB,EAAKuD,UAAUM,IAAI,cAEM,wBAApBy4D,EAAO0pkB,UACZhmoB,EAAKuD,UAAUM,IAAI,sBAG3BkhoB,EAAajqoB,UAAUiroB,uBAAyB,SAAU/loB,EAAM0iE,EAAMujkB,GAClE,IAAI1+e,KAEAjkJ,KACAo/D,EAAKyyN,UACL5tI,EAAK4tI,QAAUzyN,EAAKyyN,SAEpBzyN,EAAKg0N,UACLnvI,EAAKmvI,QAAUh0N,EAAKg0N,SAEpBh0N,EAAKm8O,YACLv7S,EAAQW,KAAK,kBAEby+D,EAAKnK,aACLj1D,EAAQW,KAAKjJ,MAAMsI,GAAU,wBAAyB,aAClD2ioB,GACAjmoB,EAAKoC,cAAc,YAAYmB,UAAUM,IAAI,YAGhD3G,EAAkBwlE,EAAKhxD,SACxB61I,EAlBqB,iBAkBC7kF,EAAKhxD,OAE1BgxD,EAAKzrC,SACN3zB,EAAQW,KAAK,UAEjBsjJ,EAAKvmB,MAAQ19H,EACb05D,GAAsBh9D,EAAMunJ,IAEhCw9e,EAAajqoB,UAAUwB,SAAW,SAAUkvB,EAAOvvB,EAAMqgE,GACrD,OAAOA,EAAOD,cAAc7wC,EAAOvvB,EAAMqgE,IAEtCyokB,KvdtNPmB,GAA6B,WAC7B,SAASA,KAsBT,OApBAA,EAAYproB,UAAU2ioB,WAAa,SAAU72nB,EAAQ6L,GACrC1U,OAAOhB,KAAK0V,GAClB5T,QAAQ,SAAUq4B,GAAQ,OAAO2tC,GAAsBj+D,EAAQgwG,GAAO1/E,GAAOzkB,EAAQykB,OAE/FgvmB,EAAYproB,UAAUqroB,UAAY,SAAUv/nB,EAAQ8nJ,GAChD7pF,GAAsBj+D,EAAQgwG,GAAO83C,OAAQA,IAEjDw3e,EAAYproB,UAAUsroB,QAAU,SAAUx/nB,EAAQquB,GAC9C4vC,GAAsBj+D,EAAQgwG,GAAOt/E,KAAMrC,EAAgC,kBAAdA,IAEjEixmB,EAAYproB,UAAU0hoB,QAAU,SAAU51nB,EAAQy/nB,GAC9CxhkB,GAAsBj+D,EAAQgwG,GAAO8mhB,KAAM2I,GAC3CxhkB,GAAsBj+D,EAAQgwG,GAAO0vhB,QAAS,MAAM,IAExDJ,EAAYproB,UAAUyroB,WAAa,SAAU3/nB,EAAQ4/nB,EAAWxioB,GAC5D6gE,GAAsBj+D,EAAQgwG,GAAO6vhB,QAASD,EAAWxioB,IAE7DkioB,EAAYproB,UAAU4roB,cAAgB,SAAU9/nB,EAAQs4C,GACpD2lB,GAAsBj+D,EAAQgwG,GAAO+vhB,WAAY,QAASznlB,IAEvDgnlB,KAePtvhB,IACA83C,OAAQ,gBACRr9I,KAAM,OACN49H,SAAU,gBACV+uf,gBAAiB,uBACjB1mmB,KAAM,YACNommB,KAAM,YACN4I,QAAS,eACTG,QAAS,eACTE,WAAY,kBACZC,SAAU,gBACVh1e,MAAO,aACPyte,SAAU,iBwdtDVt1iB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAqBxCy8iB,GAAoC,SAAUj8iB,GAE9C,SAASi8iB,IACL,IAAIrnoB,EAAmB,OAAXorF,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAOhE,OANAD,EAAMiB,QAAUG,EAAc,MAAQkC,UAAW,eAAgBI,OAASmO,KAAM,eAAgBo/G,SAAU,QAC1GjxH,EAAM+8nB,YAAc,IAAI2J,GACxB1moB,EAAMsnoB,QAAUlmoB,EAAc,QAAUkC,UAAW,iBACnDtD,EAAMunoB,QAAUnmoB,EAAc,OAASkC,UAAW,4BAClDtD,EAAMwnoB,IAAMpmoB,EAAc,OAC1BpB,EAAMynoB,UAAYrmoB,EAAc,SAAWkC,UAAW,mBAAoBI,OAASiD,KAAQ,cACpF3G,EA6JX,OAtKAuqF,GAAU88iB,EAAoBj8iB,GAe9Bi8iB,EAAmB/roB,UAAUqqoB,OAAS,WAClC,OAAO1loB,KAAKunoB,IAAI3loB,aAQpBwloB,EAAmB/roB,UAAU0wG,OAAS,SAAU9oC,EAAMzmE,EAAMkH,GACxD,IAAInD,EAAOP,KAAKgB,QAAQY,YACpB6loB,EAActmoB,EAAc,OAASkC,UAAW,0CACpD,OAAOrD,KAAK0noB,cAAczkkB,EAAM1iE,EAAMknoB,IAO1CL,EAAmB/roB,UAAU62D,QAAU,SAAU+Q,EAAM1iE,GACnDP,KAAK4xF,MAAMrxF,GACX,IAAIknoB,EAActmoB,EAAc,OAASkC,UAAW,0CACpD,OAAOrD,KAAK0noB,cAAczkkB,EAAM1iE,EAAMknoB,IAE1CL,EAAmB/roB,UAAUu2F,MAAQ,SAAUrxF,GAC3CA,EAAKyB,UAAY,IAErBoloB,EAAmB/roB,UAAUqsoB,cAAgB,SAAUzkkB,EAAM1iE,EAAMknoB,GAC/D,IAAI5qkB,EAASoG,EAAKpG,OACd8qkB,KAEAC,EAAW5noB,KAAK0loB,SAKpB,GAJAhioB,EAAWkkoB,GACPC,eAAgBhrkB,EAAOn9D,IACvB6hI,MAAS,oBAEO,aAAhB1kE,EAAOn2D,KAAqB,CAC5B,IAAI1J,EAAQ6/D,EAAOsB,WACfA,EAAan+D,KAAKqnoB,QAAQzloB,YAC9Bu8D,EAAWtB,EAAOyrjB,gBAAkBtrnB,EACpC4qoB,EAASjmoB,YAAYw8D,OAEpB,CACDtB,EAAO6qjB,SAAW,cAClB,IAAIogB,EAAeh1nB,IAAe,GAASN,SAAS,EAAOa,MAAO,MAClEy0nB,EAAa5ioB,aAAalF,KAAKwnoB,UAAU5loB,YAAakmoB,EAAalrnB,YACnEgrnB,EAASjmoB,YAAYmmoB,GACrBF,EAAS9joB,UAAUM,IAAI,sBAK3B,GAHApE,KAAKsmoB,uBAAuB/loB,EAAM0iE,GAClCjjE,KAAKomoB,WAAW7loB,EAAMqnoB,GACtBrnoB,EAAKoB,YAAY3B,KAAKsnoB,QAAQ1loB,aACzB5B,KAAKM,OAAO60d,gBAAsD,cAApCn1d,KAAKM,OAAO2tnB,eAAevnnB,MACzDm2D,EAAOs4Z,iBAAmB13d,EAAkBo/D,EAAO9wC,UAClD/rB,KAAKM,OAAO0mnB,iBAAkBnqjB,EAAOmqjB,gBAAiB,CACxDtjnB,EAAW+joB,GACPI,eAAgB,YAAchrkB,EAAOn9D,MAEzCa,EAAKuD,UAAUM,IAAI,eACnB,IAAI2joB,KACJ,GAAI/noB,KAAKM,OAAO2tnB,eAAelwjB,QAAQthE,QAAUuD,KAAKM,OAAO2tnB,eAAelwjB,QAAQthE,SAAWsroB,EAAetroB,OAC1G,IAAK,IAAIwV,EAAQ,EAAGA,EAAQjS,KAAKM,OAAOy9D,QAAQthE,OAAQwV,IACpD,IAAK,IAAI6M,EAAQ,EAAGA,EAAQ9e,KAAKM,OAAO2tnB,eAAelwjB,QAAQthE,OAAQqiB,IACnE,GAAI9e,KAAKM,OAAO2tnB,eAAelwjB,QAAQj/C,GAAOiN,QAAU8wC,EAAO9wC,MAAO,CAClE07mB,EAAY3joB,UAAUM,IAAI,cAC1B2joB,EAAevjoB,KAAKq4D,EAAO9wC,OAC3B,MAKhBxrB,EAAKoB,YAAY8loB,EAAY7loB,aAE7BqhE,EAAK5/D,WACL9C,EAAKuD,UAAUM,IAAI6+D,EAAK5/D,WAExBw5D,EAAOW,kBACPD,GAAsBh9D,EAAMs8D,EAAOW,kBAEnCX,EAAO+pjB,eACP+gB,EAAS9vmB,KAAO,QAEhBglC,EAAOiqjB,gBACP6gB,EAASX,SAAU,GAEvBzmoB,EAAOP,KAAKgooB,oBAAoBnrkB,EAAQt8D,GACxC,IAAIxB,EACAkpoB,EAAUjooB,KAAKM,OACf0xgB,EAAWi2H,EAAQpO,sBAAsBh9jB,EAAO9wC,OAOpD,GANKtuB,EAAkBo/D,EAAOw8H,kBAC1Bt6L,EAAS89D,EAAOurjB,mBAAPvrjB,CAA2Bn+D,GAASuT,MAAS+/f,GAAYn1c,GAASorkB,EAAS,kBACpF1noB,EAAK4E,kBAAkBnD,UAAY,GACnCq9D,GAAe9+D,EAAK4E,kBAAmBpG,IAE3CiB,KAAK88nB,YAAYkB,WAAWz9nB,EAAMonoB,IAC7BlqoB,EAAkBo/D,EAAOqrkB,mBAAqBzqoB,EAAkBo/D,EAAOxqB,WAAY,CACpF,IAAIgd,EAAYwN,EAAOqrkB,iBAAmBrrkB,EAAOxqB,UACjDu1lB,EAASljoB,MAAM2tC,UAAYgd,EACT,UAAdA,GAAuC,SAAdA,EACzB9uD,EAAKuD,UAAUM,IAAkB,UAAdirD,EAAwB,eAAiB,eAEzC,WAAdA,GACL9uD,EAAKuD,UAAUM,IAAI,iBAY3B,MATwB,SAApBy4D,EAAO0pkB,SACPhmoB,EAAKuD,UAAUM,IAAI,cAEM,wBAApBy4D,EAAO0pkB,UACZhmoB,EAAKuD,UAAUM,IAAI,qBAEvB7D,EAAKiD,aAAa,gBAAkB/F,EAAkBwlE,EAAKg0N,SAA0B,EAAfh0N,EAAKg0N,SAAa/pR,YACxF3M,EAAKiD,aAAa,eAAgB,KAClCxD,KAAKM,OAAOkmB,QAAQiimB,IAAkBxljB,KAAMA,EAAM1iE,KAAMA,IACjDA,GAEX6moB,EAAmB/roB,UAAU2soB,oBAAsB,SAAUnrkB,EAAQt8D,GACjE,GAAIP,KAAKM,OAAO0mnB,gBAAkBnqjB,EAAOmqjB,iBAAmBvpnB,EAAkBo/D,EAAO9wC,OAAQ,CACzF,IAAI/qB,EAAWG,EAAc,OAASkC,UAAW,yBAC7C8koB,KACJ,GAAInooB,KAAKM,OAAO2tnB,eAAelwjB,QAAQthE,QAAUuD,KAAKM,OAAO2tnB,eAAelwjB,QAAQthE,SAAW0roB,EAAqB1roB,OAChH,IAAK,IAAIN,EAAI,EAAGA,EAAI6D,KAAKM,OAAOy9D,QAAQthE,OAAQN,IAC5C,IAAK,IAAIonB,EAAI,EAAGA,EAAIvjB,KAAKM,OAAO2tnB,eAAelwjB,QAAQthE,OAAQ8mB,IAC3D,GAAIvjB,KAAKM,OAAO2tnB,eAAelwjB,QAAQx6C,GAAGwI,QAAU8wC,EAAO9wC,MAAO,CAC9D/qB,EAAQ8C,UAAUM,IAAI,cACtB+joB,EAAqB3joB,KAAKq4D,EAAO9wC,OACjC,MAKhBxrB,EAAKuD,UAAUM,IAAI,eACnB7D,EAAKoB,YAAYX,GAErB,GAAIhB,KAAKM,OAAOumnB,cAAe,CAC3B,IAAIprnB,EAAU0F,EAAc,OAC5B1F,EAAQ4H,UAAYw5D,EAAOgqjB,cAAgB,uBAAyB,cACpEtmnB,EAAKoB,YAAYlG,GAErB,OAAO8E,GAQX6moB,EAAmB/roB,UAAU+qoB,WAAa,SAAU7loB,EAAMotC,GAEtD,OADAptC,EAAKoB,YAAYgsC,GACVptC,GAEJ6moB,GACT9B,IC7LEh7iB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAkBxCy9iB,GAA2C,SAAUj9iB,GAErD,SAASi9iB,IACL,IAAIrooB,EAAmB,OAAXorF,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAOhE,OANAD,EAAMiB,QAAUG,EAAc,MAC1BkC,UAAW,mCAAoCI,OAC3CmO,KAAM,eACNo/G,SAAU,QAGXjxH,EAyBX,OAlCAuqF,GAAU89iB,EAA2Bj9iB,GAiBrCi9iB,EAA0B/soB,UAAU0wG,OAAS,SAAU9oC,EAAMzmE,EAAMkH,GAC/D,IAAInD,EAAOP,KAAKgB,QAAQY,YACpBV,EAAMC,EAAc,OAASkC,UAAW,2BAa5C,OAZA9C,EAAKoB,YAAYT,GACjBA,EAAIc,UAAYihE,EAAKpG,OAAOsB,WACxB8E,EAAKpG,OAAOwrkB,SACZ9noB,EAAKiD,aAAa,QAASy/D,EAAKpG,OAAOwrkB,SAEtC5qoB,EAAkBwlE,EAAKpG,OAAOxqB,aAC/BnxC,EAAIwD,MAAM2tC,UAAY4wB,EAAKpG,OAAOxqB,WAEtC9xC,EAAKiD,aAAa,UAAWy/D,EAAKyyN,QAAQxoR,YAC1C3M,EAAKiD,aAAa,eAAgBy/D,EAAKyyN,QAAQxoR,YAC/C3M,EAAKiD,aAAa,eAAgB,KAClCxD,KAAKM,OAAOkmB,QAAQiimB,IAAkBxljB,KAAMA,EAAM1iE,KAAMA,IACjDA,GAEJ6noB,GACT9C,ICtDEh7iB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAiBxC29iB,GAAoC,SAAUn9iB,GAE9C,SAASm9iB,IACL,IAAIvooB,EAAmB,OAAXorF,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAEhE,OADAD,EAAMiB,QAAUG,EAAc,MAAQkC,UAAW,iBAC1CtD,EAYX,OAhBAuqF,GAAUg+iB,EAAoBn9iB,GAW9Bm9iB,EAAmBjtoB,UAAU0wG,OAAS,SAAU9oC,EAAMzmE,GAClD,IAAI+D,EAAOP,KAAKgB,QAAQY,YAExB,OADA27D,GAAsBh9D,EAAM0iE,EAAKv/D,YAC1BnD,GAEJ+noB,GACThD,ICnCEh7iB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAiBxC49iB,GAA0C,SAAUp9iB,GAEpD,SAASo9iB,IACL,IAAIxooB,EAAmB,OAAXorF,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAEhE,OADAD,EAAMiB,QAAUG,EAAc,MAAQkC,UAAW,iBAAkBI,OAASmO,KAAM,WAAYo/G,SAAU,QACjGjxH,EAoCX,OAxCAuqF,GAAUi+iB,EAA0Bp9iB,GAWpCo9iB,EAAyBltoB,UAAU0wG,OAAS,SAAU9oC,EAAMzmE,GACxD,IAIIgsoB,EAJAjooB,EAAOP,KAAKgB,QAAQY,YACpBoynB,EAAOh0nB,KAAKM,OAIZ2iE,EAAKC,eACLslkB,EAAYxooB,KAAKg8B,OAAOinC,EAAKpG,OAAQoG,EAAKpG,OAAOD,cAAc,aAAcpgE,EAAMymE,EAAKpG,UAE5F,IAAI7/D,EAAQimE,EAAKC,aAAeslkB,EAAYvlkB,EAAKpG,OAAOoqjB,oBAAsBzqnB,EAAKa,IAC/E2C,KAAKg8B,OAAOinC,EAAKpG,OAAQoG,EAAKpG,OAAOD,cAAc,MAAOpgE,EAAMymE,EAAKpG,SAiBzE,OAhBKp/D,EAAkBu2nB,EAAKS,cAAcgU,iBAUtClooB,EAAKyB,UAAYihE,EAAKpG,OAAOsB,WAAa,KAAOnhE,EAAQ,MAAQR,EAAKsiB,MAAQ,KACzEtiB,EAAKsiB,MAAQ,EAAI9e,KAAKyloB,UAAU1xjB,YAAY,QAAU/zE,KAAKyloB,UAAU1xjB,YAAY,UAJtF1U,GAAe9+D,GAN0C,IAArDyznB,EAAKS,cAAcgU,gBAAgBlqoB,QAAQ,KAClC8+D,GAAiB78D,SAASmC,cAAcqxnB,EAAKS,cAAcgU,iBAAiBzmoB,UAAUkO,OAAtFmtD,CAA8F7gE,GAG9F6gE,GAAiB22jB,EAAKS,cAAcgU,gBAApCprkB,CAAqD7gE,IAQtE+D,EAAKiD,aAAa,UAAWy/D,EAAKyyN,QAAQxoR,YAC1C3M,EAAKiD,aAAa,aAAcjD,EAAKyB,UAAY,yBACjDzB,EAAKiD,aAAa,QAASjD,EAAKyB,WACzBzB,GAEJgooB,GACTjD,IAMEoD,GAA+C,SAAUv9iB,GAEzD,SAASu9iB,IACL,IAAI3ooB,EAAmB,OAAXorF,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAEhE,OADAD,EAAMiB,QAAUG,EAAc,MAAQkC,UAAW,mBAC1CtD,EAaX,OAjBAuqF,GAAUo+iB,EAA+Bv9iB,GAWzCu9iB,EAA8BrtoB,UAAU0wG,OAAS,SAAU9oC,EAAMzmE,GAC7D,IAAI+D,EAAOP,KAAKgB,QAAQY,YAGxB,OAFArB,EAAKyB,UAAY,SACjBzB,EAAKiD,aAAa,UAAWy/D,EAAKyyN,QAAQxoR,YACnC3M,GAEJmooB,GACTpD,ICpFEh7iB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAgBxCg+iB,GAAoC,SAAUx9iB,GAE9C,SAASw9iB,IACL,OAAkB,OAAXx9iB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAiB/D,OAnBAsqF,GAAUq+iB,EAAoBx9iB,GAS9Bw9iB,EAAmBttoB,UAAU0wG,OAAS,SAAU9oC,EAAMzmE,GAClD,IAAI+D,EAAOP,KAAKgB,QAAQY,YAOxB,OANArB,EAAK8C,UAAY,qBACjB9C,EAAKiD,aAAa,iBAAkBhH,EAAKuvB,OACzCxrB,EAAKiD,aAAa,kBAAmBhH,EAAKa,KAC1CkD,EAAKiD,aAAa,gBAAiB,QACnCjD,EAAKiD,aAAa,WAAY,MAC9BjD,EAAKoB,YAAYR,EAAc,OAASkC,UAAW,+CAC5C9C,GAEJoooB,GACTL,ICrCEh+iB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAgBxCi+iB,GAA0C,SAAUz9iB,GAEpD,SAASy9iB,IACL,IAAI7ooB,EAAmB,OAAXorF,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAEhE,OADAD,EAAMiB,QAAUG,EAAc,MAAQkC,UAAW,uBAC1CtD,EAYX,OAhBAuqF,GAAUs+iB,EAA0Bz9iB,GAWpCy9iB,EAAyBvtoB,UAAU0wG,OAAS,SAAU9oC,EAAMzmE,GACxD,IAAI+D,EAAOP,KAAKgB,QAAQY,YAExB,OADArB,EAAKoB,YAAYR,EAAc,OAASkC,UAAW,8BAA+BrB,UAAW,MACtFzB,GAEJqooB,GACTtD,IClCEh7iB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAgBxCk+iB,GAAgD,SAAU19iB,GAE1D,SAAS09iB,IACL,IAAI9ooB,EAAmB,OAAXorF,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAEhE,OADAD,EAAMiB,QAAUG,EAAc,MAAQkC,UAAW,uBAC1CtD,EAYX,OAhBAuqF,GAAUu+iB,EAAgC19iB,GAW1C09iB,EAA+BxtoB,UAAU0wG,OAAS,SAAU9oC,EAAMzmE,GAC9D,IAAI+D,EAAOP,KAAKgB,QAAQY,YAExB,OADArB,EAAKoB,YAAYR,EAAc,OAASkC,UAAW,iBAC5C9C,GAEJsooB,GACTvD,IClCEh7iB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAgBxCm+iB,GAA0C,SAAU39iB,GAEpD,SAAS29iB,IACL,IAAI/ooB,EAAmB,OAAXorF,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAKhE,OAJAD,EAAMiB,QAAUG,EAAc,MAC1BkC,UAAW,sBACXI,OAAS+vH,gBAAiB,QAAS5hH,KAAM,WAAYo/G,SAAU,QAE5DjxH,EAiBX,OAxBAuqF,GAAUw+iB,EAA0B39iB,GAYpC29iB,EAAyBztoB,UAAU0wG,OAAS,SAAU9oC,EAAMzmE,EAAMkH,GAC9D,IAAInD,EAAOP,KAAKgB,QAAQY,YASxB,OARI8B,IAAejG,EAAkBiG,EAAkB,QACnDnD,EAAK8C,UAAY,GACjB9C,EAAK8C,UAAYK,EAAkB,MACnCnD,EAAKoB,YAAYR,EAAc,OAASkC,UAAW,iDAGnD9C,EAAKoB,YAAYR,EAAc,OAASkC,UAAW,kDAEhD9C,GAEJuooB,GACTxD,ICjBExmN,GAAwB,WAIxB,SAASA,EAAOx+a,EAAQiloB,GACpBvloB,KAAK+ooB,WAAY,EACjB/ooB,KAAKM,OAASA,EACdN,KAAKuloB,QAAUA,EACfvloB,KAAKxD,KAAO,IAAI03U,GAAK5zU,EAAQiloB,GAC7BvloB,KAAKqlH,KAAOkghB,EAAQ/jkB,WAAW,gBAC/BxhE,KAAK88nB,YAAc98nB,KAAKuloB,QAAQ/jkB,WAAW,eAC3CxhE,KAAK6tB,SAAW7tB,KAAKuloB,QAAQ/jkB,WAAW,mBACxCxhE,KAAKtD,mBAwWT,OAnWAoib,EAAOzjb,UAAU0wG,OAAS,WACtB,IAAIiohB,EAAOh0nB,KAAKM,OAChBN,KAAKgpoB,eAAiBhpoB,KAAK6tB,SAASo7mB,YAAYnb,GAAWjvU,QAC3D7+S,KAAKkpoB,gBAAkBlpoB,KAAK6tB,SAASo7mB,YAAYnb,GAAWqb,SAC5DnpoB,KAAKgpoB,eAAejL,cACpB/9nB,KAAKkpoB,gBAAgBnL,cACjB/J,EAAKgB,aAAav4nB,SAClBuD,KAAKgpoB,eAAe7K,cACpBn+nB,KAAKkpoB,gBAAgB/K,cACrBn+nB,KAAKopoB,UAAS,IAElBppoB,KAAKwwU,sBAMTsuG,EAAOzjb,UAAU62D,QAAU,SAAUrxD,QACvB,IAANA,IAAgBA,GAAMurL,YAAa,YACvCpsL,KAAKM,OAAOyN,OAAOlN,EAAEurL,YAAc,SAAUvrL,GAC7Cb,KAAKM,OAAOkmB,QAAQmpmB,GAAoB9unB,GACpCA,EAAEg4B,QAGN74B,KAAKwwU,mBAAmB3vU,IAE5Bi+a,EAAOzjb,UAAUguoB,gBAAkB,SAAUxooB,GACzCb,KAAKM,OAAOkmB,QAAQ+rmB,GAAuB1xnB,IAM/Ci+a,EAAOzjb,UAAUm1U,mBAAqB,SAAUvwU,GAC5C,IAAIF,EAAQC,UACC,IAATC,IAAmBA,MACE,kBAArBA,EAAKmsL,aACLpsL,KAAKM,OAAOqhB,cAEhB3hB,KAAKM,OAAOk/lB,QAAS,EACrBx/lB,KAAK+ooB,WAAY,EACjB,IAAIv6e,EACA86e,EAAWtpoB,KAAKupoB,sBAEpB,GADAvpoB,KAAK88nB,YAAYC,QAAQ/8nB,KAAKM,OAAOm0C,aAAa73B,YAAY,GAC1D0snB,EAAU,CACV,IAAI91c,EAAW,IAAIC,GACnBjlC,EAAcxuJ,KAAKwpoB,SAASh2c,GAiBhC,GAVIhlC,EALCA,EAKaA,EAAY8kC,KAAK,SAAUzyL,GACrC,IAAI66D,EAAQ37D,EAAMvD,KAAKk0U,gBAAgBhgL,gBACvC,GAAI3wJ,EAAMgpoB,UAAW,CACjB,IAAIlX,EAAM,IAAIp+b,GAEd,OADAo+b,EAAIhviB,SAAU9jF,UAAY+f,MAAO,IAC1B+ymB,EAAIh+b,QAEf,OAAO9zL,EAAMvD,KAAKmwU,QAAQ1sU,EAAMy7D,KACjCi5H,MAAM,SAAU9zL,GAAoD,OAA/Cd,EAAMO,OAAOkmB,QAAQijnB,GAAsB5ooB,GAAWA,IAZhEb,KAAKxD,KAAKmwU,QAAQ1sU,EAAMD,KAAKxD,KAAKk0U,gBAAgBhgL,iBAC3DikC,MAAM,SAAU9zL,GAAoD,OAA/Cd,EAAMO,OAAOkmB,QAAQijnB,GAAsB5ooB,GAAWA,IAahFb,KAAKM,OAAOgxnB,uBAAuB70nB,UAAY6soB,GAAYtpoB,KAAKM,OAAOy0nB,eAAe13nB,IAAIZ,QAAS,CACnG,IAAIitoB,EAAa,IAAIj2c,GACrBjlC,EAAcA,EAAY8kC,KAAK,SAAUzyL,GAErC,OADAd,EAAMO,OAAOyN,OAAO47nB,IAA4Bn7e,YAAaA,EAAazvJ,OAAQ8B,EAAGgzL,QAAS61c,IACvFA,EAAW71c,UAGtB7zL,KAAKM,OAAOm0nB,cAAcmV,2BAA6B5poB,KAAKM,OAAOm0nB,cAAc12jB,QAAQthE,SACzF+xJ,EAAcA,EAAY8kC,KAAK,SAAUzyL,GAAK,OAAOd,EAAM8poB,qBAAqBhpoB,MAEpF2tJ,EAAY8kC,KAAK,SAAUzyL,GAAK,OAAOd,EAAM4wU,mBAAmB9vU,EAAGZ,KAC9D00L,MAAM,SAAU9zL,GAAK,OAAOd,EAAM+poB,mBAAmBjpoB,MAE9Di+a,EAAOzjb,UAAUmuoB,SAAW,SAAUO,GAElC,OADA/poB,KAAKM,OAAOyN,OAAO47nB,IAA4B54e,WAAW,EAAM8iC,QAASk2c,IAClEA,EAASl2c,SAEpBirP,EAAOzjb,UAAUkuoB,oBAAsB,WACnC,IAAIvV,EAAOh0nB,KAAKM,OAChB,SAAW0znB,EAAK7+J,gBAAkB6+J,EAAK/F,eAAelwjB,QAAQthE,QACzDu3nB,EAAKe,eAAe13nB,IAAU,SAAM2C,KAAKywJ,WAAWzwJ,KAAKM,OAAOgxnB,yBAEzExyM,EAAOzjb,UAAUo1J,WAAa,SAAU1yF,GACpC,IAAIh+D,EAAQC,KACZ,OAAO+9D,EAAQ3hC,KAAK,SAAUqkC,GAK1B,SAHQ1gE,EAAMO,OAAO2tnB,eAAelwjB,QAAQ3hC,KAAK,SAAUp/B,GACvD,OAAOyjE,EAAIrC,kBAAoBphE,EAAM+uB,UAEtBhsB,EAAMO,OAAOy0nB,eAAe13nB,IAAIZ,WAG3Dqib,EAAOzjb,UAAU2uoB,gBAAkB,SAAU/poB,GACzC,IAAIF,EAAQC,KACR6zL,EAAU7zL,KAAKxD,KAAKgL,YAAYvH,EAAK4sL,QAAS7sL,KAAKM,OAAOu1nB,0BAA0B,IACpFn6jB,EAAQ17D,KAAKxD,KAAKk0U,gBAAgBhgL,gBAClC1wJ,KAAKxD,KAAKgyJ,YAAYjrF,WAAWE,QACjCzjE,KAAKwwU,oBAAqBpkJ,YAAa,cAIvCyH,EAAQP,KAAK,SAAUzyL,GACnBd,EAAMvD,KAAKmwU,QAAQ1sU,EAAMy7D,GACpB43H,KAAK,SAAUzyL,GAAK,OAAOd,EAAMkqoB,UAAUppoB,EAAGZ,KAC9C00L,MAAM,SAAU9zL,GAAK,OAAOd,EAAMmqoB,UAAUrpoB,OAEhD8zL,MAAM,SAAU9zL,GAAK,OAAOd,EAAMmqoB,UAAUrpoB,MAGzDi+a,EAAOzjb,UAAU4uoB,UAAY,SAAUppoB,EAAGZ,GACtCD,KAAK2wU,mBAAmB9vU,EAAGZ,IAE/B6+a,EAAOzjb,UAAU6uoB,UAAY,SAAUrpoB,GACnCb,KAAK8poB,mBAAmBjpoB,IAO5Bi+a,EAAOzjb,UAAU8uoB,eAAiB,WAC9BnqoB,KAAKopoB,UAAS,IAElBtqN,EAAOzjb,UAAU+toB,SAAW,SAAUgB,GAClC,IAEIphQ,EAFAgrP,EAAOh0nB,KAAKM,OACZm/nB,EAAQz/nB,KAAKkpoB,gBAAgBptY,WAAWn5P,cAAc,SAE1D4B,EAAOk7nB,GACPA,EAAQt+nB,EAAc,UACtB6nY,EAAK7nY,EAAc,MAAQkC,UAAW,gBACnC1B,YAAYR,EAAc,MACzBa,UAAWhC,KAAKqlH,KAAKtxC,YAAY,eACjCtwE,OAAS4moB,QAASrW,EAAKgB,aAAav4nB,OAAOyQ,eAE/CuynB,EAAM99nB,YAAYqnY,GAClBhpY,KAAKkpoB,gBAAgB/H,YAAY1B,GAC7B2K,IACApqoB,KAAKM,OAAOkmB,QAAQ42mB,OACpBp9nB,KAAKM,OAAOyN,OAAOu8nB,IAAkB/xW,MAAO,IAAIioC,IAAM63T,WAAW,EAAMv2jB,OAAQ,IAAI2qa,IAAOktJ,YAAY,EAAMnimB,SAAS,YAG7HsnZ,EAAOzjb,UAAUkvoB,oBAAsB,WAC/BvqoB,KAAKM,OAAOkqoB,wBAAwB/toB,QACpCuD,KAAKyqoB,iBAAiBzqoB,KAAKM,OAAOkqoB,wBAAwB,KAGlE1rN,EAAOzjb,UAAUovoB,iBAAmB,SAAUn5e,GAK1C,IAAK,IAHDt0J,EADA+gE,EAAU/9D,KAAKM,OAAO00nB,aAEtBx4nB,EAAO80J,GAAUA,EAAO72F,MAAQ62F,EAAO72F,MAAM,GAAK62F,EAClD/vF,EAAOvhE,KAAKuloB,QAAQ/jkB,WAAW,kBAC1BrlE,EAAI,EAAG0F,EAAMk8D,EAAQthE,OAAQN,EAAI0F,EAAK1F,IAAK,CAChDa,EAAQH,EAASkhE,EAAQ5hE,GAAG4vB,OAAS,GAAIvvB,GACrCuhE,EAAQ5hE,GAAGsrnB,mBAAqB1pjB,EAAQ5hE,GAAGwnE,aAC3C3mE,EAAQH,EAASkhE,EAAQ5hE,GAAGiiE,iBAAmB,GAAIL,EAAQ5hE,GAAGwnE,WAAW,KAExElmE,EAAkBT,GAQnB+gE,EAAQ5hE,GAAGuK,KAAOq3D,EAAQ5hE,GAAGuK,MAAQ,MAPrC1G,KAAK0qoB,cAAe,EACf3skB,EAAQ5hE,GAAGuK,OACZq3D,EAAQ5hE,GAAGuK,KAAO1J,EAAM4mE,OAAU5mE,EAAMopE,WAAa,GAAKppE,EAAMspE,aAAe,GAC3EtpE,EAAM+6E,aAAe,GAAK/6E,EAAMwyM,kBAAoB,EAAI,WAAa,kBAMjF,IAAI63a,EAAiB,IAAIvM,GACrB/8iB,EAAQ5hE,GAAG6/B,SAAW+hC,EAAQ5hE,GAAG6/B,OAAO0lC,UAAY3D,EAAQ5hE,GAAG6/B,OAAOA,UACtE+hC,EAAQ5hE,GAAGklE,aAAagmjB,EAAe5ljB,kBAAkB1D,EAAQ5hE,GAAG6/B,SACpE+hC,EAAQ5hE,GAAGwlE,UAAU0ljB,EAAezljB,kBAAkB7D,EAAQ5hE,GAAG6/B,UAElC,iBAAvB+hC,EAAQ5hE,GAAS,OACzBklE,GAAarhE,KAAKuloB,QAASxnkB,EAAQ5hE,IAE7B4hE,EAAQ5hE,GAAG6/B,QAA8B,WAApB+hC,EAAQ5hE,GAAGuK,MACtCq3D,EAAQ5hE,GAAGwlE,UAAUJ,EAAKK,mBAAoB5lC,OAAQ,UAIlE8iZ,EAAOzjb,UAAUs1U,mBAAqB,SAAU9vU,EAAGZ,GAC/C,IAAI+znB,EAAOh0nB,KAAKM,OAChB0znB,EAAKxtmB,QAAQmknB,GAAwB9poB,GACrC,IAAIgB,EAAMvD,OAAOhB,KAAKuD,EAAE9B,QAAQtC,OAChC,IAAIuD,KAAKM,OAAO0mF,YAAhB,CAKA,GAFAhnF,KAAKM,OAAOyN,OAAO68nB,OACnB5W,EAAKhlT,gBAAkBnuU,EAAE9B,QACpB8C,GAAOhB,EAAEie,OAASk1mB,EAAKQ,YAKxB,OAJAR,EAAK6W,gBAAiB,EACtB7W,EAAKzikB,aAAau5kB,kBAAoBjqoB,EAAEie,MACxCk1mB,EAAKzikB,aAAa+hM,YAAcjnP,KAAKwmB,KAAKhyB,EAAEie,MAAQk1mB,EAAKzikB,aAAa4+F,eACtE6je,EAAKpokB,WAaT,IAVKookB,EAAKgB,aAAav4nB,QAAUoF,GAC7B7B,KAAK+qoB,uBAAuBlqoB,IAE3Bb,KAAK0qoB,cAAgB1W,EAAKwW,yBAC3BxqoB,KAAKyqoB,iBAAiBzW,EAAKwW,wBAAwB,IAEvDxqoB,KAAKM,OAAOyN,OAAOi9nB,GAAkBtsoB,GAASogB,MAAOje,EAAEie,MAAO/f,OAAQ8B,EAAE9B,OAAQ2gE,WAAY7+D,EAAE6+D,YAAcz/D,KACxG+znB,EAAKS,cAAc12jB,QAAQthE,QAAWwD,GAA6B,eAArBA,EAAKmsL,cACnDpsL,KAAKgpoB,eAAenE,YAEpBhjoB,EACA7B,KAAKkpoB,gBAAgBlK,mBAAmB/+nB,OAEvC,CACD,IAAK+znB,EAAKgB,aAAav4nB,OAGnB,OAFAu3nB,EAAKhznB,QAAQgB,UAAY,QACzBipoB,MAAMjroB,KAAKqlH,KAAKtxC,YAAY,yBAKhC,GAFA/zE,KAAKkpoB,gBAAgB3I,mBACrBvgoB,KAAKmqoB,iBACDlqoB,EAAM,CACN,IAAIk2D,GAAUl2D,EAAKmsL,aAAe,IAAIx2K,cAAgB,YACtD5V,KAAKM,OAAOyN,OAAOooD,EAAQl2D,GAE/BD,KAAKM,OAAOoiB,cAEhB1iB,KAAKM,OAAOyN,OAAOm9nB,SAEvBpsN,EAAOzjb,UAAUyuoB,mBAAqB,SAAUjpoB,GAC5Cb,KAAK88nB,YAAYkB,WAAWh+nB,KAAKM,OAAOm0C,aAAa73B,YAAcqhnB,MAAM,EAAO4I,SAAS,IACzF7moB,KAAKM,OAAOkmB,QAAQijnB,IAAwBnljB,MAAOzjF,IACnDb,KAAKM,OAAO0uU,mBACZhvU,KAAKmqoB,iBACLnqoB,KAAKM,OAAOoiB,eAEhBo8Z,EAAOzjb,UAAU0voB,uBAAyB,SAAUlqoB,GAChDb,KAAKmroB,aAAatqoB,EAAE9B,OAAO,IAC3B++D,GAAe99D,KAAKM,OAAOy9D,SAC3B/9D,KAAKgpoB,eAAe7K,cACpBn+nB,KAAKkpoB,gBAAgB/K,cACrBn+nB,KAAKM,OAAOyN,OAAOq9nB,QAEvBtsN,EAAOzjb,UAAU8voB,aAAe,SAAU75e,GAGtC,IAAK,IAFDvzF,EAAUz/D,OAAOhB,KAAKg0J,GACtB6ge,KACKh2nB,EAAI,EAAG0F,EAAMk8D,EAAQthE,OAAQN,EAAI0F,EAAK1F,IAC3Cg2nB,EAAKh2nB,IAAO4vB,MAASgyC,EAAQ5hE,IACzB6D,KAAKM,OAAOw2nB,6BACZ3E,EAAKh2nB,GAAG6Z,MAASvY,EAAkB00nB,EAAKh2nB,GAAG6Z,OAAyB,IAAhBm8mB,EAAKh2nB,GAAG6Z,OAGpEhW,KAAKM,OAAOy9D,QAAUo0jB,GAE1BrzM,EAAOzjb,UAAUgwoB,oBAAsB,WACnCrroB,KAAK6tB,SAASy9mB,YAAYxd,GAAWjvU,OAAQ,IAAI4iV,GAAazhoB,KAAKM,OAAQN,KAAKuloB,UAChFvloB,KAAK6tB,SAASy9mB,YAAYxd,GAAWqb,QAAS,IAAI1M,GAAcz8nB,KAAKM,OAAQN,KAAKuloB,UAClF,IAAIgG,EAAavroB,KAAKuloB,QAAQ/jkB,WAAW,uBACzC+pkB,EAAWC,gBAAgBxyB,GAASn6T,OAAQ,IAAIuoV,GAAmBpnoB,KAAKM,OAAQN,KAAKuloB,UACrFgG,EAAWC,gBAAgBxyB,GAAS9kS,KAAM,IAAIoxT,GAAatloB,KAAKM,OAAQN,KAAKuloB,UAC7EgG,EAAWC,gBAAgBxyB,GAASwrB,cAAe,IAAI4D,GAA0BpooB,KAAKM,OAAQN,KAAKuloB,UACnGgG,EAAWC,gBAAgBxyB,GAAS6hB,OAAQ,IAAIyN,GAAmBtooB,KAAKM,OAAQN,KAAKuloB,UACrFgG,EAAWC,gBAAgBxyB,GAASsjB,aAAc,IAAIiM,GAAyBvooB,KAAKM,OAAQN,KAAKuloB,UACjGgG,EAAWC,gBAAgBxyB,GAASujB,kBAAmB,IAAImM,GAA8B1ooB,KAAKM,OAAQN,KAAKuloB,UAC3GgG,EAAWC,gBAAgBxyB,GAASijB,OAAQ,IAAI0M,GAAmB3ooB,KAAKM,OAAQN,KAAKuloB,UACrFgG,EAAWC,gBAAgBxyB,GAAS0qB,aAAc,IAAIkF,GAAyB5ooB,KAAKM,OAAQN,KAAKuloB,UACjGgG,EAAWC,gBAAgBxyB,GAASwrB,cAAe,IAAI4D,GAA0BpooB,KAAKM,OAAQN,KAAKuloB,UACnGgG,EAAWC,gBAAgBxyB,GAAS2qB,aAAc,IAAIkF,GAA+B7ooB,KAAKM,OAAQN,KAAKuloB,UACvGgG,EAAWC,gBAAgBxyB,GAAS2f,aAAc,IAAImQ,GAAyB9ooB,KAAKM,OAAQN,KAAKuloB,WAErGzmN,EAAOzjb,UAAUqB,iBAAmB,WAChC,IAAIqD,EAAQC,KACRA,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAOslF,GAAG6ljB,GAAoBzroB,KAAKqroB,oBAAqBrroB,MAC7DA,KAAKM,OAAOslF,GAAG8ljB,GAAqB1roB,KAAKkyD,QAASlyD,MAClDA,KAAKM,OAAOslF,GrBlHS,mBqBkHkB5lF,KAAKqpoB,gBAAiBrpoB,MAC7DA,KAAKM,OAAOslF,GrB3GE,YqB2GkB5lF,KAAKgqoB,gBAAiBhqoB,MACtDA,KAAKM,OAAOslF,GAAG+viB,GAAsB,WAAc51nB,EAAMgpoB,WAAY,GAAS/ooB,MAC9EA,KAAKM,OAAOslF,GAAGwljB,GAAgBproB,KAAKuqoB,oBAAqBvqoB,QAG7D8+a,EAAOzjb,UAAUwuoB,qBAAuB,SAAUhpoB,GAC9C,IAAId,EAAQC,KACRiS,EAAQpR,EAAE9B,OAAOtC,OAAS,EAC9B,GAAIwV,EAAQ,EACR,OAAO2wE,QAAQC,QAAQhiF,GAE3B,IAAI8qoB,EAAS9qoB,EAAE9B,OAAO,GAClB6soB,EAAS/qoB,EAAE9B,OAAOkT,GAClBkrD,KACA0ukB,EAAW,SAAU/5nB,IACpB65nB,EAAQC,GAAQxsoB,QAAQ,SAAU2zF,GAC/B,OAAO51B,EAAU34D,KAAK,IAAImgE,GAAU,QAAS,KAAMouB,EAAMhnE,OAAO84C,IAAI9kE,EAAMmxnB,aAAa,MAAO,QAASn+hB,EAAM11F,SAEjHyU,EAAM+xD,MAAMc,GAAUG,GAAG3H,KAEzBzB,EAAQ,IAAI2H,GAChBwokB,EAASnwkB,GACT,IACIowkB,EADQ,IAAItokB,GAAY3iE,EAAE9B,QACRklE,aAAavI,GAC/Bm3H,EAAW7yL,KAAKxD,KAAKk0U,eAAc,GACnCq7T,KACA/roB,KAAKxD,KAAKu7T,aACT4zU,EAAQC,GAAQxsoB,QAAQ,SAAU2zF,GAC/B,OAAOg5iB,EAAWvnoB,KAAKzE,EAAMmxnB,aAAan+hB,EAAMhnE,MAAO,QAASgnE,EAAM11F,QAE1Ew1L,EAAShvH,MAAMc,GAAUG,GAAGinkB,KAG5BF,EAASh5c,GAEb,IAAIk3c,EAAW,IAAIt2c,GAKnB,OAJAzzL,KAAKxD,KAAKmwU,WAAY95I,GAAUS,KAAK,SAAU12J,GAC3C78B,EAAMisoB,gBAAgBF,EAAWlvmB,EAAE79B,QACnCgroB,EAASlnjB,QAAQhiF,KAClB8zL,MAAM,SAAU9zL,GAAK,OAAOkpoB,EAASjnjB,OAAOjiF,KACxCkpoB,EAASl2c,SAEpBirP,EAAOzjb,UAAU61nB,aAAe,SAAU7znB,EAAK0mE,EAAU/mE,GACrD,OAAIA,aAAiBgjB,KACV8jD,IAAmB/3C,MAAO1uB,EAAK0mE,SAAUA,EAAU/mE,MAAOA,IAE9D,IAAI2nE,GAAUtnE,EAAK0mE,EAAU/mE,IAExC8hb,EAAOzjb,UAAU2woB,gBAAkB,SAAUrrnB,EAASsrnB,GAClD,IAAIlsoB,EAAQC,KACR4sL,EAAK,IAAIppH,GAAYyokB,GA2BzB,OA1BAtrnB,EAAQvhB,QAAQ,SAAU4B,EAASiR,EAAOgjD,GACtC,IAAIi3kB,EAASt/c,EAAG3oH,cAAa,IAAIZ,IAC5BQ,MAAM,IAAIc,GAAU,QAAS,KAAM3jE,EAAQ+qB,OAAO84C,IAAI9kE,EAAMmxnB,aAAa,MAAO,QAASlwnB,EAAQ3D,QAAQ,GAC9G2D,EAAQ8d,MAAQotnB,EAAOptnB,MACvB,IAAIqtnB,EAAYnroB,EAAQy5D,MACpB2xkB,EAAaF,EAAOzxkB,MACpB0xkB,EAAUx6e,YACV3wJ,EAAQy5D,MAAQ16D,EAAMisoB,gBAAgBhroB,EAAQy5D,MAAOyxkB,EAAOzxkB,QAEhE16D,EAAMO,OAAOo/D,WAAWtgE,QAAQ,SAAUshE,GACtC,OAAOA,EAAI3C,QAAQ3+D,QAAQ,SAAUy9D,IACrBA,EAAOn2D,gBAAgBlI,MAAQq+D,EAAOn2D,MAAQm2D,EAAOn2D,OAC3DtH,QAAQ,SAAUsH,GACpB,IAAIrJ,EAAMw/D,EAAO9wC,MAAQ,MAAQrlB,EAAKkP,cAClCpZ,EAAO2voB,EAAUh6e,MAAQi6e,EAAW15e,QAAUw5e,EAAOzxkB,MACrD90D,EAAU5F,EAAMO,OAEhBU,EAAQ0+D,WAAWriE,GADV,WAATqJ,EAC0Bm2D,EAAO2C,gBAAkB3C,EAAO2C,gBAAgBl+D,KAAKqE,EAASnJ,EAAMqgE,GAAU,GAG9E4C,GAASC,WAAWh5D,EAAKkP,eAAepZ,EAAMqgE,EAAO9wC,eAM5FpL,GAEJm+Z,KCvYPutN,GAAqC,WACrC,SAASA,IACLrsoB,KAAKssoB,iBAiBT,OAfAD,EAAoBhxoB,UAAUmwoB,gBAAkB,SAAU/zmB,EAAM/wB,GAC5D+wB,EAAuB,iBAATA,EAAoBA,EAAO55B,EAAam7mB,GAAUvhlB,GAC5Dh6B,EAAkBuC,KAAKssoB,cAAc70mB,MACrCz3B,KAAKssoB,cAAc70mB,GAAQ/wB,IAGnC2loB,EAAoBhxoB,UAAUs7nB,gBAAkB,SAAUl/lB,GAEtD,GADAA,EAAuB,iBAATA,EAAoBA,EAAO55B,EAAam7mB,GAAUvhlB,GAC5Dh6B,EAAkBuC,KAAKssoB,cAAc70mB,IACrC,KAAM,oBAAsBA,EAAO,gBAGnC,OAAOz3B,KAAKssoB,cAAc70mB,IAG3B40mB,KCpBPv1O,GAAgC,WAChC,SAASA,IACL92Z,KAAK+2Z,YAaT,OAXAD,EAAez7Z,UAAU27Z,SAAW,SAAUv/X,EAAM/wB,GAC5CjJ,EAAkBuC,KAAK+2Z,SAASt/X,MAChCz3B,KAAK+2Z,SAASt/X,GAAQ/wB,IAG9BowZ,EAAez7Z,UAAUmmE,WAAa,SAAU/pC,GAC5C,GAAIh6B,EAAkBuC,KAAK+2Z,SAASt/X,IAChC,KAAM,eAAiBA,EAAO,qBAElC,OAAOz3B,KAAK+2Z,SAASt/X,IAElBq/X,KCdPy1O,GAAiC,WACjC,SAASA,IACLvsoB,KAAKwsoB,eAiBT,OAfAD,EAAgBlxoB,UAAUiwoB,YAAc,SAAU7zmB,EAAM/wB,GACpD,IAAI+loB,EAAQ5uoB,EAAaiwnB,GAAYr2lB,GACjCh6B,EAAkBuC,KAAKwsoB,YAAYC,MACnCzsoB,KAAKwsoB,YAAYC,GAAS/loB,IAGlC6loB,EAAgBlxoB,UAAU4toB,YAAc,SAAUxxmB,GAC9C,IAAIg1mB,EAAQ5uoB,EAAaiwnB,GAAYr2lB,GACrC,GAAIh6B,EAAkBuC,KAAKwsoB,YAAYC,IACnC,KAAM,gBAAkBA,EAAQ,gBAGhC,OAAOzsoB,KAAKwsoB,YAAYC,IAGzBF,KCjBPG,GAAoC,WACpC,SAASA,EAAmBpsoB,GACxBN,KAAKM,OAASA,EAsJlB,OApJAosoB,EAAmBrxoB,UAAUypoB,kBAAoB,WAC7C,IAAI/koB,EAAQC,KACR7D,EAAI,EACJ4wW,EAAU/sW,KAAKM,OAAOo3nB,yBACtB0E,GAAQ,EACZ,GAAIp8nB,KAAKM,OAAOwmnB,cACZ,IAAK,IAAIjlnB,EAAM7B,KAAKM,OAAOm0nB,cAAc12jB,QAAQthE,OAAQN,EAAI0F,EAAK1F,IAC1D6D,KAAKM,OAAOw2nB,6BAAsD,IAAxB/pR,EAAQxuW,QAAQpC,GAC1DigoB,GAAQ,EAGZp8nB,KAAK2soB,eAAe,IAAIzukB,IAASloD,MAAO,SAAW7Z,IAGvD6D,KAAKM,OAAO84nB,gBAAkBp5nB,KAAKM,OAAOq7R,YAC1C37R,KAAK2soB,eAAe,IAAIzukB,IAASloD,MAAO,SAAW7Z,GAEvD6D,KAAKM,OAAO00nB,aAAa51nB,QAAQ,SAAUy9D,EAAQ5qD,GAC/ClS,EAAM4soB,eAAe9vkB,EAAQu/jB,OAAQjhoB,EAAY8W,MAGzDy6nB,EAAmBrxoB,UAAUsxoB,eAAiB,SAAU9vkB,EAAQ5qD,EAAOk/E,GACnE,IAAIw2O,EAAclqU,EAAkBwU,GAASjS,KAAKM,OAAO0goB,yBAAyBnkkB,EAAOn9D,KAAOuS,EAC5F26nB,EAAS5soB,KAAKuiQ,SAAS1lM,GACZ,OAAX+vkB,IACA5soB,KAAK2+H,SAASiugB,EAAQjlU,IACjB3nU,KAAKM,OAAOumnB,eAA4B,WAAX11hB,GAAyBnxF,KAAKM,OAAO28nB,oBAAsBj9nB,KAAKM,OAAOumnB,gBACrG7mnB,KAAK6soB,kBAET7soB,KAAKM,OAAOyN,OAAO29mB,IAAsBz5mB,MAAO01T,EAAa3xT,MAAO42nB,EAAQ/vkB,OAAQA,EAAQs0B,OAAQA,MAG5Gu7iB,EAAmBrxoB,UAAUsjI,SAAW,SAAU3oH,EAAO/D,GACrD,IAGI66nB,EAHAlojB,EAAS5kF,KAAKM,OAAOu/nB,iBACrBzlmB,EAAUp6B,KAAKM,OAAOysoB,kBACtBC,EAASzqoB,EAAWyT,GAEpBivD,EAAUjlE,KAAKM,OAAO28nB,mBACtBgQ,EAAOjtoB,KAAKM,OAAOq+nB,mBAAmBh8nB,cAAc,qBAEpDmqoB,EADA7nkB,GAAWhzD,GAASgzD,GAAWgokB,GAAQA,EAAKtqoB,cAAc,YAC9CsqoB,EAAKtqoB,cAAc,YAAYyX,SAASnI,EAAQgzD,GAGhD2f,EAAOjiF,cAAc,YAAYyX,SAASnI,MAGtD66nB,EAAUpooB,MAAMsR,MAAQg3nB,GAE5B,IAAIE,GAEAA,EADAjokB,GAAWhzD,GAASgzD,EACPjlE,KAAKM,OAAOm0C,aAAa9xC,cAAc,qBAC/CA,cAAc,YAAYyX,SAASnI,EAAQgzD,GAGnC7qC,EAAQz3B,cAAc,YAAYyX,SAASnI,MAGxDi7nB,EAAWxooB,MAAMsR,MAAQg3nB,GAE7B,IAAI7lB,EAAO/slB,EAAQz3B,cAAc,0BAC7BwknB,GACIA,EAAKxknB,cAAc,YAAYyX,SAASnI,KACxCk1mB,EAAKxknB,cAAc,YAAYyX,SAASnI,GAAOvN,MAAMsR,MAAQg3nB,IAIzEN,EAAmBrxoB,UAAU8xoB,kBAAoB,SAAUnsoB,GAGvD,OAFehB,KAAKotoB,uBAAuBpsoB,EAAS,YACzChB,KAAKotoB,uBAAuBpsoB,EAAS,SAGpD0roB,EAAmBrxoB,UAAU+xoB,uBAAyB,SAAUpsoB,EAASw0B,GAIrE,IAHA,IAAI0lS,EAAUl6T,EAAQw0B,EAAY,kBAC9Bz2B,EAAS,EACT+E,GAAa,eAAgB,eAAgB,kBAAmB,cAAe,aAC5Eo3T,GACCp3T,EAAUs4B,KAAK,SAAUp/B,GAAS,OAAOk+T,EAAQp3T,UAAUK,SAASnH,OACpE+B,GAAUm8T,EAAQxpR,cAEtBwpR,EAAUA,EAAQ1lS,EAAY,kBAElC,OAAOz2B,GAEX2toB,EAAmBrxoB,UAAUknQ,SAAW,SAAU1lM,GAI9C,GAHIp/D,EAAkBo/D,EAAO7mD,QAAUhW,KAAKM,OAAOumnB,gBAC/ChqjB,EAAO7mD,MAAQ,MAEd6mD,EAAO7mD,MACR,OAAO,KAEX,IAAIA,EAAQ+e,SAAS8nC,EAAO7mD,MAAM9I,WAAY,IAC9C,OAAI2vD,EAAOrJ,UAAYx9C,EAAQ+e,SAAS8nC,EAAOrJ,SAAStmD,WAAY,IACzD2vD,EAAOrJ,SAERqJ,EAAOz+B,UAAYpoB,EAAQ+e,SAAS8nC,EAAOz+B,SAASlxB,WAAY,IAC/D2vD,EAAOz+B,SAGPy+B,EAAO7mD,OAGtB02nB,EAAmBrxoB,UAAUw6f,cAAgB,SAAU93b,GAEnD,IAAK,IADDsvkB,EAAS,EACJjvoB,EAAK,EAAGmpX,EAAYxpT,EAAS3/D,EAAKmpX,EAAU9qX,OAAQ2B,IAAM,CAC/D,IAAIy+D,EAAS0qT,EAAUnpX,GACnBwuoB,EAAS5soB,KAAKuiQ,SAAS1lM,IACJ,IAAnBA,EAAOrlC,SAAgC,OAAXo1mB,IAC5BS,GAAUt4mB,SAAS63mB,EAAO1/nB,WAAY,KAG9C,OAAOmgoB,GAEXX,EAAmBrxoB,UAAUiyoB,sBAAwB,WACjD,IAAIvvkB,EAAU/9D,KAAKM,OAAO00nB,aAC1Bj3jB,EAAQ11C,OAAOroB,KAAKM,OAAO28nB,mBAAoBl/jB,EAAQthE,QACvD,IAAI8woB,EAAchroB,EAAWvC,KAAK61f,cAAc93b,IAChD/9D,KAAKM,OAAOu/nB,iBAAiBn7nB,MAAMsR,MAAQu3nB,EAC3CvtoB,KAAKM,OAAOysoB,kBAAkBrooB,MAAMsR,MAAQu3nB,GAEhDb,EAAmBrxoB,UAAUmyoB,uBAAyB,WAClD,IAAIzvkB,EAAU/9D,KAAKM,OAAO00nB,aAC1Bj3jB,EAAQ11C,OAAO,EAAGroB,KAAKM,OAAO28nB,oBAC9B,IAAIwQ,EAAelroB,EAAWvC,KAAK61f,cAAc93b,IAC7C/9D,KAAKM,OAAOq+nB,mBAAmBh8nB,cAAc,oBAAoBwC,oBACjEnF,KAAKM,OAAOq+nB,mBAAmBh8nB,cAAc,oBAAoBwC,kBAAkBT,MAAMsR,MACnFy3nB,GAEVztoB,KAAKM,OAAOm0C,aAAa9xC,cAAc,qBAAqBwC,kBAAkBT,MAAMsR,MAChFy3nB,GAERf,EAAmBrxoB,UAAUwxoB,gBAAkB,WAC3C,IAAIQ,EAAS9qoB,EAAWvC,KAAK61f,cAAc71f,KAAKM,OAAO00nB,eACnDh1nB,KAAKM,OAAO28nB,oBACZj9nB,KAAKstoB,wBACLttoB,KAAKwtoB,4BAGDxtoB,KAAKM,OAAO84nB,gBAAkBp5nB,KAAKM,OAAOq7R,YAC1C37R,KAAK2soB,eAAe,IAAIzukB,IAASloD,MAAO,UAE5ChW,KAAKM,OAAOu/nB,iBAAiBn7nB,MAAMsR,MAAQq3nB,EAC3CrtoB,KAAKM,OAAOysoB,kBAAkBrooB,MAAMsR,MAAQq3nB,GAEhD,IAAIlmB,EAAOnnnB,KAAKM,OAAOU,QAAQ2B,cAAc,0BACzCwknB,IACAA,EAAKzinB,MAAMsR,MAAQq3nB,IAGpBX,KChKPpijB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAkBxC+ijB,GAA+B,WAC/B,SAASA,EAAcptoB,GACnBN,KAAK2toB,eACL3toB,KAAK4toB,SAAU,EACf5toB,KAAKq7C,QACLr7C,KAAK6toB,QAAS,EACd7toB,KAAK8toB,WAAY,EACjB9toB,KAAK+toB,cAAe,EACpB/toB,KAAKguoB,eACLhuoB,KAAKM,OAASA,EACdN,KAAKtD,mBAmUT,OAjUAgxoB,EAAcryoB,UAAU4yoB,WAAa,SAAUptoB,GAC3C,IAAIsG,EAAStG,EAAEsG,OACfnH,KAAK+toB,cAAe,EACpB/toB,KAAK8toB,UAAY3moB,EAAOrD,UAAUK,SAAS,WAE/CupoB,EAAcryoB,UAAU86d,QAAU,WAC9B,KAAIn2d,KAAKM,OAAO0mF,aAAex7E,GAAQkb,UAAY1mB,KAAKM,OAAOi8L,sBAA/D,CAGAv8L,KAAK0jT,UAAqC,IAA3B1jT,KAAKM,OAAOo+nB,WAAgD,IAA9B1+nB,KAAKM,OAAOikoB,eACzD,IAAI5jnB,EAAU3gB,KAAKy0C,aAAa7J,OAAOljC,IAAI,GAAI,GAAI,EAAG,GAAI,KAAM1H,KAAKy0C,aAAay5lB,aAClFluoB,KAAKy0C,aAAa7J,OAAOnlC,OAAOkb,EAAQ,GAAIA,EAAQ,IAChD3gB,KAAK8toB,YACL9toB,KAAKkC,QACLlC,KAAK8toB,WAAY,KAGzBJ,EAAcryoB,UAAU8yoB,aAAe,SAAUttoB,GACzCb,KAAKM,OAAO0mF,aAGZnmF,EAAEsG,QAAUtG,EAAEsG,OAAOrD,UAAUK,SAAS,kBACxCnE,KAAK2toB,YAAYS,YAAa,EAC9BzqoB,GAAU3D,KAAK2toB,YAAY3soB,UAAW,YAAa,cAG3D0soB,EAAcryoB,UAAU06d,OAAS,SAAUl1d,GAClCb,KAAKM,OAAOk/lB,QAAU3+lB,KAAOA,EAAEisI,eAAiBjnI,EAAQhF,EAAEisI,cAAe,cAG9E9sI,KAAK85I,cACL95I,KAAK8toB,WAAY,EACjB9toB,KAAK2toB,YAAYS,YAAa,EAC1BpuoB,KAAKy0C,aAAa45lB,eAAeC,iBACjCtuoB,KAAKy0C,aAAa45lB,eAAeC,eAAerlhB,SAAW,KAGnEykhB,EAAcryoB,UAAUkzoB,QAAU,SAAU1toB,EAAGoiZ,GAC3C,IAAIz6R,GAAa/qH,EAAkBoI,EAAQhF,EAAEsG,OAAQ,mBACjD2kB,GAAYruB,EAAkBoI,EAAQhF,EAAEsG,OAAQ,kBACpDqhH,EAAYA,GAAa18F,GAAY08F,EAAYA,EACjD,IAAI00gB,GAAYz/nB,EAAkBoI,EAAQhF,EAAEsG,OAAQ,uBAC/C1J,EAAkBoI,EAAQhF,EAAEsG,OAAQ,oBACzC,MAAKqhH,GAAa/qH,EAAkBoI,EAAQhF,EAAEsG,OAAQ,mBAClDtG,EAAEsG,OAAOrD,UAAUK,SAAS,cAIhC,GADAnE,KAAK0jT,UAAUl7L,EAAW00gB,IACrB10gB,GAAa/qH,EAAkBoI,EAAQhF,EAAEsG,OAAQ,mBAClDtG,EAAEsG,OAAOrD,UAAUK,SAAS,mBAC5BnE,KAAKwuoB,mBAFT,CAKA,IAAIC,GAAe51mB,QAAQ,EAAO61mB,OAAO,EAAOC,SAAUlxoB,EAAkBoD,EAAEsG,QAASynoB,UAAW/toB,GAElG,GADAb,KAAKM,OAAOyN,OAAO8goB,GAAyBJ,IACxCA,EAAW51mB,SAAUhzB,EAAQhF,EAAEsG,OAAQ,oBAG3CnH,KAAK0jT,UAAUl7L,EAAW00gB,GACtBl9nB,KAAKy0C,cAAc,CAEnB,IAAkB,IADFz0C,KAAKy0C,aAAa85lB,QAAQ1toB,EAAGoiZ,GAEzC,OAEJjjZ,KAAKkC,WAGbwroB,EAAcryoB,UAAU0sS,WAAa,SAAUlnS,GAC3C,IAAIb,KAAK8uoB,OAAOjuoB,GAAhB,CAGA,IAAI4toB,GAAe51mB,QAAQ,EAAO61mB,OAAO,EAAMC,SAAS,EAAOI,QAASluoB,GAExE,GADAb,KAAKM,OAAOyN,OAAO8goB,GAAyBJ,IACxCA,EAAW51mB,OAAf,CAGA,IAAIm2mB,EAAShvoB,KAAKy0C,aAAa7J,OAAOjqB,QACtC3gB,KAAK2toB,YAAY/lH,SAAU,EAC3B,IAAIqnH,EAAWjvoB,KAAKy0C,aAAay6lB,KAAKruoB,EAAEs1D,OAAQ64kB,GAChDhvoB,KAAKq7C,KAAO4zlB,EACRA,EAAS5zlB,OACTr7C,KAAK0jT,WAAWurV,EAASE,SAAUF,EAASG,UAC5CpvoB,KAAKy0C,aAAa7J,OAAOjqB,QAAU3gB,KAAKy0C,aAAa46lB,eAAeL,EAAQC,EAAUjvoB,KAAK6kN,OAAQhkN,EAAEs1D,QACrGn2D,KAAKguoB,gBAEThuoB,KAAKsvoB,eAAezuoB,EAAEs1D,OAAQn2D,KAAKy0C,eAEjB,IADFz0C,KAAKy0C,aAAaszP,WAAWlnS,IAK7CA,EAAE2kB,iBACFxlB,KAAKkC,MAAMrB,IAJPb,KAAKuvoB,oBAMb7B,EAAcryoB,UAAUyzoB,OAAS,SAAUjuoB,GACvC,IAAIsG,EAAStG,EAAEsG,OACf,QAAKA,IAGDnH,KAAK2toB,YAAYS,YACjBpuoB,KAAKuvoB,kBACE,IAEN,SAAU,YAAYhxoB,QAAQsC,EAAEs1D,SAAW,GAC5Cn2D,KAAKuvoB,kBACE,GAEU,WAAb1uoB,EAAEs1D,QACgC,UAAlCn2D,KAAKM,OAAO2gE,aAAaljC,OAAqB/9B,KAAKM,OAAOk/lB,SAAW,SAAU,MAAMjhmB,QAAQsC,EAAEs1D,SAAW,IAClD,OAAxDtwD,EAAQrF,SAASmlH,cAAe,qBACiD,OAAjF9/G,EAAQrF,SAASmlH,cAAe,IAAM3lH,KAAKM,OAAOU,QAAQsC,GAAK,gBACvD,QAAS,YAAa,aACtB,YAAa,aAAc,aAAa/E,QAAQsC,EAAEs1D,SAAW,GAC/B,OAAtCtwD,EAAQsB,EAAQ,mBAAmE,OAArCtB,EAAQsB,EAAQ,kBACjD,UAAbtG,EAAEs1D,SAAwBhvD,EAAOrD,UAAUK,SAAS,iBAAwD,OAArC0B,EAAQsB,EAAQ,kBACzC,OAA3CtB,EAAQsB,EAAQ,yBAE/BumoB,EAAcryoB,UAAUm0oB,kBAAoB,WACxC,OAAOxvoB,KAAK2toB,YAAYW,gBAE5BZ,EAAcryoB,UAAUo5C,WAAa,WACjC,OAAOz0C,KAAK6kN,QAAU7kN,KAAKo6B,SAE/BszmB,EAAcryoB,UAAUqoT,UAAY,SAAUtpR,EAAS8imB,GACnDl9nB,KAAK6kN,OAASzqL,EAAU8imB,EAAWl9nB,KAAKyvoB,SAAWzvoB,KAAKo6B,QACpD8imB,EAAWl9nB,KAAK0voB,QAAU1voB,KAAK4kF,QAEvC8ojB,EAAcryoB,UAAUs0oB,kBAAoB,SAAU3uoB,GAClD,IAAIjB,EAAQC,KACZA,KAAK2toB,YAAYW,eAAiBttoB,EAClCb,WAAW,WAAc,OAAOJ,EAAM4toB,YAAYW,eAAepsoB,SAAY,IAEjFwroB,EAAcryoB,UAAU6G,MAAQ,SAAUrB,GACtCb,KAAK85I,cACL95I,KAAK4voB,SAAS5voB,KAAKy0C,aAAa45lB,eAAgBxtoB,IAEpD6soB,EAAcryoB,UAAUy+I,YAAc,SAAUj5I,GACvCb,KAAK2toB,YAAY3soB,UAGtBqD,GAAarE,KAAK2toB,YAAY3soB,QAAShB,KAAK2toB,YAAYW,iBAAkB,YAAa,YACvFtuoB,KAAK2toB,YAAY3soB,QAAQioH,UAAY,IAEzCykhB,EAAcryoB,UAAUu0oB,SAAW,SAAUjpnB,EAAM9lB,GAG/C,GAFAb,KAAK2toB,YAAchnnB,EACnB3mB,KAAK2toB,YAAY/lH,QAAUjhgB,EAAKihgB,UAAYnqhB,EAAkBoD,GACzD8lB,EAAK3lB,QAAV,CAGA,IAAIq5H,EAAY1zG,EAAK2nnB,eAAexqoB,UAAUK,SAAS,WACvD,IAAIk2H,EAAJ,CAGIr6H,KAAK2toB,YAAY/lH,SACjBjkhB,GAAUgjB,EAAK3lB,UAAW,cAE9B2C,GAAUgjB,EAAK2nnB,iBAAkB,YACjC3nnB,EAAK3lB,QAAQioH,SAAW,EACnBoR,GACDr6H,KAAK2voB,kBAAkBhpnB,EAAK2nnB,gBAEhCtuoB,KAAKM,OAAOyN,OAAO8hoB,IACf7uoB,QAAS2lB,EAAK2nnB,eACdhuoB,OAAQqmB,EAAK3lB,QACb+rW,QAAS/sW,KAAKy0C,aAAa7J,OAAOjqB,QAClC+tnB,OAAQjxoB,EAAkBoD,GAC1B8toB,QAASlxoB,EAAkBoD,GAC3BkuoB,QAASluoB,EACTivoB,OAAQ9voB,KAAKq7C,KAAKA,KAClB5gC,UAAWza,KAAKy0C,aAAas7lB,QAAQlvoB,GACrC+mhB,SAAUnqhB,EAAkBoD,GAC5BouoB,SAAUjvoB,KAAKq7C,OAEnB,IAAIx4C,EAAK7C,KAAKy0C,aAAa7J,OAAOjqB,QAAS8/Q,EAAW59R,EAAG,GAAIg2R,EAAYh2R,EAAG,GAC5E7C,KAAKguoB,aAAgBvtW,SAAUA,EAAU5H,UAAWA,GACpD74R,KAAKgwoB,iBAAmBhwoB,KAAKM,OAAO2voB,iBAAiBp3W,GAAWn5R,IAChEM,KAAK+toB,cAAe,KAExBL,EAAcryoB,UAAU60oB,cAAgB,SAAU91mB,GAC9C,IAAIr6B,EAAQC,KACZ,OAAO,SAAUa,GACTu5B,GAAYv5B,EAAEZ,MAAQY,EAAEZ,KAAKi9nB,WAAcn9nB,EAAM0voB,SACjD1voB,EAAM0voB,SAAW,IAAIU,GAAkBpwoB,EAAMO,QAExC85B,IAAYr6B,EAAMq6B,UACvBr6B,EAAMq6B,QAAU,IAAIg2mB,GAAarwoB,EAAMO,UAEtC85B,GAAYv5B,EAAEZ,MAAQY,EAAEZ,KAAKi9nB,WAAcn9nB,EAAM2voB,QAClD3voB,EAAM2voB,QAAU,IAAIW,GAAiBtwoB,EAAMO,QAErC85B,GAAYr6B,EAAM6kF,SACxB7kF,EAAM6kF,OAAS,IAAI0rjB,GAAYvwoB,EAAMO,SAEzC,IAAIiwoB,EAASn2mB,EAAWv5B,EAAEZ,MAAQY,EAAEZ,KAAKi9nB,SAAYn9nB,EAAM0voB,SAAW1voB,EAAMq6B,QACvEv5B,EAAEZ,MAAQY,EAAEZ,KAAKi9nB,SAAYn9nB,EAAM2voB,QAAU3voB,EAAM6kF,OACpD2zM,EAAOn+P,EAAUv5B,EAAE03R,KAAKl3R,MAAMtB,EAAMO,OAAOo+nB,YAAc79nB,EAAE03R,KAC3Di4W,EAAYp2mB,EAAUv5B,EAAE03R,KAAKl3R,MAAM,EAAGtB,EAAMO,OAAOo+nB,YAAc79nB,EAAE03R,KACnE3tP,EAAS2lmB,EAAO3lmB,OAAOmuC,SAASy3jB,EAAWD,EAAO7qoB,UAOtD,GANA6qoB,EAAO3lmB,OAAOmuC,SAASw/M,EAAMg4W,EAAO7qoB,UACpC6qoB,EAAOtX,aAAauX,GAAa5lmB,OAAQA,EAAQ6lmB,gBAAkB5voB,EAAEZ,MAAQY,EAAEZ,KAAKi9nB,SAAYn9nB,EAAM2voB,QAAU3voB,EAAM6kF,UACjHp5E,GAAQkb,WAAa3mB,EAAMguoB,cAAgBltoB,GAAKA,EAAEZ,MAA+B,WAAvBY,EAAEZ,KAAKmsL,cAClErsL,EAAM+toB,WAAY,EAClB/toB,EAAMO,OAAOU,QAAQkB,SAErBrB,GAAKA,EAAEZ,MAA+B,kBAAvBY,EAAEZ,KAAKmsL,aAClBrsL,EAAM4toB,YAAYjuoB,IAAK,CACvB,IAAIovY,EACOjuY,EAAE03R,KAAKn8P,KAAK,SAAUskC,EAAKvkE,GAElC,OADA2yY,EAAU3yY,EACHukE,EAAIhhE,MAAQK,EAAM4toB,YAAYjuoB,QAGrCK,EAAMq6B,QAAQwQ,OAAOjqB,QAAQ,GAAKmuX,EAClC/uY,EAAMq6B,QAAQwQ,OAAOjqB,QAAQ,GAAK5gB,EAAMO,OAAOokoB,oBAAoB3koB,EAAMiwoB,mBAAqB,EAC9FjwoB,EAAMmC,YAM1BwroB,EAAcryoB,UAAUqB,iBAAmB,WACvC,IAAIqD,EAAQC,KACRA,KAAKM,OAAO0mF,cAGhBzhF,GAAanB,IAAIpE,KAAKM,OAAOU,QAAS,YAAahB,KAAKiuoB,WAAYjuoB,MACpEuF,GAAanB,IAAIpE,KAAKM,OAAOU,QAAS,QAAShB,KAAKm2d,QAASn2d,MAC7DA,KAAKM,OAAOU,QAAQtE,iBAAiB,QAASsD,KAAK0woB,eAAiB,SAAU7voB,GAAK,OAAOd,EAAMouoB,aAAattoB,KAAO,GACpH0E,GAAanB,IAAIpE,KAAKM,OAAOU,QAAS,WAAYhB,KAAK+1d,OAAQ/1d,MAC/DA,KAAKM,OAAOslF,GAAG+qjB,GAAkB3woB,KAAK+nS,WAAY/nS,MAClDA,KAAKM,OAAOslF,GAAGgrjB,GAAa5woB,KAAKuuoB,QAASvuoB,MAC1CA,KAAKM,OAAOslF,GAAGirjB,GAAoB7woB,KAAKkwoB,eAAc,GAAOlwoB,MAC7DA,KAAKM,OAAOslF,GAAGkrjB,GAAuB9woB,KAAKkwoB,gBAAiBlwoB,MAC5DA,KAAKM,OAAOslF,GAAG,aAAc5lF,KAAK+woB,aAAc/woB,OAC/C,aAAc,aAAaZ,QAAQ,SAAUw2E,GAAO,OAAO71E,EAAMO,OAAOslF,GAAGhQ,EAAK71E,EAAMwvoB,eAAgBxvoB,MACtG,WAAWX,QAAQ,SAAU+2D,GAAU,OAAOp2D,EAAMO,OAAOslF,GAAGzvB,EAAS,YAAap2D,EAAMgxoB,aAAchxoB,KACzGC,KAAKM,OAAOslF,GAAGorjB,GAAgBhxoB,KAAKkwoB,eAAc,GAAOlwoB,MACzDA,KAAKM,OAAOslF,GAAGqrjB,GAAmBjxoB,KAAKkwoB,eAAc,GAAOlwoB,MAC5DA,KAAKM,OAAOslF,GAAGsrjB,GAAmBlxoB,KAAKkwoB,eAAc,GAAOlwoB,MAC5DA,KAAKM,OAAOslF,GAAGurjB,GAAuBnxoB,KAAKkwoB,eAAc,GAAOlwoB,MAChEA,KAAKM,OAAOslF,GAAGwrjB,GAAepxoB,KAAKkwoB,eAAc,GAAOlwoB,MACxDA,KAAKM,OAAOslF,GAAGiqjB,GAAmB7voB,KAAKqxoB,kBAAmBrxoB,QAE9D0toB,EAAcryoB,UAAUuB,oBAAsB,WAC1C,IAAImD,EAAQC,KACRA,KAAKM,OAAO0mF,cAGhBzhF,GAAahB,OAAOvE,KAAKM,OAAOU,QAAS,YAAahB,KAAKiuoB,YAC3D1ooB,GAAahB,OAAOvE,KAAKM,OAAOU,QAAS,QAAShB,KAAKm2d,SACvD5wd,GAAahB,OAAOvE,KAAKM,OAAOU,QAAS,WAAYhB,KAAK+1d,QAC1D/1d,KAAKM,OAAOU,QAAQpE,oBAAoB,QAASoD,KAAK0woB,gBAAgB,GACtE1woB,KAAKM,OAAO0lF,IAAI2qjB,GAAkB3woB,KAAK+nS,YACvC/nS,KAAKM,OAAO0lF,IAAI4qjB,GAAa5woB,KAAKuuoB,SAClCvuoB,KAAKM,OAAO0lF,IAAI6qjB,GAAoB7woB,KAAKkwoB,eAAc,IACvDlwoB,KAAKM,OAAO0lF,IAAI8qjB,GAAuB9woB,KAAKkwoB,iBAC5ClwoB,KAAKM,OAAO0lF,IAAI,aAAchmF,KAAK+woB,eAClC,aAAc,aAAa3xoB,QAAQ,SAAUw2E,GAAO,OAAO71E,EAAMO,OAAO0lF,IAAIpQ,EAAK71E,EAAMyuoB,iBACvF,WAAWpvoB,QAAQ,SAAU+2D,GAAU,OAAOp2D,EAAMO,OAAO0lF,IAAI7vB,EAAS,YAAap2D,EAAMgxoB,gBAC5F/woB,KAAKM,OAAO0lF,IAAIgrjB,GAAgBhxoB,KAAKkwoB,eAAc,IACnDlwoB,KAAKM,OAAO0lF,IAAIkrjB,GAAmBlxoB,KAAKkwoB,eAAc,IACtDlwoB,KAAKM,OAAO0lF,IAAIirjB,GAAmBjxoB,KAAKkwoB,eAAc,IACtDlwoB,KAAKM,OAAO0lF,IAAImrjB,GAAuBnxoB,KAAKkwoB,eAAc,IAC1DlwoB,KAAKM,OAAO0lF,IAAIorjB,GAAepxoB,KAAKkwoB,eAAc,IAClDlwoB,KAAKM,OAAO0lF,IAAI6pjB,GAAmB7voB,KAAKqxoB,qBAE5C3D,EAAcryoB,UAAUiX,QAAU,WAC9BtS,KAAKpD,uBAET8woB,EAAcryoB,UAAU01oB,aAAe,WACnC/woB,KAAK4voB,SAAS5voB,KAAKy0C,aAAa45lB,iBAEpCX,EAAcryoB,UAAUmzoB,aAAe,WACnCxuoB,KAAKy0C,aAAa7J,OAAOjqB,QAAU3gB,KAAKy0C,aAAa7J,OAAOljC,IAAI,GAAI,GAAI,EAAG,GAAI,YAAa1H,KAAKy0C,aAAay5lB,aAC9GluoB,KAAKuvoB,kBAET7B,EAAcryoB,UAAUk0oB,eAAiB,WAChCvvoB,KAAK2toB,YAAY3soB,SAAYhB,KAAK2toB,YAAYW,gBAGnDjqoB,GAAarE,KAAK2toB,YAAY3soB,QAAShB,KAAK2toB,YAAYW,iBAAkB,UAAW,eAEzFZ,EAAcryoB,UAAUi2oB,eAAiB,WACrC,IAAIzD,EAAS7toB,KAAK6toB,OAElB,OADA7toB,KAAK6toB,QAAS,EACPA,GAAWptW,SAAU,KAAM5H,UAAW,MAAS74R,KAAKguoB,aAE/DN,EAAcryoB,UAAUk2oB,eAAiB,WACrCvxoB,KAAK6toB,QAAS,GAElBH,EAAcryoB,UAAUi0oB,eAAiB,SAAUn5kB,EAAQ0uJ,GACvD,IAAI9kN,EAAQC,KACZ,GAAkC,IAA9BA,KAAKM,OAAOikoB,eAAkD,IAA3BvkoB,KAAKM,OAAOo+nB,WAAnD,CAGA,IAAI/3mB,EACAqhZ,GACA1zT,KAAQ,WAAc,OAAU66hB,UAAWxonB,EAAK6hG,UAAW4mhB,UAAU,IACrEvwnB,IAAO,WAAc,OAAUswnB,UAAWxonB,EAAK6hG,UAAW4mhB,UAAU,IACpExnV,SAAY,WAAc,OAAUunV,UAAU,EAAMC,SAAyC,IAA/BrvoB,EAAMO,OAAOikoB,gBAC3E18U,QAAW,WAAc,OAAUsnV,UAAU,EAAOC,UAAU,KAElE,GAAMj5kB,KAAU6xW,EAAhB,CAGArhZ,EAAOk+L,EAAOkrb,UACd,IAAI10lB,EAAO2sX,EAAQ7xW,KACnBn2D,KAAK0jT,WAAWroQ,EAAK8zlB,SAAU9zlB,EAAK+zlB,UACpCpvoB,KAAKy0C,aAAa7J,OAAOjqB,QAAUkkM,EAAOj6K,OAAOjqB,WAErD+snB,EAAcryoB,UAAUg2oB,kBAAoB,SAAUxwoB,GAClD,GAAMA,EAAE6toB,OAAS7toB,EAAE4Z,UAAU+tG,WAAkC,UAArB3nH,EAAEkuoB,QAAQ54kB,SAC5Ct1D,EAAEP,OAAOwD,UAAUK,SAAS,iBAC5BtD,EAAEP,OAAOwD,UAAUK,SAAS,kBAAoBtD,EAAEP,OAAOwD,UAAUK,SAAS,mBAFpF,CAKAnE,KAAKuvoB,iBACL,IAAI78gB,EAAW1yH,KAAKy0C,aAAa+8lB,aAAaxxoB,KAAKwvoB,qBACnDxvoB,KAAK2voB,kBAAkBj9gB,GACvB1yH,KAAK2toB,YAAYS,YAAa,IAE3BV,KAOPljmB,GAAwB,WACxB,SAASA,IACLxqC,KAAK4qC,UACL5qC,KAAK2gB,WAqDT,OAnDA6pB,EAAOnvC,UAAUgM,IAAM,SAAUo5R,EAAUknC,EAAatkR,GACpDo9O,EAAWp0R,KAAKC,IAAI,EAAGD,KAAK0T,IAAI0gR,EAAUzgS,KAAKu4R,OAC/CovC,EAAct7T,KAAKC,IAAI,EAAGD,KAAK0T,IAAI4nT,EAAa3nU,KAAK+9D,UACrD/9D,KAAK4qC,OAAO61P,GAAYzgS,KAAK4qC,OAAO61P,OACpCzgS,KAAK4qC,OAAO61P,GAAUknC,GAAetkR,EAAQ,EAAI,GAErD7Y,EAAOnvC,UAAUqM,IAAM,SAAU+4R,EAAUknC,EAAax+O,EAAWhzB,EAAQ+3kB,GACvE,IAAIv5e,EAAMgzK,EACV,GAAIlnC,EAAWt3M,EAAU,GAAK,EAC1B,OAAQs3M,EAAUknC,GAItB,GAFAlnC,EAAWp0R,KAAKC,IAAI,EAAGD,KAAK0T,IAAI0gR,EAAWt3M,EAAU,GAAInpF,KAAKu4R,OAC9DovC,EAAct7T,KAAKC,IAAI,EAAGD,KAAK0T,IAAI4nT,EAAcx+O,EAAU,GAAInpF,KAAK4qC,OAAO61P,GAAUhkS,OAAS,IAC1Fk4J,EAAMxrE,EAAU,GAAKnpF,KAAK4qC,OAAO61P,GAAUhkS,OAAS,GAAKyxoB,EAAUztW,EAAUknC,EAAaxxQ,GAC1F,OAAQsqO,EAAU9rI,GAEtB,IAAI/1J,EAAQoB,KAAKpB,MAAMoB,KAAK4qC,OAAO61P,GAAWknC,EAAax+O,GAAW,EAAMhzB,GAExEluC,EAAMprB,EAAS4jS,EAAW,KAD9BknC,EAAwB,OAAV/oU,EAAiB+1J,EAAM/1J,GACYoB,KAAK4qC,QACtD,OAAO5qC,KAAKyxoB,QAAQxpnB,KAASimnB,EAAUztW,EAAUknC,EAAaxxQ,GAC1Dn2D,KAAK0H,IAAI+4R,EAAU9rI,EAAKxrE,EAAWhzB,EAAQ+3kB,IAAcztW,EAAUknC,IAE3En9R,EAAOnvC,UAAUuD,MAAQ,SAAUiuV,EAAQ56U,EAAOk3E,EAAWwE,EAAQx3B,GACjE,OAAMlkD,EAAQ,GAAKA,IAAU46U,EAAOpwV,SAAWuD,KAAKyxoB,QAAQ5kT,EAAO56U,KAChD,YAAXkkD,GAAmC,cAAXA,IAA6B02R,EAAOzwT,KAAK,SAAU2wH,GAAK,OAAa,IAANA,IACpF,KAEH/sJ,KAAKyxoB,QAAQ5kT,EAAO56U,IACxBjS,KAAKpB,MAAMiuV,GAA+E,KAArE,UAAW,YAAa,UAAW,aAAatuV,QAAQ43D,GAAkBw3B,EAAS,IAAM17E,EAAQA,EAAQk3E,EAAU,GAAIA,GAAW,EAAOhzB,GAD5HlkD,GAG1Cu4B,EAAOnvC,UAAUoK,OAAS,SAAUg7R,EAAUknC,GAC1ClnC,EAAWp0R,KAAKC,IAAI,EAAGD,KAAK0T,IAAI0gR,EAAUzgS,KAAKu4R,OAC/CovC,EAAct7T,KAAKC,IAAI,EAAGD,KAAK0T,IAAI4nT,EAAa3nU,KAAK4qC,OAAO61P,GAAUhkS,OAAS,IAC/EuD,KAAK2gB,SAAW8/Q,EAAUknC,IAE9Bn9R,EAAOnvC,UAAU09E,SAAW,SAAUw/M,EAAM7yR,GACxC,IAAI3F,EAAQC,KAUZ,OATAA,KAAKu4R,KAAOA,EAAK97R,OAAS,EAC1BuD,KAAK4qC,UACL2tP,EAAKn5R,QAAQ,SAAUshE,EAAKgxkB,GACxB,IAAI5vkB,EAAQpB,EAAIoB,MAAM96B,OAAO,SAAUi3B,GAAK,OAAuB,IAAhBA,EAAEs4jB,YACrDx2nB,EAAMg+D,QAAU1xD,KAAKC,IAAIw1D,EAAMrlE,OAAS,EAAmB,EAAhBsD,EAAMg+D,SACjD+D,EAAM1iE,QAAQ,SAAU6jE,EAAM0ukB,GAC1B5xoB,EAAMsH,IAAIqqoB,EAAQC,EAAQjsoB,EAASg7D,EAAKuC,QAGzCjjE,KAAK4qC,QAEhBJ,EAAOnvC,UAAUo2oB,QAAU,SAAUz0oB,GACjC,OAAiB,IAAVA,QAAyB7B,IAAV6B,GAEnBwtC,KAMP4lmB,GAA8B,WAC9B,SAASA,EAAa9voB,GAClB,IAAIP,EAAQC,KACZA,KAAK4qC,OAAS,IAAIJ,GAClBxqC,KAAKM,OAASA,EACdN,KAAK4xoB,YACDC,YAAe,EAAG,GAClB/9hB,KAAQ,EAAG,GACXg+hB,WAAc,GAAI,GAClBr3b,UAAa,GAAI,GACjBs3b,UAAa,EAAG,GAChBC,WAAc,EAAG,GACjBhqV,UAAa,EAAG,GAChBD,WAAc,EAAG,GACjBkqV,YAAe,EAAG,GAClBC,WAAc,GAAI,GAClBn+hB,OAAU,EAAG,GACbk0M,aAAgB,EAAG,IAEvBjoT,KAAKmyoB,aAAe,SAAUh8kB,GAO1B,OALIm+C,MAASv0G,EAAM6qC,OAAOjqB,QAAQ,IAAK,EAAG,EAAG,GACzC9B,KAAQ9e,EAAM6qC,OAAOjqB,QAAQ,GAAI5gB,EAAM6qC,OAAOmzB,QAAU,EAAG,GAAI,GAC/D6pP,UAAa,GAAI,EAAG,EAAG,GACvBC,SAAY9nT,EAAM6qC,OAAO2tP,KAAMx4R,EAAM6qC,OAAOmzB,QAAU,EAAG,GAAI,IAEtD5H,IAAW,MAiK9B,OA9JAi6kB,EAAa/0oB,UAAUygQ,SAAW,WAC9B,OAAQ97P,KAAKM,OAAOikoB,cAChBvkoB,KAAKM,OAAOm0C,aAAa9xC,cAAc,8BACvC3C,KAAKM,OAAOysoB,mBAEpBqD,EAAa/0oB,UAAU0sS,WAAa,SAAUlnS,GAC1C,IAAIsoF,EAAYnpF,KAAK4xoB,WAAW/woB,EAAEs1D,QAC9Bx1C,EAAU3gB,KAAKoyoB,qBAAqBvxoB,EAAEs1D,OAAQgzB,EAAWtoF,EAAEs1D,UAAUn2D,KAAK4xoB,WAAY/woB,GAC1F,GAAK8f,EAGL,SAAM,MAAO,YAAYpiB,QAAQsC,EAAEs1D,SAAW,GAAKn2D,KAAK4qC,OAAOjqB,aAAezT,aAAeyT,EAAQzT,YAC7FyT,EAAQzT,cAAgBlN,KAAK4qC,OAAO2tP,KAAMv4R,KAAK4qC,OAAOmzB,SAAS7wD,YAC/DyT,EAAQzT,cAAgB,EAAG,GAAGA,kBAItClN,KAAK4qC,OAAOnlC,OAAOkb,EAAQ,GAAIA,EAAQ,KAE3CyvnB,EAAa/0oB,UAAU+2oB,qBAAuB,SAAUj8kB,EAAQgzB,EAAWkpjB,EAAWxxoB,GAElF,QADkB,IAAdsoF,IAAwBA,GAAa,EAAG,KACvCkpjB,IAAcryoB,KAAKmyoB,aAAah8kB,GACjC,OAAO,KAEX,IAAKn2D,KAAKsyoB,kBAAkBzxoB,GACxB,OAAOb,KAAK4qC,OAAOjqB,QAEvB,IAAI9d,EAAK7C,KAAKmyoB,aAAah8kB,IAAWn2D,KAAK4qC,OAAOjqB,QAAQpG,OAAO4uE,GAAYs3M,EAAW59R,EAAG,GAAIg2R,EAAYh2R,EAAG,GAAI0voB,EAAK1voB,EAAG,GAAI2voB,EAAK3voB,EAAG,GAEtI,OADc7C,KAAK4qC,OAAOljC,IAAI+4R,EAAU5H,GAAY05W,EAAIC,GAAKr8kB,EAAQn2D,KAAKkuoB,cAG9EkC,EAAa/0oB,UAAUkzoB,QAAU,SAAU1toB,EAAGoiZ,GAC1C,IAAI97Y,EAAStG,EAAEsG,OAOf,GANAA,EAAUA,EAAOrD,UAAUK,SAAS,aAAegD,EAAStB,EAAQsB,EAAQ,MAC5EA,EAASA,IAAkBtB,EAAQhF,EAAEsG,OAAQ,2BACtCtB,EAAQhF,EAAEsG,OAAQ,yBACzBA,EAAStB,EAAQhF,EAAEsG,OAAQ,oBACvB1J,EAAkBoI,EAAQA,EAAQhF,EAAEsG,OAAQ,WAAY,oBAAsB,KAAgBA,IAClGA,EAASA,GAAUtB,EAAQsB,EAAQ,SAASrD,UAAUK,SAAS,WAAagD,EAAS,MAEjF,OAAO,EAEX,IAAItE,GAAMsE,EAAOkN,cAAcosR,SAAUt5R,EAAO0xR,WAAY4H,EAAW59R,EAAG,GAAIg2R,EAAYh2R,EAAG,GACzFoB,EAAKjE,KAAK4qC,OAAOjqB,QAAS8xnB,EAAYxuoB,EAAG,GAAIyuoB,EAAazuoB,EAAG,GAC7DgkB,EAAMprB,EAAS4jS,EAAW,IAAM5H,EAAW74R,KAAK4qC,OAAOA,QAC3D,GAAI5qC,KAAK4qC,OAAO6mmB,QAAQxpnB,KAAUg7X,GAASwvP,IAAchyW,GAAYiyW,IAAe75W,EAChF,OAAO,EAEX74R,KAAK4qC,OAAOnlC,OAAOg7R,EAAU5H,IAEjCu3W,EAAa/0oB,UAAUgzoB,aAAe,WAClC,IAAI1nnB,KACA9jB,EAAK7C,KAAK4qC,OAAOjqB,QAAS1c,EAAKpB,EAAG,GAAI49R,OAAkB,IAAPx8R,EAAgB,EAAIA,EAAIwG,EAAK5H,EAAG,GAAIg2R,OAAmB,IAAPpuR,EAAgB,EAAIA,EAGzH,OAFAzK,KAAK4qC,OAAOjqB,SAAW8/Q,EAAU5H,GACjClyQ,EAAK3lB,QAAWvD,EAAkBuC,KAAK87P,WAAWy8B,KAAKkI,IAA+D,KAAlDzgS,KAAK87P,WAAWy8B,KAAKkI,GAAU3+N,MAAM+2N,GACpGlyQ,EAAK3lB,SAGV2lB,EAAK2nnB,eAAkB3nnB,EAAK3lB,QAAQ8C,UAAUK,SAAS,kBAAqBwiB,EAAK3lB,QAAQ8C,UAAUK,SAAS,gBACpEwiB,EAAK3lB,QAAvChB,KAAKwxoB,aAAa7qnB,EAAK3lB,SAC7B2lB,EAAKihgB,SAAU,EACfjhgB,EAAKjnB,IAAMinB,EAAK3lB,QAAQqT,cAAcxB,aAAa,YAC5C8T,GANIA,GAQfypnB,EAAa/0oB,UAAUm2oB,aAAe,SAAUxwoB,GAC5C,IAAI06D,EAAQ,gGACR17D,KAAKM,OAAOk/lB,SACZ9jiB,EAAQ,0EAEZ,IAAIr7D,KAAWgB,MAAMC,KAAKN,EAAQQ,iBAAiBk6D,IAKnD,OAAOr7D,EAAM5D,OAAS4D,EAAM,GAAKW,GAErCovoB,EAAa/0oB,UAAUqK,SAAW,SAAUg7D,EAAKuC,GAC7C,IAAIyR,GAASskiB,GAASijB,OAAQjjB,GAASsjB,aAActjB,GAASsiB,eAAgBtiB,GAASoiB,cACvF,OAAS16jB,EAAI23jB,WAAap1jB,EAAKzrC,UAAYyrC,EAAK02jB,YAAc12jB,EAAKm8O,aAC3D1+O,EAAI23jB,WAAap1jB,EAAK+9iB,WAAahI,GAAS2f,eAC3Cj4jB,EAAI23jB,WAAa3jjB,EAAMn2E,QAAQ0kE,EAAK+9iB,WAAa,GAClD/9iB,EAAKpG,QAA+B,aAArBoG,EAAKpG,OAAOn2D,MAC3Bu8D,EAAK+9iB,WAAahI,GAAS6f,kBACb,WAAbn4jB,EAAIymjB,MAAqBzmjB,EAAIiykB,UAE1CvC,EAAa/0oB,UAAU6zoB,KAAO,SAAU/4kB,EAAQx1C,GAC5C,IAAIiynB,EAAa5yoB,KAAKM,OAAOikoB,cAAgB,IAC5B,cAAXpukB,GAAqC,aAAXA,IAAyC,IAAfx1C,EAAQ,GAC9DkynB,EAAyC,IAA3B7yoB,KAAKM,OAAOo+nB,YAA+B,eAAXvokB,EAMlD,OAJI9a,MAAmB,YAAX8a,GAAwB08kB,IAA+B,IAAflynB,EAAQ,IAAaiynB,EACrEzD,UAAsB,YAAXh5kB,GAAwB08kB,IAA+B,IAAflynB,EAAQ,GAC3DyunB,SAAUwD,IAIlBxC,EAAa/0oB,UAAUg0oB,eAAiB,SAAU9kgB,EAAUlvF,EAAMwpK,EAAQ1uJ,QACrD,IAAbo0E,IAAuBA,MAC3B,IAAI5pH,KASJ,MARe,eAAXw1C,GAAsC,QAAXA,GAC3Bx1C,EAAQ,GAAK4pH,EAAS,GACtB5pH,EAAQ,IAAM,GAEE,cAAXw1C,GAAqC,UAAXA,IAC/Bx1C,EAAQ,IAAM,EACdA,EAAQ,GAAK4pH,EAAS,IAEnB5pH,GAEXyvnB,EAAa/0oB,UAAU49nB,aAAe,SAAU1gW,EAAMu6W,GAClD,IAAIlomB,EAASkomB,EAAUlomB,OAAQ6lmB,EAAkBqC,EAAUrC,gBACvD5uoB,EAAM4uoB,EAAgB7lmB,OAAOA,OAAOnuC,OACpCs2oB,EAAa/yoB,KAAKM,OAAO60d,gBAAsD,cAApCn1d,KAAKM,OAAO2tnB,eAAevnnB,KAAuB7E,EAAM,EAAIA,EAC3G4uoB,EAAgB7lmB,OAAOA,OAAS6lmB,EAAgB7lmB,OAAOA,OAAOvpC,MAAM,EAAG0xoB,GACvEtC,EAAgB7lmB,OAAO2tP,KAAOw6W,GAC7BlwoB,EAAK4toB,EAAgB7lmB,OAAOA,QAAQpmC,KAAKjJ,MAAMsH,EAAI+nC,GACpD6lmB,EAAgB7lmB,OAAO2tP,MAAQ3tP,EAAOnuC,OACtC,IAAIoG,GAERutoB,EAAa/0oB,UAAU00oB,QAAU,SAAUlvoB,GACvC,IAAI8lB,EAAO3mB,KAAKquoB,eACZxroB,EAAK7C,KAAK4qC,OAAOjqB,QAAS+wnB,EAAS7uoB,EAAG,GAAI8uoB,EAAS9uoB,EAAG,GACtDmwoB,EAASrsnB,EAAK3lB,QAAQ8C,UAAUK,SAAS,aACzC8uoB,EAAeD,GAAWnyoB,GAAkB,UAAbA,EAAEs1D,SAAuBxvC,EAAK3lB,QAAQ8C,UAAUK,SAAS,wBACrFwiB,EAAK3lB,QAAQ8C,UAAUK,SAAS,sBACnCF,GAAMoI,KAAK0T,IAAIgV,SAASpO,EAAK3lB,QAAQqT,cAAcxB,aAAa,iBAAkB,IAAK6+nB,GACvFrloB,KAAK0T,IAAIgV,SAASpO,EAAK3lB,QAAQ6R,aAAa,iBAAkB,IAAK8+nB,IACvE,OAASnphB,WAAW,EAAMmxgB,WAAYqZ,EAAQjmS,SAD8C9oW,EAAG,GAAgBA,EAAG,IACpCgvoB,aAAcA,IAEhG7C,EAAa/0oB,UAAU6yoB,UAAY,WAC/B,IAAIjukB,EAAQjgE,KAAK87P,WACjB,OAAO,SAAU2kC,EAAU5H,EAAW1iO,GAClC,IAAI8M,EAAOhD,EAAMs4N,KAAKkI,GAAU3+N,MAAM+2N,GACtC,MAAe,UAAX1iO,GAAiC,eAAXA,EACf8M,EAAKn/D,UAAUK,SAAS,eAEnB,YAAXgyD,GAAmC,cAAXA,IAA2B8M,EAAKn/D,UAAUK,SAAS,eAG5D,YAAXgyD,GAAmC,cAAXA,GACiB,IAAvC8M,EAAKr3D,wBAAwBoK,QAKhDo6nB,EAAa/0oB,UAAUi3oB,kBAAoB,SAAUzxoB,GACjD,IAAIgC,EAAK7C,KAAK4qC,OAAOjqB,QAAS1c,EAAKpB,EAAG,GAAI6uoB,OAAgB,IAAPztoB,GAAiB,EAAIA,EAAIwG,EAAK5H,EAAG,GAAI8uoB,OAAgB,IAAPlnoB,GAAiB,EAAIA,EACtH,GAAIinoB,EAAS,GAAKC,EAAS,EACvB,OAAO,EAEX,IAAI1ukB,EAAOpmE,EAAS60oB,EAAS,UAAYC,EAAQ3xoB,KAAK87P,WAAWy8B,MACjE,OAAKt1N,IAGe,UAAbpiE,EAAEs1D,QAAmC,eAAbt1D,EAAEs1D,QAC7B8M,EAAKn/D,UAAUK,SAAS,eAAiB8+D,EAAKn/D,UAAUK,SAAS,mBACzD8+D,EAAKn/D,UAAUK,SAAS,oBAAsB8+D,EAAKn/D,UAAUK,SAAS,kBAE/EisoB,KAMPE,GAA6B,SAAUnljB,GAEvC,SAASmljB,EAAYhwoB,GACjB,OAAO6qF,EAAO7pF,KAAKtB,KAAMM,IAAWN,KAsFxC,OAxFAsqF,GAAUgmjB,EAAanljB,GAIvBmljB,EAAYj1oB,UAAUygQ,SAAW,WAC7B,OAAQ97P,KAAKM,OAAOikoB,cAAgBvkoB,KAAKM,OAAOq+nB,mBAAmBh8nB,cAAc,6BAC7E3C,KAAKM,OAAOu/nB,kBAEpByQ,EAAYj1oB,UAAUkzoB,QAAU,SAAU1toB,GACtC,IAAIsG,EAAStG,EAAEsG,OAMf,IALAA,EAAUA,EAAOrD,UAAUK,SAAS,gBAAkBgD,EAAStB,EAAQsB,EAAQ,QACrC,IAA3BnH,KAAKM,OAAOo+nB,aACvBv3nB,EAAUtG,EAAEsG,OAAOrD,UAAUK,SAAS,aAAetD,EAAEsG,OACnDtB,EAAQhF,EAAEsG,OAAQ,OAErBA,EAAL,CAGA,IAAItE,GAAMsE,EAAOkN,cAAcosR,SAAUt5R,EAAO0xR,WAC5C5wQ,EAAMprB,EAD6DgG,EAAG,GAC5C,IAD4DA,EAAG,GAC9C7C,KAAK4qC,OAAOA,QAC3D,GAAI5qC,KAAK4qC,OAAO6mmB,QAAQxpnB,GACpB,OAAO,EAEXjoB,KAAK4qC,OAAOnlC,OAAO0B,EAAOkN,cAAcosR,SAAUt5R,EAAO0xR,aAE7Dy3W,EAAYj1oB,UAAUgzoB,aAAe,WACjC,IAAI1nnB,KACA9jB,EAAK7C,KAAK4qC,OAAOjqB,QAAS1c,EAAKpB,EAAG,GAAI49R,OAAkB,IAAPx8R,EAAgB,EAAIA,EAAIwG,EAAK5H,EAAG,GAAIg2R,OAAmB,IAAPpuR,EAAgB,EAAIA,EAIzH,OAHAkc,EAAK3lB,QAAUhB,KAAK87P,WAAWy8B,KAAKkI,GAAU3+N,MAAM+2N,GACpDlyQ,EAAK2nnB,eAAiBtuoB,KAAKwxoB,aAAa7qnB,EAAK3lB,SAC7C2lB,EAAKihgB,SAAWjhgB,EAAK3lB,QAAQ8C,UAAUK,SAAS,mBACzCwiB,GAEX2pnB,EAAYj1oB,UAAUqK,SAAW,SAAUg7D,EAAKuC,GAC5C,OAAQA,EAAKzrC,eAAkCr8B,IAAtB8nE,EAAKpG,OAAO9wC,OAAuBk3C,EAAKm8O,aAAqC,aAArBn8O,EAAKpG,OAAOn2D,MACzFu8D,EAAK+9iB,WAAahI,GAASwrB,eAEnC8L,EAAYj1oB,UAAU6zoB,KAAO,SAAU/4kB,EAAQx1C,GAC3C,IAAIiynB,EAAa5yoB,KAAKM,OAAOikoB,cAAgB,IAC7B,cAAXpukB,GAAqC,aAAXA,IAAyC,IAAfx1C,EAAQ,GAC7DkynB,EAAyC,IAA3B7yoB,KAAKM,OAAOo+nB,YAA+B,UAAXvokB,EAClD,OACI9a,MAAmB,cAAX8a,GAA0B08kB,IAAgBlynB,EAAQ,KAAO3gB,KAAK4qC,OAAOA,OAAOnuC,OAAS,GACzFm2oB,EACJzD,SAAUyD,EACVxD,SAAUwD,IAGlBtC,EAAYj1oB,UAAUg0oB,eAAiB,SAAU9kgB,EAAUlvF,EAAMwpK,EAAQ1uJ,QACpD,IAAbo0E,IAAuBA,MAC3B,IAAI2ogB,KASJ,MARe,YAAX/8kB,GAAmC,eAAXA,GACxB+8kB,EAAS,GAAKlzoB,KAAK4qC,OAAOA,OAAOnuC,OACjCy2oB,EAAS,GAAK3ogB,EAAS,IAEP,eAAXp0E,GAAsC,QAAXA,IAChC+8kB,EAAS,GAAK3ogB,EAAS,GACvB2ogB,EAAS,IAAM,GAEZA,GAEX5C,EAAYj1oB,UAAU49nB,aAAe,SAAU1gW,GAC3C,IAAIx4R,EAAQC,KACRvD,EAASuD,KAAK4qC,OAAOA,OAAOnuC,OAC5BuD,KAAKM,OAAO60d,gBAAsD,cAApCn1d,KAAKM,OAAO2tnB,eAAevnnB,OACzD1G,KAAK4qC,OAAO2tP,OAASv4R,KAAK4qC,OAAO2tP,KACjCA,EAAK,GAAGz2N,MAAM1iE,QAAQ,SAAU6jE,EAAM0ukB,GAClC,OAAO5xoB,EAAM6qC,OAAOvjC,IAAI5K,EAAQk1oB,EAAQ1ukB,EAAKzrC,UAA0C,IAA/ByrC,EAAKpG,OAAOs4Z,oBAIhFm7K,EAAYj1oB,UAAU00oB,QAAU,SAAUlvoB,GACtC,OAAOnC,EAAOysF,EAAO9vF,UAAU00oB,QAAQzuoB,KAAKtB,KAAMa,IAAM2nH,WAAW,EAAO18F,UAAU,KAExFwknB,EAAYj1oB,UAAU6yoB,UAAY,WAC9B,OAAO,WAAc,OAAO,IAEhCoC,EAAYj1oB,UAAUi3oB,kBAAoB,SAAUzxoB,GAChD,IAAIgC,EAAK7C,KAAK4qC,OAAOjqB,QAAS+wnB,EAAS7uoB,EAAG,GAAI8uoB,EAAS9uoB,EAAG,GAC1D,GAAI6uoB,EAAS,GAAKC,EAAS,EACvB,OAAO,EAEX,IAAI1ukB,EAAOpmE,EAAS60oB,EAAS,UAAYC,EAAQ3xoB,KAAK87P,WAAWy8B,MACjE,OAAKt1N,IAGe,UAAbpiE,EAAEs1D,QAAmC,iBAAbt1D,EAAEs1D,SAA6B8M,EAAKn/D,UAAUK,SAAS,kBAEnFmsoB,GACTF,IAEED,GAAmC,SAAUhljB,GAE7C,SAASgljB,IACL,OAAkB,OAAXhljB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KA2B/D,OA7BAsqF,GAAU6ljB,EAAmBhljB,GAI7BgljB,EAAkB90oB,UAAUygQ,SAAW,WACnC,OAAO97P,KAAKM,OAAOm0C,aAAa9xC,cAAc,8BAElDwtoB,EAAkB90oB,UAAU6zoB,KAAO,SAAU/4kB,EAAQx1C,GACjD,IAAIkynB,EAAyC,IAA3B7yoB,KAAKM,OAAOo+nB,YAA+B,eAAXvokB,EAClD,OACI9a,MAAkB,YAAX8a,GAAwB08kB,IAA+B,IAAflynB,EAAQ,KACnC,QAAXw1C,GAA+B,eAAXA,IAA4Bx1C,EAAQ,KAAO3gB,KAAK4qC,OAAOmzB,QACpFoxkB,UAAsB,YAAXh5kB,GAAwB08kB,IAA+B,IAAflynB,EAAQ,GAC3DyunB,UAAsB,YAAXj5kB,GAAwB08kB,IAA+B,IAAflynB,EAAQ,KAGnEwvnB,EAAkB90oB,UAAUg0oB,eAAiB,SAAU9kgB,EAAUlvF,EAAMwpK,EAAQ1uJ,QAC1D,IAAbo0E,IAAuBA,MAC3B,IAAI4ogB,KASJ,MARe,cAAXh9kB,GAAqC,aAAXA,GAC1Bg9kB,EAAS,GAAK5ogB,EAAS,GACvB4ogB,EAAS,GAAKtub,EAAOj6K,OAAOmzB,QAAU,GAEtB,cAAX5H,GAAqC,UAAXA,IAC/Bg9kB,EAAS,IAAM,EACfA,EAAS,GAAK5ogB,EAAS,IAEpB4ogB,GAEJhD,GACTC,IAEEC,GAAkC,SAAUlljB,GAE5C,SAASkljB,IACL,OAAkB,OAAXlljB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KA2B/D,OA7BAsqF,GAAU+ljB,EAAkBlljB,GAI5BkljB,EAAiBh1oB,UAAU6zoB,KAAO,SAAU/4kB,EAAQx1C,GAChD,IAAIkynB,EAAyC,IAA3B7yoB,KAAKM,OAAOo+nB,YAA+B,UAAXvokB,EAClD,OACI9a,MAAkB,cAAX8a,GAA0B08kB,IAAgBlynB,EAAQ,KAAO3gB,KAAK4qC,OAAOA,OAAOnuC,OAAS,IACxE,eAAX05D,GAAsC,QAAXA,IAAqBx1C,EAAQ,KAAO3gB,KAAK4qC,OAAOmzB,QACpFoxkB,UAAsB,eAAXh5kB,GAAsC,QAAXA,IAAqBx1C,EAAQ,KAAO3gB,KAAK4qC,OAAOmzB,QACtFqxkB,UAAsB,cAAXj5kB,GAA0B08kB,IAAgBlynB,EAAQ,KAAO3gB,KAAK4qC,OAAOA,OAAOnuC,OAAS,IAGxG4zoB,EAAiBh1oB,UAAUygQ,SAAW,WAClC,OAAQ97P,KAAKM,OAAOq+nB,mBAAmBh8nB,cAAc,6BAEzD0toB,EAAiBh1oB,UAAUg0oB,eAAiB,SAAU9kgB,EAAUlvF,EAAMwpK,EAAQ1uJ,QACzD,IAAbo0E,IAAuBA,MAC3B,IAAI6ogB,KASJ,MARe,cAAXj9kB,GAAqC,aAAXA,GAC1Bi9kB,EAAS,GAAK7ogB,EAAS,GACvB6ogB,EAAS,GAAKvub,EAAOj6K,OAAOmzB,QAAU,GAEtB,YAAX5H,GAAmC,eAAXA,IAC7Bi9kB,EAAS,GAAKpzoB,KAAK4qC,OAAOA,OAAOnuC,OACjC22oB,EAAS,GAAK7ogB,EAAS,IAEpB6ogB,GAEJ/C,GACTC,IAGE+C,GAA2B,WAC3B,SAASA,EAAUx5K,GACf75d,KAAK65d,UAAYA,EAoBrB,OAlBAw5K,EAAUh4oB,UAAUi4oB,YAAc,SAAUrzoB,GACxCA,EAAKkH,OAAOkN,cAAcvQ,UAAUM,IAAI,kBAE5CivoB,EAAUh4oB,UAAUk4oB,WAAa,SAAUtzoB,GACvCA,EAAKkH,OAAOkN,cAAcvQ,UAAUS,OAAO,kBAE/C8uoB,EAAUh4oB,UAAUg7d,UAAY,WACxBr2d,KAAK65d,YACLt0d,GAAanB,IAAIpE,KAAK65d,UAAW,QAAS75d,KAAKszoB,YAAatzoB,MAC5DuF,GAAanB,IAAIpE,KAAK65d,UAAW,OAAQ75d,KAAKuzoB,WAAYvzoB,QAGlEqzoB,EAAUh4oB,UAAUk8d,YAAc,WAC1Bv3d,KAAK65d,YACLt0d,GAAahB,OAAOvE,KAAK65d,UAAW,QAAS75d,KAAKszoB,aAClD/toB,GAAahB,OAAOvE,KAAK65d,UAAW,OAAQ75d,KAAKuzoB,cAGlDF,KC1xBP/ojB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAM5Dg6X,GAA8B,SAAUzrU,GAExC,SAASyrU,IACL,OAAkB,OAAXzrU,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAuB/D,OAzBAsqF,GAAUssU,EAAczrU,GAIxBN,IACI3jF,EAAS,KACV0vZ,EAAav7Z,UAAW,gBAAY,GACvCwvF,IACI3jF,EAAS,IACV0vZ,EAAav7Z,UAAW,iBAAa,GACxCwvF,IACI3jF,EAAS,IACV0vZ,EAAav7Z,UAAW,mBAAe,GAC1CwvF,IACI3jF,KACD0vZ,EAAav7Z,UAAW,yBAAqB,GAChDwvF,IACI3jF,GAAS,IACV0vZ,EAAav7Z,UAAW,yBAAqB,GAChDwvF,IACI3jF,GAAS,IACV0vZ,EAAav7Z,UAAW,iBAAa,GACxCwvF,IACI3jF,EAAS,OACV0vZ,EAAav7Z,UAAW,gBAAY,GAChCu7Z,GACT53V,IC/CEw0kB,GAAsCl1oB,OAAOm1oB,QAAU,SAASzkmB,GAChE,IAAK,IAAItH,EAAGvrC,EAAI,EAAGwuJ,EAAI3rJ,UAAUvC,OAAQN,EAAIwuJ,EAAGxuJ,IAAK,CACjDurC,EAAI1oC,UAAU7C,GACd,IAAK,IAAIuuF,KAAKhjD,EAAOppC,OAAOjD,UAAUsL,eAAerF,KAAKomC,EAAGgjD,KACzD17C,EAAE07C,GAAKhjD,EAAEgjD,IAEjB,OAAO17C,GAYPo9T,GAA2B,WAK3B,SAASA,EAAU9rW,EAAQk+nB,EAAmB+G,GAK1CvloB,KAAK0zoB,sBAIL1zoB,KAAK2zoB,0BAIL3zoB,KAAK4zoB,mBACL5zoB,KAAKk5M,cAAe,EACpBl5M,KAAK6zoB,qBAAsB,EAC3B7zoB,KAAK8zoB,oBAAqB,EAC1B9zoB,KAAK+zoB,wBAAyB,EAC9B/zoB,KAAKg0oB,oBACLh0oB,KAAK8qoB,kBAAoB,EACzB9qoB,KAAKi0oB,gBACLj0oB,KAAKk0oB,gBAAiB,EACtBl0oB,KAAKm0oB,uBACLn0oB,KAAKo0oB,kBAAmB,EACxBp0oB,KAAKq0oB,qBAAsB,EAC3Br0oB,KAAKs0oB,WAAY,EACjBt0oB,KAAKM,OAASA,EACdN,KAAKw+nB,kBAAoBA,EACzBx+nB,KAAKu0oB,QAAUhP,EAAQ/jkB,WAAW,mBAClCxhE,KAAKkC,MAAQqjoB,EAAQ/jkB,WAAW,SAChCxhE,KAAKtD,mBAgwDT,OA9vDA0vW,EAAU/wW,UAAUm5oB,oBAAsB,WACtCjvoB,GAAanB,IAAIpE,KAAKM,OAAOm0C,aAAc,YAAaz0C,KAAK6/G,iBAAkB7/G,OAOnFosW,EAAU/wW,UAAUo5oB,cAAgB,SAAUx0oB,EAAMyG,GAChD1G,KAAKM,OAAOkmB,QAAQ9f,EAAM1G,KAAK00oB,YAAYz0oB,KAE/CmsW,EAAU/wW,UAAUq5oB,YAAc,SAAUz0oB,GACxC,GAAIA,EAAK44R,WAAa54R,EAAKwgS,SAAU,CACjC,IAAIk0W,EAAS30oB,KAAK40oB,UAAUn3oB,EAAkBwC,EAAKwgS,UAAYhjS,EAAkBwC,EAAK44R,WAClF74R,KAAKqkO,aAAepkO,EAAK44R,UAAU4H,SAAWxgS,EAAKwgS,UACvDxgS,EAAK+iE,eAAiB2xkB,EAAO3xkB,eAEjC,OAAO/iE,GAOXmsW,EAAU/wW,UAAUw1d,iBAAmB,SAAU5wd,EAAMyG,GACnD1G,KAAKM,OAAOkmB,QAAQ9f,EAAM1G,KAAK00oB,YAAYz0oB,KAM/CmsW,EAAU/wW,UAAUkkC,cAAgB,WAChC,MAAO,aAOX6sU,EAAU/wW,UAAUiX,QAAU,WAC1BtS,KAAK60oB,YACL70oB,KAAKu5Z,iBACLv5Z,KAAKpD,sBACL2I,GAAahB,OAAOvE,KAAKM,OAAOm0C,aAAc,YAAaz0C,KAAK6/G,mBAEpEusP,EAAU/wW,UAAUy5oB,UAAY,WAC5B,OAA0C,WAAlC90oB,KAAKM,OAAO2gE,aAAaljC,MAAwD,UAAlC/9B,KAAKM,OAAO2gE,aAAaljC,MAC5E/9B,KAAKM,OAAOy0oB,WAAWC,UAAYh1oB,KAAKM,OAAOy0oB,WAAWC,QAAQzlgB,aAClEvvI,KAAKM,OAAOk/lB,SAAWx/lB,KAAKM,OAAO20oB,oBAE3C7oS,EAAU/wW,UAAU65oB,sBAAwB,SAAUjjoB,GAClD,IAAI+hnB,EAAOh0nB,KAAKM,OAChB,OAAI0znB,EAAKiJ,mBACEjJ,EAAKuN,qBAAqBtvnB,GAE9B,MAQXm6V,EAAU/wW,UAAUoniB,UAAY,SAAUxwhB,EAAOqsG,GAC7C,IAAI01gB,EAAOh0nB,KAAKM,OACZykjB,EAAcivE,EAAKoN,cAAcnvnB,GACjCkjoB,EAAqBn1oB,KAAKk1oB,sBAAsBjjoB,GAChDmjoB,EAAaphB,EAAKwW,wBAAwBv4nB,GAC9C,GAAKjS,KAAKq1oB,aAAgBtwF,IAAe/kjB,KAAK80oB,YAA9C,CAMA,IAII70oB,EAJgB8kjB,EAAYh/b,aAAa,kBAC7CzH,EAAYA,IACPt+G,KAAK0zoB,mBAAmBj3oB,SACe,IAAnCuD,KAAK0zoB,mBAAmBj3oB,QAAgBwV,IAAUjS,KAAK0zoB,mBAAmB,IAF5Dp1hB,KAMnBr+G,GACIzD,KAAM44oB,EAAY30W,SAAUxuR,EAAOqjoB,cAAet1oB,KAAK8zoB,mBACvDyB,eAAgBv1oB,KAAK6zoB,oBAAqBnzkB,IAAKqkf,EAC/C3qD,YAAa45H,EAAKmM,UAAUngoB,KAAKw1oB,cAAevhI,iBAAkBj0gB,KAAKw1oB,aAAcruoB,OAAQnH,KAAKmH,OAAQ0xB,QAAQ,GAEtH54B,EAAOD,KAAKy1oB,eAAex1oB,EAAMk1oB,GACjCn1oB,KAAKy0oB,cAAcx0oB,EAAMy1oB,MAExBj4oB,EAAkBwC,KAAuB,IAAdA,EAAQ,UAGxCD,KAAK21oB,WACAr3hB,IACDt+G,KAAK41oB,mBAAmB7wF,EAAa9yiB,GACjC+hnB,EAAKiJ,oBACLj9nB,KAAK41oB,mBAAmBT,EAAoBljoB,GAEhD+hnB,EAAK6hB,iBAAmB5joB,GAE5BjS,KAAK81oB,eAAe7joB,GACfqsG,IACDr+G,GACIzD,KAAM44oB,EAAY30W,SAAUxuR,EAC5ByuD,IAAKqkf,EAAa3qD,YAAa45H,EAAKmM,UAAUngoB,KAAKw1oB,cACnDvhI,iBAAkBj0gB,KAAKw1oB,aAAcruoB,OAAQnH,KAAKmH,QAEtDlH,EAAOD,KAAKy1oB,eAAex1oB,EAAMk1oB,GACjCn1oB,KAAK6wd,iBAAiB5wd,EAAM81oB,QAGpC3pS,EAAU/wW,UAAUo6oB,eAAiB,SAAU15lB,EAAWi6lB,GACtD,GAAIh2oB,KAAKM,OAAO28nB,mBAAoB,CAChC,IAAIgZ,GAASD,KAAMA,EAAME,eAAgBl2oB,KAAKM,OAAO8/nB,iBAAiBpgoB,KAAKw1oB,eAC3Ez5lB,EAAYy3lB,MAAaz3lB,EAAWk6lB,GAExC,OAAOl6lB,GAQXqwT,EAAU/wW,UAAU86oB,kBAAoB,SAAUzwnB,EAAYE,GAC1D5lB,KAAKo2oB,WAAWp2oB,KAAKq2oB,yBAAyB3wnB,EAAYE,IAC1D5lB,KAAKM,OAAOu1oB,iBAAmBjwnB,GAOnCwmV,EAAU/wW,UAAU+6oB,WAAa,SAAUE,GACvC,IAAItiB,EAAOh0nB,KAAKM,OACZmgS,EAAYzgS,KAAKu2oB,cAAgCD,EAAWA,EAAW75oB,OAAS,GAA/C65oB,EAAW,GAC5CvxF,EAAcivE,EAAKoN,cAAc3gW,GACjC00W,EAAqBn1oB,KAAKk1oB,sBAAsBz0W,GAChDx7N,EAAU+ujB,EAAKiJ,mBAEfv7lB,EAAesylB,EAAKwW,wBAAwB8L,EAAW,IAC3D,GAAKt2oB,KAAKq1oB,cAAer1oB,KAAK80oB,YAA9B,CAGA,IAAI70oB,GACAq2oB,WAAYA,EAAY51kB,IAAKqkf,EAAatkR,SAAUA,EAAUt5R,OAAQnH,KAAKmH,OAC3Eq1f,QAASw3H,EAAKmM,UAAUngoB,KAAKw1oB,cAAevhI,iBAAkBj0gB,KAAKw1oB,aACnEF,cAAet1oB,KAAK8zoB,mBAAoByB,eAAgBv1oB,KAAK6zoB,oBAC7Dr3oB,KAAMklC,GAIV,GAFAzhC,EAAOD,KAAKy1oB,eAAex1oB,EAAMk1oB,GACjCn1oB,KAAKy0oB,cAAcx0oB,EAAMy1oB,IACpBj4oB,EAAkBwC,KAAuB,IAAdA,EAAQ,OAAxC,CAKA,GAFAD,KAAK21oB,WACL3hB,EAAK6hB,iBAAmBS,EAAWj1oB,OAAO,GAAG,GACxCrB,KAAKu2oB,cAWNv2oB,KAAK41oB,mBAAmB5hB,EAAKoN,cAAc3gW,GAAWA,GAClDx7N,GACAjlE,KAAK41oB,mBAAmB5hB,EAAKuN,qBAAqB9gW,GAAWA,GAEjEzgS,KAAK81oB,eAAer1W,QAdpB,IAAK,IAAIriS,EAAK,EAAGo4oB,EAAeF,EAAYl4oB,EAAKo4oB,EAAa/5oB,OAAQ2B,IAAM,CACxE,IAAIq4oB,EAASD,EAAap4oB,GAC1B4B,KAAK41oB,mBAAmB5hB,EAAKoN,cAAcqV,GAASA,GAChDxxkB,GACAjlE,KAAK41oB,mBAAmB5hB,EAAKuN,qBAAqBkV,GAASA,GAE/Dz2oB,KAAK81oB,eAAer1W,GAU5BxgS,GACIq2oB,WAAYA,EAAY51kB,IAAKqkf,EAAatkR,SAAUA,EAAUt5R,OAAQnH,KAAKmH,OAC3Eq1f,QAASw3H,EAAKmM,UAAUngoB,KAAKw1oB,cAAevhI,iBAAkBj0gB,KAAKw1oB,aACnEh5oB,KAAMklC,GAEVzhC,EAAOD,KAAKy1oB,eAAex1oB,EAAMk1oB,GACjCn1oB,KAAK6wd,iBAAiB5wd,EAAM81oB,OAQhC3pS,EAAU/wW,UAAUq7oB,mBAAqB,SAAUJ,GAC/C,IAAItiB,EAAOh0nB,KAAKM,OAEZykjB,EAAe/kjB,KAAKu2oB,cACpBviB,EAAKoN,cAAckV,EAAWA,EAAW75oB,OAAS,IADdu3nB,EAAKoN,cAAckV,EAAW,IAElEnB,EAAsBn1oB,KAAKu2oB,cAC3Bv2oB,KAAKk1oB,sBAAsBoB,EAAWA,EAAW75oB,OAAS,IADfuD,KAAKk1oB,sBAAsBoB,EAAW,IAEjFrxkB,EAAU+ujB,EAAKiJ,mBACnB,GAAKj9nB,KAAKq1oB,cAAer1oB,KAAK80oB,YAI9B,IAAK,IADD70oB,EACK7B,EAAK,EAAGu4oB,EAAeL,EAAYl4oB,EAAKu4oB,EAAal6oB,OAAQ2B,IAAM,CACxE,IAAIqiS,EAAWk2W,EAAav4oB,GACxBu2oB,EAAS30oB,KAAK40oB,UAAUn0W,GACxBm2W,EAAe52oB,KAAK0zoB,mBAAmBn1oB,QAAQkiS,IAAa,EAEhE,GADAuzV,EAAK6hB,iBAAmBp1W,EACpBm2W,EACA52oB,KAAK62oB,YAAYC,IAAwBr2W,IAAYk0W,EAAOn4oB,OAAQuojB,IAAe4vF,EAAO3xkB,iBAC1FhjE,KAAK0zoB,mBAAmBrrnB,OAAOroB,KAAK0zoB,mBAAmBn1oB,QAAQkiS,GAAW,GAC1EzgS,KAAK4zoB,gBAAgBvrnB,OAAOroB,KAAK4zoB,gBAAgBr1oB,QAAQwmjB,GAAc,GACvEA,EAAYr5iB,gBAAgB,iBAC5B1L,KAAK+2oB,uBAAuBhyF,GAAa,EAAO,KAAM,wBAAyB,YAC3EowF,IACAn1oB,KAAK4zoB,gBAAgBvrnB,OAAOroB,KAAK4zoB,gBAAgBr1oB,QAAQ42oB,GAAqB,GAC9EA,EAAmBzpoB,gBAAgB,iBACnC1L,KAAK+2oB,uBAAuB5B,GAAoB,EAAO,KAAM,wBAAyB,aAE1Fn1oB,KAAK62oB,YAAYG,IAAuBv2W,IAAYk0W,EAAOn4oB,OAAQuojB,IAAe4vF,EAAO3xkB,iBAAkBmykB,QAE1G,CASD,GARAl1oB,GACIzD,KAAMm4oB,EAAOn4oB,KAAMikS,SAAUA,EAAU//N,IAAKqkf,EAAa59iB,OAAQnH,KAAKmH,OACtEq1f,QAASw3H,EAAKmM,UAAUngoB,KAAKw1oB,cAAevhI,iBAAkBj0gB,KAAKw1oB,aACnEF,cAAet1oB,KAAK8zoB,mBAAoByB,eAAgBv1oB,KAAK6zoB,oBAC7D7wkB,eAAgB2xkB,EAAO3xkB,gBAE3B/iE,EAAOD,KAAKy1oB,eAAex1oB,EAAMk1oB,GACjCn1oB,KAAKy0oB,cAAcx0oB,EAAMy1oB,KACpBj4oB,EAAkBwC,KAAuB,IAAdA,EAAQ,OACpC,OAEAD,KAAKu2oB,eACLv2oB,KAAK21oB,WAET31oB,KAAK41oB,mBAAmB7wF,EAAatkR,GACjCx7N,GACAjlE,KAAK41oB,mBAAmBT,EAAoB10W,GAapD,GAVAzgS,KAAK81oB,eAAer1W,GACfm2W,IACD32oB,GACIzD,KAAMm4oB,EAAOn4oB,KAAMikS,SAAUA,EAAU//N,IAAKqkf,EAAa59iB,OAAQnH,KAAKmH,OACtEq1f,QAASw3H,EAAKmM,UAAUngoB,KAAKw1oB,cAAevhI,iBAAkBj0gB,KAAKw1oB,aACnExykB,eAAgB2xkB,EAAO3xkB,gBAE3B/iE,EAAOD,KAAKy1oB,eAAex1oB,EAAMk1oB,GACjCn1oB,KAAK6wd,iBAAiB5wd,EAAM81oB,KAE5B/1oB,KAAKu2oB,cACL,QAIZnqS,EAAU/wW,UAAUg7oB,yBAA2B,SAAU3wnB,EAAYE,GAIjE,IAHA,IAAImnV,KACAlqW,EAAM6iB,EAAaE,GACjBzpB,EAAGupB,EAAYpZ,IAAKsZ,IAAezpB,EAAGypB,EAAUtZ,IAAKoZ,GAAcvpB,EAAI0G,EAAG1G,EAAGmQ,EAAMzJ,EAAGyJ,IACrFnQ,GAAKmQ,EAAKnQ,IACb4wW,EAAQvoW,KAAKrI,GAKjB,OAHIupB,EAAaE,GACbmnV,EAAQrtT,UAELqtT,GAEXX,EAAU/wW,UAAUs6oB,SAAW,WAC3B31oB,KAAKi3oB,oBACLj3oB,KAAK0zoB,sBACL1zoB,KAAK4zoB,mBACL5zoB,KAAKM,OAAOu1oB,kBAAoB,EAC5B71oB,KAAKu2oB,eAAiBv2oB,KAAKM,OAAO20oB,qBAClCj1oB,KAAKg0oB,sBAGb5nS,EAAU/wW,UAAUy6oB,eAAiB,SAAUpwnB,GAC3C1lB,KAAKw1oB,aAAe9vnB,EACpB1lB,KAAKk3oB,cAAgBl3oB,KAAK0zoB,mBAAmBj3oB,SAAU,GAE3D2vW,EAAU/wW,UAAU87oB,wBAA0B,SAAUpyF,EAAaqyF,GACjE,IAAIr3oB,EAAQC,KACZ,GAAIA,KAAKM,OAAO20oB,qBAAuBx3oB,EAAkBsnjB,GAAc,CACnE,IAAI4vF,EAAS30oB,KAAK40oB,UAAU7vF,GACxBsyF,EAAS1C,EAAOn4oB,KAAOm4oB,EAAOn4oB,KAAKwD,KAAKs3oB,YAAc,KAC1D,GAAe,OAAXD,EACA,OAEJ1C,EAAO77kB,WAAas+kB,EAChBA,GACAp3oB,KAAKg0oB,iBAAiBqD,GAAUD,EAC3Bp3oB,KAAKm0oB,oBAAoB/3mB,KAAK,SAAU5/B,GAAQ,OAAOA,EAAKuD,EAAMu3oB,cAAgBD,KACnFr3oB,KAAKm0oB,oBAAoB3voB,KAAKmwoB,EAAOn4oB,OAIzCwD,KAAKu3oB,oBAAoBF,KAIrCjrS,EAAU/wW,UAAUk8oB,oBAAsB,SAAUpkf,GAChD,IAAIpzJ,EAAQC,YACJA,KAAKg0oB,iBAAiB7gf,GAC9B,IAAIlhJ,EACYjS,KAAKm0oB,oBAAoB/3mB,KAAK,SAAU5/B,EAAML,GAE1D,OADA8V,EAAQ9V,EACDK,EAAKuD,EAAMu3oB,cAAgBnkf,KAGlCnzJ,KAAKm0oB,oBAAoB9rnB,OAAOpW,EAAO,IAG/Cm6V,EAAU/wW,UAAUm8oB,iBAAmB,SAAU92kB,EAAK02kB,GAClD,IAAK35oB,EAAkBijE,GAAM,CACzB,IAAI+2kB,EAAS/2kB,EAAI/9D,cAAc,kBAC1BlF,EAAkBg6oB,KACnB50kB,GAAqB40kB,EAAOp3hB,mBAAoB+2hB,IAC5C35oB,EAAkBuC,KAAK03oB,iBAAoBj6oB,EAAkBuC,KAAK03oB,iBAC9D13oB,KAAK03oB,cAAc5zoB,UAAUK,SAAS,sBAC1CnE,KAAK23oB,iBAAiB5inB,SAAS2rC,EAAI7tD,aAAa,iBAAkB,QAKlFu5V,EAAU/wW,UAAUu6oB,mBAAqB,SAAU7wF,EAAar/hB,GAC5D,GAAKq/hB,EAAL,CAGA/kjB,KAAK0zoB,mBAAmBlvoB,KAAKkhB,GAC7B,IAAI7jB,EAAM7B,KAAK0zoB,mBAAmBj3oB,OAWlC,GAVIuD,KAAKM,OAAO28nB,oBAAsBp7nB,EAAM,GACnC7B,KAAK0zoB,mBAAmB7xoB,EAAM,KAAO7B,KAAK0zoB,mBAAmB7xoB,EAAM,IACpE7B,KAAK0zoB,mBAAmBtnf,MAGhCpsJ,KAAK4zoB,gBAAgBpvoB,KAAKugjB,GAC1BA,EAAYvhjB,aAAa,gBAAiB,QAC1CxD,KAAKm3oB,wBAAwBpyF,GAAa,GAC1C/kjB,KAAKw3oB,iBAAiBzyF,GAAa,GACnC/kjB,KAAK+2oB,uBAAuBhyF,GAAa,EAAM,KAAM,wBAAyB,aACzE/kjB,KAAKk5M,aAAc,CACpB,IAAI/xM,EAASnH,KAAKkC,MAAMovoB,iBAAiBz4W,UACrCksR,EAAYjjf,MAAM9hE,KAAKkC,MAAMovoB,iBAAiBz4W,WAC9CksR,EAAYpijB,cAAc,uCAC9B,IAAKwE,EACD,OAEJnH,KAAKkC,MAAMqsoB,SAAUpnoB,OAAQA,IAAU,MAO/CilW,EAAU/wW,UAAUk+Z,eAAiB,WACjC,IAAKv5Z,KAAKM,OAAO20oB,oBAAuBj1oB,KAAKM,OAAO20oB,qBAAuBj1oB,KAAKM,OAAOk/lB,SACjF/hmB,EAAkBuC,KAAK03oB,gBAAkB13oB,KAAK03oB,cAAc5zoB,UAAUK,SAAS,oBAAsB,CACvG,IAAIw+D,EAAO3iE,KAAKM,OAAOU,QAAQ2B,cAAc,gBAAgBA,cAAc,QACvEggE,EAAK7+D,UAAUK,SAAS,gBACxBw+D,EAAK7+D,UAAUS,OAAO,iBAE1BvE,KAAKi3oB,oBACLj3oB,KAAK43oB,qBACL53oB,KAAK+zoB,wBAAyB,IAOtC3nS,EAAU/wW,UAAU47oB,kBAAoB,WACpC,IAAIl3oB,EAAQC,KACZ,GAAIA,KAAKk3oB,cAAe,CAUpB,IAAK,IATDljB,EAAOh0nB,KAAKM,OACZi4R,EAAOv4R,KAAKM,OAAO+goB,cACnB7koB,KACAkkE,KACAs1kB,KACAv1W,KACAx7N,EAAU+ujB,EAAKiJ,mBACfj6jB,KAEK7mE,GADa6D,KAAKM,OAAOkqoB,wBACrB,GAAG3ooB,EAAM7B,KAAK0zoB,mBAAmBj3oB,OAAQN,EAAI0F,EAAK1F,IAAK,CAChE,IAAI8iS,EAAaj/R,KAAKM,OAAO+goB,cAAcrhoB,KAAK0zoB,mBAAmBv3oB,IAC/Dw4oB,EAAS30oB,KAAK40oB,UAAU31W,GACxB01W,IACAn4oB,EAAKgI,KAAKmwoB,EAAOn4oB,MACjBkkE,EAAIl8D,KAAKy6R,GACTwB,EAASj8R,KAAKxE,KAAK0zoB,mBAAmBv3oB,IACtC6mE,EAAex+D,KAAKmwoB,EAAO3xkB,iBAE3BiC,GACA+wkB,EAAKxxoB,KAAKwvnB,EAAKoM,iBAAiBpgoB,KAAK0zoB,mBAAmBv3oB,KAIhE,GADA6D,KAAK62oB,YAAYC,GAAuBr2W,EAAUjkS,EAAMkkE,EAAKsC,EAAgBgzkB,IAC/C,IAA1Bh2oB,KAAKo0oB,iBACL,OAEJ77W,EAAKvxP,OAAO,SAAUsqH,GAAU,OAAOA,EAAOvrC,aAAa,mBAAqB3mH,QAAQ,SAAU4E,GACzFjE,EAAMu0oB,YACPtwoB,EAAI0H,gBAAgB,iBACpB3L,EAAMg3oB,uBAAuB/yoB,GAAK,GAAO,EAAM,wBAAyB,aAE5EjE,EAAMo3oB,wBAAwBnzoB,GAAK,GACnCjE,EAAMy3oB,iBAAiBxzoB,KAE3B,IAAS7H,EAAI,EAAG0F,EAAM7B,KAAK0zoB,mBAAmBj3oB,OAAQN,EAAI0F,EAAK1F,IAAK,CAChE,IAAI07oB,EAAa73oB,KAAKk1oB,sBAAsBl1oB,KAAK0zoB,mBAAmBv3oB,IAChE07oB,IACK73oB,KAAKs0oB,YACNuD,EAAWnsoB,gBAAgB,iBAC3B1L,KAAK+2oB,uBAAuBc,GAAY,GAAO,EAAM,wBAAyB,aAElF73oB,KAAKm3oB,wBAAwBU,GAAY,IAGjD73oB,KAAK0zoB,sBACL1zoB,KAAK4zoB,mBACL5zoB,KAAKk3oB,eAAgB,EACrBl3oB,KAAKM,OAAOu1oB,kBAAoB,EAChC71oB,KAAK62oB,YAAYG,GAAsBv2W,EAAUjkS,EAAMkkE,EAAKsC,EAAgBgzkB,KAGpF5pS,EAAU/wW,UAAUw7oB,YAAc,SAAUnwoB,EAAM+5R,EAAUjkS,EAAMkkE,EAAKsC,EAAgBgzkB,GAEnFh2oB,KAAKm3oB,wBAAwBz2kB,EAAI,IAAI,GACrC,IAAIo3kB,GAAmBr3W,SAAUA,EAAUjkS,KAAMA,EAAMkkE,IAAKA,EAAKsC,eAAgBA,EAAgBnqC,QAAQ,GACzG74B,KAAKM,OAAOkmB,QAAQ9f,EAAM1G,KAAKM,OAAO28nB,mBAAqBuW,MAAasE,GAAkB9B,KAAMA,IAAU8B,GAC1G93oB,KAAKo0oB,iBAAmB0D,EAAoB,OAC5C93oB,KAAKw3oB,iBAAiB92kB,EAAI,KAE9B0rS,EAAU/wW,UAAUu5oB,UAAY,SAAUl0kB,GAEtC,YADY,IAARA,IAAkBA,EAAM1gE,KAAKqkO,cAC7B5mO,EAAkBijE,OAGH,iBAARA,IACPA,EAAM1gE,KAAKM,OAAO8goB,cAAc1gkB,IAEhCA,EACO1gE,KAAKM,OAAOy3oB,oBAAoBr3kB,EAAI7tD,aAAa,sBAIhEu5V,EAAU/wW,UAAU28oB,uBAAyB,SAAUn/W,GACnD,IAAIm7V,EAAOh0nB,KAAKM,OACZ2kE,EAAU+ujB,EAAKiJ,mBACnB,OAAIh4jB,GACI4zN,EAAUA,WAAa5zN,EAChB+ujB,EAAKikB,wBAAwBp/W,EAAU4H,SAAUzgS,KAAKk4oB,YAAYr/W,EAAU4H,SAAU5H,EAAUA,YAIxG,MAQXuzE,EAAU/wW,UAAUwniB,WAAa,SAAUhqQ,EAAWv6K,GAClD,GAAKt+G,KAAKm4oB,aAAV,CAGA,IAEIl4oB,EAFA+znB,EAAOh0nB,KAAKM,OACZ0jkB,EAAehkkB,KAAKg4oB,uBAAuBn/W,GAG1CmrS,IACDA,EAAegwD,EAAKokB,iBAAiBv/W,EAAU4H,SAAUzgS,KAAKk4oB,YAAYr/W,EAAU4H,SAAU5H,EAAUA,aAE5G74R,KAEKqkO,aAAew0D,EAAU4H,SAC9B,IAAI/+P,EAAesylB,EAAKwW,wBAAwBxqoB,KAAKqkO,cACrD,GAAKrkO,KAAKm4oB,cAAiBn0E,IAAgBhkkB,KAAK80oB,YAAhD,CAGA,IAAIvwI,EAAiBy/D,EAAalgkB,UAAUK,SAAS,8BACrDm6G,EAAYA,GAAwBnhH,EAAY6C,KAAKq4oB,YACjDx/W,EAAU4H,WAAazgS,KAAKq4oB,UAAU53W,UAAY5H,EAAUA,YAAc74R,KAAKq4oB,UAAUx/W,WACzF0rO,EAFmBjmZ,KAInBr+G,GACIzD,KAAMklC,EAAcm3P,UAAWA,EAAWy/W,YAAat0E,EACvDsxE,cAAet1oB,KAAK8zoB,mBAAoByB,eAAgBv1oB,KAAK6zoB,oBAAqB0E,qBAAsBv4oB,KAAKw4oB,WAC7GC,gBAAiBz4oB,KAAKw4oB,WAClBx4oB,KAAK04oB,aAAa14oB,KAAKw4oB,WAAW/3W,SAAUzgS,KAAKw4oB,WAAW3/W,gBAAa19R,EAC7E09B,QAAQ,GAEZ74B,KAAKy0oB,cAAcx0oB,EAAM04oB,MAExBl7oB,EAAkBwC,KAAwB,IAAfA,EAAS,UAGzCD,KAAK44oB,YACAt6hB,GACDt+G,KAAK64oB,oBAAoB70E,EAAcnrS,EAAU4H,SAAU5H,EAAUA,WAEzE74R,KAAK84oB,gBAAgBjgX,EAAWA,GAC3Bv6K,GACDt+G,KAAK6wd,kBACDr0d,KAAMklC,EAAcm3P,UAAWA,EAAWy/W,YAAat0E,EACvDu0E,qBAAsBv4oB,KAAKw4oB,WAAYO,qBAAsB/4oB,KAAK2zoB,uBAClE8E,gBAAiBz4oB,KAAKw4oB,WAClBx4oB,KAAK04oB,aAAa14oB,KAAKw4oB,WAAW/3W,SAAUzgS,KAAKw4oB,WAAW3/W,gBAAa19R,GAC9E69oB,QAGX5sS,EAAU/wW,UAAUq9oB,aAAe,SAAUO,EAAMzsf,GAC/C,OAAQxsJ,KAAKM,OAAO28nB,oBAAsBzwe,GAAQxsJ,KAAKM,OAAO28nB,mBAAqBj9nB,KAAKM,OAAO23oB,wBAAwBgB,EAAMzsf,GAC3ExsJ,KAAKM,OAAO83oB,iBAAiBa,EAAMzsf,IAQzF4/M,EAAU/wW,UAAU69oB,mBAAqB,SAAUxznB,EAAYE,GAC3D,GAAK5lB,KAAKm4oB,aAAV,CAGA,IAAInkB,EAAOh0nB,KAAKM,OACZ0jkB,EAAehkkB,KAAKg4oB,uBAAuBtynB,GAC3Cu/C,EAAU+ujB,EAAKiJ,mBACdj5D,IACDA,EAAegwD,EAAKokB,iBAAiB1ynB,EAAW+6Q,SAAU/6Q,EAAWmzQ,YAEzE,IAAI94Q,EACAzT,EAGA6soB,EAFAC,EAAU1znB,EACV2znB,EAAUzznB,EAAWA,GAAsBF,EAE/C1lB,KAAKqkO,aAAe3+M,EAAW+6Q,SAC/B,IACI/+P,EAAesylB,EAAKwW,wBAAwBxqoB,KAAKqkO,cACrD,IAAIrkO,KAAKu2oB,eAAkBv2oB,KAAKm4oB,eAAgBn4oB,KAAK80oB,YAArD,CAGA,IAAI70oB,GACAzD,KAAMklC,EAAcm3P,UAAWnzQ,EAAY4ynB,YAAat0E,EACxDsxE,cAAet1oB,KAAK8zoB,mBAAoByB,eAAgBv1oB,KAAK6zoB,oBAAqB0E,qBAAsBv4oB,KAAKw4oB,WAC7GC,gBAAiBz4oB,KAAKw4oB,WAAax4oB,KAAK04oB,aAAa14oB,KAAKw4oB,WAAW/3W,SAAUzgS,KAAKw4oB,WAAW3/W,gBAAa19R,GAGhH,GADA6E,KAAKy0oB,cAAcx0oB,EAAM04oB,IACpBl7oB,EAAkBwC,KAAwB,IAAfA,EAAS,OAAzC,CAIA,GADAD,KAAK44oB,YACDlznB,EAAW+6Q,SAAW76Q,EAAS66Q,SAAU,CACzC,IAAI1yQ,EAAOrI,EACXA,EAAaE,EACbA,EAAWmI,EAEf,IAAK,IAAI5xB,EAAIupB,EAAW+6Q,SAAUtkS,GAAKypB,EAAS66Q,SAAUtkS,IAAK,CACV,QAA7C6D,KAAKw+nB,kBAAkB8a,mBACvBv5nB,EAAM5jB,IAAMupB,EAAW+6Q,SAAY/6Q,EAAoB,UAAI,EAC3DpZ,EAAMnQ,IAAMypB,EAAS66Q,SAAY76Q,EAAkB,UAAI5lB,KAAKu5oB,gBAAgBp9oB,KAG5E4jB,EAAM2F,EAAWmzQ,UACjBvsR,EAAMsZ,EAASizQ,WAEnBsgX,KACA,IAAK,IAAI51nB,EAAIxD,EAAMzT,EAAMyT,EAAMzT,EAAKzK,EAAMke,EAAMzT,EAAMyT,EAAMzT,EAAKiX,GAAK1hB,EAAK0hB,KAG/DygjB,EAFJ/+f,EACI1hD,EAAI0hD,EACW+ujB,EAAKokB,iBAAiBj8oB,EAAGonB,GAGzBywmB,EAAKikB,wBAAwB97oB,EAAGonB,GAIpCywmB,EAAKokB,iBAAiBj8oB,EAAGonB,MAK5C41nB,EAAY30oB,KAAK+e,GACjBvjB,KAAK64oB,oBAAoB70E,GACzBhkkB,KAAKu1N,aAAayuW,IAEtBhkkB,KAAK2zoB,uBAAuBnvoB,MAAOi8R,SAAUtkS,EAAGg9oB,YAAaA,IAEjEn5oB,KAAK84oB,gBAAgBM,EAASC,GAC9Br5oB,KAAK6wd,kBACDr0d,KAAMklC,EAAcm3P,UAAWnzQ,EAAY4ynB,YAAat0E,EACxDu0E,qBAAsBv4oB,KAAKw4oB,WAAYO,qBAAsB/4oB,KAAK2zoB,uBAClE8E,gBAAiBz4oB,KAAKw4oB,WAAax4oB,KAAK04oB,aAAa14oB,KAAKw4oB,WAAW/3W,SAAUzgS,KAAKw4oB,WAAW3/W,gBAAa19R,GAC7G69oB,QAOP5sS,EAAU/wW,UAAUm+oB,YAAc,SAAUC,GACxC,GAAKz5oB,KAAKm4oB,aAAV,CAGA,IAAInkB,EAAOh0nB,KAAKM,OACZ0jkB,EAAehkkB,KAAKg4oB,uBAAuByB,EAAe,IAC1Dx0kB,EAAU+ujB,EAAKiJ,mBACdj5D,IACDA,EAAegwD,EAAKokB,iBAAiBqB,EAAe,GAAGh5W,SAAUg5W,EAAe,GAAGN,YAAY,KAEnGn5oB,KAAKqkO,aAAeo1a,EAAe,GAAGh5W,SACtC,IAAI/+P,EAAesylB,EAAKwW,wBAAwBxqoB,KAAKqkO,cACrD,IAAIrkO,KAAKu2oB,eAAkBv2oB,KAAKm4oB,eAAgBn4oB,KAAK80oB,YAArD,CAGA90oB,KAAKy0oB,eACDj4oB,KAAMklC,EAAcm3P,UAAW4gX,EAAe,GAAGN,YAAY,GAC7Db,YAAat0E,EAAcsxE,cAAet1oB,KAAK8zoB,mBAC/CyB,eAAgBv1oB,KAAK6zoB,oBAAqB0E,qBAAsBv4oB,KAAKw4oB,WACrEC,gBAAiBz4oB,KAAKw4oB,WAAax4oB,KAAK04oB,aAAa14oB,KAAKw4oB,WAAW/3W,SAAUzgS,KAAKw4oB,WAAW3/W,gBAAa19R,GAC7Gw9oB,IACH,IAAK,IAAIx8oB,EAAI,EAAG0F,EAAM43oB,EAAeh9oB,OAAQN,EAAI0F,EAAK1F,IAClD,IAAK,IAAIonB,EAAI,EAAGs9mB,EAAU4Y,EAAet9oB,GAAGg9oB,YAAY18oB,OAAQ8mB,EAAIs9mB,EAASt9mB,KAGjEygjB,EAFJ/+f,EACIw0kB,EAAet9oB,GAAGg9oB,YAAY51nB,GAAK0hD,EACpB+ujB,EAAKokB,iBAAiBqB,EAAet9oB,GAAGskS,SAAUg5W,EAAet9oB,GAAGg9oB,YAAY51nB,IAGhFywmB,EAAKikB,wBAAwBwB,EAAet9oB,GAAGskS,SAAUg5W,EAAet9oB,GAAGg9oB,YAAY51nB,IAI3FywmB,EAAKokB,iBAAiBqB,EAAet9oB,GAAGskS,SAAUg5W,EAAet9oB,GAAGg9oB,YAAY51nB,OAKnGvjB,KAAK64oB,oBAAoB70E,GACzBhkkB,KAAKu1N,aAAayuW,GAClBhkkB,KAAK05oB,iBAAkBj5W,SAAUg5W,EAAet9oB,GAAGskS,SAAU5H,UAAW4gX,EAAet9oB,GAAGg9oB,YAAY51nB,MAG9GvjB,KAAK84oB,iBAAkBr4W,SAAUg5W,EAAe,GAAGh5W,SAAU5H,UAAW4gX,EAAe,GAAGN,YAAY,KAAQ14W,SAAUg5W,EAAe,GAAGh5W,SAAU5H,UAAW4gX,EAAe,GAAGN,YAAY,KAC7Ln5oB,KAAK6wd,kBACDr0d,KAAMklC,EAAcm3P,UAAW4gX,EAAe,GAAGN,YAAY,GAC7Db,YAAat0E,EACbu0E,qBAAsBv4oB,KAAKw4oB,WAAYO,qBAAsB/4oB,KAAK2zoB,uBAClE8E,gBAAiBz4oB,KAAKw4oB,WAAax4oB,KAAK04oB,aAAa14oB,KAAKw4oB,WAAW/3W,SAAUzgS,KAAKw4oB,WAAW3/W,gBAAa19R,GAC7G69oB,OAQP5sS,EAAU/wW,UAAUs+oB,oBAAsB,SAAUR,GAChD,GAAKn5oB,KAAKm4oB,aAAV,CAGA,IAGIn0E,EAEA/xjB,EALA+hnB,EAAOh0nB,KAAKM,OAIZ2kE,EAAU+ujB,EAAKiJ,mBAEnBj9nB,KAAKqkO,aAAe80a,EAAY,GAAG14W,SACnC,IAAI/+P,EAAesylB,EAAKwW,wBAAwBxqoB,KAAKqkO,cACrD,IAAIrkO,KAAKu2oB,eAAkBv2oB,KAAKm4oB,eAAgBn4oB,KAAK80oB,YAArD,CAGA,IAAIH,EAEAA,EADA1vkB,GAAWk0kB,EAAY,GAAGtgX,WAAa5zN,EAC9B+ujB,EAAK4lB,uBAAuBT,EAAY,GAAG14W,UAG3CzgS,KAAK40oB,UAAUuE,EAAY,GAAG14W,UAG3C,IAAK,IADDz9N,KACK5kE,EAAK,EAAGy7oB,EAAgBV,EAAa/6oB,EAAKy7oB,EAAcp9oB,OAAQ2B,IAAM,CAE3E,IAAK,IADDy6R,EAAYghX,EAAcz7oB,GACrBjC,EAAI,EAAG0F,EAAM7B,KAAK2zoB,uBAAuBl3oB,OAAQN,EAAI0F,EAAK1F,IAC/D,GAAI6D,KAAK2zoB,uBAAuBx3oB,GAAGskS,WAAa5H,EAAU4H,SAAU,CAChExuR,EAAQ9V,EACR,OAGR6nkB,EAAehkkB,KAAKg4oB,uBAAuBn/W,MAEvCmrS,EAAegwD,EAAKokB,iBAAiBv/W,EAAU4H,SAAUzgS,KAAKk4oB,YAAYr/W,EAAU4H,SAAU5H,EAAUA,aAE5G71N,EAAex+D,KAAKmwoB,EAAO7ykB,MAAMmD,GAAWk0kB,EAAY,GAAGtgX,WAAa5zN,EAClE4zN,EAAUA,UAAY5zN,EAAU4zN,EAAUA,WAAW71N,gBAC3D,IAAI/iE,GACAzD,KAAMklC,EAAcm3P,UAAWsgX,EAAY,GAC3C5D,eAAgBv1oB,KAAK6zoB,oBAAqB0E,qBAAsBv4oB,KAAKw4oB,WACrEF,YAAat0E,EAAcsxE,cAAet1oB,KAAK8zoB,mBAC/C2E,gBAAiBz4oB,KAAKw4oB,WAClBxkB,EAAKokB,iBAAiBp4oB,KAAKw4oB,WAAW/3W,SAAUzgS,KAAKw4oB,WAAW3/W,gBAAa19R,GAEjFy7oB,EAAe3koB,GAAS,EAC5B,GAAI2koB,EAAc,CACd,IAAIkD,EAAkB95oB,KAAK2zoB,uBAAuB1hoB,GAAOknoB,YACrDW,EAAgBv7oB,QAAQs6R,EAAUA,YAAc,GAChD74R,KAAK+5oB,aAAaC,KAA2Bv5W,SAAU5H,EAAU4H,SAAU04W,aAActgX,EAAUA,aAAen3P,GAAesiiB,GAAehhgB,GAChJ82kB,EAAgBzxnB,OAAOyxnB,EAAgBv7oB,QAAQs6R,EAAUA,WAAY,GACrEmrS,EAAalgkB,UAAUS,OAAO,6BAC9By/jB,EAAat4jB,gBAAgB,iBAC7B1L,KAAK+5oB,aAAaE,KAA0Bx5W,SAAU5H,EAAU4H,SAAU04W,aAActgX,EAAUA,aAAen3P,GAAesiiB,GAAehhgB,KAG/I4zkB,GAAe,EACf52oB,KAAKy0oB,cAAcx0oB,EAAM04oB,IACzB34oB,KAAK05oB,iBAAkBj5W,SAAU5H,EAAU4H,SAAU5H,UAAWA,EAAUA,YAC1E74R,KAAK64oB,oBAAoB70E,GACzBhkkB,KAAKu1N,aAAayuW,SAItBhkkB,KAAKy0oB,cAAcx0oB,EAAM04oB,IACzB34oB,KAAK64oB,oBAAoB70E,EAAcnrS,EAAU4H,SAAU5H,EAAUA,WAEzE74R,KAAK84oB,gBAAgBjgX,EAAWA,GAC3B+9W,GACD52oB,KAAK6wd,kBACDr0d,KAAMklC,EAAcm3P,UAAWsgX,EAAY,GAAIb,YAAat0E,EAC5Dy0E,gBAAiBz4oB,KAAKw4oB,WAAax4oB,KAAK04oB,aAAa14oB,KAAKw4oB,WAAW/3W,SAAUzgS,KAAKw4oB,WAAW3/W,gBAC3F19R,EAAWo9oB,qBAAsBv4oB,KAAKw4oB,WAAYO,qBAAsB/4oB,KAAK2zoB,wBAClFqF,QAIf5sS,EAAU/wW,UAAU68oB,YAAc,SAAUz3W,EAAUxuR,GAClD,IAAI6vD,EACAmD,EAAUjlE,KAAKM,OAAO28nB,mBACtBh4jB,GACIhzD,GAASgzD,IACTnD,EAAQ9hE,KAAKM,OAAOkhoB,qBAAqB/gW,GAAUj/R,iBAAiB,iBAGvEsgE,IACDA,EAAQ9hE,KAAKM,OAAO+goB,cAAc5gW,GAAUj/R,iBAAiB,iBAEjE,IAAK,IAAIuvE,EAAI,EAAGA,EAAIjP,EAAMrlE,OAAQs0E,IAAK,CAEnC,GADeh8C,SAAS+sC,EAAMiP,GAAGl+D,aAAa,iBAAkB,MAC/CZ,EAMb,OALIgzD,GACIhzD,GAASgzD,IACT8L,GAAK9L,GAGN8L,EAGf,OAAQ,GAEZq7R,EAAU/wW,UAAUk+oB,gBAAkB,SAAU94W,GAC5C,IAAI3+N,EAAQ9hE,KAAKM,OAAO28nB,mBAAqBj9nB,KAAKM,OAAOkhoB,qBAAqB/gW,GAAUj/R,iBAAiB,gBACnGxB,KAAKM,OAAO+goB,cAAc5gW,GAAUj/R,iBAAiB,gBAC3D,OAAOuzB,SAAS+sC,EAAMA,EAAMrlE,OAAS,GAAGoW,aAAa,iBAAkB,KAE3Eu5V,EAAU/wW,UAAUu9oB,UAAY,WAC5B54oB,KAAK43oB,sBAETxrS,EAAU/wW,UAAU0+oB,aAAe,SAAUrzoB,EAAMyyoB,EAAa38oB,EAAMslE,EAAOkB,GAErElB,EAAM,IAAMA,EAAM,GAAGh+D,UAAUK,SAAS,iBACxCnE,KAAKw3oB,iBAAiB3xoB,EAAQi8D,EAAM,GAAI,OAE5C,IAAI7hE,GACA6hE,MAAOA,EAAOtlE,KAAMA,EAAM28oB,YAAaA,EAAan2kB,eAAgBA,EAAgBnqC,QAAQ,GAEhG74B,KAAKM,OAAOkmB,QAAQ9f,EAAMzG,GAC1BD,KAAKq0oB,oBAAsBp0oB,EAAU,QAEzCmsW,EAAU/wW,UAAUw9oB,oBAAsB,SAAU70E,EAAcvjS,EAAU5H,GACnEp7R,EAAkBgjS,IACnBzgS,KAAK05oB,iBAAkBj5W,SAAUA,EAAU5H,UAAWA,IAE1DmrS,EAAalgkB,UAAUM,IAAI,6BACvB4/jB,EAAalgkB,UAAUK,SAAS,iBAChCnE,KAAKw3oB,iBAAiB3xoB,EAAQm+jB,EAAc,OAAO,GAEvDhkkB,KAAKu1N,aAAayuW,IAEtB53N,EAAU/wW,UAAUk6N,aAAe,SAAUtyJ,GACzCjjE,KAAKmH,OAAS87D,EACTxlE,EAAkBwlE,KACnBA,EAAKz/D,aAAa,gBAAiB,QAC9BxD,KAAKk5M,cACNl5M,KAAKkC,MAAMqsoB,SAAUpnoB,OAAQ87D,IAAQ,KAIjDmpS,EAAU/wW,UAAUy9oB,gBAAkB,SAAUpznB,EAAYE,GACxD5lB,KAAKq4oB,UAAY3ynB,EACjB1lB,KAAKw4oB,WAAa5ynB,EAClB5lB,KAAKukgB,eAAiBvkgB,KAAK2zoB,uBAAuBl3oB,SAAU,GAEhE2vW,EAAU/wW,UAAUq+oB,gBAAkB,SAAUQ,GAG5C,IAAK,IAFDC,EACAlooB,EACK9V,EAAI,EAAG0F,EAAM7B,KAAK2zoB,uBAAuBl3oB,OAAQN,EAAI0F,EAAK1F,IAC/D,GAAI6D,KAAK2zoB,uBAAuBx3oB,GAAGskS,WAAay5W,EAAaz5W,SAAU,CACnE05W,GAAa,EACblooB,EAAQ9V,EACR,MAGJg+oB,EACIn6oB,KAAK2zoB,uBAAuB1hoB,GAAOknoB,YAAY56oB,QAAQ27oB,EAAarhX,WAAa,GACjF74R,KAAK2zoB,uBAAuB1hoB,GAAOknoB,YAAY30oB,KAAK01oB,EAAarhX,WAIrE74R,KAAK2zoB,uBAAuBnvoB,MAAOi8R,SAAUy5W,EAAaz5W,SAAU04W,aAAce,EAAarhX,cAOvGuzE,EAAU/wW,UAAUu8oB,mBAAqB,WACrC,GAAI53oB,KAAKukgB,eAAgB,CAUrB,IAAK,IATDyvH,EAAOh0nB,KAAKM,OACZ+jjB,EAAgBrkjB,KAAKo6oB,0BACrB/pF,EAAUrwjB,KAAK2zoB,uBACfn3oB,KACAslE,KACAkB,KACAgsQ,EAAkBglT,EAAKwW,wBAEvBvlkB,EAAU+ujB,EAAKiJ,mBACV9goB,EAAI,EAAG0F,EAAMwujB,EAAQ5zjB,OAAQN,EAAI0F,EAAK1F,IAAK,CAChDK,EAAKgI,KAAKwqU,EAAgBqhP,EAAQl0jB,GAAGskS,WAErC,IAAK,IADDk0W,EAAS30oB,KAAK40oB,UAAUvkF,EAAQl0jB,GAAGskS,UAC9Bl9Q,EAAI,EAAG82nB,EAAOhqF,EAAQl0jB,GAAGg9oB,YAAY18oB,OAAQ8mB,EAAI82nB,EAAM92nB,IACxD0hD,EACIorf,EAAQl0jB,GAAGg9oB,YAAY51nB,GAAK0hD,EAC5BnD,EAAMt9D,KAAKwvnB,EAAKokB,iBAAiB/nF,EAAQl0jB,GAAGskS,SAAU4vR,EAAQl0jB,GAAGg9oB,YAAY51nB,KAG7Eu+C,EAAMt9D,KAAKwvnB,EAAKikB,wBAAwB5nF,EAAQl0jB,GAAGskS,SAAU4vR,EAAQl0jB,GAAGg9oB,YAAY51nB,MAIxFy/C,EAAex+D,KAAKmwoB,EAAO7ykB,MAAMuuf,EAAQl0jB,GAAGg9oB,YAAY51nB,IAAIy/C,gBAC5DlB,EAAMt9D,KAAKwvnB,EAAKokB,iBAAiB/nF,EAAQl0jB,GAAGskS,SAAU4vR,EAAQl0jB,GAAGg9oB,YAAY51nB,MAKzF,GADAvjB,KAAK+5oB,aAAaC,GAAwB3pF,EAAS7zjB,EAAMslE,EAAOkB,IAC/B,IAA7BhjE,KAAKq0oB,oBACL,OAEJ,IAASl4oB,EAAI,EAAG0F,EAAMwijB,EAAc5njB,OAAQN,EAAI0F,EAAK1F,IACjDkojB,EAAclojB,GAAG2H,UAAUS,OAAO,6BAClC8/iB,EAAclojB,GAAGuP,gBAAgB,iBAErC1L,KAAK2zoB,0BACL3zoB,KAAKukgB,gBAAiB,EACtBvkgB,KAAK+5oB,aAAaE,GAAuB5pF,EAAS7zjB,EAAMslE,EAAOkB,KAGvEopS,EAAU/wW,UAAU++oB,wBAA0B,WAC1C,IAEIzZ,EAFA3M,EAAOh0nB,KAAKM,OACZi4R,EAAOy7V,EAAKqN,cAEZrN,EAAKiJ,qBACL0D,EAAQ3M,EAAKwN,qBACbjpW,EAAOy7V,EAAKsmB,eAAe/hX,EAAMooW,IAGrC,IAAK,IADD7+jB,KACK3lE,EAAI,EAAG0F,EAAM02R,EAAK97R,OAAQN,EAAI0F,EAAK1F,IACxC2lE,EAAQA,EAAMvnD,UAAUlZ,MAAMC,KAAKi3R,EAAKp8R,GAAGqF,iBAAiB,gCAEhE,OAAOsgE,GAEXsqS,EAAU/wW,UAAUg5U,iBAAmB,SAAUxzU,GAC7CA,EAAE2kB,iBACF,IAMImvI,EANA4lf,EAASv6oB,KAAKM,OAAOU,QAAQ4K,wBAC7BovB,EAAKh7B,KAAK+M,EACVkuB,EAAKj7B,KAAKgN,EACVkH,EAAW2qD,GAAYh+D,GACvBq6B,EAAKhnB,EAASnH,EAAIwtoB,EAAO/toB,KACzB2uB,EAAKjnB,EAASlH,EAAIutoB,EAAO7toB,IAEzBvF,EAAStB,EAAQhF,EAAEsG,OAAQ,MAqB/B,GApBAnH,KAAKw6oB,WAAY,EACZx6oB,KAAKy6oB,aACDtzoB,IACDA,EAAStB,EAAQrF,SAASiyG,iBAAiBzyG,KAAKM,OAAOU,QAAQmT,WAAa,EAAGtT,EAAEwzC,SAAU,OAE3FrZ,EAAKE,IACLy5H,EAAMz5H,EACNA,EAAKF,EACLA,EAAK25H,GAEL15H,EAAKE,IACLw5H,EAAMx5H,EACNA,EAAKF,EACLA,EAAK05H,GAET30J,KAAKgB,QAAQ0D,MAAM8H,KAAOwuB,EAAK,KAC/Bh7B,KAAKgB,QAAQ0D,MAAMgI,IAAMuuB,EAAK,KAC9Bj7B,KAAKgB,QAAQ0D,MAAMsR,MAAQklB,EAAKF,EAAK,KACrCh7B,KAAKgB,QAAQ0D,MAAMqR,OAASolB,EAAKF,EAAK,MAEtC9zB,IAAWtG,EAAEgnB,UAAYhnB,EAAE41G,SAAU,CACrC,IAAIgqL,EAAW1rQ,SAAS5tB,EAAO0L,aAAa,iBAAkB,IAC9D,GAAK7S,KAAKy6oB,WAGL,CACD,IAAI9jY,EAAK9iO,GAAahzC,EAAEsG,OAAQ,aAC5BwvQ,GACA32Q,KAAK06oB,gBAAgBj6W,EAAU1rQ,SAAS4hP,EAAG9jQ,aAAa,iBAAkB,UAL9E7S,KAAKm2oB,kBAAkBn2oB,KAAK0lB,WAAY+6Q,KAUpD2rE,EAAU/wW,UAAUq/oB,gBAAkB,SAAUj6W,EAAU5H,GACtD74R,KAAK43oB,qBACL53oB,KAAKk5oB,oBAAqBz4W,SAAUzgS,KAAK0lB,WAAYmzQ,UAAW74R,KAAKqxjB,iBAAoB5wR,SAAUA,EAAU5H,UAAWA,KAE5HuzE,EAAU/wW,UAAUuuN,eAAiB,SAAU/oN,GAC3CL,SAASuL,KAAKjI,UAAUS,OAAO,uBAC3BvE,KAAKgB,SACLuD,EAAOvE,KAAKgB,SAEhBuE,GAAahB,OAAOvE,KAAKM,OAAOm0C,aAAc,YAAaz0C,KAAKq0U,kBAChE9uU,GAAahB,OAAO/D,SAASuL,KAAM,UAAW/L,KAAK4pN,gBACnD5pN,KAAKw6oB,WAAY,GAErBpuS,EAAU/wW,UAAUwkH,iBAAmB,SAAUh/G,GAC7C,IAEI2yG,EAFArsG,EAAStG,EAAEsG,OACX6snB,EAAOh0nB,KAAKM,OAEZq6oB,EAAc9mmB,GAAa1sC,EAAQ,UACvC,KAAIwzoB,GAAeA,EAAYr3oB,KAAO0wnB,EAAKhznB,QAAQsC,OAG/CzC,EAAE41G,UAAY51G,EAAEgnB,UAChBhnB,EAAE2kB,iBAEFre,EAAOrD,UAAUK,SAAS,eAAiBtD,EAAE41G,WAAa51G,EAAEgnB,SAAS,CACrE,GAAiD,QAA7CmsmB,EAAKwK,kBAAkB8a,mBAAgCt5oB,KAAKq1oB,aAAgBr1oB,KAAKu2oB,eAIhF,GAAIviB,EAAK4mB,oBAAqB,CAC/B,IAAK56oB,KAAKq1oB,aAAer1oB,KAAKu2oB,eAAiB1woB,EAAQsB,EAAQ,MAAMrD,UAAUK,SAAS,yBAEpF,YADAnE,KAAKw6oB,WAAY,GAGrBhniB,GAAS,EACTxzG,KAAKgB,QAAUG,EAAc,OAASkC,UAAW,mBACjD2wnB,EAAKv/kB,aAAa9yC,YAAY3B,KAAKgB,eAVnChB,KAAKy6oB,YAAa,EAClBjniB,GAAS,EAWb,GAAIA,EAAQ,CACR,IAAIw1R,EAAKnjY,EAAQhF,EAAEsG,OAAQ,MAC3BnH,KAAK0lB,WAAaqP,SAASi0W,EAAGn2X,aAAa,iBAAkB,IAC7D7S,KAAKqxjB,eAAiBt8hB,SAAS8e,GAAa1sC,EAAQ,aAAa0L,aAAa,iBAAkB,IAChGrS,SAASuL,KAAKjI,UAAUM,IAAI,uBAC5B,IAAIm2oB,EAASvmB,EAAKhznB,QAAQ4K,wBACtBivoB,EAAUh8kB,GAAYh+D,GAC1Bb,KAAK+M,EAAI8toB,EAAQ9toB,EAAIwtoB,EAAO/toB,KAC5BxM,KAAKgN,EAAI6toB,EAAQ7toB,EAAIutoB,EAAO7toB,IAC5BnH,GAAanB,IAAI4vnB,EAAKv/kB,aAAc,YAAaz0C,KAAKq0U,iBAAkBr0U,MACxEuF,GAAanB,IAAI5D,SAASuL,KAAM,UAAW/L,KAAK4pN,eAAgB5pN,SAI5EosW,EAAU/wW,UAAUy/oB,qBAAuB,SAAUj6oB,GAC3B,kBAAlBA,EAAEurL,aAAoCpsL,KAAKM,OAAO20oB,oBAClDj1oB,KAAKu5Z,kBAMbntD,EAAU/wW,UAAUqB,iBAAmB,WAC/BsD,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAOslF,GAAGi4iB,GAAiB79nB,KAAK89nB,kBAAmB99nB,MACxDA,KAAKM,OAAOslF,GAAGm1jB,GAAmB/6oB,KAAKw0oB,oBAAqBx0oB,MAC5DA,KAAKM,OAAOslF,G5B72Bc,c4B62BkB5lF,KAAK6wd,iBAAkB7wd,MACnEA,KAAKM,OAAOslF,GAAGo1jB,GAA8Bh7oB,KAAK6wd,iBAAkB7wd,MACpEA,KAAKM,OAAOslF,GAAGq1jB,GAA4Bj7oB,KAAKwnF,kBAAmBxnF,MACnEA,KAAKM,OAAOslF,GAAGs1jB,GAAoBl7oB,KAAKm7oB,cAAen7oB,MACvDA,KAAKM,OAAOslF,GAAGk6iB,GAAyB9/nB,KAAK86oB,qBAAsB96oB,MACnEA,KAAKM,OAAOslF,GAAGw8iB,GAA8BpioB,KAAK2rnB,sBAAuB3rnB,MACzEA,KAAKM,OAAOslF,GAAGu3iB,GAAqBn9nB,KAAKsqnB,WAAYtqnB,MACrDA,KAAKo7oB,oBAAsBp7oB,KAAK0onB,YAAYptnB,KAAK0E,MACjDA,KAAKq7oB,uBAAyBr7oB,KAAK2onB,eAAertnB,KAAK0E,MACvDA,KAAKM,OAAO5D,iBAAiBiznB,GAAoB3vnB,KAAKo7oB,qBACtDp7oB,KAAKM,OAAO5D,iBAAiB61nB,GAAuBvynB,KAAKq7oB,wBACzDr7oB,KAAKM,OAAOslF,GAAG6tiB,GAAoBzznB,KAAK6rnB,YAAa7rnB,MACrDA,KAAKM,OAAOslF,GAAG88iB,GAAwB1ioB,KAAKs7oB,cAAet7oB,MAC3DA,KAAKu7oB,8BAKTnvS,EAAU/wW,UAAUuB,oBAAsB,WAClCoD,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAO0lF,IAAI63iB,GAAiB79nB,KAAK89nB,mBACtC99nB,KAAKM,OAAO0lF,IAAI+0jB,GAAmB/6oB,KAAKw0oB,qBACxCx0oB,KAAKM,OAAO0lF,I5Br4Bc,c4Bq4BmBhmF,KAAK6wd,kBAClD7wd,KAAKM,OAAO0lF,IAAIg1jB,GAA8Bh7oB,KAAK6wd,kBACnD7wd,KAAKM,OAAO0lF,IAAIi1jB,GAA4Bj7oB,KAAKwnF,mBACjDxnF,KAAKM,OAAO0lF,IAAIk1jB,GAAoBl7oB,KAAKm7oB,eACzCn7oB,KAAKM,OAAO0lF,IAAI85iB,GAAyB9/nB,KAAK86oB,sBAC9C96oB,KAAKM,OAAO0lF,IAAIo8iB,GAA8BpioB,KAAK2rnB,uBACnD3rnB,KAAKM,OAAO1D,oBAAoB+ynB,GAAoB3vnB,KAAKo7oB,qBACzDp7oB,KAAKM,OAAO1D,oBAAoB21nB,GAAuBvynB,KAAKq7oB,wBAC5Dr7oB,KAAKM,OAAO0lF,IAAIytiB,GAAoBzznB,KAAK6rnB,aACzC7rnB,KAAKM,OAAO0lF,IAAI08iB,GAAwB1ioB,KAAKs7oB,eAC7Ct7oB,KAAKw7oB,iCAETpvS,EAAU/wW,UAAUswnB,sBAAwB,WACnC3rnB,KAAKM,OAAO20oB,oBACbj1oB,KAAKu5Z,kBAGbntD,EAAU/wW,UAAUigpB,cAAgB,WAChCt7oB,KAAK23oB,oBAETvrS,EAAU/wW,UAAUwwnB,YAAc,SAAUhrnB,GACxC,IAAK,IAAI1E,EAAI,EAAGA,EAAI0E,EAAE6xJ,QAAQj2J,OAAQN,WAC1B6D,KAAKg0oB,iBAAiBnzoB,EAAE6xJ,QAAQv2J,GAAG6D,KAAKs3oB,eAC9Ct3oB,KAAK8qoB,kBAEX9qoB,KAAK23oB,oBAGTvrS,EAAU/wW,UAAUuynB,iBAAmB,SAAU/snB,GACvB,kBAAlBA,EAAEurL,aAAoCpsL,KAAKM,OAAO20oB,oBAClDj1oB,KAAKu5Z,kBAIbntD,EAAU/wW,UAAUogpB,eAAiB,WACjC,OAAOz7oB,KAAKM,OAAOq+nB,mBAAmBh8nB,cAAc,sBAExDypW,EAAU/wW,UAAUyioB,kBAAoB,SAAUj9nB,GAC1CA,EAAEswF,SAAWnxF,KAAKu/B,iBAAmB1+B,EAAE4+B,QACvCz/B,KAAK+rG,UAGbqgQ,EAAU/wW,UAAU0wG,OAAS,SAAUlrG,GACnC0E,GAAanB,IAAIpE,KAAKM,OAAOm0C,aAAc,YAAaz0C,KAAK6/G,iBAAkB7/G,OAEnFosW,EAAU/wW,UAAUmsF,kBAAoB,SAAU3mF,GAC9C,GAAIA,EAAEswF,SAAWnxF,KAAKu/B,gBAAtB,CAGWv/B,KAAKM,OACX7C,EAAkBoD,EAAEoC,WAAWyD,OAAyC,WAAhC1G,KAAKw+nB,kBAAkB93nB,OAC5D1G,KAAK2zoB,uBAAuBl3oB,OAAS,GACrCuD,KAAK43oB,qBAEL53oB,KAAK0zoB,mBAAmBj3oB,OAAS,GACjCuD,KAAKi3oB,oBAETj3oB,KAAK+zoB,wBAAyB,EAC9B/zoB,KAAK60oB,aAEJp3oB,EAAkBoD,EAAEoC,WAAW86B,OAC/BtgC,EAAkBoD,EAAEoC,WAAWq2oB,oBAChCt5oB,KAAKu5Z,iBAETv5Z,KAAK07oB,2BACL17oB,KAAK27oB,0BAETvvS,EAAU/wW,UAAUw5oB,UAAY,WACxB70oB,KAAKM,OAAOU,QAAQ2B,cAAc,gBAAgBnB,iBAAiB,gBAAgB/E,SACnFuD,KAAKM,OAAOU,QAAQ2B,cAAc,gBAAgB+B,MAAM4xC,QAAU,SAG1E81T,EAAU/wW,UAAUivnB,WAAa,WAC7BtqnB,KAAKM,OAAO0lF,IAAIm3iB,GAAqBn9nB,KAAKsqnB,YAC1CtqnB,KAAKyiiB,UAAUziiB,KAAKM,OAAOu1oB,mBAE/BzpS,EAAU/wW,UAAUqgpB,yBAA2B,WAC3C17oB,KAAKM,OAAO0lF,IAAIm3iB,GAAqBn9nB,KAAK07oB,0BAC1C,IAAIE,EAAO57oB,KAAKM,OACZu7oB,EAAiBD,EAAK5mB,aAAahulB,OAAO,SAAUy5B,GAAO,MAAoB,aAAbA,EAAI/5D,OACtEm1oB,EAAep/oB,OAAS,IACxBm/oB,EAAKrjB,qBAAsB,EAC3Bv4nB,KAAK87oB,SAAWD,EAAe,GAAG9vnB,MAClC/rB,KAAK8qoB,kBAAoB9qoB,KAAKM,OAAOixD,aAAau5kB,kBAC9CrtoB,EAAkBuC,KAAK8qoB,qBACvB9qoB,KAAK8qoB,kBAAoB9qoB,KAAKM,OAAOkqoB,wBAAwB/toB,QAE7DuD,KAAKu2oB,eACLqF,EAAKpd,kBAAkB93nB,KAAO,WAC9Bk1oB,EAAKhwlB,YAGL5rD,KAAK27oB,yBAGRC,EAAKrjB,sBACNv4nB,KAAK87oB,SAAW,KAChB97oB,KAAK27oB,0BAGbvvS,EAAU/wW,UAAUsgpB,sBAAwB,WACxC,IAAIC,EAAO57oB,KAAKM,OACZN,KAAKM,OAAOk+nB,kBAAkB6H,kBAAoBrmoB,KAAKM,OAAOu1nB,0BAA0Bp5nB,OAAS,GACjGm/oB,EAAK3G,oBAAqB,EAC1Bj1oB,KAAK+7oB,gCAEA/7oB,KAAKM,OAAOu1nB,0BAA0Bp5nB,OAAS,GACpDm/oB,EAAK3G,oBAAqB,EAC1Bj1oB,KAAK+7oB,iCAGLH,EAAK3G,oBAAqB,EAC1Bj1oB,KAAKg0oB,sBAGb5nS,EAAU/wW,UAAU0gpB,6BAA+B,WAC/C,IAAIH,EAAO57oB,KAAKM,OAEhB,GADAN,KAAKs3oB,WAAat3oB,KAAKM,OAAOu1nB,0BAA0B,IACnD+lB,EAAKr/c,sBAAwBv8L,KAAK87oB,WAC9BF,EAAK3G,oBAAoE,IAA9C32oB,OAAOhB,KAAK0C,KAAKg0oB,kBAAkBv3oB,SAC9Dm/oB,EAAK3G,oBAAqB,CAC/B,IAAIz4oB,EAAOwD,KAAKM,OAAO07oB,gBACnBtglB,GAAQ,IAAI2H,IAAQQ,MAAM7jE,KAAK87oB,SAAU,SAAS,GAClDttf,EAAchyJ,EAAKmwU,WAAYjxQ,GAC/B28P,EAAUr4T,KACdA,KAAKM,OAAOqhB,cACZ6sI,EAAY8kC,KAAK,SAAUzyL,GACvBw3T,EAAQs5T,YAAY9wnB,EAAE9B,QACtBs5T,EAAQ4jV,0BACR5jV,EAAQ/3T,OAAOoiB,kBAI3B0pV,EAAU/wW,UAAUs2nB,YAAc,SAAU3vjB,GACxC,IAAK,IAAI7lE,EAAI,EAAGA,EAAI6lE,EAAIvlE,OAAQN,IACxBsB,EAAkBuC,KAAKg0oB,iBAAiBhykB,EAAI7lE,GAAG6D,KAAKs3oB,eAAiBt1kB,EAAI7lE,GAAG6D,KAAK87oB,YACjF97oB,KAAKg0oB,iBAAiBhykB,EAAI7lE,GAAG6D,KAAKs3oB,aAAet1kB,EAAI7lE,GAAG6D,KAAK87oB,WAGrE97oB,KAAKm0oB,oBAAsBnykB,GAE/BoqS,EAAU/wW,UAAU6gpB,gBAAkB,SAAU5tmB,GAC5C,IAAKtuC,KAAKM,OAAO07oB,gBAAgBjkV,WAC7B,GAAIzpR,EACA,IAAK,IAAIlwC,EAAK,EAAGyE,EAAK7C,KAAK2sU,UAAWvuU,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACxD,IAAI5B,EAAOqG,EAAGzE,GACd4B,KAAKg0oB,iBAAiBx3oB,EAAKwD,KAAKs3oB,cAAe,OAInDt3oB,KAAKg0oB,qBAOjB5nS,EAAU/wW,UAAUsxU,QAAU,WAC1B,OAAO3sU,KAAKM,OAAO07oB,gBAAgBxtf,YAAYjrF,WAAWG,MAE9D0oS,EAAU/wW,UAAU4gpB,wBAA0B,WAC1C,IAAI1jX,EAAOv4R,KAAKM,OAAO6/nB,UACvB,GAAI5nW,EAAK97R,OAAS,IAAMuD,KAAKM,OAAO20oB,oBAAsBj1oB,KAAK87oB,UAAW,CAEtE,IAAK,IADD/uS,KACKxpV,EAAI,EAAGA,EAAIg1Q,EAAK97R,OAAQ8mB,IAAK,CAClC,IAAIoxnB,EAAS30oB,KAAK40oB,UAAUr8W,EAAKh1Q,IAC7B4vI,EAAOwhf,EAASA,EAAOn4oB,KAAKwD,KAAKs3oB,YAAc,KACnD,GAAa,OAATnkf,EACA,OAEJ,IAAIgpf,OAAa,EACb1E,EAASl/W,EAAKh1Q,GAAG5gB,cAAc,kBAC/B3C,KAAKg0oB,iBAAiB7gf,IAAuC,UAA7BnzJ,KAAKM,OAAOk4nB,cAA4Bx4nB,KAAKi0oB,aAAa11oB,QAAQ40J,GAAQ,GACzE,YAA7BnzJ,KAAKM,OAAOk4nB,cAA8Bx4nB,KAAKi0oB,aAAa11oB,QAAQ40J,GAAQ,GAC/C,iBAA7BnzJ,KAAKM,OAAOk4nB,eAAoC/6nB,EAAkBuC,KAAK87oB,WAAanH,EAAOn4oB,KAAKwD,KAAK87oB,WACzG/uS,EAAQvoW,KAAKuwB,SAASwjQ,EAAKh1Q,GAAG1Q,aAAa,iBAAkB,KAC7DspoB,GAAa,IAGbA,GAAa,EACTn8oB,KAAK03oB,gBAAkBD,GAAUz3oB,KAAKM,OAAOi4nB,qBAC7C11jB,GAAqB40kB,EAAOp3hB,mBAAoB87hB,IAGxDn8oB,KAAKm3oB,wBAAwB5+W,EAAKh1Q,GAAI44nB,GAE1Cn8oB,KAAKu2oB,eAAiBxpS,EAAQtwW,OAAS,EAAIuD,KAAKyiiB,UAAU11L,EAAQ,IAAI,GAAQ/sW,KAAKo2oB,WAAWrpS,GAE9F/sW,KAAKM,OAAOi4nB,qBAAuBv4nB,KAAKM,OAAOkqoB,wBAAwB/toB,OAAS,GAChFuD,KAAK23oB,oBAGbvrS,EAAU/wW,UAAUqtnB,YAAc,SAAU7nnB,GACxC,GAAsB,SAAlBA,EAAEurL,aAA0BpsL,KAAKM,OAAO20oB,mBAAoB,CAC5D,IAAImH,EAAap8oB,KAAKM,OAAOU,QAAQ2B,cAAc,uBACnD,IAAKlF,EAAkB2+oB,GAAa,CAChC,IAAI17kB,EAAM76D,EAAQu2oB,EAAY,gBAC9B,GAAI17kB,EAAK,CACiC,WAAlC1gE,KAAKM,OAAO2gE,aAAaljC,OACzB2iC,EAAM1gE,KAAKM,OAAOU,QAAQ2B,cAAc,kBAE5C,IAAIgyoB,EAAS30oB,KAAK40oB,UAAUl0kB,GAC5B,IAAKi0kB,EACD,OAEJ30oB,KAAKg0oB,iBAAiBW,EAAOn4oB,KAAKwD,KAAKs3oB,aAAe3C,EAAO77kB,WAAasjlB,EAAW5poB,aAGrFxS,KAAKk0oB,eAAiBkI,EAAW5poB,WAKjD45V,EAAU/wW,UAAUstnB,eAAiB,SAAU9nnB,GAC3C,IAAId,EAAQC,KACZ,GAAsB,SAAlBa,EAAEurL,aAA0BpsL,KAAKM,OAAO20oB,mBAAoB,CAC5D,GAAiB,QAAbp0oB,EAAEs1D,QAAoBn2D,KAAKk0oB,eAAgB,CAC3C,IAAIS,EAAS30oB,KAAKM,OAAOy3oB,oBAAoB/3oB,KAAKM,OAAO6/nB,UAAUt/nB,EAAEkkjB,aAAalyiB,aAAa,aAC/F7S,KAAKg0oB,iBAAiBW,EAAOn4oB,KAAKwD,KAAKs3oB,aAAe3C,EAAO77kB,WAAa94D,KAAKk0oB,eAEnFl0oB,KAAKi8oB,0BAEa,WAAlBp7oB,EAAEurL,aAA4BpsL,KAAKM,OAAO20oB,qBAC1Cp0oB,EAAErE,KAAK6E,QAAQjC,QAAQ,SAAU5C,GACxBiB,EAAkBjB,EAAKuD,EAAMu3oB,cAC9Bv3oB,EAAMw3oB,oBAAoB/6oB,EAAKuD,EAAMu3oB,eAG7Ct3oB,KAAK23oB,mBACL33oB,KAAK8qoB,kBAAoB9qoB,KAAKM,OAAOixD,aAAau5kB,oBAG1D1+R,EAAU/wW,UAAUghpB,YAAc,YACzBr8oB,KAAKM,OAAOi8L,sBAAwBv8L,KAAKM,OAAO20oB,oBACjDj1oB,KAAKi8oB,2BAGb7vS,EAAU/wW,UAAUihpB,qBAAuB,SAAUH,GACjD,IAAII,EAAYv8oB,KAAKipoB,cACjBuT,EAAWx8oB,KAAKM,OAAOU,QAAQ2B,cAAc,eAWjD,GAVA3C,KAAK03oB,cAAgB13oB,KAAKy7oB,iBACtBU,GAAcn8oB,KAAKM,OAAOkqoB,wBAAwB/toB,QAClDuD,KAAKm2oB,kBAAkBoG,EAAUjb,mBAAmB,GAAIib,EAAUjb,mBAAmBthoB,KAAKM,OAAOkqoB,wBAAwB/toB,SACzHuD,KAAKM,OAAOk4nB,aAAe,UAG3Bx4nB,KAAKu5Z,iBACLv5Z,KAAKM,OAAOk4nB,aAAe,WAE/Bx4nB,KAAKi0oB,gBACDj0oB,KAAKM,OAAO20oB,mBAAoB,CAEhC,IAAK,IADD18W,EAAOv4R,KAAKM,OAAO6/nB,UACdhkoB,EAAI,EAAGA,EAAIo8R,EAAK97R,OAAQN,IAC7B6D,KAAKm3oB,wBAAwB5+W,EAAKp8R,GAAIggpB,GAET,YAA7Bn8oB,KAAKM,OAAOk4nB,cACZx4nB,KAAKk8oB,iBAAgB,GACrBl8oB,KAAKm0oB,oBAAsBn0oB,KAAKM,OAAO07oB,gBAAgBjkV,WAAa/3T,KAAKm0oB,wBAEvC,UAA7Bn0oB,KAAKM,OAAOk4nB,eACjBx4nB,KAAKk8oB,iBAAgB,GACrBl8oB,KAAKm0oB,oBAAuBn0oB,KAAKM,OAAO07oB,gBAAgBjkV,WAAsC/3T,KAAKm0oB,oBAA9Bn0oB,KAAK2sU,UAAUtrU,SAG5F,IAAK5D,EAAkB++oB,GAAW,CAE9B35kB,GADiB25kB,EAAS75oB,cAAc,uBACR09G,mBAAoB87hB,KAG5D/vS,EAAU/wW,UAAUmme,eAAiB,SAAU90K,GAC3C,IAAI3sT,EAAQC,KACRy8oB,EAAWz8oB,KAAK08oB,kBAAkBhwV,GAClCp+Q,EAAqB,UAAbmumB,EACK,iBAAbA,IACAnumB,EAAQtuC,KAAKM,OAAOkqoB,wBAAwBpumB,KAAK,SAAU5/B,GACvD,OAAOA,EAAKuD,EAAMu3oB,cAAev3oB,EAAMi0oB,oBAG/Ch0oB,KAAKs8oB,sBAAsBhumB,GAC3BtuC,KAAKmH,OAAS,KACVnH,KAAKM,OAAOkqoB,wBAAwB/toB,OAAS,GAC7CuD,KAAK23oB,mBAET33oB,KAAK28oB,sBAAsBjwV,GAAWp+Q,IAE1C89T,EAAU/wW,UAAUqhpB,kBAAoB,SAAU14oB,GAC9C,IAAIH,EAAUG,EAAMA,EAAIq8G,mBAAmBv8G,UACvC9D,KAAKy7oB,iBAAiBp7hB,mBAAmBv8G,UAc7C,OAZID,EAAQM,SAAS,WACR,QAEJN,EAAQM,SAAS,aACb,UAEJN,EAAQM,SAAS,UACb,eAGA,QAIjBioW,EAAU/wW,UAAUuhpB,YAAc,SAAUlwV,GACxC,IAAIvlT,EAAStB,EAAQ7F,KAAK03oB,cAAe,cACzC13oB,KACK8zoB,oBAAqB,EAC1B,IAAIpC,EAAS38mB,SAAS5tB,EAAOkN,cAAcxB,aAAa,iBAAkB,IACtE7S,KAAKM,OAAO20oB,oBAAsBj1oB,KAAKM,OAAOU,QAAQQ,iBAAiB,eAAe/E,OAAS,KAC7Fi1oB,EAEN1xoB,KAAK68oB,wBAAwBnL,EAAQ38mB,SAAS5tB,EAAO0L,aAAa,iBAAkB,KACpF7S,KAAK88oB,0BAA0Bj3oB,EAAQsB,EAAQ,WAC/CnH,KAAK23oB,mBACL33oB,KAAK8zoB,oBAAqB,EAC1B9zoB,KAAK28oB,sBAAsBjwV,EAAUA,EAASrsM,mBAAmBv8G,UAAUK,SAAS,aAExFioW,EAAU/wW,UAAUyhpB,0BAA4B,SAAUp8kB,GACtD,GAAiC,UAA7B1gE,KAAKM,OAAOk4nB,cAAyD,YAA7Bx4nB,KAAKM,OAAOk4nB,aAA4B,CAChF,IAAImc,EAAS30oB,KAAK40oB,UAAUl0kB,GACxByyF,EAAOwhf,GAAUA,EAAOn4oB,KAAOm4oB,EAAOn4oB,KAAKwD,KAAKs3oB,YAAc,KAClE,IAAKnkf,EACD,OAEAnzJ,KAAKi0oB,aAAa11oB,QAAQ40J,GAAQ,EAClCnzJ,KAAKi0oB,aAAazvoB,KAAK2uJ,GAGvBnzJ,KAAKi0oB,aAAa5rnB,OAAOroB,KAAKi0oB,aAAa11oB,QAAQ40J,GAAO,KAItEi5M,EAAU/wW,UAAUshpB,sBAAwB,SAAUjwV,EAAUyvV,GAC5Dn8oB,KAAKM,OAAOkmB,Q5BtxCQ,kB4BuxChBhU,QAAS2poB,EAAYzI,mBAAoB1zoB,KAAKM,OAAOg4nB,wBACrDnxnB,OAAQulT,IAEP1sT,KAAKM,OAAOk/lB,SACbx/lB,KAAK03oB,cAAgB,OAG7BtrS,EAAU/wW,UAAU0hpB,uBAAyB,SAAU9qoB,GACnD,GAAIjS,KAAKM,OAAOi4nB,qBAAuBv4nB,KAAKM,OAAOi8L,uBAAyBv8L,KAAKM,OAAO07oB,gBAAgBjkV,WACpG,GAAiC,UAA7B/3T,KAAKM,OAAOk4nB,aAA0B,CACtCx4nB,KAAK0zoB,sBACL,IAAK,IAAIl3oB,EAAO,EAAGA,EAAOwD,KAAK2sU,UAAUlwU,OAAQD,IAC7CwD,KAAK0zoB,mBAAmBlvoB,KAAKhI,QAGhC,GAAiC,YAA7BwD,KAAKM,OAAOk4nB,aACjBx4nB,KAAK0zoB,2BAGL,GAAIzhoB,GAA4E,UAAnEjS,KAAKM,OAAO8goB,cAAcnvnB,GAAOY,aAAa,iBAA8B,CACrF,IAAImqoB,EAAch9oB,KAAK0zoB,mBAAmBn1oB,QAAQ0T,GAClDjS,KAAK0zoB,mBAAmBrrnB,OAAO20nB,EAAa,KAM5D5wS,EAAU/wW,UAAUs8oB,iBAAmB,SAAU1loB,EAAOsX,GACpD,GAAIvpB,KAAKM,OAAOi4nB,oBAAqB,CACjC,IAAI0kB,EAAa3+oB,OAAOhB,KAAK0C,KAAKg0oB,kBAAkBv3oB,OAKpD,GAJKuD,KAAKM,OAAO20oB,qBACbgI,EAAaj9oB,KAAK4zoB,gBAAgBn3oB,OAClCuD,KAAK8qoB,kBAAoB9qoB,KAAKM,OAAOkqoB,wBAAwB/toB,QAE7DuD,KAAKy7oB,iBAAkB,CACvB,IAAIyB,EAAUl9oB,KAAKy7oB,iBAAiBp7hB,mBACpCh8G,GAAa64oB,IAAW,UAAW,SAAU,cACzCD,IAAej9oB,KAAK8qoB,mBAAqB9qoB,KAAK8qoB,mBAAsB9qoB,KAAKM,OAAOi8L,uBAC5Ev8L,KAAKM,OAAOk0nB,cAAgBx0nB,KAAKM,OAAO07oB,gBAAgBjkV,YAAcklV,IAAej9oB,KAAK2sU,UAAUlwU,QACxGkH,GAAUu5oB,IAAW,YACjB3znB,GACAvpB,KAAKipoB,cAAc7+a,aAAa,MAAM,GAAM,GAEhDpqN,KAAKM,OAAOk4nB,aAAe,SAEP,IAAfykB,GAAmE,IAA/Cj9oB,KAAKM,OAAOkqoB,wBAAwB/toB,QAC7DkH,GAAUu5oB,IAAW,cACjB3znB,GACAvpB,KAAKipoB,cAAc7+a,aAAa,MAAM,GAAO,GAEjDpqN,KAAKM,OAAOk4nB,aAAe,UACR,IAAfykB,GAAmE,IAA/Cj9oB,KAAKM,OAAOkqoB,wBAAwB/toB,OACxDkH,GAAUu5oB,EAAQ7ooB,gBAAiB,wBAGnChQ,GAAa64oB,EAAQ7ooB,gBAAiB,0BAI1C1Q,GAAUu5oB,IAAW,WACrBl9oB,KAAKM,OAAOk4nB,aAAe,iBAE3Bx4nB,KAAKM,OAAOi8L,sBAAyBv8L,KAAKM,OAAOk0nB,aAAgBx0nB,KAAKM,OAAO07oB,gBAAgBjkV,YAC7F/3T,KAAK+8oB,uBAAuB9qoB,MAK5Cm6V,EAAU/wW,UAAU8jH,aAAe,SAAUt+G,GACzC,IAAIsG,EAAStG,EAAEsG,OACfnH,KAAK8zoB,mBAAqBjzoB,EAAEgnB,SAAW7nB,KAAK+zoB,uBAC5C/zoB,KAAK6zoB,oBAAsBhzoB,EAAE41G,SAC7Bz2G,KAAKm9oB,kBAAkBt8oB,GACvB,IAAIu8oB,GAAY,EAChBp9oB,KAAKk5M,cAAe,EACpB,IAAIwzG,EACAoF,EAAYj+Q,GAAa1sC,EAAQ,sBAMrC,GALI2qT,GAAaA,EAAUtwT,iBAAiB,oCAAoC/E,OAAS,IACrFiwT,EAAWoF,EAAUnvT,cAAc,0BACnCy6oB,GAAY,IAEhBj2oB,EAAS0sC,GAAa1sC,EAAQ,eACfA,EAAOkN,cAAcvQ,UAAUK,SAAS,WAAanE,KAAKM,OAAOk+nB,kBAAkB6e,cAAiBD,EAAW,CAK1H,GAJIp9oB,KAAKM,OAAOi4nB,sBACZv4nB,KAAK8zoB,oBAAqB,GAE9B9zoB,KAAKmH,OAASA,EACT1J,EAAkBivT,GAUlB,CACD,IAAIglV,EAAS38mB,SAAS5tB,EAAOkN,cAAcxB,aAAa,iBAAkB,IACtE7S,KAAKM,OAAO20oB,oBAAsBj1oB,KAAKM,OAAOU,QAAQQ,iBAAiB,eAAe/E,OAAS,KAC7Fi1oB,EAEN1xoB,KAAK68oB,wBAAwBnL,EAAQ38mB,SAAS5tB,EAAO0L,aAAa,iBAAkB,KAChF7S,KAAKM,OAAOi4nB,sBACZv4nB,KAAK88oB,0BAA0Bj3oB,EAAQsB,EAAQ,WAC/CnH,KAAK23oB,yBAjBT33oB,KAAK03oB,cAAgBhrV,EACjBA,EAAS5oT,UAAUK,SAAS,oBAC5BnE,KAAKwhe,eAAe90K,IAGpB1sT,KAAK48oB,YAAYlwV,GACjB1sT,KAAKmH,OAAStB,EAAQsB,EAAQ,eAcjCnH,KAAKM,OAAOi4nB,sBAAuB/snB,GAAQkb,UAAa1mB,KAAKu2oB,eAC9Dv2oB,KAAKo3d,UAAUv2d,GAGvBb,KAAK8zoB,oBAAqB,EAC1B9zoB,KAAK6zoB,qBAAsB,EAC3B7zoB,KAAKk5M,cAAe,GAExBkzJ,EAAU/wW,UAAU8hpB,kBAAoB,SAAUt8oB,GAC9C,IAAIsG,EAAStG,EAAEsG,OACXtB,EAAQsB,EAAQ,kBAAoBtG,EAAEsG,OAAOrD,UAAUK,SAAS,cAChE0B,EAAQsB,EAAQ,gBACZA,EAAOrD,UAAUK,SAAS,iBACrBgD,EAAOrD,UAAUK,SAAS,kBAK3BgD,EAAOrD,UAAUS,OAAO,iBACxBvE,KAAK+zoB,wBAAyB,EAC9B/zoB,KAAKM,OAAOU,QAAQ2B,cAAc,gBAAgB+B,MAAM4xC,QAAU,SANlEnvC,EAAOrD,UAAUM,IAAI,iBACrBpE,KAAK+zoB,wBAAyB,IAUtC/zoB,KAAKM,OAAOU,QAAQ2B,cAAc,gBAAgB+B,MAAM4xC,QAAU,QAG1E81T,EAAU/wW,UAAU+7d,UAAY,SAAUv2d,GACtCy9D,GAAkBt+D,KAAKM,OAAOU,QAAQ2B,cAAc,gBAAiB9B,EAAG,yCAClEb,KAAKu2oB,gBAAkBv2oB,KAAK4zoB,gBAAgBn3oB,QAAUuD,KAAKM,OAAO28nB,mBAAqB,EAAI,IACtFj9nB,KAAK2zoB,uBAAuBl3oB,OAAS,GAAK,iBAAmB,MAE5E2vW,EAAU/wW,UAAUwhpB,wBAA0B,SAAUp8W,EAAU5H,IACxD74R,KAAK8zoB,qBAAuB9zoB,KAAK6zoB,qBAAwB7zoB,KAAKu2oB,eAC3Dv2oB,KAAKw6oB,WACNx6oB,KAAKyiiB,UAAUhiQ,GAAU,GAE7BzgS,KAAK6iiB,YAAapiQ,SAAUA,EAAU5H,UAAWA,IAAa,IAEzD74R,KAAK6zoB,qBACV7zoB,KAAKm2oB,kBAAkBh5oB,EAAY6C,KAAKw1oB,cAAgB/0W,EAAWzgS,KAAKw1oB,aAAc/0W,GACtFzgS,KAAKk5oB,mBAAmB/7oB,EAAY6C,KAAKq4oB,YAAe53W,SAAUA,EAAU5H,UAAWA,GAAc74R,KAAKq4oB,WAAa53W,SAAUA,EAAU5H,UAAWA,MAGtJ74R,KAAK02oB,oBAAoBj2W,IACzBzgS,KAAK25oB,sBAAuBl5W,SAAUA,EAAU5H,UAAWA,MAE/D74R,KAAKw6oB,WAAY,GAErBpuS,EAAU/wW,UAAU8/oB,cAAgB,SAAUt6oB,GAC1C,GAAIb,KAAKM,OAAOo+nB,YAAc79nB,EAAE4Z,UAAUqR,UAAYjrB,EAAE6toB,MACpD,GAAyB,YAArB7toB,EAAEkuoB,QAAQ54kB,OACNn2D,KAAKM,OAAO60d,eACZt0d,EAAEivoB,OAA+B,UAAtBjvoB,EAAEG,QAAQgC,QAGrBnC,EAAEivoB,OAA+B,OAAtBjvoB,EAAEG,QAAQgC,aAIzB,GAAyB,cAArBnC,EAAEkuoB,QAAQ54kB,OAAwB,CAClC,IAAI8ilB,EAAO3hnB,OAAOz2B,EAAEG,QAAQqT,cAAcxB,aAAa,kBACvDhS,EAAEivoB,OAAkB,IAATmJ,MAGc,aAArBp4oB,EAAEkuoB,QAAQ54kB,SACVt1D,EAAEivoB,QAAS,GAK3B,IAAI9/kB,EAAQhwD,KAAKM,OAAO28nB,oBAAwBp8nB,EAAE4Z,UAAUqR,UAAkC,OAAtBjrB,EAAEG,QAAQgC,SAAoBnC,EAAEivoB,SAClGjvoB,EAAE4Z,UAAU+tG,WAAmC,OAAtB3nH,EAAEG,QAAQgC,YAAuBnC,EAAE4Z,UAAUw4nB,cAAsC,OAAtBpyoB,EAAEG,QAAQgC,aAC7FnC,EAAE6toB,OAA8B,UAArB7toB,EAAEkuoB,QAAQ54kB,SAAyBt1D,EAAE4Z,UAAUqR,UAAYjrB,EAAEivoB,QAC5EjvoB,EAAE4Z,UAAU+tG,YAAc3nH,EAAE4Z,UAAUw4nB,iBAAoBpyoB,EAAE6toB,OAA8B,UAArB7toB,EAAEkuoB,QAAQ54kB,QAChFmnlB,EAAgBz8oB,EAAE4Z,UAAUqR,UAAkC,OAAtBjrB,EAAEG,QAAQgC,UAAqB6C,EAAQhF,EAAEG,QAAS,iBACrFH,EAAE6toB,OAA8B,UAArB7toB,EAAEkuoB,QAAQ54kB,QAC9B,GAAKt1D,EAAE6toB,QAAS1+kB,EAAhB,CAMA,IAAIntD,EAAKhC,EAAE4Z,UAAU+tG,UAAY3nH,EAAE4Z,UAAUsyV,QAAUlsW,EAAEksW,QAAStsE,EAAW59R,EAAG,GAAIg2R,EAAYh2R,EAAG,GAC/Fg/B,EAAO7hC,KAAKkC,MAAMovoB,iBACtB,GAAItxoB,KAAKM,OAAOo+nB,WAAY,CACxB,GAAI79nB,EAAE4Z,UAAUqR,WAAmC,OAAtBjrB,EAAEG,QAAQgC,SAAoB6C,EAAQhF,EAAEG,QAAS,eAAgB,CAC1F,IAAIu8oB,EAAQv9oB,KAAKM,OAAOu/nB,iBAAiBl9nB,cAAc,SAASwiE,kBAChEs7N,GAAY88W,EACZ17mB,EAAK4+P,SAAW5+P,EAAK4+P,SAAW5+P,EAAK4+P,SAAW88W,EAAQ,UAGxD98W,GAAYzgS,KAAKM,OAAOo+nB,WACxB78lB,EAAK4+P,SAA6B,IAAlB5+P,EAAK4+P,UAAmBhjS,EAAkBokC,EAAK4+P,UAAqD,KAAzC5+P,EAAK4+P,SAAWzgS,KAAKM,OAAOo+nB,WAE3G,GAAI1+nB,KAAKM,OAAO28nB,mBAAoB,CAChC,IAAIzwe,EAAOl1H,OAAOz2B,EAAEG,QAAQ6R,aAAa,kBACzCgvB,EAAKg3P,UAAYh3P,EAAKg3P,UAAah3P,EAAKg3P,YAAcA,EAAYrsI,EAAOA,EAAO,EAAK,KACrFqsI,EAAYrsI,GAGpB,KAAI8wf,IAAwE,KAAtD,YAAa,UAAU/+oB,QAAQsC,EAAEkuoB,QAAQ54kB,SAAuC,UAArBt1D,EAAEkuoB,QAAQ54kB,QACvFsqO,IAAa5+P,EAAK4+P,UAAY5H,IAAch3P,EAAKg3P,WADrD,CAKA,OADA74R,KAAKk5M,cAAe,EACZr4M,EAAEkuoB,QAAQ54kB,QACd,IAAK,YACL,IAAK,UACL,IAAK,QACL,IAAK,aACDn2D,KAAKw9oB,eAAe/8W,EAAU5H,GAC9B,MACJ,IAAK,aACL,IAAK,YACD74R,KAAKy9oB,kBAAkBh9W,EAAU5H,GACjC,MACJ,IAAK,YACL,IAAK,UACD74R,KAAK09oB,aAAaj9W,EAAU5H,GAC5B,MACJ,IAAK,YACL,IAAK,aACD74R,KAAK29oB,uBAAuBl9W,EAAU5H,GACtC,MACJ,IAAK,OACL,IAAK,MACDA,EAAiC,QAArBh4R,EAAEkuoB,QAAQ54kB,OAAmBn2D,KAAKu5oB,gBAAgB94W,GAAY,EAC1EzgS,KAAK49oB,gBAAgBn9W,EAAU5H,GAC/B,MACJ,IAAK,WACL,IAAK,UACD74R,KAAK69oB,oBAAoBp9W,EAAU5H,GACnC,MACJ,IAAK,SACD74R,KAAKu5Z,iBACL,MACJ,IAAK,YACDv5Z,KAAK89oB,YACL,MACJ,IAAK,QACD99oB,KAAK+9oB,oBAAoBl9oB,EAAEG,SAGnChB,KAAKk5M,cAAe,QAlEZlpJ,IAAUhwD,KAAKM,OAAOi4nB,qBACtBv4nB,KAAKu5Z,kBAwEjBntD,EAAU/wW,UAAUyipB,UAAY,WACxB99oB,KAAKq1oB,cAAgBr1oB,KAAKu2oB,eAC1Bv2oB,KAAKm2oB,kBAAkB,EAAGn2oB,KAAKM,OAAO6/nB,UAAU1joB,OAAS,GAEzDuD,KAAKm4oB,eAAiBn4oB,KAAKu2oB,eAC3Bv2oB,KAAKk5oB,oBAAqBz4W,SAAU,EAAG5H,UAAW,IAAO4H,SAAUzgS,KAAKM,OAAO6/nB,UAAU1joB,OAAS,EAAGo8R,UAAW74R,KAAKM,OAAO00nB,aAAav4nB,OAAS,KAG1J2vW,EAAU/wW,UAAU0ipB,oBAAsB,SAAU52oB,GAC5CA,EAAOrD,UAAUK,SAAS,qBAC1BnE,KAAK03oB,cAAgBvwoB,EACrBnH,KAAKwhe,eAAexhe,KAAK03oB,gBAGrBvwoB,EAAOrD,UAAUK,SAAS,mBAC1BnE,KAAK03oB,cAAgBvwoB,EACrBnH,KAAK48oB,YAAY58oB,KAAK03oB,iBAIlCtrS,EAAU/wW,UAAUmipB,eAAiB,SAAU/8W,EAAU5H,GACrD,IAAIm7V,EAAOh0nB,KAAKM,OACZN,KAAKM,OAAOi4nB,qBAAoD,UAA7Bv4nB,KAAKM,OAAOk4nB,eAC/Cx4nB,KAAKs8oB,sBAAqB,GAC1Bt8oB,KAAK03oB,cAAgB,MAErB13oB,KAAKq1oB,cACDr1oB,KAAKM,OAAOo+nB,WACZ1+nB,KAAKyiiB,UAAUhiQ,GAAU,GACzBzgS,KAAKg+oB,YAAYhqB,EAAK6hB,mBAO1B71oB,KAAKm4oB,cACLn4oB,KAAK6iiB,YAAapiQ,SAAUA,EAAU5H,UAAWA,IAAa,IAGtEuzE,EAAU/wW,UAAU2ipB,YAAc,SAAUv9W,GACxC,KAAIA,EAAW,GAAf,CAGKzgS,KAAKmH,SACNnH,KAAKmH,OAASnH,KAAKM,OAAO6/nB,UAAU,GAAG/lnB,SAASpa,KAAKM,OAAOm0nB,cAAc12jB,QAAQthE,QAAU,IAEhG,IAAIk1oB,EAAS58mB,SAAS/0B,KAAKmH,OAAO0L,aAAa,iBAAkB,IAC7DoyD,EAAUjlE,KAAKM,OAAO28nB,mBAGlBj9nB,KAAKmH,OAFT89D,GACI0skB,GAAU1skB,EAENjlE,KAAKkpoB,gBAAgB3H,qBAAqB9gW,GAAUj/R,iBAAiB,cAAcmwoB,EAAS1skB,GAOtFjlE,KAAKkpoB,gBAAgB9H,cAAc3gW,GAAUj/R,iBAAiB,cAAcmwoB,GAE9F3xoB,KAAKu1N,aAAav1N,KAAKmH,UAE3BilW,EAAU/wW,UAAUoipB,kBAAoB,SAAUh9W,EAAU5H,GAC7C74R,KAAKM,OACZN,KAAKm4oB,eACLn4oB,KAAK6iiB,YAAapiQ,SAAUA,EAAU5H,UAAWA,IAAa,GAC9D74R,KAAKu1N,aAAav1N,KAAKmH,UAG/BilW,EAAU/wW,UAAUuipB,gBAAkB,SAAUn9W,EAAU5H,GAClD74R,KAAKm4oB,aACLn4oB,KAAK6iiB,YAAapiQ,SAAUA,EAAU5H,UAAWA,IAAa,GAG9D74R,KAAKu1N,aAAav1N,KAAKM,OAAO83oB,iBAAiB33W,EAAU5H,KAQjEuzE,EAAU/wW,UAAUqipB,aAAe,SAAUj9W,EAAU5H,GACxC74R,KAAKM,OAChBN,KAAK6zoB,qBAAsB,EACvB7zoB,KAAKq1oB,cAAgBr1oB,KAAKu2oB,gBACrBp5oB,EAAY6C,KAAKw1oB,cAKlBx1oB,KAAKyiiB,UAAU,GAAG,IAJlBziiB,KAAKm2oB,kBAAkBn2oB,KAAKw1oB,aAAc/0W,GAC1CzgS,KAAKg+oB,YAAYv9W,KAMrBzgS,KAAKm4oB,eAAiBn4oB,KAAKu2oB,eAC3Bv2oB,KAAKk5oB,mBAAmBl5oB,KAAKq4oB,YAAe53W,SAAU,EAAG5H,UAAW,IAAO4H,SAAUA,EAAU5H,UAAWA,IAE9G74R,KAAK6zoB,qBAAsB,GAE/BznS,EAAU/wW,UAAUsipB,uBAAyB,SAAUl9W,EAAU5H,GAClD74R,KAAKM,OAChBN,KAAK6zoB,qBAAsB,EAC3B7zoB,KAAKk5oB,mBAAmBl5oB,KAAKq4oB,WAAa53W,SAAUA,EAAU5H,UAAWA,IACzE74R,KAAK6zoB,qBAAsB,GAE/BznS,EAAU/wW,UAAUwipB,oBAAsB,SAAUp9W,EAAU5H,GACtD74R,KAAKq1oB,cACLr1oB,KAAKyiiB,UAAUhiQ,GAAU,GACzBzgS,KAAKu1N,aAAav1N,KAAKM,OAAO83oB,iBAAiB33W,EAAU5H,KAEzD74R,KAAKm4oB,cACLn4oB,KAAK6iiB,YAAapiQ,SAAUA,EAAU5H,UAAWA,IAAa,IAGtEuzE,EAAU/wW,UAAU07oB,uBAAyB,SAAUr2kB,EAAKmsP,EAAO/3K,GAE/D,IAAK,IADD70I,KACK7B,EAAK,EAAGA,EAAKY,UAAUvC,OAAQ2B,IACpC6B,EAAK7B,EAAK,GAAKY,UAAUZ,GAE7B,GAAIsiE,EAAK,CACL,IAAIoB,KAAWzgE,MAAMC,KAAKo/D,EAAIl/D,iBAAiB,eAC3CyhE,EAAOvC,EAAI/9D,cAAc,yBAA2B+9D,EAAI/9D,cAAc,sBACtEsgE,GACAnB,EAAMt9D,KAAKy+D,GAEfpB,GAAuBtmE,WAAM,GAASumE,EAAO+qP,GAAOtyS,OAAOta,IAE/DD,KAAKipoB,cAAc7+a,aAAa1pJ,EAAMA,EAAI7tD,aAAa,YAAc,KAAMg6S,EAAO/3K,IAEtFs3N,EAAU/wW,UAAUg6oB,UAAY,WAC5B,MAAuC,QAAhCr1oB,KAAKw+nB,kBAAkBzgmB,MAAkD,SAAhC/9B,KAAKw+nB,kBAAkBzgmB,MAE3EquU,EAAU/wW,UAAU88oB,WAAa,WAC7B,MAAuC,SAAhCn4oB,KAAKw+nB,kBAAkBzgmB,MAAmD,SAAhC/9B,KAAKw+nB,kBAAkBzgmB,MAE5EquU,EAAU/wW,UAAUk7oB,YAAc,WAC9B,MAAuC,WAAhCv2oB,KAAKw+nB,kBAAkB93nB,MAElC0lW,EAAU/wW,UAAU4toB,YAAc,WAI9B,OAHIxroB,EAAkBuC,KAAKkpoB,mBACvBlpoB,KAAKkpoB,gBAAkBlpoB,KAAKu0oB,QAAQtL,YAAYnb,GAAWqb,UAExDnpoB,KAAKkpoB,iBAMhB98R,EAAU/wW,UAAU4ipB,mBAAqB,WASrC,OAPKj+oB,KAAKw+nB,kBAAkB6H,iBAKTrmoB,KAAKm0oB,oBAJLn0oB,KAAKM,OAAO49oB,gBAAgBl3mB,OAAO,SAAU05B,GAAO,OAAOA,EAAI5H,aACzElhC,IAAI,SAAUm5C,GAAK,OAAOA,EAAEv0E,QAOzC4vW,EAAU/wW,UAAUkgpB,0BAA4B,WAC5Cv7oB,KAAKM,OAAOslF,GAAGoljB,GAAkBhroB,KAAKuqnB,UAAWvqnB,MACjDA,KAAKm+oB,oBAAsBn+oB,KAAKq8oB,YAAY/gpB,KAAK0E,MACjDA,KAAKM,OAAO5D,iBAAiB0goB,GAAkBp9nB,KAAKm+oB,qBACpDn+oB,KAAKM,OAAOslF,GAAGu3iB,GAAqBn9nB,KAAK07oB,yBAA0B17oB,MACnEA,KAAKo+oB,mBAAqBp+oB,KAAKq+oB,sBAAsB/ipB,KAAK0E,MAC1DA,KAAKM,OAAO5D,iBAAiB61nB,GAAuBvynB,KAAKo+oB,oBACzDp+oB,KAAKM,OAAOslF,GAAG04jB,GAAct+oB,KAAKm/G,aAAcn/G,OAEpDosW,EAAU/wW,UAAUmgpB,6BAA+B,WAC/Cx7oB,KAAKM,OAAO0lF,IAAIgljB,GAAkBhroB,KAAKuqnB,WACvCvqnB,KAAKM,OAAO1D,oBAAoBwgoB,GAAkBp9nB,KAAKm+oB,qBACvDn+oB,KAAKM,OAAO1D,oBAAoB21nB,GAAuBvynB,KAAKo+oB,oBAC5Dp+oB,KAAKM,OAAO0lF,IAAIs4jB,GAAct+oB,KAAKm/G,eAEvCitP,EAAU/wW,UAAUkvnB,UAAY,SAAU1pnB,GAChB,kBAAlBA,EAAEurL,aAAoCpsL,KAAKM,OAAO20oB,qBAClDj1oB,KAAKs0oB,WAAY,EACjBt0oB,KAAKu5Z,iBACLv5Z,KAAKs0oB,WAAY,IAGzBloS,EAAU/wW,UAAUgjpB,sBAAwB,SAAUx9oB,GAC5B,SAAlBA,EAAEurL,aAA0BpsL,KAAKM,OAAO20oB,oBACxCj1oB,KAAKi8oB,2BAGN7vS,KC/yDPlxS,GAAwB,WAKxB,SAASA,EAAO56D,GACZN,KAAKM,OAASA,EACdN,KAAKtD,mBA+FT,OAtFAw+D,EAAO7/D,UAAU+zJ,OAAS,SAAUmvf,GAChC,IAAIvqB,EAAOh0nB,KAAKM,OAChBi+oB,EAAe9gpB,EAAkB8gpB,GAAgB,GAAKA,EAClDx9kB,GAAgBizjB,GAChBA,EAAKjmnB,OAAOywoB,IAAuBj4oB,SAAUvG,KAAMvE,QAASuE,KAAKovJ,OAAQ8rF,KAAMqja,IAG/EA,IAAiBvqB,EAAKe,eAAe13nB,KACrC22nB,EAAKe,eAAe13nB,IAAMkhpB,EAAarxoB,WACvC8mnB,EAAKpokB,YAEA5rD,KAAKy+oB,eACVzqB,EAAK9hkB,WAMbgJ,EAAO7/D,UAAUqB,iBAAmB,WAC5BsD,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAOslF,GAAGq1jB,GAA4Bj7oB,KAAKwnF,kBAAmBxnF,MACnEA,KAAKM,OAAOslF,GAAG84jB,GAAuB1+oB,KAAK2+oB,iBAAkB3+oB,MAC7DA,KAAKM,OAAOslF,GAAGguiB,GAAgB5znB,KAAKsS,QAAStS,MAC7CA,KAAKo+oB,mBAAqBp+oB,KAAK6wd,iBAAiBv1d,KAAK0E,MACrDA,KAAKM,OAAO5D,iBAAiB61nB,GAAuBvynB,KAAKo+oB,sBAK7DljlB,EAAO7/D,UAAUuB,oBAAsB,WAC/BoD,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAO0lF,IAAIi1jB,GAA4Bj7oB,KAAKwnF,mBACjDxnF,KAAKM,OAAO0lF,IAAI04jB,GAAuB1+oB,KAAK2+oB,kBAC5C3+oB,KAAKM,OAAO0lF,IAAI4tiB,GAAgB5znB,KAAKsS,SACrCtS,KAAKM,OAAO1D,oBAAoB21nB,GAAuBvynB,KAAKo+oB,sBAOhEljlB,EAAO7/D,UAAUiX,QAAU,WACvBtS,KAAKpD,uBAKTs+D,EAAO7/D,UAAUmsF,kBAAoB,SAAU3mF,GACvCA,EAAEswF,SAAWnxF,KAAKu/B,kBAGjB9hC,EAAkBoD,EAAEoC,WAAW5F,KAMhC2C,KAAKM,OAAOyN,OAAO29nB,IACft/c,YAAa,YAAa1lL,KAAMipnB,KANpC3vnB,KAAKM,OAAOyN,OAAO29nB,IACft/c,YAAa,YAAa1lL,KAAMipnB,GAAoB4uB,aAAcv+oB,KAAKM,OAAOy0nB,eAAe13nB,QAczG69D,EAAO7/D,UAAUsjpB,iBAAmB,SAAU99oB,GAC1Cb,KAAKM,OAAOkmB,QAAQ+rmB,GAAuB7znB,EAAOmC,GAC9C09oB,aAAcv+oB,KAAKM,OAAOy0nB,eAAe13nB,IAAK+uL,YAAa,YAAa1lL,KAAM6rnB,OAGtFr3jB,EAAO7/D,UAAUw1d,iBAAmB,SAAUhwd,GAC1Cb,KAAKy+oB,cAAkC,cAAlB59oB,EAAEurL,aAM3BlxH,EAAO7/D,UAAUkkC,cAAgB,WAC7B,MAAO,UAEJ27B,KCtGP0jlB,GAA0B,WAK1B,SAASA,EAASt+oB,GACdN,KAAKM,OAASA,EA0ElB,OAlEAs+oB,EAASvjpB,UAAU4oH,KAAO,SAAUwrgB,EAAYovB,GAC5C,IAAIvhpB,EAAO0C,KAAK8+oB,gBAAgBrvB,GAC5B1xjB,EAAU/9D,KAAKg1nB,WAAW13nB,EAAMuhpB,GACpC7+oB,KAAKM,OAAOyN,OAAO68nB,IAAyBz5iB,OAAQ,SACpDpzB,EAAQ3+D,QAAQ,SAAUpC,GACtBA,EAAMw6B,SAAU,IAEpBx3B,KAAK29nB,WAAW5/jB,IAQpB6glB,EAASvjpB,UAAUkmF,KAAO,SAAUkuiB,EAAYsvB,GAC5C,IAAIzhpB,EAAO0C,KAAK8+oB,gBAAgBrvB,GAC5B1xjB,EAAU/9D,KAAKg1nB,WAAW13nB,EAAMyhpB,GACpC/+oB,KAAKM,OAAOyN,OAAO68nB,IAAyBz5iB,OAAQ,SACpDpzB,EAAQ3+D,QAAQ,SAAUpC,GACtBA,EAAMw6B,SAAU,IAEpBx3B,KAAK29nB,WAAW5/jB,IAEpB6glB,EAASvjpB,UAAUyjpB,gBAAkB,SAAUzhpB,GAQ3C,MANmB,iBAARA,GACMA,GAGDA,GAIpBuhpB,EAASvjpB,UAAU25nB,WAAa,SAAU13nB,EAAM0hpB,GAC5C,IAAIj/oB,EAAQC,KASZ,OARck9D,GAAqB5/D,EAAM,SAAUD,EAAK4U,GACpD,OAAOirD,GAAqBn9D,EAAMO,OAAO00nB,aAAc,SAAUn3mB,EAAM5L,GACnE,GAAI4L,EAAKmhoB,KAAc3hpB,EACnB,OAAOwgB,IAGZ,MAUX+goB,EAASvjpB,UAAUsioB,WAAa,SAAU5/jB,GAClCgD,GAAgB/gE,KAAKM,QACrBN,KAAKM,OAAOyN,OAAOywoB,IACfj4oB,SAAUvG,KAAMvE,QAASuE,KAAK29nB,WAC9BziZ,KAAMn9K,KAIdA,EAAUtgE,EAAkBsgE,GAAW/9D,KAAKM,OAAO00nB,aAAej3jB,EAC9D/9D,KAAKM,OAAO2+oB,gBAAkBj/oB,KAAKM,OAAO29oB,qBAAqBxhpB,QAC/DuD,KAAKM,OAAOi5Z,iBAEhBv5Z,KAAKM,OAAOyN,OAAO2vnB,GAAgC3/jB,KAEhD6glB,KC7EPM,GAAwB,WAKxB,SAASA,EAAO5+oB,GACZN,KAAKm/oB,cAAgB,EAErBn/oB,KAAKo/oB,gBAAmB1yoB,IAAK,EAAGF,KAAM,GACtCxM,KAAKq/oB,cAAe,EACpBr/oB,KAAKM,OAASA,EACdN,KAAKmioB,aAAe,IAAIuK,GAAmBpsoB,GAC3CN,KAAKtD,mBAmVT,OA7UAwipB,EAAO7jpB,UAAUkkC,cAAgB,WAC7B,MAAO,UAKX2/mB,EAAO7jpB,UAAUsjI,SAAW,WACxB3+H,KAAKM,OAAOU,QAAQ0D,MAAMsR,MAAQzT,EAAWvC,KAAKM,OAAO0V,OACrDhW,KAAKM,OAAOg/oB,eAAiBt/oB,KAAKM,OAAOg/oB,cAAc3rR,SACvD3zX,KAAKM,OAAOg/oB,cAAc3rR,QAAQ3yX,SAClChB,KAAKM,OAAOg/oB,cAAc3rR,QAAQxlF,mBAM1C+wW,EAAO7jpB,UAAU6yT,UAAY,WACzB,IAAIqxV,EAAa,EACbnlnB,EAAUp6B,KAAKM,OAAOm0C,aAAa73B,WACnC5c,KAAKM,OAAOo+nB,YAAqC,SAAvB1+nB,KAAKM,OAAOyV,QACtCwpoB,EACIv/oB,KAAKM,OAAOq+nB,mBAAmBh8nB,cAAc,SAAS+uC,aAC1DtX,EAAQ11B,MAAMqR,OAASxT,EAAWvC,KAAKM,OAAOyV,OAASwpoB,IAGvDnlnB,EAAQ11B,MAAMqR,OAASxT,EAAWvC,KAAKM,OAAOyV,QAElD/V,KAAKw/oB,eAAeplnB,IAKxB8knB,EAAO7jpB,UAAUokpB,WAAa,WAC1B,IAAIrlnB,EAAUp6B,KAAKM,OAAOq+nB,mBACtB/+jB,EAAcs/kB,EAAOv/kB,oBAAsB3/D,KAAK0/oB,eAChDC,EAAW3/oB,KAAK4/oB,mBACpBxlnB,EAAQxd,WAAWlY,MAAMi7oB,EAASr7mB,QAAUs7B,EAAc,EAAI,MAAQ,MACtExlC,EAAQ11B,MAAMi7oB,EAASvmlB,SAAWwG,EAAc,EAAIA,EAAc,KAAO,OAK7Es/kB,EAAO7jpB,UAAUwkpB,cAAgB,SAAUp1gB,GACvC,IAAIk1gB,EAAW3/oB,KAAK4/oB,iBAAiBn1gB,GACrCzqI,KAAKM,OAAOq+nB,mBAAmB/hnB,WAAWlY,MAAMi7oB,EAASr7mB,QAAU,GACnEtkC,KAAKM,OAAOq+nB,mBAAmB/hnB,WAAWvI,cAAc3P,MAAMi7oB,EAASvmlB,SAAW,IAQtF8llB,EAAO7jpB,UAAU62D,QAAU,WACvB,GAA2B,SAAvBlyD,KAAKM,OAAOyV,OAAhB,CAGA,IAAIqkB,EAAUp6B,KAAKM,OAAOm0C,aAC1Bz0C,KAAKM,OAAOU,QAAQ0D,MAAMqR,OAAS,OACnC,IAAIA,EAAS/V,KAAKmioB,aAAagL,kBAAkB/ymB,GACjDA,EAAQ11B,MAAMqR,OAAS,eAAiBA,EAAS,QAErDmpoB,EAAO7jpB,UAAUqkpB,aAAe,WAI5B,MAAgB,YADFl0oB,GAAQmb,KAAK8Q,KAEhB,GAEJ,GAKXynnB,EAAO7jpB,UAAUqB,iBAAmB,WAC5BsD,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAOslF,GAAG8kiB,GAAS1qnB,KAAKukB,WAAYvkB,MACzCA,KAAKM,OAAOslF,GAAG4kiB,GAAcxqnB,KAAKukB,WAAYvkB,MAC9CA,KAAKM,OAAOslF,GAAG6kiB,GAAUzqnB,KAAKwnF,kBAAmBxnF,QAKrDk/oB,EAAO7jpB,UAAUuB,oBAAsB,WAC/BoD,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAO0lF,IAAI0kiB,GAAS1qnB,KAAKukB,YAC9BvkB,KAAKM,OAAO0lF,IAAIwkiB,GAAcxqnB,KAAKukB,YACnCvkB,KAAKM,OAAO0lF,IAAIykiB,GAAUzqnB,KAAKwnF,qBAEnC03jB,EAAO7jpB,UAAUykpB,gBAAkB,SAAUC,GACzC,IAAIhgpB,EAAQC,KACRgB,EAAU++oB,EACVj0nB,EAAW9qB,EAAQ8C,UAAUK,SAAS,mBAC1C,OAAO,SAAUtD,GACb,GAA6C,OAAzCd,EAAMq6B,QAAQz3B,cAAc,WAAqB5C,EAAMO,OAAO0/oB,qBAAlE,CAGA,IAAI74oB,EAAStG,EAAEsG,OACXqF,EAAOrF,EAAO6E,WAEdi0oB,GADS94oB,EAAOy4D,YACLz4D,EAAOrD,UAAUK,SAAS,qBACrCpE,EAAMq/oB,eAAe5yoB,OAASA,GAIlCxL,EAAQgL,WAAaQ,EACjByzoB,IACAlgpB,EAAM6kF,OAAO54E,WAAaQ,GAE9BzM,EAAMq/oB,eAAe5yoB,KAAOA,EAC5BzM,EAAMO,OAAOyN,O/B4CL,U+B5CsBvB,KAAMA,KARhCzM,EAAMq/oB,eAAe1yoB,IAAOof,EAAsC3kB,EAAOgF,UAAlCpM,EAAMq/oB,eAAe1yoB,OAWxEwyoB,EAAO7jpB,UAAU6kpB,sBAAwB,SAAUH,GAC/C,IAAIhgpB,EAAQC,KACRgB,EAAU++oB,EACd,OAAO,SAAUl/oB,GACb,GAA6C,OAAzCd,EAAMq6B,QAAQz3B,cAAc,SAAhC,CAGA,IACI+J,EADS7L,EAAEsG,OACEgF,UACbpM,EAAMq/oB,eAAe1yoB,MAAQA,IAGjC1L,EAAQmL,UAAYO,EACpB3M,EAAMq/oB,eAAe1yoB,IAAMA,EACvB3M,EAAMO,OAAO0mF,gBAKzBk4jB,EAAO7jpB,UAAU8kpB,cAAgB,SAAUJ,GACvC,IAAIhgpB,EAAQC,KACRgB,EAAU++oB,EACd,OAAO,SAAUl/oB,GACb,GAA6C,OAAzCd,EAAMq6B,QAAQz3B,cAAc,SAAhC,CAGA,IAAI+J,EAAM1L,EAAQmL,WAA6B,IAAhBtL,EAAEu/oB,UAA6B,GAAXv/oB,EAAEw2a,OAAcx2a,EAAEw2a,QACjEt3a,EAAMq/oB,eAAe1yoB,MAAQA,IAGjC7L,EAAE2kB,iBACFzlB,EAAMO,OAAOm0C,aAAa9xC,cAAc,oBAAoBwJ,UAAYO,EACxE1L,EAAQmL,UAAYO,EACpB3M,EAAMq/oB,eAAe1yoB,IAAMA,MAGnCwyoB,EAAO7jpB,UAAUglpB,cAAgB,SAAUN,GACvC,IAAIhgpB,EAAQC,KACRgB,EAAU++oB,EACd,OAAO,SAAUl/oB,GACb,GAAsB,UAAlBA,EAAEw/U,YAAN,CAGA,IAAI//B,EACA2sV,EACAqT,EAASvgpB,EAAMwgpB,WAAW1/oB,GAC1B6L,EAAM1L,EAAQmL,WAAapM,EAAMugpB,OAAOtzoB,EAAIszoB,EAAOtzoB,GACnDR,EAAOxL,EAAQgL,YAAcjM,EAAMugpB,OAAOvzoB,EAAIuzoB,EAAOvzoB,GACzD,GAAIhN,EAAMO,OAAOq+nB,mBAAmBx6nB,SAAStD,EAAEsG,QAAS,CAGpD,GAFA8loB,EAAOltoB,EAAMO,OAAO28nB,mBAChBl9nB,EAAMO,OAAOq+nB,mBAAmBh8nB,cAAc,oBAAsB5C,EAAMO,OAAOq+nB,mBAAmB/hnB,WACpG7c,EAAMq/oB,eAAe5yoB,OAASA,GAASA,EAAO,GAAMygoB,EAAKrtkB,YAAcqtkB,EAAK5/mB,YAAe7gB,EAC3F,OAEJ3L,EAAE2kB,iBACFynnB,EAAKjhoB,WAAaQ,EAClBxL,EAAQgL,WAAaQ,EACrBzM,EAAMugpB,OAAOvzoB,EAAIuzoB,EAAOvzoB,EACxBhN,EAAMq/oB,eAAe5yoB,KAAOA,MAE3B,CAED,GADA8zS,EAAOvgT,EAAMO,OAAOm0C,aAAa9xC,cAAc,oBAC3C5C,EAAMq/oB,eAAe1yoB,MAAQA,GAAQA,EAAM,GAAM4zS,EAAKmR,aAAenR,EAAKhzR,aAAgB5gB,EAC1F,OAEJ7L,EAAE2kB,iBACF86R,EAAKn0S,UAAYO,EACjB1L,EAAQmL,UAAYO,EACpB3M,EAAMugpB,OAAOtzoB,EAAIszoB,EAAOtzoB,EACxBjN,EAAMq/oB,eAAe1yoB,IAAMA,MAIvCwyoB,EAAO7jpB,UAAUmlpB,UAAY,WACzB,IAAIzgpB,EAAQC,KACZ,OAAO,SAAUa,GACS,UAAlBA,EAAEw/U,cAGNtgV,EAAMugpB,OAASvgpB,EAAMwgpB,WAAW1/oB,MAGxCq+oB,EAAO7jpB,UAAUklpB,WAAa,SAAU1/oB,GACpC,IAAIy/oB,GAAWvzoB,EAAG,EAAGC,EAAG,GASxB,OARInM,EAAEszC,SAAWtzC,EAAEszC,QAAQ13C,QACvB6jpB,EAAOvzoB,EAAIlM,EAAEszC,QAAQ,GAAGroC,MACxBw0oB,EAAOtzoB,EAAInM,EAAEszC,QAAQ,GAAGjoC,QAGxBo0oB,EAAOvzoB,EAAIlM,EAAEiL,MACbw0oB,EAAOtzoB,EAAInM,EAAEqL,OAEVo0oB,GAEXpB,EAAO7jpB,UAAUkpB,WAAa,WAC1B,IAAIxkB,EAAQC,KACZ,GAAIA,KAAKq/oB,aAAc,CACnB,IAAIp6kB,EAAUjlE,KAAKM,OAAO28nB,mBAC1Bj9nB,KAAKo6B,QAAUp6B,KAAKM,OAAOm0C,aAAa73B,WACxC5c,KAAK4kF,OAAS5kF,KAAKM,OAAOq+nB,mBAAmB/hnB,WAC7C,IAAIyinB,EAAQr/nB,KAAKo6B,QAAQz3B,cAAc,qBACnCy8nB,EAAQp/nB,KAAKo6B,QAAQz3B,cAAc,oBACnCsqoB,EAAOjtoB,KAAK4kF,OAAOjiF,cAAc,oBACjC3C,KAAKM,OAAOo+nB,aACZn5nB,GAAanB,IAAI6gE,EAAUgokB,EAAOjtoB,KAAK4kF,OAAQ,yBAA0B5kF,KAAKwgpB,YAAaxgpB,MAC3FuF,GAAanB,IAAI6gE,EAAUgokB,EAAOjtoB,KAAK4kF,OAAQ,wBAAyB5kF,KAAKqgpB,cAAcp7kB,EAAUo6jB,EAAQr/nB,KAAKo6B,SAAUp6B,OAE5HilE,GACA1/D,GAAanB,IAAIi7nB,EAAO,SAAUr/nB,KAAK8/oB,gBAAgB7S,GAAOjtoB,MAC9DuF,GAAanB,IAAIi7nB,EAAO,SAAUr/nB,KAAKkgpB,sBAAsB9gB,GAAQp/nB,MACrEuF,GAAanB,IAAIg7nB,EAAO,SAAUp/nB,KAAKkgpB,sBAAsB7gB,GAAQr/nB,MACrEuF,GAAanB,IAAI6ooB,EAAM,SAAUjtoB,KAAK8/oB,gBAAgBzgB,GAAQr/nB,MAC9DuF,GAAanB,IAAIg7nB,EAAO,QAASp/nB,KAAKmgpB,cAAc9gB,GAAQr/nB,MAC5DuF,GAAanB,IAAIg7nB,EAAO,yBAA0Bp/nB,KAAKwgpB,YAAaxgpB,MACpEuF,GAAanB,IAAIg7nB,EAAO,wBAAyBp/nB,KAAKqgpB,cAAchhB,GAAQr/nB,QAG5EuF,GAAanB,IAAIpE,KAAKo6B,QAAS,SAAUp6B,KAAK8/oB,gBAAgB9/oB,KAAK4kF,QAAS5kF,MAC5EuF,GAAanB,IAAIpE,KAAK4kF,OAAQ,SAAU5kF,KAAK8/oB,gBAAgB9/oB,KAAKo6B,SAAUp6B,OAE5EA,KAAKM,OAAOo/D,WAAWjjE,QACvB8I,GAAanB,IAAIpE,KAAKM,OAAOmgpB,mBAAmB7joB,WAAY,SAAU5c,KAAK8/oB,gBAAgB9/oB,KAAKo6B,SAAUp6B,MAE9GA,KAAKkyD,UACLlyD,KAAKq/oB,cAAe,EAExB,IACIjimB,EACA2gW,EACAzwX,EAHA2yC,EAAQjgE,KAAKM,OAAOysoB,kBAIxBjwkB,GAAkB,WACd1f,EAAQr9C,EAAM6kF,OAAO54E,WACrB+xY,EAAU99U,EAAMwxP,aAChBnkS,EAAevtB,EAAMO,OAAOm0C,aAAannB,cAC1C,WACMvtB,EAAMO,OAAOi8L,uBACVwhN,EAAUzwX,IACV3pB,EAASs8D,EAAMz+D,iBAAiB,oBAAqB,iBACjDzB,EAAMO,OAAO28nB,oBACbt5nB,EAAS5D,EAAMO,OAAOm0C,aAAa9xC,cAAc,qBAAqBnB,iBAAiB,oBAAqB,mBAG/GzB,EAAMO,OAAOo+nB,WAAa,GAAK3+nB,EAAMO,OAAOikoB,cAAgB,IAAMxkoB,EAAM6kF,OAAOjiF,cAAc,oBAC9F5C,EAAM6kF,OAAOjiF,cAAc,oBAAoBqJ,WAAajM,EAAMq/oB,eAAe5yoB,KAGjFzM,EAAM6kF,OAAO54E,WAAajM,EAAMq/oB,eAAe5yoB,KAEnDzM,EAAMq6B,QAAQpuB,WAAajM,EAAMq/oB,eAAe5yoB,KAChDzM,EAAMq6B,QAAQjuB,UAAYpM,EAAMq/oB,eAAe1yoB,KAE9C3M,EAAMO,OAAOw2nB,6BACd/2nB,EAAMq6B,QAAQpuB,WAAaoxC,GAE3Br9C,EAAMO,OAAOikoB,gBACbxkoB,EAAM6kF,OAAOjiF,cAAc,oBAAoBqJ,WAC3CjM,EAAMq6B,QAAQz3B,cAAc,qBAAqBqJ,cAG7DhM,KAAKM,OAAO0/oB,sBAAuB,GAKvCd,EAAO7jpB,UAAUukpB,iBAAmB,SAAUn1gB,GAC1C,IAAI+0K,KACAtsS,EAAYzV,EAAkBgtI,GAAOzqI,KAAKM,OAAO4S,UAAYu3H,EAGjE,OAFA+0K,EAAIl7Q,OAASpxB,EAAY,kBAAoB,mBAC7CssS,EAAIpmP,QAAUlmD,EAAY,cAAgB,eACnCssS,GAEX0/V,EAAO7jpB,UAAUmkpB,eAAiB,SAAUplnB,GACpCp6B,KAAKM,OAAO28nB,mBACZ7imB,EAAQz3B,cAAc,qBAAqB+B,MAAMoV,UAAmC,SAAvB9Z,KAAKM,OAAOyV,OAAoB,OAAS,SAGtGqkB,EAAQ11B,MAAMoV,UAAmC,SAAvB9Z,KAAKM,OAAOyV,OAAoB,OAAS,UAG3EmpoB,EAAO7jpB,UAAUmsF,kBAAoB,SAAU3mF,GACvCA,EAAEswF,SAAWnxF,KAAKu/B,kBAGtBv/B,KAAKy/oB,aACLz/oB,KAAKq/oB,cAAe,EACO,SAAvBr/oB,KAAKM,OAAOyV,QACZ/V,KAAK6/oB,gBAET7/oB,KAAKukB,aACLvkB,KAAKkuT,YACLluT,KAAK2+H,aAKTughB,EAAO7jpB,UAAUiX,QAAU,WACvBtS,KAAKpD,sBAELoD,KAAK6/oB,gBACLx7oB,GAAarE,KAAKM,OAAOq+nB,mBAAmB/hnB,YAAa,mBACzDvY,GAAarE,KAAKM,OAAOm0C,aAAa73B,YAAa,aAEnD5c,KAAKM,OAAOm0C,aAAa73B,WAAWlY,MAAMqR,OAAS,GAEnD/V,KAAKM,OAAOU,QAAQ0D,MAAMsR,MAAQ,GAElCzQ,GAAahB,OAAOvE,KAAKM,OAAOm0C,aAAa73B,WAAY,SAAU5c,KAAK8/oB,kBAO5EZ,EAAOv/kB,kBAAoB,WACvB,OAAOA,MAEJu/kB,KChWPx+J,GAAuB,WAKvB,SAASA,EAAMpgf,EAAQqqS,GACnB3qS,KAAK0gpB,cAAe,EACpB1gpB,KAAK2gpB,SAAW,aAChB3gpB,KAAKM,OAASA,EACVN,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAOslF,GAAGu3iB,GAAqBn9nB,KAAKwqnB,aAAalvnB,KAAK0E,OAC3DA,KAAKM,OAAO5D,iBAAiBiznB,GAAoB3vnB,KAAK0onB,YAAYptnB,KAAK0E,OACvEA,KAAKM,OAAOslF,GAAG0kjB,GAAgBtqoB,KAAK0qnB,QAAQpvnB,KAAK0E,OACjDA,KAAK2qS,aAAeA,GA0KxB,OAlKA+1M,EAAMrlf,UAAU0F,MAAQ,WACpBf,KAAK4gpB,kBACL5gpB,KAAKswb,UAAYz0b,OAAO6F,KAAK,GAAI,QAAS,UAAY7F,OAAOonH,YAAc,UAAYpnH,OAAOmnH,WAAa,cAC3GhjH,KAAKswb,UAAU3iW,OAAO,EAAG,GACzB3tF,KAAKswb,UAAUz2G,SAASC,OAAOC,WAAYD,OAAOE,cAEtD0mK,EAAMrlf,UAAUqvnB,QAAU,WAClB1qnB,KAAK6gpB,eACL7gpB,KAAKwqnB,gBAGb9pI,EAAMrlf,UAAUqtnB,YAAc,WACtB1onB,KAAK6gpB,gBACL7gpB,KAAK0gpB,cAAe,IAG5BhgK,EAAMrlf,UAAUulpB,gBAAkB,WAC9B,IAAI5sB,EAAOh0nB,KAAKM,OAEZwgpB,KACA9/oB,EAAUG,EAAc,OACxBmC,GAAItD,KAAKM,OAAOU,QAAQsC,GAAK,SAAUD,UAAW2wnB,EAAKhznB,QAAQqC,UAAY,kBAE/E7C,SAASuL,KAAKpK,YAAYX,GAC1B,IAAK,IAAI5C,EAAK,EAAGyE,EAAK69e,EAAMqgK,cAAe3ipB,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC7D,IAAIf,EAAMwF,EAAGzE,GAET0ipB,EAAezjpB,GADP,YAARA,EACsB8hE,GAAsB60jB,EAAK32nB,IAEpC,gBAARA,EAC2C,gBAA1B2C,KAAKM,OAAO0gpB,UAGZjilB,GAAoBi1jB,EAAK32nB,IAGvD,IAAI4jpB,EAAY,IAAIC,GAAKJ,GACzBG,EAAU5qmB,SAASr1C,GACnBigpB,EAAUjhpB,KAAK2gpB,WAAY,EAC3BM,EAAUz6nB,QAAUwtmB,EAAKxtmB,SAE7Bk6d,EAAMrlf,UAAUmvnB,aAAe,WAC3B,GAAIxqnB,KAAK6gpB,cAAe,CACpB,IAAI7sB,EAAOh0nB,KAAKM,OAChB,GAAIN,KAAK0gpB,aAEL,YADA1gpB,KAAKihpB,YAGT,IAAIhhpB,GACAmsL,YAAa,QACbprL,QAASgznB,EAAKhznB,QACdmgpB,aAAcntB,EAAK+Y,kBAAkBvroB,iBAAiB,4BACtDq3B,QAAQ,GAKZ,GAHK74B,KAAK0gpB,cACN1sB,EAAKxtmB,QhCrCI,cgCqCwBvmB,GAEjCA,EAAK44B,OAEL,YADAxzB,EAAO2unB,EAAKhznB,SAGNhB,KAAK0gpB,cACX1gpB,KAAKihpB,cAIjBvgK,EAAMrlf,UAAU4lpB,UAAY,WACxB,IAAIjtB,EAAOh0nB,KAAKM,OAMhB,GAJI0znB,EAAKQ,aAAkC,gBAAnBR,EAAKgtB,YACzBhtB,EAAKhznB,QAAQ2B,cAAc,gBAAgB+B,MAAM4xC,QAAU,QAG3C,SAAhB09kB,EAAKj+mB,OAAmB,CACxB,IAAI4poB,EAAW3/oB,KAAK2qS,aAAai1W,mBAC7BxhB,EAAapK,EAAKhznB,QAAQ2B,cAAc,cACxC2/nB,EAAYtO,EAAKhznB,QAAQ2B,cAAc,iBAC3Cy7nB,EAAW15nB,MAAMqR,OAAS,OAC1BqonB,EAAW15nB,MAAMoV,UAAY,OAC7BwonB,EAAU59nB,MAAMi7oB,EAASvmlB,SAAW,GACpCkpkB,EAAUn9nB,kBAAkBT,MAAMi7oB,EAASr7mB,QAAU,GAGrD0vlB,EAAKlN,gBACAkN,EAAKS,cAAc12jB,QAAQthE,QAI5BuD,KAAKohpB,eAAeptB,EAAKS,cAAc12jB,QAAQthE,OAAQu3nB,EAAKhznB,SAC5DwsB,GAAcwmmB,EAAKhznB,QAAS,uBAC5BwsB,GAAcwmmB,EAAKhznB,QAAS,yBAC5BwsB,GAAcwmmB,EAAKhznB,QAAS,iBAC5BwsB,GAAcwmmB,EAAKhznB,QAAS,wBAP5BgznB,EAAKhznB,QAAQ2B,cAAc,oBAAoB+B,MAAM4xC,QAAU,QAWvE09kB,EAAKhznB,QAAQ2B,cAAc,cAAc+B,MAAMqV,UAAY,SAEvDi6mB,EAAK7+J,gBAA+C,cAA7B6+J,EAAK/F,eAAevnnB,OAC3CstnB,EAAKhznB,QAAQ2B,cAAc,gBAAgB+B,MAAM4xC,QAAU,QAG/D,IAAI+qmB,EAAartB,EAAKhznB,QAAQQ,iBAAiB,gBAC3C6/oB,EAAW5kpB,OAAS,IACpB4kpB,EAAW,GAAGv9oB,UAAUM,IAAI,eAC5Bi9oB,EAAW,GAAGv9oB,UAAUS,OAAO,gBAE/ByvnB,EAAKh0nB,KAAK2gpB,WACVt7oB,EAAO2unB,EAAKhznB,SAEhBgznB,EAAKhznB,QAAQ8C,UAAUS,OAAO,gBAC9BvE,KAAKswb,UAAYrvb,EAAY+ynB,EAAKhznB,QAAShB,KAAKswb,WAChD0jM,EAAKh0nB,KAAK2gpB,WAAY,EACtB,IAAI1gpB,GACAe,QAASgznB,EAAKhznB,SAElBgznB,EAAKxtmB,QAAQ86nB,GAAsBrhpB,IAEvCygf,EAAMrlf,UAAU+lpB,eAAiB,SAAUzzc,EAAO3sM,GAG9C,IAAK,IAFDugpB,EAAevgpB,EAAQQ,iBAAiB,mBACxCk0R,EAAU6rX,EAAa5zc,EAAQ,GAAG96L,aAAa,WAC1C1W,EAAI,EAAGA,EAAIolpB,EAAa9kpB,OAAQN,IACrColpB,EAAaplpB,GAAGqH,aAAa,UAAWkyR,GAGvC,IADD8rX,EAAYxgpB,EAAQQ,iBAAiB,YACzC,IAASrF,EAAI,EAAGA,EAAIqlpB,EAAU/kpB,OAAQN,IAClC,IAAK,IAAIonB,EAAI,EAAGA,EAAIoqL,EAAOpqL,IACvBi+nB,EAAUrlpB,GAAGoV,WAAWgS,GAAG7e,MAAM4xC,QAAU,QAIvDoqc,EAAMrlf,UAAUwlpB,YAAc,WAC1B,OAAO7gpB,KAAKM,OAAOU,QAAQsC,GAAG/E,QAAQ,UAAY,GAAKyB,KAAKM,OAAON,KAAK2gpB,WAO5EjgK,EAAMrlf,UAAUiX,QAAU,WAClBtS,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAO0lF,IAAIm3iB,GAAqBn9nB,KAAKwqnB,aAAalvnB,KAAK0E,OAC5DA,KAAKM,OAAO1D,oBAAoB+ynB,GAAoB3vnB,KAAK0onB,YAAYptnB,KAAK0E,OAC1EA,KAAKM,OAAO0lF,IAAIskjB,GAAgBtqoB,KAAK0qnB,QAAQpvnB,KAAK0E,SAMtD0gf,EAAMrlf,UAAUkkC,cAAgB,WAC5B,MAAO,SAEXmhd,EAAMqgK,eACF,aAAc,gBAAiB,iBAAkB,oBAAqB,kBAAmB,eACzF,gBAAiB,YAAa,UAAW,kBAAmB,aAAc,iBAAkB,eAC5F,6BAA8B,iBAAkB,YAChD,gBAAiB,SAAU,SAAU,eAAgB,YAAa,QAAS,cAC3E,YAAa,cAAe,eAAgB,mBAAoB,chC7I/C,cgC8IGO,IAEjB5gK,KCjMPp2Z,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAU5D6knB,GAAiC,SAAUt2jB,GAE3C,SAASs2jB,IACL,IAAI1hpB,EAAmB,OAAXorF,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAEhE,OADAD,EAAMi6B,cACCj6B,EAuEX,OA3EAuqF,GAAUm3jB,EAAiBt2jB,GAS3Bs2jB,EAAgBpmpB,UAAUgmE,aAAe,WACrC,IAAIgmjB,EAAiB,IAAIvM,GACrB96mB,KAAKg8B,SAAWh8B,KAAKg8B,OAAO0lC,UAAY1hE,KAAKg8B,OAAOA,UACpDh8B,KAAKgonB,SAAWX,EAAe5ljB,kBAAkBzhE,KAAKg8B,UAM9DylnB,EAAgBpmpB,UAAU0snB,aAAe,WACrC,OAAO/nnB,KAAKgonB,UAKhBy5B,EAAgBpmpB,UAAUktH,YAAc,SAAUr5G,QAC/B,IAAXA,IAAqBA,WACG/T,IAAxB6E,KAAK6mH,iBACL7mH,KAAKg6B,WAAWn8B,EAAam7mB,GAAUA,GAASkiB,WAAclse,GAAIhgJ,GAAQhP,KAAK6mH,eAAgB33G,GAC3F8c,SAAU,wBAEe7wB,IAA7B6E,KAAKg6nB,sBACLh6nB,KAAKg6B,WAAWn8B,EAAam7mB,GAAUA,GAASoiB,gBAAmBpse,GAAIhgJ,GAAQhP,KAAKg6nB,oBAAqB9qnB,GACrG8c,SAAU,6BAEgB7wB,IAA9B6E,KAAKi6nB,uBACLj6nB,KAAKg6B,WAAWn8B,EAAam7mB,GAAUA,GAASsiB,kBAAqBtse,GAAIhgJ,GAAQhP,KAAKi6nB,qBAAsB/qnB,GACxG8c,SAAU,0BAMtBy1nB,EAAgBpmpB,UAAUqmpB,YAAc,SAAUh7oB,GAC9C,OAAO1G,KAAKg6B,WAAWn8B,EAAam7mB,GAAUtymB,KAKlD+6oB,EAAgBpmpB,UAAUsmpB,oBAAsB,SAAUr3oB,GACtDtK,KAAKgH,cAAcsD,GAAM,IAE7BugF,IACI3jF,KACDu6oB,EAAgBpmpB,UAAW,YAAQ,GACtCwvF,IACI3jF,KACDu6oB,EAAgBpmpB,UAAW,aAAS,GACvCwvF,IACI3jF,KACDu6oB,EAAgBpmpB,UAAW,kBAAc,GAC5CwvF,IACI3jF,KACDu6oB,EAAgBpmpB,UAAW,cAAU,GACxCwvF,IACI3jF,KACDu6oB,EAAgBpmpB,UAAW,sBAAkB,GAChDwvF,IACI3jF,KACDu6oB,EAAgBpmpB,UAAW,2BAAuB,GACrDwvF,IACI3jF,KACDu6oB,EAAgBpmpB,UAAW,4BAAwB,GACtDwvF,IACI3jF,KACDu6oB,EAAgBpmpB,UAAW,uBAAmB,GAC1CompB,GACTzilB,IAKE4ilB,GAA8B,SAAUz2jB,GAExC,SAASy2jB,IACL,OAAkB,OAAXz2jB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAK/D,OAPAsqF,GAAUs3jB,EAAcz2jB,GAIxBN,IACIxiF,KAAeo5oB,KAChBG,EAAavmpB,UAAW,eAAW,GAC/BumpB,GACT5ilB,IC9GE6ilB,GAA2B,WAK3B,SAASA,EAAUvhpB,GACfN,KAAK8hpB,YAAc,GACnB9hpB,KAAK+hpB,UAAW,EAChB/hpB,KAAKM,OAASA,EACdN,KAAKtD,mBAgMT,OA3LAmlpB,EAAUxmpB,UAAUqB,iBAAmB,WAC/BsD,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAOslF,GAAGu3iB,GAAqBn9nB,KAAKsqnB,WAAYtqnB,MACrDA,KAAKM,OAAOslF,GAAGo8jB,GAAmBhipB,KAAK2/G,eAAgB3/G,QAK3D6hpB,EAAUxmpB,UAAUuB,oBAAsB,WAClCoD,KAAKM,OAAO0mF,aAGhBhnF,KAAKM,OAAO0lF,IAAIg8jB,GAAmBhipB,KAAK2/G,iBAE5CkiiB,EAAUxmpB,UAAUivnB,WAAa,WAC7BtqnB,KAAKM,OAAO0lF,IAAIm3iB,GAAqBn9nB,KAAKsqnB,YAC1CtqnB,KAAKiipB,kBAAoB9gpB,EAAc,YACnCkC,UAAW,cACXE,OAAQ,aACRE,OAAS4yE,SAAU,OAAQ26C,SAAU,KAAM0C,aAAc,eAE7D1zH,KAAKM,OAAOU,QAAQW,YAAY3B,KAAKiipB,oBAEzCJ,EAAUxmpB,UAAUskH,eAAiB,SAAU9+G,GAC1B,cAAbA,EAAEs1D,OACFn2D,KAAKT,OAEa,mBAAbsB,EAAEs1D,QACPn2D,KAAKT,MAAK,IAGlBsipB,EAAUxmpB,UAAU6mpB,YAAc,SAAUC,GACxC,GAAyC,KAArCtmpB,OAAO4qhB,eAAev5gB,WAAmB,CACzC,IAAIgwnB,EAAWl9nB,KAAKM,OAAO28nB,mBAC3Bj9nB,KAAKiipB,kBAAkBjlpB,MAAQgD,KAAK8hpB,YAAc,GAClD,IAAInhB,OAAQ,EACRpoW,EAAOv4R,KAAKM,OAAO6/nB,UAIvB,GAHIjD,IACAyD,EAAQ3goB,KAAKM,OAAOkhoB,sBAEmB,SAAvCxhoB,KAAKM,OAAOk+nB,kBAAkBzgmB,KAAiB,CAC/C,IAAI6tU,EAAkB5rW,KAAKM,OAAOg4nB,wBAAwBzgmB,KAAK,SAAUsrB,EAAGrmB,GAAK,OAAOqmB,EAAIrmB,IAC5F,GAAIqlnB,EAAY,CAEZ,IAAK,IADDC,KACKjmpB,EAAI,EAAGA,EAAI6D,KAAKM,OAAOq3nB,oBAAoBl7nB,OAAQN,IACxDimpB,EAAgBjmpB,GAAK6D,KAAKM,OAAOq3nB,oBAAoBx7nB,GAAGgiE,WAE5Dn+D,KAAKqipB,YAAYD,GAAiB,EAAO,KAAMD,GAC/CnipB,KAAK8hpB,aAAe,KAExB,IAAS3lpB,EAAI,EAAGA,EAAIyvW,EAAgBnvW,OAAQN,IAAK,CACzCA,EAAI,IACJ6D,KAAK8hpB,aAAe,MAExB,IAAIhglB,KAAWzgE,MAAMC,KAAKi3R,EAAKqzE,EAAgBzvW,IAAIqF,iBAAiB,eAChE07nB,GACAp7jB,EAAMt9D,KAAKjJ,MAAMumE,KAAUzgE,MAAMC,KAAKq/nB,EAAM/0R,EAAgBzvW,IAAIqF,iBAAiB,gBAErFxB,KAAKqipB,YAAYvglB,GAAO,EAAO,KAAMqglB,QAGxC,CACD,IAAIplpB,EAAMiD,KAAKsipB,oBACf,GAAIvlpB,EAAIynF,OAAQ,CACZ,GAAI29jB,EAAY,CAEP,IADDt9jB,KACJ,IAAS1oF,EAAI,EAAGA,EAAIY,EAAIwlpB,WAAW9lpB,OAAQN,IACvC0oF,EAAQrgF,KAAKxE,KAAKM,OAAOkipB,uBAAuBzlpB,EAAIwlpB,WAAWpmpB,KAEnE6D,KAAKqipB,YAAYx9jB,GAAS,EAAO,KAAMs9jB,GACvCnipB,KAAK8hpB,aAAe,KAExB,IAAS3lpB,EAAI,EAAGA,EAAIY,EAAIu5oB,WAAW75oB,OAAQN,IAAK,CACxCA,EAAI,IACJ6D,KAAK8hpB,aAAe,MAEpBhglB,KAAWzgE,MAAMC,KAAKi3R,EAAKx7R,EAAIu5oB,WAAWn6oB,IAC1CqF,iBAAiB,+BACjB07nB,GACAp7jB,EAAMt9D,KAAKjJ,MAAMumE,KAAUzgE,MAAMC,KAAKq/nB,EAAM5joB,EAAIu5oB,WAAWn6oB,IAAIqF,iBAAiB,gCAEpFxB,KAAKqipB,YAAYvglB,GAAO,EAAO,KAAMqglB,SAIzCnipB,KAAKqipB,eAAehhpB,MAAMC,KAAKtB,KAAKM,OAAOU,QAAQQ,iBAAiB,gCAAgC,EAAM,KAAM2gpB,GAGxH,IAAIlipB,GACAzD,KAAMwD,KAAK8hpB,YACXjpnB,QAAQ,GAGZ,GADA74B,KAAKM,OAAOkmB,QlChBA,akCgB2BvmB,GACnCA,EAAK44B,OACL,OAEJ74B,KAAKiipB,kBAAkBjlpB,MAAQgD,KAAK8hpB,YAAc7hpB,EAAKzD,KAClDgP,GAAQy9E,UAAUt5E,MAAM,qBAIzB3P,KAAKiipB,kBAAkBl8nB,kBAAkB,EAAG/lB,KAAKiipB,kBAAkBjlpB,MAAMP,QAHzEuD,KAAKiipB,kBAAkBx8oB,SAK3BzF,KAAK+hpB,UAAW,IAGxBF,EAAUxmpB,UAAUgnpB,YAAc,SAAUvglB,EAAO2glB,EAAQrrB,EAAU+qB,GAEjE,IAAK,IADDO,EAAgC,iBAAb5glB,EAAM,GACpBv+C,EAAI,EAAGA,EAAIu+C,EAAMrlE,OAAQ8mB,IAC1B4+nB,GAAcM,IACdzipB,KAAK8hpB,aAAe9hpB,KAAKM,OAAO00nB,aAAajgmB,SAAS+sC,EAAMv+C,GAAG1Q,aAAa,iBAAkB,KAAKsrD,WAAa,MAEhHuklB,EACK5glB,EAAMv+C,GAAGzf,UAAUK,SAAS,YAC7BnE,KAAK8hpB,aAAehglB,EAAMv+C,GAAG1H,aAIjC7b,KAAK8hpB,aAAehglB,EAAMv+C,GAE1BA,EAAIu+C,EAAMrlE,OAAS,IACnBuD,KAAK8hpB,aAAe1qB,IAQhCyqB,EAAUxmpB,UAAUkE,KAAO,SAAU4ipB,GAC7B3hpB,SAASmipB,sBAAsB,UAC/B3ipB,KAAKkipB,YAAYC,GACjB3hpB,SAASu3iB,YAAY,QACrB/3iB,KAAKiipB,kBAAkB/0gB,QAEvBltI,KAAK+hpB,WACLlmpB,OAAO4qhB,eAAeixB,kBACtB13iB,KAAK+hpB,UAAW,IAOxBF,EAAUxmpB,UAAUkkC,cAAgB,WAChC,MAAO,aAOXsinB,EAAUxmpB,UAAUiX,QAAU,WAC1BtS,KAAKpD,sBACL2H,EAAOvE,KAAKiipB,oBAEhBJ,EAAUxmpB,UAAUinpB,kBAAoB,WACpC,IAAIra,EAAUjooB,KAAKM,OACfvD,GAAQynF,QAAQ,GACpB,GAAuC,SAAnCyjjB,EAAQzJ,kBAAkBzgmB,KAAiB,CAC3C,IAAI6knB,EAAgB3a,EAAQ4a,4BACxBzzoB,OAAM,EAENknoB,KACAn6oB,OAAI,EACR,IAAKA,EAAI,EAAGA,EAAIympB,EAAcnmpB,SACtBmmpB,EAAczmpB,GAAGg9oB,YAAY18oB,QAC7B65oB,EAAW9xoB,KAAKo+oB,EAAczmpB,GAAGskS,WAEjCmiX,EAAczmpB,GAAGg9oB,YAAY18oB,SACxB2S,IACDA,EAAMygD,KAAKC,UAAU8ylB,EAAczmpB,GAAGg9oB,YAAYthnB,SAElDzoB,IAAQygD,KAAKC,UAAU8ylB,EAAczmpB,GAAGg9oB,YAAYthnB,UAR1B17B,KAatCm6oB,EAAWz+mB,OACP17B,IAAMympB,EAAcnmpB,QAAU65oB,EAAWA,EAAW75oB,OAAS,GAAK65oB,EAAW,IAAOA,EAAW75oB,OAAS,IACxGM,GAAQynF,QAAQ,EAAM8xjB,WAAYA,EAAYiM,WAAYK,EAAc,GAAGzJ,cAGnF,OAAOp8oB,GAEJ8kpB,KC9MPv3jB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAiC5DkmnB,GAAgC,SAAU33jB,GAE1C,SAAS23jB,IACL,OAAkB,OAAX33jB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVAsqF,GAAUw4jB,EAAgB33jB,GAI1BN,IACI3jF,KACD47oB,EAAeznpB,UAAW,aAAS,GACtCwvF,IACI3jF,KACD47oB,EAAeznpB,UAAW,iBAAa,GACnCynpB,GACT9jlB,IAKE+jlB,GAA8B,SAAU53jB,GAExC,SAAS43jB,IACL,OAAkB,OAAX53jB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVAsqF,GAAUy4jB,EAAc53jB,GAIxBN,IACIxiF,KAAey6oB,KAChBC,EAAa1npB,UAAW,eAAW,GACtCwvF,IACI3jF,GAAS,IACV67oB,EAAa1npB,UAAW,mBAAe,GACnC0npB,GACT/jlB,IAKE2F,GAA2B,SAAUwmB,GAErC,SAASxmB,IACL,OAAkB,OAAXwmB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAgC/D,OAlCAsqF,GAAU3lB,EAAWwmB,GAIrBN,IACI3jF,KACDy9D,EAAUtpE,UAAW,aAAS,GACjCwvF,IACI3jF,KACDy9D,EAAUtpE,UAAW,gBAAY,GACpCwvF,IACI3jF,KACDy9D,EAAUtpE,UAAW,aAAS,GACjCwvF,IACI3jF,KACDy9D,EAAUtpE,UAAW,iBAAa,GACrCwvF,IACI3jF,KACDy9D,EAAUtpE,UAAW,oBAAgB,GACxCwvF,IACI3jF,KACDy9D,EAAUtpE,UAAW,iBAAa,GACrCwvF,IACI3jF,OACDy9D,EAAUtpE,UAAW,yBAAqB,GAC7CwvF,IACI3jF,OACDy9D,EAAUtpE,UAAW,sBAAkB,GAC1CwvF,IACI3jF,KACDy9D,EAAUtpE,UAAW,YAAQ,GAChCwvF,IACI3jF,KACDy9D,EAAUtpE,UAAW,mBAAe,GAChCspE,GACT3F,IAKEgklB,GAAgC,SAAU73jB,GAE1C,SAAS63jB,IACL,OAAkB,OAAX73jB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAuB/D,OAzBAsqF,GAAU04jB,EAAgB73jB,GAI1BN,IACIxiF,KAAes8D,KAChBq+kB,EAAe3npB,UAAW,eAAW,GACxCwvF,IACI3jF,EAAS,cACV87oB,EAAe3npB,UAAW,YAAQ,GACrCwvF,IACI3jF,KACD87oB,EAAe3npB,UAAW,YAAQ,GACrCwvF,IACI3jF,GAAS,IACV87oB,EAAe3npB,UAAW,2BAAuB,GACpDwvF,IACI3jF,EAAS,OACV87oB,EAAe3npB,UAAW,0BAAsB,GACnDwvF,IACI3jF,KACD87oB,EAAe3npB,UAAW,iBAAa,GAC1CwvF,IACI3jF,GAAS,IACV87oB,EAAe3npB,UAAW,oBAAgB,GACtC2npB,GACThklB,IAKEiklB,GAAmC,SAAU93jB,GAE7C,SAAS83jB,IACL,OAAkB,OAAX93jB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAiB/D,OAnBAsqF,GAAU24jB,EAAmB93jB,GAI7BN,IACI3jF,EAAS,QACV+7oB,EAAkB5npB,UAAW,YAAQ,GACxCwvF,IACI3jF,EAAS,SACV+7oB,EAAkB5npB,UAAW,yBAAqB,GACrDwvF,IACI3jF,EAAS,WACV+7oB,EAAkB5npB,UAAW,YAAQ,GACxCwvF,IACI3jF,GAAS,IACV+7oB,EAAkB5npB,UAAW,oBAAgB,GAChDwvF,IACI3jF,GAAS,IACV+7oB,EAAkB5npB,UAAW,wBAAoB,GAC7C4npB,GACTjklB,IAKEkklB,GAAgC,SAAU/3jB,GAE1C,SAAS+3jB,IACL,OAAkB,OAAX/3jB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAiB/D,OAnBAsqF,GAAU44jB,EAAgB/3jB,GAI1BN,IACI3jF,OACDg8oB,EAAe7npB,UAAW,cAAU,GACvCwvF,IACI3jF,EAAS,KACVg8oB,EAAe7npB,UAAW,WAAO,GACpCwvF,IACI3jF,EAAS,aACVg8oB,EAAe7npB,UAAW,gBAAY,GACzCwvF,IACI3jF,GAAS,IACVg8oB,EAAe7npB,UAAW,kBAAc,GAC3CwvF,IACI3jF,GAAS,IACVg8oB,EAAe7npB,UAAW,oBAAgB,GACtC6npB,GACTlklB,IAKEmklB,GAAiC,SAAUh4jB,GAE3C,SAASg4jB,IACL,OAAkB,OAAXh4jB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAK/D,OAPAsqF,GAAU64jB,EAAiBh4jB,GAI3BN,IACI3jF,KACDi8oB,EAAgB9npB,UAAW,gBAAY,GACnC8npB,GACTnklB,IAKEoklB,GAAkC,SAAUj4jB,GAE5C,SAASi4jB,IACL,OAAkB,OAAXj4jB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAK/D,OAPAsqF,GAAU84jB,EAAkBj4jB,GAI5BN,IACI3jF,EAAS,SACVk8oB,EAAiB/npB,UAAW,gBAAY,GACpC+npB,GACTpklB,IAKEqklB,GAA+B,SAAUl4jB,GAEzC,SAASk4jB,IACL,OAAkB,OAAXl4jB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAuB/D,OAzBAsqF,GAAU+4jB,EAAel4jB,GAIzBN,IACI3jF,GAAS,IACVm8oB,EAAchopB,UAAW,oBAAgB,GAC5CwvF,IACI3jF,GAAS,IACVm8oB,EAAchopB,UAAW,wBAAoB,GAChDwvF,IACI3jF,GAAS,IACVm8oB,EAAchopB,UAAW,yBAAqB,GACjDwvF,IACI3jF,GAAS,IACVm8oB,EAAchopB,UAAW,yBAAqB,GACjDwvF,IACI3jF,GAAS,IACVm8oB,EAAchopB,UAAW,iCAA6B,GACzDwvF,IACI3jF,OACDm8oB,EAAchopB,UAAW,eAAW,GACvCwvF,IACI3jF,KACDm8oB,EAAchopB,UAAW,uBAAmB,GACxCgopB,GACTrklB,IAKEsklB,GAA8B,SAAUn4jB,GAExC,SAASm4jB,IACL,OAAkB,OAAXn4jB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAuB/D,OAzBAsqF,GAAUg5jB,EAAcn4jB,GAIxBN,IACI3jF,GAAS,IACVo8oB,EAAajopB,UAAW,mBAAe,GAC1CwvF,IACI3jF,GAAS,IACVo8oB,EAAajopB,UAAW,oBAAgB,GAC3CwvF,IACI3jF,GAAS,IACVo8oB,EAAajopB,UAAW,qBAAiB,GAC5CwvF,IACI3jF,EAAS,WACVo8oB,EAAajopB,UAAW,YAAQ,GACnCwvF,IACI3jF,GAAS,IACVo8oB,EAAajopB,UAAW,2BAAuB,GAClDwvF,IACI3jF,GAAS,IACVo8oB,EAAajopB,UAAW,yBAAqB,GAChDwvF,IACI3jF,GAAS,IACVo8oB,EAAajopB,UAAW,+BAA2B,GAC/CiopB,GACTtklB,IAYEkilB,GAAsB,SAAU/1jB,GAMhC,SAAS+1jB,EAAKluoB,EAAShS,GACnB,IAAIjB,EAAQorF,EAAO7pF,KAAKtB,KAAMgT,EAAShS,IAAYhB,KAYnD,OAXAD,EAAMigpB,sBAAuB,EAC7BjgpB,EAAMwjpB,iBACNxjpB,EAAMyjpB,cAAgBj4iB,GAAUlwG,UAAU62D,QAI1CnyD,EAAMivU,mBAENjvU,EAAM8qoB,gBAAiB,EACvB9qoB,EAAMyrG,SAAU,EAChBpuG,EAAS,mBAAoB2C,EAAM0jpB,qBAAsB1jpB,GAClDA,EAggFX,OAlhFAuqF,GAAU42jB,EAAM/1jB,GAyBhB+1jB,EAAK7lpB,UAAUmxG,eAAiB,WAC5B,IAAIzsG,EAAQC,KACR0jpB,GAAa,eAAgB,eAC7B,iBAAkB,gBAAiB,UAAW,iBAAkB,oBAChEv2iB,GACA57C,cAAe,WAAY,YAAa,oBAAqB,oBAAqB,aAClF08jB,gBAAiB,OAAQ,OAAQ,sBAAuB,qBAAsB,gBAC9EwG,eAAgB,eAAgB,mBAAoB,oBAAqB,oBACrE,4BAA6B,oBACjCM,gBAAiB,SAAU,WAAY,cACvC/F,gBAAkBjxjB,WAAa83kB,qBAYnC,OARA6N,EAAUtkpB,QAAQ,SAAUpC,GAExB,IAAK,IADD4za,EAAgB7wa,EAAM/C,GACjBoB,EAAK,EAAGyE,EAAKsqG,EAAgBnwG,GAAQoB,EAAKyE,EAAGpG,OAAQ2B,IAAM,QAEzDwya,EADG/ta,EAAGzE,OAIrB4B,KAAK2jpB,gBATiB,SAAU,OAAQ,oBAAqB,iBAAkB,WAC3E,kBAAmB,WAAY,cAQC3jpB,KAAK+9D,SAClC/9D,KAAKgtG,aAAa02iB,IAE7BxC,EAAK7lpB,UAAUsopB,eAAiB,SAAUC,EAAgB7llB,GACtD,IAAIh+D,EAAQC,KACZ+9D,EAAQ3+D,QAAQ,SAAUy9D,GAClBA,EAAOkB,SACPh+D,EAAM8jpB,eAAeD,EAAgB/mlB,GACrC98D,EAAM4jpB,eAAeC,EAAgB/mlB,EAAOkB,UAG5Ch+D,EAAM8jpB,eAAeD,EAAgB/mlB,MAIjDqklB,EAAK7lpB,UAAUwopB,eAAiB,SAAUD,EAAgB/mlB,GACtD+mlB,EAAexkpB,QAAQ,SAAU6oB,UACtB40C,EAAO50C,MAQtBi5nB,EAAK7lpB,UAAUw1F,gBAAkB,WAC7B,IAAIgB,KACJ,OAAI7xF,KAAKgnF,YACE6K,GAEP7xF,KAAKm1d,gBACLtjY,EAAQrtF,MACJ6sF,OAAQ,SACRpxF,MAAOD,KAAMA,KAAKiunB,eAAgBjunB,KAAKshE,kBAG3CthE,KAAK8jpB,kBACLjyjB,EAAQrtF,MACJ6sF,OAAQ,cACRpxF,MAAOD,QAGXA,KAAK+jpB,gBACLlyjB,EAAQrtF,MACJ6sF,OAAQ,YACRpxF,MAAOD,QAGXA,KAAK4mnB,cACL/0hB,EAAQrtF,MACJ6sF,OAAQ,OACRpxF,MAAOD,KAAMA,KAAKgvnB,aAAchvnB,KAAKouJ,cAAepuJ,KAAKshE,kBAG7DthE,KAAKw0nB,aACL3iiB,EAAQrtF,MACJ6sF,OAAQ,QACRpxF,MAAOD,KAAMA,KAAKuxD,gBAGtBvxD,KAAKi/oB,gBACLptjB,EAAQrtF,MACJ6sF,OAAQ,YACRpxF,MAAOD,KAAMA,KAAKw+nB,kBAAmBx+nB,KAAKshE,kBAGlDuwB,EAAQrtF,MACJ6sF,OAAQ,SACRpxF,MAAOD,QAEPA,KAAK+mnB,iBACLl1hB,EAAQrtF,MACJ6sF,OAAQ,UACRpxF,MAAOD,QAGXA,KAAK46oB,qBACL/ojB,EAAQrtF,MACJ6sF,OAAQ,iBACRpxF,MAAOD,QAGXA,KAAK8mnB,eACLj1hB,EAAQrtF,MACJ6sF,OAAQ,QACRpxF,MAAOD,KAAMA,KAAKy0nB,cAAez0nB,KAAKouJ,cAAepuJ,KAAKshE,kBAG9DthE,KAAK0/D,WAAWjjE,QAChBo1F,EAAQrtF,MAAO6sF,OAAQ,YAAapxF,MAAOD,KAAMA,KAAKshE,kBAEtDthE,KAAKgkpB,YACLnyjB,EAAQrtF,MACJ6sF,OAAQ,YACRpxF,MAAOD,KAAMA,KAAKshE,mBAGtBthE,KAAK2zX,SAAW3zX,KAAKikpB,kBACrBpyjB,EAAQrtF,MACJ6sF,OAAQ,UACRpxF,MAAOD,KAAMA,KAAKshE,mBAGtBthE,KAAKu8L,sBAAwBv8L,KAAK82nB,6BAClCjliB,EAAQrtF,MACJ6sF,OAAQ,gBACRpxF,MAAOD,KAAMA,KAAKshE,mBAGtBthE,KAAKi9nB,oBAAsBj9nB,KAAK0+nB,aAChC7siB,EAAQrtF,MAAO6sF,OAAQ,SAAUpxF,MAAOD,KAAMA,KAAKshE,kBAEnDthE,KAAKkkpB,gBAAgBlkpB,KAAK+9D,UAC1B8zB,EAAQrtF,MACJ6sF,OAAQ,gBACRpxF,MAAOD,KAAMA,KAAKshE,mBAGtBthE,KAAKihE,aAAakjlB,aAAenkpB,KAAKihE,aAAamjlB,eAAiBpkpB,KAAKihE,aAAaH,eACtF+wB,EAAQrtF,MACJ6sF,OAAQ,OACRpxF,MAAOD,KAAMA,KAAKshE,kBAG1BthE,KAAKqkpB,sBAAsBxyjB,GACpBA,IAEXqvjB,EAAK7lpB,UAAUgppB,sBAAwB,SAAUxyjB,GACzC7xF,KAAKskpB,kBACLzyjB,EAAQrtF,MACJ6sF,OAAQ,cACRpxF,MAAOD,KAAMA,KAAKshE,kBAGtBthE,KAAKgnnB,gBACLn1hB,EAAQrtF,MACJ6sF,OAAQ,aACRpxF,MAAOD,KAAMA,KAAKshE,kBAGtBthE,KAAKukpB,mBACL1yjB,EAAQrtF,MACJ6sF,OAAQ,gBACRpxF,MAAOD,KAAMA,KAAKshE,kBAGtBthE,KAAKwkpB,oBAAoBxkpB,KAAK+9D,UAC9B8zB,EAAQrtF,MAAO6sF,OAAQ,aAAcpxF,MAAOD,KAAMA,KAAKshE,mBAO/D4/kB,EAAK7lpB,UAAUoX,UAAY,WACvBzS,KAAKshE,eAAiB,IAAIw1V,GAC1B92Z,KAAKoiX,iBACLpiX,KAAKw9a,sBAET0jO,EAAK7lpB,UAAU+mX,eAAiB,WAE5BpiX,KAAKw+H,WAAY,EACjBx+H,KAAKouJ,iBACLpuJ,KAAKujpB,iBACLvjpB,KAAKykpB,YACLzkpB,KAAK2lgB,eAAgB,EACrB3lgB,KAAKmjgB,cACLnjgB,KAAKw/lB,QAAS,EACdx/lB,KAAKw4nB,aAAe,OACpBx4nB,KAAKu4nB,qBAAsB,EAC3Bv4nB,KAAKi1oB,oBAAqB,EAC1Bj1oB,KAAKwjpB,cAAgBj4iB,GAAUlwG,UAAU62D,QACzClyD,KAAK0kpB,iBACDvgpB,SAAU,WAAY0rJ,SAAU,WAAYkG,MAAO,QAAS4uf,YAAa,cAAeC,mBAAoB,qBAC5GC,SAAU,WAAYC,gBAAiB,kBAAmBC,SAAU,WAAYnzf,WAAY,cAEhG5xJ,KAAK29a,eACDqnO,YAAa,wBACbC,KAAM,OACNC,MAAO,QACPC,qBAAsB,sBACtBC,cAAe,gDACfjnO,QAAS,wBACTknO,aAAc,uCACdC,eAAgB,qBAChBC,qBAAsB,uHAEtBC,IAAK,MACLC,KAAM,OACNvggB,OAAQ,SACRwggB,OAAQ,SACRjkO,OAAQ,SACRi/D,MAAO,QACPilK,UAAW,aACXC,YAAa,eACbC,WAAY,cACZC,UAAW,aACX5qlB,OAAQ,SACR6qlB,cAAe,UACfj1b,KAAM,OACN3gG,KAAM,OACN8hE,MAAO,QACP+zd,mBAAoB,yCACpBC,qBAAsB,2CACtBC,WAAY,OACZC,SAAU,KACVC,aAAc,SACdC,cAAe,cACfC,aAAc,iBACdC,iBAAkB,yCAClBC,qBAAsB,mEACtBC,cAAe,0CACfC,WAAY,+CACZC,cAAe,gBACfC,cAAe,iBACfC,OAAQ,mBACRC,aAAc,SACdC,YAAa,QACbC,WAAY,cACZC,SAAU,YACVC,SAAU,WACVC,MAAO,QACPC,SAAU,YACVC,SAAU,YACVC,gBAAiB,qBACjBC,YAAa,eACbC,mBAAoB,wBACpBC,WAAY,gBACZC,WAAY,kBACZ9pO,KAAM,OACNvR,MAAO,uBACPs7O,QAAS,yBACTC,WAAY,uBACZC,QAAS,uBACTC,OAAQ,SACRC,UAAW,aACXj0X,SAAU,YACVk0X,aAAc,gBACdtpX,SAAU,YACVupX,cAAe,iBACfC,eAAgB,kBAChBC,WAAY,cACZC,aAAc,gBACdC,WAAY,SACZpqO,UAAW,aACXqqO,OAAQ,SACRC,WAAY,OACZC,YAAa,QACbC,SAAU,mBACVC,YAAa,eACbC,aAAc,iBACdC,WAAY,eACZC,WAAY,eACZC,UAAW,aACXC,QAAS,UACTC,aAAc,gBACdC,wBAAyB,kBACzBC,4BAA6B,gBAC7BC,IAAK,MACLC,GAAI,KACJC,cAAe,oBAEnBrppB,KAAK42G,YACDo7hB,UAAW,YACXD,QAAS,UACTF,WAAY,aACZC,UAAW,YACX/pV,UAAW,kBACXC,QAAS,gBACTiqV,WAAY,mBACZC,UAAW,kBACX59hB,KAAM,OACNz1F,IAAK,MACLs1F,OAAQ,SACRyzM,SAAU,YACVC,QAAS,WACTn9G,OAAQ,SACRC,SAAU,WACV2+c,cAAe,kBACfC,gBAAiB,oBACjBC,UAAW,aACXC,YAAa,eACbt1c,aAAc,gBACdnJ,WAAY,cACZ0+c,cAAe,iBACfC,YAAa,eACb7L,UAAW,SACX8L,UAAW,SACXj1iB,OAAQ,SACRC,OAAQ,SACRE,GAAI,KACJf,MAAO,QACP4zM,UAAW,aACXM,WAAY,cACZn0M,IAAK,MACL2mG,SAAU,YACV58K,MAAO,QACPgsnB,UAAW,SACXC,eAAgB,iBAQxB5I,EAAK7lpB,UAAU0wG,OAAS,WACpB/rG,KAAK88nB,YAAYkB,WAAWh+nB,KAAKgB,SAAW4Q,KAAM,SAClD4I,IAAgBrT,OAAQnH,KAAKgB,UAC7BhB,KAAK+ppB,aAAe,IAAIjrO,GAAO9+a,KAAMA,KAAKshE,gBAC1CthE,KAAKgqpB,kBACLhqpB,KAAKokf,aAAe,IAAIlpb,GAAOl7D,MAC/BA,KAAK2qS,aAAe,IAAIu0W,GAAOl/oB,MAC/BA,KAAK+N,OAAO09nB,OACZzroB,KAAKwmB,QnCrpBK,QmCspBVs3C,GAAe99D,KAAK+9D,QAAS/9D,KAAK82nB,4BAClC92nB,KAAKg1nB,aACLh1nB,KAAKiqpB,eACLjqpB,KAAKkqpB,aACLlqpB,KAAKukB,aACLvkB,KAAKmqpB,cACLnqpB,KAAK+koB,sBACL/koB,KAAKoqpB,sBACLpqpB,KAAK2hB,cACL3hB,KAAK+N,OAAOgtoB,QAKhBmG,EAAK7lpB,UAAUsmB,YAAc,WACzBA,GAAY3hB,KAAKgB,UAKrBkgpB,EAAK7lpB,UAAUqnB,YAAc,WACzBA,GAAY1iB,KAAKgB,UAErBkgpB,EAAK7lpB,UAAU+upB,oBAAsB,WAC7BpqpB,KAAKm1d,gBAA+C,cAA7Bn1d,KAAKiunB,eAAevnnB,MAC3C1G,KAAK2+nB,mBAAmBn9nB,iBAAiB,wBAAwB/E,OACjEuD,KAAK2+nB,mBAAmB76nB,UAAUM,IAAI,mBAGtCpE,KAAK2+nB,mBAAmB76nB,UAAUS,OAAO,oBAGjD28oB,EAAK7lpB,UAAU2upB,gBAAkB,WAC7B,IAAKhqpB,KAAK82nB,2BAA4B,CAClC,IAAIuzB,EAAOrqpB,KAAKg1nB,aAEhB,GADAh1nB,KAAKsqpB,mBAAqBtqpB,KAAKshE,eAAeE,WAAW,oBACpD/jE,EAAkB4spB,GACnB,IAAK,IAAIp4oB,EAAQ,EAAGA,EAAQo4oB,EAAK5tpB,OAAQwV,IACrC,IAAKxU,EAAkB4spB,EAAKp4oB,GAAOs4oB,aAAc,CAC7CvqpB,KAAKykpB,SAASjgpB,KAAK6lpB,EAAKp4oB,IACxB,IAAIu4oB,EAAQ3upB,OAAO+9M,WAAWywc,EAAKp4oB,GAAOs4oB,aAC1CvqpB,KAAKyqpB,iBAAiBx4oB,EAAOu4oB,GAC7BA,EAAML,YAAYnqpB,KAAKyqpB,iBAAiBnvpB,KAAK0E,KAAMiS,OASvEivoB,EAAK7lpB,UAAUovpB,iBAAmB,SAAU9iV,EAAa9mU,GACrD,IAAI4/D,EAAMzgE,KAAKg1nB,aAAartT,GAC5BlnQ,EAAIjpC,QAAU32B,EAAEmF,QACZhG,KAAK2lgB,gBACDllc,EAAIjpC,QACJx3B,KAAK0qpB,UAAUzmiB,KAAKxjD,EAAItC,WAAY,cAGpCn+D,KAAK0qpB,UAAUnpkB,KAAK9gB,EAAItC,WAAY,gBAIhD+ilB,EAAK7lpB,UAAUsvpB,gBAAkB,WAE7B,GADA3qpB,KAAK2lgB,eAAgB,EACjB3lgB,KAAK0/D,WAAWjjE,QAAUuD,KAAKgB,QAAQywT,aAAezxT,KAAK+V,OAAQ,CAEnEpS,GADoB3D,KAAKgB,QAAQ2B,cAAc,mBACpB,sBAOnCu+oB,EAAK7lpB,UAAUuvpB,iBAAmB,aAQlC1J,EAAK7lpB,UAAUiX,QAAU,WACrBtS,KAAKmlB,eACLnlB,KAAK6qpB,iBACL7qpB,KAAK+N,OAAO6lnB,OACZ5znB,KAAKmkf,0BACLh5Z,EAAO9vF,UAAUiX,QAAQhR,KAAKtB,MAC9BA,KAAK8qpB,WAAWx4oB,UAIhB,IAAK,IAHDu/E,GAAW,eAAgB,eAAgB,gBAAiB,wBAC5D,iBAAkB,cAAe,iBAAkB,eAAgB,eAAgB,YACnF,eAAgB,cAAe,kBAAmB,eAC7C11F,EAAI,EAAGA,EAAI01F,EAAQp1F,OAAQN,IAC5B6D,KAAK6xF,EAAQ11F,MACb6D,KAAK6xF,EAAQ11F,IAAM,MAG3B6D,KAAKgB,QAAQgB,UAAY,GACzB8B,EAAU9D,KAAKgB,YAAc,QAAS,cAAe,eAAgB,YAAa,WAAY,uBAElGkgpB,EAAK7lpB,UAAU8of,wBAA0B,WACrCnkf,KAAK2qS,aAAar4R,UAClBtS,KAAK+5I,eAAeznI,UACpBtS,KAAK+qpB,YAAYz4oB,WAMrB4uoB,EAAK7lpB,UAAUkkC,cAAgB,WAC3B,MAAO,QAOX2hnB,EAAK7lpB,UAAUmsF,kBAAoB,SAAUiF,EAASC,GAClD,IAEIs+jB,EAFAC,GAAiB,EACjBC,GAAqB,EAGzB,IAAIlrpB,KAAKgnF,YAAT,CAGA,IAAI/jF,EAAa3E,OAAOhB,KAAKmvF,GACzBxpF,EAAW1E,QAAQ,YAAc,IACjCyB,KAAKmrpB,qBACLD,GAAqB,GAEzB,IAAK,IAAI9spB,EAAK,EAAGovC,EAAevqC,EAAY7E,EAAKovC,EAAa/wC,OAAQ2B,IAAM,CACxE,IAAIkM,EAAOkjC,EAAapvC,GACxB,OAAQkM,GACJ,IAAK,cACDtK,KAAK+N,OAAO8vnB,IAAmB1siB,OAAQ,QAAS1xD,OAAQz/B,KAAKw0nB,cAC7Dy2B,GAAiB,EACjB,MACJ,IAAK,eACDjrpB,KAAK+N,OAAOktoB,IAA8B9pjB,OAAQ,QAASluF,WAAYwpF,EAAQl7B,gBAC3E9zD,EAAkBgvF,EAAQl7B,aAAa+hM,cAAgB71P,EAAkBgvF,EAAQl7B,aAAau5kB,oBACzFr+iB,EAAQl7B,aAAa+hM,cAAgB5mK,EAAQn7B,aAAa+hM,cACvDtzP,KAAK82nB,6BAA+B92nB,KAAKu8L,sBAC1Cv8L,KAAKuxD,aAAau5kB,mBAAqB9qoB,KAAKuxD,aAAa4+F,YAChE86f,GAAiB,GAErB,MACJ,IAAK,eACL,IAAK,SACD9/jB,EAAO9vF,UAAU62D,QAAQ5wD,KAAKtB,MAC9B,MACJ,IAAK,eACDA,KAAK+N,OAAO8vnB,IAAmB1siB,OAAQ,OAAQ1xD,OAAQz/B,KAAK4mnB,eAC5DqkC,GAAiB,EACjBD,GAAc,EACd,MACJ,IAAK,iBACDhrpB,KAAKoqpB,sBACLpqpB,KAAK+N,OAAO8vnB,IAAmB1siB,OAAQ,SAAU1xD,OAAQz/B,KAAKm1d,iBAC9D81L,GAAiB,EACgB,cAA7BjrpB,KAAKiunB,eAAevnnB,MACpB1G,KAAKs7oB,gBAET,MACJ,IAAK,SACL,IAAK,QACDt7oB,KAAK+N,OAAO8vnB,IAAmB1siB,OAAQ,SAAUluF,YAAc+S,MAAOy2E,EAAQz2E,MAAOD,OAAQ02E,EAAQ12E,UACrG,MACJ,IAAK,kBACD/V,KAAKorpB,aAAavmB,YAClBmmB,GAAc,EACd,MACJ,IAAK,sBACDhrpB,KAAK+N,OAAO8vnB,IAAmB1siB,OAAQ,iBAAkB1xD,OAAQz/B,KAAK46oB,sBACtE,MACJ,IAAK,iBACD56oB,KAAK+N,OAAO8vnB,IAAmB1siB,OAAQ,YAAa1xD,OAAQz/B,KAAKi/oB,iBACjE,MACJ,IAAK,cACDj/oB,KAAKqrpB,cAAgBhulB,GAAiBr9D,KAAK63nB,aAC3CozB,GAAiB,EACjB,MACJ,IAAK,iBACDjrpB,KAAKsrpB,iBAAmBjulB,GAAiBr9D,KAAKo5nB,gBAC9C6xB,GAAiB,EACjB,MACJ,IAAK,gBACDjrpB,KAAK+N,OAAO8vnB,IAAmB1siB,OAAQ,QAAS1xD,OAAQz/B,KAAK8mnB,gBAC7D9mnB,KAAKorpB,aAAavmB,YAClBomB,GAAiB,EACjBD,GAAc,EACd,MACJ,IAAK,YACDC,GAAiB,EACjB,MACJ,IAAK,UACDjrpB,KAAK+N,OAAO8vnB,IAAmB1siB,OAAQ,YACvC,MACJ,IAAK,gBACK1zF,EAAkBgvF,EAAQgoiB,cAAc2Q,gBAC1CploB,KAAKorpB,aAAavmB,YAClBomB,GAAiB,EACjBD,GAAc,GAElBhrpB,KAAK+N,OAAOktoB,IACR9pjB,OAAQ,QAASluF,WAAYwpF,EAAQgoiB,cACrC/tiB,cAAegG,EAAQ+niB,gBAE3B,MACJ,IAAK,cACIz0nB,KAAK0/D,WAAWjjE,QAAUuD,KAAK8mnB,eAAiB9mnB,KAAKy0nB,cAAc12jB,QAAQthE,SAC5EwupB,GAAiB,GAErBjrpB,KAAK+N,OAAO8vnB,IAAmB1siB,OAAQ,YAAaluF,WAAYwpF,IAChE,MACJ,IAAK,gBACL,IAAK,aACDzsF,KAAKwjpB,gBACL,MACJ,QACIxjpB,KAAKurpB,uBAAuBjhpB,EAAMmiF,IAG1Cu+jB,GACAhrpB,KAAK+koB,sBAELmmB,GACAlrpB,KAAKkyD,WACDlyD,KAAKukoB,eAAiBvkoB,KAAK0+nB,aAC3B1+nB,KAAKwjpB,iBAGJyH,IACLjrpB,KAAK+N,OAAO29nB,IA/GHt/c,YAAa,YAgHtB6+d,GAAiB,KAIzB/J,EAAK7lpB,UAAUkwpB,uBAAyB,SAAUjhpB,EAAMmiF,GACpD,OAAQniF,GACJ,IAAK,YACDtK,KAAKwrpB,YACDxrpB,KAAKw0nB,cACLx0nB,KAAKgB,QAAQ2B,cAAc,gBAAgB+kF,cAAc,GAAGx0E,UAAYu5E,EAAQv5E,UAChFlT,KAAKgB,QAAQ2B,cAAc,gBAAgB+kF,cAAc,GAAG97B,YAE5C,SAAhB5rD,KAAK+V,SACL/V,KAAK2qS,aAAak1W,eAAepzjB,EAAQv5E,WACzClT,KAAK2qS,aAAa80W,cAElBz/oB,KAAK2zX,UACL3zX,KAAKs/oB,cAAcmM,aAAa/jkB,cAAc,GAAGx0E,UAAYu5E,EAAQv5E,UACrElT,KAAKs/oB,cAAcmM,aAAa/jkB,cAAc,GAAG97B,YAEjD5rD,KAAKskpB,mBACLtkpB,KAAK46e,kBAAkB8wK,iBAAiBhkkB,cAAc,GAAGx0E,UAAYu5E,EAAQv5E,UAC7ElT,KAAK46e,kBAAkB8wK,iBAAiBhkkB,cAAc,GAAG97B,YAEzD5rD,KAAKgnnB,iBACLhnnB,KAAK2rpB,iBAAiBC,gBAAgBlkkB,cAAc,GAAGx0E,UAAYu5E,EAAQv5E,UAC3ElT,KAAK2rpB,iBAAiBC,gBAAgBlkkB,cAAc,GAAG97B,YAE3D5rD,KAAK+N,OAAO89oB,OACZ,MACJ,IAAK,eACD7rpB,KAAK+ppB,aAAa73lB,UAClB,MACJ,IAAK,gBACDlyD,KAAKorpB,aAAavmB,YAClB7koB,KAAK8rpB,oBACL,MACJ,IAAK,YACG9rpB,KAAKggE,UACLr8D,GAAU3D,KAAKgB,SAAU,qBAGzBqD,GAAarE,KAAKgB,SAAU,qBAEhChB,KAAK+ppB,aAAa73lB,UAClBlyD,KAAKorpB,aAAavmB,YAClB,MACJ,IAAK,YACD7koB,KAAK+rpB,kBACL,MACJ,IAAK,iBACD/rpB,KAAKorpB,aAAavmB,YAClB7koB,KAAK+N,OAAO8vnB,IAAmB1siB,OAAQ,aAAc1xD,QAAQ,IAC7D,MACJ,IAAK,kBACDz/B,KAAK+N,OAAO8vnB,IAAmB1siB,OAAQ,aAAc1xD,OAAQz/B,KAAKgspB,kBAClE,MACJ,IAAK,mBACDhspB,KAAK+N,OAAO8vnB,IAAmB1siB,OAAQ,cAAe1xD,OAAQz/B,KAAKskpB,mBACnE,MACJ,IAAK,oBACDtkpB,KAAK+N,OAAO8vnB,IAAmB1siB,OAAQ,gBAAiB1xD,OAAQz/B,KAAKukpB,oBACrE,MACJ,IAAK,iBACDvkpB,KAAKoqpB,sBACLpqpB,KAAK+N,OAAOktoB,IAA8B9pjB,OAAQ,SAAUluF,WAAYwpF,EAAQwhiB,iBAChF,MACJ,IAAK,iBACDjunB,KAAK+N,OAAOktoB,IAA8B9pjB,OAAQ,SAAUluF,WAAYwpF,EAAQsoiB,iBAChF,MACJ,IAAK,eACD/0nB,KAAK+N,OAAOktoB,IAA8B9pjB,OAAQ,SAClD,MACJ,IAAK,oBACDnxF,KAAK+N,OAAOktoB,IAA8B9pjB,OAAQ,YAAaluF,WAAYwpF,EAAQ+xiB,oBACnF,MACJ,IAAK,eACDx+nB,KAAK+N,OAAOktoB,IAA8B9pjB,OAAQ,OAAQluF,WAAYwpF,EAAQxrB,eAC9E,MACJ,IAAK,gBACL,IAAK,mBACGjhE,KAAKq9nB,cACLr9nB,KAAKispB,gBAGLjspB,KAAKkspB,iBAETlspB,KAAK+N,OAAOuvnB,IAAuBC,KAAM,WAAY4uB,UAAqB,qBAAT7hpB,IACjE,MACJ,IAAK,aACD,IAAI8hpB,EAAYpspB,KAAKg8oB,gBAAgBvgV,WACrC,GAAI2wV,EAAU/4B,UAAW,CACrB,IAAIg5B,EAAa5upB,EAAkBuC,KAAKujE,eAAcvjE,KAAKujE,WAAWxkE,QACrEqtpB,EAAUr5jB,WAAa3zF,QAAQ,SAAUq4B,GACtC40nB,EAAY5slB,GAASszB,MAAMs5jB,EAAW50nB,EAAM20nB,EAAU1slB,kBAE1D1/D,KAAKujE,YACDxkE,OAAQstpB,EAAWvtoB,MAAO9e,KAAKujE,WAAWzkD,MAC1C4gD,WAAY1/D,KAAKujE,WAAW7D,YAEhC0slB,EAAU94B,SAAStznB,KAAKujE,iBAGxBvjE,KAAKg8oB,gBAAgB/lB,UAAWI,eAAe,IAC/Cr2nB,KAAK+N,OAAO4lnB,OACZ3znB,KAAK+ppB,aAAa73lB,UAEtB,MACJ,IAAK,eACYu6B,EAAQ6/jB,YAAc3opB,EAAWU,IACtCrE,KAAKgB,SAAU,iBAOnCkgpB,EAAK7lpB,UAAU2L,cAAgB,SAAUsD,EAAM28E,GAC3CkE,EAAO9vF,UAAU2L,cAAc1F,KAAKtB,KAAMsK,EAAM28E,GAC5CjnF,KAAKuspB,cAAgBtlkB,GACrBjnF,KAAKuspB,aAAaC,iBAM1BtL,EAAK7lpB,UAAU0poB,oBAAsB,WAEjC,IAAK,IAAI3moB,EAAK,EAAGqupB,KADGprpB,MAAMC,KAAKtB,KAAKgB,QAAQQ,iBAAiB,oBACjBpD,EAAKqupB,EAAahwpB,OAAQ2B,IAAM,CACxE,IAAIsiE,EAAM+rlB,EAAarupB,GACnB4B,KAAK4mnB,cAAiB5mnB,KAAK8mnB,eAAiB9mnB,KAAKy0nB,cAAc2Q,cAAiBploB,KAAK+mnB,gBACrFrmjB,EAAI58D,UAAUS,OAAO,mBAGrBm8D,EAAI58D,UAAUM,IAAI,qBAI9B88oB,EAAK7lpB,UAAUqxpB,kBAAoB,SAAU3ulB,GACzC,IAAK,IAAI5hE,EAAI,EAAG0F,EAAMk8D,EAAQthE,OAAQN,EAAI0F,EAAK1F,IACvC4hE,EAAQ5hE,GAAG4hE,QACX/9D,KAAK0spB,kBAAkB3ulB,EAAQ5hE,GAAG4hE,SAGlC/9D,KAAK2spB,YAAYnopB,KAAKu5D,EAAQ5hE,IAGtC6D,KAAK4spB,uBAET1L,EAAK7lpB,UAAUuxpB,oBAAsB,WAGjC,IAAK,IAFDz6B,EAAOnynB,KAAK2spB,YACZ7toB,EAAQ,EACH3iB,EAAI,EAAG0F,EAAMswnB,EAAK11nB,OAAQN,EAAI0F,EAAK1F,IACpCg2nB,EAAKh2nB,GAAG+goB,WACR/K,EAAK9pmB,OAAOroB,KAAKukoB,cAAgBzlnB,EAAO,EAAGqzmB,EAAK9pmB,OAAOlsB,EAAG,GAAG,IAC7D2iB,MAQZoioB,EAAK7lpB,UAAU25nB,WAAa,SAAU63B,GAClC,IAAI9spB,EAAQC,KACR8spB,EAAS9spB,KAAKujpB,cAAc3rnB,IAAI,SAAUm1H,GAAK,OAAOA,EAAIhtJ,EAAM00nB,cAAc12jB,QAAQthE,SAAWuqC,OAAO,SAAU+lH,GAAK,OAAOA,GAAK,IACnIgggB,EAAOD,EAAOrwpB,SACbuD,KAAK82nB,4BAA8Br5nB,EAAkBuC,KAAK2spB,cAA4C,IAA5B3spB,KAAK2spB,YAAYlwpB,QAAgBowpB,KAC5G7spB,KAAK2spB,eACL3spB,KAAK0spB,kBAAkB1spB,KAAK+9D,UAIhC,OAFuB,IAATgvlB,EAAa/spB,KAAK2spB,YAC5B3spB,KAAK2spB,YAAYtrpB,MAAMyrpB,EAAO,GAAIA,EAAOC,EAAO,GAAK,IAM7D7L,EAAK7lpB,UAAUwmoB,mCAAqC,SAAUmrB,EAAevslB,GACzE,IAAK,IAAItkE,EAAI,EAAGA,EAAIskE,EAAIhkE,OAAQN,IAAK,CACjC,IAAI8wpB,EAAmBxslB,EAAItkE,GAC3B,GAAI8wpB,EAAiBlhoB,QAAUihoB,GAAiBC,EAAiB9ulB,aAAe6ulB,EAAe,CAC3FhtpB,KAAKktpB,cAAgBD,EACrB,MAEKA,EAAiBlvlB,SACtB/9D,KAAK6hoB,mCAAmCmrB,EAAeC,EAAiBlvlB,SAGhF,OAAO/9D,KAAKktpB,eAKhBhM,EAAK7lpB,UAAUq8nB,uBAAyB,WACpC,OAAO13nB,KAAKujpB,eAKhBrC,EAAK7lpB,UAAU8xpB,mBAAqB,WAChC,OAAOntpB,KAAK29a,eAKhBujO,EAAK7lpB,UAAU+xpB,uBAAyB,SAAUrgT,GAC9C/sW,KAAKujpB,cAAgBx2S,GAMzBm0S,EAAK7lpB,UAAUs8nB,kBAAoB,WAE/B,IAAK,IADDxF,KACK/znB,EAAK,EAAGyE,EAAK7C,KAAK2spB,YAAavupB,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC1D,IAAIqiE,EAAM59D,EAAGzE,GACTqiE,EAAIjpC,SACJ26lB,EAAK3tnB,KAAKi8D,GAGlB,OAAO0xjB,GAMX+uB,EAAK7lpB,UAAUsjoB,iBAAmB,WAC9B,OAAO3+nB,KAAKorpB,aAAapuB,YAO7BkkB,EAAK7lpB,UAAUgypB,qBAAuB,SAAUrspB,GAC5ChB,KAAKorpB,aAAaltB,SAASl9nB,IAM/BkgpB,EAAK7lpB,UAAU0xoB,gBAAkB,WAC7B,OAAO/soB,KAAKi2E,cAAc6lL,YAO9BolZ,EAAK7lpB,UAAUiypB,oBAAsB,SAAUtspB,GAC3ChB,KAAKi2E,cAAcqojB,SAASt9nB,IAMhCkgpB,EAAK7lpB,UAAUo5C,WAAa,WACxB,OAAOz0C,KAAKi2E,cAAc+mjB,YAO9BkkB,EAAK7lpB,UAAUkypB,eAAiB,SAAUvspB,GACtChB,KAAKi2E,cAAciojB,SAASl9nB,IAMhCkgpB,EAAK7lpB,UAAUwkoB,eAAiB,WAC5B,OAAO7/nB,KAAKorpB,aAAatvZ,YAO7BolZ,EAAK7lpB,UAAUmypB,mBAAqB,SAAUxspB,GAC1ChB,KAAKorpB,aAAa9sB,SAASt9nB,IAM/BkgpB,EAAK7lpB,UAAUolpB,iBAAmB,WAI9B,OAHIhjpB,EAAkBuC,KAAKytpB,iBACvBztpB,KAAKytpB,cAAgBztpB,KAAKgB,QAAQ0M,uBAAuB,gBAAgB,IAEtE1N,KAAKytpB,eAMhBvM,EAAK7lpB,UAAUqypB,sBAAwB,WAInC,OAHIjwpB,EAAkBuC,KAAKytpB,iBACvBztpB,KAAKytpB,cAAgBztpB,KAAKgB,QAAQ0M,uBAAuB,gBAAgB,IAEtE1N,KAAKytpB,cAAc7woB,WAAWA,YAMzCskoB,EAAK7lpB,UAAUsypB,SAAW,WACtB,OAAO3tpB,KAAK4tpB,WAOhB1M,EAAK7lpB,UAAUwypB,aAAe,SAAU7spB,GACpChB,KAAK4tpB,UAAY5spB,GAOrBkgpB,EAAK7lpB,UAAU+loB,cAAgB,SAAUnvnB,GACrC,OAAOjS,KAAKi2E,cAAcmrjB,cAAcnvnB,IAO5CivoB,EAAK7lpB,UAAUkmoB,qBAAuB,SAAUtvnB,GAC5C,OAAOjS,KAAKi2E,cAAcsrjB,qBAAqBtvnB,IAMnDivoB,EAAK7lpB,UAAU8koB,QAAU,WACrB,OAAOngoB,KAAKi2E,cAAcoqjB,kBAO9B6gB,EAAK7lpB,UAAUyypB,WAAa,SAAU3mpB,GAClC,IAAInD,EAAMmD,EACNlH,GAASkH,OAAQA,GACrB,IAAK1J,EAAkB0J,IAAW1J,EAAkBo2C,GAAa7vC,EAAK,wBAC/DvG,EAAkBo2C,GAAa7vC,EAAK,0BAA4BhE,KAAKw/lB,OAAQ,CAChF,IAAIv8hB,EAAOp9D,EAAQ7B,EAAK,cACxB,IAAKi/D,EACD,OAAOhjE,EAEX,IAAI44R,EAAY9jQ,SAASkuC,EAAKpwD,aAAa,iBAAkB,IAC7D,IAAKpV,EAAkBwlE,KAAUjhB,MAAM62O,GAAY,CAC/C,IAAIs6O,EAAQttgB,EAAQo9D,EAAM,UACtBw9N,EAAW1rQ,SAASo+e,EAAMtggB,aAAa,iBAAkB,IACzDoyD,EAAUjlE,KAAKi9nB,mBACf+G,IAAY/+jB,GAAU4zN,GAAa5zN,EAGnC8olB,GAFQ/pB,EACRhkoB,KAAKi2E,cAAcmqjB,iBAAmBpgoB,KAAKi2E,cAAckqjB,WACvCn5lB,OAAO,SAAUpK,GAAK,OAAOA,EAAEl9B,MAAQyzgB,EAAMtggB,aAAa,cAC5EytD,EAAUytlB,EAAW,GAAGvxpB,KACxBqgE,EAASkxlB,EAAW,GAAGjslB,MAAMkikB,EAAYnrW,EAAY5zN,EAAU4zN,GAAWh8N,OAC9E58D,GAASgjE,KAAMA,EAAM41N,UAAWA,EAAWn4N,IAAKyyc,EAAO1yO,SAAUA,EAAUngO,QAASA,EAASzD,OAAQA,EAAQ11D,OAAQA,IAG7H,OAAOlH,GAMXihpB,EAAK7lpB,UAAU+koB,eAAiB,WAC5B,OAAOpgoB,KAAKi2E,cAAcqqjB,yBAM9B4gB,EAAK7lpB,UAAUgmoB,YAAc,WACzB,IAAI9oW,KAAUl3R,MAAMC,KAAKtB,KAAK+soB,kBAAkBpqoB,cAAc,SAASyX,UACvE,GAAIpa,KAAK0+nB,WAAY,CACjB,IAAIhC,KAAgBr7nB,MAAMC,KAAKtB,KAAK6/nB,iBAAiBl9nB,cAAc,SAASyX,UAC5Em+Q,EAAOv4R,KAAKs6oB,eAAe5d,EAAYnkW,GAG3C,OADev4R,KAAK27nB,iBAAiBpjW,IAMzC2oX,EAAK7lpB,UAAUi/oB,eAAiB,SAAU5Z,EAAOstB,GAC7C,IAAK,IAAI7xpB,EAAI,EAAG0F,EAAMmspB,EAAMvxpB,OAAQN,EAAI0F,EAAK1F,IACzCukoB,EAAMl8nB,KAAKwppB,EAAM7xpB,IAErB,OAAOukoB,GAEXwgB,EAAK7lpB,UAAUsgoB,iBAAmB,SAAUpjW,GAExC,IAAK,IADD01X,KACK9xpB,EAAI,EAAG0F,EAAM02R,EAAK97R,OAAQN,EAAI0F,EAAK1F,IACpCo8R,EAAKp8R,GAAG2H,UAAUK,SAAS,WAAao0R,EAAKp8R,GAAG2H,UAAUK,SAAS,gBACnE8ppB,EAAMzppB,KAAK+zR,EAAKp8R,IAGxB,OAAO8xpB,GAMX/M,EAAK7lpB,UAAUmmoB,mBAAqB,WAChC,IAAIjpW,KAAUl3R,MAAMC,KAAKtB,KAAKy0C,aAAa9xC,cAAc,qBAAqBA,cAAc,SAASyX,UACrG,GAAIpa,KAAK0+nB,WAAY,CACjB,IAAIhC,KAAgBr7nB,MAAMC,KAAKtB,KAAK2+nB,mBAAmBh8nB,cAAc,oBAAoBA,cAAc,SAASyX,UAChHm+Q,EAAOv4R,KAAKs6oB,eAAe5d,EAAYnkW,GAG3C,OADev4R,KAAK27nB,iBAAiBpjW,IAUzC2oX,EAAK7lpB,UAAU6ypB,aAAe,SAAU7wpB,EAAK0uB,EAAO/uB,GAChD,IAIImxpB,EACA1tlB,EACAuoU,EACAolR,EAASpupB,KAAK61nB,0BAA0B,GACxC5yjB,EAAO,IAAIqikB,GAAatloB,KAAMA,KAAKshE,gBACnCyjf,KACAspG,EAAarupB,KAAKi2E,cAAckqjB,UAOpC,GANAguB,EAAWnupB,KAAK65nB,sBAAsB9tmB,GACtC00C,EAAMzgE,KAAK00nB,iBAAiB3omB,GAC5Bg5hB,EAAcspG,EAAWrnnB,OAAO,SAAUpK,GACtC,OAAO//B,EAASuxpB,EAAQxxnB,EAAEpgC,QAAUa,IACrC,GACH2rY,EAAMvrY,EAAkBsnjB,GAAsF,KAAvE/kjB,KAAKgB,QAAQ2B,cAAc,aAAeoijB,EAAkB,IAAI,MAClGtnjB,EAAkBurY,GAAvB,CACI5rY,EAAS2uB,EAAO/uB,EAAO+njB,EAAmB,MAC1C,IAAIpuS,EAAKqyH,EAAGz3X,WAAW48oB,GAClB1wpB,EAAkBk5Q,KACnB1zM,EAAK+ikB,UAAUrvX,EAAIouS,EAAiB,MAAEopG,GAAWppG,EAAmB,MACpE/kjB,KAAKwmB,QAAQ8noB,IACTrrlB,KAAM0zM,EAAI95M,OAAQ4D,EAAKjkE,KAAMuojB,EAAmB,UAchEm8F,EAAK7lpB,UAAUkzpB,WAAa,SAAUlxpB,EAAKijE,GACvC,IAGIykf,EADAspG,EAAarupB,KAAKi2E,cAAckqjB,UAEhCiuB,EAASpupB,KAAK61nB,0BAA0B,GACxCwN,EAAc,IAAIzL,GAAY53nB,KAAKshE,eAAgB,KAAMthE,OAIxDvC,EAHLsnjB,EAAcspG,EAAWrnnB,OAAO,SAAUpK,GACtC,OAAO//B,EAASuxpB,EAAQxxnB,EAAEpgC,QAAUa,IACrC,KACoC2C,KAAKgB,QAAQQ,iBAAiB,aAAeujjB,EAAkB,IAAI,KAAKtojB,SAC3GsojB,EAAYl4X,QAAUvsH,EACtBwC,GAAmBiif,EAAa/kjB,KAAKsxnB,uBAAwBvsE,EAAYl4X,SACzEw2c,EAAYnxkB,QAAQ6yf,EAAa/kjB,KAAKg1nB,cAAc,KAY5DksB,EAAK7lpB,UAAU+8oB,iBAAmB,SAAU33W,EAAUknC,GAClD,OAAO3nU,KAAKqhoB,cAAc5gW,GAAUj/R,iBAAiB,cAAcmmU,IAQvEu5U,EAAK7lpB,UAAU48oB,wBAA0B,SAAUx3W,EAAUknC,GACzD,OAAO3nU,KAAKwhoB,qBAAqB/gW,GAAUj/R,iBAAiB,cAAcmmU,EAAc3nU,KAAKi9nB,qBAOjGikB,EAAK7lpB,UAAUmnpB,uBAAyB,SAAUvwoB,GAC9C,OAAOjS,KAAK6/nB,iBAAiBr+nB,iBAAiB,iBAAiByQ,IAKnEivoB,EAAK7lpB,UAAU08oB,oBAAsB,SAAUr4oB,GAC3C,IAAI64R,EAAOv4R,KAAKi2E,cAAckqjB,UAC1Bz/jB,EAAM1gE,KAAKwupB,UAAUj2X,EAAM74R,GAC/B,OAAIM,KAAKi9nB,qBACAv8jB,EACDA,EAAM1gE,KAAKwupB,UAAUxupB,KAAKi2E,cAAcmqjB,iBAAkB1goB,GAI3DghE,GAEXwglB,EAAK7lpB,UAAUmzpB,UAAY,SAAUj2X,EAAM74R,GACvC,IAAK,IAAItB,EAAK,EAAGk9mB,EAAS/iV,EAAMn6R,EAAKk9mB,EAAO7+mB,OAAQ2B,IAAM,CACtD,IAAIsiE,EAAM46iB,EAAOl9mB,GACjB,GAAIsiE,EAAIhhE,MAAQA,EACZ,OAAOghE,EAGf,OAAO,MAKXwglB,EAAK7lpB,UAAU6ipB,cAAgB,WAC3B,OAAOl+oB,KAAKi2E,cAAckqjB,WAK9B+gB,EAAK7lpB,UAAUu+oB,qBAAuB,WAClC,OAAO55oB,KAAKi2E,cAAcmqjB,kBAO9B8gB,EAAK7lpB,UAAUozpB,uBAAyB,SAAU1ioB,GAC9C,OAAO/rB,KAAK0upB,qBAAqB1upB,KAAK00nB,iBAAiB3omB,GAAOrsB,MAOlEwhpB,EAAK7lpB,UAAUqzpB,qBAAuB,SAAUhvpB,GAC5C,OAAOM,KAAK2+nB,mBAAmBh8nB,cAAc,iBAAmBjD,EAAM,KAAK2U,eAK/E6soB,EAAK7lpB,UAAU40oB,iBAAmB,SAAUh+nB,GACxC,IAAI4qD,EAKJ,OAJA78D,KAAKg1nB,aAAa54lB,KAAK,SAAUqkC,EAAKtkE,GAElC,OADA0gE,EAAS4D,EACFtkE,IAAM8V,IAEV4qD,GAOXqklB,EAAK7lpB,UAAUq5nB,iBAAmB,SAAU3omB,GACxC,OAAOmxC,GAAqBl9D,KAAKg1nB,aAAc,SAAUn3mB,EAAM5L,GAC3D,GAAI4L,EAAKkO,QAAUA,EACf,OAAOlO,IAGZ,IAOPqjoB,EAAK7lpB,UAAUw+nB,sBAAwB,SAAU9tmB,GAE7C,IAAK,IADDommB,EAAOnynB,KAAKg1nB,aACP74nB,EAAI,EAAGA,EAAIg2nB,EAAK11nB,OAAQN,IAC7B,GAAIg2nB,EAAKh2nB,GAAG4vB,QAAUA,EAClB,OAAO5vB,EAGf,OAAQ,GAOZ+kpB,EAAK7lpB,UAAUymoB,eAAiB,SAAUpioB,GACtC,OAAOw9D,GAAqBl9D,KAAKg1nB,aAAc,SAAUn3mB,EAAM5L,GAC3D,GAAI4L,EAAKne,MAAQA,EACb,OAAOme,IAGZ,IAOPqjoB,EAAK7lpB,UAAUqpoB,oBAAsB,SAAUhloB,GAC3C,IAAIuS,EAAQirD,GAAqBl9D,KAAKg1nB,aAAc,SAAUn3mB,EAAM5L,GAChE,GAAI4L,EAAKne,MAAQA,EACb,OAAOuS,IAGZ,GACH,OAAQxU,EAAkBwU,IAAkB,EAATA,GAOvCivoB,EAAK7lpB,UAAUszpB,oBAAsB,SAAU5ioB,GAC3C,OAAOmxC,GAAqBl9D,KAAKg1nB,aAAc,SAAUn3mB,EAAM5L,GAC3D,GAAI4L,EAAKkO,QAAUA,EACf,OAAOlO,EAAKne,MAGjB,IAQPwhpB,EAAK7lpB,UAAU2loB,yBAA2B,SAAUthoB,GAChD,IAAIuS,EAAQjS,KAAK0koB,oBAAoBhloB,GAWrC,OAVIM,KAAK8mnB,gBACL70mB,GAASjS,KAAKy0nB,cAAc12jB,QAAQthE,QAEpCuD,KAAKgkpB,YACL/xoB,IAMGA,GAMXivoB,EAAK7lpB,UAAUuzpB,oBAAsB,WAGjC,IAAK,IADD/xlB,EADAgylB,KAEK1ypB,EAAI,EAAG0F,EAAM7B,KAAKg1nB,aAAav4nB,OAAQN,EAAI0F,EAAK1F,KACrD0gE,EAAS78D,KAAKg1nB,aAAa74nB,IAChBq7B,SACPq3nB,EAAYrqpB,KAAKq4D,EAAO9wC,OAGhC,OAAO8ioB,GAOX3N,EAAK7lpB,UAAUqkoB,eAAiB,WAC5B,OAAO1/nB,KAAKqrpB,eAOhBnK,EAAK7lpB,UAAUyzpB,kBAAoB,WAC/B,OAAO9upB,KAAKsrpB,kBAMhBpK,EAAK7lpB,UAAUw6nB,wBAA0B,WACrC,IAAIv4nB,KAMJ,OALA0C,KAAK2spB,YAAYvtpB,QAAQ,SAAUy9D,GAC3BA,EAAOgE,cACPvjE,EAAKkH,KAAKq4D,EAAO9wC,SAGlBzuB,GAKX4jpB,EAAK7lpB,UAAU62D,QAAU,WACrBlyD,KAAKorpB,aAAavmB,YAClB7koB,KAAKoqpB,sBACLpqpB,KAAK+ppB,aAAa73lB,WAKtBgvlB,EAAK7lpB,UAAUigpB,cAAgB,WAC3Bt7oB,KAAKorpB,aAAavmB,aAMtBqc,EAAK7lpB,UAAU0zpB,gBAAkB,WAC7B,OAAO/upB,KAAKmtU,gBAAkBntU,KAAKmtU,gBAAgBymU,oBAMvDsN,EAAK7lpB,UAAUi9nB,sBAAwB,WACnC,OAAOt4nB,KAAKmtU,gBAAkBntU,KAAKmtU,gBAAgBumU,uBAMvDwN,EAAK7lpB,UAAUwnpB,0BAA4B,WACvC,OAAO7ipB,KAAKmtU,gBAAgBwmU,wBAMhCuN,EAAK7lpB,UAAU4ipB,mBAAqB,WAChC,OAAOj+oB,KAAKmtU,gBAAgB8wU,sBAMhCiD,EAAK7lpB,UAAU2gpB,cAAgB,WAC3B,OAAOh8oB,KAAK+ppB,aAAavtpB,MAQ7B0kpB,EAAK7lpB,UAAU2zpB,YAAc,SAAU1xpB,EAAMuhpB,GACzCA,EAASA,GAAkB,aAC3B7+oB,KAAK0qpB,UAAUzmiB,KAAK3mH,EAAMuhpB,IAQ9BqC,EAAK7lpB,UAAU4zpB,YAAc,SAAU3xpB,EAAMyhpB,GACzCA,EAASA,GAAkB,aAC3B/+oB,KAAK0qpB,UAAUnpkB,KAAKjkF,EAAMyhpB,IAK9BmC,EAAK7lpB,UAAU4hoB,iBAAmB,WAC9B,OAAOj9nB,KAAKukoB,cAAgBvkoB,KAAKkvpB,eAAelvpB,KAAK+9D,QAAS,IAKlEmjlB,EAAK7lpB,UAAU8zpB,wBAA0B,WACrC,OAAOnvpB,KAAKovpB,+BAAiCpvpB,KAAKqvpB,sBAAsBrvpB,KAAK+9D,QAAS,IAE1FmjlB,EAAK7lpB,UAAU+zpB,6BAA+B,WAG1C,IAAK,IAFDE,EAAuB,EACvB7ulB,EAAMzgE,KAAK+9D,QACN5hE,EAAI,EAAGA,EAAI6D,KAAKukoB,cAAepooB,IAChCskE,EAAItkE,GAAGq7B,SACP83nB,IAGR,OAAOA,GAEXpO,EAAK7lpB,UAAUg0pB,sBAAwB,SAAUl9B,EAAMvinB,GACnD,IAAK,IAAIzT,EAAI,EAAG0F,EAAMswnB,EAAK11nB,OAAQN,EAAI0F,EAAK1F,IACpCg2nB,EAAKh2nB,GAAG4hE,QACRnuD,EAAM5P,KAAKqvpB,sBAAsBl9B,EAAKh2nB,GAAG4hE,QAASnuD,GAG9CuinB,EAAKh2nB,GAAG+goB,UAAY/K,EAAKh2nB,GAAGq7B,SAC5B5nB,IAIZ,OAAOA,GAEXsxoB,EAAK7lpB,UAAU6zpB,eAAiB,SAAU/8B,EAAMvinB,GAC5C,IAAK,IAAIzT,EAAI,EAAG0F,EAAMswnB,EAAK11nB,OAAQN,EAAI0F,EAAK1F,IACpCg2nB,EAAKh2nB,GAAG4hE,QACRnuD,EAAM5P,KAAKkvpB,eAAe/8B,EAAKh2nB,GAAG4hE,QAASnuD,GAGvCuinB,EAAKh2nB,GAAG+goB,UACRttnB,IAIZ,OAAOA,GAOXsxoB,EAAK7lpB,UAAUgniB,SAAW,SAAUktH,GAChCvvpB,KAAKwvpB,YAAYntH,SAASktH,IAO9BrO,EAAK7lpB,UAAUo0pB,sBAAwB,SAAU9upB,GAC7CX,KAAKwvpB,YAAYC,sBAAsB9upB,IAS3CugpB,EAAK7lpB,UAAUq0pB,WAAa,SAAUjgC,EAAYj6lB,EAAWm6nB,GACzD3vpB,KAAK4vpB,WAAWF,WAAWjgC,EAAYj6lB,EAAWm6nB,IAMtDzO,EAAK7lpB,UAAUw0pB,aAAe,WAC1B7vpB,KAAK4vpB,WAAWC,gBAQpB3O,EAAK7lpB,UAAUy0pB,iBAAmB,SAAU/joB,GACxC/rB,KAAK4vpB,WAAWE,iBAAiB/joB,IAgBrCm1nB,EAAK7lpB,UAAU00pB,eAAiB,SAAU3vlB,EAAW4vlB,EAAgBC,EAAa9ylB,EAAW6G,EAAWmrF,EAAc+ggB,EAAmBC,GACrInwpB,KAAKuspB,aAAawD,eAAe3vlB,EAAW4vlB,EAAgBC,EAAa9ylB,EAAW6G,EAAWmrF,EAAc+ggB,EAAmBC,IAMpIjP,EAAK7lpB,UAAU+0pB,eAAiB,WAC5BpwpB,KAAKuspB,aAAa6D,kBAStBlP,EAAK7lpB,UAAUg1pB,0BAA4B,SAAUtkoB,EAAOukoB,GACxDtwpB,KAAKuspB,aAAa8D,0BAA0BtkoB,EAAOukoB,IAQvDpP,EAAK7lpB,UAAUoniB,UAAY,SAAUxwhB,EAAOqsG,GACxCt+G,KAAKmtU,gBAAgBs1N,UAAUxwhB,EAAOqsG,IAO1C4iiB,EAAK7lpB,UAAU+6oB,WAAa,SAAUE,GAClCt2oB,KAAKmtU,gBAAgBipU,WAAWE,IAMpC4K,EAAK7lpB,UAAUk+Z,eAAiB,WAC5Bv5Z,KAAKmtU,gBAAgBosF,kBAQzB2nP,EAAK7lpB,UAAUwniB,WAAa,SAAUhqQ,EAAWv6K,GAC7Ct+G,KAAKmtU,gBAAgB01N,WAAWhqQ,EAAWv6K,IAS/C4iiB,EAAK7lpB,UAAU+zJ,OAAS,SAAUmvf,GAC9Bv+oB,KAAKokf,aAAah1V,OAAOmvf,IAQ7B2C,EAAK7lpB,UAAU0F,MAAQ,WACnBf,KAAKqif,YAAYthf,SAQrBmgpB,EAAK7lpB,UAAUk1pB,aAAe,SAAUC,EAAWh0pB,GAC/CwD,KAAK+0oB,WAAWwb,aAAaC,EAAWh0pB,IAM5C0kpB,EAAK7lpB,UAAU6sb,UAAY,WACvBlob,KAAK+0oB,WAAW7sN,aAKpBg5N,EAAK7lpB,UAAU6oa,QAAU,WACrBlka,KAAK+0oB,WAAW7wO,WAKpBg9O,EAAK7lpB,UAAUo1pB,UAAY,WACvBzwpB,KAAK+0oB,WAAW0b,aAQpBvP,EAAK7lpB,UAAUq1pB,UAAY,SAAUl0pB,EAAMyV,GACvCjS,KAAK+0oB,WAAW2b,UAAUl0pB,EAAMyV,IAMpCivoB,EAAK7lpB,UAAUkogB,UAAY,SAAUv6H,GACjChpY,KAAK+0oB,WAAWxxI,UAAUv6H,IAM9Bk4Q,EAAK7lpB,UAAUkE,KAAO,SAAU4ipB,GAC5BnipB,KAAK2wpB,gBAAgBpxpB,KAAK4ipB,IAK9BjB,EAAK7lpB,UAAUu1pB,kBAAoB,WAC/B,GAAK5wpB,KAAK6/nB,iBAAiBl9nB,cAAc,kBAGnC3C,KAAKy0nB,cAAc12jB,QAAQthE,QAAWuD,KAAKgkpB,cAC7ChkpB,KAAK6/nB,iBAAiBl9nB,cAAc,gBAAgBkQ,aAAa,oBAChE7S,KAAK+soB,kBAFV,CAKA,IAAI8jB,EAAc7wpB,KAAK6/nB,iBAAiBl9nB,cAAc,gBAAgB0R,cAAczP,YAChFkooB,KAAezroB,MAAMC,KAAKtB,KAAK6/nB,iBAAiBl9nB,cAAc,YAAY4O,YAC1E27nB,KAAgB7roB,MAAMC,KAAKtB,KAAK+soB,kBAAkBpqoB,cAAc,YAAY4O,YAC5Eu/oB,EAAWD,EAAc,GACzB10pB,EAAI,EAOR,IANI20pB,GAAY,IACZD,EAAe,GAAKC,GAEpB9wpB,KAAK82nB,6BACL+5B,EAAc,IAEX10pB,EAAI6D,KAAKy0nB,cAAc12jB,QAAQthE,QAClCqwoB,EAAU3woB,GAAGuI,MAAMsR,MAAQ66oB,EAAc,KACzC3jB,EAAW/woB,GAAGuI,MAAMsR,MAAQ66oB,EAAc,KAC1C7wpB,KAAK+N,OAAOgjpB,IAA6B9+oB,MAAO9V,EAAG6Z,MAAO66oB,IAC1D10pB,IAEA6D,KAAKgkpB,aACLlX,EAAU3woB,GAAGuI,MAAMsR,MAAQ66oB,EAAc,KACzC3jB,EAAW/woB,GAAGuI,MAAMsR,MAAQ66oB,EAAc,KAC1C7wpB,KAAK+N,OAAOgjpB,IAA6B9+oB,MAAO9V,EAAG6Z,MAAO66oB,KAE9D7wpB,KAAK6/nB,iBAAiBl9nB,cAAc,gBAAgBa,aAAa,kBAAmB,UAQxF09oB,EAAK7lpB,UAAU21pB,eAAiB,SAAUC,EAAWC,GACjDlxpB,KAAKmxpB,cAAcH,eAAeC,EAAWC,IAyBjDhQ,EAAK7lpB,UAAU+1pB,eAAiB,SAAU9hgB,GACtCtvJ,KAAKqxpB,aAAaD,eAAe9hgB,IAKrC4xf,EAAK7lpB,UAAUi2pB,oBAAsB,SAAUvkpB,EAAGC,EAAG7F,GACjDnH,KAAKuxpB,oBAAoBC,oBAAoBzkpB,EAAGC,EAAG7F,IAEvD+5oB,EAAK7lpB,UAAUmib,mBAAqB,WAChCx9a,KAAKshE,eAAe01V,SAAS,eAAgBh3Z,KAAKmioB,aAAe,IAAIuK,GAAmB1soB,OACxFA,KAAKshE,eAAe01V,SAAS,sBAAuB,IAAIq1O,IACxDrsoB,KAAKshE,eAAe01V,SAAS,kBAAmB,IAAIu1O,IACpDvsoB,KAAKshE,eAAe01V,SAAS,eAAgBh3Z,KAAK04E,UAAY,IAAI8+B,GAAKx3G,KAAKu/B,gBAAiBv/B,KAAK29a,cAAe39a,KAAKgO,SACtHhO,KAAKshE,eAAe01V,SAAS,iBAAkBh3Z,KAAKyxpB,sBAAwB,IAAI32C,GAAe96mB,KAAKgO,SACpGhO,KAAKshE,eAAe01V,SAAS,kBAAmBh3Z,KAAK0qpB,UAAY,IAAI9L,GAAS5+oB,OAC9EA,KAAKshE,eAAe01V,SAAS,cAAeh3Z,KAAK88nB,YAAc,IAAI2J,IACnEzmoB,KAAKshE,eAAe01V,SAAS,QAASh3Z,KAAK+qpB,YAAc,IAAIrd,GAAc1toB,QAE/EkhpB,EAAK7lpB,UAAU4upB,aAAe,WAC1B,IAGIv7jB,EACAnrE,EAJAxjB,EAAQC,KACR0xpB,EAAQ1xpB,KAAKy0nB,cAAc12jB,QAC3B4zlB,EAAQ3xpB,KAAKgvnB,aAAajxjB,QAG9B,GAAI/9D,KAAK8mnB,cA2BL,IAAK,IA1BD7nnB,EAAU,SAAU9C,EAAG0F,GACvB0hB,EAAI,EACJ,IAAK,IAAIquoB,EAAOD,EAAMl1pB,OAAQ8mB,EAAIquoB,EAAMruoB,IACpC,GAAIouoB,EAAMpuoB,GAAGwI,QAAU2loB,EAAMv1pB,GAAI,CAC7BuyF,GAAO,EACP,MAcR,GAXKA,EAIG6e,EAAOq5gB,aACPr5gB,EAAO6gD,cAAc5pJ,KAAKmtpB,EAAMpuoB,GAAGwI,OAGnC4loB,EAAMpuoB,GAAGiS,UAAY,YAPzBm8nB,EAAMntpB,MAAOunB,MAAO2loB,EAAMv1pB,GAAIq5B,UAAW,eAUxC+3E,EAAOknhB,cAAco9B,kBAAmB,EAC5BtkjB,EAAOuphB,2BAChBvphB,EAAOxvC,QAAQ/2B,OAAO,SAAUi3B,GAAK,OAAOA,EAAElyC,QAAU2loB,EAAMv1pB,KAAO,GAAKoxG,EAAOmnhB,iBAAiBg9B,EAAMv1pB,KACrGq7B,SAAU,IAGrB+1E,EAASvtG,KACJ7D,EAAI,EAAG0F,EAAM6vpB,EAAMj1pB,OAAQN,EAAI0F,EAAK1F,IACzC8C,EAAQ9C,GAUhB,GAPKu1pB,EAAMj1pB,QACPk1pB,EAAMvypB,QAAQ,SAAUqhE,GACpB1gE,EAAMquJ,cAAc5pJ,KAAKi8D,EAAI10C,SAGrC/rB,KAAKqrpB,cAAgBhulB,GAAiBr9D,KAAK63nB,aAC3C73nB,KAAKsrpB,iBAAmBjulB,GAAiBr9D,KAAKo5nB,iBACzC37nB,EAAkBuC,KAAK8xpB,eAAgB,CACxC,IAAI90pB,EAAQS,EAAkBuC,KAAK8xpB,cAAcC,qBAAuB,YACpE/xpB,KAAK8xpB,cAAcC,oBACvB/xpB,KAAK07D,MAAMmI,MAAM7jE,KAAK46D,YAAa,QAAS59D,GAAO,GAEvDgD,KAAKgypB,qBAET9Q,EAAK7lpB,UAAU22pB,kBAAoB,WAC3BhypB,KAAKwkpB,oBAAoBxkpB,KAAKg1nB,eAC9Bh1nB,KAAK+N,OAAOkkpB,GAA6BjypB,KAAKsxnB,yBAGtD4vB,EAAK7lpB,UAAU6upB,WAAa,WACxBlqpB,KAAKwrpB,YACDxrpB,KAAKsspB,aACLtspB,KAAKgB,QAAQ8C,UAAUM,IAAI,eAE3BoH,GAAQkb,UACR1mB,KAAKgB,QAAQ8C,UAAUM,IAAI,YAE3BpE,KAAKggE,WACLhgE,KAAKgB,QAAQ8C,UAAUM,IAAI,qBAE/BN,EAAU9D,KAAKgB,SAAU,eAAgB,iBACzC,IAAIkxpB,EAAkBlypB,KAAKshE,eAAeE,WAAW,mBACrDxhE,KAAKorpB,aAAe8G,EAAgBjpB,YAAYnb,GAAWjvU,QAC3D7+S,KAAKi2E,cAAgBi8kB,EAAgBjpB,YAAYnb,GAAWqb,SAC5DnpoB,KAAKqif,YAAc,IAAI3B,GAAM1gf,KAAMA,KAAK2qS,cACxC3qS,KAAK2wpB,gBAAkB,IAAI9O,GAAU7hpB,MACrCA,KAAK+ppB,aAAah+iB,SAClB/rG,KAAK4qpB,mBACL5qpB,KAAKmypB,yBACLnypB,KAAKmioB,aAAa2C,oBAClB9koB,KAAK+rpB,kBACL/rpB,KAAKispB,gBACLjspB,KAAKo1B,iBAET8rnB,EAAK7lpB,UAAUkvnB,UAAY,WACvBvqnB,KAAK2qS,aAAahsK,WAClB3+H,KAAK2qS,aAAaujB,YACE,SAAhBluT,KAAK+V,QACL/V,KAAK2qS,aAAa80W,cAG1ByB,EAAK7lpB,UAAUmwpB,UAAY,WACnBxrpB,KAAKkT,UACLlT,KAAKgB,QAAQ8C,UAAUM,IAAI,SAG3BpE,KAAKgB,QAAQ8C,UAAUS,OAAO,UAGtC28oB,EAAK7lpB,UAAU82pB,uBAAyB,WACpC,IAAIvzlB,EAAQz9D,EAAc,OAASkC,UAAW,cAAeE,OAAQ,kBACjE62B,EAAUj5B,EAAc,OAASkC,UAAW,YAAaI,OAASwlH,SAAU,QAChF7jH,GAAQg1B,EAASj5B,EAAc,OAASkC,UAAW,qBAAuBu7D,GAC1ExkC,EAAQz4B,YAAYR,EAAc,SAClCiE,GAAQg1B,EAASj5B,EAAc,OAASkC,UAAW,uBAAyBu7D,GAC5E5+D,KAAKgB,QAAQW,YAAYi9D,IAE7BsilB,EAAK7lpB,UAAU0wpB,gBAAkB,WAE7B,OADAjopB,EAAU9D,KAAKgB,YAAc,kBAAmB,oBAAqB,cAAe,gBAC5EhB,KAAKotX,WACT,IAAK,aACDptX,KAAKgB,QAAQ8C,UAAUM,IAAI,qBAC3B,MACJ,IAAK,WACDpE,KAAKgB,QAAQ8C,UAAUM,IAAI,mBAC3B,MACJ,IAAK,OACDpE,KAAKgB,QAAQ8C,UAAUM,IAAI,eAC3B,MACJ,IAAK,OACDpE,KAAKgB,QAAQ8C,UAAUM,IAAI,eAGnCpE,KAAK8rpB,qBAET5K,EAAK7lpB,UAAUywpB,kBAAoB,WAC3B9rpB,KAAK6mnB,eACgB,aAAnB7mnB,KAAKotX,WAA+C,SAAnBptX,KAAKotX,UACxCptX,KAAKgB,QAAQ8C,UAAUM,IAAI,kBAG3BpE,KAAKgB,QAAQ8C,UAAUS,OAAO,mBAQtC28oB,EAAK7lpB,UAAU4wpB,cAAgB,WAC3B,GAAIjspB,KAAKq9nB,cAAe,CACpB,IAAIgI,KAAgBhkoB,MAAMC,KAAKtB,KAAKgB,QAAQQ,iBAAiB,oBAC7D,OAAQxB,KAAKiloB,iBAAiBC,UAC1B,IAAK,SACDpqnB,GAAK9a,KAAKgB,SAAS,GACnB8Z,GAAK9a,KAAKy0C,cAAc,GACxB35B,GAAKuqnB,GAAY,GACjB,MACJ,IAAK,UACDvqnB,GAAK9a,KAAKy0C,cAAc,GACxB35B,GAAK9a,KAAKgB,SAAS,GACnB8Z,GAAKuqnB,GAAY,GACjB,MACJ,QACIvqnB,GAAK9a,KAAKgB,SAAS,GACnB8Z,GAAK9a,KAAKy0C,cAAc,GACxB35B,GAAKuqnB,GAAY,MASjC6b,EAAK7lpB,UAAU6wpB,eAAiB,WAC5BpxoB,GAAK9a,KAAKgB,SAAS,GAEnB8Z,MADoBzZ,MAAMC,KAAKtB,KAAKgB,QAAQQ,iBAAiB,qBAC5C,GACjBsZ,GAAK9a,KAAKy0C,cAAc,IAO5BysmB,EAAK7lpB,UAAU+5B,cAAgB,WAC3Bp1B,KAAK8qpB,WAAa,IAAI90mB,IAAUI,QAAS,SAAUhc,QAAS,IAAMp6B,KAAKgB,UAE3EkgpB,EAAK7lpB,UAAU+2pB,iBAAmB,SAAUpxpB,GACxC,IAAIgV,EACA4snB,EAAc5ioB,KAAK6/nB,iBAInBwyB,GAHerypB,KAAK+soB,kBAGX/soB,KAAK+ujB,YAAY6zE,EAFX,eAEsC,WACrD0vB,EAAStypB,KAAK+ujB,YAAY6zE,EAHX,eAGsC,WAErD3ikB,EAAQ2ikB,EAAYz+nB,SAASnD,GAAWqxpB,EAASC,EACjDtupB,EAAM4+nB,EAAYz+nB,SAASnD,GAAW,KAAO,KAMjD,OALAi/D,EAAMt9D,cAAcqB,GAAKX,UAAYrC,EAAQqC,UAC7C48D,EAAMt9D,cAAcqB,GAAKhC,UAAYhB,EAAQgB,UAC7CgU,EAAQiqD,EAAMt9D,cAAcqB,GAAK4H,wBAAwBoK,MACzDxV,SAASuL,KAAKzG,YAAY+spB,GAC1B7xpB,SAASuL,KAAKzG,YAAYgtpB,GACtBt8oB,EAAQhV,EAAQ4K,wBAAwBoK,OAKhDkroB,EAAK7lpB,UAAUg5U,iBAAmB,SAAUxzU,GACxC,GAAIb,KAAKuypB,oBAAqB,CAC1B,IAAIvxpB,EAAU6yC,GAAahzC,EAAEsG,OAAQ,qBACrC,GAAInG,EAAS,CACT,GAAIA,EAAQ6R,aAAa,oBACrB,OAEA7S,KAAKoypB,iBAAiBpxpB,IAClBA,EAAQ0M,uBAAuB,gBAAgBjR,OAC/CuD,KAAK8qpB,WAAW1wnB,QAAUp5B,EAAQ0M,uBAAuB,gBAAgB,GAAGutD,UAG5Ej7D,KAAK8qpB,WAAW1wnB,QAAUp5B,EAAQi6D,UAEtCj7D,KAAK8qpB,WAAWpppB,KAAKV,IAGrBhB,KAAK8qpB,WAAW7opB,aAIpBjC,KAAK8qpB,WAAW7opB,UAI5Bi/oB,EAAK7lpB,UAAUk3pB,kBAAoB,WAE/B,IAAK,IADDpgC,EAAOnynB,KAAKg1nB,aACP74nB,EAAI,EAAGA,EAAIg2nB,EAAK11nB,OAAQN,IAC7B,GAAyB,wBAArBg2nB,EAAKh2nB,GAAGoqoB,SACR,OAAO,EAGf,OAAO,GAEX2a,EAAK7lpB,UAAUk0H,cAAgB,WACvBvvH,KAAKuypB,qBACLvypB,KAAK8qpB,WAAW7opB,SAOxBi/oB,EAAK7lpB,UAAU0zjB,YAAc,SAAU9uf,EAAOvuD,EAAKhL,GAC/C,IAAI8rpB,EAAarxpB,EAAc,OAC/BqxpB,EAAWnvpB,UAAYrD,KAAKgB,QAAQqC,UACpCmvpB,EAAW9tpB,MAAMo7D,QAAU,4DAC3B,IAAI2ylB,EAAWtxpB,EAAc,OAC7BsxpB,EAASpvpB,UAAYqO,EACrB,IAAIghpB,EAAUvxpB,EAAc,SAC5BuxpB,EAAQrvpB,UAAY48D,EAAM58D,UAC1BqvpB,EAAQhupB,MAAMo7D,QAAU,iCACxB,IAAI97D,EAAgB,WAAT0C,EAAqB,KAAO,KACnCispB,EAAOxxpB,EAAc,MACrByxpB,EAAOzxpB,EAAc6C,GAMzB,OALA2upB,EAAKhxpB,YAAYixpB,GACjBF,EAAQ/wpB,YAAYgxpB,GACpBF,EAAS9wpB,YAAY+wpB,GACrBF,EAAW7wpB,YAAY8wpB,GACvBjypB,SAASuL,KAAKpK,YAAY6wpB,GACnBA,GAMXtR,EAAK7lpB,UAAUkpB,WAAa,WACxBhf,GAAanB,IAAIpE,KAAKgB,QAAS,QAAShB,KAAK6ypB,kBAAmB7ypB,MAChEuF,GAAanB,IAAIpE,KAAKgB,QAAS,WAAYhB,KAAK6ypB,kBAAmB7ypB,MACnEuF,GAAanB,IAAIpE,KAAKgB,QAAS,WAAYhB,KAAKo/G,gBAAiBp/G,MACjEuF,GAAanB,IAAIpE,KAAKy0C,aAAc,WAAYz0C,KAAK8ypB,gBAAiB9ypB,MAClEA,KAAK+ypB,gBACL/ypB,KAAKgB,QAAQioH,UAAsC,IAA3BjpH,KAAKgB,QAAQioH,SAAkB,EAAIjpH,KAAKgB,QAAQioH,UAE5EjpH,KAAK+5I,eAAiB,IAAI3jC,GAAep2G,KAAKgB,SAC1Ck2G,UAAWl3G,KAAKg6I,iBAAiB1+I,KAAK0E,MACtC42G,WAAY52G,KAAK42G,WACjB/mC,UAAW,YAEftqE,GAAanB,IAAIpE,KAAKy0C,aAAatvC,kBAAmB,SAAUnF,KAAKuvH,cAAevvH,MACpFuF,GAAanB,IAAIpE,KAAKgB,QAAS,YAAahB,KAAKq0U,iBAAkBr0U,OAMvEkhpB,EAAK7lpB,UAAU8pB,aAAe,WAC1B5f,GAAahB,OAAOvE,KAAKgB,QAAS,QAAShB,KAAK6ypB,mBAChDttpB,GAAahB,OAAOvE,KAAKgB,QAAS,WAAYhB,KAAK6ypB,mBACnDttpB,GAAahB,OAAOvE,KAAKgB,QAAS,WAAYhB,KAAKo/G,iBACnD75G,GAAahB,OAAOvE,KAAKy0C,aAAatvC,kBAAmB,SAAUnF,KAAKuvH,eACxEhqH,GAAahB,OAAOvE,KAAKgB,QAAS,YAAahB,KAAKq0U,mBAKxD6sU,EAAK7lpB,UAAU8upB,YAAc,WACrBnqpB,KAAKgnF,cAGThnF,KAAK4lF,GAAGoljB,GAAkBhroB,KAAKuqnB,UAAWvqnB,MAC1CA,KAAK4lF,GAAGu3iB,GAAqBn9nB,KAAK4wpB,kBAAmB5wpB,MACrDA,KAAK4lF,GAAG88iB,GAAwB1ioB,KAAK4wpB,kBAAmB5wpB,MACxDA,KAAKgzpB,kBAAoBhzpB,KAAK2qpB,gBAAgBrvpB,KAAK0E,MACnDA,KAAKtD,iBAAiB0goB,GAAkBp9nB,KAAKgzpB,qBAKjD9R,EAAK7lpB,UAAUwvpB,eAAiB,WACxB7qpB,KAAKgnF,cAGThnF,KAAKgmF,IAAIgljB,GAAkBhroB,KAAKuqnB,WAChCvqnB,KAAKgmF,IAAIm3iB,GAAqBn9nB,KAAK4wpB,mBACnC5wpB,KAAKgmF,IAAI08iB,GAAwB1ioB,KAAK4wpB,mBACtC5wpB,KAAKpD,oBAAoBwgoB,GAAkBp9nB,KAAKgzpB,qBAOpD9R,EAAK7lpB,UAAUmvoB,sBAAwB,WACnC,OAAQxqoB,KAAK8mnB,eAAiB9mnB,KAAKy0nB,cAAc12jB,QAAQthE,QAAUuD,KAAKgvU,gBAAgBvyU,OACpFuD,KAAKgvU,gBAAgBt8K,QAAU1yJ,KAAKgvU,iBAE5CkyU,EAAK7lpB,UAAUw3pB,kBAAoB,SAAUhypB,GACrCb,KAAK08R,YAAY77R,IAAOgzC,GAAahzC,EAAEsG,OAAQ,gBAAkBtG,EAAEszC,SACnEn0C,KAAKgB,QAAQQ,iBAAiB,sBAAsB/E,QAAUuD,KAAKizpB,UAAUpypB,MAG1Eb,KAAK46oB,sBAAwB/mmB,GAAahzC,EAAEsG,OAAQ,kBAClC,OAArBtG,EAAEsG,OAAOnE,WAAyBhD,KAAK8mnB,gBAAiB9mnB,KAAK+mnB,iBAC7DlzkB,GAAahzC,EAAEsG,OAAQ,kBAAqBtG,EAAEszC,UAG9CN,GAAahzC,EAAEsG,OAAQ,iBAAmBnH,KAAK46oB,qBAC/C/5oB,EAAE2kB,iBAENxlB,KAAK+N,OAAOuwoB,GAAcz9oB,KAE9BqgpB,EAAK7lpB,UAAU43pB,UAAY,SAAUpypB,GACjC,IAAImoY,EAAKn1V,GAAahzC,EAAEsG,OAAQ,SAC5Bq4lB,EAAoC,UAA3Bx/lB,KAAKihE,aAAaljC,MAC3B/9B,KAAKw/lB,QAAUx2N,IAAOA,EAAGllY,UAAUK,SAAS,gBAAkB6kY,EAAGllY,UAAUK,SAAS,eACxF,OAAQ0vC,GAAahzC,EAAEsG,OAAQ,sBAAwBq4lB,GAAW3rjB,GAAahzC,EAAEsG,OAAQ,cACrF0sC,GAAahzC,EAAEsG,OAAQ,aAAarD,UAAUK,SAAS,uBAE/D+8oB,EAAK7lpB,UAAUy3pB,gBAAkB,SAAUjypB,GACvC,IAAIshE,EAAOtuB,GAAahzC,EAAEsG,OAAQ,UAClC,IAAI1J,EAAkB0kE,IAASA,EAAK7+D,KAAOtD,KAAKgB,QAAQsC,KAAMuC,EAAQhF,EAAEsG,OAAQ,qBAAhF,CAGA,IAAIlH,EAAOD,KAAK8tpB,WAAWjtpB,EAAEsG,QAC7BlH,EAAKkH,OAAStG,EAAEsG,OAChBnH,KAAKwmB,QnCptEkB,oBmCotEgBvmB,GACvCD,KAAK+N,OAAOmlpB,GAAiBrypB,KAEjCqgpB,EAAK7lpB,UAAU+jH,gBAAkB,SAAUv+G,GACvC,IAAIb,KAAK08R,YAAY77R,GAArB,CAGKgzC,GAAahzC,EAAEsG,OAAQ,YACxBnH,KAAKgB,QAAQ2B,cAAc,gBAAgB+B,MAAM4xC,QAAU,QAE/D,IAAI68mB,EAAcnzpB,KAAKgB,QAAQ2B,cAAc,0BACzCwwpB,GACAA,EAAYrvpB,UAAUM,IAAI,UAExBvD,EAAEisI,eAAkBj5F,GAAahzC,EAAEisI,cAAe,WAChD9sI,KAAKozpB,UAAuC,UAA3BpzpB,KAAKihE,aAAaljC,OAAoB/9B,KAAKw/lB,QAAWh0lB,GAAQkb,UACnF1mB,KAAK+0oB,WAAWse,WAEpBrzpB,KAAKozpB,UAAW,IAEpBlS,EAAK7lpB,UAAUqhS,YAAc,SAAU77R,GACnC,IAAI85oB,EAAc9mmB,GAAahzC,EAAEsG,OAAQ,UACzC,SAAIwzoB,GAAeA,EAAYr3oB,KAAOtD,KAAKgB,QAAQsC,KAKvD49oB,EAAK7lpB,UAAUoopB,qBAAuB,WAClC,IAAIjnpB,EAAOX,OAAOwwG,aAAaC,QAAQtsG,KAAKu/B,gBAAkBv/B,KAAKgB,QAAQsC,IAC3E,IAAM7F,EAAkBjB,IAAmB,KAATA,EAAe,CAC7C,IAAI20D,EAAUtB,KAAKuB,MAAM50D,GACrBc,EAAOgB,OAAOhB,KAAK6zD,GACvBnxD,KAAKwmF,qBAAsB,EAC3B,IAAK,IAAIpoF,EAAK,EAAGC,EAASf,EAAMc,EAAKC,EAAO5B,OAAQ2B,IAAM,CACtD,IAAIf,EAAMgB,EAAOD,GACS,iBAAd4B,KAAK3C,IAAuBI,EAAkBuC,KAAK3C,IAU3D2C,KAAK3C,GAAO8zD,EAAQ9zD,GAThBmB,MAAMC,QAAQuB,KAAK3C,KAAiB,YAARA,GAC5B2C,KAAKszpB,aAAanimB,EAAQ9zD,GAAM2C,KAAK3C,IACrC2C,KAAK3C,GAAO8zD,EAAQ9zD,IAGpBqB,EAAOsB,KAAK3C,GAAM8zD,EAAQ9zD,IAOtC2C,KAAKwmF,qBAAsB,IAGnC06jB,EAAK7lpB,UAAUi4pB,aAAe,SAAUC,EAAcx1lB,GAClD,IAAIh+D,EAAQC,KACZuzpB,EAAan0pB,QAAQ,SAAUqhE,EAAKxuD,EAAOi3B,GACvC,IAAIsqnB,EACAC,EAAW1zpB,EAAM20nB,iBAAiBj0jB,EAAI10C,QACtCgyC,EAAQ3hC,KAAK,SAAUp7B,EAAS7E,GAE5B,OADAq3pB,EAAMr3pB,EACC6E,EAAQm9D,aAAesC,EAAItC,cAChCJ,EAAQy1lB,GACb/1pB,EAAkBg2pB,KACfA,EAAS11lB,SAAW01lB,EAAS11lB,QAAQthE,OACrCsD,EAAMuzpB,aAAa7ylB,EAAI1C,QAAS01lB,EAAS11lB,SAGzC70B,EAAIj3B,GAASvT,KAAW+0pB,EAAUhzlB,GAAK,OAKvDyglB,EAAK7lpB,UAAU2opB,SAAW,WACtB,OAAQvmpB,EAAkBuC,KAAKo5nB,kBAAoB37nB,EAAkBuC,KAAK27R,YAE9EulX,EAAK7lpB,UAAU6opB,gBAAkB,SAAUnmlB,GACvC,IAAIh+D,EAAQC,KACZ,OAAO+9D,EAAQ3hC,KAAK,SAAUqkC,GAC1B,OAAIA,EAAI1C,QACGh+D,EAAMmkpB,gBAAgBzjlB,EAAI1C,YAE3B0C,EAAIz4B,WAAYy4B,EAAI6mjB,qBAGtC45B,EAAK7lpB,UAAUmppB,oBAAsB,SAAUzmlB,GAC3C,IAAIh+D,EAAQC,KACZ,OAAO+9D,EAAQ3hC,KAAK,SAAUqkC,GAC1B,OAAIA,EAAI1C,QACGh+D,EAAMykpB,oBAAoB/jlB,EAAI1C,YAE/B0C,EAAI8C,aAAc9C,EAAIrC,oBAGxC8ilB,EAAK7lpB,UAAU2+I,iBAAmB,SAAUn5I,GACxCb,KAAKozpB,UAAW,EACZpzpB,KAAK08R,YAAY77R,IAChBb,KAAKw/lB,QAAuB,WAAb3+lB,EAAEs1D,QAAoC,UAAbt1D,EAAEs1D,QAAmC,eAAbt1D,EAAEs1D,QAC/C,QAAbt1D,EAAEs1D,QAAiC,aAAbt1D,EAAEs1D,QAG/Bn2D,KAAK+ypB,gBACY,cAAblypB,EAAEs1D,SACFt1D,EAAE2kB,iBACFxlB,KAAKe,SAETf,KAAK+N,OAAOi0oB,GAAmBnhpB,KAMvCqgpB,EAAK7lpB,UAAUq4pB,mBAAqB,SAAU7hkB,GAC1C7xF,KAAKmsG,gBAAkBta,GAE3BqvjB,EAAK7lpB,UAAU8vpB,mBAAqB,WAChCrtlB,GAAe99D,KAAK+9D,QAAS/9D,KAAK82nB,4BAClC92nB,KAAKgypB,oBACLhypB,KAAK+N,OAAOq9nB,QAMhB8V,EAAK7lpB,UAAUi2nB,qBAAuB,WAClC,OAAOtxnB,KAAKg1nB,aAAahulB,OAAO,SAAUy5B,GACtC,OAAOA,EAAIgnjB,qBAMnBy5B,EAAK7lpB,UAAU0kE,aAAe,WAC1B,OAAO//D,KAAKggE,UAAYhgE,KAAKggE,UAAYD,GAAa//D,KAAKgB,UAK/DkgpB,EAAK7lpB,UAAUs4pB,eAAiB,WAC5B3zpB,KAAKggpB,sBAAuB,EAC5BhgpB,KAAKmrpB,qBACLnrpB,KAAKkyD,WAUTgvlB,EAAK7lpB,UAAUu4pB,YAAc,SAAUC,EAAuBC,EAE1DC,EAAUC,GACV,OAAOh0pB,KAAKi0pB,kBAAkB/4C,IAAIl7mB,KAAM6zpB,EAAuBC,EAAkBC,GAAU,EAAOC,IAWtG9S,EAAK7lpB,UAAU64pB,UAAY,SAAUL,EAEjCC,EAAkBC,EAAUC,GAC5B,OAAOh0pB,KAAKi0pB,kBAAkB/4C,IAAIl7mB,KAAM6zpB,EAAuBC,EAAkBC,GAAU,EAAMC,IAWrG9S,EAAK7lpB,UAAU84pB,UAAY,SAAUC,EAEjCN,EAAkBO,EAAQL,GAC1B,OAAOh0pB,KAAKs0pB,gBAAgBp5C,IAAIl7mB,KAAMo0pB,EAAqBN,EAAkBO,EAAQL,IAOzF9S,EAAK7lpB,UAAUk5pB,YAAc,SAAU9kC,GACnCzvnB,KAAKw0pB,YAAYD,YAAY9kC,IAOjCyxB,EAAK7lpB,UAAUo5pB,cAAgB,SAAUhlC,GACrCzvnB,KAAKw0pB,YAAYC,cAAchlC,IAKnCyxB,EAAK7lpB,UAAUq5pB,kBAAoB,WAC/B,OAAO10pB,KAAK46e,mBAAqB56e,KAAK46e,kBAAkBpgL,QAK5D0mV,EAAK7lpB,UAAUs5pB,qBAAuB,SAAUxjkB,GAC5C,OAAOnxF,KAAKksG,qBAAqB3tG,QAAQ4yF,IAAW,GAMxD+vjB,EAAK7lpB,UAAUmkoB,gBAAkB,SAAUo1B,GACvC50pB,KAAKysG,cAAcmojB,IAEvB/pkB,IACI3jF,OACDg6oB,EAAK7lpB,UAAW,eAAW,GAC9BwvF,IACI3jF,GAAS,IACVg6oB,EAAK7lpB,UAAW,oBAAgB,GACnCwvF,IACI3jF,GAAS,IACVg6oB,EAAK7lpB,UAAW,mBAAe,GAClCwvF,IACI3jF,GAAS,IACVg6oB,EAAK7lpB,UAAW,qBAAiB,GACpCwvF,IACI3jF,GAAS,IACVg6oB,EAAK7lpB,UAAW,qBAAiB,GACpCwvF,IACI9iF,KAAYq7oB,KACblC,EAAK7lpB,UAAW,wBAAoB,GACvCwvF,IACI3jF,GAAS,IACVg6oB,EAAK7lpB,UAAW,mBAAe,GAClCwvF,IACI9iF,KAAY6uZ,KACbsqP,EAAK7lpB,UAAW,oBAAgB,GACnCwvF,IACI3jF,GAAS,IACVg6oB,EAAK7lpB,UAAW,4BAAwB,GAC3CwvF,IACI3jF,GAAS,IACVg6oB,EAAK7lpB,UAAW,kCAA8B,GACjDwvF,IACI9iF,KAAYm7oB,KACbhC,EAAK7lpB,UAAW,sBAAkB,GACrCwvF,IACI3jF,GAAS,IACVg6oB,EAAK7lpB,UAAW,oBAAgB,GACnCwvF,IACI3jF,GAAS,IACVg6oB,EAAK7lpB,UAAW,yBAAqB,GACxCwvF,IACI3jF,GAAS,IACVg6oB,EAAK7lpB,UAAW,wBAAoB,GACvCwvF,IACI3jF,GAAS,IACVg6oB,EAAK7lpB,UAAW,sBAAkB,GACrCwvF,IACI9iF,KAAYg7oB,KACb7B,EAAK7lpB,UAAW,oBAAgB,GACnCwvF,IACI3jF,GAAS,IACVg6oB,EAAK7lpB,UAAW,sBAAkB,GACrCwvF,IACI3jF,GAAU,IACXg6oB,EAAK7lpB,UAAW,wBAAoB,GACvCwvF,IACI9iF,KAAYk7oB,KACb/B,EAAK7lpB,UAAW,yBAAqB,GACxCwvF,IACI3jF,GAAS,IACVg6oB,EAAK7lpB,UAAW,sBAAkB,GACrCwvF,IACI3jF,GAAS,IACVg6oB,EAAK7lpB,UAAW,uBAAmB,GACtCwvF,IACI3jF,GAAS,IACVg6oB,EAAK7lpB,UAAW,qBAAiB,GACpCwvF,IACI3jF,GAAS,IACVg6oB,EAAK7lpB,UAAW,2BAAuB,GAC1CwvF,IACI9iF,KAAYo7oB,KACbjC,EAAK7lpB,UAAW,uBAAmB,GACtCwvF,IACI9iF,KAAYi7oB,KACb9B,EAAK7lpB,UAAW,sBAAkB,GACrCwvF,IACI3jF,GAAS,IACVg6oB,EAAK7lpB,UAAW,qBAAiB,GACpCwvF,IACI3jF,GAAS,IACVg6oB,EAAK7lpB,UAAW,sBAAkB,GACrCwvF,IACI9iF,KAAYs7oB,KACbnC,EAAK7lpB,UAAW,qBAAiB,GACpCwvF,IACI9iF,KAAYu7oB,KACbpC,EAAK7lpB,UAAW,oBAAgB,GACnCwvF,IACIxiF,KAAeu5oB,KAChBV,EAAK7lpB,UAAW,kBAAc,GACjCwvF,IACI3jF,GAAS,IACVg6oB,EAAK7lpB,UAAW,yBAAqB,GACxCwvF,IACI3jF,EAAS,SACVg6oB,EAAK7lpB,UAAW,cAAU,GAC7BwvF,IACI3jF,EAAS,SACVg6oB,EAAK7lpB,UAAW,aAAS,GAC5BwvF,IACI3jF,EAAS,YACVg6oB,EAAK7lpB,UAAW,iBAAa,GAChCwvF,IACI3jF,KACDg6oB,EAAK7lpB,UAAW,mBAAe,GAClCwvF,IACI3jF,KACDg6oB,EAAK7lpB,UAAW,sBAAkB,GACrCwvF,IACI3jF,KACDg6oB,EAAK7lpB,UAAW,iBAAa,GAChCwvF,IACI3jF,KACDg6oB,EAAK7lpB,UAAW,mBAAe,GAClCwvF,IACI3jF,EAAS,aACVg6oB,EAAK7lpB,UAAW,iBAAa,GAChCwvF,IACI3jF,OACDg6oB,EAAK7lpB,UAAW,kBAAc,GACjCwvF,IACI3jF,EAAS,OACVg6oB,EAAK7lpB,UAAW,iBAAa,GAChCwvF,IACI3jF,KACDg6oB,EAAK7lpB,UAAW,aAAS,GAC5BwvF,IACI3jF,EAAS,QACVg6oB,EAAK7lpB,UAAW,oBAAgB,GACnCwvF,IACI3jF,KACDg6oB,EAAK7lpB,UAAW,eAAW,GAC9BwvF,IACI3jF,KACDg6oB,EAAK7lpB,UAAW,wBAAoB,GACvCwvF,IACI3jF,KACDg6oB,EAAK7lpB,UAAW,uBAAmB,GACtCwvF,IACI3jF,KACDg6oB,EAAK7lpB,UAAW,uBAAmB,GACtCwvF,IACI3jF,KACDg6oB,EAAK7lpB,UAAW,qBAAiB,GACpCwvF,IACI3jF,EAAS,IACVg6oB,EAAK7lpB,UAAW,kBAAc,GACjCwvF,IACI3jF,EAAS,IACVg6oB,EAAK7lpB,UAAW,qBAAiB,GACpCwvF,IACI/hF,KACDo4oB,EAAK7lpB,UAAW,eAAW,GAC9BwvF,IACI/hF,KACDo4oB,EAAK7lpB,UAAW,iBAAa,GAChCwvF,IACI/hF,KACDo4oB,EAAK7lpB,UAAW,YAAQ,GAC3BwvF,IACI/hF,KACDo4oB,EAAK7lpB,UAAW,oBAAgB,GACnCwvF,IACI/hF,KACDo4oB,EAAK7lpB,UAAW,qBAAiB,GACpCwvF,IACI/hF,KACDo4oB,EAAK7lpB,UAAW,sBAAkB,GACrCwvF,IACI/hF,KACDo4oB,EAAK7lpB,UAAW,mBAAe,GAClCwvF,IACI/hF,KACDo4oB,EAAK7lpB,UAAW,sBAAkB,GACrCwvF,IACI/hF,KACDo4oB,EAAK7lpB,UAAW,qBAAiB,GACpCwvF,IACI/hF,KACDo4oB,EAAK7lpB,UAAW,iBAAa,GAChCwvF,IACI/hF,KACDo4oB,EAAK7lpB,UAAW,yBAAqB,GACxCwvF,IACI/hF,KACDo4oB,EAAK7lpB,UAAW,oBAAgB,GACnCwvF,IACI/hF,KACDo4oB,EAAK7lpB,UAAW,mBAAe,GAClCwvF,IACI/hF,KACDo4oB,EAAK7lpB,UAAW,sBAAkB,GACrCwvF,IACI/hF,KACDo4oB,EAAK7lpB,UAAW,qBAAiB,GACpCwvF,IACI/hF,KACDo4oB,EAAK7lpB,UAAW,qBAAiB,GACpCwvF,IACI/hF,KACDo4oB,EAAK7lpB,UAAW,oBAAgB,GACnCwvF,IACI/hF,KACDo4oB,EAAK7lpB,UAAW,uBAAmB,GACtCwvF,IACI/hF,KACDo4oB,EAAK7lpB,UAAW,sBAAkB,GACrCwvF,IACI/hF,KACDo4oB,EAAK7lpB,UAAW,uBAAmB,GACtCwvF,IACI/hF,KACDo4oB,EAAK7lpB,UAAW,kBAAc,GACjCwvF,IACI/hF,KACDo4oB,EAAK7lpB,UAAW,kBAAc,GACjCwvF,IACI/hF,KACDo4oB,EAAK7lpB,UAAW,qBAAiB,GACpCwvF,IACI/hF,KACDo4oB,EAAK7lpB,UAAW,mBAAe,GAClCwvF,IACI/hF,KACDo4oB,EAAK7lpB,UAAW,wBAAoB,GACvCwvF,IACI/hF,KACDo4oB,EAAK7lpB,UAAW,8BAA0B,GAC7CwvF,IACI/hF,KACDo4oB,EAAK7lpB,UAAW,0BAAsB,GACzCwvF,IACI/hF,KACDo4oB,EAAK7lpB,UAAW,gCAA4B,GAC/CwvF,IACI/hF,KACDo4oB,EAAK7lpB,UAAW,yBAAqB,GACxCwvF,IACI/hF,KACDo4oB,EAAK7lpB,UAAW,2BAAuB,GAC1CwvF,IACI/hF,KACDo4oB,EAAK7lpB,UAAW,uBAAmB,GACtCwvF,IACI/hF,KACDo4oB,EAAK7lpB,UAAW,yBAAqB,GACxCwvF,IACI/hF,KACDo4oB,EAAK7lpB,UAAW,uBAAmB,GACtCwvF,IACI/hF,KACDo4oB,EAAK7lpB,UAAW,oBAAgB,GACnCwvF,IACI/hF,KACDo4oB,EAAK7lpB,UAAW,eAAW,GAC9BwvF,IACI/hF,KACDo4oB,EAAK7lpB,UAAW,eAAW,GAC9BwvF,IACI/hF,KACDo4oB,EAAK7lpB,UAAW,oBAAgB,GACnCwvF,IACI/hF,KACDo4oB,EAAK7lpB,UAAW,+BAA2B,GAC9CwvF,IACI/hF,KACDo4oB,EAAK7lpB,UAAW,gBAAY,GAC/BwvF,IACI/hF,KACDo4oB,EAAK7lpB,UAAW,mBAAe,GAClCwvF,IACI/hF,KACDo4oB,EAAK7lpB,UAAW,sBAAkB,GACrCwvF,IACI/hF,KACDo4oB,EAAK7lpB,UAAW,yBAAqB,GACxCwvF,IACI/hF,KACDo4oB,EAAK7lpB,UAAW,uBAAmB,GACtCwvF,IACI/hF,KACDo4oB,EAAK7lpB,UAAW,iBAAa,GAChCwvF,IACI/hF,KACDo4oB,EAAK7lpB,UAAW,gBAAY,GAC/BwvF,IACI/hF,KACDo4oB,EAAK7lpB,UAAW,gBAAY,GAC/BwvF,IACI/hF,KACDo4oB,EAAK7lpB,UAAW,mBAAe,GAClCwvF,IACI/hF,KACDo4oB,EAAK7lpB,UAAW,gBAAY,GAC/BwvF,IACI/hF,KACDo4oB,EAAK7lpB,UAAW,kBAAc,GACjCwvF,IACI/hF,KACDo4oB,EAAK7lpB,UAAW,uBAAmB,GACtCwvF,IACI/hF,KACDo4oB,EAAK7lpB,UAAW,uBAAmB,GACtCwvF,IACI/hF,KACDo4oB,EAAK7lpB,UAAW,wBAAoB,GACvCwvF,IACI/hF,KACDo4oB,EAAK7lpB,UAAW,sBAAkB,GACrCwvF,IACI/hF,KACDo4oB,EAAK7lpB,UAAW,uBAAmB,GACtCwvF,IACI/hF,KACDo4oB,EAAK7lpB,UAAW,sBAAkB,GACrCwvF,IACI/hF,KACDo4oB,EAAK7lpB,UAAW,kBAAc,GACjCwvF,IACI/hF,KACDo4oB,EAAK7lpB,UAAW,uBAAmB,GACtCwvF,IACI/hF,KACDo4oB,EAAK7lpB,UAAW,yBAAqB,GACxC6lpB,EAAOr2jB,IACHzhF,GACD83oB,IAEL31iB,IACF21iB,GACK90iB,OAAOggQ,IC7zFZ,IAAIm6C,GAAsB,WAKtB,SAASA,EAAKjmZ,EAAQ0unB,EAAc5ge,EAAem3e,GAC/CvloB,KAAK60pB,gBAAiB,EACtB70pB,KAAK80pB,gBAAiB,EACtB90pB,KAAK+0pB,KAAO,IAAItuB,GAChBzmoB,KAAKM,OAASA,EACdN,KAAKgvnB,aAAeA,EACpBhvnB,KAAKouJ,cAAgBA,EACrBpuJ,KAAKkC,MAAQqjoB,EAAQ/jkB,WAAW,SAChCxhE,KAAKtD,mBAqZT,OA9YA6pZ,EAAKlrZ,UAAUwznB,YAAc,WACzB,IACI58mB,EADA+ipB,GAAiBjpoB,MAAO/rB,KAAKyvnB,WAAYj6lB,UAAWx1B,KAAKw1B,WAEzDk8nB,EAAQ1xpB,KAAKM,OAAOm0nB,cAAc12jB,QAClC2wB,GAAO,EACX,GAAK1uF,KAAK2vpB,aAwBN19oB,EAAQjS,KAAKi1pB,0BAA0Bj1pB,KAAKyvnB,cAC/B,GACTzvnB,KAAKgvnB,aAAajxjB,QAAQ11C,OAAOpW,EAAO,GAE5CjS,KAAKgvnB,aAAajxjB,QAAQv5D,KAAKwwpB,GAC/Bh1pB,KAAKgvnB,aAAajxjB,QAAU/9D,KAAKgvnB,aAAajxjB,aA5B9C,GAAK2zlB,EAAMj1pB,OAGN,CAED,IAAK,IADDy4pB,KACK/4pB,EAAI,EAAG0F,EAAM6vpB,EAAMj1pB,OAAQN,EAAI0F,EAAK1F,IAEzC,GADA8V,EAAQjS,KAAKi1pB,0BAA0BvD,EAAMv1pB,GAAI+4pB,GAC7Cl1pB,KAAKyvnB,aAAeiiC,EAAMv1pB,GAC1BuyF,GAAO,EACPwmkB,EAAW1wpB,KAAKwwpB,OAEf,CACD,IAAIG,EAAOn1pB,KAAKo1pB,uBAAuB1D,EAAMv1pB,IAC7C+4pB,EAAW1wpB,MAAOunB,MAAOopoB,EAAKppoB,MAAOyJ,UAAW2/nB,EAAK3/nB,YAGxDk5D,GACDwmkB,EAAW1wpB,KAAKwwpB,GAEpBh1pB,KAAKgvnB,aAAajxjB,QAAUm3lB,OAlB5Bl1pB,KAAKgvnB,aAAajxjB,SAAWi3lB,GA6BrCh1pB,KAAKM,OAAOsrD,WACZ5rD,KAAKq1pB,cAAgBr1pB,KAAKyvnB,YAO9BlpO,EAAKlrZ,UAAUw1d,iBAAmB,SAAUhwd,GACxC,IAAIZ,EAAQD,KAAKyoB,UAEX2jK,YAAa,UAAW1lL,KAAM6rnB,KADhC9C,WAAYzvnB,KAAKyvnB,WAAYj6lB,UAAWx1B,KAAKw1B,UAAW42J,YAAa,UAAW1lL,KAAM6rnB,IAE1FvynB,KAAKyoB,UAAW,EAChBzoB,KAAKM,OAAOkmB,QAAQ+rmB,GAAuB7znB,EAAOmC,EAAGZ,KASzDsmZ,EAAKlrZ,UAAUq0pB,WAAa,SAAUjgC,EAAYj6lB,EAAWm6nB,GACzD,IAAI37B,EAAOh0nB,KAAKM,OAChB,IAA8D,IAA1DN,KAAKM,OAAOo0nB,iBAAiBjF,GAAY7I,eAA0B5mnB,KAAKM,OAAOo0pB,oBAMnF,GAHK1gC,EAAKshC,oBACN3F,EAAc37B,EAAKshC,mBAEnBt1pB,KAAK+gE,kBACLizjB,EAAKjmnB,OAAOywoB,IACRj4oB,SAAUvG,KAAMvE,QAASuE,KAAK0vpB,WAC9Bx0a,KAAMu0Y,EAAYt0Y,KAAM3lN,EAAW4lN,KAAMu0a,QAHjD,CAOA3vpB,KAAKyvnB,WAAaA,EAClBzvnB,KAAKw1B,UAAYA,EACjBx1B,KAAK2vpB,YAAcA,EACnB3vpB,KAAKu1pB,kBACQvhC,EAAKy6B,uBAAuBh/B,GACzCzvnB,KAAKw1pB,iBAAiB/lC,EAAYkgC,GAClC3vpB,KAAK6unB,gBAETtoO,EAAKlrZ,UAAUm6pB,iBAAmB,SAAU/lC,EAAYkgC,GACpD,IAAKA,EACD,GAAI3vpB,KAAKM,OAAOwmnB,cACZ,IAAK,IAAI3qnB,EAAI,EAAG0F,EAAM7B,KAAKouJ,cAAc3xJ,OAAQN,EAAI0F,EAAK1F,IAClD6D,KAAKM,OAAOm0nB,cAAc12jB,QAAQx/D,QAAQyB,KAAKouJ,cAAcjyJ,IAAM,IACnE6D,KAAKouJ,cAAc/lI,OAAOlsB,EAAG,GAC7B0F,IACA1F,UAKR6D,KAAKouJ,cAAc/lI,OAAO,EAAGroB,KAAKouJ,cAAc3xJ,QAGpDuD,KAAKouJ,cAAc7vJ,QAAQkxnB,GAAc,GACzCzvnB,KAAKouJ,cAAc5pJ,KAAKirnB,IAMhClpO,EAAKlrZ,UAAUmsF,kBAAoB,SAAU3mF,GACzC,GAAIA,EAAEswF,SAAWnxF,KAAKu/B,gBAAtB,CAGA,GAAIv/B,KAAK60pB,eAAgB,CACrB,IAAI50pB,EAAOD,KAAKgvnB,aAAajxjB,QAAQthE,QACjCgznB,WAAYzvnB,KAAKyvnB,WAAYj6lB,UAAWx1B,KAAKw1B,UAAW42J,YAAa,UAAW1lL,KAAMipnB,KACpFvjc,YAAa,UAAW1lL,KAAMipnB,IACpC3vnB,KAAKM,OAAOyN,OAAO29nB,GAAqBzroB,GAE5CD,KAAKy1pB,sBACLz1pB,KAAKu1pB,kBACLv1pB,KAAK01pB,iBAETnvQ,EAAKlrZ,UAAUo6pB,oBAAsB,WACjC,IAAI11pB,EAAQC,KACZA,KAAKouJ,iBACLpuJ,KAAKgvnB,aAAajxjB,QAAQ3+D,QAAQ,SAAUyB,GACxCd,EAAMquJ,cAAc5pJ,KAAK3D,EAAEkrB,UAOnCw6X,EAAKlrZ,UAAUw0pB,aAAe,WAC1B,IAAI19B,EAAOhzjB,GAAsBn/D,KAAKgvnB,aAAajxjB,SACnD,GAAI/9D,KAAK+gE,kBACL/gE,KAAKM,OAAOyN,OAAOywoB,IAAuBj4oB,SAAUvG,KAAMvE,QAASuE,KAAK6vpB,oBAG5E,IAAK,IAAI1zpB,EAAI,EAAG0F,EAAMswnB,EAAK11nB,OAAQN,EAAI0F,EAAK1F,IACxC6D,KAAK8vpB,iBAAiB39B,EAAKh2nB,GAAG4vB,QAGtCw6X,EAAKlrZ,UAAU0lE,gBAAkB,WAC7B,OAAOA,GAAgB/gE,KAAKM,SAQhCimZ,EAAKlrZ,UAAUy0pB,iBAAmB,SAAU/joB,GACxC,IAAIiomB,EAAOh0nB,KAAKM,OACZ6xnB,EAAOnynB,KAAKgvnB,aAAajxjB,QAC7B,KAAI/9D,KAAKouJ,cAAc7vJ,QAAQwtB,GAAS,GAGxC,GAAI/rB,KAAK+gE,kBACL/gE,KAAKM,OAAOyN,OAAOywoB,IAAuBj4oB,SAAUvG,KAAMvE,QAASuE,KAAK8vpB,iBAAkB50a,KAAMnvN,QADpG,CAIA/rB,KAAKu1pB,kBACL,IAAK,IAAIp5pB,EAAI,EAAG0F,EAAMswnB,EAAK11nB,OAAQN,EAAI0F,EAAK1F,IACxC,GAAIg2nB,EAAKh2nB,GAAG4vB,QAAUA,EAAO,CACzB,GAAIiomB,EAAKlN,eAAiBkN,EAAKS,cAAc12jB,QAAQx/D,QAAQ4znB,EAAKh2nB,GAAG4vB,QAAU,EAC3E,SAEJ/rB,KAAKouJ,cAAc/lI,OAAOroB,KAAKouJ,cAAc7vJ,QAAQ4znB,EAAKh2nB,GAAG4vB,OAAQ,GACrEommB,EAAK9pmB,OAAOlsB,EAAG,GACf6D,KAAKyoB,UAAW,EACZzoB,KAAK80pB,gBACL90pB,KAAKM,OAAOyN,OAAO29nB,IACft/c,YAAa,UAAW1lL,KAAMipnB,KAGtC,MAGR3vnB,KAAK01pB,iBAETnvQ,EAAKlrZ,UAAU45pB,0BAA4B,SAAUlpoB,EAAOqiI,GAExD,IAAK,IADD+je,EAAO/je,GAAgCpuJ,KAAKgvnB,aAAajxjB,QACpD5hE,EAAI,EAAG0F,EAAMswnB,EAAK11nB,OAAQN,EAAI0F,EAAK1F,IACxC,GAAIg2nB,EAAKh2nB,GAAG4vB,QAAUA,EAClB,OAAO5vB,EAGf,OAAQ,GAMZoqZ,EAAKlrZ,UAAUkkC,cAAgB,WAC3B,MAAO,QAEXgnX,EAAKlrZ,UAAUivnB,WAAa,WAExB,GADAtqnB,KAAKM,OAAO0lF,IAAIm3iB,GAAqBn9nB,KAAKsqnB,YACtCtqnB,KAAKM,OAAO00nB,aAAav4nB,QAAUuD,KAAKgvnB,aAAajxjB,QAAQthE,OAAQ,CACrE,IAAIu3nB,EAAOh0nB,KAAKM,OAChBN,KAAK60pB,gBAAiB,EACtB70pB,KAAK2vpB,YAAc3vpB,KAAKgvnB,aAAajxjB,QAAQthE,OAAS,EACtD,IAAK,IAAI2B,EAAK,EAAGyE,EAAKmxnB,EAAKhF,aAAajxjB,QAAS3/D,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACnE,IAAIqiE,EAAM59D,EAAGzE,GACT4B,KAAKouJ,cAAc7vJ,QAAQkiE,EAAI10C,QAAU,GACzC/rB,KAAK0vpB,WAAWjvlB,EAAI10C,MAAO00C,EAAIjrC,WAAW,GAGlDx1B,KAAK2vpB,aAAc,EACnB3vpB,KAAK60pB,gBAAiB,IAM9BtuQ,EAAKlrZ,UAAUqB,iBAAmB,WAC1BsD,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAOslF,GAAGu3iB,GAAqBn9nB,KAAKsqnB,WAAYtqnB,MACrDA,KAAKM,OAAOslF,GAAG+vkB,GAAqB31pB,KAAK6wd,iBAAkB7wd,MAC3DA,KAAKM,OAAOslF,GAAGq1jB,GAA4Bj7oB,KAAKwnF,kBAAmBxnF,MACnEA,KAAKM,OAAOslF,GAAG04jB,GAAct+oB,KAAKm/G,aAAcn/G,MAChDA,KAAKM,OAAOslF,GAAG88iB,GAAwB1ioB,KAAK41pB,iBAAkB51pB,MAC9DA,KAAKM,OAAOslF,GAAGo8jB,GAAmBhipB,KAAK+iT,WAAY/iT,QAKvDumZ,EAAKlrZ,UAAUuB,oBAAsB,WAC7BoD,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAO0lF,IAAI2vkB,GAAqB31pB,KAAK6wd,kBAC1C7wd,KAAKM,OAAO0lF,IAAIi1jB,GAA4Bj7oB,KAAKwnF,mBACjDxnF,KAAKM,OAAO0lF,IAAIs4jB,GAAct+oB,KAAKm/G,cACnCn/G,KAAKM,OAAO0lF,IAAI08iB,GAAwB1ioB,KAAK41pB,kBAC7C51pB,KAAKM,OAAO0lF,IAAIg8jB,GAAmBhipB,KAAK+iT,cAO5CwjG,EAAKlrZ,UAAUiX,QAAU,WACrBtS,KAAK80pB,gBAAiB,EAClB90pB,KAAKM,OAAOU,QAAQ2B,cAAc,gBAAgBnB,iBAAiB,iBAAiB/E,SACpFuD,KAAKM,OAAOU,QAAQ2B,cAAc,gBAAgB+B,MAAM4xC,QAAU,QAEtEt2C,KAAK6vpB,eACL7vpB,KAAK80pB,gBAAiB,EACtB90pB,KAAKpD,uBAET2pZ,EAAKlrZ,UAAU8jH,aAAe,SAAUt+G,GACpCb,KAAKm9oB,kBAAkBt8oB,GACvB,IAAIsG,EAAStB,EAAQhF,EAAEsG,OAAQ,iBAC/B,GAAIA,IAAWtG,EAAEsG,OAAOrD,UAAUK,SAAS,oBACtCtD,EAAEsG,OAAOrD,UAAUK,SAAS,yBAC5BtD,EAAEsG,OAAOrD,UAAUK,SAAS,4BAC3BgD,EAAOrD,UAAUK,SAAS,eAC3BtD,EAAEsG,OAAOrD,UAAUK,SAAS,gBAC5BtD,EAAEsG,OAAOrD,UAAUK,SAAS,kBAC5BtD,EAAEsG,OAAOrD,UAAUK,SAAS,mBAAoB,CACjD,IACI0xpB,EADO71pB,KAAKM,OACEwhoB,eAAe36nB,EAAOxE,cAAc,oBAAoBkQ,aAAa,iBACtE1L,EAAO3F,iBAAiB,gBAAgB/E,OAErC,aAAhBo5pB,EAAOnvpB,OACP1G,KAAK81pB,aAAa3upB,EAAQtG,EAAGg1pB,GACzBrqpB,GAAQkb,UACR1mB,KAAK+1pB,UAAUl1pB,IAIvBsG,GACAA,EAAOrD,UAAUS,OAAO,cAGhCgiZ,EAAKlrZ,UAAU0nT,WAAa,SAAUliT,GAClC,IAAImD,EAAMnD,EAAEsG,OACZ,IAAKnH,KAAKM,OAAOk/lB,SAAwB,UAAb3+lB,EAAEs1D,QAAmC,cAAbt1D,EAAEs1D,QAAuC,eAAbt1D,EAAEs1D,SAC3EtwD,EAAQ7B,EAAK,iBAAkB,CAClC,IAAImD,EAASnH,KAAKkC,MAAMstoB,oBACxB,GAAI/xoB,EAAkB0J,KAAYA,EAAOrD,UAAUK,SAAS,kBACpDgD,EAAOxE,cAAc,oBACzB,OAEJ,IAAI89D,EAAMzgE,KAAKM,OAAOwhoB,eAAe36nB,EAAOxE,cAAc,oBAAoBkQ,aAAa,iBAC3F7S,KAAK81pB,aAAa3upB,EAAQtG,EAAG4/D,KAGrC8lV,EAAKlrZ,UAAUy6pB,aAAe,SAAU3upB,EAAQtG,EAAGg8D,GAC/C,IAAIm3jB,EAAOh0nB,KAAKM,OACZyrB,EAAQ8wC,EAAO9wC,MACfyJ,EAAaruB,EAAO3F,iBAAiB,gBAAgB/E,OACrD,aAD8D,YAE9DoE,EAAE41G,UAAaz2G,KAAKgvnB,aAAagnC,aAAe7upB,EAAO3F,iBAAiB,iBAAiB/E,UACpFu3nB,EAAKS,cAAc12jB,QAAQx/D,QAAQwtB,IAAU,GAClD/rB,KAAK8vpB,iBAAiB/joB,GAGtB/rB,KAAK0vpB,WAAW3joB,EAAOyJ,EAAW30B,EAAEgnB,SAAW7nB,KAAKi2pB,uBAG5D1vQ,EAAKlrZ,UAAU06pB,UAAY,SAAUl1pB,GAE5BpD,EADQoI,EAAQhF,EAAEsG,OAAQ,oBACGnH,KAAKM,OAAOo0pB,qBAC1Cp2lB,GAAkBt+D,KAAKM,OAAOU,QAAQ2B,cAAc,gBAAiB9B,EAAG,0CAA4Cb,KAAKouJ,cAAc3xJ,OAAS,EAAI,iBAAmB,MAG/K8pZ,EAAKlrZ,UAAU8hpB,kBAAoB,SAAUt8oB,GACzC,IAAIsG,EAAStG,EAAEsG,OACXtB,EAAQsB,EAAQ,kBAAoBtG,EAAEsG,OAAOrD,UAAUK,SAAS,cAChE0B,EAAQsB,EAAQ,gBACZA,EAAOrD,UAAUK,SAAS,kBACrBgD,EAAOrD,UAAUK,SAAS,kBAK3BgD,EAAOrD,UAAUS,OAAO,iBACxBvE,KAAKi2pB,sBAAuB,EAC5Bj2pB,KAAKM,OAAOU,QAAQ2B,cAAc,gBAAgB+B,MAAM4xC,QAAU,SANlEnvC,EAAOrD,UAAUM,IAAI,iBACrBpE,KAAKi2pB,sBAAuB,IAUpCj2pB,KAAKM,OAAOU,QAAQ2B,cAAc,gBAAgB+B,MAAM4xC,QAAU,QAG1EiwW,EAAKlrZ,UAAUq6pB,aAAe,WAM1B,IAAK,IAJD9wkB,EACAsxkB,EAFAliC,EAAOh0nB,KAAKM,OAGZ6xnB,EAAOnynB,KAAKgvnB,aAAajxjB,QACzBuxF,EAAatvJ,KAAKM,OAAO00nB,aAAap9lB,IAAI,SAAUqmC,GAAK,OAAOA,EAAElyC,QAC7D5vB,EAAI,EAAG0F,EAAMswnB,EAAK11nB,OAAQN,EAAI0F,EAAK1F,KACG,IAAvCmzJ,EAAW/wJ,QAAQ4znB,EAAKh2nB,GAAG4vB,SAG/B64D,EAASoviB,EAAKy6B,uBAAuBt8B,EAAKh2nB,GAAG4vB,OAC7C/rB,KAAK+0pB,KAAKpuB,QAAQ/hjB,EAAQutiB,EAAKh2nB,GAAGq5B,WAC9Bx1B,KAAK2vpB,aAAex9B,EAAK11nB,OAAS,GAClCmoF,EAAOjiF,cAAc,oBAAoBuC,aAAa/D,EAAc,QAAUkC,UAAW,eAAgBrB,WAAY7F,EAAI,GAAG+Q,aAAe03E,EAAOjiF,cAAc,kBAEpKuzpB,EAAgBtxkB,EAAOjiF,cAAc,oBACX,cAAtBwvnB,EAAKh2nB,GAAGq5B,UACR1xB,EAAUoypB,GAAgB,cAAe,wBAGzCpypB,EAAUoypB,GAAgB,eAAgB,2BAItD3vQ,EAAKlrZ,UAAUk6pB,gBAAkB,SAAUrhpB,GAKvC,IAAK,IAHD0wE,EADAoviB,EAAOh0nB,KAAKM,OAEZ6xnB,EAAOnynB,KAAKgvnB,aAAajxjB,QACzBuxF,EAAatvJ,KAAKM,OAAO00nB,aAAap9lB,IAAI,SAAUqmC,GAAK,OAAOA,EAAElyC,QAC7D5vB,EAAI+X,GAAsB,EAAGrS,EAAOpE,EAAkByW,GAA2Bi+mB,EAAK11nB,OAApByX,EAAW,EAAiB/X,EAAI0F,EAAK1F,IAC5GyoF,EAASoviB,EAAKy6B,uBAAuBt8B,EAAKh2nB,GAAG4vB,OACzCiomB,EAAKlN,eAAiBkN,EAAKS,cAAc12jB,QAAQx/D,QAAQ4znB,EAAKh2nB,GAAG4vB,QAAU,IAC1EtuB,EAAkBmnF,KAAYA,EAAOjiF,cAAc,uBAGb,IAAvC2sJ,EAAW/wJ,QAAQ4znB,EAAKh2nB,GAAG4vB,SAG/B/rB,KAAK+0pB,KAAKpuB,QAAQ/hjB,EAAQ,QAC1B9gF,EAAU8gF,EAAOjiF,cAAc,wBAA0B,eAAgB,oBAAqB,cAAe,qBACzGiiF,EAAOjiF,cAAc,kBACrBiiF,EAAOjiF,cAAc,oBAAoB2C,YAAYs/E,EAAOjiF,cAAc,oBAItF4jZ,EAAKlrZ,UAAU+5pB,uBAAyB,SAAUrpoB,GAC9C,IAAK,IAAI5vB,EAAI,EAAG0F,EAAM7B,KAAKgvnB,aAAajxjB,QAAQthE,OAAQN,EAAI0F,EAAK1F,IAC7D,GAAI6D,KAAKgvnB,aAAajxjB,QAAQ5hE,GAAG4vB,QAAUA,EACvC,OAAO/rB,KAAKgvnB,aAAajxjB,QAAQ5hE,GAGzC,OAAO,GAEXoqZ,EAAKlrZ,UAAU86pB,eAAiB,WAE5B,IAAK,IADD7mgB,EAAatvJ,KAAKM,OAAO00nB,aAAap9lB,IAAI,SAAUqmC,GAAK,OAAOA,EAAElyC,QAC7D3tB,EAAK,EAAGyE,EAAK7C,KAAKouJ,cAAehwJ,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC5D,IAAIqiE,EAAM59D,EAAGzE,GACb,IAAiC,IAA7BkxJ,EAAW/wJ,QAAQkiE,GAAvB,CAGA,IAAImkB,EAAS5kF,KAAKM,OAAOmupB,uBAAuBhulB,GAChDzgE,KAAK+0pB,KAAKpuB,QAAQ/hjB,EAAQ5kF,KAAKo1pB,uBAAuB30lB,GAAKjrC,cAGnE+wX,EAAKlrZ,UAAUu6pB,iBAAmB,WAC9B51pB,KAAKu1pB,kBACLv1pB,KAAK2vpB,aAAc,EACnB3vpB,KAAKu1pB,kBACLv1pB,KAAK01pB,eACL11pB,KAAK2vpB,aAAc,EACnB3vpB,KAAKm2pB,kBAEF5vQ,KCtaP6vQ,GAAkC,WAKlC,SAASA,EAAiB5G,GACtBxvpB,KAAKwvpB,YAAcA,EAwQvB,OAlQA4G,EAAiB/6pB,UAAU0wG,OAAS,WAChC/rG,KAAKq2pB,aAAer2pB,KAAKwvpB,YAAYxupB,QACrChB,KAAKs2pB,yBACLt2pB,KAAKu2pB,sBACLv2pB,KAAKukB,cAKT6xoB,EAAiB/6pB,UAAU62D,QAAU,WACjClyD,KAAKwvpB,YAAYgH,mBACbx2pB,KAAKoB,MAAM3E,QACXuD,KAAKy2pB,kBAETz2pB,KAAK02pB,gBAMTN,EAAiB/6pB,UAAUk7pB,oBAAsB,WAC7C,IAAIpjmB,EACAwjmB,EAAW32pB,KAAKwvpB,YAChBtupB,EAAMy1pB,EAAS31pB,QAAQ2B,cAAc,uBACrCu8nB,EAAO1+nB,SAASyE,yBACpB/D,EAAIc,UAAY,GAChB,IAAK,IAAI7F,EAAI,EAAGA,GAAKw6pB,EAASp2Y,UAAWpkR,IACrCg3D,EAAOhyD,EAAc,KACjBkC,UAAW,iDACXI,OAASmO,KAAM,OAAQo/G,SAAU,KAAM0C,aAAc,aAAev3H,EAChEuyB,KAAM,sBAAuB+I,KAAM,YAAct7B,KAErDw6pB,EAASrja,cAAgBn3P,GACzB2H,EAAUqvD,GAAO,gBAAiB,aAAc,oBAEpD+rkB,EAAKv9nB,YAAYwxD,GAErBjyD,EAAIS,YAAYu9nB,GAChBl/nB,KAAKoB,SAAWC,MAAMC,KAAKJ,EAAIqQ,aAMnC6kpB,EAAiB/6pB,UAAUkpB,WAAa,WACpChf,GAAanB,IAAIpE,KAAKq2pB,aAAc,QAASr2pB,KAAKm/G,aAAcn/G,OAMpEo2pB,EAAiB/6pB,UAAU8pB,aAAe,WACtC5f,GAAahB,OAAOvE,KAAKq2pB,aAAc,QAASr2pB,KAAKm/G,eAQzDi3iB,EAAiB/6pB,UAAUiX,QAAU,WACjCtS,KAAKmlB,gBAETixoB,EAAiB/6pB,UAAUi7pB,uBAAyB,WAChDt2pB,KAAKgB,QAAUG,EAAc,OACzBkC,UAAW,mBAAoBI,OAASmO,KAAQ,gBAEpD5R,KAAK42pB,iBAAiB52pB,KAAKgB,SAC3BhB,KAAK62pB,mBAAmB72pB,KAAKgB,SAC7BhB,KAAKgB,QAAQW,YAAYR,EAAc,OAASkC,UAAW,wBAC3DrD,KAAK82pB,mBAAmB92pB,KAAKgB,SAC7BhB,KAAK+2pB,gBAAgB/2pB,KAAKgB,SAC1BhB,KAAKwvpB,YAAYxupB,QAAQW,YAAY3B,KAAKgB,UAE9Co1pB,EAAiB/6pB,UAAUu7pB,iBAAmB,SAAUI,GACpDh3pB,KAAKpB,MAAQuC,EAAc,OACvBkC,UAAW,+BACXI,OACIy8B,MAAOlgC,KAAKwvpB,YAAYzzU,kBAAkB,oBAC1CroN,aAAc1zH,KAAKwvpB,YAAYzzU,kBAAkB,oBACjD/qN,SAAU,QAGlBhxH,KAAK6hC,KAAO1gC,EAAc,OACtBkC,UAAW,6BACXI,OACIy8B,MAAOlgC,KAAKwvpB,YAAYzzU,kBAAkB,uBAC1CroN,aAAc1zH,KAAKwvpB,YAAYzzU,kBAAkB,uBACjD/qN,SAAU,QAGlB5rH,GAAQpF,KAAKpB,MAAOoB,KAAK6hC,MAAOm1nB,IAEpCZ,EAAiB/6pB,UAAUw7pB,mBAAqB,SAAUG,GACtD,IAAIC,EAAY91pB,EAAc,OAC9BnB,KAAKk3pB,GAAK/1pB,EAAc,KACpBkC,UAAW,wBAAyBrB,UAAW,MAC/CyB,OACIy8B,MAAOlgC,KAAKwvpB,YAAYzzU,kBAAkB,wBAAyBnqU,KAAM,OACzE8hH,aAAc1zH,KAAKwvpB,YAAYzzU,kBAAkB,wBACjD/qN,SAAU,KACVv5F,KAAMz3B,KAAKwvpB,YAAYzzU,kBAAkB,wBACzCrtT,KAAM,yBAGduooB,EAAUt1pB,YAAY3B,KAAKk3pB,IAC3BF,EAAer1pB,YAAYs1pB,IAE/Bb,EAAiB/6pB,UAAUy7pB,mBAAqB,SAAUE,GACtD,IAAIG,EAAYh2pB,EAAc,OAC9BnB,KAAKo3pB,GAAKj2pB,EAAc,KACpBkC,UAAW,wBACXrB,UAAW,MAAOyB,OACdy8B,MAAOlgC,KAAKwvpB,YAAYzzU,kBAAkB,oBAAqBnqU,KAAM,OACrE8hH,aAAc1zH,KAAKwvpB,YAAYzzU,kBAAkB,oBACjD/qN,SAAU,KACVv5F,KAAMz3B,KAAKwvpB,YAAYzzU,kBAAkB,oBACzCrtT,KAAM,yBAGdyooB,EAAUx1pB,YAAY3B,KAAKo3pB,IAC3BJ,EAAer1pB,YAAYw1pB,IAE/Bf,EAAiB/6pB,UAAU07pB,gBAAkB,SAAUC,GACnDh3pB,KAAKsoC,KAAOnnC,EAAc,OACtBkC,UAAW,6BACXI,OACIy8B,MAAOlgC,KAAKwvpB,YAAYzzU,kBAAkB,mBAC1CroN,aAAc1zH,KAAKwvpB,YAAYzzU,kBAAkB,mBACjD/qN,SAAU,QAGlBhxH,KAAKkzB,KAAO/xB,EAAc,OACtBkC,UAAW,6BACXI,OACIy8B,MAAOlgC,KAAKwvpB,YAAYzzU,kBAAkB,mBAC1CroN,aAAc1zH,KAAKwvpB,YAAYzzU,kBAAkB,mBACjD/qN,SAAU,QAGlB5rH,GAAQpF,KAAKsoC,KAAMtoC,KAAKkzB,MAAO8joB,IAEnCZ,EAAiB/6pB,UAAU8jH,aAAe,SAAUt+G,GAChD,IAAI81pB,EAAW32pB,KAAKwvpB,YAChBropB,EAAStG,EAAEsG,OAMf,OALAwvpB,EAASU,eAAiBV,EAASrja,YAC9BnsP,EAAOrD,UAAUK,SAAS,cAAiB1G,EAAkB0J,EAAO0L,aAAa,YAClF8jpB,EAASrja,YAAcv+N,SAAS5tB,EAAO0L,aAAa,SAAU,IAC9D8jpB,EAAS/qmB,aAEN,GAEXwqmB,EAAiB/6pB,UAAUo7pB,gBAAkB,WACzC,IACIa,EACA/H,EAFAoH,EAAW32pB,KAAKwvpB,YAGpBmH,EAASrja,YAAsC,IAAxBqja,EAASj/U,WAAmB,EAAIi/U,EAASrja,YAC5Dqja,EAASrja,YAAcqja,EAASj/U,YAAci/U,EAASj/U,aACvDi/U,EAASrja,YAAcqja,EAASj/U,YAEpC4/U,EAAiBvioB,UAAU4hoB,EAASrja,YAAcqja,EAASp2Y,WAAWrzQ,WAAY,IAC9EyppB,EAASrja,YAAcqja,EAASp2Y,WAAc,GAAK+2Y,EAAiB,IACpEA,GAAkC,GAEtC,IAAK,IAAIn7pB,EAAI,EAAGA,EAAIw6pB,EAASp2Y,UAAWpkR,KACpCozpB,EAAU+H,EAAiBX,EAASp2Y,UAAa,EAAIpkR,IACvCw6pB,EAASj/U,YACnB13U,KAAKoB,MAAMjF,GAAGuI,MAAM4xC,QAAU,GAC9Bt2C,KAAKoB,MAAMjF,GAAGqH,aAAa,QAAS+rpB,EAAOripB,YAC3ClN,KAAKoB,MAAMjF,GAAG6F,UAAa20pB,EAASY,WAAiCZ,EAASY,WAAahI,EAA1CA,EAAOripB,WACpDyppB,EAASrja,cAAgBi8Z,EACzBvvpB,KAAKoB,MAAMjF,GAAG2H,UAAUM,IAAI,mBAG5BpE,KAAKoB,MAAMjF,GAAG2H,UAAUS,OAAO,qBAInCvE,KAAKoB,MAAMjF,GAAG6F,UAAa20pB,EAASY,WAAiCZ,EAASY,WAAahI,EAA1CA,EAAOripB,WACxDlN,KAAKoB,MAAMjF,GAAGuI,MAAM4xC,QAAU,QAElCxyC,EAAU9D,KAAKoB,MAAMjF,OAAS,gBAAiB,aAEnD6D,KAAKpB,MAAM4E,aAAa,QAAS,KACjCxD,KAAKkzB,KAAK1vB,aAAa,QAASmzpB,EAASj/U,WAAWxqU,YACpDlN,KAAK6hC,KAAKr+B,aAAa,SAAUmzpB,EAASrja,YAAc,GAAGpmP,YAC3DlN,KAAKsoC,KAAK9kC,aAAa,SAAUmzpB,EAASrja,YAAc,GAAGpmP,YAC3DlN,KAAKq2pB,aAAa1zpB,cAAc,aAAaa,aAAa,QAAS,KACnExD,KAAKq2pB,aAAa1zpB,cAAc,YAAYa,aAAa,QAASmzpB,EAASj/U,WAAWxqU,YACtFlN,KAAKq2pB,aAAa1zpB,cAAc,YAAYa,aAAa,SAAUmzpB,EAASrja,YAAc,GAAGpmP,YAC7FlN,KAAKq2pB,aAAa1zpB,cAAc,YAAYa,aAAa,SAAUmzpB,EAASrja,YAAc,GAAGpmP,YAC7FlN,KAAKk3pB,GAAG1zpB,aAAa,SAAUuxB,SAAS/0B,KAAKoB,MAAM,GAAGyR,aAAa,SAAU,IAAM8jpB,EAASp2Y,WAAWrzQ,YACvGlN,KAAKo3pB,GAAG5zpB,aAAa,SAAUuxB,SAAS/0B,KAAKoB,MAAMpB,KAAKoB,MAAM3E,OAAS,GAAGoW,aAAa,SAAU,IAAM,GAAG3F,aAE9GkppB,EAAiB/6pB,UAAUq7pB,aAAe,WACtC12pB,KAAKw3pB,yBACLx3pB,KAAKy3pB,2BACLz3pB,KAAK03pB,2BACL13pB,KAAK23pB,wBACD33pB,KAAKoB,MAAM3E,QACXqH,EAAU9D,KAAKoB,OAAOpB,KAAKwvpB,YAAYl8Z,YAAc,GAAKtzP,KAAKwvpB,YAAYjvY,YAAa,gBAAiB,iBAGjH61Y,EAAiB/6pB,UAAUm8pB,uBAAyB,WAChD,IAAII,GAAa,cAAe,mBAC5BC,GAAqB,sBAAuB,aAC5CzxJ,GAAY,aAAc,mBAC1B0xJ,GAAoB,qBAAsB,aAC1C93pB,KAAKwvpB,YAAY93U,WAAa,GAAK13U,KAAKwvpB,YAAYl8Z,YAAc,GAClExvP,EAAU9D,KAAK6hC,KAAMuke,EAAU0xJ,GAC/Bh0pB,EAAU9D,KAAKpB,MAAOg5pB,EAAWC,GACjC/zpB,EAAU9D,KAAKq2pB,aAAa1zpB,cAAc,aAAci1pB,EAAWC,GACnE/zpB,EAAU9D,KAAKq2pB,aAAa1zpB,cAAc,YAAayjgB,EAAU0xJ,KAGjEh0pB,EAAU9D,KAAK6hC,KAAMi2nB,EAAkB1xJ,GACvCtigB,EAAU9D,KAAKpB,MAAOi5pB,EAAmBD,GACzC9zpB,EAAU9D,KAAKq2pB,aAAa1zpB,cAAc,YAAam1pB,EAAkB1xJ,GACzEtigB,EAAU9D,KAAKq2pB,aAAa1zpB,cAAc,aAAck1pB,EAAmBD,KAGnFxB,EAAiB/6pB,UAAUo8pB,yBAA2B,WAC9Cz3pB,KAAKwvpB,YAAYl8Z,YAActzP,KAAKwvpB,YAAYjvY,UAChDz8Q,EAAU9D,KAAKk3pB,IAAK,gBAAiB,oBAAqB,yBAA0B,cAGpFpzpB,EAAU9D,KAAKk3pB,IAAK,yBAA0B,cAAe,gBAAiB,qBAGtFd,EAAiB/6pB,UAAUq8pB,yBAA2B,WAClD,IAAIf,EAAW32pB,KAAKwvpB,YAChBoI,EAAY53pB,KAAKoB,MAAM,GAAGY,UAAUuN,QAAQonpB,EAASY,WAAY,KAChEK,EAAUn7pB,SAAWuD,KAAKoB,MAAM3E,QAAWs4B,SAAS6ioB,EAAW,IAAMjB,EAASp2Y,UAAYo2Y,EAASj/U,WACpG5zU,EAAU9D,KAAKo3pB,IAAK,yBAA0B,cAAe,gBAAiB,oBAG9EtzpB,EAAU9D,KAAKo3pB,IAAK,gBAAiB,oBAAqB,yBAA0B,eAG5FhB,EAAiB/6pB,UAAUs8pB,sBAAwB,WAC/C,IAAIrxH,GAAY,aAAc,mBAC1ByxH,GAAoB,qBAAsB,aAC1Cl5X,GAAY,aAAc,mBAC1Bm5X,GAAoB,qBAAsB,aAC1CrB,EAAW32pB,KAAKwvpB,YAChBmH,EAASrja,cAAgBqja,EAASj/U,YAA6C,IAA/Bi/U,EAAS7rB,mBACzDhnoB,EAAU9D,KAAKkzB,KAAM6koB,EAAkBzxH,GACvCxiiB,EAAU9D,KAAKsoC,KAAM0vnB,EAAkBn5X,GACvC/6R,EAAU9D,KAAKq2pB,aAAa1zpB,cAAc,YAAao1pB,EAAkBzxH,GACzExiiB,EAAU9D,KAAKq2pB,aAAa1zpB,cAAc,YAAaq1pB,EAAkBn5X,KAGzE/6R,EAAU9D,KAAKkzB,KAAMozgB,EAAUyxH,GAC/Bj0pB,EAAU9D,KAAKsoC,KAAMu2P,EAAUm5X,GAC/Bl0pB,EAAU9D,KAAKq2pB,aAAa1zpB,cAAc,YAAa2jiB,EAAUyxH,GACjEj0pB,EAAU9D,KAAKq2pB,aAAa1zpB,cAAc,YAAak8R,EAAUm5X,KAGlE5B,KChRP6B,GAA8B,WAK9B,SAASA,EAAazI,GAClBxvpB,KAAKwvpB,YAAcA,EA8DvB,OAxDAyI,EAAa58pB,UAAU0wG,OAAS,WAC5B,IAAI7qG,EAAMC,EAAc,OAASkC,UAAW,iBAAkBI,OAASiwH,aAAc,uBACrF1zH,KAAKk4pB,cAAgB/2pB,EAAc,QAAUkC,UAAW,cAAeE,OAAQ,oBAC/EvD,KAAKm4pB,iBAAmBh3pB,EAAc,QAAUkC,UAAW,iBAAkBE,OAAQ,oBACrF6B,GAAQpF,KAAKk4pB,cAAel4pB,KAAKm4pB,kBAAmBj3pB,GACpDlB,KAAKwvpB,YAAYxupB,QAAQW,YAAYT,GACrClB,KAAKkyD,WAKT+lmB,EAAa58pB,UAAU62D,QAAU,WAC7B,IAAIykmB,EAAW32pB,KAAKwvpB,YACpBxvpB,KAAKk4pB,cAAcr8oB,YAAc7b,KAAKg8B,OAAO26nB,EAAS56U,kBAAkB,oBAAoD,IAA/B46U,EAAS7rB,kBAA0B,EACxH6rB,EAASrja,YAAaqja,EAASj/U,YAAc,IAAM,IAC3D13U,KAAKm4pB,iBAAiBt8oB,YAAc7b,KAAKg8B,OAAO26nB,EAAS56U,kBAAkB,mBAAoB46U,EAAS7rB,mBAAqB,IAC7H9qoB,KAAKk4pB,cAAc7jpB,cAAc7Q,aAAa,aAAcxD,KAAKk4pB,cAAcr8oB,YAAc7b,KAAKm4pB,iBAAiBt8oB,cAKvHo8oB,EAAa58pB,UAAU20I,YAAc,WAC7BhwI,KAAKk4pB,gBACLl4pB,KAAKk4pB,cAAcxzpB,MAAM4xC,QAAU,QAEnCt2C,KAAKm4pB,mBACLn4pB,KAAKm4pB,iBAAiBzzpB,MAAM4xC,QAAU,SAM9C2hnB,EAAa58pB,UAAUs2I,YAAc,WAC5B3xI,KAAKk4pB,eACNl4pB,KAAK+rG,SAET/rG,KAAKk4pB,cAAcxzpB,MAAM4xC,QAAU,GACnCt2C,KAAKm4pB,iBAAiBzzpB,MAAM4xC,QAAU,IAQ1C2hnB,EAAa58pB,UAAUiX,QAAU,aAGjC2lpB,EAAa58pB,UAAU2gC,OAAS,SAAU5sB,EAAKnP,GAE3C,IAAK,IADDm4pB,EACKj8pB,EAAI,EAAGA,EAAI8D,EAAKxD,OAAQN,IAC7Bi8pB,EAAO,IAAIp0oB,OAAO,QAAc,MAAO,MACvC5U,EAAMA,EAAIG,QAAQ6opB,EAAMn4pB,EAAK9D,GAAG+Q,YAEpC,OAAOkC,GAEJ6opB,KCxEP3tkB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAqB5Dy7nB,GAAuB,SAAUltkB,GAMjC,SAASktkB,EAAMrlpB,EAAShS,GACpB,IAAIjB,EAAQorF,EAAO7pF,KAAKtB,KAAMgT,EAAShS,IAAYhB,KAoBnD,OAnBAD,EAAMu4pB,kBACFC,gBAAiB,mBACjBC,eAAgB,cAChBC,iBAAkB,mBAClBC,gBAAiB,kBACjBC,gBAAiB,kBACjBC,oBAAqB,sBACrBC,iBAAkB,mBAClBC,qBAAsB,uBACtBC,cAAe,kBAKnBh5pB,EAAMi5pB,gBAAkB,IAAI5C,GAAiBr2pB,GAI7CA,EAAMk5pB,mBAAqB,IAAIhB,GAAal4pB,GACrCA,EAoWX,OA9XAuqF,GAAU+tkB,EAAOltkB,GAgCjBktkB,EAAMh9pB,UAAUw1F,gBAAkB,WAC9B,IAAIgB,KAaJ,OAZI7xF,KAAKk5pB,uBACLrnkB,EAAQrtF,MACJ6sF,OAAQ,kBACRpxF,MAAOD,QAGXA,KAAKm5pB,kBACLtnkB,EAAQrtF,MACJ6sF,OAAQ,gBACRpxF,MAAOD,QAGR6xF,GAMXwmkB,EAAMh9pB,UAAUoX,UAAY,aAM5B4lpB,EAAMh9pB,UAAU0wG,OAAS,WACjB/rG,KAAKiP,SACLjP,KAAKo5pB,iBAGLp5pB,KAAKq5pB,mBACLr5pB,KAAKwrpB,YACLxrpB,KAAK8qoB,kBAAoB9qoB,KAAK8qoB,mBAAqB,EACnD9qoB,KAAKs5pB,8BACLt5pB,KAAKg5pB,gBAAgBjtjB,SACjB/rG,KAAKu5pB,oBACLv5pB,KAAKi5pB,mBAAmBltjB,SAE5B/rG,KAAKw5pB,6BACDx5pB,KAAKm5pB,kBACLn5pB,KAAKy5pB,oBAAoB1tjB,SAE7B/rG,KAAK05pB,eACD15pB,KAAKk5pB,uBAAyBl5pB,KAAK25pB,uBACnC35pB,KAAK25pB,sBAAsB5tjB,SAE/B/rG,KAAKkyD,UACLlyD,KAAKwmB,QAAQ,WAAa8sO,YAAetzP,KAAKszP,YAAaw3Y,kBAAqB9qoB,KAAK8qoB,sBAO7FutB,EAAMh9pB,UAAUmxG,eAAiB,WAE7B,OAAOxsG,KAAKgtG,cADK,cAAe,cAQpCqrjB,EAAMh9pB,UAAUiX,QAAU,WACtB64E,EAAO9vF,UAAUiX,QAAQhR,KAAKtB,MAC9BA,KAAKg5pB,gBAAgB1mpB,UACrBtS,KAAKi5pB,mBAAmB3mpB,UACxBtS,KAAKgB,QAAQgB,UAAY,IAM7Bq2pB,EAAMh9pB,UAAUkkC,cAAgB,WAC5B,MAAO,SAMX84nB,EAAMh9pB,UAAUmsF,kBAAoB,SAAUiF,EAASC,GACnD,IAAI1sF,KAAKgnF,YAAT,CAGIyF,EAAQ8zL,YAAc7zL,EAAQ6zL,YAC9BvgR,KAAKg5pB,gBAAgBzC,sBACrBv2pB,KAAKg5pB,gBAAgB9mmB,WAEzB,IAAK,IAAI9zD,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKmvF,GAAUruF,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAE9D,OADWyE,EAAGzE,IAEV,IAAK,cACG4B,KAAK45pB,cAAcntkB,EAAQ6mK,YAAa5mK,EAAQ4mK,cAChDtzP,KAAK65pB,qBAET,MACJ,IAAK,WACL,IAAK,oBACL,IAAK,aACG75pB,KAAKm5pB,kBACLn5pB,KAAKy5pB,oBAAoBK,iBAAiB,QAAS95pB,KAAKmwJ,UAE5DnwJ,KAAKkyD,UACL,MACJ,IAAK,YACGlyD,KAAKm5pB,mBACLn5pB,KAAKy5pB,oBAAoBnnpB,UACzBtS,KAAKy5pB,oBAAoB1tjB,UAE7B/rG,KAAKkyD,UACL,MACJ,IAAK,WACDlyD,KAAKg6B,WAAah6B,KAAKgP,QAAQhP,KAAKiP,UACpCjP,KAAKkyD,UACL,MACJ,IAAK,SACDlyD,KAAKq5pB,mBACLr5pB,KAAKkyD,UACL,MACJ,IAAK,wBACGlyD,KAAKk5pB,uBACLl5pB,KAAK25pB,sBAAsB5tjB,SAE/B,MACJ,IAAK,kBACG/rG,KAAK25pB,uBACL35pB,KAAK25pB,sBAAsBznmB,UAE/B,MACJ,IAAK,YACDlyD,KAAKwrpB,YACL,MACJ,IAAK,qBACGxrpB,KAAKu5pB,mBACLv5pB,KAAKi5pB,mBAAmBtnhB,cAGxB3xI,KAAKi5pB,mBAAmBjphB,kBAW5CqohB,EAAMh9pB,UAAU0gV,kBAAoB,SAAU1+U,GAC1C,OAAO2C,KAAK04E,UAAU3E,YAAY12E,IAOtCg7pB,EAAMh9pB,UAAUgniB,SAAW,SAAUktH,GAC7BvvpB,KAAK45pB,cAAcrK,KACnBvvpB,KAAKszP,YAAci8Z,EACnBvvpB,KAAK4rD,aAGbysmB,EAAMh9pB,UAAU89pB,eAAiB,WAC7B,SAAuB,IAAnBn5pB,KAAK+5pB,YAAsB/5pB,KAAK+5pB,UAAUt9pB,SAKlD47pB,EAAMh9pB,UAAUu+pB,cAAgB,SAAUI,EAAWC,GAOjD,OANID,IAAch6pB,KAAKszP,cACnBtzP,KAAKq3pB,eAAiBr3pB,KAAKszP,aAE1B71P,EAAkBw8pB,KACnBj6pB,KAAKq3pB,eAAiB4C,GAEtBj6pB,KAAKq3pB,iBAAmB2C,GAAcA,GAAa,GAAKA,GAAah6pB,KAAK03U,YAKlF2gV,EAAMh9pB,UAAUw+pB,mBAAqB,WAC7B75pB,KAAKk6pB,mBACLl6pB,KAAKm6pB,kBAAkBn6pB,KAAKszP,aAEhC,IAAIrzP,GAASqzP,YAAatzP,KAAKszP,YAAaz6N,QAAQ,GACpD74B,KAAKwmB,QAAQ,QAASvmB,GACjBA,EAAK44B,QACN74B,KAAKkyD,WAGbmmmB,EAAMh9pB,UAAU+9pB,cAAgB,WAC5B,IAAIr6pB,EACJiB,KAAKgB,QAAQ8C,UAAUM,IAAI,mBAC3BpE,KAAKgP,QAAQhP,KAAKiP,UAClB,IAAIzS,GACA82P,YAAatzP,KAAKszP,YAAanjG,SAAUnwJ,KAAKmwJ,SAAUowH,UAAWvgR,KAAKugR,UACxEuqX,kBAAmB9qoB,KAAK8qoB,kBAAmBpzT,WAAY13U,KAAK03U,YAEhE34U,EAASiB,KAAKo6pB,kBAALp6pB,CAAwBxD,GACjC6iE,GAAer/D,KAAKgB,QAASjC,IAGjCs5pB,EAAMh9pB,UAAUm7pB,iBAAmB,WAC/Bx2pB,KAAK03U,WAAc13U,KAAK8qoB,kBAAoB9qoB,KAAKmwJ,UAAa,EAAMnwJ,KAAK8qoB,kBAAoB9qoB,KAAKmwJ,SAC7Fp7H,UAAU/0B,KAAK8qoB,kBAAoB9qoB,KAAKmwJ,UAAUjjJ,WAAY,IAAM,GAG7EmrpB,EAAMh9pB,UAAU++pB,iBAAmB,WAC/B,OAAOp6pB,KAAKg6B,YAEhBq+nB,EAAMh9pB,UAAU2T,QAAU,SAAUC,GAChC,GAAIA,EACA,IAEQzO,SAASgB,iBAAiByN,GAAUxS,SACpCuD,KAAKg6B,WAAaqjC,GAAiB78D,SAASmC,cAAcsM,GAAUjN,UAAUkO,SAGtF,MAAOrP,GACHb,KAAKg6B,WAAaqjC,GAAiBpuD,KAS/CoppB,EAAMh9pB,UAAU62D,QAAU,WAClBlyD,KAAKiP,UACLjP,KAAKgB,QAAQgB,UAAY,GACzBhC,KAAKw2pB,mBACLx2pB,KAAKo5pB,kBAGLp5pB,KAAKwrpB,YACLxrpB,KAAKg5pB,gBAAgB9mmB,UACjBlyD,KAAKu5pB,oBACLv5pB,KAAKi5pB,mBAAmB/mmB,UAExBlyD,KAAKk5pB,uBAAyBl5pB,KAAK25pB,uBACnC35pB,KAAK25pB,sBAAsBznmB,YAIvCmmmB,EAAMh9pB,UAAUmwpB,UAAY,WACpBxrpB,KAAKkT,UACLlT,KAAKgB,QAAQ8C,UAAUM,IAAI,SAG3BpE,KAAKgB,QAAQ8C,UAAUS,OAAO,UAGtC8zpB,EAAMh9pB,UAAUg+pB,iBAAmB,WAC/Br5pB,KAAK04E,UAAY,IAAI8+B,GAAKx3G,KAAKu/B,gBAAiBv/B,KAAKs4pB,iBAAkBt4pB,KAAKgO,SAEhFqqpB,EAAMh9pB,UAAU8+pB,kBAAoB,SAAUn9pB,GAC1C,IAAIq9pB,EAAar6pB,KAAKs6pB,cAAcz+pB,OAAO6xB,SAASgB,KAAM,OAAQ1xB,EAAMkQ,YACxErR,OAAOgxG,QAAQgvX,WAAY9+c,KAAMs9oB,GAAc,GAAIA,IAEvDhC,EAAMh9pB,UAAUi/pB,cAAgB,SAAUjub,EAAKhvO,EAAKL,GAChD,IAAIo7pB,EAAO,IAAIp0oB,OAAO,UAAY3mB,EAAM,cAAe,KACvD,GAAIgvO,EAAI18N,MAAMyopB,GACV,OAAO/rb,EAAI98N,QAAQ6opB,EAAM,KAAO/6pB,EAAM,IAAML,EAAQ,MAGpD,IAAI8vG,EAAO,GAKX,OAJ0B,IAAtBu/H,EAAI9tO,QAAQ,OACZuuG,EAAOu/H,EAAI98N,QAAQ,MAAO,KAC1B88N,EAAMA,EAAI98N,QAAQ,MAAO,KAEtB88N,IAA6B,IAAtBA,EAAI9tO,QAAQ,KAAc,IAAM,KAAOlB,EAAM,IAAML,EAAQ8vG,GAGjFurjB,EAAMh9pB,UAAUi+pB,4BAA8B,WAC1Ct5pB,KAAKgB,QAAQW,YAAYR,EAAc,OACnCkC,UAAW,gCACXI,OAASy8B,MAAOlgC,KAAK+7U,kBAAkB,oBAAqB/qN,SAAU,SAE1EhxH,KAAKgB,QAAQW,YAAYR,EAAc,OACnCkC,UAAW,8BACXI,OAASy8B,MAAOlgC,KAAK+7U,kBAAkB,uBAAwB/qN,SAAU,UAGjFqniB,EAAMh9pB,UAAUm+pB,2BAA6B,WACzCx5pB,KAAKgB,QAAQW,YAAYR,EAAc,OACnCkC,UAAW,8BACXI,OAASy8B,MAAOlgC,KAAK+7U,kBAAkB,mBAAoB/qN,SAAU,SAEzEhxH,KAAKgB,QAAQW,YAAYR,EAAc,OACnCkC,UAAW,8BACXI,OAASy8B,MAAOlgC,KAAK+7U,kBAAkB,mBAAoB/qN,SAAU,UAG7EqniB,EAAMh9pB,UAAUq+pB,aAAe,WAC3B,IAAI35pB,EAAQC,KAEPwL,GAAQkb,WADI,YAAa,WAAY,WAAY,YAExCtnB,QAAQ,SAAUpC,GACxB,IAAIgE,EAAUjB,EAAMiB,QAAQ2B,cAAc3F,GAC1CgE,EAAQwC,aAAa,aAAcxC,EAAQ6R,aAAa,aAIpEg4E,IACI3jF,GAAS,IACVmxpB,EAAMh9pB,UAAW,yBAAqB,GACzCwvF,IACI3jF,GAAS,IACVmxpB,EAAMh9pB,UAAW,6BAAyB,GAC7CwvF,IACI3jF,GAAS,IACVmxpB,EAAMh9pB,UAAW,0BAAsB,GAC1CwvF,IACI3jF,EAAS,KACVmxpB,EAAMh9pB,UAAW,gBAAY,GAChCwvF,IACI3jF,EAAS,KACVmxpB,EAAMh9pB,UAAW,iBAAa,GACjCwvF,IACI3jF,EAAS,IACVmxpB,EAAMh9pB,UAAW,mBAAe,GACnCwvF,IACI3jF,KACDmxpB,EAAMh9pB,UAAW,yBAAqB,GACzCwvF,IACI3jF,KACDmxpB,EAAMh9pB,UAAW,uBAAmB,GACvCwvF,IACI3jF,GAAS,IACVmxpB,EAAMh9pB,UAAW,iBAAa,GACjCwvF,IACI3jF,KACDmxpB,EAAMh9pB,UAAW,gBAAY,GAChCwvF,IACI3jF,EAAS,KACVmxpB,EAAMh9pB,UAAW,kBAAc,GAClCwvF,IACI/hF,KACDuvpB,EAAMh9pB,UAAW,aAAS,GAC7BwvF,IACI/hF,KACDuvpB,EAAMh9pB,UAAW,uBAAmB,GACvCwvF,IACI/hF,KACDuvpB,EAAMh9pB,UAAW,eAAW,GAC/Bg9pB,EAAQxtkB,IACJzhF,GACDivpB,IAEL9sjB,IC9ZEgvjB,GAA+B,WAK/B,SAASA,EAAc/K,GACnBxvpB,KAAKwvpB,YAAcA,EAkEvB,OA3DA+K,EAAcl/pB,UAAUkkC,cAAgB,WACpC,MAAO,iBAMXg7nB,EAAcl/pB,UAAU0wG,OAAS,WAC7B,IAAI4qjB,EAAW32pB,KAAKwvpB,YACpBxvpB,KAAKw6pB,iBAAmBr5pB,EAAc,OAASkC,UAAW,gBAC1D,IAAIo3pB,EAAct5pB,EAAc,OAASkC,UAAW,oBAChDq3pB,EAAiBv5pB,EAAc,OAASkC,UAAW,oBACnDyO,EAAQ3Q,EAAc,SAAWsC,OAASiD,KAAM,OAAQsqH,SAAU,OACtEhxH,KAAK26pB,UAAYx5pB,EAAc,QAAUkC,UAAW,aAAcrB,UAAWhC,KAAKwvpB,YAAYzzU,kBAAkB,mBAChH0+U,EAAY94pB,YAAYmQ,GACxB4opB,EAAe/4pB,YAAY3B,KAAK26pB,WAChC36pB,KAAKw6pB,iBAAiB74pB,YAAY84pB,GAClCz6pB,KAAKw6pB,iBAAiB74pB,YAAY+4pB,GAClC16pB,KAAKwvpB,YAAYxupB,QAAQW,YAAY3B,KAAKw6pB,kBAC1C,IAAII,EAAkB56pB,KAAKwvpB,YAAYuK,UACnCc,EAAkBD,EAAgBn+pB,OAASm+pB,GAAmB,EAAG,GAAI,GAAI,IACzEn0pB,EAAe,EAAiBlI,QAAQyB,KAAKwvpB,YAAYr/f,WAAa,EAAInwJ,KAAKwvpB,YAAYr/f,SAAW0qgB,EAAe,GACzH76pB,KAAK86pB,mBAAqB,IAAIrnM,IAC1BlwZ,WAAYs3lB,EACZ79pB,MAAOyJ,EACP2Z,OAAQpgB,KAAKwoM,SAASltM,KAAK0E,QAE/BA,KAAK86pB,mBAAmBzknB,SAASvkC,GACjC6kpB,EAASxmgB,SAAW1pJ,EACpBkwpB,EAAS/qmB,WACT+qmB,EAASnwoB,QAAQ,mBAAqB2pI,SAAU1pJ,KAOpD8zpB,EAAcl/pB,UAAUmtM,SAAW,SAAU3nM,GACzCb,KAAKwvpB,YAAYr/f,SAAWnwJ,KAAK86pB,mBAAmB99pB,MACpDgD,KAAKwvpB,YAAY5jmB,WACjB5rD,KAAKwvpB,YAAYhpoB,QAAQ,mBAAqB2pI,SAAUnwJ,KAAK86pB,mBAAmB99pB,SAEpFu9pB,EAAcl/pB,UAAUy+pB,iBAAmB,SAAUxvpB,EAAMtN,GACnDgD,KAAK86pB,qBACL96pB,KAAK86pB,mBAAmBxwpB,GAAQtN,IASxCu9pB,EAAcl/pB,UAAUiX,QAAU,SAAUrS,GACpCD,KAAK86pB,qBAAuB96pB,KAAK86pB,mBAAmB9zkB,cACpDhnF,KAAK86pB,mBAAmBxopB,UACxB/N,EAAOvE,KAAKw6pB,oBAGbD,KCzEPQ,GAAiC,WAOjC,SAASA,EAAgBvL,GACrBxvpB,KAAKwvpB,YAAcA,EAmDvB,OA7CAuL,EAAgB1/pB,UAAUkkC,cAAgB,WACtC,MAAO,mBAMXw7nB,EAAgB1/pB,UAAU0wG,OAAS,WAC/B/rG,KAAKgB,QAAUG,EAAc,OAASkC,UAAW,qBAAsBI,OAASiwH,aAAc,4BAC9F1zH,KAAKwvpB,YAAYxupB,QAAQW,YAAY3B,KAAKgB,SAC1ChB,KAAKkyD,WAKT6omB,EAAgB1/pB,UAAU62D,QAAU,WAC5BlyD,KAAKwvpB,YAAYwL,iBAAmBh7pB,KAAKwvpB,YAAYwL,gBAAgB9tpB,WAAWzQ,QAChFuD,KAAK2xI,cACL3xI,KAAKgB,QAAQgB,UAAYhC,KAAKwvpB,YAAYwL,iBAG1Ch7pB,KAAKgwI,eAMb+qhB,EAAgB1/pB,UAAU20I,YAAc,WACpChwI,KAAKgB,QAAQ0D,MAAM4xC,QAAU,QAKjCyknB,EAAgB1/pB,UAAUs2I,YAAc,WACpC3xI,KAAKgB,QAAQ0D,MAAM4xC,QAAU,IAQjCyknB,EAAgB1/pB,UAAUiX,QAAU,WAChC/N,EAAOvE,KAAKgB,UAET+5pB,KCxDX1C,GAAMjsjB,OAAO2ujB,GAAiBR,IAI9B,ICsoBWU,GDtoBPr7J,GAAsB,WAKtB,SAASA,EAAKt/f,EAAQixD,GAClBvxD,KAAKM,OAASA,EACdN,KAAKuxD,aAAeA,EACpBvxD,KAAKtD,mBAiOT,OA3NAkjgB,EAAKvkgB,UAAUkkC,cAAgB,WAC3B,MAAO,SAOXqge,EAAKvkgB,UAAU0wG,OAAS,WACpB,IACI4qjB,EADA3iC,EAAOh0nB,KAAKM,OAEhBN,KAAKk7pB,eACAz9pB,EAAkBuC,KAAKM,OAAO84pB,iBAC/Bp5pB,KAAKuxD,aAAatiD,SAAWjP,KAAKM,OAAO84pB,eAE7Cp5pB,KAAKgB,QAAUG,EAAc,OAASkC,UAAW,gBACjDszpB,EAAWwE,MAAez8pB,KAAWqgE,GAAoB/+D,KAAKuxD,gBAC1D80D,MAAOrmH,KAAKm/G,aAAa7jH,KAAK0E,MAC9Bo7pB,gBAAiBp7pB,KAAK4tL,SAAStyL,KAAK0E,MACpCkT,UAAW8gnB,EAAK9gnB,UAAWlF,OAAQgmnB,EAAKhmnB,OACxC8uP,QAAS98P,KAAKq7pB,YAAY//pB,KAAK0E,QAC/B,YAAa,aACjBA,KAAK22pB,SAAW,IAAI0B,GAAM1B,IAE9B/2J,EAAKvkgB,UAAUuyL,SAAW,SAAU/sL,GAChCb,KAAKuxD,aAAa4+F,SAAWtvJ,EAAEsvJ,SAC/BnwJ,KAAKuxD,aAAa+hM,YAAc,GAEpCssQ,EAAKvkgB,UAAUggqB,YAAc,WACzB,IAAIt7pB,EAAQC,KACZ,IAAMA,KAAKuxD,aAAqB,SAAG,CAM/B,IAAK,IALD+pmB,EAAsBn6pB,EAAc,OAASkC,UAAW,uBACxD2zpB,EAAiBh3pB,KAAKgB,QAAQ2B,cAAc,qBAC5Cu8nB,EAAO1+nB,SAASyE,yBAChBs2pB,EAAmBv7pB,KAAKgB,QAAQ2B,cAAc,uBAC9CvB,EAAQm6pB,EAAiB/5pB,iBAAiB,KACrCrF,EAAI,EAAGA,EAAIiF,EAAM3E,OAAQN,IAAK,CAC/B6D,KAAKM,OAAOysoB,kBACZ3roB,EAAMjF,GAAGqH,aAAa,YAAaxD,KAAKM,OAAOysoB,kBAAkBzpoB,IAGjElC,EAAMjF,GAAGqH,aAAa,YAAaxD,KAAKM,OAAOU,QAAQ6R,aAAa,MAAQ,kBAEhF,IAAI2opB,EAAsBr6pB,EAAc,OACxCq6pB,EAAoB75pB,YAAYP,EAAMjF,IACtC+ioB,EAAKv9nB,YAAY65pB,GAErBF,EAAoB35pB,YAAYu9nB,GAChC83B,EAAe7tV,aAAamyV,EAAqBC,IAChC,YAAa,WAAY,WAAY,UAAW,UAAW,UAAW,WAAY,YACzFn8pB,QAAQ,SAAUpC,GACxB,IAAIgE,EAAUjB,EAAMiB,QAAQ2B,cAAc3F,GACtC+C,EAAMO,OAAOysoB,mBACb/roB,EAAQwC,aAAa,YAAazD,EAAMO,OAAOysoB,kBAAkBzpoB,QAKjFs8f,EAAKvkgB,UAAUkvnB,UAAY,SAAU1pnB,GACjCb,KAAK6unB,YAAYhunB,IAMrB++f,EAAKvkgB,UAAU62D,QAAU,WACrBlyD,KAAK22pB,SAASzkmB,WAOlB0tc,EAAKvkgB,UAAUgniB,SAAW,SAAUktH,GAChCvvpB,KAAK22pB,SAASt0H,SAASktH,IAO3B3vJ,EAAKvkgB,UAAUwznB,YAAc,SAAUhunB,GACnCb,KAAKM,OAAOixD,aAAau5kB,kBAAoBjqoB,EAAEie,MAC/C9e,KAAKM,OAAOsrD,YAOhBg0c,EAAKvkgB,UAAUw1d,iBAAmB,SAAUhwd,GACxCb,KAAKM,OAAOkmB,QAAQ+rmB,GAAuB7znB,EAAOmC,GAC9CyyP,YAAatzP,KAAKM,OAAOixD,aAAa+hM,YAAalnE,YAAa,SAChE1lL,KAAM6rnB,OAMd3yH,EAAKvkgB,UAAUmsF,kBAAoB,SAAU3mF,GACzC,GAAIA,EAAEswF,SAAWnxF,KAAKu/B,gBAAtB,CAIA,IAAK,IADDktD,EAAU5rF,EAAEoC,WACP7E,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKmvF,GAAUruF,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC9D,IAAIkM,EAAOzH,EAAGzE,GACd4B,KAAK22pB,SAASrspB,GAAQmiF,EAAQniF,GAElCtK,KAAK22pB,SAAS/qmB,aAElBg0c,EAAKvkgB,UAAU8jH,aAAe,SAAUt+G,GACpC,IAAImznB,EAAOh0nB,KAAKM,OAChB,GAAIN,KAAKy7pB,eAAiB16lB,GAAgBizjB,KAAUA,EAAK6W,eAWrD,OAVK7qoB,KAAKy7pB,cAONz7pB,KAAKy7pB,eAAgB,GANrBznC,EAAKjmnB,OAAOywoB,IAAuBj4oB,SAAUvG,KAAMvE,QAASuE,KAAKqiiB,SAAUnnT,KAAMr6O,EAAEyyP,cACnFtzP,KAAKy7pB,eAAgB,EACrBz7pB,KAAK22pB,SAASrja,YAAc0gY,EAAKzikB,aAAa+hM,YAC9CtzP,KAAK22pB,SAAS/qmB,iBAKlB/qD,EAAEg4B,QAAS,GAGfm7lB,EAAK6W,gBAAiB,EACtB,IAAIzkI,EAAWpmgB,KAAKuxD,aAAa+hM,YACjCtzP,KAAKuxD,aAAa+hM,YAAczyP,EAAEyyP,YAClCtzP,KAAKM,OAAOyN,OAAO29nB,IACft/c,YAAa,SACbylU,aAAcuU,EACd9yQ,YAAazyP,EAAEyyP,YACf5sP,KAAMipnB,MAGd/vH,EAAKvkgB,UAAUg7G,gBAAkB,SAAUx1G,GACnCA,EAAEs1D,UAAUy7kB,KACZ/woB,EAAE2kB,iBACFxlB,KAAKgB,QAAQ2B,cAAcivoB,GAAW/woB,EAAEs1D,SAASkwD,UAQzDu5Y,EAAKvkgB,UAAUo0pB,sBAAwB,SAAU9upB,GACxCX,KAAK22pB,SAASuC,wBACfl5pB,KAAK22pB,SAASuC,uBAAwB,EACtCl5pB,KAAK22pB,SAAS/qmB,YAElB5rD,KAAK22pB,SAASqE,gBAAkBr6pB,EAChCX,KAAK22pB,SAAS/qmB,YAElBg0c,EAAKvkgB,UAAUqgqB,gBAAkB,SAAU76pB,GACvCb,KAAKM,OAAOU,QAAQW,YAAY3B,KAAKgB,SACrChB,KAAKM,OAAOutpB,aAAa7tpB,KAAKgB,SAC9BhB,KAAK22pB,SAAStgnB,SAASr2C,KAAKgB,UAEhC4+f,EAAKvkgB,UAAUyioB,kBAAoB,SAAUj9nB,GACrCA,EAAEswF,SAAWnxF,KAAKu/B,iBAAmB1+B,EAAE4+B,SACvCz/B,KAAK+rG,SACL/rG,KAAK07pB,oBAMb97J,EAAKvkgB,UAAUqB,iBAAmB,WAC9BsD,KAAK27pB,UACD5jjB,KAAM/3G,KAAK+rG,OACXltF,IAAK7e,KAAK07pB,gBACVr5pB,MAAOrC,KAAKuqnB,UACZqxC,SAAU57pB,KAAK6wd,iBACfpuC,aAAczib,KAAK89nB,kBACnB+9B,cAAe77pB,KAAKwnF,kBACpB4rkB,SAAUpzpB,KAAKq2G,iBAEfr2G,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAOslF,GAAG6ljB,GAAoBzroB,KAAK27pB,SAAS5jjB,KAAM/3G,MACvDA,KAAKM,OAAOslF,GAAGm1jB,GAAmB/6oB,KAAK27pB,SAAS98oB,IAAK7e,MACrDA,KAAKM,OAAOslF,GAAGoljB,GAAkBhroB,KAAK27pB,SAASt5pB,MAAOrC,MACtDA,KAAKM,OAAOslF,GAAGk2kB,GAAqB97pB,KAAK27pB,SAASC,SAAU57pB,MAC5DA,KAAKM,OAAOslF,GAAGi4iB,GAAiB79nB,KAAK27pB,SAASl5O,aAAczib,MAC5DA,KAAKM,OAAOslF,GAAGq1jB,GAA4Bj7oB,KAAK27pB,SAASE,cAAe77pB,MACxEA,KAAKM,OAAOslF,GAAGo8jB,GAAmBhipB,KAAK27pB,SAASvI,SAAUpzpB,QAK9D4/f,EAAKvkgB,UAAUuB,oBAAsB,WAC7BoD,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAO0lF,IAAIyljB,GAAoBzroB,KAAK27pB,SAAS5jjB,MAClD/3G,KAAKM,OAAO0lF,IAAI+0jB,GAAmB/6oB,KAAK27pB,SAAS98oB,KACjD7e,KAAKM,OAAO0lF,IAAIgljB,GAAkBhroB,KAAK27pB,SAASt5pB,OAChDrC,KAAKM,OAAO0lF,IAAI81kB,GAAqB97pB,KAAK27pB,SAASC,UACnD57pB,KAAKM,OAAO0lF,IAAI63iB,GAAiB79nB,KAAK27pB,SAASl5O,cAC/Czib,KAAKM,OAAO0lF,IAAIi1jB,GAA4Bj7oB,KAAK27pB,SAASE,eAC1D77pB,KAAKM,OAAO0lF,IAAIg8jB,GAAmBhipB,KAAK27pB,SAASvI,YAOrDxzJ,EAAKvkgB,UAAUiX,QAAU,WACrBtS,KAAKpD,sBACLoD,KAAKk7pB,gBAETt7J,EAAKvkgB,UAAU6/pB,aAAe,WACtBl7pB,KAAK22pB,WAAa32pB,KAAK22pB,SAAS3vkB,cAChChnF,KAAK22pB,SAASrkpB,UACd/N,EAAOvE,KAAKgB,WAGb4+f,KAMPgyI,IACAlnc,OAAQ,UACRC,SAAU,UACV4+c,gBAAiB,UACjBD,cAAe,WACfE,UAAW,QACXC,YAAa,SEhQbn/jB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAkBxCoxkB,GAAoC,SAAU5wkB,GAE9C,SAAS4wkB,IACL,IAAIh8pB,EAAmB,OAAXorF,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAEhE,OADAD,EAAMiB,QAAUG,EAAc,MAAQkC,UAAW,oBAC1CtD,EAwGX,OA5GAuqF,GAAUyxkB,EAAoB5wkB,GAU9B4wkB,EAAmB1gqB,UAAUqqoB,OAAS,WAClC,OAAOvkoB,EAAc,QAOzB46pB,EAAmB1gqB,UAAU0wG,OAAS,SAAU9oC,EAAMzmE,GAClD,IAGIsV,EAHAk3X,EAAKhpY,KAAKM,OAAOU,QAAQ2B,cAAc,gBACvCpC,EAAOP,KAAKgB,QAAQY,YACpBgmoB,EAAW5noB,KAAK0loB,SAEhB7okB,EAASoG,EAAKpG,OAGlB,GAFAmsU,EAAGrnY,YAAYpB,GACfA,EAAKiD,aAAa,eAAgBq5D,EAAOn9D,KACrB,aAAhBm9D,EAAOn2D,KAAqB,CAC5B,IAAKjJ,EAAkBo/D,EAAOs4Z,kBAAmBt4Z,EAAOs4Z,gBAAoB13d,EAAkBo/D,EAAOm/lB,mBAiCjGt4pB,EAAWkkoB,GACPrmgB,MAAS,+BAEbzvH,EAAQ3Q,EAAc,SAClBmC,GAAIu5D,EAAO9wC,MAAQ,iBAAkB1oB,UAAW,eAChDI,OACIiD,KAAM,SAAUw5B,MAAO28B,EAAOsB,WAAa8E,EAAKv/D,WAAWw8B,MAC3DljC,MAAOR,EAAKymE,EAAKpG,OAAO9wC,OAASvvB,EAAKymE,EAAKpG,OAAO9wC,OAAS,GAAIna,KAAM,YAG7Eg2nB,EAASjmoB,YAAYmQ,GACrBsZ,GAAM2rG,aACF/1H,QAAS8Q,EAAOiV,eAAgB,QAChC9jB,YACIiQ,UAAWlT,KAAKM,OAAO4S,UAAWkS,iBAAiB,UA1C3D,GAJA7kB,EAAKuD,UAAUM,IAAI,cACnBV,EAAWkkoB,GACPrmgB,MAAS,kBAET9jI,EAAkBo/D,EAAOm/lB,kBAAkBpxkB,QAC3C94E,EAAQ3Q,EAAc,SAClBmC,GAAIu5D,EAAO9wC,MAAQ,iBAAkB1oB,UAAW,2CAChDI,OAASiD,KAAM,SAAUw5B,MAAO28B,EAAOsB,cAE3CypkB,EAASjmoB,YAAYmQ,OAEpB,CACD,IAAI7R,GAAS48D,OAAQA,EAAQt8D,KAAM+oH,SAC/Bv7F,EAAO8uC,EAAOm/lB,kBAAkBpxkB,OAKpC,GAJoB,iBAAT78D,IACPA,EAAOlxB,EAASkxB,EAAMlyB,SAGL,iBADrBiW,EAAQic,EAAK9tB,IACkB,CAC3B,IAAIiB,EAAMC,EAAc,OACxBD,EAAIc,UAAY8P,EAChBA,EAAQ5Q,EAAI0b,WAEhBlZ,EAAWkkoB,GACPrmgB,MAAO,2CACPrhG,MAAO28B,EAAOsB,WACd76D,GAAIu5D,EAAO9wC,MAAQ,mBAEvB67mB,EAASjmoB,YAAYmQ,GA+B7B,KAR8B,IAA1B+qD,EAAOs4Z,gBAA6C,KAAjBt4Z,EAAO9wC,OAAgBtuB,EAAkBo/D,EAAO9wC,UACnFja,EAAMtO,aAAa,WAAY,QAC/BsO,EAAMhO,UAAUM,IAAI,cAEnBy4D,EAAOrlC,SACRj3B,EAAKuD,UAAUM,IAAI,UAEvBpE,KAAKomoB,WAAW7loB,EAAMqnoB,IACjBnqoB,EAAkBo/D,EAAOs4Z,iBAAmBt4Z,EAAOs4Z,kBAAoB13d,EAAkBo/D,EAAOm/lB,mBAAoB,CACrH,IAAIC,EAAgBp/lB,EAAOm/lB,kBAAkBj6pB,MACzC9B,GAASe,QAAS8Q,EAAO+qD,OAAQA,GACR,iBAAlBo/lB,IACPA,EAAgBp/pB,EAASo/pB,EAAepgqB,SAE5CogqB,EAAc36pB,KAAKtB,KAAMC,IAGjC,OAAOM,GAQXw7pB,EAAmB1gqB,UAAU+qoB,WAAa,SAAU7loB,EAAMotC,GAEtD,OADAptC,EAAKoB,YAAYgsC,GACVptC,GAEJw7pB,GACTz2B,ICxHE42B,GAA8B,WAC9B,SAASA,EAAa57pB,EAAQ67pB,EAAqB76lB,EAAgB2sjB,GAC/DjunB,KAAKM,OAASA,EACdN,KAAKshE,eAAiBA,EACtBthE,KAAKiunB,eAAiBA,EACtBjunB,KAAKo8pB,sBAAwBD,EAiDjC,OA5CAD,EAAa7gqB,UAAUghqB,iBAAmB,SAAUC,EAAen1pB,EAAQ01D,EAAQ0/lB,GAC/Ev8pB,KAAKkiE,UAAYq6lB,EACjB,IAAIlsC,EAAOxzjB,EAAOn2D,KAAO,WACzB1G,KAAKw8pB,SAAWx8pB,KAAKy8pB,WAAeh/pB,EAAkBuC,KAAKM,OAAO2tnB,eAAeyuC,YAC5Ej/pB,EAAkBuC,KAAKM,OAAO2tnB,eAAeyuC,UAAUrsC,IACXrwnB,KAAKo8pB,sBAAsB/rC,GAAxErwnB,KAAKM,OAAO2tnB,eAAeyuC,UAAUrsC,GACzC,IAAIssC,EAAiB38pB,KAAKy8pB,WACtBG,EAAgB58pB,KAAK68pB,gBAAgBhgmB,EAAQwzjB,GAC7CysC,EAAU37pB,EAAc,OAASkC,UAAW,kBAChDi5pB,EAAc36pB,YAAYm7pB,GAC1B,IAAIC,EAAY57pB,EAAc,SAAWmC,GAAIu5D,EAAOn9D,IAAM,YAC1Do9pB,EAAQn7pB,YAAYo7pB,GACpB/8pB,KAAKg9pB,SAAW,IAAIvpM,IAChBlwZ,WAAYo5lB,EACZ/woB,QAAUa,KAAM,OAAQzvB,MAAO,SAC/B0E,KAAM1B,KAAKi9pB,aAAa3hqB,KAAK0E,MAC7BysB,KAAMmwoB,IAEV58pB,KAAKg9pB,SAAS3mnB,SAAS,IAAMwmB,EAAOn9D,IAAM,YAE9Cw8pB,EAAa7gqB,UAAU4hqB,aAAe,SAAUh9pB,GAC5CA,EAAK2+D,MAAM59D,QAAQ0D,MAAM+9D,QAAUziE,KAAKkiE,UAAUO,OAAS,GAAGv1D,YAElEgvpB,EAAa7gqB,UAAUwhqB,gBAAkB,SAAUp8lB,EAAK4vjB,GAGpD,IAAK,IAFD6sC,EAAW,GAEN9+pB,EAAK,EAAGmpX,EADHvnX,KAAKM,OAAO2tnB,eAAelwjB,QACH3/D,EAAKmpX,EAAU9qX,OAAQ2B,IAAM,CAC/D,IAAIy+D,EAAS0qT,EAAUnpX,GACvB,GAAIqiE,EAAI10C,QAAU8wC,EAAO9wC,OAAU00C,EAAIgnjB,mBAAqBhnjB,EAAIrC,kBAAoBvB,EAAO9wC,MAAQ,CAC/F,IAAIoxoB,EAAgB,IAAI35lB,GAAYxjE,KAAKw8pB,UAAUv4lB,cAAa,IAAIZ,IAAQQ,MAAM,QAAS,QAAShH,EAAOkH,WAC3Gm5lB,EAAYz/pB,EAAkB0/pB,EAAc,IAA8B,GAAxBA,EAAc,GAAG1woB,MAM3E,MAHiB,KAAbywoB,IACAA,EAAWl9pB,KAAKw8pB,SAAS,GAAG/voB,MAEzBywoB,GAKXhB,EAAa7gqB,UAAU+hqB,cAAgB,WACnC,OAAOp9pB,KAAKg9pB,SAAShgqB,OAElBk/pB,KCtDPmB,GAAgC,WAChC,SAASA,EAAe/8pB,EAAQghE,EAAgB2sjB,GAC5CjunB,KAAKM,OAASA,EACdN,KAAKs9pB,WAAah8lB,EAClBthE,KAAKiunB,eAAiBA,EA4D1B,OA1DAovC,EAAehiqB,UAAUuvF,OAAS,SAAU3qF,GACxCD,KAEKuG,SAAWpF,EAAc,SAAWkC,UAAW,iBAAkBC,GAAI,SAAWrD,EAAK48D,OAAOn9D,MACjGO,EAAKkH,OAAOxF,YAAY3B,KAAKuG,UAC7BvG,KAAKkiE,UAAYjiE,EAAKiiE,UACtBliE,KAAKu9pB,OAAS,IAAIlgM,GAAar9d,KAAKw9pB,uBAAuBv9pB,IAC3DD,KAAKu9pB,OAAOlnnB,SAASr2C,KAAKuG,WAE9B82pB,EAAehiqB,UAAUmiqB,uBAAyB,SAAUv9pB,GACxD,IAAIF,EAAQC,KACRynnB,EAAkBxnnB,EAAK48D,OAAO4qjB,kBAC9BlkjB,EAAakkjB,EAAkBxnnB,EAAK48D,OAAO0G,WAAavjE,KAAKM,OAAOijE,WACpE33C,GAAW5uB,MAAOyqnB,EAAkBxnnB,EAAK48D,OAAOuB,gBAAkBn+D,EAAK48D,OAAO9wC,OAClF,OACIw3C,WAAYA,aAAsBC,GAAcD,EAAa,IAAIC,GAAYD,GAC7E33C,OAAQA,EACR5d,OAAQhO,KAAKM,OAAO0N,OACpBkF,UAAWlT,KAAKM,OAAO4S,UACvB0kL,UAAW,YACXl2L,KAAM1B,KAAK2uN,UAAUrzN,KAAK0E,MAC1BiT,SAAU,iBACV/Q,MAAO,WACHnC,EAAMw9pB,OAAOhgM,WAAat9d,EAAKw9pB,gBAAgBL,iBAEnD9gM,UAAU,EACVx1c,YAAa7mB,EAAKy9pB,aAAa3plB,YAAY,cAC3C40iB,eAAgB,SAAU9nnB,GACtBA,EAAE9B,OAAS8B,EAAE9B,OAAOioC,OAAO,SAAUjqC,EAAKkV,EAAOi3B,GAC7C,OAAOA,EAAItR,IAAI,SAAUo0C,GACrB,OAAOA,EAAOjsE,EAAMw9pB,OAAO3xoB,OAAO5uB,SACnCuB,QAAQxB,EAAIgD,EAAMw9pB,OAAO3xoB,OAAO5uB,UAAYiV,OAK/DorpB,EAAehiqB,UAAU0G,MAAQ,SAAU9B,GACzBD,KAAKiunB,eAAelwjB,QAClC,GAA2B,KAAvB99D,EAAK09pB,gBAAyBlgqB,EAAkBwC,EAAK09pB,eAAgB,CACtDn9pB,SAASmC,cAAc,UAAY1C,EAAK48D,OAAOn9D,KAAKgoF,cAAc,GACxE1qF,MAAQiD,EAAK09pB,gBAG9BN,EAAehiqB,UAAUqjP,KAAO,SAAU19O,EAAS67D,EAAQ+gmB,EAAYC,GACnE,IAAIC,EAAWt9pB,SAASmC,cAAc,UAAYk6D,EAAOn9D,KAAKgoF,cAAc,GACxEl8E,GAAQkb,WACRo3oB,EAASvoM,YACTuoM,EAASpjiB,YAEb,IAAIu1hB,EAAc6N,EAAS9gqB,OACvBS,EAAkBwypB,IAAgC,KAAhBA,KAClCA,EAAc,MAElB4N,EAAU9N,eAAelzlB,EAAO9wC,MAAO6xoB,EAAY3N,EAAa,OAAO,IAE3EoN,EAAehiqB,UAAUszN,UAAY,SAAU1uN,GAC3CuiE,GAAqBviE,EAAMD,KAAKkiE,YAE7Bm7lB,KClEPU,GAAgC,WAChC,SAASA,EAAez9pB,EAAQghE,EAAgB2sjB,GAC5CjunB,KAAKiunB,eAAiBA,EACtBjunB,KAAKM,OAASA,EACdN,KAAKshE,eAAiBA,EAuB1B,OArBAy8lB,EAAe1iqB,UAAUuvF,OAAS,SAAU3qF,GACxCD,KAAKuG,SAAWpF,EAAc,SAAWkC,UAAW,iBAAkBC,GAAI,YAAcrD,EAAK48D,OAAOn9D,MACpGO,EAAKkH,OAAOxF,YAAY3B,KAAKuG,UAC7BvG,KAAKg+pB,cAAgB,IAAInmiB,IACrB77F,OAAQ/7B,EAAK48D,OAAO7gC,OACpBhuB,OAAQhO,KAAKM,OAAO0N,OACpBiF,SAAU,iBACV6T,YAAa7mB,EAAKy9pB,aAAa3plB,YAAY,cAC3C7gE,UAAWlT,KAAKM,OAAO4S,YAE3BlT,KAAKg+pB,cAAc3nnB,SAASr2C,KAAKuG,WAErCw3pB,EAAe1iqB,UAAU0G,MAAQ,SAAU9B,GACrBO,SAASmC,cAAc,aAAe1C,EAAK48D,OAAOn9D,KAAKgoF,cAAc,GAC3E1qF,MAAQiD,EAAK09pB,eAE7BI,EAAe1iqB,UAAUqjP,KAAO,SAAU19O,EAAS67D,EAAQ+gmB,EAAYC,GACnE,IACI5N,EADczvpB,SAASmC,cAAc,aAAek6D,EAAOn9D,KAAKgoF,cAAc,GACpD1qF,MAC9B6gqB,EAAU9N,eAAelzlB,EAAO9wC,MAAO6xoB,EAAY3N,EAAa,OAAO,IAEpE8N,KCzBPE,GAAiC,WACjC,SAASA,EAAgB39pB,EAAQghE,EAAgB2sjB,GAC7CjunB,KAAKM,OAASA,EACdN,KAAKshE,eAAiBA,EACtBthE,KAAKiunB,eAAiBA,EAuC1B,OArCAgwC,EAAgB5iqB,UAAUuvF,OAAS,SAAU3qF,GACzC,IAAIwnnB,EAAkBxnnB,EAAK48D,OAAO4qjB,kBAC9BlkjB,EAAakkjB,EAAkBxnnB,EAAK48D,OAAO0G,WAAavjE,KAAKM,OAAOijE,WACpE33C,EAAS67lB,EAAkBxnnB,EAAK48D,OAAOuB,gBAAkBn+D,EAAK48D,OAAO9wC,MACzE/rB,KAAK0C,KAAOvB,EAAc,SAAWkC,UAAW,iBAAkBC,GAAI,WAAarD,EAAK48D,OAAOn9D,MAC/FO,EAAKkH,OAAOxF,YAAY3B,KAAK0C,MAC7B1C,KAAKkiE,UAAYjiE,EAAKiiE,UACtBliE,KAAKk+pB,aAAe,IAAIzqM,IACpBlwZ,WAAYA,aAAsBC,GAC9BD,EAAa,IAAIC,GAAYD,GACjC7H,OAAO,IAAI2H,IAAQ59D,OAAOmmB,GAC1BA,QAAUa,KAAMb,EAAQ5uB,MAAO4uB,GAC/B9E,YAAa7mB,EAAKy9pB,aAAa3plB,YAAY,eAC3C9gE,SAAU,iBACVjF,OAAQhO,KAAKM,OAAO0N,OACpBkF,UAAWlT,KAAKM,OAAO4S,UACvBxR,KAAM1B,KAAK2uN,UAAUrzN,KAAK0E,MAC1B2onB,eAAgB,SAAU9nnB,GACtBA,EAAE9B,OAAS0gE,GAASg1F,SAAS5zJ,EAAE9B,OAAQ6sB,GAAQ,MAGvD5rB,KAAKk+pB,aAAa7nnB,SAASr2C,KAAK0C,OAEpCu7pB,EAAgB5iqB,UAAU0G,MAAQ,SAAU9B,GACxC,IAAIk+pB,EAAW39pB,SAASmC,cAAc,YAAc1C,EAAK48D,OAAOn9D,KAAKgoF,cAAc,GAC9EjqF,EAAkBwC,EAAK09pB,iBACxBQ,EAAS1xoB,KAAOxsB,EAAK09pB,gBAG7BM,EAAgB5iqB,UAAUqjP,KAAO,SAAU19O,EAAS67D,EAAQ+gmB,EAAYC,GACpE,IACI5N,EADWzvpB,SAASmC,cAAc,YAAck6D,EAAOn9D,KAAKgoF,cAAc,GACnD1qF,MAC3B6gqB,EAAU9N,eAAelzlB,EAAO9wC,MAAO6xoB,EAAY3N,EAAa,OAAO,IAE3EgO,EAAgB5iqB,UAAUszN,UAAY,SAAU1uN,GAC5CuiE,GAAqBviE,EAAMD,KAAKkiE,YAE7B+7lB,KC5CPG,GAA8B,WAC9B,SAASA,EAAa99pB,EAAQghE,EAAgB2sjB,GAC1CjunB,KAAKM,OAASA,EACdN,KAAKuloB,QAAUjkkB,EACfthE,KAAKq+pB,aAAepwC,EAkCxB,OAhCAmwC,EAAa/iqB,UAAUuvF,OAAS,SAAU3qF,GACtC,IAAIgvE,EAAO,IAAIy7B,GACX4zjB,EAAYr+pB,EAAK48D,OAAO7gC,OACxBA,EAASizC,EAAKk8B,gBAAiBzkG,KAAM,OAAQg7D,SAAU48lB,IAAa,GACxEt+pB,KAAKkiE,UAAYjiE,EAAKiiE,UACtBliE,KAAKu+pB,UAAYp9pB,EAAc,SAAWkC,UAAW,iBAAkBC,GAAI,UAAYrD,EAAK48D,OAAOn9D,MACnGO,EAAKkH,OAAOxF,YAAY3B,KAAKu+pB,WAC7Bv+pB,KAAKw+pB,cAAgB,IAAIxqd,IACrBh4K,OAAQA,EACR/oB,SAAU,iBACV6T,YAAa7mB,EAAKy9pB,aAAa3plB,YAAY,cAC3C/9D,MAAO,OACPhI,OAAQhO,KAAKM,OAAO0N,OACpBkF,UAAWlT,KAAKM,OAAO4S,UACvBxR,KAAM1B,KAAK2uN,UAAUrzN,KAAK0E,QAE9BA,KAAKw+pB,cAAcnonB,SAASr2C,KAAKu+pB,YAErCH,EAAa/iqB,UAAU0G,MAAQ,SAAU9B,GACvBD,KAAKq+pB,aAAatgmB,QAChBv9D,SAASmC,cAAc,WAAa1C,EAAK48D,OAAOn9D,KAAKgoF,cAAc,GACzE1qF,MAASS,EAAkBwC,EAAK09pB,eAAgD,KAA/B,IAAI39oB,KAAK/f,EAAK09pB,gBAE7ES,EAAa/iqB,UAAUqjP,KAAO,SAAU19O,EAAS67D,EAAQ+gmB,EAAYC,GACjE,IACI5N,EADYzvpB,SAASmC,cAAc,WAAak6D,EAAOn9D,KAAKgoF,cAAc,GAClD1qF,MAC5BizpB,EAAcxypB,EAAkBwypB,GAAe,KAAOA,EACtD4N,EAAU9N,eAAelzlB,EAAO9wC,MAAO6xoB,EAAY3N,EAAa,OAAO,IAE3EmO,EAAa/iqB,UAAUszN,UAAY,SAAU1uN,GACzCA,EAAK2+D,MAAM59D,QAAQ0D,MAAM+9D,QAAUziE,KAAKkiE,UAAUO,OAAS,GAAGv1D,YAE3DkxpB,KC/BPK,GAAoC,WACpC,SAASA,EAAmBn+pB,EAAQ2tnB,EAAgB3sjB,EAAgB66lB,EAAqBuC,GACrF1+pB,KAAK2+pB,cAAe,EACpB3+pB,KAAK4+pB,UACDx0nB,OAAUiznB,GAAgBzuhB,OAAUmvhB,GAAgBpnlB,KAAQynlB,GAAcS,QAAWZ,GAAiBa,SAAYV,IAEtHp+pB,KAAKM,OAASA,EACdN,KAAKiunB,eAAiBA,EACtBjunB,KAAKshE,eAAiBA,EACtBthE,KAAKo8pB,sBAAwBD,EAC7Bn8pB,KAAK69pB,UAAYa,EACjB1+pB,KAAK++pB,SAAW,IAAI7C,GAAal8pB,KAAKM,OAAQN,KAAKo8pB,sBAAuBp8pB,KAAKshE,gBAC/EthE,KAAKqlH,KAAOrlH,KAAKshE,eAAeE,WAAW,gBAgK/C,OA9JAi9lB,EAAmBpjqB,UAAUgjmB,WAAa,SAAUp+lB,GAChDD,KAAKygE,IAAMzgE,KAAKM,OAAOo0nB,iBAAiBz0nB,EAAK8rB,QACzCtuB,EAAkBuC,KAAKygE,IAAIz5B,SAAYvpC,EAAkBuC,KAAKygE,IAAIz5B,OAAOtgC,OAAkC,SAAzB1G,KAAKygE,IAAIz5B,OAAOtgC,OAClG1G,KAAKg/pB,iBAAiB/+pB,EAAKkH,OAAQnH,KAAKygE,MAGhDg+lB,EAAmBpjqB,UAAU00mB,YAAc,WACvC,IAAIrtmB,EAAOlC,SAASosB,eAAe5sB,KAAKu8pB,OAAOv7pB,QAAQsC,IACnDtD,KAAKu8pB,SAAWv8pB,KAAKu8pB,OAAOv1kB,aAAetkF,IAC3C1C,KAAKM,OAAOyN,OAAOkinB,IAA0BlkmB,MAAO/rB,KAAKygE,IAAI10C,QAC7D/rB,KAAK2+pB,cAAe,EACpB3+pB,KAAKu8pB,OAAOjqpB,UACZ/N,EAAO7B,KAGf+7pB,EAAmBpjqB,UAAU2jqB,iBAAmB,SAAU73pB,EAAQ01D,GAC9D,IAAI58D,GACAmsL,YAAamjc,GAAyBC,YAAaxvnB,KACnDyvnB,WAAY5yjB,EAAO9wC,MAAO2jmB,WAAY7yjB,EAAOn2D,MAEjD1G,KAAKM,OAAOkmB,QAAQmpmB,GAAoB1vnB,GACxC,IAAIg/pB,EAAU99pB,EAAc,OAASkC,UAAW,mBAAoBC,GAAIu5D,EAAOn9D,IAAM,YACrFM,KAAKk/pB,OAAS/9pB,EAAc,OAASkC,UAAW,WAAYC,GAAIu5D,EAAOn9D,IAAM,YAC7EM,KAAKM,OAAOU,QAAQW,YAAY3B,KAAKk/pB,QACrCl/pB,KAAKu8pB,OAAS,IAAIz3iB,IACd6B,eAAe,EACfX,eAAe,EACfh4G,OAAQhO,KAAKM,OAAO0N,OACpBwpB,SAAS,EACTtkB,UAAWlT,KAAKM,OAAO4S,UACvB4pP,QAAS98P,KAAK8vnB,cAAcx0nB,KAAK0E,KAAMmH,EAAQ01D,GAC/C3oD,SAAUlU,KAAKM,OAAOU,QAAQ8C,UAAUK,SAAS,aAAgBiS,EAAG,SAAUC,EAAG,WAAeD,EAAG,GAAIC,EAAG,IAC1GlP,OAAQnH,KAAKM,OAAOU,QAAQ8C,UAAUK,SAAS,YAAc3D,SAASuL,KAAO/L,KAAKM,OAAOU,QACzFmlH,UACQE,MAAOrmH,KAAKm/pB,eAAe7jqB,KAAK0E,KAAM68D,GACtCupD,aACIhsF,QAASp6B,KAAKqlH,KAAKtxC,YAAY,gBAAiBiqC,WAAW,EAAM/qG,SAAU,oBAI/EozG,MAAOrmH,KAAKo/pB,cAAc9jqB,KAAK0E,KAAM68D,GACrCupD,aAAehsF,QAASp6B,KAAKqlH,KAAKtxC,YAAY,eAAgB9gE,SAAU,wBAEhFmnB,QAAS6koB,EACTjppB,OAASvY,EAAkBo2C,GAAa1sC,EAAQ,cAAiBnH,KAAKM,OAAOU,QAAQ8C,UAAUK,SAAS,YAAc,IAAM,IAC5HylH,mBAAqB5xF,OAAQ,QAC7B/kB,SAAU,mBAEdjT,KAAKu8pB,OAAOlmnB,SAASr2C,KAAKk/pB,SAE9BT,EAAmBpjqB,UAAUy0nB,cAAgB,SAAU3onB,EAAQ01D,GACtDrxD,GAAQkb,UACTu7C,GAAqB96D,EAAQnH,KAAKu8pB,OAAQv8pB,KAAKM,QAEnDN,KAAKq/pB,eAAel4pB,EAAQ01D,GAC5B78D,KAAKM,OAAOyN,OAAOiinB,OACnBhwnB,KAAKu8pB,OAAOv7pB,QAAQ0D,MAAM6uD,UAAY,QACtCvzD,KAAKu8pB,OAAOt4iB,OACZjkH,KAAKs/pB,YAAYzimB,EAAQ78D,KAAKu8pB,OAAOv7pB,QAAQ2B,cAAc,IAAMk6D,EAAOn9D,IAAM,YAC9E,IAAIO,GACAmsL,YAAakmc,GACb9C,YAAaxvnB,KAAMyvnB,WAAY5yjB,EAAO9wC,MAAO2jmB,WAAY7yjB,EAAOn2D,MAEpE1G,KAAK2+pB,cAAe,EACpB3+pB,KAAKM,OAAOkmB,QAAQ+rmB,GAAuBtynB,IAE/Cw+pB,EAAmBpjqB,UAAUgkqB,eAAiB,SAAUl4pB,EAAQs5D,GAC5D,IAAI67lB,EAAgBt8pB,KAAKu8pB,OAAOv7pB,QAAQ2B,cAAc,qBACtD3C,KAAKq8pB,iBAAiBC,EAAen1pB,EAAQs5D,GAC7CzgE,KAAKu/pB,gBAAgBjD,EAAen1pB,EAAQs5D,IAEhDg+lB,EAAmBpjqB,UAAUghqB,iBAAmB,SAAUC,EAAen1pB,EAAQ01D,GAC7E78D,KAAK++pB,SAAS1C,iBAAiBC,EAAen1pB,EAAQ01D,EAAQ78D,KAAKu8pB,SAEvEkC,EAAmBpjqB,UAAUkkqB,gBAAkB,SAAUjD,EAAen1pB,EAAQ01D,GAC5E,IAAI2imB,EAAWr+pB,EAAc,OAASkC,UAAW,sBACjDi5pB,EAAc36pB,YAAY69pB,GACsCx/pB,KAAK++pB,SAAqB/+pB,KAAKu8pB,OAA/F,IACIkD,EAAqB,IAAIz/pB,KAAK4+pB,SAAS/hmB,EAAOn2D,MAAM1G,KAAKM,OAAQN,KAAKshE,eAAgBthE,KAAKM,OAAO2tnB,gBACtG,GAAKxwnB,EAAkBo/D,EAAO71B,SAAYvpC,EAAkBo/D,EAAO71B,OAAO04nB,KAClEjiqB,EAAkBo/D,EAAO71B,OAAO04nB,GAAG90kB,QAWvC60kB,EAAmB70kB,QACf/tB,OAAQA,EAAQ11D,OAAQq4pB,EACxB/B,gBAAiBz9pB,KAAK++pB,SAAUrB,aAAc19pB,KAAKqlH,KAAMnjD,UAAWliE,KAAKu8pB,aAb7B,CAChD,IAAIxuoB,EAAO8uC,EAAO71B,OAAO04nB,GAAG90kB,OACR,iBAAT78D,IACPA,EAAOlxB,EAASkxB,EAAMlyB,SAE1BkyB,GACI8uC,OAAQA,EAAQ11D,OAAQq4pB,EACxB/B,gBAAiBz9pB,KAAK++pB,SAAU78lB,UAAWliE,KAAKu8pB,WAU5DkC,EAAmBpjqB,UAAUikqB,YAAc,SAAU7+lB,EAAKk/lB,GAKtD,IAAK,IAJDC,EACAz4pB,EAASw4pB,EAAch9pB,cAAc,sBACrC88pB,EAAqB,IAAIz/pB,KAAK4+pB,SAASn+lB,EAAI/5D,MAAM1G,KAAKM,OAAQN,KAAKshE,eAAgBthE,KAAKM,OAAO2tnB,gBAE1F7vnB,EAAK,EAAGmpX,EADHvnX,KAAKiunB,eAAelwjB,QACI3/D,EAAKmpX,EAAU9qX,OAAQ2B,IAAM,CAC/D,IAAIy+D,EAAS0qT,EAAUnpX,GACnBqiE,EAAI10C,QAAU8wC,EAAO9wC,OAAS00C,EAAIrC,kBAAoBvB,EAAO9wC,QAC7D6zoB,EAAU/imB,EAAO7/D,OAGzB,GAAKS,EAAkBgjE,EAAIz5B,SAAYvpC,EAAkBgjE,EAAIz5B,OAAO04nB,KAC5DjiqB,EAAkBgjE,EAAIz5B,OAAO04nB,GAAG39pB,OAQpC09pB,EAAmB19pB,OAAQ86D,OAAQ4D,EAAKt5D,OAAQA,EAAQ7G,OAAQN,KAAKM,OAAQq9pB,cAAeiC,QARhD,CAC5C,IAAI7xoB,EAAO0yC,EAAIz5B,OAAO04nB,GAAG39pB,MACL,iBAATgsB,IACPA,EAAOlxB,EAASkxB,EAAMlyB,SAE1BkyB,GAAO8uC,OAAQ4D,EAAKt5D,OAAQA,EAAQ7G,OAAQN,KAAKM,OAAQq9pB,cAAeiC,MAMhFnB,EAAmBpjqB,UAAU8jqB,eAAiB,SAAU1+lB,GACpD,IACIo/lB,EACAC,EAAO9/pB,KAAKu8pB,OAAOv7pB,QAAQ2B,cAAc,4BAC7Ck9pB,EAAc7/pB,KAAK++pB,SAAS3B,gBAC5B,IAAIqC,EAAqB,IAAIz/pB,KAAK4+pB,SAASn+lB,EAAI/5D,MAAM1G,KAAKM,OAAQN,KAAKshE,eAAgBthE,KAAKM,OAAO2tnB,gBACnG,GAAKxwnB,EAAkBgjE,EAAIz5B,SACtBvpC,EAAkBgjE,EAAIz5B,OAAO04nB,KAAQjiqB,EAAkBgjE,EAAIz5B,OAAO04nB,GAAGhhb,MAQtE+gb,EAAmB/gb,KAAKohb,EAAMr/lB,EAAKo/lB,EAAa7/pB,KAAK69pB,eARwB,CAC7E,IAAI9voB,EAAO0yC,EAAIz5B,OAAO04nB,GAAGhhb,KACL,iBAAT3wN,IACPA,EAAOlxB,EAASkxB,EAAMlyB,SAEhBkyB,GAAO/sB,QAAS8+pB,EAAMjjmB,OAAQ4D,EAAKsD,SAAU87lB,EAAanB,QAAS1+pB,KAAK69pB,YAKtF,IAAI/miB,EAAY92H,KAAKM,OAAO0mnB,eAAiB,gBAAkB,iBAE3D+4C,EADS//pB,KAAKM,OAAOU,QAAQ2B,cAAc,kBAAoB89D,EAAI/gE,IAAM,MAAM2U,cAC/D1R,cAAcm0H,GAC9BipiB,GACAA,EAAOj8pB,UAAUM,IAAI,cAEzBpE,KAAK+vmB,eAET0uD,EAAmBpjqB,UAAU+jqB,cAAgB,SAAUvimB,GACnD78D,KAAK69pB,UAAUxN,0BAA0BxzlB,EAAO9wC,OAChD/rB,KAAK+vmB,cACL,IAAIj5e,EAAY92H,KAAKM,OAAO0mnB,eAAiB,gBAAkB,iBAE3D+4C,EADM//pB,KAAKM,OAAOU,QAAQ2B,cAAc,kBAAoBk6D,EAAOn9D,IAAM,MAAM2U,cAClE1R,cAAcm0H,GAC3BipiB,GACAA,EAAOj8pB,UAAUS,OAAO,eAGhCk6pB,EAAmBpjqB,UAAUiX,QAAU,WACnCtS,KAAK+vmB,eAEF0uD,KC1LPn0kB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GA4BxCq1kB,GAA6B,SAAU70kB,GAMvC,SAAS60kB,EAAY1/pB,EAAQ2tnB,EAAgB3sjB,EAAgB66lB,GACzD,IAAIp8pB,EAAQorF,EAAO7pF,KAAKtB,KAAMM,EAAQ2tnB,EAAgB3sjB,IAAmBthE,KAGzE,OAFAD,EAAMq8pB,sBAAwBD,EAC9Bp8pB,EAAM8vnB,SAAU,EACT9vnB,EAulBX,OAhmBAuqF,GAAU01kB,EAAa70kB,GAWvB60kB,EAAY3kqB,UAAU4kqB,WAAa,SAAUv5pB,EAAMq9D,GAC/C,IAAI/wD,GACA47H,QAAS,QAAS,WAAY,GAAI,WAAY,kBAAmB,cAC7D,qBAAsB,UAAW,GAAI,gBACzCxkG,QAAS,QAAS,WAAY,GAAI,aAAc,WAAY,GAAI,WAAY,GAAI,iBAEpFp3B,EAAQ2jE,KAAO3jE,EAAQ47H,OACvB57H,EAAQ8rpB,SAAW9rpB,EAAQ47H,OAE3B,IAAK,IADDhsH,KACKzmB,EAAI,EAAGA,EAAI6W,EAAQtM,GAAMjK,OAAQN,IAClC6W,EAAQtM,GAAMvK,GAAGM,OACbsnE,EACAnhD,EAAMpe,MACFioB,KAAMzsB,KAAK+7U,kBAAkB/oU,EAAQtM,GAAMvK,IAAM,MACjDu3E,QAAS,yBAA2B3P,IAAa/wD,EAAQtM,GAAMvK,GAAK,GAAK,iBAI7EymB,EAAMpe,MACFioB,KAAMzsB,KAAK+7U,kBAAkB/oU,EAAQtM,GAAMvK,IAAM,QAKzDymB,EAAMpe,MAAOysH,WAAW,IAGhC,OAAOruG,GAOXo9oB,EAAY3kqB,UAAUiX,QAAU,WACxBtS,KAAKghE,MACLhhE,KAAKkgqB,iBACL/0kB,EAAO9vF,UAAUiX,QAAQhR,KAAKtB,OAE9BA,KAAKmgqB,MAAM9rpB,eACX9P,EAAOvE,KAAKmgqB,QAGpBH,EAAY3kqB,UAAU+kqB,WAAa,SAAU15pB,EAAM42d,EAAY+iM,GAE3DrgqB,KAAKsgqB,KAAOn/pB,EAAc,OAASkC,UAAW,0BAC1CrD,KAAKM,OAAO4S,UACZlT,KAAKsgqB,KAAKx8pB,UAAUM,IAAI,SAGxBpE,KAAKsgqB,KAAKx8pB,UAAUS,OAAO,SAE/B,IAAIwsH,EAAK5vH,EAAc,MACnBu0C,EAAO4nb,EAAa,gCAAkC,qBAC1DvsW,EAAGpvH,YAAY3B,KAAKugqB,eAAevgqB,KAAK+7U,kBAAkB,eAAgBuhJ,EAAa,GAAK,aAAc5nb,IAC7F,YAAThvC,GACAqqH,EAAGpvH,YAAY3B,KAAKugqB,eAAevgqB,KAAK+7U,mBAZ5B3xS,OAAQ,aAAcusC,KAAM,aAAcmolB,SAAU,aAAclwhB,OAAQ,gBAYpBloI,IAAQ,YAAa25pB,GAAergqB,KAAKwgqB,mBAAqB,eAAiB9qnB,EAAO,gBAAgB,IAE5K11C,KAAKsgqB,KAAK3+pB,YAAYovH,IAE1BiviB,EAAY3kqB,UAAUklqB,eAAiB,SAAUt4oB,EAAK5kB,EAAWo9pB,EAAUC,GACvE,IAAI9viB,EAAKzvH,EAAc,MAAQkC,UAAWA,EAAY,iBAMtD,OALAutH,EAAG5uH,UAAYimB,EACf2oG,EAAG1rH,aAAa/D,EAAc,QAAUkC,UAAW,uBAAyBo9pB,IAAa7viB,EAAGh0G,YACxF8jpB,GACA9viB,EAAGjvH,YAAYR,EAAc,QAAUkC,UAAW,qBAE/CutH,GAEXoviB,EAAY3kqB,UAAUslqB,aAAe,WACjCp7pB,GAAanB,IAAIpE,KAAKghE,IAAK,YAAahhE,KAAKggM,aAAchgM,MAC3DuF,GAAanB,IAAIpE,KAAKghE,IAAK,QAAShhE,KAAK4gqB,eAAgB5gqB,OAE7DggqB,EAAY3kqB,UAAU6kqB,eAAiB,WACnC36pB,GAAahB,OAAOvE,KAAKghE,IAAK,YAAahhE,KAAKggM,cAChDz6L,GAAahB,OAAOvE,KAAKghE,IAAK,QAAShhE,KAAK4gqB,iBAEhDZ,EAAY3kqB,UAAUulqB,eAAiB,SAAU//pB,GAC7C,IAAIozb,EAAWpgZ,GAAahzC,EAAEsG,OAAQ,eAClC8sb,GAAYj0b,KAAK+7U,kBAAkB,iBAAmBk4G,EAASh5X,UAAU/qD,SACzElQ,KAAKkwnB,cACLlwnB,KAAK+vmB,gBAGbiwD,EAAY3kqB,UAAUwlqB,aAAe,WAC7B7gqB,KAAK8gqB,UAAY9gqB,KAAK8gqB,QAAQ95kB,cAC9BhnF,KAAK8gqB,QAAQxupB,UACb/N,EAAOvE,KAAKmgqB,SAGpBH,EAAY3kqB,UAAU2kM,aAAe,SAAUn/L,GAC3C,IAGI6/pB,EAHAv5pB,EAAStG,EAAEsG,OAAOxE,cAAc,kBAChCiuH,EAAK/8E,GAAahzC,EAAEsG,OAAQ,eAC5B8zL,EAAUj7L,KAAKsgqB,KAAK39pB,cAAc,cAStC,GAPIs4L,GACAA,EAAQn3L,UAAUS,OAAO,aAEzBqsH,IACAA,EAAG9sH,UAAUM,IAAI,aACjBs8pB,EAAY9viB,EAAG9sH,UAAUK,SAAS,eAElCgD,EAAJ,CAGA,IAAKu5pB,EAAW,CACZ,IAAIK,EAAU/gqB,KAAKsgqB,KAAK39pB,cAAc,cACjClF,EAAkBsjqB,IACnBA,EAAQj9pB,UAAUS,OAAO,cAE7BvE,KAAKghqB,aAAc,EACnBhhqB,KAAK6gqB,eAET,IAAII,EAAejhqB,KAAKwgqB,mBACxB,IAAKxgqB,KAAKghqB,aAAeN,EAAW,CAChC9viB,EAAG9sH,UAAUM,IAAI,cACjBpE,KAAKghqB,aAAc,EACnB,IAAIv+J,GACAhoc,MAAOz6D,KAAKigqB,WAAWjgqB,KAAKgT,QAAQtM,KAAMu6pB,EAAeA,EAAa1xpB,QAAQ,MAAO,SAAMpU,GAC3FsK,OAAQzF,KAAKqtlB,cAAc/xlB,KAAK0E,MAChC6yb,QAAS7yb,KAAK6gqB,aAAavlqB,KAAK0E,MAChCkT,UAAWlT,KAAKM,OAAO4S,UACvBqgH,YAAavzH,KAAKkhqB,cAEtBlhqB,KAAKM,OAAOU,QAAQW,YAAY3B,KAAKmgqB,OACrCngqB,KAAK8gqB,QAAU,IAAIhmX,GAAY2nN,EAAazigB,KAAKmgqB,OACjD,IAAIgB,EAASnhqB,KAAKsgqB,KAAK39pB,cAAc,cAAciJ,wBAC/CqJ,GAAQvI,IAAK,EAAGF,KAAM,GAC1B,GAAIhB,GAAQkb,SAAU,CAClB,IAAI06oB,EAAcphqB,KAAKqhqB,iBAAiBrhqB,KAAK8gqB,SAC7C7rpB,EAAIvI,KAAO7Q,OAAOyd,YAAc8npB,EAAYrrpB,QAAU,EACtDd,EAAIzI,MAAQ3Q,OAAO0d,WAAa6npB,EAAYprpB,OAAS,EACrDhW,KAAK+vmB,mBAGL96lB,EAAIvI,IAAMy0pB,EAAOz0pB,IACjBuI,EAAIzI,KAAOxM,KAAKshqB,kBAAkBthqB,KAAKghE,IAAKhhE,KAAK8gqB,SAErD9gqB,KAAK8gqB,QAAQp/pB,KAAKuT,EAAIvI,IAAKuI,EAAIzI,SAGvCwzpB,EAAY3kqB,UAAUmlqB,iBAAmB,WACrC,IAAIS,EACA/vgB,EAAalxJ,KAAKkunB,kBAAkBlunB,KAAKgT,QAAQ+Y,OAerD,OAdImlI,GAAoC,IAAtBA,EAAWz0J,OAErBwkqB,EAD2B,uBAA3B/vgB,EAAW,GAAGntF,UAAgE,oBAA3BmtF,EAAW,GAAGntF,SAClD,UAGA,eAIfmtF,GAAoC,IAAtBA,EAAWz0J,SACzBuD,KAAKw8pB,SAAWx8pB,KAAKo8pB,sBAAsBp8pB,KAAKgT,QAAQtM,KAAO,YAC/Du6pB,EAAejhqB,KAAKuhqB,gBAAgBrwgB,EAAW,GAAGntF,WAGnDk9lB,GAEXjB,EAAY3kqB,UAAU6lqB,aAAe,SAAUjhqB,GACvCA,EAAK3D,iBAAiByjN,YAAc9/M,EAAK3D,MAAM6K,OAAOrD,UAAUK,SAAS,eACzElE,EAAK44B,QAAS,IAGtBmnoB,EAAY3kqB,UAAUgmqB,iBAAmB,SAAU17pB,GAC1B3F,KAAK8gqB,QAAQ9/pB,QAAQ0D,MAAM4xC,QAEhD,OADAt2C,KAAK8gqB,QAAQ9/pB,QAAQ0D,MAAM4xC,QAAU,QAC9Bt2C,KAAK8gqB,QAAQ9/pB,QAAQ4K,yBAEhCo0pB,EAAY3kqB,UAAUimqB,kBAAoB,SAAUn6pB,EAAQxB,GACxD,IAAI67pB,EAAexhqB,KAAKqhqB,iBAAiB17pB,GAASqQ,MAC9C0oD,EAAiBv3D,EAAOyE,wBAE5B,OADc8yD,EAAejyD,MAAQ+0pB,EAAexhqB,KAAKM,OAAOU,QAAQqsB,YACtD,EAAMqxC,EAAejyD,MAAQ,EAAMiyD,EAAelyD,KAAOg1pB,EAAe,GAE9FxB,EAAY3kqB,UAAUgjmB,WAAa,SAAUrrlB,GACzC,IAAIjT,EAAQC,KACZA,KAAK6unB,YAAY77mB,GACjBhT,KAAKkvnB,iBAAiBl8mB,GACtBhT,KAAKgkf,WAAWhxe,GAChBhT,KAAKkiE,UAAUtW,WACf,IAAI61mB,EAAgBzhqB,KAAKkunB,kBAAkBl7mB,EAAQ+Y,QAAU/rB,KAAKkunB,kBAAkBl7mB,EAAQ+Y,OAAOtvB,QAC/FuD,KAAKgT,QAAQ+7mB,gBAAgB/nlB,OAAO,SAAUy5B,GAC1C,OAAO1gE,EAAMiT,QAAQ+Y,QAAU00C,EAAI10C,QACpCtvB,OACPuD,KAAKogqB,WAAWptpB,EAAQtM,KAAM+6pB,EAAe,EAAqB,IAAjBA,GAAuC,IAAjBA,GACvEzhqB,KAAKghE,IAAI97D,aAAalF,KAAKsgqB,KAAMtgqB,KAAKghE,IAAIpkD,YAC1C5c,KAAKghE,IAAIl9D,UAAUM,IAAI,iBACvBpE,KAAKghE,IAAIl9D,UAAUS,OAAO,oBAC1BvE,KAAKmgqB,MAAQh/pB,EAAc,MAAQkC,UAAW,iBAC9CrD,KAAK2gqB,gBAETX,EAAY3kqB,UAAU00mB,YAAc,WAChC5khB,EAAO9vF,UAAU00mB,YAAYzumB,KAAKtB,OAEtCggqB,EAAY3kqB,UAAUgylB,cAAgB,SAAUxslB,GACxCA,EAAEgd,OACF7d,KAAKi0b,SAAWpzb,EAAEgd,KAClB7d,KAAK0hqB,eAAe7gqB,KAG5Bm/pB,EAAY3kqB,UAAUqmqB,eAAiB,SAAU7gqB,GAC7C,IAAId,EAAQC,KACRmH,EAAStG,EAAEG,QACX67D,EAAS78D,KAAKgT,QAAQ+Y,MACtBkzoB,EAAU99pB,EAAc,OAASkC,UAAW,iBAAkBC,GAAIu5D,EAAS,cAC/E78D,KAAKk/pB,OAAS/9pB,EAAc,OAASkC,UAAW,aAAcC,GAAIu5D,EAAS,aAC3E78D,KAAKM,OAAOU,QAAQW,YAAY3B,KAAKk/pB,QACrCl/pB,KAAKu8pB,OAAS,IAAIz3iB,IACdlgC,OAAQ5kF,KAAK+7U,kBAAkB,gBAC/Bv2N,SAAS,EACTm8iB,aAAc3hqB,KAAK4hqB,aAAatmqB,KAAK0E,MACrC2mH,eAAe,EACfX,eAAe,EACf7+G,OAAQ3G,SAASuL,KAEjByrB,SAAS,EACTtkB,UAAWlT,KAAKM,OAAO4S,UACvBxR,KAAM,WACQ3B,EAAMw8pB,OAAOv7pB,QAAQ2B,cAAc,yBACzCm/D,MAAM,GAAGn/D,cAAc,4BAA4BT,SAE3DD,MAAOjC,KAAK4hqB,aAAatmqB,KAAK0E,MAC9B88P,QAAS98P,KAAK6hqB,cAAcvmqB,KAAK0E,KAAMmH,EAAQ01D,GAC/CspD,UACQE,MAAOrmH,KAAKm/pB,eAAe7jqB,KAAK0E,KAAM68D,GACtCupD,aACIhsF,QAASp6B,KAAK+7U,kBAAkB,YAAa/9N,WAAW,EAAM/qG,SAAU,kBAI5EozG,MAAOrmH,KAAK4hqB,aAAatmqB,KAAK0E,MAC9BomH,aAAehsF,QAASp6B,KAAK+7U,kBAAkB,gBAAiB9oU,SAAU,sBAElFmnB,QAAS6koB,EACTjppB,MAAO,IACP4zG,mBAAqB5xF,OAAQ,UAEjCh4B,KAAKu8pB,OAAOlmnB,SAASr2C,KAAKk/pB,SAE9Bc,EAAY3kqB,UAAUumqB,aAAe,WACjC5hqB,KAAKoulB,eAAepulB,KAAKg9pB,SAAUh9pB,KAAK+xX,WAAY/xX,KAAKu9pB,OAAQv9pB,KAAKg+pB,cAAeh+pB,KAAKu8pB,SAC1Fh4pB,EAAOvE,KAAKk/pB,SAEhBc,EAAY3kqB,UAAU+jqB,cAAgB,SAAUrzoB,GAC5C/rB,KAAKkwnB,cACLlwnB,KAAK4hqB,gBAET5B,EAAY3kqB,UAAUwmqB,cAAgB,SAAU16pB,EAAQ01D,GACpD78D,KAAK8hqB,mBAAmB36pB,EAAQ01D,GAChC78D,KAAKu8pB,OAAOv7pB,QAAQ0D,MAAM8H,KAAO,MACjCxM,KAAKu8pB,OAAOv7pB,QAAQ0D,MAAMgI,IAAM,MAC5BlB,GAAQkb,UAAY7qB,OAAO0d,WAAa,MACxCvZ,KAAKu8pB,OAAOv7pB,QAAQ0D,MAAMsR,MAAQ,OAEtChW,KAAKu8pB,OAAOt4iB,QAEhB+7iB,EAAY3kqB,UAAUymqB,mBAAqB,SAAU36pB,EAAQ01D,GACzD,IAAIy/lB,EAAgBt8pB,KAAKu8pB,OAAOv7pB,QAAQ2B,cAAc,mBAElD6qlB,EAAYrslB,EAAc,OAASa,UAAWhC,KAAK+7U,kBAAkB,iBAAkB14U,UAAW,qBACtGi5pB,EAAc36pB,YAAY6rlB,GAE1B,IAAIu0E,EAAW5gqB,EAAc,OAASa,UAAWhC,KAAKgT,QAAQuvF,YAAal/F,UAAW,oBACtFi5pB,EAAc36pB,YAAYogqB,GAC1B/hqB,KAAKq/pB,eAAeximB,EAAQy/lB,IAEhC0D,EAAY3kqB,UAAU8jqB,eAAiB,SAAU1+lB,GAC7C,IAIIuhmB,EAJArokB,EAAS35F,KAAKk/pB,OAAOv8pB,cAAc,IAAM89D,EAAM,mBAAmBinB,cAAc,GAChFu6kB,EAAYjiqB,KAAKk/pB,OAAOv8pB,cAAc,IAAM89D,EAAM,kBAAkBinB,cAAc,GAClFw6kB,EAASliqB,KAAKk/pB,OAAOv8pB,cAAc,IAAM89D,EAAM,oBAAoBinB,cAAc,GACjFy6kB,EAAYniqB,KAAKk/pB,OAAOv8pB,cAAc,IAAM89D,EAAM,mBAAmBinB,cAAc,GAEvF,GAA0B,WAAtB1nF,KAAKgT,QAAQtM,KAAmB,CAEhCs7pB,EADehiqB,KAAKk/pB,OAAOv8pB,cAAc,IAAM89D,EAAM,eAAeinB,cAAc,GACzDl1E,QAE7B,IAAI4vpB,EAAWpiqB,KAAKk/pB,OAAOv8pB,cAAc,IAAM89D,EAAM,wBAAwBinB,cAAc,GAEvFvqB,GADUn9D,KAAKk/pB,OAAOv8pB,cAAc,IAAM89D,EAAM,yBAAyBinB,cAAc,GAC1E06kB,EAAS5vpB,QAAU,MAAQ,MACvB,OAAjB0vpB,EAAOllqB,QACPmgE,EAAY,MAEhBn9D,KAAK+vpB,eAAe/vpB,KAAKgT,QAAQ+Y,MAAOk2oB,EAAUjlqB,MAAO28F,EAAO38F,MAAOmgE,EAAW6kmB,EAAehiqB,KAAKM,OAAO2tnB,eAAe9+d,aAAcgzgB,EAAUnlqB,MAAOklqB,EAAOllqB,OAClKgD,KAAK4hqB,gBAcT5B,EAAY3kqB,UAAU00pB,eAAiB,SAAU3vlB,EAAWiimB,EAAeC,EAAYnlmB,EAAW6G,EAAWmrF,EAAcozgB,EAAgBC,GACvI,IAIIC,EAJA1iqB,EAAQC,KACRygE,EAAMzgE,KAAKM,OAAOo0nB,iBAAiBt0jB,GACnCr0C,EAAQ00C,EAAIgnjB,kBAAoBhnjB,EAAIrC,gBAAkBgC,EACtDswjB,KAEJA,EAAMlsnB,MACFunB,MAAOA,EACPoxC,UAAWA,EACX6G,UAAWA,EACXmrF,aAAcA,EACdprF,SAAUs+lB,EACVrlqB,MAAOslqB,EACP57pB,KAAM1G,KAAKgT,QAAQtM,OAEvB+7pB,EAAa,IAAI99lB,GAAU54C,EAAOs2oB,EAAczspB,cAAe0spB,GAAat+lB,EAAWmrF,GACnFqzgB,IACAD,EAAkB9kqB,EAAkB8kqB,GAAmC,QAAjBA,EACtD7xC,EAAMlsnB,MACFunB,MAAOA,EACPoxC,UAAWA,EACX6G,UAAWA,EACXmrF,aAAcA,EACdprF,SAAUw+lB,EACVvlqB,MAAOwlqB,EACP97pB,KAAM1G,KAAKgT,QAAQtM,OAGvB+7pB,EAAaA,EAAWtlmB,GAAWpxC,EAAOw2oB,EAAe3spB,cAAe4spB,GAAcx+lB,EAAWmrF,IAErG,IAAIlvJ,GACAk2D,OAAQ,YAAag6jB,iBAAkBO,EAAO3kmB,MAAO/rB,KAAKgT,QAAQ+Y,MAClEg5C,YAAa09lB,EAAY3zC,gBAAiB4B,GAE1CU,KACAjB,KACA1vjB,EAAIgnjB,kBACJznnB,KAAKgT,QAAQ6pD,OAAO0G,WAChBmrF,cAAa,IAAIrrF,IAAQQ,MAAM4+lB,IAAanve,KAAK,SAAUzyL,GAC3Dd,EAAMiT,QAAQ6pD,OAAO8G,WAAa9iE,EAAE9B,OACpCgB,EAAMO,OAAOyN,OAAO2iU,IAAiBvzQ,UAAWi0jB,EAAYv0jB,OAAQ4D,IACpExgE,EAAK8kE,YAAcqsjB,EAAWj0jB,UAAU+zF,WACxCkge,EAAWj0jB,UAAU+zF,WAAW9xJ,QAAQ,SAAUsjqB,GAC9CvyC,EAAiB3rnB,MACbunB,MAAO22oB,EAAM32oB,MACboxC,UAAW,KACX6G,UAAW0+lB,EAAM/nmB,WACjBw0F,aAAcuzgB,EAAMvzgB,aACpBprF,SAAU2+lB,EAAM3+lB,SAChB/mE,MAAO0lqB,EAAM1lqB,MACb0J,KAAM3G,EAAMiT,QAAQtM,SAG5BzG,EAAKkwnB,iBAAmBA,EAAiB1znB,OAAS0znB,EAC9CO,EAAM1plB,OAAO,SAAUy5B,GAAO,OAAOA,EAAI10C,MAAQhsB,EAAMiT,QAAQ+Y,QACnEhsB,EAAMiT,QAAQvX,QAAQwE,KAI1BD,KAAKgT,QAAQvX,QAAQwE,IAI7B+/pB,EAAY3kqB,UAAUghqB,iBAAmB,SAAUx/lB,EAAQoD,EAAOu4H,EAAWtnC,EAAYqxI,GACrF,IAAIogY,EAAexhqB,EAAc,MAAQkC,UAAW,kBACpD48D,EAAMt+D,YAAYghqB,GAClB,IAAIC,EAAWzhqB,EAAc,MAAQkC,UAAW,gBAChDs/pB,EAAahhqB,YAAYihqB,GACzB,IAAI9F,EAAU37pB,EAAc,OAASkC,UAAW,mBAC5C05pB,EAAY57pB,EAAc,SAAWmC,GAAIu5D,EAAS27H,IACtDske,EAAQn7pB,YAAYo7pB,GACpB6F,EAASjhqB,YAAYm7pB,GACrB,IAAIzsC,EAAOrwnB,KAAKgT,QAAQtM,KAAO,WAC3Bi2pB,EAAiB38pB,KAAKo8pB,sBAAsB/rC,GAChDrwnB,KAAKw8pB,SAAWG,EAChB,IAAIC,EAAgB58pB,KAAK68pB,gBAAgBhgmB,EAAQq0F,EAAYqxI,GAEzDsgY,EAAW,GACX7iqB,KAAKi0b,YACL4uO,EAAW7iqB,KAAKi0b,SAASxna,KAAKprB,MAAM,GAAI,MACvBrB,KAAK+7U,kBAAkB,kBACpC6gV,EAAgBr6X,EAAUsgY,OAAW1nqB,GAErC0nqB,IAAa7iqB,KAAK+7U,kBAAkB,aACpC6gV,EAAgB58pB,KAAK+7U,kBAAkBx5C,EAAU,qBAAuB,qBAGhFviS,KAAKg9pB,SAAW,IAAIvpM,IAChBlwZ,WAAYo5lB,EACZ/woB,QAAUa,KAAM,OAAQzvB,MAAO,SAC/ByvB,KAAMmwoB,EACNl7pB,KAAM1B,KAAKi9pB,aAAa3hqB,KAAK0E,MAC7BkT,UAAWlT,KAAKM,OAAO4S,YAE3BlT,KAAKg9pB,SAAS3mnB,SAAS0mnB,GAEvB,OAAS4F,aAAcA,EAAc5+lB,SADtB/jE,KAAK8iqB,iBAAiBlG,KAGzCoD,EAAY3kqB,UAAU4hqB,aAAe,SAAUh9pB,GAC3CA,EAAK2+D,MAAM59D,QAAQ0D,MAAM+9D,QAAUziE,KAAKkiE,UAAUO,OAAS,GAAGv1D,YAElE8ypB,EAAY3kqB,UAAUynqB,iBAAmB,SAAUr2oB,GAC/C,IAAI0woB,EAAgB,IAAI35lB,GAAYxjE,KAAKw8pB,UAAUv4lB,cAAa,IAAIZ,IAAQQ,MAAM,OAAQ,QAASp3C,IACnG,OAAQhvB,EAAkB0/pB,EAAc,IAA+B,GAAzBA,EAAc,GAAGngqB,OAEnEgjqB,EAAY3kqB,UAAUwhqB,gBAAkB,SAAUp8lB,EAAKywF,EAAYqxI,GAC/D,IAAIx+N,EASJ,OAPIA,EADAmtF,GAAcA,EAAWz0J,OAAS,EACD,IAAtBy0J,EAAWz0J,OACjB8lS,EAAUrxI,EAAW,GAAGntF,SAAWmtF,EAAW,GAAGntF,SACjDw+N,EAAUrxI,EAAW,GAAGntF,cAAW5oE,EAG7BonS,EAAU,aAAUpnS,EAE5B6E,KAAKuhqB,gBAAgBx9lB,IAEhCi8lB,EAAY3kqB,UAAUkmqB,gBAAkB,SAAUx9lB,GAC9C,IAAIo5lB,EAAgB,IAAI35lB,GAAYxjE,KAAKw8pB,UAAUv4lB,cAAa,IAAIZ,IAAQQ,MAAM,QAAS,QAASE,IACpG,OAAQtmE,EAAkB0/pB,EAAc,IAA8B,GAAxBA,EAAc,GAAG1woB,MAEnEuzoB,EAAY3kqB,UAAUgkqB,eAAiB,SAAUximB,EAAQy/lB,GACrD,IAAIprgB,EAAalxJ,KAAKkunB,kBAAkBrxjB,GACpCoD,EAAQ9+D,EAAc,SAAWkC,UAAW,iBAChDi5pB,EAAc36pB,YAAYs+D,GAC1B,IAAIwgkB,EAAWt/nB,EAAc,YAC7Bs/nB,EAASz+nB,UAAY,+DACrBi+D,EAAMt+D,YAAY8+nB,GAGlB,IAAIpQ,EAAOrwnB,KAAKq8pB,iBAAiBx/lB,EAAQoD,EAAO,iBAAkBixF,GAAY,GAE9ElxJ,KAAKu/pB,gBAAgB1imB,EAAQwzjB,EAAM,kBAAmBn/d,GAAY,GAClE,IAAI/zF,EAAYh8D,EAAc,MAAQkC,UAAW,qBACjD48D,EAAMt+D,YAAYw7D,GAElBn9D,KAAK+iqB,kBAAkBlmmB,EAAQM,EAAW+zF,GAE1Cm/d,EAAOrwnB,KAAKq8pB,iBAAiBx/lB,EAAQoD,EAAO,kBAAmBixF,GAAY,GAE3ElxJ,KAAKu/pB,gBAAgB1imB,EAAQwzjB,EAAM,mBAAoBn/d,GAAY,IAEvE8ugB,EAAY3kqB,UAAU0nqB,kBAAoB,SAAUlmmB,EAAQmsU,EAAI93O,GAC5D,IAAIylH,EAAKx1Q,EAAc,MAAQkC,UAAW,eAAgBI,OAASiyR,QAAW,OAC9EszG,EAAGrnY,YAAYg1Q,GACf,IAAIqsZ,EAAW7hqB,EAAc,OAASkC,UAAW,kBAAmBI,OAASiB,MAAS,2BAElFu+pB,EAAgB9hqB,EAAc,SAAWmC,GAAIu5D,EAAS,uBAAwBp5D,OAASiD,KAAQ,WAE/Fw8pB,EAAiB/hqB,EAAc,SAAWmC,GAAIu5D,EAAS,wBAAyBp5D,OAASiD,KAAQ,WAErGs8pB,EAASrhqB,YAAYshqB,GACrBD,EAASrhqB,YAAYuhqB,GACrBvsZ,EAAGh1Q,YAAYqhqB,GACW,WAAtBhjqB,KAAKgT,QAAQtM,MACb1G,KAAKmjqB,gBAAgBtmmB,EAAQmsU,EAAIryH,EAAI,cAAezlH,GAIxD,IAAIkxgB,EAAW,IAAIrijB,IAAc1sG,MAAOrT,KAAK+7U,kBAAkB,OAAQtkT,KAAM,UAAWxkB,SAAU,mBAAoBT,SAAS,EAAMU,UAAWlT,KAAKM,OAAO4S,YAGxJkwpB,EAAU,IAAIrjjB,IAAc1sG,MAAOrT,KAAK+7U,kBAAkB,MAAOtkT,KAAM,UAAWxkB,SAAU,kBAAmBC,UAAWlT,KAAKM,OAAO4S,YAE1H,SADFg+I,GAAoC,IAAtBA,EAAWz0J,OAAey0J,EAAW,GAAG/zF,UAAY,QAE5EilmB,EAAS5vpB,SAAU,EACnB4wpB,EAAQ5wpB,SAAU,IAGlB4wpB,EAAQ5wpB,SAAU,EAClB4vpB,EAAS5vpB,SAAU,GAGvB4vpB,EAAS/rnB,SAAS4snB,GAClBG,EAAQ/snB,SAAS6snB,IAGrBlD,EAAY3kqB,UAAU+ylB,cAAgB,SAAUxqlB,GAC5C,IAAK,IAAIxF,EAAK,EAAGgjE,EAAax9D,EAAUxF,EAAKgjE,EAAW3kE,OAAQ2B,IAAM,CAClE,IAAIrB,EAAMqkE,EAAWhjE,GACjBrB,IAAQA,EAAIiqF,aACZjqF,EAAIuV,YAKhB0tpB,EAAY3kqB,UAAUkkqB,gBAAkB,SAAU1imB,EAAQwzjB,EAAM97kB,EAAW28G,EAAYqxI,GACnF,IAAIvlS,EAAQmE,EAAc,MAAQkC,UAAW,iBAC7CgtnB,EAAKsyC,aAAahhqB,YAAY3E,GAC9B,IAAIwiqB,EAAWr+pB,EAAc,OAASkC,UAAW,oBAC7CggqB,EAAaliqB,EAAc,SAAWmC,GAAIu5D,EAAStoB,IACvDirnB,EAAS79pB,YAAY0hqB,GACrBrmqB,EAAM2E,YAAY69pB,GAClB,IAAII,EACAzimB,EACA+zF,GAAcA,EAAWz0J,OAAS,IAIlCmjqB,GAHAzimB,EAAkC,IAAtB+zF,EAAWz0J,OAClB8lS,EAAUrxI,EAAW,GAAKA,EAAW,GACrCqxI,EAAUrxI,EAAW,QAAK/1J,IACPgiE,EAAU4G,WAAassjB,EAAKtsjB,SAAY5G,EAAUngE,WAAQ7B,KAGlFivC,OAAUpqC,KAAKsjqB,mBAAmBhoqB,KAAK0E,MACvC4uI,OAAU5uI,KAAKujqB,qBAAqBjoqB,KAAK0E,MACzC22E,KAAQ32E,KAAKwjqB,WAAWloqB,KAAK0E,MAC7B8+pB,SAAY9+pB,KAAKwjqB,WAAWloqB,KAAK0E,QAE/BA,KAAKgT,QAAQtM,MAAM1G,KAAKgT,QAAS6pD,EAAQwmmB,EAAYzD,EAAS5/pB,KAAKM,OAAO4S,YAGpF8spB,EAAY3kqB,UAAU8nqB,gBAAkB,SAAUtmmB,EAAQmsU,EAAIhlU,EAAWzvB,EAAW28G,GAEhF,IAAIuygB,EAAetiqB,EAAc,OAASkC,UAAW,sBAAuBI,OAASiB,MAAS,2BAC1Fg/pB,EAAiBviqB,EAAc,SAAWmC,GAAIu5D,EAAStoB,EAAW9wC,OAASiD,KAAQ,cACvF+8pB,EAAa9hqB,YAAY+hqB,GACzB1/lB,EAAUriE,YAAY8hqB,GACtB,IAAI7D,KAAU1ugB,GAAcA,EAAWz0J,OAAS,KAC3Cy0J,GAAoC,IAAtBA,EAAWz0J,OAAey0J,EAAW,GAAGltF,UAAYktF,EAAW,GAAGltF,WAGtE,IAAI66C,IAAWxrG,MAAOrT,KAAK+7U,kBAAkB,aACxD7oU,UAAWlT,KAAKM,OAAO4S,UAAWV,QAASotpB,IAEtCvpnB,SAASqtnB,IAGtB1D,EAAY3kqB,UAAUmoqB,WAAa,SAAUxwpB,EAAS6pD,EAAQ6iJ,EAAY/lH,EAAQm8B,GAC9E,IACI95F,GADO,IAAI0uE,IACGS,gBAAiBzkG,KAAM,OAAQg7D,SAAU1uD,EAAQgpB,SAAU,GAC7Eh8B,KAAK+xX,WAAa,IAAI/9K,IAClBh4K,OAAQA,EACR/oB,SAAU,iBACV6T,YAAa9mB,KAAK+7U,kBAAkB,+BACpC/lU,MAAO,OACP9C,UAAW4iH,EACX94H,MAAO,IAAIgjB,KAAK25E,KAEpB35F,KAAK+xX,WAAW17U,SAASqpK,IAE7Bsgd,EAAY3kqB,UAAUsoqB,eAAiB,SAAU9iqB,GAC7CA,EAAE9B,OAASgjE,GAAqBlhE,EAAE9B,SAGtCihqB,EAAY3kqB,UAAUkoqB,qBAAuB,SAAUvwpB,EAAS6pD,EAAQ6iJ,EAAY/lH,EAAQm8B,GACxF91H,KAAKg+pB,cAAgB,IAAInmiB,IACrB77F,OAAQhpB,EAAQgpB,OAChBlV,YAAa9mB,KAAK+7U,kBAAkB,2BACpC7oU,UAAW4iH,EACX94H,MAAO28F,IAEX35F,KAAKg+pB,cAAc3nnB,SAASqpK,IAGhCsgd,EAAY3kqB,UAAUioqB,mBAAqB,SAAUtwpB,EAAS6pD,EAAQ6iJ,EAAY/lH,EAAQm8B,GACtF,IAAI/1H,EAAQC,KACR61pB,EAAS71pB,KAAKM,OAAOo0nB,iBAAiB73jB,GACtC4qjB,EAAkBouC,EAAOpuC,kBACzBlkjB,EAAakkjB,EAAkBouC,EAAOtylB,WAAavwD,EAAQuwD,WAC3D33C,GAAW5uB,MAAOyqnB,EAAkBouC,EAAOz3lB,gBAAkBvB,GAC7D0gmB,EAAS,IAAIlgM,IACb95Z,WAAYA,aAAsBC,GAAcD,EAAa,IAAIC,GAAYD,GAC7E33C,OAAQA,EACR8vC,MAAO17D,KAAKM,OAAOo7D,MAAMr8D,QACzBu4L,UAAW,YACX5pL,OAAQhO,KAAKM,OAAO0N,OACpBsud,UAAU,EACVp6d,MAAO,WACHq7pB,EAAOhgM,WAAax9d,EAAMm/pB,OAAOv8pB,cAAc,IAAMk6D,GAChD6iJ,EAAWp8M,KAAQu5D,EAAS,kBACzB,iBACA,oBAAoB6qB,cAAc,GAAG1qF,MAC7CugqB,EAAO5imB,WAA8B,WAAjB3nD,EAAQtM,OACvB3G,EAAMm/pB,OAAOv8pB,cAAc,IAAMk6D,EAAS,eAAe6qB,cAAc,GAAGl1E,QAE/E+qpB,EAAOhgM,WAAc9/d,EAAkB8/pB,EAAOhgM,YAC1C,QADwDggM,EAAOhgM,YAGvEz2c,YAAa9mB,KAAK+7U,kBAAkB,2BACpC7oU,UAAW4iH,EACX6yf,eAAgB,SAAU9nnB,GACtBA,EAAE9B,OAAS8B,EAAE9B,OAAOioC,OAAO,SAAUjqC,EAAKkV,EAAOi3B,GAC7C,OAAOA,EAAItR,IAAI,SAAU2zC,GACrB,OAAOA,EAAUgylB,EAAO3xoB,OAAO5uB,SAChCuB,QAAQxB,EAAIgD,EAAMw9pB,OAAO3xoB,OAAO5uB,UAAYiV,KAGvDjV,MAAO28F,IAEX4jkB,EAAOlnnB,SAASqpK,GAChB1/M,KAAKu9pB,OAASA,GAMlByC,EAAY3kqB,UAAUkkC,cAAgB,WAClC,MAAO,eAEJygoB,GACThyC,IC5mBE4K,GAAwB,WAKxB,SAASA,EAAOt4nB,EAAQ2tnB,EAAgB3sjB,GACpCthE,KAAKm9D,UAAY,MACjBn9D,KAAK60pB,gBAAiB,EACtB70pB,KAAK+yB,UACL/yB,KAAK4jqB,eAAiB,GACtB5jqB,KAAK0G,MAAS8rb,KAAQisO,GAAoB5/iB,SAAYmvgB,GAAgB61C,MAAS7D,IAC/EhgqB,KAAK0kpB,iBACDvgpB,SAAU,WAAY0rJ,SAAU,WAAYkG,MAAO,QAAS4uf,YAAa,cAAeC,mBAAoB,qBAC5GC,SAAU,WAAYC,gBAAiB,kBAAmBC,SAAU,WAAYnzf,WAAY,cAEhG5xJ,KAAK8jqB,gBAAmB/3oB,MAAO,GAAIyuS,QAAQ,GAC3Cx6T,KAAK8unB,mBACL9unB,KAAKM,OAASA,EACdN,KAAKiunB,eAAiBA,EACtBjunB,KAAKshE,eAAiBA,EACtBthE,KAAKtD,mBA40BT,OAr0BAk8nB,EAAOv9nB,UAAU0wG,OAAS,SAAUlrG,GAChC,IAAI4+D,GAASn5D,UAAU,gBAAiBzF,GAAxC,CAGA,IAAImznB,EAAOh0nB,KAAKM,OAGhB,GAFAN,KAAKqlH,KAAOrlH,KAAKshE,eAAeE,WAAW,gBAC3CxhE,KAAK+jqB,8BACmC,cAApC/jqB,KAAKM,OAAO2tnB,eAAevnnB,MACvBstnB,EAAKj2jB,QAAQthE,OAAQ,CACrB,IAAIunqB,EAAWhkqB,KAAKM,OAAOU,QAAQ2B,cAAc,gBAC7CqhqB,GACAz/pB,EAAOy/pB,GAEX,IAAI3gC,EAAc,IAAIzL,GAAY53nB,KAAKshE,eAAgB03iB,GAAS4f,OAAQ5E,GACpEtzjB,OAAM,EACO1gE,KAAKshE,eAAeE,WAAW,uBACrCgqkB,gBAAgBxyB,GAAS4f,OAAQ,IAAImjC,GAAmB/7pB,KAAKM,OAAQN,KAAKshE,iBACrFthE,KAAKqnnB,eAAiBrnnB,KAAKshE,eAAeE,WAAW,kBACrD6hkB,EAAYrioB,QAAUG,EAAc,MAAQkC,UAAW,iBACvDq9D,EAAM1gE,KAAKk5nB,eACP18nB,KAAOwD,KAAK+yB,OAChB/yB,KAAKM,OAAOq+nB,mBAAmBh8nB,cAAc,SAAShB,YAAY0hoB,EAAYrioB,SAC9EhB,KAAKgB,QAAUqioB,EAAYt3hB,OAAOrrC,EAAKszjB,EAAKgB,aAAc,KAAM,KAAMqO,EAAYrioB,SAClF,IAAI08H,EAAS19H,KAAKgB,QAAQ2B,cAAc,uBACpC+6H,IACAA,EAAOr6H,UAAY,gCAEvB,IAAI2hoB,KAAY3joB,MAAMC,KAAKtB,KAAKgB,QAAQQ,iBAAiB,wBACrDwjoB,EAAOvooB,QACPuooB,EAAOA,EAAOvooB,OAAS,GAAGqH,UAAUM,IAAI,0BAE5CpE,KAAKukB,aACLvkB,KAAKM,OAAOyN,OAAOuvnB,IAAuBC,KAAM,cAS5D3E,EAAOv9nB,UAAUiX,QAAU,WAQvB,GAPItS,KAAKuspB,cACLvspB,KAAKuspB,aAAaj6oB,UAEtBtS,KAAKiunB,eAAelwjB,WACpB/9D,KAAKikqB,kBACLjkqB,KAAKpD,sBACLoD,KAAKw+G,eACDx+G,KAAKgB,QAAS,CACduD,EAAOvE,KAAKgB,SACZ,IAAIkjqB,EAAmBlkqB,KAAKM,OAAOq+nB,mBAAmBh8nB,cAAc,gBAChE3C,KAAKM,OAAO28nB,oBAAsBinC,GAClC3/pB,EAAO2/pB,KAInBtrC,EAAOv9nB,UAAU69nB,YAAc,SAAUjnnB,GACrC,IACIyuD,EAAM,IAAI8/P,OAEd,OADA9/P,EAAIoB,MAAQ9hE,KAAKw5nB,gBACV94jB,GAEXk4jB,EAAOv9nB,UAAUm+nB,cAAgB,WAE7B,IAAI13jB,KACJ,GAAI9hE,KAAKM,OAAOwmnB,cACZ,IAAK,IAAI7ojB,EAAI,EAAGp8D,EAAM7B,KAAKM,OAAOm0nB,cAAc12jB,QAAQthE,OAAQwhE,EAAIp8D,EAAKo8D,IACrE6D,EAAMt9D,KAAKxE,KAAKq5nB,gBAAiBrgB,GAAS0qB,gBAG9C1joB,KAAKM,OAAO84nB,gBAAkBp5nB,KAAKM,OAAOq7R,YAC1C75N,EAAMt9D,KAAKxE,KAAKq5nB,gBAAiBrgB,GAAS2qB,eAE9C,IAAK,IAAIvloB,EAAK,EAAGyE,EAAK7C,KAAKM,OAAO00nB,aAAc52nB,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAClE,IAAI2yc,EAAQluc,EAAGzE,GACf0jE,EAAMt9D,KAAKxE,KAAKq5nB,aAAatoL,IAEjC,OAAOjvY,GAEX82jB,EAAOv9nB,UAAUg+nB,aAAe,SAAUx8jB,EAAQmkjB,GAC9C,IAAI0Y,GACAlimB,QAAWqlC,EAAOrlC,QAClBmimB,YAAc,EACdha,MAAS,GACT9ijB,OAAUA,EACVmkjB,SAAYA,GAAsBhI,GAAS4f,OAC3Cl1nB,YAAgBw8B,MAAOlgC,KAAKqlH,KAAKtxC,YAAY,oBAEjD,OAAO,IAAI04Z,GAAKitJ,IAOpBd,EAAOv9nB,UAAUwznB,YAAc,WAC3B,IAAIpujB,EAAMzgE,KAAKM,OAAOo0nB,iBAAiB10nB,KAAKogE,WACxCr0C,EAAQ00C,EAAIgnjB,kBAAoBhnjB,EAAIrC,gBAAkBp+D,KAAKogE,UAC/DpgE,KAAKmkqB,qBACDp4oB,MAAOA,EAAOg4C,SAAU/jE,KAAK+jE,SAAU/mE,MAAOgD,KAAKhD,MAAOmgE,UAAWn9D,KAAKm9D,UAC1E6G,UAAWhkE,KAAKgkE,UAAWmrF,aAAcnvJ,KAAKmvJ,aAAc+ggB,qBAAuBC,mBAEvF,IAAIl+oB,EAAQjS,KAAKokqB,4BAA4B3jmB,GACzCxuD,GAAS,EACTjS,KAAKiunB,eAAelwjB,QAAQ9rD,GAASjS,KAAKmkqB,oBAG1CnkqB,KAAKiunB,eAAelwjB,QAAQv5D,KAAKxE,KAAKmkqB,qBAE1CnkqB,KAAKiunB,eAAelwjB,QAAU/9D,KAAKiunB,eAAelwjB,QAClD/9D,KAAKM,OAAOsrD,YAEhBgtkB,EAAOv9nB,UAAU+oqB,4BAA8B,SAAU3jmB,GAErD,IAAK,IADD0xjB,EAAOnynB,KAAKiunB,eAAelwjB,QACtB5hE,EAAI,EAAG0F,EAAMswnB,EAAK11nB,OAAQN,EAAI0F,EAAK1F,IACxC,GAAIg2nB,EAAKh2nB,GAAG4vB,QAAU00C,EAAI10C,OAAU00C,EAAIgnjB,mBAAqB0K,EAAKh2nB,GAAG4vB,QAAU00C,EAAIrC,gBAC/E,OAAOjiE,EAGf,OAAQ,GAOZy8nB,EAAOv9nB,UAAUw1d,iBAAmB,SAAUhwd,GAC1C,IAAIZ,EAAQD,KAAKyoB,UAIb2jK,YAAa,YAAa1lL,KAAM6rnB,KAHhC4xC,oBAAqBnkqB,KAAKmkqB,oBAAqBE,uBAAwBrkqB,KAAK68D,OAAO9wC,MACnFgyC,QAAS/9D,KAAKiunB,eAAelwjB,QAASquH,YAAa,YAAa1lL,KAAM6rnB,IAI1EvynB,KAAKM,OAAOkmB,QAAQ+rmB,GAAuB7znB,EAAOmC,EAAGZ,IACrDD,KAAKyoB,UAAW,GAEpBmwmB,EAAOv9nB,UAAUkpB,WAAa,WAC1Bhf,GAAanB,IAAIpE,KAAKM,OAAOq+nB,mBAAoB,QAAS3+nB,KAAK26H,aAAc36H,OAEjF44nB,EAAOv9nB,UAAUmjH,aAAe,WAC5Bj5G,GAAahB,OAAOvE,KAAKM,OAAOq+nB,mBAAoB,QAAS3+nB,KAAK26H,eAEtEi+f,EAAOv9nB,UAAUyioB,kBAAoB,SAAUj9nB,GACvCA,EAAEswF,SAAWnxF,KAAKu/B,iBAAmB1+B,EAAE4+B,QACvCz/B,KAAK+rG,UAGb6shB,EAAOv9nB,UAAUivnB,WAAa,WAE1B,GADAtqnB,KAAKM,OAAO0lF,IAAIm3iB,GAAqBn9nB,KAAKsqnB,YACtCtqnB,KAAKM,OAAO00nB,aAAav4nB,QAAUuD,KAAKiunB,eAAelwjB,QAAQthE,OAAQ,CACvE,IAAIu3nB,EAAOh0nB,KAAKM,OAChBN,KAAK60pB,gBAAiB,EACtB,IAAK,IAAIz2pB,EAAK,EAAGyE,EAAKmxnB,EAAK/F,eAAelwjB,QAAS3/D,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACrE,IAAIqiE,EAAM59D,EAAGzE,GACb4B,KAAK+vpB,eAAetvlB,EAAI10C,MAAO00C,EAAIsD,SAAUtD,EAAIzjE,MAAOyjE,EAAItD,UAAWsD,EAAIuD,UAAWvD,EAAI0uF,aAAc1uF,EAAIyvlB,kBAAmBzvlB,EAAI0vlB,gBAEvInwpB,KAAKikqB,kBACLjkqB,KAAK60pB,gBAAiB,IAM9Bj8B,EAAOv9nB,UAAUqB,iBAAmB,WAC5BsD,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAOslF,GAAGi4iB,GAAiB79nB,KAAK89nB,kBAAmB99nB,MACxDA,KAAKM,OAAOslF,GAAG0+kB,GAAuBtkqB,KAAK6wd,iBAAkB7wd,MAC7DA,KAAKM,OAAOslF,GAAGq1jB,GAA4Bj7oB,KAAKwnF,kBAAmBxnF,MACnEA,KAAKM,OAAOslF,GAAGo8jB,GAAmBhipB,KAAK26H,aAAc36H,MACrDA,KAAKM,OAAOslF,GAAGw8iB,GAA8BpioB,KAAK2rnB,sBAAuB3rnB,MACzEA,KAAKM,OAAOslF,GAAG88iB,GAAwB1ioB,KAAK+rG,OAAQ/rG,MACpDA,KAAKM,OAAOslF,GAAGu3iB,GAAqBn9nB,KAAKsqnB,WAAYtqnB,MACrDA,KAAKM,OAAOslF,GAAGqqiB,GAAwBjwnB,KAAKqtnB,gBAAiBrtnB,MAC7DuF,GAAanB,IAAI5D,SAAU,QAASR,KAAKm/G,aAAcn/G,MACvDA,KAAKM,OAAOslF,GAAG2+kB,GAAmBvkqB,KAAKwkqB,iBAAkBxkqB,MACzDA,KAAKM,OAAOslF,GAAG04jB,GAAct+oB,KAAKykqB,uBAAwBzkqB,QAK9D44nB,EAAOv9nB,UAAUuB,oBAAsB,WACnC2I,GAAahB,OAAO/D,SAAU,QAASR,KAAKm/G,cACxCn/G,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAO0lF,IAAI63iB,GAAiB79nB,KAAK89nB,mBACtC99nB,KAAKM,OAAO0lF,IAAIs+kB,GAAuBtkqB,KAAK6wd,kBAC5C7wd,KAAKM,OAAO0lF,IAAIi1jB,GAA4Bj7oB,KAAKwnF,mBACjDxnF,KAAKM,OAAO0lF,IAAIg8jB,GAAmBhipB,KAAK26H,cACxC36H,KAAKM,OAAO0lF,IAAIo8iB,GAA8BpioB,KAAK2rnB,uBACnD3rnB,KAAKM,OAAO0lF,IAAI08iB,GAAwB1ioB,KAAK+rG,QAC7C/rG,KAAKM,OAAO0lF,IAAIu+kB,GAAmBvkqB,KAAKwkqB,kBACxCxkqB,KAAKM,OAAO0lF,IAAIiqiB,GAAwBjwnB,KAAKqtnB,iBAC7CrtnB,KAAKM,OAAO0lF,IAAIs4jB,GAAct+oB,KAAKykqB,0BAEvC7rC,EAAOv9nB,UAAUgynB,gBAAkB,SAAUptnB,GACzCD,KAAK8jqB,eAAetpW,QAAS,GAejCo+T,EAAOv9nB,UAAU00pB,eAAiB,SAAU3vlB,EAAW4vlB,EAAgBC,EAAa9ylB,EAAW6G,EAAWmrF,EAAc+ggB,EAAmBC,GACvI,IACIuU,EADA1wC,EAAOh0nB,KAAKM,OAMhB,GAJAN,KAAK68D,OAASm3jB,EAAKU,iBAAiBt0jB,GACH,cAA7BpgE,KAAKiunB,eAAevnnB,OACpBg+pB,EAAa1wC,EAAK2K,mBAAmBh8nB,cAAc,QAAW3C,KAAK68D,OAAO9wC,MAAQ,qBAEjFtuB,EAAkBuC,KAAK68D,OAAOs4Z,iBAAoBn1d,KAAK68D,OAAOs4Z,eAGnE,GAAIp0Z,GAAgBizjB,GAChBA,EAAKjmnB,OAAOywoB,IACRj4oB,SAAUvG,KAAMvE,QAASuE,KAAK+vpB,eAAgB70a,KAAM96K,EAAW+6K,KAAM60a,EAAgB50a,KAAM60a,EAAa50a,KAAMl+K,EAC9G6hL,KAAMh7K,EAAWi7K,KAAM9vF,EAAc+vF,KAAMgxa,EAAmBngZ,KAAMogZ,QAH5E,CAkBA,GAXAnwpB,KAAKhD,MAAQizpB,EACbjwpB,KAAKgkE,UAAYA,IAAa,EAC9BhkE,KAAKmvJ,aAAenvJ,KAAKmvJ,aAAgB1xJ,EAAkB0xJ,GAA+BnvJ,KAAKM,OAAO2tnB,eAAe9+d,aAA1CA,EAC3EnvJ,KAAKogE,UAAYA,EACjBpgE,KAAKm9D,UAAYA,GAAa,MAC9Bn9D,KAAK+jE,SAAWislB,EAChBC,GAAexypB,EAAkBwypB,IAAgBA,EAAY/ipB,WACpC,WAArBlN,KAAK68D,OAAOn2D,MAA0C,SAArB1G,KAAK68D,OAAOn2D,OAC7C1G,KAAKgkE,WAAY,GAErBgwjB,EAAKy6B,uBAAuBrulB,GAAW58D,aAAa,gBAAiB,QACjEyspB,EAAYxzpB,OAAS,GAAKuD,KAAK2kqB,kBAAkB3kqB,KAAK68D,OAAQozlB,GAG9D,OAFAjwpB,KAAK4kqB,gBAAkB3U,EAAYxzpB,OAAS,EAAI,GAAKuD,KAAKqlH,KAAKtxC,YAAY,6BAC3E/zE,KAAKikqB,kBAGwB,cAA7BjkqB,KAAKiunB,eAAevnnB,MAAwBg+pB,EAAW1nqB,QAAUizpB,IACjEyU,EAAW1nqB,MAAQizpB,GAElBxypB,EAAkBuC,KAAK68D,OAAO7gC,QAI/Bh8B,KAAK+yB,OAAO/yB,KAAK68D,OAAO9wC,OAASkkoB,EAHjCjwpB,KAAK6kqB,kBAAkB5U,GAK3BjwpB,KAAK8unB,gBAAgB9unB,KAAKogE,aAClBr0C,MAAO/rB,KAAKogE,UACZjD,UAAWA,EACX6G,UAAWA,EACXmrF,aAAcA,EACdprF,SAAU/jE,KAAK+jE,SACf/mE,MAAOgD,KAAKhD,MACZ0J,KAAM1G,KAAK68D,OAAOn2D,OAE1B1G,KAAK8kqB,iBAAiB9kqB,KAAKogE,WACvBpgE,KAAK+kqB,wBAAwB/kqB,KAAK68D,OAAO9wC,QAG7C/rB,KAAK6unB,gBAET+J,EAAOv9nB,UAAUwpqB,kBAAoB,SAAU5U,GAC3C,IAAI+U,EAAmC,SAArBhlqB,KAAK68D,OAAOn2D,MAAwC,aAArB1G,KAAK68D,OAAOn2D,KACzD,IAAIsZ,KAAKiwoB,GAAez0oB,WAAWy0oB,GACvCjwpB,KAAK+yB,OAAO/yB,KAAK68D,OAAO9wC,OAAS/rB,KAAKilqB,qBAAqBD,EAAYhlqB,KAAK68D,SAEhF+7jB,EAAOv9nB,UAAUmsF,kBAAoB,SAAU3mF,GAC3C,GAAIA,EAAEswF,SAAWnxF,KAAKu/B,gBAGtB,IAAK,IAAInhC,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKuD,EAAEoC,YAAa7E,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACnE,IAAIkM,EAAOzH,EAAGzE,GACd,OAAQkM,GACJ,IAAK,UACGtK,KAAK60pB,iBACL70pB,KAAKM,OAAOyN,OAAO29nB,IACfy4B,oBAAqBnkqB,KAAKmkqB,oBAAqBE,uBAAwBrkqB,KAAK68D,OACxE78D,KAAK68D,OAAO9wC,WAAQ5wB,EACxB4iE,QAAS/9D,KAAKiunB,eAAelwjB,QAASquH,YAAa,YAAa1lL,KAAMipnB,KAE1E3vnB,KAAKklqB,wBACLllqB,KAAKikqB,kBACLjkqB,KAAKmlqB,gBAET,MACJ,IAAK,sBACGtkqB,EAAEoC,WAAWqH,GACbtK,KAAKikqB,kBAEAjkqB,KAAKM,OAAOk0nB,aACjBx0nB,KAAKM,OAAOmvpB,sBAAsB,IAEtC,MACJ,IAAK,OACDzvpB,KAAKM,OAAOg7oB,gBACZt7oB,KAAKklqB,2BAKrBtsC,EAAOv9nB,UAAU6pqB,sBAAwB,WACrC,GAAiC,cAA7BllqB,KAAKiunB,eAAevnnB,KAAsB,CAC1C,IAAK,IAAIvK,EAAI,EAAGA,EAAI6D,KAAKiunB,eAAelwjB,QAAQthE,OAAQN,IAAK,CACzD6D,KAAK68D,OAAS78D,KAAKM,OAAOo0nB,iBAAiB10nB,KAAKiunB,eAAelwjB,QAAQ5hE,GAAG4vB,QACtEm4C,GAA2BlkE,KAAKiunB,eAAelwjB,QAAQ5hE,GAAG4vB,MAAO/rB,KAAKM,OAAOgxnB,wBACjF,IAAI2+B,EAAcjwpB,KAAKiunB,eAAelwjB,QAAQ5hE,GAAGa,MAEjD,GADAizpB,GAAexypB,EAAkBwypB,IAAgBA,EAAY/ipB,WACxDzP,EAAkBuC,KAAK68D,OAAO7gC,QAG9B,CACD,IAAI3+B,EAAM2C,KAAKiunB,eAAelwjB,QAAQ5hE,GAAG4vB,MACzC/rB,KAAK+yB,OAAO11B,GAAO2C,KAAKiunB,eAAelwjB,QAAQ5hE,GAAGa,WAJlDgD,KAAK6kqB,kBAAkB5U,IAMvBiG,EAAgBl2pB,KAAKolqB,oBAAoBplqB,KAAKiunB,eAAelwjB,QAAQ5hE,GAAG4vB,UAExEmqoB,EAAcl5pB,MAAQgD,KAAKiunB,eAAelwjB,QAAQ5hE,GAAGa,OAG7D,GAA2C,IAAvCgD,KAAKiunB,eAAelwjB,QAAQthE,OAEvB,CAAA,IADDgkE,EAAMzgE,KAAKM,OAAO00nB,aACtB,IAAS74nB,EAAI,EAAGA,EAAIskE,EAAIhkE,OAAQN,IAAK,CACjC,IAAI+5pB,GAAAA,EAAgBl2pB,KAAKolqB,oBAAoB3kmB,EAAItkE,GAAG4vB,SACP,KAAxBmqoB,EAAcl5pB,QAC/Bk5pB,EAAcl5pB,MAAQ,UACfgD,KAAK+yB,OAAO0tC,EAAItkE,GAAG4vB,YAM9C6smB,EAAOv9nB,UAAU+pqB,oBAAsB,SAAU3kmB,GAC7C,IACIy1lB,EADAxwpB,EAAW,QAAW+6D,EAAM,mBAKhC,OAHI/6D,IAAajI,EAAkBuC,KAAKgB,WACpCk1pB,EAAgBl2pB,KAAKgB,QAAQ2B,cAAc+C,IAExCwwpB,GAKXt9B,EAAOv9nB,UAAUmxpB,cAAgB,WAC7BxspB,KAAKklqB,wBACLllqB,KAAKikqB,mBAMTrrC,EAAOv9nB,UAAU+0pB,eAAiB,WAC9B,IAAIj+B,EAAOhzjB,GAAsBn/D,KAAKiunB,eAAelwjB,SACrD,GAAIgD,GAAgB/gE,KAAKM,QACrBN,KAAKM,OAAOyN,OAAOywoB,IAAuBj4oB,SAAUvG,KAAMvE,QAASuE,KAAKowpB,qBAD5E,CAIA,IAAK,IAAIj0pB,EAAI,EAAG0F,EAAMswnB,EAAK11nB,OAAQN,EAAI0F,EAAK1F,IACxC6D,KAAKqwpB,0BAA0Bl+B,EAAKh2nB,GAAG4vB,OAAO,GAElD,GAAkD,IAA9C/rB,KAAKM,OAAO2tnB,eAAelwjB,QAAQthE,QAAgBuD,KAAKM,OAAOU,QAAQ2B,cAAc,eAEhF,CAAA,IADD0iqB,KAAiBhkqB,MAAMC,KAAKtB,KAAKM,OAAOU,QAAQQ,iBAAiB,gBACrE,IAASrF,EAAI,EAAG0F,EAAMwjqB,EAAY5oqB,OAAQN,EAAI0F,EAAK1F,IAC/CkpqB,EAAY,GAAG35pB,gBAAgB,iBAC/B25pB,EAAY,GAAGvhqB,UAAUS,OAAO,cAGxCvE,KAAKyoB,UAAW,EAChBzoB,KAAK4kqB,gBAAkB,GACvB5kqB,KAAKikqB,oBAETrrC,EAAOv9nB,UAAU0pqB,wBAA0B,SAAUh5oB,GAEjD,IAAK,IAAI3tB,EAAK,EAAGmpX,EADHvnX,KAAKiunB,eAAelwjB,QACI3/D,EAAKmpX,EAAU9qX,OAAQ2B,IAAM,CAC/D,IAAIqiE,EAAM8mT,EAAUnpX,GACpB,GAAIqiE,EAAI10C,QAAUA,GAAS00C,EAAIzjE,QAAUgD,KAAKhD,OAC1CyjE,EAAIsD,WAAa/jE,KAAK+jE,UAAYtD,EAAItD,YAAcn9D,KAAKm9D,UACzD,OAAO,EAGf,OAAO,GAEXy7jB,EAAOv9nB,UAAUmpqB,iBAAmB,SAAUvkqB,GAC1CD,KAAK68D,OAAS58D,EAAKwgE,IACnB,IAAIz8D,EAAM6B,EAAQ5F,EAAKkH,OAAQ,IAAMlH,EAAKqD,IACtCrD,EAAK4/N,UAAY77N,EACjBhE,KAAKuspB,aAAax8C,cAEb/rmB,GACLhE,KAAKslqB,iBAAiBtlqB,KAAK68D,OAAQ58D,EAAKkH,SAGhDyxnB,EAAOv9nB,UAAUiqqB,iBAAmB,SAAU7kmB,EAAKt5D,EAAQqF,EAAME,GAC7D,IAAIsnnB,EAAOh0nB,KAAKM,OACZN,KAAKuspB,cACLvspB,KAAKuspB,aAAax8C,cAEtB/vmB,KAAKuspB,aAAe,IAAIvspB,KAAK0G,KAAK+5D,EAAIz5B,OAAOtgC,MAAQ1G,KAAKM,OAAO2tnB,eAAevnnB,MAAM1G,KAAKM,OAAQ0znB,EAAK/F,eAAgBjunB,KAAKshE,eAAgBthE,KAAKulqB,gBAAiBvlqB,MACnK,IAAIujE,EAAa9C,EAAIz5B,OAAOu8B,YAAcywjB,EAAKgoB,gBAAgBxtf,YAC/DxuJ,KAAKuspB,aAAaluD,YACd33lB,KAAM+5D,EAAI/5D,KAAMqlB,MAAO00C,EAAI10C,MAAOw2E,YAAa9hC,EAAItC,WACnDoF,WAAYA,EAAYvnC,OAAQykC,EAAIzkC,OACpC+ylB,gBAAiBiF,EAAK/F,eAAelwjB,QAAS52D,OAAQA,EACtDinJ,cAAe4le,EAAKhF,aAAajxjB,QAASiqjB,SAAUvnjB,EAAIsnjB,eACxDG,SAAUznjB,EAAIwnjB,YAAavsjB,MAAOs4jB,EAAKt4jB,MAAOzsD,SAAUwxD,EAAI4njB,wBAC5D+G,eAAe3xnB,EAAkBgjE,EAAIz5B,OAAOoolB,gBAAyB3ujB,EAAIz5B,OAAOoolB,cAChF3znB,QAASuE,KAAKwlqB,cAAclqqB,KAAK0E,MAAOylqB,iBAAkBzxC,EAAKm5B,qBAC/Dj5oB,UAAYkC,EAAG5J,EAAM6J,EAAG3J,GAAOmwD,OAAQ4D,EAAKrC,gBAAiBqC,EAAIrC,gBACjE0wjB,gBAAiB9unB,KAAK8unB,gBAAiBp2iB,UAAW14E,KAAKM,OAAOo4E,aAUtEkgjB,EAAOv9nB,UAAUg1pB,0BAA4B,SAAUtkoB,EAAOukoB,GAC1D,IACIn+B,EAAOnynB,KAAKiunB,eAAelwjB,QAC/B,GAAIgD,GAAgB/gE,KAAKM,QAAzB,CACI,IAAIL,GAASsG,SAAUvG,KAAMvE,QAASuE,KAAKqwpB,0BAA2Bn1a,KAAMnvN,EAAOovN,KAAMm1a,GACzFtwpB,KAAKM,OAAOyN,OAAOywoB,GAAqBv+oB,OAF5C,CAKA,IAAK,IAAI9D,EAAI,EAAG0F,EAAMswnB,EAAK11nB,OAAQN,EAAI0F,EAAK1F,IAAK,CAC7C,IAAI0gE,EAAS78D,KAAKM,OAAOo0nB,iBAAiB3omB,IACtCm4C,GAA2Bn4C,EAAO/rB,KAAKM,OAAOgxnB,wBAClD,GAAIa,EAAKh2nB,GAAG4vB,QAAUA,GAASommB,EAAKh2nB,GAAG4vB,QAAU8wC,EAAOuB,gBAAiB,CACrE,GAAiC,cAA7Bp+D,KAAKiunB,eAAevnnB,OAAyB4ppB,EAAkB,CAC/D,IAAI5qpB,EAAW,QAAWysnB,EAAKh2nB,GAAG4vB,MAAQ,mBAClC/rB,KAAKM,OAAOq+nB,mBAAmBh8nB,cAAc+C,GAC/C1I,MAAQ,UACPgD,KAAK+yB,OAAOhH,GAEvBommB,EAAK9pmB,OAAOlsB,EAAG,GACf,IAAIkpqB,EAAcrlqB,KAAKM,OAAOmupB,uBAAuB5xlB,EAAO9wC,OAE5D,GADAs5oB,EAAY35pB,gBAAgB,iBACK,cAA7B1L,KAAKiunB,eAAevnnB,KAAsB,CAC1C,IAAIowH,EAAY92H,KAAKM,OAAO0mnB,eAAiB,gBAAkB,iBAC/Dq+C,EAAY1iqB,cAAcm0H,GAAWhzH,UAAUS,OAAO,cAE1DvE,KAAKyoB,UAAW,EACZzoB,KAAK8unB,gBAAgB/imB,WACd/rB,KAAK8unB,gBAAgB/imB,GAE5B/rB,KAAK+yB,OAAOhH,WACL/rB,KAAK+yB,OAAOhH,GAEvB/rB,KAAKM,OAAOyN,OAAO29nB,IACft/c,YAAa,YAAa1lL,KAAMipnB,GAAoBw0C,qBAChDp4oB,MAAO8wC,EAAO9wC,MAAOg4C,SAAU/jE,KAAK+jE,SAAU/mE,MAAOgD,KAAKhD,MAAOmgE,UAAWn9D,KAAKm9D,UACjF6G,UAAWhkE,KAAKgkE,UAAWmrF,aAAcnvJ,KAAKmvJ,aAAc+ggB,qBAAuBC,mBACpFuV,oBAAqB7omB,IAE5B,OAGR78D,KAAKikqB,oBAMTrrC,EAAOv9nB,UAAUkkC,cAAgB,WAC7B,MAAO,UAEXq5lB,EAAOv9nB,UAAUs/H,aAAe,SAAU95H,GACtC,IAAImznB,EAAOh0nB,KAAKM,OACZ6G,EAAStG,EAAEsG,OACf,GAAIA,GAAUnB,EAAQmB,EAAQ,sBAAuB,CACjD,IAAIw+pB,EAAiB9/pB,EAAQsB,EAAQ,sBAErC,GADAnH,KAAK68D,OAASm3jB,EAAK8N,eAAe6jC,EAAe9ypB,aAAa,kBACzD7S,KAAK68D,OACN,OAE8B,cAA7B78D,KAAKiunB,eAAelwlB,MAAsC,KAAdl9B,EAAEinB,SAAiC,IAAdjnB,EAAEinB,UACpE9nB,KAAKhD,MAAQmK,EAAOnK,MAAMkT,OAC1BlQ,KAAK4lqB,cAAc/kqB,MAI/B+3nB,EAAOv9nB,UAAUwqqB,gBAAkB,SAAU7kqB,GACrCA,EAAQhE,MAAMP,QACduE,EAAQq/G,mBAAmBv8G,UAAUS,OAAO,WAGpDq0nB,EAAOv9nB,UAAU4oqB,gBAAkB,WAC/B,GAAiC,cAA7BjkqB,KAAKiunB,eAAevnnB,KAAsB,CAC1C,IAAIstnB,EAAOh0nB,KAAKM,OACZwlqB,OAAmB,EACnB/nmB,EAAU/9D,KAAKiunB,eAAelwjB,QAE9BlB,GADW78D,KAAKshE,eAAeE,WAAW,uBACjC,GACb,IACKxhE,KAAKiunB,eAAe83C,oBACrB,OAEJ,GAAIhomB,EAAQthE,OAAS,GAAKuD,KAAK4kqB,kBAAoB5kqB,KAAKqlH,KAAKtxC,YAAY,wBAAyB,CAC9F/zE,KAAK4kqB,gBAAkB,GACvB,IAAK,IAAI3ypB,EAAQ,EAAGA,EAAQ8rD,EAAQthE,OAAQwV,IAMxC,GALA4qD,EAASm3jB,EAAKU,iBAAiB32jB,EAAQ9rD,GAAO8Z,QAC1Cm4C,GAA2BnG,EAAQ9rD,GAAO8Z,MAAO/rB,KAAKM,OAAOgxnB,wBAC7Dr/mB,IACAjS,KAAK4kqB,iBAAmB,QAEvBnnqB,EAAkBo/D,EAAO7gC,QAc1Bh8B,KAAK4kqB,iBAAmB/nmB,EAAOsB,WAAa,KAAOn+D,KAAK+yB,OAAO8pC,EAAO9wC,WAdnC,CACnC,IAAI6zoB,EAA2B,SAAhB/imB,EAAOn2D,MAAmC,aAAhBm2D,EAAOn2D,KAC5C,IAAIsZ,KAAKhgB,KAAK+yB,OAAO8pC,EAAO9wC,QAC5B/rB,KAAK+yB,OAAO8pC,EAAO9wC,OACvB,GAAsB,SAAhB8wC,EAAOn2D,MAAmC,aAAhBm2D,EAAOn2D,KAAsB,CAEzDo/pB,EADiB9lqB,KAAKshE,eAAeE,WAAW,kBAClBq8H,OAAO+he,EAAS/imB,EAAOorjB,aAAa/6mB,gBAGlE44pB,EAAmB9lqB,KAAKilqB,qBAAqBrF,EAAS/imB,GAE1D78D,KAAK4kqB,iBAAmB/nmB,EAAOsB,WAAa,KAAO2nmB,GAO3D9xC,EAAKQ,aACLR,EAAKy7B,sBAAsBzvpB,KAAK4kqB,iBAGpC5kqB,KAAK4kqB,gBAAkB,KAG/BhsC,EAAOv9nB,UAAU4pqB,qBAAuB,SAAUjoqB,EAAO6/D,GAErD,OADe78D,KAAKshE,eAAeE,WAAW,kBAC9Bq8H,OAAO7gM,EAAO6/D,EAAOkrjB,gBAAgB76mB,YAEzD0rnB,EAAOv9nB,UAAUspqB,kBAAoB,SAAU9nmB,EAAQ7/D,GACnD,IAAIgpqB,EACAC,EACJ,GAAoB,WAAhBppmB,EAAOn2D,KACPu/pB,GAAa,IAAK,IAAK,MACnBxmmB,GAASu1F,gBAAgBh4J,IAAUipqB,EAAU1nqB,QAAQvB,IAAU,KAC/DgpqB,GAAS,QAGZ,GAAoB,WAAhBnpmB,EAAOn2D,KAAmB,CAC/Bu/pB,GAAa,IAAK,IAAK,IAAK,KAC5B,IAAK,IAAI7nqB,EAAK,EAAGwpB,EAAU5qB,EAAOoB,EAAKwpB,EAAQnrB,OAAQ2B,IAAM,CACzD,IAAI6pB,EAAML,EAAQxpB,GACd6nqB,EAAU1nqB,QAAQ0pB,IAAQ,IAC1B+9oB,GAAS,IAIrB,OAAOA,GAEXptC,EAAOv9nB,UAAUuqqB,cAAgB,SAAU/kqB,GACvCb,KAAKi8B,YACLj8B,KAAKkmqB,WAAWrlqB,IAEpB+3nB,EAAOv9nB,UAAU6qqB,WAAa,SAAUrlqB,GACpC,IAAId,EAAQC,KACZA,KAAK+qB,MAAQlvB,OAAOuG,YAAY,WAAcrC,EAAMomqB,eAAgC,KAAdtlqB,EAAEinB,QAAiB,EAAI9nB,KAAKiunB,eAAem4C,qBAErHxtC,EAAOv9nB,UAAU4gC,UAAY,WACzBpgC,OAAOyG,cAActC,KAAK+qB,QAE9B6tmB,EAAOv9nB,UAAU8qqB,YAAc,WAC3B,IAAIzgqB,EAAW,QAAW1F,KAAK68D,OAAO9wC,MAAQ,mBAC1CmqoB,EAAgBl2pB,KAAKgB,QAAQ2B,cAAc+C,IAC1CwwpB,GAAiBl2pB,KAAKM,OAAO28nB,qBAC9Bi5B,EAAgBl2pB,KAAKM,OAAOq+nB,mBAAmBh8nB,cAAc+C,IAEjE,IAAIuqpB,EAEJ,GADAjwpB,KAAKi8B,YACAx+B,EAAkBuC,KAAK68D,OAAOm/lB,mBAU/B/L,EAAcpgmB,KAAKuB,MAAMvB,KAAKC,UAAUommB,EAAcl5pB,YAVH,CACnD,IAAIqpqB,EAAermqB,KAAK68D,OAAOm/lB,kBAAkBt9a,KACrB,iBAAjB2nb,IACPA,EAAexpqB,EAASwpqB,EAAcxqqB,SAErC4B,EAAkB4oqB,KACnBrmqB,KAAKhD,MAAQqpqB,EAAa/kqB,KAAKtB,KAAMk2pB,IAMzCz4pB,EAAkBuC,KAAKhD,QAAyB,KAAfgD,KAAKhD,MACtCgD,KAAKqwpB,0BAA0BrwpB,KAAK68D,OAAO9wC,QAG/C/rB,KAAKsmqB,oBAAoBtmqB,KAAKhD,OAC9BgD,KAAK+vpB,eAAe/vpB,KAAK68D,OAAO9wC,MAAO/rB,KAAK+jE,SAAU/jE,KAAKhD,MAAOgD,KAAKm9D,UAAWn9D,KAAKgkE,UAAWhkE,KAAKmvJ,cACvG+mgB,EAAcl5pB,MAAQizpB,EACtBjwpB,KAAKikqB,oBAETrrC,EAAOv9nB,UAAUirqB,oBAAsB,SAAUtpqB,GAC7C,IACIipqB,EACAh0pB,EAFOjS,KAAKM,OAIhB,OADAN,KAAKgkE,WAAY,EACThkE,KAAK68D,OAAOn2D,MAChB,IAAK,SACD1G,KAAK+jE,SAAW/jE,KAAK0kpB,gBAAgB3uf,MACrCkwgB,GAAa,IAAK,IAAK,IAAK,KAC5B,IAAK,IAAI9pqB,EAAI,EAAGA,EAAIa,EAAMP,OAAQN,IAC9B,GAAI8pqB,EAAU1nqB,QAAQvB,EAAMb,KAAO,EAAG,CAClC8V,EAAQ9V,EACR,MAGR6D,KAAKumqB,YAAYvpqB,EAAMknB,UAAUjS,IACnB,IAAVA,IACAjS,KAAKhD,MAAQA,EAAMknB,UAAU,EAAGjS,IAEjB,KAAfjS,KAAKhD,OAAgBA,EAAMP,QAAU,IACrCuD,KAAKhD,MAAQgD,KAAKqnnB,eAAezpb,SAAS59L,KAAKhD,MAAOgD,KAAK68D,OAAOorjB,YAAajonB,KAAK68D,OAAOn2D,OAE3Fs7C,MAAMhiD,KAAKhD,SACXgD,KAAK4kqB,gBAAkB5kqB,KAAKqlH,KAAKtxC,YAAY,yBAEjD,MACJ,IAAK,OACL,IAAK,WACD/zE,KAAK+jE,SAAW/jE,KAAK0kpB,gBAAgB3uf,MAClB,KAAf/1J,KAAKhD,OAAkBgD,KAAKhD,iBAAiBgjB,OAC7ChgB,KAAKumqB,YAAYvpqB,GACjBgD,KAAKhD,MAAQgD,KAAKqnnB,eAAezpb,SAAS59L,KAAKhD,MAAOgD,KAAK68D,OAAOorjB,YAAajonB,KAAK68D,OAAOn2D,MACvFjJ,EAAkBuC,KAAKhD,SACvBgD,KAAK4kqB,gBAAkB5kqB,KAAKqlH,KAAKtxC,YAAY,0BAGrD,MACJ,IAAK,SACD/zE,KAAKgkE,WAAY,EACO,MAApBhnE,EAAMmiB,OAAO,IACbnf,KAAKhD,MAAQgD,KAAKhD,MAAMqE,MAAM,GAC9BrB,KAAK+jE,SAAW/jE,KAAK0kpB,gBAAgB9yf,YAEG,MAAnC50J,EAAMmiB,OAAOniB,EAAMP,OAAS,IACjCuD,KAAKhD,MAAQgD,KAAKhD,MAAMqE,MAAM,GAAI,GAClCrB,KAAK+jE,SAAW/jE,KAAK0kpB,gBAAgB9yf,YAEZ,MAApB50J,EAAMmiB,OAAO,IAClBnf,KAAKhD,MAAQgD,KAAKhD,MAAMqE,MAAM,GAC9BrB,KAAK+jE,SAAW/jE,KAAK0kpB,gBAAgB70f,UAGrC7vJ,KAAK+jE,SAAW/jE,KAAK0kpB,gBAAgB9yf,WAEzC,MACJ,IAAK,UAC2B,SAAxB50J,EAAM4Y,eAAsC,MAAV5Y,EAClCgD,KAAKhD,OAAQ,EAEgB,UAAxBA,EAAM4Y,eAAuC,MAAV5Y,EACxCgD,KAAKhD,OAAQ,EAERA,EAAMP,SACXuD,KAAK4kqB,gBAAkB5kqB,KAAKqlH,KAAKtxC,YAAY,yBAEjD/zE,KAAK+jE,SAAW/jE,KAAK0kpB,gBAAgB3uf,MACrC,MACJ,QACI/1J,KAAK+jE,SAAW/jE,KAAK0kpB,gBAAgB3uf,QAGjD6ie,EAAOv9nB,UAAUkrqB,YAAc,SAAUvpqB,GACrC,IAAIwpqB,EAAWxpqB,EAAMmiB,OAAO,GACxBsnpB,EAAazpqB,EAAMqE,MAAM,EAAG,GAC5Bq7pB,EAAYh+pB,GAASgoqB,IAAK1mqB,KAAK0kpB,gBAAgB3uf,MAAO4wgB,IAAK3mqB,KAAK0kpB,gBAAgBK,UAAYtllB,GAASu1F,kBACrG0ngB,EAAU/1pB,eAAe6/pB,IAAa9J,EAAU/1pB,eAAe8/pB,MAC/DzmqB,KAAK+jE,SAAW24lB,EAAU8J,GAC1BxmqB,KAAKhD,MAAQA,EAAMknB,UAAU,GACxBlkB,KAAK+jE,WACN/jE,KAAK+jE,SAAW24lB,EAAU+J,GAC1BzmqB,KAAKhD,MAAQA,EAAMknB,UAAU,KAGjClkB,KAAK+jE,WAAa/jE,KAAK0kpB,gBAAgBG,UAAY7kpB,KAAK+jE,WAAa/jE,KAAK0kpB,gBAAgBC,aAC7D,MAAzB3kpB,KAAKhD,MAAMmiB,OAAO,KAClBnf,KAAK+jE,SAAW/jE,KAAK+jE,SAAW,UAChC/jE,KAAKhD,MAAQgD,KAAKhD,MAAMknB,UAAU,KAI9C00mB,EAAOv9nB,UAAUswnB,sBAAwB,SAAU9qnB,GAC3Cb,KAAKM,OAAO2tnB,eAAevnnB,MAInCkynB,EAAOv9nB,UAAU0oqB,4BAA8B,WAC3C,IAAI6C,IACE5pqB,MAAO,QAASyvB,KAAMzsB,KAAKqlH,KAAKtxC,YAAY,WAC5C/2E,MAAO,cAAeyvB,KAAMzsB,KAAKqlH,KAAKtxC,YAAY,iBAClD/2E,MAAO,qBAAsByvB,KAAMzsB,KAAKqlH,KAAKtxC,YAAY,wBACzD/2E,MAAO,WAAYyvB,KAAMzsB,KAAKqlH,KAAKtxC,YAAY,cAC/C/2E,MAAO,kBAAmByvB,KAAMzsB,KAAKqlH,KAAKtxC,YAAY,qBACtD/2E,MAAO,WAAYyvB,KAAMzsB,KAAKqlH,KAAKtxC,YAAY,cAErD/zE,KAAKulqB,iBACDsB,iBACM7pqB,MAAO,aAAcyvB,KAAMzsB,KAAKqlH,KAAKtxC,YAAY,gBACjD/2E,MAAO,WAAYyvB,KAAMzsB,KAAKqlH,KAAKtxC,YAAY,cAC/C/2E,MAAO,WAAYyvB,KAAMzsB,KAAKqlH,KAAKtxC,YAAY,cAC/C/2E,MAAO,QAASyvB,KAAMzsB,KAAKqlH,KAAKtxC,YAAY,WAC5C/2E,MAAO,WAAYyvB,KAAMzsB,KAAKqlH,KAAKtxC,YAAY,cAErD+ylB,eAAgBF,EAChBG,aAAcH,EACdI,iBAAkBJ,EAClBK,kBACMjqqB,MAAO,QAASyvB,KAAMzsB,KAAKqlH,KAAKtxC,YAAY,WAC5C/2E,MAAO,WAAYyvB,KAAMzsB,KAAKqlH,KAAKtxC,YAAY,gBAK7D6kjB,EAAOv9nB,UAAUopqB,uBAAyB,SAAU5jqB,GAChD,IAAIsG,EAAStG,EAAEsG,OACf,GAAIA,EAAOrD,UAAUK,SAAS,qBAA2D,SAApCnE,KAAKM,OAAO2tnB,eAAevnnB,MACxC,aAApC1G,KAAKM,OAAO2tnB,eAAevnnB,MAA2D,UAApC1G,KAAKM,OAAO2tnB,eAAevnnB,MAAmB,CAChG,IAAIstnB,EAAOh0nB,KAAKM,OACZmgE,EAAMuzjB,EAAK8N,eAAejulB,GAAa1sC,EAAQ,gBAAgBhC,kBAAkB0N,aAAa,iBAC9Fq0pB,EAAUlzC,EAAKhznB,QAAQ4K,wBACvBu7pB,EAAUhgqB,EAAOyE,wBAErB,GADA5L,KAAK68D,OAAS4D,EACVzgE,KAAK8jqB,eAAe/3oB,QAAU00C,EAAI10C,OAAS/rB,KAAK8jqB,eAAetpW,OAC/D,OAEAx6T,KAAKuspB,cACLvspB,KAAKuspB,aAAax8C,cAEtB/vmB,KAAK8jqB,gBAAmB/3oB,MAAO00C,EAAI10C,MAAOyuS,QAAQ,GAClDx6T,KAAKslqB,iBAAiBtlqB,KAAK68D,OAAQ11D,EAAQggqB,EAAQ16pB,MAAQy6pB,EAAQ16pB,KAAM26pB,EAAQx6pB,OAASu6pB,EAAQx6pB,OAG1GksnB,EAAOv9nB,UAAU8jH,aAAe,SAAUt+G,GACtC,GAAiC,cAA7Bb,KAAKiunB,eAAelwlB,MAA4D,SAApC/9B,KAAKM,OAAO2tnB,eAAevnnB,MACnC,aAApC1G,KAAKM,OAAO2tnB,eAAevnnB,MAA2D,UAApC1G,KAAKM,OAAO2tnB,eAAevnnB,KAAkB,CACpF1G,KAAKM,OAAhB,IACI6G,EAAStG,EAAEsG,OACXigqB,EAAgBjgqB,EAAOrD,UAAUK,SAAS,SAC9C,GAAI0vC,GAAa1sC,EAAQ,mBAAqBA,EAAOrD,UAAUK,SAAS,mBACpE,OAQJ,IANSnE,KAAKuspB,cACR14mB,GAAa1sC,EAAQ,oBACdtB,EAAQsB,EAAQ,+BAChB0sC,GAAa1sC,EAAQ,YAAiBigqB,GAC/CpnqB,KAAKuspB,aAAax8C,YAAY5omB,GAED,cAA7BnH,KAAKiunB,eAAelwlB,MAAwB52B,EAAOrD,UAAUK,SAAS,gBAAiB,CACvF,IAAIkjqB,EAAalgqB,EAAOw/L,uBACxB3mM,KAAKqwpB,0BAA0BgX,EAAW/jqB,GAAGjC,MAAM,GAAI,QAInEu3nB,EAAOv9nB,UAAUmqqB,cAAgB,SAAUvlqB,GACvC,IAAIqnqB,EACJtnqB,KAAK8unB,gBAAgB7unB,EAAK8rB,OAAS9rB,EAAK6unB,gBAIxC,IAAK,IAHDtge,EAAc,IAAIhrF,GAAYxjE,KAAKiunB,eAAelwjB,SAClDrC,GAAQ,IAAI2H,IAAQQ,MAAM,QAAS7jE,KAAK0kpB,gBAAgB3uf,MAAO91J,EAAK8rB,OACpEhtB,EAASyvJ,EAAYvqF,aAAavI,GAC7Bv/D,EAAI,EAAGA,EAAI4C,EAAOtC,OAAQN,IAAK,CAEpC,IAAK,IADD8V,GAAS,EACJsR,EAAI,EAAGA,EAAIvjB,KAAKiunB,eAAelwjB,QAAQthE,OAAQ8mB,IACpD,GAAIxkB,EAAO5C,GAAG4vB,QAAU/rB,KAAKiunB,eAAelwjB,QAAQx6C,GAAGwI,MAAO,CAC1D9Z,EAAQsR,EACR,OAGO,IAAXtR,GACAjS,KAAKiunB,eAAelwjB,QAAQ11C,OAAOpW,EAAO,GAG9CjS,KAAK+yB,OAAO9yB,EAAK8rB,eACV/rB,KAAK+yB,OAAO9yB,EAAK8rB,OAE5B,IAAI+qG,EAAY92H,KAAKM,OAAO0mnB,eAAiB,gBAAkB,iBAC/DsgD,EAAoBtnqB,KAAKM,OAAOmupB,uBAAuBxupB,EAAK8rB,OAAOppB,cAAcm0H,GAC7D,cAAhB72H,EAAKk2D,QACLn2D,KAAKiunB,eAAelwjB,QAAU/9D,KAAKiunB,eAAelwjB,QAAQxjD,OAAOta,EAAKkwnB,kBAClEnwnB,KAAKiunB,eAAelwjB,QAAQthE,QAAU6qqB,GACtCA,EAAkBxjqB,UAAUM,IAAI,gBAIhCkjqB,GACAA,EAAkBxjqB,UAAUS,OAAO,cAEvCvE,KAAKM,OAAOyppB,aAAa73lB,WAE7BlyD,KAAKM,OAAOsrD,YAEhBgtkB,EAAOv9nB,UAAU8pqB,aAAe,WAE5B,IAAK,IADDhzC,EAAOnynB,KAAKiunB,eAAelwjB,QACtB5hE,EAAI,EAAGA,EAAIg2nB,EAAK11nB,OAAQN,IAAK,CAClC6D,KAAK68D,OAAS78D,KAAKM,OAAOo0nB,iBAAiBvC,EAAKh2nB,GAAG4vB,QAC/Cm4C,GAA2BiujB,EAAKh2nB,GAAG4vB,MAAO/rB,KAAKM,OAAOgxnB,wBAC1D,IAAIlxjB,EAAY+xjB,EAAKh2nB,GAAG4vB,MACnB/rB,KAAKM,OAAOo0nB,iBAAiBvC,EAAKh2nB,GAAG4vB,SACtCq0C,EAAY8D,GAA2BiujB,EAAKh2nB,GAAG4vB,MAAO/rB,KAAKM,OAAOgxnB,wBAAwBvlmB,OAG9F/rB,KAAKunqB,kBAAkBnnmB,EAAW+xjB,EAAKh2nB,GAAG4nE,SAAUoujB,EAAKh2nB,GAAGa,MAAOm1nB,EAAKh2nB,GAAGuK,KAAMyrnB,EAAKh2nB,GAAGghE,UAAWg1jB,EAAKh2nB,GAAG6nE,UAAWmujB,EAAKh2nB,GAAGgzJ,gBAIvIype,EAAOv9nB,UAAUksqB,kBAAoB,SAAUnnmB,EAAW2D,EAAU/mE,EAAO0J,EAAMy2D,EAAW6G,EAAWmrF,GACnGnvJ,KAAK8unB,gBAAgB1ujB,KACbr0C,MAAOq0C,EACPjD,UAAWA,EACX6G,UAAWA,EACXmrF,aAAcA,EACdprF,SAAUA,EACV/mE,MAAOA,EACP0J,KAAMA,IAEd1G,KAAK8kqB,iBAAiB1kmB,IAE1Bw4jB,EAAOv9nB,UAAUypqB,iBAAmB,SAAU1kmB,GAC1C,IAAIknmB,GACJA,EAAoBtnqB,KAAKM,OAAOmupB,uBAAuBrulB,GAAWz9D,cAAc,oBAE5E2kqB,EAAkBxjqB,UAAUM,IAAI,eAGjCw0nB,KC72BA4uC,IACPxse,KAAM,aACNyse,SAAU,cACV/xnB,KAAM,UACNxmC,OAAQ,YACR01E,OAAQ,kBACRnrB,OAAQ,aAORiumB,GAAwB,WAKxB,SAASA,EAAOpnqB,GACZN,KAAK4vW,QAAS,EACd5vW,KAAK2nqB,UAAW,EAChB3nqB,KAAKM,OAASA,EACVN,KAAKM,OAAO0mF,cAGhBhnF,KAAKmioB,aAAe,IAAIuK,GAAmBpsoB,GAC3CN,KAAKtD,oBAkeT,OA3dAgrqB,EAAOrsqB,UAAU+1pB,eAAiB,SAAUp6B,GACxC,IAAIvH,OAAwBt0nB,IAAV67nB,GAAiC,OAAVA,GAAkBA,EAAMv6nB,QAAU,EACvEuD,KAAKM,OAAO00nB,aAAap9lB,IAAI,SAAU7qB,GAAK,OAAOA,EAAEgf,QAA8B,iBAAVirmB,GAAuBA,GAASA,EAC7Gh3nB,KAAK4nqB,WAAWn4C,IAEpBi4C,EAAOrsqB,UAAUwsqB,aAAe,SAAU7wC,EAAO/knB,EAAO3O,GACpD,IAEIs/nB,EACA1C,EAMA4nC,EACAC,EAVA/zC,EAAOh0nB,KAAKM,OACZ+soB,EAAS,EAKTwjB,EAAc,EACdnxpB,EAAM4D,GAAUtD,KAAKM,OAAOqupB,oBAAoB33B,GAChDrvT,EAAc3nU,KAAKM,OAAO0goB,yBAAyBthoB,GAGnDulE,EAAU+ujB,EAAKiJ,mBACfh4jB,EACIhzD,EAAQgzD,GACR29jB,EAAc5O,EAAK6L,iBACnBK,EAAelM,EAAK+Y,kBACpB+6B,EAAkBllC,EAAYphoB,iBAAiB,MAAMmmU,GAAa/lU,WAAU,GAC5EmmqB,EAAmB7nC,EAAa1+nB,iBAAiB,iBAAmBmmU,EAAc,GAAK,OAGvFi7T,EAAc5O,EAAK2K,mBAAmBh8nB,cAAc,oBAAoByX,SAAS,GACjF8lnB,EAAelM,EAAKv/kB,aAAa9xC,cAAc,qBAAqByX,SAAS,GAC7E0tpB,EAAkBllC,EAAYphoB,iBAAiB,MAAMmmU,EAAc1iQ,GAASrjE,WAAU,GACtFmmqB,EAAmB7nC,EAAa1+nB,iBAAiB,iBAAoBmmU,EAAc1iQ,EAAW,GAAK,OAIvG29jB,EAAc5O,EAAK6L,iBACnBK,EAAelM,EAAK+Y,kBACpB+6B,EAAkBllC,EAAYphoB,iBAAiB,MAAMmmU,GAAa/lU,WAAU,GAC5EmmqB,EAAmB7nC,EAAa1+nB,iBAAiB,iBAAmBmmU,EAAc,GAAK,2BAE3F,IAAIqgW,EAAmBplC,EAAYjgoB,cAAc,MAAMnB,iBAAiB,uBACxE,GAAIwmqB,EAAiBvrqB,OAAS,EAC1B,IAAK,IAAIN,EAAI,EAAGA,EAAI6rqB,EAAiBvrqB,OAAQN,IACzC00pB,GAAemX,EAAiB7rqB,GAAGyI,aAGvC5E,KAAKM,OAAO84nB,gBAAkBp5nB,KAAKM,OAAOq7R,aAC1Ck1X,GAAe3wB,EAAav9nB,cAAc,wBAAwBiC,aAIjE,IAFDu5D,GAAc2pmB,GACdG,KACJ,IAAS9rqB,EAAI,EAAGA,EAAI4rqB,EAAiBtrqB,OAAQN,IACzC8rqB,EAAY9rqB,GAAK4rqB,EAAiB5rqB,GAAGyF,WAAU,GAEnD,IAAIsmqB,EAAUloqB,KAAK+ujB,YAAY6zE,EAAazkkB,EA1CzB,gBA2CfgqmB,EAAWnoqB,KAAK+ujB,YAAYmxE,EAAc+nC,EA1C1B,iBA2ChBG,EAAgBp0C,EAAKgB,aAAa/inB,GAEHm2pB,EAAcpypB,MAAQzT,EAA5C2lqB,EAAUC,EAA6CD,EAA4CC,GAChHnoqB,KAAKmioB,aAAawK,eAAe3Y,EAAKgB,aAAa/inB,KAEpC,IADN+hnB,EAAKgB,aAAa54lB,KAAK,SAAUrvB,GAAK,OAAmB,OAAZA,EAAEiJ,YAA8B7a,IAAZ4R,EAAEiJ,OAAuBjJ,EAAEiJ,MAAMvZ,QAAU,KAEjHu3nB,EAAKgB,aAAa51nB,QAAQ,SAAU4B,GAC5BA,EAAQw2B,UACR61mB,GAAkBt4mB,SAAS/zB,EAAQgV,MAAO,OAItD,IAAIqypB,EAAiBh7B,EAASwjB,EAC1BxjB,EAAS,IAAMrZ,EAAKiJ,sBAChBj9nB,KAAKM,OAAO84nB,gBAAkBp5nB,KAAKM,OAAOq7R,YAC1C37R,KAAKmioB,aAAawK,eAAe,IAAIzukB,IAASloD,MAAO,UAEzD4snB,EAAYl+nB,MAAMsR,MAAQzT,EAAW8lqB,GACrCnoC,EAAax7nB,MAAMsR,MAAQzT,EAAW8lqB,IAE1C,IAAItyK,EAAa6sI,EAAYh+nB,YACTovnB,EAAKv/kB,aAAwB,YAC9Bshd,GACf6sI,EAAY9+nB,UAAUM,IAAI,iBAC1B87nB,EAAap8nB,UAAUM,IAAI,mBAG3Bw+nB,EAAY9+nB,UAAUS,OAAO,iBAC7B27nB,EAAap8nB,UAAUS,OAAO,mBAQtCmjqB,EAAOrsqB,UAAUiX,QAAU,WACvBtS,KAAKmioB,aAAe,KACpBnioB,KAAKmlB,eACLnlB,KAAKpD,uBAMT8qqB,EAAOrsqB,UAAUkkC,cAAgB,WAC7B,MAAO,UAEXmooB,EAAOrsqB,UAAUusqB,WAAa,SAAU5wC,GACpC,IAAIj3nB,EAAQC,KACZg3nB,EAAM53nB,QAAQ,SAAU4B,GACpB,IAAIo/D,EAAYp/D,EACZ2mU,EAAc5nU,EAAMO,OAAOu5nB,sBAAsBz5jB,IACE,IAAnDrgE,EAAMO,OAAO00nB,aAAartT,GAAanwS,SACvCz3B,EAAM8nqB,aAAaznmB,EAAWunQ,MAQ1C+/V,EAAOrsqB,UAAU0zjB,YAAc,SAAU9uf,EAAOxzC,EAAM/a,GAClD,IAAI8gpB,EAAarxpB,EAAc,OAC/BqxpB,EAAWnvpB,UAAYrD,KAAKM,OAAOU,QAAQqC,UAC3CmvpB,EAAW9tpB,MAAMo7D,QAAU,4DAC3B,IAAI2ylB,EAAWtxpB,EAAc,OAC7BsxpB,EAASpvpB,UAAYqO,EACrB,IAAIghpB,EAAUvxpB,EAAc,SAC5BuxpB,EAAQrvpB,UAAY48D,EAAM58D,UAC1BqvpB,EAAQ5upB,UAAUM,IAAI,iBACtBsupB,EAAQhupB,MAAMo7D,QAAU,iCACxB,IAAI6ylB,EAAOxxpB,EAAc,MACzBsrB,EAAKrtB,QAAQ,SAAU4B,GACnB,IAAIgoY,EAAK2pR,EAAK/wpB,YACdonY,EAAG3lY,UAAY48D,EAAMt9D,cAAc,MAAMU,UACzC2lY,EAAGrnY,YAAYX,GACf0xpB,EAAQ/wpB,YAAYqnY,KAExBypR,EAAS9wpB,YAAY+wpB,GACrBF,EAAW7wpB,YAAY8wpB,GACvBjypB,SAASuL,KAAKpK,YAAY6wpB,GAC1B,IAAI8V,EAAmB5V,EAAQ9mpB,wBAAwBoK,MAEvD,OADAxV,SAASuL,KAAKzG,YAAYktpB,GACnBnmpB,KAAKwmB,KAAKy1oB,IAKrBZ,EAAOrsqB,UAAUqB,iBAAmB,WAC5BsD,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAOslF,GAAG88iB,GAAwB1ioB,KAAKuoqB,cAAevoqB,MAC3DA,KAAKM,OAAOslF,GAAGm1jB,GAAmB/6oB,KAAKukB,WAAYvkB,QAKvD0nqB,EAAOrsqB,UAAUuB,oBAAsB,WAC/BoD,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAO0lF,IAAI08iB,GAAwB1ioB,KAAKuoqB,eAC7CvoqB,KAAKM,OAAO0lF,IAAI+0jB,GAAmB/6oB,KAAKukB,cAK5CmjpB,EAAOrsqB,UAAU0wG,OAAS,WACtB/rG,KAAKmlB,eACLnlB,KAAKukB,aACLvkB,KAAKwoqB,oBAETd,EAAOrsqB,UAAUktqB,cAAgB,WAC7BvoqB,KAAKyoqB,oBAAoBrpqB,QAAQ,SAAU4E,GACvCA,EAAIU,MAAMqR,OAAS/R,EAAIqQ,cAAcq9B,aAAe,QAG5Dg2nB,EAAOrsqB,UAAUkpB,WAAa,WAC1Bhf,GAAanB,IAAIpE,KAAKM,OAAOq+nB,mBAAoBnznB,GAAQ0+E,gBAAiBlqF,KAAK0oqB,YAAa1oqB,MAC5FuF,GAAanB,IAAIpE,KAAKM,OAAOq+nB,mBAAoBu0B,GAAiBlzpB,KAAK2oqB,YAAa3oqB,OAExF0nqB,EAAOrsqB,UAAU8pB,aAAe,WAC5B5f,GAAahB,OAAOvE,KAAKM,OAAOq+nB,mBAAoBnznB,GAAQ0+E,gBAAiBlqF,KAAK0oqB,aAClFnjqB,GAAahB,OAAOvE,KAAKM,OAAOq+nB,mBAAoBu0B,GAAiBlzpB,KAAK2oqB,cAE9EjB,EAAOrsqB,UAAUotqB,kBAAoB,WACjC,OAAOzoqB,KAAKM,OAAO28nB,sBACZ57nB,MAAMC,KAAKtB,KAAKM,OAAOq+nB,mBAAmBn9nB,iBAAiB,IAAMgmqB,GAAgBxse,UAC/E35L,MAAMC,KAAKtB,KAAKM,OAAOu/nB,iBAAiBr+nB,iBAAiB,IAAMgmqB,GAAgBxse,QAE5F0se,EAAOrsqB,UAAUmtqB,iBAAmB,cAC7BnnqB,MAAMC,KAAKtB,KAAKM,OAAOu/nB,iBAAiBr+nB,iBAAiB,IAAMgmqB,GAAgBC,WAAWroqB,QAAQ,SAAU4E,GAC3GA,EAAIU,MAAMqR,OAAS/R,EAAIqQ,cAAcq9B,aAAe,QAG5Dg2nB,EAAOrsqB,UAAUstqB,YAAc,SAAU9nqB,GACrC,GAAIA,EAAEsG,OAAOrD,UAAUK,SAAS,cAAe,CAC3C,IAAIs8D,EAAMzgE,KAAK4oqB,gBAAgB/nqB,GAC/Bb,KAAK6nqB,aAAapnmB,EAAI10C,MAAO/rB,KAAKM,OAAO0goB,yBAAyBvgkB,EAAI/gE,KAAM+gE,EAAI/gE,KACnEmG,EAAQhF,EAAEsG,OAAQqgqB,GAAgB5ilB,QACxC9gF,UAAUM,IAAI,eAG7BsjqB,EAAOrsqB,UAAUqtqB,YAAc,SAAU7nqB,GACrC,GAAIA,EAAEsG,OAAOrD,UAAUK,SAAS,cAAe,CAC3C,IAAKnE,KAAKkP,OAAQ,CACd,GAAiC,IAA7BlP,KAAK2/D,oBAA2B,CAChC,IAAK,IAAIvhE,EAAK,EAAGyE,EAAK7C,KAAK6oqB,qBAAsBzqqB,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACnE,IAAIqiE,EAAM59D,EAAGzE,GACb4B,KAAKmioB,aAAawK,eAAelskB,GAErCzgE,KAAKmioB,aAAa0K,kBAEtB7soB,KAAKgB,QAAUH,EAAEsG,OACjBnH,KAAK8oqB,mBAAqB9oqB,KAAKM,OAAOU,QAAQ4K,wBAAwBoK,MACtEhW,KAAK+oqB,eACL/oqB,KAAK68D,OAAS78D,KAAK4oqB,gBAAgB/nqB,GACnCb,KAAK8L,MAAQ9L,KAAKgpqB,UAAUnoqB,GACxBb,KAAKM,OAAO4S,UACZlT,KAAKipqB,QAAUl0oB,SAAS/0B,KAAK68D,OAAO7mD,MAAM9I,WAAY,KAC/ClN,KAAK68D,OAAOrJ,SAAWz+B,SAAS/0B,KAAK68D,OAAOrJ,SAAStmD,WAAY,IAAM,GAG9ElN,KAAKipqB,SAAWjpqB,KAAK68D,OAAOrJ,SAAWz+B,SAAS/0B,KAAK68D,OAAOrJ,SAAStmD,WAAY,IAAM,GACjF6nB,SAAS/0B,KAAK68D,OAAO7mD,MAAM9I,WAAY,IAEjDlN,KAAKipqB,SAAWjpqB,KAAK8L,MAEzB,GAAIN,GAAQkb,WAAa1mB,KAAKkP,OAAOpL,UAAUK,SAASqjqB,GAAgB9xnB,MACpE11C,KAAKkP,OAAOpL,UAAUM,IAAIojqB,GAAgB9xnB,MAC1CnwC,GAAanB,IAAI5D,SAAUgL,GAAQ0+E,gBAAiBlqF,KAAKkpqB,aAAclpqB,MACvEuF,GAAanB,IAAIpE,KAAKkP,OAAQ1D,GAAQ0+E,gBAAiBlqF,KAAK0oqB,YAAa1oqB,UAExE,CACD,IAAIC,GACAY,EAAGA,EACHg8D,OAAQ78D,KAAK68D,QAGjB,GADA78D,KAAKM,OAAOkmB,QrDvLH,cqDuL+BvmB,GACpCA,EAAK44B,OAEL,YADA74B,KAAKmpqB,qBAGT5jqB,GAAanB,IAAI5D,SAAUgL,GAAQ4+E,cAAepqF,KAAKopqB,UAAWppqB,MAClEuF,GAAanB,IAAIpE,KAAKM,OAAOU,QAASwK,GAAQ2+E,eAAgBnqF,KAAK8vW,SAAU9vW,MAC7EA,KAAKwja,aAAa,UAI9BkkQ,EAAOrsqB,UAAU8tqB,mBAAqB,SAAU/zD,GACxCA,IACA7vmB,GAAahB,OAAOvE,KAAKM,OAAOU,QAASwK,GAAQ2+E,eAAgBnqF,KAAK8vW,UACtEvqW,GAAahB,OAAO/D,SAAUgL,GAAQ4+E,cAAepqF,KAAKopqB,WAC1DppqB,KAAKwja,aAAa,WAElBh4Z,GAAQkb,WACRnhB,GAAahB,OAAO/D,SAAUgL,GAAQ0+E,gBAAiBlqF,KAAKkpqB,cAC5D3jqB,GAAahB,OAAOvE,KAAKkP,OAAQ1D,GAAQ0+E,gBAAiBlqF,KAAK0oqB,cAEnErjqB,EAAOrF,KAAKkP,QACZlP,KAAKkyD,WAETw1mB,EAAOrsqB,UAAUknQ,SAAW,SAAUvsP,EAAOw9C,EAAUp1B,GACnD,OAAIo1B,GAAYx9C,EAAQw9C,EACbA,EAEDp1B,GAAYpoB,EAAQooB,EACnBA,EAGApoB,GAGf0xpB,EAAOrsqB,UAAUy0W,SAAW,SAAUjvW,GAC9Bb,KAAKM,OAAO+8nB,gBACRr9nB,KAAKM,OAAO28nB,qBACPj9nB,KAAKM,OAAOq+nB,mBAAmBn9nB,iBAAiB,wBAAwB/E,QACzEuD,KAAKM,OAAOyN,OAAOuvnB,IAAuBC,KAAM,cAGxDv9nB,KAAKgB,QAAQ0D,MAAMqR,OAAS/V,KAAKgB,QAAQqT,cAAcq9B,aAAe,KACtE1xC,KAAKqpqB,mBAET,IAAIv9pB,EAAQ9L,KAAKgpqB,UAAUnoqB,GACvByoqB,EAAYtpqB,KAAKM,OAAO4S,YAAcpH,EAAQ9L,KAAK8L,OAAUA,EAAQ9L,KAAK8L,MAC1Ey9pB,GACAvzpB,MAAO+e,SAAS/0B,KAAKmioB,aAAa5/X,SAASviQ,KAAK68D,QAAQ3vD,WAAY,IAAMo8pB,EAC1E91mB,SAAUxzD,KAAK68D,OAAOrJ,SAAWz+B,SAAS/0B,KAAK68D,OAAOrJ,SAAStmD,WAAY,IAAM,KACjFkxB,SAAUp+B,KAAK68D,OAAOz+B,SAAWrJ,SAAS/0B,KAAK68D,OAAOz+B,SAASlxB,WAAY,IAAM,MAEjF8I,EAAQhW,KAAKuiQ,SAASgna,EAAQvzpB,MAAOuzpB,EAAQ/1mB,SAAU+1mB,EAAQnroB,UAKnE,KAJMp+B,KAAKM,OAAO4S,WAAalT,KAAKipqB,SAAWn9pB,GAAW9L,KAAKM,OAAO4S,WAAalT,KAAKipqB,SAAWn9pB,KAC/FkK,EAAQhW,KAAK68D,OAAOrJ,SAAWz+B,SAAS/0B,KAAK68D,OAAOrJ,SAAStmD,WAAY,IAAM,EAC/ElN,KAAK8L,MAAQA,EAAQ9L,KAAKipqB,SAE1BjzpB,IAAU+e,SAAS/0B,KAAK68D,OAAO7mD,MAAM9I,WAAY,IAAK,CACtDlN,KAAK8L,MAAQA,EACb9L,KAAK68D,OAAO7mD,MAAQzT,EAAWyT,GAC/B,IAAI/V,GACAY,EAAGA,EACHg8D,OAAQ78D,KAAK68D,QAGjB,GADA78D,KAAKM,OAAOkmB,QrDrPF,WqDqP2BvmB,GACjCA,EAAK44B,OAEL,YADA74B,KAAKmpqB,oBAAmB,GAG5BnpqB,KAAKmioB,aAAawK,eAAe3soB,KAAK68D,OAAQ,KAAM,UACpD78D,KAAKqsd,eAETrsd,KAAK2nqB,UAAW,GAEpBD,EAAOrsqB,UAAU+tqB,UAAY,SAAUvoqB,GACnC,GAAKb,KAAKkP,SAAUlP,KAAKM,OAAO0mF,YAAhC,CAGAzhF,GAAahB,OAAOvE,KAAKM,OAAOU,QAASwK,GAAQ2+E,eAAgBnqF,KAAK8vW,UACtEvqW,GAAahB,OAAO/D,SAAUgL,GAAQ4+E,cAAepqF,KAAKopqB,WAC1DppqB,KAAKwja,aAAa,UAClBn+Z,EAAOrF,KAAKkP,QACZ,IAAIjP,GACAY,EAAGA,EACHg8D,OAAQ78D,KAAK68D,QAEjB78D,KAAKM,OAAOkmB,QrDzQI,aqDyQuBvmB,GACvC4F,EAAQ7F,KAAKgB,QAAS,iBAAiB8C,UAAUM,IAAI,aACjDyvC,GAAa7zC,KAAKgB,QAAS,kBAC3BhB,KAAKwpqB,oBAAqB,EAG1BxpqB,KAAKwpqB,oBAAqB,EAE1BxpqB,KAAKM,OAAO28nB,oBACZj9nB,KAAKM,OAAOyN,OAAOuvnB,IAAuBC,KAAM,aAEpDv9nB,KAAKkyD,UACLlyD,KAAKypqB,eAAe5oqB,GACpBb,KAAK2nqB,UAAW,IAEpBD,EAAOrsqB,UAAU2tqB,UAAY,SAAUnoqB,GACnC,OAAIA,EAAEszC,SAAWtzC,EAAEszC,QAAQ13C,OAChBoE,EAAEszC,QAAQ,GAAGroC,MAGbjL,EAAEiL,OAGjB47pB,EAAOrsqB,UAAUwtqB,mBAAqB,WAElC,IAAK,IADD9qmB,EAAU/9D,KAAKM,OAAO00nB,aACjB52nB,EAAK,EAAGyE,KAAQxB,MAAM9F,MAAMyE,KAAKM,OAAOu/nB,iBAAiBr+nB,iBAAiB,oBAAqBpD,EAAKyE,EAAGpG,OAAQ2B,IAEpH,IAAK,IADD4F,EAAMnB,EAAGzE,GACJ6F,EAAK,EAAGsjX,EAAYxpT,EAAS95D,EAAKsjX,EAAU9qX,OAAQwH,IAAM,CAC/D,IAAI44D,EAAS0qT,EAAUtjX,GACvB,GAAID,EAAIrB,cAAc,mBAClBqB,EAAIrB,cAAc,kBAAkBkQ,aAAa,kBAAoBgqD,EAAOn9D,KAAOm9D,EAAOrlC,QAAS,CACnGqlC,EAAO7mD,MAAQhS,EAAI4H,wBAAwBoK,MAC3C,OAIZ,OAAO+nD,GAEX2pmB,EAAOrsqB,UAAUutqB,gBAAkB,SAAU/nqB,GACzC,IACInB,EADOmG,EAAQhF,EAAEsG,OAAQqgqB,GAAgB5ilB,QAC9BjiF,cAAc,oBAAoBkQ,aAAa,gBAC9D,OAAO7S,KAAKM,OAAOwhoB,eAAepioB,IAEtCgoqB,EAAOrsqB,UAAUmoa,aAAe,SAAUrtW,GACtC,IAAIkvkB,KAAgBhkoB,MAAMC,KAAKtB,KAAKM,OAAOq+nB,mBAAmBn9nB,iBAAiB,OAC/E6joB,EAAW7goB,KAAKxE,KAAKM,OAAOU,SAC5B,IAAK,IAAI5C,EAAK,EAAGqupB,EAAepnB,EAAYjnoB,EAAKqupB,EAAahwpB,OAAQ2B,IAAM,CAC9DqupB,EAAarupB,GACnB0F,UAAUqyD,GAAQqxmB,GAAgB/tmB,UAG9CiumB,EAAOrsqB,UAAU62D,QAAU,WACvBlyD,KAAK68D,OAAS,KACd78D,KAAK8L,MAAQ,KACb9L,KAAKgB,QAAU,KACfhB,KAAKkP,OAAS,MAElBw4pB,EAAOrsqB,UAAU0tqB,aAAe,WAC5B/oqB,KAAKkP,OAAS/N,EAAc,OACxBkC,UAAWmkqB,GAAgBt4pB,SAE/BlP,KAAKM,OAAOU,QAAQW,YAAY3B,KAAKkP,QACrClP,KAAKqpqB,mBAET3B,EAAOrsqB,UAAUguqB,gBAAkB,WAC/B,IAAItzpB,EAAS/V,KAAKM,OAAOm0C,aAAa/C,aAAe1xC,KAAK2/D,oBACtDtsC,EAAOxtB,EAAQ7F,KAAKgB,QAASwmqB,GAAgB5ilB,QAC7CokT,KAAQ3nY,MAAMC,KAAKtB,KAAKM,OAAOq+nB,mBAAmBn9nB,iBAAiB,OACnEyjE,EAAUjlE,KAAKM,OAAO28nB,mBACtBh4jB,IACI5xC,EAAKhf,cAAc+F,SAAS3d,SAAWwoE,EACvC+jU,EAAG3gX,OAAO,EAAG2gX,EAAGvsY,OAAS,GAGzBusY,EAAG3gX,OAAO2gX,EAAGvsY,OAAS,EAAGusY,EAAGvsY,OAAS,IAG7C,IAAK,IAAIN,EAAI6sY,EAAGzqY,QAAQ80B,EAAKhf,eAAgBlY,EAAI6sY,EAAGvsY,OAAQN,IACxD4Z,GAAUizX,EAAG7sY,GAAGu1C,aAEpB,IAAIz8B,EAAMjV,KAAK0pqB,QAAQr2oB,GACvBpe,EAAIzI,MAASxM,KAAKM,OAAO4S,WAAY,EAAQmgB,EAAKzuB,YAAc,EAChE5E,KAAKkP,OAAOxK,MAAMo7D,QAAU,WAAa/pD,EAAS,YAAcd,EAAIvI,IAAM,YAAcL,KAAK+S,MAAMnK,EAAIzI,MAAQ,OAEnHk7pB,EAAOrsqB,UAAUskE,kBAAoB,SAAU5pD,GAC3C,IAAI/R,EAAMhE,KAAKM,OAAO28nB,mBAAqBj9nB,KAAKM,OAAOm0C,aAAa9xC,cAAc,qBAC5E3C,KAAKM,OAAOm0C,aAAa73B,WAC/B,OAAQ5Y,EAAIytT,aAAeztT,EAAIspB,cAAgBvX,GAC3C/R,EAAI47D,YAAc57D,EAAIqpB,YAAcsyC,KAAsB,GAElE+nmB,EAAOrsqB,UAAU6tqB,aAAe,SAAUroqB,GACtC,IAAI+sJ,EAAM/sJ,EAAEsG,OAAOrD,UACb8pJ,EAAIzpJ,SAASqjqB,GAAgBxse,OAASptC,EAAIzpJ,SAASqjqB,GAAgB9xnB,QAAU11C,KAAKkP,SACpF3J,GAAahB,OAAO/D,SAAUgL,GAAQ0+E,gBAAiBlqF,KAAKkpqB,cAC5D3jqB,GAAahB,OAAOvE,KAAKkP,OAAQ1D,GAAQ0+E,gBAAiBlqF,KAAK0oqB,aAC/DrjqB,EAAOrF,KAAKkP,QACZlP,KAAKkyD,YAGbw1mB,EAAOrsqB,UAAUgxd,aAAe,WAC5B,IAAIh5b,EAAOxtB,EAAQ7F,KAAKgB,QAASwmqB,GAAgB5ilB,QAC7Cp4E,EAAOH,KAAK+S,MAAMpf,KAAK0pqB,QAAQr2oB,GAAM7mB,MAAQxM,KAAKM,OAAO4S,WAAY,EAAQmgB,EAAKzuB,YAAc,IAKpG,GAHI4H,EAAOxM,KAAK8oqB,qBACZt8pB,EAAOxM,KAAK8oqB,mBAFE,GAId9oqB,KAAKM,OAAO28nB,mBAAoB,CAChC,IACI0sC,EADQ9jqB,EAAQwtB,EAAM,YACRlf,WACd3H,EAAOm9pB,IACPn9pB,EAAOm9pB,GAGf3pqB,KAAKkP,OAAOxK,MAAM8H,KAAOA,EAAO,MAEpCk7pB,EAAOrsqB,UAAUquqB,QAAU,SAAUhnqB,GAQjC,IAPA,IAAIknqB,GACAl9pB,IAAK,EACLF,KAAM,GAENb,EAASjJ,EAAKkJ,wBACdwxQ,EAAM16Q,EAAKoS,cACXb,EAAevR,EAAKuR,cAAgBmpQ,EAAIhxQ,gBACrC6H,IACFA,IAAiBmpQ,EAAIrxQ,MAAQkI,IAAiBmpQ,EAAIhxQ,kBACnB,WAAhC6H,EAAavP,MAAMwP,UACnBD,EAAeA,EAAaxT,WAKhC,OAHIwT,GAAgBA,IAAiBvR,GAAkC,IAA1BuR,EAAalO,WACtD6jqB,EAAe31pB,EAAarI,0BAG5Bc,IAAKf,EAAOe,IAAMk9pB,EAAal9pB,IAC/BF,KAAMb,EAAOa,KAAOo9pB,EAAap9pB,OAGzCk7pB,EAAOrsqB,UAAUouqB,eAAiB,SAAU5oqB,GACpCb,KAAK6pqB,gBAAkB7pqB,KAAK2nqB,WACvB3nqB,KAAK4vW,QAIN1vW,aAAaF,KAAK4vW,QAClB5vW,KAAK2oqB,YAAY9nqB,GACjBb,KAAK4vW,OAAS,MALd5vW,KAAK4vW,OAASzvW,WAAWH,KAAK8pqB,iBAAkB,OAS5DpC,EAAOrsqB,UAAUwuqB,aAAe,WAC5B,IAAI5glB,EAAYz9E,GAAQy9E,UAAUrzE,cAClC,MAAO,mBAAmBzS,KAAK8lF,IAEnCy+kB,EAAOrsqB,UAAUyuqB,eAAiB,WAC9B9pqB,KAAK4vW,OAAS,MAEX83T,KCzfPqC,GAAyB,WAKzB,SAASA,EAAQzpqB,GACbN,KAAKM,OAASA,EACVN,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAOslF,GAAGs8iB,GAAmBlioB,KAAK+rnB,WAAY/rnB,MACnDA,KAAKM,OAAOslF,GAAGi4iB,GAAiB79nB,KAAK89nB,kBAAmB99nB,MACxDA,KAAKM,OAAOslF,GAAGoklB,GAAwBhqqB,KAAK6wd,iBAAkB7wd,MAC9DA,KAAKM,OAAOslF,GAAGo8iB,GAAmBhioB,KAAK0wG,KAAM1wG,MAC7CA,KAAKM,OAAOslF,GAAGm8iB,GAAwB/hoB,KAAKyvG,UAAWzvG,MACvDA,KAAKM,OAAOslF,GAAGq8iB,GAAuBjioB,KAAK+xG,SAAU/xG,MACrDA,KAAKM,OAAOslF,GAAGs8iB,GAAmBlioB,KAAK+rnB,WAAY/rnB,MACnDA,KAAKM,OAAOslF,GAAG88iB,GAAwB1ioB,KAAKiqqB,qBAAsBjqqB,OAsTtE,OApTA+pqB,EAAQ1uqB,UAAU6uqB,gBAAkB,SAAUC,EAASC,GACnD,OAAQD,EAAQ91pB,cAAcgG,YAAY+vpB,EAAS/1pB,gBAAmBrU,KAAKM,OAAO28nB,oBAC3Ez+nB,MAAMnD,UAAUkD,QAAQ+C,KAAK+oqB,EAAeF,EAAS,SAAS/vpB,SAAU+vpB,EAAQ91pB,iBAC3E7V,MAAMnD,UAAUkD,QAAQ+C,KAAK+oqB,EAAeD,EAAU,SAAShwpB,SAAUgwpB,EAAS/1pB,iBACvFrU,KAAKsqqB,2BAA2BH,EAASC,IAAa,GAEjEL,EAAQ1uqB,UAAUkvqB,eAAiB,SAAUJ,EAASC,GAIlD,IAHA,IAAII,EACA3llB,EAAU7kF,KAAKyjoB,kBAEX+mC,GAAW3llB,EAAQpoF,OAAS,GAEhC+tqB,EAAUL,IADDtllB,EAAQunE,OACepsJ,KAAKsqqB,2BAA2BH,EAASC,IAAa,EAE1F,OAAOI,GAEXT,EAAQ1uqB,UAAUovqB,cAAgB,SAAUhqmB,EAAK0xjB,EAAM7xnB,GACnDA,EAASA,EACT,IAAK,IAAInE,EAAI,EAAG0F,EAAMswnB,EAAK11nB,OAAQN,EAAI0F,EAAK1F,IAAK,CAC7C,GAAIskE,IAAQ0xjB,EAAKh2nB,GACb,OAAO,EAEN,GAAIg2nB,EAAKh2nB,GAAG4hE,QAAS,CACtB,IAAInuD,EAAMtP,EAAO7D,OAEjB,GADA6D,EAAOkE,KAAK2tnB,EAAKh2nB,IACZ6D,KAAKyqqB,cAAchqmB,EAAK0xjB,EAAKh2nB,GAAG4hE,QAASz9D,GAI1C,OAAO,EAHPA,EAAO+nB,OAAOzY,EAAKtP,EAAO7D,OAASmT,IAO/C,OAAO,GAEXm6pB,EAAQ1uqB,UAAUqvqB,gBAAkB,SAAUv4C,GAG1C,IAAK,IAFDw6B,KACAge,KACKxuqB,EAAI,EAAG0F,EAAMswnB,EAAK11nB,OAAQN,EAAI0F,EAAK1F,IACxCwwpB,EAAYnopB,KAAK2tnB,EAAKh2nB,IAClBg2nB,EAAKh2nB,GAAG4hE,UACR4smB,EAAUA,EAAQpwpB,OAAO43mB,EAAKh2nB,GAAG4hE,UAMzC,OAHI4smB,EAAQluqB,SACRkwpB,EAAcA,EAAYpyoB,OAAOva,KAAK0qqB,gBAAgBC,KAEnDhe,GAEXod,EAAQ1uqB,UAAU0wnB,WAAa,SAAUlrnB,GACrC,IAAImznB,EAAOh0nB,KAAKM,OAEZsqqB,GADc5qqB,KAAKgB,QAAQ2B,cAAc,qBAAuB3C,KAAKgB,QAAQ2B,cAAc,4BACzEkQ,aAAa,gBAC/BgqD,EAASm3jB,EAAK8N,eAAe8oC,GACjC,GAAKP,EAAexpqB,EAAEsG,OAAQ,QAAW1J,EAAkBo/D,KAAsC,IAA3BA,EAAOkqjB,iBAA7E,CAGA,IAAIqjD,EAAWC,EAAexpqB,EAAEsG,OAAQ,iBAEpC0jqB,GADcT,EAASznqB,cAAc,qBAAuBynqB,EAASznqB,cAAc,4BACzDkQ,aAAa,gBACvCi4pB,EAAa92C,EAAK8N,eAAe+oC,GACrC,IAAIptqB,EAAkBqtqB,KAA8C,IAA/BA,EAAW/jD,iBAG5CqjD,GAAepqqB,KAAKkqqB,gBAAgBlqqB,KAAKgB,QAASopqB,IAAcpqqB,KAAKuqqB,eAAevqqB,KAAKgB,QAASopqB,GAClG,GAAIpqqB,KAAKM,OAAOw2nB,2BAA4B,CACxC,IAAI/4jB,EAAU/9D,KAAKM,OAAOy9D,QACtBgtmB,EAAc/qqB,KAAKgB,QAAQ2B,cAAc,oBAAoBkQ,aAAa,gBAE1Em4pB,EAAkB,KAClBv1C,EAFMz1nB,KAAKM,OAAO00nB,YAAW,GAAMhulB,OAAO,SAAUy5B,GAAO,OAAOA,EAAI/gE,MAAQqrqB,IAE/D,GACfE,EAAYb,EAASznqB,cAAc,oBAAoBkQ,aAAa,gBAC7DkrD,EAAQ3hC,KAAK,SAAUqkC,EAAKxuD,GACnC,OAAIwuD,EAAI/gE,MAAQurqB,IACZD,EAAkB/4pB,EACXwuD,EAAI/gE,MAAQurqB,KAItBxtqB,EAAkButqB,IACnBhrqB,KAAKkrqB,YAAYF,EAAiBv1C,OAGrC,CACD,IAAI5wiB,EAAU7kF,KAAKyjoB,iBACf0nC,EAASlsmB,GAAgBj/D,KAAKgB,QAAS6jF,GAEvCumlB,GADArtmB,EAAU/9D,KAAK0qqB,gBAAgB1qqB,KAAKM,OAAOy9D,UACxBotmB,GACnBprU,EAAW//V,KAAKsqqB,2BAA2BtqqB,KAAKgB,QAASopqB,GAC7DpqqB,KAAKkrqB,YAAYnrU,EAAUqrU,MAIvCrB,EAAQ1uqB,UAAU0lE,gBAAkB,SAAUizjB,GAC1C,OAAOjzjB,GAAgBizjB,IAE3B+1C,EAAQ1uqB,UAAU6vqB,YAAc,SAAUG,EAAWxumB,GACjD,IAAIm3jB,EAAOh0nB,KAAKM,OAChB,GAAIN,KAAK+gE,gBAAgBizjB,GACrBA,EAAKjmnB,OAAOywoB,IAAuBj4oB,SAAUvG,KAAMvE,QAASuE,KAAKkrqB,YAAahwb,KAAMmwb,EAAWlwb,KAAMt+K,QADzG,CAIA,IAAIv8D,EAASN,KAAKsrqB,aAAazumB,EAAQ78D,KAAKM,OAAOy9D,SAC/Co0jB,EAAO7xnB,EAASA,EAAOy9D,QAAU/9D,KAAKM,OAAOy9D,QAC7CwtmB,EAASrsmB,GAAQrC,EAAQs1jB,GACxB6B,EAAKjN,iBAAmBwkD,IAAWF,IAAyB,IAAZE,IAAgC,IAAfF,IAGtEl5C,EAAK9pmB,OAAOgjpB,EAAW,EAAGl5C,EAAK9pmB,OAAOkjpB,EAAQ,GAAG,IACjDv3C,EAAKgB,YAAW,GAChBhB,EAAKjmnB,OAAOq0nB,IAAgCopC,UAAWH,EAAWl1C,QAASo1C,IAC3Ev3C,EAAKjmnB,OAAO29nB,IACRhloB,KAAMipnB,GAAoBvjc,YAAa,eAG/C29e,EAAQ1uqB,UAAUivqB,2BAA6B,SAAUH,EAASC,GAC9D,IAAIvllB,EAAU7kF,KAAKyjoB,iBACftR,EAAOnynB,KAAKM,OAAOy9D,QACnB0tmB,EAAczrqB,KAAK0qqB,gBAAgBv4C,GACnC7xnB,EAASN,KAAKsrqB,aAAaG,EAAYxsmB,GAAgBkrmB,EAAStllB,IAAWstiB,GAE/E,OADAA,EAAO7xnB,EAASA,EAAOy9D,QAAUo0jB,EAC1BjzjB,GAAQusmB,EAAYxsmB,GAAgBmrmB,EAAUvllB,IAAWstiB,IAEpE43C,EAAQ1uqB,UAAUoooB,eAAiB,WAC/B,GAAIzjoB,KAAKM,OAAO28nB,mBAAoB,CAOhC,IAAK,IANDyuC,OAAM,EACNC,OAAM,EACNC,KACAlrC,KAAWr/nB,MAAMC,KAAKtB,KAAKM,OAAOu/nB,iBAAiBr+nB,iBAAiB,oBACpEm/nB,KAAWt/nB,MAAMC,KAAKtB,KAAKM,OAAOq+nB,mBACjCh8nB,cAAc,oBAAoBnB,iBAAiB,oBAC/CrF,EAAI,EAAGA,EAAIukoB,EAAMjkoB,OAAQN,IAAK,CACnCuvqB,KAASrqqB,MAAMC,KAAKo/nB,EAAMvkoB,GAAGuR,uBAAuB,iBACpDi+pB,KAAStqqB,MAAMC,KAAKq/nB,EAAMxkoB,GAAGuR,uBAAuB,iBACpDk+pB,EAAWA,EAASrxpB,OAAOmxpB,GAC3B,IAAK,IAAInopB,EAAI,EAAGA,EAAIoopB,EAAIlvqB,OAAQ8mB,IACvBmopB,EAAIjvqB,QAAgB,IAAN8mB,GAAWmopB,EAAIA,EAAIjvqB,OAAS,GAAGw+D,YAAc0wmB,EAAI,GAAG1wmB,WACnE2wmB,EAASpnqB,KAAKmnqB,EAAIpopB,IAI9B,OAAOqopB,EAGP,SAAUvqqB,MAAMC,KAAKtB,KAAKM,OAAOU,QAAQ0M,uBAAuB,kBAGxEq8pB,EAAQ1uqB,UAAUiwqB,aAAe,SAAUzumB,EAAQkB,GAC/C,IAAIuB,KAEJ,OADAt/D,KAAKyqqB,cAAc5tmB,EAAQkB,EAASuB,GAC7BA,EAAQA,EAAQ7iE,OAAS,IAQpCstqB,EAAQ1uqB,UAAU21pB,eAAiB,SAAUC,EAAWC,GACpD,IAAI2a,EAAU7rqB,KAAKM,OAAOo0nB,iBAAiBu8B,GACvC1xC,EAAWv/mB,KAAKM,OAAOo0nB,iBAAiBw8B,GAC5C,IAAMzzpB,EAAkBouqB,IAAaA,EAAQ9kD,mBAAsBtpnB,EAAkB8hnB,IAAcA,EAASwH,iBAA5G,CAGA,IAAIlqjB,EAAS78D,KAAKM,OAAOo0nB,iBAAiBw8B,GACtC5wpB,EAASN,KAAKsrqB,aAAazumB,EAAQ78D,KAAKM,OAAOy9D,SAE/CstmB,EAAYnsmB,GAAQrC,EADVv8D,EAASA,EAAOy9D,QAAU/9D,KAAKM,OAAOy9D,SAEhDstmB,GAAa,GACbrrqB,KAAKkrqB,YAAYG,EAAWrrqB,KAAKM,OAAOo0nB,iBAAiBu8B,MAGjE8Y,EAAQ1uqB,UAAUyioB,kBAAoB,SAAUj9nB,GACxCA,EAAEswF,SAAWnxF,KAAKu/B,iBAAmB1+B,EAAE4+B,QACvCz/B,KAAKiqqB,wBAGbF,EAAQ1uqB,UAAU4uqB,qBAAuB,WACrC,IAAIrllB,EAAS5kF,KAAKM,OAAOU,QAAQ2B,cAAc,oBAC/C3C,KAAK+xoB,QAAUntjB,EAAOjjF,YAAYR,EAAc,OAASkC,UAAW,iDAAkDI,OAASiB,MAAO,mBACtI1E,KAAKgyoB,UAAYptjB,EAAOjjF,YAAYR,EAAc,OAASkC,UAAW,qDAAsDI,OAASiB,MAAO,oBAOhJqlqB,EAAQ1uqB,UAAUw1d,iBAAmB,SAAUhwd,GAC3Cb,KAAKM,OAAOkmB,QAAQ+rmB,GAAuB7znB,EAAOmC,GAAK6F,KAAM6rnB,OAOjEw3C,EAAQ1uqB,UAAUiX,QAAU,WACpBtS,KAAKM,OAAO0mF,cAGhBziF,EAAOvE,KAAK+xoB,SACZxtoB,EAAOvE,KAAKgyoB,WACZhyoB,KAAKM,OAAO0lF,IAAIk8iB,GAAmBlioB,KAAK+rnB,YACxC/rnB,KAAKM,OAAO0lF,IAAI63iB,GAAiB79nB,KAAK89nB,mBACtC99nB,KAAKM,OAAO0lF,IAAIgklB,GAAwBhqqB,KAAK6wd,kBAC7C7wd,KAAKM,OAAO0lF,IAAIg8iB,GAAmBhioB,KAAK0wG,MACxC1wG,KAAKM,OAAO0lF,IAAI+7iB,GAAwB/hoB,KAAKyvG,WAC7CzvG,KAAKM,OAAO0lF,IAAIi8iB,GAAuBjioB,KAAK+xG,UAC5C/xG,KAAKM,OAAO0lF,IAAI08iB,GAAwB1ioB,KAAKiqqB,wBAGjDF,EAAQ1uqB,UAAUq1G,KAAO,SAAU7vG,GAC/B,IAAImznB,EAAOh0nB,KAAKM,OACZ6G,EAAStG,EAAEsG,OACf,IAAiC,IAA7BtG,EAAEg8D,OAAOkqjB,gBAAb,CAGA,IAAIlhnB,EAAUwkqB,EAAeljqB,EAAQ,2CACjC+wH,EAAe87f,EAAKhznB,QAAQ2B,cAAc,sBAC1CkhS,EAAS7jS,KAAK+M,EAAI8xD,GAAYh+D,EAAEvE,OAAOyQ,EAAIinnB,EAAKv/kB,aAAatvC,kBAAkB6G,WACnF3H,EAAY2vnB,EAAK6L,iBAAiBr+nB,iBAAiB,uBAAwB,sBAC3ExB,KAAK8rqB,WAAW,QAChB9rqB,KAAKi8B,YACLn4B,EAAUo0H,GAAe,iBAAkB,oBAC3Cl4H,KAAK+rqB,oBAAoBlrqB,EAAEvE,OACvBuJ,IAAYA,EAAQwU,YAAYra,KAAKgB,WACrCmG,EAAStB,EAEF7F,KAAKkqqB,gBAAgBlqqB,KAAKgB,QAASmG,IAAYnH,KAAKuqqB,eAAevqqB,KAAKgB,QAASmG,IACpFnH,KAAKgsqB,oBAAoB7kqB,EAAQ08R,GACjC//R,EAAUqD,GAAS,cAAe,0BAE3B6snB,EAAKlN,eAAiBjzkB,GAAahzC,EAAEsG,OAAQ,oBACpDrD,EAAUo0H,GAAe,oBAAqB,kBAGtD87f,EAAKxtmB,QAAQw7mB,IAAqB76nB,OAAQA,EAAQ8kqB,cAAe,aAAcpvmB,OAAQh8D,EAAEg8D,WAE7FktmB,EAAQ1uqB,UAAU0wqB,oBAAsB,SAAUlrqB,GAC9C,IAAId,EAAQC,KACRilE,EAAUjlE,KAAKM,OAAO28nB,mBACtBlwnB,EAAI8xD,GAAYh+D,GAAGkM,EACnBm/pB,EAAUlsqB,KAAKM,OAAOU,QAAQ4K,wBAC9BugqB,EAAkBlnmB,EAAUjlE,KAAKM,OAAOU,QAAQ2B,cAAc,oBAC7DiJ,wBAAwBY,KAAO0/pB,EAAQ1/pB,KACxC4/pB,EAAmBF,EAAQz/pB,MAC3B4/pB,EAAapnmB,EAAUjlE,KAAKM,OAAOm0C,aAAa9xC,cAAc,qBAC5D3C,KAAKM,OAAOm0C,aAAatvC,kBAC3B4H,EAAIo/pB,GAAmBp/pB,EAAIo/pB,EAAkB,GAC7CnsqB,KAAK+qB,MAAQlvB,OAAOuG,YAAY,WAAcrC,EAAMusqB,cAAcD,GAAY,IAAU,IAEnFt/pB,EAAIq/pB,GAAoBr/pB,EAAIq/pB,EAAmB,KACpDpsqB,KAAK+qB,MAAQlvB,OAAOuG,YAAY,WAAcrC,EAAMusqB,cAAcD,GAAY,IAAW,MAGjGtC,EAAQ1uqB,UAAUixqB,cAAgB,SAAUD,EAAYxoY,GACpD,IAAI73R,EAAaqgqB,EAAWrgqB,WAC5BqgqB,EAAWrgqB,WAAaqgqB,EAAWrgqB,YAAc63R,GAAU,EAAI,GAC3D73R,IAAeqgqB,EAAWrgqB,YAC1BhM,KAAK8rqB,WAAW,SAGxB/B,EAAQ1uqB,UAAU4gC,UAAY,WAC1BpgC,OAAOyG,cAActC,KAAK+qB,QAE9Bg/oB,EAAQ1uqB,UAAU2wqB,oBAAsB,SAAU7kqB,EAAQ08R,GACtD,IAAIqoY,EAAU/kqB,EAAOyE,wBACjB2gqB,EAAcvsqB,KAAKM,OAAOU,QAAQ4K,wBACjCi4R,GAAUqoY,EAAQ1/pB,KAAO+/pB,EAAY//pB,OAAWq3R,GAAUqoY,EAAQz/pB,MAAQ8/pB,EAAY9/pB,QAG3FzM,KAAK+xoB,QAAQrtoB,MAAMgI,IAAMw/pB,EAAQx/pB,IAAMw/pB,EAAQn2pB,OAASw2pB,EAAY7/pB,IAAM,KAC1E1M,KAAKgyoB,UAAUttoB,MAAMgI,IAAMw/pB,EAAQx/pB,IAAM6/pB,EAAY7/pB,IAAM,EAAI,KAC/D1M,KAAK+xoB,QAAQrtoB,MAAM8H,KAAOxM,KAAKgyoB,UAAUttoB,MAAM8H,MAAQq3R,EAASqoY,EAAQ1/pB,KAAO0/pB,EAAQz/pB,OAAS8/pB,EAAY//pB,KAAO,EAAI,KACvHxM,KAAK8rqB,WAAW,MAEpB/B,EAAQ1uqB,UAAUo0G,UAAY,SAAU5uG,GACpC,IAAImznB,EAAOh0nB,KAAKM,OACZ6G,EAAStG,EAAEsG,OACfnH,KAAKgB,QAAUmG,EAAOrD,UAAUK,SAAS,gBAAkBgD,EACvD0sC,GAAa1sC,EAAQ,iBACQ,IAA7BtG,EAAEg8D,OAAOkqjB,kBAGb/mnB,KAAK+M,EAAI8xD,GAAYh+D,EAAEvE,OAAOyQ,EAAIinnB,EAAKv/kB,aAAatvC,kBAAkB6G,WACtEgonB,EAAKxtmB,QAAQu7mB,IACT56nB,OAAQA,EAAQ8kqB,cAAe,aAAcpvmB,OAAQh8D,EAAEg8D,WAG/DktmB,EAAQ1uqB,UAAU02G,SAAW,SAAUlxG,GACnC,IAAImznB,EAAOh0nB,KAAKM,OAChBN,KAAK8rqB,WAAW,QAChB9rqB,KAAKi8B,YACAp7B,EAAEg4B,QACHm7lB,EAAKxtmB,QAAQo2mB,IAAqBz1nB,OAAQtG,EAAEsG,OAAQ8kqB,cAAe,aAAcpvmB,OAAQh8D,EAAEg8D,SAE/Fx4D,EAAY2vnB,EAAK6L,iBAAiBr+nB,iBAAiB,uBAAwB,uBAE/EuoqB,EAAQ1uqB,UAAUywqB,WAAa,SAAUx1nB,GACrCt2C,KAAK+xoB,QAAQrtoB,MAAM4xC,QAAUA,EAC7Bt2C,KAAKgyoB,UAAUttoB,MAAM4xC,QAAUA,GAMnCyznB,EAAQ1uqB,UAAUkkC,cAAgB,WAC9B,MAAO,WAEJwqoB,KCrUPyC,GAAuB,WAKvB,SAASA,EAAMlsqB,GACX,IAAIP,EAAQC,KAEZA,KAAKmhpB,gBACLnhpB,KAAKkP,OAAS,SAAUrO,GACpB,IAAImznB,EAAOj0nB,EAAMO,OACjB,GAAIE,SAASkN,uBAAuB,kBAAkBjR,SAChDoE,EAAE8xG,OAAOxrG,OAAOrD,UAAUK,SAAS,0BAA4D,WAAhC6vnB,EAAKwK,kBAAkB93nB,KACxF,OAAO,EAEX,IAAIi7nB,EAAgBxgoB,EAAc,OAC9BkC,UAAW,qDACXE,OAAQ,mCAAqCywnB,EAAKhznB,QAAQ4D,cAE1Dq7D,EAAQ9+D,EAAc,SAAWoC,OAAQ,SAAWywnB,EAAKhznB,QAAQ4D,cACjE66nB,EAAQt+nB,EAAc,SAC1B,GAAoC,QAAhC6ynB,EAAKwK,kBAAkBzgmB,MAAkD,WAAhCi2lB,EAAKwK,kBAAkB93nB,KAAmB,CACnF,IAAIuL,EAAQ8iB,SAASl0B,EAAE8xG,OAAOxrG,OAAOkN,cAAcxB,aAAa,iBAAkB,IAClFmhnB,EAAKvxF,UAAUxwhB,GAGnB,IAAK,IADDkvoB,EAAentB,EAAK+6B,kBACf5ypB,EAAI,EAAG0F,EAAMs/oB,EAAa1kpB,OAAQN,EAAI0F,EAAK1F,IAAK,CACrD,IAAI4ojB,EAAco8F,EAAahlpB,GAAGyF,WAAU,GAC5C4rB,GAAcu3hB,EAAa,iBAC3Bv3hB,GAAcu3hB,EAAa,wBAC3Bv3hB,GAAcu3hB,EAAa,sBAC3B06E,EAAM99nB,YAAYojjB,GAKtB,OAHA9kf,EAAMt+D,YAAY89nB,GAClBkC,EAAchgoB,YAAYs+D,GAC1B+zjB,EAAKhznB,QAAQW,YAAYggoB,GAClBA,GAEX3hoB,KAAKyvG,UAAY,SAAU5uG,GACvB,IAAImznB,EAAOj0nB,EAAMO,OACjB,IAAIE,SAASkN,uBAAuB,kBAAkBjR,OAAtD,CAGAu3nB,EAAKxtmB,QAAQimpB,IACTl0Y,KAAMy7V,EAAK+6B,kBACX5npB,OAAQtG,EAAEsG,OAAQ8kqB,cAAe,OAAQzvqB,KAAMw3nB,EAAKiqB,uBAExD,IAAIyuB,EAAWlsqB,SAASosB,eAAeonmB,EAAK24C,gBAAgB3hR,UACxDgpO,EAAK24C,gBAAgB3hR,UAAY0hR,GAAYA,EAAShllB,eACtDgllB,EAAShllB,cAAc,GAAGjzC,aAAa3wC,UAAUM,IAAI,kBAEzDrE,EAAM6sqB,YAAa,IAEvB5sqB,KAAK0wG,KAAO,SAAU7vG,GAClB,IAAImznB,EAAOj0nB,EAAMO,OACb43H,EAAen4H,EAAMO,OAAOU,QAAQ2B,cAAc,sBAClDwE,EAASpH,EAAM8sqB,uBAAuB30iB,EAAcr3H,EAAEvE,OAC1DwH,EAAUo0H,GAAe,iBAAkB,oBAC3C87f,EAAKxtmB,QAAQsmpB,IACTv0Y,KAAMy7V,EAAK+6B,kBACX5npB,OAAQA,EAAQ8kqB,cAAe,OAAQzvqB,KAAMw3nB,EAAKiqB,uBAEtDjqB,EAAKhznB,QAAQ8C,UAAUM,IAAI,aACtByvC,GAAa1sC,EAAQ,kBACtB0sC,GAAaqkF,EAAa7jH,cAAe,UAAU/Q,KAAOuwC,GAAa1sC,EAAQ,UAAU7D,IACzFQ,EAAUo0H,GAAe,oBAAqB,kBAGtDl4H,KAAK+xG,SAAW,SAAUlxG,GACtB,IAAImznB,EAAOj0nB,EAAMO,OACjB,IAAIP,EAAMO,OAAO0mF,YAAjB,CAGA,IAAI7/E,EAASpH,EAAM8sqB,uBAAuBhsqB,EAAEqO,OAAQrO,EAAEvE,OACtD03nB,EAAKhznB,QAAQ8C,UAAUS,OAAO,aAC9B,IAAImoqB,EAAWlsqB,SAASosB,eAAeonmB,EAAK24C,gBAAgB3hR,UACxDgpO,EAAK24C,gBAAgB3hR,UAAY0hR,GAAYA,EAAShllB,eACtDgllB,EAAShllB,cAAc,GAAGjzC,aAAa3wC,UAAUS,OAAO,kBAE5DyvnB,EAAKxtmB,QAAQumpB,IACT5lqB,OAAQA,EAAQ8kqB,cAAe,OAC/B1zY,KAAMy7V,EAAK+6B,kBAAmBvypB,KAAMw3nB,EAAKiqB,uBAExCpqmB,GAAa1sC,EAAQ,kBACtB5C,EAAO1D,EAAEqO,UAIjBlP,KAAKM,OAASA,EACVN,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAOslF,GAAGm1jB,GAAmB/6oB,KAAK8zT,eAAgB9zT,MACvDA,KAAKM,OAAOslF,GAAGg3iB,GAAmB58nB,KAAKupnB,WAAYvpnB,MACnDA,KAAKM,OAAOslF,GAAGonlB,GAA+BhtqB,KAAK6wd,iBAAkB7wd,MACrEA,KAAKM,OAAOslF,GAAGi4iB,GAAiB79nB,KAAK89nB,kBAAmB99nB,OAuG5D,OArGAwsqB,EAAMnxqB,UAAUy4T,eAAiB,WAC7B,IAAIkgU,EAAOh0nB,KAAKM,OAGT,IAAIotG,GAAUsmhB,EAAKv/kB,cACtBy6D,WAAY,aACZ70D,SAAU,EACVnrC,OAAQlP,KAAKkP,OACbugG,UAAWzvG,KAAKyvG,UAChBiB,KAAM1wG,KAAK0wG,KACXqB,SAAU/xG,KAAK+xG,YAGvBy6jB,EAAMnxqB,UAAUwxqB,uBAAyB,SAAU7rqB,EAAS1E,GACxD,IAAI6K,EACA+M,EAAW2qD,GAAYviE,GAI3B,OAHA0E,EAAQ0D,MAAM4xC,QAAU,OACxBnvC,EAAS3G,SAASiyG,iBAAiBv+F,EAASnH,EAAGmH,EAASlH,GACxDhM,EAAQ0D,MAAM4xC,QAAU,GACjBnvC,GAOXqlqB,EAAMnxqB,UAAUw1d,iBAAmB,SAAUhwd,GACzCb,KAAKM,OAAOkmB,QAAQ+rmB,GAAuB7znB,EAAOmC,GAAK6F,KAAM6rnB,OAEjEi6C,EAAMnxqB,UAAU4xqB,aAAe,SAAUC,GACrC,OAAOA,EAAYn4oB,SAASm4oB,EAAUr6pB,aAAa,iBAAkB,IAAM,GAE/E25pB,EAAMnxqB,UAAUkunB,WAAa,SAAU1onB,GACnC,IAAImznB,EAAOh0nB,KAAKM,OAChB,GAAgD,aAA5CO,EAAE8yG,eAAe9gG,aAAa,UAA0B,CACxD,IAAIq6pB,EAAY7C,EAAexpqB,EAAEsG,OAAQ,MACrCgmqB,OAAa,EAEjB,GAAItsqB,EAAE8yG,eAAet/F,cAAc/Q,KAAO0wnB,EAAKhznB,QAAQsC,GAInD,OAEJ,IALI6pqB,EAAatsqB,EAAE8yG,eAAet/F,cAAcqzE,cAAc,IAK/C1mF,QAAQsC,KAAO0wnB,EAAKhznB,QAAQsC,IAAM6pqB,EAAWR,gBAAgB3hR,WAAagpO,EAAKhznB,QAAQsC,GAClG,OAEJ,IAAIovJ,EAAUy6gB,EAAWlvB,qBACrBmvB,EAA6BptqB,KAAKitqB,aAAaC,GAE/ClrnB,MAAMornB,KACNA,EAA6B,GAE7Bp5C,EAAKQ,cACL44C,EAAcA,EAAep5C,EAAKzikB,aAAa+hM,YAAc0gY,EAAKzikB,aAAa4+F,SAAY6je,EAAKzikB,aAAa4+F,UAGjH6je,EAAKjmnB,OAAOwlnB,IAAoB4C,QAASi3C,EAAa16gB,QAASA,IAC/Dshe,EAAKjmnB,OAAO29nB,IACRhloB,KAAMipnB,GAAoBvjc,YAAa,mBAE3C,IAAI+0d,EAAegsB,EAAW70C,wBAC1Bhoe,EAAO68gB,EAAW34C,YACjB24C,EAAW57mB,aAAa+hM,YAAc65a,EAAW57mB,aAAa4+F,SAAYg9gB,EAAW57mB,aAAa4+F,SAAW,EAClHnwJ,KAAKmhpB,gBACL,IAAK,IAAIhlpB,EAAI,EAAG0F,EAAM6wJ,EAAQj2J,OAAQN,EAAI0F,EAAK1F,IAC3C6D,KAAKmhpB,aAAa38oB,KAAK8rJ,EAAO6wf,EAAahlpB,IAE/CgxqB,EAAWp/pB,OAAO0lnB,IAAsB1mR,QAAS/sW,KAAKmhpB,aAAczuf,QAASA,IAC7Ey6gB,EAAWp/pB,OAAO29nB,IACdhloB,KAAMipnB,GAAoBvjc,YAAa,qBAInDogf,EAAMnxqB,UAAUyioB,kBAAoB,SAAUj9nB,GACtCA,EAAEswF,SAAWnxF,KAAKu/B,iBAAmB1+B,EAAE4+B,QACvCz/B,KAAK8zT,kBAQb04W,EAAMnxqB,UAAUiX,QAAU,WAClBtS,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAO0lF,IAAI+0jB,GAAmB/6oB,KAAK8zT,gBACxC9zT,KAAKM,OAAO0lF,IAAI42iB,GAAmB58nB,KAAKupnB,YACxCvpnB,KAAKM,OAAO0lF,IAAIgnlB,GAA+BhtqB,KAAK6wd,kBACpD7wd,KAAKM,OAAO0lF,IAAI63iB,GAAiB79nB,KAAK89nB,qBAO1C0uC,EAAMnxqB,UAAUkkC,cAAgB,WAC5B,MAAO,kBAEJitoB,KCtMPngQ,GAAuB,WAKvB,SAASA,EAAM/ra,EAAQm0nB,EAAerme,EAAe9sF,GACjD,IAAIvhE,EAAQC,KACZA,KAAKqtqB,gBAAiB,EACtBrtqB,KAAKstqB,kBAAmB,EACxBttqB,KAAK2hoB,cAAgBxgoB,EAAc,OAC/BkC,UAAW,0CACXE,OAAQ,mBAAoBE,OAAS0yD,OAAQ,cAEjDn2D,KAAKkP,OAAS,SAAUrO,GACpB,IAAImznB,EAAOj0nB,EAAMO,OACb6G,EAAStG,EAAE8xG,OAAOxrG,OAClBnG,EAAUmG,EAAOrD,UAAUK,SAAS,qBAAuBgD,EAC3D0sC,GAAa1sC,EAAQ,qBACzB,QAAKnG,IAGLjB,EAAM88D,OAASm3jB,EAAKU,iBAAiB1znB,EAAQmE,kBAAkB0N,aAAa,mBAC5E9S,EAAM4hoB,cAAc9lnB,YAAc7a,EAAQ6a,YAC1C9b,EAAM4hoB,cAAcj9nB,MAAMsR,MAAQhV,EAAQ4D,YAAc,EAAI,KAC5D7E,EAAM4hoB,cAAcj9nB,MAAMqR,OAAS/U,EAAQ0wC,aAAe,EAAI,KAC9D3xC,EAAM4hoB,cAAcn+nB,aAAa,eAAgBzD,EAAM88D,OAAOn9D,KAC9Ds0nB,EAAKhznB,QAAQW,YAAY5B,EAAM4hoB,eACxB5hoB,EAAM4hoB,gBAEjB3hoB,KAAKyvG,UAAY,WACb1vG,EAAMO,OAAOU,QAAQ8C,UAAUM,IAAI,kBAEvCpE,KAAK0wG,KAAO,SAAU7vG,GAClB,IAAIsG,EAAStG,EAAEsG,OACX+wH,EAAen4H,EAAMO,OAAOU,QAAQ2B,cAAc,sBACtD5C,EAAMO,OAAOkmB,QAAQw7mB,IAAqB76nB,OAAQA,EAAQ8kqB,cAAe,aAAcpvmB,OAAQ98D,EAAM88D,SACrG/4D,EAAUo0H,GAAe,iBAAkB,oBACrCrkF,GAAa1sC,EAAQ,kBAAoB0sC,GAAa1sC,EAAQ,iBAChErD,EAAUo0H,GAAe,oBAAqB,kBAGtDl4H,KAAK+xG,SAAW,SAAUlxG,GACtBd,EAAMO,OAAOU,QAAQ8C,UAAUS,OAAO,iBAChCsvC,GAAahzC,EAAEsG,OAAQ,kBAAoB0sC,GAAahzC,EAAEsG,OAAQ,iBACpE5C,EAAO1D,EAAEqO,SAIjBlP,KAAKizG,KAAO,SAAUpyG,GAClB,IAAImznB,EAAOj0nB,EAAMO,OACbu8D,EAASm3jB,EAAK8N,eAAejhoB,EAAE8yG,eAAe9gG,aAAa,iBAC/D9S,EAAMiB,QAAQ8C,UAAUS,OAAO,WAC/BA,EAAO1D,EAAE8yG,gBACT5zG,EAAMg1pB,KAAK9tB,cAAclnoB,EAAMO,OAAOU,QAAQ2B,cAAc,qBAAqB,GACjF5C,EAAMg1pB,KAAKjuB,WAAW/moB,EAAMO,OAAOu/nB,iBAAiBl9nB,cAAc,wBAAwB,GACtFlF,EAAkBo/D,KAAoC,IAAzBA,EAAOiqjB,eACpCjzkB,GAAamglB,EAAK06B,qBAAqB7xlB,EAAOn9D,KAAM,UAAUmT,aAAa,QACvEmhnB,EAAKhznB,QAAQ6R,aAAa,OAGlC9S,EAAMw0pB,YAAY13lB,EAAO9wC,QAE7B/rB,KAAK60pB,gBAAiB,EACtB70pB,KAAK+0pB,KAAO,IAAItuB,GAChBzmoB,KAAKM,OAASA,EACdN,KAAKy0nB,cAAgBA,EACrBz0nB,KAAKshE,eAAiBA,EACtBthE,KAAKouJ,cAAgBA,EACrBpuJ,KAAKkC,MAAQo/D,EAAeE,WAAW,SACvCxhE,KAAKtD,mBAgqBT,OA9pBA2va,EAAMhxa,UAAUiunB,WAAa,SAAUzonB,GACxBb,KAAKM,OAAhB,IACI43H,EAAel4H,KAAKM,OAAOU,QAAQ2B,cAAc,sBACrDmB,EAAUo0H,GAAe,iBAAkB,oBACtCrkF,GAAahzC,EAAEsG,OAAQ,oBACtBnH,KAAKM,OAAOymnB,iBAAmBlzkB,GAAahzC,EAAEsG,OAAQ,iBACxDrD,EAAUo0H,GAAe,oBAAqB,iBAElDr3H,EAAEsG,OAAOrD,UAAUK,SAAS,mBAAqBnE,KAAKgB,QAAQ8C,UAAUM,IAAI,WAAapE,KAAKgB,QAAQ8C,UAAUS,OAAO,YAE3H8na,EAAMhxa,UAAUgunB,gBAAkB,SAAUxonB,GACxC,IAAIA,EAAEsG,OAAOrD,UAAUK,SAAS,uBAAhC,CAGWnE,KAAKM,OAAhB,IACI84I,EAAWp5I,KAAKM,OAAOU,QAAQ2B,cAAc,oBACjD3C,KAAK+0pB,KAAK9tB,cAAc7tf,EAAUv4I,EAAEg8D,OAAOiqjB,eAC3C,IAAI9lnB,EAAUH,EAAEsG,OAAOrD,UAAUK,SAAS,gBAAkBtD,EAAEsG,OAAS0sC,GAAahzC,EAAEsG,OAAQ,gBAC9FnH,KAAK+0pB,KAAKjuB,WAAW9loB,GAAS,GAAOH,EAAEg8D,OAAOiqjB,iBAElDz6M,EAAMhxa,UAAUkunB,WAAa,SAAU1onB,GACnC,IAAImznB,EAAOh0nB,KAAKM,OAChB,GAAgD,aAA5CO,EAAE8yG,eAAe9gG,aAAa,UAA0B,CACxD,IAAIgqD,EAASm3jB,EAAK8N,eAAejhoB,EAAE8yG,eAAe9gG,aAAa,iBAC/D,GAAIpV,EAAkBo/D,KAAoC,IAAzBA,EAAOiqjB,eACpCjzkB,GAAamglB,EAAK06B,qBAAqB7xlB,EAAOn9D,KAAM,UAAUmT,aAAa,QACvEmhnB,EAAKhznB,QAAQ6R,aAAa,MAC9B,OAEJ7S,KAAKy0pB,cAAc53lB,EAAO9wC,SAMlCsgZ,EAAMhxa,UAAUqB,iBAAmB,WAC3BsD,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAOslF,GAAGi4iB,GAAiB79nB,KAAK89nB,kBAAmB99nB,MACxDA,KAAKM,OAAOslF,GAAG2nlB,GAAsBvtqB,KAAK6wd,iBAAkB7wd,MAC5DA,KAAKM,OAAOslF,GAAG4nlB,GAAwBxtqB,KAAK6wd,iBAAkB7wd,MAC9DA,KAAKM,OAAOslF,GAAGq1jB,GAA4Bj7oB,KAAKwnF,kBAAmBxnF,MACnEA,KAAKM,OAAOslF,GAAG04jB,GAAct+oB,KAAKm/G,aAAcn/G,MAChDA,KAAKM,OAAOslF,GAAGo8iB,GAAmBhioB,KAAKspnB,WAAYtpnB,MACnDA,KAAKM,OAAOslF,GAAGm8iB,GAAwB/hoB,KAAKqpnB,gBAAiBrpnB,MAC7DA,KAAKM,OAAOslF,GAAGg3iB,GAAmB58nB,KAAKupnB,WAAYvpnB,MACnDA,KAAKM,OAAOslF,GAAG88iB,GAAwB1ioB,KAAK41pB,iBAAkB51pB,MAC9DA,KAAKM,OAAOslF,GAAG+vkB,GAAqB31pB,KAAK41pB,iBAAkB51pB,MAC3DA,KAAKM,OAAOslF,GAAGo8jB,GAAmBhipB,KAAKq2G,gBAAiBr2G,MACxDA,KAAKM,OAAOslF,GAAGu3iB,GAAqBn9nB,KAAKsqnB,WAAYtqnB,MACrDA,KAAKM,OAAOslF,GAAG0kjB,GAAgBtqoB,KAAKsqnB,WAAYtqnB,MAChDA,KAAKM,OAAOslF,GAAGm1jB,GAAmB/6oB,KAAK+rG,OAAQ/rG,QAKnDqsa,EAAMhxa,UAAUuB,oBAAsB,WAC9BoD,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAO0lF,IAAI+0jB,GAAmB/6oB,KAAK+rG,QACxC/rG,KAAKM,OAAO0lF,IAAI63iB,GAAiB79nB,KAAK89nB,mBACtC99nB,KAAKM,OAAO0lF,IAAIunlB,GAAsBvtqB,KAAK6wd,kBAC3C7wd,KAAKM,OAAO0lF,IAAIwnlB,GAAwBxtqB,KAAK6wd,kBAC7C7wd,KAAKM,OAAO0lF,IAAIi1jB,GAA4Bj7oB,KAAKwnF,mBACjDxnF,KAAKM,OAAO0lF,IAAIs4jB,GAAct+oB,KAAKm/G,cACnCn/G,KAAKM,OAAO0lF,IAAIg8iB,GAAmBhioB,KAAKspnB,YACxCtpnB,KAAKM,OAAO0lF,IAAI+7iB,GAAwB/hoB,KAAKqpnB,iBAC7CrpnB,KAAKM,OAAO0lF,IAAI42iB,GAAmB58nB,KAAKupnB,YACxCvpnB,KAAKM,OAAO0lF,IAAI08iB,GAAwB1ioB,KAAK41pB,kBAC7C51pB,KAAKM,OAAO0lF,IAAI2vkB,GAAqB31pB,KAAK41pB,kBAC1C51pB,KAAKM,OAAO0lF,IAAIg8jB,GAAmBhipB,KAAKq2G,mBAE5Cg2T,EAAMhxa,UAAUivnB,WAAa,WACzB,IAAI0J,EAAOh0nB,KAAKM,OAGhB,GAFAN,KAAKM,OAAO0lF,IAAIm3iB,GAAqBn9nB,KAAKsqnB,YAC1CtqnB,KAAKM,OAAO0lF,IAAIskjB,GAAgBtqoB,KAAKsqnB,YACjCtqnB,KAAKM,OAAO00nB,aAAav4nB,QAAUuD,KAAKy0nB,cAAc12jB,QAAQthE,OAAQ,CACtEuD,KAAK60pB,gBAAiB,EACtB,IAAK,IAAIz2pB,EAAK,EAAGyE,EAAKmxnB,EAAKS,cAAc12jB,QAAS3/D,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACpE,IAAIqiE,EAAM59D,EAAGzE,GACb4B,KAAKu0pB,YAAY9zlB,GAErBzgE,KAAK60pB,gBAAiB,IAG9BxoP,EAAMhxa,UAAUg7G,gBAAkB,SAAUx1G,GACxC,IAAImznB,EAAOh0nB,KAAKM,OAChB,GAAMN,KAAKy0nB,cAAc12jB,QAAQthE,SACkE,KAA9F,eAAgB,aAAc,gBAAiB,cAAe,SAAS8B,QAAQsC,EAAEs1D,QAItF,OADAt1D,EAAE2kB,iBACM3kB,EAAEs1D,QACN,IAAK,eACL,IAAK,aACD,IAAIq5E,EAAWwkf,EAAKirB,eAAiBjrB,EAAKsE,2BAC1C,GAAI9of,EAAS/yI,OAAQ,CAIjB,IAAK,IAHD87R,EAAOy7V,EAAK+Y,kBAAkBpqoB,cAAc,SAASyX,SAErDqzpB,OAAS,EACJtxqB,EAFK63nB,EAAKqN,cAAc7xf,EAASA,EAAS/yI,OAAS,IAEvCgkS,SAAUtkS,GAAK,EAAGA,IACnC,IAAKo8R,EAAKp8R,GAAG2H,UAAUK,SAAS,WAAao0R,EAAKp8R,GAAG2H,UAAUK,SAAS,eAAgB,CACpFspqB,EAASl1Y,EAAKp8R,GACd,MAGR6D,KAAK0tqB,mBAAmBD,EAAO9qqB,cAA2B,eAAb9B,EAAEs1D,OAC3C,sBAAwB,0BAEhC,MACJ,IAAK,gBACDn2D,KAAKu5T,YACL,MACJ,IAAK,cACDv5T,KAAKm5T,cACL,MACJ,IAAK,QACD,GAAIn5T,KAAKM,OAAOk/lB,QAA8E,OAAnE35lB,EAAQhF,EAAEsG,OAAQ,IAAMnH,KAAKM,OAAOU,QAAQsC,GAAK,cACxE,OAEJ,IAAItC,EAAUhB,KAAKkC,MAAMstoB,oBACrB9ukB,EAAM1/D,EAAUA,EAAQqT,cAAc1R,cAAc,uBAAyB,KACjF,IAAK+9D,EACD,MAEJ1gE,KAAK0tqB,mBAAmBhtmB,KAIpC2rW,EAAMhxa,UAAU8jH,aAAe,SAAUt+G,GACrCb,KAAK0tqB,mBAAmB7sqB,EAAEsG,QAC1BnH,KAAK2tqB,oBAAoB9sqB,EAAEsG,QAC3BnH,KAAK4tqB,kBAAkB/sqB,EAAEsG,QACzBnH,KAAK6tqB,sBAAsBhtqB,EAAEsG,SAEjCkla,EAAMhxa,UAAUuyqB,kBAAoB,SAAUzmqB,GACtCA,EAAOrD,UAAUK,SAAS,oBAC1BnE,KAAKy0pB,cAActtpB,EAAOkN,cAAcxB,aAAa,oBAG7Dw5Z,EAAMhxa,UAAUwyqB,sBAAwB,SAAU1mqB,GAC1CnH,KAAKy0nB,cAAcq5C,mBACf3mqB,EAAOrD,UAAUK,SAAS,kBACtBgD,EAAOrD,UAAUK,SAAS,mBAC1BnE,KAAKy0pB,cAAcz0pB,KAAKM,OAAOwhoB,eAAe36nB,EAAOkN,cAAcxB,aAAa,iBAAiBkZ,OAGjG/rB,KAAKu0pB,YAAYv0pB,KAAKM,OAAOwhoB,eAAe36nB,EAAOkN,cAAcxB,aAAa,iBAAiBkZ,OAI/F5kB,EAAOrD,UAAUK,SAAS,oBAC1BnE,KAAKy0pB,cAActtpB,EAAOkN,cAAcxB,aAAa,qBAKrEw5Z,EAAMhxa,UAAUsyqB,oBAAsB,SAAUxmqB,GAC5C,IAAI6snB,EAAOh0nB,KAAKM,OACZytqB,EAAUloqB,EAAQsB,EAAQ,sBAC9B,GAAI6snB,EAAKpN,cAAgBmnD,IAAY5mqB,EAAOrD,UAAUK,SAAS,qBAC1DgD,EAAOrD,UAAUK,SAAS,mBAAoB,CAC/C,IAAI4nB,EAAQgipB,EAAQ5oqB,kBAAkB0N,aAAa,kBAC/CmhnB,EAAKy6B,uBAAuB1ioB,GAAOvqB,iBAAiB,gBAAgB/E,OACpEu3nB,EAAK07B,WAAW3joB,EAAO,cAAc,GAGrCiomB,EAAK07B,WAAW3joB,EAAO,aAAa,KAShDsgZ,EAAMhxa,UAAUqyqB,mBAAqB,SAAUvmqB,GAC3C,IAAI+oH,EAAOr8E,GAAa1sC,EAAQ,uBAC5B0sC,GAAa1sC,EAAQ,wBACzB,GAAI+oH,EAAM,CACN,IAAI89iB,EAAU99iB,EAAK2oK,UACf49W,EAASvmhB,EAAK77G,cAAcosR,SAC5BwtY,EAAWjuqB,KAAKM,OAAOysoB,kBAAkBpqoB,cAAc,SAASyX,SAChEm+Q,KAAUl3R,MAAMC,KAAK2sqB,GAAU5sqB,MAAMo1oB,EAAS,EAAGw3B,EAASxxqB,QAC1DolB,OAAS,EACTqspB,OAAa,EACbr2W,KACAwhT,EAASnpf,EAAK77G,cAAc7S,iBAAiB,iBAAiB/E,OAC9DwyJ,GAAS,EACT/+B,EAAKpsH,UAAUK,SAAS,yBACxBR,GAAUusH,GAAO,sBACjB7rH,GAAa6rH,GAAO,wBACpBA,EAAK/qH,kBAAkB9B,UAAY,4CACnC4rJ,GAAS,IAGTptI,GAAS,EACTxd,GAAa6rH,GAAO,sBACpBvsH,GAAUusH,GAAO,wBACjBA,EAAK/qH,kBAAkB9B,UAAY,6CAEvCrD,KAAK+0pB,KAAKruB,UAAUx2gB,EAAM++B,GAC1B,IAAK,IAAI9yJ,EAAI,EAAG0F,EAAM02R,EAAK97R,OAAQN,EAAI0F,IAC/B02R,EAAKp8R,GAAGqF,iBAAiB,MAAMwsqB,IAC/Bz1Y,EAAKp8R,GAAGqF,iBAAiB,MAAMwsqB,GAASlqqB,UAAUK,SAAS,iBAAmBo0R,GAF1Cp8R,IAGhC0lB,EACA02Q,EAAKp8R,GAAGuI,MAAM4xC,QAAU,OAGpBiiP,EAAKp8R,GAAGqF,iBAAiB,iBAAiB/E,SAAW48mB,EAAS,IAC9D9gV,EAAKp8R,GAAGuI,MAAM4xC,QAAU,IACxB43nB,EAAa31Y,EAAKp8R,GAAGwG,cAAc,yBAE/Bk1T,EAASrzT,KAAK0pqB,GAEd31Y,EAAKp8R,GAAG2H,UAAUK,SAAS,gBACvBo0R,EAAKp8R,EAAI,GAAGqF,iBAAiB,wBAAwB/E,SACrD87R,EAAKp8R,GAAGuI,MAAM4xC,QAAU,SAUhD,IAASn6C,EAAI,EAAG0F,EAAMg2T,EAASp7T,OAAQN,EAAI0F,EAAK1F,IAC5CkI,GAAawzT,EAAS17T,IAAK,sBAC3BwH,GAAUk0T,EAAS17T,IAAK,wBACxB07T,EAAS17T,GAAGgJ,kBAAkB9B,UAAY,4CAC1CrD,KAAK0tqB,mBAAmB71W,EAAS17T,MAI7Ckwa,EAAMhxa,UAAUg8L,eAAiB,SAAU8iH,GAGvC,IAAK,IADDz5O,EADAutmB,EAAWjuqB,KAAKM,OAAOysoB,kBAAkBpqoB,cAAc,SAASyX,SAE3Dje,EAAI,EAAG0F,EAAMosqB,EAASxxqB,OAAQN,EAAI0F,EAAK1F,IACxC8xqB,EAAS9xqB,GAAGqF,iBAAiB,8CAA8C/E,SAC3EikE,EAAMutmB,EAAS9xqB,GAAGwG,cAAcw3S,EAAW,wBAA0B,0BAEjEz5O,EAAIr9D,UAAY82S,EAAW,qBAAuB,uBAClDz5O,EAAIv7D,kBAAkB9B,UAAY82S,EAAW,4CACzC,6CAEF8zX,EAAS9xqB,GAAGgJ,kBAAkBrB,UAAUK,SAAS,uBACnD8pqB,EAAS9xqB,GAAGgJ,kBAAkBrB,UAAUK,SAAS,0BACjD8pqB,EAAS9xqB,GAAGuI,MAAM4xC,QAAU6jQ,EAAW,GAAK,SAIhD8zX,EAAS9xqB,GAAGuI,MAAM4xC,QAAU6jQ,EAAW,GAAK,QAQxDkyH,EAAMhxa,UAAUk+T,UAAY,WACxBv5T,KAAKq3L,gBAAe,IAMxBg1O,EAAMhxa,UAAU89T,YAAc,WAC1Bn5T,KAAKq3L,gBAAe,IAOxBg1O,EAAMhxa,UAAU0wG,OAAS,WACrB/rG,KAAKqlH,KAAOrlH,KAAKshE,eAAeE,WAAW,gBAC3CxhE,KAAKmuqB,sBACLnuqB,KAAKouqB,kBACLpuqB,KAAKquqB,oBAEThiQ,EAAMhxa,UAAU8yqB,oBAAsB,WAClC,IAAIG,EAAYtuqB,KAAKM,OAAOU,QAAQ2B,cAAc,oBAC9C2rqB,GACA/pqB,EAAO+pqB,GAEXtuqB,KAAKgB,QAAUG,EAAc,OAASkC,UAAW,kBAAmBI,OAASutH,SAAY,QACzFhxH,KAAKuuqB,sBACLvuqB,KAAKM,OAAOU,QAAQkE,aAAalF,KAAKgB,QAAShB,KAAKM,OAAOU,QAAQ4b,YAC9D5c,KAAKy0nB,cAAc2Q,eACpBploB,KAAKgB,QAAQ0D,MAAM4xC,QAAU,SAGrC+1X,EAAMhxa,UAAUkzqB,oBAAsB,SAAUv+mB,GAC5C,GAAIhwD,KAAKy0nB,cAAc2Q,eAAiBploB,KAAKy0nB,cAAc12jB,QAAQthE,OAAQ,CACvE,IAAI+xqB,EAAYxuqB,KAAKqlH,KAAKtxC,YAAY,iBACtC/zE,KAAKgB,QAAQgB,UAAYwsqB,EACzBxuqB,KAAKgB,QAAQ8C,UAAUS,OAAO,kBAGzBvE,KAAKgB,QAAQgB,YAAchC,KAAKqlH,KAAKtxC,YAAY,mBAA2D,IAAtC/zE,KAAKy0nB,cAAc12jB,QAAQthE,SAC9FuD,KAAKqtqB,iBAAmBrtqB,KAAKstqB,mBAAsBt9mB,KACvDhwD,KAAKgB,QAAQgB,UAAY,IAE7BhC,KAAKgB,QAAQ8C,UAAUM,IAAI,cAGnCioa,EAAMhxa,UAAU+yqB,gBAAkB,WAC9BpuqB,KAAKyuqB,wBACLzuqB,KAAK0uqB,yBAETriQ,EAAMhxa,UAAUqzqB,sBAAwB,WACzB,IAAIhhkB,GAAU1tG,KAAKgB,SAC1BkuG,WAAY,qBACZ70D,SAAU,EACVnrC,OAAQlP,KAAKkP,OACbugG,UAAWzvG,KAAKyvG,UAChBiB,KAAM1wG,KAAK0wG,KACXqB,SAAU/xG,KAAK+xG,YAGvBs6T,EAAMhxa,UAAUozqB,sBAAwB,WACzBzuqB,KAAKM,OACL,IAAI8yG,GAAUpzG,KAAKgB,SAC1BuyG,OAAQ,eACRN,KAAMjzG,KAAKizG,QAQnBo5T,EAAMhxa,UAAUk5pB,YAAc,SAAU9kC,GACpC,IAAIuE,EAAOh0nB,KAAKM,OACZu8D,EAASm3jB,EAAKU,iBAAiBjF,GAC/BhynB,EAAkBo/D,KAAoC,IAAzBA,EAAOiqjB,eACnC9mnB,KAAK60pB,gBAAkB70pB,KAAKy0nB,cAAc12jB,QAAQx/D,QAAQkxnB,IAAe,IAG1E1ujB,GAAgBizjB,GAChBA,EAAKjmnB,OAAOywoB,IAAuBj4oB,SAAUvG,KAAMvE,QAASuE,KAAKu0pB,YAAar5a,KAAMu0Y,KAGxF5yjB,EAAOrlC,QAAUw8lB,EAAKS,cAAco9B,kBACpC7xpB,KAAK2uqB,QAAUl/C,EACfzvnB,KAAKqtqB,gBAAiB,EAClBrtqB,KAAK60pB,eACL70pB,KAAK6unB,cAGL7unB,KAAK4uqB,kBAAkBn/C,GAE3BzvnB,KAAKuuqB,sBACLvuqB,KAAKqtqB,gBAAiB,KAO1BhhQ,EAAMhxa,UAAUo5pB,cAAgB,SAAUhlC,GACtC,IAAIuE,EAAOh0nB,KAAKM,OACZu8D,EAAS78D,KAAKM,OAAOw2nB,2BACrB92nB,KAAKM,OAAOy9D,QAAQ/2B,OAAO,SAAUi3B,GAAK,OAAOA,EAAElyC,QAAU0jmB,IAAe,GAAKuE,EAAKU,iBAAiBjF,GAC3G,KAAIhynB,EAAkBo/D,KAAoC,IAAzBA,EAAOiqjB,eAA2B9mnB,KAAKy0nB,cAAc12jB,QAAQx/D,QAAQkxnB,GAAc,GAGpH,GAAI1ujB,GAAgBizjB,GAChBA,EAAKjmnB,OAAOywoB,IAAuBj4oB,SAAUvG,KAAMvE,QAASuE,KAAKy0pB,cAAev5a,KAAMu0Y,QAD1F,CAIA5yjB,EAAOrlC,SAAU,EACjBx3B,KAAK2uqB,QAAU9xmB,EAAO9wC,MACtB,IAAIgyC,EAAUlO,KAAKuB,MAAMvB,KAAKC,UAAU9vD,KAAKy0nB,cAAc12jB,UAE3D,GADAA,EAAQ11C,OAAO01C,EAAQx/D,QAAQyB,KAAK2uqB,SAAU,GAC1C3uqB,KAAKouJ,cAAc7vJ,QAAQkxnB,GAAc,EACzC,IAAK,IAAItznB,EAAI,EAAG0F,EAAMmynB,EAAKhF,aAAajxjB,QAAQthE,OAAQN,EAAI0F,EAAK1F,IAC7D,GAAIsznB,IAAeuE,EAAKhF,aAAajxjB,QAAQ5hE,GAAG4vB,MAAO,CACnDiomB,EAAKhF,aAAajxjB,QAAQ11C,OAAOlsB,EAAG,GACpC,MAIZ6D,KAAKy0nB,cAAc12jB,QAAUA,EACzBi2jB,EAAKlN,gBACL9mnB,KAAKstqB,kBAAmB,EACxBttqB,KAAKM,OAAOsrD,cAQpBygX,EAAMhxa,UAAUwznB,YAAc,WACf7unB,KAAKM,OAAhB,IAEIy9D,EAAUlO,KAAKuB,MAAMvB,KAAKC,UAAU9vD,KAAKy0nB,cAAc12jB,UAC3DA,EAAQv5D,KAAKxE,KAAK2uqB,SAClB3uqB,KAAKy0nB,cAAc12jB,QAAUA,EAC7B/9D,KAAK6uqB,qBAAqB7uqB,KAAK2uqB,SAC/B3uqB,KAAKM,OAAOsrD,YAOhBygX,EAAMhxa,UAAUw1d,iBAAmB,SAAUhwd,GAC9Bb,KAAKM,OACM,aAAlBO,EAAEurL,YACFpsL,KAAK4uqB,kBAAkB5uqB,KAAK2uqB,SAG5B3uqB,KAAK8uqB,uBAAuB9uqB,KAAK2uqB,SAErC,IAAI1uqB,EAAOD,KAAKy0nB,cAAc12jB,QAAQx/D,QAAQyB,KAAK2uqB,UAAY,GAC3Dl/C,WAAYzvnB,KAAK2uqB,QAASvif,YAAa,WAAY1lL,KAAM6rnB,KACvDnmc,YAAa,aAAc1lL,KAAM6rnB,IACvCvynB,KAAKM,OAAOkmB,QAAQ+rmB,GAAuB7znB,EAAOmC,EAAGZ,IACrDD,KAAK2uqB,QAAU,MAEnBtiQ,EAAMhxa,UAAUwzqB,qBAAuB,SAAUF,GAE7C,IADA,IAAIxyqB,EAAI,EACDA,EAAI6D,KAAKM,OAAO0unB,aAAajxjB,QAAQthE,QACpCuD,KAAKM,OAAO0unB,aAAajxjB,QAAQ5hE,GAAG4vB,QAAU4ipB,GAGlDxyqB,IAEA6D,KAAKM,OAAO0unB,aAAajxjB,QAAQthE,SAAWN,EAC5C6D,KAAKM,OAAO0unB,aAAajxjB,QAAQv5D,MAAOunB,MAAO4ipB,EAASn5oB,UAAW,cAE7Dx1B,KAAKM,OAAOsmnB,eAClB5mnB,KAAKM,OAAO0unB,aAAajxjB,QAAQ5hE,GAAGq5B,UAAY,cAGxD62Y,EAAMhxa,UAAUuzqB,kBAAoB,SAAU7ipB,GAC1C,IAAIiomB,EAAOh0nB,KAAKM,OACZk1B,EAAY,YACZu5oB,EAAgB5tqB,EAAc,OAASkC,UAAW,kCAClD2rqB,EAAW7tqB,EAAc,OAASsC,OAASwrqB,iBAAkBljpB,KAC7D8wC,EAAS78D,KAAKM,OAAOo0nB,iBAAiB3omB,GAC1C,IAAItuB,EAAkBo/D,GAAtB,CAIA,IAAIqymB,EAAal7C,EAAK06B,qBAAqB7xlB,EAAOn9D,KAC7CjC,EAAkBo/D,EAAOw8H,gBAU1B21e,EAASrtqB,YAAYR,EAAc,QAC/BkC,UAAW,cAAerB,UAAW66D,EAAOsB,WAC5C16D,OAASutH,SAAU,KAAM0C,aAAc,gCAXC,IAAxC72D,EAAOw8H,eAAe96L,QAAQ,KAC9BywqB,EAAShtqB,UAAYxB,SAASmC,cAAck6D,EAAOw8H,gBAAgBr3L,UAAUkO,OAG7E8+pB,EAAShtqB,UAAY66D,EAAOw8H,eAEhC21e,EAAS7pqB,kBAAkBrB,UAAUM,IAAI,gBAQzCpE,KAAKy0nB,cAAcq5C,kBACnBkB,EAASrtqB,YAAYR,EAAc,QAC/BkC,UAAW,6DAA8DrB,UAAW,SACpFyB,OAASutH,SAAU,KAAM0C,aAAc,qBAG3Cw7iB,EAAW1tqB,iBAAiB,8BAA8B/E,SAC1D+4B,EAAY05oB,EAAWvsqB,cAAc,gBAAkB,YAAc,cAEzEqsqB,EAASrtqB,YAAYR,EAAc,QAC/BkC,UAAW,yBACCmyB,EAAU5f,cAAgB,WAAa4f,EAAU5f,cAAgB5T,UAAW,SACxFyB,OAASutH,SAAU,KAAM0C,aAAc,8BAE3Cs7iB,EAASrtqB,YAAYR,EAAc,QAC/BkC,UAAW,sCAAuCrB,UAAW,SAC7DyB,OAASy8B,MAAOlgC,KAAKqlH,KAAKtxC,YAAY,WAAYi9C,SAAU,KAAM0C,aAAc,8BAChFnwH,OAAQvD,KAAKy0nB,cAAc06C,kBAAoB,GAAK,kBAExDJ,EAAcptqB,YAAYqtqB,GAC1BhvqB,KAAKgB,QAAQW,YAAYotqB,KAG7B1iQ,EAAMhxa,UAAUgzqB,iBAAmB,SAAU5lpB,GACzC,GAAIzoB,KAAKy0nB,cAAcq5C,iBAEnB,IAAK,IADDjplB,KAAaxjF,MAAMC,KAAKtB,KAAKM,OAAOU,QAAQ0M,uBAAuB,oBAC9DvR,EAAI,EAAG0F,EAAMgjF,EAAQpoF,OAAQN,EAAI0F,EAAK1F,IAC3C,IAAO0oF,EAAQ1oF,GAAG2H,UAAUK,SAAS,iBAAoB0gF,EAAQ1oF,GAAG2H,UAAUK,SAAS,sBAAyB,CAC5G,IAAI04D,EAAS78D,KAAKM,OAAOwhoB,eAAej9iB,EAAQ1oF,GAAG0W,aAAa,mBAC3D7S,KAAKM,OAAO0mnB,gBAAmBhnnB,KAAKM,OAAO0mnB,iBAAmBnqjB,EAAOmqjB,kBAClEniiB,EAAQ1oF,GAAGqF,iBAAiB,mBAAmB/E,QAC/C8H,EAAOsgF,EAAQ1oF,GAAGqF,iBAAiB,mBAAmB,IAErDinB,GACDo8D,EAAQ1oF,GAAGwF,YAAYR,EAAc,QACjCkC,UAAW,2BACNrD,KAAKy0nB,cAAc12jB,QAAQx/D,QAAQs+D,EAAO9wC,QAAU,EAAI,iCACnD,8BAA+BtoB,OAASutH,SAAU,KAAM0C,aAAc,sBAQ5G24S,EAAMhxa,UAAUyzqB,uBAAyB,SAAU/ipB,GAC1CtuB,EAAkBuC,KAAKovqB,eAAerjpB,MACvCxnB,EAAOvE,KAAKovqB,eAAerjpB,IAC3B/rB,KAAKuuqB,uBAETvuqB,KAAKstqB,kBAAmB,GAE5BjhQ,EAAMhxa,UAAUmsF,kBAAoB,SAAU3mF,GAC1C,IAAId,EAAQC,KACZ,GAAIa,EAAEswF,SAAWnxF,KAAKu/B,gBAuDtB,IAAK,IApDDtgC,EAAU,SAAUqL,GACpB,OAAQA,GACJ,IAAK,UACD,IAAIrK,OAAO,EACX,GAAIstG,EAAOsnjB,eAAgB,CACvB,GAAKtnjB,EAAO+/jB,iBAiBRrtqB,GAASmsL,YAAa,aAAc1lL,KAAMipnB,QAjBhB,CAC1B,IAAKpihB,EAAO8/jB,eAAgB,CACxB9/jB,EAAOghkB,qBAAoB,GAC3B,IAAK,IAAIpyqB,EAAI,EAAGA,EAAIoxG,EAAOknhB,cAAc12jB,QAAQthE,OAAQN,IAAK,CAC1DoxG,EAAOohkB,QAAUphkB,EAAOknhB,cAAc12jB,QAAQ5hE,GACpCoxG,EAAOjtG,OAAOo0nB,iBAAiBnnhB,EAAOohkB,SAC5Cn3oB,QAAU+1E,EAAOjtG,OAAOm0nB,cAAco9B,kBAC1CtkjB,EAAOshkB,qBAAqBthkB,EAAOohkB,SAC/BxyqB,EAAIoxG,EAAOknhB,cAAc12jB,QAAQthE,OAAS,GAC1C8wG,EAAOqhkB,kBAAkBrhkB,EAAOknhB,cAAc12jB,QAAQ5hE,KAIlE8D,GAASwvnB,WAAYlihB,EAAOohkB,QAASvif,YAAavrL,EAAEoC,WAAWqH,GAAM7N,OAAS,WAAa,aACvFiK,KAAMipnB,IAKTpihB,EAAOknhB,cAAco9B,mBACtBhxpB,EAAE6lF,cAAcp8E,GAAMlL,QAAQ,SAAUy9D,IACQ,IAAxCh8D,EAAEoC,WAAWqH,GAAM/L,QAAQs+D,KAC3B98D,EAAMO,OAAOo0nB,iBAAiB73jB,GAAQrlC,SAAU,KAI5D+1E,EAAOjtG,OAAOyN,OAAO29nB,GAAqBzroB,GAE9C,MACJ,IAAK,eACDstG,EAAOghkB,sBACPhhkB,EAAOknhB,cAAc2Q,aAAe73hB,EAAOvsG,QAAQ0D,MAAM4xC,QAAU,GAAKi3D,EAAOvsG,QAAQ0D,MAAM4xC,QAAU,OACvG,MACJ,IAAK,oBACDi3D,EAAO8hkB,oBAAoB9hkB,EAAOknhB,cAAco9B,mBAChDtkjB,EAAOjtG,OAAOyN,OAAO29nB,IAAuBt/c,YAAa,YACzD,MACJ,IAAK,oBACD7+E,EAAO+hkB,uBAAuB/hkB,EAAOknhB,cAAc06C,kBAAmB,mBACtE,MACJ,IAAK,mBACD5hkB,EAAO+hkB,uBAAuB/hkB,EAAOknhB,cAAcq5C,iBAAkB,wBACrEvgkB,EAAOjtG,OAAOg7oB,kBAItB/tiB,EAASvtG,KACJ5B,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKuD,EAAEoC,YAAa7E,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAEnEa,EADW4D,EAAGzE,MAItBiua,EAAMhxa,UAAUg0qB,oBAAsB,SAAU5qqB,GAC5C,IAAK,IAAItI,EAAI,EAAGA,EAAI6D,KAAKy0nB,cAAc12jB,QAAQthE,OAAQN,IACnD6D,KAAKM,OAAOo0nB,iBAAiB10nB,KAAKy0nB,cAAc12jB,QAAQ5hE,IAAIq7B,QAAU/yB,GAG9E4na,EAAMhxa,UAAUi0qB,uBAAyB,SAAU7qqB,EAAWpB,GAE1D,IAAK,IADD0qqB,KAAa1sqB,MAAMC,KAAKtB,KAAKgB,QAAQQ,iBAAiB,IAAM6B,IACvDlH,EAAI,EAAGA,EAAI4xqB,EAAQtxqB,OAAQN,IAChC4xqB,EAAQ5xqB,GAAGuI,MAAM4xC,QAAU7xC,EAAY,GAAK,QAGpD4na,EAAMhxa,UAAUyioB,kBAAoB,SAAUj9nB,GACtCA,EAAEswF,SAAWnxF,KAAKu/B,iBAAmB1+B,EAAE4+B,QACvCz/B,KAAK+rG,UAQbsgU,EAAMhxa,UAAUiX,QAAU,WACjBtS,KAAKM,OAAO0mF,aACbhnF,KAAKuvqB,gBAETvvqB,KAAKpD,sBACLoD,KAAKquqB,kBAAiB,GACtB9pqB,EAAOvE,KAAKgB,UAOhBqra,EAAMhxa,UAAUk0qB,cAAgB,WAC5B,IAAIp9C,EAAOtikB,KAAKuB,MAAMvB,KAAKC,UAAU9vD,KAAKy0nB,cAAc12jB,UACxD/9D,KAAK60pB,gBAAiB,EACtB,IAAK,IAAI14pB,EAAI,EAAG0F,EAAMswnB,EAAK11nB,OAAQN,EAAI0F,EAAK1F,IACxC6D,KAAKy0pB,cAActiC,EAAKh2nB,IAE5B6D,KAAK60pB,gBAAiB,GAM1BxoP,EAAMhxa,UAAUkkC,cAAgB,WAC5B,MAAO,SAEX8sY,EAAMhxa,UAAUu6pB,iBAAmB,SAAU/0pB,GACzC,IACI+jF,EADAoviB,EAAOh0nB,KAAKM,OAEZ6xnB,EAAO6B,EAAKhF,aAAajxjB,QACzB2zlB,EAAQ19B,EAAKS,cAAc12jB,QAC3BuxF,EAAatvJ,KAAKM,OAAO00nB,aAAap9lB,IAAI,SAAUqmC,GAAK,OAAOA,EAAElyC,QACtE/rB,KAAKquqB,mBACL,IAAK,IAAIlyqB,EAAI,EAAG0F,EAAMswnB,EAAK11nB,OAAQN,EAAI0F,EAAK1F,KACG,IAAvCmzJ,EAAW/wJ,QAAQ4znB,EAAKh2nB,GAAG4vB,SAG/B64D,EAASoviB,EAAKy6B,uBAAuBt8B,EAAKh2nB,GAAG4vB,QACxCiomB,EAAKpN,eAAiB5mnB,KAAKouJ,cAAc7vJ,QAAQ4znB,EAAKh2nB,GAAG4vB,QAAU,GACpE/rB,KAAKy0nB,cAAc12jB,QAAQx/D,QAAQ4znB,EAAKh2nB,GAAG4vB,QAAU,IACrDjoB,EAAU8gF,EAAOjiF,cAAc,qBAAsB,cAAe,wBAChEwvnB,EAAK11nB,OAAS,GACdmoF,EAAOjiF,cAAc,oBAAoBhB,YAAYR,EAAc,QAAUkC,UAAW,eAAgBrB,WAAY7F,EAAI,GAAG+Q,eAG1HlN,KAAKovqB,eAAej9C,EAAKh2nB,GAAG4vB,QAAU/rB,KAAKovqB,eAAej9C,EAAKh2nB,GAAG4vB,OAAOvqB,iBAAiB,gBAAgB/E,SACrF,cAAtB01nB,EAAKh2nB,GAAGq5B,UACR1xB,EAAU9D,KAAKovqB,eAAej9C,EAAKh2nB,GAAG4vB,OAAOppB,cAAc,iBAAkB,cAAe,qBAAsB,eAAgB,sBAGlImB,EAAU9D,KAAKovqB,eAAej9C,EAAKh2nB,GAAG4vB,OAAOppB,cAAc,iBAAkB,eAAgB,sBAAuB,cAAe,uBAI/I,IAASxG,EAAI,EAAG0F,EAAM6vpB,EAAMj1pB,OAAQN,EAAI0F,EAAK1F,KACH,IAAlCmzJ,EAAW/wJ,QAAQmzpB,EAAMv1pB,KAG7B63nB,EAAKy6B,uBAAuBiD,EAAMv1pB,IAAIqH,aAAa,eAAgB,SAG3E6oa,EAAMhxa,UAAU+zqB,eAAiB,SAAUrjpB,GACvC,OAAI/rB,KAAKgB,SAAWhB,KAAKgB,QAAQ2B,cAAc,oBAAsBopB,EAAQ,MAClE/rB,KAAKgB,QAAQ2B,cAAc,oBAAsBopB,EAAQ,MAAM1X,cAEnE,MAEJg4Z,KCpuBPmjQ,GAA2B,WAK3B,SAASA,EAAUlvqB,EAAQiloB,GAEvBvloB,KAAK+0pB,KAAO,IAAItuB,GAChBzmoB,KAAKM,OAASA,EACVN,KAAKM,OAAO0mF,cAGhBhnF,KAAKkC,MAAQqjoB,EAAQ/jkB,WAAW,SAChCxhE,KAAKM,OAAOslF,GAAG04jB,GAAct+oB,KAAKm/G,aAAcn/G,MAChDA,KAAKM,OAAOslF,GAAGguiB,GAAgB5znB,KAAKsS,QAAStS,MAC7CA,KAAKM,OAAOslF,GAAGo8jB,GAAmBhipB,KAAKq2G,gBAAiBr2G,OA6L5D,OA3LAwvqB,EAAUn0qB,UAAU8jH,aAAe,SAAUt+G,GACzCb,KAAKyvqB,qBAAqB5pqB,EAAQhF,EAAEsG,OAAQ,QAEhDqoqB,EAAUn0qB,UAAUo0qB,qBAAuB,SAAUtoqB,GACjD,IAAI6snB,EAAOh0nB,KAAKM,OAEhB,GAAI6G,IAAWA,EAAOrD,UAAUK,SAAS,wBAA0BgD,EAAOrD,UAAUK,SAAS,sBAAuB,CAChH,IAAI6kY,EAAK7hY,EAAOkN,cACZq7pB,EAAQ1mS,EAAGn2X,aAAa,YACxBgtR,EAAU7/R,KAAKM,OAAOysoB,kBAAkBpqoB,cAAc,SAASyX,SAAS4uX,EAAGvoG,SAAW,GAC1F,GAAIt5R,EAAOrD,UAAUK,SAAS,uBAAwB,CAClD,IAGI3H,GAFkBw3nB,EAAKlN,eAAiBkN,EAAKS,cAAc12jB,QAAQthE,OACnEu3nB,EAAKhlT,gBAAmB,QAAIglT,EAAKhlT,iBACVg6D,EAAGn2X,aAAa,kBAC3C,GAAI7S,KAAK2vqB,YAAY9vY,GACjBA,EAAQn7R,MAAM4xC,QAAU,QAEvB,GAAI09kB,EAAK86B,qBAAuB96B,EAAKr4V,UAAW,CACjD,IAAIi0Y,EAAYzuqB,EAAc,MAAQkC,UAAW,gBAC7CwsqB,EAAa1uqB,EAAc,MAAQkC,UAAW,iBAClDwsqB,EAAWrsqB,aAAa,UAAWxD,KAAKM,OAAOq3nB,oBAAoBl7nB,OAAOyQ,YAM1E,IAAK,IALDwzD,EAAM,IAAI8/P,IACV63T,WAAW,EACXl+U,UAAU,EACVr4O,OAAQ,IAAI2qa,IAAOu0I,SAAUhI,GAAS6hB,SAAW,IAAIpuJ,IAAOktJ,YAAY,EAAMnimB,SAAS,OAElFr7B,EAAI,EAAG0F,EAAMmynB,EAAKS,cAAc12jB,QAAQthE,OAAQN,EAAI0F,EAAK1F,IAC9DyzqB,EAAUjuqB,YAAYR,EAAc,MAAQkC,UAAW,kBACvDq9D,EAAIoB,MAAM5mE,QAAQ,IAAIuxe,IAAOu0I,SAAUhI,GAAS6hB,UAKpD,GAHA+0C,EAAUjuqB,YAAYR,EAAc,MAAQkC,UAAW,wBACvDusqB,EAAUjuqB,YAAYkuqB,GACtB7mS,EAAGvoY,WAAWyE,aAAa0qqB,EAAW5mS,EAAGx2P,aACrCwhf,EAAKoF,eACL/5jB,GAAewwmB,EAAY77C,EAAK86B,mBAAL96B,CAAyBx3nB,EAAMw3nB,EAAM,uBAE/D,CACDA,EAAKr4V,UAAgB,eACjBuuB,SAAU8pU,EAAKhznB,QAAQsC,GACvBwsqB,kBAAmB97C,EAAK6B,0BACxBk6C,eAAgB/7C,EAAKr4V,UAAU/gO,YAC/Bm3lB,oBAAqBv1pB,EAAKw3nB,EAAKr4V,UAAU/gO,aACzCo1mB,cAAexzqB,GAEnB,IAAI2lE,EAAO,IAAI++kB,GAAKltB,EAAKr4V,WACrB9pM,EAAU1vB,EAAK+pC,qBACf+jkB,EAAiBj8C,EAAK9nhB,qBACrBra,GAAWA,EAAQp1F,SAAWwzqB,EAAexzqB,QAC9C0lE,EAAKuxlB,mBAAmBuc,GAE5B,IAAIC,EAAW/uqB,EAAc,OACzBmC,GAAI,QAAUg8D,GAAQ0pU,EAAI,UAAUvsY,OAChC,QAAUusY,EAAGvoG,SAAWrhO,GAAO,MAEvCywmB,EAAWluqB,YAAYuuqB,GACvB/tmB,EAAK9rB,SAAS65nB,GAElBN,EAAUjuqB,YAAYkuqB,GACtB7mS,EAAGvoY,WAAWyE,aAAa0qqB,EAAW5mS,EAAGx2P,aACzC,IAAI29hB,EACJnwqB,KAAKM,OAAO49oB,gBAAgB9hnB,KAAK,SAAUQ,EAAG80mB,GAA0B,OAAhBy+B,EAAQz+B,EAAe90mB,EAAEl9B,MAAQgwqB,IACzF17C,EAAKmM,UAAU93mB,OAAO2gX,EAAGvoG,SAAW,EAAG,EAAGmvY,GAC1C5vqB,KAAKM,OAAO49oB,gBAAgB71nB,OAAO8npB,EAAQ,EAAG,EAAGzvmB,GACjDszjB,EAAKxtmB,QAAQ4ppB,IAA0BC,cAAeR,EAAYrzqB,KAAMA,IACxEw3nB,EAAKjmnB,OAAOqiqB,IAA0B73Y,KAAMv4R,KAAKM,OAAO49oB,kBAE5Dp6oB,EAAUqD,GAAS,sBAAuB,wBAC1CrD,EAAUqD,EAAOhC,mBAAoB,mBAAoB,sBAAuB,oBAAqB,uBACrGnF,KAAKM,OAAO49oB,gBAAgBl1Q,EAAGvoG,UAAU0Z,UAAW,EACpDn6S,KAAK+0pB,KAAKruB,UAAUv/nB,GAAQ,QAGxBnH,KAAK2vqB,YAAY9vY,KACjBA,EAAQn7R,MAAM4xC,QAAU,QAE5BxyC,EAAUqD,GAAS,wBAAyB,sBAC5CrD,EAAUqD,EAAOhC,mBAAoB,oBAAqB,uBAAwB,mBAAoB,sBACtGnF,KAAKM,OAAO49oB,gBAAgBl1Q,EAAGvoG,UAAU0Z,UAAW,EACpDn6S,KAAK+0pB,KAAKruB,UAAUv/nB,GAAQ,KAIxCqoqB,EAAUn0qB,UAAUs0qB,YAAc,SAAUjvmB,GACxC,OAAOA,GAAOA,EAAI58D,UAAUK,SAAS,gBAEzCqrqB,EAAUn0qB,UAAUiX,QAAU,WACtBtS,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAO0lF,IAAIs4jB,GAAct+oB,KAAKm/G,cACnCn/G,KAAKM,OAAO0lF,IAAI4tiB,GAAgB5znB,KAAKsS,SACrCtS,KAAKM,OAAO0lF,IAAIg8jB,GAAmBhipB,KAAKq2G,mBAE5Cm5jB,EAAUn0qB,UAAUi1qB,eAAiB,SAAUr+pB,EAAO5O,GAClD,IAAI2lY,EAAKhpY,KAAKM,OAAO+goB,cAAcpvnB,GACnC,OAAI+2X,GAAMA,EAAGrmY,cAAcU,GAChB2lY,EAAGrmY,cAAcU,GAErB,MAOXmsqB,EAAUn0qB,UAAU4zJ,OAAS,SAAU9nJ,GAC9B66C,MAAM76C,KACPA,EAASnH,KAAKswqB,eAAenpqB,EAAQ,yBAErCA,GAAUA,EAAOrD,UAAUK,SAAS,wBACpCnE,KAAKyvqB,qBAAqBtoqB,IAQlCqoqB,EAAUn0qB,UAAU68S,SAAW,SAAU/wS,GAChC66C,MAAM76C,KACPA,EAASnH,KAAKswqB,eAAenpqB,EAAQ,uBAErCA,GAAUA,EAAOrD,UAAUK,SAAS,sBACpCnE,KAAKyvqB,qBAAqBtoqB,IAOlCqoqB,EAAUn0qB,UAAUk+T,UAAY,WAC5Bv5T,KAAKq3L,gBAAe,IAMxBm4e,EAAUn0qB,UAAU89T,YAAc,WAC9Bn5T,KAAKq3L,gBAAe,IAExBm4e,EAAUn0qB,UAAUg8L,eAAiB,SAAU8iH,GAG3C,IAAK,IAFDxjC,EACA4hB,EAAOv4R,KAAKM,OAAO+goB,cACdlloB,EAAI,EAAG0F,EAAM02R,EAAK97R,OAAQN,EAAI0F,EAAK1F,IACxCw6Q,EAAK4hB,EAAKp8R,GAAGwG,cAAc,4CAC3Bw3S,EAAWn6S,KAAKivJ,OAAO0nH,GAAM32Q,KAAKk4S,SAASvhC,IAGnD64Z,EAAUn0qB,UAAUg7G,gBAAkB,SAAUx1G,GAC5C,IAAImznB,EAAOh0nB,KAAKM,OAChB,OAAQO,EAAEs1D,QACN,IAAK,gBACDn2D,KAAKu5T,YACL,MACJ,IAAK,cACDv5T,KAAKm5T,cACL,MACJ,IAAK,aACL,IAAK,eACD,IAAI3pL,EAAWwkf,EAAKirB,eAAiBjrB,EAAKsE,2BAC1C,GAAI9of,EAAS/yI,OAAQ,CACjB,IACIk6Q,EADUq9W,EAAKqN,cAAc7xf,EAASA,EAAS/yI,OAAS,IAC3CkG,cAAc,4CAClB,iBAAb9B,EAAEs1D,OAA4Bn2D,KAAKivJ,OAAO0nH,GAAM32Q,KAAKk4S,SAASvhC,GAElE,MACJ,IAAK,QACD,GAAI32Q,KAAKM,OAAOk/lB,OACZ,OAEJ,IAAIx+lB,EAAUhB,KAAKkC,MAAMstoB,oBACzB,IAAK3uoB,EAAEsG,OAAOrD,UAAUK,SAAS,yBAC5BtD,EAAEsG,OAAOrD,UAAUK,SAAS,qBAC7B,MAEJnE,KAAKyvqB,qBAAqBzuqB,KAQtCwuqB,EAAUn0qB,UAAUkkC,cAAgB,WAChC,MAAO,aAEJiwoB,KC7MPtlY,GAAyB,WACzB,SAASA,EAAQ5pS,EAAQghE,GACrBthE,KAAKuwqB,mBACLvwqB,KAAKy6D,OAAS,MAAO,OAAQ,SAAU,SAAU,SAAU,QAAS,SAChE,gBAAiB,YAAa,cAAe,YAAa,cAC9Dz6D,KAAKM,OAASA,EACdN,KAAKwwqB,OAASlwqB,EAAOU,QAAQsC,GAC7BtD,KAAKshE,eAAiBA,EACtBthE,KAAKtD,mBAwRT,OAtRAwtS,EAAQ7uS,UAAU0wG,OAAS,WACvB/rG,KAAKqlH,KAAOrlH,KAAKshE,eAAeE,WAAW,gBAG3C,IAAK,IAAIpjE,EAAK,EAAGqyqB,GAFD,MAAO,OAAQ,SAAU,SAAU,SAAU,QACzD,YAAa,cAAe,aAAc,aACNryqB,EAAKqyqB,EAAWh0qB,OAAQ2B,IAAM,CAClE,IAAIyf,EAAO4ypB,EAAWryqB,GAClBi2E,EAAUx2D,EAAKjI,cACf86pB,EAAar8lB,EAAQ,GAAG5pD,cAAgB4pD,EAAQhzE,MAAM,GAC1DrB,KAAKuwqB,gBAAgB1ypB,IACjBva,GAAItD,KAAKwwqB,OAAS,IAAMn8lB,EAASkgO,WAAY,KAAOlgO,EACpD5nD,KAAMzsB,KAAKqlH,KAAKtxC,YAAY28lB,GAAaj8X,YAAaz0S,KAAKqlH,KAAKtxC,YAAY28lB,IAGpF1wqB,KAAKuwqB,gBAAgBr1mB,QACjB53D,GAAItD,KAAKwwqB,OAAS,UAClBvhqB,SAAU,4EACKjP,KAAKwwqB,OAAS,oFACVxwqB,KAAKqlH,KAAKtxC,YAAY,UAAY,4BACvC/zE,KAAKwwqB,OAAS,oGACHxwqB,KAAKqlH,KAAKtxC,YAAY,UAAY,oDAE3D0gO,YAAaz0S,KAAKqlH,KAAKtxC,YAAY,UAAW5f,MAAO,QAASlhD,SAAU,oBAE5EjT,KAAKuwqB,gBAAgBI,eACjBrtqB,GAAItD,KAAKwwqB,OAAS,iBAAuBv9pB,SAAU,4BAA6BuhS,WAAY,sBAC5F/nR,KAAMzsB,KAAKqlH,KAAKtxC,YAAY,iBAAkB0gO,YAAaz0S,KAAKqlH,KAAKtxC,YAAY,iBAAkB5f,MAAO,SAE9Gn0D,KAAK4wqB,iBAOT1mY,EAAQ7uS,UAAUowpB,WAAa,WAC3B,OAAOzrpB,KAAK2zX,QAAQ3yX,SAOxBkpS,EAAQ7uS,UAAUiX,QAAU,WACnBtS,KAAK2zX,QAAQ3sS,cACThnF,KAAK2zX,QAAQ3yX,QAIdhB,KAAK2zX,QAAQrhX,UAHbtS,KAAKM,OAAOk/nB,iBAAiB,oBAKjCx/nB,KAAKu3d,cACLv3d,KAAKpD,sBACL2H,EAAOvE,KAAKgB,WAGpBkpS,EAAQ7uS,UAAUu1qB,cAAgB,WAC9B,IAAIn2mB,EAAQz6D,KAAK2yO,WACjB3yO,KAAK2zX,QAAU,IAAIvrU,IACfqS,MAAOA,EACP+lP,QAASxgT,KAAK6wqB,oBAAoBv1qB,KAAK0E,MACvC4rG,kBAAmB5rG,KAAKM,OAAOsrG,kBAC/B14F,UAAWlT,KAAKM,OAAO4S,YAE3B,IAAI49pB,EAAU,mBAEV9wqB,KAAKM,OAAOwwqB,KACZ9wqB,KAAK2zX,QAAoB,sBACzB3zX,KAAK2zX,QAAQm9S,GAAW9wqB,KAAKM,OAAOwwqB,IAExC9wqB,KAAKgB,QAAUG,EAAc,OAASmC,GAAItD,KAAKwwqB,OAAS,kBACpDxwqB,KAAKM,OAAO2jpB,gBACiC,iBAAjCjkpB,KAAKM,OAAsB,iBACnCN,KAAK2zX,QAAQt9U,SAASr2C,KAAKM,OAAO2jpB,iBAClCjkpB,KAAKgB,QAAUhB,KAAK2zX,QAAQ3yX,SAG5Bq+D,GAAer/D,KAAKgB,QAASq8D,GAAiBr9D,KAAKM,OAAO2jpB,gBAA7B5mlB,IAAkDr9D,KAAKM,OAAQ,oBAIhGN,KAAK2zX,QAAQt9U,SAASr2C,KAAKgB,SAE/BhB,KAAKM,OAAOU,QAAQkE,aAAalF,KAAKgB,QAAShB,KAAKM,OAAOq+nB,oBAC3D3+nB,KAAK+wqB,cAAgB/wqB,KAAKgB,QAAQ2B,cAAc,IAAM3C,KAAKwwqB,OAAS,cACpExwqB,KAAKq2d,YACLr2d,KAAKgxqB,sBACDhxqB,KAAKM,OAAOy0nB,gBACZ/0nB,KAAKixqB,mBAGb/mY,EAAQ7uS,UAAU21qB,oBAAsB,SAAU/wqB,GAC9C,IAAI+znB,EAAOh0nB,KAAKM,OACZq1E,KACAy8W,KACA+0L,EAAO6M,EAAK/yjB,aACZiwmB,EAAUl9C,EAAKhlT,iBAAmBglT,EAAKhlT,gBAAgBvyU,OAC3D0qnB,EAAKg9B,YAAcxukB,EAAYnxE,KAAKxE,KAAKwwqB,OAAS,QAAUp+O,EAAa5tb,KAAKxE,KAAKwwqB,OAAS,QAC5FrpD,EAAKrmjB,cAAgBowmB,EAAUv7lB,EAAYnxE,KAAKxE,KAAKwwqB,OAAS,SAAWp+O,EAAa5tb,KAAKxE,KAAKwwqB,OAAS,SACzGrpD,EAAKi9B,eAAiB8sB,EAAUv7lB,EAAYnxE,KAAKxE,KAAKwwqB,OAAS,WAAap+O,EAAa5tb,KAAKxE,KAAKwwqB,OAAS,WAC7E,UAA3Bx8C,EAAK/yjB,aAAaljC,KACdi2lB,EAAKhznB,QAAQQ,iBAAiB,gBAAgB/E,SAAW0qnB,EAAKg9B,aAAeh9B,EAAKrmjB,eAClF6U,EAAYnxE,KAAKxE,KAAKwwqB,OAAS,WAC/B76lB,EAAYnxE,KAAKxE,KAAKwwqB,OAAS,aAG/Bp+O,EAAa5tb,KAAKxE,KAAKwwqB,OAAS,WAChCp+O,EAAa5tb,KAAKxE,KAAKwwqB,OAAS,YAIhCx8C,EAAKx0B,SAAW2nB,EAAKg9B,aAAeh9B,EAAKrmjB,eACzC6U,GAAe31E,KAAKwwqB,OAAS,UAAWxwqB,KAAKwwqB,OAAS,WACtDp+O,GAAgBpyb,KAAKwwqB,OAAS,OAAQxwqB,KAAKwwqB,OAAS,QAASxwqB,KAAKwwqB,OAAS,aAG3Ep+O,EAAa5tb,KAAKxE,KAAKwwqB,OAAS,WAChCp+O,EAAa5tb,KAAKxE,KAAKwwqB,OAAS,YAGxCxwqB,KAAK21E,YAAYA,GAAa,GAC9B31E,KAAK21E,YAAYy8W,GAAc,IAEnCloJ,EAAQ7uS,UAAUs3O,SAAW,WACzB,IAAIl4K,KACAwa,EAAej1E,KAAKM,OAAOqzX,YAC/B,GAAqC,iBAAzB3zX,KAAKM,OAAc,QAC3B,SAEJ,IAAK,IAAIlC,EAAK,EAAG+yqB,EAAiBl8lB,EAAc72E,EAAK+yqB,EAAe10qB,OAAQ2B,IAAM,CAC9E,IAAIyf,EAAOszpB,EAAe/yqB,GAC1B,cAAeyf,GACX,IAAK,SACD48C,EAAMj2D,KAAKxE,KAAKoxqB,cAAcpxqB,KAAKy6D,MAAM58C,KACzC,MACJ,IAAK,SACD48C,EAAMj2D,KAAKxE,KAAKoxqB,cAAcvzpB,IAC9B,MACJ,QACI48C,EAAMj2D,KAAKxE,KAAKssG,QAAQzuF,KAGpC,OAAO48C,GAEXyvO,EAAQ7uS,UAAUixG,QAAU,SAAU+kkB,GAClC,IAAIxzpB,EAAO7d,KAAKuwqB,gBAAgBc,EAAW5kpB,MAC3C,OAAO5O,EAAOnf,EAAOmf,EAAMA,EAAMwzpB,GAAcA,GAEnDnnY,EAAQ7uS,UAAU+1qB,cAAgB,SAAU3rc,GACxC,OAAOzlO,KAAKuwqB,gBAAgB9qc,KAAeh5M,KAAMg5M,EAAUniO,GAAItD,KAAKwwqB,OAAS,IAAM/qc,IASvFykE,EAAQ7uS,UAAUs6E,YAAc,SAAUlb,EAAOu7D,GAC7C,IAAK,IAAI53H,EAAK,EAAGm1S,EAAU94O,EAAOr8D,EAAKm1S,EAAQ92S,OAAQ2B,IAAM,CACzD,IAAIyf,EAAO01R,EAAQn1S,GACf4C,EAAUhB,KAAKgB,QAAQ2B,cAAc,IAAMkb,GAC3C7c,GACAhB,KAAK2zX,QAAQh+S,YAAY30E,EAAQqT,cAAe2hH,KAI5Dk0K,EAAQ7uS,UAAUw1qB,oBAAsB,SAAU5wqB,GAC9C,IAAI+znB,EAAOh0nB,KAAKM,OACZgxqB,EAAMtxqB,KAAKwwqB,OAGf,GAFA9xqB,EAAOuB,GAAQ44B,QAAQ,IACvBm7lB,EAAKxtmB,Q1DvIa,e0DuIgBvmB,IAC9BA,EAAK44B,OAGT,QAASp7B,EAAkBwC,EAAK4d,OAAS5d,EAAK4d,KAAKva,IAC/C,KAAKguqB,EAAM,SACPt9C,EAAKjznB,QACL,MACJ,KAAKuwqB,EAAM,QACPt9C,EAAK9rM,YACL,MACJ,KAAKopP,EAAM,UACPt9C,EAAK9vN,UACL,MACJ,KAAKotQ,EAAM,UACPt9C,EAAKy8B,YACL,MACJ,KAAK6gB,EAAM,OACPt9C,EAAK08B,YACL,MACJ,KAAK4gB,EAAM,UACPt9C,EAAKu8B,eACL,MACJ,KAAK+gB,EAAM,UACHrxqB,EAAKi7G,cAAc/zG,OAAO7D,KAAOguqB,EAAM,iBACvCtxqB,KAAKovJ,SAET,MACJ,KAAKkihB,EAAM,iBACP,IAAIC,EAAavxqB,KAAKM,OAAOU,QAAQ2B,cAAc,YAC/CqK,EAAIukqB,EAAW3lqB,wBAAwBc,IACvCK,EAAIwkqB,EAAW3lqB,wBAAwBY,KACvC2sC,EAAYl5C,EAAKi7G,cAAc/zG,OACnC6F,EAAIukqB,EAAW3lqB,wBAAwBc,IAAM6kqB,EAAWn9pB,UACxD4/mB,EAAKs9B,oBAAoBvkpB,EAAGC,EAAGmsC,KAI3C+wP,EAAQ7uS,UAAU+hb,aAAe,SAAUv8a,GACtB,SAAbA,EAAEswF,QACFnxF,KAAKgxqB,uBAGb9mY,EAAQ7uS,UAAUmsF,kBAAoB,SAAU3mF,GACxCA,EAAEswF,SAAWnxF,KAAKu/B,iBAAoBv/B,KAAKM,OAAOqzX,UAGlD3zX,KAAKgB,SACLuD,EAAOvE,KAAKgB,SAEhBhB,KAAK+rG,WAETm+L,EAAQ7uS,UAAUs/H,aAAe,SAAU95H,GACrB,KAAdA,EAAEinB,SACF9nB,KAAKovJ,UAGb86I,EAAQ7uS,UAAU+zJ,OAAS,WACvBpvJ,KAAKM,OAAO8uJ,OAAOpvJ,KAAK+wqB,cAAc/zqB,QAE1CktS,EAAQ7uS,UAAU41qB,gBAAkB,WAC5BjxqB,KAAK+wqB,gBACL/wqB,KAAK+wqB,cAAc/zqB,MAAQgD,KAAKM,OAAOy0nB,eAAe13nB,MAG9D6sS,EAAQ7uS,UAAUg7d,UAAY,WACtBr2d,KAAK+wqB,gBACL/wqB,KAAKwxqB,aAAe,IAAIn+B,GAAUrzoB,KAAK+wqB,eACvCxrqB,GAAanB,IAAIpE,KAAK+wqB,cAAe,QAAS/wqB,KAAK26H,aAAc36H,MACjEA,KAAKwxqB,aAAan7M,cAG1BnsL,EAAQ7uS,UAAUk8d,YAAc,WACxBv3d,KAAK+wqB,gBACLxrqB,GAAahB,OAAOvE,KAAK+wqB,cAAe,QAAS/wqB,KAAK26H,cACtD36H,KAAKwxqB,aAAaj6M,gBAG1BrtL,EAAQ7uS,UAAUqB,iBAAmB,WAC7BsD,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAOslF,GAAGm1jB,GAAmB/6oB,KAAK+rG,OAAQ/rG,MAC/CA,KAAKM,OAAOslF,GAAGi4iB,GAAiB79nB,KAAKwnF,kBAAmBxnF,MACxDA,KAAKM,OAAOslF,GAAGq1jB,GAA4Bj7oB,KAAKixqB,gBAAgB31qB,KAAK0E,OACrEA,KAAKM,OAAOslF,GAAG8ljB,GAAqB1roB,KAAKgxqB,oBAAqBhxqB,MAC9DA,KAAKM,OAAOslF,GAAGsljB,GAAuBlroB,KAAKgxqB,oBAAqBhxqB,MAChEA,KAAKM,OAAOslF,GAAGq1jB,GAA4Bj7oB,KAAKo9a,aAAcp9a,MAC9DA,KAAKM,OAAOslF,GAAGw3iB,GAAkBp9nB,KAAKgxqB,oBAAqBhxqB,QAE/DkqS,EAAQ7uS,UAAUuB,oBAAsB,WAChCoD,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAO0lF,IAAI+0jB,GAAmB/6oB,KAAK+rG,QACxC/rG,KAAKM,OAAO0lF,IAAI63iB,GAAiB79nB,KAAKwnF,mBACtCxnF,KAAKM,OAAO0lF,IAAIi1jB,GAA4Bj7oB,KAAKixqB,iBACjDjxqB,KAAKM,OAAO0lF,IAAI0ljB,GAAqB1roB,KAAKgxqB,qBAC1ChxqB,KAAKM,OAAO0lF,IAAIkljB,GAAuBlroB,KAAKgxqB,qBAC5ChxqB,KAAKM,OAAO0lF,IAAIi1jB,GAA4Bj7oB,KAAKo9a,cACjDp9a,KAAKM,OAAO0lF,IAAIo3iB,GAAkBp9nB,KAAKgxqB,uBAK3C9mY,EAAQ7uS,UAAUkkC,cAAgB,WAC9B,MAAO,WAEJ2qQ,KC1SP5/M,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAsBxC8mlB,GAAgC,SAAUtmlB,GAE1C,SAASsmlB,EAAeC,EAAYpwmB,GAChC,IAAIvhE,EAAQorF,EAAO7pF,KAAKtB,KAAM0xqB,EAAYpwmB,IAAmBthE,KAM7D,OALAD,EAAM2/D,cACN3/D,EAAMO,OAASoxqB,EACf3xqB,EAAMwloB,QAAUjkkB,EAChBvhE,EAAM4xqB,eAAiB,IAAI53C,GAAsBh6nB,EAAMO,QACvDP,EAAMrD,mBACCqD,EA4IX,OApJAuqF,GAAUmnlB,EAAgBtmlB,GAa1BsmlB,EAAep2qB,UAAU0ioB,YAAc,WACnC,IAAI78nB,EAAMC,EAAc,OAASkC,UAAW,iBACxCy1L,EAAW33L,EAAc,OAASkC,UAAW,qBAC7CuuqB,EAAiB94e,EACrB,GAAI94L,KAAKM,OAAO28nB,mBAAoB,CAChC,IAAI40C,EAAO1wqB,EAAc,OAASkC,UAAW,0BACzCyuqB,EAAO3wqB,EAAc,OAASkC,UAAW,2BAC7Cy1L,EAASn3L,YAAYkwqB,GACrB/4e,EAASn3L,YAAYmwqB,GACrB9xqB,KAAK+xqB,cAAgBF,EACrB7xqB,KAAK4xqB,eAAiBE,EACtBF,EAAiBE,EAEjBtmqB,GAAQkb,WACRkrpB,EAAeltqB,MAAMqV,UAAY,UAErC7Y,EAAIS,YAAYm3L,GAChB94L,KAAKk+nB,SAASh9nB,GACgB,MAA1BlB,KAAKM,OAAOqtpB,WACZ3tpB,KAAKM,OAAOU,QAAQkE,aAAahE,EAAKlB,KAAKM,OAAOqtpB,YAGlD3tpB,KAAKM,OAAOU,QAAQW,YAAYT,IAMxCuwqB,EAAep2qB,UAAU8ioB,YAAc,WAClBn+nB,KAAKg9nB,WAAtB,IAEI/8jB,EADWjgE,KAAKq+nB,mBAAmB,iBAClB17nB,cAAc,YAC/BqvqB,EAAQ7wqB,EAAc,SAE1B,GADA8+D,EAAMt+D,YAAYqwqB,GACdhyqB,KAAKM,OAAO28nB,mBAAoB,CAChC,IAAIg1C,EAAchymB,EAAMr+D,WAAU,GAClC5B,KAAK+xqB,cAAcpwqB,YAAYswqB,GAC/BjyqB,KAAKiyqB,YAAcA,EACnBjyqB,KAAK4xqB,eAAejwqB,YAAYs+D,GAChC17D,EAAO07D,EAAMt9D,cAAc,aAC3B,IAAI89nB,EAAazgoB,KAAKM,OAAOq+nB,mBAAmBh8nB,cAAc,oBAAoBA,cAAc,YAAaf,WAAU,GACvHq+D,EAAM/6D,aAAau7nB,EAAUxgkB,EAAMt9D,cAAc,UACjD3C,KAAK4+nB,YAAY6B,GAErBzgoB,KAAKs+nB,SAASr+jB,IAElBwxmB,EAAep2qB,UAAU62qB,qBAAuB,SAAUrxqB,EAAGo/D,EAAOkymB,EAAQC,GACxE,IAAItgqB,EAAQ9R,KAAKM,OAAOijE,sBAAsB/kE,MAAQwB,KAAKM,OAAOijE,WAAavjE,KAAKM,OAAO0uU,gBACvFqjW,EAAYryqB,KAAK2xqB,eAAehlW,UAChC2lW,EAAU70qB,EAAkB00qB,GAAUnyqB,KAAK2xqB,eAAe38C,aAC1Dh1nB,KAAK2xqB,eAAe38C,WAAWm9C,EAAQC,GACvC75Y,EAAO96R,EAAkB00qB,GAAUnyqB,KAAK2xqB,eAAe14C,aAAannnB,EAAOjR,GAAKb,KAAK0/D,YACrF1/D,KAAK2xqB,eAAe14C,aAAannnB,EAAOjR,GAAKb,KAAK0/D,WAAYyymB,EAAQC,GACtEG,EAAW/xqB,SAASyE,yBACpButqB,EAAc,IAAI56C,GAAY53nB,KAAKuloB,QAAS,KAAMvloB,KAAKM,QAC3DkyqB,EAAYxxqB,QAAUG,EAAc,MAAQkC,UAAW,iBACvD,IAAK,IAAIovqB,EAAO,EAAG5wqB,EAAMwwqB,EAAU51qB,OAAQg2qB,EAAO5wqB,EAAK4wqB,IAAQ,CAC3D,IAAI/xmB,EAAM63N,EAAKk6Y,GACf,GAAK/xmB,EAAL,CAGA,IAAIsoU,EAAKwpS,EAAYzmkB,OAAOrrC,EAAK4xmB,GACjCC,EAAS5wqB,YAAYqnY,IAEzB/oU,EAAM+xmB,MAAMrwqB,YAAY4wqB,GACxBvyqB,KAAK0/D,WAAa7+D,GAEtB4wqB,EAAep2qB,UAAU62D,QAAU,SAAUrxD,GAWzC,GAVIb,KAAKM,OAAO28nB,qBACZ14nB,EAAOvE,KAAKg9nB,YACZh9nB,KAAK+9nB,cACL/9nB,KAAKm+nB,cACLn+nB,KAAKiyqB,YAAYD,MAAMhwqB,UAAY,GACnChC,KAAKkyqB,qBAAqBrxqB,EAAGb,KAAKiyqB,YAAa,EAAGjyqB,KAAKM,OAAO28nB,qBAElEj9nB,KAAK87P,WAAWk2a,MAAMhwqB,UAAY,GAClChC,KAAKkyqB,qBAAqBrxqB,EAAGb,KAAK87P,WAAY97P,KAAKM,OAAO28nB,oBAEtDj9nB,KAAKM,OAAO28nB,mBAAoB,CAChC,IAAIy1C,EAAY1yqB,KAAK+xqB,cAChBW,EAAUhhoB,eACXghoB,EAAUhuqB,MAAMqR,OAAS/V,KAAK87P,WAAWpqN,aAAe,MAGhE1xC,KAAK2yqB,YAETlB,EAAep2qB,UAAUu3qB,WAAa,WAElC,IAAIC,EACAC,EAAaD,EAAa7yqB,KAAKM,OAAOU,QAAQ2B,cAAc,iBAAiBA,cAAc,YAAYf,WAAU,GACjH5B,KAAKM,OAAO28nB,qBACZ41C,EAAa7tmB,GAAc8tmB,EAAY9yqB,KAAKM,OAAO28nB,oBACnDj9nB,KAAKiyqB,YAAY9oW,aAAa2pW,EAAY9yqB,KAAKiyqB,YAAYtvqB,cAAc,cAE7E3C,KAAK87P,WAAWqtE,aAAa0pW,EAAY7yqB,KAAK6+nB,eAC9C7+nB,KAAK4+nB,YAAYi0C,IAErBpB,EAAep2qB,UAAU03qB,cAAgB,SAAU9yqB,GAC/CD,KAAKgzqB,gBAAgB/yqB,EAAKgS,OAAOvN,MAAMsR,MAAQzT,EAAWtC,EAAK+V,OAC3DhW,KAAKM,OAAOumnB,eAAiC,WAAhB5mnB,EAAKkxF,QAClCnxF,KAAKizqB,uBAAuBjzqB,KAAK87P,aAGzC21a,EAAep2qB,UAAUs3qB,SAAW,SAAU9xqB,QAChC,IAANA,IAAgBA,GAAM2L,KAAMxM,KAAKM,OAAOm0C,aAAa73B,WAAW5Q,aACpEhM,KAAK87P,WAAWznP,cAAcrI,WAAanL,EAAE2L,MAEjDilqB,EAAep2qB,UAAU23qB,gBAAkB,SAAU/gqB,GACjD,IAAIihqB,EAAOlzqB,KAAKM,OAAO28nB,mBACvB,OAAIi2C,GAAQA,EAAOjhqB,EACRjS,KAAKiyqB,YAAYtvqB,cAAc,YAAYyX,SAASnI,GAExDjS,KAAK6+nB,cAAczknB,SAASnI,EAAQihqB,IAE/CzB,EAAep2qB,UAAUownB,wBAA0B,WAC/CzrnB,KAAKkyD,WAETu/mB,EAAep2qB,UAAUqB,iBAAmB,WACxCsD,KAAKM,OAAOslF,GAAGgliB,GAAiB5qnB,KAAK4yqB,WAAY5yqB,MACjDA,KAAKM,OAAOslF,GAAG8liB,GAAoB1rnB,KAAK+yqB,cAAe/yqB,MACvDA,KAAKM,OAAOslF,G3D6BA,S2D7BW5lF,KAAK2yqB,SAAU3yqB,MACtCA,KAAKM,OAAOslF,GAAG6liB,GAAyBzrnB,KAAKyrnB,wBAAyBzrnB,OAE1EyxqB,EAAep2qB,UAAUuB,oBAAsB,WAC3CoD,KAAKM,OAAO0lF,IAAI4kiB,GAAiB5qnB,KAAK4yqB,YACtC5yqB,KAAKM,OAAO0lF,IAAI0liB,GAAoB1rnB,KAAK+yqB,eACzC/yqB,KAAKM,OAAO0lF,I3DuBA,S2DvBYhmF,KAAK2yqB,UAC7B3yqB,KAAKM,OAAO0lF,IAAIyliB,GAAyBzrnB,KAAKyrnB,0BAElDgmD,EAAep2qB,UAAU43qB,uBAAyB,SAAUjB,GACxD,IAAInvC,EAAQ7ioB,KAAKM,OAAOu/nB,iBACpBgD,GAASmvC,IACTA,EAAMttqB,MAAMsR,MAAQ6snB,EAAMn+nB,MAAMsR,QAGjCy7pB,GACTh1C,IC5KEnyiB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAkBxCwolB,GAAqC,SAAUholB,GAE/C,SAASgolB,IACL,IAAIpzqB,EAAmB,OAAXorF,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAEhE,OADAD,EAAMiB,QAAUG,EAAc,MAAQkC,UAAW,gBAAiBI,OAASmO,KAAM,WAAYo/G,SAAU,QAChGjxH,EAiBX,OArBAuqF,GAAU6olB,EAAqBholB,GAM/BgolB,EAAoB93qB,UAAUwB,SAAW,SAAUkvB,EAAOvvB,EAAMqgE,GAC5D,IAAIx/D,EAGJ,OAFAA,EAAOI,EAAkBo/D,EAAOn2D,MACgEm2D,EAAO4yjB,WAAnG5yjB,EAAO9wC,MAAQ,OAAgC,iBAAhB8wC,EAAOn2D,KAAoBm2D,EAAOn2D,KAAKkP,cAAgB,IACnFpZ,EAAKqgE,EAAO4yjB,YAAcjznB,EAAKqgE,EAAO4yjB,YAAYpynB,GAAO,IAEpE81qB,EAAoB93qB,UAAUsqoB,SAAW,SAAUploB,EAAM0iE,EAAMzmE,EAAMkH,GACjE,IAAIm5D,EAASoG,EAAKpG,OAClB,KAAMA,EAAOgqD,gBAAkBhqD,EAAOm9jB,qBAAuBn9jB,EAAOo9jB,sBAChE,OAAO,EAEX,IAAInne,EAAUj2F,EAAO6klB,YAAYz+kB,EAAK+9iB,UAEtC,OADA3hjB,GAAe9+D,EAAMuyJ,EAAQ9D,GAAGxyJ,EAAKqgE,EAAO4yjB,YAAazvnB,KAAKM,OAAQwyJ,EAAQ9mI,YACvE,GAEJmnpB,GACT7tC,ItgB/BE8tC,GAA2B,WAC3B,SAASA,EAAU9yqB,EAAQiloB,GACvBvloB,KAAKM,OAASA,EACdN,KAAKuloB,QAAUA,EACfvloB,KAAKtD,mBAsFT,OApFA02qB,EAAU/3qB,UAAUkkC,cAAgB,WAChC,MAAO,aAEX6zoB,EAAU/3qB,UAAUg4qB,eAAiB,WACjC,IAAItzqB,EAAQC,KACRszqB,EAAUtzqB,KAAKuloB,QAAQ/jkB,WAAW,uBAClCj7D,EAAW,IAAI4sqB,GAAoBnzqB,KAAKM,OAAQN,KAAKuloB,UACxDvsB,GAASkiB,QAASliB,GAASsiB,eAAgBtiB,GAASoiB,cAAch8nB,QAAQ,SAAUsH,GACjF,OAAO4sqB,EAAQ9nC,gBAAgB9koB,EAAMH,KAEzCvG,KAAKuzqB,eAAiB,IAAI9B,GAAezxqB,KAAKM,OAAQN,KAAKuloB,SAC3DvloB,KAAKuzqB,eAAex1C,cACpB/9nB,KAAKuzqB,eAAep1C,cACpBn+nB,KAAKuloB,QAAQvuO,SAAS,iBAAkBh3Z,KAAKuzqB,gBAC7C,IAAIvkhB,EAAK,WACLjvJ,EAAMyzqB,qBACNzzqB,EAAMO,OAAO0lF,IAAIukiB,GAAWv7d,IAEhChvJ,KAAKM,OAAOslF,GAAG2kiB,GAAWv7d,EAAIhvJ,MAC9BA,KAAKM,OAAOslF,GAAG2kiB,GAAWvqnB,KAAKuzqB,eAAerhnB,QAASlyD,KAAKuzqB,iBAEhEH,EAAU/3qB,UAAUm4qB,mBAAqB,WACrC,IAAIzzqB,EAAQC,KACZqlE,GAAgBrlE,KAAKM,OAAOo/D,WAAY,SAAU7C,GAC9C,IACIn2D,GADa3G,EAAMO,OAAOo0nB,iBAAiB73jB,EAAO9wC,YAChCrlB,KACtBm2D,EAAO8klB,qBAAsB3lnB,OAAQj8B,EAAM0zqB,kBAAkB52mB,EAAO7gC,OAAQt1B,KAC5Em2D,EAAOwE,eACPxE,EAAO8klB,qBAAsBlyB,WAAY5yjB,EAAO4yjB,YAAc5yjB,EAAO9wC,WAG7EqnpB,EAAU/3qB,UAAUo4qB,kBAAoB,SAAUz3oB,EAAQt1B,GACtD,GAAIjJ,EAAkBiJ,IAA2B,iBAAXs1B,EAClC,OAAOA,EAEX,IAAIj/B,EACJ,OAAQ2J,GACJ,IAAK,SACD3J,GAAQi/B,OAAQA,GAChB,MACJ,IAAK,OACDj/B,GAAQ2J,KAAMA,EAAMg7D,SAAU1lC,GAC9B,MACJ,IAAK,WACDj/B,GAAQ2J,KAAM,WAAYg7D,SAAU1lC,GAG5C,OAAOj/B,GAEXq2qB,EAAU/3qB,UAAUmsF,kBAAoB,SAAU3mF,GAC9C,GAAIA,EAAEswF,SAAWnxF,KAAKu/B,gBAAtB,CAGI9hC,EAAkBuC,KAAKuzqB,iBACvBvzqB,KAAKqzqB,iBAETrzqB,KAAKwzqB,qBACLxzqB,KAAKuzqB,eAAerhnB,UACpB,IAAIwhnB,EAAS,IAAIr4C,GAA6Br7nB,KAAKM,QAEnB,IADnB,IAAI66nB,GAA2Bn7nB,KAAKM,QACtCqsU,UAAUlwU,QAAiBi3qB,EAAOp5b,WACzCt6O,KAAKM,OAAOyN,OAAOqva,SAG3Bg2P,EAAU/3qB,UAAUqB,iBAAmB,WAC/BsD,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAOslF,GAAG0kiB,GAAYtqnB,KAAKqzqB,eAAgBrzqB,MAChDA,KAAKM,OAAOslF,GAAG6kiB,GAAUzqnB,KAAKwnF,kBAAmBxnF,QAErDozqB,EAAU/3qB,UAAUuB,oBAAsB,WAClCoD,KAAKM,OAAO0mF,cAGhBhnF,KAAKuzqB,eAAe32qB,sBACpBoD,KAAKM,OAAO0lF,IAAIskiB,GAAYtqnB,KAAKqzqB,gBACjCrzqB,KAAKM,OAAO0lF,IAAIukiB,GAAWvqnB,KAAKuzqB,eAAerhnB,SAC/ClyD,KAAKM,OAAO0lF,IAAIykiB,GAAUzqnB,KAAKwnF,qBAEnC4rlB,EAAU/3qB,UAAUiX,QAAU,WAC1BtS,KAAKpD,sBACL2H,EAAOvE,KAAKM,OAAOU,QAAQ2B,cAAc,mBAEtCywqB,KugB9FPO,GAAsC,WACtC,SAASA,EAAqB3yqB,EAASgS,GACnC,IAAIjT,EAAQC,KACZA,KAAK4zqB,WAAY,EACjB5zqB,KAAK03D,WAAY,EACjB13D,KAAKgT,WACLhT,KAAK6zqB,cACDxtd,IACInxB,MAAO,SAAU7hK,EAAM1M,GACnB,IAAIja,EAAM2mB,EAAK3mB,IAAM3M,EAAM+zqB,cAAcpnqB,IAEzC,OADAia,EAAKotpB,QAAUrnqB,GAAO,EACfA,EAAO3M,EAAMiT,QAAQssO,WAAa,GAAM,GAEnDnpO,KAAM,KAEViwM,MACIlxB,MAAO,SAAU7hK,EAAM1M,GACL5mB,EAAMiT,QAAQyH,UAAU6S,aAAtC,IACI5gB,EAAM2mB,EAAK1mB,OAEf,OADAga,EAAKotpB,QAAU1gpB,EAAK1mB,QAAU5M,EAAM+zqB,cAAcnnqB,OAC3CD,EAAO3M,EAAMiT,QAAQssO,WAAa,GAAMv/O,EAAMiT,QAAQssO,WAAa,GAC3EnpO,KAAM,KAEb1J,OACIyoL,MAAO,SAAU7hK,EAAM1M,GACnB,IAAIla,EAAQ4mB,EAAK5mB,MAEjB,OADAka,EAAKotpB,QAAUtnqB,EAAQ1M,EAAM+zqB,cAAcrnqB,MACpCA,EAAQ1M,EAAM+zqB,cAAc99pB,OAASjW,EAAM+zqB,cAAcrnqB,OACjE0J,KAAM,KAEb3J,MACI0oL,MAAO,SAAU7hK,EAAM1M,GACnB,IAAIna,EAAO6mB,EAAK7mB,KAEhB,OADAma,EAAKotpB,QAAUvnqB,EAAO,EACfA,EAAOzM,EAAM+zqB,cAAc99pB,OAASjW,EAAM+zqB,cAActnqB,MAChE2J,KAAM,MAGjBnW,KAAKgB,QAAUA,EACfhB,KAAKgT,QAAUA,EA8CnB,OA5CA2gqB,EAAqBt4qB,UAAU24qB,QAAU,SAAU1umB,EAAU2umB,GACzD,IAAIl0qB,EAAQC,KACZA,KAAK8zqB,cAAgB9zqB,KAAKgT,QAAQyH,UAAU7O,wBAC5CrG,GAAanB,IAAIpE,KAAKgT,QAAQyH,UAAW,QAAS,WAAc,OAAO1a,EAAM6zqB,WAAY,GAAS5zqB,MAClGuF,GAAanB,IAAIpE,KAAKgT,QAAQyH,UAAW,SAAUza,KAAKk0qB,qBAAqB5umB,EAAU2umB,GAAkBj0qB,OAE7G2zqB,EAAqBt4qB,UAAU65L,MAAQ,SAAU1/J,GAC7C,IAAI7O,EAAO3mB,KAAK6zqB,aAAar+oB,GAC7B,OAAO7O,EAAKuuK,MAAMl1L,KAAKgB,QAAQ4K,wBAAyB+a,IAE5DgtpB,EAAqBt4qB,UAAU64qB,qBAAuB,SAAU5umB,EAAU2umB,GACtE,IAAIl0qB,EAAQC,KACRsphB,EAAU,EACVp4L,EAAW,EACXijV,EAAex0qB,EAAS2lE,EAAU,KAClC8umB,EAAcz0qB,EAAS2lE,EAAU,IACrC,OAAO,SAAUzkE,GACb,IAAI6L,EAAM7L,EAAEsG,OAAOgF,UACfK,EAAO3L,EAAEsG,OAAO6E,WAChBwpB,EAAY8zf,EAAU58gB,EAAM,OAAS,KACzC8oB,EAAY07T,IAAa1kV,EAAOgpB,EAAY07T,EAAW1kV,EAAO,QAAU,OACxE88gB,EAAU58gB,EACVwkV,EAAW1kV,EACX,IAAImU,EAAU5gB,EAAM8zqB,aAAar+oB,GACjC,IAAkD,IAA9Cz1B,EAAMiT,QAAQy0D,KAAKlpE,QAAQoiB,EAAQxK,MAAvC,CAGA,IAAI++K,EAAQn1L,EAAMm1L,MAAM1/J,GAIxB,GAHI7U,EAAQozpB,SACRE,EAAgBl0qB,EAAMiB,QAAS2f,EAAS6U,GAAa9oB,IAAKA,EAAKF,KAAMA,IAErE0oL,EAAO,CACP,IAAIlmC,EAAKmlhB,EACY,MAAjBxzpB,EAAQxK,OACR64I,EAAKolhB,GAETplhB,GAAKx5H,UAAWA,EAAW6+oB,SAAU1zpB,EAAShV,QAAUe,IAAKA,EAAKF,KAAMA,KAE5EzM,EAAM6zqB,WAAY,KAG1BD,EAAqBt4qB,UAAUi5qB,cAAgB,SAAUt3qB,GACrDgD,KAAKgT,QAAQssO,WAAatiP,GAEvB22qB,KCrFPY,GAA0C,WAC1C,SAASA,EAAyBj0qB,GAC9BN,KAAKw0qB,YACLx0qB,KAAKi0L,SACLj0L,KAAKxD,QACLwD,KAAKiuL,UACLjuL,KAAKM,OAASA,EACdN,KAAK4iB,MAAQ5iB,KAAKM,OAAOixD,aACzBvxD,KAAKy0qB,kBAAoBz0qB,KAAKM,OAAOwmnB,cAAgB,IAAIyU,GAAoBv7nB,KAAKM,QAAU,IAAI04nB,GAAkBh5nB,KAAKM,QAkK3H,OAhKAi0qB,EAAyBl5qB,UAAU49nB,aAAe,SAAUz8nB,EAAMk4qB,GAC9D,IAAI30qB,EAAQC,KACR2mB,EAAO+tpB,EAAWC,YAAcD,EAAWC,aAAe30qB,KAAK2sU,UAC/D70T,EAAQ6O,EAAKktpB,cAA2C,MAA3BltpB,EAAKktpB,aAAa19pB,KAC/C85I,EAAQn4I,IAAS6O,EAAKiupB,UAAajupB,EAAKkupB,SAAgClupB,EAAKspI,KAA1BtpI,EAAKmupB,SAAS7khB,KACjElxJ,KAEAguW,GADY/sW,KAAK4iB,MAAMutI,SACbnwJ,KAAK+0qB,gBAAgB9khB,IAC/B+khB,KACJh1qB,KAAKi1qB,mBAAmBP,EAAWtof,aAC/BpsL,KAAKM,OAAOw2nB,4BACZnwmB,EAAKuupB,aAAa91qB,QAAQ,SAAUpC,GAC5B+C,EAAMo1qB,iBAAiBn4qB,KACvB+C,EAAMk0L,MAAMj3L,GAAS+C,EAAM00qB,kBAAkB36C,YAAY/5nB,EAAMk0L,MAAMj3L,OAIjF2pB,EAAKuupB,aAAa91qB,QAAQ,SAAUpC,GAChC,IAAK+C,EAAMo1qB,iBAAiBn4qB,GAAQ,CAChC,IAAIu7R,EAAOx4R,EAAM00qB,kBAAkBx7C,aAAaz8nB,GAC5Cm4qB,YAAahupB,EAAMjB,WAAY3lB,EAAMq1qB,cAAcp4qB,EAAOR,KAE1Dm/B,IAAWtvB,KAAKC,IAAIisR,EAAK97R,OAAQsD,EAAM6iB,MAAMutI,UAAY,EACxDpwJ,EAAMo1qB,iBAAiBpoU,EAAQ,MAChChtW,EAAMk0L,MAAM84K,EAAQ,IAAMx0E,EAAKl3R,MAAM,EAAGs6B,IAEvC57B,EAAMo1qB,iBAAiBpoU,EAAQ,MAChChtW,EAAMk0L,MAAM84K,EAAQ,IAAMx0E,EAAKl3R,MAAMs6B,IAGzC57B,EAAMO,OAAOm0nB,cAAc12jB,QAAQthE,SAAWqb,GAAS/X,EAAMk0L,MAAMj3L,KACnE+C,EAAMk0L,MAAMj3L,GAAS+C,EAAMs1qB,eAAet1qB,EAAMk0L,MAAMj3L,GAAQA,IAElE+B,EAAOyF,KAAKjJ,MAAMwD,EAAQgB,EAAMk0L,MAAMj3L,IAClC+C,EAAMo1qB,iBAAiBn4qB,IACvBg4qB,EAAaxwqB,KAAKxH,KAG1B2pB,EAAKuupB,aAAeF,EAQpB,OANIh1qB,KAAKM,OAAOwmnB,cACZ9mnB,KAAKM,OAAO0uU,gBAAwB,QAAIjwU,EAAO64B,IAAI,SAAUm5C,GAAK,OAAOA,EAAEv0E,OAG3EwD,KAAKM,OAAO0uU,gBAAkBjwU,EAAO64B,IAAI,SAAUm5C,GAAK,OAAOA,EAAEv0E,OAE9DuC,GAEXw1qB,EAAyBl5qB,UAAU05qB,gBAAkB,SAAU9khB,GAC3D,OAAQA,GAAQA,EAAO,GAAW,EAAPA,IAE/BskhB,EAAyBl5qB,UAAU4nR,QAAU,SAAU+wO,GACnD,OAAOA,EAAQ,GAAM,EAAIA,EAAQ,GAAKA,EAAQ,GAAK,GAEvDugL,EAAyBl5qB,UAAU85qB,iBAAmB,SAAUn4qB,GAC5D,OAAOA,KAASgD,KAAKi0L,OAEzBsgf,EAAyBl5qB,UAAUsxU,QAAU,WACzC,OACI18K,KAAMjwJ,KAAK4iB,MAAM0wO,YACjB4hb,aAAcl1qB,KAAK+0qB,gBAAgB/0qB,KAAK4iB,MAAM0wO,aAC9C99N,UAAW,OACX8/oB,cAAet1qB,KAAKM,OAAOo3nB,2BAGnC68C,EAAyBl5qB,UAAU+5qB,cAAgB,SAAUG,EAAK/4qB,EAAMmjG,QACvD,IAATA,IAAmBA,GAAO,GAC9B,IACI61kB,EAAOD,EAAM,GAAM,EACnBtjqB,GAFOjS,KAAKijR,QAAQsyZ,GAEJ,GAAKv1qB,KAAK4iB,MAAMutI,SACpC,OAAOxwD,IAAS61kB,EAAOvjqB,EAAQA,KAAWjS,KAAK4iB,MAAMutI,SAAW,IAEpEokhB,EAAyBl5qB,UAAUo6qB,iBAAmB,SAAUr7oB,GAC5D,IAAIr6B,EAAQC,UACI,IAAZo6B,IAAsBA,EAAUp6B,KAAKM,OAAOq+nB,mBAAmB/hnB,YACnE,IAAImwV,KACA3vT,EAA6B,EAArBhjB,EAAQpuB,WAChB1O,EAAOgB,OAAOhB,KAAK0C,KAAKw0qB,UACxB5nC,EAASxymB,EAAQxuB,wBAAwBoK,MAC7ConC,EAAQ/wC,KAAK0T,IAAI/f,KAAKw0qB,SAASl3qB,EAAKb,OAAS,GAAKmwoB,EAAQxvlB,GAC1D,IAAIs4nB,EAAWlqqB,GAAQkb,SAAW,EAAIkmnB,EAASA,EAAS,EACpDpgoB,EAAO4wC,EAAQwvlB,GAAoB,IAAVxvlB,EAAcs4nB,EAAW,GAUtD,OATAp4qB,EAAK8+B,KAAK,SAAUzwB,EAAQ2mJ,EAAMxgJ,GAC9B,IAAI6jqB,EAAUr+oB,OAAO3rB,GACjBiqqB,EAAY71qB,EAAMy0qB,SAAS7oqB,GAK/B,OAJayxC,EAAQs4nB,GAAYE,GAAappqB,EAAOkpqB,GAAYE,GAE7D7oU,EAAQvoW,KAAKmxqB,GAEVnpqB,EAAOkpqB,EAAWE,IAEtB7oU,GAEXwnU,EAAyBl5qB,UAAU45qB,mBAAqB,SAAU9+mB,GAC9D,IAAInG,GAAS,SAAU,UAAW,UAAW,YAAa,YAAa,WAAY,aAAc,WAC5F5zB,KAAK,SAAUp/B,GAAS,OAAOm5D,IAAWn5D,IAM/C,OALIgzD,IACAhwD,KAAKi0L,SACLj0L,KAAKxD,QACLwD,KAAKiuL,WAEFj+H,GAEXuknB,EAAyBl5qB,UAAUw6qB,kBAAoB,WACnD,IAAI91qB,EAAQC,KACRygE,EAAM,EACVzgE,KAAKw0qB,YACL,IAAIsB,EAAO91qB,KAAKM,OAAOm0nB,cAAc12jB,QAAQthE,OACzC01nB,EAAOnynB,KAAKM,OAAOy9D,QACnBs8kB,EAAOloB,EAAK11nB,OAGhBuD,KAAKM,OAAOm0nB,cAAc12jB,QAAQ3+D,QAAQ,SAAU6+D,EAAG0sF,GAAK,OAAO5qJ,EAAMy0qB,SAAS7phB,GAAmC,IAAL,EAAxB5qJ,EAAMy0qB,SAAS7phB,EAAI,MAC3GnsJ,MAAMjD,MAAM,KAAMiD,MAAM67oB,IAAOzinB,IAAI,WAAc,OAAO6oC,MAAUrhE,QAAQ,SAAU40f,EAAO73f,GACvF63f,GAAgB8hL,EAChB/1qB,EAAMy0qB,SAASxgL,IAAsC,EAA5Bj0f,EAAMy0qB,SAASxgL,EAAQ,KALpC,SAAUn3b,GAAU,OAAOA,EAAOrlC,UAC5Cz3B,EAAMO,OAAOm0nB,cAAco9B,kBAAmFh1lB,EAAOrlC,QAAtEz3B,EAAMO,OAAOm0nB,cAAc12jB,QAAQx/D,QAAQs+D,EAAO9wC,OAAS,GAIjDtnB,CAAU0tnB,EAAKh2nB,IAAM44B,SAASo9lB,EAAKh2nB,GAAG6Z,MAAO,IAAM,MAGtHu+pB,EAAyBl5qB,UAAUg6qB,eAAiB,SAAU10pB,EAASqze,GACnE,IAAIj0f,EAAQC,KACR+1qB,EAAep1pB,EAAQ,GACvB43Q,KAMJ,OALAj6R,OAAOhB,KAAK0C,KAAKi0L,OAAO70L,QAAQ,SAAU/B,GAClCi6B,OAAOj6B,GAAO22f,IACdz7N,EAAOA,EAAKh+Q,OAAOxa,EAAMk0L,MAAM52L,OAGlC04qB,GAAgBA,EAAa19C,WAAcrkI,EAAQ,GAAM,EACnDrze,EAEJ3gB,KAAKg2qB,aAAar1pB,EAAS43Q,IAEtCg8Y,EAAyBl5qB,UAAU26qB,aAAe,SAAUr1pB,EAAS43Q,GACjE,IAAIw9Y,EAAep1pB,EAAQ,GACvBhV,EAAS,EACb,GAAIoqqB,GAAgBA,EAAa19C,UAC7B,OAAO13mB,EAgBX,OAdgBA,EAAQyb,KAAK,SAAUskC,GACnC,OAAO63N,EAAKn8P,KAAK,SAAU65oB,EAAMhkqB,GAC7B,IAAI+vD,EAAMi0mB,QAA4B96qB,IAApB86qB,EAAKz5qB,KAAKuvB,OAAuBkqpB,EAAKz5qB,KAAKuvB,QAAU20C,EAAIlkE,KAAKuvB,OAC5EkqpB,EAAKz5qB,KAAKa,MAAQqjE,EAAIlkE,KAAKa,IAI/B,OAHI2kE,IACAr2D,EAASsG,GAEN+vD,QAIXrhD,EAAQg9D,QACRh9D,EAAU3gB,KAAKg2qB,aAAar1pB,EAAS43Q,EAAKl3R,MAAMsK,KAE7CgV,GAEX4zpB,EAAyBl5qB,UAAU8koB,QAAU,WACzC,IAAIpgoB,EAAQC,KACRu4R,KAEJ,OADAj6R,OAAOhB,KAAK0C,KAAKi0L,OAAO70L,QAAQ,SAAU/B,GAAO,OAAOk7R,EAAOA,EAAKh+Q,OAAOxa,EAAMk0L,MAAM52L,MAChFk7R,GAEJg8Y,KChLPjqlB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAuBxCurlB,GAAwC,SAAU/qlB,GAElD,SAAS+qlB,EAAuB51qB,EAAQiloB,GACpC,IAAIxloB,EAAQorF,EAAO7pF,KAAKtB,KAAMM,EAAQiloB,IAAYvloB,KAalD,OAZAD,EAAM+5W,WAAa,EACnB/5W,EAAM4toB,eACN5toB,EAAMo2qB,cAAe,EACrBp2qB,EAAMioa,SAAW,YAAa,YAAa,WAAY,cACvDjoa,EAAMwlQ,WACNxlQ,EAAMq2qB,cACNr2qB,EAAMi0T,WAAa,IAAIqiX,GACvBt2qB,EAAMu2qB,cACNv2qB,EAAMs6H,WAAY,EAClBt6H,EAAMwloB,QAAUA,EAChBxloB,EAAMw2qB,cAAc,MACpBx2qB,EAAMy2qB,WAAaz2qB,EAAMy9nB,UAClBz9nB,EA8RX,OA7SAuqF,GAAU4rlB,EAAwB/qlB,GAiBlC+qlB,EAAuB76qB,UAAU8ioB,YAAc,WAC3Cn+nB,KAAK4kF,OAAS5kF,KAAKuloB,QAAQ/jkB,WAAW,mBAAmBynkB,YAAYnb,GAAWjvU,QAChF1zN,EAAO9vF,UAAU8ioB,YAAY78nB,KAAKtB,MAClCA,KAAKg0T,WAAW/zP,MAAQjgE,KAAK87P,WAC7B97P,KAAKg0T,WAAW55R,QAAUp6B,KAAKo6B,QAAUp6B,KAAKg9nB,WAAWpgnB,WACzD5c,KAAKg0T,WAAWyiX,cAAcz2qB,KAAKM,OAAOyV,QAC1C/V,KAAKg0T,WAAW0iX,oBAChB12qB,KAAKg0T,WAAWjiT,QAAQrN,MAAMwP,SAAW,WACzC,IAAIyiqB,EAAiB32qB,KAAKM,OAAOijE,sBAAsBC,KAAgBxjE,KAAKM,OAAOijE,WAAWA,WAAWE,QACrGi2jB,GACAj/mB,UAAWza,KAAKo6B,QAASklN,WAAoC,EAAxBt/O,KAAK42qB,iBAAsBD,cAAeA,EAC/ElvmB,KAAMznE,KAAKM,OAAOw2nB,4BAA8B,IAAK,MAAQ,MAEjE92nB,KAAK62qB,SAAW,IAAIlD,GAAqB3zqB,KAAKg0T,WAAWjiT,QAAS2nnB,IAEtEw8C,EAAuB76qB,UAAU8loB,YAAc,SAAU1B,GACrDz/nB,KAAK87P,WAAWn6P,YAAY89nB,GAC5Bz/nB,KAAKg0T,WAAW8iX,YAAY,EAAG,IAEnCZ,EAAuB76qB,UAAU07qB,eAAiB,SAAUC,GACxD,GAAIh3qB,KAAKm2qB,cAAgBn2qB,KAAKM,OAAO0mF,YACjChnF,KAAKm2qB,cAAe,MADxB,CAIAn2qB,KAAKq6H,UAAYr6H,KAAKo6B,UAAYv0B,EAAQrF,SAASmlH,cAAe,eAAiB3lH,KAAKo6B,UAAY55B,SAASmlH,cAC7G,IAAIh/F,EAAOqwpB,EAAW3C,SAClB4C,EAAWj3qB,KAAK2toB,YAAc3toB,KAAKk3qB,gBAAgBF,EAAWxhpB,UAAW7O,EAAMqwpB,EAAWrrqB,QAC1F3L,KAAKm3qB,WAA4B,MAAdxwpB,EAAKxQ,MAAgBnW,KAAKm3qB,SAASjC,aAAahoqB,aAAe+pqB,EAAS/B,aAAahoqB,YACtF,MAAdyZ,EAAKxQ,MAAgBnW,KAAKm3qB,SAAS7B,cAAcpoqB,aAAe+pqB,EAAS3B,cAAcpoqB,cAG/FlN,KAAKM,OAAO8spB,uBAAuBptpB,KAAKM,OAAOw2nB,2BAA6BmgD,EAAS3B,kBACrFt1qB,KAAKM,OAAOixD,aAAa+hM,YAAc2jb,EAASrC,WAAaqC,EAASpC,SAAWoC,EAASnC,SAAS7khB,KAAOgnhB,EAAShnhB,KACnHjwJ,KAAKM,OAAOyN,OAAOkpqB,EAAS36qB,OAAS8vL,YAAa,gBAAiBuof,YAAasC,OAEpFf,EAAuB76qB,UAAU24f,MAAQ,SAAUuhL,GAC/C,OAAOv1qB,KAAKw2qB,WAAWrB,iBAAiBI,IAE5CW,EAAuB76qB,UAAU67qB,gBAAkB,SAAU1hpB,EAAW7O,EAAM9lB,GAC1E,IAAIu2qB,KACAC,GAAa7hpB,UAAWA,EAAWq+oB,aAAcltpB,EAAM4+O,QAAS1kQ,GACpEw2qB,EAASpnhB,KAAOjwJ,KAAKs3qB,eAAez2qB,EAAE6L,IAAK2qqB,GAC3CA,EAASnC,aAAekC,EAAap3qB,KAAKw2qB,WAAWzB,gBAAgBsC,EAASpnhB,MAC9EonhB,EAASxC,UAAY70qB,KAAKw2qB,WAAWrB,iBAAiBiC,EAAWC,EAASrjL,QAC1E,IAAIlgP,EAAS9zQ,KAAKu3qB,aAAaF,GAU/B,OATAA,EAASnC,aAAepha,EACxBuja,EAASzC,UAAY9ga,EAAO9sO,OAAO,SAAU/e,GAAO,OAAoC,IAA7BmvpB,EAAW74qB,QAAQ0pB,KACzE4mW,MAAM7uX,KAAKg0f,MAAM14f,KAAK0E,OAC3Bq3qB,EAAS/6qB,MAAS+6qB,EAASzC,UAAYyC,EAASxC,SAAYz3P,GAAe6uM,GAC3EorD,EAASvC,SAAWuC,EAASzC,UAAa3khB,KAAM5jJ,KAAKC,IAAI,EAAG+qqB,EAASpnhB,MAAsB,SAAdz6H,EAAuB,GAAK,QACzG6hpB,EAAS/B,cAA8B,MAAd3upB,EAAKxQ,KAAenW,KAAKw2qB,WAAWf,mBAAqBz1qB,KAAKM,OAAOo3nB,yBAC1F13nB,KAAKM,OAAOw2nB,4BAA4C,MAAdnwmB,EAAKxQ,OAC/CkhqB,EAAS/6qB,MAAQ2vnB,IAEdorD,GAEXnB,EAAuB76qB,UAAUk8qB,aAAe,SAAU5wpB,GACtD,IAEI6wpB,EAFAz3qB,EAAQC,KACRiS,EAAQ0U,EAAKuupB,aAAavupB,EAAKqte,OAE/ByjL,EAAMxlqB,EACN3F,EAAMD,KAAKC,IACXygW,EAA6B,SAAnBpmV,EAAK6O,WAAwBlpB,EAAI2F,EAAO,KAAMA,IAASA,IAAU3F,EAAI2F,EAAQ,EAAG,GAAIA,EAAOA,EAAQ,GAEjH,OADA86V,EAAUA,EAAQ/lU,OAAO,SAAU/e,EAAKuroB,GAAO,OAAOzmT,EAAQxuW,QAAQ0pB,KAASuroB,IAC3ExzpB,KAAKm3qB,SAASjC,aAAahoqB,aAAe6/V,EAAQ7/V,WAC3C6/V,IAEPpmV,EAAKkupB,UAAgC,SAAnBlupB,EAAK6O,WAAwBx1B,KAAK03qB,WAAWD,MAC/D1qU,EAAU/sW,KAAKw2qB,WAAWzB,gBAAgBpupB,EAAKspI,OAEnD88M,EAAQ3wU,KAAK,SAAUnU,EAAKuroB,GACxB,IAAIz0pB,EAASkpB,IAAQloB,EAAM43qB,iBAI3B,OAHI54qB,IACAy4qB,EAAOhkB,GAEJz0pB,SAEE5D,IAATq8qB,IACAzqU,EAAUA,EAAQ1rW,MAAM,EAAGm2qB,EAAO,GACf,IAAf7wpB,EAAKqte,OAAkC,IAAnBjnJ,EAAQtwW,QAAgBuD,KAAKw2qB,WAAWrB,iBAAiBpoU,EAAQ,GAAK,KAC1FA,GAAWA,EAAQ,GAAK,EAAGA,EAAQ,MAGpCA,IAEXmpU,EAAuB76qB,UAAU0koB,cAAgB,SAAU54nB,EAAQywqB,EAAU/2qB,GAEzE,IAAI8lB,EAAO9lB,EAAE8zqB,YAAYd,cAAoD,MAApChzqB,EAAE8zqB,YAAYd,aAAa19pB,MAAgBnW,KAAK2toB,YAAY19e,MACjGjwJ,KAAK2toB,YAAY19e,OAASpvJ,EAAE8zqB,YAAY1khB,KAAOjwJ,KAAK2toB,YAAc9soB,EAAE8zqB,YACxE30qB,KAAKm3qB,SAAWn3qB,KAAKm3qB,UAAYt2qB,EAAE8zqB,YACnC,IAEI3+pB,EAFA6hqB,EAAUlxpB,EAAK2upB,cAAc,GAAM,EACnCwC,EAAU93qB,KAAK+3qB,gBAAgBF,GAE/B/ja,EAASntP,EAAKuupB,aACdl1qB,KAAKM,OAAOm0nB,cAAc12jB,QAAQthE,QAClCuD,KAAKg4qB,iBAET,IAAIrplB,EAAY3uF,KAAKi4qB,cAAcj4qB,KAAKo6B,QAAQjuB,UAAWnM,KAAKo6B,QAAQxuB,wBAAwBmK,OAAQ4Q,GAKxG,GAJA3mB,KAAKg0T,WAAW8iX,YAAYgB,EAASnplB,GACjC3uF,KAAKM,OAAOw2nB,4BACZ92nB,KAAK4kF,OAAOovO,WAAW8iX,YAAYgB,EAAS,GAE5C93qB,KAAKM,OAAOw2nB,2BAA4B,CACxC,IAAI6a,EAAShrnB,EAAK2upB,cAClBt/pB,EAAQhW,KAAK+3qB,gBAAgBpmC,EAAOA,EAAOl1oB,OAAS,IAAMuD,KAAK+3qB,gBAAgBpmC,EAAO,GAAK,GAAK,GAChG3xoB,KAAK4kF,OAAOovO,WAAWkkX,gBAAgBliqB,GAO3C,GALAhW,KAAKg0T,WAAWkkX,gBAAgBliqB,EAAOhW,KAAKM,OAAOw2nB,4BACnDvynB,EAAO4C,IACPA,EAAShG,EAAc,UAChBQ,YAAYi2qB,GACnB53qB,KAAK87P,WAAWn6P,YAAYwF,GACxBnH,KAAKM,OAAOm0nB,cAAc12jB,QAAQthE,OAAQ,CAC1C,GAAuB,OAAnBkqB,EAAK6O,UAAoB,CACzB,IAAI+/oB,EAAMv1qB,KAAKulQ,QAAQvlQ,KAAK23qB,kBAAoB33qB,KAAK85W,WACrD95W,KAAKm2qB,cAAe,EACpB,IAAI54nB,EAAOv9C,KAAKo6B,QAAQjuB,UACxBnM,KAAKo6B,QAAQjuB,UAAYoxC,EAAOg4nB,EAEpCv1qB,KAAKm4qB,mBACLn4qB,KAAK62qB,SAASvC,cAAct0qB,KAAK0vC,UAAUokO,EAAOA,EAAOr3Q,OAAS,IAAMuD,KAAK0vC,UAAUokO,EAAO,GAAK,IAEvG9zQ,KAAKm3qB,SAAWxwpB,EACZ3mB,KAAKq6H,WACLr6H,KAAKo6B,QAAQl4B,SAGrBg0qB,EAAuB76qB,UAAU+8qB,YAAc,SAAUv3qB,GAChDpD,EAAkBoD,EAAEie,SACrB9e,KAAK8e,MAAQje,EAAEie,MACf9e,KAAKq4qB,QAAUhsqB,KAAKwmB,KAAKhyB,EAAEie,MAAQ9e,KAAKM,OAAOixD,aAAa4+F,WAEhEnwJ,KAAKw2qB,WAAWvB,mBAAmBp0qB,EAAEurL,cAChC,UAAW,YAAa,YAAa,WAAY,aAAc,eAAWjxL,GAC1EihC,KAAK,SAAUp/B,GAAS,OAAO6D,EAAEurL,cAAgBpvL,KAClDgD,KAAKg4qB,iBAETh4qB,KAAKm4qB,mBACLn4qB,KAAKs4qB,oBAAoBz3qB,EAAEurL,cAE/B8pf,EAAuB76qB,UAAU88qB,iBAAmB,WAChD,IAAIniqB,EAAQhW,KAAKM,OAAOw2nB,2BACpB92nB,KAAK+3qB,gBAAgB/3qB,KAAKM,OAAOy9D,QAAQthE,OAASuD,KAAKM,OAAOm0nB,cAAc12jB,QAAQthE,OAAS,GAAK,KAAO,OAC7GuD,KAAKg0T,WAAWmkX,iBAAiBn4qB,KAAKulQ,QAAQvlQ,KAAK23qB,kBAAmB3hqB,GAClEhW,KAAKM,OAAOw2nB,4BACZ92nB,KAAK4kF,OAAOovO,WAAWmkX,iBAAiB,EAAGniqB,IAGnDkgqB,EAAuB76qB,UAAUi8qB,eAAiB,SAAU/5nB,EAAM52B,GAC9D,IAAI5mB,EAAQC,KACR2/I,EAAQ3/I,KAAK23qB,iBACb1nhB,EAAO,EACCjwJ,KAAKulQ,QAAQ5lH,GAAS3/I,KAAK85W,WAUvC,OATA95W,KAAKs2qB,WAAWl6oB,KAAK,SAAUzwB,GAC3B,IAAIgqqB,EAAUr+oB,OAAO3rB,GACjB24B,EAASiZ,EAAOx9C,EAAMwlQ,QAAQ55P,IAAYgqqB,IAAYh2hB,GAASpiG,EAAOx9C,EAAMwlQ,QAAQ55P,GAKxF,OAJI24B,IACA3d,EAAKqte,MAAQ2hL,EAAU,GAAM,EAAI,EAAI,EACrC1lhB,EAAO5jJ,KAAKC,IAAI,EAAGD,KAAK0T,IAAIhgB,EAAMy2qB,WAAWvzZ,QAAQ0yZ,GAAU51qB,EAAMs4qB,WAElE/zoB,IAEJ2rH,GAEXimhB,EAAuB76qB,UAAU48qB,cAAgB,SAAU16nB,EAAMg7nB,EAAS5xpB,EAAM6xpB,QAC/Dr9qB,IAATwrB,KACAA,GAASspI,KAAMjwJ,KAAKs3qB,eAAe/5nB,QAC9B23nB,aAAel1qB,KAAKw2qB,WAAWzB,gBAAgBpupB,EAAKspI,OAE7D,IAAI+jW,GAASrte,EAAKuupB,aAAa,IAAM,GAAK,EACtCvmlB,EAAY3uF,KAAK0vC,UAAUskd,GAC3BykL,EAAez4qB,KAAK0vC,UAAU/oB,EAAKuupB,aAAavupB,EAAKuupB,aAAaz4qB,OAAS,IAC3E+7qB,IACA7xpB,EAAO3mB,KAAKm3qB,UAEhB,IAAIp4qB,EAAS4vF,EAAYpxC,EACrBv9C,KAAK0vC,UAAUskd,EAAQ,GAAKykL,EAAgBl7nB,EAAOg7nB,EAAWv4qB,KAAK0vC,UAAUskd,EAAQ,GAAKrla,EAC1F+plB,EAAc14qB,KAAKulQ,QAAQ5+O,EAAKuupB,aAAavupB,EAAKuupB,aAAaz4qB,OAAS,IACxEuD,KAAKo2qB,WAAWzvpB,EAAKuupB,aAAa,IAItC,OAHIn2qB,EAAS25qB,EAAc14qB,KAAKulQ,QAAQvlQ,KAAK23qB,oBACzC54qB,GAAWA,EAAS25qB,EAAe14qB,KAAKulQ,QAAQvlQ,KAAK23qB,mBAElD54qB,GAEXm3qB,EAAuB76qB,UAAUq0C,UAAY,SAAUskd,GACnD,OAAO3nf,KAAK0T,IAA0B,EAAtB/f,KAAKulQ,QAAQyuP,GAA0C,EAA9Bh0f,KAAKulQ,QAAQvlQ,KAAK24qB,YAE/DzC,EAAuB76qB,UAAUu9qB,UAAY,WACzC,IAAI74qB,EAAQC,KACZ,OAAO,SAAUgB,EAAS2f,EAAS6U,EAAW30B,GAC1C,IAAIiX,EAAyB,MAAjB6I,EAAQxK,KAChBzJ,EAAM3M,EAAMo3qB,SAAS5xa,QAAUxlQ,EAAMo3qB,SAAS5xa,QAAQ74P,IAAM,KAC5DqJ,EAAShW,EAAMq6B,QAAQxuB,wBAAwBmK,OAC/ChJ,EAAIhN,EAAMg4qB,gBAAgBjgqB,EAAQ/X,EAAMy2qB,WAAWf,mBAAmB,GAAK,EAAI11qB,EAAMo3qB,SAAS7B,cAAc,GAAK,GACjHtoqB,EAAIjN,EAAMk4qB,cAAcp3qB,EAAE6L,IAAKqJ,EAAQ+B,GAASpL,IAAQ7L,EAAE6L,IAAM3M,EAAMo3qB,cAAWh8qB,GAAW,GAChG4E,EAAMi0T,WAAW8iX,YAAY/pqB,EAAGV,KAAK0T,IAAI/S,EAAGjN,EAAMwlQ,QAAQxlQ,EAAM44qB,YAC5D54qB,EAAMO,OAAOw2nB,4BACb/2nB,EAAM6kF,OAAOovO,WAAW8iX,YAAY/pqB,EAAG,KAInDmpqB,EAAuB76qB,UAAUk7qB,cAAgB,SAAUpgnB,GACvD,IAAIp2D,EAAQC,KACZA,KAAKM,OAAO61D,GAAQo0jB,GAAWvqnB,KAAKo4qB,YAAap4qB,MACjDA,KAAKM,OAAO61D,GAAQ81jB,GAAqBjsnB,KAAKg/nB,mBAAoBh/nB,MAClEA,KAAKgoa,QAAQ5oa,QAAQ,SAAU9C,GAAS,OAAOyD,EAAMO,OAAO61D,GAAQ75D,EAAQ,SAAUyD,EAAM00oB,cAAe10oB,KAC3G,IAAIivJ,EAAK,WACLjvJ,EAAM82qB,SAAS7C,QAAQ,SAAUgD,GAAc,OAAOj3qB,EAAMg3qB,eAAeC,IAAgBj3qB,EAAM64qB,aACjG74qB,EAAMO,OAAO0lF,IAAIwkiB,GAAcx7d,IAEnChvJ,KAAKM,OAAOslF,GAAG4kiB,GAAcx7d,EAAIhvJ,OAErCk2qB,EAAuB76qB,UAAUw9qB,aAAe,WAC5C,OAAO74qB,KAAKM,OAAOixD,aAAa4+F,UAAY,GAEhD+lhB,EAAuB76qB,UAAUu7qB,eAAiB,WAC9C,OAAO52qB,KAAK64qB,eAAiB74qB,KAAKM,OAAOy/D,gBAE7Cm2mB,EAAuB76qB,UAAUq8qB,WAAa,SAAUzlqB,GACpD,IAAI6mqB,EAAc94qB,KAAK23qB,iBACvB,OAAO1lqB,GAAS6mqB,GAAe7mqB,IAAU6mqB,EAAc,GAE3D5C,EAAuB76qB,UAAUs8qB,eAAiB,WAC9C,OAAOtrqB,KAAKwmB,KAAK7yB,KAAK8e,MAAQ9e,KAAK64qB,iBAEvC3C,EAAuB76qB,UAAU08qB,gBAAkB,SAAU/jL,GACzD,OAAyC,EAAlCh0f,KAAKw2qB,WAAWhC,SAASxgL,IAEpCkiL,EAAuB76qB,UAAUoioB,kBAAoB,WACjD,OAAO,IAAI82C,GAAyBv0qB,KAAKM,SAE7C41qB,EAAuB76qB,UAAUi9qB,oBAAsB,SAAUninB,GACzDn2D,KAAKgoa,QAAQ5rY,KAAK,SAAUp/B,GAAS,OAAOA,IAAUm5D,MACtDn2D,KAAKm2qB,aAA0C,IAA3Bn2qB,KAAKo6B,QAAQjuB,UACjCnM,KAAKo6B,QAAQjuB,UAAY,IAGjC+pqB,EAAuB76qB,UAAUo5oB,cAAgB,SAAU5zoB,GAEvDb,KAAKM,OAAO0G,eAAgBuqD,cAAgB+hM,YAAa,KAAO,IAEpE4ib,EAAuB76qB,UAAU8koB,QAAU,WACvC,OAAOngoB,KAAKw2qB,WAAWr2C,WAE3B+1C,EAAuB76qB,UAAU+loB,cAAgB,SAAUnvnB,GACvD,IACI8mqB,GADO/4qB,KAAKm3qB,SAASjC,aACJ,GAAK,GAAKl1qB,KAAK64qB,eACpC,OAAO74qB,KAAKM,OAAO+goB,cAAcpvnB,EAAQ8mqB,IAE7C7C,EAAuB76qB,UAAUimoB,mBAAqB,SAAUrvnB,GAG5D,OAFWjS,KAAKm3qB,SAASjC,aACJ,GAAK,GAAKl1qB,KAAK64qB,eAClB5mqB,GAEtBikqB,EAAuB76qB,UAAU28qB,eAAiB,WAC9C,IAAIj4qB,EAAQC,KACR0gE,EAAM,EACNs4mB,EAAQh5qB,KAAK64qB,eACbl5hB,EAAQ3/I,KAAK23qB,iBACjB33qB,KAAK85W,WAAa95W,KAAKulQ,QAAQ5lH,GAC/B3/I,KAAK24qB,SAAWh5hB,EAAQ,GAAM,EAAIA,EAAQ,EAAIA,EAAQ,EACtD3/I,KAAKulQ,WAEL/mQ,MAAMjD,MAAM,KAAMiD,MAAMmhJ,IAAQ/nH,IAAI,WAAc,QAAS8oC,IACtDthE,QAAQ,SAAU40f,GACnB,IAAIr/V,GAAO50J,EAAMy2qB,WAAWvif,MAAM+/T,QAAcv3f,OAC5Cw8qB,EAAMl5qB,EAAM+e,MAAQk6pB,EACpBlspB,EAAOkne,KAASj0f,EAAMy2qB,WAAWvif,MACjCt/B,EAAM50J,EAAMO,OAAOy/D,eAAiBk5mB,GAAOjlL,IAAUr0W,EAAQs5hB,EAAMl5qB,EAAMO,OAAOy/D,eAAiBhgE,EAAM62qB,iBAG3G72qB,EAAMwlQ,QAAQyuP,IAAqC,EAA3Bj0f,EAAMwlQ,QAAQyuP,EAAQ,IAAUlne,EACxD/sB,EAAMq2qB,WAAWpiL,GAAoC,EAA3Bj0f,EAAMwlQ,QAAQyuP,EAAQ,KAEpDh0f,KAAKs2qB,WAAah4qB,OAAOhB,KAAK0C,KAAKulQ,SAE/BvlQ,KAAKM,OAAOw2nB,4BACZ92nB,KAAKw2qB,WAAWX,qBAGxBK,EAAuB76qB,UAAU69qB,sBAAwB,WACrDl5qB,KAAKw2qB,WAAWX,oBAChB71qB,KAAKm4qB,oBAEFjC,GACTz5C,IAKE08C,GAAuC,SAAUhulB,GAEjD,SAASgulB,EAAsB74qB,EAAQiloB,GACnC,IAAIxloB,EAAQorF,EAAO7pF,KAAKtB,KAAMM,EAAQiloB,IAAYvloB,KAIlD,OAHAD,EAAMi0T,WAAa,IAAIqiX,GACvBt2qB,EAAMq5qB,IAAM,IAAI7E,GAAyBx0qB,EAAMO,QAC/CP,EAAMO,OAAOslF,GAAGqmiB,GAAqB,SAAUprnB,GAAK,MAA2C,MAApCA,EAAE8zqB,YAAYd,aAAa19pB,KAAepW,EAAM8koB,YAAc,MAAS9koB,GAC3HA,EAoBX,OA1BAuqF,GAAU6ulB,EAAuBhulB,GAQjCgulB,EAAsB99qB,UAAU8ioB,YAAc,WAC1Cn+nB,KAAKo5qB,IAAIvD,oBACT71qB,KAAKM,OAAO8spB,uBAAuBptpB,KAAKo5qB,IAAI3D,iBAAiBz1qB,KAAKg9nB,WAAWpgnB,aAC7EuuE,EAAO9vF,UAAU8ioB,YAAY78nB,KAAKtB,MAClCA,KAAKg0T,WAAW/zP,MAAQjgE,KAAK87P,WAC7B97P,KAAKg0T,WAAW55R,QAAUp6B,KAAKg9nB,WAAWpgnB,WAC1C5c,KAAKg0T,WAAW55R,QAAQ11B,MAAMwP,SAAW,WACzClU,KAAKg0T,WAAWyiX,gBAChBz2qB,KAAKg0T,WAAW0iX,kBAAkB,aAEtCyC,EAAsB99qB,UAAU0koB,cAAgB,SAAU9/jB,GACtDjgE,KAAKg0T,WAAWjiT,QAAQpQ,YAAYs+D,IAExCk5mB,EAAsB99qB,UAAUwpoB,UAAY,WACxC7koB,KAAKo5qB,IAAIvD,oBACT71qB,KAAKM,OAAO8spB,uBAAuBptpB,KAAKo5qB,IAAI3D,iBAAiBz1qB,KAAKg9nB,WAAWpgnB,aAC7EuuE,EAAO9vF,UAAUwpoB,UAAUvjoB,KAAKtB,OAE7Bm5qB,GACT13C,IAKE40C,GAAuC,WACvC,SAASA,KAsBT,OApBAA,EAAsBh7qB,UAAUo7qB,cAAgB,SAAU1gqB,GACtD/V,KAAK+R,QAAU5Q,EAAc,OAASkC,UAAW,iBAAkBE,OAAQ,cAAgBhB,EAAWwT,KACtG/V,KAAK+R,QAAQpQ,YAAY3B,KAAKigE,OAC9BjgE,KAAKo6B,QAAQz4B,YAAY3B,KAAK+R,UAElCskqB,EAAsBh7qB,UAAUq7qB,kBAAoB,SAAUxiqB,QACzC,IAAbA,IAAuBA,EAAW,YACtClU,KAAK8mB,YAAc3lB,EAAc,OAASkC,UAAW,iBAAkBE,OAAQ,YAAc2Q,IAC7FlU,KAAKo6B,QAAQz4B,YAAY3B,KAAK8mB,cAElCuvpB,EAAsBh7qB,UAAUy7qB,YAAc,SAAUtopB,EAAQC,GAC5DzuB,KAAK+R,QAAQrN,MAAM2I,UAAY,aAAemhB,EAAS,OAASC,EAAS,OAE7E4npB,EAAsBh7qB,UAAU68qB,gBAAkB,SAAUliqB,EAAO2pF,GAC/D3/F,KAAK+R,QAAQrN,MAAMsR,MAAQA,EAAQA,EAAQ,KAAO2pF,EAAO,OAAS,IAEtE02kB,EAAsBh7qB,UAAU88qB,iBAAmB,SAAUpiqB,EAAQC,GACjEhW,KAAK8mB,YAAYpiB,MAAMqR,OAASA,EAAS,KACzC/V,KAAK8mB,YAAYpiB,MAAMsR,MAAQA,GAE5BqgqB,KC5XPgD,GAA+B,WAC/B,SAASA,EAAc/4qB,EAAQiloB,GAC3BvloB,KAAKM,OAASA,EACdN,KAAKuloB,QAAUA,EACfvloB,KAAKtD,mBA2CT,OAzCA28qB,EAAch+qB,UAAUkkC,cAAgB,WACpC,MAAO,iBAEX85oB,EAAch+qB,UAAUgwoB,oBAAsB,WAC1C,IAAIx9mB,EAAW7tB,KAAKuloB,QAAQ/jkB,WAAW,mBACnCxhE,KAAKM,OAAOw2nB,4BACZjpmB,EAASy9mB,YAAYxd,GAAWjvU,OAAQ,IAAIs6X,GAAsBn5qB,KAAKM,OAAQN,KAAKuloB,UAExF13mB,EAASy9mB,YAAYxd,GAAWqb,QAAS,IAAI+sC,GAAuBl2qB,KAAKM,OAAQN,KAAKuloB,UACtFvloB,KAAKs5qB,kBAETD,EAAch+qB,UAAUi+qB,eAAiB,WACrC,IAAIt5mB,EAAYhgE,KAAKM,OAAOy/D,eAC5B//D,KAAKu5qB,aAAev5qB,KAAKM,OAAOyV,OAASiqD,GACzC,IAAIjqD,EAA0B,EAAjB/V,KAAKu5qB,UACdzspB,EAAO9sB,KAAKM,OAAOixD,aAAa4+F,SACpCnwJ,KAAKM,OAAO0G,eAAgBuqD,cAAgB4+F,SAAUrjI,EAAO/W,EAASA,EAAS+W,KAAU,IAE7FuspB,EAAch+qB,UAAUqB,iBAAmB,WACnCsD,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAOslF,GAAGykiB,GAAarqnB,KAAKqroB,oBAAqBrroB,MACtDA,KAAKM,OAAOslF,GAAGmrkB,GAA2B/wpB,KAAKk5qB,sBAAuBl5qB,QAE1Eq5qB,EAAch+qB,UAAUuB,oBAAsB,WACtCoD,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAO0lF,IAAIqkiB,GAAarqnB,KAAKqroB,qBAClCrroB,KAAKM,OAAO0lF,IAAI+qkB,GAA2B/wpB,KAAKk5qB,yBAEpDG,EAAch+qB,UAAU69qB,sBAAwB,SAAUj5qB,GACtD,GAAID,KAAKM,OAAOw2nB,4BAA8C,WAAhB72nB,EAAKkxF,OAAqB,CACrDnxF,KAAKuloB,QAAQ/jkB,WAAW,mBAC9BynkB,YAAYnb,GAAWqb,SAAS+vC,0BAGjDG,EAAch+qB,UAAUiX,QAAU,WAC9BtS,KAAKpD,uBAEFy8qB,KChDPG,GAAkC,WAIlC,SAASA,EAAiBl5qB,GACtBN,KAAKM,OAASA,EA+KlB,OA7KAk5qB,EAAiBn+qB,UAAUo+qB,OAAS,SAAU71qB,EAAU3D,GACpD,IAAIy5qB,EACAj6C,EAaJ,GAXIA,EADAz/nB,KAAKM,OAAOo+nB,WACJ1+nB,KAAKM,OAAOq+nB,mBAAmBh8nB,cAAc,SAG7C3C,KAAKM,OAAOysoB,kBAAkBpqoB,cAAc,SAExD1C,EAAKygE,IAAMv/D,EAAc,MAAQkC,UAAW,qBACxCo8nB,EAAM98nB,cAAc,gBACpB88nB,EAAM98nB,cAAc,eAAemB,UAAUM,IAAI,UAErDq7nB,EAAMv6nB,aAAajF,EAAKygE,IAAK++jB,EAAM7inB,YACnC3c,EAAKygE,IAAI/+D,YAAY3B,KAAK25qB,eAAe/1qB,GAAU,IAC/C5D,KAAKM,OAAO28nB,mBAAoB,CAChC,IAAI/3jB,EAAOllE,KAAK45qB,kBAAkB35qB,EAAKygE,MAEnCg5mB,EADA15qB,KAAKM,OAAOo+nB,WACH1+nB,KAAKM,OAAOq+nB,mBAAmBh8nB,cAAc,oBAAoBA,cAAc,SAG/E3C,KAAKM,OAAOm0C,aAAa9xC,cAAc,qBAAqBA,cAAc,UAEhFuC,aAAaggE,EAAMw0mB,EAAO98pB,YACjC3c,EAAKygE,IAAI/9D,cAAc,iBAAiBa,aAAa,UAAWxD,KAAKM,OAAO6upB,0BAA4B,IACxGjqlB,EAAK1hE,aAAa,UAAW,IAAMxD,KAAKM,OAAOq3nB,oBAAoBl7nB,OAASuD,KAAKM,OAAO6upB,4BAC7D,SAAvBnvpB,KAAKM,OAAOyV,QACZ/V,KAAKM,OAAOyN,OAAO8rqB,SAI/BL,EAAiBn+qB,UAAUu+qB,kBAAoB,SAAU51qB,GACrD,IAAIkhE,EAAOlhE,EAAIpC,WAAU,GAIzB,OAHA5B,KAAKglE,cAAchhE,EAAKkhE,GACxBA,EAAKviE,cAAc,YAAYX,UAAYhC,KAAKM,OAAOq+nB,mBAClDh8nB,cAAc,oBAAoBA,cAAc,YAAYX,UAC1DkjE,GAEXs0mB,EAAiBn+qB,UAAUy+qB,iBAAmB,SAAUp5mB,EAAKi2M,GACzD,GAAI32Q,KAAKM,OAAO28nB,mBAAoB,CAChC,IAAIrymB,EAAMmK,SAAS2rC,EAAI7tD,aAAa,iBAAkB,IAClDusnB,EAAQp/nB,KAAKM,OAAOm0C,aAAa9xC,cAAc,oBAAoBA,cAAc,SACjF08nB,EAAQr/nB,KAAKM,OAAOm0C,aAAa9xC,cAAc,qBAAqBA,cAAc,SAClFo3qB,EAAO/5qB,KAAKM,OAAOq+nB,mBAAmBh8nB,cAAc,mBAAmBA,cAAc,SACrFsqoB,EAAOjtoB,KAAKM,OAAOq+nB,mBAAmBh8nB,cAAc,oBAAoBA,cAAc,SACtF3C,KAAKM,OAAOo+nB,YAAc9zmB,GAAO5qB,KAAKM,OAAOo+nB,aAC7C9zmB,GAAO5qB,KAAKM,OAAOo+nB,YAEnBU,EAAMj7nB,SAASu8D,GACfi2M,EAAKA,EAAGp8P,UAAUlZ,MAAMC,KAAK+9nB,EAAMjlnB,SAASwQ,GAAKppB,iBAAiB,kBAE7D69nB,EAAMl7nB,SAASu8D,GACpBi2M,EAAKA,EAAGp8P,UAAUlZ,MAAMC,KAAK89nB,EAAMhlnB,SAASwQ,GAAKppB,iBAAiB,kBAE7Du4qB,EAAK51qB,SAASu8D,GACnBi2M,EAAKA,EAAGp8P,UAAUlZ,MAAMC,KAAK2roB,EAAK7ynB,SAASwQ,GAAKppB,iBAAiB,kBAE5DyroB,EAAK9ooB,SAASu8D,KACnBi2M,EAAKA,EAAGp8P,UAAUlZ,MAAMC,KAAKy4qB,EAAK3/pB,SAASwQ,GAAKppB,iBAAiB,mBAGzE,OAAOm1Q,GAEX6ia,EAAiBn+qB,UAAUgkD,OAAS,SAAUz7C,EAAU3D,GACpD,IAAI+5qB,KAAe34qB,MAAMC,KAAKrB,EAAKygE,IAAIl/D,iBAAiB,iBACxDvB,EAAKygE,IAAI1+D,UAAY,GACrBg4qB,EAAYh6qB,KAAK85qB,iBAAiB75qB,EAAKygE,IAAKs5mB,GAC5C/5qB,EAAKygE,IAAI/+D,YAAY3B,KAAK25qB,eAAe/1qB,GAAU,EAAMo2qB,IACzD/5qB,EAAKygE,IAAI58D,UAAUM,IAAI,eACvBpE,KAAKi6qB,kBAAkBh6qB,EAAKygE,MAEhC84mB,EAAiBn+qB,UAAU4+qB,kBAAoB,SAAUv5mB,GACrD,IACIw5mB,EACA55X,EAFA3pC,EAAKj2M,EAAI9jD,WAGTgO,EAAMmK,SAAS2rC,EAAI7tD,aAAa,iBAAkB,IACtD,GAAI7S,KAAKM,OAAO28nB,mBAAoB,CAC5BrymB,EAAM5qB,KAAKM,OAAOo+nB,YAClBp+U,EAAOtgT,KAAKM,OAAOq+nB,mBACnBu7C,EAAO,oBAGP55X,EAAOtgT,KAAKM,OAAOm0C,aACnByloB,EAAO,oBAEX,IAAIC,EAAMxja,EAAG/0Q,WAAU,GACnB8+nB,OAAQ,EACRpgV,EAAK39S,cAAcu3qB,GAAM/1qB,SAASu8D,IAClCggkB,EAAQ1goB,KAAKM,OAAOihoB,qBAAqB32mB,GACzC5qB,KAAKo6qB,iBAAiB15C,EAAO/pX,EAAIwja,KAGjCz5C,EAAQ1goB,KAAKM,OAAO8goB,cAAcx2mB,GAClC5qB,KAAKo6qB,iBAAiB15C,EAAOy5C,EAAKxja,IAEtC+pX,EAAM/+nB,YAAYw4qB,GAClBz5C,EAAM58nB,UAAUM,IAAI,iBAG5Bo1qB,EAAiBn+qB,UAAU++qB,iBAAmB,SAAU15mB,EAAK18D,EAAKkhE,GAC9DxE,EAAI1+D,UAAY,GAChBhC,KAAKglE,cAAchhE,EAAKkhE,GACxBA,EAAKviE,cAAc,YAAYX,UAAYhC,KAAKM,OAAOq+nB,mBAClDh8nB,cAAc,oBAAoBA,cAAc,YAAYX,UACjEgC,EAAIR,aAAa,UAAWxD,KAAKM,OAAO6upB,0BAA4B,IACpEjqlB,EAAK1hE,aAAa,UAAWxD,KAAKM,OAAO00nB,aAAav4nB,OAASuD,KAAKM,OAAO28nB,mBAAqB,KAEpGu8C,EAAiBn+qB,UAAU2pE,cAAgB,SAAUhhE,EAAKkhE,GAEtD,IAAK,IADDD,EAAUjlE,KAAKM,OAAO28nB,mBACjB9goB,EAAI,EAAGA,EAAI8oE,EAAS9oE,IACzB+oE,EAAKviE,cAAc,MAAM2C,YAAY4/D,EAAKviE,cAAc,MAAMyX,SAAS,IAElEje,EAAI8oE,EAAb,IAAK,IAAiBpjE,EAAMmC,EAAIrB,cAAc,MAAMwiE,kBAAmBhpE,EAAI0F,EAAK1F,IAC5E6H,EAAIrB,cAAc,MAAM2C,YAAYtB,EAAIrB,cAAc,MAAMyX,SAASpW,EAAIrB,cAAc,MAAMwiE,kBAAoB,KAGzHq0mB,EAAiBn+qB,UAAUs+qB,eAAiB,SAAU/1qB,EAAU47lB,EAAQw6E,GACpE,IAAIhmD,EAAOh0nB,KAAKM,OACZw1qB,EAAO,EACP9xB,EAAYvmpB,EAAkBu2nB,EAAKoF,iBAAoB37nB,EAAkBu2nB,EAAKr4V,WAAiB,EAAJ,EAC3Fq4V,EAAKlN,gBACLgvD,EAAO9hD,EAAKS,cAAc12jB,QAAQthE,QAEtC,IAAIk6Q,EAAKx1Q,EAAc,MACnBkC,UAAW,0BACXI,OAAS4moB,SAAUrW,EAAK2D,oBAAoBl7nB,OAASu3nB,EAAKm7B,0BAA4B2mB,EAAO9xB,GAAU92oB,cAEvGumM,EAAOtyM,EAAc,QAAUmC,GAAI0wnB,EAAKhznB,QAAQsC,GAAK,WAAYD,UAAW,eAC5E48D,EAAQ9+D,EAAc,SAAWkC,UAAW,wBAAyBI,OAAS+vgB,YAAa,UAC/Fvzc,EAAMt+D,YAAYqynB,EAAK+Y,kBAAkBpqoB,cAAc,YAAYf,WAAU,IAC7E,IAAI69nB,EAAQt+nB,EAAc,SACtB6nY,EAAK7nY,EAAc,MACnBhF,EAAI,EAIR,IAHI6npB,GACAh7Q,EAAG9jY,aAAa/D,EAAc,MAAQkC,UAAW,wBAA0B2lY,EAAGpsX,YAE3EzgB,EAAI25qB,GACP9sS,EAAGrnY,YAAYR,EAAc,MAAQkC,UAAW,kBAChDlH,IAEJ,IAAI40E,EAAI,EAER,IADA50E,EAAI,EACIqjmB,GAAUzuhB,EAAIipmB,EAAUv9qB,QAAUN,EAAI63nB,EAAKgB,aAAav4nB,QAAWN,EAAI63nB,EAAKgB,aAAav4nB,QAAQ,CACrG,IAAIkmE,EAAO68hB,EAASw6E,EAAUjpmB,GAAGl+D,aAAa,WAAa,KACvD4tD,EAAMuzjB,EAAKgB,aAAa74nB,GACxBk+qB,EAAOl5qB,EAAc,MACrBkC,UAAW,YAAaI,OAASiB,MAAO,eAAiB+7D,EAAIpuB,UAAYouB,EAAIpuB,UAAY,IAAKg4lB,QAAW1nkB,GAAc,MAEvHlC,EAAIjpC,SACJ6ipB,EAAK14qB,YAAYiC,EAAS68D,EAAI/gE,MACT,gBAAjB+gE,EAAIinjB,SACJ2yD,EAAKv2qB,UAAUM,IAAI,eAEdq8D,EAAIz4B,UAAYy4B,EAAI6mjB,mBACzB3jnB,GAAU02qB,GAAO,kBAIrBA,EAAKv2qB,UAAUM,IAAI,UAEvB4kY,EAAGrnY,YAAY04qB,GACfl+qB,EAAIwmE,EAAOxmE,EAAI44B,SAAS4tC,EAAM,IAAMxmE,EAAI,EACxC40E,IAMJ,OAJA0ujB,EAAM99nB,YAAYqnY,GAClB/oU,EAAMt+D,YAAY89nB,GAClBhsb,EAAK9xM,YAAYs+D,GACjB02M,EAAGh1Q,YAAY8xM,GACRkjE,GAEX6ia,EAAiBn+qB,UAAUuB,oBAAsB,aAG1C48qB,KCrLPc,GAAiC,WAIjC,SAASA,EAAgBh6qB,GACrBN,KAAKM,OAASA,EAuBlB,OArBAg6qB,EAAgBj/qB,UAAUgkD,OAAS,SAAUz7C,EAAU3D,GACnDA,EAAKgjE,KAAKjhE,UAAY,GACtB/B,EAAKgjE,KAAKthE,YAAY3B,KAAK25qB,eAAe/1qB,EAAU3D,IACpDA,EAAKgjE,KAAKn/D,UAAUM,IAAI,qBACxBN,EAAU7D,EAAKygE,KAAM,cAAe,mBAExC45mB,EAAgBj/qB,UAAUs+qB,eAAiB,SAAU/1qB,EAAU3D,GAC3D,IACIwzM,EAAOtyM,EAAc,QAAUmC,GADxBtD,KAAKM,OAC4BU,QAAQsC,GAAK,WAAYD,UAAW,eAQhF,OAPAowM,EAAK9xM,YAAYiC,EAAS3D,EAAKs6qB,aAAa76qB,MACT,gBAA/BO,EAAKs6qB,aAAa7yD,UAClBznnB,EAAKgjE,KAAKn/D,UAAUM,IAAI,cAEvBnE,EAAKs6qB,aAAa7yD,UACnBznnB,EAAKgjE,KAAKn/D,UAAUM,IAAI,cAErBqvM,GAEX6me,EAAgBj/qB,UAAUuB,oBAAsB,aAGzC09qB,KCzBPE,GAAkC,WAIlC,SAASA,EAAiBl6qB,EAAQghE,GAC9BthE,KAAKM,OAASA,EACdN,KAAKshE,eAAiBA,EAClBthE,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAOslF,GAAG60lB,GAAsBz6qB,KAAKsS,QAAStS,MACnDA,KAAKM,OAAOslF,GAAGguiB,GAAgB5znB,KAAKsS,QAAStS,OA8FjD,OA5FAw6qB,EAAiBn/qB,UAAUq/qB,aAAe,WACtC16qB,KAAKqlH,KAAOrlH,KAAKshE,eAAeE,WAAW,iBAE/Cg5mB,EAAiBn/qB,UAAUo+qB,OAAS,SAAU71qB,EAAU3D,GACpDD,KAAKw/lB,QAAS,EACdx/lB,KAAK26qB,aAAa/2qB,EAAU3D,IAEhCu6qB,EAAiBn/qB,UAAUgkD,OAAS,SAAUz7C,EAAU3D,GACpDD,KAAKw/lB,QAAS,EACdx/lB,KAAK26qB,aAAa/2qB,EAAU3D,IAEhCu6qB,EAAiBn/qB,UAAUs/qB,aAAe,SAAU/2qB,EAAU3D,GAC1D,IAAI+znB,EAAOh0nB,KAAKM,OAChBN,KAAKwrlB,OAASrqlB,EAAc,OAASmC,GAAI0wnB,EAAKhznB,QAAQsC,GAAK,wBAC3D0wnB,EAAKhznB,QAAQW,YAAY3B,KAAKwrlB,QAC9BxrlB,KAAK06qB,eACL,IAAIxmqB,EAAWlU,KAAKM,OAAOU,QAAQ4K,wBAAwBmK,OAAS,KAC9DK,EAAG,SAAUC,EAAG,QAAYD,EAAG,SAAUC,EAAG,UAClDrW,KAAKkiE,UAAY,IAAI4iD,IACjBlgC,OAAQ5kF,KAAKw/lB,OAASx/lB,KAAKqlH,KAAKtxC,YAAY,iBAAmB9zE,EAAK26qB,gBAAgB,GAChF56qB,KAAKqlH,KAAKtxC,YAAY,gBAAiByxC,SAAS,EAAMhuF,SAAS,EAAMvkB,SAAU,gBACnFmnB,QAASp6B,KAAK25qB,eAAe/1qB,GAC7B+iH,eAAe,EACfK,eAAe,EACf9yG,SAAUA,EACVjS,MAAOjC,KAAK66qB,YAAYv/qB,KAAK0E,MAC7BgmH,eAAe,EAAMhwG,MAAO,QAAS7O,OAAQ6snB,EAAKhznB,QAAS4oH,mBAAqB5xF,OAAQ,QACxFmuF,UACQE,MAAOrmH,KAAK4vnB,SAASt0nB,KAAK0E,MAC1BomH,aAAehsF,QAASp6B,KAAKqlH,KAAKtxC,YAAY,cAAe9gE,SAAU,YAAa+qG,WAAW,KAEjGqI,MAAOrmH,KAAK4vnB,SAASt0nB,KAAK0E,MAAOomH,aAAenzG,SAAU,SAAUmnB,QAASp6B,KAAKqlH,KAAKtxC,YAAY,qBAE7G/zE,KAAKkiE,UAAU7rB,SAASr2C,KAAKwrlB,QAC7BrqhB,GAAiBnhE,KAAKkiE,UAAUlhE,UAEpCw5qB,EAAiBn/qB,UAAUu0nB,SAAW,SAAU/unB,GACxCb,KAAKqlH,KAAKtxC,YAAY,gBAAgBn+D,gBAAkB/U,EAAEsG,OAAO8zD,UAAU/qD,OAAO0F,cAClF5V,KAAK66qB,cAGL76qB,KAAKM,OAAO4ja,WAGpBs2Q,EAAiBn/qB,UAAUw/qB,YAAc,WACrC76qB,KAAKM,OAAOmwpB,YACZzwpB,KAAKsS,WAETkoqB,EAAiBn/qB,UAAUiX,QAAU,SAAUrS,GAC3CD,KAAKM,OAAOyN,OAAO+sqB,OACnB96qB,KAAKM,OAAOk/lB,QAAS,EACrBx/lB,KAAKM,OAAOyN,OAAOm9nB,OACflroB,KAAKwrlB,SAAWxrlB,KAAKkiE,UAAU8kB,cAC/BhnF,KAAKkiE,UAAU5vD,UACf/N,EAAOvE,KAAKwrlB,UAGpBgvF,EAAiBn/qB,UAAUs+qB,eAAiB,SAAU/1qB,GAOlD,IAAK,IANDownB,EAAOh0nB,KAAKM,OACZY,EAAMC,EAAc,OAASkC,UAAWrD,KAAKw/lB,OAAS,cAAgB,kBACtE/rZ,EAAOtyM,EAAc,QAAUmC,GAAI0wnB,EAAKhznB,QAAQsC,GAAK,WAAYD,UAAW,eAC5E48D,EAAQ9+D,EAAc,SAAWkC,UAAW,UAAWI,OAAS+vgB,YAAa,SAC7EisH,EAAQt+nB,EAAc,SACtBgxnB,EAAO6B,EAAKgB,aACP74nB,EAAI,EAAGA,EAAIg2nB,EAAK11nB,OAAQN,IAC7B,GAAKg2nB,EAAKh2nB,GAAGq7B,UAAW26lB,EAAKh2nB,GAAG6rC,WAAYmqlB,EAAKh2nB,GAAGmrnB,iBAApD,CAGA,IAAIt+O,EAAK7nY,EAAc,MACnB45qB,EAAW55qB,EAAc,MACzBkC,UAAW,YAAaI,OACpBiB,MAAO,eAAiB1E,KAAKM,OAAO4S,UAAY,QAAU,QAAU,kBAGhE/R,EAAc,SAAWa,UAAWmwnB,EAAKh2nB,GAAG4vB,QACxDnoB,EAASuunB,EAAKh2nB,GAAGuD,KAAKoE,UAAUS,OAAO,WACvCw2qB,EAASp5qB,YAAYiC,EAASuunB,EAAKh2nB,GAAGuD,MACtCspY,EAAGrnY,YAAYo5qB,GACft7C,EAAM99nB,YAAYqnY,GAKtB,OAHA/oU,EAAMt+D,YAAY89nB,GAClBhsb,EAAK9xM,YAAYs+D,GACjB/+D,EAAIS,YAAY8xM,GACTvyM,GAEXs5qB,EAAiBn/qB,UAAUuB,oBAAsB,WACzCoD,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAO0lF,IAAIy0lB,GAAsBz6qB,KAAKsS,SAC3CtS,KAAKM,OAAO0lF,IAAI4tiB,GAAgB5znB,KAAKsS,WAElCkoqB,KCrGPQ,GAA4B,WAI5B,SAASA,EAAW16qB,EAAQghE,GAExBthE,KAAK0nnB,UACDuzD,OAAUzB,GACV1wb,OAAU0wb,GAAkB0B,MAASZ,GAAiBx1jB,OAAU01jB,IAEpEx6qB,KAAKM,OAASA,EACdN,KAAKshE,eAAiBA,EACtBthE,KAAK6tB,SAAW,IAAI7tB,KAAK0nnB,SAAS1nnB,KAAKM,OAAO2gE,aAAaljC,MAAMz9B,EAAQghE,GACzEthE,KAAKkC,MAAQo/D,EAAeE,WAAW,SAwH3C,OAtHAw5mB,EAAW3/qB,UAAUo+qB,OAAS,SAAUx5qB,GACpCD,KAAK6tB,SAAS4rpB,OAAOz5qB,KAAKm7qB,gBAAgBl7qB,GAAOA,GACjDD,KAAKo7qB,cAAcn7qB,IAEvB+6qB,EAAW3/qB,UAAUgkD,OAAS,SAAUp/C,GACpCD,KAAK6tB,SAASwxB,OAAOr/C,KAAKm7qB,gBAAgBl7qB,GAAOA,GACjDD,KAAKo7qB,cAAcn7qB,IAEvB+6qB,EAAW3/qB,UAAU+/qB,cAAgB,SAAUn7qB,GAC3C,IACIo6H,EACAp3D,EAEAo4mB,EAJArnD,EAAOh0nB,KAAKM,OAKZ2kE,EAAU+ujB,EAAKiJ,mBACfxpb,EAAOugb,EAAKhznB,QAAQ2B,cAAc,eACtC,GAAIsiE,GAAsC,WAA3B+ujB,EAAK/yjB,aAAaljC,KAAmB,CAChD,IAAI0iQ,EAAW1rQ,SAAS90B,EAAKygE,IAAI7tD,aAAa,iBAAkB,IAE5DwoqB,EADArnD,EAAK0K,aAAoC,QAArBz+nB,EAAKmsL,aAAyBq0G,EAAWuzV,EAAK0K,YAC1D1K,EAAKhznB,QAAQ2B,cAAc,oBAAoBA,cAAc,eAG7DqxnB,EAAKhznB,QAAQ2B,cAAc,qBAAqBA,cAAc,eAI9E,IAAK,IADDwvnB,EAAkC,UAA3B6B,EAAK/yjB,aAAaljC,KAAmBi2lB,EAAKgB,cAAgBhB,EAAKU,iBAAiBz0nB,EAAKwvnB,aACvFrxnB,EAAK,EAAGk9qB,EAASnpD,EAAM/znB,EAAKk9qB,EAAO7+qB,OAAQ2B,IAAM,CACtD,IAAIqiE,EAAM66mB,EAAOl9qB,GACjB,GAAKqiE,EAAIjpC,UAAWipC,EAAIz4B,SAAxB,CAGQy4B,EAAI7D,cAAc6D,EAAI10C,MAAO9rB,EAAKqgE,QAASG,GAE/CwC,EADAgC,GAAWktjB,EAAK5znB,QAAQkiE,IAAQwE,GAAsC,WAA3B+ujB,EAAK/yjB,aAAaljC,KACtDs9oB,EAAM14qB,cAAc,iBAAmB89D,EAAI/gE,IAAM,KAGjD+zM,EAAK9wM,cAAc,iBAAmB89D,EAAI/gE,IAAM,KAEhD+gE,EAAI0mjB,KAAKplnB,MACftE,EAAkBwlE,KACnBxC,EAAI0mjB,KAAKplnB,OACLu+D,QAASrgE,EAAKqgE,QAASt/D,QAASiiE,EAAMpG,OAAQ4D,EAAK2rH,YAAansL,EAAKmsL,YAAa1lL,KAAMzG,EAAKyG,KAAMg6D,IAAKzgE,EAAKygE,IAC7GsC,eAAgBvC,EAAIgnjB,mBAAqB5qnB,EAAS4jE,EAAI10C,MAAO9rB,EAAK+iE,kBAEjEq3D,GAAcp3D,EAAKpwD,aAAa,cACjC7S,KAAKu7qB,aAAat4mB,EAAMhjE,EAAKyG,MAC7B2zH,GAAY,OAK5B2gjB,EAAW3/qB,UAAUkgrB,aAAe,SAAU74qB,EAAMgE,GAChD,IAAI+woB,EAASz3oB,KAAKM,OAAOU,QAAQ2B,cAAc,uBAC1ClF,EAAkBg6oB,IACnBA,EAAOp3hB,mBAAmBv8G,UAAUM,IAAI,WAEN,UAAlCpE,KAAKM,OAAO2gE,aAAaljC,KACzB/9B,KAAKkC,MAAMqsoB,SAAUpnoB,OAAQtB,EAAQnD,EAAM,QAAS,GAGpDA,EAAKR,QAELQ,EAAKoB,UAAUK,SAAS,kBACxBzB,EAAKqjB,kBAAkBrjB,EAAK1F,MAAMP,OAAQiG,EAAK1F,MAAMP,SAG7Du+qB,EAAW3/qB,UAAU8/qB,gBAAkB,SAAUl7qB,GAI7C,IAAK,IAHD+znB,EAAOh0nB,KAAKM,OACZsD,KACAuunB,EAAkC,UAA3B6B,EAAK/yjB,aAAaljC,KAAmBi2lB,EAAKgB,cAAgBhB,EAAKU,iBAAiBz0nB,EAAKwvnB,aACvFtznB,EAAI,EAAG0F,EAAMswnB,EAAK11nB,OAAQN,EAAI0F,EAAK1F,IAAK,CAC7C,IAAIskE,EAAM0xjB,EAAKh2nB,GACf,GAAKskE,EAAIjpC,QAGT,GAAIipC,EAAIz4B,UAAYy4B,EAAI6mjB,iBAAxB,CACI,IAAIoR,EAAmB14nB,KAAKshE,eAAeE,WAAW,uBAClD5+C,EAAQ,IAAIo2mB,GAAkBh5nB,KAAKM,QACnCo2nB,EAAegC,EAAiB/B,gBAAgB3d,GAAS6f,eACzD/2jB,EAAQl/C,EAAMq2mB,aAAah5nB,EAAKqgE,SAAS,GAAGwB,MAC5C60M,EAAK+/W,EAAa3qhB,OAAOjqC,EAAM3lE,GAAI8D,EAAKqgE,SAAWruD,MAAShS,EAAKygE,IAAMzgE,EAAKygE,IAAI7tD,aAAa,iBAAmB,KAChH3R,EAAMy1Q,EAAGxxQ,mBACT3B,aAAa,YAAamzQ,EAAG9jQ,aAAa,cAC9CjP,EAAS68D,EAAI/gE,KAAOwB,MARxB,CAWA,IACIs6qB,GAAU3+mB,OAAQ4D,EAAKzjE,MADfyjE,EAAI7D,cAAc6D,EAAI10C,MAAO9rB,EAAKqgE,QAASG,GACd/5D,KAAMzG,EAAKmsL,YAAa5vL,KAAMyD,EAAKqgE,SAExExuD,GADO2uD,EAAI0mjB,KAAKv8hB,YACR,GAEZ,GAAqB,iBADrB94E,EAAQ2uD,EAAI0mjB,KAAKv8hB,OAAO4wlB,IACO,CAC3B,IAAIt6qB,GAAAA,EAAMC,EAAc,QACpBa,UAAY8P,EAChBA,EAAQ5Q,EAAI0b,WAEhB,IAAI82S,EAA4B,UAAlB5hT,EAAM9O,SAAuB8O,EAAMtQ,iBAAiB,SAAS/E,OACvEs0J,GAAatzJ,EAAkBgjE,EAAI10C,QAAUm0C,GAAeO,EAAI10C,OAChE0vpB,GAAoBh+qB,EAAkBgjE,EAAI10C,QAAUo0C,GAAkBM,EAAI10C,OAC9EroB,EAAWgwT,EAAU5hT,EAAMnP,cAAc,SAAWmP,GAChD2lB,KAAMs5H,EAAY0qhB,EAAmBh7mB,EAAI10C,MAAO87mB,eAAgBpnkB,EAAI/gE,IACpE4D,GAAIytJ,EAAYije,EAAKhznB,QAAQsC,GAAKm4qB,EAAmBznD,EAAKhznB,QAAQsC,GAAKm9D,EAAI10C,QAE/EjoB,EAAUgO,GAAQ,UAAW,eACP,UAAlB2uD,EAAIpuB,WACJvgC,EAAMhO,UAAUM,IAAI,cAEnBq8D,EAAII,cAAgBJ,EAAIG,aAAoC,cAArB3gE,EAAKmsL,aAC5C3rH,EAAIG,YAAmC,QAArB3gE,EAAKmsL,cACxBt6K,EAAMtO,aAAa,WAAY,QAEnCI,EAAS68D,EAAI/gE,KAAOoS,GAExB,OAAOlO,GAEXo3qB,EAAW3/qB,UAAUiX,QAAU,WAC3BtS,KAAK6tB,SAASjxB,uBAEXo+qB,KCzIPU,GAAiC,WACjC,SAASA,EAAgBp7qB,GACrBN,KAAK27qB,eAAiB,wBAAyB,YAC/C37qB,KAAKM,OAASA,EAsElB,OApEAo7qB,EAAgBrgrB,UAAUuvF,OAAS,SAAU3qF,GACzC,IAAIwgE,EAAMxgE,EAAK48D,OACXuzD,EAAa,qBACA,aAAb3vD,EAAI/5D,OACJ0pH,EAAa,yCAEjB,IAAI2gC,GAAatzJ,EAAkBwC,EAAK48D,OAAO9wC,QAAUm0C,GAAejgE,EAAK48D,OAAO9wC,OAChF0vpB,GAAoBh+qB,EAAkBwC,EAAK48D,OAAO9wC,QAAUo0C,GAAkBlgE,EAAK48D,OAAO9wC,OAC9F,OAAO5qB,EAAc,SACjBkC,UAAW+sH,EAAY3sH,OACnBiD,KAAM,WAAY1J,MAAOiD,EAAKjD,MAAO6qoB,eAAgBpnkB,EAAI/gE,IACzD4D,GAAIytJ,EAAY/wJ,KAAKM,OAAOU,QAAQsC,GAAKm4qB,EAAmBz7qB,KAAKM,OAAOU,QAAQsC,GAAKm9D,EAAI10C,MACzF0L,KAAMs5H,EAAY0qhB,EAAmBh7mB,EAAI10C,UAIrD2vpB,EAAgBrgrB,UAAUqjP,KAAO,SAAU19O,GACvC,OAAOA,EAAQwR,SAEnBkpqB,EAAgBrgrB,UAAU0G,MAAQ,SAAU9B,GACxC,IAAI27qB,EACAxkC,EACArmf,GAAatzJ,EAAkBwC,EAAK48D,OAAO9wC,QAAUm0C,GAAejgE,EAAK48D,OAAO9wC,OAChF8vpB,EAAgC,QAArB57qB,EAAKmsL,aAAyBnsL,EAAKygE,IAAI58D,UAAUK,SAAS,cAUzE,GATK1G,EAAkBwC,EAAKygE,OACxBk7mB,EAAe37qB,EAAKygE,IAAI/9D,cAAc,yBAErCouJ,GAAa9wJ,EAAKqgE,QAAQrgE,EAAK48D,OAAO9wC,SACvCqrnB,EAAWvnlB,KAAKuB,MAAMnxD,EAAKqgE,QAAQrgE,EAAK48D,OAAO9wC,OAAO7e,WAAW0I,gBAEjEm7I,IAAc8qhB,GAAYx7mB,GAAgBpgE,EAAKqgE,QAASrgE,EAAK48D,OAAO9wC,SACpEqrnB,EAAWvnlB,KAAKuB,MAAMiP,GAAgBpgE,EAAKqgE,QAASrgE,EAAK48D,OAAO9wC,OAAO7e,WAAW0I,iBAEjFnY,EAAkBm+qB,GAAe,CAGlC,GAFA57qB,KAAK0nnB,SAAW1nnB,KAAKM,OAAO2gE,aAAaljC,KACzC/9B,KAAK87qB,QAAU77qB,EAAKygE,IACK,QAArBzgE,EAAKmsL,YAAuB,CAC5B,IAAI1rH,EAAM1gE,KAAKM,OAAOy3oB,oBAAoB93oB,EAAKygE,IAAI7tD,aAAa,aAChEukoB,IAAW12kB,GAAMA,EAAI5H,WAEzB+I,GAAuBtmE,WAAM,MAAY8F,MAAMC,KAAKrB,EAAKygE,IAAIl/D,iBAAiB,eAAgB41oB,GAAU78nB,OAAOva,KAAK27qB,gBAExH37qB,KAAKjD,IAAM,IAAI8hH,GAASngH,GACpB2U,MAAyC,WAAlCrT,KAAKM,OAAO2gE,aAAaljC,KAAoB,GAAK99B,EAAK48D,OAAOsB,WACrE3rD,QAAS4koB,EACTl5hB,UAAW19C,GAAWvgE,EAAK48D,OAAQ58D,EAAKmsL,YAAansL,EAAKe,SAAUkS,UAAWlT,KAAKM,OAAO4S,UAC3FkN,OAAQpgB,KAAK+7qB,eAAezgrB,KAAK0E,OAClCC,EAAK48D,OAAOsqjB,KAAKnsnB,SACpBgF,KAAKjD,IAAIs5C,SAASp2C,EAAKe,UAE3B06qB,EAAgBrgrB,UAAU0grB,eAAiB,SAAU97qB,GACjD,GAAID,KAAK87qB,SAA6B,WAAlB97qB,KAAK0nnB,SAAuB,CAC5C,IAAItjnB,GAAM,EACLnE,EAAKuS,SAINpO,GAAM,EACNpE,KAAK87qB,QAAQt4qB,aAAa,gBAAiBY,EAAI8I,aAJ/ClN,KAAK87qB,QAAQpwqB,gBAAgB,iBAMjCm2D,GAAuBtmE,WAAM,MAAY8F,MAAMC,KAAKtB,KAAK87qB,QAAQt6qB,iBAAiB,eAAgB4C,GAAKmW,OAAOva,KAAK27qB,kBAG3HD,EAAgBrgrB,UAAUiX,QAAU,WAC5BtS,KAAKjD,KACLiD,KAAKjD,IAAIuV,WAGVopqB,KCvEPM,GAAkC,WAClC,SAASA,EAAiB17qB,GAEtBN,KAAKM,OAASA,EA6DlB,OA3DA07qB,EAAiB3grB,UAAUuvF,OAAS,SAAU3qF,GAG1C,IAAIw7qB,EAAmBt7mB,GAAkBlgE,EAAK48D,OAAO9wC,OAEjDglI,EAAY7wF,GAAejgE,EAAK48D,OAAO9wC,OAC3C,OAAO5qB,EAAc,SACjBkC,UAAW,UAAWI,OAElBH,GAAIytJ,EAAY/wJ,KAAKM,OAAOU,QAAQsC,GAAKm4qB,EAAmBz7qB,KAAKM,OAAOU,QAAQsC,GAAKrD,EAAK48D,OAAO9wC,MAEjG0L,KAAMs5H,EAAY0qhB,EAAmBx7qB,EAAK48D,OAAO9wC,MAAOrlB,KAAM,OAAQmhoB,eAAgB5noB,EAAK48D,OAAOn9D,QAI9Gs8qB,EAAiB3grB,UAAU0G,MAAQ,SAAU9B,GACzCD,KAAK68D,OAAS58D,EAAK48D,OAEnB,IAAI4+mB,EAAmBt7mB,GAAkBlgE,EAAK48D,OAAO9wC,OACjDglI,EAAY7wF,GAAejgE,EAAK48D,OAAO9wC,OACvC+/d,EAA6C,WAAlC9rf,KAAKM,OAAO2gE,aAAaljC,KACpC89oB,EAAgC,QAArB57qB,EAAKmsL,aAAyBnsL,EAAKygE,IAAI58D,UAAUK,SAAS,cACzEnE,KAAKjD,IAAM,IAAI02d,GAAa/0d,GACxB6kE,WAAYvjE,KAAKM,OAAOijE,sBAAsBC,GAC1CxjE,KAAKM,OAAOijE,WAAa,IAAIC,GAAYxjE,KAAKM,OAAOijE,YACzD7H,OAAO,IAAI2H,IAAQ59D,OAAOxF,EAAK48D,OAAO9wC,OAAQ9G,QAASu7C,GAAWvgE,EAAK48D,OAAQ58D,EAAKmsL,YAAansL,EAAKe,SACtG4qB,QAAU5uB,MAAOiD,EAAK48D,OAAO9wC,OAC7B/uB,MAAO+zJ,IAAc8qhB,EACjBx7mB,GAAgBpgE,EAAKqgE,QAASrgE,EAAK48D,OAAO9wC,OAAS9rB,EAAKqgE,QAAQrgE,EAAK48D,OAAO9wC,OAChF7Y,UAAWlT,KAAKM,OAAO4S,UAAWy1mB,eAAgB3onB,KAAKi8qB,iBAAiB3grB,KAAK0E,MAC7E8mB,YAAagle,EAAW,GAAK7rf,EAAK48D,OAAOsB,WAAY0pJ,YAAa,QAClE9gM,eAAgB+ke,EAAW,QAAU,SAAUpqf,KAAM1B,KAAKi9pB,aAAa3hqB,KAAK0E,MAC5E43L,UAAW,aACZ33L,EAAK48D,OAAOsqjB,KAAKnsnB,SACpBgF,KAAKjD,IAAIs5C,SAASp2C,EAAKe,SAEvBf,EAAKe,QAAQwC,aAAa,OAAQutJ,EAAY0qhB,EAAmBx7qB,EAAK48D,OAAO9wC,QAEjFiwpB,EAAiB3grB,UAAUqjP,KAAO,SAAU19O,GACxC,OAAOA,EAAQ0mF,cAAc,GAAG1qF,OAEpCg/qB,EAAiB3grB,UAAU4grB,iBAAmB,SAAUp7qB,GACpDA,EAAE9B,OAAS0gE,GAASg1F,SAAS5zJ,EAAE9B,OAAQiB,KAAK68D,OAAO4qjB,kBAAoBznnB,KAAK68D,OAAOwB,gBAAkBr+D,KAAK68D,OAAO9wC,OAAO,GACpH/rB,KAAK68D,OAAO0G,aACZvjE,KAAK68D,OAAO0G,WAAWA,WAAWG,KAAO7iE,EAAE9B,SAGnDi9qB,EAAiB3grB,UAAU4hqB,aAAe,SAAUh9pB,GAChD,IAAIi8qB,EAAarooB,GAAa7zC,KAAKjD,IAAIiE,QAAS,YAChD,GAAsC,WAAlChB,KAAKM,OAAO2gE,aAAaljC,OAAsBtgC,EAAkBy+qB,GAAa,CAC9E,IAAI3f,EAASv8pB,KAAKM,OAAOU,QAAQ2B,cAAc,IAAMu5qB,EAAW54qB,IAAIokF,cAAc,GAClFznF,EAAK2+D,MAAM59D,QAAQ0D,MAAM+9D,QAAU85lB,EAAO95lB,OAAS,GAAGv1D,aAG9D8uqB,EAAiB3grB,UAAUiX,QAAU,WAC7BtS,KAAKjD,KACLiD,KAAKjD,IAAIuV,WAGV0pqB,KClEPG,GAAiC,WACjC,SAASA,EAAgB77qB,GACrBN,KAAKM,OAASA,EAwClB,OAtCA67qB,EAAgB9grB,UAAUuvF,OAAS,SAAU3qF,GAEzC,IAAI8wJ,EAAY7wF,GAAejgE,EAAK48D,OAAO9wC,OACvC0vpB,EAAmBt7mB,GAAkBlgE,EAAK48D,OAAO9wC,OACrD,OAAO5qB,EAAc,SACjBkC,UAAW,UAAWI,OAElBH,GAAIytJ,EAAY/wJ,KAAKM,OAAOU,QAAQsC,GAAKm4qB,EAAmBz7qB,KAAKM,OAAOU,QAAQsC,GAAKrD,EAAK48D,OAAO9wC,MACjG0L,KAAMs5H,EAAY0qhB,EAAmBx7qB,EAAK48D,OAAO9wC,MAAO87mB,eAAgB5noB,EAAK48D,OAAOn9D,QAIhGy8qB,EAAgB9grB,UAAUqjP,KAAO,SAAU19O,GAEvC,OADAA,EAAQksI,OACDlsI,EAAQ0mF,cAAc,GAAG1qF,OAEpCm/qB,EAAgB9grB,UAAU0G,MAAQ,SAAU9B,GACxC,IAAIwgE,EAAMxgE,EAAK48D,OACXivb,EAA6C,WAAlC9rf,KAAKM,OAAO2gE,aAAaljC,KACpCgzH,EAAY7wF,GAAejgE,EAAK48D,OAAO9wC,OACvC0vpB,EAAmBt7mB,GAAkBlgE,EAAK48D,OAAO9wC,OACjD8vpB,EAAgC,QAArB57qB,EAAKmsL,aAAyBnsL,EAAKygE,IAAI58D,UAAUK,SAAS,cACzEnE,KAAKjD,IAAM,IAAI86H,GAAen5H,GAC1B1B,MAAO+zJ,IAAc8qhB,EACjBrgqB,WAAW6kD,GAAgBpgE,EAAKqgE,QAASrgE,EAAK48D,OAAO9wC,QAAUvQ,WAAWvb,EAAKqgE,QAAQG,EAAI10C,QAC/F7Y,UAAWlT,KAAKM,OAAO4S,UACvB4T,YAAagle,EAAW,GAAK7rf,EAAK48D,OAAOsB,WACzCl5C,QAASu7C,GAAWvgE,EAAK48D,OAAQ58D,EAAKmsL,YAAansL,EAAKe,SACxD+lB,eAAkD,WAAlC/mB,KAAKM,OAAO2gE,aAAaljC,KAAoB,QAAU,UACxE0iC,EAAI0mjB,KAAKnsnB,SACZgF,KAAKjD,IAAIs5C,SAASp2C,EAAKe,SACvBf,EAAKe,QAAQwC,aAAa,OAAQutJ,EAAY0qhB,EAAmBx7qB,EAAK48D,OAAO9wC,QAEjFowpB,EAAgB9grB,UAAUiX,QAAU,WAC5BtS,KAAKjD,MAAQiD,KAAKjD,IAAIiqF,aACtBhnF,KAAKjD,IAAIuV,WAGV6pqB,KC3CPC,GAAiC,WACjC,SAASA,EAAgB97qB,GACrBN,KAAKM,OAASA,EA0BlB,OAxBA87qB,EAAgB/grB,UAAUuvF,OAAS,SAAU3qF,GACzC,IAAIwgE,EAAMxgE,EAAK48D,OAOf,OANY17D,EAAc,SACtBkC,UAAW,gCAAiCI,OACxCiD,KAAM,OAAQ1J,MAAQS,EAAkBwC,EAAKjD,OAAsB,GAAbiD,EAAKjD,MAAY6qoB,eAAgBpnkB,EAAI/gE,IAC3F4D,GAAItD,KAAKM,OAAOU,QAAQsC,GAAKm9D,EAAI10C,MAAO0L,KAAMgpC,EAAI10C,MAAOrnB,MAAO,cAAgB+7D,EAAIpuB,cAKhG+poB,EAAgB/grB,UAAUqjP,KAAO,SAAU19O,GACvC,OAAOA,EAAQhE,OAEnBo/qB,EAAgB/grB,UAAU0G,MAAQ,SAAU9B,GAC9BA,EAAK48D,OAAf,IACIivb,EAA6C,WAAlC9rf,KAAKM,OAAO2gE,aAAaljC,KACxC3S,GAAM2rG,aACF/1H,QAASf,EAAKe,QAAS+lB,eAAkD,WAAlC/mB,KAAKM,OAAO2gE,aAAaljC,KAAoB,QAAU,SAC9F96B,YACIiQ,UAAWlT,KAAKM,OAAO4S,UAAW+R,QAASu7C,GAAWvgE,EAAK48D,OAAQ58D,EAAKmsL,YAAansL,EAAKe,SAC1F8lB,YAAagle,EAAW,GAAK7rf,EAAK48D,OAAOsB,eAI9Ci+mB,KC1BPC,GAA4B,WAC5B,SAASA,EAAW/7qB,EAAQghE,EAAgBzzC,GACxC7tB,KAAKM,OAASA,EACdN,KAAK6tB,SAAWA,EAChB7tB,KAAKshE,eAAiBA,EACtBthE,KAAKtD,mBA4VT,OA1VA2/qB,EAAWhhrB,UAAU8jH,aAAe,SAAUt+G,GAC1C,IAAIsG,EAAStG,EAAEsG,OACX6snB,EAAOh0nB,KAAKM,QACTuzC,GAAa1sC,EAAQ,kBACxB0sC,GAAaA,GAAa1sC,EAAQ,iBAAkB,UAAU7D,KAAO0wnB,EAAKhznB,QAAQsC,IAAS0wnB,EAAK0K,YAC7F7qlB,GAAa1sC,EAAQ,sBAAyB0sC,GAAa1sC,EAAQ,sBACtEnH,KAAKygS,SAAW5sP,GAAa1sC,EAAQ,aAAe4tB,SAAS5tB,EAAOkN,cAAcxB,aAAa,iBAAkB,KAAO,EACpHmhnB,EAAKx0B,QACLw0B,EAAK+gB,WAAW7wO,YAI5Bm4Q,EAAWhhrB,UAAUy3pB,gBAAkB,SAAUjypB,GACzCgzC,GAAahzC,EAAEsG,OAAQ,cAAgBnH,KAAKM,OAAO2gE,aAAaq7mB,qBAChEt8qB,KAAKM,OAAOy0oB,WAAW7sN,UAAUr0Y,GAAahzC,EAAEsG,OAAQ,WAQhEk1qB,EAAWhhrB,UAAUkhrB,aAAe,SAAU17qB,GAE1C,OADAb,KAAKM,OAAOk/lB,QAAS,EACb3+lB,EAAEurL,aACN,IAAK,QACKpsL,KAAKM,OAAOi4nB,qBAA8D,aAAvCv4nB,KAAKM,OAAOk+nB,kBAAkB93nB,OAC9D1G,KAAKM,OAAO20oB,oBACjBj1oB,KAAKM,OAAOmiiB,UAAU,GAE1BziiB,KAAKM,OAAOkmB,QAAQ+rmB,GAAuB7znB,EAAOmC,GAC9CurL,YAAa,OACb1lL,KAAM6rnB,MAEV,MACJ,IAAK,SACDvynB,KAAKM,OAAOkmB,QAAQ+rmB,GAAuB7znB,EAAOmC,GAC9CurL,YAAa,SACb1lL,KAAM6rnB,MAEVvynB,KAAKM,OAAOmiiB,UAAUziiB,KAAKw8qB,gBAIvCH,EAAWhhrB,UAAU6sb,UAAY,SAAUl/C,GACvC,IAAIgrP,EAAOh0nB,KAAKM,OACZm8qB,EAAczoD,EAAK6B,0BACnB6mD,KACJ18qB,KAAKygS,SAAWzgS,KAAKw8qB,aAAeznpB,SAASi0W,EAAGn2X,aAAa,iBAAkB,IAC/E7S,KAAK28qB,aAAe3oD,EAAKwW,wBAAwBxqoB,KAAKygS,UACtD,IAAK,IAAItkS,EAAI,EAAGA,EAAIsgrB,EAAYhgrB,OAAQN,IACpCugrB,EAAiBl4qB,KAAKxE,KAAK28qB,aAAaF,EAAYtgrB,KAExD6D,KAAKN,IAAMspY,EAAGn2X,aAAa,YAC3B,IAAI8hoB,EAAS3gB,EAAK+jB,oBAAoB/3oB,KAAKN,KACvCO,GACAygE,IAAKsoU,EAAIsuQ,WAAYmlC,EAAa7B,gBAAiB8B,EAAkBtwf,YAAa,YAClF9rH,QAAStgE,KAAK28qB,aAAcl8Y,SAAUzgS,KAAKygS,SAAU/5R,KAAM,OAAQmyB,QAAQ,EAC3EmqC,eAAgB2xkB,GAAUA,EAAO3xkB,gBAErCgxjB,EAAKxtmB,QzEPU,YyEOgBvmB,GAC/BA,EAAKyG,KAAO,cACZstnB,EAAKxtmB,QAAQmpmB,GAAoB1vnB,GAC7BA,EAAK44B,SAGTm7lB,EAAKx0B,QAAS,EACdw0B,EAAKz6N,iBAC0B,WAA3By6N,EAAK/yjB,aAAaljC,MAClB99B,EAAKygE,IAAI58D,UAAUM,IAAI,gBAE3BpE,KAAK6tB,SAASwxB,OAAOp/C,GACrBD,KAAKN,IAAMspY,EAAGn2X,aAAa,YAC3BmhnB,EAAK+gB,WAAW6nC,sBAChB38qB,EAAKyG,KAAO,iBACZstnB,EAAKxtmB,QAAQ+rmB,GAAuBtynB,GAChCD,KAAKM,OAAO+8nB,eACZr9nB,KAAKM,OAAOyN,OAAOuvnB,IAAuBC,KAAM,eAGxD8+C,EAAWhhrB,UAAUm1oB,UAAY,SAAUv+nB,EAAOzV,GAC9C,IAAIw3nB,EAAOh0nB,KAAKM,OACZL,GACAmsL,YAAa,OAAQ1lL,KAAMipnB,GAAoBnznB,KAAMA,EAAMq8B,QAAQ,EACnE8jpB,aAAc3oD,EAAKwW,wBAAwBv4nB,IAE/C+hnB,EAAKrymB,cACLqymB,EAAKjmnB,OAAO8lnB,GAAmB5znB,GAC/B+znB,EAAK9hkB,WAETmqnB,EAAWhhrB,UAAU6oa,QAAU,WAC3B,IAAI8vN,EAAOh0nB,KAAKM,OAChB,GAAKN,KAAKM,OAAOk/lB,QAAWw0B,EAAK+gB,WAAWC,QAAQzlgB,cAC/Cykf,EAAK+gB,WAAW8nC,UAAa7oD,EAAK+gB,WAAW8nC,SAASttiB,YAD3D,CAIA,IAAIutiB,EAAap+qB,KAAWsB,KAAK28qB,cAC7B18qB,GACAmsL,YAAa,OAAQ1lL,KAAMipnB,GAAoBnznB,KAAMsgrB,EAAYjkpB,QAAQ,EACzE8jpB,aAAc38qB,KAAK28qB,aAAc53H,YAAaivE,EAAK6hB,iBAAkB7ykB,mBAGzE,GADA85mB,EAAa9oD,EAAK+gB,WAAWgoC,qBAAqB/oD,EAAKhznB,QAAQ2B,cAAc,eAAgBm6qB,GACzF9oD,EAAKiJ,oBAAiD,WAA3BjJ,EAAK/yjB,aAAaljC,KAAmB,CAChE,IAAIi/oB,EAAQhpD,EAAKhznB,QAAQ2B,cAAc,oBAAoBA,cAAc,eAErEm6qB,EADA9oD,EAAK0K,YAAcs+C,EACNhpD,EAAK+gB,WAAWgoC,qBAAqBC,EAAOF,GAG5C9oD,EAAK+gB,WAAWgoC,qBAAqB/oD,EAAKhznB,QAAQ2B,cAAc,qBAAqBA,cAAc,eAAgBm6qB,GAGxI,GAAI9oD,EAAKhznB,QAAQQ,iBAAiB,gBAAgB/E,OAAQ,CAGtD,GAFAwD,EAAKk2D,OAAS,OACd69jB,EAAKxtmB,QAAQmpmB,GAAoB1vnB,GAC7BA,EAAK44B,OACL,OAEJm7lB,EAAKrymB,cACL3hB,KAAKi9qB,kBACLjpD,EAAKjmnB,OAAO8lnB,GAAmB5znB,OAE9B,CAMD,GALAA,EAAKk2D,OAAS,MACdl2D,EAAK8kjB,YAAc,EACnB9kjB,EAAKgS,MAAQjS,KAAKk9qB,cAClBlpD,EAAKjmnB,OAAO29nB,GAAqBzroB,GACjCD,KAAKk9qB,cAAgB,KACjBj9qB,EAAK44B,OACL,OAEJ74B,KAAKi9qB,kBAETj9qB,KAAKm9qB,iBAC0B,WAA3BnpD,EAAK/yjB,aAAaljC,MAAqC,QAAhB99B,EAAKk2D,QAC5C69jB,EAAKhznB,QAAQ2B,cAAc,iBAAiBmB,UAAUS,OAAO,kBAGrE83qB,EAAWhhrB,UAAU4hrB,gBAAkB,WACnC,IAAIjpD,EAAOh0nB,KAAKM,OAChB0znB,EAAK+gB,WAAWqoC,iBAChBppD,EAAK+gB,WAAWnoB,cAChBoH,EAAKjmnB,OAAO0sqB,QAEhB4B,EAAWhhrB,UAAUgirB,YAAc,SAAUp9qB,GACzC,IAAIF,EAAQC,KACRC,EAAK4zL,QACL5zL,EAAK4zL,QAAQP,KAAK,SAAUzyL,GAAK,OAAOd,EAAMu9qB,OAAOz8qB,EAAGZ,KAAU00L,MAAM,SAAU9zL,GAAK,OAAOd,EAAMw9qB,OAAO18qB,KAG3Gb,KAAKw9qB,YAAYv9qB,EAAKzD,KAAMyD,IAGpCo8qB,EAAWhhrB,UAAUiirB,OAAS,SAAUz8qB,EAAGZ,GACvCD,KAAKw9qB,YAAY38qB,EAAGZ,IAExBo8qB,EAAWhhrB,UAAUkirB,OAAS,SAAU18qB,GACpCb,KAAKy9qB,YAAY58qB,IAErBw7qB,EAAWhhrB,UAAUqirB,sBAAwB,SAAUlhrB,GACnDwD,KAAKM,OAAOkqoB,wBAAwBxqoB,KAAKw8qB,cAAgBhgrB,GAE7D6/qB,EAAWhhrB,UAAUmirB,YAAc,SAAU38qB,EAAGZ,GACvCxC,EAAkBoD,KACnBZ,EAAKzD,KAAOqE,GAEhBb,KAAKM,OAAOkmB,QAAQmknB,GAAwB1qoB,GAC5CA,EAAKyG,KAAO6rnB,GACZvynB,KAAKM,OAAOk/lB,QAAS,EACrBx/lB,KAAK83nB,WAAW73nB,EAAKzD,MACrBwD,KAAK09qB,sBAAsBz9qB,EAAKzD,MAChCwD,KAAKM,OAAOkmB,QAAQ+rmB,GAAuBtynB,IACrCD,KAAKM,OAAOi4nB,qBAA8D,aAAvCv4nB,KAAKM,OAAOk+nB,kBAAkB93nB,OAC9D1G,KAAKM,OAAO20oB,oBACjBj1oB,KAAKM,OAAOmiiB,UAAUziiB,KAAKygS,UAAY,EAAIzgS,KAAKygS,SAAWzgS,KAAKw8qB,cAEpEx8qB,KAAKM,OAAOoiB,eAEhB25pB,EAAWhhrB,UAAUoirB,YAAc,SAAU58qB,GACzCb,KAAKM,OAAOkmB,QAAQijnB,GAAsB5ooB,IAE9Cw7qB,EAAWhhrB,UAAUy8nB,WAAa,SAAUt7nB,GACxC,IAAIyoE,EAAUjlE,KAAKM,OAAO28nB,mBACtBv8jB,EAAM,IAAIk3jB,GAAY53nB,KAAKshE,eAAgB,KAAMthE,KAAKM,QACtDq0oB,EAAS30oB,KAAKM,OAAOy3oB,oBAAoB/3oB,KAAKN,KAClD,GAAIi1oB,IACAA,EAAO9nd,QAAUrwL,EACjBsmE,GAAmB6xkB,EAAQ30oB,KAAKM,OAAOgxnB,uBAAwBqjB,EAAO9nd,SACtEnsH,EAAIxO,QAAQyilB,EAAQ30oB,KAAKM,OAAO00nB,cAAc,GAC1C/vjB,GAAS,CACT,IAAIvlE,OAAM,EACNspY,EAAKhpY,KAAKM,OAAOU,QAAQ2B,cAAc,aAAegyoB,EAAOj1oB,IAAM,KAEnEA,EADCm0C,GAAam1V,EAAI,oBAAwBn1V,GAAam1V,EAAI,kBACrDhpY,KAAKM,OAAO8/nB,iBAAiBuU,EAAO1ioB,OAAOY,aAAa,YAGxD7S,KAAKM,OAAO6/nB,UAAUwU,EAAO1ioB,OAAOY,aAAa,aAE3D8hoB,EAAS30oB,KAAKM,OAAOy3oB,oBAAoBr4oB,IAClCmtL,QAAUrwL,EACjBkkE,EAAIxO,QAAQyilB,EAAQ30oB,KAAKM,OAAOy9D,SAAS,KAIrDs+mB,EAAWhhrB,UAAUo1pB,UAAY,WAC7B,GAAKzwpB,KAAKM,OAAOk/lB,OAAjB,CAGA,IAAIw0B,EAAOh0nB,KAAKM,OACZL,GACAmsL,YAAa,SAAU1lL,KAAMipnB,GAAoBnznB,KAAMwD,KAAK28qB,aAAc53H,YAAaivE,EAAK6hB,kBAEhG7hB,EAAKxtmB,QAAQmpmB,GAAoB1vnB,GACK,WAAlCD,KAAKM,OAAO2gE,aAAaljC,MACzB/9B,KAAKM,OAAOyN,OAAO0sqB,OAEvBzmD,EAAKx0B,QAAS,EACdx/lB,KAAKm9qB,iBACLl9qB,EAAKyG,KAAO6rnB,GACmB,WAA3ByB,EAAK/yjB,aAAaljC,MAClB/9B,KAAK83nB,WAAW73nB,EAAKzD,MAErBw3nB,EAAK+Y,kBAAkBpqoB,cAAc,mBACpCqxnB,EAAK+Y,kBAAkBpqoB,cAAc,aACtCqxnB,EAAK+Y,kBAAkBpqoB,cAAc,iBAAiBmB,UAAUS,OAAO,UAE3EyvnB,EAAKvxF,UAAUziiB,KAAKygS,UACpBuzV,EAAKxtmB,QAAQ+rmB,GAAuBtynB,KAExCo8qB,EAAWhhrB,UAAUq1pB,UAAY,SAAUl0pB,EAAMyV,GAC7C,IAAI+hnB,EAAOh0nB,KAAKM,OAEhB,GADAN,KAAKk9qB,cAAiBz/qB,EAAkBwU,GAAiB,EAARA,EAC7CzV,EACAw3nB,EAAKjmnB,OAAO29nB,IACRt/c,YAAa,OAAQ1lL,KAAMipnB,GAAoBnznB,KAAMA,EAAMuojB,YAAa,EAAG5uf,OAAQ,MAAOlkD,MAAOA,SAIzG,IAAI+hnB,EAAKx0B,OAAT,CAGAx/lB,KAAK28qB,gBACL38qB,KAAKN,IAAM,GACX,IAAK,IAAItB,EAAK,EAAGyE,EAAKmxnB,EAAKgB,aAAc52nB,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC3D,IAAIqiE,EAAM59D,EAAGzE,GACb4B,KAAK28qB,aAAal8mB,EAAI10C,OAASvvB,GAAQA,EAAKikE,EAAI10C,OAASvvB,EAAKikE,EAAI10C,OAAS00C,EAAIh6D,aAEnF,IAAIxG,GACA44B,QAAQ,EAAOmqC,kBACfopH,YAAa,MAAO5vL,KAAMwD,KAAK28qB,aAAcj2qB,KAAMipnB,GAAoB19mB,MAAOA,GAElF+hnB,EAAKxtmB,QAAQmpmB,GAAoB1vnB,GAC7BA,EAAK44B,SAGTm7lB,EAAKx0B,QAAS,EACdw0B,EAAKz6N,iBACLv5Z,KAAK6tB,SAAS4rpB,QAASn5mB,QAASrgE,EAAKzD,KAAM4vL,YAAa,QACxD4nc,EAAK+gB,WAAW6nC,sBAChB38qB,EAAKyG,KAAO6rnB,GACZtynB,EAAKygE,IAAMszjB,EAAKhznB,QAAQ2B,cAAc,eACtCqxnB,EAAKxtmB,QAAQ+rmB,GAAuBtynB,MAExCo8qB,EAAWhhrB,UAAUk1pB,aAAe,SAAUC,EAAWh0pB,GAErD,GADAwD,KAAKw8qB,aAAex8qB,KAAKM,OAAOu1oB,iBAC5Br5oB,EAAM,CACNA,EAAQA,aAAgBgC,MAAShC,GAAQA,GACzC,IAAIw3nB,EAAOh0nB,KAAKM,OAEZq9qB,EAAUr/qB,OAAOhB,KAAKd,GAAMC,OAChC+zpB,EAAYA,GAAaxwpB,KAAKM,OAAOu1nB,0BAA0B,GAU/D,IAAK,IATD52nB,EAAU,SAAU9C,GACpB,IAAIyhrB,EACAC,EAAY7pD,EAAKhlT,gBAAgB5yS,KAAK,SAAUk1H,GAEhD,OADAsshB,EAAYtshB,EACL90J,EAAKL,KAAOU,EAAS2zpB,EAAWl/f,IAAW90J,EAAKL,KAAOm1J,IAElE90J,EAAKL,GAAK0hrB,EAAYD,GAAa/6qB,KAASA,EAAG2tpB,GAAah0pB,EAAKL,GAAI0G,GACrE,IAAIA,GAEC1G,EAAI,EAAGA,EAAIwhrB,EAASxhrB,IACzB8C,EAAQ9C,GAGhB6D,KAAKM,OAAOyN,OAAO29nB,IACft/c,YAAa,SAAU1lL,KAAMipnB,GAAoB3sjB,kBACjDxmE,KAAMA,GAAcwD,KAAKM,OAAO29oB,qBAAsBj1Q,GAAIhpY,KAAKM,OAAOyupB,kBAAmBl2nB,QAAQ,KAGzGwjpB,EAAWhhrB,UAAU8hrB,eAAiB,WAClC,IAEIW,EACAC,EAHA/pD,EAAOh0nB,KAAKM,OACZoC,EAAOsxnB,EAAKhznB,QAAQ2B,cAAc,eAGlCqxnB,EAAKiJ,qBACL6gD,EAAQ9pD,EAAKhznB,QAAQQ,iBAAiB,eAAe,GACrDu8qB,EAAY/pD,EAAKhznB,QAAQQ,iBAAiB,gBAAgB,GACtDs8qB,GACAv5qB,EAAOu5qB,GAEPC,GACAA,EAAUj6qB,UAAUS,OAAO,gBAG/B7B,GACA6B,EAAO7B,IAEXA,EAAOsxnB,EAAKhznB,QAAQ2B,cAAc,kBAE9BD,EAAKoB,UAAUS,OAAO,gBAM9B83qB,EAAWhhrB,UAAUqB,iBAAmB,WAChCsD,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAOslF,GAAGowiB,GAAmBh2nB,KAAKq9qB,YAAar9qB,MACpDA,KAAKM,OAAOslF,GAAGo4lB,GAAkBh+qB,KAAK8ypB,gBAAiB9ypB,MACvDA,KAAKM,OAAOslF,GAAG04jB,GAAct+oB,KAAKm/G,aAAcn/G,MAChDA,KAAKM,OAAOslF,GAAGstkB,GAAiBlzpB,KAAK8ypB,gBAAiB9ypB,MACtDA,KAAKM,OAAOslF,GAAGq4lB,GAAuBj+qB,KAAKu8qB,aAAcv8qB,MACzDA,KAAKM,OAAOslF,GAAGs4lB,GAAqBl+qB,KAAKu8qB,aAAcv8qB,QAK3Dq8qB,EAAWhhrB,UAAUuB,oBAAsB,WACnCoD,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAO0lF,IAAIgwiB,GAAmBh2nB,KAAKq9qB,aACxCr9qB,KAAKM,OAAO0lF,IAAIg4lB,GAAkBh+qB,KAAK8ypB,iBACvC9ypB,KAAKM,OAAO0lF,IAAIs4jB,GAAct+oB,KAAKm/G,cACnCn/G,KAAKM,OAAO0lF,IAAIktkB,GAAiBlzpB,KAAK8ypB,iBACtC9ypB,KAAKM,OAAO0lF,IAAIi4lB,GAAuBj+qB,KAAKu8qB,cAC5Cv8qB,KAAKM,OAAO0lF,IAAIk4lB,GAAqBl+qB,KAAKu8qB,gBAK9CF,EAAWhhrB,UAAUiX,QAAU,WAC3BtS,KAAKpD,sBACLoD,KAAK6tB,SAASvb,WAEX+pqB,KC1WP/xlB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAexCwzlB,GAA4B,SAAUhzlB,GAEtC,SAASgzlB,EAAW79qB,EAAQghE,EAAgBzzC,GACxC,IAAI9tB,EAAQorF,EAAO7pF,KAAKtB,KAAMM,EAAQghE,IAAmBthE,KAIzD,OAHAD,EAAMO,OAASA,EACfP,EAAMuhE,eAAiBA,EACvBvhE,EAAM8tB,SAAWA,EACV9tB,EAoBX,OA1BAuqF,GAAU6zlB,EAAYhzlB,GAQtBgzlB,EAAW9irB,UAAUo1pB,UAAY,WAC7BtlkB,EAAO9vF,UAAUo1pB,UAAUnvpB,KAAKtB,OAEpCm+qB,EAAW9irB,UAAUq1pB,UAAY,SAAUl0pB,EAAMyV,GAC7Ck5E,EAAO9vF,UAAUq1pB,UAAUpvpB,KAAKtB,KAAMxD,EAAMyV,IAEhDksqB,EAAW9irB,UAAU6oa,QAAU,WAC3B/4U,EAAO9vF,UAAU6oa,QAAQ5ia,KAAKtB,OAElCm+qB,EAAW9irB,UAAUm1oB,UAAY,SAAUv+nB,EAAOzV,GAC9C2uF,EAAO9vF,UAAUm1oB,UAAUlvoB,KAAKtB,KAAMiS,EAAOzV,IAEjD2hrB,EAAW9irB,UAAUk1pB,aAAe,SAAUC,EAAWh0pB,GACrD2uF,EAAO9vF,UAAUk1pB,aAAajvpB,KAAKtB,KAAMwwpB,EAAWh0pB,IAExD2hrB,EAAW9irB,UAAU6sb,UAAY,SAAUl/C,GACvC79S,EAAO9vF,UAAU6sb,UAAU5mb,KAAKtB,KAAMgpY,IAEnCm1S,GACT9B,IC5BE+B,GAA2B,WAC3B,SAASA,EAAU99qB,EAAQghE,EAAgBzzC,GACvC7tB,KAAKq+qB,eACLr+qB,KAAKM,OAASA,EACdN,KAAKshE,eAAiBA,EACtBthE,KAAK6tB,SAAWA,EAChB7tB,KAAKkC,MAAQo/D,EAAeE,WAAW,SACvCxhE,KAAKtD,mBAgtBT,OA3sBA0hrB,EAAU/irB,UAAUqB,iBAAmB,WAC/BsD,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAOslF,GAAG04jB,GAAct+oB,KAAKm/G,aAAcn/G,MAChDA,KAAKM,OAAOslF,GAAGstkB,GAAiBlzpB,KAAK8ypB,gBAAiB9ypB,MACtDA,KAAKM,OAAOslF,GAAG04lB,GAA0Bt+qB,KAAKu+qB,oBAAqBv+qB,MACnEA,KAAKM,OAAOslF,GAAGs1jB,GAAoBl7oB,KAAKm7oB,cAAen7oB,MACvDA,KAAKgzpB,kBAAoBhzpB,KAAK4onB,UAAUttnB,KAAK0E,MAC7CA,KAAKM,OAAO5D,iBAAiB0goB,GAAkBp9nB,KAAKgzpB,mBACpDhzpB,KAAKM,OAAOslF,GAAGo4lB,GAAkBh+qB,KAAK8ypB,gBAAiB9ypB,MACvDA,KAAKM,OAAOslF,GAAGo8jB,GAAmBhipB,KAAK2/G,eAAgB3/G,QAK3Do+qB,EAAU/irB,UAAUuB,oBAAsB,WAClCoD,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAO0lF,IAAIs4jB,GAAct+oB,KAAKm/G,cACnCn/G,KAAKM,OAAO0lF,IAAIktkB,GAAiBlzpB,KAAK8ypB,iBACtC9ypB,KAAKM,OAAO0lF,IAAIs4lB,GAA0Bt+qB,KAAKu+qB,qBAC/Cv+qB,KAAKM,OAAO0lF,IAAIk1jB,GAAoBl7oB,KAAKm7oB,eACzCn7oB,KAAKM,OAAO1D,oBAAoBwgoB,GAAkBp9nB,KAAKgzpB,mBACvDhzpB,KAAKM,OAAO0lF,IAAIg4lB,GAAkBh+qB,KAAK8ypB,iBACvC9ypB,KAAKM,OAAO0lF,IAAIg8jB,GAAmBhipB,KAAK2/G,kBAE5Cy+jB,EAAU/irB,UAAUutnB,UAAY,WAC5B5onB,KAAKM,OAAOyN,OAAOm9nB,QAKvBkzC,EAAU/irB,UAAUiX,QAAU,WAC1BtS,KAAKpD,uBAETwhrB,EAAU/irB,UAAU8jH,aAAe,SAAUt+G,GACpCgzC,GAAahzC,EAAEsG,OAAQnH,KAAKM,OAAOU,QAAQsC,GAAK,QAAQ,KACzDtD,KAAKqzpB,WACDx/mB,GAAahzC,EAAEsG,OAAQ,eAAiBnH,KAAKM,OAAOk/lB,QACpDx/lB,KAAKw+qB,WAAW39qB,EAAEsG,UAI9Bi3qB,EAAU/irB,UAAUy3pB,gBAAkB,SAAUjypB,GAC5C,IAAIsG,EAAS0sC,GAAahzC,EAAEsG,OAAQ,aAChC6hY,EAAKn1V,GAAahzC,EAAEsG,OAAQ,SAC5BA,GAAU6hY,IAAOhnV,MAAMjtB,SAAS5tB,EAAO0L,aAAa,iBAAkB,MACtE7S,KAAKy+qB,SAAS1ppB,SAASi0W,EAAGn2X,aAAa,iBAAkB,IAAK7S,KAAKM,OAAO00nB,aAAajgmB,SAAS5tB,EAAO0L,aAAa,iBAAkB,KAAKkZ,MAAO/rB,KAAK67qB,SAAS9mpB,SAASi0W,EAAGn2X,aAAa,iBAAkB,OAGnNurqB,EAAU/irB,UAAUkjrB,oBAAsB,SAAU19qB,GAC5Cb,KAAKM,OAAOk/lB,QAAUx/lB,KAAK0+qB,oBAC1B79qB,EAAE8toB,UAAa,MAAO,WAAY,QAAS,cAAcpwoB,QAAQsC,EAAEkuoB,QAAQ54kB,SAAW,KACvFt1D,EAAEg4B,QAAS,EACPh4B,EAAE8toB,QACF9toB,EAAE+toB,UAAUppnB,iBAGZ3kB,EAAEkuoB,QAAQvpnB,mBAItB44pB,EAAU/irB,UAAU8/oB,cAAgB,SAAUt6oB,GAC1C,IAAIokE,EAAUjlE,KAAKM,OAAO28nB,mBACtBoC,EAAQr/nB,KAAKM,OAAOm0C,aAAa9xC,cAAc,qBAC/CsqoB,EAAOjtoB,KAAKM,OAAOq+nB,mBAAmBh8nB,cAAc,oBACpDqtD,IAAUnvD,EAAE4Z,UAAU+tG,WAAc3nH,EAAE4Z,UAAUk/mB,YAAiB35nB,KAAKM,OAAOo+nB,YAAc79nB,EAAE4Z,UAAUqR,UAC3G,GAAKjrB,EAAE6toB,QAAS1+kB,EAAhB,CAGA,IAAIntD,EAAKhC,EAAE4Z,UAAUsyV,QAAStsE,EAAW59R,EAAG,GAAIg2R,EAAYh2R,EAAG,GAC3DoiE,IAAYo6jB,EAAMl7nB,SAAStD,EAAEG,UAAahB,KAAKM,OAAOo+nB,YAAcuO,EAAK9ooB,SAAStD,EAAEG,YACpF63R,GAAa5zN,GAEbjlE,KAAKM,OAAOo+nB,YAAc79nB,EAAE4Z,UAAU+tG,YACtCi4K,GAAYzgS,KAAKM,OAAOo+nB,YAE5B,IAAIl/B,EAASx/lB,KAAKM,OAAOk/lB,OACzB,IAAKh/lB,SAASgB,iBAAiB,iBAAiB/E,OAE5C,OADA+imB,EAASA,IAAWx/lB,KAAK0+qB,kBACjB79qB,EAAEkuoB,QAAQ54kB,QACd,IAAK,MACL,IAAK,WACGqpiB,GACAx/lB,KAAK2+qB,kBAAkBl+Y,EAAU5H,GAErC,MACJ,IAAK,QACL,IAAK,aACDh4R,EAAEkuoB,QAAQvpnB,iBACNg6kB,GACAx/lB,KAAKy+qB,SAASh+Y,EAAUzgS,KAAKq+qB,YAAYxhnB,OAAO9wC,OAEpD,MACJ,IAAK,KACD/rB,KAAK2+qB,kBAAkBl+Y,EAAU5H,GACjC74R,KAAKkC,MAAMA,WAK3Bk8qB,EAAU/irB,UAAUwgrB,SAAW,SAAU5pqB,GACrC,OAAOjS,KAAKM,OAAO+goB,cAAcpvnB,GAAOnO,UAAUK,SAAS,kBAE/Di6qB,EAAU/irB,UAAUsjrB,kBAAoB,SAAUloC,EAAQu3B,GACtDhuqB,KAAKq+qB,YAAY59Y,SAAWg2W,EAC5Bz2oB,KAAKq+qB,YAAYxlZ,UAAYm1Y,EAC7BhuqB,KAAKy+qB,SAAShoC,EAAQz2oB,KAAKM,OAAO00nB,aAAag5C,GAASjipB,MAAO/rB,KAAK67qB,SAASplC,KAEjF2nC,EAAU/irB,UAAUo1pB,UAAY,WAC5B,IAAIz8B,EAAOh0nB,KAAKM,OACZi4R,EAAOv4R,KAAKM,OAAO49oB,gBACnBlqB,EAAKuQ,eAAiBhsW,EAAK97R,OAA8C,EAArCuD,KAAKM,OAAO0uU,gBAAgBvyU,QAChE87R,EAAK/zR,KAAKjJ,MAAMg9R,EAAMv4R,KAAKM,OAAOs5oB,wBAEtC,IACI5wQ,EACA41S,EAFAv7C,EAAc,IAAIzL,GAAY53nB,KAAKshE,eAAgB,KAAMthE,KAAKM,QAI9D0znB,EAAKx0B,QACLx/lB,KAAKqzpB,UAAS,GAElBr/B,EAAKz6N,iBACL,IAAK,IAAIp9Z,EAAI,EAAGA,EAAIo8R,EAAK97R,OAAQN,IAC7B,GAAIo8R,EAAKp8R,GAAGw2oB,UACJ3e,EAAKuQ,gBACIvQ,EAAK4lB,uBAAuBrhX,EAAKp8R,GAAG8V,OACtC0goB,SAAU,GAErB3pQ,EAAKgrP,EAAK+Y,kBAAkBpqoB,cAAc,aAAe41R,EAAKp8R,GAAGuD,IAAM,KACnEs0nB,EAAK0K,aACL11P,EAAKgrP,EAAK2K,mBAAmBh8nB,cAAc,aAAe41R,EAAKp8R,GAAGuD,IAAM,MAExEs0nB,EAAKuQ,gBAEDq6C,EADA5qD,EAAK0K,WACC1K,EAAK2K,mBAAmBh8nB,cAAc,oBACvCA,cAAc,aAAe41R,EAAKp8R,GAAGuD,IAAM,KAG1Cs0nB,EAAKv/kB,aAAa9xC,cAAc,qBACjCA,cAAc,aAAe41R,EAAKp8R,GAAGuD,IAAM,MAGpDspY,GAAM41S,GACN,GAAI51S,GAAMA,EAAGllY,UAAUK,SAAS,kBAAoBy6qB,GAAOA,EAAI96qB,UAAUK,SAAS,iBAC1E6kY,GACAzkY,EAAOykY,GAEP41S,IAAQ5qD,EAAKuQ,eAAiBvQ,EAAK0K,aACnCn6nB,EAAOq6qB,GAEX5+qB,KAAK6+qB,uBAAuBtmZ,EAAKp8R,GAAGuD,KACpCvD,QAEC,CACD2mE,GAAmBy1N,EAAKp8R,GAAI6D,KAAKM,OAAOgxnB,uBAAwB/4V,EAAKp8R,GAAGK,aACjE+7R,EAAKp8R,GAAG0wL,QACf0rG,EAAKp8R,GAAGw2oB,SAAU,EAElB7uoB,EADU86qB,GAAY51S,MACF,cAAe,gBACnCq6P,EAAYnxkB,QAAQqmO,EAAKp8R,GAAI63nB,EAAKgB,cAAc,GAK5DhB,EAAK+Y,kBAAkBpqoB,cAAc,mBACpCqxnB,EAAK+Y,kBAAkBpqoB,cAAc,aACtCqxnB,EAAK+Y,kBAAkBpqoB,cAAc,iBAAiBmB,UAAUS,OAAO,UAE3EyvnB,EAAKjmnB,OAAO+wqB,IAAsBvmZ,KAAMv4R,KAAKM,OAAO49oB,kBACpD,IAAIj+oB,GACAmsL,YAAa,cAAe1lL,KAAM,cAAemyB,QAAQ,GAE7Dm7lB,EAAKxtmB,QAAQmpmB,GAAoB1vnB,GAC7BA,EAAK44B,SAGTm7lB,EAAKjmnB,OAAO+wqB,IACRvmZ,KAAMv4R,KAAKM,OAAO49oB,gBAAgBzhpB,OAASuD,KAAKM,OAAO49oB,iBAClD,IAAI19U,IAAM63T,WAAW,EAAMv2jB,OAAQ,IAAI2qa,IAAOktJ,YAAY,EAAMnimB,SAAS,UAElFw8lB,EAAKvxF,UAAUziiB,KAAKq+qB,YAAY59Y,UAChCzgS,KAAK++qB,gBACL/qD,EAAKjmnB,OAAOm9nB,OACZlroB,KAAKM,OAAOyN,OAAO68nB,OACnB3qoB,GAASmsL,YAAa,cAAe1lL,KAAM,kBAC3CstnB,EAAKxtmB,QAAQ+rmB,GAAuBtynB,KAExCm+qB,EAAU/irB,UAAUk1pB,aAAe,SAAUC,EAAWh0pB,GACpDwD,KAAKqzpB,WACDrzpB,KAAK0+qB,mBACL1+qB,KAAKqzpB,UAAS,GAElBrzpB,KAAKg/qB,WAAWxuB,EAAWh0pB,IAE/B4hrB,EAAU/irB,UAAUq1pB,UAAY,SAAUl0pB,GACtCwD,KAAKi/qB,WAAWzirB,IAEpB4hrB,EAAU/irB,UAAU6oa,QAAU,SAAU1na,GAChCwD,KAAKM,OAAOk/lB,QAAUx/lB,KAAK0+qB,mBAG/B1+qB,KAAKk/qB,aAETd,EAAU/irB,UAAUqjrB,gBAAkB,WAClC,OAAO1+qB,KAAKM,OAAOy0oB,WAAWC,UAAYh1oB,KAAKM,OAAOy0oB,WAAWC,QAAQzlgB,YAE7E6uiB,EAAU/irB,UAAU6jrB,UAAY,WAC5B,IAAIlrD,EAAOh0nB,KAAKM,OAEhB,GADAN,KAAKqzpB,YACDr/B,EAAKx0B,OAAT,CAGA,IAAI3ya,EAAU7sL,KAAKm/qB,kBACfl/qB,GAASm/qB,aAAcvyf,EAASh0J,QAAQ,GAC5Cm7lB,EAAKxtmB,Q3EjLgB,kB2EiLgBvmB,GACjCA,EAAK44B,SAGTm7lB,EAAKrymB,cACLqymB,EAAKjmnB,O3EtCS,a2EsCiB8+K,QAASA,OAE5Cuxf,EAAU/irB,UAAU8jrB,gBAAkB,WASlC,IAAK,IARDtyf,GACAC,gBACAE,kBACAD,mBAEAwrG,EAAOv4R,KAAKM,OAAO49oB,gBACnBvd,EAAQ3goB,KAAKM,OAAOs5oB,uBACpB30kB,EAAUjlE,KAAKM,OAAO28nB,mBACjB7+nB,EAAK,EAAGk9mB,EAAS/iV,EAAMn6R,EAAKk9mB,EAAO7+mB,OAAQ2B,IAAM,CACtD,IAAIsiE,EAAM46iB,EAAOl9mB,GAIjB,GAHI6mE,GACAjlE,KAAKq/qB,kBAAkB3+mB,EAAKigkB,EAAMjgkB,EAAIzuD,OAAQgzD,GAE9CvE,EAAIiykB,QACJ,OAAQjykB,EAAIymjB,MACR,IAAK,MACDt6b,EAAQC,aAAatoL,KAAKk8D,EAAImsH,SAC9B,MACJ,IAAK,SACDA,EAAQG,eAAexoL,KAAKk8D,EAAIlkE,MAChC,MACJ,QACIqwL,EAAQE,eAAevoL,KAAKk8D,EAAImsH,UAIhD,OAAOA,GAEXuxf,EAAU/irB,UAAUgkrB,kBAAoB,SAAU3+mB,EAAKs1kB,EAAM/wkB,GACrDvE,EAAIiykB,QACAqD,EAAKrD,SACLj0oB,EAAOgiE,EAAImsH,QAASmpd,EAAKnpd,SAGxBmpd,EAAKrD,SACVj0oB,EAAOgiE,EAAKs1kB,IAMpBooC,EAAU/irB,UAAUwjrB,uBAAyB,SAAUn/qB,GAGnD,IAAK,IAFD64R,EAAOv4R,KAAKM,OAAO49oB,gBACnB/hpB,EAAI,EACC0F,EAAM02R,EAAK97R,OAAQN,EAAI0F,GACxB02R,EAAKp8R,GAAGuD,MAAQA,EADavD,KAKrCo8R,EAAKlwQ,OAAOlsB,EAAG,IAKnBiirB,EAAU/irB,UAAUikrB,aAAe,SAAU5+mB,GACzC1gE,KAAKM,OAAO49oB,gBAAgBhjpB,QAAQwlE,IAExC09mB,EAAU/irB,UAAU2jrB,WAAa,SAAUxuB,EAAWh0pB,GAClD,IAAIw3nB,EAAOh0nB,KAAKM,OACZ2R,EAAQzV,EAAOwD,KAAKu/qB,iBAAiB/irB,GAAQw3nB,EAAK6hB,iBAClDsL,EAAentB,EAAK+6B,kBACpB9upB,GACAq3oB,WAAYt3oB,KAAKM,OAAOu1nB,0BACxBp1V,SAAUxuR,EACVquD,QAAS9jE,GAAcw3nB,EAAKiqB,qBAAqB,GACjDv9kB,IAAKlkE,EAAOw3nB,EAAKmM,UAAUlunB,GAASkvoB,EAAa,GAAItonB,QAAQ,GAEjE,GAAK54B,EAAKygE,MAGVszjB,EAAKxtmB,Q3EjQkB,oB2EiQgBvmB,IACnCA,EAAK44B,QAAT,CAGAm7lB,EAAKz6N,iBACL,IAAI75Z,EAAMO,EAAKygE,IAAI7tD,aAAa,YAChC,GAAI5S,EAAKygE,IAAI58D,UAAUK,SAAS,iBAC5BnE,KAAK6+qB,uBAAuBn/qB,GAC5B6E,EAAOtE,EAAKygE,SAEX,CACD,IAAIi0kB,EAAS3gB,EAAK+jB,oBAAoBr4oB,GACtCi1oB,EAAOhC,SAAU,EACjBgC,EAAOxtB,KAAO,SACdrjnB,EAAU7D,EAAKygE,KAAM,cAAe,mBAChCszjB,EAAKiJ,oBACLn5nB,EAAUtH,EAAOw3nB,EAAKoM,iBAAiBnunB,GAASkvoB,EAAa,IAAK,cAAe,mBAC7EntB,EAAK0K,YAAczsnB,EAAQ+hnB,EAAK0K,aAChC1K,EAAK2K,mBAAmBh8nB,cAAc,oBAAoBA,cAAc,SACnEhB,YAAYqynB,EAAKuN,qBAAqBvN,EAAK0K,WAAa,IAC7D1K,EAAK2K,mBAAmBh8nB,cAAc,mBAAmBA,cAAc,SAClEhB,YAAYqynB,EAAKoN,cAAcpN,EAAK0K,WAAa,MAGrD1K,EAAK0K,YAAczsnB,EAAQ+hnB,EAAK0K,YACrC1K,EAAK2K,mBAAmBh8nB,cAAc,SAAShB,YAAYqynB,EAAKoN,cAAcpN,EAAK0K,WAAa,IAGxG1+nB,KAAK++qB,gBACL/qD,EAAKvxF,UAAUxwhB,UACRhS,EAAKygE,IACZszjB,EAAKxtmB,QAAQg5pB,GAAoBv/qB,GACjC+znB,EAAKjmnB,OAAOyxqB,IAAsBjnZ,KAAMv4R,KAAKM,OAAO49oB,kBACpDlqB,EAAKjmnB,OAAOm9nB,SAEhBkzC,EAAU/irB,UAAU0jrB,cAAgB,WAChC,IAAIxmZ,KACAooW,KACA8+C,KACAx6mB,EAAUjlE,KAAKM,OAAO28nB,mBAC1B,GAAIj9nB,KAAKM,OAAOo+nB,aACZnmW,KAAUl3R,MAAMC,KAAKtB,KAAKM,OAAOu/nB,iBAAiBl9nB,cAAc,SAASyX,UACrE6qD,GAAS,CACT07jB,KAAWt/nB,MAAMC,KAAKtB,KAAKM,OAAOq+nB,mBAAmBh8nB,cAAc,oBAAoBA,cAAc,SAASyX,UAC9G,IAAK,IAAIje,EAAI,EAAGA,EAAIwkoB,EAAMlkoB,OAAQN,IAC9BsjrB,EAAetjrB,GAAKgF,EAAc,MAAQkC,UAAW,eAI7D4hE,IACA07jB,EAAQA,EAAMpmnB,UAAUlZ,MAAMC,KAAKtB,KAAKM,OAAOysoB,kBAAkBpqoB,cAAc,SAASyX,WACxFqlqB,EAAiBA,EAAellqB,UAAUlZ,MAAMC,KAAKtB,KAAKM,OAAOU,QAAQ2B,cAAc,qBAAqBA,cAAc,SAASyX,YAG9Hje,EAAI,EAAb,IAAK,IAAWonB,EAAI,EAAG1hB,GADvB02R,EAAOA,EAAKh+Q,UAAUlZ,MAAMC,KAAKtB,KAAKM,OAAOysoB,kBAAkBpqoB,cAAc,SAASyX,YACpD3d,OAAQN,EAAI0F,EAAK1F,IAC3Co8R,EAAKp8R,GAAG2H,UAAUK,SAAS,WAAao0R,EAAKp8R,GAAG2H,UAAUK,SAAS,gBACnEo0R,EAAKp8R,GAAGqH,aAAa,gBAAiB+f,EAAErW,YACpC+3D,IACA07jB,EAAMxkoB,GAAGqH,aAAa,gBAAiB+f,EAAErW,YACrCuyqB,EAAetjrB,GAAG2H,UAAUK,SAAS,UACrCs7qB,EAAetjrB,GAAGqH,aAAa,gBAAiB+f,EAAErW,aAG1DqW,MAGAg1Q,EAAKp8R,GAAGuP,gBAAgB,iBACpBu5D,GACA07jB,EAAMxkoB,GAAGuP,gBAAgB,mBAKzC0yqB,EAAU/irB,UAAUkkrB,iBAAmB,SAAU/irB,GAC7C,OAAO0iE,GAAQ1iE,EAAMwD,KAAKM,OAAOkqoB,0BAErC4zC,EAAU/irB,UAAU4jrB,WAAa,SAAUzirB,GACvC,IAAIw3nB,EAAOh0nB,KAAKM,OAChB,GAAK0znB,EAAK/yjB,aAAakjlB,cAGnBnwB,EAAKx0B,QACLx/lB,KAAKqzpB,YAELr/B,EAAKx0B,QAAT,CAGA,IACIv/lB,GACAy/qB,YAFcljrB,GAAcwD,KAAK2/qB,iBAGjCroC,WAAYtjB,EAAK6B,0BACjBh9lB,QAAQ,GAGZ,GADAm7lB,EAAKxtmB,Q3EhWe,iB2EgWgBvmB,IAChCA,EAAK44B,OAAT,CAGAm7lB,EAAKz6N,iBASL,IAAK,IARDqlR,EACAlF,EAKAj5mB,EACAxuD,EALAyuD,EAAM,IAAIk3jB,GAAY53nB,KAAKshE,eAAgB,KAAMthE,KAAKM,QAEtDg/nB,EADQ,IAAItG,GAAkBh5nB,KAAKM,QACjB24nB,cAAch5nB,EAAKy/qB,cACrC12S,EAAKtoU,EAAIqrC,OAAOuzhB,EAAU,GAAItL,EAAKgB,cAG9B74nB,EAAI,EAAGA,EAAI6D,KAAKM,OAAOm0nB,cAAc12jB,QAAQthE,OAAQN,IAC1D6sY,EAAG9jY,aAAa/D,EAAc,MAAQkC,UAAW,iBAAmB2lY,EAAGpsX,YACvE0inB,EAAU,GAAGx9jB,MAAM5mE,QAAQ,IAAIuxe,IAAOu0I,SAAUhI,GAAS6hB,UAE7D,IAAI4E,EAAQzL,EAAK+Y,kBAAkBpqoB,cAAc,SACjDqmY,EAAGllY,UAAUM,IAAI,iBACbq7nB,EAAM98nB,cAAc,gBACpB88nB,EAAM98nB,cAAc,eAAemB,UAAUM,IAAI,UAEjD4vnB,EAAKiJ,qBACL2hD,EAAM5+qB,KAAKglE,cAAcgkU,IAErB0wS,EADA1lD,EAAK0K,WACI1K,EAAK2K,mBAAmBh8nB,cAAc,oBAAoBA,cAAc,SAGxEqxnB,EAAKv/kB,aAAa9xC,cAAc,qBAAqBA,cAAc,UAEzEuC,aAAa05qB,EAAKlF,EAAO98pB,YAChCjZ,EAASi7qB,EAAIp9qB,iBAAiB,eAAgB,gBACnB,SAAvBxB,KAAKM,OAAOyV,QACZ/V,KAAKM,OAAOyN,OAAO8rqB,QAGvB7lD,EAAK0K,aACLe,EAAQzL,EAAK2K,mBAAmBh8nB,cAAc,UAElD88nB,EAAMv6nB,aAAa8jY,EAAIy2P,EAAM7inB,YAC7BjZ,EAASqlY,EAAGxnY,iBAAiB,eAAgB,gBAC7C89nB,EAAU,GAAGqT,SAAU,EACvBrT,EAAU,GAAGzyc,QAAUnuL,KAAW4goB,EAAU,GAAG9ioB,MAC/C8ioB,EAAU,GAAGnY,KAAO,MACpBnnnB,KAAKs/qB,aAAahgD,EAAU,IAC5Bt/nB,KAAK++qB,gBACL/+qB,KAAKkC,MAAMqvoB,iBACXvd,EAAKjmnB,OAAO6xqB,IAAmBrnZ,KAAMv4R,KAAKM,OAAO49oB,kBACjDlqB,EAAKvxF,UAAU,GACVjmiB,IACDyV,EAAQjS,KAAK6/qB,qBAAqB,GAAG,GACrCp/mB,EAAMuzjB,EAAKgB,aAAa/inB,GACxBjS,KAAKy+qB,SAAS,EAAGh+mB,EAAI10C,OAAO,IAEhC,IAAI+zpB,GACAJ,YAAaz/qB,EAAKy/qB,YAAah/mB,IAAKsoU,EACpCuxS,aAAc95mB,EAAKknQ,YAAa11T,EAAOqloB,WAAYr3oB,EAAKq3oB,WAAYr0kB,KAAM+lU,EAAGlnU,MAAM7vD,IAEvF+hnB,EAAKxtmB,QAAQo5pB,GAAiBE,MAElC1B,EAAU/irB,UAAU2pE,cAAgB,SAAUhhE,GAE1C,IAAK,IADDkhE,EAAOlhE,EAAIpC,WAAU,GAChBzF,EAAI,EAAGA,EAAI6D,KAAKM,OAAOikoB,cAAepooB,IAC3C+oE,EAAK5/D,YAAY4/D,EAAK9qD,SAAS,IAE1Bje,EAAI6D,KAAKM,OAAOikoB,cAAzB,IAAK,IAAmC1ioB,EAAMmC,EAAImhE,kBAAmBhpE,EAAI0F,EAAK1F,IAC1E6H,EAAIsB,YAAYtB,EAAIoW,SAASpW,EAAImhE,kBAAoB,IAEzD,OAAOD,GAEXk5mB,EAAU/irB,UAAUwkrB,qBAAuB,SAAUl4W,EAAa9a,GAG9D,IAAK,IAFDslU,EAAOnynB,KAAKM,OAAO00nB,aACnBpvmB,EAAWusmB,EAAK11nB,OACXN,EAAIwrU,EAAaxrU,EAAIypB,EAAUzpB,IAAK,CACzC,IAAK0wT,GAAS7sT,KAAK+/qB,YAAY5tD,EAAKh2nB,IAChC,OAAOA,EAEN,GAAI0wT,IAAUslU,EAAKh2nB,GAAG8S,UAAYkjnB,EAAKh2nB,GAAGq7B,SAAW26lB,EAAKh2nB,GAAG2kE,gBAC5DqxjB,EAAKh2nB,GAAGykE,aAAcuxjB,EAAKh2nB,GAAG0kE,cAChC,OAAO1kE,EAGf,OAAQ,GAEZiirB,EAAU/irB,UAAU0krB,YAAc,SAAUt/mB,GACxC,OAAQA,EAAIxxD,UAAYwxD,EAAIjpC,UAAYipC,EAAII,eAAiBJ,EAAIG,YAAcH,EAAIK,cAEvFs9mB,EAAU/irB,UAAUskrB,eAAiB,WAIjC,IAAK,IAFDnjrB,KACAwjrB,GAAYpxiB,OAAU,EAAGxkG,OAAU,KAAMy0nB,SAAW,EAAOlolB,KAAQ,KAAMmolB,SAAY,MAChF1gqB,EAAK,EAAGyE,EAHN7C,KAAKM,OAGW00nB,aAAc52nB,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC3D,IAAIqiE,EAAM59D,EAAGzE,GAIb,GAHKX,EAAkBgjE,EAAI10C,QAAWm0C,GAAeO,EAAI10C,SACrDvvB,EAAKikE,EAAI10C,OAAS00C,EAAIh6D,aAAeg6D,EAAIh6D,aAAeu5qB,EAAQv/mB,EAAI/5D,QAEnEjJ,EAAkBgjE,EAAI10C,QAAUm0C,GAAeO,EAAI10C,OAAQ,CAC5D,IAAI9uB,EAASwjE,EAAI10C,MAAM7uB,MAAM,KAC7BV,EAAKS,EAAO,IAAOQ,EAAkBjB,EAAKS,EAAO,QAAOT,EAAKS,EAAO,IACpEwjE,EAAIh6D,aAAejK,EAAKS,EAAO,IAAIA,EAAO,IAAMwjE,EAAIh6D,aAAejK,EAAKS,EAAO,IAAIA,EAAO,IAAM+irB,EAAQv/mB,EAAI/5D,OAGpH,OAAOlK,GAEX4hrB,EAAU/irB,UAAUmjrB,WAAa,SAAUr3qB,GACvC,IAAI2uqB,EAAO,EACP91qB,KAAKM,OAAOwmnB,gBACZgvD,EAAO91qB,KAAKM,OAAOm0nB,cAAc12jB,QAAQthE,QAE7CuD,KAAKq+qB,YAAYxlZ,UAAY1xR,EAAO0xR,UAAYi9Y,EAChD91qB,KAAKq+qB,YAAY59Y,SAAW1rQ,SAAS5tB,EAAOkN,cAAcxB,aAAa,iBAAkB,KAE7FurqB,EAAU/irB,UAAUojrB,SAAW,SAAUxsqB,EAAO8Z,EAAO8gS,GACnD,IAAImnU,EAAOh0nB,KAAKM,OACZmgE,EAAMuzjB,EAAKU,iBAAiB3omB,GAC5BzuB,EAAO02nB,EAAK6B,0BAChB,GAAI7B,EAAK/yjB,aAAaH,cAAgBL,EAAIK,aAAc,CACpD,GAAIkzjB,EAAKx0B,SAAYx/lB,KAAKq+qB,YAAYxhnB,OAAO9wC,QAAUA,GAC/C/rB,KAAKq+qB,YAAY59Y,WAAaxuR,GAASjS,KAAKM,OAAO+goB,cAAc5koB,OAAS,IAAMwV,KACpFjS,KAAKqzpB,WACDrzpB,KAAKq+qB,YAAY59Y,WAAaxuR,GAASjS,KAAKq+qB,YAAYxhnB,OAAO9wC,QAAUA,GACzE,OAGR,GAAIiomB,EAAKx0B,OACL,OAEJ,IAAI9+hB,OAAM,EACNJ,OAAU,EACV2/mB,OAAW,EACXC,EAASlsD,EAAK6F,sBAAsB9tmB,GACpCk5C,EAAU+ujB,EAAKiJ,mBAUnB,GATIh4jB,GAAWi7mB,GAAUj7mB,GACrBvE,EAAMszjB,EAAKwN,qBAAqBvvnB,GAEhCquD,GADA2/mB,EAAWjgrB,KAAKM,OAAOy3oB,oBAAoB/3oB,KAAKM,OAAOkhoB,qBAAqBvvnB,GAAOY,aAAa,cAC7Eg6K,QAAUnuL,KAAWuhrB,EAASpzf,SAAWnuL,KAAWsB,KAAKmgrB,eAAeluqB,MAG3FyuD,EAAMszjB,EAAKqN,cAAcpvnB,GACzBquD,EAAU5hE,KAAWsB,KAAKmgrB,eAAeluqB,KAExC3U,EAAK,KAAOmjE,EAAI10C,QAAU20C,EAAI58D,UAAUK,SAAS,kBAAqBs8D,EAAIxxD,UAAYwxD,EAAI1C,SAC1F0C,EAAII,cAAgBJ,EAAIG,WACzB,OAEJ,IAAI+zkB,EAAS3gB,EAAK+jB,oBAAoBr3kB,EAAI7tD,aAAa,aACnDivD,KAAWzgE,MAAM9F,MAAMmlE,EAAIoB,OAC3BivF,GAAatzJ,EAAkBgjE,EAAI10C,QAAUm0C,GAAeO,EAAI10C,OAChE9rB,GACAgjE,KAAMnB,EAAM9hE,KAAKk4oB,YAAYp2kB,EAAO9hE,KAAKogrB,WAAW3/mB,EAAI/gE,OAAQghE,IAAKA,EACrE+ujB,WAAYhvjB,EAAI10C,MAAOwupB,aAAc95mB,EAAKyC,cAAezlE,EAAkBgjE,EAAIrC,iBAC/Ek5kB,WAAYh6oB,EAAMgjE,QAASA,EAC3B+/mB,gBAAiB3hrB,KAAW+hE,EAAI4/mB,gBAAkB5/mB,EAAI4/mB,oBACtDrjrB,MAAO+zJ,IAAc87J,EAAQxsP,GAAgBC,EAASG,EAAI10C,OAASu0C,EAAQG,EAAI10C,OAC/ErlB,KAAOmmT,EAAiB,MAAT,OAAgBh0R,QAAQ,EACvCmqC,eAAgB2xkB,GAAUA,EAAO3xkB,gBAErC,IAAK/iE,EAAKgjE,KACN,OAGJ,GADA+wjB,EAAKxtmB,Q3ExfK,W2EwfoBvmB,GAC1BA,EAAK44B,OACL,OAEJ74B,KAAKq+qB,aACD/9mB,QAASA,EAASzD,OAAQ4D,EAAKzjE,MAAOiD,EAAKjD,MAAOkmE,aAAcjjE,EAAKijE,aAAcu9N,SAAUxuR,EAC7F4mR,UAAW9jQ,SAAS90B,EAAKgjE,KAAKpwD,aAAa,iBAAkB,IAC7DmwD,eAAgB/iE,EAAK+iE,gBAErB/iE,EAAKgjE,KAAKn/D,UAAUK,SAAS,iBAC7BnE,KAAKsgrB,WAAY,EACjBrgrB,EAAKgjE,KAAKn/D,UAAUS,OAAO,gBAE/ByvnB,EAAKx0B,QAAS,EACdw0B,EAAKz6N,iBACAy6N,EAAKuE,qBAAwBvE,EAAKihB,oBACnCjhB,EAAKvxF,UAAUziiB,KAAKq+qB,YAAY59Y,UAAU,GAE9CzgS,KAAK6tB,SAASwxB,OAAOp/C,GACrBD,KAAKyzM,KAAOugb,EAAKhznB,QAAQ2B,cAAc,IAAMqxnB,EAAKhznB,QAAQsC,GAAK,YAC/D0wnB,EAAK+gB,WAAW6nC,qBAAqBn8mB,IACrCzgE,KAAKM,OAAOU,QAAQ2B,cAAc,gBAAgB+B,MAAM4xC,QAAU,SAG1E8noB,EAAU/irB,UAAUklrB,WAAa,SAAU9/Y,EAAU10Q,EAAO/uB,GACxD,IAAIyjE,EAAMzgE,KAAKM,OAAOo0nB,iBAAiB3omB,GACvC,GAAI00C,IAAQA,EAAII,aAAc,CAC1B,IAAI81M,EAAK32Q,KAAKM,OAAO+goB,cAAc5gW,GAAU3+N,MAAM9hE,KAAKM,OAAOu5nB,sBAAsB9tmB,IACjF4onB,EAAS30oB,KAAKM,OAAOy3oB,oBAAoBphY,EAAGtiQ,cAAcxB,aAAa,aAC3E7S,KAAKgmoB,UAAUrvX,EAAIl2M,EAAKk0kB,EAAQ33oB,GAChCgD,KAAKM,OAAOkmB,QAAQ8noB,IAChBrrlB,KAAM0zM,EAAI95M,OAAQ4D,EAAKjkE,KAAMm4oB,EAAO9nd,YAIhDuxf,EAAU/irB,UAAUmlrB,WAAa,SAAU7rC,EAAQ5onB,EAAO/uB,GACtD,IAAI+zJ,GAAatzJ,EAAkBsuB,IAAUm0C,GAAen0C,GACvD4onB,EAAO9nd,UACR8nd,EAAO9nd,QAAUnuL,KAAWi2oB,EAAOn4oB,OAEnCu0J,GACA4jf,EAAO9nd,QAAQ9gK,EAAM7uB,MAAM,KAAK,IAAMwB,KAAWi2oB,EAAOn4oB,KAAKuvB,EAAM7uB,MAAM,KAAK,KAC9Ey3oB,EAAO9nd,QAAQ9gK,EAAM7uB,MAAM,KAAK,IAAI6uB,EAAM7uB,MAAM,KAAK,IAAMF,GAG3D23oB,EAAO9nd,QAAQ9gK,GAAS/uB,EAExB23oB,EAAOn4oB,KAAKuvB,KAAW/uB,IACvB23oB,EAAOhC,SAAU,IAGzByrC,EAAU/irB,UAAUm1oB,UAAY,SAAUv+nB,EAAOzV,GAE7C,IAAK,IAAI4B,EAAK,EAAGC,EADNC,OAAOhB,KAAKd,GACS4B,EAAKC,EAAO5B,OAAQ2B,IAAM,CACtD,IAAIqiE,EAAMpiE,EAAOD,GACjB4B,KAAKugrB,WAAWtuqB,EAAOwuD,EAAKjkE,EAAKikE,MAGzC29mB,EAAU/irB,UAAU+krB,WAAa,SAAU1grB,GACvC,IAAI8sJ,EAAOxsJ,KAAKM,OAAOokoB,oBAAoBhloB,GAAOM,KAAKM,OAAOm0nB,cAAc12jB,QAAQthE,OAIpF,OAHKgB,EAAkBuC,KAAKM,OAAO84nB,iBAAoB37nB,EAAkBuC,KAAKM,OAAOq7R,YACjFnvI,IAEGA,GAEX4xhB,EAAU/irB,UAAU2qoB,UAAY,SAAUrvX,EAAI95M,EAAQ83kB,EAAQ33oB,GAC1D,IACIyjrB,EADAx9mB,EAAO,IAAIqikB,GAAatloB,KAAKM,OAAQN,KAAKshE,gBAE9CthE,KAAKwgrB,WAAW7rC,EAAQ93kB,EAAO9wC,MAAO/uB,GACtC,IAAIioE,EAAUjlE,KAAKM,OAAO28nB,mBAC1Bn6jB,GAAmB6xkB,EAAQ30oB,KAAKM,OAAOgxnB,uBAAwBqjB,EAAO9nd,SAElE4zf,EADAx7mB,GAAWjlE,KAAKogrB,WAAWvjnB,EAAOn9D,MAAQulE,GAAWjlE,KAAKM,OAAO00nB,aAAav4nB,SAAWk4oB,EAAO7ykB,MAAMrlE,OAC5Fk4oB,EAAO7ykB,MAAMzgE,MAAM4jE,EAAS0vkB,EAAO7ykB,MAAMrlE,QAGzCk4oB,EAAO7ykB,MAErBmB,EAAK+ikB,UAAUrvX,EAAI8pa,EAAQzgrB,KAAKogrB,WAAWvjnB,EAAOn9D,MAAQM,KAAKogrB,WAAWvjnB,EAAOn9D,MAAQulE,EAAUA,EAAU,IAAK0vkB,EAAO9nd,SACzH8pF,EAAG7yQ,UAAUM,IAAI,eACjBpE,KAAKM,OAAOyN,OAAOm9nB,QAEvBkzC,EAAU/irB,UAAU68oB,YAAc,SAAUp2kB,EAAO7vD,GAC/C,IAAIu6I,EAAO,EACPxsJ,KAAKM,OAAOwmnB,eAAiB9mnB,KAAKM,OAAOm0nB,cAAc12jB,UACvDyuF,EAAOxsJ,KAAKM,OAAOm0nB,cAAc12jB,QAAQthE,QAExCgB,EAAkBuC,KAAKM,OAAO84nB,iBAAoB37nB,EAAkBuC,KAAKM,OAAOq7R,YACjFnvI,IAEJ,IAAK,IAAIz7E,EAAI,EAAGA,EAAIjP,EAAMrlE,OAAQs0E,IAAK,CAEnC,GADeh8C,SAAS+sC,EAAMiP,GAAGl+D,aAAa,iBAAkB,MAC/CZ,EAAQu6I,EACrB,OAAOz7E,EAGf,OAAQ,GAEZqtmB,EAAU/irB,UAAUg4pB,SAAW,SAAUqtB,GACrC,IAAI1sD,EAAOh0nB,KAAKM,OAChB,GAAKogrB,GAAiB1sD,EAAKx0B,SAAUx/lB,KAAK0+qB,kBAA1C,CAGA,IAAI11S,EAAKn1V,GAAa7zC,KAAKyzM,KAAM,SAC7B52I,EAAS78D,KAAKq+qB,YAAYxhnB,OAC1BignB,EAAa9oD,EAAK+gB,WAAWgoC,qBAAqB/8qB,KAAKyzM,SACvD1iD,GAAatzJ,EAAkBo/D,EAAO9wC,QAAUm0C,GAAerD,EAAO9wC,OACtE40pB,EAAkBjirB,KAAWo+qB,GAEjC,GADAA,EAAap+qB,KAAWo+qB,EAAY98qB,KAAKq+qB,YAAY/9mB,SACjDywF,EAAW,CACX,IAAI9zJ,EAAS4/D,EAAO9wC,MAAM7uB,MAAM,KAC5B0jrB,EAAmBlirB,KAAWsB,KAAKq+qB,YAAY/9mB,QAAQrjE,EAAO,KAClE6/qB,EAAW7/qB,EAAO,IAAMyB,KAAWo+qB,EAAW7/qB,EAAO,IAAK+C,KAAKq+qB,YAAY/9mB,QAAQrjE,EAAO,KAC1F+C,KAAKq+qB,YAAY/9mB,QAAQrjE,EAAO,IAAIA,EAAO,IAAM2jrB,EAAiB3jrB,EAAO,IACzE6/qB,EAAW7/qB,EAAO,IAAIA,EAAO,IAAM0jrB,EAAgB1jrB,EAAO,IAAIA,EAAO,SAGrE6/qB,EAAWjgnB,EAAO9wC,OAAS40pB,EAAgB9jnB,EAAO9wC,OAEtD,IAAI9rB,GACAwvnB,WAAY5yjB,EAAO9wC,MACnB/uB,MAAO+zJ,EAAY1wF,GAAgBy8mB,EAAYjgnB,EAAO9wC,OAAS+wpB,EAAWjgnB,EAAO9wC,OACjFu0C,QAAStgE,KAAKq+qB,YAAY/9mB,QAC1B86D,cAAep7H,KAAKq+qB,YAAYrhrB,MAChCu9qB,aAAc19mB,EACdoG,KAAMjjE,KAAKyzM,KAAKp/L,cAChB6uD,aAAcljE,KAAKq+qB,YAAYn7mB,aAAcrqC,QAAQ,GAEpD6npB,GACD1sD,EAAKxtmB,Q3EtnBK,W2EsnBoBvmB,GAE9BA,EAAK44B,SAGTm7lB,EAAK+gB,WAAWnoB,cAChBoH,EAAKx0B,QAAS,EACdw0B,EAAK+gB,WAAWqoC,gBAAgBvgnB,IAChC78D,KAAKM,OAAOyN,OAAO68nB,OACnB5qoB,KAAKgmoB,UAAU/loB,EAAKgjE,KAAMpG,EAAQm3jB,EAAK+jB,oBAAoB/uQ,EAAGn2X,aAAa,aAAc5S,EAAKjD,OAC9FqH,GAAa2kY,IAAM,cAAe,eAClC3kY,GAAapE,EAAKgjE,OAAQ,oBAAqB,iBAC1CxlE,EAAkBwC,EAAKjD,QAAUiD,EAAKjD,MAAMkQ,cAC3CzP,EAAkBuC,KAAKq+qB,YAAYrhrB,OAAkC,GAAzBgD,KAAKq+qB,YAAYrhrB,OAAYkQ,aAAelN,KAAKsgrB,WAC3F7irB,EAAkBwC,EAAKjD,QAAUS,EAAkBuC,KAAKq+qB,YAAYrhrB,SACnEiD,EAAKgjE,KAAK5uD,cAAcvQ,UAAUK,SAAS,mBAChDlE,EAAKgjE,KAAKn/D,UAAUS,OAAO,eAE/ByvnB,EAAKjmnB,OAAOm9nB,OACZlroB,KAAKsgrB,WAAY,KAErBlC,EAAU/irB,UAAU8krB,eAAiB,SAAUluqB,GAC3C,IAAIyuD,EAAM1gE,KAAKM,OAAOy3oB,oBAAoB/3oB,KAAKM,OAAO+goB,cAAcpvnB,GAAOY,aAAa,aACxF,OAAO6tD,EAAImsH,QAAUnsH,EAAImsH,QAAUnsH,EAAIlkE,MAE3C4hrB,EAAU/irB,UAAUskH,eAAiB,SAAU9+G,GAC3C,GAAiB,QAAbA,EAAEs1D,QAAoBn2D,KAAKM,OAAOk/lB,OAAQ,CAC1C,IAAIihF,EAAU5soB,GAAahzC,EAAEsG,OAAQ,aACrC,GAAIs5qB,EAAS,CACT,IAAIx9mB,EAAOw9mB,EAAQ99qB,cAAc,YACjC,GAAIsgE,EAAM,CACN,IAAI49mB,EAAiB7grB,KAAKM,OAAOq3nB,oBAC7BkpD,EAAeA,EAAepkrB,OAAS,GAAGsvB,QAAUk3C,EAAKpwD,aAAa,SACtE7S,KAAKqzpB,eAMlB+qB,KCtuBP9zlB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAexCm2lB,GAA4B,SAAU31lB,GAEtC,SAAS21lB,EAAWxgrB,EAAQghE,EAAgBzzC,GACxC,IAAI9tB,EAEJorF,EAAO7pF,KAAKtB,KAAMM,EAAQghE,IAAmBthE,KAI7C,OAHAD,EAAMO,OAASA,EACfP,EAAMuhE,eAAiBA,EACvBvhE,EAAM8tB,SAAWA,EACV9tB,EAwBX,OAhCAuqF,GAAUw2lB,EAAY31lB,GAUtB21lB,EAAWzlrB,UAAUo1pB,UAAY,WAE7BtlkB,EAAO9vF,UAAUo1pB,UAAUnvpB,KAAKtB,OAEpC8grB,EAAWzlrB,UAAUq1pB,UAAY,SAAUl0pB,EAAMyV,GAE7Ck5E,EAAO9vF,UAAUq1pB,UAAUpvpB,KAAKtB,KAAMxD,EAAMyV,IAEhD6uqB,EAAWzlrB,UAAU6oa,QAAU,WAE3B/4U,EAAO9vF,UAAU6oa,QAAQ5ia,KAAKtB,OAElC8grB,EAAWzlrB,UAAUm1oB,UAAY,SAAUv+nB,EAAOzV,GAC9C2uF,EAAO9vF,UAAUm1oB,UAAUlvoB,KAAKtB,KAAMiS,EAAOzV,IAEjDskrB,EAAWzlrB,UAAUk1pB,aAAe,SAAUC,EAAWh0pB,GAErD2uF,EAAO9vF,UAAUk1pB,aAAajvpB,KAAKtB,KAAMwwpB,EAAWh0pB,IAExDskrB,EAAWzlrB,UAAU6sb,UAAY,SAAUl/C,GACvC79S,EAAO9vF,UAAU6sb,UAAU5mb,KAAKtB,KAAMgpY,IAEnC83S,GACTzE,ICzCE0E,GAAoC,WACpC,SAASA,EAAmBzgrB,GACxBN,KAAKM,OAASA,EAsClB,OApCAygrB,EAAmB1lrB,UAAUuvF,OAAS,SAAU3qF,GAE5C,IAAIw7qB,EAAmBt7mB,GAAkBlgE,EAAK48D,OAAO9wC,OACjDglI,EAAY7wF,GAAejgE,EAAK48D,OAAO9wC,OAC3C,OAAO5qB,EAAc,SACjBkC,UAAW,UAAWI,OAClBH,GAAIytJ,EAAY/wJ,KAAKM,OAAOU,QAAQsC,GAAKm4qB,EAAmBz7qB,KAAKM,OAAOU,QAAQsC,GAAKrD,EAAK48D,OAAO9wC,MACjG0L,KAAMs5H,EAAY0qhB,EAAmBx7qB,EAAK48D,OAAO9wC,MAAOrlB,KAAM,OAAQmhoB,eAAgB5noB,EAAK48D,OAAOn9D,QAI9GqhrB,EAAmB1lrB,UAAUqjP,KAAO,SAAU19O,GAC1C,OAAOA,EAAQ0mF,cAAc,GAAG1qF,OAEpC+jrB,EAAmB1lrB,UAAU0G,MAAQ,SAAU9B,GAC3C,IAAI6rf,EAA6C,WAAlC9rf,KAAKM,OAAO2gE,aAAaljC,KAEpCgzH,EAAY7wF,GAAejgE,EAAK48D,OAAO9wC,OACvC8vpB,EAAgC,QAArB57qB,EAAKmsL,aAAyBnsL,EAAKygE,IAAI58D,UAAUK,SAAS,cACrEnH,EAAQ+zJ,IAAc8qhB,EACtBx7mB,GAAgBpgE,EAAKqgE,QAASrgE,EAAK48D,OAAO9wC,OAAS9rB,EAAKqgE,QAAQrgE,EAAK48D,OAAO9wC,OAChF/uB,EAAQA,EAAQ,IAAIgjB,KAAKhjB,GAAS,KAClCgD,KAAKjD,IAAM,IAAIi3M,GAAWt1M,GACtBqoB,eAAgB+ke,EAAW,QAAU,SACrC9uf,MAAOA,EACP8pB,YAAagle,EACT,GAAK7rf,EAAK48D,OAAOsB,WAAYjrD,UAAWlT,KAAKM,OAAO4S,UACxD+R,QAASu7C,GAAWvgE,EAAK48D,OAAQ58D,EAAKyG,KAAMzG,EAAKe,UAClDf,EAAK48D,OAAOsqjB,KAAKnsnB,SACpBgF,KAAKjD,IAAIs5C,SAASp2C,EAAKe,UAE3B+/qB,EAAmB1lrB,UAAUiX,QAAU,WAC/BtS,KAAKjD,KACLiD,KAAKjD,IAAIuV,WAGVyuqB,KlC3BPt7B,GAAsB,WAKtB,SAASA,EAAKnlpB,EAAQghE,GAClBthE,KAAKghrB,cACDC,aAAgBjF,GAAkBkF,YAAe/E,GACjDgF,eAAkBJ,GAAoBK,YAAe1F,GAAiB2F,YAAejF,IAEzFp8qB,KAAK0nnB,UAAauzD,OAAUkD,GAAYr1b,OAAUq1b,GAAYjD,MAASkD,GAAWt5jB,OAAUg8jB,IAC5F9grB,KAAKM,OAASA,EACdN,KAAKshE,eAAiBA,EACtBthE,KAAKqlH,KAAOrlH,KAAKshE,eAAeE,WAAW,gBAC3CxhE,KAAKtD,mBACLsD,KAAKshrB,gBACLthrB,KAAKuhrB,iBACLvhrB,KAAKwhrB,mBAumBT,OArmBA/7B,EAAKpqpB,UAAUomrB,iBAAmB,WAC9B,IAAK,IAAIrjrB,EAAK,EAAGyE,EAAK7C,KAAKM,OAAO00nB,aAAc52nB,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAClE,IAAIqiE,EAAM59D,EAAGzE,GACbqiE,EAAI0mjB,KAAOzonB,EAAO,IAAIsB,KAAKghrB,aAAavgnB,EAAIinjB,UAAY1nnB,KAAKghrB,aAAavgnB,EAAIinjB,UAC1EjnjB,EAAIinjB,SAAW,eAAe1nnB,KAAKM,OAAQN,KAAKshE,gBAAiBb,EAAI0mjB,YAOjFs+B,EAAKpqpB,UAAUkkC,cAAgB,WAC3B,MAAO,QAKXkmnB,EAAKpqpB,UAAUmsF,kBAAoB,SAAU3mF,GACzC,GAAIA,EAAEswF,SAAWnxF,KAAKu/B,gBAKtB,IAAK,IAFDy0lB,EAAOh0nB,KAAKM,OAEPlC,GADKyC,EAAEoC,WACF,GAAGJ,EAAKvE,OAAOhB,KAAKuD,EAAEoC,YAAa7E,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAEnE,OADWyE,EAAGzE,IAEV,IAAK,cACL,IAAK,gBACL,IAAK,gBACG41nB,EAAK/yjB,aAAakjlB,aAAenwB,EAAK/yjB,aAAaH,cAAgBkzjB,EAAK/yjB,aAAamjlB,gBACrFpkpB,KAAKsqnB,aAET,MACJ,IAAK,OACDtqnB,KAAKshrB,gBACLttD,EAAKx0B,QAAS,EACdw0B,EAAK9hkB,aAKrBuzlB,EAAKpqpB,UAAUimrB,cAAgB,WACvBthrB,KAAK+0oB,YACL/0oB,KAAK+0oB,WAAWzioB,UAEpBtS,KAAK6tB,SAAW,IAAImtpB,GAAWh7qB,KAAKM,OAAQN,KAAKshE,gBACjDthE,KAAK+0oB,WAAa,IAAI/0oB,KAAK0nnB,SAAS1nnB,KAAKM,OAAO2gE,aAAaljC,MAAM/9B,KAAKM,OAAQN,KAAKshE,eAAgBthE,KAAK6tB,WAE9G43nB,EAAKpqpB,UAAUivnB,WAAa,WACxBtqnB,KAAKyhrB,oBAETh8B,EAAKpqpB,UAAUkpB,WAAa,WACxBhf,GAAanB,IAAIpE,KAAKM,OAAOm0C,aAAc,aAAcz0C,KAAK0hrB,SAAU1hrB,OAE5EylpB,EAAKpqpB,UAAU8pB,aAAe,WAC1B5f,GAAahB,OAAOvE,KAAKM,OAAOm0C,aAAc,aAAcz0C,KAAK0hrB,WAErEj8B,EAAKpqpB,UAAUqmrB,SAAW,SAAU7grB,GAC5Bb,KAAK6pqB,iBACA5O,GAAOlwoB,OAMR7qB,aAAa+6pB,GAAOlwoB,OACpBkwoB,GAAOlwoB,MAAQ,KACf/qB,KAAKM,OAAOyN,OAAOiwqB,GAAkBn9qB,IAPrCo6pB,GAAOlwoB,MAAQ5qB,WAAW,WACtB86pB,GAAOlwoB,MAAQ,MAChB,OASf06nB,EAAKpqpB,UAAUwuqB,aAAe,WAC1B,IAAI5glB,EAAYptF,OAAOstF,UAAUF,UAAUrzE,cAC3C,MAAO,mBAAmBzS,KAAK8lF,IAMnCw8jB,EAAKpqpB,UAAU6sb,UAAY,SAAUl/C,GACjC,IAAIgrP,EAAOh0nB,KAAKM,OAChB,GAAK0znB,EAAK/yjB,aAAaH,eAAgBkzjB,EAAKx0B,QAAqC,UAA3Bw0B,EAAK/yjB,aAAaljC,KAAxE,CAGA,GAAKi2lB,EAAK+6B,kBAAkBtypB,OAMlBusY,IACNA,EAAKgrP,EAAK+6B,kBAAkB,SAN5B,IAAK/lR,EAED,YADAhpY,KAAKgkf,WAAW,qBAAsBhkf,KAAK2hrB,WAO1B,SAArB34S,EAAGtkY,MAAM4xC,UAGbt2C,KAAK+0oB,WAAW7sN,UAAUl/C,GAC1BhpY,KAAK4hrB,iBACL5tD,EAAKhznB,QAAQ2B,cAAc,gBAAgB+B,MAAM4xC,QAAU,OAC3Dt2C,KAAKM,OAAOyN,OAAO,oBAKvB03oB,EAAKpqpB,UAAUo1pB,UAAY,WACe,UAAlCzwpB,KAAKM,OAAO2gE,aAAaljC,MAAoB/9B,KAAKM,OAAO2gE,aAAaC,mBACnElhE,KAAKM,OAAOU,QAAQQ,iBAAiB,gBAAgB/E,OACxDuD,KAAKgkf,WAAW,aAAchkf,KAAKkiE,YAGvCliE,KAAK+0oB,WAAW0b,YAChBzwpB,KAAK4hrB,iBACL5hrB,KAAKM,OAAOyN,OAAO,mBAEvB03oB,EAAKpqpB,UAAUumrB,eAAiB,WAC5B5hrB,KAAKM,OAAOyN,OAAOm9nB,QAQvBua,EAAKpqpB,UAAUq1pB,UAAY,SAAUl0pB,EAAMyV,GAClCjS,KAAKM,OAAO2gE,aAAakjlB,cAG9BnkpB,KAAK+0oB,WAAW2b,UAAUl0pB,EAAMyV,GAChCjS,KAAK4hrB,iBACL5hrB,KAAKM,OAAOyN,OAAO,kBAQvB03oB,EAAKpqpB,UAAUk1pB,aAAe,SAAUC,EAAWh0pB,GAC/C,IAAIw3nB,EAAOh0nB,KAAKM,OACX0znB,EAAK/yjB,aAAamjlB,gBAGlB5npB,GACIw3nB,EAAKiqB,qBAAqBxhpB,OAK/Bu3nB,EAAK/yjB,aAAa4gnB,wBAClB7hrB,KAAKgkf,WAAW,gBAAiBhkf,KAAKkiE,WAG1CliE,KAAK+0oB,WAAWwb,aAAaC,EAAWh0pB,GARhCwD,KAAKgkf,WAAW,uBAAwBhkf,KAAK2hrB,aAczDl8B,EAAKpqpB,UAAUkogB,UAAY,SAAUv6H,GACjChpY,KAAKuwpB,aAAa,KAAMvwpB,KAAKM,OAAOkqoB,wBAAwBz1mB,SAASi0W,EAAGn2X,aAAa,iBAAkB,OAK3G4yoB,EAAKpqpB,UAAU6oa,QAAU,WACiB,UAAlClka,KAAKM,OAAO2gE,aAAaljC,MAAoB/9B,KAAKM,OAAO2gE,aAAaC,oBACrEzjE,EAAkBuC,KAAKg1oB,UAAYh1oB,KAAKg1oB,QAAQzlgB,YACjDvvI,KAAKgkf,WAAW,mBAAoBhkf,KAAKkiE,WAG7CliE,KAAK8hrB,cAQTr8B,EAAKpqpB,UAAUklrB,WAAa,SAAU9/Y,EAAU10Q,EAAO/uB,GACnDgD,KAAK+0oB,WAAWwrC,WAAW9/Y,EAAU10Q,EAAO/uB,IAOhDyopB,EAAKpqpB,UAAUm1oB,UAAY,SAAUv+nB,EAAOzV,GACxCwD,KAAK+0oB,WAAWvE,UAAUv+nB,EAAOzV,IAKrCippB,EAAKpqpB,UAAUyunB,YAAc,WACzB9pnB,KAAKywpB,aAKThL,EAAKpqpB,UAAU6jrB,UAAY,WACvBl/qB,KAAKkka,WAOTuhP,EAAKpqpB,UAAUojrB,SAAW,SAAUxsqB,EAAO8Z,GACvC/rB,KAAK+0oB,WAAW0pC,SAASxsqB,EAAO8Z,IAMpC05nB,EAAKpqpB,UAAU0mrB,iBAAmB,WAC9B,QAAI/hrB,KAAKg1oB,SACEh1oB,KAAKg1oB,QAAQzlgB,YAQ5Bk2gB,EAAKpqpB,UAAU8jrB,gBAAkB,WAC7B,OAAOn/qB,KAAK+0oB,WAAWoqC,gBAAkBn/qB,KAAK+0oB,WAAWoqC,sBAK7D15B,EAAKpqpB,UAAU2mrB,uBAAyB,WACpC,IAAIjlrB,EAAMiD,KAAK+8qB,qBAAqB/8qB,KAAKg1oB,QAAQh0oB,YACjD,OAAOjE,EAAIuB,OAAOhB,KAAKP,GAAK,KAKhC0opB,EAAKpqpB,UAAUg4pB,SAAW,WACtBrzpB,KAAK+0oB,WAAWse,YAEpB5N,EAAKpqpB,UAAUymrB,WAAa,WACxB9hrB,KAAK+0oB,WAAW7wO,UAChBlka,KAAK4hrB,kBAETn8B,EAAKpqpB,UAAU2of,WAAa,SAAU5pd,EAASr9B,GAC3CA,EAAIq9B,QAAU,QAAUp6B,KAAKqlH,KAAKtxC,YAAY35C,GAAW,SACzDr9B,EAAI6uD,WACJ7uD,EAAIknH,QAERwhiB,EAAKpqpB,UAAU4mrB,iBAAmB,SAAUxhnB,EAAKzjE,GAC7C,IAAIirB,EAAMjrB,EACV,OAAQyjE,EAAI/5D,MACR,IAAK,SACDuhB,EAAO+5B,MAAMxmC,WAAWxe,IAA8B,KAApBwe,WAAWxe,GAC7C,MACJ,IAAK,UACoB,gBAAjByjE,EAAIinjB,WACJz/lB,EAAMjrB,IAAUgD,KAAKqlH,KAAKtxC,YAAY,SAE1C,MACJ,IAAK,OACL,IAAK,WACoB,eAAjBtT,EAAIinjB,UAA6B1qnB,GAASA,EAAMP,SAChDwrB,EAAM,IAAIjI,KAAKhjB,IAI3B,OAAOirB,GAEXw9nB,EAAKpqpB,UAAU6mrB,eAAiB,WAE5B,IAAK,IAAI9jrB,EAAK,EAAGgjE,KADC//D,MAAMC,KAAKtB,KAAKM,OAAOU,QAAQQ,iBAAiB,iBAC1BpD,EAAKgjE,EAAW3kE,OAAQ2B,IAAM,CAElEmG,EADW68D,EAAWhjE,IAG1B4B,KAAKM,OAAOm0C,aAAatvC,kBAAkBT,MAAMwP,SAAW,YAEhEuxoB,EAAKpqpB,UAAUmmrB,iBAAmB,WAC9BxhrB,KAAKkiE,UAAYliE,KAAKmirB,YAEd97jB,MAAOrmH,KAAKoirB,MAAM9mrB,KAAK0E,MACvBomH,aAAehsF,QAASp6B,KAAKqlH,KAAKtxC,YAAY,YAAa9gE,SAAU,YAAa+qG,WAAW,KAG7FqI,MAAOrmH,KAAKqirB,UAAU/mrB,KAAK0E,MAC3BomH,aAAenzG,SAAU,SAAUmnB,QAASp6B,KAAKqlH,KAAKtxC,YAAY,mBAEvE,gBAEP0xkB,EAAKpqpB,UAAUkmrB,eAAiB,WAC5BvhrB,KAAK2hrB,UAAY3hrB,KAAKmirB,YAEd97jB,MAAOrmH,KAAKsirB,WAAWhnrB,KAAK0E,MAAOomH,aAAehsF,QAASp6B,KAAKqlH,KAAKtxC,YAAY,YAAa9gE,SAAU,SAAU+qG,WAAW,KAElI,cAEPyniB,EAAKpqpB,UAAUinrB,WAAa,WACxBtirB,KAAK2hrB,UAAUpgmB,QAEnBkkkB,EAAKpqpB,UAAU8mrB,UAAY,SAAUI,EAAY9qpB,GAC7C,IAAIv2B,EAAMC,EAAc,OAASmC,GAAItD,KAAKM,OAAOU,QAAQsC,GAAKm0B,IAC9Dz3B,KAAKM,OAAOU,QAAQW,YAAYT,GAChC,IAAI8R,GACA2zG,eAAe,EACfnB,SAAS,EACThuF,SAAS,EACTwuF,eAAe,EACf7+G,OAAQnH,KAAKM,OAAOU,QACpBgV,MAAO,QACP4zG,mBAAqB5xF,OAAQ,SAEjChlB,EAAQmzG,QAAUo8jB,EAClB,IAAIxlrB,EAAM,IAAI+nH,GAAO9xG,GAGrB,OAFAjW,EAAIs5C,SAASn1C,GACbigE,GAAiBpkE,EAAIiE,SACdjE,GAEX0opB,EAAKpqpB,UAAUgnrB,UAAY,WACvBrirB,KAAKkiE,UAAUqf,QAEnBkkkB,EAAKpqpB,UAAU+mrB,MAAQ,SAAUvhrB,GAC7B,OAAQb,KAAKkiE,UAAUlhE,QAAQ2B,cAAc,kBAAkBwC,kBAAkB81D,WAC7E,KAAKj7D,KAAKqlH,KAAKtxC,YAAY,iBACvB/zE,KAAK+0oB,WAAWwb,eAChB,MACJ,KAAKvwpB,KAAKqlH,KAAKtxC,YAAY,cACvB/zE,KAAK+0oB,WAAW0b,YAChB,MACJ,KAAKzwpB,KAAKqlH,KAAKtxC,YAAY,oBACvB/zE,KAAK8hrB,aACL,MACJ,KAAK9hrB,KAAKqlH,KAAKtxC,YAAY,wBACvB/zE,KAAKwirB,gBAGbxirB,KAAKqirB,aAKT58B,EAAKpqpB,UAAUqB,iBAAmB,WAC1BsD,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAOslF,GAAGq1jB,GAA4Bj7oB,KAAKwnF,kBAAmBxnF,MACnEA,KAAKM,OAAOslF,GAAGm1jB,GAAmB/6oB,KAAKsqnB,WAAYtqnB,MACnDA,KAAKM,OAAOslF,GAAGo8jB,GAAmBhipB,KAAKq2G,gBAAiBr2G,MACxDA,KAAKM,OAAOslF,GAAGwljB,GAAgBproB,KAAKyhrB,iBAAkBzhrB,MACtDA,KAAKM,OAAOslF,GAAGgljB,GAAuB5qoB,KAAKkirB,eAAgBlirB,MAC3DA,KAAKM,OAAOslF,GAAG44jB,GAAqBx+oB,KAAKwsnB,aAAcxsnB,MACvDA,KAAKM,OAAOslF,GAAGk1lB,GAAoB96qB,KAAK4snB,YAAa5snB,MACrDA,KAAKo7oB,oBAAsBp7oB,KAAKy0oB,cAAcn5oB,KAAK0E,MACnDA,KAAKq7oB,uBAAyBr7oB,KAAK2onB,eAAertnB,KAAK0E,MACvDA,KAAKM,OAAO5D,iBAAiBiznB,GAAoB3vnB,KAAKo7oB,qBACtDp7oB,KAAKM,OAAO5D,iBAAiB61nB,GAAuBvynB,KAAKq7oB,wBACzDr7oB,KAAKM,OAAOslF,GAAGm1jB,GAAmB/6oB,KAAKukB,WAAYvkB,QAKvDylpB,EAAKpqpB,UAAUuB,oBAAsB,WAC7BoD,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAO0lF,IAAIi1jB,GAA4Bj7oB,KAAKwnF,mBACjDxnF,KAAKM,OAAO0lF,IAAI+0jB,GAAmB/6oB,KAAKsqnB,YACxCtqnB,KAAKM,OAAO0lF,IAAIg8jB,GAAmBhipB,KAAKq2G,iBACxCr2G,KAAKM,OAAO0lF,IAAIoljB,GAAgBproB,KAAKyhrB,kBACrCzhrB,KAAKM,OAAO0lF,IAAI4kjB,GAAuB5qoB,KAAKkirB,gBAC5ClirB,KAAKM,OAAO0lF,IAAIw4jB,GAAqBx+oB,KAAKwsnB,cAC1CxsnB,KAAKM,OAAO0lF,IAAI80lB,GAAoB96qB,KAAK4snB,aACzC5snB,KAAKM,OAAO1D,oBAAoB21nB,GAAuBvynB,KAAKq7oB,wBAC5Dr7oB,KAAKM,OAAO1D,oBAAoB+ynB,GAAoB3vnB,KAAKo7oB,qBACzDp7oB,KAAKM,OAAO0lF,IAAI+0jB,GAAmB/6oB,KAAKmlB,gBAE5CsgoB,EAAKpqpB,UAAUstnB,eAAiB,SAAU9nnB,IACvB,MAAO,YAAa,OAAQ,SAAU,UACzCtC,QAAQsC,EAAEurL,aAAe,IACjCpsL,KAAKM,OAAOk/lB,QAAS,GAEzBx/lB,KAAK4hrB,kBAKTn8B,EAAKpqpB,UAAU0hrB,qBAAuB,SAAUtpe,EAAMqpe,GAGlD,IAAK,IAFD9oD,EAAOh0nB,KAAKM,OACZmirB,KAAYphrB,MAAMC,KAAKmyM,EAAKjyM,iBAAiB,aACxCrF,EAAI,EAAG0F,EAAM4grB,EAAOhmrB,OAAQN,EAAI0F,EAAK1F,IAAK,CAC/C,IAAIskE,EAAMuzjB,EAAK8N,eAAe2gD,EAAOtmrB,GAAG0W,aAAa,iBACjD7V,OAAQ,EACZ,GAAIyjE,GAAOA,EAAI10C,MAAO,CAClB,IAAIgC,EAAO0yC,EAAI0mjB,KAAKzoY,KACA,iBAAT3wN,IACPA,EAAOlxB,EAASkxB,EAAMlyB,SAGtBmB,EADa,aAAbyjE,EAAI/5D,KACIstnB,EAAK+gB,WAAWktC,iBAAiBxhnB,EAAKA,EAAI0mjB,KAAKzoY,KAAK+jc,EAAOtmrB,KAG3DsmrB,EAAOtmrB,GAAGqW,QAEtBpV,EAASqjE,EAAI10C,MAAO/uB,EAAO8/qB,IAGnC,OAAOA,GAKXr3B,EAAKpqpB,UAAUo5oB,cAAgB,SAAU5zoB,GAEC,UAAlCb,KAAKM,OAAO2gE,aAAaljC,MAAoB/9B,KAAKg1oB,UAAYh1oB,KAAKg1oB,QAAQhujB,cACrB,KAF5B,kBAAmB,mBAAoB,sBAAuB,QAE9DzoF,QAAQsC,EAAEurL,eACpCpsL,KAAK4snB,cACL5snB,KAAKo9qB,mBAMb33B,EAAKpqpB,UAAU+hrB,eAAiB,SAAUjrD,GAEtC,IAAK,IAAI/znB,EAAK,EAAGk9qB,EADjBnpD,EAAOA,GAAcnynB,KAAKM,OAAO00nB,aACD52nB,EAAKk9qB,EAAO7+qB,OAAQ2B,IAAM,CACtD,IAAIqiE,EAAM66mB,EAAOl9qB,GACbqiE,EAAI0mjB,KAAK70mB,SACTmuD,EAAI0mjB,KAAK70mB,YAOrBmzoB,EAAKpqpB,UAAUuxnB,YAAc,WACzB5snB,KAAKkirB,iBACDlirB,KAAKg1oB,UAAYh1oB,KAAKg1oB,QAAQhujB,aAC9BhnF,KAAKg1oB,QAAQ1ioB,UAEjBtS,KAAKkirB,kBAOTz8B,EAAKpqpB,UAAUiX,QAAU,WACrBtS,KAAK4snB,cACL5snB,KAAKpD,sBACL,IAAI8F,EAAO1C,KAAKkiE,UAAUlhE,QAC1BhB,KAAKkiE,UAAU5vD,UACf/N,EAAO7B,GACPA,EAAO1C,KAAK2hrB,UAAU3grB,QACtBhB,KAAK2hrB,UAAUrvqB,UACf/N,EAAO7B,GACP1C,KAAKmlB,eACDnlB,KAAK+0oB,YACL/0oB,KAAK+0oB,WAAWzioB,WAGxBmzoB,EAAKpqpB,UAAUg7G,gBAAkB,SAAUx1G,GACvC,OAAQA,EAAEs1D,QACN,IAAK,SACDn2D,KAAK0wpB,YACL,MACJ,IAAK,SACyB,UAArB7vpB,EAAEsG,OAAOnE,UAAuBnC,EAAEsG,OAAOrD,UAAUK,SAAS,kBACzD3D,SAASmC,cAAc,kBAC3B3C,KAAKuwpB,eAET,MACJ,IAAK,KACDvwpB,KAAKkob,YACL,MACJ,IAAK,QACIr0Y,GAAahzC,EAAEsG,OAAQ,sBAA0D,UAAlCnH,KAAKM,OAAO2gE,aAAaljC,QACxE8V,GAAahzC,EAAEsG,OAAQ,kBAAqBnH,KAAKM,OAAOo+nB,YAClD7qlB,GAAahzC,EAAEsG,OAAQ,qBAC1B3G,SAASgB,iBAAiB,iBAAiB/E,SAC/CoE,EAAE2kB,iBACFxlB,KAAKkka,WAET,MACJ,IAAK,SACDlka,KAAKywpB,cAIjBhL,EAAKpqpB,UAAUmxnB,aAAe,SAAUvsnB,GACpCD,KAAK0irB,WAAazirB,EAClBD,KAAKgkf,WAAW,uBAAwBhkf,KAAKkiE,YAEjDujlB,EAAKpqpB,UAAUmnrB,cAAgB,WAC3BxirB,KAAK0irB,WAAWjnrB,QAAQ6F,KAAKtB,KAAK0irB,WAAWn8qB,SAAUvG,KAAK0irB,WAAWxnc,KAAMl7O,KAAK0irB,WAAWvnc,KAAMn7O,KAAK0irB,WAAWtnc,KAAMp7O,KAAK0irB,WAAWrnc,KAAMr7O,KAAK0irB,WAAW1jc,KAAMh/O,KAAK0irB,WAAWzjc,KAAMj/O,KAAK0irB,WAAWxjc,OAK/Muma,EAAKpqpB,UAAUuhrB,oBAAsB,SAAUzqD,GAQ3C,IAAK,IAPD6B,EAAOh0nB,KAAKM,OACZ2kE,EAAU+ujB,EAAKiJ,mBACfxpb,EAAOugb,EAAKhznB,QAAQ2B,cAAc,eAClCq6qB,EAAQhpD,EAAKhznB,QAAQQ,iBAAiB,eAAe,GACrDy7E,KACA0lmB,KAEKvkrB,EAAK,EAAGwkrB,EADjBzwD,EAAOA,GAAc6B,EAAKj2jB,QACM3/D,EAAKwkrB,EAAOnmrB,OAAQ2B,IAAM,CACtD,IAAIqiE,EAAMminB,EAAOxkrB,GACbqiE,EAAI4/mB,iBAAmB5se,EAAKjyM,iBAAiB,IAAMwynB,EAAKhznB,QAAQsC,GAAKm9D,EAAI10C,OAAOtvB,OAChFwgF,EAAMxc,EAAI10C,OAAS00C,EAAI4/mB,gBAElBp7mB,GAAWxE,EAAI4/mB,iBACjBrD,EAAMx7qB,iBAAiB,IAAMwynB,EAAKhznB,QAAQsC,GAAKm9D,EAAI10C,OAAOtvB,SAC7DkmrB,EAAOlinB,EAAI10C,OAAS00C,EAAI4/mB,iBAGhCrgrB,KAAKM,OAAOy0oB,WAAWC,QAAUh1oB,KAAK6irB,cAAcpve,EAAMx2H,GACtDhY,GAA6C,WAAlCjlE,KAAKM,OAAO2gE,aAAaljC,OACpC/9B,KAAKM,OAAOy0oB,WAAW8nC,SAAW78qB,KAAK6irB,cAAc7F,EAAO2F,KAGpEl9B,EAAKpqpB,UAAUwnrB,cAAgB,SAAUpve,EAAMx2H,GAC3C,IAAIl9E,EAAQC,KACZ,OAAO,IAAIiuI,GAAcwlE,GACrBx2H,MAAOA,EACP6lmB,mBAAoB,SAAU7irB,GAC1BF,EAAM+irB,mBAAmB7irB,IAE7BsyI,gBAAiB,SAAUv2E,EAAcsoB,GACrCvkF,EAAMgjrB,kBAAkB/mnB,EAAcsoB,OAIlDmhkB,EAAKpqpB,UAAU0nrB,kBAAoB,SAAU/mnB,EAAcsoB,GACvD,GAAItkF,KAAKM,OAAOk/lB,OAAQ,CACpB,IAAIl8lB,EAAKghF,EAAMzxE,aAAa,OACxBnQ,EAAO1C,KAAKgjrB,aAAahnnB,GAAcr5D,cAAc,IAAMW,EAAK,UAC/DZ,EAIDA,EAAKC,cAAc,kBAAkBX,UAAYsiF,EAAMtiF,UAHvDhC,KAAKo1B,cAAc4mC,EAAcsoB,EAAOhhF,EAAI,MAOxDmipB,EAAKpqpB,UAAU2nrB,aAAe,SAAUhnnB,GACpC,IAAIinnB,EAKJ,MAJsC,WAAlCjjrB,KAAKM,OAAO2gE,aAAaljC,OACzBklpB,EAAUjjrB,KAAKM,OAAOo+nB,YAAc1+nB,KAAKM,OAAOo+nB,YACzC3pmB,SAASlvB,EAAQm2D,EAAc,UAAUnpD,aAAa,iBAAkB,KAAO,IAEjD,WAAlC7S,KAAKM,OAAO2gE,aAAaljC,KAAoBklpB,EAASjjrB,KAAKM,OAAOu/nB,iBAAmB7/nB,KAAKM,OAAOysoB,kBACpG/soB,KAAKM,OAAOU,QAAQ2B,cAAc,IAAM3C,KAAKM,OAAOU,QAAQsC,GAAK,wBAEzEmipB,EAAKpqpB,UAAUynrB,mBAAqB,SAAU7irB,GAC1C,GAAID,KAAKM,OAAOk/lB,OAAQ,CACpB,IAAI98lB,EAAO1C,KAAKgjrB,aAAa/irB,EAAKe,SAAS2B,cAAc,IAAM1C,EAAKu4H,UAAY,UAC5E91H,IACoB,YAAhBzC,EAAKukF,OACL9hF,EAAKgC,MAAM4xC,QAAU,GAGrB5zC,EAAKgC,MAAM4xC,QAAU,UAKrCmvmB,EAAKpqpB,UAAU+5B,cAAgB,SAAUp0B,EAASsjF,EAAO7sD,EAAM6e,GAC3D,IAGI2soB,EAHAC,EAAWljrB,KAAKM,OAAOm0C,aAAatvC,kBACpCg+qB,EAAWD,EAASzxX,aAAeyxX,EAAS51pB,aAC5Cw+d,EAA6C,WAAlC9rf,KAAKM,OAAO2gE,aAAaljC,KAEpC+td,IACAm3L,EAAUjjrB,KAAKM,OAAOo+nB,YAAc1+nB,KAAKM,OAAOo+nB,YACzC3pmB,SAASlvB,EAAQ7E,EAAS,UAAU6R,aAAa,iBAAkB,KAAO,IAErF,IAAIusnB,EAAQp/nB,KAAKM,OAAOm0C,aAAa9xC,cAAc,oBAC/Cs9D,EAAQ6rb,EACPm3L,EAASjjrB,KAAKM,OAAOu/nB,iBAAmB7/nB,KAAKM,OAAOysoB,kBACrD/soB,KAAKM,OAAOU,QAAQ2B,cAAc,IAAM3C,KAAKM,OAAOU,QAAQsC,GAAK,uBAAuBX,cAAc,kBACtGw+pB,EAASlhmB,EAAMr0D,wBACfY,EAAOs/e,EACP9rf,KAAKM,OAAOU,QAAQ4K,wBAAwBY,KAAO20pB,EAAO30pB,KAC1DsF,EAAQ+hC,GAAa7yC,EAAS,aAC9BoirB,EAActxqB,EAAMlG,wBACpB+qQ,EAAK9wQ,EAAQ7E,EAAS,MAAM4K,wBAC5B1K,EAAMC,EAAc,OACpBkC,UAAW,+CACXC,GAAIm0B,EAAO,SACXl0B,OAAQ,WAAa+yC,EAAU,UACzB2soB,EAASG,EAAY12qB,IAAM02qB,EAAYrtqB,OAASqtqB,EAAYz2qB,OAASw0pB,EAAOz0pB,KACvE1M,KAAKM,OAAO28nB,mBAAqBmC,EAAMjznB,UAAY,IAAM8zD,EAAM9zD,UAAY,GAAK,YACtFi3qB,EAAY52qB,KAAOA,EAAOyzD,EAAMj0D,WAAao3qB,EAAYptqB,MAAQ,GAAK,gBACxD2gQ,EAAG3gQ,MAAQ,0BAE9BokB,EAAUj5B,EAAc,OAASkC,UAAW,kBAChD+2B,EAAQz4B,YAAY2iF,GACpB,IAAI9zD,EAAQrvB,EAAc,OAASkC,UAAW,0BAC9CmtB,EAAM7uB,YAAYR,EAAc,OAASkC,UAAW,iCACpDmtB,EAAM7uB,YAAYR,EAAc,OAASkC,UAAW,iCACpDnC,EAAIS,YAAYy4B,GAChBl5B,EAAIS,YAAY6uB,GAChByvC,EAAMt+D,YAAYT,GAClB,IAAIisB,EAAa4H,SAASv0B,SAAS0Z,YAAY/M,iBAAiBjM,EAAK,MAAMkM,iBAAiB,aAAc,IAM1G,GALIlM,EAAI0K,wBAAwBoK,MAAQ2gQ,EAAG3gQ,OACvC9U,EAAIyB,cAAc,SAASiJ,wBAAwBmK,QAAuB,IAAboX,IAAqB,IAClFjsB,EAAIwD,MAAMsR,MAAQ9U,EAAIwD,MAAM05B,UAEhCl9B,EAAIwD,MAAM8H,KAAQuoB,SAAS7zB,EAAIwD,MAAM8H,KAAM,IAAMtL,EAAI0D,YAAc,EAAK,MACnEu+qB,GAAYr3L,IAAa9rf,KAAKM,OAAOk0nB,YAAa,CACnD0uD,EAASx+qB,MAAMwP,SAAW,SAC1B,IAAIe,EAAMrB,GAA+B9B,EAAO5Q,GAChDA,EAAIwD,MAAMgI,IAAMuI,EAAIvI,IAAM02qB,EAAYrtqB,OAAS,EAAI,OAGpD0voB,MAORwV,KAAWA,QADHlwoB,MAAQ,KmCxoBnB,IAAI4lpB,GAA+B,WAK/B,SAASA,EAAcrwqB,EAAQghE,GAC3BthE,KAAKqjrB,cACLrjrB,KAAKsjrB,cACLtjrB,KAAKujrB,WAAY,EACjBvjrB,KAAKwjrB,SAAU,EACfxjrB,KAAKyjrB,gBAAiB,EACtBzjrB,KAAK0jrB,sBACL1jrB,KAAK2jrB,eAAgB,EACrB3jrB,KAAK4jrB,mBAAoB,EACzB5jrB,KAAKounB,SAAWt7mB,IAAe,GAAQN,SAAS,EAAMa,MAAO,MAC7DrT,KAAKqunB,UAAYv7mB,IAAe,GAAQN,SAAS,EAAOa,MAAO,MAC/DrT,KAAKM,OAASA,EACdN,KAAKshE,eAAiBA,EACtBthE,KAAKtD,mBACLsD,KAAKounB,SAASlpnB,aAAa/D,EAAc,SACrCkC,UAAW,+BAAgCI,OAASiD,KAAM,cAC1D1G,KAAKounB,SAASxxmB,YAClB5c,KAAKqunB,UAAUnpnB,aAAa/D,EAAc,SACtCkC,UAAW,+BAAgCI,OAASiD,KAAQ,cAC5D1G,KAAKqunB,UAAUzxmB,YACnB5c,KAAKqunB,UAAU1rnB,cAAc,YAAYmB,UAAUM,IAAI,aACnDpE,KAAKM,OAAO4S,WACZvP,GAAU3D,KAAKounB,SAAUpunB,KAAKqunB,YAAa,UAucnD,OApcAsiD,EAAct1qB,UAAUiX,QAAU,WAC9BtS,KAAKpD,sBACLoD,KAAKw+G,eACA/gH,EAAkBuC,KAAKu8pB,UAAWv8pB,KAAKu8pB,OAAOv7pB,SAAYhB,KAAKu8pB,OAAOv1kB,aACvEhnF,KAAKu8pB,OAAOjqpB,WAGpBq+pB,EAAct1qB,UAAUworB,UAAY,WAC5B7jrB,KAAKM,OAAO4S,UACZvP,EAAS3D,KAAK84L,SAASt3L,iBAAiB,wBAAyB,UAGjE6C,EAAYrE,KAAK84L,SAASt3L,iBAAiB,wBAAyB,WAM5EmvqB,EAAct1qB,UAAUqB,iBAAmB,WACnCsD,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAOslF,GAAG04jB,GAAct+oB,KAAKm/G,aAAcn/G,MAChDA,KAAKM,OAAOslF,GAAGi4iB,GAAiB79nB,KAAK8jrB,qBAAsB9jrB,MAC3DA,KAAKM,OAAOslF,GAAGm1jB,GAAmB/6oB,KAAK+rG,OAAQ/rG,MAC/CA,KAAKM,OAAO5D,iBAAiB0goB,GAAkBp9nB,KAAK+jrB,WAAWzorB,KAAK0E,OACpEA,KAAKM,OAAOslF,GAAGguiB,GAAgB5znB,KAAKsS,QAAStS,MAC7CA,KAAKM,OAAOslF,GAAGimkB,GAAmB7rpB,KAAK6jrB,UAAW7jrB,QAKtD2wqB,EAAct1qB,UAAUuB,oBAAsB,WACtCoD,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAO0lF,IAAIs4jB,GAAct+oB,KAAKm/G,cACnCn/G,KAAKM,OAAO0lF,IAAI+0jB,GAAmB/6oB,KAAK+rG,QACxC/rG,KAAKM,OAAO0lF,IAAI4tiB,GAAgB5znB,KAAKsS,SACrCtS,KAAKM,OAAO0lF,IAAI63iB,GAAiB79nB,KAAK8jrB,sBACtC9jrB,KAAKM,OAAO0lF,IAAI6lkB,GAAmB7rpB,KAAK6jrB,aAE5ClT,EAAct1qB,UAAU0wG,OAAS,WAC7B/rG,KAAKqlH,KAAOrlH,KAAKshE,eAAeE,WAAW,gBAC3CxhE,KAAKg/pB,mBACLh/pB,KAAKsqpB,mBAAqBtqpB,KAAKshE,eAAeE,WAAW,oBAE7DmvmB,EAAct1qB,UAAU8jH,aAAe,SAAUt+G,GAC7C,IAAIguH,EAAgBhuH,EAAEsG,OACtB,IAAKnH,KAAK4jrB,kBACN,GAAKnmrB,EAAkBoI,EAAQgpH,EAAe,WAAcpxH,EAAkBoI,EAAQgpH,EAAe,kBAc5FpxH,EAAkBuC,KAAKu8pB,UAAWv8pB,KAAKu8pB,OAAO/koB,SAAYq3F,EAAc/qH,UAAUK,SAAS,qBAC5FnE,KAAKu8pB,OAAOh7kB,OACZvhF,KAAKgkrB,eACLhkrB,KAAKikrB,uBAELjkrB,KAAKujrB,WAAY,QAlBrB,GAAI10jB,EAAc/qH,UAAUK,SAAS,wBAA0B0qH,EAAc/qH,UAAUK,SAAS,iBAC5F,GAAKnE,KAAKyjrB,gBAAkBzjrB,KAAKu8pB,OAAO/koB,UAAax3B,KAAKujrB,UAEtD,YADAvjrB,KAAKujrB,WAAY,QAIhB10jB,EAAc/qH,UAAUK,SAAS,iBACtC0qH,EAAcx6G,cAAc1R,cAAc,eAAe3F,MAAQ,GACjEgD,KAAKkkrB,oBAAoB,IACzBlkrB,KAAKmkrB,oBAajBnkrB,KAAK6jrB,aAETlT,EAAct1qB,UAAU0orB,WAAa,YAC5BtmrB,EAAkBuC,KAAKu8pB,SAAWv8pB,KAAKu8pB,OAAO/koB,UAC/Cx3B,KAAKu8pB,OAAOh7kB,OAEZvhF,KAAKujrB,WAAY,IAQzB5S,EAAct1qB,UAAUm2pB,oBAAsB,SAAUzkpB,EAAGC,EAAG7F,GAC1D,GAAKnH,KAAKu8pB,OAAO/koB,QAyCbx3B,KAAK+jrB,aACL/jrB,KAAKokrB,oBA1CiB,CACtB,IACItE,GACA1zf,YAAa,0BAA2BprL,QAAShB,KAAKM,OAAOU,QAC7D+8D,QAAS/9D,KAAKg1nB,aAAcn8lB,QAAQ,GAGxC,GADA74B,KAAKM,OAAOkmB,QAAQ69pB,GAAgCvE,GAChDA,EAAMjnpB,OACN,OAEJ74B,KAAKikrB,uBACLjkrB,KAAKu8pB,OAAO3wmB,WACZ5rD,KAAKu8pB,OAAOv7pB,QAAQ0D,MAAM6uD,UAAY,QACtC,IAAI6O,EAAiBpiE,KAAKu8pB,OAAOv7pB,QAAQ0D,MAAM4xC,QAC/Ct2C,KAAKu8pB,OAAOv7pB,QAAQ0D,MAAM4xC,QAAU,QACpC,IAAI+rB,EAASzuD,GAA+B/N,EAAQsB,EAAQ,mBAAoBnH,KAAKu8pB,OAAOv7pB,SAC5FhB,KAAKu8pB,OAAOv7pB,QAAQ0D,MAAM4xC,QAAU8rB,EACpCpiE,KAAKu8pB,OAAOv7pB,QAAQ0D,MAAMgI,IAAM21D,EAAO31D,IAAM7G,EAAQsB,EAAQ,iBAAiByE,wBAAwBmK,OAAS,KAE1GtY,EAAkBoI,EAAQsB,EAAQ,gBACnCnH,KAAKu8pB,OAAOvmpB,MAAQ,KAEpBxK,GAAQkb,UACR1mB,KAAKu8pB,OAAOp1pB,OAAS3G,SAASuL,KAC9B/L,KAAKu8pB,OAAOropB,UAAakC,EAAG,SAAUC,EAAG,UACzCrW,KAAKu8pB,OAAO76iB,kBACZ1hH,KAAKu8pB,OAAO76pB,KAAO1B,KAAKskrB,SAAShprB,KAAK0E,OAGlCA,KAAKM,OAAO4S,UACZlT,KAAKu8pB,OAAOv7pB,QAAQ0D,MAAM8H,KAAOrF,EAAOgN,WAAa,KAGrDnU,KAAKu8pB,OAAOv7pB,QAAQ0D,MAAM8H,KAAS61D,EAAO71D,KAfnC,IAesD3G,EAAQsB,EAAQ,iBAAiBkmB,YAAe,EAAI,KAGzHrtB,KAAKmkrB,mBACLnkrB,KAAKu8pB,OAAOt4iB,OAOhBjkH,KAAK6jrB,aAQTlT,EAAct1qB,UAAUkprB,kBAAoB,SAAUnuqB,EAAGC,GACrDrW,KAAK4jrB,mBAAoB,EACrB5jrB,KAAKu8pB,OAAO/koB,QACZx3B,KAAK+jrB,cAGJ/jrB,KAAK2jrB,cAIN3jrB,KAAKikrB,uBAHLjkrB,KAAKu8pB,OAAOnioB,QAAUp6B,KAAKwkrB,oBAK/BxkrB,KAAKu8pB,OAAO3wmB,WACZ5rD,KAAKu8pB,OAAOropB,UAAakC,EAAG,SAAUC,EAAG,UACrC5Y,EAAkB2Y,IAClBpW,KAAKu8pB,OAAOropB,UAAakC,EAAG,SAAUC,EAAG,UACzCrW,KAAKu8pB,OAAO76iB,oBAGZ1hH,KAAKu8pB,OAAOv7pB,QAAQ0D,MAAMgI,IAAM,GAChC1M,KAAKu8pB,OAAOv7pB,QAAQ0D,MAAM8H,KAAO,GACjCxM,KAAKu8pB,OAAOv7pB,QAAQ0D,MAAMgI,IAAM2J,EAAI,KACpCrW,KAAKu8pB,OAAOv7pB,QAAQ0D,MAAM8H,KAAO4J,EAAI,MAEzCpW,KAAKu8pB,OAAOpmnB,WAAan2C,KAAKykrB,iBAAiBnprB,KAAK0E,MACpDA,KAAKu8pB,OAAOt4iB,OACZjkH,KAAK2jrB,eAAgB,EACrB3jrB,KAAKu8pB,OAAOhpiB,YAAcvzH,KAAK0krB,kBAAkBpprB,KAAK0E,QAE1D2wqB,EAAct1qB,UAAUyorB,qBAAuB,SAAUjjrB,GACjDA,EAAEswF,SAAWnxF,KAAKu/B,iBAAmB1+B,EAAE4+B,QACvCz/B,KAAK+rG,UAGb4kkB,EAAct1qB,UAAUoprB,iBAAmB,WACvC,IAAI1T,EAAgB/wqB,KAAKu8pB,OAAOnioB,QAAQz3B,cAAc,oBACtD4C,GAAanB,IAAI2sqB,EAAe,QAAS/wqB,KAAK2krB,0BAA2B3krB,OAE7E2wqB,EAAct1qB,UAAUqprB,kBAAoB,WACxC,IAAI3T,EAAgB/wqB,KAAKu8pB,OAAOnioB,QAAQz3B,cAAc,oBACtD4C,GAAahB,OAAOwsqB,EAAe,QAAS/wqB,KAAK2krB,4BAErDhU,EAAct1qB,UAAU25nB,WAAa,WAGjC,OAFch1nB,KAAKM,OAAO00nB,aAAahulB,OAAO,SAAU61B,GAAU,MAAwB,aAAhBA,EAAOn2D,OAC3C,IAA/Bm2D,EAAOqqjB,qBAAkD,aAAhBrqjB,EAAOn2D,WAAwCvL,IAAjB0hE,EAAO9wC,SAGzF4kpB,EAAct1qB,UAAU2jqB,iBAAmB,WAEvCh/pB,KAAKk/pB,OAAS/9pB,EAAc,OAASkC,UAAW,eAAgBC,GAAItD,KAAKM,OAAOU,QAAQsC,GAAK,WAC7FtD,KAAKM,OAAOU,QAAQW,YAAY3B,KAAKk/pB,QAC1Bl/pB,KAAKM,OAAOU,QAAQ4K,wBAAwBoK,MACxChW,KAAKM,OAAO4S,UAD3B,IAEIq+pB,EAAavxqB,KAAKM,OAAOU,QAAQ2B,cAAc,YAC9ClF,EAAkB8zqB,IACfA,EAAW3lqB,wBAAwBc,IAE3C1M,KACKu8pB,OAAS,IAAIz3iB,IACdlgC,OAAQ5kF,KAAKqlH,KAAKtxC,YAAY,iBAC9B4yC,eAAe,EACfX,eAAe,EACfh4G,OAAQhO,KAAKM,OAAO0N,OACpBwpB,SAAS,EACTtkB,UAAWlT,KAAKM,OAAO4S,UACvB/L,OAAQ3G,SAASosB,eAAe5sB,KAAKM,OAAOU,QAAQsC,IACpD6iH,UACQE,MAAOrmH,KAAK4krB,mBAAmBtprB,KAAK0E,MACpComH,aACIhsF,QAASp6B,KAAKqlH,KAAKtxC,YAAY,YAAaiqC,WAAW,EACvD/qG,SAAU,qBAIdozG,MAAOrmH,KAAKgkrB,aAAa1orB,KAAK0E,MAC9BomH,aAAenzG,SAAU,yBAA0BmnB,QAASp6B,KAAKqlH,KAAKtxC,YAAY,mBAE1F35C,QAASp6B,KAAKwkrB,oBACdxuqB,MAAO,IACP/C,SAAU,OACV22G,mBAAqB5xF,OAAQ,UAEjCh4B,KAAKu8pB,OAAOlmnB,SAASr2C,KAAKk/pB,QAC1B/9lB,GAAiBnhE,KAAKu8pB,OAAOv7pB,SAC7BhB,KAAKukB,cAETospB,EAAct1qB,UAAUmprB,kBAAoB,WACxCxkrB,KAAKi/pB,QAAU99pB,EAAc,OAASkC,UAAW,oBACjD,IAAImnd,EAAYrpd,EAAc,OAASkC,UAAW,sCAC9CwhrB,EAAc1jrB,EAAc,SAC5BkC,UAAW,0BACXI,OAASqjB,YAAa9mB,KAAKqlH,KAAKtxC,YAAY,aAE5C+wmB,EAAe3jrB,EAAc,QAAUkC,UAAW,kDAClDI,OAASy8B,MAAOlgC,KAAKqlH,KAAKtxC,YAAY,aACtCgxmB,EAAS5jrB,EAAc,OAASkC,UAAW,oBAC/CrD,KAAK84L,SAAW33L,EAAc,OAASkC,UAAW,oBAClDmnd,EAAU7od,YAAYkjrB,GACtBr6N,EAAU7od,YAAYmjrB,GACtB9krB,KAAKwxqB,aAAe,IAAIn+B,GAAUwxC,GAClC,IAAIG,EAAkBhlrB,KAAKilrB,oBAAoBjlrB,KAAKM,OAAO00nB,cAK3D,OAJAh1nB,KAAK84L,SAASn3L,YAAYqjrB,GAC1BD,EAAOpjrB,YAAY3B,KAAK84L,UACxB94L,KAAKi/pB,QAAQt9pB,YAAY6od,GACzBxqd,KAAKi/pB,QAAQt9pB,YAAYojrB,GAClB/krB,KAAKi/pB,SAEhB0R,EAAct1qB,UAAUuprB,mBAAqB,SAAU3krB,GAEnD,GADAD,KAAK0jrB,uBACAjmrB,EAAkBwC,GAAO,CACtBD,KAAKsjrB,WAAW7mrB,QAChBuD,KAAKklrB,kBAAkBllrB,KAAKsjrB,YAAY,GAExCtjrB,KAAKqjrB,WAAW5mrB,QAChBuD,KAAKklrB,kBAAkBllrB,KAAKqjrB,YAAY,GAE5C,IAAIrorB,GACAoxL,YAAa,cAAeprL,QAAShB,KAAKM,OAAOU,QACjD+8D,QAAS/9D,KAAK0jrB,mBAAoByB,eAAgBnlrB,KAAKu8pB,QAE3Dv8pB,KAAKM,OAAOkmB,QAAQ+rmB,GAAuBv3nB,GAC3CgF,KAAKsqpB,mBAAmB3sB,WAAW39nB,KAAK0jrB,oBACxC1jrB,KAAKgkrB,eACLhkrB,KAAKM,OAAOyN,OAAO68nB,IAAyBz5iB,OAAQ,WAG5Dw/kB,EAAct1qB,UAAU6prB,kBAAoB,SAAUE,EAAc92oB,GAChE,IAAK,IAAIr8B,EAAQ,EAAGA,EAAQmzqB,EAAa3orB,OAAQwV,IAAS,CACtD,IAAIozqB,EAASD,EAAanzqB,GACtBqzqB,EAAatlrB,KAAKM,OAAOwhoB,eAAeujD,GAC5CC,EAAW9tpB,QAAU8W,EACrBtuC,KAAK0jrB,mBAAmBl/qB,KAAK8grB,KAGrC3U,EAAct1qB,UAAU2orB,aAAe,WACnChkrB,KAAKsjrB,cACLtjrB,KAAKqjrB,cAELrjrB,KAAK+jrB,aACL/jrB,KAAKokrB,iBAETzT,EAAct1qB,UAAUkqrB,iBAAmB,SAAUpsf,EAAWqsf,GACxDrsf,IACyC,IAArCn5L,KAAKsjrB,WAAW/krB,QAAQinrB,IACxBxlrB,KAAKsjrB,WAAWj7pB,OAAOroB,KAAKsjrB,WAAW/krB,QAAQinrB,GAAS,IAEnB,IAArCxlrB,KAAKqjrB,WAAW9krB,QAAQinrB,IACxBxlrB,KAAKqjrB,WAAW7+qB,KAAKghrB,MAIgB,IAArCxlrB,KAAKqjrB,WAAW9krB,QAAQinrB,IACxBxlrB,KAAKqjrB,WAAWh7pB,OAAOroB,KAAKqjrB,WAAW9krB,QAAQinrB,GAAS,IAEnB,IAArCxlrB,KAAKsjrB,WAAW/krB,QAAQinrB,IACxBxlrB,KAAKsjrB,WAAW9+qB,KAAKghrB,KAIjC7U,EAAct1qB,UAAU6orB,oBAAsB,SAAUuB,GACpD,IACIC,EADAC,GAAc,EAWlB,GATkB,KAAdF,GACAzlrB,KAAKmkrB,mBACLuB,EAAU1lrB,KAAKg1nB,aACf2wD,GAAc,GAGdD,EAAU,IAAIlinB,GAAYxjE,KAAKg1nB,cAAc/wjB,cAAa,IAAIZ,IACzDQ,MAAM,aAAc,aAAc4hnB,GAAW,IAElDC,EAAQjprB,OACRuD,KAAK84L,SAAS92L,UAAY,IAC1BhC,KAAK84L,SAASh1L,UAAUS,OAAO,aAC/BvE,KAAK84L,SAASn3L,YAAY3B,KAAKilrB,oBAAoBS,EAASD,IACvDE,GACD3lrB,KAAKokrB,oBAGR,CACD,IAAIwB,EAAYzkrB,EAAc,QAAUkC,UAAW,kBACnDuirB,EAAU5jrB,UAAYhC,KAAKqlH,KAAKtxC,YAAY,UAC5C/zE,KAAK84L,SAAS92L,UAAY,IAC1BhC,KAAK84L,SAASn3L,YAAYikrB,GAC1B5lrB,KAAK84L,SAASh1L,UAAUM,IAAI,aAEhCpE,KAAK0uF,MAAO,EACZ1uF,KAAKi8B,aAET00oB,EAAct1qB,UAAUkpB,WAAa,WACjChf,GAAanB,IAAIpE,KAAKu8pB,OAAOv7pB,QAAS,QAAShB,KAAK6lrB,qBAAsB7lrB,MAC1EuF,GAAanB,IAAIpE,KAAKwxqB,aAAa33M,UAAW,QAAS75d,KAAK2krB,0BAA2B3krB,MACvFA,KAAKwxqB,aAAan7M,aAEtBs6M,EAAct1qB,UAAUmjH,aAAe,WAC/Bx+G,KAAKM,OAAO0mF,cAGZhnF,KAAKu8pB,OAAOv7pB,SACZuE,GAAahB,OAAOvE,KAAKu8pB,OAAOv7pB,QAAS,QAAShB,KAAK6lrB,sBAE3DtgrB,GAAahB,OAAOvE,KAAKwxqB,aAAa33M,UAAW,QAAS75d,KAAK2krB,2BAC/D3krB,KAAKwxqB,aAAaj6M,gBAEtBo5M,EAAct1qB,UAAUwqrB,qBAAuB,SAAUhlrB,GACrD,IAAIilrB,EACApjrB,EAAOmxC,GAAahzC,EAAEsG,OAAQ,sBAClC,GAAIzE,EAAM,CAGN,GAFAggE,GAAehgE,EAAK2R,eACpB3R,EAAKC,cAAc,iBAAiBT,QAChCQ,EAAKC,cAAc,YACnBmjrB,GAAa,MAEZ,CAAA,IAAIpjrB,EAAKC,cAAc,cAIxB,OAHAmjrB,GAAa,EAKjB,IAAIC,EAAYlyoB,GAAanxC,EAAM,YAAYmQ,aAAa,OAC5D7S,KAAKulrB,iBAAiBO,EAAYC,GAClC/lrB,KAAKgmrB,0BAGbrV,EAAct1qB,UAAU2qrB,sBAAwB,WAC5C,IAAIC,EAAcjmrB,KAAKu8pB,OAAOv7pB,QAAQ2B,cAAc,iBAAiB3F,MACjEwyI,EAAWxvI,KAAK84L,SAASt3L,iBAAiB,YAAY/E,OACtDyrH,EAAMloH,KAAKk/pB,OAAOv8pB,cAAc,qBAAqBA,cAAc,UAAU+kF,cAAc,GAC/FwgC,EAAIhK,UAAW,EACE,IAAbsxB,GAAkC,KAAhBy2iB,IAClB/9jB,EAAIhK,UAAW,GAEnBgK,EAAIt8D,YAER+knB,EAAct1qB,UAAU4prB,oBAAsB,SAAUiB,EAAOT,GAC3DzlrB,KAAKi5L,UAAY93L,EAAc,MAAQkC,UAAW,oBAClD,IAAK,IAAIlH,EAAI,EAAGA,EAAI+prB,EAAMzprB,OAAQN,IAAK,CACnC,IAAI4hE,EAAUmonB,EAAM/prB,GACpB6D,KAAKm+L,eAAepgI,GAExB,OAAO/9D,KAAKi5L,WAEhB03e,EAAct1qB,UAAU4orB,qBAAuB,WAC3CjkrB,KAAKu8pB,OAAOv7pB,QAAQ2B,cAAc,iBAAiB3F,MAAQ,GAC3DgD,KAAKkkrB,oBAAoB,IACzB,IAAK,IAAI/nrB,EAAI,EAAGA,EAAI6D,KAAKM,OAAOU,QAAQQ,iBAAiB,eAAe/E,OAAQN,IAAK,CACjF,IAAI6E,EAAUhB,KAAKM,OAAOU,QAAQQ,iBAAiB,eAAerF,GAC9DgqrB,EAAYtyoB,GAAa7yC,EAAS,YAAY6R,aAAa,OAClD7S,KAAKM,OAAOwhoB,eAAeqkD,GAC7B3upB,SACPx2B,EAAQwR,SAAU,EAClBxS,KAAKm8oB,WAAWn7oB,EAAQqT,cAAc1R,cAAc,aAAa,KAGjE3B,EAAQwR,SAAU,EAClBxS,KAAKm8oB,WAAWn7oB,EAAQqT,cAAc1R,cAAc,aAAa,MAI7EguqB,EAAct1qB,UAAU8gpB,WAAa,SAAUn7oB,EAASstC,GACpDA,EAAQxqC,EAAU9C,GAAU,YAAa,cAAgB8C,EAAU9C,GAAU,cAAe,aAEhG2vqB,EAAct1qB,UAAUyX,eAAiB,SAAUO,EAAOb,EAAS9S,GAC/D,IAAI0mrB,EAAO5zqB,EAAUxS,KAAKounB,SAASxsnB,WAAU,GAAQ5B,KAAKqunB,UAAUzsnB,WAAU,GAE9E,OADAwkrB,EAAKzjrB,cAAc,YAAYX,UAAYqR,EACpCuvD,GAAmBljE,EAAK0mrB,EAAM,aAEzCzV,EAAct1qB,UAAU8iM,eAAiB,SAAUthI,GAC/C,IAAIwpnB,EACAC,EACAC,EACJ,GACI1pnB,EAAOqqjB,oBAAqB,CAC5Bm/D,EAASllrB,EAAc,MAAQkC,UAAW,gBAAiBE,OAAQ,kBAAmBD,GAAI,UAAYu5D,EAAOn9D,MAC7G4mrB,GAAwD,IAAzCtmrB,KAAKsjrB,WAAW/krB,QAAQs+D,EAAOn9D,KAC9C6mrB,GAAwD,IAAzCvmrB,KAAKqjrB,WAAW9krB,QAAQs+D,EAAOn9D,KAC9C,IAAI8mrB,EAAiBxmrB,KAAK8S,eAAe+pD,EAAOsB,WAAatB,EAAOrlC,UAAY8upB,GAAiBC,EAAc1pnB,EAAOn9D,KACtH2mrB,EAAO1krB,YAAY6krB,GACnBxmrB,KAAKi5L,UAAUt3L,YAAY0krB,KAGnC1V,EAAct1qB,UAAUsprB,0BAA4B,SAAU9jrB,GAC1Db,KAAKokrB,gBACLpkrB,KAAKimrB,YAAcplrB,EAAEsG,OAAOnK,MAC5BgD,KACKi8B,YACLj8B,KAAKkmqB,WAAWrlqB,IAEpB8vqB,EAAct1qB,UAAU6qqB,WAAa,SAAUrlqB,GAC3C,IAAI6R,EAAQ1S,KACRmC,EAAYuQ,EAAMg8E,MAAsB,KAAd7tF,EAAEinB,QAAuB,EAAN,IACjD9nB,KAAK+qB,MAAQlvB,OAAOuG,YAAY,WAAcsQ,EAAMwxqB,oBAAoBxxqB,EAAMuzqB,cAAiB9jrB,IAEnGwuqB,EAAct1qB,UAAU4gC,UAAY,WAChCpgC,OAAOyG,cAActC,KAAK+qB,QAE9B4lpB,EAAct1qB,UAAU+orB,cAAgB,WACpCpkrB,KAAKk/pB,OAAOv8pB,cAAc,yBAAyBmB,UAAUM,IAAI,gBAErEusqB,EAAct1qB,UAAU8orB,iBAAmB,WACvCnkrB,KAAKk/pB,OAAOv8pB,cAAc,yBAAyBmB,UAAUS,OAAO,gBAExEosqB,EAAct1qB,UAAUiprB,SAAW,WAC3B94qB,GAAQkb,WACR1mB,KAAKu8pB,OAAOv7pB,QAAQ2B,cAAc,mBAAmBmB,UAAUS,OAAO,iBACtEvE,KAAKu8pB,OAAOv7pB,QAAQQ,iBAAiB,eAAe,GAAGU,UAI/DyuqB,EAAct1qB,UAAUkkC,cAAgB,WACpC,MAAO,iBAEJoxoB,KCleP8V,GAA8B,WAC9B,SAASA,EAAanmrB,GAClBN,KAAK0mrB,mBAAoB,EACzB1mrB,KAAKgjE,kBACLhjE,KAAKM,OAASA,EA4NlB,OA1NAmmrB,EAAa9jf,SAAW,SAAUriM,EAAQ9D,GACtC,OAAOA,EAAKu7T,WACRv7T,EAAKk0U,eAAc,GAAMhgL,gBAAgBN,KAAK9vJ,EAAOixD,aAAau5kB,mBAClEtuoB,EAAKk0U,eAAc,GAAMhgL,iBAEjC+1hB,EAAaprrB,UAAUmuoB,SAAW,SAAUxsoB,EAAO6/D,GAE/C,OADqBkG,GAAelG,KAAY7/D,EAAOgD,KAAKgjE,eAAenG,EAAO9wC,QAAQ,IAG9F06pB,EAAaprrB,UAAUsrrB,cAAgB,SAAU1+C,GAC7C,IAEIp0c,EAFA9zL,EAAQC,KACR4mrB,KAEAC,EAAW5+C,EAAQ3W,uBAYvB,OAXIu1D,EAASpqrB,SACToqrB,EAASznrB,QAAQ,SAAUqhE,GACvBmmnB,EAAcpirB,KAAKi8D,EAAI8C,WAAWmrF,aAAa,IAAIrrF,OAEvDwwH,EAAUjxG,QAAQgyG,IAAIgyf,GAAetzf,KAAK,SAAUzyL,GAChDgmrB,EAASznrB,QAAQ,SAAUqhE,EAAKxuD,GAC5BlS,EAAMijE,eAAevC,EAAI10C,OAASlrB,EAAEoR,GAAOlT,YAKhD80L,GAGX4yf,EAAaprrB,UAAUyrrB,WAAa,SAAUjqnB,EAAQkqnB,GAE9C/mrB,KAAK0mrB,oBADLK,EAMJ,IAAI50D,EAAOt1jB,EACX78D,KAAKujoB,SAAWvjoB,KAAKgnrB,mBAAmB70D,GAGxC,IAAK,IAFD55V,KACA0uZ,KACK9qrB,EAAI,EAAGA,EAAI6D,KAAKujoB,SAAUpnoB,IAC/Bo8R,EAAKp8R,GAAK,IAAIqkU,OACdjoC,EAAKp8R,GAAG2lE,SAEZy2N,EAAOv4R,KAAKknrB,eAAe3uZ,GAE3B,IAAK,IAAIn6R,EAAK,EAAGk9mB,EADjB/iV,EAAOv4R,KAAKmnrB,mBAAmB5uZ,GACCn6R,EAAKk9mB,EAAO7+mB,OAAQ2B,IAE3C,CAAA,IADDsiE,EAAM46iB,EAAOl9mB,GACjB,IAASjC,EAAI,EAAGA,EAAIukE,EAAIoB,MAAMrlE,OAAQN,IAAK,CACvC,IAAI8mE,EAAOvC,EAAIoB,MAAM3lE,QACAhB,IAAjB8nE,EAAKzrC,SAAyByrC,EAAK+9iB,WAAahI,GAASwrB,gBACzD9jkB,EAAIoB,MAAQ9hE,KAAKonrB,kBAAkB1mnB,EAAIoB,MAAO3lE,GAC9CA,GAAQ,GAEN4qrB,QAAyC5rrB,IAAjB8nE,EAAKzrC,SAA2ByrC,EAAKzrC,UAC/DkpC,EAAIoB,MAAQ9hE,KAAKonrB,kBAAkB1mnB,EAAIoB,MAAO3lE,GAC9CA,GAAQ,IAIpB,IAASA,EAAI,EAAGA,EAAIg2nB,EAAK11nB,OAAQN,IAC7B6D,KAAKqnrB,sBAAsBl1D,EAAKh2nB,GAAI8qrB,GAExC,OAAS1uZ,KAAMA,EAAMx6N,QAASkpnB,IAElCR,EAAaprrB,UAAUisrB,kBAAoB,SAAUx1qB,GACjD,IAAI9U,EAAQwe,WAAW1J,GAEvB,OAAgC,IAAxBA,EAAMvT,QAAQ,KAAgByB,KAAKM,OAAOU,QAAQ4K,wBAAwBoK,MAAQhZ,EAAQ,IAAOA,GAE7GyprB,EAAaprrB,UAAUgsrB,sBAAwB,SAAUxqnB,EAAQoqnB,GAC7D,IAAIpqnB,EAAO70B,SAGX,GAAK60B,EAAOkB,SAMR,GAAIlB,EAAOrlC,SAAWx3B,KAAK0mrB,kBAAmB,CAE1C,GAAgB,IADF1mrB,KAAKunrB,aAAa1qnB,EAAQ,GAEpC,IAAK,IAAI1gE,EAAI,EAAGA,EAAI0gE,EAAOkB,QAAQthE,OAAQN,IAEvC6D,KAAKqnrB,sBAAsBxqnB,EAAOkB,QAAQ5hE,GAAI8qrB,SAVtDpqnB,EAAOrlC,SAAWx3B,KAAK0mrB,oBACvBO,EAAczirB,KAAKq4D,IAe/B4pnB,EAAaprrB,UAAU+rrB,kBAAoB,SAAUtlnB,EAAO+2N,GAExD,IAAK,IADD2uZ,KACKrrrB,EAAI,EAAGA,EAAI08R,EAAW18R,IAC3BqrrB,EAAYhjrB,KAAKs9D,EAAM3lE,IAE3B,IAASA,EAAK08R,EAAY,EAAI18R,EAAI2lE,EAAMrlE,OAAQN,IAC5CqrrB,EAAYhjrB,KAAKs9D,EAAM3lE,IAE3B,OAAOqrrB,GAEXf,EAAaprrB,UAAU8rrB,mBAAqB,SAAU5uZ,GAElD,IAAK,IADDx6N,EAAU/9D,KAAKM,OAAOw2nB,2BAA6B92nB,KAAKM,OAAO00nB,aAAeh1nB,KAAKM,OAAOy9D,QACrF5hE,EAAI,EAAGA,EAAI4hE,EAAQthE,OAAQN,IAC3B4hE,EAAQ5hE,GAAG6rC,WACZuwP,EAAOv4R,KAAKynrB,gBAAgB1pnB,EAAQ5hE,GAAIo8R,EAAM,EAAS,IAANp8R,GAAS,EAAOA,IAAO4hE,EAAQthE,OAAS,IAGjG,OAAO87R,GAGXkuZ,EAAaprrB,UAAUosrB,gBAAkB,SAAUt1D,EAAM72V,EAAUrpR,EAAO4xnB,EAAY6jD,EAAeC,GAEjG,IAAI1jD,EAAU0jD,EAAe,aAAe,GAC5C,GAAKx1D,EAAKp0jB,QAGL,CACD,IAAI23N,EAAU11R,KAAKunrB,aAAap1D,EAAM,GAClCz8V,GACA4F,EAASrpR,GAAO6vD,MAAMt9D,KAAK,IAAIioe,IAC3Bu0I,SAAUhI,GAASwrB,cAAe3nkB,OAAQs1jB,EAAMz8V,QAASA,KAKjE,IAAK,IADDkyZ,OAAoB,EACfzrrB,EAAI,EAAG0F,EAAMswnB,EAAKp0jB,QAAQthE,OAAQN,EAAI0F,EAAK1F,IAE5Cg2nB,EAAKp0jB,QAAQ5hE,GAAGq7B,UAAYowpB,IAC5BA,GACoB,GAGxBtsZ,EAAWt7R,KAAKynrB,gBAAgBt1D,EAAKp0jB,QAAQ5hE,GAAIm/R,EAAUrpR,EAAQ,EAAG4xnB,EAAkB,IAAN1noB,EAASA,IAAO0F,EAAM,GAAM8lrB,QAlBlHrsZ,EAASrpR,GAAO6vD,MAAMt9D,KAAKxE,KAAKq5nB,aAAalH,EAAMnZ,GAASn6T,OAAQ7+S,KAAKujoB,SAAWtxnB,GAAQ4xnB,EAAa,GAAM6jD,EAAgB,cAAgB,IAAOzjD,EAAShynB,EAAOjS,KAAKM,OAAOokoB,oBAAoBvS,EAAKzynB,OAqB/M,OAAO47R,GAEXmrZ,EAAaprrB,UAAUg+nB,aAAe,SAAUwuD,EAAY7mE,EAAU/pV,EAAS5zR,EAAWo9R,EAAUknC,GAChG,IAAI5xO,GACAv+D,QAAWqwpB,EAAWrwpB,QACtBmimB,YAAc,EACdv6U,YAAe3hT,EAAkBoqrB,EAAWxuf,gBAC5Cugc,MAAS,GACT/8jB,OAAUgrnB,EACV7mE,SAAYA,EACZ/pV,QAAWA,EACX5zR,UAAaA,EACb4O,MAASwuR,EACTuxO,SAAYrqM,GAKhB,QAHK5xO,EAAOkhM,SAAWlhM,EAAOkhM,QAAU,WAC7BlhM,EAAOkhM,QAEX,IAAIw1M,GAAK12Y,IAEpB0wlB,EAAaprrB,UAAU6rrB,eAAiB,SAAU3uZ,GAI9C,IAAK,IAFD0vW,EAAUjooB,KAAKM,OACfg1qB,EAAgBt1qB,KAAKM,OAAOo3nB,yBACvBv7nB,EAAI,EAAG0F,EAAM02R,EAAK97R,OAAQN,EAAI0F,EAAK1F,IAAK,CAC7C,GAAI8roB,EAAQnhB,cACR,IAAK,IAAIvjmB,EAAI,EAAGspI,EAAQo7e,EAAQxT,cAAc12jB,QAAQthE,OAAQ8mB,EAAIspI,EAAOtpI,IACjEvjB,KAAKM,OAAOw2nB,6BAA4D,IAA9Bw+C,EAAc/2qB,QAAQglB,IAGpEg1Q,EAAKp8R,GAAG2lE,MAAMt9D,KAAKxE,KAAKq5nB,gBAAiBrgB,GAAS0qB,gBAGtDuE,EAAQ7O,gBAAkB6O,EAAQtsW,YAClCpD,EAAKp8R,GAAG2lE,MAAMt9D,KAAKxE,KAAKq5nB,gBAAiBrgB,GAAS2qB,eAG1D,OAAOprW,GAGXkuZ,EAAaprrB,UAAUksrB,aAAe,SAAU1qnB,EAAQ/9C,GACpD,GAAI+9C,EAAOkB,QACP,IAAK,IAAI5hE,EAAI,EAAGA,EAAI0gE,EAAOkB,QAAQthE,OAAQN,IACvC2iB,EAAQ9e,KAAKunrB,aAAa1qnB,EAAOkB,QAAQ5hE,GAAI2iB,QAI7C+9C,EAAOrlC,SAAWx3B,KAAK0mrB,oBACvB5nqB,IAGR,OAAOA,GAGX2nqB,EAAaprrB,UAAU2rrB,mBAAqB,SAAUnqnB,GAElD,IAAK,IADDvwD,EAAM,EACDnQ,EAAI,EAAGA,EAAI0gE,EAAOpgE,OAAQN,IAAK,CACpC,IAAIwxM,EAAQ3tM,KAAKmloB,WAAWtokB,EAAO1gE,GAAI,GACnCmQ,EAAMqhM,IACNrhM,EAAMqhM,GAGd,OAAOrhM,EAAM,GAGjBm6qB,EAAaprrB,UAAU8poB,WAAa,SAAU1kkB,EAAKxuD,GAC/C,IAAI3F,EAAM2F,EACN4zc,KACJ,GAAIplZ,EAAI1C,QAAS,CACb9rD,IACA,IAAK,IAAI9V,EAAI,EAAGA,EAAIskE,EAAI1C,QAAQthE,OAAQN,IACpC0pd,EAAQ1pd,GAAK6D,KAAKmloB,WAAW1kkB,EAAI1C,QAAQ5hE,GAAI8V,GAEjD,IAAK,IAAIsR,EAAI,EAAGA,EAAIsic,EAAQppd,OAAQ8mB,IAC5BjX,EAAMu5c,EAAQtic,KACdjX,EAAMu5c,EAAQtic,IAGtBtR,EAAQ3F,EAEZ,OAAO2F,GAGJw0qB,KAOPqB,GAAsC,WACtC,SAASA,EAAqB/+lB,GAC1B/oF,KAAKqnnB,eAAiB,IAAIvM,GAAe/xhB,GACzC/oF,KAAKggI,qBAAuB,IAAIt1B,GAAqB3hB,GAmEzD,OAhEA++lB,EAAqBzsrB,UAAU0srB,qBAAuB,SAAU9nrB,EAAMi3F,GAClE,OAAKz5F,EAAkBwC,EAAKjD,QAAUiD,EAAKjD,MAChCgD,KAAKqnnB,eAAe5ljB,kBAAkBy1B,EAAtCl3F,CAAoDC,EAAKjD,OAGzD,IAIf8qrB,EAAqBzsrB,UAAU2srB,gBAAkB,SAAU/nrB,GAIvD,GAHIA,EAAKijE,eACLjjE,EAAKjD,MAAQH,EAASoD,EAAK48D,OAAOuB,gBAAiB2E,GAAe9iE,EAAK48D,UAAY58D,EAAKjD,OAAO,KAE1E,WAArBiD,EAAK48D,OAAOn2D,WAA4CvL,IAAvB8E,EAAK48D,OAAO7gC,QAA+C,KAAvB/7B,EAAK48D,OAAO7gC,OACjF,OAAO/7B,EAAKjD,MAAQgD,KAAKggI,qBAAqB9wD,iBAAkBlzC,OAAQ/7B,EAAK48D,OAAO7gC,QAAhEh8B,CAA0EC,EAAKjD,OAAS,GAE3G,GAAyB,YAArBiD,EAAK48D,OAAOn2D,KACjB,OAAOzG,EAAKjD,MAAQ,OAAS,QAG5B,GAA0B,SAArBiD,EAAK48D,OAAOn2D,MAAwC,aAArBzG,EAAK48D,OAAOn2D,MAA4C,SAArBzG,EAAK48D,OAAOn2D,WAA2CvL,IAAvB8E,EAAK48D,OAAO7gC,OAoCpH,OAAMv+B,EAAkBwC,EAAK48D,OAAOn2D,OAAUjJ,EAAkBwC,EAAKjD,SAAYS,EAAkBwC,EAAKjD,OAI7F,GAHCiD,EAAU,MAAEiN,WApCxB,GAAkC,iBAAvBjN,EAAK48D,OAAO7gC,OAAqB,CACxC,IAAIA,OAAS,EAUb,OARIA,EADqB,SAArB/7B,EAAK48D,OAAOn2D,MACDA,KAAM,OAAQg7D,SAAUzhE,EAAK48D,OAAO7gC,QAErB,SAArB/7B,EAAK48D,OAAOn2D,MACNA,KAAM,OAAQg7D,SAAUzhE,EAAK48D,OAAO7gC,SAGpCt1B,KAAM,WAAYg7D,SAAUzhE,EAAK48D,OAAO7gC,QAEhDh8B,KAAK+nrB,qBAAqB9nrB,EAAM+7B,GAGvC,GAAI/7B,EAAK48D,OAAO7gC,kBAAkB19B,aAAsCnD,IAA5B8E,EAAK48D,OAAO7gC,OAAOt1B,KAC3D,OAAQzG,EAAKjD,MAAMkQ,WAInB,IAAIgqF,OAAe,EAWnB,OARIA,EAFqB,SAArBj3F,EAAK48D,OAAOn2D,MAEKA,KAAMzG,EAAK48D,OAAO7gC,OAAOt1B,KAAMs1B,OAAQ/7B,EAAK48D,OAAO7gC,OAAOA,OAAQ0lC,SAAUzhE,EAAK48D,OAAO7gC,OAAO0lC,UAEtF,SAArBzhE,EAAK48D,OAAOn2D,MACAA,KAAM,OAAQs1B,OAAQ/7B,EAAK48D,OAAO7gC,OAAOA,OAAQ0lC,SAAUzhE,EAAK48D,OAAO7gC,OAAO0lC,WAG9Eh7D,KAAM,WAAYs1B,OAAQ/7B,EAAK48D,OAAO7gC,OAAOA,OAAQ0lC,SAAUzhE,EAAK48D,OAAO7gC,OAAO0lC,UAEhG1hE,KAAK+nrB,qBAAqB9nrB,EAAMi3F,IAahD4wlB,KC5SPG,GAA6B,WAK7B,SAASA,EAAY3nrB,GAEjBN,KAAKkorB,QAELlorB,KAAKmorB,aAELnorB,KAAKu4R,QAELv4R,KAAK+9D,WAEL/9D,KAAKuD,UACLvD,KAAKoorB,UAAY,EACjBporB,KAAKqorB,QAAU,gBACfrorB,KAAKsorB,qBAAsB,EAC3BtorB,KAAKuorB,aAAc,EACnBvorB,KAAKworB,oBAAqB,EAC1BxorB,KAAKgjE,kBACLhjE,KAAKM,OAASA,EACdN,KAAKkP,OAAS,IAAIu3qB,GAAanmrB,GAgwBnC,OA3vBA2nrB,EAAY5srB,UAAUkkC,cAAgB,WAClC,MAAO,eAEX0opB,EAAY5srB,UAAU28N,KAAO,SAAUg8Z,GACd,OAAjBA,EAAKhznB,SAAwC,KAApBgznB,EAAKhznB,QAAQsC,KACtC0wnB,EAAKhznB,QAAQsC,IAAK,IAAI0c,MAAOgmmB,cAC7BhmnB,KAAKworB,oBAAqB,GAE9BxorB,KAAKM,OAAS0znB,EACVh0nB,KAAKM,OAAO0mF,cAGhBhnF,KAAKyorB,iBAActtrB,EACnB6E,KAAKkorB,QAELlorB,KAAKmorB,aAELnorB,KAAKu4R,QAELv4R,KAAK+9D,WAEL/9D,KAAKuD,UACLvD,KAAKoorB,UAAY,EAEjBporB,KAAKstM,YAASnyM,EACd6E,KAAKqorB,QAAU,gBACfrorB,KAAKsorB,qBAAsB,EAC3BtorB,KAAK0orB,qBAAuB,IAAIZ,GAAqB9zD,EAAKhmnB,UAY9Di6qB,EAAY5srB,UAAU6/mB,IAAM,SAAU/4iB,EAAMwmnB,EAAkB70B,EAAkBC,EAAU60B,EAAO50B,GAC7F,IAAIhgC,EAAO7xjB,EAWX,OAVA6xjB,EAAKxtmB,QhFoKkB,qBgFnKvBxmB,KAAKxD,KAAO,IAAI03U,GAAK8/S,GACrBh0nB,KAAKyorB,aAAc,EACnBzorB,KAAKg0pB,OAASA,EAEVh0pB,KAAKuorB,YADLK,IAImB,EAEhB5orB,KAAK6orB,eAAe70D,EAAM20D,EAAkB70B,EAAkBC,IAGzEk0B,EAAY5srB,UAAUwtrB,eAAiB,SAAU70D,EAAM20D,EAAkB70B,EAAkBC,GACvF,IAAIh0pB,EAAQC,KACZ,IAAKvC,EAAkBkrrB,KAAsBlrrB,EAAkBkrrB,EAAiBplnB,aAC5EolnB,EAAiBplnB,sBAAsBC,GAEvC,OAAO,IAAIof,QAAQ,SAAUC,EAASC,GAGhB6lmB,EAAiBplnB,WAAWmrF,aAAa,IAAIrrF,IACnDiwH,KAAK,SAAU12J,GACvB78B,EAAMi4N,KAAKg8Z,GACXj0nB,EAAM+orB,oBAAoB90D,EAAM20D,EAAkB70B,EAAkBC,EAAUn3nB,GAC9EimD,EAAQ9iF,EAAMmorB,UAMtB,IAAIl2D,KAGJ,OAFAA,EAAWxtnB,KAAKxE,KAAKxD,KAAKmwU,WAAY85W,GAAa9jf,SAASqxb,EAAMh0nB,KAAKxD,QACvEw1nB,EAAWxtnB,KAAKxE,KAAKkP,OAAOy3qB,cAAc3yD,IACnCpxiB,QAAQgyG,IAAIo9b,GAAY1+b,KAAK,SAAUzyL,GAG1C,OAFAd,EAAMi4N,KAAKg8Z,GACXj0nB,EAAM+orB,oBAAoB90D,EAAM20D,EAAkB70B,EAAkBC,EAAUlzpB,EAAE,IACzEd,EAAMmorB,OACdvzf,MAAM,SAAU9zL,GACfd,EAAMO,OAAOkmB,QAAQijnB,GAAsB5ooB,MAMvDonrB,EAAY5srB,UAAUytrB,oBAAsB,SAAU90D,EAAM20D,EAAkB70B,EAAkBC,EAAUn3nB,GACtG,IAAImspB,EAAY,EACXtrrB,EAAkBkrrB,IAAsBlrrB,EAAkBkrrB,EAAiBK,kBAE5EhprB,KAAKqorB,QAAY5qrB,EAAkBkrrB,EAAiBK,eAAetirB,MAA+C,gBAAvCiirB,EAAiBK,eAAetirB,KACtGjJ,EAAkBkrrB,EAAiBK,eAAeD,aACnDA,EAAYJ,EAAiBK,eAAeD,YAGhDtrrB,EAAkBs2pB,IAClB/zpB,KAAKmorB,aACLnorB,KAAKu4R,QACLv4R,KAAK+9D,WACL/9D,KAAKuD,WAEiB,aAAjBvD,KAAKqorB,SACVrorB,KAAKmorB,UAAYp0B,EAAS54C,WAC1Bn7mB,KAAKu4R,QACLv4R,KAAK+9D,WACL/9D,KAAKuD,OAASwwpB,EAASxwpB,SAGvBvD,KAAKmorB,aACLnorB,KAAKu4R,KAAOw7X,EAAS54C,WAAW,GAAG5iV,KACnCv4R,KAAK+9D,QAAUg2lB,EAAS54C,WAAW,GAAGp9iB,QACtC/9D,KAAKuD,OAASwwpB,EAASxwpB,OACvBvD,KAAKoorB,UAAaporB,KAAKu4R,KAAKv4R,KAAKu4R,KAAK97R,OAAS,GAAGwV,MAAQ82qB,EAC1D/orB,KAAKoorB,aAEJ3qrB,EAAkBkrrB,KACdlrrB,EAAkBq2pB,IAgBdr2pB,EAAkBkrrB,EAAiB/jmB,SACpC5kF,KAAKiprB,mBAAmBp5nB,KAAKuB,MAAMvB,KAAKC,UAAU64nB,EAAiB/jmB,UAElEnnF,EAAkBkrrB,EAAiBr7e,UACpCttM,KAAKstM,OAASz9I,KAAKuB,MAAMvB,KAAKC,UAAU64nB,EAAiBr7e,YAnBxD7vM,EAAkBkrrB,EAAiB/jmB,UAAYkvkB,GAAqC,aAAjB9zpB,KAAKqorB,SACzErorB,KAAKiprB,mBAAmBp5nB,KAAKuB,MAAMvB,KAAKC,UAAU64nB,EAAiB/jmB,UAElEnnF,EAAkBkrrB,EAAiBr7e,UACf,kBAAjBttM,KAAKqorB,QACAv0B,IACD9zpB,KAAKstM,OAASz9I,KAAKuB,MAAMvB,KAAKC,UAAU64nB,EAAiBr7e,UAI7DttM,KAAKstM,OAASz9I,KAAKuB,MAAMvB,KAAKC,UAAU64nB,EAAiBr7e,YAazEttM,KAAKsorB,qBAAwB7qrB,EAAkBkrrB,IAAoBA,EAAiBL,oBAGpF,IAAIhlD,EAAYtjoB,KAAKkP,OAAO43qB,WAAW9yD,EAAKj2jB,QAAS/9D,KAAKsorB,qBACtDY,EAAc,EAEbzrrB,EAAmBm/B,EAAQ,OAAEu1H,SAC9B+2hB,GAAgBtspB,EAAQ,OAAEu1H,MAC1B+2hB,GAAgBtspB,EAAQ,OAAE21H,aAG9BvyJ,KAAKmprB,qBAAqBn1D,EAAMsP,EAAWqlD,EAAkBO,GAExDzrrB,EAAkBkrrB,IAAsBlrrB,EAAkBkrrB,EAAiBplnB,aAAiBolnB,EAAiBplnB,sBAAsBC,GAG9H/lE,EAAkBkrrB,IAAqD,gBAAhCA,EAAiBllT,WAI9DzjY,KAAKoprB,qBAAqBp1D,EAAMp3lB,EAAG0mmB,EAAWwwB,GAH9C9zpB,KAAKoprB,qBAAqBp1D,EAAMp3lB,EAAG0mmB,EAAWwwB,EAAkB9/B,EAAKwW,yBAHrExqoB,KAAKoprB,qBAAqBp1D,EAAMp3lB,EAAG0mmB,EAAWwwB,EAAkB60B,EAAiBplnB,YAQrFvjE,KAAKyorB,aAAc,EACnBz0D,EAAKxtmB,QAAQ6iqB,GAA4BrprB,KAAKg0pB,QAAWnge,QAAS7zL,KAAKsprB,kBAI3ErB,EAAY5srB,UAAU+trB,qBAAuB,SAAUp1D,EAAMzgjB,EAAY+vjB,EAAWwwB,EAAkBy1B,GAErFv1D,EAAKj2jB,QAAlB,IAEIuzF,OAASn2J,EAORsC,GAFD6zJ,EAJC7zJ,EAAkB8rrB,GAIVh2mB,EAAWx0E,OAHXwqrB,GAKiBp3hB,OAI1BnyJ,KAAKwprB,kBAAkBx1D,EAAM1ie,EAAQgye,EAAW,GAHhDtjoB,KAAKyprB,mBAAmBz1D,EAAM1ie,EAAQgye,EAAWhye,EAAOa,OAKvD10J,EAAkB81E,EAAW7T,cACzBjiE,EAAkB8rrB,GAInBvprB,KAAK0prB,kBAAkB11D,EAAMzgjB,EAAWx0E,QAHxCiB,KAAK0prB,kBAAkB11D,EAAMzgjB,EAAWx0E,OAAQwqrB,IAOnD9rrB,EAAkBuC,KAAKstM,UACF,kBAAjBttM,KAAKqorB,UAAgCv0B,GAAuC,aAAjB9zpB,KAAKqorB,UACjErorB,KAAK2prB,mBAAmB3prB,KAAKstM,QAIrC,IAAI0wa,KAQJ,GAPIh+mB,KAAK+9D,QAAQthE,OAAS,IACtBuhnB,EAAMjgjB,QAAU/9D,KAAK+9D,SAEzBigjB,EAAMzlV,KAAOv4R,KAAKu4R,KAClBv4R,KAAKmorB,UAAU3jrB,KAAKw5mB,GACpBh+mB,KAAKkorB,KAAK/sE,WAAan7mB,KAAKmorB,UAC5BnorB,KAAKkorB,KAAK3krB,OAASvD,KAAKuD,QACnBuwpB,EAAkB,CACnB,GAAI9zpB,KAAKuorB,YAAa,CAClB,IAAIL,EAAO,IAAInsE,GAAS/7mB,KAAKkorB,KAAM,MAAOl0D,EAAKhmnB,QAC1ChO,KAAKg0pB,OAINh0pB,KAAKsprB,YAAcpB,EAAK7kd,WAAW,YAHnC6kd,EAAKz6lB,KAAK,kBAMb,CACGy6lB,EAAO,IAAInsE,GAAS/7mB,KAAKkorB,KAAM,OAAQl0D,EAAKhmnB,QAC3ChO,KAAKg0pB,OAINh0pB,KAAKsprB,YAAcpB,EAAK7kd,WAAW,qEAHnC6kd,EAAKz6lB,KAAK,eAMdztF,KAAKworB,qBACLx0D,EAAKhznB,QAAQsC,GAAK,MAK9B2krB,EAAY5srB,UAAUourB,mBAAqB,SAAUz1D,EAAMzwjB,EAAY+/jB,EAAWnxe,GAC9E,IAAK,IAAI/zJ,EAAK,EAAGkxd,EAAe/rZ,EAAYnlE,EAAKkxd,EAAa7yd,OAAQ2B,IAAM,CACxE,IAAIyf,EAAOyxc,EAAalxd,GAEpB0jE,KAGAmB,KACJA,EAAKhxD,MAHO,EAGSkgJ,EACrB,IAAI1xF,EAAMuzjB,EAAKU,iBAAiB72mB,EAAKkO,OAEjC9rB,GACAjD,MAAO6gB,EAAKxgB,IACZw/D,OAAQ4D,EACR/7D,WAAOvJ,EACP+nE,aAAczC,EAAIgnjB,mBAEtBxkjB,EAAKjmE,MAAQgD,KAAKM,OAAOo0nB,iBAAiB72mB,EAAKkO,OAAOoyC,WAClD,KAAOn+D,KAAK0orB,qBAAqBV,gBAAgB/nrB,GAAQ,MACzD4d,EAAKiB,MAAQ,EACbmkD,EAAKjmE,OAAS6gB,EAAKiB,MAAQ,SAG3BmkD,EAAKjmE,OAAS6gB,EAAKiB,MAAQ,QAE/BmkD,EAAKv+D,MAAQ1E,KAAK4prB,qBAAqB5prB,KAAKkb,OAC5C,IACI2uqB,EADkB,IAAIxuD,GAA6BrH,GACTiF,aAAap7mB,GAG3D,GAFA7d,KAAK8prB,eAAe91D,EAAM61D,EAAyBtmnB,EAAW4uF,MAAQ5uF,EAAWgvF,YAAavyJ,KAAKoorB,WACnGtmnB,EAAMt9D,KAAKy+D,GACPjjE,KAAKu4R,KAAKv4R,KAAKu4R,KAAK97R,OAAS,GAAGqlE,MAAMrlE,OAAS,EAAG,CAGlD,IAAK,IAFDstrB,EAASxmnB,EAAW4uF,MAAQ5uF,EAAWgvF,YAAcs3hB,EAAwB,GAAG/nnB,MAAMrlE,OACtFutrB,EAAS,EACJnnrB,EAAK,EAAGoB,EAAKjE,KAAKu4R,KAAKv4R,KAAKu4R,KAAK97R,OAAS,GAAGqlE,MAAOj/D,EAAKoB,EAAGxH,OAAQoG,IAAM,CAC/E,IAAIonrB,EAAQhmrB,EAAGpB,GACXonrB,EAAMh4qB,MAAQ83qB,IACdA,EAASE,EAAMh4qB,OAEfg4qB,EAAMh4qB,MAAQ+3qB,IACdA,EAASC,EAAMh4qB,OAEnBg4qB,EAAMvlrB,MAAQ1E,KAAK4prB,qBAAqB5prB,KAAKkb,OACzC4mD,EAAMA,EAAMrlE,OAAS,GAAGwV,QAAUg4qB,EAAMh4qB,OACxC6vD,EAAMt9D,KAAKylrB,GAMnB,IAHKF,EAAS9mnB,EAAKhxD,MAAS,IACxBgxD,EAAKyyN,QAAUq0Z,EAAS9mnB,EAAKhxD,OAE1B+3qB,EAAU1mD,EAAUvlkB,QAAQthE,OAAS01J,GAAQ,CAEhD,IAAIm0d,KAC2B,IAA3B/ijB,EAAWgvF,YACX+zd,EAAMr0mB,QAGNq0mB,EAAMr0mB,MAAS+3qB,EAAS,EAE5B1jE,EAAM5hnB,MAAQ1E,KAAK4prB,qBAAqB5prB,KAAKkb,OAC7C4mD,EAAMt9D,KAAK8hnB,GACX0jE,SAGH,CAGD,IAAK,IAFDrnnB,EAAO,EAEFl4D,EAAK,EAAG8mU,EAAK+xT,EAAUvlkB,QAAStzD,EAAK8mU,EAAG90U,OAAQgO,IAAM,CAC/C8mU,EAAG9mU,GACL+sB,SACNmrC,IAGRM,EAAKyyN,QAAWnyN,EAAWgvF,YAAc5vF,EAE7C3iE,KAAKu4R,KAAKv4R,KAAKu4R,KAAK97R,OAAS,GAAGqlE,MAAQA,EACxC9hE,KAAKoorB,aACA3qrB,EAAkB8lE,EAAWgvF,cAAgBhvF,EAAWgvF,YAAc,EACvEvyJ,KAAKyprB,mBAAmBz1D,EAAMn2mB,EAAK48C,MAAO6okB,EAAWzlnB,EAAK48C,MAAM03F,QAGhEnyJ,KAAKwprB,kBAAkBx1D,EAAMn2mB,EAAK48C,MAAO6okB,KACzCtjoB,KAAK0prB,kBAAkB11D,EAAMn2mB,OAAM1iB,KAAoB,MAKnE8srB,EAAY5srB,UAAUmurB,kBAAoB,SAAUx1D,EAAM1ie,EAAQgye,EAAWnxe,GAKzE,IAAK,IAJD+3hB,EAAO5rrB,OAAOhB,KAAKg0J,GAAQ70J,OAC3BwV,EAAQ,EAER6vD,KACKllC,EAAI,EAAGA,EAAIstpB,EAAMttpB,IAAK,CAC3BklC,KACA7vD,EAAQ,EACR,IAAK,IAAIgsD,EAAI,EAAGp8D,EAAMyhoB,EAAUvlkB,QAAQthE,OAAQwhE,EAAIp8D,EAAKo8D,IAAK,CAE1D,IAAIjhE,EAASS,EAAkB6loB,EAAUvlkB,QAAQE,GAAGlyC,OAA2D,GAAlDlvB,EAASymoB,EAAUvlkB,QAAQE,GAAGlyC,MAAOulI,EAAO10H,IACrGigC,EAASymkB,EAAUvlkB,QAAQE,GAC3B+E,OAAiB,EAMrB,GAJInG,EAAO4qjB,iBAAmB5qjB,EAAO4qjB,oBACjCzkjB,EAAiBhjE,KAAKkP,OAAOs6nB,SAASxsoB,EAAO6/D,GAC7C7/D,EAAQH,EAASggE,EAAOuB,gBAAiB4E,KAExCvlE,EAAkBT,GAAQ,CAE3B,IAAImtrB,GAAkB3trB,KAAM80J,EAAO10H,GAAIigC,OAAQymkB,EAAUvlkB,QAAQE,GAAI+E,eAAgBA,GACrFgxjB,EAAKxtmB,QhFlIO,qBgFkI4B9nB,EAAOyrrB,GAC3CttnB,OAAQymkB,EAAUvlkB,QAAQE,GAAIzhE,KAAM80J,EAAO10H,GAC3C5/B,MAAOA,EAAO0H,WAAOvJ,EAAWu6R,QAAS,KAG7C,IAAIzyN,KAMJ,GALAA,EAAKhxD,MAAQA,EAAQkgJ,EACrBlvF,EAAKjmE,MAAQmtrB,EAAcntrB,MACvBmtrB,EAAcz0Z,QAAU,IACxBzyN,EAAKyyN,QAAUy0Z,EAAcz0Z,SAE5Bj4R,EAAkB0srB,EAAczlrB,OAKjCu+D,EAAKv+D,OAAU+yB,KAAMu8lB,EAAKhznB,QAAQsC,GAAK,UAAY2O,EAAQkgJ,QALlB,CACzC,IAAI4td,EAAa//mB,KAAKoqrB,eAAep2D,EAAM/hnB,EAAQkgJ,GACnDlvF,EAAKv+D,MAAQ1E,KAAK0+mB,aAAa1+mB,KAAKuD,OAAOw8mB,GAAaoqE,EAAczlrB,OAK1Eo9D,EAAMt9D,KAAKy+D,GAEfhxD,IAEJjS,KAAKu4R,KAAK/zR,MAAOyN,MAAOjS,KAAKoorB,YAAatmnB,MAAOA,MAIzDmmnB,EAAY5srB,UAAUqurB,kBAAoB,SAAU11D,EAAMq2D,EAAKd,EAAoBlwE,EAAQixE,GACvF,IAAIC,EAAe,IAAIxwD,GAAsB/F,GAEzCx3nB,OAAOrB,EAUX,GALIqB,EAJCiB,EAAkB8rrB,GAIZc,EAHAd,OAKIpurB,IAAXk+mB,IACAA,EAAS,GAET2a,EAAKS,cAAc12jB,QAAQthE,OAAS,GAAK6trB,EAAS,CAClD,IACIE,EADoB,IAAIrvD,GAA2BnH,GACdiF,aAAaz8nB,GAAQ21J,MAAO31J,EAAK21J,QACtEq4hB,EAAiB/trB,OAAS,GAC1BuD,KAAK8prB,eAAe91D,EAAMw2D,EAAkBnxE,OAG/C,CACDA,EAAS2a,EAAKS,cAAc12jB,QAAQthE,OAAS,IAAM6trB,EAAUt2D,EAAKS,cAAc12jB,QAAQthE,OAAS48mB,EACjG,IAAIoxE,EAAQF,EAAatxD,aAAaz8nB,EAAM6trB,EAAI3qnB,YAC5C+qnB,EAAMhurB,OAAS,IAAM6trB,GACrBtqrB,KAAK8prB,eAAe91D,EAAMy2D,EAAOpxE,KAK7C4uE,EAAY5srB,UAAUyurB,eAAiB,SAAU91D,EAAMlyjB,EAAOu3iB,EAAQqxE,GAClE,IAAK,IAAItsrB,EAAK,EAAG65nB,EAAUn2jB,EAAO1jE,EAAK65nB,EAAQx7nB,OAAQ2B,IAAM,CAKzD,IAAK,IAJDsiE,EAAMu3jB,EAAQ75nB,GAEdusrB,KACA14qB,EAAQ,EACHpP,EAAK,EAAGoB,EAAKy8D,EAAIoB,MAAOj/D,EAAKoB,EAAGxH,OAAQoG,IAAM,CACnD,IAAIogE,EAAOh/D,EAAGpB,GAEV0jnB,KACJ,GAAKtjjB,EAAKzrC,SAAWx3B,KAAKsorB,oBAEtB,GADAr2qB,IACIgxD,EAAK02jB,WAAY,CAEjB,GADApT,EAAMt0mB,MAAQA,EAAQonmB,EACjB57mB,EAAkBwlE,EAAKpG,OAAOgqD,gBAG9B,GAAKppH,EAAkBwlE,EAAKpG,OAAOm9jB,qBAGnC,GAAKv8nB,EAAkBwlE,EAAKpG,OAAOo9jB,sBAIpC,IAAK,IAAIxvnB,EAAK,EAAG8mU,EAAKjzU,OAAOhB,KAAKojE,EAAIlkE,KAAKymE,EAAKpG,OAAO9wC,QAASthB,EAAK8mU,EAAG90U,OAAQgO,IAAM,CACxE8mU,EAAG9mU,KACDw4D,EAAKpG,OAAOn2D,OACfjJ,EAAkBijE,EAAIlkE,KAAKymE,EAAKpG,OAAO9wC,OAAO6+pB,KAGzCntrB,EAAkBijE,EAAIlkE,KAAKymE,EAAKpG,OAAO9wC,OAAO8+pB,SAG9CptrB,EAAkBijE,EAAIlkE,KAAKymE,EAAKpG,OAAO9wC,OAAO++pB,KAG9CrtrB,EAAkBijE,EAAIlkE,KAAKymE,EAAKpG,OAAO9wC,OAAOg/pB,KAG9CttrB,EAAkBijE,EAAIlkE,KAAKymE,EAAKpG,OAAO9wC,OAAOimK,OAG9Cv0L,EAAkBijE,EAAIlkE,KAAKymE,EAAKpG,OAAO9wC,OAAOi/pB,WAG9CvtrB,EAAkBijE,EAAIlkE,KAAKymE,EAAKpG,OAAO9wC,OAAOk/pB,YAG9CxtrB,EAAkBijE,EAAIlkE,KAAKymE,EAAKpG,OAAO9wC,OAAOwjO,UACpDg3X,EAAMvpnB,MAAQ0jE,EAAIlkE,KAAKymE,EAAKpG,OAAO9wC,OAAOwjO,QAH1Cg3X,EAAMvpnB,MAAQ0jE,EAAIlkE,KAAKymE,EAAKpG,OAAO9wC,OAAOk/pB,WAH1C1kE,EAAMvpnB,MAAQ0jE,EAAIlkE,KAAKymE,EAAKpG,OAAO9wC,OAAOi/pB,UAH1CzkE,EAAMvpnB,MAAQ0jE,EAAIlkE,KAAKymE,EAAKpG,OAAO9wC,OAAOimK,MAH1Cu0b,EAAMvpnB,MAAQ0jE,EAAIlkE,KAAKymE,EAAKpG,OAAO9wC,OAAOg/pB,IAH1CxkE,EAAMvpnB,MAAQ0jE,EAAIlkE,KAAKymE,EAAKpG,OAAO9wC,OAAO++pB,IAH1CvkE,EAAMvpnB,MAAQ0jE,EAAIlkE,KAAKymE,EAAKpG,OAAO9wC,OAAO8+pB,QAH1CtkE,EAAMvpnB,MAAQ0jE,EAAIlkE,KAAKymE,EAAKpG,OAAO9wC,OAAO6+pB,UAPtDrkE,EAAMvpnB,MAAQgD,KAAKkrrB,iBAAiBlyE,GAASsiB,eAAgBr4jB,EAAKpG,OAAOo9jB,qBAAsBh3jB,EAAMvC,QAHrG6ljB,EAAMvpnB,MAAQgD,KAAKkrrB,iBAAiBlyE,GAASoiB,aAAcn4jB,EAAKpG,OAAOm9jB,oBAAqB/2jB,EAAMvC,QAHlG6ljB,EAAMvpnB,MAAQgD,KAAKkrrB,iBAAiBlyE,GAASkiB,QAASj4jB,EAAKpG,OAAOgqD,eAAgB5jD,EAAMvC,GAuC5F6ljB,EAAM7hnB,MAAQ1E,KAAK4prB,qBAAqB5prB,KAAKkb,OACzC+nD,EAAKv/D,WAAWgB,MAAM2tC,YACtBk0kB,EAAM7hnB,MAAM8qD,OAASyT,EAAKv/D,WAAWgB,MAAM2tC,WAE/Cs4oB,EAAQnmrB,KAAK+hnB,aAGOprnB,IAAhBuvrB,IACAnkE,EAAMt0mB,MAAQA,EAAQonmB,EACtBkN,EAAM7hnB,MAAQ1E,KAAK4prB,qBAAqB5prB,KAAKkb,OAC7CyvqB,EAAQnmrB,KAAK+hnB,IAKxB9onB,EAAkBitrB,GAInB1qrB,KAAKu4R,KAAK/zR,MAAOyN,MAAOjS,KAAKoorB,YAAatmnB,MAAO6onB,IAHjD3qrB,KAAKu4R,KAAK/zR,MAAOyN,MAAOy4qB,EAAa5onB,MAAO6onB,MAQxD1C,EAAY5srB,UAAU6vrB,iBAAmB,SAAUlqE,EAAU/xmB,EAAUg0D,EAAMvC,GACzE,IAAI1mC,KACJA,EAAWn8B,EAAam7mB,GAAU/1iB,EAAK+9iB,WAAahymB,GAAQC,GAG5D,OADW+qB,EAAWn8B,EAAam7mB,GAAU/1iB,EAAK+9iB,WAAWtgjB,EAAIlkE,KAAKymE,EAAKpG,OAAO9wC,MAAQk3C,EAAKpG,OAAO9wC,MAAQk3C,EAAKpG,OAAO4yjB,aAC/G,GAAG07D,WAGlBlD,EAAY5srB,UAAUqjnB,aAAe,SAAU0sE,EAAOC,GAKlD,IAAK,IAHDtsrB,KAEAusrB,EAAWhtrB,OAAOhB,KAAK8trB,GAClBn5qB,EAAQ,EAAGA,EAAQq5qB,EAAS7urB,OAAQwV,IACjB,SAApBq5qB,EAASr5qB,KACTlT,EAAOusrB,EAASr5qB,IAAUm5qB,EAAME,EAASr5qB,KAGjDq5qB,EAAWhtrB,OAAOhB,KAAK+trB,GACvB,IAASp5qB,EAAQ,EAAGA,EAAQq5qB,EAAS7urB,OAAQwV,IACjB,SAApBq5qB,EAASr5qB,KACTlT,EAAOusrB,EAASr5qB,IAAUo5qB,EAAMC,EAASr5qB,KAGjD,OAAOlT,GAEXkprB,EAAY5srB,UAAU+urB,eAAiB,SAAUp2D,EAAMrsT,GAEnD,IAAK,IADD11T,EAAQ,EACH7T,EAAK,EAAGyE,EAAK7C,KAAKuD,OAAQnF,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAErD,GADYyE,EAAGzE,GACLq5B,OAASu8lB,EAAKhznB,QAAQsC,GAAK,SAAWqkU,EAC5C,OAAO11T,EAEXA,MAKRg2qB,EAAY5srB,UAAU8trB,qBAAuB,SAAUn1D,EAAMsP,EAAWqlD,EAAkBtvE,GAEzE2a,EAAKj2jB,QAAlB,IAGIvW,EAAc87kB,EAEdhoW,EAAW9zO,EAAY+wO,KAEvB8C,EAAc7zO,EAAYuW,QAE1Bu4b,KACJ,GAAI+iH,EAAS,EAET,IADA,IAAIpnmB,EAAQ,EACLA,IAAUonmB,GACbr5mB,KAAK+9D,QAAQv5D,MAAOyN,MAAOA,EAAQ,EAAG+D,MAAO,KAC7C/D,IAGR,IAAK,IAAIyuD,EAAM,EAAGA,EAAM46N,EAAS7+R,OAAQikE,IAAO,CAI5C,IAAK,IAHDs7N,EAAmB,EAAIq9U,EAEvBv3iB,KACK2zjB,EAAW,EAAGA,EAAWn6V,EAAS56N,GAAKoB,MAAMrlE,OAAQg5nB,IAAY,CAStE,IAPA,IAAI/wnB,KAEAu+D,KAEAsonB,EAAWjwZ,EAAS56N,GAAKoB,MAAM2zjB,GAE/B12nB,GAAWoF,UAAU,EAAM8N,MAAO,GAC/BlT,EAAOoF,UAGV,GAFApF,EAASiB,KAAKqzE,SAASijb,EA9BpB,EA8B4Ct6N,GAC/CA,EAAmBj9R,EAAOkT,OACrBlT,EAAOoF,SAAU,CAClB8+D,EAAKhxD,MAAQlT,EAAOkT,MACpB,MAGR,IAAKxU,EAAkB8trB,EAASt0Z,UAAiC,IAArBs0Z,EAASt0Z,QAAe,CAChEh0N,EAAKg0N,QAAUs0Z,EAASt0Z,QACxB,IAAK,IAAI96R,EAvCN,EAuCoBA,EAAIovrB,EAASt0Z,QAvCjC,EAuCqD96R,IAAK,CAEzD,IAAIk9f,GAAgB54N,SAAU,EAAGknC,YAAa,GAC9C0xL,EAAY54N,SAAWtkS,EACvBk9f,EAAY1xL,YAAc3rC,EAC1Bs6N,EAAa9xf,KAAK60f,IAGrB57f,EAAkB8trB,EAAS71Z,UAAiC,IAArB61Z,EAAS71Z,UACjDzyN,EAAKyyN,QAAU61Z,EAAS71Z,QACxBsG,EAAmBA,EAAmB/4N,EAAKyyN,QAAU,GAEzDzyN,EAAKjmE,MAAQuurB,EAAS1unB,OAAOsB,WACxB1gE,EAAkBkrrB,IAAsBlrrB,EAAkBkrrB,EAAiBztqB,SAC5Elb,KAAKkb,MAAQytqB,EAAiBztqB,OAElCxW,EAAQ1E,KAAKwrrB,oBAAoBxrrB,KAAKkb,OACjCzd,EAAkB8trB,EAAS1unB,OAAOxqB,aACnC3tC,EAAM8qD,OAAS+7nB,EAAS1unB,OAAOxqB,WAE9B50C,EAAkB8trB,EAAS1unB,OAAOqrkB,mBACnCxjoB,EAAM8qD,OAAS+7nB,EAAS1unB,OAAOqrkB,iBAGnC,IAAIujD,GAAwBxonB,KAAMA,EAAMsonB,SAAUA,EAAUppc,SAAUz9O,GACtEsvnB,EAAKxtmB,QAAQklqB,GAAiChtrB,EAAO+srB,GACjDxonB,KAAMA,EAAMk/K,SAAUz9O,KAE1Bu+D,EAAKv+D,MAAQA,EACbo9D,EAAMt9D,KAAKy+D,GACX+4N,IAEJh8R,KAAKu4R,KAAK/zR,MAAOyN,MAAOjS,KAAKoorB,YAAatmnB,MAAOA,IAErD,IAAK,IAAIrB,EAAM,EAAGA,EAAM46N,EAAY5+R,OAAQgkE,IACxCzgE,KAAKyshB,YAAYunG,EAAM34V,EAAY56N,GAAMzgE,KAAK2rrB,oBAAoB3rrB,KAAKkb,OAAQm+lB,EAAS54iB,EAAM,IAItGwnnB,EAAY5srB,UAAUmwrB,oBAAsB,SAAUtwqB,GAElD,IAAIxW,KAMJ,OALAA,EAAMmoB,SAAW,GACjBnoB,EAAMuwR,SAAYz+P,MAAO,WACpB/4B,EAAkByd,IAAWzd,EAAkByd,EAAM0pE,UACtDlgF,EAAQ1E,KAAK4rrB,iBAAiB1wqB,EAAM0pE,OAAQlgF,IAEzCA,GAGXujrB,EAAY5srB,UAAUuwrB,iBAAmB,SAAUC,EAAYnnrB,GAqB3D,OApBKjH,EAAkBourB,EAAWvhM,aAC9B5lf,EAAM4lf,UAAYuhM,EAAWvhM,WAE5B7sf,EAAkBourB,EAAWz+c,YAC9B1oO,EAAM0oO,SAAWy+c,EAAWz+c,UAE3B3vO,EAAkBourB,EAAWh/pB,YAC9BnoB,EAAMmoB,SAAWg/pB,EAAWh/pB,UAE3BpvB,EAAkBourB,EAAW52Z,WACzBx3R,EAAkBourB,EAAW52Z,QAAQz+P,SACtC9xB,EAAMuwR,QAAQz+P,MAAQq1pB,EAAW52Z,QAAQz+P,OAExC/4B,EAAkBourB,EAAW52Z,QAAQ8rC,aACtCr8T,EAAMuwR,QAAQ8rC,UAAY8qX,EAAW52Z,QAAQ8rC,aAG7B,IAApB8qX,EAAWn9oB,OACXhqC,EAAMgqC,KAAOm9oB,EAAWn9oB,MAErBhqC,GAGXujrB,EAAY5srB,UAAUuurB,qBAAuB,SAAU1uqB,GAEnD,IAAIxW,KAMJ,OALAA,EAAMmoB,SAAW,GACjBnoB,EAAMy0mB,UAAY,UACb17mB,EAAkByd,IAAWzd,EAAkByd,EAAM8nnB,WACtDt+nB,EAAQ1E,KAAK4rrB,iBAAiB1wqB,EAAM8nnB,QAASt+nB,IAE1CA,GAGXujrB,EAAY5srB,UAAUswrB,oBAAsB,SAAUzwqB,GAElD,IAAIxW,KAMJ,OALAA,EAAMmoB,SAAW,GACjBnoB,EAAMuwR,SAAYz+P,MAAO,WACpB/4B,EAAkByd,IAAWzd,EAAkByd,EAAMo2I,UACtD5sJ,EAAQ1E,KAAK4rrB,iBAAiB1wqB,EAAMo2I,OAAQ5sJ,IAEzCA,GAGXujrB,EAAY5srB,UAAU4trB,mBAAqB,SAAUrkmB,GACjD,IAAKnnF,EAAkBmnF,EAAO2zM,QAA2B,aAAjBv4R,KAAKqorB,SAA6C,IAAnBrorB,KAAKoorB,WAAkB,CAC1F,IAAI0D,OAAS,OACa3wrB,IAAtBypF,EAAOygjB,WACPrloB,KAAKoorB,UAAYxjmB,EAAO2zM,KAAK97R,OAG7BuD,KAAKoorB,UAAYxjmB,EAAOygjB,WAGxBymD,EADA9rrB,KAAKoorB,UAAYxjmB,EAAO2zM,KAAK97R,OACpBuD,KAAKoorB,UAGLxjmB,EAAO2zM,KAAK97R,OAEzBuD,KAAKoorB,YACL,IAAK,IAAI1nnB,EAAM,EAAGA,EAAMornB,EAAQprnB,IAAO,CAEnC,IAAIgD,EAAOkhB,EAAO2zM,KAAK73N,IAEF,OAAfgD,EAAKzxD,OAAmBxU,EAAkBimE,EAAKzxD,UACjDyxD,EAAKzxD,MAASyuD,EAAM,GAExB1gE,KAAK+rrB,iBAAiBronB,MAKlCuknB,EAAY5srB,UAAU0wrB,iBAAmB,SAAUronB,GAE/C,IAAK,IADD28iB,EAAc38iB,EAAK5B,MAAMrlE,OACpB+jnB,EAAS,EAAGA,EAASH,EAAaG,IAAU,CAEjD,IAAIC,EAAW/8iB,EAAK5B,MAAM0+iB,IAED,OAAnBC,EAASxumB,OAAmBxU,EAAkBgjnB,EAASxumB,UACzDwumB,EAASxumB,MAASuumB,EAAS,GAGnCxgnB,KAAKu4R,KAAK/zR,KAAKk/D,IAGnBuknB,EAAY5srB,UAAUsurB,mBAAqB,SAAUr8e,GACjD,IAAK7vM,EAAkB6vM,EAAOirF,MAAO,CACjC,IAAIuzZ,OAAS,OACa3wrB,IAAtBmyM,EAAO0+e,WACPhsrB,KAAKoorB,WAAa96e,EAAOirF,KAAK97R,OAG1B6wM,EAAO0+e,WAAa1+e,EAAOirF,KAAK97R,QAChCuD,KAAKoorB,WAAc96e,EAAO0+e,WAAa1+e,EAAOirF,KAAK97R,OACnDqvrB,EAASx+e,EAAOirF,KAAK97R,QAGrBqvrB,EAASx+e,EAAO0+e,WAGxB,IAAK,IAAItrnB,EAAM,EAAGA,EAAMornB,EAAQprnB,IAAO,CAEnC,IAAIgD,EAAO4pI,EAAOirF,KAAK73N,GAEJ,OAAfgD,EAAKzxD,YAAiC9W,IAAfuoE,EAAKzxD,MAC5ByxD,EAAKzxD,MAAQjS,KAAKoorB,YAGlB1knB,EAAKzxD,OAASjS,KAAKoorB,UAEvBporB,KAAK+rrB,iBAAiBronB,MAKlCuknB,EAAY5srB,UAAUg4E,SAAW,SAAUijb,EAAc71N,EAAUknC,GAC/D,IAAK,IAAIvpU,EAAK,EAAG6trB,EAAiB31L,EAAcl4f,EAAK6trB,EAAexvrB,OAAQ2B,IAAM,CAC9E,IAAIi7f,EAAc4yL,EAAe7trB,GACjC,GAAKi7f,EAAY54N,WAAaA,GAAc44N,EAAY1xL,cAAgBA,EAEpE,OADAA,GAA4B,GACnBxjU,UAAU,EAAM8N,MAAO01T,GAGxC,OAASxjU,UAAU,EAAO8N,MAAO01T,IAGrCsgX,EAAY5srB,UAAUoxhB,YAAc,SAAUunG,EAAMvzjB,EAAK/7D,EAAOuN,GACvDxU,EAAkBgjE,EAAIzkC,UAClBv+B,EAAkBgjE,EAAIzkC,OAAO0lC,WAO9Bh9D,EAAMsggB,aAAevkc,EAAIzkC,OACzBt3B,EAAMgC,KAAO+5D,EAAI/5D,OAPjBhC,EAAMsggB,aAAevkc,EAAIzkC,OAAO0lC,SAC3BjkE,EAAkBgjE,EAAIzkC,OAAOt1B,QAC9BhC,EAAMgC,KAAO+5D,EAAIzkC,OAAOt1B,QAQ/BjJ,EAAkBgjE,EAAIpuB,aACvB3tC,EAAM8qD,OAASiR,EAAIpuB,WAEnB/zC,OAAOhB,KAAKoH,GAAOjI,OAAS,IAC5BiI,EAAM+yB,KAAOu8lB,EAAKhznB,QAAQsC,GAAK,SAAW2O,EAC1CjS,KAAKuD,OAAOiB,KAAKE,IAEhBjH,EAAkBgjE,EAAIzqD,QAEvBhW,KAAK+9D,QAAQv5D,MAAOyN,MAAOA,EAAO+D,MAA4B,iBAAdyqD,EAAIzqD,MAAqByqD,EAAIzqD,MAAQhW,KAAKkP,OAAOo4qB,kBAAkB7mnB,EAAIzqD,UAQ/HiyqB,EAAY5srB,UAAUiX,QAAU,aAGzB21qB,KCjxBPiE,GAA2B,WAK3B,SAASA,EAAU5rrB,GACfN,KAAK0mrB,mBAAoB,EACzB1mrB,KAAKgvU,iBAAkB,EACvBhvU,KAAKmsrB,kBAAmB,EACxBnsrB,KAAKosrB,YAAa,EAClBpsrB,KAAKM,OAASA,EACdN,KAAKkP,OAAS,IAAIu3qB,GAAanmrB,GAiiCnC,OA5hCA4rrB,EAAU7wrB,UAAUkkC,cAAgB,WAChC,MAAO,aAEX2spB,EAAU7wrB,UAAU28N,KAAO,SAAU13N,GACjCN,KAAK0orB,qBAAuB,IAAIZ,GAAqBxnrB,EAAO0N,QAC5DhO,KAAK4jP,iBAAczoP,EACnB6E,KAAK0mrB,mBAAoB,EACzB1mrB,KAAKgvU,iBAAkB,EACvBhvU,KAAKM,OAASA,EACd,IAAI0znB,EAAO1znB,EACXN,KAAKosrB,YAAa,EAClBpsrB,KAAKyorB,aAAc,EACnBz0D,EAAKxtmB,QjF+MgB,oBiFxMzB0lqB,EAAU7wrB,UAAU6/mB,IAAM,SAAU56mB,EAAQ8zpB,EAAqBN,EAAkBO,EAAQL,GACvF,IAAIj0pB,EAAQC,KAIZ,GAHAA,KAAKxD,KAAO,IAAI03U,GAAKl0U,KAAKM,QAC1BN,KAAKg0pB,OAASA,GAETv2pB,EAAkB22pB,KAAyB32pB,EAAkB22pB,EAAoB7wlB,aAAe6wlB,EAAoB7wlB,sBAAsBC,GAC3I,OAAO,IAAIof,QAAQ,SAAUC,EAASC,GAElC,IAAItf,IAAc51C,IAAKwmoB,EAAoB7wlB,WAAWA,WAAW31C,IAAKgmI,QAASwggB,EAAoB7wlB,WAAWqwF,UAAWlF,aAAa,IAAIrrF,IAASiwH,KAAK,SAAU//G,GAC9JxzE,EAAMi4N,KAAK13N,GACN7C,EAAkB42pB,GAInBt0pB,EAAM6jP,YAAc,IAAIqB,GAHxBllP,EAAM6jP,YAAcywa,EAKxBt0pB,EAAMssrB,cAAc/rrB,EAAQizE,EAAY6glB,EAAqBN,GAC7D/zpB,EAAM0orB,aAAc,EACpBnorB,EAAOkmB,QAAQ8lqB,GAA0BvsrB,EAAMi0pB,QAAWnge,QAAS9zL,EAAMuprB,iBACzEzmmB,EAAQ9iF,EAAM6jP,iBAKtB,IAAIouY,KAGJ,OAFAA,EAAWxtnB,KAAKxE,KAAKxD,KAAKmwU,WAAY85W,GAAa9jf,SAASriM,EAAQN,KAAKxD,QACzEw1nB,EAAWxtnB,KAAKxE,KAAKkP,OAAOy3qB,cAAcrmrB,IACnCsiF,QAAQgyG,IAAIo9b,GAAY1+b,KAAK,SAAUzyL,GAW1C,OAVAd,EAAMi4N,KAAK13N,GACN7C,EAAkB42pB,GAInBt0pB,EAAM6jP,YAAc,IAAIqB,GAHxBllP,EAAM6jP,YAAcywa,EAKxBt0pB,EAAMssrB,cAAc/rrB,EAAQO,EAAE,GAAIuzpB,EAAqBN,GACvD/zpB,EAAM0orB,aAAc,EACpBnorB,EAAOkmB,QAAQ8lqB,GAA0BvsrB,EAAMi0pB,QAAWnge,QAAS9zL,EAAMuprB,iBAClEvprB,EAAM6jP,eAMzBsoc,EAAU7wrB,UAAUgxrB,cAAgB,SAAUr4D,EAAMzgjB,EAAY6glB,EAAqBN,GAC5Er2pB,EAAkB22pB,KACnBp0pB,KAAKusrB,UAAYn4B,EAAoBl5oB,OAEzC,IAAI6iD,EAAUi2jB,EAAKj2jB,QACfwF,EAAagQ,EAAWx0E,OAExB2zQ,EAAU1yQ,KAAK4jP,YAAYoC,SAAS5hP,MAEpCrF,EAASiB,KAAKwsrB,wBAAwBp4B,EAAqB7wlB,EAAYmvM,GAGtEj1Q,GAFL8lE,EAAaxkE,EAAOwkE,YAEcouF,aAC9B3xJ,KAAKosrB,YAAa,GAGtB,IAAI9za,GADJ5F,EAAU3zQ,EAAO2zQ,SACKxnC,MAAM9mO,MAExB01R,EAAU,IAAIW,GAGdgyZ,EAAmBzsrB,KAAKwrrB,sBACxBlnpB,EAASmopB,EAAiBnopB,OAC1BoopB,EAAaD,EAAiB//pB,KAC9BigqB,EAAcF,EAAiB5wc,MAE/Br0L,EAAcxnD,KAAKkP,OAAO43qB,WAAW/onB,EAAS/9D,KAAK0mrB,mBACnDnuZ,EAAO/wO,EAAY+wO,KAEnB8C,EAAc7zO,EAAYuW,QAE9B+7N,EAAU95R,KAAK4srB,mBAAmBrpnB,EAAWgvF,YAAaunI,EAASvB,EAAM8C,EAAa/2P,EAAQoopB,EAAYC,GAE1G3srB,KAAK6srB,oBAAoBxxZ,EAAavB,GAEtC,IAAIgzZ,EAAoB9srB,KAAK+srB,8BAC7B,IAAKtvrB,EAAkB8lE,IAAeA,EAAW9mE,OAAS,GAQtD,GAPIuD,KAAKosrB,WAELpsrB,KAAKgtrB,sBAAsBlzZ,EAASv2N,EAAY83N,EAAa24V,EAAM1vlB,EAAQ,EAAGwopB,EAAkBpgqB,KAAMogqB,EAAkBjxc,MAAOixc,EAAkBt4Z,gBAAiBjhN,GAGlKvzE,KAAKitrB,cAAc3opB,EAAQ+2P,EAAa24V,EAAMzwjB,EAAYu2N,IAEzDr8R,EAAkB81E,EAAW7T,YAAa,CAC3C,IAAI6qnB,EAAe,IAAIxwD,GAAsB/F,GACzCy2D,OAAQ,EAERA,EADAzqrB,KAAKmsrB,iBACG5B,EAAatxD,aAAa11jB,EAAYgQ,EAAW7T,YAEpD1/D,KAAKgvU,gBACFu7W,EAAatxD,aAAaj5nB,KAAKM,OAAOkqoB,wBAAyBj3jB,EAAW7T,YAE7E1/D,KAAKosrB,WACF7B,EAAatxD,aAAa11jB,EAAWmvF,QAASn/E,EAAW7T,YAGzD6qnB,EAAatxD,aAAa1ljB,EAAWx0E,OAAQw0E,EAAW7T,YAGpE1/D,KAAK0prB,kBAAkBe,EAAO3wZ,EAASx1P,EAAQwopB,EAAkBpgqB,KAAMogqB,EAAkBjxc,MAAOixc,EAAkBt4Z,iBAAiB,QAGtI,CACSsF,EAAQvB,KAAK8B,SACnB31R,MAAMswR,UAAU1wP,GAGxBw1P,EAAQ9mC,KAAKslB,EAAS,GAAI,IACrBw7Y,IAEI9zpB,KAAKg0pB,OAINh0pB,KAAKsprB,YAActprB,KAAK4jP,YAAYn2J,OAHpCztF,KAAK4jP,YAAYn2J,KAAK,cAK1BztF,KAAK4jP,YAAYtxO,YAIzB45qB,EAAU7wrB,UAAU0xrB,4BAA8B,WAC9C,GAAKtvrB,EAAkBuC,KAAKusrB,YAAe9urB,EAAkBuC,KAAKusrB,UAAUvpD,UAAuC,OAA3BhjoB,KAAKusrB,UAAUvpD,QAanG,OAASt2mB,KAAM,IAAIu3P,GAAgB9nC,GAAc+nC,UAAW,MAAOroC,MAAO,IAAIH,GAAc,IAAI7C,GAAS,EAAG,EAAG,IAAK27C,gBAAiB,IAAI94C,GAAc,IAAI7C,GAAS,IAAK,IAAK,OAZ9Jp7O,EAAkBuC,KAAKusrB,UAAUvpD,QAAQn2mB,WAAY7sB,KAAKusrB,UAAUvpD,QAAQn2mB,SAA5F,IACI8uN,EAAW,IAAI9C,GACnB,IAAKp7O,EAAkBuC,KAAKusrB,UAAUvpD,QAAQ14I,WAAY,CACtD,IAAI4iM,EAAgBltrB,KAAKwmJ,SAASxmJ,KAAKusrB,UAAUvpD,QAAQ14I,WACzD3uQ,EAAW,IAAI9C,GAASq0c,EAActwpB,EAAGswpB,EAAcrwpB,EAAGqwpB,EAAcpwpB,GAG5E,OAASpQ,KAAM,IAAIu3P,GAAgB9nC,GAAc+nC,UAAW,MAAOroC,MAAO,IAAIH,GAAc,IAAI7C,GAAS8C,IAAY64C,gBAAiB,IAAI94C,GAAc,IAAI7C,GAAS,IAAK,IAAK,QASvLqzc,EAAU7wrB,UAAUmwrB,oBAAsB,WACtC,IAAIlnpB,EAAS,IAAI8tP,GACjB,GAAK30R,EAAkBuC,KAAKusrB,YAAe9urB,EAAkBuC,KAAKusrB,UAAU3nmB,QAkBxE,OAFAtgD,EAAOswJ,IAAM,IAAIi6D,GAAO,IAAIhW,GAAS,IAAK,IAAK,OAEtCv0M,OAAQA,EAAQ5X,KAAM,IAAIu3P,GAAgB9nC,GAAc+nC,UAAW,MAAOroC,MAAO,IAAIH,GAAc,IAAI7C,GAAS,IAAK,IAAK,OAjBnI,IAAKp7O,EAAkBuC,KAAKusrB,UAAU3nmB,OAAOqwM,WAAax3R,EAAkBuC,KAAKusrB,UAAU3nmB,OAAOqwM,QAAQz+P,OAAQ,CAC9G,IAAI2+S,EAAcn1U,KAAKwmJ,SAASxmJ,KAAKusrB,UAAU3nmB,OAAOqwM,QAAQz+P,OAC9D8N,EAAOswJ,IAAM,IAAIi6D,GAAO,IAAIhW,GAASs8F,EAAYv4S,EAAGu4S,EAAYt4S,EAAGs4S,EAAYr4S,IAEnF,IAAIjQ,EAAYpvB,EAAkBuC,KAAKusrB,UAAU3nmB,OAAO/3D,UAA6C,KAAjC7sB,KAAKusrB,UAAU3nmB,OAAO/3D,SACtF8uN,EAAW,IAAI9C,GACnB,IAAKp7O,EAAkBuC,KAAKusrB,UAAU3nmB,OAAO0la,WAAY,CACrD,IAAI4iM,EAAgBltrB,KAAKwmJ,SAASxmJ,KAAKusrB,UAAU3nmB,OAAO0la,WACxD3uQ,EAAW,IAAI9C,GAASq0c,EAActwpB,EAAGswpB,EAAcrwpB,EAAGqwpB,EAAcpwpB,GAG5E,OAASwH,OAAQA,EAAQ5X,KAAM,IAAIu3P,GAAgB9nC,GAAc+nC,UAAWr3P,GAAWgvN,MAAO,IAAIH,GAAcC,KAUxHuwc,EAAU7wrB,UAAU2xrB,sBAAwB,SAAUlzZ,EAASv2N,EAAY83N,EAAa24V,EAAM1vlB,EAAQ6tH,EAAOzlI,EAAMmvN,EAAO24C,EAAiBjhN,GAEvI,IAAK,IADD45mB,EAAah7hB,EACR/zJ,EAAK,EAAGkxd,EAAe/rZ,EAAYnlE,EAAKkxd,EAAa7yd,OAAQ2B,IAAM,CACxE,IAAIgvrB,EAAkB99N,EAAalxd,GAC/BsiE,EAAMo5N,EAAQvB,KAAK8B,SACnB55N,EAAMuzjB,EAAKU,iBAAiB04D,EAAgBrhqB,OAE5C9rB,GACAjD,MAAOowrB,EAAgB/vrB,IACvBw/D,OAAQ4D,EACR/7D,WAAOvJ,EACP+nE,aAAczC,EAAIgnjB,mBAGlBzqnB,EAAQowrB,EAAgBrhqB,MAAQ,KAAO/rB,KAAK0orB,qBAAqBV,gBAAgB/nrB,GAAQ,MAAQmtrB,EAAgBtuqB,OAASykD,EAAWzkD,MAAQ,EAAI,SAAW,SAChK4hD,EAAIoB,MAAMyyN,QAAQ44Z,GAAYnwrB,MAAQA,EACtC0jE,EAAIoB,MAAMyyN,QAAQ44Z,EAAa,GAAGzorB,MAAMquP,aAAe,IAAI/V,GAAgB9E,GAAiB49B,MAC5Fp1M,EAAIh8D,MAAMswR,UAAU1wP,GACpBo8B,EAAIh8D,MAAMilO,QAAQj9M,GAClBg0C,EAAIh8D,MAAMgwR,aAAa74C,GACvBn7K,EAAIh8D,MAAM4vR,mBAAmBE,GAC7B,IAAIi2Z,OAAQ,EACR4C,EAAsB,IAAIhyD,GAA6BrH,GAU3D,GALIy2D,EAJChtrB,EAAkB2vrB,EAAgB3ynB,MAAMi4F,SAIjC26hB,EAAoBp0D,aAAam0D,EAAgB3ynB,MAAO2ynB,GAHxDC,EAAoBp0D,aAAam0D,EAAgB3ynB,MAAMi4F,QAAS06hB,GAKvE3vrB,EAAkBgtrB,IAA2B,IAAjBA,EAAMhurB,SACnCikE,EAAIoB,MAAMyyN,QAAQ44Z,EAAa,GAAGh1Z,WAAa2B,EAAQ/7N,QAAQj/C,OAASquqB,EAAa,KAEpF1vrB,EAAkB8lE,EAAWgvF,cAAgBhvF,EAAWgvF,YAAc,EAAG,CAC1EvyJ,KAAK0prB,kBAAkBe,EAAO3wZ,EAASx1P,EAAQ5X,EAAMmvN,EAAO24C,GAAiB,EAAM9zN,EAAKysnB,GAExFntrB,KAAKgtrB,sBAAsBlzZ,EAASszZ,EAAgB3ynB,MAAO4gO,EAAa24V,EAAM1vlB,EAAS6opB,EAAa,EAAIzgqB,EAAMmvN,EAAO24C,EAAiBjhN,GAEtIk3mB,EADwB,IAAItvD,GAA2BnH,GAC7BiF,aAAam0D,EAAgB3ynB,MAAMi4F,QAAS06hB,GACtEptrB,KAAK0prB,kBAAkBe,EAAO3wZ,EAASx1P,EAAQ5X,EAAMmvN,EAAO24C,GAAiB,OAE5E,CACDx0R,KAAK0prB,kBAAkBe,EAAO3wZ,EAASx1P,EAAQ5X,EAAMmvN,EAAO24C,GAAiB,EAAM9zN,EAAKysnB,GACxFntrB,KAAKitrB,cAAc3opB,EAAQ+2P,EAAa24V,EAAMo5D,EAAgB3ynB,MAAOq/N,EAAUqzZ,EAAa,GAE5F1C,EADwB,IAAItvD,GAA2BnH,GAC7BiF,aAAam0D,EAAgB3ynB,MAAO2ynB,GAC9DptrB,KAAK0prB,kBAAkBe,EAAO3wZ,EAASx1P,EAAQ5X,EAAMmvN,EAAO24C,GAAiB,MAKzF03Z,EAAU7wrB,UAAUuxrB,mBAAqB,SAAUr6hB,EAAaunI,EAASvB,EAAM8C,EAAa/2P,EAAQoopB,EAAYC,GAC5G,IAAI72W,EAAcz6C,EAAY5+R,OAC1Bu3nB,EAAOh0nB,KAAKM,OAMhB,GALIN,KAAKosrB,aACLt2W,GAAgBvjL,EAAc,GAGlCunI,EAAQ/7N,QAAQ35D,IAAI0xU,GAChB91U,KAAKosrB,WACL,IAAK,IAAIjwrB,EAAI,EAAGA,EAAKo2J,EAAc,EAAIp2J,IACnC29R,EAAQ/7N,QAAQs6N,UAAUl8R,GAAG6Z,MAAQ,GAI7C8jR,EAAQj1M,QAAQzgF,IAAIm0R,EAAK97R,QAEzB,IAASN,EAAI,EAAGA,EAAIo8R,EAAK97R,OAAQN,IAAK,CAClC,IAAImxrB,EAAaxzZ,EAAQj1M,QAAQ4zM,UAAUt8R,GAC3CmxrB,EAAW5orB,MAAMswR,UAAU1wP,GAC3BgppB,EAAW5orB,MAAMilO,QAAQ+id,GACzBY,EAAW5orB,MAAMgwR,aAAai4Z,GAC9B,IAAI9zZ,EAAY74R,KAAKosrB,WAAc75hB,EAAc,EAAK,EACtD,GAA6B,IAAzBgmI,EAAKp8R,GAAG2lE,MAAMrlE,OACd,IAAK,IAAI8mB,EAAI,EAAGA,EAAI+pqB,EAAWxrnB,MAAMhjD,MAAOyE,IAAK,EACzC0/C,EAAOqqnB,EAAWxrnB,MAAMyyN,QAAQhxQ,IAC/BvmB,MAAQ,OAGhB,CACD,IAASumB,EAAI,EAAGA,EAAIs1Q,EAAWt1Q,IAAK,EAC5B0/C,EAAOqqnB,EAAWxrnB,MAAMyyN,QAAQhxQ,IAC/BvmB,MAAQ,GAEjB,IAASumB,EAAI,EAAGA,EAAIg1Q,EAAKp8R,GAAG2lE,MAAMrlE,OAAQ8mB,IAAK,CAC3C,IAAI0/C,EAEAhjE,GACAgjE,KAHAA,EAAOqqnB,EAAWxrnB,MAAMyyN,QAAQsE,GAIhC0yZ,SAAUhzZ,EAAKp8R,GAAG2lE,MAAMv+C,GACxB7e,MAAOu+D,EAAKv+D,OAIhB,GADAsvnB,EAAKxtmB,QAAQ+mqB,GAA+BttrB,GACzB,OAAfgjE,EAAKjmE,MAAgB,CAKrB,GAJAimE,EAAKjmE,MAAQu7R,EAAKp8R,GAAG2lE,MAAMv+C,GAAGs5C,OAAOsB,WAChC1gE,EAAkB86R,EAAKp8R,GAAG2lE,MAAMv+C,GAAGs5C,OAAOqrkB,mBAC3CjlkB,EAAKv+D,MAAMquP,aAAe/yP,KAAKwtrB,uBAAuBj1Z,EAAKp8R,GAAG2lE,MAAMv+C,GAAGs5C,OAAOqrkB,mBAE7EzqoB,EAAkB86R,EAAKp8R,GAAG2lE,MAAMv+C,GAAG0zQ,SAAU,CAC9Ch0N,EAAKg0N,QAAUsB,EAAKp8R,GAAG2lE,MAAMv+C,GAAG0zQ,QAEhCh0N,EAAKv+D,MAAMquP,aAAe/yP,KAAKytrB,qBAAqB,SAAUxqnB,EAAKv+D,MAAMquP,aAAcwlC,EAAKp8R,GAAG2lE,MAAMv+C,GAAGs5C,OAAOxqB,WAC/G,IAAK,IAAIlsB,EAAI,EAAGA,EAAIoyQ,EAAKp8R,GAAG2lE,MAAMv+C,GAAG0zQ,QAAS9wQ,IAC1C2zQ,EAAQj1M,QAAQ4zM,UAAUt8R,EAAIgqB,GAAG27C,MAAMyyN,QAAQsE,GAAW77R,MAAQ,KAGrES,EAAkB86R,EAAKp8R,GAAG2lE,MAAMv+C,GAAGmyQ,WACpCzyN,EAAKk1N,WAAaI,EAAKp8R,GAAG2lE,MAAMv+C,GAAGmyQ,SAEvCmD,GAAa51N,EAAKk1N,gBAGlBl1N,EAAKjmE,MAAQ,GACb67R,GAAa51N,EAAKk1N,WAClB50Q,GAAQ,IAQxB,OAHIu2Q,EAAQ/7N,QAAQj/C,OAAS,IACzBg7Q,EAAQp1R,MAAMyyR,yBAA0B,GAErC2C,GAGXoyZ,EAAU7wrB,UAAUmxrB,wBAA0B,SAAUp4B,EAAqB7wlB,EAAYmvM,GACrF,GAAKj1Q,EAAkB22pB,GAuDnBp0pB,KAAKgvU,iBAAkB,EACvBhvU,KAAKmsrB,kBAAmB,MAxDiB,CAIzC,GAHK1urB,EAAkB22pB,EAAoBl5oB,SACvClb,KAAKusrB,UAAYn4B,EAAoBl5oB,QAEpCzd,EAAkB22pB,EAAoBtoa,mBAAqBruP,EAAkB22pB,EAAoBjkgB,UAAW,CAC7G,IAAIu9hB,EAAkB,IAAIhic,GAE1Bgic,EAAgBt0pB,YAAuD,cAAxCg7nB,EAAoBtoa,gBAAmChG,GAAmBqG,UAAYrG,GAAmBiG,SACxI2hc,EAAgB5gqB,KAAO9sB,KAAK2trB,YAAYv5B,EAAoBjkgB,UAC5DuiH,EAAQ2N,gBAAgBqta,GAE5B,IAAIvuc,EAAan/O,KAAK4jP,YAAYryL,aAAazkC,KAC/C,IAAKrvB,EAAkB22pB,EAAoBxvkB,QAAS,CAEhD,IAAIA,EAASwvkB,EAAoBxvkB,OAC7B1wE,EAAW,IAAI6mO,GAAO,EAAGn2J,EAAOgpmB,SAChC9gqB,EAAO,IAAIkuN,GAAOmE,EAAWnpO,MAAQ,GAAsB,IAAhB4uE,EAAO7uE,QAClD2gB,EAAS,IAAIukN,GAAW/mO,EAAU4Y,GACtC9sB,KAAK4jP,YAAY30O,SAASvC,IAAM1M,KAAK6trB,iBAAiB,IAAIn9Z,GAAuBh6P,GAASkuD,GAE9F,IAAKnnF,EAAkB22pB,EAAoB9md,QAAS,CAEhD,IAAIA,EAAS8md,EAAoB9md,OAC7Bp5L,EAAW,IAAI6mO,GAAO,EAAKoE,EAAWnpO,MAAQ,GAA2B,IAApBs3L,EAAOwgf,YAC5DhhqB,EAAO,IAAIkuN,GAAOmE,EAAWnpO,MAAQ,GAAsB,IAAhBs3L,EAAOv3L,QAClD2gB,EAAS,IAAIukN,GAAW/mO,EAAU4Y,GACtC9sB,KAAK4jP,YAAY30O,SAAStC,OAAS3M,KAAK6trB,iBAAiB,IAAIn9Z,GAAuBh6P,GAAS42K,GAE5F7vM,EAAkB22pB,EAAoBk0B,sBAAyBtorB,KAAKosrB,aACrEpsrB,KAAK0mrB,kBAAoBtyB,EAAoBk0B,qBAE5C7qrB,EAAkB22pB,EAAoB7wlB,YAOjC9lE,EAAkB22pB,EAAoB3wR,aAY5CzjY,KAAKgvU,iBAAkB,EACvBhvU,KAAKmsrB,kBAAmB,GAZe,gBAAnC/3B,EAAoB3wR,YACpBlgU,EAAavjE,KAAKM,OAAOkqoB,wBACzBxqoB,KAAKgvU,iBAAkB,EACvBhvU,KAAKmsrB,kBAAmB,IAGxBnsrB,KAAKgvU,iBAAkB,EACvBhvU,KAAKmsrB,kBAAmB,IAdtB/3B,EAAoB7wlB,sBAAsBC,KAC5CD,EAAa6wlB,EAAoB7wlB,YAErCvjE,KAAKmsrB,kBAAmB,EACxBnsrB,KAAKgvU,iBAAkB,GAsB/B,OAASzrQ,WAAYA,EAAYmvM,QAASA,IAG9Cw5a,EAAU7wrB,UAAUwyrB,iBAAmB,SAAU5+qB,EAAUjO,GACvD,IAAK,IAAI5C,EAAK,EAAGyE,EAAK7B,EAAQ0qO,SAAUttO,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC1D,IAAIg8B,EAAUv3B,EAAGzE,GAEjB,OADA4B,KAAK+trB,yBAAyB3zpB,GACtBA,EAAQ1zB,MACZ,IAAK,OAED,GAAsB,KAAlB0zB,EAAQp9B,YAAkC7B,IAAlBi/B,EAAQp9B,OAAyC,OAAlBo9B,EAAQp9B,OAA2C,iBAAlBo9B,EAAQp9B,MAChG,MAAM,IAAI4D,MAAM,yDAEpBZ,KAAKkvF,SAASjgF,EAAUmrB,GACxB,MACJ,IAAK,aACDp6B,KAAKgurB,eAAe/+qB,EAAUmrB,GAC9B,MACJ,IAAK,QACD,QAAoBj/B,IAAhBi/B,EAAQ96B,KAAqC,OAAhB86B,EAAQ96B,KAAgC,KAAhB86B,EAAQ96B,IAC7D,MAAM,IAAIsB,MAAM,4DAEpBZ,KAAK0vF,UAAUzgF,EAAUmrB,GACzB,MACJ,IAAK,OACDp6B,KAAKwtF,SAASv+E,EAAUmrB,GACxB,MACJ,QACI,MAAM,IAAIx5B,MAAM,qCAG5B,OAAOqO,GAGXi9qB,EAAU7wrB,UAAU0yrB,yBAA2B,SAAU3zpB,GACrD,QAAqBj/B,IAAjBi/B,EAAQ1zB,MAAuC,OAAjB0zB,EAAQ1zB,KACtC,MAAM,IAAI9F,MAAM,oCAGhB,GAAqB,SAAjBw5B,EAAQ1zB,KAAiB,CACzB,QAAuBvL,IAAnBi/B,EAAQzC,QAA2C,OAAnByC,EAAQzC,OACxC,MAAM,IAAI/2B,MAAM,gCAAkCw5B,EAAQ1zB,KAAO,eAGjE,QAA0BvL,IAAtBi/B,EAAQzC,OAAOqD,IAA0C,OAAtBZ,EAAQzC,OAAOqD,IAA4C,iBAAtBZ,EAAQzC,OAAOqD,GACvF,MAAM,IAAIp6B,MAAM,wCAA0Cw5B,EAAQ1zB,KAAO,cAE7E,QAA0BvL,IAAtBi/B,EAAQzC,OAAOsD,IAA0C,OAAtBb,EAAQzC,OAAOsD,IAA4C,iBAAtBb,EAAQzC,OAAOsD,GACvF,MAAM,IAAIr6B,MAAM,wCAA0Cw5B,EAAQ1zB,KAAO,cAE7E,QAA0BvL,IAAtBi/B,EAAQzC,OAAOuD,IAA0C,OAAtBd,EAAQzC,OAAOuD,IAA4C,iBAAtBd,EAAQzC,OAAOuD,GACvF,MAAM,IAAIt6B,MAAM,wCAA0Cw5B,EAAQ1zB,KAAO,cAE7E,QAA0BvL,IAAtBi/B,EAAQzC,OAAOwD,IAA0C,OAAtBf,EAAQzC,OAAOwD,IAA4C,iBAAtBf,EAAQzC,OAAOwD,GACvF,MAAM,IAAIv6B,MAAM,wCAA0Cw5B,EAAQ1zB,KAAO,kBAIhF,CACD,QAAyBvL,IAArBi/B,EAAQlmB,UAA+C,OAArBkmB,EAAQlmB,SAC1C,MAAM,IAAItT,MAAM,kCAAoCw5B,EAAQ1zB,KAAO,eAGnE,QAA2BvL,IAAvBi/B,EAAQlmB,SAASnH,GAA0C,OAAvBqtB,EAAQlmB,SAASnH,GAA4C,iBAAvBqtB,EAAQlmB,SAASnH,EAC3F,MAAM,IAAInM,MAAM,uCAAyCw5B,EAAQ1zB,KAAO,gBAE5E,QAA2BvL,IAAvBi/B,EAAQlmB,SAASlH,GAA0C,OAAvBotB,EAAQlmB,SAASlH,GAA4C,iBAAvBotB,EAAQlmB,SAASlH,EAC3F,MAAM,IAAIpM,MAAM,uCAAyCw5B,EAAQ1zB,KAAO,kBAO5FwlrB,EAAU7wrB,UAAU6zF,SAAW,SAAUgxL,EAAc9lP,GACnD,IAAI1N,EAAO1sB,KAAK8yP,QAAQ14N,GACpByhN,EAAQ77O,KAAKiurB,oBAAoB7zpB,GACjC81N,EAAM,KACV,IAAKzyP,EAAkB28B,EAAQ11B,MAAMwprB,cAAe,CAChD,IAAIC,EAAWnurB,KAAKwmJ,SAASpsH,EAAQ11B,MAAMwprB,cAC3Ch+b,EAAM,IAAIrB,GAAO,IAAIhW,GAASs1c,EAASvxpB,EAAGuxpB,EAAStxpB,EAAGsxpB,EAASrxpB,IAEtD,MAAT++M,GAAwB,MAAPqU,IACjBrU,EAAQ,IAAIH,GAAc,IAAI7C,GAAS,EAAG,EAAG,KAEjD,IAAI77O,EAAQo9B,EAAQp9B,MAAMkQ,WACtBH,EAAyB,IAArBqtB,EAAQlmB,SAASnH,EACrBC,EAAyB,IAArBotB,EAAQlmB,SAASlH,EAErBjO,EAASiB,KAAKourB,iBAAiBh0pB,OAD/B4B,GAEW,OAAXj9B,GAAoBtB,EAAkBsB,EAAOi9B,SAAYv+B,EAAkBsB,EAAO+tB,MAIlFozP,EAAanuB,SAAS+d,WAAW9yQ,EAAO0vB,EAAMwjO,EAAKrU,EAAO9uO,EAAGC,OAN7DgvB,GAGAkkP,EAAanuB,SAAS+d,WAAW9yQ,EAAO0vB,EAAMwjO,EAAKrU,EAAO9uO,EAAGC,EAAGjO,EAAO+tB,KAAK9W,MAAOjX,EAAO+tB,KAAK/W,OAAQhX,EAAOi9B,SAOtHkwpB,EAAU7wrB,UAAU2yrB,eAAiB,SAAUK,EAAgBj0pB,GAC3D,IAAI1N,EAAO1sB,KAAK8yP,QAAQ14N,GACpByhN,EAAQ,KACZ,GAAKp+O,EAAkB28B,EAAQ11B,MAAM4prB,gBAMjCzyc,EAAQ,IAAIH,GAAc,IAAI7C,GAAS,EAAG,EAAG,QANK,CAElD,IAAI01c,EAAavurB,KAAKwmJ,SAASpsH,EAAQ11B,MAAM4prB,gBAC7Czyc,EAAQ,IAAIH,GAAc,IAAI7C,GAAS01c,EAAW3xpB,EAAG2xpB,EAAW1xpB,EAAG0xpB,EAAWzxpB,IAKlF,IAAIu8S,EAAa,IAAIpqD,GAAmBviQ,EAAMmvN,GAC9Cw9F,EAAWzrD,YAAc5tR,KAAKwurB,mBAAmBp0pB,EAAQq0pB,gBACzD,IAAIC,EACA1ypB,EACJ,GAAKv+B,EAAkB28B,EAAQ4B,QAyB3B0ypB,EAAiB,IAAIt/Z,GAAkB1iQ,EAAMmvN,EAD7C7/M,EAAS,MACmDq9S,QAxB5D,IAA0C,IAAtCj/S,EAAQ4B,OAAOz9B,QAAQ,YAA4D,IAAxC67B,EAAQ4B,OAAOz9B,QAAQ,YAAoB,CACtF,IAAIgiR,EAAY,IAAIkP,GAAkB/iQ,GAGlCsP,EAFA5B,EAAQ4B,OAAOz9B,QAAQ,UAAY67B,EAAQ4B,OAAOz9B,QAAQ,aAC1Dy9B,EAAS5B,EAAQ4B,OAAOzsB,QAAQ,WAAY,MAC5BA,QAAQ,SAAU,MAGlCysB,EAAS5B,EAAQ4B,OAAOzsB,QAAQ,WAAY,MAC5BA,QAAQ,SAAU,KAEtCm/qB,EAAiB,IAAIt/Z,GAAkB1iQ,EAAMmvN,EAAO7/M,EAAQq9S,EAAY94D,QAEvE,IAA4C,IAAxCnmP,EAAQ4B,OAAOz9B,QAAQ,cAA4D,IAAtC67B,EAAQ4B,OAAOz9B,QAAQ,UACzEy9B,EAAS5B,EAAQ4B,OAAOzsB,QAAQ,WAAY,KAC5Cm/qB,EAAiB,IAAIt/Z,GAAkB1iQ,EAAMmvN,EAAO7/M,EAAQq9S,OAE3D,CACG94D,EAAY,IAAIkP,GAAkB/iQ,GACtCsP,EAAS5B,EAAQ4B,OAAOzsB,QAAQ,SAAU,KAC1Cm/qB,EAAiB,IAAIt/Z,GAAkB1iQ,EAAMmvN,EAAO7/M,EAAQukP,GAOpE,IAAIxzQ,EAAyB,IAArBqtB,EAAQlmB,SAASnH,EACrBC,EAAyB,IAArBotB,EAAQlmB,SAASlH,EACrBjO,EAASiB,KAAKourB,iBAAiBh0pB,EAASs0pB,EAAe37b,cAC5C,OAAXh0P,GAAoBtB,EAAkBsB,EAAOi9B,SAAYv+B,EAAkBsB,EAAO+tB,QAClF4hqB,EAAe37b,aAAeh0P,EAAOi9B,OACrC0ypB,EAAeh4pB,OAAS,IAAIukN,GAAWluO,EAAGC,EAAGjO,EAAO+tB,KAAK9W,MAAOjX,EAAO+tB,KAAK/W,SAEhF24qB,EAAe17b,KAAKq7b,EAAet8b,SAAUhlP,EAAGC,IAGpDk/qB,EAAU7wrB,UAAUq0F,UAAY,SAAU2+lB,EAAgBj0pB,GACtD,IAAIrtB,EAAyB,IAArBqtB,EAAQlmB,SAASnH,EACrBC,EAAyB,IAArBotB,EAAQlmB,SAASlH,EACrBgJ,EAAUvY,EAAkB28B,EAAQtN,WAAuC3xB,EAAR,IAArBi/B,EAAQtN,KAAK9W,MAC3DD,EAAWtY,EAAkB28B,EAAQtN,WAAwC3xB,EAAR,IAAtBi/B,EAAQtN,KAAK/W,OAC5Du/K,EAAQ,IAAIuiE,GAAUz9N,EAAQ96B,KAC7B7B,EAAkBuY,GAInBq4qB,EAAet8b,SAASriK,UAAU4lG,EAAOvoL,EAAGC,GAH5CqhrB,EAAet8b,SAASriK,UAAU4lG,EAAOvoL,EAAGC,EAAGgJ,EAAOD,IAO9Dm2qB,EAAU7wrB,UAAUmyF,SAAW,SAAU6gmB,EAAgBj0pB,GACrD,IAAIY,EAAyB,IAApBZ,EAAQzC,OAAOqD,GACpBC,EAAyB,IAApBb,EAAQzC,OAAOsD,GACpBC,EAAyB,IAApBd,EAAQzC,OAAOuD,GACpBC,EAAyB,IAApBf,EAAQzC,OAAOwD,GACpB+0N,EAAMlwP,KAAK2urB,kBAAkBv0pB,GAC5B38B,EAAkB28B,EAAQ11B,QAA4B,OAAlB01B,EAAQ11B,QACxCjH,EAAkB28B,EAAQ11B,MAAMkqrB,UAAsC,OAA1Bx0pB,EAAQ11B,MAAMkqrB,SAAqD,iBAA1Bx0pB,EAAQ11B,MAAMkqrB,UACpG1+b,EAAIl6O,MAAgC,IAAxBokB,EAAQ11B,MAAMkqrB,SAE9B1+b,EAAIoiC,UAAYtyR,KAAK6urB,aAAaz0pB,EAAQ11B,MAAM4tR,YAEpD+7Z,EAAet8b,SAASvkK,SAAS0iK,EAAKl1N,EAAIC,EAAIC,EAAIC,IAGtD+wpB,EAAU7wrB,UAAUqurB,kBAAoB,SAAUe,EAAO3wZ,EAASx1P,EAAQ5X,EAAMmvN,EAAO24C,EAAiBs6Z,EAAWC,EAAY5B,GAC3H,IAAK,IAAI/urB,EAAK,EAAG4wrB,EAAUvE,EAAOrsrB,EAAK4wrB,EAAQvyrB,OAAQ2B,IAAM,CAQzD,IAAK,IAPDsiE,EAAMsunB,EAAQ5wrB,GAEd6wrB,GAA4B,EAC5Bh9qB,EAAQ,EACRqoO,GAAU,EAEVt9O,KACKb,EAAI,EAAGA,EAAI29R,EAAQ/7N,QAAQj/C,MAAO3iB,IAAK,CAE5C,IAAI8mE,EAAOvC,EAAIoB,MAAM7vD,GACrB,IAAKjS,KAAK0mrB,kBAAmB,CACzB,UAAwBvrrB,IAAjB8nE,EAAKzrC,SACH/5B,EAAkBsxrB,GAYnB/xrB,EAAMwH,KAAK,IAXN/G,EAAkBsxrB,EAAWjtnB,MAAMyyN,QAAQp4R,GAAGa,OAO/CA,EAAMwH,KAAK,KANXxH,EAAMwH,KAAK,IACXxH,EAAMwH,KAAKuqrB,EAAWjtnB,MAAMyyN,QAAQp4R,GAAGa,OACvCs9O,GAAU,EACVn+O,GAAK,GASbA,GAAK,EACL8V,GAAgB,EAChBgxD,EAAOvC,EAAIoB,MAAM7vD,GAErB,MAAQxU,EAAkBwlE,EAAKzrC,WAAayrC,EAAKzrC,SAC7CvlB,GAAgB,EAChBgxD,EAAOvC,EAAIoB,MAAM7vD,GAGzB,GAAIgxD,EAAK02jB,WAAY,CACjB,IAAI3/lB,KAEJ,GAAKv8B,EAAkBwlE,EAAKpG,OAAOgqD,iBAAoBppH,EAAkBwlE,EAAKpG,OAAOo9jB,uBAA0Bx8nB,EAAkBwlE,EAAKpG,OAAOm9jB,qBAUxI,CAGIv8nB,EADDsB,EAASiB,KAAKkvrB,0BAA0BxunB,EAAIlkE,KAAKymE,EAAKpG,OAAO9wC,UAE7D/uB,EAAMwH,KAAKzF,OAdgJ,CAE/J,IAAIA,EACJi7B,GADIj7B,EAASiB,KAAK+5B,oBAAoBC,EAAY79B,EAAG8yrB,EAA0BhsnB,EAAKpG,SAChEgwD,iBACpBoikB,EAA2BlwrB,EAAOkwrB,yBAElC,IAAIluY,EAAO/mR,EAAWn8B,EAAam7mB,GAAU/1iB,EAAK+9iB,WAAWtgjB,EAAIlkE,KAAKymE,EAAKpG,OAAO9wC,MAAQk3C,EAAKpG,OAAO9wC,MAAQk3C,EAAKpG,OAAO4yjB,aAC1HzynB,EAAMwH,KAAKu8S,EAAI,GAAGoqY,WAClB7wc,GAAU,QAWdt9O,EAAMwH,KAAK,IAEX81O,GAAwB,KAAbt9O,EAAMb,KAAcsB,EAAkBT,EAAMb,KAAoB,OAAba,EAAMb,KACpEm+O,GAAU,GAEdroO,GAAS,EAEb,IAAKqoO,EACD,GAAKw0c,EAWD,IAAS3yrB,EAAI,EAAGA,EAAI29R,EAAQ/7N,QAAQj/C,MAAO3iB,IACvC4yrB,EAAWjtnB,MAAMyyN,QAAQp4R,GAAGa,MAAQA,EAAMb,GAAG+Q,WACzC/Q,IAAOgxrB,EAAa,IAAoC,IAA9B8B,EAC1BF,EAAWjtnB,MAAMyyN,QAAQp4R,GAAGg8R,WAAa82Z,GAA4B9B,EAAa,GAE7EhxrB,IAAOgxrB,EAAa,IAAoC,IAA9B8B,IAC/BF,EAAWjtnB,MAAMyyN,QAAQp4R,GAAGg8R,WAAa2B,EAAQ/7N,QAAQj/C,OAASquqB,EAAa,QAjB3E,CACZ,IAAIx3Z,EAAUmE,EAAQvB,KAAK8B,SAC3B1E,EAAQjxR,MAAMswR,UAAU1wP,GACxBqxP,EAAQjxR,MAAMilO,QAAQj9M,GACtBipQ,EAAQjxR,MAAMgwR,aAAa74C,GAC3B85C,EAAQjxR,MAAM4vR,mBAAmBE,GACjC,IAAK,IAAIr4R,EAAI,EAAGA,EAAI29R,EAAQ/7N,QAAQj/C,MAAO3iB,IACvCw5R,EAAQ7zN,MAAMyyN,QAAQp4R,GAAGa,MAAQA,EAAMb,GAAG+Q,cAkB9Dg/qB,EAAU7wrB,UAAU0+B,oBAAsB,SAAUC,EAAY/nB,EAAOg9qB,EAA0BpynB,GAa7F,OAZKp/D,EAAkBo/D,EAAOgqD,gBAGpBppH,EAAkBo/D,EAAOo9jB,sBAO/BjgmB,EAAWn8B,EAAam7mB,GAAUA,GAASoiB,eAAiBpsnB,GAAQ6tD,EAAOm9jB,uBANzC,IAA9Bi1D,IACAA,EAA2Bh9qB,GAE/B+nB,EAAWn8B,EAAam7mB,GAAUA,GAASsiB,iBAAmBtsnB,GAAQ6tD,EAAOo9jB,uBAN7EjgmB,EAAWn8B,EAAam7mB,GAAUA,GAASkiB,UAAYlsnB,GAAQ6tD,EAAOgqD,iBAWjEgG,iBAAkB7yF,EAAYi1pB,yBAA0BA,IAGrE/C,EAAU7wrB,UAAU6zrB,0BAA4B,SAAU1yrB,GACtD,OAAKiB,EAAkBjB,EAAKourB,KAGlBntrB,EAAkBjB,EAAKqurB,SAGvBptrB,EAAkBjB,EAAKsurB,KAGvBrtrB,EAAkBjB,EAAKuurB,KAGvBttrB,EAAkBjB,EAAKw1L,OAGvBv0L,EAAkBjB,EAAKwurB,WAGvBvtrB,EAAkBjB,EAAKyurB,YAGvBxtrB,EAAkBjB,EAAK+yP,aAA5B,EACM/yP,EAAK+yP,OAHL/yP,EAAKyurB,WAHLzurB,EAAKwurB,UAHLxurB,EAAKw1L,MAHLx1L,EAAKuurB,IAHLvurB,EAAKsurB,IAHLturB,EAAKqurB,QAHLrurB,EAAKourB,KA2BpBsB,EAAU7wrB,UAAUwxrB,oBAAsB,SAAUxxZ,EAAavB,GAE7D,IAAK,IADDp0Q,EAAa1lB,KAAKosrB,WAActyZ,EAAQ/7N,QAAQj/C,MAAQu8Q,EAAY5+R,OAAU,EACzEN,EAAI,EAAGA,EAAIk/R,EAAY5+R,OAAQN,IAC/BsB,EAAkB49R,EAAYl/R,GAAGk2C,aAClCynP,EAAQ/7N,QAAQs6N,UAAUl8R,EAAIupB,GAAYsW,OAASh8B,KAAKwtrB,uBAAuBnyZ,EAAYl/R,GAAGk2C,YAG9FynP,EAAQp1R,MAAMyyR,0BAA4B15R,EAAkB49R,EAAYl/R,GAAG6Z,SAE3E8jR,EAAQ/7N,QAAQs6N,UAAUl8R,EAAIupB,GAAY1P,MAAwC,iBAAzBqlR,EAAYl/R,GAAG6Z,MAA4C,IAAvBqlR,EAAYl/R,GAAG6Z,MAAqE,IAAtDhW,KAAKkP,OAAOo4qB,kBAAkBjsZ,EAAYl/R,GAAG6Z,SAQpLk2qB,EAAU7wrB,UAAU8zrB,oBAAsB,SAAUzunB,EAAKp8B,GACrD,GAAK7mC,EAAkBuC,KAAKusrB,YAAe9urB,EAAkBuC,KAAKusrB,UAAUj7hB,SAAqC,OAA1BtxJ,KAAKusrB,UAAUj7hB,OASlG5wF,EAAIh8D,MAAMgwR,aAAa,IAAIh5C,GAAc,IAAI7C,GAAS,EAAG,EAAG,SATuD,CACnH,IAAI8C,EAAW,IAAI9C,GACnB,IAAKp7O,EAAkBuC,KAAKusrB,UAAUj7hB,OAAOg5V,WAAY,CACrD,IAAI4iM,EAAgBltrB,KAAKwmJ,SAASxmJ,KAAKusrB,UAAUj7hB,OAAOg5V,WACxD3uQ,EAAW,IAAI9C,GAASq0c,EAActwpB,EAAGswpB,EAAcrwpB,EAAGqwpB,EAAcpwpB,GAE5E4jC,EAAIh8D,MAAMgwR,aAAa,IAAIh5C,GAAcC,IAM7C,OADAj7K,EAAIh8D,MAAMswR,UAAU1wP,GACbo8B,GAOXwrnB,EAAU7wrB,UAAU4xrB,cAAgB,SAAU3opB,EAAQy5B,EAASi2jB,EAAMzwjB,EAAYu2N,EAASqzZ,GAEtF,IAAK,IADDznqB,EAAa1lB,KAAKosrB,WAAae,EAAa,EACvC/urB,EAAK,EAAGyE,EAAK0gE,EAAYnlE,EAAKyE,EAAGpG,OAAQ2B,IAI9C,IAAK,IAHDq8D,EAAQ53D,EAAGzE,GAEXu3R,EAAU31R,KAAKmvrB,oBAAoBr1Z,EAAQvB,KAAK8B,SAAU/1P,GACrD/gB,EAAI,EAAGA,EAAIw6C,EAAQthE,OAAQ8mB,IAAK,CAErC,IAAIvmB,GAAUS,EAAkBsgE,EAAQx6C,GAAGwI,QAAUlvB,EAASkhE,EAAQx6C,GAAGwI,MAAO0uC,IAAW,GACvFoC,EAASkB,EAAQx6C,GACjBy/C,OAAiB,EACjBnG,EAAO4qjB,iBAAmB5qjB,EAAO4qjB,oBACjCzkjB,EAAiBhjE,KAAKkP,OAAOs6nB,SAASxsoB,EAAO6/D,GAC7C7/D,EAAQH,EAASggE,EAAOuB,gBAAiB4E,IAE7C,IACI/iE,GACAzD,KAFOi+D,EAGPz9D,MAAOA,EACP6/D,OAAQA,EACRn4D,WAAOvJ,EACPu6R,QAAS,GAGbs+V,EAAKxtmB,QjF5gBS,mBiF4gBwBvmB,GACtC,IAAIgjE,EAAO0yN,EAAQ7zN,MAAMyyN,QAAQhxQ,EAAImC,GAKrC,GAJAu9C,EAAKjmE,MAAQgD,KAAK0orB,qBAAqBV,gBAAgB/nrB,GAClDxC,EAAkBwC,EAAKyE,QACxB1E,KAAKmhnB,iBAAiBl+iB,EAAMhjE,GAE5BA,EAAKy1R,QAAU,EAAG,CACbnyQ,EAAImC,EAAa,EAAIzlB,EAAKy1R,QAAWC,EAAQ7zN,MAAMhjD,QACpD7e,EAAKy1R,QAAUC,EAAQ7zN,MAAMhjD,OAASyE,EAAImC,EAAa,IAE3Du9C,EAAKk1N,WAAal4R,EAAKy1R,QACvB,IAAK,IAAIv5R,EAAI,EAAGA,EAAI8mE,EAAKk1N,WAAYh8R,IAAK,CACvBw5R,EAAQ7zN,MAAMyyN,QAAQhxQ,EAAImC,EAAavpB,GAC7Ca,MAAQ,GAErBumB,GAAMtjB,EAAKy1R,QAAU,KAMrCw2Z,EAAU7wrB,UAAU8lnB,iBAAmB,SAAUl+iB,EAAMhjE,GACnD,IAAKxC,EAAkBwC,EAAKyE,MAAMitD,iBAAkB,CAEhD,IAAIwnjB,EAAYn5mB,KAAKwmJ,SAASvmJ,EAAKyE,MAAMitD,iBACzCsR,EAAKv+D,MAAM8vR,gBAAkB,IAAI94C,GAAc,IAAI7C,GAASsgY,EAAUv8kB,EAAGu8kB,EAAUt8kB,EAAGs8kB,EAAUr8kB,IAQpG,GANKr/B,EAAkBwC,EAAKyE,MAAMi8B,iBAC9BsiC,EAAKv+D,MAAMquP,aAAe/yP,KAAKwtrB,uBAAuBvtrB,EAAKyE,MAAMi8B,gBAEhEljC,EAAkBwC,EAAKyE,MAAMgvD,qBAC9BuP,EAAKv+D,MAAMquP,aAAe/yP,KAAKytrB,qBAAqBxtrB,EAAKyE,MAAMgvD,kBAAmBuP,EAAKv+D,MAAMquP,gBAE5Ft1P,EAAkBwC,EAAKyE,MAAM4prB,gBAAiB,CAC/C,IAAIA,EAAiBturB,KAAKwmJ,SAASvmJ,EAAKyE,MAAM4prB,gBAC9CrrnB,EAAKv+D,MAAMykR,UAAY,IAAIztC,GAAc,IAAI7C,GAASy1c,EAAe1xpB,EAAG0xpB,EAAezxpB,EAAGyxpB,EAAexxpB,IAE7G,IAAKr/B,EAAkBwC,EAAKyE,MAAMwprB,cAAe,CAC7C,IAAIA,EAAelurB,KAAKwmJ,SAASvmJ,EAAKyE,MAAMwprB,cAC5CjrnB,EAAKv+D,MAAMmwR,QAAU,IAAIhmC,GAAO,IAAIhW,GAASq1c,EAAatxpB,EAAGsxpB,EAAarxpB,EAAGqxpB,EAAapxpB,IAM9F,GAHKr/B,EAAkBwC,EAAKyE,MAAMuoB,aAAgBxvB,EAAkBwC,EAAKyE,MAAMmoB,WAAcpvB,EAAkBwC,EAAKyE,MAAMgqC,OAAUjxC,EAAkBwC,EAAKyE,MAAM6sC,SAAY9zC,EAAkBwC,EAAKyE,MAAMwwQ,YAAez3Q,EAAkBwC,EAAKyE,MAAMywQ,aAClPlyM,EAAKv+D,MAAMgoB,KAAO1sB,KAAK8yP,QAAQ7yP,KAE9BxC,EAAkBwC,EAAKyE,MAAM4/B,QAAS,CACvC,IAAIA,EAAS,IAAI8tP,GACb3jM,EAAcxuF,EAAKyE,MAAM4/B,OAAOtuB,MAEhCA,EAAUvY,EAAkBgxF,IAAuC,iBAAhBA,SAA2C,IAAdA,EAEhFj4D,EAAQ,IAAIqiN,GAAS,IAAK,IAAK,KACnC,IAAKp7O,EAAkBwC,EAAKyE,MAAM4/B,OAAO9N,OAAQ,CAC7C,IAAI2+S,EAAcn1U,KAAKwmJ,SAASvmJ,EAAKyE,MAAM4/B,OAAO9N,OAClDA,EAAQ,IAAIqiN,GAASs8F,EAAYv4S,EAAGu4S,EAAYt4S,EAAGs4S,EAAYr4S,GAEnE,IAAIozN,EAAM,IAAIrB,GAAOr4N,EAAOxgB,GAEvBvY,EAAkBwC,EAAKyE,MAAM4/B,OAAOguP,aACrCpiC,EAAIoiC,UAAYtyR,KAAK6urB,aAAa5urB,EAAKyE,MAAM4/B,OAAOguP,YAExDhuP,EAAOswJ,IAAMs7D,EACbjtL,EAAKv+D,MAAMuwR,QAAU3wP,EAEpB7mC,EAAkBwC,EAAKyE,MAAM07O,mBAC9Bn9K,EAAKv+D,MAAMquP,aAAe,IAAI/V,GAC9B/5K,EAAKv+D,MAAMquP,aAAa3S,gBAAkBngP,EAAKyE,MAAM07O,kBAO7D8rc,EAAU7wrB,UAAUmyrB,uBAAyB,SAAUn7oB,EAAWrW,GAI9D,YAHe7gC,IAAX6gC,IACAA,EAAS,IAAIghN,IAET3qM,GACJ,IAAK,QACDrW,EAAOqzB,UAAY6oL,GAAiB05B,MACpC,MACJ,IAAK,SACD51O,EAAOqzB,UAAY6oL,GAAiBy5B,OACpC,MACJ,IAAK,UACD31O,EAAOqzB,UAAY6oL,GAAiBy7B,QACpC,MACJ,IAAK,OACD33O,EAAOqzB,UAAY6oL,GAAiB49B,KAG5C,OAAO95O,GAMXkwpB,EAAU7wrB,UAAUoyrB,qBAAuB,SAAU2B,EAAepzpB,EAAQqW,GAKxE,YAJel3C,IAAX6gC,IACAA,EAAS,IAAIghN,GACbhhN,EAASh8B,KAAKwtrB,uBAAuBn7oB,EAAWrW,IAE5CozpB,GACJ,IAAK,SACDpzpB,EAAO61O,cAAgB55B,GAAqB85B,OAC5C,MACJ,IAAK,SACD/1O,EAAO61O,cAAgB55B,GAAqB65B,OAC5C,MACJ,IAAK,MACD91O,EAAO61O,cAAgB55B,GAAqBoF,IAGpD,OAAOrhN,GAEXkwpB,EAAU7wrB,UAAUg0rB,cAAgB,SAAUpiqB,GAC1C,OAAQA,GACJ,IAAK,aACD,OAAO,EACX,IAAK,UACD,OAAO,EACX,IAAK,SACD,OAAO,EACX,IAAK,eACD,OAAO,EACX,QACI,OAAO,IAInBi/pB,EAAU7wrB,UAAUy3P,QAAU,SAAU14N,GACpC,IAAIvN,EAAapvB,EAAkB28B,EAAQ11B,MAAMmoB,UAA+C,KAAR,IAAzBuN,EAAQ11B,MAAMmoB,SAEzEI,EAAexvB,EAAkB28B,EAAQ11B,MAAMuoB,YAAgEkvN,GAAc+nC,UAA9DlkR,KAAKqvrB,cAAcj1pB,EAAQ11B,MAAMuoB,YAChGD,EAAY4rN,GAAasJ,QAa7B,OAZKzkP,EAAkB28B,EAAQ11B,MAAMgqC,OAAStU,EAAQ11B,MAAMgqC,OACxD1hB,GAAa4rN,GAAa0J,OAEzB7kP,EAAkB28B,EAAQ11B,MAAM6sC,SAAWnX,EAAQ11B,MAAM6sC,SAC1DvkB,GAAa4rN,GAAa2J,SAEzB9kP,EAAkB28B,EAAQ11B,MAAMwwQ,YAAc96O,EAAQ11B,MAAMwwQ,YAC7DloP,GAAa4rN,GAAa6J,YAEzBhlP,EAAkB28B,EAAQ11B,MAAMywQ,YAAc/6O,EAAQ11B,MAAMywQ,YAC7DnoP,GAAa4rN,GAAa4J,WAEvB,IAAIyhC,GAAgBh3P,EAAYJ,EAAUG,IAErDk/pB,EAAU7wrB,UAAUmzrB,mBAAqB,SAAUC,GAC/C,OAAQA,GACJ,IAAK,aACD,OAAO,EACX,IAAK,aACD,OAAO,EACX,IAAK,aACD,OAAO,EACX,IAAK,aACD,OAAO,EACX,QACI,OAAO,IAInBvC,EAAU7wrB,UAAU+yrB,iBAAmB,SAAUh0pB,EAAS4B,GACtD,IAAKv+B,EAAkB28B,EAAQtN,MAAO,CAClC,IAAI9W,EAA6B,IAArBokB,EAAQtN,KAAK9W,MACrBD,EAA+B,IAAtBqkB,EAAQtN,KAAK/W,OAE1B,GADAimB,EAAS,IAAIghN,GAAgB9E,GAAiB49B,KAAM79B,GAAqB65B,SACpEr0Q,EAAkB28B,EAAQ11B,MAAM8qD,QACjC,OAAQp1B,EAAQ11B,MAAM8qD,QAClB,IAAK,QACDxzB,EAAOqzB,UAAY6oL,GAAiB05B,MACpC,MACJ,IAAK,SACD51O,EAAOqzB,UAAY6oL,GAAiBy5B,OACpC,MACJ,IAAK,UACD31O,EAAOqzB,UAAY6oL,GAAiBy7B,QACpC,MACJ,QACI33O,EAAOqzB,UAAY6oL,GAAiB49B,KAMhD,OAHKr4Q,EAAkB28B,EAAQ11B,MAAM6qD,UACjCvzB,EAASh8B,KAAKytrB,qBAAqBrzpB,EAAQ11B,MAAM6qD,OAAQvzB,KAEpDA,OAAQA,EAAQlP,KAAM,IAAIkuN,GAAMhlO,EAAOD,IAEpD,OAAO,MAEXm2qB,EAAU7wrB,UAAUsyrB,YAAc,SAAUx9hB,GACxC,OAAQA,GACJ,IAAK,SACD,OAAO,IAAI6qF,GAAM,IAAK,KAC1B,IAAK,OACD,OAAO,IAAIA,GAAM,IAAK,KAC1B,IAAK,QACD,OAAO,IAAIA,GAAM,IAAK,MAC1B,IAAK,KACD,OAAO,IAAIA,GAAM,KAAM,MAC3B,IAAK,KACD,OAAO,IAAIA,GAAM,KAAM,MAC3B,IAAK,KACD,OAAO,IAAIA,GAAM,KAAM,MAC3B,IAAK,KACD,OAAO,IAAIA,GAAM,IAAK,MAC1B,IAAK,KACD,OAAO,IAAIA,GAAM,IAAK,KAC1B,IAAK,KACD,OAAO,IAAIA,GAAM,IAAK,KAC1B,IAAK,KACD,OAAO,IAAIA,GAAM,IAAK,KAC1B,IAAK,KACD,OAAO,IAAIA,GAAM,IAAK,KAC1B,IAAK,KACD,OAAO,IAAIA,GAAM,IAAK,KAG1B,IAAK,KACD,OAAO,IAAIA,GAAM,KAAM,MAC3B,IAAK,KACD,OAAO,IAAIA,GAAM,KAAM,MAC3B,IAAK,KACD,OAAO,IAAIA,GAAM,KAAM,MAC3B,IAAK,KACD,OAAO,IAAIA,GAAM,KAAM,MAC3B,IAAK,KACD,OAAO,IAAIA,GAAM,IAAK,MAC1B,IAAK,KACD,OAAO,IAAIA,GAAM,IAAK,KAC1B,IAAK,QACD,OAAO,IAAIA,GAAM,IAAK,KAC1B,IAAK,QACD,OAAO,IAAIA,GAAM,IAAK,MAC1B,IAAK,QACD,OAAO,IAAIA,GAAM,KAAM,MAC3B,IAAK,QACD,OAAO,IAAIA,GAAM,KAAM,MAC3B,IAAK,QACD,OAAO,IAAIA,GAAM,KAAM,MAC3B,IAAK,OACD,OAAO,IAAIA,GAAM,IAAK,KAC1B,IAAK,aACD,OAAO,IAAIA,GAAM,IAAK,KAC1B,IAAK,cACD,OAAO,IAAIA,GAAM,IAAK,MAC1B,IAAK,SACD,OAAO,IAAIA,GAAM,KAAM,KAC3B,QACI,OAAO,IAAIA,GAAM,IAAK,OAGlCkxc,EAAU7wrB,UAAUwzrB,aAAe,SAAUv8Z,GACzC,OAAQA,GACJ,IAAK,OACD,OAAO,EACX,IAAK,MACD,OAAO,EACX,IAAK,UACD,OAAO,EACX,IAAK,aACD,OAAO,EACX,QACI,OAAO,IAInB45Z,EAAU7wrB,UAAUszrB,kBAAoB,SAAUv0pB,GAC9C,IAAI81N,EAAM,IAAIrB,GAAO,IAAIhW,GAAS,EAAG,EAAG,IACxC,IAAKp7O,EAAkB28B,EAAQ11B,QAA4B,OAAlB01B,EAAQ11B,QAAmBjH,EAAkB28B,EAAQ11B,MAAMyprB,UAAW,CAC3G,IAAIA,EAAWnurB,KAAKwmJ,SAASpsH,EAAQ11B,MAAMyprB,UAC3Cj+b,EAAM,IAAIrB,GAAO,IAAIhW,GAASs1c,EAASvxpB,EAAGuxpB,EAAStxpB,EAAGsxpB,EAASrxpB,IAEnE,OAAOozN,GAGXg8b,EAAU7wrB,UAAU4yrB,oBAAsB,SAAU7zpB,GAChD,IAAIyhN,EAAQ,KACZ,IAAKp+O,EAAkB28B,EAAQ11B,MAAM4prB,gBAAiB,CAElD,IAAIC,EAAavurB,KAAKwmJ,SAASpsH,EAAQ11B,MAAM4prB,gBAC7Czyc,EAAQ,IAAIH,GAAc,IAAI7C,GAAS01c,EAAW3xpB,EAAG2xpB,EAAW1xpB,EAAG0xpB,EAAWzxpB,IAElF,OAAO++M,GAEXqwc,EAAU7wrB,UAAUmrJ,SAAW,SAAUzpH,GACrC,GAAY,OAARA,GAAwB,KAARA,GAA6B,IAAfA,EAAItgC,OAClC,MAAM,IAAImE,MAAM,2CAEpBm8B,EAAMA,EAAI7Y,UAAU,GACpB,IAAIorqB,EAASv6pB,SAASgI,EAAK,IAI3B,OAASH,EAHA0ypB,GAAU,GAAM,IAGVzypB,EAFNyypB,GAAU,EAAK,IAEHxypB,EADJ,IAATwypB,IAQZpD,EAAU7wrB,UAAUiX,QAAU,aAGvB45qB,KC9jCP5hmB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAkBxC4kmB,GAAuC,SAAUpkmB,GAEjD,SAASokmB,EAAsBjvrB,EAAQiloB,GACnC,IAAIxloB,EAAQorF,EAAO7pF,KAAKtB,KAAMM,EAAQiloB,IAAYvloB,KAQlD,OAPAD,EAAM6imB,cAAgBzhmB,EAAc,aACpCpB,EAAMyvrB,UAAYrurB,EAAc,OAASkC,UAAW,mBAAoBE,OAAQ,0BAChFxD,EAAMiB,QAAUG,EAAc,MAC1BkC,UAAW,0BAA2BI,OAClCmO,KAAM,WAAYo/G,SAAU,QAG7BjxH,EAuDX,OAjEAuqF,GAAUilmB,EAAuBpkmB,GAmBjCokmB,EAAsBl0rB,UAAU0wG,OAAS,SAAU9oC,EAAMzmE,EAAMkH,GAC3D,IAAInD,EAAOP,KAAKgB,QAAQY,YAGxB,GAFArB,EAAKoB,YAAY3B,KAAKwvrB,UAAU5trB,aAChCrB,EAAKiD,aAAa,aAAc,mCAAqCy/D,EAAKpG,OAAOsB,YAC7E8E,EAAKpG,OAAOyqjB,iBACZjojB,GAAe9+D,EAAK4E,kBAAmB89D,EAAKpG,OAAOsrjB,mBAAZlljB,CAAgCzmE,SAGvE,IAAK,IAAI4B,EAAK,EAAGyE,EAAKogE,EAAKj7B,SAAU5pC,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvD,IAAIopC,EAAU3kC,EAAGzE,GACjBmC,EAAOP,KAAKyvrB,aAAalvrB,EAAMinC,EAAS9jC,EAAWuO,OAY3D,OATAjS,KAAK61E,cAAct1E,EAAM0iE,EAAMv/D,GAC3B1D,KAAKM,OAAOk/lB,QACZ77lB,EAASpD,EAAKiB,iBAAiB,kBAAmB,UAClD6C,EAAY9D,EAAKiB,iBAAiB,kBAAmB,YAGrDmC,EAASpD,EAAKiB,iBAAiB,kBAAmB,UAClD6C,EAAY9D,EAAKiB,iBAAiB,kBAAmB,WAElDjB,GAEXgvrB,EAAsBl0rB,UAAUo0rB,aAAe,SAAUlvrB,EAAMmvrB,EAAcz9qB,GACzE,IAAIk/G,EAASnxH,KAAK4imB,cAAchhmB,YAChC8B,EAAWytH,GACP7tH,GAAMtD,KAAKM,OAAOU,QAAQsC,IAAMosrB,EAAahprB,MAAQ,IAAM,IAAMuL,EAAOvL,KAAQ,SAChFw5B,MAAOwvpB,EAAaA,aAAat1pB,SAAWp6B,KAAKyloB,UAAU1xjB,YAAY27mB,EAAahprB,OAASgprB,EAAahprB,OAE9GyqH,EAAO4iQ,QAAU27T,EAAaA,aAAarpkB,MAC3C,IAAIZ,EAAY,IAAI1H,GAAO2xkB,EAAaA,aAAcv+jB,GAGtD,OAFA1L,EAAUkqkB,YAAcD,EAAahprB,KACrCnG,EAAK4E,kBAAkBxD,YAAY8jH,EAAUzkH,SACrC0urB,EAAahprB,MACjB,IAAK,OACL,IAAK,SACD/C,GAAUwtH,IAAU,gBAAiB,KAAOu+jB,EAAahprB,KAAKkP,cAAgB,WAC9E,MACJ,IAAK,SACL,IAAK,OACDjS,GAAUwtH,IAAU,gBAAiB,KAAOu+jB,EAAahprB,KAAKkP,cAAgB,WAGtF,OAAOrV,GAEJgvrB,GACTjqD,IC7EEzM,GAA+B,WAC/B,SAASA,EAAcv4nB,EAAQiloB,GAC3BvloB,KAAKM,OAASA,EACdN,KAAKuloB,QAAUA,EACfvloB,KAAKtD,mBA6ET,OA3EAm8nB,EAAcx9nB,UAAUg4qB,eAAiB,WACvBrzqB,KAAKuloB,QAAQ/jkB,WAAW,uBAC9BgqkB,gBAAgBxyB,GAAS6f,cAAe,IAAI02D,GAAsBvvrB,KAAKM,OAAQN,KAAKuloB,WAEhG1M,EAAcx9nB,UAAUu0rB,oBAAsB,SAAU/urB,GACpD,IAAImznB,EAAOh0nB,KAAKM,OAEZ6G,GADM6snB,EAAKhznB,QAAQsC,GACVuC,EAAQhF,EAAEsG,OAAQ,WAC/B,GAAKA,GAAW6snB,EAAK+gB,YAAelvoB,EAAQhF,EAAEsG,OAAQ,kBAAtD,CAGA,IAAIs+G,EAAYt+G,EAAOugF,cAAc,GACjChhF,EAAO++G,EAAUkqkB,YACrB,IAAIlqkB,EAAUvH,SAGd,OAAQx3G,GACJ,IAAK,OACDstnB,EAAK+gB,WAAW7wO,UAChB8vN,EAAK+gB,WAAW7sN,UAAUrib,EAAQsB,EAAQ,OAC1C,MACJ,IAAK,SACD6snB,EAAK+gB,WAAW0b,YAChB,MACJ,IAAK,OACDz8B,EAAK+gB,WAAW7wO,UAChB,MACJ,IAAK,SACD8vN,EAAK+gB,WAAW7wO,UAChB8vN,EAAKz6N,iBAELy6N,EAAKvxF,UAAU1tgB,SAASlvB,EAAQsB,EAAQ,MAAM0L,aAAa,iBAAkB,KAAK,GAClFmhnB,EAAK+gB,WAAWwb,kBAO5B13B,EAAcx9nB,UAAUkkC,cAAgB,WACpC,MAAO,iBAOXs5lB,EAAcx9nB,UAAUiX,QAAU,WAC1BtS,KAAKM,OAAO0mF,aAGhBhnF,KAAKpD,uBAETi8nB,EAAcx9nB,UAAUuB,oBAAsB,WACtCoD,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAO0lF,IAAIqgC,GAAOrmH,KAAK4vrB,qBAC5B5vrB,KAAKM,OAAO0lF,IAAIskiB,GAAYtqnB,KAAKqzqB,gBACjCrzqB,KAAKM,OAAO0lF,IAAI+8N,GAAY/iT,KAAKq2G,mBAErCwihB,EAAcx9nB,UAAUqB,iBAAmB,WACnCsD,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAOslF,GAAGygC,GAAOrmH,KAAK4vrB,oBAAqB5vrB,MAChDA,KAAKM,OAAOslF,GAAG0kiB,GAAYtqnB,KAAKqzqB,eAAgBrzqB,MAChDA,KAAKM,OAAOslF,GAAGm9N,GAAY/iT,KAAKq2G,gBAAiBr2G,QAErD64nB,EAAcx9nB,UAAUg7G,gBAAkB,SAAUx1G,GAC/B,UAAbA,EAAEs1D,QAAsBtwD,EAAQhF,EAAEsG,OAAQ,uBAC1CnH,KAAK4vrB,oBAAoB/urB,GACzBA,EAAE2kB,mBAGHqzmB,KC9EA9mM,IACPntW,OAAQ,gBACRxqD,QAAS,iBACT+slB,KAAM,iBACN0oE,UAAW,qBACXC,SAAU,SACVC,MAAO,eACPn7kB,OAAQ,WACRnnB,KAAM,SACN50D,OAAQ,WACRt5B,KAAM,SACNyxP,IAAK,cACLj+J,MAAO,eACPi9lB,QAAS,iBACTv0E,IAAK,cACLw0E,MAAO,gBACPC,MAAO,eACPC,MAAO,cACP52a,MAAO,cACP62a,MAAO,cACPzoP,UAAW,mBACX0oP,WAAY,oBACZC,YAAa,kBACbC,SAAU,eAKVz1Y,GAA6B,WAC7B,SAASA,EAAYx6S,EAAQghE,GACzBthE,KAAKmyb,gBACLnyb,KAAKoyb,gBACLpyb,KAAKqyb,eACLryb,KAAKu2I,WAAav2I,KAAKsyb,eACvBtyb,KAAKM,OAASA,EACdN,KAAKwwqB,OAASlwqB,EAAOU,QAAQsC,GAC7BtD,KAAKshE,eAAiBA,EACtBthE,KAAKtD,mBAueT,OAleAo+S,EAAYz/S,UAAUqB,iBAAmB,WACjCsD,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAOslF,GAAGi4iB,GAAiB79nB,KAAKwwrB,sBAAuBxwrB,MAC5DA,KAAKM,OAAOslF,GAAG6ljB,GAAoBzroB,KAAK+rG,OAAQ/rG,QAKpD86S,EAAYz/S,UAAUuB,oBAAsB,WACpCoD,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAO0lF,IAAIyljB,GAAoBzroB,KAAK+rG,QACzC/rG,KAAKM,OAAO0lF,IAAI63iB,GAAiB79nB,KAAKwwrB,uBACtCjrrB,GAAahB,OAAOvE,KAAKgB,QAAS,UAAWhB,KAAK2/G,eAAerkH,KAAK0E,SAE1E86S,EAAYz/S,UAAUskH,eAAiB,SAAU9+G,GAC9B,QAAXA,EAAEooB,MAA8B,IAAZpoB,EAAE81G,OACtB32G,KAAKuyb,YAAYtwb,SAGzB64S,EAAYz/S,UAAU0wG,OAAS,WAC3B/rG,KAAKM,OAAOU,QAAQ8C,UAAUM,IAAI,cAClCpE,KAAKqlH,KAAOrlH,KAAKshE,eAAeE,WAAW,gBAC3CxhE,KAAKgB,QAAUG,EAAc,MAAQmC,GAAItD,KAAKwwqB,OAAS,WACvDjrqB,GAAanB,IAAIpE,KAAKgB,QAAS,UAAWhB,KAAK2/G,eAAerkH,KAAK0E,OACnEA,KAAKM,OAAOU,QAAQW,YAAY3B,KAAKgB,SACrC,IAAImG,EAAS,IAAMnH,KAAKwwqB,OACxBxwqB,KAAKuyb,YAAc,IAAIC,IACnB/3X,MAAOz6D,KAAKyyb,eACZv/a,UAAWlT,KAAKM,OAAO4S,UACvB04F,kBAAmB5rG,KAAKM,OAAOsrG,kBAC/B59F,OAAQhO,KAAKM,OAAO0N,OACpB7G,OAAQA,EACR1B,OAAQzF,KAAK0yb,qBAAqBp3b,KAAK0E,MACvCm2C,WAAYn2C,KAAK2yb,sBAAsBr3b,KAAK0E,MAC5ComJ,OAAQpmJ,KAAK4yb,gBAAgBt3b,KAAK0E,MAClC6yb,QAAS7yb,KAAK8yb,mBAAmBx3b,KAAK0E,MACtCiT,SAAU,gBAEdjT,KAAKuyb,YAAYl8Y,SAASr2C,KAAKgB,UAEnC85S,EAAYz/S,UAAUm1rB,sBAAwB,SAAU3vrB,GAChDA,EAAEswF,SAAWnxF,KAAKu/B,iBAAmB1+B,EAAE4+B,SACnCz/B,KAAKuyb,cACLvyb,KAAKuyb,YAAYjgb,UACjB/N,EAAOvE,KAAKgB,SACZhB,KAAKM,OAAOU,QAAQ8C,UAAUS,OAAO,eAEzCvE,KAAK+rG,WAGb+uM,EAAYz/S,UAAUo3b,aAAe,WAGjC,IAAK,IAFD71I,KACA6zY,KACKryrB,EAAK,EAAGyE,EAAK7C,KAAKM,OAAOgkpB,iBAAkBlmpB,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACtE,IAAIyf,EAAOhb,EAAGzE,GACM,iBAATyf,IAA+D,IAA1C7d,KAAKkzb,kBAAkB30b,QAAQsf,IACP,IAAhDA,EAAK09C,oBAAoBh9D,QAAQ,UACjCkyrB,EAAYjsrB,KAAKxE,KAAKmzb,kBAAkBt1a,IAGxC++R,EAAUp4S,KAAKxE,KAAKmzb,kBAAkBt1a,IAGrB,iBAATA,GACZ++R,EAAUp4S,KAAKqZ,GAGvB,GAAI4yqB,EAAYh0rB,OAAS,EAAG,CACxB,IAAIi0rB,EAAc1wrB,KAAKmzb,kBAAkB,UACzCu9P,EAAYj2nB,MAAQg2nB,EACpB7zY,EAAUp4S,KAAKksrB,GAEnB,OAAO9zY,GAEX9B,EAAYz/S,UAAUs1rB,YAAc,WAChC,IAAIC,EAAYvkrB,KAAK+S,MAAMpf,KAAKM,OAAOixD,aAAau5kB,kBAAoB9qoB,KAAKM,OAAOixD,aAAa4+F,UAIjG,OAHInwJ,KAAKM,OAAOixD,aAAau5kB,kBAAoB9qoB,KAAKM,OAAOixD,aAAa4+F,WACtEygiB,GAAa,GAEVA,GAEX91Y,EAAYz/S,UAAUu3b,gBAAkB,WACpC5yb,KAAKw6T,QAAS,GAElB1f,EAAYz/S,UAAUq3b,qBAAuB,SAAUzyb,GAEnD,OADWD,KAAKszb,aAAarzb,EAAK4d,KAAKva,KAEnC,IAAK,aACDtD,KAAKM,OAAO8wpB,mBACZ,MACJ,IAAK,UACDpxpB,KAAKM,OAAO8wpB,eAAepxpB,KAAK6wrB,aAAa9kqB,OAC7C,MACJ,IAAK,QACD/rB,KAAKM,OAAOi0pB,YAAYv0pB,KAAK6wrB,aAAa9kqB,OAC1C,MACJ,IAAK,UACD/rB,KAAKM,OAAOm0pB,cAAcz0pB,KAAK6wrB,aAAa9kqB,OAC5C,MACJ,IAAK,OACqC,UAAlC/rB,KAAKM,OAAO2gE,aAAaljC,KACrB/9B,KAAK0gE,KAAO1gE,KAAKijE,OAASjhB,MAAMjtB,SAAS/0B,KAAKijE,KAAKpwD,aAAa,iBAAkB,MAClF7S,KAAKM,OAAOy0oB,WAAW0pC,SAAS1ppB,SAAS/0B,KAAK0gE,IAAI7tD,aAAa,iBAAkB,IAAK7S,KAAKM,OAAO00nB,aAAajgmB,SAAS/0B,KAAKijE,KAAKpwD,aAAa,iBAAkB,KAAKkZ,QAI1K/rB,KAAKM,OAAOy0oB,WAAW7wO,UACvBlka,KAAKM,OAAOy0oB,WAAW7sN,UAAUlob,KAAK0gE,MAE1C,MACJ,IAAK,SACqC,UAAlC1gE,KAAKM,OAAO2gE,aAAaljC,MACzB/9B,KAAKM,OAAOy0oB,WAAW7wO,UAEqB,IAA5Clka,KAAKM,OAAO29oB,qBAAqBxhpB,OACjCuD,KAAKM,OAAOy0oB,WAAWxxI,UAAUvjgB,KAAK0gE,KAGtC1gE,KAAKM,OAAOiwpB,eAEhB,MACJ,IAAK,OACDvwpB,KAAKM,OAAOy0oB,WAAW7wO,UACvB,MACJ,IAAK,SACDlka,KAAKM,OAAOy0oB,WAAW0b,YACvB,MACJ,IAAK,OACDzwpB,KAAKM,OAAOf,OACZ,MACJ,IAAK,YACDS,KAAKM,OAAO6zpB,YACZ,MACJ,IAAK,cACDn0pB,KAAKM,OAAOszpB,cACZ,MACJ,IAAK,YACD5zpB,KAAKM,OAAO4zpB,YACZ,MACJ,IAAK,gBACDl0pB,KAAKw6T,QAAS,EACdx6T,KAAKM,OAAOovpB,WAAW1vpB,KAAK6wrB,aAAa9kqB,MAAO,aAChD,MACJ,IAAK,iBACD/rB,KAAKw6T,QAAS,EACdx6T,KAAKM,OAAOovpB,WAAW1vpB,KAAK6wrB,aAAa9kqB,MAAO,cAChD,MACJ,IAAK,YACD/rB,KAAKM,OAAO+hiB,SAAS,GACrB,MACJ,IAAK,WACDriiB,KAAKM,OAAO+hiB,SAASriiB,KAAKM,OAAOixD,aAAa+hM,YAAc,GAC5D,MACJ,IAAK,WACDtzP,KAAKM,OAAO+hiB,SAASriiB,KAAK2wrB,eAC1B,MACJ,IAAK,WACD3wrB,KAAKM,OAAO+hiB,SAASriiB,KAAKM,OAAOixD,aAAa+hM,YAAc,GAGpErzP,EAAK48D,OAAS78D,KAAK6wrB,aACnB7wrB,KAAKM,OAAOkmB,QpF6CU,mBoF7CuBvmB,IAEjD66S,EAAYz/S,UAAUy3b,mBAAqB,SAAU7yb,GAE7CA,EAAKw6D,MAAMh+D,OAAS,GAAKwD,EAAKw6D,MAAM,GAAS,qBAAa+3X,IAC1Dxyb,KAAKuzb,oBAGbz4I,EAAYz/S,UAAUm4b,cAAgB,SAAU31a,GAC5C,OAAO7d,KAAKqlH,KAAKtxC,YAAY/zE,KAAKu2I,WAAW14H,KAEjDi9R,EAAYz/S,UAAUk4b,iBAAmB,WACrCvzb,KAAKuyb,YAAY30I,UAAU59S,KAAKqyb,aAChCryb,KAAKuyb,YAAY58W,YAAY31E,KAAKoyb,cAClCpyb,KAAKqyb,eACLryb,KAAKoyb,gBACLpyb,KAAKw6T,QAAS,GAElB1f,EAAYz/S,UAAUs3b,sBAAwB,SAAU1yb,GACpD,IAGI6wrB,EAAcjrrB,EAAQ5F,EAAK3D,MAAM6K,OAAQ,WAC7C,GAAIlH,EAAK3D,OAASw0rB,GAAeA,IAAgB9wrB,KAAKM,OAAOU,QACzDf,EAAK44B,QAAS,OAEb,GAAI54B,EAAK3D,QAAUuJ,EAAQ5F,EAAK3D,MAAM6K,OAAQ,IAAM4qb,GAAUu+P,cAC5DzqrB,EAAQ5F,EAAK3D,MAAM6K,OAAQ,IAAM4qb,GAAUw+P,WAC9C1qrB,EAAQ5F,EAAK3D,MAAM6K,OAAQ,mBAC3BtB,EAAQ5F,EAAK3D,MAAM6K,OAAQ,oBAC3BtB,EAAQ5F,EAAK3D,MAAM6K,OAAQ,qBAC3BlH,EAAK44B,QAAS,MAEb,CACD74B,KAAK6wrB,aAAe7wrB,KAAKq4R,UAAUp4R,EAAK3D,OACxC0D,KAAKyiiB,UAAUxiiB,EAAK3D,MAA8C,aAAvC0D,KAAKM,OAAOk+nB,kBAAkB93nB,MACzD,IAAK,IAAItI,EAAK,EAAGyE,EAAK5C,EAAKw6D,MAAOr8D,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACpD,IAAIyf,EAAOhb,EAAGzE,GACVf,EAAM2C,KAAKszb,aAAaz1a,EAAKva,IAC7BytrB,EAAQ/wrB,KAAKmyb,aAAa90b,GAC9B,IAA6C,IAAzC2C,KAAKkzb,kBAAkB30b,QAAQlB,GAI/B,GAHI2C,KAAKgxrB,qBAAqB3zrB,IAC1B2C,KAAKoyb,aAAa5tb,KAAKqZ,EAAK4O,MAE5BxsB,EAAK3D,QAAU0D,KAAK0zb,aAAazzb,EAAK3D,MAAM6K,OAAQ4qb,GAAUo1L,OAC9DnnnB,KAAK0zb,aAAazzb,EAAK3D,MAAM6K,OAAQ4qb,GAAU89P,YACnC,SAARxyrB,GAA0B,WAARA,GAClB2C,KAAKqyb,YAAY7tb,KAAKqZ,EAAK4O,UAG9B,CAAA,GAAsC,UAAlCzsB,KAAKM,OAAO2gE,aAAaljC,OAAsBl4B,EAAQ5F,EAAK3D,MAAM6K,OAAQ,gBAC/EnH,KAAKM,OAAOy0oB,WAAWoqC,kBAAgC,eAAE1irB,QACzDuD,KAAKM,OAAOy0oB,WAAWoqC,kBAA8B,aAAE1irB,QACvDuD,KAAKM,OAAOy0oB,WAAWoqC,kBAAgC,eAAE1irB,UAAoB,SAARY,GAA0B,WAARA,GACvF,SAEKI,EAAkBwC,EAAKi7L,aAAej7L,EAAK3D,QAC5C0D,KAAK0zb,aAAazzb,EAAK3D,MAAM6K,OAAQ4prB,EAAM5prB,SAC/CnH,KAAKqyb,YAAY7tb,KAAKqZ,EAAK4O,WAG1B5O,EAAK1W,QAAUlH,EAAK3D,QACxB0D,KAAK0zb,aAAazzb,EAAK3D,MAAM6K,OAAQ0W,EAAK1W,SAC3CnH,KAAKqyb,YAAY7tb,KAAKqZ,EAAK4O,MAGnCzsB,KAAKuyb,YAAY58W,YAAY31E,KAAKoyb,cAAc,GAChDpyb,KAAKuyb,YAAYz0I,UAAU99S,KAAKqyb,aAChCryb,KAAKuN,UAAYtN,EAAK3D,MACtB2D,EAAK48D,OAAS78D,KAAK6wrB,aACnB7wrB,KAAKM,OAAOkmB,QpFnBK,kBoFmB2BvmB,GACxCD,KAAKqyb,YAAY51b,SAAWwD,EAAKw6D,MAAMh+D,SACvCuD,KAAKuzb,mBACLtzb,EAAK44B,QAAS,KAI1BiiR,EAAYz/S,UAAUq4b,aAAe,SAAU7kU,EAAenpH,GAC1D,IAAIyB,EAAS0nH,EAUb,OALI1nH,GAJAnH,KAAKixrB,mBAAmBpikB,IAAmBnpH,IAAaqsb,GAAUntW,QAAUl/E,IAAaqsb,GAAU33Z,QAG9F10B,IAAaqsb,GAAU33Z,SAAW10B,IAAaqsb,GAAUntW,OACrD/wC,GAAahuC,EAAQgpH,EAAe,YAAanpH,EAASsxB,OAAO,EAAGtxB,EAASjJ,SAG7EoJ,EAAQgpH,EAAenpH,GANvBG,EAAQgpH,EAAenpH,IAAaqsb,GAAUntW,OAAS,QAAU,WAQ7D/wC,GAAa1sC,EAAQ,YAAcnH,KAAKM,OAAOU,SAEpE85S,EAAYz/S,UAAU41rB,mBAAqB,SAAUpikB,GACjD,SAAQ7uH,KAAKM,OAAO28nB,qBAAsBj9nB,KAAKM,OAAOo+nB,aAC/C74nB,EAAQgpH,EAAekjU,GAAUntW,UAE5Ck2N,EAAYz/S,UAAU21rB,qBAAuB,SAAUnzqB,GACnD,IAAI9d,EAAQC,KACRwkF,GAAS,EACb,OAAQ3mE,GACJ,IAAK,aACL,IAAK,UACD2mE,IAAWxkF,KAAKM,OAAOq0pB,qBAAqB+S,MAAY1nqB,KAAKM,OAAOk/lB,QACpE,MACJ,IAAK,UACIx/lB,KAAKM,OAAOwmnB,eAAkB9mnB,KAAKM,OAAOq0pB,qBAAqBtoP,KAAUrsa,KAAK6wrB,cAC5E7wrB,KAAKM,OAAOm0nB,cAAc12jB,QAAQx/D,QAAQyB,KAAK6wrB,aAAa9kqB,QAAU,KACzEy4D,GAAS,GAEb,MACJ,IAAK,YACIxkF,KAAKM,OAAOwmnB,gBAAkB9mnB,KAAKM,OAAOq0pB,qBAAqBtoP,KAC5Drsa,KAAKM,OAAOq0pB,qBAAqBtoP,KAAUrsa,KAAK6wrB,cAC7C7wrB,KAAKM,OAAOm0nB,cAAc12jB,QAAQx/D,QAAQyB,KAAK6wrB,aAAa9kqB,OAAS,KAC5Ey4D,GAAS,GAEb,MACJ,IAAK,OACL,IAAK,SACL,IAAK,OACL,IAAK,SACIxkF,KAAKM,OAAOy0oB,YAAoD,IAArC/0oB,KAAKM,OAAO+goB,cAAc5koB,SACtD+nF,GAAS,GAEb,MACJ,IAAK,OACkD,IAA/CxkF,KAAKM,OAAOg4nB,wBAAwB77nB,QACW,IAA/CuD,KAAKM,OAAOkqoB,wBAAwB/toB,SACpC+nF,GAAS,GAEb,MACJ,IAAK,SACKxkF,KAAKM,OAAOwjpB,kBAAqB9jpB,KAAKM,OAAOszpB,cAC9C5zpB,KAAKM,OAAOq0pB,qBAAqBu3B,KAAelsrB,KAAKM,OAAOq0pB,qBAAqBszB,OAClFzjmB,GAAS,GAEb,MACJ,IAAK,YACKxkF,KAAKM,OAAqB,gBAAMN,KAAKM,OAAOq0pB,qBAAqBu3B,MACnE1nmB,GAAS,GAEb,MACJ,IAAK,cACL,IAAK,YACKxkF,KAAKM,OAAuB,kBAAMN,KAAKM,OAAOq0pB,qBAAqBszB,MACrEzjmB,GAAS,GAEb,MACJ,IAAK,gBACL,IAAK,iBACKxkF,KAAKM,OAAOsmnB,cAAkB5mnB,KAAKM,OAAOq0pB,qBAAqBpuQ,IAG5DvmZ,KAAKM,OAAOq0pB,qBAAqBpuQ,KAASvmZ,KAAKM,OAAO0unB,aAAajxjB,QAAQthE,OAAS,GAAKuD,KAAK6wrB,cACnG7wrB,KAAKM,OAAO0unB,aAAajxjB,QAAQ3+D,QAAQ,SAAU4B,GAC3CA,EAAQ+qB,QAAUhsB,EAAM8wrB,aAAa9kqB,OAClC/qB,EAAQw0B,UAAU5f,gBAAkBiI,EAAKjI,cAAcrG,QAAQ,OAAQ,IAAIgsD,sBAC9EipB,GAAS,KANjBA,GAAS,EAUb,MACJ,IAAK,YACL,IAAK,aACIxkF,KAAKM,OAAOk0nB,cAAgBx0nB,KAAKM,OAAOq0pB,qBAAqB/0J,KACf,IAA/C5/f,KAAKM,OAAOkqoB,wBAAwB/toB,QACnCuD,KAAKM,OAAOq0pB,qBAAqB/0J,KAAkD,IAAzC5/f,KAAKM,OAAOixD,aAAa+hM,eACpE9uK,GAAS,GAEb,MACJ,IAAK,WACL,IAAK,aACIxkF,KAAKM,OAAOk0nB,cAAgBx0nB,KAAKM,OAAOq0pB,qBAAqB/0J,KACf,IAA/C5/f,KAAKM,OAAOkqoB,wBAAwB/toB,QACnCuD,KAAKM,OAAOq0pB,qBAAqB/0J,KAAS5/f,KAAKM,OAAOixD,aAAa+hM,cAAgBtzP,KAAK2wrB,iBACzFnsmB,GAAS,GAIrB,OAAOA,GAMXs2N,EAAYz/S,UAAUqwpB,eAAiB,WACnC,OAAO1rpB,KAAKgB,SAQhB85S,EAAYz/S,UAAUiX,QAAU,WAC5BtS,KAAKuyb,YAAYjgb,UACjB/N,EAAOvE,KAAKgB,SACZhB,KAAKpD,sBACLoD,KAAKM,OAAOU,QAAQ8C,UAAUS,OAAO,eAEzCu2S,EAAYz/S,UAAUkkC,cAAgB,WAClC,MAAO,eAEXu7Q,EAAYz/S,UAAU24b,WAAa,SAAUn2a,GACzC,OAAO7d,KAAKwwqB,OAAS,UAAY3ypB,GAErCi9R,EAAYz/S,UAAUi4b,aAAe,SAAUhwb,GAC3C,OAAOA,EAAGiM,QAAQvP,KAAKwwqB,OAAS,UAAW,KAE/C11X,EAAYz/S,UAAU83b,kBAAoB,SAAUt1a,GAChD,IAAIo2a,EACJ,OAAQp2a,GACJ,IAAK,aACL,IAAK,UACDo2a,GAAa9sb,OAAQ4qb,GAAUntW,QAC/B,MACJ,IAAK,QACDqvW,GAAa9sb,OAAQ4qb,GAAUntW,OAAQlR,QAASq+W,GAAUh/V,OAC1D,MACJ,IAAK,UACDkhW,GAAa9sb,OAAQ4qb,GAAUntW,OAAQlR,QAASq+W,GAAUi+P,SAC1D,MACJ,IAAK,OACD/7P,GAAa9sb,OAAQ4qb,GAAU33Z,QAASs5C,QAASq+W,GAAU+9P,UAC3D,MACJ,IAAK,SACD77P,GAAa9sb,OAAQ4qb,GAAU33Z,QAASs5C,QAASq+W,GAAUn9U,QAC3D,MACJ,IAAK,OACDq/U,GAAa9sb,OAAQ4qb,GAAUo1L,KAAMzziB,QAASq+W,GAAUtkW,MACxD,MACJ,IAAK,SACDwmW,GAAa9sb,OAAQ4qb,GAAUo1L,KAAMzziB,QAASq+W,GAAUl5Z,QACxD,MACJ,IAAK,OACDo7Z,GAAa9sb,OAAQ4qb,GAAU33Z,QAASs5C,QAASq+W,GAAUxyb,MAC3D,MACJ,IAAK,SACD00b,GAAa9sb,OAAQ4qb,GAAU33Z,SAC/B,MACJ,IAAK,YACD65Z,GAAa9sb,OAAQ4qb,GAAU33Z,QAASs5C,QAASq+W,GAAU/gM,KAC3D,MACJ,IAAK,cACDijM,GAAa9sb,OAAQ4qb,GAAU33Z,QAASs5C,QAASq+W,GAAUk+P,OAC3D,MACJ,IAAK,YACDh8P,GAAa9sb,OAAQ4qb,GAAU33Z,QAASs5C,QAASq+W,GAAU0pL,KAC3D,MACJ,IAAK,gBACDxnL,GAAa9sb,OAAQ4qb,GAAUntW,OAAQlR,QAASq+W,GAAU4V,WAC1D,MACJ,IAAK,iBACD1T,GAAa9sb,OAAQ4qb,GAAUntW,OAAQlR,QAASq+W,GAAUs+P,YAC1D,MACJ,IAAK,YACDp8P,GAAa9sb,OAAQ4qb,GAAUg+P,MAAOr8mB,QAASq+W,GAAUm+P,OACzD,MACJ,IAAK,WACDj8P,GAAa9sb,OAAQ4qb,GAAUg+P,MAAOr8mB,QAASq+W,GAAUq+P,OACzD,MACJ,IAAK,WACDn8P,GAAa9sb,OAAQ4qb,GAAUg+P,MAAOr8mB,QAASq+W,GAAUx4K,OACzD,MACJ,IAAK,WACD06K,GAAa9sb,OAAQ4qb,GAAUg+P,MAAOr8mB,QAASq+W,GAAUo+P,OAOjE,OAJAnwrB,KAAKmyb,aAAat0a,IACd4O,KAAMzsB,KAAKwzb,cAAc31a,GAAOva,GAAItD,KAAKg0b,WAAWn2a,GACpD1W,OAAQ8sb,EAAS9sb,OAAQusE,QAASugX,EAASvgX,QAAU,WAAaugX,EAASvgX,QAAU,IAElF1zE,KAAKmyb,aAAat0a,IAE7Bi9R,EAAYz/S,UAAU63b,gBAAkB,WACpC,OAAQ,aAAc,UAClB,QAAS,UAAW,OAAQ,SAAU,OAAQ,SAAU,OAAQ,SAChE,YAAa,cAAe,YAAa,gBAAiB,iBAC1D,YAAa,WAAY,WAAY,aAE7Cp4I,EAAYz/S,UAAUi3b,aAAe,WACjC,OACI4+P,WAAc,aACdC,QAAW,UACXvzQ,KAAQ,OACRvR,MAAS,QACTs7O,QAAW,UACXlC,KAAQ,aACRhkO,OAAU,eACV3wN,KAAQ,OACR5rE,OAAU,eACVgniB,UAAa,YACbjE,YAAe,cACfmJ,UAAa,YACbl3W,OAAU,SACV+tU,cAAiB,gBACjBC,eAAkB,iBAClBH,UAAa,YACbj0X,SAAY,WACZu9Z,SAAY,eACZ3yZ,SAAY,aAGpBoc,EAAYz/S,UAAUg9R,UAAY,SAAUx3R,GACxC,IAAIoiE,EAAOp9D,EAAQhF,EAAEsG,OAAQ,mBAC7B,GAAI87D,EAAM,CACNA,EAAKn/D,UAAUM,IAAI,aACnB,IAAI1E,EAAMujE,EAAKtgE,cAAc,oBAAoBkQ,aAAa,gBAC9D,OAAO7S,KAAKM,OAAOwhoB,eAAepioB,GAEtC,OAAO,MAEXo7S,EAAYz/S,UAAUoniB,UAAY,SAAU5hiB,EAAGoyoB,GAC3CjzoB,KAAKijE,KAAOpiE,EAAEsG,OACdnH,KAAK0gE,IAAM76D,EAAQhF,EAAEsG,OAAQ,aAAenH,KAAK0gE,IAC7C1gE,KAAK0gE,KAAOuykB,IAAiBp/lB,GAAahzC,EAAEsG,OAAQ,gBACpDnH,KAAKM,OAAOmiiB,UAAU1tgB,SAAS/0B,KAAK0gE,IAAI7tD,aAAa,iBAAkB,MAGxEioS,KClhBPw2Y,GAAyC,WACzC,SAASA,EAAwBhxrB,GAC7BN,KAAKuxrB,UAAY,EACjBvxrB,KAAKM,OAASA,EACdN,KAAKy0qB,kBAAoB,IAAIz7C,GAAkBh5nB,KAAKM,QAgBxD,OAdAgxrB,EAAwBj2rB,UAAU49nB,aAAe,SAAUz8nB,EAAMk4qB,GAG7D,IAAK,IAFDzvmB,EAAUjlE,KAAKM,OAAO28nB,mBACtBv8jB,EAAM1gE,KAAKy0qB,kBAAkBx7C,aAAaz8nB,EAAMk4qB,GAC3Cv4qB,EAAI,EAAG0F,EAAM6+D,EAAIjkE,OAAQN,EAAI0F,EAAK1F,IACnC6D,KAAKuxrB,UAAY,GAAM,EACvB7wnB,EAAIvkE,GAAG2lE,MAAQpB,EAAIvkE,GAAG2lE,MAAMzgE,MAAM4jE,EAASvE,EAAIvkE,GAAG2lE,MAAMrlE,QAGxDikE,EAAIvkE,GAAG2lE,MAAQpB,EAAIvkE,GAAG2lE,MAAMzgE,MAAM,EAAG4jE,GAI7C,OADAjlE,KAAKuxrB,YACE7wnB,GAEJ4wnB,KCzBPhnmB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAoBxC6mmB,GAAqC,SAAUrmmB,GAE/C,SAASqmmB,EAAoBlxrB,EAAQiloB,GACjC,OAAOp6iB,EAAO7pF,KAAKtB,KAAMM,EAAQiloB,IAAYvloB,KA6CjD,OA/CAsqF,GAAUknmB,EAAqBrmmB,GAI/BqmmB,EAAoBn2rB,UAAU0ioB,YAAc,WACxC5yiB,EAAO9vF,UAAU0ioB,YAAYz8nB,KAAKtB,MAClC,IAAI6xqB,EAAO1wqB,EAAc,OAASkC,UAAW,oBACzCyuqB,EAAO3wqB,EAAc,OAASkC,UAAW,qBAC7CrD,KAAKg9nB,WAAWpgnB,WAAWjb,YAAYkwqB,GACvC7xqB,KAAKg9nB,WAAWpgnB,WAAWjb,YAAYmwqB,GACvC9xqB,KAAKyxrB,iBAAiB5f,GACtB7xqB,KAAK0xrB,kBAAkB5f,IAE3B0f,EAAoBn2rB,UAAU8loB,YAAc,SAAU1B,GAClDt0iB,EAAO9vF,UAAU8loB,YAAY7/nB,KAAKtB,KAAMy/nB,GACxCz/nB,KAAK2xrB,oBAAoBhvrB,cAAc,SAASX,UAAY,qBAC5DhC,KAAK4xrB,mBAAmBjvrB,cAAc,eAAeA,cAAc,MAAM+yR,QAAU11R,KAAKM,OAAO28nB,mBAC/Fj9nB,KAAK4xrB,mBAAmBltrB,MAAMixY,iBAAmB,MAC7C31Y,KAAKM,OAAOo+nB,aACZ1+nB,KAAKM,OAAOq+nB,mBAAmBh8nB,cAAc,mBAAmBA,cAAc,SAASX,UAAY,GACnGhC,KAAKM,OAAOq+nB,mBAAmBh8nB,cAAc,oBAAoBA,cAAc,SAASX,UAAY,KAG5GwvrB,EAAoBn2rB,UAAUo2rB,iBAAmB,SAAUztrB,GACvDhE,KAAK+xqB,cAAgB/tqB,GAEzBwtrB,EAAoBn2rB,UAAUq2rB,kBAAoB,SAAU1trB,GACxDhE,KAAK4xqB,eAAiB5tqB,GAE1BwtrB,EAAoBn2rB,UAAUu2rB,iBAAmB,WAC7C,OAAO5xrB,KAAK+xqB,eAEhByf,EAAoBn2rB,UAAUs2rB,kBAAoB,WAC9C,OAAO3xrB,KAAK4xqB,gBAEhB4f,EAAoBn2rB,UAAUoioB,kBAAoB,WAC9C,OAAO,IAAI6zD,GAAwBtxrB,KAAKM,SAE5CkxrB,EAAoBn2rB,UAAU8ioB,YAAc,WACxChziB,EAAO9vF,UAAU8ioB,YAAY78nB,KAAKtB,MAClCA,KAAK4xrB,mBAAmBjwrB,YAAY3B,KAAK87P,YACzC,IAAI+1b,EAAO7xrB,KAAK87P,WAAWl6P,WAAU,GACrC5B,KAAK2xrB,oBAAoBhwrB,YAAYkwrB,GACrCttrB,EAAOvE,KAAK2xrB,oBAAoBhvrB,cAAc,aAC9C,IAAI89nB,EAAazgoB,KAAKM,OAAOq+nB,mBAAmBh8nB,cAAc,oBAAoBA,cAAc,YAAaf,WAAU,GACvHiwrB,EAAK3srB,aAAau7nB,EAAUoxD,EAAKlvrB,cAAc,WAE5C6urB,GACT/0D,IAEEq1D,GAA8B,SAAU3mmB,GAExC,SAAS2mmB,EAAaxxrB,EAAQiloB,GAC1B,IAAIxloB,EAAQorF,EAAO7pF,KAAKtB,KAAMM,EAAQiloB,IAAYvloB,KAElD,OADAD,EAAMrD,mBACCqD,EAoNX,OAxNAuqF,GAAUwnmB,EAAc3mmB,GAMxB2mmB,EAAaz2rB,UAAUqB,iBAAmB,WACtCsD,KAAKM,OAAOslF,GAAG03iB,GAAqBt9nB,KAAK+xrB,cAAe/xrB,MACxDA,KAAKM,OAAOslF,GAAGi0lB,GAAqB75qB,KAAKgyrB,gBAAiBhyrB,OAE9D8xrB,EAAaz2rB,UAAUuB,oBAAsB,WACrCoD,KAAKM,OAAO0mF,aAGhBhnF,KAAKM,OAAO0lF,IAAI6zlB,GAAqB75qB,KAAKgyrB,kBAE9CF,EAAaz2rB,UAAU8ioB,YAAc,WACjChziB,EAAO9vF,UAAU8ioB,YAAY78nB,KAAKtB,MAClCA,KAAKiyrB,cACLjyrB,KAAKkyrB,iBACLlyrB,KAAKwioB,uBACLxioB,KAAKyioB,uBACLzioB,KAAKM,OAAOyN,OAAO20nB,IAA0BnqW,KAAMv4R,KAAKu4R,KAAMt4R,MAAQi9nB,UAAU,MAEpF40D,EAAaz2rB,UAAU0ioB,YAAc,WACjC5yiB,EAAO9vF,UAAU0ioB,YAAYz8nB,KAAKtB,MAClC,IAAI6xqB,EAAO1wqB,EAAc,OAASkC,UAAW,mBACzCyuqB,EAAO3wqB,EAAc,OAASkC,UAAW,oBAC7CrD,KAAKg9nB,WAAWpgnB,WAAWjb,YAAYkwqB,GACvC7xqB,KAAKg9nB,WAAWpgnB,WAAWjb,YAAYmwqB,GACvC9xqB,KAAKmyrB,gBAAgBtgB,GACrB7xqB,KAAKoyrB,iBAAiBtgB,IAE1BggB,EAAaz2rB,UAAUwpoB,UAAY,WAC/B,IAAIpF,EAAQz/nB,KAAKqyrB,mBAAmB1vrB,cAAc,SAClD4B,EAAOvE,KAAKqyrB,mBAAmB1vrB,cAAc,UAC7CwoF,EAAO9vF,UAAUwpoB,UAAUvjoB,KAAKtB,MAChCA,KAAKiyrB,cACLjyrB,KAAKqyrB,mBAAmB1vrB,cAAc,SAASX,UAAYy9nB,EAAMz9nB,UACjEhC,KAAKkyrB,iBACLltnB,GAAchlE,KAAKM,OAAOysoB,kBAAkBpqoB,cAAc,YAAa3C,KAAKM,OAAO28nB,oBACnFj9nB,KAAKwioB,uBACLxioB,KAAKM,OAAOyN,OAAO20nB,IAA0BnqW,KAAMv4R,KAAKu4R,KAAMt4R,MAAQi9nB,UAAU,MAEpF40D,EAAaz2rB,UAAU42rB,YAAc,WACjCjyrB,KAAKsyrB,kBAAkB3wrB,YAAY3B,KAAK87P,YACxC97P,KAAKqyrB,mBAAmB1wrB,YAAY3B,KAAK+ujB,eACzC/ujB,KAAKuyrB,uBACLvyrB,KAAKwyrB,sBAETV,EAAaz2rB,UAAUm3rB,mBAAqB,WACxC,GAAIxyrB,KAAKM,OAAO6upB,0BAGZ,IAAK,IAFDsjC,EAAmBzyrB,KAAKM,OAAOU,QAAQ2B,cAAc,oBAAoBA,cAAc,SAASnB,iBAAiB,mBACjHK,EAAM7B,KAAKM,OAAOU,QAAQ2B,cAAc,oBAAoBA,cAAc,SAASnB,iBAAiB,mBAAmB/E,OAClHN,EAAI,EAAGA,EAAI0F,EAAK1F,IAAK,CAC1B,IACI6E,EAAUyxrB,EAAiBt2rB,GAAQ,MAAE,GACrC6E,IACA2C,GAAU3C,IAAW,mBACjByxrB,EAAiBt2rB,GAAQ,MAAE,GAAG86R,QAAU,IACxC96R,GAASs2rB,EAAiBt2rB,GAAQ,MAAE,GAAG86R,QAAU,MAMrE66Z,EAAaz2rB,UAAU02rB,cAAgB,SAAUh1rB,GAC7C,GAAiB,WAAbA,EAAIwgoB,KAAmB,CACvB,IAAIm1D,EAAY1yrB,KAAK87P,WAAWn5P,cAAc,gBAC1C3C,KAAKM,OAAO60d,gBAAkBu9N,GAAa1yrB,KAAKqyrB,mBAAmB1vrB,cAAc,UACjF3C,KAAKqyrB,mBAAmB1vrB,cAAc,SACjChB,YAAYqjE,GAAc0tnB,EAAW1yrB,KAAKM,OAAO28nB,0BAGzD,GAAiB,aAAblgoB,EAAIwgoB,KAAqB,CAC9B,IAAImD,OAAQ,EACRC,OAAQ,EACRo5C,EAAO/5qB,KAAKsyrB,kBACZrlD,EAAOjtoB,KAAKqyrB,mBACZ/xY,EAAOtgT,KAAKM,OAAOm0C,aACnBywlB,EAAWlloB,KAAKM,OAAO2koB,iBAAiBC,SACxCytD,EAAe3yrB,KAAKM,OAAOq+nB,mBAAmB/hnB,WAAW9Y,WAC5C,WAAbohoB,GAAyBnooB,EAAIovpB,aAC7BzrB,EAAQpgV,EAAK39S,cAAc,oBAAoBnB,iBAAiB,MAChEm/nB,EAAQrgV,EAAK39S,cAAc,qBAAqBnB,iBAAiB,MACjExB,KAAK4yrB,cAAclyD,EAAOC,EAAO5joB,EAAIovpB,WAAW,IAEnC,YAAbjnB,GAA0BlloB,KAAKM,OAAO+8nB,cACtCs1D,EAAavurB,IAAI,UAGjBuurB,EAAapurB,OAAO,UAEP,SAAb2goB,GAAuBnooB,EAAIovpB,WAC3BzrB,EAAQq5C,EAAKv4qB,iBAAiB,MAC9Bm/nB,EAAQsM,EAAKzroB,iBAAiB,QAG9Bk/nB,EAAQq5C,EAAKp3qB,cAA2B,YAAbuioB,EAAyB,QAAU,SAAS1joB,iBAAiB,MACxFm/nB,EAAQsM,EAAKtqoB,cAA2B,YAAbuioB,EAAyB,QAAU,SAAS1joB,iBAAiB,OAEvFxB,KAAKM,OAAOq+nB,mBAAmBn9nB,iBAAiB,wBAAwB/E,QACzEuD,KAAK4yrB,cAAclyD,EAAOC,EAAO5joB,EAAIovpB,WAAW,EAAOnspB,KAAKujoB,SAAW,GAE3EvjoB,KAAKuyrB,yBAGbT,EAAaz2rB,UAAUw3rB,oBAAsB,cACtCxxrB,MAAMC,KAAKtB,KAAKM,OAAOq+nB,mBAAmBn9nB,iBAAiB,gBAAgBpC,QAAQ,SAAU4E,GAC5FA,EAAIU,MAAMqR,OAAS/R,EAAIqQ,cAAcq9B,aAAe,QAG5DogpB,EAAaz2rB,UAAUu3rB,cAAgB,SAAUlyD,EAAOC,EAAOwrB,EAAW2mC,EAAaC,GASnF,IAAK,IARDC,EACAC,EACAC,EAASlzrB,KAAKM,OAAO+8nB,cACrB6H,EAAWlloB,KAAKM,OAAO2koB,iBAAiBC,SACxCrC,EAAQ7ioB,KAAKM,OAAOq+nB,mBAAmBh8nB,cAAc,SACrDwwrB,EAAQnzrB,KAAKM,OAAOq+nB,mBAAmBh8nB,cAAc,SACrDoT,KACAC,KACK7Z,EAAI,EAAG0F,EAAM6+nB,EAAMjkoB,OAAQN,EAAI0F,EAAK1F,IACzC4Z,EAAO5Z,GAAKukoB,EAAMvkoB,GAAGu1C,aACrB17B,EAAM7Z,GAAKwkoB,EAAMxkoB,GAAGu1C,aAExB,IAASv1C,EAAI,EAAG0F,EAAM6+nB,EAAMjkoB,OAAQN,EAAI0F,EAAK1F,KACrCgwpB,IAA4B,WAAbjnB,GAAyB4tD,GAA+B,YAAb5tD,GAA0BrC,EAAM1+nB,SAASu8nB,EAAMvkoB,KACxF,WAAb+ooB,GAAyBiuD,EAAMhvrB,SAASu8nB,EAAMvkoB,MAAU42rB,KAC5DryD,EAAMvkoB,GAAGuI,MAAMqR,OAAS,KACxB4qnB,EAAMxkoB,GAAGuI,MAAMqR,OAAS,MAE5Bi9qB,EAAUj9qB,EAAO5Z,GACjB82rB,EAAUj9qB,EAAM7Z,GACZukoB,EAAMvkoB,GAAGgpE,oBAAuB+tnB,GAAUF,EAAUC,IAAcC,GAAUF,EAAUC,GACrFjzrB,KAAKM,OAAOumnB,gBAAkB7mnB,KAAKM,OAAO+wpB,aAAamY,uBACnDxpqB,KAAKM,OAAOumnB,eAAkB7mnB,KAAKM,OAAOumnB,gBAAkB7mnB,KAAKM,OAAO+wpB,aAAamY,sBACtF9oC,EAAMvkoB,GAAGuI,MAAMqR,OAASk9qB,EAAU,MAGtCtyD,EAAMxkoB,GAAGgpE,oBAAuB+tnB,GAAUF,EAAUC,IAAcC,GAAUF,EAAUC,GACrFjzrB,KAAKM,OAAOumnB,eAAiB7mnB,KAAKM,OAAO+wpB,aAAamY,uBAClDxpqB,KAAKM,OAAOumnB,eAAkB7mnB,KAAKM,OAAOumnB,eAAiB7mnB,KAAKM,OAAO+wpB,aAAamY,sBACrF7oC,EAAMxkoB,GAAGuI,MAAMqR,OAASi9qB,EAAU,MAI1CE,GACAlzrB,KAAKgyrB,mBAGbF,EAAaz2rB,UAAU22rB,gBAAkB,WACrC,IAAIoB,EAAuBpzrB,KAAKM,OAAOU,QAAQ2B,cAAc,qBAAqBiJ,wBAAwBmK,OAEtGq9qB,EADsBpzrB,KAAKM,OAAOU,QAAQ2B,cAAc,oBAAoBiJ,wBAAwBmK,SAEpG/V,KAAKM,OAAOU,QAAQ2B,cAAc,oBAAoB+B,MAAMqR,OAASq9qB,EACjEzznB,KAAsB,OAGlCmynB,EAAaz2rB,UAAUk3rB,qBAAuB,WAK1C,IAAK,IAJDc,EACAC,EACAC,EAAMvzrB,KAAKsyrB,kBAAkB9wrB,iBAAiB,mBAC9Co9qB,EAAM5+qB,KAAKqyrB,mBAAmB7wrB,iBAAiB,mBAC1CrF,EAAI,EAAG0F,EAAM0xrB,EAAI92rB,OAAQN,EAAI0F,EAAK1F,IACvCk3rB,EAAWrzrB,KAAKwzrB,WAAWD,EAAIp3rB,IAC/Bm3rB,EAAWtzrB,KAAKwzrB,WAAW5U,EAAIzirB,IAC3Bk3rB,EAAStzqB,IAAM,EACf/f,KAAKyzrB,uBAAuBt3rB,EAAGk3rB,EAAS/mrB,IAAKinrB,EAAIp3rB,GAAIyirB,GAEhD0U,EAASvzqB,IAAM,GACpB/f,KAAKyzrB,uBAAuBt3rB,EAAGm3rB,EAAShnrB,IAAKsyqB,EAAIzirB,GAAIo3rB,GAGzDvzrB,KAAKM,OAAOumnB,eACZ7mnB,KAAK6yrB,uBAGbf,EAAaz2rB,UAAUm4rB,WAAa,SAAU9ynB,GAI1C,IAAK,IAHDgznB,EACAC,EACAC,EACKz3rB,EAAI,EAAG0F,EAAM6+D,EAAIyE,kBAAmBhpE,EAAI0F,EAAK1F,IACxC,IAANA,IACAw3rB,EAAajznB,EAAItmD,SAAS,GAAG68Q,SAEjCy8Z,EAAQhznB,EAAItmD,SAASje,GAAG86R,QACxB08Z,EAAatnrB,KAAK0T,IAAI2zqB,EAAOC,GAC7BC,EAAavnrB,KAAKC,IAAIonrB,EAAOC,GAEjC,OAAS5zqB,IAAK4zqB,EAAYrnrB,IAAKsnrB,IAEnC9B,EAAaz2rB,UAAUo4rB,uBAAyB,SAAU7oqB,EAAKgpqB,EAAYlznB,EAAK63N,GAE5E,IAAK,IADDxiR,EAAS,EACJ5Z,EAAI,EAAGA,EAAIy3rB,EAAYz3rB,IAC5B4Z,GAAUwiR,EAAK3tQ,EAAMzuB,GAAGuI,MAAMqR,OAC1Bgf,SAASwjQ,EAAK3tQ,EAAMzuB,GAAGuI,MAAMqR,OAAQ,IAAMwiR,EAAK3tQ,EAAMzuB,GAAGu1C,aAEjEgvB,EAAIh8D,MAAMqR,OAASA,EAAS,MAEhC+7qB,EAAaz2rB,UAAU82rB,gBAAkB,SAAUnurB,GAC/ChE,KAAK6zrB,aAAe7vrB,GAExB8trB,EAAaz2rB,UAAU+2rB,iBAAmB,SAAUpurB,GAChDhE,KAAK8zrB,cAAgB9vrB,GAEzB8trB,EAAaz2rB,UAAUi3rB,gBAAkB,WACrC,OAAOtyrB,KAAK6zrB,cAEhB/B,EAAaz2rB,UAAUg3rB,iBAAmB,WACtC,OAAOryrB,KAAK8zrB,eAEhBhC,EAAaz2rB,UAAU62rB,eAAiB,WACpC,IAAI6B,EAAS/zrB,KAAKqyrB,mBAAmB1vrB,cAAc,SACnD4B,EAAOvE,KAAKqyrB,mBAAmB1vrB,cAAc,aAC7CoxrB,EAAO7urB,aAAa8/D,GAAchlE,KAAKsyrB,kBAAkB3vrB,cAAc,YAAa3C,KAAKM,OAAO28nB,oBAAqB82D,EAAOpxrB,cAAc,WAEvImvrB,GACTrwD,ICxREuyD,GAAwB,WACxB,SAASA,EAAO1zrB,EAAQiloB,GACpBvloB,KAAKM,OAASA,EACdN,KAAKuloB,QAAUA,EACfvloB,KAAKtD,mBAuCT,OArCAs3rB,EAAO34rB,UAAUkkC,cAAgB,WAC7B,MAAO,UAEXy0pB,EAAO34rB,UAAUqB,iBAAmB,WAC5BsD,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAOslF,GAAG6ljB,GAAoBzroB,KAAKqroB,oBAAqBrroB,MAC7DA,KAAKM,OAAOslF,GAAGm1jB,GAAmB/6oB,KAAKukB,WAAYvkB,QAEvDg0rB,EAAO34rB,UAAUkpB,WAAa,WACtBvkB,KAAKM,OAAOo+nB,YACZn5nB,GAAanB,IAAIpE,KAAKM,OAAOq+nB,mBAAoB,WAAY3+nB,KAAK8ypB,gBAAiB9ypB,OAG3Fg0rB,EAAO34rB,UAAUy3pB,gBAAkB,SAAUjypB,GACrCgzC,GAAahzC,EAAEsG,OAAQ,UAAU7D,KAAOtD,KAAKM,OAAOU,QAAQsC,IAGhEtD,KAAKM,OAAOyN,OAAOmlpB,GAAiBrypB,IAExCmzrB,EAAO34rB,UAAUgwoB,oBAAsB,WACnC,IAAIx9mB,EAAW7tB,KAAKuloB,QAAQ/jkB,WAAW,mBACnCxhE,KAAKM,OAAO28nB,qBACZpvmB,EAASy9mB,YAAYxd,GAAWjvU,OAAQ,IAAIizY,GAAa9xrB,KAAKM,OAAQN,KAAKuloB,UAC3E13mB,EAASy9mB,YAAYxd,GAAWqb,QAAS,IAAIqoD,GAAoBxxrB,KAAKM,OAAQN,KAAKuloB,YAG3FyuD,EAAO34rB,UAAUuB,oBAAsB,WAC/BoD,KAAKM,OAAO0mF,aAGhBhnF,KAAKM,OAAO0lF,IAAIyljB,GAAoBzroB,KAAKqroB,sBAE7C2oD,EAAO34rB,UAAUiX,QAAU,WACvBtS,KAAKpD,uBAEFo3rB,KCtCPC,GAA4B,WAC5B,SAASA,EAAW3zrB,EAAQghE,GACxBthE,KAAKmyb,gBACLnyb,KAAKu2I,WAAav2I,KAAKsyb,eACvBtyb,KAAKoyb,gBACLpyb,KAAKqyb,eACLryb,KAAKw6T,QAAS,EAEdx6T,KAAKk0rB,MAAQ,eACbl0rB,KAAKm0rB,QAAU,iBACfn0rB,KAAKo0rB,UAAY,mBACjBp0rB,KAAKq0rB,WAAa,oBAClBr0rB,KAAKukH,KAAO,eACZvkH,KAAKs0rB,OAAS,gBACdt0rB,KAAKu0rB,IAAM,iBACXv0rB,KAAKw0rB,KAAO,aACZx0rB,KAAKy0rB,QAAU,YACfz0rB,KAAKM,OAASA,EACdN,KAAKwwqB,OAASlwqB,EAAOU,QAAQsC,GAC7BtD,KAAKshE,eAAiBA,EACtBthE,KAAKtD,mBA8dT,OA5dAu3rB,EAAW54rB,UAAUkpB,WAAa,WAC9B,IAAIxkB,EAAQC,KACZA,KAAK00rB,wBAAwBt1rB,QAAQ,SAAU4E,GAC3CuB,GAAanB,IAAIJ,EAAK,YAAajE,EAAM40rB,sBAAuB50rB,MAGxEk0rB,EAAW54rB,UAAU8pB,aAAe,WAChC,IAAIplB,EAAQC,KACZA,KAAK00rB,wBAAwBt1rB,QAAQ,SAAU4E,GAC3CuB,GAAahB,OAAOP,EAAK,YAAajE,EAAM40rB,0BAQpDV,EAAW54rB,UAAUiX,QAAU,WAC3BtS,KAAK40rB,WAAWtirB,UAChBtS,KAAKpD,sBACLoD,KAAK60rB,qBACL70rB,KAAKmlB,eACL5gB,EAAOvE,KAAKgB,UAEhBizrB,EAAW54rB,UAAUy5rB,uBAAyB,SAAUj0rB,GAChDA,EAAEsG,OAAOrD,UAAUK,SAAS,kBACvBnE,KAAKw6T,QAAUx6T,KAAKkvqB,aAAelvqB,KAAK+0rB,cAAcl0rB,IAAOL,SAASmC,cAAc,qCACrF3C,KAAK40rB,WAAW3yrB,QAChBjC,KAAKg1rB,eAAen0rB,IAEdb,KAAKw6T,OAIXx6T,KAAK40rB,WAAW3yrB,QAHhBjC,KAAKg1rB,eAAen0rB,KAOhCozrB,EAAW54rB,UAAU25rB,eAAiB,SAAUn0rB,GAC5C,IAAIoU,GAAQvI,IAAK,EAAGF,KAAM,GAC1BxM,KAAKgB,QAAQ0D,MAAMo7D,QAAU,kCAC7B,IAAIirD,EAAS/qH,KAAKgB,QAAQ4K,wBAC1B5L,KAAKgB,QAAQ0D,MAAMo7D,QAAU,kCAC7B9/D,KAAKkvqB,WAAalvqB,KAAK+0rB,cAAcl0rB,GACjC2K,GAAQkb,UACRzR,EAAIvI,IAAQ7Q,OAAOyd,YAAc,EAAMyxG,EAAOh1G,OAAS,EACvDd,EAAIzI,KAAS3Q,OAAO0d,WAAa,EAAMwxG,EAAO/0G,MAAQ,GAGlDhW,KAAKM,OAAO4S,UACZ+B,EAAMX,GAAkBtU,KAAKkvqB,WAAY,OAAQ,WAGjDj6pB,EAAMX,GAAkBtU,KAAKkvqB,WAAY,QAAS,WAC9C1iqB,MAAQu+G,EAAO/0G,MAG3BhW,KAAK40rB,WAAWlzrB,KAAKuT,EAAIvI,IAAKuI,EAAIzI,MAClC3L,EAAE2kB,kBAENyuqB,EAAW54rB,UAAUs5rB,sBAAwB,SAAU9zrB,GACnDb,KAAKw6T,SAA0C,SAA/Bx6T,KAAKgB,QAAQ0D,MAAM4xC,SAAqD,KAA/Bt2C,KAAKgB,QAAQ0D,MAAM4xC,UAEhF29oB,EAAW54rB,UAAUq5rB,sBAAwB,WACzC,SAAUrzrB,MAAMC,KAAKtB,KAAKM,OAAOu/nB,iBAAiBr+nB,iBAAiB,IAAMxB,KAAKukH,QAKlF0vkB,EAAW54rB,UAAUqB,iBAAmB,WAChCsD,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAOslF,GAAG88iB,GAAwB1ioB,KAAKukB,WAAYvkB,MACxDA,KAAKM,OAAOslF,GAAGi4iB,GAAiB79nB,KAAKwwrB,sBAAuBxwrB,MAC5DA,KAAKM,OAAOslF,GAAGm1jB,GAAmB/6oB,KAAK+rG,OAAQ/rG,MAC3CA,KAAKi1rB,qBACLj1rB,KAAKM,OAAOslF,GAAGoqiB,GAA4BhwnB,KAAKk1rB,eAAgBl1rB,MAEpEA,KAAKM,OAAOslF,GAAG04jB,GAAct+oB,KAAK80rB,uBAAwB90rB,QAK9Di0rB,EAAW54rB,UAAUuB,oBAAsB,WACnCoD,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAO0lF,IAAI08iB,GAAwB1ioB,KAAKmlB,cAC7CnlB,KAAKM,OAAO0lF,IAAI63iB,GAAiB79nB,KAAKwwrB,uBACtCxwrB,KAAKM,OAAO0lF,IAAI+0jB,GAAmB/6oB,KAAK+rG,QACpC/rG,KAAKi1rB,qBACLj1rB,KAAKM,OAAO0lF,IAAIgqiB,GAA4BhwnB,KAAKk1rB,gBAErDl1rB,KAAKM,OAAO0lF,IAAIs4jB,GAAct+oB,KAAK80rB,0BAEvCb,EAAW54rB,UAAUm1rB,sBAAwB,SAAU3vrB,GAC/CA,EAAEswF,SAAWnxF,KAAKu/B,iBAAmB1+B,EAAE4+B,SACnCz/B,KAAK40rB,aACL50rB,KAAK40rB,WAAWtirB,UAChB/N,EAAOvE,KAAKgB,UAEhBhB,KAAK+rG,WAGbkolB,EAAW54rB,UAAU0wG,OAAS,WAC1B/rG,KAAKqlH,KAAOrlH,KAAKshE,eAAeE,WAAW,gBAC3CxhE,KAAKgB,QAAUG,EAAc,MAAQmC,GAAItD,KAAKwwqB,OAAS,cAAentqB,UAAW,cACjFrD,KAAKM,OAAOU,QAAQW,YAAY3B,KAAKgB,SACrChB,KAAK40rB,WAAa,IAAIpiQ,IAClBv/a,SAAU,cACVC,UAAWlT,KAAKM,OAAO4S,UACvB04F,kBAAmB5rG,KAAKM,OAAOsrG,kBAC/B59F,OAAQhO,KAAKM,OAAO0N,OACpBysD,MAAOz6D,KAAK2yO,WACZltO,OAAQzF,KAAKm1rB,oBAAoB75rB,KAAK0E,MACtCm2C,WAAYn2C,KAAKo1rB,qBAAqB95rB,KAAK0E,MAC3C6yb,QAAS7yb,KAAKq1rB,kBAAkB/5rB,KAAK0E,MACrCszH,iBAAkBtzH,KAAKs1rB,qBAAqBh6rB,KAAK0E,MACjDuzH,YAAavzH,KAAKu1rB,sBAAsBj6rB,KAAK0E,QAEjDA,KAAK40rB,WAAWv+oB,SAASr2C,KAAKgB,SAC9BhB,KAAKw1rB,oBAETvB,EAAW54rB,UAAUm6rB,iBAAmB,YAC/BhqrB,GAAQkb,UAAY1mB,KAAKi1rB,qBAC1B1vrB,GAAanB,IAAIpE,KAAKgB,QAAS,YAAahB,KAAKy1rB,aAAcz1rB,OAGvEi0rB,EAAW54rB,UAAUw5rB,mBAAqB,YACjCrprB,GAAQkb,UAAY1mB,KAAKi1rB,qBAC1B1vrB,GAAahB,OAAOvE,KAAKgB,QAAS,YAAahB,KAAKy1rB,eAG5DxB,EAAW54rB,UAAUi6rB,qBAAuB,SAAUr1rB,GAClD,GAAID,KAAK01rB,cAAcz1rB,EAAK4d,MAAO,CAC/B,IAAIkO,EAAQ/rB,KAAKszb,aAAarzb,EAAK4d,KAAKva,GAAItD,KAAKy0rB,SAC7C53nB,EAAS78D,KAAKM,OAAOo0nB,iBAAiB3omB,GACtCmpK,EAAQpiL,IAAe,GACvBO,MAAOpT,EAAK4d,KAAK4O,KACjBja,QAASqqD,EAAOrlC,UAEhBx3B,KAAKM,OAAO4S,WACZgiL,EAAMpxL,UAAUM,IAAI,SAExBnE,EAAKe,QAAQgB,UAAY,GACzB/B,EAAKe,QAAQW,YAAYuzL,QAEpBj1L,EAAK4d,KAAKva,IAA0C,WAApCtD,KAAKszb,aAAarzb,EAAK4d,KAAKva,MACjDrD,EAAKe,QAAQW,YAAYR,EAAc,QAAUkC,UAAW,qBAC5DpD,EAAKe,QAAQqC,WAAa,oCAGlC4wrB,EAAW54rB,UAAUk6rB,sBAAwB,SAAUt1rB,GACnD,IAAI01rB,EAAa11rB,EAAK3D,MAAQuJ,EAAQ5F,EAAK3D,MAAM6K,OAAQ,gBAAkB,MACtE1J,EAAkBwC,EAAKi7L,aACkB,kBAA1Cl7L,KAAKszb,aAAarzb,EAAKi7L,WAAW53L,KAClCqyrB,GAAc31rB,KAAK01rB,cAAcC,GACjC11rB,EAAK44B,QAAS,EAET54B,EAAK3D,QAAUuJ,EAAQ5F,EAAK3D,MAAM6K,OAAQ,IAAMnH,KAAKu0rB,MACtDt0rB,EAAK3D,MAAM8xG,eAAiBnuG,EAAK3D,MAAM8xG,cAAcuX,eACrD9xE,GAAa5zC,EAAK3D,MAAM8xG,cAAcuX,cAAe,mBACtD9xE,GAAa5zC,EAAK3D,MAAM6K,OAAQ,YAClC0sC,GAAa5zC,EAAK3D,MAAM6K,OAAQ,sBACjClH,EAAK44B,QAAS,IAGtBo7pB,EAAW54rB,UAAUq6rB,cAAgB,SAAU73qB,GAC3C,OAAOA,EAAKva,IAAMua,EAAKva,GAAG/E,QAAQ,cAAgB,IACqB,IAAnEyB,KAAKszb,aAAaz1a,EAAKva,GAAItD,KAAKy0rB,SAASl2rB,QAAQ,cAEzD01rB,EAAW54rB,UAAU+5rB,qBAAuB,SAAUn1rB,GAClDA,EAAK48D,OAAS78D,KAAK6wrB,aAAe7wrB,KAAKq4R,YACvCr4R,KAAKM,OAAOkmB,QxF+DQ,iBwF/DuBvmB,GAC3C,IAAK,IAAI7B,EAAK,EAAGyE,EAAK5C,EAAKw6D,MAAOr8D,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACpD,IAAIyf,EAAOhb,EAAGzE,GACVf,EAAM2C,KAAKszb,aAAaz1a,EAAKva,IAC7BytrB,EAAQ/wrB,KAAKmyb,aAAa90b,IACe,IAAzC2C,KAAKkzb,kBAAkB30b,QAAQlB,KAC3B2C,KAAKgxrB,qBAAqB3zrB,KAAS0zrB,EAAMxvmB,KACzCvhF,KAAKoyb,aAAa5tb,KAAKqZ,EAAK4O,MAEvB5O,EAAK0jE,MACVvhF,KAAKqyb,YAAY7tb,KAAKqZ,EAAK4O,OAIvCzsB,KAAK40rB,WAAWj/mB,YAAY31E,KAAKoyb,cAAc,GAC/Cpyb,KAAK40rB,WAAW92Y,UAAU99S,KAAKqyb,cAEnC4hQ,EAAW54rB,UAAU21rB,qBAAuB,SAAUnzqB,GAClD,IAAI9d,EAAQC,KACRwkF,GAAS,EACb,OAAQ3mE,GACJ,IAAK,UACI7d,KAAKM,OAAOwmnB,eAAkB9mnB,KAAKM,OAAOq0pB,qBAAqBtoP,KAAUrsa,KAAK6wrB,cAC5E7wrB,KAAKM,OAAOm0nB,cAAc12jB,QAAQx/D,QAAQyB,KAAK6wrB,aAAa9kqB,QAAU,KACzEy4D,GAAS,GAEb,MACJ,IAAK,aACL,IAAK,UACDA,GAAUxkF,KAAKM,OAAOq0pB,qBAAqB+S,IAC3C,MACJ,IAAK,YACI1nqB,KAAKM,OAAOq0pB,qBAAqBtoP,KAAWrsa,KAAKM,OAAOq0pB,qBAAqBtoP,KAAUrsa,KAAK6wrB,cAC1F7wrB,KAAKM,OAAOm0nB,cAAc12jB,QAAQx/D,QAAQyB,KAAK6wrB,aAAa9kqB,OAAS,KACxEy4D,GAAS,GAEb,MACJ,IAAK,iBACL,IAAK,gBACGxkF,KAAKM,OAAOsmnB,cAAgB5mnB,KAAKM,OAAOq0pB,qBAAqBpuQ,KAC1DvmZ,KAAKM,OAAO0unB,aAAajxjB,QAAQthE,OAAS,GAAKuD,KAAK6wrB,aACvD7wrB,KAAKM,OAAO0unB,aAAajxjB,QAAQ3+D,QAAQ,SAAU4E,GAC3CA,EAAI+nB,QAAUhsB,EAAM8wrB,aAAa9kqB,OAC9B/nB,EAAIwxB,UAAU+lC,sBAAwB19C,EAAK09C,oBAAoBhsD,QAAQ,OAAQ,MAClFi1E,GAAS,KAIXxkF,KAAKM,OAAOsmnB,cAAiB5mnB,KAAKM,OAAOq0pB,qBAAqBpuQ,MACpE/hU,GAAS,GAEb,MACJ,IAAK,SACDA,IAAWxkF,KAAKM,OAAO60d,gBAAuD,cAApCn1d,KAAKM,OAAO2tnB,eAAevnnB,MAC9D1G,KAAKM,OAAOq0pB,qBAAqB/7B,KAEhD,OAAOp0iB,GAEXyvmB,EAAW54rB,UAAU85rB,oBAAsB,SAAUl1rB,GAEjD,OADWD,KAAK01rB,cAAcz1rB,EAAK4d,MAAQ,gBAAkB7d,KAAKszb,aAAarzb,EAAK4d,KAAKva,KAErF,IAAK,UACDtD,KAAKM,OAAO8wpB,eAAepxpB,KAAK6wrB,aAAa9kqB,OAC7C,MACJ,IAAK,aACD/rB,KAAKM,OAAO8wpB,mBACZ,MACJ,IAAK,UACDpxpB,KAAKM,OAAOm0pB,cAAcz0pB,KAAK6wrB,aAAa9kqB,OAC5C,MACJ,IAAK,QACD/rB,KAAKM,OAAOi0pB,YAAYv0pB,KAAK6wrB,aAAa9kqB,OAC1C,MACJ,IAAK,gBACD/rB,KAAKM,OAAOovpB,WAAW1vpB,KAAK6wrB,aAAa9kqB,MAAO,aAChD,MACJ,IAAK,iBACD/rB,KAAKM,OAAOovpB,WAAW1vpB,KAAK6wrB,aAAa9kqB,MAAO,cAChD,MACJ,IAAK,gBACD,IAAI1uB,EAAM2C,KAAKszb,aAAarzb,EAAK4d,KAAKva,GAAItD,KAAKy0rB,SAC3C94f,EAAW17L,EAAKe,QAAQ2B,cAAc,gCACtCg5L,GAAYA,EAAS73L,UAAUK,SAAS,YACxCw3L,EAAS73L,UAAUS,OAAO,WAC1BvE,KAAKM,OAAO2upB,YAAY5xpB,EAAK,UAExBs+L,IACL37L,KAAKM,OAAO0upB,YAAY3xpB,EAAK,SAC7Bs+L,EAAS73L,UAAUM,IAAI,YAE3B,MACJ,IAAK,SACDpE,KAAK41rB,UAAU31rB,EAAKe,QAASf,EAAK4d,KAAKva,IAG/CrD,EAAK48D,OAAS78D,KAAK6wrB,aACnB7wrB,KAAKM,OAAOkmB,QxFnCS,kBwFmCuBvmB,IAEhDg0rB,EAAW54rB,UAAUg6rB,kBAAoB,SAAUp1rB,GAE3CA,EAAKw6D,MAAMh+D,OAAS,GAAKwD,EAAKw6D,MAAM,GAAS,qBAAa+3X,KAC1Dxyb,KAAK40rB,WAAWj/mB,YAAY31E,KAAKoyb,cACjCpyb,KAAKoyb,gBACLpyb,KAAK40rB,WAAWh3Y,UAAU59S,KAAKqyb,aAC/Bryb,KAAKqyb,eACDryb,KAAK61rB,qBACL71rB,KAAK41rB,UAAU31rB,EAAKe,QAASf,EAAKe,QAAQsC,IAAI,KAI1D2wrB,EAAW54rB,UAAU63b,gBAAkB,WACnC,OAAQ,aAAc,UAAW,gBAAiB,iBAAkB,QAAS,UAAW,gBAAiB,WAE7G+gQ,EAAW54rB,UAAUs3O,SAAW,WAG5B,IAAK,IAFDl4K,KAEKr8D,EAAK,EAAG03rB,EADC91rB,KAAKM,OAAO0rpB,gBAAkBhspB,KAAKM,OAAO0rpB,gBAAkBhspB,KAAK+1rB,aACrC33rB,EAAK03rB,EAAcr5rB,OAAQ2B,IAAM,CAC3E,IAAIyf,EAAOi4qB,EAAc13rB,GACzB,GAAoB,iBAATyf,EACP,GAAa,kBAATA,EAA0B,CAC1B,IAAI4iD,EAAMzgE,KAAKg2rB,eAAen4qB,GAC9B4iD,EAAIhG,MAAQz6D,KAAKi2rB,qBACjBx7nB,EAAMj2D,KAAKi8D,QAGXhG,EAAMj2D,KAAKxE,KAAKg2rB,eAAen4qB,SAInC48C,EAAMj2D,KAAKqZ,GAGnB,OAAO48C,GAEXw5nB,EAAW54rB,UAAU26rB,eAAiB,SAAUn4qB,GAC5C,IAAIo2a,KACJ,OAAQp2a,GACJ,IAAK,gBACDo2a,GAAavgX,QAAS1zE,KAAKo0rB,WAC3B,MACJ,IAAK,iBACDngQ,GAAavgX,QAAS1zE,KAAKq0rB,YAC3B,MACJ,IAAK,QACDpgQ,GAAavgX,QAAS1zE,KAAKk0rB,OAC3B,MACJ,IAAK,UACDjgQ,GAAavgX,QAAS1zE,KAAKm0rB,SAC3B,MACJ,IAAK,SACDlgQ,GAAavgX,QAAS1zE,KAAKs0rB,QAOnC,OAJAt0rB,KAAKmyb,aAAat0a,IACd4O,KAAMzsB,KAAKwzb,cAAc31a,GAAOva,GAAItD,KAAKg0b,WAAWn2a,GACpD61D,QAASugX,EAASvgX,QAAU,WAAaugX,EAASvgX,QAAU,MAEzD1zE,KAAKmyb,aAAat0a,IAE7Bo2qB,EAAW54rB,UAAUm4b,cAAgB,SAAU31a,GAC3C,OAAO7d,KAAKqlH,KAAKtxC,YAAY/zE,KAAKu2I,WAAW14H,KAEjDo2qB,EAAW54rB,UAAU24b,WAAa,SAAUn2a,EAAMzY,GAC9C,OAAOpF,KAAKwwqB,OAAS,aAAeprqB,EAASA,EAASyY,EAAOA,IAEjEo2qB,EAAW54rB,UAAUi4b,aAAe,SAAUhwb,EAAI8B,GAC9C,OAAO9B,EAAG/E,QAAQ,aAAe,GAC7B+E,EAAGiM,QAAQvP,KAAKwwqB,OAAS,aAAeprqB,GAAkB,IAAK,KAEvE6urB,EAAW54rB,UAAUuwpB,cAAgB,WACjC,OAAO5rpB,KAAKgB,SAEhBizrB,EAAW54rB,UAAUkkC,cAAgB,WACjC,MAAO,cAEX00pB,EAAW54rB,UAAUi3b,aAAe,WAChC,OACI4+P,WAAc,aACdC,QAAW,UACX9kR,MAAS,QACTs7O,QAAW,UACXM,cAAiB,gBACjBC,eAAkB,iBAClByoB,cAAiB,gBACjB/3C,OAAU,eAGlBq7D,EAAW54rB,UAAU05rB,cAAgB,SAAUl0rB,GAC3C,OAAOgF,EAAQhF,EAAEsG,OAAQ,oBAE7B8srB,EAAW54rB,UAAUg9R,UAAY,WAC7B,GAAIr4R,KAAKkvqB,WAAY,CACjB,IAAIxvqB,EAAMM,KAAKkvqB,WAAWvsqB,cAAc,oBAAoBkQ,aAAa,gBACzE,OAAO7S,KAAKM,OAAOwhoB,eAAepioB,GAEtC,OAAO,MAEXu0rB,EAAW54rB,UAAU46rB,mBAAqB,WAEtC,IAAK,IADDx7nB,KACKr8D,EAAK,EAAGyE,EAAK7C,KAAKM,OAAO00nB,aAAc52nB,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAClE,IAAIqiE,EAAM59D,EAAGzE,GACTqiE,EAAIymjB,qBAAuBzmjB,EAAI10C,OAC/B0uC,EAAMj2D,MAAOlB,GAAItD,KAAKg0b,WAAWvzX,EAAI10C,MAAO/rB,KAAKy0rB,SAAUhoqB,KAAMg0C,EAAItC,WAAasC,EAAItC,WAAasC,EAAI10C,QAG/G,OAAO0uC,GAEXw5nB,EAAW54rB,UAAUo6rB,aAAe,SAAU50rB,GAE1C,GAAKb,KAAKmyb,aAAmB,OAA7B,CAII,IAAI90b,EAAM2C,KAAKmyb,aAAmB,OAAE7ub,GAChCuC,EAAQhF,EAAEsG,OAAQ,IAAM9J,KAAS2C,KAAK61rB,oBACtC71rB,KAAK41rB,UAAU/0rB,EAAEsG,OAAQ9J,IAEnBwI,EAAQhF,EAAEsG,OAAQ,IAAM9J,IAAQ2C,KAAK61rB,qBAC3C71rB,KAAK41rB,UAAU/0rB,EAAEsG,OAAQ9J,GAAK,KAI1C42rB,EAAW54rB,UAAUu6rB,UAAY,SAAUzurB,EAAQ7D,EAAIu8N,GACnD,IAAIq2d,EAAcl2rB,KAAKm2rB,eACnBD,EACAA,EAAYxxrB,MAAM4xC,SAAW9qC,GAAQkb,UAAYm5M,EAAU,OAAS,QAGpE7/N,KAAKM,OAAOyN,OAAOw2pB,IACf9jmB,IAAKzgE,KAAK6wrB,aAAc1prB,OAAQA,EAAQ04N,QAASA,EAASv8N,GAAIA,KAI1E2wrB,EAAW54rB,UAAUwd,YAAc,SAAU+3G,EAAIG,GAC7C,IAAIqlkB,EAAUp2rB,KAAKM,OAAOU,QAAQ4K,wBAC9ByqrB,EAAQzlkB,EAAGhlH,wBACXY,EAAO6prB,EAAM7prB,KAAO4prB,EAAQ5prB,KAC5BE,EAAM2prB,EAAM3prB,IAAM0prB,EAAQ1prB,IAC1B0prB,EAAQrgrB,OAASrJ,EACjBA,EAAMA,EAAMqkH,EAAGr/E,aAAe2kpB,EAAMtgrB,OAE/BqgrB,EAAQrgrB,OAASrJ,EAAMqkH,EAAGr/E,eAC/BhlC,EAAM0prB,EAAQrgrB,OAASg7G,EAAGr/E,cAE1B71C,OAAOyd,YAAcy3G,EAAGr/E,aAAehlC,EAAM0prB,EAAQ1prB,MACrDA,EAAM7Q,OAAOyd,YAAcy3G,EAAGr/E,aAAe0kpB,EAAQ1prB,KAEzDF,GAASxM,KAAKM,OAAO4S,WAAa69G,EAAGnsH,YAAcyxrB,EAAMrgrB,MACrDogrB,EAAQpgrB,OAASxJ,EAAOukH,EAAGnsH,YAC3B4H,GAAQ6prB,EAAMrgrB,MAAQ+6G,EAAGnsH,YAEpB4H,EAAO,IACZA,GAAQukH,EAAGnsH,YAAcyxrB,EAAMrgrB,OAEnC+6G,EAAGrsH,MAAMgI,IAAMA,EAAM,KACrBqkH,EAAGrsH,MAAM8H,KAAOA,EAAO,MAE3BynrB,EAAW54rB,UAAU65rB,eAAiB,SAAUr0rB,GAC5C,IAAIq1rB,EAAcl2rB,KAAKm2rB,eAEvB,GADAD,EAAYpyrB,UAAUM,IAAIpE,KAAKw0rB,OAC1BhprB,GAAQkb,SAAU,CACnB,IAAIu0mB,EAAOi7D,EAAYxxrB,MAAM4xC,QAC7B4/oB,EAAYxxrB,MAAMo7D,SAAW,kCAC7B,IAAI8wD,EAAK5wH,KAAKgB,QAAQ2B,cAAc,IAAM3C,KAAKs0rB,QAC3C1jkB,IACA5wH,KAAK6Y,YAAY+3G,EAAGv8G,cAAe6hrB,GACnCA,EAAYxxrB,MAAMo7D,SAAW,WAAam7jB,EAAO,yBAI7Dg5D,EAAW54rB,UAAU06rB,WAAa,WAC9B,IAAIt7nB,KAkBJ,OAjBIz6D,KAAKM,OAAOq0pB,qBAAqB+S,MACjCjtmB,EAAMj2D,KAAK,cACXi2D,EAAMj2D,KAAK,YAEXxE,KAAKM,OAAOwmnB,eAAiB9mnB,KAAKM,OAAOq0pB,qBAAqBtoP,MAC9D5xW,EAAMj2D,KAAK,SACXi2D,EAAMj2D,KAAK,YAEXxE,KAAKM,OAAOsmnB,cAAgB5mnB,KAAKM,OAAOq0pB,qBAAqBpuQ,MAC7D9rV,EAAMj2D,KAAK,iBACXi2D,EAAMj2D,KAAK,mBAEfi2D,EAAMj2D,KAAK,iBACPxE,KAAKM,OAAO60d,gBAAuD,cAApCn1d,KAAKM,OAAO2tnB,eAAevnnB,MAC1D1G,KAAKM,OAAOq0pB,qBAAqB/7B,KACjCn+jB,EAAMj2D,KAAK,UAERi2D,GAEXw5nB,EAAW54rB,UAAUw6rB,kBAAoB,WACrC,IAAIK,EAAcl2rB,KAAKm2rB,eACvB,OAAOD,GAA6C,SAA9BA,EAAYxxrB,MAAM4xC,SAE5C29oB,EAAW54rB,UAAU86rB,aAAe,WAChC,OAAOn2rB,KAAKM,OAAOU,QAAQ2B,cAAc,IAAM3C,KAAKu0rB,MAExDN,EAAW54rB,UAAU45rB,kBAAoB,WACrC,OAAQj1rB,KAAKM,OAAO0rpB,iBAChBhspB,KAAKM,OAAO0rpB,gBAAgBztpB,QAAQ,WAAa,IAAOyB,KAAKM,OAAO0rpB,iBAErEioC,KChgBP3pmB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAkBxC2rmB,GAA4B,SAAUnrmB,GAEtC,SAASmrmB,EAAWh2rB,EAAQghE,GACxB,IAAIvhE,EAAQorF,EAAO7pF,KAAKtB,KAAMM,EAAQghE,IAAmBthE,KAIzD,OAHAD,EAAMO,OAASA,EACfP,EAAMuhE,eAAiBA,EACvBvhE,EAAM2T,YACC3T,EAiHX,OAvHAuqF,GAAUgsmB,EAAYnrmB,GAQtBmrmB,EAAWj7rB,UAAUqY,UAAY,WACzB1T,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAOslF,GAAG0niB,GAAsBttnB,KAAKu2rB,sBAAuBv2rB,MACjEA,KAAKM,OAAOslF,GAAG2niB,GAAmBvtnB,KAAKutnB,kBAAmBvtnB,MAC1DA,KAAKM,OAAOslF,GAAG8qP,GAAe1wU,KAAKw2rB,sBAAuBx2rB,QAE9Ds2rB,EAAWj7rB,UAAUk7rB,sBAAwB,SAAUx4nB,GACnDA,EAAQ3+D,QAAQ,SAAUy9D,GACtBA,EAAO0G,WAAc1G,EAAO0G,sBAAsBC,GAAc3G,EAAO0G,WAClE9lE,EAAkBo/D,EAAO0G,YAAc,IAAIC,GAAgB,IAAIA,GAAY3G,EAAO0G,eAG/F+ynB,EAAWj7rB,UAAUkynB,kBAAoB,SAAUttnB,GAC/C,IAAIF,EAAQC,KACRy2rB,EAAiBx2rB,EAAK48D,QAAU58D,EAAK48D,QAAU78D,KAAKM,OAAOgxnB,uBAC3DU,KACJykE,EAAer3rB,QAAQ,SAAUqhE,GAC7B,IAAIozH,EACAn4H,EAAQz7D,EAAK8wJ,UAAYhxJ,EAAM22rB,oBAAoBj2nB,GACnD1gE,EAAM42rB,cAAcl2nB,EAAKxgE,EAAKlB,OAAOA,QAAQ,GAAO,GACpDwkE,EAAa9C,EAAI8C,WAEjBswH,GADCtwH,EAAWlhE,OAASkhE,EAAWA,WAAWE,QACjCF,EAAWmrF,aAAahzF,GAGxB6H,EAAWlhE,MAAMixL,KAAK,WAC5B,OAAO/vH,EAAWmrF,aAAahzF,KAGvCs2jB,EAAWxtnB,KAAKqvL,KAEpBjxG,QAAQgyG,IAAIo9b,GAAY1+b,KAAK,SAAUsjgB,GACnCA,EAAUx3rB,QAAQ,SAAU5C,EAAMyV,GAC9BwkrB,EAAexkrB,GAAO0xD,WAAannE,EAAKuC,SAE5CkB,EAAK4zL,QAAQhxG,QAAQ5iF,EAAKlB,UAC3B41L,MAAM,SAAU9zL,GAIf,OAHIZ,EAAK4zL,SAAW5zL,EAAK4zL,QAAQ/wG,QAC7B7iF,EAAK4zL,QAAQ/wG,OAAOjiF,GAEjBA,KAGfy1rB,EAAWj7rB,UAAUm7rB,sBAAwB,SAAUv2rB,GACnDA,EAAKk9D,UAAUA,UAAYn9D,KAAK22rB,cAAc12rB,EAAK48D,OAAQ58D,EAAK48D,OAAO8G,YAAY,IAEvF2ynB,EAAWj7rB,UAAUs7rB,cAAgB,SAAU95nB,EAAQh8D,EAAGg2rB,EAAUC,GAChE,IAAI9iE,EAAOh0nB,KAAKM,OACZ4wJ,KAEAx1F,EAAQ,IAAI2H,GACZt3C,EAAQ8qqB,EAAWh6nB,EAAOwB,gBAAkBxB,EAAO9wC,MACvD,GAAIiomB,EAAKQ,aAAeR,EAAKz3b,sBAAwBs6f,EAAU,CAC3Dh2rB,EAAI,IAAI2iE,GAAcwwjB,EAAKlN,eAAiBkN,EAAKS,cAAc12jB,QAAQthE,OACnEoE,EAAE6xJ,QAAU7xJ,GAAIojE,cAAa,IAAIZ,IAAQ59D,OAAOsmB,IACpD,IAAI4xoB,EAAgBl+lB,GAASg1F,SAAS5zJ,EAAGkrB,GAAO,GAChDA,EAAQ8qqB,EAAWh6nB,EAAO9wC,MAAQ8wC,EAAOwB,gBACzCs/lB,EAAcv+pB,QAAQ,SAAUrC,GACxBA,GAAOA,EAAI6mE,OACXstF,EAAW1sJ,KAAKs/D,IAAmB/3C,MAAOA,EAAOg4C,SAAU,QAAS/mE,MAAOD,EAAKinE,WAAW,KAG3FktF,EAAW1sJ,KAAK,IAAImgE,GAAU54C,EAAO,QAAShvB,GAAK,MAI/D,OAAI+5rB,EACO5liB,EAAWz0J,OAASi/D,EAAMmI,MAAMc,GAAUG,GAAGosF,IAAex1F,EAE1Dw1F,EAAWz0J,OAASkoE,GAAUG,GAAGosF,IAAgBA,gBAGlEoliB,EAAWj7rB,UAAUq7rB,oBAAsB,SAAU75nB,GACjD,IAAIm3jB,EAAOh0nB,KAAKM,OACZo7D,EAAQs4jB,EAAKt4jB,MAAMr8D,QAEnB03rB,EAAc/2rB,KAAKs9d,WAAWzga,GAIlC,GAHIk6nB,EAAYC,SACZt7nB,EAAQ17D,KAAKk5d,YAAYx9Z,EAAOq7nB,EAAYl6nB,QAAQ,IAEpDm3jB,EAAKe,eAAe13nB,IAAIZ,OAAQ,CAChC,IAAIq4nB,EAAYd,EAAKe,eACrBr5jB,EAAM0zF,OAAO0le,EAAUz3nB,IAAKw/D,EAAOuB,gBAAiB02jB,EAAU/wjB,SAAU+wjB,EAAUn6jB,YAEtF,OAAOe,GAEX46nB,EAAWj7rB,UAAUiie,WAAa,SAAUzga,GACxC,IAAIo6nB,EAAej3rB,KAAKM,OAAO2tnB,eAAelwjB,QAAQ/2B,OAAO,SAAU6koB,GACnE,OAAQA,EAAQ9/oB,QAAU8wC,EAAOuB,kBAErC,OACIvB,OAAQo6nB,EAAcD,SAAUC,EAAax6rB,SAGrD65rB,EAAWj7rB,UAAUkkC,cAAgB,WACjC,MAAO,cAEX+2pB,EAAWj7rB,UAAUiX,QAAU,WAC3B64E,EAAO9vF,UAAUiX,QAAQhR,KAAKtB,MAC9BA,KAAKk3rB,gBAETZ,EAAWj7rB,UAAU67rB,aAAe,WAC5Bl3rB,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAO0lF,IAAIsniB,GAAsBttnB,KAAKu2rB,uBAC3Cv2rB,KAAKM,OAAO0lF,IAAIuniB,GAAmBvtnB,KAAKutnB,mBACxCvtnB,KAAKM,OAAO0lF,IAAI0qP,GAAe1wU,KAAKw2rB,yBAEjCF,GACTpiX,IC1IFijX,GAAW/qlB,OAAQgrlB,GAAaC,GAAWnmT,GAAgBomT,GAAWC,GAAYC,GAAcC,GAAYC,GAAgBC,GAAcC,GAAgBngF,GAAaogF,GAAoBC,GAAWC,GAAaC,GAAkBC,GAAgBC,GAAoBrgF,GAAkBsgF,GAAaC,GAAiBC,GAAoBC,QCElUnja,klC3FFU,mBAEE,eAEL,oBAEQ,0VA0CD,+DAMC,wEAQE,mCAEG,oCAEF,4BAEN,qBAED,oBAEA,kBAEF,mBAEG,oBAEF,4BAEU,gCAEN,wEAMA,uBAEH,sBAEE,4BAEI,4BAEJ,6FAOO,4LAyBR,yCAIA,4CAIE,gDAIA,iDAIC,uDAIO,4DAIT,+CAIE,wDAIK,oCAEG,mCAEA,0CAEG,oCAEL,iJAgBZ,uEAMQ,sHAYC,iFAQP,iEAQC,0BAEG,yBAEJ,wBAEG,2CAIA,iJAgBM,8DAIC,iEAIH,wDAIC,6DAID,oCAEC,iDAIH,gCAEE,kCAEA,iCAED,uKAgBA,40C4FjSxB7qM,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAM5D+/R,GAAsB,SAAUxxO,GAEhC,SAASwxO,IACL,OAAkB,OAAXxxO,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAuB/D,OAzBAsqF,GAAUqyO,EAAMxxO,GAIhBN,IACI3jF,EAAS,SACVy1T,EAAKthU,UAAW,YAAQ,GAC3BwvF,IACI3jF,EAAS,KACVy1T,EAAKthU,UAAW,aAAS,GAC5BwvF,IACI3jF,EAAS,aACVy1T,EAAKthU,UAAW,kBAAc,GACjCwvF,IACI3jF,EAAS,WACVy1T,EAAKthU,UAAW,kBAAc,GACjCwvF,IACI3jF,EAAS,WACVy1T,EAAKthU,UAAW,iBAAa,GAChCwvF,IACI3jF,EAAS,WACVy1T,EAAKthU,UAAW,qBAAiB,GACpCwvF,IACI3jF,EAAS,SACVy1T,EAAKthU,UAAW,oBAAgB,GAC5BshU,GACT39P,IAKE89P,GAAwB,SAAU3xO,GAElC,SAAS2xO,IACL,OAAkB,OAAX3xO,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAc/D,OAhBAsqF,GAAUwyO,EAAQ3xO,GAIlBN,IACI3jF,EAAS,KACV41T,EAAOzhU,UAAW,YAAQ,GAC7BwvF,IACI3jF,EAAS,KACV41T,EAAOzhU,UAAW,aAAS,GAC9BwvF,IACI3jF,EAAS,KACV41T,EAAOzhU,UAAW,WAAO,GAC5BwvF,IACI3jF,EAAS,KACV41T,EAAOzhU,UAAW,cAAU,GACxByhU,GACT99P,IAKE49P,GAAwB,SAAUzxO,GAElC,SAASyxO,IACL,OAAkB,OAAXzxO,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbAsqF,GAAUsyO,EAAQzxO,GAIlBN,IACI3jF,EAAS,KACV01T,EAAOvhU,UAAW,aAAS,GAC9BwvF,IACI3jF,EAAS,IACV01T,EAAOvhU,UAAW,aAAS,GAC9BwvF,IACI3jF,EAAS,KACV01T,EAAOvhU,UAAW,cAAU,GACxBuhU,GACT59P,IAKE63T,GAAuB,SAAU1rS,GAEjC,SAAS0rS,IACL,OAAkB,OAAX1rS,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVAsqF,GAAUusS,EAAO1rS,GAIjBN,IACI3jF,EAAS,KACV2vX,EAAMx7X,UAAW,YAAQ,GAC5BwvF,IACI9iF,KAAY40T,KACbk6D,EAAMx7X,UAAW,iBAAa,GAC1Bw7X,GACT73T,IAKEu5nB,GAAmC,SAAUptmB,GAE7C,SAASotmB,IACL,OAAkB,OAAXptmB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbAsqF,GAAUiumB,EAAmBptmB,GAI7BN,IACI3jF,EAAS,OACVqxrB,EAAkBl9rB,UAAW,aAAS,GACzCwvF,IACI3jF,EAAS,OACVqxrB,EAAkBl9rB,UAAW,aAAS,GACzCwvF,IACI3jF,EAAS,OACVqxrB,EAAkBl9rB,UAAW,aAAS,GAClCk9rB,GACTv5nB,IAKEw5nB,GAAiC,WAKjC,OAJA,SAAyBx7rB,EAAOw5B,GAC5Bx2B,KAAKhD,MAAQA,EACbgD,KAAKw2B,MAAQA,MAQjBiiqB,GAAuC,WAOvC,OANA,SAA+Bz7rB,EAAOw5B,EAAOnjB,EAAO86G,GAChDnuH,KAAKhD,MAAQA,EACbgD,KAAKw2B,MAAQA,EACbx2B,KAAKqT,MAAQA,EACbrT,KAAKmuH,SAAWA,MCpJpB7jC,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAQ5D87pB,GAAiC,SAAUvtmB,GAE3C,SAASutmB,IACL,OAAkB,OAAXvtmB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbAsqF,GAAUoumB,EAAiBvtmB,GAI3BN,IACIxiF,OAAiBkwrB,KAClBG,EAAgBr9rB,UAAW,eAAW,GACzCwvF,IACI3jF,EAAS,aACVwxrB,EAAgBr9rB,UAAW,YAAQ,GACtCwvF,IACI3jF,EAAS,KACVwxrB,EAAgBr9rB,UAAW,uBAAmB,GAC1Cq9rB,GACT15nB,IAKE2H,GAA0B,WAM1B,OALA,SAAkB/pC,EAAGC,EAAGC,GACpB98B,KAAK4mE,EAAIhqC,EACT58B,KAAK6mE,EAAIhqC,EACT78B,KAAK8mE,EAAIhqC,MAKb67pB,GAA2B,WAC3B,SAASA,EAAUC,GACf54rB,KAAK44rB,QAAUA,EA4MnB,OArMAD,EAAUt9rB,UAAUw9rB,aAAe,SAAU77rB,EAAO0jF,GAGhD,IAAK,IAFDo4mB,EAAiBp4mB,EAAa,GAAG1jF,MACjCk+d,EAAa,EACR/+d,EAAI,EAAGA,EAAIukF,EAAajkF,OAAQN,IAAK,CAC1C,IAAIwP,EAAS2rB,OAAOopD,EAAavkF,GAAGa,OACpC,GAAIA,GAAS2O,EAAQ,CACjBuvd,EAAavvd,EACb,MAGAuvd,EAAavvd,EACbmtrB,EAAiBntrB,EAGzB,IAAI4mU,EAAU,EAEdA,GAAWv1U,EAAQ87rB,IADR59N,EAAa49N,GAExB,IAAIC,EAAgB/4rB,KAAKg5rB,cAAct4mB,EAAco4mB,GACjDG,EAAYj5rB,KAAKg5rB,cAAct4mB,EAAcw6Y,GACjD,OAAOl7d,KAAKk5rB,mBAAmB3mX,EAASwmX,EAAeE,IAO3DN,EAAUt9rB,UAAUguJ,SAAW,SAAUzsH,EAAGC,EAAGC,GAC3C,MAAO,IAAM98B,KAAK28B,eAAeC,GAAK58B,KAAK28B,eAAeE,GAAK78B,KAAK28B,eAAeG,IAOvF67pB,EAAUt9rB,UAAUshC,eAAiB,SAAUshC,GAC3C,IAAIlhC,EAAMkhC,EAAE/wD,SAAS,IACrB,OAAsB,IAAf6vB,EAAItgC,OAAe,IAAMsgC,EAAMA,GAO1C47pB,EAAUt9rB,UAAU29rB,cAAgB,SAAUn2lB,EAAMl3F,GAChD,IAAK,IAAIxP,EAAI,EAAGA,EAAI0mG,EAAKpmG,OAAQN,IAC7B,GAAIm7B,OAAOurE,EAAK1mG,GAAGa,SAAW2O,EAAQ,CAClC,IAAI6qB,EAAQqsE,EAAK1mG,GAAGq6B,MAOpB,OAN8B,IAA1BA,EAAMj4B,QAAQ,OACdi4B,EAAQx2B,KAAKm5rB,aAAa3iqB,IAEG,IAAxBA,EAAMj4B,QAAQ,OACnBi4B,EAAQ,WAELA,EAGf,MAAO,UAOXmiqB,EAAUt9rB,UAAU89rB,aAAe,SAAU3iqB,GACzC,IAAI4iqB,EAAY5iqB,EAAMQ,OAAO,GAEzBqiqB,GADJD,EAAYA,EAAUl8rB,MAAM,KAAK,GAAGA,MAAM,KAAK,IACpBA,MAAM,KAEjC,OADAk8rB,EAAYp5rB,KAAKqpJ,SAASt0H,SAASskqB,EAAW,GAAI,IAAKtkqB,SAASskqB,EAAW,GAAI,IAAKtkqB,SAASskqB,EAAW,GAAI,MAQhHV,EAAUt9rB,UAAU69rB,mBAAqB,SAAU3mX,EAAShoM,EAAUjiG,GAClE,IAAI2wpB,EAAY3wpB,EAAKprC,MAAM,KAAK,GAC5Bo8rB,EAAY/ujB,EAASrtI,MAAM,KAAK,GAChC0/B,EAAI58B,KAAKu5rB,cAAchnX,EAASx9S,SAASukqB,EAAUtiqB,OAAO,EAAG,GAAI,IAAKjC,SAASkkqB,EAAUjiqB,OAAO,EAAG,GAAI,KACvG6F,EAAI78B,KAAKu5rB,cAAchnX,EAASx9S,SAASukqB,EAAUtiqB,OAAO,EAAG,GAAI,IAAKjC,SAASkkqB,EAAUjiqB,OAAO,EAAG,GAAI,KACvG8F,EAAI98B,KAAKu5rB,cAAchnX,EAASx9S,SAASukqB,EAAUtiqB,OAAO,EAAG,GAAI,IAAKjC,SAASkkqB,EAAUjiqB,OAAO,EAAG,GAAI,KAC3G,OAAO,IAAI2vC,GAAS/pC,EAAGC,EAAGC,IAO9B67pB,EAAUt9rB,UAAUk+rB,cAAgB,SAAUhnX,EAAShoM,EAAUjiG,GAC7D,IAAIq3D,EAAOr3D,EAAOiiG,EAClB,OAAOl+H,KAAKoxB,MAAO8sG,EAAY5qC,EAAO4yO,IAM1ComX,EAAUt9rB,UAAUm+rB,mBAAqB,WACrCx5rB,KAAK44rB,QAAQa,mBACbz5rB,KAAK44rB,QAAQc,yBACb,IAAI3nqB,EACJ/xB,KAAK44rB,QAAQe,gBAAkB35rB,KAAK44rB,QAAQgB,gBAAgBD,gBAAkB35rB,KAAK44rB,QAAQgB,gBAAgBD,gBACvG35rB,KAAK44rB,QAAQviqB,WAAWwjqB,eAC5B,IAAIC,EAAmB95rB,KAAK+5rB,cAAc/5rB,KAAK44rB,QAAQgB,gBAAgB9qqB,SAAW9uB,KAAK44rB,QAAQgB,gBAAgB9qqB,QAAQryB,OAAS,EAC5HuD,KAAK44rB,QAAQgB,gBAAgB9qqB,QAAU9uB,KAAK44rB,QAAQviqB,WAAWvH,SACnE,GAAKgrqB,EAAiBE,UAelBh6rB,KAAK44rB,QAAQa,gBAAkBK,EAAiBv0b,QAChDvlQ,KAAK44rB,QAAQc,sBAAwBh7rB,KAAWo7rB,EAAiBv0b,QAAS,MAAM,QAThF,GALIxzO,EADsC,aAAtC/xB,KAAK44rB,QAAQgB,gBAAgBlzrB,MACpB1G,KAAK44rB,QAAQqB,mBAAqBj6rB,KAAK44rB,QAAQsB,qBAAuBJ,EAAiBv0b,QAAQ9oQ,OAAS,IAGxGuD,KAAK44rB,QAAQqB,mBAAqBj6rB,KAAK44rB,QAAQsB,oBAAuBJ,EAAiBv0b,QAAc,OAE9Gu0b,EAAiBv0b,QAAQ9oQ,QAAU,EACnC,IAAK,IAAIwV,EAAQ,EAAGA,EAAQ6nrB,EAAiBv0b,QAAQ9oQ,OAAQwV,IACzDjS,KAAK44rB,QAAQa,gBAAgBj1rB,KAAK,IAAIg0rB,GAAgBnsrB,KAAKoxB,MAA8D,KAAtDz9B,KAAK44rB,QAA0B,mBAAK3mrB,EAAQ8f,IAAiB,IAAK+nqB,EAAiBv0b,QAAQtzP,GAAOukB,QACrKx2B,KAAK44rB,QAAQc,sBAAsBl1rB,KAAK,IAAIi0rB,GAAsBpsrB,KAAKoxB,MAA8D,KAAtDz9B,KAAK44rB,QAA0B,mBAAK3mrB,EAAQ8f,IAAiB,IAAK+nqB,EAAiBv0b,QAAQtzP,GAAOukB,MAAOsjqB,EAAiBv0b,QAAQtzP,GAAOoB,OAAO,IAQ3OrT,KAAKm6rB,+BAMTxB,EAAUt9rB,UAAU8+rB,4BAA8B,WAC1Cn6rB,KAAK44rB,QAAQsB,mBAAqBl6rB,KAAK44rB,QAAQc,sBAAsB,GAAG18rB,OACxEgD,KAAK44rB,QAAQc,sBAAsBx+rB,QAAQ,IAAIu9rB,GAAsBz4rB,KAAK44rB,QAAQsB,mBAAoBl6rB,KAAK44rB,QAAQc,sBAAsB,GAAGljqB,MAAOx2B,KAAK44rB,QAAQc,sBAAsB,GAAGrmrB,OAAO,IAEhMrT,KAAK44rB,QAAQqB,mBAAqBj6rB,KAAK44rB,QAAQc,sBAAsB15rB,KAAK44rB,QAAQc,sBAAsBj9rB,OAAS,GAAGO,OACpHgD,KAAK44rB,QAAQc,sBAAsBl1rB,KAAK,IAAIi0rB,GAAsBz4rB,KAAK44rB,QAAQqB,mBAAoBj6rB,KAAK44rB,QAAQc,sBAAsB15rB,KAAK44rB,QAAQc,sBAAsBj9rB,OAAS,GAAG+5B,MAAOx2B,KAAK44rB,QAAQc,sBAAsB15rB,KAAK44rB,QAAQc,sBAAsBj9rB,OAAS,GAAG4W,OAAO,KAO7RslrB,EAAUt9rB,UAAU0+rB,cAAgB,SAAUx0b,GAC1C,IAAI60b,EAAmB,IAAIC,GAiB3B,OAfAD,EAAiBJ,WAAY,EAE7BI,EAAiB70b,QAAUA,EAAQ1tO,KAAK,SAAUsrB,EAAGrmB,GACjD,OAAKr/B,EAAkB0lD,EAAK,QAAO1lD,EAAkBq/B,EAAK,QAItDs9pB,EAAiBJ,WAAY,EACtB72oB,GAJAA,EAAK,MAAIrmB,EAAK,QAOxBs9pB,EAAiBJ,YAClBI,EAAiB70b,QAAUvlQ,KAAK44rB,QAAQgB,gBAAgB9qqB,SAAW9uB,KAAK44rB,QAAQgB,gBAAgB9qqB,QAAQryB,OAAS,EAC7GuD,KAAK44rB,QAAQgB,gBAAgB9qqB,QAAU9uB,KAAK44rB,QAAQviqB,WAAWvH,SAEhEsrqB,GAMXzB,EAAUt9rB,UAAUi/rB,gBAAkB,SAAU7tqB,GAC5C,IACI8tqB,EADA/jqB,EAAQ,GAERgkqB,EAAe,EACnB,GAAwB,KAApB/tqB,EAAKvf,WACL,GAA0C,UAAtClN,KAAK44rB,QAAQgB,gBAAgBlzrB,MAC7B,IAAK,IAAIsG,EAAI,EAAGA,EAAIhN,KAAK44rB,QAAQa,gBAAgBh9rB,OAAQuQ,IAGrD,GAFAwtrB,EAAex6rB,KAAK44rB,QAAQa,gBAAgBzsrB,EAAI,GAAKhN,KAAK44rB,QAAQa,gBAAgBzsrB,EAAI,GAAGhQ,MACrFgD,KAAK44rB,QAAQa,gBAAgBzsrB,GAAGhQ,MAChCyvB,EAAO+tqB,GAAiB/tqB,GAAQ+tqB,GAAgBxtrB,IAAMhN,KAAK44rB,QAAQa,gBAAgBh9rB,OAAS,EAAI,CAChG+5B,EAAQx2B,KAAK44rB,QAAQa,gBAAgBzsrB,GAAGwpB,MACxC,YAKJ/J,EAAOzsB,KAAK44rB,QAAQa,gBAAgB,GAAGz8rB,MACvCw5B,EAAQx2B,KAAK44rB,QAAQa,gBAAgB,GAAGjjqB,MAEnC/J,EAAOzsB,KAAK44rB,QAAQa,gBAAgBz5rB,KAAK44rB,QAAQa,gBAAgBh9rB,OAAS,GAAGO,MAClFw5B,EAAQx2B,KAAK44rB,QAAQa,gBAAgBz5rB,KAAK44rB,QAAQa,gBAAgBh9rB,OAAS,GAAG+5B,OAG9E+jqB,EAAMv6rB,KAAK64rB,aAAapsqB,EAAMzsB,KAAK44rB,QAAQa,iBAC3CjjqB,EAAQx2B,KAAKqpJ,SAASkxiB,EAAI3znB,EAAG2znB,EAAI1znB,EAAG0znB,EAAIzznB,SAKhDtwC,EAAQx2B,KAAK44rB,QAAQe,gBAEzB,OAAOnjqB,GAEJmiqB,KtiBjQPrumB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GA+CxC73B,GAA6B,WAQ7B,OAPA,SAAqB2noB,EAAWnwM,GAC5Btqf,KAAK,aAAey6rB,EAAU3tqB,KAC9B9sB,KAAK,cAAgBy6rB,EAAUztqB,UAC/BhtB,KAAK,eAAiBy6rB,EAAUxtqB,WAChCjtB,KAAK,eAAiBy6rB,EAAU1tqB,WAChC/sB,KAAK49B,KAAO0sd,GAAwB,OAqBxCl9d,GAAsB,WAKtB,OAJA,SAAcpX,EAAOD,GACjB/V,KAAKgW,MAAQA,EACbhW,KAAK+V,OAASA,MAMlB+rR,GAAiC,WAIjC,OAHA,SAAyBx+R,GACrBtD,KAAKsD,GAAKA,MAMd8yB,GAA4B,SAAU+0D,GAEtC,SAAS/0D,EAAW9yB,EAAIs6B,EAAM5nB,EAAOwgB,EAAO/oB,EAASqkC,EAAWvjB,GAC5D,IAAIxuB,EAAQorF,EAAO7pF,KAAKtB,KAAMsD,IAAOtD,KAOrC,OANAD,EAAM0N,QAAUA,EAChB1N,EAAM69B,KAAOA,EACb79B,EAAM+9B,OAAStH,GAAgB,GAC/Bz2B,EAAM,gBAAkBiW,EACxBjW,EAAM,oBAAsB+xC,EAC5B/xC,EAAMwuB,EAAIA,EACHxuB,EAEX,OAXAuqF,GAAUl0D,EAAY+0D,GAWf/0D,GACT0rQ,IAME44Z,GAA6B,WAS7B,OARA,SAAqB3trB,EAAGC,EAAGgJ,EAAOD,EAAQ/Y,EAAOsG,GAC7CtD,KAAK+M,EAAIA,EACT/M,KAAKgN,EAAIA,EACThN,KAAKgW,MAAQA,EACbhW,KAAK+V,OAASA,EACd/V,KAAKhD,MAAQA,EACbgD,KAAKsD,GAAKA,MASd4gU,GAA4B,SAAU/4O,GAEtC,SAAS+4O,EAAW5gU,EAAIs6B,EAAM0G,EAAQ72B,EAAS4lB,EAAM8hT,EAAahnT,EAAIC,EAAI/gB,EAAWykC,GACjF,IAAI/xC,EAAQorF,EAAO7pF,KAAKtB,KAAMsD,EAAIs6B,EAAM0G,EAAOtuB,MAAOm/T,EAAa1nU,EAASqkC,IAAc9xC,KAQ1F,OAPAD,EAAMiN,EAAIqmB,EAAKrmB,EACfjN,EAAMgN,EAAIsmB,EAAKtmB,EACfhN,EAAMgW,OAASsd,EAAKtd,OACpBhW,EAAMiW,MAAQqd,EAAKrd,MACnBjW,EAAMouB,GAAKA,GAAU,EACrBpuB,EAAMquB,GAAKA,GAAU,EACrBruB,EAAMsN,UAAYA,GAAwB,GACnCtN,EAEX,OAZAuqF,GAAU45O,EAAY/4O,GAYf+4O,GACT9tS,IAMEF,GAAsB,WAOtB,OANA,SAAcnpB,EAAGC,EAAGgJ,EAAOD,GACvB/V,KAAK+M,EAAIA,EACT/M,KAAKgN,EAAIA,EACThN,KAAKgW,MAAQA,EACbhW,KAAK+V,OAASA,MASlBwgB,GAA4B,SAAU40D,GAEtC,SAAS50D,EAAWjzB,EAAIq3rB,EAAO35rB,EAASspf,GACpC,IAAIvqf,EAAQorF,EAAO7pF,KAAKtB,KAAMgB,EAASspf,IAActqf,KAcrD,OAbAD,EAAMsN,UAAY,GAClBtN,EAAM,qBAAuB,OAC7BA,EAAMsvF,cAAgB,EACtBtvF,EAAMovF,SAAW,OACjBpvF,EAAMuD,GAAKA,EACXvD,EAAMgN,EAAI4trB,EAAM5trB,EAChBhN,EAAMiN,EAAI2trB,EAAM3trB,EAChBjN,EAAM,eAAiB46rB,EAAM,eAC7B56rB,EAAM0sB,KAAOkuqB,EAAMluqB,KACnB1sB,EAAMsN,UAAYstrB,EAAMttrB,UACxBtN,EAAMsvF,cAAgBsrmB,EAAMtrmB,cAC5BtvF,EAAM,qBAAuB46rB,EAAM,qBACnC56rB,EAAMovF,SAAWwrmB,EAAMxrmB,SAChBpvF,EAEX,OAlBAuqF,GAAU/zD,EAAY40D,GAkBf50D,GACTu8B,IAME8noB,GAA2B,WAe3B,OAdA,SAAmB7trB,EAAGC,EAAG6G,EAAQ4Y,EAAM4iE,EAAehiF,EAAW8xB,GAC7Dn/B,KAAKqN,UAAY,GACjBrN,KAAK,qBAAuB,OAC5BA,KAAKqvF,cAAgB,EACrBrvF,KAAKmvF,SAAW,OAChBnvF,KAAK+M,EAAIA,GAAQ,EACjB/M,KAAKgN,EAAIA,GAAQ,EACjBhN,KAAK,eAAiB6T,GAAkB,GACxC7T,KAAKysB,KAAOA,GAAc,GAC1BzsB,KAAKqN,UAAYA,GAAwB,GACzCrN,KAAKqvF,cAAgBA,EACrBrvF,KAAK,qBAAuBm/B,GAAsB,GAClDn/B,KAAKmvF,SAAWhwD,GAAsB,OAS1C+0W,GAAsB,WAOtB,OANA,SAAcl5W,EAAIC,EAAIC,EAAIC,GACtBn7B,KAAKg7B,GAAKA,EACVh7B,KAAKi7B,GAAKA,EACVj7B,KAAKk7B,GAAKA,EACVl7B,KAAKm7B,GAAKA,MASd0/pB,GAA4B,SAAU1vmB,GAEtC,SAAS0vmB,EAAWv3rB,EAAIwqD,EAAMhwB,EAAQg9pB,EAAartrB,EAASstrB,GACxD,IAAIh7rB,EAAQorF,EAAO7pF,KAAKtB,KAAMsD,EAAI,KAAMw3rB,EAAah9pB,EAAQrwB,EAASstrB,EAAW,OAAS/6rB,KAK1F,OAJAD,EAAMi7B,GAAK8yB,EAAK9yB,GAChBj7B,EAAMk7B,GAAK6yB,EAAK7yB,GAChBl7B,EAAMm7B,GAAK4yB,EAAK5yB,GAChBn7B,EAAMo7B,GAAK2yB,EAAK3yB,GACTp7B,EAEX,OATAuqF,GAAUuwmB,EAAY1vmB,GASf0vmB,GACTzkqB,IAkDE4kqB,GAA+B,WAC/B,SAASA,EAAcC,GACnBj7rB,KAAK44rB,QAAUqC,EAgLnB,OA7KAD,EAAc3/rB,UAAUsoC,cAAgB,SAAU1gC,EAAYoR,GACrDrU,KAAK44rB,QAAQsC,sBAIdl7rB,KAAKm7rB,oBAAoBn7rB,KAAK44rB,QAAQwC,eAAgBn4rB,GAHtDoR,EAAc1S,YAAY3B,KAAK44rB,QAAQ/qqB,SAAS8V,cAAc1gC,KAOtE+3rB,EAAc3/rB,UAAU+1B,WAAa,SAAUnuB,EAAYoR,EAAeoY,GACjEzsB,KAAK44rB,QAAQsC,sBAIdl7rB,KAAKq7rB,eAAep4rB,EAAYwpB,GAHhCpY,EAAc1S,YAAY3B,KAAK44rB,QAAQ/qqB,SAASuD,WAAWnuB,EAAYwpB,KAO/EuuqB,EAAc3/rB,UAAUigsB,eAAiB,SAAUtorB,EAAS0Z,EAAMrY,GAC9D,IACIsY,EACAqS,EACAvS,EACA1W,EAJAkpB,KAyBJ,GApBAA,GACI37B,GAAM0P,EAAQ1P,GACdyJ,EAAKiG,EAAQjG,EACbC,EAAKgG,EAAQhG,EACb4wB,KAAQ5qB,EAAQ4qB,KAChB7M,YAAarE,EAAKI,KAClBkE,aAActE,EAAKM,UACnBiE,cAAevE,EAAKO,WACpBiE,cAAexE,EAAKK,WACpBoE,cAAene,EAAQ,eACvB3F,UAAa2F,EAAQ3F,UACrB6xB,oBAAqBlsB,EAAQ,sBAEjCyZ,EAAOzZ,EAAQyZ,KAAK,GACfzsB,KAAK44rB,QAAQsC,sBAIdl7rB,KAAK44rB,QAAQwC,eAAelsmB,SAASl8E,EAASyZ,GAH9CE,EAAa3sB,KAAK44rB,QAAQ/qqB,SAASuD,WAAW6N,EAAexS,GAKrC,iBAAjBzZ,EAAQyZ,MAAqBzZ,EAAQyZ,KAAKhwB,OAAS,EAC1D,IAAK,IAAIN,EAAI,EAAG0F,EAAMmR,EAAQyZ,KAAKhwB,OAAQN,EAAI0F,EAAK1F,IAChD4Z,EAAUyW,GAAYxZ,EAAQyZ,KAAKtwB,GAAIuwB,GAAY,OAC9C1sB,KAAK44rB,QAAQsC,uBAQdlorB,EAAQ1P,GAAK0P,EAAQ1P,GAAKnH,EAC1B6W,EAAQhG,GAAK+I,EACb/V,KAAK44rB,QAAQwC,eAAelsmB,SAASl8E,EAASA,EAAQyZ,KAAKtwB,MAT3D6iC,EAAeh/B,KAAK44rB,QAAQ/qqB,SAASuR,aACjCryB,EAAKiG,EAAQjG,EAAGzJ,GAAM0P,EAAQ1P,GAAKnH,EACnC6Q,EAAMgG,EAAS,EAAK7W,EAAI4Z,GACzB/C,EAAQyZ,KAAKtwB,IAChBwwB,EAAWhrB,YAAYq9B,IAS9Bh/B,KAAK44rB,QAAQsC,uBACd7mrB,EAAc1S,YAAYgrB,IAGlCquqB,EAAc3/rB,UAAUmyF,SAAW,SAAUvqF,EAAYoR,GAChDrU,KAAK44rB,QAAQsC,sBAIdl7rB,KAAK44rB,QAAQwC,eAAe5tmB,SAASvqF,GAHrCoR,EAAc1S,YAAY3B,KAAK44rB,QAAQ/qqB,SAAS2/D,SAASvqF,KAOjE+3rB,EAAc3/rB,UAAUggsB,eAAiB,SAAUrorB,EAASK,EAAOu0V,EAAYC,GAC3E,IAAI56Q,EAAMjtF,KAAK44rB,QAAQwC,eAAenumB,IACjC26Q,IACDA,EAAa50V,EAAQjG,GAEpB86V,IACDA,EAAa70V,EAAQhG,GAEzB,IAAI+f,EAAa/sB,KAAK8sF,eAAe95E,EAAS,eACzCvV,EAAkBsvB,IAA4C,YAA7BA,EAAWnX,gBAC7CmX,EAAa,UAEjB,IAAIE,EAAajtB,KAAK8sF,eAAe95E,EAAS,eAC1C6Z,GAAgE,IAApD7Z,EAAQ,aAAa9F,WAAY3O,QAAQ,MAAeyU,EAAQ,aAAe,KAAOA,EAAQ,aAC1Ga,EAAS7T,KAAK8sF,eAAe95E,EAAS,eAEtC0Z,EADY1sB,KAAK8sF,eAAe95E,EAAS,cAAc4C,cACnC,IAAMmX,EAAa,IAAMF,EAAW,IAAMI,EACnD,WAAXpZ,IACAA,EAAS,UAEbo5E,EAAIQ,OACJR,EAAIkB,UAAYn7E,EAAQ4qB,KACxBqvD,EAAIvgE,KAAOA,EACXugE,EAAI56C,UAAYx+B,EACZb,EAAQm8E,WACRlC,EAAImC,aAAep8E,EAAQm8E,UAE/BlC,EAAI0B,UAAUi5Q,EAAYC,GAC1B56Q,EAAIzsE,OAAOxN,EAAQq8E,cAAgBhjF,KAAK+Q,GAAK,KAC7C6vE,EAAIqC,SAASj8E,EAAOL,EAAQjG,EAAI66V,EAAY50V,EAAQhG,EAAI66V,GACxD56Q,EAAIY,WAIRmtmB,EAAc3/rB,UAAUyxF,eAAiB,SAAU95E,EAAS3V,GACxD,OAAO2V,EAAQ3V,IAEnB29rB,EAAc3/rB,UAAUw6E,cAAgB,SAAU6tT,EAAQ1wX,GACtD0wX,EAAOz2S,IAAIG,UAAYp6E,EAAQ,gBAC/B,IAAI8+B,EAAY9+B,EAAQ,oBACxB,IAAKvV,EAAkBq0C,GAAY,CAC/B,IAAIu7C,EAAkBv7C,EAAU50C,MAAM,KACtCwmY,EAAOz2S,IAAIK,aAAav4D,SAASs4D,EAAgB,GAAI,IAAKt4D,SAASs4D,EAAgB,GAAI,MAE3Fq2S,EAAOz2S,IAAIM,YAAcv6E,EAAgB,QAG7CgorB,EAAc3/rB,UAAU8/rB,oBAAsB,SAAUz3T,EAAQ1wX,GAC5D,IAAIg7E,EAAY01S,EAAOz2S,IACnB7kD,EAAep1B,EAAQmb,GAC3Bu1W,EAAOz2S,IAAIQ,OACXi2S,EAAOz2S,IAAIS,YACXg2S,EAAOz2S,IAAIgB,YAAcj7E,EAAiB,QAC1ChT,KAAK61E,cAAc6tT,EAAQ1wX,GAC3B0wX,EAAOz2S,IAAI55D,KAAKrgB,EAAQjG,EAAGiG,EAAQhG,EAAGgG,EAAQgD,MAAOhD,EAAQ+C,QACxC,OAAjBqyB,GAAyBA,GAAgB,EACzCpoC,KAAKkuF,iBAAiBw1S,EAAQ1wX,IAGT,SAAjBA,EAAQ4qB,OACR5qB,EAAQ4qB,KAAO,eAEnB8lW,EAAOz2S,IAAIkB,UAAYn7E,EAAQ4qB,KAC/B8lW,EAAOz2S,IAAImB,SAASp7E,EAAQjG,EAAGiG,EAAQhG,EAAGgG,EAAQgD,MAAOhD,EAAQ+C,SAEjE/C,EAAQ,iBAA8C,GAA3BA,EAAQ,iBACnC0wX,EAAOz2S,IAAInvD,SAEf4lW,EAAOz2S,IAAIY,UACX61S,EAAOz2S,IAAMe,GAIjBgtmB,EAAc3/rB,UAAU6yF,iBAAmB,SAAUw1S,EAAQ1wX,GACzD,IAAIo1B,EAAep1B,EAAQmb,GACvBphB,EAAIiG,EAAQjG,EACZC,EAAIgG,EAAQhG,EACZgJ,EAAQhD,EAAQgD,MAChBD,EAAS/C,EAAQ+C,OACA,SAAjB/C,EAAQ4qB,OACR5qB,EAAQ4qB,KAAO,eAEnB8lW,EAAOz2S,IAAIkB,UAAYn7E,EAAQ4qB,KAC3B5nB,EAAQ,EAAIoyB,IACZA,EAAepyB,EAAQ,GAEvBD,EAAS,EAAIqyB,IACbA,EAAeryB,EAAS,GAE5B2tX,EAAOz2S,IAAIS,YACXg2S,EAAOz2S,IAAIU,OAAO5gF,EAAIiJ,EAAQoyB,EAAcp7B,GAC5C02X,EAAOz2S,IAAIoB,MAAMthF,EAAIiJ,EAAOhJ,EAAGD,EAAIiJ,EAAOhJ,EAAI+I,EAAQqyB,GACtDs7V,EAAOz2S,IAAIoB,MAAMthF,EAAIiJ,EAAOhJ,EAAI+I,EAAQhJ,EAAGC,EAAI+I,EAAQqyB,GACvDs7V,EAAOz2S,IAAIoB,MAAMthF,EAAGC,EAAI+I,EAAQhJ,EAAGC,EAAGo7B,GACtCs7V,EAAOz2S,IAAIoB,MAAMthF,EAAGC,EAAGD,EAAIiJ,EAAOhJ,EAAGo7B,GACrCs7V,EAAOz2S,IAAIqB,YACXo1S,EAAOz2S,IAAIrvD,QAGRo9pB,KA6EPt4S,GAA0B,WAQ1B,OAPA,SAAkB31Y,EAAGiuB,EAAIE,EAAID,EAAIE,GAC7Bn7B,KAAKsD,GAAKyJ,EACV/M,KAAKg7B,GAAKA,EACVh7B,KAAKk7B,GAAKA,EACVl7B,KAAKi7B,GAAKA,EACVj7B,KAAKm7B,GAAKA,MAKdogqB,GAA+B,WAK/B,OAJA,SAAuB/kqB,EAAOw5D,GAC1BhwF,KAAKw2B,MAAQA,EACbx2B,KAAKgwF,UAAYA,MAqErBwrmB,GAA+B,WAM/B,OALA,SAAuB/uqB,EAAM4G,GACzBrzB,KAAKksD,OAAS,IAAIh2B,GAAK,EAAG,EAAG,EAAG,GAChCl2B,KAAKysB,KAAOA,EACZzsB,KAAKksD,OAAS74B,MAyBlBgnqB,GAA+B,WAG/B,OAFA,gBAQAoB,GAAiC,WASjC,OARA,SAAyBC,EAAQC,EAAQC,EAAQC,EAAQC,EAAQC,GAC7D/7rB,KAAK07rB,OAASA,EACd17rB,KAAK27rB,OAASA,EACd37rB,KAAK47rB,OAASA,EACd57rB,KAAK67rB,OAASA,EACd77rB,KAAK87rB,OAASA,EACd97rB,KAAK+7rB,OAASA,OoiBtpBtB,SAAW5ma,GAEPA,EAAM6ma,kBACFlvqB,KAAM,OACNC,WAAY,MACZyJ,MAAO,KACPxJ,UAAW,SACXC,WAAY,YAGhBkoQ,EAAMinC,eACFtvS,KAAM,OACNC,WAAY,SACZyJ,MAAO,KACPxJ,UAAW,SACXC,WAAY,YAGhBkoQ,EAAMgnC,eACFrvS,KAAM,OACNC,WAAY,SACZyJ,MAAO,KACPxJ,UAAW,SACXC,WAAY,YAGhBkoQ,EAAMqnC,iBACF1vS,KAAM,OACNC,WAAY,SACZyJ,MAAO,KACPxJ,UAAW,SACXC,WAAY,WACZmT,aAAc,QAGlB+0P,EAAM8ma,eACFnvqB,KAAM,OACNC,WAAY,SACZyJ,MAAO,KACPxJ,UAAW,SACXC,WAAY,WACZmT,aAAc,QAzCtB,CA2CG+0P,KAAUA,QG/Cb,IAAI7qM,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAU5D0kS,GAAsB,SAAUn2O,GAEhC,SAASm2O,IACL,IAAIvhU,EAAmB,OAAXorF,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KA2BhE,OAzBAD,EAAMszB,KAAO,IAAI6C,QAAK/6B,OAAWA,EAAW,EAAG,GAE/C4E,EAAM0gU,aAEN1gU,EAAM2gU,YAEN3gU,EAAMmiU,aAAe,IAAI90S,GAAK,EAAG,GAEjCrtB,EAAMkiU,UAAY,IAAI70S,GAAK,EAAG,GAE9BrtB,EAAMm8rB,cAENn8rB,EAAMo8rB,iBAENp8rB,EAAM4iW,cAEN5iW,EAAMq8rB,cAAgB,EAEtBr8rB,EAAMs8rB,kBAAoB,EAE1Bt8rB,EAAM8uI,UAAY,EAElB9uI,EAAMggB,IAAM,EAEZhgB,EAAMuM,IAAM,EACLvM,EAyUX,OAtWAuqF,GAAUg3O,EAAMn2O,GAqChBm2O,EAAKjmU,UAAUslU,YAAc,SAAUxqT,EAAM8krB,GAGzCj7rB,KAAKiiU,UAAY9rT,EAAKmmrB,aAAanmrB,EADhB,IAEnBnW,KAAKkiU,aAAe/rT,EAAKomrB,gBAAgBpmrB,EAAM8krB,IAEnD35X,EAAKjmU,UAAUihsB,aAAe,SAAUnmrB,EAAM6rT,GAC1C,IAAIC,EAAY,IAAI70S,GAAK,EAAG,GAW5B,OAVIptB,KAAKkgC,MAAMzT,QACXw1S,EAAYz1S,GAAYxsB,KAAKkgC,MAAMzT,KAAMzsB,KAAKkgC,MAAMkkQ,YAC1CruR,QAAUisT,GAEpB7rT,EAAKsf,gBACLz1B,KAAK0gU,SAASl8T,KAAKy9T,EAAUlsT,QAG7B/V,KAAKygU,UAAUj8T,KAAKy9T,EAAUlsT,QAE3BksT,GAEXX,EAAKjmU,UAAUkhsB,gBAAkB,SAAUpmrB,EAAM8krB,GAC7C,IAAIp7pB,EAAY,IAAIzS,GAAK,EAAG,GACxBo6S,EAASxnU,KAAKk8rB,WAElB,GADA/lrB,EAAKoL,MAAQpL,EAAKk5E,cACO,eAArBl5E,EAAKijB,aAA8D,aAA9BjjB,EAAKusT,qBAI1C,IAAK,IAHDvgU,EAAW84rB,EAAQn2X,gBAAgB9uT,MAAQG,EAAK+lrB,WAAWz/rB,OAC3DoiC,EAASo8pB,EAAQn2X,gBAAgB/3T,GAAOoJ,EAAK+d,WAAkB+mqB,EAAQn2X,gBAAgB9uT,MAA5B,GAC3DwsT,OAAc,EACTrmU,EAAI,EAAG0F,EAAM2lU,EAAO/qU,OAAQN,EAAI0F,EAAK1F,IAAK,CAC/C,IACI2nS,EAAct3Q,GADNg7S,EAAOrrU,GACkBga,EAAKiuR,WACtC/+O,EAAaxmB,GAAW1oB,EAAK+d,aACa/xB,EAAW2hS,EAAY9tR,OAAS,GAAxE7T,EAAW2hS,EAAY9tR,OAAS,GAElCwpC,GADJ6F,EAAaA,EAAa41oB,EAAQn2X,gBAAgB/3T,EAAIkurB,EAAQn2X,gBAAgB/3T,EAAIs4C,GACtDy+O,EAAY9tR,MACxC,GAAIvY,EAAkB+kU,GAClBA,EAAchjR,MAEb,CACD,GAAI6F,EAAam9Q,EAAa,CAC1BrsT,EAAKoL,MAAQ,GACb,MAEJihT,EAAchjR,EAElB3gB,GAAU1oB,EAAK+d,YAAc/xB,EAAWA,EAGhD,IAAShG,EAAI,EAAGA,EAAIqrU,EAAO/qU,OAAQN,IAAK,CACpC,IAAI2wB,EAAuB,IAAf3W,EAAKoL,MACbiL,GAAYg7S,EAAOrrU,GAAIga,EAAKiuR,WAAaxzQ,GAAeza,EAAKiuR,UAAWojC,EAAOrrU,GAAIga,EAAKoL,OAC5Fse,EAAU7pB,MAAS6pB,EAAU7pB,MAAQ8W,EAAK9W,MAAS6pB,EAAU7pB,MAAQ8W,EAAK9W,MAC1E6pB,EAAU9pB,OAAU8pB,EAAU9pB,OAAS+W,EAAK/W,OAAU8pB,EAAU9pB,OAAS+W,EAAK/W,OAQlF,OANII,EAAKsf,gBACLz1B,KAAK0gU,SAASl8T,KAA2B,eAArB2R,EAAKijB,YAAgCyG,EAAU9pB,OAAS8pB,EAAU7pB,OAGtFhW,KAAKygU,UAAUj8T,KAA2B,eAArB2R,EAAKijB,YAAgCyG,EAAU9pB,OAAS8pB,EAAU7pB,OAEpF6pB,GAOXyhS,EAAKjmU,UAAUmhsB,2BAA6B,SAAUvB,GAElD,IAGIwB,EACAC,EAJA38qB,EAAM,EACNzT,EAAM,EACNnK,EAAWnC,KAAKmC,SAAWnC,KAAKmC,SAAW,EAG3C84rB,EAAQ0B,eAAiB1B,EAAQ2B,aACjCH,EAAkC,eAArBz8rB,KAAKo5B,YACd6hqB,EAAQ0B,cAAcE,gBAAgB98qB,IAAMk7qB,EAAQ0B,cAAcG,gBAAgB/8qB,IACtF28qB,EAAkC,eAArB18rB,KAAKo5B,YACd6hqB,EAAQ0B,cAAcE,gBAAgBvwrB,IAAM2urB,EAAQ0B,cAAcG,gBAAgBxwrB,KAE1FyT,EAAOtiB,EAAkBuC,KAAKi5B,SAA2B,GAA4B,EAA5Cj5B,KAAKi5B,QAC9C3sB,EAAO7O,EAAkBuC,KAAKk5B,SAA2B,GAA4Bl5B,KAAK6uI,UAAjD7uI,KAAKk5B,QAC9C,IAAInL,EACA/tB,KAAKi5B,SAAWj5B,KAAKk5B,SAAWnZ,EAAMzT,IACtCyhB,EAAOhO,EACPA,EAAMzT,EACNA,EAAMyhB,GAEVzhB,EAAO7O,EAAkBuC,KAAKk5B,SAAkBwjqB,GAA2BpwrB,EAAMyT,EAAxCzT,EACzC,IAAI0vB,EAASh8B,KAAKs7B,YACd2jS,EAAuC,OAA5BjjS,EAAOrsB,MAAM,WAC5B3P,KAAKg8B,OAASi/pB,EAAQhsnB,KAAKC,iBACvBlzC,OAAQijS,EAAW,GAAKjjS,IAE5B,IAAK,IAAI7/B,EAAI4jB,EAAK5jB,GAAKmQ,EAAKnQ,GAAQgG,EAAU,CAC1C,IAAInF,EAAQgD,KAAK4hF,YAAYq9O,EAAUjjS,EAAQ7/B,GAC/C6D,KAAKk8rB,WAAW13rB,KAAKxH,GAEzBgD,KAAK+f,IAAM,EACX/f,KAAKo8rB,cAAiB9vrB,EAAMyT,EAAO,EACnC/f,KAAKsM,IAAMtM,KAAKo8rB,cAAgB,EAChCp8rB,KAAKq8rB,kBAAoBl6rB,EACzB,IAAShG,EAAI4jB,EAAK5jB,GAAKmQ,EAAKnQ,IAAK,CACzBa,EAAQgD,KAAK4hF,YAAYq9O,EAAUjjS,EAAQ7/B,GAC/C6D,KAAKm8rB,cAAc33rB,KAAKxH,GACxBgD,KAAK2iW,WAAWn+V,KAAKrI,KAO7BmlU,EAAKjmU,UAAU0hsB,4BAA8B,WACzC,IAIIhvqB,EAJAy5S,EAASxnU,KAAKwnU,OAASxnU,KAAKwnU,UAC5BznT,EAAOtiB,EAAkBuC,KAAKi5B,SAA0B,EAAfj5B,KAAKi5B,QAC9C3sB,EAAO7O,EAAkBuC,KAAKk5B,SAA0Bl5B,KAAK6uI,UAApB7uI,KAAKk5B,QAC9C/2B,EAAWnC,KAAKmC,SAAWnC,KAAKmC,SAAW,EAO/C,IALK1E,EAAkBuC,KAAKi5B,WAAax7B,EAAkBuC,KAAKk5B,UAAYnZ,EAAMzT,IAC9EyhB,EAAOhO,EACPA,EAAMzT,EACNA,EAAMyhB,GAENy5S,GAAUA,EAAO/qU,OAAS,EAC1B,IAAK,IAAIN,EAAI4jB,EAAK5jB,GAAKmQ,EAAKnQ,GAAQgG,EAAU,CAC1C,IAAInF,EAAQwqU,EAAOrrU,GAAKqrU,EAAOrrU,GAAG+Q,WAAa/Q,EAAE+Q,WACjDlN,KAAKk8rB,WAAW13rB,KAAKxH,QAIzB,IAASb,EAAI4jB,EAAK5jB,GAAKmQ,EAAKnQ,GAAQgG,EAChCnC,KAAKk8rB,WAAW13rB,KAAKrI,EAAE+Q,YAG/B,IAAS/Q,EAAI4jB,EAAK5jB,GAAKmQ,EAAKnQ,IACxB6D,KAAKm8rB,cAAc33rB,KAAKgjU,EAAOrrU,GAAKqrU,EAAOrrU,GAAG+Q,WAAa/Q,EAAE+Q,YAC7DlN,KAAK2iW,WAAWn+V,KAAKgjU,EAAOrrU,GAAKqrU,EAAOrrU,GAAG+Q,WAAa/Q,EAAE+Q,YAE9DlN,KAAK+f,IAAMA,EACX/f,KAAKsM,IAAMA,EACXtM,KAAKo8rB,cAAgB9vrB,EAAMyT,EAAM,EACjC/f,KAAKq8rB,kBAAoBl6rB,GAO7Bm/T,EAAKjmU,UAAU2hsB,2BAA6B,SAAU/B,GAClD,IAOIl7qB,EACAzT,EARAnK,EAAWnC,KAAKmC,SAAWnC,KAAKmC,SAAW,EAC3C4zF,GACAr0B,SAAU,OACVh7D,KAAM,YAEN8gG,EAAayzlB,EAAQhsnB,KAAK47B,cAAc9U,GACxCwxO,EAAgB0zX,EAAQhsnB,KAAK07B,cAAc5U,GAG3C0mmB,EAAa,KACbC,EAAa,KACbzB,EAAQ0B,eAAiB1B,EAAQ2B,aACjCH,EAAkC,eAArBz8rB,KAAKo5B,YAA+B6hqB,EAAQ0B,cAAcE,gBAAgB98qB,IACnFk7qB,EAAQ0B,cAAcG,gBAAgB/8qB,IAC1C28qB,EAAkC,eAArB18rB,KAAKo5B,YAA+B6hqB,EAAQ0B,cAAcE,gBAAgBvwrB,IACnF2urB,EAAQ0B,cAAcG,gBAAgBxwrB,KAE9C,IAAI2sB,EAAUj5B,KAAKi5B,QAAUj5B,KAAKi5B,QAAWwjqB,GAA0B,KACnEvjqB,EAAUl5B,KAAKk5B,QAAUl5B,KAAKk5B,QAAWwjqB,GAA0B,KACvE,GAAgB,OAAZzjqB,GAAgC,OAAZC,EAAkB,CACtCnZ,EAAM,EACNzT,EAAMtM,KAAK6uI,UACX,IAAK,IAAI1yI,EAAI4jB,EAAK5jB,GAAKmQ,EAAKnQ,GAAQgG,EAChCnC,KAAKk8rB,WAAW13rB,KAAKrI,EAAE+Q,YACvBlN,KAAKm8rB,cAAc33rB,KAAKrI,EAAE+Q,YAC1BlN,KAAK2iW,WAAWn+V,KAAKrI,EAAE+Q,YAE3BlN,KAAK+f,IAAM,EACX/f,KAAKsM,IAAMtM,KAAK6uI,UAChB7uI,KAAKo8rB,cAAiB9vrB,EAAMyT,EAAO,EACnC/f,KAAKq8rB,kBAAoBl6rB,MAExB,CACe,OAAZ82B,GAAgC,OAAZC,EAEpB5sB,EAAMs5D,GADN7lD,EAAMC,KAAKoxC,MAAMo2C,EAAW+/N,EAAc,IAAIvnT,KAAKy/C,GAASrO,MAAM45H,WAAY/iK,IAAKgR,IAAWhR,QAC1DjoB,KAAK6uI,UAAW7uI,KAAK6lE,cAAc5lD,UAEtD,OAAZgZ,GAAgC,OAAZC,EAEzBnZ,EAAM6lD,GADNt5D,EAAM0T,KAAKoxC,MAAMo2C,EAAW+/N,EAAc,IAAIvnT,KAAKy/C,GAASrO,MAAM45H,WAAY/iK,IAAKiR,IAAWjR,SACzDjoB,KAAK6uI,UAAW7uI,KAAK6lE,cAAc5lD,WAGxEF,EAAMC,KAAKoxC,MAAMo2C,EAAW+/N,EAAc,IAAIvnT,KAAKy/C,GAASrO,MAAM45H,WAAY/iK,IAAKgR,IAAWhR,QAC9F3b,EAAM0T,KAAKoxC,MAAMo2C,EAAW+/N,EAAc,IAAIvnT,KAAKy/C,GAASrO,MAAM45H,WAAY/iK,IAAKiR,IAAWjR,SAElGjoB,KAAKg8B,OAASi/pB,EAAQhsnB,KAAK07B,eACvB3uE,OAAQh8B,KAAKs7B,YAAaomC,SAAU1hE,KAAKqlV,gBAG7C,IADA,IAAI1sT,EAAe5Y,EACZ4Y,GAAgBrsB,GAAK,CACxB,IAAItP,EAAQgD,KAAKg8B,OAAO,IAAIhc,KAAK2Y,IACjC34B,KAAKk8rB,WAAW13rB,KAAKxH,GACrB27B,EAAeitC,GAAyBjtC,EAAcx2B,EAAUnC,KAAK6lE,cAAc5lD,UAOvF,IALAjgB,KAAK+f,IAAM,EACX/f,KAAKq8rB,kBAAoBl6rB,EACzBnC,KAAKo8rB,cAAgBp8rB,KAAKi9rB,oBAAoBl9qB,EAAKzT,GACnDtM,KAAKsM,IAAMtM,KAAKo8rB,cAAgB,EAChCzjqB,EAAe5Y,EACR4Y,GAAgBrsB,GAAK,CACpBtP,EAAQgD,KAAKg8B,OAAO,IAAIhc,KAAK2Y,IACjC34B,KAAKm8rB,cAAc33rB,KAAKxH,GACxBgD,KAAK2iW,WAAWn+V,KAAK,IAAIwb,KAAK2Y,IAC9BA,EAAeitC,GAAyBjtC,EAAc,EAAG34B,KAAK6lE,cAAc5lD,aAIxFqhT,EAAKjmU,UAAUgqV,YAAc,WAoBzB,MAlB0B,UAAtBrlV,KAAK6lE,aACM,OAEgB,WAAtB7lE,KAAK6lE,aACC,OAEgB,SAAtB7lE,KAAK6lE,aACC,MAEgB,UAAtB7lE,KAAK6lE,aACC,OAEN7lE,KAAK6lE,aACC,QAWnBy7P,EAAKjmU,UAAUumF,YAAc,SAAUq9O,EAAUjjS,EAAQrD,GACrD,OAAOsmS,EAAWjjS,EAAOzsB,QAAQ,UAAWvP,KAAKg8B,OAAOrD,IAClD34B,KAAKg8B,OAAOrD,IAGtB2oS,EAAKjmU,UAAU4hsB,oBAAsB,SAAUl9qB,EAAKzT,GAChD,IAGIolX,EAHAj1X,EAAS,EACTw8B,EAAU,IAAIjZ,KAAKD,GACnBmZ,EAAU,IAAIlZ,KAAK1T,GAGvB,OAAQtM,KAAK6lE,cACT,IAAK,QAEDppE,EADay8B,EAAQ6sC,cAAgB9sC,EAAQ8sC,cAAiB,EAE9D,MACJ,IAAK,SACD,IAAI03B,EAA2D,IAAjDvkE,EAAQ6sC,cAAgB9sC,EAAQ8sC,eAC9C03B,GAAUxkE,EAAQgtC,WAElBxpE,GADAghG,GAAUvkE,EAAQ+sC,WAAa,IACZ,EAAI,EAAIw3B,EAC3B,MACJ,IAAK,OACDi0R,EAAarlX,KAAKE,IAAI0sB,EAAQhZ,UAAYiZ,EAAQjZ,WAElDxjB,EADO4P,KAAKwmB,KAAK6+V,SACD,EAChB,MACJ,IAAK,QACDA,EAAarlX,KAAKE,IAAI0sB,EAAQhZ,UAAYiZ,EAAQjZ,WAElDxjB,EADY4P,KAAKwmB,KAAK6+V,QACL,EACjB,MACJ,IAAK,UACDA,EAAarlX,KAAKE,IAAI0sB,EAAQhZ,UAAYiZ,EAAQjZ,WAElDxjB,EADc4P,KAAKwmB,KAAK6+V,OACL,EAG3B,OAAOj1X,GAEXouF,IACI9iF,GAAU0kB,KAAM,GAAI23Q,UAAWjP,GAAMinC,eAAiBy6D,KACvDv1D,EAAKjmU,UAAW,aAAS,GAC5BwvF,IACI3jF,GAAS,IACVo6T,EAAKjmU,UAAW,uBAAmB,GACtCwvF,IACI3jF,EAAS,OACVo6T,EAAKjmU,UAAW,cAAU,GAC7BwvF,IACI9iF,EAAQotR,GAAMgnC,cAAeQ,KAC9B2E,EAAKjmU,UAAW,iBAAa,GAChCwvF,IACI3jF,EAAS,IACVo6T,EAAKjmU,UAAW,qBAAiB,GACpCwvF,IACI3jF,GAAS,IACVo6T,EAAKjmU,UAAW,kBAAc,GACjCwvF,IACI3jF,EAAS,aACVo6T,EAAKjmU,UAAW,iBAAa,GAChCwvF,IACI3jF,EAAS,OACVo6T,EAAKjmU,UAAW,eAAW,GAC9BwvF,IACI3jF,EAAS,OACVo6T,EAAKjmU,UAAW,eAAW,GAC9BwvF,IACI3jF,EAAS,OACVo6T,EAAKjmU,UAAW,gBAAY,GAC/BwvF,IACI3jF,EAAS,KACVo6T,EAAKjmU,UAAW,mBAAe,GAClCwvF,IACI3jF,EAAS,SACVo6T,EAAKjmU,UAAW,oBAAgB,GACnCwvF,IACI3jF,EAAS,SACVo6T,EAAKjmU,UAAW,4BAAwB,GACpCimU,GACTtiQ,IC7XEk+nB,GAA4B,WAC5B,SAASA,EAAWtE,GAChB54rB,KAAK44rB,QAAUA,EACf54rB,KAAKo5D,QAAU,GACfp5D,KAAKm9rB,cAAgB,IAAInC,GAAcpC,GAmS3C,OAjSAsE,EAAW7hsB,UAAU2sU,WAAa,WAC9BhoU,KAAK8kU,gBAAkB9kU,KAAK44rB,QAAQ9zX,gBACpC,IACIoD,EACAlnU,EAFA43rB,EAAU54rB,KAAK44rB,QAGdA,EAAQsC,wBACThzX,EAAcloU,KAAK44rB,QAAQ/qqB,SAASw+C,aAAc/oE,GAAIs1rB,EAAQ53rB,QAAQsC,GAAK,oBAG/E,IAAK,IADDmkE,EAAOznE,KAAK44rB,QAAQjyX,gBACfxqU,EAAI,EAAG0F,EAAM4lE,EAAKhrE,OAAQN,EAAI0F,EAAK1F,IAAK,CAC7C,IAAIga,EAAOsxD,EAAKtrE,GAES,eAArBga,EAAKijB,aACAw/pB,EAAQsC,wBACTl6rB,EAAUhB,KAAK44rB,QAAQ/qqB,SAASw+C,aAAc/oE,GAAIs1rB,EAAQ53rB,QAAQsC,GAAK,gBAE3EtD,KAAKo9rB,cAAcp8rB,EAASmV,GAC5BnW,KAAK0oU,eAAevyT,EAAMnV,EAASmV,EAAKkd,MACxCrzB,KAAKwoU,gBAAgBryT,EAAMnV,EAASmV,EAAKkd,QAGzCryB,EAAU43rB,EAAQ/qqB,SAASw+C,aAAc/oE,GAAIs1rB,EAAQ53rB,QAAQsC,GAAK,eAClEtD,KAAK4sV,cAAc5rV,EAASmV,GAC5BnW,KAAK8oU,eAAe3yT,EAAMnV,EAASmV,EAAKkd,MACxCrzB,KAAK4oU,gBAAgBzyT,EAAMnV,EAASmV,EAAKkd,OAExCulqB,EAAQsC,uBACThzX,EAAYvmU,YAAYX,GAG3B43rB,EAAQsC,uBACTl7rB,KAAK44rB,QAAQtnqB,UAAU3vB,YAAYumU,IAG3Cg1X,EAAW7hsB,UAAU+hsB,cAAgB,SAAU98rB,EAAQ6V,GACnD,IAAInJ,EAAIhN,KAAK8kU,gBAAgB93T,GAAMmJ,EAAKsf,gBAAgD,EAA9Bz1B,KAAK8kU,gBAAgB/uT,QAC3E+3C,EAAO,IAAI+soB,GAAW76rB,KAAK44rB,QAAQ53rB,QAAQsC,GAAK,aAAc,IAAI4wY,GAAKl0Y,KAAK8kU,gBAAgB/3T,EAAGC,EAAGhN,KAAK8kU,gBAAgB/3T,EAAI/M,KAAK8kU,gBAAgB9uT,MAAOhJ,GAAI,cAAe,GAC9KhN,KAAKm9rB,cAAc3vmB,SAAS1/B,EAAMxtD,IAEtC48rB,EAAW7hsB,UAAUuxV,cAAgB,SAAUtsV,EAAQ6V,GACnD,IAAIpJ,EAAI/M,KAAK8kU,gBAAgB/3T,GAAOoJ,EAAKsf,gBAAuBz1B,KAAK8kU,gBAAgB9uT,MAAzB,GACxD83C,EAAO,IAAI+soB,GAAW76rB,KAAK44rB,QAAQ53rB,QAAQsC,GAAK,aAAc,IAAI4wY,GAAKnnY,EAAG/M,KAAK8kU,gBAAgB93T,EAAGD,EAAG/M,KAAK8kU,gBAAgB/uT,OAAS/V,KAAK8kU,gBAAgB93T,GAAI,cAAe,GAC/KhN,KAAKm9rB,cAAc3vmB,SAAS1/B,EAAMxtD,IAEtC48rB,EAAW7hsB,UAAUqtU,eAAiB,SAAUvyT,EAAM7V,EAAQ+yB,GAC1D,IAAIrmB,EAAIqmB,EAAKrmB,GAAMmJ,EAAKsf,kBAC0Btf,EAAK+rT,aAAansT,OAAS/V,KAAKo5D,SAA7EjjD,EAAK+rT,aAAansT,OAAS/V,KAAKo5D,SACrC,GAAIjjD,EAAK+pB,MAAMzT,KAAM,CACjB,IAAImsqB,EAAU54rB,KAAK44rB,QACf14pB,EAAQ/pB,EAAK+pB,MACb4jQ,EAAct3Q,GAAY0T,EAAMzT,KAAMyT,EAAMkkQ,WAC5ChrO,EAAUp5D,KAAKo5D,QACfvlD,EAA2C,SAAlCqsB,EAAMkkQ,UAAUzjQ,cAA2B,QAClB,QAAlCT,EAAMkkQ,UAAUzjQ,cAA0B,MAAQ,SACtDy4B,EAAUjjD,EAAKsf,kBAAoB2jC,EAAU0qO,EAAY/tR,OAAS,GAAMqjD,EAAW,EAAI0qO,EAAY/tR,OAAS,EAC5G,IAAI/C,EAAU,IAAIujB,GAAWqiqB,EAAQ53rB,QAAQsC,GAAK,cAAe,IAAIs3rB,GAAUvnqB,EAAKtmB,EAAIuzB,GAAejN,EAAKrd,MAAO,EAAG,EAAGkqB,EAAMkkQ,WAAYp3R,EAAIosD,EAASvlD,EAAQqsB,EAAMzT,MAAOyT,EAAMkkQ,UAAWlkQ,EAAMkkQ,UAAU5tQ,OAASoiqB,EAAQviqB,WAAWpH,WAC1OjvB,KAAKm9rB,cAAc/rqB,WAAWpe,EAAS1S,EAAQ4/B,EAAMzT,QAG7DywqB,EAAW7hsB,UAAUytU,eAAiB,SAAU3yT,EAAM7V,EAAQ+yB,GAC1D,GAAIld,EAAK+pB,MAAMzT,KAAM,CACjB,IAAIyT,EAAQ/pB,EAAK+pB,MACb04pB,EAAU54rB,KAAK44rB,QACfvpmB,EAAiBl5E,EAAoB,gBAAI,IAAM,GAE/CtC,GADc2Y,GAAY0T,EAAMzT,KAAMyT,EAAMkkQ,WACD,SAAlClkQ,EAAMkkQ,UAAUzjQ,cAA2B,QAClB,QAAlCT,EAAMkkQ,UAAUzjQ,cAA0B,MAAQ,UAClDy4B,EAAU,GACdA,EAAUjjD,EAAKsf,gBAAkB2jC,GAAWA,EAC5C,IAAIrsD,EAAIsmB,EAAKtmB,EAAIqsD,GAAYjjD,EAAoB,gBAAIA,EAAK+rT,aAAalsT,OAASG,EAAK+rT,aAAalsT,OAC9FhJ,EAAIqmB,EAAKrmB,EAAIu4D,GAAelyC,EAAM,EAAG,EAAG6M,EAAMkkQ,YAAcjuR,EAAKsf,gBAAkBz1B,KAAKo5D,SAAWp5D,KAAKo5D,SACxGpmD,EAAU,IAAIujB,GAAWqiqB,EAAQ53rB,QAAQsC,GAAK,cAAe,IAAIs3rB,GAAU7trB,EAAGC,EAAIhN,KAAKo5D,QAASvlD,EAAQqsB,EAAMzT,KAAM4iE,EAAe,UAAYA,EAAgB,MAAY,MAAY,IAAK,QAASnvD,EAAMkkQ,UAAWlkQ,EAAMkkQ,UAAU5tQ,OAASoiqB,EAAQviqB,WAAWpH,WACjQjvB,KAAK44rB,QAAQsC,sBAIdl7rB,KAAKm9rB,cAAc9B,eAAerorB,EAASktB,EAAMzT,KAAM1f,EAAGC,GAH1DhN,KAAKm9rB,cAAc/rqB,WAAWpe,EAAS1S,EAAQ4/B,EAAMzT,QAWjEywqB,EAAW7hsB,UAAU+iU,uBAAyB,WAI1C,IAAK,IAFDjoT,EACAsxT,EAFUznU,KAAK44rB,QAEUjyX,gBACpBxqU,EAAI,EAAG0F,EAAM4lU,EAAehrU,OAAQN,EAAI0F,EAAK1F,KAClDga,EAAOsxT,EAAetrU,IACjB+/rB,cACL/lrB,EAAKgmrB,iBACLhmrB,EAAKwsV,cACkB,YAAnBxsV,EAAK+b,UACL/b,EAAKqmrB,2BAA2Bx8rB,KAAK44rB,SAEb,aAAnBzirB,EAAK+b,UACV/b,EAAK6mrB,2BAA2Bh9rB,KAAK44rB,SAGrCzirB,EAAK4mrB,8BAET5mrB,EAAKgmrB,cAAgBhmrB,EAAK+d,WAAa/d,EAAKgmrB,cAAcz8oB,UAAYvpC,EAAKgmrB,eAOnFe,EAAW7hsB,UAAUupU,YAAc,SAAUvxS,GAIzC,IAAK,IAFDld,EADA8krB,EAAUj7rB,KAAK44rB,QAEfnxX,EAAiBwzX,EAAQt0X,gBACpBxqU,EAAIsrU,EAAehrU,OAAS,EAAGN,GAAK,EAAGA,KAC5Cga,EAAOsxT,EAAetrU,IACjBskU,aACLtqT,EAAKuqT,YACLvqT,EAAKwqT,YAAYxqT,EAAM8krB,GAClB9krB,EAAKsf,gBAUmB,eAArBtf,EAAKijB,aACL/F,EAAKrmB,GAAK8lB,GAAI3c,EAAKuqT,UAAY1gU,KAAKo5D,QACpC/lC,EAAKtd,QAAU+c,GAAI3c,EAAKuqT,UAAY1gU,KAAKo5D,SAGzC/lC,EAAKrd,OAAS8c,GAAI3c,EAAKuqT,UAAY1gU,KAAKo5D,QAdnB,eAArBjjD,EAAKijB,YACL/F,EAAKtd,QAAW+c,GAAI3c,EAAKsqT,WAAazgU,KAAKo5D,SAG3C/lC,EAAKtmB,GAAK+lB,GAAI3c,EAAKsqT,WAAazgU,KAAKo5D,QACrC/lC,EAAKrd,OAAS8c,GAAI3c,EAAKsqT,WAAazgU,KAAKo5D,UAmBzD8joB,EAAW7hsB,UAAUgqU,kBAAoB,SAAUhyS,GAI/C,IAAK,IADDo0S,EAFUznU,KAAK44rB,QAEUjyX,gBACpBxqU,EAAI,EAAG0F,EAAM4lU,EAAehrU,OAAQN,EAAI0F,EAAK1F,IAAK,CACvD,IAAI2pU,EAAS2B,EAAetrU,GAC5B2pU,EAAOzyS,KAAO30B,KAAW20B,EAAM,MAAM,GACV,eAAvByyS,EAAO1sS,aAAiC0sS,EAAOrwS,kBAC/CqwS,EAAOzyS,KAAKrmB,EAAIqmB,EAAKrmB,EAAIqmB,EAAKtd,OAC9B+vT,EAAOzyS,KAAKtd,OAAS,GAEE,aAAvB+vT,EAAO1sS,aAA8B0sS,EAAOrwS,kBAC5CqwS,EAAOzyS,KAAKtmB,EAAIsmB,EAAKtmB,EAAIsmB,EAAKrd,MAC9B8vT,EAAOzyS,KAAKrd,MAAQ,KAIhCknrB,EAAW7hsB,UAAUmtU,gBAAkB,SAAUryT,EAAM7V,EAAQ+yB,GAQ3D,IAPA,IAAIulqB,EAAU54rB,KAAK44rB,QACfpxX,EAASrxT,EAAK+lrB,WACd/5rB,EAAWkxB,EAAKrd,MAAQG,EAAKimrB,cAC7BiB,EAAkB,EAClBC,EAAennrB,EAAKhU,SAAWgU,EAAKhU,SAAW,EAC/Co7rB,EAAelqqB,EAAKrd,OAASG,EAAKimrB,cAAgBjmrB,EAAKkmrB,mBACvDtuqB,EAAO5X,EAAKkmrB,kBACTkB,EAAexoqB,SAAS5e,EAAKiuR,UAAUt3Q,KAAM,KAChDiB,GAAc,EACdwvqB,EAAelqqB,EAAKrd,OAASG,EAAKimrB,cAAgBruqB,GAElD5X,EAAKkmrB,kBAAoBtuqB,IACzBsvqB,EAAkBtvqB,EAClBy5S,EAASrxT,EAAKgmrB,cACdmB,EAAevvqB,GAEnB,IAEI49S,EAFAvyQ,EAAU,GACVokoB,EAAanqqB,EAAKtmB,GAAMoJ,EAAK+d,WAAiBb,EAAKrd,MAAT,GAE1CuL,EAAQpL,EAAKoL,MACjB63C,EAAUp5D,KAAKo5D,QACf,IACIpyC,EADAglT,EAA2B,KAAVzqT,IAA2B,KAAXA,GAAmB,EAAI,EAEvDq3qB,EAAQsC,wBACTl0qB,EAAehnB,KAAK44rB,QAAQ/qqB,SAASw+C,aAAc/oE,GAAIs1rB,EAAQ53rB,QAAQsC,GAAK,iBAEhF,IAAK,IAAInH,EAAI,EAAG0F,EAAM2lU,EAAO/qU,OAAQN,EAAI0F,EAAK1F,IAAK,CAC/C,IAAIshsB,EAAY,IAAIvnqB,GAAKsnqB,EAAYnqqB,EAAKrmB,EAAG7K,EAAUkxB,EAAKtd,QACxD1C,EAAsC,SAA9B8C,EAAKusT,qBACbvkS,GAASh8B,EAAWm7rB,EAAc91X,EAAOrrU,GAAIga,EAAKiuR,WAAaojC,EAAOrrU,GACtE2nS,EAAct3Q,GAAYnZ,EAAO8C,EAAKiuR,WACtC/2R,OAAY,EAChBs+T,EAAgBx1T,EAAoB,kBAC9BijD,GAAW73C,EAAcuiR,EAAY/tR,OAAS,EAA1B,EAAgC,EAAII,EAAK+rT,aAAansT,OAAS,EAAM,IACzFqjD,GAAW73C,EAAcuiR,EAAY/tR,OAAS,EAA1B,EAAiC,EAAII,EAAK+rT,aAAansT,OAAS,EAC1E+tR,EAAY/tR,OAAS,EAA1B,GACX,IAAIhJ,EAAI0wrB,EAAU1wrB,GAAOoJ,EAAK+d,aAC2BupqB,EAAUznrB,MAAQ,EAAM8tR,EAAY9tR,MAAQ,GAAhGynrB,EAAUznrB,MAAQ,EAAM8tR,EAAY9tR,MAAQ,GAE7CjJ,EAD8B,SAA9BoJ,EAAKusT,qBACCvsT,EAAK+d,WAAsDnnB,EAAKywrB,EAAar7rB,EAAY4K,EAAKywrB,EAAar7rB,EAAvF4K,GAAK0wrB,EAAU1wrB,EAAIA,EAAI0wrB,EAAU1wrB,GAG3DA,EAAIA,EAAIsmB,EAAKtmB,EAAIsmB,EAAKtmB,EAAIA,GAChB+2R,EAAY9tR,MAAUqd,EAAKtmB,EAAIsmB,EAAKrd,MAAWqd,EAAKtmB,EAAIsmB,EAAKrd,MAAQ8tR,EAAY9tR,MAASjJ,EAExG,IAAIC,EAAIqmB,EAAKrmB,EAAI2+T,EACbi8B,OAAa,EACbC,OAAa,EACjB,GAAc,IAAVtmV,EAAa,CACbA,EAASA,EAAQ,IAAOA,EAAQ,IAAMA,EACtC,IAAI2tB,EAAate,GAAeza,EAAKiuR,UAAW/wR,EAAOkO,GACnDqqT,EAAaz1T,EAAK+rT,aAAansT,OAAS1J,KAAKwmB,KAAKqc,EAAWn5B,OAAS+tR,EAAY/tR,QAClF81T,EAAY11T,EAAKsf,gBAAkBm2S,EAAa,GAAKA,EAAa,EAGtEv+T,EAAY,UAAYkU,EAAQ,KAFhCqmV,EAAa76V,EAAI+2R,EAAY9tR,MAAQ,EAAIg2T,GAEU,KADnD67B,EAAa76V,EAAI6+T,GAEE,IACnB7+T,GAAK6+T,GAAwB,MAAVtqT,IAA4B,KAAXA,GAAmB2tB,EAAWn5B,OAAS,EAAMm5B,EAAWn5B,OAAS,GAEzG,IAAI/C,EAAU,IAAIujB,GAAWqiqB,EAAQ53rB,QAAQsC,GAAK,eAAiBnH,EAAG,IAAIy+rB,GAAU7trB,EAAGC,EAAG,QAASqG,EAAOkO,EAAOlU,GAAY8I,EAAKiuR,UAAWjuR,EAAKiuR,UAAU5tQ,OAASoiqB,EAAQviqB,WAAWrH,WAC1K,IAAVzN,GAAevhB,KAAK44rB,QAAQsC,sBAC5Bl7rB,KAAKm9rB,cAAc9B,eAAerorB,EAASK,EAAOu0V,EAAYC,GAG9D7nW,KAAKm9rB,cAAc/rqB,WAAWpe,EAASgU,EAAc3T,GAGrDmqrB,GADoB,IAApBH,EAC4BlnrB,EAAK+d,YAAqD/d,EAAKkmrB,kBAAoBl6rB,EAAhEgU,EAAKkmrB,kBAAoBl6rB,EAG5CgU,EAAK+d,YAA8CmpqB,EAAkBl7rB,EAAlDk7rB,EAAkBl7rB,GAEvC,IAA1BkR,EAAM9U,QAAQ,QAAiByB,KAAK44rB,QAAQsC,uBAC5Cl7rB,KAAK44rB,QAAQpynB,kBAAkBhiE,KAAK,IAAIg3rB,GAAch0X,EAAOrrU,GAAI,IAAI+5B,GAAKnpB,EAAGC,EAAI82R,EAAY/tR,OAAQ+tR,EAAY9tR,MAAO8tR,EAAY/tR,UAEhH,IAApBsnrB,IACAlhsB,GAASkhsB,EAAkB,GAG9BzE,EAAQsC,uBACT56rB,EAAOqB,YAAYqlB,IAG3Bk2qB,EAAW7hsB,UAAUutU,gBAAkB,SAAUzyT,EAAM7V,EAAQ+yB,GAO3D,IANA,IAAIulqB,EAAU54rB,KAAK44rB,QACfpxX,EAASrxT,EAAK+lrB,WACd/5rB,EAAWkxB,EAAKtd,OAASI,EAAKimrB,cAC9BiB,EAAkB,EAClBE,EAAelqqB,EAAKtd,QAAUI,EAAKimrB,cAAgBjmrB,EAAKkmrB,mBACxDtuqB,EAAO5X,EAAKkmrB,kBACTkB,EAAexoqB,SAAS5e,EAAKiuR,UAAUt3Q,KAAM,KAChDiB,GAAc,EACdwvqB,EAAelqqB,EAAKtd,QAAUI,EAAKimrB,cAAgBruqB,GAEnD5X,EAAKkmrB,kBAAoBtuqB,IACzBsvqB,EAAkBtvqB,EAClBy5S,EAASrxT,EAAKgmrB,eAElB,IAAI/ioB,EAAU,GACVskoB,EAAcrqqB,EAAKrmB,GAAKmJ,EAAK+d,WAAa,EAAIb,EAAKtd,QACnDlC,EAASsC,EAAKsf,gBAAkB,QAAU,MAC9C2jC,EAAUjjD,EAAKsf,gBAAkB2jC,GAAWA,EAC5C,IAAIpyC,EACC4xqB,EAAQsC,wBACTl0qB,EAAehnB,KAAK44rB,QAAQ/qqB,SAASw+C,aAAc/oE,GAAIs1rB,EAAQ53rB,QAAQsC,GAAK,iBAEhF,IAAK,IAAInH,EAAI,EAAG0F,EAAM2lU,EAAO/qU,OAAQN,EAAI0F,EAAK1F,IAAK,CAC/C,IAAI22W,EAAY,IAAI58U,GAAK7C,EAAKtmB,EAAG2wrB,EAAarqqB,EAAKrd,MAAO7T,GACtD+R,EAAW4+V,EAAU/8V,OAAS,EAC9BhJ,EAAI+lW,EAAU/lW,EAAIqsD,EAClBpsD,EAAI8lW,EAAU9lW,GAAKmJ,EAAK+d,WAAahgB,GAAYA,GACjDlB,EAAU,IAAIujB,GAAWqiqB,EAAQ53rB,QAAQsC,GAAK,eAAiBnH,EAAG,IAAIy+rB,GAAU7trB,EAAGC,EAAG6G,EAAQ2zT,EAAOrrU,GAAI,EAAG,cAA4B,MAAY,IAAK,UAAWga,EAAKiuR,UAAWjuR,EAAKiuR,UAAU5tQ,OAASoiqB,EAAQviqB,WAAWrH,WACnOhvB,KAAKm9rB,cAAc/rqB,WAAWpe,EAASgU,EAAcwgT,EAAOrrU,IACxDqP,GAAQwiG,OAAShuG,KAAK44rB,QAAQsC,uBAC9Bl0qB,EAAazV,WAAWpV,GAAGqH,aAAa,KAAM,OAE1B,IAApB65rB,EACAK,GAA6BvnrB,EAAK+d,WAAc/d,EAAKkmrB,kBAAoBl6rB,GAAcgU,EAAKkmrB,kBAAoBl6rB,GAGhHu7rB,GAA6BvnrB,EAAK+d,WAAcmpqB,EAAkBl7rB,GAAck7rB,EAAkBl7rB,EAClGhG,GAASkhsB,EAAkB,GAG9BzE,EAAQsC,uBACT56rB,EAAOqB,YAAYqlB,IAGpBk2qB,KC1SP5ymB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAW5D+gqB,GAA8B,SAAUxymB,GAExC,SAASwymB,IACL,OAAkB,OAAXxymB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAiB/D,OAnBAsqF,GAAUqzmB,EAAcxymB,GAIxBN,IACI3jF,GAAS,IACVy2rB,EAAatisB,UAAW,iBAAa,GACxCwvF,IACI3jF,EAAS,KACVy2rB,EAAatisB,UAAW,cAAU,GACrCwvF,IACI3jF,GAAS,IACVy2rB,EAAatisB,UAAW,8BAA0B,GACrDwvF,IACI9iF,KAAY60T,KACb+gY,EAAatisB,UAAW,cAAU,GACrCwvF,IACI9iF,EAAQotR,GAAM8ma,cAAet/X,KAC9BghY,EAAatisB,UAAW,iBAAa,GACjCsisB,GACT3+nB,IAEEmwQ,GAAwB,WACxB,SAASA,EAAOypX,GACZ54rB,KAAK44rB,QAAUA,EACf54rB,KAAKm9rB,cAAgB,IAAInC,GAAch7rB,KAAK44rB,SAC5C54rB,KAAK49rB,UAAY,IAAIjF,GAAU34rB,KAAK44rB,SA4LxC,OArLAzpX,EAAO9zU,UAAUwisB,iBAAmB,WAC3B79rB,KAAK44rB,QAAQsC,wBACdl7rB,KAAK89rB,oBAAsB99rB,KAAK44rB,QAAQ/qqB,SAASw+C,aAC7C/oE,GAAItD,KAAK44rB,QAAQ53rB,QAAQsC,GAAK,uBAC9ByJ,EAAG/M,KAAK44rB,QAAQ9zX,gBAAgB/3T,EAAGC,EAAGhN,KAAK44rB,QAAQ9zX,gBAAgB93T,EAAGK,UAAW,qBAEjFrN,KAAK44rB,QAAQmF,aAAaC,YAC1Bh+rB,KAAKi+rB,oBAAsBj+rB,KAAK44rB,QAAQ/qqB,SAASw+C,aAAc/oE,GAAItD,KAAK44rB,QAAQ53rB,QAAQsC,GAAK,uBAAwB+J,UAAW,uBAGxIrN,KAAK44rB,QAAQj+pB,QAAU36B,KAAK44rB,QAAQjyX,gBAAgB,GAAGy1X,cACvDp8rB,KAAK44rB,QAAQh+pB,QAAU56B,KAAK44rB,QAAQjyX,gBAAgB,GAAGy1X,cAEvD,IAWI8B,EAXAC,EAAQ9xrB,KAAKoxB,MAAMz9B,KAAK44rB,QAAQ9zX,gBAAgB/3T,GAChDqxrB,EAAQ/xrB,KAAKoxB,MAAMz9B,KAAK44rB,QAAQ9zX,gBAAgB93T,GAChDqxrB,EAAa,EACbC,EAAa,EACbC,EAAYlyrB,KAAKoxB,OAAQz9B,KAAK44rB,QAAQ9zX,gBAAgB9uT,MACrDhW,KAAK44rB,QAAQmF,aAAaz5pB,OAAOtuB,MAAQ,GAAMhW,KAAK44rB,QAAQj+pB,QAAW,KAAO,IAC/E6jqB,EAAanyrB,KAAKoxB,OAAQz9B,KAAK44rB,QAAQ9zX,gBAAgB/uT,OACtD/V,KAAK44rB,QAAQmF,aAAaz5pB,OAAOtuB,MAAQ,GAAMhW,KAAK44rB,QAAQh+pB,QAAW,KAAO,IAC/Ew0L,EAAU,EAEV54L,GADax2B,KAAK44rB,QAAQviqB,WAClB,IAERooqB,KACJP,EAAal+rB,KAAK44rB,QAAQmF,aAAaz5pB,OACvCtkC,KAAK0+rB,0BACL1+rB,KAAK2+rB,mBAAqBH,EAAazpqB,SAAS/0B,KAAK44rB,QAAQmF,aAAa35Z,UAAUt3Q,KAAM,IAC1F,IAAI8xqB,EAAgB5+rB,KAAK6+rB,gBAAgB7+rB,KAAK44rB,QAAQqB,mBAAoBj6rB,KAAK44rB,QAAQmF,aAAa/hqB,QACpGh8B,KAAK8+rB,mBAAqBP,EAAaK,EAAcnisB,QAChDs4B,SAAS/0B,KAAK44rB,QAAQmF,aAAa35Z,UAAUt3Q,KAAM,IAAM,GAC1D9sB,KAAK44rB,QAAQhhrB,MAAM6d,kBACnB0oqB,EAAQ9xrB,KAAKoxB,MAAkE,KAA3Dz9B,KAAK44rB,QAAQ9zX,gBAAgB/3T,EAAKmxrB,EAAWlorB,MAAQ,IAAa,KAE1F,IAAK,IAAIjJ,EAAI,EAAGA,EAAK/M,KAAK44rB,QAAQj+pB,QAAU36B,KAAK44rB,QAAQh+pB,QAAU7tB,IAAK,CACpE,IAAI0f,EAAOzsB,KAAK44rB,QAAQmG,iBAAiBV,GAAYC,GACjDU,EAAe,IAAItE,GAAY,EAAG,EAAG,EAAG,EAAG,EAAG,IAClDlkqB,EAAQx2B,KAAK49rB,UAAUtD,gBAAgB7tqB,GACvC,IAAI4G,EAAO,IAAI6wS,GAAWlkU,KAAK44rB,QAAQ53rB,QAAQsC,GAAK,gBAAkByJ,EAAGypB,EAAO0nqB,EAAY,EAAG,IAAIhoqB,GAAKioqB,EAAOC,EAAOG,EAAWC,GAAaN,EAAW1nqB,OAASx2B,KAAK44rB,QAAQviqB,WAAW0je,WAAYmkM,EAAWtxrB,OAAQsxrB,EAAWtxrB,QASpO,GARA5M,KAAKm9rB,cAAcx5pB,cAActQ,EAAMrzB,KAAK89rB,qBAC5CkB,EAAajyrB,EAAIoxrB,EACjBa,EAAahyrB,EAAIoxrB,EACjBY,EAAahprB,MAAQuorB,EACrBS,EAAajprB,OAASyorB,EACtBQ,EAAahisB,MAAQyvB,EACrBuyqB,EAAa17rB,GAAKtD,KAAK44rB,QAAQ53rB,QAAQsC,GAAK,gBAAkByJ,EAC9D0xrB,EAAiBj6rB,KAAKw6rB,GAClBh/rB,KAAK44rB,QAAQmF,aAAaC,WAAah+rB,KAAK2+rB,oBAAsB3+rB,KAAK8+rB,mBAAoB,CAC3F,IAAIlpJ,EAAc51iB,KAAK6+rB,gBAAgBpyqB,EAAMzsB,KAAK44rB,QAAQmF,aAAa/hqB,QACnEijqB,EAAqBj/rB,KAAK44rB,QAAQmF,aAAa35Z,UAC/CpxR,EAAU,IAAIujB,GAAWv2B,KAAK44rB,QAAQ53rB,QAAQsC,GAAK,sBAAwByJ,EAAG,IAAI6trB,GAAUvurB,KAAKoxB,MAAgC,KAAzB0gqB,EAAQI,EAAY,IAAY,IAAKlyrB,KAAKoxB,MAAiC,KAA1B2gqB,EAAQI,EAAa,IAAY,IAAK,SAAU5oJ,EAAa,KAAM,KAAM,UAAWqpJ,EAAoBA,EAAmBzoqB,OAASx2B,KAAKyqX,kBAAkBj0V,IACxTx2B,KAAKm9rB,cAAc/rqB,WAAWpe,EAAShT,KAAKi+rB,oBAAqBroJ,GAC7DpqiB,GAAQwiG,OAAShuG,KAAK44rB,QAAQsC,uBAC9Bl7rB,KAAKi+rB,oBAAoB1srB,WAAWxE,GAAGvJ,aAAa,KAAM,OAG9D4rN,IAAYpvN,KAAK44rB,QAAQj+pB,QAAU,GACnCyjqB,EAAQ/xrB,KAAKoxB,MAA6B,KAAtB2gqB,EAAQI,IAAqB,IACjDpve,EAAU,EACVkve,EAAa,EAETH,EADAn+rB,KAAK44rB,QAAQhhrB,MAAM6d,gBACXppB,KAAKoxB,MAAkE,KAA3Dz9B,KAAK44rB,QAAQ9zX,gBAAgB/3T,EAAKmxrB,EAAWlorB,MAAQ,IAAa,IAG9E3J,KAAKoxB,MAAMz9B,KAAK44rB,QAAQ9zX,gBAAgB/3T,GAEpD/M,KAAK0+rB,uBAAuBl6rB,KAAKi6rB,GACjCA,KACAJ,MAGAF,EAAQ9xrB,KAAKoxB,MAA4B,KAArB0gqB,EAAQI,IAAoB,IAChDnve,IACAkve,KAGHt+rB,KAAK44rB,QAAQsC,wBACdl7rB,KAAK44rB,QAAQtnqB,UAAU3vB,YAAY3B,KAAK89rB,qBACpC99rB,KAAK44rB,QAAQmF,aAAaC,WAC1Bh+rB,KAAK44rB,QAAQtnqB,UAAU3vB,YAAY3B,KAAKi+rB,uBASpD9uX,EAAO9zU,UAAUovX,kBAAoB,SAAUj0V,GAC3C,IAAIq0V,EAAiBr0V,EAEjB26U,EAAWn0U,GAAkBG,GADjC0tV,EAAqC,gBAAnBA,EAAoChvX,OAAOsR,iBAAiB3M,SAASuL,KAAM,MAAM4lD,gBAAkBk5T,IAGrH,OADex+W,KAAKoxB,OAAoB,IAAb0zU,EAASvqS,EAAuB,IAAbuqS,EAAStqS,EAAuB,IAAbsqS,EAASrqS,GAAW,MAClE,IAAM,QAAU,SAOvCqoQ,EAAO9zU,UAAU6jsB,iBAAmB,SAAUC,GAC1C,IAAuC,IAAnCA,EAAO5gsB,QAAQ,eACf,IAAwC,IAApC4gsB,EAAO5gsB,QAAQ,gBAAwB,CACvC,IAA+C,IAA3C4gsB,EAAO5gsB,QAAQ,uBAA+B,CAC9C,IAAI0pP,EAAYk3c,EAAO5gsB,QAAQ,uBAAyB,GACxD4gsB,EAASn/rB,KAAK44rB,QAAQ53rB,QAAQsC,GAAK,gBAAkB67rB,EAAO99rB,MAAM4mP,GAEtE,IAAIjnP,EAAUR,SAASosB,eAAeuyqB,GACtC,GAAIn/rB,KAAK44rB,QAAQwG,qBAAuBD,EAAQ,CAC5C,GAAIn/rB,KAAK44rB,QAAQmF,aAAasB,uBAAwB,EAC9CC,EAAa9+rB,SAASosB,eAAe5sB,KAAK44rB,QAAQwG,uBAElDE,EAAW56rB,MAAM+I,QAAU,KAE/BzM,EAAQ0D,MAAM+I,QAAU,OAE5BzN,KAAK44rB,QAAQwG,mBAAqBD,QAItC,GAAIn/rB,KAAK44rB,QAAQmF,aAAasB,uBAAwB,CAClD,IAAIC,GAAAA,EAAa9+rB,SAASosB,eAAe5sB,KAAK44rB,QAAQwG,uBAElDE,EAAW56rB,MAAM+I,QAAU,IAC3BzN,KAAK44rB,QAAQwG,mBAAqB,MAWtDjwX,EAAO9zU,UAAUwjsB,gBAAkB,SAAU52qB,EAAKs0Q,GAC9C,IAAIvgQ,EAASugQ,EACT0iC,EAAuC,OAA5BjjS,EAAOrsB,MAAM,WAC5B3P,KAAKg8B,OAASh8B,KAAK44rB,QAAQ3pnB,KAAKC,iBAC5BlzC,OAAQijS,EAAW,GAAKjjS,IAE5B,IAAIh/B,EAAQ,GAIZ,MAHuB,KAAnBirB,EAAI/a,aACJlQ,EAAQgD,KAAK4hF,YAAYq9O,EAAUjjS,EAAQ/T,IAExCjrB,GAOXmyU,EAAO9zU,UAAUkksB,eAAiB,SAAUxyrB,EAAGC,GAC3C,IAAImvB,EACAqjqB,KACJA,EAAiBh7rB,KAAKxE,KAAK44rB,QAAQ6G,cAAcf,uBAAuB,GAAG,IAC3E,IAAIgB,EAAQrzrB,KAAKwmB,MAAM9lB,EAAIyyrB,EAAiB,GAAGzyrB,GAAKyyrB,EAAiB,GAAGxprB,OACpEhW,KAAK44rB,QAAQjyX,gBAAgB,GAAGy1X,cAChC/vrB,KAAKwmB,MAAM9lB,EAAIyyrB,EAAiB,GAAGzyrB,GAAKyyrB,EAAiB,GAAGxprB,OAC5DhW,KAAK44rB,QAAQjyX,gBAAgB,GAAGy1X,cAChCuD,EAAQtzrB,KAAK+S,OAAQpS,EAAIwyrB,EAAiB,GAAGxyrB,GAAKwyrB,EAAiB,GAAGzprB,QACtE/V,KAAK44rB,QAAQjyX,gBAAgB,GAAGy1X,cAChC/vrB,KAAK+S,OAAQpS,EAAIwyrB,EAAiB,GAAGxyrB,GAAKwyrB,EAAiB,GAAGzprB,QAC9D/V,KAAK44rB,QAAQjyX,gBAAgB,GAAGy1X,cAAgB,EAOpD,OANAsD,EAAkB,IAAVA,EAAc,EAAIA,EAC1BvjqB,EAAcn8B,KAAK44rB,QAAQ6G,cAAcf,uBAAuBiB,GAAOD,EAAQ,GAC/E1/rB,KAAK4/rB,gBAAkB5/rB,KAAK44rB,QAAQjyX,gBAAgB,GAAGw1X,cAAcuD,EAAQ,GAC7E1/rB,KAAK6/rB,gBAAkB7/rB,KAAK44rB,QAAQjyX,gBAAgB,GAAGg8B,WAAW+8V,EAAQ,GAC1E1/rB,KAAK8/rB,gBAAkB9/rB,KAAK44rB,QAAQjyX,gBAAgB,GAAGw1X,cAAen8rB,KAAK44rB,QAAQjyX,gBAAgB,GAAGw1X,cAAc1/rB,OAAS,EAAKkjsB,GAClI3/rB,KAAK+/rB,gBAAkB//rB,KAAK44rB,QAAQjyX,gBAAgB,GAAGg8B,WAAY3iW,KAAK44rB,QAAQjyX,gBAAgB,GAAGg8B,WAAWlmW,OAAS,EAAKkjsB,GACrHxjqB,GAMXgzS,EAAO9zU,UAAUumF,YAAc,SAAUq9O,EAAUjjS,EAAQrD,GACvD,OAAOsmS,EAAWjjS,EAAOzsB,QAAQ,UAAWvP,KAAKg8B,OAAOrD,IAClD34B,KAAKg8B,OAAOrD,IAEfw2S,KC/OP6wX,GAAgC,WAChC,SAASA,EAAepH,GACpB54rB,KAAK44rB,QAAUA,EA2EnB,OArEAoH,EAAe3ksB,UAAU2wX,kBAAoB,SAAUzoT,GACnD,IAAI08nB,EAAgBvhsB,KAAW6kE,EAAY,MAAM,GACjDvjE,KAAK44rB,QAAQmG,oBACb/+rB,KAAKkgsB,sBAcL,IAAK,IATD9oqB,EACAwzL,EAKAu1e,EAVAhqrB,EAAOnW,KAAK44rB,QAAQjyX,gBACpBy5X,EAAajqrB,EAAK,GAAG04H,UAAY,EACjCyiO,EAAcn7V,EAAK,GAAGimrB,eAAiBjmrB,EAAK,GAAG4J,IAAM,EAAI5J,EAAK,GAAG4J,IAAM,GACvE4a,EAAUylqB,EAAa9uV,EAAc8uV,EAAa9uV,EAKlD12U,GAFJwlqB,EAAajqrB,EAAK,GAAG04H,UAAY,IACjCyiO,EAAcn7V,EAAK,GAAGimrB,eAAiBjmrB,EAAK,GAAG4J,IAAM,EAAI5J,EAAK,GAAG4J,IAAM,IAC9BqgrB,EAAa9uV,EAGlD+uV,EAAiB,EACjBC,KACKv6lB,EAA0B,aAAtB5vF,EAAK,GAAG+b,UAA2B/b,EAAK,GAAG4J,IAAM,EAAGgmF,EAAInrE,EAASmrE,IAAK,CAC/E,IAAIkiJ,EAAkC,aAAtB9xO,EAAK,GAAG+b,UAA2B/b,EAAK,GAAG4J,IAAM,EAEjE,IADA/f,KAAKkgsB,mBAAmB17rB,SACjByjP,EAAYttN,GACXstN,GAAa9xO,EAAK,GAAG4J,KAAOkoO,GAAa9xO,EAAK,GAAG7J,MAC7C2zrB,EAAch4c,KAAeg4c,EAAch4c,GAAWliJ,IACrB,IAAhCk6lB,EAAch4c,GAAWliJ,IACqB,KAA3Ck6lB,EAAch4c,GAAWliJ,GAAG74F,YAChClN,KAAKkgsB,mBAAmBG,GAAgB77rB,KAAKy7rB,EAAch4c,GAAWliJ,IAGtE/lG,KAAKkgsB,mBAAmBG,GAAgB77rB,KAAK,KAGrDyjP,IAEJk4c,EAAezhsB,KAAWsB,KAAKkgsB,mBAAmBG,GAAiB,MAAM,GACrE5isB,EAAkB25B,GAClBA,EAAS+oqB,EAAatoqB,KAAK,SAAUsrB,EAAGrmB,GAAK,OAAOqmB,EAAIrmB,IAAMkK,OAAOhnC,KAAKugsB,UAAU,GAE/EJ,EAAatoqB,KAAK,SAAUsrB,EAAGrmB,GAAK,OAAOqmB,EAAIrmB,IAAMkK,OAAOhnC,KAAKugsB,UAAU,GAAKnpqB,IACrFA,EAAS+oqB,EAAatoqB,KAAK,SAAUsrB,EAAGrmB,GAAK,OAAOqmB,EAAIrmB,IAAMkK,OAAOhnC,KAAKugsB,UAAU,IAEpF9isB,EAAkBmtN,GAClBA,EAASv+M,KAAKC,IAAI/Q,MAAM8Q,KAAMrM,KAAKkgsB,mBAAmBG,IAEjDh0rB,KAAKC,IAAI/Q,MAAM8Q,KAAMrM,KAAKkgsB,mBAAmBG,IAAmBz1e,IACrEA,EAASv+M,KAAKC,IAAI/Q,MAAM8Q,KAAMrM,KAAKkgsB,mBAAmBG,KAEtDrgsB,KAAK44rB,QAAQ9grB,MAAMoc,aACnBl0B,KAAKkgsB,mBAAmBG,GAAkBrgsB,KAAKkgsB,mBAAmBG,GAAgB3gpB,WAElFqmD,GAAK/lG,KAAK44rB,QAAQjyX,gBAAgB,GAAG5mT,KAAOgmF,GAAK/lG,KAAK44rB,QAAQjyX,gBAAgB,GAAGr6T,KACjFg0rB,EAAiB97rB,KAAKxE,KAAKkgsB,mBAAmBG,IAElDA,IAECrgsB,KAAK44rB,QAAQhhrB,MAAMsc,aACpBl0B,KAAKkgsB,mBAAmBxgpB,UACxB4gpB,EAAiB5gpB,WAErB1/C,KAAK44rB,QAAQmG,iBAAmBuB,EAChCtgsB,KAAK44rB,QAAQsB,mBAAqBz8rB,EAAkB25B,GAAU,EAAI5b,WAAW4b,EAAOlqB,YACpFlN,KAAK44rB,QAAQqB,mBAAqBx8rB,EAAkBmtN,GAAU,EAAIpvM,WAAWovM,EAAO19M,aAMxF8yrB,EAAe3ksB,UAAUklsB,SAAW,SAAUt4qB,GAC1C,OAAQxqB,EAAkBwqB,IAA2B,KAAnBA,EAAI/a,YAEnC8yrB,KC9EP11mB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAW5Dg5S,GAAgC,SAAUzqP,GAE1C,SAASyqP,IACL,OAAkB,OAAXzqP,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KA0B/D,OA5BAsqF,GAAUsrP,EAAgBzqP,GAI1BN,IACI3jF,EAAS,KACV0uU,EAAev6U,UAAW,cAAU,GACvCwvF,IACI3jF,EAAS,KACV0uU,EAAev6U,UAAW,aAAS,GACtCwvF,IACI3jF,EAAS,UACV0uU,EAAev6U,UAAW,gBAAY,GACzCwvF,IACI3jF,GAAS,IACV0uU,EAAev6U,UAAW,eAAW,GACxCwvF,IACI3jF,EAAS,WACV0uU,EAAev6U,UAAW,iBAAa,GAC1CwvF,IACI3jF,GAAS,IACV0uU,EAAev6U,UAAW,iBAAa,GAC1CwvF,IACI3jF,GAAS,IACV0uU,EAAev6U,UAAW,2BAAuB,GACpDwvF,IACI9iF,EAAQotR,GAAMqnC,gBAAiBG,KAChCiZ,EAAev6U,UAAW,iBAAa,GACnCu6U,GACT52Q,IAEEg3S,GAAwB,WACxB,SAASA,EAAO4iV,GACZ54rB,KAAKwgsB,mBAAqB,IAAIpzqB,GAAK,EAAG,GACtCptB,KAAKygsB,kBAAoB,GACzBzgsB,KAAK0gsB,uBACL1gsB,KAAKy4X,oBACLz4X,KAAKi3U,WAAa,GAClBj3U,KAAK2gsB,gBAAkB,IAAIlF,GAAgB,EAAG,EAAG,EAAG,EAAG,EAAG,GAC1Dz7rB,KAAK4gsB,YAAc,EACnB5gsB,KAAK6gsB,cAAgB,EACrB7gsB,KAAK8gsB,UAAY,EACjB9gsB,KAAKouF,SAAW,IAAIl4D,GAAK,EAAG,EAAG,EAAG,GAClCl2B,KAAK+gsB,WAAa,IAAI7qqB,GAAK,EAAG,EAAG,EAAG,GACpCl2B,KAAKszP,YAAc,EACnBtzP,KAAKghsB,YACLhhsB,KAAKihsB,yBACLjhsB,KAAKkhsB,WAAa,IAAIhrqB,GAAK,EAAG,EAAG,EAAG,GACpCl2B,KAAKmhsB,aAAe,GACpBnhsB,KAAKohsB,sBACLphsB,KAAKqhsB,qBACLrhsB,KAAKshsB,qBACLthsB,KAAKuhsB,sBACLvhsB,KAAKwhsB,sBACLxhsB,KAAK44rB,QAAUA,EACf54rB,KAAKm9rB,cAAgB,IAAInC,GAAcpC,GAmzB3C,OA7yBA5iV,EAAO36W,UAAUkkC,cAAgB,WAC7B,MAAO,UAOXy2U,EAAO36W,UAAUiX,QAAU,SAAUsmrB,KASrC5iV,EAAO36W,UAAUomsB,kBAAoB,SAAU7I,GAC3C,IAAIsF,GACA1nqB,MAAO,cACPxgB,MAAO,GAEXhW,KAAKm2U,OAASyiX,EAAQ/qqB,SAASw+C,aAAc/oE,GAAIs1rB,EAAQ53rB,QAAQsC,GAAK,oBACtE,IAAIo+rB,EAAY,IAAIx9X,GAAW00X,EAAQ53rB,QAAQsC,GAAK,eAAgB,OAAQ46rB,EAAY,EAAGl+rB,KAAKs3U,aAChGt3U,KAAKm9rB,cAAcx5pB,cAAc+9pB,EAAW1hsB,KAAKm2U,QACjD,IAAIwxC,EAAc3nX,KAAK2hsB,gBACnBC,EAAe,IAAI1rqB,GAAKyxV,EAAY56W,EAAG46W,EAAY36W,EAAG26W,EAAY3xW,MAAO2xW,EAAY5xW,QACzF,GAAqC,aAAjC6irB,EAAQgB,gBAAgBlzrB,KAAqB,CAC7C,IAAIk3B,OAAO,EACX,GAAIg7pB,EAAQsC,sBAAuB,CAC/B,IAAIt/S,OAAM,EACN3uT,EAAM2rmB,EAAQwC,eAAenumB,IAE7B2uT,EADAg9S,EAAQiJ,mBACF50mB,EAAI4C,qBAAqB83R,EAAY56W,EAAG,EAAG46W,EAAY56W,EAAI46W,EAAY3xW,MAAO,GAG9Ei3E,EAAI4C,qBAAqB,EAAG83R,EAAY36W,EAAG,EAAG26W,EAAY36W,EAAI26W,EAAY5xW,QAEpF,IAAK,IAAI5Z,EAAI,EAAGA,EAAIy8rB,EAAQc,sBAAsBj9rB,OAAQN,IAAK,CAC3D,IAAIa,GAAU47rB,EAAQc,sBAAsBv9rB,GAAGa,MAAQgD,KAAK8hsB,iBACvD9hsB,KAAK+hsB,eAAiB/hsB,KAAK8hsB,gBAChC9ksB,EAAQglD,MAAMhlD,GAAS,EAAIA,EAC3B4+Y,EAAItrT,aAAatzF,EAAO47rB,EAAQc,sBAAsBv9rB,GAAGq6B,OAE7Dy2D,EAAIkB,UAAYytT,EAChBh+W,EAAOg+W,EAAI1uY,eAEV,CAII,IAHD80rB,OAAkB,EAClBC,OAAgB,EAChBC,KACJ,IAAS/lsB,EAAI,EAAGA,EAAIy8rB,EAAQc,sBAAsBj9rB,OAAQN,IAAK,CAC3D,IAAIgmsB,GAAuBvJ,EAAQc,sBAAsBv9rB,GAAGa,MAAQgD,KAAK8hsB,iBACpE9hsB,KAAK+hsB,eAAiB/hsB,KAAK8hsB,gBAAmB,IACnDK,EAAqBngpB,MAAMmgpB,GAAsB,EAAIA,EACrDF,EAAgB,IAAI1G,GAAc3C,EAAQc,sBAAsBv9rB,GAAGq6B,MAAO2rqB,EAAqB,KAC/FD,EAAgB19rB,KAAKy9rB,GAGrBD,EADApJ,EAAQiJ,mBACU,IAAIn/S,GAASk2S,EAAQ53rB,QAAQsC,GAAK,kBAAmB,KAAM,OAAQ,KAAM,MAGzE,IAAIo/Y,GAASk2S,EAAQ53rB,QAAQsC,GAAK,kBAAmB,KAAM,KAAM,KAAM,QAE7F,IAAI8+rB,EAAiBxJ,EAAQ/qqB,SAASwrF,aAAa,iBAAkB2olB,EAAiBE,GACtFlisB,KAAKm2U,OAAOx0U,YAAYygsB,GACxBxkqB,EAAO,QAAUg7pB,EAAQ53rB,QAAQsC,GAAK,mBAE1C,IAAI++rB,EAAc,IAAIn+X,GAAW00X,EAAQ53rB,QAAQsC,GAAK,mBAAoBs6B,EAAMsgqB,EAAY,EAAG0D,GAC/F5hsB,KAAKm9rB,cAAcx5pB,cAAc0+pB,EAAarisB,KAAKm2U,QAC9CyiX,EAAQsC,uBACTtC,EAAQtnqB,UAAU3vB,YAAY3B,KAAKm2U,QAEvCn2U,KAAKsisB,oBAAoBV,GACrBhJ,EAAQxiX,eAAe4nX,WACvBh+rB,KAAKuisB,kBAAkB3J,EAASgJ,OAGnC,CACD5hsB,KAAKwisB,YAAc5J,EAAQ/qqB,SAASw+C,aAAc/oE,GAAIs1rB,EAAQ53rB,QAAQsC,GAAK,0BAC3E,IAAIm/rB,EAAW,IAAIv+X,GAAW00X,EAAQ53rB,QAAQsC,GAAK,kBAAmB,OAAQ46rB,EAAY,EAAGl+rB,KAAK2hsB,iBAClG3hsB,KAAKm9rB,cAAcx5pB,cAAc8+pB,EAAUzisB,KAAKwisB,aAC3C5J,EAAQsC,uBACTl7rB,KAAKm2U,OAAOx0U,YAAY3B,KAAKwisB,aAEjCxisB,KAAK0isB,eAAiB9J,EAAQ/qqB,SAASw+C,aAAc/oE,GAAIs1rB,EAAQ53rB,QAAQsC,GAAK,eAC9EtD,KAAK2isB,qBAAqBf,EAAchJ,GACpC54rB,KAAK6gsB,cAAgB,IACrB7gsB,KAAK+4U,YAAc6/W,EAAQ/qqB,SAASw+C,aAAc/oE,GAAIs1rB,EAAQ53rB,QAAQsC,GAAK,iBAE/EtD,KAAK4isB,qBAAqBhB,KAGlC5rV,EAAO36W,UAAUknsB,kBAAoB,SAAU3J,EAASvlqB,GACpD,IAAIxf,EACAgvrB,EACArzqB,EACAszqB,EAAgB,EAEpB,GADA9isB,KAAKohsB,sBACDxI,EAAQsC,sBAAuB,CAC/B,IAAIjumB,EAAM2rmB,EAAQwC,eAAenumB,IACjCA,EAAI55D,KAAKrzB,KAAKs3U,YAAYvqU,EAAG/M,KAAKs3U,YAAYtqU,EAAGhN,KAAKs3U,YAAYthU,MAAOhW,KAAKs3U,YAAYvhU,QAC1Fk3E,EAAIwwJ,YAGJjuN,EAAcopqB,EAAQ/qqB,SAASw+C,aAAc/oE,GAAIs1rB,EAAQ53rB,QAAQsC,GAAK,yBAI1E,IAAK,IAFDg7Y,EACAC,EACKpiZ,EAAI,EAAGA,EAAIy8rB,EAAQc,sBAAsBj9rB,OAAQN,IAAK,CAC3D,IAAIa,GAAU47rB,EAAQc,sBAAsBv9rB,GAAGa,MAAQgD,KAAK8hsB,iBACvD9hsB,KAAK+hsB,eAAiB/hsB,KAAK8hsB,gBAAmB,IAYnD,GAXIlJ,EAAQiJ,oBACRvjT,EAASt+Y,KAAK0gsB,oBAAoBvksB,GAClCoiZ,EAASlrX,EAAKrmB,EAAIqmB,EAAKtd,OAAS/V,KAAK2rU,aACrC93T,EAAoB,IAAV7W,EAAe,QAAWb,IAAMy8rB,EAAQc,sBAAsBj9rB,OAAS,EAAK,MAAQ,SAC9FomsB,EAAmB,YAGnBvkT,EAASjrX,EAAKtmB,EAAIsmB,EAAKrd,MAAQhW,KAAK2rU,aACpC4yE,EAASv+Y,KAAK0gsB,oBAAoBvksB,GAClC0msB,EAA8B,IAAV7lsB,EAAe,UAAab,IAAMy8rB,EAAQc,sBAAsBj9rB,OAAS,EAAK,WAAa,UAE/Gm8rB,EAAQiJ,mBAAoB,CAC5B,IAAIkB,GAAwB/isB,KAAK0gsB,oBAAoBvksB,GAAK6D,KAAK0gsB,oBAAoBvksB,EAAI,IAAM,EACzF6msB,GAAoBhjsB,KAAK0gsB,oBAAoBvksB,EAAI,GAAK6D,KAAK0gsB,oBAAoBvksB,IAAM,EAErF2msB,EADA3msB,IAAMy8rB,EAAQc,sBAAsBj9rB,OAAS,EAC7BsmsB,EAEL,IAAN5msB,EACW6msB,EAGAD,EAAuBC,EAAmBD,EAAuBC,OAIrFF,EAAgB9isB,KAAKgW,OAAShW,KAAK2hsB,gBAAgB3rrB,MAAQhW,KAAK2rU,aAC5D3rU,KAAKijsB,mBAEb,GAAiC,KAA7BjjsB,KAAKy4X,iBAAiBt8X,GAAW,CACjC,IAAIswB,EAAOwT,GAASjgC,KAAKy4X,iBAAiBt8X,GAAIy8rB,EAAQxiX,eAAehyC,UAAW0+Z,GAChF,GAAoB,IAAhBr2qB,EAAKhwB,SAA4C,IAA5BgwB,EAAK,GAAGluB,QAAQ,QAAiBq6rB,EAAQsC,sBAAuB,CACrF,IAAIp3Z,EAAct3Q,GAAYxsB,KAAKy4X,iBAAiBt8X,GAAIy8rB,EAAQxiX,eAAehyC,WAC/EpkS,KAAKohsB,mBAAmB58rB,KAAK,IAAIg3rB,GAAcx7rB,KAAKy4X,iBAAiBt8X,GAAI,IAAI+5B,GAAKooX,EAAQC,EAAQz6G,EAAY9tR,MAAO8tR,EAAY/tR,UAErI,IAAImtrB,EAAY,IAAItI,GAAUt8S,EAAQC,EAAQ1qY,EAAQ4Y,EAAM,EAAG,iBAAkBo2qB,GAC7E7vrB,EAAU,IAAIujB,GAAWqiqB,EAAQ53rB,QAAQsC,GAAK,gBAAkBnH,EAAG+msB,EAAWtK,EAAQxiX,eAAehyC,UAAWw0Z,EAAQxiX,eAAehyC,UAAU5tQ,OAASoiqB,EAAQviqB,WAAW7G,aAC7K/C,EAAKhwB,OAAS,EACduD,KAAKm9rB,cAAc7B,eAAetorB,EAAS4lrB,EAAQxiX,eAAehyC,UAAWpkS,KAAKm2U,QAGlFn2U,KAAKm9rB,cAAc/rqB,WAAWpe,EAASwc,EAAa/C,EAAK,IAEzDjhB,GAAQwiG,OAAS4qlB,EAAQsC,wBACA,WAArB2H,EACArzqB,EAAYs4G,UAAUtkI,aAAa,KAAM,SAEf,YAArBq/rB,GACLrzqB,EAAYs4G,UAAUtkI,aAAa,KAAM,WAKzD,IAAKo1rB,EAAQsC,sBAAuB,CAChCl7rB,KAAKm2U,OAAOx0U,YAAY6tB,GACxB,IAAI+oT,EAAWqgX,EAAQ/qqB,SAASgrF,gBAAiBv1G,GAAIs1rB,EAAQ53rB,QAAQsC,GAAK,cACtEoxB,EAAWkkqB,EAAQ/qqB,SAAS8V,cAAc3jC,KAAKs3U,aACnDiB,EAAS52U,YAAY+yB,GACrBkkqB,EAAQtnqB,UAAU3vB,YAAY42U,GAC9Bv4U,KAAKm2U,OAAO3yU,aAAa,QAAS,kBAAoB+0U,EAASj1U,GAAK,OAM5E0yW,EAAO36W,UAAU8nsB,sBAAwB,SAAUtisB,EAAGiL,EAAOI,GACzD,IAKIspB,EACAxiB,EACAowrB,EACA1H,EACAC,EACAC,EACAC,EACAC,EACAC,EAbAnD,EAAU54rB,KAAK44rB,QAEfyK,EADczK,EAAQ6G,cAAcF,eAAezzrB,EAAOI,GAClClP,MAAMkQ,WAC9BmmB,EAAOrzB,KAAK2hsB,gBAWhB,GAA6B,KAAzB0B,EAAUn2rB,WAwBV,GAvBK0rrB,EAAQiJ,oBAYTuB,EADa/vqB,EAAKrd,MAAQ,MACEshB,OAAO+rqB,GAAarjsB,KAAK8hsB,iBAChD9hsB,KAAK+hsB,eAAiB/hsB,KAAK8hsB,iBAAmB,IACnDpG,EAASroqB,EAAKtmB,EAAIq2rB,EAClBzH,EAAStoqB,EAAKrmB,EAAIqmB,EAAKtd,OACvB6lrB,EAASvoqB,EAAKtmB,EAAI,EAAIq2rB,EACtBvH,EAASE,EAAS1oqB,EAAKrmB,EAAIqmB,EAAKtd,OAAS,EACzC+lrB,EAASzoqB,EAAKtmB,EAAI,EAAIq2rB,IAhBtBA,EADa/vqB,EAAKtd,OAAS,MACCuhB,OAAO+rqB,GAAarjsB,KAAK8hsB,iBAChD9hsB,KAAK+hsB,eAAiB/hsB,KAAK8hsB,iBAAmB,IACnDpG,EAASroqB,EAAKtmB,EAAI,EAClB4urB,EAAStoqB,EAAKrmB,EAAIo2rB,EAClBxH,EAASE,EAASzoqB,EAAKtmB,EAAI,EAC3B8urB,EAASxoqB,EAAKrmB,EAAI,EAAIo2rB,EACtBrH,EAAS1oqB,EAAKrmB,EAAI,EAAIo2rB,GAY1B5tqB,EAAY,KAAYkmqB,EAAS,IAAMC,EAAS,MAChCC,EAAS,IAAMC,EAAS,MAAkBC,EAAS,IAAMC,EAAS,KAClF/orB,EAAU,IAAIojB,GAAWwiqB,EAAQ53rB,QAAQsC,GAAK,oBAAqB,OAAQ,IAAM,UAAW,EAAG,MAAOkyB,GACjGojqB,EAAQsC,sBAKR,CACDl7rB,KAAKsjsB,sBAAsB1K,GAE3BA,EAAQwC,eAAejlqB,SAASnjB,OADV,GAEtBhT,KAAK2gsB,gBAAgBjF,OAASA,EAC9B17rB,KAAK2gsB,gBAAgBhF,OAASA,EAC9B37rB,KAAK2gsB,gBAAgB/E,OAASA,EAC9B57rB,KAAK2gsB,gBAAgB9E,OAASA,EAC9B77rB,KAAK2gsB,gBAAgB7E,OAASA,EAC9B97rB,KAAK2gsB,gBAAgB5E,OAASA,OAb9B/7rB,KAAKujsB,gBAAkB3K,EAAQ/qqB,SAASsI,SAASnjB,GACjDhT,KAAKujsB,gBAAgB7+rB,MAAMC,WAAa,UACxC3E,KAAKm2U,OAAOx0U,YAAY3B,KAAKujsB,sBAejCvjsB,KAAKsjsB,sBAAsB1K,IAMnC5iV,EAAO36W,UAAUiosB,sBAAwB,SAAU1K,GAC3C54rB,KAAKujsB,kBAAoB3K,EAAQsC,sBACjCl7rB,KAAKujsB,gBAAgB7+rB,MAAMC,WAAa,SAEnCi0rB,EAAQsC,wBACoC,IAA7C58rB,OAAOhB,KAAK0C,KAAK2gsB,iBAAiBlksB,SAC9Bm8rB,EAAQiJ,oBACR7hsB,KAAKouF,SAASrhF,EAAI/M,KAAK2gsB,gBAAgB/E,OAAS,EAChD57rB,KAAKouF,SAASphF,EAAIhN,KAAK2gsB,gBAAgBhF,OACvC37rB,KAAKouF,SAASp4E,MAAQhW,KAAK2gsB,gBAAgB7E,OAAS97rB,KAAK2gsB,gBAAgB/E,OAAS,EAClF57rB,KAAKouF,SAASr4E,OAAS/V,KAAK2gsB,gBAAgB9E,OAAS,EAAI77rB,KAAK2gsB,gBAAgBhF,SAG9E37rB,KAAKouF,SAASrhF,EAAI/M,KAAK2gsB,gBAAgB/E,OAAS,EAChD57rB,KAAKouF,SAASphF,EAAIhN,KAAK2gsB,gBAAgB9E,OAAS,EAChD77rB,KAAKouF,SAASp4E,MAAQhW,KAAK2gsB,gBAAgBjF,OAAS17rB,KAAK2gsB,gBAAgB/E,OAAS,EAClF57rB,KAAKouF,SAASr4E,OAAS/V,KAAK2gsB,gBAAgB5E,OAAS/7rB,KAAK2gsB,gBAAgB9E,OAAS,IAG3FjD,EAAQwC,eAAenumB,IAAIkB,UAAYyqmB,EAAQviqB,WAAW5G,WAC1DmpqB,EAAQwC,eAAenumB,IAAImB,SAASpuF,KAAKouF,SAASrhF,EAAG/M,KAAKouF,SAASphF,EAAGhN,KAAKouF,SAASp4E,MAAOhW,KAAKouF,SAASr4E,UAMjHigW,EAAO36W,UAAUk7U,sBAAwB,SAAUljT,GAC/C,IAAIulqB,EAAU54rB,KAAK44rB,QACfxiX,EAAiBwiX,EAAQxiX,eACzBqjX,EAAkBb,EAAQc,sBAC9B15rB,KAAKy4X,oBAC2B,WAA5BriD,EAAeliU,UAAqD,QAA5BkiU,EAAeliU,UAC3B,UAA5BkiU,EAAeliU,UAAoD,SAA5BkiU,EAAeliU,WACtDkiU,EAAeliU,SAAW,SAE9B0krB,EAAQiJ,mBAAiD,WAA5BzrX,EAAeliU,UAAqD,QAA5BkiU,EAAeliU,SACpFlU,KAAKijsB,kBAAoBrK,EAAQiJ,mBAAqB,GAAK,GAC3D7hsB,KAAK2rU,aAAeyK,EAAe4nX,UAAYh+rB,KAAK44rB,QAAQiJ,mBAAqB,GAAK,EAAI,EAC1F7hsB,KAAK82U,aAAeV,EAAergU,OACnC/V,KAAK+2U,YAAcX,EAAepgU,MAClC,IAAK,IAAI7Z,EAAI,EAAGA,EAAIs9rB,EAAgBh9rB,OAAQN,IAAK,CAC7C,IAAIkX,EAAQomrB,EAAgBt9rB,GAAGgyH,SAAW,GAAKsrkB,EAAgBt9rB,GAAGkX,MAC9DomrB,EAAgBt9rB,GAAGkX,MAAQomrB,EAAgBt9rB,GAAGa,MAAMkQ,WACnB,UAAjC0rrB,EAAQgB,gBAAgBlzrB,MAA8B,KAAV2M,GAI5CrT,KAAKy4X,iBAAiBj0X,KAAK6O,GAGE,aAAjCulrB,EAAQgB,gBAAgBlzrB,KACsB,SAA1C0vU,EAAehyC,UAAUhkQ,eACzBpgC,KAAKwgsB,mBAAqBxgsB,KAAKu8rB,gBAAgB3D,GAC3CA,EAAQiJ,oBAAgD,KAA1BzrX,EAAergU,OAC7C/V,KAAK82U,cAAiB,EAAI92U,KAAKijsB,kBAAqBjjsB,KAAKi3U,WAAaj3U,KAAKwgsB,mBAAmBzqrB,QAAQ7I,WAEhG0rrB,EAAQiJ,oBAA+C,KAAzBzrX,EAAepgU,OAA0D,SAA1CogU,EAAehyC,UAAUhkQ,eAC5FpgC,KAAK+2U,aAAgB,EAAI/2U,KAAKijsB,kBAAqBjjsB,KAAKi3U,WAAaj3U,KAAKwgsB,mBAAmBxqrB,OAAO9I,aAK5GlN,KAAKwjsB,0BAA0BnwqB,GAEnCrzB,KAAK82U,aAAe92U,KAAK82U,aAAe92U,KAAK82U,aAAe8hX,EAAQiJ,mBAAqB,KAAO,OAChG7hsB,KAAK+2U,YAAc/2U,KAAK+2U,YAAc/2U,KAAK+2U,YAAc6hX,EAAQiJ,mBAC7D,OAA0C,aAAjCjJ,EAAQgB,gBAAgBlzrB,KAAsB,KAAO,KAClE1G,KAAK+V,OAASsoB,GAAer+B,KAAK82U,aAAczjT,EAAKtd,QACrD/V,KAAKgW,MAAQqoB,GAAer+B,KAAK+2U,YAAa1jT,EAAKrd,OAC/C4irB,EAAQiJ,oBACR7hsB,KAAK+V,OAA0C,aAAjC6irB,EAAQgB,gBAAgBlzrB,MAAsB1G,KAAK+V,OAAS,GAAK,GAAmB/V,KAAK+V,OACvE,QAA5BqgU,EAAeliU,WACfmf,EAAKrmB,GAAKhN,KAAK+V,QAEnBsd,EAAKtd,QAAU/V,KAAK+V,SAGpB/V,KAAKgW,MAAyC,aAAjC4irB,EAAQgB,gBAAgBlzrB,MAAsB1G,KAAKgW,MAAQ,GAAK,GAAkBhW,KAAKgW,MACpE,SAA5BogU,EAAeliU,WACfmf,EAAKtmB,GAAK/M,KAAKgW,OAEnBqd,EAAKrd,OAAShW,KAAKgW,QAG3BggW,EAAO36W,UAAUmosB,0BAA4B,SAAUnwqB,GACnD,IAAIulqB,EAAU54rB,KAAK44rB,QACnB54rB,KAAK8gsB,UAAY,EACjB9gsB,KAAK4kN,WAAa,EAClB5kN,KAAKszP,YAAc,EAEnB,GAAIslc,EAAQiJ,mBAAoB,CAC5B,IAAK,IAAI1lsB,EAAI,EAAGA,EAAIy8rB,EAAQa,gBAAgBh9rB,OAAQN,IAAK,CACrD,IAAI2wB,EAAO,EACX,GAAI8rqB,EAAQxiX,eAAe4nX,UAAW,CAElClxqB,EAAON,GADIxsB,KAAKy4X,iBAAiBt8X,GACRy8rB,EAAQxiX,eAAehyC,WAAWpuR,MAE/D,IAAIytrB,EAAezjsB,KAAKi3U,WAAaj3U,KAAK2rU,aAAe7+S,EAAO9sB,KAAKmhsB,aACrEnhsB,KAAK8gsB,WAAa2C,EAEtBzjsB,KAAK8gsB,WAAa9gsB,KAAKmhsB,aAXb,GAYe,KAArBnhsB,KAAK+2U,cACL/2U,KAAK+2U,YAAc/2U,KAAK8gsB,UAAYztqB,EAAKrd,MAAQqd,EAAKrd,MAAM9I,WAAalN,KAAK8gsB,UAAU5zrB,YAElE,KAAtBlN,KAAK82U,eACL92U,KAAK0jsB,aAAer3rB,KAAKwmB,KAAK7yB,KAAK8gsB,UAAYziqB,GAAer+B,KAAK+2U,YAAa1jT,EAAKrd,QACrFhW,KAAK0jsB,aAAe1jsB,KAAK0jsB,aAAe,EAAI,EAAI1jsB,KAAK0jsB,aACrD1jsB,KAAK82U,cAAgB92U,KAAK8gsB,UAAYztqB,EAAKrd,OAAShW,KAAK8gsB,UAAYziqB,GAAer+B,KAAK+2U,YAAa1jT,EAAKrd,SACvGhW,KAAK0jsB,aAAe,IAAO1jsB,KAAKi3U,WAAaj3U,KAAKmhsB,cAAgBnhsB,KAAK0jsB,aAAgB1jsB,KAAKijsB,kBAC5FluqB,SAAS6jqB,EAAQxiX,eAAehyC,UAAUt3Q,KAAM,IApB9C,IAoB6D5f,aAC5DlN,KAAKi3U,WAAaj3U,KAAKmhsB,cAAgBnhsB,KAAK0jsB,aAAgB1jsB,KAAKijsB,mBAAmB/1rB,iBAI/FlN,KAAK4kN,YAAe5kN,KAAKi3U,WAAaj3U,KAAKmhsB,cAAgBvI,EAAQa,gBAAgBh9rB,OAAUuD,KAAKmhsB,aACxE,KAAtBnhsB,KAAK82U,eACL92U,KAAK82U,aAAe92U,KAAK4kN,WAAavxL,EAAKtd,OAASsd,EAAKtd,OAAO7I,WAAalN,KAAK4kN,WAAW13M,YAExE,KAArBlN,KAAK+2U,aAAwE,SAAlD6hX,EAAQxiX,eAAehyC,UAAUhkQ,eAC5DpgC,KAAKwgsB,mBAAqBxgsB,KAAKu8rB,gBAAgB3D,GAC/C54rB,KAAK+2U,aAAgB,EAAI/2U,KAAKijsB,kBAAqBjjsB,KAAKi3U,WAAaj3U,KAAK2rU,aACtE3rU,KAAKwgsB,mBAAmBxqrB,OAAO9I,YAGvCmxB,GAAer+B,KAAK82U,aAAczjT,EAAKtd,QAAU,KACjD/V,KAAK82U,aAAe,MAEpBz4S,GAAer+B,KAAK+2U,YAAa1jT,EAAKrd,OAAS,KAC/ChW,KAAK+2U,YAAc,OAG3Bi/B,EAAO36W,UAAUkhsB,gBAAkB,SAAU3D,GACzC,IAAKA,EAAQxiX,eAAe4nX,WAAapF,EAAQiJ,oBAAuD,UAAjCjJ,EAAQgB,gBAAgBlzrB,KAC3F,OAAO1G,KAAKwgsB,mBAIZ,IAAK,IADD3gqB,EAAY7/B,KAAKwgsB,mBACZrksB,EAAI,EAAGA,EAAIy8rB,EAAQa,gBAAgBh9rB,OAAQN,IAAK,CACrD,IAAI2wB,EAAON,GAAYxsB,KAAKy4X,iBAAiBt8X,GAAIy8rB,EAAQxiX,eAAehyC,WACxEvkQ,EAAU7pB,MAAS6pB,EAAU7pB,MAAQ8W,EAAK9W,MAAS6pB,EAAU7pB,MAAQ8W,EAAK9W,MAC1E6pB,EAAU9pB,OAAU8pB,EAAU9pB,OAAS+W,EAAK/W,OAAU8pB,EAAU9pB,OAAS+W,EAAK/W,OAElF,OAAO8pB,GAMfm2U,EAAO36W,UAAUsosB,oBAAsB,SAAUtwqB,EAAMuwqB,GACnD,IAEIp3rB,EACAE,EAHAksrB,EAAU54rB,KAAK44rB,QACfxiX,EAAiBwiX,EAAQxiX,eAIzB/mR,EAAY+mR,EAAe/mR,UAC3Bt5C,EAASsoB,GAAer+B,KAAK82U,aAAczjT,EAAKtd,QAChDC,EAAQqoB,GAAer+B,KAAK+2U,YAAa1jT,EAAKrd,OAC9CG,EAAOyirB,EAAQjyX,gBACfk9X,EAAmB,EACvB,GAAIjL,EAAQiJ,mBAAoB,CAC5B7rrB,EAAQA,EAAQqd,EAAKrd,MAAQqd,EAAKrd,MAAQA,EAC1CD,EAA0C,aAAjC6irB,EAAQgB,gBAAgBlzrB,KAAsBqP,EAAS,GAAKA,EAAS,GAAK/V,KAAK+V,OACxFvJ,EAAqB,SAAd6iD,EAAuBh8B,EAAKtmB,EAAkB,QAAdsiD,EAAsBh8B,EAAKtmB,EAAIsmB,EAAKrd,MAAQA,EAC/Eqd,EAAKtmB,EAAKsmB,EAAKrd,MAAQ,EAAMA,EAAQ,EACR,KAA7B4irB,EAAQ9grB,MAAMooB,MAAMzT,OACpBo3qB,EAAmBr3qB,GAAYosqB,EAAQ9grB,MAAMooB,MAAMzT,KAAMmsqB,EAAQ9grB,MAAMssR,WAAWruR,OAZ5E,IAcV,IAAI+1X,EAAa31X,EAAK,GAAGsf,gBAAkB,EAAItf,EAAK,GAAG+rT,aAAansT,OAAS8trB,EAdnE,GAeVn3rB,EAAkC,QAA5B0pU,EAAeliU,SAAqB0krB,EAAQkL,cAAcr3qB,KAAOm3qB,EACnEhL,EAAQn8pB,OAAO/vB,IAAM2mB,EAAKrmB,EAAIqmB,EAAKtd,OAAS+1X,MAE/C,CACD/1X,EAASA,EAASsd,EAAKtd,OAASsd,EAAKtd,OAASA,EAC9CC,EAAyC,aAAjC4irB,EAAQgB,gBAAgBlzrB,KAAsBsP,EAAQ,GAAKA,EAAQ,GAAKA,EAChFtJ,EAAoB,SAAd2iD,EAAuBh8B,EAAKrmB,EAAkB,QAAdqiD,EAAsBh8B,EAAKrmB,EAAIqmB,EAAKtd,OAASA,EAC/Esd,EAAKrmB,EAAKqmB,EAAKtd,OAAS,EAAMA,EAAS,EACV,KAA7B6irB,EAAQhhrB,MAAMsoB,MAAMzT,OACpBo3qB,EAAmBr3qB,GAAYosqB,EAAQhhrB,MAAMsoB,MAAMzT,KAAMmsqB,EAAQhhrB,MAAMwsR,WAAWruR,OAxB5E,IA0BV,IAAIy3X,EAAYr3X,EAAK,GAAGsf,gBAAkBtf,EAAK,GAAG+rT,aAAalsT,MAAQ6trB,EA1B7D,GA0B0F,EACpGr3rB,EAAmC,UAA5B4pU,EAAeliU,SAAuBmf,EAAKtmB,EAAIsmB,EAAKrd,MAAQw3X,EAAYorT,EAAQn8pB,OAAOjwB,KAElGxM,KAAKs3U,YAAc,IAAIphT,GAAK1pB,EAAME,EAAKsJ,EAAOD,GAC9C/V,KAAK+jsB,uBAAuB/jsB,KAAKs3U,cAGrC0+B,EAAO36W,UAAU2osB,uBAAyB,SAAU3wqB,GAChD,IAAIulqB,EAAU54rB,KAAK44rB,QAEnB,GAAIA,EAAQiJ,mBACJ7hsB,KAAK8gsB,UAAY9gsB,KAAKgW,OACtBhW,KAAK0jsB,aAAer3rB,KAAKwmB,KAAK7yB,KAAK8gsB,UAAY9gsB,KAAKgW,OACpDhW,KAAK4kN,YAAe5kN,KAAKi3U,WAAaj3U,KAAKmhsB,cAAgBnhsB,KAAK0jsB,aAChE1jsB,KAAK4gsB,YAAc5gsB,KAAK0jsB,cAAgB,EAAI1jsB,KAAK0jsB,aAAer3rB,KAAKwmB,MAAM7yB,KAAK+V,OAL1E,GAMFgf,SAAS6jqB,EAAQxiX,eAAehyC,UAAUt3Q,KAAM,IAChD9sB,KAAKijsB,oBAAsBjjsB,KAAKi3U,WAAaj3U,KAAKmhsB,eACtDnhsB,KAAK6gsB,cAAgBx0rB,KAAKwmB,KAAK7yB,KAAK0jsB,aAAe1jsB,KAAK4gsB,cAGxD5gsB,KAAK4gsB,YAAc,OAIvB,GAAI5gsB,KAAK4kN,WAAavxL,EAAKtd,QAAU/V,KAAK4kN,WAAa5kN,KAAK+V,OAAQ,CAChE,IAAIw9C,EAAYl1B,GAAer+B,KAAK82U,aAAczjT,EAAKtd,QACvDw9C,EAAYA,EAAYlgC,EAAKtd,OAASsd,EAAKtd,OAASw9C,EACpDvzD,KAAK4gsB,YAAcv0rB,KAAK+S,MAAMm0C,GAAavzD,KAAKi3U,WAAaj3U,KAAKmhsB,cAAgB,GAClFnhsB,KAAK6gsB,cAAgBx0rB,KAAKC,IAAI,EAAGD,KAAKwmB,KAAK+lqB,EAAQa,gBAAgBh9rB,OAASuD,KAAK4gsB,mBAGjF5gsB,KAAK4gsB,YAAchI,EAAQa,gBAAgBh9rB,OAC3CuD,KAAK82U,aAAe92U,KAAK4kN,WAAW13M,YAIhD8oW,EAAO36W,UAAU88U,qBAAuB,SAAUygX,GAC9C,GAAI54rB,KAAK6gsB,cAAgB,EAAG,CACxB7gsB,KAAKihsB,yBACLjhsB,KAAKm2U,OAAOx0U,YAAY3B,KAAK+4U,aAC7B,IACIkrX,EAAcjksB,KAAKs3U,YAAYvqU,EAAI/M,KAAKs3U,YAAYthU,MADzC,GAEXkurB,EAAclksB,KAAKs3U,YAAYtqU,EAAIhN,KAAKs3U,YAAYvhU,OAFzC,GAGX0W,EAAOzsB,KAAKszP,YAAc,IAAMtzP,KAAK6gsB,cACrCrkqB,EAAWhQ,GAAYC,EAAMmsqB,EAAQxiX,eAAehyC,WACpDkhE,EAAQ2+V,EAAcznqB,EAASxmB,MAAQ,GACvCktrB,EAAY,IAAItI,GAAUt1V,EAAO4+V,EAAa,QAASz3qB,EAAM,EAAG,iBAAkB,UAClFzZ,EAAU,IAAIujB,GAAWqiqB,EAAQ53rB,QAAQsC,GAAK,UAAW4/rB,EAAWtK,EAAQxiX,eAAehyC,UAAWw0Z,EAAQxiX,eAAehyC,UAAU5tQ,OAASoiqB,EAAQviqB,WAAW7G,aACvKxvB,KAAKm9rB,cAAc/rqB,WAAWpe,EAAShT,KAAK+4U,YAAatsT,GACrDjhB,GAAQwiG,OAAS4qlB,EAAQsC,uBACzBl7rB,KAAK+4U,YAAYjxM,UAAUtkI,aAAa,KAAM,SAElDxD,KAAKkhsB,WAAa,IAAIhrqB,GAAKovU,EAAO4+V,EAAc1nqB,EAASzmB,OAAS,EAAGymB,EAASxmB,MAAOwmB,EAASzmB,QAC9F,IAAIourB,EAAiB,IAAIjgY,GAAW00X,EAAQ53rB,QAAQsC,GAAK,cAAe,QAAUkzB,MAAO,cAAexgB,MAAO,GAAK,EAAGhW,KAAKkhsB,YAC5HlhsB,KAAKm9rB,cAAcx5pB,cAAcwgqB,EAAgBnksB,KAAK+4U,aACtD,IAAIqrX,EAAiB,IAAIlgY,GAAW00X,EAAQ53rB,QAAQsC,GAAK,cAAe,QAAUkzB,MAAO,cAAexgB,MAAO,GAAK,EAAG,IAAIkgB,GAAK+tqB,EAfjH,GAeyIC,EAAclrX,EAfvJ,GAAA,KAgBfh5U,KAAKm9rB,cAAcx5pB,cAAcygqB,EAAgBpksB,KAAK+4U,aACtD,IAAI84T,EAAa,OAA4B,IAAMqyD,EAAc,OAChDD,EAlBF,IAkB4B,KAAOC,EAAclrX,GAAgB,OAC3EirX,EAnBU,IAmBgB,KAAOC,KAAgC,IAClEzzU,EAAQnrB,EAAQ,GAChBwsS,EAAY,KAAYrhR,EAAQ,IAAMyzU,EAAc,OACvCzzU,EAtBF,IAsBsB,KAAOyzU,EAAclrX,GAAgB,OACrEy3C,EAvBU,IAuBU,KAAOyzU,KAAgC,IAC5DG,EAAgB,IAAIngY,GAAW00X,EAAQ53rB,QAAQsC,GAAK,aAAc,QAAUkzB,MAAO,cAAexgB,MAAO,GAAK,EAAG,IAAIkgB,GAAKu6V,EAAOyzU,EAAclrX,EAxBpI,GAAA,KAyBfh5U,KAAKm9rB,cAAcx5pB,cAAc0gqB,EAAerksB,KAAK+4U,aACrD,IAAIurX,EAAa,IAAIluqB,GAAWwiqB,EAAQ53rB,QAAQsC,GAAK,oBAAqB,OAAQ,IAAM,UAAW,EAAG,MAAOwuoB,GACzGyyD,EAAc,IAAInuqB,GAAWwiqB,EAAQ53rB,QAAQsC,GAAK,qBAAsB,OAAQ,IAAM,UAAW,EAAG,MAAOuuoB,GAG/G,GAFA7xoB,KAAKihsB,sBAAsBz8rB,KAAK4/rB,GAChCpksB,KAAKihsB,sBAAsBz8rB,KAAK6/rB,GAC3BzL,EAAQsC,sBAMR,CAEDtC,EAAQwC,eAAejlqB,SAASmuqB,OADV,GAEtB1L,EAAQwC,eAAejlqB,SAASouqB,OAFV,OAPU,CAChC,IAAI/zqB,EAAQooqB,EAAQ/qqB,SAASsI,SAASmuqB,GAClC7vlB,EAAamklB,EAAQ/qqB,SAASsI,SAASouqB,GAC3CvksB,KAAK+4U,YAAYp3U,YAAY6uB,GAC7BxwB,KAAK+4U,YAAYp3U,YAAY8yG,MASzCuhQ,EAAO36W,UAAU0osB,uBAAyB,SAAUt4oB,GAChD,IAEIj/C,EACAE,EACAqJ,EACAC,EALA4irB,EAAU54rB,KAAK44rB,QAMkB,UAAjCA,EAAQgB,gBAAgBlzrB,MACxB1G,KAAKgksB,uBAAuBpL,EAAQ9zX,iBAEpC8zX,EAAQiJ,oBACRr1rB,EAAOi/C,EAAM1+C,EATH,GAUVL,EAAM++C,EAAMz+C,EAAIhN,KAAKijsB,kBACrBjtrB,EAAyC,aAAjC4irB,EAAQgB,gBAAgBlzrB,KAAsB+kD,EAAMz1C,MAAQ,GAAcy1C,EAAMz1C,MAAS,EAAIhW,KAAKmhsB,aAC1GprrB,EAA0C,aAAjC6irB,EAAQgB,gBAAgBlzrB,KAAsB1G,KAAKygsB,mBACvDzgsB,KAAKi3U,WAAaj3U,KAAKmhsB,cAAgBnhsB,KAAK4gsB,YAAc5gsB,KAAKmhsB,eAGpE30rB,EAAOi/C,EAAM1+C,EAAI/M,KAAKijsB,kBACtBv2rB,EAAM++C,EAAMz+C,EAjBF,GAkBVgJ,EAAyC,aAAjC4irB,EAAQgB,gBAAgBlzrB,KAAsB1G,KAAKygsB,kBAAoBh1oB,EAAMz1C,MAlB3E,GAmBVD,EAA0C,aAAjC6irB,EAAQgB,gBAAgBlzrB,KAAsB+kD,EAAM11C,OAAS,IACjE/V,KAAKi3U,WAAaj3U,KAAKmhsB,cAAgBnhsB,KAAK4gsB,YAAc5gsB,KAAKmhsB,cAExEnhsB,KAAK2hsB,gBAAkB,IAAIzrqB,GAAK1pB,EAAME,EAAKsJ,EAAOD,GACb,aAAjC6irB,EAAQgB,gBAAgBlzrB,MACxB1G,KAAKwksB,uBAAuBxksB,KAAK2hsB,kBAGzC3rV,EAAO36W,UAAUmpsB,uBAAyB,SAAUzD,GAChD,IAEI0D,EACAh4qB,EAGAivqB,EACAC,EAPA/C,EAAU54rB,KAAK44rB,QACfvlqB,EAAOrzB,KAAK2hsB,gBAGZ+C,EAAoB,EACpBC,KAGJ3ksB,KAAK8hsB,eAAiBlJ,EAAQa,gBAAgB,GAAGz8rB,MACjDgD,KAAK+hsB,eAAiBnJ,EAAQa,gBAAgBb,EAAQa,gBAAgBh9rB,OAAS,GAAGO,MAClF,IAAK,IAAIb,EAAI,EAAGA,EAAIy8rB,EAAQc,sBAAsBj9rB,OAAQN,IACtD6D,KAAK8hsB,eAAiBlJ,EAAQc,sBAAsBv9rB,GAAGa,MAAQgD,KAAK8hsB,eAChElJ,EAAQc,sBAAsBv9rB,GAAGa,MAAQgD,KAAK8hsB,eAClD9hsB,KAAK+hsB,eAAiBnJ,EAAQc,sBAAsBv9rB,GAAGa,MAAQgD,KAAK+hsB,eAChEnJ,EAAQc,sBAAsBv9rB,GAAGa,MAAQgD,KAAK+hsB,eAEtD/hsB,KAAK8hsB,eAAiB9hsB,KAAK8hsB,eAAiBlJ,EAAQsB,mBAAqBtB,EAAQsB,mBAAqBl6rB,KAAK8hsB,eAC3G9hsB,KAAK+hsB,eAAiB/hsB,KAAK+hsB,eAAiBnJ,EAAQqB,mBAAqBrB,EAAQqB,mBAAqBj6rB,KAAK+hsB,eAC3G,IAAK,IAAI9vrB,EAAQ,EAAGA,EAAQ2mrB,EAAQc,sBAAsBj9rB,OAAQwV,IAAS,CACvE,IAAIjV,GAAU47rB,EAAQc,sBAAsBznrB,GAAOjV,MAAQgD,KAAK8hsB,iBAC3D9hsB,KAAK+hsB,eAAiB/hsB,KAAK8hsB,gBAAmB,IAC9ClJ,EAAQiJ,oBAMT4C,EAAapxqB,EAAKrd,MAAQ,IAC1B0lrB,EAASqF,EAAWh0rB,EAAK03rB,EAAaznsB,EACtC2nsB,EAAmBngsB,KAAKk3rB,KAPxB+I,EAAapxqB,EAAKtd,OAAS,IAC3B4lrB,EAASoF,EAAW/zrB,EAAKy3rB,EAAaznsB,EACtC2nsB,EAAmBngsB,KAAKm3rB,IAQhC,GAAI/C,EAAQiJ,oBAAwE,SAAlDjJ,EAAQxiX,eAAehyC,UAAUhkQ,aAAyB,CACxF,IAASjkC,EAAI,EAAGA,EAAIy8rB,EAAQc,sBAAsBj9rB,OAAQN,IAAK,CAC3D,IAAI2msB,OAAgB,EAChBC,GAAwB4B,EAAmBxosB,GAAKwosB,EAAmBxosB,EAAI,IAAM,EAC7E6msB,GAAoB2B,EAAmBxosB,EAAI,GAAKwosB,EAAmBxosB,IAAM,EAEzE2msB,EADA3msB,IAAMy8rB,EAAQc,sBAAsBj9rB,OAAS,EAC7BsmsB,EAEL,IAAN5msB,EACW6msB,EAGAD,EAAuBC,EAAmBD,EAAuBC,EAGrF0B,GADAj4qB,EAAOwT,GAASjgC,KAAKy4X,iBAAiBt8X,GAAIy8rB,EAAQxiX,eAAehyC,UAAW0+Z,IACnDrmsB,OAASiosB,EAAoBj4qB,EAAKhwB,OAASiosB,EAEhC,WAApC9L,EAAQxiX,eAAeliU,UACvB0krB,EAAQ9zX,gBAAgB/uT,QAAW/V,KAAKwgsB,mBAAmBzqrB,QAAU2urB,EAAoB,GACzF1ksB,KAAKs3U,YAAYtqU,GAAMhN,KAAKwgsB,mBAAmBzqrB,QAAU2urB,EAAoB,GAC7E1ksB,KAAK2hsB,gBAAgB30rB,EAAIhN,KAAKs3U,YAAYtqU,EAAIhN,KAAKijsB,kBACnDjjsB,KAAKs3U,YAAYvhU,OAASgf,SAAS/0B,KAAK82U,aAAc,IAAO92U,KAAKwgsB,mBAAmBzqrB,QAAU2urB,EAAoB,KAGnH9L,EAAQ9zX,gBAAgB93T,GAAMhN,KAAKwgsB,mBAAmBzqrB,QAAU2urB,EAAoB,GACpF9L,EAAQ9zX,gBAAgB/uT,QAAW/V,KAAKwgsB,mBAAmBzqrB,QAAU2urB,EAAoB,GACzF1ksB,KAAK2hsB,gBAAgB30rB,EAAIhN,KAAKs3U,YAAYtqU,EAAIhN,KAAKijsB,kBACnDjjsB,KAAKs3U,YAAYvhU,OAASgf,SAAS/0B,KAAK82U,aAAc,IAAO92U,KAAKwgsB,mBAAmBzqrB,QAAU2urB,EAAoB,MAI/H1uV,EAAO36W,UAAUinsB,oBAAsB,SAAUvB,GAC7C,IAEI0D,EACAG,EACAlJ,EACAC,EACAC,EACAC,EAPAjD,EAAU54rB,KAAK44rB,QACfvlqB,EAAOrzB,KAAK2hsB,gBAOhB3hsB,KAAK0gsB,uBACA9H,EAAQsC,wBACT0J,EAAgB5ksB,KAAK44rB,QAAQ/qqB,SAASw+C,aAAc/oE,GAAIs1rB,EAAQ53rB,QAAQsC,GAAK,qBAEjF,IAAK,IAAInH,EAAI,EAAGA,EAAIy8rB,EAAQc,sBAAsBj9rB,OAAQN,IAAK,CAC3D,IAAIa,GAAU47rB,EAAQc,sBAAsBv9rB,GAAGa,MAAQgD,KAAK8hsB,iBACvD9hsB,KAAK+hsB,eAAiB/hsB,KAAK8hsB,gBAAmB,IACnD9ksB,EAAQglD,MAAMhlD,GAAS,EAAIA,EACtB47rB,EAAQiJ,oBAQT4C,EAAapxqB,EAAKrd,MAAQ,IAC1B0lrB,EAASE,EAASmF,EAAWh0rB,EAAK03rB,EAAaznsB,EAC/C2+rB,EAASoF,EAAW/zrB,EACpB6urB,EAASkF,EAAW/zrB,EAAI+zrB,EAAWhrrB,OACnC/V,KAAK0gsB,oBAAoBl8rB,KAAKk3rB,KAX9B+I,EAAapxqB,EAAKtd,OAAS,IAC3B2lrB,EAASqF,EAAWh0rB,EACpB4urB,EAASE,EAASkF,EAAW/zrB,EAAKy3rB,EAAaznsB,EAC/C4+rB,EAASmF,EAAWh0rB,EAAIg0rB,EAAW/qrB,MACnChW,KAAK0gsB,oBAAoBl8rB,KAAKm3rB,IASlC,IAAInmqB,EAAY,IAAI0+W,GAAKwnT,EAAQC,EAAQC,EAAQC,GAC7C/toB,EAAO,IAAI+soB,GAAW76rB,KAAK44rB,QAAQ53rB,QAAQsC,GAAK,kBAAoBnH,EAAGq5B,EAAW,UAAW,GACjGx1B,KAAKm9rB,cAAc3vmB,SAAS1/B,EAAM82oB,GAC7BhM,EAAQsC,uBACTl7rB,KAAKm2U,OAAOx0U,YAAYijsB,KAOpC5uV,EAAO36W,UAAUwpsB,yBAA2B,SAAUhksB,GAClD,IAAIkM,EAAI/M,KAAK44rB,QAAQ7rX,OACjB//T,EAAIhN,KAAK44rB,QAAQ5rX,OACrB,IAA8C,IAA1CnsU,EAAEsG,OAAO7D,GAAG/E,QAAQ,kBAA2BjC,MAAM6K,OAAO0U,YAAYtd,QAAQ,QAAU,EAAG,CAC7F,IAAIioC,EAAWlqC,MAAM6K,OAAO7D,GAAGpG,MAAM8C,KAAK44rB,QAAQ53rB,QAAQsC,GAAK,iBAC/D,GAAwB,IAApBkjC,EAAS/pC,OAAc,CACvB,IAAIwV,OAAQ,EAERA,EADuB,IAAvBu0B,EAAS,GAAG/pC,QAAuE,SAAvDuD,KAAK44rB,QAAQxiX,eAAehyC,UAAUhkQ,aAC1DrL,SAASyR,EAAS,GAAI,IAGtBzR,SAASyR,EAAS,GAAGtiB,UAAU,EAAGsiB,EAAS,GAAG/pC,OAAS,GAAI,IAEvEi1B,GAAY1xB,KAAKy4X,iBAAiBxmX,GAAQlF,EAAGC,EAAGhN,KAAK44rB,QAAQ53rB,QAAQ4D,YAAa5E,KAAK44rB,QAAQ53rB,QAAQsC,GAAK,uBAAwBiqB,GAAWvtB,KAAK44rB,QAAQ53rB,QAAQsC,GAAK,uBACzK9C,SAASosB,eAAe5sB,KAAK44rB,QAAQ53rB,QAAQsC,GAAK,wBAAwBoB,MAAMC,WAAa,eAGhG,CACD,IAAI3D,EAAUR,SAASosB,eAAe5sB,KAAK44rB,QAAQ53rB,QAAQsC,GAAK,wBAC5DtC,IACAA,EAAQ0D,MAAMC,WAAa,YAIvCqxW,EAAO36W,UAAUsnsB,qBAAuB,SAAUtvqB,EAAMulqB,GACpD,GAAIA,EAAQiJ,mBAAoB,CAC5B7hsB,KAAKghsB,YACL,IAAIv5U,EAAUp0V,EAAKtmB,EACf+3rB,EAAUzxqB,EAAKrmB,EACf8f,EAAO,EACPi4qB,EAAW,EACXzmT,EAAS,EACTC,EAAS,EAETpiZ,OAAI,EAOR,IAJA6D,KAAKqhsB,qBACLrhsB,KAAKshsB,qBACLthsB,KAAKuhsB,sBACLvhsB,KAAKwhsB,sBACArlsB,EAAI,EAAGA,EAAIy8rB,EAAQa,gBAAgBh9rB,OAAQN,IAAK,CACjD,GAAIy8rB,EAAQxiX,eAAe4nX,UAAW,CAElClxqB,EAAON,GADIxsB,KAAKy4X,iBAAiBt8X,GACRy8rB,EAAQxiX,eAAehyC,WAAWpuR,MAE/DsoY,EAAS72B,EAXI,GACH,EAWV82B,EAASumT,EAXC,EAYV,IAAI1mqB,EAAWw6pB,EAAQxiX,eAAe4nX,UAAY1/S,EAASxxX,EAAO26V,EAAUznX,KAAKi3U,WAAaj3U,KAAKmhsB,aACzF,IAANhlsB,GAAWiiC,EAAWp+B,KAAKs3U,YAAYthU,MAAQhW,KAAKs3U,YAAYvqU,EAAI/M,KAAKmhsB,eACzE4D,GAAY,EAGZzmT,GAFA72B,EAAUp0V,EAAKtmB,GAhBN,GACH,EAkBNwxY,GAFAumT,EAAUzxqB,EAAKrmB,EAnBR,GAmBa+3rB,GAhBd,EAmBFA,EAAY/ksB,KAAgB,aAAM,IAClCA,KAAKghsB,SAASx8rB,KAAKrI,GAEnBoiZ,GADAumT,EAAUzxqB,EAAKrmB,GArBb,EAuBF+3rB,EAAW,IAGnB/ksB,KAAKqhsB,kBAAkB78rB,KAAK85Y,GAC5Bt+Y,KAAKshsB,kBAAkB98rB,KAAK+5Y,GAC5Bv+Y,KAAKuhsB,mBAAmB/8rB,KAAKijX,GAC7BznX,KAAKwhsB,mBAAmBh9rB,KAAKsgsB,GAC7Br9U,EAAUA,EAAUznX,KAAKi3U,WAAaj3U,KAAK2rU,aAAe7+S,EAAO9sB,KAAKmhsB,aAE1EnhsB,KAAKghsB,SAASx8rB,KAAKrI,GACnB6D,KAAK6gsB,cAAgB7gsB,KAAKghsB,SAASvksB,SAG3Cu5W,EAAO36W,UAAUunsB,qBAAuB,SAAUvvqB,GAC9C,IAAIulqB,EAAU54rB,KAAK44rB,QAEfsF,GACA1nqB,MAAO,cACPxgB,MAAO,GAGXhW,KAAKohsB,sBACL,IAAIqB,EACA31qB,EAAO,IAAIM,GAAK,EAAG,GAEnBkxX,EAAS,EACTC,EAAS,EACT92B,EAAUp0V,EAAKtmB,EACf+3rB,EAAUzxqB,EAAKrmB,EACnBhN,KAAKm4U,qBAAqBygX,GAC1B,IAAI7rrB,EACAC,EACA81rB,EAAgB9isB,KAAKs3U,YAAYthU,OAAShW,KAAKi3U,WAC/Cj3U,KAAKijsB,kBAAoBjjsB,KAAK2rU,cAC7BitX,EAAQiJ,oBAMT90rB,EAAyB,IAArB/M,KAAKszP,YAAoB,EAAItzP,KAAKghsB,SAAShhsB,KAAKszP,YAAc,GAClEtmP,EAAIhN,KAAKghsB,SAAShhsB,KAAKszP,YAAc,IAJrCtmP,GADAA,GADAD,EAAK/M,KAAKszP,YAAetzP,KAAgB,YAAMA,KAAgB,aACvDA,KAAK4gsB,aACLhI,EAAQa,gBAAgBh9rB,OAASuQ,EAAI4rrB,EAAQa,gBAAgBh9rB,OAMzE,IAAK,IAAIN,EAAI4Q,EAAG5Q,EAAI6Q,EAAG7Q,IAAK,CACxB,GAAIy8rB,EAAQxiX,eAAe4nX,UAAW,CAElClxqB,EAAON,GADHC,EAAOzsB,KAAKy4X,iBAAiBt8X,GACRy8rB,EAAQxiX,eAAehyC,WAQpD,GANIw0Z,EAAQiJ,qBACRp6U,EAAUznX,KAAKuhsB,mBAAmBplsB,GAClC2osB,EAAU9ksB,KAAKwhsB,mBAAmBrlsB,GAClCmiZ,EAASt+Y,KAAKqhsB,kBAAkBllsB,GAChCoiZ,EAASv+Y,KAAKshsB,kBAAkBnlsB,IAEhCy8rB,EAAQxiX,eAAe4nX,UAAW,CAClC1/S,EAAS72B,EAAUznX,KAAKi3U,WAAaj3U,KAAK2rU,aAC1C4yE,EAASumT,EApCH,EAqCN,IAAIr4qB,GAC4B,KAD5BA,EAAOwT,GAASjgC,KAAKy4X,iBAAiBt8X,GAAIy8rB,EAAQxiX,eAAehyC,UAAW0+Z,IACvE,GAAGvksB,QAAQ,QAAiBq6rB,EAAQsC,uBACzCl7rB,KAAKohsB,mBAAmB58rB,KAAK,IAAIg3rB,GAAcx7rB,KAAKy4X,iBAAiBt8X,GAAI,IAAI+5B,GAAKooX,EAAQC,EAAQzxX,EAAK9W,MAAO8W,EAAK/W,UAEvH,IAAImtrB,EAAY,IAAItI,GAAUt8S,EAAQC,EAAQ,QAAS9xX,EAAM,EAAG,iBAAkB,UAC9EzZ,EAAU,IAAIujB,GAAWqiqB,EAAQ53rB,QAAQsC,GAAK,gBAAkBnH,EAAG+msB,EAAWtK,EAAQxiX,eAAehyC,UAAWw0Z,EAAQxiX,eAAehyC,UAAU5tQ,OAASoiqB,EAAQviqB,WAAW7G,aAC7K/C,EAAKhwB,OAAS,EACduD,KAAKm9rB,cAAc7B,eAAetorB,EAAS4lrB,EAAQxiX,eAAehyC,UAAWpkS,KAAK0isB,gBAGlF1isB,KAAKm9rB,cAAc/rqB,WAAWpe,EAAShT,KAAK0isB,eAAgBj2qB,EAAK,IAEjEjhB,GAAQwiG,OAAS4qlB,EAAQsC,uBACzBl7rB,KAAK0isB,eAAe56jB,UAAUtkI,aAAa,KAAM,SAGzDi/rB,EAAW,IAAIvsqB,GAAKuxV,EAASq9U,EA1DhB,GAAA,IA2Db,IAAIpD,EAAY,IAAIx9X,GAAW00X,EAAQ53rB,QAAQsC,GAAK,eAAiBnH,EAAGy8rB,EAAQa,gBAAgBt9rB,GAAGq6B,MAAO0nqB,EAAY,EAAGuE,GACzHzisB,KAAKm9rB,cAAcx5pB,cAAc+9pB,EAAW1hsB,KAAK0isB,gBACjD9J,EAAQiJ,mBAAqBp6U,EAAUA,EAAUznX,KAAKi3U,WAAaj3U,KAAK2rU,aAAe7+S,EAAK9W,MAAQhW,KAAKmhsB,aACrG2D,GAAW9ksB,KAAKi3U,WAAaj3U,KAAKmhsB,aAE1C,IAAKvI,EAAQsC,sBAAuB,CAChC,IAAI3iX,EAAWqgX,EAAQ/qqB,SAASgrF,gBAAiBv1G,GAAIs1rB,EAAQ53rB,QAAQsC,GAAK,0BACtEoxB,EAAWkkqB,EAAQ/qqB,SAAS8V,cAAc3jC,KAAKs3U,aACnDiB,EAAS52U,YAAY+yB,GACrB10B,KAAK0isB,eAAe/gsB,YAAY42U,GAChCv4U,KAAK0isB,eAAel/rB,aAAa,QAAS,kBAAoB+0U,EAASj1U,GAAK,KAC5EtD,KAAKwisB,YAAY7gsB,YAAY3B,KAAK0isB,gBAClC9J,EAAQtnqB,UAAU3vB,YAAY3B,KAAKm2U,UAM3C6/B,EAAO36W,UAAU89U,cAAgB,SAAUy/W,EAAS3oiB,EAAM+0iB,GAEtD,GAAKA,GAAU/0iB,GAAQ,GAAKA,EAAOjwJ,KAAK6gsB,gBAAoBmE,GAAU/0iB,EAAO,GAAKA,GAAQjwJ,KAAK6gsB,cAAgB,CAS3G,GARImE,GACAhlsB,KAAKszP,aAAe,EACpBtzP,KAAK+gsB,WAAW/zrB,GAAKhN,KAAK+gsB,WAAWhrrB,SAGrC/V,KAAKszP,aAAe,EACpBtzP,KAAK+gsB,WAAW/zrB,GAAKhN,KAAK+gsB,WAAWhrrB,QAEpC6irB,EAAQsC,sBAMR,CACD,IAAIjumB,EAAM2rmB,EAAQwC,eAAenumB,IACjCA,EAAImB,SAASpuF,KAAK2hsB,gBAAgB50rB,EAlB5B,EAkByC/M,KAAK2hsB,gBAAgB30rB,EAlB9D,EAkB2EhN,KAAK2hsB,gBAAgB3rrB,MAlBhG,EAmBOhW,KAAK2hsB,gBAAgB5rrB,WAClCk3E,EAAImB,SAASpuF,KAAKkhsB,WAAWn0rB,EAAG/M,KAAKkhsB,WAAWl0rB,EAAGhN,KAAKkhsB,WAAWlrrB,MAAOhW,KAAKkhsB,WAAWnrrB,aAR1F,IADA/V,KAAK+4U,YAAYzzU,YAAYtF,KAAK+4U,YAAYn8T,YACvC5c,KAAK0isB,eAAenxrB,WAAW9U,QAClCuD,KAAK0isB,eAAep9rB,YAAYtF,KAAK0isB,eAAe9lrB,YAS5D5c,KAAK4isB,qBAAqB5isB,KAAK2hsB,mBAGhC3rV,KCj4BP1rR,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAgB5DqoqB,GAAyB,SAAU95mB,GAEnC,SAAS85mB,IAML,IAAIllsB,EAAmB,OAAXorF,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAahE,OAXAD,EAAMm7rB,uBAAwB,EAE9Bn7rB,EAAM8hsB,mBAAuD,WAAlC9hsB,EAAMq2U,eAAeliU,UAA2D,QAAlCnU,EAAMq2U,eAAeliU,SAI9FnU,EAAMymE,qBAINzmE,EAAM68rB,YAAa,EACZ78rB,EAmsBX,OAvtBAuqF,GAAU26mB,EAAS95mB,GAsBnB85mB,EAAQ5psB,UAAUoX,UAAY,WAC1BzS,KAAKoiS,sBACLpiS,KAAKw+G,eACLx+G,KAAKukB,cAET0grB,EAAQ5psB,UAAU+mS,oBAAsB,WACpCpiS,KAAK6tB,SAAW,IAAIC,GAAY9tB,KAAKgB,QAAQsC,IAC7CtD,KAAKo7rB,eAAiB,IAAIzumB,GAAe3sF,KAAKgB,QAAQsC,IACtDtD,KAAKklsB,YAAc,IAAIhI,GAAWl9rB,MAClCA,KAAKy/rB,cAAgB,IAAItwX,GAAOnvU,MAChCA,KAAKm9rB,cAAgB,IAAInC,GAAch7rB,MACvCA,KAAKmlsB,eAAiB,IAAInF,GAAehgsB,MACzCA,KAAK49rB,UAAY,IAAIjF,GAAU34rB,MAC/BA,KAAKo/rB,mBAAqB,GAC1Bp/rB,KAAKolsB,kBAAoB,GACzBplsB,KAAK2N,cAKTs3rB,EAAQ5psB,UAAUsS,WAAa,WAC3B3N,KAAKivE,KAAO,IAAIy7B,IAEpBu6lB,EAAQ5psB,UAAU0wG,OAAS,WACvB/rG,KAAKwmB,QAAQ,QAAUy0qB,QAASj7rB,OAChCA,KAAKqlsB,kBACLrlsB,KAAK0b,WACL1b,KAAKm/U,WACLn/U,KAAKslsB,qBACLtlsB,KAAKklsB,YAAY9mY,yBACjBp+T,KAAKmlsB,eAAen5U,kBAAkBhsX,KAAKulsB,yBAC3CvlsB,KAAKggC,YACLhgC,KAAK49rB,UAAUpE,qBACfx5rB,KAAKutR,kBACLvtR,KAAKo8U,iBACLp8U,KAAKgB,QAAQW,YAAY3B,KAAKsxB,WAC1BtxB,KAAKw7U,eACLx7U,KAAKw7U,cAAcgqX,iBAAgB,GAEvCxlsB,KAAKwmB,QAAQ,WAAay0qB,QAASj7rB,QAMvCilsB,EAAQ5psB,UAAUoqsB,mBAAqB,WACnCzlsB,KAAKqlsB,kBACLrlsB,KAAKslsB,qBACLtlsB,KAAKklsB,YAAY9mY,yBACjBp+T,KAAKmlsB,eAAen5U,kBAAkBhsX,KAAKulsB,yBAC3CvlsB,KAAK49rB,UAAUpE,qBACfx5rB,KAAKutR,mBAMT03a,EAAQ5psB,UAAUgqsB,gBAAkB,WAC5BrlsB,KAAK28rB,cACL38rB,KAAK28rB,cAAc+I,oBAAoB1lsB,KAAKujE,YAG5CvjE,KAAKulsB,wBAA0BvlsB,KAAKujE,YAO5C0hoB,EAAQ5psB,UAAUsqsB,cAAgB,WACH,WAAvB3lsB,KAAKwtP,cACLxtP,KAAKk7rB,uBAAwB,EAED,SAAvBl7rB,KAAKwtP,eACTxtP,KAAK2mU,gBAAgB,GAAGy1X,cAAgBp8rB,KAAK2mU,gBAAgB,GAAGy1X,eAAkB,IACnFp8rB,KAAKk7rB,uBAAwB,EAG7Bl7rB,KAAKk7rB,uBAAwB,GAGrC+J,EAAQ5psB,UAAU+gV,eAAiB,WAC/Bp8U,KAAK4lsB,yBACL5lsB,KAAKq8U,eACLr8U,KAAKs8U,cACLt8U,KAAKklsB,YAAYl9X,aACbhoU,KAAKw7U,eAAiBx7U,KAAK0xB,cAC3B1xB,KAAKw7U,cAAc/kS,cAAgB,KACnCz2C,KAAKw7U,cAAcqqX,iBAAiB7lsB,OAExCA,KAAKy/rB,cAAc5B,mBACf79rB,KAAKg8U,cAAgBh8U,KAAKo2U,eAAe5+S,SACzCx3B,KAAKg8U,aAAaylX,kBAAkBzhsB,OAM5CilsB,EAAQ5psB,UAAUkkC,cAAgB,WAC9B,MAAO,WAMX0lqB,EAAQ5psB,UAAUmxG,eAAiB,WAC/B,MAAO,IAEXy4lB,EAAQ5psB,UAAUmsF,kBAAoB,SAAUiF,EAASC,GAGrD,IAAK,IAFD7+D,GAAW,EACXg3T,GAAgB,EACXzmV,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKmvF,GAAUruF,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAE9D,OADWyE,EAAGzE,IAEV,IAAK,gBAGL,IAAK,eACDyvB,GAAW,EACX,MACJ,IAAK,cACDg3T,GAAgB,EAChB,MACJ,IAAK,aACD7kV,KAAK48rB,YAAa,EAClB58rB,KAAKylsB,qBACL53qB,GAAW,EACX,MACJ,IAAK,gBACL,IAAK,QACL,IAAK,SACL,IAAK,SACL,IAAK,iBACDg3T,GAAgB,EAChB,MACJ,IAAK,QACL,IAAK,QACD7kV,KAAKklsB,YAAY9mY,yBACjBp+T,KAAKmlsB,eAAen5U,kBAAkBhsX,KAAKulsB,yBAC3C1gX,GAAgB,EAChB,MACJ,IAAK,kBACD7kV,KAAK49rB,UAAUpE,qBACfx5rB,KAAKutR,kBACL1/P,GAAW,EACX,MACJ,IAAK,QACD7tB,KAAK0b,WACLmS,GAAW,IAIlBg3T,GAAiBh3T,GAClB7tB,KAAKggC,YACLhgC,KAAKo8U,iBACLp8U,KAAKgB,QAAQW,YAAY3B,KAAKsxB,WAC9BtxB,KAAKwmB,QAAQ,WAAay0qB,QAASj7rB,QAE9B6kV,IACL7kV,KAAKggC,YACLhgC,KAAKgxU,eACLhxU,KAAKgB,QAAQW,YAAY3B,KAAKsxB,WAC9BtxB,KAAKwmB,QAAQ,WAAay0qB,QAASj7rB,SAG3CilsB,EAAQ5psB,UAAU2kC,UAAY,WAC1BhgC,KAAK0/U,YACL1/U,KAAK2lsB,gBACL3lsB,KAAKq/B,gBACAr/B,KAAKk7rB,sBAQNl7rB,KAAKsxB,UAAYtxB,KAAKo7rB,eAAerumB,cACjCzpF,GAAItD,KAAKgB,QAAQsC,GAAK,UACtB0S,MAAOhW,KAAK21B,cAAc3f,MAC1BD,OAAQ/V,KAAK21B,cAAc5f,SAV/B/V,KAAKsxB,UAAYtxB,KAAK6tB,SAASmS,WAC3B18B,GAAItD,KAAKgB,QAAQsC,GAAK,OACtB0S,MAAOhW,KAAK21B,cAAc3f,MAC1BD,OAAQ/V,KAAK21B,cAAc5f,UAcvCkvrB,EAAQ5psB,UAAUqkV,UAAY,WAO1B,GANIl/U,SAASosB,eAAe5sB,KAAKgB,QAAQsC,GAAK,uBAC1CiB,EAAO/D,SAASosB,eAAe5sB,KAAKgB,QAAQsC,GAAK,uBAEjD9C,SAASosB,eAAe5sB,KAAKgB,QAAQsC,GAAK,yBAC1CiB,EAAO/D,SAASosB,eAAe5sB,KAAKgB,QAAQsC,GAAK,yBAEjDtD,KAAKsxB,UAAW,CAEhB,GADiB9wB,SAASosB,eAAe5sB,KAAKsxB,UAAUhuB,IACxC,CACZ,KAAOtD,KAAKsxB,UAAU/f,WAAW9U,QAC7BuD,KAAKsxB,UAAUhsB,YAAYtF,KAAKsxB,UAAU1U,YAE9CrY,EAAOvE,KAAKsxB,cAIxB2zqB,EAAQ5psB,UAAUuqsB,uBAAyB,WACvC,IAAIlia,EAAaljS,SAASW,cAAc,OACxCuiS,EAAWpgS,GAAKtD,KAAKgB,QAAQsC,GAAK,qBAClCogS,EAAWlgS,aAAa,QAAS,sBACjCxD,KAAKgB,QAAQW,YAAY+hS,IAO7Buha,EAAQ5psB,UAAUw1F,gBAAkB,WAChC,IAAIgB,KAmBJ,OAlBI7xF,KAAK0xB,aACLmgE,EAAQrtF,MACJ6sF,OAAQ,UACRpxF,MAAOD,QAGXA,KAAKo2U,gBACLvkP,EAAQrtF,MACJ6sF,OAAQ,SACRpxF,MAAOD,QAGXA,KAAKujE,YACLsuB,EAAQrtF,MACJ6sF,OAAQ,UACRpxF,MAAOD,QAGR6xF,GAQXozmB,EAAQ5psB,UAAUiX,QAAU,WACxBtS,KAAKw+G,eACLrzB,EAAO9vF,UAAUiX,QAAQhR,KAAKtB,MAC9BA,KAAKgB,QAAQgB,UAAY,GACzBhC,KAAKgB,QAAQ8C,UAAUS,OAAO,cAElC0gsB,EAAQ5psB,UAAUghV,aAAe,WAC7Br8U,KAAKskC,QACDtuB,MAAO,GAEX,IACIqd,EAAO,IAAI6wS,GAAWlkU,KAAKgB,QAAQsC,GAAK,iBAAkBtD,KAAKq2B,WAAW5G,WAAYzvB,KAAKskC,OAAQ,EAAG,IAAIpO,GAAKlgB,EAAWA,EAAWhW,KAAK21B,cAAc3f,MADhJ,EAC+JhW,KAAK21B,cAAc5f,OADlL,IAEZ/V,KAAKm9rB,cAAcx5pB,cAActQ,EAAMrzB,KAAKsxB,YAEhD2zqB,EAAQ5psB,UAAUgkC,cAAgB,WAC9B,IAAIrpB,EAAQqoB,GAAer+B,KAAKgW,MAAOhW,KAAKgB,QAAQ4D,cAAgB5E,KAAKgB,QAAQ4D,aAAe,IAC5FmR,EAASsoB,GAAer+B,KAAK+V,OAAQ/V,KAAKgB,QAAQ0wC,eAAiB1xC,KAAKgB,QAAQ0wC,cAAgB,IACpG1xC,KAAK21B,cAAgB,IAAIvI,GAAKpX,EAAOD,IAEzCkvrB,EAAQ5psB,UAAUihV,YAAc,WAC5B,GAAIt8U,KAAK8jsB,cAAcr3qB,KAAM,CACzB,IAAIiU,EAAa1gC,KAAK8jsB,cAAc1/Z,UAChCvwR,EAAsC,SAA7B6sB,EAAWC,cAA2B,QAClB,QAA7BD,EAAWC,cAA0B,MAAQ,SACjD3gC,KAAK8jS,YAAct3Q,GAAYxsB,KAAKmgC,gBAAgB,GAAIO,GACxD,IAAI1tB,EAAU,IAAIujB,GAAWv2B,KAAKgB,QAAQsC,GAAK,gBAAiB,IAAIs3rB,GAAUt6pB,GAAetgC,KAAK21B,cAAc3f,MAAQhW,KAAKy8B,OAAOjwB,KAAOxM,KAAKy8B,OAAOhwB,MAAOzM,KAAKy8B,OAAOjwB,KAAMxM,KAAKy8B,OAAOhwB,MAAOi0B,GAAa1gC,KAAKy8B,OAAO/vB,IAAmC,EAA3B1M,KAAK8jS,YAAkB,OAAQ,EAAIjwR,EAAQ7T,KAAKmgC,iBAAkBO,EAAYA,EAAWlK,OAASx2B,KAAKq2B,WAAWyvqB,cAClV9lsB,KAAKmgC,gBAAgB1jC,OAAS,EAC9BuD,KAAKm9rB,cAAc7B,eAAetorB,EAAS0tB,EAAY1gC,KAAKsxB,YAG5DtxB,KAAKm9rB,cAAc/rqB,WAAWpe,EAAShT,KAAKsxB,UAAWtxB,KAAKmgC,gBAAgB,KAC5B,IAA5CngC,KAAKmgC,gBAAgB,GAAG5hC,QAAQ,QAAiByB,KAAKk7rB,uBACtDl7rB,KAAKwmE,kBAAkBhiE,KAAK,IAAIg3rB,GAAcx7rB,KAAK8jsB,cAAcr3qB,KAAM,IAAIyJ,GAAKl2B,KAAKy8B,OAAOjwB,KAAMxM,KAAKy8B,OAAO/vB,IAAK1M,KAAK8jS,YAAY9tR,MAAOhW,KAAK8jS,YAAY/tR,aAK5KkvrB,EAAQ5psB,UAAUomV,aAAe,SAAUnlV,EAAOyQ,EAAGC,EAAG4kB,GACrCt1B,EAAM6K,OAAO7D,KACTtD,KAAKgB,QAAQsC,GAAK,iBAAsBhH,EAAM6K,OAAO0U,YAAYtd,QAAQ,QAAU,EAClGmzB,GAAY1xB,KAAK8jsB,cAAcr3qB,KAAM1f,EAAGC,EAAGhN,KAAKgB,QAAQ4D,YAAa5E,KAAKgB,QAAQsC,GAAK,iBAAkBiqB,GAAWvtB,KAAKgB,QAAQsC,GAAK,sBAAuBsuB,GAG7JpE,GAAcxtB,KAAKgB,QAAQsC,GAAK,mBAGxC2hsB,EAAQ5psB,UAAUqmV,YAAc,SAAUplV,EAAOyQ,EAAGC,EAAG4kB,GACnD,IAAI4U,EAAWlqC,EAAM6K,OAAO7D,GAC5B,IAA6D,IAAxDkjC,EAASjoC,QAAQyB,KAAKgB,QAAQsC,GAAK,iBAA4BhH,EAAM6K,OAAO0U,YAAYtd,QAAQ,QAAU,EAAI,CAC/G,IAAI0T,EAAQ8iB,SAASyR,EAASj3B,QAAQvP,KAAKgB,QAAQsC,GAAK,eAAgB,IAAK,IAC7EouB,GAAY1xB,KAAK2mU,gBAAgB,GAAGu1X,WAAWjqrB,GAAQlF,EAAGC,EAAGhN,KAAKgB,QAAQ4D,YAAa5E,KAAKgB,QAAQsC,GAAK,gBAAiBiqB,GAAWvtB,KAAKgB,QAAQsC,GAAK,sBAAuBsuB,QAG9KpE,GAAcxtB,KAAKgB,QAAQsC,GAAK,kBAGxC2hsB,EAAQ5psB,UAAU0qsB,cAAgB,SAAUh5rB,EAAGC,GAC3C,IAAIwyrB,KACAwG,KAOJ,OALAxG,EAAiBh7rB,KAAKxE,KAAKy/rB,cAAcf,uBAAuB,GAAG,IACnEsH,EAAgBxhsB,KAAKxE,KAAKy/rB,cAAcf,uBAAuB1+rB,KAAK46B,QAAU,GAAG56B,KAAK26B,QAAU,IACtF5tB,GAAKyyrB,EAAiB,GAAGzyrB,GAAKC,GAAKwyrB,EAAiB,GAAGxyrB,GAC7DD,GAAMi5rB,EAAgB,GAAGj5rB,EAAIi5rB,EAAgB,GAAGhwrB,OAChDhJ,GAAMg5rB,EAAgB,GAAGh5rB,EAAIg5rB,EAAgB,GAAGjwrB,QAGxDkvrB,EAAQ5psB,UAAUqgB,SAAW,WAEzB1b,KAAKq2B,WR/Tb,SAA8Bnb,GAC1B,IAAIxW,EACJ,OAAQwW,GACJ,IAAK,eACDxW,GACIohsB,aAAc,UACd72qB,UAAW,UACXD,UAAW,UACX+qe,WAAY,UACZtqe,WAAY,UACZw2qB,cAAe,UACfpM,eAAgB,UAChBrqqB,YAAa,UACbV,UAAY0H,MAAS,YACfA,MAAS,YACTA,MAAS,aAEnB,MACJ,QACI9xB,GACIohsB,aAAc,UACd72qB,UAAW,UACXD,UAAW,UACX+qe,WAAY,UACZksM,cAAe,UACfx2qB,WAAY,UACZoqqB,eAAgB,UAChBrqqB,YAAa,UACbV,UAAY0H,MAAS,YACfA,MAAS,YACTA,MAAS,aAI3B,OAAO9xB,EQ6ReqqB,CAAc/uB,KAAKkb,QAEzC+prB,EAAQ5psB,UAAUkyR,gBAAkB,WAChC,IAAI9wP,EAASz8B,KAAKy8B,OAEd8hT,EAAc,EACdnlR,EAAWp5D,KAAKg8U,cAAiD,QAAjCh8U,KAAKo2U,eAAeliU,SAAsB,EAAI,GAC9E1H,EAAOiwB,EAAOjwB,KACdwJ,EAAQhW,KAAK21B,cAAc3f,MAAQxJ,EAAOiwB,EAAOhwB,MACjDzM,KAAK8jsB,cAAcr3qB,OACnBzsB,KAAKmgC,gBAAkBF,GAASjgC,KAAK8jsB,cAAcr3qB,KAAMzsB,KAAK8jsB,cAAc1/Z,UAAWpuR,GACvFuoU,EAAe/xT,GAAYxsB,KAAK8jsB,cAAcr3qB,KAAMzsB,KAAK8jsB,cAAc1/Z,WAAWruR,OAAS/V,KAAKmgC,gBAAgB1jC,OAC5G28D,GAER,IAAI1sD,EAAM+vB,EAAO/vB,IAAM6xU,EACnBxoU,EAAS/V,KAAK21B,cAAc5f,OAASrJ,EAAM+vB,EAAO9vB,OACtD3M,KAAK8kU,gBAAkB,IAAI5uS,GAAK1pB,EAAME,EAAKsJ,EAAOD,GAClD,IAAI6trB,EAAY5jsB,KAAK8kU,gBAAgB93T,EACjChN,KAAKg8U,cAAgBh8U,KAAKo2U,eAAe5+S,SACzCx3B,KAAKg8U,aAAazF,sBAAsBv2U,KAAK8kU,iBAEjD9kU,KAAKklsB,YAAYtgY,YAAY5kU,KAAK8kU,iBAC9B9kU,KAAKg8U,cAAgBh8U,KAAKo2U,eAAe5+S,SACzCx3B,KAAKg8U,aAAa2nX,oBAAoB3jsB,KAAK8kU,gBAAiB8+X,GAEhE5jsB,KAAKklsB,YAAY7/X,kBAAkBrlU,KAAK8kU,kBAE5CmgY,EAAQ5psB,UAAU21U,aAAe,WAC7BhxU,KAAKutR,kBACLvtR,KAAKo8U,kBAET6oX,EAAQ5psB,UAAU8jV,SAAW,WACzB,IAAIhpU,EACAsxD,GAAQznE,KAAK8X,MAAO9X,KAAK4X,OAC7B5X,KAAK2mU,mBACL,IAAK,IAAIxqU,EAAI,EAAG0F,EAAM4lE,EAAKhrE,OAAQN,EAAI0F,EAAK1F,KACxCga,EAAOsxD,EAAKtrE,IACPi9B,YAAqB,IAANj9B,EAAW,aAAe,WAC9C6D,KAAK2mU,gBAAgBniU,KAAK2R,IAMlC8urB,EAAQ5psB,UAAUkpB,WAAa,WAE3B,IAAIi/V,EAAgBh4W,GAAQC,UACxBlO,EAAQiO,GAAQ0+E,gBAChBxrE,EAAOlT,GAAQ4+E,cACff,EAAO79E,GAAQ2+E,eACftxD,EAAS2qV,EAAgB,eAAiB,aAC9Cj+W,GAAanB,IAAIpE,KAAKgB,QAASwK,GAAQkb,SAAWnpB,EAAQ,QAASyC,KAAKkmsB,kBAAmBlmsB,MAC3FuF,GAAanB,IAAIpE,KAAKgB,QAASzD,EAAOyC,KAAKmmsB,iBAAkBnmsB,MAC7DuF,GAAanB,IAAIpE,KAAKgB,QAAS0d,EAAM1e,KAAKomsB,kBAAmBpmsB,MAC7DuF,GAAanB,IAAIpE,KAAKgB,QAASqoF,EAAMrpF,KAAKmmsB,iBAAkBnmsB,MAC5DuF,GAAanB,IAAIpE,KAAKgB,QAAS63B,EAAQ74B,KAAKomsB,kBAAmBpmsB,MAC/DnE,OAAOa,iBAAkB8O,GAAQomB,SAAY,gBAAiB/1B,QAAU,wBAAyBA,OAAW,oBAAsB,SAAUmE,KAAKqmsB,cAAc/qsB,KAAK0E,OACpKA,KAAKmiP,SAASniP,KAAKgB,UAKvBiksB,EAAQ5psB,UAAU8mP,SAAW,SAAUnhP,GACnCA,EAAQ0D,MAAMo1G,YAAc,UAC5B94G,EAAQ0D,MAAMg8U,cAAgB,UAC9B1/U,EAAQ0D,MAAMi8U,iBAAmB,OACjC3/U,EAAQ0D,MAAMk8U,aAAe,OAC7B5/U,EAAQ0D,MAAMm8U,iBAAmB,OACjC7/U,EAAQ0D,MAAMwP,SAAW,YAK7B+wrB,EAAQ5psB,UAAUmjH,aAAe,WAE7B,IAAIglQ,EAAgBh4W,GAAQC,UACxBlO,EAAQiO,GAAQ0+E,gBAEhBb,EAAO79E,GAAQ2+E,eACftxD,EAAS2qV,EAAgB,eAAiB,aAC9Cj+W,GAAahB,OAAOvE,KAAKgB,QAASwK,GAAQkb,SAAWnpB,EAAQ,QAASyC,KAAKkmsB,mBAC3E3gsB,GAAahB,OAAOvE,KAAKgB,QAASzD,EAAOyC,KAAKmmsB,kBAC9C5gsB,GAAahB,OAAOvE,KAAKgB,QAASqoF,EAAMrpF,KAAKomsB,mBAC7C7gsB,GAAahB,OAAOvE,KAAKgB,QAASqoF,EAAMrpF,KAAKmmsB,kBAC7C5gsB,GAAahB,OAAOvE,KAAKgB,QAAS63B,EAAQ74B,KAAKomsB,mBAC/CvqsB,OAAOe,oBAAqB4O,GAAQomB,SAAY,gBAAiB/1B,QAAU,wBAAyBA,OAAW,oBAAsB,SAAUmE,KAAKqmsB,gBAOxJpB,EAAQ5psB,UAAUgrsB,cAAgB,SAAUxlsB,GACxC,IAAId,EAAQC,KAaZ,OAZIA,KAAKqjhB,aACLnjhB,aAAaF,KAAKqjhB,aAEtBrjhB,KAAKqjhB,YAAcljhB,WAAW,WACtBJ,EAAMinF,YACN9mF,aAAaH,EAAMsjhB,cAGvBtjhB,EAAMigC,YACNjgC,EAAMixU,eACNjxU,EAAMiB,QAAQW,YAAY5B,EAAMuxB,aACjC,MACI,GAMX2zqB,EAAQ5psB,UAAUiqsB,mBAAqB,WACnC,IAAI/hoB,EAAavjE,KAAKulsB,wBACtB,GAAIhioB,GAAcA,EAAW9mE,OAAS,EAAG,CAGrC,IAAK,IAFD6psB,EAAW/ioB,EAAW9mE,OAAS,EAC/B8psB,EAAW,EACNpqsB,EAAI,EAAGA,GAAKmqsB,EAAUnqsB,IAAK,CAChC,IAAIs+B,EAAW8oC,EAAWpnE,GAAGM,OAC7B8psB,EAAWA,EAAW9rqB,EAAW8rqB,EAAW9rqB,EAEhDz6B,KAAK2mU,gBAAgB,GAAG93L,UAAYy3jB,EACpCtmsB,KAAK2mU,gBAAgB,GAAG93L,UAAY03jB,EAAW,OAG/CvmsB,KAAK2mU,gBAAgB,GAAG93L,UAAY,EACpC7uI,KAAK2mU,gBAAgB,GAAG93L,UAAY,GAM5Co2jB,EAAQ5psB,UAAU0lV,WAAa,SAAUj1U,EAAOI,GAC5C,IACIs6rB,EADAnzqB,EAAOrzB,KAAKgB,QAAQ4K,wBAGpB46rB,EADAxmsB,KAAKk7rB,sBACW16rB,SAASosB,eAAe5sB,KAAKgB,QAAQsC,GAAK,WAAWsI,wBAGrDpL,SAASosB,eAAe5sB,KAAKgB,QAAQsC,GAAK,QAAQsI,wBAEtE5L,KAAK+sU,OAAUjhU,EAAQunB,EAAK7mB,KAAQH,KAAKC,IAAIk6rB,EAAch6rB,KAAO6mB,EAAK7mB,KAAM,GAC7ExM,KAAKgtU,OAAU9gU,EAAQmnB,EAAK3mB,IAAOL,KAAKC,IAAIk6rB,EAAc95rB,IAAM2mB,EAAK3mB,IAAK,IAE9Eu4rB,EAAQ5psB,UAAU6qsB,kBAAoB,SAAUrlsB,GAC5C,IAAIiL,EACAI,EAEAg1U,EACAhsU,EAAclV,KAAKgB,QAAQ4K,wBAChB,eAAX/K,EAAE6F,MACF1G,KAAK4xB,SAAU,EAEf1lB,GADAg1U,EAAWrgV,GACM89D,eAAe,GAAGtqB,QACnCvoC,EAAQo1U,EAASviR,eAAe,GAAGvqB,UAGnCp0C,KAAK4xB,SAAU,EACf1lB,EAAQrL,EAAEwzC,QACVvoC,EAAQjL,EAAEuzC,SAEdtoC,GAASoJ,EAAY1I,KACrBN,GAASgJ,EAAYxI,IAErB,GADoB1M,KAAK+lsB,cAAcj6rB,EAAOI,GAC3B,CACf,IAAIiwB,EAAcn8B,KAAKy/rB,cAAcF,eAAezzrB,EAAOI,GAC3DlM,KAAKwmB,QAAQ,aACTy0qB,QAASj7rB,KACThD,MAAOm/B,EAAYn/B,MACnB+P,EAAGovB,EAAYpvB,EACfC,EAAGmvB,EAAYnvB,EACfy5rB,OAAQzmsB,KAAKy/rB,cAAcG,gBAC3B8G,OAAQ1msB,KAAKy/rB,cAAcK,gBAC3BtxqB,OAAQxuB,KAAKy/rB,cAAcI,gBAC3BpxqB,OAAQzuB,KAAKy/rB,cAAcM,gBAC3B4G,YAAa3msB,KAAKk7rB,sBAAwB,KAAO16rB,SAASosB,eAAeuP,EAAY74B,MAI7F,GADAtD,KAAK+N,OAAO,QAASlN,GACa,aAA9Bb,KAAK45rB,gBAAgBlzrB,MAAuB1G,KAAKg8U,cAAgBh8U,KAAKo2U,eAAe5+S,QAAS,CAC9F,IAAIy4H,EAAOjwJ,KAAKg8U,aAAailX,sBACzBhxiB,EAAKxzJ,QAAUqP,EAAQmkJ,EAAK,GAAGljJ,GAAKjB,EAAQmkJ,EAAK,GAAGljJ,EAAIkjJ,EAAK,GAAGj6I,OAChE9J,EAAQ+jJ,EAAK,GAAGjjJ,GAAKd,EAAQ+jJ,EAAK,GAAGjjJ,EAAIijJ,EAAK,GAAGl6I,OACjD/V,KAAKg8U,aAAa7C,cAAcn5U,KAAMA,KAAKg8U,aAAa1oF,aAAa,GAEhErjG,EAAKxzJ,QAAUqP,EAAQmkJ,EAAK,GAAGljJ,GAAKjB,EAAQmkJ,EAAK,GAAGljJ,EAAIkjJ,EAAK,GAAGj6I,OACrE9J,EAAQ+jJ,EAAK,GAAGjjJ,GAAKd,EAAQ+jJ,EAAK,GAAGjjJ,EAAIijJ,EAAK,GAAGl6I,QACjD/V,KAAKg8U,aAAa7C,cAAcn5U,KAAMA,KAAKg8U,aAAa1oF,aAAa,GAG7E,OAAO,GAOX2xc,EAAQ5psB,UAAU8qsB,iBAAmB,SAAUtlsB,GAC3C,IACIiL,EACAI,EACAuoS,EACAysC,EAJAnhV,EAAQC,KAKRkV,EAAclV,KAAKgB,QAAQ4K,wBAe/B,GAde,cAAX/K,EAAE6F,MAAmC,eAAX7F,EAAE6F,MAC5B1G,KAAK4xB,SAAU,EAEf9lB,GADAo1U,EAAWrgV,GACM89D,eAAe,GAAGvqB,QACnCloC,EAAQg1U,EAASviR,eAAe,GAAGtqB,UAGnCr0C,KAAK4xB,SAAU,EACf9lB,EAAQjL,EAAEuzC,QACVloC,EAAQrL,EAAEwzC,SAEdvoC,GAASoJ,EAAY1I,KACrBN,GAASgJ,EAAYxI,IACrB1M,KAAK+gV,WAAWj1U,EAAOI,GACnBrL,EAAEsG,QAAUtG,EAAEsG,OAAO7D,GAAI,CACzB,IAAIsjsB,EAAgB5msB,KAAK+lsB,cAAcj6rB,EAAOI,GAC1ClM,KAAKg8U,eACD4qX,EACkC,aAA9B5msB,KAAK45rB,gBAAgBlzrB,MACrB1G,KAAKo2U,eAAeywX,qBAAuB7msB,KAAKo2U,eAAe5+S,SAC/Dx3B,KAAKg8U,aAAamnX,sBAAsBtisB,EAAGiL,EAAOI,GAItDlM,KAAKg8U,aAAasnX,sBAAsBtjsB,OAKhD,MADgBA,KAAK0xB,cAAe1xB,KAAKw7U,gBAAgBx7U,KAAK+lsB,cAAcj6rB,EAAOI,GAChE,CACf,IAAIiwB,OAAc,EAClBA,EAAcn8B,KAAKy/rB,cAAcF,eAAezzrB,EAAOI,GACnDlM,KAAKolsB,oBAAsBjpqB,EAAY74B,KACnCtD,KAAK0xB,eACA1xB,KAAK+9rB,aAAasB,wBAA2Br/rB,KAAKw7U,eAAiBx7U,KAAK0xB,eACrE1xB,KAAKk7rB,uBACTl7rB,KAAKy/rB,cAAcP,iBAAiB/iqB,EAAY74B,IAEpDtD,KAAKw7U,cAAcx5M,cAAc7lG,GAC7Bn8B,KAAK4xB,UACD5xB,KAAK8msB,cACLjrsB,OAAOqE,aAAaF,KAAK8msB,cAE7B9msB,KAAK8msB,aAAe3msB,WAAW,WAC3BJ,EAAMy7U,cAAc/kS,cAAcyvP,UAClCnmS,EAAMy7U,cAAcurX,WAAY,GACjC,MACY,cAAXlmsB,EAAE6F,MACF7F,EAAE2kB,mBAIdxlB,KAAKolsB,kBAAoBjpqB,EAAY74B,SAIG,IAAxCzC,EAAEsG,OAAO7D,GAAG/E,QAAQ,kBACfyB,KAAK+9rB,aAAasB,yBAA0Br/rB,KAAK0xB,aAAiB1xB,KAAKk7rB,uBACxEl7rB,KAAKy/rB,cAAcP,iBAAiBr+rB,EAAEsG,OAAO7D,IAE7CtD,KAAKw7U,eAAiBx7U,KAAK0xB,aAC3B1xB,KAAKw7U,cAAcgqX,iBAAgB,GAAO,IAGlDxlsB,KAAKolsB,kBAAoB,GAGxBplsB,KAAKk7rB,uBAUUl7rB,KAAKgB,QAAQ4K,yBAC7B6oS,EAAcluO,GAAevmE,KAAKwmE,kBAAmB16D,EAAOI,IACvDlM,KAAKg8U,cAAgBz1Q,GAAevmE,KAAKg8U,aAAaolX,mBAAoBt1rB,EAAOI,IAElFwlB,GAAY+iR,EAAaz0S,KAAK+sU,OAAQ/sU,KAAKgtU,OAAQhtU,KAAKgB,QAAQ4D,YAAa5E,KAAKgB,QAAQsC,GAAK,kBAAmBiqB,GAAWvtB,KAAKgB,QAAQsC,GAAK,sBAAuBtD,KAAK4xB,SAG3KpE,GAAcxtB,KAAKgB,QAAQsC,GAAK,qBAhBhCtD,KAAK8jsB,cAAcr3qB,MAAsD,SAA9CzsB,KAAK8jsB,cAAc1/Z,UAAUhkQ,cACxDpgC,KAAKyhV,aAAa5gV,EAAGiL,EAAOI,EAAOlM,KAAK4xB,SAE5C5xB,KAAK0hV,YAAY7gV,EAAGiL,EAAOI,EAAOlM,KAAK4xB,SACnC5xB,KAAKg8U,cAAgBh8U,KAAKo2U,eAAe5+S,SAAWx3B,KAAKo2U,eAAe4nX,WACxEh+rB,KAAKg8U,aAAa6oX,yBAAyBhksB,IAevD,OAAO,GAOXoksB,EAAQ5psB,UAAU+qsB,kBAAoB,SAAUvlsB,GAC5C,IAAId,EAAQC,KAsBZ,GArBIa,EAAEsG,QAAUtG,EAAEsG,OAAO7D,KACpBtD,KAAK+9rB,aAAasB,wBAA2Br/rB,KAAKw7U,eAAiBx7U,KAAK0xB,eACrE1xB,KAAKk7rB,uBACTl7rB,KAAKy/rB,cAAcP,iBAAiBl/rB,KAAKolsB,mBAEzCplsB,KAAKw7U,eAAiBx7U,KAAK0xB,aAA0B,eAAX7wB,EAAE6F,MAC5C1G,KAAKw7U,cAAcgqX,iBAAgB,GAEvCxlsB,KAAKolsB,kBAAoB,GACS,aAA9BplsB,KAAK45rB,gBAAgBlzrB,MAAuB1G,KAAKg8U,cAAgBh8U,KAAKo2U,eAAeywX,qBACrF7msB,KAAKo2U,eAAe5+S,UACL,eAAX32B,EAAE6F,KACF1G,KAAKg8U,aAAasnX,sBAAsBtjsB,OAGpCA,KAAKgnsB,eACLnrsB,OAAOqE,aAAaF,KAAKgnsB,eAE7BhnsB,KAAKgnsB,cAAgB7msB,WAAW,WAAcJ,EAAMi8U,aAAasnX,sBAAsBvjsB,IAAW,QAGtGC,KAAKk7rB,sBAAuB,CAC5B,IAAI+L,EAAOzmsB,SAASosB,eAAe5sB,KAAKgB,QAAQsC,GAAK,qBACjD2jsB,IACAA,EAAKvisB,MAAMC,WAAa,SACxB3E,KAAKo/rB,mBAAqB,IAWlC,OARIp/rB,KAAK8jsB,cAAcr3qB,OAAoD,IAA5CzsB,KAAKmgC,gBAAgB,GAAG5hC,QAAQ,SACtDyB,KAAKk7rB,sBAIN1tqB,GAAcxtB,KAAKgB,QAAQsC,GAAK,mBAHhCkqB,GAAcxtB,KAAKgB,QAAQsC,GAAK,oBAMjC,GAEXunF,IACI3jF,EAAS,OACV+9rB,EAAQ5psB,UAAW,aAAS,GAC/BwvF,IACI3jF,EAAS,OACV+9rB,EAAQ5psB,UAAW,cAAU,GAChCwvF,IACI3jF,GAAS,IACV+9rB,EAAQ5psB,UAAW,mBAAe,GACrCwvF,IACI/hF,KACDm8rB,EAAQ5psB,UAAW,qBAAiB,GACvCwvF,IACI3jF,EAAS,QACV+9rB,EAAQ5psB,UAAW,qBAAiB,GACvCwvF,IACI3jF,EAAS,OACV+9rB,EAAQ5psB,UAAW,kBAAc,GACpCwvF,IACI3jF,EAAS,aACV+9rB,EAAQ5psB,UAAW,aAAS,GAC/BwvF,IACI9iF,KAAY+0T,KACbmoY,EAAQ5psB,UAAW,cAAU,GAChCwvF,IACI9iF,GAAU0kB,KAAM,GAAI23Q,UAAWjP,GAAM6ma,kBAAoBnlU,KAC1DouU,EAAQ5psB,UAAW,qBAAiB,GACvCwvF,IACI9iF,KAAYu5T,KACb2jY,EAAQ5psB,UAAW,aAAS,GAC/BwvF,IACI9iF,KAAY6tU,KACbqvX,EAAQ5psB,UAAW,sBAAkB,GACxCwvF,IACI9iF,KAAY2wrB,KACbuM,EAAQ5psB,UAAW,uBAAmB,GACzCwvF,IACI9iF,KAAYu5T,KACb2jY,EAAQ5psB,UAAW,aAAS,GAC/BwvF,IACI9iF,KAAY41rB,KACbsH,EAAQ5psB,UAAW,oBAAgB,GACtCwvF,IACI/hF,KACDm8rB,EAAQ5psB,UAAW,eAAW,GACjCwvF,IACI/hF,KACDm8rB,EAAQ5psB,UAAW,YAAQ,GAC9BwvF,IACI/hF,KACDm8rB,EAAQ5psB,UAAW,iBAAa,GACnC4psB,EAAUp6mB,IACNzhF,GACD67rB,IAEL15lB,IC1vBEjhB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAS5Ds3S,GAAsB,SAAU/oP,GAEhC,SAAS+oP,IACL,OAAkB,OAAX/oP,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAoB/D,OAtBAsqF,GAAU4pP,EAAM/oP,GAIhBN,IACI3jF,EAAS,OACVgtU,EAAK74U,UAAW,YAAQ,GAC3BwvF,IACI3jF,GAAS,IACVgtU,EAAK74U,UAAW,kBAAc,GACjCwvF,IACI3jF,EAAS,SACVgtU,EAAK74U,UAAW,mBAAe,GAClCwvF,IACI3jF,EAAS,KACVgtU,EAAK74U,UAAW,oBAAgB,GACnCwvF,IACI3jF,EAAS,KACVgtU,EAAK74U,UAAW,oBAAgB,GACnCwvF,IACI3jF,EAAS,KACVgtU,EAAK74U,UAAW,oBAAgB,GAC5B64U,GACTl1Q,IAEEkooB,GAAgC,WAGhC,OAFA,gBAKA/6gB,GAAyB,WACzB,SAASA,EAAQysgB,GACb54rB,KAAKmnsB,sBACLnnsB,KAAKonsB,sBACLpnsB,KAAK68rB,gBAAkB,IAAIqK,GAC3BlnsB,KAAK88rB,gBAAkB,IAAIoK,GAC3BlnsB,KAAK44rB,QAAUA,EA+PnB,OAxPAzsgB,EAAQ9wL,UAAUqqsB,oBAAsB,SAAU2B,GAC9C,GAAIA,QAAgClssB,IAAnBkssB,EAAU7qsB,KACvBwD,KAAK44rB,QAAQ2M,wBAA0B8B,OAEtC,IAAKA,EAAUC,YAAwC,UAA1BD,EAAUE,aAA8C,OAAnBF,EAAU7qsB,KAC7EwD,KAAK44rB,QAAQ2M,wBAA0B8B,EAAU7qsB,UAEhD,GAAI6qsB,EAAUC,YAAwC,UAA1BD,EAAUE,YACvCvnsB,KAAK44rB,QAAQ2M,wBAA0BvlsB,KAAKwnsB,qBAAqBH,QAEhE,GAAIA,EAAUC,YAAwC,SAA1BD,EAAUE,YACvCvnsB,KAAK44rB,QAAQ2M,wBAA0BvlsB,KAAKynsB,oBAAoBJ,QAE/D,IAAKA,EAAUC,YAAwC,SAA1BD,EAAUE,YAAwB,CAChE,IAAIzvrB,EAAQ9X,KAAK44rB,QAAQ9grB,MACrBF,EAAQ5X,KAAK44rB,QAAQhhrB,MACzB5X,KAAK68rB,gBAAgB98qB,IAAMjI,EAAMmhB,QACjCj5B,KAAK68rB,gBAAgBvwrB,IAAMwL,EAAMohB,QACjCl5B,KAAK88rB,gBAAgB/8qB,IAAMnI,EAAMqhB,QACjCj5B,KAAK88rB,gBAAgBxwrB,IAAMsL,EAAMshB,SACP,YAApBphB,EAAMoa,WAA+C,aAApBpa,EAAMoa,YACxCz0B,EAAkBqa,EAAMmhB,WAAYx7B,EAAkBqa,EAAMohB,YACvC,YAApBthB,EAAMsa,WAA+C,aAApBta,EAAMsa,YACpCz0B,EAAkBma,EAAMqhB,WAAYx7B,EAAkBma,EAAMshB,WACjEl5B,KAAK0nsB,eAAeL,EAAU7qsB,KAAMsb,EAAOF,GAE/C5X,KAAK2nsB,wBACL3nsB,KAAK44rB,QAAQ2M,wBAA0BvlsB,KAAK4nsB,gBAAgBP,GAC5DrnsB,KAAK44rB,QAAQgE,YAAa,IAQlCzwgB,EAAQ9wL,UAAUsssB,sBAAwB,WACtC,IAAI7vrB,EAAQ9X,KAAK44rB,QAAQ9grB,MACrBF,EAAQ5X,KAAK44rB,QAAQhhrB,MAED,YAApBE,EAAMoa,YACNlyB,KAAKmnsB,mBAAqBnnsB,KAAK6nsB,yBAAyB7nsB,KAAK68rB,gBAAgB98qB,IAAK/f,KAAK68rB,gBAAgBvwrB,MAEnF,YAApBsL,EAAMsa,YACNlyB,KAAKonsB,mBAAqBpnsB,KAAK6nsB,yBAAyB7nsB,KAAK88rB,gBAAgB/8qB,IAAK/f,KAAK88rB,gBAAgBxwrB,MAEnF,aAApBwL,EAAMoa,YACNlyB,KAAKmnsB,mBAAqBnnsB,KAAK8nsB,sBAAsB9nsB,KAAK68rB,gBAAgB98qB,IAAK/f,KAAK68rB,gBAAgBvwrB,IAAKwL,EAAM+tD,eAE3F,aAApBjuD,EAAMsa,YACNlyB,KAAKonsB,mBAAqBpnsB,KAAK8nsB,sBAAsB9nsB,KAAK88rB,gBAAgB/8qB,IAAK/f,KAAK88rB,gBAAgBxwrB,IAAKsL,EAAMiuD,gBAQvHsmH,EAAQ9wL,UAAUwssB,yBAA2B,SAAU9nrB,EAAKzT,GAGxD,IAFA,IAAIy7rB,EAAYhorB,EACZiorB,KACGD,GAAaz7rB,GAChB07rB,EAAaxjsB,KAAKujsB,EAAU76rB,YAC5B66rB,IAEJ,OAAOC,GAOX77gB,EAAQ9wL,UAAUyssB,sBAAwB,SAAU/nrB,EAAKzT,EAAKu5D,GAU1D,IAFA,IAPIkwB,GACAr0B,SAAU,OACVh7D,KAAM,YAEN8gG,EAAaxnG,KAAK44rB,QAAQ3pnB,KAAK47B,cAAc9U,GAC7CwxO,EAAgBvnU,KAAK44rB,QAAQ3pnB,KAAK07B,cAAc5U,GAEhDp9D,EADJ5Y,EAAMC,KAAKoxC,MAAMo2C,EAAW+/N,EAAc,IAAIvnT,KAAKy/C,GAASrO,MAAM45H,WAAY/iK,IAAKlI,IAAOkI,QAEtF+/qB,KACGrvqB,GAAgBrsB,GACnB07rB,EAAaxjsB,KAAK,IAAIwb,KAAK2Y,GAAczrB,YACzCyrB,EAAeitC,GAAyBjtC,EAAc,EAAGktC,GAAc5lD,UAE3E,OAAO+nrB,GAOX77gB,EAAQ9wL,UAAUqssB,eAAiB,SAAUlrsB,EAAMsb,EAAOF,GAClDpb,EAAKC,OAAS,IACduD,KAAK68rB,gBAAgB98qB,IAAOtiB,EAAkBqa,EAAMmhB,SAA2Bz8B,EAAK,GAAG,GAAxBsb,EAAMmhB,QACrEj5B,KAAK88rB,gBAAgB/8qB,IAAOtiB,EAAkBma,EAAMqhB,SAA2Bz8B,EAAK,GAAG,GAAxBob,EAAMqhB,QACrEj5B,KAAK68rB,gBAAgBvwrB,IAAO7O,EAAkBqa,EAAMohB,SAA2B18B,EAAK,GAAG,GAAxBsb,EAAMohB,QACrEl5B,KAAK88rB,gBAAgBxwrB,IAAO7O,EAAkBma,EAAMshB,SAA2B18B,EAAK,GAAG,GAAxBob,EAAMshB,SAEzE,IAAK,IAAI+uqB,EAAY,EAAGA,EAAYzrsB,EAAKC,OAAQwrsB,IACzCzrsB,EAAKyrsB,GAAW,GAAKjosB,KAAK68rB,gBAAgB98qB,KAAOtiB,EAAkBqa,EAAMmhB,WACzEj5B,KAAK68rB,gBAAgB98qB,IAAMvjB,EAAKyrsB,GAAW,IAE3CzrsB,EAAKyrsB,GAAW,GAAKjosB,KAAK68rB,gBAAgBvwrB,KAAO7O,EAAkBqa,EAAMohB,WACzEl5B,KAAK68rB,gBAAgBvwrB,IAAM9P,EAAKyrsB,GAAW,IAE3CzrsB,EAAKyrsB,GAAW,GAAKjosB,KAAK88rB,gBAAgB/8qB,KAAOtiB,EAAkBma,EAAMqhB,WACzEj5B,KAAK88rB,gBAAgB/8qB,IAAMvjB,EAAKyrsB,GAAW,IAE3CzrsB,EAAKyrsB,GAAW,GAAKjosB,KAAK88rB,gBAAgBxwrB,KAAO7O,EAAkBma,EAAMshB,WACzEl5B,KAAK88rB,gBAAgBxwrB,IAAM9P,EAAKyrsB,GAAW,KASvD97gB,EAAQ9wL,UAAUussB,gBAAkB,SAAUM,GAE1C,IAAIC,EAAqBD,EAAY1rsB,KACjC4rsB,EAAUposB,KAAKmnsB,mBACfkB,EAAUrosB,KAAKonsB,mBACfkB,EAAoB,EACpBC,EAAoB,EACxB,GAAIJ,EAAmB1rsB,OAAQ,CAC3BuD,KAAKwosB,mBACL,IAAK,IAAIC,EAAS,EAAGA,EAASN,EAAmB1rsB,OAAQgssB,IAOrD,IALIH,EADiC,aAAjCtosB,KAAK44rB,QAAQ9grB,MAAMoa,UACCi2qB,EAAmBM,GAAQ,GAG3BL,EAAQ7psB,QAAQ4psB,EAAmBM,GAAQ,GAAGv7rB,cAE7C,EAAG,CACxB,MAAQlN,KAAKwosB,gBAAgBF,IACzBtosB,KAAKwosB,gBAAgBhksB,SAQzB,IAA2B,KALvB+jsB,EADiC,aAAjCvosB,KAAK44rB,QAAQhhrB,MAAMsa,UACCi2qB,EAAmBM,GAAQ,GAG3BJ,EAAQ9psB,QAAQ4psB,EAAmBM,GAAQ,GAAGv7rB,aAExC,CAC1B,KAAsE,KAA/DlN,KAAKwosB,gBAAgBF,GAAmBC,IAC3CvosB,KAAKwosB,gBAAgBF,GAAmB9jsB,KAAK,IAEjDxE,KAAKwosB,gBAAgBF,GAAmBC,GAAqB9qsB,EAAkB0qsB,EAAmBM,GAAQ,IACtG,GAAKN,EAAmBM,GAAQ,KAKpD,OAAOzosB,KAAKwosB,iBAOhBr8gB,EAAQ9wL,UAAUossB,oBAAsB,SAAUS,GAE9C,IAAIC,EAAqBD,EAAY1rsB,KACjC4rsB,EAAUposB,KAAK44rB,QAAQ9grB,MAAM0vT,OAASxnU,KAAK44rB,QAAQ9grB,MAAM0vT,UACzD6gY,EAAUrosB,KAAK44rB,QAAQhhrB,MAAM4vT,OAASxnU,KAAK44rB,QAAQhhrB,MAAM4vT,UACzD8gY,EAAoB,EACpBC,EAAoB,EACxB,GAAIJ,EAAmB1rsB,OAAQ,CAC3BuD,KAAKwosB,mBACL,IAAK,IAAIv2rB,EAAQ,EAAGA,EAAQk2rB,EAAmB1rsB,OAAQwV,IAEnD,IAA2B,KAD3Bq2rB,EAAoBF,EAAQ7psB,QAAQ4psB,EAAmBl2rB,GAAOi2rB,EAAYQ,gBAC5C,CAC1B,MAAQ1osB,KAAKwosB,gBAAgBF,IACzBtosB,KAAKwosB,gBAAgBhksB,SAGzB,IAA2B,KAD3B+jsB,EAAoBF,EAAQ9psB,QAAQ4psB,EAAmBl2rB,GAAOi2rB,EAAYS,gBAC5C,CAC1B,KAAsE,KAA/D3osB,KAAKwosB,gBAAgBF,GAAmBC,IAC3CvosB,KAAKwosB,gBAAgBF,GAAmB9jsB,KAAK,IAEjDxE,KAAKwosB,gBAAgBF,GAAmBC,GACpC9qsB,EAAkB0qsB,EAAmBl2rB,GAAOi2rB,EAAYU,eACpD,GAAKT,EAAmBl2rB,GAAOi2rB,EAAYU,gBAKnE,OAAO5osB,KAAKwosB,iBAOhBr8gB,EAAQ9wL,UAAUmssB,qBAAuB,SAAUU,GAE/C,IAKI7qsB,EALA8qsB,EAAqBD,EAAY1rsB,KACjC8rsB,EAAoB,EACpBC,EAAoB,EACpBH,EAAUposB,KAAK44rB,QAAQ9grB,MAAM0vT,OAASxnU,KAAK44rB,QAAQ9grB,MAAM0vT,UACzD6gY,EAAUrosB,KAAK44rB,QAAQhhrB,MAAM4vT,OAASxnU,KAAK44rB,QAAQhhrB,MAAM4vT,UAE7D,GAAI2gY,EAAmB1rsB,OAAQ,CAC3BuD,KAAKwosB,mBACL,IAAK,IAAIC,EAAS,EAAGA,EAASN,EAAmB1rsB,OAAQgssB,IAErD,IAA2B,KAD3BH,EAAoBF,EAAQ7psB,QAAQ4psB,EAAmBM,GAAQP,EAAYQ,gBAC7C,CAC1B,MAAQ1osB,KAAKwosB,gBAAgBF,IACzBtosB,KAAKwosB,gBAAgBhksB,SAEzB,IAAK,IAAIyN,EAAQ,EAAGA,EAAQ3T,OAAOhB,KAAK6qsB,EAAmBM,IAAShssB,OAAQwV,IAGxE,GAFA5U,EAAMiB,OAAOhB,KAAK6qsB,EAAmBM,IAASx2rB,IAEnB,KAD3Bs2rB,EAAoBlrsB,IAAQ6qsB,EAAYQ,aAAeL,EAAQ9psB,QAAQlB,IAAQ,GACjD,CAC1B,KAAsE,KAA/D2C,KAAKwosB,gBAAgBF,GAAmBC,IAC3CvosB,KAAKwosB,gBAAgBF,GAAmB9jsB,KAAK,IAEjDxE,KAAKwosB,gBAAgBF,GAAmBC,GACpC9qsB,EAAkB0qsB,EAAmBM,GAAQprsB,IACzC,GAAK8qsB,EAAmBM,GAAQprsB,KAM5D,OAAO2C,KAAKwosB,iBAOhBr8gB,EAAQ9wL,UAAUiX,QAAU,SAAUsmrB,KAUtCzsgB,EAAQ9wL,UAAUkkC,cAAgB,WAC9B,MAAO,WAEJ4sJ,KCvTPn2I,GAAyB,WACzB,SAASA,EAAQ4ipB,GAEb54rB,KAAKuiS,SAAU,EAEfviS,KAAK+msB,WAAY,EACjB/msB,KAAK44rB,QAAUA,EA+InB,OA1IA5ipB,EAAQ36C,UAAUkkC,cAAgB,WAC9B,MAAO,WAMXyW,EAAQ36C,UAAUmqsB,gBAAkB,SAAUqD,EAAQ9B,GAClD,IAAI/isB,EAAMxD,SAASosB,eAAe5sB,KAAK44rB,QAAQ53rB,QAAQsC,GAAK,wBAC5D,GAAKulsB,EAgBD7ksB,EAAIU,MAAMC,WAAa,cAhBd,CACT,GAAIX,GAAgC,WAAzBA,EAAIU,MAAMC,WAAyB,CAC1C,GAAI3E,KAAKy2C,eAAiBswpB,EACtB/msB,KAAKy2C,cAAcyvP,eAGnB,GAAIlmS,KAAKy2C,eAAiBz2C,KAAKy2C,cAAcz1C,QAAS,CAC7BhB,KAAKy2C,cAAcz1C,QAAQ4b,WACjCpZ,aAAa,UAAW,KAG/CQ,EAAIU,MAAMC,WAAa,SAE3B3E,KAAK+msB,WAAY,IAWzB/wpB,EAAQ36C,UAAUiX,QAAU,SAAUsmrB,KAWtC5ipB,EAAQ36C,UAAU+5B,cAAgB,SAAUroB,EAAGC,EAAG87rB,GAC9C,IAAIn9rB,EAAS,KACT3L,KAAK44rB,QAAQmF,aAAaC,WAAah+rB,KAAK44rB,QAAQ6G,cAAcX,oBAClE9+rB,KAAK44rB,QAAQ6G,cAAcd,qBAC3BhzrB,EAASopB,SAAS/0B,KAAK44rB,QAAQmF,aAAa35Z,UAAUt3Q,KAAM,IAAM,GAEtE9sB,KAAKy2C,cAAgB,IAAI2R,IACrBm8O,iBAAiB,EACjB54R,OAAQA,EACR+hB,UAAY3gB,EAAGA,EAAGC,EAAGA,GACrBkO,MAAOlb,KAAK44rB,QAAQ19qB,MACpBkf,QAAS0uqB,EACTlma,YACI7sR,OAAQ/V,KAAK44rB,QAAQ9zX,gBAAgB/uT,OAAS/V,KAAK44rB,QAAQ9zX,gBAAgB93T,EAC3EgJ,MAAOhW,KAAK44rB,QAAQ9zX,gBAAgB9uT,MAAOjJ,EAAG/M,KAAK44rB,QAAQ9zX,gBAAgB/3T,IAEhF,IAAM/M,KAAK44rB,QAAQ53rB,QAAQsC,GAAK,yBAOvC0yC,EAAQ36C,UAAUwqsB,iBAAmB,SAAUjN,GAC3C,IAAI9zN,EAAW3je,EAAc,OACzBmC,GAAItD,KAAK44rB,QAAQ53rB,QAAQsC,GAAK,uBAC9BC,OAAQ,sBAEZvD,KAAK44rB,QAAQ53rB,QAAQW,YAAYR,EAAc,OAC3CmC,GAAItD,KAAK44rB,QAAQ53rB,QAAQsC,GAAK,oBAC9BC,OAAQ,sBAEP5B,YAAYmje,KAMrB9ub,EAAQ36C,UAAU2mI,cAAgB,SAAU7lG,GACxC,IAAI4sqB,EAAe/osB,KAAK44rB,QAAQ6G,cAC5BqJ,GAAmB,IACvB,GAAIrrsB,EAAkB0+B,EAAYn/B,SAAYS,EAAkB0+B,EAAYn/B,QAA2C,KAAjCm/B,EAAYn/B,MAAMkQ,WACpGlN,KAAKwlsB,iBAAgB,GAAO,OAE3B,CACD,GAAK/nsB,EAAkBuC,KAAK44rB,QAAQl5X,eAgChCopY,GAAmBC,EAAanJ,gBAAkB,MAAQmJ,EAAajJ,gBAAkB,MACjFiJ,EAAalK,gBAAgB1iqB,EAAYn/B,MAAOgD,KAAK44rB,QAAQmF,aAAa/hqB,aAjClC,CAKhD,IAAIgtqB,GACA/N,QAASj7rB,KAAK44rB,QACd//pB,QAAQ,EACRpB,KAAM,gBACNz6B,MAAOm/B,EAAYn/B,MACnBwxB,OAAQxuB,KAAK44rB,QAAQ6G,cAAcI,gBACnCpxqB,OAAQzuB,KAAK44rB,QAAQ6G,cAAcM,gBACnC0G,OAAQzmsB,KAAK44rB,QAAQ6G,cAAcG,gBAC/B5/rB,KAAK44rB,QAAQ6G,cAAcG,gBAAgB1yrB,WAAa,KAC5Dw5rB,OAAQ1msB,KAAK44rB,QAAQ6G,cAAcK,gBAC/B9/rB,KAAK44rB,QAAQ6G,cAAcK,gBAAgB5yrB,WAAa,KAC5DktB,SAAU2uqB,EAAanJ,gBAAkB,MAAQmJ,EAAajJ,gBAAkB,MACxEiJ,EAAalK,gBAAgB1iqB,EAAYn/B,MAAOgD,KAAK44rB,QAAQmF,aAAa/hqB,UAGtF,GADAh8B,KAAK44rB,QAAQpyqB,QAAQ,gBAAiBwirB,GACjCA,EAAQnwqB,OAOT,YAHI74B,KAAKy2C,eACLz2C,KAAKwlsB,iBAAgB,IAJzBsD,EAAkBE,EAAQ5uqB,QAc7Bp6B,KAAKy2C,cAINz2C,KAAKy2C,cAAcrc,QAAU0uqB,EAH7B9osB,KAAKo1B,cAAc+G,EAAYpvB,EAAKovB,EAAYnmB,MAAQ,EAAImmB,EAAYnvB,EAAKmvB,EAAYpmB,OAAS,EAAI+yrB,GAK1G9osB,KAAKwlsB,iBAAgB,GACrBxlsB,KAAKy2C,cAAc8tP,iBAAmBvkS,KAAKuiS,UAAWviS,KAAK+msB,UAC3D/msB,KAAKuiS,SAAWviS,KAAY,SAAYA,KAAKuiS,QAC7CviS,KAAK+msB,WAAa/msB,KAAc,WAAYA,KAAK+msB,UACjD/msB,KAAKy2C,cAAc/oB,SAAS3gB,EAAIovB,EAAYpvB,EAAKovB,EAAYnmB,MAAQ,EACrEhW,KAAKy2C,cAAc/oB,SAAS1gB,EAAImvB,EAAYnvB,EAAKmvB,EAAYpmB,OAAS,IAGvEigC,KCzJXizpB,GAAc78lB,OAAQ2kS,GAAaL,GAAcw4T,sqCnlB+4BjD,SAA0BjpsB,GACtB,IAAIsrB,EAAWF,GAAaprB,GAC5BmkB,GAAU9iB,KAAKiqB,GACf,IAAItD,EAAMhC,GAAc3kB,KAAKtB,KAAMA,KAAKgB,SACxChB,KAAKkoB,UAAYD,EACjBjoB,KAAKhD,MAAQirB,EACThoB,EAAKmjB,OACL+B,GAAa7jB,KAAKiqB,GAClBhH,GAAWjjB,KAAKiqB,YA6BxB,SAAuBtrB,GACnB,OAAOgmB,GAAc3kB,KAAKmqB,GAAexrB,GAAOA,EAAKe,uBAMzD,SAA6Bf,GACzB,OAAO+lB,GAAgB1kB,KAAKmqB,GAAexrB,GAAOA,EAAKe,0OolB77BvDspF,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAM5D+/R,GAAsB,SAAUxxO,GAEhC,SAASwxO,IACL,OAAkB,OAAXxxO,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAoB/D,OAtBAsqF,GAAUqyO,EAAMxxO,GAIhBN,IACI3jF,EAAS,SACVy1T,EAAKthU,UAAW,YAAQ,GAC3BwvF,IACI3jF,EAAS,KACVy1T,EAAKthU,UAAW,aAAS,GAC5BwvF,IACI3jF,EAAS,aACVy1T,EAAKthU,UAAW,kBAAc,GACjCwvF,IACI3jF,EAAS,YACVy1T,EAAKthU,UAAW,kBAAc,GACjCwvF,IACI3jF,EAAS,WACVy1T,EAAKthU,UAAW,iBAAa,GAChCwvF,IACI3jF,EAAS,IACVy1T,EAAKthU,UAAW,eAAW,GACvBshU,GACT39P,IAKE89P,GAAwB,SAAU3xO,GAElC,SAAS2xO,IACL,OAAkB,OAAX3xO,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAc/D,OAhBAsqF,GAAUwyO,EAAQ3xO,GAIlBN,IACI3jF,EAAS,KACV41T,EAAOzhU,UAAW,YAAQ,GAC7BwvF,IACI3jF,EAAS,KACV41T,EAAOzhU,UAAW,aAAS,GAC9BwvF,IACI3jF,EAAS,KACV41T,EAAOzhU,UAAW,WAAO,GAC5BwvF,IACI3jF,EAAS,KACV41T,EAAOzhU,UAAW,cAAU,GACxByhU,GACT99P,IAKE49P,GAAwB,SAAUzxO,GAElC,SAASyxO,IACL,OAAkB,OAAXzxO,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVAsqF,GAAUsyO,EAAQzxO,GAIlBN,IACI3jF,EAAS,OACV01T,EAAOvhU,UAAW,aAAS,GAC9BwvF,IACI3jF,EAAS,IACV01T,EAAOvhU,UAAW,aAAS,GACvBuhU,GACT59P,IAKEu1U,GAA4B,SAAUppT,GAEtC,SAASopT,IACL,OAAkB,OAAXppT,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KA6B/D,OA/BAsqF,GAAUiqT,EAAYppT,GAItBN,IACI3jF,EAAS,KACVqtY,EAAWl5Y,UAAW,eAAW,GACpCwvF,IACI3jF,EAAS,IACVqtY,EAAWl5Y,UAAW,SAAK,GAC9BwvF,IACI3jF,EAAS,IACVqtY,EAAWl5Y,UAAW,SAAK,GAC9BwvF,IACI3jF,EAAS,SACVqtY,EAAWl5Y,UAAW,yBAAqB,GAC9CwvF,IACI3jF,EAAS,SACVqtY,EAAWl5Y,UAAW,2BAAuB,GAChDwvF,IACI3jF,EAAS,OACVqtY,EAAWl5Y,UAAW,cAAU,GACnCwvF,IACI9iF,GAAU+kB,KAAM,OAAQ0J,MAAO,MAAQmmS,KACxC43E,EAAWl5Y,UAAW,YAAQ,GACjCwvF,IACI3jF,EAAS,OACVqtY,EAAWl5Y,UAAW,iBAAa,GACtCwvF,IACI3jF,EAAS,OACVqtY,EAAWl5Y,UAAW,iBAAa,GAC/Bk5Y,GACTv1U,IAKE5H,GAA2B,SAAU+zB,GAErC,SAAS/zB,IACL,OAAkB,OAAX+zB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAuB/D,OAzBAsqF,GAAUlzB,EAAW+zB,GAIrBN,IACI3jF,EAAS,WACVkwD,EAAU/7D,UAAW,YAAQ,GAChCwvF,IACI3jF,EAAS,IACVkwD,EAAU/7D,UAAW,cAAU,GAClCwvF,IACI3jF,EAAS,IACVkwD,EAAU/7D,UAAW,aAAS,GACjCwvF,IACI3jF,EAAS,KACVkwD,EAAU/7D,UAAW,2BAAuB,GAC/CwvF,IACI3jF,EAAS,gBACVkwD,EAAU/7D,UAAW,uBAAmB,GAC3CwvF,IACI9iF,GAAUiO,MAAO,EAAGwgB,MAAO,WAAaomS,KACzCxlQ,EAAU/7D,UAAW,cAAU,GAClCwvF,IACI3jF,EAAS,IACVkwD,EAAU/7D,UAAW,cAAU,GAC3B+7D,GACT4H,IAKEm+P,GAAiC,SAAUhyO,GAE3C,SAASgyO,IACL,OAAkB,OAAXhyO,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAuB/D,OAzBAsqF,GAAU6yO,EAAiBhyO,GAI3BN,IACI3jF,GAAS,IACVi2T,EAAgB9hU,UAAW,cAAU,GACxCwvF,IACI3jF,EAAS,YACVi2T,EAAgB9hU,UAAW,YAAQ,GACtCwvF,IACI9iF,GAAUyuB,MAAO,UAAW1J,KAAM,QAAU6vS,KAC7CQ,EAAgB9hU,UAAW,iBAAa,GAC3CwvF,IACI3jF,EAAS,OACVi2T,EAAgB9hU,UAAW,cAAU,GACxCwvF,IACI3jF,EAAS,OACVi2T,EAAgB9hU,UAAW,gBAAY,GAC1CwvF,IACI3jF,GAAS,IACVi2T,EAAgB9hU,UAAW,uBAAmB,GACjDwvF,IACI9iF,KAAY60T,KACbO,EAAgB9hU,UAAW,cAAU,GACjC8hU,GACTn+P,IC1LEsrB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAK5Ds3W,GAAsB,SAAU/oT,GAEhC,SAAS+oT,IACL,OAAkB,OAAX/oT,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAiB/D,OAnBAsqF,GAAU4pT,EAAM/oT,GAIhBN,IACI3jF,EAAS,KACVgtY,EAAK74Y,UAAW,iBAAa,GAChCwvF,IACI3jF,EAAS,OACVgtY,EAAK74Y,UAAW,cAAU,GAC7BwvF,IACI3jF,EAAS,IACVgtY,EAAK74Y,UAAW,aAAS,GAC5BwvF,IACI3jF,EAAS,OACVgtY,EAAK74Y,UAAW,aAAS,GAC5BwvF,IACI3jF,EAAS,IACVgtY,EAAK74Y,UAAW,cAAU,GACtB64Y,GACTl1U,IAKE4zE,GAAuB,SAAUznD,GAEjC,SAASynD,IACL,OAAkB,OAAXznD,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAc/D,OAhBAsqF,GAAUsoD,EAAOznD,GAIjBN,IACI9iF,GAAU+kB,KAAM,OAAQ0J,MAAO,MAAQmmS,KACxC/pL,EAAMv3I,UAAW,YAAQ,GAC5BwvF,IACI3jF,GAAS,IACV0rI,EAAMv3I,UAAW,qBAAiB,GACrCwvF,IACI3jF,EAAS,KACV0rI,EAAMv3I,UAAW,cAAU,GAC9BwvF,IACI3jF,EAAS,IACV0rI,EAAMv3I,UAAW,cAAU,GACvBu3I,GACT5zE,IAKEm1U,GAAuB,SAAUhpT,GAEjC,SAASgpT,IACL,OAAkB,OAAXhpT,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KA0B/D,OA5BAsqF,GAAU6pT,EAAOhpT,GAIjBN,IACI3jF,EAAS,OACVitY,EAAM94Y,UAAW,aAAS,GAC7BwvF,IACI3jF,EAAS,OACVitY,EAAM94Y,UAAW,WAAO,GAC3BwvF,IACI3jF,EAAS,YACVitY,EAAM94Y,UAAW,gBAAY,GAChCwvF,IACI3jF,EAAS,KACVitY,EAAM94Y,UAAW,aAAS,GAC7BwvF,IACI3jF,EAAS,KACVitY,EAAM94Y,UAAW,kBAAc,GAClCwvF,IACI3jF,EAAS,KACVitY,EAAM94Y,UAAW,gBAAY,GAChCwvF,IACI3jF,EAAS,IACVitY,EAAM94Y,UAAW,cAAU,GAC9BwvF,IACI9iF,GAAUyuB,MAAO,UAAWxgB,MAAO,GAAK4mT,KACzCu3E,EAAM94Y,UAAW,cAAU,GACvB84Y,GACTn1U,IAKEo1U,GAAsB,SAAUjpT,GAEhC,SAASipT,IACL,OAAkB,OAAXjpT,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAiB/D,OAnBAsqF,GAAU8pT,EAAMjpT,GAIhBN,IACI3jF,EAAS,KACVktY,EAAK/4Y,UAAW,cAAU,GAC7BwvF,IACI3jF,EAAS,IACVktY,EAAK/4Y,UAAW,aAAS,GAC5BwvF,IACI3jF,EAAS,OACVktY,EAAK/4Y,UAAW,gBAAY,GAC/BwvF,IACI3jF,EAAS,OACVktY,EAAK/4Y,UAAW,aAAS,GAC5BwvF,IACI3jF,EAAS,OACVktY,EAAK/4Y,UAAW,cAAU,GACtB+4Y,GACTp1U,IAKEw1U,GAAyB,SAAUrpT,GAEnC,SAASqpT,IACL,IAAIz0Y,EAAmB,OAAXorF,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAKhE,OAHAD,EAAMowE,mBAAoB,EAE1BpwE,EAAM8pI,aAAe,KACd9pI,EA+CX,OAtDAuqF,GAAUkqT,EAASrpT,GASnBN,IACI3jF,EAAS,WACVstY,EAAQn5Y,UAAW,YAAQ,GAC9BwvF,IACI3jF,EAAS,OACVstY,EAAQn5Y,UAAW,aAAS,GAC/BwvF,IACI3jF,EAAS,qBACVstY,EAAQn5Y,UAAW,kBAAc,GACpCwvF,IACI3jF,EAAS,OACVstY,EAAQn5Y,UAAW,gBAAY,GAClCwvF,IACI9iF,GAAUyuB,MAAO,WAAaomS,KAC/B43E,EAAQn5Y,UAAW,cAAU,GAChCwvF,IACI3jF,EAAS,KACVstY,EAAQn5Y,UAAW,2BAAuB,GAC7CwvF,IACI3jF,EAAS,QACVstY,EAAQn5Y,UAAW,iBAAa,GACnCwvF,IACI3jF,EAAS,KACVstY,EAAQn5Y,UAAW,cAAU,GAChCwvF,IACI3jF,EAAS,KACVstY,EAAQn5Y,UAAW,aAAS,GAC/BwvF,IACI3jF,EAAS,OACVstY,EAAQn5Y,UAAW,aAAS,GAC/BwvF,IACI3jF,EAAS,IACVstY,EAAQn5Y,UAAW,eAAW,GACjCwvF,IACI3jF,EAAS,IACVstY,EAAQn5Y,UAAW,yBAAqB,GAC3CwvF,IACI3jF,GAAS,IACVstY,EAAQn5Y,UAAW,kBAAc,GACpCwvF,IACI3jF,EAAS,IACVstY,EAAQn5Y,UAAW,cAAU,GAChCwvF,IACI3jF,EAAS,OACVstY,EAAQn5Y,UAAW,mBAAe,GAC9Bm5Y,GACTx1U,IAEEsiQ,GAAsB,SAAUn2O,GAEhC,SAASm2O,IAKL,IAAIvhU,EAAmB,OAAXorF,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAGhE,OADAD,EAAMo1B,iBACCp1B,EAgCX,OAzCAuqF,GAAUg3O,EAAMn2O,GAWhBN,IACI3jF,EAAS,IACVo6T,EAAKjmU,UAAW,eAAW,GAC9BwvF,IACI3jF,EAAS,MACVo6T,EAAKjmU,UAAW,eAAW,GAC9BwvF,IACI3jF,GAAS,IACVo6T,EAAKjmU,UAAW,kBAAc,GACjCwvF,IACI3jF,GAAS,IACVo6T,EAAKjmU,UAAW,uBAAmB,GACtCwvF,IACI9iF,KAAYmsY,KACb5yE,EAAKjmU,UAAW,YAAQ,GAC3BwvF,IACIxiF,OAAiB8rY,KAClB7yE,EAAKjmU,UAAW,cAAU,GAC7BwvF,IACIxiF,OAAiBmsY,KAClBlzE,EAAKjmU,UAAW,gBAAY,GAC/BwvF,IACI9iF,GAAUiO,MAAO,EAAGD,OAAQ,IAAMq+X,KACnC9yE,EAAKjmU,UAAW,kBAAc,GACjCwvF,IACI9iF,GAAUiO,MAAO,EAAGD,OAAQ,IAAMq+X,KACnC9yE,EAAKjmU,UAAW,kBAAc,GACjCwvF,IACI9iF,KAAY6qI,KACb0uL,EAAKjmU,UAAW,kBAAc,GAC1BimU,GACTtiQ,IhjBtOEsrB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAqKxCw+mB,GAA8B,WAO9B,OANA,SAAsBpprB,EAAKzT,EAAKnK,EAAU8yB,GACtCj1B,KAAK+f,IAAMA,EACX/f,KAAKsM,IAAMA,EACXtM,KAAKmC,SAAWA,EAChBnC,KAAKi1B,MAAQA,MAMjBuQ,GAA+B,WAK/B,OAJA,SAAuBz4B,EAAGC,GACtBhN,KAAK+M,EAAIA,EACT/M,KAAKgN,EAAIA,MAQbogB,GAAsB,WAKtB,OAJA,SAAcpX,EAAOD,GACjB/V,KAAKgW,MAAQA,EACbhW,KAAK+V,OAASA,MAMlBmgB,GAAsB,WAOtB,OANA,SAAcnpB,EAAGC,EAAGgJ,EAAOD,GACvB/V,KAAK+M,EAAIA,EACT/M,KAAKgN,EAAIA,EACThN,KAAKgW,MAAQA,EACbhW,KAAK+V,OAASA,MAMlB+rR,GAAiC,WAIjC,OAHA,SAAyBx+R,GACrBtD,KAAKsD,GAAKA,MAMd8yB,GAA4B,SAAU+0D,GAEtC,SAAS/0D,EAAW9yB,EAAIs6B,EAAM5nB,EAAOwgB,EAAO/oB,EAASqkC,EAAWvjB,EAAGlhB,QAC7C,IAAdA,IAAwBA,EAAY,IACxC,IAAItN,EAAQorF,EAAO7pF,KAAKtB,KAAMsD,IAAOtD,KAQrC,OAPAD,EAAM0N,QAAUA,EAChB1N,EAAM69B,KAAOA,EACb79B,EAAM+9B,OAAStH,EACfz2B,EAAM,gBAAkBiW,EACxBjW,EAAM,oBAAsB+xC,EAC5B/xC,EAAMwuB,EAAIA,EACVxuB,EAAMsN,UAAYA,EACXtN,EAEX,OAbAuqF,GAAUl0D,EAAY+0D,GAaf/0D,GACT0rQ,IAGEoiC,GAA4B,WAY5B,OAXA,SAAoB5gU,EAAIs6B,EAAM0G,EAAQ72B,EAAS4lB,EAAMhmB,EAAWykC,GAC5D9xC,KAAKyN,QAAUA,EACfzN,KAAKsD,GAAKA,EACVtD,KAAKgN,EAAIqmB,EAAKrmB,EACdhN,KAAK+M,EAAIsmB,EAAKtmB,EACd/M,KAAK49B,KAAOA,EACZ59B,KAAK89B,OAASwG,EAAO9N,MACrBx2B,KAAK,gBAAkBskC,EAAOtuB,MAC9BhW,KAAK+V,OAASsd,EAAKtd,OACnB/V,KAAKgW,MAAQqd,EAAKrd,UAMtBugB,GAA4B,SAAU40D,GAEtC,SAAS50D,EAAWjzB,EAAIyJ,EAAGC,EAAG6G,EAAQ4Y,EAAMpf,EAAW8xB,QACjC,IAAd9xB,IAAwBA,EAAY,IACxC,IAAItN,EAAQorF,EAAO7pF,KAAKtB,KAAMsD,IAAOtD,KASrC,OARAD,EAAMsN,UAAY,GAClBtN,EAAMo/B,SAAW,OACjBp/B,EAAMgN,EAAIA,EACVhN,EAAMiN,EAAIA,EACVjN,EAAM8T,OAASA,EACf9T,EAAM0sB,KAAOA,EACb1sB,EAAMsN,UAAYA,EAClBtN,EAAMo/B,SAAWA,EACVp/B,EAEX,OAdAuqF,GAAU/zD,EAAY40D,GAcf50D,GACTurQ,IAGE/oQ,GAA+B,WAM/B,OALA,SAAuBtM,EAAMzvB,EAAO8vB,GAChC9sB,KAAKysB,KAAOA,EACZzsB,KAAKhD,MAAQA,EACbgD,KAAK8sB,KAAOA,MAMhBs8qB,GAAuB,WAKvB,OAJA,SAAe1iqB,EAAWytB,GACtBn0D,KAAKm0D,MAAQA,EACbn0D,KAAK0mC,UAAYA,MijBjRrBoyW,GAAiC,WACjC,SAASA,EAAgBr0W,GACrBzkC,KAAKykC,MAAQA,EA0ZjB,OArZAq0W,EAAgBz9Y,UAAUgusB,oBAAsB,WAC5C,IAAIlzrB,EACAugB,EACJ12B,KACKykC,MAAMg8R,aACXzgU,KAAKykC,MAAMi8R,YACX,IAAI3zT,EACAC,EACAgJ,EACAD,EAEgB/V,KAAKykC,MAAM6kqB,gBAC/BtpsB,KAAKupsB,mBACL,IAAK,IAAIptsB,EAAI,EAAGA,EAAI6D,KAAKykC,MAAMgjC,KAAKhrE,OAAQN,KACxCga,EAAOnW,KAAKykC,MAAMgjC,KAAKtrE,IAClBqtsB,WAAa,IAAIJ,GAAMjtsB,EAAMga,EAAKsf,gBAA4B,MAAT,QACxDtf,EAAKsf,gBAAkDz1B,KAAKykC,MAAMi8R,SAASl8T,KAAK,GAAxDxE,KAAKykC,MAAMg8R,UAAUj8T,KAAK,GACpDxE,KAAKypsB,oBAAoBtzrB,EAAMha,GAC/B6D,KAAK0psB,oBAAoBvzrB,EAAMha,GAC/B6D,KAAK2psB,qBAAqBxzrB,EAAMha,GAC5Bga,EAAKwxD,SAASlrE,OAAS,GACvBuD,KAAK4psB,uBAAuBzzrB,EAAMha,GAElCga,EAAK2wB,OAAOrqC,OAAS,GACrBuD,KAAK6psB,sBAAsB1zrB,EAAMha,GAErCu6B,EAASvgB,EAAK2zrB,YACiB,aAA3B9psB,KAAKykC,MAAMrL,aACXrsB,EAAMoJ,EAAKsf,gBAA4Ctf,EAAK+wD,WAAWn6D,EAAzC2pB,EAAO3pB,EAlB3B,EAmBVC,EAAImJ,EAAK+wD,WAAWl6D,EACpB+I,EAASI,EAAK+wD,WAAWnxD,OACzBC,EAAQ3J,KAAKE,IAAM4J,EAAKsf,gBAA+CiB,EAAO3pB,EAAI2pB,EAAO1gB,MArB/E,EAqBsGjJ,EAApEoJ,EAAK+wD,WAAWn6D,EAAIA,KAGhEC,EAAMmJ,EAAKsf,gBAA4Dtf,EAAK+wD,WAAWl6D,EAAzD0pB,EAAO1pB,EAAI0pB,EAAO3gB,OAxBtC,EAyBVhJ,EAAIoJ,EAAK+wD,WAAWn6D,EACpBiJ,EAAQG,EAAK+wD,WAAWlxD,MACxBD,EAAS1J,KAAKE,IAAM4J,EAAKsf,gBAAsDiB,EAAO1pB,EA3B5E,EA2B+FA,EAA7DX,KAAKE,IAAI4J,EAAK+wD,WAAWl6D,EAAIA,KAE7EmJ,EAAKugB,OAAS,IAAIR,GAAKnpB,EAAGC,EAAGgJ,EAAOD,IAQ5C+iY,EAAgBz9Y,UAAUousB,oBAAsB,SAAUtzrB,EAAMuwB,GAC5D,IAAI35B,EACAC,EACAgJ,EACAD,EACA9D,EACA83rB,EACA58qB,EAAahX,EAAK23C,KAAK/3C,OACvBqjB,EAAcp5B,KAAKykC,MAAMrL,YACzB06oB,EAAgB9zqB,KAAKykC,MAAM6kqB,gBAC/Bn8qB,EAAchX,EAAK23C,KAAK93C,MAAQ,EAAKmX,EAAa,KAC9B,aAAhBiM,GACApsB,EAAKvP,EAAkB0vB,GAAe2mpB,EAAc9mqB,EAChD8mqB,EAAc9mqB,GAAM8mqB,EAAc/9pB,OAAS,EAAMoX,EAAa,GAClEnX,EAAQG,EAAK23C,KAAK93C,MAClBD,EAAUtY,EAAkB0vB,GAAe2mpB,EAAc/9pB,OAASoX,IAGlEpgB,EAAKtP,EAAkB0vB,GAAe2mpB,EAAc/mqB,EAChD+mqB,EAAc/mqB,GAAM+mqB,EAAc99pB,MAAQ,EAAMmX,EAAa,GACjEpX,EAASI,EAAK23C,KAAK93C,MACnBA,EAASvY,EAAkB0vB,GAAe2mpB,EAAc99pB,MAAQmX,GAGhE1vB,EADJwU,EAAQjS,KAAKgqsB,kBAAkB7zrB,EAAMuwB,IAEb,aAAhBtN,EACArsB,GAAMoJ,EAAKsf,gBAAoCq+oB,EAAc/mqB,EAAI+mqB,EAAc99pB,MAAlD89pB,EAAc/mqB,GAA6CoJ,EAAK23C,KAAKniD,OAGlGqB,GAAMmJ,EAAKsf,gBAAoCq+oB,EAAc9mqB,EAAI8mqB,EAAc/9pB,OAAlD+9pB,EAAc9mqB,GAA8CmJ,EAAK23C,KAAKniD,QAIvGo+rB,EAAW/psB,KAAKykC,MAAMgjC,KAAKx1D,GACP,aAAhBmnB,EACArsB,GAAOoJ,EAAKsf,gBAAwCs0qB,EAASrzqB,OAAO3pB,EAAIg9rB,EAASrzqB,OAAO1gB,MAAzD+zrB,EAASrzqB,OAAO3pB,GAAmDoJ,EAAK23C,KAAKniD,OAG5GqB,GAAOmJ,EAAKsf,gBAAwCs0qB,EAASrzqB,OAAO1pB,EAAI+8rB,EAASrzqB,OAAO3gB,OAAzDg0rB,EAASrzqB,OAAO1pB,GAAoDmJ,EAAK23C,KAAKniD,QAGrHwK,EAAK+wD,WAAa,IAAIhxC,GAAKnpB,EAAGC,EAAGgJ,EAAOD,IAO5C+iY,EAAgBz9Y,UAAUqusB,oBAAsB,SAAUvzrB,EAAMuwB,GAC5D,IAAI35B,EACAC,EAGAi9rB,EACAC,EACAnqrB,EAAM1T,KAAK0T,IAAI5J,EAAK8iB,QAAS9iB,EAAK+iB,SAClC5sB,EAAMD,KAAKC,IAAI6J,EAAK8iB,QAAS9iB,EAAK+iB,SACtCnZ,EAAOA,IAAQzT,EAAOA,EAAM,EAAIyT,EACjB5J,EAAKihY,WAAWj1Y,SAA/B,IACIu0B,EAASvgB,EAAK+wD,WAClB+ioB,EAAQ9zrB,EAAKihY,WACb8yT,EAAQ/zrB,EAAKygY,WACbzgY,EAAKg0rB,cAAgBF,EAAM9nsB,SAC3BgU,EAAK0gY,cAAgBqzT,EAAM/nsB,SAC3B,IAAI2qB,EAAmC,aAA3B9sB,KAAKykC,MAAMrL,YAA6B1C,EAAO3gB,OAAS2gB,EAAO1gB,MACvE62Q,GAAuC,aAA3B7sR,KAAKykC,MAAMrL,YAA6B1C,EAAO1gB,MAAQ0gB,EAAO3gB,QAAU,EACxFI,EAAKg0rB,cAAgB1ssB,EAAkB0Y,EAAKg0rB,eAAiBpioB,GAAsBhoD,EAAKzT,EAAKwgB,EAAM9sB,KAAKykC,MAAMrL,aACxG6wqB,EAAM9nsB,SACZgU,EAAKwc,aAAe,IAAIw2qB,GAAapprB,EAAKzT,EAAK6J,EAAKg0rB,cAAgB79rB,EAAMyT,GAC1E5J,EAAK0gY,cAAiBp5Y,EAAkB0Y,EAAK0gY,eAAkB1gY,EAAKg0rB,cAAgB,EAAIh0rB,EAAK0gY,cAC9D,aAA3B72Y,KAAKykC,MAAMrL,aACXrsB,GAAMoJ,EAAKsf,gBAAyDiB,EAAO3pB,EAAI8/Q,EAAjDn2P,EAAO3pB,EAAI8/Q,EAAWo9a,EAAMl0rB,QAAiCk0rB,EAAMt+rB,OACjGwK,EAAKi0rB,gBAAkB,IAAIl0qB,GAAKnpB,EAAG2pB,EAAO1pB,EAAGi9rB,EAAMl0rB,OAAQ2gB,EAAO3gB,QAClEhJ,GAAMoJ,EAAKsf,gBAAyDiB,EAAO3pB,EAAI8/Q,EAAjDn2P,EAAO3pB,EAAI8/Q,EAAWq9a,EAAMn0rB,QAAiCm0rB,EAAMv+rB,OACjGwK,EAAKk0rB,gBAAkB,IAAIn0qB,GAAKnpB,EAAG2pB,EAAO1pB,EAAGk9rB,EAAMn0rB,OAAQ2gB,EAAO3gB,UAGlE/I,GAAMmJ,EAAKsf,gBAAyDiB,EAAO1pB,EAAI6/Q,EAAjDn2P,EAAO1pB,EAAI6/Q,EAAWo9a,EAAMl0rB,QAAiCk0rB,EAAMt+rB,OACjGwK,EAAKi0rB,gBAAkB,IAAIl0qB,GAAKQ,EAAO3pB,EAAGC,EAAG0pB,EAAO1gB,MAAOi0rB,EAAMl0rB,QACjE/I,GAAMmJ,EAAKsf,gBAAyDiB,EAAO1pB,EAAI6/Q,EAAjDn2P,EAAO1pB,EAAI6/Q,EAAWq9a,EAAMn0rB,QAAiCm0rB,EAAMv+rB,OACjGwK,EAAKk0rB,gBAAkB,IAAIn0qB,GAAKQ,EAAO3pB,EAAGC,EAAG0pB,EAAO1gB,MAAOk0rB,EAAMn0rB,UAQzE+iY,EAAgBz9Y,UAAUsusB,qBAAuB,SAAUxzrB,EAAMuwB,GAC7D,IAAI35B,EACAC,EACAgJ,EACAD,EAEA2gB,EAASvgB,EAAKi0rB,gBACdz+rB,EAASwK,EAAK6f,WAAWrqB,OAC7B3L,KAAKo+T,uBAAuBjoT,GAC5BH,EAAQG,EAAK+rT,aAAalsT,MAC1BD,EAASI,EAAK+rT,aAAansT,OAAS,EACL,aAA3B/V,KAAKykC,MAAMrL,aACXrsB,GAAMoJ,EAAKsf,gBAAkDiB,EAAO3pB,EAAI2pB,EAAO1gB,MAPrE,EAOoB0gB,EAAO3pB,EAAIiJ,EAP/B,GAOyFrK,EACnGqB,EAAImJ,EAAK+wD,WAAWl6D,IAGpBA,GAAMmJ,EAAKsf,gBAA2CiB,EAAO1pB,EAAI0pB,EAAO3gB,OAX9D,EAWkFA,EAA9D2gB,EAAO1pB,EAX3B,GAW6FrB,EACvGoB,EAAIoJ,EAAK+wD,WAAWn6D,GAExBoJ,EAAK2zrB,YAAc,IAAI5zqB,GAAKnpB,EAAGC,EAAGgJ,EAAOD,IAO7C+iY,EAAgBz9Y,UAAUuusB,uBAAyB,SAAUzzrB,EAAMuwB,GAmB/D,IAAK,IAlBDkhC,EAIA71C,EAAQ5b,EAAKwc,aAYboS,GAXc/kC,KAAKykC,MAAMrL,YAElBjjB,EAAK+wD,WACJ/wD,EAAK2zrB,YAQEz9rB,KAAK0T,IAAIgS,EAAMhS,IAAKgS,EAAMzlB,MACzCw4B,EAAez4B,KAAKC,IAAIylB,EAAMhS,IAAKgS,EAAMzlB,KACpCnQ,EAAI,EAAGA,EAAIga,EAAKwxD,SAASlrE,OAAQN,KACtCyrE,EAAUzxD,EAAKwxD,SAASxrE,IAChB0tI,aAAiC,OAAlBjiE,EAAQ5qE,MAC3B4qE,EAAQ5qE,MAAQ+nC,EAAeA,EAAe6iC,EAAQ5qE,MAAQ8nC,EAAeA,EAAe8iC,EAAQ5qE,MAClG+nC,EACF6iC,EAAQ5xD,MAAQ,GAAKmc,GAAYy1C,EAAQiiE,aAAc,KAAM,KAAM93G,EAAMzlB,IAAKylB,EAAMhS,IAAK,YACzF/f,KAAK,YAAc4nE,EAAQlhE,KAAO,UAAUggC,EAAWvwB,EAAMha,EAAGyrE,IAW5EkxU,EAAgBz9Y,UAAUivsB,sBAAwB,SAAU5jqB,EAAWvwB,EAAMwwB,EAAcihC,GACvF,IAAI76D,EACAC,EACA8gD,EAAO33C,EAAK+wD,WACZv7D,EAASi8D,EAAQj8D,OACjBomB,EAAQ5b,EAAKwc,aACb41C,EAAYX,EAAQW,UACpB8kT,EAAOl3W,EAAKi0rB,gBACZ/2rB,EAAQ8C,EAAK2zrB,YACbxlqB,EAASsjC,EAAQtjC,OAAOtuB,MACG,aAA3BhW,KAAKykC,MAAMrL,aACXrsB,EAAMoJ,EAAKsf,gBACO,QAAd8yC,EAAsBl1D,EAAMtG,EAAIsG,EAAM2C,MAAuB,WAAduyD,EAAyB8kT,EAAKtgX,EAAIsgX,EAAKr3W,MAAQ83C,EAAK/gD,EAD1D,SAAdw7D,EAAwBl1D,EAAMtG,EAAmB,WAAdw7D,EAA0B8kT,EAAKtgX,EAAI+gD,EAAK/gD,EAE1GA,EAAKoJ,EAAKsf,iBACkB,SAAtBmyC,EAAQW,UAAuBx7D,EAAIu3B,EAASv3B,EAAIu3B,MADF,QAAtBsjC,EAAQW,UAAsBx7D,EAAIu3B,EAASv3B,EAAIu3B,KAE7Et3B,EAAMinB,GAAmB2zC,EAAQiiE,aAAc1zH,EAAMnW,KAAKykC,MAAMrL,YAAarH,GAAS+7B,EAAK/3C,OAAU+3C,EAAK9gD,IAG1GA,EAAMmJ,EAAKsf,gBACiB,QAAd8yC,EAAuBl1D,EAAMrG,EAAmB,WAAdu7D,EAA0B8kT,EAAKrgX,EAAIqgX,EAAKt3W,OAAS+3C,EAAK9gD,EADzD,SAAdu7D,EAAwBl1D,EAAMrG,EAAIqG,EAAM0C,OAAwB,WAAdwyD,EAA0B8kT,EAAKrgX,EAC5G8gD,EAAK9gD,EACTA,EAAKmJ,EAAKsf,iBACkB,SAAtBmyC,EAAQW,UAAuBv7D,EAAIs3B,EAASt3B,EAAIs3B,MADF,QAAtBsjC,EAAQW,UAAsBv7D,EAAIs3B,EAASt3B,EAAIs3B,KAE7Ev3B,EAAMknB,GAAmB2zC,EAAQiiE,aAAc1zH,EAAMnW,KAAKykC,MAAMrL,YAAarH,GAAS+7B,EAAK93C,MAAS83C,EAAK/gD,GAE7G66D,EAAQlxC,OAAS,IAAIR,GAAKnpB,EAAGC,EAAG46D,EAAQ5xD,MAAO4xD,EAAQ7xD,SAS3D+iY,EAAgBz9Y,UAAUkvsB,mBAAqB,SAAU7jqB,EAAWvwB,EAAMwwB,EAAcihC,GACpF,IAAI5sC,EACAE,EACAD,EACAE,EACAplB,EACAC,EACA83C,EAAO33C,EAAK+wD,WAEZn1C,EAAQ5b,EAAKwc,aACbyG,EAAcp5B,KAAKykC,MAAMrL,YACzBztB,EAASi8D,EAAQj8D,OACjB8O,EAAYza,KAAKykC,MAAM6kqB,gBACP,aAAhBlwqB,GACA4B,EAAMvgB,EAAUzE,MAAQ,EAAKyE,EAAU1N,GAAM0N,EAAUzE,MAAQ,EAAM4xD,EAAQ5xD,MAAQ,GAC/EG,EAAKsf,gBAAyCq4B,EAAK/gD,EAAI66D,EAAQ5xD,MAP3D,GAOqB83C,EAAK/gD,EAP1B,GAQViuB,KACAC,EAAOhH,GAAmB2zC,EAAQiiE,aAAc1zH,EAAMijB,EAAarH,GAAS+7B,EAAK/3C,OAAU+3C,EAAK9gD,EAChGmuB,EAAOlH,GAAmBlC,EAAMhS,IAAK5J,EAAMijB,EAAarH,GAAS+7B,EAAK/3C,OAAU+3C,EAAK9gD,EACrF+I,EAAS1J,KAAKE,IAAI4uB,EAAKF,GACvBA,EAAO9kB,EAAK+d,WAAmBiH,EAALF,EAC1BjlB,EAAQ4xD,EAAQ5xD,QAGhBglB,EAAO/G,GAAmBlC,EAAMhS,IAAK5J,EAAMijB,EAAarH,GAAS+7B,EAAK93C,MAAS83C,EAAK/gD,EACpFkuB,EAAMxgB,EAAU1E,OAAS,EAAM0E,EAAUzN,EAAKyN,EAAU1E,OAAS,EAAM6xD,EAAc,OAAI,EACnFzxD,EAAKsf,gBAAyCq4B,EAAK9gD,EAAI46D,EAAQ7xD,OAlB3D,GAkBqB+3C,EAAK9gD,EAlB1B,GAmBViuB,KACAllB,EAAS6xD,EAAQ7xD,OACjBmlB,EAAOjH,GAAmB2zC,EAAQiiE,aAAc1zH,EAAMijB,EAAarH,GAAS+7B,EAAK93C,MAAS83C,EAAK/gD,EAC/FiJ,EAAQ3J,KAAKE,IAAI2uB,EAAKF,GACtBA,EAAO7kB,EAAK+d,WAAmBgH,EAALF,GAE9B4sC,EAAQlxC,OAAS,IAAIR,GAAK8E,EAAIC,EAAIjlB,EAAOD,IAO7C+iY,EAAgBz9Y,UAAUwusB,sBAAwB,SAAU1zrB,EAAMuwB,GAiB9D,IAAK,IAhBD3U,EACAx0B,EACAshB,EAIA2vf,EACAg8L,EACAjoY,EACAmH,EACA1zT,EACAD,EACA7B,EACAwxB,EACAC,EACAmqD,EAZAhiC,EAAO33C,EAAK+wD,WACZv0C,EAAexc,EAAKwc,aACpByG,EAAcp5B,KAAKykC,MAAMrL,YAWpBj9B,EAAI,EAAGA,EAAIga,EAAK2wB,OAAOrqC,OAAQN,IAEhCg2B,GAAY,MADhBJ,EAAQ5b,EAAK2wB,OAAO3qC,IACQoB,MAAOw0B,EAAMlT,IAAK8T,EAAarmB,IAAKqmB,EAAa5S,IAAK,WAC9ExiB,EAAQ8O,KAAK0T,IAAIgS,EAAMx0B,MAAOw0B,EAAMlT,KACpCA,EAAMxS,KAAKC,IAAIylB,EAAMx0B,MAAOw0B,EAAMlT,KAClC3K,EAAW6d,EAAM7d,SACjBwxB,EAAa3T,EAAM2T,WACnBC,EAAW5T,EAAM4T,SACjBmqD,EAAS9vF,KAAKykC,MAAMgmqB,cAAchusB,OAASuD,KAAKykC,MAAMgmqB,ejjB6CnD,UAAW,UAAW,UAAW,UAAW,WijB5C/C14qB,EAAMs2C,SAAWt2C,EAAMyE,MAAQzE,EAAMyE,MAAQs5D,EAAO3zF,EAAI2zF,EAAOrzF,QAChC,aAA3BuD,KAAKykC,MAAMrL,aACXmpS,EAASz0Q,EAAK/gD,EAAKglB,EAAY,OAC/B23S,EAAUz1S,GAAmBpV,EAAK1I,EAAMijB,EAAazG,GAAgBm7B,EAAK/3C,OAAU+3C,EAAK9gD,EACzF+I,EAAUke,GAAmB12B,EAAO4Y,EAAMijB,EAAazG,GAAgBm7B,EAAK/3C,OAAU+3C,EAAK9gD,EAC3F+I,GAAU2zT,EACV8kM,EAAYr4f,EAAKsf,gBACE,WAAbvhB,EAAyBquT,EAAS78R,EAAe68R,EAAS78R,EADhB,WAAbxxB,EAAyBquT,EAAS78R,EAAe68R,EAAS78R,EAE7F8kqB,EAAUr0rB,EAAKsf,gBACE,WAAbvhB,EAAyBquT,EAAS58R,EAAa48R,EAAS58R,EADd,WAAbzxB,EAAyBquT,EAAS58R,EAAa48R,EAAS58R,EAEzF5T,EAAMhV,KAAO,IAAMwlT,EAAS,IAAMmH,EAAS,MAAQnH,EAAS,KAAOmH,EAAS3zT,GACxE,MAAQy4f,EAAW,KAAO9kM,EAAS3zT,GAAU,MAAQy0rB,EAAS,IAAM9gY,EACpE,MAAQnH,EAAS,IAAMmH,EAAS,QAGpCnH,EAAUtuS,GAAmBpV,EAAK1I,EAAMijB,EAAazG,GAAgBm7B,EAAK93C,MAAS83C,EAAK/gD,EACxF28T,EAASvzT,EAAK+wD,WAAWl6D,EAAK+kB,EAAY,OAE1C/b,EAAQusT,GADRvsT,EAASie,GAAmB12B,EAAO4Y,EAAMijB,EAAazG,GAAgBm7B,EAAK93C,MAAS83C,EAAK/gD,GAEzFyhgB,EAAYr4f,EAAKsf,gBACyB,WAAbvhB,EAA0Bw1T,EAAShkS,EAC3DgkS,EAAShkS,EAFkC,WAAbxxB,EAAyBw1T,EAAShkS,EAChEgkS,EAAShkS,EAEd8kqB,EAAUr0rB,EAAKsf,gBACG,WAAbvhB,EAA0Bw1T,EAAS/jS,EAAa+jS,EAAS/jS,EADhB,WAAbzxB,EAAyBw1T,EAAS/jS,EAAa+jS,EAAS/jS,EAEzF5T,EAAMhV,KAAO,IAAMwlT,EAAS,IAAMmH,EAAS,OAASnH,EAASvsT,GAAS,IAAM0zT,EACxE,OAASnH,EAASvsT,GAAS,IAAMw4f,EAAW,MAAQjsM,EAAS,IAAMioY,EACnE,MAAQjoY,EAAS,IAAMmH,EAAS,SAKpDovE,EAAgBz9Y,UAAU2usB,kBAAoB,SAAU50T,EAAa1uW,GACjE,IAAIz0B,EAAQy0B,EAAY,EAUxB,OALIz0B,EAHcA,GAAS,EAEZjS,KAAKykC,MAAMgjC,KAAKx1D,GACTu3rB,WAAWr1oB,QAAUihV,EAAYo0T,WAAWr1oB,MAASliD,EAAQjS,KAAKgqsB,kBAAkB50T,EAAanjY,GAG3G,MAQhB6mY,EAAgBz9Y,UAAU+iU,uBAAyB,SAAUjoT,GACzDA,EAAKgf,iBACL,IAGI6G,EACApD,EAGAiH,EAPA9f,EAAM5J,EAAKwc,aAAa5S,IACxBzT,EAAM6J,EAAKwc,aAAarmB,IACxBnK,EAAWgU,EAAKwc,aAAaxwB,SAG7BuC,EAAQyR,EAAK6f,WAGbuF,EAAoB72B,EAAMs3B,QAA4C,OAAlCt3B,EAAMs3B,OAAOrsB,MAAM,WAC3DqsB,EAASh8B,KAAKykC,MAAMwqC,KAAKC,iBACrBlzC,OAAQ4K,GAAeliC,EAAMs3B,QAASmzC,YAAanvE,KAAKykC,MAAM2qC,uBAElE,IAAK,IAAIjzE,EAAI4jB,EAAM5jB,GAAKmQ,GAAOnK,EAAW,EAAIhG,GAAKgG,EAC/Cy2B,GACIC,QAAQ,EAAOpB,KC7WF,kBD6WyBthB,KAAMA,EAC5CsW,KAAM8O,EAAoB72B,EAAMs3B,OAAOzsB,QAAQ,IAAIyU,OAAO,UAAW,KAAMgY,EAAO7/B,IAC9E6/B,EAAO7/B,GACXa,MAAOb,GAEX6D,KAAKykC,MAAMje,QClXM,kBDkXmBoS,GACpCiH,EAAYrT,GAAYoM,EAASnM,KAAMtW,EAAK6f,WAAWtJ,MAClDkM,EAASC,QACV1iB,EAAKgf,cAAc3wB,KAAK,IAAIu0B,GAAcH,EAASnM,KAAMtwB,EAAG0jC,IAGpE7/B,KAAKk/T,iBAAiBl/T,KAAKykC,MAAOtuB,IAOtC2iY,EAAgBz9Y,UAAU6jU,iBAAmB,SAAUz6R,EAAOtuB,GAC1DA,EAAK+rT,aAAe,IAAI90S,GAAK,EAAG,GAEhC,IAAK,IADD/Z,EACKlX,EAAI,EAAGA,EAAIga,EAAKgf,cAAc14B,OAAQN,KAC3CkX,EAAQ8C,EAAKgf,cAAch5B,IACrB2wB,KAAON,GAAYnZ,EAAMoZ,KAAMtW,EAAK6f,WAAWtJ,MACjDrZ,EAAMyZ,KAAK9W,MAAQG,EAAK+rT,aAAalsT,QACrCG,EAAK+rT,aAAalsT,MAAQ3C,EAAMyZ,KAAK9W,OAErC3C,EAAMyZ,KAAK/W,OAASI,EAAK+rT,aAAansT,SACtCI,EAAK+rT,aAAansT,OAAS1C,EAAMyZ,KAAK/W,SAIlD+iY,EAAgBz9Y,UAAUkusB,iBAAmB,WACP,gBAA9BvpsB,KAAKykC,MAAMhqB,UAAU/T,MACrB1G,KAAKykC,MAAMgjC,KAAK7vC,IAAI,SAAUzhB,EAAMlE,GAC5BkE,EAAK+d,YACL/d,EAAKwxD,SAAS/vC,IAAI,SAAUgwC,EAAS31D,GACZ,QAAjB21D,EAAQlhE,OACRyP,EAAK+d,YAAa,QAOnC4kX,KE5ZP4xT,GAA4B,WAC5B,SAASA,EAAWjmqB,GAChBzkC,KAAKykC,MAAQA,EAoLjB,OA7KAimqB,EAAWrvsB,UAAUsvsB,uBAAyB,SAAU3psB,EAASmV,EAAMyxD,GACnE,IAEI50D,EACAylB,EAHA14B,EAAQC,KACR4qsB,EAAgB5psB,EAGhB+wB,EAAQ5b,EAAKwc,aACbg2C,EAAyC,aAA3B3oE,KAAKykC,MAAMrL,YAA8BjjB,EAAK+wD,WAAWnxD,OAASI,EAAK+wD,WAAWlxD,MAChG2prB,EAAoC,aAA3B3/rB,KAAKykC,MAAMrL,YAA8BjjB,EAAK+wD,WAAWl6D,EAAImJ,EAAK+wD,WAAWn6D,EAC3D,aAA3B/M,KAAKykC,MAAMrL,YACXwuC,EAAQlxC,OAAO1pB,EAAKinB,GAAmB2zC,EAAQiiE,aAAc1zH,EAAMnW,KAAKykC,MAAMrL,YAAarH,GAAS42C,EAAcg3nB,EAGlH/3nB,EAAQlxC,OAAO3pB,EAAKknB,GAAmB2zC,EAAQiiE,aAAc1zH,EAAMnW,KAAKykC,MAAMrL,YAAarH,GAAS42C,EAAcg3nB,EAEtH3srB,EAAU,IAAIojB,GAAWw0qB,EAActnsB,GAAI,KAAM,KAAM,MACvD0P,EAAU4b,GAAgBg5C,EAAQlxC,OAAQkxC,EAAQijoB,WAAY,IAAIz9qB,GAAKw6C,EAAQ5xD,MAAO4xD,EAAQ7xD,QAAS6xD,EAAQkvH,SAAU9jL,EAAShT,KAAKykC,MAAMrL,YAAajjB,EAAMyxD,GAChK,IAAIiiE,EACAtsI,EAAQqqE,EAAQz/C,WAChBtJ,EAAM+oD,EAAQiiE,aAClBtsI,EAASA,IAAUshB,EAAOkT,EAAMhS,IAAMxiB,EACtC,IAAI0qB,EAAM5b,KAAKE,IAAIhP,EAAQshB,GACvBisrB,EAAc93rB,EAAQub,EAC1B,IAAI+J,OAAcC,QAAQqyqB,GACtB1/rB,SAAU08D,EAAQqqT,kBAClBz5V,SAAU,SAAUv4B,GACZA,EAAKw4B,WAAax4B,EAAKJ,QACvB44B,GAAcx4B,EAAKw4B,UAAYx4B,EAAKJ,OAASI,EAAKiL,SAClD2+H,EAAgBtsI,EAAQshB,EAAOthB,EAASk7B,EAAYxQ,EAAO1qB,EAASk7B,EAAYxQ,EAChD,aAA5BloB,EAAM0kC,MAAMrL,YACZwuC,EAAQlxC,OAAO1pB,EAAKinB,GAAmB41G,EAAc1zH,EAAMpW,EAAM0kC,MAAMrL,YAAarH,GAChF42C,EAAcg3nB,EAGlB/3nB,EAAQlxC,OAAO3pB,EAAKknB,GAAmB41G,EAAc1zH,EAAMpW,EAAM0kC,MAAMrL,YAAarH,GAChF42C,EAAcg3nB,EAEtB3srB,EAAU4b,GAAgBg5C,EAAQlxC,OAAQkxC,EAAQijoB,WAAY,IAAIz9qB,GAAKw6C,EAAQ5xD,MAAO4xD,EAAQ7xD,QAAS6xD,EAAQkvH,SAAU9jL,EAASjT,EAAM0kC,MAAMrL,YAAajjB,EAAMyxD,GACjKgjoB,EAAcpnsB,aAAa,IAAKwP,EAAQub,KAGhD1P,IAAK,SAAU+D,GACXgorB,EAAcpnsB,aAAa,IAAKsnsB,GAChCljoB,EAAQz/C,WAAay/C,EAAQiiE,aAC7BjiE,EAAQuI,mBAAoB,EAC5BpwE,EAAM0kC,MAAMje,QDrDG,qBCqD0BrQ,KAAMA,EAAMyxD,QAASA,QAU1E8ioB,EAAWrvsB,UAAU0vsB,oBAAsB,SAAU/psB,EAASmV,EAAMyxD,GAChE,IACI3/C,EAEAwQ,EACAuyqB,EACArwV,EAGAulC,EACAp6G,EACAD,EACAola,EACAtioB,EACAg3nB,EAGA1/S,EACAzxF,EACA08Y,EAlBAnrsB,EAAQC,KAmBR+xB,EAAQ5b,EAAKwc,aACbq0C,EAAiBhmE,EAIjBmsB,EAAyC,aAA3BntB,KAAKykC,MAAMrL,YAA8BjjB,EAAK+wD,WAAWnxD,OAASI,EAAK+wD,WAAWlxD,MAChGm1rB,EAAoC,aAA3BnrsB,KAAKykC,MAAMrL,YAA8BjjB,EAAK+wD,WAAWl6D,EAAImJ,EAAK+wD,WAAWn6D,EAEtFxP,GADO,IAAI6vB,GAAKptB,KAAKykC,MAAM9O,cAAc3f,MAAOhW,KAAKykC,MAAM9O,cAAc5f,QACjE6xD,EAAQz/C,YAChBtJ,EAAM+oD,EAAQiiE,aAClBtsI,EAASA,IAAUshB,EAAOkT,EAAMhS,IAAMxiB,EACtC,IAAIwf,EAAO,GACP+trB,EAAc,GACd9nsB,EAAUgkE,EAAehkE,QAC7BilB,EAAM5b,KAAKE,IAAIhP,EAAQshB,GACvB,IAAIusrB,EAAgBn3qB,GAAmBpV,EAAK1I,EAAMnW,KAAKykC,MAAMrL,YAAarH,GAAS5E,EAAcg+qB,EAC7FE,EAAmBp3qB,GAAmBlC,EAAMhS,IAAK5J,EAAMnW,KAAKykC,MAAMrL,YAAarH,GAC/E5E,EAAcg+qB,EAClBxL,EAAoC,aAA3B3/rB,KAAKykC,MAAMrL,YAA+BjjB,EAAK+d,WAA4Bm3qB,EAAfD,EACjEj1rB,EAAK+d,WAAak3qB,EAAeC,EACrC1ioB,EAAat8D,KAAKE,IAAI8+rB,EAAkBD,GACN,gBAA9BprsB,KAAKykC,MAAMhqB,UAAU/T,MAAoC,IAAVnJ,IAC/C2tsB,EAAclkoB,EAAe3yD,cAAc9C,WAAW,GAAGA,WAAW,GAAGA,WAAW,GACnD,aAA3BvR,KAAKykC,MAAMrL,aACX0sQ,EAAQola,EAAYr4rB,aAAa,KACjCqtY,EAAagrT,EAAYr4rB,aAAa,UACtCo4rB,EAAUl2qB,SAAS+wQ,EA3Cf,IA2C+B/wQ,SAASmrX,EA3CxC,IA4CJgrT,EAAY1nsB,aAAa,IAAKynsB,EAAQ/9rB,cAGtC24R,EAAQqla,EAAYr4rB,aAAa,KACjCotY,EAAYirT,EAAYr4rB,aAAa,SACrCo4rB,EAAUl2qB,SAAS8wQ,EAjDf,IAiD+B9wQ,SAASkrX,EAjDxC,IAkDJirT,EAAY1nsB,aAAa,QAAS,OAG1CuZ,EAAOyrD,GAAOZ,EAAQlxC,OAAQ12B,KAAKykC,MAAMhqB,UAAU/T,KAAM1G,KAAKykC,MAAMrL,YAAa,IAAIhM,GAAKw6C,EAAQlxC,OAAO1gB,MAAO4xD,EAAQlxC,OAAO3gB,QAAS,MAAO/V,KAAKykC,MAAMhqB,UAAUzE,MAAOG,EAAMyxD,EAAQ0joB,qBACzL,IAAIhzqB,OAAcC,QAAQyuC,GACtB97D,SAAU08D,EAAQqqT,kBAClBz5V,SAAU,SAAUD,GACZA,EAAQE,WAAaF,EAAQ14B,QAC7B44B,GAAcF,EAAQE,UAAYF,EAAQ14B,OAAS04B,EAAQrtB,SAE3D8/rB,EAAU/2qB,GADM12B,EAAQshB,EAAOthB,EAASk7B,EAAYxQ,EAAO1qB,EAASk7B,EAAYxQ,EACrC9R,EAAMpW,EAAM0kC,MAAMrL,YAAarH,GAAS5E,EAAcg+qB,EACjGxwV,EAAU1mV,GAAmBlC,EAAMhS,IAAK5J,EAAMpW,EAAM0kC,MAAMrL,YAAarH,GAAS5E,EAAcg+qB,EAC9F38Y,EAAgBniT,KAAKE,IAAIy+rB,EAASrwV,GACF,aAA5B56W,EAAM0kC,MAAMrL,aACZwuC,EAAQlxC,OAAO1pB,EAAMmJ,EAAK+d,WAAuBymV,EAATqwV,EACxCpjoB,EAAQlxC,OAAO3gB,OAASy4S,IAGxB5mP,EAAQlxC,OAAO3pB,EAAKoJ,EAAe,WAAI60rB,EAASrwV,EAChD/yS,EAAQlxC,OAAO1gB,MAAQw4S,GAEX,SAAZxrT,GACc,IAAVzF,GAA8C,gBAA/BwC,EAAM0kC,MAAMhqB,UAAU/T,OACR,aAA5B3G,EAAM0kC,MAAMrL,YACT8xqB,EAAY1nsB,aAAa,KAAMynsB,EAAWxyqB,EAAY1D,SAASmrX,EA1E3E,KA0EgGhzY,YACpFg+rB,EAAY1nsB,aAAa,SAAUi1B,EAAY1D,SAASkrX,EA3EpE,KA2EuF/yY,aAEnF49rB,EAActioB,GAAOZ,EAAQlxC,OAAQ32B,EAAM0kC,MAAMhqB,UAAU/T,KAAM3G,EAAM0kC,MAAMrL,YAAa,IAAIhM,GAAKw6C,EAAQlxC,OAAO1gB,MAAO4xD,EAAQlxC,OAAO3gB,QAAS,MAAOhW,EAAM0kC,MAAMhqB,UAAUzE,MAAOG,EAAMyxD,EAAQ0joB,qBACnMtkoB,EAAexjE,aAAa,IAAKsnsB,IAGD,aAA5B/qsB,EAAM0kC,MAAMrL,aACZ4tC,EAAexjE,aAAa,IAAKokE,EAAQlxC,OAAO1pB,EAAEE,YAClD85D,EAAexjE,aAAa,SAAUokE,EAAQlxC,OAAO3gB,OAAO7I,cAG5D85D,EAAexjE,aAAa,IAAKokE,EAAQlxC,OAAO3pB,EAAEG,YAClD85D,EAAexjE,aAAa,QAASokE,EAAQlxC,OAAO1gB,MAAM9I,eAK1E2R,IAAK,SAAU+D,GACK,SAAZ5f,EACc,IAAVzF,GAA8C,gBAA/BwC,EAAM0kC,MAAMhqB,UAAU/T,KACrCsgE,EAAe3yD,cAAc+F,SAAS,GAAG7V,SAGzCyiE,EAAexjE,aAAa,IAAKuZ,GAIL,aAA5Bhd,EAAM0kC,MAAMrL,aACZ4tC,EAAexjE,aAAa,IAAKm8rB,EAAMzyrB,YACvC85D,EAAexjE,aAAa,SAAUmlE,EAAWz7D,cAGjD85D,EAAexjE,aAAa,IAAKm8rB,EAAMzyrB,YACvC85D,EAAexjE,aAAa,QAASmlE,EAAWz7D,aAGxD06D,EAAQz/C,WAAay/C,EAAQiiE,aAC7B9pI,EAAM0kC,MAAMje,QDlLG,qBCkL0BrQ,KAAMA,EAAMyxD,QAASA,QAInE8ioB,KC9LPpgnB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAkBxCqrT,GAA8B,SAAU7qT,GAExC,SAAS6qT,EAAavxW,GAClB,OAAO0mD,EAAO7pF,KAAKtB,KAAMykC,IAAUzkC,KA+PvC,OAjQAsqF,GAAU0rT,EAAc7qT,GAIxB6qT,EAAa36Y,UAAU2sU,WAAa,WAChC,IACI7xT,EACA8zrB,EACAC,EAHAnqsB,EAAQC,KAIZA,KAAKursB,gBACLvrsB,KAAKwrsB,WAAaxrsB,KAAKykC,MAAM5W,SAASw+C,aAClC/oE,GAAItD,KAAKykC,MAAMzjC,QAAQsC,GAAK,oBAC5B+J,UAAW,sBAEf,IAAK,IAAIlR,EAAI,EAAGA,EAAI6D,KAAKykC,MAAMgjC,KAAKhrE,OAAQN,IAExC8tsB,GADA9zrB,EAAOnW,KAAKykC,MAAMgjC,KAAKtrE,IACVi7Y,WACb8yT,EAAQ/zrB,EAAKygY,WACb52Y,KAAK2sB,WAAa3sB,KAAKykC,MAAM5W,SAASw+C,aAAc/oE,GAAItD,KAAKykC,MAAMzjC,QAAQsC,GAAK,eAAiBnH,IACjG6D,KAAKqoU,aAAalyT,EAAMnW,KAAK2sB,WAAYxwB,GACzC6D,KAAKyrsB,WAAWt1rB,EAAMnW,KAAK2sB,WAAYxwB,GACvC6D,KAAK0rsB,UAAUv1rB,EAAM8zrB,EAAOjqsB,KAAK2sB,WAAY,aAAcxW,EAAKi0rB,iBAChEpqsB,KAAK0rsB,UAAUv1rB,EAAM+zrB,EAAOlqsB,KAAK2sB,WAAY,aAAcxW,EAAKk0rB,iBAChErqsB,KAAKm2Y,eAAehgY,EAAMnW,KAAK2sB,YAC/B3sB,KAAK43Y,aAAazhY,EAAMnW,KAAK2sB,WAAYxwB,GACzC6D,KAAKursB,aAAa/msB,KAAKxE,KAAK2sB,YAEhC3sB,KAAKursB,aAAanssB,QAAQ,SAAU8oU,GAChCnoU,EAAMyrsB,WAAW7psB,YAAYumU,KAEjCloU,KAAKykC,MAAMnT,UAAU3vB,YAAY3B,KAAKwrsB,YAClCxrsB,KAAKykC,MAAMg8R,UAAUhkU,SAAWuD,KAAKykC,MAAMi8R,SAASjkU,QAAUuD,KAAKykC,MAAMgjC,KAAKhrE,OAAS,GACvFuD,KAAK2rsB,UAAU3rsB,KAAKykC,MAAMgjC,OAGlCuuU,EAAa36Y,UAAUswsB,UAAY,SAAUlkoB,GACzC,IAGImkoB,EACAxhW,EAJAyhW,EAAgB,EAChBC,EAAe,EAIY,aAA3B9rsB,KAAKykC,MAAMrL,aACXquC,EAAKroE,QAAQ,SAAU+W,EAAMuwB,GACpBvwB,EAAKsf,gBAINq2qB,GAAgB31rB,EAAKugB,OAAO1gB,MAH5B61rB,GAAiB11rB,EAAKugB,OAAO1gB,QAMrC61rB,GAAiB7rsB,KAAKykC,MAAM6kqB,gBAAgBtzrB,MAAQ,EACpD81rB,GAAgB9rsB,KAAKykC,MAAM6kqB,gBAAgBtzrB,MAAQ,EACnD41rB,EAASC,EAAgB,EAAMC,EAAe,EAC9C9rsB,KAAKwrsB,WAAWhosB,aAAa,YAAa,aAAeoosB,EAAQ,OAC3DnusB,EAAkBuC,KAAKykC,MAAMsnqB,kBAC/B/rsB,KAAKykC,MAAMsnqB,gBAAgBvosB,aAAa,YAAa,aAAeoosB,EAAQ,SAIhFnkoB,EAAKroE,QAAQ,SAAU+W,EAAMuwB,GACpBvwB,EAAKsf,gBAINq2qB,GAAgB31rB,EAAKugB,OAAO3gB,OAH5B81rB,GAAiB11rB,EAAKugB,OAAO3gB,SAMrC81rB,GAAkB7rsB,KAAKykC,MAAM6kqB,gBAAgBvzrB,OAAS,EACtD+1rB,GAAiB9rsB,KAAKykC,MAAM6kqB,gBAAgBvzrB,OAAS,EACrDq0V,EAAUyhW,EAAgB,EAAMC,EAAe,EAC/C9rsB,KAAKwrsB,WAAWhosB,aAAa,YAAa,eAAiB4mW,EAAS,KAC9D3sW,EAAkBuC,KAAKykC,MAAMsnqB,kBAC/B/rsB,KAAKykC,MAAMsnqB,gBAAgBvosB,aAAa,YAAa,eAAiB4mW,EAAS,OAI3F4rC,EAAa36Y,UAAUgtU,aAAe,SAAUlyT,EAAMq1rB,EAAY9kqB,GAC9D,IAAI1zB,EACAqgB,EAAOld,EAAK+wD,WACZnqD,EAAO,GACP5G,EAAK23C,KAAK93C,MAAQ,IAClB+G,EAAO,IAAMsW,EAAKtmB,EAAI,IAAMsmB,EAAKrmB,EAAI,OAAoC,aAA3BhN,KAAKykC,MAAMrL,YAA6B/F,EAAKtmB,EAAIsmB,EAAKtmB,EAAIsmB,EAAKrd,OACzG,KAAkC,aAA3BhW,KAAKykC,MAAMrL,YAA6B/F,EAAKrmB,EAAIqmB,EAAKtd,OAASsd,EAAKrmB,GAAK,IACpFgG,EAAU,IAAIojB,GAAWp2B,KAAKykC,MAAMzjC,QAAQsC,GAAK,aAAeojC,EAAWvwB,EAAK23C,KAAKt3B,MAAOrgB,EAAK23C,KAAK93C,MAAOG,EAAK23C,KAAKt3B,MAAO,EAAGrgB,EAAK23C,KAAKhc,UAAW/0B,GACtJyurB,EAAW7psB,YAAY3B,KAAKykC,MAAM5W,SAASsI,SAASnjB,MAG5DgjY,EAAa36Y,UAAUqwsB,UAAY,SAAUv1rB,EAAM8pH,EAAOurkB,EAAYQ,EAAQC,GAQ1E,IAAK,IANDviY,EACAnH,EACAvvT,EAHAk5rB,EAAW,GAIXn6qB,EAAQ5b,EAAKwc,aACbm7B,EAAO33C,EAAK+wD,WACZ/kE,EAAwB,eAAX6psB,EAA2B71rB,EAAKg0rB,cAAgBh0rB,EAAK0gY,cAC7D16Y,EAAI41B,EAAMhS,IAAM5jB,GAAK41B,EAAMzlB,KAAOnK,EAAW,EAAIhG,GAAKgG,GAC3C,eAAX6psB,GAAwC,eAAXA,GAA2B7vsB,IAAM41B,EAAMhS,KAAO5jB,IAAM41B,EAAMzlB,KACpFnQ,EAAIga,EAAKg0rB,eAAmB,KACD,aAA3BnqsB,KAAKykC,MAAMrL,aACXmpS,EAAS0pY,EAAWl/rB,EACpB28T,EAAUz1S,GAAmB93B,EAAGga,EAAMnW,KAAKykC,MAAMrL,YAAarH,GAAS+7B,EAAK/3C,OAAU+3C,EAAK9gD,EAC3Fk/rB,EAAWA,EAAS3xrB,OAAO,IAAMgoT,EAAS,IAAMmH,EAAS,MAAanH,EAAStiM,EAAMlqH,QAAU,IAAM2zT,EAAS,OAG9GnH,EAAUtuS,GAAmB93B,EAAGga,EAAMnW,KAAKykC,MAAMrL,YAAarH,GAAS+7B,EAAK93C,MAAS83C,EAAK/gD,EAC1F28T,EAASuiY,EAAWj/rB,EACpBk/rB,EAAWA,EAAS3xrB,OAAO,IAAMgoT,EAAS,IAAMmH,EAAS,KAAYnH,EAAS,KAAOmH,EAASzpM,EAAMlqH,QAAU,OAI1H/C,EAAU,IAAIojB,GAAWp2B,KAAKykC,MAAMzjC,QAAQsC,GAAK,IAAM0osB,EAAS,SAAa/rkB,EAAMzpG,MAAOypG,EAAMjqH,MAAOiqH,EAAMzpG,MAAO,EAAG,KAAM01qB,GAC7HV,EAAW7psB,YAAY3B,KAAKykC,MAAM5W,SAASsI,SAASnjB,KAExDgjY,EAAa36Y,UAAU86Y,eAAiB,SAAUhgY,EAAMq1rB,GAepD,IAAK,IAbDjpY,EACAmH,EAIA7pS,EAEAhsB,EACAs7E,EAEAw7R,EARAt3V,EAAOld,EAAK+wD,WACZxwC,EAASvgB,EAAK2zrB,YACdz8U,EAAOl3W,EAAKi0rB,gBAEZr4qB,EAAQ5b,EAAKwc,aAKbhnB,EAASwK,EAAK6f,WAAWrqB,OACzBqb,EAAehnB,KAAKykC,MAAM5W,SAASw+C,aAAc/oE,GAAItD,KAAKykC,MAAMzjC,QAAQsC,GAAK,qBACxEnH,EAAI,EAAGA,EAAIga,EAAKgf,cAAc14B,OAAQN,IAC3C0jC,EAAY1pB,EAAKgf,cAAch5B,GAAG2wB,KAGlC69V,EAAaltX,EAFbktX,EAAax0W,EAAK6f,WAAWwgX,cAAgB3vW,GAAc1wB,EAAKgf,cAAch5B,GAAGa,MAAOmZ,EAAK2wB,QACzF,MACyC3wB,EAAK6f,WAAWtJ,KAAK8J,MAAQm0V,EAC3C,aAA3B3qX,KAAKykC,MAAMrL,aACXswS,EAAUz1S,GAAmB9d,EAAKgf,cAAch5B,GAAGa,MAAOmZ,EAAMnW,KAAKykC,MAAMrL,YAAarH,GACpFsB,EAAKtd,OAAUsd,EAAKrmB,EACxBu1T,EAAWpsT,EAAKsf,gBAAkEiB,EAAO3pB,EAAtDsgX,EAAKtgX,EAAI8yB,EAAU7pB,MAZhD,EAYmErK,EACzE+9T,GAAW7pS,EAAU9pB,OAAS,IAG9BwsT,EAAUtuS,GAAmB9d,EAAKgf,cAAch5B,GAAGa,MAAOmZ,EAAMnW,KAAKykC,MAAMrL,YAAarH,GACpFsB,EAAKrd,MAASqd,EAAKtmB,EACvB28T,EAAShzS,EAAO1pB,EAChB6G,EAAS,SACTs7E,EAAW,IAGf74D,GADU,IAAIC,GAAWv2B,KAAKykC,MAAMzjC,QAAQsC,GAAK,cAAgBnH,EAAGomU,EAAQmH,EAAQ71T,EAAQsC,EAAKgf,cAAch5B,GAAGswB,KAAM,KAAM0iE,GACzGh5E,EAAK6f,WAAWtJ,KAAMi+V,EAAY3jW,GAE3DwkrB,EAAW7psB,YAAYqlB,IAE3BgvX,EAAa36Y,UAAUu8Y,aAAe,SAAUzhY,EAAMq1rB,EAAY9kqB,GAC9D,IAAIkhC,EACAkzS,EACAqxV,EACAC,EACJD,EAAenssB,KAAKykC,MAAM5W,SAASw+C,aAAc/oE,GAAItD,KAAKykC,MAAMzjC,QAAQsC,GAAK,mBAC7E,IAAK,IAAInH,EAAI,EAAGA,EAAIga,EAAKwxD,SAASlrE,OAAQN,IACtCyrE,EAAUzxD,EAAKwxD,SAASxrE,GACxB2+W,EAAS,QAAU96W,KAAKykC,MAAMzjC,QAAQsC,GAAK,cAAgBojC,EAAY,KAAYkhC,EAAQlhE,KAAO,YAAcvK,EAAI,IAC9GsB,EAAkBmqE,EAAQlxC,UAC5B01qB,EAAuBpssB,KAAKykC,MAAM5W,SAASw+C,aACvC/oE,GAAMtD,KAAKykC,MAAMzjC,QAAQsC,GAAK,cAAgBojC,EAAY,IAAMkhC,EAAQlhE,KAAO,WAAavK,EAC5Fm3U,YAAawnC,IAEbr9W,EAAkBmqE,EAAQz/C,cAC1By/C,EAAQz/C,WAAahS,EAAKwc,aAAa5S,KAE3C/f,KAAK,OAAS4nE,EAAQlhE,KAAO,WAAWyP,EAAMuwB,EAAWkhC,EAASzrE,EAAGiwsB,GACrED,EAAaxqsB,YAAYyqsB,IAGjCZ,EAAW7psB,YAAYwqsB,IAE3Bn2T,EAAa36Y,UAAUi9Y,kBAAoB,SAAUniY,EAAMuwB,EAAWkhC,EAASjhC,EAActyB,GACzF,IAAIrB,EAGAg0D,EAFAqloB,EAAYrssB,KAAKykC,MAAMzjC,QAAQsC,GAAK,cAAgBojC,EAAY,IAAMkhC,EAAQlhE,KAAO,WAAkBigC,EAGvGpZ,GAAW8+qB,IAAc9+qB,GAAW8+qB,GAAWlnoB,kBAAoB,GACnE5gE,EAAOgpB,GAAW8+qB,IAEtBr5rB,EAAU,IAAIojB,GAAWi2qB,EAAWzkoB,EAAQpxC,MAAOoxC,EAAQtjC,OAAOtuB,MAAO4xD,EAAQtjC,OAAO9N,MAAOoxC,EAAQn6D,QAAS,KAAM,KALtG,qBAMhBuF,EAAU4b,GAAgBg5C,EAAQlxC,OAAQkxC,EAAQijoB,WAAY,IAAIz9qB,GAAKw6C,EAAQ5xD,MAAO4xD,EAAQ7xD,QAAS6xD,EAAQkvH,SAAU9jL,EAAShT,KAAKykC,MAAMrL,YAAajjB,EAAMyxD,GAChKZ,EAA0C,WAAvBY,EAAQijoB,WAA0B7qsB,KAAKykC,MAAM5W,SAAS6V,WAAW1wB,GACtD,UAAvB40D,EAAQijoB,WAA0B7qsB,KAAKykC,MAAM5W,SAAS6hE,UAAU18E,GAC/DhT,KAAKykC,MAAM5W,SAASsI,SAASnjB,GACrCqB,EAAc1S,YAAYqlE,GACtBY,EAAQqqT,kBAAoB,IAAMjyX,KAAKykC,MAAM6nqB,eAC7C1koB,EAAQuI,mBAAoB,EAC5BnwE,KAAK2qsB,uBAAuB3joB,EAAgB7wD,EAAMyxD,IAEtDZ,EAAexjE,aAAa,aAAcokE,EAAQ11B,aAAe,WAAa5a,OAAOswC,EAAQiiE,cAAc38H,aAE/G8oY,EAAa36Y,UAAUkxsB,eAAiB,SAAUp2rB,EAAMuwB,EAAWkhC,EAASjhC,EAActyB,GACtF,IAAIyuX,EACA3vD,EACAnsQ,EAEAh0D,EACA8d,EAFA/T,EAAO,GAMP+P,EAAO,IAAIM,GAAKptB,KAAKykC,MAAM9O,cAAc3f,MAAOhW,KAAKykC,MAAM9O,cAAc5f,QACzEs2rB,EAAYrssB,KAAKykC,MAAMzjC,QAAQsC,GAAK,cAAgBojC,EAAY,IAAMkhC,EAAQlhE,KAAO,WAAkBigC,EAe3G,GAdIpZ,GAAW8+qB,IAAc9+qB,GAAW8+qB,GAAWlnoB,kBAAoB,GACnE5gE,EAAOgpB,GAAW8+qB,IAEY,WAA9BrssB,KAAKykC,MAAMhqB,UAAU/T,MACrBo8X,EAAc,IAAI5+D,GAAWmoY,EAAWzkoB,EAAQpxC,MAAOoxC,EAAQtjC,OAAQsjC,EAAQn6D,QAASm6D,EAAQlxC,OAAQ,KAAM,MAC9G5F,EAAM82C,EAAQlxC,OACdswC,EAAiBhnE,KAAKykC,MAAM5W,SAAS8V,cAAcm/V,KAGnD/lX,EAAOyrD,GAAOZ,EAAQlxC,OAAQ12B,KAAKykC,MAAMhqB,UAAU/T,KAAM1G,KAAKykC,MAAMrL,YAAa,IAAIhM,GAAKw6C,EAAQlxC,OAAO1gB,MAAO4xD,EAAQlxC,OAAO3gB,QAAS,MAAO/V,KAAKykC,MAAMhqB,UAAUzE,MAAOG,EAAMyxD,EAAQ0joB,qBACzLt4rB,EAAU,IAAIojB,GAAWi2qB,EAAWzkoB,EAAQpxC,MAAOoxC,EAAQtjC,OAAOtuB,MAAO4xD,EAAQtjC,OAAO9N,MAAOoxC,EAAQn6D,QAAS,KAAMsP,GAEtH+T,EAAMu2C,IADNL,EAAiBhnE,KAAKykC,MAAM5W,SAASsI,SAASnjB,IACXpR,WAAU,GAAOkrB,EAAM9sB,KAAKykC,MAAMzjC,UAErEusB,GAAW8+qB,IAAc9+qB,GAAW8+qB,GAAWlnoB,kBAAoB,EAAG,CACtE,IAAInkE,EAAUusB,GAAW8+qB,GAAWlnsB,kBACF,WAA9BnF,KAAKykC,MAAMhqB,UAAU/T,MACrB1F,EAAQwC,aAAa,IAAKs/X,EAAY/1X,EAAI,IAC1C/L,EAAQwC,aAAa,IAAKs/X,EAAY91X,EAAI,IAC1ChM,EAAQwC,aAAa,QAASs/X,EAAY9sX,MAAQ,IAClDhV,EAAQwC,aAAa,SAAUs/X,EAAY/sX,OAAS,KAGpD/U,EAAQwC,aAAa,IAAKwP,EAAQub,QAItCla,EAAc1S,YAAYqlE,GAE9BA,EAAexjE,aAAa,aAAcokE,EAAQ11B,aAAe,WAAa5a,OAAOswC,EAAQiiE,cAAc38H,YACvG06D,EAAQqqT,kBAAoB,IAAMjyX,KAAKykC,MAAM6nqB,eACX,gBAA9BtssB,KAAKykC,MAAMhqB,UAAU/T,MAAiD,IAAvBkhE,EAAQz/C,aACvDgrT,EAAkBnzU,KAAKykC,MAAM5W,SAAS4rF,aAAa,IAAIyqN,GAAWlkU,KAAKykC,MAAMzjC,QAAQsC,GAAK,cAAgBojC,EAAY,KAAYkhC,EAAQlhE,KAAO,YAAcigC,EAAc,eAAiB3wB,MAAO,EAAGwgB,MAAO,QAAU,EAAG1F,IAC5Nzc,EAAc1S,YAAYwxU,IAE9BnzU,KAAK+qsB,oBAAoB/joB,EAAgB7wD,EAAMyxD,KAGvDouU,EAAa36Y,UAAUowsB,WAAa,SAAUt1rB,EAAMq1rB,EAAY9kqB,GAI5D,IAAK,IAHD3U,EACA/e,EACAukY,EAAev3Y,KAAKykC,MAAM5W,SAASw+C,aAAc/oE,GAAItD,KAAKykC,MAAMzjC,QAAQsC,GAAK,iBACxEigB,EAAI,EAAGA,EAAIpN,EAAK2wB,OAAOrqC,OAAQ8mB,IAE9B9lB,GADNs0B,EAAQ5b,EAAK2wB,OAAOvjB,IACUxG,QAC1B/J,EAAU,IAAIojB,GAAWp2B,KAAKykC,MAAMzjC,QAAQsC,GAAK,cAAgBojC,EAAY,UAAYnjB,EAAGwO,EAAMs2C,SAAUt2C,EAAMuS,OAAOtuB,MAAO+b,EAAMuS,OAAO9N,MAAO,EAAG,KAAMzE,EAAMhV,MACnKw6X,EAAa51Y,YAAY3B,KAAKykC,MAAM5W,SAASsI,SAASnjB,KAG9Dw4rB,EAAW7psB,YAAY41Y,IAEpBvB,GACT00T,IC9QEj2T,GAA6B,WAC7B,SAASA,EAAYhwW,GACjBzkC,KAAKykC,MAAQA,EAkIjB,OA7HAgwW,EAAYp5Y,UAAUmxsB,yBAA2B,WAC7C,IAAIzssB,EAAQC,KACRyssB,EAAczssB,KAAKykC,MAAMzjC,QAAQsC,GAAK,qBACtCopsB,EAAkBvrsB,EAAc,OAASmC,GAAItD,KAAKykC,MAAMzjC,QAAQsC,GAAK,sBACzEopsB,EAAgBhosB,MAAMwP,SAAW,WACjCw4rB,EAAgBhosB,MAAMgI,IAAM,MAC5BggsB,EAAgBhosB,MAAM8H,KAAO,MAC7BxM,KAAKykC,MAAMmyB,YAAYh/B,IAAI,SAAU+2B,EAAY18C,GAClB,OAAvB08C,EAAWv0B,SACXr6B,EAAM4ssB,yBAAyBD,EAAiBz6rB,KAGpDy6rB,EAAgBvnoB,kBAAoB,IAAO1nE,EAAkB8vB,GAAWk/qB,KACxEl/qB,GAAWk/qB,GAAa9qsB,YAAY+qsB,IAM5Cj4T,EAAYp5Y,UAAUsxsB,yBAA2B,SAAU3rsB,EAASuhV,GAChE,IAAI/1U,EACAE,EACAstB,EAEAK,EACAlkB,EACAuwB,EAIAvM,EAPAyiT,GAAmB,EAMnBjuR,GADK3uD,KAAKykC,MAAMzjC,QAAQsC,GACXtD,KAAKykC,MAAMmyB,YAAY2rR,IAExCpoT,EAAeh5B,EAAc,OACzBmC,GAAItD,KAAKykC,MAAMzjC,QAAQsC,GAAK,eAAiBi/U,EAAiBh/U,OAAQ,+BAAiCorD,EAAW8T,OAAS,MAE/H,IAAI7pC,GACAC,QAAQ,EAAOpB,KHnCG,mBGmCqB2C,QAASu0B,EAAWv0B,QAC3Du0B,WAAYA,EAAYy1O,UAAWz1O,EAAWjiC,MAGlD,GADA1sB,KAAKykC,MAAMje,QHtCW,mBGsCeoS,IAChCA,EAASC,OAAQ,CAElB,IADAmB,EAAaD,GAAoBnB,EAASwB,WACxBJ,EAAWh6B,KAAKykC,OAAOhoC,OAErC,IADA49B,EAAkBL,EAAWh6B,KAAKykC,OAC3BpK,EAAgB59B,OAAS,GAC5B09B,EAAax4B,YAAY04B,EAAgB,SAI7CF,EAAax4B,YAAYR,EAAc,OACnCa,UAAW42B,EAASwB,QACpB72B,OAAQ+2B,GAAa1B,EAASwrQ,cAGtC,IAAIz4R,EAASm8D,GAAiB3tC,EAAav4B,WAAU,GAAO5B,KAAKykC,MAAMzjC,SACvE,GAAMvD,EAAkBkxD,EAAWorT,WAmB9B,CACD,IAAI7kW,EAAclV,KAAKykC,MAAMzjC,QAAQ4K,wBACjC8qB,EAAS12B,KAAKykC,MAAMnT,UAAU1lB,wBAMlC,OALAgxU,GAAmB,EACnBpwU,EAAOH,KAAKE,IAAImqB,EAAOlqB,KAAO0I,EAAY1I,MAC1CE,EAAML,KAAKE,IAAImqB,EAAOhqB,IAAMwI,EAAYxI,KACxCF,EAA2C,SAAnCmiD,EAAW8E,oBAAmCjnD,EAAOmiD,EAAW5hD,EAAKP,EAC7EE,EAAwC,SAAjCiiD,EAAW+E,kBAAgChnD,EAAMiiD,EAAW3hD,EAAIN,EAC/DiiD,EAAW+E,mBACf,IAAK,OACDhnD,GAAYiiD,EAAW3hD,EACvB,MACJ,IAAK,SACDN,EAAMA,EAAMiiD,EAAW3hD,GAAM0pB,EAAO3gB,OAAS,EAAMpK,EAAOoK,OAAS,GACnE,MACJ,IAAK,MACDrJ,EAAOA,EAAMgqB,EAAO3gB,OAAU44C,EAAW3hD,EAAIrB,EAAOoK,OAG5D,OAAQ44C,EAAW8E,qBACf,IAAK,OACDjnD,GAAcmiD,EAAW5hD,EACzB,MACJ,IAAK,SACDP,EAAOA,EAAOmiD,EAAW5hD,GAAM2pB,EAAO1gB,MAAQ,EAAMrK,EAAOqK,MAAQ,GACnE,MACJ,IAAK,MACDxJ,EAAQA,EAAOkqB,EAAO1gB,MAAS24C,EAAW5hD,EAAIpB,EAAOqK,WA9CjB,CAC5C0wB,EAAYjpC,EAAkBkxD,EAAWjoB,WAAa,EAAIioB,EAAWjoB,UAErE,IAAI3U,GADJ5b,EAAOnW,KAAKykC,MAAMgjC,KAAK/gC,IACN/T,aACjBiqT,EAAoBjuR,EAAWorT,WAAahoV,EAAMhS,KAAO4uC,EAAWorT,WAAahoV,EAAMzlB,IACvF,IAAIwhD,EAAO33C,EAAK+wD,WACe,aAA3BlnE,KAAKykC,MAAMrL,aACX5sB,EAAOshD,EAAK/gD,EAAI4hD,EAAW5hD,EAC3BL,EAAQunB,GAAmB06B,EAAWorT,UAAW5jW,EAAMnW,KAAKykC,MAAMrL,YAAarH,GAAS+7B,EAAK/3C,OAAU+3C,EAAK9gD,EAC5GN,GAAOiiD,EAAW3hD,IAGlBR,EAASynB,GAAmB06B,EAAWorT,UAAW5jW,EAAMnW,KAAKykC,MAAMrL,YAAarH,GAAS+7B,EAAK93C,MAAS83C,EAAK/gD,EAC5GP,GAAQmiD,EAAW5hD,EACnBL,EAAMohD,EAAK9gD,EAAI2hD,EAAW3hD,GAE9BR,GAASb,EAAOqK,MAAQ,EACxBtJ,GAAQf,EAAOoK,OAAS,EAiC5BokB,EAAaz1B,MAAM8H,KAAOA,EAAO,KACjC2tB,EAAaz1B,MAAMgI,IAAMA,EAAM,KAC3BkwU,GACA57U,EAAQW,YAAYw4B,KAOhCs6W,EAAYp5Y,UAAUkkC,cAAgB,WAClC,MAAO,eAOXk1W,EAAYp5Y,UAAUiX,QAAU,SAAUmyB,KAGnCgwW,KCnIPI,GAA8B,WAC9B,SAASA,EAAapwW,GAClBzkC,KAAKykC,MAAQA,EACbzkC,KAAKgB,QAAUyjC,EAAMzjC,QACrBhB,KAAK6xB,QAAU4S,EAAM5S,QACrB7xB,KAAKokS,UAAYpkS,KAAK6xB,QAAQuyQ,UAC9BpkS,KAAK80Y,YAAc90Y,KAAK6xB,QAAQyS,OAChCtkC,KAAK+0Y,UAAY,IAAI/+V,IACjBI,QAAS,SACT4+V,aAAch1Y,KAAKi1Y,eAAe35Y,KAAK0E,MACvCm2C,WAAYn2C,KAAKk1Y,qBAAqB55Y,KAAK0E,MAC3CuuH,UAAW,EAAGQ,WAAY,MAE9B/uH,KAAK+0Y,UAAU1+V,SAASr2C,KAAKgB,SA8NjC,OAxNA6zY,EAAax5Y,UAAU2mI,cAAgB,SAAUh7D,GAC7ChnE,KAAKgnE,eAAiBA,EACLhnE,KAAKykC,MAAMzjC,QAAQ4K,wBAApC,IACI+U,EAAU4lB,GAAWygC,EAAgBhnE,KAAKykC,OAC9CzkC,KAAKo1Y,YAAcz0X,EAAQxK,KAC3BnW,KAAK0mC,UAAY/lB,EAAQ+lB,UACzB1mC,KAAKm1Y,eAAiBx0X,EAAQinD,QAC9B,IAAI5jE,EAAMhE,KAAKq1Y,sBACwC,OAAnDruU,EAAen0D,aAAa,oBAAwE,OAAzC7O,EAAI6O,aAAa,qBAC5E7S,KAAK+0Y,UAAUrzY,KAAKsC,IAG5B6wY,EAAax5Y,UAAUg6Y,oBAAsB,WACzC,IAAI3nX,EAAW1tB,KAAK4ssB,qBAChB5rsB,EAAUusB,GAAWvtB,KAAKgB,QAAQsC,GAAK,eAiB3C,OAfItC,GACAA,EAAQ0D,MAAM8H,KAAQkhB,EAAS3gB,IAA0B,KACzD/L,EAAQ0D,MAAMgI,IAAOghB,EAAS1gB,IAA0B,QAGxDhM,EAAUG,EAAc,OACpBmC,GAAItD,KAAKgB,QAAQsC,GAAK,cACtBC,OAAQ,2BAA6BmqB,EAAS3gB,EAAI,UAAY2gB,EAAS1gB,EAAI,SAEvErL,YAAYR,EAAc,OAC9BmC,GAAItD,KAAKgB,QAAQsC,GAAK,gBACtBC,OAAQ,mEAEZgqB,GAAWvtB,KAAKgB,QAAQsC,GAAK,sBAAsB3B,YAAYX,IAE5DA,GAEX6zY,EAAax5Y,UAAU4vH,mBAAqB,WAQxC,MAN+B,aAA3BjrH,KAAKykC,MAAMrL,YACEp5B,KAAKo1Y,YAAY3/W,gBAAkC,cAAf,aAGrCz1B,KAAKo1Y,YAA2B,gBAAI,YAAc,gBAItEP,EAAax5Y,UAAUuxsB,mBAAqB,WAM7B,IAAIx/qB,GAAKptB,KAAKykC,MAAM9O,cAAc3f,MAAOhW,KAAKykC,MAAM9O,cAAc5f,QAL7E,IACI2gB,EAEAm2qB,EACA1B,EAEAp+rB,EACAC,EACA+I,EACAC,EAGAkxD,EAFA4loB,EAAS9ssB,KAAKykC,MAAMzjC,QAAQsC,GAAK,aAAetD,KAAK0mC,UACrDslqB,EAAShssB,KAAKykC,MAAMzjC,QAAQsC,GAAK,mBAAqBtD,KAAK0mC,UAE3DnZ,GAAWu/qB,IAEXD,GADA3loB,EAAa35C,GAAWu/qB,GAAQlhsB,yBACbY,KACnB2+rB,EAAQjkoB,EAAWx6D,MAGnBw6D,EAAa35C,GAAWy+qB,GAAQpgsB,wBAChCihsB,EAAU7ssB,KAAKo1Y,YAAY3/W,gBAA0DyxC,EAAW16D,KAAjD06D,EAAW16D,KAAO06D,EAAWlxD,MAC5Em1rB,EAAUnrsB,KAAKo1Y,YAAY3/W,gBAA0DyxC,EAAWx6D,IAAjDw6D,EAAWx6D,IAAMw6D,EAAWnxD,QAE/E2gB,EAAS12B,KAAKgnE,eAAep7D,wBAC7B,IAAIsJ,EAAclV,KAAKykC,MAAMzjC,QAAQ4K,wBAcrC,OAbAmB,EAAI2pB,EAAOlqB,KAAO0I,EAAY1I,KAC9BQ,EAAI0pB,EAAOhqB,IAAMwI,EAAYxI,IAC7BqJ,EAAS2gB,EAAO3gB,OAChBC,EAAQ0gB,EAAO1gB,MACgB,aAA3BhW,KAAKykC,MAAMrL,aACXrsB,EAAK8/rB,EAAQ33rB,EAAY1I,KACzBQ,EAAkC,WAA7BhN,KAAKm1Y,eAAezuY,KAAqBsG,EAAK+I,EAAS,EAAO/V,KAAKo1Y,YAAYlhX,WAAkBlnB,EAAI+I,EAAR/I,IAGlGA,EAAKm+rB,EAAQj2rB,EAAYxI,IACzBK,EAAkC,WAA7B/M,KAAKm1Y,eAAezuY,KAAsBqG,EAAIiJ,EAAQ,EAAOhW,KAAKo1Y,YAAYlhX,WAA0BnnB,EAAZA,EAAIiJ,GAE9F,IAAIwvB,GAAcz4B,EAAGC,IAGpC6nY,EAAax5Y,UAAU45Y,eAAiB,SAAUh1Y,GAC9C,IAAImrsB,EAAerkoB,GAAoB/mE,KAAKgB,QAAShB,KAAKgnE,eAAgBhnE,KAAKykC,MAAMrL,YAAap5B,KAAKo1Y,YAAa,UAAW,MAC3HE,EAAgBt1Y,KAAKykC,MAAM5S,QAAQmK,QAAUh8B,KAAKo1Y,YAAYp/W,WAAWgG,OACzET,EAAoB+5W,GAAoD,OAAnCA,EAAc3lY,MAAM,WACzDqsB,EAASh8B,KAAKykC,MAAMwqC,KAAKC,iBACzBlzC,OAAQ4K,GAAe0uW,GAAgBnmU,YAAanvE,KAAKykC,MAAM2qC,uBAE/Dh1C,EAAUmB,EACV+5W,EAAc/lY,QAAQ,IAAIyU,OAAO,UAAW,KAAMgY,EAAOovqB,IACzDpvqB,EAAOovqB,GAEPxyqB,GACAC,QAAQ,EAAOpB,KJ/GA,gBIgHf2C,QAHJA,EAAUp6B,KAAK6xB,QAAQ5iB,SAAW8qB,GAAoB/5B,KAAK6xB,QAAQ5iB,SAAjC8qB,EAA6C/8B,MAASo9B,IAAW,GAAKA,EAIpGkK,OAAQtkC,KAAK80Y,YACb3+X,KAAMnW,KAAKo1Y,YAAaxtU,QAAS5nE,KAAKm1Y,eACtC/wG,UAAWpkS,KAAKokS,WAEpBpkS,KAAKykC,MAAMje,QJrHQ,gBIqHeoS,GAClC54B,KAAK+0Y,UAAU36W,QAAUxB,EAASwB,QAClCp6B,KAAKokS,UAAYxrQ,EAASwrQ,UAC1BpkS,KAAK80Y,YAAcl8W,EAAS0L,OAC5BtkC,KAAK+0Y,UAAU7gY,SAAWlU,KAAKirH,qBAC/BjrH,KAAK+0Y,UAAUnpV,YAEnBipV,EAAax5Y,UAAU65Y,qBAAuB,SAAUj1Y,GACpD,IAKI+iH,EACAzpG,EANAmT,EAAO1sB,KAAKokS,UACZ+wC,EAAcn1U,KAAK80Y,YAAYt+W,MAC/B8N,EAAStkC,KAAK80Y,YAAY9+X,MAC1Bu/X,EAAc,EAIlBt1Y,EAAKe,QAAQ8C,UAAUS,OAAO,iBAC9BtE,EAAKe,QAAQ8C,UAAUM,IAAI,gBAC3B,IAAIsnH,EAAWzrH,EAAKe,QAAQ2B,cAAc,gBAC1CsD,EAAkBhG,EAAKe,SACnB2wD,gBAAmB3xD,KAAK6xB,QAAQ+L,KAAMu3S,YAAeA,GAAe,UACpE1mP,YAAenqD,EAAS,KAAMyoqB,iBAAkB,OAAQC,aAAgB,MAAOC,eAAgB,MAC/FC,gBAAiB,MAAOC,cAAe,MAAOC,iBAAkB,QAEpEnnsB,EAAkBhG,EAAKe,QAAQ2B,cAAc,mBACzC6zB,MAAS9J,EAAK8J,MAAOvJ,WAAcP,EAAKO,WAAYJ,SAAYH,EAAKI,KACrEC,WAAcL,EAAKK,WAAYtf,QAAWif,EAAKjf,QAAQP,WAAY8f,UAAaN,EAAKM,YAEzF/mB,EAAkBhG,EAAKe,QAAQ2B,cAAc,iBACzCqT,MAAS,GAAKu/X,EAAcjxW,GAAU,KAAMvuB,OAAUw/X,EAAcjxW,EAAS,OAE7EonF,EAAS5nH,UAAUK,SAAS,cAE5B6+G,GADAuyR,EAAct1Y,EAAKe,QAAQ2B,cAAc,gBAAgB+uC,cAC9B,KAC3BzrC,EAAkBhG,EAAKe,QAAQ2B,cAAc,uBACzC6yY,iBAAoB,cAAeC,gBAAmB,cAAeC,kBAAqB11Y,KAAK6xB,QAAQyS,OAAOtuB,MAAQ,EAClHhW,KAAK6xB,QAAQyS,OAAO9N,MAAQ,cAAeqyL,gBAAmB7lG,EAAY2yR,iBAAoB3yR,EAClGqkC,kBAAqBrkC,IAEzBzpG,EAAcg8X,EAAcjxW,EAAU,KACtCr+B,EAAkBhG,EAAKe,QAAQ2B,cAAc,uBACzC6yY,iBAAoB,cAAeC,gBAAmB,cAAeC,kBAAqB,cAC1F7sL,gBAAmBtvM,EAAYo8X,iBAAoBp8X,EAAY8tI,kBAAqB9tI,EACpF/M,KAAQ83B,EAAS,KAAM53B,IAAO43B,EAAS,QAGtConF,EAAS5nH,UAAUK,SAAS,iBAEjC6+G,GADAuyR,EAAct1Y,EAAKe,QAAQ2B,cAAc,gBAAgB+uC,cAC9B,KAC3BzrC,EAAkBhG,EAAKe,QAAQ2B,cAAc,uBACzC6yY,iBAAoB,cAAeC,gBAAmB,cAAeG,eAAkB51Y,KAAK6xB,QAAQyS,OAAOtuB,MAAQ,EAC/GhW,KAAK6xB,QAAQyS,OAAO9N,MAAQ,cAAeqyL,gBAAmB7lG,EAAY2yR,iBAAoB3yR,EAClG6yR,eAAkB7yR,IAEtBzpG,EAAcg8X,EAAcjxW,EAAU,KACtCr+B,EAAkBhG,EAAKe,QAAQ2B,cAAc,uBACzC6yY,iBAAoB,cAAeC,gBAAmB,cAAeG,eAAkB,cACvF/sL,gBAAmBtvM,EAAYo8X,iBAAoBp8X,EAAYs8X,eAAkBt8X,EACjF/M,KAAQ83B,EAAS,KAAM53B,IAAO,OAG7Bg/G,EAAS5nH,UAAUK,SAAS,eACjC8B,EAAkBhG,EAAKe,QAAQ2B,cAAc,iBACzCqT,MAASu/X,EAAcjxW,EAAS,KAAMvuB,OAAU,GAAKw/X,EAAcjxW,GAAU,OAGjF0+E,GADAuyR,EAAct1Y,EAAKe,QAAQ2B,cAAc,gBAAgBiC,aAC9B,KAC3BqB,EAAkBhG,EAAKe,QAAQ2B,cAAc,uBACzCizY,eAAkB,cAAeF,kBAAqB,cAAeF,iBAAoBrgE,EACzF0gE,eAAkB7yR,EAAYqkC,kBAAqBrkC,EAAY2yR,iBAAoB3yR,IAEvFzpG,EAAcg8X,EAAcjxW,EAAU,KACtCr+B,EAAkBhG,EAAKe,QAAQ2B,cAAc,uBACzCizY,eAAkB,cAAeF,kBAAqB,cAAeF,iBAAoBx1Y,KAAK6xB,QAAQ+L,KACtGi4W,eAAkBt8X,EAAY8tI,kBAAqB9tI,EAAYo8X,iBAAoBp8X,EACnF/M,KAAQ83B,EAAS,KAAM53B,IAAO43B,EAAS,SAI3Cr+B,EAAkBhG,EAAKe,QAAQ2B,cAAc,iBACzCqT,MAAUu/X,EAAcjxW,EAAU,KAAMvuB,OAAU,GAAKw/X,EAAcjxW,GAAU,OAGnF0+E,GADAuyR,EAAct1Y,EAAKe,QAAQ2B,cAAc,gBAAgBiC,aAC9B,KAC3BqB,EAAkBhG,EAAKe,QAAQ2B,cAAc,uBACzCizY,eAAkB,cAAeF,kBAAqB,cAAeD,gBAAmBtgE,EACxF0gE,eAAkB7yR,EAAYqkC,kBAAqBrkC,EAAY6lG,gBAAmB7lG,IAEtFzpG,EAAcg8X,EAAcjxW,EAAU,KACtCr+B,EAAkBhG,EAAKe,QAAQ2B,cAAc,uBACzCizY,eAAkB,cAAeF,kBAAqB,cAAeD,gBAAmBz1Y,KAAK6xB,QAAQ+L,KACrGi4W,eAAkBt8X,EAAY8tI,kBAAqB9tI,EAAYsvM,gBAAmBtvM,EAClF/M,MAAS83B,GAAU,EAAI,GAAK,GAAK,KAAM53B,IAAO43B,EAAS,QAG/DtkC,KAAK+0Y,UAAU7iV,QAAQjyD,EAAKkH,QAC5BlB,EAAkBhG,EAAKe,SACnBs1C,QAAW,QAASw/V,mBAAsB,WAC1CC,mBAAsB/1Y,KAAK6xB,QAAQ0yQ,gBAAkB,SAAW,SAMxEswG,EAAax5Y,UAAUkkC,cAAgB,WACnC,MAAO,WAOXs1W,EAAax5Y,UAAUiX,QAAU,SAAUmyB,KAGpCowW,KCnPPvqT,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAyB5DywqB,GAA6B,SAAUlinB,GAOvC,SAASkinB,EAAYr6rB,EAAShS,GAC1B,IAAIjB,EAAQorF,EAAO7pF,KAAKtB,KAAMgT,EAAShS,IAAYhB,KASnD,OAPAD,EAAM66Y,aAAc,EAEpB76Y,EAAMgtU,OAAS,EAEfhtU,EAAMitU,OAAS,EAEfjtU,EAAMussB,cAAe,EACdvssB,EA4yBX,OA5zBAuqF,GAAU+inB,EAAalinB,GAqBvBkinB,EAAYhysB,UAAUoX,UAAY,WAC9BzS,KAAKw+G,eACLx+G,KAAKwmB,QLzDK,QKyDWie,MAAOzkC,OAC5BA,KAAK+5Y,cACL/5Y,KAAKoiS,sBACLpiS,KAAK2N,aACL3N,KAAKggC,YACLhgC,KAAKukB,cAET8orB,EAAYhysB,UAAU0+Y,YAAc,WACb,iBAAf/5Y,KAAKkb,OACLlb,KAAK0gC,WAAWlK,MAAQx2B,KAAK0gC,WAAWlK,OAAS,UACjDx2B,KAAKg6Y,eAAe,UAAW,aAG/Bh6Y,KAAK0gC,WAAWlK,MAAQx2B,KAAK0gC,WAAWlK,OAAS,UACjDx2B,KAAKg6Y,eAAe,UAAW,aAGvCqzT,EAAYhysB,UAAU2+Y,eAAiB,SAAUC,EAAYC,GACzD,IAAK,IAAI97Y,EAAK,EAAGyE,EAAK7C,KAAKynE,KAAMrpE,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACnD,IAAI+X,EAAOtT,EAAGzE,GACd+X,EAAK23C,KAAKt3B,MAAQrgB,EAAK23C,KAAKt3B,OAAS0jX,EACrC/jY,EAAK6f,WAAWtJ,KAAK8J,MAAQrgB,EAAK6f,WAAWtJ,KAAK8J,OAASyjX,EAC3D9jY,EAAKihY,WAAW5gX,MAAQrgB,EAAKihY,WAAW5gX,OAAS0jX,EACjD/jY,EAAKygY,WAAWpgX,MAAQrgB,EAAKygY,WAAWpgX,OAAS0jX,EACjD,IAAK,IAAIj2Y,EAAK,EAAGwG,EAAK0L,EAAKwxD,SAAU1jE,EAAKwG,EAAGhO,OAAQwH,IAAM,CACvD,IAAI2jE,EAAUn9D,EAAGxG,GACjB2jE,EAAQpxC,MAAQoxC,EAAQpxC,OAAS0jX,GAGzC,IAAK,IAAI3oE,EAAK,EAAGC,EAAKxxU,KAAK42D,YAAa26Q,EAAKC,EAAG/0U,OAAQ80U,IAAM,CAC1D,IAAI5iR,EAAa6iR,EAAGD,GACpB5iR,EAAWjiC,KAAK8J,MAAQm4B,EAAWjiC,KAAK8J,OAASyjX,IAGzDozT,EAAYhysB,UAAU+mS,oBAAsB,WACxCpiS,KAAK6tB,SAAW,IAAIC,GAAY9tB,KAAKgB,QAAQsC,IAC7CtD,KAAK66Y,qBAAuB,IAAI/B,GAAgB94Y,MAChDA,KAAK+4Y,aAAe,IAAI/C,GAAah2Y,OAKzCqtsB,EAAYhysB,UAAUsS,WAAa,WAC/B3N,KAAKivE,KAAO,IAAIy7B,IAKpB2imB,EAAYhysB,UAAU2kC,UAAY,WAC9BhgC,KAAK0/U,YACL1/U,KAAKq/B,gBACLr/B,KAAKsxB,UAAYtxB,KAAK6tB,SAASmS,WAC3B18B,GAAItD,KAAKgB,QAAQsC,GAAK,OACtB0S,MAAOhW,KAAK21B,cAAc3f,MAC1BD,OAAQ/V,KAAK21B,cAAc5f,UAQnCs3rB,EAAYhysB,UAAUqkV,UAAY,WAC9BlyT,GAAcxtB,KAAKgB,QAAQsC,GAAK,sBAC1B7F,EAAkBuC,KAAKsxB,YAAgB7zB,EAAkBuC,KAAKsxB,UAAU7wB,aAC1E8D,EAAOvE,KAAKsxB,YAMpB+7qB,EAAYhysB,UAAUgkC,cAAgB,WAClC,IAAIrpB,EAAQqoB,GAAer+B,KAAKgW,MAAOhW,KAAKgB,QAAQ4D,cAAgB5E,KAAKgB,QAAQ4D,aAAe,IAC5FmR,EAASsoB,GAAer+B,KAAK+V,OAAQ/V,KAAKgB,QAAQ0wC,eAAiB1xC,KAAKgB,QAAQ0wC,cAAgB,IACpG1xC,KAAK21B,cAAgB,IAAIvI,GAAKpX,EAAOD,IAKzCs3rB,EAAYhysB,UAAU0wG,OAAS,WAC3B/rG,KAAKstsB,sBACLttsB,KAAKutR,kBACLvtR,KAAKutsB,qBACLvtsB,KAAKwmB,QL9IO,UK8IWie,MAAOzkC,QAMlCqtsB,EAAYhysB,UAAUiysB,oBAAsB,WACxCttsB,KAAKwtsB,yBACLxtsB,KAAKq8U,eACLr8U,KAAKs8U,cACLt8U,KAAKy/S,mBAET4tZ,EAAYhysB,UAAUmysB,uBAAyB,WAC3C,GAAI/vsB,EAAkB8vB,GAAWvtB,KAAKgB,QAAQsC,GAAK,uBAAwB,CACvE,IAAIuhY,EAAmB1jY,EAAc,OACrC0jY,EAAiBvhY,GAAKtD,KAAKgB,QAAQsC,GAAK,qBACxCuhY,EAAiBrhY,aAAa,QAAS,sBACvCxD,KAAKgB,QAAQW,YAAYkjY,KAOjCwoU,EAAYhysB,UAAUkyR,gBAAkB,WACpCvtR,KAAK66Y,qBAAqBwuT,uBAM9BgE,EAAYhysB,UAAUkysB,mBAAqB,WACvCvtsB,KAAK+4Y,aAAa/wE,aAClBhoU,KAAKgB,QAAQW,YAAY3B,KAAKsxB,WAC1BtxB,KAAK65Y,mBACL75Y,KAAK65Y,kBAAkB2yT,4BAG/Ba,EAAYhysB,UAAUghV,aAAe,WACjC,IAAIrmU,EAAQhW,KAAKskC,OAAOtuB,MACxB,GAAIA,EAAQ,EAAG,CACX,IAAIqd,EAAO,IAAI6wS,GAAWlkU,KAAKgB,QAAQsC,GAAK,qBAAsBtD,KAAKyvB,WAAYzvB,KAAKskC,OAAQ,EAAG,IAAIpO,GAAKlgB,EAAQ,EAAGA,EAAQ,EAAGhW,KAAK21B,cAAc3f,MAAQA,EAAOhW,KAAK21B,cAAc5f,OAASC,GAAQ,KAAM,MAC9MhW,KAAKsxB,UAAU3vB,YAAY3B,KAAK6tB,SAAS8V,cAActQ,MAG/Dg6qB,EAAYhysB,UAAUihV,YAAc,WAChC,IAAIvvU,EACAC,EACA+I,EACAC,EACAy3rB,EACJ,GAAIztsB,KAAKkgC,MAAO,CACZ,IAAIpT,EAAON,GAAYxsB,KAAKkgC,MAAOlgC,KAAK0gC,YACpC1tB,EAAU,IAAIujB,GAAWv2B,KAAKgB,QAAQsC,GAAK,oBAAqBtD,KAAK21B,cAAc3f,MAAQ,EAAGhW,KAAKy8B,OAAO/vB,IAAOogB,EAAK/W,OAAS,EAAI,SAAU/V,KAAKkgC,OACtJutqB,GACI1gsB,EAAGiG,EAAQjG,EAAK+f,EAAK9W,MAAQ,EAC7BhJ,EAAGgG,EAAQhG,EACXgJ,MAAO8W,EAAK9W,MACZD,OAAQ+W,EAAK/W,QAEjB,IAAI/U,EAAUs1B,GAAYtjB,EAAShT,KAAK0gC,WAAY1gC,KAAK0gC,WAAWlK,MAAOx2B,KAAKsxB,WAChFtwB,EAAQwC,aAAa,aAAcxD,KAAKkyC,aAAelyC,KAAKkgC,OAC5Dl/B,EAAQwC,aAAa,WAAYxD,KAAKipH,SAAS/7G,YAEnDH,EAAI/M,KAAKy8B,OAAOjwB,KAChBQ,EAAKvP,EAAkBgwsB,GAAgBztsB,KAAKy8B,OAAO/vB,IAAM+gsB,EAAYzgsB,EACrE+I,EAAU/V,KAAK21B,cAAc5f,OAAS/I,EAAIhN,KAAKy8B,OAAO9vB,OACtDqJ,EAAShW,KAAK21B,cAAc3f,MAAQhW,KAAKy8B,OAAOjwB,KAAOxM,KAAKy8B,OAAOhwB,MACnEzM,KAAK0tsB,YAAe3gsB,EAAGA,EAAGC,EAAGA,EAAGgJ,MAAOA,EAAOD,OAAQA,IAK1Ds3rB,EAAYhysB,UAAUmjH,aAAe,WACjCj5G,GAAahB,OAAOvE,KAAKgB,QAASwK,GAAQ0+E,gBAAiBlqF,KAAKm6Y,kBAChE50Y,GAAahB,OAAOvE,KAAKgB,QAASwK,GAAQ2+E,eAAgBnqF,KAAK6/U,WAC/Dt6U,GAAahB,OAAOvE,KAAKgB,QAASwK,GAAQ4+E,cAAepqF,KAAK8/U,UAC9Dv6U,GAAahB,OAAOvE,KAAKgB,QAAS,cAAehB,KAAKo6Y,iBACtD70Y,GAAahB,OAAOvE,KAAKgB,QAAUwK,GAAQC,UAAY,eAAiB,aAAezL,KAAKigV,YAC5F16U,GAAahB,OAAO1I,OAAS2P,GAAQomB,SAAY,gBAAiB/1B,QAAU,wBAAyBA,OAAW,oBAAsB,SAAUmE,KAAKq6Y,YAAY/+Y,KAAK0E,QAK1KqtsB,EAAYhysB,UAAUkpB,WAAa,WAE/Bhf,GAAanB,IAAIpE,KAAKgB,QAASwK,GAAQ0+E,gBAAiBlqF,KAAKm6Y,iBAAkBn6Y,MAC/EuF,GAAanB,IAAIpE,KAAKgB,QAASwK,GAAQ2+E,eAAgBnqF,KAAK6/U,UAAW7/U,MACvEuF,GAAanB,IAAIpE,KAAKgB,QAASwK,GAAQ4+E,cAAepqF,KAAK8/U,SAAU9/U,MACrEuF,GAAanB,IAAIpE,KAAKgB,QAAS,cAAehB,KAAKo6Y,gBAAiBp6Y,MACpEuF,GAAanB,IAAIpE,KAAKgB,QAAUwK,GAAQC,UAAY,eAAiB,aAAezL,KAAKigV,WAAYjgV,MACrGuF,GAAanB,IAAIvI,OAAS2P,GAAQomB,SAAY,gBAAiB/1B,QAAU,wBAAyBA,OAAW,oBAAsB,SAAUmE,KAAKq6Y,YAAar6Y,MAC/JA,KAAKmiP,SAASniP,KAAKgB,UAEvBqssB,EAAYhysB,UAAU8mP,SAAW,SAAUnhP,GACvCA,EAAQ0D,MAAMo1G,YAActyC,GAAcxnE,KAAKynE,MAAQ,OAAS,UAChEzmE,EAAQ0D,MAAMg8U,cAAgBl5Q,GAAcxnE,KAAKynE,MAAQ,OAAS,UAClEzmE,EAAQ0D,MAAMi8U,iBAAmB,OACjC3/U,EAAQ0D,MAAMk8U,aAAe,OAC7B5/U,EAAQ0D,MAAMm8U,iBAAmB,OACjC7/U,EAAQ0D,MAAMwP,SAAW,YAO7Bm5rB,EAAYhysB,UAAUg/Y,YAAc,SAAUx5Y,GAC1C,IAAId,EAAQC,KACRC,GACAwkC,MAAOzkC,KACPihV,aAAc,IAAI7zT,GAAKptB,KAAK21B,cAAc3f,MAAOhW,KAAK21B,cAAc5f,QACpE0hB,KLxOS,UKyOTupT,YAAa,IAAI5zT,GAAK,EAAG,IAe7B,OAbIptB,KAAK65U,UACL35U,aAAaF,KAAK65U,UAElB75U,KAAKgB,QAAQ8C,UAAUK,SAAS,mBAChCnE,KAAK65U,SAAW15U,WAAW,WACvBJ,EAAMussB,cAAe,EACrBvssB,EAAMigC,YACNjgC,EAAM4mF,YAAa,EACnB1mF,EAAK+gV,YAAc,IAAI5zT,GAAKrtB,EAAM41B,cAAc3f,MAAOjW,EAAM41B,cAAc5f,QAC3EhW,EAAMymB,QLpPD,UKoPkBvmB,GACvBF,EAAMgsG,UACP,OAEA,GAKXshmB,EAAYhysB,UAAUiX,QAAU,WAC5BtS,KAAKw+G,eACLx+G,KAAK0/U,YACLv0P,EAAO9vF,UAAUiX,QAAQhR,KAAKtB,OAMlCqtsB,EAAYhysB,UAAUokT,gBAAkB,WACpC,IAAIzpS,EACAD,EACAhJ,EACAC,EACAgG,EAEA61D,EACAD,EAEAv1C,EAJAtW,EAAO,GAGP6gB,EAAO59B,KAAKya,UAAUk3C,gBAEtB/kD,EAAS5M,KAAKya,UAAUzE,MAC5B4yD,EAAeh8D,EAAWA,EAAS,EAAKP,KAAK+Q,GAC7CyrD,EAAYj8D,EAAS,EACI,aAArB5M,KAAKo5B,aACLrjB,EAAS/V,KAAK0tsB,WAAW33rB,OACzBA,EAAU/V,KAAKya,UAAU1E,OAAS,EAAI/V,KAAKya,UAAU1E,OAA+C,GAApCA,EAAS,EAAOA,EAAS,EAAK,GAC9FC,EAAQhW,KAAKya,UAAUzE,MACvBD,EAAkC,gBAAxB/V,KAAKya,UAAU/T,KAA0BqP,EAAyB,EAAf6yD,EAAoBC,EAAY9yD,EAC7FhJ,EAAK/M,KAAK0tsB,WAAW3gsB,GAAM/M,KAAK0tsB,WAAW13rB,MAAQ,EAAMhW,KAAKya,UAAUzE,MAAQ,GAAOhW,KAAKya,UAAU9O,OACtGqB,EAAIhN,KAAK0tsB,WAAW1gsB,GAAMhN,KAAK0tsB,WAAW33rB,OAAS,GAA+B,gBAAxB/V,KAAKya,UAAU/T,MACnEqP,EAAyB,EAAf6yD,EAAoBC,GAAc,EAAI9yD,EAAS,IAC/DA,EAASA,IAGTC,EAAShW,KAAKya,UAAU1E,OAAS,EAAK/V,KAAKya,UAAU1E,OACmB,GAAlE/V,KAAK0tsB,WAAW13rB,MAAQ,EAAOhW,KAAK0tsB,WAAW13rB,MAAQ,EAAK,GAClEA,EAAiC,gBAAxBhW,KAAKya,UAAU/T,KAA0BsP,EAAwB,EAAf4yD,EAAoBC,EAAY7yD,EAC3FjJ,EAAI/M,KAAK0tsB,WAAW3gsB,GAAM/M,KAAK0tsB,WAAW13rB,MAAQ,GAA+B,gBAAxBhW,KAAKya,UAAU/T,MACnEsP,EAAwB,EAAf4yD,EAAoBC,GAAa,EAAI7yD,EAAQ,IAC3DhJ,EAAKhN,KAAK0tsB,WAAW1gsB,GAAMhN,KAAK0tsB,WAAW33rB,OAAS,EAAM/V,KAAKya,UAAUzE,MAAQ,GAAOhW,KAAKya,UAAU9O,OACvGoK,EAAS/V,KAAKya,UAAUzE,OAE5BhW,KAAKspsB,iBAAoBv8rB,EAAGA,EAAGC,EAAGA,EAAGgJ,MAAOA,EAAOD,OAAQA,GACvD/V,KAAKspsB,gBAAgBtzrB,MAAQ,IAC7BhW,KAAK+rsB,gBAAkB/rsB,KAAK6tB,SAASw+C,aAAc/oE,GAAItD,KAAKgB,QAAQsC,GAAK,mBAAoB+J,UAAW,qBAC5E,WAAxBrN,KAAKya,UAAU/T,MACf2sB,EAAO,IAAI6wS,GAAWlkU,KAAKgB,QAAQsC,GAAK,IAAMtD,KAAKya,UAAU/T,KAAO,UAAWk3B,EAAM59B,KAAKya,UAAU6pB,OAAQ,EAAG,IAAIpO,GAAKnpB,EAAGC,EAAGgJ,EAAOD,IACrI/V,KAAK+rsB,gBAAgBpqsB,YAAY3B,KAAK6tB,SAAS8V,cAActQ,MAG7DtW,EAAOyrD,GAAOxoE,KAAKspsB,gBAAiBtpsB,KAAKya,UAAU/T,KAAM1G,KAAKo5B,YAAa,IAAIhM,GAAKptB,KAAKya,UAAU1E,OAAQ/V,KAAKya,UAAUzE,OAAQ,YAAa,KAAM,KAAMhW,KAAKya,UAAU6wrB,qBAC1Kt4rB,EAAU,IAAIojB,GAAWp2B,KAAKgB,QAAQsC,GAAK,IAAMtD,KAAKya,UAAU/T,KAAO,UAAWk3B,EAAM59B,KAAKya,UAAU6pB,OAAOtuB,MAAOhW,KAAKya,UAAU6pB,OAAO9N,MAAO,EAAG,GAAIzZ,GACzJ/c,KAAK+rsB,gBAAgBpqsB,YAAY3B,KAAK6tB,SAASsI,SAASnjB,KAE5DhT,KAAKsxB,UAAU3vB,YAAY3B,KAAK+rsB,mBAQxCsB,EAAYhysB,UAAU8+Y,iBAAmB,SAAUt5Y,GAIjCA,EAAEsG,OAECnH,KAAKgB,QAAQ4K,wBAL9B,IASI+U,EAMA1gB,EAAOD,KAAKu6Y,aAAa15Y,EAAG,aLjVZ,kBK8VpB,OAZAb,KAAKwmB,QLlVe,iBKkVSvmB,GAC7BD,KAAK+sU,OAAS9sU,EAAK8M,EACnB/M,KAAKgtU,OAAS/sU,EAAK+M,EACf/M,EAAKkH,SACAlH,EAAK44B,SAAY54B,EAAKkH,OAAO7D,GAAG/E,QAAQ,kBAAoB,GAAO0B,EAAKkH,OAAO7D,GAAG/E,QAAQ,eAAiB,KAEtGd,EADNkjB,EAAU3gB,KAAK2tsB,cAAc1tsB,EAAKkH,UACGwZ,EAAQinD,UACzC5nE,KAAK46Y,aAAc,EACnB56Y,KAAK4tsB,aAAe3tsB,EAAKkH,SAI9B,GAOXkmsB,EAAYhysB,UAAUwkV,UAAY,SAAUh/U,GACxC,IAAI8f,EAEA1gB,EAAOD,KAAKu6Y,aAAa15Y,EAAG,YL5WZ,kBKkYpB,OArBAb,KAAKwmB,QL7We,iBK6WSvmB,GAC7BD,KAAK+sU,OAAS9sU,EAAK8M,EACnB/M,KAAKgtU,OAAS/sU,EAAK+M,EACf/M,EAAKkH,SAAWlH,EAAK44B,SAChB54B,EAAKkH,OAAO7D,GAAG/E,QAAQ,kBAAoB,GAAO0B,EAAKkH,OAAO7D,GAAG/E,QAAQ,eAAiB,GACvFyB,KAAKw7U,eAAiBx7U,KAAK6xB,QAAQ4N,QACnCz/B,KAAKw7U,cAAcx5M,cAAc/hI,EAAKkH,SAGpC1J,EADNkjB,EAAU3gB,KAAK2tsB,cAAc1tsB,EAAKkH,UACGwZ,EAAQinD,UACzC5nE,KAAKgB,QAAQ0D,MAAM+0D,OAAS94C,EAAQjc,SAIpC1E,KAAKw7U,eAAiBx7U,KAAK6xB,QAAQ4N,QACnCz/B,KAAKw7U,cAAcu5D,UAAU9yY,QAEjCjC,KAAKgB,QAAQ0D,MAAM+0D,OAAUz5D,KAAgB,YAAIA,KAAKgB,QAAQ0D,MAAM+0D,OAAS,QAEjFz5D,KAAK6tsB,iBAAiBhtsB,KAEnB,GAMXwssB,EAAYhysB,UAAUsysB,cAAgB,SAAU3ssB,GAC5C,IAAI2f,EAEAxK,EAEAyxD,EACAl7D,EACAF,EAGAwjW,EACAh9R,EATA03S,EAAa1qX,KAAKgB,QAAQ4K,wBAE1BH,GAAY,EAIZu7D,EAAiBz5C,GAAWvsB,EAAQsC,IACpCwqsB,EAAU9moB,EA+Bd,OA5BArmD,EAAU4lB,GAAWvlC,EAAShB,MAC9BmW,EAAOwK,EAAQxK,MACfyxD,EAAUjnD,EAAQinD,SACNC,aACa,QAAjBD,EAAQlhE,KACiB,aAArB1G,KAAKo5B,aACL1sB,EAAMs6D,EAAep7D,wBAAwBc,IAAMg+W,EAAWh+W,IAC9DA,EAAQyJ,EAAK+d,WAAoBxnB,EAAMohsB,EAAQl/pB,UAAU74B,OAA9BrJ,EAC3BjB,EAAa0K,EAAK+d,WACbl0B,KAAKgtU,QAAUtgU,GAAO1M,KAAKgtU,OAAUtgU,EAAM,GADhB1M,KAAKgtU,OAAUtgU,EAAM,IAAO1M,KAAKgtU,QAAUtgU,EAE3EsjW,EAAc,aAGdxjW,EAAOw6D,EAAep7D,wBAAwBY,KAAOk+W,EAAWl+W,KAChEA,EAAS2J,EAAK+d,WAA+C1nB,EAAjCA,EAAOshsB,EAAQl/pB,UAAU54B,MACrDvK,EAAa0K,EAAK+d,WACbl0B,KAAK+sU,QAAUvgU,GAAQxM,KAAK+sU,OAAUvgU,EAAO,GADlBxM,KAAK+sU,OAAUvgU,EAAO,IAAOxM,KAAK+sU,QAAUvgU,EAE5EwjW,EAAc,aAIlBvkW,GAAY,EACZukW,EAAc,YAGlBvkW,IACAunE,GAAYpL,QAASn8D,EAAW/G,MAAOsrW,IAEpCh9R,GAOXq6nB,EAAYhysB,UAAU++Y,gBAAkB,SAAU99Y,GAC9C,OAAsB,IAAlBA,EAAM6pH,SAAuC,UAAtB7pH,EAAM+jV,cAC7B/jV,EAAMkpB,iBACNlpB,EAAM8gI,mBACC,IASfiwkB,EAAYhysB,UAAU4kV,WAAa,SAAUp/U,GAE9Bb,KAAKu6Y,aAAa15Y,EAAG,YLpcX,mBK8crB,OATKpD,EAAkBuC,KAAK4tsB,gBACX5tsB,KAAKgB,QACP0D,MAAM+0D,OAAS,GAC1Bz5D,KAAK4tsB,aAAe,KACpB5tsB,KAAK46Y,aAAc,GAEnB56Y,KAAK6xB,QAAQ4N,QAAUz/B,KAAKw7U,eAC5Bx7U,KAAKw7U,cAAcu5D,UAAU9yY,SAE1B,GAOXorsB,EAAYhysB,UAAUwysB,iBAAmB,SAAUhtsB,GAC/C,IAAI8f,EAOJ,OANI3gB,KAAK46Y,cACLj6X,EAAU4lB,GAAWvmC,KAAK4tsB,aAAc5tsB,OAC5B4nE,QAAQC,YAAclnD,EAAQinD,QAAQuI,mBAC9CnwE,KAAK2gB,EAAQinD,QAAQlhE,KAAKkP,cAAgB,QAAQ+K,EAAQxK,KAAMwK,EAAQinD,UAGzE,GAOXyloB,EAAYhysB,UAAUykV,SAAW,SAAUj/U,GACvC,IAAId,EAAQC,KAGR4xB,EAA4B,UAAlB/wB,EAAEw/U,aAA6C,MAAlBx/U,EAAEw/U,aAAkC,aAAXx/U,EAAE6F,KAClEzG,EAAOD,KAAKu6Y,aAAa15Y,EAAG,WLred,gBKqflB,OAfAb,KAAKwmB,QLtea,eKseSvmB,GACtBxC,EAAkBuC,KAAK4tsB,gBACX5tsB,KAAKgB,QACP0D,MAAM+0D,OAAS,GAC1Bz5D,KAAK4tsB,aAAe,KACpB5tsB,KAAK46Y,aAAc,IAElB36Y,EAAK44B,QAAUjH,GAAW5xB,KAAK6xB,QAAQ4N,QAAUz/B,KAAKw7U,eACnDv7U,EAAKkH,OAAO7D,GAAG/E,QAAQ,YAAc,IACrCyB,KAAKw7U,cAAcx5M,cAAc/hI,EAAKkH,QACpBhH,WAAW,WACzBJ,EAAMy7U,cAAcu5D,UAAU9yY,SAC/B,OAGJ,GAOXorsB,EAAYhysB,UAAUk/Y,aAAe,SAAU15Y,EAAG6F,EAAM+wB,GACpD,IAAIpE,EAAOrzB,KAAKgB,QAAQ4K,wBACpB8hB,EAAW,IAAI8X,IAAenS,EAAK7mB,MAAO6mB,EAAK3mB,KAC/CklB,EAAW/wB,EAAE6F,OAASA,EAG1B,OAFAgnB,EAAS3gB,GAAK6kB,EAAU/wB,EAAE89D,eAAe,GAAGvqB,QAAUvzC,EAAEuzC,QACxD1mB,EAAS1gB,GAAK4kB,EAAU/wB,EAAE89D,eAAe,GAAGtqB,QAAUxzC,EAAEwzC,SAEpDxb,QAAQ,EAAOpB,KAAMA,EACrB7U,MAAO5iB,KACP+M,EAAG2gB,EAAS3gB,EAAGC,EAAG0gB,EAAS1gB,EAC3B7F,OAAkBtG,EAAEsG,SAQ5BkmsB,EAAYhysB,UAAU0ysB,WAAa,SAAU53rB,EAAMyxD,GAC/C,IAAI50D,EACAhW,EAAQ+pE,GAAoB/mE,KAAKgB,QAAShB,KAAK4tsB,aAAc5tsB,KAAKo5B,YAAajjB,EAAM,OAAQ,IAAIqvB,GAAcxlC,KAAK+sU,OAAQ/sU,KAAKgtU,SACvH76S,GAAYn1B,EAAO,KAAM,KAAMmZ,EAAKwc,aAAarmB,IAAK6J,EAAKwc,aAAa5S,IAAK,WACvFoS,GAAYn1B,EAAO,KAAM,KAAMmZ,EAAKwc,aAAarmB,IAAK6J,EAAKwc,aAAa5S,IAAK,aAC7E/f,KAAKgusB,iBAAiBhusB,KAAK4tsB,cAC3B56rB,EAAU,IAAIojB,GAAW,YAAawxC,EAAQpxC,MAAOoxC,EAAQtjC,OAAOtuB,MAAO4xD,EAAQtjC,OAAO9N,MAAOoxC,EAAQn6D,QAAS,KAAM,KAAM,IACrG,aAArBzN,KAAKo5B,YACLwuC,EAAQlxC,OAAO1pB,EAAIhN,KAAKgtU,OAGxBplQ,EAAQlxC,OAAO3pB,EAAI/M,KAAK+sU,OAE5BnlQ,EAAQiiE,aAAe7sI,EACvBgW,EAAU4b,GAAgBg5C,EAAQlxC,OAAQkxC,EAAQijoB,WAAY,IAAIz9qB,GAAKw6C,EAAQ5xD,MAAO4xD,EAAQ7xD,QAAS6xD,EAAQkvH,SAAU9jL,EAAShT,KAAKo5B,YAAajjB,EAAMyxD,GAC/H,UAAvBA,EAAQijoB,YACR7qsB,KAAK4tsB,aAAapqsB,aAAa,KAAMokE,EAAQlxC,OAAO3pB,EAAK66D,EAAQlxC,OAAO1gB,MAAQ,GAAI9I,YACpFlN,KAAK4tsB,aAAapqsB,aAAa,KAAMokE,EAAQlxC,OAAO1pB,EAAK46D,EAAQlxC,OAAO3gB,OAAS,GAAI7I,aAGrFlN,KAAK4tsB,aAAapqsB,aAAa,IAAKwP,EAAQub,KASxD8+qB,EAAYhysB,UAAU4ysB,QAAU,SAAU93rB,EAAMyxD,GAC5C,IAEI+yS,EACAqwV,EACAx3lB,EAGAz2F,EAPA+wC,EAAO33C,EAAK+wD,WACZn1C,EAAQ5b,EAAKwc,aAIbxF,EAAmC,aAArBntB,KAAKo5B,YAA8B00B,EAAK/3C,OAAS+3C,EAAK93C,MACpEm1rB,EAA8B,aAArBnrsB,KAAKo5B,YAA8B00B,EAAK9gD,EAAI8gD,EAAK/gD,EAE9D4tW,EAAW1mV,GAAmBlC,EAAMhS,IAAK5J,EAAMnW,KAAKo5B,YAAarH,GAAS5E,EAAcg+qB,EACxFH,EAAW/2qB,GAAmBlC,EAAMzlB,IAAK6J,EAAMnW,KAAKo5B,YAAarH,GAAS5E,EAAcg+qB,EAC/D,aAArBnrsB,KAAKo5B,aACLo6E,EAAWr9F,EAAK+d,WAAgEl0B,KAAKgtU,OAAS2tC,GAAU36W,KAAKgtU,OAASg+X,EAAvFhrsB,KAAKgtU,OAASg+X,GAAUhrsB,KAAKgtU,OAAS2tC,KAErC,WAAxB36W,KAAKya,UAAU/T,MACVyP,EAAK+d,YACNl0B,KAAK4tsB,aAAapqsB,aAAa,IAAKxD,KAAKgtU,OAAO9/T,YAEpDlN,KAAK4tsB,aAAapqsB,aAAa,SAAU6I,KAAKE,IAAIouW,EAAS36W,KAAKgtU,QAAQ9/T,cAGnEiJ,EAAK+d,aACN0zC,EAAQlxC,OAAO1pB,EAAIhN,KAAKgtU,QAE5BplQ,EAAQlxC,OAAO3gB,OAAS1J,KAAKE,IAAIouW,EAAS36W,KAAKgtU,WAKvDx5N,EAAWr9F,EAAK+d,WAAgEl0B,KAAK+sU,OAASi+X,GAAUhrsB,KAAK+sU,OAAS4tC,EAAvF36W,KAAK+sU,OAAS4tC,GAAU36W,KAAK+sU,OAASi+X,KAErC,WAAxBhrsB,KAAKya,UAAU/T,MACXyP,EAAK+d,YACLl0B,KAAK4tsB,aAAapqsB,aAAa,IAAKxD,KAAK+sU,OAAO7/T,YAEpDlN,KAAK4tsB,aAAapqsB,aAAa,QAAS6I,KAAKE,IAAIouW,EAAS36W,KAAK+sU,QAAQ7/T,cAGnEiJ,EAAK+d,aACL0zC,EAAQlxC,OAAO3pB,EAAI/M,KAAK+sU,QAE5BnlQ,EAAQlxC,OAAO1gB,MAAQ3J,KAAKE,IAAIouW,EAAS36W,KAAK+sU,UAItDv5N,GAAwC,SAA9BxzG,KAAK4tsB,aAAa5qsB,UAC5BhD,KAAKgusB,iBAAiBhusB,KAAK4tsB,cAC3B7wrB,EAAOyrD,GAAOZ,EAAQlxC,OAAQ12B,KAAKya,UAAU/T,KAAM1G,KAAKo5B,YAAa,IAAIhM,GAAKw6C,EAAQlxC,OAAO1gB,MAAO4xD,EAAQlxC,OAAO3gB,QAAS,MAAO/V,KAAKya,UAAUzE,MAAOG,EAAMyxD,EAAQ0joB,qBACvKtrsB,KAAK4tsB,aAAapqsB,aAAa,IAAKuZ,KAO5CswrB,EAAYhysB,UAAU2ysB,iBAAmB,SAAUrolB,GAC/C,IAAIk/F,EAASt+K,GAAWvmC,KAAK4tsB,aAAc5tsB,MACvChD,EAAQ+pE,GAAoB/mE,KAAKgB,QAAShB,KAAK4tsB,aAAc5tsB,KAAKo5B,YAAayrL,EAAO1uM,KAAM,UAAW,MACvGqkY,GACA/iX,KAAM,cACNgN,MAAOzkC,KACPgB,QAAShB,KAAK4tsB,aACdlnqB,UAAWm+K,EAAOn+K,UAClBvwB,KAAM0uM,EAAO1uM,KACbwwB,aAAck+K,EAAOl+K,aACrBihC,QAASi9I,EAAOj9I,QAChB5qE,MAAOA,GAEXgD,KAAKwmB,QL7mBY,cK6mBSg0X,IAQ9B6yT,EAAYhysB,UAAUy8Y,gBAAkB,SAAUpxW,EAAWC,EAAc3pC,GACvE,IAAImZ,EAAOnW,KAAKynE,KAAK/gC,GACjBkhC,EAAUzxD,EAAKwxD,SAAShhC,GAExBqgC,EAAiBz5C,GADZvtB,KAAKgB,QAAQsC,GAAK,cAAgBojC,EAAY,IAAMkhC,EAAQlhE,KAAO,WAAaigC,GAEzFihC,EAAQiiE,aAAe7sI,EACC,OAAnBgqE,GAA4B70C,GAAYy1C,EAAQiiE,aAAc,KAAM,KAAM1zH,EAAKwc,aAAarmB,IAAK6J,EAAKwc,aAAa5S,IAAK,aACzH/f,KAAK66Y,qBAAqB,YAAcjzU,EAAQlhE,KAAO,UAAUggC,EAAWvwB,EAAMwwB,EAAcihC,GAChG5nE,KAAK+4Y,aAAa,OAASnxU,EAAQlhE,KAAO,WAAWyP,EAAMuwB,EAAWkhC,EAASjhC,EAAcqgC,EAAe3yD,iBAQpHg5rB,EAAYhysB,UAAUinV,mBAAqB,SAAUC,EAAiBnoT,GAClE,IAAI8zqB,EAAkF,OAAnE3grB,GAAWvtB,KAAKgB,QAAQsC,GAAK,eAAiBi/U,GAC7DvhV,EAAUusB,GAAWvtB,KAAKgB,QAAQsC,GAAK,sBACvCnC,EAAc,OACVmC,GAAItD,KAAKgB,QAAQsC,GAAK,sBAE1BqrD,EAAa3uD,KAAK42D,YAAY2rR,GAClB,OAAZnoT,IACI7M,GAAWvtB,KAAKgB,QAAQsC,GAAK,eAAiBi/U,IAC9Ch1T,GAAWvtB,KAAKgB,QAAQsC,GAAK,eAAiBi/U,GAAiBh+U,SAEnEoqD,EAAWv0B,QAAUA,EACrBp6B,KAAK65Y,kBAAkB8yT,yBAAyB3rsB,EAASuhV,GACpD2rX,GACDltsB,EAAQW,YAAY4rB,GAAWvtB,KAAKgB,QAAQsC,GAAK,eAAiBi/U,MAS9E8qX,EAAYhysB,UAAUw1F,gBAAkB,WACpC,IAAIgB,KACAmpT,GAAmB,EAiBvB,OAhBAh7Y,KACK42D,YAAYh/B,IAAI,SAAU+2B,EAAY18C,GACvC+oY,EAAyC,MAAtBrsV,EAAWv0B,UAE9B4gX,GACAnpT,EAAQrtF,MACJ6sF,OAAQ,cACRpxF,MAAOD,KAAMy0Y,MAGjBz0Y,KAAK6xB,QAAQ4N,QACboyD,EAAQrtF,MACJ6sF,OAAQ,UACRpxF,MAAOD,KAAM60Y,MAGdhjT,GAMXw7mB,EAAYhysB,UAAUmxG,eAAiB,WAEnC,OAAOxsG,KAAKgtG,cADK,YAMrBqgmB,EAAYhysB,UAAUkkC,cAAgB,WAClC,MAAO,eAMX8tqB,EAAYhysB,UAAUmsF,kBAAoB,SAAUiF,EAASC,GAGzD,IAAK,IAFD7+D,GAAW,EACXg3T,GAAgB,EACXzmV,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKmvF,GAAUruF,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAE9D,OADWyE,EAAGzE,IAEV,IAAK,SACL,IAAK,QACL,IAAK,SACD4B,KAAKggC,YACL6kT,GAAgB,EAChB,MACJ,IAAK,QACDA,EAAmC,KAAlBp4P,EAAQvsD,OAAkC,KAAlBwsD,EAAQxsD,MACjDrS,IAA+B,KAAlB4+D,EAAQvsD,OAAkC,KAAlBwsD,EAAQxsD,OAC7C,MACJ,IAAK,aACGusD,EAAQ/rD,YAAc+rD,EAAQ/rD,WAAW5T,KACzC+3T,GAAgB,EAGhBh3T,GAAW,EAEf,MACJ,IAAK,SAGL,IAAK,aACDA,GAAW,EACX,MACJ,IAAK,YACDg3T,GAAgB,IAIvBA,GAAiBh3T,IAClB7tB,KAAK0/U,YACL1/U,KAAKstsB,sBACLttsB,KAAKutsB,sBAEL1oX,IACA7kV,KAAKggC,YACLhgC,KAAKstsB,sBACLttsB,KAAKutR,kBACLvtR,KAAKutsB,uBAGb1inB,IACI3jF,EAAS,OACVmmsB,EAAYhysB,UAAW,aAAS,GACnCwvF,IACI3jF,EAAS,OACVmmsB,EAAYhysB,UAAW,cAAU,GACpCwvF,IACI3jF,EAAS,aACVmmsB,EAAYhysB,UAAW,mBAAe,GACzCwvF,IACI9iF,KAAY+0T,KACbuwY,EAAYhysB,UAAW,cAAU,GACpCwvF,IACI9iF,GAAUyuB,MAAO,GAAIxgB,MAAO,GAAK4mT,KAClCywY,EAAYhysB,UAAW,cAAU,GACpCwvF,IACI3jF,EAAS,gBACVmmsB,EAAYhysB,UAAW,kBAAc,GACxCwvF,IACI3jF,EAAS,KACVmmsB,EAAYhysB,UAAW,aAAS,GACnCwvF,IACI9iF,GAAU+kB,KAAM,OAAQ0J,MAAO,MAAQmmS,KACxC0wY,EAAYhysB,UAAW,kBAAc,GACxCwvF,IACI9iF,KAAYqvD,KACbi2oB,EAAYhysB,UAAW,iBAAa,GACvCwvF,IACIxiF,OAAiBi5T,KAClB+rY,EAAYhysB,UAAW,YAAQ,GAClCwvF,IACI9iF,KAAYo1T,KACbkwY,EAAYhysB,UAAW,eAAW,GACrCwvF,IACIxiF,OAAiBksY,KAClB84T,EAAYhysB,UAAW,mBAAe,GACzCwvF,IACI3jF,OACDmmsB,EAAYhysB,UAAW,qBAAiB,GAC3CwvF,IACI3jF,GAAS,IACVmmsB,EAAYhysB,UAAW,4BAAwB,GAClDwvF,IACI3jF,EAAS,OACVmmsB,EAAYhysB,UAAW,mBAAe,GACzCwvF,IACI3jF,EAAS,IACVmmsB,EAAYhysB,UAAW,gBAAY,GACtCwvF,IACI3jF,EAAS,aACVmmsB,EAAYhysB,UAAW,aAAS,GACnCwvF,IACI/hF,KACDuksB,EAAYhysB,UAAW,cAAU,GACpCwvF,IACI/hF,KACDuksB,EAAYhysB,UAAW,YAAQ,GAClCwvF,IACI/hF,KACDuksB,EAAYhysB,UAAW,yBAAqB,GAC/CwvF,IACI/hF,KACDuksB,EAAYhysB,UAAW,uBAAmB,GAC7CwvF,IACI/hF,KACDuksB,EAAYhysB,UAAW,wBAAoB,GAC9CwvF,IACI/hF,KACDuksB,EAAYhysB,UAAW,qBAAiB,GAC3CwvF,IACI/hF,KACDuksB,EAAYhysB,UAAW,sBAAkB,GAC5CwvF,IACI/hF,KACDuksB,EAAYhysB,UAAW,uBAAmB,GAC7CwvF,IACI/hF,KACDuksB,EAAYhysB,UAAW,sBAAkB,GAC5CwvF,IACI/hF,KACDuksB,EAAYhysB,UAAW,oBAAgB,GAC1CwvF,IACI/hF,KACDuksB,EAAYhysB,UAAW,mBAAe,GACzCwvF,IACI/hF,KACDuksB,EAAYhysB,UAAW,eAAW,GACrCgysB,EAAcxinB,IACVzhF,GACDiksB,IAEL9hmB,ICp2BF4imB,GAAkB/hmB,OAAQ+uS,GAAmBC,qtBCA7CgzT,GAAehimB,OAAQiimB,QCEZl5a,0JzjBHP7qM,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAoBxCv9D,GAAsB,WAKtB,OAJA,SAAcpX,EAAOD,GACjB/V,KAAKgW,MAAQA,EACbhW,KAAK+V,OAASA,MA+LlBmkC,GAAuB,WAKvB,OAJA,SAAentC,EAAGC,GACdhN,KAAK+M,EAAIA,EACT/M,KAAKgN,EAAIA,MASbshsB,GAAwB,WAKxB,OAJA,SAAgBvurB,EAAKzT,GACjBtM,KAAK+f,IAAMA,EACX/f,KAAKsM,IAAMA,MAQfiisB,GAA6B,WAK7B,OAJA,SAAqB/koB,EAAUC,GAC3BzpE,KAAKwpE,SAAW,IAAI8koB,GAAO9koB,EAASzpD,IAAKypD,EAASl9D,KAClDtM,KAAKypE,UAAY,IAAI6koB,GAAO7koB,EAAU1pD,IAAK0pD,EAAUn9D,SAqCzDiqB,GAA4B,WAa5B,OAZA,SAAoBjzB,EAAIyJ,EAAGC,EAAG6G,EAAQ4Y,EAAMpf,EAAW8xB,QACjC,IAAd9xB,IAAwBA,EAAY,IACxCrN,KAAKqN,UAAY,GACjBrN,KAAKm/B,SAAW,OAChBn/B,KAAKsD,GAAKA,EACVtD,KAAK+M,EAAIA,EACT/M,KAAKgN,EAAIA,EACThN,KAAK6T,OAASA,EACd7T,KAAKysB,KAAOA,EACZzsB,KAAKqN,UAAYA,EACjBrN,KAAKm/B,SAAWA,MASpB/I,GAA4B,WAU5B,OATA,SAAoB9yB,EAAIs6B,EAAM5nB,EAAOwgB,EAAO/oB,EAASqkC,EAAWvjB,GAC5DvuB,KAAKsD,GAAKA,EACVtD,KAAKyN,QAAUA,EACfzN,KAAK49B,KAAOA,EACZ59B,KAAK89B,OAAStH,EACdx2B,KAAK,gBAAkBgW,EACvBhW,KAAK,oBAAsB8xC,EAC3B9xC,KAAKuuB,EAAIA,MASb21S,GAA4B,SAAU/4O,GAEtC,SAAS+4O,EAAW5gU,EAAIs6B,EAAM0G,EAAQ72B,EAAS4lB,EAAMlF,EAAIC,EAAI/gB,EAAWykC,GACpE,IAAI/xC,EAAQorF,EAAO7pF,KAAKtB,KAAMsD,EAAIs6B,EAAM0G,EAAOtuB,MAAOsuB,EAAO9N,MAAO/oB,EAASqkC,IAAc9xC,KAS3F,OARAD,EAAMiN,EAAIqmB,EAAKrmB,EACfjN,EAAMgN,EAAIsmB,EAAKtmB,EACfhN,EAAMgW,OAASsd,EAAKtd,OACpBhW,EAAMiW,MAAQqd,EAAKrd,MACnBjW,EAAMouB,GAAKA,GAAU,EACrBpuB,EAAMquB,GAAKA,GAAU,EACrBruB,EAAMsN,UAAYA,GAAwB,GAC1CtN,EAAM,oBAAsB+xC,EACrB/xC,EAEX,OAbAuqF,GAAU45O,EAAY/4O,GAaf+4O,GACT9tS,IAME+tS,GAA8B,SAAUh5O,GAExC,SAASg5O,EAAa7gU,EAAIs6B,EAAM0G,EAAQ72B,EAAS4gB,EAAIC,EAAIsO,EAAGkV,GACxD,IAAI/xC,EAAQorF,EAAO7pF,KAAKtB,KAAMsD,EAAIs6B,EAAM0G,EAAOtuB,MAAOsuB,EAAO9N,MAAO/oB,IAAYzN,KAKhF,OAJAD,EAAMuuB,GAAKA,EACXvuB,EAAMsuB,GAAKA,EACXtuB,EAAM68B,EAAIA,EACV78B,EAAM,oBAAsB+xC,EACrB/xC,EAEX,OATAuqF,GAAU65O,EAAch5O,GASjBg5O,GACT/tS,IAMEguS,GAA+B,SAAUj5O,GAEzC,SAASi5O,EAAc9gU,EAAIq0B,EAAQiG,EAAM5nB,EAAOwgB,EAAO/oB,EAASqkC,QAC5C,IAAZrkC,IAAsBA,EAAU,QAClB,IAAdqkC,IAAwBA,EAAY,IACxC,IAAI/xC,EAAQorF,EAAO7pF,KAAKtB,KAAMsD,EAAIs6B,EAAM5nB,EAAOwgB,EAAO/oB,EAASqkC,IAAc9xC,KAE7E,OADAD,EAAM43B,OAASA,EACR53B,EAEX,OARAuqF,GAAU85O,EAAej5O,GAQlBi5O,GACThuS,IAMEo4qB,GAAgC,SAAUrjnB,GAE1C,SAASqjnB,EAAelrsB,EAAIq0B,EAAQiG,EAAM5nB,EAAOwgB,EAAO/oB,EAASqkC,GAG7D,YAFgB,IAAZrkC,IAAsBA,EAAU,QAClB,IAAdqkC,IAAwBA,EAAY,IACjCq5C,EAAO7pF,KAAKtB,KAAMsD,EAAIq0B,EAAQiG,EAAM5nB,EAAOwgB,EAAO/oB,EAASqkC,IAAc9xC,KAEpF,OANAsqF,GAAUkknB,EAAgBrjnB,GAMnBqjnB,GACTpqY,IAMEy2X,GAA4B,SAAU1vmB,GAEtC,SAAS0vmB,EAAWv3rB,EAAIwqD,EAAMlwB,EAAM5nB,EAAOwgB,EAAO/oB,EAASqkC,QACvC,IAAZrkC,IAAsBA,EAAU,QAClB,IAAdqkC,IAAwBA,EAAY,IACxC,IAAI/xC,EAAQorF,EAAO7pF,KAAKtB,KAAMsD,EAAIs6B,EAAM5nB,EAAOwgB,EAAO/oB,EAASqkC,IAAc9xC,KAK7E,OAJAD,EAAMi7B,GAAK8yB,EAAK9yB,GAChBj7B,EAAMk7B,GAAK6yB,EAAK7yB,GAChBl7B,EAAMm7B,GAAK4yB,EAAK5yB,GAChBn7B,EAAMo7B,GAAK2yB,EAAK3yB,GACTp7B,EAEX,OAXAuqF,GAAUuwmB,EAAY1vmB,GAWf0vmB,GACTzkqB,IAME89W,GAAsB,WAOtB,OANA,SAAcl5W,EAAIC,EAAIC,EAAIC,GACtBn7B,KAAKg7B,GAAKA,EACVh7B,KAAKi7B,GAAKA,EACVj7B,KAAKk7B,GAAKA,EACVl7B,KAAKm7B,GAAKA,MASdi3C,GAA6B,WAK7B,OAJA,SAAqBrlE,EAAGC,GACpBhN,KAAK+M,EAAIA,EACT/M,KAAKgN,EAAIA,MASbkpB,GAAsB,WAOtB,OANA,SAAcnpB,EAAGC,EAAGgJ,EAAOD,GACvB/V,KAAK+M,EAAIA,EACT/M,KAAKgN,EAAIA,EACThN,KAAKgW,MAAQA,EACbhW,KAAK+V,OAASA,MASlB04rB,GAAgC,WAgBhC,OAfA,SAAwBnrsB,EAAIyJ,EAAGC,EAAGgJ,EAAOD,EAAQy+Y,EAAck6S,EAAqBC,EAAkBjgrB,QAC7E,IAAjB8lY,IAA2BA,EAAe,uBAClB,IAAxBk6S,IAAkCA,EAAsB,uBACnC,IAArBC,IAA+BA,EAAmB,SACzC,IAATjgrB,IAAmBA,EAAO,IAC9B1uB,KAAKsD,GAAKA,EACVtD,KAAK+M,EAAIA,EACT/M,KAAKgN,EAAIA,EACThN,KAAKgW,MAAQA,EACbhW,KAAK+V,OAASA,EACd/V,KAAKw0Z,aAAeA,EACpBx0Z,KAAK0usB,oBAAsBA,EAC3B1usB,KAAK2usB,iBAAmBA,EACxB3usB,KAAK0uB,KAAOA,MA4hChBkgrB,GAAyB,WAQzB,OAPA,SAAiB57rB,EAAStM,EAAM87E,EAAOC,EAAaosnB,GAChD7usB,KAAK8usB,YAAc97rB,EACnBhT,KAAK0G,KAAOA,GAAQ,MACpB1G,KAAKwiF,MAAQA,IAAS,EACtBxiF,KAAKyiF,YAAcA,EACnBziF,KAAK6usB,SAAWA,OyjBr+CxB,SAAW15a,GAEPA,EAAM45a,eACFjirB,KAAM,OACNC,WAAY,SACZyJ,MAAO,UACPxJ,UAAW,SACXC,WAAY,4BAGhBkoQ,EAAM65a,kBACFlirB,KAAM,OACNC,WAAY,SACZyJ,MAAO,UACPxJ,UAAW,SACXC,WAAY,4BAGhBkoQ,EAAMonC,kBACFzvS,KAAM,OACNC,WAAY,UACZyJ,MAAO,UACPxJ,UAAW,UACXC,WAAY,UAGhBkoQ,EAAM85a,iBACFnirB,KAAM,OACNC,WAAY,UACZyJ,MAAO,UACPxJ,UAAW,UACXC,WAAY,4BAGhBkoQ,EAAMqnC,iBACF1vS,KAAM,OACNC,WAAY,SACZyJ,MAAO,UACPxJ,UAAW,SACXC,WAAY,4BAGhBkoQ,EAAM8gG,eACFnpW,KAAM,OACNC,WAAY,SACZyJ,MAAO,UACPxJ,UAAW,SACXC,WAAY,4BA/CpB,CAiDGkoQ,KAAUA,QACb,IAAW+5a,IACX,SAAWA,GAEPA,EAAYH,eACRjirB,KAAM,OACNC,WAAY,WACZyJ,MAAO,UACPxJ,UAAW,WACXC,WAAY,yDAGhBiirB,EAAYF,kBACRlirB,KAAM,OACNC,WAAY,UACZyJ,MAAO,UACPxJ,UAAW,UACXC,WAAY,yDAGhBiirB,EAAY3yY,kBACRzvS,KAAM,OACNC,WAAY,UACZyJ,MAAO,UACPxJ,UAAW,UACXC,WAAY,UAGhBiirB,EAAYD,iBACRnirB,KAAM,OACNC,WAAY,UACZyJ,MAAO,UACPxJ,UAAW,UACXC,WAAY,yDAGhBiirB,EAAY1yY,iBACR1vS,KAAM,OACNC,WAAY,SACZyJ,MAAO,UACPxJ,UAAW,SACXC,WAAY,yDAGhBiirB,EAAYj5U,eACRnpW,KAAM,OACNC,WAAY,SACZyJ,MAAO,UACPxJ,UAAW,SACXC,WAAY,yDA/CpB,CAiDGiirB,KAAgBA,QACnB,IAAWC,IACX,SAAWA,GAEPA,EAAeJ,eACXjirB,KAAM,OACNC,WAAY,WACZyJ,MAAO,UACPxJ,UAAW,WACXC,WAAY,gDAGhBkirB,EAAeH,kBACXlirB,KAAM,OACNC,WAAY,UACZyJ,MAAO,UACPxJ,UAAW,UACXC,WAAY,gDAGhBkirB,EAAe5yY,kBACXzvS,KAAM,OACNC,WAAY,UACZyJ,MAAO,UACPxJ,UAAW,UACXC,WAAY,UAGhBkirB,EAAeF,iBACXnirB,KAAM,OACNC,WAAY,UACZyJ,MAAO,UACPxJ,UAAW,UACXC,WAAY,gDAGhBkirB,EAAe3yY,iBACX1vS,KAAM,OACNC,WAAY,SACZyJ,MAAO,UACPxJ,UAAW,SACXC,WAAY,gDAGhBkirB,EAAel5U,eACXnpW,KAAM,OACNC,WAAY,SACZyJ,MAAO,UACPxJ,UAAW,SACXC,WAAY,gDA/CpB,CAiDGkirB,KAAmBA,QAatB,IAAWC,IACX,SAAWA,GAEPA,EAAkBL,eACdjirB,KAAM,OACNC,WAAY,SACZyJ,MAAO,UACPxJ,UAAW,SACXC,WAAY,4BAGhBmirB,EAAkBJ,kBACdlirB,KAAM,OACNC,WAAY,SACZyJ,MAAO,UACPxJ,UAAW,SACXC,WAAY,4BAGhBmirB,EAAkB7yY,kBACdzvS,KAAM,OACNC,WAAY,UACZyJ,MAAO,UACPxJ,UAAW,UACXC,WAAY,UAGhBmirB,EAAkBH,iBACdnirB,KAAM,OACNC,WAAY,UACZyJ,MAAO,UACPxJ,UAAW,UACXC,WAAY,4BAGhBmirB,EAAkB5yY,iBACd1vS,KAAM,OACNC,WAAY,SACZyJ,MAAO,UACPxJ,UAAW,SACXC,WAAY,4BAGhBmirB,EAAkBn5U,eACdnpW,KAAM,OACNC,WAAY,SACZyJ,MAAO,UACPxJ,UAAW,SACXC,WAAY,4BA/CpB,CAiDGmirB,KAAsBA,QC1NzB,IAAI9knB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAW5D23W,GAA4B,SAAUppT,GAEtC,SAASopT,IACL,OAAkB,OAAXppT,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAoB/D,OAtBAsqF,GAAUiqT,EAAYppT,GAItBN,IACI3jF,EAAS,KACVqtY,EAAWl5Y,UAAW,eAAW,GACpCwvF,IACI3jF,EAAS,QACVqtY,EAAWl5Y,UAAW,SAAK,GAC9BwvF,IACI3jF,EAAS,QACVqtY,EAAWl5Y,UAAW,SAAK,GAC9BwvF,IACI3jF,EAAS,SACVqtY,EAAWl5Y,UAAW,yBAAqB,GAC9CwvF,IACI3jF,EAAS,SACVqtY,EAAWl5Y,UAAW,2BAAuB,GAChDwvF,IACI3jF,EAAS,OACVqtY,EAAWl5Y,UAAW,cAAU,GAC5Bk5Y,GACTv1U,IAEE8mV,GAAuB,SAAU36T,GAEjC,SAAS26T,IACL,OAAkB,OAAX36T,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAiB/D,OAnBAsqF,GAAUw7T,EAAO36T,GAIjBN,IACI3jF,EAAS,UACV4+Y,EAAMzqZ,UAAW,gBAAY,GAChCwvF,IACI3jF,EAAS,UACV4+Y,EAAMzqZ,UAAW,iBAAa,GACjCwvF,IACI3jF,EAAS,IACV4+Y,EAAMzqZ,UAAW,YAAQ,GAC5BwvF,IACI3jF,EAAS,UACV4+Y,EAAMzqZ,UAAW,aAAS,GAC7BwvF,IACI3jF,EAAS,IACV4+Y,EAAMzqZ,UAAW,cAAU,GACvByqZ,GACT9mV,IAKE29P,GAAsB,SAAUxxO,GAEhC,SAASwxO,IACL,OAAkB,OAAXxxO,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAoB/D,OAtBAsqF,GAAUqyO,EAAMxxO,GAIhBN,IACI3jF,EAAS,OACVy1T,EAAKthU,UAAW,YAAQ,GAC3BwvF,IACI3jF,EAAS,OACVy1T,EAAKthU,UAAW,aAAS,GAC5BwvF,IACI3jF,EAAS,OACVy1T,EAAKthU,UAAW,kBAAc,GACjCwvF,IACI3jF,EAAS,OACVy1T,EAAKthU,UAAW,kBAAc,GACjCwvF,IACI3jF,EAAS,OACVy1T,EAAKthU,UAAW,iBAAa,GAChCwvF,IACI3jF,EAAS,IACVy1T,EAAKthU,UAAW,eAAW,GACvBshU,GACT39P,IAKE49P,GAAwB,SAAUzxO,GAElC,SAASyxO,IACL,OAAkB,OAAXzxO,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVAsqF,GAAUsyO,EAAQzxO,GAIlBN,IACI3jF,EAAS,KACV01T,EAAOvhU,UAAW,aAAS,GAC9BwvF,IACI3jF,EAAS,IACV01T,EAAOvhU,UAAW,aAAS,GACvBuhU,GACT59P,IAKEm+P,GAAiC,SAAUhyO,GAE3C,SAASgyO,IACL,OAAkB,OAAXhyO,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAuB/D,OAzBAsqF,GAAU6yO,EAAiBhyO,GAI3BN,IACI3jF,GAAS,IACVi2T,EAAgB9hU,UAAW,eAAW,GACzCwvF,IACI3jF,EAAS,KACVi2T,EAAgB9hU,UAAW,gBAAY,GAC1CwvF,IACI3jF,EAAS,YACVi2T,EAAgB9hU,UAAW,YAAQ,GACtCwvF,IACI9iF,GAAUyuB,MAAO,cAAexgB,MAAO,GAAK4mT,KAC7CO,EAAgB9hU,UAAW,cAAU,GACxCwvF,IACI9iF,EAAQotR,GAAMonC,iBAAkBI,KACjCQ,EAAgB9hU,UAAW,iBAAa,GAC3CwvF,IACI3jF,EAAS,OACVi2T,EAAgB9hU,UAAW,cAAU,GACxCwvF,IACI3jF,EAAS,OACVi2T,EAAgB9hU,UAAW,iBAAa,GACpC8hU,GACTn+P,IAKE89P,GAAwB,SAAU3xO,GAElC,SAAS2xO,IACL,OAAkB,OAAX3xO,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAc/D,OAhBAsqF,GAAUwyO,EAAQ3xO,GAIlBN,IACI3jF,EAAS,KACV41T,EAAOzhU,UAAW,YAAQ,GAC7BwvF,IACI3jF,EAAS,KACV41T,EAAOzhU,UAAW,aAAS,GAC9BwvF,IACI3jF,EAAS,KACV41T,EAAOzhU,UAAW,WAAO,GAC5BwvF,IACI3jF,EAAS,KACV41T,EAAOzhU,UAAW,cAAU,GACxByhU,GACT99P,IAKEqwoB,GAAsC,SAAUlknB,GAEhD,SAASkknB,IACL,OAAkB,OAAXlknB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAiB/D,OAnBAsqF,GAAU+knB,EAAsBlknB,GAIhCN,IACI3jF,EAAS,OACVmosB,EAAqBh0sB,UAAW,YAAQ,GAC3CwvF,IACI3jF,EAAS,OACVmosB,EAAqBh0sB,UAAW,UAAM,GACzCwvF,IACI3jF,EAAS,OACVmosB,EAAqBh0sB,UAAW,aAAS,GAC5CwvF,IACI3jF,EAAS,OACVmosB,EAAqBh0sB,UAAW,aAAS,GAC5CwvF,IACI3jF,EAAS,OACVmosB,EAAqBh0sB,UAAW,aAAS,GACrCg0sB,GACTrwoB,IAKEiklB,GAAmC,SAAU93jB,GAE7C,SAAS83jB,IACL,OAAkB,OAAX93jB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAiB/D,OAnBAsqF,GAAU24jB,EAAmB93jB,GAI7BN,IACI3jF,GAAS,IACV+7oB,EAAkB5npB,UAAW,cAAU,GAC1CwvF,IACI3jF,EAAS,YACV+7oB,EAAkB5npB,UAAW,YAAQ,GACxCwvF,IACI3jF,EAAS,IACV+7oB,EAAkB5npB,UAAW,eAAW,GAC3CwvF,IACI3jF,GAAS,IACV+7oB,EAAkB5npB,UAAW,yBAAqB,GACrDwvF,IACI9iF,GAAUyuB,MAAO,cAAexgB,MAAO,GAAK4mT,KAC7CqmV,EAAkB5npB,UAAW,cAAU,GACnC4npB,GACTjklB,IAKEswoB,GAAmC,SAAUnknB,GAE7C,SAASmknB,IACL,OAAkB,OAAXnknB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAc/D,OAhBAsqF,GAAUglnB,EAAmBnknB,GAI7BN,IACI3jF,EAAS,YACVoosB,EAAkBj0sB,UAAW,YAAQ,GACxCwvF,IACI3jF,GAAS,IACVoosB,EAAkBj0sB,UAAW,cAAU,GAC1CwvF,IACI3jF,EAAS,IACVoosB,EAAkBj0sB,UAAW,eAAW,GAC3CwvF,IACI9iF,GAAUyuB,MAAO,cAAexgB,MAAO,GAAK4mT,KAC7C0yY,EAAkBj0sB,UAAW,cAAU,GACnCi0sB,GACTtwoB,IAKEuwoB,GAAwC,SAAUpknB,GAElD,SAASoknB,IACL,OAAkB,OAAXpknB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAgC/D,OAlCAsqF,GAAUilnB,EAAwBpknB,GAIlCN,IACI3jF,GAAS,IACVqosB,EAAuBl0sB,UAAW,eAAW,GAChDwvF,IACI3jF,EAAS,IACVqosB,EAAuBl0sB,UAAW,aAAS,GAC9CwvF,IACI3jF,EAAS,OACVqosB,EAAuBl0sB,UAAW,iBAAa,GAClDwvF,IACI3jF,EAAS,OACVqosB,EAAuBl0sB,UAAW,gBAAY,GACjDwvF,IACI3jF,EAAS,KACVqosB,EAAuBl0sB,UAAW,iBAAa,GAClDwvF,IACI3jF,EAAS,UACVqosB,EAAuBl0sB,UAAW,aAAS,GAC9CwvF,IACI3jF,EAAS,IACVqosB,EAAuBl0sB,UAAW,aAAS,GAC9CwvF,IACI9iF,GAAUynsB,WAAW,EAAOt7rB,SAAU,QAAS4Y,KAAM,EAAG0J,MAAO,SAAWsvX,KAC3EypT,EAAuBl0sB,UAAW,qBAAiB,GACtDwvF,IACI9iF,KAAYk7oB,KACbssD,EAAuBl0sB,UAAW,yBAAqB,GAC1DwvF,IACI9iF,KAAYunsB,KACbC,EAAuBl0sB,UAAW,yBAAqB,GACnDk0sB,GACTvwoB,IAKEywoB,GAAgC,SAAUtknB,GAE1C,SAASsknB,IACL,OAAkB,OAAXtknB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAkD/D,OApDAsqF,GAAUmlnB,EAAgBtknB,GAI1BN,IACI9iF,KAAY60T,KACb6yY,EAAep0sB,UAAW,cAAU,GACvCwvF,IACI3jF,GAAS,IACVuosB,EAAep0sB,UAAW,eAAW,GACxCwvF,IACI3jF,OACDuosB,EAAep0sB,UAAW,kBAAc,GAC3CwvF,IACI3jF,EAAS,MACVuosB,EAAep0sB,UAAW,yBAAqB,GAClDwvF,IACI3jF,EAAS,IACVuosB,EAAep0sB,UAAW,sBAAkB,GAC/CwvF,IACI3jF,EAAS,KACVuosB,EAAep0sB,UAAW,YAAQ,GACrCwvF,IACI3jF,EAAS,KACVuosB,EAAep0sB,UAAW,iBAAa,GAC1CwvF,IACI3jF,EAAS,KACVuosB,EAAep0sB,UAAW,iBAAa,GAC1CwvF,IACI3jF,EAAS,IACVuosB,EAAep0sB,UAAW,eAAW,GACxCwvF,IACI3jF,EAAS,OACVuosB,EAAep0sB,UAAW,iBAAa,GAC1CwvF,IACI3jF,EAAS,WACVuosB,EAAep0sB,UAAW,kBAAc,GAC3CwvF,IACI3jF,EAAS,OACVuosB,EAAep0sB,UAAW,sBAAkB,GAC/CwvF,IACIxiF,KAAegnsB,KAChBI,EAAep0sB,UAAW,oBAAgB,GAC7CwvF,IACI9iF,KAAYo1T,KACbsyY,EAAep0sB,UAAW,uBAAmB,GAChDwvF,IACI9iF,KAAYk7oB,KACbwsD,EAAep0sB,UAAW,yBAAqB,GAClDwvF,IACI9iF,KAAYunsB,KACbG,EAAep0sB,UAAW,yBAAqB,GAC3Co0sB,GACTzwoB,IAKE0woB,GAAqC,SAAUvknB,GAE/C,SAASuknB,IACL,OAAkB,OAAXvknB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVAsqF,GAAUolnB,EAAqBvknB,GAI/BN,IACI3jF,EAAS,KACVwosB,EAAoBr0sB,UAAW,YAAQ,GAC1CwvF,IACI3jF,EAAS,KACVwosB,EAAoBr0sB,UAAW,mBAAe,GAC1Cq0sB,GACT1woB,IAKE2woB,GAAkC,SAAUxknB,GAE5C,SAASwknB,IACL,OAAkB,OAAXxknB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVAsqF,GAAUqlnB,EAAkBxknB,GAI5BN,IACI9iF,KAAY40T,KACbgzY,EAAiBt0sB,UAAW,iBAAa,GAC5CwvF,IACI3jF,EAAS,WACVyosB,EAAiBt0sB,UAAW,iBAAa,GACrCs0sB,GACTD,IAKEE,GAA+B,SAAUzknB,GAEzC,SAASyknB,IACL,OAAkB,OAAXzknB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbAsqF,GAAUslnB,EAAezknB,GAIzBN,IACI9iF,KAAY40T,KACbizY,EAAcv0sB,UAAW,iBAAa,GACzCwvF,IACI3jF,EAAS,WACV0osB,EAAcv0sB,UAAW,iBAAa,GACzCwvF,IACI9iF,KAAY4nsB,KACbC,EAAcv0sB,UAAW,wBAAoB,GACzCu0sB,GACTF,IAKEt0X,GAA8B,SAAUjwP,GAExC,SAASiwP,IACL,OAAkB,OAAXjwP,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KA+C/D,OAjDAsqF,GAAU8wP,EAAcjwP,GAIxBN,IACI3jF,GAAS,IACVk0U,EAAa//U,UAAW,cAAU,GACrCwvF,IACI3jF,EAAS,eACVk0U,EAAa//U,UAAW,0BAAsB,GACjDwvF,IACI3jF,EAAS,OACVk0U,EAAa//U,UAAW,aAAS,GACpCwvF,IACI3jF,EAAS,YACVk0U,EAAa//U,UAAW,sBAAkB,GAC7CwvF,IACI3jF,EAAS,YACVk0U,EAAa//U,UAAW,sBAAkB,GAC7CwvF,IACI3jF,EAAS,QACVk0U,EAAa//U,UAAW,2BAAuB,GAClDwvF,IACI3jF,EAAS,SACVk0U,EAAa//U,UAAW,yBAAqB,GAChDwvF,IACI3jF,GAAU,SAAU,UAAW,WAChCk0U,EAAa//U,UAAW,gBAAY,GACvCwvF,IACI3jF,GAAS,IACVk0U,EAAa//U,UAAW,sBAAkB,GAC7CwvF,IACI3jF,GAAS,IACVk0U,EAAa//U,UAAW,uBAAmB,GAC9CwvF,IACI3jF,GAAS,IACVk0U,EAAa//U,UAAW,oBAAgB,GAC3CwvF,IACI3jF,GAAS,IACVk0U,EAAa//U,UAAW,mBAAe,GAC1CwvF,IACI3jF,EAAS,IACVk0U,EAAa//U,UAAW,kBAAc,GACzCwvF,IACI3jF,EAAS,KACVk0U,EAAa//U,UAAW,eAAW,GACtCwvF,IACI3jF,EAAS,IACVk0U,EAAa//U,UAAW,eAAW,GAC/B+/U,GACTp8Q,IAKE42Q,GAAgC,SAAUzqP,GAE1C,SAASyqP,IACL,OAAkB,OAAXzqP,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KA0E/D,OA5EAsqF,GAAUsrP,EAAgBzqP,GAI1BN,IACI3jF,GAAS,IACV0uU,EAAev6U,UAAW,wBAAoB,GACjDwvF,IACI3jF,GAAS,IACV0uU,EAAev6U,UAAW,eAAW,GACxCwvF,IACI3jF,EAAS,gBACV0uU,EAAev6U,UAAW,kBAAc,GAC3CwvF,IACI3jF,EAAS,WACV0uU,EAAev6U,UAAW,YAAQ,GACrCwvF,IACI3jF,GAAS,IACV0uU,EAAev6U,UAAW,uBAAmB,GAChDwvF,IACI3jF,EAAS,UACV0uU,EAAev6U,UAAW,qBAAiB,GAC9CwvF,IACI3jF,EAAS,SACV0uU,EAAev6U,UAAW,wBAAoB,GACjDwvF,IACI3jF,EAAS,WACV0uU,EAAev6U,UAAW,aAAS,GACtCwvF,IACI3jF,EAAS,KACV0uU,EAAev6U,UAAW,aAAS,GACtCwvF,IACI3jF,EAAS,KACV0uU,EAAev6U,UAAW,cAAU,GACvCwvF,IACI9iF,KAAY40T,KACbiZ,EAAev6U,UAAW,iBAAa,GAC1CwvF,IACI3jF,EAAS,KACV0uU,EAAev6U,UAAW,kBAAc,GAC3CwvF,IACI3jF,EAAS,KACV0uU,EAAev6U,UAAW,mBAAe,GAC5CwvF,IACI3jF,EAAS,KACV0uU,EAAev6U,UAAW,oBAAgB,GAC7CwvF,IACI9iF,GAAUyuB,MAAO,UAAWxgB,MAAO,GAAK4mT,KACzCgZ,EAAev6U,UAAW,cAAU,GACvCwvF,IACI9iF,GAAUyuB,MAAO,UAAWxgB,MAAO,GAAK4mT,KACzCgZ,EAAev6U,UAAW,mBAAe,GAC5CwvF,IACI9iF,KAAY2nsB,KACb95X,EAAev6U,UAAW,aAAS,GACtCwvF,IACI9iF,KAAY40T,KACbiZ,EAAev6U,UAAW,kBAAc,GAC3CwvF,IACI3jF,EAAS,WACV0uU,EAAev6U,UAAW,gBAAY,GACzCwvF,IACI3jF,EAAS,WACV0uU,EAAev6U,UAAW,iBAAa,GAC1CwvF,IACI3jF,EAAS,SACV0uU,EAAev6U,UAAW,mBAAe,GAC5CwvF,IACI3jF,GAAW6F,EAAG,EAAGC,EAAG,KACrB4oU,EAAev6U,UAAW,gBAAY,GACzCwvF,IACI3jF,EAAS,OACV0uU,EAAev6U,UAAW,YAAQ,GACrCwvF,IACI3jF,EAAS,YACV0uU,EAAev6U,UAAW,YAAQ,GAC9Bu6U,GACT52Q,IAKEmvQ,GAAmC,SAAUhjP,GAE7C,SAASgjP,IACL,OAAkB,OAAXhjP,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAmC/D,OArCAsqF,GAAU6jP,EAAmBhjP,GAI7BN,IACI3jF,GAAS,IACVinU,EAAkB9yU,UAAW,eAAW,GAC3CwvF,IACI9iF,GAAUiO,MAAO,EAAGwgB,MAAO,eAAiBomS,KAC7CuR,EAAkB9yU,UAAW,cAAU,GAC1CwvF,IACI3jF,EAAS,UACVinU,EAAkB9yU,UAAW,YAAQ,GACxCwvF,IACI3jF,EAAS,IACVinU,EAAkB9yU,UAAW,eAAW,GAC3CwvF,IACI3jF,EAAS,IACVinU,EAAkB9yU,UAAW,UAAM,GACtCwvF,IACI3jF,EAAS,IACVinU,EAAkB9yU,UAAW,UAAM,GACtCwvF,IACI9iF,KAAY40T,KACbwR,EAAkB9yU,UAAW,iBAAa,GAC7CwvF,IACI3jF,EAAS,KACVinU,EAAkB9yU,UAAW,iBAAa,GAC7CwvF,IACI3jF,EAAS,SACVinU,EAAkB9yU,UAAW,sBAAkB,GAClDwvF,IACI3jF,EAAS,SACVinU,EAAkB9yU,UAAW,0BAAsB,GACtDwvF,IACI3jF,EAAS,KACVinU,EAAkB9yU,UAAW,gBAAY,GACrC8yU,GACTnvQ,IAKE6woB,GAA+B,SAAU1knB,GAEzC,SAAS0knB,IACL,OAAkB,OAAX1knB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAgC/D,OAlCAsqF,GAAUulnB,EAAe1knB,GAIzBN,IACI3jF,EAAS,YACV2osB,EAAcx0sB,UAAW,YAAQ,GACpCwvF,IACI3jF,OACD2osB,EAAcx0sB,UAAW,eAAW,GACvCwvF,IACI3jF,EAAS,IACV2osB,EAAcx0sB,UAAW,oBAAgB,GAC5CwvF,IACI9iF,GAAUiO,MAAO,EAAGwgB,MAAO,WAAaomS,KACzCizY,EAAcx0sB,UAAW,cAAU,GACtCwvF,IACI3jF,EAAS,KACV2osB,EAAcx0sB,UAAW,iBAAa,GACzCwvF,IACI3jF,EAAS,IACV2osB,EAAcx0sB,UAAW,eAAW,GACvCwvF,IACI3jF,EAAS,OACV2osB,EAAcx0sB,UAAW,sBAAkB,GAC9CwvF,IACI3jF,EAAS,OACV2osB,EAAcx0sB,UAAW,iBAAa,GACzCwvF,IACIxiF,KAAegnsB,KAChBQ,EAAcx0sB,UAAW,oBAAgB,GAC5CwvF,IACI3jF,GAAS,IACV2osB,EAAcx0sB,UAAW,gBAAY,GACjCw0sB,GACT7woB,IAKEovQ,GAAgC,SAAUjjP,GAE1C,SAASijP,IACL,OAAkB,OAAXjjP,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAwD/D,OA1DAsqF,GAAU8jP,EAAgBjjP,GAI1BN,IACI9iF,GAAUyuB,MAAO,cAAexgB,MAAO,GAAK4mT,KAC7CwR,EAAe/yU,UAAW,cAAU,GACvCwvF,IACI3jF,EAAS,OACVknU,EAAe/yU,UAAW,iBAAa,GAC1CwvF,IACI3jF,GAAS,IACVknU,EAAe/yU,UAAW,eAAW,GACxCwvF,IACI3jF,EAAS,YACVknU,EAAe/yU,UAAW,YAAQ,GACrCwvF,IACI3jF,EAAS,KACVknU,EAAe/yU,UAAW,cAAU,GACvCwvF,IACI3jF,EAAS,KACVknU,EAAe/yU,UAAW,aAAS,GACtCwvF,IACI3jF,EAAS,IACVknU,EAAe/yU,UAAW,eAAW,GACxCwvF,IACI3jF,EAAS,YACVknU,EAAe/yU,UAAW,aAAS,GACtCwvF,IACI3jF,EAAS,KACVknU,EAAe/yU,UAAW,kBAAc,GAC3CwvF,IACI3jF,EAAS,IAAIgzC,GAAM,EAAG,KACvBk0R,EAAe/yU,UAAW,cAAU,GACvCwvF,IACI3jF,EAAS,KACVknU,EAAe/yU,UAAW,gBAAY,GACzCwvF,IACI3jF,EAAS,OACVknU,EAAe/yU,UAAW,gBAAY,GACzCwvF,IACI3jF,OACDknU,EAAe/yU,UAAW,kBAAc,GAC3CwvF,IACI9iF,KAAYo1T,KACbiR,EAAe/yU,UAAW,uBAAmB,GAChDwvF,IACI3jF,EAAS,MACVknU,EAAe/yU,UAAW,yBAAqB,GAClDwvF,IACI3jF,EAAS,IACVknU,EAAe/yU,UAAW,sBAAkB,GAC/CwvF,IACI9iF,KAAYk7oB,KACb70U,EAAe/yU,UAAW,yBAAqB,GAClDwvF,IACI9iF,KAAYunsB,KACblhY,EAAe/yU,UAAW,yBAAqB,GAC3C+yU,GACTpvQ,IAKE8woB,GAA+B,SAAU3knB,GAEzC,SAAS2knB,IACL,IAAI/vsB,EAAmB,OAAXorF,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAKhE,OADAD,EAAMgwsB,aAAc,EACbhwsB,EAiEX,OAxEAuqF,GAAUwlnB,EAAe3knB,GASzBN,IACI3jF,EAAS,OACV4osB,EAAcz0sB,UAAW,iBAAa,GACzCwvF,IACI3jF,KACD4osB,EAAcz0sB,UAAW,aAAS,GACrCwvF,IACI9iF,KAAY8nsB,KACbC,EAAcz0sB,UAAW,qBAAiB,GAC7CwvF,IACI3jF,OACD4osB,EAAcz0sB,UAAW,kBAAc,GAC1CwvF,IACI3jF,EAAS,UACV4osB,EAAcz0sB,UAAW,YAAQ,GACpCwvF,IACI3jF,EAAS,eACV4osB,EAAcz0sB,UAAW,oBAAgB,GAC5CwvF,IACI3jF,EAAS,WACV4osB,EAAcz0sB,UAAW,mBAAe,GAC3CwvF,IACI3jF,EAAS,KACV4osB,EAAcz0sB,UAAW,WAAO,GACnCwvF,IACI3jF,EAAS,aACV4osB,EAAcz0sB,UAAW,iBAAa,GACzCwvF,IACI3jF,EAAS,0DACV4osB,EAAcz0sB,UAAW,mBAAe,GAC3CwvF,IACI3jF,GAAS,IACV4osB,EAAcz0sB,UAAW,eAAW,GACvCwvF,IACI3jF,EAAS,SACV4osB,EAAcz0sB,UAAW,qBAAiB,GAC7CwvF,IACI3jF,EAAS,SACV4osB,EAAcz0sB,UAAW,yBAAqB,GACjDwvF,IACI3jF,EAAS,IACV4osB,EAAcz0sB,UAAW,yBAAqB,GACjDwvF,IACIxiF,KAAe+lU,KAChB0hY,EAAcz0sB,UAAW,sBAAkB,GAC9CwvF,IACI9iF,KAAYomU,KACb2hY,EAAcz0sB,UAAW,yBAAqB,GACjDwvF,IACIxiF,KAAeonsB,KAChBK,EAAcz0sB,UAAW,sBAAkB,GAC9CwvF,IACIxiF,KAAeknsB,KAChBO,EAAcz0sB,UAAW,8BAA0B,GACtDwvF,IACI9iF,KAAYo1T,KACb2yY,EAAcz0sB,UAAW,uBAAmB,GAC/CwvF,IACI9iF,KAAYk7oB,KACb6sD,EAAcz0sB,UAAW,yBAAqB,GACjDwvF,IACI9iF,KAAYunsB,KACbQ,EAAcz0sB,UAAW,yBAAqB,GAC1Cy0sB,GACT9woB,IAKEgxoB,GAAsB,WAetB,OAdA,SAAcjjsB,EAAGC,EAAG+I,EAAQC,EAAOtJ,EAAKF,EAAMlN,QAC3B,IAAXyW,IAAqBA,EAAS,UACpB,IAAVC,IAAoBA,EAAQ,UACpB,IAARtJ,IAAkBA,EAAM,QACf,IAATF,IAAmBA,EAAO,QAClB,IAARlN,IAAkBA,EAAM,MAC5BU,KAAK+M,EAAIA,EACT/M,KAAKgN,EAAIA,EACThN,KAAK0M,IAAMA,EACX1M,KAAKwM,KAAOA,EACZxM,KAAK+V,OAASA,EACd/V,KAAKgW,MAAQA,EACbhW,KAAKV,IAAMA,MAQf2wsB,GAAkC,SAAU9knB,GAE5C,SAAS8knB,IACL,OAAkB,OAAX9knB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVAsqF,GAAU2lnB,EAAkB9knB,GAI5BN,IACI3jF,EAAS,OACV+osB,EAAiB50sB,UAAW,kBAAc,GAC7CwvF,IACI9iF,GAAUyuB,MAAO,cAAexgB,MAAO,GAAK4mT,KAC7CqzY,EAAiB50sB,UAAW,cAAU,GAClC40sB,GACTjxoB,ICpwBS0gQ,GAAgB,gBA4BhBwwY,GAAiB,iBAKjBC,GAAiB,iBAKjBC,GAAkB,kBAUlBC,GAAkB,kBAUlBC,GAAkB,kBAUlBC,GAAkB,kBAKlBpgoB,GAAoB,oBAKpBqgoB,GAAkB,kBAKlBC,GAAsB,sBAKtBC,GAAgB,gBAIhBC,GAAgB,gBC7HvBC,GAAyB,WACzB,SAASA,EAAQznoB,GACbnpE,KAAKmpE,KAAOA,EAqBhB,OAnBAynoB,EAAQv1sB,UAAUw1sB,WAAa,SAAUppjB,EAAMpqJ,EAAKqJ,EAAMwiF,EAAU4tG,EAAUg6gB,GAI1E,IAAK,IAFDC,EADAC,EAAU,GAGL70sB,EADKkQ,KAAK0T,IAAI/f,KAAKmpE,KAAK8noB,cAAel8qB,SAAS/0B,KAAKy3a,QAAS,KACjDt7a,EAAI,EAAGA,IAAK,CAC9B,IAAI+0sB,EAAQ,EACR9trB,EAAO,GAAMjnB,EAAI,EACG,IAAnBsrJ,EAAK16I,EAAIqW,IACV8trB,IAEoB,IAAnBzpjB,EAAKz6I,EAAIoW,KACV8trB,GAAS,GAEbF,EAAUA,EAAU,GAAKE,EAI7B,OAFAH,EAAYD,EAAWzksB,KAAK0T,IAAIgV,SAASi8qB,EAAQh6qB,OAAOg6qB,EAAQv0sB,OAAS,EAAG,GAAI,IAAKq0sB,EAAWr0sB,SAChGq6L,EAAWA,EAASvnL,QAAQ,YAAayhsB,GAASzhsB,QAAQ,cAAewhsB,GAClEj6gB,GAAY,QAAU5tG,EAAW,cAAgB7rF,GAErDuzsB,KCtBPO,GAA8B,WAC9B,SAASA,EAAahooB,GAClBnpE,KAAKmpE,KAAOA,EA8BhB,OAxBAgooB,EAAa91sB,UAAU+1sB,qBAAuB,SAAUtgoB,EAAe9C,EAAWx3C,GAC9E,IACImqD,EAAa3S,EADI8C,EAAcugoB,eAAiBvgoB,EAAcugoB,eAAiBvgoB,EAAcwgoB,WAE7F5njB,EAAapyH,OAAOqpD,GACpB4wnB,EAAavxsB,KAAKs6rB,gBAAgBxpnB,EAAc4P,aAAcgpE,EAAY/oE,GAC9E,OAAO4wnB,GAA0B/6qB,GAKrC26qB,EAAa91sB,UAAUi/rB,gBAAkB,SAAU55mB,EAAcgpE,EAAY/oE,GACzE,GAAI3+B,MAAM0nG,IAAejsJ,EAAkBkjF,GACvC,OAAO,KAGX,IAAK,IADD/iD,EAAO,GACFx/B,EAAK,EAAGozsB,EAAiB9wnB,EAActiF,EAAKozsB,EAAe/0sB,OAAQ2B,IAAM,CAC9E,IAAIqiF,EAAW+wnB,EAAepzsB,IACzBqiF,EAAS97C,MAAQ87C,EAAS77C,IAAO8kH,GAAcjpE,EAAS97C,MAAQ+kH,GAAcjpE,EAAS77C,IACvF67C,EAASzjF,QAAU2jF,KACpB/iD,EAAO6iD,EAASjqD,OAGxB,OAAOoH,IAAW8iD,EAAajkF,OAAuB,KAAbkkF,IAEtCwwnB,KCzBPM,GAA4B,WAC5B,SAASA,EAAW75qB,GAChB53B,KAAKkrE,mBAAqB,IAAIkH,GAAY,EAAG,GAC7CpyE,KAAKmrE,kBAAmB,EACxBnrE,KAAK0xsB,iBAAmB,EACxB1xsB,KAAKurE,UAAY3zC,EACjB53B,KAAK2xsB,WAAa,IAAIpvnB,GACtBviF,KAAK4xsB,gBAmpBT,OAhpBAH,EAAWp2sB,UAAUw2sB,kBAAoB,WACrC,IAAI9xsB,EAAQC,KAERi8Q,EAAkBj8Q,KAAKurE,UAAUsF,iBACjCkP,EAAW//E,KAAKurE,UAAUxB,YAE1B+noB,EAAehjoB,GAAe9uE,KAAKurE,UAAUvqE,QAAQsC,GAAK,sBAC1DtD,KAAKurE,UAAUwmoB,WAAaD,IAC5B9xsB,KAAKgysB,cAAgBhysB,KAAKurE,UAAU19C,SAASmS,WACzC18B,GAAItD,KAAKurE,UAAUvqE,QAAQsC,GAAK,YAAa0S,MAAO+pE,EAAS/pE,MAC7DD,OAAQgqE,EAAShqE,OACjBrR,MAAO,wBAEXotsB,EAAanwsB,YAAY3B,KAAKgysB,gBAElChysB,KAAKiysB,WAAcjysB,KAAKurE,UAAU19C,SAASw+C,aACvC/oE,GAAItD,KAAKurE,UAAUvqE,QAAQsC,GAAK,qBAChCgwU,YAAa,QAAUtzU,KAAKurE,UAAUvqE,QAAQsC,GAAK,uBAEvDtD,KAAKmzU,gBAAkBnzU,KAAKurE,UAAU19C,SAAS4rF,aAAa,IAAIyqN,GAAWlkU,KAAKurE,UAAUvqE,QAAQsC,GAAK,oBAAqB,eAAiB0S,MAAO,EAAGwgB,MAAO,QAAU,GACpKzpB,EAAG/M,KAAKurE,UAAUwmoB,UAAY,EAAIhynB,EAAShzE,EAAGC,EAAGhN,KAAKurE,UAAUwmoB,UAAY,EAAIhynB,EAAS/yE,EACzFgJ,MAAO+pE,EAAS/pE,MAAOD,OAAQgqE,EAAShqE,UAE5C/V,KAAKiysB,WAAWtwsB,YAAY3B,KAAKmzU,iBACjCnzU,KAAKurE,UAAUtB,cAAgB,KAC/BjqE,KAAKurE,UAAU+C,kBAAoB,KACnCtuE,KAAKurE,UAAUE,SAAW,KACTwwM,EAAgBx/Q,OACjCw/Q,EAAgB78Q,QAAQ,SAAUsqE,EAAOz3D,GACrClS,EAAMqnb,aAAe19W,EACrB3pE,EAAMmysB,cAAcxooB,EAAOz3D,MAGnCw/rB,EAAWp2sB,UAAU82sB,gBAAkB,SAAUlyE,EAAOv2jB,EAAO4F,EAAY8ioB,GACvE,IAAI1+qB,EAAS,IAAIwmB,GAAM+llB,EAAM10jB,UAAUkD,eAAehF,UAAWw2jB,EAAM10jB,UAAUkD,eAAejF,UAChGy2jB,EAAMoyE,cAAgBpyE,EAAMpxjB,gBAAgBnF,GACxCjsE,EAAkBwioB,EAAM10jB,UAAU0loB,iBAClChxE,EAAM10jB,UAAU0loB,cAAgBhxE,EAAM10jB,UAAU8C,aAAaD,YAEjE6xjB,EAAM10jB,UAAUL,mBAAqB+0jB,EAAMqyE,WAAWryE,EAAM10jB,UAAU51C,cAAc3f,MAAOiqnB,EAAM10jB,UAAU51C,cAAc5f,OAAQ2d,GACjIusmB,EAAMsyE,cAActyE,EAAM10jB,UAAU0loB,cAAehxE,EAAM10jB,UAAUL,mBAAoBknoB,GACnFnyE,EAAM10jB,UAAUinoB,cAChBvyE,EAAM10jB,UAAUinoB,aAAa3+X,aAAaosT,EAAM50N,YAAa/7V,EAAY2wjB,EAAM10jB,UAAU0loB,eAEzFhxE,EAAM10jB,UAAUknoB,sBAChBxyE,EAAM50N,YAAY1pa,YAAYs+nB,EAAM10jB,UAAUknoB,qBAAqBC,iBAAiBzyE,EAAM74M,aAAc64M,EAAM10jB,UAAU0loB,cAAe3hoB,IAE3I2wjB,EAAM0yE,uBAAuB1yE,EAAM50N,YAAa/7V,GAChD2wjB,EAAMgyE,WAAWtwsB,YAAYs+nB,EAAM50N,cAEvComS,EAAWp2sB,UAAU62sB,cAAgB,SAAUxooB,EAAO4F,GAClDtvE,KAAKqra,YAAerra,KAAKurE,UAAU19C,SAASw+C,aACxC/oE,GAAItD,KAAKurE,UAAUvqE,QAAQsC,GAAK,eAAiBgsE,IAErD,IAAI/hE,GACAsrB,QAAQ,EAAOpB,KAAMy4qB,GAAgBj+rB,MAAOq9D,EAC5C5F,MAAOA,EAAOP,KAAMnpE,KAAKurE,WAG7B,GADAvrE,KAAKurE,UAAU/kD,QAAQ0prB,GAAgB3isB,IAClCA,EAAUsrB,OACX,GAAwB,aAApB6wC,EAAMkpoB,WACN,GAAwB,SAApBlpoB,EAAMkpoB,WAAwB5ysB,KAAKoysB,KACnCpysB,KAAKmysB,gBAAgBnysB,KAAM0pE,EAAO4F,QAEjC,GAAI5F,EAAMrsE,KAAOqsE,EAAMrsE,IAAIZ,OAAS,EAAG,CACxC,IAAI47T,EAAUr4T,KACV6ysB,EAAS,IAAIjC,GAAQ5wsB,KAAKurE,WAC1B39C,EAAM,wDAA0D87C,EAAMopoB,YACtEn3jB,EAAO,IAAIp5D,IACX30D,IAAKA,EAAM,6CAA+C87C,EAAMrsE,MAEpEs+I,EAAK33D,UAAY,SAAUtgB,GACvB,IACIutM,EADaphN,KAAKuB,MAAMsS,GACY,aAAE,GAAc,UAAE,GACtDozH,EAAWm6E,EAAmB,SAC9B6/b,EAAa7/b,EAA6B,mBAC1CwmK,EAAUxmK,EAAkB,QACf,OAAbn6E,QAAkC37L,IAAb27L,GAA0BA,IAAa+7gB,EAAO/7gB,WACnE+7gB,EAAO/7gB,SAAWA,GAEH,OAAfg6gB,QAAsC31sB,IAAf21sB,GAA4BA,IAAe+B,EAAO/B,aACzE+B,EAAO/B,WAAaA,GAER,OAAZr5R,QAAgCt8a,IAAZs8a,GAAyBA,IAAYo7R,EAAOp7R,UAChEo7R,EAAOp7R,QAAUA,GAErBp/G,EAAQ9sP,UAAmB,QAAIsnoB,EAC/Bx6Y,EAAQ85Y,gBAAgB95Y,EAAS3uP,EAAO4F,EAAYujoB,IAExDl3jB,EAAKh5D,aAIT,KAAKllF,EAAkBisE,EAAM8F,YAAgB/xE,EAAkBisE,EAAM8F,UAAsB,aACtF/xE,EAAkBisE,EAAM8F,UAAoB,WAAK,CAClD,IAAIujoB,GAAgBt1sB,EAAkBisE,EAAM8F,UAAsB,aAC9D9F,EAAM8F,UAAsB,WAAE/yE,OAAS,EAAIitE,EAAM8F,UAAsB,WACvE9F,EAAM8F,UAAoB,SAC9B9F,EAAMsE,aACN,IAAIgloB,EAAOtpoB,EAAM8F,UAAgB,MAC5B/xE,EAAkBu1sB,IAAStpoB,EAAMqmoB,YAClC/vsB,KAAKurE,UAAUtB,cAAgB,IAAIskoB,IAAcxurB,IAAKizrB,EAAK,GAAG,GAAI1msB,IAAK0msB,EAAK,GAAG,KAAQjzrB,IAAKizrB,EAAK,GAAG,GAAI1msB,IAAK0msB,EAAK,GAAG,KAEhHv1sB,EAAkBuC,KAAKurE,UAAUtB,iBAAmB8D,GAAagloB,IACtE/ysB,KAAKizsB,oBAAoBF,GAa7B/ysB,KAAKkzsB,wBAAwB5joB,EAAYyjoB,GAIhD/ysB,KAAKurE,UAAUwmoB,UAGX/xsB,KAAKgysB,eACVhysB,KAAKgysB,cAAcrwsB,YAAY3B,KAAKiysB,YAHpCjysB,KAAKurE,UAAUj6C,UAAU3vB,YAAY3B,KAAKiysB,aAOlDR,EAAWp2sB,UAAU83sB,kBAAoB,SAAUC,EAAgBrhrB,GAC/D,GAAiC,MAA7BqhrB,EAAe7voB,YAAwC,MAAlB6voB,EAAwB,CAC7D,GAAqC,MAAjCA,EAAe/B,eACf,OAEJ,IAAK,IAAIl1sB,EAAI,EAAGA,EAAIi3sB,EAAe7voB,WAAW9mE,OAAQN,IAAK,CACvD,IAAIk3sB,EAAa73rB,WAAW43rB,EAAe7voB,WAAWpnE,GAAGi3sB,EAAe9B,YAC9D,IAANn1sB,EACIk3sB,EAAathrB,EAAMzlB,IACnBylB,EAAMzlB,IAAM+msB,EAEPA,EAAathrB,EAAMhS,MACxBgS,EAAMhS,IAAMszrB,GAIhBthrB,EAAMzlB,IAAMylB,EAAMhS,IAAMszrB,KAMxC5B,EAAWp2sB,UAAU63sB,wBAA0B,SAAU5joB,EAAYgkoB,GACjE,IAAIvzsB,EAAQC,KACZA,KAAKuzsB,iBACCxloB,GAAauloB,KACftzsB,KAAKqysB,cAAgBrysB,KAAK6uE,gBAAgB7uE,KAAKonb,eAEnDpnb,KAAKwzsB,WAAa,KAClB,IAAI1ioB,EAAgB9wE,KAAKonb,aAAat2W,cACtCwioB,EAAWl0sB,QAAQ,SAAUq0sB,EAAcxhsB,GACvC,IAAKxU,EAAkBg2sB,EAAuB,YAAOh2sB,EAAkBg2sB,EAA0B,aAAI,CACjG,IAAI/ssB,EAAQjJ,EAAkBg2sB,EAAuB,UAAwCA,EAAmB,KAAtDA,EAAuB,SAAQ,KACrFC,EAAUj2sB,EAAkBg2sB,EAAuB,UACnDA,EAA0B,YAD8BA,EAAuB,SAAe,YAE9Fj3sB,EAAOi3sB,EAAuB,SAC9BxwsB,EAAawwsB,EAAyB,WAC1C1zsB,EAAM4zsB,eAAejtsB,EAAMgtsB,EAAQl3sB,EAAMyG,MAGjDjD,KAAKonb,aAAaosR,WAAaxzsB,KAAKwzsB,WAChC/1sB,EAAkBuC,KAAKurE,UAAU+C,oBAAsBtuE,KAAKonb,aAAa2oR,cACzE/vsB,KAAKurE,UAAU+C,kBAAoBtuE,KAAKwzsB,YA8G5C,IAAK,IA5GD1jnB,EAAShf,EAAchiD,QAAQryB,OAAS,EAAIq0E,EAAchiD,SAAwB9uB,KAAKurE,UAAUrwD,OLhCjG,UAAW,UAAW,UAAW,UAAW,UAChD,UAAW,UAAW,UAAW,UAAW,YKgCxC04rB,EAAmBzysB,EAAc,OACjCmC,GAAItD,KAAKurE,UAAUvqE,QAAQsC,GAAK,eAAiBgsE,EAAa,wBAC9DjsE,UAAW,WACXE,OAAQ,kEACKvD,KAAKurE,UAAUxB,YAAY/8D,EAAI,WAC9BhN,KAAKurE,UAAUxB,YAAYh9D,EAAI,aAC7B/M,KAAKurE,UAAUxB,YAAYh0D,OAAS,YACrC/V,KAAKurE,UAAUxB,YAAY/zD,MAAQ,QAElD/W,EAAU,SAAU9C,GACpB,IAAIgqB,OAAI,EACJ0trB,EAAmBtmmB,EAAO65U,aAAap5W,UAAU7xE,GACjDwzV,OAAc,EACdmkX,OAAkB,EAClBrzU,OAAgB,EAChBr9F,OAAe,EAEfrmR,EAAO,GACP4a,EAAS,GACTiG,EAAQkzC,EAAsB,SAAIgf,EAAO3zF,EAAI2zF,EAAOrzF,QAAUq0E,EAAclzC,KAC3C,OAAjCkzC,EAAcugoB,gBAA4B5zsB,EAAkBo2sB,EAA2B,YAE7E,QADV1trB,EAAImmD,GAAqBihC,EAAO65U,aAAa7jX,WAAYswoB,EAA2B,SAAGtmmB,EAAO65U,aAAa33W,cAAe89B,EAAO65U,aAAa13W,qBACtF,IAAtCoB,EAAc4P,aAAajkF,OACzCmhC,EAAO2vE,EAAO65U,aAAa7jX,WAAWp9C,GAAG2qD,EAAcugoB,gBAElDwC,EAA2B,SAAE/ioB,EAAcugoB,iBACN,IAA1C9jmB,EAAO65U,aAAa7jX,WAAW9mE,QAAsD,IAAtCq0E,EAAc4P,aAAajkF,SAC1EmhC,EAAOi2qB,EAA2B,SAAE/ioB,EAAcugoB,kBAG1D,IAAI0C,EAAUxmmB,EAAOhiC,UAAUvqE,QAAQsC,GAAK,eAAiBgsE,EAAa,eAAiBnzE,EAAI,cAAgBgqB,EAC/GyX,EAAO2vE,EAAO6jmB,qBAAqB7jmB,EAAO65U,aAAcysR,EAA2B,SAAGj2qB,GACtF,IAAIrwB,GACAsrB,QAAQ,EAAOpB,KAAM04qB,GAAgBl+rB,MAAO9V,EAC5CK,KAAM+wG,EAAO65U,aAAa7jX,WAAagqC,EAAO65U,aAAa7jX,WAAWp9C,GAAK,KAAMgjD,KAAMokC,EAAOhiC,UAC9F59C,MAAOmjD,EAAelzC,KAAMA,EAAM0G,QAAUtuB,MAAO86D,EAAcxsC,OAAOtuB,MAAOwgB,MAAOs6C,EAAcxsC,OAAO9N,QAE/G+2E,EAAOhiC,UAAU/kD,QAAQ2prB,GAAgB5isB,GACzC,IAAIymsB,EAAev2sB,EAAkBo2sB,EAAkC,iBAChDp2sB,EAAkBo2sB,EAAuB,MAAKA,EAAiB,GAAS,KAAIA,EAAuB,KAApH,eAEN,GADAG,EAA+B,YAAhBA,GAA6C,iBAAhBA,EAAkC,UAAYA,EACtFzmmB,EAAOgmmB,cAAc92sB,OAAS,EAC9B2mS,EAAe71L,EAAOhiC,UAAU19C,SAASw+C,aACrC/oE,GAAIiqG,EAAOhiC,UAAUvqE,QAAQsC,GAAK,eAAiBgsE,EAAa,IAAM0koB,EAAc,SAAU3msB,UAAW,KAE7GkgG,EAAOgmmB,cAAc/usB,KAAK4+R,QAG1B,IAAK,IAAI57Q,EAAM,EAAGA,EAAM+lF,EAAOgmmB,cAAc92sB,OAAQ+qB,IAAO,CACxD,IAAIxjB,EAAMupG,EAAOgmmB,cAAc/rrB,GAC/B,GAAIxjB,EAAIV,GAAG/E,QAAQy1sB,IAAgB,EAAG,CAClC5wa,EAAep/R,EACf,MAEC,GAAIwjB,GAAO+lF,EAAOgmmB,cAAc92sB,OAAS,EAAG,CAC7C2mS,EAAe71L,EAAOhiC,UAAU19C,SAASw+C,aACrC/oE,GAAIiqG,EAAOhiC,UAAUvqE,QAAQsC,GAAK,eAAiBgsE,EAAa,IAAM0koB,EAAc,WAExFzmmB,EAAOgmmB,cAAc/usB,KAAK4+R,GAC1B,OAIZ,IAAIksG,OAAU,EACd,OAAQ0kU,GACJ,IAAK,UACIH,EAAkC,gBAOnC92rB,EAAOwwF,EAAO0mmB,yBAAyBJ,IANvC92rB,GAAQ,IAAO82rB,EAAiB,GAAU,MAAM,EAAI,IAAOA,EAAiB,GAAU,MAAM,EAC5FA,EAAiBj8qB,IAAI,SAAU43C,GAC3BzyD,GAAQ,MAASyyD,EAAiB,MAAM,EAAI,IAAOA,EAAiB,MAAM,MAMlFzyD,GAAQ,OACCtgB,OAAS,IACdkzV,EAAc,IAAIv5T,GAAW29qB,EAASxmsB,EAAUqwB,KAAMrwB,EAAU+2B,OAAOtuB,MAAOzI,EAAU+2B,OAAO9N,MAAOs6C,EAAcrjE,QAASqjE,EAAch/B,UAAW/0B,GACtJuyX,EAAU/hS,EAAOhiC,UAAU19C,SAASsI,SAASw5T,IAEjD,MACJ,IAAK,aACDkkX,EAAiBj8qB,IAAI,SAAUs8qB,GAC3Bv8qB,GAAUu8qB,EAAgB,MAAK,EAAI,MAAQA,EAAgB,MAAK,EAAI,MAExEJ,EAAkB,IAAItF,GAAeuF,EAASp8qB,EAAQpqB,EAAUqwB,KAAMrwB,EAAU+2B,OAAOtuB,MAAOzI,EAAU+2B,OAAO9N,MAAOs6C,EAAcrjE,QAASqjE,EAAch/B,WAC3Jw9V,EAAU/hS,EAAOhiC,UAAU19C,SAAS0hE,aAAauknB,GACjD,MACJ,IAAK,QACD,IAAIn/X,EAAYk/X,EAAwB,MACxCpzU,EAAgB,IAAIt8D,GAAa4vY,EAASxmsB,EAAUqwB,KAAMrwB,EAAU+2B,OAAQwsC,EAAcrjE,QAASknU,EAAa,EAAGA,EAAa,EAAG7jQ,EAAckrS,aAAc,MAC/JszB,EAAU/hS,EAAOhiC,UAAU19C,SAAS6V,WAAW+8V,GAC/C,MACJ,IAAK,OACD1jX,EAAO82rB,EAAwB,MAC/BlkX,EAAc,IAAIv5T,GAAW29qB,EAASxmsB,EAAUqwB,KAAMrwB,EAAU+2B,OAAOtuB,MAAOzI,EAAU+2B,OAAO9N,MAAOs6C,EAAcrjE,QAASqjE,EAAch/B,UAAW/0B,GACtJuyX,EAAU/hS,EAAOhiC,UAAU19C,SAASsI,SAASw5T,GAGhDlyV,EAAkB6xY,KACnBA,EAAQ9rY,aAAa,aAAiB/F,EAAkBo2sB,EAA2B,UACP,GAAvEA,EAA2B,SAAEtmmB,EAAO65U,aAAa13W,oBACtD4/T,EAAQ9rY,aAAa,YAAa+pG,EAAOhiC,UAAU09C,SAAW9sH,EAAI,GAAG+Q,YACrEk2R,EAAazhS,YAAY2tY,KAG7B/hS,EAASvtG,KACJ7D,EAAI,EAAGA,EAAI6D,KAAKonb,aAAap5W,UAAUvxE,OAAQN,IACpD8C,EAAQ9C,GAEZ,IAAIg4sB,EACJ,GAAIn0sB,KAAKonb,aAAagsR,eAAe32sB,QAAUuD,KAAKurE,UAAU6ooB,aAgB1D,IAAK,IAdDC,EADA55qB,EAAWz6B,KAAKonb,aAAagsR,eAAe32sB,OAE5Ck2J,EAAU,SAAUpvI,GACpB8wrB,EAAWzhjB,EAAOw0R,aAAagsR,eAAe7vrB,GAC9C4wrB,EAAUvhjB,EAAOrnF,UAAU19C,SAASw+C,aAChC/oE,GAAIsvJ,EAAOrnF,UAAUvqE,QAAQsC,GAAK,eAAiBgsE,EAAa,iBAAmB/rD,IAEvF,IAAIwO,GAAUhS,IAAK,EAAGzT,IAAK,GAC3BsmJ,EAAOugjB,kBAAkBkB,EAAUtirB,GACnCsirB,EAAS9woB,WAAW3rC,IAAI,SAAU08qB,EAAYn4sB,GAC1C4D,EAAMw0sB,aAAax0sB,EAAMqnb,aAAcktR,EAAYxknB,EAAO3zF,EAAI2zF,EAAOrzF,QAASs1B,EAAOxO,EAAGpnB,EAAGg4sB,EAAS7koB,EAAY+koB,KAEpHzhjB,EAAO2gjB,cAAc/usB,KAAK2vsB,IAE1BvhjB,EAAS5yJ,KACJujB,EAAI,EAAGA,EAAIkX,EAAUlX,IAC1BovI,EAAQpvI,GAGhB,IAAIwvE,EAAS/yF,KAAKurE,UAAU19C,SAASw+C,aACjC/oE,GAAItD,KAAKurE,UAAUvqE,QAAQsC,GAAK,eAAiBgsE,EAAa,wBAAyB5qE,MAAO,0BAE9F1E,KAAKurE,UAAUsnQ,iBAAmB7yU,KAAKonb,aAAa16C,kBAAkBl1W,UACtE87qB,EAAW17qB,IAAI,SAAUi8qB,EAAkB13sB,GACvC4D,EAAMgqY,YAAYhqY,EAAMqnb,aAAc93W,EAAYukoB,EAAkB9gnB,EAAO52F,EAAGy3sB,KAElF5zsB,KAAKuzsB,cAAc/usB,KAAKuuF,IAExB/yF,KAAKurE,UAAUknoB,sBACfzysB,KAAKuzsB,cAAc/usB,KAAKxE,KAAKurE,UAAUknoB,qBAAqBC,iBAAiB1ysB,KAAKonb,aAAcpnb,KAAKqysB,cAAe/ioB,IAExHtvE,KAAKuzsB,cAAc37qB,IAAI,SAAU52B,GAC7BjB,EAAMsra,YAAY1pa,YAAYX,KAE9BhB,KAAKurE,UAAUinoB,cACfxysB,KAAKurE,UAAUinoB,aAAa3+X,aAAa7zU,KAAKqra,YAAa/7V,EAAYtvE,KAAKqysB,eAEhFrysB,KAAK2ysB,uBAAuB3ysB,KAAKqra,YAAa/7V,GAC9CtvE,KAAKiysB,WAAWtwsB,YAAY3B,KAAKqra,cAKrComS,EAAWp2sB,UAAU0uY,YAAc,SAAUrgU,EAAO4F,EAAY3hD,EAAOolE,EAAOxjB,EAAYqkoB,GACtF5zsB,KAAKurE,UAAUsnQ,gBAAgBk3D,YAAYrgU,EAAO4F,EAAY3hD,EAAO+7C,EAAMsE,UAAW+kB,EAAO6gnB,EAAkBrkoB,IAKnHkioB,EAAWp2sB,UAAU44sB,yBAA2B,SAAUJ,GAGtD,IAAK,IAFD92rB,EAAO,GAEFwG,EAAI,EAAGA,EAAIswrB,EAAiBp3sB,OAAQ8mB,IACzCxG,GAAQ,IAAO82rB,EAAiBtwrB,GAAG,GAAU,MAAM,EAAI,IAAOswrB,EAAiBtwrB,GAAG,GAAU,MAAM,EAC1FswrB,EAAiBtwrB,GACnBqU,IAAI,SAAU43C,GAChBzyD,GAAQ,MAASyyD,EAAiB,MAAM,EAAI,IAAOA,EAAiB,MAAM,IAGlF,OAAOzyD,GAKX00rB,EAAWp2sB,UAAUk5sB,aAAe,SAAU7qoB,EAAO4qoB,EAAY99qB,EAAOzE,EAAOyirB,EAAavM,EAAWl1mB,EAAOzjB,EAAY8joB,GACtH,GAAI31sB,EAAkBuC,KAAKurE,UAAU6ooB,gBAAkBhB,EAAe57qB,QAClE,OAAO,KAEXhB,EAAQ48qB,EAAex1qB,KAAOw1qB,EAAex1qB,KAAOpH,EACpDx2B,KAAKurE,UAAU6ooB,aAAa9wsB,GAAKtD,KAAKurE,UAAUvqE,QAAQsC,GAAK,eAAiBgsE,EAAa,gBACvFkloB,EAAc,cAAgBvM,EAClCjosB,KAAKurE,UAAU6ooB,aAAaG,aAAanB,EAAgBkB,EAAY99qB,EAAOzE,EAAOyirB,EAAavM,EAAW34nB,EAAY5F,EAAOqpB,IAKlI0+mB,EAAWp2sB,UAAU+1sB,qBAAuB,SAAU1noB,EAAO/7C,EAAO6I,GAEhE,GADAA,EAAQA,GAAgBkzC,EAAMoH,cAAclzC,KACI,IAA5C8rC,EAAMoH,cAAc4P,aAAajkF,QAAgBgB,EAAkBisE,EAAMnG,YACzE,OAAO/sC,EAEX,IAAIvkB,EAAQq6D,GAAqB5C,EAAMnG,WAAY51C,EAAO+7C,EAAM+F,cAAe/F,EAAMgG,mBACjFgR,EAAe,IAAIywnB,GAAanxsB,KAAKurE,WACzC,OAAI9tE,EAAkBisE,EAAMnG,WAAWtxD,IAC5BukB,EAEJkqD,EAAa0wnB,qBAAqB1noB,EAAMoH,cAAepH,EAAMnG,WAAWtxD,GAAQukB,IAE3Fi7qB,EAAWp2sB,UAAUs4sB,eAAiB,SAAUjtsB,EAAM+tsB,EAAaj4sB,EAAMyG,GACrE,IACIumE,EACAC,EAFA1pE,EAAQC,KAGRkyJ,KACJ,OAAQxrJ,EAAKkP,eACT,IAAK,WACDs8I,EAAUlyJ,KAAK00sB,oBAAoBD,EAAY,GAAIj4sB,EAAMyG,IAC7CxG,OAAS,IACjBy1J,EAAkB,SAAIjvJ,EACtBivJ,EAAc,KAAIxrJ,EAClBwrJ,EAAyB,iBAAI,EAC7BlyJ,KAAKonb,aAAap5W,UAAUxpE,KAAK0tJ,IAErC,MACJ,IAAK,eAED,IAAK,IADDyijB,KACKx4sB,EAAI,EAAGA,EAAIs4sB,EAAYh4sB,OAAQN,KACpC+1J,EAAUlyJ,KAAK00sB,oBAAoBD,EAAYt4sB,GAAG,GAAIK,EAAMyG,IAChDxG,OAAS,GACjBk4sB,EAAkBnwsB,KAAK0tJ,GAG/ByijB,EAA4B,SAAI1xsB,EAChC0xsB,EAAwB,KAAIjusB,EAC5BiusB,EAAmC,iBAAI,EACvC30sB,KAAKonb,aAAap5W,UAAUxpE,KAAKmwsB,GACjC,MACJ,IAAK,aACDF,EAAY78qB,IAAI,SAAUD,EAAQ1lB,GAC9Bu3D,EAAW7xC,EAAO,GAClB8xC,EAAY9xC,EAAO,GACnB,IAAI7D,EAAQy1C,GAAkBC,EAAUC,EAAW1pE,EAAMsysB,cAAetysB,EAAMqnb,aAAcrnb,EAAMwrE,WAClG2mF,EAAQ1tJ,MACJsvB,MAAOA,EAAO81C,IAAKJ,EAAUK,IAAKJ,MAG1CyoF,EAAkB,SAAIjvJ,EACtBivJ,EAAc,KAAIxrJ,EAClB1G,KAAKonb,aAAap5W,UAAUxpE,KAAK0tJ,GACjC,MACJ,IAAK,QACD1oF,EAAWiroB,EAAY,GACvBhroB,EAAYgroB,EAAY,GACxB,IAAI3grB,EAAQy1C,GAAkBC,EAAUC,EAAWzpE,KAAKqysB,cAAerysB,KAAKonb,aAAcpnb,KAAKurE,WAC/FvrE,KAAKonb,aAAap5W,UAAUxpE,MACxBsvB,MAAOA,EAAOptB,KAAMA,EAAMkjE,IAAKJ,EAAUK,IAAKJ,EAAWz9C,SAAU/oB,IAEvE,MACJ,IAAK,OACDjD,KAAKonb,aAAap5W,UAAUxpE,MACxBsvB,MAAOt3B,EAAQ,EAAGkK,KAAMA,EAAMslB,SAAU/oB,MAKxDwusB,EAAWp2sB,UAAUwzE,gBAAkB,SAAUnF,GAC7C,IAAIkroB,EAMApmoB,EACAD,EANAsmoB,EAAY,EAGZn+qB,EAAS12B,KAAKurE,UAAUtB,cACxBH,EAAU,IAAI18C,GAAKptB,KAAKurE,UAAUxB,YAAY/zD,MAAOhW,KAAKurE,UAAUxB,YAAYh0D,OAAS,GAG7F,GAAI2gB,EAAQ,CACR,IAAIn5B,EAAQgsE,GAAkB7yC,EAAO8yC,SAASzpD,IAAK2W,EAAO+yC,UAAU1pD,IAAK,KAAM2pD,EAAO1pE,KAAKurE,WACvF1sD,EAAM0qD,GAAkB7yC,EAAO8yC,SAASl9D,IAAKoqB,EAAO+yC,UAAUn9D,IAAK,KAAMo9D,EAAO1pE,KAAKurE,WACzFiD,EAAY3vD,EAAI7R,EAAIzP,EAAMyP,EAC1BuhE,EAAW1vD,EAAI9R,EAAIxP,EAAMwP,OAGzByhE,EAAYD,EAAW,IAgB3B,OAbIqmoB,EADApmoB,EAAY1E,EAAQ/zD,OACRyF,WAAWnP,KAAKE,IAAkE,IAA9D+qB,OAAOwyC,EAAQ/zD,OAASuhB,OAAOk3C,EAAUthE,WAfnE,SAe6FA,WAAWhQ,MAAM,KAAK,IAhBhH,GAoBG4sE,EAAQ/zD,OAASy4D,EAG7BqmoB,EADAtmoB,EAAWzE,EAAQ9zD,MACPwF,WAAWnP,KAAKE,IAAgE,IAA5D+qB,OAAOwyC,EAAQ9zD,MAAQshB,OAAOi3C,EAASrhE,WAtBjE,SAsB2FA,WAAWhQ,MAAM,KAAK,IAvB9G,GA2BG4sE,EAAQ9zD,MAAQu4D,EAExBliE,KAAK0T,IAAI80rB,EAAWD,IAEhCnD,EAAWp2sB,UAAUs3sB,uBAAyB,SAAUmC,EAAc7isB,GAClE,IAAIy+D,EACJ,GAAKjzE,EAAkBuC,KAAKurE,UAAU+C,oBAwBjC,GAAItuE,KAAKurE,UAAUwmoB,UACpB,IAAK,IAAIxurB,EAAI,EAAGA,EAAIuxrB,EAAa3voB,kBAAmB5hD,IAEhD,MADAmtD,EAAYokoB,EAAavjsB,WAAWgS,IACpBjgB,GAAG/E,QAAQ,mBAAqB,GACzCmyE,EAAUptE,GAAG/E,QAAQ,kBAAoB,GACzCmyE,EAAUptE,GAAG/E,QAAQ,0BAA4B,GACjDmyE,EAAUptE,GAAG/E,QAAQ,gBAAkB,GAAK,CAC3C8O,EAAY,UAAYrN,KAAKurE,UAAU9f,MAAQ,iBAAwBzrD,KAAKurE,UAAUsH,eAAe9lE,EACnG,IAAM/M,KAAKurE,UAAUsH,eAAe7lE,EAAI,MAC9C0jE,EAAUltE,aAAa,YAAa6J,QAjCU,CACtD,IAAInC,EAAWlL,KAAKonb,aAAan1D,kBAC7B15V,EAAuB,IAAbrtB,GAAkBzN,EAAkBuC,KAAKurE,UAAUuH,YAC7D6b,EAAYxgB,GAAanuE,KAAKurE,UAAWvrE,KAAKonb,aAAc7uZ,GAC5DkzB,EAAQzrD,KAAKurE,UAAU0G,cAAgB0c,EAAiB,MACxDskK,EAAajzP,KAAKurE,UAAUn5C,cAAgBu8D,EAAoB,SACpE3uF,KAAKurE,UAAUwpoB,mBAAqB/0sB,KAAKurE,UAAUsH,eAAiBogL,EACpEjzP,KAAKurE,UAAUypoB,UAAYh1sB,KAAKurE,UAAU9f,MAAQA,EAClD,IAAK,IAAItvD,EAAI,EAAGA,EAAI24sB,EAAa3voB,kBAAmBhpE,IAEhD,MADAu0E,EAAYokoB,EAAavjsB,WAAWpV,IACpBmH,GAAG/E,QAAQ,mBAAqB,GACzCmyE,EAAUptE,GAAG/E,QAAQ,kBAAoB,GACzCmyE,EAAUptE,GAAG/E,QAAQ,0BAA4B,GAAK,CACzD,IAAI8O,EAAY,UAAYo+C,EAAQ,iBACdwnM,EAAWlmP,EAAI,IAAMkmP,EAAWjmP,EAAI,MAC1D0jE,EAAUltE,aAAa,YAAa6J,GAChCnC,EAAW,IAAMzN,EAAkBuC,KAAKurE,UAAUuH,cAClD6b,EAAYxgB,GAAanuE,KAAKurE,UAAWvrE,KAAKonb,cAC9Cpnb,KAAKurE,UAAU9f,MAAQkjC,EAAiB,MACxC3uF,KAAKurE,UAAUsH,eAAiB8b,EAAoB,aAmBxE8inB,EAAWp2sB,UAAU43sB,oBAAsB,SAAUjloB,GACjD,IAAIjuE,EAAQC,KACZguE,EAAU5uE,QAAQ,SAAUrC,EAAKkV,GAC7B,IAAKxU,EAAkBV,EAAc,YAAOU,EAAkBV,EAAiB,aAAI,CAC/E,IAAI2J,EAAQjJ,EAAkBV,EAAc,UAA+BA,EAAU,KAApCA,EAAc,SAAQ,KACnE03sB,EAAeh3sB,EAAkBV,EAAc,UAAsCA,EAAiB,YAAlDA,EAAc,SAAe,YACrF,OAAQ2J,EAAKkP,eACT,IAAK,UACD7V,EAAMk1sB,iBAAiBR,EAAY,IACnC,MACJ,IAAK,eACDA,EAAY78qB,IAAI,SAAU9D,EAAO7hB,GAC7BlS,EAAMk1sB,iBAAiBnhrB,EAAM,WAOrD29qB,EAAWp2sB,UAAUq5sB,oBAAsB,SAAUD,EAAaj4sB,EAAMyG,GACpE,IAAIlD,EAAQC,KACRkyJ,KACAx7H,EAAS12B,KAAKurE,UAAUtB,cAuB5B,OAtBAwqoB,EAAY78qB,IAAI,SAAUvF,EAAcpgB,GACpC,IAAIu3D,EAAWn3C,EAAa,GACxBo3C,EAAYp3C,EAAa,GAC7B,GAAKo3C,GAAa/yC,EAAO+yC,UAAU1pD,KAAO0pD,GAAa/yC,EAAO+yC,UAAUn9D,KAChEk9D,GAAY9yC,EAAO8yC,SAASzpD,KAAOypD,GAAY9yC,EAAO8yC,SAASl9D,IAAM,CACzE,IAAIwnB,EAAQy1C,GAAkBC,EAAUC,EAAW1pE,EAAMsysB,cAAetysB,EAAMqnb,aAAcrnb,EAAMwrE,WAC9F9tE,EAAkBsC,EAAMyzsB,YACxBzzsB,EAAMyzsB,YAAezzrB,KAAOhT,EAAG+mB,EAAM/mB,EAAGC,EAAG8mB,EAAM9mB,GAAKV,KAAOS,EAAG+mB,EAAM/mB,EAAGC,EAAG8mB,EAAM9mB,KAGlFjN,EAAMyzsB,WAAgB,IAAK,EAAInnsB,KAAK0T,IAAIhgB,EAAMyzsB,WAAgB,IAAK,EAAG1/qB,EAAM/mB,GAC5EhN,EAAMyzsB,WAAgB,IAAK,EAAInnsB,KAAK0T,IAAIhgB,EAAMyzsB,WAAgB,IAAK,EAAG1/qB,EAAM9mB,GAC5EjN,EAAMyzsB,WAAgB,IAAK,EAAInnsB,KAAKC,IAAIvM,EAAMyzsB,WAAgB,IAAK,EAAG1/qB,EAAM/mB,GAC5EhN,EAAMyzsB,WAAgB,IAAK,EAAInnsB,KAAKC,IAAIvM,EAAMyzsB,WAAgB,IAAK,EAAG1/qB,EAAM9mB,IAEhFklJ,EAAQ1tJ,MACJsvB,MAAOA,EACP81C,IAAKJ,EACLK,IAAKJ,OAIVyoF,GAEXu/iB,EAAWp2sB,UAAU45sB,iBAAmB,SAAUR,GAC9C,IAAI10sB,EAAQC,KACZy0sB,EAAYr1sB,QAAQ,SAAU81sB,GACtBz3sB,EAAkBsC,EAAMwrE,UAAUtB,eAClClqE,EAAMwrE,UAAUtB,cAAgB,IAAIskoB,IAAcxurB,IAAKm1rB,EAAc,GAAI5osB,IAAK4osB,EAAc,KAAQn1rB,IAAKm1rB,EAAc,GAAI5osB,IAAK4osB,EAAc,MAG9In1sB,EAAMwrE,UAAUtB,cAAcT,SAASzpD,IAAM1T,KAAK0T,IAAIhgB,EAAMwrE,UAAUtB,cAAcT,SAASzpD,IAAKm1rB,EAAc,IAChHn1sB,EAAMwrE,UAAUtB,cAAcT,SAASl9D,IAAMD,KAAKC,IAAIvM,EAAMwrE,UAAUtB,cAAcT,SAASl9D,IAAK4osB,EAAc,IAChHn1sB,EAAMwrE,UAAUtB,cAAcR,UAAU1pD,IAAM1T,KAAK0T,IAAIhgB,EAAMwrE,UAAUtB,cAAcR,UAAU1pD,IAAKm1rB,EAAc,IAClHn1sB,EAAMwrE,UAAUtB,cAAcR,UAAUn9D,IAAMD,KAAKC,IAAIvM,EAAMwrE,UAAUtB,cAAcR,UAAUn9D,IAAK4osB,EAAc,QAI9HzD,EAAWp2sB,UAAUk3sB,cAAgB,SAAUtnoB,EAAWC,EAAoBknoB,GAC1E,IAAI+C,EAAWn1sB,KAAKurE,UAAUv9D,OAC1B8e,EAAO9sB,KAAKurE,UAAU51C,cAC1B31B,KAAKksJ,SACL,IAAIkpjB,EACAC,EACJD,EAASC,EAAShpsB,KAAK87D,IAAI,EAAG8C,GAClBn+C,EAAK9W,MACJ8W,EAAK/W,OADlB,IAEIu/rB,EAAYt1sB,KAAKurE,UAAU7Z,OAAO1xD,KAAKurE,UAAUgqoB,gBACrDv1sB,KAAKw1sB,YAAcF,EAAUE,YAC7B,IAAI1qY,EAAOz+T,KAAK0T,IAAIs1rB,IAAWnqoB,EAAmBl+D,EAAI8f,EAAK/W,QAAU,IAAO,GACxEi1T,EAAO3+T,KAAK0T,IAAIq1rB,IAAWlqoB,EAAmBn+D,EAAI+f,EAAK9W,OAAS,IAAO,GACvE6oB,IAAYqsC,EAAmBn+D,EAAI,KAAO,IAC1C+xB,IAAYosC,EAAmBl+D,EAAI,KAAO,IAC9ColsB,EAAOA,GAAQpysB,KAAKoysB,MAAQpysB,KAAKurE,UAAmB,QACpD,IAAK,IAAIpvE,EAAIkQ,KAAKoxB,MAAMoB,GAAS1iC,EAAIkQ,KAAKoxB,MAAMutS,GAAO7uU,IACnD,IAAK,IAAIonB,EAAIlX,KAAKoxB,MAAMqB,GAASvb,EAAIlX,KAAKoxB,MAAMqtS,GAAOvnT,IAAK,CACxD,IAAIxW,EAAI,IAAM5Q,EAAI+uE,EAAmBn+D,EACjCC,EAAI,IAAMuW,EAAI2nD,EAAmBl+D,EACrC,GAAID,GAAK,KAAOA,GAAK+f,EAAK9W,OAAShJ,GAAK,KAAOA,EAAI8f,EAAK/W,QAChD5Z,GAAK,GAAKonB,GAAK,EAAG,CAClB,IAAIkkI,EAAO,IAAIuojB,GAAK7zsB,EAAGonB,GAGvB,GAFAkkI,EAAKj7I,KAAOO,EACZ06I,EAAK/6I,IAAMM,EACiB,SAAxBsosB,EAAU1C,UAAsB,CAChC,IAAIv1sB,EAAMi4sB,EAAUj4sB,IACpBoqJ,EAAKnoJ,IAAM8ysB,EAAKvB,WAAWppjB,EAAMpqJ,EAAKi4sB,EAAUxC,YAAaqC,EAAU/C,EAAKt7gB,SAAUs7gB,EAAKtB,iBAG3FrpjB,EAAKnoJ,IAAMU,KAAKw1sB,YAAYjmsB,QAAQ,QAAS07D,EAAU/9D,YAAYqC,QAAQ,QAASk4I,EAAK16I,EAAEG,YACtFqC,QAAQ,QAASk4I,EAAKz6I,EAAEE,YAEjClN,KAAKksJ,MAAM1nJ,KAAKijJ,IAMhC,IAAK,IADDgujB,EAAY/2sB,KAAWsB,KAAKksJ,UAAW,GAClC9tJ,EAAK,EAAGyE,EAAK7C,KAAKurE,UAAU7Z,OAAQtzD,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC/D,IAAIsrE,EAAQ7mE,EAAGzE,GACf,GAAqB,aAAfsrE,EAAMhjE,MAAuBgjE,EAAMlyC,UAGjB,QAApBkyC,EAAMkpoB,WAA2C,SAApBlpoB,EAAMkpoB,WACnC,IAAK,IAAI3usB,EAAK,EAAGyxsB,EAAcD,EAAWxxsB,EAAKyxsB,EAAYj5sB,OAAQwH,IAAM,CACrE,IAAI0xsB,EAAWD,EAAYzxsB,GACvB2xsB,EAAUl3sB,EAAOi3sB,SAAkB,GACf,SAApBjsoB,EAAMkpoB,UACNgD,EAAQt2sB,IAAM8ysB,EAAKvB,WAAW+E,EAASlsoB,EAAMrsE,IAAKqsE,EAAMopoB,YAAaqC,EAAU/C,EAAKt7gB,SAAUs7gB,EAAKtB,YAGnG8E,EAAQt2sB,IAAMoqE,EAAM8roB,YAAYjmsB,QAAQ,QAAS07D,EAAU/9D,YAAYqC,QAAQ,QAASomsB,EAAS5osB,EAAEG,YAC9FqC,QAAQ,QAASomsB,EAAS3osB,EAAEE,YAErClN,KAAKksJ,MAAM1nJ,KAAKoxsB,IAI5B51sB,KAAK61sB,gBAETpE,EAAWp2sB,UAAUw6sB,aAAe,WAChC,IAAInxN,EAAa1kf,KAAKq9D,iBAAiBr9D,KAAKksJ,OACxCp9E,GAAe9uE,KAAKurE,UAAUvqE,QAAQsC,GAAK,kBAC3C9C,SAASosB,eAAe5sB,KAAKurE,UAAUvqE,QAAQsC,GAAK,gBAAgBtB,UAAY0if,IAGxF+sN,EAAWp2sB,UAAUgiE,iBAAmB,SAAU6uF,GAE9C,IAAK,IADD4pjB,EAAa,GACR13sB,EAAK,EAAG23sB,EAAU7pjB,EAAO9tJ,EAAK23sB,EAAQt5sB,OAAQ2B,IAAM,CACzD,IAAIqpJ,EAAOsujB,EAAQ33sB,GACnB03sB,GAAc,4CAA8CrujB,EAAKj7I,KAAO,WAAai7I,EAAK/6I,IAAM,cAAgB+6I,EAAK1xI,OACjH,aAAe0xI,EAAKzxI,MAAQ,kBAAoByxI,EAAKnoJ,IAAM,uBAEnE,OAAOw2sB,GAEXrE,EAAWp2sB,UAAUi3sB,WAAa,SAAU0D,EAASC,EAASxnoB,GAC1D,IAEI1hE,EACAC,EAHAmlJ,EAAQnyJ,KAAKurE,UAAU0loB,cAIvBzloB,EAAiC,IAArBn/D,KAAK87D,IAAI,EAAGgqF,GAGxBj+I,EAAW82D,GAA0ByD,EAAgB0jF,GAASplJ,EAFlEA,EAAKipsB,EAAU,EAAMxqoB,EAAY,EAEuCx+D,EADxEA,EAAKipsB,EAAU,EAAMzqoB,EAAY,GAC+CxrE,KAAKmrE,kBAKrF,OAJAp+D,GAAKmH,EAASnH,EAAKipsB,EAAU,EAC7BhpsB,EAAKA,GAAKkH,EAASlH,EAAKipsB,EAAU,GARpB,GASdj2sB,KAAKurE,UAAU9f,MAAQp/C,KAAK87D,IAAI,EAAGgqF,EAAQ,GAC3CnyJ,KAAKurE,UAAUsH,eAAiB,IAAI34B,IAAQntC,EAAK,GAAM/M,KAAKurE,UAAU9f,OAAUzrD,KAAKurE,UAAU9f,OAAUz+C,EAAK,GAAMhN,KAAKurE,UAAU9f,OAAUzrD,KAAKurE,UAAU9f,OACrJ,IAAIvR,GAAMntC,EAAGC,IAEjByksB,KC/pBPh9T,GAA6B,WAC7B,SAASA,EAAY78W,GACjB53B,KAAK43B,IAAMA,EAoGf,OAlGA68W,EAAYp5Y,UAAUmxsB,yBAA2B,WAC7C,IAAIzssB,EAAQC,KACRyssB,EAAczssB,KAAK43B,IAAI52B,QAAQsC,GAAK,qBACpCopsB,EAAkBvrsB,EAAc,OAASmC,GAAItD,KAAK43B,IAAI52B,QAAQsC,GAAK,uBACvEopsB,EAAgBhosB,MAAMwP,SAAW,WACjCw4rB,EAAgBhosB,MAAMgI,IAAM,MAC5BggsB,EAAgBhosB,MAAM8H,KAAO,MAC7BxM,KAAK43B,IAAIg/B,YAAYh/B,IAAI,SAAU+2B,EAAY18C,GAChB,OAAvB08C,EAAWv0B,SACXr6B,EAAM4ssB,yBAAyBD,EAAiB/9oB,EAAY18C,KAGhEy6rB,EAAgBvnoB,kBAAoB,IAAO1nE,EAAkBqxE,GAAe29nB,KAC5E39nB,GAAe29nB,GAAa9qsB,YAAY+qsB,IAMhDj4T,EAAYp5Y,UAAUsxsB,yBAA2B,SAAUt4rB,EAAes6C,EAAY4zR,GAClF,IAAI/1U,EACAE,EACAstB,EAEAK,EADAzC,EAAM53B,KAAK43B,IAEXs+qB,EAAYt+qB,EAAIjC,cAEhBwE,GADKvC,EAAI52B,QAAQsC,GACFnC,EAAc,OAC7BmC,GAAIs0B,EAAI52B,QAAQsC,GAAK,eAAiBi/U,EAAiBh/U,OAAQ,+BAAiCorD,EAAW8T,OAAS,OAEpH7pC,GACAC,QAAQ,EAAOpB,KAAMg5qB,GAAqBr2qB,QAASu0B,EAAWv0B,QAC9Du0B,WAAYA,GAIhB,GAFA3uD,KAAK43B,IAAIpR,QAAQiqrB,GAAqB73qB,IACtCoB,EAAaD,GAAoBnB,EAASwB,WACxBJ,EAAWh6B,KAAK43B,KAAKn7B,OAEnC,IADA49B,EAAkBL,EAAWh6B,KAAK43B,KAC3ByC,EAAgB59B,OAAS,GAC5B09B,EAAax4B,YAAY04B,EAAgB,SAI7CF,EAAax4B,YAAYR,EAAc,OACnCa,UAAW42B,EAASwB,WAG5B,IAAIzuB,EAASm8D,GAAiB3tC,EAAav4B,WAAU,GAAOg2B,EAAI52B,SAC5DkU,EAAc0iB,EAAI52B,QAAQ4K,wBAC1B8qB,EAASkB,EAAItG,UAAU1lB,wBAC3BY,EAAOH,KAAKE,IAAImqB,EAAOlqB,KAAO0I,EAAY1I,MAC1CE,EAAML,KAAKE,IAAImqB,EAAOhqB,IAAMwI,EAAYxI,KACxC,IAAIypsB,EAAoBxnpB,EAAW5hD,EAAExO,QAAQ,MAAQ,EAAM23sB,EAAUlgsB,MAAQ,IAAOwF,WAAWmzC,EAAW5hD,GACtGyO,WAAWmzC,EAAW5hD,GACtBqpsB,EAAoBznpB,EAAW3hD,EAAEzO,QAAQ,MAAQ,EAAM23sB,EAAUngsB,OAAS,IAAOyF,WAAWmzC,EAAW3hD,GACvGwO,WAAWmzC,EAAW3hD,GAG1B,OAFAR,EAA2C,SAAnCmiD,EAAW8E,oBAAmCjnD,EAAO2psB,EAAoB3psB,EACjFE,EAAwC,SAAjCiiD,EAAW+E,kBAAiChnD,EAAM0psB,EAAoB1psB,EACrEiiD,EAAW+E,mBACf,IAAK,OACDhnD,GAAa0psB,EACb,MACJ,IAAK,SACD1psB,EAAOA,EAAM0psB,GAAsB1/qB,EAAO3gB,OAAS,EAAMpK,EAAOoK,OAAS,GACzE,MACJ,IAAK,MACDrJ,EAAOA,EAAMgqB,EAAO3gB,OAASqgsB,EAAoBzqsB,EAAOoK,OAGhE,OAAQ44C,EAAW8E,qBACf,IAAK,OACDjnD,GAAe2psB,EACf,MACJ,IAAK,SACD3psB,EAAQA,EAAO2psB,GAAsBz/qB,EAAO1gB,MAAQ,EAAMrK,EAAOqK,MAAQ,GACzE,MACJ,IAAK,MACDxJ,EAAQA,EAAOkqB,EAAO1gB,MAAQmgsB,EAAoBxqsB,EAAOqK,MAGjEmkB,EAAaz1B,MAAM8H,KAAOA,EAAO,KACjC2tB,EAAaz1B,MAAMgI,IAAMA,EAAM,KAC/B2H,EAAc1S,YAAYw4B,IAK9Bs6W,EAAYp5Y,UAAUkkC,cAAgB,WAClC,MAAO,eAOXk1W,EAAYp5Y,UAAUiX,QAAU,SAAUslB,KAGnC68W,KCrGP76D,GAA6B,WAK7B,SAASA,EAAYjnU,GACjB3S,KAAK2S,QAAUA,EA6GnB,OAvGAinU,EAAYv+U,UAAU0F,MAAQ,SAAU6C,GACpC5D,KAAKiB,YAAcpF,OAAO6F,KAAK,GAAI,QAAS,UAAY7F,OAAOonH,YAAc,UAAYpnH,OAAOmnH,WAAa,cAC7GhjH,KAAKiB,YAAY0sF,OAAO,EAAG,GAC3B3tF,KAAKiB,YAAY44U,SAASC,OAAOC,WAAYD,OAAOE,aACpD,IAAIphT,GACAC,QAAQ,EAAO27B,YAAax0D,KAAKi6U,eAAer2U,GAAW6zB,KL4G9C,eK1GjBz3B,KAAK2S,QAAQ6T,QL0GI,cK1GiBoS,GAC7BA,EAASC,QACV53B,EAAY23B,EAAS47B,YAAax0D,KAAKiB,cAQ/C24U,EAAYv+U,UAAU4+U,eAAiB,SAAUr2U,GAC7C,IAAI1C,EAAMC,EAAc,OAiBxB,OAhBIyC,EACIA,aAAoBpF,MACpBoF,EAASxE,QAAQ,SAAUpC,GACvBkE,EAAIS,YAAY4rB,GAAWvwB,GAAO4E,WAAU,MAG3CgC,aAAoB0lH,QACzBpoH,EAAIS,YAAYiC,EAAShC,WAAU,IAGnCV,EAAIS,YAAY4rB,GAAW3pB,GAAUhC,WAAU,IAInDV,EAAIS,YAAY3B,KAAK2S,QAAQ3R,QAAQY,WAAU,IAE5CV,GAOX04U,EAAYv+U,UAAU6+U,OAAS,SAAUxzU,EAAMqqN,EAAU33L,GACrD,IAAIr5B,EAAQC,KACRgB,EAAUG,EAAc,UACxBmC,GAAI,aACJG,OACIuS,MAAShW,KAAK2S,QAAQgjB,cAAc3f,MAAM9I,WAC1C6I,OAAU/V,KAAK2S,QAAQgjB,cAAc5f,OAAO7I,cAGhDotU,IAAe9uU,GAAQy9E,UAAU/7E,WAAW3O,QAAQ,mBAAqB,GAC7E66B,EAAc37B,EAAkB27B,GAAe0sN,GAAmBqG,UAAY/yN,EAC9E,IAAImhT,EAAU,sFACVv6U,KAAK2S,QAAQ2e,UAAUxvB,UACvB,SACA8rB,EAAM/xB,OAAO81N,IAAIC,gBAAgB,IAAIT,KAAc,QAATzqN,GAAkB6zU,KAC3D,IAAKC,eAAiBC,kBAAkBz6U,KAAK2S,QAAQ2e,aAAe5qB,KAAM,mBAC/E,GAAa,QAATA,EACA1G,KAAK06U,gBAAgB3pH,EAAUrqN,EAAMknB,EAAK0sT,OAEzC,CACD,IAAIK,EAAU,IAAI/qP,MACdgrP,EAAQ55U,EAAQksF,WAAW,MAC/BytP,EAAQv3P,kBAGJ,GAFAw3P,EAAMlrP,UAAUirP,EAAS,EAAG,GAC5B9+U,OAAO81N,IAAIE,gBAAgBjkM,GACd,QAATlnB,EAAgB,CAChB,IAAI46Q,EAAa,IAAIr8B,GACjB41F,EAAc75U,EAAQ+sF,UAAU,cAAcx+E,QAAQ,aAAc,sBACxE+xQ,EAAW/vN,aAAan4B,YAAcA,EACtCyhT,EAAcA,EAAYx5U,MAAMw5U,EAAYt8U,QAAQ,KAAO,GAC3D+iR,EAAWp2C,MAAM9mO,MAAM2tP,SAASriK,UAAU,IAAImoK,GAAUgjF,GAAc,EAAG,EAAI96U,EAAM4S,QAAQgjB,cAAc3f,MAAQ,GAAKjW,EAAM4S,QAAQgjB,cAAc5f,QAC9IukU,IACAh5D,EAAW7zL,KAAKsjI,EAAW,QAC3BuwD,EAAWhvQ,gBAIfvS,EAAM26U,gBAAgB3pH,EAAUrqN,EAAM1F,EAAQ+sF,UAAU,aAAax+E,QAAQ,YAAa,sBAAuB+qU,IAGzHK,EAAQr7U,IAAMsuB,IAStBgsT,EAAYv+U,UAAUq/U,gBAAkB,SAAU3pH,EAAUrqN,EAAMknB,EAAK0sT,GACnEn5U,EAAc,KACVsC,OACIguN,SAAYV,EAAW,IAAMrqN,EAAK60D,oBAClC7sC,KAAQd,KAEbja,cAAc,IAAIosM,WAAWu6H,EAAa,QAAU,QACnDh/I,KAAMz/L,OACNm/U,SAAS,EACTC,YAAY,MAGbrB,KC1HPtvP,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GA+B5Dy5qB,GAAsB,SAAUlrnB,GAKhC,SAASkrnB,EAAKrjsB,EAAShS,GACnB,IAAIjB,EAAQorF,EAAO7pF,KAAKtB,KAAMgT,EAAShS,IAAYhB,KAkBnD,OAbAD,EAAMgysB,WAAY,EAElBhysB,EAAM0rE,SAAW,IAAIr+C,GAAK,EAAG,GAE7BrtB,EAAM8yE,eAAiB,IAAI34B,GAAM,EAAG,GAEpCn6C,EAAMg1sB,mBAAqB,IAAI76pB,GAAM,EAAG,GAExCn6C,EAAMmrE,mBAAqB,IAAIhxB,GAAM,EAAG,GAExCn6C,EAAMu2sB,uBAAyB,IAAIp8pB,GAAM,EAAG,GAE5Cn6C,EAAM2mB,SAAWlb,GAAQkb,SAClB3mB,EAuhCX,OA9iCAuqF,GAAU+rnB,EAAMlrnB,GA8BhBkrnB,EAAKh7sB,UAAU0gV,kBAAoB,SAAU1+U,GACzC,OAAO2C,KAAKg4G,aAAajkC,YAAY12E,IAKzCg5sB,EAAKh7sB,UAAUoX,UAAY,WACvBzS,KAAKoiS,sBACLpiS,KAAKwmB,QN7EK,QM6EW2iD,KAAMnpE,OAC3BA,KAAK+5Y,cACL/5Y,KAAKykY,eACLzkY,KAAK8tY,YACL9tY,KAAK0kY,aACL1kY,KAAK2N,cAET0osB,EAAKh7sB,UAAUk7sB,aAAe,SAAUr7rB,EAAOwR,GAC3CA,EAAK8J,MAAQ9J,EAAK8J,OAAStb,EAAMsb,MACjC9J,EAAKI,KAAOJ,EAAKI,MAAQ5R,EAAM4R,KAC/BJ,EAAKO,WAAaP,EAAKO,YAAc/R,EAAM+R,WAC3CP,EAAKM,UAAYN,EAAKM,WAAa9R,EAAM8R,UACzCN,EAAKK,WAAaL,EAAKK,YAAc7R,EAAM6R,YAK/CsprB,EAAKh7sB,UAAU0+Y,YAAc,WAEzB,OADA/5Y,KAAKw2sB,mBAAmBx2sB,KAAKkb,OACrBlb,KAAKkb,OACT,IAAK,WACDlb,KAAKu2sB,aAAaphb,GAAM45a,cAAe/usB,KAAK8jsB,cAAc1/Z,WAC1DpkS,KAAKu2sB,aAAaphb,GAAM65a,iBAAkBhvsB,KAAK8jsB,cAAc2S,iBAAiBrya,WAC9EpkS,KAAKu2sB,aAAaphb,GAAMqnC,gBAAiBx8T,KAAKo2U,eAAehyC,WAC7DpkS,KAAKu2sB,aAAaphb,GAAM85a,gBAAiBjvsB,KAAKo2U,eAAehyC,WAC7DpkS,KAAK02sB,aAAa12sB,KAAK0xD,OAAQyjO,GAAM8gG,eACrC,MACJ,IAAK,YACDj2X,KAAKu2sB,aAAapH,GAAeJ,cAAe/usB,KAAK8jsB,cAAc1/Z,WACnEpkS,KAAKu2sB,aAAapH,GAAeH,iBAAkBhvsB,KAAK8jsB,cAAc2S,iBAAiBrya,WACvFpkS,KAAKu2sB,aAAapH,GAAe3yY,gBAAiBx8T,KAAKo2U,eAAehyC,WACtEpkS,KAAKu2sB,aAAapH,GAAeF,gBAAiBjvsB,KAAKo2U,eAAehyC,WACtEpkS,KAAK02sB,aAAa12sB,KAAK0xD,OAAQy9oB,GAAel5U,eAC9C,MACJ,IAAK,SACDj2X,KAAKu2sB,aAAarH,GAAYH,cAAe/usB,KAAK8jsB,cAAc1/Z,WAChEpkS,KAAKu2sB,aAAarH,GAAYF,iBAAkBhvsB,KAAK8jsB,cAAc2S,iBAAiBrya,WACpFpkS,KAAKu2sB,aAAarH,GAAY1yY,gBAAiBx8T,KAAKo2U,eAAehyC,WACnEpkS,KAAKu2sB,aAAarH,GAAYD,gBAAiBjvsB,KAAKo2U,eAAehyC,WACnEpkS,KAAK02sB,aAAa12sB,KAAK0xD,OAAQw9oB,GAAYj5U,eAC3C,MACJ,IAAK,eACDj2X,KAAKu2sB,aAAanH,GAAkBL,cAAe/usB,KAAK8jsB,cAAc1/Z,WACtEpkS,KAAKu2sB,aAAanH,GAAkBJ,iBAAkBhvsB,KAAK8jsB,cAAc2S,iBAAiBrya,WAC1FpkS,KAAKu2sB,aAAanH,GAAkB5yY,gBAAiBx8T,KAAKo2U,eAAehyC,WACzEpkS,KAAKu2sB,aAAanH,GAAkBH,gBAAiBjvsB,KAAKo2U,eAAehyC,WACzEpkS,KAAK02sB,aAAa12sB,KAAK0xD,OAAQ09oB,GAAkBn5U,iBAQ7DogV,EAAKh7sB,UAAUm7sB,mBAAqB,SAAUt7rB,GAC1C,IAAIsb,EAAkB,iBAAVtb,EAA2B,UAAY,UACnDlb,KAAKyvB,WAAazvB,KAAKyvB,WAAazvB,KAAKyvB,WAAa+G,EACtDx2B,KAAK22sB,SAASlnrB,WAAazvB,KAAK22sB,SAASlnrB,WAAazvB,KAAK22sB,SAASlnrB,WAAa+G,EACjFA,EAAkB,iBAAVtb,EAA2B,UAAY,UAC/Clb,KAAKquE,aAAa73C,MAASx2B,KAAKquE,aAAkB,MAAIruE,KAAKquE,aAAa73C,MAAQA,GAOpF6/qB,EAAKh7sB,UAAUq7sB,aAAe,SAAUhlpB,EAAQhtD,GAC5C,IAAK,IAAItG,EAAK,EAAGw4sB,EAAWllpB,EAAQtzD,EAAKw4sB,EAASn6sB,OAAQ2B,IAAM,CAC5D,IAAIsrE,EAAQktoB,EAASx4sB,GACrB4B,KAAKu2sB,aAAa7xsB,EAAOglE,EAAMgjU,kBAAkBtoG,aAMzDiya,EAAKh7sB,UAAU0wG,OAAS,WACpB/rG,KAAK62sB,uBACL72sB,KAAKikX,yBACLjkX,KAAK82sB,cACL92sB,KAAKq8U,eACLr8U,KAAKs8U,YAAYt8U,KAAK8jsB,cAAe,QAAS,KAAM,MACpD9jsB,KAAK04X,aACL14X,KAAK+2sB,0BAGTV,EAAKh7sB,UAAU07sB,uBAAyB,WACpC,IAAIh3sB,EAAQC,KACRvD,EAASuD,KAAK6wE,iBAAiBp0E,OAAS,EAC5CuD,KAAKg3sB,eAAkBh3jB,QAAS,EAAG4B,SAAU,GAC7C,IAAIq1jB,EAGAxmY,EACJzwU,KAAK6wE,iBAAiBzxE,QAAQ,SAAUsqE,EAAO4F,GAC3C,GAAI5F,EAAM8F,qBAAqBhM,GAAa,CACxCzjE,EAAMi3sB,cAAuB,UAC7BvmY,EAAa/mQ,EAAM8F,UACnBynoB,EAAcvtoB,EAAMhO,iBAAiB2H,GAAQqG,EAAMhO,MAAQ,IAAI2H,GAC7CotQ,EAAW/hL,aAAauojB,GAC9B3jhB,KAAK,SAAUzyL,GACvBd,EAAMm3sB,wBAAwB,cAAer2sB,EAAG6oE,EAAO,oBAGtDA,EAAM8F,qBAAqBo/nB,IAChC7usB,EAAMo3sB,mBAAmBztoB,EAAOA,EAAM8F,UAAW,aAEjD9F,EAAMnG,sBAAsBqroB,IAC5B7usB,EAAMo3sB,mBAAmBztoB,EAAOA,EAAMnG,WAAY,cAElDxjE,EAAMi3sB,cAAuB,UAAMj3sB,EAAMi3sB,cAAwB,UAAKv6sB,IAAW6yE,GACjFvvE,EAAMm3sB,wBAAwB,SAI1Cb,EAAKh7sB,UAAU87sB,mBAAqB,SAAUztoB,EAAO0toB,EAAW1wsB,GAC5D,IACIirsB,EADA5xsB,EAAQC,KAEZA,KAAKg3sB,cAAuB,WAC5BrF,EAAa,IAAIpvnB,GAAK60nB,EAAUtI,YAAasI,EAAU1wsB,KAAM0wsB,EAAU50nB,MAAO40nB,EAAU30nB,cAC7EuB,UAAY,SAAU/jF,GAC7BF,EAAMm3sB,wBAAwB,OAAQj3sB,EAAMypE,EAAOhjE,IAEvDirsB,EAAWhvnB,KAAKy0nB,EAAUvI,WAG9BwH,EAAKh7sB,UAAU67sB,wBAA0B,SAAUG,EAAa76sB,EAAMktE,EAAO2a,GAYzE,GAXArkF,KAAKg3sB,cAAwB,WACzBK,IACiB,cAAbhznB,EACA3a,EAAM8F,UAA6B,gBAAhB6noB,EAAkC55sB,EAAkBjB,EAAa,QAAsBA,EAAa,OAA9BA,EAAa,OAClGqzD,KAAKuB,MAAM50D,GAGfktE,EAAMnG,WAA8B,gBAAhB8zoB,EAAkC55sB,EAAkBjB,EAAa,QAAsBA,EAAa,OAA9BA,EAAa,OACnGqzD,KAAKuB,MAAM,IAAM50D,EAAO,KAAK,IAGpCiB,EAAkB45sB,IAAgBr3sB,KAAKg3sB,cAAuB,UAAMh3sB,KAAKg3sB,cAAwB,SAe7Fv5sB,EAAkB45sB,IACvBr3sB,KAAKs3sB,gBAhBgG,CACrG,IAAInwqB,EAAannC,KAAK6wE,iBACtB7wE,KAAK6wE,oBACL,IAAK,IAAI10E,EAAI,EAAGA,EAAIgrC,EAAW1qC,OAAQN,IAC/BgrC,EAAWhrC,GAAG4zsB,aACd/vsB,KAAK6wE,iBAAiBrsE,KAAK2iC,EAAWhrC,IAG9C,IAAK,IAAIonB,EAAI,EAAGA,EAAI4jB,EAAW1qC,OAAQ8mB,IAC9B4jB,EAAW5jB,GAAGwsrB,aACf/vsB,KAAK6wE,iBAAiBrsE,KAAK2iC,EAAW5jB,IAG9CvjB,KAAKs3sB,cAMbjB,EAAKh7sB,UAAUi8sB,UAAY,WACnBt3sB,KAAKg8U,cAAgBh8U,KAAKo2U,eAAe5+S,SACzCx3B,KAAKg8U,aAAa9E,eAEtBl3U,KAAKu3sB,aACDv3sB,KAAKquE,aAAa5uC,QAAUz/B,KAAK8yE,YACjC9yE,KAAK8yE,WAAW0koB,wBAEpBx3sB,KAAK4uE,cAAcijoB,oBACnB7xsB,KAAKgB,QAAQW,YAAY3B,KAAKsxB,WAE9BtxB,KAAKy3sB,kBACDz3sB,KAAK65Y,mBACL75Y,KAAK65Y,kBAAkB2yT,2BAE3BxssB,KAAK03sB,gBACL13sB,KAAKwmB,QNpPO,UMoPW2iD,KAAMnpE,QAKjCq2sB,EAAKh7sB,UAAUq9X,WAAa,WACxB,IAAIrlW,EAAO,IAAI6wS,GAAWlkU,KAAKgB,QAAQsC,GAAK,iBAAkBtD,KAAK22sB,SAASlnrB,WAAYzvB,KAAK22sB,SAASryqB,OAAQ,EAAGtkC,KAAK+pE,aACtH/pE,KAAKsxB,UAAU3vB,YAAY3B,KAAK6tB,SAAS8V,cAActQ,KAK3DgjrB,EAAKh7sB,UAAUy7sB,YAAc,WACzB92sB,KAAKgB,QAAQwC,aAAa,aAAcxD,KAAKkyC,aAAe,gBAC5DlyC,KAAKgB,QAAQwC,aAAa,WAAYxD,KAAKipH,SAAS/7G,aAWxDmpsB,EAAKh7sB,UAAUq8sB,cAAgB,WAC3B,IAAIlrsB,EACAE,EAIJ,GAHIoiE,GAAe9uE,KAAKgB,QAAQsC,GAAK,uBAAyBtD,KAAK8yE,aAC/D9yE,KAAK8yE,WAAW6koB,mBAAqB7ooB,GAAe9uE,KAAKgB,QAAQsC,GAAK,uBAEtEtD,KAAK+xsB,WAAajjoB,GAAe9uE,KAAKgB,QAAQsC,GAAK,cAAgBwrE,GAAe9uE,KAAKgB,QAAQsC,GAAK,gBAAiB,CACrH,IAAIs0sB,EAAW9ooB,GAAe9uE,KAAKgB,QAAQsC,GAAK,gBAAgBsI,wBAC5DissB,EAAc/ooB,GAAe9uE,KAAKgB,QAAQsC,GAAK,aAAasI,wBAChEY,EAAQorsB,EAASprsB,KAAOqrsB,EAAYrrsB,KACpCE,EAAOkrsB,EAASlrsB,IAAMmrsB,EAAYnrsB,IAClCoiE,GAAe9uE,KAAKgB,QAAQsC,GAAK,aAAaE,aAAa,YAAa,aAAegJ,EAAO,IAAME,EAAM,KAC1G,IAAIorsB,EAAyBt3sB,SAASkN,uBAAuB,YAC7D,IAAKjQ,EAAkBq6sB,IAA2BA,EAAuBr7sB,OAAS,EAC9E,IAAK,IAAIN,EAAI,EAAGA,EAAI27sB,EAAuBr7sB,OAAQN,IAAK,CACpD,IAAI47sB,EAAmBD,EAAuB37sB,GAC9C47sB,EAAiBrzsB,MAAM8H,KAAOA,EAAO,KACrCursB,EAAiBrzsB,MAAMgI,IAAMA,EAAM,MAI/C,GAAI1M,KAAKquE,aAAaD,YAAc,EAAG,CAC/BpuE,KAAK8yE,YAAc9yE,KAAK8yE,WAAWkloB,cAAgBh4sB,KAAKquE,aAAa5uC,QACrEz/B,KAAK8yE,WAAWmloB,eAEpB,IAAIr0sB,EAAWpD,SAASosB,eAAe5sB,KAAKgB,QAAQsC,GAAK,sBACzD,IAAK7F,EAAkBmG,IAAaA,EAASuhE,kBAAoB,EAC7D,IAAShpE,EAAI,EAAGA,EAAIyH,EAAS2N,WAAW9U,OAAQN,IAAK,CACjD,IAAIg+B,EAAev2B,EAAS2N,WAAWpV,GACvC,GAA6B,MAAzBg+B,EAAan3B,QAEb,IAAK,IADDssE,EAAa9zD,WAAW2e,EAAa72B,GAAGpG,MAAM,KAAK,IAC9CqmB,EAAI,EAAGA,EAAI4W,EAAa5oB,WAAW9U,OAAQ8mB,IAAK,CACrD,IAAImtD,EAAYv2C,EAAa5oB,WAAWgS,GAClCmtD,EAAUptE,GAAG/E,QAAQ,mBAAqB,GACzCmyE,EAAUptE,GAAG/E,QAAQ,kBAAoB,GACzCmyE,EAAUptE,GAAG/E,QAAQ,0BAA4B,GACpDkyE,GAAkBC,EAAWpB,EAAYtvE,KAAKyrD,MAAOzrD,OAMrEA,KAAK8yE,YAAe9yE,KAAKiyE,gBAAkBjyE,KAAKyrD,OAChDzrD,KAAK8yE,WAAWoloB,gBAAe,KAI3C7B,EAAKh7sB,UAAU4oX,uBAAyB,WACpC,GAAIxmX,EAAkB+C,SAASosB,eAAe5sB,KAAKgB,QAAQsC,GAAK,uBAAwB,CACpF,IAAIuhY,EAAmB1jY,EAAc,OACjCmC,GAAItD,KAAKgB,QAAQsC,GAAK,qBACtBC,OAAQ,kCAEZvD,KAAKgB,QAAQW,YAAYkjY,KAGjCwxU,EAAKh7sB,UAAUo8sB,gBAAkB,WACV3ooB,GAAe9uE,KAAKgB,QAAQsC,GAAK,sBAChD9C,SAASosB,eAAe5sB,KAAKgB,QAAQsC,GAAK,oBAC1C9C,SAASosB,eAAe5sB,KAAKgB,QAAQsC,GAAK,kBAAkBoB,MAAM2ka,cAAgB,QAEtF,IAAIthO,EAAmBvnM,SAASkN,uBAAuB,YACvD,IAAKjQ,EAAkBsqM,IAAqBA,EAAiBtrM,OAAS,GAAKqyE,GAAe9uE,KAAKgB,QAAQsC,GAAK,sBACxG,IAAK,IAAInH,EAAI,EAAGA,EAAI4rM,EAAiBtrM,OAAQN,IAAK,CAC9C,IAAI47sB,EAAmBhwgB,EAAiB5rM,GACxC,IAAKsB,EAAkBs6sB,IAAqBA,EAAiB5yoB,kBAAoB,EAG7E,IAAK,IAFDgzoB,EAAcrpoB,GAAe9uE,KAAKgB,QAAQsC,GAAK,sBAAsBsI,wBACrEq9V,EAAgBn6R,GAAeipoB,EAAiBz0sB,IAAIsI,wBAC/C2X,EAAI,EAAGA,EAAIw0rB,EAAiB5yoB,kBAAmB5hD,IAAK,CACzD,IAAI60rB,EAAkBL,EAAiBxmsB,WAAWgS,GAC9C80rB,EAAiBD,EAAgBxssB,wBACrCwssB,EAAgB1zsB,MAAM8H,MAASxM,KAAK+xsB,UAAYv2rB,WAAW48rB,EAAgB1zsB,MAAM8H,MAC3E2rsB,EAAY3rsB,KAAOy8V,EAAcz8V,KAAQgP,WAAW48rB,EAAgB1zsB,MAAM8H,MACxEH,KAAKE,IAAI08V,EAAcz8V,KAAO2rsB,EAAY3rsB,MAAUgP,WAAW48rB,EAAgB1zsB,MAAM8H,MACrFH,KAAKE,IAAI08V,EAAcz8V,KAAO2rsB,EAAY3rsB,OAAa6rsB,EAAerisB,MAAQ,EAAM,KAC5FoisB,EAAgB1zsB,MAAMgI,KAAQ1M,KAAK+xsB,UAAYv2rB,WAAW48rB,EAAgB1zsB,MAAMgI,KAC1EyrsB,EAAYzrsB,IAAMu8V,EAAcv8V,IAAO8O,WAAW48rB,EAAgB1zsB,MAAMgI,KACtEL,KAAKE,IAAI08V,EAAcv8V,IAAMyrsB,EAAYzrsB,KAAS8O,WAAW48rB,EAAgB1zsB,MAAMgI,KACnFL,KAAKE,IAAI08V,EAAcv8V,IAAMyrsB,EAAYzrsB,MAAY2rsB,EAAetisB,OAAS,EAAM,QAM/GsgsB,EAAKh7sB,UAAUk8sB,WAAa,WACxB,IAAIe,EAAYt4sB,KAAK6wE,iBAAiB,GAEtC,GAAIynoB,EAAUvI,cAAwC,QAAxBuI,EAAU1F,WAA+C,SAAxB0F,EAAU1F,WAAuB,CAC5FplrB,GAAcxtB,KAAKgB,QAAQsC,GAAK,gBAChC,IAAI4R,EAAclV,KAAKgB,QAAQ4K,wBAC3B2ssB,EAAav4sB,KAAKgB,QAAQqT,cAAczI,wBACxCY,EAAOH,KAAKE,IAAI2I,EAAY1I,KAAO+rsB,EAAW/rsB,MAC9Cq0C,EAAQx0C,KAAKE,IAAI2I,EAAYxI,IAAM6rsB,EAAW7rsB,KAC9C1I,EAAM7C,EAAc,OACpBmC,GAAItD,KAAKgB,QAAQsC,GAAK,eAAgBC,OAAQ,8BACzCvD,KAAK+pE,YAAYh9D,EAAIP,GAAQ,aAAexM,KAAK+pE,YAAY/8D,EAAI6zC,EAThE,GASmF,eACpF7gD,KAAK+pE,YAAkB,OAAI,cACzB/pE,KAAK+pE,YAAiB,MAAI,0BAErC/pE,KAAKgB,QAAQW,YAAYqC,KAMjCqysB,EAAKh7sB,UAAU+mS,oBAAsB,WACjCpiS,KAAK6tB,SAAW,IAAIC,GAAY9tB,KAAKgB,QAAQsC,IAC7CtD,KAAK4uE,cAAgB,IAAI6ioB,GAAWzxsB,OAExCq2sB,EAAKh7sB,UAAUw7sB,qBAAuB,WAClC,IAAI92sB,EAAQC,KACRw4sB,EAAYx4sB,KAAKu1sB,eACjBkD,KACAC,KACJ14sB,KAAK6wE,oBACL7wE,KAAK0xD,OAAOtyD,QAAQ,SAAUsqE,GACV,UAAfA,EAAMhjE,KAAoB+xsB,EAAWj0sB,KAAKklE,GAASgvoB,EAAUl0sB,KAAKklE,KAEvE,IAAK,IAAIvtE,EAAI,EAAGA,EAAIs8sB,EAAWh8sB,OAAQN,IAAK,CACxC,IAAIm5sB,EAAYmD,EAAWt8sB,GAC3B,GAAIm5sB,EAAU99qB,SAAWghrB,IAAcr8sB,EAAG,CACtCm5sB,EAAUvF,aAAc,EACxB/vsB,KAAK+xsB,UAAqC,aAAxBuD,EAAU1C,UAC5B5ysB,KAAK6wE,iBAAiBrsE,KAAK8wsB,GAC3B,MAEC,GAAIn5sB,IAAMs8sB,EAAWh8sB,OAAS,EAAG,CAClCuD,KAAK6wE,iBAAiBrsE,KAAKi0sB,EAAW,IACtC,OAGRC,EAAU9grB,IAAI,SAAU+grB,EAAUC,GAC1BD,EAASnhrB,SACTz3B,EAAM8wE,iBAAiBrsE,KAAKm0sB,MAQxCtC,EAAKh7sB,UAAUghV,aAAe,WAC1B,IAAIrmU,EAAQhW,KAAKskC,OAAOtuB,MACpBq2T,EAAgBrsU,KAAKsxB,UAAU3uB,cAAc,IAAM3C,KAAKgB,QAAQsC,GAAK,cACzE,IAAK0S,EAAQ,GAAKhW,KAAKyvB,aAAehyB,EAAkB4uU,GAAgB,CACpE,IAAIm4D,EAAa,IAAItgE,GAAWlkU,KAAKgB,QAAQsC,GAAK,aAActD,KAAKyvB,WAAYzvB,KAAKskC,OAAQ,EAAG,IAAIpO,GAAKlgB,EAAQ,EAAGA,EAAQ,EAAGhW,KAAK21B,cAAc3f,MAAQA,EAAOhW,KAAK21B,cAAc5f,OAASC,IAC9LhW,KAAKsxB,UAAU3vB,YAAY3B,KAAK6tB,SAAS8V,cAAc6gW,SAGvDn4D,EAAc7oU,aAAa,OAAQxD,KAAKyvB,aAOhD4mrB,EAAKh7sB,UAAUihV,YAAc,SAAUp8S,EAAOx5B,EAAMgwB,EAAQwkT,GACxD,IACInlU,EADArR,EAAQw7B,EAAMkkQ,UAEdpuR,EAAQ3J,KAAKE,IAAKvM,KAAKy8B,OAAOjwB,KAAOxM,KAAKy8B,OAAOhwB,MAASzM,KAAK21B,cAAc3f,OACjF,GAAIkqB,EAAMzT,KAAM,CACRhvB,EAAkBy9U,KAClBA,EAAWl7U,KAAK6tB,SAASw+C,aAAc/oE,GAAItD,KAAKgB,QAAQsC,GAAK,kBAEjE,IAAIu1sB,EAAe16qB,GAASnoB,EAAOkqB,EAAMzT,KAAM/nB,GAC3Co/R,EAAct3Q,GAAYqsrB,EAAcn0sB,GAExCuuP,EAAa/kL,GADLzwE,EAAkBi5B,GAAW,IAAIR,GAAKl2B,KAAKy8B,OAAOjwB,KAAMxM,KAAKy8B,OAAO/vB,IAAK1M,KAAK21B,cAAc3f,MAAOhW,KAAK21B,cAAc5f,QAAU2gB,EACxGwJ,EAAMmvB,UAAWy0O,EAAap9R,GAC9DsM,EAAU,IAAIujB,GAAWv2B,KAAKgB,QAAQsC,GAAK,QAAUoD,EAAMusP,EAAWlmP,EAAGkmP,EAAWjmP,EAAG,QAAS6rsB,GAChGpL,EAAc,IAAIv3qB,GAAK+8N,EAAWlmP,EAAGkmP,EAAWjmP,EAAG82R,EAAY9tR,MAAO8tR,EAAY/tR,QAClF/U,EAAUuiC,GAAkBvwB,EAAStO,EAAOA,EAAM8xB,MAAO0kT,GAC7Dl6U,EAAQwC,aAAa,aAAcxD,KAAKkyC,aAAehS,EAAMzT,MAC7DzrB,EAAQwC,aAAa,YAAaxD,KAAKipH,UAAqB,UAATviH,EAAmB,EAAI,IAAIwG,aAChE,UAATxG,IAAqBw5B,EAAMu2qB,iBAAiBhqrB,MAAmB,aAAT/lB,KACvDqP,EAAS1J,KAAKE,IAAKkhsB,EAAYzgsB,EAAIhN,KAAKy8B,OAAO9vB,OAAU3M,KAAK21B,cAAc5f,QAC5E/V,KAAK+pE,YAAc,IAAI7zC,GAAKl2B,KAAKy8B,OAAOjwB,KAAMihsB,EAAYzgsB,EAAI,GAAIgJ,EAAOD,EAAS,KAEzE,aAATrP,GAAuBw5B,EAAMu2qB,iBAAiBhqrB,KAC9CzsB,KAAKs8U,YAAYp8S,EAAMu2qB,iBAAkB,WAAYhJ,EAAavyX,GAGlEl7U,KAAKsxB,UAAU3vB,YAAYu5U,QAI/BnlU,EAAS1J,KAAKE,IAAKvM,KAAKy8B,OAAO/vB,IAAM1M,KAAKy8B,OAAO9vB,OAAU3M,KAAK21B,cAAc5f,QAC9E/V,KAAK+pE,YAAc,IAAI7zC,GAAKl2B,KAAKy8B,OAAOjwB,KAAMxM,KAAKy8B,OAAO/vB,IAAKsJ,EAAOD,IAM9EsgsB,EAAKh7sB,UAAUyyY,UAAY,WACvB9tY,KAAK0/U,YACL1/S,GAAUhgC,OAKdq2sB,EAAKh7sB,UAAUqkV,UAAY,WAMvB,GALAlyT,GAAcxtB,KAAKgB,QAAQsC,GAAK,sBAChCkqB,GAAcxtB,KAAKgB,QAAQsC,GAAK,gBAC5B9C,SAASkN,uBAAuB,kBAAkB,IAClDnJ,EAAO/D,SAASkN,uBAAuB,kBAAkB,IAEzD1N,KAAKsxB,UAAW,CAChB,KAAOtxB,KAAKsxB,UAAU/f,WAAW9U,OAAS,GACtCuD,KAAKsxB,UAAUhsB,YAAYtF,KAAKsxB,UAAU1U,aAEzC5c,KAAKsxB,UAAUwJ,iBAAmB96B,KAAKsxB,UAAU7wB,YAClD8D,EAAOvE,KAAKsxB,aAOxB+krB,EAAKh7sB,UAAUqpY,WAAa,WAExBn/X,GAAanB,IAAIpE,KAAKgB,QAAS,QAAShB,KAAK84sB,YAAa94sB,MAE1DuF,GAAanB,IAAIpE,KAAKgB,QAAS,WAAYhB,KAAK+4sB,kBAAmB/4sB,MACnEuF,GAAanB,IAAIpE,KAAKgB,QAASwK,GAAQ0+E,gBAAiBlqF,KAAKg5sB,eAAgBh5sB,MAC7EuF,GAAanB,IAAIpE,KAAKgB,QAASwK,GAAQ2+E,eAAgBnqF,KAAKi5sB,eAAgBj5sB,MAC5EuF,GAAanB,IAAIpE,KAAKgB,QAASwK,GAAQ4+E,cAAepqF,KAAKk5sB,cAAel5sB,MAE1EnE,OAAOa,iBAAkB8O,GAAQomB,SAAY,gBAAiB/1B,QAAU,wBAAyBA,OAAW,oBAAsB,SAAUmE,KAAKm5sB,aAAa79sB,KAAK0E,QAKvKq2sB,EAAKh7sB,UAAUopY,aAAe,WAE1Bl/X,GAAahB,OAAOvE,KAAKgB,QAAS,QAAShB,KAAK84sB,aAEhDvzsB,GAAahB,OAAOvE,KAAKgB,QAAS,WAAYhB,KAAK+4sB,mBACnDxzsB,GAAahB,OAAOvE,KAAKgB,QAASwK,GAAQ0+E,gBAAiBlqF,KAAKg5sB,gBAChEzzsB,GAAahB,OAAOvE,KAAKgB,QAASwK,GAAQ2+E,eAAgBnqF,KAAKi5sB,gBAC/D1zsB,GAAahB,OAAOvE,KAAKgB,QAASwK,GAAQ4+E,cAAepqF,KAAKk5sB,eAE9Dr9sB,OAAOe,oBAAqB4O,GAAQomB,SAAY,gBAAiB/1B,QAAU,wBAAyBA,OAAW,oBAAsB,SAAUmE,KAAKm5sB,eAMxJ9C,EAAKh7sB,UAAUy9sB,YAAc,SAAUj4sB,GACnC,IAAIs4C,EAAYt4C,EAAEsG,OACdq/B,EAAW2S,EAAU71C,GACrBiK,GACAsrB,QAAQ,EAAOpB,KNlgBR,QMkgBqBtwB,OAAQq/B,EAAUz5B,EAAGlM,EAAEuzC,QAASpnC,EAAGnM,EAAEwzC,SAGrE,GADAr0C,KAAKwmB,QNpgBM,QMogBSjZ,IACwB,IAAxC4rC,EAAU71C,GAAG/E,QAAQ,cAAsB,CAC3C,IAAI+wE,EAAav6C,SAASokB,EAAU71C,GAAGpG,MAAM,gBAAgB,GAAGA,MAAM,KAAK,GAAI,IAC/EyyE,GAAkBnpC,EAAUxmC,KAAK0xD,OAAO4d,GAAYkvjB,kBAAmBx+nB,KNhfxD,iBMkffA,KAAKwysB,cACLxysB,KAAKwysB,aAAa4G,YAAYv4sB,GAE9Bb,KAAKo0sB,cACLp0sB,KAAKo0sB,aAAaiF,YAAYx4sB,GAE7B0M,EAAUsrB,QACX74B,KAAK+N,ONhhBE,QMghBYorC,IAM3Bk9pB,EAAKh7sB,UAAU69sB,cAAgB,SAAUr4sB,GACrC,IAAIiL,EACAI,EAEAg1U,EACOlhV,KAAKgB,QAAQ4K,wBACV/K,EAAEsG,OAmBhB,OAlBiC,IAA7BtG,EAAE6F,KAAKnI,QAAQ,UACfyB,KAAK4xB,SAAU,EAEf9lB,GADAo1U,EAAWrgV,GACM89D,eAAe,GAAG7yD,MACnCI,EAAQg1U,EAASviR,eAAe,GAAGzyD,MAC1Bg1U,EAAS/5U,SAGlBnH,KAAK4xB,QAA4B,UAAlB/wB,EAAEw/U,YACjBv0U,EAAQjL,EAAEiL,MACVI,EAAQrL,EAAEqL,MACDrL,EAAEsG,QAEXnH,KAAK4xB,SACL5xB,KAAKyhV,aAAa5gV,EAAGiL,EAAOI,GAAO,GAEvClM,KAAK+N,OAAOvC,GAAQ4+E,cAAevpF,GACnCA,EAAE2kB,kBACK,GAKX6wrB,EAAKh7sB,UAAU29sB,eAAiB,SAAUn4sB,GAK3Bb,KAAKgB,QAAQ4K,wBACV/K,EAAEsG,OAChBnH,KAAK+N,OAAOvC,GAAQ0+E,gBAAiBrpF,IAKzCw1sB,EAAKh7sB,UAAU09sB,kBAAoB,SAAUl4sB,GACzCb,KAAK+N,OAAO,WAAYlN,IAM5Bw1sB,EAAKh7sB,UAAU49sB,eAAiB,SAAUp4sB,GAMjB,cAAXA,EAAE6F,KAAwB7F,EAAEsG,OACzBtG,EAAEsG,OAIXnH,KAAKwysB,cACLxysB,KAAKwysB,aAAaj+X,WAAW1zU,GAE7Bb,KAAKo0sB,cACLp0sB,KAAKo0sB,aAAakF,WAAWz4sB,GAEjCb,KAAKkvH,YAAYruH,GACjBb,KAAK+N,OAAOvC,GAAQ2+E,eAAgBtpF,IAExCw1sB,EAAKh7sB,UAAU6zH,YAAc,SAAUruH,GACrBA,EAAEsG,OAQhB,OAHKnH,KAAK4xB,SACN5xB,KAAKyhV,aAAa5gV,EAAGA,EAAEiL,MAAOjL,EAAEqL,QAE7B,GAEXmqsB,EAAKh7sB,UAAUomV,aAAe,SAAUnlV,EAAOyQ,EAAGC,EAAG4kB,GAClCt1B,EAAM6K,OAAO7D,KACTtD,KAAKgB,QAAQsC,GAAK,cAAmBhH,EAAM6K,OAAO0U,YAAYtd,QAAQ,QAAU,EAC/FmzB,GAAY1xB,KAAK8jsB,cAAcr3qB,KAAMzsB,KAAK8jsB,cAAc1/Z,UAAUt3Q,KAAM/f,EAAGC,EAAGhN,KAAKgB,QAAQ4D,YAAa5E,KAAKgB,QAAQ0wC,aAAc1xC,KAAKgB,QAAQsC,GAAK,qBAAsBiqB,GAAWvtB,KAAKgB,QAAQsC,GAAK,sBAAuBsuB,GAG/NpE,GAAcxtB,KAAKgB,QAAQsC,GAAK,uBAQxC+ysB,EAAKh7sB,UAAU89sB,aAAe,SAAUt4sB,GACpC,IAAId,EAAQC,KACRC,GACAw3B,KNxmBQ,SMymBRwpT,aAAcjhV,KAAK21B,cACnBqrT,YAAa,IAAI5zT,GAAK,EAAG,GACzB+7C,KAAMnpE,MAgBV,OAdIA,KAAK65U,UACL35U,aAAaF,KAAK65U,UAElB75U,KAAKgB,QAAQ8C,UAAUK,SAAS,YAChCnE,KAAK65U,SAAW15U,WAAW,WACvBJ,EAAM0kY,eACN1kY,EAAM+tY,YACN/tY,EAAM4mF,YAAa,EACnB5mF,EAAM2kY,aACNzkY,EAAK+gV,YAAcjhV,EAAM41B,cACzB51B,EAAMymB,QNvnBF,SMunBkBvmB,GACtBF,EAAMgsG,UACP,OAEA,GAEXsqmB,EAAKh7sB,UAAUk+sB,eAAiB,SAAU9qoB,EAAgBL,GACtD,IAGIl6D,EAAWq1D,GAHCkF,EAAejF,SACfiF,EAAehF,UAClBzpE,KAAK4uE,cAAcC,gBAAgB7uE,KAAK6wE,iBAAiB,IACP7wE,KAAK6wE,iBAAiB,GAAI7wE,MACrFA,KAAK8yE,YACL9yE,KAAK8yE,WAAW0moB,eAAetlsB,EAAUk6D,EAAY,WAM7DiooB,EAAKh7sB,UAAUs+Q,SAAW,SAAUjwM,GAChC1pE,KAAK0xD,OAAOltD,KAAK,IAAIsrsB,GAAc9vsB,KAAK0xD,OAAO,GAAI,SAAUgY,IAC7D1pE,KAAKkyD,WAKTmkpB,EAAKh7sB,UAAU8va,YAAc,SAAUl5Z,GACnCjS,KAAK0xD,OAAOrpC,OAAOpW,EAAO,GAC1BjS,KAAKkyD,WAKTmkpB,EAAKh7sB,UAAUo+sB,UAAY,SAAUnqoB,EAAYw9P,GAC7C,IAAI4sY,EAAgB15sB,KAAK0xD,OAAO4d,GAAYk9T,eAC5CktU,EAAcl1sB,KAAK,IAAI4pU,GAAesrY,EAAc,GAAI,iBAAkB5sY,IAC1E9sU,KAAKkyD,WAKTmkpB,EAAKh7sB,UAAUsS,WAAa,WACxB3N,KAAKivE,KAAO,IAAIy7B,GAChB1qG,KAAKoiV,qBACLpiV,KAAKg4G,aAAe,IAAIR,GAAKx3G,KAAKu/B,gBAAiBv/B,KAAKqiV,sBAAuBriV,KAAKgO,SAKxFqosB,EAAKh7sB,UAAU+mV,mBAAqB,WAEhCpiV,KAAKqiV,uBACDI,OAAQ,UACR5nJ,KAAM,OACN6nJ,QAAS,WACTC,IAAK,MACLC,MAAO,UAMfyzX,EAAKh7sB,UAAUiX,QAAU,WACrBtS,KAAKykY,eACLt5S,EAAO9vF,UAAUiX,QAAQhR,KAAKtB,OAKlCq2sB,EAAKh7sB,UAAUkkC,cAAgB,WAC3B,MAAO,QAMX82qB,EAAKh7sB,UAAUmxG,eAAiB,WAC5B,MAAO,IAMX6pmB,EAAKh7sB,UAAUmsF,kBAAoB,SAAUiF,EAASC,GAElD,IAAK,IADDqf,GAAS,EACJ3tG,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKmvF,GAAUruF,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAE9D,OADWyE,EAAGzE,IAEV,IAAK,aACD4B,KAAKq8U,eACL,MACJ,IAAK,SACL,IAAK,QACDr8U,KAAK8tY,YACL/hS,GAAS,GAIjBA,GACA/rG,KAAK+rG,UAQbsqmB,EAAKh7sB,UAAUw1F,gBAAkB,WAC7B,IAAIgB,KACAptF,EAAYzE,KAAK25sB,kBAAkB35sB,KAAK0xD,QACxCspV,GAAmB,EAgEvB,OA/DAh7Y,KAAK42D,YAAYh/B,IAAI,SAAU+2B,EAAY18C,GACvC+oY,EAAyC,MAAtBrsV,EAAWv0B,UAE9Bp6B,KAAK45sB,mBACL/nnB,EAAQrtF,MACJ6sF,OAAQ,SACRpxF,MAAOD,QAGXyE,EAAUy+V,WACVrxQ,EAAQrtF,MACJ6sF,OAAQ,YACRpxF,MAAOD,QAGXyE,EAAUmrE,WACViiB,EAAQrtF,MACJ6sF,OAAQ,YACRpxF,MAAOD,QAGXA,KAAKo2U,eAAe5+S,SACpBq6D,EAAQrtF,MACJ6sF,OAAQ,SACRpxF,MAAOD,SAGXA,KAAKquE,aAAa5uC,QAAUz/B,KAAKquE,aAAaD,WAAapuE,KAAKquE,aAAampW,UAC7E3lV,EAAQrtF,MACJ6sF,OAAQ,OACRpxF,MAAOD,QAGXA,KAAK65sB,oBACLhonB,EAAQrtF,MACJ6sF,OAAQ,SACRpxF,MAAOD,QAGXA,KAAK85sB,sBACLjonB,EAAQrtF,MACJ6sF,OAAQ,YACRpxF,MAAOD,QAGXA,KAAK+5sB,uBACLlonB,EAAQrtF,MACJ6sF,OAAQ,iBACRpxF,MAAOD,QAGXyE,EAAUotB,SACVggE,EAAQrtF,MACJ6sF,OAAQ,cACRpxF,MAAOD,QAGXg7Y,GACAnpT,EAAQrtF,MACJ6sF,OAAQ,cACRpxF,MAAOD,KAAMy0Y,MAGd5iT,GAKXwknB,EAAKh7sB,UAAUw+sB,iBAAmB,WAC9B,IAAIp1sB,GAAY,EAShB,OARAzE,KAAK0xD,OAAOtyD,QAAQ,SAAUsqE,EAAO4F,GACjC,IAAK,IAAInzE,EAAI,EAAGA,EAAIutE,EAAM8iU,eAAe/vY,OAAQN,IAC7C,GAAIutE,EAAM8iU,eAAerwY,GAAGq7B,QAAS,CACjC/yB,GAAY,EACZ,SAILA,GAKX4xsB,EAAKh7sB,UAAUy+sB,mBAAqB,WAEhC,IAAK,IADDr1sB,GAAY,EACPtI,EAAI,EAAGA,EAAI6D,KAAK0xD,OAAOj1D,OAAQN,IACpC,GAAI6D,KAAK0xD,OAAOv1D,GAAGuwY,kBAAkBl1W,QAAS,CAC1C/yB,GAAY,EACZ,MAGR,OAAOA,GAKX4xsB,EAAKh7sB,UAAU0+sB,oBAAsB,WACjC,IAAIt1sB,GAAY,EAShB,OARAzE,KAAK0xD,OAAOtyD,QAAQ,SAAUsqE,EAAO4F,GACjC,IAAK,IAAInzE,EAAI,EAAGA,EAAIutE,EAAMsH,uBAAuBv0E,OAAQN,IACrD,GAAIutE,EAAMsH,uBAAuB70E,GAAGq7B,QAAS,CACzC/yB,GAAY,EACZ,SAILA,GAKX4xsB,EAAKh7sB,UAAUu+sB,gBAAkB,WAE7B,IAAK,IADDn1sB,GAAY,EACPrG,EAAK,EAAGyE,EAAK7C,KAAK0xD,OAAQtzD,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACrD,IAAIsrE,EAAQ7mE,EAAGzE,GACf,GAAI4B,KAAKg6sB,iBAAiBtwoB,GAAQ,CAC9BjlE,GAAY,EACZ,OAGR,OAAOA,GAMX4xsB,EAAKh7sB,UAAU2+sB,iBAAmB,SAAUtwoB,GAExC,IAAK,IADDjlE,GAAY,EACPrG,EAAK,EAAGyE,EAAK6mE,EAAM0poB,eAAgBh1sB,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAE9D,GADayE,EAAGzE,GACLo5B,QAAS,CAChB/yB,GAAY,EACZ,OAGR,OAAOA,GAKX4xsB,EAAKh7sB,UAAU0F,MAAQ,SAAUuC,GACX,IAAIs2U,GAAY55U,MACtBe,MAAMuC,IAOtB+ysB,EAAKh7sB,UAAU6+U,OAAS,SAAUxzU,EAAMqqN,EAAU33L,GAC9B,IAAIwgT,GAAY55U,MACtBk6U,OAAOxzU,EAAMqqN,EAAU33L,IAKrCi9qB,EAAKh7sB,UAAUs+sB,kBAAoB,SAAUjopB,EAAQuopB,EAAgBC,EAAiBC,EAAkBv0J,EAAaxrB,QAC1F,IAAnB6/K,IAA6BA,GAAiB,QAC1B,IAApBC,IAA8BA,GAAkB,QAC3B,IAArBC,IAA+BA,GAAmB,QAClC,IAAhBv0J,IAA0BA,GAAc,QACxB,IAAhBxrB,IAA0BA,GAAc,GAI5C,IAAK,IAHDp/M,EACAwqF,EAEKpna,EAAK,EAAGg8sB,EAAW1opB,EAAQtzD,EAAKg8sB,EAAS39sB,OAAQ2B,IAAM,CAC5D,IAAIsrE,EAAQ0woB,EAASh8sB,GAErB,GADA67sB,EAAiBvwoB,EAAMlyC,SAAWyirB,EAC9BvwoB,EAAMlyC,QAAS,CACfwjT,EAAUtxQ,EAAM0poB,eAChB5tS,EAAU97V,EAAM8iU,eAEhB,IAAK,IAAI3pY,EAAK,EAAGw3sB,EADA3woB,EAAMsH,uBAC6BnuE,EAAKw3sB,EAAiB59sB,OAAQoG,IAAM,CACpF,IAAIy3sB,EAAaD,EAAiBx3sB,GAC9By3sB,EAAW9irB,UACXouhB,EAAc00J,EAAWC,kBAAkB96qB,QAAUmmhB,EACrDxrB,EAAckgL,EAAW97E,kBAAkB/+lB,QAAU26f,GAG7D,IAAK,IAAIn2hB,EAAK,EAAGu2sB,EAAYh1S,EAASvha,EAAKu2sB,EAAU/9sB,OAAQwH,IAAM,CAC/D,IAAI6oU,EAAS0tY,EAAUv2sB,GAMvB,GALI6oU,EAAOt1S,UACP2irB,EAAmBrtY,EAAOshE,gBAAgB52W,SAAW2irB,EACrDv0J,EAAc94O,EAAO0xT,kBAAkB/+lB,QAAUmmhB,EACjDxrB,EAActtN,EAAOytY,kBAAkB96qB,QAAU26f,GAEjD+/K,EACA,MAGR,IAAK,IAAI1vsB,EAAK,EAAGgwsB,EAAYz/X,EAASvwU,EAAKgwsB,EAAUh+sB,OAAQgO,IAAM,CAC/D,IAAIiwsB,EAASD,EAAUhwsB,GAMvB,GALIiwsB,EAAOljrB,UACP2irB,EAAmBO,EAAOtsU,gBAAgB52W,SAAW2irB,EACrDv0J,EAAc80J,EAAOl8E,kBAAkB/+lB,QAAUmmhB,EACjDxrB,EAAcsgL,EAAOH,kBAAkB96qB,QAAU26f,GAEjD+/K,EACA,MAGRA,EAAmBzwoB,EAAM0kU,gBAAgB52W,SAAW2irB,EACpDv0J,EAAcl8e,EAAM80jB,kBAAkB/+lB,QAAUmmhB,EAChDxrB,EAAc1wd,EAAM6woB,kBAAkB96qB,QAAU26f,EAEpD,GAAI6/K,GAAkBC,GAAmBC,EACrC,MAGR,OACIzwoB,MAAOuwoB,EAAgBS,OAAQR,EAAiBrorB,QAASsorB,EACzDvqoB,UAAWg2e,EAAa1iN,UAAWk3L,IAG3Cvvc,IACI3jF,EAAS,OACVmvsB,EAAKh7sB,UAAW,kBAAc,GACjCwvF,IACI3jF,GAAS,IACVmvsB,EAAKh7sB,UAAW,4BAAwB,GAC3CwvF,IACI3jF,EAAS,OACVmvsB,EAAKh7sB,UAAW,cAAU,GAC7BwvF,IACI3jF,EAAS,OACVmvsB,EAAKh7sB,UAAW,aAAS,GAC5BwvF,IACI3jF,EAAS,OACVmvsB,EAAKh7sB,UAAW,cAAU,GAC7BwvF,IACI9iF,KAAY6nsB,KACbyG,EAAKh7sB,UAAW,qBAAiB,GACpCwvF,IACI9iF,KAAYqzU,KACbi7X,EAAKh7sB,UAAW,oBAAgB,GACnCwvF,IACI9iF,KAAY6tU,KACbygY,EAAKh7sB,UAAW,sBAAkB,GACrCwvF,IACIxiF,KAAeynsB,KAChBuG,EAAKh7sB,UAAW,cAAU,GAC7BwvF,IACIxiF,KAAeksY,KAChB8hU,EAAKh7sB,UAAW,mBAAe,GAClCwvF,IACI9iF,KAAY+0T,KACbu5Y,EAAKh7sB,UAAW,cAAU,GAC7BwvF,IACI9iF,GAAUyuB,MAAO,UAAWxgB,MAAO,GAAK4mT,KACzCy5Y,EAAKh7sB,UAAW,cAAU,GAC7BwvF,IACI3jF,EAAS,aACVmvsB,EAAKh7sB,UAAW,aAAS,GAC5BwvF,IACI3jF,EAAS,aACVmvsB,EAAKh7sB,UAAW,sBAAkB,GACrCwvF,IACI3jF,EAAS,IACVmvsB,EAAKh7sB,UAAW,sBAAkB,GACrCwvF,IACI3jF,EAAS,OACVmvsB,EAAKh7sB,UAAW,mBAAe,GAClCwvF,IACI3jF,EAAS,IACVmvsB,EAAKh7sB,UAAW,gBAAY,GAC/BwvF,IACI3jF,GAAWsiE,SAAU,KAAMC,UAAW,QACvC4soB,EAAKh7sB,UAAW,sBAAkB,GACrCwvF,IACI9iF,KAAYkosB,KACboG,EAAKh7sB,UAAW,gBAAY,GAC/BwvF,IACI/hF,KACDutsB,EAAKh7sB,UAAW,YAAQ,GAC3BwvF,IACI/hF,KACDutsB,EAAKh7sB,UAAW,mBAAe,GAClCwvF,IACI/hF,KACDutsB,EAAKh7sB,UAAW,cAAU,GAC7BwvF,IACI/hF,KACDutsB,EAAKh7sB,UAAW,aAAS,GAC5BwvF,IACI/hF,KACDutsB,EAAKh7sB,UAAW,mBAAe,GAClCwvF,IACI/hF,KACDutsB,EAAKh7sB,UAAW,kBAAc,GACjCwvF,IACI/hF,KACDutsB,EAAKh7sB,UAAW,cAAU,GAC7BwvF,IACI/hF,KACDutsB,EAAKh7sB,UAAW,qBAAiB,GACpCwvF,IACI/hF,KACDutsB,EAAKh7sB,UAAW,qBAAiB,GACpCwvF,IACI/hF,KACDutsB,EAAKh7sB,UAAW,qBAAiB,GACpCwvF,IACI/hF,KACDutsB,EAAKh7sB,UAAW,qBAAiB,GACpCwvF,IACI/hF,KACDutsB,EAAKh7sB,UAAW,sBAAkB,GACrCwvF,IACI/hF,KACDutsB,EAAKh7sB,UAAW,sBAAkB,GACrCwvF,IACI/hF,KACDutsB,EAAKh7sB,UAAW,sBAAkB,GACrCwvF,IACI/hF,KACDutsB,EAAKh7sB,UAAW,uBAAmB,GACtCwvF,IACI/hF,KACDutsB,EAAKh7sB,UAAW,mBAAe,GAClCwvF,IACI/hF,KACDutsB,EAAKh7sB,UAAW,uBAAmB,GACtCwvF,IACI/hF,KACDutsB,EAAKh7sB,UAAW,0BAAsB,GACzCwvF,IACI/hF,KACDutsB,EAAKh7sB,UAAW,uBAAmB,GACtCwvF,IACI/hF,KACDutsB,EAAKh7sB,UAAW,mBAAe,GAClCwvF,IACI/hF,KACDutsB,EAAKh7sB,UAAW,uBAAmB,GACtCwvF,IACI/hF,KACDutsB,EAAKh7sB,UAAW,yBAAqB,GACxCwvF,IACI/hF,KACDutsB,EAAKh7sB,UAAW,2BAAuB,GAC1Cg7sB,EAAOxrnB,IACHzhF,GACDitsB,IAEL9qmB,ICrlCEovmB,GAAwB,WACxB,SAASA,EAAOxxoB,GAIZnpE,KAAKsD,GAAK,GACVtD,KAAKmpE,KAAOA,EACZnpE,KAAK46sB,oBAqLT,OA/KAD,EAAOt/sB,UAAUk5sB,aAAe,SAAUnB,EAAgB5joB,EAAWh5C,EAAOzE,EAAOyirB,EAAavM,EAAW34nB,EAAY5F,EAAOqpB,GAC1H,IAAI/kB,EAAYtE,EAAMsE,UAClBqjoB,EAAiB+B,EAAe/B,eAChC1wnB,EAAanR,EAAU6hoB,GACvB3njB,EAAapyH,OAAOk4C,EAAU6hoB,IAC9BwJ,EAAcvjrB,OAAOk4C,EAAU4joB,EAAe9B,YAClD,GAAItvpB,MAAM64pB,IAAgB74pB,MAAM0nG,IAAejsJ,EAAkBkjF,GAC7D,OAAO,KAEX,IAAI/zE,EAAS5M,KAAK86sB,iBAAiB1H,EAAezgX,UAAWygX,EAAe1gX,UAAWmoX,EAAa9orB,EAAMhS,IAAKgS,EAAMzlB,KAEjHilsB,EADe,IAAIJ,GAAanxsB,KAAKmpE,MACXmxnB,gBAAgB8Y,EAAe1ynB,aAAcgpE,EAAY/oE,GACvF4wnB,EAAaA,GAA0B/6qB,EAKvC,IAAK,IAJDukrB,OACAC,EAAW,EACX11a,EAAe,EACfnkN,EAAgB,EACXhlF,EAAI,EAAG0F,EAAMmsE,EAAUvxE,OAAQN,EAAI0F,EAAK1F,IAAK,CAClD,IAAIwxB,EAAQqgD,EAAU7xE,GAEtB,GADAwxB,EAAQA,EAAgB,SACpB6hD,EAAU9F,EAAM+F,iBAAmB9hD,EAAM+7C,EAAMgG,mBAC/C,GAAK1B,EAAU7xE,GAAoB,gBAU/B,IAAK,IADD8+sB,EAAUjtoB,EAAU7xE,GACfonB,EAAI,EAAGA,EAAI03rB,EAAQx+sB,OAAQ8mB,IAChCw3rB,EAAYv2sB,KAAKxE,KAAKigD,UAAUg7pB,EAAQ13rB,QAEpC+hR,GADJnkN,EAAgB45nB,EAAYA,EAAYt+sB,OAAS,GAAGA,UAEhD6oS,EAAenkN,EACf65nB,EAAWD,EAAYt+sB,OAAS,QAdxCs+sB,EAAYv2sB,KAAKxE,KAAKigD,UAAU+tB,EAAU7xE,QAEtCmpS,GADJnkN,EAAgB45nB,EAAYA,EAAYt+sB,OAAS,GAAGA,UAEhD6oS,EAAenkN,EACf65nB,EAAWD,EAAYt+sB,OAAS,GAgBhD,IAAIi3B,EAASg5C,GAAsBquoB,EAAYC,IAC/C,IAAKv9sB,EAAkBi2B,GAAS,CAC5B,IAAIzS,EAAuC,aAA7BjhB,KAAKmpE,KAAKkB,eAAgC32C,EAAU,GAAMA,EAAU,EAC9EnmB,GACAsrB,QAAQ,EAAOpB,KAAM64qB,GAAiBhsqB,OAAQ8uqB,EAAe9uqB,OAC7DjW,GAAIqF,EAAU,EAAGpF,GAAIrN,EAASzkB,KAAMgzE,EAAW5xC,KAAM2zqB,EAAYpooB,KAAMnpE,KAAKmpE,KAC5Ev8D,OAAQA,GAGZ,GADA5M,KAAKmpE,KAAK3iD,QAAQ8prB,GAAiB/isB,GAC/BA,EAAUsrB,OACV,OAEJ,IAAIqirB,OAAgB,EACpB,GAAkC,WAA9B9H,EAAe+H,WAAyB,CACxC,IAAIj6rB,EAAS,IAAIijT,GAAankU,KAAKsD,GAAIiK,EAAUqwB,KAAMrwB,EAAU+2B,OAAQ8uqB,EAAe3lsB,QAAS,EAAG,EAAGF,EAAUX,OAAQ,MACzHsusB,EAAgBx3qB,GAAW1jC,KAAKmpE,KAAMjoD,EAAQ6xE,OAE7C,CACD,IAAI/lF,EAAiC,aAA7BhN,KAAKmpE,KAAKkB,eAAiC98D,EAAU+gB,GAAK1hB,EAAWW,EAAU+gB,GAAK1hB,EACxFwrG,EAAY,IAAI8rN,GAAWlkU,KAAKsD,GAAIiK,EAAUqwB,KAAMrwB,EAAU+2B,OAAQ8uqB,EAAe3lsB,QAAS,IAAIyoB,GAAK,EAAG,EAAY,EAATtpB,EAAqB,EAATA,GAAa,EAAG,GAC7IW,EAAU8gB,IAAMzhB,EAChBW,EAAU+gB,GAAKthB,EACfkusB,EAAgBv3qB,GAAc3jC,KAAKmpE,KAAMivC,EAAWrlB,GAExD/yF,KAAK46sB,iBAAiBp2sB,MAClB42sB,WAAY9roB,EACZ+roB,YAAa7G,EACb8G,UAAWrT,EACXjnsB,QAASk6sB,EACTxnrB,QAAU3mB,EAAGQ,EAAU8gB,GAAIrhB,EAAGO,EAAU+gB,MAE5C,IAAIiK,EAAsC,IAA5BmxC,EAAMuoT,mBAA2Bx0X,EAAkBuC,KAAKmpE,KAAK2J,YACvE6b,EAAYxgB,GAAanuE,KAAKmpE,KAAMO,EAAOnxC,GAC3CkzB,EAAQkjC,EAAiB,MACzB4snB,EAAa5snB,EAAoB,SACjCz6E,EAAW,IAAIk+D,GAAapyE,KAAKmpE,KAAK4ooB,UAAaxksB,EAAY,IAAMA,EAAU8gB,GAAKktrB,EAAWxusB,GAAK0+C,EAAUzrD,KAAKmpE,KAAK4ooB,UAAaxksB,EAAY,IAAMA,EAAU+gB,GAAKitrB,EAAWvusB,GAAKy+C,GAC1LyvpB,EAAc13sB,aAAa,YAAa,cAAiB0Q,EAAU,EAAI,IAAOA,EAAU,EAAI,MAC5F,IAAIwmsB,EAAUtH,EAAe7voB,WAAW9mE,OAAS,IAAOwrsB,EAAY,SAAW,KAC7C,WAA9BmL,EAAe+H,YACfjnsB,EAASnH,GAAKH,EACdsH,EAASlH,GAAKJ,GAAuC,aAA7B5M,KAAKmpE,KAAKkB,eAAgC,GAAK,IAGvEz9D,EAAS,EAETwmsB,EAAenhV,kBAAoB,GACnC/hT,GAAegroB,EAAe9H,EAAeoI,eAAgBpI,EAAenhV,kBAAmB/9W,EAAUlU,KAAKmpE,KAAMuxoB,EAAQ9tsB,KAIxI+tsB,EAAOt/sB,UAAU4kD,UAAY,SAAUtyB,EAAOgK,GAI1C,OAHAhK,EAAMiK,IAAI,SAAUjX,EAAS1O,GACzB0lB,EAAOnzB,KAAK,IAAI01C,GAAMv5B,EAAe,MAAK,EAAGA,EAAe,MAAK,MAE9DgX,GAEXgjrB,EAAOt/sB,UAAUy/sB,iBAAmB,SAAU/6rB,EAAKzT,EAAKtP,EAAO8sI,EAAUC,GACrE,IACI0xkB,GAAkBnvsB,EAAMyT,GAAO,KADpB,KAAOgqH,EAAWD,IAAc9sI,EAAQ8sI,IACF/pH,EAIrD,OAHIgqH,IAAaD,IACb2xkB,GAAkBnvsB,EAAMyT,GAAO,IAAQA,GAEpC07rB,GAKXd,EAAOt/sB,UAAUg+sB,YAAc,SAAUx4sB,GACrC,IAAIsG,EAAStG,EAAEsG,OAAO7D,GACtB,IAAwC,IAApC6D,EAAO5I,QAAQ,gBAAnB,CAGA,IAAI/B,EAAOwD,KAAK07sB,UAAUv0sB,GAC1B,IAAI1J,EAAkBjB,GAAtB,CAGA,IAAI+Q,GACAsrB,QAAQ,EAAOpB,KPzCF,cOyCqBj7B,KAAMA,EAAM2sE,KAAMnpE,KAAKmpE,KACzDhiE,OAAQA,EAAQ4F,EAAGlM,EAAEuzC,QAASpnC,EAAGnM,EAAEwzC,SAEvCr0C,KAAKmpE,KAAK3iD,QP5CO,cO4CcjZ,MAKnCotsB,EAAOt/sB,UAAUqgtB,UAAY,SAAUv0sB,GACnC,IAAI7D,EAAK6D,EAAOjK,MAAM,gBAClB+U,EAAQ8iB,SAASzxB,EAAG,GAAGpG,MAAM,KAAK,GAAI,IACtCwsE,EAAQ1pE,KAAKmpE,KAAKzX,OAAOz/C,GAE7B,GAAI9K,EAAO5I,QAAQ,kBAAoB,EAAG,CACtC,IAAIi2sB,EAAcz/qB,SAASzxB,EAAG,GAAGpG,MAAM,iBAAiB,GAAI,IAC5D,IAAK8kD,MAAMwypB,GAEP,OADO9qoB,EAAMnG,WAAWixoB,GAIhC,OAAO,MAKXmG,EAAOt/sB,UAAUi+sB,WAAa,SAAUz4sB,GACpC,IAAIsG,EAAStG,EAAEsG,OAAO7D,GACtB,IAAwC,IAApC6D,EAAO5I,QAAQ,gBAAnB,CAGA,IAAI/B,EAAOwD,KAAK07sB,UAAUv0sB,GAC1B,IAAI1J,EAAkBjB,GAAtB,CAGA,IAAI+Q,GACAsrB,QAAQ,EAAOpB,KAAM84qB,GAAiB/zsB,KAAMA,EAAM2sE,KAAMnpE,KAAKmpE,KAC7DhiE,OAAQA,EAAQ4F,EAAGlM,EAAEuzC,QAASpnC,EAAGnM,EAAEwzC,SAEvCr0C,KAAKmpE,KAAK3iD,QAAQ+prB,GAAiBhjsB,MAKvCotsB,EAAOt/sB,UAAUkkC,cAAgB,WAC7B,MAAO,UAOXo7qB,EAAOt/sB,UAAUiX,QAAU,SAAU62D,KAK9BwxoB,KC5LPvlY,GAAwB,WACxB,SAASA,EAAOjsQ,GACZnpE,KAAKmpE,KAAOA,EACZnpE,KAAK27sB,iBA2LT,OAxLAvmY,EAAO/5U,UAAUw4U,aAAe,SAAUihY,EAAcxloB,EAAYhyC,GAChE,IACItD,EADAj6B,EAAQC,KAERonb,EAAepnb,KAAKmpE,KAAK0H,iBAAiBvB,GAC9CtvE,KAAK47sB,gBAAkB57sB,KAAKmpE,KAAKt7C,SAASw+C,aAAc/oE,GAAItD,KAAKmpE,KAAKnoE,QAAQsC,GAAK,mBACnF,IAAIu4sB,EAAoB16sB,EAAc,OAClCmC,GAAItD,KAAKmpE,KAAKnoE,QAAQsC,GAAK,eAAiBgsE,EAAa,0BACzDjsE,UAAW,WACXE,OAAQ,kEACMvD,KAAKmpE,KAAK4ooB,UAAY,EAAI/xsB,KAAKmpE,KAAKY,YAAY/8D,GAAK,YACpDhN,KAAKmpE,KAAK4ooB,UAAY,EAAI/xsB,KAAKmpE,KAAKY,YAAYh9D,GAAK,aACpD/M,KAAKmpE,KAAKY,YAAYh0D,OAAS,YAChC/V,KAAKmpE,KAAKY,YAAY/zD,MAAQ,QAEjDoxa,EAAa56C,eAAe50W,IAAI,SAAU40W,EAAgBsvU,GACtD,IAAIC,EAAavvU,EAAejpU,WAChCw4oB,EAAW38sB,QAAQ,SAAU5C,EAAMyrsB,GAC/B,IAAI16rB,GACAsrB,QAAQ,EAAOpB,KAAM24qB,GAAiBxyqB,KAAM4uW,EAAe5uW,KAAM7nB,OAAQy2X,EAAez2X,OACxFC,MAAOw2X,EAAex2X,MAAO8gL,SAAU01M,EAAe11M,SAAUnpK,MAAO6+W,EAAe7+W,MACtF1e,SAAUu9X,EAAev9X,SAAUzS,KAAMA,EAAM2sE,KAAMppE,EAAMopE,KAAM2jQ,OAAQ0/D,EACzEloW,OAAQkoW,EAAeloW,QAE3BvkC,EAAMopE,KAAK3iD,QAAQ4prB,GAAiB7isB,GACpC,IAAIs8D,EAAMrtE,EAAgB,UACtBotE,EAAMptE,EAAe,SACrBmP,EAAS6gY,EAAe7gY,OAC5B,IAAK4B,EAAUsrB,QAAU2zW,EAAeh1W,UAAY/5B,EAAkBosE,KAASpsE,EAAkBmsE,GAAM,CACnG,IAAIoyoB,EAAWj8sB,EAAMopE,KAAKnoE,QAAQsC,GAAK,eAAiBgsE,EAAa,gBAC/DwsoB,EAAc,cAAgB7T,EAChCh1c,EAAclzP,EAAMopE,KAAc,UAAI6B,GAA0B,IAAIoH,GAAYvI,EAAKD,GAAMtsC,EAAQv9B,EAAMopE,KAAK+B,oBAAoB,GAAQ3B,GAAkBK,EAAKC,EAAKvsC,EAAQ8pZ,EAAcrnb,EAAMopE,MAClM5wC,EAA6C,IAAnC6uZ,EAAan1D,mBAA2Bx0X,EAAkBsC,EAAMopE,KAAK2J,YAC/E6b,EAAa5uF,EAAMopE,KAAc,UAAI,IAAI7qE,OAAW6vE,GAAapuE,EAAMopE,KAAMi+W,EAAc7uZ,GAC3FkzB,EAAQkjC,EAAiB,MACzB4snB,EAAa5snB,EAAoB,SACrC,GAAIphF,EAAU0B,UAEV,IADA+qB,EAAaD,GAAoBxsB,EAAU0B,YACzB+qB,EAAWj6B,EAAMopE,MAAM1sE,OAAQ,CAC7C,IACImusB,EAAgB9+nB,GADE9xC,EAAWj6B,EAAMopE,MACa6yoB,EAAUx/sB,EAAMs/sB,EAAa/7sB,EAAMopE,MACvFyhoB,EAAclmsB,MAAM8H,MAASzM,EAAMopE,KAAK4ooB,UAAY9+c,EAAWlmP,EACzDV,KAAKE,IAAIxM,EAAMopE,KAAKmF,kBAAuB,IAAK,EAAI2kL,EAAWlmP,GAAM0+C,GAAU9/C,EAAOoB,EAAK,KACjG69rB,EAAclmsB,MAAMgI,KAAQ3M,EAAMopE,KAAK4ooB,UAAY9+c,EAAWjmP,EACxDX,KAAKE,IAAIxM,EAAMopE,KAAKmF,kBAAuB,IAAK,EAAI2kL,EAAWjmP,GAAMy+C,GAAU9/C,EAAOqB,EAAK,KACjG6usB,EAAkBl6sB,YAAYipsB,QAGjC,CACD,IAAIqR,GACAnvrB,KAAM,IAAIM,GAAK7f,EAAUyI,MAAOzI,EAAUwI,QAC1C6nB,KAAMrwB,EAAUqwB,KAAMu3S,YAAa5nU,EAAU+2B,OAAO9N,MACpDi4D,YAAalhF,EAAU+2B,OAAOtuB,MAAOvI,QAAS++X,EAAe/+X,QAC7DqkC,UAAW06V,EAAe16V,WAE1B9tC,EAAMjE,EAAM0tB,WAAWlgB,EAAUogB,MAAOpgB,EAAUupL,UAAY/pL,EAAG,EAAGC,EAAG,GAAKgvsB,EAAUC,GACtFlvsB,GAAKhN,EAAMopE,KAAK4ooB,UAAY9+c,EAAWlmP,GAAKkmP,EAAWlmP,EAAIwusB,EAAWxusB,GAAK0+C,GAAS9/C,EAAOoB,EAC3FC,GAAKjN,EAAMopE,KAAK4ooB,UAAY9+c,EAAWjmP,GAAKimP,EAAWjmP,EAAIuusB,EAAWvusB,GAAKy+C,GAAS9/C,EAAOqB,EAC/FhJ,EAAIR,aAAa,YAAa,cAAgBuJ,EAAI,IAAMC,EAAI,MAC5DjN,EAAM67sB,gBAAgBj6sB,YAAYqC,GAClC,IAAIhD,EAAW+6sB,EAAWt/sB,OAAS,IAAOwrsB,EAAY,SAAW,KAC7Dzla,EAAc,IAAItoP,GAAMntC,EAAGC,GAC3Bw/X,EAAeva,kBAAoB,GACnC/hT,GAAelsE,EAAKwoY,EAAegvU,eAAgBhvU,EAAeva,kBAAmBzvF,EAAaziS,EAAMopE,KAAMnoE,SAM9HhB,KAAK47sB,gBAAgBz2oB,kBAAoB,GACzC2voB,EAAanzsB,YAAY3B,KAAK47sB,iBAE9BC,EAAkB12oB,kBAAoB,GAAK2J,GAAe9uE,KAAKmpE,KAAKnoE,QAAQsC,GAAK,uBACjFwrE,GAAe9uE,KAAKmpE,KAAKnoE,QAAQsC,GAAK,sBAAsB3B,YAAYk6sB,IAGhFzmY,EAAO/5U,UAAUoyB,WAAa,SAAUE,EAAOmpK,EAAUppK,EAAUsurB,EAAUC,GACzE,IAAIhwoB,EACAl/D,EACAC,EAQAyzX,EACA9wC,EACAmzC,EATAh2W,EAAOmvrB,EAAkB,KACzB9mY,EAAc8mY,EAAyB,YACvCxtnB,EAAcjzE,WAAWygsB,EAAyB,aAClDr+qB,EAAOq+qB,EAAkB,KACzBnqqB,EAAYmqqB,EAAuB,UACnC33qB,GAAW9N,MAAO2+S,EAAan/T,MAAOy4E,GACtChhF,EAAUwusB,EAAqB,QAKnC,GADAtsX,EAAc,IAAIv5T,GAAW4lrB,EAAUp+qB,EAAM6wD,EAAa0mP,EAAa1nU,EAASqkC,EAAW,IAC7E,WAAVnkB,EAAoB,CACpB,IAAI/gB,GAAUkgB,EAAK9W,MAAQ8W,EAAK/W,QAAU,EAC1C0qX,EAAgB,IAAIt8D,GAAa63Y,EAAUp+qB,EAAM0G,EAAQ72B,EAASigB,EAAS3gB,EAAG2gB,EAAS1gB,EAAGJ,EAAQklC,GAClGm6B,EAAYjsE,KAAKmpE,KAAKt7C,SAAS6V,WAAW+8V,OAE3B,cAAV9yW,GACL5gB,EAAI2gB,EAAS3gB,EAAK+f,EAAK9W,MAAQ,EAC/BhJ,EAAI0gB,EAAS1gB,EAAK8f,EAAK/W,OAAS,EAChC+sX,EAAc,IAAI5+D,GAAW83Y,EAAUp+qB,EAAM0G,EAAQ72B,EAAS,IAAIyoB,GAAKnpB,EAAGC,EAAG8f,EAAK9W,MAAO8W,EAAK/W,QAAS,KAAM,KAAM,GAAI+7B,GACvHm6B,EAAYjsE,KAAKmpE,KAAKt7C,SAAS8V,cAAcm/V,IAE9B,UAAVn1W,GACL5gB,EAAI2gB,EAAS3gB,EAAK+f,EAAK9W,MAAQ,EAC/BhJ,EAAI0gB,EAAS1gB,EAAK8f,EAAK/W,OAAS,EAChC/X,EAAM2xV,GAAejhU,KAAQooK,EAAU/gL,OAAU+W,EAAK/W,OAAQC,MAAS8W,EAAK9W,MAAOjJ,EAAGA,EAAGC,EAAGA,IAC5Fi/D,EAAYjsE,KAAKmpE,KAAKt7C,SAAS6hE,UAAUigQ,IAGzC1jR,EAAYr9C,GAAgB5uB,KAAKmpE,KAAMx7C,EAAOgiU,EAAa7iU,EAAMY,EAAU1tB,KAAK47sB,iBAEpF,OAAO3voB,GAKXmpQ,EAAO/5U,UAAU+9sB,YAAc,SAAUv4sB,GACrC,IAAIsG,EAAStG,EAAEsG,OAAO7D,GACtB,IAAwC,IAApC6D,EAAO5I,QAAQ,gBAAnB,CAGA,IAAIyU,EAAUhT,KAAKk8sB,UAAU/0sB,GAC7B,IAAI1J,EAAkBuV,GAAtB,CAGA,IAAIzF,GACAsrB,QAAQ,EAAOpB,KR5DF,cQ4DqBj7B,KAAMwW,EAAQxW,KAAM2sE,KAAMnpE,KAAKmpE,KAAM2jQ,OAAQ95T,EAAQ85T,OACvF3lU,OAAQA,EAAQ4F,EAAGlM,EAAEuzC,QAASpnC,EAAGnM,EAAEwzC,SAEvCr0C,KAAKmpE,KAAK3iD,QR/DO,cQ+DcjZ,MAKnC6nU,EAAO/5U,UAAU6gtB,UAAY,SAAU/0sB,GACnC,IAGI3K,EACAswU,EAJAxpU,EAAK6D,EAAOjK,MAAM,gBAClB+U,EAAQ8iB,SAASzxB,EAAG,GAAGpG,MAAM,KAAK,GAAI,IACtCwsE,EAAQ1pE,KAAKmpE,KAAKzX,OAAOz/C,GAG7B,GAAI9K,EAAO5I,QAAQ,kBAAoB,EAAG,CACtC,IAAIu9sB,EAAc/mrB,SAASzxB,EAAG,GAAGpG,MAAM,iBAAiB,GAAGA,MAAM,KAAK,GAAI,IACtE+qsB,EAAYlzqB,SAASzxB,EAAG,GAAGpG,MAAM,eAAe,GAAGA,MAAM,KAAK,GAAI,IAEtE,GADA4vU,EAASpjQ,EAAM8iU,eAAesvU,IACzB95pB,MAAM85pB,GAEP,OADAt/sB,EAAOswU,EAAOvpQ,WAAW0koB,IAChBn7X,OAAQA,EAAQtwU,KAAMA,GAGvC,OAAO,MAKX44U,EAAO/5U,UAAUk5U,WAAa,SAAU1zU,GACpC,IAAI2lC,EAAW3lC,EAAEsG,OAAO7D,GACxB,IAA0C,IAAtCkjC,EAASjoC,QAAQ,gBAArB,CAGA,IAAIyU,EAAUhT,KAAKk8sB,UAAU11qB,GAC7B,IAAI/oC,EAAkBuV,GAAtB,CAGA,IAAIzF,GACAsrB,QAAQ,EAAOpB,KAAM44qB,GAAiB7zsB,KAAMwW,EAAQxW,KAAM2sE,KAAMnpE,KAAKmpE,KACrEhiE,OAAQq/B,EAAUz5B,EAAGlM,EAAEuzC,QAASpnC,EAAGnM,EAAEwzC,SAEzCr0C,KAAKmpE,KAAK3iD,QAAQ6prB,GAAiB9isB,MAKvC6nU,EAAO/5U,UAAUkkC,cAAgB,WAC7B,MAAO,UAOX61S,EAAO/5U,UAAUiX,QAAU,SAAU62D,KAK9BisQ,KCjMPw7B,GAA2B,WAC3B,SAASA,EAAUznS,GACfnpE,KAAKiiD,aACLjiD,KAAKhD,OAAUm/sB,WAAY,EAAGC,UAAW,EAAGC,UAAW,EAAGC,aAAc,GACxEt8sB,KAAKmpE,KAAOA,EACZnpE,KAAKi9U,wBAgPT,OA7OA2zB,EAAUv1W,UAAUkhtB,aAAe,SAAUh5oB,EAAY+b,EAAWk9nB,EAAW/soB,GAE3E,IAAK,IADDhjD,EACKtwB,EAAI,EAAGA,EAAIonE,EAAW9mE,OAAQN,IAAK,CACxC,IAAIK,EAAO+mE,EAAWpnE,GACtB,GAAKK,EAAKizE,KAAoB+soB,EAAW,CACrC/vrB,EAAOjwB,EACP,OAGR,OAAOiwB,GAEXmkV,EAAUv1W,UAAU0uY,YAAc,SAAUrgU,EAAO4F,EAAY3hD,EAAOqgD,EAAW+kB,EAAO8uS,EAAsB5vX,GAqB1G,IAAK,IAhBDe,EAOAhS,EAGAy7sB,EAEA/urB,EAhBAuzD,EAAYvX,EAAMgjU,kBAClBhoY,EAAQglE,EAAMgjU,kBAAkBtoG,UAIhCsoG,EAAoBhjU,EAAMgjU,kBAC1BgwU,EAAYhzoB,EAAMgjU,kBAAkBptT,UACpCq9nB,OACA3B,EAAW,EACX11a,EAAe,EACf91N,EAAY7hD,EAGZlB,EAAO,GAEP00D,EAAgB,EAEhBh+C,EAAUnjC,KAAKmpE,KAAKnoE,QAAQsC,GAAK,eAAiBgsE,EAAa,eAAiBr9D,EAAQ,eAAiBA,EACzG2qsB,EAAe,IAAI1iqB,GAAM,EAAG,GAEvB/9C,EAAI,EAAG0F,EAAMmsE,EAAUvxE,OAAQN,EAAI0F,EAAK1F,IAAK,CAClD,IAAImnS,EAASt1N,EAAU7xE,GAEvB,GADAwxB,EAAQ21Q,EAAiB,UACpB7lS,EAAkB6lS,EAAiB,WAAM9zN,EAAsB,WAAQ,OAAM7hD,EAAY,KAC1F,GAAKqgD,EAAU7xE,GAAoB,gBAU/B,IAAK,IADD8+sB,EAAUjtoB,EAAU7xE,GACfonB,EAAI,EAAGA,EAAI03rB,EAAQx+sB,OAAQ8mB,IAChCo5rB,EAAWn4sB,KAAKxE,KAAK06B,SAASugrB,EAAQ13rB,QAElC+hR,GADJnkN,EAAgBw7nB,EAAWA,EAAWlgtB,OAAS,GAAGA,UAE9C6oS,EAAenkN,EACf65nB,EAAW2B,EAAWlgtB,OAAS,QAdvCkgtB,EAAWn4sB,KAAKxE,KAAK06B,SAASszC,EAAU7xE,QAEpCmpS,GADJnkN,EAAgBw7nB,EAAWA,EAAWlgtB,OAAS,GAAGA,UAE9C6oS,EAAenkN,EACf65nB,EAAW2B,EAAWlgtB,OAAS,GAgB/C,IAAKgB,EAAkBisE,EAAMnG,aAAemG,EAAMnG,WAAW9mE,OAAS,EAAG,CACrE,IAAI2lM,EAAY1jM,KAAWgrE,EAAMnG,WAAY,MAAM,IACnDk5oB,EAAaz8sB,KAAKu8sB,aAAan6gB,EAAWs6gB,EAAWltoB,EAAsB,WAAE9F,EAAMgG,mBAAoBhG,EAAM+F,gBAClGitoB,GAAaD,EAAWC,GACnCjwrB,EAAOgwrB,EAAWC,QAGlBjwrB,EAAO+iD,EAAsB,WAAEktoB,GAGnC,GADAhvrB,EAAWg/C,GAAsBiwoB,EAAW3B,KACvCv9sB,EAAkBgvB,KAAUhvB,EAAkBiwB,GAAW,CAC1DA,EAAY,EAAkC,aAA7B1tB,KAAKmpE,KAAKkB,eAAiC38C,EAAY,GAAMA,EAAY,EAErFjwB,EAAkBuC,KAAKmpE,KAAKntC,SAAYgmB,MAAMxmC,WAAWiR,MAC1DA,EAAOsiD,GAAY/uE,KAAKmpE,KAAM3tD,WAAWiR,IACpChvB,EAAkBg/sB,KACnBA,EAAWC,GAAajwrB,IAGhC,IAAIowrB,GACAplrB,KAAM,iBAAkB0xC,KAAMnpE,KAAKmpE,KAAMtwC,QAAQ,EAAOyL,OAAQ28C,EAAU38C,OAAQw4qB,UAAW77nB,EAC7FrjD,KAAMqjD,EAAUrjD,KAAM3uB,SAAUgyE,EAAUhyE,SAAUwd,KAAMA,GAE9DzsB,KAAKmpE,KAAK3iD,QAAQ,iBAAkBq2rB,GACpC,IACI3osB,KACA8B,EAAQ0X,EAAmB,SAAK,EAAIA,EAAkB,QAAK,EAC3D8O,EAAWhQ,GAAYC,EAAM/nB,GAC7Bq4sB,EAAe5+qB,GAASnoB,EAAOyW,EAAM/nB,GACrCo/R,EAAct3Q,GAAYuwrB,EAAcr4sB,GACxCo6B,EAASpR,EAAY,EAAI8O,EAAiB,OAAI,EAC9CsuS,EAAOp9S,EAAY,EAAI8O,EAAiB,OAAI,EAC5Cj/B,EAAQmwB,EAAY,EAAI8O,EAAiB,OAAI,EAC7C3d,EAAM6O,EAAY,EAAI8O,EAAiB,OAAI,EAE/C,IADAtoB,EAAW8yB,GAAO21qB,EAAW3B,GAAWl8qB,EAAQgsS,IACnCruU,OAAS,IAAOgB,EAAkB+xE,EAAoB,UACzC,iBAAtBA,EAAgB,KADsF,iBAAlCA,EAAoB,SAAQ,MACzD,CACvC,IAAIwtoB,EAAYtwoB,GAAsBx4D,GACtCwZ,EAAY,EAAIsvrB,EAAa,EAC7BhnsB,EAAQgnsB,EAAoB,SAAK,EAAIA,EAAmB,QAAK,EAEjE,IAAIC,EAAgBvvrB,EAAY,EAAI8O,EAAgB,MAAI,EACpD0grB,EAAiBxvrB,EAAY,EAAI8O,EAAgB,MAAI,EAEzDsnQ,EAAct3Q,GADduwrB,EAAe5+qB,GAASnoB,EAAOyW,EAAM/nB,GACGA,GACxC1E,KAAKhD,MAAMiV,IAAWkqsB,WAAYc,EAAeb,UAAWc,EAAgBb,UAAW9+sB,EAAO++sB,aAAcz9rB,GAC5G,IAAI0Z,EAAsC,IAA5BmxC,EAAMuoT,mBAA2Bx0X,EAAkBuC,KAAKmpE,KAAK2J,YACvE6b,EAAYxgB,GAAanuE,KAAKmpE,KAAMO,EAAOnxC,GAC3CkzB,EAAQkjC,EAAiB,MACzB4snB,EAAa5snB,EAAoB,SACjC3nE,OAAe,EACnB,GAA2B,KAAvB61rB,EAAU5tsB,SAAiB,EAG3B+X,EAAekc,GAFFnJ,GAAoB8irB,EAAU5tsB,SACrB+qB,CAAWh6B,KAAKmpE,MACkBhmC,EAAU1lC,EAAkBg/sB,GAA2BjtoB,EAAsB,WAAnCitoB,EAAsCxqsB,EAAOjS,KAAKmpE,OACvIzkE,MAAM8H,KAASH,KAAKE,IAAIvM,KAAKmpE,KAAKmF,kBAAuB,IAAK,EAAI5gD,EAAY,GAAM+9B,EAAS,KAC1GzkC,EAAatiB,MAAMgI,IAAQL,KAAKE,IAAIvM,KAAKmpE,KAAKmF,kBAAuB,IAAK,EAAI5gD,EAAY,GAAM+9B,EAAS,KACzGo2U,EAAqBlgY,YAAYqlB,GAChBA,EAAapiB,YACZoiB,EAAa0qB,iBAK9B,CAYD,GAXyC,SAArCg7V,EAAkBywU,iBAClBnqsB,EAAU,IAAIujB,GAAW4M,EAASy5qB,EAAa7vsB,EAAG6vsB,EAAa5vsB,EAAG,SAAU+vsB,EAAc,GAAI,KAEzD,SAArCrwU,EAAkBywU,iBAClBnqsB,EAAU,IAAIujB,GAAW4M,EAAUy5qB,EAAc,EAAGA,EAAa5vsB,EAAG,SAAUyf,EAAM,GAAI,KAEnD,SAArCigX,EAAkBywU,iBAClB1wrB,EAAQzW,GAASwmB,EAAgB,MAAK/P,EAAO,GAC7CzZ,EAAU,IAAIujB,GAAW4M,EAAUy5qB,EAAc,EAAIA,EAAc,EAAG,SAAUnwrB,EAAM,GAAI,KAE9FA,EAAOzZ,EAAc,KACwB,SAAzC05X,EAAkB0wU,mBAA+B,CACjD,IAASjhtB,EAAI,EAAGA,EAAI6D,KAAKiiD,UAAUxlD,OAAQN,IACvC,IAAKsB,EAAkBuC,KAAKiiD,UAAU9lD,IAAK,CACvC,KAAI6D,KAAKhD,MAAMiV,GAAkB,UAAIjS,KAAKiiD,UAAU9lD,GAAe,YAC5D6D,KAAKhD,MAAMiV,GAAmB,WAAIjS,KAAKiiD,UAAU9lD,GAAc,WAC/D6D,KAAKhD,MAAMiV,GAAkB,UAAIjS,KAAKiiD,UAAU9lD,GAAiB,cACjE6D,KAAKhD,MAAMiV,GAAqB,aAAIjS,KAAKiiD,UAAU9lD,GAAc,WAGnE,CACDswB,EAAO,GACP,MAJAA,EAAOA,EAQnBzsB,KAAKiiD,UAAUz9C,KAAKxE,KAAKhD,MAAMiV,IAC/Be,EAAU,IAAIujB,GAAW4M,EAASy5qB,EAAa7vsB,EAAG6vsB,EAAa5vsB,EAAG,SAAUyf,EAAM,GAAI,IAG1F,GAA6C,SAAzCigX,EAAkB0wU,mBAA+B,CACjD,IAAS75rB,EAAI,EAAGA,EAAIvjB,KAAKiiD,UAAUxlD,OAAQ8mB,IACvC,IAAK9lB,EAAkBuC,KAAKiiD,UAAU1+B,IAClC,GAAIvjB,KAAKiiD,UAAU1+B,GAAe,WAAIvjB,KAAKhD,MAAMiV,GAAkB,WAC5DjS,KAAKiiD,UAAU1+B,GAAc,UAAIvjB,KAAKhD,MAAMiV,GAAmB,YAC/DjS,KAAKiiD,UAAU1+B,GAAiB,aAAIvjB,KAAKhD,MAAMiV,GAAkB,WACjEjS,KAAKiiD,UAAU1+B,GAAc,UAAIvjB,KAAKhD,MAAMiV,GAAqB,aACpE8qsB,EAAetwrB,EACF,MAEZ,CACD,GAAIzsB,KAAKhD,MAAMiV,GAAkB,UAAIjS,KAAKiiD,UAAU1+B,GAAc,UAAG,CAGjEw5rB,EAAe5+qB,IAFfnoB,EAAQhW,KAAKiiD,UAAU1+B,GAAe,WAAIvjB,KAAKhD,MAAMiV,GAAkB,YACjDjS,KAAKhD,MAAMiV,GAAmB,WAAIjS,KAAKhD,MAAMiV,GAAkB,WACjDwa,EAAM/nB,GAC1C,MAEJ,GAAI1E,KAAKhD,MAAMiV,GAAkB,UAAIjS,KAAKiiD,UAAU1+B,GAAc,UAAG,CACjEvN,EAAQhW,KAAKhD,MAAMiV,GAAmB,WAAIjS,KAAKiiD,UAAU1+B,GAAc,UAEvEw5rB,EAAe5+qB,GADF9xB,KAAKE,IAAIyJ,GAAShW,KAAKhD,MAAMiV,GAAmB,WAAIjS,KAAKhD,MAAMiV,GAAkB,YAC1Dwa,EAAM/nB,GAC1C,OAKhB1E,KAAKiiD,UAAUz9C,KAAKxE,KAAKhD,MAAMiV,IAC/Be,EAAU,IAAIujB,GAAW4M,EAASy5qB,EAAa7vsB,EAAI6vsB,EAAc,EAAG,SAAUG,EAAc,GAAI,IAKpG,GAH6C,SAAzCrwU,EAAkB0wU,qBAClBpqsB,EAAU,IAAIujB,GAAW4M,EAAUy5qB,EAAc,EAAIA,EAAc,EAAG,SAAUnwrB,EAAM,GAAI,KAE1FswrB,EAAatgtB,OAAS,EAAG,CACzB,IAAI4gtB,EAAWR,EAAUv4qB,OACzB,GAAI+4qB,EAAgB,MAAI,EAAG,CACvB,IAAIz/qB,EAAOi/qB,EAAUj/qB,KACjBnwB,EAAUi/X,EAAkBj/X,QAC5B0gB,EAAKu+W,EAAkBv+W,GACvBC,EAAKs+W,EAAkBt+W,GACvBrhB,GAAI2gB,EAAY,EAAI8O,EAAgB,MAAI,EACxCxvB,GAAI0gB,EAAY,EAAI8O,EAAiB,OAAI,EACzCsmW,GAAc,IAAI5+D,GAAWlkU,KAAKmpE,KAAKnoE,QAAQsC,GAAK,eAAiBgsE,EAAa,eAAiBr9D,EAAQ,cAAgBA,EAAO2rB,EAAMy/qB,EAAU5vsB,EAAS,IAAIyoB,GAAKnpB,GAAGC,GAAGwvB,EAAgB,MAAGA,EAAiB,QAAIrO,EAAIC,GACtNiF,GAAOrzB,KAAKmpE,KAAKt7C,SAAS8V,cAAcm/V,IAC5C/vS,EAAMpxF,YAAY0xB,MAG1BryB,EAAUuiC,GAAkBvwB,EAAStO,EAAOA,EAAM8xB,MAAOu8D,IACjDvvF,aAAa,YAAa,eAAkBkqB,EAAY,EAAI6trB,EAAWxusB,GAAK0+C,EAAS,MACpF/9B,EAAY,EAAI6trB,EAAWvusB,GAAKy+C,EAAUq4O,EAAY/tR,OAAS,GAAM,MAC9Eg9E,EAAMpxF,YAAYX,GAEtBhB,KAAKi9U,qBAAqBz4U,MACtBkpB,UAAY3gB,EAAG2gB,EAAY,EAAG1gB,EAAI0gB,EAAY,EAAIo2Q,EAAY/tR,OAAS,GACvE/U,QAASvD,EAAkBupB,GAAgBhmB,EAAUgmB,EACrDsoD,WAAYA,EACZC,WAAYt9D,EACZk5T,WAAYl5T,IAEZ4vX,EAAqB18T,kBAAoB,IAAMnlE,KAAKmpE,KAAKnoE,QAAQmD,SAAS09X,IAC1ErhY,SAASosB,eAAe5sB,KAAKmpE,KAAKnoE,QAAQsC,GAAK,sBAAsB3B,YAAYkgY,KAI7FjxB,EAAUv1W,UAAUq/B,SAAW,SAAU4oQ,EAAQ3rQ,GAI7C,OAHA2rQ,EAAO1rQ,IAAI,SAAUjX,EAAS1O,GAC1B0lB,EAAOnzB,KAAK,IAAI01C,GAAMv5B,EAAe,MAAK,EAAGA,EAAe,MAAK,MAE9DgX,GAKXi5U,EAAUv1W,UAAUkkC,cAAgB,WAChC,MAAO,aAOXqxU,EAAUv1W,UAAUiX,QAAU,SAAU62D,KAKjCynS,KCpPP0sW,GAAgC,WAChC,SAASA,EAAen0oB,GACpBnpE,KAAKmpE,KAAOA,EA6IhB,OAzIAm0oB,EAAejitB,UAAUq3sB,iBAAmB,SAAUhpoB,EAAOpsC,EAAQgyC,GACjE,IAAIiuoB,EACAjD,EACJA,EAAa5woB,EAAMsH,uBA4BnB,IAAK,IA3BDvH,EAEAD,EACAhyC,EACAjW,EACAvL,EACAwgB,EACAsb,EACAu4V,EACA70W,EAIAg6qB,EACAgO,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAzvrB,EAtBAuF,KAuBAi/D,EAAS/yF,KAAKmpE,KAAKt7C,SAASw+C,aAC5B/oE,GAAItD,KAAKmpE,KAAKnoE,QAAQsC,GAAK,eAAiBgsE,EAAa,gBAEpDnzE,EAAI,EAAGA,EAAIm+sB,EAAW79sB,OAAQN,IAAK,CAUxC,GATAqtE,EAAW8woB,EAAWn+sB,GAAe,WAAY,SACjDstE,EAAY6woB,EAAWn+sB,GAAe,WAAa,UACnDq7B,EAAU8irB,EAAWn+sB,GAAe,WAAW,QAC/ColB,EAAQ+4rB,EAAWn+sB,GAAe,WAAS,MAC3C6Z,EAAQsksB,EAAWn+sB,GAAU,OAAK,EAClCq6B,EAAQ8jrB,EAAWn+sB,GAAU,MAC7B21C,EAAYwoqB,EAAWn+sB,GAAe,WAAa,UACnDuhtB,EAAgBpD,EAAWn+sB,GAAe,WAAiB,cAC3DqzsB,GAAa/xsB,EAAkBigtB,IAA0BA,EAA0B,WAAa,UAC5Fj0oB,EAAkB,SAAMD,EAAiB,QAAKhyC,EAC9C,IAAK,IAAIhQ,EAAM,EAAGA,EAAMiiD,EAAkB,OAAGjiD,IAAO,CAChD,IAAIyrO,EAAcjzP,KAAKmpE,KAAc,UAAI6B,GAA0B,IAAI9wB,GAAMuvB,EAAUjiD,GAAMgiD,EAAShiD,IAAO8V,EAAQt9B,KAAKmpE,KAAK+B,oBAAoB,GAAQ3B,GAAkBC,EAAShiD,GAAMiiD,EAAUjiD,GAAM8V,EAAQosC,EAAO1pE,KAAKmpE,MAChOr1C,EAAMtvB,KAAKyuP,GAGnB+qd,EAAmBh+sB,KAAKmpE,KAAKt7C,SAASw+C,aAClC/oE,GAAItD,KAAKmpE,KAAKnoE,QAAQsC,GAAK,eAAiBgsE,EAAa,mBAAqBnzE,IAElF,IAAK,IAAIonB,EAAI,EAAGA,EAAIuQ,EAAc,OAAI,EAAGvQ,IAAK,CAE1ChC,EAAS,GADTA,GAAU,EAAIA,GAAU,EAAIA,GACN,EAAIA,EAC1B,IAAI08rB,EAAUj+sB,KAAKmpE,KAAKnoE,QAAQsC,GAAK,eAAiBgsE,EAAa,oBAAsBnzE,EAAI,QAAUonB,EACnG26rB,EAAWl+sB,KAAKm+sB,cAAcrqrB,EAAMvQ,GAAIuQ,EAAMvQ,EAAI,IAatD,GAZIhC,GAAS,GAAKA,EAAQ,IACtBiU,EAAY,EACR1B,EAAMvQ,GAAM,EAAIuQ,EAAMvQ,EAAI,GAAM,IAChCiS,EAAY,IAGhBjU,IAAU,GAAKA,EAAQ,IACvBiU,EAAY,EACR1B,EAAMvQ,GAAM,EAAIuQ,EAAMvQ,EAAI,GAAM,IAChCiS,EAAY,IAGhB1B,EAAMvQ,GAAM,IAAMuQ,EAAMvQ,EAAI,GAAM,EAAG,CACrC,GAAIisrB,EAAW,CACXgO,EAAaE,EAA0B,WAAS,MAChDD,EAAYC,EAA0B,WAAQ,KAC9CK,OAAyD5itB,IAA1CuitB,EAA0B,WAAU,OAAmB,EAAIA,EAA0B,WAAU,OAC9G,IAAIjhlB,EAAUpwH,KAAKoxB,MAAMggrB,EAAY,GAErCG,EAAgC,WADhCD,EAAgBD,EAA0B,WAAY,UACX,gBAAkBvhtB,EAAI,IAAM,KACvE0htB,EAA8B,QAAlBF,EAA2B,gBAAkBxhtB,EAAI,IAAM,KACpD,IAAX2htB,GAA0B,IAAVv8rB,IAChBu8rB,EAA4B,UAAlBH,EAA6BI,MAE3CD,EAAUrgtB,EAAkBqgtB,GAAW,EAAIA,EAC3C,IAAIM,EAAQp+sB,KAAKmpE,KAAKnoE,QAAQsC,GAAK,YAC/BqhS,EAAa3kS,KAAKmpE,KAAKt7C,SAAS+qF,aAEhC3sC,EAAYzrE,SAAS4C,gBADb,6BACoC,UAChD6oE,EAAUzoE,aAAa,KAAM,WAAarH,GAC1C8vE,EAAUzoE,aAAa,cAAgBi6sB,EAAUvwsB,YACjD++D,EAAUzoE,aAAa,eAAiBi6sB,EAAUvwsB,YAClD++D,EAAUzoE,aAAa,QAASi5H,EAASqhlB,GAAQ5wsB,YACjD++D,EAAUzoE,aAAa,OAAQi5H,EAAOvvH,YACtC++D,EAAUzoE,aAAa,SAAU,QAEjC6mY,EAAa,IAAIj0W,GAAWgorB,EAAOZ,EAAYxnsB,EAAOwgB,EAAO,EAAGsb,EADvD,cAAgB2rqB,EAAY,MAAQhhlB,EAAS,KAAOA,EAAS,MAEtE8glB,EAAgBv9sB,KAAKmpE,KAAKt7C,SAASsI,SAASk0W,GAC5Cp+T,EAAUtqE,YAAY47sB,GACtB54a,EAAWhjS,YAAYsqE,GACvB+xoB,EAAgBr8sB,YAAYgjS,GAEhCp2Q,EAAe,IAAVhN,EAAe,KAAOuS,EAAMvQ,GAAM,EAAI,IAAMuQ,EAAMvQ,GAAM,EAAI,KAAOuQ,EAAMvQ,EAAI,GAAM,EAClF,IAAMuQ,EAAMvQ,EAAI,GAAM,EACxB,KAAOuQ,EAAMvQ,GAAM,EAAI,IAAMuQ,EAAMvQ,GAAM,EAAI,MAAShC,EAAQ28rB,EAAY,IACrE38rB,EAAQ28rB,EAAY,QAA0B1orB,EAAY,MAAQ1B,EAAMvQ,EAAI,GAAM,EAAI,IAAMuQ,EAAMvQ,EAAI,GAAM,EAAI,IACzH8mX,EAAa,IAAIj0W,GAAW6nrB,EAAS,OAAQ,EAAGznrB,EAAO,EAAGsb,EAAWvjB,GACrEgvrB,EAAgBv9sB,KAAKmpE,KAAKt7C,SAASsI,SAASk0W,GACvC5sY,EAAkBkgtB,KACA,UAAlBA,EAA6BJ,EAAc/5sB,aAAa,eAAgBo6sB,GACnEL,EAAc/5sB,aAAa,aAAcq6sB,IAEnDG,EAAgBr8sB,YAAY47sB,GAC5BxqnB,EAAMpxF,YAAYq8sB,IAG1BlqrB,KAEJ,OAAOi/D,GAEXuqnB,EAAejitB,UAAU8itB,cAAgB,SAAU/6pB,EAAQ/a,GACvD,IAAIsyU,EAAStyU,EAAU,EAAI+a,EAAU,EACjC4npB,EAAS3iqB,EAAU,EAAI+a,EAAU,EAErC,OADY/2C,KAAKQ,KAAMR,KAAK87D,IAAIwyS,EAAQ,GAAKtuW,KAAK87D,IAAI6ioB,EAAQ,KAMlEsS,EAAejitB,UAAUkkC,cAAgB,WACrC,MAAO,kBAOX+9qB,EAAejitB,UAAUiX,QAAU,SAAU62D,KAKtCm0oB,KC9IPtnW,GAAwB,WACxB,SAASA,EAAO7sS,GACZnpE,KAAKq+sB,iBAAmB,IAAInorB,GAAK,EAAG,EAAG,EAAG,GAC1Cl2B,KAAK03U,cACL13U,KAAKiwJ,KAAO,EACZjwJ,KAAKszP,YAAc,EACnBtzP,KAAKs+sB,oBAAsB,IAAIpkqB,GAAM,EAAG,GACxCl6C,KAAKu+sB,eAAiB,IAAIrorB,GAAK,EAAG,EAAG,EAAG,GACxCl2B,KAAKw+sB,gBAAkB,EACvBx+sB,KAAKy+sB,eAAiB,EACtBz+sB,KAAK0+sB,aAAe,EACpB1+sB,KAAK+/E,SAAW,IAAI7pD,GAAK,EAAG,EAAG,EAAG,GAClCl2B,KAAKmpE,KAAOA,EACZnpE,KAAKtD,mBAuyBT,OAryBAs5W,EAAO36W,UAAU67U,aAAe,WAC5Bl3U,KAAKu2U,wBACLv2U,KAAK2+sB,cAGT3oW,EAAO36W,UAAUk7U,sBAAwB,WACrC,IAAIx2U,EAAQC,KACR43B,EAAM53B,KAAKmpE,KACXgtQ,EAASv+S,EAAIw+S,eACjBp2U,KAAKo4U,oBACL,IAEI3yQ,EAAa7tC,EAAImyC,YAAY/8D,EACjChN,KAAK4+sB,8BACLhnrB,EAAIi5C,iBAAiBzxE,QAAQ,SAAUsqE,EAAO4F,GAC1C,IAAK7xE,EAAkBisE,EAAM8F,WAAY,CACrC,IAAIxB,EAAYtE,EAAM8F,UAAoB,SACtCjD,EAAW7C,EAAM+F,cACjBjD,EAAe9C,EAAMgG,kBACrBnM,EAAamG,EAAMnG,WACnB8toB,OAAiB,EACjB3wnB,OAAe,EACnB,GAAoB,WAAhBy1P,EAAOzvU,MAAqBgjE,EAAMlyC,QAClC65qB,EAAiB3noB,EAAMoH,cAAcugoB,eACrC3wnB,EAAehX,EAAMoH,cAAc4P,aACnC3gF,EAAM8+sB,WAAWvvoB,EAAYtB,EAAW0S,EAAcnd,EAAYgJ,EAAU8koB,EAAgB7koB,QAE3F,GAAoB,YAAhB2pQ,EAAOzvU,KACZ,IAAK,IAAItI,EAAK,EAAGyE,EAAK6mE,EAAM0poB,eAAgBh1sB,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC9D,IAAIs8sB,EAAS73sB,EAAGzE,GACZs8sB,EAAOljrB,UACP65qB,EAAiBqJ,EAAOrJ,eACxB3wnB,EAAeg6nB,EAAOh6nB,aACtBnd,EAAam3oB,EAAOn3oB,WACpBxjE,EAAM8+sB,WAAWvvoB,EAAYtB,EAAW0S,EAAcnd,EAAYgJ,EAAU8koB,EAAgB7koB,SAKpGzsE,EAAM++sB,4BAA4BxvoB,EAAY5F,EAAM8iU,mBAIhE,IACIuyU,EAAcnnrB,EAAIw+S,eAAel2S,MAAMzT,KACvCuyrB,EAAiBpnrB,EAAIw+S,eAAe11S,WACxC,GAAI1gC,KAAKo4U,iBAAiB37U,OAAS,EAAG,CAClC,IAqBIwitB,EACAC,EAtBAC,EAAahpY,EAAOp4S,KACpBmkD,EAAS,EACTC,EAAS,EACTmjR,EAAQ,EACR07B,EAAQ,EACRppD,EAAezB,EAAOyB,aAEtB31P,EAAck0P,EAAOl0P,YACrBD,EAAam0P,EAAOn0P,WACpBo9nB,KACAxC,KAGA1osB,EAAWiiU,EAAOjiU,SAClBmrsB,EAAclpY,EAAOmpY,iBACrBC,EAAsC,SAAvBppY,EAAO/8S,YAAyC,QAAbllB,GAAmC,WAAbA,EACtE,aAAe,WAAciiU,EAAO/8S,YACtC29S,EAAeZ,EAAOngU,MAAMvZ,OAAS,EAAM05U,EAAOngU,MAAMzX,QAAQ,MAAQ,EAAMq5B,EAAIjC,cAAc3f,MAAQ,IACtG+e,SAASohT,EAAOngU,MAAO,IAAM+e,SAASohT,EAAOngU,MAAO,IAAM,KAC5D8gU,EAAgBX,EAAOpgU,OAAOtZ,OAAS,EAAM05U,EAAOpgU,OAAOxX,QAAQ,MAAQ,EAAMq5B,EAAIjC,cAAc5f,OAAS,IAC5Ggf,SAASohT,EAAOpgU,OAAQ,IAAMgf,SAASohT,EAAOpgU,OAAQ,IAAM,KAG5D8oB,EAAS,EACTC,EAAS,EACT0grB,EAAkBhzrB,GAAYuyrB,EAAaC,GAC/C,GAAmB,gBAAfG,EAA8B,CAC9B,IAAIM,EAAgBtpY,EAAO/xC,UACvB17N,OAAY,EACZC,OAAa,EACb+2oB,EAAe1/sB,KAAKo4U,iBAAiB37U,OACzCisE,EAA6B,eAAhB62oB,EAAiC9htB,EAAkBs5U,GAAiBn/S,EAAImyC,YAAY/zD,MAAQ0psB,EACpG3oY,EAAc2oY,EAAiBjitB,EAAkBs5U,GApC5C,GAoC0EA,EACpFpuQ,EAA8B,eAAhB42oB,EAAiC9htB,EAAkBq5U,GArCvD,GAqCsFA,EAC3Fr5U,EAAkBq5U,GAAkBl/S,EAAImyC,YAAYh0D,OAAS2psB,EAAiB5oY,EAAe4oY,EAClG7grB,EAAS,EACTC,EAAS0grB,EAAgBzpsB,OAzEnB,GAkFN,IAAK,IARD4psB,EAAaxpY,EAAO12N,cACpBmgmB,EAAU,EACVC,EAAU,EAEVC,EAAa,EACbC,EAAa,EACbn6M,EAAgB,EAChBo6M,EAAe,EACV7jtB,EAAI,EAAGA,EAAI6D,KAAKo4U,iBAAiB37U,OAAQN,IAAK,CACnD0iC,EAA0B,eAAhB0grB,EAAiC1grB,EAAS6pC,EAAa7pC,EACjEC,EAA0B,eAAhBygrB,EAAgCzgrB,EAAUA,EAAS6pC,EAC7D,IAAI28T,EAAatlY,KAAKo4U,iBAAiBj8U,GAAS,KAC5C8jtB,EAAe,IAAI7yrB,GAAK,EAAG,GACX,SAAhBiyrB,EACAY,EAAezzrB,GAAY84W,EAAYm6U,GAElB,SAAhBJ,EAELY,EAAezzrB,GADf84W,EAAannW,GAA0B,eAAhBohrB,EAA+B72oB,EAAYC,EAAa28T,EAAYm6U,GACpDA,GAGvCn6U,EAAa,GAEjBsgI,EAAgBv5f,KAAKC,IAAIs5f,EAAeq6M,EAAalqsB,QACrDiqsB,EAAe3zsB,KAAKC,IAAI0zsB,EAAcC,EAAajqsB,OAC/CiqsB,EAAajqsB,MAAQ,GAAKiqsB,EAAalqsB,OAAS,IAC5B,eAAhBwpsB,GACAK,EAAU/grB,EAAU6pC,EAAY,EAChCm3oB,EAA0B,UAAfF,EAA2B7grB,EAAS6pC,EAAcs3oB,EAAalqsB,OAAS,EAzB3E,GA0BH+oB,EA1BG,KA6BR8grB,EAA0B,UAAfD,EAA0B9grB,EAAUohrB,EAAajqsB,MAAQ,EA7B5D,GA8BD6oB,EAAS6pC,EAAYu3oB,EAAajqsB,MAAQ,EA9BzC,GA+BR6psB,EAAU/grB,EAAU6pC,EAAa,EAAMs3oB,EAAalqsB,OAAS,IAG3D,IAAN5Z,GACA2jtB,EAA8B,eAAhBP,EAAgC1grB,EAAyB,UAAf8grB,EACpDC,EAAWK,EAAajqsB,MAAQ,EAAK6oB,EACzCkhrB,EAA8B,eAAhBR,EAAgD,UAAfI,EAA0B7grB,EACrE+grB,EAAWI,EAAalqsB,OAAS,EAAK+oB,GAErC3iC,IAAM6D,KAAKo4U,iBAAiB37U,OAAS,IAC1Cs6U,EAA+B,eAAhBwoY,EAAgClzsB,KAAKE,IAAKsyB,EAAS6pC,EAAao3oB,GAC1Ep3oB,EAAYs3oB,EA1CL,GA2CZlpY,EAAgC,eAAhByoY,EAAiC52oB,EAAci9b,EAAgB,EA3CnE,GA4CRv5f,KAAKE,IAAKuyB,EAAS6pC,EAAco3oB,IAEzC//sB,KAAK4+sB,2BAA2Bp6sB,MAC5Bo5B,KAAM59B,KAAKo4U,iBAAiBj8U,GAAS,KAAG4Q,EAAG8xB,EAAQ7xB,EAAG8xB,EACtD9oB,MAAO0yD,EAAW3yD,OAAQ4yD,EAC1Bl8C,KAAM64W,EAAYhgC,MAAOs6W,EAAS5+U,MAAO6+U,EACzCxzM,UAAW4zM,EAAajqsB,MAAOi9P,WAAYgtc,EAAalqsB,SAGhE/V,KAAKu+sB,gBAAmBxxsB,EAAG+ysB,EAAY9ysB,EAAG+ysB,EAAY/psB,MAAO+gU,EAAahhU,OAAQ+gU,OAEjF,CACDC,EAAet5U,EAAkBs5U,GAAgBn/S,EAAImyC,YAAY/zD,MAAQ+gU,EACzED,EAAgBr5U,EAAkBq5U,GAAiBl/S,EAAImyC,YAAYh0D,OAAS+gU,EAEvE,IADDvzT,EAAI,EACR,IAASpnB,EAAI,EAAGA,EAAI6D,KAAKo4U,iBAAiB37U,OAAQN,IAAK,CACnD,IAAI+jtB,EAAalgtB,KAAKo4U,iBAAiBj8U,GACnCsB,EAAkBuC,KAAK03U,WAAW13U,KAAKiwJ,SACvCjwJ,KAAK03U,WAAW13U,KAAKiwJ,OAAU2vW,KAAO5/f,KAAKiwJ,KAAO,EAAI5nJ,gBAE1D,IAAI83sB,EAAiB3zrB,GAAY0zrB,EAAiB,KAAG/pY,EAAO/xC,WAE5D,GADApkS,KAAK0+sB,aAAerysB,KAAKC,IAAItM,KAAK0+sB,aAAcyB,EAAenqsB,OACrD,IAAN7Z,EACA0iC,EAASqjD,EA/IP,GA+IgCF,EAAa,EAC/CljD,EAASqjD,EAAS1c,EAAa+5oB,EAAgBzpsB,QAAUksE,EAAck+nB,EAAepqsB,OAASksE,EAAc,EACtGk+nB,EAAepqsB,OAAS,OAE9B,CACD,IAAIijI,EAAWmnkB,EAAepqsB,OAASksE,EAAek+nB,EAAepqsB,OAASksE,EAC9E,GAAoB,eAAhBs9nB,EAA8B,CAC9B,IAAIa,EAAiBxD,EAAar5rB,EAAI,GAAGxW,EAAI6vsB,EAAar5rB,EAAI,GAAGvN,MA5G/D,GA4GsFgsE,EACxF,GAAKo+nB,EAAgBxoY,EAAeuoY,EAAenqsB,MAAS+gU,EAAa,CACrE,IAAIspY,GAAiBzD,EAAar5rB,EAAI,GAAGvW,EAAKoysB,EAAc77rB,EAAI,GAAGvW,EAAKi1E,EAAc,EAClF26nB,EAAar5rB,EAAI,GAAGvW,EAAKoysB,EAAc77rB,EAAI,GAAGvW,EAAKi1E,EAAc,GAAOxc,EACvE46oB,EAAgBrnkB,EAAW89L,GAC5B92U,KAAKsgtB,iBACL/8rB,EAAI,EACJ67rB,KACAxC,KACA16nB,EACSrjD,EACTsjD,EAASrjD,IAGTojD,EAAUk9nB,EAAc,GAAI,EAC5Bj9nB,EAAUk+nB,EAAiBrnkB,EAAU,QAIzC92D,EAAUk+nB,EAAiBp+nB,EAAa,EACxCG,EAAUi9nB,EAAc77rB,EAAI,GAAIvW,MAGnC,CACD,IAAIuzsB,EAAgB3D,EAAar5rB,EAAI,GAAGvW,EAAIoysB,EAAc77rB,EAAI,GAAGvW,EAAKi1E,EAAc,EAChF26nB,EAAar5rB,EAAI,GAAGvW,EAAIoysB,EAAc77rB,EAAI,GAAGvW,EAAKi1E,EAAc,EACpE,GAAKs+nB,EAAgB96oB,EAAauzE,EAAW89L,EAAc,CACvD,IAAI0pY,EAAiB5D,EAAar5rB,EAAI,GAAGxW,EAAI/M,KAAK0+sB,aAvIpD,GAwIO8B,EAAgB5oY,EAAeuoY,EAAenqsB,MAAS+gU,GACxD70P,EAASrjD,EACTsjD,EAASrjD,EACT89qB,KAEAwC,KACAp/sB,KAAKsgtB,iBACL/8rB,EAAI,IAGJ2+D,EAASs+nB,EAAiBx+nB,EAAa,EACvCG,EAAUi9nB,EAAc,GAAI,QAIhCl9nB,EAASk9nB,EAAc77rB,EAAI,GAAGxW,EAC9Bo1E,EAASo+nB,EAAgB96oB,EAAcwc,EAAc,GAIjEqjR,EAAQpjR,EAAUF,EAAa,EAAK41P,EACpCopD,EAAQ7+S,EAAUg+nB,EAAepqsB,OAAS,EAC1CqpsB,EAAc56sB,MAAOuI,EAAGm1E,EAAQl1E,EAAGm1E,IACnCy6nB,EAAap4sB,MAAOuI,EAAGu4V,EAAOt4V,EAAGg0X,EAAOhrX,MAAOmqsB,EAAenqsB,MAAOD,OAASoqsB,EAAepqsB,OAAS,IACtG/V,KAAK03U,WAAW13U,KAAKiwJ,MAAkB,WAAEzrJ,MACrCi8sB,YAAaP,EAAiB,KAC9BQ,SAAUR,EAAqB,SAC/Bn0T,OAASh/Y,EAAGm1E,EAAQl1E,EAAGm1E,GACvBxuB,MAAQ5mD,EAAGu4V,EAAOt4V,EAAGg0X,GACrBxzH,KAAM0yc,EAAiB,KACvBhqrB,MACInpB,EAAGqysB,EAAc77rB,GAAGxW,EAAKi1E,EAAa,EACtCh1E,EAAIoysB,EAAc77rB,GAAGvW,EAAKi1E,EAAc,EAAO++S,EAAQm/U,EAAepqsB,OACjEqpsB,EAAc77rB,GAAGvW,EAAKi1E,EAAc,EAAO++S,EAAQm/U,EAAepqsB,OACvEC,MAAO3J,KAAKE,IAAK6ysB,EAAc77rB,GAAGxW,EAAKi1E,EAAa,GAAOsjR,EAAQ66W,EAAenqsB,QAClFD,OAAUksE,EAAck+nB,EAAepqsB,OAAUksE,EAAck+nB,EAAepqsB,UAGtFwN,IAEJ,IAAI4jB,EAAannC,KAAK03U,WAAW,GAAe,WAChDvwS,EAAW/nC,QAAQ,SAAUuhtB,EAAW1usB,GACpC,IAAI8urB,EAAa,IAAI7qqB,GAAKyqrB,EAAgB,KAAK,EAAGA,EAAgB,KAAK,EAAGA,EAAgB,KAAS,MAAGA,EAAgB,KAAU,QAClH,IAAV1usB,IACAgtsB,EAAqBle,EAAWh0rB,EAChCmysB,EAAqBne,EAAW/zrB,GAEpCjN,EAAM0+sB,eAAiBpysB,KAAKC,IAAIvM,EAAM0+sB,eAAgBpysB,KAAKE,IAAI0ysB,GAAsBle,EAAWh0rB,EAAIg0rB,EAAW/qrB,SAC/GjW,EAAMy+sB,gBAAkBnysB,KAAKC,IAAIvM,EAAMy+sB,gBAAiBnysB,KAAKE,IAAI2ysB,GAAsBne,EAAW/zrB,EAAI+zrB,EAAWhrrB,YAErHghU,EAAgB/2U,KAAKy+sB,eAAiB1nY,EAAe/2U,KAAKy+sB,eAAiB1nY,EAC3ED,EAAiB92U,KAAKw+sB,gBAAkB1nY,EAAgB92U,KAAKw+sB,gBAAkB1nY,EAC/E92U,KAAKu+sB,gBACDxxsB,EAAGo6B,EAAW,GAAS,KAAK,EAAGn6B,EAAGm6B,EAAW,GAAS,KAAK,EAC3DnxB,MAAO+gU,EAAahhU,OAAQ+gU,MAQ5Ck/B,EAAO36W,UAAUwjtB,WAAa,SAAUvvoB,EAAYtB,EAAW0S,EAAcnd,EAAYgJ,EAAU8koB,EAAgB7koB,GAC/GxsE,KAAK4gtB,yBAAyBtxoB,EAAYtB,EAAW0S,EAAcnd,EAAYgJ,EAAU8koB,EAAgB7koB,GACzGxsE,KAAK6gtB,yBAAyBvxoB,EAAYtB,EAAW0S,EAAcnd,EAAYgJ,EAAU8koB,EAAgB7koB,GACzGxsE,KAAK8gtB,wBAAwBxxoB,EAAYtB,EAAW0S,EAAcnd,EAAYgJ,EAAU8koB,EAAgB7koB,IAE5GwpS,EAAO36W,UAAUiltB,eAAiB,WAC9BtgtB,KAAKiwJ,OACDxyJ,EAAkBuC,KAAK03U,WAAW13U,KAAKiwJ,SACvCjwJ,KAAK03U,WAAW13U,KAAKiwJ,OAAU2vW,KAAO5/f,KAAKiwJ,KAAO,EAAI5nJ,iBAG9D2tW,EAAO36W,UAAUsjtB,WAAa,WAC1B,IAAI/mrB,EAAM53B,KAAKmpE,KACXgtQ,EAASv+S,EAAIw+S,eACbrqO,EAASn0E,EAAI/J,SAEbu7P,EAAW+sD,EAAO/xC,UACtBpkS,KAAKs3U,YAAcvrO,EAAO1/B,aAAc/oE,GAAIs0B,EAAI52B,QAAQsC,GAAK,kBAC7D,IAAIiK,GACAkqB,KAAM+4qB,GAAiB33qB,QAAQ,EAAO+E,KAAM,GAAIjQ,MAAOwoT,EAAOxoT,MAC9DozrB,YAAa5qY,EAAO4qY,aAExB,GAAoB,gBAAhB5qY,EAAOp4S,KAAwB,CAC/B,IAAK,IAAI5hC,EAAI,EAAGA,EAAI6D,KAAK4+sB,2BAA2BnitB,OAAQN,IAAK,CAC7D,IAAI6ktB,EAASpprB,EAAI52B,QAAQsC,GAAK,iBAAmBnH,EAC7CwwY,EAAS/0W,EAAI52B,QAAQsC,GAAK,iBAAmBnH,EAAI,QACjD0hB,EAAO7d,KAAK4+sB,2BAA2BzitB,GACvCu6B,EAAS,IAAIR,GAAKrY,EAAQ,EAAGA,EAAQ,EAAGA,EAAY,MAAGA,EAAa,QACpE++rB,EAAe,IAAI1iqB,GAAMr8B,EAAY,MAAGA,EAAY,OACxDtQ,EAAUqwB,KAAO/f,EAAW,KAC5B+Z,EAAIpR,QAAQgqrB,GAAiBjjsB,GAC7B,IAAIu1X,EAAc,IAAI5+D,GAAW88Y,EAAQzzsB,EAAUqwB,KAAMrwB,EAAUwzsB,YAAa,EAAGrqrB,GAEnF6M,GADc,IAAIhN,GAAWo2W,EAAQiwU,EAAa7vsB,EAAG6vsB,EAAa5vsB,EAAG,SAAU6Q,EAAW,KAAG,GAAI,IAClEurQ,EAAUA,EAAS5yP,MAAOx2B,KAAKs3U,aAC9Dt3U,KAAKs3U,YAAY31U,YAAYoqG,EAAOpoE,cAAcm/V,IAEtD9iY,KAAKihtB,0BAGLjhtB,KAAK8nY,eAAe9nY,KAAKszP,cAGjC0iH,EAAO36W,UAAUysY,eAAiB,SAAU73O,GACxC,IAAIr4H,EAAM53B,KAAKmpE,KACXgtQ,EAASv+S,EAAIw+S,eAEb8qY,EAAY,IAAI9zrB,GAAK+oT,EAAOn0P,WAAYm0P,EAAOl0P,aAG/C8pB,EAASn0E,EAAI/J,SACbkzrB,EAAc5qY,EAAO4qY,YACrBxzsB,GACAkqB,KAAM+4qB,GAAiB33qB,QAAQ,EAAO+E,KAAM,GAAIjQ,MAAOwoT,EAAOxoT,OAElE,GAAIsiI,GAAQ,GAAKA,EAAOjwJ,KAAK03U,WAAWj7U,OAAQ,CACxCkG,GAAc3C,KAAKs3U,YAAYh0U,GAAItD,KAAKmpE,KAAKnoE,QAAQsC,KACrDiB,EAAO5B,GAAc3C,KAAKs3U,YAAYh0U,GAAItD,KAAKmpE,KAAKnoE,QAAQsC,KAEhE,IAAIsuC,EAAgC,mBAAjBukS,EAAOxoT,OAA+C,iBAAjBwoT,EAAOxoT,OACvC,UAAjBwoT,EAAOxoT,MAAqBlwB,EAAkB04U,EAAOv4S,MAAQ,UAAYu4S,EAAOv4S,KAAOmjrB,EAAYvqrB,MACtGqb,GAAgC,mBAAjBskS,EAAOxoT,OAA+C,iBAAjBwoT,EAAOxoT,OACvC,UAAjBwoT,EAAOxoT,QAA4C,IAAtBozrB,EAAY/qsB,MAC5C,EAAwB+qsB,EAAY/qsB,MACxCzI,EAAUwzsB,aAAgB/qsB,MAAO67B,EAAarb,MAAOob,GACrD,IAAK,IAAIz1C,EAAI,EAAGA,EAAI6D,KAAK03U,WAAWznL,GAAkB,WAAExzJ,OAAQN,IAAK,CACjE,IAAIgrC,EAAannC,KAAK03U,WAAWznL,GAAkB,WAAE9zJ,GACjDyosB,EAAgB74lB,EAAO1/B,aAAc/oE,GAAIs0B,EAAI52B,QAAQsC,GAAK,iBAAmBnH,IAC7EmpY,EAAan+V,EAAwB,YACzC55B,EAAUqwB,KAAOuJ,EAAiB,KAClC55B,EAAUogB,MAA0B,YAAhBwoT,EAAOzvU,KAAwBjJ,EAAkB0pC,EAAqB,UACtFgvS,EAAOxoT,MAAQ,QAAWwoT,EAAOxoT,MACrCiK,EAAIpR,QAAQgqrB,GAAiBjjsB,GAC7B,IAAI4zsB,EAAUvprB,EAAI52B,QAAQsC,GAAK,uBAAyBnH,EACpDwwY,EAAS/0W,EAAI52B,QAAQsC,GAAK,sBAAwBnH,EAClDijtB,EAAgBj4qB,EAAkB,MAClCy1qB,EAAez1qB,EAAiB,KAEhCi6qB,GADa3jtB,EAAkB0pC,EAAqB,UAAMgvS,EAAOxoT,MAAQwZ,EAAqB,SAC5E,IAAI/Q,GAAW+qrB,EAAS5zsB,EAAUqwB,KAAMrwB,EAAUwzsB,YAAY/qsB,MAAOzI,EAAUwzsB,YAAYvqrB,MAAO,EAAG,KAC3HouqB,EAAcjjsB,YAAY8rB,GAAW2xrB,EAAe7xsB,EAAUogB,MAAOuzrB,EAAW/5qB,EAAqB,SAAGi6qB,IAExG79qB,GADc,IAAIhN,GAAWo2W,EAAQiwU,EAAa7vsB,EAAG6vsB,EAAa5vsB,EAAG,QAASs4X,EAAY,GAAI,IAC/DnvD,EAAO/xC,UAAW+xC,EAAO/xC,UAAU5tQ,MAAOouqB,GACzE5ksB,KAAKs3U,YAAY31U,YAAYijsB,GAEjC,IAAIyc,OAAc,EAGlB,GAAkB,IAAdrhtB,KAAKiwJ,KAAY,CACjB,IAAImpL,EAAcnpL,EAAO,EAAK,IAAMjwJ,KAAK03U,WAAWj7U,OAChD6ktB,EAAanrY,EAAO/xC,UACpBm9a,EAAiB/0rB,GAAY4sT,EAAYkoY,GACzCE,EAAaxhtB,KAAKu+sB,eAAexxsB,EAAI/M,KAAKu+sB,eAAevosB,MAASursB,EAAevrsB,SA7C/E,GA+CFyrsB,EAAczhtB,KAAKu+sB,eAAexxsB,EAAI/M,KAAKu+sB,eAAevosB,MAC1DkY,EAAQluB,KAAKu+sB,eAAevxsB,EAAIhN,KAAKu+sB,eAAexosB,WAhDlD,GAiDF2rsB,EAAYD,EAjDV,GAiDgCF,EAAevrsB,MAAQ,IAC7DqrsB,EAAct1mB,EAAO1/B,aAAc/oE,GAAIs0B,EAAI52B,QAAQsC,GAAK,yBACxD,IAAIq+sB,EAAkB51mB,EAAO1/B,aAAc/oE,GAAIs0B,EAAI52B,QAAQsC,GAAK,8BAC5Ds+sB,EAAmB71mB,EAAO1/B,aAAc/oE,GAAIs0B,EAAI52B,QAAQsC,GAAK,+BAC7Du+sB,EAAY,MAAQJ,EAAa,IAAMvzrB,EAAO,OAASuzrB,EArDrD,IAqD2E,KAAOvzrB,KACpF,OAASuzrB,EAtDP,IAsD6B,KAAOvzrB,KAAiB,MACvD4zrB,EAAW,MAAQN,EAAY,IAAMtzrB,EAAO,OAASszrB,EAvDnD,IAuDwE,KAAOtzrB,KACjF,OAASszrB,EAxDP,IAwD4B,KAAOtzrB,KAAiB,MACtD6zrB,EAAkB,IAAI3rrB,GAAWwB,EAAI52B,QAAQsC,GAAK,aAAc,UAAW,EAAG,UAAW,EAAG,GAAIw+sB,GACpGH,EAAgBhgtB,YAAYoqG,EAAO51E,SAAS4rrB,IAC5C,IAAIC,EAAsB,IAAI99Y,GAAWtsS,EAAI52B,QAAQsC,GAAK,kBAAmB,iBAAmB,EAAG,IAAI4yB,GAAKsrrB,IAA0BtzrB,KAAsBlY,GAAWkvW,IAAc,KAAM,KAAM,GAAI,IACrMy8V,EAAgBhgtB,YAAYoqG,EAAOpoE,cAAcq+qB,IACjDhitB,KAAKukB,WAAWo9rB,GAChB,IAAIM,EAAmB,IAAI7rrB,GAAWwB,EAAI52B,QAAQsC,GAAK,cAAe,UAAW,EAAG,UAAW,EAAG,GAAIu+sB,GACtGD,EAAiBjgtB,YAAYoqG,EAAO51E,SAAS8rrB,IAC7C,IAAIC,EAAuB,IAAIh+Y,GAAWtsS,EAAI52B,QAAQsC,GAAK,mBAAoB,iBAAmB,EAAG,IAAI4yB,GAAMurrB,EAhEzG,GAgE+HvzrB,IAhE/H,GAAA,IAgEgK,KAAM,KAAM,GAAI,IACtL0zrB,EAAiBjgtB,YAAYoqG,EAAOpoE,cAAcu+qB,IAClDlitB,KAAKukB,WAAWq9rB,GAChBP,EAAY1/sB,YAAYggtB,GACxBN,EAAY1/sB,YAAYigtB,GACxB,IAAIO,GACA7+sB,GAAMs0B,EAAI52B,QAAQsC,GAAK,eACvByJ,EAAK20sB,EACL10sB,EAAKkhB,EAAQqzrB,EAAexrsB,OAAS,EACrC6nB,KAAQ,UACR7M,YAAa,OACbC,aAAcswrB,EAAWt0rB,UACzBiE,cAAeqwrB,EAAWr0rB,WAC1BiE,cAAeowrB,EAAWv0rB,WAC1BoE,cAAe,SACf9jB,UAAa,GACbI,QAAW,EACXyxB,oBAAqB,IAEzBmirB,EAAY1/sB,YAAYoqG,EAAO36E,WAAW+wrB,EAAiB/oY,IAC3Dp5U,KAAKs3U,YAAY31U,YAAY0/sB,GAEjCrhtB,KAAKihtB,uBAGbjrW,EAAO36W,UAAU4ltB,mBAAqB,WAClC,IAAIrprB,EAAM53B,KAAKmpE,KACXgtQ,EAASv+S,EAAIw+S,eACb2oY,EAAc5oY,EAAOj2S,MAAMzT,KAC3B23Q,EAAY+xC,EAAOz1S,WAGnB0hrB,EAAYjkrB,GAAUn+B,KAAKu+sB,eAAevosB,SAAwB+osB,EAAa36a,GAC/E5nQ,EAAWhQ,GAAY41rB,EAAWh+a,GACtCpkS,KAAKq+sB,iBAAmB,IAAInorB,GAAMl2B,KAAKu+sB,eAAexxsB,EAHxC,GAGuD/M,KAAKu+sB,eAAevxsB,EAH3E,GAGyFwvB,EAASzmB,OAAU/V,KAAKu+sB,eAAoB,SAAoBv+sB,KAAKu+sB,eAAqB,UAAoB/hrB,EAASzmB,QACzM,gBAAhBogU,EAAOp4S,KAAyB,EAAmB,IAAd/9B,KAAKiwJ,KAJjC,GAIyD,IACnE8ujB,GAEAx7qB,GADc,IAAIhN,GAAWqB,EAAI52B,QAAQsC,GAAK,eAAiBtD,KAAKu+sB,eAAgB,EAAKv+sB,KAAKu+sB,eAAevosB,MAAQ,EAAIhW,KAAKu+sB,eAAevxsB,EAAKwvB,EAASzmB,OAAS,EAAI,SAAUqssB,EAAW,IAC9Jh+a,EAAWA,EAAU5tQ,MAAOx2B,KAAKs3U,aAEpE,IAAIr4S,EAAgB,IAAIilS,GAAWtsS,EAAI52B,QAAQsC,GAAK,iBAAkB6yU,EAAO1mT,WAAY0mT,EAAO7xS,OAAQ,EAAGtkC,KAAKq+sB,iBAAkB,KAAM,KAAM,GAAI,IAClJr+sB,KAAKs3U,YAAY31U,YAAYi2B,EAAI/J,SAAS8V,cAAc1E,IACxDj/B,KAAK2uF,UAAiC,UAApBwnP,EAAOjiU,SACrBlU,KAAKqitB,mBAAmBzqrB,EAAK53B,KAAKq+sB,iBAAiBrosB,MAAOhW,KAAKq+sB,iBAAiBtosB,OAAQogU,GAAUA,EAAOzoT,SAC7G1tB,KAAKs3U,YAAY9zU,aAAa,YAAa,eAAiBxD,KAAK2uF,UAAU5hF,GAAO/M,KAAKq+sB,iBAAkB,GAAM,KAC1Gr+sB,KAAK2uF,UAAU3hF,GAAOhN,KAAKq+sB,iBAAkB,GAAM,MACxDzmrB,EAAItG,UAAU3vB,YAAY3B,KAAKs3U,cAEnC0+B,EAAO36W,UAAUintB,eAAiB,SAAUzhtB,GACxCb,KAAKszP,YAAezyP,EAAEsG,OAAO7D,GAAG/E,QAAQ,gBAAkB,EAAMyB,KAAKszP,YAAc,EAC9EtzP,KAAKszP,YAAc,EACxBtzP,KAAKs3U,YAAct3U,KAAKmpE,KAAKt7C,SAASw+C,aAAc/oE,GAAItD,KAAKmpE,KAAKnoE,QAAQsC,GAAK,kBAC/EtD,KAAK8nY,eAAe9nY,KAAKszP,aACrB3wP,GAAc3C,KAAKmpE,KAAKnoE,QAAQsC,GAAK,iBAAkBtD,KAAKmpE,KAAKnoE,QAAQsC,MACzEX,GAAc3C,KAAKmpE,KAAKnoE,QAAQsC,GAAK,iBAAkBtD,KAAKmpE,KAAKnoE,QAAQsC,IAAIoB,MAAM2ka,cAAgB,SAG3GrzD,EAAO36W,UAAUgntB,mBAAqB,SAAUzqrB,EAAK5hB,EAAOD,EAAQogU,GAChE,IAAIppU,EACAC,EAEAo0E,EAAaxpD,EAAIjC,cAAc3f,MAC/BsvL,EAAc1tK,EAAIjC,cAAc5f,OACpC,OAAQogU,EAAOjiU,UACX,IAAK,MACL,IAAK,SACD0jB,EAAImyC,YAAYh0D,OAAU6hB,EAAImyC,YAAYh0D,OAASA,EACnDhJ,EAAKq0E,EAAa,EAAMprE,EAAQ,EAChChJ,EAAyB,QAApBmpU,EAAOjiU,SAAsB0jB,EAAImyC,YAAY/8D,EAAK4qB,EAAImyC,YAAY/8D,EAAI4qB,EAAImyC,YAAYh0D,OAC3F6hB,EAAImyC,YAAY/8D,EAAyB,QAApBmpU,EAAOjiU,SAAsB0jB,EAAImyC,YAAY/8D,EAAI+I,EAThE,GASmF6hB,EAAImyC,YAAY/8D,EACzG,MACJ,IAAK,OACL,IAAK,QACD4qB,EAAImyC,YAAY/zD,MAAS4hB,EAAImyC,YAAY/zD,MAAQA,EACjDjJ,EAAyB,SAApBopU,EAAOjiU,SAAuB0jB,EAAImyC,YAAYh9D,EAAI6qB,EAAImyC,YAAYh9D,EAAI6qB,EAAImyC,YAAY/zD,MAC3FhJ,EAAKs4L,EAAc,EAAMvvL,EAAS,EAClC6hB,EAAImyC,YAAYh9D,EAAyB,SAApBopU,EAAOjiU,SAAuB0jB,EAAImyC,YAAYh9D,EAAIiJ,EAAQ4hB,EAAImyC,YAAYh9D,EAGvG,OAAQopU,EAAO9mR,WACX,IAAK,OACuB,QAApB8mR,EAAOjiU,UAA0C,WAApBiiU,EAAOjiU,SACpCnH,EAAI6qB,EAAImyC,YAAYh9D,EAGpBC,EAAI4qB,EAAImyC,YAAY/8D,EAExB,MACJ,IAAK,MACuB,QAApBmpU,EAAOjiU,UAA0C,WAApBiiU,EAAOjiU,SACpCnH,EAAIq0E,EAAaprE,EAGjBhJ,EAAIs4L,EAAcvvL,EAI9B,OAAO,IAAImkC,GAAMntC,EAAGC,IAExBgpW,EAAO36W,UAAUyjtB,4BAA8B,SAAUxvoB,EAAYk2V,GACjE,IAAIzla,EAAQC,KACZwla,EAAQpma,QAAQ,SAAU0tU,EAAQgvY,GAC9B,IAAIv4oB,EAAaupQ,EAAOvpQ,WACpBx3C,EAAQ+gT,EAAOw4D,WAEnB/hU,EAAWnkE,QAAQ,SAAU5C,EAAMyrsB,GAC/B,IAAIsa,EAAW,KACf,GAAIz1Y,EAAOt1S,UAAa/5B,EAAkBjB,EAAe,YAASiB,EAAkBjB,EAAgB,WAAK,CACrG,GAAIswU,EAAO79T,SAAU,CAEjB,IAAIorB,EADSN,GAAoB+yS,EAAO79T,SAClB+qB,CAAWj6B,EAAMopE,MAGvCo5oB,GAFgB9ktB,EAAkB48B,EAAgB8qC,mBAAqB9qC,EAAgB,GACnFA,GACiB13B,cAAc,OAAOrD,IAE9C,IAAImtB,EAAOhvB,EAAkBjB,EAAKuvB,IAAU,GAAKvvB,EAAKuvB,GACtDhsB,EAAMq4U,iBAAiB5zU,MACnB8qE,WAAYA,EAAYwsoB,YAAaA,EAAa7T,UAAWA,EAC7DrqqB,KAAMkvS,EAAOlvS,KAAMnR,KAAMA,EAAM81rB,SAAUA,UAM7DvsW,EAAO36W,UAAUultB,yBAA2B,SAAUtxoB,EAAYtB,EAAW0S,EAAcnd,EAAYgJ,EAAU8koB,EAAgB7koB,GA2B7H,IAAK,IAzBD84T,EADAvlY,EAAQC,KAER49B,EAAO59B,KAAKmpE,KAAKitQ,eAAex4S,KAChC3+B,EAAU,SAAUwhF,GACpB,IAAKhjF,EAAkBgjF,EAAS97C,QAAUlnC,EAAkBgjF,EAAS77C,IAAK,CACtE0gW,EAAc7nY,EAAkBgjF,EAASptE,OAA0BotE,EAAS97C,KAAO,MAAQ87C,EAAS77C,GAAlD67C,EAASptE,MAC3D,IAAImvsB,KACAC,GAAoB,EACxBl/oB,EAAWnkE,QAAQ,SAAU5C,EAAMyrsB,GAC/B,IAAIv+iB,EAAaluI,WAAWhf,EAAK60sB,IAC7B3njB,GAAcjpE,EAAS97C,MAAQ+kH,GAAcjpE,EAAS77C,KACtD69qB,GAAoB,EACpBD,EAAYh+sB,KAAKzE,EAAM2itB,cAAcpzoB,EAAY24nB,EAAWzrsB,EAAM+vE,EAAUyB,EAAWxB,EAAck9E,OAGxG+4jB,GACDD,EAAYh+sB,MACR8qE,WAAYA,EAAYC,WAAY,KAAM04nB,UAAW,KACrDxwqB,KAAM,KAAMz6B,MAAO,OAG3B,IAAI2ltB,EAAclltB,EAAkBmgC,GAAS6iD,EAASjqD,MAAQoH,EAC9D2vE,EAAOq1mB,gCAAgCt9U,EAAYq9U,EAAYH,KAGnEj1mB,EAASvtG,KACJ5B,EAAK,EAAGozsB,EAAiB9wnB,EAActiF,EAAKozsB,EAAe/0sB,OAAQ2B,IAAM,CAE9Ea,EADeuysB,EAAepzsB,MAItC43W,EAAO36W,UAAUuntB,gCAAkC,SAAUt9U,EAAYq9U,EAAYE,GACjF,IAAIC,KACJ,GAAID,EAAWpmtB,OAAS,EAAG,CACvB,IAAK,IAAIN,EAAI,EAAGA,EAAI0mtB,EAAWpmtB,OAAQN,IAAK,CACxC,IAAIgrC,EAAa07qB,EAAW1mtB,GAC5B,GAAIgrC,EAAW1qC,OAAS,EACpB,IAAK,IAAI8mB,EAAI,EAAGA,EAAI4jB,EAAW1qC,OAAQ8mB,IACnCu/rB,EAAet+sB,KAAK2iC,EAAW5jB,SAInCu/rB,EAAet+sB,KAAKq+sB,EAAW1mtB,IAEnC2mtB,EAA2B,YAAI,EAEnC9itB,KAAKo4U,iBAAiB5zU,MAAOioB,KAAM64W,EAAY1nW,KAAM+krB,EAAYnmtB,KAAMsmtB,MAG/E9sW,EAAO36W,UAAUwltB,yBAA2B,SAAUvxoB,EAAYtB,EAAW0S,EAAcnd,EAAYgJ,EAAU8koB,EAAgB7koB,GA2B7H,IAAK,IAxBD84T,EAFAvlY,EAAQC,KACR49B,EAAO59B,KAAKmpE,KAAKitQ,eAAex4S,KAEhC+0H,EAAU,SAAUlyE,GACpB,IAAKhjF,EAAkBgjF,EAASzjF,OAAQ,CACpCsoY,EAAc7nY,EAAkBgjF,EAASptE,OAA0BotE,EAASzjF,MAA1ByjF,EAASptE,MAC3D,IAAI0vsB,KACAC,GAAsB,EAC1Bz/oB,EAAWnkE,QAAQ,SAAU5C,EAAMyrsB,GAC/B,IAAItnnB,EAAankF,EAAK60sB,GAClB1wnB,IAAeF,EAASzjF,QACxBgmtB,GAAsB,EACtBD,EAAYv+sB,KAAKzE,EAAM2itB,cAAcpzoB,EAAY24nB,EAAWzrsB,EAAM+vE,EAAUyB,EAAWxB,EAAcmU,OAGxGqioB,GACDD,EAAYv+sB,MACR8qE,WAAYA,EAAYC,WAAY,KAAM04nB,UAAW,KACrDxwqB,KAAM,KAAMz6B,MAAO,OAG3B,IAAI2ltB,EAAclltB,EAAkBmgC,GAAS6iD,EAASjqD,MAAQoH,EAC9Dg1H,EAAOgwjB,gCAAgCt9U,EAAYq9U,EAAYI,KAGnEnwjB,EAAS5yJ,KACJ5B,EAAK,EAAG6ktB,EAAiBvioB,EAActiF,EAAK6ktB,EAAexmtB,OAAQ2B,IAAM,CAE9Eu0J,EADeswjB,EAAe7ktB,MAItC43W,EAAO36W,UAAUyltB,wBAA0B,SAAUxxoB,EAAYtB,EAAW0S,EAAcnd,EAAYgJ,EAAU8koB,EAAgB7koB,GAC5H,IACI84T,EADAvlY,EAAQC,KAER49B,EAAO59B,KAAKmpE,KAAKitQ,eAAex4S,KAC/BngC,EAAkB4zsB,IACnB9toB,EAAWnkE,QAAQ,SAAU5C,EAAMyrsB,GAC/B,IAAIhjW,EAAYzoW,EAAK60sB,GACjBn/iB,KACAywjB,EAAclltB,EAAkBmgC,GAASqnU,EAAYrnU,EACpDngC,EAAkBwnW,IAAsC,IAAxBvkR,EAAajkF,SAC9C6oY,EAAa9oY,EAAK+vE,GAClB2lF,EAAQ1tJ,KAAKzE,EAAM2itB,cAAcpzoB,EAAY24nB,EAAWzrsB,EAAM+vE,EAAUyB,EAAWxB,EAAcy4R,KAErGllW,EAAM6itB,gCAAgCt9U,EAAYq9U,EAAYzwjB,MAI1E8jN,EAAO36W,UAAU6ntB,mBAAqB,SAAUritB,GAC5C,IAAIsG,EAAStG,EAAEsG,OACXgvU,EAASn2U,KAAKmpE,KAAKitQ,eACnB9yU,EAAKtD,KAAKmpE,KAAKnoE,QAAQsC,GAAK,sBAC5B6/sB,EAA0B,WAAhBhtY,EAAOzvU,KAAoB,eAAkC,YAAhByvU,EAAOzvU,KAAsB,gBACpF,gBACJ,GAAIS,EAAO7D,GAAG/E,QAAQ4ktB,GAAW,EAAG,CAChC,IAAI7zoB,EAAa9zD,WAAWrU,EAAO7D,GAAGpG,MAAM,KAAK,IAC7C+qsB,EAAYzsrB,WAAWrU,EAAO7D,GAAGpG,MAAM,KAAK,IAC5C0gC,OAAO,EACPE,OAAS,EACT+T,OAAc,EACZp0C,EAAkBkF,GAAcW,EAAItD,KAAKmpE,KAAKnoE,QAAQsC,MACxDiB,EAAO5B,GAAcW,EAAItD,KAAKmpE,KAAKnoE,QAAQsC,KAE/C,IAAIomE,EAAQ1pE,KAAKmpE,KAAK0H,iBAAiBvB,GACvC,GAAI6mQ,EAAO3+S,SAAWx3B,KAAK4+sB,2BAA2BnitB,OAAS,GACxC,gBAAhB05U,EAAOp4S,OAA2C,WAAhBo4S,EAAOzvU,KAAoBgjE,EAAMlyC,QACtD,YAAhB2+S,EAAOzvU,KAAqBgjE,EAAM8iU,eAAehxX,WAAWrU,EAAO7D,GAAGpG,MAAM,KAAK,KAAKs6B,QACjFx3B,KAAKmpE,KAAK6woB,iBAAiBh6sB,KAAKmpE,KAAK0H,iBAAiBvB,KAE3D,IAAK,IADD/H,EAAUvnE,KAAKmpE,KAAK73C,UAAU1lB,wBACzBzP,EAAI,EAAGA,EAAI6D,KAAKo4U,iBAAiB37U,OAAQN,IAAK,CACnD,IAAIg6O,EAAcn2O,KAAKo4U,iBAAiBj8U,GACpCyosB,EAAgBjisB,GAAc3C,KAAKmpE,KAAKnoE,QAAQsC,GAAK,iBAAmBnH,EAAG6D,KAAKmpE,KAAKnoE,QAAQsC,IAC7Fy9rB,EAAa6D,EAAch5rB,wBAC3BynB,EAAO,IAAI6C,GAAK7pB,KAAKE,IAAIw0rB,EAAWv0rB,KAAO+6D,EAAQ/6D,MAAOH,KAAKE,IAAIw0rB,EAAWr0rB,IAAM66D,EAAQ76D,KAAMq0rB,EAAW/qrB,MAAO+qrB,EAAWhrrB,QAInI,GAHA6nB,EAAOgnqB,EAAc/xrB,aAAa,QAClCirB,EAASq4S,EAAO4qY,YAAYvqrB,MAC5Bqb,EAAcskS,EAAO4qY,YAAY/qsB,OAC5BvY,EAAkB04O,EAAkB,MAErC,IAAK,IADD35O,EAAO25O,EAAkB,KACpB5yN,EAAI,EAAGA,EAAI/mB,EAAKC,OAAQ8mB,IAC7B,GAAI0krB,IAAczrsB,EAAK+mB,GAAc,WAAK+rD,IAAe9yE,EAAK+mB,GAAe,WAAG,CAC5EvjB,KAAKojtB,yBAAyBjtY,EAAQv4S,EAAME,EAAQx6B,EAAIuuC,EAAaxe,GACrE,aAQd51B,EAAkBkF,GAAcW,EAAItD,KAAKmpE,KAAKnoE,QAAQsC,MACxDiB,EAAO5B,GAAcW,EAAItD,KAAKmpE,KAAKnoE,QAAQsC,MAIvD0yW,EAAO36W,UAAU+ntB,yBAA2B,SAAUjtY,EAAQv4S,EAAME,EAAQx6B,EAAIuuC,EAAaxe,GACzF,IAAItW,EACA4yU,EACA1hU,EACAC,EAeInR,EAVU,gBAFsB,SAAvBo5T,EAAO/8S,YAA+C,QAApB+8S,EAAOjiU,UAA0C,WAApBiiU,EAAOjiU,SACjF,aAAe,WAAaiiU,EAAO/8S,aAEhC+8S,EAAOktY,gBASD,OAFPp1rB,EAAOoF,EAAKtmB,EAAKsmB,EAAKrd,MAAQ,GAER,KADtBkY,EAAOmF,EAAKrmB,EAAKqmB,EAAW,QACO,OAASpF,EAbxC,IAawD,KAAOC,EAd9D,IAeD,OAASD,EAdT,IAcyB,KAAOC,EAf/B,IAegD,MAP9C,OAFPD,EAAOoF,EAAKtmB,EAAKsmB,EAAKrd,MAAQ,GAER,KADtBkY,EAAOmF,EAAKrmB,GACuB,OAASihB,EAPxC,IAOwD,KAAOC,EAR9D,IASD,OAASD,EART,IAQyB,KAAOC,EAT/B,IASgD,MAUpDioT,EAAOktY,gBASD,OAFPp1rB,EAAOoF,EAAKtmB,GAEU,KADtBmhB,EAAOmF,EAAKrmB,EAAKqmB,EAAKtd,OAAS,GACI,OAASkY,EA3BxC,IA2BwD,KAAOC,EA5B9D,IA6BD,OAASD,EA5BT,IA4ByB,KAAOC,EA7B/B,IA6BgD,MAP9C,OAFPD,EAAOoF,EAAKtmB,EAAKsmB,EAAU,OAEL,KADtBnF,EAAOmF,EAAKrmB,EAAKqmB,EAAKtd,OAAS,GACI,OAASkY,EArBxC,IAqBwD,KAAOC,EAtB9D,IAuBD,OAASD,EAtBT,IAsByB,KAAOC,EAvB/B,IAuBgD,MAS7DyhU,EAAc,IAAIv5T,GAAW9yB,EAAIs6B,EAAMiU,EAAa/T,EAAQ,EAAG,GAAI/gB,GACnE/c,KAAKmpE,KAAK73C,UAAU3vB,YAAY3B,KAAKmpE,KAAKt7C,SAASsI,SAASw5T,KAEhEqmB,EAAO36W,UAAUkpB,WAAa,SAAUvjB,GACpCuE,GAAanB,IAAIpD,EAASwK,GAAQ0+E,gBAAiBlqF,KAAKsitB,eAAgBtitB,OAE5Eg2W,EAAO36W,UAAUqB,iBAAmB,WAC5BsD,KAAKmpE,KAAK6d,cAGdhnF,KAAKmpE,KAAKyc,GAAGp6E,GAAQ2+E,eAAgBnqF,KAAKkjtB,mBAAoBljtB,MAC9DA,KAAKmpE,KAAKyc,GAAGp6E,GAAQ4+E,cAAepqF,KAAKkjtB,mBAAoBljtB,QAuFjEg2W,EAAO36W,UAAUuB,oBAAsB,WAC/BoD,KAAKmpE,KAAK6d,cAGdhnF,KAAKmpE,KAAK6c,IAAIx6E,GAAQ2+E,eAAgBnqF,KAAKkjtB,oBAC3CljtB,KAAKmpE,KAAK6c,IAAIx6E,GAAQ4+E,cAAepqF,KAAKkjtB,sBAG9CltW,EAAO36W,UAAUqntB,cAAgB,SAAUpzoB,EAAY24nB,EAAWzrsB,EAAM+vE,EAAUyB,EAAW0B,EAAmB1yE,GAC5G,IAAI6ltB,KACJ,GAAkD,mBAA9CvktB,OAAOjD,UAAU6R,SAAS5L,KAAK0sE,GAC/B,IAAK,IAAI7xE,EAAI,EAAGA,EAAI6xE,EAAUvxE,OAAQN,IAAK,CACvB6xE,EAAU7xE,GACA,WAAEuzE,KAAuBlzE,EAAK+vE,IACpDs2oB,EAAWr+sB,MACP8qE,WAAYA,EAAYC,WAAYpzE,EAAG8rsB,UAAWA,EAClDxwqB,KAAMj7B,EAAK+vE,GAAWvvE,MAAOA,IAK7C,OAAO6ltB,GAKX7sW,EAAO36W,UAAUkkC,cAAgB,WAC7B,MAAO,UAOXy2U,EAAO36W,UAAUiX,QAAU,SAAU62D,GAIjCnpE,KAAKpD,uBAEFo5W,KCpzBPstW,GAA2B,WAC3B,SAASA,EAAUn6oB,GACfnpE,KAAKmpE,KAAOA,EACZnpE,KAAKtD,mBAiKT,OA5JA4mtB,EAAUjotB,UAAUqB,iBAAmB,WAC/BsD,KAAKmpE,KAAK6d,cAGdhnF,KAAKmpE,KAAKyc,GAAGp6E,GAAQ2+E,eAAgBnqF,KAAK6/U,UAAW7/U,MACrDA,KAAKmpE,KAAKyc,GAAGp6E,GAAQ0+E,gBAAiBlqF,KAAK6/U,UAAW7/U,QAK1DsjtB,EAAUjotB,UAAUuB,oBAAsB,WAClCoD,KAAKmpE,KAAK6d,cAGdhnF,KAAKmpE,KAAK6c,IAAIx6E,GAAQ2+E,eAAgBnqF,KAAK6/U,WAC3C7/U,KAAKmpE,KAAK6c,IAAIx6E,GAAQ0+E,gBAAiBlqF,KAAK6/U,aAKhDyjY,EAAUjotB,UAAUkotB,aAAe,SAAUj0oB,EAAY73C,EAAMgI,GAC3D,IAAI0Z,EAAY42B,GAAiBT,EAAY73C,EAAMgI,EAAQz/B,KAAKmpE,MAC5D1pC,EACAz/B,KAAKwjtB,aAAarqqB,EAAW,KAAM,MAGnC90C,GAAY80C,IAGpBmqqB,EAAUjotB,UAAUwkV,UAAY,SAAUh/U,GACtC,IACIyuE,EADAn2B,EAAYt4C,EAAEsG,OAEdyqB,EAA4B,UAAlB/wB,EAAEw/U,aAA6C,MAAlBx/U,EAAEw/U,aAAwBx/U,EAAE6F,KAAKnI,QAAQ,UAAY,EAChG,KAA6C,IAAxC46C,EAAU71C,GAAG/E,QAAQ,eAAwB46C,EAAU71C,GAAG/E,QAAQ,oBAAsB,IACrD,2BAApC46C,EAAUtmC,aAAa,WAA0C+e,EAAS,CAC1E09C,EAAav6C,SAASokB,EAAU71C,GAAGpG,MAAM,gBAAgB,GAAGA,MAAM,KAAK,GAAI,IAC3E,IAAIsyE,OAAY,EACZhzE,OAAO,EACPintB,OAAU,EACVxb,OAAY,EAChB,GAAI9upB,EAAU71C,GAAG/E,QAAQ,eAAiB,EACtCkltB,EAAU1urB,SAASokB,EAAU71C,GAAGpG,MAAM,gBAAgB,GAAGA,MAAM,KAAK,GAAI,IACxEsyE,EAAYxvE,KAAKmpE,KAAKzX,OAAO4d,GAAYE,UAAoB,SACzDxvE,KAAKmpE,KAAKzX,OAAO4d,GAAYE,UAAoB,SAAEi0oB,GAAqB,WAAI,KAEhFjntB,EAAOiB,EADPwqsB,EAAYlzqB,SAASokB,EAAU71C,GAAGpG,MAAM,eAAe,GAAGA,MAAM,KAAK,GAAI,KACnC,KAAO8C,KAAKmpE,KAAKzX,OAAO4d,GAAY/L,WAAW0koB,GACrFjosB,KAAKu6sB,kBAAoBv6sB,KAAKmpE,KAAKzX,OAAO4d,GAAYiroB,uBAErD,GAAIphqB,EAAU71C,GAAG/E,QAAQ,gBAAkB,EAAG,CAC/C,IAAIm8sB,EAAS3lrB,SAASokB,EAAU71C,GAAGpG,MAAM,iBAAiB,GAAGA,MAAM,KAAK,GAAI,IAC5E+qsB,EAAYlzqB,SAASokB,EAAU71C,GAAGpG,MAAM,eAAe,GAAGA,MAAM,KAAK,GAAI,IACzEV,EAAOwD,KAAKmpE,KAAKzX,OAAO4d,GAAY8joB,eAAesH,GAAQn3oB,WAAW0koB,GACtEjosB,KAAKu6sB,kBAAoBv6sB,KAAKmpE,KAAKzX,OAAO4d,GAAY8joB,eAAesH,GAAQH,uBAE5E,GAAIphqB,EAAU71C,GAAG/E,QAAQ,gBAAkB,EAAG,CAC/C,IAAIuuU,EAAS/3S,SAASokB,EAAU71C,GAAGpG,MAAM,iBAAiB,GAAGA,MAAM,KAAK,GAAI,IAC5E+qsB,EAAYlzqB,SAASokB,EAAU71C,GAAGpG,MAAM,eAAe,GAAGA,MAAM,KAAK,GAAI,IACzEV,EAAOwD,KAAKmpE,KAAKzX,OAAO4d,GAAYk9T,eAAe1/D,GAAQvpQ,WAAW0koB,GACtEjosB,KAAKu6sB,kBAAoBv6sB,KAAKmpE,KAAKzX,OAAO4d,GAAYk9T,eAAe1/D,GAAQytY,sBAE5E,CACD,IAAItosB,EAAQ8iB,SAASokB,EAAU71C,GAAGpG,MAAM,qBAAqB,GAAGA,MAAM,KAAK,GAAI,IAC/EoyE,EAAav6C,SAASokB,EAAU71C,GAAGpG,MAAM,gBAAgB,GAAGA,MAAM,KAAK,GAAI,IAC3EsyE,EAAY,KACZhzE,GACIgtE,SAAUxpE,KAAKmpE,KAAKzX,OAAO4d,GAAY0B,uBAAuB/+D,GAAOu3D,SACrEC,UAAWzpE,KAAKmpE,KAAKzX,OAAO4d,GAAY0B,uBAAuB/+D,GAAOw3D,WAE1EzpE,KAAKu6sB,kBAAoBv6sB,KAAKmpE,KAAKzX,OAAO4d,GAAY0B,uBAAuB/+D,GAAOsosB,kBAExF,GAAIv6sB,KAAKu6sB,kBAAkB96qB,OACvBz/B,KAAKwjtB,aAAarqqB,EAAWq2B,EAAWhzE,OAEvC,CACD,IAAIwE,EAAUR,SAASkN,uBAAuB,qBAAqB,GACnE,IAAKjQ,EAAkBuD,KACnBqD,GAAYrD,GACRA,EAAQsC,GAAG/E,QAAQ,oBAAsB,GAAG,CACxC0T,EAAQ8iB,SAAS/zB,EAAQsC,GAAGpG,MAAM,qBAAqB,GAAGA,MAAM,KAAK,GAAI,IAA7E,IACIwmtB,EAAe3urB,SAAS/zB,EAAQqT,cAAc/Q,GAAGpG,MAAM,gBAAgB,GAAGA,MAAM,KAAK,GAAI,IAC7F8D,EAAQwC,aAAa,eAAgBxD,KAAKmpE,KAAKzX,OAAOgypB,GAAc1yoB,uBAAuB/+D,GAAO+D,MAAM9I,YACxGlM,EAAQwC,aAAa,SAAUxD,KAAKmpE,KAAKzX,OAAOgypB,GAAc1yoB,uBAAuB/+D,GAAOukB,cAKvG,GAAI9oB,GAAuB,qBAAqBjR,OAAS,EAAG,CAE7D,IADA08C,EAAYzrC,GAAuB,qBAAqB,IAC1CpK,GAAG/E,QAAQ,oBAAsB,EAAG,CAC1C0T,EAAQ8iB,SAASokB,EAAU71C,GAAGpG,MAAM,qBAAqB,GAAGA,MAAM,KAAK,GAAI,IAC/EoyE,EAAav6C,SAASokB,EAAU9kC,cAAc/Q,GAAGpG,MAAM,gBAAgB,GAAGA,MAAM,KAAK,GAAI,IACzFi8C,EAAU31C,aAAa,eAAgBxD,KAAKmpE,KAAKzX,OAAO4d,GAAY0B,uBAAuB/+D,GAAO+D,MAAM9I,YACxGisC,EAAU31C,aAAa,SAAUxD,KAAKmpE,KAAKzX,OAAO4d,GAAY0B,uBAAuB/+D,GAAOukB,OAEhGnyB,GAAY80C,KAGpBmqqB,EAAUjotB,UAAUmotB,aAAe,SAAUrqqB,EAAWq2B,EAAWhzE,GAC/D,IAAI+Q,GACAE,QAASzN,KAAKu6sB,kBAAkB9ssB,QAChCmwB,MAAmD,IAA7Cub,EAAU71C,GAAG/E,QAAQ,mBAA4ByB,KAAKu6sB,kBAAkB38qB,KAAO,OACrF0G,QAAU9N,MAAOx2B,KAAKu6sB,kBAAkBj2qB,OAAO9N,MAAOxgB,MAAOhW,KAAKu6sB,kBAAkBj2qB,OAAOtuB,OAC3FyhB,KAAMk5qB,GACNxpsB,OAAQgyC,EAAU71C,GAClBu1B,QAAQ,EACR22C,UAAWA,EACXhzE,KAAMA,GAEVwD,KAAKmpE,KAAK3iD,QAAQmqrB,GAAepjsB,GACjCvN,KAAK2jtB,aAAaxqqB,EAAW5rC,IAEjC+1sB,EAAUjotB,UAAUsotB,aAAe,SAAUxqqB,EAAW5rC,GACpD,GAEwC,sBAApC4rC,EAAUtmC,aAAa,SAF3B,CAMI,GAAInF,GAAuB,qBAAqBjR,OAAS,EAAG,CACxD,IAAIiG,EAAOgL,GAAuB,qBAAqB,GAEvD,GADArJ,GAAY3B,GACRA,EAAKY,GAAG/E,QAAQ,oBAAsB,EAAG,CACzC,IAAI0T,EAAQ8iB,SAASryB,EAAKY,GAAGpG,MAAM,qBAAqB,GAAGA,MAAM,KAAK,GAAI,IACtEoyE,EAAav6C,SAASryB,EAAK2R,cAAc/Q,GAAGpG,MAAM,gBAAgB,GAAGA,MAAM,KAAK,GAAI,IACxFwF,EAAKc,aAAa,eAAgBxD,KAAKmpE,KAAKzX,OAAO4d,GAAY0B,uBAAuB/+D,GAAO+D,MAAM9I,YACnGxK,EAAKc,aAAa,SAAUxD,KAAKmpE,KAAKzX,OAAO4d,GAAY0B,uBAAuB/+D,GAAOukB,QAG1FjJ,GAAW,gBAIZ0iD,GAAe,eAAgB,oBAAqB1iE,GAHpD/M,SAASuL,KAAKpK,YAAYquE,GAAY,eAAgB,oBAAqBziE,IAK/E4rC,EAAU31C,aAAa,eAAgB+J,EAAU+2B,OAAOtuB,MAAM9I,YAC9DisC,EAAU31C,aAAa,SAAU+J,EAAU+2B,OAAO9N,OAClD2iB,EAAU31C,aAAa,QAAS,uBAMxC8/sB,EAAUjotB,UAAUkkC,cAAgB,WAChC,MAAO,aAOX+jrB,EAAUjotB,UAAUiX,QAAU,SAAU62D,GAIpCnpE,KAAKpD,uBAEF0mtB,KCrKPl3W,GAA2B,WAE3B,SAASA,EAAUjjS,GACfnpE,KAAKmpE,KAAOA,EACZnpE,KAAKtD,mBAkKT,OA7JA0vW,EAAU/wW,UAAUqB,iBAAmB,WAC/BsD,KAAKmpE,KAAK6d,aAGdhnF,KAAKmpE,KAAKyc,GbFC,QaES5lF,KAAK4jtB,WAAY5jtB,OAKzCosW,EAAU/wW,UAAUuB,oBAAsB,WAClCoD,KAAKmpE,KAAK6d,aAGdhnF,KAAKmpE,KAAK6c,IbXC,QaWUhmF,KAAK4jtB,aAE9Bx3W,EAAU/wW,UAAUuotB,WAAa,SAAUzqqB,GACvC,GAAIA,EAAU71C,GAAG/E,QAAQ,eAAiB,GAAK46C,EAAU71C,GAAG/E,QAAQ,oBAAsB,EAAG,CACzF,IAAI+wE,OAAa,EACbE,OAAY,EACZhzE,OAAO,EACP+yE,OAAa,EACb04nB,OAAY,EAEhB,GADA34nB,EAAav6C,SAASokB,EAAU71C,GAAGpG,MAAM,gBAAgB,GAAGA,MAAM,KAAK,GAAI,IACvEi8C,EAAU71C,GAAG/E,QAAQ,eAAiB,EACtCgxE,EAAax6C,SAASokB,EAAU71C,GAAGpG,MAAM,gBAAgB,GAAGA,MAAM,KAAK,GAAI,IAC3EsyE,EAAYxvE,KAAKmpE,KAAKzX,OAAO4d,GAAYE,UAAoB,SACzDxvE,KAAKmpE,KAAKzX,OAAO4d,GAAYE,UAAoB,SAAED,GAAwB,WAAI,KAEnF/yE,EAAOiB,EADPwqsB,EAAYlzqB,SAASokB,EAAU71C,GAAGpG,MAAM,eAAe,GAAGA,MAAM,KAAK,GAAI,KACnC,KAAO8C,KAAKmpE,KAAKzX,OAAO4d,GAAY/L,WAAW0koB,GACrFjosB,KAAK6jtB,kBAAoB7jtB,KAAKmpE,KAAKzX,OAAO4d,GAAYkvjB,kBACtDx+nB,KAAK8jtB,cAAgB,aAEpB,GAAI3qqB,EAAU71C,GAAG/E,QAAQ,gBAAkB,EAAG,CAC/C,IAAIi2sB,EAAcz/qB,SAASokB,EAAU71C,GAAGpG,MAAM,iBAAiB,GAAGA,MAAM,KAAK,GAAI,IACjF+qsB,EAAYlzqB,SAASokB,EAAU71C,GAAGpG,MAAM,eAAe,GAAGA,MAAM,KAAK,GAAI,IACzEV,EAAOwD,KAAKmpE,KAAKzX,OAAO4d,GAAY8joB,eAAeoB,GAAajxoB,WAAW0koB,GAC3EjosB,KAAK6jtB,kBAAoB7jtB,KAAKmpE,KAAKzX,OAAO4d,GAAY8joB,eAAeoB,GAAah2E,kBAClFx+nB,KAAK8jtB,cAAgB,cAEpB,GAAI3qqB,EAAU71C,GAAG/E,QAAQ,gBAAkB,EAAG,CAC/C,IAAIu9sB,EAAc/mrB,SAASokB,EAAU71C,GAAGpG,MAAM,iBAAiB,GAAGA,MAAM,KAAK,GAAI,IACjF+qsB,EAAYlzqB,SAASokB,EAAU71C,GAAGpG,MAAM,eAAe,GAAGA,MAAM,KAAK,GAAI,IACzEV,EAAOwD,KAAKmpE,KAAKzX,OAAO4d,GAAYk9T,eAAesvU,GAAav4oB,WAAW0koB,GAC3EjosB,KAAK6jtB,kBAAoB7jtB,KAAKmpE,KAAKzX,OAAO4d,GAAYk9T,eAAesvU,GAAat9E,kBAClFx+nB,KAAK8jtB,cAAgB,aAEpB,CACD,IAAI7xsB,EAAQ8iB,SAASokB,EAAU71C,GAAGpG,MAAM,qBAAqB,GAAGA,MAAM,KAAK,GAAI,IAC/EsyE,EAAY,KACZhzE,GACIgtE,SAAUxpE,KAAKmpE,KAAKzX,OAAO4d,GAAY0B,uBAAuB/+D,GAAOu3D,SACrEC,UAAWzpE,KAAKmpE,KAAKzX,OAAO4d,GAAY0B,uBAAuB/+D,GAAOw3D,WAE1EzpE,KAAK6jtB,kBAAoB7jtB,KAAKmpE,KAAKzX,OAAO4d,GAAY0B,uBAAuB/+D,GAAOusnB,kBACpFx+nB,KAAK8jtB,cAAgB,iBAErB9jtB,KAAK6jtB,kBAAkBpkrB,QACvBz/B,KAAK+jtB,UAAU5qqB,EAAWq2B,EAAWhzE,KAOjD4vW,EAAU/wW,UAAUssN,aAAe,SAAUr4I,EAAY73C,EAAMgI,GAC3D,IAAI0Z,EAAY42B,GAAiBT,EAAY73C,EAAMgI,EAAQz/B,KAAKmpE,MAC5D1pC,EACAz/B,KAAK+jtB,UAAU5qqB,EAAW,KAAM,MAGhC90C,GAAY80C,IAMpBizT,EAAU/wW,UAAU0otB,UAAY,SAAU5qqB,EAAWq2B,EAAWhzE,GAGpCwD,KAAK6jtB,kBAF7B,IAGIt2sB,GACAE,QAASzN,KAAK6jtB,kBAAkBp2sB,QAChCmwB,KAA6B,mBAAvB59B,KAAK8jtB,cAAqC9jtB,KAAK6jtB,kBAAkBjmrB,KAAO,OAC9E0G,QAAU9N,MAAOx2B,KAAK6jtB,kBAAkBv/qB,OAAO9N,MAAOxgB,MAAOhW,KAAK6jtB,kBAAkBv/qB,OAAOtuB,OAC3FyhB,KAAMi5qB,GACNvpsB,OAAQgyC,EAAU71C,GAClBu1B,QAAQ,EACR22C,UAAWA,EACXhzE,KAAMA,GAMV,GAJAwD,KAAKmpE,KAAK3iD,QAAQkqrB,GAAenjsB,GAI7B4rC,EAAUtmC,aAAa,WAAa7S,KAAK8jtB,cAAgB,qBAEzD,GADAz/sB,GAAY80C,GACRA,EAAU71C,GAAG/E,QAAQ,oBAAsB,EAAG,CAC9C,IAAI0T,EAAQ8iB,SAASokB,EAAU71C,GAAGpG,MAAM,qBAAqB,GAAGA,MAAM,KAAK,GAAI,IAC3EoyE,EAAav6C,SAASokB,EAAU9kC,cAAc/Q,GAAGpG,MAAM,gBAAgB,GAAGA,MAAM,KAAK,GAAI,IAC7Fi8C,EAAU31C,aAAa,eAAgBxD,KAAKmpE,KAAKzX,OAAO4d,GAAY0B,uBAAuB/+D,GAAO+D,MAAM9I,YACxGisC,EAAU31C,aAAa,SAAUxD,KAAKmpE,KAAKzX,OAAO4d,GAAY0B,uBAAuB/+D,GAAOukB,YAG/F,CACD,IAAKx2B,KAAK6jtB,kBAAkBG,mBAAqBt2sB,GAAuB1N,KAAK8jtB,cAAgB,qBAAqBrntB,OAAS,EAAG,CAC1H,IAAIuH,EAAM0J,GAAuB1N,KAAK8jtB,cAAgB,qBAAqB,GAE3E,GADAz/sB,GAAYL,GACRA,EAAIV,GAAG/E,QAAQ,oBAAsB,EAAG,CACpC0T,EAAQ8iB,SAASokB,EAAU71C,GAAGpG,MAAM,qBAAqB,GAAGA,MAAM,KAAK,GAAI,IAC3EoyE,EAAav6C,SAASokB,EAAU9kC,cAAc/Q,GAAGpG,MAAM,gBAAgB,GAAGA,MAAM,KAAK,GAAI,IAC7F8G,EAAIR,aAAa,eAAgBxD,KAAKmpE,KAAKzX,OAAO4d,GAAY0B,uBAAuB/+D,GAAO+D,MAAM9I,YAClGlJ,EAAIR,aAAa,SAAUxD,KAAKmpE,KAAKzX,OAAO4d,GAAY0B,uBAAuB/+D,GAAOukB,QAGzFjJ,GAAWvtB,KAAK8jtB,cAAgB,gBAIjC7zoB,GAAejwE,KAAK8jtB,cAAgB,eAAgB9jtB,KAAK8jtB,cAAgB,oBAAqBv2sB,GAH9F/M,SAASuL,KAAKpK,YAAYquE,GAAYhwE,KAAK8jtB,cAAgB,eAAgB9jtB,KAAK8jtB,cAAgB,oBAAqBv2sB,IAKzH4rC,EAAU31C,aAAa,eAAgB+J,EAAU+2B,OAAOtuB,MAAM9I,YAC9DisC,EAAU31C,aAAa,SAAU+J,EAAU+2B,OAAO9N,OAClD2iB,EAAU31C,aAAa,QAASxD,KAAK8jtB,cAAgB,uBAqB7D13W,EAAU/wW,UAAUkkC,cAAgB,WAChC,MAAO,aAOX6sU,EAAU/wW,UAAUiX,QAAU,SAAU62D,GAIpCnpE,KAAKpD,uBAEFwvW,KCrKP63W,GAA6B,WAC7B,SAASA,EAAY96oB,GACjBnpE,KAAK4xB,SAAU,EACf5xB,KAAKkktB,WAAa,EAClBlktB,KAAKmpE,KAAOA,EACZnpE,KAAKgB,QAAUmoE,EAAKnoE,QACpBhB,KAAKtD,mBACLsD,KAAK+0Y,UAAY,IAAI/+V,IACjBI,QAAS,SACTliC,SAAU,YACV8gY,aAAch1Y,KAAKi1Y,eAAe35Y,KAAK0E,MACvCm2C,WAAYn2C,KAAKk1Y,qBAAqB55Y,KAAK0E,MAC3CuuH,UAAW,EAAGQ,WAAY,IAE9B/uH,KAAK+0Y,UAAU1+V,SAASr2C,KAAKgB,SA8SjC,OAzSAijtB,EAAY5otB,UAAUqB,iBAAmB,WACjCsD,KAAKmpE,KAAK6d,cAGdhnF,KAAKmpE,KAAKyc,GAAGp6E,GAAQ2+E,eAAgBnqF,KAAK6/U,UAAW7/U,MACrDA,KAAKmpE,KAAKyc,GAAGp6E,GAAQ4+E,cAAepqF,KAAK6/U,UAAW7/U,QAKxDiktB,EAAY5otB,UAAUuB,oBAAsB,WACpCoD,KAAKmpE,KAAK6d,cAGdhnF,KAAKmpE,KAAK6c,IAAIx6E,GAAQ2+E,eAAgBnqF,KAAK6/U,WAC3C7/U,KAAKmpE,KAAK6c,IAAIx6E,GAAQ4+E,cAAepqF,KAAK6/U,aAE9CokY,EAAY5otB,UAAUwkV,UAAY,SAAUh/U,GACpCb,KAAK4xB,UAAW,IAAI5R,MAAOC,UAAYjgB,KAAKkktB,aAGhDlktB,KAAK+gV,WAAWlgV,GAChBb,KAAKgiI,cAAcnhI,KAEvBojtB,EAAY5otB,UAAU0lV,WAAa,SAAUlgV,GACzC,IAAIiL,EACAI,EACJ,GAAIrL,EAAE6F,KAAKnI,QAAQ,UAAY,EAAG,CAC9ByB,KAAK4xB,SAAU,EACf,IAAIsvT,EAAWrgV,EACfqL,EAAQg1U,EAASviR,eAAe,GAAGtqB,QACnCvoC,EAAQo1U,EAASviR,eAAe,GAAGvqB,aAGnCp0C,KAAK4xB,QAA4B,UAAlB/wB,EAAEw/U,aAA6C,MAAlBx/U,EAAEw/U,YAC9Cv0U,EAAQjL,EAAEuzC,QACVloC,EAAQrL,EAAEwzC,QAEdr0C,KAAKmktB,MAAQ,IAAI/xoB,GAAYtmE,EAAOI,GACpClM,KAAKkktB,YAAa,IAAIlksB,MAAOC,UAAY,KAK7CgksB,EAAY5otB,UAAU2mI,cAAgB,SAAUnhI,GAC5C,GAAIb,KAAKsgB,aAAezf,EAAEsG,OAAO7D,GAC7BtD,KAAK+0Y,UAAU7iV,QAAQlyD,KAAKq1Y,oBAAoBr1Y,KAAKmktB,MAAO,SAE3D,GAAInktB,KAAKoktB,iBAAiBvjtB,EAAEsG,QAAS,CAEtC,GADAnH,KAAKuxsB,WAAa1wsB,EAAEsG,OAAO0L,aAAa,QACpCrS,SAASmC,cAAc,oBAAsB3C,KAAKgkI,kBAAkBhkI,KAAKgT,WAAahT,KAAK4xB,QAAS,CACpG,IAAI3xB,GACAyG,KAAM,KAAMmyB,QAAQ,EAAO73B,QAAShB,KAAKqktB,cAAe/ntB,MAAOuE,EAC/D42B,KAAM,SAAUtwB,OAAQnH,KAAK6qH,YAGjC,YADA7qH,KAAKk1Y,qBAAqBj1Y,GAI1BD,KAAK6jI,aAAa,GAEtB7jI,KAAK+0Y,UAAUrzY,KAAK1B,KAAKq1Y,oBAAoBr1Y,KAAKmktB,aAGlDnktB,KAAK6jI,aAAa,IAG1BoglB,EAAY5otB,UAAU00E,iBAAmB,SAAU/uE,GAC/C,IAAIsjtB,GAAiB,eAAgB,gBAAiB,iBACtD,IAAK7mtB,EAAkBuD,EAAQsC,KAAOtC,EAAQsC,GAAG7G,OAAS,GAAKuE,EAAQsC,KAAOtD,KAAKmpE,KAAKnoE,QAAQsC,GAC5F,IAAK,IAAInH,EAAI,EAAGA,EAAImotB,EAAc7ntB,OAAQN,IAAK,CAC3C,GAAI6E,EAAQsC,GAAG/E,QAAQ+ltB,EAAcnotB,KAAO,EAAG,CAC3C6D,KAAK6qH,WAAa7pH,EAClB,MAEK7E,IAAMmotB,EAAc7ntB,OAAS,GAClCuD,KAAK+vE,iBAAiB/uE,EAAQP,iBAIjCO,EAAQsC,KAAOtD,KAAKmpE,KAAKnoE,QAAQsC,IACtCtD,KAAK+vE,iBAAiB/uE,EAAQP,aAItCwjtB,EAAY5otB,UAAUwoI,aAAe,SAAUhkI,EAAOqL,EAAU8sB,QAC3C,IAAb9sB,IAAuBA,EAAW,QACvB,IAAX8sB,IAAqBA,EAAS,QAClCh4B,KAAK+0Y,UAAUhmR,WAAa7jH,EAC5BlL,KAAK+0Y,UAAU9yY,OAAQpC,MAAOA,EAAOqL,SAAUA,EAAU8sB,OAAQA,IACjEh4B,KAAKsgB,WAAa,MAGtB2jsB,EAAY5otB,UAAU+otB,iBAAmB,SAAUh2mB,GAG/C,GAFApuG,KAAK6qH,WAAa,KAClB7qH,KAAK+vE,iBAAiBq+B,GAClB3wG,EAAkBuC,KAAK6qH,YACvB,OAAO,EAEX,IAAI1jH,EAASnH,KAAK6qH,WAAWvnH,GAC7BtD,KAAKsgB,WAAanZ,EAClB,IAAI8K,EAAQuJ,WAAWrU,EAAOjK,MAAM,KAAK,IACrCwsE,EAAQ1pE,KAAKmpE,KAAK0H,iBAAiB5+D,GACvC,GAAI9K,EAAO5I,QAAQ,iBAAmB,EAAG,CACrCyB,KAAKgT,QAAU02D,EAAM0kU,gBACrB,IAAIzgX,EAAQoH,SAAS5tB,EAAOjK,MAAM,KAAK,GAAI,IAC3C,GAAIO,EAAkBisE,EAAM8F,UAAoB,UAC5C,OAAO,EAEX,IAAIxyE,EAAQ0sE,EAAM8F,UAAoB,SAAE7hD,GAAmB,WAE3D,GADA1b,EAAQq6D,GAAqB5C,EAAMnG,WAAYvmE,EAAO0sE,EAAM+F,cAAe/F,EAAMgG,mBAC7E1vE,KAAKgT,QAAQwkB,WAAc/5B,EAAkBwU,KAAW+vC,MAAM/vC,KAAaxU,EAAkBT,IAE7F,OADAgD,KAAKm2O,YAAczsK,EAAMnG,WAAWtxD,IAAUjV,GACvC,OAGV,GAAImK,EAAO5I,QAAQ,kBAAoB,EAAG,CAC3C,IAAIu9sB,EAAc/mrB,SAAS5tB,EAAOjK,MAAM,KAAK,GAAI,IAC7C+qsB,EAAYlzqB,SAAS5tB,EAAOjK,MAAM,KAAK,GAAI,IAC3C4vU,EAASpjQ,EAAM8iU,eAAesvU,GAElC,GADA97sB,KAAKgT,QAAU85T,EAAOshE,iBACjBpsV,MAAM85pB,IAAgB97sB,KAAKgT,QAAQwkB,QAEpC,OADAx3B,KAAKm2O,YAAc22F,EAAOvpQ,WAAW0koB,IAC9B,OAGV,GAAI9gsB,EAAO5I,QAAQ,kBAAoB,EAAG,CAC3C,IAAIi2sB,EAAcz/qB,SAAS5tB,EAAOjK,MAAM,KAAK,GAAI,IAC7C+qsB,EAAYlzqB,SAAS5tB,EAAOjK,MAAM,KAAK,GAAI,IAE/C,GADA8C,KAAKgT,QAAU02D,EAAM0poB,eAAeoB,GAAapmU,iBAC5CpsV,MAAMwypB,IAAgBx0sB,KAAKgT,QAAQwkB,QAEpC,OADAx3B,KAAKm2O,YAAczsK,EAAM0poB,eAAeoB,GAAajxoB,WAAW0koB,IACzD,EAGf,OAAO,GAKXgc,EAAY5otB,UAAUg6Y,oBAAsB,SAAU3nX,EAAU0rC,QAC5C,IAAZA,IAAsBA,EAAU,IACpC,IAAIp4D,EAAUusB,GAAWvtB,KAAKgB,QAAQsC,GAAK,gBACvCikE,EAAUh6C,GAAWvtB,KAAKgB,QAAQsC,GAAK,QAAQsI,wBAgBnD,OAfA8hB,EAAS3gB,GAAKw6D,EAAQ/6D,KACtBkhB,EAAS1gB,GAAMosD,EAAUmO,EAAQ76D,IACjC1M,KAAKkU,SAAWwZ,EACZ1sB,GACAA,EAAQ0D,MAAM8H,KAAOkhB,EAAS3gB,EAAI,KAClC/L,EAAQ0D,MAAMgI,IAAMghB,EAAS1gB,EAAI,OAGjChM,EAAUG,EAAc,OACpBmC,GAAItD,KAAKgB,QAAQsC,GAAK,eACtBC,OAAQ,2BAA6BmqB,EAAS3gB,EAAI,UAAY2gB,EAAS1gB,EACnE,wEAERugB,GAAWvtB,KAAKgB,QAAQsC,GAAK,sBAAsB3B,YAAYX,IAE5DA,GAEXijtB,EAAY5otB,UAAUwxY,UAAY,SAAU7wW,EAAQx/B,GAChD,GAAIiB,EAAkBu+B,GAClB,OAAO,KAGX,IAAK,IAAI59B,EAAK,EAAGC,EADNC,OAAOhB,KAAKd,GACS4B,EAAKC,EAAO5B,OAAQ2B,IAAM,CACtD,IAAIf,EAAMgB,EAAOD,GACjB49B,EAASA,EAAO9+B,MAAM,KAAOG,EAAM,KAAK8jB,KAAK3kB,EAAKa,IAEtD,OAAO2+B,GAKXiorB,EAAY5otB,UAAU45Y,eAAiB,SAAUh1Y,GAC7CA,EAAK44B,OAAS74B,KAAKgkI,kBAAkBhkI,KAAKgT,SAC1ChT,KAAK+0Y,UAAUnpV,YAKnBq4pB,EAAY5otB,UAAU2oI,kBAAoB,SAAUhxH,QAChC,IAAZA,IAAsBA,EAAUhT,KAAKgT,SACzC,IAAIovL,EAAY1jM,KAAWsB,KAAKm2O,YAAa,MAAM,GAC/Cn2O,KAAKmpE,KAAKntC,SAAWgmB,MAAMxmC,WAAW4mL,EAAUpvL,EAAQs+rB,eACxDlvgB,EAAUpvL,EAAQs+rB,WAAavioB,GAAY/uE,KAAKmpE,KAAM3tD,WAAW4mL,EAAUpvL,EAAQs+rB,cAEvF,IAAIl3qB,EAAUp6B,KAAK6sY,UAAU75X,EAAQgpB,OAAQomK,IAAcA,EAAUpvL,EAAQs+rB,WAC7El3qB,EAAUpnB,EAAQ/D,SAAWjP,KAAKuktB,aAAaxqrB,GAAoB/mB,EAAQ/D,SAA5B8qB,CAAsCqoK,IAAchoK,EACnGp6B,KAAKokS,UAAY1lS,EAAOsU,EAAQoxR,UAAWpxR,EAAQoxR,UAAW,MAAM,GACpEpkS,KAAKokS,UAAU5tQ,MAAQx2B,KAAKokS,UAAU5tQ,OAASx2B,KAAKuxsB,WACpD,IAAI34qB,GACAC,QAAQ,EAAOpB,KAAMioS,GACrBtlS,QAASA,EACTkK,OAAQtxB,EAAQsxB,OAChB8/P,UAAWpkS,KAAKokS,UAChBxmQ,KAAM5qB,EAAQ4qB,MAMlB,OAJA59B,KAAKmpE,KAAK3iD,QAAQk5S,GAAe9mS,GACjC54B,KAAKskC,OAAS1L,EAAS0L,OACvBtkC,KAAKuxsB,WAAa34qB,EAASgF,KAC3B59B,KAAK+0Y,UAAU36W,QAAUxB,EAASwB,QAC3BxB,EAASC,QAAWp7B,EAAkBm7B,EAASwB,UAAiC,KAArBxB,EAASwB,SAE/E6prB,EAAY5otB,UAAUkptB,aAAe,SAAU3gtB,GAC3C,IAAI4gtB,EAAgB,GAIpB,SAHGpltB,QAAQkC,KAAKsC,EAAU,SAAUI,GAChCwgtB,GAAiBxgtB,EAAIlC,YAElB0itB,GAKXP,EAAY5otB,UAAU65Y,qBAAuB,SAAUj1Y,EAAM+S,GAGzD,QAFgB,IAAZA,IAAsBA,EAAUhT,KAAKgT,SACzChT,KAAKqktB,cAAgBpktB,EAAKe,QACtBgS,EAAQ/D,SAWR,OAVAhJ,EAAkBhG,EAAKe,SACnB2wD,gBAAmB,cAAewjR,YAAe,cACjD1mP,YAAe,MAAOs+mB,iBAAkB,SAE5C9msB,EAAkBhG,EAAKe,QAAQ2B,cAAc,iBACzCqT,MAAS,MAAOD,OAAU,QAE1B/V,KAAK4xB,SACL5xB,KAAK6jI,aAAa,EAAG,KAAM,WAExB,KAEX,IAKI7gB,EALAt2F,EAAO1sB,KAAKokS,UACZ+wC,EAAcn1U,KAAKskC,OAAO9N,MAC1B8N,EAAStkC,KAAKskC,OAAOtuB,MAKrB01G,EAAWzrH,EAAKe,QAAQ2B,cAAc,gBAC1CsD,EAAkBhG,EAAKe,SACnB2wD,gBAAmB3xD,KAAKuxsB,WAAYp8X,YAAeA,GAAe,UAClE1mP,YAAenqD,EAAS,KAAMyoqB,iBAAkB,OAAQC,aAAgB,MAAOC,eAAgB,MAC/FC,gBAAiB,MAAOC,cAAe,MAAOC,iBAAkB,QAEpEnnsB,EAAkBhG,EAAKe,QAAQ2B,cAAc,mBACzC6zB,MAAS9J,EAAK8J,MAAOvJ,WAAcP,EAAKO,WAAYJ,SAAYH,EAAKI,KACrEC,WAAcL,EAAKK,WAAYC,UAAaN,EAAKM,UAAWigrB,eAAgB,MAC5EC,gBAAiB,MAAOC,cAAe,MAAOC,iBAAkB,QAEpEnnsB,EAAkBhG,EAAKe,QAAQ2B,cAAc,iBACzCqT,MAAS,GAhBK,EAgBcsuB,GAAU,KAAMvuB,OAhB9B,EAgBsDuuB,EAAS,OAE7EonF,EAAS5nH,UAAUK,SAAS,cAC5B6+G,EAAauyR,MACbtvY,EAAkBhG,EAAKe,QAAQ2B,cAAc,uBACzC6yY,iBAAoB,cAAeC,gBAAmB,cAAeC,kBAAqBvgE,EAC1FtsH,gBAAmB7lG,EAAY2yR,iBAAoB3yR,EAAYqkC,kBAAqBrkC,IAExF/8G,EACkBhG,EAAKe,QAAQ2B,cAAc,uBACzC6zB,MAAOx2B,KAAKuxsB,WAAY7ksB,IAAK,SAG5Bg/G,EAAS5nH,UAAUK,SAAS,kBACjC6+G,EAAauyR,MACbtvY,EAAkBhG,EAAKe,QAAQ2B,cAAc,uBACzC6yY,iBAAoB,cAAeC,gBAAmB,cAAeG,eAAkBzgE,EACvFtsH,gBAAmB7lG,EAAY2yR,iBAAoB3yR,EAAY6yR,eAAkB7yR,IAErF/8G,EACkBhG,EAAKe,QAAQ2B,cAAc,uBACzC6zB,MAAOx2B,KAAKuxsB,cAGpBtrsB,EAAkBhG,EAAKe,SACnBs1C,QAAW,QAASw/V,mBAAsB,WAC1CC,mBAAsB,QAEtB/1Y,KAAK4xB,SACL5xB,KAAK6jI,aAAa,IAAM,KAAM,YAMtCoglB,EAAY5otB,UAAUkkC,cAAgB,WAClC,MAAO,eAOX0krB,EAAY5otB,UAAUiX,QAAU,SAAU62D,GACtCnpE,KAAKpD,sBACLoD,KAAK+0Y,UAAUziY,WAEZ2xsB,KCzTPpphB,GAAsB,WACtB,SAASA,EAAK1xH,GACVnpE,KAAKg/U,WAAY,EACjBh/U,KAAKyktB,YAAa,EAClBzktB,KAAK4xB,SAAU,EACf5xB,KAAK0ktB,kBAAmB,EACxB1ktB,KAAKgpW,UAAY,IAAI9yU,GAAK,EAAG,EAAG,EAAG,GACnCl2B,KAAKinW,YAAcz7V,GAAQmb,KAAK8Q,KAChCz3B,KAAKyL,UAAYD,GAAQC,UACzBzL,KAAK2ktB,SAAU,EACf3ktB,KAAK4ktB,YAAc,EACnB5ktB,KAAKmxE,gBACLnxE,KAAKmpE,KAAOA,EACZnpE,KAAKknW,WAAkC,YAArBlnW,KAAKinW,YAA6BjnW,KAAKyL,UAAY,aAAe,iBAAoB,aACxGzL,KAAK66G,YAAc76G,KAAKyL,UAAY,eAAiB,aACrDzL,KAAKwlW,eAAiBxlW,KAAKmpE,KAAKkF,aAAam3R,eAC7CxlW,KAAKylW,UAAYzlW,KAAKmpE,KAAKkF,aAAa73C,MACxCx2B,KAAKtD,mBACLsD,KAAKuzsB,iBA62BT,OA12BA14gB,EAAKx/L,UAAUm+sB,eAAiB,SAAUtlsB,EAAU2wsB,EAAen+sB,GAC/D,IAAIkxB,EAAM53B,KAAKmpE,KACX27oB,EAAYltrB,EAAIq5qB,cAChB8T,EAAYntrB,EAAI6zB,MAChBgsX,EAAU7/Y,EAAIy2C,aAAaopW,QAC3BD,EAAU5/Y,EAAIy2C,aAAampW,QAC/B,IAAM5/Y,EAAIm6qB,YAAwB,WAATrrsB,EAAoBm+sB,GAAiBrtS,GAAWqtS,GAAiBptS,EAAUotS,GAAiBrtS,GAAU,CAC3H,IAAI0+R,EAAYt+qB,EAAImyC,YAChBi7oB,EAAYptrB,EAAI02C,kBAAuB,IACvC22oB,EAAYrtrB,EAAI02C,kBAAuB,IACvC42oB,EAAgB74sB,KAAKE,IAAIy4sB,EAAa,EAAIC,EAAa,GACvDE,EAAiB94sB,KAAKE,IAAIy4sB,EAAa,EAAIC,EAAa,GACxDnxrB,EAAQ8D,EAAIi7C,eACZuyoB,EAAkBtxrB,EAAM/mB,GAAOmpsB,EAAUlgsB,MAAQ+usB,EAAc7O,EAAUlgsB,MAAQ6usB,IAAmB3O,EAAUlgsB,MAAQ9B,EAASnH,GAC/Hs4sB,EAAkBvxrB,EAAM9mB,GAAOkpsB,EAAUngsB,OAASgvsB,EAAc7O,EAAUngsB,OAAS8usB,IAAmB3O,EAAUngsB,OAAS7B,EAASlH,GAClIwhT,EAAgBniT,KAAKE,IAAIqrB,EAAI02C,kBAAuB,IAAK,EAAI12C,EAAI02C,kBAAuB,IAAK,GAAKu2oB,EACtGO,EAAmB52Z,EAAgB52R,EAAImyC,YAAYh0D,OAAWmgsB,EAAUnpsB,IAAQi4sB,EAAc,GAAO9O,EAAUlgsB,MAAQ,EAAMkvsB,EAAgB,IAAQE,EACrJC,EAAmB72Z,EAAgB52R,EAAImyC,YAAYh0D,OAAWmgsB,EAAUlpsB,IAAQg4sB,EAAc,GAAO9O,EAAUngsB,OAAS,EAAMovsB,EAAiB,IAAQE,EACvJztrB,EAAIi7C,eAAiB,IAAI34B,GAAMkrqB,EAAiBC,GAChDztrB,EAAI6zB,MAAQo5pB,OAENjtrB,EAAa,WAAMitrB,GAAiBrtS,GAAWqtS,GAAiBptS,IACtEz3a,KAAKsltB,yBAAyBR,EAAWD,EAAe3wsB,GACxD0jB,EAAIq5qB,cAAgB4T,EACpBjtrB,EAAI6zB,MAAQp/C,KAAK87D,IAAI,EAAG08oB,EAAgB,GACxCjtrB,EAAIg3C,cAAc2joB,cAAcsS,EAAejtrB,EAAIszC,oBACnDtzC,EAAIi7C,eAAe9lE,GAAK6qB,EAAIszC,mBAAmBn+D,EAAK,GAAM6qB,EAAI6zB,OAAU7zB,EAAI6zB,MAC5E7zB,EAAIi7C,eAAe7lE,GAAK4qB,EAAIszC,mBAAmBl+D,EAAK,GAAM4qB,EAAI6zB,OAAU7zB,EAAI6zB,OAEhFzrD,KAAKk4sB,iBACLtgrB,EAAIpR,QflCa,cekCQxmB,OAE7B66L,EAAKx/L,UAAUiqtB,yBAA2B,SAAUR,EAAWS,EAAcrxsB,GACzE,IAAI0jB,EAAM53B,KAAKmpE,KAEXzyC,EAASo4C,GAAe9uE,KAAKmpE,KAAKnoE,QAAQsC,IAAIsI,wBAC9C45sB,EAAoC,IAAzBn5sB,KAAK87D,IAAI,EAAG28oB,GACvBt5oB,EAAwC,IAA5Bn/D,KAAK87D,IAAI,EAAGo9oB,GACxBx4sB,GAAMmH,EAASnH,EAAI6qB,EAAIszC,mBAAmBn+D,GAAKy4sB,EAAY,IAC3Dx4sB,GAAMkH,EAASlH,EAAI4qB,EAAIszC,mBAAmBl+D,GAAKw4sB,EAAY,IAC/D5trB,EAAIszC,mBAAmBn+D,EAAsB,IAAjBw4sB,EAAuB7urB,EAAO1gB,MAAQ,MAC9D9B,EAASnH,EAAMA,EAAIy+D,EAAa,IACpC5zC,EAAIszC,mBAAmBl+D,EAAsB,IAAjBu4sB,EAAuB7urB,EAAO3gB,OAAS,MAC/D7B,EAASlH,EAAMA,EAAIw+D,EAAa,KAExCqvH,EAAKx/L,UAAUoqtB,mBAAqB,WAChC,IAAI7trB,EAAM53B,KAAKmpE,KACXr8C,EAAO8K,EAAIjC,cACXmvrB,EAAYltrB,EAAIq5qB,cAChB3oW,EAAWtoW,KAAKonW,YACpB,GAAIkB,EAASvyV,OAAS,GAAKuyV,EAAStyV,MAAQ,EAAG,CAC3C,IAAIjJ,EAAI/M,KAAKonW,YAAYr6V,EAAK/M,KAAKonW,YAAYpxV,MAAQ,EACnDhJ,EAAIhN,KAAKonW,YAAYp6V,EAAKhN,KAAKonW,YAAYrxV,OAAS,EACpD2vsB,OAAwB,EAC5B,GAAK9trB,EAAIm6qB,UAUL2T,EAAwBZ,EAAaz4sB,KAAKoxB,MAAMqnrB,GAAeh4rB,EAAK9W,MAAQsyV,EAAStyV,MAAU8W,EAAK/W,OAASuyV,EAASvyV,QAAW,GACjI/V,KAAKsltB,yBAAyBR,EAAWY,GAAyB34sB,EAAGA,EAAGC,EAAGA,IAC3E4qB,EAAIq5qB,cAAgByU,EACpB9trB,EAAIg3C,cAAc2joB,cAAcmT,EAAuB9trB,EAAIszC,oBAC3DtzC,EAAIi7C,eAAe9lE,GAAK6qB,EAAIszC,mBAAmBn+D,EAAK,GAAMV,KAAK87D,IAAI,EAAGu9oB,IACjEr5sB,KAAK87D,IAAI,EAAGu9oB,GACjB9trB,EAAIi7C,eAAe7lE,GAAK4qB,EAAIszC,mBAAmBl+D,EAAK,GAAMX,KAAK87D,IAAI,EAAGu9oB,IACjEr5sB,KAAK87D,IAAI,EAAGu9oB,GACjB9trB,EAAI6zB,MAASp/C,KAAK87D,IAAI,EAAGu9oB,OAlBT,CAChB,IAAIj6pB,EAAQ7zB,EAAIq6C,cAAgBr6C,EAAI6zB,MACpCi6pB,EAAwBj6pB,EAAQp/C,KAAKoxB,OAAS3Q,EAAK9W,MAAQsyV,EAAStyV,MAAU8W,EAAK/W,OAASuyV,EAASvyV,QAAW,GAChH,IAAI88D,EAAiBj7C,EAAIxF,cAAgBwF,EAAIi7C,eACzCuyoB,EAAkBvyoB,EAAe9lE,GAAO+f,EAAK9W,MAAQy1C,EAAU3+B,EAAK9W,MAAQ0vsB,IAA2B54rB,EAAK9W,MAAQjJ,GACpHs4sB,EAAkBxyoB,EAAe7lE,GAAO8f,EAAK/W,OAAS01C,EAAU3+B,EAAK/W,OAAS2vsB,IAA2B54rB,EAAK/W,OAAS/I,GAC3H4qB,EAAIi7C,eAAiB,IAAI34B,GAAMkrqB,EAAiBC,GAChDztrB,EAAI6zB,MAAQi6pB,EAahB1ltB,KAAKk4sB,gBAAe,GACpBl4sB,KAAKonW,YAAc,OAG3BvsK,EAAKx/L,UAAUsqtB,eAAiB,SAAUC,GACtC5ltB,KAAK6ltB,UAAY,EACjB7ltB,KAAK8ltB,YAAcF,GAEvB/qhB,EAAKx/L,UAAU0qtB,kBAAoB,WACV,IAAjB/ltB,KAAKgmtB,QACLhmtB,KAAK2ltB,eAAe,QAGpB3ltB,KAAK2ltB,eAAe,OAG5B9qhB,EAAKx/L,UAAUwtW,oBAAsB,SAAUhoW,GAC3C,IACI+2B,EAAM53B,KAAKmpE,KACX27oB,EAAYltrB,EAAIq5qB,cAChBiF,EAAYt+qB,EAAImyC,YAChBte,EAAQylB,GAAelxE,KAAK2mW,eAAgB3mW,KAAK0mW,eACjDu/W,EAAcp0oB,GAAeN,GAAWvxE,KAAK0mW,cAAe1mW,KAAKmpE,OACjE+8oB,EAAWz6pB,EAAQzrD,KAAK6ltB,UAC5B7ltB,KAAK6ltB,UAAYp6pB,EACjBzrD,KAAK4ktB,aAAesB,EACpBlmtB,KAAK4ktB,YAAcv4sB,KAAK0T,IAAI/f,KAAKmpE,KAAKkF,aAAaopW,QAASpra,KAAKC,IAAItM,KAAK4ktB,YAAa5ktB,KAAKmpE,KAAKkF,aAAampW,UAC9G,IAAIkuS,EAAwB1ltB,KAAK4ktB,YACjC,GAEKhtrB,EAAIm6qB,UAcJ,CACD,IAAIoU,EAAgBT,EACpB1ltB,KAAKsltB,yBAAyBR,EAAWqB,GAAiBp5sB,EAAGk5sB,EAAYl5sB,EAAGC,EAAGi5sB,EAAYj5sB,IAC3F4qB,EAAIq5qB,cAAgBkV,EACpBvurB,EAAIg3C,cAAc2joB,cAAc4T,EAAevurB,EAAIszC,oBACnDtzC,EAAIi7C,eAAe9lE,GAAK6qB,EAAIszC,mBAAmBn+D,EAAK,GAAMV,KAAK87D,IAAI,EAAGg+oB,IACjE95sB,KAAK87D,IAAI,EAAGg+oB,GACjBvurB,EAAIi7C,eAAe7lE,GAAK4qB,EAAIszC,mBAAmBl+D,EAAK,GAAMX,KAAK87D,IAAI,EAAGg+oB,IACjE95sB,KAAK87D,IAAI,EAAGg+oB,GACjBvurB,EAAI6zB,MAASp/C,KAAK87D,IAAI,EAAGg+oB,OAvBT,CAChB,IAAInB,EAAYptrB,EAAI02C,kBAAuB,IACvC22oB,EAAYrtrB,EAAI02C,kBAAuB,IAGvCuE,GAFgBxmE,KAAKE,IAAIy4sB,EAAa,EAAIC,EAAa,GACtC54sB,KAAKE,IAAIy4sB,EAAa,EAAIC,EAAa,GACvCrtrB,EAAIi7C,gBAErBuzoB,GADgB/5sB,KAAKE,IAAIqrB,EAAI02C,kBAAuB,IAAK,EAAI12C,EAAI02C,kBAAuB,IAAK,GACzEuE,EAAe9lE,GAAOmpsB,EAAUlgsB,MAAQ4hB,EAAI6zB,MAAUyqpB,EAAUlgsB,MAAQ0vsB,IAA2BxP,EAAUlgsB,MAAQiwsB,EAAYl5sB,IACrJs5sB,EAAoBxzoB,EAAe7lE,GAAOkpsB,EAAUngsB,OAAS6hB,EAAI6zB,MAAUyqpB,EAAUngsB,OAAS2vsB,IAA2BxP,EAAUngsB,OAASkwsB,EAAYj5sB,GAG5J4qB,EAAIi7C,eAAiB,IAAI34B,GAAMksqB,EAAmBC,GAClDzurB,EAAI6zB,MAAQi6pB,EAahB1ltB,KAAKk4sB,kBAETr9gB,EAAKx/L,UAAUirtB,kBAAoB,WAC/B,IAGIv5sB,EACAC,EACAgJ,EACAD,EANA6hB,EAAM53B,KAAKmpE,KACXi9I,EAAOpmN,KAAKumtB,gBACZl9nB,EAAOrpF,KAAKwmtB,gBAMhBxwsB,EAAQ3J,KAAKE,IAAI88E,EAAKt8E,EAAIq5M,EAAKr5M,GAC/BgJ,EAAS1J,KAAKE,IAAI88E,EAAKr8E,EAAIo5M,EAAKp5M,GAChCD,EAAMs8E,EAAKt8E,EAAIq5M,EAAKr5M,EAAKq5M,EAAKr5M,EAAIq5M,EAAKr5M,EAAIiJ,EAC3ChJ,EAAMq8E,EAAKr8E,EAAIo5M,EAAKp5M,EAAKo5M,EAAKp5M,EAAIo5M,EAAKp5M,EAAI+I,EACzB+4D,GAAel3C,EAAI52B,QAAQsC,IAAIsI,wBACjD,GAAKmB,EAAI6qB,EAAImyC,YAAYh9D,GAAKA,EAAK6qB,EAAImyC,YAAYh9D,EAAI6qB,EAAImyC,YAAY/zD,OAClEhJ,EAAI4qB,EAAImyC,YAAY/8D,GAAOA,EAAI4qB,EAAImyC,YAAY/8D,EAAI4qB,EAAImyC,YAAYh0D,OAAS,CAC7E/V,KAAKonW,YAAc,IAAIlxU,GAAKnpB,EAAGC,EAAGgJ,EAAOD,GACzC,IAAI0wsB,EAAgB7urB,EAAI/J,SAASmS,WAC7B18B,GAAIs0B,EAAI52B,QAAQsC,GAAK,0BACrB0S,MAAO4hB,EAAIjC,cAAc3f,MACzBD,OAAQ6hB,EAAIjC,cAAc5f,SAE1B2wsB,EAAa,IAAIxiZ,GAAWtsS,EAAI52B,QAAQsC,GAAK,YAAa,WAdnD0S,MAAO,EAAGwgB,MAAO,WAcqD,GAAKx2B,KAAKonW,YAAa,EAAG,EAAG,GAAI,KAClHq/W,EAAc9ktB,YAAYi2B,EAAI/J,SAAS8V,cAAc+irB,IACrD53oB,GAAel3C,EAAI52B,QAAQsC,GAAK,sBAAsB3B,YAAY8ktB,KAM1E5rhB,EAAKx/L,UAAUsrtB,iBAAmB,SAAU3ltB,EAASu3B,EAASxrB,EAAGC,EAAGy+C,GAChE,IAAIvgD,EAAWlL,KAAKonb,aAAan1D,kBAC5B15V,GAAwB,IAAbrtB,EAIhB4mE,GAAY9wE,EAAS,EAAGkK,EAAU,IAAIknE,GAAYrlE,EAAGC,GAAIy+C,EAAOzrD,KAAKmpE,KAAKY,YAAa/pE,KAAKmpE,MAHxFnoE,EAAQwC,aAAa,YAAa,WAAqB,gBAAkBuJ,EAAI,IAAMC,EAAI,OAK/F6tL,EAAKx/L,UAAU68sB,eAAiB,SAAU3/qB,GACtC,IAAI+2C,EACJtvE,KAAK4mtB,cAAgB,EACrB,IAAIn7pB,EAAQzrD,KAAKmpE,KAAK1d,MAClB1+C,EAAI/M,KAAKmpE,KAAK0J,eAAe9lE,EAC7BC,EAAIhN,KAAKmpE,KAAK0J,eAAe7lE,EACjC,GACIhN,KAAK23sB,mBAAoB,CACzB,IAAK,IAAIx7sB,EAAI,EAAGA,EAAI6D,KAAK23sB,mBAAmBxyoB,kBAAmBhpE,IAAK,CAChE,IAAI24sB,EAAe90sB,KAAK23sB,mBAAmBpmsB,WAAWpV,GACtD,GAA6B,MAAzB24sB,EAAa9xsB,QAAiB,CAC9BhD,KAAK4mtB,gBACL,IAAI30sB,EAAQuJ,WAAWs5rB,EAAaxxsB,GAAGpG,MAAM,KAAK,IAClD8C,KAAKonb,aAAepnb,KAAKmpE,KAAK0H,iBAAiB5+D,GAE/C,IAAK,IADDqrB,EAASt9B,KAAKmpE,KAAKyF,cAAcC,gBAAgB7uE,KAAKonb,cACjD7ja,EAAI,EAAGA,EAAIuxrB,EAAa3voB,kBAAmB5hD,IAAK,CACrD,IAAIsjsB,EAAa/R,EAAavjsB,WAAWgS,GACzC,GAAMsjsB,EAAWvjtB,GAAG/E,QAAQ,mBAAqB,GAASsotB,EAAWvjtB,GAAG/E,QAAQ,kBAAoB,GAC1FsotB,EAAWvjtB,GAAG/E,QAAQ,0BAA4B,GAUvD,GAAIsotB,EAAWvjtB,GAAG/E,QAAQ,mBAAqB,EAChD,IAAK,IAAI4nB,EAAI,EAAGA,EAAI0gsB,EAAW1hpB,kBAAmBh/C,IAC9CnmB,KAAK8mtB,gBAAgBD,EAAWt1sB,WAAW4U,GAAImX,EAAQvwB,EAAGC,EAAGy+C,EAAO,SAAUlzB,QAGjF,GAAIsurB,EAAWvjtB,GAAG/E,QAAQ,kBAAoB,EAE1C,CAAA,IADD47B,OAAe,EACnB,IAAShU,EAAI,EAAGA,EAAI0gsB,EAAW1hpB,kBAAmBh/C,IAAK,EACnDgU,EAAe0srB,EAAWt1sB,WAAW4U,IACFtT,aAAa,aAChDy8D,EAAa9zD,WAAW2e,EAAa72B,GAAGpG,MAAM,KAAK,IAGnD,IAAK,IAFD6ptB,EAAavrsB,WAAW2e,EAAa72B,GAAGpG,MAAM,KAAK,IACnD+qsB,EAAYzsrB,WAAW2e,EAAa72B,GAAGpG,MAAM,KAAK,IAC7CuqC,EAAI,EAAGA,EAAIznC,KAAKmpE,KAAKiroB,aAAawG,iBAAiBn+sB,OAAQgrC,IAAK,CACrE,IAAImzqB,EAAmB56sB,KAAKmpE,KAAKiroB,aAAawG,iBAAiBnzqB,GAC/D,GAAImzqB,EAA6B,aAAMtroB,GAAcsroB,EAA8B,cAAMmM,GACrFnM,EAA4B,YAAM3S,EAAW,CAC7C,IAEIhlY,GAFU23Y,EAAyB,OAAK,EAEjB7tsB,GAAK0+C,EAC5Bm8U,GAFUgzU,EAAyB,OAAK,EAEjB5tsB,GAAKy+C,EAC5BvgD,EAAWlL,KAAKonb,aAAan1D,kBAC5B15V,GAAwB,IAAbrtB,EAIZkoE,GAAgBj5C,EAAc,EAAGjvB,EAAU,IAAIknE,GAAY6wP,EAAU2kE,IAHrEztW,EAAa32B,aAAa,YAAa,cAAgBy/T,EAAW,IAAM2kE,EAAW,MAKvF,cAKX,GAAIi/U,EAAWvjtB,GAAG/E,QAAQ,0BAA4B,EACvD,IAAS4nB,EAAI,EAAGA,EAAI0gsB,EAAW1hpB,kBAAmBh/C,IAC9CnmB,KAAKgntB,mBAAmBH,EAAWt1sB,WAAW4U,GAAImX,EAAQvwB,EAAGC,EAAGy+C,EAAO,YAAalzB,QA5CpFv4B,KAAKmpE,KAAK4ooB,WAAc8U,EAAWvjtB,GAAG/E,QAAQ,gBAAkB,GAChEsotB,EAAWtitB,SACXuwsB,EAAanzsB,YAAY3B,KAAKmpE,KAAKspoB,qBAAqBC,iBAAiB1ysB,KAAKonb,aAAcpnb,KAAKmpE,KAAK8noB,cAAeh/rB,MAGrHw+D,GAAkBo2oB,EAAY50sB,EAAOw5C,EAAOzrD,KAAKmpE,MACjDnpE,KAAK2mtB,iBAAiBE,EAAYturB,EAASxrB,EAAGC,EAAGy+C,MA4ChElzB,GAAmD,IAAxCv4B,KAAKonb,aAAan1D,mBAC9BjyX,KAAK+yE,gBAAgBhmE,EAAGC,EAAGy+C,EAAOzrD,KAAKmpE,QAQnD0xH,EAAKx/L,UAAU03E,gBAAkB,SAAUhmE,EAAGC,EAAGy+C,EAAO0d,GACpD,IAAK,IAAIhtE,EAAI,EAAGA,EAAI6D,KAAK4mtB,cAAezqtB,IAAK,CACzC6D,KAAKonb,aAAej+W,EAAK0H,iBAAiB10E,GAC1C,IAAImhC,EAAS6rC,EAAKyF,cAAcC,gBAAgB7uE,KAAKonb,cACjD6/R,EAAwBn4oB,GAAe3F,EAAKnoE,QAAQsC,GAAK,eACzDnH,EAAI,2BACJ+qtB,EAA6Bp4oB,GAAe3F,EAAKnoE,QAAQsC,GAAK,eAC5DnH,EAAI,yBACV,IAAMsB,EAAkBwptB,IAA2BA,EAAsB9hpB,kBAAoB,EACzF,IAAK,IAAIh/C,EAAI,EAAGA,EAAI8gsB,EAAsB9hpB,kBAAmBh/C,IACzDnmB,KAAK8mtB,gBAAgBG,EAAsB11sB,WAAW4U,GAAImX,EAAQvwB,EAAGC,EAAGy+C,EAAO,YAGvF,IAAMhuD,EAAkByptB,IAAgCA,EAA2B/hpB,kBAAoB,EACnG,IAASh/C,EAAI,EAAGA,EAAI+gsB,EAA2B/hpB,kBAAmBh/C,IAC9DnmB,KAAKgntB,mBAAmBE,EAA2B31sB,WAAW4U,GAAImX,EAAQvwB,EAAGC,EAAGy+C,EAAO,cAKvGovI,EAAKx/L,UAAU2rtB,mBAAqB,SAAUhmtB,EAASs8B,EAAQvwB,EAAGC,EAAGy+C,EAAO/kD,EAAM6xB,QAC9D,IAAZA,IAAsBA,GAAU,GAMpC,IAAK,IALDwI,EAAkB/gC,KAAKmpE,KAAK0pQ,gBAAgBoK,qBAC5C3tQ,EAAa9zD,WAAWxa,EAAQsC,GAAGpG,MAAM,KAAK,IAC9CqyE,EAAa/zD,WAAWxa,EAAQsC,GAAGpG,MAAM,KAAK,IAC9CiuU,EAAa3vT,WAAWxa,EAAQsC,GAAGpG,MAAM,KAAK,IAC9CgO,EAAWlL,KAAKonb,aAAan1D,kBACxBxqV,EAAI,EAAGA,EAAI1G,EAAgBtkC,OAAQgrC,IAAK,CAC7C,IAAIp0B,EAAQ0tB,EAAgB0G,GAC5B,GAAIp0B,EAAkB,aAAMi8D,GAAcj8D,EAAkB,aAAMk8D,GAC3Dl8D,EAAkB,aAAM83T,EAAY,CACvC,IAAImzE,EAASjrY,EAAgB,SAAK,EAC9BkrY,EAASlrY,EAAgB,SAAK,EAClC,GAAa,aAAT3M,EAAqB,CACrB,IAAIygtB,EAAWr4oB,GAAe9uE,KAAKmpE,KAAKnoE,QAAQsC,GAAK,sBACrDg7Y,EAAWjyY,KAAKE,IAAIvM,KAAKmpE,KAAKmF,kBAAuB,IAAK,EAAIgwU,GAAW7yV,EACzE8yV,EAAWlyY,KAAKE,IAAIvM,KAAKmpE,KAAKmF,kBAAuB,IAAK,EAAIiwU,GAAW9yV,EACzE,IAAI4spB,EAAiBr3sB,EAAQ4K,wBACzBussB,EAAcgP,EAASv7sB,wBACvBq9V,EAAgBjoW,EAAQqT,cAAczI,wBACtCyhY,EAAO,GAAY8qU,EAAY3rsB,KAAOy8V,EAAcz8V,MAAS6rsB,EAAerisB,MAAQ,EACpFoxsB,EAAO,GAAYjP,EAAYzrsB,IAAMu8V,EAAcv8V,KAAQ2rsB,EAAetisB,OAAS,EACvF/U,EAAQ0D,MAAM8H,KAAO6gY,EAAM,KAC3BrsY,EAAQ0D,MAAMgI,IAAM06sB,EAAM,UAG1B9oU,GAAWA,EAASvxY,GAAK0+C,EACzB8yV,GAAWA,EAASvxY,GAAKy+C,EACpBlzB,GAAwB,IAAbrtB,EAIZkoE,GAAgBpyE,EAAS,EAAGkK,EAAU,IAAIknE,GAAYksU,EAAQC,IAH9Dv9Y,EAAQwC,aAAa,YAAa,cAAgB86Y,EAAS,IAAMC,EAAS,SAS9F1jN,EAAKx/L,UAAUyrtB,gBAAkB,SAAU9ltB,EAASs8B,EAAQvwB,EAAGC,EAAGy+C,EAAO/kD,EAAM6xB,QAC3D,IAAZA,IAAsBA,GAAU,GACpC,IAAI+2C,EAAav6C,SAAS/zB,EAAQsC,GAAGpG,MAAM,KAAK,GAAI,IAChD4+sB,EAAc/mrB,SAAS/zB,EAAQsC,GAAGpG,MAAM,KAAK,GAAI,IACjD+qsB,EAAYlzqB,SAAS/zB,EAAQsC,GAAGpG,MAAM,KAAK,GAAI,IAC/CwsE,EAAQ1pE,KAAKmpE,KAAK0H,iBAAiBvB,GACnCw9P,EAASpjQ,EAAM8iU,eAAesvU,GAClC,IAAKr+sB,EAAkBqvU,KAAYrvU,EAAkBqvU,EAAOvpQ,cAAgB9lE,EAAkBqvU,EAAOvpQ,WAAW0koB,IAAa,CACzH,IAAIp+nB,EAAMijQ,EAAOvpQ,WAAW0koB,GAAsB,UAC9Cr+nB,EAAMkjQ,EAAOvpQ,WAAW0koB,GAAqB,SAC7C/8rB,EAAWlL,KAAKonb,aAAan1D,kBAC7Bh/H,EAAcjzP,KAAKmpE,KAAc,UAAI6B,GAA0B,IAAI9wB,GAAM2vB,EAAKD,GAAM5pE,KAAKmpE,KAAK8noB,cAAejxsB,KAAKmpE,KAAK+B,oBAAoB,GAAQ3B,GAAkBK,EAAKC,EAAKvsC,EAAQosC,EAAO1pE,KAAKmpE,MACvM,GAAInpE,KAAKmpE,KAAK4ooB,UACV,GAAa,aAATrrsB,EAAqB,CACrB,IAAI2xsB,EAAiBr3sB,EAAQ4K,wBAC7B5K,EAAQ0D,MAAM8H,KAAQymP,EAAWlmP,EAAKsrsB,EAAerisB,MAAQ,EAAM,KACnEhV,EAAQ0D,MAAMgI,IAAOumP,EAAWjmP,EAAKqrsB,EAAetisB,OAAS,EAAM,UAGnE/U,EAAQwC,aAAa,YAAa,cAAgByvP,EAAWlmP,EAAI,IAAMkmP,EAAWjmP,EAAI,WAI1F,GAAa,aAATtG,EAAqB,CACrBusP,EAAWlmP,EAAMV,KAAKE,IAAIvM,KAAKmpE,KAAKmF,kBAAuB,IAAK,EAAI2kL,EAAWlmP,GAAM0+C,EACrFwnM,EAAWjmP,EAAMX,KAAKE,IAAIvM,KAAKmpE,KAAKmF,kBAAuB,IAAK,EAAI2kL,EAAWjmP,GAAMy+C,EACjF4spB,EAAiBr3sB,EAAQ4K,wBAA7B,IACIussB,EAAcrpoB,GAAe9uE,KAAKmpE,KAAKnoE,QAAQsC,GAAK,sBAAsBsI,wBAC1Eq9V,EAAgBjoW,EAAQqT,cAAczI,wBAC1C5K,EAAQ0D,MAAM8H,KAAUymP,EAAY,GAAKkld,EAAY3rsB,KAAOy8V,EAAcz8V,MACrE6rsB,EAAerisB,MAAQ,EAAM82T,EAAOnhU,OAAOoB,EAAK,KACrD/L,EAAQ0D,MAAMgI,IAASumP,EAAY,GAAKkld,EAAYzrsB,IAAMu8V,EAAcv8V,KACjE2rsB,EAAetisB,OAAS,EAAM+2T,EAAOnhU,OAAOqB,EAAK,UAGxDimP,EAAWlmP,GAAOkmP,EAAWlmP,EAAIA,GAAK0+C,EAASqhR,EAAOnhU,OAAOoB,EAC7DkmP,EAAWjmP,GAAOimP,EAAWjmP,EAAIA,GAAKy+C,EAASqhR,EAAOnhU,OAAOqB,EACxDurB,GAAwB,IAAbrtB,EAIZkoE,GAAgBpyE,EAAS,EAAGkK,EAAU+nP,GAHtCjyP,EAAQwC,aAAa,YAAa,cAAgByvP,EAAWlmP,EAAI,IAAMkmP,EAAWjmP,EAAI,QAS1G6tL,EAAKx/L,UAAUgstB,QAAU,WACrB,IAMIt6sB,EACAC,EAPA4qB,EAAM53B,KAAKmpE,KAEXi9I,GADWxuL,EAAImyC,YACR/pE,KAAKumtB,iBACZl9nB,EAAOrpF,KAAKwmtB,gBACZ/6pB,EAAQ7zB,EAAI6zB,MACZonB,EAAiBj7C,EAAIi7C,eAGzB,GAEKj7C,EAAIm6qB,UAcA/xsB,KAAKmpE,KAAK8noB,cAAgB,IAC/BlksB,EAAI6qB,EAAIszC,mBAAmBn+D,GAAKq5M,EAAKr5M,EAAIs8E,EAAKt8E,GAC9CC,EAAI4qB,EAAIszC,mBAAmBl+D,GAAKo5M,EAAKp5M,EAAIq8E,EAAKr8E,GAC9C4qB,EAAIszC,mBAAmBn+D,EAAIA,EAC3B6qB,EAAIszC,mBAAmBl+D,EAAIA,EAC3B4qB,EAAIg3C,cAAc2joB,cAAc36qB,EAAIq5qB,cAAer5qB,EAAIszC,oBACvDtzC,EAAIi7C,eAAe9lE,GAAK6qB,EAAIszC,mBAAmBn+D,GAAKq5M,EAAKr5M,EAAIs8E,EAAKt8E,IAAM6qB,EAAI6zB,MAC5E7zB,EAAIi7C,eAAe7lE,GAAK4qB,EAAIszC,mBAAmBl+D,GAAKo5M,EAAKp5M,EAAIq8E,EAAKr8E,IAAM4qB,EAAI6zB,MAC5EzrD,KAAKk4sB,sBAtBW,CAChB,IAAIoP,EAAMz0oB,EAAe9lE,GAAKq5M,EAAKr5M,EAAIs8E,EAAKt8E,GAAK0+C,EAC7C87pB,EAAM10oB,EAAe7lE,GAAKo5M,EAAKp5M,EAAIq8E,EAAKr8E,GAAKy+C,EAC7C+7pB,EAAY14oB,GAAel3C,EAAI52B,QAAQsC,GAAK,sBAAsBsI,wBAClEsJ,EAAc45D,GAAel3C,EAAI52B,QAAQsC,GAAK,QAAQsI,wBACtD67sB,EAAuBrhgB,EAAKr5M,EAAIs8E,EAAKt8E,EAAK,EAAIy6sB,EAAUh7sB,MAAS0I,EAAY1I,KAAOorB,EAAImyC,YAAYh9D,EAClGy6sB,EAAUh7sB,KAAOg7sB,EAAUxxsB,OAAWd,EAAY1I,KAAO0I,EAAYc,MAAS4hB,EAAImyC,YAAYh9D,EAAI6qB,EAAI6E,OAAOjwB,KAC/Gk7sB,EAAuBthgB,EAAKp5M,EAAIq8E,EAAKr8E,EAAK,EAAIw6sB,EAAU96sB,KAAQwI,EAAYxI,IAAMkrB,EAAImyC,YAAY/8D,EAChGw6sB,EAAU96sB,IAAM86sB,EAAUzxsB,QAAYb,EAAYxI,IAAMwI,EAAYa,OAAU6hB,EAAImyC,YAAY/8D,EAAI4qB,EAAI6E,OAAO/vB,IAC/G+6sB,GAAqBC,IACrB9vrB,EAAIi7C,eAAiB,IAAI34B,GAAMotqB,EAAKC,GACpCvntB,KAAKk4sB,kBAabl4sB,KAAKumtB,gBAAkBvmtB,KAAKwmtB,iBAEhC3rhB,EAAKx/L,UAAUsstB,eAAiB,SAAUv5oB,EAAY1nE,GAClD,IAAIkxB,EAAM53B,KAAKmpE,KACX27oB,EAAYltrB,EAAIq5qB,cAChBxlpB,EAAQ7zB,EAAIq6C,cAAgBr6C,EAAI6zB,MAChCgsX,EAAU7/Y,EAAIy2C,aAAaopW,QAC3BD,EAAU5/Y,EAAIy2C,aAAampW,QAC3B1qZ,EAAO8K,EAAImyC,YAEf,GADAqE,EAAuB,YAAT1nE,GAAkD,IAA3B2F,KAAKoxB,MAAM2wC,GAAoB,EAAkBA,GAChFx2C,EAAIm6qB,YAAwB,WAATrrsB,EAAoB0nE,GAAcopW,GAAWppW,GAAcqpW,EAAUrpW,GAAcopW,GAAU,CAClH,IAAI3kW,EAAiBj7C,EAAIxF,cAAgBwF,EAAIi7C,eACzC9yD,EAAM6X,EAAI02C,kBAAuB,IACjChiE,EAAMsrB,EAAI02C,kBAAuB,IACjCC,EAAWliE,KAAKE,IAAID,EAAO,EAAIyT,EAAO,GACtCyuD,EAAYniE,KAAKE,IAAIwT,EAAO,EAAIzT,EAAO,GACvC84sB,EAAkBvyoB,EAAe9lE,GAAO+f,EAAK9W,MAAQy1C,EAAU3+B,EAAK9W,MAAQo4D,GAAe,EAC3Fi3oB,EAAkBxyoB,EAAe7lE,GAAO8f,EAAK/W,OAAS01C,EAAU3+B,EAAK/W,OAASq4D,GAAe,EAC7FogP,EAAgBniT,KAAKE,IAAIqrB,EAAI02C,kBAAuB,IAAK,EAAI12C,EAAI02C,kBAAuB,IAAK,GAAKF,EACtGg3oB,EAAmB52Z,EAAgB52R,EAAImyC,YAAYh0D,OAAW+W,EAAK/f,IAAQgT,EAAQ,GAAO+M,EAAK9W,MAAQ,EAAMu4D,EAAW,IAClH62oB,EACNC,EAAmB72Z,EAAgB52R,EAAImyC,YAAYh0D,OAAW+W,EAAK9f,IAAQ+S,EAAQ,GAAO+M,EAAK/W,OAAS,EAAMy4D,EAAY,IACpH62oB,EACNztrB,EAAIi7C,eAAiB,IAAI34B,GAAMkrqB,EAAiBC,GAChDztrB,EAAI6zB,MAAQ2iB,OAEX,GAAKx2C,EAAa,WAAMw2C,GAAcopW,GAAWppW,GAAcqpW,EAAU,CAC1E,IAAImwS,EAAiBx5oB,EACrBx2C,EAAI6zB,MAAQp/C,KAAK87D,IAAI,EAAGy/oB,EAAiB,GACzChwrB,EAAIq5qB,cAAgB2W,EACpB,IAAI1zsB,GAAanH,EAAG6qB,EAAIjC,cAAc3f,MAAQ,EAAGhJ,EAAG4qB,EAAIjC,cAAc5f,OAAS,GAC/E/V,KAAKsltB,yBAAyBR,EAAW8C,EAAgB1zsB,GACzD0jB,EAAIg3C,cAAc2joB,cAAcqV,EAAgBhwrB,EAAIszC,oBACpDtzC,EAAIi7C,eAAe9lE,GAAK6qB,EAAIszC,mBAAmBn+D,EAAK,GAAM6qB,EAAI6zB,OAAU7zB,EAAI6zB,MAC5E7zB,EAAIi7C,eAAe7lE,GAAK4qB,EAAIszC,mBAAmBl+D,EAAK,GAAM4qB,EAAI6zB,OAAU7zB,EAAI6zB,MAEhFzrD,KAAKk4sB,gBAAe,IAGxBr9gB,EAAKx/L,UAAUm8sB,sBAAwB,WACnC,IAAI5/qB,EAAM53B,KAAKmpE,KACfnpE,KAAKg4sB,aAAepgrB,EAAI/J,SAASw+C,aAC7B/oE,GAAIs0B,EAAI52B,QAAQsC,GAAK,yBACrBmK,QAAS,KAEb,IAEIo6sB,EAAW,GACXC,EAAW,GAEX1urB,EAAcxB,EAAIy2C,aAAa05oB,mBAC/BC,EAAqBpwrB,EAAIy2C,aAAa45oB,SACtCr9W,EAAgB,8FACpBA,GAAiB,wGACjBA,GAAiB,oGACjB,IAAIs9W,EAAgBtwrB,EAAIy2C,aAAa45oB,SAASxrtB,OAC1C0rtB,EAAqD,eAAxCvwrB,EAAIy2C,aAAa05oB,mBAVnB,GAU2DG,EAP5D,GAOyFA,KACnGE,EAAsD,eAAxCxwrB,EAAIy2C,aAAa05oB,sBAZnB,GAY6EG,EAR/E,GAQ6GA,EAC3HlotB,KAAKg4sB,aAAar2sB,YAAYi2B,EAAI/J,SAAS8V,cAAc,IAAIugS,GAAWtsS,EAAI52B,QAAQsC,GAAK,gBAAiB,eAAiBkzB,MAAO,cAAexgB,MAAO,GAAK,EAAG,IAAIkgB,GAAK,EAAG,EAAGiyrB,EAAWC,GAAa,EAAG,KAC1M,IAAIzjb,EAAa/sQ,EAAI/J,SAAS+qF,aAC9B+rL,EAAW3iS,UAAY4oW,EACvB5qW,KAAKg4sB,aAAar2sB,YAAYgjS,GAC9B,IAAI+lE,EAAe9yU,EAAI/J,SAAS8V,cAAc,IAAIugS,GAAWtsS,EAAI52B,QAAQsC,GAAK,gBAAiB,eAAiBkzB,MAAO,cAAexgB,MAAO,GAAK,GAAK,IAAIkgB,GAAK,EAAG,EAAGiyrB,EAAWC,GAAa,EAAG,IACjM19W,EAAalnW,aAAa,SAAU,sBACpCxD,KAAKg4sB,aAAar2sB,YAAY+oW,GAC9B,IACK,IAAIvuW,EAAI,EAAGA,EAAI6rtB,EAAmBvrtB,OAAQN,IAAK,CAChD,IAAIkstB,EAAYL,EAAmB7rtB,GACnC6D,KAEKsotB,kBAAoB1wrB,EAAI/J,SAASw+C,aAClC/oE,GAAIs0B,EAAI52B,QAAQsC,GAAK,oBAAsB+ktB,EAAY,SACvDh7sB,UAAW,cAAgBw6sB,EAAW,IAAMC,EAAW,QAE3D9ntB,KAAKsotB,kBAAkB9ktB,aAAa,QAAS,kBAC7C,IACIgyB,EAAY,GAChB,OACQ6yrB,EAAUzysB,eACd,IAAK,OACD4f,EAAY,qGACZA,GAAa,qHACbA,GAAwB,8FACxBx1B,KAAKsotB,kBAAkB3mtB,YAAYi2B,EAAI/J,SAASsI,SAAS,IAAIC,GAAWwB,EAAI52B,QAAQsC,GAAK,oBAAsB+ktB,EAAWrotB,KAAKylW,UAAW,EAAGzlW,KAAKylW,UAAW,EAAG,KAAMjwU,EAAY,6DAClLx1B,KAAK8lW,aAAe9lW,KAAKsotB,kBACzBtotB,KAAKukB,WAAWvkB,KAAKsotB,kBAAmBtotB,KAAKuotB,sBAC7C,MACJ,IAAK,SACD/yrB,EAAY,gCACZx1B,KAAKsotB,kBAAkB3mtB,YAAYi2B,EAAI/J,SAASsI,SAAS,IAAIC,GAAWwB,EAAI52B,QAAQsC,GAAK,oBAAsB+ktB,EAAY,QAASrotB,KAAKylW,UAAW,EAAGzlW,KAAKylW,UAAW,EAAG,KAAMjwU,KAChLx1B,KAAKkmW,eAAiBlmW,KAAKsotB,kBAC3BtotB,KAAKukB,WAAWvkB,KAAKsotB,kBAAmBtotB,KAAKuotB,sBAC7C,MACJ,IAAK,UACD/yrB,EAAY,iBACZx1B,KAAKsotB,kBAAkB3mtB,YAAYi2B,EAAI/J,SAASsI,SAAS,IAAIC,GAAWwB,EAAI52B,QAAQsC,GAAK,oBAAsB+ktB,EAAWrotB,KAAKylW,UAAW,EAAGzlW,KAAKylW,UAAW,EAAG,KAAMjwU,KACtKx1B,KAAKsmW,gBAAkBtmW,KAAKsotB,kBAC5BtotB,KAAKukB,WAAWvkB,KAAKsotB,kBAAmBtotB,KAAKuotB,sBAC7C,MACJ,IAAK,MACD/yrB,EAAY,yFACZA,GAAa,uGACbx1B,KAAKsotB,kBAAkB3mtB,YAAYi2B,EAAI/J,SAASsI,SAAS,IAAIC,GAAWwB,EAAI52B,QAAQsC,GAAK,oBAAsB+ktB,EAAWrotB,KAAKwlW,eAAgB,EAAGxlW,KAAKwlW,eAAgB,EAAG,KAAMhwU,KAChLx1B,KAAKwotB,SAAWxotB,KAAKwlW,eACrBxlW,KAAK2lW,YAAc3lW,KAAKsotB,kBACxBtotB,KAAKukB,WAAWvkB,KAAKsotB,kBAAmBtotB,KAAKuotB,sBAC7C,MACJ,IAAK,QACD/yrB,EAAY,kGACZA,GAAa,wGACbA,GAAa,sHACbx1B,KAAKsotB,kBAAkB3mtB,YAAYi2B,EAAI/J,SAASsI,SAAS,IAAIC,GAAWwB,EAAI52B,QAAQsC,GAAK,oBAAsB+ktB,EAAWrotB,KAAKylW,UAAW,KAAM,KAAM,EAAG,KAAMjwU,EAAY,qFAC3Kx1B,KAAKukB,WAAWvkB,KAAKsotB,kBAAmBtotB,KAAKuotB,sBAGrDvotB,KAAKsotB,kBAAkB3mtB,YAAYi2B,EAAI/J,SAAS6V,WAAW,IAAIygS,GAAavsS,EAAI52B,QAAQsC,GAAK,oBAAsB+ktB,EAAY,QAAS,eAAiB7xrB,MAAOx2B,KAAKylW,UAAWzvV,MAAO,GAAK,EAAG,EAAG,EAAG,GAAI,MACzM6xsB,EAA4B,eAAhBzurB,EAAiCyurB,KAAmCA,EAChFC,EAA4B,eAAhB1urB,EAAgC0urB,EAAYA,KACxD9ntB,KAAKg4sB,aAAar2sB,YAAY3B,KAAKsotB,qBAG3CzthB,EAAKx/L,UAAUkttB,qBAAuB,SAAU1ntB,GAC5C,IAAIsG,EAAStG,EAAEsG,OACftG,EAAE06d,2BACF,IAAI3pc,EAA4B,UAAlB/wB,EAAEw/U,aAA6C,MAAlBx/U,EAAEw/U,aAAwBx/U,EAAE6F,KAAKnI,QAAQ,UAAY,EAC5Fo1X,EAAUxsX,EAAO7D,GAAGpG,MAAM,KAAK,GAC/B00B,GACA5xB,KAAK2ktB,SAAU,EACf3ktB,KAAKyotB,wBAAwB90V,IAEZ,cAAX9yX,EAAE6F,MAAmC,gBAAX7F,EAAE6F,MAA4B1G,KAAK2ktB,QAKnE3ktB,KAAK2ktB,SAAU,GAJf3ktB,KAAK2ktB,SAAU,EACf3ktB,KAAKyotB,wBAAwB90V,KAUrC94L,EAAKx/L,UAAUottB,wBAA0B,SAAU/htB,GAC/C,IAAIkxB,EAAM53B,KAAKmpE,KACf,OAAQziE,EAAKkP,eACT,IAAK,OACD5V,KAAKwotB,SAAWxotB,KAAKylW,UACrBzlW,KAAK0otB,UAAY1otB,KAAKwlW,eACtBxlW,KAAK6mW,eAAe7mW,KAAK8lW,aAAc9lW,KAAKwlW,gBAC5CxlW,KAAK6mW,eAAe7mW,KAAK2lW,YAAa3lW,KAAKylW,WAC3C,MACJ,IAAK,MACDzlW,KAAKwotB,SAAWxotB,KAAKwlW,eACrBxlW,KAAK0otB,UAAY1otB,KAAKylW,UACtBzlW,KAAK6mW,eAAe7mW,KAAK8lW,aAAc9lW,KAAKylW,WAC5CzlW,KAAK6mW,eAAe7mW,KAAK2lW,YAAa3lW,KAAKwlW,gBAC3C,MACJ,IAAK,SACDxlW,KAAK2ntB,gBAAgB/vrB,EAAIm6qB,UAAYn6qB,EAAIq5qB,cAAgBr5qB,EAAI6zB,OAAS,EAAG,UACzE,MACJ,IAAK,UACDzrD,KAAK2ntB,gBAAgB/vrB,EAAIm6qB,UAAYn6qB,EAAIq5qB,cAAgBr5qB,EAAI6zB,OAAS,EAAG,WACzE,MACJ,IAAK,QACDzrD,KAAK2ntB,eAAe,EAAG,WACvB3ntB,KAAK6mW,eAAe7mW,KAAK8lW,aAAc9lW,KAAKylW,WAC5CzlW,KAAK6mW,eAAe7mW,KAAK2lW,YAAa3lW,KAAKwlW,gBAEnDxlW,KAAK2otB,aAAajitB,EAAKkP,gBAE3BilL,EAAKx/L,UAAUsttB,aAAe,SAAUh1V,GACpC,IAAI72W,EAAMgyD,GAAe9uE,KAAKmpE,KAAKnoE,QAAQsC,GAAK,QAChC,QAAZqwX,GAAqB3zX,KAAKg/U,UAC1BliU,EAAItZ,aAAa,QAAS,kBAG1BsZ,EAAItZ,aAAa,QAAS,KAGlCq3L,EAAKx/L,UAAUwrW,eAAiB,SAAUjjW,EAAU4yB,GAChD,GAAK5yB,EAIL,IAAK,IADDu2B,EACKh+B,EAAI,EAAGA,EAAIyH,EAASuhE,kBAAmBhpE,IAEf,YAD7Bg+B,EAAev2B,EAAS2N,WAAWpV,IAClB6G,UACbm3B,EAAa32B,aAAa,OAAQgzB,GAClC2D,EAAa32B,aAAa,SAAUgzB,KAIhDqkK,EAAKx/L,UAAUq2B,YAAc,SAAU7wB,GACnC,IAAI4rB,EAAO5rB,EAAEsG,OAAO7D,GAAGpG,MAAM,KAAK,GAC7B8C,KAAK4xB,SACNwD,GAAc,sBAAuBp1B,KAAKmpE,KAAK4yQ,kBAAkBtvT,GAAQ5rB,EAAEqL,MAAQ,GAAMrL,EAAEiL,MAAQ,GAAK,SAGhH+uL,EAAKx/L,UAAU4oW,cAAgB,WACvBn1R,GAAe,wBACfvqE,EAAOuqE,GAAe,yBAG9B+rH,EAAKx/L,UAAU48sB,aAAe,WAC1B,IAAIrgrB,EAAM53B,KAAKmpE,KAEXnoE,EAAUG,EAAc,OAASmC,GAAIs0B,EAAI52B,QAAQsC,GAAK,WAAYC,OAAQ,gCAC1EkjtB,EAAgB7urB,EAAI/J,SAASmS,WAC7B18B,GAAIs0B,EAAI52B,QAAQsC,GAAK,mBAAoB0S,MAAO,GAAID,OAAQ,KAEhE0wsB,EAAc9ktB,YAAY3B,KAAKg4sB,cAC/Bh3sB,EAAQW,YAAY8ktB,GAChB33oB,GAAel3C,EAAI52B,QAAQsC,GAAK,uBAChCwrE,GAAel3C,EAAI52B,QAAQsC,GAAK,sBAAsB3B,YAAYX,GAEtE,IAAI4ntB,EAAc5otB,KAAKg4sB,aAAapssB,wBACpC66sB,EAAcjjtB,aAAa,UAAWoltB,EAAY7ysB,OAASqjD,GAAalsD,YACxEu5sB,EAAcjjtB,aAAa,SAAUoltB,EAAY5ysB,MAAQojD,GAAalsD,YACtE,IAAI4f,EAAO8K,EAAImyC,YACXh9D,EAAI,EACJC,EAAI,EACR,OAAQ4qB,EAAIy2C,aAAa3a,mBACrB,IAAK,OACD1mD,EAAI8f,EAAK9f,EACT,MACJ,IAAK,SACDA,EAAK8f,EAAK/W,OAAS,EAAM6ysB,EAAY7ysB,OAAS,EAC9C,MACJ,IAAK,MACD/I,EAAK8f,EAAK/W,OAAS6ysB,EAAY7ysB,OAxBzB,GA2Bd,OAAQ6hB,EAAIy2C,aAAa5a,qBACrB,IAAK,OACD1mD,EAAI+f,EAAK/f,EACT,MACJ,IAAK,SACDA,EAAK+f,EAAK9W,MAAQ,EAAM4ysB,EAAY5ysB,MAAQ,EAC5C,MACJ,IAAK,MACDjJ,EAAK+f,EAAK9W,MAAQ4ysB,EAAY5ysB,MAnCxB,GAsCdhV,EAAQ0D,MAAM8H,KAAOO,EAAI,KACzB/L,EAAQ0D,MAAMgI,IAAMM,EAAI,KACxB,IAAIwpB,EAAQx2B,KAAKmpE,KAAKkF,aAAam8a,eAC/BhrM,EAAM,4CAA8ChpR,EAAQ,4CAA8CA,EAAQ,eAAiBA,EAAQ,MAC3I9xB,EAAQlE,SAASW,cAAc,SACnCuD,EAAM/C,YAAYnB,SAASw0C,eAAewqQ,IAC1Cx+S,EAAQW,YAAY+C,IAOxBm2L,EAAKx/L,UAAUkpB,WAAa,SAAUvjB,EAASgyE,GAC3CztE,GAAanB,IAAIpD,EAASwK,GAAQ0+E,gBAAiBlX,EAAShzE,MAC5DuF,GAAanB,IAAIpD,EAAS,YAAahB,KAAK0xB,YAAa1xB,MACzDuF,GAAanB,IAAIpD,EAAS,WAAYhB,KAAKikW,cAAejkW,OAE9D66L,EAAKx/L,UAAUwttB,cAAgB,SAAUhotB,GACrC,GAAIb,KAAKmpE,KAAKkF,aAAa5uC,QAAUz/B,KAAKmpE,KAAKkF,aAAay6oB,eAAgB,CACxE,IAAI50sB,EAAWlU,KAAKsgF,iBAAiBz/E,EAAEiL,MAAOjL,EAAEqL,OAC5C0rB,EAAM53B,KAAKmpE,KAEX27oB,GADOltrB,EAAIjC,cACCiC,EAAIq5qB,eAChB8T,EAAYntrB,EAAI6zB,MAEhBzuD,EAAS46B,EAAa,UAAIktrB,EAAYC,EAC1C,GAAM7wsB,EAASnH,EAAI6qB,EAAImyC,YAAYh9D,GAAOmH,EAASnH,EAAK6qB,EAAImyC,YAAYh9D,EAAI6qB,EAAImyC,YAAY/zD,OACvF9B,EAASlH,EAAI4qB,EAAImyC,YAAY/8D,GAAMkH,EAASlH,EAAK4qB,EAAImyC,YAAY/8D,EAAI4qB,EAAImyC,YAAYh0D,OAAS,CAC/FlV,EAAE2kB,iBACF,IAAIgQ,EAAkC,YAArBx1B,KAAKinW,aAA8BjnW,KAAKyL,UACP5K,EAAE48H,WAAa,IAAO,EAAI,SAAW,WAAjF58H,EAAQ,OAAI,EAAI,EAAI,SAAW,UACnB,WAAd20B,EACAx1B,KAAKw5sB,eAAetlsB,EAAWlX,EAR3B,EAQ2Cw4B,GAG/Cx1B,KAAKw5sB,eAAetlsB,EAAWlX,EAX3B,EAW2Cw4B,MAK/DqlK,EAAKx/L,UAAU0ra,YAAc,SAAUlma,GACnC,IAAIiL,EAAQjL,EAAEiL,MACVI,EAAQrL,EAAEqL,MACDrL,EAAEsG,OACf,GAAInH,KAAKmpE,KAAKkF,aAAa5uC,QAAUz/B,KAAKmpE,KAAKkF,aAAa06oB,gBAAiB,CACzE,IAAI70sB,EAAWlU,KAAKsgF,iBAAiBx0E,EAAOI,GACxC0rB,EAAM53B,KAAKmpE,KAEX27oB,GADOltrB,EAAIjC,cACCiC,EAAIq5qB,eAChB8T,EAAYntrB,EAAI6zB,MAChBzuD,EAAS46B,EAAa,UAAIktrB,EAAYC,EACpC7wsB,EAASnH,EAAI6qB,EAAImyC,YAAYh9D,GAAOmH,EAASnH,EAAK6qB,EAAImyC,YAAYh9D,EAAI6qB,EAAImyC,YAAY/zD,OACvF9B,EAASlH,EAAI4qB,EAAImyC,YAAY/8D,GAAMkH,EAASlH,EAAK4qB,EAAImyC,YAAY/8D,EAAI4qB,EAAImyC,YAAYh0D,QACtF/V,KAAKw5sB,eAAetlsB,EAAWlX,EAAQ,EAAI,YAIvD69L,EAAKx/L,UAAUwkH,iBAAmB,SAAUh/G,GACxC,IAAIiL,EACAI,EAEAioC,EAAU,KACAtzC,EAAEsG,OACD,eAAXtG,EAAE6F,MACF1G,KAAK4xB,SAAU,EACfuiB,EAAUtzC,EAAEszC,QACHtzC,EAAEsG,OACX2E,EAAQqoC,EAAQ,GAAGC,QACnBloC,EAAQioC,EAAQ,GAAGE,UAGnBvoC,EAAQjL,EAAEiL,MACVI,EAAQrL,EAAEqL,MACDrL,EAAEsG,QAEfnH,KAAKg/U,UAAYh/U,KAAKwotB,WAAaxotB,KAAKwlW,gBAAwBxlW,KAAK0otB,YAAc1otB,KAAKwlW,eACxFxlW,KAAK0ktB,kBAAsB1ktB,KAAKg/U,WAAch/U,KAAKmpE,KAAKkF,aAAa5uC,OACrEz/B,KAAKumtB,gBAAkBvmtB,KAAKsgF,iBAAiBx0E,EAAOI,GAChDlM,KAAK4xB,UACL5xB,KAAKgptB,WAAY,EACjBhptB,KAAK4ktB,YAAc5ktB,KAAKmpE,KAAK1d,MAC7BzrD,KAAKgmtB,QAAU7xqB,EAAQ13C,SAG/Bo+L,EAAKx/L,UAAUg5U,iBAAmB,SAAUxzU,GACxC,IAAIiL,EACAI,EAGA/E,EAFAywB,EAAM53B,KAAKmpE,KAGXh1B,EAAU,KACV4xT,EAAO/lW,KAAKmpE,KAAKkF,aACN,cAAXxtE,EAAE6F,MACF1G,KAAK4xB,SAAU,EACfzqB,EAAStG,EAAEsG,OAEX2E,GADAqoC,EAAUtzC,EAAEszC,SACI,GAAGC,QACnBloC,EAAQioC,EAAQ,GAAGE,UAGnBvoC,EAAQjL,EAAEiL,MACVI,EAAQrL,EAAEqL,MACV/E,EAAStG,EAAEsG,QAEX2nE,GAAel3C,EAAI52B,QAAQsC,GAAK,4BAC5B6D,EAAO7D,GAAG/E,QAAQ,cAAgB,EAClCuwE,GAAel3C,EAAI52B,QAAQsC,GAAK,0BAA0BE,aAAa,UAAW,KAGlFsrE,GAAel3C,EAAI52B,QAAQsC,GAAK,0BAA0BE,aAAa,UAAW,QAGtFxD,KAAK4xB,SACD5xB,KAAKmpE,KAAKkF,aAAa46oB,eACnBjptB,KAAKgptB,WAAgC,IAAnB70qB,EAAQ13C,QAC1BuD,KAAK0ktB,kBAAmB,EACxB1ktB,KAAK+ltB,oBACL/ltB,KAAK2mW,eAAiB11R,GAAcpwE,IAEA,IAA/Bb,KAAK2mW,eAAelqW,QAAmC,IAAnB03C,EAAQ13C,SACjDuD,KAAK0mW,cAAgBz1R,GAAcpwE,GACnCA,EAAE2kB,iBACFxlB,KAAK0ktB,kBAAmB,EACxB1ktB,KAAK6oW,oBAAoBhoW,IAE7Bb,KAAKgptB,WAAY,GAGzBhptB,KAAKwmtB,gBAAkBxmtB,KAAKsgF,iBAAiBx0E,EAAOI,GACrCrL,EAAEsG,OAAW,GACZtG,EAAEsG,OACd4+V,EAAKtmU,QAAUz/B,KAAKg/U,YACpBn+U,EAAE2kB,iBACFxlB,KAAKmpE,KAAKnoE,QAAQ0D,MAAM+0D,OAAS,UACjCz5D,KAAKqntB,YAELrntB,KAAK4xB,QAA8B,IAAnBuiB,EAAQ13C,QAAgBuD,KAAK0ktB,iBAAoB1ktB,KAAK0ktB,oBACtE7jtB,EAAE2kB,iBACFxlB,KAAKsmtB,sBAGbzrhB,EAAKx/L,UAAUuuN,eAAiB,SAAU/oN,GAC5Bb,KAAKmpE,KACfnpE,KAAK0ktB,kBAAmB,EACxB1ktB,KAAKg/U,WAAY,EACjBh/U,KAAK4xB,SAAU,EACf5xB,KAAK2mW,kBACL3mW,KAAK0mW,iBACL1mW,KAAK6ltB,UAAY,EACjB7ltB,KAAKmpE,KAAKnoE,QAAQ0D,MAAM+0D,OAAS,OACjC,IAAIyvpB,EAAkBp6oB,GAAe9uE,KAAKmpE,KAAKnoE,QAAQsC,GAAK,2BACxD4ltB,GAAmBlptB,KAAKmpE,KAAKkF,aAAa5uC,SAC1Cl7B,EAAO2ktB,GACPlptB,KAAKyltB,uBAGb5qhB,EAAKx/L,UAAU4vW,mBAAqB,SAAUpqW,GAC1Cb,KAAKg/U,WAAY,EACjBh/U,KAAK4xB,SAAU,EACf5xB,KAAK0ktB,kBAAmB,EACxB,IAAIwE,EAAkBp6oB,GAAe9uE,KAAKmpE,KAAKnoE,QAAQsC,GAAK,2BACxD4ltB,GAAmBlptB,KAAKmpE,KAAKkF,aAAa5uC,SAC1Cl7B,EAAO2ktB,GACPlptB,KAAKyltB,uBAGb5qhB,EAAKx/L,UAAUgrH,MAAQ,SAAUxlH,GAC7B,IAAI+2B,EAAM53B,KAAKmpE,KACf,GAAIvxC,EAAIy2C,aAAa86oB,aAAetotB,EAAEsG,OAAO7D,GAAG/E,QAAQ,iBAAmB,IAAMq5B,EAAIy2C,aAAa06oB,iBAC1F/otB,KAAK0otB,YAAc1otB,KAAKwlW,gBAAkBxlW,KAAK8lW,aAAe,CAClE,IAAIpvU,EAAS71B,EAAEsG,OAAOynC,UAClBw6qB,EAAa1yrB,EAAO1gB,MACpBqzsB,EAAc3yrB,EAAO3gB,OACrBuzsB,OAAa,EAEbvvY,EAAaniT,EAAIjC,cAAc3f,MAC/BgkU,EAAcpiT,EAAIjC,cAAc5f,OACpCuzsB,GAAevvY,EAAa,MAAQC,EAAc,KAAOovY,EAAaC,GAAgBrvY,EAAc,KAAOqvY,GACtGtvY,EAAa,KAAOqvY,EACzB,IACI7mpB,GAAYw3Q,EAAa,EAAOqvY,EAAaxxrB,EAAI6zB,MAAS,GAAM69pB,EAChEC,GAAWvvY,EAAc,EAAOqvY,EAAczxrB,EAAI6zB,MAAS,GAAM69pB,EACjElE,GAAoB1urB,EAAO3pB,EAAKw1D,EAChC8ipB,GAAoB3urB,EAAO1pB,EAAKu8sB,EACpC3xrB,EAAIq6C,cAAgBr6C,EAAI6zB,MACxB7zB,EAAIxF,cAAgBwF,EAAIi7C,eACxBj7C,EAAI6zB,MAAQ69pB,EACZ1xrB,EAAIi7C,gBAAmB9lE,EAAGq4sB,EAAiBp4sB,EAAGq4sB,GAC9CrltB,KAAKk4sB,gBAAe,KAG5Br9gB,EAAKx/L,UAAUilF,iBAAmB,SAAUx0E,EAAOI,GAC/C,IAAI0rB,EAAM53B,KAAKmpE,KACXj0D,EAAc0iB,EAAI52B,QAAQ4K,wBAC1B6lE,EAAc75C,EAAI52B,QAAQ8T,cAAcoF,YAAYu3D,YACpDE,EAAc/5C,EAAI52B,QAAQ8T,cAAcoF,YAAYy3D,YACpD4O,EAAY3oD,EAAI52B,QAAQ8T,cAAc1I,gBAAgBm0E,UACtDC,EAAa5oD,EAAI52B,QAAQ8T,cAAc1I,gBAAgBo0E,WACvDhsE,EAAYU,EAAY1I,KAAOilE,EAAc+O,EAC7C/rE,EAAYS,EAAYxI,IAAMilE,EAAc4O,EAChD,OAAO,IAAIrmC,GAAOpuC,EAAQ0I,EAAatI,EAAQuI,IAEnDomL,EAAKx/L,UAAUqB,iBAAmB,WAC1BsD,KAAKmpE,KAAK6d,cAGdzhF,GAAanB,IAAIpE,KAAKmpE,KAAKnoE,QAAShB,KAAKknW,WAAYlnW,KAAK6otB,cAAe7otB,MACzEuF,GAAanB,IAAIpE,KAAKmpE,KAAKnoE,QAAS,QAAShB,KAAKqmH,MAAOrmH,MACzDuF,GAAanB,IAAIpE,KAAKmpE,KAAKnoE,QAAS,WAAYhB,KAAK+ma,YAAa/ma,MAClEA,KAAKmpE,KAAKyc,GAAGp6E,GAAQ2+E,eAAgBnqF,KAAKq0U,iBAAkBr0U,MAC5DA,KAAKmpE,KAAKyc,GAAGp6E,GAAQ0+E,gBAAiBlqF,KAAK6/G,iBAAkB7/G,MAC7DA,KAAKmpE,KAAKyc,GAAGp6E,GAAQ4+E,cAAepqF,KAAK4pN,eAAgB5pN,MACzDuF,GAAanB,IAAIpE,KAAKmpE,KAAKnoE,QAAShB,KAAK66G,YAAa76G,KAAKirW,mBAAoBjrW,QAEnF66L,EAAKx/L,UAAUuB,oBAAsB,WAC7BoD,KAAKmpE,KAAK6d,cAGdzhF,GAAahB,OAAOvE,KAAKmpE,KAAKnoE,QAAShB,KAAKknW,WAAYlnW,KAAK6otB,eAC7DtjtB,GAAahB,OAAOvE,KAAKmpE,KAAKnoE,QAAS,QAAShB,KAAKqmH,OACrD9gH,GAAahB,OAAOvE,KAAKmpE,KAAKnoE,QAAS,WAAYhB,KAAK+ma,aACxD/ma,KAAKmpE,KAAK6c,IAAIx6E,GAAQ2+E,eAAgBnqF,KAAKq0U,kBAC3Cr0U,KAAKmpE,KAAK6c,IAAIx6E,GAAQ0+E,gBAAiBlqF,KAAK6/G,kBAC5C7/G,KAAKmpE,KAAK6c,IAAIx6E,GAAQ4+E,cAAepqF,KAAK4pN,gBAC1C5pN,KAAKmpE,KAAK6c,IAAIhmF,KAAK66G,YAAa76G,KAAKirW,sBAKzCpwK,EAAKx/L,UAAUkkC,cAAgB,WAC3B,MAAO,QAOXs7J,EAAKx/L,UAAUiX,QAAU,SAAU62D,GAC/BnpE,KAAKpD,uBAKFi+L,KCx4BX2uhB,GAAWp9mB,OAAQq9mB,GAAa14U,GAAa24U,GAAaC,GAAgBz4U,GAAgB04U,GAAkB54U,GAAWC,GAAgB44U,GAAqBzuU,uChBM1I,cAKE,eAKD,mBAKK,yBAKC,qBAKL,wCAQO,+BAIC,2BAKL,oBAKF,oBAKE,+EAoBE,oDAUO,oDAUP,8IAiCA,u7B3jBmbzB,SAAyBjyU,EAAMn2D,EAAShS,GACpC,OAAOyiC,GAAY0lC,EAAKt7C,SAASsI,SAASnjB,GAAUhS,gBAMxD,SAA4BmoE,EAAMn2D,EAAShS,GACvC,OAAOyiC,GAAY0lC,EAAKt7C,SAAS0qF,YAAYvlG,GAAUhS,iBAM3D,SAA6BmoE,EAAMn2D,EAAShS,GACxC,OAAOyiC,GAAY0lC,EAAKt7C,SAAS0hE,aAAav8E,GAAUhS,aAM5D,SAAyBmoE,EAAMn2D,EAAShS,GACpC,OAAOyiC,GAAY0lC,EAAKt7C,SAAS2/D,SAASx6E,GAAUhS,mCA8CxD,SAA4BmoE,EAAMn2D,EAAS8Z,EAAMY,EAAU1sB,GAGvD,OAFAgS,EAAQub,EAAI,KAAOb,EAAS3gB,EAAI,KAAO2gB,EAAS1gB,EAAI8f,EAAK/W,OAAS,GAAK,OAAS2X,EAAS3gB,EAAI+f,EAAK9W,MAAQ,GAAK,IAAM0X,EAAS1gB,EAC1H,MAAQ0gB,EAAS3gB,EAAI,KAAO2gB,EAAS1gB,EAAI8f,EAAK/W,OAAS,GAAK,OAAS2X,EAAS3gB,EAAI+f,EAAK9W,MAAQ,GAAK,IAAM0X,EAAS1gB,EAAI,KACpHy2B,GAAY0lC,EAAKt7C,SAASsI,SAASnjB,GAAUhS,iBAMxD,SAA6BmoE,EAAMn2D,EAAS8Z,EAAMY,EAAU1sB,GAGxD,OAFAgS,EAAQub,EAAI,KAAOb,EAAS3gB,EAAI,KAAO2gB,EAAS1gB,EAAI8f,EAAK/W,OAAS,GAAK,OAAS2X,EAAS3gB,EAAI+f,EAAK9W,MAAQ,GAAK,KAC1G0X,EAAS1gB,EAAI8f,EAAK/W,OAAS,GAAK,OAAS2X,EAAS3gB,EAAI+f,EAAK9W,MAAQ,GAAK,KAAO0X,EAAS1gB,EAAI8f,EAAK/W,OAAS,GAAK,KAC7G0tB,GAAY0lC,EAAKt7C,SAASsI,SAASnjB,GAAUhS,cAMxD,SAA0BmoE,EAAMn2D,EAAS8Z,EAAMY,EAAU1sB,GAGrD,OAFAgS,EAAQub,EAAI,KAAOb,EAAS3gB,EAAI,KAAO2gB,EAAS1gB,EAAI8f,EAAK/W,OAAS,GAAK,MAAQ2X,EAAS3gB,EAAI,KAAO2gB,EAAS1gB,EAAI8f,EAAK/W,OAAS,GAC1H,OAAS2X,EAAS3gB,EAAI+f,EAAK9W,MAAQ,GAAK,IAAM0X,EAAS1gB,EAAI,OAAS0gB,EAAS3gB,EAAI+f,EAAK9W,MAAQ,GAAK,IAAM0X,EAAS1gB,EAC/Gy2B,GAAY0lC,EAAKt7C,SAASsI,SAASnjB,GAAUhS,uBAMxD,SAAmCmoE,EAAMn2D,EAAS8Z,EAAMY,EAAU1sB,GAE9D,OADAgS,EAAQub,EAAI,OAASb,EAAS3gB,EAAI+f,EAAK9W,MAAQ,GAAK,IAAM0X,EAAS1gB,EAAI,OAAS0gB,EAAS3gB,EAAI+f,EAAK9W,MAAQ,GAAK,IAAM0X,EAAS1gB,EACvHy2B,GAAY0lC,EAAKt7C,SAASsI,SAASnjB,GAAUhS,qBAMxD,SAAiCmoE,EAAMn2D,EAAS8Z,EAAMY,EAAU1sB,GAE5D,OADAgS,EAAQub,EAAI,KAAOb,EAAS3gB,EAAI,KAAO2gB,EAAS1gB,EAAI8f,EAAK/W,OAAS,GAAK,MAAQ2X,EAAS3gB,EAAI,KAAO2gB,EAAS1gB,EAAI8f,EAAK/W,OAAS,GACvH0tB,GAAY0lC,EAAKt7C,SAASsI,SAASnjB,GAAUhS,aAMxD,SAAyBmoE,EAAMn2D,EAAS8Z,EAAMY,EAAU1sB,GAKpD,OAJAgS,EAAQub,EAAI,MAAQb,EAAS3gB,EAAI+f,EAAK9W,MAAQ,GAAK,KAAO0X,EAAS1gB,EAAI8f,EAAK/W,OAAS,GAAK,OAAS2X,EAAS3gB,EAAI+f,EAAK9W,MAAQ,GACvH,KAAO0X,EAAS1gB,EAAI8f,EAAK/W,OAAS,GAAK,OAAS2X,EAAS3gB,EAAI+f,EAAK9W,MAAQ,GAAK,KAAO0X,EAAS1gB,EAAI8f,EAAK/W,OAAS,GAAK,OACrH2X,EAAS3gB,EAAI+f,EAAK9W,MAAQ,GAAK,KAAO0X,EAAS1gB,EAAI8f,EAAK/W,OAAS,GAAK,MAAQ2X,EAAS3gB,EAAI,KAAO2gB,EAAS1gB,EAAI8f,EAAK/W,OAAS,GAC9H,OAAS2X,EAAS3gB,EAAI+f,EAAK9W,MAAQ,GAAK,KAAO0X,EAAS1gB,EAAI8f,EAAK/W,OAAS,GAAK,KAC9E0tB,GAAY0lC,EAAKt7C,SAASsI,SAASnjB,GAAUhS,+BA0BxD,SAA4BmoE,EAAMn2D,EAASpP,EAAU5C,GAEjD,IAAK,IADD0N,EAAUy6D,EAAKt7C,SAASorF,cAAcjmG,EAAS,WAC1C5U,EAAK,EAAGgjE,EAAax9D,EAAUxF,EAAKgjE,EAAW3kE,OAAQ2B,IAE5DqlC,GADU29B,EAAWhjE,GACJsQ,GAErB,OAAO+0B,GAAY/0B,EAAS1N,iBAOhC,SAA6BuiE,EAAY33C,GAGrC,IAAK,IADDpvB,EADA01J,KAEK9zJ,EAAK,EAAGkxd,EAAe/rZ,EAAYnlE,EAAKkxd,EAAa7yd,OAAQ2B,IAAM,CACxE,IAAI2vB,EAAOuhc,EAAalxd,GACxB5B,KACA,IAAK,IAAIqG,EAAK,EAAGintB,EAAWl+rB,EAAQ/oB,EAAKintB,EAASrttB,OAAQoG,IAAM,CAC5D,IAAIkpB,EAAQ+9rB,EAASjntB,GACjBkrB,EAAKhC,KACLvvB,EAAKuvB,GAASgC,EAAKhC,IAG3BmmI,EAAQ1tJ,KAAKhI,GAEjB,OAAO01J,spC4kBhuBP5nE,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAQ5D2nF,GAAO,UAKPwlmB,GAAU,kBAEVC,GAAW,mBAOXC,GAA+B,SAAU9+nB,GAEzC,SAAS8+nB,IACL,OAAkB,OAAX9+nB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVAsqF,GAAU2/nB,EAAe9+nB,GAIzBN,IACI3jF,EAAS,SACV+itB,EAAc5utB,UAAW,SAAK,GACjCwvF,IACI3jF,EAAS,QACV+itB,EAAc5utB,UAAW,SAAK,GAC1B4utB,GACTjrpB,IAKEkrpB,GAAkC,SAAU/+nB,GAE5C,SAAS++nB,IACL,OAAkB,OAAX/+nB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVAsqF,GAAU4/nB,EAAkB/+nB,GAI5BN,IACI3jF,EAAS,OACVgjtB,EAAiB7utB,UAAW,aAAS,GACxCwvF,IACI3jF,EAAS,OACVgjtB,EAAiB7utB,UAAW,aAAS,GACjC6utB,GACTlrpB,IAKEmrpB,GAAiC,SAAUh/nB,GAE3C,SAASg/nB,IACL,OAAkB,OAAXh/nB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbAsqF,GAAU6/nB,EAAiBh/nB,GAI3BN,IACI3jF,EAAS,WACVijtB,EAAgB9utB,UAAW,cAAU,GACxCwvF,IACI3jF,EAAS,MACVijtB,EAAgB9utB,UAAW,gBAAY,GAC1CwvF,IACI3jF,EAAS,SACVijtB,EAAgB9utB,UAAW,cAAU,GACjC8utB,GACTnrpB,IAKEorpB,GAAwC,SAAUj/nB,GAElD,SAASi/nB,IACL,OAAkB,OAAXj/nB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVAsqF,GAAU8/nB,EAAwBj/nB,GAIlCN,IACI9iF,GAAUiwB,OAAQ,SAAU9sB,SAAU,IAAK0U,OAAQ,QAAUuqsB,KAC9DC,EAAuB/utB,UAAW,YAAQ,GAC7CwvF,IACI9iF,GAAUiwB,OAAQ,UAAW9sB,SAAU,IAAK0U,OAAQ,QAAUuqsB,KAC/DC,EAAuB/utB,UAAW,YAAQ,GACtC+utB,GACTprpB,IAYEqrpB,GAAuB,SAAUl/nB,GAOjC,SAASk/nB,EAAMr3sB,EAAShS,GACpB,OAAOmqF,EAAO7pF,KAAKtB,KAAMgT,EAAShS,IAAYhB,KA8flD,OArgBAsqF,GAAU+/nB,EAAOl/nB,GAajBk/nB,EAAMhvtB,UAAUkkC,cAAgB,WAC5B,MAAO,SAKX8qrB,EAAMhvtB,UAAUmxG,eAAiB,WAC7B,OAAOxsG,KAAKgtG,kBAKhBq9mB,EAAMhvtB,UAAUiX,QAAU,WACtBtS,KAAKuhF,KAAK,OACVvhF,KAAKgB,QAAQ8C,UAAUS,OAvHf,qBAwHR0B,EAAkBjG,KAAKgB,SAAWkT,SAAY,GAAI6mT,UAAW,KAC7D5vO,EAAO9vF,UAAUiX,QAAQhR,KAAKtB,OAMlCqqtB,EAAMhvtB,UAAUoX,UAAY,WAEpBzS,KAAKkT,WACLlT,KAAKgB,QAAQ8C,UAAUM,IAzHzB,UAgINimtB,EAAMhvtB,UAAU0wG,OAAS,WACrB/rG,KAAKsqtB,eACLtqtB,KAAKuqtB,cACLvqtB,KAAKwqtB,cAAgB,KACrBxqtB,KAAKyqtB,gBAAkB,KACvBzqtB,KAAK0qtB,cAAgB,MAOzBL,EAAMhvtB,UAAU4oH,KAAO,SAAU0mmB,GAK7B,GAJKl3oB,EAAMk3oB,KACP3qtB,KAAK4qtB,gBAAgBD,GACrBjstB,EAAOsB,KAAMA,KAAM2qtB,IAEnBl3oB,EAAMzzE,KAAK6qtB,gBAAiB,CAC5B7qtB,KAAK6qtB,eAAiB7qtB,KAAK8qtB,eAC3B,IAAI3jtB,EAAkC,iBAAjBnH,KAAW,OAAiBQ,SAASmC,cAAc3C,KAAKmH,QAAUnH,KAAKmH,OAC5F,GAAIssE,EAAMtsE,GACN,OAEmB,SAAnBA,EAAOnE,QACPhD,KAAK6qtB,eAAenmtB,MAAMwP,SAAW,SAGrClU,KAAK6qtB,eAAenmtB,MAAMwP,SAAW,WACrC/M,EAAOzC,MAAMwP,SAAW,YAE5BlU,KAAK+qtB,eAAe/qtB,KAAKkU,UACzB/M,EAAOxF,YAAY3B,KAAK6qtB,gBAE5B7qtB,KAAKgrtB,SAAW7ptB,EAAc,OAASkC,UAAWkhH,GAAMjhH,GAAI9D,EAAY,WACxEQ,KAAKirtB,iBACLjrtB,KAAKsmH,YAAYtmH,KAAKiT,UACtBwgE,EAAMzzE,KAAKiP,WAAsC,IAAzBjP,KAAKiP,SAASxS,OAAeuD,KAAKkrtB,mBAAqBlrtB,KAAKmrtB,oBACpFnrtB,KAAKortB,cACLprtB,KAAKygT,iBACLzgT,KAAKkzH,UACLlzH,KAAKqrtB,kBAEThB,EAAMhvtB,UAAUuvtB,gBAAkB,SAAUD,GACnCxttB,EAAYwttB,EAASvwrB,UAAaq5C,EAAMzzE,KAAKyqtB,kBAAoBzqtB,KAAKo6B,UAAYuwrB,EAASvwrB,SAC5Fp6B,KAAKsrtB,uBAEJnutB,EAAYwttB,EAASzqrB,QAAWuzC,EAAMzzE,KAAKwqtB,gBAAkBxqtB,KAAKkgC,QAAUyqrB,EAASzqrB,OACtFlgC,KAAKurtB,qBAEJputB,EAAYwttB,EAAS17sB,WAAcwkE,EAAMzzE,KAAK0qtB,gBAAkB1qtB,KAAKiP,WAAa07sB,EAAS17sB,UAC5FjP,KAAKwrtB,sBAGbnB,EAAMhvtB,UAAUirH,YAAc,SAAUrzG,GACpC,IAAKwgE,EAAMxgE,GAAW,CAClB,IAAI/V,GAAmC,IAA3B+V,EAAS1U,QAAQ,KAAc,IAAM,IACjDuF,EAAU9D,KAAKgrtB,SAAU/3sB,EAAS/V,MAAMA,SAGhDmttB,EAAMhvtB,UAAU4vtB,eAAiB,WACV,UAAfjrtB,KAAKgW,MACLhW,KAAKgrtB,SAAStmtB,MAAMsR,MAAQzT,EAAWvC,KAAKgW,OAExB,SAAfhW,KAAKgW,MACVhW,KAAK6qtB,eAAe/mtB,UAAUM,IAvM1B,uBA0MJpE,KAAKgrtB,SAAStmtB,MAAMsR,MAAQzT,EAAWvC,KAAKgW,OAC5ChW,KAAK6qtB,eAAe/mtB,UAAUS,OA3M1B,uBA6MRvE,KAAKgrtB,SAAStmtB,MAAMqR,OAASxT,EAAWvC,KAAK+V,SAEjDs0sB,EAAMhvtB,UAAU8vtB,kBAAoB,WAChCnrtB,KAAKyrtB,SAASzrtB,KAAKgrtB,SAAUhrtB,KAAKiP,SAAU,aAEhDo7sB,EAAMhvtB,UAAUkmF,KAAO,SAAUvgF,GAC7B,IAAIyyE,EAAMzzE,KAAK6qtB,iBAA6D,IAA1C7qtB,KAAK6qtB,eAAe1lpB,kBAGtD,GAAuB,iBAAZnkE,GAAoC,QAAZA,EAM/ByyE,EAAMzyE,KACNA,EAAWhB,KAAK0rtB,YAAc1rtB,KAAK6qtB,eAAe9ilB,iBAAmB/nI,KAAK6qtB,eAAe1ltB,mBAE7FnF,KAAK2rtB,aAAa3qtB,QARd,IAAK,IAAI7E,EAAI,EAAGA,EAAI6D,KAAK6qtB,eAAe1lpB,kBAAmBhpE,IACvD6D,KAAK2rtB,aAAa3rtB,KAAK6qtB,eAAezwsB,SAASje,KAS3DkutB,EAAMhvtB,UAAUowtB,SAAW,SAAUzntB,EAAKhH,EAAOwuJ,GAC7C,IAAIxxH,EACA4xrB,EACA15e,EAEJ,GADmB05e,EAAV,UAATpgkB,EAA6BxrJ,KAAKwqtB,cAAyB,YAATh/jB,EAA+BxrJ,KAAKyqtB,gBAA4BzqtB,KAAK0qtB,eAClHj3oB,EAAMm4oB,GAEP,OADA5ntB,EAAIrC,YAAYiqtB,EAAQhqtB,WAAU,IAC3BoC,EAEX,IACI,GAAIxD,SAASgB,iBAAiBxE,GAAOP,OAAS,EAAG,CAC7C,IAAIiG,EAAOlC,SAASmC,cAAc3F,GAClCgH,EAAIrC,YAAYe,GAChBA,EAAKgC,MAAM4xC,QAAU,GACrB,IAAIu1qB,EAAMnptB,EAAKd,WAAU,GAChB,UAAT4pJ,EAAmBxrJ,KAAKwqtB,cAAgBqB,EAAe,YAATrgkB,EAAqBxrJ,KAAKyqtB,gBAAkBoB,EAAM7rtB,KAAK0qtB,cAAgBmB,GAG7H,MAAOhrtB,GACHm5B,EAAaqjC,GAAiBrgE,GAgBlC,OAdKy2E,EAAMz5C,KACPk4M,EAAYl4M,KAAeh6B,KAAMwrJ,IAEhC/3E,EAAMy+J,MAAcA,EAAUz1O,OAAS,IAAOg3E,EAAMy+J,EAAU,GAAGlvO,UAAiC,IAArBkvO,EAAUz1O,OAQzD,IAA1BuH,EAAImhE,oBACTnhE,EAAIhC,UAAYhF,MARbqE,MAAMC,KAAK4wO,GAAW9yO,QAAQ,SAAU0G,GAClC2tE,EAAM3tE,EAAG9C,WACV8C,EAAGpB,MAAM4xC,QAAU,IAEvBtyC,EAAIrC,YAAYmE,KAMjB9B,GAEXqmtB,EAAMhvtB,UAAUywtB,cAAgB,SAAUvB,GACjC92oB,EAAMzzE,KAAKuqtB,WAAWA,MACvBjotB,cAActC,KAAKuqtB,WAAWA,WACvBvqtB,KAAKuqtB,WAAWA,IAEtB92oB,EAAMzzE,KAAKsqtB,YAAYC,MACxBjotB,cAActC,KAAKsqtB,YAAYC,GAAYA,mBACpCvqtB,KAAKsqtB,YAAYC,KAGhCF,EAAMhvtB,UAAU0wtB,kBAAoB,WAChC,IAAIhstB,EAAQC,KACRA,KAAKgstB,gBACL/ltB,EAAkBjG,KAAK6qtB,gBAAkBr+sB,KAAQ,GAAIE,IAAO,KAC5D1M,KAAK6qtB,eAAiB,KACtB7qtB,KAAKgstB,gBAAiB,KAGrBznmB,mBACGA,oBACAA,sBACAA,uBACAA,wBACAA,qBACAA,sBAAsBnlH,QAAQ,SAAU6V,IACnCw+D,EAAM1zE,EAAM8qtB,iBAAmB9qtB,EAAM8qtB,eAAe/mtB,UAAUK,SAAS8Q,IACxElV,EAAM8qtB,eAAe/mtB,UAAUS,OAAO0Q,KAG9CjV,KAAK6qtB,eAAiB,MAErBp3oB,EAAMzzE,KAAKwqtB,gBACZxqtB,KAAKurtB,qBAEJ93oB,EAAMzzE,KAAKyqtB,kBACZzqtB,KAAKsrtB,uBAEJ73oB,EAAMzzE,KAAK0qtB,gBACZ1qtB,KAAKwrtB,sBAGbnB,EAAMhvtB,UAAUkwtB,mBAAqB,WACjCvrtB,KAAKwqtB,cAAc9ltB,MAAM4xC,QAAU,OACnC91C,SAASuL,KAAKpK,YAAY3B,KAAKwqtB,eAC/BxqtB,KAAKwqtB,cAAgB,MAEzBH,EAAMhvtB,UAAUiwtB,qBAAuB,WACnCtrtB,KAAKyqtB,gBAAgB/ltB,MAAM4xC,QAAU,OACrC91C,SAASuL,KAAKpK,YAAY3B,KAAKyqtB,iBAC/BzqtB,KAAKyqtB,gBAAkB,MAE3BJ,EAAMhvtB,UAAUmwtB,mBAAqB,WACjCxrtB,KAAK0qtB,cAAchmtB,MAAM4xC,QAAU,OACnC91C,SAASuL,KAAKpK,YAAY3B,KAAK0qtB,eAC/B1qtB,KAAK0qtB,cAAgB,MAEzBL,EAAMhvtB,UAAUswtB,aAAe,SAAUX,GACrC,IAAIjrtB,EAAQC,KACRistB,EAAcjstB,KAAK22C,UAAU4qC,KAC7BhpD,GACArtB,SAAU+gtB,EAAY/gtB,SAAUusB,KAAMw0rB,EAAYj0rB,OAAQq0D,eAAgB4/nB,EAAYrssB,QAEtF2qsB,EAAax1rB,SAASi2rB,EAAS1ntB,GAAGpG,MAAM,UAAU,GAAI,IACtDgvtB,GACArB,eAAgB7qtB,KAAK6qtB,eACrBF,SAAU3qtB,MAETyzE,EAAMzzE,KAAKsqtB,YAAYC,KAAiB92oB,EAAMu3oB,EAASrotB,cAAc,IAAMqntB,OAC5EhqtB,KAAKsqtB,YAAYC,GAAY4B,YAAYzntB,MAAMsR,MAAQ,MAE3DuiB,EAAQ1Z,IAAM,WACV9e,EAAM+rtB,cAAcvB,GACpBlltB,EAAO2ltB,GACPjrtB,EAAMymB,QAAQ,QAAS0lsB,GACwB,IAA3CnstB,EAAM8qtB,eAAe1lpB,mBACrBplE,EAAMgstB,qBAGd,IAAIzzrB,OAAcC,QAAQyyrB,EAAUzyrB,IAExC8xrB,EAAMhvtB,UAAU6vtB,iBAAmB,WAC/BlrtB,KAAKostB,UACLpstB,KAAKqstB,WACLrstB,KAAK2hH,aACL3hH,KAAKm2I,iBAETk0kB,EAAMhvtB,UAAU63H,QAAU,WACtBxvH,EAAW1D,KAAKgrtB,UAAYp5sB,KAAQ,WAExCy4sB,EAAMhvtB,UAAU0vtB,eAAiB,SAAU91sB,GAChB,iBAAXA,EAAK,GAAqC,iBAAXA,EAAK,IAA0C,IAAxBA,EAAImB,EAAE7X,QAAQ,OAAuC,IAAxB0W,EAAIoB,EAAE9X,QAAQ,MACzG0H,EAAkBjG,KAAK6qtB,gBAAkBr+sB,KAAQjK,EAAW0S,EAAImB,GAAI1J,IAAOnK,EAAW0S,EAAIoB,KAC1FrW,KAAKgstB,gBAAiB,GAGtBhstB,KAAK6qtB,eAAe/mtB,UAAUM,IAAImgH,WAAatvG,EAAIoB,EAAEnJ,WAAW0I,cAAgB,IAAMX,EAAImB,EAAElJ,WAAW0I,gBAG/Gy0sB,EAAMhvtB,UAAUolT,eAAiB,WAC7B,GAAKzgT,KAAK0gT,gBAAV,CAGA,IAAI4ra,EAAWnrtB,EAAc,OAASkC,UAAWkptB,gCACjDvstB,KAAKgrtB,SAASrptB,YAAY2qtB,KAE9BjC,EAAMhvtB,UAAU+vtB,YAAc,WAC1B,GAAIprtB,KAAKsc,QAAU,EAAG,CAClB,IAAIhZ,EAAKyxB,SAAS/0B,KAAKgrtB,SAAS1ntB,GAAGpG,MAAM,UAAU,GAAI,IACvD8C,KAAKuqtB,WAAWjntB,GAAMzH,OAAOsE,WAAWH,KAAK2rtB,aAAarwtB,KAAK0E,KAAMA,KAAKgrtB,UAAWhrtB,KAAKsc,SAC1Ftc,KAAKsqtB,YAAYhntB,IAAQkptB,QAAS,KAAMjC,WAAY,KAAMkC,YAAa,KAAMzrtB,QAAS,KAAM0rtB,UAAW,KAAMP,YAAa,MAC1HnstB,KAAKsqtB,YAAYhntB,GAAImptB,YAAcjxsB,WAAWxb,KAAKsc,QAAU,IAC7Dtc,KAAKsqtB,YAAYhntB,GAAIkptB,SAAU,IAAIxssB,MAAOC,UAAYjgB,KAAKsqtB,YAAYhntB,GAAImptB,YAC3EzstB,KAAKsqtB,YAAYhntB,GAAItC,QAAUhB,KAAKgrtB,SAChChrtB,KAAK2stB,gBAAkB,IACvBpntB,GAAanB,IAAIpE,KAAKgrtB,SAAU,YAAahrtB,KAAK4stB,iBAAiBtxtB,KAAK0E,KAAMsD,IAC9EiC,GAAanB,IAAIpE,KAAKgrtB,SAAU,aAAchrtB,KAAK6stB,qBAAqBvxtB,KAAK0E,KAAMsD,IACnFtD,KAAKsqtB,YAAYhntB,GAAIoptB,UAAY1stB,KAAKuqtB,WAAWjntB,IAEjDtD,KAAK8stB,kBACL9stB,KAAK+stB,eAAiB5rtB,EAAc,OAASkC,UAAW2mtB,KACxDhqtB,KAAKgrtB,SAAS9ltB,aAAalF,KAAK+stB,eAAgB/stB,KAAKgrtB,SAAS5wsB,SAAS,IACvEpa,KAAKsqtB,YAAYhntB,GAAIintB,WAAanotB,YAAYpC,KAAKgttB,kBAAkB1xtB,KAAK0E,KAAMA,KAAKsqtB,YAAYhntB,IAAM,IACvGtD,KAAKsqtB,YAAYhntB,GAAI6otB,YAAcnstB,KAAK+stB,kBAIpD1C,EAAMhvtB,UAAUuxtB,iBAAmB,SAAUtptB,GACzCpD,aAAaF,KAAKsqtB,YAAYhntB,GAAIoptB,WAClCpqtB,cAActC,KAAKsqtB,YAAYhntB,GAAIintB,YACnCvqtB,KAAKsqtB,YAAYhntB,GAAIkptB,QAAU,EAE1B/4oB,EADUzzE,KAAKsqtB,YAAYhntB,GAAItC,QAChB2B,cAAc,IAAMqntB,OACpChqtB,KAAKsqtB,YAAYhntB,GAAI6otB,YAAYzntB,MAAMsR,MAAQ,OAGvDq0sB,EAAMhvtB,UAAUwxtB,qBAAuB,SAAUvptB,GAC7C,IAAIk1B,EAAWx4B,KAAKsqtB,YAAYhntB,GAC5B0ntB,EAAWxyrB,EAASx3B,QACxBw3B,EAASk0rB,UAAY7wtB,OAAOsE,WAAWH,KAAK2rtB,aAAarwtB,KAAK0E,KAAMgrtB,GAAWhrtB,KAAK2stB,iBACpFn0rB,EAASi0rB,YAAcjxsB,WAAWxb,KAAK2stB,gBAAkB,IACzDn0rB,EAASg0rB,SAAU,IAAIxssB,MAAOC,UAAYuY,EAASi0rB,YAC9Ch5oB,EAAMu3oB,EAASrotB,cAAc,IAAMqntB,OACpCxxrB,EAAS+xrB,WAAanotB,YAAYpC,KAAKgttB,kBAAkB1xtB,KAAK0E,KAAMw4B,GAAW,MAGvF6xrB,EAAMhvtB,UAAU2xtB,kBAAoB,SAAU1C,GAC1C,IAAI2C,GAAe3C,EAAYkC,SAAW,IAAIxssB,MAAOC,WAAcqqsB,EAAYmC,YAAe,IAC9FnC,EAAY6B,YAAYzntB,MAAMsR,MAAQi3sB,EAAa,KAEvD5C,EAAMhvtB,UAAU+wtB,QAAU,WACtB,IAAI34oB,EAAMzzE,KAAK01C,OAA8B,IAArB11C,KAAK01C,KAAKj5C,OAAlC,CAGA,IAAI26H,EAAUj2H,EAAc,OAASkC,UAAW2pH,wBAAqBhtH,KAAK01C,OAC1E11C,KAAKgrtB,SAASrptB,YAAYy1H,KAE9BizlB,EAAMhvtB,UAAUgxtB,SAAW,WACvB,IAAI54oB,EAAMzzE,KAAKkgC,QAAgC,IAAtBlgC,KAAKkgC,MAAMzjC,OAApC,CAGA,IAAIywtB,EAAW/rtB,EAAc,OAASkC,UAvalC,kBAwaJ6ptB,EAAWlttB,KAAKyrtB,SAASyB,EAAUlttB,KAAKkgC,MAAO,SAC/C,IAAIitrB,EAAehstB,EAAc,OAASkC,UAAW0mtB,KACrDoD,EAAaxrtB,YAAYurtB,GACzBlttB,KAAKgrtB,SAASrptB,YAAYwrtB,KAE9B9C,EAAMhvtB,UAAUsmH,WAAa,WACzB,IAAIluC,EAAMzzE,KAAKo6B,UAAoC,IAAxBp6B,KAAKo6B,QAAQ39B,OAAxC,CAGA,IAAI4rH,EAAalnH,EAAc,OAASkC,UA/alC,oBAgbNglH,EAAaroH,KAAKyrtB,SAASpjmB,EAAYroH,KAAKo6B,QAAS,WACrDp6B,KAAKottB,uBAAuB/kmB,KAEhCgimB,EAAMhvtB,UAAU+xtB,uBAAyB,SAAUpstB,GAC/C,GAAIhB,KAAKgrtB,SAASxptB,iBAAiB,IAAMuotB,IAAStttB,OAAS,EACvDuD,KAAKgrtB,SAASrotB,cAAc,IAAMontB,IAASpotB,YAAYX,OAEtD,CACD,IAAImstB,EAAehstB,EAAc,OAASkC,UAAW0mtB,KACrDoD,EAAaxrtB,YAAYX,GACzBhB,KAAKgrtB,SAASrptB,YAAYwrtB,KAGlC9C,EAAMhvtB,UAAU86I,cAAgB,WAC5B,IAAIk3kB,EAAqBlstB,EAAc,OAASkC,UA1brC,uBA2bRhC,MAAMC,KAAKtB,KAAKmmH,SAAS/mH,QAAQ,SAAUkutB,GAC1C,IAAI75oB,EAAM65oB,EAAU1qsB,OAApB,CAGA,IAAI2qsB,EAASpstB,EAAc,UAC3BostB,EAAO/ptB,aAAa,OAAQ,WACxBiwE,EAAM65oB,EAAU1qsB,MAAM3P,WAAiD,IAApCq6sB,EAAU1qsB,MAAM3P,SAASxW,UAC5D6wtB,EAAU1qsB,MAAM3P,SAAW,aAE/Bs6sB,EAAOzptB,UAAUM,IAAI,WACrB,IAAI25G,GAAOuvmB,EAAU1qsB,MAAO2qsB,GACvB95oB,EAAM65oB,EAAUjnmB,QAAuC,mBAArBinmB,EAAe,OAClD/ntB,GAAanB,IAAImptB,EAAQ,QAASD,EAAUjnmB,OAEhDgnmB,EAAmB1rtB,YAAY4rtB,MAE/BF,EAAmBlopB,kBAAoB,GACvCnlE,KAAKottB,uBAAuBC,IAGpChD,EAAMhvtB,UAAUgwtB,eAAiB,WAC7B,IAAImC,GACA7C,SAAU3qtB,KACVgB,QAAShB,KAAKgrtB,SACdnyrB,QAAQ,GAEZ74B,KAAKwmB,QAAQ,aAAcgnsB,GACvBA,EAAgB30rB,SAGpB74B,KAAKgrtB,SAAStmtB,MAAM4xC,QAAU,OAC1Bt2C,KAAK0rtB,aAAyD,IAA1C1rtB,KAAK6qtB,eAAe1lpB,kBACxCnlE,KAAK6qtB,eAAe3ltB,aAAalF,KAAKgrtB,SAAUhrtB,KAAK6qtB,eAAezwsB,SAAS,IAG7Epa,KAAK6qtB,eAAelptB,YAAY3B,KAAKgrtB,UAEzCzltB,GAAanB,IAAIpE,KAAKgrtB,SAAU,QAAShrtB,KAAKm/G,aAAcn/G,MAC5DA,KAAK6qtB,eAAenmtB,MAAM+9D,OAASzoD,GAAiBha,KAAK6qtB,gBAAkB,GAC3E7qtB,KAAKyttB,aAAazttB,KAAKgrtB,YAE3BX,EAAMhvtB,UAAU8jH,aAAe,SAAUt+G,GACrC,IAAIsG,EAAStG,EAAEsG,OACX6jtB,EAAWnltB,EAAQsB,EAAQ,YAC3BynoB,GACA5toB,QAASgqtB,EAAUnyrB,QAAQ,EAAO60rB,cAAc,EAAOxymB,cAAer6G,EAAG8ptB,SAAU3qtB,MAEnF2ttB,EAAcxmtB,EAAOrD,UAAUK,SAze5B,sBA0ePnE,KAAKwmB,QAAQ,QAASoonB,IACjB++E,IAAgB/+E,EAAU/1mB,QAAW+1mB,EAAU8+E,eAChD1ttB,KAAK2rtB,aAAaX,IAG1BX,EAAMhvtB,UAAUoytB,aAAe,SAAUzC,GACrC,IAAIjrtB,EAAQC,KACR4ttB,EAAc5ttB,KAAK22C,UAAUstE,KAC7B1rF,GACArtB,SAAU0itB,EAAY1itB,SAAUusB,KAAMm2rB,EAAY51rB,OAAQq0D,eAAgBuhoB,EAAYhusB,QAEtFiusB,GACAlD,SAAU3qtB,KACVgB,QAAShB,KAAKgrtB,UAElBzyrB,EAAQ9Z,MAAQ,WACZussB,EAAStmtB,MAAM4xC,QAAU,IAE7B/d,EAAQ1Z,IAAM,WACV9e,EAAMymB,QAAQ,OAAQqnsB,IAE1B,IAAIv1rB,GAAUC,GAASA,QAAQyyrB,IAEnCX,EAAMhvtB,UAAUyvtB,aAAe,WAE3B,OADA9qtB,KAAKgB,QAAQ8C,UAAUM,IA1gBf,qBA2gBDpE,KAAKgB,SAMhBqptB,EAAMhvtB,UAAUmsF,kBAAoB,SAAUiF,EAASC,GAEnD,IAAK,IADDjyE,EAAYza,KAAKgB,QACZ5C,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKmvF,GAAUruF,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAE9D,OADWyE,EAAGzE,IAEV,IAAK,YACDquF,EAAQv5E,UAAYuH,EAAU3W,UAAUM,IA9gBlD,SA8gB6DqW,EAAU3W,UAAUS,OA9gBjF,YAmhBNsmF,IACI3jF,EAAUsE,GAAQkb,UAAYozT,OAAO9jU,MAAQ,IAAO,OAAS,UAC9Dq0sB,EAAMhvtB,UAAW,aAAS,GAC7BwvF,IACI3jF,EAAS,SACVmjtB,EAAMhvtB,UAAW,cAAU,GAC9BwvF,IACI3jF,EAAS,OACVmjtB,EAAMhvtB,UAAW,aAAS,GAC7BwvF,IACI3jF,EAAS,OACVmjtB,EAAMhvtB,UAAW,eAAW,GAC/BwvF,IACI3jF,EAAS,OACVmjtB,EAAMhvtB,UAAW,YAAQ,GAC5BwvF,IACI3jF,EAAS,OACVmjtB,EAAMhvtB,UAAW,gBAAY,GAChCwvF,IACI3jF,EAAS,OACVmjtB,EAAMhvtB,UAAW,gBAAY,GAChCwvF,IACI3jF,GAAS,IACVmjtB,EAAMhvtB,UAAW,mBAAe,GACnCwvF,IACI3jF,GAAS,IACVmjtB,EAAMhvtB,UAAW,uBAAmB,GACvCwvF,IACI3jF,GAAS,IACVmjtB,EAAMhvtB,UAAW,uBAAmB,GACvCwvF,IACI3jF,EAAS,MACVmjtB,EAAMhvtB,UAAW,eAAW,GAC/BwvF,IACI3jF,EAAS,MACVmjtB,EAAMhvtB,UAAW,uBAAmB,GACvCwvF,IACI9iF,KAAYqitB,KACbC,EAAMhvtB,UAAW,iBAAa,GACjCwvF,IACI9iF,KAAYkitB,KACbI,EAAMhvtB,UAAW,gBAAY,GAChCwvF,IACIxiF,OAAiB6htB,KAClBG,EAAMhvtB,UAAW,eAAW,GAC/BwvF,IACI3jF,EAAS1G,SAASuL,OACnBs+sB,EAAMhvtB,UAAW,cAAU,GAC9BwvF,IACI/hF,KACDuhtB,EAAMhvtB,UAAW,eAAW,GAC/BwvF,IACI/hF,KACDuhtB,EAAMhvtB,UAAW,iBAAa,GACjCwvF,IACI/hF,KACDuhtB,EAAMhvtB,UAAW,YAAQ,GAC5BwvF,IACI/hF,KACDuhtB,EAAMhvtB,UAAW,kBAAc,GAClCwvF,IACI/hF,KACDuhtB,EAAMhvtB,UAAW,aAAS,GAC7BwvF,IACI/hF,KACDuhtB,EAAMhvtB,UAAW,aAAS,GAC7BgvtB,EAAQx/nB,IACJzhF,GACDihtB,IAEL9+mB,66HCrnBEuinB,GAA2B,WAC3B,SAASA,KAQT,OANAA,EAAUhka,QAAU,SAAU9sT,GAI1B,OAFOA,GAASA,EAAM4mE,OAAW5mE,EAAMopE,WAAa,GAAKppE,EAAMspE,aAAe,GAC1EtpE,EAAM+6E,aAAe,GAAK/6E,EAAMwyM,kBAAoB,EAAI,WAAa,iBAGtEs+gB,KCNPC,GAA6B,WAO7B,SAASA,EAAYxqpB,EAAYxlC,EAAMiwrB,GAEnChutB,KAAKiutB,gBAELjutB,KAAKkutB,oBAELlutB,KAAKmutB,sBACLnutB,KAAKoutB,eACLputB,KAAKqutB,eACL,IAAIzisB,EA6BJ,OA5BA5rB,KAEKkrM,UAAY,IAAIxgG,GACrB1qG,KAAKsutB,YAAa,EAClB1isB,EAAS23C,EAAW/mE,KAAK,GACzBwD,KAAK4rB,OAASttB,OAAOhB,KAAKsuB,GAC1B5rB,KAAKu4R,KAAOh1N,EAAWg1N,KAAOh1N,EAAWg1N,QACzCv4R,KAAK+9D,QAAUwF,EAAWxF,QAAUwF,EAAWxF,WAC/C/9D,KAAKkuL,QAAU3qH,EAAW2qH,QAAU3qH,EAAW2qH,WAC/CluL,KAAKuutB,eAAiBhrpB,EAAWgrpB,eAAiBhrpB,EAAWgrpB,kBAC7DvutB,KAAKkyI,QAAU3uE,EAAWirpB,eAAiBjrpB,EAAWirpB,kBACtDxutB,KAAK+yB,OAASwwC,EAAWxwC,OAASwwC,EAAWxwC,UAC7C/yB,KAAKyutB,wBAA0BlrpB,EAAWkrpB,wBAA0BlrpB,EAAWkrpB,2BAC/EzutB,KAAKsutB,gBAA0CnztB,IAA7BooE,EAAWmrpB,eAAqCnrpB,EAAWmrpB,cAC7E1utB,KAAK2utB,YAAcprpB,EAAWg2P,UAC9Bv5T,KAAK4utB,eAAiB5utB,KAAK+yB,OAAOt2B,OAAS,EAC3CuD,KAAK6utB,kBAAoBtrpB,EAAWsrpB,oBAC9Bj3hB,UAAW,OAAQk3hB,gBAAiB,IAAK3wpB,WAAY,GAAIwpQ,iBAAaxsU,GAC5E6E,KAAK+utB,iBACL/utB,KAAKgutB,eAAiBA,EACtBhutB,KAAKszJ,aAAa1nI,EAAQ5rB,KAAKsutB,YAC/BtutB,KAAKgvtB,iBAAiBzrpB,EAAW/mE,KAAMwD,KAAKqutB,aAC5CrutB,KAAKivtB,mBAAmB1rpB,EAAWyrjB,aAAchvnB,KAAKsutB,YACtDtutB,KAAKuxD,aAAegS,EAAWhS,aAC/BvxD,KAAKoutB,YAAcputB,KAAKkvtB,oBAAoB3rpB,EAAW/mE,MACvDwD,KAAKmvtB,iBACLnvtB,KAAKovtB,oBAAoB7rpB,GACzBvjE,KAAKqvtB,iBAAiB9rpB,GACfvjE,KA20BX,OAz0BA+ttB,EAAY1ytB,UAAUi0tB,YAAc,SAAUC,EAAW33hB,EAAW+vI,GAGhE,IAAK,IADD6nZ,EAAOD,EAAU9ytB,OACZ8mB,EAAI,EAAGA,EAAIissB,EAAMjssB,IAAK,CAC3B,IAAK,IAAI4C,EAAI5C,EAAG4C,EAAIqpsB,EAAMrpsB,IAOtB,GANkB,eAAdyxK,EACO23hB,EAAUhssB,GAAG+8C,QAAQqnQ,GAAa3qU,MAAQuytB,EAAUppsB,GAAGm6C,QAAQqnQ,GAAa3qU,MAG5EuytB,EAAUhssB,GAAG+8C,QAAQqnQ,GAAa3qU,MAAQuytB,EAAUppsB,GAAGm6C,QAAQqnQ,GAAa3qU,MAE7E,CACN,IAAI+wB,KACJA,EAAOwhsB,EAAUhssB,GACjBgssB,EAAUhssB,GAAKgssB,EAAUppsB,GACzBopsB,EAAUppsB,GAAK4H,EAGnBwhsB,EAAUhssB,GAAGkssB,aAAahztB,OAAS,GACnCuD,KAAKsvtB,YAAYC,EAAUhssB,GAAGkssB,aAAc73hB,EAAW+vI,KAInEomZ,EAAY1ytB,UAAUq0tB,qBAAuB,SAAUH,EAAW/ytB,GAE9D,IAAK,IADDgztB,EAAOD,EAAU9ytB,OACZ8mB,EAAI,EAAGA,EAAIissB,EAAMjssB,IACtB/mB,EAAKA,EAAKC,QAAW8ytB,EAAUhssB,GAAU,QACrCgssB,EAAUhssB,GAAGkssB,aAAahztB,OAAS,GACnCuD,KAAK0vtB,qBAAqBH,EAAUhssB,GAAGkssB,aAAcjztB,IAIjEuxtB,EAAY1ytB,UAAUs0tB,mBAAqB,SAAU/jsB,GAEjD,IADA,IAAIhc,EAAM5P,KAAKkyI,QAAQz1I,OAChBmT,KACH,IAAK,IAAI/N,EAAM,EAAG+ttB,EAAMhksB,EAAOnvB,OAAQoF,EAAM+ttB,EAAK/ttB,IAC1C+pB,EAAO/pB,IAAQ+pB,EAAO/pB,GAAK41B,OAASz3B,KAAKkyI,QAAQtiI,GAAK6nB,OACtDz3B,KAAKiutB,aAAarisB,EAAO/pB,GAAK41B,MAAQz3B,KAAKkyI,QAAQtiI,KAKnEm+sB,EAAY1ytB,UAAUi4J,aAAe,SAAU1nI,EAAQiksB,GACnD,IAAInptB,EACApJ,EAAO0C,KAAK4rB,OACZkksB,EAAapxtB,KAAWsB,KAAKu4R,KAAM,MAAM,GAC7Cu3b,EAAaA,EAAWv1sB,OAAOva,KAAK+9D,QAAS/9D,KAAK+yB,OAAQ/yB,KAAKkuL,SAC/DluL,KAAK2vtB,mBAAmBG,GACxB9vtB,KAAK+vtB,mBAAmBzytB,GACxB,IAAIuE,EAAMvE,EAAKb,OACf,GAAIuD,KAAKgutB,eAEL,IADAhutB,KAAKgwtB,UAAYhwtB,KAAKgutB,eACfnstB,KAAO,CACV,IAAIxE,EAAMC,EAAKuE,GACX7B,KAAKgwtB,UAAU3ytB,IACf2C,KAAKgwtB,UAAU3ytB,GAAKy7D,YAAa,EACjC94D,KAAKgwtB,UAAU3ytB,GAAK4U,MAAQpQ,EAC5B7B,KAAKgwtB,UAAU3ytB,GAAK2pC,WAGpBhnC,KAAKgwtB,UAAU3ytB,IACXiG,GAAIjG,EACJ2loB,QAAS3loB,EACTqJ,UAAgBvL,IAATuL,GAA+B,cAATA,EAAwB,SAAWA,EAChEuL,MAAOpQ,EACPmlC,UACAnP,KAAMg4rB,EAAS,YAAc,OAC7B/2pB,YAAY,QAMxB,KAAOj3D,KAAO,CACNxE,EAAMC,EAAKuE,GACf6E,EAAOontB,GAAUhka,QAAQl+R,EAAOvuB,IAC3B2C,KAAKgwtB,YACNhwtB,KAAKgwtB,cAEThwtB,KAAKgwtB,UAAU3ytB,IACXiG,GAAIjG,EACJ2loB,QAAS3loB,EACTqJ,UAAgBvL,IAATuL,GAA+B,cAATA,EAAwB,SAAWA,EAChEuL,MAAOpQ,EACPmlC,UACAnP,KAAMg4rB,EAAS,YAAc,OAC7B/2pB,YAAY,GAIxB94D,KAAKiwtB,mBAAmBH,IAE5B/B,EAAY1ytB,UAAU40tB,mBAAqB,SAAUrksB,GAGjD,IAFA,IAAIhc,EAAMgc,EAAOnvB,OACbmztB,EAAM5vtB,KAAKyutB,wBAAwBhytB,OAChCmT,KACC5P,KAAKgwtB,UAAUpksB,EAAOhc,GAAK6nB,QAC3Bz3B,KAAKgwtB,UAAUpksB,EAAOhc,GAAK6nB,MAAMurmB,QAAUp3mB,EAAOhc,GAAKoznB,QAAUp3mB,EAAOhc,GAAKoznB,QAAUp3mB,EAAOhc,GAAK6nB,KACnGz3B,KAAKgwtB,UAAUpksB,EAAOhc,GAAK6nB,MAAMqhC,YAAa,EAC9C94D,KAAKgwtB,UAAUpksB,EAAOhc,GAAK6nB,MAAMy4rB,cAAgBtksB,EAAOhc,GAAKlJ,MAGrE,KAAOkptB,KACH5vtB,KAAKgwtB,UAAUhwtB,KAAKyutB,wBAAwBmB,GAAKn4rB,MAAMy4rB,cAAgB,kBACvElwtB,KAAKgwtB,UAAUhwtB,KAAKyutB,wBAAwBmB,GAAKn4rB,MAAM04rB,QAAUnwtB,KAAKyutB,wBAAwBmB,GAAKO,SAG3GpC,EAAY1ytB,UAAU00tB,mBAAqB,SAAUzytB,GACjD,IAAK,IAAIc,EAAK,EAAGyE,EAAK7C,KAAKyutB,wBAAyBrwtB,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACtE,IAAI2tB,EAAQlpB,EAAGzE,GACf4B,KAAKkutB,iBAAiBnisB,EAAM0L,MAAQ/4B,KAAWqtB,EAAO,MAAM,GAC5D/rB,KAAKkutB,iBAAiBnisB,EAAM0L,MAAM24rB,cAAgBrksB,EAAMoksB,QAG5D,IAAK,IADDE,EAAY/xtB,OAAOhB,KAAK0C,KAAKkutB,kBACxBoC,EAAO,EAAG1gtB,EAAMygtB,EAAU5ztB,OAAQ6ztB,EAAO1gtB,EAAK0gtB,IAAQ,CAC3D,IACIC,GADAxksB,EAAQ/rB,KAAKkutB,iBAAiBmC,EAAUC,KACjBrttB,WACvBmttB,GAAiBG,EAAiBA,EAAeJ,QAAUpksB,EAAMoksB,SAAS5gtB,QAAQ,MAAO,IACzF4gtB,EAAUC,EAAc7gtB,QAAQ,KAAM,IAC1Cwc,EAAMoksB,QAAUA,EAAQ5xtB,QAAQ,MAAQ,EAAIyB,KAAKwwtB,cAAcL,GAAWA,EAC1EpksB,EAAM0L,KAAO84rB,EAAiBA,EAAe94rB,KAAO1L,EAAM0L,KAC1Dn6B,EAAKkH,KAAKunB,EAAM0L,MAEhB,IAAK,IADDg5rB,EAAcL,EAAclztB,MAAM,KAC7B2E,EAAM,EAAG6utB,EAAMD,EAAYh0tB,OAAQoF,EAAM6utB,EAAK7utB,IAAO,CAC1D,IAAI6E,EAAO+ptB,EAAY5utB,GACnB8utB,EAAiBjqtB,EAAKxJ,MAAM,oCAChC,IAA0E,KAArE,MAAO,QAAS,MAAO,MAAO,OAAOqB,QAAQoytB,EAAe,IAAY,CACzE,IAAI1+sB,EAAQ3U,EAAKiB,QAAQoytB,EAAe,IACnC3wtB,KAAKmutB,mBAAmBpisB,EAAM0L,MAQ/Bz3B,KAAKmutB,mBAAmBpisB,EAAM0L,MAAMjzB,MAChCyN,MAAOA,EACPvL,KAAMiqtB,EAAe,GACrBR,QAASzptB,IAVb1G,KAAKmutB,mBAAmBpisB,EAAM0L,QACtBxlB,MAAOA,EACPvL,KAAMiqtB,EAAe,GACrBR,QAASzptB,QAcrCqntB,EAAY1ytB,UAAU2ztB,iBAAmB,SAAUxytB,EAAMo0tB,GAKrD,IAAK,IAJDtztB,EAAO0C,KAAK4rB,OACZilsB,EAAOr0tB,EAAKC,OACZq0tB,EAAQ9wtB,KAAKgwtB,UACbe,EAAMzztB,EAAKb,OACNu0tB,EAAK,EAAGA,EAAKD,EAAKC,IAAM,CAC7B,IAAI3ztB,EAAMC,EAAK0ztB,GACVF,EAAMzztB,GAAK4ztB,UACZH,EAAMzztB,GAAK4ztB,YAEVH,EAAMzztB,GAAK6ztB,mBACZJ,EAAMzztB,GAAK6ztB,qBAEVJ,EAAMzztB,GAAK8ztB,aACZL,EAAMzztB,GAAK8ztB,eAOf,IAAK,IALDF,EAAUH,EAAMzztB,GAAK4ztB,QACrBG,EAAc9ytB,OAAOhB,KAAK2ztB,GAASx0tB,OAAS,EAC5Cy0tB,EAAmBJ,EAAMzztB,GAAK6ztB,iBAC9BC,EAAaL,EAAMzztB,GAAK8ztB,WAEnBE,EAAK,EAAGA,EAAKR,EAAMQ,IAAM,CAC9B,IAAIC,EAAO90tB,EAAK60tB,GAAIh0tB,GACpB,IAAK+ztB,EAAa,CACd,IAAIpjkB,EAAOsjkB,EACPt3lB,EAAiBh6H,KAAKymN,kBAAkB6qgB,EAAMj0tB,GAC9C28H,EAAesoK,gBACft0I,EAAOh0B,EAAesoK,eAErB2ub,EAAQtqtB,eAAe2qtB,GASxBL,EAAQK,GAAMr/sB,MAAMzN,KAAK6stB,IARzBJ,EAAQK,IACJr/sB,OAAQo/sB,GAAKE,QAASjztB,OAAOhB,KAAK2ztB,GAASx0tB,OAC3C+0tB,YAAWxxtB,KAAK2utB,aAEpBwC,EAAW3stB,MAAO89R,cAAetoK,EAAesoK,cAAemvb,WAAYz3lB,EAAey3lB,cAMzFP,EAAiBvqtB,eAAeqnJ,GAOjCkjkB,EAAiBljkB,GAAM/7I,MAAMzN,KAAK6stB,GANlCH,EAAiBljkB,IACb/7I,OAAQo/sB,GAAKE,QAASjztB,OAAOhB,KAAK4ztB,GAAkBz0tB,OACpD+0tB,YAAWxxtB,KAAK2utB,aAOtBiC,EAAOS,GAKTT,EAAOS,GAAIL,GAAMC,EAAQK,GAAMC,SAJ/BX,EAAOS,MACPT,EAAOS,GAAIL,GAAMC,EAAQK,GAAMC,UAa3CvxtB,KAAK0xtB,mBAET3D,EAAY1ytB,UAAUq2tB,gBAAkB,WACpC,IAAK,IAAIr0tB,EAAM,EAAGA,EAAM2C,KAAKuutB,eAAe9xtB,OAAQY,IAEhD,IAAK,IADD+iE,EAAYpgE,KAAKuutB,eAAelxtB,GAAKo6B,KAChCk6rB,EAAM,EAAGA,EAAM3xtB,KAAKuutB,eAAelxtB,GAAKo9D,MAAMh+D,OAAQk1tB,IAAO,CAClE,IAAIngoB,EAAaxxF,KAAKuutB,eAAelxtB,GAAKo9D,MAAMk3pB,GAC5C5lsB,EAAQ/rB,KAAKgwtB,UAAU5vpB,GACvBr0C,GAASA,EAAMklsB,QAAQz/nB,KACvBzlE,EAAMklsB,QAAQz/nB,GAAYggoB,WAAYxxtB,KAAK2utB,eAK3DZ,EAAY1ytB,UAAU6ztB,oBAAsB,SAAU1ytB,GAMlD,IALA,IAAIc,EAAO0C,KAAK4rB,OACZ/pB,EAAMrF,EAAKC,OACXm1tB,KACAC,EAASv0tB,EAAKb,OACdq1tB,EAAS9xtB,KAAKgwtB,UACXnutB,KAAO,CACGrF,EAAKqF,GAAlB,IACIkwtB,EAAOF,EAIX,IAFAD,EAAK/vtB,MAEEkwtB,KAAQ,CACX,IAAI10tB,EAAMC,EAAKy0tB,GACfH,EAAK/vtB,GAAKkwtB,GAA8B,WAArBD,EAAOz0tB,GAAKqJ,KAAqBlK,EAAKqF,GAAKxE,GAAO,GAG7E,OAAOu0tB,GAEX7D,EAAY1ytB,UAAU4ztB,mBAAqB,SAAUjgG,EAAc6gG,GAC/D,IAAK,IAAImC,EAAM,EAAGC,EAAMjjG,EAAeA,EAAavynB,OAAS,EAAGu1tB,EAAMC,GAAOpC,EAAQmC,IACjFhytB,KAAKgwtB,UAAUhhG,EAAagjG,GAAKv6rB,MAAMI,KAAOm3lB,EAAagjG,GAAKpikB,OAGxEm+jB,EAAY1ytB,UAAU+ztB,oBAAsB,SAAU7ytB,GAClD,IAAI21tB,EAAWlytB,KAAKmvtB,cAChBtsnB,KAEAsvnB,EAAYnytB,KAAKoytB,WAAW71tB,EAAQsmG,GAKpCwvnB,EAAMrytB,KAAKqutB,YAAY5xtB,OAC3B,GAAI01tB,EAEA,IAAK,IADD70tB,EAAOulG,EAAKy2Z,QAAQrnf,MACfmvO,EAAK,EAAGA,EAAK9jP,EAAKb,OAAQ2kP,SACVjmP,IAAjB0nG,EAAKjlC,cAAgEziE,IAAvC0nG,EAAKjlC,QAAQ00pB,YAAYh1tB,EAAK8jP,KAC5D8we,EAAS1ttB,KAAKlH,EAAK8jP,SAK3B,IAASA,EAAK,EAAGA,EAAKixe,EAAKjxe,SACFjmP,IAAjB0nG,EAAKjlC,cAA0DziE,IAAjC0nG,EAAKjlC,QAAQ00pB,YAAYlxe,IACvD8we,EAAS1ttB,KAAK48O,IAK9B2se,EAAY1ytB,UAAU+2tB,WAAa,SAAU71tB,EAAQg2tB,GAMjD,IAAK,IALDC,EAAiBj2tB,EAAO0xnB,eAAiB1xnB,EAAO0xnB,kBAEhDkkG,GADUnytB,KAAKkuL,SACH,GACZlnJ,KAEKyrrB,EAAM,EAAGC,EAAMF,EAAe/1tB,OAAQg2tB,EAAMC,EAAKD,IACtDzrrB,EAASwrrB,EAAeC,GAAOD,EAAeC,GAAKh4pB,SAC/Cz6D,KAAKgwtB,UAAUwC,EAAeC,GAAKh7rB,MAAMqhC,aACrC9xB,EAAOvqC,QAAU+1tB,EAAeC,GAAK/rtB,MAAqC,YAA7B8rtB,EAAeC,GAAK/rtB,MACjE1G,KAAK2ytB,gBAAgB3rrB,EAAQwrrB,EAAeC,GAAKh7rB,KAAM86rB,EAAO,UAAWJ,GACzEA,GAAY,GAGZnytB,KAAK2ytB,gBAAgB3rrB,EAAQwrrB,EAAeC,GAAKh7rB,KAAM86rB,EAAO,YAuB1E,OAAOJ,GAEXpE,EAAY1ytB,UAAUs3tB,gBAAkB,SAAU3rrB,EAAQvP,EAAMorE,EAAMn8F,EAAMyrtB,GACxE,IAAIpytB,EAAQC,KACRmlqB,EAAe,WACf,IAAIytD,EAAM,EACN7msB,EAAQhsB,EAAMiwtB,UAAUv4rB,GAC5B1L,EAAMib,OAASA,EACfjb,EAAMrlB,KAAOA,EACb,IAAIuqtB,EAAUllsB,EAAMmlsB,iBAChB2B,EAAWV,EACXW,KAEJ,IADAA,EAAMpstB,IAAU4rtB,eAAiBrgtB,UAC1B+0B,EAAO4rrB,IAAM,CAChB,IAAItgkB,EAAO2+jB,EAAQjqrB,EAAO4rrB,IAAM3gtB,MAChC,GAAa,YAATvL,EACA,IAAK,IAAIqstB,EAAM,EAAGC,EAAM1gkB,EAAK71J,OAAQs2tB,EAAMC,EAAKD,IACvCF,QAAkD13tB,IAAtC0nG,EAAKn8F,GAAM4rtB,YAAYhgkB,EAAKygkB,MACzCD,EAAMpstB,GAAM4rtB,YAAYhgkB,EAAKygkB,IAAQzgkB,EAAKygkB,GAC1CD,EAAMpstB,GAAMuL,MAAMzN,KAAK8tJ,EAAKygkB,UAKpC,IAASA,EAAM,EAAGC,EAAM1gkB,EAAK71J,OAAQs2tB,EAAMC,EAAKD,SACF53tB,IAAtC0nG,EAAKn8F,GAAM4rtB,YAAYhgkB,EAAKygkB,MAC5BlwnB,EAAKn8F,GAAM4rtB,YAAYhgkB,EAAKygkB,IAAQzgkB,EAAKygkB,GACzClwnB,EAAKn8F,GAAMuL,MAAMzN,KAAK8tJ,EAAKygkB,KAIvCH,IAES,YAATlstB,IACAm8F,EAAKn8F,GAAQostB,EAAMpstB,KAGtBm8F,EAAKn8F,GAKNy+pB,KAJAtikB,EAAKn8F,IAAU4rtB,eAAiBrgtB,UAChCkzpB,MAQR4oD,EAAY1ytB,UAAU43tB,kBAAoB,WACtC,IAAIC,EAAiBlztB,KAAK6utB,kBAAkBj3hB,UAC5C,GAAuB,SAAnBs7hB,GAA6BlztB,KAAK6utB,kBAAkBlnZ,YAAa,CACjE3nU,KAAKsvtB,YAAYtvtB,KAAK+utB,cAAemE,EAAgBlztB,KAAK6utB,kBAAkBlnZ,aAI5E,IAAK,IAHDonZ,KACAlttB,EAAM7B,KAAK+yB,OAAOt2B,OAAS,EAAIuD,KAAK+9D,QAAQthE,OACpB,IAAxBuD,KAAK+9D,QAAQthE,OAAe,EAAIuD,KAAK+9D,QAAQthE,OAAS,EACjDN,EAAI,EAAGA,GAAK0F,EAAK1F,IACtB4ytB,EAAcA,EAActytB,QAAUuD,KAAKmztB,YAAYh3tB,GAE3D6D,KAAK0vtB,qBAAqB1vtB,KAAK+utB,cAAeA,GAC9CA,EAAcA,EAActytB,QAAUuD,KAAKmztB,YAAYnztB,KAAKmztB,YAAY12tB,OAAS,GACjFuD,KAAKmztB,YAAcpE,IAI3BhB,EAAY1ytB,UAAUg0tB,iBAAmB,SAAU9rpB,GACpCvjE,KAAK4rB,OAAhB,IAOIwnsB,EACAC,EAPAt1pB,EAAUwF,EAAWxF,QAAUwF,EAAWxF,WAC1CvhE,EAAO+mE,EAAW/mE,KAClB+7R,EAAOh1N,EAAWg1N,KAAOh1N,EAAWg1N,QACpC+6b,EAAStztB,KAAKuxD,aACdzkC,EAAO,EAIX9sB,KAAK6utB,kBAAkBlnZ,iBAAcxsU,GAC3B,IAAI6kB,MAAOC,UACrBmzsB,EAA2B,IAAhB76b,EAAK97R,OAAeuD,KAAKuztB,kBAAkBh7b,EAAM/7R,EAAM,EAAGwD,KAAKmvtB,cAAe,MAAO,OAChGkE,EAA8B,IAAnBt1pB,EAAQthE,OAAeuD,KAAKuztB,kBAAkBx1pB,EAASvhE,EAAM,EAAGwD,KAAKmvtB,cAAe,SAAU,YAE1Fh0tB,IAAXm4tB,QAAkDn4tB,IAA1Bm4tB,EAAOE,qBAAmDr4tB,IAAnBm4tB,EAAOG,UACtE3msB,EAAQwmsB,EAAOE,eAAiBF,EAAOG,QAAWH,EAAOG,QACzDL,EAAWA,EAAS/qsB,OAAOirsB,EAAOE,eAAiB,EAAI1msB,EAAO,EAAGwmsB,EAAOG,eAE7Dt4tB,IAAXm4tB,QAAqDn4tB,IAA7Bm4tB,EAAOI,wBAAyDv4tB,IAAtBm4tB,EAAOK,aACzE7msB,EAAQwmsB,EAAOI,kBAAoBJ,EAAOK,WAAcL,EAAOK,WAC/DN,EAAWA,EAAShrsB,OAAOirsB,EAAOI,kBAAoB,EAAI5msB,EAAO,EAAGwmsB,EAAOK,aAG/E3ztB,KAAK4ztB,gBAAgBR,EAAUpztB,KAAKmvtB,cAAe,GAAI,OAEvDnvtB,KAAK4ztB,gBAAgBP,EAAUrztB,KAAKmvtB,cAAe,GAAI,UACvDnvtB,KAAKmztB,eACLnztB,KACK+utB,iBACL/utB,KAAKglH,iBACLhlH,KAAK6ztB,gBACL,IACIC,KACAC,EAAe/ztB,KAAK+yB,OAAa,OACrC/yB,KAAKg0tB,cAAcX,EAAUS,EAAU9ztB,KAAKmztB,YAAa,EAAGY,GAC5D/ztB,KAAKi0tB,kBAELj0tB,KAAKk0tB,aAAad,KAAoBU,EAAU,EAAG9ztB,KAAKmztB,YAAaY,EAAa/ztB,KAAK+utB,eACvF/utB,KAAKiztB,oBACLjztB,KAAKm0tB,iBAAkB,GACb,IAAIn0sB,MAAOC,WAGzB8tsB,EAAY1ytB,UAAU44tB,gBAAkB,WAEpC,IAAK,IADD7rC,EAAYporB,KAAKmztB,YAAY12tB,OACxB23tB,EAAS,EAAGA,EAAShsC,EAAWgsC,IAAU,CAC/C,IAAI59G,EAAWx2mB,KAAKmztB,YAAYiB,GAChC,GAAI59G,EAIA,IAAK,IAHD69G,OAAY,EACZC,EAAU,EAELC,EADO/9G,EAAS/5mB,OACK,EAAG83tB,EAAS,EAAGA,IAAU,CACnD,IAAItxpB,EAAOuziB,EAAS+9G,GACpB,GAAItxpB,EAAM,CACFoxpB,IACAA,EAAU3+b,QAAU4+b,EACpBD,EAAUriN,SAAWqiN,EAAUriN,UAAYsiN,EAAU,IAEzDD,EAAY31tB,KAAWukE,EAAM,MAAM,GAEnC,IADA,IAAIuxpB,EAASJ,EAAS,EACfp0tB,KAAKmztB,YAAYqB,KAAYx0tB,KAAKmztB,YAAYqB,GAAQD,IAAS,CAClE,IAAIxosB,EAAQk3C,EAAKq/N,cAAgBtiS,KAAK6utB,kBAAkBC,iBAAmB7rpB,EAAKq/N,cAAgB,UAChGr/N,EAAKsspB,UAAUxjsB,GAAS,EACxBk3C,EAAKsspB,UAAUkF,UAAY1osB,EAC3B/rB,KAAKmztB,YAAYiB,GAAQG,GAAQt9b,QAAUu9b,EAASJ,EACpD,IAAIpzG,EAA0B,QAAd/9iB,EAAKv8D,MAAgC,cAAdu8D,EAAKv8D,KAAwBu8D,EAAKv8D,KAAO,MAChF1G,KAAKmztB,YAAYqB,GAAQD,GAAUv0tB,KAAKglH,cAAcwvmB,GAAQD,IAC1D7ttB,KAAMs6mB,EAAU1+U,cAA+B,QAAdr/N,EAAKv8D,MAAgC,cAAdu8D,EAAKv8D,KAAwBu8D,EAAKq/N,cACrFr/N,EAAKq/N,cAAgB,SAC1BnsR,KAAM,SAAUg8I,OAAQ,EAAG6/W,SAAUuiN,EAAQ9zb,SAAU+zb,EAAQjF,UAAWtspB,EAAKsspB,WAE/EtspB,EAAKsspB,WAAatspB,EAAKsspB,UAAUvvtB,KAAK6utB,kBAAkB1wpB,cACxDn+D,KAAK6utB,kBAAkBlnZ,YAAc4sZ,GAExB,cAAbvzG,GACAhhnB,KAAKmztB,YAAYiB,GAAQG,GAAQt9b,QAAWu9b,EAASJ,EAAU,EAC/DC,EAAUp9b,QAAWu9b,EAASJ,EAAU,GAGxCp0tB,KAAKmztB,YAAYiB,EAAS,GAAGG,GAAQt9b,QAAUu9b,EAASJ,EAE5DI,IAEJF,EAAU,OAGV99G,EAAS+9G,GAAUv0tB,KAAKglH,cAAcovmB,GAAQG,GAAU71tB,KAAW21tB,EAAW,MAAM,GACpFC,IACA99G,EAAS+9G,GAAQ7+b,QAAU4+b,EAC3B99G,EAAS+9G,GAAQviN,SAAWwkG,EAAS+9G,GAAQviN,UAAYsiN,EAAU,GAExD,IAAXC,GAAgBF,IAChBA,EAAU3+b,QAAU4+b,EACpBD,EAAUriN,SAAWqiN,EAAUriN,UAAYsiN,EAAU,OAMzEvG,EAAY1ytB,UAAUk4tB,kBAAoB,SAAUj2tB,EAAMd,EAAMk4tB,EAAQxgtB,EAAUiC,EAAMw+sB,GACpF,IAAIpkkB,KACJ,GAAIjzJ,EAAM,CAMN,IAAK,IALDs3tB,EAAOt3tB,EAAKb,OACZo4tB,KACA9osB,EAAQzuB,EAAKo3tB,GAAQj9rB,KAErBq9rB,EAAY90tB,KAAKgwtB,UAAUjksB,GACtB9W,EAAM,EAAG8/sB,EAAK7gtB,EAASzX,OAAQwY,EAAM8/sB,EAAI9/sB,IAAO,CACrD,IAAIo8E,KACJA,EAAO+jG,SAAWs/hB,EAASE,EAAO,EAClCvjoB,EAAO8gE,MAAQuikB,EACfrjoB,EAAOl7E,KAAOA,EACdk7E,EAAOqkM,QAAU,EACjB,IAAIs/b,EAASh1tB,KAAKqutB,YAAYn6sB,EAASe,IAAM6/sB,EAAU7itB,OACnDgjtB,EAAcz4tB,EAAK0X,EAASe,IAAM8W,GACtCslE,EAAOmgoB,YAAYngoB,EAAO+jG,UAAW0/hB,EAAU7D,QAAQgE,GAAazD,UACpE,IAAIx3lB,EAAiBh6H,KAAKymN,kBAAkBwugB,EAAalpsB,GACzDslE,EAAOogoB,WAAaz3lB,EAAey3lB,WACnCpgoB,EAAOixM,cAAgBtoK,EAAesoK,cAIhCuyb,GAAeA,EAAYG,IAsB7BH,EAAYG,GAAQ/itB,MAAMzN,KAAK0P,EAASe,IACxC4/sB,EAAYG,GAAQ1C,YAAYp+sB,EAASe,IAAQf,EAASe,KAtB1D4/sB,EAAYG,IAAY/itB,SAAWqgtB,gBACnCjhoB,EAAOp/E,MAAQ4itB,EAAYG,GAAQ/itB,OAASiC,EAASe,IACrD4/sB,EAAYG,GAAQ1C,YAAYp+sB,EAASe,IAAQf,EAASe,GAC1Do8E,EAAOihoB,YAAcuC,EAAYG,GAAQ1C,YACzCjhoB,EAAOkgoB,QAAUyD,EACjB3joB,EAAOk+nB,aACQ,IAAXmF,GACArjoB,EAAOk+nB,UAAUkF,UAAYE,EAAe30tB,KAAK6utB,kBAAkBC,gBAAkBz9nB,EAAOixM,cAC5FjxM,EAAOk+nB,UAAUoF,EAAe30tB,KAAK6utB,kBAAkBC,gBAAkBz9nB,EAAOixM,eAAiB,IAGjGjxM,EAAOk+nB,UAAUl+nB,EAAOixM,eAAiB,EACzCjxM,EAAOk+nB,UAAUkF,UAAYpjoB,EAAOixM,eAGxCjxM,EAAO4/nB,WAGP1gkB,EAAU/rJ,KAAK6sF,IAOvB,IAAK,IAAI0hoB,EAAM,EAAGC,EAAMzikB,EAAU9zJ,OAAQs2tB,EAAMC,EAAKD,IACjD,GAAI6B,EAAO,EAAIF,GAAUnkkB,EAAUwikB,GAAKvB,UAAW,CAC/C,IAAIr/jB,EAAQ,KACR5B,EAAUwikB,GAAKxD,WAAah/jB,EAAUwikB,GAAKxD,UAAUkF,YACrDtikB,EAAQ5B,EAAUwikB,GAAKxD,UAAUkF,WAErCE,EAAgBxikB,GAAS5B,EAAUwikB,GAAKzwb,cACxC/xI,EAAUwikB,GAAK9B,QAAUjxtB,KAAKuztB,kBAAkBj2tB,EAAMd,EAAMk4tB,EAAS,EAAGnkkB,EAAUwikB,GAAK9gtB,MAAOkE,EAAMw+sB,GAG5G,OAAI30tB,KAAKsutB,WACE,IAAI9qpB,GAAY+sF,GAAWtsF,cAAa,IAAIZ,IAAQosF,OAAO,aAAcqlkB,EAAUj9rB,KAAKjiB,gBAGxF26I,EAIX,OAAOA,GAGfw9jB,EAAY1ytB,UAAUu4tB,gBAAkB,SAAUvstB,EAAK2/B,EAAQuwnB,EAAYphpB,GACvE,IAAItU,EAAMwF,EAAI5K,OACd86pB,EAAa,SACblwpB,EAAIxF,IACAuzL,UAAU,EACVnjL,MAAO+0B,EACPmrH,MAAO,EACPh8I,KAAMA,EACNq7sB,WAAW,EACXc,eACArB,WACA3ub,cAAe,QAAUi1X,EACzBg6D,QAAS1vtB,EACT6E,KAAM,YACN6otB,cAEJlotB,EAAIxF,GAAK0ttB,UAAUlotB,EAAIxF,GAAKygS,eAAiB,EAC7Cj7R,EAAIxF,GAAK0ttB,UAAUkF,UAAYpttB,EAAIxF,GAAKygS,cACxC,IAAK,IAAIlhD,EAAK,EAAG2ze,EAAK/trB,EAAOvqC,OAAQ2kP,EAAK2ze,EAAI3ze,IAC1C/5O,EAAIxF,GAAKywtB,YAAYtrrB,EAAOo6M,IAAOp6M,EAAOo6M,IAGlD2se,EAAY1ytB,UAAU64tB,aAAe,SAAU37b,EAAM28b,EAAYn3pB,EAASo3pB,EAAM34tB,EAAM44tB,EAAK7F,GACvF,IAAK,IAAImD,EAAMn6b,EAAK97R,OAAQg2tB,EAAM,EAAGA,EAAMC,EAAKD,IAAO,CAEnDyC,EADAC,EAAO34tB,EAAKC,QACO87R,EAAKk6b,GACxB,IAAI4C,EAASF,EAAO79rB,OAAOh5B,OAAOhB,KAAK43tB,GAAY,IAG/CI,GAAeJ,EAAWC,GAAMlE,QAAQx0tB,OAC5C87R,EAAKk6b,GAAKzgN,SAAW,EACrBz5O,EAAKk6b,GAAKhyb,SAAW00b,EAChB34tB,EAAK24tB,GAQN34tB,EAAK24tB,GAAM,GAAKn1tB,KAAK6ztB,aAAawB,GAAQ,GAAK98b,EAAKk6b,IAPpDj2tB,EAAK24tB,MACLn1tB,KAAK6ztB,aAAawB,MAElB74tB,EAAK24tB,GAAM,GAAKn1tB,KAAK6ztB,aAAawB,GAAQ,GAAK98b,EAAKk6b,IAMxD,IAAK,IAAI8C,EAAM,EAAGlD,EAAM,EAAGmD,EAAMz3pB,EAAQthE,OAAQ84tB,EAAMC,IAAOD,EAC1D,IAAK,IAAIE,EAAM,EAAGA,EAAML,EAAKK,IAAO,CAChC,IAAIC,EAAO11tB,KAAKgwtB,UAAUhwtB,KAAK+yB,OAAO0isB,GAAKh+rB,MAAMxlB,MAC7C0+I,EAAY3wJ,KAAKgwtB,UAAUhwtB,KAAK+yB,OAAO0isB,GAAKh+rB,MAAMy4rB,cAClDnksB,EAAQ/rB,KAAK+yB,OAAO0isB,GAAKh+rB,KACzBz6B,EAAQ,EAEZA,EAAQgD,KAAK21tB,kBAAkBp9b,EAAKk6b,GAAKxgtB,MAAO8rD,EAAQw3pB,GAAKjD,YAAaoD,EAAM/kkB,GAChF,IAAIkgM,EAAQt4D,EAAKk6b,GAAKr9hB,UAAYr3H,EAAQw3pB,GAAKngiB,UACxB,cAAnBmjG,EAAKk6b,GAAK/rtB,MAA8C,cAAtBq3D,EAAQw3pB,GAAK7utB,KAC/C47R,EAAgBtiS,KAAKymN,kBAAkBzpN,EAAO+uB,GAAOu2Q,cAMzD,GALA9lS,EAAK24tB,GAAM9C,GAAOrytB,KAAK6ztB,aAAawB,GAAQhD,IACxCl8sB,KAAM,QACNmsR,cAAeA,EAAetlS,MAAOA,EAAOyjS,SAAU00b,EAAMnjN,SAAUqgN,EAAKxhY,MAAOA,GAEtFwhY,EAAM71tB,EAAK24tB,GAAM14tB,YACStB,IAAtB6E,KAAKuxD,mBAA+Dp2D,IAAjC6E,KAAKuxD,aAAaoiqB,YACjDtB,IAASrytB,KAAKuxD,aAAaoiqB,WAAa,EACxC,MAKO,cAAnBp7b,EAAKk6b,GAAK/rtB,MACV6otB,EAAU/qtB,MAAO87D,QAAS9jE,EAAK24tB,GAAO1F,kBAErC6F,GACDt1tB,KAAKk0tB,aAAagB,EAAWC,GAAMlE,QAASiE,EAAYn3pB,EAASo3pB,EAAM34tB,EAAM44tB,EAAK7F,EAAUA,EAAU9ytB,OAAS,GAAGgztB,cAEtHyF,EAAWC,GAAMlE,aAczBlD,EAAY1ytB,UAAU24tB,cAAgB,SAAU79sB,EAAM++sB,EAAY14tB,EAAM24tB,EAAMS,GAK1E,IAAK,IAJDlD,EAAMv8sB,EAAK1Z,OACXo5tB,EAAW71tB,KAAK+9D,QAAQthE,OACxBq5tB,EAAW91tB,KAAK6utB,kBAAkB1wpB,WAE7Bs0pB,EAAM,EAAGA,EAAMC,EAAKD,IAAO,CAC5Bt8sB,EAAKs8sB,GAAKxB,QAAQx0tB,QAClBuD,KAAKg0tB,cAAc79sB,EAAKs8sB,GAAKxB,QAASiE,EAAY14tB,EAAM24tB,EAAMS,GAGlEV,EADAC,EAAOD,EAAWz4tB,QACC0Z,EAAKs8sB,GAExB,IAAIsD,EAAM5/sB,EAAKs8sB,GAAKtgkB,MAWpB,GAVAh8I,EAAKs8sB,GAAKhyb,SAAWs1b,EACrB5/sB,EAAKs8sB,GAAKzgN,SAAYmjN,EAAOS,EAAQA,EAChCp5tB,EAAKu5tB,GAMNv5tB,EAAKu5tB,GAAMZ,EAAOS,EAAQA,GAAQ51tB,KAAKglH,cAAc+wmB,GAAMZ,EAAOS,EAAQA,GAAQz/sB,EAAKs8sB,IALvFj2tB,EAAKu5tB,MACL/1tB,KAAKglH,cAAc+wmB,MACnBv5tB,EAAKu5tB,GAAMZ,EAAOS,EAAQA,GAAQ51tB,KAAKglH,cAAc+wmB,GAAMZ,EAAOS,EAAQA,GAAQz/sB,EAAKs8sB,IAKvFzytB,KAAK4utB,eACL,IAAK,IAAI6G,EAAM,EAAGA,EAAMG,EAAMH,IAAO,CACjC,IAAI3gpB,EAAS90E,KAAK+yB,OAAO0isB,GAAKzyF,QAAUhjoB,KAAK+yB,OAAO0isB,GAAKzyF,QAAUhjoB,KAAK+yB,OAAO0isB,GAAKh+rB,KAChFu+rB,GACA7/sB,KAAM,SACNmsR,cAAextN,EACfq9E,MAAO,EACPo9jB,aACAv9M,SAAWmjN,EAAOS,EAAQ,EAAIH,EAC9Bh1b,SAAUo1b,GAETr5tB,EAAKq5tB,GAMNr5tB,EAAKq5tB,GAAWV,EAAOS,EAAQ,EAAIH,GAAOz1tB,KAAKglH,cAAc6wmB,GAAWV,EAAOS,EAAQ,EAAIH,GAAOO,GALlGx5tB,EAAKq5tB,MACL71tB,KAAKglH,cAAc6wmB,MACnBr5tB,EAAKq5tB,GAAWV,EAAOS,EAAQ,EAAIH,GAAOz1tB,KAAKglH,cAAc6wmB,GAAWV,EAAOS,EAAQ,EAAIH,GAAOO,GAKtG,IAAIC,EAAQz5tB,EAAKq5tB,GAAWV,EAAOS,EAAQ,EAAIH,GAAKlG,UAMpD,GALA0G,EAAM9/sB,EAAKs8sB,GAAKlD,UAAUkF,UAAYz0tB,KAAK6utB,kBAAkBC,gBAAkBh6oB,GAAU,EACzFmhpB,EAAMxB,UAAYt+sB,EAAKs8sB,GAAKlD,UAAUkF,UAAYz0tB,KAAK6utB,kBAAkBC,gBAAkBh6oB,EACvFmhpB,GAASA,EAAMH,KACf91tB,KAAK6utB,kBAAkBlnZ,YAAewtZ,EAAOS,EAAQ,EAAIH,QAEnCt6tB,IAAtB6E,KAAKuxD,mBAA+Dp2D,IAAjC6E,KAAKuxD,aAAaoiqB,YACjDn3tB,EAAKq5tB,GAAUp5tB,SAAYuD,KAAKuxD,aAAaoiqB,WAAa,EAC1D,OAAO,UAKdx9sB,EAAKs8sB,GAAKlD,WAAap5sB,EAAKs8sB,GAAKlD,UAAUuG,KAChD91tB,KAAK6utB,kBAAkBlnZ,YAAewtZ,EAAOS,EAAQ,GAEzDV,EAAWC,GAAMlE,aAGzBlD,EAAY1ytB,UAAUs6tB,kBAAoB,SAAUl1b,EAAUknC,EAAa3qU,EAAO0J,GAGpE+5R,EAAShkS,OAAnB,IAGIy5tB,EAAK,EAEL7yB,EAAY,EACZ8yB,EAAS,EACb,GAAIzvtB,GAA+B,UAAvBA,EAAKkP,cACb,UAAwBza,IAAjBslS,EAASy1b,SACsB/6tB,IAA9BwsU,EAAYlnC,EAASy1b,MACrB7yB,GAAa,GAEjB6yB,SAGH,GAAIxvtB,GAA+B,QAAvBA,EAAKkP,cAElB,IADA,IAAI2sR,GAAU,OACUpnS,IAAjBslS,EAASy1b,SACsB/6tB,IAA9BwsU,EAAYlnC,EAASy1b,MACjB3zb,GACA8ga,EAAYrjsB,KAAKoutB,YAAY3tb,EAASy1b,IAAKl5tB,GAC3CulS,GAAU,GAGV8ga,EAAYrjsB,KAAKoutB,YAAY3tb,EAASy1b,IAAKl5tB,GAASqmsB,EAAYrjsB,KAAKoutB,YAAY3tb,EAASy1b,IAAKl5tB,GAASqmsB,GAGhH6yB,SAGH,GAAIxvtB,GAA+B,QAAvBA,EAAKkP,cAElB,IADA,IAAIwgtB,GAAa,OACOj7tB,IAAjBslS,EAASy1b,SACsB/6tB,IAA9BwsU,EAAYlnC,EAASy1b,MACjBE,GACA/yB,EAAYrjsB,KAAKoutB,YAAY3tb,EAASy1b,IAAKl5tB,GAC3Co5tB,GAAa,GAGb/yB,EAAYrjsB,KAAKoutB,YAAY3tb,EAASy1b,IAAKl5tB,GAASqmsB,EAAYrjsB,KAAKoutB,YAAY3tb,EAASy1b,IAAKl5tB,GAASqmsB,GAGhH6yB,SAGH,GAAIxvtB,GAA+B,oBAAvBA,EAAKkP,cAClB,UAAwBza,IAAjBslS,EAASy1b,IAAmB,CAC/B,QAAkC/6tB,IAA9BwsU,EAAYlnC,EAASy1b,IAAoB,CACzC,IAAIG,EAAYr2tB,KAAKkutB,iBAAiBlutB,KAAK4rB,OAAO5uB,IAC9CoztB,EAAgBiG,EAAUlG,QAC1BmG,KACJ,GAAIt2tB,KAAKmutB,mBAAmBkI,EAAU5+rB,MAElC,IAAK,IADD02rB,EAAqBnutB,KAAKmutB,mBAAmBkI,EAAU5+rB,MAClD51B,EAAM,EAAG6utB,EAAMvC,EAAmB1xtB,OAAQoF,EAAM6utB,EAAK7utB,IAAO,CACjE,IAAI00tB,EAAkBpI,EAAmBtstB,GACrC+lB,EAAU0usB,EAAeC,EAAgBpG,SAC7C,QAAgBh1tB,IAAZysB,EAAuB,CACvB,IAAI4usB,EAASD,EAAgB7vtB,KAC7BkhB,EAAU5nB,KAAK21tB,kBAAkBl1b,EAAUknC,EAAa4uZ,EAAgBtktB,MAAOuktB,GAC/EF,EAAeC,EAAgBpG,SAAWvosB,EAE9CwosB,EAAgB,EAAgB7gtB,QAAQgntB,EAAgBpG,QAASvosB,EAAQ1a,YAGjFm2rB,EAAYrjsB,KAAK2loB,SAASyqF,GAC1BvgqB,KAAKuB,MAAMiyoB,EAAUn2rB,YAEzBgptB,SAIJ,UAAwB/6tB,IAAjBslS,EAASy1b,SACsB/6tB,IAA9BwsU,EAAYlnC,EAASy1b,MAErB7yB,GAAarjsB,KAAKoutB,YAAY3tb,EAASy1b,IAAKl5tB,GAC5Cm5tB,KAEJD,IAuBR,OAAQxvtB,GAA+B,QAAvBA,EAAKkP,cAA2BytrB,EAAY8yB,EAAU9yB,GAE1E0qB,EAAY1ytB,UAAUorN,kBAAoB,SAAUzpN,EAAOojE,GACvD,IAAI45D,GACAsoK,mBAAyBnnS,IAAV6B,EAAgC,OAAVA,EAAiB,OAASA,EAAMkQ,gBAAa/R,EAClFs2tB,gBAAsBt2tB,IAAV6B,EAAgC,OAAVA,EAAiB,OAASA,OAAQ7B,GAExE,GAAI6E,KAAKiutB,aAAa7tpB,IAAcpjE,EAAO,CACvC,IAAIy5tB,EAAgB/3tB,KAAWsB,KAAKiutB,aAAa7tpB,GAAY,MAAM,UAC5Dq2pB,EAAch/rB,KACjBg/rB,EAAc/vtB,KACdszH,EAAesoK,cAAgBtiS,KAAKkrM,UAAUlgG,WAAW,IAAIhrF,KAAKhjB,GAAQy5tB,GAG1Ez8lB,EAAesoK,cAAgBtiS,KAAKkrM,UAAUngG,aAAa/tG,EAAOy5tB,GAEtEz8lB,EAAey3lB,WAAaz0tB,EACxBy5tB,EAAc/vtB,MAA8C,SAAtC1G,KAAKiutB,aAAa7tpB,GAAW15D,OACnD+vtB,EAAcz6rB,OAAS,sBACvBg+F,EAAey3lB,WAAazxtB,KAAKkrM,UAAUlgG,WAAW,IAAIhrF,KAAKhjB,GAAQy5tB,IAG/E,OAAOz8lB,GAEX+zlB,EAAY1ytB,UAAUm1tB,cAAgB,SAAUL,GAC5C,GAAIA,EAAQ5xtB,QAAQ,MAAQ,EAAG,CAE3B,IADA,IAAIg1S,KACG48a,EAAQ5xtB,QAAQ,MAAQ,GAC3B4xtB,EAAUA,EAAQ5gtB,QAAQ,kBAAmB,SAAUkd,EAAM5O,GAEzD,OADA01R,EAAQ/uS,KAAKqZ,GACL,KAAO01R,EAAQ92S,OAAS,KAKxC,IAFA82S,EAAQ/uS,KAAK2rtB,GACbA,EAAU,KAAO58a,EAAQ92S,OAAS,GAC3B0ztB,EAAQ5xtB,QAAQ,MAAQ,GAC3B4xtB,EAAUA,EAAQ5gtB,QAAQ,IAAIyU,OAAO,UAAgB,KAAM,SAAUyI,EAAMxa,GACvE,OAAOshS,EAAQthS,GAAO1C,QAAQ,gBAAiB,qBAI3D,OAAO4gtB,GAEXpC,EAAY1ytB,UAAUsqoB,SAAW,SAAU5ooB,GACvC,OAAO3B,SAAS,wBAA0B2B,EAAM,IAAzC3B,IAGJ2ytB,KCx3BA2I,GAAmB,mBAEnBC,GAAkB,kBAMlBC,GAAe,eAEf7pG,GAA2B,2BAE3BE,GAAyB,yBAqBzB5C,GAAc,eAEdI,GAAW,YAIXD,GAAe,gBAEfD,GAAY,aAEZssG,GAAmB,mBAEnBC,GAAiB,mBAEjBC,GAAoB,sBAEpBC,GAAsB,uBCnDtBzymB,GAAO,mBAIP0ymB,GAAS,WAETjqmB,GAAO,UAEPkqmB,GAAe,YAIfC,GAAgB,2BAIhBC,GAA0B,sBAQ1BC,GAAmB,eAUnBC,GAA0B,sBAY1BC,GAAyB,sBAIzBC,GAAqB,iBAErBC,GAAoB,qBAEpBC,GAA6B,gBAE7BC,GAAqB,iBAQrBC,GAAqB,YAErBC,GAAsB,eAItBC,GAAiB,gBAMjBC,GAAuB,mBAEvBC,GAAwB,eAIxBC,GAA4B,0BAE5BC,GAA8B,4BAI9BC,GAAmB,UAInBC,GAAkB,WAElBC,GAAsB,eAEtBC,GAAqB,uBAErBC,GAAkB,cAIlBC,GAAoB,YAIpBC,GAAoB,YAEpBC,GAAqB,iBAIrBC,GAAkB,eAYlBC,GAAgB,kBAEhBC,GAAsB,kBAMtBC,GAAqB,iBAMrBC,GAAmC,mBAEnCC,GAAyC,yBAMzCC,GAAiB,aAUjBC,GAAkB,cAElBC,GAAoB,kBAIpBC,GAAW,aAkCXC,GAAiB,kBAEjBC,GAAkB,mBAMlBC,GAA8B,0BAgB9BC,GAAY,qBAQZC,GAAS,WAETC,GAAU,kBAIVC,GAAgB,yBAgDhBC,GAAc,WCpRrB96S,GAAwB,WAExB,SAASA,EAAOx+a,GACZN,KAAK65tB,OAAS,EACd75tB,KAAKM,OAASA,EACdN,KAAK85tB,OAASx5tB,EAAOy5tB,aACrB/5tB,KAAKg6tB,aAAe15tB,EAAO05tB,aAC3Bh6tB,KAAKi6tB,WAAaj6tB,KAAKk6tB,gBAyhB3B,OArhBAp7S,EAAOzjb,UAAU0wG,OAAS,WACtB,IAAIzrG,EAASN,KAAKM,OACdw5tB,EAAS95tB,KAAKM,OAAOy5tB,aAIzB,GAHA/5tB,KAAKm6tB,kBAAkB75tB,GACvBN,KAAKmmkB,YAAcnmkB,KAAKo6tB,iBACxB13sB,GAAY1iB,KAAKM,OAAOU,SACpBhB,KAAKM,OAAO6hE,MAAQniE,KAAKM,OAAO6hE,KAAKnhE,SAAWhB,KAAKM,OAAOU,QAAQ2B,cAAc,WAAY,CACzFm3tB,EAAO3F,iBAKJn0tB,KAAKM,OAAOijE,WAAWsrpB,mBAAqB7utB,KAAKM,OAAOijE,WAAWsrpB,kBAAkBj3hB,WAC9B,SAAvD53L,KAAKM,OAAOijE,WAAWsrpB,kBAAkBj3hB,YACzCkiiB,EAAOjG,aAAe7ztB,KAAKq6tB,gBAAgB,UAE/CP,EAAO3F,iBAAkB,IARzB2F,EAAO90mB,cAAgBhlH,KAAKq6tB,gBAAgB,UAC5CP,EAAOjG,aAAe7ztB,KAAKq6tB,gBAAgB,UAU/Cr6tB,KAAKM,OAAO6hE,KAAKn7D,eACb+2D,QAAS/9D,KAAKs6tB,sBAAuB/2pB,WAAYjjE,EAAOijE,WAAWxwC,OAAOt2B,OAAS,EAAIq9tB,EAAOjG,aAC1F7ztB,KAAKq6tB,gBAAgB,WAC1B,GAEHr6tB,KAAKM,OAAO6hE,KAAKp0D,OAAO,0BACxB/N,KAAKM,OAAO6hE,KAAKwxlB,iBACT3zpB,KAAKM,OAAOU,QAAQ2B,cAAc,qBACxCA,cAAc,YAAYX,UACxBhC,KAAKM,OAAO6hE,KAAKw8jB,mBAAmBh8nB,cAAc,oBAAoBA,cAAc,YAAYX,UACpGhC,KAAKM,OAAO6hE,KAAKnsD,MAAQhW,KAAKu6tB,qBAC1Bv6tB,KAAKM,OAAOyV,OAAU/V,KAAK85tB,OAAOjG,aAAap3tB,OAASuD,KAAKg6tB,aAAah6pB,UAC1EhgE,KAAKM,OAAO6hE,KAAKpsD,OAAS,OAG1B/V,KAAKM,OAAO6hE,KAAKpsD,OAAS/V,KAAKM,OAAOyV,YAI1C/V,KAAKM,OAAOU,QAAQgB,UAAY,GAChChC,KAAKw6tB,SAASx6tB,KAAKM,QACnBN,KAAKM,OAAOU,QAAQW,YAAYR,EAAc,OAASmC,GAAItD,KAAKM,OAAOU,QAAQsC,GAAK,WACpFtD,KAAKM,OAAO6hE,KAAK9rB,SAAS,IAAMr2C,KAAKM,OAAOU,QAAQsC,GAAK,UAIjEw7a,EAAOzjb,UAAUm/tB,SAAW,SAAUl6tB,GAClC,IAAIP,EAAQC,KACZA,KAAKM,OAAO6hE,KAAO,IAAI++kB,IACnB3c,cAAe,EACf7F,WAAY,EACZn7jB,WAAYvjE,KAAKq6tB,gBAAgB,SACjCt8pB,QAAS/9D,KAAKs6tB,sBACdvktB,OAAQzV,EAAOyV,OAAU/V,KAAK85tB,OAAOjG,aAAap3tB,OAASuD,KAAKg6tB,aAAah6pB,UACzE,OAAS1/D,EAAOyV,OACpBC,MAAOhW,KAAKu6tB,qBACZvstB,OAAQ1N,EAAO0N,OACfkF,UAAW5S,EAAO4S,UAClB4woB,iBAAkBxjpB,EAAOwjpB,iBACzBC,eAAgBzjpB,EAAOyjpB,eACvBl9B,cAAe7mnB,KAAKg6tB,aAAanzG,cACjCwW,cAAer9nB,KAAKg6tB,aAAa38F,cACjCtW,gBAAiB/mnB,KAAKg6tB,aAAajzG,gBACnCk4B,eAAgBj/oB,KAAKg6tB,aAAa/6E,eAClCqF,iBAAkBtkpB,KAAKg6tB,aAAa11E,iBACpCzO,iBAAkB71oB,KAAKg6tB,aAAankF,iBACpCrX,kBAAmBx+nB,KAAKg6tB,aAAax7F,kBACrCwiB,UAAWhhpB,KAAKg6tB,aAAah5E,UAC7BhhlB,UAAWhgE,KAAKg6tB,aAAah6pB,UAC7BotT,UAAWptX,KAAKg6tB,aAAa5sW,UAC7BqtW,iBAAkBz6tB,KAAKg6tB,aAAaS,iBAAmBz6tB,KAAKg6tB,aAAaS,iBAAiBn/tB,KAAK0E,KAAKM,aAAUnF,EAC9Gy3b,gBAAiB5yb,KAAKg6tB,aAAapnS,gBAAkB5yb,KAAKg6tB,aAAapnS,gBAAgBt3b,KAAK0E,KAAKM,aAAUnF,EAC3Gu/tB,WAAY16tB,KAAKg6tB,aAAaU,WAAa16tB,KAAKg6tB,aAAaU,WAAWp/tB,KAAK0E,KAAKM,aAAUnF,EAC5Fw/tB,YAAa36tB,KAAKg6tB,aAAaW,YAAc36tB,KAAKg6tB,aAAaW,YAAYr/tB,KAAK0E,KAAKM,aAAUnF,EAC/FwunB,cAAe3pnB,KAAKg6tB,aAAarwG,cAAgB3pnB,KAAKg6tB,aAAarwG,cAAcrunB,KAAK0E,KAAKM,aAAUnF,EACrG0tnB,aAAc7onB,KAAKg6tB,aAAanxG,aAAe7onB,KAAKg6tB,aAAanxG,aAAavtnB,KAAK0E,KAAKM,aAAUnF,EAClG2tnB,YAAa9onB,KAAKg6tB,aAAalxG,YAAc9onB,KAAKg6tB,aAAalxG,YAAYxtnB,KAAK0E,KAAKM,aAAUnF,EAC/F4tnB,eAAgB/onB,KAAKg6tB,aAAajxG,eAAiB/onB,KAAKg6tB,aAAajxG,eAAeztnB,KAAK0E,KAAKM,aAAUnF,EACxG6tnB,cAAehpnB,KAAKg6tB,aAAahxG,cAAgBhpnB,KAAKg6tB,aAAahxG,cAAc1tnB,KAAK0E,KAAKM,aAAUnF,EACrG8tnB,cAAejpnB,KAAKg6tB,aAAa/wG,cAAgBjpnB,KAAKg6tB,aAAa/wG,cAAc3tnB,KAAK0E,KAAKM,aAAUnF,EACrG+tnB,aAAclpnB,KAAKg6tB,aAAa9wG,aAAelpnB,KAAKg6tB,aAAa9wG,aAAa5tnB,KAAK0E,KAAKM,aAAUnF,EAClGgunB,gBAAiBnpnB,KAAKg6tB,aAAa7wG,gBAAkBnpnB,KAAKg6tB,aAAa7wG,gBAAgB7tnB,KAAK0E,KAAKM,aAAUnF,EAC3GiunB,eAAgBppnB,KAAKg6tB,aAAa5wG,eAAiBppnB,KAAKg6tB,aAAa5wG,eAAe9tnB,KAAK0E,KAAKM,aAAUnF,EACxGutqB,YAAa1oqB,KAAKg6tB,aAAatxD,YAAc1oqB,KAAKg6tB,aAAatxD,YAAYptqB,KAAK0E,KAAKM,aAAUnF,EAC/FkunB,gBAAiBrpnB,KAAKg6tB,aAAa3wG,gBAAkBrpnB,KAAKg6tB,aAAa3wG,gBAAgB/tnB,KAAK0E,WAAQ7E,EACpGmunB,WAAYtpnB,KAAKg6tB,aAAa1wG,WAAatpnB,KAAKg6tB,aAAa1wG,WAAWhunB,KAAK0E,WAAQ7E,EACrFounB,WAAYvpnB,KAAKg6tB,aAAazwG,WAAavpnB,KAAKg6tB,aAAazwG,WAAWjunB,KAAK0E,WAAQ7E,EACrF20W,SAAU9vW,KAAK46tB,cAAct/tB,KAAK0E,MAClC66tB,WAAY76tB,KAAK86tB,aAAax/tB,KAAK0E,MACnCwonB,cAAe,SAAUvonB,GACrBK,EAAOyppB,aAAagxE,kBAAkB96tB,IAE1C2onB,UAAW,SAAU3onB,GACbK,EAAOU,QAAQ2B,cAAc,kBACzBrC,EAAO4S,UACP5S,EAAOU,QAAQ2B,cAAc,gBAAgB+B,MAAMs2tB,YAAc,OAGjE16tB,EAAOU,QAAQ2B,cAAc,gBAAgB+B,MAAMu2tB,WAAa,QAGxEl7tB,EAAMO,OAAO6hE,KAAKggkB,aAAa0K,kBAC/BvsoB,EAAOyN,OAAOovnB,QAElB1U,eAAgB,SAAUxonB,GACtBK,EAAOyppB,aAAamxE,qBAAqBj7tB,IAE7C8snB,yBAA0B,SAAU9snB,GAChCK,EAAOyppB,aAAaoxE,iBAAiBl7tB,IAEzCgtnB,uBAAwB,SAAUhtnB,GAC9BK,EAAOyppB,aAAaqxE,eAAen7tB,IAEvCo7tB,mBAAoB,SAAUp7tB,GAC1BK,EAAOyppB,aAAauxE,cAAcr7tB,IAEtCs7tB,iBAAkB,SAAUt7tB,GACxBK,EAAOyppB,aAAayxE,YAAYv7tB,OAI5C6+a,EAAOzjb,UAAU8+tB,kBAAoB,SAAU75tB,GAC3C4gpB,GAAK90iB,OAAO4nlB,IACR1zrB,EAAOwjpB,kBACP5C,GAAK90iB,OAAO67kB,IAEZ3nrB,EAAOyjpB,gBACP7C,GAAK90iB,OAAO8/kB,IAEZlsrB,KAAKg6tB,aAAa/6E,gBAClBiC,GAAK90iB,OAAOggQ,IAEZpsW,KAAKg6tB,aAAajzG,iBAClBm6B,GAAK90iB,OAAO29jB,IAEZ/pqB,KAAKg6tB,aAAanzG,eAClBq6B,GAAK90iB,OAAOs7jB,IAEZ1nqB,KAAKg6tB,aAAa11E,kBAClBpD,GAAK90iB,OAAO0uM,KAIpBgkI,EAAOzjb,UAAUoguB,mBAAqB,WAClCz7tB,KAAKm6tB,kBAAkBn6tB,KAAKM,QAC5BN,KAAKM,OAAO6hE,KAAK0kjB,cAAgB7mnB,KAAKg6tB,aAAanzG,cACnD7mnB,KAAKM,OAAO6hE,KAAKk7jB,cAAgBr9nB,KAAKg6tB,aAAa38F,cACnDr9nB,KAAKM,OAAO6hE,KAAK4kjB,gBAAkB/mnB,KAAKg6tB,aAAajzG,gBACrD/mnB,KAAKM,OAAO6hE,KAAK88kB,eAAiBj/oB,KAAKg6tB,aAAa/6E,eACpDj/oB,KAAKM,OAAO6hE,KAAKmilB,iBAAmBtkpB,KAAKg6tB,aAAa11E,iBACtDtkpB,KAAKM,OAAO6hE,KAAK0zkB,iBAAmB71oB,KAAKg6tB,aAAankF,iBACtD71oB,KAAKM,OAAO6hE,KAAKq8jB,kBAAoBx+nB,KAAKg6tB,aAAax7F,kBACvDx+nB,KAAKM,OAAO6hE,KAAK6+kB,UAAYhhpB,KAAKg6tB,aAAah5E,UAC/ChhpB,KAAKM,OAAO6hE,KAAKnC,UAAYhgE,KAAKg6tB,aAAah6pB,UAC/ChgE,KAAKM,OAAO6hE,KAAKirT,UAAYptX,KAAKg6tB,aAAa5sW,WAEnD0xD,EAAOzjb,UAAUqguB,oBAAsB,SAAUz4pB,EAAMgnnB,EAAO0xC,EAAMC,GAChE,IAAIC,EAAQ77tB,KAAKM,OAAOw7tB,UAAUv4pB,WAAWsrpB,kBACzChttB,EAAM7B,KAAKM,OAAOw7tB,UAAUv4pB,WAAWxwC,OAAOt2B,OAAS,EAAIuD,KAAKM,OAAOw7tB,UAAUv4pB,WAAWxF,QAAQthE,OAChD,IAApDuD,KAAKM,OAAOw7tB,UAAUv4pB,WAAWxF,QAAQthE,OAAe,EAAIuD,KAAKM,OAAOw7tB,UAAUv4pB,WAAWxF,QAAQthE,OAAS,EAOlH,YANctB,IAAV0guB,GAAuBD,IAASC,EAAMl0Z,aAAeg0Z,IAAS95tB,IAC9DoorB,EAAMtnrB,cAAc,oBAAoBmB,UAAUM,IAAwB,eAApBy3tB,EAAMjkiB,UAA6B,eAAiB,eAC1Gqyf,EAAMtnrB,cAAc,oBAAoBmB,UAAUM,IAAwB,eAApBy3tB,EAAMjkiB,UACxD,oBAAsB,oBAC1B53L,KAAKM,OAAOw7tB,UAAUv4pB,WAAWsrpB,kBAAkB1wpB,WAAa8E,EAAKsspB,UAAUkF,WAE5ExqC,GAEXnrQ,EAAOzjb,UAAUy/tB,aAAe,SAAU76tB,GACtCD,KAAKM,OAAO6hE,KAAKiplB,aAAavmB,YAC9B7koB,KAAK46tB,cAAc36tB,IAEvB6+a,EAAOzjb,UAAUu/tB,cAAgB,SAAU36tB,GACnCD,KAAKM,OAAOy7tB,iBAAmB/7tB,KAAKM,OAAO07tB,mBAAqBh8tB,KAAKM,OAAOU,QAAQ2B,cAAc,IAAMs5tB,MACxGj8tB,KAAKM,OAAO07tB,kBAAkBn3F,YAC1B7koB,KAAKM,OAAOU,QAAQ2B,cAAc,gBAAgBiC,YAAc,MAChE3E,EAAK44B,QAAS,EACd74B,KAAKM,OAAOU,QAAQ2B,cAAc,mBAAmBA,cAAc,OAAO+B,MAAMsR,MAAQ,QACxFhW,KAAKM,OAAOU,QAAQ2B,cAAc,oBAAoBA,cAAc,OAAO+B,MAAMsR,MAAQ,SAE7FhW,KAAKM,OAAOU,QAAQ2B,cAAc,mBAAmB+B,MAAMsR,MACvDhW,KAAKM,OAAOU,QAAQ2B,cAAc,gBAAgBiC,YAAc,KACpE5E,KAAKM,OAAOU,QAAQ2B,cAAc,gBAAgB+B,MAAMqR,OACpD/V,KAAKM,OAAOU,QAAQ2B,cAAc,oBAAoB+uC,aAAe,MAE7E1xC,KAAKM,OAAOkmB,QAAwB,aAAhBvmB,EAAKY,EAAE6F,MAAuC,YAAhBzG,EAAKY,EAAE6F,KF7KzC,aAFF,WE+KqGzG,IAEvH6+a,EAAOzjb,UAAU0/tB,kBAAoB,SAAU96tB,GAC3C,IAAIgqrB,EAAQhqrB,EAAKgjE,KACjB,GAAIgnnB,EAAO,CACPA,EAAMzmrB,aAAa,SAAU8zB,OAAO2ypB,EAAMp3qB,aAAa,UAAY7S,KAAK85tB,OAAO90mB,cAAcvoH,QAAQyQ,YACrG,IAAI+1D,EAAOhjE,EAAKzD,KAAK,GACrB,GAA4C,MAAxCytrB,EAAMp3qB,aAAa,iBAA0B,CAC7Co3qB,EAAMhvnB,UAAY,GAClB,IAAIk3F,EAAQlvF,EAAKkvF,MAAQlvF,EAAKkvF,MAAQ,EACtC,GACQA,EAAQ,GACR83hB,EAAMtorB,YAAYR,EAAc,QAC5BkC,UAAqB,IAAV8uJ,EAAc,GDd/B,gBCiBFA,UACKA,GAAS,GAClBA,EAAQlvF,EAAKkvF,MAAQlvF,EAAKkvF,MAAQ,GAC7BlvF,EAAKmyH,UAAYjjC,EAAQ,GAC1B83hB,EAAMtorB,YAAYR,EAAc,QAC5BkC,UDpBF,gBCuBN,IAAI+8D,EAAa+xF,GAAS,GAAKnyJ,KAAKM,OAAOijE,WAAWg1N,KAAK97R,OAAS,EAChEuD,KAAKM,OAAOijE,WAAWg1N,KAAKpmI,GAAO16H,KAAO,GAC9CwypB,EAAMzmrB,aAAa,YAAa48D,GAChC,IAAI87pB,EAAgBj5pB,EAAKq/N,cACrBr/N,EAAKv8D,OACa,cAAdu8D,EAAKv8D,MACLujrB,EAAMnmrB,UAAUM,IAAI,UACpB83tB,EAAgBl8tB,KAAKM,OAAOo4E,UAAU3E,YAAY,eAGlDk2mB,EAAMnmrB,UAAUM,IAAI,WAG5B6lrB,EAAMnmrB,UAAUM,IDhER,iBCiEc,IAAlB6+D,EAAKmyH,UACL60f,EAAMtorB,YAAYR,EAAc,OAC5BkC,YAA+B,IAAnB4/D,EAAKuupB,UAAqB2K,GD7E1C,YC6EuE,IAAMC,GACzE34tB,OACIy8B,OAA4B,IAAnB+iC,EAAKuupB,UAAqBxxtB,KAAKM,OAAOo4E,UAAU3E,YAAY,YACjE/zE,KAAKM,OAAOo4E,UAAU3E,YAAY,cAIlDk2mB,EAAMtorB,YAAYR,EAAc,QAC5BkC,UD3DG,cC4DHrB,UAAWk6tB,SAGd,CACD,IAAIjhqB,EAA2C,MAA/BgvnB,EAAMhvnB,UAAU/tD,WAAqB,GAAK+8qB,EAAMhvnB,UAChEgvnB,EAAMhvnB,UAAY,GAClBgvnB,EAAMnmrB,UAAUM,IDhFL,oBCiFX6+D,EAAOhjE,EAAKzD,KAAK86B,OAAO2ypB,EAAMp3qB,aAAa,oBAClCg+U,OACLo5V,EAAMnmrB,UAAUM,IDvEf,aCyEL6lrB,EAAMtorB,YAAYR,EAAc,QAC5BkC,UDxEG,cCyEHrB,UAAWi5D,MAIvBj7D,KAAKM,OAAOkmB,QFrPO,gBEqPuBvmB,IAE9C6+a,EAAOzjb,UAAU6/tB,qBAAuB,SAAUj7tB,GAC9C,GAAIA,EAAKgjE,KAAKpG,QAAU58D,EAAKgjE,KAAKpG,OAAOW,iBAAkB,CACvD,IAAIyF,EAAOhjE,EAAKgjE,KAAKpG,OAAOW,iBAAiByF,KACzCgnnB,EAAQhqrB,EAAKM,KACjB,GAAI0iE,EAAM,CACN,IAAIkvF,EAAQlvF,EAAKkvF,MAAQlvF,EAAKkvF,MAAQ,GAClB,IAAhBlvF,EAAKkvF,OAAiBlvF,EAAKg0N,SAAWh0N,EAAKw9N,WAAazgS,KAAK85tB,OAAO90mB,cAAcvoH,OAAS,EAGtFwmE,EAAKg0N,QAAU,IACpBh3R,EAAKM,KAAKiD,aAAa,UAAWy/D,EAAKg0N,QAAQ/pR,YAC/CjN,EAAKM,KAAKiD,aAAa,eAAgBy/D,EAAKg0N,QAAQ/pR,YAC/C+1D,EAAKw9N,SAAWx9N,EAAKg0N,UAAaj3R,KAAK85tB,OAAO90mB,cAAcvoH,SAC7DwD,EAAKM,KAAKmE,MAAM2iJ,kBAAoB,QANxCpnJ,EAAKM,KAAKmE,MAAM4xC,QAAU,OAS9Br2C,EAAKM,KAAKiD,aAAa,gBAAiBy/D,EAAK+uc,SAAS9kgB,YACtDjN,EAAKM,KAAKiD,aAAa,QAASy/D,EAAKw9N,SAASvzR,YAC9C,IAAIkzD,OAAY,EAOhB,KANMpgE,KAAKM,OAAOijE,WAAWxwC,QAAU/yB,KAAKM,OAAOijE,WAAWxwC,OAAOt2B,OAAS,GACzEwmE,EAAKw9N,WAAazgS,KAAK85tB,OAAO90mB,cAAcvoH,OAAS,IAAOuD,KAAKM,OAAOijE,WAAWxF,SACpF/9D,KAAKM,OAAOijE,WAAWxF,QAAQthE,OAAS,IACxC2jE,EAAY+xF,GAAS,EAAInyJ,KAAKM,OAAOijE,WAAWxF,QAAQo0F,GAAO16H,KAAO,GACtEwypB,EAAMzmrB,aAAa,YAAa48D,IAEhC6C,EAAKv8D,KAAM,CACXujrB,EAAMnmrB,UAAUM,IAAkB,cAAd6+D,EAAKv8D,KAAuB,SAAW,UAC3D,IAAIw1tB,EAA8B,cAAdj5pB,EAAKv8D,KAAuB1G,KAAKM,OAAOo4E,UAAU3E,YAAY,cAC9E9Q,EAAKq/N,cAAcplS,MAAM,SAAS,GAAK8C,KAAKM,OAAOo4E,UAAU3E,YAAY,SAChC,OAAzCk2mB,EAAMtnrB,cAAc,iBACpBsnrB,EAAMtnrB,cAAc,iBAAiBs4D,UAAYihqB,EAGjDjyC,EAAMtnrB,cAAc,2BAA2Bs4D,UAAYihqB,EAInE,GADAjyC,EAAMnmrB,UAAUM,IDrIL,oBCsIW,IAAlB6+D,EAAKmyH,SAAmB,CACxB,IAAIiniB,EAASpyC,EAAMtnrB,cAAc,oBAC7B05tB,IACAA,EAAO33tB,MAAMqR,OAAS,OACtBsmtB,EAAO33tB,MAAMyoB,WAAa,UAE9B,IAAIjsB,EAAMC,EAAc,OACpBkC,YAA+B,IAAnB4/D,EAAKuupB,UAAqB2K,GDrJ1C,YCqJuE,IAAMC,GACzE34tB,OACIy8B,OAA4B,IAAnB+iC,EAAKuupB,UAAqBxxtB,KAAKM,OAAOo4E,UAAU3E,YAAY,YACjE/zE,KAAKM,OAAOo4E,UAAU3E,YAAY,aAG9Ck2mB,EAAM7vqB,SAAS,GAAGtW,UAAUM,IDjIzB,eCkICvI,OAAOstF,UAAUF,UAAU1qF,QAAQ,SAAW,GAAK1C,OAAOstF,UAAUF,UAAU1qF,QAAQ,YAAc,EACpG0rrB,EAAM7vqB,SAAS,GAAG1V,MAAM4xC,QAAU,QAGlC2zoB,EAAM7vqB,SAAS,GAAG1V,MAAM4xC,QAAU,QAEtC2zoB,EAAM/krB,aAAahE,EAAK+orB,EAAM7vqB,SAAS,IAE3C6vqB,EAAQjqrB,KAAK07tB,oBAAoBz4pB,EAAMgnnB,EAAOhnnB,EAAKw9N,SAAUx9N,EAAK+uc,WAG1EhygB,KAAKM,OAAOkmB,QFnTQ,iBEmTuBvmB,IAE/C6+a,EAAOzjb,UAAU++tB,eAAiB,WAG9B,IAAK,IADD5F,EADArB,EAAcnztB,KAAKM,OAAO6ytB,YAErBwI,EAAO,EAAGA,EAAOxI,EAAY12tB,OAAQk/tB,IAC1C,GAAIxI,EAAYwI,IAASxI,EAAYwI,GAAM,IAAoC,QAA9BxI,EAAYwI,GAAM,GAAGxltB,KAAgB,CAClFq+sB,EAASmH,EACT,MAGR,OAAOnH,GAEX11S,EAAOzjb,UAAUg/tB,gBAAkB,SAAU3ztB,GACzC,IAAI41tB,KACJ,GAAIt8tB,KAAKM,OAAOijE,WAAWxwC,OAAOt2B,OAAS,EACvC,GAAKuD,KAAKM,OAAOijE,WAAWsrpB,mBAAqB7utB,KAAKM,OAAOijE,WAAWsrpB,kBAAkBj3hB,WAC/B,SAAvD53L,KAAKM,OAAOijE,WAAWsrpB,kBAAkBj3hB,YAA0B53L,KAAK85tB,OAAO3F,iBAK/E,IAAK,IAJDC,EAAS,EACTjB,EAAcnztB,KAAKM,OAAO6ytB,YAC1B51tB,EAAiB,UAATmJ,EAAmB1G,KAAKmmkB,YAAc,EAC9CtnjB,EAAe,UAATnY,EAAmBystB,EAAY12tB,OAASuD,KAAKmmkB,YAC9Cw1J,EAAOp+tB,EAAOo+tB,EAAO98sB,EAAK88sB,IAC/B,GAAIxI,EAAYwI,GAAO,CAEnBW,EADAlI,EAAkB,WAAT1ttB,EAAoBi1tB,EAAOvH,MAEpC,IAAK,IAAIwH,EAAO,EAAGA,EAAOzI,EAAYwI,GAAMl/tB,OAAQm/tB,IAC5CzI,EAAYwI,GAAMC,KAClBU,EAAYlI,GAAQwH,GAAQzI,EAAYwI,GAAMC,IAGtDxH,UAKRkI,EAAuB,UAAT51tB,EAAmB1G,KAAK85tB,OAAOjG,aAAe7ztB,KAAK85tB,OAAO90mB,mBAI5Es3mB,EAAct8tB,KAAKu8tB,iBAEvB,OAAOD,GAEXx9S,EAAOzjb,UAAUkhuB,eAAiB,WAK9B,QAHQp/nB,GAAKmlM,cAAetiS,KAAKM,OAAOo4E,UAAU3E,YAAY,eACtDqpB,GAAKklM,cAAetiS,KAAKM,OAAOo4E,UAAU3E,YAAY,iBAIlE+qW,EAAOzjb,UAAUmhuB,kBAAoB,SAAUtgc,GAC3C,IAAIugc,EAAWz6qB,MAAMhiD,KAAKM,OAAO0V,OAAUhW,KAAKM,OAAO0V,MAAM9I,WAAW3O,QAAQ,MAAQ,EAClFid,WAAWxb,KAAKM,OAAO0V,MAAM9I,YAAc,IAAOlN,KAAKM,OAAOU,QAAQ4D,YAAe5E,KAAKM,OAAOU,QAAQ4D,YAC3G0yB,OAAOt3B,KAAKM,OAAO0V,OAGvB,OAFgBkmR,EAAWl8R,KAAKg6tB,aAAa/gc,YAAc,GAAMwjc,EAC5DA,EAAWvgc,EAAYl8R,KAAKg6tB,aAAa/gc,aAGlD6lJ,EAAOzjb,UAAUk/tB,mBAAqB,WAClC,IAAImC,EAAe18tB,KAAK85tB,OAAO3G,YAAY,GAAG12tB,OAASuD,KAAKg6tB,aAAa/gc,YAAc,GACnFwjc,EAAWz8tB,KAAKM,OAAO0V,MAI3B,MAH0B,SAAtBhW,KAAKM,OAAO0V,OAAoBhW,KAAKM,OAAOU,QAAQ4D,YAAc83tB,IAClED,EAAWz8tB,KAAKM,OAAOU,QAAQ4D,aAE5B63tB,GAEX39S,EAAOzjb,UAAUi/tB,oBAAsB,WACnC,IAAIqC,KACJ,GAAI38tB,KAAKM,OAAOijE,WAAWxwC,OAAOt2B,OAAS,EAAG,CAC1C,IAAImguB,EAAY58tB,KAAK85tB,OAAO90mB,cAAcvoH,OACtCoguB,KACAC,KACApvV,EAAW1tY,KAAKw8tB,kBAAkBx8tB,KAAK85tB,OAAO3G,YAAY,GAAG12tB,QACjE,EAAG,CACC,IAAIkwpB,KACAowE,EAAY,EAChBH,IACA,IAAII,EAAWh9tB,KAAK85tB,OAAO90mB,cAAc43mB,GACzC,GAAII,EACA,IAAK,IAAIpB,EAAO,EAAGA,EAAOt9tB,OAAOhB,KAAK0/tB,GAAUvguB,QAAUuguB,EAAS,GAAK,EAAI,GAAIpB,IAAQ,CACpF,IAAIlmc,EAAWsnc,EAASpB,IAASoB,EAASpB,GAAMlmc,QAAWsnc,EAASpB,GAAMlmc,QAAU,EACrEsnc,EAASpB,IAASoB,EAASpB,GAAM3kc,SAAW+lc,EAASpB,GAAM3kc,QAC1E,GAAI2lc,IAAc58tB,KAAK85tB,OAAO90mB,cAAcvoH,OAAS,EACjDkwpB,EAAYowE,IACRhxsB,MAAQ6vsB,EAAO,iBACfz9pB,WAAY6+pB,EAASpB,GAAQoB,EAASpB,GAAMt5b,cAAgB,GAC5D9kO,kBAAoByF,KAAQ+5pB,EAASpB,IACrC5ltB,MAAO03X,EACPl6U,SAAU,GACVx3B,OAAiB,IAAT4/rB,EAAa,GAAK57tB,KAAKi6tB,YAAY2B,EAAO,GAAK57tB,KAAKM,OAAOijE,WAAWxwC,OAAOt2B,cAGxF,GAAIoguB,EAAYjB,GAAO,CAIxB,IAHA,IAAIqB,EAAUvnc,EACVwnc,KACAjqb,EAAW2ob,EACRqB,EAAU,GACTtwE,EAAYowE,GACZG,EAAW14tB,KAAKm4tB,EAAeG,EAAS7pb,MAGxC05W,EAAYowE,IACR5+pB,WAAY6+pB,EAASpB,GAAQoB,EAASpB,GAAMt5b,cAAgB,GAC5D9kO,kBAAoByF,KAAQ+5pB,EAASpB,IACrC5ltB,MAAO03X,EACPl6U,SAAU,IAEd0pqB,GAAcP,EAAeG,EAAS7pb,MAE1Cgqb,GAAoBJ,EAAY5pb,GAChCA,GAAsB4pb,EAAY5pb,GAEtC05W,EAAYowE,GAAWh/pB,QAAUm/pB,EAEjCvwE,EAAYowE,KACZpwE,EAAYowE,GAAWx2F,SAAWvmoB,KAAKg6tB,aAAazzF,UAExDs2F,EAAYjB,GAAQlmc,EACpBonc,EAASlB,GAAQmB,EACjBA,IACAnB,EAAOA,EAAOlmc,EAAU,EAGhCinc,EAAiBhwE,EAAYlwpB,OAAS,EAAIkwpB,EAAcgwE,QACnDC,EAAY,GACrBD,EAAe,IACX5wsB,wBACA/V,MAAQhW,KAAKM,OAAOy7tB,iBAAmB/7tB,KAAKM,OAAO07tB,kBAAqBtuV,EAAW,IAAM,IAAMA,EAAWA,EAAW,IAAM,IAAMA,EACjIl6U,SAAU,GACV2K,WAAY,GACZ4ojB,iBAAiB,QAIrB41G,EAAiB38tB,KAAKm9tB,oBAE1B,OAAOR,GAEX79S,EAAOzjb,UAAU8huB,kBAAoB,WACjC,IAAIp/pB,KACA2vU,EAAW1tY,KAAKw8tB,kBAAkB,GAGtC,OAFAz+pB,EAAQv5D,MAAOunB,MAAO,kBAAmBoyC,WAAY,GAAI3K,SAAU,GAAIx9C,MAAO03X,IAC9E3vU,EAAQv5D,MAAOunB,MAAO,kBAAmBoyC,WAAYn+D,KAAKM,OAAOo4E,UAAU3E,YAAY,cAAevgB,SAAU,GAAIx9C,MAAO03X,IACpH3vU,GAGX+gX,EAAOzjb,UAAU6+tB,cAAgB,WAE7B,IAAK,IADDkD,KACKC,EAAO,EAAGA,EAAOr9tB,KAAKM,OAAOijE,WAAWxwC,OAAOt2B,OAAQ4guB,IAAQ,CACpE,IAAItxsB,EAAQ/rB,KAAKM,OAAOijE,WAAWxwC,OAAOsqsB,GAC1C,GAAIr9tB,KAAKM,OAAOijE,WAAWirpB,eAAe/xtB,OAAS,EAAG,CAElD,IAAK,IADDu/B,EAAS,GACJshsB,EAAO,EAAGA,EAAOt9tB,KAAKM,OAAOijE,WAAWirpB,eAAe/xtB,OAAQ6guB,IAAQ,CAC5E,IAAI9O,EAAiBxutB,KAAKM,OAAOijE,WAAWirpB,eAAe8O,GAC3D,GAAIvxsB,EAAM0L,OAAS+2rB,EAAe/2rB,KAAM,CACpCuE,EAASwyrB,EAAexyrB,OACxB,OAMRohsB,EAAY54tB,KAAKw3B,QAGjBohsB,EAAY54tB,KAAK,KAGzB,OAAO44tB,GAEXt+S,EAAOzjb,UAAU8/tB,iBAAmB,SAAUl7tB,GAC1CA,EAAOD,KAAKu9tB,kBAAkBt9tB,GAC9BD,KAAKM,OAAOkmB,QAAQklqB,GAAiCzrrB,IAEzD6+a,EAAOzjb,UAAU+/tB,eAAiB,SAAUn7tB,GACxCA,EAAOD,KAAKu9tB,kBAAkBt9tB,GAC9BD,KAAKM,OAAOkmB,QAAQ+mqB,GAA+BttrB,IAEvD6+a,EAAOzjb,UAAUiguB,cAAgB,SAAUr7tB,GACb,oBAAtBA,EAAK48D,OAAO9wC,OACZ/rB,KAAK65tB,OAAS,EACd55tB,EAAKyE,OAAU8qD,OAAQ,OAAQ6pjB,OAA6B,EAArBp5mB,EAAKzD,KAAK,GAAG21J,SAGpDnyJ,KAAK65tB,SACL55tB,EAAKjD,MAAQiD,EAAKzD,KAAKwD,KAAK65tB,QAAQ78tB,OAASiD,EAAKzD,KAAKwD,KAAK65tB,QAAQv3b,eAExEriS,EAAOD,KAAKw9tB,mBAAmBv9tB,GAC/BD,KAAKM,OAAOkmB,QFxfY,qBEwfuBvmB,IAGnD6+a,EAAOzjb,UAAUmguB,YAAc,SAAUv7tB,GAEX,qBAD1BA,EAAOD,KAAKw9tB,mBAAmBv9tB,IACtB48D,OAAO9wC,QACZ9rB,EAAKyE,OAAU07O,gBAAsC,GAArBngP,EAAKzD,KAAK,GAAG21J,QAEjDnyJ,KAAKM,OAAOkmB,QF9fU,mBE8fuBvmB,IAEjD6+a,EAAOzjb,UAAUkiuB,kBAAoB,SAAUt9tB,GAC3C,IAAIg3R,EAAU,EACd,GAAIh3R,EAAKsrrB,SAAS1unB,OAAOW,iBAAkB,CACvC,IAAIyF,EAAOhjE,EAAKsrrB,SAAS1unB,OAAOW,iBAAiByF,KACjDg0N,EAAUh0N,EAAKg0N,QAAUh0N,EAAKg0N,QAAU,OAGxCA,EAAU34R,OAAOhB,KAAK0C,KAAK85tB,OAAO90mB,eAAevoH,OAKrD,OAHIwD,EAAKgjE,KAAKg0N,SAAWh3R,EAAKgjE,KAAKg0N,UAAYA,IAC3Ch3R,EAAKgjE,KAAKg0N,QAAUA,GAEjBh3R,GAEX6+a,EAAOzjb,UAAUmiuB,mBAAqB,SAAUv9tB,GAI5C,MAHmB,MAAfA,EAAKjD,QACLiD,EAAKjD,MAAQ,IAEViD,GAEJ6+a,KC3iBPx0V,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAM5D6gsB,GAA8B,SAAUtyoB,GAExC,SAASsyoB,IACL,OAAkB,OAAXtyoB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAc/D,OAhBAsqF,GAAUmzoB,EAActyoB,GAIxBN,IACI3jF,KACDu2tB,EAAapiuB,UAAW,YAAQ,GACnCwvF,IACI3jF,KACDu2tB,EAAapiuB,UAAW,eAAW,GACtCwvF,IACI3jF,EAAS,QACVu2tB,EAAapiuB,UAAW,YAAQ,GACnCwvF,IACI3jF,KACDu2tB,EAAapiuB,UAAW,YAAQ,GAC5BoiuB,GACTz+pB,IAaE45jB,IAXuC,SAAUztiB,GAEjD,SAASuyoB,IACL,OAAkB,OAAXvyoB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAF/DsqF,GAAUozoB,EAAuBvyoB,IAKnCsyoB,IAK0B,SAAUtyoB,GAElC,SAASytiB,IACL,OAAkB,OAAXztiB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbAsqF,GAAUsuiB,EAAQztiB,GAIlBN,IACI3jF,KACD0xnB,EAAOv9nB,UAAW,YAAQ,GAC7BwvF,IACI3jF,KACD0xnB,EAAOv9nB,UAAW,YAAQ,GAC7BwvF,IACI3jF,KACD0xnB,EAAOv9nB,UAAW,aAAS,GACvBu9nB,GACT55jB,KAKEunV,GAAsB,SAAUp7T,GAEhC,SAASo7T,IACL,OAAkB,OAAXp7T,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVAsqF,GAAUi8T,EAAMp7T,GAIhBN,IACI3jF,KACDq/Y,EAAKlrZ,UAAW,YAAQ,GAC3BwvF,IACI3jF,EAAS,cACVq/Y,EAAKlrZ,UAAW,aAAS,GACrBkrZ,GACTvnV,IAiDE2+pB,IA5CgC,SAAUxyoB,GAE1C,SAASyyoB,IACL,OAAkB,OAAXzyoB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAF/DsqF,GAAUszoB,EAAgBzyoB,GAI1BN,IACI3jF,KACD02tB,EAAeviuB,UAAW,YAAQ,GACrCwvF,IACI3jF,KACD02tB,EAAeviuB,UAAW,6BAAyB,GACtDwvF,IACI3jF,KACD02tB,EAAeviuB,UAAW,6BAAyB,GACtDwvF,IACI3jF,KACD02tB,EAAeviuB,UAAW,gCAA4B,GACzDwvF,IACI3jF,KACD02tB,EAAeviuB,UAAW,gCAA4B,GACzDwvF,IACI3jF,KACD02tB,EAAeviuB,UAAW,mBAAe,GAC5CwvF,IACI3jF,KACD02tB,EAAeviuB,UAAW,gBAAY,GACzCwvF,IACI3jF,KACD02tB,EAAeviuB,UAAW,YAAQ,GACrCwvF,IACI3jF,KACD02tB,EAAeviuB,UAAW,gBAAY,GACzCwvF,IACI3jF,KACD02tB,EAAeviuB,UAAW,4BAAwB,GACrDwvF,IACI3jF,KACD02tB,EAAeviuB,UAAW,cAAU,IAEzC2jE,IAK2C,SAAUmsB,GAEnD,SAASwyoB,IACL,OAAkB,OAAXxyoB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVAsqF,GAAUqzoB,EAAyBxyoB,GAInCN,IACI3jF,KACDy2tB,EAAwBtiuB,UAAW,YAAQ,GAC9CwvF,IACI3jF,KACDy2tB,EAAwBtiuB,UAAW,eAAW,GAC1CsiuB,GACT3+pB,KAME43V,GAA8B,SAAUzrU,GAExC,SAASyrU,IACL,OAAkB,OAAXzrU,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAc/D,OAhBAsqF,GAAUssU,EAAczrU,GAIxBN,IACI3jF,KACD0vZ,EAAav7Z,UAAW,kBAAc,GACzCwvF,IACI3jF,KACD0vZ,EAAav7Z,UAAW,eAAW,GACtCwvF,IACI3jF,KACD0vZ,EAAav7Z,UAAW,yBAAqB,GAChDwvF,IACI3jF,KACD0vZ,EAAav7Z,UAAW,sBAAkB,GACtCu7Z,GACT53V,IAKE6+pB,GAA8B,SAAU1yoB,GAExC,SAAS0yoB,IACL,OAAkB,OAAX1yoB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVAsqF,GAAUuzoB,EAAc1yoB,GAIxBN,IACI3jF,KACD22tB,EAAaxiuB,UAAW,YAAQ,GACnCwvF,IACI3jF,KACD22tB,EAAaxiuB,UAAW,aAAS,GAC7BwiuB,GACT7+pB,IAKE8+pB,GAAmC,SAAU3yoB,GAE7C,SAAS2yoB,IACL,OAAkB,OAAX3yoB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAc/D,OAhBAsqF,GAAUwzoB,EAAmB3yoB,GAI7BN,IACI3jF,KACD42tB,EAAkBziuB,UAAW,kBAAc,GAC9CwvF,IACI3jF,EAAS,MACV42tB,EAAkBziuB,UAAW,uBAAmB,GACnDwvF,IACI3jF,EAAS,SACV42tB,EAAkBziuB,UAAW,iBAAa,GAC7CwvF,IACI3jF,OAAS/L,IACV2iuB,EAAkBziuB,UAAW,mBAAe,GACxCyiuB,GACT9+pB,IAKEq4V,GAA4B,SAAUlsU,GAEtC,SAASksU,IACL,OAAkB,OAAXlsU,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KA4C/D,OA9CAsqF,GAAU+sU,EAAYlsU,GAItBN,IACI3jF,KACDmwZ,EAAWh8Z,UAAW,YAAQ,GACjCwvF,IACIxiF,KAAeo1tB,KAChBpmU,EAAWh8Z,UAAW,YAAQ,GACjCwvF,IACIxiF,KAAeo1tB,KAChBpmU,EAAWh8Z,UAAW,eAAW,GACpCwvF,IACIxiF,KAAeo1tB,KAChBpmU,EAAWh8Z,UAAW,cAAU,GACnCwvF,IACIxiF,KAAeo1tB,KAChBpmU,EAAWh8Z,UAAW,eAAW,GACpCwvF,IACI3jF,GAAS,IACVmwZ,EAAWh8Z,UAAW,iBAAa,GACtCwvF,IACIxiF,KAAeuwnB,KAChBvhO,EAAWh8Z,UAAW,sBAAkB,GAC3CwvF,IACIxiF,KAAek+Y,KAChB8Q,EAAWh8Z,UAAW,oBAAgB,GACzCwvF,IACI3jF,GAAS,IACVmwZ,EAAWh8Z,UAAW,qBAAiB,GAC1CwvF,IACI3jF,OACDmwZ,EAAWh8Z,UAAW,sBAAkB,GAC3CwvF,IACI9iF,KAAY6uZ,KACbS,EAAWh8Z,UAAW,oBAAgB,GACzCwvF,IACIxiF,KAAew1tB,KAChBxmU,EAAWh8Z,UAAW,sBAAkB,GAC3CwvF,IACI9iF,KAAY+1tB,KACbzmU,EAAWh8Z,UAAW,yBAAqB,GAC9CwvF,IACIxiF,KAAes1tB,KAChBtmU,EAAWh8Z,UAAW,+BAA2B,GAC7Cg8Z,GACTr4V,ICrQEsrB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAM5DmhsB,GAA8B,SAAU5yoB,GAExC,SAAS4yoB,IACL,OAAkB,OAAX5yoB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAiH/D,OAnHAsqF,GAAUyzoB,EAAc5yoB,GAIxBN,IACI3jF,EAAS,SACV62tB,EAAa1iuB,UAAW,iBAAa,GACxCwvF,IACI3jF,GAAS,IACV62tB,EAAa1iuB,UAAW,qBAAiB,GAC5CwvF,IACI3jF,GAAS,IACV62tB,EAAa1iuB,UAAW,uBAAmB,GAC9CwvF,IACI3jF,GAAS,IACV62tB,EAAa1iuB,UAAW,qBAAiB,GAC5CwvF,IACI3jF,EAAS,OACV62tB,EAAa1iuB,UAAW,iBAAa,GACxCwvF,IACI3jF,EAAS,MACV62tB,EAAa1iuB,UAAW,mBAAe,GAC1CwvF,IACI3jF,EAAS,aACV62tB,EAAa1iuB,UAAW,gBAAY,GACvCwvF,IACI3jF,GAAS,IACV62tB,EAAa1iuB,UAAW,sBAAkB,GAC7CwvF,IACI3jF,GAAU,IACX62tB,EAAa1iuB,UAAW,wBAAoB,GAC/CwvF,IACI3jF,GAAW62B,KAAM,MAAOu7mB,kBAAmB,OAAQ5yoB,KAAM,YAC1Dq3tB,EAAa1iuB,UAAW,yBAAqB,GAChDwvF,IACI3jF,EAAS,aACV62tB,EAAa1iuB,UAAW,iBAAa,GACxCwvF,IACI3jF,KACD62tB,EAAa1iuB,UAAW,wBAAoB,GAC/CwvF,IACI/hF,KACDi1tB,EAAa1iuB,UAAW,kBAAc,GACzCwvF,IACI/hF,KACDi1tB,EAAa1iuB,UAAW,qBAAiB,GAC5CwvF,IACI/hF,KACDi1tB,EAAa1iuB,UAAW,mBAAe,GAC1CwvF,IACI/hF,KACDi1tB,EAAa1iuB,UAAW,uBAAmB,GAC9CwvF,IACI/hF,KACDi1tB,EAAa1iuB,UAAW,wBAAoB,GAC/CwvF,IACI/hF,KACDi1tB,EAAa1iuB,UAAW,qBAAiB,GAC5CwvF,IACI/hF,KACDi1tB,EAAa1iuB,UAAW,sBAAkB,GAC7CwvF,IACI/hF,KACDi1tB,EAAa1iuB,UAAW,oBAAgB,GAC3CwvF,IACI/hF,KACDi1tB,EAAa1iuB,UAAW,mBAAe,GAC1CwvF,IACI/hF,KACDi1tB,EAAa1iuB,UAAW,sBAAkB,GAC7CwvF,IACI/hF,KACDi1tB,EAAa1iuB,UAAW,qBAAiB,GAC5CwvF,IACI/hF,KACDi1tB,EAAa1iuB,UAAW,qBAAiB,GAC5CwvF,IACI/hF,KACDi1tB,EAAa1iuB,UAAW,oBAAgB,GAC3CwvF,IACI/hF,KACDi1tB,EAAa1iuB,UAAW,uBAAmB,GAC9CwvF,IACI/hF,KACDi1tB,EAAa1iuB,UAAW,sBAAkB,GAC7CwvF,IACI/hF,KACDi1tB,EAAa1iuB,UAAW,mBAAe,GAC1CwvF,IACI/hF,KACDi1tB,EAAa1iuB,UAAW,gBAAY,GACvCwvF,IACI/hF,KACDi1tB,EAAa1iuB,UAAW,kBAAc,GACzCwvF,IACI/hF,KACDi1tB,EAAa1iuB,UAAW,8BAA0B,GACrDwvF,IACI/hF,KACDi1tB,EAAa1iuB,UAAW,wBAAoB,GAC/CwvF,IACI/hF,KACDi1tB,EAAa1iuB,UAAW,gCAA4B,GACvDwvF,IACI/hF,KACDi1tB,EAAa1iuB,UAAW,0BAAsB,GACjDwvF,IACI/hF,KACDi1tB,EAAa1iuB,UAAW,uBAAmB,GAC9CwvF,IACI/hF,KACDi1tB,EAAa1iuB,UAAW,kBAAc,GACzCwvF,IACI/hF,KACDi1tB,EAAa1iuB,UAAW,kBAAc,GAClC0iuB,GACT/+pB,ICnIEg/pB,GAAqC,WAIrC,SAASA,EAAoB19tB,GACzBN,KAAK42G,YACD9C,IAAK,MACLC,MAAO,SAEX/zG,KAAKM,OAASA,EACdN,KAAKM,OAAOU,QAAQioH,UAA6C,IAAlCjpH,KAAKM,OAAOU,QAAQioH,SAAkB,EAAIjpH,KAAKM,OAAOU,QAAQioH,SAC7FjpH,KAAKi+tB,wBAA0B,IAAI7nnB,GAAep2G,KAAKM,OAAOU,SAC1Dk2G,UAAWl3G,KAAKg6I,iBAAiB1+I,KAAK0E,MACtC42G,WAAY52G,KAAK42G,WACjB/mC,UAAW,YAgFnB,OA7EAmupB,EAAoB3iuB,UAAU2+I,iBAAmB,SAAUn5I,GACvD,OAAQA,EAAEs1D,QACN,IAAK,MACDn2D,KAAKk+tB,WAAWr9tB,GAChB,MACJ,IAAK,QACDb,KAAKm+tB,aAAat9tB,KAI9Bm9tB,EAAoB3iuB,UAAU+iuB,cAAgB,SAAUj3tB,GACpD,IAAIk3tB,KAAqBh9tB,MAAMC,KAAKtB,KAAKM,OAAOU,QAAQQ,iBAAiB,IAAM88tB,KAC3Er1N,EAAc9hgB,EAClB,GAAInH,KAAKM,OAAO6hE,KAAKnhE,QAAQ2B,cAAc,IAAM27tB,IAE7C,IAAK,IADDz8tB,EAAMw8tB,EAAgB5huB,OACjBN,EAAI,EAAGA,EAAI0F,EAAK1F,IACrB,GAAIkiuB,EAAgBliuB,GAAG0W,aAAa,cAAgB1L,EAAO0L,aAAa,YAAa,CACjFo2f,EAAco1N,EAAgBliuB,EAAI,GAAKkiuB,EAAgBliuB,EAAI,GAAK8sgB,EAChE,MAIZ,OAAOA,GAEX+0N,EAAoB3iuB,UAAU6iuB,WAAa,SAAUr9tB,GACjD,IAAIsG,EAAStG,EAAEsG,OACf,GAAIA,GAAUtB,EAAQsB,EAAQ,IAAMm3tB,IAApC,CACI,IAAIC,EAAYv+tB,KAAKM,OAAO6hE,KAAKb,eAAeE,WAAW,SACvDg9pB,EAAax+tB,KAAKo+tB,cAAcj3tB,GACpC,GAAIq3tB,EAAW3rtB,aAAa,cAAgB1L,EAAO0L,aAAa,YAC5D0rtB,EAAU5wF,YAAYS,YAAa,EACnCowF,EAAWt8tB,YAEV,CACDq8tB,EAAUr8tB,QAEVyB,GADI3C,EAAUu9tB,EAAU/uF,sBACH,YAAa,YAClCxuoB,EAAQwC,aAAa,WAAY,KAErC3C,EAAE2kB,sBAGD,IAAKxlB,KAAKM,OAAOy7tB,iBAAmB/7tB,KAAKM,OAAOm+tB,eACjD,GAAIt3tB,GAAUtB,EAAQsB,EAAQ,IAAMu3tB,IAA8B,EAC1DH,EAAYv+tB,KAAKM,OAAO6hE,KAAKb,eAAeE,WAAW,UACjDt/D,QAEVyB,GADI3C,EAAUu9tB,EAAU/uF,sBACH,YAAa,YAClCxuoB,EAAQwC,aAAa,WAAY,WAGpC,IAAKxD,KAAKM,OAAOy7tB,kBAAoB/7tB,KAAKM,OAAOm+tB,eAC9Ct3tB,GAAUtB,EAAQsB,EAAQ,gBAA6B,EACnDo3tB,EAAYv+tB,KAAKM,OAAO6hE,KAAKb,eAAeE,WAAW,UACjDt/D,QACV,IAAIlB,EACJ2C,GADI3C,EAAUu9tB,EAAU/uF,sBACH,YAAa,YAClCxuoB,EAAQwC,aAAa,WAAY,OAI7Cw6tB,EAAoB3iuB,UAAU8iuB,aAAe,SAAUt9tB,GACnD,IAAIsG,EAAStG,EAAEsG,OACf,GAAIA,GAAUtB,EAAQsB,EAAQ,YAAyBA,EAAOxE,cAAc,YAGxE,OAFAwE,EAAOxE,cAAc,YAAgB0jH,aACrCxlH,EAAE2kB,kBASVw4sB,EAAoB3iuB,UAAUiX,QAAU,WACpCtS,KAAKi+tB,wBAAwB3rtB,WAE1B0rtB,KC5FPW,GAAkC,WAElC,SAASA,EAAiBr+tB,GACtBN,KAAKM,OAASA,EACdN,KAAKM,OAAOs6e,kBAAoB56e,KA+DpC,OAxDA2+tB,EAAiBtjuB,UAAU0wG,OAAS,WAChC/rG,KAAK4+tB,qBAETD,EAAiBtjuB,UAAUujuB,kBAAoB,WAC3C,IAMIn8N,GACAxvf,SLyP0B,uBKxP1BwnD,QAPEhuC,KAAMzsB,KAAKM,OAAOo4E,UAAU3E,YAAY,eAAgBzwE,GAAI,oBAC5DmpB,KAAMzsB,KAAKM,OAAOo4E,UAAU3E,YAAY,YAAazwE,GAAI,iBACzDmpB,KAAMzsB,KAAKM,OAAOo4E,UAAU3E,YAAY,eAAgBzwE,GAAI,oBAC5DmpB,KAAMzsB,KAAKM,OAAOo4E,UAAU3E,YAAY,cAAezwE,GAAI,mBAK7D4P,UAAWlT,KAAKM,OAAO4S,UACvBijC,WAAYn2C,KAAK6+tB,iBAAiBvjuB,KAAK0E,MACvCyF,OAAQzF,KAAK8+tB,oBAAoBxjuB,KAAK0E,OAE1CA,KAAKM,OAAOU,QAAQW,YAAYR,EAAc,MAC1CmC,GAAItD,KAAKM,OAAOU,QAAQsC,GAAK,uBAEjCtD,KAAK8gqB,QAAU,IAAIhmX,GAAY2nN,GAC/BzigB,KAAK8gqB,QAAQzqnB,SAAS,IAAMr2C,KAAKM,OAAOU,QAAQsC,GAAK,sBAEzDq7tB,EAAiBtjuB,UAAUwjuB,iBAAmB,SAAU5+tB,GACpD,IAAIw6D,KAAWp5D,MAAMC,KAAKrB,EAAKe,QAAQQ,iBAAiB,OACpD+pf,EAAYvrf,KAAK2iqB,aAAahgqB,cAAc,cAAsCkQ,aAAa,aAEnG,GADAxO,EAAYo2D,EL4OM,cK3OA,oBAAd8wb,EACA,IAAK,IAAIntf,EAAK,EAAGm1S,EAAU94O,EAAOr8D,EAAKm1S,EAAQ92S,OAAQ2B,IAAM,CACzD,IAAIyf,EAAO01R,EAAQn1S,GACfyf,EAAKhC,cAAgB7b,KAAKM,OAAOo4E,UAAU3E,YAAY,eACvDpwE,GAAUka,GLuOJ,gBKlOtB8gtB,EAAiBtjuB,UAAUyjuB,oBAAsB,SAAUx+D,GACvD,GAAiC,OAA7BA,EAAKt/pB,QAAQ6a,YAAsB,CACnC,IAAIukD,EAAYpgE,KAAK2iqB,aAAa9vpB,aAAa,YAC3CkstB,EAAYz+D,EAAKzipB,KAAKva,GAAGiM,QAAQ,WAAY,IAAIqG,cACrD5V,KAAKM,OAAO0+tB,YAAYC,iBAAiBhtQ,iBAAiB7xZ,EAAW2+pB,GAAY,GACjF/+tB,KAAKM,OAAO2xd,kBAAiB,GAC7Bjyd,KAAK2iqB,kBAAexnqB,IAQ5BwjuB,EAAiBtjuB,UAAUiX,QAAU,WAC5BtS,KAAKM,OAAO0mF,aAGjBhnF,KAAKM,OAAOs6e,kBAAkBtoe,WAE3BqstB,KC3EPr0oB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAmB5DsisB,GAAqC,SAAU/zoB,GAE/C,SAAS+zoB,IACL,OAAkB,OAAX/zoB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbAsqF,GAAU40oB,EAAqB/zoB,GAI/BN,IACI3jF,GAAS,IACVg4tB,EAAoB7juB,UAAW,sBAAkB,GACpDwvF,IACI3jF,GAAS,IACVg4tB,EAAoB7juB,UAAW,oBAAgB,GAClDwvF,IACI3jF,GAAS,IACVg4tB,EAAoB7juB,UAAW,sBAAkB,GAC7C6juB,GACTlgqB,IAYEmgqB,GAA2B,SAAUh0oB,GAOrC,SAASg0oB,EAAUnstB,EAAShS,GACxB,IAAIjB,EAAQorF,EAAO7pF,KAAKtB,KAAMgT,EAAShS,IAAYhB,KAGnD,OAFAD,EAAMyrG,SAAU,EAChBzrG,EAAM+7tB,UAAY/7tB,EACXA,EAkpBX,OA5pBAuqF,GAAU60oB,EAAWh0oB,GAiBrBg0oB,EAAU9juB,UAAUw1F,gBAAkB,WAClC,IACIuuoB,EADAvtoB,KAuBJ,OArBI7xF,KAAKq/tB,uBACLD,GAAkB,EAClBvtoB,EAAQrtF,MAAOvE,MAAOD,MAAOqxF,OAAQ,qBAErCrxF,KAAK+7tB,kBACLqD,GAAkB,EAClBvtoB,EAAQrtF,MAAOvE,MAAOD,MAAOqxF,OAAQ,cAErCrxF,KAAKy+tB,gBACLW,GAAkB,EAClBvtoB,EAAQrtF,MAAOvE,MAAOD,MAAOqxF,OAAQ,eAErCrxF,KAAK8jpB,kBACLjyjB,EAAQrtF,MAAOvE,MAAOD,MAAOqxF,OAAQ,gBAErCrxF,KAAK+jpB,gBACLlyjB,EAAQrtF,MAAOvE,MAAOD,MAAOqxF,OAAQ,cAErC+toB,GACAvtoB,EAAQrtF,MAAOvE,MAAOD,MAAOqxF,OAAQ,WAElCQ,GAMXstoB,EAAU9juB,UAAUoX,UAAY,WAC5BzS,KAAKoiX,iBACLpiX,KAAKs/tB,WAAa9ztB,GAAQkb,SAC1B1mB,KAAKqooB,QAAU,IAAIrylB,IACf7uC,OAAQ,qBACRuvC,gBAAgB,EAChBxjC,UAAWlT,KAAKkT,UAChB8hY,aAAch1Y,KAAKu/tB,WAAWjkuB,KAAK0E,MACnCm2C,WAAYn2C,KAAKw/tB,sBAErBx/tB,KAAK+5I,eAAiB,IAAIiklB,GAAoBh+tB,MAC9CA,KAAK46e,kBAAoB,IAAI+jP,GAAiB3+tB,MAC9CA,KAAKqooB,QAAQhylB,SAASr2C,KAAKgB,SAC3BhB,KAAKkrM,UAAY,IAAIxgG,GAAqB1qG,KAAKgO,QAC/ChO,KAAK29a,eACD8hT,WAAY,cACZ9/kB,MAAO,QACP3iJ,MAAO,QACP0iuB,QAAS,WACTh/pB,IAAK,MACL7D,OAAQ,SACRq7O,SAAU,WACVjpJ,OAAQ,SACR0wkB,cAAe,gBACfC,iBAAkB,mBAClBC,gBAAiB,kBACjBC,iBAAkB,mBAClB94rB,OAAQ,SACR8pH,SAAU,WACVj5H,KAAM,OACNq2J,QAAS,UACTqqG,KAAM,OACNx6N,QAAS,UACThrC,OAAQ,SACR9wB,MAAO,QACP42B,OAAQ,SACR+7E,OAAQ,SACRmrnB,gBAAiB,mBACjBC,sBAAuB,0BACvB5/pB,UAAW,uBACXkkB,MAAO,QACP27oB,eAAgB,mBAChBC,SAAU,wDACVC,eAAgB,oCAChBlra,WAAY,0EACZg2U,MAAO,QACPm1F,QAAS,UACTC,GAAI,KACJjxkB,OAAQ,SACR1+C,KAAM,OACNnsG,OAAQ,SACRuuB,IAAK,MACL+hI,QAAS,UACT/1I,MAAO,QACPiB,IAAK,MACLzT,IAAK,MACLg0tB,UAAW,aACXnQ,QAAS,UACToQ,SAAU,aACVC,YAAa,gBACbC,WAAY,eACZC,YAAa,gBACbC,UAAW,wBACXC,WAAY,sEACZC,YAAa,8EACbC,UAAW,aACX9ksB,OAAQ,sBACRmrlB,KAAM,OACNn3jB,MAAO,QACP+wqB,aAAc,kCACdC,UAAW,yBAEfhhuB,KAAK04E,UAAY,IAAI8+B,GAAKx3G,KAAKu/B,gBAAiBv/B,KAAK29a,cAAe39a,KAAKgO,QACzEhO,KAAKihuB,YAAa,EAClBjhuB,KAAKkhuB,qBAET/B,EAAU9juB,UAAUmkuB,oBAAsB,SAAUv/tB,GAChDA,EAAKe,QAAQ8C,UAAUM,IAAI,uBAE/B+6tB,EAAU9juB,UAAU+mX,eAAiB,WACjCpiX,KAAKgH,eAAgBmstB,iBAAmB,GACxCnztB,KAAKwonB,cAAgBxonB,KAAKg6tB,aAAaxxG,cAAgBxonB,KAAKg6tB,aAAaxxG,cAAcltnB,KAAK0E,WAAQ7E,EACpG6E,KAAKyonB,eAAiBzonB,KAAKg6tB,aAAavxG,eAAiBzonB,KAAKg6tB,aAAavxG,eAAentnB,KAAK0E,WAAQ7E,EACvG6E,KAAK8vW,SAAW9vW,KAAKg6tB,aAAalqX,SAAW9vW,KAAKg6tB,aAAalqX,SAASx0W,KAAK0E,WAAQ7E,EACrF6E,KAAK66tB,WAAa76tB,KAAKg6tB,aAAaa,WAAa76tB,KAAKg6tB,aAAaa,WAAWv/tB,KAAK0E,WAAQ7E,EAC3F6E,KAAKitnB,uBAAyBjtnB,KAAKg6tB,aAAa/sG,uBAC5CjtnB,KAAKg6tB,aAAa/sG,uBAAuB3xnB,KAAK0E,WAAQ7E,EAC1D6E,KAAKu7tB,iBAAmBv7tB,KAAKg6tB,aAAauB,iBAAmBv7tB,KAAKg6tB,aAAauB,iBAAiBjguB,KAAK0E,WAAQ7E,EAC7G6E,KAAK+snB,yBAA2B/snB,KAAKg6tB,aAAajtG,yBAC9C/snB,KAAKg6tB,aAAajtG,yBAAyBzxnB,KAAK0E,WAAQ7E,EAC5D6E,KAAKq7tB,mBAAqBr7tB,KAAKg6tB,aAAaqB,mBACxCr7tB,KAAKg6tB,aAAaqB,mBAAmB//tB,KAAK0E,WAAQ7E,EACtD6E,KAAKqpnB,gBAAkBrpnB,KAAKg6tB,aAAa3wG,gBAAkBrpnB,KAAKg6tB,aAAa3wG,gBAAgB/tnB,KAAK0E,WAAQ7E,EAC1G6E,KAAKspnB,WAAatpnB,KAAKg6tB,aAAa1wG,WAAatpnB,KAAKg6tB,aAAa1wG,WAAWhunB,KAAK0E,WAAQ7E,EAC3F6E,KAAKupnB,WAAavpnB,KAAKg6tB,aAAazwG,WAAavpnB,KAAKg6tB,aAAazwG,WAAWjunB,KAAK0E,WAAQ7E,EACvD,OAAhC6E,KAAKg6tB,aAAah6pB,WAClBhgE,KAAKgH,eAAgBgztB,cAAgBh6pB,UAAWhgE,KAAKs/tB,WAAa,GAAK,MAAQ,IAQvFH,EAAU9juB,UAAU0wG,OAAS,WACzBvxF,IAAgBrT,OAAQnH,KAAKgB,UAC7BhB,KAAKwmB,QPjNK,QOiNkB+8C,WAAcvjE,KAAKujE,aAC/CvjE,KAAKmhuB,cACLnhuB,KAAK+N,OAAOqztB,OACZphuB,KAAK+N,OAAO09nB,OACRzroB,KAAKs/tB,YACLt/tB,KAAK46e,kBAAkB7uY,UAQ/BoznB,EAAU9juB,UAAU6luB,kBAAoB,WACpClhuB,KAAK4lF,GAAG6ljB,GAAoBzroB,KAAKqhuB,aAAcrhuB,MAC/CA,KAAK4lF,GAAGoljB,GAAkBhroB,KAAKshuB,gBAAiBthuB,MAChDA,KAAK4lF,GAAGu3iB,GAAqBn9nB,KAAKuhuB,eAAgBvhuB,OAOtDm/tB,EAAU9juB,UAAUmmuB,qBAAuB,WACvCxhuB,KAAKgmF,IAAIyljB,GAAoBzroB,KAAKqhuB,cAClCrhuB,KAAKgmF,IAAIgljB,GAAkBhroB,KAAKshuB,iBAChCthuB,KAAKgmF,IAAIm3iB,GAAqBn9nB,KAAKuhuB,iBAOvCpC,EAAU9juB,UAAUmxG,eAAiB,WAEjC,OAAOxsG,KAAKgtG,cADK,aAAc,cAAe,kBAQlDmynB,EAAU9juB,UAAUkkC,cAAgB,WAChC,MAAO,aAQX4/rB,EAAU9juB,UAAUkE,KAAO,SAAU4ipB,GACjCnipB,KAAKmiE,KAAK5iE,KAAK4ipB,IAiBnBg9E,EAAU9juB,UAAUmsF,kBAAoB,SAAUiF,EAASC,GACvD,IAAK,IAAItuF,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKmvF,GAAUruF,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAE9D,OADWyE,EAAGzE,IAEV,IAAK,aACD4B,KAAK+N,OAAO09nB,OACZ,MACJ,IAAK,cACDzroB,KAAK+N,OAAOi9nB,OACZ,MACJ,IAAK,eACDhroB,KAAK+ppB,aAAa0xE,qBAClB,MACJ,IAAK,SACL,IAAK,eACDz7tB,KAAKqooB,QAAQ/1nB,UACb64E,EAAO9vF,UAAU62D,QAAQ5wD,KAAKtB,MAC9B,MACJ,IAAK,YACDA,KAAK+N,OAAOi9nB,OACZhroB,KAAKmhuB,cACL,MACJ,IAAK,sBACDnhuB,KAAKyhuB,gBAAgB11nB,YAUrCoznB,EAAU9juB,UAAUimuB,gBAAkB,WAClCthuB,KAAK+ppB,aAAe,IAAIjrO,GAAO9+a,MAC/BA,KAAK+ppB,aAAah+iB,SAClB/rG,KAAK+N,OAAO8vnB,GAAiB79nB,MAC7BA,KAAKwmB,QPvSU,cO+SnB24sB,EAAU9juB,UAAU42d,iBAAmB,SAAUyvQ,GAC7C//sB,GAAY3hB,KAAKgB,SACjBhB,KAAK+5tB,aAAe,IAAIhM,GAAY/ttB,KAAKujE,WAAY,GAAIvjE,KAAK+5tB,aAAa/J,WAC3E,IAAIzitB,GACAg2D,WAAYvjE,KAAKujE,WACjB4vpB,YAAanztB,KAAK+5tB,aAAa5G,aAEnCnztB,KAAKwmB,QAAQm7sB,GAAwBp0tB,GACrCvN,KAAKg/tB,YAAYjF,aAAe/5tB,KAAK+5tB,aACrC/5tB,KAAKg/tB,YAAYz7pB,WAAavjE,KAAKujE,WACnCvjE,KAAKgH,eAAgBmstB,YAAanztB,KAAK+5tB,aAAa5G,cAAe,GACnEnztB,KAAKshuB,mBAMTnC,EAAU9juB,UAAUiX,QAAU,WAC1BtS,KAAKwhuB,uBACDxhuB,KAAK+7tB,iBAAmB/7tB,KAAKg8tB,mBAC7Bh8tB,KAAKg8tB,kBAAkB1ptB,UAEvBtS,KAAKs/tB,YACLt/tB,KAAK46e,kBAAkBtoe,UAEvBtS,KAAK+5I,gBACL/5I,KAAK+5I,eAAeznI,UAExBtS,KAAKmlB,eACL9gB,GAAarE,KAAKgB,SAAU4guB,IAC5Bv9tB,GAAarE,KAAKgB,SN/VT,SMgWTqD,GAAarE,KAAKgB,SAAU6guB,IAC5B7huB,KAAKgB,QAAQgB,UAAY,GACzBmpF,EAAO9vF,UAAUiX,QAAQhR,KAAKtB,OAWlCm/tB,EAAU9juB,UAAUu4pB,YAAc,SAAUC,EAAuBC,EAAkBC,EAAUC,GAC3Fh0pB,KAAKmiE,KAAKyxlB,YAAYC,EAAuBC,EAAkBC,EAAUC,IAW7EmrE,EAAU9juB,UAAU64pB,UAAY,SAAUL,EAAuBC,EAAkBC,EAAUC,GACzFh0pB,KAAKmiE,KAAK+xlB,UAAUL,EAAuBC,EAAkBC,EAAUC,IAU3EmrE,EAAU9juB,UAAU84pB,UAAY,SAAUC,EAAqBN,EAAkBO,EAAQL,GACrFh0pB,KAAKmiE,KAAKgylB,UAAUC,EAAqBN,EAAkBO,EAAQL,IAEvEmrE,EAAU9juB,UAAUymuB,QAAU,SAAU36tB,GACpC,IAAIi5D,EAAYj5D,EAAOkN,cAAcxB,aAAa,aAC9C2+E,EAAaxxF,KAAK+5tB,aAAa5G,YAAY77rB,OAAOnwB,EAAOkN,cAAcxB,aAAa,WAAWykB,OAAOnwB,EAAOkN,cAAcxB,aAAa,mBAAmB4+sB,WAC/JzxtB,KAAK+5tB,aAAa/J,UAAU5vpB,GAAW6wpB,QAAQz/nB,GAAYggoB,WACvDrqtB,EAAOrD,UAAUK,SAASg4tB,IAC9B,IACI4F,GAAa,EACbz3tB,EAFa5L,KAAWsB,KAAKujE,WAAY,MAAM,GAE7BtgE,WACtB,GAAKqH,EAAKiktB,gBAAiD,IAA/BjktB,EAAKiktB,eAAe9xtB,OAG3C,CACD,IAAK,IAAI6guB,EAAO,EAAGA,EAAOhztB,EAAKiktB,eAAe9xtB,OAAQ6guB,IAAQ,CAC1D,IAAIvxsB,EAAQzhB,EAAKiktB,eAAe+O,GAChC,GAAIvxsB,EAAM0L,OAAS2oC,EAAnB,CACI2hqB,GAAa,EACb,IAAIC,EAAWj2sB,EAAM0uC,MAAMl8D,QAAQizF,GAC/BwwoB,GAAY,EACZj2sB,EAAM0uC,MAAMpyC,OAAO25sB,EAAU,GAG7Bj2sB,EAAM0uC,MAAMj2D,KAAKgtF,IAOxBuwoB,GACDz3tB,EAAKiktB,eAAe/ptB,MAAOizB,KAAM2oC,EAAW3F,OAAQ+2B,UApBxDlnF,EAAKiktB,iBAAoB92rB,KAAM2oC,EAAW3F,OAAQ+2B,KAuBtDxxF,KAAKgH,eAAgBu8D,YAAcgrpB,eAAgBjktB,EAAKiktB,kBAAoB,GAC5E5ssB,GAAY3hB,KAAKgB,SACjBhB,KAAK+5tB,aAAa1K,iBAAiBrvtB,KAAKujE,YACxCvjE,KAAKgH,eAAgBmstB,YAAanztB,KAAK+5tB,aAAa5G,cAAe,GACnEnztB,KAAKshuB,mBAETnC,EAAU9juB,UAAUkmuB,eAAiB,WAC7BvhuB,KAAKy+tB,cACL/7sB,GAAY1iB,KAAKiiuB,qBAAqBC,yBAEjCliuB,KAAKkiuB,yBACVx/sB,GAAY1iB,KAAKkiuB,yBAErBliuB,KAAKgB,QAAQ0D,MAAM8uD,SAAW,QAC9BxzD,KAAKmiE,KAAKnhE,QAAQ0D,MAAM8uD,SAAW,QACnCxzD,KAAKmlB,eACLnlB,KAAKukB,cAET46sB,EAAU9juB,UAAUkkuB,WAAa,SAAUt/tB,GACvC,IAAI+xgB,EAAW16e,OAAOr3B,EAAKkH,OAAO0L,aAAa,kBAC3C4tR,EAAWnpQ,OAAOr3B,EAAKkH,OAAO0L,aAAa,UAC3CowD,EAAOjjE,KAAKmztB,YAAY1yb,GAAUuxO,GACtChygB,KAAKqooB,QAAQjumB,QAAU,GACnB6oC,EACAjjE,KAAKqooB,QAAQjumB,QAAU,sCAAkD+nsB,GAAqB,IAC1FniuB,KAAK04E,UAAU3E,YAAY,OAAS,iBAAmBqupB,GAAsB,IAC7EpiuB,KAAKqiuB,WAAW5hc,EAAU,GAC1B,qBAAuB0hc,GAAqB,IAC5CniuB,KAAK04E,UAAU3E,YAAY,UAAY,iBAAmBqupB,GAAsB,IAChFpiuB,KAAKsiuB,WAAW,EAAGtwN,EAAUvxO,GAAY,qBAA4B0hc,GAAqB,IAC1FniuB,KAAK04E,UAAU3E,YAAY,SAAW,iBAAmBqupB,GAAsB,KACtD,MAAvBn/pB,EAAKq/N,cAAwBtiS,KAAK04E,UAAU3E,YAAY,WAAa9Q,EAAKq/N,eAAkB,aAGlGriS,EAAK44B,QAAS,GAGtBsmsB,EAAU9juB,UAAUgnuB,WAAa,SAAU5hc,EAAUuxO,GAIjD,IAHA,IAAI/uc,EAAOjjE,KAAKmztB,YAAY1yb,GAAUuxO,GAClC7/W,EAAQlvF,EAAKkvF,MACbowkB,EAAwB,cAAdt/pB,EAAKv8D,KAAuB1G,KAAK04E,UAAU3E,YAAY,cAAgB9Q,EAAKq/N,cACnFnwI,EAAQ,GACXsuI,IAEItuI,GADJlvF,EAAOjjE,KAAKmztB,YAAY1yb,GAAUuxO,IACjB7/W,QACbowkB,EAAUA,EAAU,OAAuB,cAAdt/pB,EAAKv8D,KAAuB1G,KAAK04E,UAAU3E,YAAY,cAChF9Q,EAAKq/N,eACTnwI,EAAQlvF,EAAKkvF,OAGrB,OAAOowkB,EAAQrluB,MAAM,OAAOwiD,UAAUv+B,KAAK,QAE/Cg+sB,EAAU9juB,UAAUinuB,WAAa,SAAU7hc,EAAUuxO,EAAU10S,GAI3D,IAHA,IAAIr6J,EAAOjjE,KAAKmztB,YAAY,GAAGnhN,GAC3B77f,EAAO8sD,EAAK9sD,KACZqstB,EAAwB,cAAdv/pB,EAAKv8D,KAAuB1G,KAAK04E,UAAU3E,YAAY,cAAgB9Q,EAAKq/N,cAC1E,UAATnsR,GAAoBmnN,EAAQmjE,GAC/BA,IACIzgS,KAAKmztB,YAAY1yb,KAEjBtqR,GADA8sD,EAAOjjE,KAAKmztB,YAAY1yb,GAAUuxO,IACtB77f,KACM,QAAd8sD,EAAKv8D,MAAgC,cAAdu8D,EAAKv8D,MAAiC,UAATyP,IACpDqstB,EAAUA,EAAU,MAAQv/pB,EAAKq/N,gBAI7C,OAAOkgc,GAEXrD,EAAU9juB,UAAU8luB,YAAc,WAC1BnhuB,KAAKkT,UACLvP,GAAU3D,KAAKgB,SN7eV,SMgfLqD,GAAarE,KAAKgB,SNhfb,SMkfLhB,KAAKs/tB,WACL37tB,GAAU3D,KAAKgB,SAAU6guB,IAGzBx9tB,GAAarE,KAAKgB,SAAU6guB,KAGpC1C,EAAU9juB,UAAUkpB,WAAa,WAC7Bhf,GAAanB,IAAIpE,KAAKgB,QAAShB,KAAKs/tB,WAAa,WAAa,QAASt/tB,KAAK6ypB,kBAAmB7ypB,MAC/FnE,OAAOa,iBAAiB,SAAUsD,KAAKojhB,eAAe9nhB,KAAK0E,OAAO,IAEtEm/tB,EAAU9juB,UAAUw3pB,kBAAoB,SAAUhypB,GAC9C,IAAIsG,EAAStG,EAAEsG,OACf,IAAKA,EAAOrD,UAAUK,SAAS,iBAC3BgD,EAAOrD,UAAUK,SAAS,oBAC1BgD,EAAOrD,UAAUK,SAAS,2BAC1BgD,EAAOrD,UAAUK,SAAS,iBAC1BgD,EAAOrD,UAAUK,SAAS,gBAC1BgD,EAAOrD,UAAUK,SAAS,kBAAoBnE,KAAKyiuB,oBACnDziuB,KAAKujE,WAAWsrpB,mBAAqE,SAAhD7utB,KAAKujE,WAAWsrpB,kBAAkBj3hB,UAAsB,CAC7F,IAAI5zL,EAAM,KACNmD,EAAOrD,UAAUK,SAAS,gBAC1BH,EAAMmD,EAEDA,EAAOrD,UAAUK,SAAS,2BAA6BgD,EAAOrD,UAAUK,SAAS,oBACtFgD,EAAOrD,UAAUK,SAAS,gBAAkBgD,EAAOrD,UAAUK,SAAS,gBACtEH,EAAMmD,EAAOkN,cAERlN,EAAOrD,UAAUK,SAAS,kBAC/BH,EAAMmD,EAAOkN,cAAcA,eAE/BrU,KAAK0iuB,YAAYv7tB,GACbnD,EAAIqQ,cAAcA,cAAcA,cAAcA,cAAcvQ,UAAUK,SAAS,qBAE/EnE,KAAKgH,eACDu8D,YACIsrpB,mBACIlnZ,YAAcrwS,OAAOtzB,EAAI6O,aAAa,kBAClCykB,OAAOtzB,EAAI6O,aAAa,iBAAmB,EAC/C+kL,UAA2D,eAAhD53L,KAAKujE,WAAWsrpB,kBAAkBj3hB,UAA6B,YAAc,iBAGjG,GAEHj2K,GAAY3hB,KAAKgB,SACjBhB,KAAK+5tB,aAAa9G,oBAClBjztB,KAAKgH,eAAgBmstB,YAAanztB,KAAK+5tB,aAAa5G,cAAe,GACnEnztB,KAAKshuB,uBAGR,CAAA,IAAIn6tB,EAAOrD,UAAUK,SAASg4tB,MAAiBh1tB,EAAOrD,UAAUK,SNlYzD,YMuYR,YADAnE,KAAK0iuB,YAAYv7tB,GAHjBnH,KAAK8huB,QAAQ36tB,KAQrBg4tB,EAAU9juB,UAAU+nhB,eAAiB,WACjC,IAAIrjhB,EAAQC,KAEZE,aAAaF,KAAK2iuB,YAClB3iuB,KAAK2iuB,WAAaxiuB,WAAW,WACzB,GAAIJ,EAAMiB,SAAWjB,EAAMiB,QAAQ8C,UAAUK,SAAS,eAAgB,CAClE,IAAIupY,EAAW3tY,EAAMgqpB,aAAayyE,kBAAkBz8tB,EAAMwjE,WAAWxwC,OAAOt2B,OAAS,EACjFsD,EAAMg6tB,aAAa5G,YAAY,GAAG12tB,OAAS,GAC/CsD,EAAMoiE,KAAKnsD,MAAQjW,EAAMgqpB,aAAawwE,qBACtC,IAAK,IAAIqB,EAAO,EAAGA,EAAO77tB,EAAMoiE,KAAKpE,QAAQthE,OAAQm/tB,IACpC,IAATA,GAAcluV,GAAY3tY,EAAMg8tB,iBAAmBh8tB,EAAMi8tB,kBAAoB,IAAM,KACnFj8tB,EAAMoiE,KAAKpE,QAAQ69pB,GAAM5ltB,MAASjW,EAAMg8tB,iBAAmBh8tB,EAAMi8tB,kBAAoB,IAAM,IAG3Fj8tB,EAAMoiE,KAAKpE,QAAQ69pB,GAAM5ltB,MAAQ03X,EAGzC3tY,EAAMoiE,KAAKiplB,aAAavmB,YACpB9koB,EAAMg8tB,iBAAmBh8tB,EAAMi8tB,mBAAqBj8tB,EAAMiB,QAAQ2B,cAAc,IAAMs5tB,KACtFl8tB,EAAMi8tB,kBAAkBn3F,cAGjC,MAGPs6F,EAAU9juB,UAAUqnuB,YAAc,SAAUv7tB,GACxC,IAAInD,EAAM,KACNmD,EAAOrD,UAAUK,SAAS,iBAAmBgD,EAAOrD,UAAUK,SAAS,aACvEH,EAAMmD,EAEDA,EAAOrD,UAAUK,SAAS,2BAA6BgD,EAAOrD,UAAUK,SAAS,gBACtFgD,EAAOrD,UAAUK,SAAS,mBAC1BH,EAAMmD,EAAOkN,cAERlN,EAAOrD,UAAUK,SAAS,kBAC/BH,EAAMmD,EAAOkN,cAAcA,eAE3BrQ,GACIhE,KAAK4iuB,WACL5iuB,KAAKwmB,QPxjBE,aOyjBH8xnB,YAAat0oB,EACbxH,KAAMwD,KAAKmztB,YAAY77rB,OAAOtzB,EAAI6O,aAAa,WAAWykB,OAAOtzB,EAAI6O,aAAa,sBAKlGsstB,EAAU9juB,UAAU8pB,aAAe,WAC/B5f,GAAahB,OAAOvE,KAAKgB,QAAShB,KAAKs/tB,WAAa,WAAa,QAASt/tB,KAAK6ypB,mBAC/Eh3pB,OAAOe,oBAAoB,SAAUoD,KAAKojhB,eAAe9nhB,KAAK0E,OAAO,IAEzEm/tB,EAAU9juB,UAAUgmuB,aAAe,WAC/B,KAAIrhuB,KAAKujE,YAAcvjE,KAAKujE,WAAW/mE,MAAQwD,KAAKujE,WAAW/mE,KAAKC,OAAS,GAYzE,OAHAuD,KAAKy+tB,eAAgB,EACrBz+tB,KAAKmiE,KAAO,IAAI++kB,YAChBlhpB,KAAKmiE,KAAKp0D,OAAO,oBAVjB4T,GAAY3hB,KAAKgB,SACjBhB,KAAKwmB,QAAQq8sB,IAA2Bt/pB,WAAcvjE,KAAKujE,aAC3DvjE,KAAK+5tB,aAAe,IAAIhM,GAAY/ttB,KAAKujE,YACzCvjE,KAAKgH,eAAgBmstB,YAAanztB,KAAK+5tB,aAAa5G,cAAe,GACnEnztB,KAAKwmB,QAAQm7sB,IAA0BxO,YAAenztB,KAAKmztB,cAC3DnztB,KAAK+N,OAAOi9nB,QASpBngjB,IACI3jF,EAAS,QACVi4tB,EAAU9juB,UAAW,oBAAgB,GACxCwvF,IACI3jF,GAAS,IACVi4tB,EAAU9juB,UAAW,qBAAiB,GACzCwvF,IACI9iF,KAAYg2tB,KACboB,EAAU9juB,UAAW,oBAAgB,GACxCwvF,IACI9iF,KAAYm3tB,KACbC,EAAU9juB,UAAW,2BAAuB,GAC/CwvF,IACI9iF,KAAYsvZ,KACb8nU,EAAU9juB,UAAW,kBAAc,GACtCwvF,IACI3jF,KACDi4tB,EAAU9juB,UAAW,mBAAe,GACvCwvF,IACI3jF,GAAS,IACVi4tB,EAAU9juB,UAAW,uBAAmB,GAC3CwvF,IACI3jF,GAAS,IACVi4tB,EAAU9juB,UAAW,4BAAwB,GAChDwvF,IACI3jF,GAAS,IACVi4tB,EAAU9juB,UAAW,0BAAsB,GAC9CwvF,IACI3jF,EAAS,SACVi4tB,EAAU9juB,UAAW,cAAU,GAClCwvF,IACI3jF,EAAS,SACVi4tB,EAAU9juB,UAAW,aAAS,GACjCwvF,IACI3jF,GAAS,IACVi4tB,EAAU9juB,UAAW,wBAAoB,GAC5CwvF,IACI3jF,GAAS,IACVi4tB,EAAU9juB,UAAW,sBAAkB,GAC1CwvF,IACI/hF,KACDq2tB,EAAU9juB,UAAW,qBAAiB,GACzCwvF,IACI/hF,KACDq2tB,EAAU9juB,UAAW,sBAAkB,GAC1CwvF,IACI/hF,KACDq2tB,EAAU9juB,UAAW,gBAAY,GACpCwvF,IACI/hF,KACDq2tB,EAAU9juB,UAAW,kBAAc,GACtCwvF,IACI/hF,KACDq2tB,EAAU9juB,UAAW,8BAA0B,GAClDwvF,IACI/hF,KACDq2tB,EAAU9juB,UAAW,wBAAoB,GAC5CwvF,IACI/hF,KACDq2tB,EAAU9juB,UAAW,gCAA4B,GACpDwvF,IACI/hF,KACDq2tB,EAAU9juB,UAAW,0BAAsB,GAC9CwvF,IACI/hF,KACDq2tB,EAAU9juB,UAAW,uBAAmB,GAC3CwvF,IACI/hF,KACDq2tB,EAAU9juB,UAAW,kBAAc,GACtCwvF,IACI/hF,KACDq2tB,EAAU9juB,UAAW,kBAAc,GACtCwvF,IACI/hF,KACDq2tB,EAAU9juB,UAAW,YAAQ,GAChCwvF,IACI/hF,KACDq2tB,EAAU9juB,UAAW,wBAAoB,GAC5CwvF,IACI/hF,KACDq2tB,EAAU9juB,UAAW,uBAAmB,GAC3CwvF,IACI/hF,KACDq2tB,EAAU9juB,UAAW,iBAAa,GACrCwvF,IACI/hF,KACDq2tB,EAAU9juB,UAAW,eAAW,GACnCwvF,IACI/hF,KACDq2tB,EAAU9juB,UAAW,iBAAa,GACrCwvF,IACI/hF,KACDq2tB,EAAU9juB,UAAW,oBAAgB,GACxCwvF,IACI/hF,KACDq2tB,EAAU9juB,UAAW,iBAAa,GACrC8juB,EAAYt0oB,IACRzhF,GACD+1tB,IAEL5znB,ICptBE08kB,GAA6B,WAK7B,SAASA,EAAY3nrB,GACjBN,KAAKM,OAASA,EAsGlB,OAhGA2nrB,EAAY5srB,UAAUkkC,cAAgB,WAClC,MAAO,eAMX0opB,EAAY5srB,UAAUynuB,cAAgB,SAAUp8tB,GAE5C,IAAIzG,GAAS8wN,SAAU,UAAWnsI,OAAQ,GAAI0oH,OAAQ,GAAIy1hB,iBAAkB/iuB,KAAKM,OAAO6ytB,cACxFnztB,KAAKM,OAAOkmB,QAAQw8sB,GAAqB/iuB,GAQzC,IAAK,IAPD8wN,EAAW9wN,EAAK8wN,SAGhBgygB,EAAkB9iuB,EAAK8iuB,gBAGvBE,KACKC,EAAW,EAAGA,EAAWH,EAAgBtmuB,OAAQymuB,IAAY,CAQlE,IAAK,IAPD/P,EAAc4P,EAAgBG,GAC9BC,EAAS,EACTviG,EAASuyF,EAAY12tB,OACrB2muB,EAAa,EACbnJ,EAAaj6tB,KAAKM,OAAOyppB,aAAamwE,gBACtC3hc,KACA+yK,EAAW,EACNqwR,EAAO,EAAGA,EAAO/6F,EAAQ+6F,IAC9B,GAAIxI,EAAYwI,GAAO,CACnByH,IACAD,EAAShQ,EAAYwI,GAAMl/tB,OAE3B,IAAK,IADDqlE,KACK85pB,EAAO,EAAGA,EAAOuH,EAAQvH,IAC9B,GAAIzI,EAAYwI,GAAMC,GAAO,CACzB,IAAIyH,EAAYlQ,EAAYwI,GAAMC,GAClC,IAA2B,IAArByH,EAAUlxkB,OAAiBkxkB,EAAUpsc,QAAU,CACjD,IAAIosa,EAA+B,UAAnBggC,EAAUlttB,KAAmBkttB,EAAUrmuB,MAAQqmuB,EAAU/gc,cAErE+ga,EADmB,cAAnBggC,EAAU38tB,KACE1G,KAAKM,OAAOo4E,UAAU3E,YAAY,cAEtB,QAAnBsvpB,EAAU38tB,KACH28rB,EAAUn2rB,WAAWqC,QAAQ,QAASvP,KAAKM,OAAOo4E,UAAU3E,YAAY,UAG1D,MAAdsvnB,EAAoB,GAAKA,IAEd,IAArBggC,EAAUlxkB,OAAiBkxkB,EAAUpsc,WACvCn1N,EAAMt9D,MACFyN,MAAO2ptB,EAAO,EAAG5+tB,MAAOqmsB,EACxB3ta,QAAS2tc,EAAU3tc,QAASuB,QAASosc,EAAUpsc,UAE5B,UAAnBosc,EAAUlttB,KACV2rD,EAAMA,EAAMrlE,OAAS,GAAGiI,OACpBsggB,aAAci1N,GAAY2B,EAAO,GAAK57tB,KAAKM,OAAOijE,WAAWxwC,OAAOt2B,QACpEiyC,MAAM,EACN0qkB,UAAU,IAIdt3iB,EAAMA,EAAMrlE,OAAS,GAAGiI,OACpBgqC,MAAM,EACN6gB,OAAQ,SACR6pjB,UAAU,EACVC,OAAiB,IAATuiH,EAA+B,GAAlByH,EAAUlxkB,MAAa,GAEzB,QAAnBkxkB,EAAUlttB,MAA2B,IAATyltB,IAC5B95pB,EAAMA,EAAMrlE,OAAS,GAAGiI,MAAM8qD,OAAS,OACvCsS,EAAMA,EAAMrlE,OAAS,GAAGiI,MAAM20mB,OAA2B,EAAlBgqH,EAAUlxkB,MACjDm5S,EAAW+3R,EAAUlxkB,MAAQm5S,EAAW+3R,EAAUlxkB,MAAQm5S,IAGlExpY,EAAMA,EAAMrlE,OAAS,GAAGiI,MAAMuwR,SAAYz+P,MAAO,UAAWuqS,UAAW,SAG/E66Z,GAAeyH,EAAU3tc,QAAW2tc,EAAU3tc,QAAU,EAAK,OAG7D5zN,EAAMt9D,MACFyN,MAAO2ptB,EAAO,EAAG5+tB,MAAO,GAAI04R,QAAS,EAAGuB,QAAS,IAI7DsB,EAAK/zR,MAAOyN,MAAOmxtB,EAAYthqB,MAAOA,IAIzC,IADD/D,KACJ,IAAS69pB,EAAO,EAAGA,EAAOuH,EAAQvH,IAC9B79pB,EAAQv5D,MAAOyN,MAAO2ptB,EAAO,EAAG5ltB,MAAO,MAEvCs1b,EAAW,IACXvtY,EAAQ,GAAG/nD,MAAQ,IAAkB,GAAXs1b,GAE9B23R,EAAWz+tB,MAAOu5D,QAASA,EAASw6N,KAAMA,IAEnC,IAAIwjV,IAAWZ,WAAY8nH,GAAuB,UAATv8tB,EAAmB,OAAS,OAC3E+mF,KAAKsjI,GAAqB,UAATrqN,EAAmB,QAAU,UAEhDuhrB,KC5GPq7C,GAA2B,WAK3B,SAASA,EAAUhjuB,GACfN,KAAKM,OAASA,EAyIlB,OAnIAgjuB,EAAUjouB,UAAUkkC,cAAgB,WAChC,MAAO,aAMX+jsB,EAAUjouB,UAAUkouB,YAAc,WAC9B,IAGIC,EAHAC,EAAczjuB,KAAK0juB,aAEnBC,EAAgB,EAEhBxQ,EAAcsQ,EAAYxjuB,KAAK8iuB,gBAAgBY,GAC/CC,EAAYzQ,GAAeA,EAAY12tB,OAAS,EAAI02tB,EAAY,GAAG12tB,OAAS,EAC5EonuB,EAAgB,EACpB,EAAG,CACC,IAAI/pc,EAAU,IAAIW,GAClB,GAAI04b,GAAeA,EAAY12tB,OAAS,EAAG,CACvCq9R,EAAQ/7N,QAAQ35D,IAAI+utB,EAAY,GAAG12tB,OAASonuB,GAAiB,EAAI,EAAI1Q,EAAY,GAAG12tB,OAASonuB,GAI7F,IAAK,IAHDjjG,EAASuyF,EAAY12tB,OACrB2muB,EAAa,EACb93R,EAAW,EACNqwR,EAAO,EAAGA,EAAO/6F,EAAQ+6F,IAC9B,GAAIxI,EAAYwI,GAAO,CACnB,IAAImI,IAAgB3Q,EAAYwI,GAAM,IAAoC,QAA9BxI,EAAYwI,GAAM,GAAGxltB,MAC7DgttB,EAAShQ,EAAYwI,GAAMl/tB,OAAUonuB,EAAgB,EAAMA,EAAgB,EAC3E1Q,EAAYwI,GAAMl/tB,OAClBqnuB,GACAhqc,EAAQj1M,QAAQzgF,IAAI,GAKxB,IAAK,IAHD2/tB,EAAcD,EAAsChqc,EAAQj1M,QAAQ4zM,UAAU2qc,GAAlDtpc,EAAQvB,KAAK8B,SACzC2pc,EAAW,EACXC,GAAa,EACRrI,EAAOiI,EAAejI,EAAOuH,EAAQvH,IAAQ,CAClD,IAAIsI,GAAc,EAClB,GAAI/Q,EAAYwI,GAAMC,GAAO,CACzB,IAAIyH,EAAYlQ,EAAYwI,GAAMC,GAClC,IAA2B,IAArByH,EAAUlxkB,OAAiBkxkB,EAAUpsc,QAAU,CACjD,IAAIosa,EAAYggC,EAAU/gc,cAC1B+ga,EAA+B,cAAnBggC,EAAU38tB,KAAuB1G,KAAKM,OAAOo4E,UAAU3E,YAAY,cACvD,QAAnBsvpB,EAAU38tB,KACP28rB,EAAUn2rB,WAAWqC,QAAQ,QAASvP,KAAKM,OAAOo4E,UAAU3E,YAAY,UACzD,MAAdsvnB,EAAoB,GAAKA,IACP,IAArBggC,EAAUlxkB,OAAiBkxkB,EAAUpsc,WACvC8sc,EAAWjiqB,MAAMyyN,QAAQyvc,GAAU7rc,WAAakrc,EAAU3tc,QACrD,EAAIsuc,EAAWX,EAAU3tc,QAAU,EAAIsuc,EAAWX,EAAU3tc,QAAW,EACxEouc,GAAeT,EAAUpsc,SAAWosc,EAAUpsc,QAAU,IACxD8sc,EAAWjiqB,MAAMyyN,QAAQyvc,GAAU/sc,QAAUosc,EAAUpsc,QAAUosc,EAAUpsc,QAAU,GAEzF8sc,EAAWjiqB,MAAMyyN,QAAQyvc,GAAUhnuB,MAAQqmsB,EAAUn2rB,YAEvC,KAAdm2rB,IACA4gC,GAAa,GAGrB34R,EAAW+3R,EAAUlxkB,MAAQm5S,GAAqB,IAATswR,EAAayH,EAAUlxkB,MAAQm5S,EACxE44R,EAAiC,UAAnBb,EAAUlttB,KACxByltB,GAAemI,EAAWjiqB,MAAMyyN,QAAQyvc,GAAU7rc,WAC7C4rc,EAAWjiqB,MAAMyyN,QAAQyvc,GAAU7rc,WAAa,EAAK,EAC1D6rc,GAAuBD,EAAWjiqB,MAAMyyN,QAAQyvc,GAAU7rc,WACrD4rc,EAAWjiqB,MAAMyyN,QAAQyvc,GAAU7rc,WAAa,EAAK,OAG1D4rc,EAAWjiqB,MAAMyyN,QAAQyvc,GAAUhnuB,MAAQ,GAC9B,IAAT4+tB,GAAckI,GAAe9juB,KAAKM,OAAOijE,WAAWxF,SACpD/9D,KAAKM,OAAOijE,WAAWxF,QAAQthE,OAAS,GACxCq9R,EAAQj1M,QAAQ4zM,UAAU,GAAG32N,MAAMyyN,QAAQ,GAAG0C,UAGtD,IAAIlkC,EAAe,IAAI/V,GACvB+V,EAAa3S,iBAAoB0jf,GAAwB,IAATlI,GAAczI,EAAYwI,GAAMC,GAC5C,GAAhCzI,EAAYwI,GAAMC,GAAMzpkB,MAAa,EACzC4gG,EAAa1jM,UAAY60qB,EAAchsf,GAAiB05B,MAAQ15B,GAAiB49B,KACjF/iB,EAAa8e,cAAgB55B,GAAqB65B,OAClDiyd,EAAWjiqB,MAAMyyN,QAAQyvc,GAAUt/tB,MAAMquP,aAAeA,EACxDixe,IAEAC,IACAF,EAAWhutB,OAAS,IAExBqttB,IAGc,IAAlBS,IACA/pc,EAAQ/7N,QAAQs6N,UAAU,GAAGriR,MAAQ,IAAkB,GAAXs1b,GAGpD,IAAIz6Y,EAAS,IAAIy5N,GACjBz5N,EAAO45N,eAAiB,IAAIxvC,GAAW,EAAG,EAAG,EAAG,GAC1B,IAAlB4of,GAAuB7juB,KAAKM,OAAOijE,WAAWxF,SAAW/9D,KAAKM,OAAOijE,WAAWxF,QAAQthE,OAAS,GACjGq9R,EAAQj1M,QAAQ4zM,UAAU,GAAG32N,MAAMyyN,QAAQ,GAAG0C,UAG9Cusc,EADAA,EACa1pc,EAAQ9mC,KAAKwwe,EAAWvzkB,KAAM,IAAI8qF,GAAO,GAAIyof,EAAW9ssB,OAAO1pB,EAAIw2tB,EAAW9ssB,OAAO3gB,OAAS,IAAK86C,GAGnGipO,EAAQ9mC,KAAKywe,EAAYxzkB,KAAM,IAAI8qF,GAAO,GAAI,IAAKlqL,IAEpEgzqB,GAAgC,IACXD,GAAaH,EAAYxjuB,KAAK8iuB,gBAAgBtmuB,OAAUknuB,EAAgB,IACzFA,IAEAC,GADAzQ,EAAcsQ,EAAYxjuB,KAAK8iuB,gBAAgBY,KACpBxQ,EAAY12tB,OAAS,EAAI02tB,EAAY,GAAG12tB,OAAS,EAC5EonuB,EAAgB,SAEfA,EAAgBD,GACzBH,EAAYjjuB,SAASitF,KAAKg2oB,EAAYxjuB,KAAK8wN,SAAW,QACtD0ygB,EAAYjjuB,SAAS8R,WAEzBgxtB,EAAUjouB,UAAUqouB,WAAa,WAE7B,IAAIzjuB,GAAS8wN,SAAU,UAAWnsI,OAAQ,GAAI0oH,OAAQ,GAAIy1hB,iBAAkB/iuB,KAAKM,OAAO6ytB,cACxFnztB,KAAKM,OAAOkmB,QAAQw8sB,GAAqB/iuB,GACzC,IACI2kF,EAAS3kF,EAAK2kF,OACd0oH,EAASrtM,EAAKqtM,OAEd9sM,EAAW,IAAIykP,GACfh1F,EAAOzvJ,EAAS0qO,MAAM9mO,MAEtBsoB,EAAO,IAAIu3P,GAAgB9nC,GAAcyoC,WAAY,GAAIhsC,GAAasJ,SACtErG,EAAQ,IAAIH,GAAc,IAAI7C,GAAS,EAAG,EAAG,IAC7CqX,EAAM,IAAIrB,GAAO,IAAIhW,GAAS,EAAG,EAAG,GAAI,IACxCx/C,EAAiB,IAAIq3F,GAAuB,IAAIz1C,GAAW,EAAG,EAAGhrF,EAAK8hG,SAAS5S,WAAWnpO,MAAO,KACrGqjL,EAAe04D,SAAS+d,WAAWlrL,EAAQl4D,EAAMwjO,EAAKrU,EAAO,EAAG,EAAG,IAAImB,GAAgB9E,GAAiBy5B,SACxGnxQ,EAASyO,SAASvC,IAAM2sL,EACxB,IAAIxyE,EAAiB,IAAI6pK,GAAuB,IAAIz1C,GAAW,EAAG,EAAGhrF,EAAK8hG,SAAS5S,WAAWnpO,MAAO,KAGrG,OAFA6wG,EAAekrI,SAAS+d,WAAWxiE,EAAQ5gL,EAAMwjO,EAAKrU,EAAO,EAAG,EAAG,IAAImB,GAAgB9E,GAAiBy5B,SACxGnxQ,EAASyO,SAAStC,OAASk6G,GAClBrmH,SAAUA,EAAUyvJ,KAAMA,EAAMhwJ,KAAMA,IAE5CqjuB,KC/IPa,GAA2C,WAI3C,SAASA,EAA0B7juB,GAC/BN,KAAK42G,YACDwtnB,MAAO,SACPC,MAAO,SACPzvnB,OAAQ,UAEZ50G,KAAKM,OAASA,EACdN,KAAKM,OAAOU,QAAQioH,UAA6C,IAAlCjpH,KAAKM,OAAOU,QAAQioH,SAAkB,EAAIjpH,KAAKM,OAAOU,QAAQioH,SAC7FjpH,KAAK+5I,eAAiB,IAAI3jC,GAAep2G,KAAKM,OAAOU,SACjDk2G,UAAWl3G,KAAKg6I,iBAAiB1+I,KAAK0E,MACtC42G,WAAY52G,KAAK42G,WACjB/mC,UAAW,YAiDnB,OA9CAs0pB,EAA0B9ouB,UAAU2+I,iBAAmB,SAAUn5I,GAC7D,OAAQA,EAAEs1D,QACN,IAAK,QACDn2D,KAAK4lqB,cAAc/kqB,GACnB,MACJ,IAAK,QACDb,KAAKskuB,YAAYzjuB,GACjB,MACJ,IAAK,SACDb,KAAKukuB,cAAc1juB,KAI/BsjuB,EAA0B9ouB,UAAUipuB,YAAc,SAAUzjuB,GACxD,IAAIsG,EAAStG,EAAEsG,OACf,GAAIA,GAAUtB,EAAQsB,EAAQ,IAAMm3tB,MAC/Bz4tB,EAAQsB,EAAQ,eAAgCtB,EAAQsB,EAAQ,kBAGjE,OAFAA,EAAOxE,cAAc,WAAsB0jH,aAC3CxlH,EAAE2kB,kBAIV2+sB,EAA0B9ouB,UAAUuqqB,cAAgB,SAAU/kqB,GAC1D,IAAIsG,EAAStG,EAAEsG,OACf,GAAIA,GAAUtB,EAAQsB,EAAQ,IAAMm3tB,MAA4Bz4tB,EAAQsB,EAAQ,aAG5E,OAFAA,EAAOxE,cAAc,IAAM6huB,IAAyBn+mB,aACpDxlH,EAAE2kB,kBAIV2+sB,EAA0B9ouB,UAAUkpuB,cAAgB,SAAU1juB,GAC1D,IAAIsG,EAAStG,EAAEsG,OACf,GAAIA,GAAUtB,EAAQsB,EAAQ,IAAMm3tB,IAGhC,OAFAn3tB,EAAOxE,cAAc,aAAwB0jH,aAC7CxlH,EAAE2kB,kBASV2+sB,EAA0B9ouB,UAAUiX,QAAU,WAC1CtS,KAAK+5I,eAAeznI,WAEjB6xtB,KC/DPM,GAA2B,WAK3B,SAASA,EAAUnkuB,GACfN,KAAKM,OAASA,EAkHlB,OAzGAmkuB,EAAUppuB,UAAUqpuB,cAAgB,SAAUzkuB,GACtCD,KAAKM,OAAOqkuB,aAAaC,aACzB5kuB,KAAKM,OAAOqkuB,aAAaC,YAAY3iuB,QAEzC,IAAIkF,EAASlH,EAAKkH,OACdi5D,EAAYj5D,EAAOkN,cAAc/Q,GACjCwwY,EAAe3sY,EAAOrD,UAAUK,SAAS0guB,IACzCC,EAAU9kuB,KAAK+kuB,kBAAkB3kqB,GACrC,GAAK3iE,EAAkBqnuB,GAGlB,CACD,IAAIE,GAAevtsB,KAAM2oC,EAAWwvF,MAAOkkP,EAAe,YAAc,cACxE9zY,KAAKM,OAAOijE,WAAWyrjB,aAAaxqnB,KAAKwguB,QAJzCF,EAAQl1kB,MAAQkkP,EAAe,YAAc,aAMjDA,EAAezvY,GAAa8C,GAAS09tB,IAA0BlhuB,GAAUwD,GAAS09tB,KAStFJ,EAAUppuB,UAAU4puB,gBAAkB,SAAUhluB,GAC5C,IAAIkH,EAASlH,EAAKkH,OACdi5D,EAAYj5D,EAAOkN,cAAc/Q,GACjC4huB,EAAe/9tB,EAAOkN,cAAcwH,YACpCs2sB,GAAY,EACZgT,KACJnluB,KAAKM,OAAOy5tB,aAAa/J,UAAU5vpB,GAAW+wpB,WAAa,IAAI3tpB,GAAYxjE,KAAKM,OAAOy5tB,aACnF/J,UAAU5vpB,GAAW+wpB,YAAYltpB,cAAa,IAAIZ,IAClDosF,OAAO,aAAczvJ,KAAKM,OAAOy5tB,aAAa/J,UAAU5vpB,GAAWvoC,KAAKjiB,gBAC5E,IAAIiopB,EAAY79pB,KAAKoluB,oBAAoBhlqB,GACpC3iE,EAAkBogqB,KACnBs0D,EAA+B,YAAnBt0D,EAAUn3pB,KACtBy+tB,EAActnE,EAAUpjmB,OAE5B,IAAImvP,EAAW5pT,KAAKqluB,YAAYlT,EAAWnytB,KAAKM,OAAOy5tB,aAAa/J,UAAU5vpB,GAAW+wpB,WAAYgU,GACjGnluB,KAAKM,OAAOqkuB,aAAaC,aACzB5kuB,KAAKM,OAAOqkuB,aAAaC,YAAY3iuB,QAEzC,IAAIqjuB,EACJA,EACIA,EADqC,mBAA3BtluB,KAAKM,OAAOsS,WACR5S,KAAKM,OAAOU,QAAwBR,SAASosB,eAAe5sB,KAAKM,OAAO4pT,SAAW,YACrGlqT,KAAKM,OAAOqkuB,aAAaY,mBAAmB37a,EAAUxpP,EAAW8kqB,EAAcI,IASnFb,EAAUppuB,UAAU0puB,kBAAoB,SAAU3kqB,GAC9C,IAAIolqB,EAAcxluB,KAAKM,OAAOijE,WAAWyrjB,aACzC,OAAO,IAAIxrjB,IAAcE,KAAM8hqB,IAAevhqB,cAAa,IAAIZ,IAAQQ,MAAM,OAAQ,QAASzD,IAAY,IAS9GqkqB,EAAUppuB,UAAU+puB,oBAAsB,SAAUhlqB,GAChD,IAAIqlqB,EAAgBzluB,KAAKM,OAAOijE,WAAW0qjB,eAC3C,OAAO,IAAIzqjB,IAAcE,KAAM+hqB,IAAiBxhqB,cAAa,IAAIZ,IAAQQ,MAAM,OAAQ,QAASzD,IAAY,IAMhHqkqB,EAAUppuB,UAAUqquB,gBAAkB,SAAUzluB,EAAM0luB,GAIlD,IAAK,IAHDC,KACAC,KAEKznuB,EAAK,EAAG2ijB,KADH1/iB,MAAMC,KAAKqkuB,EAAQ3kuB,QAAQQ,iBAAiB,OAC1BpD,EAAK2ijB,EAAOtkjB,OAAQ2B,IAAM,CACtD,IAAI4C,EAAU+/iB,EAAO3ijB,GAChB4C,EAAQ2B,cAAc,gBAAgBkZ,YAAYjG,cAAerX,QAAQ0B,EAAKjD,MAAM4Y,gBAAkB,EACvGgwtB,EAAWphuB,KAAKxD,GAGhB6kuB,EAAcrhuB,KAAKxD,GAG3B2kuB,EAAQtsa,YAAYusa,GACpBD,EAAQvsa,aAAaysa,IAEzBpB,EAAUppuB,UAAUgquB,YAAc,SAAUlT,EAAWlB,EAASkU,GAE5D,IAAK,IADDtioB,KACKzkG,EAAK,EAAG0nuB,EAAY7U,EAAS7ytB,EAAK0nuB,EAAUrpuB,OAAQ2B,IAAM,CAC/D,IAAIizF,EAASy0oB,EAAU1nuB,GACnBrB,GACAuG,GAAI+tF,EAAOixM,cACX7qQ,KAAM45D,EAAOixM,cACbyjc,eAAe5T,GAEfgT,EAAY5muB,QAAQ8yF,EAAOixM,gBAAkB,IAC7CvlS,EAAIgpuB,gBAAgB5T,GAExBtvnB,EAAKr+F,KAAKzH,GAEd,OAAO8lG,GAEJ4hoB,KCzHPuB,GAAmC,WAKnC,SAASA,EAAkB1luB,GACvBN,KAAKM,OAASA,EAqDlB,OA3CA0luB,EAAkB3quB,UAAU4quB,gBAAkB,SAAUhmuB,EAAMmgE,GAC1D,IAAI8lqB,EAAe,GACfC,GAAc,EACdh/tB,EAAStB,EAAQ5F,EAAKkH,OAAQ,IAAMi/tB,IACpCC,GAAmB,EAMvB,GALIl/tB,IACA++tB,EX6EgB,WW7ED/+tB,EAAOrD,UAAU,GAC5B,OAASqD,EAAOrD,UAAU,KAAOwiuB,GAAwB,UXgF3C,aWhFuDn/tB,EAAOrD,UAAU,GACtF,SAAWqD,EAAOrD,UAAU,KAAOyiuB,GAAwB,UAAY,IAE3EtmuB,EAAK44B,QAA2B,KAAjBqtsB,EAEf,OADAC,GAAc,EAGlB,GAAqB,KAAjBD,EAAqB,CACrB,GAAoE,oBAAhElmuB,KAAKM,OAAOy5tB,aAAa/J,UAAU5vpB,GAAW8vpB,eAAwD,WAAjBgW,EAA2B,CAChH,IAAIhmsB,EAAQlgC,KAAKM,OAAOo4E,UAAU3E,YAAY,WAC1C7hC,EAAclyC,KAAKM,OAAOo4E,UAAU3E,YAAY,cAGpD,OAFA/zE,KAAKM,OAAOkmuB,YAAYC,kBAAkBvmsB,EAAOgS,GACjDi0rB,GAAc,EAGlBE,EAAkBrmuB,KAAK0muB,kBAAkBzmuB,EAAKkH,OAAQ++tB,GAG1D,OADAlmuB,KAAKM,OAAO2+tB,iBAAiBhtQ,iBAAiB7xZ,EAAW8lqB,EAAcG,GAChEF,GAEXH,EAAkB3quB,UAAUqruB,kBAAoB,SAAUv/tB,EAAQ++tB,GAC9D,IAAIG,GAAmB,EACnBM,EAAY9guB,EAAQsB,EAAQ,IAAMy/tB,IACtC,IAAKnpuB,EAAkBkpuB,GAAY,CAC/BA,EAAYA,EAAUhkuB,cAAc,IAAM27tB,IAG1C,IAAK,IAFDuI,EAAY7muB,KAAKM,OAAOU,QAAQ2B,cAAc,MAAQujuB,GACtDY,KAAkBzluB,MAAMC,KAAKuluB,EAAUrluB,iBAAiB,IAAM88tB,KACzDniuB,EAAI,EAAGwuJ,EAAIm8kB,EAAarquB,OAAQN,EAAIwuJ,EAAGxuJ,IAC5C,GAAI2quB,EAAa3quB,GAAGmH,KAAOqjuB,EAAUrjuB,GAAI,CACrC+iuB,EAAkBlquB,EAClB,OAIZ,OAAOkquB,GAEJL,KC7DPe,GAAkC,WAKlC,SAASA,EAAiBzmuB,GACtBN,KAAKM,OAASA,EAuFlB,OA5EAymuB,EAAiB1ruB,UAAU42d,iBAAmB,SAAU7xZ,EAAW8lqB,EAAcG,GAC7E,IAAIW,EAAiBhnuB,KAAKinuB,sBAAsB7mqB,EAAUlzD,YAK1D,GAH4B,qBAD5B85tB,EAAiBA,GAAkChnuB,KAAKknuB,YAAY9mqB,EAAUlzD,aAC3DxG,MAA+C,KAAjBw/tB,IAC7CA,EAAe,UAEfc,EACA,OAAQd,GACJ,IAAK,WACoB,IAArBG,EACIrmuB,KAAKM,OAAOijE,WAAW2qH,QAAQ7lK,OAAOg+sB,EAAiB,EAAGW,GAC1DhnuB,KAAKM,OAAOijE,WAAW2qH,QAAQ1pL,KAAKwiuB,GACxC,MACJ,IAAK,QACoB,IAArBX,EACIrmuB,KAAKM,OAAOijE,WAAWg1N,KAAKlwQ,OAAOg+sB,EAAiB,EAAGW,GACvDhnuB,KAAKM,OAAOijE,WAAWg1N,KAAK/zR,KAAKwiuB,GACrC,MACJ,IAAK,WACoB,IAArBX,EACIrmuB,KAAKM,OAAOijE,WAAWxF,QAAQ11C,OAAOg+sB,EAAiB,EAAGW,GAC1DhnuB,KAAKM,OAAOijE,WAAWxF,QAAQv5D,KAAKwiuB,GACxC,MACJ,IAAK,UACoB,IAArBX,EACIrmuB,KAAKM,OAAOijE,WAAWxwC,OAAO1K,OAAOg+sB,EAAiB,EAAGW,GACzDhnuB,KAAKM,OAAOijE,WAAWxwC,OAAOvuB,KAAKwiuB,KAYvDD,EAAiB1ruB,UAAU4ruB,sBAAwB,SAAU7mqB,GAQzD,IAAK,IAPD4mqB,EACAG,GAAe,EAKfv7sB,GAJO5rB,KAAKM,OAAOijE,WAAWg1N,KACpBv4R,KAAKM,OAAOijE,WAAWxF,QACxB/9D,KAAKM,OAAOijE,WAAWxwC,OACtB/yB,KAAKM,OAAOijE,WAAW2qH,SAE5BrsL,EAAM,EAAG+ttB,EAAMhksB,EAAOnvB,OAAQoF,EAAM+ttB,EAAK/ttB,IAC9C,IAAKsluB,GAAgBv7sB,EAAO/pB,GACxB,IAAK,IAAI1F,EAAI,EAAGwuJ,EAAI/+H,EAAO/pB,GAAKpF,OAAQN,EAAIwuJ,EAAGxuJ,IAC3C,GAAIyvB,EAAO/pB,GAAK1F,GAAGs7B,OAAS2oC,EAAW,CACnC4mqB,EAAiBp7sB,EAAO/pB,GAAK1F,GAC7ByvB,EAAO/pB,GAAKwmB,OAAOlsB,EAAG,GACtBgruB,GAAe,EACf,MAKhB,OAAOH,GASXD,EAAiB1ruB,UAAU6ruB,YAAc,SAAU9mqB,GAC/C,IAAIr0C,EAAQ/rB,KAAKM,OAAOy5tB,aAAa/J,UAAU5vpB,GAM/C,OAJI3oC,KAAM2oC,EACN4ikB,QAASj3mB,EAAMi3mB,QACft8nB,KAAMqlB,EAAMmksB,gBAIb6W,KC1FPK,GAA6B,WAK7B,SAASA,EAAY9muB,GACjBN,KAAKM,OAASA,EA4ClB,OApCA8muB,EAAY/ruB,UAAUoruB,kBAAoB,SAAUvmsB,EAAOgS,GACvD,IAAIs0rB,EAAcrluB,EAAc,OAC5BmC,GAAItD,KAAKM,OAAO4pT,SAAW,eAC3B7mT,UAAWgkuB,KAEfrnuB,KAAKM,OAAOU,QAAQW,YAAY6kuB,GAChCxmuB,KAAKsnuB,WAAa,IAAIxinB,IAClB8E,mBAAqB5xF,OAAQ,QAC7BgvF,eAAe,EACfpiC,OAAQ1kD,EACR9F,QAAS8X,EACTszE,SAAS,EACThuF,SAAS,EACTmvF,eAAe,EACfzzG,UAAWlT,KAAKM,OAAO4S,UACvB8C,MAAO,OACPD,OAAQ,OACR7B,UAAYkC,EAAG,SAAUC,EAAG,UAC5B8vG,UAEQE,MAAOrmH,KAAKunuB,iBAAiBjsuB,KAAK0E,MAClComH,aAAenzG,SAAUu0tB,GAAqBptsB,QAASp6B,KAAKM,OAAOo4E,UAAU3E,YAAY,MAAOiqC,WAAW,KAGnHgI,eAAe,EACf7+G,OAAQ3G,SAASuL,KACjB9J,MAAOjC,KAAKynuB,kBAAkBnsuB,KAAK0E,QAEvCA,KAAKsnuB,WAAWjxrB,SAASmwrB,IAE7BY,EAAY/ruB,UAAUksuB,iBAAmB,WACrCvnuB,KAAKsnuB,WAAW/lpB,QAEpB6lpB,EAAY/ruB,UAAUosuB,kBAAoB,WACtCljuB,EAAO/D,SAASosB,eAAe5sB,KAAKM,OAAO4pT,SAAW,gBAAgB71S,gBAEnE+ytB,KChDPM,GAA8B,WAK9B,SAASA,EAAapnuB,GAClBN,KAAKM,OAASA,EAuKlB,OA/JAonuB,EAAarsuB,UAAUkquB,mBAAqB,SAAU37a,EAAUxpP,EAAW8kqB,EAAc/9tB,GACrF,IAAIwguB,EAAexmuB,EAAc,OAC7BmC,GAAItD,KAAKM,OAAO4pT,SAAW,kBAC3B7mT,Ud2D4B,2BczDhCrD,KAAKM,OAAOU,QAAQW,YAAYgmuB,GAChC3nuB,KAAK4kuB,YAAc,IAAI9/mB,IACnB8E,mBAAqB5xF,OAAQ,QAC7BgvF,eAAe,EACfpiC,OAAQsgpB,EACR9qsB,QAASp6B,KAAK4nuB,eAAeh+a,EAAUs7a,GACvC1/mB,QAAoC,UAA3BxlH,KAAKM,OAAOunuB,cAAgC7nuB,KAAKM,OAAOg/tB,WACjE9nsB,SAAS,EACTmvF,eAAe,EACfzzG,UAAWlT,KAAKM,OAAO4S,UACvB8C,MAAO,OACPD,OAAQ,QACR7B,UAAYkC,EAAG,SAAUC,EAAG,UAC5B8vG,UACQC,aACInzG,SAAUu0tB,GAAqBptsB,QAASp6B,KAAKM,OAAOo4E,UAAU3E,YAAY,MAAOiqC,WAAW,KAIhGqI,MAAOrmH,KAAK8nuB,kBAAkBxsuB,KAAK0E,MACnComH,aAAenzG,SAAU80tB,GAAyB3tsB,QAASp6B,KAAKM,OAAOo4E,UAAU3E,YAAY,aAErGiyC,eAAe,EACf7+G,OAAQA,EACRlF,MAAOjC,KAAKgouB,mBAAmB1suB,KAAK0E,QAExCA,KAAK4kuB,YAAYvurB,SAASsxrB,GAC1B3nuB,KAAKiouB,sBAETP,EAAarsuB,UAAUusuB,eAAiB,SAAUh+a,EAAUs7a,GACxD,IAAInluB,EAAQC,KACRkouB,EAAoB/muB,EAAc,OAClCmC,GAAItD,KAAKM,OAAO4pT,SAAW,YAC3B7mT,UAAW8kuB,KAEXpsqB,EAAgB56D,EAAc,OAC9BmC,GAAItD,KAAKM,OAAO4pT,SAAW,aAAczmT,OAASutH,SAAY,MAC9D3tH,UAAW+kuB,KAEXC,EAAelnuB,EAAc,SAAWsC,OAASiD,KAAQ,UAC7Dq1D,EAAcp6D,YAAY0muB,GAC1B,IAAIC,EAAmBnnuB,EAAc,OACjCmC,GAAItD,KAAKM,OAAO4pT,SAAW,UAAWzmT,OAASutH,SAAY,MAC3D3tH,Ud8I0B,yBc5I1BkluB,EAAqBpnuB,EAAc,OAASkC,Ud8I1B,iBc7IlBmluB,EAAoBrnuB,EAAc,OAASkC,UAAWoluB,KACtDC,EAAYvnuB,EAAc,OAC1BkC,UAAWsluB,mBAA+BC,GAC1C5muB,UAAWhC,KAAKM,OAAOo4E,UAAU3E,YAAY,eAEjDu0pB,EAAiB3muB,YAAY4muB,GAC7BL,EAAkBvmuB,YAAYo6D,GAC9BmsqB,EAAkBvmuB,YAAY2muB,GAC9BJ,EAAkBvmuB,YAAY+muB,GAC9B1ouB,KAAKqouB,aAAe,IAAI9pmB,IACpBz3G,YAAa9mB,KAAKM,OAAOo4E,UAAU3E,YAAY,UAAY,IAAMmxpB,EACjEhytB,UAAWlT,KAAKM,OAAO4S,UACvBD,Sd6HqB,kBc5HrBmN,OAAQ,SAAUvf,GACdd,EAAMO,OAAOuouB,UAAUnD,gBAAgB7kuB,EAAGd,EAAM+ouB,gBAChD,IAAInE,EAAe5kuB,EAAM6kuB,YAAY5juB,QACjCivT,KAAY5uT,MAAMC,KAAKvB,EAAM+ouB,eAAe9nuB,QAAQQ,iBAAiB,OACrEunuB,KAAkB1nuB,MAAMC,KAAKvB,EAAM+ouB,eAAe9nuB,QAAQQ,iBAAiB,IAAMonuB,KACjF34a,EAAOxzT,SAAWssuB,EAAatsuB,QAC/BsD,EAAMipuB,gBAAgB5va,cAAcr5T,EAAMipuB,gBAAgBhouB,QAAQ2B,cAAc,QAChFgiuB,EAAahiuB,cAAc,IAAM6kuB,IAAqBhkuB,aAAa,WAAY,YAC/Ea,GAAaqkuB,GAAYE,MAGzB7ouB,EAAMipuB,gBAAgB3va,aAAat5T,EAAMipuB,gBAAgBhouB,QAAQ2B,cAAc,QAC/EgiuB,EAAahiuB,cAAc,IAAM6kuB,IAAqB97tB,gBAAgB,YACtE/H,GAAU+kuB,GAAYE,KAE1B7ouB,EAAMkouB,wBAGdjouB,KAAKqouB,aAAahyrB,SAASgyrB,GAgB3B,OAdArouB,KAAKgpuB,gBAAkB,IAAI5hb,IACvBx7R,QAAU23C,aAFAjgE,GAAI,MAAOm0B,KAAM,MAAOsusB,eAAe,IAErBziuB,GAAI,KAAMmpB,KAAM,OAAQ0sK,UAAW,iBAC/DvC,cAAc,EACd1jL,UAAWlT,KAAKM,OAAO4S,YAE3BlT,KAAKgpuB,gBAAgB3yrB,SAASkyrB,GAC9BL,EAAkBvmuB,YAAY6muB,GAC9BxouB,KAAK8ouB,eAAiB,IAAI1hb,IACtBx7R,QAAU23C,WAAYqmP,EAAUtmT,GAAI,KAAMmpB,KAAM,OAAQ0sK,UAAW,iBACnEvC,cAAc,EACd1jL,UAAWlT,KAAKM,OAAO4S,UACvB+1tB,aAAcjpuB,KAAKkpuB,iBAAiB5tuB,KAAK0E,QAE7CA,KAAK8ouB,eAAezyrB,SAASmyrB,GACtBN,GAEXR,EAAarsuB,UAAU6tuB,iBAAmB,SAAUrouB,GAC5CA,EAAEN,KAAKuD,UAAUK,SAASykuB,MAC1B/nuB,EAAEg4B,QAAS,IAUnB6usB,EAAarsuB,UAAU4suB,mBAAqB,WACxC,IAAItD,EAAe3kuB,KAAK4kuB,YAAY5juB,QAChC6hG,KAAUxhG,MAAMC,KAAKtB,KAAK8ouB,eAAe9nuB,QAAQQ,iBAAiB,OAClE2nuB,EAAetmoB,EAAK77D,OAAO,SAAUzmC,GACrC,OAASA,EAAKuD,UAAUK,SAASykuB,MAEjCQ,EAAiBppuB,KAAKqpuB,kBAAkBF,GACxCrgb,EAAe9oT,KAAKspuB,gBAAgBH,GACpCj8a,EAAYltT,KAAKgpuB,gBAAgBhouB,QAAQ2B,cAAc,MAAMA,cAAc,gBAC3EmmT,EAAarsT,OAAS,GAClB2suB,EAAe3suB,OAAS,GACxB4H,GAAa6oT,GAAYq8a,IACzB5luB,GAAUupT,GdpDG,WcsDkB,IAA1Bk8a,EAAe3suB,SACpB4H,GAAa6oT,GdvDA,UcwDbvpT,GAAUupT,GAAYq8a,KAE1B5E,EAAahiuB,cAAc,IAAM6kuB,IAAqB97tB,gBAAgB,aAEjE09tB,EAAe3suB,OAAS,GAA6B,IAAxBqsT,EAAarsT,SAC/C4H,GAAa6oT,IAAaq8a,Gd7DT,Wc8DbvpuB,KAAKspuB,gBAAgBzmoB,GAAMpmG,SAAWqsT,EAAarsT,QACnDkouB,EAAahiuB,cAAc,IAAM6kuB,IAAqBhkuB,aAAa,WAAY,cAI3FkkuB,EAAarsuB,UAAUiuuB,gBAAkB,SAAUE,GAI/C,OAHkBA,EAAUxisB,OAAO,SAAUzmC,GACzC,OAAQA,EAAKoC,cAAc,YAAiCmB,UAAUK,SAASoluB,OAIvF7B,EAAarsuB,UAAUguuB,kBAAoB,SAAUG,GAIjD,OAHoBA,EAAUxisB,OAAO,SAAUzmC,GAC3C,OAASA,EAAKoC,cAAc,YAAiCmB,UAAUK,SAASoluB,OAIxF7B,EAAarsuB,UAAUysuB,kBAAoB,WACvC9nuB,KAAK4kuB,YAAYrjpB,QAErBmmpB,EAAarsuB,UAAU2suB,mBAAqB,WACpCxnuB,SAASosB,eAAe5sB,KAAKM,OAAO4pT,SAAW,oBAC/C3lT,EAAO/D,SAASosB,eAAe5sB,KAAKM,OAAO4pT,SAAW,qBAGvDw9a,KC3KP+B,GAA6B,WAQ7B,SAASA,EAAY92tB,GAgBjB,OAfA3S,KAAKgB,QAAU2R,EAAQ3R,QACvBhB,KAAK4S,WAAaD,EAAQC,WAC1B5S,KAAKujE,WAAa5wD,EAAQ4wD,WAC1BvjE,KAAK+5tB,aAAepntB,EAAQ+2tB,YAC5B1puB,KAAKkT,UAAYP,EAAQO,UACzBlT,KAAKs/tB,WAAa3stB,EAAQ2stB,WAC1Bt/tB,KAAK6nuB,WAAal1tB,EAAQk1tB,WAC1B7nuB,KAAKkqT,SAAWv3S,EAAQrP,GACxBtD,KAAK04E,UAAY/lE,EAAQ+lE,UACzB14E,KAAK2puB,kBAAoB,IAAI3D,GAAkBhmuB,MAC/CA,KAAKi/tB,iBAAmB,IAAI8H,GAAiB/muB,MAC7CA,KAAK6ouB,UAAY,IAAIpE,GAAUzkuB,MAC/BA,KAAK2kuB,aAAe,IAAI+C,GAAa1nuB,MACrCA,KAAKwmuB,YAAc,IAAIY,GAAYpnuB,MACnCA,KAAK+5I,eAAiB,IAAIoqlB,GAA0BnkuB,MAC7CA,KAUX,OAHAypuB,EAAYpuuB,UAAUiX,QAAU,WAC5BtS,KAAK+5I,eAAeznI,WAEjBm3tB,KClCPG,GAAgC,WAEhC,SAASA,EAAetpuB,GACpBN,KAAKM,OAASA,EAyUlB,OAlUAspuB,EAAevuuB,UAAU0wG,OAAS,WAC9B,IAAI89nB,EAAoB1ouB,EAAc,OAClCmC,GAAItD,KAAKM,OAAOU,QAAQsC,GAAK,WAC7BD,UAAWrD,KAAKM,OAAO4S,UAAY42tB,GAAoB,SAAgBA,GACvEvmuB,OAAQ,SAAWvD,KAAKM,OAAOU,QAAQ0D,MAAMsR,QAE7ChW,KAAKM,OAAOg/tB,WACZ37tB,GAAUkmuB,GAAoBhI,IAG9Bx9tB,GAAawluB,GAAoBhI,IAEjC7huB,KAAKM,OAAO4S,UACZvP,GAAUkmuB,GhB3BL,SgB8BLxluB,GAAawluB,GhB9BR,SgBgCL7puB,KAAKM,OAAO2S,UACZtP,GAAUkmuB,GAAoB7puB,KAAKM,OAAO2S,UAE9CjT,KAAKqU,cAAgBlT,EAAc,OAASkC,UhBvBvB,2BgBwBrBrD,KAAKM,OAAOU,QAAQW,YAAYkouB,GAC5B7puB,KAAKM,OAAOg/tB,aACZuK,EAAkBn+tB,gBAAgB,SAClC1L,KAAKqU,cAAgBlT,EAAc,OAASkC,UhB+FlB,yBgB9F1BrD,KAAK+puB,qBAAqBF,IAEC,UAA3B7puB,KAAKM,OAAOunuB,YACZ7nuB,KAAKgquB,sBAAsBH,GAC3B7puB,KAAKiquB,kBAAkBjquB,KAAKM,OAAOU,QAAQ2B,cAAc,IAAM+7tB,KAC/D1+tB,KAAKkquB,gBAAgBlquB,KAAKM,OAAOU,QAAQ2B,cAAc,IAAM+7tB,MAG7D1+tB,KAAKmquB,mBAAmBN,IAGhCD,EAAevuuB,UAAU8uuB,mBAAqB,SAAUN,GACpD,IAAK7puB,KAAKM,OAAOg/tB,WAAY,CACzB,IAAI3oI,EAAex1lB,EAAc,OAC7BkC,UhB1BoB,uBgB4BpB2hH,EAAgB7jH,EAAc,OAC9BkC,UhB3B4B,kBgB4B5BrB,UAAWhC,KAAKM,OAAOo4E,UAAU3E,YAAY,qBAEjD4ihB,EAAah1lB,YAAYqjH,GACzB2xe,EAAah1lB,YAAY3B,KAAKoquB,0BAC9BzmuB,GAAUkmuB,GhB9Ce,YgB+CzBA,EAAkBlouB,YAAYg1lB,GAC9BkzI,EAAkBlouB,YAAY3B,KAAKqU,iBAG3Cu1tB,EAAevuuB,UAAU2uuB,sBAAwB,SAAUH,GACvD,IAAIQ,EAAkBlpuB,EAAc,OAChCkC,UAAWq7tB,GAA8B,IAAMtC,GAAW,kBAC1D34tB,OACIutH,SAAY,IACZ9wF,MAAOlgC,KAAKM,OAAOo4E,UAAU3E,YAAY,aACzCmiD,gBAAiB,QACjBxC,aAAc1zH,KAAKM,OAAOo4E,UAAU3E,YAAY,gBAIxD,GADA/zE,KAAKM,OAAOU,QAAQW,YAAY0ouB,GAC5BrquB,KAAKM,OAAOg/tB,WAAY,CACxBt/tB,KAAKsquB,gBAAkB,IAAIxlnB,IACvB8E,mBAAqB5xF,OAAQ,QAC7BoC,QAASp6B,KAAKqU,cACdmxG,SAAS,EACTmB,eAAe,EACfnvF,SAAS,EACTwvF,eAAe,EACfhB,eAAe,EACf9yG,UAAWlT,KAAKM,OAAO4S,UACvB8C,MAAO,OACPD,OAAQ,OACR7B,UAAYkC,EAAG,SAAUC,EAAG,UAC5B8vG,UACQE,MAAOrmH,KAAKuquB,oBAAoBjvuB,KAAK0E,MACrComH,aACInzG,SAAUu3tB,GAAuC,mBACjD92pB,QAAS0opB,WAAiBqO,GAC1BzsnB,WAAW,KAGfqI,MAAOrmH,KAAK0quB,oBAAoBpvuB,KAAK0E,MACrComH,aACInzG,SAAU03tB,GACN,oBAAoE/B,GACxEl1pB,QAAS0opB,WAAiBqO,GAC1BzsnB,WAAW,KAGfqI,MAAOrmH,KAAK4quB,iBAAiBtvuB,KAAK0E,MAClComH,aACIhsF,QAASp6B,KAAKM,OAAOo4E,UAAU3E,YAAY,SAC3C9gE,SAAU80tB,MAGtB5guB,OAAQ3G,SAASuL,KACjB9J,MAAOjC,KAAK6quB,oBAAoBvvuB,KAAK0E,QAEzCA,KAAKsquB,gBAAgBj0rB,SAASwzrB,GAC9B5juB,EAAkB4juB,EAAkBlnuB,cAAc,IAAMknuB,EAAkBvmuB,GAAK,oBAC3E81D,QAAW,MAEf,IAAIk0I,EAASu8hB,EAAkBlnuB,cAAc,qBAC7CgB,GAAU2pM,GAASw9hB,IACnBzmuB,GAAaipM,EAAO3qM,cAAc,IAAMgouB,KhBwBrB,UgBvBnBtmuB,GAAaipM,EAAO3qM,cAAc,IAAM6nuB,KhBuBrB,cgBrBlB,CACD,IAAInxiB,EAAiB,wDACer5L,KAAKM,OAAOo4E,UAAU3E,YAAY,aAAe,eACrF/zE,KAAKsquB,gBAAkB,IAAIxlnB,IACvB8E,mBAAqB5xF,OAAQ,QAC7B4sD,OAAQy0G,EACRj/J,QAASp6B,KAAKqU,cACdmxG,SAAS,EACTmB,eAAe,EACfnvF,SAAS,EACTwvF,eAAe,EACf9zG,UAAWlT,KAAKM,OAAO4S,UACvB8C,MAAOhW,KAAKM,OAAOU,QAAQ0D,MAAMsR,MACjC9B,UAAYkC,EAAG,SAAUC,EAAGrW,KAAKM,OAAOU,QAAQoT,WAChD+xG,UACQE,MAAOrmH,KAAK4quB,iBAAiBtvuB,KAAK0E,MAClComH,aACIhsF,QAASp6B,KAAKM,OAAOo4E,UAAU3E,YAAY,SAAU9gE,SAAU80tB,GAC/D/pnB,WAAW,KAGvBgI,eAAe,EACf7+G,OAAS1J,EAAkBuC,KAAKM,OAAO6G,QAC+B3G,SAASuL,KADG,iBAAxB/L,KAAKM,OAAO6G,OAClE3G,SAASmC,cAAc3C,KAAKM,OAAO6G,QAAUnH,KAAKM,OAAO6G,OAC7DlF,MAAOjC,KAAK6quB,oBAAoBvvuB,KAAK0E,QAEzCA,KAAKsquB,gBAAgBj0rB,SAASwzrB,GAC9B5juB,EAAkB4juB,EAAkBlnuB,cAAc,IAAMknuB,EAAkBvmuB,GAAK,WAAa0S,MAAS,SACrG6ztB,EAAkBlnuB,cAAc,mBAA8BhB,YAAY3B,KAAKoquB,4BAOvFR,EAAevuuB,UAAU42d,iBAAmB,SAAU7/Z,GAElD,IAAK,IADDj8C,GAAQ,UAAW,UAAW,OAAQ,UACjC/X,EAAK,EAAG2suB,EAAkB34qB,EAAeh0D,EAAK2suB,EAAgBtuuB,OAAQ2B,IAAM,CACjF,IACIgiE,EADQ2qqB,EAAgB3suB,GAExB8nuB,EAAe/vtB,EAAKnW,KAAKgruB,gBAAgBnpiB,cAC7C7hM,KAAKM,OAAO0+tB,YAAYC,iBAAiBhtQ,iBAAiB7xZ,EAAW8lqB,GAAe,GAExFlmuB,KAAKM,OAAOmhuB,gBAAgB11nB,SAC5B/rG,KAAKM,OAAO2xd,kBAAiB,IAEjC23Q,EAAevuuB,UAAU0uuB,qBAAuB,SAAUF,GACtD,IAAI9puB,EAAQC,KACRiruB,EAAe9puB,EAAc,OAC7BkC,UAAWynuB,KAEfjB,EAAkBlouB,YAAY3B,KAAKqU,eACnC,IAAIomD,IAEImqB,QAAUn4D,KAAQzsB,KAAKM,OAAOo4E,UAAU3E,YAAY,YACpD35C,QAASp6B,KAAKkruB,gBAAgB,aAG9BtmpB,QAAUn4D,KAAQzsB,KAAKM,OAAOo4E,UAAU3E,YAAY,YACpD35C,QAASp6B,KAAKkruB,gBAAgB,aAG9BtmpB,QAAUn4D,KAAQzsB,KAAKM,OAAOo4E,UAAU3E,YAAY,SACpD35C,QAASp6B,KAAKkruB,gBAAgB,UAG9BtmpB,QAAUn4D,KAAQzsB,KAAKM,OAAOo4E,UAAU3E,YAAY,WACpD35C,QAASp6B,KAAKkruB,gBAAgB,YAG9BtmpB,QAAUn4D,KAAQzsB,KAAKM,OAAOo4E,UAAU3E,YAAY,0BACpD35C,QAAS,gCAGZp6B,KAAKM,OAAO++tB,sBACb5kqB,EAAM2xF,MAEVpsJ,KAAKgruB,gBAAkB,IAAIjsb,IACvBwE,iBAAkB,OAClB9oP,MAAOA,EACP1kD,OAAQ,OACR7C,UAAWlT,KAAKM,OAAO4S,UACvBs8H,SAAU,SAAU3uI,GACZgpuB,EAAkBlnuB,cAAc,IAAM6nuB,MACd,IAApB3puB,EAAE65D,eACF/2D,GAAUkmuB,EAAkBlnuB,cAAc,IAAMgouB,KAA8C/B,IAC9FvkuB,GAAawluB,EAAkBlnuB,cAAc,IAAM6nuB,KAAwC5B,MAG3FvkuB,GAAawluB,EAAkBlnuB,cAAc,IAAMgouB,KAA8C/B,IACjGjluB,GAAUkmuB,EAAkBlnuB,cAAc,IAAM6nuB,KAAwC5B,MAGxE,IAApB/nuB,EAAE65D,eACF36D,EAAMiruB,gBAAgBvwqB,MAAM,GAAGrgC,QAAU,GACzCr6B,EAAMiruB,gBAAgBp/qB,WACtB7rD,EAAMO,OAAOyN,OAAOo9tB,QAGpBpruB,EAAMO,OAAOmhuB,gBAAgB11nB,YAIV,UAA3B/rG,KAAKM,OAAOunuB,YACZoD,EAAatpuB,YAAY3B,KAAKoruB,mBAC9BznuB,GAAUkmuB,GhBtNe,YgBuNzB7puB,KAAKgruB,gBAAgB30rB,SAASr2C,KAAKqU,eACnCrU,KAAKqU,cAAc1S,YAAYspuB,IAG/BjruB,KAAKgruB,gBAAgB30rB,SAASr2C,KAAKqU,gBAG3Cu1tB,EAAevuuB,UAAU+uuB,uBAAyB,WAC9C,IAAIiB,EAAmBlquB,EAAc,OACjCmC,GAAItD,KAAKM,OAAOU,QAAQsC,GAAK,qBAE7BgouB,EAAiB,IAAIvtnB,IACrB9qG,SAAUs4tB,sBAAmC3C,GAC7CxusB,QAASp6B,KAAKM,OAAOo4E,UAAU3E,YAAY,mBAC3C7gE,UAAWlT,KAAKM,OAAO4S,YAO3B,OALAo4tB,EAAej1rB,SAASg1rB,GACpBrruB,KAAKM,OAAOkruB,uBACZnnuB,GAAagnuB,GAAmBzC,IAEpC0C,EAAetquB,QAAQ+yX,QAAU/zX,KAAK0quB,oBAAoBpvuB,KAAK0E,MACxDqruB,GAEXzB,EAAevuuB,UAAU+vuB,gBAAkB,WACvC,IAAIK,EAAkBtquB,EAAc,OAChCkC,UAAWynuB,GAA8B,aAEzCY,EAAkBvquB,EAAc,UAChCkquB,EAAmBlquB,EAAc,UACjCmquB,EAAiB,IAAIvtnB,IACrB9qG,SAAU03tB,GACN,oBAAoE/B,GACxEl1pB,QAAS0opB,WAAiBqO,GAC1Bv3tB,UAAWlT,KAAKM,OAAO4S,YAEvB88sB,EAAY,IAAIjymB,IAChB9qG,SAAUu3tB,GAAuC,mBACjD92pB,QAAS0opB,WAAiBqO,GAC1Bv3tB,UAAWlT,KAAKM,OAAO4S,YAQ3B,OANA88sB,EAAU35qB,SAASq1rB,GACnBJ,EAAej1rB,SAASg1rB,GACxBI,EAAgB9puB,YAAY+puB,GAC5BD,EAAgB9puB,YAAY0puB,GAC5BC,EAAetquB,QAAQ+yX,QAAU/zX,KAAK0quB,oBAAoBpvuB,KAAK0E,MAC/DgwtB,EAAUhvtB,QAAQ+yX,QAAU/zX,KAAKuquB,oBAAoBjvuB,KAAK0E,MACnDyruB,GAEX7B,EAAevuuB,UAAU6vuB,gBAAkB,SAAU/0tB,GACjD,IAAIw1tB,EAAcxquB,EAAc,OAC5BkC,UAAWuouB,GAAuB,IAAMz1tB,IAExC01tB,EAAc1quB,EAAc,OAASkC,UAAWyouB,GAAyB,MAAa31tB,IACtF41tB,EAAa5quB,EAAc,QAC3BkC,UAAW2ouB,GACXhquB,UAAWhC,KAAKM,OAAOo4E,UAAU3E,YAAY,eAIjD,OAFA43pB,EAAYhquB,YAAYkquB,GACxBF,EAAYhquB,YAAYoquB,GACjBJ,GAEX/B,EAAevuuB,UAAUqvuB,oBAAsB,SAAUpuuB,GAChD0D,KAAKM,OAAOg/tB,YACTt/tB,KAAKM,OAAO2ruB,eAAe3B,kBAC3BtquB,KAAKM,OAAO2ruB,eAAe3B,gBAAgB/opB,OAC3C59E,GAAU3D,KAAKM,OAAOU,QAAQ2B,cAAc,IAAM+7tB,KhBhSzC,WgBmSjB1+tB,KAAKM,OAAOyN,OAAOo9tB,QAEvBvB,EAAevuuB,UAAUkvuB,oBAAsB,SAAUjuuB,GACrD,IAAI4vuB,EAAclsuB,KAAKgruB,gBAAgBnpiB,aACvC7hM,KAAKM,OAAO6ruB,eAAepgoB,OAAOmgoB,IAEtCtC,EAAevuuB,UAAU+wuB,gBAAkB,WACvCzouB,GAAU3D,KAAKM,OAAOU,QAAQ2B,cAAc,IAAM+7tB,KhB1SjC,UgB2SjB1+tB,KAAKM,OAAO2ruB,eAAe3B,gBAAgBrmnB,OAC3CjkH,KAAKM,OAAO2ruB,eAAe3B,gBAAgBtpuB,QAAQ0D,MAAMgI,IACrDqoB,SAAS/0B,KAAKM,OAAO2ruB,eAAe3B,gBAAgBtpuB,QAAQ0D,MAAMgI,IAAK,IAAM,EACzE,MAAQ1M,KAAKM,OAAO2ruB,eAAe3B,gBAAgBtpuB,QAAQ0D,MAAMgI,KAE7Ek9tB,EAAevuuB,UAAUuvuB,iBAAmB,WACxC5quB,KAAKM,OAAO2ruB,eAAe3B,gBAAgB/opB,QAE/CqopB,EAAevuuB,UAAUwvuB,oBAAsB,WACtCrquB,SAASosB,eAAe5sB,KAAKM,OAAOU,QAAQsC,GAAK,qBAClDe,GAAarE,KAAKM,OAAOU,QAAQ2B,cAAc,IAAM+7tB,KhBrTxC,WgBwTrBkL,EAAevuuB,UAAU+3pB,SAAW,SAAUvypB,GAC7BA,EAAEsG,OACf,GAAkB,KAAdtG,EAAEinB,SAAkBjnB,EAAEsG,OAGtB,OAFAtG,EAAEsG,OAAOk/G,aACTxlH,EAAE2kB,kBAIVoktB,EAAevuuB,UAAU6uuB,gBAAkB,SAAUlpuB,GACjDuE,GAAanB,IAAIpD,EAAS,UAAWhB,KAAKozpB,SAAUpzpB,MACpDuF,GAAanB,IAAIpD,EAAS,QAAShB,KAAKosuB,gBAAiBpsuB,OAE7D4puB,EAAevuuB,UAAU4uuB,kBAAoB,SAAUjpuB,GACnDuE,GAAahB,OAAOvD,EAAS,UAAWhB,KAAKozpB,UAC7C7tpB,GAAahB,OAAOvD,EAAS,QAAShB,KAAKosuB,kBAExCxC,KC5UPyC,GAAkC,WAElC,SAASA,EAAiB/ruB,GACtBN,KAAKoyD,iBACLpyD,KAAKM,OAASA,EACdN,KAAKtD,mBAoUT,OA7TA2vuB,EAAiBhxuB,UAAU0wG,OAAS,SAAU51F,GAE1C,GADAnW,KAAKqU,cAAgBrU,KAAKM,OAAO2ruB,eAAe53tB,cAC3CrU,KAAKM,OAAOg/tB,WAyBbt/tB,KAAKssuB,iBAAiBn2tB,OAzBG,CACzB,IAAIo2tB,EAAapruB,EAAc,OAASkC,UjBCrB,kBiBAfmpuB,EAAarruB,EAAc,OAC3BkC,UjBKgB,iBiBJhBrB,UAAWhC,KAAKM,OAAOo4E,UAAU3E,YAAY,eASjD,GAPA/zE,KAAKysuB,gBAAkBtruB,EAAc,OACjCmC,GAAItD,KAAKM,OAAOU,QAAQsC,GAAK,YAC7BD,UAAWuouB,KAEfW,EAAW5quB,YAAY6quB,GACvBD,EAAW5quB,YAAY3B,KAAKysuB,iBAC5BzsuB,KAAKqU,cAAc1S,YAAY4quB,GACA,UAA3BvsuB,KAAKM,OAAOunuB,WAAwB,CACpC,IAAI6E,EAAYvruB,EAAc,OAASkC,UjBoHlB,iBiBnHjBspuB,EAAaxruB,EAAc,OAC3BkC,UjBoHoB,iBiBnHpBrB,UAAWhC,KAAKM,OAAOo4E,UAAU3E,YAAY,kBAEjD/zE,KAAKqU,cAAc1S,YAAY+quB,GAC/B1suB,KAAKqU,cAAc1S,YAAYgruB,GAEnC3suB,KAAK4suB,mBAMbP,EAAiBhxuB,UAAUuxuB,eAAiB,WACxC5suB,KAAKusuB,WAAa,IAAInlb,IAClBx7R,QAAU23C,WAAYvjE,KAAKqluB,cAAe/huB,GAAI,KAAMmpB,KAAM,UAAW0sK,UAAW,cAChF0ziB,YAAa7suB,KAAK8suB,gBAAgBxxuB,KAAK0E,MACvCiT,SjB1BuB,oBiB2BvB2jL,cAAc,EACduyH,kBAAkB,EAClBvxH,UAAW,YACX1kL,UAAWlT,KAAKM,OAAO4S,UACvB65tB,cAAe/suB,KAAKyvG,UAAUn0G,KAAK0E,MACnCgtuB,aAAchtuB,KAAK+xG,SAASz2G,KAAK0E,QAErCA,KAAKysuB,gBAAgBzquB,UAAY,GACjChC,KAAKusuB,WAAWl2rB,SAASr2C,KAAKysuB,iBAC9BzsuB,KAAKituB,iBAETZ,EAAiBhxuB,UAAUixuB,iBAAmB,SAAUn2tB,GACpD,IAAIpW,EAAQC,KACRsquB,EAAkBnpuB,EAAc,OAChCmC,GAAItD,KAAKM,OAAOU,QAAQsC,GAAK,qBAC7BD,UjBsFkC,iCiBpFtCrD,KAAKqU,cAAc1S,YAAY2ouB,GAC/BtquB,KAAKktuB,YAAc,IAAIponB,IACnB8E,mBAAqB5xF,OAAQ,QAC7BgvF,eAAe,EACfpiC,OAAQ5kF,KAAKM,OAAOo4E,UAAU3E,YAAY,uBAC1C35C,QAASp6B,KAAK4nuB,eAAe5nuB,KAAKqluB,YAAYlvtB,IAC9CqvG,SAAS,EACThuF,SAAS,EACTmvF,eAAe,EACfzzG,UAAWlT,KAAKM,OAAO4S,UACvB8C,MAAO,OACPD,OAAQ,QACR7B,UAAYkC,EAAG,SAAUC,EAAG,UAC5B8vG,UACQE,MAAOrmH,KAAKmtuB,gBAAgB7xuB,KAAK0E,MACjComH,aACInzG,SAAU80tB,GAAyB3tsB,QAASp6B,KAAKM,OAAOo4E,UAAU3E,YAAY,aAGlFsyC,MAAOrmH,KAAKotuB,WAAW9xuB,KAAK0E,MAC5BomH,aACInzG,SAAUu0tB,GAAqBptsB,QAASp6B,KAAKM,OAAOo4E,UAAU3E,YAAY,OAC1EiqC,WAAW,KAGvBgI,eAAe,EACf7+G,OAAQnH,KAAKqU,cAAcA,cAC3BpS,MAAO,WACCzB,SAASosB,eAAe7sB,EAAMO,OAAOU,QAAQsC,GAAK,uBAClDiB,EAAO/D,SAASosB,eAAe7sB,EAAMO,OAAOU,QAAQsC,GAAK,0BAIrEtD,KAAKktuB,YAAY72rB,SAASi0rB,IAE9B+B,EAAiBhxuB,UAAUusuB,eAAiB,SAAUh+a,GAClD,IAAI7pT,EAAQC,KACRkouB,EAAoB/muB,EAAc,OAClCmC,GAAItD,KAAKM,OAAOU,QAAQsC,GAAK,YAC7BD,UAAW8kuB,KAEXpsqB,EAAgB56D,EAAc,OAC9BmC,GAAItD,KAAKM,OAAOU,QAAQsC,GAAK,aAAcG,OAASutH,SAAY,MAChE3tH,UAAW+kuB,KAEXC,EAAelnuB,EAAc,SAAWsC,OAASiD,KAAQ,UAC7Dq1D,EAAcp6D,YAAY0muB,GAC1B,IAAIG,EAAoBrnuB,EAAc,OAASkC,UAAWoluB,KAoB1D,OAnBAP,EAAkBvmuB,YAAYo6D,GAC9B/7D,KAAKqouB,aAAe,IAAI9pmB,IACpBz3G,YAAa9mB,KAAKM,OAAOo4E,UAAU3E,YAAY,UAC/C7gE,UAAWlT,KAAKM,OAAO4S,UACvBD,SjBoFqB,kBiBnFrBmN,OAAQ,SAAUvf,GACdd,EAAMO,OAAO0+tB,YAAY6J,UAAUnD,gBAAgB7kuB,EAAGd,EAAMwsuB,eAGpEvsuB,KAAKqouB,aAAahyrB,SAASgyrB,GAC3BH,EAAkBvmuB,YAAY6muB,GAC9BxouB,KAAKusuB,WAAa,IAAInlb,IAClBx7R,QAAU23C,WAAYqmP,EAAUtmT,GAAI,KAAMmpB,KAAM,UAAW0sK,UAAW,cACtEvC,cAAc,EACdgB,UAAW,YACX1kL,UAAWlT,KAAKM,OAAO4S,UACvB25tB,YAAa7suB,KAAK24c,QAAQr9c,KAAK0E,QAEnCA,KAAKusuB,WAAWl2rB,SAASmyrB,GAClBN,GAEXmE,EAAiBhxuB,UAAUo0G,UAAY,SAAUxvG,GAC7C,GAAIA,EAAK3D,MAAM6K,OAAOrD,UAAUK,SjBlEhB,UiBkE0C,CACtDnE,KAAKM,OAAO2guB,YAAa,EACzBt9tB,GAAU1D,EAAKy0T,YAAY/xT,cAAc,IAAM0quB,KAAuBC,IACtE,IAAI9wuB,EAAOwD,KAAKM,OAAOy5tB,aAAa/J,UAAU/vtB,EAAKy0T,YAAY7hT,aAAa,aACxEsD,GjB5CY,SiB4CgBmwtB,GAAuBC,IACvD,GAAI/puB,GAA+B,oBAAvBA,EAAK0ztB,cACb,IAAK,IAAI9xtB,EAAK,EAAG0nU,EAAS3vT,EAAM/X,EAAK0nU,EAAOrpU,OAAQ2B,IAAM,CACtD,IAAIytuB,EAAc/la,EAAO1nU,GACzBuF,GAAU3D,KAAKqU,cAAc1R,cAAc,IAAMkpuB,IAAe0B,UAKxEttuB,EAAK44B,QAAS,GAGtBwzsB,EAAiBhxuB,UAAU02G,SAAW,SAAU9xG,GAC5CA,EAAK44B,QAAS,EACd74B,KAAKM,OAAO2guB,YAAa,EAEzB,IAAK,IAAI7iuB,EAAK,EAAGwoU,GjB5DG,SiB2DY0/Z,GAAuBC,IACvBnouB,EAAKwoU,EAAOnqU,OAAQ2B,IAAM,CACtD,IAAI8pU,EAActB,EAAOxoU,GACzBiG,GAAarE,KAAKqU,cAAc1R,cAAc,IAAMulU,IAAeqla,IAEvElpuB,GAAapE,EAAKy0T,YAAY/xT,cAAc,IAAM0quB,KAAuBC,IACrEttuB,KAAKM,OAAO0+tB,YAAY2F,aAAaC,aACrC5kuB,KAAKM,OAAO0+tB,YAAY2F,aAAaC,YAAY3iuB,QAErD,IAAIm+D,EAAYngE,EAAKw2T,gBAAgBnzT,GAAG4J,WACnClN,KAAKwtuB,cAAcvtuB,EAAMmgE,IAG1BpgE,KAAKM,OAAO0+tB,YAAY2K,kBAAkB1D,gBAAgBhmuB,EAAMmgE,KAChEpgE,KAAKM,OAAO2xd,mBACZjyd,KAAKM,OAAOmhuB,gBAAgB11nB,WAGpCsgoB,EAAiBhxuB,UAAUmyuB,cAAgB,SAAUvtuB,EAAM+qZ,GACvD,IAAIyiV,GAAY,EAChB,GAAuC,SAAnCxtuB,EAAKw2T,gBAAgBt9H,UAAsB,CAC3C,IAAIhyL,EAASnH,KAAK0tuB,UAAU1iV,GACxB67U,EAAYhhuB,EAAQsB,EAAQ,IAAMi/tB,IAClCuH,EAAmB9nuB,EAAQ5F,EAAKkH,OAAQ,IAAMi/tB,IAClD,GAAIj/tB,GAAU0/tB,IAAc8G,EAAkB,CAK1C,IAAK,IAJD7G,KAAkBzluB,MAAMC,KAAKuluB,EAAUrluB,iBAAiB,IAAM88tB,KAC9Dzpa,EAAahvT,EAAQ5F,EAAKkH,OAAQ,IAAMy/tB,IACxCgH,OAAiB,EACjBC,GAAgB,EACX1xuB,EAAI,EAAGwuJ,EAAIm8kB,EAAarquB,OAAQN,EAAIwuJ,EAAGxuJ,IAI5C,GAHI2quB,EAAa3quB,GAAGmH,KAAO6D,EAAO7D,KAC9BsquB,EAAiBzxuB,GAEjB04T,EAAY,CACZ,IAAIi5a,EAAkBj5a,EAAWlyT,cAAc,IAAM27tB,IACjDwI,EAAa3quB,GAAGmH,KAAOwquB,EAAgBxquB,KACvCuquB,EAAe1xuB,GAI3B,GAAIyxuB,IAAmBC,GAAiBD,IAAoB9G,EAAarquB,OAAS,IAAwB,IAAlBoxuB,EAAsB,CAC1G,IAAIx5tB,EAAgB7T,SAASosB,eAAe5sB,KAAKM,OAAOU,QAAQsC,GAAK,YACrEe,KAAehD,MAAMC,KAAK+S,EAAc7S,iBAAiB,IAAMusuB,KAA4BC,IAC3FP,GAAY,IAIxB,OAAOA,GAEXpB,EAAiBhxuB,UAAUqyuB,UAAY,SAAUttqB,GAI7C,IAAK,IADDwiiB,EAFAvwI,EAAiB7xd,SAASosB,eAAe5sB,KAAKM,OAAOU,QAAQsC,GAAK,YAClEwjuB,KAAkBzluB,MAAMC,KAAK+wd,EAAe7wd,iBAAiB,IAAM88tB,KAE9DniuB,EAAI,EAAGwuJ,EAAIm8kB,EAAarquB,OAAQN,EAAIwuJ,EAAGxuJ,IAC5C,GAAI2quB,EAAa3quB,GAAGmH,KAAO88D,EAAW,CAClCwiiB,EAAgBkkI,EAAa3quB,GAC7B,MAGR,OAAOymmB,GAEXypI,EAAiBhxuB,UAAUyxuB,gBAAkB,SAAU7suB,GAC/CD,KAAKM,OAAO0+tB,YAAY2F,aAAaC,aACrC5kuB,KAAKM,OAAO0+tB,YAAY2F,aAAaC,YAAY3iuB,QAErD,IAAI1B,EAAOsF,EAAQ5F,EAAKM,KAAM,IAAM0tuB,IAEhCz5R,EADOx0c,KAAKM,OAAO4tuB,eACCjuuB,EAAKzD,KAAK,GAAG8G,GAAG4J,YACxC,GAAoB,UAAhBjN,EAAKk2D,OAAoB,CACzBxyD,GAAUpD,EAAKoC,cAAc,IAAM0quB,KAAuBc,IAC1D,IAAIx1R,EAAU34c,KAAKM,OAAO0+tB,YAAYC,iBAAiBiI,YAAYjnuB,EAAKzD,KAAK,GAAG8G,GAAG4J,YAC7D,WAAtBsnc,EAAa9tc,KACT1G,KAAKM,OAAOijE,WAAWxwC,OAAOvuB,KAAKm0c,GAAW34c,KAAKM,OAAOijE,WAAWg1N,KAAK/zR,KAAKm0c,QAGnFt0c,GAAa9D,EAAKoC,cAAc,IAAM0quB,KAAuBc,IAC7DnuuB,KAAKM,OAAO0+tB,YAAYC,iBAAiBgI,sBAAsBhnuB,EAAKzD,KAAK,GAAG8G,GAAG4J,YAEnFlN,KAAKM,OAAO2xd,kBAAiB,GAC7Bjyd,KAAKM,OAAOmhuB,gBAAgB11nB,UAEhCsgoB,EAAiBhxuB,UAAUs9c,QAAU,SAAU14c,GAC3C,IACIu0c,EADYx0c,KAAKM,OAAO4tuB,eACCjuuB,EAAKzD,KAAK,GAAG8G,GAAG4J,YAC7C,GAAoB,UAAhBjN,EAAKk2D,OACLn2D,KAAKoyD,cAAc5tD,KAAKgwc,EAAalxc,GAAG4J,iBAIxC,IADA,IAAI4R,EAAQ9e,KAAKoyD,cAAc31D,OACxBqiB,KACH,GAAI9e,KAAKoyD,cAActzC,KAAW01b,EAAalxc,GAAG4J,WAAY,CAC1DlN,KAAKoyD,cAAc/pC,OAAOvJ,EAAO,GACjC,QAKhButtB,EAAiBhxuB,UAAU4xuB,cAAgB,WAEvC,IAAK,IAAI7uuB,EAAK,EAAGgwuB,KADG/suB,MAAMC,KAAKtB,KAAKysuB,gBAAgBjruB,iBAAiB,IAAMysuB,KAC/B7vuB,EAAKgwuB,EAAa3xuB,OAAQ2B,IAAM,CACxE,IAAI+8I,EAAYizlB,EAAahwuB,GAS7ByG,GARkB1D,EAAc,QAC5BsC,OACIutH,SAAY,KACZ9wF,MAAOlgC,KAAKM,OAAOo4E,UAAU3E,YAAY,QACzCmiD,gBAAiB,SAErB7yH,UAAW+4tB,oBAEQjhlB,GACnBA,EAAUx4I,cAAc,aACxBgB,GAAUw3I,EAAUx4I,cAAc,IAAM0quB,KAAuBc,MAI3E9B,EAAiBhxuB,UAAUgzuB,gBAAkB,WACzCruuB,KAAKusuB,WAAW3gtB,QAAW23C,WAAYvjE,KAAKqluB,cAAe/huB,GAAI,KAAMmpB,KAAM,UAAW0sK,UAAW,cACjGn5L,KAAKusuB,WAAW3grB,WAChB5rD,KAAKituB,iBAETZ,EAAiBhxuB,UAAUgquB,YAAc,SAAUlvtB,GAC/C,IAAI3Z,KACAc,EAAOgB,OAAOhB,KAAK0C,KAAKM,OAAO4tuB,gBAC/Ble,EAAYtxtB,KAAWsB,KAAKM,OAAO4tuB,eAAgB,MAAM,GAC7D,GAAIluuB,KAAKM,OAAOg/tB,WAAY,CAKxB,IAJA,IAEIgP,GAFUtuuB,KAAKM,OAAOijE,WAAW2qH,QAASluL,KAAKM,OAAOijE,WAAWxF,QAAS/9D,KAAKM,OAAOijE,WAAWg1N,KACjGv4R,KAAKM,OAAOijE,WAAWxwC,QACE5c,GACzBtU,EAAMvE,EAAKb,OACRoF,KACHmutB,EAAU1ytB,EAAKuE,IAAMi3D,YAAa,EAEtC,IAAK,IAAI16D,EAAK,EAAGmwuB,EAAoBD,EAAiBlwuB,EAAKmwuB,EAAkB9xuB,OAAQ2B,IAAM,CAEvF4xtB,EADWue,EAAkBnwuB,GACdq5B,MAAMqhC,YAAa,GAI1C,IAAK,IADD+pC,EAAOmtnB,EACFnttB,EAAK,EAAGxE,EAASf,EAAMuF,EAAKxE,EAAO5B,OAAQoG,IAAM,CACtD,IACI9F,EAAM8lG,EADGxkG,EAAOwE,IAEpBrG,EAAKgI,KAAKzH,GAEd,OAAOP,GAEX6vuB,EAAiBhxuB,UAAU+xuB,WAAa,SAAUvsuB,GAC9Cb,KAAKM,OAAO2ruB,eAAeh6Q,iBAAiBjyd,KAAKoyD,eACjDpyD,KAAKmtuB,mBAETd,EAAiBhxuB,UAAU8xuB,gBAAkB,WACzCntuB,KAAKoyD,iBACLpyD,KAAKktuB,YAAY3rpB,QAKrB8qpB,EAAiBhxuB,UAAUqB,iBAAmB,WAC1CsD,KAAKM,OAAOslF,GAAG4opB,GAAuBxuuB,KAAKquuB,gBAAiBruuB,OAKhEqsuB,EAAiBhxuB,UAAUuB,oBAAsB,WACzCoD,KAAKM,OAAO0mF,aAGhBhnF,KAAKM,OAAO0lF,IAAIwopB,GAAuBxuuB,KAAKquuB,kBAOhDhC,EAAiBhxuB,UAAUiX,QAAU,WACjCtS,KAAKpD,uBAEFyvuB,KC9UPoC,GAAmC,WAEnC,SAASA,EAAkBnuuB,GACvBN,KAAKM,OAASA,EA2GlB,OApGAmuuB,EAAkBpzuB,UAAU0wG,OAAS,WACjC,IAAK/rG,KAAKM,OAAOg/tB,WAAjB,CACI,IAAIoP,EAAYvtuB,EAAc,OAASkC,UlB6BrB,iBkB5BlBrD,KAAK2uuB,cAAgBxtuB,EAAc,OAASkC,UlB8BrB,uBkB7BvBrD,KAAK4uuB,eAAiBztuB,EAAc,OAASkC,UAAWwruB,KACxD7uuB,KAAKM,OAAO2ruB,eAAe53tB,cAAc1S,YAAY+suB,GACrDA,EAAU/suB,YAAY3B,KAAK2uuB,eAC3BD,EAAU/suB,YAAY3B,KAAK4uuB,gBAC3B5uuB,KAAK0uuB,UAAYA,EACjB1uuB,KAAK8uuB,kBAKT9uuB,KAAKM,OAAOmhuB,gBAAgB11nB,WAEhC0ioB,EAAkBpzuB,UAAUyzuB,gBAAkB,WAE1C,IAAK,IADDC,GAAe,UAAW,OAAQ,UAAW,UACxCltuB,EAAM,EAAG+ttB,EAAMmf,EAAYtyuB,OAAQoF,EAAM+ttB,EAAK/ttB,IAAO,CAC1D,IAAIsU,EAAOhV,EAAc,OACrBkC,UAAWuouB,GAAuB,IAAMmD,EAAYltuB,KAEpDmtuB,EAAmB7tuB,EAAc,OACjCkC,UAAW4ruB,mBAEXhgtB,EAAY9tB,EAAc,OAC1BkC,UlBWe,gBkBVfrB,UAAWhC,KAAKM,OAAOo4E,UAAU3E,YAAYg7pB,EAAYltuB,MAE7DmtuB,EAAiBrtuB,YAAY3B,KAAKkvuB,cAAcH,EAAYltuB,KAC5DmtuB,EAAiBrtuB,YAAYstB,GAC7B,IAAI48sB,EAAc1quB,EAAc,OAASkC,UAAWyouB,GAAyB,MAAaiD,EAAYltuB,KAClGstuB,OAAe,EAEfA,EADqB,SAArBJ,EAAYltuB,GACG7B,KAAKM,OAAOo4E,UAAU3E,YAAY,iBAEvB,YAArBg7pB,EAAYltuB,GACF7B,KAAKM,OAAOo4E,UAAU3E,YAAY,iBAEvB,WAArBg7pB,EAAYltuB,GACF7B,KAAKM,OAAOo4E,UAAU3E,YAAY,iBAGlC/zE,KAAKM,OAAOo4E,UAAU3E,YAAY,oBAErD,IAAIg4pB,EAAa5quB,EAAc,QAC3BkC,UAAW2ouB,GACXhquB,UAAWmtuB,IAEC,IAAI/7nB,GAAUy4nB,MAC9B11tB,EAAKxU,YAAYqtuB,GACjB74tB,EAAKxU,YAAYkquB,GACjB11tB,EAAKxU,YAAYoquB,GACblquB,GAAO,EACP7B,KAAK2uuB,cAAchtuB,YAAYwU,GAG/BnW,KAAK4uuB,eAAejtuB,YAAYwU,GAEpCnW,KAAKu3d,YAAYs0Q,GACjB7ruB,KAAKq2d,UAAUw1Q,KAGvB4C,EAAkBpzuB,UAAU6zuB,cAAgB,SAAU/4tB,GAClD,IAAIw1tB,EAAcxquB,EAAc,QAC5BsC,OAASutH,SAAY,KAAMkF,gBAAiB,SAC5C7yH,UAAW4ruB,wBAEX/ma,EAAc/mU,EAAc,QAC5BsC,OACIutH,SAAY,KAAMkF,gBAAiB,SAEvC7yH,UAAW+4tB,kBAA6CjmtB,IAG5D,OADAw1tB,EAAYhquB,YAAYumU,GACjByja,GAEX8C,EAAkBpzuB,UAAUg7d,UAAY,SAAUr1d,GAC9CuE,GAAanB,IAAIpD,EAAS,YAAahB,KAAKovuB,oBAAqBpvuB,MACjEuF,GAAanB,IAAIpD,EAAS,aAAchB,KAAKovuB,oBAAqBpvuB,OAEtEyuuB,EAAkBpzuB,UAAUk8d,YAAc,SAAUv2d,GAChDuE,GAAahB,OAAOvD,EAAS,YAAahB,KAAKovuB,qBAC/C7puB,GAAahB,OAAOvD,EAAS,aAAchB,KAAKovuB,sBAEpDX,EAAkBpzuB,UAAU+zuB,oBAAsB,SAAUvuuB,GACxD,IAAIwT,EAAgBrU,KAAKM,OAAO2ruB,eAAe53tB,cAC/C,GAAIrU,KAAKM,OAAO2guB,YAAcpguB,EAAEsG,OAAOrD,UAAUK,SAAS2nuB,KAAsC,cAAXjruB,EAAE6F,KAAsB,CACzGrC,KAAehD,MAAMC,KAAK+S,EAAc7S,iBAAiB,IAAMusuB,KAA4BC,IAC3F3puB,KAAehD,MAAMC,KAAK+S,EAAc7S,iBAAiB,IAAMusuB,GAA2B,UAAWC,IACrG,IAAIhtuB,KAAaK,MAAMC,KAAKT,EAAEsG,OAAO3F,iBAAiB,IAAMoluB,KACxD5luB,EAAQvE,OAAS,GACjBkH,GAAU3C,EAAQA,EAAQvE,OAAS,GAAGkG,cAAc,IAAMoruB,GAA2B,UAAWC,QAGpF,eAAXntuB,EAAE6F,OACPrC,KAAehD,MAAMC,KAAK+S,EAAc7S,iBAAiB,IAAMusuB,KAA4BC,IAC3F3puB,KAAehD,MAAMC,KAAK+S,EAAc7S,iBAAiB,IAAMusuB,GAA2B,UAAWC,MAGtGS,KC1GPY,GAA6B,WAE7B,SAASA,EAAY/uuB,GACjBN,KAAKM,OAASA,EACdN,KAAKM,OAAOgvuB,kBAAoBtvuB,KAChCA,KAAKtD,mBA0aT,OAxaA2yuB,EAAYh0uB,UAAUk0uB,kBAAoB,SAAUtvuB,GAChD,IAEIioU,EAFAn8S,EAAQ9rB,EAAK8rB,MACb5V,EAAOlW,EAAKkW,KAIhB,GAFAnW,KAAKqU,cAAgD,cAAhCrU,KAAKM,OAAOi/B,gBAAkCv/B,KAAKM,OAAOU,QAC3ER,SAASosB,eAAe5sB,KAAKM,OAAOU,QAAQsC,GAAK,YACjB,mBAAhCtD,KAAKM,OAAOi/B,gBAAsC,CAElD,GADAv/B,KAAKqU,cAAgB7T,SAASosB,eAAe5sB,KAAKM,OAAOU,QAAQsC,GAAK,aAClEtD,KAAKqU,cAAc1R,cAAc,IAAMipuB,GAAuB,IAAMz1tB,GAapE,OAZA,IAAI41tB,EAAa/ruB,KAAKqU,cAAc1R,cAAc,IAAMipuB,GAAuB,IAAMz1tB,GAChFxT,cAAc,IAAMqpuB,IACJ,IAAjBjgtB,EAAMtvB,OACN4H,GAAa0nuB,GAAanD,IAG1BjluB,GAAUoouB,GAAanD,IAE3B1ga,EACIloU,KAAKqU,cAAc1R,cAAc,IAAMipuB,GAAuB,IAAMz1tB,GAAMxT,cAAc,IAAMmpuB,SAOtG9ruB,KAAKqU,cAAgBrU,KAAKM,OAAOU,QACjCknU,EAAcloU,KAAKqU,cAAc1R,cAAc,YAAcwT,GAEjE,GAAI+xT,EACA,GAAoC,cAAhCloU,KAAKM,OAAOi/B,iBAAoD,IAAjBxT,EAAMtvB,OAAc,CAC/DsvuB,EAAa5quB,EAAc,QAC3BkC,UAAW2ouB,GACXhquB,UAAoB,SAATmU,EAAkBnW,KAAKM,OAAOo4E,UAAU3E,YAAY,iBAClD,YAAT59D,EAAqBnW,KAAKM,OAAOo4E,UAAU3E,YAAY,oBAC1C,WAAT59D,EAAoBnW,KAAKM,OAAOo4E,UAAU3E,YAAY,mBAClD/zE,KAAKM,OAAOo4E,UAAU3E,YAAY,sBAElDm0P,EAAYvmU,YAAYoquB,QAGxB,IAAK,IAAI5vuB,EAAI,EAAGyT,EAAMmc,EAAMtvB,OAAQN,EAAIyT,EAAKzT,IAAK,CAC9C,IAAIqzuB,EAAgBruuB,EAAc,OAC9BkC,UAAWujuB,IAAwC,IAANzquB,EAAU,eAAiB,IACxEsH,OAASgsuB,WAAYt5tB,EAAO,IAAM4V,EAAM5vB,GAAGs7B,QAE3CmrkB,EAAgBzhmB,EAAc,OAC9BmC,GAAIyoB,EAAM5vB,GAAGs7B,KAAMp0B,UAAWi7tB,GAC9B76tB,OACIisuB,WAAY3jtB,EAAM5vB,GAAGs7B,KAAMu5F,SAAY,IACvCkF,gBAAiB,QAASxC,aAAc3nG,EAAM5vB,GAAG6moB,QAAUj3mB,EAAM5vB,GAAG6moB,QAAUj3mB,EAAM5vB,GAAGs7B,QAG3Fk4sB,EAAuBxuuB,EAAc,QACrCsC,OAASutH,SAAY,KAAMkF,gBAAiB,SAC5C7yH,UAAW0quB,KAEX6B,EAA2BzuuB,EAAc,QACzCsC,OAASutH,SAAY,KAAMkF,gBAAiB,SAC5C7yH,UAAW0quB,GAA2B,UAEtC8B,EAAc7vuB,KAAK8vuB,qBAAqBltI,GACxC12Z,EAAiB/qM,EAAc,QAC/BsC,OACIutH,SAAY,KAAMkF,gBAAiB,QAASqsY,cAAiB,gBAC7DwtO,YAAa/vuB,KAAKM,OAAOy5tB,aAAa/J,UAAUjksB,EAAM5vB,GAAGs7B,MAAMy4rB,eAEnE7stB,UnBpBgB,YmBqBhBrB,UAAW+pB,EAAM5vB,GAAG6moB,QAAUj3mB,EAAM5vB,GAAG6moB,QAAUj3mB,EAAM5vB,GAAGs7B,OAE9DmrkB,EAAcjhmB,YAAYuqM,IACmB,KAAxC,UAAW,UAAU3tM,QAAQ4X,IAC9BnW,KAAKgwuB,iBAAiBptI,EAAe72kB,EAAM5vB,GAAGs7B,MAErC,WAATthB,GACAnW,KAAKiwuB,mBAAmBrtI,EAAe72kB,EAAM5vB,GAAGs7B,MAEpD,IAAIjK,EAAgBrsB,EAAc,QAC9BsC,OAASutH,SAAY,KAAMkF,gBAAiB,SAC5C7yH,UAAW+4tB,qBAEqB,cAAhCp8tB,KAAKM,OAAOi/B,kBACRv/B,KAAKM,OAAO4vuB,oBAAoBC,eAChC9ruB,GAAampB,GAAgBo7sB,IAG7BjluB,GAAU6pB,GAAgBo7sB,KAGlChmI,EAAcjhmB,YAAY6rB,GAC1BgitB,EAAc7tuB,YAAYguuB,GAC1BH,EAAc7tuB,YAAYihmB,GAC1B4sI,EAAc7tuB,YAAYiuuB,GAC1B1na,EAAYvmU,YAAY6tuB,GACN,IAAIzxnB,IAAS7qG,UAAWlT,KAAKM,OAAO4S,YAC1CmjC,SAASusjB,GACrB5imB,KAAKu3d,YAAYi4Q,EAAer5tB,GAChCnW,KAAKq2d,UAAUm5Q,EAAer5tB,IACO,cAAhCnW,KAAKM,OAAOi/B,kBAAoCv/B,KAAKM,OAAOg/tB,YAC7B,mBAAhCt/tB,KAAKM,OAAOi/B,kBACZv/B,KAAKowuB,gBAAgD,cAAhCpwuB,KAAKM,OAAOi/B,gBAAkC2sK,EAAiB2jiB,KASxGR,EAAYh0uB,UAAU+0uB,gBAAkB,SAAUjpuB,GAC9CnH,KAAK4yG,UAAY,IAAIlF,GAAUvmG,GAC3B9H,OAAO,EACPywG,gBAAgB,EAChB6B,kBAAkB,EAClBziG,OAAQlP,KAAKqwuB,gBAAgB/0uB,KAAK0E,MAClCyvG,UAAWzvG,KAAKswuB,YAAYh1uB,KAAK0E,MACjC0wG,KAAM1wG,KAAKuwuB,WAAWj1uB,KAAK0E,MAC3B+xG,SAAU/xG,KAAKwwuB,WAAWl1uB,KAAK0E,SAGvCqvuB,EAAYh0uB,UAAUy0uB,qBAAuB,SAAUW,GACnD,IAAIZ,EAAc1uuB,EAAc,QAC5BsC,OAASutH,SAAY,KAAMkF,gBAAiB,WAE5Cw6mB,EAAcvvuB,EAAc,QAC5BsC,OACIutH,SAAY,KAAMkF,gBAAiB,SAEvC7yH,UAAW+4tB,mBAIf,OAFAyT,EAAYluuB,YAAY+uuB,GACxBD,EAAY9uuB,YAAYkuuB,GACjBA,GAEXR,EAAYh0uB,UAAU20uB,iBAAmB,SAAUS,EAAarwqB,GAC5D,IACI2/c,EAAc5+gB,EAAc,QAC5BsC,OAASutH,SAAY,KAAMkF,gBAAiB,SAC5C7yH,UAAW+4tB,mBAHwD,eAAvDp8tB,KAAKM,OAAOy5tB,aAAa/J,UAAU5vpB,GAAWvoC,KAAwBgtsB,GAAyB,MAoB/G,OAfI7kuB,KAAKM,OAAOijE,WAAWmrpB,cACvBrqtB,GAAa07gB,GAAc6oN,IAG3BjluB,GAAUo8gB,GAAc6oN,IAEQ,cAAhC5ouB,KAAKM,OAAOi/B,kBACRv/B,KAAKM,OAAO4vuB,oBAAoBS,aAChCtsuB,GAAa07gB,GAAc6oN,IAG3BjluB,GAAUo8gB,GAAc6oN,KAGhC6H,EAAY9uuB,YAAYo+gB,GACjBA,GAEXsvN,EAAYh0uB,UAAU40uB,mBAAqB,SAAUQ,EAAarwqB,GAC9D,IAAIwwqB,EAA8E,IAAhE5wuB,KAAKM,OAAOy5tB,aAAa/J,UAAU5vpB,GAAWp5B,OAAOvqC,OnBrGrD,cmBqGuFo0uB,GACrG9wN,EAAc5+gB,EAAc,QAC5BsC,OACIutH,SAAY,KAAMkF,gBAAiB,SAEvC7yH,UAAWmhuB,GAA0B,IAAMpI,GAAW,IAAMwU,IAWhE,MAToC,cAAhC5wuB,KAAKM,OAAOi/B,kBACRv/B,KAAKM,OAAO4vuB,oBAAoBY,eAChCzsuB,GAAa07gB,GAAc6oN,IAG3BjluB,GAAUo8gB,GAAc6oN,KAGhC6H,EAAY9uuB,YAAYo+gB,GACjBA,GAEXsvN,EAAYh0uB,UAAUg1uB,gBAAkB,SAAUpwuB,GAC9C,IAAIe,EAAU6E,EAAQ5F,EAAKe,QAAS,IAAMs9tB,IACtCpmmB,EAAe/2H,EAAc,OAC7BmC,GAAItD,KAAKM,OAAOU,QAAQsC,GAAK,aAC7BD,UnBnIkB,wBmBqIlB6oM,EAAiB/qM,EAAc,QAC/BkC,UAAW4quB,GACXjsuB,UAAWhB,EAAQ6a,cAIvB,OAFAq8G,EAAav2H,YAAYuqM,GACzB1rM,SAASuL,KAAKpK,YAAYu2H,GACnBA,GAEXm3mB,EAAYh0uB,UAAUi1uB,YAAc,SAAUzvuB,GAC1Cb,KAAKM,OAAO2guB,YAAa,EACzB,IAAIjguB,EAAU6E,EAAQhF,EAAEG,QAAS,IAAMs9tB,IACnC9huB,EAAOwD,KAAKM,OAAOy5tB,aAAa/J,UAAUhvtB,EAAQ6R,aAAa,aAC/DsD,GnBzGgB,SmByGYmwtB,GAAuBC,IAEvD,GADA5iuB,GAAU3C,GAAUssuB,IAChB9wuB,GAA+B,oBAAvBA,EAAK0ztB,cACb,IAAK,IAAI9xtB,EAAK,EAAG0nU,EAAS3vT,EAAM/X,EAAK0nU,EAAOrpU,OAAQ2B,IAAM,CACtD,IAAIytuB,EAAc/la,EAAO1nU,GACzBuF,GAAU3D,KAAKqU,cAAc1R,cAAc,IAAMkpuB,IAAe0B,MAI5E8B,EAAYh0uB,UAAUk1uB,WAAa,SAAU1vuB,GACzCb,KAAK4yG,UAAU5rG,eAAgB0rG,UAAYhmG,KAAO+mE,EAAM5yE,EAAEvE,MAAM20E,gBAAkBzlE,GAAQkb,SAAY,IAAM,OAchH2otB,EAAYh0uB,UAAUm1uB,WAAa,SAAUvwuB,GACzCD,KAAKM,OAAO2guB,YAAa,EACzB,IAAIjguB,EAAU6E,EAAQ5F,EAAKe,QAAS,IAAMs9tB,IAC1Cj6tB,KAAehD,MAAMC,KAAKtB,KAAKqU,cAAc7S,iBAAiB,IAAM88tB,KAA0BgP,IAC9FjpuB,KAAehD,MAAMC,KAAKtB,KAAKqU,cAAc7S,iBAAiB,IAAMusuB,KAA4BC,IAEhG,IAAK,IAAI5vuB,EAAK,EAAGwoU,GnBvIG,SmBsIY0/Z,GAAuBC,IACvBnouB,EAAKwoU,EAAOnqU,OAAQ2B,IAAM,CACtD,IAAIytuB,EAAcjla,EAAOxoU,GACzBiG,GAAarE,KAAKqU,cAAc1R,cAAc,IAAMkpuB,IAAe0B,IAEnEvtuB,KAAKM,OAAO0+tB,YAAY2F,aAAaC,aACrC5kuB,KAAKM,OAAO0+tB,YAAY2F,aAAaC,YAAY3iuB,QAErDsC,EAAO/D,SAASosB,eAAe5sB,KAAKM,OAAOU,QAAQsC,GAAK,eACnDtD,KAAK+wuB,gBAAgB9wuB,EAAKkH,OAAQnG,IAGnChB,KAAKM,OAAO0+tB,YAAY2K,kBAAkB1D,gBAAgBhmuB,EAAMe,EAAQsC,MACxEtD,KAAKM,OAAO2xd,mBACZjyd,KAAKM,OAAOmhuB,gBAAgB11nB,WAGpCsjoB,EAAYh0uB,UAAU01uB,gBAAkB,SAAUl8a,EAAY1tT,GAC1D,IAAI0/tB,EAAYhhuB,EAAQsB,EAAQ,IAAMi/tB,IAElCqH,GAAY,EAChB,GAAI5G,IAFmBhhuB,EAAQgvT,EAAY,IAAMuxa,IAEb,CAKhC,IAAK,IAJDU,KAAkBzluB,MAAMC,KAAKuluB,EAAUrluB,iBAAiB,IAAM88tB,KAC9D0S,EAAkBnruB,EAAQgvT,EAAY,IAAM+xa,IAC5CgH,OAAiB,EACjBvH,GAAmB,EACdlquB,EAAI,EAAGwuJ,EAAIm8kB,EAAarquB,OAAQN,EAAIwuJ,EAAGxuJ,IAI5C,GAHI2quB,EAAa3quB,GAAGmH,KAAO6D,EAAO7D,KAC9BsquB,EAAiBzxuB,GAEjB60uB,EAAiB,CACjB,IAAIlD,EAAkBkD,EAAgBruuB,cAAc,IAAM27tB,IACtDwI,EAAa3quB,GAAGmH,KAAOwquB,EAAgBxquB,KACvC+iuB,EAAkBlquB,IAI1ByxuB,IAAmBvH,GAAoBuH,IAAoB9G,EAAarquB,OAAS,IAA2B,IAArB4puB,KACvFhiuB,KAAehD,MAAMC,KAAKtB,KAAKqU,cAAc7S,iBAAiB,IAAMusuB,KAA4BC,IAChGP,GAAY,GAGpB,OAAOA,GAEX4B,EAAYh0uB,UAAUqpuB,cAAgB,SAAUzkuB,IACN,cAAhCD,KAAKM,OAAOi/B,iBAAmCv/B,KAAKM,OAAOmiuB,oBAC5B,mBAAhCziuB,KAAKM,OAAOi/B,sBAAwEpkC,IAAhC6E,KAAKM,OAAO2wuB,iBAC7DjxuB,KAAKM,OAAO2wuB,gBAAgBxO,qBACmD,SAAnFxiuB,EAAKkH,OAAOkN,cAAcA,cAAcxB,aAAa,YAAY3V,MAAM,KAAK,KAC5E8C,KAAKM,OAAOijE,WAAWsrpB,kBAAkB1wpB,WAAa,IAE1Dn+D,KAAKM,OAAO0+tB,YAAY6J,UAAUnE,cAAczkuB,GAChDD,KAAKM,OAAO2xd,kBAAiB,IAEjCo9Q,EAAYh0uB,UAAU4puB,gBAAkB,SAAUhluB,GAC9CD,KAAKM,OAAO0+tB,YAAY6J,UAAU5D,gBAAgBhluB,GAClD,IACImgE,EADSngE,EAAKkH,OACKkN,cAAc/Q,GACrCtD,KAAK4kuB,YAAc5kuB,KAAKM,OAAO0+tB,YAAY2F,aAAaC,YACxD5kuB,KAAK8ouB,eAAiB9ouB,KAAKM,OAAO0+tB,YAAY2F,aAAamE,eAC3D9ouB,KAAKM,OAAO0+tB,YAAY2F,aAAamE,eAAe+D,YAAc7suB,KAAK2puB,kBAAkBruuB,KAAK0E,MAC9FA,KAAKM,OAAO0+tB,YAAY2F,aAAaqE,gBAAgB6D,YAAc7suB,KAAK2puB,kBAAkBruuB,KAAK0E,MAC/FA,KAAKM,OAAO0+tB,YAAY2F,aAAaC,YAAYz+mB,QAAQ,GAAGE,MAAQrmH,KAAKkxuB,kBAAkB51uB,KAAK0E,KAAMogE,IAE1GivqB,EAAYh0uB,UAAU81uB,aAAe,SAAUlxuB,GAC3C,IACImgE,EADSngE,EAAKkH,OACKkN,cAAc/Q,GACrCtD,KAAKM,OAAO0+tB,YAAYC,iBAAiBgI,sBAAsB7mqB,GAC3B,mBAAhCpgE,KAAKM,OAAOi/B,iBACZv/B,KAAKM,OAAOmhuB,gBAAgB11nB,SAEhC/rG,KAAKM,OAAO2xd,oBAEhBo9Q,EAAYh0uB,UAAUsuuB,kBAAoB,SAAU1puB,GAC7BD,KAAK4kuB,YAAY5juB,QAEI,QAD3Bf,EAAKM,KAAK8T,cAAcA,cAC1BxB,aAAa,cACpB7S,KAAK8ouB,eAAe+D,YAAc,KACd,UAAhB5suB,EAAKk2D,OACLn2D,KAAK8ouB,eAAe9va,WAGpBh5T,KAAK8ouB,eAAe/va,aAExB/4T,KAAK8ouB,eAAe+D,YAAc7suB,KAAK2puB,kBAAkBruuB,KAAK0E,OAElEA,KAAKM,OAAO0+tB,YAAY2F,aAAasD,sBAEzCoH,EAAYh0uB,UAAU61uB,kBAAoB,SAAU9wqB,EAAWngE,GAI3D,IAAK,IAHD4iG,KAAUxhG,MAAMC,KAAKtB,KAAK8ouB,eAAe9nuB,QAAQQ,iBAAiB,OAClE4vuB,EAAqB,EACrBC,GAAe52qB,SAAWhjC,KAAM2oC,EAAW15D,KAAM,WAC5CvK,EAAI,EAAGyT,EAAMizF,EAAKpmG,OAAQN,EAAIyT,EAAKzT,IACpC0mG,EAAK1mG,GAAGwG,cAAc,YAAiCmB,UAAUK,SAASoluB,IAC1E8H,EAAW52qB,MAAMj2D,KAAKq+F,EAAK1mG,GAAG0W,aAAa,aAG3Cu+tB,GAA0C,EAGlD,IAAIjtqB,EAAenkE,KAAKM,OAAO0+tB,YAAY6J,UAAUzD,oBAAoBhlqB,GACrE+D,GACAA,EAAa1J,MAAQ42qB,EAAW52qB,MAChC0J,EAAaz9D,KAAO2quB,EAAW3quB,MAG/B1G,KAAKM,OAAOijE,WAAW0qjB,eAAezpnB,KAAK6suB,GAE/CrxuB,KAAKsxuB,wBAAwBlxqB,EAAYgxqB,EAAqB,GACnC,IAAvBA,GACApxuB,KAAKuxuB,yBAAyBnxqB,GAElCpgE,KAAKM,OAAO2xd,kBAAiB,GAC7Bjyd,KAAK4kuB,YAAYrjpB,QAErB8tpB,EAAYh0uB,UAAUi2uB,wBAA0B,SAAUlxqB,EAAWk9Z,GAGjE,IAAK,IADDk0Q,EACKpzuB,EAAK,EAAGqzuB,KAFKpwuB,MAAMC,KAAKtB,KAAKqU,cAAc7S,iBAAiB,oBAErBpD,EAAKqzuB,EAAeh1uB,OAAQ2B,IAAM,CAC9E,IAAIyf,EAAO4ztB,EAAerzuB,GAC1B,GAAIyf,EAAKhL,aAAa,cAAgButD,EAAW,CAC7CoxqB,EAAiB3ztB,EAAKlb,cAAc,IAAM6huB,IAC1C,OAGJlnQ,GACAj5d,GAAamtuB,GnBpSC,emBqSd7tuB,GAAU6tuB,GAAiBX,IAC3BW,EAAehuuB,aAAa,QAASxD,KAAKM,OAAOo4E,UAAU3E,YAAY,eAGvE1vE,GAAamtuB,GAAiBX,IAC9BltuB,GAAU6tuB,GnB1SI,emB2SdA,EAAehuuB,aAAa,QAASxD,KAAKM,OAAOo4E,UAAU3E,YAAY,aAG/Es7pB,EAAYh0uB,UAAUk2uB,yBAA2B,SAAUnxqB,GAEvD,IAAK,IADD6tjB,EAAiBjunB,KAAKM,OAAOijE,WAAW0qjB,eACnCpsnB,EAAM,EAAG+ttB,EAAM3hG,EAAexxnB,OAAQoF,EAAM+ttB,EAAK/ttB,IACtD,GAAIosnB,EAAepsnB,GAAK41B,OAAS2oC,EAAW,CACxC6tjB,EAAe5lmB,OAAOxmB,EAAK,GAC3B,QAIZwtuB,EAAYh0uB,UAAU+zuB,oBAAsB,SAAUvuuB,GAClD,GAAIb,KAAKM,OAAO2guB,WAAY,CACxB58tB,KAAehD,MAAMC,KAAKtB,KAAKqU,cAAc7S,iBAAiB,IAAMusuB,GAA2B,UAAWC,IAC1G3puB,KAAehD,MAAMC,KAAKtB,KAAKqU,cAAc7S,iBAAiB,IAAMusuB,KAA4BC,IAEhGrquB,GADckC,EAAQhF,EAAEsG,OAAQ,IAAMy/tB,IACpBjkuB,cAAc,IAAMoruB,KAA4BC,MAG1EqB,EAAYh0uB,UAAUg7d,UAAY,SAAUr1d,EAASmV,GACjD5Q,GAAanB,IAAIpD,EAAS,YAAahB,KAAKovuB,oBAAqBpvuB,OACpB,KAAxC,UAAW,UAAUzB,QAAQ4X,IAC9B5Q,GAAanB,IAAIpD,EAAQ2B,cAAc,WAAuB,QAAS3C,KAAK0kuB,cAAe1kuB,MAElF,WAATmW,GACA5Q,GAAanB,IAAIpD,EAAQ2B,cAAc,IAAM6huB,IAA0B,QAASxkuB,KAAKiluB,gBAAiBjluB,MAE1GuF,GAAanB,IAAIpD,EAAQ2B,cAAc,aAAyB,QAAS3C,KAAKmxuB,aAAcnxuB,OAEhGqvuB,EAAYh0uB,UAAUk8d,YAAc,SAAUv2d,EAASmV,GACnD5Q,GAAahB,OAAOvD,EAAS,YAAahB,KAAKovuB,sBACF,KAAxC,UAAW,UAAU7wuB,QAAQ4X,IAC9B5Q,GAAahB,OAAOvD,EAAQ2B,cAAc,WAAuB,QAAS3C,KAAK0kuB,eAEtE,WAATvutB,GACA5Q,GAAahB,OAAOvD,EAAQ2B,cAAc,IAAM6huB,IAA0B,QAASxkuB,KAAKiluB,iBAE5F1/tB,GAAahB,OAAOvD,EAAQ2B,cAAc,aAAyB,QAAS3C,KAAKmxuB,eAKrF9B,EAAYh0uB,UAAUqB,iBAAmB,WACrCsD,KAAK27pB,UACD5jjB,KAAM/3G,KAAKuvuB,mBAEXvvuB,KAAKM,OAAO0mF,aAGhBhnF,KAAKM,OAAOslF,GAAG8rpB,GAA0B1xuB,KAAK27pB,SAAS5jjB,KAAM/3G,OAKjEqvuB,EAAYh0uB,UAAUuB,oBAAsB,WACpCoD,KAAKM,OAAO0mF,aAGhBhnF,KAAKM,OAAO0lF,IAAI0rpB,GAA0B1xuB,KAAK27pB,SAAS5jjB,OAO5Ds3nB,EAAYh0uB,UAAUiX,QAAU,WAC5BtS,KAAKpD,uBAEFyyuB,KClbPsC,GAAmC,WAEnC,SAASA,EAAkBrxuB,GACvBN,KAAKM,OAASA,EAyClB,OAlCAqxuB,EAAkBt2uB,UAAU0wG,OAAS,WACjC/rG,KAAKywuB,YAAc,IAAIpB,GAAYrvuB,KAAKM,QACxCN,KAAK4xuB,sBAETD,EAAkBt2uB,UAAUu2uB,mBAAqB,WAC7C,IAIIhmtB,GAJO5rB,KAAKM,OAAOijE,WAAWg1N,KACpBv4R,KAAKM,OAAOijE,WAAWxF,QACxB/9D,KAAKM,OAAOijE,WAAWxwC,OACtB/yB,KAAKM,OAAOijE,WAAW2qH,SAEjC75K,EAAgBrU,KAAKM,OAAO2ruB,eAAe53tB,cAC3CA,EAAc1R,cAAc,IAAMipuB,GAAuB,cACzDv3tB,EAAc1R,cAAc,IAAMipuB,GAAuB,YAAYjpuB,cAAc,IAAMmpuB,IAAwB9puB,UAAY,IAE7HqS,EAAc1R,cAAc,IAAMipuB,GAAuB,WACzDv3tB,EAAc1R,cAAc,IAAMipuB,GAAuB,SAASjpuB,cAAc,IAAMmpuB,IAAwB9puB,UAAY,IAE1HqS,EAAc1R,cAAc,IAAMipuB,GAAuB,cACzDv3tB,EAAc1R,cAAc,IAAMipuB,GAAuB,YAAYjpuB,cAAc,IAAMmpuB,IAAwB9puB,UAAY,IAE7HqS,EAAc1R,cAAc,IAAMipuB,GAAuB,aACzDv3tB,EAAc1R,cAAc,IAAMipuB,GAAuB,WAAWjpuB,cAAc,IAAMmpuB,IAAwB9puB,UAAY,IAGhI,IAAK,IADDmU,GAAQ,OAAQ,UAAW,SAAU,WAChCtU,EAAM,EAAG+ttB,EAAMhksB,EAAOnvB,OAAQoF,EAAM+ttB,EAAK/ttB,IAC9C,GAAI+pB,EAAO/pB,GAAM,CACb,IAAI5B,GACA8rB,MAAOH,EAAO/pB,GACdsU,KAAMA,EAAKtU,GAAKqL,YAEpBlN,KAAKM,OAAOyN,OAAO2juB,GAA0BzxuB,KAIlD0xuB,KC3CP7yT,GAAwB,WAExB,SAASA,EAAOx+a,GACZN,KAAKM,OAASA,EACdN,KAAKM,OAAO2ruB,eAAiB,IAAIrC,GAAe5puB,KAAKM,QACrDN,KAAKM,OAAO6ruB,eAAiB,IAAIE,GAAiBrsuB,KAAKM,QACvDN,KAAKM,OAAOuxuB,gBAAkB,IAAIpD,GAAkBzuuB,KAAKM,QACzDN,KAAKM,OAAOmhuB,gBAAkB,IAAIkQ,GAAkB3xuB,KAAKM,QAc7D,OAPAw+a,EAAOzjb,UAAU0wG,OAAS,WACtB/rG,KAAKM,OAAO2ruB,eAAelgoB,SACtB/rG,KAAKM,OAAOg/tB,YACbt/tB,KAAKM,OAAO6ruB,eAAepgoB,SAE/B/rG,KAAKM,OAAOuxuB,gBAAgB9loB,UAEzB+yU,KC7BPx0V,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAsB5Dk1sB,GAAgC,SAAU3mpB,GAO1C,SAAS2mpB,EAAe9+tB,EAAShS,GAC7B,OAAOmqF,EAAO7pF,KAAKtB,KAAMgT,EAAShS,IAAYhB,KAuWlD,OA9WAsqF,GAAUwnpB,EAAgB3mpB,GAc1B2mpB,EAAez2uB,UAAUw1F,gBAAkB,WACvC,IAAIgB,KAIJ,OAHI7xF,KAAKq/tB,sBACLxtoB,EAAQrtF,MAAOvE,MAAOD,MAAOqxF,OAAQ,oBAElCQ,GAMXigpB,EAAez2uB,UAAUoX,UAAY,WACjCzS,KAAKs/tB,WAAa9ztB,GAAQkb,SAC1B1mB,KAAKkrM,UAAY,IAAIxgG,GAAqB1qG,KAAKgO,QAC/ChO,KAAK+ppB,aAAe,IAAIjrO,GAAO9+a,MAC/BA,KAAK29a,eACDo0T,gBAAiB,mBACjB/hB,UAAW,aACXgiB,iBAAkB,mBAClBC,cAAe,mBACfC,cAAe,gBACfC,cAAe,kBACfC,UAAW,iBACXC,oBAAqB,eACrBC,aAAc,kCACdluuB,IAAK,MACLssG,KAAM,OACN1pE,OAAQ,SACR8pH,SAAU,WACVj5H,KAAM,OACNtzB,OAAQ,SACR2pL,QAAS,UACTqqG,KAAM,OACNx6N,QAAS,UACThrC,OAAQ,SACRgtsB,gBAAiB,mBACjBC,sBAAuB,0BACvB5/pB,UAAW,uBACXkkB,MAAO,QACP27oB,eAAgB,mBAChBC,SAAU,wDACVC,eAAgB,oCAChBlra,WAAY,0EACZ7lK,OAAQ,SACRntJ,MAAO,QACP42B,OAAQ,SACR+7E,OAAQ,SACRq2hB,MAAO,QACPm1F,QAAS,UACTC,GAAI,KACJvtsB,IAAK,MACL+hI,QAAS,UACT/1I,MAAO,QACPiB,IAAK,MACLzT,IAAK,MACLg0tB,UAAW,aACXnQ,QAAS,UACTyQ,WAAY,sEACZC,YAAa,8EACbC,UAAW,aACX9ksB,OAAQ,sBACRmrlB,KAAM,OACNn3jB,MAAO,QACP+wqB,aAAc,kCACdC,UAAW,yBAEfhhuB,KAAK04E,UAAY,IAAI8+B,GAAKx3G,KAAKu/B,gBAAiBv/B,KAAK29a,cAAe39a,KAAKgO,QACzEhO,KAAKihuB,YAAa,EAClBjhuB,KAAKuyuB,eACLvyuB,KAAKq2d,aAOTy7Q,EAAez2uB,UAAU0wG,OAAS,WAC9B/rG,KAAKwmB,QvB3HK,QuB2HkB+8C,WAAcvjE,KAAKujE,aAC/C5/D,GAAU3D,KAAKgB,SAAU4guB,IACrB5huB,KAAKkT,UACLvP,GAAU3D,KAAKgB,StB5HV,SsB+HLqD,GAAarE,KAAKgB,StB/Hb,SsBiILhB,KAAKs/tB,WACL37tB,GAAU3D,KAAKgB,SAAU6guB,IAGzBx9tB,GAAarE,KAAKgB,SAAU6guB,IAE5B7huB,KAAKiT,UACLtP,GAAU3D,KAAKgB,SAAUhB,KAAKiT,UAElCjT,KAAK+N,OAAO09nB,QAMhBqmG,EAAez2uB,UAAUg7d,UAAY,WACjCr2d,KAAK4lF,GAAG6ljB,GAAoBzroB,KAAKqhuB,aAAcrhuB,MAC/CA,KAAK4lF,GAAGoljB,GAAkBhroB,KAAKwyuB,gBAAiBxyuB,OAMpD8xuB,EAAez2uB,UAAUk8d,YAAc,WAC/Bv3d,KAAKixuB,iBAAmBjxuB,KAAKixuB,gBAAgBjqpB,cAGjDhnF,KAAKgmF,IAAIyljB,GAAoBzroB,KAAKqhuB,cAClCrhuB,KAAKgmF,IAAIgljB,GAAkBhroB,KAAKwyuB,mBAOpCV,EAAez2uB,UAAUmxG,eAAiB,WAEtC,OAAOxsG,KAAKgtG,cADK,gBAQrB8koB,EAAez2uB,UAAUkkC,cAAgB,WACrC,MAAO,kBAMXuysB,EAAez2uB,UAAUmsF,kBAAoB,SAAUiF,EAASC,GAE5D,IAAK,IADDu+jB,GAAiB,EACZ7spB,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKmvF,GAAUruF,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAE9D,OADWyE,EAAGzE,IAEV,IAAK,SACD4B,KAAKkyD,UACL,MACJ,IAAK,YACGlyD,KAAKkT,UACLvP,GAAU3D,KAAKgB,StB9LtB,SsBiMOqD,GAAarE,KAAKgB,StBjMzB,SsBmMGiqpB,GAAiB,EAGrBA,GACAjrpB,KAAKwyuB,oBAIjBV,EAAez2uB,UAAUgmuB,aAAe,WAEpC,GADArhuB,KAAKkuuB,kBACDluuB,KAAKujE,YAAcvjE,KAAKujE,WAAW/mE,KAAM,CACzCwD,KAAKwmB,QAAQq8sB,IAA2Bt/pB,WAAcvjE,KAAKujE,aAC3DvjE,KAAK+5tB,aAAe,IAAIhM,GAAY/ttB,KAAKujE,YACzCvjE,KAAKkuuB,eAAiBluuB,KAAK+5tB,aAAa/J,UACxC,IAAIzitB,GACA2guB,eAAgBluuB,KAAKkuuB,eACrB/a,YAAanztB,KAAK+5tB,aAAa5G,aAEnCnztB,KAAKwmB,QAAQm7sB,GAAwBp0tB,GAEzCvN,KAAK+N,OAAOi9nB,OACZhroB,KAAKwmB,QvBtMU,cuBwMnBsrtB,EAAez2uB,UAAUm3uB,gBAAkB,WACvCxyuB,KAAKgB,QAAQgB,UAAY,GACD,UAApBhC,KAAK6nuB,YAA0B7nuB,KAAKisuB,eAAe3B,kBACnDtquB,KAAKisuB,eAAe3B,gBAAgBh4tB,UACpC/N,EAAO/D,SAASosB,eAAe5sB,KAAKgB,QAAQsC,GAAK,cAErDtD,KAAK+ppB,aAAah+iB,SAClB/rG,KAAKkiuB,wBAA8C,UAApBliuB,KAAK6nuB,WAChC7nuB,KAAKisuB,eAAe3B,gBAAgBtpuB,QAAUhB,KAAKgB,QAAQ2B,cAAc,6BAC7E6X,IAAgBrT,OAAQnH,KAAKkiuB,0BAC7B,IAAIjiuB,GACAypuB,YAAa1puB,KAAK+5tB,aAClBx2pB,WAAYvjE,KAAKujE,WACjBjgE,GAAItD,KAAKgB,QAAQsC,GACjBtC,QAASR,SAASosB,eAAe5sB,KAAKgB,QAAQsC,GAAK,YACnDsP,WAAY5S,KAAKu/B,gBACjBrsB,UAAWlT,KAAKkT,UAChBostB,WAAYt/tB,KAAKs/tB,WACjBuI,WAAY7nuB,KAAK6nuB,WACjBnvpB,UAAW14E,KAAK04E,WAEpB14E,KAAKg/tB,YAAc,IAAIyK,GAAYxpuB,IAEvC6xuB,EAAez2uB,UAAUo3uB,gBAAkB,SAAUlvqB,GAEjD,GADAvjE,KAAKkvT,UAAU3rP,GACXvjE,KAAKuyuB,YAAY91uB,OAAS,EAE1B,IADA,IAAImztB,EAAM5vtB,KAAKuyuB,YAAY91uB,OACpBmztB,KACH,GAAI5vtB,KAAKuyuB,YAAY3iB,GACjB,IAAK,IAAIxxtB,EAAK,EAAGyE,EAAK7C,KAAKuyuB,YAAY3iB,GAAMxxtB,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC/D,IACIrB,EADO8F,EAAGzE,GACC6E,WACXlG,IACIiD,KAAK+5tB,aAAa/J,UAAUjztB,EAAI06B,OAAS16B,EAAIimoB,QAC7ChjoB,KAAK+5tB,aAAa/J,UAAUjztB,EAAI06B,MAAMurmB,QAAUjmoB,EAAIimoB,QAGpDhjoB,KAAK+5tB,aAAa/J,UAAUjztB,EAAI06B,MAAMurmB,QAAUjmoB,EAAI06B,QAWhFq6sB,EAAez2uB,UAAU6zT,UAAY,SAAU3rP,GAC3C,IACIxmE,EADY2B,KAAW6kE,EAAY,MAAM,GACzBtgE,WACpBjD,KAAKuyuB,aAAex1uB,EAAIw7R,KAAMx7R,EAAIghE,QAAShhE,EAAIg2B,OAAQh2B,EAAImxL,UAQ/D4jjB,EAAez2uB,UAAU42d,iBAAmB,SAAUygR,GAC9C1yuB,KAAKixuB,iBACLtvtB,GAAY3hB,KAAKixuB,gBAAgBjwuB,SAErC2gB,GAAY3hB,KAAKkiuB,yBACjBliuB,KAAK+5tB,aAAe,IAAIhM,GAAY/ttB,KAAKujE,WAAY,GAAIvjE,KAAKkuuB,gBAC9DluuB,KAAKyyuB,gBAAgBzyuB,KAAKujE,YAC1B,IAAIh2D,GACAg2D,WAAYvjE,KAAKujE,WACjB2qqB,eAAgBluuB,KAAKkuuB,eACrB/a,YAAanztB,KAAK+5tB,aAAa5G,aAEnCnztB,KAAKwmB,QAAQm7sB,GAAwBp0tB,GACrCvN,KAAKg/tB,YAAYjF,aAAe/5tB,KAAK+5tB,aACrC/5tB,KAAKg/tB,YAAYz7pB,WAAavjE,KAAKujE,WACnCvjE,KAAKkuuB,eAAiBluuB,KAAK+5tB,aAAa/J,UACnC0iB,IAAqB1yuB,KAAKmsuB,eAAeI,YAAevsuB,KAAKs/tB,YAC9Dt/tB,KAAK+N,OAAOyguB,OAEhBxuuB,KAAKs8a,WAAWt8a,KAAKixuB,iBAChBjxuB,KAAKixuB,gBAINjxuB,KAAKixuB,gBAAgB/O,wBAA0BliuB,KAAKkiuB,wBAHpDx/sB,GAAY1iB,KAAKkiuB,0BAYzB4P,EAAez2uB,UAAUgkD,OAAS,SAAU1sC,GACpCA,IACA3S,KAAKgH,eAAgBu8D,WAAY5wD,EAAQ4wD,aAAc,GACvDvjE,KAAK+5tB,aAAepntB,EAAQontB,aAC5B/5tB,KAAKkuuB,eAAiBv7tB,EAAQontB,aAAa/J,UAC3ChwtB,KAAKixuB,gBAAkBt+tB,EACvB3S,KAAKyyuB,gBAAgB9/tB,EAAQ4wD,YAC7BvjE,KAAKg/tB,YAAYjF,aAAe/5tB,KAAK+5tB,aACrC/5tB,KAAKg/tB,YAAYz7pB,WAAavjE,KAAKujE,WAC/BvjE,KAAKmsuB,eAAeI,aAAevsuB,KAAKs/tB,YACxCt/tB,KAAK+N,OAAOyguB,OAEhBxuuB,KAAKyhuB,gBAAgB11nB,WAS7B+loB,EAAez2uB,UAAUihb,WAAa,SAAU3pa,GACxCA,IACAA,EAAQ3L,eAAgBu8D,WAAYvjE,KAAKujE,aAAc,GACvD5wD,EAAQontB,aAAe/5tB,KAAK+5tB,aAC5BpntB,EAAQwgtB,YAAcnztB,KAAK+5tB,aAAa5G,YACxCxgtB,EAAQi5C,aAQhBkmrB,EAAez2uB,UAAUiX,QAAU,WAC/BtS,KAAKu3d,cACLv3d,KAAKmsuB,eAAe75tB,UACpBtS,KAAKsvuB,kBAAkBh9tB,UACvB64E,EAAO9vF,UAAUiX,QAAQhR,KAAKtB,MAC9BA,KAAKgB,QAAQgB,UAAY,GACzBqC,GAAarE,KAAKgB,SAAU4guB,IAC5Bv9tB,GAAarE,KAAKgB,StB/VT,SsBgWTqD,GAAarE,KAAKgB,SAAU6guB,IACJ,UAApB7huB,KAAK6nuB,aACL7nuB,KAAKisuB,eAAe3B,gBAAgBh4tB,UAChC9R,SAASosB,eAAe5sB,KAAKgB,QAAQsC,GAAK,aAC1CiB,EAAO/D,SAASosB,eAAe5sB,KAAKgB,QAAQsC,GAAK,eAI7DunF,IACI9iF,KAAYsvZ,KACby6U,EAAez2uB,UAAW,kBAAc,GAC3CwvF,IACI3jF,EAAS,UACV4quB,EAAez2uB,UAAW,kBAAc,GAC3CwvF,IACI3jF,KACD4quB,EAAez2uB,UAAW,cAAU,GACvCwvF,IACI3jF,EAAS,KACV4quB,EAAez2uB,UAAW,gBAAY,GACzCwvF,IACI3jF,GAAS,IACV4quB,EAAez2uB,UAAW,4BAAwB,GACrDwvF,IACI/hF,KACDgpuB,EAAez2uB,UAAW,YAAQ,GACrCwvF,IACI/hF,KACDgpuB,EAAez2uB,UAAW,wBAAoB,GACjDwvF,IACI/hF,KACDgpuB,EAAez2uB,UAAW,uBAAmB,GAChDwvF,IACI/hF,KACDgpuB,EAAez2uB,UAAW,iBAAa,GAC1CwvF,IACI/hF,KACDgpuB,EAAez2uB,UAAW,eAAW,GACxCwvF,IACI/hF,KACDgpuB,EAAez2uB,UAAW,iBAAa,GAC1Cy2uB,EAAiBjnpB,IACbzhF,GACD0ouB,IAELvmoB,IClYEonoB,GAAO,kBAGPC,GAAiC,WAEjC,SAASA,EAAgBtyuB,GACrBN,KAAKM,OAASA,EACdN,KAAK6yuB,eAAiB,KACtB7yuB,KAAKM,OAAOkruB,sBAAwBxruB,KACpCA,KAAKpD,sBACLoD,KAAKtD,mBACLsD,KAAKkqT,SAAWlqT,KAAKM,OAAOU,QAAQsC,GACpCtD,KAAKwrlB,OAAS,KACdxrlB,KAAKqlB,SAAW,KAChBrlB,KAAK2luB,QAAU,KACf3luB,KAAK++a,UAAY,KACjB/+a,KAAK8gqB,QAAU,KACf9gqB,KAAK8yuB,UAAY,KACjB9yuB,KAAK+yuB,cAAe,EACpB/yuB,KAAKgzuB,YAAc,KACnBhzuB,KAAK6+f,UAAY,KACjB7+f,KAAKw/lB,QAAS,EACdx/lB,KAAKizuB,iBAAmB,KACxBjzuB,KAAKkzuB,aAAe,KAm0BxB,OA7zBAN,EAAgBv3uB,UAAUkkC,cAAgB,WACtC,MAAO,mBAEXqzsB,EAAgBv3uB,UAAU2+I,iBAAmB,SAAUn5I,GACnD,IAAIN,EAAOM,EAAEutG,cAAczrG,cAAc,yBACzC,GAAIpC,EACA,OAAQM,EAAEs1D,QACN,IAAK,YACDn2D,KAAKmzuB,YAAY5yuB,EAAKsnM,iBACtB,MACJ,IAAK,QACD,IAAI97K,EAAQxrB,EAAKsS,aAAa,cAC1BnM,EAAOnG,EAAKsS,aAAa,aACzBuguB,EAAYpzuB,KAAKwrlB,OAAOxqlB,QAAQ2B,cAAc,IAAM3C,KAAKkqT,SAAW,aAChD,KAApBkpb,EAAUp2uB,MAENo2uB,EAAUp2uB,MADV0J,IAASisuB,GACSpyuB,EAAKsS,aAAa,YAGlB,IAAMnM,EAAO,IAAMqlB,EAAQ,KAGxB,KAApBqntB,EAAUp2uB,QAEXo2uB,EAAUp2uB,MADV0J,IAASisuB,GACSS,EAAUp2uB,MAAQuD,EAAKsS,aAAa,YAGpCuguB,EAAUp2uB,MAAQ,IAAM0J,EAAO,IAAMqlB,EAAQ,QAYvF6mtB,EAAgBv3uB,UAAUg4uB,kBAAoB,SAAUxyuB,GACpD,IAAIN,EAAOM,EAAEvE,MAAM6K,OAAOkN,eACtBxT,EAAEvE,MAAM6K,OAAOrD,UAAUK,SAASmvuB,KAClCzyuB,EAAEvE,MAAM6K,OAAOrD,UAAUK,SvBoMd,WuBnMXtD,EAAEvE,MAAM6K,OAAOrD,UAAUK,SAASovuB,MAClCvzuB,KAAKmzuB,YAAY5yuB,EAAK8T,gBAQ9Bu+tB,EAAgBv3uB,UAAU83uB,YAAc,SAAU5yuB,GACyB,OAAnEC,SAASmC,cAAc,IAAM3C,KAAKkqT,SAAW,oBAC7C3pT,EAAKoC,cAAc,gBAAgBmB,UAAUK,SAASi4tB,KACrD77tB,EAAKoC,cAAc,gBAAgBmB,UAAUK,SAASovuB,KACtDhzuB,EAAKoC,cAAc,gBAAgBmB,UAAUK,SvBsLnC,WuBtL+E,OAAjB5D,EAAKyC,QAKzEzC,EAAKoC,cAAc,gBAAgBmB,UAAUK,SvBiLvC,WuBjLmF,OAAjB5D,EAAKyC,SAClFW,GAAUpD,EAAKoC,cAAc,iBAAkB4wuB,IAC/ClvuB,GAAa9D,EAAKoC,cAAc,iBvB+KrB,UuB9KXpC,EAAKoC,cAAc,IAAM4wuB,IAAiB/vuB,aAAa,QAASxD,KAAKM,OAAOo4E,UAAU3E,YAAY,UAClG/zE,KAAKw/lB,QAAS,EACdx/lB,KAAKizuB,iBAAmB1yuB,EAAKsS,aAAa,cAC1C7S,KAAKqlB,SAASroB,MAAQuD,EAAKsS,aAAa,gBACxC7S,KAAKwrlB,OAAOxqlB,QAAQ2B,cAAc,IAAM6wuB,IAAex2uB,MAAQuD,EAAKsS,aAAa,gBACjFrS,SAASmC,cAAc,IAAM3C,KAAKkqT,SAAW,aAAaltT,MAAQuD,EAAKsS,aAAa,aAE/EtS,EAAKoC,cAAc,gBAAgBmB,UAAUK,SAASovuB,KAAqC,OAAjBhzuB,EAAKyC,UACpFW,GAAUpD,EAAKoC,cAAc,iBvBsKlB,UuBrKX0B,GAAa9D,EAAKoC,cAAc,iBAAkB4wuB,IAClDhzuB,EAAKoC,cAAc,WAAqBa,aAAa,QAASxD,KAAKM,OAAOo4E,UAAU3E,YAAY,SAChG/zE,KAAKw/lB,QAAS,EACdx/lB,KAAKqlB,SAASroB,MAAQ,GACtBgD,KAAKwrlB,OAAOxqlB,QAAQ2B,cAAc,IAAM6wuB,IAAex2uB,MAAQ,GAC/DwD,SAASmC,cAAc,IAAM3C,KAAKkqT,SAAW,aAAaltT,MAAQ,KArBlEgD,KAAK8gqB,QAAQ7+pB,QACbjC,KAAKyzuB,QAAUlzuB,EAAKoC,cAAc,IAAM0quB,IACxCrtuB,KAAK0zuB,oBA0Bbd,EAAgBv3uB,UAAUq4uB,gBAAkB,WACxC,IAAIz+tB,EAAMjV,KAAKyzuB,QAAQ7nuB,wBACnB5L,KAAKM,OAAO4S,UACZlT,KAAK8gqB,QAAQp/pB,KAAKuT,EAAIvI,IAAM,GAAIuI,EAAIzI,KAAO,KAG3CxM,KAAK8gqB,QAAQp/pB,KAAKuT,EAAIvI,IAAM,GAAIuI,EAAIzI,KAAO,MAQnDomuB,EAAgBv3uB,UAAUs4uB,kBAAoB,SAAUrzE,GACpD,GAAiC,OAA7BA,EAAKt/pB,QAAQ6a,YAAsB,CACnC,IAAIkQ,EAAQlmB,EAAQ7F,KAAKyzuB,QAAS,gBAAgB5guB,aAAa,gBAC/DhN,EAAQ7F,KAAKyzuB,QAAS,gBAAgBjwuB,aAAa,YAAa88pB,EAAKt/pB,QAAQ6a,aAC7E7b,KAAKyzuB,QAAQ53tB,YAAckQ,EAAQ,KAAOu0oB,EAAKt/pB,QAAQ6a,YAAc,IACrElY,GAAU3D,KAAKyzuB,QAAQp/tB,cAAcA,gBAAiB,eAAgB,YACtErU,KAAKyzuB,QAAQp/tB,cAAcA,cAAc7Q,aAAa,WAAY,MAClExD,KAAKyzuB,QAAQp/tB,cAAcA,cAAcnS,UAOjD0wuB,EAAgBv3uB,UAAU+kqB,WAAa,WACnC,IAAIxjX,IAEInwR,KAtJJ,UAyJIA,KAxJN,QA2JMA,KA1JN,QA6JMA,KA5JN,QA+JMA,KA9JN,QAiKEg2e,GACAxvf,SAAUjT,KAAKkqT,SAAW,iBAC1BzvP,MAAOmiP,EACP1pS,UAAWlT,KAAKM,OAAO4S,UACvBijC,WAAYn2C,KAAK4zuB,eAAet4uB,KAAK0E,MACrCyF,OAAQzF,KAAK2zuB,kBAAkBr4uB,KAAK0E,OAExCA,KAAKM,OAAOU,QAAQW,YAAYR,EAAc,MAC1CmC,GAAItD,KAAKkqT,SAAW,iBAExBlqT,KAAK8gqB,QAAU,IAAItuO,GAAKiwE,GACxBzigB,KAAK8gqB,QAAQzqnB,SAAS,IAAMr2C,KAAKkqT,SAAW,gBAMhD0ob,EAAgBv3uB,UAAUw4uB,aAAe,WACrC,IAAIvyT,EAAathb,KACbi/E,GAAU,EAQd,GAPA56E,GAAa7D,SAASosB,eAAe5sB,KAAKkqT,SAAW,evB2FpC,iBuB1FjB5rT,OAAOhB,KAAKgkb,EAAWhhb,OAAOy5tB,aAAa/J,WAAW5wtB,QAAQ,SAAU/B,EAAK4U,GACrEqva,EAAWj8Z,SAASroB,OAASskb,EAAWj8Z,SAASroB,QAAUK,GACK,oBAAhEikb,EAAWhhb,OAAOy5tB,aAAa/J,UAAU3ytB,GAAK6ytB,gBAC9CjxoB,GAAU,KAGdA,EACAqiW,EAAWhhb,OAAO0+tB,YAAYwH,YAAYC,kBAAkBnlT,EAAWhhb,OAAOo4E,UAAU3E,YAAY,SAAUutW,EAAWhhb,OAAOo4E,UAAU3E,YAAY,mBAD1J,CAIA/zE,KAAK8yuB,UAAYp0uB,KAAWsB,KAAKM,OAAOijE,WAAWkrpB,wBAAyB,MAAM,GAClFzutB,KAAK6yuB,eAAiBn0uB,KAAWsB,KAAKM,OAAOijE,WAAY,MAAM,GAC/D,IAAIuwqB,EAAS9zuB,KAAKM,OAAOijE,WACrB6vqB,EAAY5yuB,SAASmC,cAAc,IAAM3C,KAAKkqT,SAAW,aAC7D,GAA4B,OAAxBlqT,KAAKqlB,SAASroB,OAA0C,KAAxBgD,KAAKqlB,SAASroB,OAAoC,KAApBo2uB,EAAUp2uB,MAAc,CACtF,IAAI+uB,GACA0L,KAAMz3B,KAAKqlB,SAASroB,MACpB0J,KAAM,mBAENqtuB,GACAt8sB,KAAMz3B,KAAKqlB,SAASroB,MACpBmztB,QAASijB,EAAUp2uB,OAGvB,GADAgD,KAAK+yuB,cAAe,EACf/yuB,KAAKw/lB,QAcN,IAASrjmB,EAAI,EAAGA,EAAI23uB,EAAO/gtB,OAAOt2B,OAAQN,IACtC,GAAI23uB,EAAO/gtB,OAAO52B,GAAGuK,OAASisuB,IAAkC,OAA1B3yuB,KAAKizuB,kBACvCa,EAAO/gtB,OAAO52B,GAAGs7B,OAASz3B,KAAKizuB,kBAAoBjzuB,KAAKw/lB,OACxD,IAASj8kB,EAAI,EAAGA,EAAIuwtB,EAAOrlB,wBAAwBhytB,OAAQ8mB,IACnDuwtB,EAAOrlB,wBAAwBlrsB,GAAGkU,OAASz3B,KAAKizuB,mBAChDa,EAAO/gtB,OAAO52B,GAAG6moB,QAAUhjoB,KAAKqlB,SAASroB,MACzC82uB,EAAOrlB,wBAAwBlrsB,GAAG4ssB,QAAUijB,EAAUp2uB,MACtDgD,KAAKM,OAAOy5tB,aAAa/J,UAAUhwtB,KAAKizuB,kBAAkBjwG,QAAUhjoB,KAAKqlB,SAASroB,MAClFgD,KAAK+yuB,cAAe,QArBpC,IAAK,IAAI52uB,EAAI,EAAGA,EAAI23uB,EAAO/gtB,OAAOt2B,OAAQN,IACtC,GAAI23uB,EAAO/gtB,OAAO52B,GAAGuK,OAASisuB,IAAQmB,EAAO/gtB,OAAO52B,GAAGs7B,OAAS1L,EAAM0L,KAAM,CACxE,IAAK,IAAIlU,EAAI,EAAGA,EAAIuwtB,EAAOrlB,wBAAwBhytB,OAAQ8mB,IACvD,GAAIuwtB,EAAOrlB,wBAAwBlrsB,GAAGkU,OAAS1L,EAAM0L,KAEjD,YADAz3B,KAAKg0uB,oBAAoB1yT,EAAWhhb,OAAOo4E,UAAU3E,YAAY,SAAUutW,EAAWhhb,OAAOo4E,UAAU3E,YAAY,gBAI3H/zE,KAAK+yuB,cAAe,EAmB5B/yuB,KAAK+yuB,eACLe,EAAO/gtB,OAAOvuB,KAAKunB,GACnB+ntB,EAAOrlB,wBAAwBjqtB,KAAKuvuB,IAExC/zuB,KAAKi0uB,WAAWH,EAAQ/ntB,EAAM0L,WAGF,OAAxBz3B,KAAKqlB,SAASroB,OAA0C,KAAxBgD,KAAKqlB,SAASroB,OAC9C2G,GAAUnD,SAASosB,eAAe5sB,KAAKkqT,SAAW,evB8BzC,iBuB7BT1pT,SAASosB,eAAe5sB,KAAKkqT,SAAW,cAAchoT,SAGtDlC,KAAKM,OAAO0+tB,YAAYwH,YAAYC,kBAAkBzmuB,KAAKM,OAAOo4E,UAAU3E,YAAY,SAAU/zE,KAAKM,OAAOo4E,UAAU3E,YAAY,qBAIhJ6+pB,EAAgBv3uB,UAAU44uB,WAAa,SAAUH,EAAQ/ntB,GACrD,IACI/rB,KAAKM,OAAO0G,eAAgBu8D,WAAYuwqB,IAAU,GAClD9zuB,KAAKM,OAAO2xd,kBAAiB,GAC7Bjyd,KAAKw/lB,QAAS,EACVx/lB,KAAKwrlB,OACLxrlB,KAAKwrlB,OAAOvplB,SAGZjC,KAAKqlB,SAASroB,MAAQ,GACtBgD,KAAKgzuB,YAAc,KACnBhzuB,KAAK6+f,UAAY,KACjB7+f,KAAKM,OACD2ruB,eAAe53tB,cAAc1R,cAAc,IAAM6wuB,IAAex2uB,MAAQ,GAC5EgD,KAAKM,OACD2ruB,eAAe53tB,cAAc1R,cAAc,IAAM3C,KAAKkqT,SAAW,aAAaltT,MAAQ,IAGlG,MAAOgkJ,GACChhJ,KAAKM,OAAOy5tB,aAAa/J,UAAUjksB,WAC5B/rB,KAAKM,OAAOy5tB,aAAa/J,UAAUjksB,GAE9C/rB,KAAKM,OAAO0+tB,YAAYwH,YAAYC,kBAAkBzmuB,KAAKM,OAAOo4E,UAAU3E,YAAY,SAAU/zE,KAAKM,OAAOo4E,UAAU3E,YAAY,mBACpI/zE,KAAKM,OAAO0G,eAAgBu8D,WAAYvjE,KAAK6yuB,iBAAkB,GAC/D7yuB,KAAKM,OAAO2xd,kBAAiB,KAQrC2gR,EAAgBv3uB,UAAU64uB,iBAAmB,SAAU5zuB,GACnD,IAAIsrB,KAqBJ,OApBAttB,OAAOhB,KAAKgD,EAAOy5tB,aAAa/J,WAAW5wtB,QAAQ,SAAU/B,GACzD,IAAIqJ,EAAO,KAGPA,EAF4C,WAA5CpG,EAAOy5tB,aAAa/J,UAAU3ytB,GAAKqJ,MAAiE,YAA5CpG,EAAOy5tB,aAAa/J,UAAU3ytB,GAAKqJ,MAC/C,YAA5CpG,EAAOy5tB,aAAa/J,UAAU3ytB,GAAKqJ,KAnSvC,aAuSgEvL,IAArDmF,EAAOy5tB,aAAa/J,UAAU3ytB,GAAK6ytB,cACtC5vtB,EAAOy5tB,aAAa/J,UAAU3ytB,GAAK6ytB,cApS7C,MAsSEtksB,EAAOpnB,MACHyN,MAAO3R,EAAOy5tB,aAAa/J,UAAU3ytB,GAAK4U,MAC1CwlB,KAAMn3B,EAAOy5tB,aAAa/J,UAAU3ytB,GAAK2loB,QAAU,KAAOt8nB,EAAO,IACjEA,KAAMA,EACNgvC,KAAM49rB,GAAa,IAAMlX,GACzBjM,QAAS7vtB,EAAOy5tB,aAAa/J,UAAU3ytB,GAAK8ytB,QAC5CpksB,MAAO1uB,EACP2loB,QAAS1ioB,EAAOy5tB,aAAa/J,UAAU3ytB,GAAK2loB,QAAU1ioB,EAAOy5tB,aAAa/J,UAAU3ytB,GAAK2loB,QAAU3loB,MAGpGuuB,GAOXgntB,EAAgBv3uB,UAAUu4uB,eAAiB,SAAU3zuB,GACjDA,EAAKe,QAAQ0D,MAAM+9D,QAAUziE,KAAKwrlB,OAAO/ohB,OAAS,GAAGv1D,WACrDjN,EAAKe,QAAQ0D,MAAM4xC,QAAU,UAOjCs8rB,EAAgBv3uB,UAAU84uB,aAAe,SAAUl0uB,GAC/CA,EAAK44B,QAAS,EACd,IAAI9M,EAAQ9rB,EAAKy0T,YAAY7hT,aAAa,cACtCnM,EAAOzG,EAAKy0T,YAAY7hT,aAAa,aACrCuguB,EAAYpzuB,KAAKwrlB,OAAOxqlB,QAAQ2B,cAAc,IAAM3C,KAAKkqT,SAAW,aACxE,GAAIjqT,EAAKkH,OAAO7D,KAAOtD,KAAKkqT,SAAW,aAAmC,KAApBkpb,EAAUp2uB,MAExDo2uB,EAAUp2uB,MADV0J,IAASisuB,GACS1yuB,EAAKw2T,gBAAgBnzT,GAAG4J,WAGxB,IAAMxG,EAAO,IAAMqlB,EAAQ,KAEjDqntB,EAAUlxuB,aAET,GAAIjC,EAAKkH,OAAO7D,KAAQtD,KAAKkqT,SAAW,aAAoC,KAApBkpb,EAAUp2uB,MAAc,CACjF,IAAIo3uB,OAAc,EACdC,EAAYjB,EAAUzttB,eACtBkkH,EAAeupmB,EAAUp2uB,MACzBs3uB,EAAiBzqmB,EAAa3lH,UAAU,EAAGmwtB,GAC3CE,EAAgB1qmB,EAAa3lH,UAAUmwtB,EAAWxqmB,EAAaptI,QAC/DiK,IAASisuB,IACTyB,EAAcE,EAAiBr0uB,EAAKw2T,gBAAgBnzT,GAAG4J,WACvDkmuB,EAAUp2uB,MAAQs3uB,EAAiBr0uB,EAAKw2T,gBAAgBnzT,GAAG4J,WAAaqnuB,IAGxEH,EAAcE,EAAiB,IAAM5tuB,EAAO,IAAMqlB,EAAQ,KAC1DqntB,EAAUp2uB,MAAQs3uB,EAAiB,IAAM5tuB,EAAO,IAAMqlB,EAAQ,KAAYwotB,GAE9EnB,EAAUlxuB,QACVkxuB,EAAUrttB,kBAAkBqutB,EAAY33uB,OAAQ23uB,EAAY33uB,aAG5DwD,EAAK44B,QAAS,GAOtB+5sB,EAAgBv3uB,UAAUs/qB,aAAe,WACrC,IAAI56qB,EAAQC,KAC6D,OAArEQ,SAASmC,cAAc,IAAM3C,KAAKkqT,SAAW,qBAC7C3lT,EAAO/D,SAASmC,cAAc,IAAM3C,KAAKkqT,SAAW,qBAExDlqT,KAAKM,OAAOU,QAAQW,YAAYR,EAAc,OAC1CmC,GAAItD,KAAKkqT,SAAW,mBACpB7mT,UvBpKY,6BuBsKhBrD,KAAKwrlB,OAAS,IAAI1me,IACdkC,eAAe,EACf9yG,UAAYkC,EAAG,SAAUC,EAAG,UAC5B8vG,UAEQE,MAAS,WAAc,OAAOtmH,EAAM8zuB,gBACpCztnB,aACIhsF,QAASp6B,KAAKM,OAAOo4E,UAAU3E,YAAY,MAC3CiqC,WAAW,KAIfqI,MAAS,WACLtmH,EAAMyrlB,OAAOvplB,QACblC,EAAMy/lB,QAAS,GAEnBp5e,aACIhsF,QAASp6B,KAAKM,OAAOo4E,UAAU3E,YAAY,aAIvD9xE,MAAO,SAAUhC,GACwB,mBAAjCF,EAAMO,OAAOi/B,kBACbx/B,EAAMO,OAAOmhuB,gBAAgB11nB,SACG,UAA5BhsG,EAAMO,OAAOunuB,aACblkuB,GAAU5D,EAAMO,OAAOU,QAAQ2B,cAAc,IAAM+7tB,KvB3YlD,UuB4YD3+tB,EAAMO,OAAO2ruB,eAAe3B,gBAAgBrmnB,SAGpDlkH,EAAM4luB,QAAQrztB,UACdvS,EAAMyrlB,OAAOl5kB,UACbvS,EAAM+yuB,UAAY,KAClBvuuB,EAAO/D,SAASosB,eAAe7sB,EAAMmqT,SAAW,qBAChD3lT,EAAO/D,SAASmC,cAAc,IAAM5C,EAAMmqT,SAAW,oBAEzD/zQ,WAAY,SAAUl2C,GAClBF,EAAMyrlB,OAAOxqlB,QAAQ2B,cAAc,iBAC/Ba,aAAa,QAASzD,EAAMO,OAAOo4E,UAAU3E,YAAY,2BAEjE61C,mBAAqB5xF,OAAQ,QAC7BhiB,MAAO,MACPwvG,SAAS,EACTQ,eAAe,EACf9yG,UAAWlT,KAAKM,OAAO4S,UACvByzG,eAAe,EACf/hC,OAAQ5kF,KAAKM,OAAOo4E,UAAU3E,YAAY,yBAC1C5sE,OAAQ3G,SAASuL,OAErB/L,KAAKwrlB,OAAOn1iB,SAAS,IAAMr2C,KAAKkqT,SAAW,qBAM/C0ob,EAAgBv3uB,UAAUm5uB,qBAAuB,WAC7C,IAAIC,EAAWtzuB,EAAc,OAASmC,GAAItD,KAAKkqT,SAAW,WAAY7mT,UvBnNpD,2BuBoNlB,GAAoC,mBAAhCrD,KAAKM,OAAOi/B,iBACsD,OADdv/B,KAAKM,OACzD2ruB,eAAe53tB,cAAc1R,cAAc,IAAM+xuB,KAAyB10uB,KAAKM,OAAOg/tB,WAAY,CAClG,IAAIqV,EAAYxzuB,EAAc,OAASmC,GAAItD,KAAKkqT,SAAW,YAAa7mT,UvBpM5D,mBuBqMZoxuB,EAAS9yuB,YAAYgzuB,GACrB,IAAI9mJ,EAAY1slB,EAAc,OAASmC,GAAItD,KAAKkqT,SAAW,YAAa7mT,UvBpMzD,uBuBqMXuxuB,EAASzzuB,EAAc,UACvBmC,GAAItD,KAAKkqT,SAAW,SAAUloT,UAAW,MACzCqB,UvB7MQ,uBuB+MRs/M,EAAYxhN,EAAc,UAC1BmC,GAAItD,KAAKkqT,SAAW,YAAaloT,UAAW,SAC5CqB,UvBnNW,0BuBqNfwqlB,EAAUlslB,YAAYghN,GACtBkrY,EAAUlslB,YAAYizuB,GACtBH,EAAS9yuB,YAAYkslB,OAEpB,CACD,IAAIgnJ,EAAW1zuB,EAAc,OAASmC,GAAItD,KAAKkqT,SAAW,WAAY7mT,UvBxOxD,2BuByOVgiB,EAAWlkB,EAAc,SACzBmC,GAAItD,KAAKkqT,SAAW,aACpBzmT,OAASiD,KAAQ,OAAQsqH,SAAY,KACrC3tH,UAAWmwuB,KAIf,GAFAqB,EAASlzuB,YAAY0jB,GACrBovtB,EAAS9yuB,YAAYkzuB,IAChB70uB,KAAKM,OAAOg/tB,WAAY,CACzB,IAAIwV,EAAa3zuB,EAAc,OAC3BkC,UvBlMqB,0BuBmMrBrB,UAAWhC,KAAKM,OAAOo4E,UAAU3E,YAAY,kBAEjD0gqB,EAAS9yuB,YAAYmzuB,GAEzB,IAAIC,EAAU5zuB,EAAc,OAASmC,GAAItD,KAAKkqT,SAAW,kBAAmB7mT,UAAW2xuB,KAGvF,GAFAD,EAAQpzuB,YAAYR,EAAc,OAASmC,GAAItD,KAAKkqT,SAAW,OAAQ7mT,UvB9O7D,sBuB+OVoxuB,EAAS9yuB,YAAYozuB,IAChB/0uB,KAAKM,OAAOg/tB,WAAY,CACzB,IAAI2V,EAAe9zuB,EAAc,OAC7BkC,UvB1MmB,wBuB2MnBrB,UAAWhC,KAAKM,OAAOo4E,UAAU3E,YAAY,aAEjD0gqB,EAAS9yuB,YAAYszuB,GAEzB,IAAIC,EAAU/zuB,EAAc,YACxBmC,GAAItD,KAAKkqT,SAAW,YACpB7mT,UAAWqxuB,GACXjxuB,OACIqjB,YAAe9mB,KAAKM,OAAOg/tB,WAAat/tB,KAAKM,OAAOo4E,UAAU3E,YAAY,kBACtE/zE,KAAKM,OAAOo4E,UAAU3E,YAAY,eAI9C,GADA0gqB,EAAS9yuB,YAAYuzuB,GACjBl1uB,KAAKM,OAAOg/tB,WAAY,CACpBzxI,EAAY1slB,EAAc,OAASmC,GAAItD,KAAKkqT,SAAW,YAAa7mT,UvBrP7D,uBuBqPX,IACI8xuB,EAAQh0uB,EAAc,UACtBmC,GAAItD,KAAKkqT,SAAW,QAASloT,UAAW,QACxCqB,UvB5PG,sBuB8PPwqlB,EAAUlslB,YAAYwzuB,GACtBV,EAAS9yuB,YAAYkslB,IAG7B,OAAO4mJ,GAMX7B,EAAgBv3uB,UAAU0uuB,qBAAuB,WACzCvpuB,SAASmC,cAAc,IAAM3C,KAAKkqT,SAAW,eAC7ClqT,KAAKgzuB,YAAcxyuB,SAASmC,cAAc,IAAM3C,KAAKkqT,SAAW,aAAaltT,MAC7EgD,KAAK6+f,UAAY7+f,KAAKqlB,SAASroB,OAEnCgD,KAAKo1uB,mBAAmBp1uB,KAAKM,OAAO2ruB,eAAejB,kBAMvD4H,EAAgBv3uB,UAAUusuB,eAAiB,WACvC,IAAI7nuB,EAAQC,KACZA,KAAK2luB,QAAU,IAAIv+a,IACfx7R,QAAU23C,WAAYvjE,KAAKk0uB,iBAAiBl0uB,KAAKM,QAASgD,GAAI,UAAWmpB,KAAM,OAAQinD,QAAS,QAChGy1O,kBAAkB,EAClBj2S,UAAWlT,KAAKM,OAAO4S,UACvBmiuB,eAAgB,SAAUp1uB,GACtBA,EAAK44B,QAAS,GAElBk0sB,cAAe,SAAU9suB,GACrB,GAAIA,EAAK3D,MAAM6K,OAAOrD,UAAUK,SvBncxB,UuBmckD,CACtD,IAAImxuB,EAAW90uB,SAASmC,cAAc,2BACtCgB,GAAU2xuB,GvB3TP,gBuB4THA,EAAS5wuB,MAAM+9D,QAAU1iE,EAAMyrlB,OAAO/ohB,OAAS,GAAGv1D,WAClDoouB,EAAS5wuB,MAAM4xC,QAAU,cAGzBr2C,EAAK44B,QAAS,GAGtB08sB,YAAav1uB,KAAKqzuB,kBAAkB/3uB,KAAK0E,MACzCgtuB,aAAchtuB,KAAKm0uB,aAAa74uB,KAAK0E,MACrCw1uB,SAAUx1uB,KAAKy1uB,aAAan6uB,KAAK0E,MACjC43L,UAAW,cAEf53L,KAAK2luB,QAAQtvrB,SAAS,IAAMr2C,KAAKkqT,SAAW,SAOhD0ob,EAAgBv3uB,UAAUo6uB,aAAe,SAAUx1uB,GAC/C,IAAI8rB,EAAQ9rB,EAAKkrT,SAASp/R,MAC1B9rB,EAAKM,KAAKiD,aAAa,aAAcuoB,GACrC9rB,EAAKM,KAAKiD,aAAa,eAAgBvD,EAAKkrT,SAAS63U,SACrD/ioB,EAAKM,KAAKiD,aAAa,YAAavD,EAAKkrT,SAASzkT,MAKlD7B,GAJkB1D,EAAc,QAC5BsC,OAASutH,SAAY,KAAMkF,gBAAiB,QAASh2F,MAASlgC,KAAKM,OAAOo4E,UAAU3E,YAAY,cAChG1wE,UAAW+4tB,oBAEQn8tB,EAAKM,KAAKoC,cAAc,IAAMsruB,KACrD7ouB,GAAQnF,EAAKM,KAAKoC,cAAc,IAAM2wuB,KAAcrzuB,EAAKM,KAAKoC,cAAc,IAAMsruB,KAC3B,WAAnDjuuB,KAAKM,OAAOy5tB,aAAa/J,UAAUjksB,GAAOrlB,MAC1C1G,KAAKM,OAAOy5tB,aAAa/J,UAAUjksB,GAAOmksB,gBAAkByiB,GAC5DtuuB,GAAapE,EAAKM,KAAKoC,cAAc,IAAM2wuB,KAAclX,IAGzDn8tB,EAAKM,KAAKoC,cAAc,IAAM2wuB,IAAY9vuB,aAAa,QAASxD,KAAKM,OAAOo4E,UAAU3E,YAAY,WAElG/zE,KAAKM,OAAOy5tB,aAAa/J,UAAUjksB,GAAOmksB,gBAAkByiB,KAC5D1yuB,EAAKM,KAAKoC,cAAc,IAAM2wuB,IAAY9vuB,aAAa,QAASxD,KAAKM,OAAOo4E,UAAU3E,YAAY,SAClGpwE,GAAU1D,EAAKM,KAAKoC,cAAc,IAAM2wuB,KvB/R7B,UuBgSXjvuB,GAAapE,EAAKM,KAAKoC,cAAc,IAAM2wuB,KAAcA,MAQjEV,EAAgBv3uB,UAAUq6uB,oBAAsB,SAAUr4uB,GAGtD,IAAK,IAFD03uB,EAAU5zuB,EAAc,OAASmC,GAAItD,KAAKkqT,SAAW,kBAAmB7mT,UAAW2xuB,KACnFtuuB,GAtjBF,MAJE,QACF,MACA,MACA,OAwjBOvK,EAAI,EAAGA,EAAI,EAAGA,IAAK,CACxB,IAAI2V,EAAQ3Q,EAAc,SACtBmC,GAAItD,KAAKkqT,SAAW,QAAU7sT,EAAMqJ,EAAKvK,GACzCsH,OAASiD,KAAQ,QAASivuB,YAAat4uB,GACvCgG,UvB/WO,uBuBiXX0xuB,EAAQpzuB,YAAYmQ,GAExB,OAAOijuB,GAOXnC,EAAgBv3uB,UAAUu6uB,iBAAmB,SAAUt1uB,GACnD,IAAIP,EAAQC,KACRxD,KAUJ,OATA8B,OAAOhB,KAAKgD,EAAOy5tB,aAAa/J,WAAW5wtB,QAAQ,SAAU/B,EAAK4U,GAC9DzV,EAAKgI,MACDogF,OAAQ,aAAe7kF,EAAMmqT,SAAW,IAAMj4S,EAAQ,wDAClD5U,EAAM,iBAAmB0C,EAAMO,OAAOy5tB,aAAa/J,UAAU3ytB,GAAK2loB,QAAU,cAC5EjjoB,EAAMO,OAAOy5tB,aAAa/J,UAAU3ytB,GAAKqJ,KAAO,KACpD0zB,QAAS95B,EAAOy5tB,aAAa/J,UAAU3ytB,GAAK6ytB,gBAAkByiB,IACR,WAAlD5yuB,EAAMO,OAAOy5tB,aAAa/J,UAAU3ytB,GAAKqJ,KAAoB,GAAK3G,EAAM21uB,oBAAoBr4uB,GAAKyE,cAGtGtF,GAOXo2uB,EAAgBv3uB,UAAU+5uB,mBAAqB,SAAUl+I,GACrD,IAAIn3lB,EAAQC,KACZk3lB,EAAOz8hB,MAAM,GAAGrgC,QAAUp6B,KAAKw0uB,uBAAuB1yuB,UACtDo1lB,EAAOtriB,WACP,IAAI+2J,EAAY,IAAI5kG,IAAS9qG,SvBvYnB,SuBuYuC+qG,WAAW,IAK5D,GAJA2kG,EAAUtsK,SAAS,IAAMr2C,KAAKkqT,SAAW,aACrCvnG,EAAU3hN,UACV2hN,EAAU3hN,QAAQ+yX,QAAU/zX,KAAK61uB,eAAev6uB,KAAK0E,OAGa,OADlEA,KAAKM,OACL2ruB,eAAe53tB,cAAc1R,cAAc,IAAM+xuB,KAAyB10uB,KAAKM,OAAOg/tB,WAAY,CAClG,IAAI6V,EAAQ,IAAIp3nB,IAAS9qG,SAAU6iuB,mBAAoC93nB,WAAW,IAMlF,GALAm3nB,EAAM9+rB,SAAS,IAAMr2C,KAAKkqT,SAAW,SACrClqT,KAAKqlB,SAAW,IAAIk5G,IAChBz3G,YAAa9mB,KAAKM,OAAOo4E,UAAU3E,YAAY,eAEnD/zE,KAAKqlB,SAASgxB,SAAS,IAAMr2C,KAAKkqT,SAAW,cACpB,OAArBlqT,KAAKgzuB,aAC6E,OADrDhzuB,KAAKM,OAClC2ruB,eAAe53tB,cAAc1R,cAAc,IAAM3C,KAAKkqT,SAAW,aAAuB,CAC7ElqT,KAAKM,OACZ2ruB,eAAe53tB,cAAc1R,cAAc,IAAM3C,KAAKkqT,SAAW,aAChEltT,MAAQgD,KAAKgzuB,YAEC,OAAnBhzuB,KAAK6+f,WAC+D,OADzC7+f,KAAKM,OAChC2ruB,eAAe53tB,cAAc1R,cAAc,IAAM6wuB,MACjDxzuB,KAAKM,OACD2ruB,eAAe53tB,cAAc1R,cAAc,IAAM6wuB,IAAex2uB,MAAQgD,KAAK6+f,UACjF7+f,KAAKqlB,SAASroB,MAAQgD,KAAK6+f,WAE3Bs2O,EAAMn0uB,UACNm0uB,EAAMn0uB,QAAQ+yX,QAAU/zX,KAAK6zuB,aAAav4uB,KAAK0E,YAGlD,GAAIA,KAAKM,OAAOg/tB,WAAY,CAC7B,IAAIyW,EAAY,IAAI9/b,IAChBx7O,MAAOz6D,KAAK41uB,iBAAiB51uB,KAAKM,QAClC4S,UAAWlT,KAAKM,OAAO4S,UACvB8iuB,UAAW,SAAU/1uB,GACgD,IAA7DA,EAAKe,QAAQQ,iBAAiB,oBAAoB/E,QAClD6B,OAAOhB,KAAKyC,EAAMO,OAAOy5tB,aAAa/J,WAAW5wtB,QAAQ,SAAU/B,GAC/D,IAAIqJ,GAjoBtB,MAJE,QACF,MACA,MACA,OAooBkB,GAAIrJ,IAAQ4C,EAAKe,QAAQ2B,cAAc,eAAekQ,aAAa,cAC/D,IAAK,IAAI1W,EAAI,EAAGA,EAAI,EAAGA,IACL,IAAI4jH,IACd1sG,MAAO3M,EAAKvK,GACZs7B,KAroB1B,gBAqoB0Cp6B,EAChB+iB,OAAQ,SAAUngB,GACd,IAAIyG,EAAOzG,EAAK3D,MAAM6K,OAAOkN,cAAc1R,cAAc,YACrDs4D,UACAlvC,EAAQ9rB,EAAK3D,MAAM6K,OAAOtB,QAAQ,iBAClClD,cAAc,eAAekQ,aAAa,gBAC9C5S,EAAK3D,MAAM6K,OACPtB,QAAQ,iBAAiBlD,cAAc,YACvCs4D,UAAYlvC,EAAQ,KAAOrlB,EAAO,IACtCzG,EAAK3D,MAAM6K,OAAOtB,QAAQ,iBACtBlD,cAAc,cAAca,aAAa,YAAakD,MAGtD2vC,SAAS,IAAMt2C,EAAMmqT,SAAW,QAAU7sT,EAAMqJ,EAAKvK,SAOrFy4uB,EAAS,IAAI72nB,IAAS9qG,SvBrcpB,SuBqcwC+qG,WAAW,IACzD42nB,EAAOv+rB,SAAS,IAAMr2C,KAAKkqT,SAAW,UACtC6rb,EAAU1/rB,SAAS,IAAMr2C,KAAKkqT,SAAW,aACzC5rT,OAAOhB,KAAK0C,KAAKM,OAAOy5tB,aAAa/J,WAAW5wtB,QAAQ,SAAU/B,EAAK4U,GACnE,IAAIvL,EAAO,KAIPA,EAHkD,WAAlD3G,EAAMO,OAAOy5tB,aAAa/J,UAAU3ytB,GAAKqJ,MACS,YAAlD3G,EAAMO,OAAOy5tB,aAAa/J,UAAU3ytB,GAAKqJ,MACS,YAAlD3G,EAAMO,OAAOy5tB,aAAa/J,UAAU3ytB,GAAKqJ,KAtqBjD,aA0qB0EvL,IAA3D4E,EAAMO,OAAOy5tB,aAAa/J,UAAU3ytB,GAAK6ytB,cAC5CnwtB,EAAMO,OAAOy5tB,aAAa/J,UAAU3ytB,GAAK6ytB,cAvqBvD,MAyqBqB,IAAIrxmB,IACfxrG,MAAOtT,EAAMO,OAAOy5tB,aAAa/J,UAAU3ytB,GAAK2loB,QAAU,KAAOt8nB,EAAO,MAEnE2vC,SAAS,IAAMt2C,EAAMmqT,SAAW,IAAMj4S,GAC/CzR,SAASmC,cAAc,IAAM5C,EAAMmqT,SAAW,IAAMj4S,GAAOzO,aAAa,aAAcnG,GACtFmD,SAASmC,cAAc,IAAM5C,EAAMmqT,SAAW,IAAMj4S,GAAOzO,aAAa,YAAakD,KAErFkuuB,EAAO5zuB,UACP4zuB,EAAO5zuB,QAAQ+yX,QAAU/zX,KAAKi2uB,YAAY36uB,KAAK0E,SAQ3D4yuB,EAAgBv3uB,UAAUw6uB,eAAiB,WACvC71uB,KAAKo1uB,mBAAmBp1uB,KAAKM,OAAO2ruB,eAAejB,kBAMvD4H,EAAgBv3uB,UAAU46uB,YAAc,WAKpC,IAAK,IAJD11uB,EAAOC,SAASgB,iBAAiB,yBACjCq9f,EAAY,GACZ9ye,EAAQ,KACRrlB,EAAO,KACFvK,EAAI,EAAGA,EAAIoE,EAAK9D,OAAQN,IAG7B,GAFA4vB,EAAQxrB,EAAKpE,GAAGkY,cAAc1R,cAAc,gBAAgBkQ,aAAa,eAE7C,KAD5BnM,EAAOnG,EAAKpE,GAAGkY,cAAc1R,cAAc,gBAAgBkQ,aAAa,cAC/DtU,QAAQo0uB,IACb9zO,EAAYA,EAAa,IAAMn4f,EAAO,IAAMqlB,EAAQ,UAGpD,IAAK,IAAIxI,EAAI,EAAGA,EAAIvjB,KAAKM,OAAOijE,WAAWkrpB,wBAAwBhytB,OAAQ8mB,IACvE,GAAIvjB,KAAKM,OAAOijE,WAAWkrpB,wBAAwBlrsB,GAAGkU,OAAS1L,EAAO,CAClE8ye,GAAwB7+f,KAAKM,OAAOijE,WAAWkrpB,wBAAwBlrsB,GAAG4ssB,QAC1E,MAKhBnwtB,KAAKgzuB,YAAmC,OAArBhzuB,KAAKgzuB,YAAwBhzuB,KAAKgzuB,YAAcn0O,EAAaA,EAChF7+f,KAAKo1uB,mBAAmBp1uB,KAAKM,OAAO2ruB,eAAejB,kBAOvD4H,EAAgBv3uB,UAAU66uB,4BAA8B,WAChDl2uB,KAAKM,OAAOg/tB,YAA8C,mBAAhCt/tB,KAAKM,OAAOi/B,gBACtCv/B,KAAK+puB,uBAEC/puB,KAAKM,OAAOg/tB,aAClBt/tB,KAAKm2uB,qBACLn2uB,KAAKwrlB,OAAOxqlB,QAAQ0D,MAAMgI,IAAMqoB,SAAS/0B,KAAKwrlB,OAAOxqlB,QAAQ0D,MAAMgI,IAAK,IAAM,EAAI,MAAQ1M,KAAKwrlB,OAAOxqlB,QAAQ0D,MAAMgI,MAO5HkmuB,EAAgBv3uB,UAAU86uB,mBAAqB,WAC3Cn2uB,KAAK8yuB,UAAYp0uB,KAAWsB,KAAKM,OAAOijE,WAAWkrpB,wBAAyB,MAAM,GAClFzutB,KAAK26qB,eACL36qB,KAAKwrlB,OAAOpxjB,QAAUp6B,KAAKw0uB,uBAC3Bx0uB,KAAKwrlB,OAAOt5hB,UACZlyD,KAAKqlB,SAAW,IAAIk5G,IAChBz3G,YAAa9mB,KAAKM,OAAOo4E,UAAU3E,YAAY,eAEnD/zE,KAAKqlB,SAASgxB,SAAS,IAAMr2C,KAAKkqT,SAAW,cAC7ClqT,KAAK4nuB,iBACL5nuB,KAAKogqB,aACLpgqB,KAAK++a,UAAY,IAAI3rU,GAAUpzG,KAAKwrlB,OAAOxqlB,QAAQ2B,cAAc,IAAM3C,KAAKkqT,SAAW,cACvFlqT,KAAKo2uB,eAAiB,IAAIhgoB,GAAep2G,KAAKM,OAAOkruB,sBAAsBhgJ,OAAOxqlB,SAC9Ek2G,UAAWl3G,KAAKg6I,iBAAiB1+I,KAAK0E,MACtC42G,YAAc6zF,UAAW,aAAc12F,MAAO,SAC9ClkC,UAAW,aASnB+iqB,EAAgBv3uB,UAAU24uB,oBAAsB,SAAU9zsB,EAAOgS,GAC7D,IAAIs0rB,EAAcrluB,EAAc,OAC5BmC,GAAItD,KAAKkqT,SAAW,eACpB7mT,UAAWgkuB,KAEfrnuB,KAAKM,OAAOU,QAAQW,YAAY6kuB,GAChCxmuB,KAAKkzuB,aAAe,IAAIpunB,IACpB8E,mBAAqB5xF,OAAQ,QAC7BgvF,eAAe,EACfL,eAAe,EACfzzG,UAAWlT,KAAKM,OAAO4S,UACvB8C,MAAO,OACPD,OAAQ,OACR7B,UAAYkC,EAAG,SAAUC,EAAG,UAC5B8vG,UAEQE,MAAOrmH,KAAKq2uB,eAAe/6uB,KAAK0E,MAChComH,aACInzG,SAAUu0tB,GAAsB,aAChCptsB,QAASp6B,KAAKM,OAAOo4E,UAAU3E,YAAY,MAAOiqC,WAAW,KAIjEqI,MAAOrmH,KAAKynuB,kBAAkBnsuB,KAAK0E,MACnComH,aACInzG,SAAU80tB,GACV3tsB,QAASp6B,KAAKM,OAAOo4E,UAAU3E,YAAY,UAAWiqC,WAAW,KAI7Ep5B,OAAQ1kD,EACR9F,QAAS8X,EACTszE,SAAS,EACThuF,SAAS,EACTwuF,eAAe,EACf7+G,OAAQ3G,SAASuL,KACjB9J,MAAOjC,KAAKynuB,kBAAkBnsuB,KAAK0E,QAEvCA,KAAKkzuB,aAAa78rB,SAASmwrB,IAE/BoM,EAAgBv3uB,UAAUg7uB,eAAiB,WAGvC,IAAK,IAFDvC,EAAS9zuB,KAAKM,OAAOijE,WACrB6vqB,EAAY5yuB,SAASmC,cAAc,IAAM3C,KAAKkqT,SAAW,aACpD/tT,EAAI,EAAGA,EAAI23uB,EAAO/gtB,OAAOt2B,OAAQN,IACtC,GAAI23uB,EAAO/gtB,OAAO52B,GAAGuK,OAASisuB,IAAQmB,EAAO/gtB,OAAO52B,GAAGs7B,OAASz3B,KAAKqlB,SAASroB,MAC1E,IAAK,IAAIumB,EAAI,EAAGA,EAAIuwtB,EAAOrlB,wBAAwBhytB,OAAQ8mB,IACnDuwtB,EAAOrlB,wBAAwBlrsB,GAAGkU,OAASz3B,KAAKqlB,SAASroB,QACzD82uB,EAAOrlB,wBAAwBlrsB,GAAG4ssB,QAAUijB,EAAUp2uB,OAKtEgD,KAAKi0uB,WAAWH,EAAQ9zuB,KAAKqlB,SAASroB,OACtCgD,KAAKynuB,qBAETmL,EAAgBv3uB,UAAUosuB,kBAAoB,WACtCjnuB,SAASosB,eAAe5sB,KAAKkqT,SAAW,iBACxC3lT,EAAO/D,SAASosB,eAAe5sB,KAAKkqT,SAAW,gBAAgB71S,gBAQvEu+tB,EAAgBv3uB,UAAUqB,iBAAmB,WACrCsD,KAAKM,OAAO0mF,aAGhBhnF,KAAKM,OAAOslF,GAAGulpB,GAA4BnruB,KAAKk2uB,4BAA6Bl2uB,OAOjF4yuB,EAAgBv3uB,UAAUuB,oBAAsB,WACxCoD,KAAKM,OAAO0mF,aAGhBhnF,KAAKM,OAAO0lF,IAAImlpB,GAA4BnruB,KAAKk2uB,8BAOrDtD,EAAgBv3uB,UAAUiX,QAAU,WAChCtS,KAAKpD,uBAEFg2uB,KCv2BXd,GAAe1loB,OAAOwmoB,IAKtB,IAAI0D,GAA2B,WAE3B,SAASA,EAAUh2uB,GACfN,KAAKM,OAASA,EACdN,KAAKtD,mBAuGT,OAjGA45uB,EAAUj7uB,UAAUkkC,cAAgB,WAChC,MAAO,aAEX+2sB,EAAUj7uB,UAAUk7uB,eAAiB,WACjCv2uB,KAAKgB,QAAUG,EAAc,OACzBmC,GAAItD,KAAKM,OAAOU,QAAQsC,GAAK,kBAC7BC,OAAQ,kBAAoBvD,KAAKM,OAAOU,QAAQ0D,MAAMsR,QAE1DhW,KAAKM,OAAOU,QAAQqT,cAAc7Q,aAAa,KAAM,oBACrDxD,KAAKM,OAAOU,QAAQqT,cAAc1S,YAAY3B,KAAKgB,SACnDhB,KAAKM,OAAOU,QAAQqT,cAAc1S,YAAY3B,KAAKM,OAAOU,SAC1DhB,KAAKM,OAAO2huB,qBAAuB,IAAI6P,IACnCvuqB,YACIg1N,QACAx6N,WACAhrC,UACAm7J,YAEJ25iB,WAAY,QACZxI,qBAAsBr/tB,KAAKM,OAAO++tB,qBAClCnstB,UAAWlT,KAAKM,OAAO4S,UACvBlF,OAAQhO,KAAKM,OAAO0N,OACpB7G,OAAQnH,KAAKM,OAAOU,QAAQqT,gBAEhCrU,KAAKM,OAAO2huB,qBAAqB5rrB,SAAS,IAAMr2C,KAAKgB,QAAQsC,KAEjEgzuB,EAAUj7uB,UAAU4lN,cAAgB,WAChC,IAAIlhN,EAAQC,KACRA,KAAKgB,UACL6D,GAAS7E,KAAKgB,SAAUhB,KAAKM,OAAOU,SAChChB,KAAKM,OAAO6hE,MAAQniE,KAAKM,OAAOy7tB,iBAAmB/7tB,KAAKM,OAAO07tB,mBAC/D97tB,aAAaF,KAAK2iuB,YAClB3iuB,KAAK2iuB,WAAaxiuB,WAAW,WACrBJ,EAAMO,OAAO6hE,MAAQpiE,EAAMO,OAAO6hE,KAAKnhE,UACvCiF,EAAkBlG,EAAMiB,QAAQ2B,cAAc,IAAM+7tB,KAChDlytB,KAAMjK,EAAWxC,EAAMO,OAAO4S,WACzB7G,KAAKE,KAAKxM,EAAMO,OAAOg/tB,WAAa,IAAMv/tB,EAAMO,OAAO6hE,KAAKnhE,QAAQ4D,aACjE7E,EAAMiB,QAAQ2B,cAAc,IAAM+7tB,IAA6B95tB,cAClE7E,EAAMO,OAAOg/tB,WAAa,IAAMv/tB,EAAMO,OAAO6hE,KAAKnhE,QAAQ4D,aACvD7E,EAAMiB,QAAQ2B,cAAc,IAAM+7tB,IAA6B95tB,eAEvE7E,EAAMO,OAAO4S,UACbvP,GAAU5D,EAAMiB,QAAQ2B,cAAc,IAAM+7tB,KAA+B,oBAG3Er6tB,GAAatE,EAAMiB,QAAQ2B,cAAc,IAAM+7tB,KAA+B,wBAMtF1+tB,KAAKM,OAAO4S,UACZ7O,GAAarE,KAAKgB,QAAQ2B,cAAc,IAAM+7tB,KAA+B,oBAG7E/6tB,GAAU3D,KAAKgB,QAAQ2B,cAAc,IAAM+7tB,KAA+B,oBAGlFz4tB,EAAkBjG,KAAKgB,SACnBgV,MAAOzT,EAAWvC,KAAKM,OAAOU,QAAQ4D,gBAG9C5E,KAAKM,OAAO2huB,qBAAqB5irB,OAAOr/C,KAAKM,SAKjDg2uB,EAAUj7uB,UAAUqB,iBAAmB,WACnCsD,KAAK27pB,UACD5jjB,KAAM/3G,KAAKu2uB,eACXl3rB,OAAQr/C,KAAKihN,eAEbjhN,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAOslF,GAAGw7oB,GAAyBphuB,KAAK27pB,SAAS5jjB,KAAM/3G,MAC5DA,KAAKM,OAAOslF,GAAGi4iB,GAAiB79nB,KAAK27pB,SAASt8mB,OAAQr/C,QAK1Ds2uB,EAAUj7uB,UAAUuB,oBAAsB,WAClCoD,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAO0lF,IAAIo7oB,GAAyBphuB,KAAK27pB,SAAS5jjB,MACvD/3G,KAAKM,OAAO0lF,IAAI63iB,GAAiB79nB,KAAK27pB,SAASt8mB,UAOnDi3rB,EAAUj7uB,UAAUiX,QAAU,WAC1BtS,KAAKpD,sBACLoD,KAAKM,OAAO2huB,qBAAqB3vtB,WAE9BgkuB,KC9GPE,GAAwB,WAExB,SAASA,EAAOl2uB,GACZN,KAAKM,OAASA,EACdN,KAAKM,OAAOm2uB,aAAez2uB,KAC3BA,KAAKtD,mBAqDT,OA/CA85uB,EAAOn7uB,UAAUkkC,cAAgB,WAC7B,MAAO,UAEXi3sB,EAAOn7uB,UAAUq7uB,qBAAuB,WACpC,IAAIz2uB,GACAypuB,YAAa1puB,KAAKM,OAAOy5tB,aACzBx2pB,WAAYvjE,KAAKM,OAAOijE,WACxBjgE,GAAItD,KAAKM,OAAOU,QAAQsC,GACxBtC,QAAShB,KAAKM,OAAOU,QACrB4R,WAAY5S,KAAKM,OAAOi/B,gBACxBrsB,UAAWlT,KAAKM,OAAO4S,UACvBostB,WAAY9ztB,GAAQkb,SACpBmhtB,WAAY,QACZnvpB,UAAW14E,KAAKM,OAAOo4E,WAE3B14E,KAAKM,OAAO0+tB,YAAc,IAAIyK,GAAYxpuB,IAK9Cu2uB,EAAOn7uB,UAAUqB,iBAAmB,WAChCsD,KAAK27pB,UACD5jjB,KAAM/3G,KAAK02uB,sBAEX12uB,KAAKM,OAAO0mF,aAGhBhnF,KAAKM,OAAOslF,GAAGi4iB,GAAiB79nB,KAAK27pB,SAAS5jjB,KAAM/3G,OAKxDw2uB,EAAOn7uB,UAAUuB,oBAAsB,WAC/BoD,KAAKM,OAAO0mF,aAGhBhnF,KAAKM,OAAO0lF,IAAI63iB,GAAiB79nB,KAAK27pB,SAAS5jjB,OAOnDy+nB,EAAOn7uB,UAAUiX,QAAU,WACvBtS,KAAKpD,sBACLoD,KAAKM,OAAO0+tB,YAAY1stB,WAErBkkuB,KCzDPG,GAA4B,WAE5B,SAASA,EAAWr2uB,GAChBN,KAAKM,OAASA,EAwClB,OAjCAq2uB,EAAWt7uB,UAAU0wG,OAAS,WAC1B/rG,KAAKywuB,YAAc,IAAIpB,GAAYrvuB,KAAKM,QACxCN,KAAK4xuB,qBAIL,IAAK,IAHD9K,KAAkBzluB,MAAMC,KAAKtB,KAAKM,OAAOU,QAAQ2B,cAAc,IAAMi0uB,IACpEp1uB,iBAAiB,IAAMoluB,KACxBpX,EAAOsX,EAAarquB,OACf8mB,EAAI,EAAGA,EAAIissB,EAAMjssB,IAAK,CAM3B1e,GAJgB1D,EAAc,QAC1BkC,UAAW,eACXE,OAAQ,SAHM,GAGKggB,EAAkB,QAEpBujtB,EAAavjtB,MAG1CoztB,EAAWt7uB,UAAUu2uB,mBAAqB,WACtC,IAAIhmtB,GAAU5rB,KAAKM,OAAOijE,WAAWg1N,KAAMv4R,KAAKM,OAAOijE,WAAWxF,QAAS/9D,KAAKM,OAAOijE,WAAWxwC,OAAQ/yB,KAAKM,OAAOijE,WAAW2qH,SACjIluL,KAAKM,OAAOU,QAAQ2B,cAAc,IAAMi0uB,IAAqB50uB,UAAY,GACzEhC,KAAKM,OAAOU,QAAQ2B,cAAc,oBAA8BX,UAAY,GAC5EhC,KAAKM,OAAOU,QAAQ2B,cAAc,mBAA6BX,UAAY,GAC3EhC,KAAKM,OAAOU,QAAQ2B,cAAc,oBAA8BX,UAAY,GAE5E,IACK,IAFDmU,GAAQ,OAAQ,UAAW,SAAU,WAEhCha,EAAI,EAAGyztB,EAAMhksB,EAAOnvB,OAAQN,EAAIyztB,EAAKzztB,IAC1C,GAAIyvB,EAAOzvB,GAAI,CACX,IAAI8D,GACA8rB,MAAOH,EAAOzvB,GACdga,KAAMA,EAAKha,GAAG+Q,YAElBlN,KAAKM,OAAOyN,OAAO2juB,GAA0BzxuB,KAIlD02uB,KC3CXxX,GAAU/ynB,OAAOoqoB,IAKjB,IAAIK,GAA6B,WAE7B,SAASA,EAAYv2uB,GACjBN,KAAKM,OAASA,EACdN,KAAKM,OAAO07tB,kBAAoBh8tB,KAChCA,KAAKtD,mBACLsD,KAAKM,OAAOmhuB,gBAAkB,IAAIkV,GAAW32uB,KAAKM,QAClDN,KAAK82uB,SAAW,IAAIj9nB,GAAM75G,KAAKM,OAAOU,SAClC4uH,QAAS5vH,KAAKutH,eAAejyH,KAAK0E,QA6O1C,OAtOA62uB,EAAYx7uB,UAAUkkC,cAAgB,WAClC,MAAO,YAEXs3sB,EAAYx7uB,UAAU07uB,aAAe,WACjC/2uB,KAAKg3uB,cAAgB71uB,EAAc,OAASkC,UAAW44tB,KACvDj8tB,KAAK2uuB,cAAgBxtuB,EAAc,OAASkC,U3BgBjB,uB2Bf3BrD,KAAK4uuB,eAAiBztuB,EAAc,OAASkC,UAAWwruB,KACxD,IAAIoI,EAAe91uB,EAAc,OAASkC,UAAW6zuB,6BACjDC,EAAkBh2uB,EAAc,OAChCkC,UAAW+zuB,gCAEXC,EAAiBl2uB,EAAc,OAC/BkC,UAAWi0uB,+BAEXC,EAAkBp2uB,EAAc,OAChCkC,UAAWm0uB,gCAEfx3uB,KAAKy3uB,SAAWt2uB,EAAc,OAASkC,UAAWuzuB,GAAsB,YACxE52uB,KAAK03uB,YAAcv2uB,EAAc,OAASkC,UAAWs0uB,mBAA+BrR,KACpFtmuB,KAAK43uB,WAAaz2uB,EAAc,OAASkC,UAAWw0uB,4BACpD73uB,KAAK83uB,YAAc32uB,EAAc,OAASkC,UAAW00uB,mBAA+BxR,KACpF0Q,EAAat1uB,YAAY3B,KAAKy3uB,UAC9BN,EAAgBx1uB,YAAY3B,KAAK03uB,aACjCL,EAAe11uB,YAAY3B,KAAK43uB,YAChCL,EAAgB51uB,YAAY3B,KAAK83uB,aACjC93uB,KAAKi3uB,aAAeA,EACpBj3uB,KAAKm3uB,gBAAkBA,EACvBn3uB,KAAKq3uB,eAAiBA,EACtBr3uB,KAAKu3uB,gBAAkBA,EACvBv3uB,KAAK2uuB,cAAchtuB,YAAY01uB,GAC/Br3uB,KAAK2uuB,cAAchtuB,YAAYs1uB,GAC/Bj3uB,KAAK4uuB,eAAejtuB,YAAY41uB,GAChCv3uB,KAAK4uuB,eAAejtuB,YAAYw1uB,GAChCn3uB,KAAKg3uB,cAAcr1uB,YAAY3B,KAAK2uuB,eACpC3uuB,KAAKg3uB,cAAcr1uB,YAAY3B,KAAK4uuB,gBAEpC,IAAK,IAAIxwuB,EAAK,EAAG45uB,GADCh4uB,KAAKy3uB,SAAUz3uB,KAAK03uB,YAAa13uB,KAAK43uB,WAAY53uB,KAAK83uB,aAC7B15uB,EAAK45uB,EAAav7uB,OAAQ2B,IAAM,CACxE,IAAI4C,EAAUg3uB,EAAa55uB,GAC3B,IAAIg1G,GAAUpyG,MACdhB,KAAKu3d,YAAYv2d,GACjBhB,KAAKq2d,UAAUr1d,KAGvB61uB,EAAYx7uB,UAAUqgqB,gBAAkB,WAChC17pB,KAAKM,OAAOU,QAAQ2B,cAAc,IAAMs5tB,KACxC13tB,EAAOvE,KAAKM,OAAOU,QAAQ2B,cAAc,IAAMs5tB,KAEnD,IAAIgc,EAAkBj4uB,KAAKM,OAAOU,QAAQ2B,cAAc,mBAAmBA,cAAc,YAAYyX,SAAS,GAC9Gpa,KAAK83uB,YAAYpsuB,gBAAgB,SACjC1L,KAAK03uB,YAAYhsuB,gBAAgB,SACjC1L,KAAKy3uB,SAAS/ruB,gBAAgB,SAC9B1L,KAAK83uB,YAAYpsuB,gBAAgB,SAEjC,GADoBpN,OAAOhB,KAAK0C,KAAKM,OAAOy5tB,aAAa/0mB,eAAevoH,OACrD,CACf,IAAIy7uB,EAAcl4uB,KAAKM,OAAOU,QAAQ2B,cAAc,mBAAmBA,cAAc,mBACrFgB,GAAUu0uB,GAAc,SACxBA,EAAYxsuB,gBAAgB,SAC5B/H,GAAUu0uB,EAAYv1uB,cAAc,kBAAmB,eACvDu1uB,EAAYv1uB,cAAc,gBAAgBhB,YAAY3B,KAAKi3uB,cAC3DiB,EAAYv1uB,cAAc,gBAAgBA,cAAc,oBAAoB+B,MAAM4xC,QAAU,OAC5F4hsB,EAAYv1uB,cAAc,gBAAgBA,cAAc,oBAAoB+B,MAAM4xC,QAAU,OAEhGzxC,GAAS7E,KAAKg3uB,eAAgBh3uB,KAAKM,OAAOU,SAC1CiF,EAAkBjG,KAAKg3uB,eAAiBhhuB,MAAOzT,EAAWvC,KAAKM,OAAOg/tB,WAAa,IAAMt/tB,KAAKM,OAAO6hE,KAAKnsD,SAC1GhW,KAAKM,OAAOmhuB,gBAAgB11nB,SAE5B,IAAIosoB,EAAsB51uB,EAAWvC,KAAKg3uB,cAAcpyuB,YAAcmwB,SAASkjtB,EAAgBvzuB,MAAMsR,MAAO,KAC5G/P,EAAkBjG,KAAK43uB,YAAc5huB,MAAOiiuB,EAAgBvzuB,MAAMsR,QAClE/P,EAAkBjG,KAAK4uuB,gBAAkB54tB,MAAOmiuB,IAChD,IAAIC,EAAoBp4uB,KAAK43uB,WAAWlmsB,aAAe,EACnD0msB,EAAmBp4uB,KAAK03uB,YAAYhmsB,eACpCzrC,EAAkBjG,KAAK83uB,aAAe/huB,OAAQxT,EAAW61uB,KACzDnyuB,EAAkBjG,KAAK03uB,aAAe3huB,OAAQxT,EAAW61uB,EAAmB,MAEhF,IAAIC,EAAgBr4uB,KAAKM,OAAOU,QAAQ2B,cAAc,oBAAoB+uC,aAC1EzrC,EAAkBjG,KAAKy3uB,UACnB1huB,OAAQsiuB,EAAgB,OAE5Br4uB,KAAKM,OAAOU,QAAQ2B,cAAc,mBAAmBA,cAAc,eAAe+B,MAAMqR,OACpFsiuB,EAAgB,KAMpB,IAAK,IAJDC,KADaj3uB,MAAMC,KAAKtB,KAAKM,OAAOU,QAAQ2B,cAAc,oBAAoBA,cAAc,SAASnB,iBAAiB,OACjGwlC,OAAO,SAAUuxsB,GACtC,OAAQA,EAAOhnuB,WAAW9U,OAAS,IAEnC+7uB,EAAYH,EAAgBC,EAAW77uB,OAClC2B,EAAK,EAAGq6uB,EAAeH,EAAYl6uB,EAAKq6uB,EAAah8uB,OAAQ2B,IAAM,CACxE,IAAI4C,EAAUy3uB,EAAar6uB,GAC3B6H,EAAkBjF,GAAW+U,OAAUyiuB,EAAY,OAEnD,IAAK,IAAI31uB,EAAK,EAAG61uB,KADEr3uB,MAAMC,KAAKN,EAAQQ,iBAAiB,gBACbqB,EAAK61uB,EAAYj8uB,OAAQoG,IAAM,CAErEoD,EADgByyuB,EAAY71uB,IACGkT,OAAUyiuB,EAAY,UAOjE3B,EAAYx7uB,UAAUwpoB,UAAY,WAC9B,IAAI9koB,EAAQC,KACZiG,EAAkBjG,KAAKg3uB,eAAiBhhuB,MAAOzT,EAAWvC,KAAKM,OAAOg/tB,WAAa,IAAMt/tB,KAAKM,OAAO6hE,KAAKnsD,SAC1G,IAAIiiuB,EAAkBj4uB,KAAKM,OAAOU,QAAQ2B,cAAc,mBAAmBA,cAAc,YAAYyX,SAAS,GAC1Gu+tB,EAAiBp2uB,EAAWvC,KAAKg3uB,cAAcpyuB,YAAcmwB,SAASkjtB,EAAgBvzuB,MAAMsR,MAAO,KAGvG,GAFA/P,EAAkBjG,KAAK43uB,YAAc5huB,MAAOiiuB,EAAgBvzuB,MAAMsR,QAClE/P,EAAkBjG,KAAK4uuB,gBAAkB54tB,MAAO2iuB,IAC5C34uB,KAAKM,OAAOm+tB,eAAiBz+tB,KAAKM,OAAO2huB,sBAAwBjiuB,KAAKM,OAAO2huB,qBAAqBjhuB,QAAS,CAC3G,IAAI4qF,EAAY5rF,KAAKM,OAAO2huB,qBAAqBjhuB,QACjDd,aAAaF,KAAK2iuB,YAClB3iuB,KAAK2iuB,WAAaxiuB,WAAW,WACzB8F,EAAkB2lF,EAAUjpF,cAAc,IAAM+7tB,KAC5ClytB,KAAMjK,EAAWxC,EAAMO,OAAO4S,WACzB7G,KAAKE,KAAKxM,EAAMO,OAAOg/tB,WAAa,IAAMv/tB,EAAMO,OAAO6hE,KAAKnhE,QAAQ4D,aACjEgnF,EAAUjpF,cAAc,IAAM+7tB,IAA6B95tB,cAC9D7E,EAAMO,OAAOg/tB,WAAa,IAAMv/tB,EAAMO,OAAO6hE,KAAKnhE,QAAQ4D,aACvDgnF,EAAUjpF,cAAc,IAAM+7tB,IAA6B95tB,iBAI/E,IAAK5E,KAAKM,OAAO6hE,KAAKnhE,QAAQ2B,cAAc,gBAAiB,CACzD,IAAIi2uB,EAAiB54uB,KAAKM,OAAOU,QAAQ2B,cAAc,mBAAmBA,cAAc,mBACxFgB,GAAUi1uB,GAAiB,SAC3Bj1uB,GAAUi1uB,EAAej2uB,cAAc,kBAAmB,eAC1Di2uB,EAAej2uB,cAAc,gBAAgBhB,YAAY3B,KAAKi3uB,cAC9DhxuB,EAAkB2yuB,EAAej2uB,cAAc,gBAAgBA,cAAc,qBACzE2zC,QAAS,SAEbrwC,EAAkB2yuB,EAAej2uB,cAAc,gBAAgBA,cAAc,qBACzE2zC,QAAS,SAEb,IAAIuisB,EAAc74uB,KAAKM,OAAOU,QAAQ2B,cAAc,oBAAoB+uC,aACxEzrC,EAAkBjG,KAAKy3uB,UACnB1huB,OAAQ8iuB,EAAc,OAE1B74uB,KAAKM,OAAOU,QAAQ2B,cAAc,mBAAmBA,cAAc,eAAe+B,MAAMqR,OACpF8iuB,EAAc,KAMlB,IAAK,IAJDP,KADoBj3uB,MAAMC,KAAKtB,KAAKM,OAAOU,QAAQ2B,cAAc,oBAAoBA,cAAc,SAASnB,iBAAiB,OACjGwlC,OAAO,SAAUuxsB,GAC7C,OAAQA,EAAOhnuB,WAAW9U,OAAS,IAEnC+7uB,EAAYK,EAAcP,EAAW77uB,OAChC2B,EAAK,EAAG06uB,EAAeR,EAAYl6uB,EAAK06uB,EAAar8uB,OAAQ2B,IAAM,CACxE,IAAI4C,EAAU83uB,EAAa16uB,GAC3B6H,EAAkBjF,GAAW+U,OAAUyiuB,EAAY,OAEnD,IAAK,IAAI31uB,EAAK,EAAGk2uB,KADE13uB,MAAMC,KAAKN,EAAQQ,iBAAiB,gBACbqB,EAAKk2uB,EAAYt8uB,OAAQoG,IAAM,CAErEoD,EADqB8yuB,EAAYl2uB,IACGkT,OAAUyiuB,EAAY,WA0B1E3B,EAAYx7uB,UAAUg7d,UAAY,SAAUr1d,GACxCuE,GAAanB,IAAIpD,EAAS,YAAahB,KAAKg5uB,oBAAqBh5uB,MACjEuF,GAAanB,IAAIpD,EAAS,aAAchB,KAAKg5uB,oBAAqBh5uB,OAEtE62uB,EAAYx7uB,UAAUk8d,YAAc,SAAUv2d,GAC1CuE,GAAahB,OAAOvD,EAAS,YAAahB,KAAKg5uB,qBAC/CzzuB,GAAahB,OAAOvD,EAAS,aAAchB,KAAKg5uB,sBAEpDnC,EAAYx7uB,UAAU29uB,oBAAsB,SAAUn4uB,IAC7Cb,KAAKM,OAAO2guB,YAAcpguB,EAAEsG,OAAOrD,UAAUK,SAASiiuB,KAAmC,cAAXvluB,EAAE6F,MACtE,eAAX7F,EAAE6F,QACFrC,KAAehD,MAAMC,KAAKtB,KAAKM,OAAOU,QAAQQ,iBAAiB,IAAMusuB,KAA4BC,IACjG3puB,KAAehD,MAAMC,KAAKtB,KAAKM,OAAOU,QAAQQ,iBAAiB,IAAMusuB,GAA2B,UAAWC,MAGnH6I,EAAYx7uB,UAAUkyH,eAAiB,SAAU1sH,GAC7C,IAAIsG,EAAStB,EAAQhF,EAAEq6G,cAAc/zG,OAAQ,IAAMm3tB,IACnD,IAAK7guB,EAAkB0J,IAAWnH,KAAKM,OAAOg/tB,WAAY,CACtD,IAAIrqtB,EAAM9N,EAAOyE,wBAGjB,OAFA5L,KAAKM,OAAOs6e,kBAAkB+nL,aAAex7pB,OAC7CnH,KAAKM,OAAOs6e,kBAAkBkmL,QAAQp/pB,KAAKuT,EAAIvI,IAAKuI,EAAIzI,QAOhEqquB,EAAYx7uB,UAAUqB,iBAAmB,WACrCsD,KAAK27pB,UACD5jjB,KAAM/3G,KAAK+2uB,aACXl4tB,IAAK7e,KAAK07pB,iBAEV17pB,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAOslF,GAAGw7oB,GAAyBphuB,KAAK27pB,SAAS5jjB,KAAM/3G,MAC5DA,KAAKM,OAAOslF,GAAGi4iB,GAAiB79nB,KAAK27pB,SAAS98oB,IAAK7e,QAKvD62uB,EAAYx7uB,UAAUuB,oBAAsB,WACpCoD,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAO0lF,IAAIo7oB,GAAyBphuB,KAAK27pB,SAAS98oB,KACvD7e,KAAKM,OAAO0lF,IAAI63iB,GAAiB79nB,KAAK27pB,SAAS5jjB,QAOnD8+nB,EAAYx7uB,UAAUiX,QAAU,WAC5BtS,KAAKpD,sBACLoD,KAAKM,OAAOgvuB,kBAAkBh9tB,UAC9BtS,KAAK82uB,SAASxkuB,WAEXukuB,KCjQXoC,GAAgB7soB,OAAQ8soB,GAAkBC,GAAgBC,QCG/CtrH,8W9BCO,qEAMkB,+CAED,iHAQH,sCAEF,6BAEP,0BAEI,+BAEC,0BAEN,sBAEE,uBAED,8CASH,8HAcD,kYvnB8WnB,SAA2B7tnB,QACD9E,IAAlB8E,EAAKgP,WACLgM,GAAehb,EAAKgP,cACE9T,IAAlB8E,EAAKgP,WACLgN,GAAehc,EAAKgT,WAI5B,IAAK,IADDwH,EAAYja,SAASgB,iBAAiB,IAAMmZ,IACvC1I,EAAQ,EAAGA,EAAQwI,EAAUhe,OAAQwV,KAIlD,SAAwBhD,EAAUwL,EAAWS,EAAOjI,GAC5CxV,EAAkBwR,KAAcwL,EAAU3W,UAAUK,SAAS4X,KAkBrE,SAAsBtB,EAAWS,EAAOjI,GAC/BxV,EAAkBwV,IACnBwH,EAAU3W,UAAUM,IAAI6O,GAE5B,IAAI4wV,EAAappV,EAAU9X,cAAc,OACrCiK,EAAmB,cAAVsO,EAAwBM,WAAWqoV,EAAWn/V,MAAMqR,QAAUyF,WAAWqoV,EAAWn/V,MAAMqR,QAAU,EAGjH,GAFiB8tV,EAAWhxV,aAAa,SACX3V,MAAM,MACnBqB,QAAQ,oBAAsB,EAAG,CAC9C,IAAI+E,EAAKugW,EAAWhxV,aAAa,MACjC3S,aAAamc,GAAc/Y,GAAIgZ,SAEnCZ,GAASR,EAAOT,EAAW7N,GA7BvBysuB,CAAa5+tB,EAAWS,EAAOjI,GAC3BwH,EAAU3W,UAAUK,SAAS6d,KAC7BvH,EAAU3W,UAAUS,OAAOyd,IAC3BL,GAAYlH,KAGZA,EAAU3W,UAAUS,OAAO2X,IAC3BwG,GAAYjI,MAIhBQ,GAAehM,EACVxR,EAAkBwV,KACnBgJ,GAAehJ,IAlBnBqmuB,CAAer5uB,EAAKgP,SAAUwL,EAAUxI,GAAQhS,EAAKyG,KAAMzG,EAAKgT,aspBva7Do3mB,GAAc,eAEdC,GAAa,cAEbivH,GAAkB,eAElBjnuB,GAAU,UAEVknuB,GAAe,eAEfrtH,GAAiB,kBAEjBstH,GAAiB,kBAEjBC,GAAY,cAEZC,GAAoB,sBAEpBC,GAAmB,qBAEnBC,GAAuB,yBAEvBC,GAAqB,uBAErB18T,GAAe,gBAIf73T,GAAU,UAMVw0nB,GAAwB,wBAExBC,GAAmB,mBAEnBC,GAAoB,oBAEpBC,GAAiB,iBAEjBC,GAA2B,2BAE3BC,GAAsB,sBAEtBC,GAAqB,uBAErBC,GAAoB,sBAMpBC,GAAa,aAQb7xH,GAAc,cAEdC,GAAiB,iBAMjB6xH,GAAoB,oBAEpB3rL,GAAc,cAEd4rL,GAAkB,kBAYlBC,GAAY,gBAEZC,GAAW,aAMXC,GAAY,YAEZC,GAAa,aAEbC,GAAe,eAIfC,GAAqB,qBAErBC,GAAgB,iBAEhBC,GAAmB,oBAEnBC,GAAmB,mBAQnBxiV,GAAY,YAEZyiV,GAAsB,sBAEtBC,GAAgB,gBAIhBC,GAAqB,qBAErBC,GAAc,cAEd11uB,GAAY,YAEZ44M,GAAc,cAEd+8hB,GAAkB,kBAElBC,GAAsB,sBCpItBC,GAAmB,0BAEnBC,GAAkB,yBAElBC,GAAc,gBAMdC,GAAa,eAMbC,GAAkB,oBAQlBC,GAAqB,mBAIrBC,GAAiB,qBAEjBC,GAAsB,wBAEtBC,GAAqB,uBAErBC,GAAqB,uBAErBC,GAAqB,uBAErBC,GAAmB,qBAInB59b,GAAc,iBAwBd69b,GAAqB,uBAErBC,GAAe,aAEfC,GAAc,YAEdC,GAAgB,cAEhBC,GAAe,aAEfC,GAAc,gBAEdC,GAAgB,mBAYhBhnc,GAAa,WAEbinc,GAAkB,gBAElBC,GAAmB,iBAoBnBC,GAAoB,uBFzH/B,SAAWhvH,GAEPA,EAAWA,EAAoB,QAAI,GAAK,UAExCA,EAAWA,EAAoB,QAAI,GAAK,UAExCA,EAAWA,EAAkB,MAAI,GAAK,QAEtCA,EAAWA,EAAwB,YAAI,GAAK,cAE5CA,EAAWA,EAAwB,YAAI,GAAK,cAE5CA,EAAWA,EAAyB,aAAI,GAAK,eAE7CA,EAAWA,EAA0B,cAAI,GAAK,gBAdlD,CAeGA,KAAeA,QAClB,IAAWivH,IACX,SAAWA,GAEPA,EAAoB,OAAI,SAExBA,EAAsB,SAAI,WAJ9B,CAKGA,KAAgBA,QGvBnB,IAAWC,IAAiB,aAAc,UAAW,WAAY,WAAY,YAAa,kBAAmB,QAAS,WAC3GC,IACPC,YACI55uB,GAAM,aACNoyC,KAAQ,eACR7jB,QAAW,aACX2V,QAAW,aACXgsC,WAAc,cAElB2pqB,aACI75uB,GAAM,cACNoyC,KAAQ,iBACR7jB,QAAW,cACX2V,QAAW,aACXgsC,WAAc,eAElB4pqB,eACI95uB,GAAM,gBACNoyC,KAAQ,mBACR7jB,QAAW,gBACX2V,QAAW,aACXgsC,WAAc,iBAElB6pqB,cACI/5uB,GAAM,eACNoyC,KAAQ,kBACR7jB,QAAW,eACX2V,QAAW,aACXgsC,WAAc,gBAElB8pqB,aACIh6uB,GAAM,cACNoyC,KAAQ,iBACR7jB,QAAW,cACX2V,QAAW,aACXgsC,WAAc,eAElB+pqB,UACIj6uB,GAAM,WACNoyC,KAAQ,cACR7jB,QAAW,YACX2V,QAAW,OACXgsC,WAAc,YAElB4zV,UACI9ja,GAAM,WACNoyC,KAAQ,cACR7jB,QAAW,YACX2V,QAAW,OACXgsC,WAAc,YAElBqlQ,WACIv1U,GAAM,YACNoyC,KAAQ,eACR7jB,QAAW,aACX2V,QAAW,OACXgsC,WAAc,YACdx2E,MAAS,aAEbwgvB,iBACIl6uB,GAAM,kBACNoyC,KAAQ,qBACR7jB,QAAW,mBACX2V,QAAW,OACXgsC,WAAc,kBACdx2E,MAAS,aAEb0xC,MACIprC,GAAM,OACNoyC,KAAQ,SACR7jB,QAAW,OACX2V,QAAW,QACXgsC,WAAc,QAElBjiC,QACIjuC,GAAM,SACNoyC,KAAQ,WACR7jB,QAAW,SACX2V,QAAW,QACXgsC,WAAc,UAElB0hM,WACI5xQ,GAAM,YACNoyC,KAAQ,cACR7jB,QAAW,YACX2V,QAAW,QACXgsC,WAAc,aAElB+2a,eACIjnf,GAAM,gBACNoyC,KAAQ,mBACR7jB,QAAW,gBACX2V,QAAW,QACXgsC,WAAc,iBAElBiqqB,aACIn6uB,GAAM,cACNoyC,KAAQ,iBACR7jB,QAAW,eACX2V,QAAW,QACXgsC,WAAc,eAElBkqqB,UACIp6uB,GAAM,WACNoyC,KAAQ,cACR7jB,QAAW,YACX2V,QAAW,QACXgsC,WAAc,YAElBi3V,KACInna,GAAM,MACNoyC,KAAQ,QACR7jB,QAAW,MACX2V,QAAW,YACXgsC,WAAc,OAElBj0E,MACI+D,GAAM,OACNoyC,KAAQ,SACR7jB,QAAW,OACX2V,QAAW,YACXgsC,WAAc,QAElBs4V,OACIxoa,GAAM,QACNoyC,KAAQ,UACR7jB,QAAW,QACX2V,QAAW,YACXgsC,WAAc,SAElBmqqB,eACIr6uB,GAAM,gBACNoyC,KAAQ,iBACR7jB,QAAW,gBACX2V,QAAW,QACXgsC,WAAc,MAElBoqqB,aACIt6uB,GAAM,cACNoyC,KAAQ,eACR7jB,QAAW,gBACX2V,QAAW,QACXgsC,WAAc,MAElB6liB,QACI/1mB,GAAM,SACNoyC,KAAQ,WACR7jB,QAAW,kBACX2V,QAAW,UACXgsC,WAAc,UAElBqqqB,SACIv6uB,GAAM,UACNoyC,KAAQ,YACR7jB,QAAW,kBACX2V,QAAW,UACXgsC,WAAc,WAElB0sW,MACI58a,GAAM,OACNoyC,KAAQ,SACR7jB,QAAW,OACX2V,QAAW,UACXgsC,WAAc,QAElB2sW,MACI78a,GAAM,OACNoyC,KAAQ,SACR7jB,QAAW,OACX2V,QAAW,UACXgsC,WAAc,QAElBmyhB,aACIrimB,GAAM,cACNoyC,KAAQ,iBACR7jB,QAAW,cACX2V,QAAW,UACXgsC,WAAc,eAElBoyhB,WACItimB,GAAM,YACNoyC,KAAQ,eACR7jB,QAAW,YACX2V,QAAW,UACXgsC,WAAc,aAElBsqqB,YACIx6uB,GAAM,aACNoyC,KAAQ,gBACR7jB,QAAW,mBACX2V,QAAW,QACXgsC,WAAc,cAElBuqqB,UACIz6uB,GAAM,WACNoyC,KAAQ,cACR7jB,QAAW,YACX2V,QAAW,QACXgsC,WAAc,YAElBwqqB,UACI16uB,GAAM,WACNoyC,KAAQ,cACR7jB,QAAW,YACX2V,QAAW,QACXgsC,WAAc,YAElByqqB,YACI36uB,GAAM,aACNoyC,KAAQ,gBACR7jB,QAAW,cACX2V,QAAW,QACXgsC,WAAc,cAElB8hH,OACIhyL,GAAM,QACNoyC,KAAQ,UACR7jB,QAAW,eACX2V,QAAW,SACXgsC,WAAc,SAElBjkE,SACIjM,GAAM,UACNoyC,KAAQ,YACR7jB,QAAW,UACX2V,QAAW,SACXgsC,WAAc,WAElBrf,OACI7wD,GAAM,QACNoyC,KAAQ,UACR7jB,QAAW,QACX2V,QAAW,SACXgsC,WAAc,SAElBwvjB,SACI1/nB,GAAM,UACNoyC,KAAQ,YACR7jB,QAAW,gBACX2V,QAAW,SACXgsC,WAAc,WAElBjvE,QACIjB,GAAM,SACNoyC,KAAQ,WACR7jB,QAAW,SACX2V,QAAW,SACXgsC,WAAc,UAElB0qqB,eACI56uB,GAAM,gBACNoyC,KAAQ,cACR7jB,QAAW,YACX2V,QAAW,SACXgsC,WAAc,iBAElB2qqB,eACI76uB,GAAM,gBACNoyC,KAAQ,cACR7jB,QAAW,YACX2V,QAAW,SACXgsC,WAAc,iBAElB4qqB,iBACI96uB,GAAM,kBACNoyC,KAAQ,gBACR7jB,QAAW,cACX2V,QAAW,SACXgsC,WAAc,mBAElB6qqB,YACI/6uB,GAAM,aACNoyC,KAAQ,gBACR7jB,QAAW,cACX2V,QAAW,SACXgsC,WAAc,cAElBl9B,SACIhzC,GAAM,UACNoyC,KAAQ,YACR7jB,QAAW,UACX2V,QAAW,SACXgsC,WAAc,WAElB8qqB,SACIh7uB,GAAM,UACNoyC,KAAQ,aACR7jB,QAAW,mBACX2V,QAAW,SACXgsC,WAAc,WAElB+qqB,WACIj7uB,GAAM,YACNoyC,KAAQ,cACR7jB,QAAW,cACX2V,QAAW,SACXgsC,WAAc,aAElBgrqB,YACIl7uB,GAAM,WACNoyC,KAAQ,aACR7jB,QAAW,WACX2V,QAAW,OACXgsC,WAAc,YAElBirqB,UACIn7uB,GAAM,WACNoyC,KAAQ,aACR7jB,QAAW,WACX2V,QAAW,aACXgsC,WAAc,YAElBkrqB,UACIp7uB,GAAM,WACNoyC,KAAQ,aACR7jB,QAAW,WACX2V,QAAW,aACXgsC,WAAc,YAElBmrqB,WACIr7uB,GAAM,YACNoyC,KAAQ,eACR7jB,QAAW,aACX2V,QAAW,SACXgsC,WAAc,aAElBorqB,WACIt7uB,GAAM,YACNoyC,KAAQ,eACR7jB,QAAW,aACX2V,QAAW,SACXgsC,WAAc,aAElBzyE,OACIuC,GAAM,QACNoyC,KAAQ,UACR7jB,QAAW,QACX2V,QAAW,QACXgsC,WAAc,SAElB0+D,SACI5uI,GAAM,UACNoyC,KAAQ,YACR7jB,QAAW,UACX2V,QAAW,UACXgsC,WAAc,WAElBqrqB,YACIv7uB,GAAM,aACNoyC,KAAQ,gBACR7jB,QAAW,cACX2V,QAAW,aACXgsC,WAAc,cAElBizE,SACInjJ,GAAM,UACNoyC,KAAQ,YACR7jB,QAAW,UACX2V,QAAW,UACXgsC,WAAc,WAElBsrqB,UACIx7uB,GAAM,WACNoyC,KAAQ,cACR7jB,QAAW,WACX2V,QAAW,WACXgsC,WAAc,YAElBurqB,YACIz7uB,GAAM,aACNoyC,KAAQ,gBACR7jB,QAAW,cACX2V,QAAW,aACXgsC,WAAc,eAGXwrqB,KACLtrqB,QAAS,yBAA0BjnD,KAAM,aAAc+a,QAAS,aAAcgsC,WAAY,gBAC1FE,QAAS,2BAA4BjnD,KAAM,eAAgB+a,QAAS,aAAcgsC,WAAY,kBAC9FE,QAAS,0BAA2BjnD,KAAM,cAAe+a,QAAS,aAAcgsC,WAAY,iBAC5FE,QAAS,yBAA0BjnD,KAAM,gBAAiB+a,QAAS,aAAcgsC,WAAY,gBAExFyrqB,KACLvrqB,QAAS,yBAA0BlsC,QAAS,SAAUgsC,WAAY,gBAClEE,QAAS,2BAA4BlsC,QAAS,SAAUgsC,WAAY,kBACpEE,QAAS,0BAA2BlsC,QAAS,SAAUgsC,WAAY,iBAE9D0rqB,KACLzytB,KAAM,SAAU80G,MAAO,WAAY/5F,QAAS,SAAUgsC,WAAY,WAClE/mD,KAAM,QAAS80G,MAAO,UAAW/5F,QAAS,SAAUgsC,WAAY,UCrY3DmqW,IACPu/T,WAAc,aACdiC,YAAe,aACfC,cAAiB,eACjBC,aAAgB,cAChBC,YAAe,gBACflygB,SAAY,YACZvgN,SAAY,YACZy9d,UAAa,aACb34b,gBAAmB,mBACnBjjB,KAAQ,OACR6C,OAAU,SACV2jO,UAAa,YACbq1O,cAAiB,gBACjBlD,YAAe,eACfvyW,SAAY,YACZ21R,IAAO,MACPlra,KAAQ,OACRusa,MAAS,QACTyzU,cAAiB,gBACjBC,YAAe,gBACfnmI,OAAU,kBACVwkI,QAAW,kBACX39T,KAAQ,OACRC,KAAQ,OACRwlL,YAAe,cACfC,UAAa,YACb65I,WAAc,mBACdC,SAAY,YACZC,SAAY,YACZC,WAAc,cACdtqjB,MAAS,eACT/lL,QAAW,UACX4kD,MAAS,QACT6ukB,QAAW,gBACXz+nB,OAAU,SACVg2uB,WAAc,cACdjksB,QAAW,UACXupsB,QAAW,mBACXtB,UAAa,cACbC,WAAc,WACdC,SAAY,WACZC,SAAY,WACZoB,UAAa,aACbC,UAAa,aACbh/uB,MAAS,QACTmxI,QAAW,UACX2smB,WAAc,YACdp4lB,QAAW,UACXq4lB,SAAY,WACZkB,WAAc,cACdl8M,SAAY,eACZm8M,iBAAoB,UACpBC,WAAc,cACdC,QAAW,qBACXC,oBAAuB,0BACvBC,WAAc,cACdC,aAAgB,SAChBC,aAAgB,SAChBC,aAAgB,SAChBC,YAAe,eACfC,gBAAmB,2CACnBC,YAAe,sCACfC,mBAAsB,sCACtBC,yBAA4B,uBAC5BC,mBAAsB,iBACtBC,gBAAmB,mBACnB5rmB,OAAU,SACV2hD,SAAY,+BACZkqjB,aAAgB,UAChBC,gBAAmB,aACnB9pf,YAAe,SACfD,WAAc,QACdgqf,gBAAmB,cAEZptqB,IACPopqB,WAAc,aACdC,YAAe,cACfC,cAAiB,gBACjBC,aAAgB,eAChBC,YAAe,cACfC,SAAY,WACZn2U,SAAY,WACZvuF,UAAa,YACb2ka,gBAAmB,kBACnB9usB,KAAQ,OACR6C,OAAU,SACV2jO,UAAa,YACbq1O,cAAiB,gBACjBkzP,YAAe,cACfC,SAAY,WACZjzU,IAAO,MACPlra,KAAQ,OACRusa,MAAS,QACT6xU,cAAiB,gBACjBC,YAAe,cACfvkI,OAAU,SACVwkI,QAAW,UACX39T,KAAQ,OACRC,KAAQ,OACRwlL,YAAe,cACfC,UAAa,YACbk4I,WAAc,aACdC,SAAY,WACZC,SAAY,WACZC,WAAc,aACdC,cAAiB,WACjBC,cAAiB,WACjBC,gBAAmB,aACnB9ojB,MAAS,QACT/lL,QAAW,UACX4kD,MAAS,QACT6ukB,QAAW,UACXz+nB,OAAU,SACV85uB,WAAc,aACd/nsB,QAAW,UACXgosB,QAAW,UACXC,UAAa,YACbC,WAAc,aACdC,SAAY,WACZC,SAAY,WACZC,UAAa,YACbC,UAAa,YACb79uB,MAAS,QACTmxI,QAAW,UACX2smB,WAAc,aACdp4lB,QAAW,UACXq4lB,SAAY,WACZC,WAAc,chnB7HdxpqB,IAAiB,OAAQ,QinBOzB4rqB,GAAiC,WAIjC,SAASA,EAAgB7gvB,GACrBN,KAAKM,OAASA,EACdN,KAAKq2d,YAmTT,OAjTA8qR,EAAgB9lvB,UAAUg7d,UAAY,WAClCr2d,KAAKM,OAAOslF,GAAGguiB,GAAgB5znB,KAAKu3d,YAAav3d,OAErDmhvB,EAAgB9lvB,UAAUk8d,YAAc,WACpCv3d,KAAKM,OAAO0lF,IAAI4tiB,GAAgB5znB,KAAKu3d,aACjCv3d,KAAKohvB,cACL77uB,GAAahB,OAAOvE,KAAKohvB,aAAc,kBAAmBphvB,KAAKqhvB,iBAGvEF,EAAgB9lvB,UAAUimvB,oBAAsB,SAAUzgvB,GACpC,aAAdb,KAAK+9B,OACLl9B,EAAE6pS,iBAAkB,IAG5By2c,EAAgB9lvB,UAAUkmvB,eAAiB,WACvCvhvB,KAAKM,OAAOyN,OJKQ,iBILsB/N,OAE9CmhvB,EAAgB9lvB,UAAUmmvB,eAAiB,SAAUvhvB,IAC7CD,KAAKM,OAAO+1E,UAAar2E,KAAKM,OAAO2kB,UAGzCjlB,KAAKM,OAAOyN,OAAO0zuB,GAAqBxhvB,GACxCD,KAAKM,OAAOkmB,QAAQ,eAAgBvmB,KAExCkhvB,EAAgB9lvB,UAAUqmvB,iBAAmB,SAAUzhvB,GACnDD,KAAKM,OAAOyN,OAAO4zuB,GAAuB1hvB,IAE9CkhvB,EAAgB9lvB,UAAU8+uB,yBAA2B,SAAUl6uB,IACvDD,KAAKM,OAAO+1E,UAAar2E,KAAKM,OAAO2kB,SAGzCjlB,KAAKM,OAAOyN,OAAO6zuB,GAAiC3hvB,IAExDkhvB,EAAgB9lvB,UAAU4hqB,aAAe,SAAUh9pB,GAC/CD,KAAKM,OAAOyN,OAAO8zuB,GAAsB5hvB,IAE7CkhvB,EAAgB9lvB,UAAUymvB,cAAgB,SAAU7hvB,GAChDD,KAAKM,OAAOyN,OAAOg0uB,GAAyB9hvB,IAEhDkhvB,EAAgB9lvB,UAAU2mvB,cAAgB,SAAU/hvB,GAChDD,KAAKk+nB,SAASj+nB,EAAKkH,QACnBnH,KAAK+9nB,cACL/9nB,KAAK+9B,KAAO99B,EAAKirS,aACjBjrS,EAAKgivB,cAAczsqB,WAAa,IAAI00N,IAChCzvO,MAAOx6D,EAAKw6D,MACZzkD,MAAO,OACPk1R,aAAcjrS,EAAKirS,aACnBg3c,aAAclivB,KAAKshvB,oBAAoBhmvB,KAAK0E,MAC5C88P,QAAS98P,KAAKuhvB,eAAejmvB,KAAK0E,MAClCwgT,QAASxgT,KAAKwhvB,eAAelmvB,KAAK0E,MAClC4rG,kBAAmB3rG,EAAK2rG,kBACxB14F,UAAWjT,EAAKiT,YAEpBjT,EAAKgivB,cAAczsqB,WAAWn/B,SAASp2C,EAAKkH,SAEhDg6uB,EAAgB9lvB,UAAU8mvB,qBAAuB,SAAUlivB,GACvD,IACIu/S,EADAz/S,EAAQC,KAEZC,EAAKe,QAAQ8C,UAAUM,IAAIg4uB,IAC3B58b,EAAMv/S,EAAKgT,SAAW,IAAM4puB,GAAmB,cAC3C78uB,KAAKM,OAAO8hvB,WAAW3itB,QAAUj0B,GAAQkb,WACzC84R,EAAMA,EAAM,IAAMw8b,IAEtB,IAAItpuB,EAAQ1S,KACRk0E,EAAW,IAAIm8C,IACf51D,MAAOx6D,EAAKw6D,MACZiZ,QAASzzE,EAAKyzE,QACdzgE,SAAUusS,EACVplR,QAASn6B,EAAKm6B,QACdwxE,kBAAmB5rG,KAAKM,OAAOsrG,kBAC/B14F,UAAWlT,KAAKM,OAAO4S,UACvBzN,OAAQzF,KAAK0hvB,iBAAiBpmvB,KAAK0E,MACnCm2C,WAAY,SAAUl2C,GAClB,IAAIyS,EAAMpS,OAAO+1E,UAAa3jE,EAAMpS,OAAO2kB,QAA3C,CAIA,IAAK,IAAIhT,EAAQ,EAAGA,EAAQhS,EAAKe,QAAQuQ,WAAW9U,OAAQwV,IAAS,CACjE,IAAI4tD,EAAUr/D,SAASW,cAAc,OACrC0+D,EAAQ79D,UAAYkyE,EAAS95C,QAAQlqB,OACF,KAA/B2vD,EAAQhkD,YAAY3L,QACjBjQ,EAAKe,QAAQuQ,WAAWU,GAAO4J,YAAY3L,SAAW2vD,EAAQhkD,YAAY3L,OACxEjQ,EAAKe,QAAQuQ,WAAWU,GAAOnO,UAAUK,SAAS,aACnDR,GAAU1D,EAAKe,QAAQuQ,WAAWU,IAAS,YAI/C5N,GAAapE,EAAKe,QAAQuQ,WAAWU,IAAS,YAItD,GADAS,EAAMpS,OAAOyN,OAAOs0uB,GAA2BpivB,GAC3CuL,GAAQkb,WAAazmB,EAAKe,QAAQqT,cAAcvQ,UAAUK,SAASm+uB,IAA6B,CAChG,IAAI37lB,EAAYnkJ,EAAYvC,EAAKe,QAAQqT,cAAemtG,IACxDmlC,EAAUvkC,SAAW5hH,SAASuL,KAC9B46I,EAAUzyI,UAAakC,EAAG,EAAGC,EAAG,GAChCswI,EAAUljC,WAAa,YACvBkjC,EAAU5iC,WAAc3tG,EAAG,OAAQC,EAAG,QACtCswI,EAAU16I,QAAU,EACpBlM,EAAMwivB,WAAWtivB,EAAKe,QAAQqT,qBAxB9BpU,EAAK44B,QAAS,GA2BtB52B,MAAOjC,KAAK8hvB,cAAcxmvB,KAAK0E,MAC/B0B,KAAM1B,KAAKi9pB,aAAa3hqB,KAAK0E,MAC7BszH,iBAAkBtzH,KAAKm6uB,yBAAyB7+uB,KAAK0E,QAIzD,OAFAk0E,EAAS79B,SAASp2C,EAAKe,SACvBf,EAAKe,QAAQioH,UAAY,EAClB/0C,GAEXitqB,EAAgB9lvB,UAAUgmvB,eAAiB,SAAUphvB,GACjD4F,EAAQ7F,KAAKohvB,aAAc,sBAAsB18uB,MAAM4xC,QAAU,OACjEt2C,KAAKohvB,aAAa18uB,MAAM4xC,QAAU,OAClCjyC,GAAarE,KAAKohvB,cAAe,oBAErCD,EAAgB9lvB,UAAUknvB,WAAa,SAAUvhvB,GAC7C,GAAK6E,EAAQ7E,EAAS,sBAelBA,EAAQqT,cAAc3P,MAAM4xC,QAAU,OACtCt1C,EAAQq/G,mBAAmB37G,MAAM4xC,QAAU,QAC3C3yC,GAAU3C,EAAQq/G,oBAAqB,uBAjBE,CACzC,IAAImioB,EAAiBrhvB,EAAc,OAASkC,UAAW,+BACvDrC,EAAQP,WAAWyE,aAAas9uB,EAAgBxhvB,GAChDwhvB,EAAe7gvB,YAAYX,GAC3BwhvB,EAAe99uB,MAAM+9D,OAASzhE,EAAQ0D,MAAM+9D,OAC5C+/qB,EAAe99uB,MAAM4xC,QAAU,OAC/Bt1C,EAAQ0D,MAAMwP,SAAW,WACzBvQ,GAAU3C,GAAU,iBACpBhB,KAAKohvB,aAAejgvB,EAAc,OAASkC,UAAW,oBACtDrD,KAAKohvB,aAAa18uB,MAAM+9D,QAAU1tC,SAAS/zB,EAAQ0D,MAAM+9D,OAAQ,MAAQ,GAAGv1D,WAC5ElN,KAAKohvB,aAAa18uB,MAAM4xC,QAAU,QAClCkssB,EAAe7gvB,YAAY3B,KAAKohvB,cAChC77uB,GAAanB,IAAIpE,KAAKohvB,aAAc,kBAAmBphvB,KAAKqhvB,eAAgBrhvB,QAQpFmhvB,EAAgB9lvB,UAAUonvB,iBAAmB,SAAUC,EAAcnuuB,GACjE,IACIouuB,EADMD,EAAa1hvB,QAAQ2B,cAAc,4BAC1B0R,cAAc7S,iBAAiB,WAClD6C,EAAYs+uB,EAAU,cAEtB,IAAK,IADDj+uB,EAAQ6P,EAAe5R,cAAc,IAAMk6uB,IAAkBn4uB,MAAMgxY,kBAC9Dv5Y,EAAI,EAAGA,EAAIwmvB,EAASlmvB,OAAQN,IACjC,GAAIwmvB,EAASxmvB,GAAGuI,MAAMitD,kBAAoBjtD,EAAO,CAC7Cf,GAAUg/uB,EAASxmvB,IAAK,cACxB,QAIZglvB,EAAgB9lvB,UAAUunvB,0BAA4B,SAAU3ivB,EAAM4d,EAAM0nlB,GACxE,IAAIxlmB,EAAQC,KACR0S,EAAQ1S,KACRw/S,EAAMq9b,GAAmB,eAAqB78uB,KAAKM,OAAiB,WAAK,IAAM07uB,GAAuB,IAC1Gx8b,GAAQ,KAAiB,oBAAT3hS,EH3CmB,iCAFN,4BG8C7B,IAAIuc,EAAW,gBAAkB0itB,GAAoB,kBACrC78uB,EAAKgT,SAAW,iCACjB,oBAAT4K,EAA8BnL,EAAMpS,OAAOqxD,gBAAgBwiO,QAAUzhR,EAAMpS,OAAOgqf,UAAUn2N,SAC9F,oBAEAjgN,EAAW,IAAIm8C,IACflpH,OAAQo+lB,EAAYvkmB,QAAQqT,cAC5BpB,SAAUusS,EACVplR,QAASA,EACTwxE,kBAAmB5rG,KAAKM,OAAOsrG,kBAC/B14F,UAAWlT,KAAKM,OAAO4S,UACvBijC,WAAY,SAAUussB,GAElB,GADAhwuB,EAAMpS,OAAOyN,OAAOg0uB,QAChBrvuB,EAAMpS,OAAO+1E,UAAa3jE,EAAMpS,OAAO2kB,QAA3C,CAIA,IAAIjkB,EAAW0hvB,EAAkB,MAAIA,EAAapmvB,MAAM6K,OAAS,KAIjE,GAHAuL,EAAM6B,eAAiB2/D,EAASlzE,QAChC0R,EAAMmwuB,gBAAkB3uqB,EACxBxhE,EAAM+vuB,iBAAiBC,EAAchwuB,EAAM6B,gBACvCmuuB,EAAapmvB,OAAqC,UAA5BomvB,EAAapmvB,MAAMoK,OAAqB1F,EAAQ8C,UAAUK,SAAS24uB,KACtF97uB,EAAQqT,cAAcvQ,UAAUK,SAAS24uB,KADhD,CAEI4F,EAAa7ptB,QAAS,EACtB,IAAIiqtB,EAAmB9hvB,EAAQ8C,UAAUK,SAAS04uB,IAAoB77uB,EAAQ0D,MAAMgxY,kBAChF10Y,EAAQ2B,cAAc,IAAMk6uB,IAAkBn4uB,MAAMgxY,kBACxDhjY,EAAMpS,OAAOyN,OAAOg1uB,IAA6BlluB,MAAQ2pB,QAASvnC,EAAKunC,QAASgsC,WAAYvzE,EAAKuzE,WACzFx2E,MAAO8lvB,SANnB,CAUI,GAAIt3uB,GAAQkb,SAAU,CAClB,IAAIigI,EAAYnkJ,EAAYkgvB,EAAa1hvB,QAAQqT,cAAemtG,IAChEmlC,EAAUvkC,SAAW5hH,SAASuL,KAC9B46I,EAAUzyI,UAAakC,EAAG,EAAGC,EAAG,GAChCswI,EAAUljC,WAAa,YACvBkjC,EAAU5iC,WAAc3tG,EAAG,MAAOC,EAAG,OACrCswI,EAAU16I,QAAU,EACpBlM,EAAMwivB,WAAWG,EAAa1hvB,QAAQqT,eAG/B7R,EADDkgvB,EAAa1hvB,QAAQ2B,cAAc,4BACjBqiJ,IACvBxjB,aAAekhnB,EAAa1hvB,QAAQ2B,cAAc,oBAE3D+/uB,EAAa1hvB,QAAQ+yX,QAAU,SAAU9zX,GACjCA,EAAKkH,OAAOrD,UAAUK,SAAS,aAC/B+vE,EAASmtC,gBAhCbqhoB,EAAa7ptB,QAAS,GAoC9Bn3B,KAAM,SAAUghvB,GACZ,IAEIhwnB,EAFA1uH,EAAM0+uB,EAAa1hvB,QAAQ2B,cAAc,4BAClCH,EAAYwB,EAAKghJ,KAGxBtyB,EADAgwnB,EAAa1hvB,QAAQ2B,cAAc,oBACxBqB,EAAIqQ,cAAc1R,cAAc,cAGhCqB,EAAIqQ,cAAc1R,cAAc,eAG3C+vH,EAASxwH,SAGjBqxH,YAAa,SAAUmvnB,GACnB,IAAI1hvB,EAAW0hvB,EAAkB,MAAIA,EAAapmvB,MAAM6K,OAAS,KACjE,GAAIu7uB,EAAapmvB,OAAqC,UAA5BomvB,EAAapmvB,MAAMoK,OAAqB1F,EAAQ8C,UAAUK,SAAS24uB,KACtF97uB,EAAQqT,cAAcvQ,UAAUK,SAAS24uB,KADhD,CAEI,IAAIgG,EAAmB9hvB,EAAQ8C,UAAUK,SAAS04uB,IAAoB77uB,EAAQ0D,MAAMgxY,kBAChF10Y,EAAQ2B,cAAc,IAAMk6uB,IAAkBn4uB,MAAMgxY,kBAExDhjY,EAAMpS,OAAOyN,OAAOg1uB,IAChBlluB,MACI2pB,QAASvnC,EAAKunC,QACdgsC,WAAYvzE,EAAKuzE,WACjBx2E,MAAO8lvB,YAMvB7gvB,MAAO,SAAUygvB,GACbhwuB,EAAMpS,OAAOyN,OAAOg0uB,OACpB,IAAIhnmB,EAAcl1I,EAAQ68uB,EAAa1hvB,QAAQqT,cAAe,sBAC1D0mI,IACAA,EAAYr2I,MAAM4xC,QAAU,OAC5BykG,EAAYhT,iBAAiBrjI,MAAM4xC,QAAU,OAC7CjyC,GAAa02I,EAAYhT,kBAAmB,uBASxD,OALA7zD,EAAS79B,SAASp2C,EAAKe,SACvBf,EAAKe,QAAQioH,UAAY,EACzB/0C,EAASlzE,QAAQgivB,YAAc,WAC3BtwuB,EAAMpS,OAAOyN,OAAO8zuB,QAEjB3tqB,GAEXitqB,EAAgB9lvB,UAAUs+uB,kBAAoB,SAAU15uB,EAAM4d,GAC1D,IAAInL,EAAQ1S,KACRulmB,EAAc,IAAIvgd,IAClBp5C,kBAAmB5rG,KAAKM,OAAOsrG,kBAC/B14F,UAAWlT,KAAKM,OAAO4S,UACvBlW,MAAkB,oBAAT6gB,EAA8BnL,EAAMpS,OAAOqxD,gBAAgBwiO,QAAUzhR,EAAMpS,OAAOgqf,UAAUn2N,QACrG/uI,QAAQ,EACRrnH,KAAiB,oBAATlgB,EAA8BnL,EAAMpS,OAAOqxD,gBAAgB5zB,KAAOrrB,EAAMpS,OAAOgqf,UAAUvsd,KACjGmpH,aAAyB,oBAATrpI,EAA8BnL,EAAMpS,OAAOqxD,gBAAgBu1F,aAAex0I,EAAMpS,OAAOgqf,UAAUpjW,aACjH+7lB,iBAAkB,SAAUhjvB,GACxBA,EAAKe,QAAQ8C,UAAUM,IHtJR,yBGwJnBgc,OAAQ,SAAU8iuB,GAEd,IAAIJ,EAAyC,SAAtBt3uB,GAAQmb,KAAK8Q,MAAyC,SAAtBjsB,GAAQmb,KAAK8Q,MjnBpOpF,WAGI,IAAK,IAFD14B,GAAS,EACTokvB,GAAc,SAAU,OAAQ,QAC3BhnvB,EAAI,EAAGA,EAAIgnvB,EAAW1mvB,OAAQN,IACnC,GAAIgtF,UAAUqyC,SAASjgE,oBAAoBh9D,QAAQ4kvB,EAAWhnvB,KAAO,EAAG,CACpE4C,GAAS,EACT,MAGR,OAAOA,EinB2N4FqkvB,GAAcF,EAAgBr5mB,aAAayc,KAAO48lB,EAAgBr5mB,aAAa9sG,IAEtKmmtB,EAAgBrluB,MACZ2pB,QAASvnC,EAAKunC,QACdgsC,WAAYvzE,EAAKuzE,WACjBx2E,MAAO8lvB,GAEXpwuB,EAAM6B,eAAe5R,cAAc,IAAMk6uB,IAAkBn4uB,MAAMgxY,kBAAoBotW,EACrFpwuB,EAAMpS,OAAOyN,OAAOg1uB,GAA2BG,GAC/CxwuB,EAAMmwuB,gBAAgBxhoB,UAE1BgioB,iBAAkB,SAAUpjvB,GACxBslmB,EAAY/je,YAA4B,YAAdvhI,EAAK89B,QAOvC,OAJAwnkB,EAAYxniB,QAAoB,oBAATlgD,EAA8B7d,KAAKM,OAAOqxD,gBAAgBoM,QAAU/9D,KAAKM,OAAOgqf,UAAUvsb,QACjHwniB,EAAYx+c,aAAyB,oBAATlpI,EAA8B7d,KAAKM,OAAOqxD,gBAAgBp0B,UAAYv9B,KAAKM,OAAOgqf,UAAU/sd,UACxHgokB,EAAYtylB,SAAqB,oBAAT4K,EHvKS,oCAFN,8BG0K3B0nlB,EAAYlvjB,SAAS71C,SAASuL,KAAKpJ,cAAc1C,EAAKkH,SAC/Co+lB,GAKX47I,EAAgB9lvB,UAAU0ioB,YAAc,WACpC/9nB,KAAKg9nB,WAAWl5nB,UAAUM,IAAIu3uB,KAMlCwF,EAAgB9lvB,UAAU2hoB,SAAW,WACjC,OAAOh9nB,KAAKsjvB,cAMhBnC,EAAgB9lvB,UAAU6ioB,SAAW,SAAU+B,GAC3CjgoB,KAAKsjvB,aAAerjH,GAEjBkhH,KC/TPoC,GAA6B,WAC7B,SAASA,EAAYjjvB,EAAQghE,GACzBthE,KAAKM,OAASA,EACdN,KAAKuloB,QAAUjkkB,EACfthE,KAAKwjvB,cAAgBxjvB,KAAKuloB,QAAQ/jkB,WAAW,mBA4EjD,OA1EA+hrB,EAAYlovB,UAAUoovB,kBAAoB,SAAUpvqB,EAAS55D,GACzD,IAAIzX,EACJ,OAAQqxE,GACJ,IAAK,YACL,IAAK,kBACDrxE,EAAU,OACV,MACJ,QACIA,EAAU,SAGlB,OACIwkC,QAASy1sB,GAAM5oqB,GAAS7sC,QACxBgsC,WAAYypqB,GAAM5oqB,GAASb,WAC3BvkE,SAAU9N,EAAc6B,GAAWM,GAAItD,KAAKM,OAAOojvB,QAAU,IAAMjpuB,EAAY,IAAMwiuB,GAAM5oqB,GAAS/wE,KAAMxB,UAC1G2yS,YAAaluO,GAAe8N,EAASr0E,KAAKuloB,WAGlDg+G,EAAYlovB,UAAUiL,UAAY,SAAUuX,EAAMpD,GAC9C,IAAI45D,EAAUx2D,EAAKjI,cACnB,IAAwC,IAApConuB,GAAcz+uB,QAAQ81E,GACtB,OAAOr0E,KAAKyjvB,kBAAkBpvqB,EAAS55D,GAGvC,OAAQ45D,GACJ,IAAK,IACD,OAAS3tE,KAAM,aACnB,IAAK,IACD,OAASA,KAAM,YAAauM,SJoElB,8BInEd,QACI,OACI3P,GAAItD,KAAKM,OAAOojvB,QAAU,IAAMjpuB,EAAY,IAAMwiuB,GAAM5oqB,GAAS/wE,GACjEixS,WAAY0oc,GAAM5oqB,GAAS3+B,KAC3B++P,YAAaluO,GAAe8N,EAASr0E,KAAKuloB,SAC1C/9lB,QAASy1sB,GAAM5oqB,GAAS7sC,QACxBgsC,WAAYypqB,GAAM5oqB,GAASb,cAQ/C+vqB,EAAYlovB,UAAUs3O,SAAW,SAAUv+J,EAAS35D,GAChD,GAAIza,KAAKM,OAAOk0E,gBAAgB/Z,MAAMh+D,OAAS,EAC3C,SAGJ,IAAK,IADDg+D,KACKr8D,EAAK,EAAGulvB,EAAYvvqB,EAASh2E,EAAKulvB,EAAUlnvB,OAAQ2B,IAAM,CAC/D,IAAIyf,EAAO8luB,EAAUvlvB,GACrB,cAAeyf,GACX,IAAK,SACD48C,EAAMj2D,KAAKxE,KAAKsG,UAAUuX,EAAMpD,IAChC,MACJ,QACIggD,EAAMj2D,KAAKqZ,IAGvB,OAAO48C,GAEX8orB,EAAYlovB,UAAUuovB,kBAAoB,SAAU3jvB,GAChD,OACIkH,OAAQlH,EAAKkH,OACb86uB,cAAejivB,KACfy6D,MAAOz6D,KAAK2yO,SAAS1yO,EAAKw6D,MAAOx6D,EAAKwa,WACtCywR,aAAcjrS,EAAK89B,KACnB6tE,kBAAmB5rG,KAAKM,OAAOsrG,kBAC/B14F,UAAWlT,KAAKM,OAAO4S,YAG/BqwuB,EAAYlovB,UAAU0wG,OAAS,SAAU9rG,GACrCD,KAAK6jvB,gBAAkB7jvB,KAAKwjvB,cAAcv6G,YAAYnb,GAAW5jV,SACjElqS,KAAK6jvB,gBAAgB7B,cAAchivB,KAAK4jvB,kBAAkB3jvB,KAEvDsjvB,KC7EPO,GAAiC,WACjC,SAASA,EAAgBxjvB,EAAQghE,GAC7BthE,KAAKM,OAASA,EACdN,KAAKuloB,QAAUjkkB,EACfthE,KAAKwjvB,cAAgBxjvB,KAAKuloB,QAAQ/jkB,WAAW,mBAC7CxhE,KAAKtD,mBAuLT,OArLAonvB,EAAgBzovB,UAAU0ovB,mBAAqB,WAC3C/jvB,KAAK6jvB,gBAAkB7jvB,KAAKwjvB,cAAcv6G,YAAYnb,GAAW5jV,UAErE45c,EAAgBzovB,UAAU25Y,aAAe,SAAU/0Y,GAC/C,IAAI4d,EAAO5d,EAAK4d,KACZA,EAAK0jH,OACL59H,GAAU1D,EAAKe,SAAU6c,EAAK0jH,OAEb,eAAjB1jH,EAAK2pB,SAAgD,gBAApB3pB,EAAK21D,YACf,iBAApB31D,EAAK21D,YAAqD,kBAApB31D,EAAK21D,YAC9CvzE,EAAKe,QAAQwC,aAAa,QAAS+iE,GAAe1oD,EAAK21D,WAAWjY,oBAAqBv7D,KAAKuloB,WAGpGu+G,EAAgBzovB,UAAU2ovB,gBAAkB,SAAUhuuB,EAAOtP,EAAM0zB,GAC/D,MAAQ,4CAA6D,UAAT1zB,EAAoB,OAASsP,GAAS,4CACnDokB,EAAU,kBAE7D0ptB,EAAgBzovB,UAAU4ovB,gBAAkB,SAAUhkvB,GAClD,IAAIF,EAAQC,KACZA,KAAK+jvB,qBACL,IAAIr9uB,EAAOzG,EAAKikvB,cACZC,EAAYlkvB,EAAKwa,UACrB2puB,GAAoBhlvB,QAAQ,SAAUye,GAClC,IAAIgxG,OAAgB1zH,EACpB,IAAoC,IAAhCk4E,GAASx1D,EAAM5d,EAAKw6D,OACpB,OAAQ58C,GACJ,IAAK,UAED,IADAgxG,EAAgBppH,EAAO,IAAM1F,EAAMO,OAAOojvB,QAAU,IAAMh9uB,EAAO,WAAYy9uB,IAC3DrgvB,UAAUK,SAASkgvB,IACjC,OAEJ,IAAIC,EAAavkvB,EAAMO,OAAO07B,OAAO04C,MAAMrzE,QAC3CijvB,EAAWllvB,QAAQ,SAAUye,GACzBvf,OAAOg6d,iBAAiBz6c,GACpB2pB,SAAWxqC,MAAO,UAAW2K,YAAY,GAAQ6rE,YAAcx2E,MAAO6gB,EAAK7gB,MAAO2K,YAAY,OAGtG5H,EAAM00E,eAAiB10E,EAAM8jvB,gBAAgB1B,sBACzCzuqB,QAAoB,UAAThtE,EAAoB,oBAAsB,GACrD0zB,QAASr6B,EAAMikvB,gBAAgBjkvB,EAAMO,OAAO07B,OAAOhmB,MAAOtP,EAAiB,UAATA,EAAoB,GAAK4sE,GAAiBgxqB,EAAYvkvB,EAAMO,OAAO07B,OAAOm4P,QAAS,OAAQ,SAC7JlhR,SAAUsxuB,GAA6B,IAAMC,GAA6B,sBAC1E/+gB,SAAU,UACVhrK,MAAO6prB,EACPtjvB,QAAS6tH,IAEb,MACJ,IAAK,WAED,IADAA,EAAgBppH,EAAO,IAAM1F,EAAMO,OAAOojvB,QAAU,IAAMh9uB,EAAO,YAAay9uB,IAC5DrgvB,UAAUK,SAASkgvB,IACjC,OAEJ,IAAII,EAAW1kvB,EAAMO,OAAO2sB,WAAWwtC,MAAMp5D,QAC7CojvB,EAASrlvB,QAAQ,SAAUye,GACvBvf,OAAOg6d,iBAAiBz6c,GACpB2pB,SAAWxqC,MAAO,OAAQ2K,YAAY,GAAQ6rE,YAAcx2E,MAAO,WAAY2K,YAAY,OAGnG5H,EAAM80E,iBAAmB90E,EAAM8jvB,gBAAgB1B,sBAC3CzuqB,QAAoB,UAAThtE,EAAoB,sBAAwB,GACvD0zB,QAASr6B,EAAMikvB,gBAAgBjkvB,EAAMO,OAAO2sB,WAAWjX,MAAOtP,EAAiB,UAATA,EAAoB,GAAK4sE,GAAiBmxqB,EAAU1kvB,EAAMO,OAAO2sB,WAAWknQ,QAAS,OAAQ,SACnKlhR,SAAUsxuB,GAA6B,IAAMC,GAA6B,wBAC1E/+gB,SAAU,WACVhrK,MAAOgqrB,EACPzjvB,QAAS6tH,IAEb,MACJ,IAAK,WAED,IADAA,EAAgBppH,EAAO,IAAM1F,EAAMO,OAAOojvB,QAAU,IAAMh9uB,EAAO,YAAay9uB,IAC5DrgvB,UAAUK,SAASkgvB,IACjC,OAEJ,IAAIj9U,EAAWrna,EAAMO,OAAOusB,SAAS4tC,MAAMp5D,QAC3C+la,EAAShoa,QAAQ,SAAUye,GACvBvf,OAAOg6d,iBAAiBz6c,GACpB2pB,SAAWxqC,MAAO,OAAQ2K,YAAY,GAAQ6rE,YAAcx2E,MAAO,WAAY2K,YAAY,OAGnG5H,EAAMg1E,iBAAmBh1E,EAAM8jvB,gBAAgB1B,sBAC3C/ntB,QAASr6B,EAAMikvB,gBAAgBjkvB,EAAMO,OAAOusB,SAAS7W,MAAOtP,EAAMitE,GAAqBL,GAAiB8zV,EAAUrna,EAAMO,OAAOusB,SAASsnQ,QAAS,OAAQ,WACzJlhR,SAAUsxuB,GAA6B,IAAMC,GAA6B,wBAC1E/+gB,SAAU,WACVhrK,MAAO2sW,EACPpma,QAAS6tH,IAEb,MACJ,IAAK,aAED,IADAA,EAAgBppH,EAAO,IAAM1F,EAAMO,OAAOojvB,QAAU,IAAMh9uB,EAAO,cAAey9uB,IAC9DrgvB,UAAUK,SAASkgvB,IACjC,OAEJtkvB,EAAM40E,cAAgB50E,EAAM8jvB,gBAAgB1B,sBACxCzuqB,QAAS,yBACTzgE,SAAUsxuB,GAA6B,IAAMC,GAC7C/+gB,SAAU,aACVhrK,MAAOma,GACP5zE,QAAS6tH,IAEb,MACJ,IAAK,QAED,IADAA,EAAgBppH,EAAO,IAAM1F,EAAMO,OAAOojvB,QAAU,IAAMh9uB,EAAO,SAAUy9uB,IACzDrgvB,UAAUK,SAASkgvB,IACjC,OAEJtkvB,EAAM2kvB,mBAAqB3kvB,EAAM8jvB,gBAAgB1B,sBAC7CzuqB,QAAS,yBACTzgE,SAAUsxuB,GAA6B,IAAMI,GAA6B,IAAMrC,GAChF78gB,SAAU,QACVhrK,MAAOmqrB,GACP5jvB,QAAS6tH,IAEb,MACJ,IAAK,UAED,IADAA,EAAgBppH,EAAO,IAAM1F,EAAMO,OAAOojvB,QAAU,IAAMh9uB,EAAO,WAAYy9uB,IAC3DrgvB,UAAUK,SAASkgvB,IACjC,OAEJtkvB,EAAM8kvB,gBAAkB9kvB,EAAM8jvB,gBAAgB1B,sBAC1CzuqB,QAAS,oBACTzgE,SAAUsxuB,GAA6B,IAAMC,GAA6B,IAAMlC,GAChF78gB,SAAU,UACVhrK,MAAOqqrB,GACP9jvB,QAAS6tH,QAOjCi1nB,EAAgBzovB,UAAU0pvB,sBAAwB,SAAU59uB,GACxD9C,GAAa8C,IACTk9uB,GACAE,GACAI,GACAH,MAGRV,EAAgBzovB,UAAU2pvB,iBAAmB,WACrChlvB,KAAKy0E,iBACLz0E,KAAK+kvB,sBAAsB/kvB,KAAKy0E,eAAezzE,SAC/ChB,KAAKy0E,eAAeniE,WAEpBtS,KAAK60E,mBACL70E,KAAK+kvB,sBAAsB/kvB,KAAK60E,iBAAiB7zE,SACjDhB,KAAK60E,iBAAiBviE,WAEtBtS,KAAK+0E,mBACL/0E,KAAK+kvB,sBAAsB/kvB,KAAK+0E,iBAAiB/zE,SACjDhB,KAAK+0E,iBAAiBziE,WAEtBtS,KAAK20E,gBACL30E,KAAK+kvB,sBAAsB/kvB,KAAK20E,cAAc3zE,SAC9ChB,KAAK20E,cAAcriE,WAEnBtS,KAAK0kvB,qBACL1kvB,KAAK+kvB,sBAAsB/kvB,KAAK0kvB,mBAAmB1jvB,SACnDhB,KAAK0kvB,mBAAmBpyuB,WAExBtS,KAAK6kvB,kBACL7kvB,KAAK+kvB,sBAAsB/kvB,KAAK6kvB,gBAAgB7jvB,SAChDhB,KAAK6kvB,gBAAgBvyuB,YAG7BwxuB,EAAgBzovB,UAAUqB,iBAAmB,WACrCsD,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAOslF,GAAGg8pB,GAAiC5hvB,KAAKg1Y,aAAch1Y,MACnEA,KAAKM,OAAOslF,GAAGq/pB,GAAwBjlvB,KAAKklvB,kBAAmBllvB,MAC/DA,KAAKM,OAAOslF,GAAGguiB,GAAgB5znB,KAAKpD,oBAAqBoD,QAE7D8jvB,EAAgBzovB,UAAU6pvB,kBAAoB,WAC1CvxuB,GAAcnT,SAAU,cAE5BsjvB,EAAgBzovB,UAAUuB,oBAAsB,WACxCoD,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAO0lF,IAAIi/pB,GAAwBjlvB,KAAKklvB,mBAC7CllvB,KAAKM,OAAO0lF,IAAI47pB,GAAiC5hvB,KAAKg1Y,cACtDh1Y,KAAKM,OAAO0lF,IAAI4tiB,GAAgB5znB,KAAKpD,uBAElCknvB,KClMPhtV,GAAgC,WAChC,SAASA,IACL92Z,KAAK+2Z,YAaT,OAXAD,EAAez7Z,UAAU27Z,SAAW,SAAUv/X,EAAM/wB,GAC5CjJ,EAAkBuC,KAAK+2Z,SAASt/X,MAChCz3B,KAAK+2Z,SAASt/X,GAAQ/wB,IAG9BowZ,EAAez7Z,UAAUmmE,WAAa,SAAU/pC,GAC5C,GAAIh6B,EAAkBuC,KAAK+2Z,SAASt/X,IAChC,KAAM,eAAiBA,EAAO,qBAElC,OAAOz3B,KAAK+2Z,SAASt/X,IAElBq/X,KCdPy1O,GAAiC,WACjC,SAASA,IACLvsoB,KAAKwsoB,eAiBT,OAfAD,EAAgBlxoB,UAAUiwoB,YAAc,SAAU7zmB,EAAM/wB,GACpD,IAAI+loB,EAAQ5uoB,EAAaiwnB,GAAYr2lB,GACjCh6B,EAAkBuC,KAAKwsoB,YAAYC,MACnCzsoB,KAAKwsoB,YAAYC,GAAS/loB,IAGlC6loB,EAAgBlxoB,UAAU4toB,YAAc,SAAUxxmB,GAC9C,IAAIg1mB,EAAQ5uoB,EAAaiwnB,GAAYr2lB,GACrC,GAAIh6B,EAAkBuC,KAAKwsoB,YAAYC,IACnC,KAAM,gBAAkBA,EAAQ,gBAGhC,OAAOzsoB,KAAKwsoB,YAAYC,IAGzBF,KClBP44G,GAA+B,WAC/B,SAASA,EAAc7kvB,GACnBN,KAAKM,OAASA,EACdN,KAAKtD,mBACLsD,KAAKshE,eAAiB,IAAIw1V,GAC1B92Z,KAAKshE,eAAe01V,SAAS,kBAAmB,IAAIu1O,IAyCxD,OAvCA44G,EAAc9pvB,UAAUqB,iBAAmB,WACvCsD,KAAKM,OAAOslF,GAAG67pB,GAAqBzhvB,KAAKw5uB,aAAcx5uB,MACvDA,KAAKM,OAAOslF,GAAG+7pB,GAAuB3hvB,KAAKk6uB,eAAgBl6uB,MAC3DA,KAAKM,OAAOslF,GAAGm9pB,GAA2B/ivB,KAAKolvB,gBAAiBplvB,MAChEA,KAAKM,OAAOslF,GAAGguiB,GAAgB5znB,KAAKpD,oBAAqBoD,OAE7DmlvB,EAAc9pvB,UAAUm+uB,aAAe,SAAUv5uB,GAC7C,IAAIwzE,EAAMxzE,EAAK4d,MAAf,CAGA,IAAK41D,EAAMxzE,EAAK4d,KAAKs0E,eAAgB,CACjC,IAAIy6M,EAAY3sS,EAAK4d,KAAKs0E,cACrBy6M,UACDA,IACAA,EAAU3jL,UAAY,GAG9BjpH,KAAKM,OAAOyN,OAAOs3uB,GAAyBplvB,GAC5CD,KAAKM,OAAOyN,OAAOu3uB,GAA6BrlvB,KAEpDklvB,EAAc9pvB,UAAU6+uB,eAAiB,SAAUr5uB,GAC/Cb,KAAKM,OAAOyN,OAAOg0uB,OACbvhvB,SAASuL,KAAK5H,SAAS3D,SAASuL,KAAKpJ,cAAc,0BAClD9B,EAAEgd,OAA4B,WAAnBhd,EAAEgd,KAAK2pB,SAA2C,YAAnB3mC,EAAEgd,KAAK2pB,UACpDxnC,KAAKM,OAAOusY,UAAU75T,QAAQhzE,KAAKM,OAAQO,EAAGA,EAAEq6G,cAAe,MAEnEl7G,KAAKM,OAAOyN,OAAO8zuB,QAEvBsD,EAAc9pvB,UAAU+pvB,gBAAkB,SAAUnlvB,GAChDD,KAAKM,OAAOyN,OAAOg0uB,OACnB/hvB,KAAKM,OAAOusY,UAAU75T,QAAQhzE,KAAKM,OAAQL,EAAMA,EAAKi7G,cAAe,MACrEl7G,KAAKM,OAAOyN,OAAO8zuB,QAEvBsD,EAAc9pvB,UAAUuB,oBAAsB,WAC1CoD,KAAKM,OAAO0lF,IAAIy7pB,GAAqBzhvB,KAAKw5uB,cAC1Cx5uB,KAAKM,OAAO0lF,IAAI27pB,GAAuB3hvB,KAAKk6uB,gBAC5Cl6uB,KAAKM,OAAO0lF,IAAI+8pB,GAA2B/ivB,KAAKolvB,iBAChDplvB,KAAKM,OAAO0lF,IAAI4tiB,GAAgB5znB,KAAKpD,sBAElCuovB,KCvCPj7c,GAAyB,WACzB,SAASA,EAAQ5pS,EAAQghE,GACrBthE,KAAKM,OAASA,EACdN,KAAKulvB,WAAY,EACjBvlvB,KAAKuloB,QAAUjkkB,EACfthE,KAAKwjvB,cAAgBxjvB,KAAKuloB,QAAQ/jkB,WAAW,mBAC7CxhE,KAAKwjvB,cAAcl4G,YAAYxd,GAAW5jV,QAAS,IAAIi3c,GAAgBnhvB,KAAKM,SAC5EN,KAAK6jvB,gBAAkB7jvB,KAAKwjvB,cAAcv6G,YAAYnb,GAAW5jV,SACjElqS,KAAKo1E,YAAc,IAAImuqB,GAAYvjvB,KAAKM,OAAQN,KAAKuloB,SACrDvloB,KAAKtD,mBA6ZT,OA3ZAwtS,EAAQ7uS,UAAU0ovB,mBAAqB,WACnC/jvB,KAAKkpoB,gBAAkBlpoB,KAAKwjvB,cAAcv6G,YAAYnb,GAAWqb,SACjEnpoB,KAAKwlvB,gBAAkBxlvB,KAAKkpoB,gBAAgBu8G,eAC5CzlvB,KAAK0lvB,UAAY1lvB,KAAKkpoB,gBAAgBlM,YAE1C9yV,EAAQ7uS,UAAUsqvB,iBAAmB,WACjC3lvB,KAAK4lvB,eAAiB,IAAIxvoB,GAAep2G,KAAK6lvB,qBAC1C3uoB,UAAWl3G,KAAK8lvB,eAAexqvB,KAAK0E,MAAO42G,WAAY52G,KAAKM,OAAOusY,UAAUk5W,UAAWl2qB,UAAW,aAG3Gq6N,EAAQ7uS,UAAUyqvB,eAAiB,SAAUjlvB,GACzC,OAAQA,EAAEs1D,QACN,IAAK,SACDn2D,KAAKM,OAAO21E,cAAcwvqB,eAAevjvB,UAIrDgoS,EAAQ7uS,UAAU2qvB,qBAAuB,WACrChmvB,KAAKmkvB,UAAY8B,EAAU,OAAS3ivB,GAAItD,KAAKM,OAAOojvB,QAAU,cACzDl4uB,GAAQkb,UAAY1mB,KAAKM,OAAO8hvB,WAAW3itB,SAIxCz/B,KAAKM,OAAOk0E,gBAAgB0xqB,iBAAmBlmvB,KAAKM,OAAO8hvB,WAAW3itB,QACtEz/B,KAAKmmvB,UAAYF,EAAU,OACvB3ivB,GAAItD,KAAKM,OAAOojvB,QAAU,mBAC1B1hvB,UAAWhC,KAAKmkvB,UAAUrivB,UAC1BuB,UTMK,sBSJTrD,KAAKmkvB,UAAYnkvB,KAAKmmvB,UAAUhhvB,kBAChCnF,KAAKM,OAAOU,QAAQkE,aAAalF,KAAKmmvB,UAAWnmvB,KAAK0lvB,YAGtD1lvB,KAAKM,OAAOU,QAAQkE,aAAalF,KAAKmkvB,UAAWnkvB,KAAK0lvB,aAIlEx7c,EAAQ7uS,UAAU+qvB,eAAiB,WAC/B,IAAIC,EACJ,OAAQrmvB,KAAKM,OAAOk0E,gBAAgB9tE,MAChC,KAAKq2uB,GAAY9gH,OACboqH,EAAS,WACT,MACJ,QACIA,EAAS,WAEjB,OAAOA,GAEXn8c,EAAQ7uS,UAAUirvB,uBAAyB,SAAUtivB,GACjD,QAAKwH,GAAQkb,WAGb1mB,KAAKo1E,YAAY22B,QACbtxF,UAAaza,KAAKM,OAAO8hvB,WAAiB,OAAI,QAAU,UACxD3nrB,MAAOz6D,KAAKM,OAAOk0E,gBAAgB/Z,MACnC18B,KAAM,WACN52B,OAAQnD,IAEZL,GAAUK,IAAO,oBACbhE,KAAKM,OAAO8hvB,WAAW3itB,OACvBz/B,KAAKumvB,oBAGL5ivB,GAAUK,IT0BK,gBSxBnBhE,KAAKukB,aACLvkB,KAAKm0E,eAAe8vqB,iBAChBxpuB,UAAWzW,EACXkgvB,cAAiBlkvB,KAAKM,OAAO8hvB,WAAiB,OAAI,QAAU,UAC5D3nrB,MAAOz6D,KAAKM,OAAOk0E,gBAAgB/Z,QAEvCz6D,KAAKM,OAAOyN,OAAOy4uB,IACf/ruB,UAAWza,KAAKmkvB,UAChBD,cAAe,UACfzprB,MAAOz6D,KAAKM,OAAOk0E,gBAAgB/Z,SAEhC,IAEXyvO,EAAQ7uS,UAAUorvB,sBAAwB,SAAUtwrB,EAAQzpD,GACxD1M,KAAKmkvB,UAAUz/uB,MAAMgI,KAAmB,QAAXypD,EAAqBzpD,EAAM1M,KAAKM,OAAOomvB,sBAAyB,GAAK,MAEtGx8c,EAAQ7uS,UAAUsrvB,iBAAmB,SAAU9lvB,GAC3C,IAGI+lvB,EAHAx6nB,EAAW,EACXy6nB,EAAc7mvB,KAAKM,OAAOomvB,sBAC1BI,GAAS,EAETC,EAA0B,EAC1B9kc,EAAMjiT,KAAKM,OAAOU,QAClBgmvB,EAAY/kc,EAAIvwQ,aAChBu1sB,EAAWjnvB,KAAKknvB,mBAAqBlnvB,KAAKmnvB,yBAC9C,GAAItmvB,GAAKA,EAAEsG,SAAW3G,SAClBomvB,EAAe/lvB,EAAEsG,WAEhB,CACD2/uB,GAAS,EACTF,EAAepmvB,SAASuL,KACxB,IAAIq7uB,EAAYvrvB,OAAOsR,iBAAiBy5uB,GACxCG,EAA0BvruB,WAAW4ruB,EAAUr7rB,UAAU7uD,MAAM,MAAM,IAAMse,WAAW4ruB,EAAUn7hB,WAAW/uN,MAAM,MAAM,IAE3H,IAAImqvB,EAAYplc,EAAIr2S,wBAAwBc,IACxC46uB,EAAuB97uB,GAAQo+E,aAAek9pB,EAAUjrvB,OAAO81E,YAAci1qB,EAAavyuB,cAAclI,UACxGo7uB,EAAmBX,EAAah7uB,wBAChC47uB,EAAoBV,EAAkCS,EAAiB76uB,IAAM46uB,EAA/CC,EAAiB76uB,IAE/C26uB,EAAaG,EAAkBX,GAAgBQ,GAAaL,GAAeK,EAAY,KADtEA,GAAeP,EAA4B,EAAlBU,GAAwBR,EAAYC,EAAWJ,IAEzF7mvB,KAAKmkvB,UAAUrgvB,UAAUS,OT9GX,kBS+GdvE,KAAKmkvB,UAAUz/uB,MAAMsR,MAAQ,OAC7BhW,KAAKymvB,sBAAsB,SAAUr6nB,IAEhCi7nB,EAAaG,EAAkBX,IAEhCz6nB,EADAi7nB,EAAY,GACCA,EAAaG,EAGfA,EAAkBH,EAEjCj7nB,EAAW,EAAWA,EAAW26nB,EAA0B36nB,EAC3DpsH,KAAKmkvB,UAAUrgvB,UAAUM,IT1HX,kBS2HdpE,KAAKmkvB,UAAUz/uB,MAAMsR,MAAQhW,KAAKM,OAAOU,QAAQ4D,YAAc,KAC/D5E,KAAKymvB,sBAAsB,MAAOr6nB,KAG1C89K,EAAQ7uS,UAAU2mvB,cAAgB,WAC9BhivB,KAAK+jvB,qBACL/jvB,KAAKgmvB,uBACDhmvB,KAAKsmvB,uBAAuBtmvB,KAAKmkvB,aAGjCnkvB,KAAKM,OAAO8hvB,WAAW3itB,OACvBz/B,KAAKM,OAAOyN,OAAO05uB,QAGnBznvB,KAAKo1E,YAAY22B,QACbtxF,UAAW,UACXggD,MAAOz6D,KAAKM,OAAOk0E,gBAAgB/Z,MACnC18B,KAAM/9B,KAAKomvB,iBACXj/uB,OAAQnH,KAAKmkvB,YAEZnkvB,KAAKM,OAAO8hvB,WAAW3itB,SACpBz/B,KAAKM,OAAOk0E,gBAAgB0xqB,gBAC5BlmvB,KAAK2mvB,mBAEL3mvB,KAAKM,OAAOk0E,gBAAgB9tE,OAASq2uB,GAAY9gH,QACjDt4nB,GAAU3D,KAAKM,OAAOU,UT9IX,sBSkJvBhB,KAAKukB,aACDvkB,KAAKM,OAAO8hvB,WAAW3itB,QACvBz/B,KAAKumvB,oBAEJvmvB,KAAKM,OAAO8hvB,WAAW3itB,SACxBz/B,KAAKm0E,eAAe8vqB,iBAChBxpuB,UAAWza,KAAKmkvB,UAChBD,cAAe,UACfzprB,MAAOz6D,KAAKM,OAAOk0E,gBAAgB/Z,QAEvCz6D,KAAKM,OAAOyN,OAAOy4uB,IACf/ruB,UAAWza,KAAKmkvB,UAChBD,cAAe,UACfzprB,MAAOz6D,KAAKM,OAAOk0E,gBAAgB/Z,QAEvCz6D,KAAK0nvB,4BAGbx9c,EAAQ7uS,UAAUkrvB,kBAAoB,WAClC5ivB,GAAU3D,KAAKmkvB,YT7KG,oBS+KtBj6c,EAAQ7uS,UAAUssvB,qBAAuB,WACrCtjvB,GAAarE,KAAKmkvB,YThLA,oBSkLtBj6c,EAAQ7uS,UAAUusvB,cAAgB,WAC9BjkvB,GAAU3D,KAAKmkvB,YT/HD,WSgIV34uB,GAAQqb,OACRljB,GAAU3D,KAAKmkvB,YTvFC,sBS0FxBj6c,EAAQ7uS,UAAUwsvB,cAAgB,WAC5B7nvB,KAAKulvB,UAAyFvlvB,KAAKulvB,WAAY,EAA7FlhvB,GAAarE,KAAKmkvB,YTrIxB,SA0CM,sBS6FxBj6c,EAAQ7uS,UAAUg/S,WAAa,SAAUp6S,GACrC,IAAI4d,EAAOiquB,GAAY7nvB,EAAKo6S,WAAW9+O,qBAEnCtpD,EAAQ+iE,GAAkB3iB,GADhBy1rB,GAAY7nvB,EAAK8nvB,WAAWxsrB,qBACUiY,YAAavzE,EAAKm1E,YAAYI,WAAW/a,OAAO,GAC/FgZ,EAAMxhE,GAQPjS,KAAKgovB,YAAY/nvB,EAAM,IAPvBA,EAAKm1E,YAAYI,WAAW/a,MAAMxoD,GAAO3O,GAAKtD,KAAKM,OAAOojvB,QAAU,IAAM7luB,EAAKva,GAC/ErD,EAAKm1E,YAAYI,WAAW/a,MAAMxoD,GAAOsiS,WAAa12R,EAAK63B,KAC3Dz1C,EAAKm1E,YAAYI,WAAW/a,MAAMxoD,GAAOwiS,YAAc52R,EAAKgU,QAC5D5xB,EAAKm1E,YAAYI,WAAW/a,MAAMxoD,GAAOuhE,WAAa31D,EAAK21D,WAC3DvzE,EAAKm1E,YAAYI,WAAW5pB,aAMpCs+O,EAAQ7uS,UAAU4svB,oBAAsB,SAAUhovB,GAC9C,IAAI+S,GACA/S,KAAMA,EACNk0E,eAAgBn0E,KAAKm0E,eACrB7zE,OAAQN,KAAKM,OACbg0E,WAAY1uE,EAAU,IAAM6vE,GAAqBz1E,KAAKmkvB,WACtD/vqB,QAASp0E,KAAKo1E,YAAYI,WAAW/a,OAErCz6D,KAAKM,OAAO8hvB,WAAW3itB,OACvBu0C,GAAiBhhE,GAAS,GAG1BghE,GAAiBhhE,GAAS,IAGlCk3R,EAAQ7uS,UAAUquH,WAAa,SAAU7oH,GACrCb,KAAKM,OAAO4nvB,iBAAiBC,eAAetnvB,IAEhDqpS,EAAQ7uS,UAAU+svB,WAAa,SAAUvnvB,GACrCb,KAAKM,OAAO4nvB,iBAAiBG,eAAexnvB,IAEhDqpS,EAAQ7uS,UAAUitvB,eAAiB,WAC/B,OAAOtovB,KAAKo1E,aAEhB80N,EAAQ7uS,UAAU2svB,YAAc,SAAU/nvB,EAAMgS,GAC5ChS,EAAKm1E,YAAYI,WAAW49N,UAAUnzS,EAAKm1E,YAAY9uE,UAAUrG,EAAKo6S,WAAY,YAAapoS,IAEnGi4R,EAAQ7uS,UAAUktvB,gBAAkB,SAAUnzqB,EAAa3a,EAAOu7D,GAC9D,IAAI1gD,EAAWN,GAAkB3iB,GAAcoI,GAAQ2a,EAAYI,WAAW/a,OAC9Ez6D,KAAKo0E,QAAUxuE,EAAU,IAAM6vE,GAAqBL,EAAYI,WAAWx0E,SAC3E,IAAK,IAAI7E,EAAI,EAAGA,EAAIm5E,EAAS74E,OAAQN,IAAK,CACtC,IAAI0hB,EAAO7d,KAAKo0E,QAAQkB,EAASn5E,IAC7B0hB,GACAu3D,EAAYI,WAAWG,YAAY93D,EAAMm4G,GAG5CvwH,EAAO,qBAAsBzF,KAAKM,OAAOU,UAC1Cm0E,GAAqBC,EAAap1E,KAAKM,OAAOusY,UAAU27W,cAAcC,gBAAgBC,kBAG9Fx+c,EAAQ7uS,UAAUstvB,gBAAkB,SAAUlurB,GAC1C,IAAI6a,EAAWN,GAAkB3iB,GAAcoI,GAAQz6D,KAAKo1E,YAAYI,WAAW/a,OACnFz6D,KAAKo0E,QAAUxuE,EAAU,IAAM6vE,GAAqBz1E,KAAKM,OAAOU,SAChE,IAAK,IAAI7E,EAAI,EAAGA,EAAIm5E,EAAS74E,OAAQN,IACjC6D,KAAKo1E,YAAYI,WAAWi+N,YAAYzzS,KAAKo0E,QAAQkB,EAASn5E,MAGtE+tS,EAAQ7uS,UAAU8rvB,uBAAyB,WACvC,IAAIyB,EAAY,EAChB,GAAI5ovB,KAAKM,OAAOk0E,gBAAgB9tE,OAASq2uB,GAAY9gH,QAAUj8nB,KAAKmkvB,UAAUrgvB,UAAUK,SAAS,sBAAuB,CACpH,IAAI0kvB,EAAcpjvB,EAAO,sBAAuBzF,KAAKmkvB,WACjD0E,GAAe7ovB,KAAKmkvB,UAAUrgvB,UAAUK,SAAS,kBAC9C0kvB,GAAeA,EAAY/kvB,UAAUK,SAAS,iBACjDR,GAAUklvB,ITvMD,cSwMTD,GAAwBC,EAAYn3sB,aACpCrtC,GAAawkvB,ITzMJ,eS4MTxkvB,GAAarE,KAAKmkvB,YAAa2E,KAGvC,OAAOF,GAEX1+c,EAAQ7uS,UAAU6rvB,iBAAmB,WACjC,OAAOlnvB,KAAKmkvB,UAAUzysB,cAE1Bw4P,EAAQ7uS,UAAUwqvB,kBAAoB,WAClC,OAAOpgvB,EAAO,IAAMsjvB,GAAqB/ovB,KAAKM,OAAOU,UAEzDkpS,EAAQ7uS,UAAUqsvB,uBAAyB,WACvC1nvB,KAAKo1E,YAAYI,WAAW24N,mBAEhCjE,EAAQ7uS,UAAU2tvB,mBAAqB,WACnC,OAAOhpvB,KAAKo1E,YAAYI,aAAex1E,KAAKo1E,YAAYI,WAAWwR,aAEvEkjN,EAAQ7uS,UAAU4tvB,eAAiB,WAC3BjpvB,KAAKgpvB,uBACLhpvB,KAAKM,OAAO4ovB,6BACZlpvB,KAAKw+G,eACLx+G,KAAKM,OAAOyN,OAAOo7uB,OACnBnpvB,KAAKm0E,eAAe6wqB,mBACpBhlvB,KAAKo1E,YAAYI,WAAWljE,UAC5BtS,KAAKpD,wBAQbstS,EAAQ7uS,UAAUiX,QAAU,WACpBtS,KAAKgpvB,uBACLhpvB,KAAKipvB,iBACDjpvB,KAAK4lvB,gBACL5lvB,KAAK4lvB,eAAetzuB,YAIhC43R,EAAQ7uS,UAAUk0H,cAAgB,SAAU1uH,GACpCb,KAAKM,OAAOk0E,gBAAgB0xqB,gBAC5BlmvB,KAAK2mvB,iBAAiB9lvB,EAAEZ,OAGhCiqS,EAAQ7uS,UAAUwkH,iBAAmB,WAC7Br0G,GAAQkb,UAAY1mB,KAAKM,OAAO8hvB,WAAW3itB,QAC3Cz/B,KAAK4nvB,iBAGb19c,EAAQ7uS,UAAU+tvB,mBAAqB,WAC/B59uB,GAAQkb,UAAY1mB,KAAKM,OAAO8hvB,WAAW3itB,SAC3Cz/B,KAAKulvB,WAAY,EACjBvlvB,KAAK6nvB,kBAGb39c,EAAQ7uS,UAAUguvB,0BAA4B,WAC1CrpvB,KAAKulvB,WAAY,GAErBr7c,EAAQ7uS,UAAUiuvB,wBAA0B,SAAUzovB,GAClD,IAAIohT,EAAMp8S,EAAQhF,EAAEsG,OAAQ,cACxB86S,GAAOjiT,KAAKM,OAAOk0E,gBAAgB9tE,OAASq2uB,GAAY9gH,SAAWxojB,EAAMwuO,GACpEA,EAAIn+S,UAAUK,SAAS,iBAKxBR,GAAU3D,KAAKmkvB,YAAa2E,KAC5B9ovB,KAAKM,OAAO0/S,iBAAiB,WAAW,KALxC37S,GAAarE,KAAKmkvB,YAAa2E,KAC/B9ovB,KAAKM,OAAO0/S,iBAAiB,WAAW,KAOvCx0S,GAAQkb,UAAY1mB,KAAKM,OAAO8hvB,WAAW3itB,UAChDz/B,KAAKulvB,WAAY,GAEjB9xqB,EAAMwuO,IAAQjiT,KAAKM,OAAOk0E,gBAAgB9tE,OAASq2uB,GAAY9gH,QAC/D53nB,GAAarE,KAAKmkvB,YAAa2E,MAGvC5+c,EAAQ7uS,UAAUkpB,WAAa,WAC3Bhf,GAAanB,IAAIpE,KAAKmkvB,UAAW,kBAAmBnkvB,KAAKspvB,wBAAyBtpvB,OAEtFkqS,EAAQ7uS,UAAUmjH,aAAe,WAC7Bj5G,GAAahB,OAAOvE,KAAKmkvB,UAAW,kBAAmBnkvB,KAAKspvB,0BAEhEp/c,EAAQ7uS,UAAUqB,iBAAmB,WAC7BsD,KAAKM,OAAO0mF,cAGhBhnF,KAAKm0E,eAAiB,IAAI2vqB,GAAgB9jvB,KAAKM,OAAQN,KAAKuloB,SAC5DvloB,KAAKupvB,oBAAsB,IAAIpE,GAAcnlvB,KAAKM,QAClDN,KAAKM,OAAOslF,GAAGm1jB,GAAmB/6oB,KAAKgivB,cAAehivB,MACjDA,KAAKM,OAAO8hvB,WAAW3itB,SACxBz/B,KAAKM,OAAOslF,GV9OJ,SU8OsB5lF,KAAKuvH,cAAevvH,MAClDA,KAAKM,OAAOslF,GAAG4jqB,GAAkBxpvB,KAAK2lvB,iBAAkB3lvB,MACxDA,KAAKM,OAAOslF,GAAG6jqB,GAAuBzpvB,KAAKiovB,oBAAqBjovB,OAEpEA,KAAKM,OAAOslF,GAAG8ljB,GAAqB1roB,KAAKwnF,kBAAmBxnF,MAC5DA,KAAKM,OAAOslF,GAAGguiB,GAAgB5znB,KAAKsS,QAAStS,MAC7CA,KAAKM,OAAOslF,GAAG8jqB,GAAyB1pvB,KAAK0pH,WAAY1pH,MACzDA,KAAKM,OAAOslF,GAAG+jqB,GAA0B3pvB,KAAKoovB,WAAYpovB,MAC1DA,KAAKM,OAAOslF,GAAGgkqB,GAA0B5pvB,KAAKq6S,WAAYr6S,MAC1DA,KAAKM,OAAOslF,GAAGy8pB,GAA2BrivB,KAAKqpvB,0BAA2BrpvB,MAC1EA,KAAKM,OAAOslF,GAAGikqB,GAAyB7pvB,KAAKM,OAAO0/S,iBAAkBhgT,KAAKM,QAC3EN,KAAKM,OAAOslF,GAAGkkqB,GAAoB9pvB,KAAKopvB,mBAAoBppvB,MAC5DA,KAAKM,OAAOslF,GAAGmkqB,GAAkB/pvB,KAAK6/G,iBAAkB7/G,MACxDA,KAAKM,OAAOslF,GAAGokqB,GAA4BhqvB,KAAK6/G,iBAAkB7/G,QAEtEkqS,EAAQ7uS,UAAUuB,oBAAsB,WAChCoD,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAO0lF,IAAI+0jB,GAAmB/6oB,KAAKgivB,eACnChivB,KAAKM,OAAO8hvB,WAAW3itB,SACxBz/B,KAAKM,OAAO0lF,IVnQJ,SUmQuBhmF,KAAKuvH,eACpCvvH,KAAKM,OAAO0lF,IAAIwjqB,GAAkBxpvB,KAAK2lvB,kBACvC3lvB,KAAKM,OAAO0lF,IAAIyjqB,GAAuBzpvB,KAAKiovB,sBAEhDjovB,KAAKM,OAAO0lF,IAAI0ljB,GAAqB1roB,KAAKwnF,mBAC1CxnF,KAAKM,OAAO0lF,IAAI4tiB,GAAgB5znB,KAAKsS,SACrCtS,KAAKM,OAAO0lF,IAAI0jqB,GAAyB1pvB,KAAKM,OAAO4nvB,iBAAiBC,gBACtEnovB,KAAKM,OAAO0lF,IAAI2jqB,GAA0B3pvB,KAAKM,OAAO4nvB,iBAAiBG,gBACvErovB,KAAKM,OAAO0lF,IAAI4jqB,GAA0B5pvB,KAAKq6S,YAC/Cr6S,KAAKM,OAAO0lF,IAAIq8pB,GAA2BrivB,KAAKqpvB,2BAChDrpvB,KAAKM,OAAO0lF,IAAI6jqB,GAAyB7pvB,KAAKM,OAAO0/S,kBACrDhgT,KAAKM,OAAO0lF,IAAI8jqB,GAAoB9pvB,KAAKopvB,oBACzCppvB,KAAKM,OAAO0lF,IAAI+jqB,GAAkB/pvB,KAAK6/G,kBACvC7/G,KAAKM,OAAO0lF,IAAIgkqB,GAA4BhqvB,KAAK6/G,oBAMrDqqL,EAAQ7uS,UAAUmsF,kBAAoB,SAAU3mF,GAC5C,GAAIA,EAAEswF,SAAWnxF,KAAKu/B,gBAAtB,CAGA,IAAI4mtB,EAAY1gvB,EAAO,qBAA2BzF,KAAKM,OAAOU,SAC1DmjvB,EAAY1+uB,EAAO,IAAMsjvB,GAAqB/ovB,KAAKM,OAAOU,SAC1DmjvB,IACAnkvB,KAAKipvB,iBACL5jvB,EAAO8+uB,GACHgC,GACA9gvB,EAAO8gvB,GAEXnmvB,KAAKtD,mBACLsD,KAAKgivB,gBACLhivB,KAAKM,OAAO2pvB,2BACPxkvB,EAAO,qBAAsBzF,KAAKM,OAAOU,UAC1Cm0E,GAAqBn1E,KAAKo1E,YAAap1E,KAAKM,OAAOusY,UAAU27W,cAAcC,gBAAgBC,oBAOvGx+c,EAAQ7uS,UAAUkkC,cAAgB,WAC9B,MAAO,WAEJ2qQ,KCpbP5/M,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAI5D9U,IACA+rF,UAAa,EACbC,IAAO,EACPC,MAAS,GACTp2B,MAAS,GACThrE,QAAW,GACXqhG,IAAO,GACPC,MAAS,GACTC,SAAY,GACZr2E,MAAS,GACTs2E,OAAU,GACVC,OAAU,GACVC,SAAY,GACZx1F,IAAO,GACPy1F,KAAQ,GACRC,UAAa,GACbC,QAAW,GACXC,WAAc,GACdC,UAAa,GACbC,OAAU,GACVC,OAAU,GACVC,GAAM,IACNC,GAAM,IACNC,GAAM,IACNC,GAAM,IACNC,GAAM,IACNC,GAAM,IACNC,GAAM,IACNC,GAAM,IACNC,GAAM,IACNC,IAAO,IACPC,IAAO,IACPC,IAAO,IACPC,UAAa,IACbC,KAAQ,IACRC,MAAS,IACTC,MAAS,IACTC,IAAO,IACPC,aAAgB,IAChBC,YAAe,IACfC,YAAe,IACfC,UAAa,IACbC,aAAgB,IAChBC,YAAe,IACf+zoB,IAAK,IACLC,IAAK,IACLzjF,IAAK,KAkBLtwjB,GAAgC,SAAUjrB,GAO1C,SAASirB,EAAep1G,EAASgS,GAC7B,IAAIjT,EAAQorF,EAAO7pF,KAAKtB,KAAMgT,EAAShS,IAAYhB,KA2BnD,OAvBAD,EAAMs2G,gBAAkB,SAAUx1G,GAM9B,IAAK,IALDy1G,EAAWz1G,EAAE01G,OACbvsF,EAAYnpB,EAAEgnB,QACd2uF,EAAa31G,EAAE41G,SACfC,EAAa71G,EAAE81G,MAEVv4G,EAAK,EAAGC,EADNC,OAAOhB,KAAKyC,EAAM62G,YACGx4G,EAAKC,EAAO5B,OAAQ2B,IAGhD,IAAK,IAFDf,EAAMgB,EAAOD,GAERyE,EAAK,EAAGg0G,EADM92G,EAAM62G,WAAWv5G,GAAKH,MAAM,KACK2F,EAAKg0G,EAAmBp6G,OAAQoG,IAAM,CAC1F,IAAIi0G,EAAUD,EAAmBh0G,GAC7Bk0G,EAAUC,EAAiBC,iBAAiBH,EAAQ5mG,QACpDomG,IAAaS,EAAQR,QAAUvsF,IAAc+sF,EAAQlvF,SACrD2uF,IAAeO,EAAQN,UAAYC,IAAeK,EAAQjvF,UAC1DjnB,EAAEs1D,OAAS94D,GAInB0C,EAAMm3G,WACNn3G,EAAMm3G,UAAUr2G,IAGxBd,EAAMzE,OACCyE,EAsFX,OAxHAuqF,GAAU8rB,EAAgBjrB,GAoC1B6rB,EAAmBZ,EAKnBA,EAAe/6G,UAAUiX,QAAU,WAC/BtS,KAAKmlB,eACLgmE,EAAO9vF,UAAUiX,QAAQhR,KAAKtB,OASlCo2G,EAAe/6G,UAAUmsF,kBAAoB,SAAUiF,EAASC,KAIhE0pB,EAAe/6G,UAAUC,KAAO,WAC5B0E,KAAKukB,cAMT6xF,EAAe/6G,UAAUkkC,cAAgB,WACrC,MAAO,YAKX62E,EAAe/6G,UAAUkpB,WAAa,WAClCvkB,KAAKgB,QAAQtE,iBAAiBsD,KAAK6vE,UAAW7vE,KAAKq2G,kBAKvDD,EAAe/6G,UAAU8pB,aAAe,WACpCnlB,KAAKgB,QAAQpE,oBAAoBoD,KAAK6vE,UAAW7vE,KAAKq2G,kBAO1DD,EAAea,iBAAmB,SAAUE,GACxC,GAAIA,KAAUn3G,KAAKo3G,YACf,OAAOp3G,KAAKo3G,YAAYD,GAE5B,IAAI75G,EAAO65G,EAAOvhG,cAAc1Y,MAAM,KAClCm6G,GACAd,QAAkC,IAAzBj5G,EAAKiB,QAAQ,OACtBspB,SAAoC,IAA1BvqB,EAAKiB,QAAQ,QACvBk4G,UAAsC,IAA3Bn5G,EAAKiB,QAAQ,SACxBupB,QAAS,MASb,OAPIxqB,EAAKA,EAAKb,OAAS,GAAGA,OAAS,GAAO66B,OAAOh6B,EAAKA,EAAKb,OAAS,IAChE46G,EAAQvvF,QAAUwP,OAAOh6B,EAAKA,EAAKb,OAAS,IAG5C46G,EAAQvvF,QAAUkvF,EAAiBM,WAAWh6G,EAAKA,EAAKb,OAAS,IAErEu6G,EAAiBI,YAAYD,GAAUE,EAChCA,GAGXjB,EAAekB,WAAa,SAAUC,GAClC,OAAOzvF,GAAQyvF,IAAWA,EAAO9sF,cAAcsiF,WAAW,IAE9DqJ,EAAegB,eACfvsB,IACI3jF,OACDkvG,EAAe/6G,UAAW,kBAAc,GAC3CwvF,IACI3jF,EAAS,UACVkvG,EAAe/6G,UAAW,iBAAa,GAC1CwvF,IACI/hF,KACDstG,EAAe/6G,UAAW,iBAAa,GAC1C+6G,EAAiBY,EAAmBnsB,IAChCzhF,GACDgtG,GAEH,IAAIY,GACNzwB,ICjME6jqB,GAAkC,WAClC,SAASA,EAAiB9pvB,EAAQiloB,GAC9BvloB,KAAKM,OAASA,EACdN,KAAKuloB,QAAUA,EACfvloB,KAAKqqvB,cAAe,EACpBrqvB,KAAKwjvB,cAAgBxjvB,KAAKuloB,QAAQ/jkB,WAAW,mBAC7CxhE,KAAKkpoB,gBAAkBlpoB,KAAKwjvB,cAAcv6G,YAAYnb,GAAWqb,SACjEnpoB,KAAKsqvB,cAAgBtqvB,KAAKwjvB,cAAcv6G,YAAYnb,GAAWtsgB,OAC/DxhH,KAAKuqvB,gBAAkB,IAAIzG,GAAgB9jvB,KAAKM,OAAQN,KAAKuloB,SA0RjE,OAxRA6kH,EAAiB/uvB,UAAUmvvB,mBAAqB,WAC5CxqvB,KAAKyqvB,eAAiBtpvB,EAAc,OAASkC,UXO3B,wBWNlBrD,KAAKgB,QAAQW,YAAY3B,KAAKyqvB,iBAElCL,EAAiB/uvB,UAAU0wG,OAAS,SAAU9rG,GAC1C,IAAIoD,EAEAA,EADmB,UAAnBpD,EAAKyqvB,UXUU,oBWPS,WAAnBzqvB,EAAKyqvB,UACEC,GAGA,GAEhB,IAAIC,EAAUprvB,EAAYS,EAAKyqvB,UAAY,gBAC3C1qvB,KAAK6qvB,YAAc5qvB,EAAKg1E,aACxBj1E,KAAKgB,QAAUG,EAAc,OAASmC,GAAIsnvB,EAASvnvB,UAAWA,EAAY,IAAMynvB,KAChF9qvB,KAAKwqvB,qBACLxqvB,KAAK4wqB,cAAc3wqB,EAAKg1E,aAAch1E,EAAK89B,MAC3C/9B,KAAKsqvB,cAAcx/nB,YAAY9qH,MAC/BA,KAAKtD,oBAET0tvB,EAAiB/uvB,UAAUu1qB,cAAgB,SAAUn2mB,EAAO18B,GACxD/9B,KAAK+qvB,aAAe,IAAIxH,GAAYvjvB,KAAKM,OAAQN,KAAKuloB,SACtDvloB,KAAK+qvB,aAAah/oB,QACdtxF,UAAW,QACXtT,OAAQnH,KAAKyqvB,eACbhwrB,MAAOA,EACP18B,KAAMA,IAEV/9B,KAAK+qvB,aAAav1qB,WAAWtjB,WAEjCk4rB,EAAiB/uvB,UAAUwd,YAAc,SAAUhY,GAC/C,IAAIkM,EACAC,EACAg+uB,EAAanlvB,EAAQhF,EAAEsG,OAAQ,kBAC/BA,EAAUssE,EAAMu3qB,GAA2BnqvB,EAAEsG,OAAf6jvB,EAClCrnvB,GAAU3D,KAAKyqvB,iBAAkBQ,KACjC,IAAIC,EAAkB/jvB,EAAOiN,UACzB+2uB,EAAkBtvvB,OAAO81E,YAAc9wE,EAAEuqvB,WAAW1+uB,IAEpDM,EADCk+uB,EAAkBrqvB,EAAEwqvB,QAAWxqvB,EAAE+nvB,UAC9BuC,EAAkBtqvB,EAAEyqvB,mBAAqBJ,EAAkBrqvB,EAAEwqvB,SAAWxqvB,EAAE+nvB,UAAY,EAEnF/nvB,EAAEwqvB,QAAUxqvB,EAAE0qvB,YAAeL,EAAkB/jvB,EAAOuqC,cAAiB7wC,EAAE+nvB,UAC5EuC,EAAkBtqvB,EAAEyqvB,mBAAqBJ,EAAkBrqvB,EAAEwqvB,SAAWlkvB,EAAOuqC,aAAe,EAG9F7wC,EAAEmM,EAGND,EADA5F,EAAOvC,YAAc/D,EAAE2qvB,SAClBrkvB,EAAOvC,YAAc,EAAM/D,EAAE2qvB,SAAW,EAAK3qvB,EAAEuqvB,WAAW5+uB,KAAOrF,EAAOgN,WAGzEtT,EAAEuqvB,WAAW5+uB,KAAOrF,EAAOgN,WAEnCnU,KAAKqnH,SAASnzG,SAASkC,EAAMrJ,EAAIlM,EAAE2qvB,SAAY3qvB,EAAEuqvB,WAAW3+uB,MAAS5L,EAAEuqvB,WAAW3+uB,MAAQ5L,EAAE2qvB,SAAWz+uB,EACvG/M,KAAKqnH,SAASnzG,SAASmC,EAAIrJ,EAC3BhN,KAAKqnH,SAASz7D,WACdvnD,GAAarE,KAAKyqvB,iBAAkBQ,MAExCb,EAAiB/uvB,UAAU+nH,eAAiB,SAAUviH,EAAG2hb,EAAU97a,GAC/D,IAAIqG,EACAC,EACAy+uB,EAAY5qvB,EAAEuqvB,WAAW1+uB,IACzBg/uB,EAAa7qvB,EAAE8qvB,QAAUF,EAAY5qvB,EAAEyqvB,kBACvCvnoB,KAEAA,EADa,aAAby+T,EACY9qa,GAAU7W,EAAE+9D,OAGZlnD,GAAU7W,EAAE+9D,MAAO/9D,EAAEwT,eAErC,IAAK,IAAIlY,EAAI,EAAGA,EAAI4nH,EAAUtnH,OAAQN,IAClC,OAAQ4nH,EAAU5nH,IACd,IAAK,MAEG6Q,EADa,aAAbw1a,EACI3hb,EAAE8qvB,QAGD9vvB,OAAO81E,YAAc85qB,EAAa5qvB,EAAEyqvB,kBAE7C,MACJ,IAAK,SA4BDt+uB,EA1BiB,aAAbw1a,EACa,WAAT97a,EACQ7F,EAAEmM,EAAInM,EAAE+nvB,UAAY,GAGvB/nvB,EAAE+qvB,cAAgBH,EAAY5qvB,EAAEyqvB,mBAAsBzqvB,EAAE+nvB,UACpD8C,EAAa7qvB,EAAE+qvB,aAAgB/qvB,EAAE+nvB,UAC1B8C,GAAc7qvB,EAAE+qvB,aAAeH,GAAc5qvB,EAAE+nvB,UAGhD8C,EAIJ7qvB,EAAE8qvB,SAAWF,EAAY5qvB,EAAEyqvB,mBAKjB,QAArBzqvB,EAAEsG,OAAOnE,QACDnC,EAAEuqvB,WAAWz+uB,OAAS9Q,OAAO81E,YAAe9wE,EAAE+nvB,UAAY,GAG1D/nvB,EAAEuqvB,WAAWz+uB,OAAS9Q,OAAO81E,YAAe9wE,EAAE+nvB,UAAY,EAI1E,MACJ,IAAK,QAEG77uB,EADS,WAATrG,EACI7F,EAAEgrvB,aAAehrvB,EAAE2qvB,SAAW3qvB,EAAEirvB,eAAiB,IAGjDjrvB,EAAEuqvB,WAAW3+uB,MAAQ5L,EAAE2qvB,SAE/B,MACJ,IAAK,OAEGz+uB,EADS,WAATrG,EACI,EAGA7F,EAAEuqvB,WAAW5+uB,KAKjCxM,KAAKqnH,SAASnzG,SAASkC,EAAI,GAAUpW,KAAKqnH,SAASnzG,SAASkC,EAC5DpW,KAAKqnH,SAASnzG,SAASmC,EAAI,GAAUrW,KAAKqnH,SAASnzG,SAASmC,EAC5DrW,KAAKqnH,SAASz7D,YAElBw+rB,EAAiB/uvB,UAAU+7d,UAAY,SAAUrqd,EAAGC,EAAG7F,GACnD,IAAI4kvB,EACAC,EACA5E,EAAYvrvB,OAAOsR,iBAAiBtR,OAAO6Q,IAAIlM,SAASuL,MACxDkgvB,EAAYzwuB,WAAW4ruB,EAAUp4oB,YAAY9xG,MAAM,MAAM,IAAMse,WAAW4ruB,EAAUl/hB,aAAahrN,MAAM,MAAM,IAC7G0uvB,EAAe/vvB,OAAOyd,YACtBuyuB,EAAchwvB,OAAO0d,WACrBjZ,EAASN,KAAKM,OAAOU,QACrBkrvB,GAAgBzuvB,EAAkBuC,KAAKM,OAAOmrpB,cAC9Cw7F,EAAWiF,GAAgBlsvB,KAAKM,OAAOg/oB,cAAc4nG,mBACrDiF,EAAcD,GAAgBlsvB,KAAKM,OAAOg/oB,cAAc6nG,yBACxDiF,EAAa,EAAkBnF,EAAWkF,EAAe,EAK7D,GAJAxovB,GAAU3D,KAAKgB,UXjGD,WWkGVwK,GAAQkb,UACR/iB,GAAU3D,KAAKM,OAAOmrpB,eXnGZ,WWqGVzrpB,KAAKM,OAAO+rvB,eAAe5stB,OAAQ,CAEnCsstB,GADI1sc,EAASr/S,KAAKkpoB,gBAAgBlM,WAAWsvH,eACvB36qB,YACtBq6qB,EAAkB3sc,EAAO/lS,gBAExB,CACD,IAAI+lS,EACJ0sc,GADI1sc,EAASx5S,EAAQsB,EAAQ,mBACHk4S,EAAOlzS,UAAY,EAC7C6/uB,EAAkB,EAAW3sc,EAAO3tQ,aAAe,EAElD1xC,KAAKM,OAAO8hvB,WAAW3itB,SACxBz/B,KAAKM,OAAOisvB,mBAAmBvsvB,KAAKM,OAAOk0E,gBAAgB/Z,OAC3Dz6D,KAAKM,OAAOksvB,mBAAmB,OAAQ,UAE3CpnvB,GAAQpF,KAAKgB,SAAUR,SAASuL,MAChC/L,KAAKqnH,SAASnzG,SAASkC,EAAIrJ,EAAI,GAC/B/M,KAAKqnH,SAASnzG,SAASmC,EAAIrJ,GAAMhN,KAAKM,OAAO+rvB,eAAqB,OAAI,GAAK,IAC3ErsvB,KAAKqnH,SAASz7D,WACd5rD,KAAKqnH,SAASpD,OACdjkH,KAAKuqvB,gBAAgBtG,iBACjBxpuB,UAAWza,KAAKyqvB,eAChBvG,cAAe,QACfzprB,MAAOz6D,KAAK6qvB,cAEhB,IAAI4B,GACA1/uB,EAAGA,EAAGC,EAAGA,EACT7F,OAAQA,EACRkkvB,QAASU,EACTR,WAAYS,EACZptrB,MAAO5+D,KAAKqnH,SAASrmH,QACrB4nvB,UAAW5ovB,KAAKqnH,SAASrmH,QAAQ0wC,aACjC85sB,SAAUxrvB,KAAKqnH,SAASrmH,QAAQ4D,YAChCyP,cAAe/T,EACfwrvB,eAAgBG,EAChBN,QAAS9vvB,OAAO81E,YAChBi6qB,aAAcA,EACdC,YAAaA,EACbT,WAAY9qvB,EAAOsL,wBACnB0/uB,kBAAmBc,GAEA,QAAnBjlvB,EAAOnE,SACPhD,KAAK6Y,YAAY4zuB,GAEhBzsvB,KAAKM,OAAO8hvB,WAAW3itB,QACxBz/B,KAAKojH,eAAeqpoB,EAAe,SAAU,IAEjDzsvB,KAAKojH,eAAeqpoB,EAAe,WAAczsvB,KAAKM,OAAO8hvB,WAAiB,OAAI,SAAW,IAC7FpivB,KAAKqnH,SAAS9lC,OACdl9E,GAAarE,KAAKgB,UXrJJ,WWsJdhB,KAAKqnH,SAASpD,MAAOxsF,KAAM,SAAUvsB,SAAU,MAC/CjF,EAAkBjG,KAAKgB,SACnBo9B,SAAUp+B,KAAKM,OAAOU,QAAQ4D,YAAc,OAEhDjB,GAAU3D,KAAKgB,UXlMF,cWmMbhB,KAAKqqvB,cAAe,GAExBD,EAAiB/uvB,UAAUk6d,UAAY,WAC/B/pd,GAAQkb,UACRriB,GAAarE,KAAKM,OAAOmrpB,eX/Jf,WWiKThupB,EAAkBuC,KAAKM,OAAOmrpB,eAAkBzrpB,KAAKM,OAAO8hvB,WAAW3itB,QACxEz/B,KAAKM,OAAOksvB,kBAAkBxsvB,KAAKM,OAAOk0E,gBAAgB/Z,OAE9Dz6D,KAAK0svB,mBACL1svB,KAAKqqvB,cAAe,GAKxBD,EAAiB/uvB,UAAUsxvB,aAAe,SAAU9uuB,EAAM5L,GACtDjS,KAAK+qvB,aAAav1qB,WAAW49N,SAASpzS,KAAK+qvB,aAAap4gB,SAAS90N,EAAM,WAAY5L,IAKvFm4uB,EAAiB/uvB,UAAUuxvB,gBAAkB,SAAU36uB,GACnDjS,KAAK+qvB,aAAav1qB,WAAWi+N,YAAYxhS,IAE7Cm4uB,EAAiB/uvB,UAAUqxvB,iBAAmB,WAC1C,IAAI1rvB,EAAUhB,KAAKqnH,SAASrmH,QACxBhB,KAAKqqvB,eACLrqvB,KAAKuqvB,gBAAgBvF,mBACrB3gvB,GAAarE,KAAKgB,UX/NT,cWgOTqE,EAAOrE,KAGfopvB,EAAiB/uvB,UAAUghJ,aAAe,SAAUp8I,GAQhD+zE,IANI/zE,KAAMA,EACNk0E,eAAgBn0E,KAAKuqvB,gBACrBjqvB,OAAQN,KAAKM,OACbg0E,WAAY1uE,EAAU,IAAM6vE,GAAqBz1E,KAAKgB,SACtDozE,QAASp0E,KAAK+qvB,aAAav1qB,WAAW/a,QAEhB,GACrBh1D,EAAO,qBAAsBzF,KAAKM,OAAOU,UAC1Cm0E,GAAqBn1E,KAAKM,OAAOusvB,uBAAwB7svB,KAAKM,OAAOusY,UAAU27W,cAAcC,gBAAgBC,kBAQrH0B,EAAiB/uvB,UAAUiX,QAAU,WAC7BtS,KAAKqnH,WAAarnH,KAAKqnH,SAASrgC,cAChChnF,KAAKqnH,SAAS/0G,UACdtS,KAAK0svB,oBAET1svB,KAAKpD,uBAETwtvB,EAAiB/uvB,UAAUqB,iBAAmB,WACtCsD,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAOslF,GAAGguiB,GAAgB5znB,KAAKsS,QAAStS,MACzCA,KAAKM,OAAO8hvB,WAAW3itB,QACvBz/B,KAAKM,OAAOslF,GAAG6jqB,GAAuBzpvB,KAAKq8I,aAAcr8I,QAGjEoqvB,EAAiB/uvB,UAAUuB,oBAAsB,WACzCoD,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAO0lF,IAAI4tiB,GAAgB5znB,KAAKsS,SACjCtS,KAAKM,OAAO8hvB,WAAW3itB,QACvBz/B,KAAKM,OAAO0lF,IAAIyjqB,GAAuBzpvB,KAAKq8I,gBAG7C+tmB,KCvSP0C,GAA+B,WAI/B,SAASA,EAAcxsvB,GACnBN,KAAKM,OAASA,EAoClB,OAlCAwsvB,EAAczxvB,UAAU8uS,UAAY,WAChCnqS,KAAKM,OAAOyN,Ob+DG,Ya/De/N,OAElC8svB,EAAczxvB,UAAUyvH,YAAc,SAAU7qH,GAC5CD,KAAKk+nB,SAASj+nB,EAAKe,SACnBhB,KAAK+9nB,cACL99nB,EAAKonH,SAAW,IAAI7F,GAAMvhH,EAAKe,SAC3ByiH,WAAY,WACZrB,SAAUpiH,KAAKM,OAAOU,QACtBU,KAAM1B,KAAKmqS,UAAU7uS,KAAK0E,QAE9BA,KAAKqnH,SAAWpnH,EAAKonH,SACrBpnH,EAAKonH,SAAS9lC,QAKlBurqB,EAAczxvB,UAAU0ioB,YAAc,WAClC/9nB,KAAKg9nB,WAAWl5nB,UAAUM,IZEP,sBYIvB0ovB,EAAczxvB,UAAU2hoB,SAAW,WAC/B,OAAOh9nB,KAAK+svB,YAMhBD,EAAczxvB,UAAU6ioB,SAAW,SAAU+B,GACzCjgoB,KAAK+svB,WAAa9sH,GAEf6sH,KCtCPE,GAA8B,WAC9B,SAASA,EAAa1svB,EAAQiloB,GAC1BvloB,KAAKM,OAASA,EACdN,KAAKuloB,QAAUA,EACfvloB,KAAKwjvB,cAAgBxjvB,KAAKuloB,QAAQ/jkB,WAAW,mBAC7CxhE,KAAKwjvB,cAAcl4G,YAAYxd,GAAWtsgB,MAAO,IAAIsroB,GAAc9svB,KAAKM,SACxEN,KAAKtD,mBA4QT,OA1QAswvB,EAAa3xvB,UAAU4xvB,YAAc,SAAUxyrB,GAC3C,IAAIyyrB,KAsBJ,OArBAzyrB,EAAMr7D,QAAQ,SAAUye,GACpB,GAAoB,iBAATA,EACP,OAAQA,EAAK09C,qBACT,IAAK,OACD2xrB,EAAe1ovB,KAAK,YACpB,MACJ,IAAK,OACD0ovB,EAAe1ovB,KAAK,YACpB,MACJ,IAAK,SACD0ovB,EAAe1ovB,KAAK,cACpB,MACJ,QACI0ovB,EAAe1ovB,KAAKqZ,QAK5BqvuB,EAAe1ovB,KAAKqZ,KAGrBqvuB,GAEXF,EAAa3xvB,UAAU8xvB,gBAAkB,SAAUC,EAASrvtB,EAAM08B,EAAO/zD,GACrE,OACIgkvB,UAAW0C,EACXn4qB,aAAcxa,EACd18B,KAAMA,EACNu9V,WAAY50X,IAGpBsmvB,EAAa3xvB,UAAUgyvB,YAAc,SAAU3C,EAAW3stB,EAAM08B,EAAO/zD,GACnE,GAAI+zD,EAAMh+D,OAAS,EACf,OAAO,KAEX,IAAI6wvB,EAAQ,IAAIlD,GAAiBpqvB,KAAKM,OAAQN,KAAKuloB,SAEnD,OADA+nH,EAAMvhpB,OAAO/rG,KAAKmtvB,gBAAgBzC,EAAW3stB,EAAM/9B,KAAKitvB,YAAYxyrB,GAAQ/zD,IACrE4mvB,GAEXN,EAAa3xvB,UAAUkyvB,wBAA0B,WAC7CvtvB,KAAKM,OAAOktvB,mBAAqBxtvB,KACjCA,KAAKkpoB,gBAAkBlpoB,KAAKwjvB,cAAcv6G,YAAYnb,GAAWqb,UAErE6jH,EAAa3xvB,UAAUoyvB,YAAc,SAAU5svB,GAC3Cb,KAAKM,OAAO8kN,QAAS,EACrBplN,KAAKM,OAAOotvB,OAAQ,GAExBV,EAAa3xvB,UAAUsyvB,oBAAsB,WACrC3tvB,KAAK4tvB,WAAa5tvB,KAAK6tvB,YAAc7tvB,KAAK8tvB,YAG9C9tvB,KAAK4tvB,UAAY5tvB,KAAKqtvB,YAAY,OAAQ,aAAcrtvB,KAAKM,OAAOytvB,qBAAqB56rB,KAAM26jB,GAAWkgI,aAC1GhuvB,KAAKwjvB,cAAcl4G,YAAYxd,GAAWkgI,YAAahuvB,KAAK4tvB,WAC5D5tvB,KAAK8tvB,UAAY9tvB,KAAKqtvB,YAAY,OAAQ,aAAcrtvB,KAAKM,OAAOytvB,qBAAqBthuB,KAAMqhmB,GAAWmgI,aAC1GjuvB,KAAKwjvB,cAAcl4G,YAAYxd,GAAWmgI,YAAajuvB,KAAK8tvB,WAC5D9tvB,KAAK6tvB,WAAa7tvB,KAAKqtvB,YAAY,QAAS,WAAYrtvB,KAAKM,OAAOytvB,qBAAqBz4jB,MAAOw4b,GAAWogI,cAC3GluvB,KAAKwjvB,cAAcl4G,YAAYxd,GAAWogI,aAAcluvB,KAAK6tvB,YACzD7tvB,KAAK4tvB,WACLrovB,GAAanB,IAAIpE,KAAK4tvB,UAAU5svB,QAAS,YAAahB,KAAKytvB,YAAaztvB,MAExEA,KAAK6tvB,YACLtovB,GAAanB,IAAIpE,KAAK6tvB,WAAW7svB,QAAS,YAAahB,KAAKytvB,YAAaztvB,MAEzEA,KAAK8tvB,WACLvovB,GAAanB,IAAIpE,KAAK8tvB,UAAU9svB,QAAS,YAAahB,KAAKytvB,YAAaztvB,QAGhFgtvB,EAAa3xvB,UAAU8yvB,yBAA2B,WAC9CxqvB,GAAU3D,KAAKM,OAAOU,UAAW46uB,KACjC57uB,KAAKouvB,YAAcpuvB,KAAKqtvB,YAAY,SAAU,WAAYrtvB,KAAKM,OAAOk0E,gBAAgB/Z,MAAOqzjB,GAAWugI,eACxGruvB,KAAKwjvB,cAAcl4G,YAAYxd,GAAWugI,cAAeruvB,KAAKouvB,aAC9D7ovB,GAAanB,IAAIpE,KAAKouvB,YAAYptvB,QAAS,YAAahB,KAAKytvB,YAAaztvB,OAE9EgtvB,EAAa3xvB,UAAUizvB,gBAAkB,SAAUvhvB,EAAGC,EAAG7F,GACrDnH,KAAKouvB,YAAYh3R,UAAUrqd,EAAGC,EAAG7F,IAErC6lvB,EAAa3xvB,UAAUkzvB,gBAAkB,WACjCvuvB,KAAKouvB,cAAgBr6sB,GAAS/zC,KAAKouvB,YAAYptvB,QAAS,kBACxDhB,KAAKouvB,YAAY74R,aAGzBy3R,EAAa3xvB,UAAUmzvB,kBAAoB,WACnCxuvB,KAAK4tvB,YAAc75sB,GAAS/zC,KAAK4tvB,UAAU5svB,QAAS,kBACpDhB,KAAK4tvB,UAAUr4R,YAEfv1d,KAAK8tvB,YAAc/5sB,GAAS/zC,KAAK8tvB,UAAU9svB,QAAS,kBACpDhB,KAAK8tvB,UAAUv4R,YAEfv1d,KAAK6tvB,aAAe95sB,GAAS/zC,KAAK6tvB,WAAW7svB,QAAS,kBACtDhB,KAAK6tvB,WAAWt4R,YAEhBv1d,KAAKM,OAAO8hvB,WAAW3itB,SAAWj0B,GAAQkb,UAC1C1mB,KAAKuuvB,mBAGbvB,EAAa3xvB,UAAUozvB,SAAW,SAAU1hvB,EAAGC,EAAG7F,GAC9C,IAAIpH,EAAQC,KACZE,aAAaF,KAAK0uvB,WAClB1uvB,KAAK0uvB,UAAY7yvB,OAAOsE,WAAW,WAAcJ,EAAMuuvB,gBAAgBvhvB,EAAGC,EAAG7F,IAAY,MAE7F6lvB,EAAa3xvB,UAAUuuN,eAAiB,SAAU/oN,GAC9C,IAAIZ,EAAOY,EAAEZ,KACT8xB,EAAQ/xB,KAAKM,OAAOquvB,WACpBxnvB,EAASlH,EAAKkH,OAClB,GAAI1J,EAAkBgI,EAAO,IAAMs2uB,GAAgBlgvB,OAAO6Q,IAAIlM,SAASuL,OAInE,GAHA/L,KAAKuuvB,kBACLvuvB,KAAK6L,QAAU5L,EAAK6L,MACpB9L,KAAKiM,Q3nBnDjB,SAA4BpL,EAAGwT,EAAeu6uB,GAQ1C,OANIA,EACI/yvB,OAAO81E,YAAct9D,EAAczI,wBAAwBc,IAAM7L,EAAEwzC,QAGnExzC,EAAEqL,M2nB6CaylE,CAAY1xE,EAAMD,KAAKM,OAAOU,QAAShB,KAAKM,OAAO+rvB,eAAe5stB,QACzD,aAApBt4B,EAAO+K,SACPlS,KAAKsuvB,gBAAgBtuvB,KAAK6L,QAAS7L,KAAKiM,QAAS9E,QAGjD,GAAuB,QAAnBA,EAAOnE,SAAwC,MAAnBmE,EAAOnE,QAAiB,CACpD,GAAIhD,KAAKM,OAAO8hvB,WAAWyM,aAAe98tB,EAAMs7X,UAC5C,OAEJrtZ,KAAKmH,OAASA,EACdnH,KAAKsuvB,gBAAgBtuvB,KAAK6L,QAAS7L,KAAKiM,QAAS9E,KAKjE6lvB,EAAa3xvB,UAAUskH,eAAiB,WAC/BliH,EAAkBgI,EAAO,IAAMs2uB,GAAgBlgvB,OAAO6Q,IAAIlM,YAC3DR,KAAKuuvB,mBAGbvB,EAAa3xvB,UAAUyzvB,4BAA8B,WAC5CrxvB,EAAkBgI,EAAO,IAAMs2uB,GAAgBlgvB,OAAO6Q,IAAIlM,YAC3DR,KAAKuuvB,mBAGbvB,EAAa3xvB,UAAUs/H,aAAe,SAAU95H,GAC5C,IAAIb,KAAKM,OAAO8hvB,WAAWyM,YAA3B,CAGA,IAAI5uvB,EAAOY,EAAEZ,KACbD,KAAKyuvB,SAASzuvB,KAAK6L,QAAS7L,KAAKiM,QAAShM,EAAKkH,UAEnD6lvB,EAAa3xvB,UAAU0zvB,qBAAuB,WAC1C,OAAO/uvB,KAAKouvB,aAAepuvB,KAAKouvB,YAAYrD,cAOhDiC,EAAa3xvB,UAAUiX,QAAU,WACzBtS,KAAK4tvB,YACLrovB,GAAahB,OAAOvE,KAAK4tvB,UAAU5svB,QAAS,YAAahB,KAAKytvB,aAC9DztvB,KAAK4tvB,UAAUt7uB,WAEftS,KAAK8tvB,YACLvovB,GAAahB,OAAOvE,KAAK8tvB,UAAU9svB,QAAS,YAAahB,KAAKytvB,aAC9DztvB,KAAK8tvB,UAAUx7uB,WAEftS,KAAK6tvB,aACLtovB,GAAahB,OAAOvE,KAAK6tvB,WAAW7svB,QAAS,YAAahB,KAAKytvB,aAC/DztvB,KAAK6tvB,WAAWv7uB,WAEhBtS,KAAKouvB,cACL7ovB,GAAahB,OAAOvE,KAAKouvB,YAAYptvB,QAAS,YAAahB,KAAKytvB,aAChEztvB,KAAKouvB,YAAY97uB,WAErBtS,KAAKpD,uBAETowvB,EAAa3xvB,UAAU2zvB,sBAAwB,WAC3ChvvB,KAAKM,OAAOslF,GdnJC,UcmJkB5lF,KAAK4pN,eAAgB5pN,MACpDA,KAAKM,OAAOslF,GAAGmkqB,GAAkB/pvB,KAAK8uvB,4BAA6B9uvB,MACnEA,KAAKM,OAAOslF,GAAGqpqB,GAAgBjvvB,KAAK2/G,eAAgB3/G,MACpDA,KAAKM,OAAOslF,Gd1JD,Qc0JkB5lF,KAAK26H,aAAc36H,MAChDA,KAAKM,OAAOslF,GAAGokqB,GAA4BhqvB,KAAK4pN,eAAgB5pN,MAChEA,KAAKM,OAAOslF,GAAG6hqB,GAA4BznvB,KAAKmuvB,yBAA0BnuvB,OAE9EgtvB,EAAa3xvB,UAAU6zvB,wBAA0B,WAC7ClvvB,KAAKM,OAAO0lF,Id3JC,Uc2JmBhmF,KAAK4pN,gBACrC5pN,KAAKM,OAAO0lF,IAAI+jqB,GAAkB/pvB,KAAK8uvB,6BACvC9uvB,KAAKM,OAAO0lF,IAAIipqB,GAAgBjvvB,KAAK2/G,gBACrC3/G,KAAKM,OAAO0lF,IdlKD,QckKmBhmF,KAAK26H,cACnC36H,KAAKM,OAAO0lF,IAAIgkqB,GAA4BhqvB,KAAK4pN,gBACjD5pN,KAAKM,OAAO0lF,IAAIyhqB,GAA4BznvB,KAAKmuvB,2BAErDnB,EAAa3xvB,UAAUo+uB,eAAiB,SAAUx5uB,GAC1CD,KAAK4tvB,YAAc75sB,GAAS/zC,KAAK4tvB,UAAU5svB,QAAS,kBACpDhB,KAAK4tvB,UAAUr4R,YAEfv1d,KAAK6tvB,aAAe95sB,GAAS/zC,KAAK6tvB,WAAW7svB,QAAS,kBACtDhB,KAAK6tvB,WAAWt4R,aAGxBy3R,EAAa3xvB,UAAUqB,iBAAmB,WAClCsD,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAOslF,GAAGm1jB,GAAmB/6oB,KAAKutvB,wBAAyBvtvB,MAChEA,KAAKM,OAAOslF,GAAGmkqB,GAAkB/pvB,KAAK2tvB,oBAAqB3tvB,MAC3DA,KAAKM,OAAOslF,GAAG6jqB,GAAuBzpvB,KAAKy5uB,eAAgBz5uB,MACvDA,KAAKM,OAAO8hvB,WAAW3itB,SAAWj0B,GAAQkb,UAC1C1mB,KAAKgvvB,wBAEThvvB,KAAKM,OAAOslF,GAAG8ljB,GAAqB1roB,KAAKwnF,kBAAmBxnF,MACJ,SAApDA,KAAKM,OAAOytvB,qBAAqBnsoB,gBACjC5hH,KAAKM,OAAOslF,Gd1FJ,Sc0FsB5lF,KAAKwuvB,kBAAmBxuvB,MAE1DA,KAAKM,OAAOslF,GAAGkkqB,GAAoB9pvB,KAAKwuvB,kBAAmBxuvB,MAC3DA,KAAKM,OAAOslF,GAAGq/pB,GAAwBjlvB,KAAKklvB,kBAAmBllvB,MAC/DA,KAAKM,OAAOslF,GAAGguiB,GAAgB5znB,KAAKsS,QAAStS,MAC7CA,KAAKM,OAAOslF,GAAGqpqB,GAAgBjvvB,KAAKyje,UAAWzje,QAEnDgtvB,EAAa3xvB,UAAUooe,UAAY,SAAU5ie,GACzC,IAAIZ,EAAOY,EAAEZ,KACM,IAAfA,EAAK02G,OAA8B,KAAf12G,EAAK02G,OACrB32G,KAAK6tvB,aAAe95sB,GAAS/zC,KAAK6tvB,WAAW7svB,QAAS,kBACtDhB,KAAK6tvB,WAAWt4R,aAI5By3R,EAAa3xvB,UAAU6pvB,kBAAoB,WACvCllvB,KAAKwuvB,oBACLxuvB,KAAKuuvB,mBAETvB,EAAa3xvB,UAAUuB,oBAAsB,WACrCoD,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAO0lF,IAAI+0jB,GAAmB/6oB,KAAKutvB,yBACxCvtvB,KAAKM,OAAO0lF,IAAI+jqB,GAAkB/pvB,KAAK2tvB,qBACvC3tvB,KAAKM,OAAO0lF,IAAIyjqB,GAAuBzpvB,KAAKy5uB,gBACxCz5uB,KAAKM,OAAO8hvB,WAAW3itB,SAAWj0B,GAAQkb,UAC1C1mB,KAAKkvvB,0BAETlvvB,KAAKM,OAAO0lF,IAAI0ljB,GAAqB1roB,KAAKwnF,mBACc,SAApDxnF,KAAKM,OAAOytvB,qBAAqBnsoB,gBACjC5hH,KAAKM,OAAO0lF,IdzHJ,ScyHuBhmF,KAAKwuvB,mBAExCxuvB,KAAKM,OAAO0lF,IAAI8jqB,GAAoB9pvB,KAAKwuvB,mBACzCxuvB,KAAKM,OAAO0lF,IAAI4tiB,GAAgB5znB,KAAKsS,SACrCtS,KAAKM,OAAO0lF,IAAIi/pB,GAAwBjlvB,KAAKklvB,mBAC7CllvB,KAAKM,OAAO0lF,IAAIipqB,GAAgBjvvB,KAAKyje,aAMzCupR,EAAa3xvB,UAAUmsF,kBAAoB,SAAU3mF,GAC7CA,EAAEswF,SAAWnxF,KAAKu/B,iBAGlBv/B,KAAKouvB,cACL/pvB,GAAarE,KAAKM,OAAOU,UAAW46uB,KACpC57uB,KAAKkvvB,0BACLlvvB,KAAKuuvB,kBACDvuvB,KAAKM,OAAO8hvB,WAAW3itB,SAAWj0B,GAAQkb,WAC1C/iB,GAAU3D,KAAKM,OAAOU,UAAW46uB,KACjC57uB,KAAKgvvB,2BAOjBhC,EAAa3xvB,UAAUkkC,cAAgB,WACnC,MAAO,gBAEJyttB,KCrRPh7jB,GAAuB,WACvB,SAASA,EAAM1xL,EAAQghE,GACnBthE,KAAKM,OAASA,EACdN,KAAKuloB,QAAUjkkB,EACfthE,KAAKwjvB,cAAgBxjvB,KAAKuloB,QAAQ/jkB,WAAW,mBAC7CxhE,KAAKtD,mBA6GT,OA3GAs1L,EAAM32L,UAAU0ovB,mBAAqB,WACjC/jvB,KAAKkpoB,gBAAkBlpoB,KAAKwjvB,cAAcv6G,YAAYnb,GAAWqb,SACjEnpoB,KAAK0lvB,UAAY1lvB,KAAKkpoB,gBAAgBu8G,gBAE1CzzjB,EAAM32L,UAAU8zvB,YAAc,WAC1BnvvB,KAAK+jvB,qBACL/jvB,KAAKgB,QAAUG,EAAc,QAAUkC,Ud0ExB,0BczEfrD,KAAKkpoB,gBAAgBlM,WAAW3onB,cAAc1S,YAAY3B,KAAKgB,SAC/DhB,KAAKovvB,eAC0B,IAA3BpvvB,KAAKM,OAAOuuI,WACZ7uI,KAAKqvvB,oBAAoBrvvB,KAAKsvvB,aAGtCt9jB,EAAM32L,UAAU+zvB,YAAc,WAC1B,IAAIj4N,EAAWn3hB,KAAK0lvB,UAAU7puB,YAAY3L,OAC1ClQ,KAAKsvvB,WAAan4N,EAAS16hB,OAC3B,IAAI2tC,GAAoC,IAA3BpqC,KAAKM,OAAOuuI,UAAmB7uI,KAAKsvvB,WAAatvvB,KAAKsvvB,WAAa,MAAQtvvB,KAAKM,OAAOuuI,UACpG7uI,KAAKgB,QAAQgB,UAAYooC,GAE7B4nJ,EAAM32L,UAAUg0vB,oBAAsB,SAAUC,GAC5C,IAAIriC,EAAcqiC,EAAatvvB,KAAKM,OAAOuuI,UAAa,IACpDo+kB,EAAa,IACbjttB,KAAKgB,QAAQ8C,UAAUS,Od4DV,ac3DbvE,KAAKgB,QAAQ8C,UAAUS,Od6DZ,Yc3DN0otB,EAAa,IAAMA,GAAc,IACtCjttB,KAAKgB,QAAQ8C,UAAUS,Od0DZ,WczDXvE,KAAKgB,QAAQ8C,UAAUM,IduDV,ccrDR6otB,EAAa,KAClBjttB,KAAKgB,QAAQ8C,UAAUS,OdoDV,acnDbvE,KAAKgB,QAAQ8C,UAAUM,IdqDZ,aclDnB4tL,EAAM32L,UAAU62D,QAAU,WACtBlyD,KAAKovvB,eAC0B,IAA3BpvvB,KAAKM,OAAOuuI,WACZ7uI,KAAKqvvB,oBAAoBrvvB,KAAKsvvB,aAGtCt9jB,EAAM32L,UAAUk0vB,SAAW,SAAU1uvB,GACjC,GAAIb,KAAKM,OAAOkvvB,cAAe,CAI3B,IAAK,IAHDxuvB,EAAUH,EAAEZ,KAAKmuG,cAAcvyF,YAAY3L,OAC3C+kD,GAAS,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IACpCw6rB,OAAW,EACNtzvB,EAAI,EAAGA,GAAK84D,EAAMx4D,OAAS,EAAGN,IACnC,GAAI0E,EAAEZ,KAAK02G,QAAU1hD,EAAM94D,GAAI,CAC3B,GAAI0E,EAAEZ,KAAK4nB,SAA4B,KAAjBhnB,EAAEZ,KAAK02G,MACzB,OAEC,GAAqB,KAAjB91G,EAAEZ,KAAK02G,MAEZ,YADA84oB,EAAWx6rB,EAAM94D,IAKxB6E,EAAQvE,QAAUuD,KAAKM,OAAOuuI,YAAwC,IAA3B7uI,KAAKM,OAAOuuI,WAAqBhuI,EAAEZ,KAAK02G,QAAU84oB,GAC9F5uvB,EAAEZ,KAAKulB,mBASnBwsK,EAAM32L,UAAUiX,QAAU,WACtBtS,KAAKpD,uBAETo1L,EAAM32L,UAAUgmH,OAAS,SAAUxgH,GAC/Bb,KAAKgB,QAAQ0D,MAAM4xC,QAAwB,eAAbz1C,EAAEwwF,OAA2B,OAAS,SAExE2gG,EAAM32L,UAAUqB,iBAAmB,WAC3BsD,KAAKM,OAAO0mF,aAGZhnF,KAAKM,OAAOkvvB,gBACZxvvB,KAAKM,OAAOslF,GAAGm1jB,GAAmB/6oB,KAAKmvvB,YAAanvvB,MACpDA,KAAKM,OAAOslF,GfxDL,QewDsB5lF,KAAKkyD,QAASlyD,MAC3CA,KAAKM,OAAOslF,GAAGqpqB,GAAgBjvvB,KAAKuvvB,SAAUvvvB,MAC9CA,KAAKM,OAAOslF,Gf0BL,Qe1BsB5lF,KAAKkyD,QAASlyD,MAC3CA,KAAKM,OAAOslF,GAAGmkqB,GAAkB/pvB,KAAKkyD,QAASlyD,MAC/CA,KAAKM,OAAOslF,GAAGguiB,GAAgB5znB,KAAKsS,QAAStS,MAC7CA,KAAKM,OAAOslF,GAAG8pqB,GAAmB1vvB,KAAKqhH,OAAQrhH,MAC/CA,KAAKM,OAAOslF,GAAG+pqB,GAAqB3vvB,KAAKqhH,OAAQrhH,QAGzDgyL,EAAM32L,UAAUuB,oBAAsB,WAC9BoD,KAAKM,OAAO0mF,cAGhB3hF,EAAOrF,KAAKgB,SACZhB,KAAKM,OAAO0lF,IAAI+0jB,GAAmB/6oB,KAAKmvvB,aACxCnvvB,KAAKM,OAAO0lF,IfvED,QeuEmBhmF,KAAKkyD,SACnClyD,KAAKM,OAAO0lF,IAAIipqB,GAAgBjvvB,KAAKuvvB,UACrCvvvB,KAAKM,OAAO0lF,IfWD,QeXmBhmF,KAAKkyD,SACnClyD,KAAKM,OAAO0lF,IAAI+jqB,GAAkB/pvB,KAAKkyD,SACvClyD,KAAKM,OAAO0lF,IAAI4tiB,GAAgB5znB,KAAKsS,SACrCtS,KAAKM,OAAO0lF,IAAI0pqB,GAAmB1vvB,KAAKqhH,QACxCrhH,KAAKM,OAAO0lF,IAAI2pqB,GAAqB3vvB,KAAKqhH,UAK9C2wE,EAAM32L,UAAUkkC,cAAgB,WAC5B,MAAO,SAEJyyJ,KChHP49jB,GAAkC,WAClC,SAASA,EAAiBtvvB,EAAQghE,GAC9BthE,KAAKM,OAASA,EACdN,KAAKuloB,QAAUjkkB,EACfthE,KAAKwjvB,cAAgBxjvB,KAAKuloB,QAAQ/jkB,WAAW,mBAC7CxhE,KAAKtD,mBA+ET,OA7EAkzvB,EAAiBv0vB,UAAU0ovB,mBAAqB,WAC5C/jvB,KAAK6jvB,gBAAkB7jvB,KAAKwjvB,cAAcv6G,YAAYnb,GAAW5jV,UAErE0ld,EAAiBv0vB,UAAUw0vB,uBAAyB,SAAU5vvB,GAC1D,IAAIF,EAAQC,KACZA,KAAK+jvB,qBACL,IAAI+L,EAAW7vvB,EAAKikvB,cAChBC,EAAYlkvB,EAAKwa,UACrBuiuB,GAAc59uB,QAAQ,SAAUye,GAC5B,IAAoC,IAAhCw1D,GAASx1D,EAAM5d,EAAKw6D,OACpB,OAAQ58C,GACJ,IAAK,YACD,IAAImtY,EAAWjrZ,EAAMO,OAAOojvB,QAAU,IAAMoM,EAAW,oBACnDC,EAAWvvvB,SAASW,cAAc,SACtC4uvB,EAASzsvB,GAAK0nZ,EACd+kW,EAASjsvB,UAAUM,If2FR,2Be1FX5D,SAASuL,KAAKpK,YAAYouvB,GAC1B,IAAIvwjB,GACAvsL,SAAUgquB,GAAMp/tB,GAAM63B,KAAO,IAAMo1sB,GAA2B,WAC9D9tvB,MAAOigvB,GAAMp/tB,GAAM7gB,MACnBwqC,QAASy1sB,GAAMp/tB,GAAM2pB,QACrBgsC,WAAYypqB,GAAMp/tB,GAAM21D,WACxBxyE,QAASyE,EAAO,IAAM1F,EAAMO,OAAOojvB,QAAU,IAAMoM,EAAW,aAAc3L,GAC5Eh9uB,OAAS,IAAM6jZ,GAEnBjrZ,EAAMiwvB,gBAAkBjwvB,EAAM8jvB,gBAAgBlK,kBAAkBn6iB,EAAQ,aACxEz/L,EAAMkwvB,kBAAoBlwvB,EAAM8jvB,gBAAgBjB,0BAA0BpjjB,EAAQ,YAAaz/L,EAAMiwvB,iBACrG,MACJ,IAAK,kBACDhlW,EAAWjrZ,EAAMO,OAAOojvB,QAAU,IAAMoM,EAAW,0BACnD,IAAItgV,EAAWhva,SAASW,cAAc,SACtCqua,EAASlsa,GAAK0nZ,EACdwkB,EAAS1ra,UAAUM,If4EF,iCe3EjB5D,SAASuL,KAAKpK,YAAY6ta,GAC1BhwO,GACIvsL,SAAUgquB,GAAMp/tB,GAAM63B,KAAO,IAAMo1sB,GAA2B,WAC9D9tvB,MAAOigvB,GAAMp/tB,GAAM7gB,MACnBwqC,QAASy1sB,GAAMp/tB,GAAM2pB,QACrBgsC,WAAYypqB,GAAMp/tB,GAAM21D,WACxBxyE,QAASyE,EAAO,IAAM1F,EAAMO,OAAOojvB,QAAU,IAAMoM,EAAW,mBAAoB3L,GAClFh9uB,OAAS,IAAM6jZ,GAEnBjrZ,EAAMmwvB,sBAAwBnwvB,EAAM8jvB,gBAAgBlK,kBAAkBn6iB,EAAQ,mBAC9Ez/L,EAAMowvB,wBAA0BpwvB,EAAM8jvB,gBAAgBjB,0BAA0BpjjB,EAAQ,kBAAmBz/L,EAAMmwvB,2BAMrIN,EAAiBv0vB,UAAUiX,QAAU,WACjCtS,KAAKpD,sBACLoD,KAAK85uB,sBAET8V,EAAiBv0vB,UAAUy+uB,mBAAqB,WACxC95uB,KAAKgwvB,kBAAoBhwvB,KAAKgwvB,gBAAgBhpqB,aAC9ChnF,KAAKgwvB,gBAAgB19uB,UAErBtS,KAAKkwvB,wBAA0BlwvB,KAAKkwvB,sBAAsBlpqB,aAC1DhnF,KAAKkwvB,sBAAsB59uB,UAE3BtS,KAAKiwvB,oBAAsBjwvB,KAAKiwvB,kBAAkBjpqB,aAClDhnF,KAAKiwvB,kBAAkB39uB,UAEvBtS,KAAKmwvB,0BAA4BnwvB,KAAKmwvB,wBAAwBnpqB,aAC9DhnF,KAAKmwvB,wBAAwB79uB,WAGrCs9uB,EAAiBv0vB,UAAUqB,iBAAmB,WAC1CsD,KAAKM,OAAOslF,GAAGwqqB,GAA8BpwvB,KAAK6vvB,uBAAwB7vvB,MAC1EA,KAAKM,OAAOslF,GAAGguiB,GAAgB5znB,KAAKsS,QAAStS,MAC7CA,KAAKM,OAAOslF,GAAGujqB,GAA2BnpvB,KAAK85uB,mBAAoB95uB,OAEvE4vvB,EAAiBv0vB,UAAUuB,oBAAsB,WAC7CoD,KAAKM,OAAO0lF,IAAIoqqB,GAA8BpwvB,KAAK6vvB,wBACnD7vvB,KAAKM,OAAO0lF,IAAI4tiB,GAAgB5znB,KAAKsS,SACrCtS,KAAKM,OAAO0lF,IAAImjqB,GAA2BnpvB,KAAK85uB,qBAE7C8V,KCzFPS,GAAmC,WACnC,SAASA,KAmGT,OAjGAA,EAAkBh1vB,UAAUi1vB,cAAgB,SAAUhuU,EAAUxuZ,GAC5D,OAAOwuZ,EAAStlb,MAAMg6B,OAAO,EAAGlD,GAAO52B,MAAM,MAAMT,QAEvD4zvB,EAAkBh1vB,UAAUkmqB,gBAAkB,SAAUj/O,GACpD,IAAI/kb,EAAQ+kb,EAAS38Z,eACjB9G,EAAMyja,EAASz8Z,aACnB,OAAOy8Z,EAAStlb,MAAMknB,UAAU3mB,EAAOshB,IAE3CwxuB,EAAkBh1vB,UAAUk1vB,cAAgB,SAAUvzvB,GAClD,OAAOA,EAAME,MAAM,OAEvBmzvB,EAAkBh1vB,UAAUm1vB,gBAAkB,SAAUluU,GAGpD,OAFYtib,KAAKuwvB,cAAcjuU,EAAStlb,OAC5BgD,KAAKswvB,cAAchuU,EAAUA,EAAS38Z,gBAC7B,IAEzB0quB,EAAkBh1vB,UAAUo1vB,QAAU,SAAUnuU,EAAUrwa,GAEtD,OADYjS,KAAKuwvB,cAAcjuU,EAAStlb,OAC3BiV,IAEjBo+uB,EAAkBh1vB,UAAUq1vB,wBAA0B,SAAUpuU,GAC5D,IAAI5iM,EAAQ1/O,KAAKuwvB,cAAcjuU,EAAStlb,OACpCO,EAAQyC,KAAKswvB,cAAchuU,EAAUA,EAAS38Z,gBAC9C9G,EAAM7e,KAAKswvB,cAAchuU,EAAUA,EAASz8Z,cAC5Cy5C,EAAUt/D,KAAKuhqB,gBAAgBj/O,GAAUplb,MAAM,MAC/CyzvB,KACAC,EAAelxgB,EAAMniP,EAAQ,GAC7BszvB,EAAcnxgB,EAAMr+O,MAAM,EAAG9D,EAAQ,GAAG4jB,KAAK,IAAI1kB,OACjDssV,KAOJ,GANAA,EAAWj7R,KAAOvwD,EAAQ,EAC1BwrV,EAAWxrV,MAAQszvB,EAAc9na,EAAWj7R,KAC5Ci7R,EAAWlqU,IAAuB,KAAjB+xuB,EAAsB7na,EAAWxrV,MAC9CqzvB,EAAan0vB,OAAS,EAAIssV,EAAWxrV,MAAQqzvB,EAAan0vB,OAC9DssV,EAAWt8T,KAAOmkuB,EAClBD,EAAensvB,KAAKukV,GAChBzpR,EAAQ7iE,OAAS,EAAG,CACpB,IAAK,IAAIN,EAAI,EAAGA,EAAImjE,EAAQ7iE,OAAS,EAAGN,IAAK,CACzC,IAAIw7B,KACJA,EAAOm2B,KAAO6isB,EAAex0vB,EAAI,GAAG2xD,KAAO,EAC3Cn2B,EAAOp6B,OAAQ+hE,EAAQnjE,GAAYw0vB,EAAex0vB,EAAI,GAAG0iB,KACzD8Y,EAAO9Y,IAAM8Y,EAAOp6B,MAAQ+hE,EAAQnjE,GAAGM,OAAS,EAChDk7B,EAAOlL,KAAO6yC,EAAQnjE,GACtBw0vB,EAAensvB,KAAKmzB,GAExB,IAAIgpB,KACJA,EAAUmN,KAAO6isB,EAAeA,EAAel0vB,OAAS,GAAGqxD,KAAO,EAClEnN,EAAUpjD,MAAQozvB,EAAeA,EAAel0vB,OAAS,GAAGoiB,IAC5D8hC,EAAU9hC,IAAM8hC,EAAUpjD,MAAQmiP,EAAM7gO,EAAM,GAAGpiB,OAAS,EAC1DkkD,EAAUl0B,KAAOizN,EAAM7gO,EAAM,GAC7B8xuB,EAAensvB,KAAKm8C,GAExB,OAAOgwsB,GAEXN,EAAkBh1vB,UAAU+uN,aAAe,SAAUk4N,EAAU/kb,EAAOshB,GAClEyja,EAASv8Z,kBAAkBxoB,EAAOshB,GAClCyja,EAASpgb,SAEbmuvB,EAAkBh1vB,UAAUoyF,KAAO,SAAUlwF,EAAOshB,GAChD7e,KAAK2lB,eAAiBpoB,EACtByC,KAAK6lB,aAAehH,GAExBwxuB,EAAkBh1vB,UAAUwyF,QAAU,SAAUijqB,GAC5C9wvB,KAAKoqN,aAAa0miB,EAAU9wvB,KAAK2lB,eAAgB3lB,KAAK6lB,eAE1DwquB,EAAkBh1vB,UAAU01vB,YAAc,SAAUjjsB,EAAMtmB,GACtD,IAAI8zW,GAAU,EACd,GAAIxtV,EAAM,CAINwtV,GAHUxtV,EAAK59C,SAAWs3B,EAAQt3B,OAC9B,IAAI8T,OAAO,KAAOhkB,KAAKgxvB,mBAAmBxptB,EAAQt3B,QAAU,IAAK,OACjE,IAAI8T,OAAO,KAAOhkB,KAAKgxvB,mBAAmBxptB,GAAW,IAAK,QAChDrkC,KAAK2qD,EAAK59C,QAE5B,OAAOorY,GAEX+0W,EAAkBh1vB,UAAU21vB,mBAAqB,SAAUh0vB,GACvD,OAAOA,EAAMuS,QAAQ,6CAA8C,SAEvE8gvB,EAAkBh1vB,UAAUi7H,QAAU,SAAUh3D,EAAS80B,GAErD,IAAK,IAAIj4F,EAAI,EAAGA,EAAImjE,EAAQ7iE,OAAQN,IAChC,GAAI,IAAI6nB,OAAOowE,EAAO,OAAOjxF,KAAKm8D,EAAQnjE,GAAGswB,MACzC,OAAO,EAGf,OANc,GAQlB4juB,EAAkBh1vB,UAAU41vB,SAAW,SAAUC,GAE7C,IAAI98pB,EAAQ,MADZ88pB,EAASlxvB,KAAKgxvB,mBAAmBE,IACL,OAASA,EAAOhhvB,OAAS,IACrD,OAAO,IAAI8T,OAAOowE,IAEtBi8pB,EAAkBh1vB,UAAU81vB,wBAA0B,SAAU7uU,GAI5D,OAAS/kb,MAHG+kb,EAAS38Z,eAGE9G,IAFbyja,EAASz8Z,aAEc4G,KADjBzsB,KAAKuhqB,gBAAgBj/O,KAGlC+tU,KCnGPe,GAAuC,WACvC,SAASA,EAAsB9wvB,GAC3BN,KAAKqxvB,eACD3itB,MAAM,EACN6C,QAAQ,EACRq0jB,WAAW,EACXD,aAAa,EACbp7G,eAAe,EACfqzP,aAAa,EACbgB,WAAW,EACX0S,YAAY,EACZ3T,eAAe,EACfzoe,WAAW,EACXgoe,WAAY,KACZM,gBAAiB,KACjB3ka,UAAW,KACX0ka,SAAU,KACVn2U,SAAU,KACVl1R,QAAS,MAEblyI,KAAK4vE,UAAY,IAAIygrB,GACrBrwvB,KAAKM,OAASA,EACdN,KAAKgB,QAAUhB,KAAKM,OAAO21E,cAAcwvqB,eACzCzlvB,KAAKtD,mBA2DT,OAzDA00vB,EAAsB/1vB,UAAUqB,iBAAmB,WAC/CsD,KAAKM,OAAOslF,GAAGsljB,GAAuBlroB,KAAKuxvB,iBAAkBvxvB,MAC7DA,KAAKM,OAAOslF,GAAGguiB,GAAgB5znB,KAAKpD,oBAAqBoD,OAE7DoxvB,EAAsB/1vB,UAAUuB,oBAAsB,WAClDoD,KAAKM,OAAO0lF,IAAIkljB,GAAuBlroB,KAAKuxvB,kBAC5CvxvB,KAAKM,OAAO0lF,IAAI4tiB,GAAgB5znB,KAAKuxvB,mBAEzCH,EAAsB/1vB,UAAUk2vB,iBAAmB,SAAUtxvB,GACzD,IAAIuxvB,EAAexxvB,KAAK4vE,UAAU8grB,wBAAwB1wvB,KAAKgB,SAC/DhB,KAAKqxvB,eACDzT,YAAa59uB,KAAKyxvB,eAAeD,EAAc,MAC/C7T,cAAe39uB,KAAKyxvB,eAAeD,EAAc,MACjDt/mB,QAASlyI,KAAKwtkB,cAAcgkL,GAC5B9itB,KAAM1uC,KAAKM,OAAOusY,UAAU27W,cAAckJ,mBAAmBC,iBAAiB,QAC9EpgtB,OAAQvxC,KAAKM,OAAOusY,UAAU27W,cAAckJ,mBAAmBC,iBAAiB,UAChFL,WAAYtxvB,KAAKM,OAAOusY,UAAU27W,cAAckJ,mBAAmBC,iBAAiB,cACpFpnQ,cAAevqf,KAAKM,OAAOusY,UAAU27W,cAAckJ,mBAAmBC,iBAAiB,iBACvF/rJ,UAAW5lmB,KAAKM,OAAOusY,UAAU27W,cAAckJ,mBAAmBC,iBAAiB,aACnFhsJ,YAAa3lmB,KAAKM,OAAOusY,UAAU27W,cAAckJ,mBAAmBC,iBAAiB,eACrF/S,UAAW5+uB,KAAKM,OAAOusY,UAAU27W,cAAckJ,mBAAmBC,iBAAiB,cAEvF3xvB,KAAKM,OAAOyN,OAAO07uB,GAAuBzpvB,KAAKqxvB,gBAEnDD,EAAsB/1vB,UAAUo2vB,eAAiB,SAAU/xgB,EAAOh5O,GAE9D,IAAK,IADD2zlB,GAAU,EACLl+lB,EAAI,EAAGA,EAAIujP,EAAMjjP,OAAQN,IAC9B,IAAK6D,KAAK4vE,UAAUmhrB,YAAYrxgB,EAAMvjP,GAAGswB,KAAMzsB,KAAKM,OAAOusY,UAAU+kX,SAASlrvB,IAAQ,CAClF2zlB,GAAU,EACV,MAGR,OAAOA,GAEX+2J,EAAsB/1vB,UAAUmykB,cAAgB,SAAU9tV,GAKtD,IAAK,IAJD1jN,EAAS,IACT1+B,EAAOgB,OAAOhB,KAAK0C,KAAKM,OAAOusY,UAAUglX,YAEzCC,EAA0B,aADd9xvB,KAAKgB,QAAQ+wvB,mBACcrygB,EAAM,GAAGjzN,KAAOizN,EAAMA,EAAMjjP,OAAS,GAAGgwB,KAC1EtwB,EAAI,EAAGA,EAAImB,EAAKb,OAAQN,IAAK,CAClC,GAAgB,QAAZmB,EAAKnB,IAAgB6D,KAAK4vE,UAAUmhrB,YAAYe,EAAW9xvB,KAAKM,OAAOusY,UAAUglX,WAAWv0vB,EAAKnB,KAAM,CACvG6/B,EAAS1+B,EAAKnB,GACd,MAEC,GAAgB,QAAZmB,EAAKnB,GAAc,CACxB,IAAI61vB,EAAchyvB,KAAK4vE,UAAU2grB,cAAcvwvB,KAAKgB,QAAQhE,OACxDi1vB,EAAgBD,EAAYtygB,EAAM,GAAG5xL,KAAO,GAC5CoksB,EAAeF,EAAYtygB,EAAMjjP,OAAS,GAC9C,GAAIuD,KAAK4vE,UAAUmhrB,YAAYkB,EAAejyvB,KAAKM,OAAOusY,UAAUglX,WAAWv0vB,EAAKnB,IAAIe,MAAM,MAAM,KAChG8C,KAAK4vE,UAAUmhrB,YAAYmB,EAAclyvB,KAAKM,OAAOusY,UAAUglX,WAAWv0vB,EAAKnB,IAAIe,MAAM,MAAM,IAAK,CACpG8+B,EAAS1+B,EAAKnB,GACd,QAIZ,OAAO6/B,GAEJo1tB,KCnFPe,GAAqC,WACrC,SAASA,EAAoB7xvB,GACzBN,KAAKM,OAASA,EACdN,KAAKtD,mBAiBT,OAfAy1vB,EAAoB92vB,UAAUqB,iBAAmB,WAC7CsD,KAAKM,OAAOslF,GAAGwsqB,GAA4BpyvB,KAAKqyvB,gBAAiBryvB,MACjEA,KAAKM,OAAOslF,GAAGguiB,GAAgB5znB,KAAKpD,oBAAqBoD,OAE7DmyvB,EAAoB92vB,UAAUg3vB,gBAAkB,SAAUpyvB,GAC7B,SAArBA,EAAKmsL,aAA+C,SAArBnsL,EAAKmsL,aACpCpsL,KAAKM,OAAOusY,UAAU7yH,WAE1Bh6Q,KAAKM,OAAOyN,OAAOm9nB,GAAuBjroB,GAC1CD,KAAKM,OAAOyN,OnBsGD,amBpGfokvB,EAAoB92vB,UAAUuB,oBAAsB,WAChDoD,KAAKM,OAAO0lF,IAAIosqB,GAA4BpyvB,KAAKqyvB,iBACjDryvB,KAAKM,OAAO0lF,IAAI4tiB,GAAgB5znB,KAAKpD,sBAElCu1vB,KCVAG,GAAc,cAIdC,GAAmB,kBAQnBC,GAAiB,gBClBxBC,GAA2B,WAC3B,SAASA,KA8GT,OArGAA,EAAUp3vB,UAAU23E,QAAU,SAAUquX,EAAMphc,EAAM3D,EAAOU,GACvD,IAAI4yE,EAAYyxX,EAAKprX,cAAcC,cAAcuwc,eAC7C10f,EAAS69C,EAAU8irB,WAAa,EAAK9irB,EAAU+irB,WAAW/irB,EAAU8irB,WAAa,GAAK,KAC1F,GAAKj1vB,EAAkBwC,KAChBA,EAAK4d,KAAK2pB,SACY,YAAtBvnC,EAAK4d,KAAK2pB,SACY,UAAtBvnC,EAAK4d,KAAK2pB,SACY,WAAtBvnC,EAAK4d,KAAK2pB,UACVzV,GACEsva,EAAKprX,cAAcwvqB,eAAethvB,SAASnE,KAAK4yvB,gBAAgB7guB,EAAM8guB,2BACpExxT,EAAKprX,cAAcwvqB,iBAAmB1ztB,EAAM8guB,yBAC5CxxT,EAAKprX,cAAc+mjB,aAAejrmB,EAAM8guB,wBARnD,CAWA,GAAIp1vB,EAAkBwC,GAAO,CACzB,GAAqB,QAAjB3D,EAAM65D,QACW,UAAjB75D,EAAM65D,QACW,UAAjB75D,EAAM65D,QACW,WAAjB75D,EAAM65D,SACNl2D,KACAvB,EAAOuB,EAAMA,GAAQi7G,cAAe5+G,EAAOu8B,QAAQ,EAAOuzJ,YAAa9vL,EAAM65D,SAAU,GACvFkrY,EAAK76a,QAAQssuB,GAAsB7yvB,GAC/BA,EAAK44B,QAIL,YAHqB,UAAjBv8B,EAAM65D,QACN75D,EAAMkpB,kBAKlBxlB,KAAKwovB,cAAc3xE,SAAS9oqB,OAAuB,YAAfzR,EAAMoK,KDzChC,UAwBF,SCkBJpK,MAAOA,EACP0gE,SAAUh9D,KAAKgkF,UAAU1oF,KAAK0E,KAAMqhc,GACpCrkc,MAAOA,SAGV,IAAKS,EAAkBwC,IAASA,EAAK4d,KAAK2pB,SAAWvnC,EAAK4d,KAAK21D,aAAgBvzE,EAAK4d,KAAK2pB,UAAYvnC,EAAK4d,KAAK21D,YACvF,SAAtBvzE,EAAK4d,KAAK2pB,UACiB,aAAzBvnC,EAAK4d,KAAK21D,YAAsD,aAAzBvzE,EAAK4d,KAAK21D,aAA4C,mBAAdvzE,EAAKw3B,OAC3D,oBAAzBx3B,EAAK4d,KAAK21D,YAA6D,cAAzBvzE,EAAK4d,KAAK21D,aACxC,uBAAdvzE,EAAKw3B,MAAiC,CAG7C,GAFA/4B,EAAOuB,EAAMA,GAAQmsL,YAAansL,EAAK4d,KAAK21D,WAAY36C,QAAQ,IAAS,GACzEwoa,EAAK76a,QAAQssuB,GAAsB7yvB,GAC/BA,EAAK44B,OACL,OAEmC,IAAnC74B,KAAK+yvB,mBAAmBt2vB,QAAsC,UAAtBwD,EAAK4d,KAAK2pB,SAA6C,WAAtBvnC,EAAK4d,KAAK2pB,SACnFxnC,KAAKg6Q,WAETqnL,EAAKj8O,QAAS,EACdi8O,EAAKprX,cAAcwvqB,eAAevjvB,QAClClC,KAAKwovB,cAAczwM,YAAY93iB,EAAK4d,KAAK2pB,QAASvnC,EAAK4d,KAAK21D,WAAYl3E,EAAO0D,KAAKgkF,UAAU1oF,KAAK0E,KAAMqhc,GAAOphc,EAAK4d,KAAK7gB,MAAOA,GAErIgD,KAAKgzvB,WAAW3xT,KAEpBoxT,EAAUp3vB,UAAUu3vB,gBAAkB,SAAUryvB,GAE5C,OADAA,EAAyB,IAAlBA,EAAKwF,SAAiBxF,EAAKE,WAAaF,GAGnDkyvB,EAAUp3vB,UAAU43vB,aAAe,SAAU5xT,EAAMxgc,GAC/C,IAAId,EAAQC,KACZA,KAAKwovB,cAAc3xE,SAAS9oqB,ODhDhB,SCiDRzR,MAAOuE,EAAGm8D,SAAU,WAChBj9D,EAAMizvB,WAAW3xT,OAI7BoxT,EAAUp3vB,UAAU2oF,UAAY,SAAUq9W,EAAM13b,GAI5C,GAHA3J,KAAKgzvB,WAAW3xT,GAChBA,EAAKtzb,OAAOmlvB,GAA8BvpvB,GAC1C03b,EAAK76a,QAAQ2suB,GAAyBxpvB,GACX,WAAvBA,EAAOyiL,aAAmD,UAAvBziL,EAAOyiL,aAA+C,SAApBi1Q,EAAK+xT,WAAuB,CACjG,IAAInzvB,EAAO0J,EACX03b,EAAKtzb,OAAOslvB,IACRpzvB,KAAMA,EAAK3D,MAAOoK,KAAMiD,EAAOyiL,YAAaknkB,UAAU,EACtD1vvB,SAAU3D,EAAK2D,aAO3B6uvB,EAAUp3vB,UAAU2+Q,SAAW,SAAUn5Q,GACrCb,KAAKwovB,cAAcC,gBAAgBzue,SAASn5Q,IAEhD4xvB,EAAUp3vB,UAAUqtvB,cAAgB,WAChC,OAAO1ovB,KAAKwovB,cAAcC,gBAAgBC,iBAE9C+J,EAAUp3vB,UAAU03vB,iBAAmB,WACnC,OAAO/yvB,KAAKwovB,cAAcC,gBAAgB8K,eAE9Cd,EAAUp3vB,UAAU23vB,WAAa,SAAU3xT,GACvC,IAAI78W,EAASxkF,KAAK0ovB,gBACdrnT,EAAK+gT,WAAW3itB,SAAWj0B,GAAQkb,SACnCyuD,GAAqBksX,EAAKmsT,mBAAmBY,YAAYrD,aAAcvmqB,GAGnE68W,EAAKi+M,eACLnqkB,GAAqBksX,EAAKi+M,cAAclqkB,YAAaoP,IAI1DiuqB,KCjHAe,GAAgB,iBAIhBC,GAAmB,eAInBC,GAAe,gBAIfC,GAAgB,iBCXvBC,GAAyB,WAKzB,SAASA,EAAQ5gvB,GACbtU,EAAOsB,KAAMA,KAAMgT,GAAS,GAC5BhT,KAAK4vE,UAAY5vE,KAAKM,OAAOuzvB,kBAC7B7zvB,KAAKtD,mBA4NT,OA1NAk3vB,EAAQv4vB,UAAUqB,iBAAmB,WACjCsD,KAAKM,OAAOu2qB,SAASjxlB,GAAGkuqB,GAAwB9zvB,KAAK+zvB,kBAAmB/zvB,MACxEA,KAAKM,OAAOu2qB,SAASjxlB,GAAGouqB,GAAyBh0vB,KAAK2/G,eAAgB3/G,MACtEA,KAAKM,OAAOu2qB,SAASjxlB,GAAGquqB,GAAuBj0vB,KAAK26H,aAAc36H,OAEtE4zvB,EAAQv4vB,UAAUskH,eAAiB,SAAUrjH,GACzC,OAAQA,EAAMA,MAAMq6G,OAChB,KAAK,EACD32G,KAAKk0vB,OAAO53vB,GAGpB,OAAQA,EAAMA,MAAM65D,QAChB,IAAK,eACDn2D,KAAK+zvB,mBAAoBvgrB,WAAY,KAAMxW,SAAU1gE,EAAM0gE,WAC3D1gE,EAAMA,MAAMkpB,iBACZ,MACJ,IAAK,iBACDxlB,KAAK+zvB,mBAAoBvgrB,WAAY,KAAMxW,SAAU1gE,EAAM0gE,WAC3D1gE,EAAMA,MAAMkpB,mBAIxBouuB,EAAQv4vB,UAAUs/H,aAAe,SAAUr+H,GACvC,OAAQA,EAAMA,MAAMq6G,OAChB,KAAK,GACD32G,KAAKm0vB,SAAS73vB,KAI1Bs3vB,EAAQv4vB,UAAU64vB,OAAS,SAAU53vB,GACjC,IAAIw0vB,EAAW9wvB,KAAKM,OAAOU,QAC3BhB,KAAK4vE,UAAU6d,KAAKqjqB,EAASnruB,eAAgBmruB,EAASjruB,cACtD,IAAItoB,EAAQuzvB,EAASnruB,eACjB9G,EAAMiyuB,EAASjruB,aACfy5C,EAAUt/D,KAAK4vE,UAAU8grB,wBAAwBI,GACjDsD,EAAc,EACdC,EAAar0vB,KAAKs0vB,eAAexD,EAAUxxrB,EAAQ,IACvD,GAAK+0rB,GAAe/3vB,EAAMA,MAAMm6G,SAAhC,CAIA,IAAIriB,EAAQp0F,KAAKu0vB,eACjBv0vB,KAAK0ia,cAAgB1ia,KAAKw0vB,UAAUl1rB,EAAQ,GAAG7yC,MAC/C,IAAK,IAAItwB,EAAI,EAAGA,EAAImjE,EAAQ7iE,OAAQN,IAAK,CACrC,IAAI6iT,EAAY1iT,EAAMA,MAAMm6G,SAAWn3C,EAAQnjE,GAAG2xD,KAAOwR,EAAQnjE,GAAG2xD,KAAO,EACvEkre,EAAWh5hB,KAAK4vE,UAAU6grB,QAAQK,EAAU9xc,GAChD,GAAIg6O,KAAc18hB,EAAMA,MAAMm6G,UAAY49oB,GAAe/3vB,EAAMA,MAAMm6G,UAAY,QAAQtzG,KAAK61hB,MAC1FA,EAAWA,EAAS9ohB,OAChBkkF,EAAMjxF,KAAK61hB,IAAW,CACtB18hB,EAAMA,MAAMkpB,iBACZ,IACIivuB,EAAiBn4vB,EAAMA,MAAMm6G,UADlB,KACuCh6G,OADvC,KACyDA,OACpEi4vB,EAAWp1rB,EAAQnjE,GAAGswB,KAAKvvB,MAAM,MAMrC,GALAoiE,EAAQnjE,GAAGswB,KAAOnwB,EAAMA,MAAMm6G,SAAWi+oB,EAASrsuB,OAAO,EAAGqsuB,EAASj4vB,QAAQ0kB,KAAK,MAHnE,KAGsFm+C,EAAQnjE,GAAGswB,KAChHqkuB,EAAS9zvB,MAAQ8zvB,EAAS9zvB,MAAMg6B,OAAO,EAAGsoC,EAAQnjE,GAAGoB,OAAS+hE,EAAQnjE,GAAGswB,KAAO,KAC5EqkuB,EAAS9zvB,MAAMg6B,OAAOsoC,EAAQnjE,GAAG0iB,IAAKiyuB,EAAS9zvB,MAAMP,QACzDc,EAAc,IAANpB,EAAUoB,EAAQk3vB,EAAiBl3vB,EAC3C62vB,GAAeK,EACQ,IAAnBn1rB,EAAQ7iE,OACR,IAAK,IAAI8mB,EAAIpnB,EAAGonB,EAAI+7C,EAAQ7iE,OAAQ8mB,IAChC+7C,EAAQ/7C,GAAGhmB,MAAc,IAANgmB,EAAU+7C,EAAQ/7C,GAAGhmB,MAAQk3vB,EAAiBn1rB,EAAQ/7C,GAAGhmB,MAC5E+hE,EAAQ/7C,GAAG1E,IAAMygD,EAAQ/7C,GAAG1E,IAAM41uB,GAMtDz0vB,KAAK6tF,QAAQijqB,EAAUvzvB,EAAOshB,EAAMu1uB,EAAa93vB,QA7B7C0D,KAAK6tF,QAAQijqB,EAAUvzvB,EAAOshB,EAAMu1uB,EAAa93vB,IA+BzDs3vB,EAAQv4vB,UAAUs5vB,YAAc,SAAU7msB,GAGtC,IAAK,IAFD5wD,EAAQ4wD,EAAK5wD,MAAM,MACnB8qf,EAAO,GACF7rf,EAAI,EAAGA,EAAIe,EAAMT,QACL,KAAbS,EAAMf,GADoBA,IAE1B6rf,GAAQ,KAMhB,OAAOA,GAEX4rQ,EAAQv4vB,UAAUi5vB,eAAiB,SAAUxD,EAAUn5tB,GACnD,IAAIiye,EAAcjye,EAAOlL,KACrBuyR,EAAYrnR,EAAOm2B,KAAO,EAC1Bkre,EAAWh5hB,KAAK4vE,UAAU6grB,QAAQK,EAAU9xc,GAC5C5qN,EAAQp0F,KAAKu0vB,eACbF,GAAa,EACjB,GAAIr7N,GAAY5kc,EAAMjxF,KAAK61hB,EAAS9ohB,QAAS,CACzC,IAAI0kvB,EAAc50vB,KAAK20vB,YAAY/qP,GAC/BirP,EAAe70vB,KAAK20vB,YAAY37N,GAEpC,IADAq7N,EAAaO,IAAgBC,GAAsBR,EAC5CQ,EAAap4vB,OAASm4vB,EAAYn4vB,OAAQ,KAG7C,GAFAuiT,GAAwB,EACxBg6O,EAAWh5hB,KAAK4vE,UAAU6grB,QAAQK,EAAU9xc,GACxC5qN,EAAMjxF,KAAK61hB,EAAS9ohB,UACpB2kvB,EAAe70vB,KAAK20vB,YAAY37N,IACfv8hB,QAAUm4vB,EAAYn4vB,OAAQ,CAC3C43vB,GAAa,EACb,OAKhB,OAAOA,GAEXT,EAAQv4vB,UAAUm5vB,UAAY,SAAU1msB,GACpC,IAAIgnsB,EAAKhnsB,EAAK59C,OAAOhT,MAAM,IAAI8mB,OAAO,KAAOhkB,KAAK4vE,UAAUohrB,mBAAmBhxvB,KAAKkxvB,OAAO6D,IAAM,MAAM,GAC9FjnsB,EAAK59C,OAAOhT,MAAM,IAAI8mB,OAAO,KAAOhkB,KAAK4vE,UAAUohrB,mBAAmBhxvB,KAAKkxvB,OAAO8D,IAAM,MAAM,GACvG,OAAQF,EAAK,KAAO,MAExBlB,EAAQv4vB,UAAU84vB,SAAW,SAAU73vB,GACnC,IAAIw0vB,EAAW9wvB,KAAKM,OAAOU,QAC3BhB,KAAK4vE,UAAU6d,KAAKqjqB,EAASnruB,eAAgBmruB,EAASjruB,cACtD,IAAItoB,EAAQuzvB,EAASnruB,eACjB9G,EAAMiyuB,EAASjruB,aACfy5C,EAAUt/D,KAAK4vE,UAAU8grB,wBAAwBI,GACjD93N,EAAWh5hB,KAAK4vE,UAAU6grB,QAAQK,EAAUxxrB,EAAQ,GAAGxR,KAAO,GAC9DsmC,EAAQp0F,KAAKu0vB,eACjB,GAAIngqB,EAAMjxF,KAAK61hB,EAAS9ohB,SAAkD,KAAvC8ohB,EAAS9ohB,OAAOX,QAAQ6kF,EAAO,IAAY,CAC1E,IAAIggqB,EAAc,EACda,EAAWj1vB,KAAK20vB,YAAY37N,GAChCh5hB,KAAK0ia,cAAgB1ia,KAAKw0vB,UAAUx7N,GACpC,IAAI7vhB,EAASnJ,KAAKkxvB,OAAOlxvB,KAAK0ia,eAC9BpjW,EAAQ,GAAG7yC,KAAOwouB,EAAW9rvB,EAASm2D,EAAQ,GAAG7yC,KACjDqkuB,EAAS9zvB,MAAQ8zvB,EAAS9zvB,MAAMg6B,OAAO,EAAGsoC,EAAQ,GAAG/hE,OAAS+hE,EAAQ,GAAG7yC,KACrEqkuB,EAAS9zvB,MAAMg6B,OAAOsoC,EAAQ,GAAGzgD,IAAKiyuB,EAAS9zvB,MAAMP,QACzDc,EAAQA,EAAQ4L,EAAO1M,OAASw4vB,EAASx4vB,OACzC23vB,GAAejrvB,EAAO1M,OAASw4vB,EAASx4vB,OACxCuD,KAAK6tF,QAAQijqB,EAAUvzvB,EAAOshB,EAAMu1uB,EAAa93vB,KAGzDs3vB,EAAQv4vB,UAAU04vB,kBAAoB,SAAUlzvB,GAC5C,IAAIiwvB,EAAW9wvB,KAAKM,OAAOU,QAC3BhB,KAAK4vE,UAAU6d,KAAKqjqB,EAASnruB,eAAgBmruB,EAASjruB,cACtD7lB,KAAK0ia,cAAgB7ha,EAAE2yE,WAOvB,IAAK,IANDj2E,EAAQuzvB,EAASnruB,eACjB9G,EAAMiyuB,EAASjruB,aACfuuuB,EAAc,EACd90rB,EAAUt/D,KAAK4vE,UAAU8grB,wBAAwBI,GACjD3nvB,EAAS,GACTirF,EAAQp0F,KAAKkxvB,OAAOlxvB,KAAK0ia,eACpBvma,EAAI,EAAGA,EAAImjE,EAAQ7iE,OAAQN,IAChC,IAAK6D,KAAK4vE,UAAUmhrB,YAAYzxrB,EAAQnjE,GAAGswB,KAAM2nE,GAAQ,CACrD,GAAwB,KAApB90B,EAAQnjE,GAAGswB,MAAqB,IAANtwB,IAC1B6D,KAAK4vE,UAAU6d,KAAKlwF,EAAOshB,GACJ,IAAnBygD,EAAQ7iE,QACR,IAAK,IAAI8mB,EAAIpnB,EAAGonB,EAAI+7C,EAAQ7iE,OAAQ8mB,IAChC+7C,EAAQ/7C,GAAGhmB,MAAc,IAANgmB,EAAU,EAAI+7C,EAAQ/7C,GAAGhmB,MAAQ+hE,EAAQ/7C,GAAGhmB,MAC/D+hE,EAAQ/7C,GAAG1E,IAAM,EAAIygD,EAAQ/7C,GAAG1E,IAI5C,IAAItP,EAAUvP,KAAKk1vB,YAAY51rB,EAAQnjE,GAAGswB,MAS1C,GARAtjB,EAASoG,EAAQu+C,KAAO3kD,EAASnJ,KAAKkxvB,OAAOlxvB,KAAK0ia,eAClDpjW,EAAQnjE,GAAGswB,KAAOld,EAAQu+C,KAAOv+C,EAAQu+C,KAAO3kD,EAASm2D,EAAQnjE,GAAGswB,KACpEld,EAAQsuB,MAAQtuB,EAAQsuB,MAAQtuB,EAAQsuB,MAAQ,EAChDiztB,EAAS9zvB,MAAQ8zvB,EAAS9zvB,MAAMg6B,OAAO,EAAGsoC,EAAQnjE,GAAGoB,OAAS+hE,EAAQnjE,GAAGswB,KAAO,KAC5EqkuB,EAAS9zvB,MAAMg6B,OAAOsoC,EAAQnjE,GAAG0iB,IAAKiyuB,EAAS9zvB,MAAMP,QACzDc,EAAc,IAANpB,EAAWoB,EAAQ4L,EAAO1M,OAAS8S,EAAQsuB,MAAS,EACxDtgC,EAAQ4L,EAAO1M,OAAS8S,EAAQsuB,MAAQ,EAAItgC,EAChD62vB,GAAejrvB,EAAO1M,OAAS8S,EAAQsuB,MAChB,IAAnByhC,EAAQ7iE,OACR,IAAS8mB,EAAIpnB,EAAGonB,EAAI+7C,EAAQ7iE,OAAQ8mB,IAChC+7C,EAAQ/7C,GAAGhmB,MAAc,IAANgmB,EAAUpa,EAAO1M,OAChC6iE,EAAQ/7C,GAAGhmB,MAAQgS,EAAQsuB,MAAQyhC,EAAQ/7C,GAAGhmB,MAClD+hE,EAAQ/7C,GAAG1E,IAAM1V,EAAO1M,OAAS6iE,EAAQ/7C,GAAG1E,IAAMtP,EAAQsuB,MAK1E79B,KAAK6tF,QAAQijqB,EAAUvzvB,EAAOshB,EAAMu1uB,EAAavzvB,IAErD+yvB,EAAQv4vB,UAAU65vB,YAAc,SAAUpnsB,GACtC,IAAIn2B,KAIJ,GAHY33B,KAAKu0vB,eACGpxvB,KAAK2qD,EAAK59C,SAAW49C,EAAK59C,SAAWlQ,KAAKkxvB,OAAO6D,GAAG7kvB,QACjE49C,EAAK59C,SAAWlQ,KAAKkxvB,OAAO8D,GAAG9kvB,OACzB,CACT,IAAIX,OAAU,EACVb,OAAU,EAEV1O,KAAK4vE,UAAUqhrB,SAASjxvB,KAAKkxvB,OAAO6D,IAAI5xvB,KAAK2qD,EAAK59C,SAClDxB,EAAU1O,KAAK4vE,UAAUqhrB,SAASjxvB,KAAKkxvB,OAAO6D,IAC9CxlvB,EAAUvP,KAAKkxvB,OAAO8D,GACtBr9tB,EAAOkG,MAAQ79B,KAAKkxvB,OAAO8D,GAAGv4vB,OAASuD,KAAKkxvB,OAAO6D,GAAGt4vB,SAGtDiS,EAAU1O,KAAK4vE,UAAUqhrB,SAASjxvB,KAAKkxvB,OAAO8D,IAC9CzlvB,EAAUvP,KAAKkxvB,OAAO6D,GACtBp9tB,EAAOkG,MAAQ79B,KAAKkxvB,OAAO6D,GAAGt4vB,OAASuD,KAAKkxvB,OAAO8D,GAAGv4vB,QAE1Dk7B,EAAOm2B,KAAO9tD,KAAK20vB,YAAY7msB,GAAQA,EAAK59C,OAAOX,QAAQb,EAASa,GAExE,OAAOooB,GAEXi8tB,EAAQv4vB,UAAUwyF,QAAU,SAAUijqB,EAAUvzvB,EAAOshB,EAAKviB,GACxD0D,KAAK4vE,UAAU6d,KAAKlwF,EAAOshB,GAC3B7e,KAAK4vE,UAAUie,QAAQijqB,GACnBx0vB,GAASA,EAAM0gE,UACf1gE,EAAM0gE,UACFovH,YAAapsL,KAAK0ia,cAClBs/I,aAAchijB,KAAK4vE,UAAU2xlB,gBAAgBuvF,GAC7CsC,WAAY,WACZ92vB,MAAOA,EAAMA,SAIzBs3vB,EAAQv4vB,UAAUk5vB,aAAe,WAG7B,IAAK,IAFDngqB,EAAQ,GACR+gqB,EAAY72vB,OAAOhB,KAAK0C,KAAKkxvB,QACxB3tuB,EAAI,EAAGA,EAAI4xuB,EAAU14vB,OAAQ8mB,IAAK,CACvC,IAAI2tuB,EAASlxvB,KAAK4vE,UAAUohrB,mBAAmBhxvB,KAAKkxvB,OAAOiE,EAAU5xuB,KACrE6wE,GAAmB,KAAVA,EAAe,KAAO88pB,EAAS,OAASA,EAAOhhvB,OAAS,IAC7D,MAAQghvB,EAAS,OAASA,EAAOhhvB,OAAS,IAElD,OAAO,IAAI8T,OAAOowE,IAEfw/pB,KCpOPwB,GAA2B,WAK3B,SAASA,EAAUpivB,GACftU,EAAOsB,KAAMA,KAAMgT,GAAS,GAC5BhT,KAAK4vE,UAAY5vE,KAAKM,OAAOuzvB,kBAC7B7zvB,KAAKtD,mBAkJT,OAhJA04vB,EAAU/5vB,UAAUqB,iBAAmB,WACnCsD,KAAKM,OAAOu2qB,SAASjxlB,GAAGyvqB,GAAoBr1vB,KAAKs1vB,aAAct1vB,OAEnEo1vB,EAAU/5vB,UAAUi6vB,aAAe,SAAUz0vB,GACzCA,EAAE2yE,WAAa3yE,EAAE2yE,WAAW59D,cAC5B,IAAIk7uB,EAAW9wvB,KAAKM,OAAOU,QAE3B,GADAhB,KAAK4vE,UAAU6d,KAAKqjqB,EAASnruB,eAAgBmruB,EAASjruB,cACjC,MAAjBhlB,EAAE2yE,WAGF,OAFAxzE,KAAKu1vB,YAAYzE,QACjB9wvB,KAAK6tF,QAAQijqB,EAAUA,EAASnruB,eAAgBmruB,EAASjruB,aAAchlB,GAIvEb,KAAKu1vB,YAAYzE,EAAUjwvB,EAAE2yE,YAEjC,IAAIj2E,EAAQuzvB,EAASnruB,eACjB9G,EAAMiyuB,EAASjruB,aACfuuuB,EAAc,EACd90rB,EAAUt/D,KAAK4vE,UAAU8grB,wBAAwBI,GACrD,GAAqB,QAAjBjwvB,EAAE2yE,WAAN,CAUA,IAAK,IAAIr3E,EAAI,EAAGA,EAAImjE,EAAQ7iE,OAAQN,IAChC,GAAwB,KAApBmjE,EAAQnjE,GAAGswB,MAAgBzsB,KAAK4vE,UAAUmhrB,YAAYzxrB,EAAQnjE,GAAGswB,KAAM,KAAOzsB,KAAKkxvB,OAAOrwvB,EAAE2yE,cAc3F,GAAwB,KAApBlU,EAAQnjE,GAAGswB,MAAqB,IAANtwB,IAC/B6D,KAAK4vE,UAAU6d,KAAKlwF,EAAOshB,GACJ,IAAnBygD,EAAQ7iE,QACR,IAAS8mB,EAAIpnB,EAAGonB,EAAI+7C,EAAQ7iE,OAAQ8mB,IAChC+7C,EAAQ/7C,GAAGhmB,MAAc,IAANgmB,EAAU,EAAI+7C,EAAQ/7C,GAAGhmB,MAAQ+hE,EAAQ/7C,GAAGhmB,MAC/D+hE,EAAQ/7C,GAAG1E,IAAM,EAAIygD,EAAQ/7C,GAAG1E,SAbxC,GALAygD,EAAQnjE,GAAGswB,KAAOzsB,KAAKkxvB,OAAOrwvB,EAAE2yE,YAAclU,EAAQnjE,GAAGswB,KACzDqkuB,EAAS9zvB,MAAQ8zvB,EAAS9zvB,MAAMg6B,OAAO,EAAGsoC,EAAQnjE,GAAGoB,OAAS+hE,EAAQnjE,GAAGswB,KAAO,KAC5EqkuB,EAAS9zvB,MAAMg6B,OAAOsoC,EAAQnjE,GAAG0iB,IAAKiyuB,EAAS9zvB,MAAMP,QACzDc,EAAc,IAANpB,EAAUoB,EAAQyC,KAAKkxvB,OAAOrwvB,EAAE2yE,YAAY/2E,OAASc,EAC7D62vB,GAAep0vB,KAAKkxvB,OAAOrwvB,EAAE2yE,YAAY/2E,OAClB,IAAnB6iE,EAAQ7iE,OACR,IAAK,IAAI8mB,EAAIpnB,EAAGonB,EAAI+7C,EAAQ7iE,OAAQ8mB,IAChC+7C,EAAQ/7C,GAAGhmB,MAAc,IAANgmB,EACfvjB,KAAKkxvB,OAAOrwvB,EAAE2yE,YAAY/2E,OAAS6iE,EAAQ/7C,GAAGhmB,MAAQ+hE,EAAQ/7C,GAAGhmB,MACrE+hE,EAAQ/7C,GAAG1E,IAAM7e,KAAKkxvB,OAAOrwvB,EAAE2yE,YAAY/2E,OAAS6iE,EAAQ/7C,GAAG1E,IAc/E7e,KAAK6tF,QAAQijqB,EAAUvzvB,EAAOshB,EAAMu1uB,EAAavzvB,QAlCzCy+D,EAAQ7iE,OAAS,EACjBuD,KAAKw1vB,eAAe1E,EAAUjwvB,EAAGy+D,IAGjC5gE,EAAOmC,EAAGA,GAAK2yE,WAAY,eAAgB,GAC3CxzE,KAAKM,OAAOu2qB,SAAS9oqB,OAAO0nvB,GAA2B50vB,KA+BnEu0vB,EAAU/5vB,UAAUq6vB,WAAa,WAG7B,IAAK,IAFDthqB,EAAQ,GACR+gqB,EAAY72vB,OAAOhB,KAAK0C,KAAKkxvB,QACxB3tuB,EAAI,EAAGA,EAAI4xuB,EAAU14vB,QAA2B,QAAjB04vB,EAAU5xuB,IAAiC,MAAjB4xuB,EAAU5xuB,GAAYA,IACpF6wE,GAAmB,KAAVA,EAAe,KAAOp0F,KAAK4vE,UAAUohrB,mBAAmBhxvB,KAAKkxvB,OAAOiE,EAAU5xuB,IAAIrT,QAAU,IACjG,MAAQlQ,KAAK4vE,UAAUohrB,mBAAmBhxvB,KAAKkxvB,OAAOiE,EAAU5xuB,IAAIrT,QAAU,IAEtF,OAAOkkF,GAEXghqB,EAAU/5vB,UAAUk6vB,YAAc,SAAUzE,EAAUtptB,GAClD,IAAI83B,EAAUt/D,KAAK4vE,UAAU8grB,wBAAwBI,GACjDvzvB,EAAQuzvB,EAASnruB,eACjB9G,EAAMiyuB,EAASjruB,aACf2+T,EAAe,EACnB,GAAIxkV,KAAK4vE,UAAU0mD,QAAQh3D,EAASt/D,KAAK01vB,cAAe,CACpD,IAAK,IAAIv5vB,EAAI,EAAGA,EAAImjE,EAAQ7iE,OAAQN,IAAK,CAErC,IAAK,IADDg5vB,EAAY72vB,OAAOhB,KAAK0C,KAAKkxvB,QACxB3tuB,EAAI,EAAuB,KAApB+7C,EAAQnjE,GAAGswB,MAAelJ,EAAI4xuB,EAAU14vB,OAAQ8mB,IAAK,CACjE,IAAIwgV,EAAa/jW,KAAKkxvB,OAAOiE,EAAU5xuB,IACvC,GAAI4xuB,EAAU5xuB,KAAOikB,EAArB,CAGA,IAAI4sD,EAAQ,IAAIpwE,OAAO,KAAOhkB,KAAK4vE,UAAUohrB,mBAAmBjtZ,GAAc,IAAK,OACnF,GAAI3vQ,EAAMjxF,KAAKm8D,EAAQnjE,GAAGswB,MAAO,CAM7B,GALA6yC,EAAQnjE,GAAGswB,KAAO6yC,EAAQnjE,GAAGswB,KAAKld,QAAQ6kF,EAAO,IACjD08pB,EAAS9zvB,MAAQ8zvB,EAAS9zvB,MAAMg6B,OAAO,EAAGsoC,EAAQnjE,GAAGoB,OAAS+hE,EAAQnjE,GAAGswB,KAAO,KAC5EqkuB,EAAS9zvB,MAAMg6B,OAAOsoC,EAAQnjE,GAAG0iB,IAAKiyuB,EAAS9zvB,MAAMP,QACzDc,EAAc,IAANpB,EAAWoB,EAASwmW,EAAiB,OAAK,EAAIxmW,EAASwmW,EAAiB,OAAI,EAAIxmW,EACxFinV,GAAgBuf,EAAWtnW,OACJ,IAAnB6iE,EAAQ7iE,OACR,IAAK,IAAI0pB,EAAI,EAAGA,EAAIm5C,EAAQ7iE,OAAQ0pB,IAChCm5C,EAAQn5C,GAAG5oB,MAAc,IAAN4oB,EACfm5C,EAAQn5C,GAAG5oB,MAAQwmW,EAAWtnW,OAAS6iE,EAAQn5C,GAAG5oB,MACtD+hE,EAAQn5C,GAAGtH,IAAMygD,EAAQn5C,GAAGtH,IAAMklV,EAAWtnW,OAGrD,QAGR,GAAwB,KAApB6iE,EAAQnjE,GAAGswB,MAAqB,IAANtwB,IAC1B6D,KAAK4vE,UAAU6d,KAAKlwF,EAAOshB,GACJ,IAAnBygD,EAAQ7iE,QACR,IAAS8mB,EAAIpnB,EAAGonB,EAAI+7C,EAAQ7iE,OAAQ8mB,IAChC+7C,EAAQ/7C,GAAGhmB,MAAc,IAANgmB,EAAU,EAAI+7C,EAAQ/7C,GAAGhmB,MAAQ+hE,EAAQ/7C,GAAGhmB,MAC/D+hE,EAAQ/7C,GAAG1E,IAAM,EAAIygD,EAAQ/7C,GAAG1E,IAKhD7e,KAAK6tF,QAAQijqB,EAAUvzvB,EAAOshB,EAAM2lU,KAG5C4wa,EAAU/5vB,UAAUm6vB,eAAiB,SAAU1E,EAAUx0vB,EAAOgjE,GAC5D,IAAI93B,EAAUlrC,EAAMk3E,WAChBj2E,EAAQ+hE,EAAQ,GAAG/hE,MACnBshB,EAAMygD,EAAQA,EAAQ7iE,OAAS,GAAGoiB,IAClCmzuB,EAAchyvB,KAAK4vE,UAAU2grB,cAAcO,EAAS9zvB,OACpDi1vB,EAAgBD,EAAY1yrB,EAAQ,GAAGxR,KAAO,GAC9CoksB,EAAeF,EAAa1yrB,EAAQ7iE,OAAS,EAAK,GACtD,GACKuD,KAAK4vE,UAAUmhrB,YAAYkB,EAAejyvB,KAAKkxvB,OAAOhhd,IAAIhzS,MAAM,MAAM,KACtE8C,KAAK4vE,UAAUmhrB,YAAYmB,EAAclyvB,KAAKkxvB,OAAOhhd,IAAIhzS,MAAM,MAAM,IAUtEK,EAAQuzvB,EAASnruB,eACjB9G,EAAMiyuB,EAASjruB,iBAX4D,CAC3E,IAAI65N,EAAQoxgB,EAAS9zvB,MAAMknB,UAAU3mB,EAAOshB,GAAK3hB,MAAM,MACnD89gB,EAAuC,KAA5Bt7R,EAAMA,EAAMjjP,OAAS,GAAY,GAAK,KACrDq0vB,EAAS9zvB,MAAQ8zvB,EAAS9zvB,MAAMg6B,OAAO,EAAGz5B,GAASyC,KAAKkxvB,OAAO1ptB,GAAWsptB,EAAS9zvB,MAAMknB,UAAU3mB,EAAOshB,GACtGm8f,EAAWh7gB,KAAKkxvB,OAAO1ptB,GACvBsptB,EAAS9zvB,MAAMg6B,OAAOnY,EAAKiyuB,EAAS9zvB,MAAMP,QAC9Cc,GAASyC,KAAKkxvB,OAAO1ptB,GAAS/qC,OAC9BoiB,GAAO7e,KAAKkxvB,OAAO1ptB,GAAS/qC,OAAS,EAMzCuD,KAAK6tF,QAAQijqB,EAAUvzvB,EAAOshB,EAAKviB,IAEvC84vB,EAAU/5vB,UAAUwyF,QAAU,SAAUijqB,EAAUvzvB,EAAOshB,EAAKviB,GAC1D0D,KAAK4vE,UAAU6d,KAAKlwF,EAAOshB,GAC3B7e,KAAK4vE,UAAUie,QAAQijqB,GACnBx0vB,GAASA,EAAM0gE,UACf1gE,EAAM0gE,UACFovH,YAAa9vL,EAAMk3E,WACnBwue,aAAchijB,KAAK4vE,UAAU2xlB,gBAAgBuvF,GAC7CsC,WAAY,WACZ92vB,MAAOA,EAAMA,SAIlB84vB,KCzJPO,GAAoC,WACpC,SAASA,EAAmBr1vB,GACxB5B,EAAOsB,KAAMA,KAAMM,GAAQ,GAC3BN,KAAK4vE,UAAY5vE,KAAKM,OAAOuzvB,kBAC7B7zvB,KAAKtD,mBAkST,OAhSAi5vB,EAAmBt6vB,UAAUqB,iBAAmB,WAC5CsD,KAAKM,OAAOu2qB,SAASjxlB,GAAG6vqB,GAA2Bz1vB,KAAK41vB,cAAe51vB,MACvEA,KAAKM,OAAOu2qB,SAASjxlB,GAAGouqB,GAAyBh0vB,KAAK2/G,eAAgB3/G,OAE1E21vB,EAAmBt6vB,UAAUskH,eAAiB,SAAU9+G,GACpD,OAAQA,EAAEvE,MAAM65D,QACZ,IAAK,OACDn2D,KAAK41vB,eAAgBpirB,WAAY,OAAQxW,SAAUn8D,EAAEm8D,WACrDn8D,EAAEvE,MAAMkpB,iBACR,MACJ,IAAK,SACDxlB,KAAK41vB,eAAgBpirB,WAAY,SAAUxW,SAAUn8D,EAAEm8D,WACvDn8D,EAAEvE,MAAMkpB,iBACR,MACJ,IAAK,gBACDxlB,KAAK41vB,eAAgBpirB,WAAY,gBAAiBxW,SAAUn8D,EAAEm8D,WAC9Dn8D,EAAEvE,MAAMkpB,iBACR,MACJ,IAAK,YACDxlB,KAAK41vB,eAAgBpirB,WAAY,YAAaxW,SAAUn8D,EAAEm8D,WAC1Dn8D,EAAEvE,MAAMkpB,iBACR,MACJ,IAAK,YACDxlB,KAAK41vB,eAAgBpirB,WAAY,YAAaxW,SAAUn8D,EAAEm8D,WAC1Dn8D,EAAEvE,MAAMkpB,iBACR,MACJ,IAAK,cACDxlB,KAAK41vB,eAAgBpirB,WAAY,cAAexW,SAAUn8D,EAAEm8D,WAC5Dn8D,EAAEvE,MAAMkpB,iBACR,MACJ,IAAK,YACDxlB,KAAK41vB,eAAgBpirB,WAAY,YAAaxW,SAAUn8D,EAAEm8D,WAC1Dn8D,EAAEvE,MAAMkpB,mBAIpBmwuB,EAAmBt6vB,UAAUqwQ,OAAS,SAAUj/O,EAAM4d,GAClD,OAAsD,IAA/C5d,EAAK2iI,OAAO,KAAO/kH,EAAM,KAAOA,IAE3CsrtB,EAAmBt6vB,UAAU6xQ,SAAW,SAAUzgP,EAAM4d,GACpD,OAAoC,IAA7B5d,EAAK2iI,OAAO,KAAO/kH,IAE9BsrtB,EAAmBt6vB,UAAUw6vB,QAAU,SAAUppuB,EAAM4d,GACnD,IAAIyrtB,GAAa,IACjB,OAAQzrtB,GACJ,KAAKrqC,KAAKkxvB,OAAO3ugB,OAGjB,KAAKviP,KAAKkxvB,OAAO6E,WAGjB,KAAK/1vB,KAAKkxvB,OAAO8E,cACbF,EAAYrpuB,EAAK9c,MAAM3P,KAAKi2vB,eAAe5rtB,IAGnD,OAAOyrtB,GAEXH,EAAmBt6vB,UAAU66vB,cAAgB,SAAU7rtB,GACnD,OAAO,IAAIrmB,OAAO,MAAQqmB,EAAM,KAAOA,EAAM,IAAK,MAEtDsrtB,EAAmBt6vB,UAAU46vB,eAAiB,SAAU5rtB,GACpD,OAAO,IAAIrmB,OAAO,MAAQqmB,EAAM,IAAK,MAEzCsrtB,EAAmBt6vB,UAAUs2vB,iBAAmB,SAAUtntB,GACtD,IACI8rtB,GAAW,EACXrF,EAAW9wvB,KAAKM,OAAOU,QAGvBo1vB,EADU,SAAUnkvB,GAAS,OAAO,SAAUlF,GAAK,OAAQA,EAAE1L,MAAM,EAAG4Q,GAAQlF,EAAE1L,MAAM4Q,KAC1EokvB,CAFJvF,EAASnruB,eAEL0wuB,CAAevF,EAAS9zvB,OACpCs5vB,EAAOt2vB,KAAKkxvB,OAAO5ugB,KAAKtrN,OAAO,EAAG,GAClCu/tB,EAAOv2vB,KAAKkxvB,OAAO3ugB,OACnBi0gB,EAAa1F,EAAS9zvB,MAAMg6B,OAAOo/tB,EAAU,GAAG35vB,OAAS,EAAG,GAC5Dg6vB,EAAYL,EAAU,GAAGp/tB,OAAO,EAAG,GACvC,QAAoB,KAAfw/tB,GAAmC,KAAdC,IAAoBD,EAAW7mvB,MAAM,WAC3D6mvB,IAAeA,EAAW/ruB,eAAiBgsuB,IAAcA,EAAUhsuB,eAAyB,cAAR4f,KAGlFrqC,KAAK0rQ,OAAO0qf,EAAU,GAAIE,IAAYt2vB,KAAKktQ,SAASkpf,EAAU,GAAIG,IAAYv2vB,KAAK0rQ,OAAO0qf,EAAU,GAAIE,IACxGt2vB,KAAKktQ,SAASkpf,EAAU,GAAIG,KACxB94vB,EAAkBuC,KAAK61vB,QAAQO,EAAU,GAAIp2vB,KAAKkxvB,OAAO8E,iBAC1Dv4vB,EAAkBuC,KAAK61vB,QAAQO,EAAU,GAAIp2vB,KAAKkxvB,OAAO8E,iBACzDh2vB,KAAK61vB,QAAQO,EAAU,GAAIp2vB,KAAKkxvB,OAAO8E,eAAev5vB,OAAS,GAAM,GAClEuD,KAAK61vB,QAAQO,EAAU,GAAIp2vB,KAAKkxvB,OAAO8E,eAAev5vB,OAAS,GAAM,GAAc,kBAAR4tC,IAC/E8rtB,GAAW,GAET14vB,EAAkBuC,KAAK61vB,QAAQO,EAAU,GAAIp2vB,KAAKkxvB,OAAO6E,cAC1Dt4vB,EAAkBuC,KAAK61vB,QAAQO,EAAU,GAAIp2vB,KAAKkxvB,OAAO6E,cACzD/1vB,KAAK61vB,QAAQO,EAAU,GAAIp2vB,KAAKkxvB,OAAO6E,YAAYt5vB,OAAS,GAAM,GAC/DuD,KAAK61vB,QAAQO,EAAU,GAAIp2vB,KAAKkxvB,OAAO6E,YAAYt5vB,OAAS,GAAM,GAAc,eAAR4tC,IAC5E8rtB,GAAW,GAET14vB,EAAkB24vB,EAAU,GAAGzmvB,MAAM,aAAgBlS,EAAkB24vB,EAAU,GAAGzmvB,MAAM,eAC3FymvB,EAAU,GAAGzmvB,MAAM,WAAWlT,OAAS,GAAM,GAC1C25vB,EAAU,GAAGzmvB,MAAM,aAAalT,OAAS,GAAM,GAAc,cAAR4tC,IACzD8rtB,GAAW,GAET14vB,EAAkB24vB,EAAU,GAAGzmvB,MAAM,aAAgBlS,EAAkB24vB,EAAU,GAAGzmvB,MAAM,eAC3FymvB,EAAU,GAAGzmvB,MAAM,WAAWlT,OAAS,GAAM,GAAK25vB,EAAU,GAAGzmvB,MAAM,aAAalT,OAAS,GAAM,GAC1F,gBAAR4tC,IACA8rtB,GAAW,IAGdn2vB,KAAK0rQ,OAAO0qf,EAAU,GAAIE,IAASt2vB,KAAK0rQ,OAAO0qf,EAAU,GAAIE,IAC7DF,EAAU,GAAGzmvB,MAAM3P,KAAKk2vB,cAAcI,IAAO75vB,OAAS,GAAM,GACzD25vB,EAAU,GAAGzmvB,MAAM3P,KAAKk2vB,cAAcI,IAAO75vB,OAAS,GAAM,GAAc,SAAR4tC,IACtE8rtB,GAAW,GAEfC,EAAU,GAAKp2vB,KAAK0rQ,OAAO0qf,EAAU,GAAIE,GAAQF,EAAU,GAAG7mvB,QAAQvP,KAAKk2vB,cAAcI,GAAO,OAASF,EAAU,GACnHA,EAAU,GAAKp2vB,KAAK0rQ,OAAO0qf,EAAU,GAAIE,GAAQF,EAAU,GAAG7mvB,QAAQvP,KAAKk2vB,cAAcI,GAAO,OAASF,EAAU,GAC7G34vB,EAAkBuC,KAAK61vB,QAAQO,EAAU,GAAIp2vB,KAAKkxvB,OAAO3ugB,UAC1D9kP,EAAkBuC,KAAK61vB,QAAQO,EAAU,GAAIp2vB,KAAKkxvB,OAAO3ugB,UACzDviP,KAAK61vB,QAAQO,EAAU,GAAIp2vB,KAAKkxvB,OAAO3ugB,QAAQ9lP,OAAS,GAAM,GAC3DuD,KAAK61vB,QAAQO,EAAU,GAAIp2vB,KAAKkxvB,OAAO3ugB,QAAQ9lP,OAAS,GAAM,GAAc,WAAR4tC,IACxE8rtB,GAAW,GAET14vB,EAAkBuC,KAAK61vB,QAAQO,EAAU,GAAIp2vB,KAAKkxvB,OAAO8E,iBAC1Dv4vB,EAAkBuC,KAAK61vB,QAAQO,EAAU,GAAIp2vB,KAAKkxvB,OAAO8E,iBACzDh2vB,KAAK61vB,QAAQO,EAAU,GAAIp2vB,KAAKkxvB,OAAO8E,eAAev5vB,OAAS,GAAM,GAClEuD,KAAK61vB,QAAQO,EAAU,GAAIp2vB,KAAKkxvB,OAAO8E,eAAev5vB,OAAS,GAAM,GAAc,kBAAR4tC,IAC/E8rtB,GAAW,GAET14vB,EAAkBuC,KAAK61vB,QAAQO,EAAU,GAAIp2vB,KAAKkxvB,OAAO6E,cAC1Dt4vB,EAAkBuC,KAAK61vB,QAAQO,EAAU,GAAIp2vB,KAAKkxvB,OAAO6E,cACzD/1vB,KAAK61vB,QAAQO,EAAU,GAAIp2vB,KAAKkxvB,OAAO6E,YAAYt5vB,OAAS,GAAM,GAC/DuD,KAAK61vB,QAAQO,EAAU,GAAIp2vB,KAAKkxvB,OAAO6E,YAAYt5vB,OAAS,GAAM,GAAc,eAAR4tC,IAC5E8rtB,GAAW,GAET14vB,EAAkB24vB,EAAU,GAAGzmvB,MAAM,aAAgBlS,EAAkB24vB,EAAU,GAAGzmvB,MAAM,eAC3FymvB,EAAU,GAAGzmvB,MAAM,WAAWlT,OAAS,GAAM,GAAK25vB,EAAU,GAAGzmvB,MAAM,aAAalT,OAAS,GAAM,GAAc,cAAR4tC,IACxG8rtB,GAAW,GAET14vB,EAAkB24vB,EAAU,GAAGzmvB,MAAM,aAAgBlS,EAAkB24vB,EAAU,GAAGzmvB,MAAM,eAC3FymvB,EAAU,GAAGzmvB,MAAM,WAAWlT,OAAS,GAAM,GAAK25vB,EAAU,GAAGzmvB,MAAM,aAAalT,OAAS,GAAM,GAAc,gBAAR4tC,IACxG8rtB,GAAW,GAERA,IAEXR,EAAmBt6vB,UAAUu6vB,cAAgB,SAAU/0vB,GACnDb,KAAK0ia,cAAgB7ha,EAAE2yE,WACvB,IAAIs9qB,EAAW9wvB,KAAKM,OAAOU,QAC3BhB,KAAK4vE,UAAU6d,KAAKqjqB,EAASnruB,eAAgBmruB,EAASjruB,cACtD,IAAItoB,EAAQuzvB,EAASnruB,eACjB9G,EAAMiyuB,EAASjruB,aACfuuuB,EAAc,EACdxkrB,EAAY5vE,KAAKM,OAAOuzvB,kBAAkB1C,wBAAwBL,GACtE,GAAuB,KAAnBlhrB,EAAUnjD,MAAgBzsB,KAAK02vB,UAAU9mrB,EAAW/uE,EAAE2yE,YAmChC,cAAjB3yE,EAAE2yE,YAA+C,cAAjB3yE,EAAE2yE,YAClB,cAAjB3yE,EAAE2yE,YAA+C,gBAAjB3yE,EAAE2yE,YAClC5D,EAAUnjD,KAAOzsB,KAAK22vB,YAAY/mrB,EAAUnjD,KAAM5rB,EAAE2yE,YACpD5D,EAAUnjD,KAAOzsB,KAAKkxvB,OAAOrwvB,EAAE2yE,YAAc5D,EAAUnjD,KACjD,KAAOzsB,KAAKkxvB,OAAOrwvB,EAAE2yE,YAAYtvD,UAAU,EAAG,KAGpD0rD,EAAUnjD,KAAOzsB,KAAK22vB,YAAY/mrB,EAAUnjD,KAAM5rB,EAAE2yE,YACpD5D,EAAUnjD,KAAOzsB,KAAKkxvB,OAAOrwvB,EAAE2yE,YAAc5D,EAAUnjD,KAAOzsB,KAAKkxvB,OAAOrwvB,EAAE2yE,aAEhFs9qB,EAAS9zvB,MAAQ8zvB,EAAS9zvB,MAAMg6B,OAAO,EAAG44C,EAAUryE,OAC9CqyE,EAAUnjD,KAAOqkuB,EAAS9zvB,MAAMg6B,OAAO44C,EAAU/wD,IAAKiyuB,EAAS9zvB,MAAMP,QAC3E23vB,EAAcp0vB,KAAKkxvB,OAAOrwvB,EAAE2yE,YAAY/2E,OACpCmzE,EAAUryE,QAAUqyE,EAAU/wD,IAC9B7e,KAAK6tF,QAAQijqB,EAAUvzvB,EAAQ62vB,EAAav1uB,EAAMu1uB,EAAavzvB,GAG/Db,KAAK6tF,QAAQijqB,EAAUvzvB,EAAQ62vB,EAAav1uB,EAAMu1uB,EAAavzvB,IAInEb,KAAK6tF,QAAQijqB,EAAUvzvB,EAAOshB,EAAKhe,OAxDgC,CACnEuzvB,EAAgC,cAAjBvzvB,EAAE2yE,YAA+C,cAAjB3yE,EAAE2yE,WAA8B,EAC3ExzE,KAAKkxvB,OAAOrwvB,EAAE2yE,YAAY/2E,OAC9B,IAAIm6vB,EAAW9F,EAAS9zvB,MAAMg6B,OAAO44C,EAAUryE,MAAQyC,KAAKkxvB,OAAOrwvB,EAAE2yE,YAAY/2E,OAAQuD,KAAKkxvB,OAAOrwvB,EAAE2yE,YAAY/2E,QAC/Go6vB,OAAS,EACb,GAAKD,IAAa/1vB,EAAE2yE,YAAiB5D,EAAUryE,MAAQyC,KAAKkxvB,OAAOrwvB,EAAE2yE,YAAY/2E,SAC7Eq0vB,EAAS9zvB,MAAMuB,QAAQyB,KAAKkxvB,OAAOrwvB,EAAE2yE,eAAkB5D,EAAU/wD,MAAQiyuB,EAAS9zvB,MAAM67F,YAAY74F,KAAKkxvB,OAAOrwvB,EAAE2yE,cAAgB5D,EAAU/wD,MAAQiyuB,EAAS9zvB,MAAM67F,YAAY,KAAO74F,KAAKkxvB,OAAOrwvB,EAAE2yE,YAAYtvD,UAAU,EAAG,KAAO,CAEhO2yuB,EADiB,cAAjBh2vB,EAAE2yE,YAA+C,gBAAjB3yE,EAAE2yE,WACzBs9qB,EAAS9zvB,MAAMg6B,OAAO44C,EAAU/wD,IAAK7e,KAAKkxvB,OAAOrwvB,EAAE2yE,YAAY/2E,OAAS,GAGxEq0vB,EAAS9zvB,MAAMg6B,OAAO44C,EAAU/wD,IAAK7e,KAAKkxvB,OAAOrwvB,EAAE2yE,YAAY/2E,QAE5E,IAAIq6vB,EAAe92vB,KAAK+2vB,UAAUjG,EAAS9zvB,MAAMg6B,OAAO,EAAG44C,EAAUryE,OAAQq5vB,EAAU,GAAIhnrB,EAAUryE,MAAQyC,KAAKkxvB,OAAOrwvB,EAAE2yE,YAAY/2E,OAAQmzE,EAAUryE,OACrJy5vB,EAAah3vB,KAAK+2vB,UAAUjG,EAAS9zvB,MAAMg6B,OAAO44C,EAAU/wD,IAAKiyuB,EAAS9zvB,MAAMP,QAASo6vB,EAAQ,GAAI,EAAGA,EAAOp6vB,QACnHq0vB,EAAS9zvB,MAAQ85vB,EAAelnrB,EAAUnjD,KAAOuquB,EACjDh3vB,KAAK6tF,QAAQijqB,EAAUvzvB,EAAQ62vB,EAAav1uB,EAAMu1uB,EAAavzvB,OAG1C,cAAjBA,EAAE2yE,YAA+C,gBAAjB3yE,EAAE2yE,WAClC5D,EAAUnjD,KAAOzsB,KAAKkxvB,OAAOrwvB,EAAE2yE,YAAc5D,EAAUnjD,KACjD,KAAOzsB,KAAKkxvB,OAAOrwvB,EAAE2yE,YAAYtvD,UAAU,EAAG,GAE9B,cAAjBrjB,EAAE2yE,YAA+C,cAAjB3yE,EAAE2yE,WACvC5D,EAAUnjD,KAAyB,cAAjB5rB,EAAE2yE,WAA8B5D,EAAUnjD,KAAKhC,cAC3DmlD,EAAUnjD,KAAK7W,cAGrBg6D,EAAUnjD,KAAOzsB,KAAKkxvB,OAAOrwvB,EAAE2yE,YAAc5D,EAAUnjD,KAAOzsB,KAAKkxvB,OAAOrwvB,EAAE2yE,YAEhFs9qB,EAAS9zvB,MAAQ8zvB,EAAS9zvB,MAAMg6B,OAAO,EAAG44C,EAAUryE,OAASqyE,EAAUnjD,KACnEqkuB,EAAS9zvB,MAAMg6B,OAAO44C,EAAU/wD,IAAKiyuB,EAAS9zvB,MAAMP,QACxDuD,KAAK6tF,QAAQijqB,EAAUvzvB,EAAQ62vB,EAAav1uB,EAAMu1uB,EAAavzvB,GA0BvEb,KAAKM,OAAOmovB,gBAAgBzue,YAEhC27e,EAAmBt6vB,UAAU07vB,UAAY,SAAUjlvB,EAAOs9I,EAAQ7/I,EAAShS,EAAOshB,GAC9E,OAAO/M,EAAMzQ,MAAM,EAAG9D,GAChBuU,EAAMzQ,MAAM9D,EAAOshB,GAAKtP,QAAQ6/I,EAAQ7/I,GACxCuC,EAAMzQ,MAAMwd,IAEtB82uB,EAAmBt6vB,UAAUwyF,QAAU,SAAUijqB,EAAUvzvB,EAAOshB,EAAKviB,GACnE0D,KAAK4vE,UAAU6d,KAAKlwF,EAAOshB,GAC3B7e,KAAK4vE,UAAUie,QAAQijqB,GACnBx0vB,GAASA,EAAM0gE,UACf1gE,EAAM0gE,UACFovH,YAAapsL,KAAK0ia,cAClBs/I,aAAchijB,KAAK4vE,UAAU2xlB,gBAAgBuvF,GAC7CsC,WAAY,WACZ92vB,MAAOA,EAAMA,SAIzBq5vB,EAAmBt6vB,UAAUs7vB,YAAc,SAAUlquB,EAAM+a,GACvD,IAAI4wnB,EAAOp4pB,KAAKi2vB,eAAej2vB,KAAKkxvB,OAAO1ptB,IAC3C,OAAQA,GACJ,IAAK,OACD4wnB,EAAOp4pB,KAAKk2vB,cAAcl2vB,KAAKkxvB,OAAO1ptB,GAASxQ,OAAO,EAAG,IACzDvK,EAAOA,EAAKld,QAAQ6opB,EAAM,IAC1B,MACJ,IAAK,SACD,GAAKp4pB,KAAK0rQ,OAAOj/O,EAAMzsB,KAAKkxvB,OAAO1ptB,GAASxQ,OAAO,EAAG,IAGjD,CACD,IAAIiguB,EAAQj3vB,KAAKk2vB,cAAcl2vB,KAAKkxvB,OAAO1ptB,GAASxQ,OAAO,EAAG,IAC1DkguB,EAAUzquB,EACdyquB,EAAUA,EAAQ3nvB,QAAQ0nvB,EAAO,OAAO1nvB,QAAQ6opB,EAAM,IACtD,IAAI++F,EAAW,IAAInzuB,OAAO,QAAS,KACnCyI,EAAOyquB,EAAQ3nvB,QAAQ4nvB,EAAUn3vB,KAAKkxvB,OAAO1ptB,GAASxQ,OAAO,EAAG,GAAKh3B,KAAKkxvB,OAAO1ptB,GAASxQ,OAAO,EAAG,SAPpGvK,EAAOA,EAAKld,QAAQ6opB,EAAM,IAS9B,MACJ,IAAK,gBAGL,IAAK,aACD3roB,EAAOA,EAAKld,QAAQ6opB,EAAM,IAC1B,MACJ,IAAK,YACD3roB,EAAOA,EAAKld,QAAQ,SAAU,IAAIA,QAAQ,WAAY,IACtD,MACJ,IAAK,cACDkd,EAAOA,EAAKld,QAAQ,SAAU,IAAIA,QAAQ,WAAY,IAG9D,OAAOkd,GAEXkpuB,EAAmBt6vB,UAAUq7vB,UAAY,SAAU5osB,EAAMtmB,GACrD,IAAI4wnB,EAAOp4pB,KAAKi2vB,eAAej2vB,KAAKkxvB,OAAO1ptB,IAC3C,OAAQA,GACJ,IAAK,YACL,IAAK,cAED,OADA4wnB,EAAOp4pB,KAAKi2vB,eAAej2vB,KAAKkxvB,OAAO1ptB,KAC3BrkC,KAAK2qD,EAAKrhC,MAC1B,IAAK,OACL,IAAK,gBAED,OADA2roB,EAAOp4pB,KAAKk2vB,cAAcl2vB,KAAKkxvB,OAAO1ptB,GAASxQ,OAAO,EAAG,KAC7C7zB,KAAK2qD,EAAKrhC,MAC1B,IAAK,YACL,IAAK,YAED,OADA2roB,EAAO,IAAIp0oB,OAAO,KAAOhkB,KAAKkxvB,OAAO1ptB,GAAW,MAAO,MAC3CrkC,KAAK2qD,EAAKrhC,MAC1B,IAAK,SACD,IAAI2quB,OAAU,EACVH,EAAQj3vB,KAAKk2vB,cAAcl2vB,KAAKkxvB,OAAO1ptB,GAASxQ,OAAO,EAAG,IAC9D,GAAIiguB,EAAM9zvB,KAAK2qD,EAAKrhC,MAAO,CACvB,IAAIyquB,EAAUppsB,EAAKrhC,KACnByquB,EAAUA,EAAQ3nvB,QAAQ0nvB,EAAO,OACjCG,EAAUh/F,EAAKj1pB,KAAK+zvB,QAGpBE,EAAUh/F,EAAKj1pB,KAAK2qD,EAAKrhC,MAE7B,OAAO2quB,EACX,IAAK,aACD,OAAOh/F,EAAKj1pB,KAAK2qD,EAAKrhC,QAG3BkpuB,KC3SA0B,IACPC,GAAM,UACNC,GAAM,SACNC,GAAM,QACNC,GAAM,OACN1hjB,GAAM,MACN2hjB,GAAM,KACNC,WAAc,KACdznd,IAAO,QACPxlN,EAAK,IAKEktqB,IACPt1gB,KAAQ,KACRC,OAAU,IACVyzgB,cAAiB,KACjBD,WAAc,IACdlsf,UAAa,QACbC,YAAe,QACf+tf,UAAa,MACbC,UAAa,OAKNC,IACPhD,GAAM,MACNC,GAAM,MAKCgD,IACPC,gBAAiB,UACjB9jpB,OAAU,KACV+jpB,cAAe,SACfC,eAAgB,eAChBj4U,KAAQ,SACRC,KAAQ,SACR5gb,KAAQ,SACRkra,IAAO,SACPqB,MAAS,SACTp9X,KAAQ,SACR6C,OAAU,SACV2jO,UAAa,SACbq1O,cAAiB,eACjBq0P,UAAa,eACbD,UAAa,eACbh5I,YAAe,eACfC,UAAa,SACb20B,QAAW,SACX69H,SAAY,SACZC,cAAe,eACfC,cAAe,eACfC,oBAAqB,eACrBC,oBAAqB,eACrBC,iBAAkB,SAClBC,eAAgB,SAChBC,eAAgB,SAChBC,gBAAiB,SACjBC,eAAgB,eAChBC,eAAgB,eAChBC,iBAAkB,aAClBl7tB,MAAS,KACTk2E,MAAS,MAKFilpB,IACPf,gBAAiB,UACjB9jpB,OAAU,KACV+jpB,cAAe,SACfC,eAAgB,eAChBj4U,KAAQ,SACRC,KAAQ,SACR5gb,KAAQ,SACRkra,IAAO,SACPqB,MAAS,SACTp9X,KAAQ,SACR6C,OAAU,SACVg5c,cAAiB,eACjBq0P,UAAa,eACbD,UAAa,eACbh5I,YAAe,eACfC,UAAa,SACb0yJ,cAAe,eACfQ,eAAgB,eAChBC,iBAAkB,cCxFlBE,GAAkC,WAClC,SAASA,EAAiB34vB,EAAQ0S,GAC9BhT,KAAKuzvB,iBACLvzvB,KAAKM,OAASA,EACdN,KAAKk5vB,cAAiBz7vB,EAAkBuV,GAAmC,GAAxBA,EAAQkmvB,cAC3Dl5vB,KAAKm5vB,cAAiB17vB,EAAkBuV,GAAmC,IAAxBA,EAAQmmvB,cAC3Dn5vB,KAAK4vE,UAAY5vE,KAAKM,OAAOuzvB,kBAC7B7zvB,KAAKtD,mBAoIT,OAlIAu8vB,EAAiB59vB,UAAUqB,iBAAmB,WAC1C,IAAI0oF,EAAmBzlF,EAASK,KAAK4sI,MAAO5sI,KAAKm5vB,eACjDn5vB,KAAKM,OAAOu2qB,SAASjxlB,GAAGquqB,GAAuB7uqB,EAAkBplF,MACjEA,KAAKM,OAAOu2qB,SAASjxlB,GAAGouqB,GAAyBh0vB,KAAKulH,QAASvlH,MAC/DA,KAAKM,OAAOu2qB,SAASjxlB,GPRT,SOQ2B5lF,KAAKo5vB,SAAUp5vB,OAE1Di5vB,EAAiB59vB,UAAUuB,oBAAsB,WAC7C,IAAIwoF,EAAmBzlF,EAASK,KAAK4sI,MAAO,KAC5C5sI,KAAKM,OAAOu2qB,SAAS7wlB,IAAIiuqB,GAAuB7uqB,GAChDplF,KAAKM,OAAOu2qB,SAAS7wlB,IAAIguqB,GAAyBh0vB,KAAKulH,SACvDvlH,KAAKM,OAAOu2qB,SAAS7wlB,IPdT,SOc4BhmF,KAAKo5vB,WAOjDH,EAAiB59vB,UAAUiX,QAAU,WACjCtS,KAAKpD,uBAETq8vB,EAAiB59vB,UAAU+9vB,SAAW,SAAUv4vB,GACvB,SAAjBA,EAAE2yE,WACFxzE,KAAKkgb,KAAKr/a,GAGVb,KAAKmgb,KAAKt/a,IAGlBo4vB,EAAiB59vB,UAAUkqH,QAAU,SAAU1kH,GAC3C,IAAIvE,EAAQuE,EAAEvE,MAEd,OAAQA,EAAM65D,QACV,IAAK,OACD75D,EAAMkpB,iBAHFxlB,KAIEkgb,KAAKr/a,GACX,MACJ,IAAK,OACDvE,EAAMkpB,iBAPFxlB,KAQEmgb,KAAKt/a,KAIvBo4vB,EAAiB59vB,UAAUuxI,MAAQ,SAAU/rI,GACjB,KAApBA,EAAEvE,MAAMwrB,SAAmBjnB,EAAEvE,MAAMurB,SACnC7nB,KAAKg6Q,SAASn5Q,IAQtBo4vB,EAAiB59vB,UAAU2+Q,SAAW,SAAUn5Q,GAC5C,IAAIiwvB,EAAW9wvB,KAAKM,OAAOU,QAC3BhB,KAAK4vE,UAAU6d,KAAKqjqB,EAASnruB,eAAgBmruB,EAASjruB,cACtD,IAAItoB,EAAQuzvB,EAASnruB,eACjB9G,EAAMiyuB,EAASjruB,aAEfwzuB,GAAa5suB,KADDzsB,KAAKM,OAAOU,QAAQhE,MACFO,MAAOA,EAAOshB,IAAKA,GACjD7e,KAAKuzvB,cAAc92vB,QAAUuD,KAAKonI,QAClCpnI,KAAKuzvB,cAAgBvzvB,KAAKuzvB,cAAclyvB,MAAM,EAAGrB,KAAKonI,MAAQ,IAE9DpnI,KAAKuzvB,cAAc92vB,OAAS,GAAMuD,KAAKuzvB,cAAcvzvB,KAAKuzvB,cAAc92vB,OAAS,GAAGc,QAAUA,GAC7FyC,KAAKuzvB,cAAcvzvB,KAAKuzvB,cAAc92vB,OAAS,GAAGoiB,MAAQA,IAG/D7e,KAAKuzvB,cAAc/uvB,KAAK60vB,GACxBr5vB,KAAKonI,MAAQpnI,KAAKuzvB,cAAc92vB,OAAS,EACrCuD,KAAKuzvB,cAAc92vB,OAASuD,KAAKk5vB,eACjCl5vB,KAAKuzvB,cAAc51qB,QAEnB98E,GAAKA,EAAEm8D,UACPn8D,EAAEm8D,aAQVi8rB,EAAiB59vB,UAAU6kb,KAAO,SAAUr/a,GACxC,GAAIb,KAAKonI,MAAQ,EAAG,CAChBpnI,KAAK0ia,cAAgB,OACrB,IAAInla,EAAQyC,KAAKuzvB,cAAcvzvB,KAAKonI,MAAQ,GAAG7pI,MAC3CshB,EAAM7e,KAAKuzvB,cAAcvzvB,KAAKonI,MAAQ,GAAGvoH,IACzCy6uB,EAAiBt5vB,KAAKuzvB,cAAcvzvB,KAAKonI,MAAQ,GAAG36G,KACxDzsB,KAAKM,OAAOU,QAAQhE,MAAQs8vB,EAC5Bt5vB,KAAKM,OAAOU,QAAQkB,QACpBlC,KAAKonI,QACLpnI,KAAK6tF,QAAQ7tF,KAAKM,OAAOU,QAASzD,EAAOshB,EAAKhe,KAQtDo4vB,EAAiB59vB,UAAU8kb,KAAO,SAAUt/a,GACxC,GAA0C,MAAtCb,KAAKuzvB,cAAcvzvB,KAAKonI,MAAQ,GAAY,CAC5CpnI,KAAK0ia,cAAgB,OACrB,IAAInla,EAAQyC,KAAKuzvB,cAAcvzvB,KAAKonI,MAAQ,GAAG7pI,MAC3CshB,EAAM7e,KAAKuzvB,cAAcvzvB,KAAKonI,MAAQ,GAAGvoH,IAC7C7e,KAAKM,OAAOU,QAAQhE,MAAQgD,KAAKuzvB,cAAcvzvB,KAAKonI,MAAQ,GAAG36G,KAC/DzsB,KAAKM,OAAOU,QAAQkB,QACpBlC,KAAKonI,QACLpnI,KAAK6tF,QAAQ7tF,KAAKM,OAAOU,QAASzD,EAAOshB,EAAKhe,KAGtDo4vB,EAAiB59vB,UAAUwyF,QAAU,SAAUijqB,EAAUvzvB,EAAOshB,EAAKviB,GACjE0D,KAAK4vE,UAAU6d,KAAKlwF,EAAOshB,GAC3B7e,KAAK4vE,UAAUie,QAAQijqB,GACnBx0vB,GAASA,EAAM0gE,UACf1gE,EAAM0gE,UACFovH,YAAapsL,KAAK0ia,cAClBs/I,aAAchijB,KAAK4vE,UAAU2xlB,gBAAgBuvF,GAC7CsC,WAAY,WACZ92vB,MAAOA,EAAMA,SAIzB28vB,EAAiB59vB,UAAUqtvB,cAAgB,WACvC,IAAIlkqB,GAAW07V,MAAM,EAAOC,MAAM,GAOlC,OANIngb,KAAKonI,MAAQ,IACb5iD,EAAO07V,MAAO,GAEwB,MAAtClgb,KAAKuzvB,cAAcvzvB,KAAKonI,MAAQ,KAChC5iD,EAAO27V,MAAO,GAEX37V,GAEJy0qB,KC3IPM,GAAwB,WAKxB,SAASA,EAAOj5vB,GACZN,KAAKM,OAASA,EACdN,KAAK4vE,UAAY5vE,KAAKM,OAAOuzvB,kBAC7B7zvB,KAAKtD,mBA+BT,OA7BA68vB,EAAOl+vB,UAAUqB,iBAAmB,WAChCsD,KAAKM,OAAOu2qB,SAASjxlB,GAAG4zqB,GAAuBx5vB,KAAKy/uB,WAAYz/uB,OAEpEu5vB,EAAOl+vB,UAAUokvB,WAAa,SAAU5+uB,GACpC,IAAIiwvB,EAAW9wvB,KAAKM,OAAOU,QAC3B8vvB,EAAS5uvB,QACT,IAAI3E,EAAQuzvB,EAASnruB,eACjB9G,EAAMiyuB,EAASjruB,aACf4G,EAAyB,UAAjB5rB,EAAE2yE,WAA0BxzE,KAAK4vE,UAAU2xlB,gBAAgBuvF,GAAYjwvB,EAAEgd,KAAK4O,KACtF+pe,EAAgC,UAAjB31f,EAAE2yE,WAA2Bj2E,EAAQ,EAAMA,EAAQ,EAClE8igB,EAA8B,UAAjBx/f,EAAE2yE,WAA2B30D,EAAM,EAAMA,EAAM,EAChE4N,EAAyB,UAAjB5rB,EAAE2yE,WAA0B,KAAO/mD,EAAO,KAAO5rB,EAAEgd,KAAK+P,IAAM,IAAM,IAAMnB,EAAO,KAAO5rB,EAAEgd,KAAK+P,IAAM,IAC7GkjuB,EAAS9zvB,MAAQ8zvB,EAAS9zvB,MAAMg6B,OAAO,EAAGz5B,GACpCkvB,EAAOqkuB,EAAS9zvB,MAAMg6B,OAAOnY,EAAKiyuB,EAAS9zvB,MAAMP,QACvDuD,KAAKM,OAAOuzvB,kBAAkBzpiB,aAAa0miB,EAAUt6P,EAAa6J,GAClErggB,KAAK6tF,QAAQijqB,EAAUt6P,EAAa6J,EAAWx/f,IAEnD04vB,EAAOl+vB,UAAUwyF,QAAU,SAAUijqB,EAAUvzvB,EAAOshB,EAAKviB,GACvD0D,KAAK4vE,UAAU6d,KAAKlwF,EAAOshB,GAC3B7e,KAAK4vE,UAAUie,QAAQijqB,GACnBx0vB,GAASA,EAAM0gE,UACf1gE,EAAM0gE,UACFovH,YAAa9vL,EAAMk3E,WACnBwue,aAAchijB,KAAK4vE,UAAU2xlB,gBAAgBuvF,GAC7CsC,WAAY,WACZ92vB,MAAOA,EAAMA,SAIlBi9vB,KCvCPE,GAA6B,WAK7B,SAASA,EAAYn5vB,GACjBN,KAAKM,OAASA,EACdN,KAAK4vE,UAAY5vE,KAAKM,OAAOuzvB,kBAC7B7zvB,KAAKtD,mBAwFT,OAtFA+8vB,EAAYp+vB,UAAUqB,iBAAmB,WACrCsD,KAAKM,OAAOu2qB,SAASjxlB,GAAG8zqB,GAAwB15vB,KAAKgwD,MAAOhwD,OAEhEy5vB,EAAYp+vB,UAAUs+vB,aAAe,SAAUn9vB,GAC3C,OAAOA,EAAK+S,QAAQ,OAAQ,OAAOA,QAAQ,OAAQ,OAC9CA,QAAQ,OAAQ,OAAOA,QAAQ,OAAQ,OACvCA,QAAQ,OAAQ,OAAOA,QAAQ,OAAQ,OACvCA,QAAQ,OAAQ,OAAOA,QAAQ,OAAQ,OACvCA,QAAQ,OAAQ,OAAOA,QAAQ,OAAQ,OACvCA,QAAQ,OAAQ,QAEzBkqvB,EAAYp+vB,UAAUu+vB,mBAAqB,SAAUntuB,GAGjD,IAAK,IAFDjwB,EAAOwD,KAAKM,OAAOu5vB,cACnBv8vB,EAAOgB,OAAOhB,KAAKd,GACdb,EAAM,EAAGA,EAAM2B,EAAKb,OAAQd,IAAO,CACxC,IAAI0B,EAAMC,EAAK3B,GACf,GAAIa,EAAKmK,eAAetJ,IAAsB,KAAdb,EAAKa,GAAa,CAC9C,IAAIy8vB,EAAY95vB,KAAK25vB,aAAan9vB,EAAKa,IACnC08vB,OAAS,EACTC,OAAW,EACXC,OAAS,EAETF,EADc,UAAdv9vB,EAAKa,GACI,IAAI2mB,OAAO,mBAAqB,MAEtB,UAAdxnB,EAAKa,GACD,IAAI2mB,OAAO,mBAAqB,MAGhC,IAAIA,OAAO81uB,EAAY,QAAUA,EAAW,MAEzDE,EAAWx9vB,EAAKa,GAAKZ,OACrBw9vB,EAAwB,UAAdz9vB,EAAKa,IAAkC,UAAdb,EAAKa,GAAoBb,EAAKa,GAAKZ,OAAS,EAAID,EAAKa,GAAKZ,OAE7F,IAAK,IADDwrB,EAAMwE,EAAK9c,MAAMoqvB,GACZ9nvB,EAAQ,EAAGgW,GAAOhW,EAAQgW,EAAIxrB,QAAyB,KAAfwrB,EAAIhW,GAAeA,IAChEwa,EAAOA,EAAKld,QAAQ0Y,EAAIhW,GAAQgW,EAAIhW,GAAO+kB,OAAOgjuB,EAAU/xuB,EAAIhW,GAAOxV,OAASw9vB,EAASD,KAIrG,OAAOvtuB,GAEXgtuB,EAAYp+vB,UAAU6+vB,gBAAkB,SAAUztuB,GAI9C,IAAK,IAHDizN,EAAQjzN,EAAKvvB,MAAM,MACnB4gnB,GAAQ99mB,KAAKM,OAAOuxvB,WAAY7xvB,KAAKM,OAAOsxvB,UAC5CxivB,EAAM,GACDvN,EAAM,EAAGA,EAAM69O,EAAMjjP,OAAQoF,IAAO,CACzC,IAAK,IAAIlG,EAAM,EAAGA,EAAMminB,EAAKrhnB,OAAQd,IAGjC,IAAK,IAFDa,EAAOshnB,EAAKninB,GACZ2B,EAAOgB,OAAOhB,KAAKd,GACdyV,EAAQ,EAAGA,EAAQ3U,EAAKb,OAAQwV,IAAS,CAC9C,IAAI5U,EAAMC,EAAK2U,GACXzV,EAAKmK,eAAetJ,IAAsB,KAAdb,EAAKa,IACK,IAAlCqiP,EAAM79O,GAAKtD,QAAQ/B,EAAKa,MACxBqiP,EAAM79O,GAAO69O,EAAM79O,GAAK0N,QAAQ/S,EAAKa,GAAM,KAK3D+R,EAAMA,EAAMswO,EAAM79O,IAASA,IAAQ69O,EAAMjjP,OAAS,EAAK,KAAO,IAElE,OAAO2S,GAEXqqvB,EAAYp+vB,UAAU20D,MAAQ,SAAUnvD,GACpC,IAAIiwvB,EAAW9wvB,KAAKM,OAAOU,QAC3B8vvB,EAAS5uvB,QACT,IAAI3E,EAAQuzvB,EAASnruB,eACjB9G,EAAMiyuB,EAASjruB,aACf4G,EAAOzsB,KAAK4vE,UAAU2xlB,gBAAgBuvF,GAC1CrkuB,EAAOzsB,KAAK45vB,mBAAmBntuB,GAC/BA,EAAOzsB,KAAKk6vB,gBAAgBztuB,GAC5BqkuB,EAAS9zvB,MAAQ8zvB,EAAS9zvB,MAAMg6B,OAAO,EAAGz5B,GACpCkvB,EAAOqkuB,EAAS9zvB,MAAMg6B,OAAOnY,EAAKiyuB,EAAS9zvB,MAAMP,QACvDuD,KAAKM,OAAOuzvB,kBAAkBzpiB,aAAa0miB,EAAUvzvB,EAAOA,EAAQkvB,EAAKhwB,QACzEuD,KAAK6tF,QAAQijqB,EAAUvzvB,EAAOA,EAAQkvB,EAAKhwB,OAAQoE,IAEvD44vB,EAAYp+vB,UAAUwyF,QAAU,SAAUijqB,EAAUvzvB,EAAOshB,EAAKviB,GAC5D0D,KAAK4vE,UAAU6d,KAAKlwF,EAAOshB,GAC3B7e,KAAK4vE,UAAUie,QAAQijqB,GACnBx0vB,GAASA,EAAM0gE,UACf1gE,EAAM0gE,UACFovH,YAAa9vL,EAAMk3E,WACnBwue,aAAchijB,KAAK4vE,UAAU2xlB,gBAAgBuvF,GAC7CsC,WAAY,WACZ92vB,MAAOA,EAAMA,SAIlBm9vB,KCrFPU,GAAgC,WAKhC,SAASA,EAAennvB,GACpBhT,KAAKmuG,aACLzvG,EAAOsB,KAAMA,KAAMgT,GAAS,GAC5BhT,KAAK62qB,SAAW,IAAIpxlB,GAASzlF,MAC7BA,KAAK6zvB,kBAAoB,IAAIxD,GAC7BrwvB,KAAKo6vB,QAAU,IAAIxG,IAAUtzvB,OAAQN,KAAMkxvB,OAAQlxvB,KAAK4xvB,WACxD5xvB,KAAKq6vB,UAAY,IAAIjF,IAAY90vB,OAAQN,KAAMkxvB,OAAQlxvB,KAAK6xvB,aAC5D7xvB,KAAKyovB,gBAAkB,IAAIwQ,GAAiBj5vB,KAAMgT,EAAQA,SAC1DhT,KAAK0xvB,mBAAqB,IAAIiE,IAAqBr1vB,OAAQN,KAAMkxvB,OAAQlxvB,KAAK65vB,gBAC9E75vB,KAAKs6vB,QAAU,IAAIf,GAAOv5vB,MAC1BA,KAAKu6vB,SAAW,IAAId,GAAYz5vB,MAChCA,KAAKukB,aA0CT,OAxCA41uB,EAAe9+vB,UAAU8yG,WAAa,WAClCnuG,KAAK6xvB,WAAawF,GAClBr3vB,KAAK4xvB,SAAWmG,GAChB/3vB,KAAK65vB,cAAgBjC,IAEzBuC,EAAe9+vB,UAAUkpB,WAAa,WAClCvkB,KAAK62qB,SAASjxlB,GVlCA,UUkCoB5lF,KAAKw6vB,cAAex6vB,MACtDA,KAAK62qB,SAASjxlB,GVXF,QUWoB5lF,KAAKy6vB,YAAaz6vB,OAEtDm6vB,EAAe9+vB,UAAUm/vB,cAAgB,SAAU35vB,GAC/Cb,KAAK62qB,SAAS9oqB,OAAOimvB,GAAyBnzvB,IAElDs5vB,EAAe9+vB,UAAUo/vB,YAAc,SAAU55vB,GAC7Cb,KAAK62qB,SAAS9oqB,OAAOkmvB,GAAuBpzvB,IAEhDs5vB,EAAe9+vB,UAAU08iB,YAAc,SAAUvwgB,EAASxqC,EAAOV,EAAO0gE,EAAUvwC,EAAMiuuB,GACpF,OAAQlztB,EAAQ+zB,qBACZ,IAAK,QACDv7D,KAAK62qB,SAAS9oqB,OAAO+lvB,IAA0BtgrB,WAAYx2E,EAAOV,MAAOA,EAAO0gE,SAAUA,IAC1F,MACJ,IAAK,UACDh9D,KAAK62qB,SAAS9oqB,OAAOsnvB,IAAsB7hrB,WAAYx2E,EAAOV,MAAOA,EAAO0gE,SAAUA,IACtF,MACJ,IAAK,UACDh9D,KAAK62qB,SAAS9oqB,OVhDV,UUgDkCylE,WAAYx2E,EAAOV,MAAOA,EAAO0gE,SAAUA,IACjF,MACJ,IAAK,QACL,IAAK,UACL,IAAK,SACDh9D,KAAK62qB,SAAS9oqB,OAAO0nvB,IAA6BjirB,WAAYx2E,EAAOV,MAAOA,EAAO0gE,SAAUA,IAC7F,MACJ,IAAK,QACL,IAAK,SACDh9D,KAAK62qB,SAAS9oqB,OAAOyrvB,IAAyBhmrB,WAAYx2E,EAAOV,MAAOA,EAAO0gE,SAAUA,EAAUn/C,KAAM68uB,IACzG,MACJ,IAAK,QACD16vB,KAAK62qB,SAAS9oqB,OAAO2rvB,IAA0BlmrB,WAAYx2E,EAAOV,MAAOA,EAAO0gE,SAAUA,MAI/Fm9rB,KC1EP7vqB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAkBxCgwqB,GAAmC,SAAUxvqB,GAE7C,SAASwvqB,EAAkB3nvB,GACvB,IAAIjT,EAAQorF,EAAO7pF,KAAKtB,OAASA,KAMjC,OALAD,EAAMouG,aACNzvG,EAAOqB,EAAOA,EAAOiT,GAAS,GAC1BA,GAAWjT,EAAMiB,SACjBjB,EAAM66vB,gBAAgB76vB,EAAMiB,QAASR,SAAUwS,EAAQA,SAEpDjT,EAwBX,OAhCAuqF,GAAUqwqB,EAAmBxvqB,GAU7BwvqB,EAAkBt/vB,UAAU8yG,WAAa,WACrCnuG,KAAK+lvB,UAAYiT,GACjBh5vB,KAAK6xvB,WAAawF,GAClBr3vB,KAAK4xvB,SAAWmG,GAChB/3vB,KAAK65vB,cAAgBjC,IAOzB+C,EAAkBt/vB,UAAUu/vB,gBAAkB,SAAUC,EAAaz9e,EAAKpqQ,GAClE6nvB,IACA76vB,KAAKwovB,cAAgB,IAAI2R,IACrBn5vB,QAAS65vB,EACThJ,WAAY7xvB,KAAK6xvB,WACjBD,SAAU5xvB,KAAK4xvB,SACfiI,cAAe75vB,KAAK65vB,cACpB7mvB,QAASA,MAId2nvB,GACTlI,IC/CEqI,GAAgC,WAIhC,SAASA,EAAex6vB,GACpBN,KAAKM,OAASA,EACdN,KAAK+6vB,MAAQ/6vB,KAAKM,OAAOU,QAAQsC,GA4CrC,OAvCAw3vB,EAAez/vB,UAAU0ioB,YAAc,WACnC,IAAIi9H,EAASh7vB,KAAKM,OACdY,EAAMC,EAAc,OAASmC,GAAItD,KAAK+6vB,MAAQ,QAAS13vB,UAAW,kBACtErD,KAAKwlvB,gBAAkBrkvB,EAAc,YACjCkC,UAAW,YACXC,GAAItD,KAAK+6vB,MAAQ,sBAErB75vB,EAAIS,YAAY3B,KAAKwlvB,iBACrBxlvB,KAAKk+nB,SAASh9nB,GACd85vB,EAAOh6vB,QAAQW,YAAYT,IAM/B45vB,EAAez/vB,UAAU2hoB,SAAW,WAChC,OAAOh9nB,KAAKggoB,cAMhB86H,EAAez/vB,UAAUoqvB,aAAe,WACpC,OAAOzlvB,KAAKwlvB,iBAMhBsV,EAAez/vB,UAAU6ioB,SAAW,SAAU+B,GAC1CjgoB,KAAKggoB,aAAeC,GAMxB66H,EAAez/vB,UAAU66E,YAAc,WACnC,OAAOl2E,KAAKylvB,eAAe3wuB,eAExBgmvB,KC7CPG,GAAgC,WAChC,SAASA,EAAe36vB,EAAQghE,GAC5BthE,KAAKM,OAASA,EACdN,KAAKuloB,QAAUjkkB,EACfthE,KAAKwjvB,cAAgBxjvB,KAAKuloB,QAAQ/jkB,WAAW,mBAC7CxhE,KAAKtD,mBA8HT,OAvHAu+vB,EAAe5/vB,UAAUiX,QAAU,WAC/BtS,KAAKpD,uBAETq+vB,EAAe5/vB,UAAUqB,iBAAmB,WACpCsD,KAAKM,OAAO0mF,cAGhBhnF,KAAKk7vB,cAAgB,IAAI7K,GACzBrwvB,KAAKM,OAAOslF,GAAG6ljB,GAAoBzroB,KAAKqroB,oBAAqBrroB,MAC7DA,KAAKM,OAAOslF,GAAGm1jB,GAAmB/6oB,KAAK+rG,OAAQ/rG,MAC/CA,KAAKM,OAAOslF,GAAG8ljB,GAAqB1roB,KAAKwnF,kBAAmBxnF,MAC5DA,KAAKM,OAAOslF,GAAG0/pB,GAA6BtlvB,KAAKm7vB,eAAgBn7vB,MACjEA,KAAKM,OAAOslF,GAAGguiB,GAAgB5znB,KAAKsS,QAAStS,MAC7CA,KAAKM,OAAOslF,GAAGw1qB,GAAkBp7vB,KAAK4F,UAAW5F,MACjDA,KAAKM,OAAOslF,GAAGy1qB,GAAwBr7vB,KAAKu7uB,gBAAiBv7uB,MAC7DA,KAAKM,OAAOslF,GAAGi8pB,GAAsB7hvB,KAAKs7vB,gBAAiBt7vB,MAC3DA,KAAKM,OAAOslF,GAAGm8pB,GAAyB/hvB,KAAKu7vB,mBAAoBv7vB,QAErEi7vB,EAAe5/vB,UAAUigwB,gBAAkB,WACvC,IAAIxK,EAAW9wvB,KAAKM,OAAO21E,cAAcwvqB,eACzCzlvB,KAAKk7vB,cAAcztqB,KAAKqjqB,EAASnruB,eAAgBmruB,EAASjruB,eAE9Do1uB,EAAe5/vB,UAAUkgwB,mBAAqB,SAAU16vB,GACpDb,KAAKkpoB,gBAAgBu8G,eAAevjvB,QACpC,IAAI4uvB,EAAW9wvB,KAAKM,OAAO21E,cAAcwvqB,eACzCzlvB,KAAKk7vB,cAAcrtqB,QAAQijqB,IAE/BmK,EAAe5/vB,UAAU8/vB,eAAiB,SAAUl7vB,GAChD,IAAIwsB,EACA+pe,EACA6J,EACAxif,EAAO5d,EAAK4d,KAChB,GAA+B,aAA3B7d,KAAKM,OAAO8yvB,WAA2B,CACvC,IAAItC,EAAW9wvB,KAAKM,OAAO21E,cAAcwvqB,eACzCqL,EAAS5uvB,QACTs0f,EAAcs6P,EAASnruB,eACvB06e,EAAYywP,EAASjruB,aACrB4G,EAAOqkuB,EAAS9zvB,MAAMknB,UAAUsye,EAAa6J,GAEjD,OAAQxif,EAAK21D,YACT,IAAK,WACDxzE,KAAKM,OAAOyN,OAAO27uB,IAA2BzpvB,KAAMA,IACpD,MACJ,IAAK,WACDD,KAAKM,OAAOyN,OAAO47uB,IAA4B1pvB,KAAMA,IACrD,MACJ,IAAK,aACDD,KAAKM,OAAOyN,OAAOytvB,IAAqBnqqB,OAAQ,OAAQpxF,KAAMA,EAAMwsB,KAAMA,EAAM0kE,OAAQ,aACxF,MACJ,IAAK,QACDnxF,KAAKM,OAAOyN,OAAO0tvB,IAAsBpqqB,OAAQ,QAASpxF,KAAMA,EAAMwsB,KAAMA,EAAM0kE,OAAQ,aAC1F,MACJ,QACInxF,KAAKM,OAAOusY,UAAU75T,QAAQhzE,KAAKM,OAAQL,EAAMA,EAAKi7G,cAAe,QAIjF+/oB,EAAe5/vB,UAAUgwoB,oBAAsB,WAC3CrroB,KAAKwjvB,cAAcl4G,YAAYxd,GAAWqb,QAAS,IAAI2xH,GAAe96vB,KAAKM,UAE/E26vB,EAAe5/vB,UAAUuB,oBAAsB,WACvCoD,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAO0lF,IAAI+0jB,GAAmB/6oB,KAAK+rG,QACxC/rG,KAAKM,OAAO0lF,IAAI0ljB,GAAqB1roB,KAAKwnF,mBAC1CxnF,KAAKM,OAAO0lF,IAAI4tiB,GAAgB5znB,KAAKsS,SACrCtS,KAAKM,OAAO0lF,IAAIs/pB,GAA6BtlvB,KAAKm7vB,gBAClDn7vB,KAAKM,OAAO0lF,IAAIyljB,GAAoBzroB,KAAKqroB,qBACzCrroB,KAAKM,OAAO0lF,IAAIo1qB,GAAkBp7vB,KAAK4F,WACvC5F,KAAKM,OAAO0lF,IAAIq1qB,GAAwBr7vB,KAAKu7uB,iBAC7Cv7uB,KAAKM,OAAO0lF,IAAI67pB,GAAsB7hvB,KAAKs7vB,iBAC3Ct7vB,KAAKM,OAAO0lF,IAAI+7pB,GAAyB/hvB,KAAKu7vB,sBAElDN,EAAe5/vB,UAAU0wG,OAAS,WAC9B/rG,KAAKkpoB,gBAAkBlpoB,KAAKwjvB,cAAcv6G,YAAYnb,GAAWqb,SACjE,IAAI0xH,EAAc76vB,KAAKkpoB,gBAAgBu8G,eACnC1vpB,GAAWmjqB,cAAel5vB,KAAKM,OAAO44vB,cAAeC,cAAen5vB,KAAKM,OAAO64vB,eAChF17vB,EAAkBuC,KAAKM,OAAOusY,WAC9B7sY,KAAKM,OAAOusY,UAAY,IAAI8tX,IACxB35vB,QAAS65vB,EACT7nvB,QAAS+iF,IAIb/1F,KAAKM,OAAOusY,UAAU+tX,gBAAgBC,EAAa76vB,KAAKkpoB,gBAAgBhzjB,cAAe6f,GAEvF/1F,KAAKM,OAAOk0E,gBAAgB/0C,SAC5Bz/B,KAAK07vB,cAAgB,IAAItK,GAAsBpxvB,KAAKM,SAExDN,KAAKM,OAAOyN,OAAOy7uB,QAMvByR,EAAe5/vB,UAAUmsF,kBAAoB,SAAU3mF,KAMvDo6vB,EAAe5/vB,UAAUkkC,cAAgB,WACrC,MAAO,kBAMX07tB,EAAe5/vB,UAAUuK,UAAY,WACjC5F,KAAKM,OAAOusY,UAAU27W,cAAcqL,kBAAkBzpiB,aAAapqN,KAAKM,OAAO21E,cAAcwvqB,eAAgB,EAAGzlvB,KAAKM,OAAO21E,cAAcwvqB,eAAezovB,MAAMP,SAMnKw+vB,EAAe5/vB,UAAUkgvB,gBAAkB,SAAU16uB,GACjDA,EAAEm8D,SAASh9D,KAAKM,OAAOusY,UAAU27W,cAAcqL,kBAAkBtyF,gBAAgBvhqB,KAAKM,OAAO21E,cAAcwvqB,kBAExGwV,KCvIAU,GAAQ,eAKRC,GAAiB,iBAUjBC,IAAc,UAAW,UAAW,QAAS,QAAS,aAC7D,SAAU,UAAW,KAAM,MAAO,KAAM,KAAM,WAAY,aAAc,SAAU,SAClF,OAAQ,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,SAAU,SAAU,KAAM,KAAM,OAAQ,MACpF,WAAY,KAAM,SAAU,IAAK,MAAO,UAAW,QAAS,QAAS,KAAM,QAAS,KACpF,QAAS,KAAM,KAAM,SAIdC,GAAiB,iBAIjBC,GAAkB,kBC9BzBC,GAA+B,WAC/B,SAASA,IACLh8vB,KAAKi8vB,iBACLj8vB,KAAKk8vB,eAgNT,OA9MAF,EAAc3gwB,UAAU8gwB,aAAe,SAAUpquB,EAAOhmB,GASpD,OARA/L,KAAK+xB,MAAQA,EAAMqquB,aACnBp8vB,KAAKmyT,SAAWnyT,KAAKq8vB,kBAAkBtquB,GACvC/xB,KAAK+L,KAAOA,EACZ/L,KAAKs8vB,eAAiBt8vB,KAAKu8vB,aAAaxquB,EAAMuquB,gBAAgB,GAC9Dt8vB,KAAKw8vB,aAAex8vB,KAAKu8vB,aAAaxquB,EAAMyquB,cAAc,GAC1Dx8vB,KAAKw2f,YAAczke,EAAMyke,YACzBx2f,KAAKqggB,UAAYtue,EAAMsue,UACvBrggB,KAAK2sM,KAAO3sM,KAAK+L,KAAK/J,UACfhC,MAEXg8vB,EAAc3gwB,UAAUghwB,kBAAoB,SAAUtquB,GAClD,OAAQ,IAAMA,EAAMuquB,eAAev2vB,SAAYgsB,EAAMuquB,eAAiBvquB,EAAMuquB,eAAexnvB,eAE/FknvB,EAAc3gwB,UAAUszvB,SAAW,SAAU8N,GACzC,IAAIh3vB,EAASzF,KAAK0H,IAAI+0vB,GAClB1quB,EAAQtsB,GAAUA,EAAOitvB,WAAa,EAAIjtvB,EAAOktvB,WAAWltvB,EAAOitvB,WAAa,GAAK+J,EAAW9kN,cACpG,OAAQ5lhB,EAAMuquB,iBAAmBG,GAAc1quB,EAAMyquB,eAAiBC,GAC/D1quB,EAAMyke,aAAezke,EAAMsue,YAActue,EAAMqmhB,SAASqkN,EAAW1wvB,KAAM,GAC5EgmB,EAAMmmR,UAAS,IACfnmR,GAERiquB,EAAc3gwB,UAAUqM,IAAM,SAAU+0vB,GACpC,OAAOA,EAAWvivB,YAAYusgB,gBAElCu1O,EAAc3gwB,UAAUoyF,KAAO,SAAU17D,EAAO0quB,GAE5C,OADA1quB,EAAQ,EAAUA,EAAMqquB,aAAep8vB,KAAK2uvB,SAAS8N,GAC9Cz8vB,KAAKm8vB,aAAapquB,EAAO0quB,EAAW1wvB,OAE/CiwvB,EAAc3gwB,UAAUg4E,SAAW,SAAU9yE,GACzC,IACI5E,EAAM,EAEV,GADA4E,EAAOA,EAAKsnM,gBAER,IAAgBtnM,EAAKwF,SAAUxF,EAAM,KAEjC5E,IADQ4E,EAAKwF,SAGbxF,EAAOA,EAAKsnM,gBAGpB,OAAOlsM,GAEXqgwB,EAAc3gwB,UAAUqhwB,YAAc,SAAUzoV,EAAgBxza,GAC5D,IAAK,IAAIwR,EAAQ,EAAGA,EAAQxR,EAAW8Q,WAAW9U,OAAQwV,IACtD,GAAIgia,EAAe11a,QAAQkC,EAAW8Q,WAAWU,KAAW,EACxD,OAAO,EAGf,OAAO,GAEX+pvB,EAAc3gwB,UAAUm+T,QAAU,SAAUxJ,EAAWwC,EAASyhH,GAC5D,OAAIzhH,IAAYxC,GACY,IAAvBA,EAAUjqT,UAAmBiqT,EAAUpzS,aAAgE,IAAlDq3Z,EAAe11a,QAAQyxT,EAAUpzS,cAChF5c,KAAK08vB,YAAYzoV,EAAgBjkH,IAGU,IAAlDikH,EAAe11a,QAAQyxT,EAAUpzS,aAAsBozS,EAAUpzS,aAAe5c,KAAK08vB,YAAYzoV,EAAgBjkH,GAC1GA,EAAUpzS,WAEjBozS,EAAUx9K,YACHw9K,EAAUx9K,YAEhBw9K,EAAUvvT,WAIJuvT,EAAUvvT,WAHV,KATA,MAefu7vB,EAAc3gwB,UAAUshwB,kBAAoB,SAAU5quB,GAClD,IAAIi+R,EAAYj+R,EAAMuquB,eAAe/qvB,WAAWwgB,EAAMyke,cAC/Czke,EAAMuquB,eACT9pc,EAAUzgS,EAAMyquB,aAAajrvB,WAAYwgB,EAAMsue,UAAY,EAAMtue,EAAMsue,UAAY,EAAKtue,EAAMsue,YAC3Ftue,EAAMyquB,aACb,GAAIxsc,IAAcwC,GAA2C,IAAhCxC,EAAUz+S,WAAW9U,OAC9C,OAAQuzT,GAEZ,IAAIikH,KACJ,IAC+C,IAAvCA,EAAe11a,QAAQyxT,IACvBikH,EAAezva,KAAKwrT,GAExBA,EAAYhwT,KAAKw5T,QAAQxJ,EAAWwC,EAASyhH,SACxCjkH,GACT,OAAOikH,GAEX+nV,EAAc3gwB,UAAUuhwB,wBAA0B,SAAU7quB,GACxD,OAAO/xB,KAAK68vB,eAAe78vB,KAAK28vB,kBAAkB5quB,GAAQA,IAE9DiquB,EAAc3gwB,UAAUwhwB,eAAiB,SAAU5oV,EAAgBliZ,GAC/DkiZ,EAAiBA,EAAev0X,UAChC,IAAK,IAAIztC,EAAQ,EAAGA,EAAQgia,EAAex3a,OAAQwV,KACoB,IAA9Dgia,EAAe11a,QAAQ01a,EAAehia,GAAOxR,aACP,IAAnCwza,EAAehia,GAAOlM,UACtBgsB,EAAMuquB,iBAAmBvquB,EAAMyquB,cACnCvoV,EAAe5rZ,OAAOpW,EAAO,GAC7BA,KAEwC,IAAnCgia,EAAehia,GAAOlM,WAC3Bkua,EAAehia,GAASgia,EAAehia,GAAOxR,YAGtD,OAAOwza,GAEX+nV,EAAc3gwB,UAAUyhwB,2BAA6B,SAAU/quB,GAC3D,OAAO/xB,KAAK+8vB,kBAAkB/8vB,KAAK28vB,kBAAkB5quB,KAEzDiquB,EAAc3gwB,UAAU0hwB,kBAAoB,SAAU9oV,GAClDA,EAAiBA,EAAev0X,UAChC,IAAK,IAAIztC,EAAQ,EAAGA,EAAQgia,EAAex3a,OAAQwV,IACR,IAAnCgia,EAAehia,GAAOlM,UAA+D,KAA7Ckua,EAAehia,GAAO4J,YAAY3L,SAC1E+ja,EAAe5rZ,OAAOpW,EAAO,GAC7BA,KAGR,OAAOgia,EAAev0X,WAE1Bs8sB,EAAc3gwB,UAAU2hwB,wBAA0B,SAAUjruB,GACxD,OAAO/xB,KAAKi9vB,eAAej9vB,KAAK28vB,kBAAkB5quB,KAEtDiquB,EAAc3gwB,UAAU4hwB,eAAiB,SAAUhpV,GAC/CA,EAAiBA,EAAev0X,UAChC,IAAK,IAAIztC,EAAQ,EAAGA,EAAQgia,EAAex3a,OAAQwV,KACE,IAA5Cgia,EAAehia,GAAOV,WAAW9U,QACC,IAAnCw3a,EAAehia,GAAOlM,UACc,IAAnCkua,EAAehia,GAAOlM,UACmB,KAAtCkua,EAAehia,GAAO4J,eAC1Bo4Z,EAAe5rZ,OAAOpW,EAAO,GAC7BA,KAGR,OAAOgia,EAAev0X,WAE1Bs8sB,EAAc3gwB,UAAUkhwB,aAAe,SAAUh8vB,EAAM+6Y,EAAStgN,GAC5D,IAAI/lI,KAEJ,IADC,EAAaj1D,KAAKi8vB,iBAAuBj8vB,KAAKk8vB,eACxC37vB,KAAUy6L,GAAch7L,KAAKmyT,UAAW,KAC3C,EAAYnyT,KAAKi8vB,cAAcz3vB,KAAKjE,EAAK2R,SAAS0D,eAAiB5V,KAAKk8vB,YAAY13vB,KAAKjE,EAAK2R,SAAS0D,eACvGq/C,EAAMzwD,KAAKxE,KAAKqzE,SAAS9yE,IACzBA,EAAOA,EAAKE,WAEhB,OAAOw0D,GAEX+msB,EAAc3gwB,UAAU6hwB,cAAgB,SAAUnruB,EAAOoruB,EAASxhwB,EAAKmxB,GAInE,IAHA,IAAIvsB,EAAOP,KAAKmyT,SACZlgT,EAAQtW,EAAIc,OACZ2gwB,EAAWtwuB,EACR7a,IAAS,KACZ1R,EAAOA,EAAKgR,WAAW5V,EAAIsW,IAK/B,OAHI1R,GAAQ68vB,GAAY,GACpBrruB,EAAMoruB,EAAU,WAAa,UAAU58vB,EAAM68vB,GAE1CrruB,GAEXiquB,EAAc3gwB,UAAUwyF,QAAU,WAC9B,IAAI97D,EAAQ/xB,KAAK+xB,MAAMqquB,aAIvB,OAHArquB,EAAQ/xB,KAAKk9vB,cAAcnruB,GAAO,EAAM/xB,KAAKs8vB,eAAgBt8vB,KAAKw2f,aAClEzke,EAAQ/xB,KAAKk9vB,cAAcnruB,GAAO,EAAO/xB,KAAKw8vB,aAAcx8vB,KAAKqggB,WACjErggB,KAAKw+M,YAAYx+M,KAAKmyT,SAAUpgS,GACzBA,GAEXiquB,EAAc3gwB,UAAUmjN,YAAc,SAAUi+iB,EAAY1quB,GACxD/xB,KAAKg5B,SAASyjuB,EAAY1quB,GAC1B/xB,KAAKytF,KAAK17D,EAAO0quB,IAErBT,EAAc3gwB,UAAU29B,SAAW,SAAUyjuB,EAAY1quB,GACrD,IAAI69C,EAAY5vE,KAAK0H,IAAI+0vB,GACzB7srB,EAAU8ne,kBACV9ne,EAAUioe,SAAS9lhB,IAEvBiquB,EAAc3gwB,UAAUgiwB,iBAAmB,SAAUZ,EAAYzsc,EAAWwC,EAAS9sS,EAAYE,GAC7F,IAAImM,EAAQ0quB,EAAW9kN,cACvB5lhB,EAAMqmhB,SAASpoP,EAAWtqS,GAC1BqM,EAAMuruB,OAAO9qc,EAAS5sS,GACtB5lB,KAAKg5B,SAASyjuB,EAAY1quB,IAE9BiquB,EAAc3gwB,UAAUkiwB,qBAAuB,SAAUd,EAAYz7vB,GACjE,IAAI+wB,EAAQ0quB,EAAW9kN,cACvB5lhB,EAAMw5R,WAAWvqT,GACjBhB,KAAKg5B,SAASyjuB,EAAY1quB,IAE9BiquB,EAAc3gwB,UAAUmiwB,iBAAmB,SAAUf,EAAYz7vB,GAC7D,IAAI+wB,EAAQ0quB,EAAW9kN,cACvB5lhB,EAAM6lhB,mBAAmB52iB,GACzBhB,KAAKg5B,SAASyjuB,EAAY1quB,IAE9BiquB,EAAc3gwB,UAAUoiwB,iBAAmB,SAAUhB,GACjD,OAAOz8vB,KAAK28vB,kBAAkB38vB,KAAK2uvB,SAAS8N,KAEhDT,EAAc3gwB,UAAUo7I,MAAQ,SAAUgmnB,GACtCz8vB,KAAK0H,IAAI+0vB,GAAY/kN,mBAEzBskN,EAAc3gwB,UAAUqiwB,iBAAmB,SAAUjB,EAAYvvV,EAASn7Y,GACtEA,EAAM4ruB,iBAAiBzwV,GACvBlta,KAAKw+M,YAAYi+iB,EAAY1quB,IAEjCiquB,EAAc3gwB,UAAUuiwB,eAAiB,SAAUnB,EAAYz7vB,EAAS8yB,GACpE,IAAI/B,EAAQ0quB,EAAW9kN,cACnB/ne,EAAY6srB,EAAWvivB,YAAYusgB,eACvC10f,EAAMqmhB,SAASp3iB,EAAS8yB,GACxB/B,EAAMmmR,UAAS,GACftoO,EAAU8ne,kBACV9ne,EAAUioe,SAAS9lhB,IAEhBiquB,KCnNA6B,IACPC,eAAgB,wBAChB9hO,aAAc,uBAMd+hO,GAAyB,WAKzB,SAASA,EAAQz9vB,EAAQ09vB,GACrBh+vB,KAAKM,OAASA,EACdN,KAAKi+vB,cAAgB,IAAIjC,GACzBh8vB,KAAKg+vB,gBAAkBA,EAgS3B,OA9RAD,EAAQ1iwB,UAAUqwO,SAAW,SAAU1qO,GACnC,OAAQA,GAAW,WAAaA,EAAQgC,QAAUxE,MAAMnD,UAAUgG,MAAMC,KAAKN,EAAQuQ,oBAEzFwsvB,EAAQ1iwB,UAAU6iwB,YAAc,SAAUl9vB,GACtC,QAAUA,GAAYA,EAAQ+E,WAAaohD,KAAKy2D,cAAgBugpB,GAAoB5/vB,QAAQyC,EAAQgC,QAAQ4S,gBAAkB,GAElImovB,EAAQ1iwB,UAAU+iwB,OAAS,SAAUp9vB,GACjC,QAAUA,GAAYA,EAAQ+E,WAAaohD,KAAKy2D,cAAgB,MAAQ58G,EAAQgC,QAAQ4S,eAE5FmovB,EAAQ1iwB,UAAUgjwB,gBAAkB,SAAUr9vB,GAC1C,KAAOA,GAAWA,EAAQP,aAAeT,KAAKM,UAAaU,EAAQP,aAC9DT,KAAK+zC,SAAS/yC,EAAQP,WAAY,iBAAmB,KAEtD,GADAO,EAAUA,EAAQP,WACdT,KAAKk+vB,YAAYl9vB,GACjB,OAAOA,EAGf,OAAOA,GAEX+8vB,EAAQ1iwB,UAAUijwB,cAAgB,SAAUt9vB,GACxC,IAAIu9vB,KACA76vB,EAAa1C,EAAQ0C,WACzB,GAAIA,EAAWjH,OAAS,EACpB,IAAK,IAAI8xB,EAAI,EAAGA,EAAI7qB,EAAWjH,OAAQ8xB,IAAK,CACxC,IAAI1tB,EAAI6C,EAAW6qB,GACnBgwuB,EAAQ19vB,EAAEqR,UAAYrR,EAAE7D,MAGhC,OAAOuhwB,GAEXR,EAAQ1iwB,UAAUqI,WAAa,SAAU1C,GACrC,IAAKA,EACD,MAAO,GAKX,IAAK,IAHD8mJ,EAAO,GACPy2mB,EAAUv+vB,KAAKs+vB,cAAct9vB,GAC7Bw9vB,EAAelgwB,OAAOhB,KAAKihwB,GAAS1muB,OAC/Bh3B,EAAI,EAAGA,EAAI29vB,EAAa/hwB,OAAQoE,IAAK,CAC1C,IAAI49vB,EAAUD,EAAa39vB,GACvB69vB,EAAYH,EAAQE,GAEpBC,EAAUngwB,QAAQ,KAAO,GAAKmgwB,EAAUngwB,QAAQ,MAAQ,EACxDupJ,GAAQ,IAAM22mB,EAAU,KAAOC,EAAY,IAEtCA,EAAUngwB,QAAQ,MAAQ,GAAKmgwB,EAAUngwB,QAAQ,MAAQ,EAG9DupJ,GAAQ,IAAM22mB,EAAU,MADxBC,EAAYA,EAAUnvvB,QAAQ,KAAM,WACO,IAG3Cu4I,GAAQ,IAAM22mB,EAAU,KAAOC,EAAY,IAGnD,OAAO52mB,GAEXi2mB,EAAQ1iwB,UAAUsjwB,gBAAkB,SAAU39vB,GAC1C,IAAK,IAAI8mJ,EAAO9mJ,EAAQ0C,WAAYu6D,EAAI6pF,EAAKrrJ,OAAS,EAAGwhE,GAAK,EAAGA,IAAK,CAClE,IAAI5gE,EAAMyqJ,EAAK7pF,GACfj9D,EAAQ0K,gBAAgBrO,EAAI6U,YAGpC6rvB,EAAQ1iwB,UAAUujwB,cAAgB,SAAU59vB,GACxC,MAAO,IAAMA,EAAQgC,QAAQ4S,cAAgB5V,KAAK0D,WAAW1C,GAAW,KAE5E+8vB,EAAQ1iwB,UAAUwjwB,eAAiB,SAAU79vB,GACzC,MAAO,KAAOA,EAAQgC,QAAQ4S,cAAgB,KAElDmovB,EAAQ1iwB,UAAUyjwB,gBAAkB,SAAU97vB,EAAS+7vB,EAAiB/8vB,GACpE,MAAO,IAAMgB,EAAQ4S,cAAgB5V,KAAK0D,WAAWq7vB,GAAmB,IAAM/8vB,EAAY,KAAOgB,EAAQ4S,cAAgB,KAE7HmovB,EAAQ1iwB,UAAUi7hB,OAAS,SAAUt1hB,GACjC,QAASA,IAAY,KAAM,MAAMzC,QAAQyC,EAAQgC,UAAY,GAEjE+6vB,EAAQ1iwB,UAAUqnpB,UAAY,SAAU1hpB,GACpC,OAAOA,IAAYhB,KAAKM,QAE5By9vB,EAAQ1iwB,UAAUmlE,WAAa,SAAUx/D,GACrC,QAAUA,EAAQ6R,cAA4D,SAA5C7R,EAAQ6R,aAAa,sBAC/C,QAAS,UAAUtU,QAAQyC,EAAQgC,SAAW,GAE1D+6vB,EAAQ1iwB,UAAU04C,SAAW,SAAU/yC,EAASqC,GAC5C,OAAOrC,GAAWA,EAAQ8C,WAAa9C,EAAQ8C,UAAUK,SAASd,IAEtE06vB,EAAQ1iwB,UAAU+kjB,YAAc,SAAUp/iB,EAAShE,GAC9BgE,EAAQP,WACdyE,aAAalF,KAAKg/vB,kBAAkBhiwB,GAAQgE,GACvDqE,EAAOrE,IAEX+8vB,EAAQ1iwB,UAAU2jwB,kBAAoB,SAAUhiwB,GAE5C,OAAOwD,SAASm3iB,cAAcsnN,yBAAyBjiwB,IAG3D+gwB,EAAQ1iwB,UAAUyf,KAAO,SAAU9Z,EAAS+Q,GAExC,OADA/Q,EAAQP,WAAWyE,aAAa6M,EAAS/Q,GAClC+Q,EAAQpQ,YAAYX,IAE/B+8vB,EAAQ1iwB,UAAUkiT,YAAc,SAAU2vH,EAASgyV,GAC/CA,EAAcz+vB,WAAWyE,aAAagoa,EAASgyV,EAAc1snB,cAEjEurnB,EAAQ1iwB,UAAU8jwB,UAAY,SAAU7+vB,EAAQyR,GAO5C,IANAzR,EAAOqB,YAAYoQ,IACnBA,EAAUzR,EAAOqC,cAAc,sBACvBmB,UAAUS,OAAO,oBACQ,IAA7BwN,EAAQjO,UAAUrH,QAClBsV,EAAQrG,gBAAgB,SAErBpL,EAAOsc,aAAe7K,GACzBA,EAAQpQ,YAAYrB,EAAOsc,YAE/B,OAAO7K,GAEXgsvB,EAAQ1iwB,UAAU+jwB,OAAS,SAAUp+vB,GAGjC,IAFA,IAAIV,EAASU,EAAQP,WACjB4+vB,KACGr+vB,EAAQ4b,YACXyivB,EAAW76vB,KAAKxD,EAAQ4b,YACxBtc,EAAO4E,aAAalE,EAAQ4b,WAAY5b,GAI5C,OAFAq+vB,EAAaA,EAAW5iwB,OAAS,EAAI4iwB,GAAcr+vB,EAAQP,YAC3DH,EAAOgF,YAAYtE,GACZq+vB,GAEXtB,EAAQ1iwB,UAAUikwB,gBAAkB,SAAUt+vB,EAASiR,GAOnD,OANIjR,EAAQ+E,WAAaohD,KAAKy2D,cAAgB58G,EAAQuQ,WAAW9U,OAAS,GAAKuE,EAAQuQ,WAAWU,KAC9FjR,EAAUA,EAAQuQ,WAAWU,IAE7BjR,EAAQ+E,WAAaohD,KAAKo4sB,YAC1Bv+vB,EAAUA,EAAQP,YAEfO,GAEX+8vB,EAAQ1iwB,UAAUmkwB,UAAY,SAAUx+vB,EAAS4C,GAE7C,IAAK,IADD67vB,KACKtjwB,EAAI,EAAGA,EAAIyH,EAASnH,OAAQN,IAC7B6E,EAAQmD,SAASP,EAASzH,KAAO6E,IAAY4C,EAASzH,IACtDsjwB,EAAWj7vB,KAAKZ,EAASzH,IAGjC,OAAOsjwB,GAEX1B,EAAQ1iwB,UAAUqkwB,aAAe,WAC7B,IACI1+vB,EACJ,IAAKA,EAFOhB,KAAKq2V,cAAc,GAEVw8Z,wBAAyB7xvB,IAAYhB,KAAK0ipB,UAAU1hpB,GAAU,KAC/EA,EAAUA,EAAQP,WAEtB,QAAST,KAAK0ipB,UAAU1hpB,IAE5B+8vB,EAAQ1iwB,UAAUg7V,cAAgB,SAAUviU,GACxC,IAAI87C,EAAY5vE,KAAKymhB,eACjB3/e,KACJ,GAAI8oC,GAAaA,EAAU+irB,YAAc/irB,EAAU8irB,WAAY,CAC3D5rtB,KACA,IAAK,IAAIskG,EAAI,EAAGA,EAAIx7D,EAAU8irB,WAAYtnnB,IACtCtkG,EAAOtiC,KAAKorE,EAAU+irB,WAAWvnnB,SAIrCtkG,GAAU9mC,KAAKg+vB,gBAAgBrmN,eAEnC,YAAO,IAAuB7jhB,EAAQgT,EAAOhT,GAASgT,GAE1Di3tB,EAAQ1iwB,UAAUorhB,aAAe,WAC7B,OAAOzmhB,KAAKi+vB,cAAcv2vB,IAAI1H,KAAKg+vB,kBAEvCD,EAAQ1iwB,UAAUskwB,gBAAkB,SAAU3+vB,GAE1C,IADAA,EAAUA,EAAQ6mM,gBACX7mM,GAAmC,OAAxBA,EAAQ6a,YAAsB,KAC5C7a,EAAUA,EAAQ6mM,gBAEtB,OAAO7mM,GAEX+8vB,EAAQ1iwB,UAAU8/N,OAAS,SAAUn+N,GACjC,IAAI6iE,EAAUr/D,SAASW,cAAc,OAErC,OADA0+D,EAAQ5E,UAAYj+D,EACb6iE,EAAQ79D,UAAUuN,QAAQ,iBAAkB,OAEvDwuvB,EAAQ1iwB,UAAUukwB,WAAa,SAAUnyqB,GACrC,IACIoyqB,EADAtiwB,EAAQyC,KAAKM,OAAOqC,cAAc,IAAMk7vB,GAAgBC,gBAE5D,GAAI99vB,KAAK+zC,SAASx2C,EAAOsgwB,GAAgBC,iBAAmBvgwB,EAAMuG,UAAUrH,OAAS,EAAG,CACpF,IAAI8S,EAAUvP,KAAK8+vB,gBFxLN,IEwL4CvhwB,EAAOyC,KAAKm7N,OAAO59N,EAAMse,cAClF7b,KAAKogjB,YAAY7ijB,EAAOgS,IACxBhS,EAAQyC,KAAKM,OAAOqC,cAAc,IAAMk7vB,GAAgBC,iBAClDh6vB,UAAUS,OAAOs5vB,GAAgBC,gBACvC+B,EAAgBtiwB,EAAMgU,WAAW,QAGjCsuvB,EAAgB7/vB,KAAKo/vB,OAAO7hwB,GAAO,GAEvC,IAAIuiwB,EACAjhvB,EAAM7e,KAAKM,OAAOqC,cAAc,IAAMk7vB,GAAgB7hO,cAC1D,GAAIh8hB,KAAK+zC,SAASl1B,EAAKg/uB,GAAgB7hO,eAAiBn9gB,EAAI/a,UAAUrH,OAAS,EAAG,CAC1E8S,EAAUvP,KAAK8+vB,gBFpMN,IEoM4CjgvB,EAAK7e,KAAKm7N,OAAOt8M,EAAIhD,cAC9E7b,KAAKogjB,YAAYvhiB,EAAKtP,IACtBsP,EAAM7e,KAAKM,OAAOqC,cAAc,IAAMk7vB,GAAgB7hO,eAClDl4hB,UAAUS,OAAOs5vB,GAAgB7hO,cACrC8jO,EAAcjhvB,EAAItN,WAAW,QAG7BuuvB,EAAcjhvB,EAAM7e,KAAKo/vB,OAAOvgvB,GAAK,GAAKghvB,EAI9C,OAFApyqB,EAAK6uqB,eAAiB7uqB,EAAK8uqB,aAAasD,GAAe,GACvDpyqB,EAAK+uqB,aAAe/uqB,EAAK8uqB,aAAauD,GAAa,GAC5CryqB,GAEXswqB,EAAQ1iwB,UAAUyxU,OAAS,SAAUzpU,EAAWwY,GAC5C,MAAO,gBAAkBxY,EAAY,KAAOwY,EAAc,WAE9DkivB,EAAQ1iwB,UAAU0kwB,UAAY,SAAUtyqB,GACpC,IAAI17D,EAAQ07D,EAAK17D,MACbx0B,EAASw0B,EAAMuquB,eAAe/qvB,WAAWwgB,EAAMyke,cAC5Czke,EAAMuquB,eACTz9uB,EAAOkT,EAAMyquB,aAAajrvB,WAAYwgB,EAAMsue,UAAY,EAAMtue,EAAMsue,UAAY,EAAKtue,EAAMsue,YACxFtue,EAAMyquB,aACb,GAAIj/vB,IAAUshB,EACV7e,KAAKogjB,YAAY7ijB,EAAOyC,KAAK8sU,OAAO+wb,GAAgBC,eAAgB99vB,KAAKm7N,OAAO59N,EAAMse,eACtF7b,KAAKogjB,YAAYvhiB,EAAK7e,KAAK8sU,OAAO+wb,GAAgB7hO,aAAch8hB,KAAKm7N,OAAOt8M,EAAIhD,oBAGhF,GAAuB,IAAnBte,EAAMwI,SACN/F,KAAKogjB,YAAY7ijB,EAAOyC,KAAK8sU,OAAO+wb,GAAgBC,eAAgB99vB,KAAKm7N,OAAO59N,EAAMse,mBAErF,CACDte,EAA0B,OAAlBA,EAAMyF,QAAmBzF,EAAMkD,WAAalD,EACpD,IAAIuvU,EAAS9sU,KAAK8sU,OAAO+wb,GAAgBC,eAAgB,IACzD14vB,GAAQpF,KAAKg/vB,kBAAkBlyb,IAAUvvU,KAIrDwgwB,EAAQ1iwB,UAAU2kwB,WAAa,WAC3B,IAAIC,KACArwrB,EAAY5vE,KAAKymhB,eACrB,GAAIzmhB,KAAK0/vB,gBAAkB9vrB,EAAU8irB,WAEjC,IAAK,IADD5rtB,EAAS9mC,KAAKq2V,gBACT9yU,EAAI,EAAGA,EAAIujB,EAAOrqC,OAAQ8mB,IAAK,CACpC,IAAI9iB,OAAa,EACbsxB,EAAQ+U,EAAOvjB,GACfysS,EAAYhwT,KAAKs/vB,gBAAgBvtuB,EAAMuquB,eAAgBvquB,EAAMyke,aAC7DhkM,EAAUxyT,KAAKs/vB,gBAAgBvtuB,EAAMyquB,aAAczquB,EAAMsue,WACzDrggB,KAAKk+vB,YAAYluc,IAAciwc,EAAgB1hwB,QAAQyxT,GAAa,GACpEiwc,EAAgBz7vB,KAAKwrT,IAEzBvvT,EAAaT,KAAKq+vB,gBAAgBruc,KAChBiwc,EAAgB1hwB,QAAQkC,GAAc,GACpDw/vB,EAAgBz7vB,KAAK/D,GAGzB,IAAK,IADDqxD,KACKvxD,EAAOyvT,EAAWzvT,IAASiyT,GAAWjyT,IAASP,KAAKM,OAAQ,KAC7DwxD,EAAMvzD,QAAQgC,GAAQ,GAAKA,EAAK6Z,UAAY7Z,EAAK6Z,SAAS3d,QAC1Dq1D,EAAMttD,KAAKjE,GACXA,EAAOA,EAAK6Z,SAAS,IAEhB7Z,EAAKiyI,YACVjyI,EAAOA,EAAKiyI,YAEPjyI,EAAKE,aACVF,EAAOA,EAAKE,WACZqxD,EAAMttD,KAAKjE,IAEXP,KAAKk+vB,YAAY39vB,IAASuxD,EAAMvzD,QAAQgC,GAAQ,GAChD0/vB,EAAgB1hwB,QAAQgC,GAAQ,IAAMA,IAASiyT,GAAWzgS,EAAMsue,UAAY,IAC5E4/P,EAAgBz7vB,KAAKjE,IAG7BE,EAAaT,KAAKq+vB,gBAAgB7rc,KAChBytc,EAAgB1hwB,QAAQkC,GAAc,GACpDw/vB,EAAgBz7vB,KAAK/D,GAIjC,IAAK,IAAItE,EAAI8jwB,EAAgBxjwB,OAAS,EAAGN,EAAI,EAAGA,IAAK,CAEjD,IADI21D,EAAQ9xD,KAAKw/vB,UAAUS,EAAgB9jwB,GAAI8jwB,IACrCxjwB,OAAQ,CACd,IAAIyjwB,EAAYD,EAAgB9jwB,GAAGqF,iBAAiB,UACpD,GAAmC,OAA/By+vB,EAAgB9jwB,GAAG6G,SAAoBk9vB,EAAUzjwB,OAAS,EAC1D,SAGAwjwB,EAAgB53uB,OAAOlsB,EAAG,IAItC,OAAO8jwB,GAEJlC,KC3SPoC,GAAuB,WAKvB,SAASA,EAAM7/vB,GACXN,KAAKM,OAASA,EACdN,KAAKogwB,QAAUpgwB,KAAKM,OAAO8/vB,QAC3BpgwB,KAAKtD,mBAkST,OAhSAyjwB,EAAM9kwB,UAAUqB,iBAAmB,WAC/BsD,KAAKM,OAAOu2qB,SAASjxlB,GjBGN,YiBH2B5lF,KAAK+zvB,kBAAmB/zvB,MAClEA,KAAKM,OAAOu2qB,SAASjxlB,GAAGouqB,GAAyBh0vB,KAAK2/G,eAAgB3/G,OAE1EmgwB,EAAM9kwB,UAAUskH,eAAiB,SAAU9+G,GACvC,GAAsB,IAAlBA,EAAEvE,MAAMq6G,MAAa,CACrB,IAAI5kF,EAAQ/xB,KAAKM,OAAO29vB,cAActP,SAAS3uvB,KAAKM,OAAO09vB,iBAC3Dh+vB,KAAKk7vB,cAAgBl7vB,KAAKM,OAAO29vB,cAAcxwqB,KAAK17D,EAAO/xB,KAAKM,OAAO09vB,iBAMvE,IAAK,IALDgC,EAAahgwB,KAAKogwB,QAAQJ,aAC1BxpQ,EAAcx2f,KAAKM,OAAO29vB,cAActP,SAAS3uvB,KAAKM,OAAO09vB,iBAAiBxnQ,YAC9E6J,EAAYrggB,KAAKM,OAAO29vB,cAActP,SAAS3uvB,KAAKM,OAAO09vB,iBAAiB39P,UAC5Evuc,KACAwkP,GAAW,EACNn6S,EAAI,EAAGA,EAAI6jwB,EAAWvjwB,OAAQN,IACL,OAA1B6jwB,EAAW7jwB,GAAG6G,QACd8uD,EAAMttD,KAAKw7vB,EAAW7jwB,IAEoB,OAArC6jwB,EAAW7jwB,GAAGsE,WAAWuC,SAC9B8uD,EAAMttD,KAAKw7vB,EAAW7jwB,GAAGsE,aAG7BqxD,EAAMr1D,OAAS,GAAKq1D,EAAMr1D,SAA4B,IAAhB+5f,GAAmC,IAAd6J,GAAoBx/f,EAAEw/vB,kBACjFx/vB,EAAEvE,MAAMkpB,iBACR3kB,EAAEvE,MAAM8gI,kBACRp9H,KAAKogwB,QAAQL,UAAU//vB,KAAKk7vB,eAC5Bl7vB,KAAK0ia,cAAgB1ia,KAAKw0vB,UAAU1isB,EAAM,IACtCjxD,EAAEvE,MAAMm6G,UACRz2G,KAAKsgwB,WAAWxusB,GAChB9xD,KAAKugwB,eAGLjqd,EAAWt2S,KAAKwgwB,WAAW1usB,GAE3BwkP,IACAt2S,KAAKygwB,YACLzgwB,KAAKM,OAAOklvB,gBAAgBtjvB,SAEhClC,KAAKk7vB,cAAgBl7vB,KAAKogwB,QAAQR,WAAW5/vB,KAAKk7vB,eAClDl7vB,KAAKk7vB,cAAcrtqB,UACfhtF,EAAEm8D,UACFn8D,EAAEm8D,UACEovH,YAAapsL,KAAK0ia,cAClB0wV,WAAY,OACZrhuB,MAAO/xB,KAAKM,OAAO29vB,cAActP,SAAS3uvB,KAAKM,OAAO09vB,iBACtDp6vB,SAAU5D,KAAKM,OAAO8/vB,QAAQJ,aAC9B1jwB,MAAOuE,EAAEvE,cAMrB,OAAQuE,EAAEvE,MAAM65D,QACZ,IAAK,eACDn2D,KAAK+zvB,mBAAoBvgrB,WAAY,KAAMxW,SAAUn8D,EAAEm8D,WACvDn8D,EAAEvE,MAAMkpB,iBACR,MACJ,IAAK,iBACDxlB,KAAK+zvB,mBAAoBvgrB,WAAY,KAAMxW,SAAUn8D,EAAEm8D,WACvDn8D,EAAEvE,MAAMkpB,mBAKxB26uB,EAAM9kwB,UAAUm5vB,UAAY,SAAUxzvB,GAElC,MAAgC,OADfA,EAAQP,WACNyR,SAAoB,KAAO,MAElDiuvB,EAAM9kwB,UAAUklwB,YAAc,WAE1B,IAAK,IADDN,EAAkBjgwB,KAAKM,OAAOklvB,gBAAgBhkvB,iBAAiB,UAC1DrF,EAAI,EAAGA,EAAI8jwB,EAAgBxjwB,OAAQN,IAAK,CAC7C,IAAI+jwB,EAAYD,EAAgB9jwB,GAAGqF,iBAAiB,UACpD,GAAI0+vB,EAAUzjwB,OAAS,EACnB,IAAK,IAAI8mB,EAAI,EAAGA,EAAI28uB,EAAUzjwB,OAAQ8mB,IAAK,CACvC,IAAIm9uB,EAAcR,EAAU38uB,GAAGskL,gBAC3B64jB,GAAuC,OAAxBA,EAAY19vB,SAC3B09vB,EAAY/+vB,YAAYu+vB,EAAU38uB,OAMtD48uB,EAAM9kwB,UAAUmlwB,WAAa,SAAU58vB,GAEnC,IAAK,IADD0yS,GAAW,EACNn6S,EAAI,EAAGA,EAAIyH,EAASnH,OAAQN,IAAK,CACtC,IAAIukwB,EAAc1gwB,KAAKogwB,QAAQT,gBAAgB/7vB,EAASzH,IACxD,GAAIukwB,EAAa,CACbpqd,GAAW,EACX,IAAIqqd,EAAc/8vB,EAASzH,GAAGqF,iBAAiB,UAC3C0rT,EAAYyzc,EAAY,GAC5B,GAAIzzc,EAAW,CAEXroT,GADI+7vB,EAAgBz/vB,EAAc,OACT+rT,GACzB,IAAK,IAAIxsN,EAAI1gG,KAAKogwB,QAAQ10hB,SAAS9nO,EAASzH,IAAI,GAAIukG,IAAM1gG,KAAKogwB,QAAQ9pO,OAAO51b,GAAI,KAAM,CACpF,IAAI8xC,EAAc9xC,EAAE8xC,YACpBounB,EAAcj/vB,YAAY++F,GAC1BA,EAAI8xC,EAERptI,GAAQ8nT,GAAYwzc,GACpBr7vB,EAAOzB,EAASzH,SAKhB,GAFAwkwB,EAAcD,EAAYl/vB,iBAAiB,UAC3C0rT,EAAYyzc,EAAY,GAEpBv7vB,GAAQxB,EAASzH,IAAK+wT,OAErB,CACD,IAAI0zc,EACJx7vB,GADIw7vB,EAAgBz/vB,EAAcyC,EAASzH,GAAGsE,WAAWuC,UACjC09vB,GACxBt7vB,GAAQxB,EAASzH,IAAKykwB,KAKtC,OAAOtqd,GAEX6pd,EAAM9kwB,UAAU04vB,kBAAoB,SAAUlzvB,GAC1C,IAAIkxB,EAAQ/xB,KAAKM,OAAO29vB,cAActP,SAAS3uvB,KAAKM,OAAO09vB,iBAC3Dh+vB,KAAKk7vB,cAAgBl7vB,KAAKM,OAAO29vB,cAAcxwqB,KAAK17D,EAAO/xB,KAAKM,OAAO09vB,iBACvEh+vB,KAAK0ia,cAAgB7ha,EAAE2yE,WAEvB,IAAK,IADDqtrB,EAAa7gwB,KAAKogwB,QAAQJ,aACrB7jwB,EAAI,EAAGA,EAAI0kwB,EAAWpkwB,OAAQN,IACL,OAA1B0kwB,EAAW1kwB,GAAG6G,SAAoB,OAAS69vB,EAAW1kwB,GAAGsE,WAAWuC,UACpE69vB,EAAW1kwB,GAAK0kwB,EAAW1kwB,GAAGsE,YAGtCT,KAAK8gwB,WAAWD,EAAY7gwB,KAAK0ia,eAC7B7ha,EAAEm8D,UACFn8D,EAAEm8D,UACEovH,YAAapsL,KAAK0ia,cAClBpma,MAAOuE,EAAEvE,MACT82vB,WAAY,OACZrhuB,MAAO/xB,KAAKM,OAAO29vB,cAActP,SAAS3uvB,KAAKM,OAAO09vB,iBACtDp6vB,SAAU5D,KAAKM,OAAO8/vB,QAAQJ,gBAI1CG,EAAM9kwB,UAAUylwB,WAAa,SAAUl9vB,EAAU8C,GAG7C,GAFA1G,KACKogwB,QAAQL,UAAU//vB,KAAKk7vB,eACxBl7vB,KAAK+gwB,SAASn9vB,EAAU8C,GACxB1G,KAAKsgwB,WAAW18vB,OAEf,CACD5D,KAAKghwB,WAAWp9vB,EAAU8C,GAC1B,IAAK,IAAIvK,EAAI,EAAGA,EAAIyH,EAASnH,OAAQN,IACjC,GAAI,OAASyH,EAASzH,GAAG6G,QAAS,CAC9B,IACIi+vB,EAAU,IAAMv6vB,EAAO1G,KAAKogwB,QAAQ18vB,WAAWE,EAASzH,IAAM,IAC9D+kwB,EAAW,KAAOx6vB,EAAO,IAEzBy6vB,EHtJC,MGsJcv9vB,EAASzH,GAAG6G,QAAQ4S,cAAyChS,EAASzH,GAAG6F,UACxF4B,EAASzH,GAAG2F,UAEZs/vB,EAAmBH,EADPjhwB,KAAKogwB,QAAQtB,gBAHhB,+BAGwC,KAAMqC,GACdD,EAC7ClhwB,KAAKogwB,QAAQhgN,YAAYx8iB,EAASzH,GAAIilwB,GACxBphwB,KAAKM,OAAOklvB,gBAAgB7ivB,cAAc,sBAChD+I,gBAAgB,UAIpC1L,KAAKygwB,YACLzgwB,KAAKM,OAAOklvB,gBAAgBtjvB,QAC5BlC,KAAKk7vB,cAAgBl7vB,KAAKogwB,QAAQR,WAAW5/vB,KAAKk7vB,eAClDl7vB,KAAKk7vB,cAAcrtqB,WAEvBsyqB,EAAM9kwB,UAAU0lwB,SAAW,SAAUjvsB,EAAO9uD,GAExC,IAAK,IADD+9vB,GAAW,EACN5kwB,EAAI,EAAGA,EAAI21D,EAAMr1D,OAAQN,IAAK,CACnC,GAAyB,OAArB21D,EAAM31D,GAAG6G,QACT,OAAO,EAEP8uD,EAAM31D,GAAGsE,WAAWuC,UAAYA,IAChC+9vB,GAAW,GAGnB,OAAOA,GAEXZ,EAAM9kwB,UAAU2lwB,WAAa,SAAUlvsB,EAAO9uD,GAE1C,IAAK,IADDq+vB,KACKllwB,EAAI,EAAGA,EAAI21D,EAAMr1D,OAAQN,IAAK,CACnC,IAAIoE,EAAOuxD,EAAM31D,GAAGsE,WACK,OAArBqxD,EAAM31D,GAAG6G,SAAoBzC,EAAKyC,UAAYA,GAAWq+vB,EAAU9iwB,QAAQgC,GAAQ,GACnF8gwB,EAAU78vB,KAAKjE,GAGvB,IAAK,IAAIgjB,EAAI89uB,EAAU5kwB,OAAS,EAAG8mB,GAAK,EAAGA,IAAK,CAC5C,IAAIm9E,EAAI2gqB,EAAU99uB,GACdhU,EAAU,IAAMvM,EAAQ4S,cAAgB,IACtC5V,KAAKogwB,QAAQ18vB,WAAWg9F,GAAK,IAAMA,EAAE1+F,UAAY,KAAOgB,EAAQ4S,cAAgB,IACtF5V,KAAKogwB,QAAQhgN,YAAYihN,EAAU99uB,GAAIhU,KAG/C4wvB,EAAM9kwB,UAAUolwB,UAAY,WAExB,IAAK,IADDa,EAAYthwB,KAAKM,OAAOklvB,gBAAgBhkvB,iBAAiB,oBACpDy8D,EAAI,EAAGA,EAAIqjsB,EAAU7kwB,OAAQwhE,IAAK,CACvC,IAAI19D,EAAO+gwB,EAAUrjsB,GACrB,GAAIj+D,KAAKogwB,QAAQ9pO,OAAO/1hB,EAAKsnM,kBACzB7nM,KAAKogwB,QAAQxB,cAAcr+vB,KAAUP,KAAKogwB,QAAQxB,cAAcr+vB,EAAKsnM,iBAAkB,CAEvF,IAAK,IADD05jB,EAAevhwB,KAAKogwB,QAAQ10hB,SAASnrO,GAChC6qI,EAAI,EAAGA,EAAIm2nB,EAAa9kwB,OAAQ2uI,IACrC7qI,EAAKsnM,gBAAgBlmM,YAAY4/vB,EAAan2nB,IAElD7qI,EAAKE,WAAW6E,YAAY/E,MAIxC4/vB,EAAM9kwB,UAAUilwB,WAAa,SAAU18vB,GACnC,IAAK,IAAIzH,EAAIyH,EAASnH,OAAS,EAAGN,GAAK,EAAGA,IACtC,IAAK,IAAIonB,EAAIpnB,EAAI,EAAGonB,GAAK,EAAGA,IACxB,GAAI3f,EAAS2f,GAAGpf,SAAUP,EAASzH,KAAQyH,EAAS2f,KAAO3f,EAASzH,GAAI,CACpEyH,EAASykB,OAAOlsB,EAAG,GACnB,MAKP,IADDqlwB,KACJ,IAASrlwB,EAAI,EAAGA,EAAIyH,EAASnH,OAAQN,IAAK,CACtC,IAAI6E,EAAU4C,EAASzH,GACnBsE,EAAamD,EAASzH,GAAGsE,WACzB4C,EAAYrC,EAAQ6R,aAAa,SACrC,GAAI7R,EAAQP,WAAWyE,aAAalF,KAAKkhwB,SAASzgwB,EAAWuC,SAAUhC,GACnE,OAASP,EAAWA,WAAWuC,QAC/BhC,EAAQP,WAAWyE,aAAalF,KAAKkhwB,SAAS,MAAOlgwB,GACrDhB,KAAKogwB,QAAQ7id,YAAYv9S,KAAKihwB,QAAQ,MAAOjgwB,OAE5C,CACD,IAAIygwB,EAAY,GAIhB,GAHIp+vB,IACAo+vB,GAAa,WAAap+vB,EAAY,KAEd,IAAMrC,EAAQQ,iBAAiB28vB,GAAoBh9uB,KAAK,OAAO1kB,OAAQ,CAC/F,IAAIsV,EAAU,KAA6B0vvB,EAAY,4BACnDzhwB,KAAKogwB,QAAQ18vB,WAAWjD,GAAc,QAC1CT,KAAKogwB,QAAQjB,UAAUn+vB,EAAShB,KAAKogwB,QAAQpB,kBAAkBjtvB,SAE9D,GAAmD,IAA/C/R,KAAKogwB,QAAQ10hB,SAAS1qO,GAAS,GAAG+E,SAAgB,CACvD,IAAIwJ,EAAUvP,KAAKogwB,QAAQtB,gBH5OtB,IG4O4Dr+vB,EAAYT,KAAKM,OAAO8/vB,QAAQjliB,OAAOn7N,KAAKogwB,QAAQ10hB,SAAS1qO,GAAS,GAAG6a,cAC1I7b,KAAKogwB,QAAQhgN,YAAYpgjB,KAAKogwB,QAAQ10hB,SAAS1qO,GAAS,GAAIuO,QAE3D,GAAIvP,KAAKogwB,QAAQ10hB,SAAS1qO,GAAS,GAAG8C,UAAUK,SAAS05vB,GAAgBC,iBAC1E99vB,KAAKogwB,QAAQ10hB,SAAS1qO,GAAS,GAAG8C,UAAUK,SAAS05vB,GAAgB7hO,cAAe,CAChFzshB,EAAUvP,KAAKogwB,QAAQtB,gBHjPtB,IGiP4Dr+vB,EAAYT,KAAKogwB,QAAQ10hB,SAAS1qO,GAAS,GAAGc,WAC/G9B,KAAKogwB,QAAQhgN,YAAYpgjB,KAAKogwB,QAAQ10hB,SAAS1qO,GAAS,GAAIuO,OAE3D,CACD,IAAImhE,EAAY1vE,EAAQ4b,WACxBvZ,EAAYqtE,EAAU79D,aAAa,SACnCnP,EAAWgtE,EAAW1wE,KAAKogwB,QAAQ9B,cAAc79vB,IAC7C4C,GAAaqtE,EAAU79D,aAAa,UACpCnP,EAAWgtE,GAAa6wD,MAASl+H,EAAY,IAAMqtE,EAAU79D,aAAa,WAGlFzN,GAAQpF,KAAKihwB,QAAQ,OAAQjgwB,GAC7B6D,GAAS7E,KAAKkhwB,SAAS,OAAQlgwB,GAEnChB,KAAKogwB,QAAQ7id,YAAYv9S,KAAKihwB,QAAQxgwB,EAAWuC,SAAUhC,GACrB,OAAlCP,EAAWA,WAAWuC,UACtBvC,EAAaA,EAAWA,WAAWA,YAEnC+gwB,EAASjjwB,QAAQkC,GAAc,GAC/B+gwB,EAASh9vB,KAAK/D,GAGtB,IAAStE,EAAI,EAAGA,EAAIqlwB,EAAS/kwB,OAAQN,IAAK,CACtC,IAAIoE,EAAOihwB,EAASrlwB,GAChBulwB,EAAgBnhwB,EAAKyB,UAIzB0/vB,GADAA,EAAgBA,EAAcnyvB,QAFf,oDAEiC,UAClBA,QAFhB,mDAEiC,OAASvP,KAAKogwB,QAAQ18vB,WAAWnD,GAAQ,KACxFP,KAAKogwB,QAAQhgN,YAAY7/iB,EAAMP,KAAKogwB,QAAQxB,cAAcr+vB,GAAQmhwB,EAAcxxvB,OAASlQ,KAAKogwB,QAAQvB,eAAet+vB,IAGpH,IADDohwB,EAAU3hwB,KAAKM,OAAOklvB,gBAAgBhkvB,iBAAiB,YAC3D,IAASrF,EAAI,EAAGA,EAAIwlwB,EAAQllwB,OAAQN,IAChCkJ,EAAOs8vB,EAAQxlwB,IAGd,IADDylwB,EAAU5hwB,KAAKM,OAAOklvB,gBAAgBhkvB,iBAAiB,sBAC3D,IAASrF,EAAI,EAAGA,EAAIylwB,EAAQnlwB,OAAQN,IAChCkJ,EAAOu8vB,EAAQzlwB,KAGvBgkwB,EAAM9kwB,UAAU4lwB,QAAU,SAAUv6vB,GAChC,OAAO1G,KAAKogwB,QAAQpB,kBAAkB,gCAAkCt4vB,EAAKkP,cAAgB,cAEjGuqvB,EAAM9kwB,UAAU6lwB,SAAW,SAAUx6vB,GACjC,OAAO1G,KAAKogwB,QAAQpB,kBAAkB,iCAAmCt4vB,EAAKkP,cAAgB,cAE3FuqvB,KC7SP0B,GAAyB,WAKzB,SAASA,EAAQvhwB,GACbN,KAAKM,OAASA,EACdN,KAAKtD,mBA0DT,OAxDAmlwB,EAAQxmwB,UAAUqB,iBAAmB,WACjCsD,KAAKM,OAAOu2qB,SAASjxlB,GAAGyvqB,GAAoBr1vB,KAAKs1vB,aAAct1vB,OAEnE6hwB,EAAQxmwB,UAAUm5H,cAAgB,SAAUj0H,GACxC,KAAOA,EAAKE,YAAcF,EAAKE,aAAeT,KAAKM,OAAOklvB,gBAAiB,KACvEjlvB,EAAOA,EAAKE,WAEhB,OAAOF,GAEXshwB,EAAQxmwB,UAAUi6vB,aAAe,SAAUz0vB,GACvC,IAAIkxB,EAAQ/xB,KAAKM,OAAO29vB,cAActP,SAAS3uvB,KAAKM,OAAO09vB,iBACvDvwqB,EAAOztF,KAAKM,OAAO29vB,cAAcxwqB,KAAK17D,EAAO/xB,KAAKM,OAAO09vB,iBACzD8D,EAAe9hwB,KAAKM,OAAO8/vB,QAAQJ,aACJ,eAA/Bn/vB,EAAE2yE,WAAW59D,eACb5V,KAAKM,OAAO8/vB,QAAQL,UAAUtyqB,GAElC,IAAK,IAAItxF,EAAI,EAAGA,EAAI2lwB,EAAarlwB,OAAQN,IAAK,CAC1C,IAAIsE,OAAa,EACb0gwB,OAAc,EASlB,GARmC,eAA/BtgwB,EAAE2yE,WAAW59D,eACbnV,EAAaT,KAAKw0H,cAAcstoB,EAAa3lwB,IAC7CglwB,EAAcnhwB,KAAKM,OAAO8/vB,QAAQ9pO,OAAO71hB,GAAcA,EAAWqB,UAAYrB,EAAWuB,WAIzFm/vB,GADA1gwB,EAAaqhwB,EAAa3lwB,IACD6F,UAEzBnB,EAAE2yE,WAAW59D,gBAAkBnV,EAAWuC,QAAQ4S,eAAwC,OAAvBnV,EAAWuC,QAAlF,CAGAhD,KAAK+hwB,aAAathwB,EAAYI,EAAE2yE,YAChC,IAAIwurB,EAAahiwB,KAAKM,OAAO8/vB,QAAQtB,gBAAgBj+vB,EAAE2yE,WAAY/yE,EAAY0gwB,EAAY5xvB,QAAQ,kBAAmB,KACtHvP,KAAKM,OAAO8/vB,QAAQhgN,YAAY3/iB,EAAYuhwB,IAEhDhiwB,KAAKM,OAAOklvB,gBAAgBtjvB,QACO,eAA/BrB,EAAE2yE,WAAW59D,gBACb63E,EAAOztF,KAAKM,OAAO8/vB,QAAQR,WAAWnyqB,IAE1CA,EAAKI,UACDhtF,EAAEm8D,UACFn8D,EAAEm8D,UACEovH,YAAavrL,EAAE2yE,WACf4/qB,WAAY,OACZ92vB,MAAOuE,EAAEvE,MACTy1B,MAAO/xB,KAAKM,OAAO29vB,cAActP,SAAS3uvB,KAAKM,OAAO09vB,iBACtDp6vB,SAAU5D,KAAKM,OAAO8/vB,QAAQJ,gBAI1C6B,EAAQxmwB,UAAU0mwB,aAAe,SAAU/gwB,EAASgC,GAChD,IAAIi/vB,GAAc,UAAW,YAAa,aAAc,gBAAiB,cAAe,eAAgB,eACxGj/vB,EAAUA,EAAQ4S,cAClB,IAAK,IAAIzZ,EAAI,EAAGA,EAAI8lwB,EAAWxlwB,QAAuB,MAAZuG,GAA+B,eAAZA,GAAwC,QAAZA,EAAoB7G,IACzG6E,EAAQ0D,MAAMqqS,eAAekzd,EAAW9lwB,KAGzC0lwB,KClEPK,GAA+B,WAC/B,SAASA,KA6BT,OA3BAA,EAAcC,WAAa,SAAU9uZ,EAAU5yW,EAAYy9S,GAMvD,OALAz9S,EAAWw6D,UAAYo4S,EAASx3V,YAC9BqiS,EAAqDl+S,KAAKoiwB,aAAa3hwB,EAAY4yW,GAAU,GAAlFrzW,KAAKoiwB,aAAa3hwB,EAAY4yW,GACvCA,EAAS5yW,YACT4yW,EAAS5yW,WAAW6E,YAAY+tW,GAE7B5yW,EAAW8Q,WAAW,IAEjC2wvB,EAAcG,KAAO,SAAU3xrB,EAAWjwE,GAGtC,OAFAT,KAAKoiwB,aAAa3hwB,EAAYiwE,GAC9BjwE,EAAWkB,YAAY+uE,GAChBA,GAEXwxrB,EAAcI,OAAS,SAAU/hwB,GAG7B,IAFA,IAAID,EAASC,EAAKE,WACdJ,KACGE,EAAKqc,WAAY,KACpBvc,EAAMmE,KAAKlE,EAAO4E,aAAa3E,EAAKqc,WAAYrc,IAGpD,OADAD,EAAOgF,YAAY/E,GACZF,GAEX6hwB,EAAcE,aAAe,SAAU/uZ,EAAU5yW,EAAYy9S,GACzD,OAAQz9S,EAAqB,WAAOy9S,EAC9Bz9S,EAAWA,WAAWyE,aAAamuW,EAAU5yW,EAAW+xI,aADf/xI,EAAWA,WAAWyE,aAAamuW,EAAU5yW,GAExFA,GAEDyhwB,KC5BPK,GAA4B,WAC5B,SAASA,IACLviwB,KAAKkU,UAAY,EACjBlU,KAAKi+vB,cAAgB,IAAIjC,GAqH7B,OAlHAuG,EAAWlnwB,UAAUmnwB,cAAgB,SAAUzwuB,EAAOxxB,GAGlD,OAFAA,EAAOP,KAAKyiwB,UAAU1wuB,EAAOxxB,GAAM,GACnCA,EAAOP,KAAKyiwB,UAAU1wuB,EAAOxxB,GAAM,IAGvCgiwB,EAAWlnwB,UAAUonwB,UAAY,SAAU1wuB,EAAOxxB,EAAM6/mB,GACpD,GAAI7/mB,EAAM,CACN,IAAIlB,EAAQ0yB,EAAMqquB,aACdpppB,EAAWzyG,EAAKE,WAChBwR,EAAQjS,KAAKi+vB,cAAc5qrB,SAAS9yE,GACxClB,EAAM64S,SAASkoU,GACf,EAAgB/gnB,EAAMqjwB,eAAeniwB,GAAQlB,EAAMsjwB,YAAYpiwB,GAC/D,IAAIgyqB,EAAWlzqB,EAAMujwB,kBACrB,GAAIxiJ,GAGA,GAFA7/mB,EAAOyyG,EAASzhG,WAAWU,IAC3BsgqB,EAAWvyqB,KAAK6iwB,gBAAgBtwF,GAAU,KACD,KAAzBA,EAAS12pB,YACrB,GAAItb,EACA2hwB,GAAcE,aAAa7vF,EAAUhyqB,OAEpC,CACDyyG,EAASrxG,YAAY4wqB,IACjB1ymB,EAAUr/D,SAASW,cAAc,QAC7Ba,UAAY,mBACpBzB,EAAOs/D,EAAQjjD,WACfo2F,EAASrxG,YAAYpB,SAQ7B,GAHAA,EAAOyyG,EAASzhG,WAAW9U,OAAS,EAAIu2G,EAASzhG,WAAWU,GACxD+gG,EAASzhG,WAAW,IACxBghqB,EAAWvyqB,KAAK6iwB,gBAAgBtwF,GAAU,KACD,KAAzBA,EAAS12pB,YACrB,GAAItb,EACA2hwB,GAAcE,aAAa7vF,EAAUhyqB,GAAM,OAE1C,CACDyyG,EAASrxG,YAAY4wqB,GACrB,IAAI1ymB,GAAAA,EAAUr/D,SAASW,cAAc,QAC7Ba,UAAY,mBACpBgxG,EAAS9tG,aAAa26D,EAAQjjD,WAAYo2F,EAASp2F,YACnDrc,EAAOyyG,EAASp2F,WAI5B,OAAOrc,EAGP,OAAO,MAGfgiwB,EAAWlnwB,UAAUwnwB,gBAAkB,SAAUtwF,EAAUj3R,GACvD,IAAIz5Y,EAAM0wqB,EAAShhqB,WAAW9U,OAAS,EAUvC,OATIoF,GAAO,IAAMy5Y,EACbt7Y,KAAK6iwB,gBAAgBtwF,EAAShhqB,WAAW1P,GAAMy5Y,GAE1Cz5Y,GAAO,EACZ7B,KAAK6iwB,gBAAgBtwF,EAAShhqB,WAAW,GAAI+pY,GAElB,IAAtBi3R,EAASxsqB,UAAwC,KAAtBwsqB,EAASxsqB,UACzCwsqB,EAAS9xqB,WAAW6E,YAAYitqB,GAE7BA,GAGXgwF,EAAWlnwB,UAAUynwB,eAAiB,SAAU/1Z,EAAS96V,EAAOqpY,GAG5D,IAAK,IADDpnY,GADJ64V,EAAU,EAAYA,EAAUA,EAAQrtT,WACjB,GACd/jD,EAAM,EAAGA,EAAMoxW,EAAQtwW,SAAW,EAAaswW,EAAQpxW,GAAOsW,EAAU86V,EAAQpxW,IAAQsW,GAAStW,IACtGuY,EAAW64V,EAAQpxW,GAEvB,OAAOuY,GAEXquvB,EAAWlnwB,UAAU0nwB,eAAiB,SAAUtG,EAAY1quB,EAAOxxB,GAC/D,IAAIyiwB,EAAcvG,EAAW9kN,cACzB5qM,KACJA,EAAQvoW,KAAK,GAGb,IAFA,IAAI4K,EAAMpP,KAAKijwB,cAAc1iwB,EAAK/D,MAC9ByV,EAAQ7C,EAAI7Q,QAAQ,IAAK,IACX,IAAX0T,GACC86V,EAAQxuW,QAAQ0T,GAAS,GACzB86V,EAAQvoW,KAAKyN,GAEb,IAAI+R,OAAO,OAAO7gB,KAAKiM,EAAI6C,EAAQ,KAAQ86V,EAAQxuW,QAAQ0T,EAAQ,GAAK,GACxE86V,EAAQvoW,KAAKyN,EAAQ,GAErB,IAAI+R,OAAO,OAAO7gB,KAAKiM,EAAI6C,EAAQ,KACnC86V,EAAQvoW,KAAKyN,EAAQ,GAEzBA,EAAQ7C,EAAI7Q,QAAQ,IAAM0T,EAAQ,GAGtC,GADA86V,EAAQvoW,KAAK4K,EAAI3S,QACZswW,EAAQxuW,QAAQwzB,EAAMyke,cAAgB,GAClCzpJ,EAAQxuW,QAAQwzB,EAAMyke,YAAc,IAAM,IAA6B,IAAtBzke,EAAMyke,aAC9B,IAAtBzke,EAAMyke,aAAqB,IAAIxye,OAAO,OAAO7gB,KAAKiM,EAAI,MACrD29V,EAAQA,EAAQtwW,OAAS,GAAK,IAAOs1B,EAAMyke,YACpDwsQ,EAAcjxuB,EACd/xB,KAAKkU,SAAW,MAEf,CACD,IAAIsif,EAAcx2f,KAAK8iwB,eAAe/1Z,EAASh7U,EAAMyke,aAAa,GAClEx2f,KAAKkU,SAAW6d,EAAMyke,YAAcA,EACpCwsQ,EAAY5qN,SAASrmhB,EAAMuquB,eAAgB9lQ,GAC3CwsQ,EAAY1F,OAAOvruB,EAAMuquB,eAAgBt8vB,KAAK8iwB,eAAe/1Z,EAASh7U,EAAMyke,aAAa,IAE7F,OAAOwsQ,GAEXT,EAAWlnwB,UAAU6nwB,cAAgB,SAAUzG,EAAY1quB,EAAOxxB,GAC9D,OAAOP,KAAKwiwB,cAAcxiwB,KAAK+iwB,eAAetG,EAAY1quB,EAAOxxB,GAAOA,IAE5EgiwB,EAAWlnwB,UAAU4nwB,cAAgB,SAAUn1sB,GAC3C,OAAOA,EAAKv+C,QAAQ,qBAAsB,MAEvCgzvB,KCvHPY,GAA4B,WAC5B,SAASA,KAoET,OAlEAA,EAAW9vR,OAAS,SAAUopR,EAAY2G,GACtC,IAAI7iwB,EACJ,GAA0B,iBAAf6iwB,EAAyB,CAChC,IAAIvjsB,EAAUr/D,SAASW,cAAc,OACrC0+D,EAAQ79D,UAAYohwB,EACpB7iwB,EAAOs/D,EAAQjjD,gBAGfrc,EAAO6iwB,EAEX,IAAInF,EAAgB,IAAIjC,GACpBqH,EAAa,IAAId,GACjBxwuB,EAAQksuB,EAActP,SAAS8N,GAEnC,GADkB1quB,EAAMs7X,UAyCpBt7X,EAAMqxuB,WAAW7iwB,GACK,IAAlBA,EAAKwF,UAAkBxF,EAAKgR,WAAW9U,OAAS,EAChDwhwB,EAAcZ,iBAAiBZ,EAAYl8vB,EAAMA,EAAM,EAAG,GAEnC,IAAlBA,EAAKwF,SACVk4vB,EAAcV,qBAAqBd,EAAYl8vB,GAG/C09vB,EAAcZ,iBAAiBZ,EAAYl8vB,EAAMA,EAAMA,EAAKsb,YAAYpf,OAAQ8D,EAAKsb,YAAYpf,YAhDvF,CACd,IAAIq1D,EAAQmssB,EAAcjB,wBAAwBjruB,GAC9C0gS,EAAU4wc,EAAWb,cAAczwuB,EAAO+/B,EAAM,IAChDwxsB,EAAU7wc,EAAQ5qH,gBAClBpnM,EAAagyT,EAAQhyT,WACzB,GAAqB,IAAjBqxD,EAAMr1D,OACNwhwB,EAAcV,qBAAqBd,EAAYhqc,GAC/C1gS,EAAQksuB,EAActP,SAAS8N,OAE9B,CACD,IAAI8G,EAAUF,EAAWb,cAAczwuB,EAAO+/B,EAAMA,EAAMr1D,OAAS,IACnEwhwB,EAAcZ,iBAAiBZ,EAAYhqc,EAAS8wc,EAAS,EAAyB,IAArBA,EAAQx9vB,SACrEw9vB,EAAQ1nvB,YAAYpf,OAAS8mwB,EAAQhyvB,WAAW9U,QACpDs1B,EAAQksuB,EAActP,SAAS8N,GAEnC1quB,EAAM6wuB,kBACN,IAAK,IAAI3wvB,EAAQ,EAAGA,EAAQ6/C,EAAMr1D,OAAQwV,IACR,IAA1B6/C,EAAM7/C,GAAOlM,UAA6C,MAA3B+rD,EAAM7/C,GAAOxR,YAC5CqxD,EAAM7/C,GAAOxR,WAAW6E,YAAYwsD,EAAM7/C,IAG9CqxvB,EACApB,GAAcE,aAAa7hwB,EAAM+iwB,GAAS,GAGtC7iwB,EAAWmc,WACXslvB,GAAcE,aAAa7hwB,EAAME,EAAWmc,YAAY,GAGxDnc,EAAWkB,YAAYpB,GAGT,IAAlBA,EAAKwF,SACLk4vB,EAAcZ,iBAAiBZ,EAAYl8vB,EAAMA,EAAM,EAAGA,EAAKgR,WAAW9U,QAG1EwhwB,EAAcZ,iBAAiBZ,EAAYl8vB,EAAMA,EAAM,EAAGA,EAAKsb,YAAYpf,UAgBhF0mwB,KCrEPK,GAA6B,WAK7B,SAASA,EAAYljwB,GACjBN,KAAKM,OAASA,EACdN,KAAKtD,mBAqCT,OAnCA8mwB,EAAYnowB,UAAUqB,iBAAmB,WACrCsD,KAAKM,OAAOu2qB,SAASjxlB,GRVX,cQU6B5lF,KAAKy/uB,WAAYz/uB,OAE5DwjwB,EAAYnowB,UAAUokvB,WAAa,SAAU5+uB,GACzC,GAAKpD,EAAkBoD,EAAEgd,KAAK4lvB,eAAoD,MAAnC5iwB,EAAEgd,KAAK4lvB,aAAa,GAAGzgwB,QAQjE,CACD,IAAI6Q,EAAS1S,EAAc,KACvBkC,UAAW,eAAgBI,OACvBirB,KAAM7tB,EAAEgd,KAAK+P,IACbzmB,OAAQtG,EAAEgd,KAAK1W,OACf+4B,MAAwB,KAAjBr/B,EAAEgd,KAAKqiB,MAAer/B,EAAEgd,KAAK+P,IAAM/sB,EAAEgd,KAAKqiB,SAGzDrsB,EAAOonD,UAA4B,KAAhBp6D,EAAEgd,KAAK4O,KAAc5rB,EAAEgd,KAAK+P,IAAM/sB,EAAEgd,KAAK4O,KAC5D5rB,EAAEgd,KAAK+xD,UAAUie,UACjBs1qB,GAAW9vR,OAAOrze,KAAKM,OAAO09vB,gBAAiBnqvB,GAC/ChT,EAAEgd,KAAK+xD,UAAUytrB,iBAAiBr9vB,KAAKM,OAAO09vB,gBAAiBnqvB,EAAOtC,WAAW,GAAIsC,EAAOtC,WAAW,GAAI,EAAGsC,EAAOtC,WAAW,GAAGsK,YAAYpf,YAnB5D,CACnF,IAAI6mH,EAAYziH,EAAEgd,KAAK4lvB,aAAa,GACpCngpB,EAAU9/G,aAAa,OAAQ3C,EAAEgd,KAAK+P,KACtC01F,EAAU9/G,aAAa,QAAS3C,EAAEgd,KAAKqiB,OACvCojF,EAAUthH,UAAYnB,EAAEgd,KAAK4O,KAC7B62F,EAAU9/G,aAAa,SAAU3C,EAAEgd,KAAK1W,QACxCtG,EAAEgd,KAAK+xD,UAAUytrB,iBAAiBr9vB,KAAKM,OAAO09vB,gBAAiB16oB,EAAWA,EAAW,EAAG,GAexFziH,EAAEm8D,UACFn8D,EAAEm8D,UACEovH,YAAa,QACbgnkB,WAAY,OACZ92vB,MAAOuE,EAAEvE,MACTy1B,MAAO/xB,KAAKM,OAAO29vB,cAActP,SAAS3uvB,KAAKM,OAAO09vB,iBACtDp6vB,SAAU5D,KAAKM,OAAO29vB,cAAcR,iBAAiBz9vB,KAAKM,OAAO09vB,oBAItEwF,KC5CPE,GAA4B,WAK5B,SAASA,EAAWpjwB,GAChBN,KAAKk9uB,YACDymB,YAAe,OACfC,cAAiB,SACjBC,aAAgB,QAChBC,YAAe,WAEnB9jwB,KAAKM,OAASA,EACdN,KAAKtD,mBA8CT,OA5CAgnwB,EAAWrowB,UAAUqB,iBAAmB,WACpCsD,KAAKM,OAAOu2qB,SAASjxlB,GAAGm+qB,GAAyB/jwB,KAAKolnB,eAAgBplnB,MACtEA,KAAKM,OAAOu2qB,SAASjxlB,GAAGouqB,GAAyBh0vB,KAAKyje,UAAWzje,OAErE0jwB,EAAWrowB,UAAUooe,UAAY,SAAU5ie,GACvC,OAAQA,EAAEvE,MAAM65D,QACZ,IAAK,iBACDn2D,KAAKolnB,gBAAiB5xiB,WAAY,gBAAiBxW,SAAUn8D,EAAEm8D,WAC/Dn8D,EAAEvE,MAAMkpB,iBACR,MACJ,IAAK,eACDxlB,KAAKolnB,gBAAiB5xiB,WAAY,cAAexW,SAAUn8D,EAAEm8D,WAC7Dn8D,EAAEvE,MAAMkpB,iBACR,MACJ,IAAK,eACDxlB,KAAKolnB,gBAAiB5xiB,WAAY,cAAexW,SAAUn8D,EAAEm8D,WAC7Dn8D,EAAEvE,MAAMkpB,iBACR,MACJ,IAAK,gBACDxlB,KAAKolnB,gBAAiB5xiB,WAAY,eAAgBxW,SAAUn8D,EAAEm8D,WAC9Dn8D,EAAEvE,MAAMkpB,mBAIpBk+uB,EAAWrowB,UAAU+pnB,eAAiB,SAAUvknB,GAI5C,IAAK,IAHDkxB,EAAQ/xB,KAAKM,OAAO29vB,cAActP,SAAS3uvB,KAAKM,OAAO09vB,iBACvDvwqB,EAAOztF,KAAKM,OAAO29vB,cAAcxwqB,KAAK17D,EAAO/xB,KAAKM,OAAO09vB,iBACzDgG,EAAiBhkwB,KAAKM,OAAO8/vB,QAAQJ,aAChC7jwB,EAAI,EAAGA,EAAI6nwB,EAAevnwB,OAAQN,IAAK,CAE5C8J,EADiB+9vB,EAAe7nwB,IACA8nwB,aAAcjkwB,KAAKk9uB,WAAWr8uB,EAAE2yE,cAEpExzE,KAAKM,OAAOklvB,gBAAgBtjvB,QAC5BurF,EAAKI,UACDhtF,EAAEm8D,UACFn8D,EAAEm8D,UACEovH,YAAavrL,EAAE2yE,WACf4/qB,WAAY,OACZ92vB,MAAOuE,EAAEvE,MACTy1B,MAAO/xB,KAAKM,OAAO29vB,cAActP,SAAS3uvB,KAAKM,OAAO09vB,iBACtDp6vB,SAAU5D,KAAKM,OAAO8/vB,QAAQJ,gBAInC0D,KC5DPtuR,GAAyB,WAKzB,SAASA,EAAQ90e,GACbN,KAAKkkwB,YAAc,GACnBlkwB,KAAKM,OAASA,EACdN,KAAKtD,mBAsET,OApEA04e,EAAQ/5e,UAAUqB,iBAAmB,WACjCsD,KAAKM,OAAOu2qB,SAASjxlB,GVFJ,cUE6B5lF,KAAKmkwB,aAAcnkwB,MACjEA,KAAKM,OAAOu2qB,SAASjxlB,GAAGouqB,GAAyBh0vB,KAAKyje,UAAWzje,OAErEo1e,EAAQ/5e,UAAUooe,UAAY,SAAU5ie,GACpC,OAAQA,EAAEvE,MAAM65D,QACZ,IAAK,UACDn2D,KAAKmkwB,cAAe3wrB,WAAY,SAAUxW,SAAUn8D,EAAEm8D,WACtDn8D,EAAEvE,MAAMkpB,iBACR,MACJ,IAAK,WACDxlB,KAAKmkwB,cAAe3wrB,WAAY,UAAWxW,SAAUn8D,EAAEm8D,WACvDn8D,EAAEvE,MAAMkpB,mBAIpB4vd,EAAQ/5e,UAAU8owB,aAAe,SAAUtjwB,GAMvC,IAAK,IALDkxB,EAAQ/xB,KAAKM,OAAO29vB,cAActP,SAAS3uvB,KAAKM,OAAO09vB,iBACvDvwqB,EAAOztF,KAAKM,OAAO29vB,cAAcxwqB,KAAK17D,EAAO/xB,KAAKM,OAAO09vB,iBACzDoG,EAAepkwB,KAAKM,OAAO8/vB,QAAQJ,aACnCqE,EAAcD,EAAa/iwB,QAC3Bw/vB,KACK1kwB,EAAI,EAAGA,EAAIkowB,EAAY5nwB,OAAQN,IACL,OAA3BkowB,EAAYlowB,GAAG6G,SAAoB,OAASqhwB,EAAYlowB,GAAGsE,WAAWuC,SACtEohwB,EAAa/7uB,OAAO+7uB,EAAa7lwB,QAAQ8lwB,EAAYlowB,IAAK,GAC1D0kwB,EAAWr8vB,KAAK6/vB,EAAYlowB,GAAGsE,aAEC,OAA3B4jwB,EAAYlowB,GAAG6G,UACpBohwB,EAAa/7uB,OAAO+7uB,EAAa7lwB,QAAQ8lwB,EAAYlowB,IAAK,GAC1D0kwB,EAAWr8vB,KAAK6/vB,EAAYlowB,KAGhC0kwB,EAAWpkwB,OAAS,GACpBuD,KAAKM,OAAOu2qB,SAAS9oqB,OAAOimvB,IACxB13vB,OACIkpB,eAAgB,aAChB43G,gBAAiB,aACjB3mB,SAA4B,WAAjB51G,EAAE2yE,WACbmjC,MAAO,GAEX0ppB,eAAe,IAGvB,IAASlkwB,EAAI,EAAGA,EAAIiowB,EAAa3nwB,OAAQN,IAAK,CAC1C,IAAIsE,EAAa2jwB,EAAajowB,GAC1B0vD,EAAaprD,EAAWiE,MAAMmnD,WAC9By4sB,OAAe,EACE,WAAjBzjwB,EAAE2yE,YACF8wrB,EAA8B,KAAfz4sB,EAAoB7rD,KAAKkkwB,YAAc,KAAOnvuB,SAAS82B,EAAY,MAAQ7rD,KAAKkkwB,YAAc,KAC7GzjwB,EAAWiE,MAAMmnD,WAAay4sB,IAG9BA,EAA+B,KAAfz4sB,GAAoC,QAAfA,EAAwB,GAAK92B,SAAS82B,EAAY,MAAQ7rD,KAAKkkwB,YAAc,KAClHzjwB,EAAWiE,MAAMmnD,WAAay4sB,GAGtCtkwB,KAAKM,OAAOklvB,gBAAgBtjvB,QAC5BurF,EAAKI,UACDhtF,EAAEm8D,UACFn8D,EAAEm8D,UACEovH,YAAavrL,EAAE2yE,WACf4/qB,WAAY,OACZ92vB,MAAOuE,EAAEvE,MACTy1B,MAAO/xB,KAAKM,OAAO29vB,cAActP,SAAS3uvB,KAAKM,OAAO09vB,iBACtDp6vB,SAAU5D,KAAKM,OAAO8/vB,QAAQJ,gBAInC5qR,KC7EPmvR,GAA8B,WAK9B,SAASA,EAAajkwB,GAClBN,KAAKM,OAASA,EACdN,KAAKtD,mBAmCT,OAjCA6nwB,EAAalpwB,UAAUqB,iBAAmB,WACtCsD,KAAKM,OAAOu2qB,SAASjxlB,GAAG4+qB,GAAgBxkwB,KAAKykwB,YAAazkwB,OAE9DukwB,EAAalpwB,UAAUopwB,YAAc,SAAU5jwB,GAC3C,GAAKpD,EAAkBoD,EAAEgd,KAAK4lvB,eAAoD,QAAnC5iwB,EAAEgd,KAAK4lvB,aAAa,GAAGzgwB,QAKjE,CACD,IAAIu8f,EAAap+f,EAAc,OAC3BkC,UAAW,0BAA2BI,OAClCuS,MAAOvY,EAAkBoD,EAAEgd,KAAK7H,OAAS,OAASnV,EAAEgd,KAAK7H,MACzDD,OAAQtY,EAAkBoD,EAAEgd,KAAK9H,QAAU,OAASlV,EAAEgd,KAAK9H,OAC3Di+F,IAAyB,KAAnBnzG,EAAEgd,KAAKgiuB,QAAkBh/uB,EAAEgd,KAAKgiuB,QAAU,MAGxDtgP,EAAW/7f,aAAa,MAAO/F,EAAkBoD,EAAEgd,KAAK+P,KAAO,GAAK/sB,EAAEgd,KAAK+P,KACtEnwB,EAAkBoD,EAAEgd,KAAK+xD,YAC1B/uE,EAAEgd,KAAK+xD,UAAUie,UAErBs1qB,GAAW9vR,OAAOrze,KAAKM,OAAO09vB,gBAAiBz+P,OAjBsC,CACrF,IAAImlQ,EAAS7jwB,EAAEgd,KAAK4lvB,aAAa,GACjCiB,EAAOlhwB,aAAa,MAAO3C,EAAEgd,KAAK+P,KAClC82uB,EAAOlhwB,aAAa,MAAO3C,EAAEgd,KAAKgiuB,SAgBlCh/uB,EAAEm8D,UACFn8D,EAAEm8D,UACEovH,YAAa,SACbgnkB,WAAY,OACZ92vB,MAAOuE,EAAEvE,MACTy1B,MAAO/xB,KAAKM,OAAO29vB,cAActP,SAAS3uvB,KAAKM,OAAO09vB,iBACtDp6vB,SAAU5D,KAAKM,OAAO29vB,cAAcR,iBAAiBz9vB,KAAKM,OAAO09vB,oBAItEuG,KC7CPI,GAA6B,WAC7B,SAASA,KAiLT,OA/KAA,EAAYtpwB,UAAUupwB,iBAAmB,SAAUrkwB,EAAMy7B,EAAQw2R,GAC7D,IAAI/xT,EAAaT,KAAK6kwB,gBAAgBtkwB,EAAMy7B,EAAQw2R,GACpD,OAAmB,OAAf/xT,GAAuBA,IAAe+xT,EAC/B/xT,EAEJ,MAEXkkwB,EAAYtpwB,UAAUwpwB,gBAAkB,SAAUtkwB,EAAMy7B,EAAQw2R,GAC5D,GACIjyT,EAAOA,EAAKE,iBACPF,GAASA,IAASiyT,IAAaxyT,KAAK8kwB,gBAAgBvkwB,EAAMy7B,IACnE,OAAOz7B,GAEXokwB,EAAYtpwB,UAAUypwB,gBAAkB,SAAUvkwB,EAAMy7B,GACpD,OAAQA,GACJ,IAAK,OACD,OAAO2ouB,EAAYj5f,OAAOnrQ,GAC9B,IAAK,SACD,OAAOokwB,EAAYz3f,SAAS3sQ,GAChC,IAAK,YACD,OAAOokwB,EAAYI,YAAYxkwB,GACnC,IAAK,gBACD,OAAOokwB,EAAYK,gBAAgBzkwB,GACvC,IAAK,cACD,OAAOokwB,EAAYM,cAAc1kwB,GACrC,IAAK,YACD,OAAOokwB,EAAYO,YAAY3kwB,GACnC,IAAK,YACD,OAAOP,KAAKmlwB,YAAY5kwB,GAC5B,IAAK,WACD,OAAOP,KAAKolwB,WAAW7kwB,GAC3B,IAAK,WACD,OAAOP,KAAKqlwB,WAAW9kwB,GAC3B,IAAK,kBACD,OAAOP,KAAKslwB,kBAAkB/kwB,GAClC,QACI,OAAO,IAGnBokwB,EAAYj5f,OAAS,SAAUnrQ,GAE3B,OAAwD,KADvC,SAAU,KACbhC,QAAQgC,EAAK2R,SAAS0D,mBAG+B,IAA1D5V,KAAKulwB,WAAWhnwB,QAAQgC,EAAK2R,SAAS0D,iBAC3CrV,EAAKmE,OAAmC,SAA1BnE,EAAKmE,MAAMqoB,aAOjC43uB,EAAYz3f,SAAW,SAAU3sQ,GAE7B,OAAwD,KADvC,KAAM,KACThC,QAAQgC,EAAK2R,SAAS0D,mBAG+B,IAA1D5V,KAAKulwB,WAAWhnwB,QAAQgC,EAAK2R,SAAS0D,iBAC3CrV,EAAKmE,OAAkC,WAAzBnE,EAAKmE,MAAMsoB,YAOjC23uB,EAAYI,YAAc,SAAUxkwB,GAEhC,OAAwD,KADvC,KACHhC,QAAQgC,EAAK2R,SAAS0D,mBAG+B,IAA1D5V,KAAKulwB,WAAWhnwB,QAAQgC,EAAK2R,SAAS0D,iBAC3CrV,EAAKmE,OAAuC,cAA9BnE,EAAKmE,MAAMytC,iBAOjCwytB,EAAYK,gBAAkB,SAAUzkwB,GAEpC,OAAwD,KADvC,MAAO,UACVhC,QAAQgC,EAAK2R,SAAS0D,mBAG+B,IAA1D5V,KAAKulwB,WAAWhnwB,QAAQgC,EAAK2R,SAAS0D,iBAC3CrV,EAAKmE,OAAuC,iBAA9BnE,EAAKmE,MAAMytC,iBAOjCwytB,EAAYM,cAAgB,SAAU1kwB,GAElC,OAAwD,KADvC,OACHhC,QAAQgC,EAAK2R,SAAS0D,gBAOxC+uvB,EAAYO,YAAc,SAAU3kwB,GAEhC,OAAwD,KADvC,OACHhC,QAAQgC,EAAK2R,SAAS0D,gBAOxC+uvB,EAAYtpwB,UAAU8pwB,YAAc,SAAU5kwB,GAC1C,IAAIi2B,EAAQj2B,EAAKmE,OAASnE,EAAKmE,MAAM8xB,MACrC,OAAqE,IAAjEmuuB,EAAYY,WAAWhnwB,QAAQgC,EAAK2R,SAAS0D,gBACnC,OAAV4gB,GAA4B,KAAVA,QAA0Br7B,IAAVq7B,GAO1CmuuB,EAAYtpwB,UAAUiqwB,kBAAoB,SAAU/kwB,GAChD,IAAI44mB,EAAY54mB,EAAKmE,OAASnE,EAAKmE,MAAMitD,gBACzC,OAAqE,IAAjEgzsB,EAAYY,WAAWhnwB,QAAQgC,EAAK2R,SAAS0D,gBAC/B,OAAdujmB,GAAoC,KAAdA,QAAkCh+mB,IAAdg+mB,GAOlDwrJ,EAAYtpwB,UAAUgqwB,WAAa,SAAU9kwB,GACzC,IAAIusB,EAAOvsB,EAAKmE,OAASnE,EAAKmE,MAAMmoB,SACpC,OAAqE,IAAjE83uB,EAAYY,WAAWhnwB,QAAQgC,EAAK2R,SAAS0D,gBACpC,OAATkX,GAA0B,KAATA,QAAwB3xB,IAAT2xB,GAOxC63uB,EAAYtpwB,UAAU+pwB,WAAa,SAAU7kwB,GACzC,IAAIk3B,EAAOl3B,EAAKmE,OAASnE,EAAKmE,MAAMuoB,WACpC,OAAqE,IAAjE03uB,EAAYY,WAAWhnwB,QAAQgC,EAAK2R,SAAS0D,gBACpC,OAAT6hB,GAA0B,KAATA,QAAwBt8B,IAATs8B,GAQxCktuB,EAAYY,YACR,IACA,OACA,UACA,IACA,MACA,MACA,OACA,OACA,MACA,KACA,IACA,MACA,QACA,IACA,OACA,QACA,OACA,SACA,MACA,MACA,KACA,IACA,OAEGZ,KC/KPa,GAAmC,WACnC,SAASA,KAqNT,OAnNAA,EAAkBx/L,YAAc,SAAUy2L,EAAYzguB,EAAQw2R,EAASx1T,GAGnE,IAFoB,OAAQ,SAAU,YAAa,gBAAiB,cAChE,YAAa,YAAa,YAAa,YAAa,WAAY,WAAY,mBAC/DuB,QAAQy9B,IAAW,EAAG,CACnC,IAAIypuB,EAAe,IAAIzJ,GACnBqH,EAAa,IAAId,GACjBmD,EAAc,IAAIf,GAClB5yuB,EAAQ0zuB,EAAa9W,SAAS8N,GAC9BhvqB,EAAOg4qB,EAAah4qB,KAAK17D,EAAO0quB,GAChC3qsB,EAAQ2zsB,EAAa3I,2BAA2B/quB,GAChDqulB,GAAc,EACd+1I,GAAW,EACXwP,GAAW,EACXC,GAAgB,YAAa,WAAY,WAAY,mBAAmBrnwB,QAAQy9B,IAAW,EAC/F,GAAIjK,EAAMs7X,UACN,GAAIv7V,EAAMr1D,OAAS,EACf2jnB,GAAc,EACdrulB,EAAQsxuB,EAAWN,eAAetG,EAAY1quB,EAAO+/B,EAAM,QAE1D,CACD,IAAI+zsB,EAAa7lwB,KAAK8lwB,iBAAiBL,EAAc1zuB,EAAO2zuB,EAAarC,EAAYrnuB,EAAQh/B,EAAOw1T,GACpGizc,EAAajJ,aAAeiJ,EAAanJ,eAAiBmJ,EAAalJ,aAAasJ,GAAY,GAChGJ,EAAaplQ,UAAYolQ,EAAajvQ,YAAc,EAG5DmvQ,EAAW5zuB,EAAMs7X,UACjB,IAAK,IAAIp7Y,EAAQ,EAAGA,EAAQ6/C,EAAMr1D,OAAQwV,IAAS,CAC/C,IAAI8zvB,EAAaL,EAAYd,iBAAiB9ysB,EAAM7/C,GAAQ+pB,EAAQw2R,GACtD,IAAVvgT,GAA8B,OAAf8zvB,IACf5P,GAAW,GAMXrksB,EAAM7/C,GAJS,OAAf8zvB,GAAyB5P,IAAYyP,EAItB5lwB,KAAKuojB,aAAaz2f,EAAO7/C,EAAO8zvB,EAAYJ,EAAUxP,EAAUyP,EAAa7zuB,EAAOsxuB,EAAYrnuB,EAAQh/B,GAHxGgD,KAAKgmwB,aAAal0sB,EAAO7/C,EAAO8zvB,EAAYJ,EAAUxP,EAAUyP,EAAa7zuB,EAAOsxuB,EAAYrnuB,EAAQh/B,EAAOyowB,GAKlIA,EAAezlwB,KAAK6mW,eAAe/0S,EAAO2zsB,EAAcpC,EAAYpxvB,EAAOmumB,GAE/E3yhB,EAAKI,YAGb23qB,EAAkBM,iBAAmB,SAAUL,EAAc1zuB,EAAO2zuB,EAAarC,EAAYrnuB,EAAQh/B,EAAOw1T,GACxG,IAAIyzc,EAAcR,EAAa9I,kBAAkB5quB,GAC7Cm0uB,EAAgBD,EAAYxpwB,OAAS,EAAKipwB,EAAYd,iBAAiBqB,EAAY,GAAIjquB,EAAQw2R,GAAW,KAC1Gqzc,EAAa,KAQjB,OAPIK,GACAL,EAAaI,EAAY,GACzB/D,GAAcI,OAAO4D,IAGrBL,EAAa7lwB,KAAKmmwB,cAAcp0uB,EAAOiK,EAAQh/B,GAAO4f,WAEnDipvB,GAEXL,EAAkBQ,aAAe,SAAUl0sB,EAAO7/C,EAAO8zvB,EAAYJ,EAAUxP,EAAUyP,EAAa7zuB,EAAOsxuB,EAAYrnuB,EAAQh/B,EAAOyowB,GACpI,IAAIW,EAAY,KAChB,GAAMr0uB,EAAMuquB,iBAAmBvquB,EAAMyquB,cAAsC,IAAtBzquB,EAAMyke,aACpDzke,EAAMsue,YAActue,EAAMuquB,eAAe7/vB,OAAS,CACrD,IAAI4yS,KACAztS,EAAYkwD,EAAM7/C,GACtB,GACIo9R,EAAU7qS,KAAKihwB,EAAapyrB,SAASzxE,IACrCA,EAAYA,EAAUnB,iBACjBmB,GAAcA,IAAcmkwB,GAErC,GADAnkwB,EAAYwkwB,EAAY/C,EAAWb,cAAczwuB,EAAOg0uB,GACnDJ,EAuBA,CAED,IADA,IAAI14L,EAAWm5L,EACgB,OAAxBn5L,EAASrwjB,YAAwD,IAAjCqwjB,EAASrwjB,WAAW7W,SAAgB,KACvEknkB,EAAWA,EAASrwjB,WAExBqwjB,EAASjrkB,UAAY,mBACrB8vD,EAAM7/C,GAASg7jB,EAASrwjB,eA7Bb,CACX,KAAOhb,GAAaA,EAAU2P,WAAW9U,OAAS,GAAO4yS,EAAU5yS,OAAS,GAAM,GAC1EmF,EAAU2P,WAAW9U,OAAS4yS,EAAUA,EAAU5yS,OAAS,IAC/DmF,EAAYA,EAAU2P,WAAW89R,EAAUA,EAAU5yS,OAAS,IAC9D4yS,EAAUjjJ,MAEd,GAA2B,IAAvBxqJ,EAAUmE,UAAoB4/vB,GAAoC,KAAxB/jwB,EAAUuQ,UAGnD,CACD,IAAI0tD,EAAUr/D,SAASW,cAAc,OACrC0+D,EAAQ79D,UAAY,mBACO,IAAvBJ,EAAUmE,UACVnE,EAAUsD,aAAa26D,EAAQjjD,WAAYhb,EAAUgb,YACrDk1C,EAAM7/C,GAASrQ,EAAUgb,aAGzBhb,EAAUnB,WAAWyE,aAAa26D,EAAQjjD,WAAYhb,GACtDkwD,EAAM7/C,GAASrQ,EAAUimM,gBACzBjmM,EAAUnB,WAAW6E,YAAY1D,SAZrCkwD,EAAM7/C,GAASrQ,GAyB3B,IAAIvB,EAAQ6hwB,GAAcI,OAAOyD,GACjC,GAAI1lwB,EAAM5D,OAAS,GAAKmpwB,EACpB,IAAK,IAAIjqwB,EAAM,EAAGA,EAAM0E,EAAM5D,OAAQd,IAClC0E,EAAM1E,GAAOumwB,GAAcG,KAAKhiwB,EAAM1E,GAAMqE,KAAKqmwB,cAAcrquB,EAAQh/B,IAG/E,OAAO80D,EAAM7/C,IAEjBuzvB,EAAkBj9M,aAAe,SAAUz2f,EAAO7/C,EAAO8zvB,EAAYJ,EAAUxP,EAAUyP,EAAa7zuB,EAAOsxuB,EAAYrnuB,EAAQh/B,GAC7H,GAAK2owB,EAoBD,GAAe,cAAX3puB,GAAqC,cAAXA,EAAwB,CAC9Ch7B,EAAUhB,KAAKmmwB,cAAcp0uB,EAAOiK,EAAQh/B,GAChD80D,EAAM7/C,GAASjR,EAAQ4b,WACvBymvB,EAAWnvvB,SAAW,OAGtBmvvB,EAAWnvvB,SAAW6d,EAAMyke,iBAzBhC,GAAoB,OAAfuvQ,GAAuB5P,GAAayP,GAGrC,GAFA9zsB,EAAM7/C,GAASoxvB,EAAWb,cAAczwuB,EAAO+/B,EAAM7/C,IACrD6/C,EAAM7/C,GAAO4J,YAAcwnvB,EAAWJ,cAAcnxsB,EAAM7/C,GAAO4J,aAClD,cAAXmgB,GAAqC,cAAXA,EAC1B81B,EAAM7/C,GAAO4J,YAA0B,cAAXmgB,EAA0B81B,EAAM7/C,GAAO4J,YAAYyqvB,oBACzEx0sB,EAAM7/C,GAAO4J,YAAY0/C,yBAE9B,IAAsB,IAAhBqqsB,GAAkC,KAAV5owB,EAAe,CAC9C,IAAIgE,EAAUhB,KAAKqmwB,cAAcrquB,EAAQh/B,GACzC80D,EAAM7/C,GAAUA,IAAW6/C,EAAMr1D,OAAS,EAAMylwB,GAAcG,KAAKvwsB,EAAM7/C,GAAQjR,GAC3EkhwB,GAAcC,WAAWrwsB,EAAM7/C,GAAQjR,GAAS,GACtD8wD,EAAM7/C,GAASjS,KAAKumwB,aAAaz0sB,EAAM7/C,GAAQjR,SAInD8wD,EAAM7/C,GAASoxvB,EAAWb,cAAczwuB,EAAO+/B,EAAM7/C,IAa7D,OAAO6/C,EAAM7/C,IAEjBuzvB,EAAkBW,cAAgB,SAAUp0uB,EAAOiK,EAAQh/B,GACvD,IAAIgE,EAAUhB,KAAKqmwB,cAAcrquB,EAAQh/B,GAGzC,OAFAgE,EAAQgB,UAAY,mBACpB+vB,EAAMqxuB,WAAWpiwB,GACVA,GAEXwkwB,EAAkBe,aAAe,SAAUhmwB,EAAMS,GAK7C,YAJa7F,IAAToF,GAA+B,OAATA,IACtBS,EAAQgB,UAAY,WACpBzB,EAAOS,EAAQ4b,YAEZrc,GAEXilwB,EAAkB3+Z,eAAiB,SAAU/0S,EAAO2zsB,EAAcpC,EAAYpxvB,EAAOmumB,GAqBjF,OApBqB,IAAjBtujB,EAAMr1D,QAAiB2jnB,EAMD,IAAjBtujB,EAAMr1D,QAAgB2jnB,GAC3BqlJ,EAAanJ,eAAiBmJ,EAAalJ,aAAazqsB,EAAM7/C,IAAQ,GACtEwzvB,EAAajJ,aAAeiJ,EAAanJ,eACzCmJ,EAAajvQ,YAAc6sQ,EAAWnvvB,SACtCuxvB,EAAaplQ,UAAYgjQ,EAAWnvvB,UAErB,IAAVjC,GACLwzvB,EAAanJ,eAAiBmJ,EAAalJ,aAAazqsB,EAAM7/C,IAAQ,GACtEwzvB,EAAajvQ,YAAc,GAEtBvkf,IAAU6/C,EAAMr1D,OAAS,IAC9BgpwB,EAAajJ,aAAeiJ,EAAalJ,aAAazqsB,EAAM7/C,IAAQ,GACpEwzvB,EAAaplQ,UAAYvuc,EAAM7/C,GAAO4J,YAAYpf,SAjBlDgpwB,EAAanJ,eAAiBmJ,EAAalJ,aAAazqsB,EAAM7/C,IAAQ,GACtEwzvB,EAAajJ,aAAeiJ,EAAanJ,eACzCmJ,EAAajvQ,YAAc,EAC3BivQ,EAAaplQ,UAAYvuc,EAAM7/C,GAAO4J,YAAYpf,QAgB/CgpwB,GAEXD,EAAkBa,cAAgB,SAAUrquB,EAAQh/B,GAChD,IAAIuD,EACJ,OAAQy7B,GACJ,IAAK,OACD,OAAOx7B,SAASW,cAAc,UAClC,IAAK,SACD,OAAOX,SAASW,cAAc,MAClC,IAAK,YAGD,OAFAZ,EAAOC,SAASW,cAAc,QAC9BZ,EAAKmE,MAAMytC,eAAiB,YACrB5xC,EACX,IAAK,gBAGD,OAFAA,EAAOC,SAASW,cAAc,QAC9BZ,EAAKmE,MAAMytC,eAAiB,eACrB5xC,EACX,IAAK,cACD,OAAOC,SAASW,cAAc,OAClC,IAAK,YACD,OAAOX,SAASW,cAAc,OAClC,IAAK,YAGD,OAFAZ,EAAOC,SAASW,cAAc,QAC9BZ,EAAKmE,MAAM8xB,MAAQx5B,EACZuD,EACX,IAAK,WAGD,OAFAA,EAAOC,SAASW,cAAc,QAC9BZ,EAAKmE,MAAMuoB,WAAajwB,EACjBuD,EACX,IAAK,WAGD,OAFAA,EAAOC,SAASW,cAAc,QAC9BZ,EAAKmE,MAAMmoB,SAAW7vB,EACfuD,EACX,QAGI,OAFAA,EAAOC,SAASW,cAAc,QAC9BZ,EAAKmE,MAAMitD,gBAAkB30D,EACtBuD,IAGZilwB,KCtNPgB,GAAoC,WAKpC,SAASA,EAAmBlmwB,GACxBN,KAAKM,OAASA,EACdN,KAAKtD,mBA8BT,OA5BA8pwB,EAAmBnrwB,UAAUqB,iBAAmB,WAC5CsD,KAAKM,OAAOu2qB,SAASjxlB,GAAG6grB,GAAyBzmwB,KAAK6mW,eAAgB7mW,MACtEA,KAAKM,OAAOu2qB,SAASjxlB,GAAGouqB,GAAyBh0vB,KAAK2/G,eAAgB3/G,OAE1EwmwB,EAAmBnrwB,UAAUskH,eAAiB,SAAU9+G,GAGhDA,EAAEvE,MAAMurB,UAFQ,OAAQ,SAAU,YAAa,gBAAiB,cAChE,YAAa,YAAa,aACMtpB,QAAQsC,EAAEvE,MAAM65D,SAAW,IAC3Dt1D,EAAEvE,MAAMkpB,iBACRggvB,GAAkBx/L,YAAYhmkB,KAAKM,OAAO09vB,gBAAiBn9vB,EAAEvE,MAAM65D,OAAQn2D,KAAKM,OAAOklvB,iBACvFxlvB,KAAKg9D,SAASn8D,EAAGA,EAAEvE,MAAM65D,UAGjCqwsB,EAAmBnrwB,UAAUwrW,eAAiB,SAAUhmW,GACpD2kwB,GAAkBx/L,YAAYhmkB,KAAKM,OAAO09vB,gBAAiBn9vB,EAAE2yE,WAAWjY,oBAAqBv7D,KAAKM,OAAOklvB,gBAAiB3kvB,EAAE7D,OAC5HgD,KAAKg9D,SAASn8D,EAAGA,EAAE2yE,aAEvBgzrB,EAAmBnrwB,UAAU2hE,SAAW,SAAU1gE,EAAO65D,GACjD75D,EAAM0gE,UACN1gE,EAAM0gE,UACFovH,YAAaj2H,EACb75D,MAAOA,EAAMA,MACb82vB,WAAY,OACZrhuB,MAAO/xB,KAAKM,OAAO29vB,cAActP,SAAS3uvB,KAAKM,OAAO09vB,iBACtDp6vB,SAAU5D,KAAKM,OAAO29vB,cAAcR,iBAAiBz9vB,KAAKM,OAAO09vB,oBAItEwI,KCtCPE,GAAgC,WAKhC,SAASA,EAAepmwB,GACpBN,KAAKM,OAASA,EACdN,KAAKtD,mBAiBT,OAfAgqwB,EAAerrwB,UAAUqB,iBAAmB,WACxCsD,KAAKM,OAAOu2qB,SAASjxlB,GAAG+grB,GAA0B3mwB,KAAK4mwB,UAAW5mwB,OAEtE0mwB,EAAerrwB,UAAUurwB,UAAY,SAAU/lwB,GAC3CsiwB,GAAW9vR,OAAOrze,KAAKM,OAAO09vB,gBAAiBn9vB,EAAE7D,OAC7C6D,EAAEm8D,UACFn8D,EAAEm8D,UACEovH,YAAavrL,EAAE2yE,WACf4/qB,WAAY,OACZ92vB,MAAOuE,EAAEvE,MACTy1B,MAAO/xB,KAAKM,OAAO29vB,cAActP,SAAS3uvB,KAAKM,OAAO09vB,iBACtDp6vB,SAAU5D,KAAKM,OAAO29vB,cAAcR,iBAAiBz9vB,KAAKM,OAAO09vB,oBAItE0I,KCvBPjN,GAA6B,WAC7B,SAASA,KAkLT,OAhLAA,EAAYzpsB,MAAQ,SAAUyssB,EAAYjqc,GACtC,IAAIyrc,EAAgB,IAAIjC,GACpBqH,EAAa,IAAId,GACjBxwuB,EAAQksuB,EAActP,SAAS8N,GAC/Br8I,EAAcrulB,EAAMs7X,UACpBv7V,EAAQmssB,EAAcjB,wBAAwBjruB,GAC9C07D,EAAOwwqB,EAAcxwqB,KAAK17D,EAAO0quB,GACrC,IAAKr8I,EAAa,CACd,IAAI3tT,EAAU4wc,EAAWb,cAAczwuB,EAAO+/B,EAAM,IACpD,GAAqB,IAAjBA,EAAMr1D,OACNwhwB,EAAcV,qBAAqBd,EAAYhqc,GAC/C1gS,EAAQksuB,EAActP,SAAS8N,OAE9B,CACD,IAAI8G,EAAUF,EAAWb,cAAczwuB,EAAO+/B,EAAMA,EAAMr1D,OAAS,IACnEwhwB,EAAcZ,iBAAiBZ,EAAYhqc,EAAS8wc,EAAS,EAAyB,IAArBA,EAAQx9vB,SACrEw9vB,EAAQ1nvB,YAAYpf,OAAS8mwB,EAAQhyvB,WAAW9U,QACpDs1B,EAAQksuB,EAActP,SAAS8N,GAEnC,IAAIoK,EAAa5I,EAActB,kBAAkB5quB,GAC7C+0uB,EAAmBD,EAAWxlwB,QAClCrB,KAAK+mwB,aAAa9I,EAAclB,kBAAkB+J,GAAmBA,EAAkB7I,EAActP,SAAS8N,GAAa4G,EAAY7wc,GACvIxyT,KAAKgnwB,YAAYvK,EAAYhvqB,EAAMo5qB,GACnC90uB,EAAQksuB,EAActP,SAAS8N,GAE/B,IAAIwK,GADJJ,EAAa5I,EAActB,kBAAkB5quB,IACX1wB,QAClCrB,KAAKknwB,YAAYzK,EAAYwK,EAAkBz0c,EAAS6wc,EAAYpF,GACpEj+vB,KAAKgnwB,YAAYvK,EAAYhvqB,EAAMo5qB,KAG3CpN,EAAYuN,YAAc,SAAUvK,EAAYhvqB,EAAMo5qB,GAClD,IAAIM,EAAiB15qB,EAAKwvqB,eAAe4J,GACzCp5qB,EAAK6uqB,eAAiB7uqB,EAAK8uqB,aAAa4K,EAAe,IAAI,EAAM1K,GACjEhvqB,EAAK+oa,YAAc,EACnB/oa,EAAK+uqB,aAAe/uqB,EAAK8uqB,aAAa4K,EAAeA,EAAe1qwB,OAAS,IAAI,EAAOggwB,GACxF,IAAI2K,EAAeD,EAAeA,EAAe1qwB,OAAS,GAC1DgxF,EAAK4ya,UAAuC,IAA1B+mQ,EAAarhwB,SAAkBqhwB,EAAavrvB,YAAYpf,OACpE2qwB,EAAa71vB,WAAW9U,OAC9BgxF,EAAKI,WAET4rqB,EAAYyN,YAAc,SAAUzK,EAAY3qsB,EAAO0gQ,EAAS6wc,EAAYpF,GAExE,IAAK,IADDoG,KACKpyvB,EAAQ,EAAGA,EAAQ6/C,EAAMr1D,OAAQwV,IAClCjS,KAAK67vB,WAAWt9vB,QAAQuzD,EAAM7/C,GAAOC,SAASqpD,sBAAwB,IAC5B,IAAvC8osB,EAAY9lwB,QAAQuzD,EAAM7/C,IAC7BoyvB,EAAY7/vB,KAAKstD,EAAM7/C,IAEjBjS,KAAK67vB,WAAWt9vB,QAAQuzD,EAAM7/C,GAAOxR,WAAWyR,SAASqpD,sBAAwB,IAClC,IAAlD8osB,EAAY9lwB,QAAQuzD,EAAM7/C,GAAOxR,aACjC+xT,IAAY1gQ,EAAM7/C,GAAOxR,YAC5B4jwB,EAAY7/vB,KAAKstD,EAAM7/C,GAAOxR,YAGtC4jwB,EAAcrkwB,KAAKqnwB,aAAahD,EAAavysB,GAAO,GACpDuysB,EAAcrkwB,KAAKsnwB,aAAajD,GAChCrkwB,KAAKo/vB,OAAO3C,EAAY4H,EAAahB,EAAYpF,IAErDxE,EAAY4N,aAAe,SAAUhD,EAAavysB,GAC9C,IAAK,IAAIq0K,EAAS,EAAGA,EAASk+hB,EAAY5nwB,OAAQ0pO,IAE9C,IAAK,IADDtkO,EAAMwiwB,EAAYl+hB,GAAQ50N,WAAW9U,OAChC8pO,EAAS,EAAGA,EAAS1kO,EAAK0kO,IAK/B,GAJKz0K,EAAMvzD,QAAQ8lwB,EAAYl+hB,GAAQ50N,WAAWg1N,IAAW,GACrD89hB,EAAYl+hB,GAAQ50N,WAAWg1N,GAAQh1N,WAAW9U,OAAS,IAC/Dq1D,EAAQ9xD,KAAKqnwB,cAAchD,EAAYl+hB,GAAQ50N,WAAWg1N,IAAUz0K,GAAO,IAE1EA,EAAMvzD,QAAQ8lwB,EAAYl+hB,GAAQ50N,WAAWg1N,MAAa,GACI,KAA9D89hB,EAAYl+hB,GAAQ50N,WAAWg1N,GAAQ1qN,YAAY3L,OAAgB,CACpE,IAAK,IAAI4mO,EAAS,EAAGA,EAASj1O,EAAKi1O,IAC3BhlL,EAAMvzD,QAAQ8lwB,EAAYl+hB,GAAQ50N,WAAWulO,KAAY,GACzDhlL,EAAMzpC,OAAOypC,EAAMvzD,QAAQ8lwB,EAAYl+hB,GAAQ50N,WAAWulO,IAAU,GAG5EvQ,EAAS89hB,EAAYl+hB,GAAQ50N,WAAW9U,OACxC,IAAI8qwB,EAAclD,EAAY9lwB,QAAQ8lwB,EAAYl+hB,GAAQ1lO,YACtD4uS,EAAYv9O,EAAMvzD,QAAQ8lwB,EAAYl+hB,GAAQ1lO,YAC9C8mwB,GAAe,GACflD,EAAYh8uB,OAAOk/uB,EAAa,GAEhCl4d,GAAa,GACbv9O,EAAMzpC,OAAOgnR,EAAW,GAE5B,IAAI1jF,EAAe75J,EAAMvzD,QAAQ8lwB,EAAYl+hB,IACzCxa,GAAgB,GAChB75J,EAAMzpC,OAAOsjM,EAAc,GAE/B04iB,EAAYh8uB,OAAO89M,EAAQ,GAC3BA,IAIZ,OAAQk+hB,EAAavysB,IAEzB2nsB,EAAYn0vB,YAAc,SAAU++vB,EAAa5jwB,GAC7C,IAAIqe,EAAQre,EAAW8Q,WAAW9U,OAClC,GAAIqiB,EAAQ,EACR,IAAK,IAAI7M,EAAQ,EAAGA,EAAQ6M,EAAO7M,IAC3BoyvB,EAAY9lwB,QAAQkC,EAAW8Q,WAAWU,KAAW,IACrDoyvB,EAAcrkwB,KAAKsF,YAAY++vB,EAAa5jwB,EAAW8Q,WAAWU,KACtDoW,OAAOg8uB,EAAY9lwB,QAAQkC,EAAW8Q,WAAWU,IAAS,GAIlF,OAAOoyvB,GAEX5K,EAAY6N,aAAe,SAAUjD,GACjC,IAAK,IAAIpyvB,EAAQ,EAAGA,EAAQoyvB,EAAY5nwB,OAAQwV,IACxCoyvB,EAAY9lwB,QAAQ8lwB,EAAYpyvB,GAAOxR,aAAe,KACtD4jwB,EAAcrkwB,KAAKsF,YAAY++vB,EAAaA,EAAYpyvB,KAC5CoW,OAAOpW,EAAO,GAC1BA,KAGR,OAAOoyvB,GAEX5K,EAAY2F,OAAS,SAAU3C,EAAY4H,EAAahB,EAAYpF,GAChE,IAAK,IAAI93hB,EAAS,EAAGA,EAASk+hB,EAAY5nwB,OAAQ0pO,IAO9C,GANInmO,KAAKwnwB,cAAcjpwB,QAAQ8lwB,EAAYl+hB,GAAQj0N,SAAS0D,gBAAkB,GACvEyuvB,EAAYl+hB,GAAQ1lO,YACpBT,KAAKynwB,qBAAqBlpwB,QAAQ8lwB,EAAYl+hB,GAAQ1lO,WAAWyR,SAAS0D,gBAAkB,IAC/FqovB,EAAcZ,iBAAiBZ,EAAY4H,EAAYl+hB,GAASk+hB,EAAYl+hB,GAAS,EAAGk+hB,EAAYl+hB,GAAQ50N,WAAW9U,QACvHylwB,GAAcI,OAAOe,EAAWb,cAAcvE,EAActP,SAAS8N,GAAa4H,EAAYl+hB,GAAQ1lO,cAEjD,MAArD4jwB,EAAYl+hB,GAAQj0N,SAASqpD,oBAA6B,CACtDv7D,KAAKynwB,qBAAqBlpwB,QAAQ8lwB,EAAYl+hB,GAAQj0N,SAAS0D,eAAiB,GACb,MAAhEyuvB,EAAYl+hB,GAAQ1lO,WAAWyR,SAASqpD,sBACI,IAA1C8osB,EAAYl+hB,GAAQ50N,WAAW9U,QACsC,MAAnE4nwB,EAAYl+hB,GAAQ50N,WAAW,GAAGW,SAASqpD,sBAClD2msB,GAAcG,KAAKgC,EAAYl+hB,GAASs2hB,EAAWt7vB,cAAc,MAErE,IAAIoQ,EAAa2wvB,GAAcI,OAAO+B,EAAYl+hB,IACxB,IAAtB50N,EAAW9U,QACkD,MAA1D8U,EAAW,GAAG9Q,WAAWyR,SAASqpD,sBACrC2msB,GAAcG,KAAKgC,EAAYl+hB,GAASs2hB,EAAWt7vB,cAAc,MACjE+gwB,GAAcI,OAAO+B,EAAYl+hB,KAErC,IAAK,IAAII,EAAS,EAAGA,EAASh1N,EAAW9U,OAAQ8pO,IACzCvmO,KAAKwnwB,cAAcjpwB,QAAQgT,EAAWg1N,GAAQr0N,SAAS0D,gBAAkB,GACzE5V,KAAKo/vB,OAAO3C,GAAalrvB,EAAWg1N,IAAU88hB,EAAYpF,QAKlEiE,GAAcG,KAAKgC,EAAYl+hB,GAASs2hB,EAAWt7vB,cAAc,MACjE+gwB,GAAcI,OAAO+B,EAAYl+hB,KAI7CszhB,EAAYsN,aAAe,SAAU3kX,EAAWtwV,EAAO//B,EAAOsxuB,EAAY7wc,GACtE,IAAK,IAAIvgT,EAAQ,EAAGA,EAAQmwY,EAAU3lZ,OAAQwV,IACtCmwY,EAAUnwY,GAAOxR,YACjBkkwB,GAAYY,WAAWhnwB,QAAQ6jZ,EAAUnwY,GAAOxR,WAAWyR,SAASqpD,sBAAwB,IAC5F8nsB,EAAWb,cAAczwuB,EAAOqwX,EAAUnwY,GAAOxR,YACjDT,KAAK0nwB,mBAAmBtlX,EAAUnwY,GAAOxR,cAIrDg5vB,EAAYiO,mBAAqB,SAAUtlX,GAEvC,IAAK,IADDtwV,EAAQowsB,GAAcI,OAAOlgX,GACxBnwY,EAAQ,EAAGA,EAAQ6/C,EAAMr1D,OAAQwV,IACY,IAA9C6/C,EAAM7/C,GAAOxR,WAAW8Q,WAAW9U,QAChCkowB,GAAYY,WAAWhnwB,QAAQuzD,EAAM7/C,GAAOxR,WAAWyR,SAASqpD,sBAAwB,EAC3Fv7D,KAAK0nwB,mBAAmB51sB,EAAM7/C,GAAOxR,YAEhCkkwB,GAAYY,WAAWhnwB,QAAQuzD,EAAM7/C,GAAOC,SAASqpD,sBAAwB,GAClFv7D,KAAK0nwB,mBAAmB51sB,EAAM7/C,KAI1CwnvB,EAAYoC,YAAc,UAAW,UAAW,QAAS,aACrD,UAAW,KAAM,MAAO,KAAM,KAAM,WAAY,aAAc,SAAU,SACxE,OAAQ,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,SAAU,SAAU,KAAM,OAAQ,MAC9E,WAAY,KAAM,IAAK,MAAO,UAAW,QAAS,QAAS,KAAM,QAAS,KAC1E,QAAS,KAAM,MACnBpC,EAAYgO,sBAAwB,QAAS,QAAS,KAAM,KAAM,QAAS,SAC3EhO,EAAY+N,eAAiB,QAAS,QAAS,aAAc,KAAM,KAC/D,KAAM,QAAS,aAAc,MAC1B/N,KCnLPkO,GAAiC,WAKjC,SAASA,EAAgBrnwB,GACrBN,KAAKM,OAASA,EACdN,KAAKtD,mBA4BT,OA1BAirwB,EAAgBtswB,UAAUqB,iBAAmB,WACzCsD,KAAKM,OAAOu2qB,SAASjxlB,GjBoBL,aiBpB6B5lF,KAAK4nwB,WAAY5nwB,MAC9DA,KAAKM,OAAOu2qB,SAASjxlB,GAAGouqB,GAAyBh0vB,KAAKyje,UAAWzje,OAErE2nwB,EAAgBtswB,UAAUooe,UAAY,SAAU5ie,GAC5C,OAAQA,EAAEvE,MAAM65D,QACZ,IAAK,eACDn2D,KAAK4nwB,YAAap0rB,WAAY,cAAexW,SAAUn8D,EAAEm8D,WACzDn8D,EAAEvE,MAAMkpB,mBAIpBmivB,EAAgBtswB,UAAUuswB,WAAa,SAAU/mwB,GACxB,gBAAjBA,EAAE2yE,aACFimrB,GAAYzpsB,MAAMhwD,KAAKM,OAAO09vB,gBAAiBh+vB,KAAKM,OAAOklvB,iBACvD3kvB,EAAEm8D,UACFn8D,EAAEm8D,UACEovH,YAAavrL,EAAE2yE,WACfl3E,MAAOuE,EAAEvE,MACT82vB,WAAY,OACZrhuB,MAAO/xB,KAAKM,OAAO29vB,cAActP,SAAS3uvB,KAAKM,OAAO09vB,iBACtDp6vB,SAAU5D,KAAKM,OAAO29vB,cAAcR,iBAAiBz9vB,KAAKM,OAAO09vB,qBAK1E2J,KCpCPE,GAAiC,WACjC,SAASA,EAAgBvnwB,EAAQ0S,GAC7BhT,KAAKuzvB,iBACLvzvB,KAAKM,OAASA,EACdN,KAAKk5vB,cAAiBz7vB,EAAkBuV,GAAmC,GAAxBA,EAAQkmvB,cAC3Dl5vB,KAAKm5vB,cAAiB17vB,EAAkBuV,GAAmC,IAAxBA,EAAQmmvB,cAC3Dn5vB,KAAKtD,mBAoIT,OAlIAmrwB,EAAgBxswB,UAAUqB,iBAAmB,WACzC,IAAI0oF,EAAmBzlF,EAASK,KAAK4sI,MAAO5sI,KAAKm5vB,eACjDn5vB,KAAKM,OAAOu2qB,SAASjxlB,GAAGquqB,GAAuB7uqB,EAAkBplF,MACjEA,KAAKM,OAAOu2qB,SAASjxlB,GAAGouqB,GAAyBh0vB,KAAKulH,QAASvlH,MAC/DA,KAAKM,OAAOu2qB,SAASjxlB,GhCRT,SgCQ2B5lF,KAAKo5vB,SAAUp5vB,OAE1D6nwB,EAAgBxswB,UAAUuB,oBAAsB,WAC5CoD,KAAKM,OAAOu2qB,SAAS7wlB,IAAIiuqB,GAAuBj0vB,KAAK4sI,OACrD5sI,KAAKM,OAAOu2qB,SAAS7wlB,IAAIguqB,GAAyBh0vB,KAAKulH,SACvDvlH,KAAKM,OAAOu2qB,SAAS7wlB,IhCbT,SgCa4BhmF,KAAKo5vB,WAEjDyO,EAAgBxswB,UAAU+9vB,SAAW,SAAUv4vB,GACtB,SAAjBA,EAAE2yE,WACFxzE,KAAKkgb,KAAKr/a,GAGVb,KAAKmgb,KAAKt/a,IAQlBgnwB,EAAgBxswB,UAAUiX,QAAU,WAChCtS,KAAKpD,uBAETirwB,EAAgBxswB,UAAUkqH,QAAU,SAAU1kH,GAC1C,IAAIvE,EAAQuE,EAAEvE,MAEd,OAAQA,EAAM65D,QACV,IAAK,OACD75D,EAAMkpB,iBAHFxlB,KAIEkgb,KAAKr/a,GACX,MACJ,IAAK,OACDvE,EAAMkpB,iBAPFxlB,KAQEmgb,KAAKt/a,KAIvBgnwB,EAAgBxswB,UAAUuxI,MAAQ,SAAU/rI,GAChB,KAApBA,EAAEvE,MAAMwrB,SAAmBjnB,EAAEvE,MAAMurB,SACnC7nB,KAAKg6Q,SAASn5Q,IAQtBgnwB,EAAgBxswB,UAAU2+Q,SAAW,SAAUn5Q,GAC3C,IAAIkxB,GAAQ,IAAIiquB,IAAgBrN,SAAS3uvB,KAAKM,OAAO09vB,iBACjDvwqB,GAAO,IAAIuuqB,IAAgBvuqB,KAAK17D,EAAO/xB,KAAKM,OAAO09vB,iBAEnD3E,GAAa5suB,KADFzsB,KAAKM,OAAOklvB,gBAAgBxjvB,UACV+vB,MAAO07D,GACpCztF,KAAKuzvB,cAAc92vB,QAAUuD,KAAKonI,QAClCpnI,KAAKuzvB,cAAgBvzvB,KAAKuzvB,cAAclyvB,MAAM,EAAGrB,KAAKonI,MAAQ,IAE9DpnI,KAAKuzvB,cAAc92vB,OAAS,GAAMuD,KAAKuzvB,cAAcvzvB,KAAKuzvB,cAAc92vB,OAAS,GAAGs1B,MAAMA,MAAMs7X,WAAat7X,EAAMs7X,WAClHrtZ,KAAKuzvB,cAAcvzvB,KAAKuzvB,cAAc92vB,OAAS,GAAGs1B,MAAMyke,cAAgB/oa,EAAK17D,MAAMyke,aACnFx2f,KAAKuzvB,cAAcvzvB,KAAKuzvB,cAAc92vB,OAAS,GAAGs1B,MAAMsue,YAAc5ya,EAAK17D,MAAMsue,YAGtFrggB,KAAKuzvB,cAAc/uvB,KAAK60vB,GACxBr5vB,KAAKonI,MAAQpnI,KAAKuzvB,cAAc92vB,OAAS,EACrCuD,KAAKuzvB,cAAc92vB,OAASuD,KAAKk5vB,eACjCl5vB,KAAKuzvB,cAAc51qB,QAEnB98E,GAAKA,EAAEm8D,UACPn8D,EAAEm8D,aAQV6qsB,EAAgBxswB,UAAU6kb,KAAO,SAAUr/a,GACvC,GAAIb,KAAKonI,MAAQ,EAAG,CAChB,IAAIr1G,EAAQ/xB,KAAKuzvB,cAAcvzvB,KAAKonI,MAAQ,GAAGr1G,MAC3CunuB,EAAiBt5vB,KAAKuzvB,cAAcvzvB,KAAKonI,MAAQ,GAAG36G,KACxDzsB,KAAKM,OAAOklvB,gBAAgBxjvB,UAAYs3vB,EACxCt5vB,KAAKM,OAAOklvB,gBAAgBtjvB,QAC5B6vB,EAAM87D,UACN7tF,KAAKonI,QACDvmI,EAAEm8D,UACFn8D,EAAEm8D,UACEovH,YAAa,OACbgnkB,WAAY,OACZrhuB,MAAOA,EACPnuB,SAAU5D,KAAKM,OAAO29vB,cAAcR,iBAAiBz9vB,KAAKM,OAAO09vB,iBACjE1hwB,MAAOuE,EAAEvE,UAUzBurwB,EAAgBxswB,UAAU8kb,KAAO,SAAUt/a,GACvC,GAA0C,MAAtCb,KAAKuzvB,cAAcvzvB,KAAKonI,MAAQ,GAAY,CAC5C,IAAIr1G,EAAQ/xB,KAAKuzvB,cAAcvzvB,KAAKonI,MAAQ,GAAGr1G,MAC/C/xB,KAAKM,OAAOklvB,gBAAgBxjvB,UAAYhC,KAAKuzvB,cAAcvzvB,KAAKonI,MAAQ,GAAG36G,KAC3EzsB,KAAKM,OAAOklvB,gBAAgBtjvB,QAC5B6vB,EAAM87D,UACN7tF,KAAKonI,QACDvmI,EAAEm8D,UACFn8D,EAAEm8D,UACEovH,YAAa,OACbgnkB,WAAY,OACZrhuB,MAAOA,EACPnuB,SAAU5D,KAAKM,OAAO29vB,cAAcR,iBAAiBz9vB,KAAKM,OAAO09vB,iBACjE1hwB,MAAOuE,EAAEvE,UAKzBurwB,EAAgBxswB,UAAUqtvB,cAAgB,WACtC,IAAIlkqB,GAAW07V,MAAM,EAAOC,MAAM,GAOlC,OANIngb,KAAKonI,MAAQ,IACb5iD,EAAO07V,MAAO,GAEwB,MAAtClgb,KAAKuzvB,cAAcvzvB,KAAKonI,MAAQ,KAChC5iD,EAAO27V,MAAO,GAEX37V,GAEJqjrB,KC7HPC,GAA+B,WAK/B,SAASA,EAAc90vB,GACnBhT,KAAKg+vB,gBAAkBhrvB,EAAQxS,SAC/BR,KAAKwlvB,gBAAkBxyuB,EAAQwyuB,gBAC/BxlvB,KAAKi+vB,cAAgB,IAAIjC,GACzBh8vB,KAAKogwB,QAAU,IAAIrC,GAAQ/9vB,KAAKwlvB,gBAAiBxlvB,KAAKg+vB,iBACtDh+vB,KAAK62qB,SAAW,IAAIpxlB,GAASzlF,MAC7BA,KAAKo6vB,QAAU,IAAI+F,GAAMngwB,MACzBA,KAAKq6vB,UAAY,IAAIwH,GAAQ7hwB,MAC7BA,KAAK+nwB,aAAe,IAAIrE,GAAW1jwB,MACnCA,KAAKgowB,WAAa,IAAI5yR,GAAQp1e,MAC9BA,KAAKs6vB,QAAU,IAAIkJ,GAAYxjwB,MAC/BA,KAAKiowB,OAAS,IAAI1D,GAAavkwB,MAC/BA,KAAKkowB,aAAe,IAAI1B,GAAmBxmwB,MAC3CA,KAAKmowB,cAAgB,IAAIzB,GAAe1mwB,MACxCA,KAAKu6vB,SAAW,IAAIoN,GAAgB3nwB,MACpCA,KAAKyovB,gBAAkB,IAAIof,GAAgB7nwB,KAAMgT,EAAQA,SACzDhT,KAAKukB,aAiDT,OA/CAujvB,EAAczswB,UAAUkpB,WAAa,WACjCvkB,KAAK62qB,SAASjxlB,GjCrCA,UiCqCoB5lF,KAAKw6vB,cAAex6vB,MACtDA,KAAK62qB,SAASjxlB,GjCdF,QiCcoB5lF,KAAKy6vB,YAAaz6vB,OAEtD8nwB,EAAczswB,UAAUm/vB,cAAgB,SAAU35vB,GAC9Cb,KAAK62qB,SAAS9oqB,OAAOimvB,GAAyBnzvB,IAElDinwB,EAAczswB,UAAUo/vB,YAAc,SAAU55vB,GAC5Cb,KAAK62qB,SAAS9oqB,OAAOkmvB,GAAuBpzvB,IAEhDinwB,EAAczswB,UAAU08iB,YAAc,SAAUvwgB,EAASxqC,EAAOV,EAAO0gE,EAAUvwC,EAAMiuuB,GACnF,OAAQlztB,EAAQ+zB,qBACZ,IAAK,QACDv7D,KAAK62qB,SAAS9oqB,OjCjCP,aiCiCkCylE,WAAYx2E,EAAOV,MAAOA,EAAO0gE,SAAUA,IACpF,MACJ,IAAK,UACDh9D,KAAK62qB,SAAS9oqB,OAAOsnvB,IAAsB7hrB,WAAYx2E,EAAOV,MAAOA,EAAO0gE,SAAUA,IACtF,MACJ,IAAK,aACDh9D,KAAK62qB,SAAS9oqB,OAAOg2vB,IAA2BvwrB,WAAYx2E,EAAOV,MAAOA,EAAO0gE,SAAUA,IAC3F,MACJ,IAAK,UACDh9D,KAAK62qB,SAAS9oqB,OnBjDL,emBiDoCylE,WAAYx2E,EAAOV,MAAOA,EAAO0gE,SAAUA,IACxF,MACJ,IAAK,QACDh9D,KAAK62qB,SAAS9oqB,OnB5DZ,emB4DoC8P,KAAM68uB,EAAUp+vB,MAAOA,EAAO0gE,SAAUA,IAC9E,MACJ,IAAK,SACDh9D,KAAK62qB,SAAS9oqB,OAAOy2vB,IAAkB3mvB,KAAM68uB,EAAUp+vB,MAAOA,EAAO0gE,SAAUA,IAC/E,MACJ,IAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,SACDh9D,KAAK62qB,SAAS9oqB,OAAO04vB,IAA2BjzrB,WAAYx2E,EAAOV,MAAOA,EAAO0gE,SAAUA,EAAUhgE,MAAOyvB,IAC5G,MACJ,IAAK,aACDzsB,KAAK62qB,SAAS9oqB,OAAO44vB,IAA4B3psB,SAAUA,EAAUhgE,MAAOyvB,IAC5E,MACJ,IAAK,QACDzsB,KAAK62qB,SAAS9oqB,OnB7CN,cmB6CoCylE,WAAYx2E,EAAOV,MAAOA,EAAO0gE,SAAUA,IACvF,MACJ,IAAK,UACDh9D,KAAK62qB,SAAS9oqB,OjC3EV,UiC2EkCylE,WAAYx2E,EAAOV,MAAOA,EAAO0gE,SAAUA,MAItF8qsB,KCzFPx9qB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAkBxCy9qB,GAA+B,SAAUj9qB,GAEzC,SAASi9qB,EAAcp1vB,GACnB,IAAIjT,EAAQorF,EAAO7pF,KAAKtB,OAASA,KAMjC,OALAD,EAAMouG,aACNzvG,EAAOqB,EAAOA,EAAOiT,GAAS,GAC1BjT,EAAMi+vB,iBAAmBj+vB,EAAMiB,SAC/BjB,EAAM66vB,gBAAgB76vB,EAAMiB,QAASjB,EAAMi+vB,gBAAiBhrvB,EAAQA,SAEjEjT,EAmBX,OA3BAuqF,GAAU89qB,EAAej9qB,GAUzBi9qB,EAAc/swB,UAAU8yG,WAAa,WACjCnuG,KAAK+lvB,UAAYiS,IAOrBoQ,EAAc/swB,UAAUu/vB,gBAAkB,SAAUC,EAAaz9e,EAAKpqQ,GAC9D6nvB,GAAez9e,IACfp9Q,KAAKwovB,cAAgB,IAAIsf,IACrBtnwB,SAAU48Q,EACVooe,gBAAiBqV,EACjB7nvB,QAASA,MAIdo1vB,GACT3V,ICxCS4V,IACP35tB,MAAM,EACN6C,QAAQ,EACRq0jB,WAAW,EACXD,aAAa,EACbp7G,eAAe,EACfqzP,aAAa,EACbD,eAAe,EACfzoe,WAAW,EACXgoe,WAAY,KACZM,gBAAiB,KACjB3ka,UAAW,KACX0ka,SAAU,KACVn2U,SAAU,KACVl1R,QAAS,KACT4rmB,YAAY,GAEZwqB,GAA+B,WAC/B,SAASA,KAkOT,OAhOAA,EAAc5gwB,IAAM,SAAU+0vB,EAAY3ktB,EAAYiutB,EAAYl5uB,EAAUugN,GAKxE,IAAK,IAJDm7hB,EAAmB14sB,KAAKuB,MAAMvB,KAAKC,UAAUu4sB,KAC7Cp0V,EAAiBpkX,KAAKuB,MAAMvB,KAAKC,UAAUu4sB,KAC3CpK,EAAgB,IAAIjC,GACpBlqsB,EAAQmssB,EAActB,kBAAkBsB,EAActP,SAAS8N,IAC1DxqvB,EAAQ,EAAGA,EAAQ6/C,EAAMr1D,OAAQwV,IACR,IAA1B6/C,EAAM7/C,GAAOlM,WACb+rD,EAAMzpC,OAAOpW,EAAO,GACpBA,KAGR,IAASA,EAAQ,EAAGA,EAAQ6/C,EAAMr1D,OAAQwV,IACtCs2vB,EAAmBvowB,KAAK6kwB,gBAAgBpI,EAAY8L,EAAkBz2sB,EAAM7/C,GAAQ6lC,EAAYiutB,EAAYl5uB,EAAUugN,IACvG,IAAVn7N,GAAes2vB,EAAiB75tB,OAAU65tB,EAAiB75tB,QAC5DulY,EAAevlY,KAAO65tB,EAAiB75tB,OAE5B,IAAVz8B,GAAes2vB,EAAiBh3tB,SAAYg3tB,EAAiBh3tB,UAC9D0iY,EAAe1iY,OAASg3tB,EAAiBh3tB,SAE9B,IAAVt/B,GAAes2vB,EAAiBrzf,YAAeqzf,EAAiBrzf,aACjE++J,EAAe/+J,UAAYqzf,EAAiBrzf,YAEjC,IAAVjjQ,GAAes2vB,EAAiBh+Q,gBAAmBg+Q,EAAiBh+Q,iBACrEt2E,EAAes2E,cAAgBg+Q,EAAiBh+Q,gBAErC,IAAVt4e,GAAes2vB,EAAiB5iK,cAAiB4iK,EAAiB5iK,eACnE1xL,EAAe0xL,YAAc4iK,EAAiB5iK,cAEnC,IAAV1zlB,GAAes2vB,EAAiB3iK,YAAe2iK,EAAiB3iK,aACjE3xL,EAAe2xL,UAAY2iK,EAAiB3iK,YAEjC,IAAV3zlB,GAAes2vB,EAAiB1vb,YAAe0vb,EAAiB1vb,aACjEo7F,EAAep7F,UAAY0vb,EAAiB1vb,YAEjC,IAAV5mU,GAAes2vB,EAAiBhrB,WAAcgrB,EAAiBhrB,YAChEtpU,EAAespU,SAAWgrB,EAAiBhrB,WAEhC,IAAVtruB,GAAes2vB,EAAiBnhW,WAAcmhW,EAAiBnhW,YAChE6M,EAAe7M,SAAWmhW,EAAiBnhW,WAEhC,IAAVn1Z,GAAes2vB,EAAiB/qB,kBAAqB+qB,EAAiB/qB,mBACvEvpU,EAAeupU,gBAAkB+qB,EAAiB/qB,kBAEvC,IAAVvruB,GAAes2vB,EAAiB3qB,cAAiB2qB,EAAiB3qB,eACnE3pU,EAAe2pU,YAAc2qB,EAAiB3qB,cAEnC,IAAV3ruB,GAAes2vB,EAAiB5qB,gBAAmB4qB,EAAiB5qB,iBACrE1pU,EAAe0pU,cAAgB4qB,EAAiB5qB,gBAErC,IAAV1ruB,GAAes2vB,EAAiBrrB,aAAgBqrB,EAAiBrrB,cAClEjpU,EAAeipU,WAAaqrB,EAAiBrrB,aAElC,IAAVjruB,GAAes2vB,EAAiBr2nB,UAAaq2nB,EAAiBr2nB,WAC/D+hS,EAAe/hS,QAAUq2nB,EAAiBr2nB,UAE/B,IAAVjgI,GAAes2vB,EAAiBzqB,aAAgByqB,EAAiBzqB,cAClE7pU,EAAe6pU,WAAayqB,EAAiBzqB,YAEjDyqB,EAAmB14sB,KAAKuB,MAAMvB,KAAKC,UAAUu4sB,KAEjD,OAAOp0V,GAEXq0V,EAAczD,gBAAkB,SAAUpI,EAAY8L,EAAkBhowB,EAAMu3C,EAAYiutB,EAAYl5uB,EAAUugN,GAC5G,GAAIt1L,EAAW3zC,SAAS5D,GACpB,GACIgowB,EAAmBvowB,KAAK8kwB,gBAAgBrI,EAAY8L,EAAkBhowB,EAAMwlwB,EAAYl5uB,EAAUugN,GAClG7sO,EAAOA,EAAKE,iBACPF,GAASA,IAASu3C,GAE/B,OAAOywtB,GAEXD,EAAcxD,gBAAkB,SAAUrI,EAAY8L,EAAkBhowB,EAAMwlwB,EAAYl5uB,EAAUugN,GA8ChG,OA7CKm7hB,EAAiB75tB,OAClB65tB,EAAiB75tB,KAAOi2tB,GAAYj5f,OAAOnrQ,IAE1CgowB,EAAiBh3tB,SAClBg3tB,EAAiBh3tB,OAASoztB,GAAYz3f,SAAS3sQ,IAE9CgowB,EAAiBrzf,YAClBqzf,EAAiBrzf,UAAYyvf,GAAYI,YAAYxkwB,IAEpDgowB,EAAiBh+Q,gBAClBg+Q,EAAiBh+Q,cAAgBo6Q,GAAYK,gBAAgBzkwB,IAE5DgowB,EAAiB5iK,cAClB4iK,EAAiB5iK,YAAcg/J,GAAYM,cAAc1kwB,IAExDgowB,EAAiB3iK,YAClB2iK,EAAiB3iK,UAAY++J,GAAYO,YAAY3kwB,IAEpDgowB,EAAiB1vb,YAClB0vb,EAAiB1vb,UAAY74U,KAAKmlwB,YAAY1I,EAAYl8vB,IAEzDgowB,EAAiBhrB,WAClBgrB,EAAiBhrB,SAAWv9uB,KAAKolwB,WAAW3I,EAAYl8vB,EAAM6sO,IAE7Dm7hB,EAAiBnhW,WAClBmhW,EAAiBnhW,SAAWpna,KAAKqlwB,WAAW9kwB,EAAMssB,IAEjD07uB,EAAiB/qB,kBAClB+qB,EAAiB/qB,gBAAkBx9uB,KAAKslwB,kBAAkB/kwB,IAEzDgowB,EAAiB3qB,cAClB2qB,EAAiB3qB,YAAc59uB,KAAKwowB,cAAcjowB,IAEjDgowB,EAAiB5qB,gBAClB4qB,EAAiB5qB,cAAgB39uB,KAAKyowB,gBAAgBlowB,IAErDgowB,EAAiBrrB,aAClBqrB,EAAiBrrB,WAAal9uB,KAAK0owB,YAAYnowB,IAE9CgowB,EAAiBr2nB,UAClBq2nB,EAAiBr2nB,QAAUlyI,KAAK2owB,UAAUpowB,EAAMwlwB,IAE/CwC,EAAiBzqB,aAClByqB,EAAiBzqB,WAAa99uB,KAAKo+vB,OAAO79vB,IAEvCgowB,GAEXD,EAAcnD,YAAc,SAAU1I,EAAYl8vB,GAC9C,IAAIi2B,EAAQj2B,EAAKmE,OAASnE,EAAKmE,MAAM8xB,MAIrC,OAHe,OAAVA,QAA4Br7B,IAAVq7B,GAAiC,KAAVA,GAAmC,IAAlBj2B,EAAKwF,WAChEywB,EAAQx2B,KAAKmN,iBAAiBsvvB,EAAYl8vB,EAAM,UAEtC,OAAVi2B,GAA4B,KAAVA,QAA0Br7B,IAAVq7B,EAC3BA,EAGA,MAGf8xuB,EAAclK,OAAS,SAAU79vB,GAC7B,MAA0C,MAAtCA,EAAK2R,SAASqpD,qBAOtB+ssB,EAAchD,kBAAoB,SAAU/kwB,GACxC,IAAI44mB,EAAY54mB,EAAKmE,OAASnE,EAAKmE,MAAMitD,gBACzC,OAAkB,OAAdwnjB,GAAoC,KAAdA,QAAkCh+mB,IAAdg+mB,EACnCA,EAGA,MAGfmvJ,EAAcjD,WAAa,SAAU9kwB,EAAMssB,GACvC,IAAIC,EAAOvsB,EAAKmE,OAASnE,EAAKmE,MAAMmoB,SACpC,OAAc,OAATC,GAA0B,KAATA,QAAwB3xB,IAAT2xB,IAChB,OAAbD,QAAkC1xB,IAAb0xB,GAA2BA,EAAStuB,QAAQuuB,IAAS,GACvEA,EAGA,MAGfw7uB,EAAclD,WAAa,SAAU3I,EAAYl8vB,EAAM6sO,GACnD,IAAI31M,EAAOl3B,EAAKmE,OAASnE,EAAKmE,MAAMuoB,WACtB,OAATwK,QAA0Bt8B,IAATs8B,GAA+B,KAATA,GAAkC,IAAlBl3B,EAAKwF,WAC7D0xB,EAAOz3B,KAAKmN,iBAAiBsvvB,EAAYl8vB,EAAM,gBAEnD,IAAI0R,EAAQ,KACZ,OAAc,OAATwlB,GAA0B,KAATA,QAAwBt8B,IAATs8B,IAChB,OAAb21M,QAAkCjyO,IAAbiyO,GAA2BA,EAASpmM,OAAO,SAAUhqC,EAAOiY,GAC7EjY,EAAMuS,QAAQ,KAAM,IAAIA,QAAQ,KAAM,MAAQkoB,EAAKloB,QAAQ,KAAM,IAAIA,QAAQ,KAAM,MACnF0C,EAAQgD,MAEC,OAAVhD,GACW,OAAVA,EAAkBm7N,EAASn7N,GAASwlB,EAAKloB,QAAQ,KAAM,IAGxD,MAGf+4vB,EAAcE,cAAgB,SAAUjowB,GACpC,MAA0C,OAAtCA,EAAK2R,SAASqpD,qBAOtB+ssB,EAAcG,gBAAkB,SAAUlowB,GACtC,MAA0C,OAAtCA,EAAK2R,SAASqpD,qBAOtB+ssB,EAAcI,YAAc,SAAUnowB,GAClC,IAAI4zD,EAAQ5zD,EAAKmE,OAASnE,EAAKmE,MAAM2tC,UACrC,MAAc,SAAV8hB,EACO,cAEQ,WAAVA,EACE,gBAEQ,UAAVA,EACE,eAEQ,YAAVA,EACE,cAGA,MAGfm0sB,EAAcK,UAAY,SAAUpowB,EAAMwlwB,GACtC,YAAqB5qwB,IAAf4qwB,GAA2C,OAAfA,IAC3B5H,GAAoB5/vB,QAAQgC,EAAK2R,SAASqpD,sBAAwB,GAClD,OAAfwqsB,QAAsC5qwB,IAAf4qwB,GACpBA,EAAWxnwB,QAAQgC,EAAK2R,SAASqpD,sBAAwB,EACzDh7D,EAAK2R,SAASqpD,oBAGd,MAGf+ssB,EAAcn7vB,iBAAmB,SAAUsvvB,EAAYl8vB,EAAM+J,GACzD,OAAOmyvB,EAAWvivB,YAAY/M,iBAAiB5M,EAAM,MAAM6M,iBAAiB9C,IAEzEg+vB,KCtPPM,GAAmC,WACnC,SAASA,EAAkBtowB,GACvBN,KAAKM,OAASA,EACdN,KAAKtD,mBAqBT,OAnBAkswB,EAAkBvtwB,UAAUqB,iBAAmB,WAC3CsD,KAAKM,OAAOslF,GAAGsljB,GAAuBlroB,KAAKuxvB,iBAAkBvxvB,MAC7DA,KAAKM,OAAOslF,GAAGguiB,GAAgB5znB,KAAKpD,oBAAqBoD,OAE7D4owB,EAAkBvtwB,UAAUuB,oBAAsB,WAC9CoD,KAAKM,OAAO0lF,IAAIkljB,GAAuBlroB,KAAKuxvB,mBAEhDqX,EAAkBvtwB,UAAUk2vB,iBAAmB,SAAUtxvB,GACrD,IAAImna,KACAh6L,KACAl7F,KACJlyI,KAAKM,OAAOusB,SAAS4tC,MAAMr7D,QAAQ,SAAUye,GAAQupZ,EAAS5ia,KAAKqZ,EAAK7gB,SACxEgD,KAAKM,OAAO2sB,WAAWwtC,MAAMr7D,QAAQ,SAAUye,GAAQuvN,EAAS5oO,KAAKqZ,EAAK7gB,SAC1EgD,KAAKM,OAAO07B,OAAO04C,MAAMt1E,QAAQ,SAAUye,GACvCq0H,EAAQ1tI,KAAKqZ,EAAK7gB,MAAMu+D,uBAE5Bv7D,KAAKqxvB,cAAgBiX,GAAc5gwB,IAAI1H,KAAKM,OAAO21E,cAAcC,cAAel2E,KAAKM,OAAO21E,cAAcwvqB,eAAgBvzmB,EAASk1R,EAAUh6L,GAC7IptO,KAAKM,OAAOyN,OAAO07uB,GAAuBzpvB,KAAKqxvB,gBAE5CuX,KCxBPnsI,GAA+B,WAI/B,SAASA,EAAcn8nB,EAAQghE,GAC3BthE,KAAKM,OAASA,EACdN,KAAKshE,eAAiBA,EAiD1B,OA5CAm7jB,EAAcphoB,UAAU0ioB,YAAc,WAClC,IAAIi9H,EAASh7vB,KAAKM,OACdY,EAAMC,EAAc,OAASkC,UAAW,gBAAiBC,GAAItD,KAAKM,OAAOojvB,QAAU,aACnFmlB,EAA+B,OAAjB7N,EAAOh+vB,OAAmC,KAAjBg+vB,EAAOh+vB,MAAgBg+vB,EAAOh+vB,MAAQ,eACjFgD,KAAKwlvB,gBAAkBrkvB,EAAc,OACjCkC,UAAW,YACXC,GAAItD,KAAKM,OAAOojvB,QAAU,iBAC1BjgvB,OACIqlwB,gBAAmB,QAEvB9mwB,UAAW6mwB,IAEf3nwB,EAAIS,YAAY3B,KAAKwlvB,iBACrBxlvB,KAAKk+nB,SAASh9nB,GACd85vB,EAAOh6vB,QAAQW,YAAYT,IAM/Bu7nB,EAAcphoB,UAAU2hoB,SAAW,WAC/B,OAAOh9nB,KAAKggoB,cAMhBvD,EAAcphoB,UAAUoqvB,aAAe,WACnC,OAAOzlvB,KAAKwlvB,iBAMhB/oH,EAAcphoB,UAAU6ioB,SAAW,SAAU+B,GACzCjgoB,KAAKggoB,aAAeC,GAMxBxD,EAAcphoB,UAAU66E,YAAc,WAClC,OAAOl2E,KAAKylvB,eAAe3wuB,eAExB2nnB,KC5DPnyiB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAmBxCo+qB,GAAqC,SAAU59qB,GAE/C,SAAS49qB,IACL,OAAkB,OAAX59qB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAqC/D,OAvCAsqF,GAAUy+qB,EAAqB59qB,GAO/B49qB,EAAoB1twB,UAAU0ioB,YAAc,WACxC,IAAIi9H,EAASh7vB,KAAKM,OAId0owB,EAnBO,8sHAiBa,sEADW,OAAjBhO,EAAOh+vB,OAAmC,KAAjBg+vB,EAAOh+vB,MAAgBg+vB,EAAOh+vB,MAAQ,gBAEhE,kBAEbiswB,EAAS9nwB,EAAc,UACvBa,UAAWgnwB,EACX1lwB,GAAItD,KAAKM,OAAOojvB,QAAU,YAC1BrgvB,UAAW,kBAEfrD,KAAKk+nB,SAAS+qI,GACdjO,EAAOh6vB,QAAQW,YAAYsnwB,GAC3BA,EAAOC,gBAAgBn9vB,KAAKzI,GAAKtD,KAAKM,OAAOojvB,QAAU,iBACvDulB,EAAOC,gBAAgBxnwB,OACvBunwB,EAAOC,gBAAgBnnwB,MAAMinwB,GAC7BC,EAAOC,gBAAgBjnwB,SAM3B8mwB,EAAoB1twB,UAAUoqvB,aAAe,WACzC,OAAOzlvB,KAAKggoB,aAAakpI,gBAAgBn9vB,MAM7Cg9vB,EAAoB1twB,UAAU66E,YAAc,WACxC,OAAOl2E,KAAKylvB,eAAe3wuB,eAExBi0vB,GACTtsI,IC/CE0sI,GAA4B,WAC5B,SAASA,EAAW7owB,EAAQghE,GACxBthE,KAAKopwB,mBACLppwB,KAAKM,OAASA,EACdN,KAAKuloB,QAAUjkkB,EACfthE,KAAKwjvB,cAAgBxjvB,KAAKuloB,QAAQ/jkB,WAAW,mBAC7CxhE,KAAKtD,mBAwPT,OAjPAyswB,EAAW9twB,UAAUiX,QAAU,WAC3BtS,KAAKpD,uBAETuswB,EAAW9twB,UAAUqB,iBAAmB,WAChCsD,KAAKM,OAAO0mF,cAGhBhnF,KAAKqpwB,iBAAmB,IAAIrN,GAC5Bh8vB,KAAKspwB,kBAAoB,IAAI1Z,GAAiB5vvB,KAAKM,OAAQN,KAAKuloB,SAChEvloB,KAAKM,OAAOslF,GAAG6ljB,GAAoBzroB,KAAKqroB,oBAAqBrroB,MAC7DA,KAAKM,OAAOslF,GAAGy/pB,GAAyBrlvB,KAAKm7vB,eAAgBn7vB,MAC7DA,KAAKM,OAAOslF,GAAGqpqB,GAAgBjvvB,KAAKyje,UAAWzje,MAC/CA,KAAKM,OAAOslF,GAAG4gqB,GAA0BxmvB,KAAK25uB,kBAAmB35uB,MACjEA,KAAKM,OAAOslF,GAAGm1jB,GAAmB/6oB,KAAK+rG,OAAQ/rG,MAC/CA,KAAKM,OAAOslF,GAAG8ljB,GAAqB1roB,KAAKwnF,kBAAmBxnF,MAC5DA,KAAKM,OAAOslF,GAAGguiB,GAAgB5znB,KAAKsS,QAAStS,MAC7CA,KAAKM,OAAOslF,GAAGw1qB,GAAkBp7vB,KAAK4F,UAAW5F,MACjDA,KAAKM,OAAOslF,GAAG2jrB,GAAoBvpwB,KAAKw+M,YAAax+M,MACrDA,KAAKM,OAAOslF,GAAGy1qB,GAAwBr7vB,KAAKu7uB,gBAAiBv7uB,MAC7DA,KAAKM,OAAOslF,GAAGi8pB,GAAsB7hvB,KAAKs7vB,gBAAiBt7vB,MAC3DA,KAAKM,OAAOslF,GAAGm8pB,GAAyB/hvB,KAAKu7vB,mBAAoBv7vB,QAErEmpwB,EAAW9twB,UAAUigwB,gBAAkB,WACnC,IAAI0C,EAAkBh+vB,KAAKkpoB,gBAAgBhzjB,cACvCnkD,EAAQ/xB,KAAKqpwB,iBAAiB1a,SAASqP,GAC3Ch+vB,KAAKk7vB,cAAgBl7vB,KAAKqpwB,iBAAiB57qB,KAAK17D,EAAOisuB,IAE3DmL,EAAW9twB,UAAUkgwB,mBAAqB,SAAU16vB,GAChDb,KAAKM,OAAO8kN,QAAS,EACrBplN,KAAKkpoB,gBAAgBu8G,eAAevjvB,QACpClC,KAAKk7vB,cAAcrtqB,WAEvBs7qB,EAAW9twB,UAAUooe,UAAY,SAAU5ie,GACvC,GAAuB,IAAnBA,EAAEZ,KAAK6nB,SAAiB9nB,KAAKM,OAAOkpwB,aAAc,CAClD,IAAIz3uB,EAAQ/xB,KAAKqpwB,iBAAiB1a,SAAS3uvB,KAAKkpoB,gBAAgBhzjB,eAC5Dz1E,EAAaT,KAAKqpwB,iBAAiBzM,wBAAwB7quB,GAC/D,GAAkC,OAA3BtxB,EAAW,GAAGyR,UAAgD,OAA3BzR,EAAW,GAAGyR,WAAqBrM,EAAQpF,EAAW,GAAI,OAC1E,IAAtBsxB,EAAMyke,YAEN,GADA31f,EAAEZ,KAAKulB,iBACF3kB,EAAEZ,KAAKw2G,UAIP,GAAIz2G,KAAKopwB,gBAAgB3swB,OAAS,GACyD,IAA5FuD,KAAKopwB,gBAAgBppwB,KAAKopwB,gBAAgB3swB,OAAS,GAAG6/vB,eAAezgvB,YAAYpf,OAAc,CAC/F,IAAIgtwB,EAAWzpwB,KAAKopwB,gBAAgBppwB,KAAKopwB,gBAAgB3swB,OAAS,GAAG6/vB,eACrEt8vB,KAAKqpwB,iBAAiBhM,iBAAiBr9vB,KAAKkpoB,gBAAgBhzjB,cAAeuzrB,EAAUA,EAAU,EAAGA,EAAS5tvB,YAAYpf,QACvH0mwB,GAAW9vR,OAAOrze,KAAKkpoB,gBAAgBhzjB,cAAe11E,SAASw0C,eAAe,KAC9Eh1C,KAAKopwB,gBAAgBh9mB,YARrB+2mB,GAAW9vR,OAAOrze,KAAKkpoB,gBAAgBhzjB,cAAe,4BACtDl2E,KAAKopwB,gBAAgB5kwB,KAAKxE,KAAKqpwB,iBAAiB1a,SAAS3uvB,KAAKkpoB,gBAAgBhzjB,gBAWpE,UAAlBr1E,EAAEZ,KAAKk2D,QACW,UAAlBt1D,EAAEZ,KAAKk2D,QACPn2D,KAAK0pwB,UAAU7owB,EAAEZ,OAGzBkpwB,EAAW9twB,UAAUquwB,UAAY,SAAU7owB,GACvC,IAAIkxB,EAAQ/xB,KAAKqpwB,iBAAiB1a,SAAS3uvB,KAAKkpoB,gBAAgBhzjB,eAC5DyzrB,EAAgB3pwB,KAAKqpwB,iBAAiBzM,wBAAwB7quB,GAE9DqkuB,EADOrkuB,EAAMuquB,eAAezgvB,YACX3e,MAAM,KACvB0swB,EAAUxT,EAAUA,EAAU35vB,OAAS,GACvC23F,EAAQ,IAAIpwE,OAAO,qFACvB,GAAkC,MAA9B2lvB,EAAc,GAAGz3vB,UAAoB03vB,EAAQj6vB,MAAMykF,GAAQ,CAC3D,IAAIxmE,EAAMzsB,EAAc,KAAOsC,OAASirB,KAAMk7uB,KAC9Ch8uB,EAAI5rB,UAAY4nwB,EAChBzG,GAAW9vR,OAAOrze,KAAKkpoB,gBAAgBhzjB,cAAetoD,GACtDmE,EAAMuquB,eAAezgvB,YAAc7b,KAAK+jW,WAAWhyU,EAAMuquB,eAAezgvB,YAAa+tvB,KAG7FT,EAAW9twB,UAAU0oW,WAAa,SAAUt3U,EAAMxE,GAE9C,IAAK,IADDihB,EAAMzc,EAAKvvB,MAAM,KACZf,EAAI,EAAGA,EAAI+sC,EAAIzsC,OAAQN,IACxB+sC,EAAI/sC,KAAO8rB,IACXihB,EAAI7gB,OAAOlsB,EAAG,GACdA,KAGR,OAAO+sC,EAAI/nB,KAAK,MAEpBgovB,EAAW9twB,UAAU8/vB,eAAiB,SAAUl7vB,GAC5C,IAAIwtF,EACAk8qB,EACAE,EACAhsvB,EAAO5d,EAAK4d,KACZwspB,EAAiBxkqB,EAAQ5F,EAAKi7G,cAAc/zG,OAAQ,sBACxD,GAAIkjqB,IAAmBA,EAAevmqB,UAAUK,SAAS,sBAAuB,CAC5E,GAA0B,eAApB0Z,EAAK21D,YAAmD,YAApB31D,EAAK21D,WAA2B,CACtE,IAAIzhD,EAAQ/xB,KAAKqpwB,iBAAiB1a,SAAS3uvB,KAAKM,OAAO21E,cAAcC,eACrEuX,EAAOztF,KAAKqpwB,iBAAiB57qB,KAAK17D,EAAO/xB,KAAKM,OAAO21E,cAAcC,eACnEyzrB,EAAgB3pwB,KAAKqpwB,iBAAiB1M,kBAAkB5quB,GACxD83uB,EAAkB7pwB,KAAKqpwB,iBAAiBzM,wBAAwB7quB,GAE/C,WAAjBlU,EAAK2pB,SACLxnC,KAAKM,OAAOyN,OAAO+7vB,IACfz4qB,OAAQ,QAASpxF,KAAMA,EAAMsrT,WAAYo+c,EAAe/5rB,UAAW6d,EAAMg2qB,aAAcoG,IAG1E,UAAjBhsvB,EAAK2pB,SACLxnC,KAAKM,OAAOyN,OAAOg8vB,IACf14qB,OAAQ,OAAQpxF,KAAMA,EAAMsrT,WAAYo+c,EAAe/5rB,UAAW6d,EAAMg2qB,aAAcoG,QAI7F,CACD,IAAIG,EAAahqwB,KAAKM,OAAOU,QAAQ2B,cAAc,IAAM3C,KAAKM,OAAOojvB,QAAU,YAC3EumB,EAAcjqwB,KAAKM,OAAOU,QAAQ2B,cAAc,IAAM3C,KAAKM,OAAOojvB,QAAU,UAChF,GAA0B,eAApB7luB,EAAK21D,YAAmD,YAApB31D,EAAK21D,WAA2B,CAClEzhD,EAAQ/xB,KAAKqpwB,iBAAiB1a,SAAS3uvB,KAAKM,OAAO21E,cAAcC,eACjEz4E,EAAkBuswB,IAAevswB,EAAkBwswB,KACnDx8qB,EAAOztF,KAAKqpwB,iBAAiB57qB,KAAK17D,EAAO/xB,KAAKM,OAAO21E,cAAcC,gBAEvEyzrB,EAAgB3pwB,KAAKqpwB,iBAAiB1M,kBAAkB5quB,GACxD83uB,EAAkB7pwB,KAAKqpwB,iBAAiBzM,wBAAwB7quB,GAEpE,OAAQlU,EAAK21D,YACT,IAAK,WACDxzE,KAAKM,OAAOyN,OAAO27uB,IAA2BzpvB,KAAMA,IACpD,MACJ,IAAK,WACDD,KAAKM,OAAOyN,OAAO47uB,IAA4B1pvB,KAAMA,IACrD,MACJ,IAAK,aACDD,KAAKM,OAAOyN,OAAOytvB,IACfnqqB,OAAQ,OAAQpxF,KAAMA,EAAMsrT,WAAYo+c,EAAe/5rB,UAAW6d,EAAMg2qB,aAAcoG,IAE1F,MACJ,IAAK,QACD7pwB,KAAKM,OAAOS,QACZ,MACJ,IAAK,QACDf,KAAKM,OAAOyN,OAAO0tvB,IACfpqqB,OAAQ,QAASpxF,KAAMA,EAAMsrT,WAAYo+c,EAAe/5rB,UAAW6d,EAAMg2qB,aAAcoG,IAE3F,MACJ,IAAK,aACD7pwB,KAAKM,OAAOyN,OAAO2hvB,IAAqBr+pB,OAAQ,aAAcpxF,KAAMA,IACpE,MACJ,IAAK,UACDD,KAAKM,OAAOyN,OAAO4hvB,IAAuBt+pB,OAAQ,eAAgBpxF,KAAMA,IACxE,MACJ,IAAK,OACDD,KAAKM,OAAO4pwB,SACZ,MACJ,IAAK,MACDlqwB,KAAKM,OAAO6pwB,QACZ,MACJ,IAAK,QACDnqwB,KAAKM,OAAO2ihB,UACZ,MACJ,IAAK,YACL,IAAK,kBACD,MACJ,QACIjjhB,KAAKM,OAAOusY,UAAU75T,QAAQhzE,KAAKM,OAAQL,EAAMA,EAAKi7G,cAAe,SAKrFiupB,EAAW9twB,UAAUs+uB,kBAAoB,SAAU15uB,GAC/CD,KAAKspwB,kBAAkBzZ,uBAAuB5vvB,IAElDkpwB,EAAW9twB,UAAUgwoB,oBAAsB,WACnCrroB,KAAKM,OAAO+rvB,eAAe5stB,OAC3Bz/B,KAAKwjvB,cAAcl4G,YAAYxd,GAAWqb,QAAS,IAAI4/H,GAAoB/owB,KAAKM,OAAQN,KAAKuloB,UAG7FvloB,KAAKwjvB,cAAcl4G,YAAYxd,GAAWqb,QAAS,IAAI1M,GAAcz8nB,KAAKM,OAAQN,KAAKuloB,WAG/F4jI,EAAW9twB,UAAUuB,oBAAsB,WACnCoD,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAO0lF,IAAI+0jB,GAAmB/6oB,KAAK+rG,QACxC/rG,KAAKM,OAAO0lF,IAAI0ljB,GAAqB1roB,KAAKwnF,mBAC1CxnF,KAAKM,OAAO0lF,IAAIq/pB,GAAyBrlvB,KAAKm7vB,gBAC9Cn7vB,KAAKM,OAAO0lF,IAAIwgqB,GAA0BxmvB,KAAK25uB,mBAC/C35uB,KAAKM,OAAO0lF,IAAI4tiB,GAAgB5znB,KAAKsS,SACrCtS,KAAKM,OAAO0lF,IAAIipqB,GAAgBjvvB,KAAKyje,WACrCzje,KAAKM,OAAO0lF,IAAIyljB,GAAoBzroB,KAAKqroB,qBACzCrroB,KAAKM,OAAO0lF,IAAIo1qB,GAAkBp7vB,KAAK4F,WACvC5F,KAAKM,OAAO0lF,IAAIujrB,GAAoBvpwB,KAAKw+M,aACzCx+M,KAAKM,OAAO0lF,IAAIq1qB,GAAwBr7vB,KAAKu7uB,iBAC7Cv7uB,KAAKM,OAAO0lF,IAAI67pB,GAAsB7hvB,KAAKs7vB,iBAC3Ct7vB,KAAKM,OAAO0lF,IAAI+7pB,GAAyB/hvB,KAAKu7vB,sBAElD4N,EAAW9twB,UAAU0wG,OAAS,WAC1B/rG,KAAKkpoB,gBAAkBlpoB,KAAKwjvB,cAAcv6G,YAAYnb,GAAWqb,SACjE,IAAI0xH,EAAc76vB,KAAKkpoB,gBAAgBu8G,eACnC1vpB,GAAWmjqB,cAAel5vB,KAAKM,OAAO44vB,cAAeC,cAAen5vB,KAAKM,OAAO64vB,eAChF17vB,EAAkBuC,KAAKM,OAAOusY,WAC9B7sY,KAAKM,OAAOusY,UAAY,IAAIu7X,IACxBpK,gBAAiBh+vB,KAAKkpoB,gBAAgBhzjB,cACtCl1E,QAAS65vB,EACT7nvB,QAAS+iF,IAIb/1F,KAAKM,OAAOusY,UAAU+tX,gBAAgBC,EAAa76vB,KAAKkpoB,gBAAgBhzjB,cAAe6f,GAEvF/1F,KAAKM,OAAOk0E,gBAAgB/0C,SAC5Bz/B,KAAK07vB,cAAgB,IAAIkN,GAAkB5owB,KAAKM,SAEpDN,KAAKM,OAAOyN,OAAOy7uB,QAMvB2f,EAAW9twB,UAAUmsF,kBAAoB,SAAU3mF,KAMnDsowB,EAAW9twB,UAAUkkC,cAAgB,WACjC,MAAO,cAMX4puB,EAAW9twB,UAAUuK,UAAY,WAC7B5F,KAAKM,OAAOusY,UAAU27W,cAAcyV,cAAcZ,iBAAiBr9vB,KAAKM,OAAO21E,cAAcC,cAAel2E,KAAKM,OAAO21E,cAAcwvqB,eAAgBzlvB,KAAKM,OAAO21E,cAAcwvqB,eAAgB,EAAGzlvB,KAAKM,OAAO21E,cAAcwvqB,eAAel0uB,WAAW9U,SAM3P0swB,EAAW9twB,UAAUmjN,YAAc,SAAU39M,GACzCb,KAAKM,OAAOusY,UAAU27W,cAAcyV,cAAcjluB,SAASh5B,KAAKM,OAAO21E,cAAcC,cAAer1E,EAAEkxB,QAM1Go3uB,EAAW9twB,UAAUkgvB,gBAAkB,SAAU16uB,GAC7CA,EAAEm8D,SAASh9D,KAAKM,OAAOusY,UAAU27W,cAAcyV,cAActP,SAAS3uvB,KAAKM,OAAO21E,cAAcC,eAAehpE,aAE5Gi8vB,KCrQPrqV,GAAwB,WAIxB,SAASA,EAAOx+a,EAAQiloB,GACpBvloB,KAAKM,OAASA,EACdN,KAAKuloB,QAAUA,EACfvloB,KAAK6tB,SAAW7tB,KAAKuloB,QAAQ/jkB,WAAW,mBACxCxhE,KAAKtD,mBAyDT,OApDAoib,EAAOzjb,UAAU0wG,OAAS,WACT/rG,KAAKM,OAClBN,KAAKkpoB,gBAAkBlpoB,KAAK6tB,SAASo7mB,YAAYnb,GAAWqb,SAC5DnpoB,KAAKkpoB,gBAAgBnL,eAMzBj/M,EAAOzjb,UAAU62D,QAAU,SAAUrxD,QACvB,IAANA,IAAgBA,GAAMurL,YAAa,YACvCpsL,KAAKM,OAAOyN,OAAOlN,EAAEurL,YAAc,SAAUvrL,IAMjDi+a,EAAOzjb,UAAUiX,QAAU,WACvBtS,KAAKpD,uBAETkib,EAAOzjb,UAAUqB,iBAAmB,WAC5BsD,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAOslF,GAAG8ljB,GAAqB1roB,KAAKkyD,QAASlyD,MAClDA,KAAKM,OAAOslF,G5DRD,Q4DQkB5lF,KAAK4sI,MAAO5sI,QAE7C8+a,EAAOzjb,UAAUuB,oBAAsB,WAC/BoD,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAO0lF,IAAI0ljB,GAAqB1roB,KAAKkyD,SAC1ClyD,KAAKM,OAAO0lF,I5DfD,Q4DemBhmF,KAAK4sI,SAEvCkyS,EAAOzjb,UAAUuxI,MAAQ,SAAU/rI,GAC/B,GAA+B,SAA3Bb,KAAKM,OAAO8yvB,WACZ,OAAQvyvB,EAAEZ,KAAK02G,OACX,KAAK,GACL,KAAK,EACD,IAAIplG,EAAavR,KAAKM,OAAO21E,cAAcwvqB,eAAel0uB,WAC1D,GAA2B,IAAtBA,EAAW9U,QACW,IAAtB8U,EAAW9U,SAA4C,OAA1B8U,EAAW,GAAGvO,SACb,MAA1BuO,EAAW,GAAGvO,UAC0B,IAApCuO,EAAW,GAAGA,WAAW9U,QAA8C,KAA9B8U,EAAW,GAAGsK,cAAwB,CACxF,IAAItb,EAAOP,KAAKM,OAAO21E,cAAcwvqB,eACrCllvB,EAAKyB,UAAY,eACjBhC,KAAKM,OAAOusY,UAAU27W,cAAcyV,cAAcL,eAAe59vB,KAAKM,OAAO21E,cAAcC,cAAe31E,EAAKgR,WAAW,GAAI,MAM3Iuta,KC5DP8e,GAAsB,WACtB,SAASA,EAAKt9b,EAAQghE,GAClBthE,KAAKM,OAASA,EACdN,KAAK+6vB,MAAQz6vB,EAAOU,QAAQsC,GAC5BtD,KAAK4zE,KAAOtS,EAAeE,WAAW,aACtCxhE,KAAKtD,mBACLsD,KAAKshE,eAAiBA,EACtBthE,KAAKkypB,gBAAkB5wlB,EAAeE,WAAW,mBA+WrD,OA7WAo8X,EAAKvic,UAAUqB,iBAAmB,WAC1BsD,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAOslF,GAAG41qB,GAAmBx7vB,KAAKgqwB,WAAYhqwB,MACnDA,KAAKM,OAAOslF,GAAGqpqB,GAAgBjvvB,KAAKyje,UAAWzje,MAC/CA,KAAKM,OAAOslF,GAAGwkrB,GAAwBpqwB,KAAKqqwB,qBAAsBrqwB,MAClEA,KAAKM,OAAOslF,GAAGmkrB,GAA0B/pwB,KAAKsqwB,gBAAiBtqwB,MAC/DA,KAAKM,OAAOslF,GAAGq/pB,GAAwBjlvB,KAAKklvB,kBAAmBllvB,MAC/DA,KAAKM,OAAOslF,G7DqCA,S6DrCkB5lF,KAAK4/uB,WAAY5/uB,MAC/CA,KAAKM,OAAOslF,G7DsCE,W6DtCkB5lF,KAAK2/uB,SAAU3/uB,MAC/CA,KAAKM,OAAOslF,G7DuCE,W6DvCkB5lF,KAAK0/uB,SAAU1/uB,MAC/CA,KAAKM,OAAOslF,GAAG2krB,GAAsBvqwB,KAAKwqwB,qBAAsBxqwB,QAEpE49b,EAAKvic,UAAUivwB,gBAAkB,SAAUrqwB,GAEvC,OADWA,EAAKA,KAAK4d,KACR21D,YACT,IAAK,WACDxzE,KAAKM,OAAOyN,O7DgCN,W6DhC8B9N,GACpC,MACJ,IAAK,WACDD,KAAKM,OAAOyN,O7D2BN,W6D3B8B9N,GACpC,MACJ,IAAK,aACDD,KAAKM,OAAOyN,O7DsBR,S6DtB8B9N,KAI9C29b,EAAKvic,UAAUuB,oBAAsB,WAC7BoD,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAO0lF,IAAIw1qB,GAAmBx7vB,KAAKgqwB,YACxChqwB,KAAKM,OAAO0lF,IAAIipqB,GAAgBjvvB,KAAKyje,WACrCzje,KAAKM,OAAO0lF,IAAIokrB,GAAwBpqwB,KAAKqqwB,sBAC7CrqwB,KAAKM,OAAO0lF,IAAI+jrB,GAA0B/pwB,KAAKsqwB,iBAC/CtqwB,KAAKM,OAAO0lF,I7DUA,S6DVmBhmF,KAAK4/uB,YACpC5/uB,KAAKM,OAAO0lF,IAAIi/pB,GAAwBjlvB,KAAKklvB,mBAC7CllvB,KAAKM,OAAO0lF,I7DUE,W6DVmBhmF,KAAK2/uB,UACtC3/uB,KAAKM,OAAO0lF,I7DWE,W6DXmBhmF,KAAK0/uB,UACtC1/uB,KAAKM,OAAO0lF,IAAIukrB,GAAsBvqwB,KAAKwqwB,wBAE/C5sU,EAAKvic,UAAU6pvB,kBAAoB,WAC3BllvB,KAAKkiE,WACLliE,KAAKkiE,UAAUqf,MAAO/5B,aAAa,KAG3Co2Y,EAAKvic,UAAUgvwB,qBAAuB,SAAUxpwB,GAC5C,IAAIiL,EACAI,EACJ,GAAe,UAAXrL,EAAE6F,OAAoBjJ,EAAkBuC,KAAKM,OAAOktvB,sBACpD/vvB,EAAkBuC,KAAKM,OAAOktvB,mBAAmBI,WADrD,CAIA5tvB,KAAKyqwB,aAAezqwB,KAAKM,OAAOktvB,mBAChC,IAGIrmvB,EAHAskvB,EAAYzrvB,KAAKM,OAAOU,QAAQ4K,wBAAwBc,IACxDqlB,EAAQ/xB,KAAKM,OAAOusY,UAAU27W,cAAcyV,cAActP,SAAS3uvB,KAAKM,OAAO21E,cAAcC,eAC7Fj2E,EAAOY,EAAEZ,KAOb,MALGb,QAAQkC,KAAKT,EAAE+C,SAAU,SAAU5C,EAASiR,GAC7B,IAAVA,IACA9K,EAAgC,UAArBnG,EAAQkR,SAAyBlR,EAAkB,WAAIA,KAGtEH,EAAEyyvB,SAAU,CACZxnvB,EAAQ3E,EAAOyE,wBAAwBY,KACvC,IAAI23uB,EAAYnkvB,KAAKM,OAAOg/oB,cAAcumG,oBACtC6kB,EAAUvjwB,EAAOyE,wBAAwBc,IACzCi+vB,EAAUD,EAAUjf,EACpBxE,EAAW,EAAe9C,EAAUzysB,aAAe1xC,KAAKM,OAAOg/oB,cAAc6nG,yBAA4B,EAC7Gj7uB,EAAQrQ,OAAO81E,aAAgB3xE,KAAKM,OAAO+rvB,eAAqB,OAAKZ,EAAYxE,EAAWyjB,EAAYjf,EAAYkf,QAGpH7+vB,EAAQ7L,EAAK6L,MACbI,EAASlM,KAAKM,OAAO+rvB,eAAqB,OAAIxwvB,OAAO81E,YAAc85qB,EAAYxrvB,EAAKo0C,QAAUp0C,EAAKiM,MAEnGlM,KAAKyqwB,aAAa7c,WAClB5tvB,KAAKyqwB,aAAa7c,UAAUx2R,UAAUtrd,EAAOI,EAAO6lB,EAAMyquB,gBAGlE5+T,EAAKvic,UAAUuvwB,qBAAuB,WAC9B5qwB,KAAKyqwB,cAAgBzqwB,KAAKyqwB,aAAa7c,WAAaptvB,SAASuL,KAAK5H,SAASnE,KAAKyqwB,aAAa7c,UAAU5svB,UACvGhB,KAAKyqwB,aAAa7c,UAAUr4R,aAGpC33B,EAAKvic,UAAUmvwB,qBAAuB,SAAU3pwB,GAC5C,IAAIZ,EAAOY,EAAEZ,KACb,GAAmB,IAAfA,EAAK02G,OAA8B,IAAf12G,EAAK02G,OAGE,SAA3B32G,KAAKM,OAAO8yvB,YAAyBpzvB,KAAKM,OAAOktvB,oBAAsBxtvB,KAAKM,OAAOktvB,mBAAmBI,UAAW,CACjH5tvB,KAAKyqwB,aAAezqwB,KAAKM,OAAOktvB,mBAChC,IAAIrmvB,EAASlH,EAAKkH,OAClBnH,KAAKi2E,cAAgBj2E,KAAKkypB,gBAAgBjpB,YAAYnb,GAAWqb,SACjE,IAAIx8e,EAAc3sJ,KAAKyqwB,aAAa7c,UAAU5svB,QAAQ8C,UAAUK,SAAS,aACzE,GAAwB,MAApBgD,EAAO+K,UAAoBlS,KAAKM,OAAOktvB,mBAAoB,CAC3D,GAAI7gmB,EACA,OAEJ3sJ,KAAKqqwB,sBACDpqwB,KAAMA,EACNqzvB,UAAU,EACV5svB,KAAM,QACN9C,UAAW3D,EAAKkH,eAIpBnH,KAAK4qwB,yBAIjBhtU,EAAKvic,UAAUooe,UAAY,SAAUnne,GACjC,IAAI4+G,EAAgB5+G,EAAM2D,KAC1B,OAAQi7G,EAAc/kD,QAClB,IAAK,SACI14D,EAAkBuC,KAAKkiE,YACxBliE,KAAKkiE,UAAUjgE,QAEnB,MACJ,IAAK,cACD,GAA+B,SAA3BjC,KAAKM,OAAO8yvB,WAAuB,CACnC,IAAIrhuB,EAAQ/xB,KAAKM,OAAOusY,UAAU27W,cAAcyV,cAActP,SAAS3uvB,KAAKM,OAAO21E,cAAcC,eAC7FuX,EAAOztF,KAAKM,OAAOusY,UAAU27W,cAAcyV,cAAcxwqB,KAAK17D,EAAO/xB,KAAKM,OAAO21E,cAAcC,eAC/FyzrB,EAAgB3pwB,KAAKM,OAAOusY,UAAU27W,cAAcyV,cAActB,kBAAkB5quB,GACpF83uB,EAAkB7pwB,KAAKM,OAAOusY,UAAU27W,cAAcyV,cAAcrB,wBAAwB7quB,GAC5FxkB,GACAtN,KAAM3D,EAAM2D,KAAMsrT,WAAYo+c,EAAe/5rB,UAAW6d,EAAMg2qB,aAAcoG,GAEhF7pwB,KAAKgqwB,WAAWz8vB,OAEf,CACD,IAAIujvB,EAAW9wvB,KAAKM,OAAO21E,cAAcwvqB,eACzCzlvB,KAAKM,OAAOusY,UAAU27W,cAAcqL,kBAAkBpmqB,KAAKqjqB,EAASnruB,eAAgBmruB,EAASjruB,cAC7F7lB,KAAKgqwB,YACD/pwB,MACI4d,MAAQ2pB,QAAS,QAASgsC,WAAY,QACtC0nC,cAAeA,GAEnB7pB,OAAQ,OACR5kE,KAAMzsB,KAAKM,OAAOusY,UAAU27W,cAAcqL,kBAAkBtyF,gBAAgBvhqB,KAAKM,OAAO21E,cAAcwvqB,gBACtGt0pB,OAAQ,WACR15D,KAAM,eAGdyjF,EAAc11F,mBAI1Bo4a,EAAKvic,UAAU2uwB,WAAa,SAAUnpwB,EAAGgqwB,GACrC,IAAI9qwB,EAAQC,KACZ,GAAIA,KAAKkiE,UACLliE,KAAKkiE,UAAUqf,MAAO/5B,aAAa,SAGvC,GAA+B,SAA3BxnD,KAAKM,OAAO8yvB,aAA2B31vB,EAAkBoD,EAAE4iwB,aAAa,GAAG3/vB,YAC3EjD,EAAE4iwB,aAAa,GAAG3/vB,UAAUK,SAAS,iBAAoB1G,EAAkBotwB,GAC3E7qwB,KAAK2/uB,SAAS9+uB,OAFlB,CAKA,IAAIiqwB,EACAC,EAAiB/qwB,KAAK4zE,KAAKG,YAAY,cACvCi3rB,EAAkBhrwB,KAAK4zE,KAAKG,YAAY,YACxCk3rB,EAAcjrwB,KAAK4zE,KAAKG,YAAY,oBACpCm3rB,EAAWlrwB,KAAK4zE,KAAKG,YAAY,WACjCo3rB,EAAYnrwB,KAAK4zE,KAAKG,YAAY,mBAClCq3rB,EAAgBjqwB,EAAc,OAASkC,UAAW,oBAAqBC,GAAItD,KAAK+6vB,MAAQ,aAC5F/6vB,KAAKM,OAAOU,QAAQW,YAAYypwB,GAChC,IAAIC,EAAclqwB,EAAc,OAASkC,UAAW,oBAAqBC,GAAItD,KAAK+6vB,MAAQ,iBAMtF3guB,EAAU,mCAAqC2wuB,EAAiB,+GACUG,EAAW,0EAC3CF,EAAkB,+IAC6CG,EAAY,qCAR3E,SAA3BnrwB,KAAKM,OAAO8yvB,WAAyB,UAAY6X,EAChE,+RAG8E,IAM9EK,EAAc9qwB,SAASm3iB,cAAcsnN,yBAAyB7kuB,GAClEixuB,EAAY1pwB,YAAY2pwB,GACxB,IAAIC,EAAaF,EAAY1owB,cAAc,qBACvC6owB,EAAUH,EAAY1owB,cAAc,kBACpCmhiB,EAAWunO,EAAY1owB,cAAc,mBACrC8owB,EAAYJ,EAAY1owB,cAAc,oBACtC+owB,EAAgB1rwB,KAAK4zE,KAAKG,YAAY,uBAC1C/zE,KAAK2rwB,YAAc,IAAI9spB,IAAWxrG,MAAOq4vB,EAAel5vB,SAAS,EAAMU,UAAWlT,KAAKM,OAAO4S,YAC9FlT,KAAK2rwB,YAAYt1tB,SAASk1tB,GAC1BT,EAAyC,SAA3B9qwB,KAAKM,OAAO8yvB,WAAyBvyvB,EAAE+uE,UAAU++qB,SAAS3uvB,KAAKM,OAAO21E,cAAcC,eAAehpE,WAC7GrM,EAAE4rB,KACN,IAAIm/uB,EAAa5rwB,KAAK4zE,KAAKG,YAAY,gBACnC83rB,EAAa7rwB,KAAK4zE,KAAKG,YAAY,gBACnCnE,EAAY/uE,EAAE+uE,UACdk8rB,GAAcC,SAAU/rwB,KAAM4vE,UAAW/uE,EAAE+uE,UAAW6zrB,aAAc5iwB,EAAE4iwB,aAAcxjwB,KAAMY,EAAEZ,MAChGD,KAAKkiE,UAAY,IAAI4iD,IACjBlgC,OAAQ5kF,KAAK4zE,KAAKG,YAAY,cAC9B35C,QAASixuB,EACTp4vB,SAAU4puB,GACV3puB,UAAWlT,KAAKM,OAAO4S,UACvBlF,OAAQhO,KAAKM,OAAO0N,OACpB24G,eAAe,EAAMX,eAAe,EAAMhwG,MAAQxK,GAAgB,SAAI,QAAU,QAASuK,OAAQ,UACjGyvG,QAASh6G,GAAQkb,SACjBy/F,UACQE,MAAOrmH,KAAKq+uB,WAAW/ivB,KAAKwwwB,GAC5B1lpB,aAAehsF,QAASwxuB,EAAY34vB,SAAU,sBAAuB+qG,WAAW,KAElFqI,MAAO,SAAUxlH,GAAKd,EAAMiswB,aAAanrwB,IAAOulH,aAAenzG,SAAU,SAAUmnB,QAASyxuB,KAClG1kwB,OAASqE,GAAgB,SAAIhL,SAASuL,KAAO/L,KAAKM,OAAOU,QACzD4oH,mBAAqB5xF,OAAQ,QAC7B/1B,MAAO,SAAU3F,GACbyD,EAAMO,OAAO8kN,QAAS,EAClB9oN,GAASA,EAAMA,MAAMkrD,cACW,SAA5BznD,EAAMO,OAAO8yvB,WACbxjrB,EAAUie,UAGV9tF,EAAMO,OAAOusY,UAAU27W,cAAcqL,kBAAkBhmqB,QAAQ9tF,EAAMO,OAAO21E,cAAcwvqB,iBAGlG1lvB,EAAMmiE,UAAU5vD,UAChBjN,EAAOtF,EAAMmiE,UAAUlhE,SACvBjB,EAAMmiE,UAAY,QAG1BliE,KAAKkiE,UAAU7rB,SAAS+0tB,GACxBA,EAAc1mwB,MAAM6uD,UAAY,UAC3B91D,EAAkBotwB,KACnBW,EAAQxuwB,MAAQ6twB,EAAaj9uB,IAC7Bk2gB,EAAS9miB,MAAQ6twB,EAAap+uB,KAC9Bg/uB,EAAUzuwB,MAAQ6twB,EAAa3quB,MAC9B2quB,EAAmB,OAAI7qwB,KAAK2rwB,YAAYn5vB,SAAU,EAAOxS,KAAK2rwB,YAAYn5vB,SAAU,EACrFxS,KAAKkiE,UAAU0iB,OAASimrB,EAAajmrB,OACrC5kF,KAAKkiE,UAAUlhE,QAAQ2B,cAAc,iBAAiBkZ,YAAcgvvB,EAAa14d,SAErFnyS,KAAKiswB,UAAS,IACkB,SAA3BjswB,KAAKM,OAAO8yvB,cAA4B31vB,EAAkBqtwB,IAA8B,KAAfA,GACvC,IAAlCjqwB,EAAE+uE,UAAU79C,MAAMyke,aAAsB31f,EAAE+uE,UAAU79C,MAAMyke,cAAgB31f,EAAE+uE,UAAU79C,MAAMsue,YAC7E,aAAbx/f,EAAEswF,UACL2yc,EAAS9miB,MAAQ8twB,GAErBvlwB,GAAanB,IAAI5D,SAAU,YAAaR,KAAKw3d,gBAAiBx3d,MAC1DA,KAAKyqwB,eACLzqwB,KAAK4qwB,uBACD5qwB,KAAKyqwB,aAAarc,aAAe5tvB,SAASuL,KAAK5H,SAASnE,KAAKyqwB,aAAarc,YAAYptvB,UACtFhB,KAAKyqwB,aAAarc,YAAY74R,eAI1C33B,EAAKvic,UAAUgjvB,WAAa,SAAUx9uB,GAClC,IAGI4qwB,EAHAS,EAAUlswB,KAAK+rwB,SAAS7psB,UAAUlhE,QAClCwqwB,EAAUU,EAAQvpwB,cAAc,kBAAkB3F,MAClD8miB,EAAWooO,EAAQvpwB,cAAc,mBAAmB3F,MAEhB,SAApCgD,KAAK+rwB,SAASzrwB,OAAO8yvB,aACrBqY,EAAYS,EAAQvpwB,cAAc,oBAAoB3F,OAE1D,IAAImK,EAAUnH,KAAK+rwB,SAASJ,YAAmB,QAAI,SAAW,GAC9D,GAAK3rwB,KAAK+rwB,SAASI,MAAMX,GAAzB,CAKIxrwB,KAAK+rwB,SAASE,UAAS,GAE3B,IAAIv5vB,EAAQ1S,KAAK+rwB,SACjB,GAAgC,SAA5Br5vB,EAAMpS,OAAO8yvB,YAAyB31vB,EAAkBoI,EAAQ7F,KAAK4vE,UAAU79C,MAAMuquB,eAAe77vB,WAAY,IAAMiS,EAAMpS,OAAO21E,cAAc+mjB,WAAW15nB,KAAM,CAClKoP,EAAMpS,OAAO21E,cAAcwvqB,eAAevjvB,QAC1C,IAAI6vB,EAAQrf,EAAMpS,OAAOusY,UAAU27W,cAAcyV,cAActP,SAASj8uB,EAAMpS,OAAO21E,cAAcC,eACnGl2E,KAAK4vE,UAAYl9D,EAAMpS,OAAOusY,UAAU27W,cAAcyV,cAAcxwqB,KAAK17D,EAAOrf,EAAMpS,OAAO21E,cAAcC,eAC3Gl2E,KAAKyjwB,aAAe/wvB,EAAMpS,OAAOusY,UAAU27W,cAAcyV,cAAcrB,wBAAwB7quB,GAEnG,IAAI/0B,GACA4wB,IAAK49uB,EAAS/+uB,KAAMq3gB,EAAU5jgB,MAAOuruB,EAAWtkwB,OAAQA,EACxDyoE,UAAW5vE,KAAK4vE,UAAW6zrB,aAAczjwB,KAAKyjwB,cAEO,IAArD/wvB,EAAMpS,OAAOusY,UAAUkmX,mBAAmBt2vB,QAC1CiW,EAAMpS,OAAOusY,UAAU7yH,WAE3Bh6Q,KAAK+rwB,SAASzrwB,OAAOusY,UAAU75T,QAAQhzE,KAAK+rwB,SAASzrwB,OAAQN,KAAKC,KAAMD,KAAKC,KAAKi7G,cAAel+G,GACjGgD,KAAK+rwB,SAAS7psB,UAAUqf,MAAO/5B,aAAa,IAC5CxnD,KAAK+rwB,SAASzrwB,OAAO21E,cAAcwvqB,eAAevjvB,aAtB9ClC,KAAK+rwB,SAASE,UAAS,IAwB/BruU,EAAKvic,UAAU8wwB,MAAQ,SAAUv+uB,GAE7B,MADa,sFACCzqB,KAAKyqB,IAEvBgwa,EAAKvic,UAAU4wwB,SAAW,SAAUprwB,GAChC,IACI2qwB,EADUxrwB,KAAKkiE,UAAUlhE,QACP2B,cAAc,kBAChC9B,GACA8C,GAAU6nwB,GAAU,WACpBA,EAAQzlvB,kBAAkB,EAAGylvB,EAAQxuwB,MAAMP,QAC3C+uwB,EAAQtpwB,SAGRmC,GAAamnwB,GAAU,YAG/B5tU,EAAKvic,UAAUukvB,WAAa,SAAU/+uB,GAClC,IAAIP,EAASO,EAAE4iwB,aAAa,GAAGhjwB,WAC3BJ,KAIJ,IAHwD,IAApDL,KAAKM,OAAOusY,UAAUkmX,mBAAmBt2vB,QACzCuD,KAAKM,OAAOusY,UAAU7yH,WAEnBn5Q,EAAE4iwB,aAAa,GAAG7mvB,YACrBvc,EAAMmE,KAAKlE,EAAO4E,aAAarE,EAAE4iwB,aAAa,GAAG7mvB,WAAY/b,EAAE4iwB,aAAa,KAEhFnjwB,EAAOgF,YAAYzE,EAAE4iwB,aAAa,IAC9BpjwB,GAA0B,IAAjBA,EAAM5D,SACfoE,EAAE+uE,UAAU0srB,eAAiBz7vB,EAAE+uE,UAAU2srB,aAAal8vB,EAAMA,EAAM5D,OAAS,IAAI,GAC/EoE,EAAE+uE,UAAU4srB,aAAe37vB,EAAE+uE,UAAU0srB,gBAE3Cz7vB,EAAE+uE,UAAUie,UACZ7tF,KAAKi2E,cAAcwvqB,eAAevjvB,QAClClC,KAAKM,OAAOusY,UAAU7yH,WACtBh6Q,KAAK4qwB,wBAEThtU,EAAKvic,UAAUqkvB,SAAW,SAAU7+uB,GAChC,GAAIA,EAAE4iwB,aAAa,GAAG3/vB,UAAUK,SAAS,iBAAiD,MAA9BtD,EAAE4iwB,aAAa,GAAGzgwB,QAAiB,CAC3F,IAAImE,EAAsC,KAA7BtG,EAAE4iwB,aAAa,GAAGt8vB,OAAgB,QAAU,SACzDtL,OAAO6F,KAAKb,EAAE4iwB,aAAa,GAAG/0uB,KAAMvnB,KAG5Cy2b,EAAKvic,UAAUskvB,SAAW,SAAU9+uB,GAChC,GAAIA,EAAE4iwB,aAAa,GAAG3/vB,UAAUK,SAAS,iBAAiD,MAA9BtD,EAAE4iwB,aAAa,GAAGzgwB,QAAiB,CAC3F,IAAI6mwB,EAAkBhpwB,EAAE4iwB,aAAa,GACjC2I,EAAapswB,KAAK4zE,KAAKG,YAAY,gBACnC82rB,GACAj9uB,IAAKi8uB,EAAgBn7uB,KAAMjC,KAAMo9uB,EAAgB7nwB,UACjDk+B,MAAO2puB,EAAgB3puB,MAAO/4B,OAAQ0iwB,EAAgB1iwB,OACtDy9E,OAAQ,YAAautN,QAASi6d,GAElCpswB,KAAKgqwB,WAAWnpwB,EAAGgqwB,KAG3BjtU,EAAKvic,UAAU2wwB,aAAe,SAAUnrwB,GACpCb,KAAKM,OAAO8kN,QAAS,EACrBplN,KAAKkiE,UAAUqf,MAAO/5B,aAAa,IACnCxnD,KAAKM,OAAO21E,cAAcwvqB,eAAevjvB,SAE7C07b,EAAKvic,UAAUm8d,gBAAkB,SAAU32d,GACvC,IAAIsG,EAAStG,EAAEsG,QACV1J,EAAkBuC,KAAKkiE,cAAiBr8D,EAAQsB,EAAQ,IAAMnH,KAAKkiE,UAAUlhE,QAAQsC,KAAOtD,KAAKM,OAAOk0E,gBAAgB/0C,QACzHz/B,KAAKM,OAAOulvB,sBAAwB7lvB,KAAKM,OAAOulvB,oBAAoB1hvB,SAAStD,EAAEsG,SAC9EnH,KAAKM,OAAOulvB,qBAAuB7lvB,KAAKM,OAAOulvB,oBAAoB1hvB,SAAStD,EAAEsG,UAC1EtB,EAAQsB,EAAQ,IAAMnH,KAAKM,OAAOojvB,QAAU,yBAC5Cv8uB,EAAOxE,cAAc,IAAM3C,KAAKM,OAAOojvB,QAAU,0BACtD1jvB,KAAKkiE,UAAUqf,MAAO/5B,aAAa,IACnCxnD,KAAKM,OAAO8kN,QAAS,EACrBzxM,GAAc3T,KAAKM,OAAOU,QAAS,cAQ3C48b,EAAKvic,UAAUiX,QAAU,WACrBtS,KAAKpD,uBAKTghc,EAAKvic,UAAUkkC,cAAgB,WAC3B,MAAO,QAEJq+Z,KCpXPhuW,GAAuB,WACvB,SAASA,EAAMtvF,EAAQghE,GACnBthE,KAAKM,OAASA,EACdN,KAAK+6vB,MAAQz6vB,EAAOU,QAAQsC,GAC5BtD,KAAK4zE,KAAOtS,EAAeE,WAAW,aACtCxhE,KAAKkypB,gBAAkB5wlB,EAAeE,WAAW,mBACjDxhE,KAAKtD,mBAu5BT,OAr5BAkzF,EAAMv0F,UAAUqB,iBAAmB,WAC3BsD,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAOslF,GAAGqpqB,GAAgBjvvB,KAAKyje,UAAWzje,MAC/CA,KAAKM,OAAOslF,GAAG61qB,GAAoBz7vB,KAAK6ujB,YAAa7ujB,MACrDA,KAAKM,OAAOslF,GAAGwkrB,GAAwBpqwB,KAAKqswB,sBAAuBrswB,MACnEA,KAAKM,OAAOslF,GAAGkkrB,GAA2B9pwB,KAAKsqwB,gBAAiBtqwB,MAChEA,KAAKM,OAAOslF,G9DyEM,U8DzEkB5lF,KAAKgjoB,QAAShjoB,MAClDA,KAAKM,OAAOslF,G9DsEK,S8DtEkB5lF,KAAKsswB,UAAWtswB,MACnDA,KAAKM,OAAOslF,GAAG2mrB,GAAkBvswB,KAAKwswB,cAAexswB,MACrDA,KAAKM,OAAOslF,GAAG6mrB,GAAiBzswB,KAAK0swB,cAAe1swB,MACpDA,KAAKM,OAAOslF,GAAG2krB,GAAsBvqwB,KAAKwqwB,qBAAsBxqwB,MAChEA,KAAKM,OAAOslF,GAAGq/pB,GAAwBjlvB,KAAKklvB,kBAAmBllvB,MAC/DA,KAAKM,OAAOslF,GAAG+mrB,GAAkB3swB,KAAK46uB,UAAW56uB,MACjDA,KAAKM,OAAOslF,GAAG+7pB,GAAuB3hvB,KAAK4swB,gBAAiB5swB,MAC5DA,KAAKM,OAAOslF,GAAGm1jB,GAAmB/6oB,KAAK6swB,YAAa7swB,QAExD4vF,EAAMv0F,UAAUuB,oBAAsB,WAC9BoD,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAO0lF,IAAIipqB,GAAgBjvvB,KAAKyje,WACrCzje,KAAKM,OAAO0lF,IAAIy1qB,GAAoBz7vB,KAAK6ujB,aACzC7ujB,KAAKM,OAAO0lF,IAAIokrB,GAAwBpqwB,KAAKqswB,uBAC7CrswB,KAAKM,OAAO0lF,I9DwDM,U8DxDmBhmF,KAAKgjoB,SAC1ChjoB,KAAKM,OAAO0lF,IAAI8jrB,GAA2B9pwB,KAAKsqwB,iBAChDtqwB,KAAKM,OAAO0lF,I9DoDK,S8DpDmBhmF,KAAKsswB,WACzCtswB,KAAKM,OAAO0lF,IAAIumrB,GAAkBvswB,KAAKwswB,eACvCxswB,KAAKM,OAAO0lF,IAAIymrB,GAAiBzswB,KAAK0swB,eACtC1swB,KAAKM,OAAO0lF,IAAIukrB,GAAsBvqwB,KAAKwqwB,sBAC3CxqwB,KAAKM,OAAO0lF,IAAIi/pB,GAAwBjlvB,KAAKklvB,mBAC7CllvB,KAAKM,OAAO0lF,IAAI2mrB,GAAkB3swB,KAAK46uB,WACvC56uB,KAAKM,OAAO0lF,IAAI27pB,GAAuB3hvB,KAAK4swB,iBAC5C5swB,KAAKM,OAAO0lF,IAAI+0jB,GAAmB/6oB,KAAK6swB,aACnCpvwB,EAAkBuC,KAAKi2E,gBACxB1wE,GAAahB,OAAOvE,KAAKi2E,cAAcwvqB,eAAgB,QAASzlvB,KAAK8swB,cAG7El9qB,EAAMv0F,UAAU6pvB,kBAAoB,WAC5BllvB,KAAKkiE,WACLliE,KAAKkiE,UAAUqf,MAAO/5B,aAAa,KAG3CooC,EAAMv0F,UAAUwxwB,YAAc,WAC1B7swB,KAAKi2E,cAAgBj2E,KAAKkypB,gBAAgBjpB,YAAYnb,GAAWqb,SACjE5joB,GAAanB,IAAIpE,KAAKi2E,cAAcwvqB,eAAgB,QAASzlvB,KAAK8swB,WAAY9swB,OAElF4vF,EAAMv0F,UAAUyxwB,WAAa,SAAUjswB,GAC/B2K,GAAQkb,WACkB,QAArB7lB,EAAEsG,OAAOnE,SACyB,MAAnCnC,EAAEsG,OAAOkN,cAAcrR,SACD,QAArBnC,EAAEsG,OAAOnE,QACVhD,KAAKi2E,cAAcwvqB,eAAejivB,aAAa,kBAAmB,SAGlExD,KAAKi2E,cAAcwvqB,eAAejivB,aAAa,kBAAmB,SAGjD,MAArB3C,EAAEsG,OAAOnE,SAC0B,MAAnCnC,EAAEsG,OAAOkN,cAAcrR,SACvBnC,EAAE2kB,kBAGVoqE,EAAMv0F,UAAUivwB,gBAAkB,SAAUrqwB,GAExC,OADWA,EAAKA,KAAK4d,KACR21D,YACT,IAAK,UACDxzE,KAAKM,OAAOyN,OAAO0tvB,GAAoBx7vB,GACvC,MACJ,IAAK,UACDD,KAAKM,OAAOyN,O9DUF,U8DV8B9N,GACxC,MACJ,IAAK,aACDD,KAAKM,OAAOyN,OAAOw+vB,GAAkBtswB,GACrC,MACJ,IAAK,UACDD,KAAKM,OAAOyN,OAAO0+vB,GAAiBxswB,GACpC,MACJ,IAAK,SACDD,KAAKM,OAAOyN,O9DDH,S8DC8B9N,GACvC,MACJ,IAAK,YACDD,KAAKM,OAAOyN,OAAO4+vB,GAAkB1swB,GACrC,MACJ,IAAK,gBACDD,KAAK+swB,YAAY9swB,GACjB,MACJ,IAAK,gBACDD,KAAKgtwB,YAAY/swB,GACjB,MACJ,IAAK,kBACDD,KAAKitwB,cAAchtwB,KAI/B2vF,EAAMv0F,UAAU0xwB,YAAc,SAAUlswB,GACpC,IAAIsG,EAAiD,KAAxCtG,EAAE4iwB,aAAa,GAAGhjwB,WAAW0G,OAAgB,QAAU,SACpEtL,OAAO6F,KAAKb,EAAE4iwB,aAAa,GAAGhjwB,WAAWiuB,KAAMvnB,IAEnDyoF,EAAMv0F,UAAU2xwB,YAAc,SAAUnswB,GACpC,IAAIgpwB,EAAkBhpwB,EAAE4iwB,aAAa,GAAGhjwB,WACpC2rwB,EAAapswB,KAAK4zE,KAAKG,YAAY,gBACnC82rB,GACAj9uB,IAAKi8uB,EAAgBn7uB,KAAMvnB,OAAQ0iwB,EAAgB1iwB,OACnDy9E,OAAQ,YAAautN,QAASi6d,GAElCpswB,KAAKwswB,cAAc3rwB,EAAGgqwB,IAE1Bj7qB,EAAMv0F,UAAU4xwB,cAAgB,SAAUpswB,GACtCA,EAAE+uE,UAAUie,UACZxoF,EAAOxE,EAAE4iwB,aAAa,GAAGpvvB,eACzBrU,KAAKM,OAAO21E,cAAcwvqB,eAAevjvB,QACzCihwB,GAAW9vR,OAAOrze,KAAKM,OAAO21E,cAAcC,cAAer1E,EAAE0qT,WAAW,IACxEvrT,KAAKM,OAAOusY,UAAU7yH,WAClBh6Q,KAAKyqwB,cAAgBjqwB,SAASuL,KAAK5H,SAASnE,KAAKyqwB,aAAa5c,WAAW7svB,WACzEhB,KAAKyqwB,aAAa5c,WAAWt4R,YACxB93d,EAAkBoD,EAAE4iwB,eACrBp/vB,GAAaxD,EAAE4iwB,aAAa,IAAK,iBAI7C7zqB,EAAMv0F,UAAUooe,UAAY,SAAUnne,GAClC,IACIy1B,EACA07D,EACAk8qB,EACAE,EAJA3upB,EAAgB5+G,EAAM2D,KAK1B,IAAKxC,EAAkBuC,KAAKM,OAAOusY,UAAU27W,cAAcyV,iBACvDlsuB,EAAQ/xB,KAAKM,OAAOusY,UAAU27W,cAAcyV,cAActP,SAAS3uvB,KAAKM,OAAO21E,cAAcC,eAC7FuX,EAAOztF,KAAKM,OAAOusY,UAAU27W,cAAcyV,cAAcxwqB,KAAK17D,EAAO/xB,KAAKM,OAAO21E,cAAcC,eAC/FyzrB,EAAgB3pwB,KAAKM,OAAOusY,UAAU27W,cAAcyV,cAActB,kBAAkB5quB,GACpF83uB,EAAkB7pwB,KAAKM,OAAOusY,UAAU27W,cAAcyV,cAAcrB,wBAAwB7quB,IACvFmpF,EAAc79G,KAAoC,IAA7B69G,EAAc79G,IAAIZ,QAAyC,UAAzBy+G,EAAc/kD,SACtC,QAA/B0zsB,EAAgB,GAAG7mwB,SAAsB6mwB,EAAgB,GAAGx1vB,eAAe,CAC5E,IAAIwtB,EAAOgouB,EAAgB,GAAGx1vB,cAAc9C,WAAW,GACvDvR,KAAKM,OAAOusY,UAAU27W,cAAcyV,cAAcZ,iBAAiBr9vB,KAAKi2E,cAAcC,cAAer0C,EAAMA,EAAMA,EAAKhmB,YAAYpf,OAAQolC,EAAKhmB,YAAYpf,QAC3J4H,GAAawlwB,EAAgB,IAAK,eAClC7pwB,KAAKyqwB,aAAa5c,WAAWt4R,YAGrC,OAAQr6W,EAAc/kD,QAClB,IAAK,SACI14D,EAAkBuC,KAAKkiE,YACxBliE,KAAKkiE,UAAUjgE,QAEnB,MACJ,IAAK,eAC8B,SAA3BjC,KAAKM,OAAO8yvB,WACZpzvB,KAAK6ujB,aACD5ujB,MACI4d,MAAQ2pB,QAAS,SAAUgsC,WAAY,SACvC0nC,cAAeA,GAEnBqwM,WAAYo+c,EACZ/5rB,UAAW6d,EACXg2qB,aAAcoG,IAIlB7pwB,KAAK6ujB,aACD5ujB,MACI4d,MAAQ2pB,QAAS,SAAUgsC,WAAY,SACvC0nC,cAAeA,GAEnB7pB,OAAQ,QACR5kE,KAAMzsB,KAAKM,OAAOusY,UAAU27W,cAAcqL,kBAAkBtyF,gBAAgBvhqB,KAAKM,OAAO21E,cAAcwvqB,gBACtGt0pB,OAAQ,WACR15D,KAAM,gBAGdyjF,EAAc11F,mBAI1BoqE,EAAMv0F,UAAUuxwB,gBAAkB,SAAU/rwB,GACxC,IAAIgd,EAAOhd,EAAEgd,KACb,GAAKrd,SAASuL,KAAK5H,SAAS3D,SAASuL,KAAKpJ,cAAc,0BAA6C,WAAjBkb,EAAK2pB,QAAzF,CAGA,IAAIzV,EAAQ/xB,KAAKM,OAAOusY,UAAU27W,cAAcyV,cAActP,SAAS3uvB,KAAKM,OAAO21E,cAAcC,eAC7FyzrB,EAAgB3pwB,KAAKM,OAAOusY,UAAU27W,cAAcyV,cAActB,kBAAkB5quB,GACpF9xB,GAASA,KAAMY,EAAG0qT,WAAYo+c,GAClC,OAAQ9rvB,EAAK21D,YACT,IAAK,cACDxzE,KAAKktwB,iBAAiBjtwB,GACtB,MACJ,IAAK,gBACDD,KAAKmtwB,mBAAmBltwB,GACxB,MACJ,IAAK,eACDD,KAAKotwB,kBAAkBntwB,GACvB,MACJ,IAAK,SACDD,KAAKolJ,OAAOnlJ,GACZ,MACJ,IAAK,QACDD,KAAKwqR,MAAMvqR,GAGfD,KAAKyqwB,cAAgBjqwB,SAASuL,KAAK5H,SAASnE,KAAKyqwB,aAAa5c,WAAW7svB,WACzEhB,KAAKyqwB,aAAa5c,WAAWt4R,YAC7Blxd,GAAaslwB,EAAc,IAAK,kBAGxC/5qB,EAAMv0F,UAAUgywB,6BAA+B,WAG3C,IAAK,IADD5ysB,EAAQz6D,KAAKyqwB,aAAa5c,WAAWpD,eAAejpvB,iBAAiB,mBAChErF,EAAI,EAAGA,EAAIs+D,EAAMh+D,OAAQN,IAC1Bs+D,EAAMt+D,GAAG0W,aAAa,WAAa7S,KAAK4zE,KAAKG,YAAY,aACzDtZ,EAAMt+D,GAAG0W,aAAa,WAAa7S,KAAK4zE,KAAKG,YAAY,aACzDtZ,EAAMt+D,GAAG0W,aAAa,WAAa7S,KAAK4zE,KAAKG,YAAY,eACzDpwE,GAAU82D,EAAMt+D,IAAK,iBACrBs+D,EAAMt+D,GAAGuI,MAAM4xC,QAAU,QAEe,gBAAnCmkB,EAAMt+D,GAAG0W,aAAa,SAC3B4nD,EAAMt+D,GAAGuI,MAAM4xC,QAAU,GAEpBmkB,EAAMt+D,GAAG2H,UAAUK,SAAS,gCACrBs2D,EAAMt+D,GAClBkJ,EAAOo1D,EAAMt+D,KAGrB,IAAImxwB,EAAWttwB,KAAKyqwB,aAAa5c,WAAWpD,eAAejpvB,iBAAiB,uCAC5ExB,KAAKyqwB,aAAa5c,WAAWlB,cAAc,KAAMtgvB,KAAKoxB,MAAM6vuB,EAAS7wwB,OAAS,KAElFmzF,EAAMv0F,UAAUgxwB,sBAAwB,SAAUxrwB,GAC9C,IAAId,EAAQC,KACZ,GAAe,WAAXa,EAAE6F,OAAqBjJ,EAAkBuC,KAAKM,OAAOktvB,sBAClD/vvB,EAAkBuC,KAAKM,OAAOktvB,mBAAmBK,YADxD,CAIA7tvB,KAAKyqwB,aAAezqwB,KAAKM,OAAOktvB,mBAChC,IACIrmvB,EADAlH,EAAOY,EAAEZ,QAEVb,QAAQkC,KAAKT,EAAE+C,SAAU,SAAU5C,EAASiR,GAC7B,IAAVA,IACA9K,EAASnG,KAGbmG,EAAOkN,eAAkD,MAAjClN,EAAOkN,cAAcrR,SAC7ChD,KAAKqtwB,+BAEe,QAApBlmwB,EAAO+K,UACPvO,GAAUwD,IAAU,gBAExB,IAAI+E,EAASlM,KAAKM,OAAO+rvB,eAAqB,OAAIxwvB,OAAO81E,YACrD3xE,KAAKM,OAAOU,QAAQ4K,wBAAwBc,IAAMzM,EAAKo0C,QAAUp0C,EAAKiM,MACtElM,KAAKM,OAAOktvB,mBAAmBK,aAC3BhtvB,EAAEyyvB,SACFnzvB,WAAW,WAAcJ,EAAM0qwB,aAAa5c,WAAWz2R,UAAUn3d,EAAK6L,MAAOI,EAAO/E,IAAY,KAGhGnH,KAAKyqwB,aAAa5c,WAAWz2R,UAAUn3d,EAAK6L,MAAOI,EAAO/E,MAItEyoF,EAAMv0F,UAAUkywB,sBAAwB,WAC/B9vwB,EAAkBuC,KAAKi2E,cAAcwvqB,eAAe9ivB,cAAc,mBACnE0B,GAAarE,KAAKi2E,cAAcwvqB,eAAe9ivB,cAAc,iBAAkB,eAC3E3C,KAAKyqwB,cAAgBzqwB,KAAKyqwB,aAAa5c,YAAcrtvB,SAASuL,KAAK5H,SAASnE,KAAKyqwB,aAAa5c,WAAW7svB,UACzGhB,KAAKyqwB,aAAa5c,WAAWt4R,cAIzC3lY,EAAMv0F,UAAUmvwB,qBAAuB,SAAU3pwB,GAC7C,IAAIZ,EAAOY,EAAEZ,KACb,GAAmB,IAAfA,EAAK02G,OAA8B,IAAf12G,EAAK02G,OAGE,SAA3B32G,KAAKM,OAAO8yvB,YAAyBpzvB,KAAKM,OAAOktvB,oBAAsBxtvB,KAAKM,OAAOktvB,mBAAmBK,WAAY,CAClH7tvB,KAAKyqwB,aAAezqwB,KAAKM,OAAOktvB,mBAChC,IAAIrmvB,EAASlH,EAAKkH,OAClBnH,KAAKi2E,cAAgBj2E,KAAKkypB,gBAAgBjpB,YAAYnb,GAAWqb,SACjE,IAAIx8e,EAAc3sJ,KAAKyqwB,aAAa5c,WAAW7svB,QAAQ8C,UAAUK,SAAS,aAC1E,GAAwB,QAApBgD,EAAO+K,UAAsBlS,KAAKM,OAAOktvB,mBAAoB,CAC7D,GAAI7gmB,EACA,OAEJ3sJ,KAAKM,OAAOusY,UAAU27W,cAAcyV,cAAcxnnB,MAAMz2I,KAAKi2E,cAAcC,eAC3El2E,KAAKM,OAAOusY,UAAU27W,cAAcyV,cAAcV,qBAAqBv9vB,KAAKi2E,cAAcC,cAAe/uE,GACzGxD,GAAUwD,GAAS,eACnB,IAAIszD,EAAQz6D,KAAKyqwB,aAAa5c,WAAWpD,eAAejpvB,iBAAiB,mBAEzE,GAAqC,MAAjC2F,EAAOkN,cAAcrR,QAAiB,CACtC,IAAK,IAAI7G,EAAI,EAAGA,EAAIs+D,EAAMh+D,OAAQN,IAC1Bs+D,EAAMt+D,GAAG0W,aAAa,WAAa7S,KAAK4zE,KAAKG,YAAY,aACzDtZ,EAAMt+D,GAAG0W,aAAa,WAAa7S,KAAK4zE,KAAKG,YAAY,aACzDtZ,EAAMt+D,GAAG0W,aAAa,WAAa7S,KAAK4zE,KAAKG,YAAY,eACzDtZ,EAAMt+D,GAAGuI,MAAM4xC,QAAU,GACzBjyC,GAAao2D,EAAMt+D,IAAK,kBAEgB,gBAAnCs+D,EAAMt+D,GAAG0W,aAAa,SAC3B4nD,EAAMt+D,GAAGuI,MAAM4xC,QAAU,OAEpBmkB,EAAMt+D,GAAG2H,UAAUK,SAAS,gCACrBs2D,EAAMt+D,GAClBkJ,EAAOo1D,EAAMt+D,KAGrB,IAAImxwB,EAAWttwB,KAAKyqwB,aAAa5c,WAAWpD,eAAejpvB,iBAAiB,uCAC5ExB,KAAKyqwB,aAAa5c,WAAWlB,cAAc,KAAMtgvB,KAAKoxB,MAAM6vuB,EAAS7wwB,OAAS,QAExC,MAAjC0K,EAAOkN,cAAcrR,SAC1BhD,KAAKqtwB,+BAETrtwB,KAAKqswB,uBAAwBpswB,KAAMA,EAAMyG,KAAM,SAAU9C,UAAW3D,EAAKkH,eAGzEnH,KAAKutwB,0BAIjB39qB,EAAMv0F,UAAUmxwB,cAAgB,SAAU3rwB,EAAGgqwB,GACzC,IAAI9qwB,EAAQC,KACZ,GAAiC,QAA7Ba,EAAE0qT,WAAW,GAAGr5S,WAGpBlS,KAAKwtwB,WAAW3swB,IACXpD,EAAkBuC,KAAKkiE,YAAY,CACpC,IAAIursB,EAAWtswB,EAAc,OAASkC,UAAW,mBAE7C+2B,EAAU,4HADAp6B,KAAK4zE,KAAKG,YAAY,WAE+E,6IAG/Gu3rB,EAAc9qwB,SAASm3iB,cAAcsnN,yBAAyB7kuB,GAClEqzuB,EAAS9rwB,YAAY2pwB,GACrB,IAAIC,EAAakC,EAAS9qwB,cAAc,qBACpC+qwB,EAAYD,EAAS9qwB,cAAc,eACnC27C,EAAW,GACXottB,EAAgB1rwB,KAAK4zE,KAAKG,YAAY,uBAC1C/zE,KAAK2rwB,YAAc,IAAI9spB,IACnBxrG,MAAOq4vB,EAAel5vB,SAAS,EAAMU,UAAWlT,KAAKM,OAAO4S,UAAWkN,OAAQ,SAAUvf,GAEjFy9C,EADAz9C,EAAE2R,QACS,SAGA,MAIvBxS,KAAK2rwB,YAAYt1tB,SAASk1tB,GAC1B,IAAIa,EAAapswB,KAAK4zE,KAAKG,YAAY,gBACnC45rB,GACAC,UAAW5twB,KAAM4vE,UAAW/uE,EAAE+uE,UAC9B27O,WAAY1qT,EAAE0qT,WAAYk4c,aAAc5iwB,EAAE4iwB,aAActwsB,KAAMu6sB,EAAWvmwB,OAAQm3C,GAErFt+C,KAAKkiE,UAAUl7D,eACX+O,OAAQ,UAAWC,MAAO,QAAS4uE,OAAQ,cAAexqD,QAASqzuB,EAAUv5vB,UAAYkC,EAAG,SAAUC,EAAG,UACzG8vG,UACQE,MAAO,SAAUxlH,GAAKd,EAAMs+uB,WAAWsvB,IACvCvnpB,aACIhsF,QAASgyuB,EAAYn5vB,SAAU,uBAAwB+qG,WAAW,OAI7EvgH,EAAkBotwB,KACnB6C,EAAU1wwB,MAAQ6twB,EAAaj9uB,IAC9Bi9uB,EAAmB,OAAI7qwB,KAAK2rwB,YAAYn5vB,SAAU,EAAOxS,KAAK2rwB,YAAYn5vB,SAAU,EACrFxS,KAAKkiE,UAAU0iB,OAASimrB,EAAajmrB,QAEzC5kF,KAAKkiE,UAAU9nC,QAAQz3B,cAAc,SAAST,UAGtD0tF,EAAMv0F,UAAUqxwB,cAAgB,SAAU7rwB,GACtC,IAAId,EAAQC,KACZ,GAAiC,QAA7Ba,EAAE0qT,WAAW,GAAGr5S,SAApB,CAGAlS,KAAKwtwB,WAAW3swB,GAChB,IAAIg/uB,EAAU7/uB,KAAK4zE,KAAKG,YAAY,WACpC,IAAKt2E,EAAkBuC,KAAKkiE,WAAY,CACpC,IAAI2rsB,EAAU1swB,EAAc,OAASkC,UAAW,kBAC5CyqwB,EAAY9twB,KAAK4zE,KAAKG,YAAY,mBAClCq4rB,EAAapswB,KAAK4zE,KAAKG,YAAY,gBAGnC35C,EAAU,0EAFwC,OAAxCv5B,EAAE0qT,WAAW,GAAG14S,aAAa,OAAmB,GAC1DhS,EAAE0qT,WAAW,GAAG14S,aAAa,QAE8B,4CAA8CgtuB,EAAU,YAEnHyrB,EAAc9qwB,SAASm3iB,cAAcsnN,yBAAyB7kuB,GAClEyzuB,EAAQlswB,YAAY2pwB,GACpB,IAAIyC,EAAWF,EAAQlrwB,cAAc,cACjCqrwB,GAAcJ,UAAW5twB,KAAM4vE,UAAW/uE,EAAE+uE,UAAW27O,WAAY1qT,EAAE0qT,WAAYv3M,IAAK+5pB,GAC1F/twB,KAAKkiE,UAAUl7D,eACX+O,OAAQ,UAAWC,MAAO,QAAS4uE,OAAQkprB,EAAW1zuB,QAASyzuB,EAAS35vB,UAAYkC,EAAG,SAAUC,EAAG,UACpG8vG,UACQE,MAAO,SAAUxlH,GAAKd,EAAMkuwB,UAAUD,IACtC5npB,aACIhsF,QAASgyuB,EAAYn5vB,SAAU,sBAAuB+qG,WAAW,OAIjFh+G,KAAKkiE,UAAU9nC,QAAQz3B,cAAc,SAAST,WAGtD0tF,EAAMv0F,UAAU4ywB,UAAY,SAAUptwB,GAClC,IAAKpD,EAAkBoD,EAAEmzG,KAAM,CAC3B,IAAI6roB,EAAUh/uB,EAAEmzG,IAAIh3G,MACpB6D,EAAE0qT,WAAW,GAAG/nT,aAAa,MAAOq8uB,GACpCh/uB,EAAE+uE,UAAUie,UACZ7tF,KAAKM,OAAOusY,UAAU7yH,WACtBh6Q,KAAKkiE,UAAUqf,MAAO/5B,aAAa,MAG3CooC,EAAMv0F,UAAUgjvB,WAAa,SAAUx9uB,GACnC,GAAiC,QAA7BA,EAAE0qT,WAAW,GAAGr5S,SAApB,CAGA,IAAI0b,EAAM/sB,EAAEsyD,KAAKn2D,MACjB,IAAKgD,KAAKmswB,MAAMv+uB,GAIZ,OAHAjqB,GAAU9C,EAAEsyD,MAAO,WACnBtyD,EAAEsyD,KAAKptC,kBAAkB,EAAG6H,EAAInxB,aAChCoE,EAAEsyD,KAAKjxD,QAMX,GAFImC,GAAaxD,EAAEsyD,MAAO,WAEqB,MAA3CtyD,EAAE0qT,WAAW,GAAGl3S,cAAcnC,SAK9B,OAJArR,EAAE0qT,WAAW,GAAGl3S,cAAcqa,KAAOd,EACrC/sB,EAAE0qT,WAAW,GAAGl3S,cAAclN,OAAStG,EAAEsG,OACzCtG,EAAE+swB,UAAUttwB,OAAOusY,UAAU7yH,gBAC7Bn5Q,EAAE+swB,UAAU1rsB,UAAUqf,MAAO/5B,aAAa,IAG9C3mD,EAAE+uE,UAAUie,UACZ,IAAIh6E,EAAS1S,EAAc,KACvBsC,OACIirB,KAAMd,EACNzmB,OAAQ,YAGhB0M,EAAOlS,YAAYd,EAAE0qT,WAAW,IAChC43c,GAAW9vR,OAAOrze,KAAKi2E,cAAcC,cAAeriE,GACpDhT,EAAE+swB,UAAUttwB,OAAOusY,UAAU7yH,WAC7Bn5Q,EAAE+swB,UAAU1rsB,UAAUqf,MAAO/5B,aAAa,MAE9CooC,EAAMv0F,UAAU8wwB,MAAQ,SAAUv+uB,GAE9B,MADa,sFACCzqB,KAAKyqB,IAEvBgiE,EAAMv0F,UAAUixwB,UAAY,SAAUzrwB,GAClC,IAAI0qT,EAAa1qT,EAAE0qT,WAAW,GACG,QAA7B1qT,EAAE0qT,WAAW,GAAGr5S,WAGoC,IAApDlS,KAAKM,OAAOusY,UAAUkmX,mBAAmBt2vB,QACzCuD,KAAKM,OAAOusY,UAAU7yH,WAEe,MAArCuxC,EAAWl3S,cAAcrR,SAAoBuoT,EAAWl3S,cAAcA,cAAcvQ,UAAUK,SAAS+pwB,IAGjGzwwB,EAAkBoI,EAAQ0lT,EAAY,IAAM2id,KAIlD7owB,EAAOkmT,GAHPlmT,EAAOQ,EAAQ0lT,EAAY,IAAM2id,KAHjC7owB,EAAOkmT,EAAWl3S,eAQtBrU,KAAKM,OAAOusY,UAAU7yH,WAClBh6Q,KAAKyqwB,cAAgBjqwB,SAASuL,KAAK5H,SAASnE,KAAKyqwB,aAAa5c,WAAW7svB,UACzEhB,KAAKyqwB,aAAa5c,WAAWt4R,cAGrC3lY,EAAMv0F,UAAU2noB,QAAU,SAAUnioB,GAChC,IAAI0qT,EAAa1qT,EAAE0qT,WAAW,GAC9B,GAA4B,QAAxBA,EAAWr5S,SAAf,CAKA,GAFArR,EAAE+uE,UAAUie,UACZlqF,GAAU4nT,GAAa,eAClB9tT,EAAkBoI,EAAQ0lT,EAAY,IAAM2id,KAS5C,CACDluwB,KAAKmuwB,WAAahtwB,EAAc,QAC5BkC,UAAW6qwB,GACXzqwB,OAASqlwB,gBAAiB,QAASl2pB,UAAW,WAElD,IAAIw7pB,EAAUjtwB,EAAc,QAAUkC,UAAW,eAC7CgrwB,EAAWltwB,EAAc,QAAUkC,UAAW,cAAeI,OAASqlwB,gBAAiB,UAC3FsF,EAAQzswB,YAAYd,EAAE0qT,WAAW,IACjC6id,EAAQzswB,YAAY0swB,GACpB,IAAIC,EAAatuwB,KAAK4zE,KAAKG,YAAY,gBACvCs6rB,EAASrswB,UAAYsswB,EACrBtuwB,KAAKmuwB,WAAWxswB,YAAYyswB,GACxB7id,EAAWznT,UAAUK,S7DtaV,gB6DuaXR,GAAU3D,KAAKmuwB,YAAaI,IAE5Bhjd,EAAWznT,UAAUK,SAASqqwB,KAC9B7qwB,GAAU3D,KAAKmuwB,YAAaK,IAE5Bjjd,EAAWznT,UAAUK,SAASsqwB,KAC9B9qwB,GAAU3D,KAAKmuwB,YAAaM,IAE5Bljd,EAAWznT,UAAUK,SAASuqwB,KAC9B/qwB,GAAU3D,KAAKmuwB,YAAaO,IAE5Bnjd,EAAWznT,UAAUK,SAASwqwB,KAC9BhrwB,GAAU3D,KAAKmuwB,YAAaQ,IAEhCxL,GAAW9vR,OAAOrze,KAAKi2E,cAAcC,cAAel2E,KAAKmuwB,YACzDnuwB,KAAKM,OAAOusY,UAAU27W,cAAcyV,cAAcZ,iBAAiBr9vB,KAAKi2E,cAAcC,cAAem4rB,EAAS98vB,WAAW,GAAI88vB,EAAS98vB,WAAW,GAAI,EAAG88vB,EAAS98vB,WAAW,GAAGsK,YAAYpf,aApC3L4I,EAAOQ,EAAQ0lT,EAAY,IAAM2id,KACQ,MAArC3id,EAAWl3S,cAAcrR,QACzBmgwB,GAAW9vR,OAAOrze,KAAKi2E,cAAcC,cAAeq1O,EAAWl3S,eAG/D8uvB,GAAW9vR,OAAOrze,KAAKi2E,cAAcC,cAAeq1O,GAiC5DvrT,KAAKM,OAAOusY,UAAU7yH,WAClBh6Q,KAAKyqwB,cAAgBjqwB,SAASuL,KAAK5H,SAASnE,KAAKyqwB,aAAa5c,WAAW7svB,WACzEhB,KAAKyqwB,aAAa5c,WAAWt4R,YAC7Blxd,GAAaknT,GAAa,kBAGlC37N,EAAMv0F,UAAUu/uB,UAAY,SAAU/5uB,GAClC,GAAiC,QAA7BA,EAAE0qT,WAAW,GAAGr5S,WAGpBlS,KAAKwtwB,WAAW3swB,IACXpD,EAAkBuC,KAAKkiE,YAAY,CACpC,IAAI0ssB,EAAgB5uwB,KAAK4zE,KAAKG,YAAY,mBACtCq4rB,EAAapswB,KAAK4zE,KAAKG,YAAY,gBACnC86rB,EAAgB7uwB,KAAK8uwB,aAAajuwB,GAClCirwB,GAAc8B,UAAW5twB,KAAM4vE,UAAW/uE,EAAE+uE,UAAW27O,WAAY1qT,EAAE0qT,YACzEvrT,KAAKkiE,UAAUl7D,eACX+O,OAAQ,UAAWC,MAAO,QAAS4uE,OAAQgqrB,EAAex0uB,QAASy0uB,EAAe36vB,UAAYkC,EAAG,SAAUC,EAAG,UAC9G8vG,UACQE,MAAOrmH,KAAK+uwB,WAAWzzwB,KAAKwwwB,GAC5B1lpB,aACIhsF,QAASgyuB,EAAYn5vB,SAAU,uBAAwB+qG,WAAW,OAIlFh+G,KAAKkiE,UAAU9nC,QAAQz3B,cAAc,SAAST,UAGtD0tF,EAAMv0F,UAAUmvR,MAAQ,SAAU3pR,GAC9B,GAAiC,QAA7BA,EAAE0qT,WAAW,GAAGr5S,SAApB,CAGA,IAAIq5S,EAAa1qT,EAAE0qT,WAAW,GAC9BA,EAAW7/S,gBAAgB,SAC3B/H,GAAU4nT,GAAaijd,IACvB7qwB,GAAU4nT,GAAa,eAClB9tT,EAAkBoI,EAAQ0lT,EAAY,IAAM2id,OAC7C7pwB,GAAawB,EAAQ0lT,EAAY,IAAM2id,KAAuBK,IAC9DlqwB,GAAawB,EAAQ0lT,EAAY,IAAM2id,KAAuBS,IAC9DtqwB,GAAawB,EAAQ0lT,EAAY,IAAM2id,KAAuBO,IAC9DpqwB,GAAawB,EAAQ0lT,EAAY,IAAM2id,KAAuBQ,IAC9D/qwB,GAAUkC,EAAQ0lT,EAAY,IAAM2id,KAAuBM,KAE/DxuwB,KAAKM,OAAOusY,UAAU7yH,aAE1BpqL,EAAMv0F,UAAU+pJ,OAAS,SAAUvkJ,GAC/B,GAAiC,QAA7BA,EAAE0qT,WAAW,GAAGr5S,SAApB,CAGA,IAAIq5S,EAAa1qT,EAAE0qT,WAAW,GAC9BA,EAAW7/S,gBAAgB,SAC3B/H,GAAU4nT,GAAa,eACvB5nT,GAAU4nT,G7D5eS,e6D6ed9tT,EAAkBoI,EAAQ0lT,EAAY,IAAM2id,OAC7C7pwB,GAAawB,EAAQ0lT,EAAY,IAAM2id,KAAuBM,IAC9DnqwB,GAAawB,EAAQ0lT,EAAY,IAAM2id,KAAuBS,IAC9DtqwB,GAAawB,EAAQ0lT,EAAY,IAAM2id,KAAuBO,IAC9DpqwB,GAAawB,EAAQ0lT,EAAY,IAAM2id,KAAuBQ,IAC9D/qwB,GAAUkC,EAAQ0lT,EAAY,IAAM2id,KAAuBK,KAE/DvuwB,KAAKM,OAAOusY,UAAU7yH,aAE1BpqL,EAAMv0F,UAAU6xwB,iBAAmB,SAAUrswB,GACzC,IAAI0qT,EAAa1qT,EAAE0qT,WAAW,GAC9BA,EAAW7/S,gBAAgB,SAC3B/H,GAAU4nT,GAAa,eAClB9tT,EAAkBoI,EAAQ0lT,EAAY,IAAM2id,OAC7C7pwB,GAAawB,EAAQ0lT,EAAY,IAAM2id,KAAuBQ,IAC9D/qwB,GAAUkC,EAAQ0lT,EAAY,IAAM2id,KAAuBO,KAErB,MAAtCljd,EAAWl3S,cAAcnC,UACzB7N,GAAaknT,EAAWl3S,eAAgBq6vB,IACxC/qwB,GAAU4nT,EAAWl3S,eAAgBo6vB,KAGrC9qwB,GAAU4nT,GAAakjd,IAE3BzuwB,KAAKM,OAAOusY,UAAU7yH,YAE1BpqL,EAAMv0F,UAAU+xwB,kBAAoB,SAAUvswB,GAC1C,IAAI0qT,EAAa1qT,EAAE0qT,WAAW,GAC9BA,EAAW7/S,gBAAgB,SAC3B/H,GAAU4nT,GAAa,eAClB9tT,EAAkBoI,EAAQ0lT,EAAY,IAAM2id,OAC7C7pwB,GAAawB,EAAQ0lT,EAAY,IAAM2id,KAAuBO,IAC9D9qwB,GAAUkC,EAAQ0lT,EAAY,IAAM2id,KAAuBQ,KAErB,MAAtCnjd,EAAWl3S,cAAcnC,UACzB7N,GAAaknT,EAAWl3S,eAAgBo6vB,IACxC9qwB,GAAU4nT,EAAWl3S,eAAgBq6vB,KAGrC/qwB,GAAU4nT,GAAamjd,IAE3B1uwB,KAAKM,OAAOusY,UAAU7yH,YAE1BpqL,EAAMv0F,UAAU8xwB,mBAAqB,SAAUtswB,GAC3C,IAAI0qT,EAAa1qT,EAAE0qT,WAAW,GAC9BA,EAAW7/S,gBAAgB,SAC3B/H,GAAU4nT,GAAa,eAClB9tT,EAAkBoI,EAAQ0lT,EAAY,IAAM2id,OAC7C7pwB,GAAawB,EAAQ0lT,EAAY,IAAM2id,KAAuBO,IAC9DpqwB,GAAawB,EAAQ0lT,EAAY,IAAM2id,KAAuBQ,IAC9D/qwB,GAAUkC,EAAQ0lT,EAAY,IAAM2id,KAAuBS,KAErB,MAAtCpjd,EAAWl3S,cAAcnC,UACzB7N,GAAaknT,EAAWl3S,eAAgBo6vB,IACxCpqwB,GAAaknT,EAAWl3S,eAAgBq6vB,IACxC/qwB,GAAU4nT,EAAWl3S,eAAgBs6vB,KAGrChrwB,GAAU4nT,GAAaojd,IAE3B3uwB,KAAKM,OAAOusY,UAAU7yH,YAE1BpqL,EAAMv0F,UAAUmywB,WAAa,SAAU3swB,GACnC,IAAId,EAAQC,KACZ,GAAIA,KAAKkiE,UACLliE,KAAKkiE,UAAUqf,MAAO/5B,aAAa,QADvC,CAIA,IAAIwntB,EAAY7twB,EAAc,OAASkC,UAAW,mBAAoBC,GAAItD,KAAK+6vB,MAAQ,WACvF/6vB,KAAKM,OAAOU,QAAQW,YAAYqtwB,GAChC,IAAIC,EAAYjvwB,KAAK4zE,KAAKG,YAAY,gBAClCm7rB,EAAgBlvwB,KAAK4zE,KAAKG,YAAY,gBACtCo7rB,EAAYnvwB,KAAK4zE,KAAKG,YAAY,eAClCnE,EAAY/uE,EAAE+uE,UACdk8rB,GAAc8B,UAAW5twB,KAAM4vE,UAAW/uE,EAAE+uE,UAAW3vE,KAAMY,EAAEZ,MACnED,KAAKkiE,UAAY,IAAI4iD,IACjBlgC,OAAQuqrB,EACRl8vB,SAAU63uB,GACV53uB,UAAWlT,KAAKM,OAAO4S,UACvBlF,OAAQhO,KAAKM,OAAO0N,OACpB24G,eAAe,EAAMX,eAAe,EAAMhwG,MAAQxK,GAAgB,SAAI,QAAU,QAASuK,OAAQ,UACjG7B,UAAYkC,EAAG,SAAUC,EAAI7K,GAAgB,SAAI,SAAW,OAC5Dg6G,QAASh6G,GAAQkb,SACjBy/F,UACQE,MAAOrmH,KAAKovwB,eAAe9zwB,KAAKwwwB,GAChC1lpB,aAAehsF,QAAS60uB,EAAWh8vB,SAAU,uBAAwB+qG,WAAW,KAGhFqI,MAAO,SAAUxlH,GAAKd,EAAMiswB,aAAanrwB,IACzCulH,aAAenzG,SAAU,kBAAmBmnB,QAAS80uB,KAE7D/nwB,OAASqE,GAAgB,SAAIhL,SAASuL,KAAO/L,KAAKM,OAAOU,QACzD4oH,mBAAqB5xF,OAAQ,QAC7B/1B,MAAO,SAAU3F,GACbyD,EAAMO,OAAO8kN,QAAS,EAClB9oN,GAASA,EAAMA,MAAMkrD,cACW,SAA5BznD,EAAMO,OAAO8yvB,WACbxjrB,EAAUie,UAGV9tF,EAAMO,OAAOusY,UAAU27W,cAAcqL,kBAAkBhmqB,QAAQ9tF,EAAMO,OAAO21E,cAAcwvqB,iBAGlG1lvB,EAAMmiE,UAAU5vD,UAChBjN,EAAOtF,EAAMmiE,UAAUlhE,SACvBjB,EAAMmiE,UAAY,QAG1BliE,KAAKkiE,UAAU7rB,SAAS24tB,GACxBA,EAAUtqwB,MAAM6uD,UAAY,OAC5BhuD,GAAanB,IAAI5D,SAAU,YAAaR,KAAKw3d,gBAAiBx3d,MAC1DA,KAAKyqwB,eACDzqwB,KAAKyqwB,aAAa5c,YAAcrtvB,SAASuL,KAAK5H,SAASnE,KAAKyqwB,aAAa5c,WAAW7svB,WACpFhB,KAAKyqwB,aAAa5c,WAAWt4R,YACxB93d,EAAkBoD,EAAE4iwB,eACrBp/vB,GAAaxD,EAAE4iwB,aAAa,IAAK,gBAGrCzjwB,KAAKyqwB,aAAarc,aAAe5tvB,SAASuL,KAAK5H,SAASnE,KAAKyqwB,aAAarc,YAAYptvB,UACtFhB,KAAKyqwB,aAAarc,YAAY74R,eAI1C3lY,EAAMv0F,UAAU2wwB,aAAe,SAAUnrwB,GACrCb,KAAKM,OAAO8kN,QAAS,EACrBplN,KAAKkiE,UAAUqf,MAAO/5B,aAAa,KAEvCooC,EAAMv0F,UAAUm8d,gBAAkB,SAAU32d,GACxC,IAAIsG,EAAStG,EAAEsG,QACV1J,EAAkBuC,KAAKkiE,cAAiBr8D,EAAQsB,EAAQ,IAAMnH,KAAKkiE,UAAUlhE,QAAQsC,KAAOtD,KAAKM,OAAOk0E,gBAAgB/0C,QAAUz/B,KAAKM,OAAOulvB,sBAC9I7lvB,KAAKM,OAAOulvB,oBAAoB1hvB,SAAStD,EAAEsG,SAC3CnH,KAAKM,OAAOulvB,qBAAuB7lvB,KAAKM,OAAOulvB,oBAAoB1hvB,SAAStD,EAAEsG,UAC1EtB,EAAQsB,EAAQ,IAAMnH,KAAKM,OAAOojvB,QAAU,oBAC5Cv8uB,EAAOxE,cAAc,IAAM3C,KAAKM,OAAOojvB,QAAU,qBACtD1jvB,KAAKkiE,UAAUqf,MAAO/5B,aAAa,IACnCxnD,KAAKM,OAAO8kN,QAAS,EACrBzxM,GAAc3T,KAAKM,OAAOU,QAAS,cAG3C4uF,EAAMv0F,UAAUg0wB,cAAgB,SAAUxuwB,GACtC,IAAIyuwB,EAASnuwB,EAAc,OAASkC,UAAW,WAC3CkswB,EAAWvvwB,KAAK4zE,KAAKG,YAAY,YAGrC,OAFA/zE,KAAKwvwB,SAAWruwB,EAAc,SAAWkC,UAAW,oBAAqBI,OAASqjB,YAAayovB,EAAUtsvB,WAAY,WACrHqsvB,EAAO3twB,YAAY3B,KAAKwvwB,UACjBF,GAEX1/qB,EAAMv0F,UAAU+zwB,eAAiB,SAAUvuwB,GACvC,IAAI6R,EAAQ1S,KAAK4twB,UACbhgvB,EAAMlb,EAAM88vB,SAASxywB,MAIzB,GAHyD,IAArD0V,EAAMpS,OAAOusY,UAAUkmX,mBAAmBt2vB,QAC1CiW,EAAMpS,OAAOusY,UAAU7yH,WAEtBv8Q,EAAkBiV,EAAM+8vB,YAAsC,KAAxB/8vB,EAAM+8vB,UAAU7hvB,KAKtD,GAAY,KAARA,EAAY,CACjB,GAAgC,SAA5Blb,EAAMpS,OAAO8yvB,YAAyB31vB,EAAkBoI,EAAQ7F,KAAK4vE,UAAU79C,MAAMuquB,eAAe77vB,WAAY,IAAMiS,EAAMujE,cAAc+mjB,WAAW15nB,KAAM,CAC3JoP,EAAMujE,cAAcwvqB,eAAevjvB,QACnC,IAAI6vB,EAAQrf,EAAMpS,OAAOusY,UAAU27W,cAAcyV,cAActP,SAASj8uB,EAAMujE,cAAcC,eAC5Fl2E,KAAK4vE,UAAYl9D,EAAMpS,OAAOusY,UAAU27W,cAAcyV,cAAcxwqB,KAAK17D,EAAOrf,EAAMujE,cAAcC,eACpGl2E,KAAKyjwB,aAAe/wvB,EAAMpS,OAAOusY,UAAU27W,cAAcyV,cAAcrB,wBAAwB7quB,GAEnG,IAAIqiE,EAAQ,6BACRs7qB,EAAajywB,EAAkBmwB,EAAIje,MAAMykF,KAAuC,SAA5B1hF,EAAMpS,OAAO8yvB,WAA+C,GAAtBxluB,EAAIje,MAAMykF,GAAO,GAC3Gp3F,GACA4wB,IAAKA,EAAKgiD,UAAW5vE,KAAK4vE,UAAWiwqB,QAAS6vB,EAC9CjM,aAAczjwB,KAAKyjwB,aAAcztvB,MAAOtD,EAAMpS,OAAOqvwB,oBAAoB35vB,MACzED,OAAQrD,EAAMpS,OAAOqvwB,oBAAoB55vB,QAE7CrD,EAAMpS,OAAOusY,UAAU75T,QAAQtgE,EAAMpS,OAAQN,KAAKC,KAAMD,KAAKC,KAAKi7G,cAAel+G,GACjF0V,EAAMwvD,UAAUqf,MAAO/5B,aAAa,UAnBpC90C,EAAMpS,OAAOusY,UAAU75T,QAAQtgE,EAAMpS,OAAQN,KAAKC,KAAMD,KAAKC,KAAKi7G,cAAexoG,EAAM+8vB,WACvF/8vB,EAAMwvD,UAAUqf,MAAO/5B,aAAa,IACpC90C,EAAM+8vB,UAAU7hvB,IAAM,IAoB9BgiE,EAAMv0F,UAAUyzwB,aAAe,SAAUjuwB,GACrC,IAAI0qT,EAAa1qT,EAAE0qT,WAAW,GAC1BykI,EAAYhwb,KAAK4zE,KAAKG,YAAY,eAClCk8W,EAAWjwb,KAAK4zE,KAAKG,YAAY,cACjC67rB,EAAczuwB,EAAc,OAASkC,UAAW,mBAKhD+2B,EAAU,mCAAqC61Z,EAC/C,wHALiD,SAArC1kI,EAAW14S,aAAa,UACpCpV,EAAkB8tT,EAAW14S,aAAa,UAAa04S,EAAWv1S,MAAQu1S,EAAW14S,aAAa,UAMhG,4CACwCm9a,EAAY,2HANH,SAAtCzkI,EAAW14S,aAAa,WACrCpV,EAAkB8tT,EAAW14S,aAAa,WAAc04S,EAAWx1S,OAASw1S,EAAW14S,aAAa,WAQlG,YACFy4vB,EAAc9qwB,SAASm3iB,cAAcsnN,yBAAyB7kuB,GAClEw1uB,EAAYjuwB,YAAY2pwB,GACT,IAAIzzoB,IAAiB77F,OAAQ,KAAM9oB,UAAWlT,KAAKM,OAAO4S,UAAWlF,OAAQhO,KAAKM,OAAO0N,SAC/FqoC,SAASu5tB,EAAYjtwB,cAAc,cAG5C,OAFgB,IAAIk1H,IAAiB77F,OAAQ,KAAM9oB,UAAWlT,KAAKM,OAAO4S,UAAWlF,OAAQhO,KAAKM,OAAO0N,SAC/FqoC,SAASu5tB,EAAYjtwB,cAAc,eACtCitwB,GAEXhgrB,EAAMv0F,UAAU0zwB,WAAa,SAAUluwB,GACnC,IAAI0qT,EAAavrT,KAAKurT,WAAW,GAC7Bskd,EAAY7vwB,KAAK4twB,UAAU1rsB,UAAUlhE,QACzCuqT,EAAW7mT,MAAMqR,OAAS,GAC1Bw1S,EAAW7mT,MAAMsR,MAAQ,GACzBu1S,EAAWv1S,MAAQwF,WAAWq0vB,EAAUltwB,cAAc,gBAAgB3F,OACtEuuT,EAAWx1S,OAASyF,WAAWq0vB,EAAUx7vB,cAAc1R,cAAc,iBAAiB3F,OACtFgD,KAAK4twB,UAAUttwB,OAAOusY,UAAU7yH,WAChCh6Q,KAAK4twB,UAAU1rsB,UAAUqf,MAAO/5B,aAAa,KAEjDooC,EAAMv0F,UAAUwzjB,YAAc,SAAUhujB,GAEpC,GADAb,KAAKwtwB,WAAW3swB,IACXpD,EAAkBuC,KAAKkiE,WAAY,CACpC,IAAI2ssB,EAAgB1twB,EAAc,OAASkC,UAAW,oBAChD5F,EAAkBuC,KAAKM,OAAOqvwB,oBAAoB5yvB,OAAoC,aAA3B/c,KAAKM,OAAO8yvB,YAC3C,SAA3BpzvB,KAAKM,OAAO8yvB,aACfyb,EAAcltwB,YAAY3B,KAAK8vwB,UAAUjvwB,IAE7C,IAAIw/uB,EAAal/uB,EAAc,OAASkC,UAAW,iBAC/C0swB,EAAiB/vwB,KAAK4zE,KAAKG,YAAY,mBACZ,SAA3B/zE,KAAKM,OAAO8yvB,WACZ/S,EAAWr+uB,UAAY+twB,EAGvB1vB,EAAWr+uB,UAAYhC,KAAK4zE,KAAKG,YAAY,eAEjD86rB,EAAcltwB,YAAY0+uB,GAC1BwuB,EAAcltwB,YAAY3B,KAAKqvwB,cAAcxuwB,IACzCA,EAAE0qT,YAA2C,QAA7B1qT,EAAE0qT,WAAW,GAAGr5S,UAChClS,KAAKkiE,UAAUl7D,eAAgB49E,OAAQ,aAAcxqD,QAASy0uB,IAAiB,GAC/E7uwB,KAAKkiE,UAAUlhE,QAAQ2B,cAAc,kBAAkBkZ,YAAc,UAGrE7b,KAAKkiE,UAAUl7D,eAAgBozB,QAASy0uB,IAAiB,GAE7D7uwB,KAAKkiE,UAAUlhE,QAAQ0D,MAAM6uD,UAAY,QACnC91D,EAAkBuC,KAAKM,OAAOqvwB,oBAAoB5yvB,OAAoC,aAA3B/c,KAAKM,OAAO8yvB,YAC3C,SAA3BpzvB,KAAKM,OAAO8yvB,WACfyb,EAAclswB,cAAc,IAAM3C,KAAK+6vB,MAAQ,gBAAgB74vB,QAG/D2swB,EAAclswB,cAAc,cAAcT,UAItD0tF,EAAMv0F,UAAUy0wB,UAAY,SAAUjvwB,GAClC,IACI4sF,EACAg2qB,EAFA1jwB,EAAQC,KAGR0S,EAAQ1S,KACZ,GAAgC,SAA5B0S,EAAMpS,OAAO8yvB,YACb31vB,EAAkBoI,EAAQhF,EAAE+uE,UAAU79C,MAAMuquB,eAAe77vB,WAAY,IAAMT,KAAKi2E,cAAc+mjB,WAAW15nB,KAAM,CACjHtD,KAAKi2E,cAAcwvqB,eAAevjvB,QAClC,IAAI6vB,EAAQ/xB,KAAKM,OAAOusY,UAAU27W,cAAcyV,cAActP,SAAS3uvB,KAAKM,OAAO21E,cAAcC,eACjGuX,EAAOztF,KAAKM,OAAOusY,UAAU27W,cAAcyV,cAAcxwqB,KAAK17D,EAAO/xB,KAAKM,OAAO21E,cAAcC,eAC/FutrB,EAAezjwB,KAAKM,OAAOusY,UAAU27W,cAAcyV,cAAcrB,wBAAwB7quB,QAGzF07D,EAAO5sF,EAAE+uE,UACT6zrB,EAAe5iwB,EAAE4iwB,aAErB,IAAIuM,EAAkB7uwB,EAAc,OAASkC,UAAW,gCACpD4swB,EAAiBjwwB,KAAK4zE,KAAKG,YAAY,4BACvCm8rB,EAAWlwwB,KAAK4zE,KAAKG,YAAY,sBACjCpR,EAAOxhE,EAAc,QAAUkC,UAAW,eAC9Cs/D,EAAK3gE,UAAawJ,GAAgB,SAAIykwB,EAAiBC,EACvD,IAAIC,EAAShvwB,EAAc,UACvBkC,UAAW,cAAeC,GAAItD,KAAK+6vB,MAAQ,eAC3Ct3vB,OAASyolB,UAAW,OAAQxllB,KAAM,YAEtCi8D,EAAKhhE,YAAYwuwB,GACjBH,EAAgBruwB,YAAYghE,GAC5B,IAAIytsB,EAAapwwB,KAAK4zE,KAAKG,YAAY,UAC1B,IAAIgqC,IAAS3jF,QAASg2uB,EAAYl9vB,UAAWlT,KAAKM,OAAO4S,YAC/DmjC,SAAS85tB,GAChB,IAAIvgJ,EAAYpknB,GAAgB,SAAIm3D,EAAOwtsB,EAC3C5qwB,GAAanB,IAAIwrnB,EAAU,QAAS5vnB,KAAKqwwB,WAAYrwwB,MACrD,IAAIswwB,EAAYnvwB,EAAc,SAC1BmC,GAAItD,KAAK+6vB,MAAQ,UAAWt3vB,OAASiD,KAAM,OAAQ+wB,KAAM,iBAE7Du4uB,EAAgBruwB,YAAY2uwB,GAC5B,IAAIzwB,EAyCJ,OAxCA7/uB,KAAKuwwB,UAAY,IAAIr8nB,IACjBwD,eACIC,QAAS33I,KAAKM,OAAOqvwB,oBAAoBh4nB,SAE7CyB,SAAUz2E,EACVyxE,UAAU,EACVlhI,UAAWlT,KAAKM,OAAO4S,UACvB2hI,kBAAmB70I,KAAKM,OAAOqvwB,oBAAoBa,aAAatjwB,WAChEsiI,SAAU,SAAU3uI,GAEhB,GADAg/uB,EAAUh/uB,EAAEyzI,UAAU,GAAG78G,KACO,SAA5B13B,EAAMO,OAAO8yvB,YAAyB31vB,EAAkBsC,EAAMO,OAAOqvwB,oBAAoB5yvB,MAAO,CAChG,IAAI+0M,EAAW,IAAIC,WACnBD,EAASp1N,iBAAiB,OAAQ,SAAUmE,GACxC,IAAI+sB,EAAM+jM,IAAIC,gBAAgBl/M,EAAMkb,IAAIkkM,EAAS/yN,SACjD2T,EAAM+8vB,WACF7hvB,IAAKA,EAAKgiD,UAAW6d,EAAMoypB,QAASA,EAAS4jB,aAAcA,EAC3DztvB,MAAOtD,EAAMpS,OAAOqvwB,oBAAoB35vB,MAAOD,OAAQrD,EAAMpS,OAAOqvwB,oBAAoB55vB,QAE5FrD,EAAM88vB,SAAShswB,aAAa,WAAY,UAE5CsuN,EAASG,cAAcpxN,EAAEyzI,UAAU,GAAGuE,WAG9C+iF,QAAS,SAAU/6N,GACf,IAAKpD,EAAkBsC,EAAMO,OAAOqvwB,oBAAoB5yvB,MAAO,CAC3D,IAAI6Q,EAAM7tB,EAAMO,OAAOqvwB,oBAAoB5yvB,KAAOlc,EAAEy5I,KAAK7iH,KACzD/kB,EACM+8vB,WACF7hvB,IAAKA,EAAKgiD,UAAW6d,EAAMoypB,QAASA,EAAS4jB,aAAcA,EAC3DztvB,MAAOtD,EAAMpS,OAAOqvwB,oBAAoB35vB,MAAOD,OAAQrD,EAAMpS,OAAOqvwB,oBAAoB55vB,QAE5FrD,EAAM88vB,SAAShswB,aAAa,WAAY,UAGhDitwB,SAAU,WACN/9vB,EAAM88vB,SAAS9jwB,gBAAgB,YAC/BgH,EAAM+8vB,UAAU7hvB,IAAM,MAG9B5tB,KAAKuwwB,UAAUl6tB,SAASi6tB,GACjBN,GAEXpgrB,EAAMv0F,UAAUg1wB,WAAa,WAEzB,OADA7vwB,SAASuL,KAAK2B,uBAAuB,sBAAsB,GAAG/K,cAAc,UAAU0jH,SAC/E,GAEXz2B,EAAMv0F,UAAUuyB,IAAM,SAAU8ivB,GAM5B,IALA,IAAIxnuB,EAAMwnuB,EAAQxzwB,MAAM,KACpByzwB,EAAOznuB,EAAI,GAAGv5B,MAAM,WAAW,GAC/BihwB,EAAOviV,KAAKnlZ,EAAI,IAChByhH,EAAIimnB,EAAKn0wB,OACTo0wB,EAAQ,IAAIx8mB,WAAW1J,GACpBA,KACHkmnB,EAAMlmnB,GAAKimnB,EAAK7jqB,WAAW49C,GAE/B,OAAO,IAAIwmE,MAAM0/iB,IAAUnqwB,KAAMiqwB,KAOrC/grB,EAAMv0F,UAAUiX,QAAU,WACtBtS,KAAKpD,uBAKTgzF,EAAMv0F,UAAUkkC,cAAgB,WAC5B,MAAO,SAEJqwD,KCh6BPkhrB,GAA4B,WAI5B,SAASA,EAAWxwwB,EAAQiloB,GACxBvloB,KAAKM,OAASA,EACd,IAAIghE,EAAiBikkB,EACrBvloB,KAAKkypB,gBAAkB5wlB,EAAeE,WAAW,mBACjDxhE,KAAKtD,mBA0KT,OAxKAo0wB,EAAWz1wB,UAAUqB,iBAAmB,WACpCsD,KAAKM,OAAOslF,GAAG8pqB,GAAmB1vvB,KAAK66uB,WAAY76uB,MACnDA,KAAKM,OAAOslF,GAAGm1jB,GAAmB/6oB,KAAK+wwB,aAAc/wwB,MACrDA,KAAKM,OAAOslF,GAAG+pqB,GAAqB3vvB,KAAKgxwB,iBAAkBhxwB,OAE/D8wwB,EAAWz1wB,UAAU01wB,aAAe,WAChC/wwB,KAAKM,OAAOusY,UAAU27W,cAAc3xE,SAASjxlB,GAAGqrrB,GAA2BjxwB,KAAKyje,UAAWzje,OAE/F8wwB,EAAWz1wB,UAAUuB,oBAAsB,WACvCoD,KAAKu3d,cACLv3d,KAAKM,OAAO0lF,IAAI0pqB,GAAmB1vvB,KAAK66uB,YACxC76uB,KAAKM,OAAO0lF,IAAI2pqB,GAAqB3vvB,KAAKgxwB,kBAC1ChxwB,KAAKM,OAAO0lF,IAAI+0jB,GAAmB/6oB,KAAK+wwB,cACxC/wwB,KAAKM,OAAOusY,UAAU27W,cAAc3xE,SAAS7wlB,IAAIirrB,GAA2BjxwB,KAAKyje,YAErFqtS,EAAWz1wB,UAAU61wB,cAAgB,WACjC,OAAO/vwB,EAAc,YAAckC,UAAW,uBAElDytwB,EAAWz1wB,UAAUg7d,UAAY,SAAUr1d,GACvChB,KAAK+5I,eAAiB,IAAI3jC,GAAep1G,GACrCk2G,UAAWl3G,KAAKmxwB,eAAe71wB,KAAK0E,MAAO42G,WAAY52G,KAAKM,OAAOusY,UAAUk5W,UAAWl2qB,UAAW,YAEvGtqE,GAAanB,IAAIpE,KAAKoxwB,eAAgB,YAAapxwB,KAAK6/G,iBAAkB7/G,OAE9E8wwB,EAAWz1wB,UAAUk8d,YAAc,WAC3Bv3d,KAAK+5I,gBACL/5I,KAAK+5I,eAAeznI,UAEpBtS,KAAKoxwB,gBACL7rwB,GAAahB,OAAOvE,KAAKoxwB,eAAgB,YAAapxwB,KAAK6/G,mBAGnEixpB,EAAWz1wB,UAAUg2wB,gBAAkB,WACnCrxwB,KAAKM,OAAOy5I,eAAiB,IAAI3jC,GAAep2G,KAAKi2E,cAAcwvqB,gBAC/DvuoB,UAAWl3G,KAAKM,OAAOilH,QAAQjqH,KAAK0E,KAAKM,QAASs2G,WAAY52G,KAAKM,OAAOusY,UAAUk5W,UAAWl2qB,UAAW,aAGlHihsB,EAAWz1wB,UAAUi2wB,kBAAoB,WACrCtxwB,KAAKM,OAAOy5I,eAAeznI,WAE/Bw+vB,EAAWz1wB,UAAUwkH,iBAAmB,SAAUh/G,GAC9Cb,KAAKM,OAAOyN,OAAOi8uB,IAA8B/pvB,KAAMY,KAE3DiwwB,EAAWz1wB,UAAU81wB,eAAiB,SAAU70wB,GAC5C,OAAQA,EAAM65D,QACV,IAAK,cACDn2D,KAAKgxwB,iBAAiB10wB,GACtBA,EAAMkpB,mBAIlBsrvB,EAAWz1wB,UAAUooe,UAAY,SAAU5ie,GACvC,OAAQA,EAAEvE,MAAM65D,QACZ,IAAK,cACDt1D,EAAEvE,MAAMkpB,iBACRxlB,KAAK66uB,WAAWh6uB,GAChBA,EAAEm8D,UACEovH,YAAa,aACbgnkB,WAAY,OACZ92vB,MAAOuE,EAAEvE,UAKzBw0wB,EAAWz1wB,UAAUw/uB,WAAa,SAAU56uB,GACxCD,KAAKM,OAAO8kN,QAAS,EACrBplN,KAAKM,OAAOkmB,QAAQmpmB,IAAsBvjc,YAAa,aAAc27jB,WAAY,aAAc9nvB,KAAMA,IACrG,IAAIm0E,EAAUxuE,EAAU,IAAM44S,GAAax+S,KAAKM,OAAOU,SAUvD,GATAhB,KAAKi2E,cAAgBj2E,KAAKkypB,gBAAgBjpB,YAAYnb,GAAWqb,SACjEnpoB,KAAKM,OAAOyN,OAAO67uB,IACf7B,WAAY,aAAc1tc,WAAY,UACtCjlO,YAAap1E,KAAKM,OAAOusvB,yBAEzBpvvB,EAAkBuC,KAAKoxwB,kBACvBpxwB,KAAKoxwB,eAAiBpxwB,KAAKkxwB,iBAE/BlxwB,KAAKM,OAAOixwB,kBACRvxwB,KAAKM,OAAO+rvB,eAAe5stB,OAAQ,CACnC,IAAIopuB,OAAa,GAEbA,EADAprwB,EAAkBuC,KAAKM,OAAOU,QAAQ2B,cAAc,IAAM3C,KAAKM,OAAOU,QAAQsC,GAAK,iBACtEnC,EAAc,OAASkC,UAAW,mBAAoBC,GAAItD,KAAKM,OAAOU,QAAQsC,GAAK,iBAGnFtD,KAAKM,OAAOU,QAAQ2B,cAAc,IAAM3C,KAAKM,OAAOU,QAAQsC,GAAK,iBAEvE3B,YAAY3B,KAAKoxwB,gBAC5BpxwB,KAAKM,OAAOU,QAAQW,YAAYknwB,GAChCA,EAAWnkwB,MAAMqR,OAAS/V,KAAKi2E,cAAc+mjB,WAAWt4nB,MAAMqR,OAC9D8yvB,EAAWnkwB,MAAMqnD,UAAY/rD,KAAKi2E,cAAc+mjB,WAAWt4nB,MAAMqnD,UACjE/rD,KAAKg9nB,WAAWhgoB,MAAQgD,KAAKM,OAAOtD,MACpCgD,KAAKi2E,cAAc+mjB,WAAWt4nB,MAAM4xC,QAAU,OAC9CuytB,EAAWnkwB,MAAM4xC,QAAU,aAG3Bt2C,KAAKi2E,cAAc+mjB,WAAWr7nB,YAAY3B,KAAKoxwB,gBAC/CpxwB,KAAKg9nB,WAAWhgoB,MAAyD,gBAAhDgD,KAAKi2E,cAAcwvqB,eAAezjvB,WACA,KAAvDhC,KAAKi2E,cAAcwvqB,eAAezjvB,UAAUvF,QACa,IAAxDuD,KAAKi2E,cAAcwvqB,eAAel0uB,WAAW9U,QACkB,MAA5DuD,KAAKi2E,cAAcwvqB,eAAel0uB,WAAW,GAAGvO,SACO,IAAvDhD,KAAKi2E,cAAcwvqB,eAAezjvB,UAAUvF,OAAgB,KAAOuD,KAAKM,OAAOtD,MACvFgD,KAAKi2E,cAAcwvqB,eAAe/gvB,MAAM4xC,QAAU,OAClDt2C,KAAKoxwB,eAAe1swB,MAAM4xC,QAAU,QAcxC,GAZAt2C,KAAKM,OAAO8kN,QAAS,EACrBplN,KAAKM,OAAOisvB,mBAAmBvsvB,KAAKM,OAAOk0E,gBAAgB/Z,OAC3Dz6D,KAAKM,OAAOksvB,kBAAkB,cAC1BxsvB,KAAKM,OAAOmrpB,cACZpnpB,GAAarE,KAAKM,OAAOmrpB,eAAgBmxF,KAE7Cv4uB,EAAY+vE,GAAUuhO,KACtB31S,KAAKM,OAAO0/S,iBAAiB,cAC7BhgT,KAAKq2d,UAAUr2d,KAAKoxwB,gBACpBpxwB,KAAKsxwB,oBACLtxwB,KAAKoxwB,eAAelvwB,QACpBlC,KAAKM,OAAO66H,eACP19H,EAAkBuC,KAAKM,OAAOwmB,aAAc,CACpB9mB,KAAKM,OAAOU,QAAQ2B,cAAc,oBACxC+B,MAAM4xC,QAAU,OAEvCt2C,KAAKM,OAAOkmB,QAAQ+rmB,IAAyBnmc,YAAa,aAAc27jB,WAAY,aAAc9nvB,KAAMA,IACxGD,KAAKM,OAAOkxwB,qBAEhBV,EAAWz1wB,UAAU21wB,iBAAmB,SAAU/wwB,GAC9CD,KAAKM,OAAO8kN,QAAS,EACrBplN,KAAKM,OAAOkmB,QAAQmpmB,IAAsBvjc,YAAa,UAAW27jB,WAAY,UAAW9nvB,KAAMA,IAC/F,IAAIwxwB,EAAWzxwB,KAAKg9nB,WAyBpB,GAxBAh9nB,KAAKM,OAAOyN,OAAO67uB,IACf7B,WAAY,UAAW1tc,WAAY,aACnCjlO,YAAap1E,KAAKM,OAAOusvB,yBAEzB7svB,KAAKM,OAAO+rvB,eAAe5stB,QAC3BgyuB,EAASp9vB,cAAc3P,MAAM4xC,QAAU,OACvCt2C,KAAKi2E,cAAc+mjB,WAAWt4nB,MAAM4xC,QAAU,QAC9Ct2C,KAAKi2E,cAAcwvqB,eAAezjvB,UAAYyvwB,EAASz0wB,QAGvDy0wB,EAAS/swB,MAAM4xC,QAAU,OACzBt2C,KAAKi2E,cAAcwvqB,eAAe/gvB,MAAM4xC,QAAU,QAClDt2C,KAAKi2E,cAAcwvqB,eAAezjvB,UAAYyvwB,EAASz0wB,OAE3DgD,KAAKM,OAAO8kN,QAAS,EACrBplN,KAAKM,OAAOksvB,kBAAkBxsvB,KAAKM,OAAOk0E,gBAAgB/Z,OACtDz6D,KAAKM,OAAOmrpB,cACZpnpB,GAAarE,KAAKM,OAAOmrpB,eAAgBmxF,KAE7C58uB,KAAKM,OAAO0/S,mBACZhgT,KAAKu3d,cACLv3d,KAAKqxwB,kBACLrxwB,KAAKi2E,cAAcwvqB,eAAevjvB,QAClClC,KAAKM,OAAO66H,eACP19H,EAAkBuC,KAAKM,OAAOwmB,cAAuE,IAAvD9mB,KAAKi2E,cAAcwvqB,eAAexqrB,UAAUx+D,OAAc,CAChFuD,KAAKM,OAAOU,QAAQ2B,cAAc,oBACxC+B,MAAM4xC,QAAU,QAEvCt2C,KAAKM,OAAOkmB,QAAQ+rmB,IAAyBnmc,YAAa,UAAW27jB,WAAY,UAAW9nvB,KAAMA,IAClGD,KAAKM,OAAOusY,UAAUmmX,WAAWhzvB,KAAKM,QACtCN,KAAKM,OAAOkxwB,qBAEhBV,EAAWz1wB,UAAU2hoB,SAAW,WAC5B,OAAOh9nB,KAAKM,OAAOU,QAAQ2B,cAAc,uBAM7CmuwB,EAAWz1wB,UAAUiX,QAAU,WAC3BtS,KAAKpD,uBAEFk0wB,KC3LAY,IACPhjuB,MACIlH,QAAS,QACTgsC,WAAY,OACZx2E,MAAO,UAEXu0C,QACI/J,QAAS,QACTgsC,WAAY,SACZx2E,MAAO,MAEXk4Q,WACI1tO,QAAS,QACTgsC,WAAY,YACZx2E,MAAO,QAEX20wB,eACInquB,QAAS,QACTgsC,WAAY,gBACZx2E,MAAO,QAEX2omB,aACIn+jB,QAAS,UACTgsC,WAAY,cACZx2E,MAAO,OAEX4omB,WACIp+jB,QAAS,UACTgsC,WAAY,YACZx2E,MAAO,OAEX4hvB,WACIp3sB,QAAS,SACTgsC,WAAY,aAEhBmrqB,WACIn3sB,QAAS,SACTgsC,WAAY,aAEhB82a,WACI9id,QAAS,OACTgsC,WAAY,YACZx2E,MAAO,WAEXowO,UACI5lM,QAAS,OACTgsC,WAAY,WACZx2E,MAAO,YAEX6vB,UACI2a,QAAS,OACTgsC,WAAY,WACZx2E,MAAO,QAEXm8mB,WACI3xkB,QAAS,OACTgsC,WAAY,kBACZx2E,MAAO,WAEXoivB,eACI53sB,QAAS,aACTgsC,WAAY,iBAEhB8rqB,aACI93sB,QAAS,aACTgsC,WAAY,eAEhB2rqB,aACI33sB,QAAS,aACTgsC,WAAY,eAEhB6rqB,cACI73sB,QAAS,aACTgsC,WAAY,gBAEhB0sW,MACI14Y,QAAS,UACTgsC,WAAY,QAEhB2sW,MACI34Y,QAAS,UACTgsC,WAAY,QAEhBisqB,YACIj4sB,QAAS,QACTgsC,WAAY,SAEhBixrB,aACIj9tB,QAAS,SACTgsC,WAAY,UAEhBo+rB,aACIpquB,QAAS,UACTxqC,MAAO,KAEX60wB,SACIrquB,QAAS,UACTxqC,MAAO,MAEXq8mB,QACI7xkB,QAAS,UACTgsC,WAAY,UAEhBqqqB,SACIr2sB,QAAS,UACTgsC,WAAY,WAEhBs+rB,YACItquB,QAAS,aACTgsC,WAAY,aACZx2E,MAAO,IAEXo/iB,YACI50gB,QAAS,aACTgsC,WAAY,aACZx2E,MAAO,IAEX+0wB,sBACIvquB,QAAS,aACTgsC,WAAY,aACZx2E,MAAO,SAEX6xjB,aACIrnhB,QAAS,aACTgsC,WAAY,aACZx2E,MAAO,UAEXg1wB,kBACIxquB,QAAS,aACTgsC,WAAY,aACZx2E,MAAO,SAEXi1wB,mBACIzquB,QAAS,UACTxqC,MAAO,MAEXk1wB,qBACI1quB,QAAS,UACTxqC,MAAO,MAEXgwjB,iBACIxlhB,QAAS,UACTxqC,MAAO,KAEXgpwB,cACIx+tB,QAAS,QACTgsC,WAAY,gBCnJhB8W,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAIrD2zoB,IAAmB,OAAQ,SAAU,YAAa,IAAK,UAAW,aACzE,cAAe,gBAAiB,IAAK,aAAc,QAAS,IAAK,aAAc,OAAQ,QAChFtjpB,KACLR,KAAM,WAAYzvB,MAAO,WAAYukI,MAAO,eAC5C90G,KAAM,QAASzvB,MAAO,6BAA8BukI,MAAO,YAC3D90G,KAAM,UAAWzvB,MAAO,gBAAiBukI,MAAO,cAChD90G,KAAM,SAAUzvB,MAAO,6BAA8BukI,MAAO,aAC5D90G,KAAM,SAAUzvB,MAAO,2BAA4BukI,MAAO,aAC1D90G,KAAM,kBAAmBzvB,MAAO,8BAA+BukI,MAAO,sBACtE90G,KAAM,UAAWzvB,MAAO,4BAA6BukI,MAAO,cAEvD10G,KACLJ,KAAM,OAAQzvB,MAAO,QACrByvB,KAAM,QAASzvB,MAAO,SACtByvB,KAAM,QAASzvB,MAAO,SACtByvB,KAAM,QAASzvB,MAAO,SACtByvB,KAAM,QAASzvB,MAAO,SACtByvB,KAAM,QAASzvB,MAAO,SACtByvB,KAAM,QAASzvB,MAAO,SAEjBiwvB,KACLxguB,KAAM,YAAazvB,MAAO,IAAKukI,MAAO,gBACtC90G,KAAM,OAAQzvB,MAAO,MAAOukI,MAAO,WACnC90G,KAAM,YAAazvB,MAAO,aAAcukI,MAAO,YAC/C90G,KAAM,YAAazvB,MAAO,KAAMukI,MAAO,SACvC90G,KAAM,YAAazvB,MAAO,KAAMukI,MAAO,SACvC90G,KAAM,YAAazvB,MAAO,KAAMukI,MAAO,SACvC90G,KAAM,YAAazvB,MAAO,KAAMukI,MAAO,SAElC+oX,IACP/6P,QACI,GAAI,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAC5F,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UACnG,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UACnG,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UACnG,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UACnG,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,YAGhG59L,IACP49L,QACI,GAAI,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAC5F,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UACnG,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UACnG,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UACnG,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UACnG,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,YAMvG4ihB,GAAiC,SAAUhnrB,GAE3C,SAASgnrB,IACL,OAAkB,OAAXhnrB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAc/D,OAhBAsqF,GAAU6nrB,EAAiBhnrB,GAI3BN,IACI3jF,GAAS,IACVirwB,EAAgB92wB,UAAW,cAAU,GACxCwvF,IACI3jF,GAAS,IACVirwB,EAAgB92wB,UAAW,sBAAkB,GAChDwvF,IACI3jF,EAAS61uB,GAAY9gH,SACtBk2I,EAAgB92wB,UAAW,YAAQ,GACtCwvF,IACI3jF,EAASqpqB,KACV4hG,EAAgB92wB,UAAW,aAAS,GAChC82wB,GACTnzsB,IAKEozsB,GAA+B,SAAUjnrB,GAEzC,SAASinrB,IACL,OAAkB,OAAXjnrB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAoB/D,OAtBAsqF,GAAU8nrB,EAAejnrB,GAIzBN,IACI3jF,GAAU,QAAS,OAAQ,UAC5BkrwB,EAAc/2wB,UAAW,oBAAgB,GAC5CwvF,IACI3jF,EAAS,WACVkrwB,EAAc/2wB,UAAW,eAAW,GACvCwvF,IACI3jF,EAAS,SACVkrwB,EAAc/2wB,UAAW,aAAS,GACrCwvF,IACI3jF,EAAS,SACVkrwB,EAAc/2wB,UAAW,cAAU,GACtCwvF,IACI3jF,EAAS,OACVkrwB,EAAc/2wB,UAAW,eAAW,GACvCwvF,IACI3jF,EAAS,OACVkrwB,EAAc/2wB,UAAW,YAAQ,GAC7B+2wB,GACTpzsB,IAKEqzsB,GAAsC,SAAUlnrB,GAEhD,SAASknrB,IACL,OAAkB,OAAXlnrB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAiB/D,OAnBAsqF,GAAU+nrB,EAAsBlnrB,GAIhCN,IACI3jF,GAAS,IACVmrwB,EAAqBh3wB,UAAW,cAAU,GAC7CwvF,IACI3jF,EAAS,SACVmrwB,EAAqBh3wB,UAAW,sBAAkB,GACrDwvF,IACI3jF,GAAU,OAAQ,OAAQ,YAC3BmrwB,EAAqBh3wB,UAAW,YAAQ,GAC3CwvF,IACI3jF,GAAU,UAAW,QAAS,UAAW,SAAU,IAAK,aAAc,gBAAiB,gBAAiB,kBAAmB,UAAW,UAAW,eAClJmrwB,EAAqBh3wB,UAAW,aAAS,GAC5CwvF,IACI3jF,GAAU,MAAO,OAAQ,WAC1BmrwB,EAAqBh3wB,UAAW,YAAQ,GACpCg3wB,GACTrzsB,IAKEszsB,GAA4B,SAAUnnrB,GAEtC,SAASmnrB,IACL,OAAkB,OAAXnnrB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbAsqF,GAAUgorB,EAAYnnrB,GAItBN,IACI3jF,EAAS,aACVorwB,EAAWj3wB,UAAW,eAAW,GACpCwvF,IACI3jF,EAAS,SACVorwB,EAAWj3wB,UAAW,aAAS,GAClCwvF,IACI3jF,EAAS+lB,KACVqlvB,EAAWj3wB,UAAW,aAAS,GAC3Bi3wB,GACTtzsB,IAKEuzsB,GAA0B,SAAUpnrB,GAEpC,SAASonrB,IACL,OAAkB,OAAXpnrB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbAsqF,GAAUiorB,EAAUpnrB,GAIpBN,IACI3jF,EAAS,UACVqrwB,EAASl3wB,UAAW,eAAW,GAClCwvF,IACI3jF,EAAS,SACVqrwB,EAASl3wB,UAAW,aAAS,GAChCwvF,IACI3jF,EAAS2lB,KACV0lvB,EAASl3wB,UAAW,aAAS,GACzBk3wB,GACTvzsB,IAKE06a,GAAwB,SAAUvuZ,GAElC,SAASuuZ,IACL,OAAkB,OAAXvuZ,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbAsqF,GAAUovZ,EAAQvuZ,GAIlBN,IACI3jF,EAAS,cACVwye,EAAOr+e,UAAW,eAAW,GAChCwvF,IACI3jF,EAAS,SACVwye,EAAOr+e,UAAW,aAAS,GAC9BwvF,IACI3jF,EAAS+lvB,KACVvzQ,EAAOr+e,UAAW,aAAS,GACvBq+e,GACT16a,IAKEwzsB,GAA2B,SAAUrnrB,GAErC,SAASqnrB,IACL,OAAkB,OAAXrnrB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAiB/D,OAnBAsqF,GAAUkorB,EAAWrnrB,GAIrBN,IACI3jF,EAAS,YACVsrwB,EAAUn3wB,UAAW,eAAW,GACnCwvF,IACI3jF,EAAS,YACVsrwB,EAAUn3wB,UAAW,YAAQ,GAChCwvF,IACI3jF,EAAS,KACVsrwB,EAAUn3wB,UAAW,eAAW,GACnCwvF,IACI3jF,EAASojf,KACVkoR,EAAUn3wB,UAAW,iBAAa,GACrCwvF,IACI3jF,GAAS,IACVsrwB,EAAUn3wB,UAAW,oBAAgB,GACjCm3wB,GACTxzsB,IAKEyzsB,GAAiC,SAAUtnrB,GAE3C,SAASsnrB,IACL,OAAkB,OAAXtnrB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAiB/D,OAnBAsqF,GAAUmorB,EAAiBtnrB,GAI3BN,IACI3jF,EAAS,YACVurwB,EAAgBp3wB,UAAW,eAAW,GACzCwvF,IACI3jF,EAAS,YACVurwB,EAAgBp3wB,UAAW,YAAQ,GACtCwvF,IACI3jF,EAAS,KACVurwB,EAAgBp3wB,UAAW,eAAW,GACzCwvF,IACI3jF,EAASyqD,KACV8gtB,EAAgBp3wB,UAAW,iBAAa,GAC3CwvF,IACI3jF,GAAS,IACVurwB,EAAgBp3wB,UAAW,oBAAgB,GACvCo3wB,GACTzzsB,IC/PEsrB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAM5D81uB,GAA2B,SAAUvnrB,GAErC,SAASunrB,IACL,OAAkB,OAAXvnrB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVAsqF,GAAUoorB,EAAWvnrB,GAIrBN,IACI3jF,OACDwrwB,EAAUr3wB,UAAW,cAAU,GAClCwvF,IACI3jF,OACDwrwB,EAAUr3wB,UAAW,eAAW,GAC5Bq3wB,GACT1zsB,IAKE2zsB,GAAgC,SAAUxnrB,GAE1C,SAASwnrB,IACL,OAAkB,OAAXxnrB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbAsqF,GAAUqorB,EAAgBxnrB,GAI1BN,IACI3jF,GAAS,IACVyrwB,EAAet3wB,UAAW,cAAU,GACvCwvF,IACI3jF,EAAS,OACVyrwB,EAAet3wB,UAAW,kBAAc,GAC3CwvF,IACI9iF,KAAY2qwB,KACbC,EAAet3wB,UAAW,iBAAa,GACnCs3wB,GACT3zsB,ICpDEsrB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAM5Dg2uB,GAA4B,SAAUznrB,GAEtC,SAASynrB,IACL,OAAkB,OAAXznrB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVAsqF,GAAUsorB,EAAYznrB,GAItBN,IACI3jF,GAAS,IACV0rwB,EAAWv3wB,UAAW,cAAU,GACnCwvF,IACI3jF,GAAS,IACV0rwB,EAAWv3wB,UAAW,mBAAe,GACjCu3wB,GACT5zsB,ICzBE6zsB,GAA4B,WAC5B,SAASA,EAAWvywB,GAChBN,KAAKM,OAASA,EACdN,KAAKtD,mBA0FT,OAxFAm2wB,EAAWx3wB,UAAU8svB,eAAiB,SAAU7rvB,GAC5C0D,KAAK8ywB,iBAAmBt5vB,GAAoBxZ,KAAKM,OAAOU,SACnDhB,KAAKM,OAAOU,QAAQ8C,UAAUK,SAAS4uwB,MACxC/ywB,KAAKM,OAAOkmB,QAAQmpmB,IAAsBvjc,YAAa,WAAY27jB,WAAY,WAAY9nvB,KAAM3D,IAC7F0D,KAAKM,OAAOk0E,gBAAgB0xqB,gBAAkBlmvB,KAAKM,OAAOk0E,gBAAgB/0C,SAC1Ez/B,KAAKM,OAAOulvB,oBAAoBnhvB,MAAMsR,MAAQ,OAC9ChW,KAAKM,OAAOulvB,oBAAoBnhvB,MAAMgI,IAAM,OAEhD1M,KAAKM,OAAOU,QAAQ8C,UAAUM,IAAI2uwB,IAClC/ywB,KAAKgzwB,sBAAqB,GAC1BhzwB,KAAKM,OAAO0/S,mBACRhgT,KAAKM,OAAOg/oB,gBACR9zoB,GAAQkb,UACR1mB,KAAKM,OAAOg/oB,cAAcqoG,uBAE9B3nvB,KAAKM,OAAOg/oB,cAAcjlW,YACtB0tc,WAAY,WACZ1tc,WAAY,WACZjlO,YAAap1E,KAAKM,OAAOusvB,0BAGjC7svB,KAAKM,OAAOkmB,QAAQ+rmB,IAAyBnmc,YAAa,WAAY27jB,WAAY,WAAY9nvB,KAAM3D,MAG5Gu2wB,EAAWx3wB,UAAUgtvB,eAAiB,SAAU/rvB,GACxC0D,KAAKM,OAAOU,QAAQ8C,UAAUK,SAAS4uwB,MACvC/ywB,KAAKM,OAAOU,QAAQ8C,UAAUS,OAAOwuwB,IACrC/ywB,KAAKM,OAAOkmB,QAAQmpmB,IAAsBvjc,YAAa,WAAY27jB,WAAY,WAAY9nvB,KAAM3D,IACjG0D,KAAKgzwB,sBAAqB,GAC1BhzwB,KAAKM,OAAO0/S,mBACRhgT,KAAKM,OAAOg/oB,gBACZt/oB,KAAKM,OAAOg/oB,cAAcjlW,YACtB0tc,WAAY,WACZ1tc,WAAY,WACZjlO,YAAap1E,KAAKM,OAAOusvB,yBAEzBrhvB,GAAQkb,UAAY1mB,KAAKM,OAAO8hvB,WAAW3itB,QAC3Cz/B,KAAKM,OAAOg/oB,cAAcinG,qBAGlCvmvB,KAAKM,OAAOkmB,QAAQ+rmB,IAAyBnmc,YAAa,WAAY27jB,WAAY,WAAY9nvB,KAAM3D,MAG5Gu2wB,EAAWx3wB,UAAU23wB,qBAAuB,SAAUnmd,GAClD,IAAIpvT,EAAkBuC,KAAK8ywB,kBAI3B,IAAK,IADDj5vB,EAAW,EAAU,SAAW,GAC3B1d,EAAI,EAAGA,EAAI6D,KAAK8ywB,iBAAiBr2wB,OAAQN,IACJ,cAAtC6D,KAAK8ywB,iBAAiB32wB,GAAG+V,SACzBjM,EAAkBR,EAAO,OAAQzF,KAAK8ywB,iBAAiB32wB,KACnD0d,SAAUA,IAId5T,EAAkBjG,KAAK8ywB,iBAAiB32wB,IACpC0d,SAAUA,KAK1Bg5vB,EAAWx3wB,UAAUooe,UAAY,SAAUnne,GACvC,IAAI4+G,EAAgB5+G,EAAM2D,KAC1B,OAAQi7G,EAAc/kD,QAClB,IAAK,cACDn2D,KAAKmovB,eAAe7rvB,EAAM2D,MAC1Bi7G,EAAc11F,iBACd,MACJ,IAAK,SACDxlB,KAAKqovB,eAAe/rvB,EAAM2D,MAC1Bi7G,EAAc11F,mBAI1BqtvB,EAAWx3wB,UAAUqB,iBAAmB,WACpCsD,KAAKM,OAAOslF,GAAGqpqB,GAAgBjvvB,KAAKyje,UAAWzje,MAC/CA,KAAKM,OAAOslF,GAAGguiB,GAAgB5znB,KAAKsS,QAAStS,OAEjD6ywB,EAAWx3wB,UAAUuB,oBAAsB,WACvCoD,KAAKM,OAAOslF,GAAGqpqB,GAAgBjvvB,KAAKyje,UAAWzje,MAC/CA,KAAKM,OAAO0lF,IAAI4tiB,GAAgB5znB,KAAKpD,sBAEzCi2wB,EAAWx3wB,UAAUiX,QAAU,WACvBtS,KAAKM,OAAOU,QAAQ8C,UAAUK,SAAS4uwB,KACvC/ywB,KAAKgzwB,sBAAqB,GAE9BhzwB,KAAKpD,uBAEFi2wB,KCpGPvorB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAoC5Dq2uB,GAAgC,SAAU9nrB,GAE1C,SAAS8nrB,EAAejgwB,EAAShS,GAC7B,IAAIjB,EAAQorF,EAAO7pF,KAAKtB,KAAMgT,EAAShS,IAAYhB,KAcnD,OAVAD,EAAMmzwB,YAAa,EAInBnzwB,EAAM2tvB,OAAQ,EAId3tvB,EAAMqlN,QAAS,EACfrlN,EAAMyrG,SAAU,EACTzrG,EAsjCX,OAtkCAuqF,GAAU2orB,EAAgB9nrB,GAuB1B8nrB,EAAe53wB,UAAUw1F,gBAAkB,WACvC,IAAIgB,KAwBJ,OAvBI7xF,KAAKw0E,gBAAgB/0C,SACrBoyD,EAAQrtF,MAAO6sF,OAAQ,UAAWpxF,MAAOD,KAAMA,KAAKshE,kBACpDuwB,EAAQrtF,MACJ6sF,OAAQ,OACRpxF,MAAOD,KAAMA,KAAKshE,kBAEtBuwB,EAAQrtF,MACJ6sF,OAAQ,QACRpxF,MAAOD,KAAMA,KAAKshE,mBAGtBthE,KAAKwvvB,eACL39pB,EAAQrtF,MAAO6sF,OAAQ,QAASpxF,MAAOD,KAAMA,KAAKshE,kBAE9B,aAApBthE,KAAKozvB,YACLvhqB,EAAQrtF,MAAO6sF,OAAQ,iBAAkBpxF,MAAOD,KAAMA,KAAKshE,kBAEvC,SAApBthE,KAAKozvB,YACLvhqB,EAAQrtF,MAAO6sF,OAAQ,aAAcpxF,MAAOD,KAAMA,KAAKshE,kBAEvDthE,KAAK+tvB,qBAAqBtutB,QAC1BoyD,EAAQrtF,MAAO6sF,OAAQ,eAAgBpxF,MAAOD,KAAMA,KAAKshE,kBAEtDuwB,GAEXohrB,EAAe53wB,UAAU83wB,aAAe,WAChCnzwB,KAAKilB,SACL5gB,GAAarE,KAAKgB,SpE7FJ,coE8FdhB,KAAKgB,QAAQioH,SAAW,EACxBjpH,KAAKgB,QAAQwC,aAAa,gBAAiB,SAC3CxD,KAAKg8D,aAAax4D,aAAa,WAAY,OAGvCxD,KAAKyrpB,cACLpnpB,EAAYrE,KAAKyrpB,aAAajqpB,iBAAiB,IAAM+yE,IAAqBA,IAE9E5wE,GAAU3D,KAAKgB,SpEtGD,coEuGdhB,KAAKgB,QAAQioH,UAAY,EACzBjpH,KAAKgB,QAAQwC,aAAa,gBAAiB,QAC3CxD,KAAKg8D,aAAax4D,aAAa,WAAY,QAGnDyvwB,EAAe53wB,UAAU+6E,UAAY,WACjCp2E,KAAKmzwB,eACJnzwB,KAAY,QAAIA,KAAK4qpB,mBAAqB5qpB,KAAKw+G,gBAMpDy0pB,EAAe53wB,UAAUoX,UAAY,WACjCzS,KAAKshE,eAAiB,IAAIw1V,GAC1B92Z,KAAKw9a,qBACLx9a,KAAKozwB,eACLntwB,EAAkBjG,KAAKgB,SAAWgV,MAASzT,EAAWvC,KAAKgW,SAC3DtS,EAAW1D,KAAKgB,SAAW4Q,KAAM,iBAErCqhwB,EAAe53wB,UAAU+3wB,aAAe,WAMpC,GALApzwB,KAAKqzwB,gBAAkBrzwB,KAAKgB,QAAQY,WAAU,GAC3B,OAAf5B,KAAKhD,OAAyC,OAAvBgD,KAAKk4d,gBAC5Bl4d,KAAK5C,WACL4C,KAAKgB,QAAQgB,UAAY,IAEA,aAAzBhC,KAAKgB,QAAQgC,QAAwB,CACrC,IAAIswwB,EAAmBnywB,EAAc,OACjCkC,UAAW,6BAA8BC,GAAItD,KAAK0jvB,UAEtD4vB,EAAiBtxwB,UAAYhC,KAAKgB,QAAQhE,MAC1CgD,KAAKgB,QAAQqT,cAAcnP,aAAaouwB,EAAkBtzwB,KAAKgB,SAC/DhB,KAAKu2E,eAAiBv2E,KAAKgB,QAC3BhB,KAAKu2E,eAAezyE,UAAUS,OAAO,YAAa,oBAClDvE,KAAKu2E,eAAejzE,GAAKtD,KAAK0jvB,QAAU,SACxC1jvB,KAAKgB,QAAUsywB,OAGftzwB,KAAKu2E,eAAiBp1E,EAAc,YAChCmC,GAAItD,KAAK0jvB,QAAU,WAG3B1jvB,KAAKu2E,eAAe9+C,KAAOz3B,KAAK0jvB,QAChC1jvB,KAAKu2E,eAAe7xE,MAAM4xC,QAAU,OACjB,OAAft2C,KAAKhD,QACLgD,KAAKu2E,eAAev5E,MAAQgD,KAAKhD,OAErCgD,KAAKgB,QAAQW,YAAY3B,KAAKu2E,iBAElC08rB,EAAe53wB,UAAUmxG,eAAiB,WACtC,OAAOxsG,KAAKgtG,cAAc,WAM9BimqB,EAAe53wB,UAAUo/H,QAAU,WAC/Bz6H,KAAKg8D,aAAa95D,SAMtB+wwB,EAAe53wB,UAAUq/H,SAAW,WAChC16H,KAAKg8D,aAAakxE,QAMtB+loB,EAAe53wB,UAAUuK,UAAY,WACjC5F,KAAK+N,OAAOqtvB,QAMhB6X,EAAe53wB,UAAUmjN,YAAc,SAAUzsL,GAC7C/xB,KAAK+N,OAAOw7vB,IAAsBx3uB,MAAOA,KAM7CkhvB,EAAe53wB,UAAUorhB,aAAe,WACpC,IAAIr3gB,EAAM,GAMV,OALApP,KAAK+N,OAAOstvB,IACRr+rB,SAAU,SAAU+jP,GAChB3xS,EAAM2xS,KAGP3xS,GAEX6jwB,EAAe53wB,UAAUk4wB,eAAiB,SAAUC,EAAax2wB,GAC7D,IAAIorD,EAAOsptB,GAAa8B,GACxBxzwB,KAAK6sY,UAAU27W,cAAczwM,YAAY3vf,EAAK5gB,QAAS4gB,EAAKorB,WAAaprB,EAAKorB,WAAcx2E,GAAgBorD,EAAKprD,MAAQ,KAAM,KAAOA,GAAgBorD,EAAKprD,MAASA,GAAgBorD,EAAKprD,QAE7Li2wB,EAAe53wB,UAAU8/N,OAAS,SAAUn+N,GACxC,IAAI6iE,EAAUr/D,SAASW,cAAc,OAErC,OADA0+D,EAAQ5E,UAAYj+D,EAAMkT,OACnB2vD,EAAQ79D,UAAUuN,QAAQ,iBAAkB,OAEvD0jwB,EAAe53wB,UAAUo4wB,OAAS,SAAUz2wB,GACxC,OAAOA,EAAMuS,QAAQ,SAAU,KAAKA,QAAQ,YAAa,KACpDA,QAAQ,QAAS,KAAKA,QAAQ,YAAa,KAC3CA,QAAQ,QAAS,KAAKA,QAAQ,UAAW,KACzCA,QAAQ,cAAe,KAAKA,QAAQ,UAAW,KAMxD0jwB,EAAe53wB,UAAU0wG,OAAS,WAC9B/rG,KAAK+ppB,aAAe,IAAIjrO,GAAO9+a,KAAMA,KAAKshE,gBAC1CthE,KAAK0zwB,iBAAmB,IAAI5C,GAAW9wwB,KAAMA,KAAKshE,gBAClDthE,KAAK+N,OAAO09nB,OACZzroB,KAAKwmB,QrEhOK,QqEiOVxmB,KAAK2zwB,YACqB,IAAIxhB,GAAoBnyvB,MAClDA,KAAK+N,OAAOgtoB,OACR/6oB,KAAKw0E,gBAAgB/0C,QAAwC,WAA9Bz/B,KAAKw0E,gBAAgB9tE,OAAsB+sE,EAAMzzE,KAAKyrpB,eACpFzrpB,KAAKw0E,gBAAgB/Z,MAAMl8D,QAAQ,SAAW,GAAKyB,KAAKw0E,gBAAgB/Z,MAAMl8D,QAAQ,SAAW,GAClGyB,KAAKusvB,oBAAoB,OAAQ,SAErCvsvB,KAAKggT,mBACJhgT,KAAKq2E,WAAar2E,KAAKilB,QAAWjlB,KAAKw+G,eAAiBx+G,KAAK4qpB,oBAMlEqoH,EAAe53wB,UAAUuvpB,iBAAmB,WACxC5qpB,KAAKukB,cAMT0uvB,EAAe53wB,UAAUkqH,QAAU,SAAU1kH,GAKzC,GAJAb,KAAK+N,OAAOkhvB,IAAkB59pB,OAAQ,UAAWpxF,KAAMY,IACN,IAA7Cb,KAAK6sY,UAAUkmX,mBAAmBt2vB,QAClCuD,KAAK6sY,UAAU7yH,WAEfn5Q,EAAEs1D,QAAsB,IAAZt1D,EAAE81G,MAEd,OADA32G,KAAK6sY,UAAU75T,QAAQhzE,KAAM,KAAMa,GAC3BA,EAAEs1D,QACN,IAAK,gBACD,GAAIn2D,KAAKw0E,gBAAgB/0C,OAAQ,CAE7Bz/B,KAAKs/oB,cAAclqkB,YAAYI,WAAWx0E,QAAQ2B,cADnC,4DAC2DT,QAE9E,MACJ,IAAK,SACDlC,KAAKi2E,cAAcwvqB,eAAevjvB,QAIzCuxE,EAAMzzE,KAAK8mB,cACZ9mB,KAAKy8D,kBAGbw2sB,EAAe53wB,UAAUuxI,MAAQ,SAAU/rI,GACvCb,KAAK+N,OrE/OM,SqE+OiBsjF,OAAQ,QAASpxF,KAAMY,IACnD,IAAI+ywB,EAA0B,KAAZ/ywB,EAAE81G,OAA4B,KAAZ91G,EAAE81G,OAA4B,IAAZ91G,EAAE81G,OAA2B,KAAZ91G,EAAE81G,QAClE91G,EAAE41G,WAAa51G,EAAEgnB,SAA6B,IAAjBhnB,EAAExD,IAAIZ,QAAgBm3wB,GAAqC,aAApB5zwB,KAAKozvB,cACtEvyvB,EAAE41G,WAAa51G,EAAEgnB,SAA6B,IAAjBhnB,EAAExD,IAAIZ,QAAgBm3wB,KAAkB5zwB,KAAKoivB,WAAW3itB,SAC3Fz/B,KAAK6sY,UAAUomX,aAAajzvB,KAAMa,GAElCb,KAAKg8D,cAAyD,IAAzCh8D,KAAKg8D,aAAangD,YAAYpf,QACnDuD,KAAK+N,OAAOm9nB,GAAuBrqoB,GAElC4yE,EAAMzzE,KAAK8mB,cACZ9mB,KAAKy8D,kBAGbw2sB,EAAe53wB,UAAU8/H,YAAc,SAAUn+H,GACzCy2E,EAAMz2E,GACNgD,KAAKgH,eAAgBhK,MAAOgD,KAAKg8D,aAAah6D,YAG9ChC,KAAKgH,eAAgBhK,MAAOA,KAGpCi2wB,EAAe53wB,UAAUw9Z,QAAU,SAAUh4Z,GACzCb,KAAK+N,OrEjQQ,WqEiQiBsjF,OAAQ,UAAWpxF,KAAMY,IACnDb,KAAKg8D,cAAyD,IAAzCh8D,KAAKg8D,aAAangD,YAAYpf,QACnDuD,KAAK+N,OAAOm9nB,GAAuBrqoB,IAM3CoywB,EAAe53wB,UAAUs5pB,qBAAuB,SAAUxjkB,GACtD,OAAOnxF,KAAKksG,qBAAqB3tG,QAAQ4yF,IAAW,GAExD8hrB,EAAe53wB,UAAU6uwB,OAAS,WAC9BlqwB,KAAKi2E,cAAcC,cAAc6he,YAAY,QAAQ,EAAO,OAEhEk7N,EAAe53wB,UAAU8uwB,MAAQ,WAC7BnqwB,KAAKi2E,cAAcC,cAAc6he,YAAY,OAAO,EAAO,OAE/Dk7N,EAAe53wB,UAAU4nhB,QAAU,SAAUpihB,GACzC,IAAId,EAAQC,KACRC,GAASmsL,YAAa,QAASgnkB,WAAYpzvB,KAAKozvB,WAAY92vB,MAAOuE,GACvEV,WAAW,WAAcJ,EAAM8sY,UAAU7yH,WAAYj6Q,EAAM8sY,UAAU7oT,UAAUjkF,EAAOE,IAAU,IAOpGgzwB,EAAe53wB,UAAUiX,QAAU,WAC/BtS,KAAK+N,OAAO6lnB,OACZ5znB,KAAKmkf,0BACLnkf,KAAKw+G,eACgC,aAAjCx+G,KAAKqzwB,gBAAgBrwwB,SACrBhD,KAAKgB,QAAQqT,cAAcnP,aAAalF,KAAKu2E,eAAgBv2E,KAAKgB,SAClEhB,KAAKu2E,eAAejzE,GAAKtD,KAAK0jvB,QAC9B1jvB,KAAKu2E,eAAe7qE,gBAAgB,QACpC1L,KAAKgB,QAAQuD,SACiC,KAA1CvE,KAAKqzwB,gBAAgBrxwB,UAAUkO,OAC/BlQ,KAAKu2E,eAAev5E,MAAQgD,KAAKqzwB,gBAAgBrxwB,UAAUkO,OAG3DlQ,KAAKu2E,eAAev5E,MAAQ,IAIc,KAA1CgD,KAAKqzwB,gBAAgBrxwB,UAAUkO,OAC/BlQ,KAAKgB,QAAQgB,UAAYhC,KAAKqzwB,gBAAgBrxwB,UAAUkO,OAGxDlQ,KAAKgB,QAAQgB,UAAY,GAG7BhC,KAAK8mB,aAAe9mB,KAAK6zwB,oBACzB7zwB,KAAK6zwB,mBAAmBtvwB,SAE5B4mF,EAAO9vF,UAAUiX,QAAQhR,KAAKtB,OAElCizwB,EAAe53wB,UAAU8of,wBAA0B,WAE/Cnkf,KAAK+ppB,aAAaz3oB,UAClBtS,KAAK6sY,UAAU27W,cAAcC,gBAAgBn2uB,UAC7CtS,KAAK0zwB,iBAAiBphwB,WAM1B2gwB,EAAe53wB,UAAUo5C,WAAa,WAClC,OAAOz0C,KAAKi2E,cAAc+mjB,YAO9Bi2I,EAAe53wB,UAAUsmH,WAAa,SAAU3gH,GAC5ChB,KAAKi2E,cAAciojB,SAASl9nB,IAMhCiywB,EAAe53wB,UAAUkkC,cAAgB,WACrC,MAAO,kBAMX0zuB,EAAe53wB,UAAUmsF,kBAAoB,SAAUiF,EAASC,GAC5D,IAAK,IAAItuF,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKmvF,GAAUruF,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC9D,IAAIkM,EAAOzH,EAAGzE,GACd,OAAQkM,GACJ,IAAK,QACDtK,KAAKhD,MAASgD,KAAqB,iBAAIA,KAAKm7N,OAAOn7N,KAAKyzwB,OAAOhnrB,EAAQniF,KAAUmiF,EAAQniF,GACzFtK,KAAK8zwB,mBACL9zwB,KAAKy8D,iBACL,MACJ,IAAK,QACDz8D,KAAK2+H,SAASlyC,EAAQniF,IACtB,MACJ,IAAK,SACDtK,KAAKkuT,UAAUzhO,EAAQniF,IACvB,MACJ,IAAK,WACDtK,KAAKs2E,cACL,MACJ,IAAK,WACDt2E,KAAKgB,QAAQ8C,UAAUS,OAAOmoF,EAAQpiF,IACtCtK,KAAKw1H,YAAY/oC,EAAQniF,IACzB,MACJ,IAAK,UACDtK,KAAKo2E,YACL,MACJ,IAAK,YACDp2E,KAAKwrpB,YACL,MACJ,IAAK,cACDxrpB,KAAK8mB,YAAc2lE,EAAQniF,GAC3BtK,KAAKy8D,iBACL,MACJ,IAAK,iBACDoZ,GAAc71E,KAAK81E,eAAgB91E,MAAM,GACzC,MACJ,IAAK,iBACD,IAAI+zwB,EAAernrB,EAAQpiF,GAC3B,GAAIypwB,EAAa3oiB,UAAW,CACxB,IACIxmJ,EADS5kF,KAAKi2E,cAAcC,cACZvzE,cAAc,QAC9B81I,OAAQ,EACRs7nB,EAAa3oiB,UAAU4oiB,UACvBv7nB,EAAQ7zD,EAAOpjF,iBAAiB,IAAMyywB,IACtCj0wB,KAAKk0wB,aAAaz7nB,IAElBs7nB,EAAa3oiB,UAAU7nO,SACvBk1I,EAAQ7zD,EAAOpjF,iBAAiB,IAAM2ywB,IACtCn0wB,KAAKk0wB,aAAaz7nB,IAG1Bz4I,KAAKo0wB,oBACL,MACJ,IAAK,SACDjprB,EAAO9vF,UAAU62D,QAAQ5wD,KAAKtB,MAC9B,MACJ,IAAK,aACDA,KAAK+N,OAAO29nB,IAAuBv6iB,OAAQ,iBAC3CnxF,KAAKggT,mBACL,MACJ,IAAK,kBACDhgT,KAAK+N,OAAO29nB,IAAuBv6iB,OAAQ,YAC3CnxF,KAAKggT,mBACL,MACJ,IAAK,gBACGvzN,EAAQniF,IAAStK,KAAKq0wB,YACtBr0wB,KAAKq0wB,YAAYllB,eAEM,IAAlB1iqB,EAAQniF,IAAmBtK,KAAKq0wB,aACrCr0wB,KAAKq0wB,YAAY/hwB,UAErB,MACJ,IAAK,mBACDtS,KAAKuxwB,kBACL,MACJ,QACIvxwB,KAAK+N,OAAO29nB,IAAuBj/iB,QAASA,EAASC,QAASA,OAQ9EumrB,EAAe53wB,UAAUk2wB,gBAAkB,WACnCvxwB,KAAKs0wB,iBACLt0wB,KAAKgH,eAAgBhK,MAAOgD,KAAKm7N,OAAOn7N,KAAKyzwB,OAAOzzwB,KAAKg8D,aAAah6D,cAGtEhC,KAAKgH,eAAgBhK,MAAOgD,KAAKyzwB,OAAOzzwB,KAAKg8D,aAAah6D,cAGlEixwB,EAAe53wB,UAAU64wB,aAAe,SAAUK,GAC9C,IAAIp4wB,EACJ,IAAKA,EAAI,EAAGA,EAAIo4wB,EAAQ93wB,OAAQN,IAC5Bo4wB,EAAQp4wB,GAAGoI,UAGnB0uwB,EAAe53wB,UAAUy4wB,iBAAmB,WACxC,IAAI92wB,EAEAA,EADoB,SAApBgD,KAAKozvB,YAAyBpzvB,KAAKhD,MAC3BgD,KAAKhD,MAAMuS,QAAQ,MAAO,IAAIA,QAAQ,cAAe,MAGrDvP,KAAKhD,OAEjBA,EAASgD,KAAKs0wB,kBAAoBt0wB,KAAKhD,MAASgD,KAAKyzwB,OAAOz2wB,GAASA,IAE7DgD,KAAKu2E,iBACLv2E,KAAKu2E,eAAev5E,MAASgD,KAAqB,iBAAIA,KAAKhD,MAAQA,GAEnEgD,KAAKg8D,cAAgBh8D,KAAKg8D,aAAah6D,UAAUkO,SAAWlT,EAAMkT,SAClElQ,KAAKg8D,aAAah6D,UAAYhF,KAIV,SAApBgD,KAAKozvB,aACLpzvB,KAAKg8D,aAAah6D,UAAY,gBAE9BhC,KAAKu2E,iBACLv2E,KAAKu2E,eAAev5E,MAAQ,MAIxCi2wB,EAAe53wB,UAAU6yT,UAAY,SAAUn4S,GAEvC/V,KAAKgB,QAAQ0D,MAAMqR,OADR,SAAXA,EAC4BxT,EAAWwT,GAGX,QAGpCk9vB,EAAe53wB,UAAUohE,eAAiB,WAClCz8D,KAAKg8D,cAAgBh8D,KAAK8mB,cAA8C,IAA/B9mB,KAAKqsvB,eAAe5stB,SACxDz/B,KAAK6zwB,qBACN7zwB,KAAK6zwB,mBAAqB1ywB,EAAc,QAAUkC,UAAW,oBACzDrD,KAAKg8D,cACLh8D,KAAKg8D,aAAa3nD,cAAcnP,aAAalF,KAAK6zwB,mBAAoB7zwB,KAAKg8D,cAE/Et4D,EAAW1D,KAAK6zwB,oBACZnvwB,MAAS,0EAGjB1E,KAAK6zwB,mBAAmB7xwB,UAAYhC,KAAK8mB,YACI,IAAzC9mB,KAAKg8D,aAAangD,YAAYpf,OAC9BuD,KAAK6zwB,mBAAmBnvwB,MAAM4xC,QAAU,OAGxCt2C,KAAK6zwB,mBAAmBnvwB,MAAM4xC,QAAU,UAIpD28tB,EAAe53wB,UAAUsjI,SAAW,SAAU3oH,GAC5B,SAAVA,EACA/P,EAAkBjG,KAAKgB,SAAWgV,MAASzT,EAAWvC,KAAKgW,SAG3DhW,KAAKgB,QAAQ0D,MAAMsR,MAAQ,QAGnCi9vB,EAAe53wB,UAAUm6H,YAAc,SAAUviH,GACxCwgE,EAAMxgE,IACPjT,KAAKgB,QAAQ8C,UAAUM,IAAI6O,IAGnCggwB,EAAe53wB,UAAUmwpB,UAAY,WAC7BxrpB,KAAKkT,UACLlT,KAAKgB,QAAQ8C,UAAUM,IpEjiBd,SoEoiBTpE,KAAKgB,QAAQ8C,UAAUS,OpEpiBd,UoEuiBjB0uwB,EAAe53wB,UAAUm5wB,eAAiB,WACd,aAApBx0wB,KAAKozvB,aACDpzvB,KAAKq2E,UACL3yE,EAAW1D,KAAKg8D,cAAgB8ssB,gBAAiB,UACjDnlwB,GAAU3D,KAAKgB,SpEvaD,oBoE0ad0C,EAAW1D,KAAKg8D,cAAgB8ssB,gBAAiB,SACjDzkwB,GAAarE,KAAKgB,SpE3aJ,qBoE+a1BiywB,EAAe53wB,UAAUi7E,YAAc,WACnCt2E,KAAKw0wB,iBACJx0wB,KAAa,SAAIA,KAAKw+G,eAAiBx+G,KAAK4qpB,oBAMjDqoH,EAAe53wB,UAAU0F,MAAQ,WAC7B,IAAIuvb,EACAmkV,GACAzzwB,QAAShB,KAAKg8D,aACdowH,YAAa,QACbvzJ,QAAQ,GAQZ,GANA74B,KAAKwmB,QAAQmpmB,GAAoB8kJ,GACjCnkV,EAAYz0b,OAAO6F,KAAK,GAAI,QAAS,UAAY7F,OAAOonH,YAAc,UAAYpnH,OAAOmnH,YAC/D,SAAtBx3G,GAAQmb,KAAK8Q,MACb64Z,EAAUz2G,SAASC,OAAOC,WAAYD,OAAOE,aAEjDs2G,EAAYrvb,EAAYjB,KAAKg8D,aAAcs0X,IACvCmkV,EAAU57uB,OAAd,CAMA74B,KAAKwmB,QAAQ+rmB,IAFTnmc,YAAa,YAQrB6mlB,EAAe53wB,UAAU62D,QAAU,WAC/BlyD,KAAK+ppB,aAAa73lB,WAKtB+gtB,EAAe53wB,UAAU8svB,eAAiB,WAClCnovB,KAAKq2E,UAGTr2E,KAAKkovB,iBAAiBC,kBAM1B8qB,EAAe53wB,UAAUmxvB,kBAAoB,SAAU/xrB,GACnDz6D,KAAKs/oB,cAAcipG,gBAAgBvovB,KAAK6svB,uBAAwBpyrB,GAAO,IAM3Ew4sB,EAAe53wB,UAAUkxvB,mBAAqB,SAAU9xrB,GACpDz6D,KAAKs/oB,cAAcipG,gBAAgBvovB,KAAK6svB,uBAAwBpyrB,GAAO,IAM3Ew4sB,EAAe53wB,UAAUq5wB,kBAAoB,SAAUj6sB,GACnDz6D,KAAKs/oB,cAAcqpG,gBAAgBlurB,IAMvCw4sB,EAAe53wB,UAAUszvB,SAAW,WAChC,OAAO3uvB,KAAK6sY,UAAU27W,cAAcyV,cAActP,SAAS3uvB,KAAKi2E,cAAcC,gBAElF+8rB,EAAe53wB,UAAUmib,mBAAqB,WAC1Cx9a,KAAKshE,eAAe01V,SAAS,kBAAmB,IAAIu1O,IACpDvsoB,KAAKshE,eAAe01V,SAAS,YAAah3Z,KAAK04E,UAAY,IAAI8+B,GAAKx3G,KAAKu/B,gBAAiBo+Y,GAAe39a,KAAKgO,UAElHilwB,EAAe53wB,UAAUs4wB,UAAY,WACjC,IAAIzhH,EAAkBlypB,KAAKshE,eAAeE,WAAW,mBACrDxhE,KAAKi2E,cAAgBi8kB,EAAgBjpB,YAAYnb,GAAWqb,SAC5DnpoB,KAAKkovB,iBAAmB,IAAI2qB,GAAW7ywB,MACvCA,KAAK+ppB,aAAah+iB,SAClB/rG,KAAKg8D,aAAeh8D,KAAKi2E,cAAcwvqB,eACvCzlvB,KAAKkuT,UAAUluT,KAAK+V,QACpB8/D,GAAc71E,KAAK81E,eAAgB91E,MAAM,GACrCA,KAAKqsvB,gBACLrsvB,KAAKo0wB,oBAETp0wB,KAAKw1H,YAAYx1H,KAAKiT,UACtBjT,KAAKmzwB,eACLnzwB,KAAKy8D,iBACLz8D,KAAKwrpB,YACLxrpB,KAAKw0wB,iBACLx0wB,KAAK8zwB,mBACD9zwB,KAAKs0wB,kBACLt0wB,KAAKgH,eAAgBhK,MAAOgD,KAAKm7N,OAAOn7N,KAAKyzwB,OAAOzzwB,KAAKhD,WAGjEi2wB,EAAe53wB,UAAU+4wB,kBAAoB,WACzC,GAAIp0wB,KAAKqsvB,eAAejhhB,UAAW,CAC/B,IAAIupiB,EAAW30wB,KAAKqsvB,eAAejhhB,UAAU7nO,OACzCqxwB,EAAY50wB,KAAKqsvB,eAAejhhB,UAAU4oiB,QAC1Ch0wB,KAAKqsvB,eAAejhhB,UAAU4oiB,QAAQv3wB,OAAS,GAC/CuD,KAAK60wB,aAAY,EAAMD,GAEvB50wB,KAAKqsvB,eAAejhhB,UAAU7nO,OAAO9G,OAAS,GAC9CuD,KAAK60wB,aAAY,EAAOF,GAG5B30wB,KAAKqsvB,eAAe3ovB,YACpBmyE,GAAc71E,KAAKqsvB,eAAe3ovB,WAAY1D,MAAM,IAG5DizwB,EAAe53wB,UAAUw5wB,YAAc,SAAUC,EAAaP,GAC1D,IACI,GAAIA,GAAWA,EAAQ93wB,OAAS,EAG5B,IAAK,IADD0K,EADSnH,KAAKi2E,cAAcC,cACZvzE,cAAc,QACzBxG,EAAI,EAAGA,EAAIo4wB,EAAQ93wB,OAAQN,IAChC,GAAI24wB,EAAa,CACb,IAAIC,EAAY/0wB,KAAKg1wB,sBACrBD,EAAUz1wB,IAAMi1wB,EAAQp4wB,GACxBgL,EAAOxF,YAAYozwB,OAElB,CACD,IAAIE,EAAWj1wB,KAAKk1wB,qBACpBD,EAASvmvB,KAAO6lvB,EAAQp4wB,GACxBgL,EAAOxF,YAAYszwB,IAKnC,MAAOp0wB,GACH,SAGRoywB,EAAe53wB,UAAU25wB,oBAAsB,WAC3C,IAAID,EAAY5zwB,EAAc,UAC1BkC,UAAW4wwB,KAGf,OADAc,EAAUruwB,KAAO,kBACVquwB,GAEX9B,EAAe53wB,UAAU65wB,mBAAqB,WAC1C,IAAID,EAAW9zwB,EAAc,QACzBkC,UAAW8wwB,KAGf,OADAc,EAASE,IAAM,aACRF,GAEXhC,EAAe53wB,UAAU+B,SAAW,WAChC,GAAI4C,KAAKk4d,cACL,GAAkC,iBAAvBl4d,KAAKk4d,cACZl4d,KAAKgH,eAAgBhK,MAAOgD,KAAKk4d,oBAEhC,CAID,IAAK,IADDk9S,EADapmwB,GAAQhP,KAAKk4d,cACPvjb,KACdx4C,EAAI,EAAGA,EAAIi5wB,EAAiB34wB,OAAQN,IAAK,CAE9CiJ,GADWgwwB,EAAiBj5wB,IACb6D,KAAKgB,SAExBhB,KAAKgH,eAAgBhK,MAAOgD,KAAKgB,QAAQgB,UAAUkO,aAGhB,KAAlClQ,KAAKgB,QAAQgB,UAAUkO,QAC5BlQ,KAAKgH,eAAgBhK,MAAOgD,KAAKgB,QAAQgB,UAAUkO,UAG3D+iwB,EAAe53wB,UAAU2kT,iBAAmB,SAAU74S,EAAQgzS,GAC1D,IAAIk7d,EACAjppB,EAAW,EACXizL,EAAUr/S,KAAK0zwB,iBAAiB12I,YACiC,UAAjEh9nB,KAAK0zwB,iBAAiB12I,WAAW3onB,cAAc3P,MAAM4xC,QAAuBt2C,KAAK0zwB,iBAAiB12I,WAAW3onB,cAC7GrU,KAAKi2E,cAAc+mjB,WACnBs4I,EAAYt1wB,KAAKgB,QAAQ0wC,aACzBu1sB,EAAWjnvB,KAAKyrpB,aAAezrpB,KAAKs/oB,cAAc4nG,mBAAqB,EACvEquB,EAAkBv1wB,KAAKyrpB,aAAezrpB,KAAKs/oB,cAAc6nG,yBAA2B,EAcxF,GAbInnvB,KAAKw0E,gBAAgB9tE,OAASq2uB,GAAY9gH,QAAU9hV,GAAuB,YAAXhzS,GAChEkuwB,EAA+B,SAAhBr1wB,KAAK+V,OAAqB,OAASu/vB,GAAaruB,EAAWsuB,GAAmB,KAC7FnppB,EAAapsH,KAAKw0E,gBAAgB0xqB,eAAoC,EAAlBqvB,GAIhDF,EADgB,SAAhBr1wB,KAAK+V,OACU/V,KAAKgB,QAAQ8C,UAAUK,SAAS,qBAAwB,OAAS,OAGlEmxwB,EAAYruB,EAAW,KAG7ChhvB,EAAkBo5S,GAAUtpS,OAAQs/vB,EAAatptB,UAAWqgE,EAAW,OACnEpsH,KAAKqsvB,eAAe5stB,QAAqB,eAAXt4B,EAAyB,CAEvDlB,EADkBR,EAAO,iBAA+BzF,KAAKgB,UAC5B+U,OAAQs/vB,EAAatptB,UAAWqgE,EAAW,OAE5EpsH,KAAKw0E,gBAAgB0xqB,gBAAkBlmvB,KAAKyrpB,eAAiBzrpB,KAAKoivB,WAAW3itB,QAEzEx5B,EAAkBjG,KAAKyrpB,aAAap3oB,cADpC8lS,GACqDpkS,OAASkxuB,EAAWsuB,EAAmB,OAGvCx/vB,OAAQkxuB,EAAW,QAQpFgsB,EAAe53wB,UAAUm6wB,QAAU,WAC/B,OAAOx1wB,KAAKhD,OAMhBi2wB,EAAe53wB,UAAUo6wB,eAAiB,WAClCz1wB,KAAKq2E,UAGTr2E,KAAK+N,OAAO2hvB,QAKhBujB,EAAe53wB,UAAUwxvB,qBAAuB,WAQ5C,OANI7svB,KAAKoivB,WAAW3itB,SAAWj0B,GAAQkb,SAC3B1mB,KAAKwtvB,oBAAsBxtvB,KAAKwtvB,mBAAmBuB,uBAGnD/uvB,KAAKs/oB,eAAiBt/oB,KAAKs/oB,cAAcgpG,kBAOzD2qB,EAAe53wB,UAAUowpB,WAAa,WAClC,OAAOzrpB,KAAKs/oB,cAAgBt/oB,KAAKs/oB,cAAcumG,oBAAsB,MAKzEotB,EAAe53wB,UAAUwqvB,kBAAoB,WACzC,OAAO7lvB,KAAKs/oB,eAAiBt/oB,KAAKs/oB,cAAcumG,qBAEpDotB,EAAe53wB,UAAUqovB,MAAQ,WAC7B,OAAO1jvB,KAAKgB,QAAQsC,IAExB2vwB,EAAe53wB,UAAUwkH,iBAAmB,SAAUh/G,GAClD8C,GAAU3D,KAAKgB,UpExuBA,coEyuBfhB,KAAK01wB,qBAAqB70wB,GAC1Bb,KAAK+N,OAAOg8uB,QAEhBkpB,EAAe53wB,UAAUs6wB,iBAAmB,SAAU90wB,GACJ,QAA1CA,EAAEsG,OAAO+K,SAASqpD,qBAClB16D,EAAE2kB,kBAGVytvB,EAAe53wB,UAAUq6wB,qBAAuB,SAAU70wB,GAC5B,SAAtB2K,GAAQmb,KAAK8Q,KACbz3B,KAAKi2E,cAAcwvqB,eAAe/ovB,iBAAiB,kBAAmBsD,KAAK21wB,kBAEhD,YAAtBnqwB,GAAQmb,KAAK8Q,OAClBz3B,KAAKi2E,cAAcC,cAAc6he,YAAY,wBAAwB,EAAO,SAC5E/3iB,KAAKi2E,cAAcC,cAAc6he,YAAY,4BAA4B,EAAO,WAGxFk7N,EAAe53wB,UAAUu6wB,cAAgB,SAAU/0wB,GACrB,SAAtB2K,GAAQmb,KAAK8Q,KACbz3B,KAAKi2E,cAAcwvqB,eAAe7ovB,oBAAoB,kBAAmBoD,KAAK21wB,kBAEnD,YAAtBnqwB,GAAQmb,KAAK8Q,OAClBz3B,KAAKi2E,cAAcC,cAAc6he,YAAY,wBAAwB,EAAM,QAC3E/3iB,KAAKi2E,cAAcC,cAAc6he,YAAY,4BAA4B,EAAM,UAGvFk7N,EAAe53wB,UAAUw6wB,cAAgB,WACrC,IAAI17d,EAAYn6S,KAAKw0E,gBAAgB9tE,OAASq2uB,GAAY9gH,OAC1Dj8nB,KAAKggT,iBAAiB,GAAI7F,IAE9B84d,EAAe53wB,UAAUk0H,cAAgB,SAAU1uH,GAC/Cb,KAAK+N,OrEhtBO,UqEgtBiB9N,KAAMY,KAEvCoywB,EAAe53wB,UAAUmvwB,qBAAuB,SAAU3pwB,GACtDb,KAAK+N,OAAOw8vB,IAAwBl5qB,OAAQ,gBAAiBpxF,KAAMY,KAEvEoywB,EAAe53wB,UAAUgkH,aAAe,SAAUx+G,GACzCb,KAAK0tvB,QAAS1tvB,KAAKkzwB,aACpBlzwB,KAAK0tvB,OAAQ1tvB,KAAKkzwB,WAClBlzwB,KAAKkzwB,YAAa,EAClBvvwB,GAAU3D,KAAKgB,UpEjxBJ,coEkxBa,SAApBhB,KAAKozvB,WACLpzvB,KAAK81wB,WAA8C,gBAAhC91wB,KAAKg8D,aAAah6D,UAA+B,KAAOhC,KAAKg8D,aAAah6D,UAG7FhC,KAAK81wB,WAAyC,KAA5B91wB,KAAKg8D,aAAah/D,MAAe,KAC/CgD,KAAKg8D,aAAah/D,MAEtBwD,SAASmlH,gBAAkB3lH,KAAKgB,SAChChB,KAAKi2E,cAAcwvqB,eAAevjvB,QAEtClC,KAAK01wB,qBAAqB70wB,GAC1Bb,KAAKwmB,QAAQ,SACbjhB,GAAanB,IAAI5D,SAAU,YAAaR,KAAKw3d,gBAAiBx3d,QAGtEizwB,EAAe53wB,UAAUm8d,gBAAkB,SAAU32d,GACjD,IAAIsG,EAAStG,EAAEsG,OACVnH,KAAKgB,QAAQmD,SAAStD,EAAEsG,SAAW3G,WAAaK,EAAEsG,QAAWtB,EAAQsB,EAAQ,sBAC7EtB,EAAQsB,EAAQ,IAAM2jvB,MACvB9qvB,KAAKolN,QAAS,EACdplN,KAAK0tvB,OAAQ,IAGrBulB,EAAe53wB,UAAU2xN,YAAc,SAAUnsN,GAC7C,IAAIohT,EAAMphT,EAAEisI,cACRm1K,IACIp8S,EAAQo8S,EAAK,qBACbjiT,KAAKolN,QAAS,EAETv/M,EAAQo8S,EAAK,IAAM6oc,IACxB9qvB,KAAKolN,QAAS,GAGdplN,KAAKolN,QAAS,EACd68F,EAAM,OAGVjiT,KAAKolN,QAAU3xI,EAAMwuO,IACrB59S,GAAarE,KAAKgB,UpExzBP,coEyzBXhB,KAAK+N,OAAO+7uB,OACY,SAApB9pvB,KAAKozvB,WACLpzvB,KAAKhD,MAAyC,gBAAhCgD,KAAKg8D,aAAah6D,UAA+B,KAAOhC,KAAKg8D,aAAah6D,UAGxFhC,KAAKhD,MAAoC,KAA5BgD,KAAKg8D,aAAah/D,MAAe,KAC1CgD,KAAKg8D,aAAah/D,MAE1BgD,KAAKu2E,eAAev5E,MAAQgD,KAAKhD,MACjCgD,KAAKwxwB,oBACLxxwB,KAAKkzwB,YAAa,EAClBlzwB,KAAKolN,QAAS,EACdzxM,GAAc3T,KAAKu2E,eAAgB,YACnCv2E,KAAK41wB,cAAc/0wB,GACnBb,KAAKwmB,QAAQ,QACbjhB,GAAahB,OAAO/D,SAAU,YAAaR,KAAKw3d,kBAGhDx3d,KAAK0tvB,OAAQ,GAGrBulB,EAAe53wB,UAAUm2wB,kBAAoB,WACzC,IAAIjkwB,GACAvQ,MAAOgD,KAAKhD,OAEZgD,KAAKhD,QAAUgD,KAAK81wB,aACpB91wB,KAAKwmB,QAAQ,SAAUjZ,GACvBvN,KAAK81wB,WAAa91wB,KAAKhD,QAM/Bi2wB,EAAe53wB,UAAU4uvB,yBAA2B,WAChDjqvB,KAAK+1wB,qBAAuBv8vB,GAAoBxZ,KAAKgB,SACrD,IAAK,IAAI5C,EAAK,EAAGyE,EAAK7C,KAAK+1wB,qBAAsB33wB,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACnE,IAAI4C,EAAU6B,EAAGzE,GACjBmH,GAAanB,IAAIpD,EAAS,SAAUhB,KAAKuvH,cAAevvH,QAMhEizwB,EAAe53wB,UAAU6tvB,2BAA6B,WAClDlpvB,KAAK+1wB,qBAAuBv8vB,GAAoBxZ,KAAKgB,SACrD,IAAK,IAAI5C,EAAK,EAAGyE,EAAK7C,KAAK+1wB,qBAAsB33wB,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACnE,IAAI4C,EAAU6B,EAAGzE,GACjBmH,GAAahB,OAAOvD,EAAS,SAAUhB,KAAKuvH,iBAGpD0jpB,EAAe53wB,UAAUkqB,aAAe,WACpCvlB,KAAKhD,MAAQ,MAEjBi2wB,EAAe53wB,UAAUkpB,WAAa,WAClCvkB,KAAK+5I,eAAiB,IAAI3jC,GAAep2G,KAAKg8D,cAC1Ck7C,UAAWl3G,KAAKulH,QAAQjqH,KAAK0E,MAAO42G,WAAY52G,KAAK6sY,UAAUk5W,UAAWl2qB,UAAW,YAEzF,IAAIkiE,EAAclsI,EAAQ7F,KAAKu2E,eAAgB,QAC3Cw7D,GACAxsI,GAAanB,IAAI2tI,EAAa,QAAS/xI,KAAKulB,aAAcvlB,MAE9DuF,GAAanB,IAAIpE,KAAKg8D,aAAc,QAASh8D,KAAK4sI,MAAO5sI,MACzDuF,GAAanB,IAAIpE,KAAKg8D,aAAc,QAASh8D,KAAKijhB,QAASjjhB,MAC3DuF,GAAanB,IAAIpE,KAAKg8D,aAAc,UAAWh8D,KAAK64Z,QAAS74Z,MAC7DuF,GAAanB,IAAIpE,KAAKg8D,aAAc,YAAah8D,KAAK6/G,iBAAkB7/G,MACxEuF,GAAanB,IAAIpE,KAAKg8D,aAAc,QAASh8D,KAAKwqwB,qBAAsBxqwB,MACxEA,KAAK6sY,UAAU27W,cAAc3xE,SAASjxlB,GAAGqrrB,GAA2BjxwB,KAAKw6vB,cAAex6vB,MACxFA,KAAKgB,QAAQtE,iBAAiB,UAAWsD,KAAKq/G,aAAa/jH,KAAK0E,OAAO,GACvEA,KAAKgB,QAAQtE,iBAAiB,WAAYsD,KAAKgtN,YAAY1xN,KAAK0E,OAAO,GACvEnE,OAAOa,iBAAiB,SAAUsD,KAAK61wB,cAAcv6wB,KAAK0E,OAAO,GAC7DA,KAAKqsvB,eAAe5stB,SACpBl6B,GAAanB,IAAIpE,KAAKg8D,aAAc,UAAWh8D,KAAKq/G,aAAcr/G,MAClEuF,GAAanB,IAAIpE,KAAKg8D,aAAc,WAAYh8D,KAAKgtN,YAAahtN,MAClEuF,GAAanB,IAAIpE,KAAKg8D,aAAalnD,cAAe,YAAa9U,KAAKklvB,kBAAmBllvB,OAE3FA,KAAKiqvB,4BAETgpB,EAAe53wB,UAAU6pvB,kBAAoB,SAAUrkvB,GACnDb,KAAKolN,QAAS,EACdplN,KAAK+N,OAAOk3uB,GAAwBpkvB,IAExCoywB,EAAe53wB,UAAUm/vB,cAAgB,SAAU35vB,GAC/C,OAAQA,EAAEvE,MAAM65D,QACZ,IAAK,OACDn2D,KAAKkqwB,SACL,MACJ,IAAK,MACDlqwB,KAAKmqwB,SAGTtpwB,EAAEm8D,UAAgC,SAAnBn8D,EAAEvE,MAAM65D,QAAwC,QAAnBt1D,EAAEvE,MAAM65D,QACpDt1D,EAAEm8D,UACEovH,YAAavrL,EAAEvE,MAAM65D,OACrBi9rB,WAAY,OACZ92vB,MAAOuE,EAAEvE,SAIrB22wB,EAAe53wB,UAAUmjH,aAAe,WAChCx+G,KAAK+5I,gBACL/5I,KAAK+5I,eAAeznI,UAExB,IAAIy/H,EAAclsI,EAAQ7F,KAAKu2E,eAAgB,QAC3Cw7D,GACAxsI,GAAahB,OAAOwtI,EAAa,QAAS/xI,KAAKulB,cAEnDhgB,GAAahB,OAAOvE,KAAKg8D,aAAc,QAASh8D,KAAK4sI,OACrDrnI,GAAahB,OAAOvE,KAAKg8D,aAAc,QAASh8D,KAAKijhB,SACrD19gB,GAAahB,OAAOvE,KAAKg8D,aAAc,UAAWh8D,KAAK64Z,SACvDtzZ,GAAahB,OAAOvE,KAAKg8D,aAAc,YAAah8D,KAAK6/G,kBACzDt6G,GAAahB,OAAOvE,KAAKg8D,aAAc,QAASh8D,KAAKwqwB,sBACjDxqwB,KAAK6sY,WACL7sY,KAAK6sY,UAAU27W,cAAc3xE,SAAS7wlB,IAAIirrB,GAA2BjxwB,KAAKw6vB,eAE9Ex6vB,KAAKgB,QAAQpE,oBAAoB,UAAWoD,KAAKq/G,aAAa/jH,KAAK0E,OAAO,GAC1EA,KAAKgB,QAAQpE,oBAAoB,WAAYoD,KAAKgtN,YAAY1xN,KAAK0E,OAAO,GAC1EnE,OAAOe,oBAAoB,SAAUoD,KAAK61wB,cAAcv6wB,KAAK0E,OAAO,GAChEA,KAAKqsvB,eAAe5stB,SACpBl6B,GAAahB,OAAOvE,KAAKg8D,aAAc,UAAWh8D,KAAKq/G,cACvD95G,GAAahB,OAAOvE,KAAKg8D,aAAc,WAAYh8D,KAAKgtN,aACxDznN,GAAahB,OAAOvE,KAAKg8D,aAAalnD,cAAe,YAAa9U,KAAKklvB,oBAE3EllvB,KAAKkpvB,8BAETr+pB,IACI9iF,KAAYoqwB,KACbc,EAAe53wB,UAAW,uBAAmB,GAChDwvF,IACI9iF,KAAYsqwB,KACbY,EAAe53wB,UAAW,4BAAwB,GACrDwvF,IACI9iF,KAAY4qwB,KACbM,EAAe53wB,UAAW,sBAAkB,GAC/CwvF,IACI9iF,KAAYqqwB,KACba,EAAe53wB,UAAW,2BAAuB,GACpDwvF,IACI3jF,EAAS,IACV+rwB,EAAe53wB,UAAW,6BAAyB,GACtDwvF,IACI9iF,KAAY6qwB,KACbK,EAAe53wB,UAAW,kBAAc,GAC3CwvF,IACI3jF,EAAS,SACV+rwB,EAAe53wB,UAAW,aAAS,GACtCwvF,IACI3jF,GAAS,IACV+rwB,EAAe53wB,UAAW,yBAAqB,GAClDwvF,IACI3jF,GAAS,IACV+rwB,EAAe53wB,UAAW,iBAAa,GAC1CwvF,IACI3jF,OACD+rwB,EAAe53wB,UAAW,sBAAkB,GAC/CwvF,IACI3jF,EAAS,OACV+rwB,EAAe53wB,UAAW,mBAAe,GAC5CwvF,IACI3jF,GAAS,IACV+rwB,EAAe53wB,UAAW,gBAAY,GACzCwvF,IACI3jF,GAAS,IACV+rwB,EAAe53wB,UAAW,eAAW,GACxCwvF,IACI3jF,GAAS,IACV+rwB,EAAe53wB,UAAW,wBAAoB,GACjDwvF,IACI3jF,EAAS,SACV+rwB,EAAe53wB,UAAW,cAAU,GACvCwvF,IACI3jF,EAAS,OACV+rwB,EAAe53wB,UAAW,gBAAY,GACzCwvF,IACI3jF,EAAS,OACV+rwB,EAAe53wB,UAAW,aAAS,GACtCwvF,IACI3jF,EAAS,KACV+rwB,EAAe53wB,UAAW,qBAAiB,GAC9CwvF,IACI3jF,EAAS,MACV+rwB,EAAe53wB,UAAW,qBAAiB,GAC9CwvF,IACI3jF,EAAS,SACV+rwB,EAAe53wB,UAAW,kBAAc,GAC3CwvF,IACI3jF,EAAS,OACV+rwB,EAAe53wB,UAAW,iBAAa,GAC1CwvF,IACI3jF,GAAS,IACV+rwB,EAAe53wB,UAAW,qBAAiB,GAC9CwvF,IACI3jF,GAAS,IACV+rwB,EAAe53wB,UAAW,oBAAgB,GAC7CwvF,IACI3jF,GAAU,IACX+rwB,EAAe53wB,UAAW,iBAAa,GAC1CwvF,IACI9iF,KAAY2xe,KACbu5R,EAAe53wB,UAAW,cAAU,GACvCwvF,IACI9iF,KAAYuqwB,KACbW,EAAe53wB,UAAW,kBAAc,GAC3CwvF,IACI9iF,KAAYwqwB,KACbU,EAAe53wB,UAAW,gBAAY,GACzCwvF,IACI9iF,KAAYyqwB,KACbS,EAAe53wB,UAAW,iBAAa,GAC1CwvF,IACI9iF,KAAY0qwB,KACbQ,EAAe53wB,UAAW,uBAAmB,GAChDwvF,IACI3jF,EAAS,OACV+rwB,EAAe53wB,UAAW,qBAAiB,GAC9CwvF,IACI/hF,KACDmqwB,EAAe53wB,UAAW,mBAAe,GAC5CwvF,IACI/hF,KACDmqwB,EAAe53wB,UAAW,sBAAkB,GAC/CwvF,IACI/hF,KACDmqwB,EAAe53wB,UAAW,eAAW,GACxCwvF,IACI/hF,KACDmqwB,EAAe53wB,UAAW,iBAAa,GAC1CwvF,IACI/hF,KACDmqwB,EAAe53wB,UAAW,YAAQ,GACrCwvF,IACI/hF,KACDmqwB,EAAe53wB,UAAW,oBAAgB,GAC7CwvF,IACI/hF,KACDmqwB,EAAe53wB,UAAW,aAAS,GACtCwvF,IACI/hF,KACDmqwB,EAAe53wB,UAAW,cAAU,GACvCwvF,IACI3jF,EAAS,OACV+rwB,EAAe53wB,UAAW,iBAAa,GAC1C43wB,EAAiBporB,IACbzhF,GACD6pwB,IAEL1nqB,ICznCFyqqB,GAAqB5pqB,OAAQurlB,GAAcs+E,GAAWC,GAAYC,GAAYC,GAAmBC,GAAiBC,QhrBulB9Gv8rB,GAEAJ,GACAF,sc0mB1lBiB,mBAEE,eAEL,gPA+BC,2BAIE,yBAEO,wMAkBV,YAEA,4BAIE,kBAEE,oBAEA,0DAMK,0BAEJ,6EAQA,yBAEC,2BAEC,2BAED,oBAEC,8CAMA,sBAEC,iEAQD,mGAUN,qBAEO,2BAED,0EAQL,wLkC7HF,4CAQO,0BAIA,kEAkBD,glBd/BF,iBAIF,sDAYG,qCAQH,UmD1BTmppB,GAAY,YAIZl6G,GAAc,cAEdC,GAAiB,iBAEjB34J,GAAgB,gBAEhBumT,GAAa,aAEbC,GAAa,aAEbC,GAAa,aAEbC,GAAgB,gBAMhBvse,GAAY,YASZogV,GAAY,aAEZC,GAAe,gBAIfmsJ,GAAiB,mBAEjBlsJ,GAAW,YAEXmsJ,GAAgB,iBAEhBC,GAAgB,kBAEhBC,GAAe,iBlrB7Cf1/rB,GAAa,MAmFpBxX,GAAc,KmrB7EPotD,GAAO,UAIP+ppB,GAAgB,YAEhBC,GAAwB,oBAIxBC,GAAqB,kBAMrBC,GAAmB,gBAEnBC,GAAsB,kBAEtBC,GAAmB,eAEnBC,GAAmB,eAEnBjtpB,GAAa,eAEbktpB,GAAyB,qBAEzBC,GAA8B,0BAE9BC,GAAqB,iBAQrBC,GAAoB,iBAEpBC,GAAsB,kBAEtBC,GAAuB,mBAIvBC,GAAkB,cAkBlBC,GAAoB,gBAQpBC,GAA4B,wBAM5BC,GAA6B,wCAI7BC,GAA0B,8BAE1BC,GAAsB,kBAEtBC,GAAyB,qBAEzBC,GAA0B,sBAE1BC,GAA8B,0BAE9BC,GAAoB,gBAEpBC,GAAqB,uBAErBC,GAAsB,wBAQtBC,GAAmB,eAEnBC,GAAoB,gBAEpBC,GAAqB,iBAErBC,GAAqB,iBAIrBC,GAAuB,8BAUvBC,GAAiB,aAMjBC,GAAsB,cAkBtBC,GAA8B,0BAE9BC,GAAwB,cAUxBC,GAA8B,oBAE9BC,GAAmC,yBAInCC,GAAmC,gCAMnCC,GAA0B,sBAE1BC,GAAmC,gCAEnCC,GAA+B,uBAE/BC,GAAiC,yBAEjCC,GAAuB,mBAYvBC,GAAqB,iBAErBC,GAA4B,wBAI5BC,GAAqB,iBAErBC,GAA0B,sBAI1BC,GAAkC,kBAElCC,GAAqB,iBAErBC,GAAmB,eAEnBC,GAAqB,iBAErBC,GAAgB,kBAEhBC,GAA2B,uBAE3BC,GAAyB,qBAIzBC,GAA+B,2BAI/BC,GAA+B,gBAE/BC,GAAyB,qBAEzBC,GAA2B,uBAE3BC,GAA2B,6BAM3BC,GAAgC,4BAEhCC,GAAiC,6BAEjCC,GAA4B,wBAE5BC,GAA4B,wBAE5BC,GAA+B,2BAE/BC,GAA4B,oBAI5BC,GAAa,kBAIbC,GAA6B,YAE7BC,GAAkB,cAYlBC,GAAgB,YAEhBC,GAAiB,aAQjBC,GAA2B,UAM3BC,GAAoB,gBAQpBC,GAA8B,oBAE9BC,GAA4B,kBAM5BC,GAAmC,iBAcnCC,GAAkB,cAElBC,GAAe,WAIfC,GAAc,UAEdC,GAAmB,eAInBC,GAA2B,2BAU3BC,GAAsB,wBAQtBC,GAAuB,yBAIvBC,GAA8B,gCAE9BC,GAAsB,wBC9V7BC,GAAgC,WAIhC,SAASA,EAAe57wB,GACpBN,KAAKM,OAASA,EACdN,KAAKqlH,KAAOrlH,KAAKM,OAAOo4E,UACxB14E,KAAK4/S,eACL5/S,KAAKtD,mBA0XT,OAxXAw/wB,EAAe7gxB,UAAUqB,iBAAmB,WACxCsD,KAAKM,OAAOslF,GAAGu2rB,GAAsBn8wB,KAAKo8wB,iBAAkBp8wB,OAEhEk8wB,EAAe7gxB,UAAUuB,oBAAsB,WAC3CoD,KAAKM,OAAO0lF,IAAIm2rB,GAAsBn8wB,KAAKo8wB,mBAE/CF,EAAe7gxB,UAAU+gxB,iBAAmB,SAAUv7wB,GAE7CpD,EADYoI,EAAQhF,EAAEvE,MAAM6K,OAAQ,sDAIzCnH,KAAKq8wB,mBAGTH,EAAe7gxB,UAAUghxB,gBAAkB,WACnCr8wB,KAAKs8wB,aACLt8wB,KAAKs8wB,YAAY/6rB,QAGzB26rB,EAAe7gxB,UAAUukT,aAAe,WACpC5/S,KAAKgB,QAAUG,EAAc,OAASkC,UD8Cf,iCC7CvB,IAAIk5wB,EAAap7wB,EAAc,OAASkC,UDiDpB,uBChDpBrD,KAAKgB,QAAQW,YAAY46wB,GACzBv8wB,KAAKM,OAAOU,QAAQkE,aAAalF,KAAKgB,QAAShB,KAAKM,OAAOU,QAAQmE,mBACnEnF,KAAKgivB,iBAETk6B,EAAe7gxB,UAAU2mvB,cAAgB,WACrC,IACI/hvB,GAASmsL,YAAa,uBAAwB3xH,MADtCz6D,KAAK2yO,YAEjB3yO,KAAKM,OAAOkmB,QAAQmpmB,GAAoB1vnB,GACxCD,KAAKw1E,WAAa,IAAI00N,IAClBzvO,MAAOx6D,EAAKw6D,MACZywO,aAAc,QACdsV,QAASxgT,KAAK6wqB,oBAAoBv1qB,KAAK0E,MACvCkT,UAAWlT,KAAKM,OAAO4S,UACvBlF,OAAQhO,KAAKM,OAAO0N,SAExBhO,KAAKw1E,WAAWn/B,SAASr2C,KAAKM,OAAOU,QAAQ2B,cAAc,wBAC3D,IAAI65wB,EAAax8wB,KAAKw1E,WAAWx0E,QAAQ2B,cAAc,WACnD65wB,GACAA,EAAW5/vB,WAAWpZ,aAAa,QAASxD,KAAKqlH,KAAKtxC,YAAY,aAEtE,IAAI0osB,EAAaz8wB,KAAKw1E,WAAWx0E,QAAQ2B,cAAc,WACnD85wB,GACAA,EAAW7/vB,WAAWpZ,aAAa,QAASxD,KAAKqlH,KAAKtxC,YAAY,SAEtE/zE,KAAK08wB,mBACL18wB,KAAKM,OAAOkmB,QAAQ+rmB,IAAyBnmc,YAAa,sBAAuB3xH,MAAOz6D,KAAKw1E,WAAW/a,SAE5GyhtB,EAAe7gxB,UAAUshxB,YAAc,WACnC,GAAI38wB,KAAKw1E,WAAY,CACjB,IACIv1E,GAASmsL,YAAa,uBAAwB3xH,MADtCz6D,KAAK2yO,YAEjB3yO,KAAKM,OAAOkmB,QAAQmpmB,GAAoB1vnB,GACxCD,KAAKw1E,WAAW/a,MAAQx6D,EAAKw6D,MAC7Bz6D,KAAKw1E,WAAW5pB,WAChB5rD,KAAKM,OAAOkmB,QAAQ+rmB,IAChBnmc,YAAa,sBACb3xH,MAAOz6D,KAAKw1E,WAAW/a,UAInCyhtB,EAAe7gxB,UAAUuhxB,wBAA0B,WAC/C,OAAI58wB,KAAKM,OAAOg/tB,WACLt/tB,KAAKw1E,WAAWx0E,QAEpBhB,KAAKgB,QAAQ2B,cAAc,kBAEtCu5wB,EAAe7gxB,UAAUwhxB,aAAe,SAAU5qwB,GAC1CjS,KAAK88wB,iBACL98wB,KAAK88wB,eAAepmsB,eAAiBzkE,EACrCjS,KAAK88wB,eAAelxtB,aAG5BswtB,EAAe7gxB,UAAU0hxB,gBAAkB,SAAUpmsB,GAC7C32E,KAAK88wB,iBACL98wB,KAAK88wB,eAAe9/wB,MAAQ25E,EAC5B32E,KAAK88wB,eAAelxtB,aAG5BswtB,EAAe7gxB,UAAU2hxB,gBAAkB,WACvC,MAAgC,UAA5Bh9wB,KAAKM,OAAOotM,aAAuD,gBAA5B1tM,KAAKM,OAAOotM,YAC5C,OAEJ,SAEXwukB,EAAe7gxB,UAAU4hxB,gBAAkB,WACvC,GAAIj9wB,KAAK88wB,eAAgB,CACrB,IAAII,EAAel9wB,KAAKg9wB,kBACxBh9wB,KAAK88wB,eAAenvkB,MAAQuvkB,EAC5Bl9wB,KAAK88wB,eAAev/wB,MAAQ2/wB,EAC5Bl9wB,KAAK88wB,eAAe5qtB,YAG5BgqtB,EAAe7gxB,UAAU8hxB,OAAS,SAAUrnpB,GACpC91H,KAAKs8wB,cACLt8wB,KAAKs8wB,YAAYppwB,UAAY4iH,EAC7B91H,KAAKs8wB,YAAY1wtB,YAEjB5rD,KAAK88wB,iBACL98wB,KAAK88wB,eAAe5pwB,UAAY4iH,EAChC91H,KAAK88wB,eAAelxtB,YAExB5rD,KAAKw1E,WAAWtiE,UAAY4iH,EAC5B91H,KAAKw1E,WAAW5pB,YAEpBswtB,EAAe7gxB,UAAUqhxB,iBAAmB,WACxC,IAAIzwpB,EAASjsH,KAAKw1E,WAAWx0E,QAAQQ,iBAAiB,YACtD6C,EAAY4nH,GAAS,kBACjBA,EAAOxvH,OAAS,GAAKwvH,EAAOjsH,KAAKM,OAAO88wB,YACxCz5wB,GAAUsoH,EAAOjsH,KAAKM,OAAO88wB,aAAc,mBAGnDlB,EAAe7gxB,UAAUgixB,gBAAkB,SAAU5wvB,QACpC,IAATA,IAAmBA,EAAOzsB,KAAKs9wB,oBACnC,IAAIrxpB,EAASjsH,KAAKw1E,WAAWx0E,QAAQ2B,cAAc,iBAC/CspH,IACAA,EAAOzoH,aAAa,aAAcipB,GAClCw/F,EAAOtpH,cAAc,oBAAoBX,UAAYyqB,EACrDzsB,KAAKw1E,WAAW24N,oBAGxB+te,EAAe7gxB,UAAUiixB,iBAAmB,WACxC,OAAOt9wB,KAAKM,OAAO4qM,UAAUlgG,WAAWhrG,KAAKM,OAAO0tM,cAAgBhyK,OAAQ,YAEhFkgvB,EAAe7gxB,UAAUs3O,SAAW,WAChC,IAAIl4K,KACA8itB,EAAcv9wB,KAAKM,OAAOg/tB,WAkC9B,GAjCA7kqB,EAAMj2D,MACF2vD,MAAO,OAAQogP,WAAY,cAAeE,YAAa,WAAY56R,SAAU,OAC7E5G,SAAU,SAAU6iE,gBAAkB49C,aAAc,qBAExDj5D,EAAMj2D,MACF2vD,MAAO,OAAQogP,WAAY,cAAeE,YAAa,OAAQ56R,SAAU,OACzE5G,SAAU,SAAU6iE,gBAAkB49C,aAAc,iBAExDj5D,EAAMj2D,MACF2vD,MAAO,OAAQ1nC,KAAMzsB,KAAKs9wB,mBAAoB9oe,WAAY,oBAAqBvhS,SAAU,eACzF4G,SAAU,OAAQi8D,gBAAkBm2H,cAAe,OAAQ/oL,YAAa,YAAawwG,aAAc,WAEnG1zH,KAAKM,OAAOg/tB,YACZ7kqB,EAAMj2D,MACF2vD,MAAO,QAASw+O,kBAAmB4qe,EAAahpe,WAAY,aAAc9nR,KAAMzsB,KAAKqlH,KAAKtxC,YAAY,YACtG9gE,SAAU,QAAS4G,SAAU,SAEjC4gD,EAAMj2D,MACF2vD,MAAO,QAASw+O,kBAAmB4qe,EAAahpe,WAAY,eAAgB9nR,KAAMzsB,KAAKqlH,KAAKtxC,YAAY,SACxG9gE,SAAU,UAAW4G,SAAU,WAInC4gD,EAAMj2D,MACF2vD,MAAO,QAASw+O,kBAAmB4qe,EAAahpe,WAAY,aAAc9nR,KAAMzsB,KAAKqlH,KAAKtxC,YAAY,SACtG9gE,SAAU,UAAW4G,SAAU,SAE/B7Z,KAAKM,OAAO2xD,MAAMx1D,OAAS,GAC3Bg+D,EAAMj2D,MACF2vD,MAAO,QAASztD,KAAM,YAAauM,SAAU,0BAIrDjT,KAAKM,OAAO2xD,MAAMx1D,OAAS,EAC3B,IAAK,IAAI2B,EAAK,EAAGyE,EAAK7C,KAAKM,OAAO2xD,MAAO7zD,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC3D,IAAIyf,EAAOhb,EAAGzE,GACI,mBAAWq8D,EAAMj2D,KAAKxE,KAAKoxqB,cAAcvzpB,EAAKjI,cAAe,OAC3E6kD,EAAMj2D,KAAKxE,KAAKoxqB,cAAcvzpB,EAAKk4E,OAAOngF,cAAeiI,EAAK0kF,cAG1E,OAAO9nC,GAEXyhtB,EAAe7gxB,UAAU+1qB,cAAgB,SAAUosG,EAAUj7qB,GACzD,IAAI+4F,EACAiilB,EAAcv9wB,KAAKM,OAAOg/tB,WAC9B,OAAQk+C,GACJ,IAAK,MACDlilB,GACInnI,MAAO,QAASw+O,kBAAmB4qe,EAAahpe,WAAY,aAC5D9nR,KAAM81E,GAAeviG,KAAKqlH,KAAKtxC,YAAY,OAAQ9gE,SAAU,iBAEjE,MACJ,IAAK,OACDqoL,GACInnI,MAAO,QAASw+O,kBAAmB4qe,EAAahpe,WAAY,cAC5D9nR,KAAM81E,GAAeviG,KAAKqlH,KAAKtxC,YAAY,QAAS9gE,SAAU,kBAElE,MACJ,IAAK,WACDqoL,GACInnI,MAAO,QAASw+O,kBAAmB4qe,EAAahpe,WAAY,kBAC5D9nR,KAAM81E,GAAeviG,KAAKqlH,KAAKtxC,YAAY,YAAa9gE,SAAU,uBAEtE,MACJ,IAAK,QACDqoL,GACInnI,MAAO,QAASw+O,kBAAmB4qe,EAAahpe,WAAY,eAC5D9nR,KAAM81E,GAAeviG,KAAKqlH,KAAKtxC,YAAY,SAAU9gE,SAAU,mBAEnE,MACJ,IAAK,SACDqoL,GACInnI,MAAO,QAASw+O,kBAAmB4qe,EAAahpe,WAAY,gBAAiB9nR,KAAMzsB,KAAKqlH,KAAKtxC,YAAY,UACzG9gE,SAAU,oBAEd,MAaJ,IAAK,cACDqoL,GACInnI,MAAO,QAASw+O,kBAAmB4qe,EAAahpe,WAAY,sBAC5D9nR,KAAMzsB,KAAKqlH,KAAKtxC,YAAY,eAAgB9gE,SAAU,0BAIlE,OAAOqoL,GAEX4glB,EAAe7gxB,UAAUoixB,kBAAoB,WACzC,IAAIC,EAAiBv8wB,EAAc,OAASkC,UDhOpB,mBCiOpBs6wB,EAAoBx8wB,EAAc,OAASkC,UD/NpB,sBCgO3Bq6wB,EAAe/7wB,YAAYg8wB,GAC3B39wB,KAAKgB,QAAQW,YAAY+7wB,GACzB19wB,KAAKs8wB,YAAc,IAAI96pB,GAAMk8pB,GACzB97pB,eAAgB,OAChB6B,WAAY,WACZrB,SAAUpiH,KAAK48wB,0BACf1owB,UAAYkC,EAAG,OAAQC,EAAG,UAC1BnD,UAAWlT,KAAKM,OAAO4S,YAE3B,IAAIgqwB,EAAel9wB,KAAKg9wB,kBACxBh9wB,KAAK88wB,eAAiB,IAAItpkB,IACtBx2M,MAAOgD,KAAKM,OAAO0tM,aACnBt3H,eAAgB12E,KAAKM,OAAOo2E,eAC5BxjE,UAAWlT,KAAKM,OAAO4S,UACvBlF,OAAQhO,KAAKM,OAAO0N,OACpB2/L,MAAOuvkB,EACP3/wB,MAAO2/wB,EACP98vB,OAAQpgB,KAAK49wB,eAAetixB,KAAK0E,QAErCA,KAAK88wB,eAAezmuB,SAASsnuB,GAC7B39wB,KAAKs8wB,YAAY/6rB,QAErB26rB,EAAe7gxB,UAAUuixB,eAAiB,SAAU39wB,GAC5CA,EAAKjD,MAAMijB,YAAcjgB,KAAKM,OAAO0tM,aAAa/tL,WAClDjgB,KAAKM,OAAOu9wB,WAAW59wB,EAAKjD,OAEhCgD,KAAKs8wB,YAAY/6rB,QAErB26rB,EAAe7gxB,UAAUyixB,mBAAqB,SAAU79wB,GACpD,IAAIkH,EAAStB,EAAQ5F,EAAKi7G,cAAc/zG,OAAQ,YAEhD,SADe9F,MAAMC,KAAKtB,KAAKgB,QAAQQ,iBAAiB,aAC3CjD,QAAQ4I,IAEzB+0wB,EAAe7gxB,UAAUw1qB,oBAAsB,SAAU5wqB,GACrD,GAAKA,EAAK4d,KAAV,CAIA,OADe5d,EAAK4d,KAAK5K,SAAS1D,QAAQ,WAAY,KAElD,IAAK,eACIvP,KAAKs8wB,aACNt8wB,KAAKy9wB,oBAELz9wB,KAAKs8wB,YAAYt7wB,QAAQ8C,UAAUK,SAAS45wB,IAC5C/9wB,KAAKs8wB,YAAY/6rB,OAGjBvhF,KAAKs8wB,YAAYr4pB,OAErB,MACJ,IAAK,QACDjkH,KAAKM,OAAO09wB,WAAW,MAAO/9wB,EAAKi7G,mBAAe//G,EAAW6E,KAAK89wB,mBAAmB79wB,IACrF,MACJ,IAAK,SACDD,KAAKM,OAAO09wB,WAAW,OAAQ/9wB,EAAKi7G,mBAAe//G,EAAW6E,KAAK89wB,mBAAmB79wB,IACtF,MACJ,IAAK,cACDD,KAAKM,OAAO09wB,WAAW,WAAY/9wB,EAAKi7G,mBAAe//G,EAAW6E,KAAK89wB,mBAAmB79wB,IAC1F,MACJ,IAAK,UACDD,KAAKM,OAAO09wB,WAAW,QAAS/9wB,EAAKi7G,mBAAe//G,EAAW6E,KAAK89wB,mBAAmB79wB,IACvF,MACJ,IAAK,WACDD,KAAKM,OAAO09wB,WAAW,SAAU/9wB,EAAKi7G,mBAAe//G,EAAW6E,KAAK89wB,mBAAmB79wB,IACxF,MAOJ,IAAK,iBACDD,KAAKM,OAAO09wB,WAAW,cAAe/9wB,EAAKi7G,mBAAe//G,EAAW6E,KAAK89wB,mBAAmB79wB,IAC7F,MACJ,IAAK,UACID,KAAKM,OAAO29wB,eAAeC,GAAe,IAAIl+vB,QAC/ChgB,KAAKM,OAAOu9wB,WAAWK,GAAe,IAAIl+vB,MAAS/f,EAAKi7G,eAE5D,MACJ,IAAK,SACDl7G,KAAKM,OAAOu9wB,WAAW79wB,KAAKM,OAAO69wB,WAAWC,oBAAoB,YAAan+wB,EAAKi7G,eACpF,MACJ,IAAK,SACDl7G,KAAKM,OAAOu9wB,WAAW79wB,KAAKM,OAAO69wB,WAAWC,oBAAoB,QAASn+wB,EAAKi7G,eAChF,MACJ,IAAK,QACD,IAAI1+G,OAAO,EACX,GAAIwD,KAAKM,OAAO+9wB,gBACZ7hxB,EAAOwD,KAAKM,OAAO+9wB,oBAElB,CACD,IAEIC,EprBhVG,IorB8UQt+wB,KAAKM,OAAOi+wB,kBAAkBC,UAAUr8wB,SACvCnC,KAAKM,OAAOi+wB,kBAAkBC,UAAUC,UAEpDv+vB,EAAY,IAAIF,KAAKhgB,KAAKM,OAAO0tM,aAAa/tL,WAClDC,EAAUukD,UAAS,IAAIzkD,MAAOomD,WAAa/5D,KAAKoxB,MAAMvd,EAAUomD,aAAeg4sB,GAAcA,EAAa,GAE1G9hxB,EAAOkC,GAASwhB,UAAWA,EAAWouM,QADxB,IAAItuM,KAAK,IAAIA,KAAKE,EAAUD,WAAW4oF,gBAAgB3oF,EAAUsvL,kBAAoB8ukB,IAC3CI,UAAU,IAAW7lvB,QAAQ,EAAOv8B,MAAO2D,EAAKi7G,gBAE5Gl7G,KAAKM,OAAOq+wB,YAAYC,WAAWpixB,EAAM,OAGjD,IAAIqixB,EAAe7+wB,KAAKw1E,WAAWx0E,QAAQ2B,cAAc,kBACrDk8wB,GACAA,EAAan3rB,cAAc,GAAGnG,MAAO9pD,KAAM,UAAWvsB,SAAU,QAGxEgxwB,EAAe7gxB,UAAUyjxB,iBAAmB,WACxC,OAAO9+wB,KAAKgB,SAEhBk7wB,EAAe7gxB,UAAU0jxB,kBAAoB,SAAUC,GACnD,IAAIxC,EAAax8wB,KAAKw1E,WAAWx0E,QAAQ2B,cAAc,WACnD85wB,EAAaz8wB,KAAKw1E,WAAWx0E,QAAQ2B,cAAc,WACnDs8wB,EAAej/wB,KAAKw1E,WAAWx0E,QAAQ2B,cAAc,iBACrD65wB,IACe,QAAdwC,EAAuBr7wB,GAAU64wB,GAAa0C,IAA2B76wB,GAAam4wB,GAAa0C,KAEpGzC,IACe,QAAduC,EAAuBr7wB,GAAU84wB,GAAayC,IAA2B76wB,GAAao4wB,GAAayC,KAEpGD,IACe,QAAdD,EAAuBr7wB,GAAUs7wB,GDnOd,gBCmOuD56wB,GAAa46wB,GDnOpE,kBCyO5B/C,EAAe7gxB,UAAUkkC,cAAgB,WACrC,MAAO,aAOX28uB,EAAe7gxB,UAAUiX,QAAU,WAC3BtS,KAAKs8wB,aACLt8wB,KAAKs8wB,YAAYhqwB,UAEjBtS,KAAK88wB,gBACL98wB,KAAK88wB,eAAexqwB,UAEnBtS,KAAKw1E,WAAWwR,cACjBhnF,KAAKw1E,WAAWljE,UAChBtS,KAAKpD,sBACL2H,EAAOvE,KAAKgB,WAGbk7wB,KCvYPh9H,GAAwB,WAKxB,SAASA,EAAO5+oB,GACZN,KAAKM,OAASA,EACdN,KAAKtD,mBA4DT,OAtDAwipB,EAAO7jpB,UAAUkkC,cAAgB,WAC7B,MAAO,UAKX2/mB,EAAO7jpB,UAAUsjI,SAAW,WACxB3+H,KAAKM,OAAOU,QAAQ0D,MAAMsR,MAAQzT,EAAWvC,KAAKM,OAAO0V,QAK7DkpoB,EAAO7jpB,UAAU6yT,UAAY,WACzBluT,KAAKM,OAAOU,QAAQ0D,MAAMqR,OAASxT,EAAWvC,KAAKM,OAAOyV,SAK9DmpoB,EAAO7jpB,UAAUqB,iBAAmB,WAChCsD,KAAKM,OAAOslF,GAAG4kiB,GAAcxqnB,KAAKm/wB,cAAen/wB,MACjDA,KAAKM,OAAOslF,GAAG6kiB,GAAUzqnB,KAAKwnF,kBAAmBxnF,OAKrDk/oB,EAAO7jpB,UAAUuB,oBAAsB,WACnCoD,KAAKM,OAAO0lF,IAAIwkiB,GAAcxqnB,KAAKm/wB,eACnCn/wB,KAAKM,OAAO0lF,IAAIykiB,GAAUzqnB,KAAKwnF,oBAEnC03jB,EAAO7jpB,UAAU8jxB,cAAgB,WAC7Bn/wB,KAAK2+H,WACL3+H,KAAKkuT,YACL,IACI1xT,GAAS4ixB,cADEp/wB,KAAK4/oB,iBAAiB5/oB,KAAKM,OAAO4S,WACXi+E,OAAQnxF,KAAKu/B,iBACnDv/B,KAAKM,OAAOyN,OAAO4owB,GAAgBn6wB,IAKvC0ipB,EAAO7jpB,UAAUukpB,iBAAmB,SAAU1soB,GAC1C,IAAIssS,KAGJ,OAFAA,EAAIl7Q,OAASpxB,EAAY,kBAAoB,mBAC7CssS,EAAIpmP,QAAUlmD,EAAY,cAAgB,eACnCssS,GAEX0/V,EAAO7jpB,UAAUmsF,kBAAoB,SAAU3mF,GAC3Cb,KAAKm/wB,iBAKTjgI,EAAO7jpB,UAAUiX,QAAU,WACvBtS,KAAKpD,uBAEFsipB,KCjEPmgI,GAA+B,WAC/B,SAASA,EAAc/+wB,GACnBN,KAAKM,OAASA,EACdN,KAAKgB,QAAUhB,KAAKM,OAAOU,QAAQ2B,cAAc,IAAM28wB,IACvDt/wB,KAAK82uB,SAAW,IAAIj9nB,GAAM75G,KAAKgB,SAC3BslM,OAAQtmM,KAAKuvH,cAAcj0H,KAAK0E,MAChCwhM,MAAOxhM,KAAKukT,aAAajpT,KAAK0E,MAC9B4vH,QAAS5vH,KAAKutH,eAAejyH,KAAK0E,MAClCk8G,eAAiBC,uBAAwB,KAE7C52G,GAAanB,IAAIpE,KAAKgB,QAAS,gBAAiBhB,KAAKu/wB,gBAAiBv/wB,MACtEA,KAAKw/wB,mBAAqBx/wB,KAAKM,OAAO4S,UAAY,QAAU,OAC5DlT,KAAKy/wB,oBAAsBz/wB,KAAKM,OAAO4S,UAAY,OAAS,QA8MhE,OA5MAmswB,EAAchkxB,UAAUk0H,cAAgB,SAAU1uH,GAC9C,GAAgC,WAA5Bb,KAAKM,OAAOotM,eACX7sM,EAAEq6G,eAAkBz9G,EAAkBoI,EAAQhF,EAAEq6G,cAAc/zG,OAAQ,IAAMu4wB,MADjF,CAUA,GANK1/wB,KAAK2/wB,iBACN3/wB,KAAK2/wB,eAAiB3/vB,KAAKusE,OAE3BvsF,KAAKgB,QAAQ8C,UAAUK,SAASy7wB,KAChC5/wB,KAAKu/wB,kBAEiB,SAAtB1+wB,EAAEw6G,iBAAoD,UAAtBx6G,EAAEw6G,gBAA6B,CAC/D,IAAIp7G,GAASmsL,YAAa,eAAgBvzJ,QAAQ,EAAOv8B,MAAOuE,EAAEq6G,eAElE,GADAl7G,KAAKM,OAAOkmB,QAAQmpmB,GAAoB1vnB,GACpCA,EAAK44B,OACL,OAEJ,IAAIquQ,EAAYlnS,KAAKgB,QAAQ2B,cAAc,IAAMk9wB,IACjD,GAAI34e,GAAaA,EAAUtnO,YAAcsnO,EAAU75Q,YAC/C,OAGArtB,KAAK8/wB,mBAAoB,EACzBj/wB,EAAEq6G,cAAc11F,iBAChB3kB,EAAEq6G,cAAckiB,kBAGxB,GAAIv8H,EAAEw6G,kBAAoBr7G,KAAKw/wB,mBAAoB,CAC1Cx/wB,KAAK+/wB,YACN//wB,KAAK+9nB,YHIS,eGJyB,QACvC/9nB,KAAK+/wB,WACD/+wB,QAAShB,KAAKM,OAAO69wB,WAAWnhJ,WAChChvb,aAAc,IAAIhuL,KAAKhgB,KAAKM,OAAO0tM,aAAa/tL,YAEpDjgB,KAAKm/wB,cAAcn/wB,KAAK+/wB,UAAU/+wB,UAEtC,IAAI+L,EAAI/M,KAAKM,OAAO4S,UAAYrS,EAAEs6G,WAAat6G,EAAEs6G,UACjDn7G,KAAKgB,QAAQ0D,MAAM2I,UAAY,eAAiBrN,KAAKggxB,cAAchgxB,KAAKgB,SAAW+L,GAAK,WAEvF,GAAIlM,EAAEw6G,kBAAoBr7G,KAAKy/wB,oBAAqB,CACrD,IAAI7wZ,EAAY,EACX5uX,KAAKigxB,gBACNjgxB,KAAK+9nB,YAAYmiJ,GAA0B,YAC3ClgxB,KAAKigxB,eACDj/wB,QAAShB,KAAKM,OAAO69wB,WAAWnhJ,WAChChvb,aAAc,IAAIhuL,KAAKhgB,KAAKM,OAAO0tM,aAAa/tL,YAEpDjgB,KAAKm/wB,cAAcn/wB,KAAKigxB,cAAcj/wB,SACtC4tX,EAAY5uX,KAAKigxB,cAAcj/wB,QAAQ4D,aAEvCmI,EAAI/M,KAAKM,OAAO4S,UAAY07W,EAAY/tX,EAAEs6G,WAAayzQ,EAAY/tX,EAAEs6G,UACzEn7G,KAAKgB,QAAQ0D,MAAM2I,UAAY,eAAiBrN,KAAKggxB,cAAchgxB,KAAKgB,SAAW+L,GAAK,SAGhGsywB,EAAchkxB,UAAUkpT,aAAe,SAAU1jT,GAC7C,GAAKb,KAAK8/wB,kBAAV,CAIA,GADA9/wB,KAAK8/wB,mBAAoB,EACA,SAArBj/wB,EAAEk7G,gBAAkD,UAArBl7G,EAAEk7G,eAA4B,CAC7D,IAAI/kC,EAAOh3D,KAAKusE,MAAQvsF,KAAK2/wB,eACzBQ,EAAct/wB,EAAEs6G,WAAa3vG,GAAQkb,SAAW,EAAI,MACpDy5vB,EAAanpsB,GAASn2E,EAAEs6G,UAAan7G,KAAKM,OAAOU,QAAQ4D,YAAc,GACvE5E,KAAKogxB,WAAWv/wB,EAAEk7G,gBACdokqB,EAAanpsB,GAASn2E,EAAEs6G,UAAan7G,KAAKM,OAAOU,QAAQ4D,YAAc,IACvE5E,KAAKgB,QAAQ0D,MAAMqxY,mBAAuBoqY,EAAanpsB,EAAQ,GAAM,KAEzEh3E,KAAKqgxB,aAAax/wB,EAAEk7G,iBAGpB/7G,KAAKsgxB,cAET,IAAIrgxB,GAASmsL,YAAa,eAAgBvzJ,QAAQ,EAAOv8B,MAAOuE,EAAEq6G,eAClEl7G,KAAKM,OAAOkmB,QAAQ+rmB,GAAuBtynB,QAG3CD,KAAKsgxB,cAETtgxB,KAAK2/wB,eAAiB,OAE1BN,EAAchkxB,UAAUkyH,eAAiB,SAAU1sH,GAC/C,IAAIsG,EAAStB,EAAQhF,EAAEq6G,cAAc/zG,OAAQ,IAAMo5wB,IACnD,GAAK9ixB,EAAkB0J,IAOvB,GAFAA,EAAStB,EAAQhF,EAAEq6G,cAAc/zG,OAAQ,IAAMq5wB,GAAuB,KAAOC,GAAyB,KAChGC,KACDjjxB,EAAkB0J,GAKnB,OAJAnH,KAAKM,OAAO+9wB,gBAAkBr+wB,KAAKM,OAAOqgxB,eAAex5wB,QACpDnH,KAAKM,OAAOi+wB,kBAAkBlosB,UAC/Br2E,KAAKM,OAAOq+wB,YAAYC,WAAW5+wB,KAAKM,OAAO+9wB,gBAAiB,YAVxE,CACI,IAAI7qwB,EAAU3S,EAAEq6G,cAChBl7G,KAAKM,OAAOyN,OAAO6ywB,IAAuBtkxB,MAAOkX,MAazD6rwB,EAAchkxB,UAAU0ioB,YAAc,SAAUh0e,EAAS82nB,GAChD7gxB,KAAK8gxB,aAQN9gxB,KAAKM,OAAO0G,eAAgBgnM,aAAchuM,KAAK8gxB,aAAa9ykB,eAAgB,IAP5EhuM,KAAK8gxB,cACD9/wB,QAAShB,KAAKM,OAAO69wB,WAAWnhJ,WAChChvb,aAAc,IAAIhuL,KAAKhgB,KAAKM,OAAO0tM,aAAa/tL,YAEpDjgB,KAAKm/wB,cAAcn/wB,KAAK8gxB,aAAa9/wB,UAKzChB,KAAKM,OAAO0G,eAAgBgnM,aAAchuM,KAAKM,OAAO69wB,WAAWC,oBAAoByC,KAAiB,GACtG7gxB,KAAKM,OAAO69wB,WAAW4C,iBACvB/gxB,KAAKM,OAAO69wB,WAAWpnC,aAAahtlB,IAExCs1nB,EAAchkxB,UAAU+kxB,WAAa,SAAU5qvB,GAC3C,GAAIA,IAAcx1B,KAAKw/wB,mBAAoB,CACvC,IAAIzxvB,EAAO/tB,KAAK+/wB,UAChB//wB,KAAK+/wB,UAAY//wB,KAAK8gxB,aACtB9gxB,KAAK8gxB,aAAe/yvB,MAEnB,CACGA,EAAO/tB,KAAKigxB,cAChBjgxB,KAAKigxB,cAAgBjgxB,KAAK8gxB,aAC1B9gxB,KAAK8gxB,aAAe/yvB,IAG5BsxvB,EAAchkxB,UAAUglxB,aAAe,SAAUtkqB,GAC7C,IACIilqB,GACA7qtB,OAAQ,OAAQt9B,QAAQ,EAAOg7K,aAFhB93F,IAAmB/7G,KAAKw/wB,mBAAqBx/wB,KAAK+/wB,UAAU/xkB,aAAehuM,KAAKigxB,cAAcjykB,aAElDzwH,YAAav9E,KAAK8gxB,aAAa9ykB,cAG9F,GADAhuM,KAAKM,OAAOkmB,QAAQy6vB,GAAmBD,GACnCA,EAAQnovB,OAGR,OAFA74B,KAAKogxB,WAAWrkqB,QAChB/7G,KAAKsgxB,cAGTtgxB,KAAKM,OAAO69wB,WAAWjgJ,SAASl+nB,KAAK8gxB,aAAa9/wB,SAClDhB,KAAKM,OAAO0G,eAAgBgnM,aAAchuM,KAAK8gxB,aAAa9ykB,eAAgB,GAC5E,IAAI45J,EAEAA,EADA5nW,KAAKM,OAAO4S,UACC6oG,IAAmB/7G,KAAKw/wB,mBAChCx/wB,KAAKigxB,cAAgBjgxB,KAAKigxB,cAAcj/wB,QAAQmT,WAAanU,KAAK8gxB,aAAa9/wB,QAAQ4D,YAAe,EAG9Fm3G,IAAmB/7G,KAAKw/wB,oBAAsBx/wB,KAAK8gxB,aAAa9/wB,QAAQmT,WAAa,EAEtGxQ,GAAU3D,KAAKgB,SAAU4+wB,IACzB5/wB,KAAKgB,QAAQ0D,MAAM2I,UAAY,gBAA+B,MAC1DrN,KAAKM,OAAO8qpB,cACZprpB,KAAKM,OAAO8qpB,aAAaiyH,gBAAgBr9wB,KAAKM,OAAO69wB,WAAWb,oBAEpEt9wB,KAAKM,OAAOyppB,aAAav5U,sBAE7B6uc,EAAchkxB,UAAUilxB,YAAc,WAClCtgxB,KAAKM,OAAO69wB,WAAWjgJ,SAASl+nB,KAAK8gxB,aAAa9/wB,SAClDhB,KAAKM,OAAO0G,eAAgBgnM,aAAchuM,KAAK8gxB,aAAa9ykB,eAAgB,GAC5EhuM,KAAKM,OAAO69wB,WAAW4C,iBACvB/gxB,KAAKM,OAAO69wB,WAAW+C,uBACvBv9wB,GAAU3D,KAAKgB,SAAU4+wB,IACzB,IAAIhxZ,EAAY5uX,KAAKigxB,cAAgBjgxB,KAAKigxB,cAAcj/wB,QAAQ4D,YAAc,EAC9E5E,KAAKgB,QAAQ0D,MAAM2I,UAAY,eAAiBrN,KAAKM,OAAO4S,UAAY07W,GAAa5uX,KAAK8gxB,aAAa9/wB,QAAQmT,YAAc,OAEjIkrwB,EAAchkxB,UAAUkkxB,gBAAkB,WACtCl7wB,GAAarE,KAAKgB,SAAU4+wB,IAC5B5/wB,KAAKgB,QAAQ0D,MAAMqxY,mBAAqB,GACxC/1Y,KAAKgB,QAAQ0D,MAAM2I,UAAY,GAC3BrN,KAAKigxB,gBACL17wB,EAAOvE,KAAKigxB,cAAcj/wB,SAC1BhB,KAAKigxB,cAAgB,KACrB57wB,GAAarE,KAAK8gxB,aAAa9/wB,SAAUk/wB,IACzCv8wB,GAAU3D,KAAK8gxB,aAAa9/wB,SAAUmgxB,KAEtCnhxB,KAAK+/wB,YACLx7wB,EAAOvE,KAAK+/wB,UAAU/+wB,SACtBhB,KAAK+/wB,UAAY,KACjB17wB,GAAarE,KAAK8gxB,aAAa9/wB,SH7Ib,gBG8IlB2C,GAAU3D,KAAK8gxB,aAAa9/wB,SAAUmgxB,KAE1CnhxB,KAAK8gxB,aAAe,KACpB9gxB,KAAKM,OAAO69wB,WAAWnhJ,WAAWt4nB,MAAMsR,MAAQ,IAEpDqpwB,EAAchkxB,UAAU2kxB,cAAgB,SAAUh/wB,GAC9C,IAAI0D,EAAQ7I,OAAOsR,iBAAiBnM,GACpC,OAAO,IAAIogxB,gBAAgB18wB,EAAM6od,iBAAiB8zT,KAEtDhC,EAAchkxB,UAAU8jxB,cAAgB,SAAUn+wB,GAC9CA,EAAQ0D,MAAMsR,MAAShW,KAAKM,OAAOU,QAAmB,YAAI,MAE9Dq+wB,EAAchkxB,UAAUimY,YAAc,WAClCthY,KAAK8gxB,aAAe,KACpB9gxB,KAAKigxB,cAAgB,KACrBjgxB,KAAK+/wB,UAAY,KACjB//wB,KAAK2/wB,eAAiB,KACtB3/wB,KAAKgB,QAAQ0D,MAAM2I,UAAY,GAC/BrN,KAAKgB,QAAQgB,UAAY,GACzBqC,GAAarE,KAAKgB,SAAU4+wB,KAKhCP,EAAchkxB,UAAUiX,QAAU,WAC9BtS,KAAK82uB,SAASxkuB,UACd/M,GAAahB,OAAOvE,KAAKgB,QAAS,gBAAiBhB,KAAKu/wB,iBACxDv/wB,KAAKshY,eAEF+9Y,KCzNPrhD,GAAqC,WACrC,SAASA,EAAoB19tB,GACzBN,KAAKqkjB,iBACLrkjB,KAAK42G,YACDo7hB,UAAW,YACXD,QAAS,UACTF,WAAY,aACZC,UAAW,YACXwvI,eAAgB,kBAChBC,aAAc,gBACdC,gBAAiB,mBACjBC,eAAgB,kBAChBC,cAAe,iBACfC,eAAgB,kBAChBC,OAAQ,QACRC,OAAQ,QACRC,SAAU,QACVC,QAAS,QACTC,QAAS,QACTC,OAAQ,QACRluqB,MAAO,QACPI,OAAQ,SACRS,OAAQ,SACRN,KAAM,OACNo2F,OAAQ,SACRC,SAAU,WACV72F,IAAK,MACL2mG,SAAU,aAEdz6M,KAAKM,OAASA,EACdN,KAAKM,OAAOU,QAAQioH,UAA6C,IAAlCjpH,KAAKM,OAAOU,QAAQioH,SAAkB,EAAIjpH,KAAKM,OAAOU,QAAQioH,SAC7FjpH,KAAK+5I,eAAiB,IAAI3jC,GAAep2G,KAAKM,OAAOU,SACjDk2G,UAAWl3G,KAAKg6I,iBAAiB1+I,KAAK0E,MACtC42G,WAAY52G,KAAK42G,WACjB/mC,UAAW,YAEf7vE,KAAKtD,mBAsoBT,OApoBAshuB,EAAoB3iuB,UAAU2+I,iBAAmB,SAAUn5I,GACvD,OAAQA,EAAEs1D,QACN,IAAK,YACL,IAAK,iBACDn2D,KAAKkixB,YAAYrhxB,EAAGA,EAAE41G,UACtB,MACJ,IAAK,UACL,IAAK,eACDz2G,KAAKmixB,UAAUthxB,EAAGA,EAAE41G,UACpB,MACJ,IAAK,YACL,IAAK,iBACDz2G,KAAKoixB,YAAYvhxB,EAAGA,EAAE41G,UACtB,MACJ,IAAK,aACL,IAAK,kBACDz2G,KAAKqixB,aAAaxhxB,EAAGA,EAAE41G,UACvB,MACJ,IAAK,gBACDz2G,KAAKM,OAAOu9wB,WAAW79wB,KAAKM,OAAO69wB,WAAWC,oBAAoB,YAAav9wB,GAC3Eb,KAAKM,OAAO8qpB,cACZprpB,KAAKM,OAAO8qpB,aAAapqpB,QAAQ2B,cAAc,kBAAkBT,QAErE,MACJ,IAAK,iBACDlC,KAAKM,OAAOu9wB,WAAW79wB,KAAKM,OAAO69wB,WAAWC,oBAAoB,QAASv9wB,GACvEb,KAAKM,OAAO8qpB,cACZprpB,KAAKM,OAAO8qpB,aAAapqpB,QAAQ2B,cAAc,kBAAkBT,QAErE,MACJ,IAAK,SACL,IAAK,SACL,IAAK,WACL,IAAK,UACL,IAAK,UACL,IAAK,SACDlC,KAAKsixB,sBAAsBzhxB,GAC3B,MACJ,IAAK,QACDb,KAAKm+tB,aAAat9tB,GAClB,MACJ,IAAK,OACDb,KAAKuixB,iBACL,MACJ,IAAK,MACL,IAAK,WACDvixB,KAAKk+tB,WAAWr9tB,EAAGA,EAAE41G,UACrB,MACJ,IAAK,SACDz2G,KAAKukuB,cAAc1juB,GACnB,MACJ,IAAK,SACDb,KAAKwixB,kBAGjBxkD,EAAoB3iuB,UAAUqB,iBAAmB,WAC7CsD,KAAKM,OAAOslF,GAAG68rB,GAAqBzixB,KAAK0ixB,gBAAiB1ixB,OAE9Dg+tB,EAAoB3iuB,UAAUuB,oBAAsB,WAChDoD,KAAKM,OAAO0lF,IAAIy8rB,GAAqBzixB,KAAK0ixB,kBAE9C1kD,EAAoB3iuB,UAAUqnxB,gBAAkB,SAAU7hxB,GACtD,IAAIA,EAAEvE,MAAMm6G,WAGZz2G,KAAK2ixB,cAAgB9hxB,EAAEvE,MAAM6K,QACzBnH,KAAKM,OAAOi+wB,kBAAkBlosB,UAAwC,gBAA5Br2E,KAAKM,OAAOotM,cAGtD7sM,EAAEvE,MAAM6K,OAAOrD,UAAUK,SAASq8wB,MAClCj7wB,GAAanB,IAAIpE,KAAKM,OAAOysoB,kBAAmB,YAAa/soB,KAAK4ixB,iBAAkB5ixB,MACpFuF,GAAanB,IAAIpE,KAAKM,OAAOysoB,kBAAmB,UAAW/soB,KAAK6ixB,SAAU7ixB,OAE1Ea,EAAEvE,MAAM6K,OAAOrD,UAAUK,SAASs8wB,MAAyB,CAC3D,IAAIqC,EAAY9ixB,KAAKM,OAAOyixB,eACxBD,IACAv9wB,GAAanB,IAAI0+wB,EAAW,YAAa9ixB,KAAK4ixB,iBAAkB5ixB,MAChEuF,GAAanB,IAAI0+wB,EAAW,UAAW9ixB,KAAK6ixB,SAAU7ixB,SAIlEg+tB,EAAoB3iuB,UAAUunxB,iBAAmB,SAAU/hxB,GACvD,IAAIsG,EAAStB,EAAQhF,EAAEsG,OAAQ,IAAMq5wB,GAAuB,KAAOC,IAC/Dt5wB,GACAnH,KAAKw5oB,aAAY,EAAMryoB,IAG/B62tB,EAAoB3iuB,UAAU2nxB,uBAAyB,SAAUnixB,GAC7D,IAAIsG,EAAStB,EAAQhF,EAAEsG,OAAQ,IAAMo5wB,IACdvgxB,KAAKM,OAAOuouB,UAAUo6C,yBAAyB97wB,IAE1E62tB,EAAoB3iuB,UAAUwnxB,SAAW,SAAUhixB,GAK/C,GAJIA,EAAEsG,OAAOrD,UAAUK,SAASq8wB,MAC5Bj7wB,GAAahB,OAAOvE,KAAKM,OAAOysoB,kBAAmB,YAAa/soB,KAAK4ixB,kBACrEr9wB,GAAahB,OAAOvE,KAAKM,OAAOysoB,kBAAmB,UAAW/soB,KAAK6ixB,WAEnEhixB,EAAEsG,OAAOrD,UAAUK,SAASs8wB,IAAyB,CACrD,IAAIqC,EAAY9ixB,KAAKM,OAAOyixB,eACxBD,IACAv9wB,GAAahB,OAAOu+wB,EAAW,YAAa9ixB,KAAK4ixB,kBACjDr9wB,GAAahB,OAAOu+wB,EAAW,UAAW9ixB,KAAK6ixB,aAI3D7kD,EAAoB3iuB,UAAU8iuB,aAAe,SAAUt9tB,GACnD,IAAIb,KAAKM,OAAOi+wB,kBAAkBlosB,SAAlC,CAGA,IAAIlvE,EAAUtG,EAAQ,OACtB,GAAIgF,EAAQsB,EAAQ,IAAM+7wB,IAClB/7wB,EAAOrD,UAAUK,SAASg/wB,KAC1Bh8wB,EAAOrD,UAAUK,SAASi/wB,KAC1Bj8wB,EAAOrD,UAAUK,SAASk/wB,KAC1Bl8wB,EAAOrD,UAAUK,SAASm/wB,KAC1Bn8wB,EAAOrD,UAAUK,SAASo/wB,KAC1Bp8wB,EAAOk/G,QACPxlH,EAAE2kB,kBAEGre,EAAOrD,UAAUK,SAASq/wB,MAC/BxjxB,KAAKM,OAAOU,QAAQ2B,cAAc,IAAMygxB,IAAwB/8pB,QAChExlH,EAAE2kB,uBAIV,GAAIre,EAAOrD,UAAUK,SAASq8wB,KAAyBr5wB,EAAOrD,UAAUK,SAASs8wB,IAAjF,CACI,GAAIzgxB,KAAKqkjB,cAAc5njB,OAAS,EAAG,CAC/B,IAAIc,EAAQyC,KAAKM,OAAOqgxB,eAAe3gxB,KAAKqkjB,cAAc,IACtDxliB,EAAM7e,KAAKM,OAAOqgxB,eAAe3gxB,KAAKqkjB,cAAcrkjB,KAAKqkjB,cAAc5njB,OAAS,IACpFc,EAAM+wN,QAAUzvM,EAAIyvM,QACpB/wN,EAAMyD,QAAUmG,EAChBnH,KAAKM,OAAO+9wB,gBAAkB9gxB,OAG9ByC,KAAKM,OAAO+9wB,gBAAkBr+wB,KAAKM,OAAOqgxB,eAAex5wB,GAE7D,IAAIlH,EAAOvB,EAAOsB,KAAKM,OAAO+9wB,iBAAmBxlvB,QAAQ,EAAOv8B,MAAOuE,IACvEb,KAAKM,OAAOyN,OAAO01wB,GAAiBxjxB,OAZxC,CAeA,KAAIkH,EAAOrD,UAAUK,SAASo8wB,KAA0Bp5wB,EAAOrD,UAAUK,SAASu/wB,KAC9Ev8wB,EAAOrD,UAAUK,SAASw/wB,KAAyCx8wB,EAAOrD,UAAUK,SAASy/wB,KAIjG,OAAIz8wB,EAAOrD,UAAUK,SAAS0/wB,KAC1B7jxB,KAAKM,OAAO0G,eAAgBgnM,aAAc,IAAIhuL,KAAK+U,SAAS5tB,EAAO0L,aAAa,aAAc,OAAQ,GACtG7S,KAAKM,OAAO09wB,WAAW,YACvBh+wB,KAAKwixB,sBAHT,EAHIr7wB,EAAOk/G,WAUf23mB,EAAoB3iuB,UAAUyoxB,SAAW,SAAUC,EAAgBxmxB,EAAOshB,GACtE,IAAImlwB,EAAWhkxB,KAAKM,OAAOysoB,kBACvBjrkB,KAAWzgE,MAAMC,KAAK0ixB,EAASxixB,iBAAiB,OAChDyixB,EAASD,EAASzrf,KAAK97R,OACvBynxB,EAAYF,EAASzrf,KAAK,GAAGz2N,MAAMrlE,OACvC,GAAIc,EAAMuG,UAAUK,SAASs8wB,IAAyB,CAClD,IAAIqC,EAAY9ixB,KAAKM,OAAOyixB,eAC5BjhtB,KAAWzgE,MAAMC,KAAKwhxB,EAAUhhtB,OAChCmitB,EAAS,EACTC,EAAYpB,EAAUhhtB,MAAMrlE,OAEhC,IAAIipB,EAAao8C,EAAMvjE,QAAQhB,GAC3BqoB,EAAWk8C,EAAMvjE,QAAQsgB,GACzBslwB,KACJ,GAAIJ,EAAgB,CAChB,IAAK,IAAI5nxB,EAAI,EAAGA,EAAI+nxB,EAAW/nxB,IAC3B,IAAK,IAAIonB,EAAI,EAAGA,EAAI0gwB,EAAQ1gwB,IACxB4gwB,EAAa3/wB,KAAKs9D,EAAMoitB,EAAY3gwB,EAAIpnB,IAGhDupB,EAAay+vB,EAAa5lxB,QAAQhB,GAClCqoB,EAAWu+vB,EAAa5lxB,QAAQsgB,GAEpC,GAAI6G,EAAaE,EAAU,CACvB,IAAImI,EAAOrI,EACXA,EAAaE,EACbA,EAAWmI,EAGf,OADag2vB,EAAiBI,EAAeritB,GAC/BzgE,MAAMqkB,EAAYE,EAAW,IAE/Co4sB,EAAoB3iuB,UAAUknxB,eAAiB,WAC3C,GAAgC,WAA5BvixB,KAAKM,OAAOotM,YAA0B,CACtC,IAAI02kB,EAAYpkxB,KAAKM,OAAOysoB,kBAAkBpqoB,cAAc,IAAM0hxB,IAGlE,OAFAD,EAAU5gxB,aAAa,WAAY,UACnC4gxB,EAAUlixB,QAGdlC,KAAKM,OAAOuouB,UAAUy7C,iCACtBtkxB,KAAKw5oB,aAAY,EAAOx5oB,KAAKM,OAAOikxB,sBAAsB,KAE9DvmD,EAAoB3iuB,UAAUmpxB,qBAAuB,WACjD,OAAOxkxB,KAAKM,OAAO69wB,WAAWqG,sBAGlCxmD,EAAoB3iuB,UAAUm+oB,YAAc,SAAUirI,EAAYt9wB,GAE9D,GADAnH,KAAKM,OAAOokxB,sBACRD,EAAY,CACZ,IAAIE,OAAY,EACZtgO,EAAgBrkjB,KAAK8jxB,SAAS9jxB,KAAKwkxB,uBAAwBxkxB,KAAK2ixB,cAAex7wB,GACnF,GAAInH,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAMq4I,UAAU3uO,OAAS,EAAG,CAC1DkoxB,EAAY3kxB,KAAK2ixB,cAAc9vwB,aAAa,oBAE5C,IAAK,IADD+xwB,KACKzoxB,EAAI,EAAGA,EAAIkojB,EAAc5njB,OAAQN,IAClCkojB,EAAclojB,GAAG0W,aAAa,sBAAwB8xwB,GACtDC,EAAsBpgxB,KAAK6/iB,EAAclojB,IAGjDkojB,EAAgBugO,EAGpB,GADA5kxB,KAAKqkjB,cAAgBA,EACjBA,EAAc5njB,OAAS,IAAM0K,EAAOrD,UAAUK,SAASs8wB,IAAyB,CAChF,IAAIoE,EAAc7kxB,KAAK8kxB,eAAezgO,GACtC,GAAIrkjB,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAMq4I,UAAU3uO,OAAS,EAAG,CAErD,IADDsoxB,KACJ,IAAS5oxB,EAAI,EAAGA,EAAI0oxB,EAAYpoxB,OAAQN,IAChC0oxB,EAAY1oxB,GAAG0W,aAAa,sBAAwB8xwB,GACpDI,EAAoBvgxB,KAAKqgxB,EAAY1oxB,IAG7C0oxB,EAAcE,EAElB1gO,EAAgBA,EAAc9piB,OAAOsqwB,GAEpC19wB,EAAO0L,aAAa,sBAAwB8xwB,GAAc3kxB,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAMq4I,UAAU3uO,OAAS,IAClH0K,EAASnH,KAAKqkjB,cAAcrkjB,KAAKqkjB,cAAc5njB,OAAS,IAE5DuD,KAAKM,OAAO0kxB,iBAAiB3gO,EAAel9iB,QAG5CnH,KAAK2ixB,cAAgBx7wB,EACrBnH,KAAKqkjB,eAAiBl9iB,GACtBnH,KAAKM,OAAO0kxB,kBAAkB79wB,GAASA,IAG/C62tB,EAAoB3iuB,UAAU4pxB,kBAAoB,SAAUC,EAAW/9wB,EAAQg+wB,QACvD,IAAhBA,IAA0BA,GAAc,GAC5C,IAAIC,EACJ,GAAID,EAAa,CACb,IAAIE,EAAmBrlxB,KAAKM,OAAOU,QAAQ2B,cAAc,IAAM2ixB,IAC/DF,KAAkB/jxB,MAAMC,KAAK+jxB,EAAiBjrwB,eAG9CgrwB,EAAeplxB,KAAKulxB,yBAExB,KAAIH,EAAa3oxB,OAAS,GAA1B,CAGAuD,KAAKM,OAAOuouB,UAAUy7C,iCACtB,IAAIkB,EACJ,GAAIr+wB,EAAOrD,UAAUK,SAASo8wB,IAAwB,CAClD,IAAInzG,EAAcg4G,EAAa7mxB,QAAQ4I,GACvCq+wB,EAAaJ,EAAcF,EAAY93G,EAAc,EAAIA,EAAc,QAGvEo4G,EAAaN,EAAYE,EAAaA,EAAa3oxB,OAAS,GAAK2oxB,EAAa,GAE9EI,IACAxlxB,KAAKM,OAAOuouB,UAAU48C,yBAAyBD,GAAaA,GAC5DA,EAAWtjxB,QACXyB,GAAU6hxB,GAAaE,OAG/B1nD,EAAoB3iuB,UAAUsqxB,qCAAuC,SAAUT,EAAW/9wB,GACtF,IAAIpH,EAAQC,KAGZ,GAFAA,KAAKM,OAAOuouB,UAAUy7C,iCACtBtkxB,KAAKM,OAAOokxB,sBACRv9wB,EAAOrD,UAAUK,SAASq8wB,KAAyBr5wB,EAAOrD,UAAUK,SAASs8wB,IAAyB,CACtG,IAAImF,EAAwB5lxB,KAAK6lxB,+BAC7BC,KACAC,EAAiBhxvB,SAAS5tB,EAAO0L,aAAa,aAAc,IAYhE,GAX2B7S,KAAKM,OAAO0lxB,gBAAgBh/uB,OAAO,SAAUi/uB,GACpE,OAASf,EACJe,EAAYlmxB,EAAMO,OAAO4lxB,YAAYhmwB,WAAWD,WAAa8lwB,EAD5CE,EAAYlmxB,EAAMO,OAAO4lxB,YAAYhmwB,WAAWD,WAAa8lwB,IAGlE/+uB,OAAO,SAAU1qC,GAClCspxB,EAAsB5+uB,OAAO,SAAUhmC,GAC/B6uD,KAAKC,UAAUxzD,EAAM6+Q,QAAUtrN,KAAKC,UAAU9uD,EAAQ6R,aAAa,eACnEizwB,EAAmBthxB,KAAKxD,OAIhC8kxB,EAAmBrpxB,OAAS,EAAG,CAC/B,IAAIy+I,EAAkBgqoB,EAAYY,EAAmBA,EAAmBrpxB,OAAS,GAAKqpxB,EAAmB,GACrGK,EAAgBnmxB,KAAKomxB,6BAA6BlroB,EAAgBroI,aAAa,cACnF7S,KAAKM,OAAOuouB,UAAU48C,wBAAwBU,EAAeA,EAAcA,EAAc1pxB,OAAS,IACjG0pxB,EAAcA,EAAc1pxB,OAAS,GAAIyF,WAItD87tB,EAAoB3iuB,UAAUypxB,eAAiB,SAAUhjtB,GACrD,IAAIghtB,EAAY9ixB,KAAKM,OAAOyixB,eAC5B,IAAKD,EACD,SAEJ,IAAI3qR,EAAYr2b,EAAM,GAClBs2b,EAAUt2b,EAAMA,EAAMrlE,OAAS,GAC/Bc,EAAQyC,KAAKM,OAAOqgxB,eAAexoR,GAEvC,GADUn4f,KAAKM,OAAOqgxB,eAAevoR,GAC7B9pS,QAAQruM,UAAY1iB,EAAM2iB,UAAUD,WAAaomwB,GAAiB,CAEtE,SADqBhlxB,MAAMC,KAAKwhxB,EAAUhhtB,OACvBzgE,MAAM82f,EAAUt/N,UAAWu/N,EAAQv/N,UAAY,GAEtE,UAEJmlc,EAAoB3iuB,UAAUkqxB,uBAAyB,WACnD,SAAUlkxB,MAAMC,KAAKtB,KAAKM,OAAOU,QAAQQ,iBAAiB,IAAM++wB,MAEpEviD,EAAoB3iuB,UAAU+qxB,6BAA+B,SAAUp2lB,GACnE,SAAU3uL,MAAMC,KAAKtB,KAAKM,OAAOU,QAAQQ,iBAAiB,kBAAoBwuL,EAAO,QAEzFguiB,EAAoB3iuB,UAAUwqxB,6BAA+B,WACzD,IAAIT,EAAeplxB,KAAKulxB,yBACpBe,KAQJ,OAPAlB,EAAaxtvB,IAAI,SAAU56B,GACvB,OAAOA,EAAM6V,aAAa,eAC3Bm0B,OAAO,SAAUhqC,EAAOiV,EAAOovb,GAC1BA,EAAK9ic,QAAQvB,KAAWiV,GACxBq0wB,EAAoB9hxB,KAAK4gxB,EAAanzwB,MAGvCq0wB,GAEXtoD,EAAoB3iuB,UAAUkrxB,kCAAoC,SAAUp/wB,GACxE,IAAIk0Z,EAAiBr7Z,KAAKM,OAAOuouB,UAAU29C,eAAer/wB,EAAO0L,aAAa,cAC9E,OAAO7S,KAAKM,OAAOuouB,UAAU49C,sBAAsBprX,KAEvD2iU,EAAoB3iuB,UAAUinxB,sBAAwB,SAAUzhxB,GAC5D,IAAIoR,EAAQ8iB,SAASl0B,EAAExD,IAAK,IAAM,EAClC,GAAI4U,EAAQjS,KAAKM,OAAO2xD,MAAMx1D,OAAQ,CAClC,IAAI6+L,EAAOt7L,KAAKM,OAAOomxB,gBAAgBz0wB,GAAO8jF,OAC9C/1F,KAAKM,OAAO09wB,WAAW1ilB,EAAMz6L,OAAG1F,EAAW8W,GACvCjS,KAAKM,OAAO8qpB,cACZprpB,KAAKM,OAAO8qpB,aAAapqpB,QAAQ2B,cAAc,yBAAyBT,UAIpF87tB,EAAoB3iuB,UAAU8mxB,UAAY,SAAUthxB,EAAG4jxB,GACnD,IAAKA,GAA0C,gBAA5BzkxB,KAAKM,OAAOotM,YAA/B,CAGA,IAAIvmM,EAAUtG,EAAQ,OAClB2sW,EAAmBxtW,KAAKM,OAAOqmxB,sBAC/BC,EAAwB5mxB,KAAKM,OAAOuouB,UAAUg+C,0BAC9CxB,EAAmBrlxB,KAAKM,OAAOU,QAAQ2B,cAAc,IAAMmkxB,IAC3DC,EAAoB/mxB,KAAKM,OAAOU,QAAQ2B,cAAc,IAAMugxB,IAUhE,GATI11a,EAAiB/wW,OAAS,IAAMoE,EAAEsG,OAAOrD,UAAUK,SAASq8wB,MAC5Dr5wB,EAASqmW,EAAiBA,EAAiB/wW,OAAS,IAEpDmqxB,EAAsBnqxB,OAAS,IAAM4oxB,EAAiBvhxB,UAAUK,SAAS45wB,MACxEgJ,EAAkBjjxB,UAAUK,SAAS45wB,MACqC,KAA1E,MAAO,OAAQ,WAAY,SAASx/wB,QAAQyB,KAAKM,OAAOotM,eACzDvmM,EAASnH,KAAKumxB,kCAAkCK,EAAsBA,EAAsBnqxB,OAAS,IACrGuD,KAAKM,OAAOuouB,UAAUy7C,kCAEtBn9wB,EAAOrD,UAAUK,SAASq8wB,MAA0BxgxB,KAAKM,OAAOU,QAAQ2B,cAAc,IAAMo7wB,IAAiB,CAC7G,IAAIiG,EAAWhkxB,KAAKM,OAAOysoB,kBACvBi6I,EAAc7/wB,EAAO1G,WAAWwmxB,gBAChCD,EAAc,GAAKA,EAAchD,EAASzrf,KAAK97R,QAC/CuD,KAAKw5oB,YAAYirI,EAAYT,EAASzrf,KAAKyuf,EAAc,GAAGlltB,MAAM36D,EAAO0xR,gBAG5C,WAA5B74R,KAAKM,OAAOotM,aAAwD,gBAA5B1tM,KAAKM,OAAOotM,aACzD1tM,KAAKilxB,mBAAkB,EAAM99wB,KAGrC62tB,EAAoB3iuB,UAAU6mxB,YAAc,SAAUrhxB,EAAG4jxB,GACrD,IAAKA,GAA0C,gBAA5BzkxB,KAAKM,OAAOotM,YAA/B,CAGA,IAAIvmM,EAAUtG,EAAQ,OAClBwjjB,EAAgBrkjB,KAAKM,OAAOqmxB,sBAC5Bn5a,EAAmBxtW,KAAKM,OAAOuouB,UAAUg+C,0BACzCxB,EAAmBrlxB,KAAKM,OAAOU,QAAQ2B,cAAc,IAAMmkxB,IAC3DC,EAAoB/mxB,KAAKM,OAAOU,QAAQ2B,cAAc,IAAMugxB,IAC5D7+N,EAAc5njB,OAAS,IAAMoE,EAAEsG,OAAOrD,UAAUK,SAASq8wB,MACzDr5wB,EAASk9iB,EAAcA,EAAc5njB,OAAS,IAE9C+wW,EAAiB/wW,OAAS,IAAM4oxB,EAAiBvhxB,UAAUK,SAAS45wB,MACnEgJ,EAAkBjjxB,UAAUK,SAAS45wB,MACqC,KAA1E,MAAO,OAAQ,WAAY,SAASx/wB,QAAQyB,KAAKM,OAAOotM,eACzDvmM,EAASnH,KAAKumxB,kCAAkC/4a,EAAiBA,EAAiB/wW,OAAS,IAC3FuD,KAAKM,OAAOuouB,UAAUy7C,kCAE1B,IAAIN,EAAWhkxB,KAAKM,OAAOysoB,kBAC3B,GAAI5loB,EAAOrD,UAAUK,SAASq8wB,MAA0BxgxB,KAAKM,OAAOU,QAAQ2B,cAAc,IAAMo7wB,IAAiB,CAC7G,IAAIiJ,EAAc7/wB,EAAO1G,WAAWwmxB,gBAChCD,GAAe,GAAKA,EAAchD,EAASzrf,KAAK97R,OAAS,GACzDuD,KAAKw5oB,YAAYirI,EAAYT,EAASzrf,KAAKyuf,EAAc,GAAGlltB,MAAM36D,EAAO0xR,gBAG5C,WAA5B74R,KAAKM,OAAOotM,aAAwD,gBAA5B1tM,KAAKM,OAAOotM,aACzD1tM,KAAKilxB,mBAAkB,EAAO99wB,KAGtC62tB,EAAoB3iuB,UAAU6rxB,iBAAmB,SAAU//wB,EAAQs9wB,GAC/D,IAAIT,EAAWhkxB,KAAKM,OAAOysoB,kBACvBi6I,EAAc7/wB,EAAO1G,WAAWwmxB,gBAOpC,OALIjmxB,QAASgjxB,EACTvjf,SAAUumf,EACVr/c,YAAaxgU,EAAO0xR,UACpBsuf,SAAUnD,EAASzrf,KAAKyuf,GAAalltB,MAAMrlE,SAInDuhuB,EAAoB3iuB,UAAU+rxB,wBAA0B,SAAU3C,GAC9D,GAAgC,WAA5BzkxB,KAAKM,OAAOotM,aAA6B+2kB,GAA0C,gBAA5BzkxB,KAAKM,OAAOotM,YACnE,OAAO,EAEX,IAAI23kB,EAAmBrlxB,KAAKM,OAAOU,QAAQ2B,cAAc,IAAMmkxB,IAC3DC,EAAoB/mxB,KAAKM,OAAOU,QAAQ2B,cAAc,IAAMugxB,IAChE,SAAImC,EAAiBvhxB,UAAUK,SAAS45wB,MAAmBgJ,EAAkBjjxB,UAAUK,SAAS45wB,MAKpG//C,EAAoB3iuB,UAAUgnxB,aAAe,SAAUxhxB,EAAG4jxB,GACtD,IAAIzkxB,KAAKonxB,wBAAwB3C,GAAjC,CAGA,IACI9gU,EADA0gG,EAAgBrkjB,KAAKM,OAAOqmxB,sBAE5BU,EAAuBrnxB,KAAKM,OAAOuouB,UAAUg+C,0BAC7C1/wB,EAAUtG,EAAQ,OAStB,GARIwjjB,EAAc5njB,OAAS,IAAM0K,EAAOrD,UAAUK,SAASq8wB,MACtDr5wB,EAAOrD,UAAUK,SAASs8wB,MAC3Bt5wB,EAASk9iB,EAAcA,EAAc5njB,OAAS,IAE9C4qxB,EAAqB5qxB,OAAS,IAC9B0K,EAASnH,KAAKumxB,kCAAkCc,EAAqBA,EAAqB5qxB,OAAS,IACnGuD,KAAKM,OAAOuouB,UAAUy7C,kCAEtBn9wB,EAAOrD,UAAUK,SAASq8wB,IAAuB,CACjD,IAAInjxB,EAAM2C,KAAKknxB,iBAAiB//wB,EAAQs9wB,GACxC,GAAIpnxB,EAAIsqU,aAAe,GAAKtqU,EAAIsqU,YAActqU,EAAI8pxB,SAAW,EAEpD1pxB,EADLkmd,EAAa3jd,KAAKsnxB,sBAAsBngxB,EAAQ9J,EAAI2D,QAAQu3R,KAAKl7R,EAAIojS,UAAU3+N,MAAM36D,EAAO0xR,UAAY,GAAI,WAExG74R,KAAKw5oB,YAAYirI,EAAY9gU,QAGhC,GAAItmd,EAAIsqU,cAAgBtqU,EAAI8pxB,SAAW,EACxC,IAAKnnxB,KAAKwkxB,wBAA0BnnxB,EAAIojS,SAAWpjS,EAAI2D,QAAQu3R,KAAK97R,OAAS,EAEpEgB,EADLkmd,EAAa3jd,KAAKsnxB,sBAAsBngxB,EAAQ9J,EAAI2D,QAAQu3R,KAAKl7R,EAAIojS,SAAW,GAAG3+N,MAAM,GAAI,WAEzF9hE,KAAKw5oB,YAAYirI,EAAY9gU,QAGhC,IAAK8gU,EAAY,CAClB,IAAIhkf,EAAWzgS,KAAKwkxB,uBAAyBnnxB,EAAIojS,SAAW,EAC5DzgS,KAAKM,OAAOu9wB,WAAW79wB,KAAKM,OAAO69wB,WAAWC,oBAAoB,QAASv9wB,GAC3E,IAAImjxB,EAAWhkxB,KAAKM,OAAOysoB,kBAC3B/soB,KAAKw5oB,aAAY,EAAOwqI,EAASzrf,KAAKkI,GAAU3+N,MAAM,UAI7D,GAAI36D,EAAOrD,UAAUK,SAASs8wB,IAAyB,CACxD,IAAI8G,EAAcpgxB,EAAO0xR,UACrBiqf,EAAY9ixB,KAAKM,OAAOyixB,eACxByE,EAAc1E,EAAUhhtB,MAAMrlE,OAClC,GAAI8qxB,GAAe,GAAKA,EAAcC,EAAc,EAChDxnxB,KAAKw5oB,YAAYirI,EAAY3B,EAAUhhtB,MAAMyltB,EAAc,SAE1D,GAAIA,IAAgBC,EAAc,IAAM/C,EAAY,CACrDzkxB,KAAKM,OAAOu9wB,WAAW79wB,KAAKM,OAAO69wB,WAAWC,oBAAoB,QAASv9wB,GAC3E,IAAI4mxB,EAAcznxB,KAAKM,OAAOyixB,eAC9B/ixB,KAAKw5oB,aAAY,EAAOiuI,EAAY3ltB,MAAM,QAItDk8pB,EAAoB3iuB,UAAU+mxB,YAAc,SAAUvhxB,EAAG4jxB,GACrD,IAAIzkxB,KAAKonxB,wBAAwB3C,GAAjC,CAGA,IAEI9gU,EAFAx8c,EAAUtG,EAAQ,OAClBwjjB,EAAgBrkjB,KAAKM,OAAOqmxB,sBAE5BtiO,EAAc5njB,OAAS,IAAM0K,EAAOrD,UAAUK,SAASq8wB,MACtDr5wB,EAAOrD,UAAUK,SAASs8wB,MAC3Bt5wB,EAASk9iB,EAAcA,EAAc5njB,OAAS,IAElD,IAAI+wW,EAAmBxtW,KAAKM,OAAOuouB,UAAUg+C,0BACzCr5a,EAAiB/wW,OAAS,IAC1B0K,EAASnH,KAAKumxB,kCAAkC/4a,EAAiBA,EAAiB/wW,OAAS,IAC3FuD,KAAKM,OAAOuouB,UAAUy7C,kCAEVtkxB,KAAK2ixB,cAAc9vwB,aAAa,oBAChD,GAAI1L,EAAOrD,UAAUK,SAASq8wB,IAAuB,CACjD,IAAInjxB,EAAM2C,KAAKknxB,iBAAiB//wB,EAAQs9wB,GACxC,GAAIpnxB,EAAIsqU,YAAc,GAAKtqU,EAAIsqU,YAActqU,EAAI8pxB,SAExC1pxB,EADLkmd,EAAa3jd,KAAKsnxB,sBAAsBngxB,EAAQ9J,EAAI2D,QAAQu3R,KAAKl7R,EAAIojS,UAAU3+N,MAAM36D,EAAO0xR,UAAY,GAAI,UAExG74R,KAAKw5oB,YAAYirI,EAAY9gU,QAGhC,GAAwB,IAApBtmd,EAAIsqU,YACT,IAAK3nU,KAAKwkxB,wBAA0BnnxB,EAAIojS,SAAW,EAE1ChjS,EADLkmd,EAAa3jd,KAAKsnxB,sBAAsBngxB,EAAQ9J,EAAI2D,QAAQu3R,KAAKl7R,EAAIojS,SAAW,GAAG3+N,MAAMzkE,EAAI8pxB,SAAW,GAAI,UAExGnnxB,KAAKw5oB,YAAYirI,EAAY9gU,QAGhC,IAAK8gU,EAAY,CAClBzkxB,KAAKM,OAAOu9wB,WAAW79wB,KAAKM,OAAO69wB,WAAWC,oBAAoB,YAAav9wB,GAC/E,IAAImjxB,EAAWhkxB,KAAKM,OAAOysoB,kBACvBtsW,EAAWzgS,KAAKwkxB,uBAAyBnnxB,EAAIojS,SAAWujf,EAASzrf,KAAK97R,OAAS,EACnFuD,KAAKw5oB,aAAY,EAAOwqI,EAASzrf,KAAKkI,GAAU3+N,MAAMzkE,EAAI8pxB,SAAW,UAI5E,GAAIhgxB,EAAOrD,UAAUK,SAASs8wB,IAAyB,CACxD,IAAI8G,EAAcpgxB,EAAO0xR,UACrBiqf,EAAY9ixB,KAAKM,OAAOyixB,eACxByE,EAAc1E,EAAUhhtB,MAAMrlE,OAClC,GAAI8qxB,EAAc,GAAKA,EAAcC,EACjCxnxB,KAAKw5oB,YAAYirI,EAAY3B,EAAUhhtB,MAAMyltB,EAAc,SAE1D,GAAoB,IAAhBA,IAAsB9C,EAAY,CACvCzkxB,KAAKM,OAAOu9wB,WAAW79wB,KAAKM,OAAO69wB,WAAWC,oBAAoB,YAAav9wB,GAC/E,IAAI6mxB,EAAc1nxB,KAAKM,OAAOyixB,eAC9B/ixB,KAAKw5oB,aAAY,EAAOkuI,EAAY5ltB,MAAM0ltB,EAAc,QAIpExpD,EAAoB3iuB,UAAUisxB,sBAAwB,SAAUhvI,EAAanxoB,EAAQT,GACjF,IAAIi+wB,EAAY3kxB,KAAK2ixB,cAAc9vwB,aAAa,oBAChD,GAAI7S,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAMq4I,UAAU3uO,OAAS,GAAiC,UAA5BuD,KAAKM,OAAOotM,aACpEvmM,EAAO0L,aAAa,sBAAwB8xwB,EAAW,CACvD,IAAIpnsB,EAAc,IAAIv9D,KAAK+U,SAASujnB,EAAYzloB,aAAa,aAAc,KACvE80wB,EAAyB,UAATjhxB,EAAoB,IAAIsZ,KAAKu9D,EAAYrX,QAAQqX,EAAYpX,UAAY,IACvF,IAAInmD,KAAKu9D,EAAYrX,QAAQqX,EAAYpX,UAAY,IAC3Dh/D,KAAY9F,MAAMC,KAAKtB,KAAKM,OAAOU,QAAQQ,iBAAiB,iBACtDmmxB,EAAa1nwB,UAAU/S,WAAa,wBAA+By3wB,EAAY,OAAO,GAGpG,OAAOx9wB,GAEX62tB,EAAoB3iuB,UAAUusxB,qBAAuB,SAAUntwB,GAI3D,SAAUpZ,MAAMC,KAAKmZ,EAAUjZ,iBAHb,+RAKtBw8tB,EAAoB3iuB,UAAUwsxB,kBAAoB,SAAUhnxB,EAAG8wH,GAC3D,IAAI5xH,EAAQC,KACR4lH,EAAoB5lH,KAAK4nxB,qBAAqBj2pB,GAU9Cm2pB,GATJliqB,EAAoBA,EAAkB5+E,OAAO,SAAUhmC,GACnD,IAAI+mxB,EAAYhoxB,EAAMO,OAAOU,QAAQ2B,cAAc,IAAMqlxB,IACzD,OAAID,GAAaA,EAAU9zwB,eACdjT,EAAQ8C,UAAUK,SJlRnB,WIkR+CnD,EAAQ8C,UAAUK,SAAS8jxB,OAGzEjnxB,EAAQ8C,UAAUK,SAASk/wB,KAAyBrixB,EAAQ8C,UAAUK,SAASm/wB,QAG/D,GAC7B4E,EAAUtiqB,EAAkBA,EAAkBnpH,OAAS,GACtDgB,EAAkByqxB,IAAY1nxB,SAASmlH,gBAAkBuiqB,GAAYrnxB,EAAE41G,WACxE51G,EAAE2kB,iBACFsiwB,EAAS5lxB,UAERzE,EAAkBqqxB,IAAatnxB,SAASmlH,gBAAkBmiqB,GAAYjnxB,EAAE41G,WACzE51G,EAAE2kB,iBACF0iwB,EAAQhmxB,UAGhB87tB,EAAoB3iuB,UAAU6iuB,WAAa,SAAUr9tB,EAAGqkxB,GACpD,IAAI/9wB,EAAStG,EAAEsG,OACf,GAAItB,EAAQsB,EAAQ,IAAM2/wB,IAA+B,CACrD,IAAIzB,EAAmBrlxB,KAAKM,OAAOU,QAAQ2B,cAAc,IAAMmkxB,IAC/D,GAAIrpxB,EAAkB4nxB,KAAsBA,EAAiBvhxB,UAAUK,SAAS45wB,IAC5E,OAIJ,OAFA/9wB,KAAKM,OAAOuouB,UAAUy7C,sCACtBtkxB,KAAK6nxB,kBAAkBhnxB,EAAGwkxB,GAG9B,GAAIx/wB,EAAQsB,EAAQ,IAAM+7wB,IAA1B,CACI,IAAI6D,EAAoB/mxB,KAAKM,OAAOU,QAAQ2B,cAAc,IAAMugxB,IAChE,GAAIzlxB,EAAkBspxB,KAAuBA,EAAkBjjxB,UAAUK,SAAS45wB,IAC9E,OAEJ/9wB,KAAK6nxB,kBAAkBhnxB,EAAGkmxB,QAG9B,GAAI5/wB,EAAOrD,UAAUK,SJpnBX,cIqnBNnE,KAAKM,OAAOuouB,UAAUy7C,qCAD1B,CAIA,IAAIn9wB,EAAOrD,UAAUK,SAASo8wB,IAA9B,CAiBA,IAAIl8N,EAAgBrkjB,KAAKM,OAAOqmxB,sBAChC,OAAItiO,EAAc5njB,OAAS,IAAM0K,EAAOrD,UAAUK,SAASo8wB,KACvDp5wB,EAASk9iB,EAAcA,EAAc5njB,OAAS,GAC9CuD,KAAK2lxB,qCAAqCT,EAAW/9wB,QACrDtG,EAAE2kB,uBAHN,EAjBI,IAAI4/vB,KAAkB/jxB,MAAMC,KAAKtB,KAAKM,OAAOU,QAAQQ,iBAAiB,IAAM++wB,KACxE8G,EAAuBrnxB,KAAKM,OAAOuouB,UAAUg+C,0BAKjD,GAJIQ,EAAqB5qxB,OAAS,IAC9B0K,EAASkgxB,EAAqBA,EAAqB5qxB,OAAS,IAEhEuD,KAAKM,OAAOuouB,UAAUy7C,kCACjBY,GAAa/9wB,EAAO0L,aAAa,eAAiBuywB,EAAaA,EAAa3oxB,OAAS,GAAGoW,aAAa,cACtGqywB,GAAa/9wB,EAAO0L,aAAa,eAAiBuywB,EAAa,GAAGvywB,aAAa,aAC/E,OAE4B,WAA5B7S,KAAKM,OAAOotM,aAAwD,gBAA5B1tM,KAAKM,OAAOotM,cACpD1tM,KAAKilxB,kBAAkBC,EAAW/9wB,GAClCtG,EAAE2kB,oBAYdw4sB,EAAoB3iuB,UAAUkpuB,cAAgB,SAAU1juB,GAChDL,SAASmlH,cAAc7hH,UAAUK,SAASo8wB,MAC1C58wB,GAAUnD,SAASmlH,eAAgBwiqB,IACnCnoxB,KAAKM,OAAO8nxB,gBAAkBpoxB,KAAKM,OAAOuouB,UAAUw/C,oBACpDroxB,KAAKM,OAAOgoxB,WAAWC,gBAG/BvqD,EAAoB3iuB,UAAUmnxB,cAAgB,WAC1CxixB,KAAKM,OAAOgoxB,WAAWE,eACvBxoxB,KAAKM,OAAOgoxB,WAAWG,UAAUlnsB,OAC7BvhF,KAAKM,OAAO8qpB,cACZprpB,KAAKM,OAAO8qpB,aAAaixH,mBAMjCr+C,EAAoB3iuB,UAAUkkC,cAAgB,WAC1C,MAAO,YAOXy+rB,EAAoB3iuB,UAAUiX,QAAU,WACpCtS,KAAKpD,sBACLoD,KAAK+5I,eAAeznI,WAEjB0rtB,KC7qBP9pZ,GAAsB,WAKtB,SAASA,EAAK3wQ,EAAY7H,GACtB17D,KAAKm0U,gBAAgB5wQ,EAAY7H,GAmCrC,OA5BAw4Q,EAAK74U,UAAU84U,gBAAkB,SAAU5wQ,EAAY7H,GACnD17D,KAAKwuJ,YAAcjrF,aAAsBC,GAAcD,EAAa,IAAIC,GAAYD,GACpFvjE,KAAK07D,MAAQA,aAAiB2H,GAAQ3H,EAAQ,IAAI2H,IAOtD6wQ,EAAK74U,UAAUq1U,cAAgB,SAAUx4P,EAAWC,GAChD,IAAIzc,EAAQ17D,KAAK07D,MAAMr8D,QAOvB,OANI64E,GACAxc,EAAMqzF,UAAU,YAAa72E,EAAU8tiB,eAEvC7tiB,GACAzc,EAAMqzF,UAAU,UAAW52E,EAAQ6tiB,eAEhCtqjB,GAQXw4Q,EAAK74U,UAAUsxU,QAAU,SAAUjxQ,GAC/B,OAAO17D,KAAKwuJ,YAAYE,aAAahzF,IAElCw4Q,KC3CPw0c,GAA0B,WAC1B,SAASA,KAoCT,OAlCAA,EAASrtxB,UAAUsQ,OAAS,SAAUgrE,EAAM6tB,GACxC,IAAIo5W,EAAcjnY,EAAKO,oBACvB,IACI,IAAIyxsB,EAAgB,IAAI3owB,KAAK22D,EAAKiysB,eAAe,SAAWtkrB,SAAUE,KACtE,OAAKxiD,MAAM2muB,EAAc1owB,WAGlB,GAFM02D,EAAK12D,UAAY0owB,EAAc1owB,WAAa,IAAS29b,EAItE,MAAOt5X,GACH,OAAO,IAGfoksB,EAASrtxB,UAAUqtR,QAAU,SAAU/xM,EAAMkysB,EAAYC,GAC3B,iBAAfD,IACPA,EAAa7oxB,KAAK2L,OAAOgrE,EAAMkysB,IAEX,iBAAbC,IACPA,EAAW9oxB,KAAK2L,OAAOgrE,EAAMmysB,IAEjC,IAAIC,EAAkBpysB,EAAKO,oBAEvB8xsB,GADJrysB,EAAO,IAAI32D,KAAK22D,EAAK12D,UAAsC,KAAzB4owB,EAAaC,KACtB5xsB,oBACzB,OAAO,IAAIl3D,KAAK22D,EAAK12D,UAAgD,KAAnC+owB,EAAgBD,KAEtDL,EAASrtxB,UAAU+I,IAAM,SAAUuyE,EAAM6tB,GACrC,OAAOxkG,KAAK0oR,QAAQ/xM,EAAMA,EAAKO,oBAAqBstB,IAExDkkrB,EAASrtxB,UAAUkJ,OAAS,SAAUoyE,EAAM6tB,GACxC,OAAOxkG,KAAK0oR,QAAQ/xM,EAAM6tB,EAAU7tB,EAAKO,sBAE7CwxsB,EAASrtxB,UAAU4txB,kBAAoB,SAAUtysB,GAC7C,OAAO,IAAI32D,MAAM22D,EAAmC,IAA3BA,EAAKO,sBAE3BwxsB,KAGAQ,GAAoBC,KAAKC,iBAAiBC,kBAAkB/krB,UAAY,MACxEglrB,KACLC,MAAO,eAAgB51tB,KAAM,qBAC7B41tB,MAAO,oBAAqB51tB,KAAM,0BAClC41tB,MAAO,mBAAoB51tB,KAAM,4BACjC41tB,MAAO,oBAAqB51tB,KAAM,0BAClC41tB,MAAO,iBAAkB51tB,KAAM,uBAC/B41tB,MAAO,oBAAqB51tB,KAAM,0BAClC41tB,MAAO,oBAAqB51tB,KAAM,4BAClC41tB,MAAO,kBAAmB51tB,KAAM,wBAChC41tB,MAAO,sBAAuB51tB,KAAM,6BACpC41tB,MAAO,kBAAmB51tB,KAAM,uCAChC41tB,MAAO,oBAAqB51tB,KAAM,yCAClC41tB,MAAO,qBAAsB51tB,KAAM,0CACnC41tB,MAAO,mBAAoB51tB,KAAM,yBACjC41tB,MAAO,iBAAkB51tB,KAAM,8BAC/B41tB,MAAO,kBAAmB51tB,KAAM,wCAChC41tB,MAAO,mBAAoB51tB,KAAM,oDACjC41tB,MAAO,uBAAwB51tB,KAAM,6CACrC41tB,MAAO,mBAAoB51tB,KAAM,yCACjC41tB,MAAO,qBAAsB51tB,KAAM,2CACnC41tB,MAAO,sBAAuB51tB,KAAM,4CACpC41tB,MAAO,iBAAkB51tB,KAAM,uBAC/B41tB,MAAO,kBAAmB51tB,KAAM,6BAChC41tB,MAAO,sBAAuB51tB,KAAM,2CACpC41tB,MAAO,iBAAkB51tB,KAAM,sCAC/B41tB,MAAO,sBAAuB51tB,KAAM,2CACpC41tB,MAAO,mBAAoB51tB,KAAM,wCACjC41tB,MAAO,qBAAsB51tB,KAAM,2BACnC41tB,MAAO,sBAAuB51tB,KAAM,4BACpC41tB,MAAO,oBAAqB51tB,KAAM,0BAClC41tB,MAAO,oBAAqB51tB,KAAM,0BAClC41tB,MAAO,kBAAmB51tB,KAAM,wBAChC41tB,MAAO,iBAAkB51tB,KAAM,+BAC/B41tB,MAAO,iBAAkB51tB,KAAM,uBAC/B41tB,MAAO,iBAAkB51tB,KAAM,8BAC/B41tB,MAAO,mBAAoB51tB,KAAM,6BACjC41tB,MAAO,kBAAmB51tB,KAAM,uCAChC41tB,MAAO,kBAAmB51tB,KAAM,uCAChC41tB,MAAO,oBAAqB51tB,KAAM,0BAClC41tB,MAAO,iBAAkB51tB,KAAM,uBAC/B41tB,MAAO,kBAAmB51tB,KAAM,wBAChC41tB,MAAO,eAAgB51tB,KAAM,qBAC7B41tB,MAAO,iBAAkB51tB,KAAM,uBAC/B41tB,MAAO,iBAAkB51tB,KAAM,uBAC/B41tB,MAAO,yBAA0B51tB,KAAM,+BACvC41tB,MAAO,qBAAsB51tB,KAAM,2BACnC41tB,MAAO,kBAAmB51tB,KAAM,wCAChC41tB,MAAO,mBAAoB51tB,KAAM,yBACjC41tB,MAAO,mBAAoB51tB,KAAM,wBACjC41tB,MAAO,oBAAqB51tB,KAAM,0BAClC41tB,MAAO,kBAAmB51tB,KAAM,wBAChC41tB,MAAO,kBAAmB51tB,KAAM,wBAChC41tB,MAAO,qBAAsB51tB,KAAM,2BACnC41tB,MAAO,iBAAkB51tB,KAAM,uBAC/B41tB,MAAO,iBAAkB51tB,KAAM,uBAC/B41tB,MAAO,iBAAkB51tB,KAAM,uBAC/B41tB,MAAO,qBAAsB51tB,KAAM,2BACnC41tB,MAAO,wBAAyB51tB,KAAM,8BACtC41tB,MAAO,sBAAuB51tB,KAAM,4BACpC41tB,MAAO,sBAAuB51tB,KAAM,4BACpC41tB,MAAO,wBAAyB51tB,KAAM,8BACtC41tB,MAAO,gBAAiB51tB,KAAM,sBAC9B41tB,MAAO,mBAAoB51tB,KAAM,8CACjC41tB,MAAO,oBAAqB51tB,KAAM,0BAClC41tB,MAAO,mBAAoB51tB,KAAM,yBACjC41tB,MAAO,gBAAiB51tB,KAAM,sBAC9B41tB,MAAO,iCAAkC51tB,KAAM,6BAC/C41tB,MAAO,uBAAwB51tB,KAAM,6BACrC41tB,MAAO,kBAAmB51tB,KAAM,wBAChC41tB,MAAO,iBAAkB51tB,KAAM,uBAC/B41tB,MAAO,oBAAqB51tB,KAAM,0BAClC41tB,MAAO,kBAAmB51tB,KAAM,wBAChC41tB,MAAO,iBAAkB51tB,KAAM,uBAC/B41tB,MAAO,mBAAoB51tB,KAAM,yBACjC41tB,MAAO,qBAAsB51tB,KAAM,2BACnC41tB,MAAO,oBAAqB51tB,KAAM,uBAClC41tB,MAAO,qBAAsB51tB,KAAM,2BACnC41tB,MAAO,uBAAwB51tB,KAAM,6BACrC41tB,MAAO,iBAAkB51tB,KAAM,uBAC/B41tB,MAAO,qBAAsB51tB,KAAM,wBACnC41tB,MAAO,gBAAiB51tB,KAAM,yBAC9B41tB,MAAO,mBAAoB51tB,KAAM,yBACjC41tB,MAAO,mBAAoB51tB,KAAM,wBACjC41tB,MAAO,kBAAmB51tB,KAAM,wBAChC41tB,MAAO,oBAAqB51tB,KAAM,0BAClC41tB,MAAO,yBAA0B51tB,KAAM,8BACvC41tB,MAAO,kBAAmB51tB,KAAM,uBAChC41tB,MAAO,sBAAuB51tB,KAAM,2BACpC41tB,MAAO,uBAAwB51tB,KAAM,6BACrC41tB,MAAO,iBAAkB51tB,KAAM,wBAC/B41tB,MAAO,eAAgB51tB,KAAM,sBAC7B41tB,MAAO,gBAAiB51tB,KAAM,uBAC9B41tB,MAAO,kBAAmB51tB,KAAM,+BAChC41tB,MAAO,oBAAqB51tB,KAAM,2BAClC41tB,MAAO,uBAAwB51tB,KAAM,6BACrC41tB,MAAO,gBAAiB51tB,KAAM,uBAC9B41tB,MAAO,kBAAmB51tB,KAAM,yBAChC41tB,MAAO,iBAAkB51tB,KAAM,uBAC/B41tB,MAAO,UAAW51tB,KAAM,yCACxB41tB,MAAO,gBAAiB51tB,KAAM,uBAC9B41tB,MAAO,gBAAiB51tB,KAAM,uBAC9B41tB,MAAO,kBAAmB51tB,KAAM,yBAChC41tB,MAAO,qBAAsB51tB,KAAM,0BACnC41tB,MAAO,MAAO51tB,KAAM,QACpB41tB,MAAO,iBAAkB51tB,KAAM,wBAC/B41tB,MAAO,mBAAoB51tB,KAAM,0BACjC41tB,MAAO,iBAAkB51tB,KAAM,wBAC/B41tB,MAAO,gBAAiB51tB,KAAM,uBAC9B41tB,MAAO,kBAAmB51tB,KAAM,yBAChC41tB,MAAO,kBAAmB51tB,KAAM,yBAChC41tB,MAAO,kBAAmB51tB,KAAM,iDAChC41tB,MAAO,gBAAiB51tB,KAAM,+CAC9B41tB,MAAO,eAAgB51tB,KAAM,sBAC7B41tB,MAAO,oBAAqB51tB,KAAM,2BAClC41tB,MAAO,mBAAoB51tB,KAAM,0BACjC41tB,MAAO,eAAgB51tB,KAAM,sBAC7B41tB,MAAO,oBAAqB51tB,KAAM,2BAClC41tB,MAAO,gBAAiB51tB,KAAM,uBAC9B41tB,MAAO,eAAgB51tB,KAAM,sBAC7B41tB,MAAO,gBAAiB51tB,KAAM,uBAC9B41tB,MAAO,kBAAmB51tB,KAAM,yBAChC41tB,MAAO,cAAe51tB,KAAM,qBAC5B41tB,MAAO,eAAgB51tB,KAAM,sBAC7B41tB,MAAO,cAAe51tB,KAAM,qBAC5B41tB,MAAO,mBAAoB51tB,KAAM,0BACjC41tB,MAAO,gBAAiB51tB,KAAM,uBAC9B41tB,MAAO,eAAgB51tB,KAAM,sBAC7B41tB,MAAO,gBAAiB51tB,KAAM,uBAC9B41tB,MAAO,gBAAiB51tB,KAAM,uBAC9B41tB,MAAO,gBAAiB51tB,KAAM,uBAC9B41tB,MAAO,aAAc51tB,KAAM,sBAC3B41tB,MAAO,gBAAiB51tB,KAAM,uBAC9B41tB,MAAO,cAAe51tB,KAAM,uBAC5B41tB,MAAO,mBAAoB51tB,KAAM,0BACjC41tB,MAAO,eAAgB51tB,KAAM,sBAC7B41tB,MAAO,kBAAmB51tB,KAAM,yBAChC41tB,MAAO,gBAAiB51tB,KAAM,yBAC9B41tB,MAAO,YAAa51tB,KAAM,qBAC1B41tB,MAAO,kBAAmB51tB,KAAM,yBAChC41tB,MAAO,iBAAkB51tB,KAAM,0BAC/B41tB,MAAO,sBAAuB51tB,KAAM,6BACpC41tB,MAAO,kBAAmB51tB,KAAM,yBAChC41tB,MAAO,cAAe51tB,KAAM,qBAC5B41tB,MAAO,gBAAiB51tB,KAAM,uBAC9B41tB,MAAO,qBAAsB51tB,KAAM,wCACnC41tB,MAAO,eAAgB51tB,KAAM,wBAC7B41tB,MAAO,cAAe51tB,KAAM,qBAC5B41tB,MAAO,eAAgB51tB,KAAM,sBAC7B41tB,MAAO,iBAAkB51tB,KAAM,wBAC/B41tB,MAAO,iBAAkB51tB,KAAM,wBAC/B41tB,MAAO,iBAAkB51tB,KAAM,wBAC/B41tB,MAAO,kBAAmB51tB,KAAM,yBAChC41tB,MAAO,eAAgB51tB,KAAM,wBAC7B41tB,MAAO,kBAAmB51tB,KAAM,yBAChC41tB,MAAO,eAAgB51tB,KAAM,sBAC7B41tB,MAAO,gBAAiB51tB,KAAM,mCAC9B41tB,MAAO,iBAAkB51tB,KAAM,wBAC/B41tB,MAAO,aAAc51tB,KAAM,sBAC3B41tB,MAAO,cAAe51tB,KAAM,uBAC5B41tB,MAAO,mBAAoB51tB,KAAM,sBACjC41tB,MAAO,cAAe51tB,KAAM,uBAC5B41tB,MAAO,YAAa51tB,KAAM,qBAC1B41tB,MAAO,aAAc51tB,KAAM,sBAC3B41tB,MAAO,cAAe51tB,KAAM,qBAC5B41tB,MAAO,mBAAoB51tB,KAAM,0BACjC41tB,MAAO,gBAAiB51tB,KAAM,mCAC9B41tB,MAAO,iBAAkB51tB,KAAM,wBAC/B41tB,MAAO,eAAgB51tB,KAAM,wBAC7B41tB,MAAO,eAAgB51tB,KAAM,wBAC7B41tB,MAAO,aAAc51tB,KAAM,sBAC3B41tB,MAAO,aAAc51tB,KAAM,sBAC3B41tB,MAAO,cAAe51tB,KAAM,uBAC5B41tB,MAAO,gBAAiB51tB,KAAM,yBAC9B41tB,MAAO,gBAAiB51tB,KAAM,yBAC9B41tB,MAAO,eAAgB51tB,KAAM,wBAC7B41tB,MAAO,mBAAoB51tB,KAAM,0BACjC41tB,MAAO,kBAAmB51tB,KAAM,yBAChC41tB,MAAO,oBAAqB51tB,KAAM,uBAClC41tB,MAAO,qBAAsB51tB,KAAM,0CACnC41tB,MAAO,gBAAiB51tB,KAAM,yBAC9B41tB,MAAO,eAAgB51tB,KAAM,wBAC7B41tB,MAAO,eAAgB51tB,KAAM,oCAC7B41tB,MAAO,gBAAiB51tB,KAAM,yBAC9B41tB,MAAO,cAAe51tB,KAAM,uBAC5B41tB,MAAO,eAAgB51tB,KAAM,wBAC7B41tB,MAAO,gBAAiB51tB,KAAM,uBAC9B41tB,MAAO,aAAc51tB,KAAM,sBAC3B41tB,MAAO,YAAa51tB,KAAM,iCAC1B41tB,MAAO,eAAgB51tB,KAAM,wBAC7B41tB,MAAO,oBAAqB51tB,KAAM,uBAClC41tB,MAAO,eAAgB51tB,KAAM,sBAC7B41tB,MAAO,cAAe51tB,KAAM,wBAC5B41tB,MAAO,eAAgB51tB,KAAM,wBAC7B41tB,MAAO,mBAAoB51tB,KAAM,0BACjC41tB,MAAO,mBAAoB51tB,KAAM,sBACjC41tB,MAAO,cAAe51tB,KAAM,sBAC5B41tB,MAAO,YAAa51tB,KAAM,qBAC1B41tB,MAAO,eAAgB51tB,KAAM,wBAC7B41tB,MAAO,mBAAoB51tB,KAAM,wCACjC41tB,MAAO,cAAe51tB,KAAM,uBAC5B41tB,MAAO,gBAAiB51tB,KAAM,qCAC9B41tB,MAAO,kBAAmB51tB,KAAM,2BAChC41tB,MAAO,iBAAkB51tB,KAAM,0BAC/B41tB,MAAO,oBAAqB51tB,KAAM,6BAClC41tB,MAAO,aAAc51tB,KAAM,sBAC3B41tB,MAAO,gBAAiB51tB,KAAM,yBAC9B41tB,MAAO,cAAe51tB,KAAM,uBAC5B41tB,MAAO,eAAgB51tB,KAAM,oCAC7B41tB,MAAO,iBAAkB51tB,KAAM,0BAC/B41tB,MAAO,cAAe51tB,KAAM,uBAC5B41tB,MAAO,mBAAoB51tB,KAAM,4BACjC41tB,MAAO,kBAAmB51tB,KAAM,qCAChC41tB,MAAO,iBAAkB51tB,KAAM,0BAC/B41tB,MAAO,YAAa51tB,KAAM,qBAC1B41tB,MAAO,gBAAiB51tB,KAAM,yBAC9B41tB,MAAO,eAAgB51tB,KAAM,oCAC7B41tB,MAAO,gBAAiB51tB,KAAM,sBAC9B41tB,MAAO,aAAc51tB,KAAM,sBAC3B41tB,MAAO,aAAc51tB,KAAM,sBAC3B41tB,MAAO,mBAAoB51tB,KAAM,sCACjC41tB,MAAO,4BAA6B51tB,KAAM,iCAC1C41tB,MAAO,qBAAsB51tB,KAAM,wCACnC41tB,MAAO,eAAgB51tB,KAAM,qBAC7B41tB,MAAO,mBAAoB51tB,KAAM,wCACjC41tB,MAAO,uBAAwB51tB,KAAM,6BACrC41tB,MAAO,kBAAmB51tB,KAAM,qBAChC41tB,MAAO,qBAAsB51tB,KAAM,wCACnC41tB,MAAO,mBAAoB51tB,KAAM,sBACjC41tB,MAAO,mBAAoB51tB,KAAM,sCACjC41tB,MAAO,mBAAoB51tB,KAAM,iDACjC41tB,MAAO,gBAAiB51tB,KAAM,sBAC9B41tB,MAAO,sBAAuB51tB,KAAM,4BACpC41tB,MAAO,iBAAkB51tB,KAAM,uBAC/B41tB,MAAO,eAAgB51tB,KAAM,oCAC7B41tB,MAAO,oBAAqB51tB,KAAM,wBAClC41tB,MAAO,iBAAkB51tB,KAAM,uBAC/B41tB,MAAO,kBAAmB51tB,KAAM,uBAChC41tB,MAAO,mBAAoB51tB,KAAM,yBACjC41tB,MAAO,oBAAqB51tB,KAAM,0BAClC41tB,MAAO,iBAAkB51tB,KAAM,uBAC/B41tB,MAAO,iBAAkB51tB,KAAM,wDAC/B41tB,MAAO,kBAAmB51tB,KAAM,sBAChC41tB,MAAO,iBAAkB51tB,KAAM,uBAC/B41tB,MAAO,eAAgB51tB,KAAM,qBAC7B41tB,MAAO,iBAAkB51tB,KAAM,uBAC/B41tB,MAAO,mBAAoB51tB,KAAM,yBACjC41tB,MAAO,oBAAqB51tB,KAAM,0BAClC41tB,MAAO,kBAAmB51tB,KAAM,wBAChC41tB,MAAO,eAAgB51tB,KAAM,qBAC7B41tB,MAAO,oBAAqB51tB,KAAM,0BAClC41tB,MAAO,eAAgB51tB,KAAM,qBAC7B41tB,MAAO,qBAAsB51tB,KAAM,2BxrBoSrC6pB,MAcA5D,IAAY,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MAGhDhB,IAAY,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IACxDkB,IAAY,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MAChDT,GAAgB,GAChBoC,GAAW,IACXsB,GAAa,IACblE,IAAW,QAAS,SAAU,QAAS,SAAU,QAEjD2wsB,GAAQ,eACRC,GAAK,YAELC,GAAQ,QACRC,GAAQ,eACRC,GAAO,aACPC,GAAQ,cACRC,GAAS,eACTC,GAAQ,cACRjxsB,IACAkxsB,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,OyrBzmBJ7lD,GAA2B,WAI3B,SAASA,EAAUnkuB,GACfN,KAAKuqxB,SACLvqxB,KAAKM,OAASA,EACdN,KAAKwkG,SAAW,IAAIkkrB,GA0jBxB,OAxjBAjkD,EAAUppuB,UAAU0jF,YAAc,SAAUp1E,EAAQ6gxB,EAAqBC,GACrE,IAAIltxB,EAAQyC,KAAKM,OAAO69wB,WAAWjmsB,YAC/Br5D,EAAM7e,KAAKM,OAAO69wB,WAAWhmsB,UAC7BvsD,EAAS5rB,KAAKM,OAAO4lxB,YACzBlmxB,KAAKM,OAAO0lxB,mBACZ,IAAI0E,KACA38vB,EAAO,EACPima,GAAa,EACbrqb,EAAOlN,OAAS,GAAKgB,EAAkBkM,EAAO,GAAGiiB,EAAOtoB,OACxD0wb,GAAa,GAEjB,IAAK,IAAI51b,EAAK,EAAGusxB,EAAWhhxB,EAAQvL,EAAKusxB,EAASluxB,OAAQ2B,IAAM,CAC5D,IAAIoV,EAAUm3wB,EAASvsxB,GACnB41b,IACAxgb,EAAQoY,EAAOtoB,IAAMyqB,KAEgB,iBAA9Bva,EAAQoY,EAAO1L,aACtB1M,EAAQoY,EAAO1L,WAAa0qwB,GAAuBp3wB,EAAQoY,EAAO1L,aAE/B,iBAA5B1M,EAAQoY,EAAO0iM,WACtB96M,EAAQoY,EAAO0iM,SAAWs8jB,GAAuBp3wB,EAAQoY,EAAO0iM,WAEhEk8jB,EACAxqxB,KAAK6qxB,sBAAsBr3wB,EAASi3wB,GAGpCzqxB,KAAK8qxB,gBAAgBt3wB,IAEpB/V,EAAkB+V,EAAQoY,EAAOm/vB,kBAAoBttxB,EAAkB+V,EAAQoY,EAAOo/vB,eACvFN,EAAYA,EAAUnwwB,OAAOva,KAAKirxB,mBAAmBz3wB,KAGrDA,EAAQ2nQ,KAAOn7Q,KAAKkrxB,eACpBR,EAAUlmxB,KAAKgP,IAIvB,OADAxT,KAAKM,OAAO0lxB,gBAAkBhmxB,KAAKmrxB,aAAa5txB,EAAOshB,EAAK6rwB,GACrDA,GAEXjmD,EAAUppuB,UAAU+vxB,uBAAyB,SAAUX,GACnD,IAAIC,EAAY1qxB,KAAK++E,YAAY/+E,KAAKM,OAAO+qxB,YAAY,EAAMZ,GAC/DzqxB,KAAKM,OAAOyN,OAAOu9wB,IAAmBC,cAAeb,KAEzDjmD,EAAUppuB,UAAUwvxB,sBAAwB,SAAUvuxB,EAAOmuxB,GACzD,IAAI7+vB,EAAS5rB,KAAKM,OAAO4lxB,YACrBuE,GAAezqxB,KAAKM,OAAOkkG,UAC3BloG,EAAMsvB,EAAO1L,WAAalgB,KAAKwkG,SAASkkL,QAAQpsR,EAAMsvB,EAAO1L,WAAYuqwB,EAAazqxB,KAAKM,OAAOkkG,UAClGloG,EAAMsvB,EAAO0iM,SAAWtuN,KAAKwkG,SAASkkL,QAAQpsR,EAAMsvB,EAAO0iM,SAAUm8jB,EAAazqxB,KAAKM,OAAOkkG,YAExFimrB,GAAezqxB,KAAKM,OAAOkkG,UACjCloG,EAAMsvB,EAAO1L,WAAalgB,KAAKwkG,SAASpgG,IAAI9H,EAAMsvB,EAAO1L,WAAYlgB,KAAKM,OAAOkkG,UACjFloG,EAAMsvB,EAAO0iM,SAAWtuN,KAAKwkG,SAASpgG,IAAI9H,EAAMsvB,EAAO0iM,SAAUtuN,KAAKM,OAAOkkG,WAExEimrB,IAAgBzqxB,KAAKM,OAAOkkG,WACjCloG,EAAMsvB,EAAO1L,WAAalgB,KAAKwkG,SAASjgG,OAAOjI,EAAMsvB,EAAO1L,WAAYuqwB,GACxEnuxB,EAAMsvB,EAAO0iM,SAAWtuN,KAAKwkG,SAASjgG,OAAOjI,EAAMsvB,EAAO0iM,SAAUm8jB,KAG5EhmD,EAAUppuB,UAAUyvxB,gBAAkB,SAAUxuxB,GAC5C,IAAIsvB,EAAS5rB,KAAKM,OAAO4lxB,YACzB,GAAI5pxB,EAAMsvB,EAAO4/vB,gBAAkBlvxB,EAAMsvB,EAAO6/vB,aAAc,CAC1D,IAAID,EAAgBlvxB,EAAMsvB,EAAO4/vB,gBAAkBlvxB,EAAMsvB,EAAO6/vB,aAC5DA,EAAcnvxB,EAAMsvB,EAAO6/vB,cAAgBnvxB,EAAMsvB,EAAO4/vB,eAG5D,GAFAlvxB,EAAMsvB,EAAO1L,WAAalgB,KAAKwkG,SAASpgG,IAAI9H,EAAMsvB,EAAO1L,WAAYsrwB,GACrElvxB,EAAMsvB,EAAO0iM,SAAWtuN,KAAKwkG,SAASpgG,IAAI9H,EAAMsvB,EAAO0iM,SAAUm9jB,GAC7DzrxB,KAAKM,OAAOkkG,SAAU,CACtB,IAAIknrB,EAAO1rxB,KAAKM,OAAOkkG,SACvBloG,EAAMsvB,EAAO1L,WAAalgB,KAAKwkG,SAASkkL,QAAQpsR,EAAMsvB,EAAO1L,WAAYsrwB,EAAeE,GACxFpvxB,EAAMsvB,EAAO0iM,SAAWtuN,KAAKwkG,SAASkkL,QAAQpsR,EAAMsvB,EAAO0iM,SAAUm9jB,EAAaC,SAGjF1rxB,KAAKM,OAAOkkG,WACjBloG,EAAMsvB,EAAO1L,WAAalgB,KAAKwkG,SAASpgG,IAAI9H,EAAMsvB,EAAO1L,WAAYlgB,KAAKM,OAAOkkG,UACjFloG,EAAMsvB,EAAO0iM,SAAWtuN,KAAKwkG,SAASpgG,IAAI9H,EAAMsvB,EAAO0iM,SAAUtuN,KAAKM,OAAOkkG,YAGrFigoB,EAAUppuB,UAAU8vxB,aAAe,SAAUjzsB,EAAWC,EAASitsB,EAAcuG,QACtD,IAAjBvG,IAA2BA,EAAeplxB,KAAKM,OAAO0lxB,iBAC1D,IAAI4F,EAAe5rxB,KAAKM,OAAO4lxB,YAC3B/otB,EAAY,IAAIwH,GAAUintB,EAAa1rwB,UAAW,qBAAsBg4D,GACxErT,IAAI,IAAIF,GAAUintB,EAAat9jB,QAAS,qBAAsBp2I,IAC9DrT,IAAI,IAAIF,GAAUintB,EAAa1rwB,UAAW,WAAYi4D,IACtDrT,GAAG,IAAIH,GAAUintB,EAAa1rwB,UAAW,kBAAmBg4D,GAC5DrT,IAAI,IAAIF,GAAUintB,EAAat9jB,QAAS,cAAep2I,KACvDlxC,EAAS,IAAIw8B,IAAcE,KAAM0htB,IAAgBnhtB,cAAa,IAAIZ,IAAQQ,MAAM1G,IAIpF,OAHIwutB,IACA3kvB,EAAShnC,KAAK6rxB,uBAAuBF,EAAgB3kvB,IAElDhnC,KAAK8rxB,WAAW9kvB,IAE3By9rB,EAAUppuB,UAAUwwxB,uBAAyB,SAAUF,EAAgBvG,QAC9C,IAAjBA,IAA2BA,EAAeplxB,KAAKM,OAAO0lxB,iBAG1D,IAAK,IAFD7otB,EACA4utB,EAAqB/rxB,KAAKM,OAAO0rxB,aAAaD,mBACzC55nB,EAAQ,EAAGA,EAAQ45nB,EAAmBtvxB,OAAQ01J,IAAS,CAC5D,IAAIpuF,EAAW/jE,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAMk5rB,gBAAkBF,EAAmB55nB,GAAO+5nB,cAC3F,WAAa,QACbC,EAAgB,IAAIxntB,GAAUontB,EAAmB55nB,GAAOpmI,MAAOg4C,EAAU4ntB,EAAeS,WAAWj6nB,IACvGh1F,EAAYA,EAAYA,EAAU0H,IAAIsntB,GAAiBA,EAE3D,OAAO,IAAI3otB,IAAcE,KAAM0htB,IAAgBnhtB,cAAa,IAAIZ,IAAQQ,MAAM1G,KAElFsnqB,EAAUppuB,UAAUywxB,WAAa,SAAU1G,GACvC,IAAIwG,EAAe5rxB,KAAKM,OAAO4lxB,YAM/B,OALAd,EAAavtvB,KAAK,SAAUsrB,EAAGrmB,GAC3B,IAAIuvvB,EAAKlpuB,EAAEyouB,EAAa1rwB,WACpBoswB,EAAKxvvB,EAAE8uvB,EAAa1rwB,WACxB,OAAOmswB,EAAGpswB,UAAYqswB,EAAGrswB,YAEtBmlwB,GAEX3gD,EAAUppuB,UAAUkxxB,eAAiB,SAAUnH,GAC3C,IAAIwG,EAAe5rxB,KAAKM,OAAO4lxB,YAU/B,OATAd,EAAavtvB,KAAK,SAAU20vB,EAASC,GACjC,IAAIC,EAAKF,EAAQZ,EAAa1rwB,WAC1ByswB,EAAKF,EAAQb,EAAa1rwB,WAC1B0swB,EAAKJ,EAAQZ,EAAat9jB,SAC1Bu+jB,EAAKJ,EAAQb,EAAat9jB,SAC1B+9jB,EAAKO,EAAG3swB,UAAYyswB,EAAGzswB,UACvBqswB,EAAKO,EAAG5swB,UAAY0swB,EAAG1swB,UAC3B,OAAQyswB,EAAGzswB,UAAY0swB,EAAG1swB,WAAaqswB,EAAKD,IAEzCjH,GAEX3gD,EAAUppuB,UAAUyxxB,yBAA2B,SAAU73tB,GAErD,IAAK,IADD83tB,EAAQ1gxB,KAAKC,IAAI/Q,MAAM8Q,KAAM4oD,GACxB94D,EAAI,EAAGA,EAAI4wxB,EAAO5wxB,IACvB,IAA0B,IAAtB84D,EAAM12D,QAAQpC,GACd,OAAOA,EAGf,OAAO4wxB,EAAQ,GAEnBtoD,EAAUppuB,UAAU2xxB,gBAAkB,SAAU1wxB,GAC5C,IAAI4pxB,EAAclmxB,KAAKM,OAAO4lxB,YAC1B1pxB,KACAywxB,EAAiB3wxB,EAAM4pxB,EAAYhmwB,WACnCgtwB,EAAe5wxB,EAAM4pxB,EAAY53jB,SAGrC,GAFsB4vjB,GAAe,IAAIl+vB,KAAKitwB,EAAehtwB,YACzDi+vB,GAAe,IAAIl+vB,KAAKktwB,EAAajtwB,YAQrC,IANA,IAAI1iB,EAAQ,IAAIyiB,KAAKitwB,EAAehtwB,WAChCpB,EAAMsuwB,GAAajP,GAAe,IAAIl+vB,KAAKitwB,EAAehtwB,YAAa,GACvEk4D,EAAuC,IAA5B+0sB,EAAa9mtB,YAAkD,IAA9B8mtB,EAAa5mtB,aACzD4mtB,EAAeC,GAAaD,EAAc,GAC1Cj7wB,EAAQ,EACRulb,EAAc41V,GAAkBH,EAAehtwB,UAAWk4D,EAAQl4D,WAC/DpB,GAAOquwB,GAAc,CACxB,IAAIG,EAAM3uxB,KAAWpC,GACrB+wxB,EAAInH,EAAYhmwB,WAAa3iB,EAC7B8vxB,EAAInH,EAAY53jB,SAAWzvM,EAC3BwuwB,EAAI7wxB,MAASyV,MAAOA,EAAO6M,MAAO04a,GAClC61V,EAAIlygB,KAAOn7Q,KAAKkrxB,eAChBmC,EAAI92J,WAAY,EAChB/5nB,EAAKgI,KAAK6oxB,GACV9vxB,EAAQshB,EAGJA,EAFC,IAAImB,KAAKziB,EAAM0iB,WAAWwkD,SAAS,EAAG,EAAG,EAAG,KAAO,IAAIzkD,KAAKktwB,EAAajtwB,WAAWwkD,SAAS,EAAG,EAAG,EAAG,IAClG5lD,EAAIoB,YAAcitwB,EAAajtwB,UAC9B,IAAID,KAAK,IAAIA,KAAKziB,EAAM0iB,WAAWwkD,SAASyotB,EAAa9mtB,WAAY8mtB,EAAa5mtB,eAGlF6mtB,GAAajP,GAAe,IAAIl+vB,KAAKziB,EAAM0iB,YAAa,GAElEhO,SAIJzV,EAAKgI,KAAKlI,GAEd,OAAOE,GAEXiouB,EAAUppuB,UAAUiyxB,WAAa,SAAUhxxB,EAAOixxB,GAC9C,IAAI3hwB,EAAS5rB,KAAKM,OAAO4lxB,YACrB3oxB,EAAQ2gxB,GAAe,IAAIl+vB,KAAK1jB,EAAMsvB,EAAO1L,WAAa,KAAKD,UAC/DpB,EAAMq/vB,GAAe,IAAIl+vB,KAAK1jB,EAAMsvB,EAAO0iM,SAAW,KAAKruM,UAC/D,GAAIutwB,GAAiBlxxB,EAAMsvB,EAAO0iM,WAAa,EAAG,CAC9C,IAAIvgM,EAAOo/vB,GAAajP,GAAe,IAAIl+vB,KAAK1jB,EAAMsvB,EAAO0iM,SAAW,MAAO,GAAGruM,UAClFpB,EAAMthB,EAAQwwB,EAAOxwB,EAAQwwB,EAEjC,IAAI0/vB,EAAWlwxB,EACXmwxB,EAAS7uwB,EACTioB,KACJ,GAAIvpC,IAAUshB,EAAK,CACXthB,EAAQgwxB,EAAW,GAAGttwB,YACtB1iB,EAAQgwxB,EAAW,GAAGttwB,WAEtBpB,EAAM0uwB,EAAWA,EAAW9wxB,OAAS,GAAGwjB,YACxCpB,EAAM0uwB,EAAWA,EAAW9wxB,OAAS,GAAGwjB,WAG5C,IAAK,IADDkypB,EAAS50qB,EACJ40J,EAAQ,EAAGA,EAAQnyJ,KAAKuqxB,MAAM9txB,OAAQ01J,IAAS,CACpD,IAAIw7nB,EAAO3txB,KAAKuqxB,MAAMp4nB,GAClBy7nB,EAAYD,EAAK,GAErB,IADAx7G,EAAUA,GAAUy7G,GAAa/uwB,GAAO+uwB,EAAaA,EAAYz7G,GACpDtzpB,GAAO+uwB,EAAY/uwB,EAC5B,MAEJ,IAAK7e,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAM86rB,QAAU7txB,KAAKM,OAAOi+wB,kBAAkBuP,aACjD,aAA5B9txB,KAAKM,OAAOotM,YAA4B,CACxC,IAAIhoL,EAAaiowB,EAAKpvxB,QAAQ4zqB,GAC9B,IAAoB,IAAhBzspB,EAAmB,CACnB,IAAIE,EAAW+nwB,EAAKpvxB,QAAQsgB,GACxBkvwB,GAAyB,IAAdnowB,EAEX9G,GADJ8G,EAAWmowB,EAAWnowB,EAAW+nwB,EAAKlxxB,OAAS,GACtBipB,EAAc,EACnCm+Q,EAAU8pf,EAAKjowB,KAAgB+nwB,EAC/B7rf,EAAW+rf,EAAK/nwB,KAAc8nwB,EAElC,GADA5mvB,EAAOtiC,KAAKxE,KAAKguxB,iBAAiB1xxB,EAAOqxxB,EAAKjowB,GAAaiowB,EAAK/nwB,GAAW9G,EAAO+kR,EAAQjC,IACtFmsf,EACA,YAKR,GAAI/txB,KAAKiuxB,YAAY97G,EAAQw7G,EAAK,GAAIA,EAAKA,EAAKlxxB,OAAS,IAAK,CAE1D,IAAK,IADDyxxB,KACK/xxB,EAAI,EAAGA,EAAIwxxB,EAAKlxxB,OAAQN,IACzB6D,KAAKiuxB,YAAYN,EAAKxxxB,GAAIsxxB,EAAUC,IACpCQ,EAAU1pxB,KAAKmpxB,EAAKxxxB,IAG5B,GAAI+xxB,EAAUzxxB,OAAS,EACnB,GAAKuD,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAM86rB,OAMrC,IAAK,IAAIzvxB,EAAK,EAAG+vxB,EAAcD,EAAW9vxB,EAAK+vxB,EAAY1xxB,OAAQ2B,IAAM,CACrE,IAAIgwxB,EAASD,EAAY/vxB,GACzB0oC,EAAOtiC,KAAKxE,KAAKguxB,iBAAiB1xxB,EAAO8xxB,EAAQA,EAAQ,EAAIA,IAAWX,EAAYW,IAAWV,QARtD,CACzC7pf,EAAUqqf,EAAU,KAAOT,EAC3B7rf,EAAWssf,EAAUA,EAAUzxxB,OAAS,KAAOixxB,EACnD5mvB,EAAOtiC,KAAKxE,KAAKguxB,iBAAiB1xxB,EAAO4xxB,EAAU,GAAIA,EAAUA,EAAUzxxB,OAAS,GAAIyxxB,EAAUzxxB,OAAQonS,EAAQjC,YActI96P,EAAOtiC,KAAKxE,KAAKguxB,iBAAiB1xxB,EAAOiB,EAAOshB,EAAK,GAAG,GAAO,IAEnE,OAAOioB,GAEX29rB,EAAUppuB,UAAU2yxB,iBAAmB,SAAU1xxB,EAAOiB,EAAOshB,EAAKC,EAAO+kR,EAAQjC,GAC/E,IAAIh2Q,EAAS5rB,KAAKM,OAAO4lxB,YACrBrlxB,EAAInC,KAAWpC,EAAO,MAAM,GAC5BE,GAASsiB,MAAOA,EAAO+kR,OAAQA,EAAQjC,QAASA,GAMpD,OALAplS,EAAKovB,EAAO1L,WAAa5jB,EAAMsvB,EAAO1L,WACtC1jB,EAAKovB,EAAO0iM,SAAWhyN,EAAMsvB,EAAO0iM,SACpCztN,EAAErE,KAAOA,EACTqE,EAAE+qB,EAAO1L,WAAa,IAAIF,KAAKziB,GAC/BsD,EAAE+qB,EAAO0iM,SAAW,IAAItuM,KAAKnB,GACtBhe,GAEX4juB,EAAUppuB,UAAU4yxB,YAAc,SAAUt3sB,EAAMp5E,EAAOshB,GACrD,OAAOthB,GAASo5E,GAAQA,GAAQ93D,GAEpC4ltB,EAAUppuB,UAAU4nxB,yBAA2B,SAAU97wB,GAErD,GADAnH,KAAKskxB,iCACDtkxB,KAAKM,OAAOktW,iBAAiB/wW,QAAU,EACvCuD,KAAKM,OAAOktW,iBAAiBhpW,KAAK2C,OAEjC,CAID,GAHwBnH,KAAKM,OAAOktW,iBAAiBxmU,OAAO,SAAUhmC,GAClE,OAAOA,EAAQ6R,aAAa,eAAiB1L,EAAO0L,aAAa,eAE/CpW,QAAU,EAG5B,IAAK,IAAI2B,EAAK,EAAGiwxB,KAFMhtxB,MAAMC,KAAKtB,KAAKM,OAAOU,QAC1CQ,iBAAiB,kBAAoB2F,EAAO0L,aAAa,aAAe,OAC1BzU,EAAKiwxB,EAAgB5xxB,OAAQ2B,IAAM,CACjF,IAAI4C,EAAUqtxB,EAAgBjwxB,GAC9B4B,KAAKM,OAAOktW,iBAAiBhpW,KAAKxD,OAGrC,CACD,IAAIwsW,EAAmBxtW,KAAKM,OAAOktW,iBAAiBxmU,OAAO,SAAUhmC,GACjE,OAAOA,EAAQ6R,aAAa,eAAiB1L,EAAO0L,aAAa,eAErE7S,KAAKM,OAAOktW,iBAAmBA,GAMvC,OAHIrmW,GAAUnH,KAAKM,OAAOktW,iBAAiB/wW,OAAS,GAChDuD,KAAKylxB,wBAAwBzlxB,KAAKM,OAAOktW,iBAAkBxtW,KAAKM,OAAOktW,iBAAiB,IAErFxtW,KAAKM,OAAOktW,kBAEvBi3X,EAAUppuB,UAAUgtxB,kBAAoB,WACpC,IAAItoxB,EAAQC,KACRsuxB,KACAC,KAMJ,SAL4BltxB,MAAMC,KAAKtB,KAAKM,OAAOU,QAAQQ,iBAAiB,IAAM2mxB,KAC/DnhvB,OAAO,SAAUhmC,EAASiR,EAAOu8wB,GAChDF,EAAY9pxB,KAAKzE,EAAMymxB,eAAexlxB,EAAQ6R,aAAa,eAC3D07wB,EAAc/pxB,KAAKxD,MAGnB1E,MAAOgyxB,EAAY7xxB,OAAS,EAAI6xxB,EAAcA,EAAY,GAC1DttxB,QAASutxB,EAAc9xxB,OAAS,EAAI8xxB,EAAgBA,EAAc,KAG1E9pD,EAAUppuB,UAAUipxB,+BAAiC,WAEjD,IAAK,IADD+C,EAAuBrnxB,KAAK6mxB,0BACvBzoxB,EAAK,EAAGqwxB,EAAyBpH,EAAsBjpxB,EAAKqwxB,EAAuBhyxB,OAAQ2B,IAAM,CACpFqwxB,EAAuBrwxB,GAC7BoF,aAAa,gBAAiB,SAE9Ca,EAAYgjxB,EAAsBc,IACF,WAA5BnoxB,KAAKM,OAAOotM,aAAwD,gBAA5B1tM,KAAKM,OAAOotM,aACpDrpM,EAAYgjxB,EAAsB3B,KAG1CjhD,EAAUppuB,UAAUoqxB,wBAA0B,SAAU3jtB,EAAOsitB,GAC3D,IAAK,IAAIhmxB,EAAK,EAAG65nB,EAAUn2jB,EAAO1jE,EAAK65nB,EAAQx7nB,OAAQ2B,IAAM,CAC9C65nB,EAAQ75nB,GACdoF,aAAa,gBAAiB,QAEvCG,EAASm+D,EAAOqmtB,KAEpB1jD,EAAUppuB,UAAUwrxB,wBAA0B,WAC1C,SAAUxlxB,MAAMC,KAAKtB,KAAKM,OAAOU,QAAQQ,iBAAiB,IAAM2mxB,GAAyB,KAAO5H,GAAwB,YAE5H97C,EAAUppuB,UAAUkgrB,aAAe,WAC/B,IAAIv3G,EAAehkkB,KAAKM,OAAOqmxB,sBAC/B,GAAI3iN,EAAavnkB,OAAS,GACtB,GAAIuD,KAAKM,OAAOouxB,0BAA2B,CACvC,IAAIvnxB,EAAUnH,KAAKM,OAAO+9wB,gBAAgBr9wB,SACtCgjkB,EAAaA,EAAavnkB,OAAS,GACvCuD,KAAKM,OAAOouxB,0BAA0Bl1I,aAAY,EAAOryoB,QAJjE,CAQA,IAAIkgxB,EAAuBrnxB,KAAK6mxB,0BAC5BQ,EAAqB5qxB,OAAS,GAC9B4qxB,EAAqBA,EAAqB5qxB,OAAS,GAAGyF,UAI9DuiuB,EAAUppuB,UAAUorxB,qBAAuB,SAAU4E,GACjD,IAAIlkxB,EACJ,GAAgC,WAA5BnH,KAAKM,OAAOotM,aAAwD,gBAA5B1tM,KAAKM,OAAOotM,YACpD,OAAOvmM,EAEX,GAAIkkxB,EAAW5uxB,OAAS,EAAG,CACvB,IAAI4+Z,EAAiBgwX,EAAWA,EAAW5uxB,OAAS,GAChDwwxB,EAAiB5xX,EAAer7Z,KAAKM,OAAO4lxB,YAAYhmwB,WACxDyuwB,EAAc,IAAI3uwB,MAAMitwB,GAAgB5mtB,WAAW,EAAG,EAAG,GACzDq4sB,EAAW1+wB,KAAK4uxB,oBAAoBvzX,IACR,UAA5Br7Z,KAAKM,OAAOotM,aAA2BgxkB,KACvCiQ,EAAc,IAAI3uwB,MAAMitwB,GAAgBxotB,SAAS,EAAG,EAAG,EAAG,IAE9D,IAAIoqtB,OAAa,EAEbA,EADAnQ,IAA8E,KAAjE,MAAO,OAAQ,YAAYngxB,QAAQyB,KAAKM,OAAOotM,aAC/C1tM,KAAKM,OAAOyixB,eAGZ/ixB,KAAKM,OAAOysoB,kBAE7B,IAAInykB,EAAc,eAAiB+ztB,EAAc,KAKjD,GAJI3uxB,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAMq4I,UAAU3uO,OAAS,IACvDm+D,GAAe,sBAAwB56D,KAAK8uxB,uBAAuBzzX,GAAkB,MAEzFl0Z,EAAS0nxB,EAAWlsxB,cAAci4D,GAM9B,OAJA56D,KAAKM,OAAO+9wB,gBAAkBr+wB,KAAKM,OAAOqgxB,eAAex5wB,GACrDnH,KAAKM,OAAOouxB,2BACZ1uxB,KAAKM,OAAOouxB,0BAA0Bl1I,aAAY,EAAOryoB,GAEtDA,EAGf,OAAOA,GAEXs9tB,EAAUppuB,UAAUyzxB,uBAAyB,SAAUzpsB,GAGnD,IAAK,IAFD+msB,KACAj/F,EAAa,EACR/urB,EAAK,EAAGyE,EAAK7C,KAAKM,OAAO0rxB,aAAaD,mBAAoB3txB,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACrF,IAAI2wxB,EAAelsxB,EAAGzE,GACtBguxB,EAAW5nxB,KAAK6gF,EAAU0psB,EAAahjwB,QAe3C,OAbA/rB,KAAKM,OAAO0rxB,aAAagD,kBAAkB5vxB,QAAQ,SAAU6xQ,GACzD,IAAInyP,EACA8wI,EAAQqhH,EAASm7gB,WACrBx8nB,EAAMxwJ,QAAQ,SAAU6vxB,EAAUh9wB,IACdm6wB,EAAWn6wB,aAAkBzT,MAAS4txB,EAAWn6wB,GAAOA,GAASm6wB,EAAWn6wB,MAC3Eg9wB,IACbnwwB,EAAQA,EAAQA,EAAQ,EAAI,KAGhC8wI,EAAMnzJ,SAAWqiB,IACjBquqB,EAAal8a,EAASk8a,cAGvBA,GAEXs3C,EAAUppuB,UAAUuzxB,oBAAsB,SAAUtyxB,GAChD,IAAIsvxB,EAAe5rxB,KAAKM,OAAO4lxB,YAC3BxH,EAAWpixB,EAAMsvxB,EAAalN,UAC9BwQ,GAAc5yxB,EAAMsvxB,EAAat9jB,SAASruM,UAAY3jB,EAAMsvxB,EAAa1rwB,WAAWD,WAClFomwB,IAAoB,EAC1B,SAAQ3H,IAAYwQ,IAExBzqD,EAAUppuB,UAAUqB,iBAAmB,WACnCsD,KAAKM,OAAOslF,GAAGupsB,GAAqBnvxB,KAAKovxB,wBAAyBpvxB,OAEtEykuB,EAAUppuB,UAAU+zxB,wBAA0B,SAAU9yxB,MACpC+E,MAAMC,KAAKtB,KAAKM,OAAOU,QAAQQ,iBAAiB,IAAM++wB,KAAtE,IACIv/wB,EAAU1E,EAAMA,MAAM6K,OACtBtB,EAAQ7E,EAAS,IAAMu/wB,IACvBvgxB,KAAKM,OAAOokxB,sBAEN7+wB,EAAQ7E,EAAS,IAAM+8wB,KAC7B/9wB,KAAKskxB,kCAGb7/C,EAAUppuB,UAAUg0xB,sBAAwB,SAAUruxB,GAClDuE,GAAanB,IAAIpD,EAAS,QAAShB,KAAKy2wB,WAAYz2wB,MACpDuF,GAAanB,IAAIpD,EAAS,WAAYhB,KAAKsvxB,iBAAkBtvxB,OAEjEykuB,EAAUppuB,UAAUo7wB,WAAa,SAAUpxrB,GACvC,GAAIA,EAAUx9D,SAA+B,IAApBw9D,EAAUsxB,OAAe32G,KAAKM,OAAOouxB,0BAI1D,OAHA1uxB,KAAKM,OAAOgoxB,WAAWA,WAAW/msB,OAClCvhF,KAAKM,OAAOktW,oBAAsBnsW,MAAMC,KAAKtB,KAAKM,OAAOU,QAAQQ,iBAAiB,IAAM2mxB,UACxFnoxB,KAAKM,OAAOouxB,0BAA0B1L,uBAAuB39rB,GAGjErlF,KAAKskxB,iCACLtkxB,KAAKooxB,gBAAgB/isB,GACrB,IAAIplF,EAAOvB,EAAOsB,KAAKM,OAAO8nxB,iBAAmBvvvB,QAAQ,IACzD74B,KAAKM,OAAOkmB,QAAQ+owB,GAAkBtvxB,GAClCA,EAAK44B,OACL74B,KAAKskxB,kCAGuB,WAA5BtkxB,KAAKM,OAAOotM,aAAwD,gBAA5B1tM,KAAKM,OAAOotM,aACpD/pM,GAAU1D,EAAKe,SAAU0kxB,IAE7B1lxB,KAAKM,OAAOyN,OAAOwhxB,GAAkBvvxB,KAAKM,OAAO8nxB,mBAErD3jD,EAAUppuB,UAAUi0xB,iBAAmB,SAAUzuxB,GAC7Cb,KAAKM,OAAOgoxB,WAAWkH,gBAAe,GACvB,eAAX3uxB,EAAE6F,MACF1G,KAAKooxB,gBAAgBvnxB,GAEzBb,KAAKskxB,iCACL,IAAIsH,EAAe5rxB,KAAKM,OAAO4lxB,aAC1BzoxB,EAAkBuC,KAAKM,OAAO8nxB,gBAAgB9rxB,QAC/CmB,EAAkBuC,KAAKM,OAAO8nxB,gBAAgB9rxB,MAAMsvxB,EAAaZ,gBACjEhrxB,KAAKM,OAAOoia,cAAgB,OAC5B1ia,KAAKM,OAAOq+wB,YAAYC,WAAW5+wB,KAAKM,OAAO8nxB,gBAAgB9rxB,MAAO,UAGtE0D,KAAKM,OAAOoia,cAAgB,iBAC5B1ia,KAAKM,OAAOgoxB,WAAWmH,wBAG/BhrD,EAAUppuB,UAAUmrxB,eAAiB,SAAUx2lB,GAC3C,OAAO,IAAIxsH,IAAcE,KAAM1jE,KAAKM,OAAO0lxB,kBAAmB/htB,cAAa,IAAIZ,IAAQQ,MAAM,OAAQ,QAASmsH,IAAO,IAEzHy0iB,EAAUppuB,UAAU6vxB,aAAe,WAC/B,MAAO,uCAAuC37wB,QAAQ,QAAS,SAAU0uD,GACrE,IAAIrhC,EAAoB,GAAhBvwB,KAAK4S,SAAgB,EAE7B,OADe,MAANg/C,EAAarhC,EAAS,EAAJA,EAAU,GAC5B1vB,SAAS,OAG1Bu3tB,EAAUppuB,UAAUq0xB,cAAgB,WAChC,IAAI9jwB,EAAS5rB,KAAKM,OAAO4lxB,YACzB,OAAIlmxB,KAAKM,OAAO+qxB,WAAW5uxB,OAAS,EACzB,EAEJ4P,KAAKC,IAAI/Q,MAAM8Q,KAAMrM,KAAKM,OAAO+qxB,WAAWzzvB,IAAI,SAAUt7B,GAAS,OAAOA,EAAMsvB,EAAOtoB,QAElGmhuB,EAAUppuB,UAAU+sxB,gBAAkB,SAAU/isB,GAC5C,IAAIl+E,EAAStB,EAAQw/E,EAAUl+E,OAAQ,IAAMo5wB,IACzCvwlB,EAAO7oL,EAAO0L,aAAa,aAC/B7S,KAAKylxB,2BAA2BpkxB,MAAMC,KAAKtB,KAAKM,OAAOU,QAAQQ,iBAAiB,kBAAoBwuL,EAAO,QAC3G,IAAIi2lB,EAAcjmxB,KAAKwmxB,eAAex2lB,GACtC,GAAIi2lB,EAAY1vJ,UAAW,CACvB,IAAIuzF,EAAW9ptB,KAAKM,OAAO4lxB,YAC3BD,EAAcjmxB,KAAKM,OAAO+qxB,WAAWrkvB,OAAO,SAAUjqC,GAClD,OAAOA,EAAI+stB,EAASxmtB,MAAQ2ixB,EAAYn8D,EAASxmtB,MAClD,GAEPtD,KAAKM,OAAO8nxB,iBAAoB9rxB,MAAO2pxB,EAAajlxB,QAASmG,IAEjEs9tB,EAAUppuB,UAAU4vxB,mBAAqB,SAAU3uxB,EAAO88E,GACtD,IAAIxtD,EAAS5rB,KAAKM,OAAO4lxB,YACrBhusB,EAAY57E,EAAMsvB,EAAO1L,WACzBi4D,EAAU77E,EAAMsvB,EAAO0iM,SACvBqhkB,KACAC,EAAkBnyxB,EAAkB27E,GAAYp5E,KAAKM,OAAO69wB,WAAWjmsB,YAAckB,EACrFy2sB,EAAYvzxB,EAAMsvB,EAAOm/vB,gBACzBztrB,EAAQvkB,GAASb,EAAW23sB,EAAWvzxB,EAAMsvB,EAAOkkwB,qBAAsB9vxB,KAAKM,OAAOo2E,oBAAgBv7E,EAAWy0xB,GACrF,WAA5B5vxB,KAAKM,OAAOotM,cAA4D,IAAhCmilB,EAAUtxxB,QAAQ,WAAmD,IAAhCsxxB,EAAUtxxB,QAAQ,WAC3Fd,EAAkBnB,EAAMyzxB,gBACxBzzxB,EAAMyzxB,gBAAmBxyxB,MAAO,IAAIyiB,KAAKs9E,EAAM,IAAKz+E,IAAK,IAAImB,KAAKs9E,EAAMA,EAAM7gG,OAAS,MAGnF6gG,EAAM,GAAKhhG,EAAMyzxB,eAAexyxB,MAAM0iB,YACtC3jB,EAAMyzxB,eAAexyxB,MAAQ,IAAIyiB,KAAKs9E,EAAM,KAE5CA,EAAMA,EAAM7gG,OAAS,GAAKH,EAAMyzxB,eAAelxwB,IAAIoB,YACnD3jB,EAAMyzxB,eAAelxwB,IAAM,IAAImB,KAAKs9E,EAAMA,EAAM7gG,OAAS,OAMrE,IAFA,IAAIk6E,EAAO2mB,EAAM3f,QACbzyE,EAAWitE,EAAQl4D,UAAYi4D,EAAUj4D,UACtC02D,GAAM,CACT,IAAIhnB,EAAejxD,KAAWpC,EAAO,MAAM,GAC3CqzD,EAAa/jC,EAAO1L,WAAa,IAAIF,KAAK22D,GAC1ChnB,EAAa/jC,EAAO0iM,SAAW,IAAItuM,KAAK,IAAIA,KAAK22D,GAAMkyB,gBAAgB39F,IACvEykD,EAAa/jC,EAAOo/vB,cAAgBr7tB,EAAa/jC,EAAOtoB,IACxDqsD,EAAawrN,KAAOn7Q,KAAKkrxB,eACzByE,EAAqBnrxB,KAAKmrD,GAC1BgnB,EAAO2mB,EAAM3f,QAEjB,OAAOgysB,GAEXlrD,EAAUppuB,UAAU20xB,mBAAqB,SAAU3qsB,GAC/C,IAAI6gsB,EAAclmxB,KAAKM,OAAO4lxB,YAG9B,OAFgB,IAAI1itB,GAAYxjE,KAAKM,OAAO+qxB,YACxCpntB,cAAa,IAAIZ,IAAQQ,MAAMqitB,EAAY5ixB,GAAI,QAAS+hF,EAAU6gsB,EAAY8E,gBACjE,IAErBvmD,EAAUppuB,UAAU40xB,mBAAqB,SAAU3sxB,GAI/C,IAAK,IAHDsoB,EAAS5rB,KAAKM,OAAO4lxB,YACrByJ,KAEKvxxB,EAAK,EAAGyE,EADE7C,KAAKM,OAAO+qxB,WAAWrkvB,OAAO,SAAUjqC,GAAO,OAAOA,EAAI6uB,EAAOtoB,MAAQA,IACxDlF,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACtD,IAAI6tG,EAAUppG,EAAGzE,GACZX,EAAkBwuG,EAAQrgF,EAAOm/vB,mBAClC4E,EAAuBA,EAAqBp1wB,OAAOva,KAAKirxB,mBAAmBh/qB,KAGnF,OAAO0jrB,GAEXlrD,EAAUppuB,UAAU60xB,sBAAwB,SAAUhwwB,EAAWouM,GAG7D,IAAK,IAFD1iM,EAAS5rB,KAAKM,OAAO4lxB,YACrByJ,KACKvxxB,EAAK,EAAGyE,EAAK7C,KAAKM,OAAO+qxB,WAAYjtxB,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAChE,IAAI+xxB,EAAUttxB,EAAGzE,GACZX,EAAkB0yxB,EAAQvkwB,EAAOm/vB,mBAClC4E,EAAuBA,EAAqBp1wB,OAAOva,KAAKirxB,mBAAmBkF,KAMnF,OAHaR,EAAqB3ovB,OAAO,SAAUjqC,GAC/C,OAAOA,EAAI6uB,EAAO1L,YAAcA,GAAanjB,EAAI6uB,EAAO0iM,UAAYA,IAAY7wN,EAAkBV,EAAI6uB,EAAOo/vB,kBAIrHvmD,EAAUppuB,UAAU+0xB,mBAAqB,SAAUpvxB,EAASqkF,EAAW3+E,EAAM0lxB,EAAY7yiB,GACrF,GAAKv5O,KAAKM,OAAO0rxB,aAAjB,CAGA,IAOIx1vB,EAAQx2B,KAAKM,OAAO0rxB,aAAaqE,iBAAiBhrsB,EAAW+msB,GAC7D51vB,IAEAx1B,EAAQ0D,MAAMgC,GAASjJ,EAAkB87O,GAAoC/iN,EAVhE,SAAUA,EAAO+iN,GAC9B/iN,EAAQA,EAAMjnB,QAAQ,IAAK,IAI3B,MAAO,QAHCwlB,SAASyB,EAAMtS,UAAU,EAAGsS,EAAM/5B,OAAS,GAAI,IAGlC,KAFbs4B,SAASyB,EAAMtS,UAAUsS,EAAM/5B,OAAS,EAAG,EAAI+5B,EAAM/5B,OAAS,GAAI,IAE1C,KADxBs4B,SAASyB,EAAMtS,UAAU,EAAIsS,EAAM/5B,OAAS,EAAG,EAAI+5B,EAAM/5B,OAAS,GAAI,IACnC,KAAO88O,EAAQ,IAKR+2iB,CAAW95vB,EAAO+iN,MAGrEkrf,KCnkBP8rD,GAAsB,WACtB,SAASA,EAAKjwxB,GACVN,KAAKM,OAASA,EACdN,KAAKwkG,SAAW,IAAIkkrB,GA2OxB,OAzOA6H,EAAKl1xB,UAAUsnM,SAAW,WACtB,IAAIplM,EAAQyC,KAAKM,OAAO69wB,WAAWjmsB,YAC/Br5D,EAAM7e,KAAKM,OAAO69wB,WAAWhmsB,UACjC,OAAOn4E,KAAKM,OAAOmwU,WAAWC,cAAcnzU,EAAOshB,IAEvD0xwB,EAAKl1xB,UAAUm1xB,YAAc,SAAUvwxB,GACnC,IAAIF,EAAQC,KACRywxB,GAAerkmB,YAAansL,EAAKmsL,YAAavzJ,QAAQ,EAAOr8B,KAAMyD,EAAKzD,MAC5E,GAAIwD,KAAKM,OAAOmwU,WAAWjiL,YAAYjrF,WAAWE,QAG9C,OAFAzjE,KAAKM,OAAOkmB,QAAQ+rmB,GAAuBk+J,QAC3CzwxB,KAAKM,OAAOyppB,aAAav5U,qBAIzBvwU,EAAK4zL,QAAQP,KAAK,SAAUzyL,GACpBd,EAAMO,OAAO0mF,cAGjBjnF,EAAMO,OAAOkmB,QAAQ+rmB,GAAuBk+J,GACxCA,EAAW53vB,QAGf94B,EAAMO,OAAOyppB,aAAav5U,wBAC3B77I,MAAM,SAAU9zL,GACXd,EAAMO,OAAO0mF,aAGjBjnF,EAAMO,OAAOkmB,QAAQijnB,IAAwBnljB,MAAOzjF,OAIhE0vxB,EAAKl1xB,UAAUq1xB,SAAW,SAAUrrsB,GAChC,IAAIz5D,EAAS5rB,KAAKM,OAAO4lxB,YACrBrylB,EAAU,KACV88lB,GAAc7jmB,gBAAkBC,kBAAoBC,mBACpD/sL,GACA44B,QAAQ,EACRr8B,KAAO6oF,aAAqB7mF,MAAS6mF,GAAaA,GAClD+mG,YAAa,eAGjB,GADApsL,KAAKM,OAAOkmB,QAAQmpmB,GAAoB1vnB,IACpCA,EAAK44B,OAAT,CAGA,GAAIwsD,aAAqB7mF,MAAO,CAC5B,IAAK,IAAIJ,EAAK,EAAGyE,EAAKwiF,EAAWjnF,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACnD,IAAIoV,EAAU3Q,EAAGzE,GACjB4B,KAAK4wxB,oBAAoBp9wB,GACzBm9wB,EAAU7jmB,aAAatoL,KAAKgP,GAEhCqgL,EAAU7zL,KAAKM,OAAOmwU,WAAWjiL,YAAYhnJ,YAAYmpxB,EAAW/kwB,EAAOtoB,GAAI,KAAMtD,KAAK2iM,iBAG1F3iM,KAAK4wxB,oBAAoBvrsB,GACzBwuG,EAAU7zL,KAAKM,OAAOmwU,WAAWjiL,YAAY75C,OAAOtvB,EAAW,KAAMrlF,KAAK2iM,YAE9E,IAAIkulB,GAAazkmB,YAAa,eAAgBvzJ,QAAQ,EAAOr8B,KAAM6oF,EAAWwuG,QAASA,GACvF7zL,KAAKwwxB,YAAYK,KAErBN,EAAKl1xB,UAAUq1O,UAAY,SAAUp0O,EAAO65D,GACxC,IAAIvqC,EAAS5rB,KAAKM,OAAO4lxB,YACrBrylB,EAAU,KACV88lB,GAAc7jmB,gBAAkBC,kBAAoBC,mBACpD/sL,GAASmsL,YAAa,cAAevzJ,QAAQ,GAC7Cs4B,KACH70D,aAAiBkC,MAAS2yD,EAAU70D,EAAQ60D,EAAQ3sD,KAAKlI,GAC1D,IAAIE,EAAOF,EACX,GAAImB,EAAkB04D,GAAS,CAG3B,GAFAl2D,EAAKzD,KAAOA,EACZwD,KAAKM,OAAOkmB,QAAQmpmB,GAAoB1vnB,GACpCA,EAAK44B,OACL,OAEJ74B,KAAK4wxB,oBAAoBp0xB,GACzBq3L,EAAU7zL,KAAKM,OAAOmwU,WAAWjiL,YAAYnvG,OAAOzzB,EAAOtoB,GAAIhH,EAAO,KAAM0D,KAAK2iM,gBAEhF,CACD,IAAImulB,EAAc9wxB,KAAKM,OAAOuouB,UAAUmnD,mBAAmBxzxB,GAC3D,OAAQ25D,GACJ,IAAK,iBAGD,GAFAl2D,EAAKzD,MAASu0xB,WAAYz0xB,EAAOgE,OAAQwwxB,GACzC9wxB,KAAKM,OAAOkmB,QAAQmpmB,GAAoB1vnB,GACpCA,EAAK44B,OACL,OAEJ,IAAIm4vB,EAAShxxB,KAAKixxB,iBAAiBz0xB,EAAKovB,EAAO1L,WAAY4wwB,EAAYllwB,EAAOkkwB,sBAC1EkB,IAAWF,EAAYllwB,EAAOkkwB,sBAC9BgB,EAAYllwB,EAAOkkwB,qBAAuBkB,EAC1Cx0xB,EAAKovB,EAAOo/vB,cAAgB8F,EAAYllwB,EAAOtoB,IAC/CtD,KAAK4wxB,oBAAoBE,GACzBH,EAAU5jmB,eAAevoL,KAAKssxB,GAC9B9wxB,KAAK4wxB,oBAAoBp0xB,GACzBm0xB,EAAU7jmB,aAAatoL,KAAKhI,KAG5BwD,KAAK4wxB,oBAAoBp0xB,GACzBm0xB,EAAU5jmB,eAAevoL,KAAKhI,IAElC,MACJ,IAAK,aAGD,GAFAyD,EAAKzD,KAAOA,EACZwD,KAAKM,OAAOkmB,QAAQmpmB,GAAoB1vnB,GACpCA,EAAK44B,OACL,OAEJ,IAAIq4vB,EAAS,IAAI1ttB,GAAYxjE,KAAKM,OAAO+qxB,YACrCpntB,cAAa,IAAIZ,IAAQQ,MAAMj4C,EAAOo/vB,aAAc,QAAS8F,EAAYllwB,EAAOtoB,MACpF9G,EAAKovB,EAAOtoB,IAAMwtxB,EAAYllwB,EAAOtoB,IACrC9G,EAAKovB,EAAOkkwB,qBAAuB,KACnCtzxB,EAAKovB,EAAOo/vB,cAAgB,KAC5BhrxB,KAAK4wxB,oBAAoBp0xB,GACzBm0xB,EAAU5jmB,eAAevoL,KAAKhI,GAC9B,IAAK,IAAI4B,EAAK,EAAG+yxB,EAAWD,EAAQ9yxB,EAAK+yxB,EAAS10xB,OAAQ2B,IAAM,CAC5D,IAAI6tG,EAAUklrB,EAAS/yxB,GACvBuyxB,EAAU3jmB,eAAexoL,KAAKynG,IAI1C4nF,EAAU7zL,KAAKM,OAAOmwU,WAAWjiL,YAAYhnJ,YAAYmpxB,EAAW/kwB,EAAOtoB,GAAI,KAAMtD,KAAK2iM,YAE9F3iM,KAAKM,OAAOuouB,UAAU49C,qBAAqBt1tB,GAC3C,IAAI0/tB,GAAazkmB,YAAa,eAAgBvzJ,QAAQ,EAAOr8B,KAAMyD,EAAKzD,KAAMq3L,QAASA,GACvF7zL,KAAKwwxB,YAAYK,IAErBN,EAAKl1xB,UAAU+1xB,YAAc,SAAU9txB,EAAI6yD,GACvC,IAAIvqC,EAAS5rB,KAAKM,OAAO4lxB,YACrByK,GAAc7jmB,gBAAkBC,kBAAoBC,mBACpD77H,KACAkguB,KACAC,KACJ,cAAehuxB,GACX,IAAK,SACL,IAAK,SACD6tD,EAAU,IAAIqS,GAAYxjE,KAAKM,OAAO+qxB,YAClCpntB,cAAa,IAAIZ,IAAQQ,MAAMj4C,EAAOtoB,GAAI,QAASA,IACvD,MACJ,IAAK,SACAA,aAAc9E,MAAS2yD,EAAU7tD,EAAK6tD,EAAQ3sD,KAAKlB,GAG5D,IAAK,IAAIlF,EAAK,EAAGmzxB,EAAYpguB,EAAS/yD,EAAKmzxB,EAAU90xB,OAAQ2B,IAAM,CAC/D,IAAI+xxB,EAAUoB,EAAUnzxB,GACtBX,EAAkB0yxB,EAAQvkwB,EAAOm/vB,iBAA6CsG,EAAY7sxB,KAAK2rxB,GAA1CmB,EAAS9sxB,KAAK2rxB,GAEzE,IAAIlwxB,GAASmsL,YAAa,cAAevzJ,QAAQ,GACjD,GAAe,qBAAXs9B,IACAl2D,EAAKzD,KAAO20D,EACZnxD,KAAKM,OAAOkmB,QAAQmpmB,GAAoB1vnB,IACpCA,EAAK44B,QAHb,CAOA,GAAIp7B,EAAkB04D,IAAWk7tB,EAAY50xB,OAAS,EAClD,IAAK,IAAIoG,EAAK,EAAG2uxB,EAAgBH,EAAaxuxB,EAAK2uxB,EAAc/0xB,OAAQoG,IAAM,CAC3E,IAAI4uxB,EAAUD,EAAc3uxB,GAC5B8txB,EAAU3jmB,eAAexoL,KAAKitxB,GAGtC,GAAIH,EAAS70xB,OAAS,EAClB,OAAQ05D,GACJ,IAAK,SACL,IAAK,mBACD,IAAK,IAAIh6D,EAAI,EAAGA,EAAIm1xB,EAAS70xB,OAAQN,IAAK,CACtC,IAAI20xB,EAAc9wxB,KAAKM,OAAOuouB,UAAUmnD,mBAAmBsB,EAASn1xB,IAGpE,GAFA8D,EAAKzD,MAASu0xB,WAAYO,EAASn1xB,GAAImE,OAAQwwxB,GAC/C9wxB,KAAKM,OAAOkmB,QAAQmpmB,GAAoB1vnB,GACpCA,EAAK44B,OACL,OAEJi4vB,EAAYllwB,EAAOkkwB,qBACf9vxB,KAAKixxB,iBAAiBK,EAASn1xB,GAAGyvB,EAAO1L,WAAY4wwB,EAAYllwB,EAAOkkwB,sBAC5E9vxB,KAAK4wxB,oBAAoBE,GACzBH,EAAU5jmB,eAAevoL,KAAKssxB,GAC1BQ,EAASn1xB,GAAGyvB,EAAOtoB,MAAQwtxB,EAAYllwB,EAAOtoB,KAC9CqtxB,EAAU3jmB,eAAexoL,KAAK8sxB,EAASn1xB,IAG/C,MACJ,IAAK,eACD,IAAK,IAAI8H,EAAK,EAAGytxB,EAAaJ,EAAUrtxB,EAAKytxB,EAAWj1xB,OAAQwH,IAAM,CAKlE,IAAK,IAJDopxB,EAAMqE,EAAWztxB,GACjBk5D,EAAY,IAAIwH,GAAU/4C,EAAOtoB,GAAI,QAAU+pxB,EAAIzhwB,EAAOo/vB,eAAiB1nxB,GAC3EwhE,GAAG,IAAIH,GAAU/4C,EAAOo/vB,aAAc,QAAUqC,EAAIzhwB,EAAOo/vB,eAAiB1nxB,IAEvEmH,EAAK,EAAGknxB,EADJ,IAAInutB,GAAYxjE,KAAKM,OAAO+qxB,YAAYpntB,cAAa,IAAIZ,IAAQQ,MAAM1G,IAChD1yD,EAAKknxB,EAASl1xB,OAAQgO,IAAM,CAC5D,IAAImnxB,EAAUD,EAASlnxB,GACvBkmxB,EAAU3jmB,eAAexoL,KAAKotxB,GAElCjB,EAAU3jmB,eAAexoL,KAAK6oxB,IAK9C,IAAIx5lB,EACJA,EAAU7zL,KAAKM,OAAOmwU,WAAWjiL,YAAYhnJ,YAAYmpxB,EAAW/kwB,EAAOtoB,GAAI,KAAMtD,KAAK2iM,YAC1F3iM,KAAKM,OAAOuouB,UAAU49C,qBAAqBt1tB,GAC3C,IAAI0/tB,GAAazkmB,YAAa,eAAgBvzJ,QAAQ,EAAOr8B,KAAMyD,EAAKzD,KAAMq3L,QAASA,GACvF7zL,KAAKwwxB,YAAYK,KAErBN,EAAKl1xB,UAAUu1xB,oBAAsB,SAAUjnxB,GAC3C,IAAIiiB,EAAS5rB,KAAKM,OAAO4lxB,YACzB,GAAIv8wB,EAAOiiB,EAAO4/vB,gBAAkB7hxB,EAAOiiB,EAAO6/vB,aAAc,CAC5D,IAAID,EAAgB7hxB,EAAOiiB,EAAO4/vB,gBAAkB7hxB,EAAOiiB,EAAO6/vB,aAC9DA,EAAc9hxB,EAAOiiB,EAAO6/vB,cAAgB9hxB,EAAOiiB,EAAO4/vB,eAC9D,GAAIxrxB,KAAKM,OAAOkkG,SAAU,CACtB,IAAIknrB,EAAO1rxB,KAAKM,OAAOkkG,SACvB76F,EAAOiiB,EAAO1L,WAAalgB,KAAKwkG,SAASkkL,QAAQ/+Q,EAAOiiB,EAAO1L,WAAYsrwB,EAAeE,GAC1F/hxB,EAAOiiB,EAAO0iM,SAAWtuN,KAAKwkG,SAASkkL,QAAQ/+Q,EAAOiiB,EAAO0iM,SAAUm9jB,EAAaC,GACpF/hxB,EAAOiiB,EAAO1L,WAAalgB,KAAKwkG,SAASjgG,OAAOoF,EAAOiiB,EAAO1L,WAAYwrwB,GAC1E/hxB,EAAOiiB,EAAO0iM,SAAWtuN,KAAKwkG,SAASjgG,OAAOoF,EAAOiiB,EAAO0iM,SAAUo9jB,QAGtE/hxB,EAAOiiB,EAAO1L,WAAalgB,KAAKwkG,SAASjgG,OAAOoF,EAAOiiB,EAAO1L,WAAYsrwB,GAC1E7hxB,EAAOiiB,EAAO0iM,SAAWtuN,KAAKwkG,SAASjgG,OAAOoF,EAAOiiB,EAAO0iM,SAAUm9jB,QAGrEzrxB,KAAKM,OAAOkkG,WACjB76F,EAAOiiB,EAAO1L,WAAalgB,KAAKwkG,SAASjgG,OAAOoF,EAAOiiB,EAAO1L,WAAYlgB,KAAKM,OAAOkkG,UACtF76F,EAAOiiB,EAAO0iM,SAAWtuN,KAAKwkG,SAASjgG,OAAOoF,EAAOiiB,EAAO0iM,SAAUtuN,KAAKM,OAAOkkG,YAG1F+rrB,EAAKl1xB,UAAU41xB,iBAAmB,SAAUhE,EAAgB4E,GACxD,IAAIb,EAAS9ysB,GAA4B+usB,GASzC,OARKxvxB,EAAkBo0xB,GAMnBA,EAAoBb,GALuB,IAAvCa,EAAkBtzxB,QAAQyyxB,KAC1Ba,EAAsBp0xB,EAAkBo0xB,GAAyDb,EAAnCa,EAAoB,IAAMb,GAMzFa,GAEJtB,KChPPuB,GAAgC,WAChC,SAASA,EAAexxxB,GACpBN,KAAKM,OAASA,EA6ElB,OA3EAwxxB,EAAez2xB,UAAU02xB,oBAAsB,SAAUt+kB,EAAMx2H,EAAOj8E,GAClE,IAAIjB,EAAQC,KACZA,KAAKgB,QAAUA,EACfhB,KAAKg1oB,QAAU,IAAI/mgB,GAAcwlE,GAC7BlhE,gBAAiB,SAAUv2E,EAAcsoB,GACrCvkF,EAAMiyxB,eAAeh2tB,EAAcsoB,IAEvCrH,MAAOA,EACP6lmB,mBAAoB,SAAU7irB,GAC1BF,EAAM+irB,mBAAmB7irB,OAIrC6xxB,EAAez2xB,UAAUynrB,mBAAqB,SAAU7irB,GACpD,IAAIyC,EAAO1C,KAAKgB,QAAQ2B,cAAc,IAAM1C,EAAKu4H,UAAY,UACzD91H,IACAA,EAAKgC,MAAM4xC,QAA2B,YAAhBr2C,EAAKukF,OAAwB,GAAK,SAGhEstsB,EAAez2xB,UAAU22xB,eAAiB,SAAUh2tB,EAAcsoB,GAC9D,IAAIhhF,EAAKghF,EAAMzxE,aAAa,OACjB7S,KAAKgB,QAAQ2B,cAAc,IAAMW,EAAK,WAE7CtD,KAAKo1B,cAAc4mC,EAAcsoB,EAAOhhF,EAAI,KAGpDwuxB,EAAez2xB,UAAU+5B,cAAgB,SAAUp0B,EAASsjF,EAAO7sD,EAAM6e,GACrE,IAAI27uB,EACA9wH,EACAiiB,EAAcpirB,EAAQ4K,wBACtB5L,KAAKgB,QAAQ8C,UAAUK,SAAS++wB,KAChC+O,EAAajyxB,KAAKgB,QAClBmgqB,EAASnhqB,KAAKgB,QAAQ4K,yBAItBu1pB,GADA8wH,EAAajyxB,KAAKgB,QAAQ2B,cAAc,sCACpBiJ,wBAExB,IAAI1K,EAAMC,EAAc,OACpBkC,UAAW,0CACXC,GAAIm0B,EAAO,SACXl0B,OAAQ,WAAa+yC,EAAU,SAC1B8soB,EAAYz2qB,OAASw0pB,EAAOz0pB,IAAMulxB,EAAW9lxB,UAAY,GAAK,YAC9Di3qB,EAAY52qB,KAAO20pB,EAAO30pB,KAAOylxB,EAAWjmxB,WAAao3qB,EAAYptqB,MAAQ,GAAK,QAEvFokB,EAAUj5B,EAAc,OAASkC,UAAW,kBAChD+2B,EAAQz4B,YAAY2iF,GACpB,IAAI9zD,EAAQrvB,EAAc,OAASkC,UAAW,0BAC9CmtB,EAAM7uB,YAAYR,EAAc,OAASkC,UAAW,iCACpDmtB,EAAM7uB,YAAYR,EAAc,OAASkC,UAAW,iCACpDnC,EAAIS,YAAYy4B,GAChBl5B,EAAIS,YAAY6uB,GAChByhwB,EAAWtwxB,YAAYT,GACvBA,EAAIwD,MAAM8H,KAAQuoB,SAAS7zB,EAAIwD,MAAM8H,KAAM,IAAMtL,EAAI0D,YAAc,EAAK,MAE5EktxB,EAAez2xB,UAAU6mrB,eAAiB,WACtC,GAAIlirB,KAAKgB,QAEL,IAAK,IAAI5C,EAAK,EAAGgjE,KADC//D,MAAMC,KAAKtB,KAAKgB,QAAQQ,iBAAiB,sBACnBpD,EAAKgjE,EAAW3kE,OAAQ2B,IAAM,CAElEmG,EADW68D,EAAWhjE,IAI1B4B,KAAKg1oB,SACLh1oB,KAAKg1oB,QAAQ5mmB,SAMrB0jvB,EAAez2xB,UAAUiX,QAAU,WAC3BtS,KAAKg1oB,UAAYh1oB,KAAKg1oB,QAAQhujB,aAC9BhnF,KAAKg1oB,QAAQ1ioB,WAGdw/wB,KCxEPI,GAA6B,WAI7B,SAASA,EAAY5xxB,GACjBN,KAAKmyxB,uBAAwB,EAC7BnyxB,KAAKM,OAASA,EACdN,KAAKqlH,KAAOrlH,KAAKM,OAAOo4E,UACxB14E,KAAK0snB,WAAa,IAAI6jK,GAAKjwxB,GAC3BN,KAAKoyxB,eAAiB,IAAIN,GAAe9xxB,KAAKM,QAC9CN,KAAK+rG,SACL/rG,KAAKtD,mBAi0BT,OA/zBAw1xB,EAAY72xB,UAAU0wG,OAAS,WAC3B/rG,KAAKqyxB,mBACLryxB,KAAKsyxB,kBACLtyxB,KAAKuyxB,qBAETL,EAAY72xB,UAAUg3xB,iBAAmB,WACrC,IAAItL,EAAoB5lxB,EAAc,OAASkC,UAAW6/wB,GAA0B,mBAChFljxB,KAAKM,OAAOg/tB,YACZ9+tB,SAASuL,KAAKpK,YAAYolxB,GAC1BpjxB,GAAUojxB,GV3BI,aU8Bd/mxB,KAAKM,OAAOU,QAAQW,YAAYolxB,GAEpC/mxB,KAAKsoxB,WAAa,IAAI9mqB,GAAMulqB,GACxBnlqB,eAAgB,OAChB6B,WAAazjH,KAAKM,OAAOg/tB,WAAa,YAAc,WACpDpstB,UAAWlT,KAAKM,OAAO4S,UACvBxR,KAAM1B,KAAKwyxB,eAAel3xB,KAAK0E,MAC/BiC,MAAOjC,KAAKyyxB,gBAAgBn3xB,KAAK0E,MACjCokH,cAAgBpkH,KAAKM,OAAOg/tB,YAAe7nsB,KAAM,YAAgBA,KAAM,UAAWvsB,SAAU,KAC5Fi5G,cAAgBnkH,KAAKM,OAAOg/tB,YAAe7nsB,KAAM,WAAeA,KAAM,SAAUvsB,SAAU,KAC1F64G,UAAY/jH,KAAKM,OAAOg/tB,YAAelptB,EAAG,MAAOC,EAAG,QAAYD,EAAG,MAAOC,EAAG,QAC7EnC,SAAWlU,KAAKM,OAAOg/tB,YAAelptB,EAAG,OAAQC,EAAG,QAAYD,EAAG,SAAUC,EAAG,OAChFH,gBAAkBlW,KAAKM,OAAOg/tB,WAAa9+tB,SAASuL,KAAO/L,KAAKM,OAAOU,QACvEyhE,OAASziE,KAAKM,OAAOg/tB,WAAa,IAAO,KAGjD4yD,EAAY72xB,UAAUi3xB,gBAAkB,WACpC,IAAII,EAAiB,eAAkBC,GAA6B,kDAC7CjP,GAA6B,YAAgB1jxB,KAAKqlH,KAAKtxC,YAAY,SAAW,oCAC9E6+sB,GAAmC,iDACnC/O,GAAmC,IAAMgP,GAAqB,0CACjFxN,EAAmBlkxB,EAAc,OACjCkC,UAAWyjxB,GAA+B,iBAC1C9kxB,UAAW0wxB,IAEf1yxB,KAAKM,OAAOU,QAAQW,YAAY0jxB,GAChCrlxB,KAAKyoxB,UAAY,IAAIjnqB,GAAM6jqB,GACvB5hqB,WAAY,WACZvwG,UAAWlT,KAAKM,OAAO4S,UACvBkxG,eAAiB3sF,KAAM,UAAWvsB,SAAU,KAC5Ci5G,eAAiB1sF,KAAM,SAAUvsB,SAAU,KAC3CxJ,KAAM1B,KAAK8yxB,cAAcx3xB,KAAK0E,MAC9BiC,MAAOjC,KAAK+yxB,eAAez3xB,KAAK0E,MAChC+jH,WAAa3tG,EAAG,OAAQC,EAAG,QAC3BH,gBAAiBlW,KAAKM,OAAOU,QAAQ2B,cAAc,IAAM28wB,IACzD78sB,OAAQ,IAEZ,IAAI88e,EAAcv/iB,KAAKyoxB,UAAUznxB,QAAQ2B,cAAc,IAAM+gxB,IAC7D1jxB,KAAKyvrB,aAAa,UAAW2sC,WAAiB42D,IAAsB,EAAOzzO,EAAav/iB,KAAKizxB,YAC7F1txB,GAAanB,IAAIpE,KAAKyoxB,UAAUznxB,QAAQ2B,cAAc,IAAMkhxB,IAAmC,QAAS7jxB,KAAKkzxB,gBAAiBlzxB,OAElIkyxB,EAAY72xB,UAAUk3xB,kBAAoB,WACtCvyxB,KAAKmzxB,YAAc,IAAIruqB,IACnB8E,mBAAqB5xF,OAAQ,QAC7BmuF,UACMC,aAAenzG,SAAU,yBAA0B+qG,WAAW,GAAQqI,MAAOrmH,KAAKozxB,kBAAkB93xB,KAAK0E,QACzGomH,aAAenzG,SAAU,6BAA8B+qG,WAAW,GAASqI,MAAOrmH,KAAKozxB,kBAAkB93xB,KAAK0E,QAEpHiT,SV4JoB,iBU3JpB+yG,eAAe,EACf9yG,UAAWlT,KAAKM,OAAO4S,UACvBqgH,YAAavzH,KAAKqzxB,uBAAuB/3xB,KAAK0E,MAC9CwlH,SAAS,EACTtxG,UAAYkC,EAAG,SAAUC,EAAG,UAC5BswG,eAAe,EACfx/G,OAAQ3G,SAASuL,KACjByrB,SAAS,EACTxhB,MAAO,SAEX,IAAIs9wB,EAAgBnyxB,EAAc,OAASmC,GAAItD,KAAKM,OAAOU,QAAQsC,GAAK,gBACxEtD,KAAKM,OAAOU,QAAQW,YAAY2xxB,GAChCtzxB,KAAKmzxB,YAAY98uB,SAASi9uB,GAC1B,IAAI/yL,EAAWvgmB,KAAKmzxB,YAAYnyxB,QAAQ2B,cAAc,oBAClD49lB,GACAA,EAAS/8lB,aAAa,aAAcxD,KAAKqlH,KAAKtxC,YAAY,eAE9D,IAAIsuE,EAAeriJ,KAAKmzxB,YAAYnyxB,QAAQ2B,cAAc,wBACtD0/I,GACAA,EAAa7+I,aAAa,aAAcxD,KAAKqlH,KAAKtxC,YAAY,YAGtEm+sB,EAAY72xB,UAAUo0rB,aAAe,SAAUpsrB,EAAWo9pB,EAAUvwd,EAAYlvM,EAASuyxB,GACrF,IAAIx1qB,IAAS9qG,SAAU5P,EAAW66G,SAAUgyF,EAAYh9L,UAAWlT,KAAKM,OAAO4S,UAAWwgE,QAAS+slB,GAAYz/pB,GAC/GuE,GAAanB,IAAIpD,EAAS,QAASuyxB,EAAYvzxB,OAEnDkyxB,EAAY72xB,UAAUm4xB,iBAAmB,SAAUr9tB,GAC/C,IAAIryD,GACA2vxB,GAAmCC,GAAoCC,GACvEC,GAA+BC,GAAkCC,IAEjEvzL,EAAWvgmB,KAAKmzxB,YAAYnyxB,QAAQ2B,cAAc,oBAClD0/I,EAAeriJ,KAAKmzxB,YAAYnyxB,QAAQ2B,cAAc,wBAE1D,OADA0B,GAAak8lB,EAAUl+c,GAAev+I,GAC9BqyD,GACJ,IAAK,aACDxyD,GAAU48lB,GAAWkzL,IACrB9vxB,GAAU0+I,GAAeqxoB,IACzB,MACJ,IAAK,SACD/vxB,GAAU48lB,GAAWozL,IACrBhwxB,GAAU0+I,GAAeuxoB,IACzB,MACJ,IAAK,QACDjwxB,GAAU48lB,GAAWszL,IACrBlwxB,GAAU0+I,GAAeyxoB,MAIrC5B,EAAY72xB,UAAUuhrB,oBAAsB,WACxC,IAAInpe,EAAOzzM,KAAKsoxB,WAAWtnxB,QAAQ2B,cAAc,IAAMoxxB,IACnD92sB,KACJA,EAAMj9E,KAAKM,OAAO0zxB,cAAcpowB,OAAOgylB,QAAQnmlB,MAAQz3B,KAAKM,OAAO0zxB,cAAcpowB,OAAOgylB,QAAQq2K,WAChGj0xB,KAAKoyxB,eAAeL,oBAAoBt+kB,EAAMx2H,EAAOj9E,KAAKsoxB,WAAWtnxB,UAEzEkxxB,EAAY72xB,UAAUo0xB,oBAAsB,WACxC,IAAIyE,EAAiBl0xB,KAAKmzxB,YAAYnyxB,QAAQ2B,cAAc,oBACxDuxxB,IACAA,EAAelyxB,UAAYhC,KAAKqlH,KAAKtxC,YAA0C,WAA9B/zE,KAAKM,OAAOoia,cAA6B,cAAgB,cAE9G,IAAIyxX,EAAmBn0xB,KAAKmzxB,YAAYnyxB,QAAQ2B,cAAc,wBAC1DwxxB,IACAA,EAAiBnyxB,UAAYhC,KAAKqlH,KAAKtxC,YAA0C,WAA9B/zE,KAAKM,OAAOoia,cAA6B,eAAiB,eAEjH1ia,KAAKmzxB,YAAY/4vB,QACbp6B,KAAKqlH,KAAKtxC,YAA0C,WAA9B/zE,KAAKM,OAAOoia,cAA6B,0BAA4B,eAC/F1ia,KAAKmzxB,YAAYvusB,OAAS5kF,KAAKqlH,KAAKtxC,YAA0C,WAA9B/zE,KAAKM,OAAOoia,cAA6B,cAAgB,aACzG1ia,KAAKwzxB,iBAAiB,cACtBxzxB,KAAKo0xB,gBAAgB,oBAEzBlC,EAAY72xB,UAAUg5xB,8BAAgC,SAAU3txB,GAC5D,IAAI65lB,EAAWvgmB,KAAKmzxB,YAAYnyxB,QAAQ2B,cAAc,oBACtD0B,GAAak8lB,GAAWkzL,IACxBlzL,EAASv+lB,UAAYhC,KAAKqlH,KAAKtxC,YAAY,MAC3C,IAAIsuE,EAAeriJ,KAAKmzxB,YAAYnyxB,QAAQ2B,cAAc,wBAG1D,OAFA0/I,EAAargJ,UAAYhC,KAAKqlH,KAAKtxC,YAAY,UAC/C/zE,KAAKmzxB,YAAYvusB,OAAS5kF,KAAKqlH,KAAKtxC,YAAY,SACxCrtE,GACJ,IAAK,eACD/C,GAAU0+I,GAAeyxoB,IACzB9zxB,KAAKmzxB,YAAY/4vB,QAAUp6B,KAAKqlH,KAAKtxC,YAAY,gBACjD,MACJ,IAAK,iBACD1vE,GAAag+I,GAAeyxoB,IAC5B9zxB,KAAKmzxB,YAAY/4vB,QAAUp6B,KAAKqlH,KAAKtxC,YAAY,4BACjD,MACJ,IAAK,cACDpwE,GAAU0+I,GAAeyxoB,IACzB9zxB,KAAKmzxB,YAAY/4vB,QAAUp6B,KAAKqlH,KAAKtxC,YAAY,eACjD,MACJ,IAAK,eACDpwE,GAAU0+I,GAAeyxoB,IACzB9zxB,KAAKmzxB,YAAY/4vB,QAAUp6B,KAAKqlH,KAAKtxC,YAAY,gBACjD,MACJ,IAAK,oBACD1vE,GAAag+I,GAAeyxoB,IAC5B9zxB,KAAKmzxB,YAAY/4vB,QAAUp6B,KAAKqlH,KAAKtxC,YAAY,qBAGpDsuE,EAAav+I,UAAUK,SAAS2vxB,KACjCnwxB,GAAU0+I,GAAe,+BAE7BriJ,KAAKo0xB,gBAAgB,8BAEzBlC,EAAY72xB,UAAUi5xB,gBAAkB,WACpC,IAAIt0xB,KAAKM,OAAOi+wB,kBAAkBlosB,SAAlC,CAGA,IAAIkqhB,EAAWvgmB,KAAKmzxB,YAAYnyxB,QAAQ2B,cAAc,oBAClD49lB,IACAA,EAASv+lB,UAAYhC,KAAKqlH,KAAKtxC,YAAY,WAE/C,IAAIsuE,EAAeriJ,KAAKmzxB,YAAYnyxB,QAAQ2B,cAAc,wBACtD0/I,IACAA,EAAargJ,UAAYhC,KAAKqlH,KAAKtxC,YAAY,WAEnD/zE,KAAKmzxB,YAAY/4vB,QAAWp6B,KAAKM,OAAO8nxB,gBAAgB9rxB,MAAMG,OAAS,EACnEuD,KAAKqlH,KAAKtxC,YAAY,yBAA2B/zE,KAAKqlH,KAAKtxC,YAAY,iBAC3E/zE,KAAKmzxB,YAAYvusB,OAAU5kF,KAAKM,OAAO8nxB,gBAAgB9rxB,MAAMG,OAAS,EAClEuD,KAAKqlH,KAAKtxC,YAAY,uBAAyB/zE,KAAKqlH,KAAKtxC,YAAY,eACzE/zE,KAAKwzxB,iBAAiB,UACtBxzxB,KAAKo0xB,gBAAgB,iBAEzBlC,EAAY72xB,UAAUk5xB,oBAAsB,SAAU7txB,GAClD1G,KAAKmzxB,YAAYvusB,OAAS5kF,KAAKqlH,KAAKtxC,YAAY,SAChD/zE,KAAKmzxB,YAAY/4vB,QAAUp6B,KAAKqlH,KAAKtxC,YAAYrtE,GACjD,IAAI65lB,EAAWvgmB,KAAKmzxB,YAAYnyxB,QAAQ2B,cAAc,oBAClD49lB,IACAA,EAASv+lB,UAAYhC,KAAKqlH,KAAKtxC,YAAY,OAE/C,IAAIsuE,EAAeriJ,KAAKmzxB,YAAYnyxB,QAAQ2B,cAAc,wBACtD0/I,IACAA,EAAargJ,UAAYhC,KAAKqlH,KAAKtxC,YAAY,WAEnD/zE,KAAKwzxB,iBAAiB,SACtBxzxB,KAAKo0xB,gBAAgB,oBAEzBlC,EAAY72xB,UAAU+4xB,gBAAkB,SAAU1pC,GAC9C1qvB,KAAKmzxB,YAAYvnuB,WACjB,IAAI25B,GACA7+E,KAAMgkvB,EAAW7xtB,QAAQ,EAAOr8B,KAAMwD,KAAKM,OAAO8nxB,gBAAiBpnxB,QAAShB,KAAKmzxB,YAAYnyxB,SAEjGhB,KAAKM,OAAOkmB,QAAQguwB,GAAiBjvsB,GACjCA,EAAU1sD,QAGd74B,KAAKmzxB,YAAYlvqB,QAErBiuqB,EAAY72xB,UAAUo5xB,oBAAsB,SAAUC,EAAiBtI,EAAYj/F,GAI/E,IAAK,IAHDvhqB,EAAS5rB,KAAKM,OAAO4lxB,YACrByO,EAAsBxzxB,EAAc,OAASkC,UAAWuxxB,KACxDC,EAAsB1zxB,EAAc,OAASkC,UAAWiixB,KACnDlnxB,EAAK,EAAG02xB,EAAoBJ,EAAiBt2xB,EAAK02xB,EAAkBr4xB,OAAQ2B,IAAM,CACvF,IAAIinF,EAAYyvsB,EAAkB12xB,GAC9B22xB,EAAa1vsB,EAAUz5D,EAAOgylB,UAAY59mB,KAAKM,OAAO0zxB,cAAcpowB,OAAOgylB,QAAQzpV,SACnFn0R,KAAKqlH,KAAKtxC,YAAY,WACtBihtB,EAAiB7zxB,EAAc,OAC/BmC,GAAI,GAAK+hF,EAAUz5D,EAAOtoB,IAC1BD,UAAWk9wB,GACX98wB,OACIwxxB,YAAa5vsB,EAAU81L,KAAMvpQ,KAAQ,SAAUo/G,SAAY,IAAK0I,gBAAiB,QACjFguB,gBAAiB,QAASwtoB,eAAgB,OAAQxhqB,aAAcqhqB,KAOxE,GAJAC,EAAerzxB,YAAYR,EAAc,OAASkC,UAAWmgxB,GAAmBxhxB,UAAW+yxB,KACvF/0xB,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAMq4I,UAAU3uO,OAAS,GACvDu4xB,EAAexxxB,aAAa,mBAAoB2prB,IAE/C1vrB,EAAkB4nF,EAAUz5D,EAAOm/vB,iBAAkB,CACtD,IAAIj0pB,EAAazxC,EAAUz5D,EAAOtoB,MAAQ+hF,EAAUz5D,EAAOo/vB,cACvDmK,GAAkCC,GACtCJ,EAAerzxB,YAAYR,EAAc,OAASkC,UAAW+4tB,WAAiBtlmB,KAElF,IAAI72H,GAASzD,KAAM6oF,EAAWrkF,QAASg0xB,EAAgBn8vB,QAAQ,GAC/D74B,KAAKM,OAAOkmB,QAAQ6uwB,GAAqBp1xB,GACpCA,EAAK44B,SACNg8vB,EAAoBlzxB,YAAYqzxB,GAChCh1xB,KAAKM,OAAOuouB,UAAUwmD,sBAAsB2F,GAC5Ch1xB,KAAKM,OAAOuouB,UAAUunD,mBAAmB4E,EAAgB3vsB,EAAW,kBAAmB+msB,IAI/F,OADAuI,EAAoBhzxB,YAAYkzxB,GACzBF,GAEXzC,EAAY72xB,UAAUi6xB,kBAAoB,SAAUr1xB,GAChD,IAAIkH,EAAStB,EAAQ5F,EAAK3D,MAAM6K,OAAQ,IAAMo5wB,IAE9C,GADAvgxB,KAAKmyxB,uBAAwB,GACxB10xB,EAAkB0J,IAAWnH,KAAKM,OAAOg/tB,WAAY,CACtDt/tB,KAAKM,OAAOktW,oBACZxtW,KAAKmyxB,uBAAwB,EACNnyxB,KAAKM,OAAOuouB,UAAUo6C,yBAAyB97wB,GACtEnH,KAAKM,OAAO8nxB,gBAAkBpoxB,KAAKM,OAAOuouB,UAAUw/C,oBACpD,IAAIr4lB,EAAO7oL,EAAO0L,aAAa,aAE3B0ixB,EADWv1xB,KAAKM,OAAOuouB,UAAU29C,eAAex2lB,GACzBhwL,KAAKM,OAAO4lxB,YAAYtoK,UAAY59mB,KAAKqlH,KAAKtxC,YAAY,WACjFyhtB,EAAgB,mDAAwEC,GAAyB,oCACzDz1xB,KAAKqlH,KAAKtxC,YAAY,SAAW,qCAC1CwhtB,EAAa,uCACLv1xB,KAAKqlH,KAAKtxC,YAAY,QAAU,8CAC9B/zE,KAAKqlH,KAAKtxC,YAAY,UAAY,0BAC/F/zE,KAAKsoxB,WAAWtnxB,QAAQgB,UAAYwzxB,EACpC,IAAI7sqB,EAAY3oH,KAAKsoxB,WAAWtnxB,QAAQ2B,cAAc,YACtD3C,KAAKyvrB,aAAa,yBAA0B2sC,WAAiB42D,IAAsB,EAAOrqqB,EAAW3oH,KAAKizxB,YAC1G,IAAInjG,EAAW9vrB,KAAKsoxB,WAAWtnxB,QAAQ2B,cAAc,WACrD3C,KAAKyvrB,aAAa,yBAA0B2sC,WAAiBs5D,IAAqB,EAAO5lG,EAAU9vrB,KAAK21xB,WACxG,IAAIt1oB,EAAargJ,KAAKsoxB,WAAWtnxB,QAAQ2B,cAAc,IAAMslxB,IAC7DjoxB,KAAKyvrB,aAAa,yBAA0B2sC,yBAAwC,EAAO/7kB,EAAYrgJ,KAAKuoxB,aAC5GvoxB,KAAK41xB,qBAAqBzuxB,KAGlC+qxB,EAAY72xB,UAAUunuB,UAAY,SAAU3iuB,GACxC,GAAKD,KAAKM,OAAOu1xB,eAA6C,gBAA5B71xB,KAAKM,OAAOotM,cAAiC1tM,KAAKM,OAAOg/tB,WAA3F,CAIA,IAAIn4tB,EAAStB,EAAQ5F,EAAK3D,MAAM6K,OAAQ,IAAMq5wB,GAAuB,KAAOC,GAAyB,KACjGC,IACJ,IAAIjjxB,EAAkB0J,KAAWlH,EAAK3D,MAAM6K,OAAOrD,UAAUK,SAASy/wB,IAAtE,CAGkB5jxB,KAAKM,OAAO+9wB,gBAAgBK,SAAW1+wB,KAAKqlH,KAAKtxC,YAAY,WAC3E/zE,KAAKM,OAAOw1xB,cAAc91xB,KAAKM,OAAO+9wB,gBAAgBn+vB,WAClDlgB,KAAKM,OAAOw1xB,cAAc91xB,KAAKM,OAAO+9wB,gBAAgB/vjB,UAF9D,IAGIvgM,KACJA,EAAK/tB,KAAKM,OAAO4lxB,YAAYhmwB,WAAalgB,KAAKM,OAAO+9wB,gBAAgBn+vB,UACtE6N,EAAK/tB,KAAKM,OAAO4lxB,YAAY53jB,SAAWtuN,KAAKM,OAAO+9wB,gBAAgB/vjB,QACpEvgM,EAAK/tB,KAAKM,OAAO4lxB,YAAYxH,UAAY1+wB,KAAKM,OAAO+9wB,gBAAgBK,SACrE,IAAIrgG,EAAcr+qB,KAAK+1xB,mBAAmBhowB,EAAM,QAe5CiowB,EAAiB70xB,EAAc,OAASkC,UVrItB,eUqIuDrB,UAd1D,eAAkByzxB,GAAyB,iBAAqBQ,GAAgC,oCACvDj2xB,KAAKqlH,KAAKtxC,YAAY,SAAW,gHAErEggtB,GAAiB,4CAAkDvQ,GAAoB,uBAC9FxjxB,KAAKM,OAAO4lxB,YAAYtoK,QAAU,iHAC2Cs4K,GAA8B,IACvHC,GAAoB,KAAQ93G,EAAY+3G,QAAU,gBACjDp2xB,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAMq4I,UAAU3uO,OAAS,EAAI,sGAExD05xB,GAAoB,KAAQn2xB,KAAKq2xB,gBAAgBp2xB,EAAM,QAAU,eAAkB,IAAM,+CACrD+nxB,GAAyB,oBAAyB7E,GAAsC,IAC7HgT,GAAqB,YAAgBn2xB,KAAKqlH,KAAKtxC,YAAY,eAAiB,KAAQ/zE,KAAKqlH,KAAKtxC,YAAY,eAAiB,2BACzGqvsB,GAAyB,IAAM+S,GAAoB,YAAgBn2xB,KAAKqlH,KAAKtxC,YAAY,QAAU,KACxH/zE,KAAKqlH,KAAKtxC,YAAY,QAAU,oBAErC3oD,GAAM2rG,aACF/1H,QAASg1xB,EAAerzxB,cAAc,IAAM6gxB,IAC5CvgxB,YAAc6jB,YAAa9mB,KAAKqlH,KAAKtxC,YAAY,eAErD,IAAI40C,EAAYqtqB,EAAerzxB,cAAc,YAC7C3C,KAAKyvrB,aAAa,yBAA0B2sC,WAAiB42D,IAAsB,EAAOrqqB,EAAW3oH,KAAKwvxB,gBAC1G,IAAI8G,EAAaN,EAAerzxB,cAAc,IAAMwgxB,IACpDnjxB,KAAKyvrB,aAAa,SAAU,GAAIzvrB,KAAKM,OAAOi+wB,kBAAkBlosB,SAAUigtB,EAAYt2xB,KAAKu2xB,cACzF,IAAIC,EAAaR,EAAerzxB,cAAc,IAAMygxB,IACpDpjxB,KAAKyvrB,aAAa,mBAAoB,GAAIzvrB,KAAKM,OAAOi+wB,kBAAkBlosB,SAAUmgtB,EAAYx2xB,KAAKy2xB,WACnGz2xB,KAAKsoxB,WAAWluvB,QAAU47vB,EAC1Bh2xB,KAAKsoxB,WAAW18tB,WAChB5rD,KAAK48qB,sBACD58qB,KAAKyoxB,WACLzoxB,KAAKyoxB,UAAUlnsB,OAEnB,IAAIm1sB,EAAe12xB,KAAKsoxB,WAAWlmqB,WAAaj7G,EAChDnH,KAAKsoxB,WAAWlmqB,SAAWj7G,EACtBuvxB,GAAiB12xB,KAAKM,OAAOg/tB,WAI9B02D,EAAerzxB,cAAc,IAAM6gxB,IAAmBthxB,QAHtDlC,KAAK41xB,qBAAqBzuxB,SAlD1BnH,KAAKwvxB,kBAwDb0C,EAAY72xB,UAAUo7wB,WAAa,SAAU9swB,GAIzC,GAHI3J,KAAKM,OAAOq2xB,cACZ32xB,KAAKM,OAAOq2xB,aAAa10xB,QAExBjC,KAAKM,OAAOu1xB,cAGjB,GAAI71xB,KAAKM,OAAOg/tB,YAAct/tB,KAAKmyxB,sBAC/BnyxB,KAAK42xB,wBAAwB/wxB,EAAQ8D,EAAO3I,QAAS,IAAMu/wB,SAE1D,CACD,IAAIl7rB,EAAY17E,EAAOrN,MACnB2D,EAAOD,KAAK+1xB,mBAAmB1wsB,EAAW,SA2B1CwxsB,EAAkB11xB,EAAc,OAASkC,UVpM1B,gBUoM4DrB,UA1B3D,eAAkByzxB,GAAyB,iBAAqBQ,GAAgC,2CACtCj2xB,KAAKqlH,KAAKtxC,YAAY,QAAU,sDAC9B/zE,KAAKqlH,KAAKtxC,YAAY,UAAY,6CACtD/zE,KAAKqlH,KAAKtxC,YAAY,SAAW,sEACJoitB,GAAoB,YAAgBl2xB,EAAK62xB,aAAe,KAC5I72xB,EAAK62xB,aAAe,wJAEpBX,GAAoB,iBAAqBD,GAA8B,IAAMC,GAAoB,KAAQl2xB,EAAKm2xB,QAAU,UACvH/wsB,EAAUrlF,KAAKM,OAAO4lxB,YAAY6E,gBAAkB,oCAAuDoL,GAAoB,KACtHn2xB,KAAK+2xB,qBAAqB1xsB,GAAa,SAAY,IAAM,gBAC7DA,EAAUrlF,KAAKM,OAAO4lxB,YAAYx4vB,UAAY,qGACyDyowB,GAAoB,KAC7H9wsB,EAAUrlF,KAAKM,OAAO4lxB,YAAYx4vB,UAAY,eAAkB,KAAO23D,EAAUrlF,KAAKM,OAAO4lxB,YAAYsF,gBAC1GnmsB,EAAUrlF,KAAKM,OAAO4lxB,YAAYuF,aAAe,eAAkBuL,GAAsB,iFACmBb,GAAoB,KAC/Hn2xB,KAAKi3xB,YAAY5xsB,GAAa,gBAAmB,KAC/CA,EAAUrlF,KAAKM,OAAO4lxB,YAAYh0uB,aAAe,eAAkBglvB,GAAwB,qFACkBf,GAAoB,KACnI9wsB,EAAUrlF,KAAKM,OAAO4lxB,YAAYh0uB,aAAe,eAAkB,KACtElyC,KAAKM,OAAO8qO,UAAU3uO,OAAS,EAAI,qGACyE05xB,GAAoB,KAC7Hn2xB,KAAKq2xB,gBAAgB1sxB,EAAQ,SAAW,eAAkB,IAAM,qBAClDq+wB,GAAyB,MAAShoxB,KAAKM,OAAOg/tB,WAAa,GAAK,kBAAqB+jD,GAAuB,IAC1H8S,GAAoB,YAAgBn2xB,KAAKqlH,KAAKtxC,YAAY,QAAU,KAAQ/zE,KAAKqlH,KAAKtxC,YAAY,QAAU,2BACvFuvsB,GAAyB,IAAM6S,GAAoB,YAAgBn2xB,KAAKqlH,KAAKtxC,YAAY,UAAY,KAC1H/zE,KAAKqlH,KAAKtxC,YAAY,UAAY,aAAgB,YAEvDsC,EAAWr2E,KAAKM,OAAOi+wB,kBAAkBlosB,SACzCy5mB,EAAW+mG,EAAgBl0xB,cAAc,WAC7C3C,KAAKyvrB,aAAa,yBAA0B2sC,WAAiBs5D,IAAqB,EAAO5lG,EAAU9vrB,KAAK21xB,WACxG,IAAIt1oB,EAAaw2oB,EAAgBl0xB,cAAc,IAAMslxB,IACrDjoxB,KAAKyvrB,aAAa,yBAA0B2sC,wBAAwC/lpB,EAAUgqE,EAAYrgJ,KAAKuoxB,aAC/G,IAAI5/pB,EAAYkuqB,EAAgBl0xB,cAAc,YAE9C,GADA3C,KAAKyvrB,aAAa,yBAA0B2sC,WAAiB42D,IAAsB,EAAOrqqB,EAAW3oH,KAAKwvxB,iBACrGxvxB,KAAKM,OAAOg/tB,WAAY,CACzB,IAAI63D,EAAaN,EAAgBl0xB,cAAc,IAAM0gxB,IACrDrjxB,KAAKyvrB,aAAa,mBAAoB,IAAI,EAAO0nG,EAAYn3xB,KAAK21xB,WAClE,IAAIyB,EAAeP,EAAgBl0xB,cAAc,IAAM2gxB,IACvDtjxB,KAAKyvrB,aAAa,SAAU,GAAIp5mB,EAAU+gtB,EAAcp3xB,KAAKuoxB,aAEjEvoxB,KAAKsoxB,WAAWluvB,QAAUy8vB,EAC1B72xB,KAAKsoxB,WAAW18tB,WACZ5rD,KAAKyoxB,YAAc5ixB,EAAQ8D,EAAO3I,QAAS,IAAMskxB,KACjDtlxB,KAAKyoxB,UAAUlnsB,OAEnB,IAAIm1sB,EAAe12xB,KAAKsoxB,WAAWlmqB,WAAav8G,EAAQ8D,EAAO3I,QAAS,IAAMu/wB,IAG9E,GAFAvgxB,KAAKsoxB,WAAWlmqB,SAAWpiH,KAAKM,OAAOg/tB,WAAa9+tB,SAASuL,KACzDlG,EAAQ8D,EAAO3I,QAAS,IAAMu/wB,IAC7BmW,EAGA,CAED,GADA5mG,EAAS5trB,SACJlC,KAAKM,OAAOg/tB,WAAY,EACrB63D,EAAaN,EAAgBl0xB,cAAc,IAAM0gxB,KAC1CnhxB,QAEflC,KAAKq3xB,uBARLr3xB,KAAK41xB,qBAAqBjsxB,EAAO3I,WAY7CkxxB,EAAY72xB,UAAUg7xB,gBAAkB,SAAUp2xB,EAAMyG,GACpD,IAAI4wxB,EAAgB,GACpB,GAA6D,IAAzDt3xB,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAMq4I,UAAU3uO,OAAc,CAC5D,IAAI86xB,EAAuBv3xB,KAAKM,OAAO0rxB,aAAaD,mBAAmB1qxB,OAAO,GAAG,GAC7E0txB,EAAewI,EAAqBh0tB,WACpCi0tB,EAAkB,EACtB,GAAa,UAAT9wxB,EAAkB,CAClB,IAAI8+E,EAAcvlF,EAAK3D,MACvByyxB,EAAa3vxB,QAAQ,SAAU6xQ,EAAUh/P,GACjCg/P,EAASsmhB,EAAqBE,WAAajysB,EAAY+xsB,EAAqBxrwB,SAC5EyrwB,EAAkBvlxB,KAI9BqlxB,EAAgBvI,EAAayI,GAAiBD,EAAqB1lU,gBAGnE,GAAa,UAATnrd,EAAkB,CAClB,IACIgxxB,EADYz3xB,EAAK3D,MACU0D,KAAKM,OAAO0rxB,aAAaD,mBAAmB1qxB,OAAO,GAAG,GAAG0qB,OACnFvtB,MAAMC,QAAQi5xB,KACfA,GAAkBA,IAEtB,IAAIC,EAAuB33xB,KAAKM,OAAO0rxB,aAAagD,kBACpD,IAAKhvxB,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAM6ksB,UAAW,CAChD,IAAIC,EAAiB73xB,KAAKM,OAAO0rxB,aAAaD,mBAAmB1qxB,OAAO,GAAG,GACtEkiE,WACLo0tB,EAAuB33xB,KAAKM,OAAO0rxB,aAAagD,kBAAkB3txB,MAAM,EAAGw2xB,EAAep7xB,QAE9Fi7xB,EAAe9/vB,IAAI,SAAU56B,EAAOiV,GAChC,OAAO0lxB,EAAqBv4xB,QAAQ,SAAUrC,GACtCA,EAAIgyxB,aAAahyxB,EAAIk0Q,SAASwmhB,WAAaz6xB,IAC3Cs6xB,GAAiBv6xB,EAAIgyxB,aAAahyxB,EAAIk0Q,SAAS4gN,WAC3C6lU,EAAej7xB,SAAWwV,EAAQ,IAClCqlxB,GAAiB,eAMhC,CACD,IAAI1+vB,EAAW34B,EACXktrB,EAAc1vrB,EAAkBm7B,EAASu0pB,YAAoC,EAAtBv0pB,EAASu0pB,WAChE2qG,EAAkB93xB,KAAKM,OAAO0rxB,aAAagD,kBAAkB7hG,GACjEmqG,EAAgBQ,EAAgB/I,aAAa+I,EAAgB7mhB,SAAS4gN,WAG9E,OAAOylU,GAEXpF,EAAY72xB,UAAU06xB,mBAAqB,SAAU1wsB,EAAW3+E,GAC5D,IASI0vxB,EATAxqwB,EAAS5rB,KAAKM,OAAO4lxB,YACrB4Q,EAAgBzxsB,EAAUz5D,EAAOgylB,UAAY59mB,KAAKqlH,KAAKtxC,YAAY,WACnEmE,EAAYmN,EAAUz5D,EAAO1L,WAC7Bi4D,EAAUkN,EAAUz5D,EAAO0iM,SAC3BypkB,EAAmB/3xB,KAAK2qG,cAAczyB,EAAW,QACjD8/sB,EAAkB3ysB,EAAUz5D,EAAO8yvB,WAAoC,IAAvBvmsB,EAAQ/R,YAA6C,IAAzB+R,EAAQ7R,aACpFtmE,KAAK2qG,cAAcwirB,GAAa,IAAIntwB,KAAKm4D,EAAQl4D,YAAa,GAAI,QAAUjgB,KAAK2qG,cAAcxyB,EAAS,QACxG8/sB,EAAkBj4xB,KAAKM,OAAOw1xB,cAAc59sB,GAC5CggtB,EAAgBl4xB,KAAKM,OAAOw1xB,cAAc39sB,GAE1CggtB,GAAgBhgtB,EAAQl4D,UAAYi4D,EAAUj4D,WAAaomwB,GAC3DvrO,EAAa3ie,EAAQhS,YAAc+R,EAAU/R,YAC5CgS,EAAQl4D,UAAYi4D,EAAUj4D,gBAAgC,GAAK,EAAI,EAY5E,OAXIolE,EAAUz5D,EAAO8yvB,WAAayZ,GAAgB,GAAKr9O,EAAa,GAChEs7O,EAAU2B,EAAmB,MACxB1ysB,EAAUz5D,EAAO8yvB,UAAY1+wB,KAAKqlH,KAAKtxC,YAAY,UAAYkktB,GAAmB,KACnFE,EAAe,GAAKr9O,EAAa,KACjCs7O,GAAW,gBAAkB4B,EAAiB,MACzC3ysB,EAAUz5D,EAAO8yvB,UAAY1+wB,KAAKqlH,KAAKtxC,YAAY,UAAYmktB,GAAiB,MAIzF9B,EAAU2B,EAAmB,KAAQE,EAAkB,gBAAkBC,EAAiB,KAErFpB,aAAcA,EAAcV,QAASA,IAElDlE,EAAY72xB,UAAU+8xB,eAAiB,SAAU57xB,EAAM2wrB,GACnDntrB,KAAKwvxB,gBAAe,GACpB,IAAImF,EAAsB30xB,KAAKyoxB,UAAUznxB,QAAQ2B,cAAc,IAAMiyxB,IACjED,GACApwxB,EAAOowxB,GAEX,IAAI3mlB,EAAiBxxM,EAAS,KAAEyjB,UAAW/S,WACvC/F,EAAStB,EAAQrJ,EAAKwE,QAAS,IAAM4ixB,IACzC5jxB,KAAKyoxB,UAAUznxB,QAAQ2B,cAAc,iBAAuCX,UAAYhC,KAAK2qG,cAAcnuG,EAAKm6E,KAAM,KACtH,IAAI0htB,EAAcr4xB,KAAKyoxB,UAAUznxB,QAAQ2B,cAAc,IAAMkhxB,IAC7DwU,EAAYr2xB,UAAYhC,KAAK2qG,cAAcnuG,EAAKm6E,KAAM,KACtD0htB,EAAY70xB,aAAa,YAAawqM,GACtC,IAAIo+kB,EACC3uxB,EAAkB0vrB,KACnBkrG,EAAY70xB,aAAa,mBAAoB2prB,GAC7Ci/F,EAAapsxB,KAAKM,OAAO0rxB,aAAagD,kBAAkBj6vB,SAASo4pB,EAAY,KAAKi/F,YAEtF,IAAIkM,EAAoBt4xB,KAAKy0xB,oBAAoBj4xB,EAAKF,MAAO8vxB,EAAYj/F,GACzEntrB,KAAKyoxB,UAAUznxB,QAAQ2B,cAAc,IAAMgwxB,IAA4BhxxB,YAAY22xB,GACnFj0xB,EAAYrE,KAAKyoxB,UAAUznxB,QAAQ2B,cAAc,IAAMiwxB,IAAkCx4wB,SAAUm+wB,IAC/Fra,GAAe1hxB,EAAKm6E,MAAM12D,YAAci+vB,GAAe,IAAIl+vB,MAAQC,WACnEtc,EAAS3D,KAAKyoxB,UAAUznxB,QAAQ2B,cAAc,IAAMiwxB,IAAkCx4wB,SAAUm+wB,IAEpGv4xB,KAAKyoxB,UAAUrmqB,SAAWv8G,EAAQsB,EAAQ,IAAMq5wB,IAChD,IAAIj7rB,GAAc7+E,KAAM,iBAAkBlK,KAAMA,EAAMq8B,QAAQ,EAAO73B,QAAShB,KAAKyoxB,UAAUznxB,SAC7FhB,KAAKM,OAAOkmB,QAAQguwB,GAAiBjvsB,GACjCA,EAAU1sD,QAGd74B,KAAKyoxB,UAAUxkqB,QAEnBiuqB,EAAY72xB,UAAUo7xB,UAAY,WAC9B,GAAKz2xB,KAAKsoxB,WAAWtnxB,QAAQ2B,cAAc,IAAMoxxB,IAAgBrssB,cAAc,GAAG6nD,WAAlF,CAGA,IAAI3jH,EAAS5rB,KAAKM,OAAO4lxB,YACrBsS,KACJA,EAAQ5swB,EAAOtoB,IAAMtD,KAAKM,OAAOuouB,UAAU6mD,gBAAkB,EAC7D8I,EAAQ5swB,EAAOgylB,SAAW59mB,KAAKsoxB,WAAWtnxB,QAAQ2B,cAAc,IAAM6gxB,IAAmBxmxB,OACrFgD,KAAKM,OAAO0zxB,cAAcpowB,OAAOgylB,QAAQzpV,SAAWn0R,KAAKM,OAAOo4E,UAAU3E,YAAY,YAC1FyktB,EAAQ5swB,EAAO1L,WAAalgB,KAAKM,OAAO+9wB,gBAAgBn+vB,UACxDs4wB,EAAQ5swB,EAAO0iM,SAAWtuN,KAAKM,OAAO+9wB,gBAAgB/vjB,QACtDkqkB,EAAQ5swB,EAAO8yvB,UAAY1+wB,KAAKM,OAAO+9wB,gBAAgBK,SACnD1+wB,KAAKM,OAAO0rxB,cACZhsxB,KAAKM,OAAO0rxB,aAAayM,kBAAkBD,GAAS,GAExDx4xB,KAAK0snB,WAAWgkK,SAAS8H,GACzBx4xB,KAAKwvxB,mBAET0C,EAAY72xB,UAAUk7xB,aAAe,WACjC,IAAI34K,EAAU59mB,KAAKsoxB,WAAWtnxB,QAAQ2B,cAAc,IAAM6gxB,IAAmBxmxB,MAC7E,GAAgB,KAAZ4gnB,EACWl/mB,EAAOsB,KAAKM,OAAO+9wB,iBAAmBzgK,QAASA,IAE9D59mB,KAAKoyxB,eAAelwG,iBACpBlirB,KAAKwvxB,iBACLxvxB,KAAKM,OAAOq+wB,YAAYC,WAAW5+wB,KAAKM,OAAO+9wB,gBAAiB,QAEpE6T,EAAY72xB,UAAUs6xB,UAAY,SAAUr5xB,GACxC0D,KAAKwvxB,gBAAe,GACpB,IAAIhzxB,EAAOwD,KAAKM,OAAO8nxB,gBAAgB9rxB,MACvC0D,KAAKM,OAAOoia,cAAgB,aACvBjla,EAAkBjB,EAAKwD,KAAKM,OAAO4lxB,YAAY6E,iBAKhD/qxB,KAAKM,OAAOq+wB,YAAYC,WAAWpixB,EAAMwD,KAAKM,OAAOoia,gBAJrD1ia,KAAKM,OAAOoia,cAAgB,iBAC5B1ia,KAAKyvxB,wBAMbyC,EAAY72xB,UAAUktxB,YAAc,WAChCvoxB,KAAKwvxB,gBAAe,GACpBxvxB,KAAKM,OAAOoia,cAAgB,SACxB1ia,KAAKM,OAAO8nxB,gBAAgB9rxB,MAAM0D,KAAKM,OAAO4lxB,YAAY6E,gBAC1D/qxB,KAAKyvxB,sBAGLzvxB,KAAKs0xB,mBAGbpC,EAAY72xB,UAAUq9xB,uBAAyB,WAC3C,IAAI14xB,KAAKyoxB,UAAUznxB,QAAQ8C,UAAUK,SAAS,iBAA9C,CAGA,IAAIwwxB,EAAsB30xB,KAAKyoxB,UAAUznxB,QAAQ2B,cAAc,IAAMiyxB,IACjED,GACApwxB,EAAOowxB,GAEX,IAIIn4xB,EACA4vxB,EALAiM,EAAcr4xB,KAAKyoxB,UAAUznxB,QAAQ2B,cAAc,IAAMkhxB,IACzD3rsB,EAAYl4E,KAAKM,OAAOq4xB,mBAAmBN,GAC3ClgtB,EAAUg1sB,GAAaj1sB,EAAW,GAClCi1mB,EAAakrG,EAAYxlxB,aAAa,oBAGrCpV,EAAkB0vrB,KAEnBi/F,GADA5vxB,EAAOwD,KAAKM,OAAO0rxB,aAAagD,kBAAkBj6vB,SAASo4pB,EAAY,MACrDi/F,YAEtB,IAAIwM,EAAiB54xB,KAAKM,OAAOuouB,UAAUsiD,aAAajzsB,EAAWC,EAASn4E,KAAKM,OAAO0lxB,gBAAiBxpxB,GACzG,GAA8B,IAA1Bo8xB,EAAen8xB,OACfuD,KAAKyoxB,UAAUznxB,QAAQoZ,SAAS,GAAGzY,YAAYR,EAAc,OACzDkC,UAAWuxxB,GACX5yxB,UAAWhC,KAAKqlH,KAAKtxC,YAAY,yBAGpC,CACD,IAAI8ktB,EAAc74xB,KAAKy0xB,oBAAoBmE,EAAgBxM,EAAYj/F,GACvEntrB,KAAKyoxB,UAAUznxB,QAAQ2B,cAAc,IAAMgwxB,IAA4BhxxB,YAAYk3xB,MAG3F3G,EAAY72xB,UAAU43xB,WAAa,WAC/BjzxB,KAAKwvxB,iBACLxvxB,KAAKyoxB,UAAUlnsB,QAEnB2wsB,EAAY72xB,UAAU+3xB,kBAAoB,SAAU92xB,GAChD,IAAI+lJ,EAAeriJ,KAAKmzxB,YAAYnyxB,QAAQ2B,cAAc,wBAC1D,GAAIrG,EAAM6K,OAAOrD,UAAUK,SAAS,oBAC/Bk+I,EAAav+I,UAAUK,SAAS,+BAGjC,OAFAE,GAAag+I,GAAe,oCAC5BriJ,KAAKM,OAAOq+wB,YAAYma,UAAU94xB,KAAKqlH,KAAKtxC,YAAY,OAI5D,GADA/zE,KAAKmzxB,YAAY5xsB,OACbjlF,EAAM6K,OAAOrD,UAAUK,SAASsvxB,IAEhC,OADAzzxB,KAAKM,OAAOoia,cAA+C,WAA9B1ia,KAAKM,OAAOoia,cAA8B,mBAAqB,iBACpF1ia,KAAKM,OAAOoia,eAChB,IAAK,iBACD1ia,KAAKM,OAAOq+wB,YAAYC,WAAW5+wB,KAAKM,OAAO8nxB,gBAAgB9rxB,MAAO0D,KAAKM,OAAOoia,eAClF,MACJ,IAAK,mBACD1ia,KAAK0snB,WAAW0kK,YAAYpxxB,KAAKM,OAAO8nxB,gBAAgB9rxB,MAAO0D,KAAKM,OAAOoia,oBAIlF,GAAIpma,EAAM6K,OAAOrD,UAAUK,SAASuvxB,IAErC,OADA1zxB,KAAKM,OAAOoia,cAA+C,WAA9B1ia,KAAKM,OAAOoia,cAA8B,eAAiB,aAChF1ia,KAAKM,OAAOoia,eAChB,IAAK,aACD,IAAIouX,EAAc9wxB,KAAKM,OAAOuouB,UAAUmnD,mBAAmBhwxB,KAAKM,OAAO8nxB,gBAAgB9rxB,OACvF0D,KAAKM,OAAOq+wB,YAAYC,WAAWkS,EAAa9wxB,KAAKM,OAAOoia,eAC5D,MACJ,IAAK,eACD1ia,KAAK0snB,WAAW0kK,YAAYpxxB,KAAKM,OAAO8nxB,gBAAgB9rxB,MAAO0D,KAAKM,OAAOoia,oBAI9Epma,EAAM6K,OAAOrD,UAAUK,SAASwvxB,KACrC3zxB,KAAK0snB,WAAW0kK,YAAYpxxB,KAAKM,OAAO8nxB,gBAAgB9rxB,MAAO0D,KAAKM,OAAOoia,gBAGnFwvX,EAAY72xB,UAAUu7xB,wBAA0B,SAAUzvxB,GACtD,IAAIqmW,EAAmBxtW,KAAKM,OAAOuouB,UAAUo6C,yBAAyB97wB,GAEtE,GADAnH,KAAKM,OAAO8nxB,gBAAkBpoxB,KAAKM,OAAOuouB,UAAUw/C,oBAChD76a,EAAiB/wW,OAAS,EAAG,CAC7B,IAAIs8xB,EAAW/4xB,KAAKM,OAAOuouB,UAAU29C,eAAeh5a,EAAiB,GAAG36V,aAAa,cACjFmmxB,EAA4C,IAA5Bxrb,EAAiB/wW,OAChCs8xB,EAAS/4xB,KAAKM,OAAO4lxB,YAAYtoK,UAAY59mB,KAAKqlH,KAAKtxC,YAAY,WACpE,IAAMy5R,EAAiB/wW,OAAS,UAAiBuD,KAAKqlH,KAAKtxC,YAAY,iBAC3E/zE,KAAKsoxB,WAAWtnxB,QAAQ2B,cAAc,IAAM6gxB,IAAmBxhxB,UAAYg3xB,EACvExrb,EAAiB/wW,OAAS,EAC1BkH,GAAU3D,KAAKsoxB,WAAWtnxB,QAAQ2B,cAAc,IAAM+yxB,KVjU5C,YUoUVrxxB,GAAarE,KAAKsoxB,WAAWtnxB,QAAQ2B,cAAc,IAAM+yxB,KVpU/C,iBUwUd11xB,KAAKM,OAAOktW,oBACZxtW,KAAKwvxB,kBAGb0C,EAAY72xB,UAAU47xB,YAAc,SAAU36xB,GAC1C,IAAI28xB,EAAc,GAIlB,OAHAA,GAAe38xB,EAAM0D,KAAKM,OAAO4lxB,YAAYsF,gBAAkB,GAC/DyN,GAA+B,KAAhBA,EAAqB,GAAK,MACzCA,GAAe38xB,EAAM0D,KAAKM,OAAO4lxB,YAAYuF,cAAgB,IAGjEyG,EAAY72xB,UAAU07xB,qBAAuB,SAAUz6xB,GACnD,IACI48xB,EADmBl5xB,KAAKM,OAAOq+wB,YAAYwa,8BACZC,eAAe98xB,EAAM0D,KAAKM,OAAO4lxB,YAAY6E,iBAChF,OAAOmO,EAAY/5wB,OAAO,GAAGsL,cAAgByuwB,EAAY73xB,MAAM,IAEnE6wxB,EAAY72xB,UAAUsvG,cAAgB,SAAUh0B,EAAMupD,GAClD,OAAOlgI,KAAKM,OAAO4qM,UAAUlgG,WAAWr0B,GAAQjV,SAAUw+D,KAE9DgypB,EAAY72xB,UAAUg+xB,kBAAoB,SAAUlyxB,GAChD,OAAIA,EAAOrD,UAAUK,SAASo8wB,IACnBvgxB,KAAKM,OAAO8nxB,gBAAgB9rxB,MAEhC0D,KAAKM,OAAO+9wB,iBAEvB6T,EAAY72xB,UAAUg4xB,uBAAyB,WAC3CrzxB,KAAKM,OAAOuouB,UAAUttD,gBAE1B22G,EAAY72xB,UAAUu6xB,qBAAuB,SAAUzuxB,GACnD,IAAImyxB,EAAet5xB,KAAKsoxB,WAAWtnxB,QAAQ2B,cAAc,kBACrD+nvB,EAAY1qvB,KAAKM,OAAOg/tB,WAAag6D,EAAe,gBAAkB,gBAAkB,YACxF/zsB,GACA7+E,KAAMgkvB,EAAW7xtB,QAAQ,EAAOr8B,KAAMwD,KAAKq5xB,kBAAkBlyxB,GAC7DA,OAAQA,EAAQnG,QAAShB,KAAKsoxB,WAAWtnxB,SAG7C,GADAhB,KAAKM,OAAOkmB,QAAQguwB,GAAiBjvsB,GACjCA,EAAU1sD,OAGV,OAFA74B,KAAKu5xB,sBACLv5xB,KAAKsoxB,WAAWtnxB,QAAQgB,UAAY,IAGxC,IAAIs0C,EAAUt2C,KAAKsoxB,WAAWtnxB,QAAQ0D,MAAM4xC,QAC5Ct2C,KAAKsoxB,WAAWtnxB,QAAQ0D,MAAM4xC,QAAU,QACpCt2C,KAAKM,OAAOg/tB,YACZt/tB,KAAKsoxB,WAAWtnxB,QAAQ0K,gBAAgB,SACxC1L,KAAKsoxB,WAAWtnxB,QAAQ0D,MAAM4xC,QAAU,QACxCt2C,KAAKsoxB,WAAWtnxB,QAAQ0D,MAAMqR,OAASxT,EAA0B,kBAAdmovB,EAAiC,GAAK7uvB,OAAOyd,eAGhGtZ,KAAKsoxB,WAAWz8wB,SAAY7L,KAAKsoxB,WAAWtnxB,QAAQ4D,YAAc,EAClE5E,KAAKsoxB,WAAWr8wB,SAAWjM,KAAKsoxB,WAAWtnxB,QAAQ0wC,cAEnD4nvB,GACAt5xB,KAAKq3xB,kBAETr3xB,KAAKsoxB,WAAWtnxB,QAAQ0D,MAAM4xC,QAAUA,EACxCt2C,KAAKsoxB,WAAW18tB,WAChB5rD,KAAKsoxB,WAAWrkqB,QAEpBiuqB,EAAY72xB,UAAUg8xB,gBAAkB,WACpC,IAAI7gwB,EAAQx2B,KAAKM,OAAO8nxB,gBAAgBpnxB,QAAQ0D,MAAMitD,gBACtD,GAAc,KAAVn7B,EAAJ,CAGA,IAAIgjwB,EAAWx5xB,KAAKsoxB,WAAWtnxB,QAAQ2B,cAAc,IAAM8yxB,IACvDz1xB,KAAKsoxB,WAAWtnxB,QAAQ2B,cAAc,IAAMqlxB,IAAwB/zwB,gBACpEulxB,EAAWx5xB,KAAKsoxB,WAAWtnxB,QAAQ2B,cAAc,IAAM6gxB,KAC9C9+wB,MAAM+wY,gBAAkBj/W,EACjCA,EAAQ,QAAUA,EAAM7mB,MAAM,QAAQwR,OAAS,SAEnDq4wB,EAAS90xB,MAAMitD,gBAAkBn7B,IAErC07vB,EAAY72xB,UAAUm3xB,eAAiB,WACnC,IAAIxyxB,KAAKM,OAAOg/tB,WAGhB,GAAIt/tB,KAAKsoxB,WAAWtnxB,QAAQ2B,cAAc,iBAA6B,CACnE,IAAI82xB,EAAiBz5xB,KAAKsoxB,WAAWtnxB,QAAQ2B,cAAc,IAAM6gxB,IAC7DiW,GACAA,EAAev3xB,YAGlB,CACD,IAAI24vB,EAAc76vB,KAAKsoxB,WAAWtnxB,QAAQ2B,cAAc,IAAM0gxB,IAC1DxoB,GACAA,EAAY34vB,QAEhB,IAAI4trB,EAAW9vrB,KAAKsoxB,WAAWtnxB,QAAQ2B,cAAc,WACjDmtrB,GACAA,EAAS5trB,UAIrBgwxB,EAAY72xB,UAAUo3xB,gBAAkB,WACpCzyxB,KAAKM,OAAOuouB,UAAUttD,eACtBv7qB,KAAKsoxB,WAAWlmqB,SAAWo+pB,GAC3BxgxB,KAAKoyxB,eAAelwG,iBACpBlirB,KAAKu5xB,iBACLv5xB,KAAKsoxB,WAAWtnxB,QAAQgB,UAAY,IAExCkwxB,EAAY72xB,UAAUy3xB,cAAgB,SAAUx2xB,GAC5C0D,KAAKyoxB,UAAUznxB,QAAQ2B,cAAc,IAAMkhxB,IAAkC3hxB,QAC7ElC,KAAKyoxB,UAAU/mqB,mBAEnBwwqB,EAAY72xB,UAAU03xB,eAAiB,SAAUz2xB,GAC7C,IAAIo9xB,EAAc15xB,KAAKM,OAAOU,QAAQ2B,cAAc,IAAM2ixB,IACtDoU,GACAA,EAAYn1xB,UAGpB2txB,EAAY72xB,UAAUm0xB,eAAiB,SAAUprqB,GAC7C,GAAIpkH,KAAKsoxB,WAAWtnxB,QAAQ8C,UAAUK,SAAS,gBAAiB,CAC5D,GAAIigH,EAAe,CACf,IAAIztE,EAAY32C,KAAKsoxB,WAAWlkqB,cAChCpkH,KAAKsoxB,WAAWlkqB,cAAgB,KAChCpkH,KAAKsoxB,WAAW/msB,OAChBvhF,KAAKsoxB,WAAWlkqB,cAAgBztE,OAGhC32C,KAAKsoxB,WAAW/msB,OAEpBvhF,KAAKmyxB,uBAAwB,IAGrCD,EAAY72xB,UAAU63xB,gBAAkB,SAAUryxB,GAE9C,IAAKpD,EADaoI,EAAQhF,EAAEsG,OAAQ,IAAM0rxB,KACL,CACjC,IAAIl8sB,EAAO32E,KAAKM,OAAOq4xB,mBAAmB93xB,EAAEutG,eACvC3wG,EAAkBk5E,IAAU32E,KAAKM,OAAOg/tB,aACzCt/tB,KAAKizxB,aACLjzxB,KAAKM,OAAO0G,eAAgBgnM,aAAcr3H,IAAQ,GAClD32E,KAAKM,OAAO09wB,WAAW,UAInCkU,EAAY72xB,UAAUu7wB,cAAgB,SAAU/1wB,GAC5C,IAAIsG,EAAStG,EAAEvE,MAAM6K,OAChBtB,EAAQsB,EAAQ,IAAM+7wB,GAA0B,mEACjDljxB,KAAKwvxB,iBAEJ3pxB,EAAQsB,EAAQ,IAAM2/wB,KAAkC3/wB,EAAOrD,UAAUK,SAASy/wB,KAC9E/9wB,EAAQsB,EAAQ,IAAM42wB,KAC3B/9wB,KAAKyoxB,UAAUlnsB,QAGvB2wsB,EAAY72xB,UAAUmtxB,aAAe,WACjCxoxB,KAAKwvxB,iBACLxvxB,KAAKM,OAAOuouB,UAAUttD,gBAE1B22G,EAAY72xB,UAAUqB,iBAAmB,WACrCsD,KAAKM,OAAOslF,GAAG69rB,GAAiBzjxB,KAAK4iuB,UAAW5iuB,MAChDA,KAAKM,OAAOslF,GAAG2psB,GAAkBvvxB,KAAKy2wB,WAAYz2wB,MAClDA,KAAKM,OAAOslF,GAAGupsB,GAAqBnvxB,KAAK42wB,cAAe52wB,MACxDA,KAAKM,OAAOslF,GAAG0lsB,GAAiBtrxB,KAAK04xB,uBAAwB14xB,MAC7DA,KAAKM,OAAOslF,GAAG+zsB,GAAoB35xB,KAAKs1xB,kBAAmBt1xB,OAE/DkyxB,EAAY72xB,UAAUu+xB,mBAAqB,WACvC55xB,KAAKM,OAAO0lF,IAAIy9rB,GAAiBzjxB,KAAK4iuB,WACtC5iuB,KAAKM,OAAO0lF,IAAIupsB,GAAkBvvxB,KAAKy2wB,YACvCz2wB,KAAKM,OAAO0lF,IAAImpsB,GAAqBnvxB,KAAK42wB,eAC1C52wB,KAAKM,OAAO0lF,IAAIslsB,GAAiBtrxB,KAAK04xB,wBACtC14xB,KAAKM,OAAO0lF,IAAI2zsB,GAAoB35xB,KAAKs1xB,oBAE7CpD,EAAY72xB,UAAUk+xB,eAAiB,cACRl4xB,MAAMC,KAAKtB,KAAKsoxB,WAAWtnxB,QAAQO,qBAAqB,WACjEnC,QAAQ,SAAU+xH,GAChC,IAAI5qH,EAAW4qH,EAAOzpC,cAAc,GAChCnhF,GACAA,EAAS+L,aAIrB4/wB,EAAY72xB,UAAUiX,QAAU,WAC5BtS,KAAKoyxB,eAAe9/wB,UACpBtS,KAAK45xB,qBACL55xB,KAAKu5xB,iBACLv5xB,KAAKsoxB,WAAWh2wB,UAChB/N,EAAOvE,KAAKsoxB,WAAWtnxB,SACvBhB,KAAKyoxB,UAAUn2wB,UACXtS,KAAKmzxB,YAAYnyxB,UACjBhB,KAAKmzxB,YAAY7gxB,UACjB/N,EAAOvE,KAAKmzxB,YAAYnyxB,SACxBhB,KAAKmzxB,YAAYnyxB,QAAU,OAG5BkxxB,KCl1BP2H,GAA8B,WAC9B,SAASA,EAAav5xB,GAClBN,KAAKM,OAASA,EACdN,KAAKujI,WAAa,IAAIvtF,IAClB5b,QAAS,WACTlmB,SAAU,cACVjI,QAAS,GACT++G,YAAYhrH,KAAKM,OAAOg/tB,WACxB5orB,gBAAgB,EAChBzjC,SAAUjT,KAAKM,OAAO2S,SAAW,IAAM6mxB,GACvC3yxB,OAAQ,IAAMo5wB,GACdvrY,aAAch1Y,KAAKi1Y,eAAe35Y,KAAK0E,MACvCkT,UAAWlT,KAAKM,OAAO4S,YAE3BlT,KAAKujI,WAAWltF,SAASr2C,KAAKM,OAAOU,SA2DzC,OAzDA64xB,EAAax+xB,UAAU45Y,eAAiB,SAAUh1Y,GAC9C,GAAKxC,EAAkBwC,EAAKkH,OAAO0L,aAAa,oBAAhD,CAGA,IAAIy+I,EAAStxJ,KAAKM,OAAOuouB,UAAU29C,eAAevmxB,EAAKkH,OAAO0L,aAAa,cACvEunB,EAAU,GACd,GAAK38B,EAAkBuC,KAAKM,OAAO0zxB,cAAc+F,iBAK5C,CACD,IAAI7ulB,EAAYlrM,KAAKM,OAAO4qM,UACxBt/K,EAAS5rB,KAAKM,OAAO4lxB,YACrB8T,EAAa,IAAIh6wB,KAAK,GAAKsxI,EAAO1lI,EAAO1L,YACzC+5wB,EAAW,IAAIj6wB,KAAK,GAAKsxI,EAAO1lI,EAAO0iM,UAC3C2rkB,EAAoC,IAAxBA,EAAS7ztB,YAA8C,IAA1B6ztB,EAAS3ztB,aAAsB,IAAItmD,KAAKi6wB,EAASpxrB,iBAAiB,MAASoxrB,EACpH,IAAI/htB,EAAYgmsB,GAAe,IAAIl+vB,KAAK,GAAKg6wB,IACzC7htB,EAAU+lsB,GAAe,IAAIl+vB,KAAK,GAAKi6wB,IACvCC,EAAkB5ooB,EAAO1lI,EAAOgylB,UAAY59mB,KAAKM,OAAO0zxB,cAAcpowB,OAAOgylB,QAAQzpV,SACrFn0R,KAAKM,OAAOo4E,UAAU3E,YAAY,WAClCkwN,EAAmBxmS,EAAkB6zJ,EAAO1lI,EAAO8B,WAAuC,GAA1B4jI,EAAO1lI,EAAO8B,UAC9EyswB,EAAiBjvlB,EAAUlgG,WAAWgvrB,GAActzxB,KAAM,OAAQg7D,SAAU,SAE5E04tB,GADelvlB,EAAUlgG,WAAWivrB,GAAYvzxB,KAAM,OAAQg7D,SAAU,SACnDwpI,EAAUlgG,WAAWgvrB,GAActzxB,KAAM,OAAQg7D,SAAU,WAChF24tB,EAAmBnvlB,EAAUlgG,WAAWivrB,GAAYvzxB,KAAM,OAAQg7D,SAAU,UAC5ExhD,EAAYgrL,EAAUlgG,WAAWgvrB,GAActzxB,KAAM,OAAQg7D,SAAU,UACvE4sJ,EAAUpjB,EAAUlgG,WAAWivrB,GAAYvzxB,KAAM,OAAQg7D,SAAU,UAWvEtnC,EAAU,+BAAiC8/vB,EAAiB,iCAC3Bj2f,EAAkB,iCAV/C/rN,EAAUj4D,YAAck4D,EAAQl4D,UACfirL,EAAUlgG,WAAWgvrB,GAActzxB,KAAM,OAAQg7D,SAAU,SAG1DwW,EAAUnS,gBAAkBoS,EAAQpS,cAAkBo0tB,EAAiB,MAAQE,EAC5FD,EAAqB,MAAQC,GAMW,iCAJ9B/ooB,EAAO1lI,EAAO8yvB,UAAa1+wB,KAAKM,OAAOo4E,UAAU3E,YAAY,UAC3E7zD,EAAY,MAAQouM,GAIqB,mBAnCiB,CAC/D,IAAItqN,EAAMxD,SAASW,cAAc,OACjCiE,KAAU/D,MAAMC,KAAKtB,KAAKM,OAAOg6xB,yBAAZt6xB,CAAsCsxJ,IAAUttJ,GACrEo2B,EAAUp2B,EAAIhC,UAkClBhC,KAAKujI,WAAWnpG,QAAUA,IAE9By/vB,EAAax+xB,UAAU4G,MAAQ,WAC3BjC,KAAKujI,WAAWthI,SAOpB43xB,EAAax+xB,UAAUiX,QAAU,WAC7BtS,KAAKujI,WAAWjxH,UAChBtS,KAAKujI,WAAa,MAEfs2pB,KChFPvvsB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAW5D29vB,GAAgB,kBAChBC,GAAoB,uBACpBC,GAAgB,mBAChBC,GAAiB,oBAEjBC,GAAa,SACbC,GAAc,aAEdC,GAAsB,kBACtBC,GAAsB,0BACtBC,GAAwB,mBAExBC,GAAuB,2BACvBC,GAA+B,oCAC/BC,GAAW,cACXC,GAAY,eAEZC,GAAqB,2BAUrBC,GAAY,gBAEZC,GAAoB,iBACpBC,GAAa,qBACbC,GAAc,4BAEdC,GAAU,YA4DVh5sB,IACAi5sB,KAAM,GACNC,MAAO,OACPC,OAAQ,QACRC,QAAS,SACTC,OAAQ,SAERC,IACAt9rB,IAhCa,KAiCbC,IAhCa,KAiCbC,IAhCc,KAiCdC,IAhCgB,KAiChBC,IAhCe,KAiCfC,IAhCa,KAiCbC,IAhCe,MAkCfi9rB,IAAkBrB,GAAYC,GAzFtB,WAhBQ,aAyGiDC,GAAqBE,IACtFkB,IAAiBrB,IACjBsB,IAAkBvB,GAAYE,IAC9BsB,IAAiBxB,IACjByB,IAAkBzB,GAAYC,GAAaC,GAAqBE,IAChEsB,IAAkBhB,GAAWC,IAC7BgB,IAAuBjB,IACvBkB,IAAsBjB,IAatBkB,GAAkC,SAAUrxsB,GAM5C,SAASqxsB,EAAiBxpxB,EAAShS,GAC/B,IAAIjB,EAAQorF,EAAO7pF,KAAKtB,KAAMgT,EAAShS,IAAYhB,KA4CnD,OA3CAD,EAAM49a,eACF+9W,KAAM,OACNC,MAAO,QACPC,OAAQ,SACRC,QAAS,UACT7/sB,MAAO,QACP8/sB,OAAQ,SACRW,MAAO,QACP/itB,MAAO,QACP56D,MAAO,QACPlgB,MAAO,QACPC,OAAQ,SACRi6a,MAAO,QACPC,OAAQ,SACR7lZ,KAAM,OACNu0G,OAAQ,SACRi1pB,YAAa,eACb92sB,GAAI,YACJ/mE,IAAK,MACL89wB,MAAO,MACP/+sB,KAAM,SACNg/sB,MAAO,UACPn/rB,OAAQ,WACRo/rB,MAAO,UACPhua,MAAO,QACPiua,aAAc,UACdC,UAAW,KACXC,aAAc,QACdC,cAAe,UACfC,WAAY,SACZC,YAAa,UACbC,aAAc,WACdC,YAAa,UACbC,UAAW,aACXC,cAAe,iBACfC,cAAe,iBACfC,aAAc,gBACdh3pB,eAAgB,mBAEpB1mI,EAAM29xB,cAAe,EACrB39xB,EAAM49xB,eAAgB,EACtB59xB,EAAM69xB,cACN79xB,EAAM89xB,gBACC99xB,EAy3BX,OA36BAuqF,GAAUkysB,EAAkBrxsB,GAoD5BqxsB,EAAiBnhyB,UAAUyiyB,WAAa,SAAU5jtB,EAAM6jtB,EAAO7ltB,GAC3Dl4E,KAAKg+xB,kBACLh+xB,KAAKi+xB,WAAW/jtB,GAChBl6E,KAAKk+xB,iBACLl+xB,KAAKm+xB,gBAAgBJ,GACrB/9xB,KAAKo+xB,eAAelmtB,GACpBl4E,KAAKq+xB,gBAAgBnmtB,GACrBl4E,KAAKs+xB,WAAWt3xB,eAAgBwL,SAAS,KAE7CgqxB,EAAiBnhyB,UAAUoX,UAAY,WACnCzS,KAAK04E,UAAY,IAAI8+B,GAAKx3G,KAAKu/B,gBAAiBv/B,KAAK29a,cAAe39a,KAAKgO,SAG7EwuxB,EAAiBnhyB,UAAUkjyB,iBAAmB,SAAUtrxB,GAChDA,GACAjT,KAAKgB,QAAQ8C,UAAUM,IAAI6O,IAGnCupxB,EAAiBnhyB,UAAU8yG,WAAa,WACpCnuG,KAAK29xB,eAAgB,EACrB39xB,KAAKw+xB,kBACA/gyB,EAAkBuC,KAAKhD,QACxBgD,KAAKy+xB,kBAAkBz+xB,KAAKhD,OAEhCgD,KAAK89xB,WAAW99xB,KAAK0+xB,WAAW1hyB,MAAMkQ,WAAWud,cAnK7C,QAmKmEzqB,KAAKk4E,WAC5El4E,KAAKi+xB,WAAWj+xB,KAAK0+xB,WAAW1hyB,MAAMkQ,YACtClN,KAAKu+xB,iBAAiBv+xB,KAAKiT,WAE/BupxB,EAAiBnhyB,UAAUkwJ,mBAAqB,WAC5C,GAAIvrJ,KAAK09xB,aAAc,CACnB,IAAI1gyB,EAAQgD,KAAK2+xB,oBACjB3+xB,KAAKwmB,QAAQ,UAAYxpB,MAAOA,IAChCgD,KAAKgH,eAAgBhK,MAAOA,IAAS,KAG7Cw/xB,EAAiBnhyB,UAAUujyB,eAAiB,WAGxC,IAAK,IAFDh7xB,EAAW5D,KAAKgB,QAAQQ,iBAAiB,kBAEpCyQ,EAAQ,EAAGA,EAAQrO,EAASnH,OAAQwV,IACzCrO,EAASqO,GAAOnO,UAAUS,OA3LzB,YA4LDX,EAASqO,GAAOnO,UAAUS,OAAOk3xB,KAGzCe,EAAiBnhyB,UAAUwjyB,aAAe,SAAUjltB,GAChD55E,KAAK4+xB,iBACL,IAAIhhtB,GAAQ,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAC9B59E,KAAK8+xB,YAAYlhtB,EAAM59E,KAAK02E,gBAC5B,IAAI11E,EAAUhB,KAAKgB,QAAQ2B,cAAc,8BAA4Ci7E,EAAKr/E,QAAQq7E,GAAY,MAC1G54E,IACAA,EAAQ8C,UAAUM,IArMjB,YAsMDpD,EAAQ8C,UAAUM,IAAIq3xB,MAG9Be,EAAiBnhyB,UAAU0jyB,SAAW,SAAUv6sB,GACxCA,EACAxkF,KAAKgB,QAAQ8C,UAAUM,IA7MpB,SAgNHpE,KAAKgB,QAAQ8C,UAAUS,OAhNpB,UAmNXi4xB,EAAiBnhyB,UAAUgjyB,gBAAkB,SAAU1ntB,GACnD,IAAIwD,EAAW,IAAIn6D,KAAK22D,EAAK12D,WAC7Bk6D,EAASjU,QAAQiU,EAAShU,UAAY,IACtCnmE,KAAKg/xB,aAAah4xB,eAAgBhK,MAAOm9E,KAE7CqitB,EAAiBnhyB,UAAU+iyB,eAAiB,SAAUzntB,GAClD,IAAI0vB,GA7KI,MACA,MACC,MACE,MACD,MACF,MACE,OAwKVrmG,KAAKi/xB,UAAUj4xB,eAAgBhK,MAAO25E,EAAKxQ,YAC3CnmE,KAAKk/xB,cAAcl4xB,eAAgBhK,MAAO++xB,GAAU11rB,EAAQ1vB,EAAK/S,aACjE5jE,KAAKm/xB,WAAWn4xB,eAAgBhK,MAAO,IAAM25E,EAAK1Q,WAAa,KAC/DjmE,KAAKo/xB,aAAap4xB,eAAgBhK,MAAOgD,KAAKq/xB,eAAe1otB,KAC7D32E,KAAK6+xB,aAAalotB,EAAK/S,WAE3B44tB,EAAiBnhyB,UAAU4iyB,WAAa,SAAU3vvB,GAG9CtuC,KAAK0+xB,WAAW13xB,eAAgBhK,MAAOsxC,IACvC,IAAIzvB,EAAM7e,KAAKgB,QAAQ2B,cAAc,aAOrC,OApOI,UA8NA2rC,EACAxqC,EAAU+a,GAAMq8wB,KAAYC,KAG5Br3xB,EAAU+a,GAAMs8wB,KAAaD,KAEzB5svB,GACJ,IAtOD,OAuOK,IAAK,IAAIr8B,EAAQ,EAAGA,EAAQ+pxB,GAAev/xB,OAAQwV,IACzCjS,KAAKgB,QAAQ2B,cAAc,IAAMq5xB,GAAe/pxB,IAClDnO,UAAUM,IAAIo3xB,IAEtB,MACJ,IA1OC,SA2OG,IAASvpxB,EAAQ,EAAGA,EAAQgqxB,GAAcx/xB,OAAQwV,IACxCjS,KAAKgB,QAAQ2B,cAAc,IAAMs5xB,GAAchqxB,IACjDnO,UAAUM,IAAIo3xB,IAEtB,MACJ,IA/OE,UAgPE,IAASvpxB,EAAQ,EAAGA,EAAQiqxB,GAAez/xB,OAAQwV,IACzCjS,KAAKgB,QAAQ2B,cAAc,IAAMu5xB,GAAejqxB,IAClDnO,UAAUM,IAAIo3xB,IAEtB,MACJ,IApPC,SAqPG,IAASvpxB,EAAQ,EAAGA,EAAQkqxB,GAAc1/xB,OAAQwV,IACxCjS,KAAKgB,QAAQ2B,cAAc,IAAMw5xB,GAAclqxB,IACjDnO,UAAUM,IAAIo3xB,IAEtB,MACJ,IA7PA,QA8PI,IAASvpxB,EAAQ,EAAGA,EAAQmqxB,GAAe3/xB,OAAQwV,IACzCjS,KAAKgB,QAAQ2B,cAAc,IAAMy5xB,GAAenqxB,IAClDnO,UAAUM,IAAIo3xB,MAKlCgB,EAAiBnhyB,UAAU8iyB,gBAAkB,SAAU7vvB,GAGnD,OADAtuC,KAAKs/xB,QAAQt4xB,eAAgBhK,MAAOsxC,IAC5BA,GACJ,IArQA,QAsQI,IAAK,IAAIr8B,EAAQ,EAAGA,EAAQoqxB,GAAe5/xB,OAAQwV,IACrCjS,KAAKgB,QAAQ2B,cAAc,IAAM05xB,GAAepqxB,IAClDnO,UAAUM,IAAIo3xB,IAE1B,MACJ,IA1QA,QA2QI,IAASvpxB,EAAQ,EAAGA,EAAQsqxB,GAAmB9/xB,OAAQwV,IACzCjS,KAAKgB,QAAQ2B,cAAc,IAAM45xB,GAAmBtqxB,IACtDnO,UAAUM,IAAIo3xB,IAE1B,MACJ,IA/QA,QAgRI,IAASvpxB,EAAQ,EAAGA,EAAQqqxB,GAAoB7/xB,OAAQwV,IAC1CjS,KAAKgB,QAAQ2B,cAAc,IAAM25xB,GAAoBrqxB,IACvDnO,UAAUM,IAAIo3xB,MAKtCgB,EAAiBnhyB,UAAU6iyB,eAAiB,WAExC,IAAK,IADDh2qB,EACKj2G,EAAQ,EAAGA,EAAQoqxB,GAAe5/xB,OAAQwV,KAC/Ci2G,EAAMloH,KAAKgB,QAAQ2B,cAAc,IAAM05xB,GAAepqxB,MAElDi2G,EAAIpkH,UAAUS,OAAOi3xB,KAIjCgB,EAAiBnhyB,UAAU2iyB,gBAAkB,WAE1Bh+xB,KAAKgB,QAAQQ,iBAAiB,IAAMg6xB,IACnD,IAAK,IAAIvpxB,EAAQ,EAAGA,EAAQ+pxB,GAAev/xB,OAAQwV,IACzCjS,KAAKgB,QAAQ2B,cAAc,IAAMq5xB,GAAe/pxB,IAClDnO,UAAUS,OAAOi3xB,KAG7BgB,EAAiBnhyB,UAAUkkyB,gBAAkB,WACzC,IAAIx/xB,EAAQC,KACRqhc,EAAOrhc,KACXA,KAAK0+xB,WAAa,IAAIjrU,IAElBlwZ,WAAYvjE,KAAKw/xB,gBACjBz4wB,eAAgB,SAChB7T,UAAWlT,KAAKkT,UAChBjB,MAAOjS,KAAKy/xB,aACZ7zwB,QACIa,KAjTA,OAkTAzvB,MAjTC,SAmTL8pB,YAAa9mB,KAAK04E,UAAU3E,YAjT3B,UAkTD+B,gBAAkB51C,MAASlgC,KAAK04E,UAAU3E,YAlTzC,WAmTD3zD,OAAQ,SAAUngB,GACVohc,EAAKs8V,gBAGTt8V,EAAKr6b,eAAgBy4xB,aAAcx/xB,EAAKjD,QAAS,GACjDqkc,EAAKrgc,QAAQ2B,cAAc,qBAAqBX,UAC5Cq/b,EAAK3oX,UAAU3E,YAAY0O,GAAYxiF,EAAKjD,QAChDqkc,EAAK28V,kBACL38V,EAAK48V,WAAWh+xB,EAAKjD,OACrBqkc,EAAKq+V,kBACLr+V,EAAK91S,yBAIbvrJ,KAAK0+xB,WAAWrovB,SAASr2C,KAAKgB,QAAQ2B,cAAc,IAAM83xB,KAC1Dz6xB,KAAKs/xB,QAAU,IAAI7rU,IACflwZ,WAAYvjE,KAAK2/xB,aACjB77kB,WAAY9jN,KAAK4/xB,gBACjB1sxB,UAAWlT,KAAKkT,UAChBjB,MAAO,EACP2Z,QACIa,KA3UA,OA4UAzvB,MA3UC,SA6ULojB,OAAQ,SAAUngB,GACVohc,EAAKs8V,gBAGTt8V,EAAK68V,iBACL78V,EAAK88V,gBAAgBl+xB,EAAKjD,OAC1Bqkc,EAAKq+V,kBACLr+V,EAAK91S,yBAGbvrJ,KAAKs/xB,QAAQjpvB,SAASr2C,KAAKgB,QAAQ2B,cAAc,sBACjD,IAAIk9xB,EAAqB,SAAUC,GAC/B,OAAO,IAAIrsU,IACPlwZ,WAAYu8tB,EACZh8kB,WAAY/jN,EAAM6/xB,gBAClB1sxB,UAAWnT,EAAMmT,UACjB0Y,QACIa,KA/VJ,OAgWIzvB,MA/VH,SAiWDiV,MAAO,EACPmO,OAAQ,SAAUngB,GACVohc,EAAKs8V,gBAGTt8V,EAAK0+V,UAAU/4xB,eAAgBwL,SAAS,IACxC6ub,EAAKq+V,kBACLr+V,EAAK91S,0BAIjBvrJ,KAAKo/xB,aAAeS,EAAmB7/xB,KAAKggyB,mBAC5ChgyB,KAAKo/xB,aAAa/ovB,SAASr2C,KAAKgB,QAAQ2B,cAAc,iBACtD3C,KAAKk/xB,cAAgBW,EAAmB7/xB,KAAKigyB,WAAW,SACxDjgyB,KAAKk/xB,cAAc7ovB,SAASr2C,KAAKgB,QAAQ2B,cAAc,kBACvD3C,KAAKm/xB,WAAa,IAAI1rU,IAClBlwZ,WAAYvjE,KAAKkgyB,eACjBt0wB,QACIa,KApXA,OAqXAzvB,MApXC,SAsXL+pB,eAAgB,SAChB7T,UAAWlT,KAAKkT,UAChBjB,MAAO,EACPmO,OAAQ,SAAUngB,GACVohc,EAAKs8V,gBAGTt8V,EAAK0+V,UAAU/4xB,eAAgBwL,SAAS,IACxC6ub,EAAKq+V,kBACLr+V,EAAK91S,yBAGbvrJ,KAAKm/xB,WAAW9ovB,SAASr2C,KAAKgB,QAAQ2B,cAAc,IAAMm4xB,MAE9D0B,EAAiBnhyB,UAAU8kyB,gBAAkB,WAEzC,IAAK,IADDC,KAAiB/+xB,MAAMC,KAAKtB,KAAKgB,QAAQQ,iBAAiB,iCACrDyQ,EAAQ,EAAGpQ,EAAMu+xB,EAAY3jyB,OAAQwV,EAAQpQ,EAAKoQ,IAAS,CAChE,IAEI1L,EAFU65xB,EAAYnuxB,GAEHy1E,cAAc,GACjCnhF,EAASvF,QAAQ8C,UAAUK,SAASu2xB,KACpCn0xB,EAASvJ,MAAQ,EACjBuJ,EAASqlD,YAEJrlD,EAASvF,QAAQ8C,UAAUK,SAASo3xB,MACzCh1xB,EAASvJ,MAAQ,GACjBuJ,EAASqlD,cAIrB4wuB,EAAiBnhyB,UAAUqkyB,gBAAkB,WAEzC,IAAK,IADDW,KAAsBh/xB,MAAMC,KAAKtB,KAAKgB,QAAQQ,iBAAiB,6BAC1DyQ,EAAQ,EAAGpQ,EAAMw+xB,EAAiB5jyB,OAAQwV,EAAQpQ,EAAKoQ,IAAS,CACrE,IAAIjR,EAAUq/xB,EAAiBpuxB,GAC/B,GACIjR,EAAQ8C,UAAUK,SAAS,gBAAiB,EACxCoC,EAAWvF,EAAQ0mF,cAAc,IACxB1qF,OACTuJ,EAASvJ,MAAQuJ,EAASvJ,MAC1BuJ,EAASqlD,YAGT5rD,KAAKq+xB,gBAAgBr+xB,KAAKk4E,gBAG7B,GAAIl3E,EAAQ8C,UAAUK,SAAS,kBAAmB,EAC/CoC,EAAWvF,EAAQ0mF,cAAc,IAC5Bz1E,MAAQ1L,EAAS0L,OAAS,EACnC1L,EAASqlD,gBAER,GAAI5qD,EAAQ8C,UAAUK,SAAS,oBAAqB,CACrD,IAAIoC,EACAqhB,OAAU,EAEVA,GAHArhB,EAAWvF,EAAQ0mF,cAAc,IAExB1mF,QAAQ8C,UAAUK,SAASu2xB,IAC1B,EAELn0xB,EAASvF,QAAQ8C,UAAUK,SAASo3xB,IAC/B,GAGAv7xB,KAAKk4E,UAAU/R,UAE7B5/D,EAASvJ,MAAQuJ,EAASvJ,OAAS4qB,EACnCrhB,EAASqlD,cAIrB4wuB,EAAiBnhyB,UAAUukyB,cAAgB,WACvC,OAAOp0xB,GAAQkb,SAAW,OAAS,QAEvC81wB,EAAiBnhyB,UAAUilyB,kBAAoB,WAC3C,IAAIj/V,EAAOrhc,KACXA,KAAKg/xB,aAAe,IAAIhrlB,IACpB9gM,UAAWlT,KAAKkT,UAChB6M,IAAK/f,KAAKq7E,QACV/uE,IAAKtM,KAAKo7E,QACVh7D,OAAQ,SAAUngB,GACVA,EAAKjD,OACLqkc,EAAK91S,wBAIjBvrJ,KAAKg/xB,aAAa3ovB,SAASr2C,KAAKgB,QAAQ2B,cAAc,mBAE1D65xB,EAAiBnhyB,UAAUklyB,gBAAkB,WAMzC,IAAK,IAFDr4qB,EAHAnoH,EAAQC,KACRwgyB,EAAOxgyB,KAAKgB,QAAQQ,iBAAiB,kBAGrC6/b,EAAOrhc,KACFiS,EAAQ,EAAGA,EAAQuuxB,EAAK/jyB,OAAQwV,IAAS,CAC9Ci2G,EAAMs4qB,EAAKvuxB,GACX,IAAIk/G,EAAS,IAAIpT,IACbO,UAAU,EACVprG,UAAWlT,KAAKkT,YAEpBi+G,EAAO96E,SAAS6xE,GAChBloH,KAAK49xB,WAAWp5xB,KAAK2sH,GACrB5rH,GAAanB,IAAI8jH,EAAK,QAAS,SAAUjoH,GACrC,IAAIugyB,EAAOzgyB,EAAMiB,QAAQQ,iBAAiB,kBACZi6xB,IAC1Bz6xB,EAAUf,EAAKkH,OACdnG,EAAQ8C,UAAUK,SAASs3xB,IAIvB+E,EAAK/jyB,OAAS,IACnBuE,EAAQ8C,UAAUS,OAAOk3xB,IACzBp6V,EAAK91S,uBALLvqJ,EAAQ8C,UAAUM,IAAIq3xB,IACtBp6V,EAAK91S,0BASrBixoB,EAAiBnhyB,UAAUolyB,kBAAoB,WAC3C,IAAIp/V,EAAOrhc,KACXA,KAAKs+xB,WAAa,IAAIv+qB,IAClB1sG,MAAOrT,KAAK04E,UAAU3E,YAnejB,SAoeL7gE,UAAWlT,KAAKkT,UAChBukB,KAAM,YACNz6B,MAAO,MACPojB,OAAQ,SAAUngB,GACdohc,EAAKq+V,kBACLr+V,EAAK91S,wBAGbvrJ,KAAKs+xB,WAAWjovB,SAASr2C,KAAKgB,QAAQ2B,cAAc,IAAMq4xB,KAC1Dh7xB,KAAK69xB,aAAar5xB,KAAKxE,KAAKs+xB,YAC5Bt+xB,KAAK+/xB,UAAY,IAAIhgrB,IACjB1sG,MAAO,GACPokB,KAAM,YACNvkB,UAAWlT,KAAKkT,UAChBlW,MAAO,SACPojB,OAAQ,SAAUngB,GACdohc,EAAKq+V,kBACLr+V,EAAK91S,wBAGbvrJ,KAAK+/xB,UAAU1pvB,SAASr2C,KAAKgB,QAAQ2B,cAAc,IAAMy4xB,KACzDp7xB,KAAK69xB,aAAar5xB,KAAKxE,KAAK+/xB,YAEhCvD,EAAiBnhyB,UAAUqlyB,qBAAuB,WAC9C,IAAIr/V,EAAOrhc,KACXA,KAAK2gyB,gBAAkB,IAAI9oqB,IACvB76H,MAAO,GACPg/B,OAAQ,IACR9oB,UAAWlT,KAAKkT,UAChB6T,eAAgB,SAChBhH,IAAK,EACLK,OAAQ,SAAUngB,GACdohc,EAAK91S,wBAGbvrJ,KAAK2gyB,gBAAgBtqvB,SAASr2C,KAAKgB,QAAQ2B,cAAc,IAAM44xB,KAC/Dv7xB,KAAKi/xB,UAAY,IAAIpnqB,IACjB76H,MAAO,EACPg/B,OAAQ,IACR9oB,UAAWlT,KAAKkT,UAChB6M,IAAK,EACLzT,IAAK,GACL8T,OAAQ,SAAUngB,GACdohc,EAAKi9V,WAAWt3xB,eAAgBwL,SAAS,IACzC6ub,EAAK91S,wBAGbvrJ,KAAKi/xB,UAAU5ovB,SAASr2C,KAAKgB,QAAQ2B,cAAc,iBACnD3C,KAAKymI,eAAiB,IAAI5O,IACtB76H,MAAO,EACPg/B,OAAQ,IACRjc,IAAK,EACL7M,UAAWlT,KAAKkT,UAChB6T,eAAgB,SAChBD,YAAa9mB,KAAK04E,UAAU3E,YA9hBtB,eA+hBN3zD,OAAQ,SAAUngB,GACdohc,EAAK91S,wBAGbvrJ,KAAKymI,eAAepwF,SAASr2C,KAAKgB,QAAQ2B,cAAc,IAAM+3xB,MAElE8B,EAAiBnhyB,UAAUmjyB,gBAAkB,WACzCx+xB,KAAKuoH,cACLvoH,KAAKu/xB,kBACLv/xB,KAAKsgyB,oBACLtgyB,KAAKugyB,kBACLvgyB,KAAKygyB,oBACLzgyB,KAAK0gyB,wBAETlE,EAAiBnhyB,UAAUyjyB,YAAc,SAAUtiyB,EAAMsiB,GAErD,IAAK,IADDiP,EACK9b,EAAQ,EAAGA,EAAQ6M,EAAO7M,IAC/B8b,EAAOvxB,EAAKmhF,QACZnhF,EAAKgI,KAAKupB,IAGlByuwB,EAAiBnhyB,UAAUskyB,WAAa,WACpC,IACIt+V,EAAOrhc,KACPujE,KAIJ,OAlkBI,QACA,QACA,SA6jBInkE,QAAQ,SAAU5C,GACtB+mE,EAAW/+D,MAAOioB,KAAM40a,EAAK3oX,UAAU3E,YAAYv3E,GAAOQ,MAAOR,MAE9D+mE,GAEXi5tB,EAAiBnhyB,UAAUgkyB,eAAiB,SAAU1otB,GAClD,IAAI5oD,EAAO,IAAI/N,KAAK22D,EAAK12D,WACrBk4D,EAAU,IAAIn4D,KAAK22D,EAAK12D,WACxBw3D,EAAMd,EAAK/S,SACXg9tB,KAIJ,IAHA7ywB,EAAKm4C,QAAQ,GACbiS,EAAQjS,QAAQ,GAChBiS,EAAQnS,SAASmS,EAAQlS,WAAa,GAC/Bl4C,EAAOoqD,GACNpqD,EAAK61C,WAAa6T,GAClBmptB,EAAmBp8xB,KAAKupB,EAAK9N,WAEjC8N,EAAKm4C,QAAQn4C,EAAKo4C,UAAY,GAElC,OAAIy6tB,EAAmBriyB,QAAQo4E,EAAK12D,aAAe2gxB,EAAmBnkyB,OAAS,GACnE,EAEJmkyB,EAAmBriyB,QAAQo4E,EAAK12D,WAAa,GAEzDu8wB,EAAiBnhyB,UAAUmkyB,cAAgB,WACvC,IAAIhjyB,KACA6kc,EAAOrhc,KAKX,OAJAA,KAAKoyU,YAAYhzU,QAAQ,SAAU4B,GAC/B,IAAI2vC,EAhmBL,SAgmBkB3vC,EA3lBjB,QA2lB6CA,EAC7CxE,EAAKgI,MAAOioB,KAAM40a,EAAK3oX,UAAU3E,YAAYpjC,GAAY3zC,MAAOgE,MAE7DxE,GAEXggyB,EAAiBnhyB,UAAU2kyB,gBAAkB,WACzC,IACIa,GACAjiyB,MAAO,EACPC,OAAQ,EACRi6a,MAAO,EACPC,OAAQ,EACR7lZ,MAAO,GAEPmua,EAAOrhc,KACPujE,KAIJ,OAnkBI,QACC,SACD,QACC,SAzCF,QAsmBMnkE,QAAQ,SAAU5C,GACvB+mE,EAAW/+D,MAAOioB,KAAM40a,EAAK3oX,UAAU3E,YAAYv3E,GAAOQ,MAAO6jyB,EAAcrkyB,OAE5E+mE,GAEXi5tB,EAAiBnhyB,UAAU4kyB,WAAa,SAAUjkwB,GAC9C,IAEIy8C,EAFA4tB,GAhlBI,MACA,MACC,MACE,MACD,MACF,MACE,OA2kBN7pB,KAEAzuD,EAAoB,WAAXiO,EAAuB,SAAW,OAC/Ch8B,KAAK8+xB,YAAYz4rB,EAASrmG,KAAK02E,gBAE3B+B,EADgB,OAAhBz4E,KAAKgO,QAAmC,UAAhBhO,KAAKgO,OAClBnR,EAAS,oBAAsBkxB,EAAMhf,MAGrClS,EAAS,QAAemD,KAAKgO,OAAS,+CAAiD+f,EAAM1f,IAE5G,IAAK,IAAIjQ,EAAK,EAAG0iyB,EAAYz6rB,EAASjoG,EAAK0iyB,EAAUrkyB,OAAQ2B,IAAM,CAC/D,IAAIrB,EAAM+jyB,EAAU1iyB,GACpBo+E,EAAQh4E,MAAOioB,KAAM5vB,EAASE,EAAK07E,GAAUz7E,MAAO++xB,GAAUh/xB,KAElE,OAAOy/E,GAEXggtB,EAAiBnhyB,UAAU6kyB,aAAe,WACtC,IACIzntB,EADAuE,KAGAvE,EADgB,OAAhBz4E,KAAKgO,QAAmC,UAAhBhO,KAAKgO,OAClBnR,EAAS,0BAA2BkS,MAGpClS,EAAS,QAAemD,KAAKgO,OAAS,qDAAsDK,IAE3G,IAAK,IAAIjQ,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKm7E,GAAUr6E,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC9D,IAAIrB,EAAM8F,EAAGzE,GACb4+E,EAAUx4E,MACNioB,KAAM5vB,EAASE,EAAK07E,GACpBz7E,MAAOD,IAGf,OAAOigF,GAEXw/sB,EAAiBnhyB,UAAUktH,YAAc,WACrC,IAAI/rC,EAAUx8E,KAAKigyB,WAAW,UAC9BjgyB,KAAKgB,QAAQgB,UAAY,qCACJu4xB,GAAgB,IAAMW,GAAW,4CACNT,GAC5C,WAAaA,GAAczjwB,OAAO,GAAK,yBAChBujwB,GAAgB,eACjBY,GAAY,gHACcT,GAChD,WAAa16xB,KAAK04E,UAAU3E,YAAY,kBAAoB,0FAExBymtB,GAAoB,IAAMG,GAAa,IAAMO,GAAW,sCAClDl7xB,KAAK04E,UAAU3E,YAxpB5D,MAwpB8E,qEACVyI,EAAQ,GAAG/vD,KAAO,KAAO+vD,EAAQ,GAAG/vD,KAAO,wEAC3C+vD,EAAQ,GAAG/vD,KAAO,KAAO+vD,EAAQ,GAAG/vD,KAAO,wEAC3C+vD,EAAQ,GAAG/vD,KAAO,KAAO+vD,EAAQ,GAAG/vD,KAAO,wEAC3C+vD,EAAQ,GAAG/vD,KAAO,KAAO+vD,EAAQ,GAAG/vD,KAAO,wEAC3C+vD,EAAQ,GAAG/vD,KAAO,KAAO+vD,EAAQ,GAAG/vD,KAAO,wEAC3C+vD,EAAQ,GAAG/vD,KAAO,KAAO+vD,EAAQ,GAAG/vD,KAAO,wEAC3C+vD,EAAQ,GAAG/vD,KAAO,KAAO+vD,EAAQ,GAAG/vD,KAAO,8BAC3F+twB,GAAoB,IAAMI,GAAc,IAAMM,GAAW,uCAC/Bl7xB,KAAK04E,UAAU3E,YAjqB7D,MAiqB+E,qBAC3D8mtB,GAAsB,mBACpBC,GAAsB,qCACzC96xB,KAAK04E,UAAU3E,YAAY,gBAAkB,wBAE5BgntB,GAAwB,kFAExBR,GAAgB,IAAMU,GAA+B,mBACnDD,GAAuB,WAAah7xB,KAAK04E,UAAU3E,YAAY,iBAAmB,yDAEpEwmtB,GAAgB,kFAEjDv6xB,KAAK04E,UAAU3E,YAAY,iBAAmB,2CAG7BwmtB,GAAgB,IAAMU,GAA+B,+DACnDG,GAAqB,WAAap7xB,KAAK04E,UAAU3E,YAAY,iBAAmB,6CAE9EwmtB,GAAgB,gFAC+Bv6xB,KAAK04E,UAAU3E,YAAY,iBAAmB,kCAE7FwmtB,GAAgB,iEACgCv6xB,KAAK04E,UAAU3E,YAAY,aAAe,uDAG9FymtB,GAAoB,aAAoBW,GAAY,+BAClCn7xB,KAAK04E,UAAU3E,YA1rBpD,OA0rBuE,qBACpDwmtB,GAAgB,kFACuCv6xB,KAAK04E,UAAU3E,YA5rBzF,OA4rB4G,yBAEzFwmtB,GAAgB,IAAMc,GAAY,iEACkBr7xB,KAAK04E,UAAU3E,YAvsBpF,SAusByG,yBAExFwmtB,GAAgB,IAAMe,GAAoB,4CACfC,GAAa,WAAav7xB,KAAK04E,UAAU3E,YAzsBrF,SAysB0G,gCAIlHyotB,EAAiBnhyB,UAAU0lyB,oBAAsB,WAC7C,IAAIC,EAAWC,SACXr9xB,EAAW5D,KAAKgB,QAAQQ,iBAAiB,kBAAgCi6xB,IACzEp1rB,GAxrBK,KACA,KACC,KACE,KACD,KACF,KACE,MAmrBXrmG,KAAK8+xB,YAAYz4rB,EAASrmG,KAAK02E,gBAC/B,IAAK,IAAIzkE,EAAQ,EAAGA,EAAQrO,EAASnH,OAAQwV,IACzC+uxB,GAAY36rB,EAAQtxE,SAASnxB,EAASqO,GAAOY,aAAa,cAAe,MAAQZ,IAAWrO,EAASnH,OAAS,EAAK,GA3qBnH,KA6qBJ,OAAOukyB,EA9qBC,KAgrBZxE,EAAiBnhyB,UAAU6lyB,qBAAuB,WAS9C,OAPIlhyB,KAAK+/xB,UAAUvtxB,QACJyuxB,SAAoBjhyB,KAAKk/xB,cAAcliyB,MAnrB9C,aAorBuBgD,KAAKo/xB,aAAapiyB,MAprBzC,IAurBOmkyB,cAAyBnhyB,KAAKi/xB,UAAUjiyB,MAvrB/C,KA2rBZw/xB,EAAiBnhyB,UAAU+lyB,gBAAkB,WACzC,MAAOC,YAAuBrhyB,KAAKymI,eAAezpI,MA5rB1C,KA8rBZw/xB,EAAiBnhyB,UAAUimyB,cAAgB,WACvC,MAAOC,SAAoBvhyB,KAAK2gyB,gBAAgB3jyB,MA/rBxC,KAisBZw/xB,EAAiBnhyB,UAAUmmyB,qBAAuB,WAC9C,MAAOC,WAAsBzhyB,KAAKm/xB,WAAWniyB,MAlsBrC,KAosBZw/xB,EAAiBnhyB,UAAUqmyB,iBAAmB,SAAUpkyB,GACpD,IAAI+oG,GAptBK,KACA,KACC,KACE,KACD,KACF,KACE,MA+sBXrmG,KAAK8+xB,YAAYz4rB,EAASrmG,KAAK02E,gBAE/B,IAAK,IADDzkE,EACK7T,EAAK,EAAGyE,EAAK7C,KAAK49xB,WAAYx/xB,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACzD,IAAIrB,EAAM8F,EAAGzE,GACb6T,EAAQ8iB,SAASh4B,EAAIiE,QAAQ6R,aAAa,cAAe,KACnB,IAAlCvV,EAAKiB,QAAQ8nG,EAAQp0F,IACrBlV,EAAIiK,eAAgBg3G,WAAW,IAG/BjhH,EAAIiK,eAAgBg3G,WAAW,MAI3Cw+qB,EAAiBnhyB,UAAUsmyB,cAAgB,WACvC,GAAI3hyB,KAAKw4E,WAAWI,SAASn8E,OACzBuD,KAAKi/xB,UAAUj4xB,eAAgBhK,MAAOgD,KAAKw4E,WAAWI,SAAS,KAC/D54E,KAAKs+xB,WAAWt3xB,eAAgBwL,SAAS,QAExC,CACDxS,KAAK+/xB,UAAU/4xB,eAAgBwL,SAAS,IACxCxS,KAAKo/xB,aAAap4xB,eAAgBhK,MAAOgD,KAAKw4E,WAAW3/D,cACzD,IAAK,IAAIza,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKy+xB,IAAY39xB,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAChE,IAAIf,EAAMwF,EAAGzE,GACb,GAAI29xB,GAAU1+xB,KAAS2C,KAAKw4E,WAAWf,IAAI,GAAI,CAC3Cz3E,KAAKk/xB,cAAcl4xB,eAAgBhK,MAAOgD,KAAKw4E,WAAWf,IAAI,KAC9D,UAKhB+ktB,EAAiBnhyB,UAAUqrM,SAAW,SAAUj/D,EAAQn5F,GAEpD,OADAtuC,KAAKymI,eAAez/H,eAAgBhK,MAAOgD,KAAKw4E,WAAWr2E,WACnDmsC,GACJ,IA/wBA,QAgxBItuC,KAAKg/xB,aAAah4xB,eAAgBhK,MAAOgD,KAAKw4E,WAAWkB,QACzD,MACJ,IAjxBA,QAkxBI15E,KAAK2gyB,gBAAgB35xB,eAAgBhK,MAAOgD,KAAKw4E,WAAW15D,QAGpE,OAAQ2oH,GACJ,IA3xBC,SA4xBGznI,KAAK0hyB,iBAAiB1hyB,KAAKw4E,WAAWf,KACtC,MACJ,IA5xBC,SA6xBGz3E,KAAKm/xB,WAAWn4xB,eAAgBiL,MAAQjS,KAAKw4E,WAAWwD,MAAM,GAAK,IACnEh8E,KAAK2hyB,gBACL,MACJ,IAjyBE,UAkyBE3hyB,KAAK2hyB,kBAIjBnF,EAAiBnhyB,UAAUumyB,aAAe,WAEtC,MAAOC,SADO3jtB,GAA4Bl+E,KAAKg/xB,aAAahiyB,OA5vBpD,KA+vBZw/xB,EAAiBnhyB,UAAUymyB,kBAAoB,WACtC9hyB,KAAK2gyB,gBAAgB35sB,aACtBhnF,KAAK2gyB,gBAAgBruxB,UAEpBtS,KAAKi/xB,UAAUj4sB,aAChBhnF,KAAKi/xB,UAAU3sxB,UAEdtS,KAAKymI,eAAez/C,aACrBhnF,KAAKymI,eAAen0H,UAEnBtS,KAAKg/xB,aAAah4sB,aACnBhnF,KAAKg/xB,aAAa1sxB,UAEjBtS,KAAK0+xB,WAAW13sB,aACjBhnF,KAAK0+xB,WAAWpsxB,UAEftS,KAAKs/xB,QAAQt4sB,aACdhnF,KAAKs/xB,QAAQhtxB,UAEZtS,KAAKo/xB,aAAap4sB,aACnBhnF,KAAKo/xB,aAAa9sxB,UAEjBtS,KAAKk/xB,cAAcl4sB,aACpBhnF,KAAKk/xB,cAAc5sxB,UAElBtS,KAAKm/xB,WAAWn4sB,aACjBhnF,KAAKm/xB,WAAW7sxB,UAEpBtS,KAAK49xB,WAAWx+xB,QAAQ,SAAU4B,GAC9BA,EAAQsR,YAEZtS,KAAK49xB,cACL59xB,KAAK69xB,aAAaz+xB,QAAQ,SAAU4B,GAChCA,EAAQsR,YAEZtS,KAAK69xB,iBAETrB,EAAiBnhyB,UAAU0myB,YAAc,WACrC/hyB,KAAK89xB,WAn1BF,OAKC,QA80ByB99xB,KAAKk4E,WAClCl4E,KAAKmgyB,mBAET3D,EAAiBnhyB,UAAU+9xB,eAAiB,SAAUpgtB,GAElD,YADa,IAATA,IAAmBA,EAAOh5E,KAAK2+xB,qB9rBj5B3C,SAAgC3ltB,EAAMg/B,EAAchqG,GAChD,IAEIyqE,EACAuptB,EAHAxptB,EAAae,GAAsBP,GACnCL,EAAUq/B,EAAajkC,YAAY21sB,IAAS,IAchD,OAXe,OAAX17wB,GAA8B,UAAXA,GACnBg0xB,EAAYnlyB,EAAS,iCAAkCkS,MACvD0pE,EAAW57E,EAAS,+BAAgCkS,QAGpDizxB,EAAYnlyB,EAAS,QAAemR,EAAS,4DAA6DK,IAC1GoqE,EAAW57E,EAAS,QAAemR,EAAS,0DAA2DK,KAEvGmqE,EAAWr2E,SAAW,IACtBw2E,GAAWH,EAAWr2E,SAAW,KAE7Bq2E,EAAW0B,MACf,IAAK,QACDvB,GAAWq/B,EAAajkC,YAAY61sB,IACpC,MACJ,IAAK,SACDjxsB,GAAWq/B,EAAajkC,YAAY81sB,IAAS,IAAM7xqB,EAAajkC,YAAY01sB,IAAM,IAClFjxsB,EAAWf,IAAIr4E,QAAQ,SAAUq4E,EAAKxlE,GAClC0mE,GAAW97E,EAASi8E,GAAerB,GAAMgB,GACzCE,GAAcH,EAAWf,IAAIh7E,OAAS,IAAOwV,EAAS,GAAK,OAE/D,MACJ,IAAK,UACD0mE,GAAWq/B,EAAajkC,YAAY+1sB,IAAU,IAAM9xqB,EAAajkC,YAAY01sB,IAAM,IACnF9wsB,GAAWJ,GAAgBC,EAAYC,EAASu/B,GAChD,MACJ,IAAK,SACDr/B,GAAWq/B,EAAajkC,YAAYg2sB,IAAS,IAAM/xqB,EAAajkC,YAAY01sB,IAAM,IAClF9wsB,GAAW97E,EAAU27E,EAAWwD,MAAM,GAAI9uE,WAAY80xB,GAAY,IAClErptB,GAAWJ,GAAgBC,EAAYC,EAASu/B,GAChD,MACJ,QACI,MAAO,GAEf,GAAIx/B,EAAW15D,MACX65D,GAAW,KAAQH,EAAgB,MAAI,IAAMw/B,EAAajkC,YAAYy1sB,SAErE,GAAIhxsB,EAAWkB,MAAO,CACvB,IAAIS,EAAW3B,EAAWkB,MAC1Bf,GAAW,KAAOq/B,EAAajkC,YAAY41sB,IACrC,IAAMxvsB,EAAShU,UACf,IAAMtpE,GAAUs9E,EAASlU,WAAa,GAAG/4D,WAAY80xB,GACrD,IAAM7ntB,EAASpU,cAEzB,OAAO4S,E8rBi2BIsptB,CAAgBjptB,EAAMh5E,KAAK04E,UAAW14E,KAAKgO,SAEtDwuxB,EAAiBnhyB,UAAU6myB,mBAAqB,SAAUhqtB,EAAWc,EAAMC,EAAaE,EAAcC,GAElG,OADAA,EAAW37E,EAAkB27E,GAAYp5E,KAAKk4E,UAAYkB,EACnDL,GAASb,EAAWc,EAAMC,EAAaj5E,KAAK02E,eAAgByC,EAAcC,IAErFojtB,EAAiBnhyB,UAAUsjyB,kBAAoB,WAC3C,IAAIqC,EAAWmB,QACf,OAAQniyB,KAAK0+xB,WAAW1hyB,OACpB,IAh2BA,QAi2BIgkyB,GAAYoB,SACZ,MACJ,IAl2BC,SAm2BGpB,GAAYqB,UAAyBriyB,KAAK+gyB,sBAC1C,MACJ,IAp2BE,UAq2BEC,GAAYsB,WAA0BtiyB,KAAKkhyB,uBAC3C,MACJ,IAt2BC,SAu2BGF,GAAYuB,UAAyBviyB,KAAKkhyB,uBAAyBlhyB,KAAKwhyB,uBACxE,MACJ,IA72BD,OA82BK,MAAO,GAGf,OADAR,GAAYhhyB,KAAKohyB,kBACTphyB,KAAKs/xB,QAAQtiyB,OACjB,IA52BA,QA62BIgkyB,GAAYhhyB,KAAK4hyB,eACjB,MACJ,IA92BA,QA+2BIZ,GAAYhhyB,KAAKshyB,gBAGzB,OAAON,GAEXxE,EAAiBnhyB,UAAUojyB,kBAAoB,SAAUzltB,EAAMd,QACzC,IAAdA,IAAwBA,EAAYl4E,KAAKk4E,WACxCc,GACDh5E,KAAK0+xB,WAAW13xB,eAAgBhK,MA93BjC,SAg4BHgD,KAAKw4E,WAAae,GAAsBP,GACxC,IAAIwptB,EAAQxiyB,KAAKw4E,WAAW15D,MA13BxB,QA03ByC9e,KAAKw4E,WAAWkB,MA33BzD,QADA,QA63BJ,OAAQ15E,KAAKw4E,WAAW0B,MACpB,IAx2BI,QAy2BAl6E,KAAK89xB,WAn4BT,QAm4B2B0E,EAAOtqtB,GAC9Bl4E,KAAK0mM,SAp4BT,QAo4ByB87lB,GACrB,MACJ,IA32BK,SA42BDxiyB,KAAK89xB,WAt4BR,SAs4B2B0E,EAAOtqtB,GAC/Bl4E,KAAK0mM,SAv4BR,SAu4ByB87lB,GACtB,MACJ,IA92BM,UA+2BFxiyB,KAAK89xB,WAz4BP,UAy4B2B0E,EAAOtqtB,GAChCl4E,KAAK0mM,SA14BP,UA04ByB87lB,GACvB,MACJ,IAj3BK,SAk3BDxiyB,KAAK89xB,WA54BR,SA44B2B0E,EAAOtqtB,GAC/Bl4E,KAAK0mM,SA74BR,SA64ByB87lB,KAQlChG,EAAiBnhyB,UAAUiX,QAAU,WACjCtS,KAAK29xB,eAAgB,EACrB39xB,KAAK8hyB,oBACL9hyB,KAAKgB,QAAQgB,UAAY,IAO7Bw6xB,EAAiBnhyB,UAAUkkC,cAAgB,WACvC,MAAO,oBAMXi9vB,EAAiBnhyB,UAAUmxG,eAAiB,WACxC,OAAOxsG,KAAKgtG,kBAOhBwvrB,EAAiBnhyB,UAAU0wG,OAAS,WAChC/rG,KAAKmuG,aACLnuG,KAAK++xB,SAAS/+xB,KAAKkT,WACnBlT,KAAK09xB,cAAe,GAMxBlB,EAAiBnhyB,UAAUmsF,kBAAoB,SAAUiF,EAASC,GAC9D,IAAK,IAAItuF,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKmvF,GAAUruF,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAE9D,OADWyE,EAAGzE,IAEV,IAAK,YACD4B,KAAKo+xB,eAAe3xsB,EAAQvU,WAC5Bl4E,KAAKq+xB,gBAAgB5xsB,EAAQvU,WAC7Bl4E,KAAKs/xB,QAAQt4xB,eAAgBiL,MAAO,IACpC,MACJ,IAAK,YACDjS,KAAK++xB,SAAStysB,EAAQv5E,WACtB,MACJ,IAAK,WACDlT,KAAKu+xB,iBAAiB9xsB,EAAQx5E,UAC9B,MACJ,IAAK,eACDjT,KAAK0+xB,WAAW13xB,eAAgBiL,MAAOjS,KAAKy/xB,eAC5C,MACJ,IAAK,UACDz/xB,KAAKg/xB,aAAah4xB,eAAgBq0E,QAASr7E,KAAKq7E,UAChD,MACJ,IAAK,UACDr7E,KAAKg/xB,aAAah4xB,eAAgBo0E,QAASp7E,KAAKo7E,UAChD,MACJ,IAAK,QACGp7E,KAAK2+xB,sBAAwB3+xB,KAAKhD,OAClCgD,KAAKy+xB,kBAAkBz+xB,KAAKhD,OAEhC,MACJ,IAAK,SACL,IAAK,cACL,IAAK,iBACDgD,KAAKkyD,aAKrB24B,IACI3jF,GAAU,OAAQ,QAAS,SAAU,UAAW,YACjDs1xB,EAAiBnhyB,UAAW,mBAAe,GAC9CwvF,IACI3jF,EAAS,IACVs1xB,EAAiBnhyB,UAAW,sBAAkB,GACjDwvF,IACI3jF,EAAS,IAAI8Y,OACdw8wB,EAAiBnhyB,UAAW,iBAAa,GAC5CwvF,IACI3jF,KACDs1xB,EAAiBnhyB,UAAW,kBAAc,GAC7CwvF,IACI3jF,EAAS,UACVs1xB,EAAiBnhyB,UAAW,cAAU,GACzCwvF,IACI3jF,KACDs1xB,EAAiBnhyB,UAAW,gBAAY,GAC3CwvF,IACI3jF,GAAS,IACVs1xB,EAAiBnhyB,UAAW,iBAAa,GAC5CwvF,IACI3jF,KACDs1xB,EAAiBnhyB,UAAW,aAAS,GACxCwvF,IACI3jF,EAAS,IAAI8Y,KAAK,KAAM,EAAG,KAC5Bw8wB,EAAiBnhyB,UAAW,eAAW,GAC1CwvF,IACI3jF,EAAS,IAAI8Y,KAAK,KAAM,GAAI,MAC7Bw8wB,EAAiBnhyB,UAAW,eAAW,GAC1CwvF,IACI3jF,EAAS,IACVs1xB,EAAiBnhyB,UAAW,oBAAgB,GAC/CwvF,IACI/hF,KACD0zxB,EAAiBnhyB,UAAW,cAAU,GACzCmhyB,EAAmB3xsB,IACfzhF,GACDozxB,IAELjxrB,ICzjCEk3rB,GAAc,UACdC,GAAyB,yBAQzBC,GAA6B,WAI7B,SAASA,EAAYriyB,GACjBN,KAAKM,OAASA,EACdN,KAAKqlH,KAAOrlH,KAAKM,OAAOo4E,UACxB14E,KAAK4rB,OAAS5rB,KAAKM,OAAO4lxB,YAC1BlmxB,KAAKoyxB,eAAiB,IAAIN,GAAe9xxB,KAAKM,QAC9CN,KAAKwkG,SAAW,IAAIkkrB,GACpB1oxB,KAAK4iyB,oBAm1CT,OAj1CAD,EAAYtnyB,UAAUunyB,kBAAoB,WACtC,IAAI/zB,EAAgB7uwB,KAAK6iyB,wBACzB7iyB,KAAKgB,QAAUG,EAAc,OAASmC,GAAItD,KAAKM,OAAOU,QAAQsC,GAAK,oBACnEtD,KAAKM,OAAOU,QAAQW,YAAY3B,KAAKgB,SACjChB,KAAKM,OAAOg/tB,WACZt/tB,KAAK8iyB,aAAe,IAAIh+qB,IACpB8E,mBAAqB5xF,OAAQ,QAC7BoC,QAASy0uB,EACT57vB,SAAU8vxB,GAAgC,YAC1C7vxB,UAAWlT,KAAKM,OAAO4S,UACvB0xE,OAAQ,gGACJ5kF,KAAKqlH,KAAKtxC,YAAY,YAAc,sDACxCh+D,OAAQ,OACRyvG,SAAS,EACTmB,eAAe,EACfx/G,OAAQ3G,SAASuL,KACjByrB,SAAS,EACT2e,WAAYn2C,KAAKuomB,aAAajtmB,KAAK0E,MACnCuzH,YAAavzH,KAAKgjyB,cAAc1nyB,KAAK0E,QAIzCA,KAAK8iyB,aAAe,IAAIh+qB,IACpB8E,mBAAqB5xF,OAAQ,QAC7BmuF,UACQC,aAAehsF,QAASp6B,KAAKqlH,KAAKtxC,YAAY,gBAAiB9gE,SAAUgwxB,IACzE58qB,MAAOrmH,KAAKkjyB,YAAY5nyB,KAAK0E,QAE7BomH,aACIhsF,QAASp6B,KAAKqlH,KAAKtxC,YAAY,cAAe9gE,SAAU,yBACxD+qG,WAAW,GAEfqI,MAAOrmH,KAAK84xB,UAAUx9xB,KAAK0E,QAE3BomH,aAAenzG,SbmPO,iBanPyCmnB,QAASp6B,KAAKqlH,KAAKtxC,YAAY,iBAC9FsyC,MAAOrmH,KAAK66qB,YAAYv/qB,KAAK0E,QAErCo6B,QAASy0uB,EACT57vB,SAAU8vxB,GACV7vxB,UAAWlT,KAAKM,OAAO4S,UACvB0xE,OAAQ,6BAA+B5kF,KAAKqlH,KAAKtxC,YAAY,YAAc,SAC3EyxC,SAAS,EACTmB,eAAe,EACfx/G,OAAQ3G,SAASuL,KACjByrB,SAAS,EACTxhB,MAAO,QACPmgC,WAAYn2C,KAAKuomB,aAAajtmB,KAAK0E,MACnCuzH,YAAavzH,KAAKgjyB,cAAc1nyB,KAAK0E,QAG7CA,KAAK8iyB,aAAazsvB,SAASr2C,KAAKgB,SAChC2C,GAAU3D,KAAKgB,QAAQqT,eAAgB0uxB,GAAgC,cACnE/iyB,KAAKM,OAAOg/tB,aACZ/5tB,GAAanB,IAAIpE,KAAKgB,QAAQ2B,cAAc,gBAAyC,QAAS3C,KAAK66qB,YAAa76qB,MAChHuF,GAAanB,IAAIpE,KAAKgB,QAAQ2B,cAAc,gBAAyC,QAAS3C,KAAK84xB,UAAW94xB,OAElHA,KAAK48qB,uBAET+lH,EAAYtnyB,UAAUujxB,WAAa,SAAUpixB,EAAMkK,GAK/C,OAJA1G,KAAKM,OAAOgoxB,WAAWkH,gBAAe,IACjCxvxB,KAAKM,OAAOg/tB,YAAc7huB,EAAkBuC,KAAKM,OAAO6iyB,iBACzD9+xB,GAAarE,KAAK8iyB,aAAa9hyB,QAAQ2B,cAAc,wBAAyBmxxB,IAE1EptxB,GACJ,IAAK,MACD1G,KAAKojyB,iBAAkB,EACvBpjyB,KAAKqjyB,oBAAoB7myB,GACzB,MACJ,IAAK,OACL,IAAK,iBACL,IAAK,aACY,mBAATkK,IAA8B1G,KAAKM,OAAOg/tB,YAAc7huB,EAAkBuC,KAAKM,OAAO6iyB,iBACtFx/xB,GAAU3D,KAAK8iyB,aAAa9hyB,QAAQ2B,cAAc,wBAAyBmxxB,IAE/E9zxB,KAAKojyB,iBAAkB,EACvBpjyB,KAAKsjyB,qBAAqB9myB,KAItCmmyB,EAAYtnyB,UAAUkoyB,iBAAmB,WACrCvjyB,KAAK8iyB,aAAa1owB,QAAUp6B,KAAK6iyB,wBACjC7iyB,KAAK8iyB,aAAal3uB,YAEtB+2uB,EAAYtnyB,UAAUktmB,aAAe,SAAUtomB,GAC3C,IAAIslF,GACA7+E,KAAM,SACNlK,KAAMwD,KAAKqlF,UACXxsD,QAAQ,EACR73B,QAAShB,KAAKgB,QACdmG,OAASnH,KAAKojyB,gBAAkBpjyB,KAAKM,OAAO+9wB,gBAAgBr9wB,QAAUhB,KAAKM,OAAO8nxB,gBAAgBpnxB,SAQtG,GANIhB,KAAKojyB,kBACL79sB,EAAUr6E,SAAWlL,KAAKwjyB,mBAE9BxjyB,KAAKM,OAAOkmB,QAAQguwB,GAAiBjvsB,GACrCtlF,EAAK44B,OAAS0sD,EAAU1sD,OACxB74B,KAAKyjyB,sBAAsBzjyB,KAAKojyB,gBAAkB79sB,EAAUr6E,SAAW,MACnElL,KAAKojyB,iBAAmB79sB,EAAUr6E,WAAalL,KAAKwjyB,mBAAqB/lyB,EAAkBuC,KAAKM,OAAO6iyB,gBAAiB,CACxH,IAAIO,EAAW1jyB,KAAKwC,YAAYmhyB,IAC5Bh8jB,EAAS3nO,KAAKwC,Yb4JM,Sa3JxBmlO,EAAO3qO,MAAQ,IAAIgjB,KAAK0jxB,EAAS1myB,MAAMijB,UhsBlIxB,IgsBkI0DslE,EAAUr6E,UACnFy8N,EAAO/7K,aAGf+2uB,EAAYtnyB,UAAU2nyB,cAAgB,SAAU/iyB,GAC5CD,KAAKM,OAAOuouB,UAAUttD,gBAE1BonH,EAAYtnyB,UAAUwnyB,sBAAwB,WAC1C,IAAIpoxB,EAAYtZ,EAAc,OAASkC,UbmHb,qBalHtBowM,EAAOtyM,EAAc,QACrBmC,GAAItD,KAAKM,OAAOU,QAAQsC,GAAK,WAC7BD,UAAW0wxB,GACXtwxB,OAASmgyB,SAAU,mBAEvB,GAAKnmyB,EAAkBuC,KAAKM,OAAO6iyB,gBAI9B,CACD,IAAI/owB,EAAUp6B,KAAK6jyB,+BACnBpwlB,EAAK9xM,YAAYy4B,OAN+B,CAChD,IAAI0pwB,EAAc9jyB,KAAKM,OAAOyjyB,mBAAZ/jyB,GAClBoF,KAAU/D,MAAMC,KAAKwiyB,GAAcrwlB,GAOvC,OADAh5L,EAAU9Y,YAAY8xM,GACfh5L,GAEXkoxB,EAAYtnyB,UAAUwoyB,6BAA+B,WACjD,IAAIt6U,EAAYvpd,KAAKgkyB,iBAAiB,mBAClCC,EAAmBjkyB,KAAKgkyB,iBbkHe,wBajHvCE,EAAWlkyB,KAAKmkyB,cAAc3gB,IAC9B4gB,EAAcpkyB,KAAKmkyB,cAAcE,IACrCJ,EAAiBtiyB,YAAYuiyB,GAC7BD,EAAiBtiyB,YAAYyiyB,GAC7B,IAAIE,EAAsBtkyB,KAAKgkyB,iBbuHO,mBatHlCO,EAAmBvkyB,KAAKwkyB,qBAAqBb,GAA8B3jyB,KAAKykyB,aAAanpyB,KAAK0E,OAClG0kyB,EAAiB1kyB,KAAKwkyB,qBbyHE,SaxH5BF,EAAoB3iyB,YAAY4iyB,GAChCD,EAAoB3iyB,YAAY+iyB,GAChC,IAAIC,EAAoB3kyB,KAAKgkyB,iBbgIS,mBa/HlCY,EAAmB5kyB,KAAK6kyB,eAAeC,IACvCC,EAAiB/kyB,KAAK6kyB,eAAeG,IACzCL,EAAkBhjyB,YAAYijyB,GAC9BD,EAAkBhjyB,YAAYojyB,GAC9B,IAAIE,EAAoBjlyB,KAAKgkyB,iBbqFS,2BapFlCkB,EAAYllyB,KAAKmlyB,eAAeC,IAChCC,EAAcrlyB,KAAKmlyB,eAAenO,IACtCiO,EAAkBtjyB,YAAYujyB,GAC9BD,EAAkBtjyB,YAAY0jyB,GAC9B,IAAIC,EAAkBtlyB,KAAKgkyB,iBb0FQ,uBazF/BuB,EAAYvlyB,KAAKmlyB,eb2FU,Ya1F3BK,EAAqBrkyB,EAAc,QACnCkC,UAAWq/xB,KAEXvxqB,EAAShwH,EAAc,UACvBkC,UA3Kc,2BA4KdI,OAASiD,KAAM,SAAUw5B,MAASlgC,KAAKqlH,KAAKtxC,YAAY,qBAE5D/zE,KAAKylH,UAAY,IAAI1H,IAASrqC,QAAS+xtB,4BAAuCxyxB,SAAU,YAAcjT,KAAKM,OAAO2S,WAClHuyxB,EAAmB7jyB,YAAYwvH,GAC/BnxH,KAAKylH,UAAUpvE,SAAS86E,GACxBo0qB,EAAU5jyB,YAAY6jyB,GACtBF,EAAgB3jyB,YAAY4jyB,GAC5B,IAAIrzvB,EAAclyC,KAAKgkyB,iBAAiB9M,GAAwB,QAC5DwO,EAAiB1lyB,KAAKmkyB,cAAcjN,IAaxC,GAZAhlvB,EAAYvwC,YAAY+jyB,GACxBn8U,EAAU5nd,YAAYsiyB,GACtB16U,EAAU5nd,YAAY2iyB,GACtB/6U,EAAU5nd,YAAYsjyB,GACtB17U,EAAU5nd,YAAYgjyB,GACtBp7U,EAAU5nd,YAAY2jyB,GACjBtlyB,KAAKM,OAAOg/tB,WAIb/5tB,GAAanB,IAAI+sH,EAAQ,QAASnxH,KAAK2lyB,qBAAsB3lyB,MAH7DA,KAAK4lyB,uBAAuBr8U,GAK5Bvpd,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAMq4I,UAAU3uO,OAAS,GAAKuD,KAAKM,OAAO8qO,UAAU3uO,OAAS,EAAG,CAE9F,IAAK,IADDopyB,EAAoB7lyB,KAAKgkyB,iBbiFK,mBahFzB7nyB,EAAI,EAAGA,EAAI6D,KAAKM,OAAO0rxB,aAAaD,mBAAmBtvxB,OAAQN,IAAK,CACzE,IAAI2pyB,EAAc9lyB,KAAK+lyB,kBAAkB5pyB,GACzC0pyB,EAAkBlkyB,YAAYmkyB,GAElCv8U,EAAU5nd,YAAYkkyB,GAE1Bt8U,EAAU5nd,YAAYuwC,GACtB,IAAI8zvB,EAAS7kyB,EAAc,UACvBsC,OAASiD,KAAM,SAAUw5B,MAAO,SAAUx7B,MAAO,kBAGrD,OADA6kd,EAAU5nd,YAAYqkyB,GACfz8U,GAEXo5U,EAAYtnyB,UAAUuqyB,uBAAyB,SAAUr8U,GACrD,IAAI8gO,EAAMlprB,EAAc,OACxBood,EAAU5nd,YAAY0orB,GACtBrqrB,KAAKimyB,iBAAmBjmyB,KAAKkmyB,yBAC7BlmyB,KAAKimyB,iBAAiB5vvB,SAASg0oB,IAEnCs4G,EAAYtnyB,UAAU2oyB,iBAAmB,SAAU3gyB,GAC/C,OAAOlC,EAAc,OAASkC,UAAWA,KAE7Cs/xB,EAAYtnyB,UAAUirN,mBAAqB,SAAUjjN,EAAW+8D,EAAW15D,GACvE,OAAOvF,EAAcuF,GAAQ,SACzBrD,UAAWA,EAAWI,OAClBiD,KAAM,OAAQ+wB,KAAM2oC,EAAWpjE,MAAO,GACtCkjC,MAA4F,KAAnFlgC,KAAKqlH,KAAKtxC,YAAY3T,EAAUjhD,OAAO,GAAGvJ,cAAgBwqD,EAAU/+D,MAAM,IAC/E++D,EAAYpgE,KAAKqlH,KAAKtxC,YAAY3T,EAAUjhD,OAAO,GAAGvJ,cAAgBwqD,EAAU/+D,MAAM,QAItGshyB,EAAYtnyB,UAAUmoyB,gBAAkB,WACpC,OAAOxjyB,KAAKM,OAAOi+wB,kBAAkBC,UAAUr8wB,SAAWnC,KAAKM,OAAOi+wB,kBAAkBC,UAAUC,WAEtGkkB,EAAYtnyB,UAAUmpyB,qBAAuB,SAAUxnyB,EAAO4pI,GAC1D,IAAIu/pB,EAAcnmyB,KAAKgkyB,iBAAiBhnyB,EAAQ,cAC5CojE,EAAYpgE,KAAKomyB,aAAappyB,GAC9BqpyB,EAAgBrmyB,KAAKsmN,mBAAmBtpN,EAAQ,IAAMylyB,GAAariuB,GACvE+luB,EAAYxkyB,YAAY0kyB,GAaxB,OAZqB,IAAIv5kB,IACrB1sM,OAAQwmH,EACR3zH,SAAUjT,KAAKM,OAAO2S,SACtBC,UAAWlT,KAAKM,OAAO4S,UACvB6T,eAAgB,SAChBiV,QAASv+B,EAAkBuC,KAAKM,OAAO2lG,YACnCjmG,KAAKu8R,UAAU,eAAiBv8R,KAAKM,OAAO2lG,YAAc,IAAMjmG,KAAKu8R,UAAU,eACnFz1Q,YAAa9mB,KAAKsmyB,cAActpyB,GAChCivF,KAAMjsF,KAAKwjyB,kBACXxmyB,MAAO,IAAIgjB,KAAQhK,MAAO,SAEfqgC,SAASgwvB,GACjBF,GAEXxD,EAAYtnyB,UAAUooyB,sBAAwB,SAAUv4xB,GACpD,IAAInL,EAAQC,QACaqB,MAAMC,KAAKtB,KAAKgB,QAAQQ,iBAAiB,oBAElDpC,QAAQ,SAAU4B,GAC9B,IAAIuF,EAAWvF,EAAQ0mF,cAAc,GACrCnhF,EAAS0lF,KAAO/gF,GAAYnL,EAAMyjyB,kBAClCj9xB,EAASqlD,cAGjB+2uB,EAAYtnyB,UAAUopyB,aAAe,SAAUxkyB,GAC3C,IAAIyjyB,EAAW1jyB,KAAKwC,YAAYmhyB,IAChC,GAAID,EAAS1iyB,QAAQqT,cAAcvQ,UAAUK,SAAS,iBAAkB,CACpE,IAAIwjO,EAAS3nO,KAAKwC,YbYM,SaXpB0I,EAAW,EACf,GAAIlL,KAAKojyB,gBACLl4xB,EhsBpRW,IgsBoRqBlL,KAAKwjyB,sBAEpC,CACD,IAAIn+sB,EAAYrlF,KAAKM,OAAO8nxB,gBAAgB9rxB,MAC5C4O,EAAWm6E,EAAUrlF,KAAK4rB,OAAO0iM,SAASruM,UAAYolE,EAAUrlF,KAAK4rB,OAAO1L,WAAWD,UAE3F0nN,EAAO3qO,MAAQ,IAAIgjB,KAAK0jxB,EAAS1myB,MAAMijB,UAAY/U,GACnDy8N,EAAO/7K,aAGf+2uB,EAAYtnyB,UAAU0qyB,kBAAoB,SAAU9zxB,GAChD,IAAI0wV,EACAosb,EAAe/uxB,KAAKM,OAAO0rxB,aAAaD,mBAAmB95wB,GAC3DmuD,EAAY2utB,EAAahjwB,MACzB/uB,EAAQ,KAAOojE,EACnBuiS,EAAaosb,EAAa7uvB,MAC1B,IAAI4lwB,EAAc9lyB,KAAKgkyB,iBAAiBhnyB,EAAQ,0BAC5CupyB,EAAgBvmyB,KAAKsmN,mBAAmBtpN,EAAQ,IAAMylyB,GAAariuB,GACvE0luB,EAAYnkyB,YAAY4kyB,GACxB,IAAIC,EAAmB,4FACnBzX,EAAa0X,WAAa,2CAA6C1X,EAAal9T,UAAY,gBACpG,GAAIk9T,EAAa7C,cAAe,CACd,IAAI1tT,IACdvrd,SAAUjT,KAAKM,OAAO2S,UAAY,GAClCswD,WAAYwrtB,EAAaxrtB,WACzBnjD,OAAQpgB,KAAK0myB,4BAA4BpryB,KAAK0E,MAC9Cyxd,aAAc+0U,EACd56wB,QACIa,KAAMsiwB,EAAal9T,UACnB70d,MAAO+xxB,EAAa0I,SAExB3htB,gBAAkB51C,MAASyiU,EAAYlrU,KAAQ2oC,GAC/Cr5C,eAAgB,SAChBD,YAAa67U,EACb96I,YAAa,QACb9pL,KAAM,QAEFsY,SAASkwvB,OAEhB,CACkB,IAAI9yU,IACnBxgd,SAAUjT,KAAKM,OAAO2S,UAAY,GAClCmN,OAAQpgB,KAAK2myB,yBAAyBrryB,KAAK0E,MAC3CujE,WAAYwrtB,EAAaxrtB,WACzBrwD,UAAWlT,KAAKM,OAAO4S,UACvB0Y,QACIa,KAAMsiwB,EAAal9T,UACnB70d,MAAO+xxB,EAAa0I,SAExB3htB,gBAAkB51C,MAASyiU,EAAYlrU,KAAQ2oC,GAC/Cr5C,eAAgB,SAChBD,YAAa67U,EACb96I,YAAa,QACb4pQ,aAAc+0U,IAELnwvB,SAASkwvB,GAE1B,OAAOT,GAEXnD,EAAYtnyB,UAAUwpyB,eAAiB,SAAU7nyB,GAC7C,IAAIojE,EAAYpgE,KAAKomyB,aAAappyB,GAC9BqoyB,EAAcrlyB,KAAKgkyB,iBAAiBhnyB,EAAQ,cAC5C4pyB,EAAgB5myB,KAAKsmN,mBAAmBtpN,EAAQ,IAAMylyB,GAAariuB,GACvEiluB,EAAY1jyB,YAAYilyB,GAoBxB,OAnBmB,IAAInzU,IACnB0B,gBAAgB,EAChB/0c,OAAQpgB,KAAK6myB,iBACb5zxB,SAAUjT,KAAKM,OAAO2S,UAAY,GAClCswD,WAAY+ltB,GACZp2wB,UAAWlT,KAAKM,OAAO4S,UACvB0Y,QAAUa,KAAM,OAAQzvB,MAAO,SAC/Bq8d,qBAAsB,kBACtBytU,UAAW,SAAUjmyB,GACjB,IAAI66D,EAAQ,IAAI2H,GAChB3H,EAAoB,KAAX76D,EAAE4rB,KAAeivC,EAAMmI,MAAM,OAAQ,WAAYhjE,EAAE4rB,MAAM,GAAQivC,EAC1E76D,EAAEk4d,WAAWuwT,GAAc5ttB,IAE/Boa,gBAAkB51C,MAASlgC,KAAKsmyB,cAActpyB,GAAQy6B,KAAQ2oC,GAC9Dr5C,eAAgB,SAChBD,YAAa9mB,KAAKsmyB,cAActpyB,GAChC6qN,YAAa,UAEJxxK,SAASuwvB,GACfvB,GAEX1C,EAAYtnyB,UAAUqryB,4BAA8B,SAAUzmyB,GAC1D,GAAID,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAM6ksB,WAAa53xB,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAMq4I,UAAU3uO,OAAS,EACxG,IAAK,IAAIN,EAAI,EAAGA,EAAI6D,KAAKM,OAAO0rxB,aAAaD,mBAAmBtvxB,OAAQN,IACpE,GAAI6D,KAAKM,OAAO0rxB,aAAaD,mBAAmB5vxB,GAAG4vB,QAAU9rB,EAAKe,QAAQ6R,aAAa,SAChF1W,EAAI6D,KAAKM,OAAO0rxB,aAAaD,mBAAmBtvxB,OAAS,EAAG,CAG/D,IAAK,IAFDsqyB,EAAY/myB,KAAKlF,eAAeqB,GAChC6qyB,KACKzjxB,EAAI,EAAGA,EAAItjB,EAAKjD,MAAMP,OAAQ8mB,IAOnC,IAAK,IAFD6/V,EAJS,IAAI5/S,IACbE,KAAM1jE,KAAKM,OAAO0rxB,aAAaD,mBAAmB5vxB,EAAI,GAAGonE,aAC1DU,cAAa,IAAIZ,IAChBQ,MAAM7jE,KAAKM,OAAO0rxB,aAAaD,mBAAmB5vxB,EAAI,GAAG8qyB,aAAc,QAAShnyB,EAAKjD,MAAMumB,KAAK,GAC/EvjB,KAAKM,OAAO0rxB,aAAaD,mBAAmB5vxB,GAAGs7xB,SAChEyP,EAAYlnyB,KAAKmnyB,iBAAiBhryB,EAAGinX,GAChCj9V,EAAI,EAAGA,EAAI+gxB,EAAUzqyB,OAAQ0pB,IAClC6gxB,EAAWxiyB,KAAK0iyB,EAAU/gxB,IAGlC4gxB,EAAUxjuB,WAAayjuB,EACvBD,EAAUn7uB,aAK1B+2uB,EAAYtnyB,UAAUP,eAAiB,SAAUmX,GAC7C,IAAI88wB,EAAe/uxB,KAAKM,OAAO0rxB,aAAaD,mBAAmB95wB,EAAQ,GAEvE,OADgBjS,KAAKgB,QAAQ2B,cAAc,MAAQosxB,EAAahjwB,OAAO27D,cAAc,IAGzFi7sB,EAAYtnyB,UAAUsryB,yBAA2B,SAAU1myB,GACvD,GAAID,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAMq4I,UAAU3uO,OAAS,GAAKuD,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAM6ksB,UAChG,IAAK,IAAIz7xB,EAAI,EAAGA,EAAI6D,KAAKM,OAAO0rxB,aAAaD,mBAAmBtvxB,OAAQN,IACpE,GAAKA,EAAI6D,KAAKM,OAAO0rxB,aAAaD,mBAAmBtvxB,OAAS,GAC1DuD,KAAKM,OAAO0rxB,aAAaD,mBAAmB5vxB,GAAG4vB,QAAU9rB,EAAKe,QAAQ6R,aAAa,QAAS,CAC5F,IAAIu0xB,EAASpnyB,KAAKlF,eAAeqB,GAC7BinX,EAAUnjX,EAAKo7D,SAASr7D,KAAKM,OAAO8qO,UAAUjvO,GAAGs7xB,SACrD2P,EAAO7juB,WAAavjE,KAAKmnyB,iBAAiBhryB,EAAGinX,GAC7Cgkb,EAAOx7uB,WACPw7uB,EAAOpqyB,MAASgD,KAAKM,OAAO0rxB,aAAaD,mBAAmB5vxB,EAAI,GAAgB,eAC3EiryB,EAAO7juB,WAAW,GAAGvjE,KAAKM,OAAO8qO,UAAUjvO,EAAI,GAAGs7xB,UACnD2P,EAAO7juB,WAAW,GAAGvjE,KAAKM,OAAO8qO,UAAUjvO,EAAI,GAAGs7xB,WAKtEkL,EAAYtnyB,UAAU8ryB,iBAAmB,SAAUl1xB,EAAOmxW,GACtD,IAAI2ra,EAAe/uxB,KAAKM,OAAO0rxB,aAAaD,mBAAmB95wB,EAAQ,GACnEqqE,EAAQyysB,EAAaxrtB,WAEzB,OADa,IAAIC,IAAcE,KAAM4Y,IAASrY,cAAa,IAAIZ,IAAQQ,MAAMkrtB,EAAakY,aAAc,QAAS7jb,KAGrHu/a,EAAYtnyB,UAAUwryB,iBAAmB,WACrC,GAA0C,kBAAtC7myB,KAAKgB,QAAQ6R,aAAa,QAA6B,CACvD,IAAIw0xB,EAAmB7myB,SAASmC,cAAc,IAAMmiyB,IAAiCp9sB,cAAc,GAC/F4/sB,EAAiB9myB,SAASmC,cAAc,IAAMqiyB,IAA+Bt9sB,cAAc,GAC/F4/sB,EAAetqyB,MAAQqqyB,EAAiBrqyB,MACxCsqyB,EAAe17uB,aAGvB+2uB,EAAYtnyB,UAAU8pyB,eAAiB,SAAUnoyB,GAC7C,IAAIuqyB,EAAcvnyB,KAAKgkyB,iBAAiBhnyB,EAAQ,cAC5CojE,EAAYpgE,KAAKomyB,aAAappyB,GAC9BwqyB,EAAgBxnyB,KAAKsmN,mBAAmBtpN,EAAQ,IAAMylyB,GAAariuB,GACvEmnuB,EAAY5lyB,YAAY6lyB,GACxB,IAAI96e,EAAW,IAAI7tM,IACfz+F,OAAQpgB,KAAKwoM,SAASltM,KAAK0E,MAC3BiT,SAAUjW,EAAQ,IAAMgD,KAAKM,OAAO2S,SACpCC,UAAWlT,KAAKM,OAAO4S,UACvBG,MAAOrT,KAAKsmyB,cAActpyB,KAO9B,OALA0vT,EAASr2Q,SAASmxvB,GAClBA,EAAchkyB,aAAa,OAAQ48D,GACjB,WAAdA,IACApgE,KAAKynyB,aAAe/6e,GAEjB66e,GAEX5E,EAAYtnyB,UAAU8oyB,cAAgB,SAAUnnyB,GAC5C,IAAI0wlB,EAAa1tlB,KAAKgkyB,iBAAiBhnyB,EAAQ,cAC3CojE,EAAYpgE,KAAKomyB,aAAappyB,GAC9Bw2C,EAAex2C,IAAUk6xB,GAAyB,WAAa,QAC/D9pM,EAAeptlB,KAAKsmN,mBAAmBtpN,EAAQ,IAAMylyB,GAAariuB,EAAW5sB,GAUjF,OATAk6iB,EAAW/rlB,YAAYyrlB,GACvBhikB,GAAM2rG,aACF/1H,QAASoslB,EACTrmkB,eAAgB,SAChB9jB,YACIiQ,UAAWlT,KAAKM,OAAO4S,UACvB4T,YAAa9mB,KAAKsmyB,cAActpyB,MAGjC0wlB,GAEXi1M,EAAYtnyB,UAAU+qyB,aAAe,SAAU3uwB,GAC3C,IAAI2oC,EA+BJ,OA9BI3oC,IAAS+rvB,GACTpjtB,EAAYpgE,KAAK4rB,OAAOgylB,QAEnBnmlB,IAAS4swB,GACdjkuB,EAAYpgE,KAAK4rB,OAAO8B,SAEnB+J,IAASkswB,GACdvjuB,EAAYpgE,KAAK4rB,OAAO1L,UblLA,UaoLnBuX,EACL2oC,EAAYpgE,KAAK4rB,OAAO0iM,QAEnB72L,IAASy/vB,GACd92tB,EAAYpgE,KAAK4rB,OAAOsmB,YAEnBza,IAAS2twB,GACdhluB,EAAYpgE,KAAK4rB,OAAO8yvB,SAEnBjnvB,IAASqtwB,GACd1kuB,EAAYpgE,KAAK4rB,OAAO4/vB,cAEnB/zvB,IAASutwB,GACd5kuB,EAAYpgE,KAAK4rB,OAAO6/vB,YAEnBh0vB,IAASu/vB,GACd52tB,EAAY,WbpNe,aasNtB3oC,IACL2oC,EAAY,UAETA,GAEXuiuB,EAAYtnyB,UAAUiryB,cAAgB,SAAUlmuB,GAC5C,IAAI+sR,EAAY,GAChB,OAAQ/sR,GACJ,KAAKojtB,GACDr2b,EAAYntV,KAAKM,OAAOonyB,aAAa9pL,QACrC,MACJ,KAAKymL,GACDl3c,EAAYntV,KAAKM,OAAOonyB,aAAah6wB,SACrC,MACJ,KAAKwpwB,GACD/pc,EAAYntV,KAAKM,OAAOonyB,aAAax1vB,YACrC,MACJ,KAAKyxvB,GACDx2c,EAAYntV,KAAKM,OAAOonyB,aAAaxnxB,UACrC,MACJ,Ib1NwB,Qa2NpBitU,EAAYntV,KAAKM,OAAOonyB,aAAap5kB,QACrC,MACJ,KAAKw2kB,GACD33c,EAAYntV,KAAKM,OAAOonyB,aAAalc,cACrC,MACJ,KAAKwZ,GACD73c,EAAYntV,KAAKM,OAAOonyB,aAAajc,YACrC,MACJ,IbnP2B,WaoPvBt+b,EAAYntV,KAAKM,OAAOonyB,aAAa3c,eACrC,MACJ,KAAKqa,GACDj4c,EAAYntV,KAAKM,OAAOonyB,aAAahpB,SACrC,MACJ,KAAKsY,GACD7pc,EAAYntV,KAAKqlH,KAAKtxC,YAAY,YAG1C,OAAOo5Q,GAEXw1c,EAAYtnyB,UAAUmtM,SAAW,SAAUvoM,GACvC,IAAIkH,EAAUlH,EAAK3D,MAAY,OAC3B6K,EAAOrD,UAAUK,SAASihyB,IAC1BplyB,KAAK2nyB,eAAe1nyB,EAAKuS,SAEpBrL,EAAOrD,UAAUK,SAAS6yxB,IAC/Bh3xB,KAAK4nyB,oBAAoB3nyB,EAAKuS,SAEzBrL,EAAOrD,UAAUK,SbvQK,aawQ3BnE,KAAK6nyB,eAAe5nyB,EAAKuS,UAGjCmwxB,EAAYtnyB,UAAUysyB,mBAAqB,WACvC,IAAI9myB,EAAUG,EAAc,OAC5BnB,KAAK+nyB,mBAAqB,IAAIjjrB,IAC1BlgC,OAAQ5kF,KAAKqlH,KAAKtxC,YAAY,cAC9Bv8C,SAAS,EACT4C,QAAS,mCACT4rF,eAAe,EACfhwG,MAAO,MACPmwG,UACQE,MAAOrmH,KAAKgoyB,iBAAiB1syB,KAAK0E,MAClComH,aAAehsF,QAASp6B,KAAKqlH,KAAKtxC,YAAY,QAAS9gE,SAAU,SAAU+qG,WAAW,KAExFqI,MAAOrmH,KAAKioyB,mBAAmB3syB,KAAK0E,MAAOomH,aAAenzG,SAAU,WAAYmnB,QAASp6B,KAAKqlH,KAAKtxC,YAAY,aACrH5sE,OAAQnH,KAAKgB,QACb4oH,mBAAqB5xF,OAAQ,QAC7B9kB,UAAWlT,KAAKM,OAAO4S,UACvBsyG,SAAS,EACTvyG,SA5hBc,sBA6hBdvR,KAAM1B,KAAKkoyB,iBAAiB5syB,KAAK0E,QAErCA,KAAKgB,QAAQW,YAAYX,GACzBhB,KAAK+nyB,mBAAmB1xvB,SAASr1C,GACjChB,KAAK4lyB,uBAAuB5lyB,KAAK+nyB,mBAAmB/myB,QAAQ2B,cAAc,oBAE9EggyB,EAAYtnyB,UAAUsqyB,qBAAuB,WACzC3lyB,KAAK+nyB,mBAAmB9jrB,OACpBjkH,KAAKimyB,kBAAoBjmyB,KAAKmoyB,YAC9BnoyB,KAAKimyB,iBAAiBxH,kBAAkBz+xB,KAAKmoyB,aAGrDxF,EAAYtnyB,UAAUwsyB,eAAiB,SAAUv5vB,GAC7C,GAAIA,EACKtuC,KAAK+nyB,oBACN/nyB,KAAK8nyB,qBAET9nyB,KAAKimyB,iBAAiBj/xB,eAAgBkxE,UAAWl4E,KAAKooyB,gBAAiB3I,aAAc,IACrFz/xB,KAAK2lyB,2BAEJ,CACG3lyB,KAAK+nyB,oBACL/nyB,KAAK+nyB,mBAAmBxmtB,OAE5BvhF,KAAKmoyB,WAAa,GACdnoyB,KAAKimyB,mBACLjmyB,KAAKimyB,iBAAiBxH,kBAAkBz+xB,KAAKmoyB,YAC7CnoyB,KAAKqoyB,kBAAkBroyB,KAAKmoyB,aAGhCxkyB,GADc3D,KAAKgB,QAAQ2B,cAAc,IAAM+/xB,KAzjBpC,YA6jBnBC,EAAYtnyB,UAAU2syB,iBAAmB,WACrChoyB,KAAKmoyB,WAAanoyB,KAAKimyB,iBAAiBtH,oBACxC,IAAI39xB,EAAUhB,KAAKgB,QAAQ2B,cAAc,IAAM+/xB,IAC3C1iyB,KAAKimyB,iBAAiBtH,oBACtBt6xB,GAAarD,GAjkBF,WAokBX2C,GAAU3C,GApkBC,UAqkBXhB,KAAKynyB,aAAazgyB,eAAgBwL,SAAS,KAE/CxS,KAAKqoyB,kBAAkBroyB,KAAKmoyB,YAC5BnoyB,KAAKsoyB,qBAET3F,EAAYtnyB,UAAUityB,kBAAoB,WACtCtoyB,KAAK+nyB,mBAAmBxmtB,QAE5BohtB,EAAYtnyB,UAAU4syB,mBAAqB,WACvCjoyB,KAAKsoyB,oBACDtoyB,KAAKimyB,kBACLjmyB,KAAKimyB,iBAAiBxH,kBAAkBz+xB,KAAKuoyB,gBAE5CvoyB,KAAKuoyB,gBACNvoyB,KAAKynyB,aAAazgyB,eAAgBwL,SAAS,KAGnDmwxB,EAAYtnyB,UAAU6syB,iBAAmB,WACrCloyB,KAAKuoyB,eAAiBvoyB,KAAKimyB,iBAAiBtH,qBAEhDgE,EAAYtnyB,UAAUgoyB,oBAAsB,SAAUpjyB,GAClDD,KAAKgB,QAAQ2B,cAAc,IAAMoxxB,IAAgBroxB,gBAAgB,WACjE,IAAIpP,EAAQ2D,EACZD,KAAKgB,QAAQ2B,cAAc,iBAAyCX,UAAYhC,KAAKqlH,KAAKtxC,YAAY,YACtG,IAAIgltB,KACAz8xB,EAAMshnB,UACNm7K,EAAS/4xB,KAAK4rB,OAAOgylB,SAAWthnB,EAAMshnB,SAE1Cm7K,EAAS/4xB,KAAK4rB,OAAO1L,WAAa5jB,EAAM4jB,UACxC64wB,EAAS/4xB,KAAK4rB,OAAO0iM,SAAWhyN,EAAMgyN,QACtCyqkB,EAAS/4xB,KAAK4rB,OAAO8yvB,UAAYpixB,EAAMoixB,SACvCqa,EAASrQ,UAAW,EACpB1oxB,KAAKooyB,gBAAkBrP,EAAS/4xB,KAAK4rB,OAAO1L,WAC5ClgB,KAAKmoyB,WAAa,IACdnoyB,KAAKM,OAAO8qO,UAAU3uO,OAAS,GAAKuD,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAMq4I,UAAU3uO,OAAS,IAC3FuD,KAAKM,OAAO0rxB,aAAayM,kBAAkBM,GAAU,GAEzD/4xB,KAAKwoyB,YAAYzP,GACjB,IAAI3B,EAAep3xB,KAAKgB,QAAQ2B,cAAc,IAAMsgyB,IAOpD,GANI7L,GACAzzxB,GAAUyzxB,GAAetD,IAEzB9zxB,KAAKimyB,kBACLjmyB,KAAKimyB,iBAAiBj/xB,eAAgBkxE,UAAW57E,EAAM4jB,UAAWu/wB,aAAc,IAEhFz/xB,KAAKM,OAAOg/tB,YAAc7huB,EAAkBuC,KAAKM,OAAO6iyB,gBAAiB,CAEzEx/xB,GADc3D,KAAKgB,QAAQ2B,cAAc,IAAM+/xB,KAnnBpC,UAqnBX1iyB,KAAKqoyB,kBAAkBroyB,KAAKmoyB,YAEhCnoyB,KAAK8iyB,aAAa7+qB,QAEtB0+qB,EAAYtnyB,UAAUuhrB,oBAAsB,WACxC,IAAInpe,EAAOzzM,KAAKgB,QAAQ2B,cAAc,IAAMoxxB,IACxC92sB,KACJA,EAAMj9E,KAAKM,OAAO0zxB,cAAcpowB,OAAOgylB,QAAQnmlB,MAAQz3B,KAAKM,OAAO0zxB,cAAcpowB,OAAOgylB,QAAQq2K,WAChGh3sB,EAAMj9E,KAAKM,OAAO0zxB,cAAcpowB,OAAO8B,SAAS+J,MAAQz3B,KAAKM,OAAO0zxB,cAAcpowB,OAAO8B,SAASumwB,WAClGh3sB,EAAMj9E,KAAKM,OAAO0zxB,cAAcpowB,OAAO1L,UAAUuX,MAAQz3B,KAAKM,OAAO0zxB,cAAcpowB,OAAO1L,UAAU+zwB,WACpGh3sB,EAAMj9E,KAAKM,OAAO0zxB,cAAcpowB,OAAO0iM,QAAQ72L,MAAQz3B,KAAKM,OAAO0zxB,cAAcpowB,OAAO0iM,QAAQ2lkB,WAChGh3sB,EAAMj9E,KAAKM,OAAO0zxB,cAAcpowB,OAAOsmB,YAAYza,MAAQz3B,KAAKM,OAAO0zxB,cAAcpowB,OAAOsmB,YAAY+hvB,WACxGj0xB,KAAKoyxB,eAAeL,oBAAoBt+kB,EAAMx2H,EAAOj9E,KAAKgB,UAE9D2hyB,EAAYtnyB,UAAUmtyB,YAAc,SAAUnjtB,GAC1C,IAAI0zsB,EAAWr6xB,KAAW2mF,EAAW,MAAM,GAC3C,GAAI0zsB,EAAS/4xB,KAAK4rB,OAAO8yvB,UAAW,CAChC,IAAI3wvB,EAAOo/vB,GAAa,IAAIntwB,MAAM+4wB,EAAS/4xB,KAAK4rB,OAAO0iM,WAAY,GAAGruM,UACtE84wB,EAAS/4xB,KAAK4rB,OAAO0iM,UAAayqkB,EAAS/4xB,KAAK4rB,OAAO1L,WAAa6N,EAAQgrwB,EAAS/4xB,KAAK4rB,OAAO0iM,SAAW,IAAItuM,KAAK+N,GAEzH/tB,KAAKqlF,UAAY0zsB,EAGjB,IAAK,IAFDqH,EAAcpgyB,KAAKyoyB,kBACnBC,EAAWpqyB,OAAOhB,KAAKy7xB,GAClB9mxB,EAAQ,EAAGpQ,EAAMu+xB,EAAY3jyB,OAAQwV,EAAQpQ,EAAKoQ,IAAS,CAChE,IAAI02xB,EAAavI,EAAYnuxB,GACzBw9mB,EAAak5K,EAAWlxwB,KACxBmxwB,EAAmBD,EAAW7kyB,UAAUK,SAAS,kBACjDwkyB,EAAW7kyB,UAAUK,SAAS,kBAC7B1G,EAAkBgynB,KAAem5K,IACf,KAAfn5K,GAAqBm5K,IACrBn5K,EAAazvnB,KAAK8+mB,cAAc6pL,GAChCA,EAAWnlyB,aAAa,OAAQisnB,KAEE,IAAlCi5K,EAASnqyB,QAAQkxnB,GACjBzvnB,KAAK6oyB,kBAAkBF,EAAY5P,EAAStpK,IAG5CzvnB,KAAK8oyB,yBAAyBH,IAI1C,GAAIlryB,EAAkBuC,KAAKM,OAAO6iyB,gBAAiB,CAC/CnjyB,KAAK2nyB,eAAe5O,EAAS/4xB,KAAK4rB,OAAO8yvB,WACzC,IAAIqqB,EAAc/oyB,KAAKwC,YAAYw0xB,GAAsB,IAAMyL,IACzDhlyB,EAAkBs7xB,EAAS/4xB,KAAK4rB,OAAO4/vB,iBAAmB/txB,EAAkBs7xB,EAAS/4xB,KAAK4rB,OAAO6/vB,gBACnGsd,EAAYv2xB,SAAU,EACtBu2xB,EAAYn9uB,YAEhB5rD,KAAK4nyB,oBAAoBmB,EAAYv2xB,gBAC9BumxB,EAASrQ,WAGxBia,EAAYtnyB,UAAUyjnB,cAAgB,SAAU99mB,GAC5C,IAGImmC,GAHiBnmC,EAAQ8C,UAAUK,SAAS,qBACN9C,MAAMC,KAAKN,EAAQqT,cAAc+F,aACpE/Y,MAAMC,KAAKN,EAAQqT,cAAcA,cAAc+F,WACrB4sB,OAAO,SAAUnpB,GAAQ,OAAOA,EAAK4Z,OACtE,OAAQ0P,EAAW1qC,OAAS,EAAK0qC,EAAW,GAAG1P,KAAO,IAE1DkrwB,EAAYtnyB,UAAUssyB,eAAiB,SAAUqB,GAC7C,IAGIhtwB,EAHA0nwB,EAAW1jyB,KAAKwC,YAAYmhyB,IAC5Bh8jB,EAAS3nO,KAAKwC,YbnaU,SaoaxB6iyB,EAAcrlyB,KAAKgB,QAAQ2B,cAAc,0BAEzCqmyB,GACAhtwB,EAAUv+B,EAAkBuC,KAAKM,OAAO2lG,YAAejmG,KAAKu8R,UAAU,eAAiBv8R,KAAKM,OAAO2lG,WACnGtiG,EAAS3D,KAAKgB,QAAQQ,iBAAiB,gBb1YN,kBa2YjCmC,GAAU0hyB,GAAcvR,IACpB9zxB,KAAKgB,QAAQ2B,cAAc,qBAC3B0B,GAAarE,KAAKgB,QAAQ2B,cAAc,qBbjsB9B,YamsBd+gyB,EAAS1nwB,OAAS2rM,EAAO3rM,OAASA,IAGlCA,EAAUv+B,EAAkBuC,KAAKM,OAAO2lG,YAAejmG,KAAKu8R,UAAU,eAAiB,IAAMv8R,KAAKu8R,UAAU,eACxGv8R,KAAKM,OAAO2lG,WAAa,IAAMjmG,KAAKu8R,UAAU,eAClDl4R,EAAYrE,KAAKgB,QAAQQ,iBAAiB,gBbpZT,kBaqZjC6C,GAAaghyB,GAAcvR,IACvB9zxB,KAAKgB,QAAQ2B,cAAc,oCAAoC6P,SAC/D7O,GAAU3D,KAAKgB,QAAQ2B,cAAc,qBb3sB3B,Ya6sBd+gyB,EAAS1nwB,OAAS2rM,EAAO3rM,OAASA,GAElCh8B,KAAKojyB,iBACLpjyB,KAAKipyB,eAAeD,EAActF,EAAU/7jB,GAEhD+7jB,EAAS93uB,WACT+7K,EAAO/7K,YAEX+2uB,EAAYtnyB,UAAU4tyB,eAAiB,SAAUD,EAActF,EAAU/7jB,GACrE,IAAIzvJ,EACAC,EACJ,GAAI6wtB,EACA9wtB,EAAYgmsB,GAAe,IAAIl+vB,KAAKhgB,KAAKM,OAAO+9wB,gBAAgBn+vB,UAAUD,YAC1Ek4D,EAAUn4E,KAAKM,OAAO+9wB,gBAAgBK,SAClCyO,GAAa,IAAIntwB,KAAKhgB,KAAKM,OAAO+9wB,gBAAgB/vjB,QAAQruM,YAAa,GACvEi+vB,GAAe,IAAIl+vB,KAAKhgB,KAAKM,OAAO+9wB,gBAAgBn+vB,UAAUD,iBAIlE,GADAi4D,EAAY,IAAIl4D,KAAKhgB,KAAKM,OAAO+9wB,gBAAgBn+vB,UAAUD,WAC3B,UAA5BjgB,KAAKM,OAAOotM,aAAuD,gBAA5B1tM,KAAKM,OAAOotM,aAAiC1tM,KAAKM,OAAO+9wB,gBAAgBK,SAAU,CAC1H,IAAI9msB,EAAY53E,KAAKM,OAAO4qM,UAAUjgG,UAAUjrG,KAAKM,OAAO4oyB,UAAU3ryB,OAASmkE,SAAU,OACzFwW,EAAUzT,SAASmT,EAAUxR,WAAYwR,EAAUtR,aAAcsR,EAAUG,eAC3EI,EAAU,IAAIn4D,KAAKk4D,EAAUj4D,YACrB4oF,gBhsB3uBG,IgsB2uBkC7oG,KAAKwjyB,wBAGlDrrtB,EAAU,IAAIn4D,KAAKhgB,KAAKM,OAAO+9wB,gBAAgB/vjB,QAAQruM,WAG/DyjxB,EAAS1myB,MAAQk7E,EACjByvJ,EAAO3qO,MAAQm7E,EACfurtB,EAAS93uB,WACT+7K,EAAO/7K,YAEX+2uB,EAAYtnyB,UAAUkhS,UAAY,SAAU57B,GAQxC,MAN2B,OAAvB3gQ,KAAKM,OAAO0N,QAA0C,UAAvBhO,KAAKM,OAAO0N,OAClCnR,EAAS8jQ,EAAa,SAAU5xP,MAGhClS,EAAS,QAAemD,KAAKM,OAAO0N,OAAS,8BAAgC2yP,EAAa,SAAUtyP,KAIrHs0xB,EAAYtnyB,UAAUioyB,qBAAuB,SAAUvK,GAMnD,GALK/4xB,KAAKM,OAAOg/tB,YACbj7tB,GAAarE,KAAKgB,QAAQ2B,cAAc,IAAMsgyB,KAAwCnP,IAE1F9zxB,KAAKgB,QAAQ2B,cAAc,iBAAyCX,UAAYhC,KAAKqlH,KAAKtxC,YAAY,aACtG/zE,KAAKgB,QAAQ2B,cAAc,IAAMoxxB,IAAgBvwxB,aAAa,UAAWu1xB,EAAS/4xB,KAAK4rB,OAAOtoB,IAAI4J,YAC9FzP,EAAkBuC,KAAKM,OAAO6iyB,gBAAiB,CAC/CpK,EAAWr6xB,KAAWq6xB,EAAU,MAAM,GACtC,IAAIgQ,EAAc/oyB,KAAKwC,YAAYw0xB,GAAsB,IAAMyL,IAC3D0G,OAAgB,EACpB,GAAIpQ,EAAS/4xB,KAAK4rB,OAAO4/vB,gBAAkBuN,EAAS/4xB,KAAK4rB,OAAO6/vB,cAI5D,GAHA0d,GAAgB,EAChBpQ,EAAS/4xB,KAAK4rB,OAAO4/vB,eAAiBuN,EAAS/4xB,KAAK4rB,OAAO4/vB,gBAAkBuN,EAAS/4xB,KAAK4rB,OAAO6/vB,aAClGsN,EAAS/4xB,KAAK4rB,OAAO6/vB,aAAesN,EAAS/4xB,KAAK4rB,OAAO6/vB,cAAgBsN,EAAS/4xB,KAAK4rB,OAAO4/vB,eAC1FxrxB,KAAKM,OAAOkkG,SAAU,CACtB,IAAI4ksB,EAAUrQ,EAAS/4xB,KAAK4rB,OAAO4/vB,eAC/B6d,EAAQtQ,EAAS/4xB,KAAK4rB,OAAO6/vB,aACjCsN,EAAS/4xB,KAAK4rB,OAAO1L,WACjBlgB,KAAKwkG,SAASkkL,QAAQqwgB,EAAS/4xB,KAAK4rB,OAAO1L,WAAYlgB,KAAKM,OAAOkkG,SAAU4ksB,GACjFrQ,EAAS/4xB,KAAK4rB,OAAO0iM,SACjBtuN,KAAKwkG,SAASkkL,QAAQqwgB,EAAS/4xB,KAAK4rB,OAAO0iM,SAAUtuN,KAAKM,OAAOkkG,SAAU6ksB,SAInFF,GAAgB,EAEpBpQ,EAASrQ,SAAWygB,EACpBJ,EAAYv2xB,QAAU22xB,EACtBJ,EAAYn9uB,WAiBhB,GAfA5rD,KAAKwoyB,YAAYzP,GACbA,EAAS/4xB,KAAK4rB,OAAOm/vB,iBAAmB/qxB,KAAKimyB,iBAC7CjmyB,KAAKimyB,iBAAiBxH,kBAAkB1F,EAAS/4xB,KAAK4rB,OAAOm/vB,gBAAiBgO,EAAS/4xB,KAAK4rB,OAAO1L,aAE7FlgB,KAAKM,OAAOg/tB,YAAct/tB,KAAKimyB,kBACrCjmyB,KAAKimyB,iBAAiBxH,kBAAkB,IAE5Cz+xB,KAAKooyB,gBAAkBrP,EAAS/4xB,KAAK4rB,OAAO1L,WAC5ClgB,KAAKmoyB,WAAa,GACdpP,EAAS/4xB,KAAK4rB,OAAOm/vB,kBACjB/qxB,KAAKimyB,kBACLjmyB,KAAKimyB,iBAAiBxH,kBAAkB1F,EAAS/4xB,KAAK4rB,OAAOm/vB,gBAAiBgO,EAAS/4xB,KAAK4rB,OAAO1L,YAEvGlgB,KAAKmoyB,WAAapP,EAAS/4xB,KAAK4rB,OAAOm/vB,iBAEvC/qxB,KAAKM,OAAOg/tB,YAAc7huB,EAAkBuC,KAAKM,OAAO6iyB,gBAAiB,CACzE,IAAIniyB,EAAUhB,KAAKgB,QAAQ2B,cAAc,IAAM+/xB,IAC3C3J,EAAS/4xB,KAAK4rB,OAAOm/vB,iBACrB1mxB,GAAarD,GAlyBN,UAmyBPhB,KAAKynyB,aAAazgyB,eAAgBwL,SAAS,MAG3C7O,GAAU3C,GAtyBH,UAuyBPhB,KAAKynyB,aAAazgyB,eAAgBwL,SAAS,KAE/CxS,KAAKqoyB,kBAAkBroyB,KAAKmoyB,YAEhC,GAAInoyB,KAAKM,OAAO+1E,WAAar2E,KAAKM,OAAOg/tB,WAAY,CAChCt/tB,KAAKgB,QAAQ2B,cAAc,iBACjC+kF,cAAc,GAAGw2B,UAAW,EACpBl+G,KAAKgB,QAAQ2B,cAAc,IAAMsgyB,IACvCv7sB,cAAc,GAAGw2B,UAAW,EAE7Cl+G,KAAK8iyB,aAAa7+qB,QAEtB0+qB,EAAYtnyB,UAAUiuyB,0BAA4B,WAC9C,IAAIvpyB,EAAQC,KACyB,IAAjCA,KAAKM,OAAO8qO,UAAU3uO,QAAiBgB,EAAkBuC,KAAKM,OAAO6iyB,iBAGzEnjyB,KAAKM,OAAO0rxB,aAAaD,mBAAmB3sxB,QAAQ,SAAU6xQ,EAAUh/P,GACpE,IAAI1L,EAAWxG,EAAMjF,eAAemX,EAAQ,GAC5C1L,EAASg9D,WAAa0tM,EAAS1tM,WAC/Bh9D,EAASqlD,cAGjB+2uB,EAAYtnyB,UAAU6qyB,uBAAyB,WAC3C,OAAO,IAAI1J,IACPvpxB,SAAUjT,KAAKM,OAAO2S,SACtBgzF,WAAYjmG,KAAKM,OAAO2lG,WACxB/yF,UAAWlT,KAAKM,OAAO4S,UACvBwjE,eAAgB12E,KAAKM,OAAOo2E,eAC5B1oE,OAAQhO,KAAKM,OAAO0N,UAG5B20xB,EAAYtnyB,UAAUgtyB,kBAAoB,SAAUF,GAC5CnoyB,KAAKM,OAAOg/tB,aAAet/tB,KAAK+nyB,oBAChC/nyB,KAAK8nyB,qBAET,IAAItryB,EAAO2ryB,EACNnoyB,KAAKqlH,KAAKtxC,YAAY,WAAa,IAAM/zE,KAAKimyB,iBAAiB7M,eAAe+O,GAAenoyB,KAAKqlH,KAAKtxC,YAAY,UACxH/zE,KAAKynyB,aAAazgyB,eAAgBqM,MAAO7W,KAE7CmmyB,EAAYtnyB,UAAUw/qB,YAAc,SAAU56qB,GAC1CD,KAAK8iyB,aAAavhtB,OAClBvhF,KAAKoyxB,eAAelwG,iBACpBlirB,KAAKupyB,mBACAvpyB,KAAKM,OAAOg/tB,YAAct/tB,KAAKimyB,kBAChCjmyB,KAAKimyB,iBAAiBlE,eAG9BY,EAAYtnyB,UAAUusyB,oBAAsB,SAAU5qyB,GAClD,IAAIqoyB,EAAcrlyB,KAAKgB,QAAQ2B,cAAc,oBAC7C,GAAI3F,EAAO,CACP2G,GAAU0hyB,Gbj2BI,Yak2Bd,IAAIgC,EAAmBrnyB,KAAKwC,YAAYsiyB,IACpCwC,EAAiBtnyB,KAAKwC,YAAYwiyB,IAClCxgsB,EAAW6isB,EAAiB9juB,WAChC,IAAK8juB,EAAiBrqyB,QAAUgD,KAAKM,OAAOkkG,SAAU,CAElD,IADYA,EAASpoE,KAAK,SAAUotwB,GAAM,OAAOA,EAAGjgB,QAAUL,KAClD,CACR,IAAInsxB,KACJA,GAAQwsxB,MAAOL,GAAmBv1tB,KAAMu1tB,IACxC1krB,EAAShgG,KAAKzH,GACdsqyB,EAAiB9juB,WAAaihC,EAC9B8isB,EAAe/juB,WAAaihC,EAC5B6isB,EAAiBz7uB,WACjB07uB,EAAe17uB,YAGvBy7uB,EAAiBrqyB,MAAQqqyB,EAAiBrqyB,OAASgD,KAAKM,OAAOkkG,UAAY0krB,GAC3Eoe,EAAetqyB,MAAQsqyB,EAAetqyB,OAASgD,KAAKM,OAAOkkG,UAAY0krB,GACvEme,EAAiBz7uB,WACjB07uB,EAAe17uB,gBAGfvnD,GAAaghyB,Gbv3BC,aa03BtB1C,EAAYtnyB,UAAUkuyB,gBAAkB,WAEpC,IAAK,IADDnJ,EAAcpgyB,KAAKyoyB,kBACdx2xB,EAAQ,EAAGpQ,EAAMu+xB,EAAY3jyB,OAAQwV,EAAQpQ,EAAKoQ,IAAS,CAChE,IAAIw9mB,EAAa2wK,EAAYnuxB,GAAOwlB,KAC/Bh6B,EAAkBgynB,IAA8B,KAAfA,GAClCzvnB,KAAK8oyB,yBAAyB1I,EAAYnuxB,MAItD0wxB,EAAYtnyB,UAAUy9xB,UAAY,SAAU7tJ,GACxC,IAAIw+J,EACA13pB,EAAc/xI,KAAKgB,QAAQ2B,cAAc,IAAMoxxB,IACnD,IAAIhipB,IAAeA,EAAYjuI,UAAUK,SAAS,oBAC7C4tI,EAAYrqD,cAAc,GAAG6nD,WADlC,CAMA,IAAK,IAFDwppB,KACAqH,EAAcpgyB,KAAKyoyB,kBACdx2xB,EAAQ,EAAGpQ,EAAMu+xB,EAAY3jyB,OAAQwV,EAAQpQ,EAAKoQ,IAAS,CAChE,IAAIsC,EAAiB6rxB,EAAYnuxB,GAC7Bw9mB,EAAal7mB,EAAekjB,KAC5BmxwB,EAAmBr0xB,EAAezQ,UAAUK,SAAS,mBACrDoQ,EAAezQ,UAAUK,SAAS,mBACjC1G,EAAkBgynB,IAA8B,KAAfA,GAAqBm5K,KACnDA,GAAkC,KAAfn5K,IACnBA,EAAazvnB,KAAK8+mB,cAAcvqmB,GAChCA,EAAe/Q,aAAa,OAAQisnB,IAExCspK,EAAStpK,GAAczvnB,KAAK0pyB,oBAAoBn1xB,IAOxD,GAJKwkxB,EAASrQ,WACVqQ,EAAS/4xB,KAAK4rB,OAAO4/vB,eAAiB,KACtCuN,EAAS/4xB,KAAK4rB,OAAO6/vB,aAAe,MAEpChuxB,EAAkBuC,KAAKM,OAAO6iyB,gBAAiB,CAG/C,UAFOpK,EAASrQ,gBACTqQ,EAAS4Q,QACX5Q,EAAS/4xB,KAAK4rB,OAAO1L,aAAe64wB,EAAS/4xB,KAAK4rB,OAAO0iM,SAE1D,YADAtuN,KAAKM,OAAOgoxB,WAAWiM,oBAAoB,oBAG/C,GAAIwE,EAAS/4xB,KAAK4rB,OAAO1L,WAAa64wB,EAAS/4xB,KAAK4rB,OAAO0iM,SAEvD,YADAtuN,KAAKM,OAAOgoxB,WAAWiM,oBAAoB,iBAG/C,GAAIv0xB,KAAKimyB,kBAAoBjmyB,KAAKimyB,iBAAiBjpyB,OAAyC,KAAhCgD,KAAKimyB,iBAAiBjpyB,QAC9EysyB,EAAYzpyB,KAAK4pyB,qBAAqB7Q,EAAS/4xB,KAAK4rB,OAAO1L,WAAY64wB,EAAS/4xB,KAAK4rB,OAAO0iM,SAAU28a,IACjGxtoB,EAAkBgsyB,IAEnB,YADAzpyB,KAAKM,OAAOgoxB,WAAW+L,8BAA8BoV,GAKjE,IAAII,EAAU7pyB,KAAK8pyB,qBACdrsyB,EAAkBs7xB,EAAS/4xB,KAAK4rB,OAAOgylB,YACxCm7K,EAAS/4xB,KAAK4rB,OAAOgylB,SAA6C,KAAlCm7K,EAAS/4xB,KAAK4rB,OAAOgylB,SACjDm7K,EAAS/4xB,KAAK4rB,OAAOgylB,SAAW59mB,KAAKM,OAAO0zxB,cAAcpowB,OAAOgylB,QAAQzpV,SAE7E4kgB,EAAS/4xB,KAAK4rB,OAAO8yvB,YACrBqa,EAAS/4xB,KAAK4rB,OAAO1L,WAAag+vB,GAAe6a,EAAS/4xB,KAAK4rB,OAAO1L,YACtE64wB,EAAS/4xB,KAAK4rB,OAAO0iM,SAAW6+jB,GAAajP,GAAe6a,EAAS/4xB,KAAK4rB,OAAO0iM,UAAW,IAEhG,IAAI0ykB,EAAWhhyB,KAAKimyB,iBAAmBjmyB,KAAKimyB,iBAAiBtH,oBAAsB,KAEnF,GADA5F,EAAS/4xB,KAAK4rB,OAAOm/vB,gBAAkBiW,QAAsB7lyB,EACxDsC,EAAkBosyB,IAqCd7pyB,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAMq4I,UAAU3uO,OAAS,GAAKuD,KAAKM,OAAO8qO,UAAU3uO,OAAS,KACxFuD,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAMk5rB,eACxCjsxB,KAAK+pyB,kBAAkBhR,EAAU,QAGjCA,EAAS/4xB,KAAK4rB,OAAOtoB,IAAMtD,KAAKM,OAAOuouB,UAAU6mD,gBAAkB,EACnE1vxB,KAAKM,OAAOowxB,SAASqI,QA3CI,CAC7B,IAAIj8G,EAAa,IAAIt5mB,IAAcE,KAAM1jE,KAAKM,OAAO+qxB,aACjDpntB,cAAa,IAAIZ,IAAQQ,MAAM7jE,KAAK4rB,OAAOtoB,GAAI,QAASyxB,SAAS80wB,EAAS,MAAM,GAEpF,GADA9Q,EAAWr6xB,KAAWo+qB,EAAYi8G,GAC7Bt7xB,EAAkBq/qB,EAAW98qB,KAAK4rB,OAAOm/vB,kBAuBrC/qxB,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAMq4I,UAAU3uO,OAAS,GAAKuD,KAAKM,OAAO8qO,UAAU3uO,OAAS,KACxFuD,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAMk5rB,eACxCjsxB,KAAK+pyB,kBAAkBhR,EAAU,QAGjC/4xB,KAAKM,OAAOowO,UAAUqojB,OA5BkC,CAC5D,GAAkC,mBAA9B/4xB,KAAKM,OAAOoia,gBACPq2X,EAAS/4xB,KAAK4rB,OAAOo/vB,gBACtB+N,EAAS/4xB,KAAK4rB,OAAOtoB,IAAMtD,KAAKM,OAAOuouB,UAAU6mD,gBAAkB,GAEnE1vxB,KAAKgqyB,yBAAyBH,EAAS9Q,IAEvC,YADA/4xB,KAAKM,OAAOgoxB,WAAW+L,8BAA8B,gBAI3B,eAA9Br0xB,KAAKM,OAAOoia,eAAkCq2X,EAAS/4xB,KAAK4rB,OAAOtoB,MACnEw5qB,EAAW98qB,KAAK4rB,OAAOtoB,MACvBy1xB,EAAS/4xB,KAAK4rB,OAAOo/vB,cAAgBluG,EAAW98qB,KAAK4rB,OAAOtoB,MAE3DtD,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAMq4I,UAAU3uO,OAAS,GAAKuD,KAAKM,OAAO8qO,UAAU3uO,OAAS,KACxFuD,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAMk5rB,eACxCjsxB,KAAK+pyB,kBAAkBhR,EAAU,OAAQ/4xB,KAAKM,OAAOoia,eAGrD1ia,KAAKM,OAAOowO,UAAUqojB,EAAU/4xB,KAAKM,OAAOoia,gBAuBxD1ia,KAAK8iyB,aAAavhtB,SAEtBohtB,EAAYtnyB,UAAUuuyB,qBAAuB,SAAU1xtB,EAAWC,EAAS8yjB,GACvE,IAAIg/J,EACAC,EAAYlqyB,KAAKimyB,iBACjB3pyB,EAAQ0D,KAAKqlF,UACbljF,EAAWnC,KAAKwC,YAAY,sCAAsCxF,MACtE,GAAIiuoB,IAAUjroB,KAAKqlH,KAAKtxC,YAAY,OAShC,GARkC,eAA9B/zE,KAAKM,OAAOoia,eAAmCjla,EAAkBnB,EAAM0D,KAAKM,OAAO4lxB,YAAY4J,wBAC/Fma,EAAe,qBAEoD,UAAnEjqyB,KAAKwC,YAAY,wCAAwCxF,OACzDgD,KAAKwC,YAAY,+BAA+BxF,MAC1CktyB,EAAUhytB,YAChB+xtB,EAAe,gBAEfxsyB,EAAkBwsyB,GAClB,OAAQC,EAAUltyB,MAAME,MAAM,KAAK,GAAGA,MAAM,KAAK,IAC7C,IAAK,SACKi7E,EAAQl4D,UAAYi4D,EAAUj4D,iBAA0C,GAAX9d,IAC/D8nyB,EAAe,eAEnB,MACJ,IAAK,SAKD,IAAK,IAJDv1tB,EAAQw1tB,EAAUltyB,MAAME,MAAM,KAAK,GAAGA,MAAM,KAAK,GAAGA,MAAM,KAC1DH,GAAQitxB,GAAM,EAAGC,GAAM,EAAGC,GAAM,EAAGC,GAAM,EAAGC,GAAM,EAAGC,GAAM,EAAGC,GAAM,GACpEv8vB,KACAo8wB,KACKl4xB,EAAQ,EAAGA,EAAQyiE,EAAMj4E,QAAU0F,EAAW,GAAI8P,IACvD8b,EAAK9b,GACAyiE,EAAMj4E,OAASwV,EAASlV,EAAI23E,EAAMziE,IAAU8b,EAAK9b,EAAQyiE,EAAMj4E,QAAW,EAAI0F,EAGlF,IADDgmP,EAAYp6N,EAAK8J,KAAK,SAAUsrB,EAAGrmB,GAAK,OAAOqmB,EAAIrmB,IACvD,IAAS7qB,EAAQ,EAAGA,EAAQk2O,EAAU1rP,OAAQwV,IAC1Ck4xB,EAAS3lyB,KAAK2jP,EAAUl2O,GAASk2O,EAAUl2O,EAAQ,KAEjDkmE,EAAQl4D,UAAYi4D,EAAUj4D,iBAA+D,GAAjC5T,KAAK0T,IAAIxkB,MAAM8Q,KAAM89xB,KACnFF,EAAe,eAEnB,MACJ,IAAK,UACGjqyB,KAAKwC,YAAY,8CAA8CgQ,UACyB,KAApF,GAAI,GAAI,IAAIjU,QAAQw2B,SAASm1wB,EAAUltyB,MAAME,MAAM,KAAK,GAAGA,MAAM,KAAK,GAAI,KAC9E+syB,EAAe,iBAEV9xtB,EAAQl4D,WAAa,IAAID,MAAMk4D,GAAWlS,SAASkS,EAAUjS,WAAa9jE,KAC/E8nyB,EAAe,eAEnB,MACJ,IAAK,SACG9xtB,EAAQl4D,WAAa,IAAID,MAAMk4D,GAAWpS,YAAYoS,EAAUnS,cAAgB5jE,KAChF8nyB,EAAe,qBAO3B9xtB,EAAQl4D,WAAa,IAAID,MAAMk4D,GAAWlS,SAASkS,EAAUjS,WAAa9jE,KAC1E8nyB,EAAe,eAEfxsyB,EAAkBwsyB,IAClBjqyB,KAAKM,OAAOgoxB,WAAW6K,YAAY5xsB,OAG3C,OAAO0otB,GAEXtH,EAAYtnyB,UAAU+uyB,mBAAqB,SAAUC,EAAS/tyB,GAE1D,IAAK,IADDguyB,EACKr4xB,EAAQ,EAAGA,EAAQo4xB,EAAQ5tyB,OAAQwV,IACxC,GAAI3V,EAAM0D,KAAK4rB,OAAO1L,WAAWuxL,YAAc44lB,EAAQp4xB,GAAOjS,KAAK4rB,OAAO1L,WAAWuxL,UAAW,CAC5F64lB,EAAWr4xB,EACX,MAGR,OAAOq4xB,GAEX3H,EAAYtnyB,UAAU2uyB,yBAA2B,SAAUH,EAAS9Q,GAChE,IAAIwR,EAAYvqyB,KAAKM,OAAO2vxB,mBAAmBl7vB,SAAS80wB,EAAS,KAC7D53xB,EAAQjS,KAAKoqyB,mBAAmBG,EAAWvqyB,KAAKqlF,WACpD,GAAI5nF,EAAkBwU,GAClB,OAAO,EAEX,GAAc,IAAVA,GACA,KAAKxU,EAAkB8syB,EAAUt4xB,EAAQ,KAC/B,IAAI+N,MAAMuqxB,EAAUt4xB,EAAQ,GAAGjS,KAAK4rB,OAAO1L,YAAYD,WACzD,IAAID,MAAM+4wB,EAAS/4xB,KAAK4rB,OAAO0iM,UAAUruM,WACzC,OAAO,OAKf,GAAIhO,IAAUs4xB,EAAU9tyB,OAAS,GAC7B,KAAM,IAAIujB,MAAMuqxB,EAAUt4xB,EAAQ,GAAGjS,KAAK4rB,OAAO0iM,UAAUruM,WACpD,IAAID,MAAM+4wB,EAAS/4xB,KAAK4rB,OAAO1L,YAAYD,WAC9C,OAAO,OAGV,KAAO,IAAID,MAAMuqxB,EAAUt4xB,EAAQ,GAAGjS,KAAK4rB,OAAO0iM,UAAUruM,WAC7D,IAAID,MAAM+4wB,EAAS/4xB,KAAK4rB,OAAO1L,YAAYD,WAC1C,IAAID,MAAMuqxB,EAAUt4xB,EAAQ,GAAGjS,KAAK4rB,OAAO1L,YAAYD,WACpD,IAAID,MAAM+4wB,EAAS/4xB,KAAK4rB,OAAO0iM,UAAUruM,WAC7C,OAAO,EAGf,OAAO,GAEX0ixB,EAAYtnyB,UAAU0uyB,kBAAoB,SAAUhR,EAAU5iuB,EAAQusW,GAClE,IAAI3ia,EAAQC,KACRwqyB,EAAkBxqyB,KAAKM,OAAO0rxB,aAAaD,mBAAmB1qxB,OAAO,GAAG,GACxE0txB,EAAegK,EAASyR,EAAgBz+wB,OAC5CgjwB,EAAgBA,aAAwBvwxB,MAASuwxB,GAAgBA,GA6EjE,IAAK,IA1EDhhwB,EAFA08wB,EAAYzqyB,KAAKM,OAAO0rxB,aAAagD,kBACrC0b,KAEAzryB,EAAU,SAAU9C,GACpB,IAAIwN,EAASjL,KAAWq6xB,EAAU,MAAM,GACxCpvxB,EAAO4jG,EAAO3hF,OAAOtoB,IAAMiqG,EAAOjtG,OAAOuouB,UAAU6mD,gBAAkB,EACrE3hwB,KACA,IAAI48wB,EAAY,WACZ,GAAe,SAAXx0uB,GAAqBh6D,IAAM4yxB,EAAatyxB,OAAS,EACjD,GAAIsxB,EAAKtxB,OAAS,EAAG,CACjBsxB,EAAK,GAAGhuB,EAAM6rB,OAAOtoB,IAAMy1xB,EAASh5xB,EAAM6rB,OAAOtoB,IACjD,IAAK,IAAI6iB,EAAI,EAAGA,EAAI4H,EAAKtxB,OAAQ0pB,IAC7B4H,EAAK5H,GAAGpmB,EAAM6rB,OAAOtoB,IAAMvD,EAAMO,OAAOuouB,UAAU6mD,gBAAkB,EAAIvzxB,EACxEuuyB,EAAUlmyB,KAAKupB,EAAK5H,IACpBpmB,EAAMO,OAAOowO,UAAU3iN,EAAK,GAAI20Y,QAIpC/4Z,EAAO5J,EAAM6rB,OAAOtoB,IAAMy1xB,EAASh5xB,EAAM6rB,OAAOtoB,IAChDvD,EAAMO,OAAOowO,UAAU/mO,EAAQ+4Z,QAInC,GAAI30Y,EAAKtxB,OAAS,EACd,IAAK,IAAI8mB,EAAI,EAAGA,EAAIwK,EAAKtxB,OAAQ8mB,IAC7BwK,EAAKxK,GAAGxjB,EAAM6rB,OAAOtoB,IAAMvD,EAAMO,OAAOuouB,UAAU6mD,gBAAkB,EAAInswB,EACxEmnxB,EAAUlmyB,KAAKupB,EAAKxK,SAIxB5Z,EAAO5J,EAAM6rB,OAAOtoB,IAAMvD,EAAMO,OAAOuouB,UAAU6mD,gBAAkB,EAAIvzxB,EACvEuuyB,EAAUlmyB,KAAKmF,IAI3B,GAAI4jG,EAAOjtG,OAAOi+wB,kBAAkBxrrB,MAAM6ksB,YAAen6xB,EAAkBgtyB,GAAa,CAKpF,IAAK,IADDre,EAHSqe,EAAUzjwB,OAAO,SAAUjqC,GACpC,OAAOA,EAAIgyxB,aAAayb,EAAgB/S,WAAa1I,EAAa5yxB,KACnE,GACqBiwxB,WACfn6wB,EAAQ,EAAGA,EAAQs7F,EAAOjtG,OAAO0rxB,aAAaD,mBAAmBtvxB,OAAQwV,IAAS,CACvF,IAAI8Z,EAAQwhF,EAAOjtG,OAAO0rxB,aAAaD,mBAAmB95wB,GAAO8Z,MACjEpiB,EAAOoiB,GAAUqgwB,EAAWn6wB,aAAkBzT,MAAS4txB,EAAWn6wB,GAAO,GAAKm6wB,EAAWn6wB,GAE7F04xB,QAEC,CACD,IAAS14xB,EAAQ,EAAGA,EAAQs7F,EAAOjtG,OAAO0rxB,aAAaD,mBAAmBtvxB,OAAS,EAAGwV,IAAS,CACvF8Z,EAAQwhF,EAAOjtG,OAAO0rxB,aAAaD,mBAAmB95wB,GAAO8Z,MACjE,GAAIpiB,EAAOoiB,aAAkBvtB,OAASmL,EAAOoiB,GAAOtvB,OAAS,EACzD,IAAK,IAAI0pB,EAAI,EAAGA,EAAIxc,EAAOoiB,GAAOtvB,OAAQ0pB,IAAK,CAC3C,IAAI3S,EAAU9U,KAAWiL,EAAQ,MAAM,GACvC6J,EAAQuY,GAASgtwB,EAAShtwB,GAAO5F,GACjC3S,EAAQg3xB,EAAgBz+wB,OAASgjwB,EAAa5yxB,GAC9C4xB,EAAKvpB,KAAKgP,QAId,GAAoB,IAAhBua,EAAKtxB,OACLkN,EAAOoiB,GAAUgtwB,EAAShtwB,aAAkBvtB,MACxCu6xB,EAAShtwB,GAAO,GAAKgtwB,EAAShtwB,GAClCpiB,EAAO6gyB,EAAgBz+wB,OAASgjwB,EAAa5yxB,QAG7C,IAAK,IAAIsrC,EAAI,EAAGA,EAAI1Z,EAAKtxB,OAAQgrC,IAC7B1Z,EAAK0Z,GAAG1b,GAAUgtwB,EAAShtwB,aAAkBvtB,MACzCu6xB,EAAShtwB,GAAO,GAAKgtwB,EAAShtwB,GAKlDpiB,EAAO6gyB,EAAgBz+wB,OAASgjwB,EAAa5yxB,GAC7CwuyB,MAGJp9rB,EAASvtG,KACJ7D,EAAI,EAAGA,EAAI4yxB,EAAatyxB,OAAQN,IACrC8C,EAAQ9C,GAEZ,GAAIuuyB,EAAUjuyB,OAAS,EAAG,CACtB,IAAK,IAAI2B,EAAK,EAAGwsyB,EAAcF,EAAWtsyB,EAAKwsyB,EAAYnuyB,OAAQ2B,IAAM,CACrE,IAAI6tG,EAAU2+rB,EAAYxsyB,GAC1B6tG,EAAQjsG,KAAK4rB,OAAOkkwB,qBAAuB,KAC3C7jrB,EAAQjsG,KAAK4rB,OAAOo/vB,cAAgB,KAExChrxB,KAAKM,OAAOowxB,SAASga,KAG7B/H,EAAYtnyB,UAAUyuyB,mBAAqB,WACvC,OAAO9pyB,KAAKgB,QAAQ2B,cAAc,IAAMoxxB,IAAgBlhxB,aAAa,YAEzE8vxB,EAAYtnyB,UAAUotyB,gBAAkB,WACpC,SAAUpnyB,MAAMC,KAAKtB,KAAKgB,QAAQQ,iBAAiB,cAEvDmhyB,EAAYtnyB,UAAUquyB,oBAAsB,SAAU1oyB,GAyBlD,OAvBIA,EAAQ8C,UAAUK,SAAS,gBACnBnD,EAAQ0mF,cAAc,GAAG1qF,MAE5BgE,EAAQ8C,UAAUK,SAAS,oBACxBnD,EAAQ0mF,cAAc,GAAG1qF,MAE5BgE,EAAQ8C,UAAUK,SAAS,kBACxBnD,EAAQ0mF,cAAc,GAAG1qF,MAE5BgE,EAAQ8C,UAAUK,SAAS,iBACxBnD,EAAQ0mF,cAAc,GAAG1qF,MAE5BgE,EAAQ8C,UAAUK,SAAS,cACxBnD,EAAQ0mF,cAAc,GAAGl1E,QAGZ,aAAjBxR,EAAQ0F,KACA1F,EAAQwR,QAGRxR,EAAQhE,OAK5B2lyB,EAAYtnyB,UAAUwtyB,kBAAoB,SAAU7nyB,EAAShE,GACzD,GAAIgE,EAAQ8C,UAAUK,SAAS,gBAAiB,EACxCoC,EAAWvF,EAAQ0mF,cAAc,IAC5B1qF,MAAQA,EACjBuJ,EAASqlD,gBAER,GAAI5qD,EAAQ8C,UAAUK,SAAS,oBAAqB,EACjDoC,EAAWvF,EAAQ0mF,cAAc,IAC5B1qF,MAAQA,EACjBuJ,EAASqlD,gBAER,GAAI5qD,EAAQ8C,UAAUK,SAAS,kBAAmB,EAC/CoC,EAAWvF,EAAQ0mF,cAAc,IAC5B1qF,MAAQA,EACjBuJ,EAASqlD,gBAER,GAAI5qD,EAAQ8C,UAAUK,SAAS,iBAAkB,EAC9CoC,EAAWvF,EAAQ0mF,cAAc,IAC5B1qF,SACTuJ,EAASvJ,MAAUA,aAAiBwB,MAASxB,GAASA,GACtDuJ,EAASqlD,gBAER,GAAI5qD,EAAQ8C,UAAUK,SAAS,cAAe,CAC/C,IAAIoC,GAAAA,EAAWvF,EAAQ0mF,cAAc,IAC5Bl1E,QAAUxV,EACnBuJ,EAASqlD,eAGY,aAAjB5qD,EAAQ0F,KACR1F,EAAQhE,MAAQA,GAAS,GAGzBgE,EAAQwR,QAAUxV,GAI9B2lyB,EAAYtnyB,UAAUytyB,yBAA2B,SAAU9nyB,GACvD,GAAIA,EAAQ8C,UAAUK,SAAS,gBAAiB,EACxCoC,EAAWvF,EAAQ0mF,cAAc,IAC5B1qF,MAAQ,IAAIgjB,KACrBzZ,EAASqlD,gBAER,GAAI5qD,EAAQ8C,UAAUK,SAAS,oBAAqB,EACjDoC,EAAWvF,EAAQ0mF,cAAc,IAC5B1qF,MAAQ,IAAIgjB,KACrBzZ,EAASqlD,gBAER,GAAI5qD,EAAQ8C,UAAUK,SAAS,kBAAmB,EAC/CoC,EAAWvF,EAAQ0mF,cAAc,IAC5B1qF,MAAQ,KACjBuJ,EAASqlD,gBAER,GAAI5qD,EAAQ8C,UAAUK,SAAS,iBAAkB,EAC9CoC,EAAWvF,EAAQ0mF,cAAc,IAC5B1qF,SACTuJ,EAASqlD,gBAER,GAAI5qD,EAAQ8C,UAAUK,SAAS,cAAe,CAC/C,IAAIoC,GAAAA,EAAWvF,EAAQ0mF,cAAc,IAC5Bl1E,SAAU,EACnBjM,EAASqlD,eAGY,aAAjB5qD,EAAQ0F,KACR1F,EAAQwR,SAAU,EAGlBxR,EAAQhE,MAAQ,IAI5B2lyB,EAAYtnyB,UAAUmH,YAAc,SAAUa,GAC1C,OAAOrD,KAAKgB,QAAQ2B,cAAc,IAAMU,GAAWqkF,cAAc,IAErEi7sB,EAAYtnyB,UAAU6nyB,YAAc,SAAUjjyB,GAC1C,OAAQD,KAAKM,OAAOoia,eAChB,IAAK,iBACD,IAAI92Y,EAAS5rB,KAAKM,OAAO4lxB,YACpBzoxB,EAAkBuC,KAAKM,OAAO8nxB,gBAAgB9rxB,MAAMsvB,EAAOm/vB,iBAI5D/qxB,KAAKM,OAAOoia,cAAgB,SAH5B1ia,KAAKM,OAAOoia,cAAgB,mBAKhC,MACJ,IAAK,aACD1ia,KAAKM,OAAOoia,cAAgB,eAGpC1ia,KAAK8iyB,aAAavhtB,OAClBvhF,KAAKM,OAAOgoxB,WAAWgM,mBAE3BqO,EAAYtnyB,UAAU89xB,4BAA8B,WAIhD,OAHIn5xB,KAAKM,OAAOg/tB,aAAet/tB,KAAK+nyB,oBAChC/nyB,KAAK8nyB,qBAEF9nyB,KAAKimyB,kBAEhBtD,EAAYtnyB,UAAUymyB,kBAAoB,WAEtC,IAAK,IAAI1jyB,EAAK,EAAGysyB,EADC7qyB,KAAKyoyB,kBACuBrqyB,EAAKysyB,EAAcpuyB,OAAQ2B,IAAM,CAC3E,IAAI4C,EAAU6pyB,EAAczsyB,GACxBmI,OAAW,EACXvF,EAAQ8C,UAAUK,SAAS,oBAC3BoC,EAAWvF,EAAQ0mF,cAAc,GAE5B1mF,EAAQ8C,UAAUK,SAAS,gBAChCoC,EAAWvF,EAAQ0mF,cAAc,GAE5B1mF,EAAQ8C,UAAUK,SAAS,cAChCoC,EAAWvF,EAAQ0mF,cAAc,GAE5B1mF,EAAQ8C,UAAUK,SAAS,kBAChCoC,EAAWvF,EAAQ0mF,cAAc,GAE5B1mF,EAAQ8C,UAAUK,SAAS,mBAChCoC,EAAWvF,EAAQ0mF,cAAc,IAEjCnhF,GACAA,EAAS+L,UAGbtS,KAAKylH,WACLzlH,KAAKylH,UAAUnzG,WAQvBqwxB,EAAYtnyB,UAAUiX,QAAU,WAC5BtS,KAAKoyxB,eAAe9/wB,UAChBtS,KAAKimyB,kBACLjmyB,KAAKimyB,iBAAiB3zxB,UAE1BtS,KAAK8hyB,oBACD9hyB,KAAK+nyB,qBACL/nyB,KAAK+nyB,mBAAmBz1xB,UACxB/N,EAAOvE,KAAK+nyB,mBAAmB/myB,UAE/BhB,KAAK8iyB,eACL9iyB,KAAK8iyB,aAAaxwxB,UAClBtS,KAAK8iyB,aAAe,MAEpB9iyB,KAAKgB,UACLuD,EAAOvE,KAAKgB,SACZhB,KAAKgB,QAAU,OAGhB2hyB,KC92CP7jX,GAAwB,WAIxB,SAASA,EAAOx+a,GACZN,KAAKM,OAASA,EA8FlB,OA5FAw+a,EAAOzjb,UAAU0wG,OAAS,SAAUyxqB,EAAUstB,QACpB,IAAlBA,IAA4BA,GAAgB,GAChD9qyB,KAAK+qyB,iBAAiBvtB,GAClBstB,GACA9qyB,KAAKwwU,sBAGbsuG,EAAOzjb,UAAU0vyB,iBAAmB,SAAUvtB,GAK1C,OAJIx9wB,KAAKM,OAAO69wB,aACZn+wB,KAAKM,OAAO69wB,WAAWvhxB,sBACvBoD,KAAKM,OAAO69wB,WAAW7rwB,WAEnBkrwB,GACJ,IAAK,MACDx9wB,KAAKM,OAAO69wB,WAAan+wB,KAAKM,OAAO0qyB,UACrC,MACJ,IAAK,OACDhryB,KAAKM,OAAO69wB,WAAan+wB,KAAKM,OAAO2qyB,WACrC,MACJ,IAAK,WACDjryB,KAAKM,OAAO69wB,WAAan+wB,KAAKM,OAAO4qyB,eACrC,MACJ,IAAK,QACDlryB,KAAKM,OAAO69wB,WAAan+wB,KAAKM,OAAO6qyB,YACrC,MACJ,IAAK,SACDnryB,KAAKM,OAAO69wB,WAAan+wB,KAAKM,OAAO8qyB,aACrC,MAOJ,IAAK,cACDpryB,KAAKM,OAAO69wB,WAAan+wB,KAAKM,OAAO+qyB,kBAG7C,GAAI5tyB,EAAkBuC,KAAKM,OAAO69wB,YAAa,CAC3C,IAAImtB,EAAYtryB,KAAKM,OAAOomxB,gBAAgB,GAAG3wrB,OAC/C,GAAIu1sB,EAMA,OALAtryB,KAAKM,OAAO0G,eAAgB0mM,YAAa49lB,IAAa,GAClDtryB,KAAKM,OAAO8qpB,eACZprpB,KAAKM,OAAO8qpB,aAAasxH,mBACzB18wB,KAAKM,OAAO8qpB,aAAa6xH,mBAEtBj9wB,KAAK+qyB,iBAAiBO,GAEjC,MAAM1qyB,MAAM,2BAEhBZ,KAAKuryB,gBAAgB/tB,GACrBx9wB,KAAKM,OAAO69wB,WAAWzhxB,mBACvBsD,KAAKM,OAAO69wB,WAAW4C,iBACvB/gxB,KAAKM,OAAOkryB,cAAcC,gBAAkBzryB,KAAKM,OAAOg/tB,YAAct/tB,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAMq4I,UAAU3uO,OAAS,GACzHuD,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAM24sB,kBACxC1ryB,KAAKM,OAAO69wB,WAAWpnC,aAAaoqC,IAChCnhxB,KAAKM,OAAO8qpB,cACZprpB,KAAKM,OAAO8qpB,aAAaiyH,gBAAgBr9wB,KAAKM,OAAO69wB,WAAWb,oBAEpEt9wB,KAAKM,OAAOqryB,sBAEhB7sX,EAAOzjb,UAAUkwyB,gBAAkB,SAAUjwmB,GACzC,IAAIlhK,EAAUp6B,KAAKM,OAAO69wB,WAAW9ivB,aAAaigK,GAClDt7L,KAAKM,OAAOU,QAAQwC,aAAa,OAAQ,QACzCxD,KAAKM,OAAOU,QAAQwC,aAAa,aAAc42B,IAEnD0kZ,EAAOzjb,UAAUm1U,mBAAqB,WAClC,IAAIzwU,EAAQC,KACRzC,EAAQyC,KAAKM,OAAO69wB,WAAWjmsB,YAC/Br5D,EAAM7e,KAAKM,OAAO69wB,WAAWhmsB,UACfn4E,KAAKM,OAAOmwU,WAAW9D,QAAQ3sU,KAAKM,OAAOmwU,WAAWC,cAAcnzU,EAAOshB,IACjFy0K,KAAK,SAAUzyL,GAAK,OAAOd,EAAM4wU,mBAAmB9vU,KAC3D8zL,MAAM,SAAU9zL,GAAK,OAAOd,EAAM+poB,mBAAmBjpoB,MAE9Di+a,EAAOzjb,UAAUs1U,mBAAqB,SAAU9vU,GAC5C,IAAIb,KAAKM,OAAO0mF,YAAhB,CAGAhnF,KAAKM,OAAOkmB,QfrEK,ceqEuB3lB,GACxCb,KAAKM,OAAO+qxB,WAAa3sxB,KAAWmC,EAAE9B,OAAQ,MAAM,GACpD,IAAI2rxB,EAAY1qxB,KAAKM,OAAOuouB,UAAU9ppB,YAAY/+E,KAAKM,OAAO+qxB,YAC9DrrxB,KAAKM,OAAOyN,OAAOi9nB,IAAoBugJ,cAAeb,IACtD1qxB,KAAKM,OAAOkmB,QfvEG,aewEfxmB,KAAKM,OAAOoiB,gBAEhBo8Z,EAAOzjb,UAAUyuoB,mBAAqB,SAAUjpoB,GACxCb,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAOkmB,QAAQijnB,IAAwBnljB,MAAOzjF,IACnDb,KAAKM,OAAOoiB,gBAETo8Z,KCzGPx0V,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAM5DgvwB,GAA2B,SAAUzgtB,GAErC,SAASygtB,IACL,OAAkB,OAAXzgtB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbAsqF,GAAUshtB,EAAWzgtB,GAIrBN,IACI3jF,GAAS,IACV0kyB,EAAUvwyB,UAAW,iBAAa,GACrCwvF,IACI3jF,EAAS,UACV0kyB,EAAUvwyB,UAAW,aAAS,GACjCwvF,IACI3jF,EAAS,UACV0kyB,EAAUvwyB,UAAW,WAAO,GACxBuwyB,GACT5suB,ICnCEsrB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAM5DivwB,GAA2B,SAAU1gtB,GAErC,SAAS0gtB,IACL,OAAkB,OAAX1gtB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAiB/D,OAnBAsqF,GAAUuhtB,EAAW1gtB,GAIrBN,IACI3jF,GAAS,IACV2kyB,EAAUxwyB,UAAW,cAAU,GAClCwvF,IACI3jF,EAAS,KACV2kyB,EAAUxwyB,UAAW,gBAAY,GACpCwvF,IACI3jF,EAAS,IACV2kyB,EAAUxwyB,UAAW,iBAAa,GACrCwvF,IACI3jF,KACD2kyB,EAAUxwyB,UAAW,yBAAqB,GAC7CwvF,IACI3jF,KACD2kyB,EAAUxwyB,UAAW,yBAAqB,GACtCwwyB,GACT7suB,ICzCEsrB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAU5DkvwB,GAAuB,SAAU3gtB,GAEjC,SAAS2gtB,IACL,OAAkB,OAAX3gtB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAsC/D,OAxCAsqF,GAAUwhtB,EAAO3gtB,GAIjBN,IACI3jF,EAAS,OACV4kyB,EAAMzwyB,UAAW,UAAM,GAC1BwvF,IACI3jF,GAAWuwB,KAAM,UAAW08P,QAAS,eACtC23gB,EAAMzwyB,UAAW,eAAW,GAC/BwvF,IACI3jF,GAAWuwB,KAAM,eAClBq0wB,EAAMzwyB,UAAW,iBAAa,GACjCwvF,IACI3jF,GAAWuwB,KAAM,aAClBq0wB,EAAMzwyB,UAAW,eAAW,GAC/BwvF,IACI3jF,GAAWuwB,KAAM,mBAClBq0wB,EAAMzwyB,UAAW,qBAAiB,GACrCwvF,IACI3jF,GAAWuwB,KAAM,iBAClBq0wB,EAAMzwyB,UAAW,mBAAe,GACnCwvF,IACI3jF,GAAWuwB,KAAM,cAClBq0wB,EAAMzwyB,UAAW,gBAAY,GAChCwvF,IACI3jF,GAAWuwB,KAAM,iBAClBq0wB,EAAMzwyB,UAAW,mBAAe,GACnCwvF,IACI3jF,GAAWuwB,KAAM,cAClBq0wB,EAAMzwyB,UAAW,gBAAY,GAChCwvF,IACI3jF,GAAWuwB,KAAM,kBAClBq0wB,EAAMzwyB,UAAW,oBAAgB,GACpCwvF,IACI3jF,GAAWuwB,KAAM,oBAClBq0wB,EAAMzwyB,UAAW,sBAAkB,GACtCwvF,IACI3jF,GAAWuwB,KAAM,yBAClBq0wB,EAAMzwyB,UAAW,2BAAuB,GACpCywyB,GACT9suB,IClEEsrB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAO5DmvwB,GAA+B,SAAU5gtB,GAEzC,SAAS4gtB,IACL,OAAkB,OAAX5gtB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAuB/D,OAzBAsqF,GAAUyhtB,EAAe5gtB,GAIzBN,IACI3jF,KACD6kyB,EAAc1wyB,UAAW,gBAAY,GACxCwvF,IACI3jF,OACD6kyB,EAAc1wyB,UAAW,kBAAc,GAC1CwvF,IACI3jF,KACD6kyB,EAAc1wyB,UAAW,aAAS,GACrCwvF,IACI9iF,KAAY+jyB,KACbC,EAAc1wyB,UAAW,cAAU,GACtCwvF,IACI3jF,GAAS,IACV6kyB,EAAc1wyB,UAAW,qBAAiB,GAC7CwvF,IACI3jF,KACD6kyB,EAAc1wyB,UAAW,uBAAmB,GAC/CwvF,IACI3jF,KACD6kyB,EAAc1wyB,UAAW,0BAAsB,GAC3C0wyB,GACT/suB,IChDEsrB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAM5DyvY,GAAuB,SAAUlhV,GAEjC,SAASkhV,IACL,OAAkB,OAAXlhV,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAiB/D,OAnBAsqF,GAAU+hV,EAAOlhV,GAIjBN,IACI3jF,GAAS,IACVmla,EAAMhxa,UAAW,cAAU,GAC9BwvF,IACI3jF,GAAS,IACVmla,EAAMhxa,UAAW,iBAAa,GACjCwvF,IACI3jF,GAAS,IACVmla,EAAMhxa,UAAW,sBAAkB,GACtCwvF,IACI3jF,OACDmla,EAAMhxa,UAAW,iBAAa,GACjCwvF,IACI3jF,GAAS,IACVmla,EAAMhxa,UAAW,yBAAqB,GAClCgxa,GACTrtW,ICzCEsrB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAM5D81uB,GAA2B,SAAUvnrB,GAErC,SAASunrB,IACL,OAAkB,OAAXvnrB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KA4C/D,OA9CAsqF,GAAUoorB,EAAWvnrB,GAIrBN,IACI3jF,KACDwrwB,EAAUr3wB,UAAW,aAAS,GACjCwvF,IACI3jF,KACDwrwB,EAAUr3wB,UAAW,aAAS,GACjCwvF,IACI3jF,KACDwrwB,EAAUr3wB,UAAW,YAAQ,GAChCwvF,IACI3jF,GAAS,IACVwrwB,EAAUr3wB,UAAW,qBAAiB,GACzCwvF,IACI3jF,OACDwrwB,EAAUr3wB,UAAW,kBAAc,GACtCwvF,IACI3jF,KACDwrwB,EAAUr3wB,UAAW,aAAS,GACjCwvF,IACI3jF,EAAS,OACVwrwB,EAAUr3wB,UAAW,eAAW,GACnCwvF,IACI3jF,EAAS,SACVwrwB,EAAUr3wB,UAAW,iBAAa,GACrCwvF,IACI3jF,EAAS,YACVwrwB,EAAUr3wB,UAAW,oBAAgB,GACxCwvF,IACI3jF,EAAS,UACVwrwB,EAAUr3wB,UAAW,kBAAc,GACtCwvF,IACI3jF,EAAS,cACVwrwB,EAAUr3wB,UAAW,sBAAkB,GAC1CwvF,IACI3jF,EAAS,YACVwrwB,EAAUr3wB,UAAW,oBAAgB,GACxCwvF,IACI3jF,EAAS,aACVwrwB,EAAUr3wB,UAAW,qBAAiB,GACzCwvF,IACI3jF,EAAS,aACVwrwB,EAAUr3wB,UAAW,qBAAiB,GAClCq3wB,GACT1zsB,IC5DEgtuB,GAA8B,WAC9B,SAASA,EAAa1ryB,GAClBN,KAAK+rxB,sBACL/rxB,KAAKM,OAASA,EA4dlB,OA1dA0ryB,EAAa3wyB,UAAU4wyB,qBAAuB,WAC1C,IAAIC,EAAkB/qyB,EAAc,OAASkC,UAAW8oyB,KAGxD,GAFAD,EAAgBlqyB,UAAY,eAAiBoqyB,GAA8B,2FACUC,GAA2B,iBAChF,gBAA5BrsyB,KAAKM,OAAOotM,YAA+B,CAC3C,IAAIvmM,EAASnH,KAAKM,OAAO69wB,WAAWnhJ,WAAWr6nB,cAAc,IAAMk9wB,IACnE14wB,EAAOjC,aAAagnyB,EAAiB/kyB,EAAOiT,SAAS,SAGrDpa,KAAKM,OAAOU,QAAQkE,aAAagnyB,EAAiBlsyB,KAAKM,OAAOU,QAAQoZ,SAAS,IAEnFpa,KAAKssyB,2BACL/myB,GAAanB,IAAI8nyB,EAAgBvpyB,cAAc,gBAA+B,QAAS3C,KAAKusyB,UAAWvsyB,OAE3GgsyB,EAAa3wyB,UAAUmxyB,mBAAqB,WACxCxsyB,KAAKohvB,aAAejgvB,EAAc,OAASkC,UAAWopyB,KACtD,IAAIC,EAAcvryB,EAAc,OAASkC,UAAWspyB,GAA0B,mBAC9E,GAAgC,gBAA5B3syB,KAAKM,OAAOotM,YAA+B,CAC3C,IAAIvmM,EAASnH,KAAKM,OAAO69wB,WAAWnhJ,WAAWr6nB,cAAc,IAAMiqyB,IACnEzlyB,EAAOjC,aAAawnyB,EAAavlyB,EAAOiT,SAAS,IACjDjT,EAAOxF,YAAY3B,KAAKohvB,mBAGxBphvB,KAAKM,OAAOU,QAAQ2B,cAAc,IAAM28wB,IAA2B39wB,YAAY+qyB,GAC/E1syB,KAAKM,OAAOU,QAAQ2B,cAAc,IAAM28wB,IAA2B39wB,YAAY3B,KAAKohvB,cAExF,IAAIyrD,EAAe1ryB,EAAc,OAASkC,UrB6TvB,oBqB5TnBqpyB,EAAY/qyB,YAAYkryB,GACxB7syB,KAAK8syB,YAAc,IAAI1lf,IACnBn0S,SAAUjT,KAAKM,OAAO2S,SACtBC,UAAWlT,KAAKM,OAAO4S,UACvB0Y,QACI23C,WAAYvjE,KAAK+syB,mBACjBzpyB,GAAI,aACJmpB,KAAM,eACNpsB,MAAO,iBAEXkpT,aAAcvpT,KAAKM,OAAO0syB,uBAC1Bz3D,YAAav1uB,KAAKityB,cAAc3xyB,KAAK0E,QAEzCA,KAAK8syB,YAAYz2vB,SAASw2vB,GAC1B7syB,KAAK8syB,YAAYvze,YACjBv5T,KAAKktyB,UAAY,IAAI1rrB,GAAMkrrB,GACvBjprB,WAAY,WACZrpF,QAASp6B,KAAK8syB,YAAY9ryB,QAC1BkS,UAAWlT,KAAKM,OAAO4S,UACvBkxG,eAAiB3sF,KAAM,eAAgBvsB,SAAU,KACjDi5G,eAAiB1sF,KAAM,cAAevsB,SAAU,KAChDgL,gBAAiBlW,KAAKM,OAAOU,QAAQ2B,cAAc,KAAmC,gBAA5B3C,KAAKM,OAAOotM,YAClEk/lB,GAA8BttB,OAEtCt/wB,KAAKM,OAAOslF,GAAGu2rB,GAAsBn8wB,KAAK42wB,cAAe52wB,OAE7DgsyB,EAAa3wyB,UAAU0xyB,iBAAmB,WACtC,IAAIhtyB,EAAQC,KACRmtyB,KAqBJ,OApBAntyB,KAAKotyB,kBAAkBhuyB,QAAQ,SAAUiuyB,EAASp7xB,GAC9C,IAAIq7xB,EAAc,SAAUC,EAAWt7xB,EAAOu7xB,GAC1C,IAAIv8hB,EAAWlxQ,EAAMgsxB,mBAAmB95wB,GACpCw7xB,GACAC,WAAYF,EACZG,aAAcJ,EAAUxe,aAAa99gB,EAAS4gN,YAE9C07U,EAAUltyB,MAAM5D,OAAS,IACzBgxyB,EAASG,kBAGb,IAAK,IADD9uxB,EAAQ,EACH1gB,EAAK,EAAGyE,EAAK0qyB,EAAUltyB,MAAOjC,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACzD,IAAIutc,EAAO9oc,EAAGzE,GACdqvyB,EAASG,cAAcppyB,KAAK8oyB,EAAY3hW,EAAM15b,EAAQ,EAAGu7xB,EAAU,IAAM1uxB,IACzEA,GAAS,EAEb,OAAO2uxB,GAEXN,EAAe3oyB,KAAK8oyB,EAAYD,EAAS,GAAIp7xB,EAAQ,GAAG/E,eAErDigyB,GAEXnB,EAAa3wyB,UAAUixyB,yBAA2B,WAC9C,IAAIvsyB,EAAQC,KAER6tyB,KADW7tyB,KAAKgvxB,kBAAkBhvxB,KAAKM,OAAOkryB,cAAcr+G,YAEvDi/F,WAAWhtxB,QAAQ,SAAU+yJ,EAAOlgJ,GACzC,IAAI67xB,EAAgB/tyB,EAAMgsxB,mBAAmB95wB,GAIzC07xB,EAAexsyB,EAAc,OAC7BkC,UrBSW,kBqBRXrB,UALe8ryB,EAAcvquB,WAAWv8B,OAAO,SAAU+mwB,GACzD,OAAOA,EAAQD,EAAcrW,WAAatloB,IAIlB,GAAG27oB,EAAcj8U,aAE7Cg8U,EAAiBrpyB,KAAKmpyB,GACtB,IAAIK,EAAY7syB,EAAc,OAASkC,UAAW,wBAClDwqyB,EAAiBrpyB,KAAKwpyB,KAE1BH,EAAiBzhpB,MACjB,IACI6hpB,GADsC,gBAA5BjuyB,KAAKM,OAAOotM,YAAiC1tM,KAAKM,OAAO69wB,WAAWnhJ,WAAah9nB,KAAKM,OAAOU,SAChF2B,cAAc,IAAM0pyB,IAC/C4B,EAAcjsyB,UAAY,GAC1B6ryB,EAAiBzuyB,QAAQ,SAAU4B,GAAW,OAAOityB,EAActsyB,YAAYX,KACzC,IAAlChB,KAAKgvxB,kBAAkBvyxB,QACvBkH,GAAU3D,KAAKM,OAAOU,QAAQ2B,cAAc,qBAA2BmxxB,KAG/EkY,EAAa3wyB,UAAUkxyB,UAAY,SAAUjwyB,GACzC,GAAI0D,KAAKM,OAAOU,QAAQ2B,cAAc,IAAMgqyB,IAAyB7oyB,UAAUK,SAAS,gBACpFnE,KAAKktyB,UAAU3rtB,OACfl9E,GAAarE,KAAKohvB,cAAe,gBAEhC,CACD,IAAI5X,EAAYxpuB,KAAK8syB,YAAY9ryB,QAAQQ,iBAAiB,kCAC1D6C,EAAYmluB,EAAW,YACvB7luB,GAAU6luB,EAAUxpuB,KAAKM,OAAOkryB,cAAcr+G,aAAc,YAC5DntrB,KAAKktyB,UAAUjprB,OACftgH,GAAU3D,KAAKohvB,cAAe,cAGtC4qD,EAAa3wyB,UAAU4xyB,cAAgB,SAAU3wyB,GAC7C,IAAKA,EAAMiE,KAAKuD,UAAUK,SAAS,eAAgB,CAC/CnE,KAAKktyB,UAAU3rtB,OACf,IAAIiopB,KAAenouB,MAAMC,KAAKtB,KAAK8syB,YAAY9ryB,QAAQQ,iBAAiB,mCACxExB,KAAKM,OAAOkryB,cAAcr+G,WAAaq8C,EAAUjruB,QAAQjC,EAAMiE,MAC/DP,KAAKM,OAAOyppB,aAAah+iB,OAAO/rG,KAAKM,OAAOotM,aAAa,GACzD,IAAIg9kB,EAAY1qxB,KAAKM,OAAOuouB,UAAU9ppB,YAAY/+E,KAAKM,OAAO+qxB,YAC9DrrxB,KAAKM,OAAOyN,OAAOi9nB,IAAoBugJ,cAAeb,IAE1DpuxB,EAAMA,MAAMkpB,kBAEhBwmxB,EAAa3wyB,UAAUu7wB,cAAgB,SAAU32wB,GAC7C,IAAI4F,EAAQ5F,EAAK3D,MAAM6K,OAAQ,IAAMwlyB,IAArC,CAGA,IAAID,EAAc1syB,KAAKM,OAAOU,QAAQ2B,cAAc,IAAMgqyB,IACtDD,GAAeA,EAAY5oyB,UAAUK,SAAS,kBAC9CnE,KAAKktyB,UAAU3rtB,OACfl9E,GAAarE,KAAKohvB,cAAe,eAGzC4qD,EAAa3wyB,UAAU6yyB,kBAAoB,SAAUC,GACjD,IAAIpuyB,EAAQC,KACZA,KAAKM,OAAOqhB,cAEZ,IAAK,IADDysxB,KACKjyyB,EAAI,EAAGA,EAAI6D,KAAKM,OAAO8qO,UAAU3uO,OAAQN,IAAK,CACnD,IAAIs0U,EAAa,IAAIyD,GAAKl0U,KAAKM,OAAO8qO,UAAUjvO,GAAGonE,WAAYvjE,KAAKM,OAAO8qO,UAAUjvO,GAAGu/D,OACxF0yuB,EAAS5pyB,KAAKisU,EAAW9D,QAAQ8D,EAAWC,kBAEhD9tP,QAAQgyG,IAAIw5mB,GAAU96mB,KAAK,SAAUzyL,GAAK,OAAOd,EAAM4wU,mBAAmB9vU,EAAGstyB,KACxEx5mB,MAAM,SAAU9zL,GAAK,OAAOd,EAAM+poB,mBAAmBjpoB,MAE9DmryB,EAAa3wyB,UAAUs1U,mBAAqB,SAAU9vU,EAAGstyB,GACrD,IAAInuyB,KAAKM,OAAO0mF,YAAhB,CAGA,IAAK,IAAI7qF,EAAI,EAAGs+B,EAAW55B,EAAEpE,OAAQN,EAAIs+B,EAAUt+B,IAC/C6D,KAAKM,OAAO8qO,UAAUjvO,GAAGonE,WAAa1iE,EAAE1E,GAAG4C,OAE/CiB,KAAKM,OAAO0G,eAAgBokO,UAAWprO,KAAKM,OAAO8qO,YAAa,GAChEprO,KAAKM,OAAO87U,eAAe+xd,GACvBA,GACAnuyB,KAAKM,OAAOq+wB,YAAY2qB,8BAGhC0C,EAAa3wyB,UAAUgzyB,sBAAwB,WAC3C,IAAIC,KAGJ,GAFAtuyB,KAAK+rxB,sBACL/rxB,KAAKuuyB,WAAa,KACdvuyB,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAMq4I,UAAU3uO,OAAS,EACvD,IAAK,IAAI2B,EAAK,EAAGyE,EAAK7C,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAMq4I,UAAWhtO,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvF,IAAI6yQ,EAAWpuQ,EAAGzE,GACd0wY,EAAU0/Z,GAAqBxuyB,KAAKM,OAAO8qO,UAAW,OAAQ6lC,GAC9D69H,GAAW,GACXw/Z,EAAkB9pyB,KAAKxE,KAAKM,OAAO8qO,UAAU0jK,SAIhD9uY,KAAKM,OAAO8qO,UAAU3uO,OAAS,IACpC6xyB,EAAoBtuyB,KAAKM,OAAO8qO,WAGpC,IAAK,IADDn5N,EAAQ,EACHhO,EAAK,EAAGwqyB,EAAsBH,EAAmBrqyB,EAAKwqyB,EAAoBhyyB,OAAQwH,IAAM,CAC7F,IACImnO,GACAr/M,OAFAklP,EAAWw9hB,EAAoBxqyB,IAEf8nB,MAChBmU,MAAO+wO,EAAS/wO,MAChBzI,KAAMw5O,EAASx5O,KACfy0vB,cAAej7gB,EAASi7gB,cACxB3otB,WAAY0tM,EAAS1tM,WACrBk0tB,QAASxmhB,EAASwmhB,QAClB5lU,UAAW5gN,EAAS4gN,UACpBo1U,aAAch2hB,EAASg2hB,aACvBR,WAAYx1hB,EAASw1hB,WACrBiI,eAAgBz9hB,EAASy9hB,eACzBC,aAAc19hB,EAAS09hB,aACvBC,cAAe39hB,EAAS29hB,cACxBC,cAAe59hB,EAAS49hB,eAExB59hB,EAASx5O,OAASz3B,KAAKM,OAAO0zxB,cAAc8a,qBAC5C9uyB,KAAKuuyB,WAAat8xB,GAEtBA,IACAjS,KAAK+rxB,mBAAmBvnxB,KAAK4mO,GAE7B3tO,EAAkBuC,KAAKuuyB,cACvBvuyB,KAAKuuyB,WAAavuyB,KAAK+rxB,mBAAmBtvxB,OAAS,GAEnDuD,KAAKM,OAAOkryB,cAAcC,iBAC1BhuyB,EAAkBuC,KAAK+rxB,mBAAmB1qxB,OAAO,GAAG,GAAGkiE,WAAWvjE,KAAKM,OAAOkryB,cAAcr+G,eAC5FntrB,KAAKM,OAAOkryB,cAAcr+G,WAAa,IAG/C6+G,EAAa3wyB,UAAU0zyB,uBAAyB,SAAUC,GACtD,IAAIjvyB,EAAQC,KACRorO,EAAYprO,KAAK+rxB,mBACjBkjB,KACAC,KACAn8sB,EAAQ,SAAUq4I,EAAWn5N,EAAOk9xB,EAAcC,EAAkBC,GACpE,IAAIhC,KACAp8hB,EAAW7lC,EAAU,GACzB,GAAI6lC,EAAU,CACV,IAAIz0Q,OAAO,EACX,GAAI4yyB,GAAoBrvyB,EAAMO,OAAOi+wB,kBAAkBxrrB,MAAM6ksB,UAAW,CACpE,IAAIt0xB,EAAK8ryB,EAAiBD,EAAa1X,SACvCj7xB,EAAO,IAAIgnE,GAAYytM,EAAS1tM,YAAYU,cAAa,IAAIZ,IAAQQ,MAAMotM,EAASg2hB,aAAc,QAAS3jyB,SAG3G9G,EAAOy0Q,EAAS1tM,WAEpB,IAAK,IAAIpnE,EAAI,EAAGA,EAAIK,EAAKC,OAAQN,IAAK,CAClC,IAAIiwxB,KACAijB,GAAaA,EAAU5yyB,OAAS,IAChC2vxB,EAAaA,EAAW7xwB,OAAO80xB,IAEnCjjB,EAAW5nxB,KAAKhI,EAAKL,GAAG80Q,EAASwmhB,UACjC,IAAIh9tB,EAAQs4B,EAAMq4I,EAAU/pO,MAAM,GAAI4Q,EAAQ,EAAGg/P,EAAUz0Q,EAAKL,GAAIiwxB,GAEpE,KAAc,IAAVn6wB,GAAgC,IAAjBwoD,EAAMh+D,QAAgBsD,EAAMgsxB,mBAAmBtvxB,OAAS,GAA3E,CAGA,IAAI6yyB,KACAC,EAAcxvyB,EAAMO,OAAO69wB,WAAWoxB,YACtCC,OAAc,EAClB,IAAKzvyB,EAAMO,OAAOi+wB,kBAAkBxrrB,MAAM86rB,QAAU57wB,EAAQ,IAAMlS,EAAMgsxB,mBAAmBtvxB,OAAQ,CAC/F,IAAIgzyB,EAAWjzyB,EAAKL,GAAG80Q,EAAS29hB,eAC5Bc,EAAelzyB,EAAKL,GAAG80Q,EAASy9hB,gBAChCiB,EAAanzyB,EAAKL,GAAG80Q,EAAS09hB,cAC9Bc,GAAYA,EAAShzyB,OAAS,GAC9B8yyB,EAAcxvyB,EAAMO,OAAO69wB,WAAW4C,eAAe0uB,GACrDD,EAAcC,EACdH,EAAUvvyB,EAAMO,OAAO69wB,WAAWyxB,aAAaL,EAAaE,KAG5DD,EAAczvyB,EAAMO,OAAOi+wB,kBAAkBkxB,SAC7CH,EAAUN,GAEd,IAAIa,EAAY9vyB,EAAM+vyB,oBAAoBR,EAASI,EAAcC,EAAYvjB,GAC7E8iB,EAAkBA,EAAgB30xB,OAAOs1xB,GAE7C,IAAIE,EAAcvzyB,EAAKL,GAAG80Q,EAAS49hB,eAC/BmB,GACAtpyB,KAAM,iBAAkBrD,WAAY,oBACpC4syB,mBAAoBh+xB,EAAOm6wB,WAAYA,EACvCn7gB,SAAUA,EAAU89gB,aAAcvyxB,EAAKL,GACvCu5R,QAAS31R,EAAMO,OAAOi+wB,kBAAkBxrrB,MAAM86rB,OAAS,EAAIyhB,EAAQ7yyB,OACnE8yyB,YAAaA,EAAaE,SAAUD,EAAav8xB,SAAU88xB,EAC3D1vyB,MAAOo6D,GAEX4yuB,EAAQ7oyB,KAAKwryB,IAMjB,OAJKf,EAAah9xB,KACdg9xB,EAAah9xB,OAEjBg9xB,EAAah9xB,GAAOzN,KAAK6oyB,GAClBA,EAEX,UAGJ,OADArtyB,KAAKotyB,kBAAoBr6sB,EAAMq4I,EAAW,GACnCprO,KAAKkwyB,qBAAqBjB,EAAcC,EAAiBF,IAEpEhD,EAAa3wyB,UAAUy0yB,oBAAsB,SAAUP,EAAa33tB,EAAWC,EAASu0sB,GAEpF,IAAK,IADDyjB,EAAYnxyB,KAAW6wyB,EAAa,MAAM,GACrCnxyB,EAAK,EAAG+xyB,EAAcN,EAAWzxyB,EAAK+xyB,EAAY1zyB,OAAQ2B,IAAM,CACrE,IAAIgyyB,EAAWD,EAAY/xyB,GACvBw5E,IACAw4tB,EAASx4tB,UAAY53E,KAAKM,OAAO4qM,UAAUjgG,UAAUrzB,GAAalW,SAAU,QAE5EmW,IACAu4tB,EAASv4tB,QAAU73E,KAAKM,OAAO4qM,UAAUjgG,UAAUpzB,GAAWnW,SAAU,QAExE0qtB,IACAgkB,EAAShkB,WAAaA,GAG9B,OAAOyjB,GAEX7D,EAAa3wyB,UAAU60yB,qBAAuB,SAAUjB,EAAcC,EAAiBmB,GAEnF,IAAK,IADDC,KACKn0yB,EAAI8yyB,EAAaxyyB,OAAS,EAAGN,GAAK,EAAGA,IAE1C,IAAK,IADD4xB,EAAO,EACF3vB,EAAK,EAAGyE,EAAKosyB,EAAa9yyB,GAAIiC,EAAKyE,EAAGpG,OAAQ2B,IAEnD,IAAK,IAAI6F,EAAK,EAAGssyB,EADQ1tyB,EAAGzE,GACgC6F,EAAKssyB,EAAqB9zyB,OAAQwH,IAAM,CAChG,IAAIusyB,EAAoBD,EAAqBtsyB,GAC7C,GAAIgryB,EAAa9yyB,EAAI,GAAI,CAGrB,IAAK,IADDu5R,EAAU,EACLjrR,EAAK,EAAGgmyB,EAFKxB,EAAa9yyB,EAAI,GAAG4xB,GAEYtjB,EAAKgmyB,EAAkBh0yB,OAAQgO,IAAM,CACvF,IAAIimyB,EAAiBD,EAAkBhmyB,KAClCzK,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAM6ksB,WAAc53xB,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAM6ksB,WACvF8Y,EAAe3hB,aAAa2hB,EAAez/hB,SAASg2hB,gBAChDuJ,EAAkBzhB,aAAayhB,EAAkBv/hB,SAASwmhB,YAC9D/hgB,GAAWg7gB,EAAeh7gB,SAGlC86gB,EAAkB96gB,QAAUA,EAEhC86gB,EAAkBrjH,WAAap/pB,EAC/BA,IACAuixB,EAAaE,EAAkBP,oBAAsBK,EAAaE,EAAkBP,wBACpFK,EAAaE,EAAkBP,oBAAoBzryB,KAAKgsyB,GAKpE,GADAxwyB,KAAKgvxB,kBAAoBshB,EAAajvyB,OAAO,GAAG,IAC3CrB,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAM86rB,OAAQ,CAE7C,IAAK,IADD57wB,EAAQ,EACHs/T,EAAK,EAAGC,EAAKxxU,KAAKgvxB,kBAAmBz9c,EAAKC,EAAG/0U,OAAQ80U,IAErD,CAAA,IADDo/d,EAAoBn/d,EAAGD,GAC3B,IAASp1U,EAAI,EAAGA,EAAIw0yB,EAAkBj7gB,QAASv5R,IAC3C+yyB,EAAgBj9xB,GAAOk7qB,WAAawjH,EAAkBxjH,WACtDl7qB,IAIR,OADAq+xB,EAAa9ryB,KAAK0qyB,GACXoB,EAKX,IAAK,IAHDM,KACAxxtB,EAAS1gF,KAAW4xyB,EAAc,MAAM,GACxCO,EAAc,EACTp/d,EAAK,EAAGC,EAAKtyP,EAAO,GAAIqyP,EAAKC,EAAGj1U,OAAQg1U,IAAM,CAEnDo/d,GADiBn/d,EAAGD,GACM/7C,QAG9B,IAAK,IADDo7gB,KACK/qX,EAAK,EAAGgrX,EAAgBV,EAAatqX,EAAKgrX,EAAct0yB,OAAQspb,IAAM,CAC3E,IAAItqN,EAAas1kB,EAAchrX,GAC/BtqN,EAAWi6D,QAAUm7gB,EACrBC,EAAYtsyB,KAAKi3N,GAEjB,IAAK,IADDu1kB,EAAWtyyB,KAAW0gF,EAAQ,MAAM,GAC/Bj5D,EAAI,EAAGgmT,EAAW6ke,EAASv0yB,OAAQ0pB,EAAIgmT,EAAUhmT,IAAK,CAC3D,GAAIA,IAAM6qxB,EAASv0yB,OAAS,EACxB,IAAK,IAAIupb,EAAK,EAAGE,EAAK8qX,EAAS7qxB,GAAI6/Z,EAAKE,EAAGzpb,OAAQupb,IAAM,CACrD,IAAIirX,EAAQ/qX,EAAGF,GACfirX,EAAMt6tB,KAAO8kJ,EAAW9kJ,KACxBs6tB,EAAMxB,SAAWh0kB,EAAWg0kB,SAC5BwB,EAAMr5tB,UAAY6jJ,EAAW7jJ,UAC7Bq5tB,EAAMp5tB,QAAU4jJ,EAAW5jJ,QAG9B+4tB,EAAiBzqxB,KAClByqxB,EAAiBzqxB,OAErByqxB,EAAiBzqxB,GAAKyqxB,EAAiBzqxB,GAAG5L,OAAOy2xB,EAAS7qxB,KAIlE,OADAyqxB,EAAiB11yB,QAAQ41yB,GAClBF,GAEX5E,EAAa3wyB,UAAUo9xB,kBAAoB,SAAUM,EAAUmY,GAC3D,IAAInxyB,EAAQC,KACRmxyB,EAAY,SAAUl/xB,EAAO8Z,EAAO/uB,GAChC+C,EAAMgsxB,mBAAmB95wB,GAAOi6wB,iBAAmBglB,GAAUA,GAAUnxyB,EAAMO,OAAOi+wB,kBAAkBxrrB,MAAMk5rB,gBAC5G8M,EAAShtwB,IAAU/uB,GAGnB+7xB,EAAShtwB,GAAS/uB,GAGtBmwrB,EAAantrB,KAAKM,OAAOkryB,cAAcC,gBAAkBzryB,KAAKM,OAAOkryB,cAAcr+G,WACnFntrB,KAAKM,OAAO+9wB,gBAAgBlxF,WAChC,GAAIntrB,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAMq4I,UAAU3uO,OAAS,IAAMgB,EAAkB0vrB,GAE/E,IAAK,IADDi/F,EAAapsxB,KAAKgvxB,kBAAkB7hG,GAAYi/F,WAC3Cn6wB,EAAQ,EAAGA,EAAQjS,KAAK+rxB,mBAAmBtvxB,OAAQwV,IACxDk/xB,EAAUl/xB,EAAOjS,KAAK+rxB,mBAAmB95wB,GAAO8Z,MAAOqgwB,EAAWn6wB,SAGrE,GAAIjS,KAAKM,OAAO8qO,UAAU3uO,OAAS,EACpC,IAASwV,EAAQ,EAAGA,EAAQjS,KAAK+rxB,mBAAmBtvxB,OAAQwV,IAAS,CACjE,IAAIzV,EAAOwD,KAAK+rxB,mBAAmB95wB,GAAOsxD,WAAW,GACrD4tuB,EAAUl/xB,EAAOjS,KAAK+rxB,mBAAmB95wB,GAAO8Z,MAAOvvB,EAAKwD,KAAK+rxB,mBAAmB95wB,GAAOwlxB,YAIvGuU,EAAa3wyB,UAAUg1xB,iBAAmB,SAAU0I,EAAU3M,GAC1D,IAAIn7gB,EAAWjxQ,KAAK+rxB,mBAAmB/rxB,KAAKuuyB,YAC5C,KAAI9wyB,EAAkB2uxB,IAAepsxB,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAMk5rB,gBAAkBh7gB,EAASi7gB,eAApG,CAGA,IAAI5oxB,EAAK7F,EAAkB2uxB,GAAc2M,EAAS9nhB,EAASllP,OAASqgwB,EAAWpsxB,KAAKuuyB,YAChF/xyB,EAAOwD,KAAKoxyB,WAAWngiB,EAAS1tM,WAAY0tM,EAASwmhB,QAAS,QAASn0xB,GAC3E,OAAI9G,EAAKC,OAAS,EACPD,EAAK,GAAGy0Q,EAASw1hB,iBAD5B,IAKJuF,EAAa3wyB,UAAUg2yB,YAAc,SAAUtY,GAC3C,IAAI9nhB,EAAWjxQ,KAAK+rxB,mBAAmB1qxB,OAAO,GAAG,GACjD,IAAIrB,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAMk5rB,iBAAkBh7gB,EAASi7gB,cAAnE,CAGA,IAAI1vxB,EAAOwD,KAAKoxyB,WAAWngiB,EAAS1tM,WAAY0tM,EAASwmhB,QAAS,QAASsB,EAAS9nhB,EAASllP,QAC7F,OAAIvvB,EAAKC,OAAS,EACPD,EAAK,GAAGy0Q,EAAS49hB,oBAD5B,IAKJ7C,EAAa3wyB,UAAU+1yB,WAAa,SAAU7tuB,EAAYx3C,EAAOg4C,EAAU/mE,GACvE,OAAO,IAAIwmE,GAAYD,GAAYU,cAAa,IAAIZ,IAAQQ,MAAM93C,EAAOg4C,EAAU/mE,KAEvFgvyB,EAAa3wyB,UAAUyuoB,mBAAqB,SAAUjpoB,GAC9Cb,KAAKM,OAAO0mF,cAGhBhnF,KAAKM,OAAOkmB,QAAQijnB,IAAwBnljB,MAAOzjF,IACnDb,KAAKM,OAAOoiB,gBAEhBspxB,EAAa3wyB,UAAUi2yB,YAAc,SAAUlmkB,EAAW3zM,EAAMxlB,GAC5D,IAAK,IAAI9V,EAAI,EAAGukD,EAAW1gD,KAAKM,OAAO8qO,UAAU3uO,OAAQN,EAAIukD,EAAUvkD,IAAK,CACxE,IAAI80Q,EAAWjxQ,KAAKM,OAAO8qO,UAAUjvO,GACrC,GAAI80Q,EAASx5O,OAASA,EAAM,CACxBw5O,EAAS1tM,WAAWl7C,OAAOpW,EAAO,EAAGm5N,GACrC,OAGRprO,KAAKkuyB,mBAAkB,IAE3BlC,EAAa3wyB,UAAUk2yB,eAAiB,SAAU7D,EAAYj2wB,GAc1D,IAAK,IAbD13B,EAAQC,KACRf,EAAU,SAAU9C,EAAGq1yB,GACvB,IAAIvgiB,EAAW1jK,EAAOjtG,OAAO8qO,UAAUjvO,GACvC,GAAI80Q,EAASx5O,OAASA,EAMlB,OALAw5O,EAAS1tM,WAAWnkE,QAAQ,SAAU5C,EAAMyV,GACpCzV,EAAKy0Q,EAASwmhB,WAAaiW,GAC3B3tyB,EAAMO,OAAO8qO,UAAUjvO,GAAGonE,WAAWl7C,OAAOpW,EAAO,KAGpD,SAGXs7F,EAASvtG,KACJ7D,EAAI,EAAGq1yB,EAAWxxyB,KAAKM,OAAO8qO,UAAU3uO,OAAQN,EAAIq1yB,EAAUr1yB,IAAK,CAExE,GAAgB,UADF8C,EAAQ9C,GAElB,MAER6D,KAAKkuyB,mBAAkB,IAE3BlC,EAAa3wyB,UAAUiX,QAAU,WAC7BtS,KAAKM,OAAO0lF,IAAIm2rB,GAAsBn8wB,KAAK42wB,eACvC52wB,KAAK8syB,cACL9syB,KAAK8syB,YAAYx6xB,UACjBtS,KAAK8syB,YAAc,MAEnB9syB,KAAKktyB,YACLltyB,KAAKktyB,UAAU56xB,UACftS,KAAKktyB,UAAY,KACjB3oyB,EAAOvE,KAAKM,OAAOU,QAAQ2B,cAAc,IAAMgqyB,KAC/CpoyB,EAAOvE,KAAKM,OAAOU,QAAQ2B,cAAc,IAAM8pyB,MAEnD,IAAIgF,EAAgBzxyB,KAAKM,OAAOU,QAAQ2B,cAAc,IAAMwpyB,IACxDsF,GACAltyB,EAAOktyB,IAGRzF,KCveP1htB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAwC5D80wB,GAA0B,SAAUvmtB,GAMpC,SAASumtB,EAAS1+xB,EAAShS,GACvB,OAAOmqF,EAAO7pF,KAAKtB,KAAMgT,EAAShS,IAAYhB,KAipClD,OAvpCAsqF,GAAUontB,EAAUvmtB,GAYpBumtB,EAASr2yB,UAAU0wG,OAAS,WACxBpoG,GAAU3D,KAAKgB,StBhEL,csBiENhB,KAAKkT,UACLvP,GAAU3D,KAAKgB,StBhEV,SsBmELqD,GAAarE,KAAKgB,StBnEb,SsBqELhB,KAAKs/tB,WACL37tB,GAAU3D,KAAKgB,StBpED,YsBuEdqD,GAAarE,KAAKgB,StBvEJ,YsByEdhB,KAAKiT,UACLtP,GAAU3D,KAAKgB,SAAUhB,KAAKiT,UAElCjT,KAAKyrM,eACLzrM,KAAK2xyB,uBAAyB3xyB,KAAK4xyB,eAAe5xyB,KAAKg0xB,cAAc+F,iBACrE/5xB,KAAK6xyB,iBAAmB7xyB,KAAK4xyB,eAAe5xyB,KAAKmjyB,gBACjD3oxB,IAAgBrT,OAAQnH,KAAKgB,UAC7BhB,KAAK2qS,aAAe,IAAIu0W,GAAOl/oB,MAC/BA,KAAK2qS,aAAahsK,WAClB3+H,KAAK2qS,aAAaujB,YAClBluT,KAAK+ppB,aAAe,IAAIjrO,GAAO9+a,MAC/BA,KAAK6ouB,UAAY,IAAIpE,GAAUzkuB,MAC/BA,KAAKq+U,uBACLr+U,KAAK8xyB,uBAETJ,EAASr2yB,UAAUy2yB,oBAAsB,SAAU3D,QAC5B,IAAfA,IAAyBA,GAAa,GACtCnuyB,KAAKorO,UAAU3uO,OAAS,GACxBuD,KAAKgsxB,aAAe,IAAIggB,GAAahsyB,MACrCA,KAAKgsxB,aAAakiB,kBAAkBC,KAGpCnuyB,KAAKgsxB,aAAe,KACpBhsxB,KAAKo8U,eAAe+xd,KAG5BuD,EAASr2yB,UAAU+gV,eAAiB,SAAU21d,GACtCA,EACA/xyB,KAAKgyyB,eAAehyyB,KAAK0tM,cAGzB1tM,KAAKiyyB,gBACLjyyB,KAAKorpB,aAAe,IAAI8wH,GAAel8wB,OAE3CA,KAAKgB,QAAQW,YAAYR,EAAc,OAASkC,UAAWi8wB,OACvD9zwB,GAAQkb,UAAYlb,GAAQomB,WAC5B5xB,KAAKkyyB,oBAAsB,IAAI7yB,GAAcr/wB,OAEjDA,KAAKgyyB,eAAehyyB,KAAK0tM,aACzB1tM,KAAKmyyB,mBACLnyyB,KAAKukB,eAETmtxB,EAASr2yB,UAAUowM,aAAe,WAE9BzrM,KAAKgH,eAAgBgnM,aAAc,IAAIhuL,KAAK,GAAKhgB,KAAKguM,gBAAiB,IAE3E0jmB,EAASr2yB,UAAU+2yB,aAAe,SAAU50B,GACxC,IAAK,IAAI3/vB,EAAO,EAAGA,EAAO7d,KAAK0mxB,gBAAgBjqxB,OAAQohB,IAAQ,CAE3D,GADiB7d,KAAK0mxB,gBAAgB7owB,GAAMk4E,SACzBynrB,EACf,OAAO3/vB,EAGf,OAAQ,GAEZ6zxB,EAASr2yB,UAAUg3yB,eAAiB,SAAUC,QACrB,IAAjBA,IAA2BA,GAAe,GAC9CtyyB,KAAKuyyB,eACLvyyB,KAAK0mxB,mBACL,IAAIlJ,EACAg1B,EACA1zxB,EAAQ,EACZ9e,KAAKo9wB,WAAa,EAClB,IAAK,IAAIh/wB,EAAK,EAAGyE,EAAK7C,KAAKiyD,MAAO7zD,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACpD,IAAIk9L,EAAOz4L,EAAGzE,GACVq0yB,EAA6B,iBAATn3mB,EACJ,iBAATA,GACPkilB,EAAWlilB,EACPt7L,KAAK0tM,cAAgB8vkB,IACrBg1B,EAAeh1B,EACfx9wB,KAAKo9wB,UAAYt+vB,KAIrB0+vB,EAAWlilB,EAAKvlG,OACZulG,EAAKxiI,aACL05uB,EAAeh1B,EACfx9wB,KAAKo9wB,UAAYt+vB,IAGzB,IAAI/hB,EAAM2B,GAASq3F,OAAQynrB,GAAYi1B,EAAYn3mB,MAC/Co3mB,EAAgBl1B,EAASr+vB,OAAO,GAAGvJ,cAAgB4nwB,EAASn8wB,MAAM,GACtErB,KAAK0mxB,gBAAgBlixB,KAAKzH,GACtBU,EAAkBuC,KAAKuyyB,YAAYG,IACnC1yyB,KAAKuyyB,YAAYG,IAAkB31yB,GAGnCiD,KAAKuyyB,YAAYG,GAAeluyB,KAAKzH,GAEzC+hB,IAKJ,IAHKwzxB,GAAgBE,GACjBxyyB,KAAKgH,eAAgB0mM,YAAa8kmB,IAAgB,IAE9B,IAApBxyyB,KAAKo9wB,UAAkB,CACvB,IAAI/4iB,EAAerkO,KAAKoyyB,aAAapyyB,KAAK0tM,aAC1C1tM,KAAKo9wB,WAA+B,IAAlB/4iB,EAAuB,EAAIA,IAGrDqtkB,EAASr2yB,UAAUs3yB,qBAAuB,SAAUn1B,GAChD,IAAIgB,GACA/+uB,OAAQz/B,KAAKw+wB,UAAU/+uB,OACvBt9B,SAAUnC,KAAKw+wB,UAAUr8wB,SACzBs8wB,UAAWz+wB,KAAKw+wB,UAAUC,UAC1Bm0B,kBAAmB5yyB,KAAKw+wB,UAAUo0B,kBAClCC,kBAAmB7yyB,KAAKw+wB,UAAUq0B,mBAElC9/sB,GACA86rB,OAAQ7txB,KAAK+yF,MAAM86rB,OACnB+J,UAAW53xB,KAAK+yF,MAAM6ksB,UACtB3L,eAAgBjsxB,KAAK+yF,MAAMk5rB,eAC3B7gjB,UAAWprO,KAAK+yF,MAAMq4I,UACtBsgkB,kBAAmB1ryB,KAAK+yF,MAAM24sB,mBAqBlC,OAAOhtyB,GAlBHunG,WAAYjmG,KAAKimG,WACjBpuB,QAAS73E,KAAK63E,QACd/e,YAAY,EACZi9B,OAAQ,KACR1f,SAAUr2E,KAAKq2E,SACfuB,UAAW53E,KAAK43E,UAChBk7tB,uBAAuB,EACvBC,aAAc/yyB,KAAK+yyB,aACnBvd,cAAex1xB,KAAKg0xB,cAAc/kxB,SAClC+jyB,mBAAoBhzyB,KAAKgzyB,mBACzBhG,uBAAwBhtyB,KAAKgtyB,uBAC7ByC,SAAUzvyB,KAAKyvyB,SACf3hB,YAAa9txB,KAAK8txB,YAClBvrrB,YAAa,KACbpgG,SAAU,EACVq8wB,UAAWA,EACXzrrB,MAAOA,GAEoB/yF,KAAK0mxB,gBAAgB1mxB,KAAKo9wB,gBAAYjixB,GAAW,IAEpFu2yB,EAASr2yB,UAAUgjV,qBAAuB,WACtCr+U,KAAKkmxB,aACD5ixB,GAAItD,KAAKg0xB,cAAcpowB,OAAOtoB,GAC9Bs6mB,QAAS59mB,KAAKg0xB,cAAcpowB,OAAOgylB,QAAQnmlB,KAC3CvX,UAAWlgB,KAAKg0xB,cAAcpowB,OAAO1L,UAAUuX,KAC/C62L,QAAStuN,KAAKg0xB,cAAcpowB,OAAO0iM,QAAQ72L,KAC3C+zvB,cAAexrxB,KAAKg0xB,cAAcpowB,OAAO4/vB,cAAc/zvB,KACvDg0vB,YAAazrxB,KAAKg0xB,cAAcpowB,OAAO6/vB,YAAYh0vB,KACnD/J,SAAU1tB,KAAKg0xB,cAAcpowB,OAAO8B,SAAS+J,KAC7Cya,YAAalyC,KAAKg0xB,cAAcpowB,OAAOsmB,YAAYza,KACnDinvB,SAAU1+wB,KAAKg0xB,cAAcpowB,OAAO8yvB,SAASjnvB,KAC7CuzvB,aAAchrxB,KAAKg0xB,cAAcpowB,OAAOo/vB,aAAavzvB,KACrDszvB,eAAgB/qxB,KAAKg0xB,cAAcpowB,OAAOm/vB,eAAetzvB,KACzDq4vB,oBAAqB9vxB,KAAKg0xB,cAAcpowB,OAAOkkwB,oBAAoBr4vB,MAEvEz3B,KAAK0nyB,cACD9pL,QAAS59mB,KAAKg0xB,cAAcpowB,OAAOgylB,QAAQ19kB,OAASlgC,KAAK04E,UAAU3E,YAAY,SAC/E7zD,UAAWlgB,KAAKg0xB,cAAcpowB,OAAO1L,UAAUggB,OAASlgC,KAAK04E,UAAU3E,YAAY,SACnFu6I,QAAStuN,KAAKg0xB,cAAcpowB,OAAO0iM,QAAQpuL,OAASlgC,KAAK04E,UAAU3E,YAAY,OAC/E2qsB,SAAU1+wB,KAAKg0xB,cAAcpowB,OAAO8yvB,SAASx+uB,OAASlgC,KAAK04E,UAAU3E,YAAY,UACjFy3sB,cAAexrxB,KAAKg0xB,cAAcpowB,OAAO4/vB,cAActrvB,OAASlgC,KAAK04E,UAAU3E,YAAY,iBAC3F03sB,YAAazrxB,KAAKg0xB,cAAcpowB,OAAO6/vB,YAAYvrvB,OAASlgC,KAAK04E,UAAU3E,YAAY,eACvFrmD,SAAU1tB,KAAKg0xB,cAAcpowB,OAAO8B,SAASwS,OAASlgC,KAAK04E,UAAU3E,YAAY,YACjF7hC,YAAalyC,KAAKg0xB,cAAcpowB,OAAOsmB,YAAYhS,OAASlgC,KAAK04E,UAAU3E,YAAY,eACvFg3sB,eAAgB/qxB,KAAKg0xB,cAAcpowB,OAAOm/vB,eAAe7qvB,OAASlgC,KAAK04E,UAAU3E,YAAY,WAEjG/zE,KAAKywU,WAAa,IAAIyD,GAAKl0U,KAAKg0xB,cAAczwtB,WAAYvjE,KAAKg0xB,cAAct4tB,OAC7E17D,KAAKizyB,WAAa,IAAI1iB,GAAKvwxB,OAE/B0xyB,EAASr2yB,UAAU22yB,eAAiB,SAAUx0B,GAC1Cx9wB,KAAK2hB,cACL3hB,KAAKu+wB,kBAAoBv+wB,KAAK2yyB,qBAAqBn1B,GAC/Cx9wB,KAAKgsxB,cACLhsxB,KAAKgsxB,aAAaqiB,wBAEtBruyB,KAAKkzyB,sBACLlzyB,KAAK+ppB,aAAah+iB,OAAOyxqB,IAE7Bk0B,EAASr2yB,UAAU63yB,oBAAsB,WACrClzyB,KAAKmzyB,eAAiBnzyB,KAAK4xyB,eAAe5xyB,KAAKu+wB,kBAAkBw0B,cACjE/yyB,KAAKozyB,qBAAuBpzyB,KAAK4xyB,eAAe5xyB,KAAKu+wB,kBAAkBy0B,oBACvEhzyB,KAAKqzyB,oBAAsBrzyB,KAAK4xyB,eAAe5xyB,KAAKu+wB,kBAAkBC,UAAUo0B,mBAChF5yyB,KAAKszyB,oBAAsBtzyB,KAAK4xyB,eAAe5xyB,KAAKu+wB,kBAAkBC,UAAUq0B,mBAChF7yyB,KAAKuzyB,sBAAwBvzyB,KAAK4xyB,eAAe5xyB,KAAKu+wB,kBAAkBiX,eACxEx1xB,KAAKwzyB,yBAA2BxzyB,KAAK4xyB,eAAe5xyB,KAAKu+wB,kBAAkByuB,yBAE/E0E,EAASr2yB,UAAU82yB,iBAAmB,WAC9BnyyB,KAAKg0xB,cAAcn/c,gBACnB70U,KAAK22xB,aAAe,IAAIkD,GAAa75xB,OAEzCA,KAAK2+wB,YAAc,IAAIgkB,GAAY3iyB,MACnCA,KAAKsoxB,WAAa,IAAI4J,GAAYlyxB,OAEtC0xyB,EAASr2yB,UAAUo4yB,YAAc,SAAU/syB,GACvC,IACI+xE,EADA+zH,KAGA/zH,EADgB,OAAhBz4E,KAAKgO,QAAmC,UAAhBhO,KAAKgO,OAClBnR,EAAS,oBAAsB6J,EAAMqI,MAGrClS,EAAS,QAAemD,KAAKgO,OAAS,0CAA4CtH,EAAM2H,IAEvG,IAAK,IAAIjQ,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKm7E,GAAUr6E,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC9D,IAAIrB,EAAM8F,EAAGzE,GACbouM,EAAchoM,KAAK3H,EAASE,EAAK07E,IAErC,OAAO+zH,GAEXklmB,EAASr2yB,UAAUq4yB,kBAAoB,WACf,OAAhB1zyB,KAAKgO,QAAmC,UAAhBhO,KAAKgO,OAC7BhO,KAAK+lN,WAAclpN,EAAS,oBAAqBkS,MAGjD/O,KAAK+lN,WAAclpN,EAAS,QAAemD,KAAKgO,OAAS,+CAAgDK,KAGjHqjyB,EAASr2yB,UAAUy6xB,cAAgB,SAAUn/sB,GACzC,OAAO32E,KAAKkrM,UAAUlgG,WAAWr0B,GAAQ36C,OAAQh8B,KAAK+lN,WAAYr/M,KAAM,UAE5EgryB,EAASr2yB,UAAU2ixB,WAAa,SAAU1ilB,EAAMh/L,EAAO2qF,EAAch1E,GAIjE,GAHIxU,EAAkBwU,KAClBA,EAAQjS,KAAKoyyB,aAAa92mB,OAEzBr0G,GAAgBh1E,IAAUjS,KAAKo9wB,WAAanrwB,EAAQ,GAAzD,CAGAjS,KAAKo9wB,UAAYnrwB,EACjB,IAAIhS,GAASmsL,YAAa,eAAgBvzJ,QAAQ,EAAOv8B,MAAOA,GAEhE,GADA0D,KAAKwmB,QAAQmpmB,GAAoB1vnB,IAC7BA,EAAK44B,OAAT,CAGA,IAAImovB,GAAY7qtB,OAAQ,OAAQt9B,QAAQ,EAAO86wB,aAAc3zyB,KAAK0tM,YAAaA,YAAapS,GAC5Ft7L,KAAKwmB,QAAQy6vB,GAAmBD,GAC5BA,EAAQnovB,SAGZ74B,KAAKgH,eAAgB0mM,YAAapS,IAAQ,GACtCt7L,KAAKorpB,eACLprpB,KAAKorpB,aAAasxH,mBAClB18wB,KAAKorpB,aAAa6xH,mBAEtBj9wB,KAAKgyyB,eAAehyyB,KAAK0tM,aACzB1tM,KAAK4zyB,gBACL3zyB,GAASmsL,YAAa,eAAgBvzJ,QAAQ,EAAOv8B,MAAOA,GAC5D0D,KAAKwmB,QAAQ+rmB,GAAuBtynB,OAExCyxyB,EAASr2yB,UAAUwixB,WAAa,SAAU7vkB,EAAc1xM,GACpD,IAAI2D,GAASmsL,YAAa,eAAgBvzJ,QAAQ,EAAOv8B,MAAOA,GAEhE,GADA0D,KAAKwmB,QAAQmpmB,GAAoB1vnB,IAC7BA,EAAK44B,OAAT,CAGA,IAAImovB,GACA7qtB,OAAQ,OAAQt9B,QAAQ,EAAOg7K,aAAc7zM,KAAKguM,aAAczwH,YAAaywH,GAEjFhuM,KAAKwmB,QAAQy6vB,GAAmBD,GAC5BA,EAAQnovB,SAGZ74B,KAAKgH,eAAgBgnM,aAAcA,IAAgB,GAC/ChuM,KAAKorpB,cACLprpB,KAAKorpB,aAAa2xH,gBAAgB/ukB,GAEtChuM,KAAKgyyB,eAAehyyB,KAAK0tM,aACzB1tM,KAAK4zyB,gBACL3zyB,GAASmsL,YAAa,eAAgBvzJ,QAAQ,EAAOv8B,MAAOA,GAC5D0D,KAAKwmB,QAAQ+rmB,GAAuBtynB,MAExCyxyB,EAASr2yB,UAAU4ixB,eAAiB,SAAUtnsB,GAC1C,OAAOA,EAAKlS,SAAS,EAAG,EAAG,EAAG,KAAO,IAAIzkD,KAAK,GAAKhgB,KAAKguM,cAAcvpI,SAAS,EAAG,EAAG,EAAG,IAE5FituB,EAASr2yB,UAAUu4yB,cAAgB,WAC/B,IAAIt7wB,IAAYptB,SAAU,IAAKusB,KAAM,SAAU40D,eAAgB,WAAY9zD,QAAQv4B,KAAKm+wB,WAAWn9wB,UAOvG0wyB,EAASr2yB,UAAUw1F,gBAAkB,WACjC,IAAIgB,KACJ7xF,KAAKqyyB,gBAAe,GACpB,IAAK,IAAIj0yB,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAK0C,KAAKuyyB,aAAcn0yB,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACvE,IAAIk9L,EAAOz4L,EAAGzE,GACdyzF,EAAQrtF,MACJ6sF,OAAQiqG,EACRr7L,MAAOD,QAGf,OAAO6xF,GAMX6/sB,EAASr2yB,UAAUoX,UAAY,WAC3BzS,KAAKs/tB,WAAa9ztB,GAAQkb,SAC1B1mB,KAAKkrM,UAAY,IAAIxgG,GAAqB1qG,KAAKgO,QAC/ChO,KAAKwryB,eAAkBv8oB,QAAQ,EAAOzwB,WAAW,EAAMhyH,KAAM,EAAGE,IAAK,EAAG++xB,iBAAiB,EAAOt+G,WAAY,GAC5GntrB,KAAKq+wB,iBAAoBn+vB,UAAW,IAAIF,KAAQsuM,QAAS,IAAItuM,KAAQ0+vB,UAAU,GAC/E1+wB,KAAKooxB,iBAAoB9rxB,WAAOnB,EAAW6F,aAAS7F,GACpD6E,KAAK29a,eACDlmW,IAAK,MACL8E,KAAM,OACNs3tB,SAAU,YACV73tB,MAAO,QACP83tB,OAAQ,SACRC,WAAY,cACZC,eAAgB,mBAChBC,YAAa,eACb5mmB,MAAO,QACP6mmB,SAAU,YACVC,eAAgB,6CAChBC,OAAQ,UACR72yB,MAAO,QACPshB,IAAK,MACLi+M,KAAM,OACN76N,MAAO,QACP42B,OAAQ,SACRw7wB,QAAS,aACTz/rB,OAAQ,SACRw8qB,YAAa,eACbkjB,oBAAqB,yBACrBhivB,cAAe,iBACfiivB,aAAc,gBACdptL,KAAM,OACNqtL,WAAY,cACZC,UAAW,aACXhhyB,YAAa,SACbmqmB,QAAS,UACT82L,SAAU,YACVC,YAAa,eACblntB,KAAM,OACNmntB,YAAa,wDACbC,wBAAyB,0DACzBv2O,cAAe,8CACfw2O,sBAAuB,uDACvBp4W,SAAU,YACVx8Z,MAAO,QACPxS,SAAU,WACVwkB,YAAa,cACbsyD,SAAU,WACVgnrB,cAAe,iBACfC,YAAa,eACbhkpB,OAAQ,SACR+upB,WAAY,OACZn0oB,aAAc,SACd+0oB,aAAc,SACd2d,WAAY,aACZC,aAAc,uCACdC,kBAAmB,wHAEnBC,YAAa,kKAEbC,yBAA0B,2HAE1BC,aAAc,kEACdC,eAAgB,kBAChBC,QAAS,UACTrqK,MAAO,QACPsqK,cAAe,sDACfC,iBAAkB,qCAClBn1E,GAAI,KACJ0wD,WAAY,aACZnywB,OAAQ,SACR2rH,SAAU,WACVjiG,KAAM,QAEVtoC,KAAK04E,UAAY,IAAI8+B,GAAKx3G,KAAKu/B,gBAAiBv/B,KAAK29a,cAAe39a,KAAKgO,QACzEhO,KAAK0zyB,oBACL1zyB,KAAKqrxB,cACLrrxB,KAAKgmxB,mBACLhmxB,KAAK0ia,cAAgB,KACrB1ia,KAAKwtW,oBACLxtW,KAAKqyyB,kBAMTX,EAASr2yB,UAAUkpB,WAAa,WAC5B,IAAIumR,EAAS,wBAAyBjvS,OAAS,oBAAsB,SACrE0J,GAAanB,IAAIvI,OAAQivS,EAAQ9qS,KAAKy1yB,iBAAkBz1yB,MACxDuF,GAAanB,IAAI5D,SAAUgL,GAAQ0+E,gBAAiBlqF,KAAKw3d,gBAAiBx3d,MACtEA,KAAK01yB,2BACL11yB,KAAK0uxB,0BAA4B,IAAI1wD,GAAoBh+tB,QAGjE0xyB,EAASr2yB,UAAUqpxB,oBAAsB,WAErC,IAAK,IADDrgO,EAAgBrkjB,KAAK2mxB,sBAChBvoxB,EAAK,EAAGu3yB,EAAkBtxP,EAAejmjB,EAAKu3yB,EAAgBl5yB,OAAQ2B,IAAM,CACjF,IAAI6kE,EAAO0yuB,EAAgBv3yB,GAC3B6kE,EAAKz/D,aAAa,gBAAiB,SACnCy/D,EAAKv3D,gBAAgB,YAEzBrH,EAAYggjB,EAAeuxP,KAE/BlE,EAASr2yB,UAAU2pxB,iBAAmB,SAAUljtB,EAAOsitB,GACnD,IAAK,IAAIhmxB,EAAK,EAAG65nB,EAAUn2jB,EAAO1jE,EAAK65nB,EAAQx7nB,OAAQ2B,IAAM,CAC9C65nB,EAAQ75nB,GACdoF,aAAa,gBAAiB,QAEvCG,EAASm+D,EAAO8zuB,IAChBxxB,EAAU5gxB,aAAa,WAAY,KACnC4gxB,EAAUlixB,SAEdwvyB,EAASr2yB,UAAUwniB,WAAa,SAAU7hiB,GACtChB,KAAK0kxB,sBACL1kxB,KAAKglxB,kBAAkBhkxB,GAAUA,IAErC0wyB,EAASr2yB,UAAUsrxB,oBAAsB,WACrC,SAAUtlxB,MAAMC,KAAKtB,KAAKgB,QAAQQ,iBAAiB,IAAMo0yB,MAE7DlE,EAASr2yB,UAAU0nxB,aAAe,WAC9B,OAAO/ixB,KAAKgB,QAAQ2B,cAAc,IAAMkzyB,KAE5CnE,EAASr2yB,UAAU0xoB,gBAAkB,WACjC,OAAO/soB,KAAKgB,QAAQ2B,cAAc,IAAMmzyB,GAA0B,WAEtEpE,EAASr2yB,UAAUkpxB,oBAAsB,WACrC,SAAUljxB,MAAMC,KAAKtB,KAAKgB,QAAQQ,iBAAiB,IAAMg/wB,MAE7DkxB,EAASr2yB,UAAU06yB,eAAiB,SAAU5uwB,EAAYwvC,GACtD,OAAOxvC,EAAWvP,IAAIN,QAAQ/4B,SAASo4E,IAE3C+6tB,EAASr2yB,UAAU26yB,aAAe,SAAUr/hB,GACxC,QAAyB,UAArB32Q,KAAK0tM,cAA2BipE,EAAG7yQ,UAAUK,SAASs8wB,MACtD9pgB,EAAG7yQ,UAAUK,SAASu8wB,KAA4B1gxB,KAAKu+wB,kBAAkBC,UAAU/+uB,SAK3FiywB,EAASr2yB,UAAUs9xB,mBAAqB,SAAUhihB,GAC9C,IAAKl5Q,EAAkBk5Q,EAAG9jQ,aAAa,cAAe,CAClD,IAAIojyB,EAAWlhxB,SAAS4hP,EAAG9jQ,aAAa,aAAc,IACtD,OAAO,IAAImN,KAAKi2xB,KAIxBvE,EAASr2yB,UAAU66yB,gBAAkB,WACjC,OAAOl2yB,KAAKmzyB,gBAEhBzB,EAASr2yB,UAAU86yB,sBAAwB,WACvC,OAAOn2yB,KAAKozyB,sBAEhB1B,EAASr2yB,UAAU+6yB,qBAAuB,WACtC,OAAOp2yB,KAAKqzyB,qBAEhB3B,EAASr2yB,UAAUg7yB,qBAAuB,WACtC,OAAOr2yB,KAAKszyB,qBAEhB5B,EAASr2yB,UAAUi7yB,uBAAyB,WACxC,OAAOt2yB,KAAKuzyB,uBAEhB7B,EAASr2yB,UAAUi/xB,wBAA0B,WACzC,OAAOt6xB,KAAK2xyB,wBAEhBD,EAASr2yB,UAAU0oyB,kBAAoB,WACnC,OAAO/jyB,KAAK6xyB,kBAEhBH,EAASr2yB,UAAUk7yB,0BAA4B,WAC3C,OAAOv2yB,KAAKwzyB,0BAEhB9B,EAASr2yB,UAAUm8d,gBAAkB,SAAUv3d,GAC3CD,KAAK+N,OAAOouwB,IAAwB7/wB,MAAO2D,KAE/CyxyB,EAASr2yB,UAAUo6yB,iBAAmB,SAAUx1yB,GACxCD,KAAKsoxB,YACLtoxB,KAAKsoxB,WAAWE,eAEK,UAArBxoxB,KAAK0tM,aACL1tM,KAAK+N,OAAOi9nB,OAEhBhroB,KAAK2ryB,sBAET+F,EAASr2yB,UAAUu2yB,eAAiB,SAAU3iyB,GAC1C,GAAIA,EACA,IAEI,GAAIzO,SAASgB,iBAAiByN,GAAUxS,OACpC,OAAOuS,GAAQxO,SAASmC,cAAcsM,GAAUjN,UAAUkO,QAGlE,MAAOo0E,GACH,OAAOt1E,GAAQC,KAS3ByiyB,EAASr2yB,UAAU8pB,aAAe,WAC9B,IAAI2lR,EAAS,wBAAyBjvS,OAAS,oBAAsB,SACrE0J,GAAahB,OAAO1I,OAAQivS,EAAQ9qS,KAAKy1yB,kBACzClwyB,GAAahB,OAAO/D,SAAUgL,GAAQ0+E,gBAAiBlqF,KAAKw3d,iBACxDx3d,KAAK0uxB,2BACL1uxB,KAAK0uxB,0BAA0Bp8wB,WAOvCo/xB,EAASr2yB,UAAUkkC,cAAgB,WAC/B,MAAO,YAMXmywB,EAASr2yB,UAAUmxG,eAAiB,WAChC,OAAOxsG,KAAKgtG,cAAc,cAAe,kBAM7C0ksB,EAASr2yB,UAAUmsF,kBAAoB,SAAUiF,EAASC,GAEtD,IAAK,IADDu+jB,GAAiB,EACZ7spB,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKmvF,GAAUruF,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC9D,IAAIkM,EAAOzH,EAAGzE,GACd,OAAQkM,GACJ,IAAK,QACL,IAAK,SACDtK,KAAK+N,OAAO8vnB,IACR1siB,OAAQ,SACRluF,YAAc+S,MAAOy2E,EAAQz2E,MAAOD,OAAQ02E,EAAQ12E,UAExD,MACJ,IAAK,QACD/V,KAAKqyyB,iBACDryyB,KAAKorpB,cACLprpB,KAAKorpB,aAAauxH,cAEtB38wB,KAAKg+wB,WAAWh+wB,KAAK0tM,YAAa,MAAM,GACxC,MACJ,IAAK,cACD1tM,KAAKg+wB,WAAWvxrB,EAAQihH,YAAa,MAAM,GAC3C,MACJ,IAAK,eACD1tM,KAAK69wB,WAAWpxrB,EAAQuhH,cACxB,MACJ,IAAK,aACDhuM,KAAKu+wB,kBAAoBv+wB,KAAK2yyB,qBAAqB3yyB,KAAK0tM,aACpD1tM,KAAKorpB,cACLprpB,KAAKorpB,aAAaiyH,gBAAgBr9wB,KAAKm+wB,WAAWb,oBAEtD,MACJ,IAAK,gBACGt9wB,KAAKorpB,eACLprpB,KAAKorpB,aAAa94oB,UAClBtS,KAAKorpB,aAAe,MAEpB3+jB,EAAQwltB,gBACRjyyB,KAAKorpB,aAAe,IAAI8wH,GAAel8wB,OAE3C,IAEIw2yB,GAAWp3B,cAFAp/wB,KAAKkT,WAAcoxB,OAAQ,kBAAmB80B,QAAS,gBAChE90B,OAAQ,mBAAoB80B,QAAS,iBAE3Cp5D,KAAK+N,OAAO0oyB,GAAuBD,GACnC,MACJ,IAAK,cACL,IAAK,WACL,IAAK,YACL,IAAK,UACL,IAAK,YACL,IAAK,WACDvrJ,GAAiB,EACjB,MACJ,IAAK,SACDjrpB,KAAK0zyB,oBACL1zyB,KAAKkyD,UACL,MACJ,IAAK,iBACGlyD,KAAKorpB,cACLprpB,KAAKorpB,aAAayxH,aAAapwrB,EAAQ/V,gBAE3Cu0kB,GAAiB,EACjB,MACJ,IAAK,oBACGjrpB,KAAKu+wB,kBAAkBC,UAAU/+uB,QACjCz/B,KAAKm+wB,WAAWu4B,uBAEpB,MACJ,IAAK,eACD12yB,KAAKu+wB,kBAAkBw0B,aAAetmtB,EAAQsmtB,aAC9C/yyB,KAAKmzyB,eAAiBnzyB,KAAK4xyB,eAAe5xyB,KAAKu+wB,kBAAkBw0B,cACjE9nJ,GAAiB,EACjB,MACJ,IAAK,qBACDjrpB,KAAKu+wB,kBAAkBy0B,mBAAqBvmtB,EAAQumtB,mBACpDhzyB,KAAKozyB,qBAAuBpzyB,KAAK4xyB,eAAe5xyB,KAAKu+wB,kBAAkBy0B,oBACvE/nJ,GAAiB,EACjB,MACJ,IAAK,WACDjrpB,KAAK6ouB,UAAUuiD,uBAAuB1+rB,EAAQ8X,UAC9C,MACJ,IAAK,YACGxkG,KAAKorpB,cACLprpB,KAAKorpB,aAAa+xH,OAAOn9wB,KAAKkT,WAE9BlT,KAAKkT,UACLvP,GAAU3D,KAAKgB,StBnqBtB,SsBsqBOqD,GAAarE,KAAKgB,StBtqBzB,SsBwqBGiqpB,GAAiB,EACjB,MACJ,QACIjrpB,KAAKurpB,uBAAuBjhpB,EAAMmiF,EAASC,IAInDu+jB,GACAjrpB,KAAKgyyB,eAAehyyB,KAAK0tM,cAGjCgkmB,EAASr2yB,UAAUkwpB,uBAAyB,SAAUjhpB,EAAMmiF,EAASC,GACjE,OAAQpiF,GACJ,IAAK,WACGoiF,EAAQz5E,UACR5O,GAAarE,KAAKgB,SAAU0rF,EAAQz5E,UAEpCw5E,EAAQx5E,UACRtP,GAAU3D,KAAKgB,SAAUyrF,EAAQx5E,UAErC,MACJ,IAAK,sBACL,IAAK,kBACDjT,KAAKu+wB,kBAAoBv+wB,KAAK2yyB,qBAAqB3yyB,KAAK0tM,aACxD1tM,KAAKg+wB,WAAWh+wB,KAAK0tM,YAAa,MAAM,GACxC,MACJ,IAAK,gBACD1tM,KAAK22yB,+BAA+BlqtB,EAAQunsB,cAAetnsB,EAAQsnsB,eACnE,MACJ,IAAK,2BACGh0xB,KAAK0uxB,4BACL1uxB,KAAK0uxB,0BAA0Bp8wB,UAC/BtS,KAAK0uxB,0BAA4B,MAEjCjisB,EAAQiptB,2BACR11yB,KAAK0uxB,0BAA4B,IAAI1wD,GAAoBh+tB,OAE7D,MACJ,IAAK,iBACIvC,EAAkBuC,KAAKmjyB,kBACxBnjyB,KAAK6xyB,iBAAmB7xyB,KAAK4xyB,eAAe5xyB,KAAKmjyB,iBAErDnjyB,KAAK2+wB,YAAY4kB,mBACjB,MACJ,IAAK,QACDvjyB,KAAKgyyB,eAAehyyB,KAAK0tM,aACzB,MACJ,IAAK,YACD1tM,KAAK8xyB,qBAAoB,GACzB,MACJ,IAAK,YACD9xyB,KAAKu+wB,kBAAkBC,UAAUr8wB,SAAWsqF,EAAQ+xrB,UAAUr8wB,UAAYnC,KAAKu+wB,kBAAkBC,UAAUr8wB,SAC3GnC,KAAKu+wB,kBAAkBC,UAAUC,UAAYhyrB,EAAQ+xrB,UAAUC,WAAaz+wB,KAAKu+wB,kBAAkBC,UAAUC,UAC7Gz+wB,KAAK2+wB,YAAY8kB,wBACjBzjyB,KAAKgyyB,eAAehyyB,KAAK0tM,eAIrCgkmB,EAASr2yB,UAAUs7yB,+BAAiC,SAAUlqtB,EAASC,GAEnE,IAAK,IADDu+jB,GAAiB,EACZ7spB,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKmvF,GAAUruF,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAE9D,OADWyE,EAAGzE,IAEV,IAAK,aACL,IAAK,QACL,IAAK,SACD4B,KAAKq+U,uBACL4sU,GAAiB,EACjB,MACJ,IAAK,WACDjrpB,KAAKu+wB,kBAAkBiX,cAAgB/osB,EAAQx9E,SAC/CjP,KAAKuzyB,sBAAwBvzyB,KAAK4xyB,eAAe5xyB,KAAKu+wB,kBAAkBiX,eACxEvqI,GAAiB,EACjB,MACJ,IAAK,gBACGjrpB,KAAK22xB,eACL32xB,KAAK22xB,aAAarkxB,UAClBtS,KAAK22xB,aAAe,MAEpBlqsB,EAAQooP,gBACR70U,KAAK22xB,aAAe,IAAIkD,GAAa75xB,OAEzC,MACJ,IAAK,kBACDA,KAAK2xyB,uBAAyB3xyB,KAAK4xyB,eAAe5xyB,KAAKg0xB,cAAc+F,iBACrE,MACJ,IAAK,qBACG/5xB,KAAKgsxB,cACLhsxB,KAAKgsxB,aAAaqiB,wBAEtBpjJ,GAAiB,GAIzBA,GACAjrpB,KAAK+ppB,aAAav5U,sBAM1Bkhe,EAASr2yB,UAAUsmB,YAAc,WAC7BA,GAAY3hB,KAAKgB,UAKrB0wyB,EAASr2yB,UAAUqnB,YAAc,WAC7BA,GAAY1iB,KAAKgB,UAYrB0wyB,EAASr2yB,UAAUu7yB,aAAe,SAAUt5sB,EAAO//F,EAAOshB,EAAKsuqB,GAC3D,IAAIv1mB,EAAY53E,KAAKkrM,UAAUjgG,UAAU1tG,GAASmkE,SAAU,OACxDmW,EAAU73E,KAAKkrM,UAAUjgG,UAAUpsF,GAAO6iD,SAAU,OACpDsitB,EAAWhkxB,KAAK+soB,kBACpB,IAAItvoB,EAAkBm6E,KAAcn6E,EAAkBo6E,IAAamssB,EAAnE,CAGApssB,EAAUixB,gBAAgB,GAC1BhxB,EAAQgxB,gBAAgB,GACxB,IAAIgusB,EAAgB72yB,KAAKm+wB,WAAW24B,eAChCl/tB,EAAYi/tB,IACZj/tB,EAAYi/tB,GAEZh/tB,EAAU73E,KAAKm+wB,WAAW44B,eAC1Bl/tB,EAAU73E,KAAKm+wB,WAAW44B,cAO9B,IAAK,IAJDz4B,EzsBlzBe,IysBizBGt+wB,KAAKu+wB,kBAAkBC,UAAUr8wB,SACpBnC,KAAKu+wB,kBAAkBC,UAAUC,UAChE/4vB,EAAarZ,KAAKoxB,OAAO+vvB,GAAiB51sB,GAAa41sB,GAAiBqpB,IAAkBv4B,GAC1F14vB,EAAWvZ,KAAKwmB,MAAM26vB,GAAiB31sB,GAAW21sB,GAAiBqpB,IAAkBv4B,GACrFx8sB,KACK1jE,EAAK,EAAG44yB,EAAU15sB,EAAOl/F,EAAK44yB,EAAQv6yB,OAAQ2B,IAAM,CACzD,IAAIu4E,EAAOqguB,EAAQ54yB,GACnB8/wB,GAAevnsB,GACf,IAAI44tB,EAAcvvyB,KAAKm+wB,WAAWoxB,aAC7B9xyB,EAAkB0vrB,IAAentrB,KAAKgsxB,eACvCujB,EAAcvvyB,KAAKgsxB,aAAagD,kBAAkB7hG,GAAYoiH,aAElE,IAAIv9R,EAAWhygB,KAAK+1yB,eAAexG,EAAa54tB,GAChD,GAAIq7b,GAAY,EACZ,IAAK,IAAI71gB,EAAIupB,EAAYvpB,EAAIypB,EAAUzpB,IACnC,GAAKsB,EAAkB0vrB,GAKnBrrnB,EAAMt9D,KAAKw/wB,EAASzrf,KAAKp8R,GAAG2lE,MAAMkwc,QALF,CAChC,IAAIilS,KAAS51yB,MAAMC,KAAK0ixB,EAASzrf,KAAKp8R,GAAGqF,iBAAiB,IAAMg/wB,GAAuB,sBAAwBrzF,EAAa,OAC5HrrnB,EAAMt9D,KAAKyyyB,EAAIjlS,KAQ/BrugB,EAASm+D,EAAOo1uB,MASpBxF,EAASr2yB,UAAUslxB,eAAiB,SAAUhqgB,GAC1C,IAAIz2P,EAAYlgB,KAAK24xB,mBAAmBhihB,GACxC,IAAIl5Q,EAAkByiB,GAAtB,CAGA,IAQI1jB,GACA0jB,UAAWA,EACXouM,SATCtuN,KAAKu+wB,kBAAkBC,UAAU/+uB,QAAUk3O,EAAG7yQ,UAAUK,SAASs8wB,KAClE9pgB,EAAG7yQ,UAAUK,SAASu8wB,IACZyM,GAAa,IAAIntwB,KAAKE,EAAUD,WAAY,GAG5CjgB,KAAKm+wB,WAAWg5B,wBAAwBj3xB,GAKlDw+vB,SAAU1+wB,KAAKg2yB,aAAar/hB,GAC5B31Q,QAAS21Q,GAETw2a,EAAax2a,EAAG9jQ,aAAa,oBAIjC,OAHKpV,EAAkB0vrB,KACnB3wrB,EAAK2wrB,WAAap4pB,SAASo4pB,EAAY,KAEpC3wrB,IAOXk1yB,EAASr2yB,UAAU+7yB,oBAAsB,SAAUnlyB,GAC/C,GAAIjS,KAAKgsxB,cAAgBhsxB,KAAKgsxB,aAAagD,kBAAmB,CAC1D,GAAI/8wB,EAAQ,GAAKA,GAASjS,KAAKgsxB,aAAagD,kBAAkBvyxB,OAC1D,OAEJ,IAAID,EAAOwD,KAAKgsxB,aAAagD,kBAAkB/8wB,GAC/C,OAASg/P,SAAUz0Q,EAAKy0Q,SAAU89gB,aAAcvyxB,EAAKuyxB,gBAU7D2iB,EAASr2yB,UAAUylM,SAAW,SAAUx5F,GAChCtnG,KAAKm+wB,WAAWk5B,cAChBr3yB,KAAKm+wB,WAAWk5B,aAAa/vsB,IASrCoqsB,EAASr2yB,UAAUq1xB,SAAW,SAAUl0xB,GACpCwD,KAAKizyB,WAAWviB,SAASl0xB,IAU7Bk1yB,EAASr2yB,UAAUq1O,UAAY,SAAUl0O,EAAMkma,GAC3C1ia,KAAKizyB,WAAWvikB,UAAUl0O,EAAMkma,IAYpCgvY,EAASr2yB,UAAU+1xB,YAAc,SAAU9txB,EAAIo/Z,GAC3C1ia,KAAKizyB,WAAW7hB,YAAY9txB,EAAIo/Z,IAOpCgvY,EAASr2yB,UAAUi8yB,UAAY,WAC3B,OAAOt3yB,KAAKqrxB,YAQhBqmB,EAASr2yB,UAAU40xB,mBAAqB,SAAUsnB,GAE9C,OADoBv3yB,KAAK6ouB,UAAUonD,mBAAmBsnB,IAU1D7F,EAASr2yB,UAAU60xB,sBAAwB,SAAUhwwB,EAAWouM,GAE5D,OADoBtuN,KAAK6ouB,UAAUqnD,sBAAsBhwwB,EAAWouM,IAQxEojlB,EAASr2yB,UAAUm8yB,oBAAsB,WACrC,OAAOx3yB,KAAKm+wB,WAAWoxB,aAO3BmC,EAASr2yB,UAAUo8yB,qBAAuB,WACtC,OAAOz3yB,KAAKgmxB,iBAOhB0rB,EAASr2yB,UAAUq8yB,cAAgB,WAC/B13yB,KAAK+ppB,aAAav5U,sBAQtBkhe,EAASr2yB,UAAUs8yB,gBAAkB,SAAU32yB,GAC3C,IAAIgvL,EAAOhvL,EAAQ6R,aAAa,aAChC,OAAIm9K,EACOhwL,KAAK6ouB,UAAU29C,eAAex2lB,OAY7C0hnB,EAASr2yB,UAAUu8yB,gBAAkB,SAAU13xB,EAAWouM,EAAS6+d,GAC/D,IAAIunG,EAAkB10xB,KAAK6ouB,UAAUsiD,aAAajrwB,EAAWouM,GAI7D,OAHK7wN,EAAkB0vrB,IAAentrB,KAAKgsxB,cAAgBhsxB,KAAKgsxB,aAAagD,kBAAkBvyxB,OAAS,IACpGi4xB,EAAkB10xB,KAAK6ouB,UAAUgjD,uBAAuB7rxB,KAAKgsxB,aAAagD,kBAAkB7hG,GAAaunG,MAErGA,EAAgBj4xB,OAAS,IAWrCi1yB,EAASr2yB,UAAUujxB,WAAa,SAAUpixB,EAAM25D,GAC5Cn2D,KAAK2+wB,YAAYC,WAAWpixB,EAAM25D,IAQtCu7uB,EAASr2yB,UAAUswyB,mBAAqB,WACpC3ryB,KAAKm+wB,WAAWwtB,sBAQpB+F,EAASr2yB,UAAUi2yB,YAAc,SAAUlmkB,EAAW3zM,EAAMxlB,GACxDjS,KAAKgsxB,aAAaslB,YAAYlmkB,EAAW3zM,EAAMxlB,IAOnDy/xB,EAASr2yB,UAAUk2yB,eAAiB,SAAU7D,EAAYj2wB,GACtDz3B,KAAKgsxB,aAAaulB,eAAe7D,EAAYj2wB,IAOjDi6wB,EAASr2yB,UAAUiX,QAAU,WACrBtS,KAAKsoxB,aACLtoxB,KAAKsoxB,WAAWh2wB,UAChBtS,KAAKsoxB,WAAa,MAElBtoxB,KAAK2+wB,cACL3+wB,KAAK2+wB,YAAYrswB,UACjBtS,KAAK2+wB,YAAc,MAEvB3+wB,KAAKmlB,eACDnlB,KAAKorpB,eACLprpB,KAAKorpB,aAAa94oB,UAClBtS,KAAKorpB,aAAe,MAEpBprpB,KAAK2qS,eACL3qS,KAAK2qS,aAAar4R,UAClBtS,KAAK2qS,aAAe,MAEpB3qS,KAAKm+wB,aACLn+wB,KAAKm+wB,WAAWvhxB,sBAChBoD,KAAKm+wB,WAAW7rwB,UAChBtS,KAAKm+wB,WAAa,MAElBn+wB,KAAKkyyB,sBACLlyyB,KAAKkyyB,oBAAoB5/xB,UACzBtS,KAAKkyyB,oBAAsB,MAE/B/mtB,EAAO9vF,UAAUiX,QAAQhR,KAAKtB,MAC9BA,KAAKgB,QAAQgB,UAAY,GACzBqC,GAAarE,KAAKgB,StBjkCR,esBmkCd6pF,IACI3jF,EAAS,SACVwqyB,EAASr2yB,UAAW,aAAS,GAChCwvF,IACI3jF,EAAS,SACVwqyB,EAASr2yB,UAAW,cAAU,GACjCwvF,IACI3jF,GAAS,IACVwqyB,EAASr2yB,UAAW,qBAAiB,GACxCwvF,IACI3jF,GAAS,IACVwqyB,EAASr2yB,UAAW,yBAAqB,GAC5CwvF,IACI3jF,EAAS,SACVwqyB,EAASr2yB,UAAW,mBAAe,GACtCwvF,IACI3jF,GAAU,MAAO,OAAQ,WAAY,QAAS,YAC/CwqyB,EAASr2yB,UAAW,aAAS,GAChCwvF,IACI3jF,EAAS,IAAI8Y,OACd0xxB,EAASr2yB,UAAW,oBAAgB,GACvCwvF,IACI3jF,KACDwqyB,EAASr2yB,UAAW,kBAAc,GACrCwvF,IACI3jF,GAAS,IACVwqyB,EAASr2yB,UAAW,mBAAe,GACtCwvF,IACI3jF,EAAS,IACVwqyB,EAASr2yB,UAAW,sBAAkB,GACzCwvF,IACI3jF,GAAU,EAAG,EAAG,EAAG,EAAG,KACvBwqyB,EAASr2yB,UAAW,gBAAY,GACnCwvF,IACI3jF,EAAS,UACVwqyB,EAASr2yB,UAAW,iBAAa,GACpCwvF,IACI3jF,EAAS,UACVwqyB,EAASr2yB,UAAW,eAAW,GAClCwvF,IACI9iF,KAAY6jyB,KACb8F,EAASr2yB,UAAW,iBAAa,GACpCwvF,IACI9iF,KAAY8jyB,KACb6F,EAASr2yB,UAAW,iBAAa,GACpCwvF,IACI3jF,GAAS,IACVwqyB,EAASr2yB,UAAW,gCAA4B,GACnDwvF,IACI3jF,KACDwqyB,EAASr2yB,UAAW,0BAAsB,GAC7CwvF,IACI3jF,KACDwqyB,EAASr2yB,UAAW,oBAAgB,GACvCwvF,IACI3jF,GAAS,IACVwqyB,EAASr2yB,UAAW,gBAAY,GACnCwvF,IACI3jF,GAAS,IACVwqyB,EAASr2yB,UAAW,qBAAiB,GACxCwvF,IACI3jF,KACDwqyB,EAASr2yB,UAAW,sBAAkB,GACzCwvF,IACI3jF,EAAS,IACVwqyB,EAASr2yB,UAAW,uBAAmB,GAC1CwvF,IACI3jF,GAAS,IACVwqyB,EAASr2yB,UAAW,2BAAuB,GAC9CwvF,IACI3jF,KACDwqyB,EAASr2yB,UAAW,gBAAY,GACnCwvF,IACI9iF,KAAYgkyB,KACb2F,EAASr2yB,UAAW,qBAAiB,GACxCwvF,IACI3jF,KACDwqyB,EAASr2yB,UAAW,8BAA0B,GACjDwvF,IACI9iF,KAAYska,KACbqlY,EAASr2yB,UAAW,aAAS,GAChCwvF,IACIxiF,KAAeqqwB,KAChBg/B,EAASr2yB,UAAW,iBAAa,GACpCwvF,IACI3jF,KACDwqyB,EAASr2yB,UAAW,gBAAY,GACnCwvF,IACI3jF,GAAS,IACVwqyB,EAASr2yB,UAAW,iBAAa,GACpCwvF,IACI/hF,KACD4oyB,EAASr2yB,UAAW,eAAW,GAClCwvF,IACI/hF,KACD4oyB,EAASr2yB,UAAW,iBAAa,GACpCwvF,IACI/hF,KACD4oyB,EAASr2yB,UAAW,iBAAa,GACpCwvF,IACI/hF,KACD4oyB,EAASr2yB,UAAW,uBAAmB,GAC1CwvF,IACI/hF,KACD4oyB,EAASr2yB,UAAW,mBAAe,GACtCwvF,IACI/hF,KACD4oyB,EAASr2yB,UAAW,sBAAkB,GACzCwvF,IACI/hF,KACD4oyB,EAASr2yB,UAAW,qBAAiB,GACxCwvF,IACI/hF,KACD4oyB,EAASr2yB,UAAW,kBAAc,GACrCwvF,IACI/hF,KACD4oyB,EAASr2yB,UAAW,kBAAc,GACrCwvF,IACI/hF,KACD4oyB,EAASr2yB,UAAW,kBAAc,GACrCwvF,IACI/hF,KACD4oyB,EAASr2yB,UAAW,qBAAiB,GACxCwvF,IACI/hF,KACD4oyB,EAASr2yB,UAAW,mBAAe,GACtCwvF,IACI/hF,KACD4oyB,EAASr2yB,UAAW,iBAAa,GACpCwvF,IACI/hF,KACD4oyB,EAASr2yB,UAAW,iBAAa,GACpCq2yB,EAAW7mtB,IACPzhF,GACDsoyB,IAELnmsB,ICxsCEsssB,GAA0B,WAI1B,SAASA,EAASv3yB,GACd,IAAIP,EAAQC,KACZA,KAAK83yB,cACDC,WAAY,SAAUjhuB,GAClB,OAAO/2E,EAAMO,OAAOmzyB,YAAY,eAAe38tB,EAAGlT,WAEtDuC,QAAS,SAAU2Q,GACf,OAAO/2E,EAAMO,OAAO4qM,UAAUlgG,WAAWl0B,GAAM96C,OAAQ,OAE3D/b,QAAS,SAAU62D,GACf,OAAI/2E,EAAMO,OAAOg/tB,WACNv/tB,EAAMO,OAAO4qM,UAAUlgG,WAAWl0B,GAAMpV,SAAU,MAEtD3hE,EAAMO,OAAOw1xB,cAAch/sB,KAG1C92E,KAAKM,OAASA,EAuMlB,OArMAu3yB,EAASx8yB,UAAU28yB,kBAAoB,SAAU30yB,GAC7C,IACI48D,EAAQ9+D,EAAc,SAAWkC,UAAW40yB,qBADlC50yB,GAAa,MAEvBo8nB,EAAQt+nB,EAAc,SAE1B,OADA8+D,EAAMt+D,YAAY89nB,GACXx/jB,GAEX43uB,EAASx8yB,UAAU0ioB,YAAc,SAAUr3nB,GACnCA,IAASw5wB,GACTr7wB,GAAS7E,KAAKgB,SAAUhB,KAAKM,OAAOU,QAAQ2B,cAAc,IAAM28wB,KAGhEt/wB,KAAKM,OAAOU,QAAQ2B,cAAc,IAAM28wB,IAA2B39wB,YAAY3B,KAAKgB,UAG5F62yB,EAASx8yB,UAAU6ioB,SAAW,SAAU+B,GACpCjgoB,KAAKgB,QAAUi/nB,GAEnB43K,EAASx8yB,UAAU2hoB,SAAW,WAC1B,OAAOh9nB,KAAKgB,SAEhB62yB,EAASx8yB,UAAUswyB,mBAAqB,aAGxCkM,EAASx8yB,UAAUu0yB,aAAe,SAAUL,EAAaE,GAErD,UAEJoI,EAASx8yB,UAAU6lxB,qBAAuB,WAEtC,UAEJ22B,EAASx8yB,UAAUq7yB,qBAAuB,aAG1CmB,EAASx8yB,UAAU68E,UAAY,WAC3B,OAAOl4E,KAAKuvyB,YAAY,IAE5BsI,EAASx8yB,UAAU88E,QAAU,WACzB,OAAOZ,GAAQv3E,KAAKuvyB,YAAYvvyB,KAAKuvyB,YAAY9yyB,OAAS,GAAI,IAElEo7yB,EAASx8yB,UAAUy7yB,aAAe,WAC9B,IAAIl/tB,EAAY53E,KAAKM,OAAO4qM,UAAUjgG,UAAUjrG,KAAKM,OAAOi+wB,kBAAkB3msB,WAAalW,SAAU,OAIrG,OAHIjkE,EAAkBm6E,KAClBA,EAAY,IAAI53D,KAAK,IAAM,EAAG,EAAG,IAE9B43D,GAEXiguB,EAASx8yB,UAAU07yB,WAAa,WAC5B,IAAIl/tB,EAAU73E,KAAKM,OAAO4qM,UAAUjgG,UAAUjrG,KAAKM,OAAOi+wB,kBAAkB1msB,SAAWnW,SAAU,OAIjG,OAHIjkE,EAAkBo6E,KAClBA,EAAU,IAAI73D,KAAK,IAAM,EAAG,EAAG,IAE5B63D,GAEXgguB,EAASx8yB,UAAU68yB,cAAgB,SAAUvhuB,GACzC,OAAOA,EAAKlS,SAAS,EAAG,EAAG,EAAG,MAAO,IAAIzkD,MAAOykD,SAAS,EAAG,EAAG,EAAG,IAEtEozuB,EAASx8yB,UAAU88yB,eAAiB,SAAUxhuB,GAC1C,OAAOA,EAAK5Q,iBAAkB,IAAI/lD,MAAO+lD,eAAiB4Q,EAAK1Q,cAAe,IAAIjmD,MAAOimD,YAE7F4xuB,EAASx8yB,UAAU+8yB,UAAY,SAAUzhuB,EAAM84tB,GAE3C,YADiB,IAAbA,IAAuBA,EAAWzvyB,KAAKM,OAAOi+wB,kBAAkBkxB,UAChEA,EAASlxyB,QAAQo4E,EAAK/S,WAAa,GAK3Ci0uB,EAASx8yB,UAAUg9yB,WAAa,SAAU1huB,EAAMiB,EAAWC,EAAS43tB,GAChE,OAAIhyyB,EAAkBm6E,KAAcn6E,EAAkBo6E,KAGtDD,EAAUixB,gBAAgB,GAC1BhxB,EAAQgxB,gBAAgB,KACpBvxB,GAAYX,GAAQW,GAAYM,IAAcN,GAAYX,IAASW,GAAYO,KAAa73E,KAAKo4yB,UAAUzhuB,EAAM84tB,MAKzHoI,EAASx8yB,UAAU0lxB,eAAiB,SAAU0uB,GAE1C,IAAK,IADDF,KACKpzyB,EAAI,EAAGs+B,EAAWz6B,KAAKM,OAAOi+wB,kBAAkBp8wB,SAAUhG,EAAIs+B,EAAUt+B,IAC7EozyB,EAAY/qyB,KAAK2oxB,GAAa91sB,GAAUr3E,KAAKM,OAAO0tM,cAAe7xM,IAKvE,OAHKszyB,IACDzvyB,KAAKuvyB,YAAcA,GAEhBA,GAEXsI,EAASx8yB,UAAU+ixB,oBAAsB,SAAU13wB,GAC/C,OACW6wE,GAAQv3E,KAAKM,OAAO0tM,aADlB,SAATtnM,E1sBpHa,E0sBqH0C1G,KAAKM,OAAOi+wB,kBAAkBp8wB,U1sBrHxE,E0sBwH2CnC,KAAKM,OAAOi+wB,kBAAkBp8wB,WAG9F01yB,EAASx8yB,UAAUggC,aAAe,SAAUigK,GACxC,OAAOt7L,KAAKM,OAAOo4E,UAAU3E,YAAYunH,GAAQ,OAC7Ct7L,KAAKM,OAAO4qM,UAAUlgG,WAAWhrG,KAAKM,OAAO0tM,cAAgBtsI,SAAU,UAE/Em2uB,EAASx8yB,UAAUiixB,iBAAmB,WAClC,OAAIt9wB,KAAKM,OAAOg/tB,WACLt/tB,KAAKM,OAAO4qM,UAAUlgG,WAAWhrG,KAAKM,OAAO0tM,cAAgBhyK,OAAQ,WAEzEh8B,KAAKs4yB,gBAAgBt4yB,KAAKuvyB,YAAY,GAAIvvyB,KAAKuvyB,YAAYvvyB,KAAKuvyB,YAAY9yyB,OAAS,KAEhGo7yB,EAASx8yB,UAAUi9yB,gBAAkB,SAAUpguB,EAAWC,GACtD,IAAI+yH,EAAYlrM,KAAKM,OAAO4qM,UAC5B,IAAKztM,EAAkBuC,KAAKM,OAAOi+wB,kBAAkBt4qB,YACjD,OAAK9tB,EAGE+yH,EAAUlgG,WAAW9yB,GAAal8C,OAAQh8B,KAAKM,OAAOi+wB,kBAAkBt4qB,aAAgB,MAC3FilG,EAAUlgG,WAAW7yB,GAAWn8C,OAAQh8B,KAAKM,OAAOi+wB,kBAAkBt4qB,aAH/DilG,EAAUlgG,WAAW9yB,GAAal8C,OAAQh8B,KAAKM,OAAOi+wB,kBAAkBt4qB,aAKvF,IACIsysB,EAOJ,GALIA,EADuB,OAAvBv4yB,KAAKM,OAAO0N,QAA0C,UAAvBhO,KAAKM,OAAO0N,OAC1BnR,EAAS,mBAAoBkS,MAG7BlS,EAAS,QAAemD,KAAKM,OAAO0N,OAAS,8CAA+CK,KAE5G8pE,EACD,OAAO+yH,EAAUlgG,WAAW9yB,GAAal8C,OAAQu8wB,IAErD,IAAItysB,EAAasysB,EAAeroyB,OAAOqrD,oBAqCvC,MApCgC,MAA5B0qC,EAAWjvE,OAAO,EAAG,GACjBkhD,EAAUnS,gBAAkBoS,EAAQpS,cAChCmS,EAAUjS,aAAekS,EAAQlS,WAClBilI,EAAUlgG,WAAW9yB,GAAal8C,OAAQ,OAAU,MAC/DkvK,EAAUlgG,WAAW7yB,GAAWn8C,OAAQ,iBAG7BkvK,EAAUlgG,WAAW9yB,GAAal8C,OAAQ,WAAc,MACnEkvK,EAAUlgG,WAAW7yB,GAAWn8C,OAAQ,gBAIjCkvK,EAAUlgG,WAAW9yB,GAAal8C,OAAQ,gBAAmB,MACxEkvK,EAAUlgG,WAAW7yB,GAAWn8C,OAAQ,gBAGf,MAA5BiqE,EAAWjvE,OAAO,EAAG,GACtBkhD,EAAUnS,gBAAkBoS,EAAQpS,cAChCmS,EAAUjS,aAAekS,EAAQlS,WAClBilI,EAAUlgG,WAAW9yB,GAAal8C,OAAQ,YAAe,MACpEkvK,EAAUlgG,WAAW7yB,GAAWn8C,OAAQ,aAG7BkvK,EAAUlgG,WAAW9yB,GAAal8C,OAAQ,WAAc,MACnEkvK,EAAUlgG,WAAW7yB,GAAWn8C,OAAQ,iBAIjCkvK,EAAUlgG,WAAW9yB,GAAal8C,OAAQ,iBAAoB,MACzEkvK,EAAUlgG,WAAW7yB,GAAWn8C,OAAQ,iBAIjCkvK,EAAUlgG,WAAW9yB,GAAal8C,OAAQu8wB,IAAoB,MACzErtmB,EAAUlgG,WAAW7yB,GAAWn8C,OAAQu8wB,KAIpDV,EAASx8yB,UAAUm9yB,qBAAuB,SAAU7huB,EAAMtzE,GAMtD,OALWlC,EAAc,OACrBkC,UAAWA,EACXrB,UAAW,yBAA2BhC,KAAKM,OAAO4qM,UAAUlgG,WAAWr0B,GAAQ36C,OAAQ,MAAS,8BAClEh8B,KAAKM,OAAO4qM,UAAUlgG,WAAWr0B,GAAQ36C,OAAQ,MAAS,YAIhG67wB,EAASx8yB,UAAUo9yB,yBAA2B,SAAUz+H,EAAW0+H,EAAQr1yB,GAEvE,QADkB,IAAdA,IAAwBA,EAAY,mBACpCrD,KAAKM,OAAOi+wB,kBAAkByuB,uBAAwB,CACtD,IAAI3tf,OAAS,EACT7iT,GACAy0Q,SAAUyniB,EAAOzniB,SACjB89gB,aAAc2pB,EAAO3pB,eAEzB1ve,EAASr/S,KAAKM,OAAOi2yB,2BAAZv2yB,CAAwCxD,KACnC6iT,EAAO5iT,QACjB2I,KAAU/D,MAAMC,KAAK+9S,GAAS26X,QAIlCA,EAAUr4qB,YAAYR,EAAc,OAChCkC,UAAWA,EAAWrB,UAAW02yB,EAAO3pB,aAAa2pB,EAAOzniB,SAAS4gN,eAIjFgmV,EAASx8yB,UAAUs9yB,2BAA6B,WAC5C34yB,KAAKM,OAAO0rxB,aAAaigB,uBACzBjsyB,KAAKM,OAAO0rxB,aAAawgB,sBAEtBqL,KC5NPe,GAAqC,WACrC,SAASA,EAAoBt4yB,GACzBN,KAAKM,OAASA,EAoDlB,OAlDAs4yB,EAAoBv9yB,UAAUw7wB,cAAgB,SAAUh2wB,GACpDb,KAAKM,OAAOyN,OAAO00wB,IAAuBnmxB,MAAOuE,KAErD+3yB,EAAoBv9yB,UAAUunuB,UAAY,SAAU/huB,GAChD,IAAIgF,EAAQhF,EAAEsG,OAAQ,IAAMo5wB,IAA5B,CAIA,GAAI9ixB,EADcoI,EAAQhF,EAAEsG,OAAQ,IAAM0rxB,MACJp1xB,EAAkBuC,KAAKM,OAAOiyyB,YAAY96tB,MAAqC,QAA5Bz3E,KAAKM,OAAOotM,YAAwB,CACzH,GAAI1tM,KAAKM,OAAOi+wB,kBAAkBlosB,SAE9B,YADAr2E,KAAKM,OAAOgoxB,WAAWkH,iBAG3B,IAAIroxB,EAAStG,EAAEutG,cACXyqsB,EAAa1xyB,EAAOrD,UAAUK,SAASq8wB,KAAyBr5wB,EAAOrD,UAAUK,SAASs8wB,IAC9F,GAAIo4B,GAAch4yB,EAAE41G,UAAwB,IAAZ51G,EAAE81G,OAAe32G,KAAKM,OAAOouxB,0BAEzD,YADA1uxB,KAAKM,OAAOouxB,0BAA0B9L,iBAAiB/hxB,GAG3Db,KAAKM,OAAO+9wB,gBAAkBr+wB,KAAKM,OAAOqgxB,eAAex5wB,GACzD,IAAIlH,EAAOvB,EAAOsB,KAAKM,OAAO+9wB,iBAAmBxlvB,QAAQ,EAAOv8B,MAAOuE,EAAG42B,KAAM,cAEhF,GADAz3B,KAAKM,OAAOkmB,QAAQi9vB,GAAiBxjxB,GACjCA,EAAK44B,OACL,OAEAggxB,GACA74yB,KAAKM,OAAOuiiB,WAAW17hB,GAE3BnH,KAAKM,OAAOyN,OAAO01wB,GAAiBxjxB,OAEnC,CACD,IAAI02E,EAAO32E,KAAKM,OAAOq4xB,mBAAmB93xB,EAAEutG,eACvC3wG,EAAkBk5E,IAAU32E,KAAKM,OAAOg/tB,aACzCt/tB,KAAKM,OAAO0G,eAAgBgnM,aAAcr3H,IAAQ,GAClD32E,KAAKM,OAAO09wB,WAAW,WAInC46B,EAAoBv9yB,UAAUy9yB,aAAe,SAAUj4yB,GAEnD,GAAKpD,EADQoI,EAAQhF,EAAEsG,OAAQ,IAAMo5wB,OACHvgxB,KAAKM,OAAOi+wB,kBAAkBlosB,SAAhE,CAGA,IAAIp2E,EAAOvB,EAAOsB,KAAKM,OAAO+9wB,iBAAmBxlvB,QAAQ,EAAOv8B,MAAOuE,EAAG42B,KAAM,oBAChFz3B,KAAKM,OAAOkmB,QzBhDS,kByBgDsBvmB,GACvCA,EAAK44B,QAGT74B,KAAKM,OAAOq+wB,YAAYC,WAAW5+wB,KAAKM,OAAO+9wB,gBAAiB,SAE7Du6B,KC5DPtutB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAoBxCoutB,GAA+B,SAAU5ttB,GAKzC,SAAS4ttB,EAAcz4yB,GACnB,IAAIP,EAAQorF,EAAO7pF,KAAKtB,KAAMM,IAAWN,KAiBzC,OAhBAD,EAAMwtxB,cACNxtxB,EAAMi5yB,kBACNj5yB,EAAMk5yB,wBACNl5yB,EAAMm5yB,iBACNn5yB,EAAMo5yB,cACNp5yB,EAAMq5yB,eACNr5yB,EAAMs5yB,gBACNt5yB,EAAM0+wB,UAAY1+wB,EAAMO,OAAOi+wB,kBAAkBC,UAAUC,UAC3D1+wB,EAAMoC,SAAWpC,EAAMO,OAAOi+wB,kBAAkBC,UAAUr8wB,SAC1DpC,EAAMu5yB,YAAc,EACpBv5yB,EAAM63E,UAAY73E,EAAMO,OAAO69wB,WAAW24B,eAC1C/2yB,EAAM83E,QAAU93E,EAAMO,OAAO69wB,WAAW44B,aACxCh3yB,EAAMiB,QAAUjB,EAAMO,OAAO69wB,WAAWnhJ,WACxCj9nB,EAAM6rB,OAAS7rB,EAAMO,OAAO4lxB,YAC5BnmxB,EAAM42C,UAAY,IAAIre,IAAYE,SAAUz4B,EAAMw5yB,kBAAkBj+yB,KAAKyE,KACzEA,EAAMrD,mBACCqD,EAkjBX,OAxkBAuqF,GAAUyutB,EAAe5ttB,GAwBzB4ttB,EAAc19yB,UAAUm+yB,mBAAqB,WACzC,IAAIz5yB,EAAQC,KAKZ,MAJyBqB,MAAMC,KAAKtB,KAAKM,OAAOU,QAAQQ,iBAAiB,IAAM++wB,GAAwB,KAAOk5B,KAC9Fr6yB,QAAQ,SAAU4B,GAAW,OAAOuD,EAAOvD,KAC3DhB,KAAK05yB,iBAAmBr4yB,MAAMC,KAAKtB,KAAKgB,QAAQQ,iBAAiB,IAAMi/wB,GAAyB,iBAChGzgxB,KAAK25yB,mBAAmB,GACmB,IAAvC35yB,KAAKM,OAAO0lxB,gBAAgBvpxB,OAAhC,CAGA,IAAI46L,EAAiBr3L,KAAKgB,QAAQ2B,cAAc,IAAMghxB,IACtDp+wB,GAAahB,OAAO8yL,EAAgB,QAASr3L,KAAK45yB,mBAClDr0yB,GAAanB,IAAIizL,EAAgB,QAASr3L,KAAK45yB,kBAAmB55yB,MAClEA,KAAKg5yB,kBACLh5yB,KAAKi5yB,wBACLj5yB,KAAKorO,UAAaprO,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAMq4I,UAAU3uO,OAAS,EAAKuD,KAAKM,OAAOkryB,cAAcC,iBACnGzryB,KAAKM,OAAO0rxB,aAAagD,kBAAkBhvxB,KAAKM,OAAOkryB,cAAcr+G,aACtEntrB,KAAKM,OAAO0rxB,aAAagD,qBAC7BhvxB,KAAKs1R,WAAat1R,KAAKgB,QAAQ2B,cAAc,IAAM69wB,IAAsB9uuB,aACzE1xC,KAAKutxB,WAAW,GAAKvtxB,KAAKM,OAAO69wB,WAAWoxB,YACxCvvyB,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAMq4I,UAAU3uO,OAAS,GACvDuD,KAAKorO,UAAUhsO,QAAQ,SAAU6xQ,EAAUh/P,GAAS,OAAOlS,EAAMwtxB,WAAWt7wB,GAASg/P,EAASs+hB,cAElGvvyB,KAAK65yB,aAAa,gBACd75yB,KAAKq5yB,aAAa58yB,OAAS,IAC3BuD,KAAKq5yB,aAAer5yB,KAAKq5yB,aAAarywB,OAAO,SAAUnpB,EAAM5L,EAAOi3B,GAChE,OAAOj3B,IAAUi3B,EAAItR,IAAI,SAAU/Z,GAAQ,OAAOA,EAAKs9P,OAAS58Q,QAAQsf,EAAKs9P,QAEjF92Q,EAAYrE,KAAK05yB,czB0QS,ayBzQ1B15yB,KAAKuqxB,MAAM/lxB,KAAKxE,KAAKM,OAAO69wB,WAAWoxB,YAAY33wB,IAAI,SAAU++C,GAAQ,OAAQA,KACjF32E,KAAK65yB,aAAa,iBAEtB75yB,KAAKM,OAAOyN,OAAOovnB,OACnBx5nB,EAAS3D,KAAK05yB,czBqQgB,eyBnQlCX,EAAc19yB,UAAUw+yB,aAAe,SAAU74rB,GAC7C38G,EAAYrE,KAAK05yB,czBkQa,ayB9P9B,IAAK,IAHDhlB,EAAiC,iBAAd1zqB,EAAgChhH,KAAKusxB,eAAevsxB,KAAKq5yB,mBAAgBl+yB,EAE5F2+yB,EAAY,EACP17yB,EAAK,EAAG27yB,EAFD/5yB,KAAKg6yB,kBAEqB57yB,EAAK27yB,EAAYt9yB,OAAQ2B,IAG/D,IAAK,IAFD6yQ,EAAW8oiB,EAAY37yB,GACvBmxyB,EAAcvvyB,KAAKutxB,WAAWt8gB,GACzBx5L,EAAM,EAAGh9C,EAAW80wB,EAAY9yyB,OAAQg7E,EAAMh9C,EAAUg9C,IAAO,CACpEz3E,KAAKg5yB,kBAIL,IAAK,IAHD9guB,EAAY,IAAIl4D,KAAKuvxB,EAAY93tB,GAAKx3D,WACtCk4D,EAAUg1sB,GAAaoiB,EAAY93tB,GAAM,GAEpC50E,EAAK,EAAGo3yB,EADEj6yB,KAAKmrxB,aAAajzsB,EAAWC,EAASu8sB,EAAiB10xB,KAAKorO,UAAU6lC,IACzCpuQ,EAAKo3yB,EAAex9yB,OAAQoG,IAAM,CAC9E,IAAI2Q,EAAUymyB,EAAep3yB,GACzB7C,KAAKM,OAAO0rxB,cACZhsxB,KAAKmxyB,UAAU39xB,EAASy9P,GAEV,iBAAdjwJ,EACAhhH,KAAKk6yB,mBAAmB1myB,EAASikE,EAAKw5L,EAAU6oiB,GAG5C95yB,KAAK4uxB,oBAAoBp7wB,GACzBxT,KAAKq5yB,aAAa70yB,KAAK9F,KAAW8U,EAAS,MAAM,IAGjDxT,KAAKm6yB,mBAAmB3myB,EAASikE,EAAKw5L,EAAU6oiB,GAGxD95yB,KAAKiT,SAAW,KAChBjT,KAAKosxB,WAAa,KAEtB0tB,GAAa,IAIzBf,EAAc19yB,UAAU81yB,UAAY,SAAU70yB,EAAO89yB,GAC7Cp6yB,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAMq4I,UAAU3uO,OAAS,GACvDuD,KAAKiT,SAAWjT,KAAKorO,UAAUgvkB,GAAennyB,SAC9CjT,KAAKosxB,WAAapsxB,KAAKorO,UAAUgvkB,GAAehuB,YAGhDpsxB,KAAKiT,SAAWjT,KAAKM,OAAO0rxB,aAAaqlB,YAAY/0yB,IAG7Dy8yB,EAAc19yB,UAAU2+yB,gBAAkB,WAKtC,OAJgBx7yB,MAAMjD,MAAM,MACxBkB,OAASuD,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAMq4I,UAAU3uO,OAAS,IAAMuD,KAAKM,OAAOkryB,cAAcC,gBAC5FzryB,KAAKorO,UAAU3uO,OAAS,IAC7Bm7B,IAAI,SAAU56B,EAAOiV,GAAS,OAAOA,KAG5C8myB,EAAc19yB,UAAUg/yB,yBAA2B,SAAU/opB,EAAQotnB,EAAUlixB,EAAMy0Q,GACjF,IAAI26gB,EAAe5rxB,KAAKM,OAAO4lxB,YAC3Bo0B,EAAiBhppB,EAAOs6nB,EAAahuK,UAAY59mB,KAAKM,OAAO0zxB,cAAcpowB,OAAOgylB,QAAQzpV,SAC1Fn0R,KAAKM,OAAOo4E,UAAU3E,YAAY,YAClCwmuB,EAAqBp5yB,EAAc,OACnCmC,GAAI,eAAiBguJ,EAAOs6nB,EAAatoxB,IACzCD,UAAWk9wB,GACX98wB,OACIwxxB,YAAa3joB,EAAO6pH,KACpBvpQ,KAAQ,SACRo/G,SAAY,IACZ0I,gBAAiB,QACjBguB,gBAAiB,QACjBwtoB,eAAgB,OAChBxhqB,aAAc4mrB,KAGlBE,EAAqBr5yB,EAAc,OAASkC,UAAWo3yB,KAE3D,GADAF,EAAmB54yB,YAAY64yB,GAC3Bx6yB,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAMq4I,UAAU3uO,OAAS,EAAG,CAC1D,IAAI29yB,EAAgBp6yB,KAAKM,OAAOg/tB,WAAat/tB,KAAKM,OAAOkryB,cAAcr+G,WAAal8a,EACpFspiB,EAAmB/2yB,aAAa,mBAAoB42yB,EAAcltyB,YAEtE,IAAImtB,EACAgrD,EAAY7oF,EAChB,GAAKiB,EAAkBuC,KAAKM,OAAOi+wB,kBAAkBiX,eAGhD,CACD,IAAIklB,EAAqBv5yB,EAAc,OAASkC,UAAWmgxB,GAAmBxhxB,UAAWs4yB,IACzF,GAAI57B,EACA,GAAIptnB,EAAOs6nB,EAAalN,UACpBrkvB,GAAmBqgxB,OAElB,CACDrgxB,KACA,IAAIsgxB,EAAuBx5yB,EAAc,OACrCkC,UzBxDM,UyBwD6BrD,KAAKM,OAAOg/tB,WAAa,IAAMw0D,GAAoB,IACtF9xxB,UAAWhC,KAAKM,OAAOw1xB,cAAcxkoB,EAAOs6nB,EAAa1rwB,cAEzD06xB,EAAqBz5yB,EAAc,OACnCkC,UzB5DM,UyB4D6BrD,KAAKM,OAAOg/tB,WAAa,IAAMw0D,GAAoB,IACtF9xxB,UAAWhC,KAAKM,OAAOw1xB,cAAcxkoB,EAAOs6nB,EAAat9jB,YAE7D3qN,GAAU+2yB,GAAqB,iBAC1Br1tB,EAAUw+M,QACXxpQ,EAAgB71B,KAAKm2yB,GAEzBtgxB,EAAgB71B,KAAKk2yB,GAChBr1tB,EAAUu8M,SACXvnQ,EAAgB71B,KAAKo2yB,OAI5B,CACD,IAAIC,EAAU76yB,KAAKM,OAAOw1xB,cAAcxkoB,EAAOs6nB,EAAa1rwB,YAAc,MACtElgB,KAAKM,OAAOw1xB,cAAcxkoB,EAAOs6nB,EAAat9jB,UASlDj0L,GAAmBqgxB,EARGv5yB,EAAc,OAChCkC,UzB7EU,UyB6EyBrD,KAAKM,OAAOg/tB,WAAa,IAAMw0D,GAAoB,IACtF9xxB,UAAW64yB,IAEW15yB,EAAc,OACpCkC,UAAWghyB,GACXriyB,UAAYsvJ,EAAOs6nB,EAAal+vB,WAAa1tB,KAAKM,OAAO0zxB,cAAcpowB,OAAO8B,SAASymQ,SAAW,YArC1G95P,EAAkBr6B,KAAKM,OAAOg2yB,wBAAZt2yB,CAAqCsxJ,GA2C3D,GADAlsJ,KAAU/D,MAAMC,KAAK+4B,GAAkBmgxB,IAClC/8yB,EAAkB6zJ,EAAOs6nB,EAAab,iBAAkB,CACzD,IAEI+vB,EAAiB35yB,EAAc,OAC/BkC,UAAW+4tB,YAHE9qkB,EAAOs6nB,EAAatoxB,MAAQguJ,EAAOs6nB,EAAaZ,cAC7DmK,GAAkCC,KAEOp1xB,KAAKM,OAAOg/tB,WAAa,IAAMw0D,GAAoB,MAEhGpV,EAAW87B,EAAmB74yB,YAAYm5yB,GAAkBP,EAAmB54yB,YAAYm5yB,GAY/F,OAVIp8B,EACA1+wB,KAAK+6yB,kBAAkBP,EAAoBn1tB,EAAWq5rB,GAGtD1+wB,KAAK+6yB,kBAAkBR,EAAoBl1tB,EAAWq5rB,GAErDjhxB,EAAkBuC,KAAKiT,WACxBtP,GAAU42yB,GAAqBv6yB,KAAKiT,UAExCjT,KAAKowxB,mBAAmBmqB,EAAoBjppB,EAAQ,kBAAmBtxJ,KAAKosxB,YACrEmuB,GAEXxB,EAAc19yB,UAAU2/yB,oBAAsB,SAAUl4B,EAAWhkwB,EAAOm8xB,GACtE,IAAIC,EAAep4B,EAAUm4B,EAAan8xB,GAC1C,GAAIo8xB,EAAa/1uB,mBAAqB,EAAG,CACrC,IAAIg2uB,EAAiBh6yB,EAAc,OAC/BkC,UAAWo2yB,GACXn2yB,GAAIm2yB,GAA8B,KAAOwB,EAAan8xB,GAAO5R,aAE7DkuyB,EAAuBj6yB,EAAc,OACrCkC,UAAWugxB,GACXngxB,OAASutH,SAAY,IAAKqqrB,cAAeJ,EAAan8xB,GAAO5R,WAAYouyB,aAAc,KACvFt5yB,UAAW,YAAchC,KAAKM,OAAOg/tB,WAAa,GAAKt/tB,KAAKM,OAAOo4E,UAAU3E,YAAY,WAE7FonuB,EAAex5yB,YAAYy5yB,GAC3BF,EAAav5yB,YAAYw5yB,GACzB51yB,GAAanB,IAAIg3yB,EAAsB,QAASp7yB,KAAK45yB,kBAAmB55yB,UAEvE,CACD,IAAIu7yB,EAAYL,EAAat+xB,WAC7B2+xB,EAAU3+xB,WAAWpZ,aAAa,cAAeuxB,SAASwmxB,EAAU3+xB,WAAW/J,aAAa,cAAe,IAAM,GAAG3F,YACpHquyB,EAAU3+xB,WAAW5a,UACjB,IAAO+yB,SAASwmxB,EAAU3+xB,WAAW/J,aAAa,cAAe,IAAK3F,WAAa,UAC9ElN,KAAKM,OAAOg/tB,WAAa,GAAKt/tB,KAAKM,OAAOo4E,UAAU3E,YAAY,WAGjFgluB,EAAc19yB,UAAU0/yB,kBAAoB,SAAU/5yB,EAASw6yB,EAAW98B,GACtE,GAAIA,EAAU,CACV,GAAI88B,EAAU33gB,OAAQ,CAIlBh/R,GAHe1D,EAAc,OACzBkC,UAAWo4yB,GAA4B,IAAMr/E,GAAW,kBAExCp7tB,GAExB,GAAIw6yB,EAAU55gB,QAAS,CAInBx8R,GAHgBjE,EAAc,OAC1BkC,UAAWo4yB,GAA4B,IAAMr/E,GAAW,mBAExCp7tB,QAGvB,CACD,GAAIw6yB,EAAU53gB,MAAO,CAIjB/+R,GAHc1D,EAAc,OACxBkC,UAAWo4yB,GAA4B,IAAMr/E,GAAW,gBAEzCp7tB,GAEvB,GAAIw6yB,EAAU35gB,SAAU,CAIpBz8R,GAHiBjE,EAAc,OAC3BkC,UAAWo4yB,GAA4B,IAAMr/E,GAAW,kBAEvCp7tB,MAIjC+3yB,EAAc19yB,UAAUqgzB,eAAiB,SAAUpqpB,EAAQ75E,EAAKw5L,GAC5D,IAAI1zL,EAAc2gsB,GAAel+wB,KAAKutxB,WAAWt8gB,GAAUx5L,IACvDm0sB,EAAe5rxB,KAAKM,OAAO4lxB,YAC3By1B,EAAgBC,GAAsBr+tB,EAAav9E,KAAK43E,UAAW53E,KAAK63E,SACxEv7E,EAAQoC,KAAW4yJ,EAAQ,MAAM,GAUrC,OATAh1J,EAAMi6nB,WAAc10V,UAAU,EAAO+B,OAAO,GACxCtyI,EAAOs6nB,EAAa1rwB,WAAWD,UAAY07xB,EAAc/juB,UAAU33D,YACnE3jB,EAAMsvxB,EAAa1rwB,WAAay7xB,EAAc/juB,UAC9Ct7E,EAAMi6nB,UAAU3yV,OAAQ,GAExBtyI,EAAOs6nB,EAAat9jB,SAASruM,UAAY07xB,EAAc9juB,QAAQ53D,YAC/D3jB,EAAMsvxB,EAAat9jB,SAAWqtlB,EAAc9juB,QAC5Cv7E,EAAMi6nB,UAAU10V,UAAW,GAExBvlS,GAEXy8yB,EAAc19yB,UAAU6+yB,mBAAqB,SAAUnhB,EAAUn/sB,EAAUq3L,EAAU4qiB,GACjF,IAAI97yB,EAAQC,KACR87yB,EAAe97yB,KAAKutxB,WAAWt8gB,GAC/BjxQ,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAM86rB,SACpC7txB,KAAKuqxB,MAAM,GAAKuxB,GAAgB97yB,KAAKutxB,WAAWt8gB,GAAUr3L,KAE9D,IAAI03E,EAAStxJ,KAAKstxB,WAAWyL,EAAU+iB,GAAc,GACjDC,EAAgB/7yB,KAAKgB,QAAQ2B,cAAc,IAAM89wB,GAAyB,gBAC1Eu7B,EAAUD,EAAc3nyB,UACxB6nyB,EAAS,IAAIj8xB,KAAKsxI,EAAOtxJ,KAAKM,OAAO4lxB,YAAYhmwB,WAAWD,WAC5Di8xB,EAAO,IAAIl8xB,KAAKsxI,EAAOtxJ,KAAKM,OAAO4lxB,YAAY53jB,SAASruM,WACxDk8xB,EAAW,EAEX/vrB,EAAW,EAEXgwrB,EAAcN,EAAa,GAAG77xB,WAAag8xB,EAAOh8xB,WAClDktwB,GAAa2uB,EAAaz6yB,OAAO,GAAG,GAAI,GAAG4e,WAAag8xB,EAAOh8xB,UACnE,GAAIg8xB,GAAUC,GAAQE,EAAa,CAC/B,IAAIC,KAYJ,GAXIr8yB,KAAKi5yB,qBAAqBhoiB,KAC1BoriB,EAAoBr8yB,KAAKi5yB,qBAAqBhoiB,GAAUjqO,OAAO,SAAU1qC,GACrE,OAAOA,EAAM6+Q,OAAS49gB,EAAS59gB,OAE/Bn7Q,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAM86rB,SACpCwuB,EAAoBA,EAAkBr1wB,OAAO,SAAU1qC,GACnD,OAAOA,EAAMyD,EAAMO,OAAO4lxB,YAAYhmwB,YAAc47xB,EAAaliuB,IAC7Dt9E,EAAMyD,EAAMO,OAAO4lxB,YAAY53jB,UAAY6+jB,GAAa,IAAIntwB,MAAM87xB,EAAaliuB,IAAY,OAI1E,IAA7ByiuB,EAAkB5/yB,OAAc,CAChC,IAAI6/yB,EAAmBhrpB,EAAO90J,KAAKsiB,MAC/By9xB,EAAcv8yB,KAAKw8yB,gBAAgBlrpB,EAAQ13E,GAAU,EAAMq3L,GAC/D3/G,EAAOx8H,MAAQynxB,EACfv8yB,KAAKs5yB,YAAet5yB,KAAKs5yB,YAAciD,EAAeA,EAAcv8yB,KAAKs5yB,YACzE,IAAImD,EAAkBnrpB,EAAO90J,KAAKolS,QAAU,EACZ,QAA5B5hS,KAAKM,OAAOotM,YAAwB,EAAI,EACxC4umB,GAAoB,IACpBH,EAA+B,IAAnBG,EAA0BG,GAEtCh/yB,EAAkBuC,KAAKi5yB,qBAAqBhoiB,IAC5CjxQ,KAAKi5yB,qBAAqBhoiB,IAAavyQ,KAAW4yJ,EAAQ,MAAM,IAGhEtxJ,KAAKi5yB,qBAAqBhoiB,GAAUzsQ,KAAK9F,KAAW4yJ,EAAQ,MAAM,IAEtE,IAAIwxnB,KAAezhxB,MAAMC,KAAKtB,KAAKgB,QAAQ2B,cAAc,IAAMkzyB,IAAsBz7xB,UACjFsiyB,EAAS18yB,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAM86rB,OAAU7txB,KAAKorO,UAAU3uO,OAASm9E,EAAYq3L,EAAW4qiB,EACtGt/W,EAAev8b,KAAKgB,QAAQ2B,cAAc,IAAMg6yB,GAChD,eAAiBD,EAAS,GAAK,KAC/BE,EAAqB58yB,KAAKq6yB,yBAAyBthB,GAAU,EAAMznoB,EAAO90J,KAAMy0Q,GACpFttQ,GAAUi5yB,GzBnKY,yByBoKtB,IAAI38yB,GAASzD,KAAMu8xB,EAAU/3xB,QAAS47yB,EAAoB/jxB,QAAQ,GAClE74B,KAAKM,OAAOkmB,QAAQq2xB,GAAsB58yB,GACrCA,EAAK44B,QACN0ja,EAAa56b,YAAYi7yB,GAE7B,IAAIE,EAAYF,EAAmBlrwB,aAGnC,GAFA06E,IAA6B,IAAhBmwrB,EAAoBP,EAAWA,EAAWO,EAAcO,GAAe,EACpF72yB,EAAkB22yB,GAAsB5myB,MAASmmyB,EAAW,IAAKzvyB,IAAO0/G,EAAW,OAC/EmwrB,EAAc,EAAG,CACjBv8yB,KAAKm5yB,WAAW30yB,KAAKo4yB,GACrB,IAAK,IAAI99xB,EAAQ,EAAGqtT,EAAWmwe,EAAkBx9xB,EAAQqtT,EAAUrtT,IAC/D9e,KAAKg7yB,oBAAoBl4B,EAAWhkwB,EAAO49xB,GAGnDX,EAAcv4yB,aAAa,aAAcxD,KAAKs5yB,YAAYpsyB,YAC1D,IAAI6vyB,EAC0D,IADrC/8yB,KAAKM,OAAOkryB,cAAcv8oB,QAAUjvJ,KAAKs5yB,YAAc,EAC3E,EAAIwD,GAAe98yB,KAAKs5yB,YAAc,GAAKwD,GAChD98yB,KAAK25yB,mBAAmBoD,GACxB/8yB,KAAKg9yB,mBACLh9yB,KAAKqvxB,sBAAsButB,MAIvC7D,EAAc19yB,UAAU8+yB,mBAAqB,SAAUphB,EAAUn/sB,EAAUq3L,EAAU4qiB,GACjF,IAAIvqpB,EAAStxJ,KAAK07yB,eAAe3iB,EAAUn/sB,EAAUq3L,GACjDgriB,EAAS3qpB,EAAOtxJ,KAAK4rB,OAAO1L,WAC5Bg8xB,EAAO5qpB,EAAOtxJ,KAAK4rB,OAAO0iM,SAG1BliG,EAAW,EAEX0vrB,EAAe97yB,KAAKutxB,WAAWt8gB,GAC/BmriB,EAAcN,EAAa,GAAG77xB,WAAag8xB,EAAOh8xB,WAClDktwB,GAAa2uB,EAAaz6yB,OAAO,GAAG,GAAI,GAAG4e,WAAag8xB,EAAOh8xB,UACnE,GAAIg8xB,GAAUC,GAAQE,EAAa,CAC/B,IAAIU,EAAY,EACZnB,EAAgBC,GAAsB19B,GAAe49B,EAAaliuB,IAAY55E,KAAK43E,UAAW53E,KAAK63E,SAavGiluB,GAXIA,EADAnB,EAAc9juB,QAAQ53D,WAAai8xB,EAAKj8xB,WAAa07xB,EAAc/juB,UAAU33D,WAAag8xB,EAAOh8xB,UACrFjgB,KAAKi9yB,qBAAqBj9yB,KAAKs1R,WAAYqmhB,EAAc/juB,UAAW+juB,EAAc9juB,SAEzF8juB,EAAc9juB,QAAQ53D,WAAai8xB,EAAKj8xB,UACjCjgB,KAAKi9yB,qBAAqBj9yB,KAAKs1R,WAAY2mhB,EAAQN,EAAc9juB,SAExE8juB,EAAc/juB,UAAU33D,WAAag8xB,EAAOh8xB,UACrCjgB,KAAKi9yB,qBAAqBj9yB,KAAKs1R,WAAYqmhB,EAAc/juB,UAAWskuB,IAGnEA,EAAKj8xB,UAAYg8xB,EAAOh8xB,gBAA4BjgB,KAAKs1R,WAAat1R,KAAKy+wB,WAAaz+wB,KAAKmC,UAErFnC,KAAKs1R,WAAct1R,KAAKs1R,WAAawnhB,EAC1Db,EAAOh8xB,UAAY07xB,EAAc/juB,UAAU33D,YAC3CmsG,EAAWpsH,KAAKk9yB,YAAYjB,EAAQriuB,EAAUq3L,IAElD,IAAIksiB,EAAWn9yB,KAAKw8yB,gBAAgBlrpB,EAAQ13E,GAAU,EAAOq3L,GAC7D3/G,EAAOx8H,MAAQqoxB,EACfn9yB,KAAKo5yB,YAAY50yB,KAAK8sJ,GAClBtxJ,KAAKo5yB,YAAY38yB,OAAS,EACzBgB,EAAkBuC,KAAKk5yB,cAAciE,IAAcn9yB,KAAKk5yB,cAAciE,IAAa7rpB,GAChFtxJ,KAAKk5yB,cAAciE,GAAU34yB,KAAK8sJ,IAGtCtxJ,KAAKk5yB,iBACLl5yB,KAAKk5yB,cAAc10yB,MAAM8sJ,KAE7B,IAEI14H,GACA3mB,MAAOkryB,EAAU3wyB,KAvCX,KAuC0BwJ,QAHI,QAA5BhW,KAAKM,OAAOotM,YAAwB,GAAK,IAChC1tM,KAAKk5yB,cAAcz8yB,QAAUuD,KAAKk5yB,cAAcz8yB,OAAU,IAG3Eg7E,IAAKmC,EAAUA,SAAUiiuB,EAAUvqpB,OAAQA,EAAQ2/G,SAAUA,GAE7DntE,EAAW9jM,KAAKo9yB,sBAAsBxkxB,GAC9BkrK,EAAiB,SACzBrmM,EAAkBuC,KAAKg5yB,eAAe/niB,IACtCjxQ,KAAKg5yB,eAAe/niB,IAAavyQ,KAAW4yJ,EAAQ,MAAM,IAG1DtxJ,KAAKg5yB,eAAe/niB,GAAUzsQ,KAAK9F,KAAW4yJ,EAAQ,MAAM,IAEhE,IAAI+rpB,KAAqBh8yB,MAAMC,KAAKtB,KAAKgB,QAAQQ,iBAAiB,IAAM87yB,KACpEV,EAAqB58yB,KAAKq6yB,yBAAyBthB,GAAU,EAAOznoB,EAAOile,UAAWtlX,GAC1FhrQ,EAAkB22yB,GAAsB5myB,MAAS8tL,EAASq4mB,SAAUpmyB,OAAU+myB,EAAY,KAAMpwyB,IAAO0/G,EAAW,OAClH,IACI74D,EAAYupvB,EAAY,GADmE,GAA9EF,EAAmBp7yB,iBAAiB,IAAMi6yB,IAA2Bh/yB,QAEjFuD,KAAKM,OAAOg/tB,YAAcs9E,EAAmBj6yB,cAAc,IAAM6gxB,MAClEo5B,EAAmBj6yB,cAAc,IAAM6gxB,IAAmB9+wB,MAAM6uD,UAAYA,EAAY,MAExFvzD,KAAKM,OAAO4S,UACZjN,EAAkB22yB,GAAsBnwyB,MAASq3L,EAASy5mB,UAG1Dt3yB,EAAkB22yB,GAAsBpwyB,KAAQs3L,EAASy5mB,UAE7D,IAAItryB,EAAQjS,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAM86rB,OAAU7txB,KAAKorO,UAAU3uO,OAASm9E,EAAYq3L,EAAW4qiB,EACrG57yB,GAASzD,KAAMu8xB,EAAU/3xB,QAAS47yB,EAAoB/jxB,QAAQ,GAClE74B,KAAKM,OAAOkmB,QAAQq2xB,GAAsB58yB,GACrCA,EAAK44B,QACNwkxB,EAAgBpryB,GAAOtQ,YAAYi7yB,GAEvC58yB,KAAKqvxB,sBAAsButB,KAGnC7D,EAAc19yB,UAAU6hzB,YAAc,SAAUvmuB,EAAMc,EAAKw5L,GACvD,IACIr5L,EADgBgkuB,GAAsB19B,GAAel+wB,KAAKutxB,WAAWt8gB,GAAUx5L,IAAOz3E,KAAK43E,UAAW53E,KAAK63E,SACjFD,UAE9B,OADgE,IAA1CjB,EAAKvQ,WAAawR,EAAUxR,aAAqBuQ,EAAKrQ,aAAesR,EAAUtR,eAC7EtmE,KAAKs1R,WAAat1R,KAAKy+wB,UAAaz+wB,KAAKmC,UAErE42yB,EAAc19yB,UAAU4hzB,qBAAuB,SAAU3nhB,EAAYp9M,EAAWC,GAC5E,OAAUA,EAAQl4D,UAAYi4D,EAAUj4D,gBAA6BjgB,KAAKmC,SAAWnC,KAAKy+wB,WAAcnpf,GAE5GyjhB,EAAc19yB,UAAUmhzB,gBAAkB,SAAUlrpB,EAAQ75E,EAAKinsB,EAAUztgB,GACvE,IAEI9zM,EAFAp9D,EAAQC,KACR4rxB,EAAe5rxB,KAAKM,OAAO4lxB,YAE3Bs3B,KACAL,GAAY,EAEhB,GADAn9yB,KAAKk5yB,iBACDx6B,GACA,IAAKjhxB,EAAkBuC,KAAKi5yB,qBAAqBhoiB,IAAY,CACzD,IAAIwsiB,EAASv/B,GAAe,IAAIl+vB,KAAKhgB,KAAKutxB,WAAWt8gB,GAAUx5L,GAAKx3D,YACpEu9xB,EAAax9yB,KAAKi5yB,qBAAqBhoiB,GAAUjqO,OAAO,SAAUqmvB,GAC9D,OAAOnP,GAAemP,EAAIzB,EAAa1rwB,YAAYD,WAAaw9xB,EAAOx9xB,WACnEi+vB,GAAemP,EAAIzB,EAAat9jB,UAAUruM,WAAaw9xB,EAAOx9xB,YAElEjgB,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAMq4I,UAAU3uO,OAAS,IACvD+gzB,EAAax9yB,KAAK6rxB,uBAAuB7rxB,KAAKorO,UAAU6lC,GAAWusiB,SAI1E,CACD,IAAIE,EAAqBjgzB,EAAkBuC,KAAKg5yB,eAAe/niB,OAAajxQ,KAAKg5yB,eAAe/niB,GAC5F0siB,KACJxgvB,EAAY,IAAIwH,GAAUintB,EAAat9jB,QAAS,cAAeh9D,EAAOs6nB,EAAa1rwB,YAC/E2kD,IAAI,IAAIF,GAAUintB,EAAa1rwB,UAAW,WAAYoxI,EAAOs6nB,EAAat9jB,WAC9EtuN,KAAKo5yB,YAAc,IAAI51uB,IAAcE,KAAMg6uB,IAAqBz5uB,cAAa,IAAIZ,IAAQQ,MAAM1G,IAC3Fn9D,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAMq4I,UAAU3uO,OAAS,IACvDuD,KAAKo5yB,YAAcp5yB,KAAK6rxB,uBAAuB7rxB,KAAKorO,UAAU6lC,GAAWjxQ,KAAKo5yB,cAElFp5yB,KAAKo5yB,YAAYh6yB,QAAQ,SAAUrC,GAC/BogE,EAAY,IAAIwH,GAAUintB,EAAat9jB,QAAS,qBAAsBvxN,EAAI6uxB,EAAa1rwB,YACnF2kD,IAAI,IAAIF,GAAUintB,EAAa1rwB,UAAW,kBAAmBnjB,EAAI6uxB,EAAat9jB,WAClF,IAAIsvlB,EAAa,IAAIp6uB,IAAcE,KAAMg6uB,IAAqBz5uB,cAAa,IAAIZ,IAAQQ,MAAM1G,IACzFp9D,EAAMO,OAAOi+wB,kBAAkBxrrB,MAAMq4I,UAAU3uO,OAAS,IACxDmhzB,EAAa79yB,EAAM8rxB,uBAAuB9rxB,EAAMqrO,UAAU6lC,GAAW2siB,IAEzE,IAAIz2wB,EAAapnC,EAAMq5yB,YAAYpywB,OAAO,SAAU/e,GAAO,OAAoC,IAA7B21xB,EAAWr/yB,QAAQ0pB,KACrF,OAAO01xB,EAAcpjyB,OAAO4sB,KAEhCnnC,KAAKo5yB,YAAcp5yB,KAAKo5yB,YAAY7+xB,OAAOojyB,GAE3C,IAAK,IAAIv/yB,EAAK,EAAGy/yB,EADjBL,EAAax9yB,KAAKo5yB,YAC0Bh7yB,EAAKy/yB,EAAaphzB,OAAQ2B,IAAM,CACxE,IAAI6tG,EAAU4xsB,EAAaz/yB,GAEvB6T,EADWg6F,EACMn3E,MACpBr3B,EAAkBuC,KAAKk5yB,cAAcjnyB,IAAWjS,KAAKk5yB,cAAcjnyB,IAAUg6F,GAC1EjsG,KAAKk5yB,cAAcjnyB,GAAOzN,KAAKynG,IAG3C,GAAIuxsB,EAAW/gzB,OAAS,EAAG,CACvB,IAAIqhzB,EAAWN,EAAW5lxB,IAAI,SAAU76B,GAAO,OAAOA,EAAI+3B,QAC1DqoxB,EAAYW,EAASrhzB,OAAS,EAAKuD,KAAK8sxB,yBAAyBgxB,GAAY,EAEjF,OAAsB,IAAdX,EAAmB,EAAIA,GAEnCpE,EAAc19yB,UAAU+hzB,sBAAwB,SAAUn9yB,GAEtD,IAAK,IADDzD,GAAS2/yB,SAAUl8yB,EAAK+V,MAAOunyB,QAASt9yB,EAAKuM,MACxCrQ,EAAI,EAAG4hzB,EAAU/9yB,KAAKk5yB,cAAcz8yB,OAAQN,EAAI4hzB,EAAS5hzB,IAC9D,IAAKsB,EAAkBuC,KAAKk5yB,cAAc/8yB,IACtC,IAAK,IAAIonB,EAAI,EAAGy6xB,EAAUh+yB,KAAKk5yB,cAAc/8yB,GAAGM,OAAQ8mB,EAAIy6xB,EAASz6xB,IAAK,CACtE,IAAIs4xB,EAAW77yB,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAM86rB,OAAU7txB,KAAKorO,UAAU3uO,OAASwD,EAAKw3E,IAAOx3E,EAAKgxQ,SAClGhxQ,EAAK25E,SACL54E,EAAUhB,KAAKgB,QAAQ2B,cAAc,0BAA4Bk5yB,GACrE,GAAI76yB,EAAQmkE,kBAAoB,EAAG,CAC/B,IAAI84uB,EAAUj+yB,KAAKk5yB,cAAc/8yB,GAAGonB,GAAG43P,KACvC,GAAIn6Q,EAAQQ,iBAAiB,kBAAoBy8yB,EAAU,MAAMxhzB,OAAS,GAAKwhzB,IAAYh+yB,EAAKqxJ,OAAO6pH,KAAM,CACzG,IAAI+iiB,EAAOl9yB,EAAQ2B,cAAc,kBAAoBs7yB,EAAU,MAC3DziyB,WAAWvb,EAAK+V,QAAUwF,WAAW0iyB,EAAKx5yB,MAAMsR,SAC/ChW,KAAKM,OAAgB,UAAI49yB,EAAKx5yB,MAAM+H,OAAU+O,WAAWvb,EAAK+V,OAAS,GAAK7Z,EAAK,IAC9E+hzB,EAAKx5yB,MAAM8H,MAASgP,WAAWvb,EAAK+V,OAAS,GAAK7Z,EAAK,IAC3D+hzB,EAAKx5yB,MAAMsR,MAAUwF,WAAWvb,EAAK+V,OAAW,IAChDxZ,EAAK2/yB,SAAW+B,EAAKx5yB,MAAMsR,WAG9B,CACD,IAAImmyB,EAAWl8yB,EAAK+V,MACpB,GAAIvY,EAAkBuC,KAAKk5yB,cAAc/8yB,EAAI,IAAK,CAE9CggzB,IADwC,QAA5Bn8yB,KAAKM,OAAOotM,YAAwB,GAAK,IAChC1tM,KAAKk5yB,cAAcz8yB,QAAUuD,KAAKk5yB,cAAcz8yB,OAAU,IAEnF,IAAIiyE,GAAiB35C,SAASonxB,EAAU,GAAK,GAAKl8yB,EAAKgS,MAAS,IAChEzV,EAAK2/yB,SAAWA,EAChB3/yB,EAAK+gzB,QAAU7uuB,IAMnC,OAAOlyE,GAEXu8yB,EAAc19yB,UAAUs+yB,mBAAqB,SAAU5jyB,GACnD,IAAK,IAAI3X,EAAK,EAAGyE,EAAK7C,KAAK05yB,cAAet7yB,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC9CyE,EAAGzE,GACTsG,MAAMqR,OAAUA,EAAS,GAAM,KAE3C/V,KAAK22C,UAAUpe,QAAQv4B,KAAK05yB,cAAc,KAE9CX,EAAc19yB,UAAU2hzB,iBAAmB,WACvC,IAAIj9yB,EAAQC,KACZA,KAAKm5yB,WAAWnywB,OAAO,SAAUhmC,IACxBjB,EAAMO,OAAOkryB,cAAcv8oB,QAAUlvJ,EAAMu5yB,YAAc,GAC1D31yB,GAAU3C,GzBpXK,sByBqXfA,EAAQwC,aAAa,WAAY,QAGjCa,GAAarD,GzBxXE,sByByXfA,EAAQwC,aAAa,WAAY,QAGzC,IAAI26yB,EAAiBn+yB,KAAKgB,QAAQ2B,cAAc,IAAMghxB,IAClD3jxB,KAAKM,OAAOkryB,cAAcv8oB,QAC1B5qJ,GAAa85yB,GAAiBC,IAC9Bz6yB,GAAUw6yB,GAAiBE,MAG3Bh6yB,GAAa85yB,GAAiBE,IAC9B16yB,GAAUw6yB,GAAiBC,KAE9Bp+yB,KAAKs5yB,YAAc,EAAKj1yB,GAAa85yB,GAAiBrqB,IAAqBnwxB,GAAUw6yB,GAAiBrqB,OACpFzyxB,MAAMC,KAAKtB,KAAKgB,QAAQQ,iBAAiB,IAAMi4yB,KACxDzywB,OAAO,SAAUhmC,IACrBjB,EAAMO,OAAOkryB,cAAcv8oB,QAAUlvJ,EAAMu5yB,YAAc,EAAKj1yB,GAAarD,GAAU8yxB,IACnFnwxB,GAAU3C,GAAU8yxB,OAGhCilB,EAAc19yB,UAAUijzB,eAAiB,WACrC,IAAIC,EAAep9yB,EAAc,OAASkC,UAAWk9wB,GAAuBh9wB,OAAQ,sBACjEvD,KAAKgB,QAAQ2B,cAAc,IAAMg6yB,GAAuC,gBAC9Eh7yB,YAAY48yB,GACzB,IAAIxoyB,EAASwoyB,EAAa7swB,aAE1B,OADA6swB,EAAah6yB,SACNwR,GAEXgjyB,EAAc19yB,UAAUu+yB,kBAAoB,SAAUt9yB,GAClD,IAAI6K,EAASnH,KAAKgB,QAAQ2B,cAAc,IAAMghxB,IAC9C3jxB,KAAKM,OAAOkryB,cAAcv8oB,OAAS9nJ,EAAOrD,UAAUK,SAASi6yB,IAC7D,IAAIp+uB,EACAhgE,KAAKM,OAAOkryB,cAAcv8oB,QAC1B9nJ,EAAO3D,aAAa,QAAS,4BAC7B2D,EAAO3D,aAAa,aAAc,oBAClCw8D,GAAchgE,KAAKs5yB,YAAc,GAAKt5yB,KAAKs+yB,iBAAoB,IAG/Dn3yB,EAAO3D,aAAa,QAAS,0BAC7B2D,EAAO3D,aAAa,aAAc,kBAClCw8D,EAAa,EAAIhgE,KAAKs+yB,iBAAoB,GAE9Ct+yB,KAAK25yB,mBAAmB35uB,GACxBhgE,KAAKg9yB,mBACLh9yB,KAAK22C,UAAUpe,QAAQpxB,IAE3B4xyB,EAAc19yB,UAAUk+yB,kBAAoB,WACxCv5yB,KAAKM,OAAOyN,OAAOovnB,QAEhB47K,GACTt0E,IC9lBEn6oB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAoBxC6ztB,GAA4B,SAAUrztB,GAKtC,SAASqztB,EAAWl+yB,GAChB,IAAIP,EAAQorF,EAAO7pF,KAAKtB,KAAMM,IAAWN,KAKzC,OAJAD,EAAMi5yB,kBACNj5yB,EAAMiB,QAAUjB,EAAMO,OAAO69wB,WAAWnhJ,WACxCj9nB,EAAM6rB,OAAS7rB,EAAMO,OAAO4lxB,YAC5BnmxB,EAAMrD,mBACCqD,EAoTX,OA9TAuqF,GAAUk0tB,EAAYrztB,GAYtBqztB,EAAWnjzB,UAAUm+yB,mBAAqB,WAGtC,IAAK,IAFDz5yB,EAAQC,KAEH5B,EAAK,EAAGqgzB,KADWp9yB,MAAMC,KAAKtB,KAAKgB,QAAQQ,iBAAiB,IAAM87yB,KACfl/yB,EAAKqgzB,EAAqBhizB,OAAQ2B,IAAM,CAEhGmG,EADWk6yB,EAAqBrgzB,IAGpC4B,KAAK0+yB,YAAc1+yB,KAAK2+yB,0BAA0B3+yB,KAAKgB,QAASu/wB,IAChC,UAA5BvgxB,KAAKM,OAAOotM,YACZ1tM,KAAK4+yB,kBAAoB5+yB,KAAK6+yB,eAAe7+yB,KAAKgB,QAAQ2B,cAAc,mBAGxE3C,KAAK4+yB,kBAAoB,EAE7B,IAAIE,EAAsB,SAAUvxB,EAAYkiB,EAAU1B,GACtDhuyB,EAAMi5yB,kBACN,IAAIwE,EACAvuB,EAAW,EACX8e,GACA9e,EAAW8e,EAAQ5gH,WACnBptrB,EAAMkT,SAAW86xB,EAAQ96xB,SACzBlT,EAAMqsxB,WAAa2hB,EAAQ3hB,WAC3BoxB,EAAaz9yB,EAAMO,OAAOuouB,UAAUgjD,uBAAuBkiB,GAC3DhuyB,EAAMg/yB,aAAe19yB,MAAMC,KAAKvB,EAAMiB,QAAQQ,iBAAiB,IAAMg/wB,GAAuB,sBAAwByO,EAAW,SAG/HuuB,EAAaz9yB,EAAMO,OAAO0lxB,gBAC1BjmxB,EAAMg/yB,aAAe19yB,MAAMC,KAAKvB,EAAMiB,QAAQQ,iBAAiB,IAAMg/wB,MAEzEzgxB,EAAMwsxB,eAAeixB,GACrBz9yB,EAAMs1R,UAAYt1R,EAAMg/yB,UAAU19yB,OAAO,GAAG,GAAGuD,YAC/C7E,EAAMu1R,WAAav1R,EAAMg/yB,UAAU19yB,OAAO,GAAG,GAAGqwC,aAChD3xC,EAAMwtxB,WAAaA,EACnB,IAAIjwrB,EAAQv9F,EAAMwtxB,WAAW31vB,IAAI,SAAU++C,GAAQ,OAAQA,IAC3D52E,EAAMwqxB,SAEN,IADA,IAAIy0B,EAAWj/yB,EAAMO,OAAOi+wB,kBAAkBuP,Y7sBjEjC,E6sBiEkE2hB,EAAShzyB,OACjF6gG,EAAM7gG,OAAS,GAClBsD,EAAMwqxB,MAAM/lxB,KAAK84F,EAAMj1E,OAAO,EAAG22xB,IAErC,IAAK,IAAI5gzB,EAAK,EAAGy/yB,EAAeL,EAAYp/yB,EAAKy/yB,EAAaphzB,OAAQ2B,IAAM,CACxE,IAAIoV,EAAUqqyB,EAAaz/yB,GACvB2B,EAAMO,OAAO0rxB,eAAiB+hB,IAC9BhuyB,EAAMkT,SAAWlT,EAAMO,OAAO0rxB,aAAaqlB,YAAY79xB,IAG3D,IAAK,IAAI3Q,EAAK,EAAGo8yB,EADIl/yB,EAAMutxB,WAAW95wB,EAASzT,EAAMwtxB,YACD1qxB,EAAKo8yB,EAAiBxizB,OAAQoG,IAAM,CACpF,IAAIopG,EAAUgzsB,EAAiBp8yB,GAC/B9C,EAAMm/yB,uBAAuBjzsB,EAASgjrB,IAG9ClvxB,EAAMkT,SAAW,KACjBlT,EAAMqsxB,WAAa,MAEvB,GAAIpsxB,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAMq4I,UAAU3uO,OAAS,EAIvD,IAAK,IAAIoG,EAAK,EAAGk3yB,EAHD/5yB,KAAKM,OAAOkryB,cAAcC,iBACrCzryB,KAAKM,OAAO0rxB,aAAagD,kBAAkBhvxB,KAAKM,OAAOkryB,cAAcr+G,aACtEntrB,KAAKM,OAAO0rxB,aAAagD,kBACansxB,EAAKk3yB,EAAYt9yB,OAAQoG,IAAM,CACrE,IAAImtyB,EAAW+J,EAAYl3yB,GAC3Bi8yB,EAAoB9O,EAAST,YAAaS,EAASP,SAAUO,QAIjE8O,EAAoB9+yB,KAAKM,OAAO69wB,WAAWoxB,YAAavvyB,KAAKM,OAAOi+wB,kBAAkBkxB,WAG9F+O,EAAWnjzB,UAAUsjzB,0BAA4B,SAAUlkyB,EAAW6wW,GAClE,IAAIv1W,EAAS,EACTjQ,EAAK3E,EAAc,OAASkC,UAAWioX,IAAgB1pX,YAM3D,OALAkE,EAAGpB,MAAMC,WAAa,SACtBmB,EAAGpB,MAAMwP,SAAW,WACpBuG,EAAU9Y,YAAYmE,GACtBiQ,EAAS/V,KAAK6+yB,eAAe/4yB,GAC7BvB,EAAOuB,GACAiQ,GAEXyoyB,EAAWnjzB,UAAUwjzB,eAAiB,SAAU79yB,GAC5C,IAAI0D,EAAQyI,iBAAiBnM,GAC7B,OAAOA,EAAQ0wC,cAAgB3c,SAASrwB,EAAMqnD,UAAW,KAAO,IAAMh3B,SAASrwB,EAAMuqG,aAAc,KAAO,IAE9GuvsB,EAAWnjzB,UAAUg/yB,yBAA2B,SAAU/opB,EAAQ29nB,GAC9D,IAAI6H,EAAgBxloB,EAAOtxJ,KAAK4rB,OAAOgylB,UAAY59mB,KAAKM,OAAO0zxB,cAAcpowB,OAAOgylB,QAAQzpV,SACxFn0R,KAAKM,OAAOo4E,UAAU3E,YAAY,YAClCwmuB,EAAqBp5yB,EAAc,OACnCmC,GAAI,eAAiBguJ,EAAOtxJ,KAAK4rB,OAAOtoB,IACxCD,UAAWk9wB,GACX98wB,OACIwxxB,YAAa3joB,EAAO6pH,KAAMvpQ,KAAQ,SAAUo/G,SAAY,IACxD0I,gBAAiB,QAASguB,gBAAiB,QAASwtoB,eAAgB,OACpExhqB,aAAcojqB,KAGjBr5xB,EAAkBuC,KAAKiT,WACxBtP,GAAU42yB,GAAqBv6yB,KAAKiT,UAExC,IAAIunyB,EAAqBr5yB,EAAc,OAASkC,UAAWo3yB,KAC3DF,EAAmB54yB,YAAY64yB,GAC3Bx6yB,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAMq4I,UAAU3uO,OAAS,GACvD89yB,EAAmB/2yB,aAAa,mBAAoByrxB,EAAS/hxB,YAEjE,IAAImtB,EACAgrD,EAAYisE,EAAO90J,KACvB,GAAKiB,EAAkBuC,KAAKM,OAAOi+wB,kBAAkBiX,eAGhD,CACD,IAAI2pB,EAAiB7tpB,EAAOtxJ,KAAK4rB,OAAO8B,WAAa1tB,KAAKM,OAAO0zxB,cAAcpowB,OAAO8B,SAASymQ,SAAW,GACtGumhB,EAAqBv5yB,EAAc,OACnCkC,UAAWmgxB,GACXxhxB,WAAY80xB,EAAeA,GAAgBqoB,EAAgB,SAAW,IAAM,KAAOA,GAAgC,MAEnHxE,EAAuBx5yB,EAAc,OACrCkC,U1BjCc,U0BiCqBrD,KAAKM,OAAOg/tB,WAAa,IAAMw0D,GAAoB,IACtF9xxB,UAAWhC,KAAKM,OAAOw1xB,cAAczwsB,EAAUrlF,KAAK4rB,OAAO1L,cAE3D06xB,EAAqBz5yB,EAAc,OACnCkC,U1BrCc,U0BqCqBrD,KAAKM,OAAOg/tB,WAAa,IAAMw0D,GAAoB,IACtF9xxB,UAAWhC,KAAKM,OAAOw1xB,cAAczwsB,EAAUrlF,KAAK4rB,OAAO0iM,YAE/D,GAAgC,UAA5BtuN,KAAKM,OAAOotM,YACRp8C,EAAOtxJ,KAAK4rB,OAAO8yvB,WACnBrkvB,GAAmBqgxB,GACnB/2yB,GAAU+2yB,GAAqB,kBAE1Br1tB,EAAUvmE,OAAS,IAAMumE,EAAUw+M,SAAWx+M,EAAUu8M,QAC7DvnQ,GAAmBsgxB,EAAsBD,IAGzCrgxB,KACA12B,GAAU+2yB,GAAqB,iBAC1Br1tB,EAAUw+M,QACXxpQ,EAAgB71B,KAAKm2yB,GAEzBtgxB,EAAgB71B,KAAKk2yB,GAChBr1tB,EAAUu8M,SACXvnQ,EAAgB71B,KAAKo2yB,QAI5B,CACD,IAAIwE,OAAe,EACnB,GAAI9tpB,EAAOtxJ,KAAK4rB,OAAO8yvB,UAAW,CAE9B0gC,GAAgB1E,EADGv5yB,EAAc,OAASkC,UAAWmgxB,GAAmBxhxB,UAAW,iBAGlF,CACD,IAAIq9yB,EAAar/yB,KAAKM,OAAOw1xB,cAAczwsB,EAAUrlF,KAAK4rB,OAAO1L,YAC3D,MAAQlgB,KAAKM,OAAOw1xB,cAAczwsB,EAAUrlF,KAAK4rB,OAAO0iM,UAO9D8wlB,GAAgB1E,EANFv5yB,EAAc,OACxBkC,U1BtEM,U0BsE6BrD,KAAKM,OAAOg/tB,WAAa,IAAMw0D,GAAoB,IAAK9xxB,UAAWq9yB,IAExFl+yB,EAAc,OAC5BkC,UAAWghyB,GAAoBriyB,UAAWqjF,EAAUrlF,KAAK4rB,OAAO8B,aAIxE,IAAI5S,EAAO3Z,EAAc,OAASkC,UAAW,iBAC7C+B,EAAOg6yB,EAActkyB,GACrBuf,GAAmBvf,SAvDvBuf,EAAkBr6B,KAAKM,OAAOg2yB,wBAAZt2yB,CAAqCsxJ,GA4D3D,OAFAlsJ,KAAU/D,MAAMC,KAAK+4B,GAAkBmgxB,GACvCx6yB,KAAKs/yB,iBAAiBhupB,EAAQkppB,GACvBD,GAEXiE,EAAWnjzB,UAAUikzB,iBAAmB,SAAUhupB,EAAQkppB,GACtD,IAAIn1tB,EAAYisE,EAAO90J,KACvB,IAAKiB,EAAkB6zJ,EAAOtxJ,KAAK4rB,OAAOm/vB,iBAAkB,CACxD,IAAIj0pB,EAAaw6B,EAAOtxJ,KAAK4rB,OAAOtoB,MAAQguJ,EAAOtxJ,KAAK4rB,OAAOo/vB,cAC3DmK,GAAkCC,GACtColB,EAAmB74yB,YAAYR,EAAc,OACzCkC,UAAW+4tB,WAAiBtlmB,GAAa92H,KAAKM,OAAOg/tB,WAAa,IAAMw0D,GAAoB,OAGpG,GAAIzusB,EAAUw+M,OAAQ,CAIlBh/R,GAHe1D,EAAc,OACzBkC,UAAWo4yB,GAA4B,IAAMr/E,GAAW,kBAExCo+E,GAExB,GAAIn1tB,EAAUu8M,QAAS,CAInBx8R,GAHgBjE,EAAc,OAC1BkC,UAAWo4yB,GAA4B,IAAMr/E,GAAW,mBAExCo+E,KAG5BgE,EAAWnjzB,UAAU6jzB,uBAAyB,SAAU5izB,EAAO2yxB,GAC3D,IAAI/uwB,EAAY5jB,EAAM0D,KAAK4rB,OAAO1L,WAC9BouM,EAAUhyN,EAAM0D,KAAK4rB,OAAO0iM,SAC5B72I,EAAMz3E,KAAKM,OAAOy1yB,eAAe/1yB,KAAKutxB,WAAYrP,GAAeh+vB,IACrE,KAAIu3D,EAAM,GAAV,CAGA,IAAI8nuB,EAAev/yB,KAAKqzE,SAAS/2E,EAAO4jB,GACxC5jB,EAAMw4B,MAAQyqxB,EACd,IACIzC,EAAY98yB,KAAK0+yB,YACrB1+yB,KAAKg5yB,eAAex0yB,KAAK9F,KAAWpC,EAAO,MAAM,IACjD,IAAIkjzB,EAAaljzB,EAAME,KAAKsiB,MAC5B,GAAIoB,EAAUD,WAAaquM,EAAQruM,UAAW,CAC1C,IAAIk8xB,EAAYqD,EAAax/yB,KAAKq1R,UAAa,EAC3CoqhB,EAASz/yB,KAAK++yB,UAAUtnuB,GACxBiouB,EAAUH,GAAgBzC,EA5N1B,GA6NJ,GAAI98yB,KAAKs1R,WAAat1R,KAAK4+yB,mBAAsBW,EAAe,IAAMzC,EA7NlE,GAqNkB,GAQ+F,CACjH,IAAIF,EAAqB58yB,KAAKq6yB,yBAAyB/9yB,EAAO2yxB,GAC9DjvxB,KAAKowxB,mBAAmBwsB,EAAoBtgzB,EAAO,kBAAmB0D,KAAKosxB,YAC3EpsxB,KAAKqvxB,sBAAsButB,GAC3B32yB,EAAkB22yB,GAAsB5myB,MAASmmyB,EAAW,KAAMzvyB,IAAOgzyB,EAAS,OAClF,IAAIz/yB,GAASzD,KAAMF,EAAO0E,QAAS47yB,EAAoB/jxB,QAAQ,GAE/D,GADA74B,KAAKM,OAAOkmB,QAAQq2xB,GAAsB58yB,GACtCA,EAAK44B,OAEL,YADA74B,KAAKg5yB,eAAe5spB,MAGxB,GAAIqzpB,EAAO98yB,cAAc,IAAM26yB,IAC3BmC,EAAO98yB,cAAc,IAAM26yB,IAA+B37yB,YAAYi7yB,OAErE,EACG7qyB,EAAU5Q,EAAc,OAASkC,UAAWi6yB,MACxC37yB,YAAYi7yB,GACpB6C,EAAO99yB,YAAYoQ,SAIvB,IAAK,IAAI5V,EAAI,EAAGA,EAAIqjzB,EAAYrjzB,IAAK,CACjC,IAAIwjzB,EAAW3/yB,KAAK++yB,UAAUtnuB,EAAMt7E,GACpC,GAAIwjzB,GAAYlizB,EAAkBkizB,EAASh9yB,cAAc,IAAMihxB,KAA4B,CACvF,IAAI1rsB,EAAY,IAAIl4D,KAAKhgB,KAAKutxB,WAAW91sB,EAAMt7E,GAAG8jB,WAC9Ck4D,EAAUg1sB,GAAantxB,KAAKutxB,WAAW91sB,EAAMt7E,GAAI,GACjDgxrB,EAAawyH,EAAS9syB,aAAa,oBACnCs4wB,EAAenrxB,KAAK4/yB,kBAAkB1nuB,EAAWC,EAASg1mB,GAC1D0yH,EAAU7/yB,KAAKs1R,WAAat1R,KAAK4+yB,kBApC3B,GAqCNkB,EAAmBzzyB,KAAK+S,MAAMygyB,GAAW/C,EA1PrD,IA2PYh+xB,EAASqswB,EAAa1uxB,OAASqjzB,GAAqB,EAAI,EAAK30B,EAAa1uxB,OAASqjzB,EACnF1E,EAAuBj6yB,EAAc,OACrCkC,UAAWugxB,GACX5hxB,UAAW,IAAM8c,EAAQ,UAAY9e,KAAKM,OAAOg/tB,WAAa,GAAKt/tB,KAAKM,OAAOo4E,UAAU3E,YAAY,SACrGtwE,OACIutH,SAAY,IACZ+urB,kBAAmB7nuB,EAAUj4D,UAAU/S,WACvC8yyB,gBAAiB7nuB,EAAQl4D,UAAU/S,cAQ3C,GALKzP,EAAkB0vrB,IACnBiuH,EAAqB53yB,aAAa,mBAAoB2prB,GAE1DiuH,EAAqB12yB,MAAMgI,IAAMmzyB,EAAU,KAC3CzE,EAAqB12yB,MAAMsR,MAAQ2pyB,EAAS/6yB,YAAc,KACtD+6yB,EAASh9yB,cAAc,IAAM26yB,IAC7BqC,EAASh9yB,cAAc,IAAM26yB,IAA+B37yB,YAAYy5yB,OAEvE,CACD,IAAIrpyB,GAAAA,EAAU5Q,EAAc,OAASkC,UAAWi6yB,MACxC37yB,YAAYy5yB,GACpBuE,EAASh+yB,YAAYoQ,GAEzBxM,GAAanB,IAAIg3yB,EAAsB,QAASp7yB,KAAKigzB,mBAAoBjgzB,WAM7Fw+yB,EAAWnjzB,UAAUukzB,kBAAoB,SAAU1nuB,EAAWC,EAASg1mB,GACnE,IAAIyrG,EACJ,GAAIn7xB,EAAkB0vrB,GAClByrG,EAAiB54xB,KAAKmrxB,aAAajzsB,EAAWC,OAE7C,CACD,IAAI37E,EAAOwD,KAAKM,OAAO0rxB,aAAagD,kBAAkBj6vB,SAASo4pB,EAAY,KAC3EyrG,EAAiB54xB,KAAKmrxB,aAAajzsB,EAAWC,OAASh9E,EAAWqB,GAEtE,OAAOo8xB,GAEX4lB,EAAWnjzB,UAAUg4E,SAAW,SAAUi+E,EAAQ36E,GAC9C,IAAIwmuB,GAAY,EACZ/3B,EAAeplxB,KAAKg5yB,eACxB,GAAI5zB,EAAa3oxB,OAAS,EAAG,CAEzB,IAAK,IADDyjzB,KACK9hzB,EAAK,EAAG+hzB,EAAiB/6B,EAAchnxB,EAAK+hzB,EAAe1jzB,OAAQ2B,IAAM,CAC9E,IAAIivxB,EAAM8yB,EAAe/hzB,GACpB8/wB,GAAemP,EAAIrtxB,KAAK4rB,OAAO1L,YAAYD,WAAai+vB,GAAevnsB,GAAM12D,WAC7Ei+vB,GAAemP,EAAIrtxB,KAAK4rB,OAAO0iM,UAAUruM,WAAai+vB,GAAevnsB,GAAM12D,WAC5EigyB,EAAiB17yB,KAAK6oxB,GAG9B,IAAIywB,EAAWoC,EAAiBtoxB,IAAI,SAAU76B,GAAO,OAAOA,EAAI+3B,QAChEqoxB,EAAYW,EAASrhzB,OAAS,EAAKuD,KAAK8sxB,yBAAyBgxB,GAAY,EAEjF,OAAsB,IAAdX,EAAmB,EAAIA,GAEnCqB,EAAWnjzB,UAAU4kzB,mBAAqB,SAAU3jzB,GAChD,IAAI6K,EAAStB,EAAQvJ,EAAM6K,OAAQ,IAAMy8wB,IACrC1rsB,EAAY,IAAIl4D,KAAK+U,SAAS5tB,EAAO0L,aAAa,mBAAoB,KAC1E,IAAKpV,EAAkBy6E,IAAcl4E,KAAKM,OAAOg/tB,WAC7Ct/tB,KAAKM,OAAO0G,eAAgBgnM,aAAc91H,IAAa,GACvDl4E,KAAKM,OAAO09wB,WAAW,WAEtB,CACD,IAAI7lsB,EAAU,IAAIn4D,KAAK+U,SAAS5tB,EAAO0L,aAAa,iBAAkB,KAClEs6qB,EAAahmrB,EAAO0L,aAAa,oBAEjCutyB,GAAkBzpuB,KAAMuB,EAAW57E,MADlB0D,KAAK4/yB,kBAAkB1nuB,EAAWC,EAASg1mB,GACFnsrB,QAAS1E,EAAM6K,QAC7EnH,KAAKM,OAAOgoxB,WAAW8P,eAAegoB,EAAejzH,KAGtDqxH,GACT/5E,ICpVEn6oB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GA0BxC01tB,GAA8B,SAAUl1tB,GAKxC,SAASk1tB,EAAa//yB,GAClB,IAAIP,EAAQorF,EAAO7pF,KAAKtB,KAAMM,IAAWN,KAKzC,OAJAD,EAAMugzB,oBACNvgzB,EAAMwgzB,UAAY,aAClBxgzB,EAAMykxB,sBAAuB,EAC7BzkxB,EAAMygzB,eAAiB,IAAI5H,GAAoBt4yB,GACxCP,EAqnBX,OA/nBAuqF,GAAU+1tB,EAAcl1tB,GAYxBk1tB,EAAahlzB,UAAUqB,iBAAmB,WACtCsD,KAAKM,OAAOslF,GAAG66tB,GAAsBzgzB,KAAK22wB,eAAgB32wB,MAC1DA,KAAKM,OAAOslF,GAAG0lsB,GAAiBtrxB,KAAK65yB,aAAc75yB,OAEvDqgzB,EAAahlzB,UAAUuB,oBAAsB,WACzCoD,KAAKM,OAAO0lF,IAAIy6tB,GAAsBzgzB,KAAK22wB,gBAC3C32wB,KAAKM,OAAO0lF,IAAIslsB,GAAiBtrxB,KAAK65yB,eAE1CwG,EAAahlzB,UAAUw+yB,aAAe,WAClC,GAAI75yB,KAAKM,OAAOi+wB,kBAAkBC,UAAU/+uB,OAAQ,CAC9B,IAAIs5wB,GAAc/4yB,KAAKM,QAC7Bk5yB,yBAEX,CACiB,IAAIgF,GAAWx+yB,KAAKM,QAC1Bk5yB,uBAGpB6G,EAAahlzB,UAAUykpB,gBAAkB,SAAUj/oB,GAC/C,IAAIsG,EAAStG,EAAEsG,OACXnH,KAAKM,OAAOi+wB,kBAAkBC,UAAU/+uB,SACxCz/B,KAAK0gzB,sBAAsBv0yB,UAAYhF,EAAOgF,WAElDnM,KAAK2gzB,wBAAwB/jyB,WAAW5Q,WAAa7E,EAAO6E,WAC5DhM,KAAKM,OAAOkryB,cAAc9+xB,IAAMvF,EAAOgF,UACvCnM,KAAKM,OAAOkryB,cAAch/xB,KAAOrF,EAAO6E,WACxChM,KAAKM,OAAOgoxB,WAAWkH,kBAE3B6wB,EAAahlzB,UAAUs7wB,eAAiB,SAAU12wB,GAC9C,IAAI2gzB,EAAkB,EAClB5gzB,KAAKM,OAAO8qpB,eACZw1J,GAAmB5gzB,KAAKM,OAAO8qpB,aAAa0zH,mBAAmBptuB,cAE/D1xC,KAAKM,OAAOkryB,cAAcC,kBAC1BmV,GAAmB5gzB,KAAKM,OAAOU,QAAQ2B,cAAc,IAAMypyB,IAA6B16vB,cAE5F,IAAImvwB,EAAY7gzB,KAAK0gzB,sBACjBtmxB,EAAUp6B,KAAK8gzB,uBACfl8tB,EAAS5kF,KAAK2gzB,wBACdI,EAAiBx+yB,EAAWvC,KAAKM,OAAOU,QAAQ0wC,aAAekvwB,EAAkBh8tB,EAAOlzC,aAAe,GACvG1xC,KAAKM,OAAOg/tB,WACZllsB,EAAQ11B,MAAMqR,OAASgryB,GAGnB/gzB,KAAKM,OAAOi+wB,kBAAkBC,UAAU/+uB,SACxCohxB,EAAUn8yB,MAAMqR,OAASgryB,GAE7B3mxB,EAAQ11B,MAAMqR,OAASgryB,GAE3B,IAAIp3R,EAAiBq3R,KAEjB5mxB,EAAQx1B,YAAcw1B,EAAQ/M,YAAc,GAC5Cu3D,EAAOhoE,WAAWlY,MAAMzE,EAAKm/wB,cAAc96uB,QAAUqlf,EAAiB,EAAI,MAAQ,MAClF/kc,EAAOlgF,MAAMzE,EAAKm/wB,cAAchmtB,SAAWuwd,EAAiB,EAAIA,EAAiB,EAAI,KAAO,QAG5F/kc,EAAOhoE,WAAWlY,MAAMzE,EAAKm/wB,cAAc96uB,QAAU,GACrDsgD,EAAOlgF,MAAMzE,EAAKm/wB,cAAchmtB,SAAW,IAG3Cp5D,KAAKM,OAAOi+wB,kBAAkBC,UAAU/+uB,SACxCohxB,EAAUn8yB,MAAMo2d,cAAiB1gc,EAAQsX,aAAetX,EAAQ9M,aAAe,EAAK/qB,EAAWonhB,GAAkB,IAEjH3phB,KAAKM,OAAOkryB,cAAchtqB,WAC1Bx+H,KAAKihzB,mBACLjhzB,KAAKM,OAAOkryB,cAAchtqB,WAAY,GAGtCx+H,KAAK8gzB,uBAAuB30yB,UAAYnM,KAAKM,OAAOkryB,cAAc9+xB,KAG1E2zyB,EAAahlzB,UAAU4lzB,iBAAmB,WACtC,GAAIjhzB,KAAKM,OAAO4oyB,UAAUhmc,UAAW,CACjC,IAAIg+c,EAAoBlhzB,KAAKgB,QAAQ2B,cAAc,IAAMu0yB,IACrDgK,IACAlhzB,KAAK8gzB,uBAAuB30yB,UAAY+0yB,EAAkB9syB,UAC1DpU,KAAKM,OAAOkryB,cAAc9+xB,IAAMw0yB,EAAkB9syB,UAClDpU,KAAKM,OAAOkryB,cAAch/xB,KAAO,KAI7C6zyB,EAAahlzB,UAAUg8yB,aAAe,SAAU/vsB,GAC5C,IAAI3wB,EAAO32E,KAAKM,OAAO4qM,UAAUjgG,UAAU3D,GAAQ5lC,SAAU,OACzDjkE,EAAkBk5E,KAGtB32E,KAAK8gzB,uBAAuB30yB,UAAYnM,KAAKmhzB,mBAAmBxquB,KAEpE0puB,EAAahlzB,UAAU6lxB,qBAAuB,WAC1C,IAAI/unB,EAAQnyJ,KAAK4vyB,aAAa5vyB,KAAKuvyB,YAAavvyB,KAAKM,OAAOi+wB,kBAAkBkxB,UAC1E2R,KACJ,GAAIphzB,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAMq4I,UAAU3uO,OAAS,GAEvD,GADA2kzB,EAAephzB,KAAKM,OAAO0rxB,aAAa+iB,uBAAuB58oB,GAC3DnyJ,KAAKM,OAAOkryB,cAAcC,gBAAiB,CAC3C,IAAIqC,EAAgB9tyB,KAAKM,OAAO0rxB,aAAagD,kBAAkBhvxB,KAAKM,OAAOkryB,cAAcr+G,YACrFuiH,EAAe5B,EAAc/e,aAAa+e,EAAc78hB,SAASy9hB,gBACjEiB,EAAa7B,EAAc/e,aAAa+e,EAAc78hB,SAAS09hB,cAEnEyS,GADgBphzB,KAAK4vyB,aAAa9B,EAAcyB,YAAazB,EAAc2B,SAAUC,EAAcC,UAKvGyR,EAAa58yB,KAAK2tJ,GAGtB,OADAnyJ,KAAKqhzB,UAAYD,EACVA,GAEXf,EAAahlzB,UAAUu0yB,aAAe,SAAUL,EAAaE,EAAU6R,EAAeC,QAC5D,IAAlBD,IAA4BA,EAAgBthzB,KAAKM,OAAO4oyB,UAAU3ryB,YAClD,IAAhBgkzB,IAA0BA,EAAcvhzB,KAAKM,OAAO4oyB,UAAUrqxB,KAIlE,IAAK,IAHDywxB,KACA/xyB,EAAQyC,KAAKM,OAAO4qM,UAAUjgG,UAAUq2sB,GAAiB5/uB,SAAU,OACnE7iD,EAAM7e,KAAKM,OAAO4qM,UAAUjgG,UAAUs2sB,GAAe7/uB,SAAU,OAC1DtjE,EAAK,EAAGojzB,EAAgBjS,EAAanxyB,EAAKojzB,EAAc/kzB,OAAQ2B,IAAM,CAC3E,IAAIqiE,EAAM+gvB,EAAcpjzB,GACpB0F,GAAa48wB,IACb1gxB,KAAKk4yB,cAAcz3uB,IACnB38D,EAAUU,K3B9GK,iB2BgHnB8qyB,EAAQ9qyB,MACJmyE,KAAMlW,EAAK/5D,KAAM,aAAcrD,UAAWS,EAAW4xR,QAAS,EAC9D+5gB,SAAUA,EAAU73tB,UAAW,IAAI53D,MAAMziB,GAAQs6E,QAAS,IAAI73D,MAAMnB,KAG5E,OAAOywxB,GAEX+Q,EAAahlzB,UAAUomzB,gBAAkB,SAAU9quB,GAC/C,OAAQ32E,KAAK82yB,eAAe72xB,WAAa02D,EAAK12D,WAAejgB,KAAK+2yB,aAAa92xB,WAAa02D,EAAK12D,WAErGogyB,EAAahlzB,UAAUq7yB,qBAAuB,WAC1C,IAAI32yB,EAAQC,KACZ,GAAIA,KAAKM,OAAOohzB,mBAAqB1hzB,KAAKyhzB,gBAAgB,IAAIzhyB,MAAS,CACnE,IAAI0uE,GAAO,EAEX,GADA1uF,KAAKsgzB,qBACA7izB,EAAkBuC,KAAKM,OAAO0rxB,eAAkBhsxB,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAMq4I,UAAU3uO,OAAS,IACvGuD,KAAKM,OAAOkryB,cAAcC,gBAE3B,IAAK,IADD3sxB,EAAQ,EACH1gB,EAAK,EAAGyE,EAAK7C,KAAKM,OAAO0rxB,aAAagD,kBAAmB5wxB,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACpF,IAAI6yQ,EAAWpuQ,EAAGzE,GAElB,IADI6T,EAAQjS,KAAKM,OAAOy1yB,eAAe9kiB,EAASs+hB,YAAarxB,GAAe,IAAIl+vB,SACnE,EAAG,CACZ,IAAIivwB,EAAWjvxB,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAM86rB,OAC9C7txB,KAAKM,OAAO0rxB,aAAagD,kBAAkBvyxB,OAASwV,EAAS6M,EAAQA,EAAQ7M,EAClFjS,KAAKsgzB,iBAAiB97yB,KAAKyqxB,GAC3BvgsB,GAAO,EAEX5vE,GAAS9e,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAM86rB,OAAS,EAAI58gB,EAASs+hB,YAAY9yyB,WAGlF,CACD,IAEIwV,EAFAs9xB,EAAevvyB,KAAKM,OAAOkryB,cAA6B,gBACxDxryB,KAAKM,OAAO0rxB,aAAagD,kBAAkBhvxB,KAAKM,OAAOkryB,cAAcr+G,YAAYoiH,YAAcvvyB,KAAKuvyB,aACpGt9xB,EAAQjS,KAAKM,OAAOy1yB,eAAexG,EAAarxB,GAAe,IAAIl+vB,SAC1D,IACThgB,KAAKsgzB,iBAAiB97yB,KAAKyN,GAC3By8E,GAAO,GAGXA,GACA1uF,KAAK2hzB,4BACDlkzB,EAAkBuC,KAAK4hzB,6BACvB5hzB,KAAK4hzB,0BAA4B/lzB,OAAOuG,YAAY,WAAcrC,EAAM4hzB,6B9sBnMjE,O8sBuMX3hzB,KAAK6hzB,sCAIT7hzB,KAAK6hzB,kCAGbxB,EAAahlzB,UAAUwmzB,+BAAiC,WAC/CpkzB,EAAkBuC,KAAK4hzB,6BACxB/lzB,OAAOyG,cAActC,KAAK4hzB,2BAC1B5hzB,KAAK4hzB,0BAA4B,KACjC5hzB,KAAK8hzB,uCAGbzB,EAAahlzB,UAAUymzB,mCAAqC,WACxD,IAAIC,EAAiB/hzB,KAAKgB,QAAQ2B,cAAc,mBAC5Cq/yB,EAAchizB,KAAKgB,QAAQ2B,cAAc,uBACzCo/yB,GACAx9yB,EAAOw9yB,GAEPC,GACAz9yB,EAAOy9yB,IAGf3B,EAAahlzB,UAAUsmzB,0BAA4B,WAC/C,IAAI3hzB,KAAKM,OAAO0mF,YAAhB,CAGAhnF,KAAK8hzB,qCACL,IAAIG,EAAWjizB,KAAKM,OAAOysoB,kBAAkBx0W,KAAK,GAC9C2phB,EAAYD,EAASngvB,MAAM,GAC3Bw2kB,EAAc2pK,EAASngvB,MAAM9hE,KAAKsgzB,iBAAiB,IACnDjrhB,EAAY,IAAM4shB,EAASngvB,MAAMrlE,OACjC0lzB,EAAiB9shB,GAAaijX,EAAYz/W,UAAYqphB,EAAUrphB,WAAc,IAC9EuphB,EAAmB/shB,EAAY,IAC/B3oR,EAAM1M,KAAKmhzB,mBAAmB,IAAInhyB,MAClCqiyB,EAAU9/yB,EAAWmK,GACrB41yB,EAAgBtizB,KAAK0gzB,sBACrBjghB,EAAWp0R,KAAK+S,MAAM1S,EAAMw1yB,EAAUxwwB,cAC1C,IAAIj0C,EAAkBgjS,GAAtB,CAGAp8R,EAAYi+yB,EAAc9gzB,iBAAiB,IAAM+gzB,IAAwBA,IACzE5+yB,GAAU2+yB,EAAc9gzB,iBAAiB,MAAMi/R,GAAU34J,WAAYy6qB,IACrE,IAAIC,EAAerhzB,EAAc,OAASkC,U3BxKd,uB2ByKxB2+yB,KACAS,EAA0BthzB,EAAc,OACxCkC,U3BnLyB,sB2BoLzBE,OAAQ,SAAWhB,EAAW4/yB,GAAiB,4BAA8BE,IAEjFL,EAAYx9yB,KAAKi+yB,GACjB,IAAK,IAAIrkzB,EAAK,EAAGyE,EAAK7C,KAAKsgzB,iBAAkBlizB,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC/D,IAAIskzB,EAAY7/yB,EAAGzE,GAEnB+jzB,EAAiB9shB,IADjBijX,EAAc2pK,EAASngvB,MAAM4gvB,IACa7phB,UAAYqphB,EAAUrphB,WAAc,IAC9E,IAAI8phB,EAAyBxhzB,EAAc,OACvCkC,U3B9LoB,qB2B+LpBE,OAAQ,SAAW6+yB,EAAmB,MACjCpizB,KAAKM,OAAO4S,UAAY,SAAW,SAAWivyB,EAAgB,QAAUE,IAEjFL,EAAYx9yB,KAAKm+yB,GAErB,IAAIZ,EAAiB5gzB,EAAc,OAC/Ba,UAAWhC,KAAKM,OAAOw1xB,cAAc,IAAI91wB,MACzC3c,U3BxMoB,iB2ByMpBE,OAAQ,2DAA6D8+yB,IAEzEx9yB,GAASk9yB,GAAiBO,GAC1BP,EAAer9yB,MAAMgI,IAAMnK,EAAWw/yB,EAAe3tyB,UAAa2tyB,EAAerwwB,aAAe,GAChG7sC,EAAQm9yB,EAAaQ,GACrB39yB,GAAS29yB,GAAexizB,KAAK4izB,wBAAwBjgzB,cAAc,kBAEvE09yB,EAAahlzB,UAAU8lzB,mBAAqB,SAAUxquB,GAClD,IAAIiB,EAAY53E,KAAK82yB,eAErB,OADgE,IAA1CnguB,EAAKvQ,WAAawR,EAAUxR,aAAqBuQ,EAAKrQ,aAAesR,EAAUtR,eAC7EtmE,KAAK6izB,oBAAsB7izB,KAAKM,OAAOi+wB,kBAAkBC,UAAUC,UACvFz+wB,KAAKM,OAAOi+wB,kBAAkBC,UAAUr8wB,UAEhDk+yB,EAAahlzB,UAAUwnzB,kBAAoB,WACvC,OAAO7izB,KAAKgB,QAAQ2B,cAAc,iBAAiB+uC,cAEvD2uwB,EAAahlzB,UAAUynzB,aAAe,SAAUnsuB,EAAMjwE,EAAMymrB,GACxD,IAAI9tY,EACJ,OAAQ34S,GACJ,IAAK,aACD,GAAI1G,KAAKM,OAAOi+wB,kBAAkBy0B,mBAAoB,CAClD,IAAI/yyB,GAAS02E,KAAMA,EAAMjwE,KAAMA,GAC/B24S,EAASr/S,KAAKM,OAAO61yB,uBAAZn2yB,CAAoCC,QAG7Co/S,EAASrwS,GAnRF,8HAmRgChP,KAAK83yB,aAAnC9oyB,EAAmD2nE,KAAMA,IAEtE,MACJ,IAAK,YACD,GAAI32E,KAAKM,OAAOi+wB,kBAAkBC,UAAUo0B,kBAAmB,CACvD3yyB,GAAS02E,KAAMA,EAAMjwE,KAAMA,GAC/B24S,EAASr/S,KAAKM,OAAO81yB,sBAAZp2yB,CAAmCC,QAG5Co/S,EAASrwS,GA1RH,gCA0RgChP,KAAK83yB,aAAlC9oyB,EAAkD2nE,KAAMA,IAErE,MACJ,IAAK,YACD,GAAI32E,KAAKM,OAAOi+wB,kBAAkBC,UAAUq0B,kBAAmB,CACvD5yyB,GAAS02E,KAAMA,EAAMjwE,KAAMA,GAC/B24S,EAASr/S,KAAKM,OAAO+1yB,sBAAZr2yB,CAAmCC,QAG5Co/S,EAASrwS,GAlSH,SAkSgChP,KAAK83yB,aAAlC9oyB,EAAkD2nE,KAAMA,IAErE,MACJ,IAAK,cACD,GAAI32E,KAAKM,OAAOyyyB,aAAc,CACtB9yyB,GAAS02E,KAAMA,EAAMjwE,KAAMA,EAAMymrB,WAAYA,GACjD9tY,EAASr/S,KAAKM,OAAO41yB,iBAAZl2yB,CAA8BC,IAInD,OAAOo/S,GAEXghgB,EAAahlzB,UAAU07uB,aAAe,SAAUrwuB,GAC5C1G,KAAKk+nB,SAAS/8nB,EAAc,OAASkC,UAAW0/yB,MAChD,IAAI91gB,GAAW,kBAAmBjtS,KAAKugzB,WACvCtzgB,EAAQzoS,KAAKkC,GACT1G,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAM86rB,QACpC5gf,EAAQzoS,KAAK,aAEZxE,KAAKM,OAAOi+wB,kBAAkBC,UAAU/+uB,QACzC97B,GAAU3D,KAAKgB,U3BQI,sB2BR8BhB,KAAKugzB,YAE1DvgzB,KAAK+9nB,YAAYr3nB,GACjB/C,GAAU3D,KAAKgB,SAAUisS,GACzBjtS,KAAKgB,QAAQW,YAAY3B,KAAKg4yB,kBAAkBgL,KAChDhjzB,KAAKqhzB,UAAYrhzB,KAAKkhxB,uBACtBlhxB,KAAK4/S,eACL5/S,KAAK2sH,gBACD3sH,KAAKM,OAAOi+wB,kBAAkBC,UAAU/+uB,QACxCz/B,KAAK02yB,uBAEL12yB,KAAKM,OAAOkryB,cAAcC,kBAAoBzryB,KAAKM,OAAOU,QAAQ2B,cAAc,IAAMwpyB,KACtFnsyB,KAAK24yB,6BAET34yB,KAAKM,OAAOyN,OAAO8ioB,QAEvBwvK,EAAahlzB,UAAUukT,aAAe,WAClC,IAAIopF,EAAK7nY,EAAc,MACnB8hzB,EAAS9hzB,EAAc,MAE3B,GADA8hzB,EAAOthzB,YAAY3B,KAAKkjzB,qBACpBljzB,KAAKM,OAAOi+wB,kBAAkBC,UAAU/+uB,OAAQ,CAChD,IAAI0jxB,EAAWhizB,EAAc,MAAQkC,U3BvSlB,kB2BwSnB8/yB,EAASxhzB,YAAY3B,KAAKojzB,oBAC1Bp6a,EAAGrnY,YAAYwhzB,GAEnBn6a,EAAGrnY,YAAYshzB,GACfp+yB,GAASmkY,GAAKhpY,KAAKgB,QAAQ2B,cAAc,WAE7C09yB,EAAahlzB,UAAUsxH,cAAgB,WACnC,IAAIq8Q,EAAK7nY,EAAc,MACnBkizB,EAASlizB,EAAc,MAC3B,GAAInB,KAAKM,OAAOg/tB,WAAY,CACxB+jF,EAAO7/yB,aAAa,UAAYxD,KAAKM,OAAOi+wB,kBAAkBC,UAAU/+uB,OAAS,IAAM,KACvF,IAAI6jxB,EAAkBnizB,EAAc,OAASkC,U3BjSrB,uB2BkSpBrD,KAAKM,OAAOi+wB,kBAAkBC,UAAU/+uB,QACxC6jxB,EAAgB3hzB,YAAY3B,KAAKujzB,mBAErCD,EAAgB3hzB,YAAY3B,KAAKwjzB,qBACjCH,EAAO1hzB,YAAY2hzB,GACnBt6a,EAAGrnY,YAAY0hzB,OAEd,CAED,GADAA,EAAO1hzB,YAAY3B,KAAKwjzB,qBACpBxjzB,KAAKM,OAAOi+wB,kBAAkBC,UAAU/+uB,OAAQ,CAChD,IAAIgkxB,EAAUtizB,EAAc,MAC5BsizB,EAAQ9hzB,YAAY3B,KAAKujzB,mBACzBv6a,EAAGrnY,YAAY8hzB,GAEnBz6a,EAAGrnY,YAAY0hzB,GAEnBrjzB,KAAKgB,QAAQ2B,cAAc,SAAShB,YAAYqnY,IAEpDq3a,EAAahlzB,UAAU+nzB,iBAAmB,WAKtC,IAAK,IAJDtoyB,EAAO3Z,EAAc,OAASkC,U3BrUN,uB2BsUxBqgzB,EAAM1jzB,KAAKg4yB,oBACXlmmB,EAAQ3wM,EAAc,MACtB86R,EAAWj8R,KAAKqhzB,UAAU5kzB,OACrBN,EAAI,EAAGA,EAAI8/R,EAAU9/R,IAAK,CAC/B,IAAIwnzB,EAAQ7xmB,EAAMlwM,YACdy7G,GAAWh6G,WAAYrD,KAAKqhzB,UAAUllzB,GAAG,GAAGkH,UAAU,IAAKqD,KAAM,cACrEi9yB,EAAMhizB,YAAY3B,KAAK4jzB,SAASvmsB,IAChCqmsB,EAAI/gzB,cAAc,SAAShB,YAAYgizB,GAE3C,IAAIE,EAAM/xmB,EAAMlwM,YACZkizB,EAA4B3izB,EAAc,OAC1CsC,OAASutH,SAAY,IAAK9wF,MAAO,yBAA0Bg2F,gBAAiB,QAASxC,aAAc,kBACnGrwH,UAAWsgxB,GAAuC,IAAMy6B,GAAmC,IACvFhiF,GAAW,IAAM03D,KAErBt3xB,GAAS6G,WAAYo9wB,IAAyB/5wB,KAAM,cACpDq9yB,EAAM/jzB,KAAK4jzB,SAASpnzB,GAKxB,OAJAunzB,EAAIpizB,YAAYmizB,GAChBD,EAAIlizB,YAAYoizB,GAChBL,EAAI/gzB,cAAc,SAAShB,YAAYkizB,GACvC/oyB,EAAKnZ,YAAY+hzB,GACV5oyB,GAEXulyB,EAAahlzB,UAAU6nzB,kBAAoB,WACvC,IAAIzoyB,EAAYtZ,EAAc,OAASkC,UAAW2gzB,KAC9ClpyB,EAAO3Z,EAAc,OAASkC,UAAW4gzB,KAC7CxpyB,EAAU9Y,YAAYmZ,GAMtB,IAAK,IALD4oyB,EAAM1jzB,KAAKg4yB,oBACXlmmB,EAAQ3wM,EAAc,MACtB86R,EAAWj8R,KAAKqhzB,UAAU5kzB,OAC1B0xc,EAAYnuc,KAAKqhzB,UAAUplhB,EAAW,GACtCiohB,EAAc/izB,EAAc,YACvBhF,EAAI,EAAGA,EAAIgyc,EAAU1xc,OAAQN,IAClC+nzB,EAAYvizB,YAAYR,EAAc,QAE1CuizB,EAAI/hzB,YAAYuizB,GAChB,IAAS/nzB,EAAI,EAAGA,EAAI8/R,EAAU9/R,IAAK,CAC/B,IAAIgozB,EAAQrymB,EAAMlwM,YAClB+B,GAAUwgzB,G3B1PQ,gB2B4PlB,IAAK,IADDhypB,EAAQnyJ,KAAKqhzB,UAAUllzB,GAClBonB,EAAI,EAAGA,EAAI4uI,EAAM11J,OAAQ8mB,IAC9B4gyB,EAAMxizB,YAAY3B,KAAK4jzB,SAASzxpB,EAAM5uI,KAE1CmgyB,EAAI/gzB,cAAc,SAAShB,YAAYwizB,GAE3C,IAAIN,EAAM/xmB,EAAMlwM,YAChB+B,GAAUkgzB,GAAMhO,IAChB,IAAStyxB,EAAI,EAAGA,EAAI4qb,EAAU1xc,OAAQ8mB,IAAK,CACvC,IAAIozP,EAAKj4Q,KAAWyvc,EAAU5qb,IAC9BozP,EAAGtzQ,WAAao9wB,IAChB9pgB,EAAGjwQ,KAAO,cACV,IAAI09yB,EAAMpkzB,KAAK4jzB,SAASjtiB,GACxBytiB,EAAI5gzB,aAAa,YAAamzQ,EAAGhgM,KAAK12D,UAAU/S,YAC3CzP,EAAkBk5Q,EAAGw2a,aACtBi3H,EAAI5gzB,aAAa,mBAAoB,GAAKmzQ,EAAGw2a,YAEjDntrB,KAAKqkzB,eAAeD,GACpBP,EAAIlizB,YAAYyizB,GAKpB,OAHAV,EAAI/gzB,cAAc,SAAShB,YAAYkizB,GACvCh/yB,GAAS7E,KAAKskzB,mBAAmB,WAAYZ,GAC7C5oyB,EAAKnZ,YAAY+hzB,GACVjpyB,GAEX4lyB,EAAahlzB,UAAUuozB,SAAW,SAAUjtiB,GACxC,IAAI7mE,EAAQ3uM,EAAc,MAO1B,GANIw1Q,EAAG+e,SACH5lF,EAAMtsM,aAAa,UAAWmzQ,EAAG+e,QAAQxoR,YAEzCypQ,EAAGtzQ,WACHM,GAAUmsM,GAAQ6mE,EAAGtzQ,WAErBszQ,EAAGhgM,MAAQggM,EAAGjwQ,KAAM,CACpB,IAAI1C,EAAMhE,KAAK8izB,aAAansiB,EAAGhgM,KAAMggM,EAAGjwQ,KAAMiwQ,EAAGw2a,YAC7CnprB,GAAOA,EAAIvH,QACX2I,KAAU/D,MAAMC,KAAK0C,GAAM8rM,GAGnB,mBAAZ6mE,EAAGjwQ,MACH1G,KAAKy4yB,yBAAyB3omB,EAAO6mE,GAEzB,eAAZA,EAAGjwQ,MAAyBiwQ,EAAGtzQ,UAAU9E,QAAQmixB,KAA2B,IAC5E5wkB,EAAMtsM,aAAa,YAAamzQ,EAAGhgM,KAAK12D,UAAU/S,YAC7CzP,EAAkBk5Q,EAAGw2a,aACtBr9e,EAAMtsM,aAAa,mBAAoB,GAAKmzQ,EAAGw2a,YAEnD5nrB,GAAanB,IAAI0rM,EAAO,QAAS9vM,KAAKwgzB,eAAe59E,UAAW5iuB,MAChEuF,GAAanB,IAAI0rM,EAAO,WAAY9vM,KAAKwgzB,eAAe1H,aAAc94yB,OAE1E,IAAIC,GAASuzC,YAAamjO,EAAGjwQ,KAAM1F,QAAS8uM,EAAOn5H,KAAMggM,EAAGhgM,KAAMw2mB,WAAYx2a,EAAGw2a,YAEjF,OADAntrB,KAAKM,OAAOkmB,QAAQ+9xB,GAAkBtkzB,GAC/B6vM,GAEXuwmB,EAAahlzB,UAAUgpzB,eAAiB,SAAUrjzB,GAC9CuE,GAAanB,IAAIpD,EAAS,YAAahB,KAAKwgzB,eAAe3pC,cAAe72wB,MAC1EuF,GAAanB,IAAIpD,EAAS,QAAShB,KAAKwgzB,eAAe59E,UAAW5iuB,MAClEuF,GAAanB,IAAIpD,EAAS,WAAYhB,KAAKwgzB,eAAe1H,aAAc94yB,OAE5EqgzB,EAAahlzB,UAAUkozB,gBAAkB,WACrC,IAAIxjzB,EAAQC,KACR8a,EAAO3Z,EAAc,OAASkC,U3BxaP,sB2ByavBqgzB,EAAM1jzB,KAAKg4yB,oBACXlmmB,EAAQ3wM,EAAc,MAY1B,OAFAnB,KAAKwkzB,gBATS,SAAU5nxB,GACpBA,EAAEl2B,KAAOk2B,EAAEh+B,MAAQ,YAAc,YACjCg+B,EAAEv5B,UAAYu5B,EAAE1J,M3B3aE,mB2B4alB,IAAI2wxB,EAAM/xmB,EAAMlwM,YACZpF,GAASm6E,KAAM/5C,EAAE+5C,KAAMjwE,KAAMk2B,EAAEl2B,KAAMrD,UAAWu5B,EAAEv5B,WAGtD,OAFAwgzB,EAAIlizB,YAAY5B,EAAM6jzB,SAASpnzB,IAC/BknzB,EAAI/gzB,cAAc,SAAShB,YAAYkizB,GAChCjnxB,IAGX9hB,EAAKnZ,YAAY+hzB,GACV5oyB,GAEXulyB,EAAahlzB,UAAUmozB,kBAAoB,WACvC,IAAIzjzB,EAAQC,KACR8a,EAAO3Z,EAAc,OAASkC,UAAWw8wB,KACzC4kC,EAAYtjzB,EAAc,OAASkC,U3B3apB,c2B4anByX,EAAKnZ,YAAY8izB,GAMjB,IAAK,IALDf,EAAM1jzB,KAAKg4yB,kBAAkBlC,IAC7B9sa,EAAK7nY,EAAc,MAAQsC,OAASmO,KAAM,SAC1C+kQ,EAAKx1Q,EAAc,MAAQsC,OAASmO,KAAM,WAAY81I,gBAAiB,WACvE+3e,EAAQikL,EAAI/gzB,cAAc,SAC1BuhzB,EAAc/izB,EAAc,YACvB/C,EAAK,EAAGyE,EAAK7C,KAAKqhzB,UAAUhgzB,OAAO,GAAG,GAAIjD,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC3DyE,EAAGzE,GACb8lzB,EAAYvizB,YAAYR,EAAc,QAE1CuizB,EAAI/hzB,YAAYuizB,GAqChB,OAJAlkzB,KAAKwkzB,gBAhCS,SAAU5nxB,GAEpB,IAAK,IADDinxB,EAAM76a,EAAGpnY,YACJxD,EAAK,EAAGyE,EAAK9C,EAAMshzB,UAAUthzB,EAAMshzB,UAAU5kzB,OAAS,GAAI2B,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACrF,IAAIs6yB,EAAS71yB,EAAGzE,GACZgmzB,EAAMztiB,EAAG/0Q,YACTmoJ,EAAUntH,EAAE1J,MAAQstvB,KAAyBA,G3Bxc9B,qB2BycfkkC,EAAWxmC,GAAe,IAAIl+vB,KAAK,GAAK04xB,EAAO/huB,OAQnD,GAPAguuB,GAAaD,EAAUl3B,GAAiB5wvB,EAAE+5C,OACtC52E,EAAMO,OAAO4oyB,UAAUhmc,YAAenjW,EAAMO,OAAOi+wB,kBAAkBC,UAAU/+uB,QAC/E1/B,EAAMs4yB,WAAWqM,EAAUhM,EAAO9guB,UAAW8guB,EAAO7guB,QAAS6guB,EAAOjJ,YAClE1vyB,EAAMO,OAAOi+wB,kBAAkBC,UAAU/+uB,QAAU1/B,EAAMq4yB,UAAUsM,EAAUhM,EAAOjJ,YACtF1lpB,EAAQvlJ,KAAK0yyB,IAEjBvzyB,GAAUygzB,GAAMr6pB,GACZhqJ,EAAMO,OAAOyyyB,aAAc,CAC3B,IAAIvzmB,GAAW7oH,KAAM+tuB,EAAUh+yB,KAAM,YAAaymrB,WAAYurH,EAAOvrH,YACrE/nrB,KAAU/D,MAAMC,KAAKvB,EAAMO,OAAO41yB,iBAAbn2yB,CAA+By/L,IAAU4knB,GAGlE,GADAA,EAAI5gzB,aAAa,YAAakhzB,EAASzkyB,UAAU/S,aAC5CzP,EAAkBi7yB,EAAOvrH,aAAeptrB,EAAMO,OAAOkryB,cAAcC,gBAAiB,CACrF,IAAIt+G,EAAaptrB,EAAMO,OAAOkryB,cAAcC,gBAAkB1ryB,EAAMO,OAAOkryB,cAAcr+G,WACrFurH,EAAOvrH,WACXi3H,EAAI5gzB,aAAa,mBAAoB,GAAK2prB,GAE9CptrB,EAAMskzB,eAAeD,GACrB,IAAInkzB,GAASuzC,YAAa,YAAaxyC,QAASojzB,EAAKztuB,KAAM+tuB,EAAUv3H,WAAYurH,EAAOvrH,YACxFptrB,EAAMO,OAAOkmB,QAAQ+9xB,GAAkBtkzB,GACvC4jzB,EAAIlizB,YAAYyizB,GAGpB,OADA3kL,EAAM99nB,YAAYkizB,GACXjnxB,IAGX/3B,GAAS7E,KAAKskzB,sBAAuBZ,GACrC5oyB,EAAKnZ,YAAY+hzB,GACjBn+yB,GAAanB,IAAI0W,EAAM,SAAU9a,KAAK8/oB,gBAAiB9/oB,MAChD8a,GAEXulyB,EAAahlzB,UAAUipzB,mBAAqB,SAAU59yB,QACrC,IAATA,IAAmBA,EAAO,IAC9B,IAAIq8nB,EAAQ5hoB,EAAc,SACtB6nY,EAAK7nY,EAAc,MAAQsC,OAASmO,KAAM,SAgB9C,OAfA5R,KAAKqhzB,UAAUhgzB,OAAO,GAAG,GAAGjC,QAAQ,SAAUqhE,EAAKgX,GAC/C,IAAI4luB,EAAkBl8yB,EAAc,MAChCkC,UAAqB,WAATqD,EAAqBi2yB,G3B7dlB,gB2B8dfl5yB,OAASmO,KAAM,WAAY81I,gBAAiB,WAEhD,GAAa,WAAThhJ,EAAmB,CACnB,IAAIk+yB,EAAezjzB,EAAc,OAC7BmC,GAAIg6yB,GAAgC,IAAM7luB,EAAIvqE,WAC9C7J,UAAWi6yB,KAEfD,EAAgB17yB,YAAYijzB,GAEhC57a,EAAGrnY,YAAY07yB,KAEnBt6K,EAAMphoB,YAAYqnY,GACX+5P,GAEXs9K,EAAahlzB,UAAUylzB,qBAAuB,WAC1C,OAAI9gzB,KAAKM,OAAOg/tB,WACLt/tB,KAAKgB,QAAQ2B,cAAc,uBAG3B3C,KAAK4izB,yBAGpBvC,EAAahlzB,UAAUslzB,sBAAwB,WAC3C,OAAO3gzB,KAAKgB,QAAQ2B,cAAc,IAAMqhzB,KAE5C3D,EAAahlzB,UAAUqlzB,oBAAsB,WACzC,OAAO1gzB,KAAKgB,QAAQ2B,cAAc,uBAEtC09yB,EAAahlzB,UAAUunzB,sBAAwB,WAC3C,OAAO5izB,KAAKgB,QAAQ2B,cAAc,IAAMk9wB,KAE5CwgC,EAAahlzB,UAAU87yB,wBAA0B,SAAU55yB,GACvD,IACI+gxB,E9sB9kBe,I8sB6kBGt+wB,KAAKM,OAAOi+wB,kBAAkBC,UAAUr8wB,SAC3BnC,KAAKM,OAAOi+wB,kBAAkBC,UAAUC,UACvE5/vB,EAAM,IAAImB,KAAKziB,EAAM0iB,WAEzB,OADApB,EAAIgqF,gBAAgBhqF,EAAI2wL,kBAAoB8ukB,GACrCz/vB,GAEXwhyB,EAAahlzB,UAAUswyB,mBAAqB,WACxC,IAAIkZ,EAAW7kzB,KAAKgB,QAAQ2B,cAAc,IAAMmzyB,IAAyBlxyB,YACzE5E,KAAKgB,QAAQ2B,cAAc,cAAyB+B,MAAMsR,MAAQ6uyB,EAAW,KAC7E7kzB,KAAKgB,QAAQ2B,cAAc,IAAMg6yB,IAAsCj4yB,MAAMsR,MAAQ6uyB,EAAW,MAEpGxE,EAAahlzB,UAAUmpzB,gBAAkB,SAAU/ozB,GAC/C,IAAI88R,KACA3gN,EAAY53E,KAAK82yB,eACjBj/tB,EAAU73E,KAAK+2yB,aACf+N,E9sB5lBe,I8sB4lBG9kzB,KAAKM,OAAOi+wB,kBAAkBC,UAAUr8wB,SAC1Dm8wB,EAAawmC,EAAkB9kzB,KAAKM,OAAOi+wB,kBAAkBC,UAAUC,UACvEhixB,EAAS4P,KAAKoxB,MAAM4ovB,GAAkB/H,GACtCymC,EAAcntuB,EAAU33D,UACxB+kyB,EAAYntuB,EAAQ53D,UACpB8kyB,IAAgBC,IAChBvozB,EAAS4P,KAAKoxB,OAAOunxB,EAAYD,GAAezmC,IAE/Ct+wB,KAAKM,OAAOi+wB,kBAAkBC,UAAU/+uB,SACzChjC,EAAS,GAGb,IAAK,IADDq6E,EAAK,IAAI92D,KAAK+kyB,GACT5ozB,EAAI,EAAGA,EAAIM,EAAQN,IAAK,CAC7B,IAAI8ozB,EAAmB9ozB,GAAK2ozB,EAAkBxmC,GAC1C59sB,GACAiW,KAAM,IAAI32D,KAAK,GAAK82D,GACpBl4E,MAA6B,IAArBqmzB,EACRl2wB,OAASk2wB,EAAmBjlzB,KAAKM,OAAOi+wB,kBAAkBC,UAAUC,UAAY,EAChFvrvB,KAAO+xxB,IAAqBjlzB,KAAKM,OAAOi+wB,kBAAkBC,UAAUC,UAAY,EAChF/3wB,KAAM,IAENjL,GACAA,EAAQilE,GAEZ63N,EAAK/zR,KAAKk8D,GACVoW,EAAG+xB,gBAAgBy1qB,GAEvB,OAAO/lf,GAKX8nhB,EAAahlzB,UAAUkkC,cAAgB,WACnC,MAAO,gBAOX8gxB,EAAahlzB,UAAUiX,QAAU,WACzBtS,KAAKM,OAAO0mF,cAGhBhnF,KAAK6hzB,iCACD7hzB,KAAKgB,UACLuE,GAAahB,OAAOvE,KAAK4izB,wBAAyB,SAAU5izB,KAAK8/oB,iBAC7D9/oB,KAAKM,OAAO0rxB,cACZhsxB,KAAKM,OAAO0rxB,aAAa15wB,UAE7B/N,EAAOvE,KAAKgB,SACZhB,KAAKgB,QAAU,KACXhB,KAAKM,OAAO4xyB,qBACZlyyB,KAAKM,OAAO4xyB,oBAAoB5wa,iBAIrC++a,GACTxI,IC3pBEvttB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAexCu6tB,GAAqB,SAAU/5tB,GAK/B,SAAS+5tB,EAAI5kzB,GACT,IAAIP,EAAQorF,EAAO7pF,KAAKtB,KAAMM,IAAWN,KAEzC,OADAD,EAAMwgzB,UAAY,aACXxgzB,EA8BX,OArCAuqF,GAAU46tB,EAAK/5tB,GASf+5tB,EAAI7pzB,UAAU+ixB,oBAAsB,SAAU13wB,GAC1C,IAAIy+yB,EAAsB,SAATz+yB,EAAmB1G,KAAKM,OAAOi+wB,kBAAkBp8wB,UAAanC,KAAKM,OAAOi+wB,kBAA0B,SACrH,GAAIv+wB,KAAKM,OAAOi+wB,kBAAkBuP,YAC9B,OAAOX,GAAantxB,KAAKM,OAAO0tM,aAAcm3mB,GAI9C,IADA,IAAIxuuB,EAAOw2sB,GAAantxB,KAAKM,OAAO0tM,aAAcm3mB,IAC1CnlzB,KAAKo4yB,UAAUzhuB,IACnBA,EAAOw2sB,GAAax2sB,EAAMwuuB,GAE9B,OAAOxuuB,GAGfuuuB,EAAI7pzB,UAAUiixB,iBAAmB,WAC7B,OAAIt9wB,KAAKM,OAAOg/tB,WACLt/tB,KAAKM,OAAO4qM,UAAUlgG,WAAWhrG,KAAKM,OAAO0tM,cAAgBhyK,OAAQ,WAE5Eh8B,KAAKM,OAAOi+wB,kBAAkBp8wB,SAAW,EAClCnC,KAAKs4yB,gBAAgBt4yB,KAAKuvyB,YAAY,GAAIvvyB,KAAKuvyB,YAAYvvyB,KAAKuvyB,YAAY9yyB,OAAS,IAEzFuD,KAAKs4yB,gBAAgBt4yB,KAAKM,OAAO0tM,eAK5Ck3mB,EAAI7pzB,UAAUkkC,cAAgB,WAC1B,MAAO,OAEJ2lxB,GACT7E,ICtDE/1tB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAexCy6tB,GAAsB,SAAUj6tB,GAKhC,SAASi6tB,EAAK9kzB,GACV,IAAIP,EAAQorF,EAAO7pF,KAAKtB,KAAMM,IAAWN,KAEzC,OADAD,EAAMwgzB,UAAY,cACXxgzB,EA4BX,OAnCAuqF,GAAU86tB,EAAMj6tB,GAShBi6tB,EAAK/pzB,UAAU0lxB,eAAiB,SAAU0uB,GAItC,IAAK,IAHDF,KAEAhyyB,EAAQ8nzB,GADOnnC,GAAel+wB,KAAKM,OAAO0tM,cACEhuM,KAAKM,OAAOo2E,gBACnDv6E,EAAI,EAAGs+B,EhtB1BC,EgtB0B6Bz6B,KAAKM,OAAOi+wB,kBAAkBp8wB,SAAUhG,EAAIs+B,EAAUt+B,IAC5F6D,KAAKM,OAAOi+wB,kBAAkBuP,YAC9ByhB,EAAY/qyB,KAAKjH,GAGbyC,KAAKo4yB,UAAU76yB,EAAOkyyB,IACtBF,EAAY/qyB,KAAKjH,GAGzBA,EAAQ4vxB,GAAa5vxB,EAAO,GAKhC,OAHKkyyB,IACDzvyB,KAAKuvyB,YAAcA,GAEhBA,GAKX6V,EAAK/pzB,UAAUkkC,cAAgB,WAC3B,MAAO,QAEJ6lxB,GACT/E,ICpDE/1tB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAexC26tB,GAA0B,SAAUn6tB,GAKpC,SAASm6tB,EAASC,GACd,IAAIxlzB,EAAQorF,EAAO7pF,KAAKtB,KAAMulzB,IAAQvlzB,KAEtC,OADAD,EAAMwgzB,UAAY,mBACXxgzB,EAsBX,OA7BAuqF,GAAUg7tB,EAAUn6tB,GASpBm6tB,EAASjqzB,UAAU0lxB,eAAiB,SAAU0uB,GAG1C,IAAK,IAFDF,KACAhyyB,EAAQ8nzB,GAAsBnnC,GAAel+wB,KAAKM,OAAO0tM,cAAehuM,KAAKM,OAAOo2E,gBAC/Ev6E,EAAI,EAAGs+B,EjtBzBC,EitByB6Bz6B,KAAKM,OAAOi+wB,kBAAkBp8wB,SAAUhG,EAAIs+B,EAAUt+B,IAC5F6D,KAAKo4yB,UAAU76yB,EAAOkyyB,IACtBF,EAAY/qyB,KAAKjH,GAErBA,EAAQ4vxB,GAAa5vxB,EAAO,GAKhC,OAHKkyyB,IACDzvyB,KAAKuvyB,YAAcA,GAEhBA,GAKX+V,EAASjqzB,UAAUkkC,cAAgB,WAC/B,MAAO,YAEJ+lxB,GACTjF,IC9CE/1tB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAqBxC66tB,GAAuB,SAAUr6tB,GAKjC,SAASq6tB,EAAMllzB,GACX,IAAIP,EAAQorF,EAAO7pF,KAAKtB,KAAMM,IAAWN,KAMzC,OALAD,EAAM0lzB,cAAgB,OACtB1lzB,EAAMwgzB,UAAY,eAClBxgzB,EAAMykxB,sBAAuB,EAC7BzkxB,EAAM2lzB,cACN3lzB,EAAMygzB,eAAiB,IAAI5H,GAAoBt4yB,GACxCP,EAuXX,OAlYAuqF,GAAUk7tB,EAAOr6tB,GAajBq6tB,EAAMnqzB,UAAUqB,iBAAmB,WAC/BsD,KAAKM,OAAOslF,GAAG66tB,GAAsBzgzB,KAAK2lzB,iBAAkB3lzB,MAC5DA,KAAKM,OAAOslF,GAAG0lsB,GAAiBtrxB,KAAKo4qB,YAAap4qB,MAClDA,KAAKM,OAAOslF,GAAG69rB,GAAiBzjxB,KAAK4lzB,YAAa5lzB,OAEtDwlzB,EAAMnqzB,UAAUuB,oBAAsB,WAClCoD,KAAKM,OAAO0lF,IAAIy6tB,GAAsBzgzB,KAAK2lzB,kBAC3C3lzB,KAAKM,OAAO0lF,IAAIslsB,GAAiBtrxB,KAAKo4qB,aACtCp4qB,KAAKM,OAAO0lF,IAAIy9rB,GAAiBzjxB,KAAK4lzB,cAE1CJ,EAAMnqzB,UAAU+8qB,YAAc,SAAUn4qB,GACnB,IAAIu+yB,GAAWx+yB,KAAKM,QAC1Bk5yB,sBAEfgM,EAAMnqzB,UAAUuqzB,YAAc,SAAUtpzB,KAGxCkpzB,EAAMnqzB,UAAUykpB,gBAAkB,SAAUj/oB,GACxCb,KAAK2gzB,wBAAwB/jyB,WAAW5Q,WAAanL,EAAEsG,OAAO6E,YAElEw5yB,EAAMnqzB,UAAUsqzB,iBAAmB,SAAU1lzB,GACzC,IAAI24f,EAAe,EACf54f,KAAKM,OAAO8qpB,eACZxyJ,GAAgB54f,KAAKM,OAAO8qpB,aAAa0zH,mBAAmBptuB,cAE5D1xC,KAAKM,OAAOkryB,cAAcC,iBAA+C,gBAA5BzryB,KAAKM,OAAOotM,cACzDkrT,GAAgB54f,KAAKM,OAAOU,QAAQ2B,cAAc,IAAMypyB,IAA6B16vB,cAEzF,IAAIkzC,EAAS5kF,KAAK2gzB,wBACdvmxB,EAAUp6B,KAAK4izB,wBAInB,GAHAxoxB,EAAQ11B,MAAMqR,OAAS,OACvBqkB,EAAQ11B,MAAMqR,OAASxT,EAAWvC,KAAKM,OAAOU,QAAQ0wC,aAAeknd,EAAeh0a,EAAOlzC,aAAe,GAEtGtX,EAAQx1B,YAAcw1B,EAAQ/M,YAAc,EAAG,CAC/C,IAAIs8f,EAAiBq3R,KACrBp8tB,EAAOhoE,WAAWlY,MAAMzE,EAAKm/wB,cAAc96uB,QAAUqlf,EAAiB,EAAI,MAAQ,MAClF/kc,EAAOlgF,MAAMzE,EAAKm/wB,cAAchmtB,SAAWuwd,EAAiB,EAAIA,EAAiB,EAAI,KAAO,WAG5F/kc,EAAOhoE,WAAWlY,MAAMzE,EAAKm/wB,cAAc96uB,QAAU,GACrDsgD,EAAOlgF,MAAMzE,EAAKm/wB,cAAchmtB,SAAW,IAInDosvB,EAAMnqzB,UAAU6lxB,qBAAuB,WACnC,IAAImgC,KACAlvpB,EAAQnyJ,KAAK4vyB,aAAa5vyB,KAAKuvyB,YAAavvyB,KAAKM,OAAOi+wB,kBAAkBkxB,UAC9E,GAAIzvyB,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAMq4I,UAAU3uO,OAAS,GAKvD,GAJA4kzB,EAAYrhzB,KAAKM,OAAO0rxB,aAAa+iB,uBAAuB58oB,GAC5B,gBAA5BnyJ,KAAKM,OAAOotM,cACZ2zmB,GAAalvpB,IAEbnyJ,KAAKM,OAAOkryB,cAAcC,gBAAiB,CAC3C,IAAIqC,EAAgB9tyB,KAAKM,OAAO0rxB,aAAagD,kBAAkBhvxB,KAAKM,OAAOkryB,cAAcr+G,YACzFk0H,GAAarhzB,KAAK4vyB,aAAa9B,EAAcyB,YAAazB,EAAc2B,iBAI5E4R,EAAU78yB,KAAK2tJ,GAGnB,OADAnyJ,KAAKqhzB,UAAYA,EACVA,GAEXmE,EAAMnqzB,UAAUu0yB,aAAe,SAAUL,EAAaE,GAGlD,IAAK,IAFD3wxB,EAAQ9e,KAAKM,OAAOi+wB,kBAAkBuP,YltBhGzB,EktBgG0D2hB,EAAShzyB,OAChFozyB,KACKpvuB,EAAM,EAAGA,EAAM3hD,EAAO2hD,IAAO,CAClC,IAAI38D,GAAa48wB,IACb1gxB,KAAKm4yB,eAAen4yB,KAAKM,OAAO0tM,gBAAiB,IAAIhuL,MAAO4jD,WAAanD,GACzE38D,EAAUU,K/B1DK,iB+B4DnBqryB,EAAUrryB,MACNmyE,KAAM32E,KAAKuvyB,YAAY9uuB,GAAM/5D,KAAM,cAAerD,UAAWS,EAC7D4xR,QAAS,EAAG+5gB,SAAUA,IAG9B,OAAOI,GAEX2V,EAAMnqzB,UAAUwqzB,iBAAmB,WAC/B,OAAI7lzB,KAAKM,OAAOg/tB,YAAct/tB,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAMq4I,UAAU3uO,OAAS,EAC1E,cAEJ,QAEX+ozB,EAAMnqzB,UAAU07uB,aAAe,SAAUrwuB,GACrC1G,KAAKylzB,cAAgBzlzB,KAAK6lzB,mBAC1B7lzB,KAAKk+nB,SAAS/8nB,EAAc,OAASkC,UAAW0/yB,MAChD,IAAI91gB,GAAWjtS,KAAKugzB,WACpBtzgB,EAAQzoS,KAAKkC,GACT1G,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAM86rB,QACpC5gf,EAAQzoS,KAAK,aAEjBb,GAAU3D,KAAKgB,SAAUisS,GACzBjtS,KAAK+9nB,YAAYr3nB,GACjB1G,KAAKgB,QAAQW,YAAY3B,KAAKg4yB,kBAAkBgL,KAChDhjzB,KAAKqhzB,UAAYrhzB,KAAKkhxB,uBACtBlhxB,KAAK4/S,eACL5/S,KAAK2sH,gBACL,IAAIxlH,EAAsC,gBAA5BnH,KAAKM,OAAOotM,YAAiC1tM,KAAKM,OAAO69wB,WAAWnhJ,WAAah9nB,KAAKM,OAAOU,QACvGhB,KAAKM,OAAOkryB,cAAcC,kBAAoBtkyB,EAAOxE,cAAc,IAAMwpyB,KACzEnsyB,KAAK24yB,6BAET34yB,KAAKM,OAAOyN,OAAO8ioB,QAEvB20K,EAAMnqzB,UAAUgpzB,eAAiB,SAAUrjzB,GACvCuE,GAAanB,IAAIpD,EAAS,YAAahB,KAAKwgzB,eAAe3pC,cAAe72wB,MAC1EuF,GAAanB,IAAIpD,EAAS,QAAShB,KAAKwgzB,eAAe59E,UAAW5iuB,MAClEuF,GAAanB,IAAIpD,EAAS,WAAYhB,KAAKwgzB,eAAe1H,aAAc94yB,OAE5EwlzB,EAAMnqzB,UAAUukT,aAAe,WAC3B,IAAIopF,EAAK7nY,EAAc,MACnB8hzB,EAAS9hzB,EAAc,MAC3B8hzB,EAAOthzB,YAAY3B,KAAKkjzB,qBACxBl6a,EAAGrnY,YAAYshzB,GACfp+yB,GAASmkY,GAAKhpY,KAAKgB,QAAQ2B,cAAc,WAE7C6izB,EAAMnqzB,UAAUsxH,cAAgB,WAC5B,IAAIq8Q,EAAK7nY,EAAc,MACnBkizB,EAASlizB,EAAc,MAC3BkizB,EAAO1hzB,YAAY3B,KAAKwjzB,qBACxBx6a,EAAGrnY,YAAY0hzB,GACfrjzB,KAAKgB,QAAQ2B,cAAc,SAAShB,YAAYqnY,GAChDhpY,KAAK8lzB,8BAETN,EAAMnqzB,UAAUyqzB,2BAA6B,aAG7CN,EAAMnqzB,UAAU6nzB,kBAAoB,WAChC,IAAIzoyB,EAAYtZ,EAAc,OAASkC,UAAW2gzB,KAC9ClpyB,EAAO3Z,EAAc,OAASkC,UAAW4gzB,KAC7CxpyB,EAAU9Y,YAAYmZ,GAItB,IAAK,IAHDmlD,EAAQjgE,KAAKg4yB,oBACblmmB,EAAQ3wM,EAAc,MACtB+izB,EAAc/izB,EAAc,YACvBhF,EAAI,EAAGA,EAAI6D,KAAKqhzB,UAAUrhzB,KAAKqhzB,UAAU5kzB,OAAS,GAAGA,OAAQN,IAClE+nzB,EAAYvizB,YAAYR,EAAc,QAE1C8+D,EAAMt+D,YAAYuizB,GAClB,IAAS/nzB,EAAI,EAAGA,EAAI6D,KAAKqhzB,UAAU5kzB,OAAQN,IAAK,CAG5C,IAAK,IAFDg2J,EAAQnyJ,KAAKqhzB,UAAUllzB,GACvB0nzB,EAAM/xmB,EAAMlwM,YACP2hB,EAAI,EAAGA,EAAI4uI,EAAM11J,OAAQ8mB,IAAK,CACnC,IAAIozP,EAAKxkH,EAAM5uI,GACfsgyB,EAAIlizB,YAAY3B,KAAK+lzB,iBAAiBpviB,IAE1C12M,EAAMt9D,cAAc,SAAShB,YAAYkizB,GAG7C,OADA/oyB,EAAKnZ,YAAYs+D,GACVxlD,GAEX+qyB,EAAMnqzB,UAAU0qzB,iBAAmB,SAAUpviB,GACzC,IAAI7mE,EAAQ3uM,EAAc,MAO1B,GANIw1Q,EAAG+e,SACH5lF,EAAMtsM,aAAa,UAAWmzQ,EAAG+e,QAAQxoR,YAEzCypQ,EAAGtzQ,WACHM,GAAUmsM,GAAQ6mE,EAAGtzQ,WAET,gBAAZszQ,EAAGjwQ,KAAwB,CAC3B,IAAI1C,EAAM7C,EAAc,QAAUa,UAAWhC,KAAKM,OAAOmzyB,YAAYzzyB,KAAKylzB,eAAe9uiB,EAAGhgM,KAAK/S,YACjGksI,EAAMnuM,YAAYqC,GAEN,mBAAZ2yQ,EAAGjwQ,MACH1G,KAAKy4yB,yBAAyB3omB,EAAO6mE,GAEzC,IAAI12Q,GAASuzC,YAAamjO,EAAGjwQ,KAAM1F,QAAS8uM,EAAOn5H,KAAMggM,EAAGhgM,KAAMw2mB,WAAYx2a,EAAGw2a,YAEjF,OADAntrB,KAAKM,OAAOkmB,QAAQ+9xB,GAAkBtkzB,GAC/B6vM,GAEX01mB,EAAMnqzB,UAAU2qzB,aAAe,SAAUrvuB,GACrC,OAAOA,EAAK12D,UAAYjgB,KAAK0lzB,WAAWnozB,MAAM0iB,WAAa02D,EAAK12D,UAAYjgB,KAAK0lzB,WAAW7myB,IAAIoB,WAEpGulyB,EAAMnqzB,UAAUmozB,kBAAoB,WAChC,IAAI1oyB,EAAO3Z,EAAc,OAASkC,UAAWw8wB,KACzC6jC,EAAM1jzB,KAAKg4yB,kBAAkBlC,IAC7Br2K,EAAQikL,EAAI/gzB,cAAc,SAC1BqmY,EAAK7nY,EAAc,MAAQsC,OAASmO,KAAM,SAC1C+kQ,EAAKx1Q,EAAc,MAAQsC,OAASmO,KAAM,WAAY81I,gBAAiB,WACvEu3oB,EAAY,IAAIj/wB,KAAKhgB,KAAKM,OAAO0tM,aAAa/tL,WAClDjgB,KAAK0lzB,YACDnozB,MAAO0ozB,GAAsBhnB,GAC7BpgxB,IAAKqnyB,GAAqBC,GAAelnB,EAAWj/xB,KAAKM,OAAOi+wB,kBAAkBp8wB,SAAW,KAEjG,IAAIikzB,KACAC,EAAe,SAAU5lhB,EAAU+iY,EAAYuqI,EAASjqyB,GACxD,IAAItH,GACAm6E,KAAM,IAAI32D,MAAMwjpB,GAAa2pB,WAAY4gH,EAAQ5gH,WAAYsiH,SAAU1B,EAAQ0B,SAC/E/oyB,KAAM,aAAcrD,UAAWS,IAAc08wB,KAE5C4lC,EAAU3lhB,KACX2lhB,EAAU3lhB,OAEd2lhB,EAAU3lhB,GAAUj8R,KAAKhI,IAEzB8pzB,EAA8C,gBAA5BtmzB,KAAKM,OAAOotM,aAC9B1tM,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAMq4I,UAAU3uO,OAAS,EAC3D,IAAI6pzB,GAAoBtmzB,KAAKM,OAAOkryB,cAAcC,iBAAoBzryB,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAM86rB,OAkBtG,IAHIvwrB,EAAQt9F,KAAKuvyB,YAAY33wB,IAAI,SAAU++C,GAAQ,OAAO,IAAI32D,MAAM22D,KAChE73D,EAAQ9e,KAAKM,OAAOi+wB,kBAAkBuP,YltBpP7B,EktBqPT9txB,KAAKM,OAAOi+wB,kBAAkBkxB,SAAShzyB,OAClCN,EAAI,EAAGA,EAAK6D,KAAKuvyB,YAAY9yyB,OAASqiB,EAAQ3iB,IAEnD,IAAK,IAAIsO,EAAK,EAAG87yB,EADFjptB,EAAMj1E,OAAO,EAAGvJ,GACSrU,EAAK87yB,EAAW9pzB,OAAQgO,IAAM,CAC9D+7yB,EAAUD,EAAW97yB,GACzB,GAAI67yB,EAGA,IAAK,IAFDG,EAAUzmzB,KAAKqhzB,UAAWrhzB,KAAKqhzB,UAAU5kzB,OAAS,GAClDiqzB,EAAcD,EAAQplzB,MAAM,EAAGolzB,EAAQhqzB,OAASqiB,GAC3CmwwB,EAAW,EAAGA,EAAWy3B,EAAYjqzB,OAAQwyxB,IAAY,CAC9D,IAAIhif,OAAU,EACG,IAAbgif,IACAhif,GAAWuze,G/BmFjB,mB+BjFE6lC,EAAalqzB,EAAGqqzB,EAASE,EAAYz3B,GAAWhif,QAIpDo5gB,EAAalqzB,EAAGqqzB,EAASxmzB,KAAKqhzB,UAAUrhzB,KAAKqhzB,UAAU5kzB,OAAS,GAAG,SAjC/E,IAAK,IAAI2B,EAAK,EAAGyE,EAAK7C,KAAKqhzB,UAAUrhzB,KAAKqhzB,UAAU5kzB,OAAS,GAAI2B,EAAKyE,EAAGpG,OAAQ2B,IAI7E,IAAK,IAHD4jE,EAAMn/D,EAAGzE,GACTk/F,EAAQt7B,EAAIutuB,YAAY33wB,IAAI,SAAU++C,GAAQ,OAAO,IAAI32D,MAAM22D,KAC/D73D,EAAQ9e,KAAKM,OAAOi+wB,kBAAkBuP,YltBxOjC,EktBwOkE9rtB,EAAIytuB,SAAShzyB,OAC/EN,EAAI,EAAGA,EAAK6lE,EAAIutuB,YAAY9yyB,OAASqiB,EAAQ3iB,IAElD,IAAK,IAAI8H,EAAK,EAAG0izB,EADFrptB,EAAMj1E,OAAO,EAAGvJ,GACS7a,EAAK0izB,EAAWlqzB,OAAQwH,IAAM,CAClE,IAAIuizB,EACJH,EAAalqzB,EADTqqzB,EAAUG,EAAW1izB,GACA+9D,GA8BzC,IAAK,IAAItB,EAAM,EAAGA,EAAM0lvB,EAAU3pzB,OAAQikE,IAAO,CAE7C,IAAK,IADDmjvB,EAAM76a,EAAGpnY,YACJ6+D,EAAM,EAAGA,EAAM2lvB,EAAU1lvB,GAAKjkE,OAAQgkE,IAAO,CAClD,IAAIjkE,EAAO4pzB,EAAU1lvB,GAAKD,GACtB2jvB,EAAMztiB,EAAG/0Q,YAeb,GAdI5B,KAAKgmzB,aAAaxpzB,EAAKm6E,OACvBn6E,EAAK6G,UAAUmB,K/BxOL,iB+B0OVxE,KAAKM,OAAO4oyB,UAAUhmc,WAAaljW,KAAKo4yB,UAAU57yB,EAAKm6E,KAAMn6E,EAAKizyB,WAClEjzyB,EAAK6G,UAAUmB,K/B7OR,e+B+OPxE,KAAKk4yB,cAAc17yB,EAAKm6E,OACxBn6E,EAAK6G,UAAUmB,KAAK+zxB,IAEQ,gBAA5Bv4xB,KAAKM,OAAOotM,aAAiC1tM,KAAKM,OAAO29wB,eAAezhxB,EAAKm6E,OAC7En6E,EAAK6G,UAAUmB,KAAKoxyB,IAExBjyyB,GAAUygzB,GAAM5nzB,EAAK6G,WACrB+gzB,EAAI5gzB,aAAa,YAAahH,EAAKm6E,KAAK12D,UAAU/S,aAC7CzP,EAAkBjB,EAAK2wrB,aAAentrB,KAAKM,OAAOkryB,cAAcC,gBAAiB,CAClF,IAAIt+G,EAAantrB,KAAKM,OAAOkryB,cAAcC,gBAAkBzryB,KAAKM,OAAOkryB,cAAcr+G,WACnF3wrB,EAAK2wrB,WACTi3H,EAAI5gzB,aAAa,mBAAoB,GAAK2prB,GAG9C,GADAntrB,KAAK4mzB,wBAAwBpqzB,EAAM4nzB,GAC/BpkzB,KAAKM,OAAOyyyB,aAAc,CAC1B,IAAIvzmB,GAAW7oH,KAAMn6E,EAAKm6E,KAAMjwE,KAAMlK,EAAKkK,KAAMymrB,WAAY3wrB,EAAK2wrB,YAClE/nrB,KAAU/D,MAAMC,KAAKtB,KAAKM,OAAO41yB,iBAAZl2yB,CAA8Bw/L,IAAU4knB,GAEjEpkzB,KAAKqkzB,eAAeD,GACpB,IAAInkzB,GAASuzC,YAAah3C,EAAKkK,KAAM1F,QAASojzB,EAAKztuB,KAAMn6E,EAAKm6E,KAAMw2mB,WAAY3wrB,EAAK2wrB,YACrFntrB,KAAKM,OAAOkmB,QAAQ+9xB,GAAkBtkzB,GACtC4jzB,EAAIlizB,YAAYyizB,GAEpB3kL,EAAM99nB,YAAYkizB,GAItB,OAFA/oyB,EAAKnZ,YAAY+hzB,GACjBn+yB,GAAanB,IAAI0W,EAAM,SAAU9a,KAAK8/oB,gBAAiB9/oB,MAChD8a,GAEX0qyB,EAAMnqzB,UAAUslzB,sBAAwB,WACpC,OAAO3gzB,KAAKgB,QAAQ2B,cAAc,IAAMqhzB,KAE5CwB,EAAMnqzB,UAAUunzB,sBAAwB,WACpC,OAAO5izB,KAAKgB,QAAQ2B,cAAc,IAAMk9wB,KAE5C2lC,EAAMnqzB,UAAUurzB,wBAA0B,SAAUpqzB,EAAM4nzB,GACtD,IAAIyC,EAAa1lzB,EAAc,OAASkC,U/BrLjB,kB+BsLvBwjzB,EAAW7kzB,UAAqC,IAAxBxF,EAAKm6E,KAAKxQ,WAAoBnmE,KAAKk4yB,cAAc17yB,EAAKm6E,OAAU32E,KAAKM,OAAOg/tB,WAEhGt/tB,KAAKM,OAAO4qM,UAAUlgG,WAAWxuG,EAAKm6E,MAAQjV,SAAU,MADxD1hE,KAAKM,OAAO4qM,UAAUlgG,WAAWxuG,EAAKm6E,MAAQ36C,OAAQ,UAE1DooxB,EAAIzizB,YAAYklzB,GACa,UAAzB7mzB,KAAKu/B,iBACL57B,GAAUkjzB,GAAah0B,KAG/B2yB,EAAMnqzB,UAAU0lxB,eAAiB,SAAU0uB,GACvC,IAAIF,KACAhytB,EAAc2gsB,GAAel+wB,KAAKM,OAAO0tM,cACzC84mB,EAAazB,GAAsBY,GAAsB1ouB,GAAcv9E,KAAKM,OAAOo2E,gBAGnFqwuB,EAAW55B,GADOk4B,GAAsBa,GAD9BC,GAAe5ouB,EAAav9E,KAAKM,OAAOi+wB,kBAAkBp8wB,SAAW,IACRnC,KAAKM,OAAOo2E,gBAC1CswuB,GACzCzpzB,EAAQ,IAAIyiB,KAAK8myB,EAAW/gvB,cAAe+gvB,EAAW7gvB,WAAY6gvB,EAAW3gvB,WACjF,GACQnmE,KAAKM,OAAOi+wB,kBAAkBuP,YAC9ByhB,EAAY/qyB,KAAKjH,GAGbyC,KAAKo4yB,UAAU76yB,EAAOkyyB,IACtBF,EAAY/qyB,KAAKjH,GAGzBA,EAAQ4vxB,GAAa5vxB,EAAO,SACvBA,EAAM0iB,WAAa8myB,EAAS9myB,WAIrC,OAHKwvxB,IACDzvyB,KAAKuvyB,YAAcA,GAEhBA,GAEXiW,EAAMnqzB,UAAU+ixB,oBAAsB,SAAU13wB,GAC5C,OACWy/yB,GAAenmzB,KAAKM,OAAO0tM,aADzB,SAATtnM,EACgD1G,KAAKM,OAAOi+wB,kBAAkBp8wB,UAG5BnC,KAAKM,OAAOi+wB,kBAA0B,WAGhGinC,EAAMnqzB,UAAU87yB,wBAA0B,SAAU55yB,GAChD,OAAO4vxB,GAAa,IAAIntwB,KAAKziB,EAAM0iB,WAAY,IAEnDulyB,EAAMnqzB,UAAUiixB,iBAAmB,WAC/B,GAAIt9wB,KAAKM,OAAOg/tB,YAAc7huB,EAAkBuC,KAAKM,OAAOi+wB,kBAAkBt4qB,YAAa,CACvF,GAAIjmG,KAAKM,OAAOi+wB,kBAAkBp8wB,SAAW,EAAG,CAC5C,IAAIg2E,EAAUguuB,GAAeD,GAAqBlmzB,KAAKM,OAAO0tM,cAAehuM,KAAKM,OAAOi+wB,kBAAkBp8wB,SAAW,GACtH,GAAInC,KAAKM,OAAO0tM,aAAajoI,gBAAkBoS,EAAQpS,cAAe,CAGlE,OAFkB/lE,KAAKM,OAAO4qM,UAAUlgG,WAAWhrG,KAAKM,OAAO0tM,cAAgBhyK,OAAQ,SACjF,MAASh8B,KAAKM,OAAO4qM,UAAUlgG,WAAW7yB,GAAWn8C,OAAQ,UAAcm8C,EAAQpS,cAG7F,OAAQ/lE,KAAKM,OAAO4qM,UAAUlgG,WAAWhrG,KAAKM,OAAO0tM,cAAgBhyK,OAAQ,SAAa,IACtFh8B,KAAKM,OAAO0tM,aAAajoI,cAAgB,MAAS/lE,KAAKM,OAAO4qM,UAAUlgG,WAAW7yB,GAAWn8C,OAAQ,UACtGm8C,EAAQpS,cAEhB,OAAO/lE,KAAKM,OAAO4qM,UAAUlgG,WAAWhrG,KAAKM,OAAO0tM,cAAgBhyK,OAAQ,WAEhF,OAAOh8B,KAAKs4yB,gBAAgBt4yB,KAAKM,OAAO0tM,eAE5Cw3mB,EAAMnqzB,UAAUggC,aAAe,SAAUigK,GACrC,OAAOt7L,KAAKM,OAAOo4E,UAAU3E,YAAYunH,GAAQ,OAC7Ct7L,KAAKM,OAAO4qM,UAAUlgG,WAAWhrG,KAAKM,OAAO0tM,cAAgBhyK,OAAQ,YAK7EwpxB,EAAMnqzB,UAAUkkC,cAAgB,WAC5B,MAAO,SAOXimxB,EAAMnqzB,UAAUiX,QAAU,WAClBtS,KAAKM,OAAO0mF,aAGZhnF,KAAKgB,UACDhB,KAAKM,OAAO0rxB,cACZhsxB,KAAKM,OAAO0rxB,aAAa15wB,UAE7B/N,EAAOvE,KAAKgB,SACZhB,KAAKgB,QAAU,KACXhB,KAAKM,OAAO4xyB,qBACZlyyB,KAAKM,OAAO4xyB,oBAAoB5wa,gBAIrCkkb,GACT3N,IClZEoP,GAA4B,WAI5B,SAASA,EAAW3mzB,GAChBN,KAAKM,OAASA,EACdN,KAAKknzB,SAAW,IAAIrP,GAASv3yB,GAuVjC,OArVA2mzB,EAAW5rzB,UAAU8rzB,2BAA6B,SAAUzgzB,EAAMwod,EAAUk4V,EAAKh7B,EAAYj/F,GACzF,IAAI1kf,EACJ,GAAa,aAAT/hM,EAAqB,CACrB,IAAIwtyB,IAAct2L,QAAW59mB,KAAKM,OAAOo4E,UAAU3E,YAAY,cAC/D00H,EAAcz6D,GAASsrD,WAAW46mB,GAC9BthyB,WAAY,SACZ6kL,UAAWz3L,KAAKM,OAAO69wB,WAAWoiC,UAClC1pnB,UAAW72L,KAAKM,OAAO69wB,WAAWoiC,UAClCtxyB,SAAU,+CAGb,CACDw5L,EAAcz6D,GAASsrD,WAAW41R,GAC9Bt8c,WAAY,SACZ6kL,UAAWz3L,KAAKM,OAAO69wB,WAAWoiC,UAClC1pnB,UAAW72L,KAAKM,OAAO69wB,WAAWoiC,YAEtC,IAAK,IAAI3vrB,EAAK,EAAGn2F,EAAWy0b,EAASzyd,OAAQm0H,EAAKn2F,EAAUm2F,IAAM,CAC9D,IAAIy2rB,EAAalmzB,EAAc,OAC3BmC,GAAI,eAAiB4rd,EAASt+V,GAAI5wH,KAAKM,OAAO4lxB,YAAY5ixB,IAC1DD,UAAWk9wB,GAAuB98wB,OAC9BwxxB,YAAa/lU,EAASt+V,GAAIuqJ,KAC1BvpQ,KAAQ,SACRo/G,SAAY,IACZ0I,gBAAiB,QACjBguB,gBAAiB,QACjBwtoB,eAAgB,OAChBxhqB,aAAew7V,EAASt+V,GAAI5wH,KAAKM,OAAO4lxB,YAAYtoK,UAAY59mB,KAAKM,OAAO0zxB,cAAcpowB,OAAOgylB,QAAQzpV,SACrGn0R,KAAKM,OAAOo4E,UAAU3E,YAAY,eAGzCt2E,EAAkB0vrB,IACnBk6H,EAAW7jzB,aAAa,mBAAoB2prB,EAAWjgrB,YAE3DlN,KAAKM,OAAOuouB,UAAUunD,mBAAmBi3B,EAAYn4V,EAASt+V,GAAK,cAAew7pB,GAClF,IAAIj2e,OAAc,EAKdA,EAJC14S,EAAkBuC,KAAKM,OAAOi+wB,kBAAkBiX,eAInCx1xB,KAAKsnzB,kBAAkBp4V,EAASt+V,IAHhC5wH,KAAKM,OAAOg2yB,wBAAZt2yB,CAAqCkvd,EAASt+V,IAKhExrH,KAAU/D,MAAMC,KAAK60S,GAAckxgB,GACnC5+mB,EAAYruL,SAASw2G,GAAI5uH,UAAYqlzB,EAAWvlzB,UAChD,IAAI7B,GAASzD,KAAM0yd,EAASt+V,GAAK5vH,QAASynM,EAAYruL,SAASw2G,GAAK/3F,QAAQ,GAC5E74B,KAAKM,OAAOkmB,QAAQ6uwB,GAAqBp1xB,GACrCA,EAAK44B,QACLt0B,EAAOkkM,EAAYruL,SAASw2G,KASxC,OALAw2rB,EAAIzlzB,YAAY8mM,IACiB,gBAA5BzoM,KAAKM,OAAOotM,aAAiC1tM,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAMq4I,UAAU3uO,OAAS,GACtE,WAA5BuD,KAAKM,OAAOotM,cACf/pM,GAAUyjzB,GhC2Ee,gBgCzEtBA,GAEXH,EAAW5rzB,UAAUiszB,kBAAoB,SAAUhrzB,GAC/C,IAAIsvxB,EAAe5rxB,KAAKM,OAAO4lxB,YAC3Bo0B,EAAiBh+yB,EAAMsvxB,EAAahuK,UAAY59mB,KAAKM,OAAO0zxB,cAAcpowB,OAAOgylB,QAAQzpV,SACzFn0R,KAAKM,OAAOo4E,UAAU3E,YAAY,YAClCwzuB,EAAiBpmzB,EAAc,OAASkC,UhC+B1B,mBgCjBlB,GAbK5F,EAAkBnB,EAAMsvxB,EAAal+vB,YAA+C,KAAjCpxB,EAAMsvxB,EAAal+vB,YACvE4sxB,GAAiB,KAErBiN,EAAe5lzB,YAAYR,EAAc,OACrCkC,UAAWmgxB,GACXxhxB,UAAWs4yB,KAEV78yB,EAAkBnB,EAAMsvxB,EAAal+vB,YACtC65xB,EAAe5lzB,YAAYR,EAAc,OACrCkC,UAAWghyB,GACXriyB,UAAW1F,EAAMsvxB,EAAal+vB,cAGjCjwB,EAAkBnB,EAAMsvxB,EAAab,iBAAkB,CACxD,IAAIj0pB,EAAax6H,EAAMsvxB,EAAatoxB,MAAQhH,EAAMsvxB,EAAaZ,cAC3DmK,GAAkCC,GACtCmyB,EAAe5lzB,YAAYR,EAAc,OAASkC,UAAW+4tB,WAAiBtlmB,KAElF,IAAI0wrB,EAAUlrzB,EAAMsvxB,EAAa1rwB,WAC7Bi4D,EAAU77E,EAAMsvxB,EAAat9jB,SAC7BowjB,EAAWpixB,EAAMsvxB,EAAalN,UAC9B+oC,EAAYznzB,KAAKM,OAAOo4E,UAAU3E,YAAY,UAC9C8muB,EAAU76yB,KAAKM,OAAOw1xB,cAAc0xB,GAAW,MAAQxnzB,KAAKM,OAAOw1xB,cAAc39sB,GACrF,IAAK16E,EAAkBnB,EAAME,MAAO,CAEhCirzB,IADmBtvuB,EAAQl4D,UAAYunyB,EAAQvnyB,WAAaomwB,IAAmB,EAAIohC,EAAY5M,GACrE,KAAO76yB,KAAKM,OAAOo4E,UAAU3E,YAAY,OAAS,IACtEz3E,EAAME,KAAKyV,MAAQ,IAAM3V,EAAME,KAAKsiB,MAAQ,IAMtD,OAAQyoyB,EAJUpmzB,EAAc,OAC5BkC,UhC2CiB,cgC1CjBrB,WAAavE,EAAkBnB,EAAME,OAASkixB,EAAY+oC,EAAY5M,MAI9EoM,EAAW5rzB,UAAUqszB,oBAAsB,SAAU/9yB,GAEjD,IAAK,IADDq8wB,KACK5nxB,EAAK,EAAGusxB,EAAWhhxB,EAAQvL,EAAKusxB,EAASluxB,OAAQ2B,IAAM,CAC5D,IAAIoV,EAAUm3wB,EAASvsxB,GACnBupzB,EAAU3nzB,KAAKM,OAAOuouB,UAAUmkD,gBAAgBx5wB,GACpDwywB,EAAkBA,EAAgBzrwB,OAAOotyB,EAAQlrzB,OAAS,EAAIkrzB,EAAUn0yB,GAE5E,OAAOwywB,GAEXihC,EAAW5rzB,UAAUuszB,iBAAmB,WAEpC,IAAK,IAAIxpzB,EAAK,EAAGypzB,KADKxmzB,MAAMC,KAAKtB,KAAKM,OAAOU,QAAQQ,iBAAiB,IAAM++wB,KAC5BnixB,EAAKypzB,EAAeprzB,OAAQ2B,IAAM,CAC9E,IAAI4C,EAAU6mzB,EAAezpzB,GAC7B4B,KAAKM,OAAOuouB,UAAUwmD,sBAAsBruxB,GAGhD,IAAK,IAAI6B,EAAK,EAAGilzB,KADUzmzB,MAAMC,KAAKtB,KAAKM,OAAOU,QAAQQ,iBAAiB,cACjBqB,EAAKilzB,EAAoBrrzB,OAAQoG,IAAM,CACzF7B,EAAU8mzB,EAAoBjlzB,GAClC0C,GAAanB,IAAIpD,EAAS,QAAShB,KAAKM,OAAO8qyB,aAAa2c,mBAAoB/nzB,QAGxFinzB,EAAW5rzB,UAAU2szB,8BAAgC,SAAU70H,EAAO6rH,EAAUiJ,GAC5E,GAAIxqzB,EAAkBuC,KAAKM,OAAO0rxB,aAAagD,mBAAoB,CAC/D,IAAI78nB,EAAQnyJ,KAAKknzB,SAAStX,aAAa5vyB,KAAKknzB,SAAS3X,YAAavvyB,KAAKM,OAAOi+wB,kBAAkBkxB,UAChGzvyB,KAAKM,OAAO0rxB,aAAa+iB,uBAAuB58oB,GAOpD,IAAK,IALD+1pB,EAAiB/6B,GAAa,IAAIntwB,KAAKioyB,EAAWhoyB,WAAY++xB,GAC9DphuB,EAAQ59E,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAM86rB,QAAsC,gBAA5B7txB,KAAKM,OAAOotM,YAAiCsxmB,EAAW,EAC9GmJ,EAAUnozB,KAAKM,OAAO0rxB,aAAaD,mBACnCgiB,EAAU/tyB,KAAKM,OAAO0rxB,aAAagD,kBACnCo5B,EAAcH,EACT9rzB,EAAI,EAAGA,EAAIyhF,EAAMzhF,IAAK,CAC3B,IAAIkszB,KACAC,KACArgkB,EAAY,EACZ8wiB,OAAW,EACXh1rB,OAAU,EACVwktB,EAAYp7B,GAAai7B,EAAajszB,GACtCqszB,EAAaxozB,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAM86rB,QAAsC,gBAA5B7txB,KAAKM,OAAOotM,YACrEy/kB,GAAao7B,EAAW,GAAKL,EAC/BO,EAAmBzozB,KAAKM,OAAOuouB,UAAUsiD,aAAao9B,EAAWC,GACrE,GAAIC,EAAiBhszB,OAAS,IAAMuD,KAAKM,OAAOoozB,qBAAmD,gBAA5B1ozB,KAAKM,OAAOotM,YAA+B,CAC9G,IAAK,IAAI1rI,EAAM,EAAGA,EAAM+ruB,EAAQtxyB,OAAQulE,IAAO,CAC3Cg9uB,EAAah/yB,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAM86rB,QAAsC,gBAA5B7txB,KAAKM,OAAOotM,YAA4C,EAAXsxmB,EACxG,IAAIxizB,KACJyrzB,EAAaM,EACb,IAAII,EAAoB3ozB,KAAKM,OAAOuouB,UAAUsiD,aAAa88B,EAAYC,EAAgBO,EAAkB1a,EAAQ/ruB,IACjH,GAAI2mvB,EAAkBlszB,OAAS,IAAMuD,KAAKM,OAAOoozB,qBAAmD,gBAA5B1ozB,KAAKM,OAAOotM,YAChF,IAAK,IAAI9wK,EAAI,EAAGA,EAAIoixB,EAAUpixB,IAAK,CAC/B,IAAIgsxB,EAAmB5ozB,KAAKM,OAAOuouB,UAAUsiD,aAAa88B,EAAY96B,GAAa86B,EAAY,GAAIU,OAAmBxtzB,GAsBtH,IArBIytzB,EAAiBnszB,OAAS,IAAMuD,KAAKM,OAAOoozB,qBAChB,gBAA5B1ozB,KAAKM,OAAOotM,eACZlxM,EAAKgI,KAAKokzB,EAAiB,IAC3B7vB,GACI9hgB,QAAS,EAAGvwR,KAAM,cAAeuqQ,SAAUk3iB,EAAQA,EAAQ1rzB,OAAS,GACpE0wrB,WAAY4gH,EAAQ/ruB,GAAKmrnB,WAAYi/F,WAAY2hB,EAAQ/ruB,GAAKoqtB,WAC9D2C,aAAcgf,EAAQ/ruB,GAAK+stB,aAAc1psB,UAAWujuB,EAAkBjyuB,KAAMsxuB,GAEhFlktB,GACIkzL,QAAS,EAAGvwR,KAAM,aAAcuqQ,SAAUk3iB,EAAQA,EAAQ1rzB,OAAS,GACnE2vxB,WAAY2hB,EAAQ/ruB,GAAKoqtB,WAAY2C,aAAcgf,EAAQ/ruB,GAAK+stB,aAChEp4sB,KAAMsxuB,EAAYx7xB,KAAM,IAEvB47xB,EAAcpgkB,KACfogkB,EAAcpgkB,OAElBogkB,EAAcpgkB,GAAWzjP,KAAKu0xB,GAC9BsvB,EAAcpgkB,GAAWzjP,KAAKu/F,GAC9BkkJ,MAEJggkB,EAAa96B,GAAa86B,EAAY,IACvBhoyB,WAAaioyB,EAAejoyB,WAAajgB,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAM86rB,QACzD,gBAA5B7txB,KAAKM,OAAOotM,YAA+B,CAC9C26mB,EAAcA,EAAc5rzB,OAAS,GAAG,GAAGgwB,KAAO,UAClD,IAAIqmI,GACAmkI,QAASz6R,EAAKC,OAAQiK,KAAM,iBAAkBuqQ,SAAUk3iB,EAAQA,EAAQ1rzB,OAAS,GACjF2vxB,WAAY2hB,EAAQ/ruB,GAAKoqtB,WAAW/qxB,MAAM,GAAI,GAAI0txB,aAAcgf,EAAQ/ruB,GAAK+stB,aAC7E5hG,WAAak7H,EAAc5rzB,OAASD,EAAKC,OAAS4G,WhC/E3D,mBgCgFSszE,KAAMsxuB,GAEVI,EAAcA,EAAc5rzB,OAASD,EAAKC,QAAQ+H,KAAKsuJ,GACvDw1pB,EAAkB9jzB,KAAK9F,KAAWo0J,EAAS,MAAM,IACjD,QAQhB,IAAK,IAHD+1pB,EAAeV,EAAQ9mzB,MAAM,GAAI,GACjCynzB,KACAC,EAAe,EACV/7yB,EAAI,EAAGA,EAAI67yB,EAAapszB,OAAQuQ,IAGhC,CAFDxQ,EAAOqszB,EAAaA,EAAapszB,QAAUuQ,EAAI,IAC9Cu2D,WACL,IAAK,IAAIx2D,EAAI,EAAGA,EAAIvQ,EAAKC,OAAQsQ,IAE7B,IAAK,IADDg5F,EAAI,EACCijB,EAAI,EAAGA,EAAIs/rB,EAAkB7rzB,OAAQusH,IACtCs/rB,EAAkBt/rB,GAAGojqB,WAAWy8B,EAAapszB,QAAUuQ,EAAI,MAAQxQ,EAAKuQ,GAAG87yB,EAAaA,EAAapszB,QAAUuQ,EAAI,IAAIyqxB,WACvHsxB,GAA8BT,EAAkBt/rB,GAAGiuK,QACnD6xhB,EAAgBtkzB,KAAK9F,KAAW4pzB,EAAkBt/rB,GAAI,MAAM,OAE1DjjB,IAAMuitB,EAAkB7rzB,QAAUqszB,EAAgBrszB,OAAS,IAC7DqszB,EAAgB,GAAG7xhB,QAAU8xhB,EAC7BD,EAAgB,GAAGpizB,KAAO,sBAAwBsG,EAAI,GACtD87yB,EAAgB,GAAG73iB,SAAW43iB,EAAaA,EAAapszB,QAAUuQ,EAAI,IACtE87yB,EAAgB,GAAG/5B,aAAevyxB,EAAKuQ,GACvC+7yB,EAAgB,GAAGnyuB,KAAOsxuB,EAC1BI,EAAcS,EAAgB,GAAG37H,YAAY3orB,KAAKskzB,EAAgB,IAClEA,KACAC,EAAe,GAK/B/ozB,KAAKgpzB,uBAAuBX,EAAel1H,IAIpB,IADTnzrB,KAAKM,OAAOuouB,UAAUsiD,aAAai9B,EAAaF,GAClDzrzB,SAAiBuD,KAAKM,OAAOi+wB,kBAAkBu0B,uBAAyB9yyB,KAAKM,OAAOoozB,qBACpG1ozB,KAAKipzB,mBAAmB91H,EAAOi1H,IAGvCnB,EAAW5rzB,UAAU2tzB,uBAAyB,SAAUE,EAAU/1H,GAC9D,IACI0wH,EAEA//mB,EAEA3xC,EALA62O,EAAK7nY,EAAc,MAAQsC,OAASmO,KAAM,SAE1C+kQ,EAAKx1Q,EAAc,MAAQsC,OAASmO,KAAM,WAAY81I,gBAAiB,WAEvEuvI,EAAU,EAEd,GAAIj3R,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAM86rB,QAAsC,gBAA5B7txB,KAAKM,OAAOotM,YAA+B,CAGzF,IAAK,IAFDy7mB,KACAC,EAAmBppzB,KAAKM,OAAO0rxB,aAAaD,mBAAmB1qxB,MAAM,GAAI,GACpEwrO,EAAI,EAAGA,EAAIq8kB,EAASzszB,OAAQowO,IACjCs8kB,EAAqBA,EAAmB5uyB,OAAO2uyB,EAASr8kB,IAGxD16E,EADAi3pB,EAAiB3szB,OAAS,EAClB,qBAAuB2szB,EAAiB3szB,OAAOyQ,WAG/C,iBAIZ,IAAK,IAFDm8yB,EAAoB,IAAI7lvB,IAAcE,KAAMylvB,IAAsBllvB,cAAa,IAAIZ,IAClFQ,MAAM,OAAQ,QAASsuF,IACnBplJ,EAAI,EAAGA,EAAIs8yB,EAAkB5szB,OAAQsQ,IAC1CkqR,GAAoBoyhB,EAAkBt8yB,GAAGkqR,QAGjD,IAAK,IAAIv2N,EAAM,EAAGA,EAAMwovB,EAASzszB,OAAQikE,IAAO,CAC5CmjvB,EAAM76a,EAAGpnY,YACT,IAAK,IAAI6+D,EAAMyovB,EAASxovB,GAAKjkE,OAAS,EAAGgkE,GAAO,EAAGA,IAAO,CACtD,IAAIp9D,OAAY,EACZ7G,EAAO0szB,EAASxovB,GAAKD,GACrB2jvB,EAAMztiB,EAAG/0Q,YACb,GAAkB,eAAdpF,EAAKkK,KAAuB,CAC5B,GAAI1G,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAM86rB,QAAsC,gBAA5B7txB,KAAKM,OAAOotM,YAA+B,CACzF5J,EAAWolnB,EAASxovB,GAAKD,GACzB,SAEJ2jvB,EAAI5gzB,aAAa,YAAahH,EAAKm6E,KAAK12D,UAAU/S,YAClDk3yB,EAAIzizB,YAAY3B,KAAKspzB,wBAAwB9szB,EAAKm6E,OAClDtzE,GAAaghxB,GhC3IF,iBgC4IO,YAAd7nxB,EAAKiwB,MACLppB,EAAUmB,KhCjIG,gBgCmIjBb,GAAUygzB,GAAM/gzB,GAChBwgzB,EAAIlizB,YAAYyizB,QAEf,GAAkB,gBAAd5nzB,EAAKkK,KAAwB,CAClC,IAAI8sC,EAAyC,IAA1Bh3C,EAAK6oF,UAAU5oF,OAAgB,WAAa,QAC/D2nzB,EAAMpkzB,KAAKmnzB,2BAA2B3zwB,EAAah3C,EAAK6oF,UAAW++tB,EAAK5nzB,EAAK4vxB,WAAY5vxB,EAAK2wrB,aAC1F3prB,aAAa,YAAahH,EAAKm6E,KAAK12D,UAAU/S,aAC9ClN,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAM86rB,QAAsC,gBAA5B7txB,KAAKM,OAAOotM,cAE1D/pM,GAAUygzB,GADV/gzB,GAAaghxB,GhCvIC,kBgC0IlBw/B,EAAIlizB,YAAYyizB,QAGhBA,EAAI5gzB,aAAa,UAAWhH,EAAKy6R,QAAQ/pR,YACzCvJ,GAAUygzB,GhChKK,qBgCiKfpkzB,KAAKknzB,SAASzO,yBAAyB2L,EAAK5nzB,EAAMA,EAAK6G,UAAU,IACjEwgzB,EAAIlizB,YAAYyizB,GAGxB,GAAIpkzB,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAM86rB,QAAkB,IAARnttB,GAAyC,gBAA5B1gE,KAAKM,OAAOotM,YAA+B,EAClG02mB,EAAMztiB,EAAG/0Q,aACT4B,aAAa,YAAasgM,EAASntH,KAAK12D,UAAU/S,YACtDk3yB,EAAI5gzB,aAAa,UAAWyzR,EAAQ/pR,YACpCk3yB,EAAIzizB,YAAY3B,KAAKspzB,wBAAwBxlnB,EAASntH,OAEtDhzE,GAAUygzB,GADN/gzB,GAAaghxB,GhCxKF,gBAcA,kBgC4Jf,IAAI8gC,EAAY/3B,GAAkBptxB,KAAKM,OAAO0tM,aAAa/tL,UAAW6jL,EAASntH,KAAK12D,WAEpF,GADA4jyB,EAAIrgzB,aAAa,gBAAiB2hzB,EAAUj4yB,YACxClN,KAAKM,OAAOU,QAAQ2B,cAAc,oCAClCoyB,SAAS8uxB,EAAIhxyB,aAAa,iBAAkB,IAAM,MAClD,MAEJgxyB,EAAI3+yB,aAAak/yB,EAAKP,EAAItyyB,WAAW,IAEzC4hrB,EAAMxxrB,YAAYkizB,KAG1BoD,EAAW5rzB,UAAUiuzB,wBAA0B,SAAU3yuB,GACrD,IAAIkwuB,EACJ,GAAI7mzB,KAAKM,OAAOi+wB,kBAAkBy0B,mBAAoB,CAClD6T,EAAa1lzB,EAAc,OAASkC,UhC5Lf,sBgC6LrB,IAAIkmzB,GAAiB5yuB,KAAMA,EAAMjwE,KAAM,cACnCuI,EAAWjP,KAAKM,OAAO61yB,uBAAZn2yB,CAAoCupzB,GACnDnkzB,KAAU/D,MAAMC,KAAK2N,GAAW43yB,QAGhCA,EAAa7mzB,KAAKknzB,SAAS1O,qBAAqB7huB,EhClM3B,qBgCoMzB,OAAOkwuB,GAEXI,EAAW5rzB,UAAU4tzB,mBAAqB,SAAU91H,EAAO80H,GACvD,IAAIuB,EAAMxpzB,KAAKypzB,sBAAsBxB,EAAY,YAC7CyB,EAAMF,EAAIpvyB,SAAS,GACnB85xB,EAAW/yyB,EAAc,OACzBkC,UhChL0B,gBgCiL1BrB,UAAWhC,KAAKM,OAAOo4E,UAAU3E,YAAY,cAEjD21uB,EAAI/nzB,YAAYuyyB,GAChB/gH,EAAMxxrB,YAAY6nzB,IAEtBvC,EAAW5rzB,UAAUouzB,sBAAwB,SAAU9yuB,EAAMjwE,GACzD,IAAIy+yB,EAAY/3B,GAAkBptxB,KAAKM,OAAO0tM,aAAa/tL,UAAW02D,EAAK12D,WACvE+oX,EAAK7nY,EAAc,MAAQsC,OAASmO,KAAQ,MAAO+3yB,gBAAiBxE,EAAUj4yB,cAC9EypQ,EAAKx1Q,EAAc,MACnBsC,OACI89H,MAAmB,gBAAT76H,EhCvNa,iBgCuN6C29wB,GACpEzywB,KAAQ,WACR81I,gBAAiB,QACjBkiqB,gBAAiBzE,EAAUj4yB,WAC3B28yB,YAAalzuB,EAAK12D,UAAU/S,cAGhC48yB,EAAMnziB,EAAG/0Q,YACTwlzB,EAAMzwiB,EAAG/0Q,YAKb,OAJAonY,EAAGrnY,YAAYmozB,GACF,aAATpjzB,GACAsiY,EAAGrnY,YAAYylzB,GAEZp+a,GAEJi+a,KCpWP38tB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAoBxCo/tB,GAAwB,SAAU5+tB,GAKlC,SAAS4+tB,EAAOzpzB,GACZ,IAAIP,EAAQorF,EAAO7pF,KAAKtB,KAAMM,IAAWN,KAQzC,OAPAD,EAAMwgzB,UAAY,gBAClBxgzB,EAAMykxB,sBAAuB,EAC7BzkxB,EAAMiqzB,eACNjqzB,EAAMkqzB,iBAAmB,EACzBlqzB,EAAMs7E,QAAU,IAAIr7D,KAAK,KAAM,EAAG,GAClCjgB,EAAMq7E,QAAU,IAAIp7D,KAAK,KAAM,GAAI,IACnCjgB,EAAMmqzB,WAAa,IAAIjD,GAAW3mzB,GAC3BP,EA6ZX,OA1aAuqF,GAAUy/tB,EAAQ5+tB,GAkBlB4+tB,EAAO1uzB,UAAUkkC,cAAgB,WAC7B,MAAO,UAEXwqxB,EAAO1uzB,UAAU07uB,aAAe,WAC5B/2uB,KAAKgqzB,eACLhqzB,KAAKgB,QAAUG,EAAc,OAASkC,UAAW0/yB,KACjDp/yB,GAAU3D,KAAKgB,SAAUhB,KAAKugzB,WAC9BvgzB,KAAKgB,QAAQW,YAAY3B,KAAKg4yB,kBAAkBgL,KAChDhjzB,KAAKM,OAAOU,QAAQ2B,cAAc,IAAM28wB,IAA2B39wB,YAAY3B,KAAKgB,SACpF,IAAIwozB,EAAMrozB,EAAc,MACxBnB,KAAKgB,QAAQ2B,cAAc,SAAShB,YAAY6nzB,GAChD,IAAInG,EAASlizB,EAAc,MAC3BqozB,EAAI7nzB,YAAY0hzB,GAChB,IAAIvoyB,EAAO3Z,EAAc,OAASkC,UAAWw8wB,KAC7CwjC,EAAO1hzB,YAAYmZ,GACnB,IAAI4oyB,EAAM1jzB,KAAKg4yB,kBAAkBlC,IACjCh7xB,EAAKnZ,YAAY+hzB,GACjB,IAAIvwH,EAAQuwH,EAAI/gzB,cAAc,SAC1BslzB,EAAa/pC,GAAel+wB,KAAKM,OAAO0tM,cAC5ChuM,KAAKkqzB,WAAWjB,mBAAmB91H,EAAO80H,GAC1CjozB,KAAKukB,aACDvkB,KAAKM,OAAOkryB,cAAcC,kBAAoBzryB,KAAKM,OAAOU,QAAQ2B,cAAc,IAAMwpyB,MACtFnsyB,KAAKM,OAAO0rxB,aAAa+iB,yBAA0BQ,YAAavvyB,KAAKM,OAAO69wB,WAAWoxB,eACvFvvyB,KAAK24yB,8BAET34yB,KAAKM,OAAOyN,OAAO8ioB,QAEvBk5K,EAAO1uzB,UAAU8uzB,UAAY,SAAUlqzB,GACnCD,KAAKujE,WAAa7kE,KAAWsB,KAAKM,OAAO+qxB,WAAY,MAAM,GAC3D,IAAK,IAAIjtxB,EAAK,EAAGyE,EAAK7C,KAAKM,OAAO+qxB,WAAYjtxB,EAAKyE,EAAGpG,OAAQ2B,IAAM,QAClDyE,EAAGzE,GACF2xxB,eAEnB,IAAI2E,EAAkBz0xB,EAAKsrxB,cAC3B,GAAIvrxB,KAAKM,OAAOkryB,cAAcC,gBAAiB,CAC3C,IAAIx6hB,EAAWjxQ,KAAKM,OAAO0rxB,aAAagD,kBAAkBhvxB,KAAKM,OAAOkryB,cAAcr+G,YACpFntrB,KAAKujE,WAAavjE,KAAKM,OAAOuouB,UAAUgjD,uBAAuB56gB,EAAUjxQ,KAAKujE,YAC9EmxtB,EAAkB10xB,KAAKM,OAAOuouB,UAAUgjD,uBAAuB56gB,EAAUyjhB,GAE7E10xB,KAAKM,OAAO0lxB,gBAAkBhmxB,KAAKkqzB,WAAWxC,oBAAoBhzB,GAClE,IAAIuzB,EAAa/pC,GAAel+wB,KAAKM,OAAO0tM,cACxCmlf,EAAQnzrB,KAAKM,OAAOysoB,kBACxBomD,EAAMnxrB,UAAY,GAClBhC,KAAK2sH,cAAcwmkB,EAAO80H,GAC1BjozB,KAAKkqzB,WAAWtC,mBACE/hzB,EAAQstrB,EAAO,IAAM0sF,IAC3B1zwB,UAAY,GAE5B49yB,EAAO1uzB,UAAU+uzB,aAAe,SAAUC,GAEtC,IAAK,IADD9+B,KACKntxB,EAAK,EAAGyE,EAAK7C,KAAKujE,WAAYnlE,EAAKyE,EAAGpG,OAAQ2B,IAAM,CACzD,IAAIinF,EAAYxiF,EAAGzE,GACfwtB,EAAS5rB,KAAKM,OAAO4lxB,YACrB1pxB,EAAO6oF,EACP5nF,EAAkBjB,EAAKovB,EAAOo/vB,iBAAmBvtxB,EAAkBjB,EAAKovB,EAAOm/vB,mBAC9EttxB,EAAkBjB,EAAKuzxB,iBAAmBs6B,GAAe7tzB,EAAKuzxB,eAAelxwB,MAC9E0swB,EAAgBA,EAAchxwB,OAAOva,KAAKM,OAAOuouB,UAAUoiD,mBAAmBzuxB,EAAM6tzB,KAG5FrqzB,KAAKM,OAAO0lxB,gBAAkBhmxB,KAAKM,OAAO0lxB,gBAAgBzrwB,OAAOva,KAAKkqzB,WAAWxC,oBAAoBn8B,KAEzGw+B,EAAO1uzB,UAAUsxH,cAAgB,SAAUwmkB,EAAO80H,GAC9C,IAAIr8B,EAAe5rxB,KAAKM,OAAO4lxB,YAC3BqiC,EAAY,IAAIvoyB,KAAKioyB,EAAWhoyB,WAChCyxL,EAAW1xM,KAAKm3yB,wBAAwBoR,GACxC5qzB,EAAWqC,KAAKsqzB,qBAAqB/B,EAAW72mB,GAWpD,GAVwB,IAApB/zM,EAASlB,SACTi1M,EAAW62mB,EACXA,EAAY,IAAIvoyB,KAAKhgB,KAAKq7E,QAAQp7D,WAEV,KADxBtiB,EAAWqC,KAAKsqzB,qBAAqB/B,EAAW72mB,IACnCj1M,SACT8rzB,EAAY72mB,EACZA,EAAW,IAAI1xL,KAAKhgB,KAAKo7E,QAAQn7D,WACjCtiB,EAAWqC,KAAKsqzB,qBAAqB/B,EAAW72mB,KAGpD/zM,EAASlB,OAAS,EAAG,CACrB,IAAI8tzB,EAAU5szB,EACdsqzB,EAAasC,EAAQ,GAAG3+B,EAAa1rwB,WACrC+nyB,EAAa,IAAIjoyB,KAAK,IAAIA,KAAKioyB,EAAWhoyB,WAAWwkD,SAAS,EAAG,EAAG,EAAG,IACvEzkE,KAAKwqzB,iBAAiBD,EAAQ,GAAG3+B,EAAa1rwB,YAElD,IAAIi4D,EACJ,IAAKn4E,KAAKM,OAAOoozB,qBAAwB1ozB,KAAKM,OAAOmqzB,gBAAkB,GAAK9szB,EAASlB,OAAS,EAAI,CAC9F,IAAIuizB,GAAah/yB,KAAKM,OAAOoozB,sBAAwB1ozB,KAAKM,OAAOi+wB,kBAAkBu0B,uBAC/E9yyB,KAAKM,OAAOmqzB,gBAAkB9szB,EAASlB,OAAUuD,KAAKM,OAAOmqzB,gBAAkB9szB,EAASlB,OAC5F,GAAIuD,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAMq4I,UAAU3uO,OAAS,IAAMuD,KAAKM,OAAOkryB,cAAcC,gBAAiB,CACxG,IAAI90tB,EAAOsxuB,EACNjozB,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAM86rB,SACrC7txB,KAAKM,OAAOi+wB,kBAAkBu0B,uBAAwB,EACtDn8tB,EAAO4xuB,EACHvozB,KAAKM,OAAO8qpB,eACZprpB,KAAKM,OAAO8qpB,aAAaiyH,gBAAgBr9wB,KAAKM,OAAO69wB,WAAWb,oBAChEt9wB,KAAKM,OAAO8qpB,aAAa2zH,kBAAkB,YAGnD/+wB,KAAKkqzB,WAAWlC,8BAA8B70H,EAAOnzrB,KAAKM,OAAOmqzB,gBAAiB9zuB,QAGlF,IAAK,IAAIc,EAAM,EAAGA,EAAMunuB,EAAUvnuB,IAAO,CACrC,IAAI25tB,KACJA,EAAapxyB,KAAKsqzB,qBAAqBrC,GACvC,IAAIyC,EAAM1qzB,KAAKkqzB,WAAWT,sBAAsBxB,EAAY,QAC5D,IAAIjozB,KAAKgB,QAAQ2B,cAAc,qBAAuBoyB,SAAS21xB,EAAI73yB,aAAa,iBAAkB,IAC5F,MADN,CAOA,IAAIi3yB,EAAMY,EAAItwyB,SAAS,GACnBgtyB,EAAMsD,EAAItwyB,SAAS,GACvB,GAAIg3xB,EAAW30yB,OAAS,IAAOuD,KAAKM,OAAOoozB,qBAA6C,IAAtBtX,EAAW30yB,OAAe,CACxF,IAAI+2C,EAAgBxzC,KAAKM,OAAOoozB,qBAA6C,IAAtBtX,EAAW30yB,OAA6B,OAAb,WAClFqtzB,EAAInozB,YAAY3B,KAAKkqzB,WAAWZ,wBAAwBrB,IACxDyC,EAAI/ozB,YAAYmozB,GAChB,IAAIa,EAAM3qzB,KAAKkqzB,WAAW/C,2BAA2B3zwB,EAAa49vB,EAAYgW,GAC9EsD,EAAI/ozB,YAAYgpzB,GACZA,EAAInpzB,iBAAiB,MAAM/E,OAAS,GACpC02rB,EAAMxxrB,YAAY+ozB,QAGjB1qzB,KAAKM,OAAOi+wB,kBAAkBu0B,uBACnCr7tB,IAMJ,GAJIz3E,KAAKk4yB,cAAc,IAAIl4xB,KAAKioyB,EAAWhoyB,aACvCtc,EAASmmzB,EAAI1vyB,SjC3CC,kBiC6ClB6tyB,EAAa96B,GAAa86B,EAAY,IACvBhoyB,UAAYyxL,EAASzxL,UAChC,OAIZk4D,EAAU,IAAIn4D,KAAKioyB,EAAWhoyB,UAAYomwB,SAG1CrmxB,KAAKkqzB,WAAWjB,mBAAmB91H,EAAO80H,GAC1C9vuB,EAAUg1sB,GAAa86B,EAAYjozB,KAAKM,OAAOmqzB,gBAAkB,GAErEzqzB,KAAKgqzB,aAAgBzszB,MAAOgrzB,EAAW1pyB,IAAKs5D,IAehD4xuB,EAAO1uzB,UAAUuvzB,gBAAkB,SAAUtuzB,GACzC0D,KAAKM,OAAOgoxB,WAAWkH,iBACnBxvxB,KAAKM,OAAOi+wB,kBAAkBu0B,uBAC9B9yyB,KAAK6qzB,iBAAiBvuzB,IAG9BytzB,EAAO1uzB,UAAUwvzB,iBAAmB,SAAUvuzB,GAC1C,IAUIwuzB,EAVA3jzB,EAAS7K,EAAM6K,OACfgF,EAAYhF,EAAOgF,UACnBslT,EAAetqT,EAAOsqT,aAEtBnsH,EAAcn5L,EADChF,EAAOmmB,aAEtBkI,EAAax1B,KAAKiqzB,iBAAmB99yB,EAAa,OAAS,WAC3DgnrB,EAAQhsrB,EAAOxE,cAAc,SAC7BoozB,EAAa5pzB,EAAc,SAC3BikM,EAAaplM,KAAKgrzB,+BAA+B1uzB,EAAOk5B,GACxDy1xB,EAAa,IAAIjryB,KAAK+U,SAASqwK,EAAWvyL,aAAa,aAAc,IAGzE,GAAkB,IAAd1G,GAGA,GAFA2+yB,EAAa9qzB,KAAKkrzB,oBAAoB/9B,GAAa89B,GAAa,GAAIz1xB,GACvDx1B,KAAKsqzB,qBAAqBQ,EAAWvtzB,MAAOutzB,EAAWjsyB,KACrDpiB,OAAS,IAAMuD,KAAKM,OAAOoozB,oBAAqB,CAC3D1ozB,KAAK2sH,cAAco+rB,EAAYD,EAAWvtzB,OAC1C41rB,EAAMnxrB,UAAY+ozB,EAAW/ozB,UAAYmxrB,EAAMnxrB,UAC/ChC,KAAKkqzB,WAAWtC,mBAChB,IAAK,IAAIlgxB,EAAI,EAAG1mC,EAAUmyrB,EAAM/4qB,SAAUstB,EAAI1mC,EAAQvE,OAAQirC,IAC1D,GAAI1mC,EAAQ0mC,GAAG70B,aAAa,mBAAqBuyL,EAAWvyL,aAAa,iBAAkB,CACvF,IAAIs4yB,EAAgBnqzB,EAAQ0mC,GAAGtzB,UAC3BpU,KAAKgB,QAAQ2B,cAAc,kBAAkB+uC,aACjDvqC,EAAOgF,UAAYg/yB,EACnB,MAGRnrzB,KAAKwqzB,iBAAiBS,SAGrB3lnB,IAAgBmsH,GACrBq5f,EAAa9qzB,KAAKkrzB,oBAAoB/9B,GAAa89B,EAAY,GAAIz1xB,IACtDx1B,KAAKsqzB,qBAAqBQ,EAAWvtzB,MAAOutzB,EAAWjsyB,KACrDpiB,OAAS,IAAMuD,KAAKM,OAAOoozB,uBACtC1ozB,KAAK2sH,cAAco+rB,EAAYD,EAAWvtzB,OAC1C41rB,EAAMnxrB,WAAa+ozB,EAAW/ozB,UAC9BhC,KAAKkqzB,WAAWtC,mBAChB5nzB,KAAKwqzB,iBAAiBS,KAI1BjrzB,KAAKwqzB,iBAAiBS,GAE1BjrzB,KAAKiqzB,iBAAmB99yB,EACxB,IAAIqhW,EAAmBxtW,KAAKM,OAAOuouB,UAAUg+C,0BACzCr5a,EAAiB/wW,OAAS,GAC1B+wW,EAAiBA,EAAiB/wW,OAAS,GAAGyF,SAGtD6nzB,EAAO1uzB,UAAU2vzB,+BAAiC,SAAU1uzB,EAAOk5B,GAC/D,IAAI0goB,EAOAtliB,EANAzpH,EAAS7K,EAAM6K,OACfgF,EAAYhF,EAAOgF,UACnBslT,EAAetqT,EAAOsqT,aAEtBnsH,EAAcn5L,EADChF,EAAOmmB,aAEtB2sK,KAAkB54L,MAAMC,KAAK6F,EAAO3F,iBAAiB,mBAGzD,GAAIy4L,EAAax9L,OAAS,EACtB,GAAkB,IAAd0P,EAEA+ppB,EAAgBrwpB,EADhB+qH,EAAKqpE,EAAa,GACU,IAAMoqlB,SAEjC,GAAI/+kB,IAAgBmsH,EAErBykW,EAAgBrwpB,EADhB+qH,EAAKqpE,EAAaA,EAAax9L,OAAS,GACZ,IAAM4nxB,SAGlC,IAAK,IAAIlhuB,EAAI,EAAG1oB,EAAWw/J,EAAax9L,OAAQ0mD,EAAI1oB,EAAU0oB,IAG1D,GAFAytE,EAAKqpE,EAAa92I,GACNytE,EAAGhlH,wBACDc,KAAO,EAAG,CACpBwppB,EAAgBrwpB,EAAQ+qH,EAAI,IAAMyzpB,IAClC,MAKhB,OAAOnuH,GAEX6zJ,EAAO1uzB,UAAUmvzB,iBAAmB,SAAU7zuB,GACtC32E,KAAKM,OAAO2xyB,eACZjyyB,KAAKM,OAAO8qpB,aAAaiyH,gBAAgBr9wB,KAAKs9wB,iBAAiB3msB,KAGvEozuB,EAAO1uzB,UAAU6vzB,oBAAsB,SAAUv0uB,EAAMjwE,GACnD,IAAI62E,EAAc,IAAIv9D,KAAK22D,EAAK12D,WAC5BsoyB,EAAYvozB,KAAKorzB,wBAAwBz0uB,GACzC+6H,EAAW1xM,KAAKm3yB,wBAAwBxguB,GACxCwuuB,EAAY,EAChB,EAAG,CAMC,IALiBnlzB,KAAKsqzB,qBAAqB/suB,GAC5B9gF,OAAS,IAAMuD,KAAKM,OAAOoozB,sBACtCvD,KAEJ5nuB,EAAc4vsB,GAAa5vsB,EAAuB,SAAT72E,EAAmB,GAAK,IAC/C6hzB,GAAahruB,EAAcm0H,EACzC,YAECyzmB,IAAcnlzB,KAAKM,OAAOmqzB,iBACnC,IAAItyuB,EAAUg1sB,GAAa5vsB,EAAuB,SAAT72E,GAAoB,EAAI,GACjE,MAAiB,SAATA,GAAqBnJ,MAAOo5E,EAAM93D,IAAKsuwB,GAAah1sB,EAAS,KAAS56E,MAAO46E,EAASt5D,IAAKsuwB,GAAax2sB,EAAM,KAE1HozuB,EAAO1uzB,UAAUivzB,qBAAuB,SAAUpyuB,EAAWC,GACzD,IAAIkzuB,EACAC,GACC7tzB,EAAkBy6E,IAAcz6E,EAAkB06E,IACnDkzuB,EAAYntC,GAAe,IAAIl+vB,KAAKk4D,EAAUj4D,YAC9CqryB,EAAU3G,GAAa,IAAI3kyB,KAAKqryB,EAAUpryB,WAAYomwB,MAGtDglC,EAAY,IAAIrryB,KAAKk4D,EAAUj4D,WAC/BqryB,EAAU,IAAItryB,KAAKm4D,EAAQl4D,YAE/B,IAAImxxB,EAAapxyB,KAAKM,OAAOuouB,UAAUsiD,aAAakgC,EAAWC,GAK/D,OAJ0B,IAAtBla,EAAW30yB,SACXuD,KAAKoqzB,aAAalyuB,GAClBk5tB,EAAapxyB,KAAKM,OAAOuouB,UAAUsiD,aAAakgC,EAAWC,IAExDla,GAEX2Y,EAAO1uzB,UAAU+vzB,wBAA0B,SAAUjzuB,GACjD,IAAI2yuB,EACAl/B,EAAe5rxB,KAAKM,OAAO4lxB,YAC/B,GAAIlmxB,KAAKM,OAAO0lxB,gBAAgBvpxB,OAAS,EAAG,CACxC,IAAI8rzB,EAAYl8yB,KAAK0T,IAAIxkB,MAAM8Q,KAAMrM,KAAKM,OAAO0lxB,gBAAgBpuvB,IAAI,SAAUurB,GAE3E,OADWA,EAAEyouB,EAAa1rwB,WACdD,aAEhB6qyB,EAAa9qzB,KAAKM,OAAOoozB,oBAAsB,IAAI1oyB,KAAKuoyB,GAAavozB,KAAKq7E,aAG1EyvuB,EAAa9qzB,KAAKM,OAAOoozB,oBAAsBvC,GAAehuuB,GAAU,GAAKn4E,KAAKq7E,QAEtF,OAAO6isB,GAAe4sC,IAE1Bf,EAAO1uzB,UAAU87yB,wBAA0B,SAAUj/tB,GACjD,IAAI4yuB,EACAl/B,EAAe5rxB,KAAKM,OAAO4lxB,YAC/B,GAAIlmxB,KAAKM,OAAO0lxB,gBAAgBvpxB,OAAS,EAAG,CACxC,IAAIi1M,EAAWrlM,KAAKC,IAAI/Q,MAAM8Q,KAAMrM,KAAKM,OAAO0lxB,gBAAgBpuvB,IAAI,SAAUurB,GAE1E,OADWA,EAAEyouB,EAAat9jB,SACdruM,aAEhB6qyB,EAAa9qzB,KAAKM,OAAOoozB,oBAAsB,IAAI1oyB,KAAK0xL,GAAY1xM,KAAKo7E,aAGzE0vuB,EAAa9qzB,KAAKM,OAAOoozB,oBAAsBvC,GAAejuuB,EAAW,GAAKl4E,KAAKo7E,QAEvF,OAAO8isB,GAAeiP,GAAa29B,EAAY,KAEnDf,EAAO1uzB,UAAU+ixB,oBAAsB,SAAU13wB,GAC7C,IAAIs4yB,EAAqB,SAATt4yB,EAAmB,GAAK,EACxC,OAAOymxB,GAAantxB,KAAKM,OAAO0tM,aAAcgxmB,IAElD+K,EAAO1uzB,UAAU68E,UAAY,WACzB,OAAOgmsB,GAAel+wB,KAAKM,OAAO0tM,eAEtC+7mB,EAAO1uzB,UAAU88E,QAAU,WACvB,OAAIn4E,KAAKM,OAAOi+wB,kBAAkBu0B,sBACvB9yyB,KAAKm3yB,wBAAwBn3yB,KAAKk4E,aAGlCi1sB,GAAantxB,KAAKk4E,YAAal4E,KAAKM,OAAOmqzB,kBAG1DV,EAAO1uzB,UAAUiixB,iBAAmB,SAAU3msB,GAC1C,IAAIq0B,EAAchrG,KAAKM,OAAOi+wB,kBAA4B,WAAIv+wB,KAAKM,OAAOi+wB,kBAAkBt4qB,WAAa,SACzG,GAAIjmG,KAAKM,OAAOi+wB,kBAAkBu0B,uBAAyB9yyB,KAAKM,OAAOg/tB,WAAY,CAC/E,IAAI/hpB,EAAc9/E,EAAkBk5E,GAAQ32E,KAAKM,OAAO0tM,aAAer3H,EACvE,OAAO32E,KAAKM,OAAO4qM,UAAUlgG,WAAWztB,GAAevhD,OAAQgvE,IAG/D,IAAI9yB,EAAYl4E,KAAKM,OAAO0tM,aACxB71H,EAAUg1sB,GAAaj1sB,EAAWl4E,KAAKM,OAAOmqzB,gBAAkB,GACpE,OAAOzqzB,KAAKs4yB,gBAAgBpguB,EAAWC,IAG/C4xuB,EAAO1uzB,UAAU0szB,mBAAqB,SAAUlnzB,GAC5C,IAAI81E,EAAO32E,KAAKM,OAAOq4xB,mBAAmB9yxB,EAAQhF,EAAEutG,cAAe,IAAMi2qB,KACpE5mxB,EAAkBk5E,IAAU32E,KAAKM,OAAOg/tB,aACzCt/tB,KAAKM,OAAO0G,eAAgBgnM,aAAcr3H,IAAQ,GAClD32E,KAAKM,OAAO09wB,WAAW,SAM/B+rC,EAAO1uzB,UAAUkpB,WAAa,WAC1Bhf,GAAanB,IAAIpE,KAAKgB,QAAQ2B,cAAc,IAAMk9wB,IlChWtC,SkCgW6E7/wB,KAAK4qzB,gBAAiB5qzB,OAEnH+pzB,EAAO1uzB,UAAUmjH,aAAe,WAC5Bj5G,GAAahB,OAAOvE,KAAKgB,QAAQ2B,cAAc,IAAMk9wB,IlCnWzC,SkCmWgF7/wB,KAAK4qzB,iBAEjG,IAAK,IAAIxszB,EAAK,EAAG0pzB,KADUzmzB,MAAMC,KAAKtB,KAAKgB,QAAQQ,iBAAiB,cACVpD,EAAK0pzB,EAAoBrrzB,OAAQ2B,IAAM,CAC7F,IAAI4C,EAAU8mzB,EAAoB1pzB,GAClCmH,GAAahB,OAAOvD,EAAS,QAAShB,KAAK+nzB,sBAGnDgC,EAAO1uzB,UAAUqB,iBAAmB,WAChCsD,KAAKM,OAAOslF,GAAG66tB,GAAsBzgzB,KAAKurzB,uBAAwBvrzB,MAClEA,KAAKM,OAAOslF,GAAG0lsB,GAAiBtrxB,KAAKmqzB,UAAWnqzB,OAEpD+pzB,EAAO1uzB,UAAUuB,oBAAsB,WACnCoD,KAAKM,OAAO0lF,IAAIy6tB,GAAsBzgzB,KAAKurzB,wBAC3CvrzB,KAAKM,OAAO0lF,IAAIslsB,GAAiBtrxB,KAAKmqzB,YAE1CJ,EAAO1uzB,UAAUkwzB,uBAAyB,SAAUtrzB,GAChD,IAAI24f,EAAe,EACf54f,KAAKM,OAAO8qpB,eACZxyJ,GAAgB54f,KAAKM,OAAO8qpB,aAAa0zH,mBAAmBptuB,aACxD1xC,KAAKM,OAAOi+wB,kBAAkBu0B,sBAC9B9yyB,KAAKM,OAAO8qpB,aAAa2zH,kBAAkB,OAG3C/+wB,KAAKM,OAAO8qpB,aAAa2zH,kBAAkB,WAG/C/+wB,KAAKM,OAAOkryB,cAAcC,kBAC1B7yS,GAAgB54f,KAAKM,OAAOU,QAAQ2B,cAAc,IAAMypyB,IAA6B16vB,cAEvE1xC,KAAKgB,QAAQ2B,cAAc,IAAMk9wB,IACvCn7wB,MAAMqR,OAASxT,EAAWvC,KAAKM,OAAOU,QAAQ0wC,aAAeknd,IAO7EmxT,EAAO1uzB,UAAUiX,QAAU,WACnBtS,KAAKM,OAAO0mF,aAGZhnF,KAAKgB,UACLhB,KAAKw+G,eACDx+G,KAAKM,OAAO0rxB,cACZhsxB,KAAKM,OAAO0rxB,aAAa15wB,UAE7B/N,EAAOvE,KAAKgB,SACZhB,KAAKgB,QAAU,KACXhB,KAAKM,OAAO8qpB,cAAgBprpB,KAAKM,OAAOi+wB,kBAAkBu0B,uBAC1D9yyB,KAAKM,OAAO8qpB,aAAa2zH,kBAAkB,YAIhDgrC,GACTlS,IChcEvttB,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAkBxC6guB,GAA6B,SAAUrguB,GAKvC,SAASqguB,EAAYlrzB,GACjB,IAAIP,EAAQorF,EAAO7pF,KAAKtB,KAAMM,IAAWN,KAKzC,OAJAD,EAAM0lzB,cAAgB,SACtB1lzB,EAAMwgzB,UAAY,sBAClBxgzB,EAAMiqzB,eACNjqzB,EAAMmqzB,WAAa,IAAIjD,GAAW3mzB,GAC3BP,EAkHX,OA5HAuqF,GAAUkhuB,EAAarguB,GAYvBqguB,EAAYnwzB,UAAUyqzB,2BAA6B,WAC/C,IAAI2F,EAAczrzB,KAAK4izB,wBACnB8I,EAAmBvqzB,EAAc,OAASkC,UAAWupyB,KACzD6e,EAAY9pzB,YAAY+pzB,GACxB,IAAIC,EAAUxqzB,EAAc,OAASkC,UAAWq8wB,KAChDgsC,EAAiB/pzB,YAAYgqzB,GAC7B3rzB,KAAK4rzB,mBAAmBD,GACxB3rzB,KAAK6rzB,yBAETL,EAAYnwzB,UAAUwqzB,iBAAmB,WACrC,OAAI7lzB,KAAKM,OAAOg/tB,WACL,SAEJ,eAEXksF,EAAYnwzB,UAAUwwzB,sBAAwB,WAC1C,IAAIjzT,GAAgB54f,KAAKM,OAAO8qpB,aAAeprpB,KAAKM,OAAO8qpB,aAAa0zH,mBAAmBptuB,aAAe,GAAK,EAC3Gw6vB,EAAkBlsyB,KAAKM,OAAOU,QAAQ2B,cAAc,IAAMypyB,IAC1DF,IACAtzS,GAAgBszS,EAAgBx6vB,cAEpC,IAAI+5wB,EAAczrzB,KAAK4izB,wBAAwBhmyB,WAC3CiqyB,EAAa7mzB,KAAKgB,QAAQ2B,cAAc,IAAMshzB,IAC9C6H,EAAkB9rzB,KAAKM,OAAOU,QAAQ0wC,aAAeknd,EAAeiuT,EAAWn1wB,aAAe+5wB,EAAY/5wB,aAC1Gg6wB,EAAmB1rzB,KAAKgB,QAAQ2B,cAAc,IAAMiqyB,IACpDrwW,EAAev8b,KAAKgB,QAAQ2B,cAAc,IAAM+8wB,IACpDgsC,EAAiBhnzB,MAAMqR,OAASwmb,EAAa73b,MAAMqR,OAASxT,EAAWupzB,IAE3EN,EAAYnwzB,UAAU+8qB,YAAc,SAAUn4qB,GAC1CD,KAAK6rzB,wBACL7rzB,KAAK+rzB,gBACL,IAAIr3B,EAAkBz0xB,EAAKsrxB,cAC3B,GAAIvrxB,KAAKM,OAAOkryB,cAAcC,gBAAiB,CAC3C,IAAIx6hB,EAAWjxQ,KAAKM,OAAO0rxB,aAAagD,kBAAkBhvxB,KAAKM,OAAOkryB,cAAcr+G,YACpFunG,EAAkB10xB,KAAKM,OAAOuouB,UAAUgjD,uBAAuB56gB,EAAUyjhB,GAE7E10xB,KAAKM,OAAO0lxB,gBAAkBhmxB,KAAKkqzB,WAAWxC,oBAAoBhzB,GAElE,IAAK,IADD51wB,EAAQ,EACH1gB,EAAK,EAAGyE,EAAK7C,KAAKuvyB,YAAanxyB,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAC1D,IAAIu4E,EAAO9zE,EAAGzE,GACVgzyB,EAAapxyB,KAAKsqzB,qBAAqB3zuB,GACvCq1uB,EAAWhszB,KAAKgB,QAAQQ,iBAAiB,IAAMg/wB,IAAsB1hwB,GACrEsyxB,EAAW30yB,OAAS,IACfuvzB,EAASrpzB,cAAc,IAAMspzB,KAC9BD,EAASrqzB,YAAYR,EAAc,OAASkC,UAAW4ozB,MAEvDt1uB,EAAK12D,YAAci+vB,GAAe,IAAIl+vB,KAAKhgB,KAAKM,OAAO0tM,aAAa/tL,YAAYA,WAChFjgB,KAAKkszB,cAAc9a,EAAYz6tB,IAGvC73D,MAGR0syB,EAAYnwzB,UAAUuqzB,YAAc,SAAUtpzB,GAC1C0D,KAAKM,OAAOgoxB,WAAWkH,iBACvB,IAAI4hB,EAAapxyB,KAAKsqzB,qBAAqBhuzB,EAAM4jB,WACjDlgB,KAAKkszB,cAAc9a,EAAY90yB,EAAM4jB,WACrClgB,KAAKM,OAAO0G,eAAgBgnM,aAAc,IAAIhuL,KAAK,GAAK1jB,EAAM4jB,aAAc,IAEhFsryB,EAAYnwzB,UAAU6wzB,cAAgB,SAAUvizB,EAAQgtE,GACpD,IAAIg1uB,EAAU3rzB,KAAKgB,QAAQ2B,cAAc,IAAM+8wB,IAE/C,GADAisC,EAAQ3pzB,UAAY,GACyC,IAAzDhC,KAAKM,OAAOi+wB,kBAAkBxrrB,MAAMq4I,UAAU3uO,QAAgBuD,KAAKM,OAAOkryB,cAAcC,gBACxF,GAAI9hyB,EAAOlN,OAAS,EAAG,CACnB,IAAI0vzB,EAAehrzB,EAAc,OAASkC,UAAW+ozB,KACrDT,EAAQhqzB,YAAY3B,KAAKkqzB,WACrB/C,2BAA2B,OAAQx9yB,EAAQwizB,SAG/CnszB,KAAK4rzB,mBAAmBD,QAI5B,GAAIhizB,EAAOlN,OAAS,EAAG,CACnB,IAAIwjE,EAAQjgE,KAAKg4yB,oBACb7kH,EAAQlznB,EAAMt9D,cAAc,SAChC3C,KAAKkqzB,WAAWlC,8BAA8B70H,EAAO,EAAGx8mB,GACxD1W,EAAMt+D,YAAYwxrB,GAClBw4H,EAAQhqzB,YAAYs+D,QAGpBjgE,KAAK4rzB,mBAAmBD,GAGhC3rzB,KAAKkqzB,WAAWtC,oBAEpB4D,EAAYnwzB,UAAUivzB,qBAAuB,SAAU3zuB,GACnD,IAAI00uB,EAAYntC,GAAe,IAAIl+vB,KAAK22D,EAAK12D,YACzCqryB,EAAU3G,GAAa,IAAI3kyB,KAAKqryB,EAAUpryB,WAAYomwB,IAC1D,OAAOrmxB,KAAKM,OAAOuouB,UAAUsiD,aAAakgC,EAAWC,IAEzDE,EAAYnwzB,UAAU0wzB,cAAgB,WAElC,IAAK,IAAI3tzB,EAAK,EAAGiuzB,KADchrzB,MAAMC,KAAKtB,KAAKgB,QAAQQ,iBAAiB,IAAMyqzB,KACZ7tzB,EAAKiuzB,EAAwB5vzB,OAAQ2B,IAAM,CAEzGmG,EAD2B8nzB,EAAwBjuzB,IAGvD4B,KAAK4rzB,mBAAmB5rzB,KAAKgB,QAAQ2B,cAAc,IAAM+8wB,MAE7D8rC,EAAYnwzB,UAAUuwzB,mBAAqB,SAAUD,GACjD,IAAIt+B,EAAMlsxB,EAAc,OAASkC,UAAW+ozB,KAC5CzozB,GAAU0pxB,GlCwBiB,ckCvB3BA,EAAIrrxB,UAAYhC,KAAKM,OAAOo4E,UAAU3E,YAAY,YAClD43uB,EAAQ3pzB,UAAY,GACpB2pzB,EAAQhqzB,YAAY0rxB,IAKxBm+B,EAAYnwzB,UAAUkkC,cAAgB,WAClC,MAAO,eAEJisxB,GACThG,IC/IF8G,GAAelgtB,OAAQmgtB,GAAUC,GAAWC,GAAeC,GAAYC,GAAaC,QCEzEz3hB,8DrCGkB,2IAgBJ,wBAEF,qCAOE,0BAED,kDAMJ,qGlrBpCK,8BAEE,6EAY3B,SAA8Br+M,GAC1B,IAAIyG,EAAc,IAAIv9D,KAAK,GAAK82D,GAAI26H,UAChC96H,EAAO,IAAI32D,KAAK82D,EAAG/Q,cAAe,EAAG,GAAG0rI,UACxCtuJ,EAAKo6B,EAAc5G,EACvB,OAAOtqE,KAAKwmB,MAAO,EAAMukD,GAAc,IAAIp3D,KAAK22D,GAAM/S,SAAW,GAAK,4EA4B1E,SAAyB+S,EAAMx6E,GAE3B,IAAIs7E,GADJd,EAAO,IAAI32D,KAAK,GAAK22D,IACNxQ,UAIf,OAHAwQ,EAAKzQ,QAAQ,GACbyQ,EAAK7Q,YAAY6Q,EAAK5Q,cAAgB5pE,GACtCw6E,EAAKzQ,QAAQ75D,KAAK0T,IAAI03D,EAAKC,GAAWf,KAC/BA,6WwtB9BX,SAAkCjxE,EAAUsN,QACxB,IAAZA,IAAsBA,MAC1B,IAAI3S,EACA+yH,EACAy5rB,EACAj6rB,EACA7gH,EAAUvR,SAASmC,cAAc+C,GACrC/B,GAAUoO,IAAW,gBACrBA,EAAQvO,aAAa,OAAQ,SAC7B,IAAIy0L,EAASlmL,EAAQqI,SACrBpH,EAAQmzG,QAAUnzG,EAAQmzG,YAC1B,IAAK,IAAIhqH,EAAI,EAAGonB,EAAI,EAAGA,EAAI00K,EAAOx7L,OAAQN,IAAKonB,IAC3CljB,EAAQ43L,EAAO10K,GAEE,QADjBqvG,EAAW5/G,EAAQmzG,QAAQhqH,MAED,WAAlBkE,EAAM2C,QACNowH,EAAU/yH,GAGV+yH,EAAUjyH,EAAc,UACxB0rzB,EAAY50nB,EAAO10K,EAAI,IAEnBxR,EAAQ7M,aAAakuH,EAASy5rB,GAG9B96yB,EAAQpQ,YAAYyxH,GAEpB/yH,EAAMiD,IACN8vH,EAAQ5vH,aAAa,MAAOnD,EAAMiD,IAElCsvH,GAAYA,EAAS1U,WACrB79G,EAAM69G,UAAW,GAErB36F,KAEAvQ,EAAQC,UAAY2/G,IAAaA,EAAS3/G,WAC1C2/G,EAAS3/G,SAAWD,EAAQC,UAEhC,IAAI8qG,GAAO6U,MAAgBQ,IAGnC,OAAOrhH,wHC5CA+6yB,GAAgB,gBAehBC,GAAe,eAKfp8G,GAAgB,gBAKhBq8G,GAAmB,mBAyBnBC,GAAsB,sBAUtB75jB,GAAc,qCClFrB9oK,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAO5DggS,GAAwB,SAAUzxO,GAElC,SAASyxO,IACL,OAAkB,OAAXzxO,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVAsqF,GAAUsyO,EAAQzxO,GAIlBN,IACI3jF,EAAS,YACV01T,EAAOvhU,UAAW,aAAS,GAC9BwvF,IACI3jF,EAAS,IACV01T,EAAOvhU,UAAW,aAAS,GACvBuhU,GACT59P,IAKE89P,GAAwB,SAAU3xO,GAElC,SAAS2xO,IACL,OAAkB,OAAX3xO,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAc/D,OAhBAsqF,GAAUwyO,EAAQ3xO,GAIlBN,IACI3jF,EAAS,KACV41T,EAAOzhU,UAAW,YAAQ,GAC7BwvF,IACI3jF,EAAS,KACV41T,EAAOzhU,UAAW,aAAS,GAC9BwvF,IACI3jF,EAAS,KACV41T,EAAOzhU,UAAW,WAAO,GAC5BwvF,IACI3jF,EAAS,KACV41T,EAAOzhU,UAAW,cAAU,GACxByhU,GACT99P,IAKE29P,GAAsB,SAAUxxO,GAEhC,SAASwxO,IACL,OAAkB,OAAXxxO,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAoB/D,OAtBAsqF,GAAUqyO,EAAMxxO,GAIhBN,IACI3jF,EAAS,OACVy1T,EAAKthU,UAAW,YAAQ,GAC3BwvF,IACI3jF,EAAS,OACVy1T,EAAKthU,UAAW,aAAS,GAC5BwvF,IACI3jF,EAASksP,KACVupE,EAAKthU,UAAW,kBAAc,GACjCwvF,IACI3jF,EAAS,WACVy1T,EAAKthU,UAAW,kBAAc,GACjCwvF,IACI3jF,EAAS,WACVy1T,EAAKthU,UAAW,iBAAa,GAChCwvF,IACI3jF,EAAS,IACVy1T,EAAKthU,UAAW,eAAW,GACvBshU,GACT39P,IAKE0woB,GAAqC,SAAUvknB,GAE/C,SAASuknB,IACL,OAAkB,OAAXvknB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVAsqF,GAAUolnB,EAAqBvknB,GAI/BN,IACI3jF,EAAS,KACVwosB,EAAoBr0sB,UAAW,YAAQ,GAC1CwvF,IACI3jF,EAAS,KACVwosB,EAAoBr0sB,UAAW,mBAAe,GAC1Cq0sB,GACT1woB,IAKE2woB,GAAkC,SAAUxknB,GAE5C,SAASwknB,IACL,OAAkB,OAAXxknB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVAsqF,GAAUqlnB,EAAkBxknB,GAI5BN,IACI9iF,GAAU+kB,KAAM,QAAU6vS,KAC3BgzY,EAAiBt0sB,UAAW,iBAAa,GAC5CwvF,IACI3jF,EAAS,WACVyosB,EAAiBt0sB,UAAW,iBAAa,GACrCs0sB,GACTD,IAKEE,GAA+B,SAAUzknB,GAEzC,SAASyknB,IACL,OAAkB,OAAXzknB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAW/D,OAbAsqF,GAAUslnB,EAAezknB,GAIzBN,IACI9iF,GAAU+kB,KAAM,QAAU6vS,KAC3BizY,EAAcv0sB,UAAW,iBAAa,GACzCwvF,IACI3jF,EAAS,WACV0osB,EAAcv0sB,UAAW,iBAAa,GACzCwvF,IACI9iF,KAAY4nsB,KACbC,EAAcv0sB,UAAW,wBAAoB,GACzCu0sB,GACTF,IAEEyB,GAA8B,SAAUhmnB,GAExC,SAASgmnB,IACL,OAAkB,OAAXhmnB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAuB/D,OAzBAsqF,GAAU6mnB,EAAchmnB,GAIxBN,IACI3jF,EAAS,OACViqsB,EAAa91sB,UAAW,YAAQ,GACnCwvF,IACI3jF,EAAS,OACViqsB,EAAa91sB,UAAW,UAAM,GACjCwvF,IACI3jF,EAAS,OACViqsB,EAAa91sB,UAAW,aAAS,GACpCwvF,IACI3jF,EAAS,OACViqsB,EAAa91sB,UAAW,aAAS,GACpCwvF,IACI3jF,EAAS,OACViqsB,EAAa91sB,UAAW,aAAS,GACpCwvF,IACI3jF,EAAS,OACViqsB,EAAa91sB,UAAW,kBAAc,GACzCwvF,IACI3jF,EAAS,OACViqsB,EAAa91sB,UAAW,kBAAc,GAClC81sB,GACTnyoB,IAKE42Q,GAAgC,SAAUzqP,GAE1C,SAASyqP,IACL,OAAkB,OAAXzqP,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAuE/D,OAzEAsqF,GAAUsrP,EAAgBzqP,GAI1BN,IACI3jF,GAAS,IACV0uU,EAAev6U,UAAW,eAAW,GACxCwvF,IACI3jF,EAAS,YACV0uU,EAAev6U,UAAW,YAAQ,GACrCwvF,IACI3jF,EAAS,gBACV0uU,EAAev6U,UAAW,kBAAc,GAC3CwvF,IACI3jF,EAAS,WACV0uU,EAAev6U,UAAW,aAAS,GACtCwvF,IACI3jF,EAAS,KACV0uU,EAAev6U,UAAW,aAAS,GACtCwvF,IACI3jF,EAAS,KACV0uU,EAAev6U,UAAW,cAAU,GACvCwvF,IACI9iF,GAAU+kB,KAAM,QAAU6vS,KAC3BiZ,EAAev6U,UAAW,iBAAa,GAC1CwvF,IACI3jF,EAAS,OACV0uU,EAAev6U,UAAW,YAAQ,GACrCwvF,IACI3jF,EAAS,KACV0uU,EAAev6U,UAAW,kBAAc,GAC3CwvF,IACI3jF,EAAS,KACV0uU,EAAev6U,UAAW,mBAAe,GAC5CwvF,IACI3jF,EAAS,KACV0uU,EAAev6U,UAAW,oBAAgB,GAC7CwvF,IACI3jF,EAAS,OACV0uU,EAAev6U,UAAW,gBAAY,GACzCwvF,IACI9iF,GAAUyuB,MAAO,UAAWxgB,MAAO,GAAK4mT,KACzCgZ,EAAev6U,UAAW,cAAU,GACvCwvF,IACI9iF,GAAUyuB,MAAO,UAAWxgB,MAAO,GAAK4mT,KACzCgZ,EAAev6U,UAAW,mBAAe,GAC5CwvF,IACI9iF,KAAY2nsB,KACb95X,EAAev6U,UAAW,aAAS,GACtCwvF,IACI9iF,GAAU+kB,KAAM,QAAU6vS,KAC3BiZ,EAAev6U,UAAW,kBAAc,GAC3CwvF,IACI3jF,EAAS,WACV0uU,EAAev6U,UAAW,gBAAY,GACzCwvF,IACI3jF,EAAS,SACV0uU,EAAev6U,UAAW,mBAAe,GAC5CwvF,IACI3jF,GAAS,IACV0uU,EAAev6U,UAAW,uBAAmB,GAChDwvF,IACI3jF,EAAS,UACV0uU,EAAev6U,UAAW,qBAAiB,GAC9CwvF,IACI3jF,EAAS,SACV0uU,EAAev6U,UAAW,wBAAoB,GACjDwvF,IACI3jF,EAAS,WACV0uU,EAAev6U,UAAW,iBAAa,GAC1CwvF,IACI3jF,GAAW6F,EAAG,EAAGC,EAAG,KACrB4oU,EAAev6U,UAAW,gBAAY,GAClCu6U,GACT52Q,IAEEkuvB,GAAsC,SAAU/huB,GAEhD,SAAS+huB,IACL,OAAkB,OAAX/huB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAQ/D,OAVAsqF,GAAU4iuB,EAAsB/huB,GAIhCN,IACI3jF,EAAS,OACVgmzB,EAAqB7xzB,UAAW,kBAAc,GACjDwvF,IACI3jF,EAAS,OACVgmzB,EAAqB7xzB,UAAW,iBAAa,GACzC6xzB,GACTluvB,IAEEmuvB,GAAkC,SAAUhiuB,GAE5C,SAASgiuB,IACL,OAAkB,OAAXhiuB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KA+C/D,OAjDAsqF,GAAU6iuB,EAAkBhiuB,GAI5BN,IACI3jF,EAAS,YACVimzB,EAAiB9xzB,UAAW,YAAQ,GACvCwvF,IACI3jF,GAAS,IACVimzB,EAAiB9xzB,UAAW,gBAAY,GAC3CwvF,IACI9iF,KAAY60T,KACbuwf,EAAiB9xzB,UAAW,cAAU,GACzCwvF,IACI3jF,EAAS,IACVimzB,EAAiB9xzB,UAAW,WAAO,GACtCwvF,IACI3jF,EAAS,KACVimzB,EAAiB9xzB,UAAW,eAAW,GAC1CwvF,IACI3jF,EAAS,IACVimzB,EAAiB9xzB,UAAW,eAAW,GAC1CwvF,IACI3jF,GAAS,IACVimzB,EAAiB9xzB,UAAW,kBAAc,GAC7CwvF,IACI3jF,EAAS,OACVimzB,EAAiB9xzB,UAAW,iBAAa,GAC5CwvF,IACI3jF,EAAS,OACVimzB,EAAiB9xzB,UAAW,mBAAe,GAC9CwvF,IACI3jF,EAAS,YACVimzB,EAAiB9xzB,UAAW,qBAAiB,GAChDwvF,IACI9iF,GAAUyuB,MAAO,KAAM1J,KAAM,QAAU6vS,KACxCwwf,EAAiB9xzB,UAAW,kBAAc,GAC7CwvF,IACI3jF,EAAS,OACVimzB,EAAiB9xzB,UAAW,qBAAiB,GAChDwvF,IACI3jF,EAAS,WACVimzB,EAAiB9xzB,UAAW,wBAAoB,GACnDwvF,IACI3jF,EAAS,SACVimzB,EAAiB9xzB,UAAW,uBAAmB,GAClDwvF,IACIxiF,KAAe8osB,KAChBg8G,EAAiB9xzB,UAAW,oBAAgB,GACxC8xzB,GACTnuvB,IAEEm+P,GAAiC,SAAUhyO,GAE3C,SAASgyO,IACL,OAAkB,OAAXhyO,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KA0B/D,OA5BAsqF,GAAU6yO,EAAiBhyO,GAI3BN,IACI3jF,GAAS,IACVi2T,EAAgB9hU,UAAW,eAAW,GACzCwvF,IACI3jF,EAAS,KACVi2T,EAAgB9hU,UAAW,gBAAY,GAC1CwvF,IACI3jF,EAAS,OACVi2T,EAAgB9hU,UAAW,cAAU,GACxCwvF,IACI3jF,EAAS,YACVi2T,EAAgB9hU,UAAW,YAAQ,GACtCwvF,IACI3jF,EAAS,MACVi2T,EAAgB9hU,UAAW,eAAW,GACzCwvF,IACI3jF,GAAU,YACXi2T,EAAgB9hU,UAAW,oBAAgB,GAC9CwvF,IACI9iF,KAAY60T,KACbO,EAAgB9hU,UAAW,cAAU,GACxCwvF,IACI9iF,GAAUklB,WAAYmmO,GAAatmO,KAAM,QAAU6vS,KACpDQ,EAAgB9hU,UAAW,iBAAa,GACpC8hU,GACTn+P,IAEEiklB,GAAmC,SAAU93jB,GAE7C,SAAS83jB,IACL,OAAkB,OAAX93jB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAiB/D,OAnBAsqF,GAAU24jB,EAAmB93jB,GAI7BN,IACI3jF,GAAS,IACV+7oB,EAAkB5npB,UAAW,cAAU,GAC1CwvF,IACI3jF,EAAS,YACV+7oB,EAAkB5npB,UAAW,YAAQ,GACxCwvF,IACI3jF,EAAS,QACV+7oB,EAAkB5npB,UAAW,eAAW,GAC3CwvF,IACI9iF,KAAY60T,KACbqmV,EAAkB5npB,UAAW,cAAU,GAC1CwvF,IACI3jF,EAAS,SACV+7oB,EAAkB5npB,UAAW,YAAQ,GACjC4npB,GACTjklB,IAEEswoB,GAAmC,SAAUnknB,GAE7C,SAASmknB,IACL,OAAkB,OAAXnknB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KAiB/D,OAnBAsqF,GAAUglnB,EAAmBnknB,GAI7BN,IACI3jF,GAAS,IACVoosB,EAAkBj0sB,UAAW,cAAU,GAC1CwvF,IACI3jF,EAAS,YACVoosB,EAAkBj0sB,UAAW,YAAQ,GACxCwvF,IACI3jF,EAAS,QACVoosB,EAAkBj0sB,UAAW,eAAW,GAC3CwvF,IACI9iF,KAAY60T,KACb0yY,EAAkBj0sB,UAAW,cAAU,GAC1CwvF,IACI3jF,EAAS,SACVoosB,EAAkBj0sB,UAAW,YAAQ,GACjCi0sB,GACTtwoB,IAKEouvB,GAA+B,SAAUjiuB,GAEzC,SAASiiuB,IACL,OAAkB,OAAXjiuB,GAAmBA,EAAO5vF,MAAMyE,KAAMhB,YAAcgB,KA+C/D,OAjDAsqF,GAAU8iuB,EAAejiuB,GAIzBN,IACI3jF,EAAS,OACVkmzB,EAAc/xzB,UAAW,iBAAa,GACzCwvF,IACI3jF,EAAS,IACVkmzB,EAAc/xzB,UAAW,gBAAY,GACxCwvF,IACI3jF,EAAS,KACVkmzB,EAAc/xzB,UAAW,oBAAgB,GAC5CwvF,IACI9iF,KAAY60T,KACbwwf,EAAc/xzB,UAAW,cAAU,GACtCwvF,IACI3jF,EAAS,YACVkmzB,EAAc/xzB,UAAW,YAAQ,GACpCwvF,IACI3jF,GAAS,IACVkmzB,EAAc/xzB,UAAW,gBAAY,GACxCwvF,IACI3jF,EAAS,IACVkmzB,EAAc/xzB,UAAW,eAAW,GACvCwvF,IACI3jF,GAAS,IACVkmzB,EAAc/xzB,UAAW,kBAAc,GAC1CwvF,IACI3jF,EAAS,KACVkmzB,EAAc/xzB,UAAW,oBAAgB,GAC5CwvF,IACI3jF,EAAS,OACVkmzB,EAAc/xzB,UAAW,sBAAkB,GAC9CwvF,IACI3jF,EAAS,OACVkmzB,EAAc/xzB,UAAW,oBAAgB,GAC5CwvF,IACI3jF,EAAS,SACVkmzB,EAAc/xzB,UAAW,uBAAmB,GAC/CwvF,IACI9iF,GAAUyuB,MAAO,KAAM1J,KAAM,QAAU6vS,KACxCywf,EAAc/xzB,UAAW,mBAAe,GAC3CwvF,IACI3jF,EAAS,YACVkmzB,EAAc/xzB,UAAW,wBAAoB,GAChDwvF,IACIxiF,KAAe8osB,KAChBi8G,EAAc/xzB,UAAW,oBAAgB,GACrC+xzB,GACTpuvB,IxtB5bE5xC,GAAsB,WAKtB,OAJA,SAAcpX,EAAOD,GACjB/V,KAAKgW,MAAQA,EACbhW,KAAK+V,OAASA,MAelBmgB,GAAsB,WAOtB,OANA,SAAcnpB,EAAGC,EAAGgJ,EAAOD,GACvB/V,KAAK+M,EAAIA,EACT/M,KAAKgN,EAAIA,EACThN,KAAKgW,MAAQA,EACbhW,KAAK+V,OAASA,MASlBmuT,GAA4B,WAa5B,OAZA,SAAoB5gU,EAAIs6B,EAAM0G,EAAQ72B,EAAS4lB,EAAMye,GACjD9xC,KAAKgN,EAAIqmB,EAAKrmB,EACdhN,KAAK+M,EAAIsmB,EAAKtmB,EACd/M,KAAK+V,OAASsd,EAAKtd,OACnB/V,KAAKgW,MAAQqd,EAAKrd,MAClBhW,KAAKsD,GAAKA,EACVtD,KAAK49B,KAAOA,EACZ59B,KAAKyN,QAAUA,EACfzN,KAAK89B,OAASwG,EAAO9N,MACrBx2B,KAAK,gBAAkBskC,EAAOtuB,MAC9BhW,KAAK,oBAAsB8xC,MAK/B1b,GAA4B,WAU5B,OATA,SAAoB9yB,EAAIs6B,EAAM5nB,EAAOwgB,EAAO/oB,EAASqkC,EAAWvjB,GAC5DvuB,KAAKsD,GAAKA,EACVtD,KAAKyN,QAAUA,EACfzN,KAAK49B,KAAOA,EACZ59B,KAAK89B,OAAStH,EACdx2B,KAAK,gBAAkBgW,EACvBhW,KAAK,oBAAsB8xC,EAC3B9xC,KAAKuuB,EAAIA,MAqCbgI,GAA4B,WAa5B,OAZA,SAAoBjzB,EAAIyJ,EAAGC,EAAG6G,EAAQ4Y,EAAMpf,EAAW8xB,QACjC,IAAd9xB,IAAwBA,EAAY,IACxCrN,KAAKqN,UAAY,GACjBrN,KAAKm/B,SAAW,OAChBn/B,KAAKsD,GAAKA,EACVtD,KAAKysB,KAAOA,EACZzsB,KAAKqN,UAAYA,EACjBrN,KAAK6T,OAASA,EACd7T,KAAK+M,EAAIA,EACT/M,KAAKgN,EAAIA,EACThN,KAAKm/B,SAAWA,MA8BpBw/C,GAA0B,WAK1B,OAJA,SAAkB5xE,EAAGC,GACjBhN,KAAK+M,EAAIA,EACT/M,KAAKgN,EAAIA,MAuZbkwB,GAA4B,WAM5B,OALA,SAAoBN,EAAGC,EAAGC,GACtB98B,KAAK48B,EAAIA,EACT58B,KAAK68B,EAAIA,EACT78B,KAAK88B,EAAIA,MA0IbuwxB,GAA6B,WAQ7B,OAPA,SAAqBr6yB,EAAStM,EAAM87E,EAAOC,EAAaosnB,GACpD7usB,KAAK8usB,YAAc97rB,EACnBhT,KAAK0G,KAAOA,GAAQ,MACpB1G,KAAKwiF,MAAQA,IAAS,EACtBxiF,KAAKyiF,YAAcA,EACnBziF,KAAK6usB,SAAWA,MytBlrBpBy+G,GAA6B,WAC7B,SAASA,EAAYtuuB,GACjBh/E,KAAKg/E,QAAUA,EAwiBnB,OAriBAsuuB,EAAYjyzB,UAAUkyzB,mBAAqB,WACvC,IAAI/wzB,EACAgxzB,EACAxtzB,KAAKg/E,QAAQyuuB,cAAgBztzB,KAAKg/E,QAAQyuuB,aAAahxzB,OAAS,IAChED,EAASiB,EAAkBuC,KAAKg/E,QAAQ0uuB,iBAAiBvgI,aACpD1vrB,EAAkBuC,KAAKg/E,QAAQ0uuB,iBAAiBC,WACY3tzB,KAAKg/E,QAAQyuuB,aAAa,GAAvFztzB,KAAK4tzB,iBAAiB5tzB,KAAKg/E,QAAQyuuB,aAAa,OAAQ,GAC5DD,EAAY9uzB,KAAWsB,KAAKg/E,QAAQe,SAAUytuB,GAAW,GACzDxtzB,KAAK6tzB,qBAAqBrxzB,GAAQwD,KAAKg/E,QAAQyuuB,aAAa,GAAID,GAChExtzB,KAAK8tzB,kBAAkBtxzB,GAAQwD,KAAKg/E,QAAQyuuB,aAAa,MAGjEH,EAAYjyzB,UAAUuyzB,iBAAmB,SAAUpxzB,EAAMuxzB,GACrD,IAAI/uuB,EAAUh/E,KAAKg/E,QACfkzE,KACA7xJ,EAAQm/E,GAAahjF,GAAc,OACvC,GAAI6D,GAASA,EAAM5D,OAAS,GAA0B,IAArBsxzB,EAAUtxzB,OAAc,CACrD,IAAK,IAAIN,EAAI,EAAGA,EAAIkE,EAAM5D,OAAQN,IAC1BkE,EAAMlE,GAAe,aAAM6iF,EAAQ0uuB,iBAAiBvgI,YACpD9srB,EAAMlE,GAAS,OAAM6iF,EAAQ0uuB,iBAAiBC,YAC9CttzB,EAAMlE,GAAc,WAAI,EACxB+1J,EAAQ7xJ,EAAMlE,GAAc,YAAMkE,EAAMlE,IACxC4xzB,EAAUvpzB,KAAK0tJ,IAGvB,IAAK,IAAI3uI,EAAI,EAAGA,EAAIljB,EAAM5D,OAAQ8mB,IAC9BvjB,KAAK4tzB,iBAAiBvtzB,EAAMkjB,GAAIwqyB,GAGxC,OAAOA,GAEXT,EAAYjyzB,UAAUwyzB,qBAAuB,SAAUrxzB,EAAM62B,GACzDrzB,KAAK6/E,eACL7/E,KAAKorvB,cACA3tvB,EAAkBuC,KAAKg/E,QAAQO,mBAC5Bv/E,KAAKg/E,QAAQ4rM,WAAWrsR,QAAQ,iBAAmB,EACnDyB,KAAKguzB,+BAA+BxxzB,EAAM62B,IAG1CA,EAAKtd,OAASsd,EAAKtd,OAASsd,EAAKrmB,EACjCqmB,EAAKrd,MAAQqd,EAAKrd,MAAQqd,EAAKtmB,EAC/B/M,KAAKiuzB,2BAA2BzxzB,EAAM62B,MAIlDi6xB,EAAYjyzB,UAAU2yzB,+BAAiC,SAAUxxzB,EAAMk3sB,GACnE,IACIrgrB,EAEA85pB,EAGAnpoB,EACA40c,EAPAs1T,EAAWluzB,KAAKg/E,QAAQG,iBAExB8uG,EAASjuL,KAAKg/E,QAAQI,OAGtBhlE,EAAWolE,GAAahjF,GAAc,OAG1C,GAAI4d,GAAYA,EAAS3d,OAAS,IAC9BuD,KAAKmuzB,oBAAoB/zyB,EAAUs5rB,GAC/B1zsB,KAAKg/E,QAAQI,OAAO3iF,OAAS,GAC7B,IAAK,IAAIN,EAAI,EAAGA,EAAIie,EAAS3d,OAAQN,IACjCgxrB,EAAa/yqB,EAASje,GAAe,WAErC6nD,EADgC,IAAlBiqI,EAAOxxL,QAAgB0wrB,IAAel/f,EAAOxxL,OACxCyxzB,EAASlqwB,IAAMiqI,EAAOk/f,GAAYihI,SACrDx1T,EAAiC,IAAlB3qU,EAAOxxL,OAAe,EAAIwxL,EAAOk/f,GAAcl/f,EAAOk/f,GAAY7vf,WAC7ErP,EAAOk/f,GAAYv0L,aAAe,EAAI3qU,EAAOk/f,EAAa,GAAG7vf,WAAarP,EAAOk/f,EAAa,GAAGv0L,aAAe,EACpHvle,EAAOjZ,EAASje,GAAS,KACzBk3B,EAAO,IAAI6C,GAAK7C,EAAKtmB,EAAKi3C,EAAM,EAAI3wB,EAAKrmB,GAAK4rf,EAAgB50c,EAAM,GAAK3wB,EAAKrd,MAAQguC,EAAK33C,KAAKE,IAAI8mB,EAAKtd,QAAUiuC,EAAM40c,KACzH54f,KAAKguzB,+BAA+B5zyB,EAASje,GAAIk3B,GAI7D,OAAO72B,GAEX8wzB,EAAYjyzB,UAAU8yzB,oBAAsB,SAAUpvuB,EAAa1rD,GAC/D,IAEIg7xB,EAFAC,EAAaj7xB,EAAKtd,OAASsd,EAAKrd,MAChCopE,EAASp/E,KAAKg/E,QAAQI,OAEtBmvuB,EAAe,EACfC,EAAc,EAClBzvuB,EAAY3/E,QAAQ,SAAU5C,GAAQgyzB,GAAehyzB,EAAa,SAClEuiF,EAAY3/E,QAAQ,SAAUiB,GAC1BA,EAAkB,WAAIiuzB,EAAajuzB,EAAc,OAAImuzB,IAEzD,IAAI3kwB,EAA4C,qBAA5B7pD,KAAKg/E,QAAQ4rM,WAAsCv3P,EAAKrd,MAAQqd,EAAKtd,OACxD,2BAA5B/V,KAAKg/E,QAAQ4rM,WAClB7rM,EAAYlnD,KAAK+mD,IACjB,IAAK,IAAIziF,EAAI,EAAGA,EAAI4iF,EAAYtiF,OAAQN,IAAK,CACzC,IAAI0hB,EAAOkhE,EAAY5iF,GACvB0hB,EAAiB,WAAuB,IAAlBuhE,EAAO3iF,SAAmBuD,KAAKg/E,QAAQyvuB,oBACzDhxzB,EAAkBuC,KAAKg/E,QAAQG,iBAAiBG,WAChDzhE,EAAiB,aAAMuhE,EAAO3iF,OAAS,EAAIohB,EAAiB,aAAM7d,KAAKg/E,QAAQI,OAAO3iF,QACtFotD,GACAwkwB,EAAeC,EAAaE,EAAezvuB,EAAY5iF,GAAW,OAAKk3B,EAAKtd,OACxEw4yB,GAAgBl7xB,EAAKrd,QACrB+oE,EAAY5iF,GAAS,KAAI,IAAI+5B,GAAKq4xB,EAAel7xB,EAAKtmB,EAAGsmB,EAAKrmB,EAAGqhzB,EAAYh7xB,EAAKtd,WAItFs4yB,EAAeC,EAAaE,EAAezvuB,EAAY5iF,GAAW,OAAKk3B,EAAKrd,MACxEu4yB,GAAgBl7xB,EAAKtd,SACrBgpE,EAAY5iF,GAAS,KAAI,IAAI+5B,GAAK7C,EAAKtmB,EAAGwhzB,EAAel7xB,EAAKrmB,EAAGqmB,EAAKrd,MAAOq4yB,KAGrFE,GAAgBF,EAChBruzB,KAAK6/E,YAAYr7E,KAAKu6E,EAAY5iF,MAG1CmxzB,EAAYjyzB,UAAU4yzB,2BAA6B,SAAUzxzB,EAAMk3sB,GAC/D,IACIrgrB,EAIAxV,EAEA5L,EAEAmnD,EACAw/b,EAVA15a,EAAOl/E,KAAKg/E,QAAQG,iBAEpBC,EAASp/E,KAAKg/E,QAAQI,OAItB/+E,EAAQm/E,GAAahjF,GAAc,OAKvC,GAAI6D,GAASA,EAAM5D,OAAS,IACO,IAA3BuD,KAAKorvB,WAAW3uvB,SAChBuD,KAAKorvB,cACLprvB,KAAKorvB,WAAW5mvB,KAAKnE,IAEzBL,KAAK0uzB,wBAAwBlyzB,EAAM6D,EAAOqzsB,GACtC1zsB,KAAKg/E,QAAQI,OAAO3iF,OAAS,GAC7B,IAAK,IAAIN,EAAI,EAAGA,EAAIkE,EAAM5D,OAAQN,IAE9B8V,GADA4L,EAAOxd,EAAMlE,IACY,WACzBk3B,EAAOxV,EAAW,MACXA,EAAiB,WAAIqhE,EAAKl7B,IAAMo7B,EAAOntE,GAAOm8yB,UAAY,EACjEh1vB,GAAWv7C,EAAiB,WAAIqhE,EAAK9lB,QAAUgmB,EAAOntE,GAAO08yB,cAAgB,EAC7E/1T,EAAe54f,KAAKg/E,QAAQyvuB,mBAA+B,IAAVx8yB,GAAe4L,EAAiB,WAAI,EAAIuhE,EAAOntE,IAC5FmtE,EAAOntE,GAAOqrL,WAAal+G,EAAOntE,GAAO2mf,aAAmB,EAAuB,IAAlBx5a,EAAO3iF,OAAgB,EAAI2iF,EAAOntE,IACnGmtE,EAAOntE,GAAOqrL,WAAal+G,EAAOntE,GAAO2mf,aAAmB,EAChEvle,EAAO,IAAI6C,GAAK7C,EAAKtmB,EAAIqsD,EAAS/lC,EAAKrmB,GAAK4rf,EAAex/b,GAAU/lC,EAAKrd,MAAQojD,EAAS/lC,EAAKtd,OAASqjD,IACpGv7C,EAAiB,YAAKA,EAAa,OAAI,GACxC7d,KAAKiuzB,2BAA2B5tzB,EAAMlE,GAAIk3B,IAM9Di6xB,EAAYjyzB,UAAUqzzB,wBAA0B,SAAUpuzB,EAAQ8Z,EAAUs5rB,GACxE1zsB,KAAK4uzB,iBAAiBx0yB,EAAU4lE,GAAQ0znB,IACxCt5rB,EAASyd,KAAK2pD,IACdxhF,KAAK6uzB,kBAAkBz0yB,KAAcs5rB,OAEzC45G,EAAYjyzB,UAAUwzzB,kBAAoB,SAAUryzB,EAAMyiS,EAAY5rQ,EAAMvyB,GACxE,IAAIs/rB,EAAa5jsB,EAAKC,OACtB,GAAmB,IAAf2jsB,EAAkB,CAClB,IAAI0uH,EAAiB9uzB,KAAKuuG,eAAe0wL,EAAY5rQ,GAErD,OADI07xB,EAAWjuzB,EAAMyZ,OAAOu0yB,GAGhC,IAAI94yB,EAAQiqE,GAAgB5sD,GACxB27xB,EAAYxyzB,EAAK,GACjByyzB,EAAWzyzB,EAAK6E,MAAM,EAAG++rB,GAC7B,GAAIpgsB,KAAK0/Y,YAAYzgH,EAAY+vhB,EAAWh5yB,GAAQ,CAChD,IAAIy5iB,EAASxwR,EAAW1kR,OAAOy0yB,GAC/B,OAAOhvzB,KAAK6uzB,kBAAkBI,EAAUx/P,EAAQp8hB,EAAMvyB,GAKtD,IAAK,IAFDouzB,EAAmBjwhB,EAAWxiS,OAC9B0yzB,EAAW,EACNhzzB,EAAI,EAAGA,EAAI+yzB,EAAkB/yzB,GAAK,EACvCgzzB,GAAYlwhB,EAAW9iS,GAAa,SAExC,IAAIizzB,EAAepvzB,KAAKqvzB,QAAQh8xB,EAAM87xB,GAElCJ,GADAD,EAAiB9uzB,KAAKuuG,eAAe0wL,EAAY5rQ,GACtCvyB,EAAMyZ,OAAOu0yB,IAC5B,OAAO9uzB,KAAK6uzB,kBAAkBryzB,KAAU4yzB,EAAcL,IAG9DzB,EAAYjyzB,UAAUqkZ,YAAc,SAAUzgH,EAAY+vhB,EAAWvyzB,GACjE,GAA0B,IAAtBwiS,EAAWxiS,OACX,OAAO,EAGP,IAAIgzjB,EAASxwR,EAAW1kR,OAAOy0yB,GAG/B,OAF4BhvzB,KAAKsvzB,mBAAmBrwhB,EAAYxiS,IACxCuD,KAAKsvzB,mBAAmB7/P,EAAQhzjB,IAIhE6wzB,EAAYjyzB,UAAUi0zB,mBAAqB,SAAU5uvB,EAAKjkE,GAKtD,IAAK,IAJD2rrB,EAAY1nnB,EAAIjkE,OAChB8yzB,EAAU3kvB,EAAAA,EACV4kvB,GAAW5kvB,EAAAA,EACX6kvB,EAAU,EACLtzzB,EAAI,EAAGA,EAAIisrB,EAAWjsrB,GAAK,EAAG,CACnC,IAAIm3G,EAAO5yC,EAAIvkE,GAAa,SACxBm3G,EAAOi8sB,IACPA,EAAUj8sB,GAEVA,EAAOk8sB,IACPA,EAAUl8sB,GAEdm8sB,GAAWn8sB,EAIf,OAFajnG,KAAKC,IAAKD,KAAK87D,IAAI1rE,EAAQ,GAAM+yzB,EAAWnjzB,KAAK87D,IAAIsnvB,EAAS,GAAMpjzB,KAAK87D,IAAIsnvB,EAAS,IAC7FpjzB,KAAK87D,IAAI1rE,EAAQ,GAAM8yzB,KAGjCjC,EAAYjyzB,UAAUg0zB,QAAU,SAAUh8xB,EAAMigF,GAC5C,IAAI87sB,EAAelvuB,GAAmB7sD,GAClCrd,EAAQo5yB,EAAap5yB,MACrBD,EAASq5yB,EAAar5yB,OACtBqqE,EAAUgvuB,EAAarizB,EACvBszE,EAAU+uuB,EAAapizB,EAC3B,GAAIgJ,GAASD,EAAQ,CACjB,IAAI4b,EAAY2hF,EAAOv9F,EAQvB,OAAOoqE,IALHpzE,EAAGqzE,EAAUzuD,EACb3kB,EAAGqzE,EACHrqE,MAJWA,EAAQ2b,EAKnB5b,OAAQA,IAKZ,IAAIs6D,EAAaijC,EAAOt9F,EAQxB,OAAOmqE,IALHpzE,EAAGqzE,EACHpzE,EAAGqzE,EAAUhQ,EACbr6D,MAAOA,EACPD,OALYA,EAASs6D,KAUjCi9uB,EAAYjyzB,UAAUkzG,eAAiB,SAAU7tC,EAAKrtC,GAYlD,IAAK,IAFDphB,EATAwI,EAAYylE,GAAmB7sD,GAE/Brd,EAAQyE,EAAUzE,MAClBD,EAAS0E,EAAU1E,OACnBqqE,EAAU3lE,EAAU1N,EACpBszE,EAAU5lE,EAAUzN,EACpBo7qB,EAAY1nnB,EAAIjkE,OAChB2iF,EAASp/E,KAAKg/E,QAAQI,OACtBF,EAAOl/E,KAAKg/E,QAAQG,iBAEpBgwuB,EAAW,EACNhzzB,EAAI,EAAGA,EAAIisrB,EAAWjsrB,GAAK,EAChCgzzB,GAAYzuvB,EAAIvkE,GAAa,SAW5B,IALDi9D,EAEAs2vB,EAEAn3G,EARA5mrB,EAAYw9xB,EAAWp5yB,EACvBs6D,EAAa8+uB,EAAWn5yB,EACxB25yB,EAAavvuB,EACbwvuB,EAAavvuB,EAEbo0nB,KAIJ,IAASt4sB,EAAI,EAAGA,EAAIisrB,EAAWjsrB,GAAK,EAAG,CACnC,IAAI0hB,EAAO6iD,EAAIvkE,GAOf,GANA8V,EAAQ4L,EAAiB,WACzBA,EAAiB,WAAuB,IAAlBuhE,EAAO3iF,SAAkBuD,KAAKg/E,QAAQyvuB,mBAAqBx8yB,IAAUmtE,EAAO3iF,QAC9FgB,EAAkByhF,EAAKI,YAAqBrtE,IAAUmtE,EAAO3iF,QACjEizzB,EAAWttuB,GAAapiF,KAAKorvB,WAAW,GAAIvtuB,GAC5C06rB,EAAam3G,EAAW1vzB,KAAKg/E,QAAQe,SAAWliE,EAAa,OAAEwV,KAC/D+lC,EAAUv7C,EAAiB,WAAIqhE,EAAK9lB,QAAUgmB,EAAOntE,GAAO08yB,aACxD34yB,GAASD,EAAQ,CACjB,IAAIklB,EAAK20xB,EAAa/xyB,EAAe,SAAI8T,EACzC9T,EAAW,MACP9Q,EAAG4izB,EACH3izB,EAAG4izB,EACH55yB,MAAO25yB,EAAah+xB,EACpB5b,OAAQklB,GAEZ20xB,EAAa30xB,MAEZ,CACD,IAAID,EAAK20xB,EAAa9xyB,EAAe,SAAIwyD,EACzCxyD,EAAW,MACP9Q,EAAG4izB,EACH3izB,EAAG4izB,EACH55yB,MAAOglB,EACPjlB,OAAQ65yB,EAAav/uB,GAEzBs/uB,EAAa30xB,EAEbnd,EAAa,OAAI,IAAM6xyB,GAAarjzB,KAAKoxB,MAAMpK,EAAKrmB,EAAKosD,EAAU,IACnE/sD,KAAKoxB,MAAM86qB,EAAWvrsB,GAAKursB,EAAWxisB,OAASwisB,EAAWvrsB,KAAOX,KAAKoxB,MAAMpK,EAAKtmB,EAAKqsD,EAAU,IAChG/sD,KAAKoxB,MAAM86qB,EAAWxrsB,GAAKwrsB,EAAWvisB,MAAQuisB,EAAWxrsB,OACzD/M,KAAK6/E,YAAYr7E,KAAKqZ,GACtB42rB,EAAYjwsB,KAAKqZ,IAGzB,OAAO42rB,GAEX64G,EAAYjyzB,UAAUuzzB,iBAAmB,SAAUpyzB,EAAM82G,GAIrD,IAAK,IAHD8slB,EAAa5jsB,EAAKC,OAElBsC,KACK5C,EAAI,EAAGA,EAAIiksB,EAAYjksB,GAAK,EAAG,CAGpC,IAAK,IAFD0zzB,EAAerzzB,EAAKC,OACpBqzzB,EAAY,EACPtoyB,EAAM,EAAGA,EAAMqoyB,EAAcroyB,GAAO,EACzCsoyB,GAAatzzB,EAAKgrB,GAAa,OAInC,IAAK,IAFD4yU,EAAa9mP,EAAOw8sB,EACpBC,OAAQ,EACHxsyB,EAAI,EAAGA,EAAIssyB,EAActsyB,KAC9BwsyB,EAAQvzzB,EAAK+mB,IACG,SAAIwsyB,EAAc,OAAI31d,EACtCr7V,EAAOyF,KAAKurzB,GAGpB,OAAOhxzB,GAGXuuzB,EAAYjyzB,UAAUyyzB,kBAAoB,SAAUx6G,GAChD,IACIp/rB,EAGA87yB,EACAC,EACA1izB,EAJAmyE,EAAU1/E,KAAKg/E,QAKnBh/E,KAAK6tB,SAAW6xD,EAAQ7xD,SACxB,IAEI8hU,EAEA19U,EACA+tY,EAEA3sX,EACA2I,EAGA4B,EACA/f,EACAglR,EACAp1R,EAKA21W,EAEAjtE,EACAnyP,EACAogP,EApBA5rG,EAAY94G,EAAQ1+E,QAAQsC,GAG5By6B,EAAO2hD,EAAQkrM,WAGfsliB,EAAkBlwzB,KAAKg/E,QAAQG,iBAAiB+wuB,gBAOhDC,EAAW,GAEXr+G,EAAetxsB,SAASosB,eAAe8yD,EAAQ1+E,QAAQsC,GAAK,sBAM5D87E,EAASM,EAAQN,OACrBp/E,KAAKowzB,YAAcpwzB,KAAK6tB,SAASw+C,aAAc/oE,GAAIk1L,EAAY,YAAcz6J,EAAO,YAiBpF,IAAK,IAhBDoumB,EAEAl9nB,EACAq1B,EAYAsqR,EAXAyhgB,EAAgBlvzB,EAAc,OAC9BmC,GAAIo8E,EAAQ1+E,QAAQsC,GAAK,wBACzBD,UAAW,WACXE,OAAQ,iEACKm8E,EAAQK,SAAS/yE,EAAI,WACpB0yE,EAAQK,SAAShzE,EAAI,aACnB2yE,EAAQK,SAAShqE,OAAS,YAC3B2pE,EAAQK,SAAS/pE,MAAQ,QAExCs6yB,GAAa,EACbpxuB,EAAOQ,EAAQP,iBAEVhjF,EAAI,EAAGA,EAAI6D,KAAK6/E,YAAYpjF,OAAQN,IAkCzC,GAjCA0hB,EAAO7d,KAAK6/E,YAAY1jF,GACxB8V,EAAQ4L,EAAiB,WACzBwV,EAAOxV,EAAW,KAClByyyB,EAAazyyB,EAAiB,WAC9BulW,EAAU5qL,EAAY,gBAAkBvmL,EAAQ,eAAiB9V,EACjEgwoB,EAAYnsoB,KAAK6tB,SAASw+C,aAAc/oE,GAAI8/W,EAAU,WACtDp/T,GAAOsswB,EAAapxuB,EAAKl7B,IAAMo7B,EAAOntE,GAAOm8yB,UAAY,EAC9B,eAAvB1uuB,EAAQkrM,aACRv3P,EAAKrd,MAAQ3J,KAAKE,IAAI8mB,EAAKtmB,EAAIsmB,EAAKrd,OAASguC,EAC7C3wB,EAAKtd,OAAS1J,KAAKE,IAAI8mB,EAAKrmB,EAAIqmB,EAAKtd,QAAUiuC,GAEpCsswB,EAAapxuB,EAAKwB,aAAetB,EAAOntE,GAAOyuE,aAC9DuvuB,EAAejwzB,KAAKiwzB,aAAaK,EAAYzyyB,GAC7C+f,EAAOqyxB,EAAmB,KAC1BxizB,EAAUwizB,EAAsB,QAChCj0xB,EAASs0xB,EAAapxuB,EAAK5jD,YAAe8jD,EAAOntE,GAAQs+yB,aACzDP,EAAaM,EAAapxuB,EAAKsxuB,WAAcpxuB,EAAOntE,GAAQqrL,WAC5DulG,EAAalhN,GAAc3lD,EAAQne,EAAW,KAAG7d,KAAKg/E,UAAYnhE,EAAW,KAC7E+wS,EAAapvO,GAAa3hE,GAAc,OACxCglR,GAAcythB,GAAc1hgB,GAAcA,EAAWnyT,OAAS,GAAKuD,KAAKg/E,QAAQyxuB,gBAC3E5yyB,EAAgB,UAA0B,OAASglR,EAA/B,OAASA,EAAmCA,EACrEuB,EAAakshB,EAAapxuB,EAAKlpD,WAAaopD,EAAOntE,GAAOy+yB,YAC1DpsxB,EAASgsxB,EAAapxuB,EAAK56C,OAAS86C,EAAOntE,GAAOqyB,OAClDpwB,EAAYo8yB,EACmBpxuB,EAAKugC,cADyB,SAAnCrgC,EAAOntE,GAAsB,gBAAe,UAAgD,WAAnCmtE,EAAOntE,GAAsB,gBAC5G,YAAc,WAClB+tY,EAAmBswa,EAAapxuB,EAAK8gU,iBAAmB5gU,EAAOntE,GAAO+tY,iBACtE/wY,EAAWqhzB,EAAapxuB,EAAKyxuB,cAAgBvxuB,EAAOntE,GAAOonL,eAC3Dx7K,EAAc,SAAMymB,OAAQA,EAAQ72B,QAASA,EAASmwB,KAAMA,GAC5DrwB,GACIsrB,QAAQ,EAAOpB,KAAMq1xB,GAAe9tuB,QAASh/E,KAAKg/E,QAClDY,YAAa/hE,EAAM+yyB,YAAa5wzB,KAAK6/E,YAAa7sE,QAAS6K,EAAc,SAE7E7d,KAAKg/E,QAAQx4D,QAAQsmyB,GAAev/yB,IAC/BA,EAAUsrB,OAAQ,CACnBs3xB,EAAW,MAAQ98xB,EAAKtmB,EAAI,IAAMsmB,EAAKrmB,EAAI,OAASqmB,EAAKtmB,EAAIsmB,EAAKrd,OAAS,IAAMqd,EAAKrmB,EAClF,OAASqmB,EAAKtmB,EAAIsmB,EAAKrd,OAAS,KAAOqd,EAAKrmB,EAAIqmB,EAAKtd,QAAU,MAAQsd,EAAKtmB,EAAI,KAAOsmB,EAAKrmB,EAAIqmB,EAAKtd,QAAU,IACnH45U,EAAc,IAAIv5T,GAAWgtV,EAAU,YAAaxlV,EAAM0G,EAAOtuB,MAAOsuB,EAAO9N,MAAO/oB,EAAS,KAAM0izB,GACrG,IAAIpzyB,EAAO/c,KAAK6tB,SAASsI,SAASw5T,GAClCw8S,EAAUxqoB,YAAYob,GAClBizyB,GACAhwzB,KAAK6wzB,eAAehuhB,EAAW31R,WAAYi/nB,EAAW/nW,EAAW/wQ,EAAM68xB,EAAiB9sc,EAASxlV,EAAM1pB,GAEvGjF,IACAknS,EAAcn2S,KAAKqvM,eAAeyigB,EAAc1uV,EAAS/vV,EAAM2sX,EAAkB/wY,EAAU4O,GAC3FwyyB,EAAc1uzB,YAAYw0S,IAE9Bg2V,EAAU3ooB,aAAa,aAAcqa,EAAW,MAChDsunB,EAAU3ooB,aAAa,YAAaxD,KAAKg/E,QAAQiqC,SAAW9sH,EAAI,GAAG+Q,YACnElN,KAAKowzB,YAAYzuzB,YAAYwqoB,GAGjCkkL,EAAc9+yB,WAAW9U,OAAS,GAClCq1sB,EAAanwsB,YAAY0uzB,GAE7BrwzB,KAAKg/E,QAAQ1tD,UAAU3vB,YAAY3B,KAAKowzB,cAE5C9C,EAAYjyzB,UAAUw1zB,eAAiB,SAAUpkyB,EAAMpY,EAAe+vR,EAAW/wQ,EAAM68xB,EAAiB9sc,EAASxlV,EAAM1pB,GAIhG1T,SAASosB,eAAe5sB,KAAKg/E,QAAQh+E,QAAQsC,GAAK,sBAC1DtD,KAAKg/E,QAAQG,iBAJxB,IAMI3iD,EACAogrB,EAEArlD,EAIAu5J,EALAhwxB,KAGAiwxB,KACAh7yB,EAAS,EAMb,GAJA+qB,GAA8C,IAA3BrU,EAAKluB,QAAQ,QAAmBkuB,EAAKvvB,MAAM,QAAU,KACxEq6pB,EAAav3pB,KAAKgxzB,qBAAqB39xB,EAAM5G,EAAM23Q,EAAW8rhB,GAC9D1zxB,EAAWhQ,GAAYsU,GAAkBA,EAAe,IAAMy2nB,EAAW,GAAInzX,GAC7Ew4a,EAAe98nB,GAAkBzsD,EAAMnf,EAAUsoB,EAAU,OAAQx8B,KAAKg/E,UACnEvhF,EAAkBqjC,GAAiB,CAIpC,IAAK,IAHDqG,KACAw6S,EAAQ,KACRsve,KACK90zB,EAAI,EAAGA,EAAI2kC,EAAerkC,OAAQN,IAGvC4Z,IADAymB,EAAWhQ,GADXm1T,EAAQxjT,GAAU9K,EAAKrd,MAAQ,EAAI8qB,EAAe3kC,GAAIioS,GACxBA,IACXruR,OACnBk7yB,EAAUzszB,KAAKg4B,EAASxmB,OACxBmxB,EAAW3iC,KAAKm9U,GAEpB41U,EAAapwnB,EACb3K,EAASxmB,MAAQ3J,KAAKC,IAAI/Q,MAAM,KAAM01zB,GACtCz0xB,EAASzmB,OAASA,EAEtB,GAAwB,eAApBm6yB,GAAwD,SAApBA,GAAkD,SAApBA,EAA4B,CAC9F,IAAK,IAAI3syB,EAAI,EAAGA,EAAIg0oB,EAAW96pB,OAAQ8mB,IAEnCxN,IADAymB,EAAWhQ,GAAY+qoB,EAAWh0oB,GAAI6gR,IACnBruR,OACdsd,EAAKtd,OAhCJ,EAgCwBA,GAC1Bg7yB,EAAUvszB,KAAK+ypB,EAAWh0oB,IAGlC,GAAwB,SAApB2syB,GAA8B34J,EAAW96pB,SAAWs0zB,EAAUt0zB,QAAUs0zB,EAAUt0zB,OAAQ,CAC1F,IAAIy0zB,EAAmBH,EAAUt0zB,OAAS,EACtC00zB,EAAaJ,EAAUG,GAC3BC,EAAaA,EAAWjtyB,UAAU,EAAIityB,EAAW10zB,OAAS,GAAM,MAChEs0zB,EAAU1oyB,OAAO6oyB,GACE,QAAfC,GACAJ,EAAUvszB,KAAK2szB,SAKvBL,EAAWv5J,EACXw5J,EAAUvszB,KAAKsszB,GAGnBvtxB,GADc,IAAIhN,GAAW6sV,EAAU,QAASw5V,EAAa7vsB,EAAG6vsB,EAAa5vsB,EAAG,QAAS+jzB,GAC1D3shB,EAAWA,EAAU5tQ,OAASx2B,KAAKyqX,kBAAkB7sV,GAAOvpB,IAE/Fi5yB,EAAYjyzB,UAAU40zB,aAAe,SAAUK,EAAYzyyB,GACvD,IAAImhE,EAAUh/E,KAAKg/E,QACfoyuB,EAAWd,EAAatxuB,EAAQG,iBAAiBvhD,KAAOohD,EAAQI,OAAOvhE,EAAiB,YAAG+f,KAC3FyzxB,EAAcf,EAAatxuB,EAAQG,iBAAiB1xE,QAAUuxE,EAAQI,OAAOvhE,EAAiB,YAAGpQ,QACjG29uB,EAAa5rqB,GAAaR,EAAQyuuB,aAAa,IAAY,OAC3D/suB,EAAe4vuB,EAAatxuB,EAAQG,iBAAiBuB,aACrD1B,EAAQI,OAAOvhE,EAAiB,YAAG6iE,aACvC,GAAIA,EAAajkF,OAAS,EAAG,CACzB,IAAIs5F,EAAStV,GAASC,EAAc7iE,EAAW,KAAE7d,KAAKg/E,QAAQsyuB,qBAAsBzzyB,EAAW,KAAE7d,KAAKg/E,QAAQuyuB,qBAAsB1zyB,EAAW,KAAE7d,KAAKg/E,QAAQO,kBAC9J6xuB,EAAWr7tB,EAAa,KACxBs7tB,EAAct7tB,EAAgB,aAG9B,IAAK,IAAI55F,EAAI,EAAGA,EAAIivvB,EAAW3uvB,OAAQN,IAC/BivvB,EAAWjvvB,GAAmB,iBAAM0hB,EAAqB,eAAE3gB,MAAM,KAAK,KACtEk0zB,EAAWpyuB,EAAQlwD,QAAQryB,OAAS,EAAIuiF,EAAQlwD,QAAQ3yB,EAAI6iF,EAAQlwD,QAAQryB,QAAU20zB,GAIlG,OAASxzxB,KAAMwzxB,EAAU3jzB,QAAS4jzB,IAKtC/D,EAAYjyzB,UAAUovX,kBAAoB,SAAUj0V,GAChD,IAAIq0V,EAAiBr0V,EAEjB26U,EAAWn0U,GAAkBG,GADjC0tV,EAAqC,gBAAnBA,EAAoChvX,OAAOsR,iBAAiB3M,SAASuL,KAAM,MAAM4lD,gBAAkBk5T,IAGrH,OADex+W,KAAKoxB,OAAoB,IAAb0zU,EAASv0U,EAAuB,IAAbu0U,EAASt0U,EAAuB,IAAbs0U,EAASr0U,GAAW,MAClE,IAAM,QAAU,SAEvCwwxB,EAAYjyzB,UAAUg0M,eAAiB,SAAUyigB,EAAc1uV,EAAS/vV,EAAMnf,EAAUjF,EAAU4O,GAO9F,IAAK,IANDwc,EACA1e,EACAy+P,EACApgP,EACAw3xB,EACAl0zB,EAAOgB,OAAOhB,KAAKugB,EAAW,MACzB1hB,EAAI,EAAGA,EAAImB,EAAKb,OAAQN,IAC7B8S,EAAWA,EAASM,QAAQ,IAAIyU,OAAO,MAAQ1mB,EAAKnB,GAAK,KAAM,KAAM0hB,EAAW,KAAEvgB,EAAKnB,GAAG+Q,aAS9F,OAPA8sB,EAAaD,GAAoB9qB,GACjCorB,EAAkBL,EAAWh6B,KAAKg/E,SAClCrjE,EAAWmwD,GAAezxC,EAAiB+oV,EAAU,YAAavlW,EAAW,MAC7Eu8P,EAAe3rO,GAAe9yB,EAAUm2rB,GACxC0/G,EAAmB1xuB,GAAkBzsD,EAAMnf,EAAUkmQ,EAAc,WAAYp6Q,KAAKg/E,SACpFrjE,EAASjX,MAAM8H,KAAOglzB,EAAiBzkzB,EAAI,KAC3C4O,EAASjX,MAAMgI,IAAM8kzB,EAAiBxkzB,EAAI,KACnC2O,GAEX2xyB,EAAYjyzB,UAAU21zB,qBAAuB,SAAU39xB,EAAM5G,EAAM23Q,EAAW/0O,GAC1E,IAAI1e,EACAvS,EAAW/K,EAAKrd,MAAQ,GAC5B,OAAQq5C,GACJ,IAAK,OACD1e,GAAa4wC,GAAKnjD,EAAU/K,EAAKtd,OAAQ0W,EAAM23Q,IAC/C,MACJ,IAAK,OACDzzP,GAAaxS,GAAUC,EAAW,EAAI3R,EAAM23Q,IAC5C,MACJ,IAAK,aACDzzP,EAAY6/B,GAASpyC,EAAU3R,EAAM23Q,GACrC,MACJ,IAAK,OACDzzP,EAAYtQ,GAASjC,EAAU3R,EAAM23Q,GAG7C,OAAOzzP,GAEJ28wB,KC1iBP1ze,GAA6B,WAK7B,SAASA,EAAYjnU,GACjB3S,KAAK2S,QAAUA,EA6GnB,OAvGAinU,EAAYv+U,UAAU0F,MAAQ,SAAU6C,GACpC5D,KAAKiB,YAAcpF,OAAO6F,KAAK,GAAI,QAAS,UAAY7F,OAAOonH,YAAc,UAAYpnH,OAAOmnH,WAAa,cAC7GhjH,KAAKiB,YAAY0sF,OAAO,EAAG,GAC3B3tF,KAAKiB,YAAY44U,SAASC,OAAOC,WAAYD,OAAOE,aACpD,IAAIphT,GACAC,QAAQ,EAAO27B,YAAax0D,KAAKi6U,eAAer2U,GAAW6zB,KHP9C,eGSjBz3B,KAAK2S,QAAQ6T,QHTI,cGSiBoS,GAC7BA,EAASC,QACV53B,EAAY23B,EAAS47B,YAAax0D,KAAKiB,cAQ/C24U,EAAYv+U,UAAU4+U,eAAiB,SAAUr2U,GAC7C,IAAI1C,EAAMC,EAAc,OAiBxB,OAhBIyC,EACIA,aAAoBpF,MACpBoF,EAASxE,QAAQ,SAAUpC,GACvBkE,EAAIS,YAAY4rB,GAAWvwB,GAAO4E,WAAU,MAG3CgC,aAAoB0lH,QACzBpoH,EAAIS,YAAYiC,EAAShC,WAAU,IAGnCV,EAAIS,YAAY4rB,GAAW3pB,GAAUhC,WAAU,IAInDV,EAAIS,YAAY3B,KAAK2S,QAAQ3R,QAAQY,WAAU,IAE5CV,GAOX04U,EAAYv+U,UAAU6+U,OAAS,SAAUxzU,EAAMqqN,EAAU33L,GACrD,IAAIr5B,EAAQC,KACRgB,EAAUG,EAAc,UACxBmC,GAAI,aACJG,OACIuS,MAAShW,KAAK2S,QAAQgjB,cAAc3f,MAAM9I,WAC1C6I,OAAU/V,KAAK2S,QAAQgjB,cAAc5f,OAAO7I,cAGhDotU,IAAe9uU,GAAQy9E,UAAU/7E,WAAW3O,QAAQ,mBAAqB,GAC7E66B,EAAc37B,EAAkB27B,GAAe0sN,GAAmBqG,UAAY/yN,EAC9E,IAAImhT,EAAU,sFACVv6U,KAAK2S,QAAQ2e,UAAUxvB,UACvB,SACA8rB,EAAM/xB,OAAO81N,IAAIC,gBAAgB,IAAIT,KAAc,QAATzqN,GAAkB6zU,KAC3D,IAAKC,eAAiBC,kBAAkBz6U,KAAK2S,QAAQ2e,aAAe5qB,KAAM,mBAC/E,GAAa,QAATA,EACA1G,KAAK06U,gBAAgB3pH,EAAUrqN,EAAMknB,EAAK0sT,OAEzC,CACD,IAAIK,EAAU,IAAI/qP,MACdgrP,EAAQ55U,EAAQksF,WAAW,MAC/BytP,EAAQv3P,kBAGJ,GAFAw3P,EAAMlrP,UAAUirP,EAAS,EAAG,GAC5B9+U,OAAO81N,IAAIE,gBAAgBjkM,GACd,QAATlnB,EAAgB,CAChB,IAAI46Q,EAAa,IAAIr8B,GACjB41F,EAAc75U,EAAQ+sF,UAAU,cAAcx+E,QAAQ,aAAc,sBACxE+xQ,EAAW/vN,aAAan4B,YAAcA,EACtCyhT,EAAcA,EAAYx5U,MAAMw5U,EAAYt8U,QAAQ,KAAO,GAC3D+iR,EAAWp2C,MAAM9mO,MAAM2tP,SAASriK,UAAU,IAAImoK,GAAUgjF,GAAc,EAAG,EAAI96U,EAAM4S,QAAQgjB,cAAc3f,MAAQ,GAAKjW,EAAM4S,QAAQgjB,cAAc5f,QAC9IukU,IACAh5D,EAAW7zL,KAAKsjI,EAAW,QAC3BuwD,EAAWhvQ,gBAIfvS,EAAM26U,gBAAgB3pH,EAAUrqN,EAAM1F,EAAQ+sF,UAAU,aAAax+E,QAAQ,YAAa,sBAAuB+qU,IAGzHK,EAAQr7U,IAAMsuB,IAStBgsT,EAAYv+U,UAAUq/U,gBAAkB,SAAU3pH,EAAUrqN,EAAMknB,EAAK0sT,GACnEn5U,EAAc,KACVsC,OACIguN,SAAYV,EAAW,IAAMrqN,EAAK60D,oBAClC7sC,KAAQd,KAEbja,cAAc,IAAIosM,WAAWu6H,EAAa,QAAU,QACnDh/I,KAAMz/L,OACNm/U,SAAS,EACTC,YAAY,MAGbrB,KCvHPtvP,GAAwC,WACxC,IAAIC,EAAgBjsF,OAAOksF,iBACpBC,wBAA2BjsF,OAAS,SAAU+vB,EAAGuO,GAAKvO,EAAEk8D,UAAY3tD,IACvE,SAAUvO,EAAGuO,GAAK,IAAK,IAAI4tD,KAAK5tD,EAAOA,EAAEn2B,eAAe+jF,KAAIn8D,EAAEm8D,GAAK5tD,EAAE4tD,KACzE,OAAO,SAAUn8D,EAAGuO,GAEhB,SAAS6tD,IAAO3qF,KAAKpC,YAAc2wB,EADnCg8D,EAAch8D,EAAGuO,GAEjBvO,EAAElzB,UAAkB,OAANyhC,EAAax+B,OAAOssF,OAAO9tD,IAAM6tD,EAAGtvF,UAAYyhC,EAAEzhC,UAAW,IAAIsvF,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY3jF,EAAQ9J,EAAK0tF,GAC7E,IAA2Hx8D,EAAvH0vC,EAAIj/D,UAAUvC,OAAQmgC,EAAIqhC,EAAI,EAAI92D,EAAkB,OAAT4jF,EAAgBA,EAAOzsF,OAAO0sF,yBAAyB7jF,EAAQ9J,GAAO0tF,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBtuD,EAAIquD,QAAQC,SAASJ,EAAY3jF,EAAQ9J,EAAK0tF,QACpH,IAAK,IAAI5uF,EAAI2uF,EAAWruF,OAAS,EAAGN,GAAK,EAAGA,KAASoyB,EAAIu8D,EAAW3uF,MAAIygC,GAAKqhC,EAAI,EAAI1vC,EAAEqO,GAAKqhC,EAAI,EAAI1vC,EAAEpnB,EAAQ9J,EAAKu/B,GAAKrO,EAAEpnB,EAAQ9J,KAASu/B,GAChJ,OAAOqhC,EAAI,GAAKrhC,GAAKt+B,OAAOuJ,eAAeV,EAAQ9J,EAAKu/B,GAAIA,GAyB5D60xB,GAAyB,SAAUtmuB,GAKnC,SAASsmuB,EAAQz+yB,EAAShS,GACtB,IAAIjB,EAAQorF,EAAO7pF,KAAKtB,KAAMgT,EAAShS,IAAYhB,KAOnD,OALAD,EAAMq5B,YAAc,aAEpBr5B,EAAM2xzB,gBAEN3xzB,EAAM0uzB,oBAAqB,EACpB1uzB,EAgxBX,OA5xBAuqF,GAAUmnuB,EAAStmuB,GAcnBsmuB,EAAQp2zB,UAAUoX,UAAY,WAC1BzS,KAAKwmB,QJnDK,QImDWw4D,QAASh/E,OAC9BA,KAAKoiS,sBACLpiS,KAAKykY,eACLzkY,KAAKggC,YACLhgC,KAAK0kY,aACL1kY,KAAK2N,cAET8jzB,EAAQp2zB,UAAU0wG,OAAS,WACvB/rG,KAAK+5Y,cACL/5Y,KAAKikX,yBACLjkX,KAAK82sB,cACL92sB,KAAKq8U,eACLr8U,KAAKs8U,YAAYt8U,KAAK8jsB,cAAe,QAAS,KAAM,MACpD9jsB,KAAK2xzB,sBAITF,EAAQp2zB,UAAUs2zB,mBAAqB,WACnC,IACIlhf,EACAwmY,EACAtF,EACAyF,EAJAr3sB,EAAQC,KAKZ,GAAIA,KAAKujE,sBAAsBC,GAAa,CACxCitQ,EAAazwU,KAAKujE,WAClB0zoB,EAAcj3sB,KAAK07D,iBAAiB2H,GAAQrjE,KAAK07D,MAAQ,IAAI2H,GAC3CotQ,EAAW/hL,aAAauojB,GAC9B3jhB,KAAK,SAAUzyL,GACvBd,EAAMwjE,WAAa1iE,EAAU,OAC7Bd,EAAM6xzB,+BAGL5xzB,KAAKujE,sBAAsB8pvB,IAChCj2G,EAAYp3sB,KAAKujE,YACjBouoB,EAAa,IAAIpvnB,GAAK60nB,EAAUtI,YAAasI,EAAU1wsB,KAAM0wsB,EAAU50nB,MAAO40nB,EAAU30nB,cAC7EuB,UAAY,SAAU/jF,GAC7BF,EAAMwjE,WAAa1T,KAAKuB,MAAM,IAAMnxD,EAAO,KAAK,GAChDF,EAAM6xzB,yBAEVjgH,EAAWhvnB,KAAKy0nB,EAAUvI,WAG1B7usB,KAAK4xzB,yBAGbH,EAAQp2zB,UAAUu2zB,sBAAwB,WACtC5xzB,KAAK6xzB,iBACD7xzB,KAAK8xzB,qBAAuB9xzB,KAAKo2U,eAAe5+S,SAChDx3B,KAAK8xzB,oBAAoB56e,eAE7Bl3U,KAAK6wD,OAAO08vB,qBACZvtzB,KAAKgB,QAAQW,YAAY3B,KAAKsxB,WAC9BtxB,KAAK+xzB,gBACL/xzB,KAAKwmB,QJnGO,UImGWw4D,QAASh/E,QAEpCyxzB,EAAQp2zB,UAAU2kC,UAAY,WAC1B,GAAIhgC,KAAKsxB,UAAW,CAChB,KAAOtxB,KAAKsxB,UAAU/f,WAAW9U,OAAS,GACtCuD,KAAKsxB,UAAUhsB,YAAYtF,KAAKsxB,UAAU1U,aAEzC5c,KAAKsxB,UAAUwJ,iBAAmB96B,KAAKsxB,UAAU7wB,YAClD8D,EAAOvE,KAAKsxB,WAGpB,IAAI9a,EAAiBxW,KAAKgB,QAAQqsB,YAC9BpW,EAAkBjX,KAAKgB,QAAQssB,aACnCttB,KAAK21B,cAAgB,IAAIvI,GAAKiR,GAAer+B,KAAKgW,MAAOQ,IAAmBA,GAAkB,IAAK6nB,GAAer+B,KAAK+V,OAAQkB,IAAoBA,GAAmB,KACtKjX,KAAKsxB,UAAYtxB,KAAK6tB,SAASmS,WAC3B18B,GAAItD,KAAKgB,QAAQsC,GAAK,OACtB0S,MAAOhW,KAAK21B,cAAc3f,MAC1BD,OAAQ/V,KAAK21B,cAAc5f,UAMnC07yB,EAAQp2zB,UAAU+mS,oBAAsB,WACpCpiS,KAAK6tB,SAAW,IAAIC,GAAY9tB,KAAKgB,QAAQsC,IAC7CtD,KAAK6wD,OAAS,IAAIy8vB,GAAYttzB,OAKlCyxzB,EAAQp2zB,UAAU0+Y,YAAc,WAC5B,OAAQ/5Y,KAAKkb,OACT,IAAK,WACL,IAAK,YACL,IAAK,SACDlb,KAAKu2sB,aAAa,WAClB,MACJ,IAAK,eACDv2sB,KAAKu2sB,aAAa,aAI9Bk7G,EAAQp2zB,UAAUk7sB,aAAe,SAAU//qB,GACvCx2B,KAAK8jsB,cAAc1/Z,UAAU5tQ,MAAQx2B,KAAK8jsB,cAAc1/Z,UAAU5tQ,OAASA,EAC3Ex2B,KAAK8jsB,cAAc2S,iBAAiBrya,UAAU5tQ,MAAQx2B,KAAK8jsB,cAAc2S,iBAAiBrya,UAAU5tQ,OAASA,EAC7Gx2B,KAAKo2U,eAAehyC,UAAU5tQ,MAAQx2B,KAAKo2U,eAAehyC,UAAU5tQ,OAASA,EAC7Ex2B,KAAKo2U,eAAe11S,WAAWlK,MAAQx2B,KAAKo2U,eAAe11S,WAAWlK,OAASA,GAEnFi7xB,EAAQp2zB,UAAU4oX,uBAAyB,WACvC,IAAI6tV,EAAetxsB,SAASosB,eAAe5sB,KAAKgB,QAAQsC,GAAK,sBAI7D,GAHIwusB,GAAgBA,EAAa3soB,kBAAoB,GACjD2soB,EAAavtsB,SAEb9G,EAAkB+C,SAASosB,eAAe5sB,KAAKgB,QAAQsC,GAAK,uBAAwB,CACpF,IAAIuhY,EAAmB1jY,EAAc,OACjCmC,GAAItD,KAAKgB,QAAQsC,GAAK,qBACtBC,OAAQ,kCAEZvD,KAAKgB,QAAQW,YAAYkjY,KAGjC4sb,EAAQp2zB,UAAU02zB,cAAgB,WAC1B/xzB,KAAK8xzB,qBAAuB9xzB,KAAKo2U,eAAe5+S,SAAWx3B,KAAK8xzB,oBAAoBx6e,aAAet3U,KAAK6wD,OAAOu/vB,aAC/GpwzB,KAAKsxB,UAAUpsB,aAAalF,KAAK6wD,OAAOu/vB,YAAapwzB,KAAK8xzB,oBAAoBx6e,cAOtFm6e,EAAQp2zB,UAAUghV,aAAe,WAC7B,IAAIrmU,EAAQhW,KAAKskC,OAAOtuB,MACpBwgB,EAAuB,iBAAfx2B,KAAKkb,MAA2B,UAAY,UACxDlb,KAAKyvB,WAAazvB,KAAKyvB,WAAazvB,KAAKyvB,WAAa+G,EACtD,IAAI61S,EAAgB7rU,SAASosB,eAAe5sB,KAAKgB,QAAQsC,GAAK,mBAC9D,GAAI7F,EAAkB4uU,GAAgB,CAClC,IAAIm4D,EAAa,IAAItgE,GAAWlkU,KAAKgB,QAAQsC,GAAK,kBAAmBtD,KAAKyvB,WAAYzvB,KAAKskC,OAAQ,EAAG,IAAIpO,GAAKlgB,EAAQ,EAAGA,EAAQ,EAAGhW,KAAK21B,cAAc3f,MAAQA,EAAOhW,KAAK21B,cAAc5f,OAASC,IACnMhW,KAAKsxB,UAAU3vB,YAAY3B,KAAK6tB,SAAS8V,cAAc6gW,SAGvDn4D,EAAc7oU,aAAa,OAAQxD,KAAKyvB,aAGhDgiyB,EAAQp2zB,UAAUihV,YAAc,SAAUp8S,EAAOx5B,EAAMgwB,EAAQwkT,GAC3D,IACInlU,EADArR,EAAQw7B,EAAMkkQ,UAGdpuR,EAAShW,KAAK21B,cAAc3f,MAAQhW,KAAKy8B,OAAOhwB,MAAQzM,KAAKy8B,OAAOjwB,KACxE,GAAI0zB,EAAMzT,KAAM,CACRhvB,EAAkBy9U,KAClBA,EAAWl7U,KAAK6tB,SAASw+C,aAAc/oE,GAAItD,KAAKgB,QAAQsC,GAAK,kBAEjE,IAAIu1sB,EAAe16qB,GAASnoB,EAAOkqB,EAAMzT,KAAM/nB,GAC3Co/R,EAAct3Q,GAAYqsrB,EAAcn0sB,GAExCuuP,EAAa/kL,GADLzwE,EAAkBi5B,GAAW,IAAIR,GAAKl2B,KAAKy8B,OAAOjwB,KAAMxM,KAAKy8B,OAAO/vB,IAAK1M,KAAK21B,cAAc3f,MAAOhW,KAAK21B,cAAc5f,QAAU2gB,EACxGwJ,EAAMmvB,UAAWy0O,EAAap9R,GAC9DsM,EAAU,IAAIujB,GAAWv2B,KAAKgB,QAAQsC,GAAK,YAAcoD,EAAMusP,EAAWlmP,EAAGkmP,EAAWjmP,EAAG,QAAS6rsB,GACpGpL,EAAc,IAAIv3qB,GAAK+8N,EAAWlmP,EAAGkmP,EAAWjmP,EAAG82R,EAAY9tR,MAAO8tR,EAAY/tR,QAClF/U,EAAUuiC,GAAkBvwB,EAAStO,EAAOA,EAAM8xB,MAAO0kT,GAC7Dl6U,EAAQwC,aAAa,aAAc08B,EAAMgS,aAAehS,EAAMzT,MAC9DzrB,EAAQwC,aAAa,YAAaxD,KAAKipH,UAAqB,UAATviH,EAAmB,EAAI,IAAIwG,aAChE,UAATxG,IAAqBw5B,EAAMu2qB,iBAAiBhqrB,MAAmB,aAAT/lB,KACvDqP,EAAU/V,KAAK21B,cAAc5f,OAAS03rB,EAAYzgsB,EAhBvC,GAgB0DhN,KAAKy8B,OAAO9vB,OACjF3M,KAAK+/E,SAAW,IAAI7pD,GAAKl2B,KAAKy8B,OAAOjwB,KAAMihsB,EAAYzgsB,EAjB5C,GAiB8DgJ,EAAOD,IAEvE,aAATrP,GAAuBw5B,EAAMu2qB,iBAAiBhqrB,KAC9CzsB,KAAKs8U,YAAYp8S,EAAMu2qB,iBAAkB,WAAYhJ,EAAavyX,GAGlEl7U,KAAKsxB,UAAU3vB,YAAYu5U,QAI/BnlU,EAAU/V,KAAK21B,cAAc5f,OAAS/V,KAAKy8B,OAAO/vB,IAAM1M,KAAKy8B,OAAO9vB,OACpE3M,KAAK+/E,SAAW,IAAI7pD,GAAKl2B,KAAKy8B,OAAOjwB,KAAMxM,KAAKy8B,OAAO/vB,IAAKsJ,EAAOD,IAG3E07yB,EAAQp2zB,UAAUw2zB,eAAiB,WAC/B,IACI90yB,EADAhd,EAAQC,KAGZ,GADAA,KAAKujE,WAAavjE,KAAKujE,YAClB9lE,EAAkBuC,KAAKujE,aAAevjE,KAAKujE,WAAW9mE,OAAS,GAAKuD,KAAKu/E,gBAAiB,CAQ3F,GAPAv/E,KAAKytzB,gBACLztzB,KAAKujE,WAAW3rC,IAAI,SAAUp7B,GAC1BA,EAAKuD,EAAMw/E,iBAAoB/iF,EAAKuD,EAAMw/E,iBAAoB/iF,EAAKuD,EAAMw/E,iBAAiBryE,WACtF1Q,EAAKuD,EAAMw/E,mBAEnBv/E,KAAKm/E,iBAAiBG,UAAYt/E,KAAKm/E,iBAAiBG,WAAat/E,KAAKu/E,gBAC1Ev/E,KAAKgyzB,0BACsB,IAAvBhyzB,KAAKo/E,OAAO3iF,OAAc,CAC1B,IAAI4gH,EAAS,IAAI/+G,OACjB++G,EAAc,MAAI,EAClBtgG,EAAO/c,KAAKm/E,iBAAiBG,UAC7B+9B,EAAOtgG,MACP,IAAK,IAAI5gB,EAAI,EAAGA,EAAI6D,KAAKujE,WAAW9mE,OAAQN,IAAK,CAC7C,IAAIkE,EAAQm/E,GAAax/E,KAAKujE,WAAWpnE,IAAY,OACjD6D,KAAKyuzB,oBAAsBpuzB,GAASA,EAAM5D,OAAS,EACnD4D,EAAMjB,QAAQ,SAAU+2O,EAAa8xd,GAC7B9xd,EAAYp5N,IACZsgG,EAAOtgG,GAAMvY,MACT2orB,WAAY,EAAG11pB,KAAM0+M,EAAYp5N,GAAOk1yB,eAAgB97kB,EAAYp5N,GAAM7P,WAC1E1Q,KAAM25O,EAAas3Q,OAAQt3Q,EAAYp2O,EAAMw/E,qBAMrDv/E,KAAKujE,WAAWpnE,GAAG4gB,IACnBsgG,EAAOtgG,GAAMvY,MACT2orB,WAAY,EAAG11pB,KAAMz3B,KAAKujE,WAAWpnE,GAAG4gB,GAAOk1yB,eAAgBjyzB,KAAKujE,WAAWpnE,GAAG4gB,GAAM7P,WAAY1Q,KAAMwD,KAAKujE,WAAWpnE,GAC1Hsxf,OAAQztf,KAAKujE,WAAWpnE,GAAG6D,KAAKu/E,mBAKhDv/E,KAAKytzB,aAAajpzB,KAAK64G,OAEtB,CACD,GAAIr9G,KAAKyuzB,mBAAoB,CACzBzuzB,KAAKkyzB,iBACLlyzB,KAAKkyzB,cAAgBxzzB,KAAWsB,KAAKujE,WAAYvjE,KAAKkyzB,eAAe,GACrE,IAAS/1zB,EAAI,EAAGA,EAAI6D,KAAKkyzB,cAAcz1zB,OAAQN,IAC3C6D,KAAKmyzB,wBAAwBnyzB,KAAKkyzB,cAAc/1zB,GAAIA,GAExD6D,KAAKytzB,aAAeztzB,KAAKkyzB,mBAGzBlyzB,KAAKoyzB,sBACDpyzB,KAAKytzB,aAAahxzB,OAAS,GAC3BuD,KAAKqyzB,iBAAiBryzB,KAAKytzB,aAAahxzB,OAAS,GAGzDsgB,EAAO/c,KAAKo/E,OAAO,GAAGC,UAErBr/E,KAAKyuzB,oBACNzuzB,KAAKsyzB,gBAAgBtyzB,KAAKytzB,aAAa,GAAG1wyB,GAAO,YAI7D00yB,EAAQp2zB,UAAU22zB,wBAA0B,WACxC,IAAI3xzB,EACJL,KAAKujE,WAAavjE,KAAKujE,WACvB,IAAK,IAAIpnE,EAAI,EAAGA,EAAI6D,KAAKujE,WAAW9mE,OAAQN,IAAK,CAE7C,IADAkE,EAAQm/E,GAAax/E,KAAKujE,WAAWpnE,IAAY,SACpCkE,EAAM5D,OAAQ,CACvBuD,KAAKyuzB,oBAAqB,EAC1B,MAEKtyzB,IAAM6D,KAAKujE,WAAW9mE,OAAS,IACpCuD,KAAKyuzB,oBAAqB,KAItCgD,EAAQp2zB,UAAU82zB,wBAA0B,SAAU31zB,EAAM+1zB,GACxD,IACI3+f,EAGAqxR,EAIA5nlB,EARA0C,EAAQC,KAGRkyJ,EAAU,IAAI5zJ,OAEdye,EAAO/c,KAAKm/E,iBAAiBG,UAAYt/E,KAAKm/E,iBAAiBG,UAAYt/E,KAAKu/E,gBAMpF,GAFA2yE,EAAU1yE,GAAahjF,IACvBo3T,EAAY1hK,EAAUA,EAAgB,OAAI,OACzB0hK,EAAUn3T,OAAS,EAAG,CACnCY,EAAM60J,EAAa,IACnB,IAAK,IAAI/1J,EAAI,EAAGA,EAAI6D,KAAKo/E,OAAO3iF,OAAQN,IAChCkB,IAAQ2C,KAAKo/E,OAAOjjF,GAAGkjF,YACfr/E,KAAKo/E,OAAOjjF,GACpB8olB,EAAa9olB,GAGrB,IAAK,IAAIonB,EAAI,EAAGA,EAAIqwS,EAAUn3T,OAAQ8mB,IAClCqwS,EAAUrwS,GAAS,KAAIqwS,EAAUrwS,GAAGxG,GACpC62S,EAAUrwS,GAAmB,gBAAoB,IAAf0hkB,EAAmBrxR,EAAUrwS,GAAS,KACpE/mB,EAAqB,eAAI,IAAMo3T,EAAUrwS,GAAS,MAAK,GAC3DqwS,EAAUrwS,GAAe,WAAI9lB,EAAkBwnlB,GAAcjllB,KAAKo/E,OAAO3iF,OAASwolB,EAC/D,IAAfA,IACArxR,EAAUrwS,GAAW,OAAI/mB,GAE7Bo3T,EAAUrwS,GAAc,UAAIlmB,EAC5Bu2T,EAAUrwS,GAAS,KAAIqwS,EAAUrwS,GACjCqwS,EAAUrwS,GAAc,WAAI,EAC5BqwS,EAAUrwS,GAAW,OAAIqwS,EAAUrwS,GAAGvjB,KAAKu/E,iBAE/Cq0O,EAAUx0T,QAAQ,SAAU+2O,GACxBp2O,EAAMoyzB,wBAAwBh8kB,EAAao8kB,KAGnD,GAAIA,IAAcvyzB,KAAKkyzB,cAAcz1zB,OAAS,EAAG,CAE7C,IAAK,IADD+1zB,EAAaxyzB,KAAKkyzB,cAAc,GAAGlyzB,KAAKo/E,OAAO,GAAGC,WAC7Cl5D,EAAI,EAAGA,EAAInmB,KAAKkyzB,cAAcz1zB,OAAQ0pB,IAC3CytS,EAAYp0O,GAAax/E,KAAKkyzB,cAAc/ryB,IAAY,OAC9C,IAANA,GAAWytS,IACXA,EAAUx0T,QAAQ,SAAU+2O,GAAeq8kB,EAAWhuzB,KAAK2xO,KAC3Dn2O,KAAKkyzB,cAAc7pyB,OAAOlC,EAAG,GAC7BA,GAAK,GAGbqsyB,EAAaxyzB,KAAKkyzB,cAAc,GAAGlyzB,KAAKo/E,OAAO,GAAGC,WAClD,IAAK,IAAI53C,EAAI,EAAGA,EAAI+qxB,EAAW/1zB,OAAQgrC,IACnCyqH,EAAQlyJ,KAAKo/E,OAAO,GAAGC,WAAamzuB,EACpCA,EAAW/qxB,GAAW,OAAIyqH,IAOtCu/pB,EAAQp2zB,UAAU0F,MAAQ,SAAUuC,GACd,IAAIs2U,GAAY55U,MACtBe,MAAMuC,IAOtBmuzB,EAAQp2zB,UAAU6+U,OAAS,SAAUxzU,EAAMqqN,EAAU33L,GACjC,IAAIwgT,GAAY55U,MACtBk6U,OAAOxzU,EAAMqqN,EAAU33L,IAGrCq4xB,EAAQp2zB,UAAU+2zB,oBAAsB,WACpCpyzB,KAAKujE,WAAavjE,KAAKujE,WAIvB,IACK,IAJD8b,EAEAozuB,KAEKt2zB,EAAI,EAAGA,EAAI6D,KAAKo/E,OAAO3iF,OAAS,EAAGN,IAAK,CAC7CkjF,EAAYr/E,KAAKo/E,OAAOjjF,GAAK6D,KAAKo/E,OAAOjjF,GAAGkjF,UAAYr/E,KAAKm/E,iBAAiBG,UAC9E,IAAI6yE,EAAQ,IAAI7zJ,OAChB6zJ,EAAa,MAAIh2J,EACjBg2J,EAAM9yE,MACNr/E,KAAKytzB,aAAajpzB,KAAK2tJ,GACvB,IAAK,IAAI5uI,EAAI,EAAGA,EAAIvjB,KAAKujE,WAAW9mE,OAAQ8mB,IAAK,CAC7C,IAAI4yN,KACAu8kB,EAAY,GAChB,GAAI1yzB,KAAKujE,WAAWhgD,GAAG87D,GAAY,CAC/B,IAAIvK,EAAS90E,KAAKujE,WAAWhgD,GAAG87D,GAChC,GAAU,IAANljF,EACA,IAAK,IAAIgqB,EAAI,EAAGA,GAAKhqB,EAAGgqB,IAAK,CACzB,IAAIwsyB,EAAmB3yzB,KAAKo/E,OAAOj5D,GAAKnmB,KAAKo/E,OAAOj5D,GAAGk5D,UAAYA,EACnEqzuB,GAAc1yzB,KAAKujE,WAAWhgD,GAAGovyB,IAAuBxsyB,IAAMhqB,EAAK,GAAK,KAG1Es2zB,EAAWh2zB,OAAS,IACG,IADCg2zB,EAAWl0zB,QAAQm0zB,GACjC59uB,KACZqhK,EAAkB,KAAIrhK,EACtBqhK,EAA4B,gBAAK,GAA0BrhK,GAAU,GACrEqhK,EAAwB,WAAIh6O,EAC5Bg6O,EAAuB,WAAI,EAC3BA,EAAuB,UAAI92J,EAC3B82J,EAAkB,KAAIn2O,KAAKujE,WAAWhgD,GACtCvjB,KAAKytzB,aAAaztzB,KAAKytzB,aAAahxzB,OAAS,GAAG4iF,GAAW76E,KAAK2xO,GAChEs8kB,EAAWjuzB,KAAK,GAA0BswE,QAM9D28uB,EAAQp2zB,UAAUg3zB,iBAAmB,SAAU90zB,GAM3C,IAAK,IALDq1zB,EACA9nH,EAAc9qsB,KAAKo/E,OAAO7hF,GAASyC,KAAKo/E,OAAO7hF,GAAO8hF,UAAYr/E,KAAKm/E,iBAAiBG,UACxFuzuB,EAAW7yzB,KAAKo/E,OAAO7hF,EAAQ,GAAG8hF,UAClC82J,EAAcn2O,KAAKytzB,aAAalwzB,GAAOutsB,GACvCnuB,EAAe38qB,KAAKytzB,aAAalwzB,EAAQ,GAAGs1zB,GACvC12zB,EAAI,EAAGA,EAAIg6O,EAAY15O,OAAQN,IAAK,CACzCy2zB,EAAcz8kB,EAAYh6O,GAAmB,eAC7C,IAAK,IAAIonB,EAAI,EAAGA,EAAIo5pB,EAAalgrB,OAAQ8mB,IAErC,GADAo5pB,EAAap5pB,GAAGunrB,GAAertsB,EAAkBk/qB,EAAap5pB,GAAGunrB,OAAqBnuB,EAAap5pB,GAAGunrB,IACtC,IAA5D8nH,EAAYr0zB,QAAQo+qB,EAAap5pB,GAAmB,gBAAW,CAC3D9lB,EAAkB04O,EAAYh6O,GAAW,UACzCg6O,EAAYh6O,GAAW,OAAIwgrB,EAAap5pB,IAE5Co5pB,EAAap5pB,GAAGunrB,GAAatmsB,KAAK2xO,EAAYh6O,IAC9C,OAIZ6D,KAAKsyzB,gBAAgBtyzB,KAAKytzB,aAAaztzB,KAAKytzB,aAAahxzB,OAAS,GAAGqusB,GAAc,SACnF9qsB,KAAKytzB,aAAaplyB,OAAO9qB,EAAO,GAC3BA,EAAQ,EAAK,GACdyC,KAAKqyzB,iBAAiB90zB,EAAQ,IAGtCk0zB,EAAQp2zB,UAAUi3zB,gBAAkB,SAAUvzuB,EAAar4E,GAyBvD,IAAK,IAvBD8nzB,EAIAtxzB,EACAywzB,EANA5tzB,EAAQC,KAOR8yzB,EAAW,IAAIx0zB,OACfW,EAAU,SAAU9C,GACpBqyzB,EAAc,EACdb,EAAY5uuB,EAAY5iF,GAAc,UACtCe,EAAQ6hF,EAAY5iF,GAAmB,eAAEe,MAAM,KAC/CqwG,EAAOhqC,WAAWnkE,QAAQ,SAAU5C,GAC5BqiF,GAAe3hF,EAAO6hF,EAAY5iF,GAAmB,eAAGK,EAAMuD,KAC9DyuzB,GAAehzyB,WAAWhf,EAAKuD,EAAMw/E,qBAGhC,WAAT74E,IACAoszB,EAASnF,GAAa5uuB,EACtBA,EAAY5iF,GAAW,OAAI22zB,GAE/B/zuB,EAAY5iF,GAAW,OAAIqyzB,GAE3BjhtB,EAASvtG,KACJ7D,EAAI,EAAGA,EAAI4iF,EAAYtiF,OAAQN,IACpC8C,EAAQ9C,IAMhBs1zB,EAAQp2zB,UAAUopY,aAAe,WAC7Bl/X,GAAahB,OAAOvE,KAAKgB,QAAS,QAAShB,KAAK+yzB,gBAEhDxtzB,GAAahB,OAAOvE,KAAKgB,QAASwK,GAAQ0+E,gBAAiBlqF,KAAKgzzB,oBAChEztzB,GAAahB,OAAOvE,KAAKgB,QAASwK,GAAQ2+E,eAAgBnqF,KAAKizzB,oBAC/D1tzB,GAAahB,OAAOvE,KAAKgB,QAASwK,GAAQ4+E,cAAepqF,KAAKkzzB,mBAC9D3tzB,GAAahB,OAAOvE,KAAKgB,QAAS,0BAA2BhB,KAAKmzzB,qBAClEt3zB,OAAOe,oBAAoB,SAAUoD,KAAKozzB,kBAK9C3B,EAAQp2zB,UAAUqpY,WAAa,WAC3Bn/X,GAAanB,IAAIpE,KAAKgB,QAAS,QAAShB,KAAK+yzB,eAAgB/yzB,MAE7DuF,GAAanB,IAAIpE,KAAKgB,QAASwK,GAAQ0+E,gBAAiBlqF,KAAKgzzB,mBAAoBhzzB,MACjFuF,GAAanB,IAAIpE,KAAKgB,QAASwK,GAAQ2+E,eAAgBnqF,KAAKizzB,mBAAoBjzzB,MAChFuF,GAAanB,IAAIpE,KAAKgB,QAASwK,GAAQ4+E,cAAepqF,KAAKkzzB,kBAAmBlzzB,MAC9EuF,GAAanB,IAAIpE,KAAKgB,QAAS,0BAA2BhB,KAAKmzzB,oBAAqBnzzB,MACpFnE,OAAOa,iBAAiB,SAAUsD,KAAKozzB,gBAAgB93zB,KAAK0E,QAKhEyxzB,EAAQp2zB,UAAUsS,WAAa,WAC3B3N,KAAKivE,KAAO,IAAIy7B,IAKpB+mtB,EAAQp2zB,UAAUy7sB,YAAc,WAC5B92sB,KAAKgB,QAAQwC,aAAa,aAAcxD,KAAKkyC,aAAe,mBAC5DlyC,KAAKgB,QAAQwC,aAAa,WAAYxD,KAAKipH,SAAS/7G,aAKxDukzB,EAAQp2zB,UAAU+3zB,gBAAkB,SAAUvyzB,GAC1C,IAAId,EAAQC,KACRC,GACAw3B,KJjbQ,SIkbRoB,QAAQ,EACRooT,aAAcjhV,KAAK21B,cACnBqrT,YAAa,IAAI5zT,GAAK,EAAG,GACzB4xD,QAASh/E,MAETA,KAAK65U,UACL35U,aAAaF,KAAK65U,UAElB75U,KAAKgB,QAAQ8C,UAAUK,SAAS,eAChCnE,KAAK65U,SAAW15U,WAAW,WACvBJ,EAAM0kY,eACN1kY,EAAMigC,YACNjgC,EAAM4mF,YAAa,EACnB5mF,EAAM2kY,aACNzkY,EAAK+gV,YAAcjhV,EAAM41B,cACzB51B,EAAMymB,QJjcF,SIickBvmB,GACtBF,EAAMgsG,UACP,OAGX0ltB,EAAQp2zB,UAAU03zB,eAAiB,SAAUlyzB,GACzC,IAEI0M,EACA+kd,EAFA9rb,EADY3lC,EAAEsG,OACO7D,GAGrBsroB,GAAc/1mB,QAAQ,EAAOpB,KJ1dtB,QI0dmCunD,QAASh/E,KAAMqzzB,WAAYxyzB,GACzEb,KAAKwmB,QJ3dM,QI2dSoonB,GAChBpomB,EAASjoC,QAAQ,gBAAkB,IACnCsC,EAAE2kB,iBACF8sc,EAAY92c,WAAWgrB,EAAStpC,MAAM,KAAK,IAC3CqQ,GAAcsrB,QAAQ,EAAOpB,KJzelB,YIyemCunD,QAASh/E,KAAM6d,KAAM7d,KAAK6wD,OAAOgvB,YAAYyyY,GAAY+gW,WAAYxyzB,GACnHb,KAAKwmB,QJ1eM,YI0eajZ,KAIhCkkzB,EAAQp2zB,UAAU23zB,mBAAqB,SAAUnyzB,GAC7C,IACIm5G,EACAY,EAEA4ysB,EACAv7yB,EAEA4L,EAPAs7B,EAAYt4C,EAAEsG,OAGdq/B,EAAW2S,EAAU71C,GAGrBgwzB,EAAe,IAAIh1zB,OAGnBi1zB,EAAWvzzB,KAAKgB,QAAQsC,GAAK,YAActD,KAAK4qR,WAAa,UACjE,GAAIpkP,EAASjoC,QAAQ,gBAAkB,GAAKyB,KAAKywzB,kBAC7C5vzB,EAAE2kB,iBACFvT,EAAQuJ,WAAWgrB,EAAStpC,MAAM,KAAK,IACvC2gB,EAAO7d,KAAK6wD,OAAOgvB,YAAY5tE,GACJ,IAAvBjS,KAAKo/E,OAAO3iF,SAAiBohB,EAAiB,YAAK2hE,GAAa3hE,GAAc,QAC9E2hE,GAAa3hE,GAAc,OAAEphB,OAAS,GAAG,CACzC,GAAIuD,KAAK0xzB,aAAaj1zB,OAAS,EAC3B,IAAK,IAAIN,EAAI,EAAGA,EAAI6D,KAAK0xzB,aAAaj1zB,OAAQN,IAAK,CAC/C,GAAI0hB,EAAqB,iBAAM7d,KAAK0xzB,aAAav1zB,GAAS,KAAG,CAC9B,IAAvB0hB,EAAiB,YAAWA,EAAa,OAAEA,EAAgB,qBAAcrf,OACzEqf,EAAgB,WAAMA,EAAiB,UAClCA,EAAgB,UAIjBy1yB,EAAaz1yB,EAAgB,YAAMA,GAHnCy1yB,EAAez1yB,EAAa,SAOhCA,EAAgB,WAAI,EACpBA,EAAa,OAAa,WAAI,EAE9By1yB,GADAz1yB,EAAOA,EAAa,QACS,YAAMA,IAEvC7d,KAAK0xzB,aAAarpyB,OAAOlsB,EAAG,GAC5BA,GAAK,EACL,MAEKA,IAAM6D,KAAK0xzB,aAAaj1zB,OAAS,IACtCohB,EAAgB,WAAI,EACpBy1yB,EAAaz1yB,EAAgB,YAAMA,SAK3CA,EAAgB,WAAI,EACpBy1yB,EAAaz1yB,EAAgB,YAAMA,GAEvCm8F,GAAenhF,QAAQ,EAAOpB,KJxjBtB,aIwjBwCunD,QAASh/E,KAAM6d,KAAMy1yB,EAActyzB,QAASm4C,GAC5Fn5C,KAAKwmB,QJzjBG,aIyjBiBwzF,GACpBA,EAAWnhF,SACRr4B,SAASosB,eAAe2myB,IACxB/yzB,SAASosB,eAAe2myB,GAAUhvzB,SAEtCipzB,EAAY9uzB,KAAWsB,KAAK+/E,SAAUytuB,GAAW,GACjDxtzB,KAAK6wD,OAAOg9vB,qBAAqByF,EAAc9F,GAC/CxtzB,KAAK6wD,OAAOi9vB,kBAAkBwF,IAElC14sB,GAAa/hF,QAAQ,EAAOpB,KJ7jBtB,WI6jBsCunD,QAASh/E,KAAM6/E,YAAa7/E,KAAK6wD,OAAOgvB,aACpF7/E,KAAKwmB,QJ9jBC,WI8jBiBo0F,GAEnB56G,KAAK0xzB,aAAaltzB,MAAOizB,KAAM5Z,EAAqB,eAAGrhB,KAAMqhB,IAIzE7d,KAAK+N,OAAOvC,GAAQ0+E,gBAAiBrpF,IAEzC4wzB,EAAQp2zB,UAAU43zB,mBAAqB,SAAUpyzB,GAC7C,IAEI0M,EACAsQ,EAFA2oB,EADY3lC,EAAEsG,OACO7D,GAGrBkwzB,GAAa36xB,QAAQ,EAAOpB,KJxiBjB,YIwiBkCunD,QAASh/E,KAAMqzzB,WAAYxyzB,GAC5Eb,KAAKwmB,QJziBU,YIyiBSgtyB,GACxB,IAAI5kgB,EACApoR,EAASjoC,QAAQ,gBAAkB,IAEnCqwT,EAAapvO,GADb3hE,EAAO7d,KAAK6wD,OAAOgvB,YAAYrkE,WAAWgrB,EAAStpC,MAAM,KAAK,MACtB,OACxC8C,KAAKgB,QAAQ0D,MAAM+0D,QAAW57C,EAAiB,YAAK+wS,GAAcA,EAAWnyT,OAAS,GAAKuD,KAAKywzB,gBAC5F,UAAY,OAChBljzB,GAAcsrB,QAAQ,EAAOpB,KJ1jBnB,WI0jBmCunD,QAASh/E,KAAM6d,KAAMA,EAAMw1yB,WAAYxyzB,GACpFb,KAAKwmB,QJ3jBK,WI2jBajZ,IAE3BvN,KAAK+N,OAAOvC,GAAQ2+E,eAAgBtpF,IAExC4wzB,EAAQp2zB,UAAU63zB,kBAAoB,SAAUryzB,GAC5Cb,KAAK+N,OAAOvC,GAAQ4+E,cAAevpF,IAEvC4wzB,EAAQp2zB,UAAU83zB,oBAAsB,SAAUtyzB,GAC1Cb,KAAKyzzB,sBACLzzzB,KAAKyzzB,qBAAqBxvd,gBAE1BjkW,KAAK8xzB,qBACL9xzB,KAAK8xzB,oBAAoB4B,2BAE7BjyuB,GAAiBjhF,SAASkN,uBAAuB,oBAAqB,mBAAoB1N,OAO9FyxzB,EAAQp2zB,UAAUw1F,gBAAkB,WAChC,IAAIgB,KAyBJ,OAxBI7xF,KAAKouY,gBAAgB52W,SACrBq6D,EAAQrtF,MACJ6sF,OAAQ,iBACRpxF,MAAOD,QAGXA,KAAKu6sB,kBAAkB96qB,QACvBoyD,EAAQrtF,MACJ6sF,OAAQ,mBACRpxF,MAAOD,QAGXA,KAAKw+nB,kBAAkB/+lB,QACvBoyD,EAAQrtF,MACJ6sF,OAAQ,mBACRpxF,MAAOD,QAGXA,KAAKo2U,eAAe5+S,SACpBq6D,EAAQrtF,MACJ6sF,OAAQ,gBACRpxF,MAAOD,QAGR6xF,GAEX4/tB,EAAQp2zB,UAAUmsF,kBAAoB,SAAUiF,EAASC,GAErD,IAAK,IADDqf,GAAS,EACJ3tG,EAAK,EAAGyE,EAAKvE,OAAOhB,KAAKmvF,GAAUruF,EAAKyE,EAAGpG,OAAQ2B,IAAM,CAE9D,OADWyE,EAAGzE,IAEV,IAAK,aACD4B,KAAKq8U,eACL,MACJ,IAAK,SACL,IAAK,QACDtwO,GAAS,GAIjBA,IACA/rG,KAAKggC,YACLhgC,KAAK+rG,WAMb0ltB,EAAQp2zB,UAAUkkC,cAAgB,WAC9B,MAAO,WAKXkyxB,EAAQp2zB,UAAUiX,QAAU,WACxBtS,KAAKykY,eACLt5S,EAAO9vF,UAAUiX,QAAQhR,KAAKtB,OAMlCyxzB,EAAQp2zB,UAAUmxG,eAAiB,WAC/B,MAAO,IAEX3hB,IACI3jF,EAAS,OACVuqzB,EAAQp2zB,UAAW,aAAS,GAC/BwvF,IACI3jF,EAAS,OACVuqzB,EAAQp2zB,UAAW,cAAU,GAChCwvF,IACI9iF,KAAY60T,KACb60f,EAAQp2zB,UAAW,cAAU,GAChCwvF,IACI9iF,KAAY+0T,KACb20f,EAAQp2zB,UAAW,cAAU,GAChCwvF,IACI3jF,EAAS,OACVuqzB,EAAQp2zB,UAAW,kBAAc,GACpCwvF,IACI3jF,EAAS,aACVuqzB,EAAQp2zB,UAAW,aAAS,GAC/BwvF,IACI9iF,KAAY6nsB,KACb6hH,EAAQp2zB,UAAW,qBAAiB,GACvCwvF,IACI3jF,EAAS,eACVuqzB,EAAQp2zB,UAAW,kBAAc,GACpCwvF,IACI3jF,EAAS,OACVuqzB,EAAQp2zB,UAAW,kBAAc,GACpCwvF,IACI3jF,EAAS,OACVuqzB,EAAQp2zB,UAAW,aAAS,GAC/BwvF,IACI3jF,EAAS,OACVuqzB,EAAQp2zB,UAAW,uBAAmB,GACzCwvF,IACI3jF,EAAS,KACVuqzB,EAAQp2zB,UAAW,2BAAuB,GAC7CwvF,IACI3jF,EAAS,KACVuqzB,EAAQp2zB,UAAW,2BAAuB,GAC7CwvF,IACI3jF,OACDuqzB,EAAQp2zB,UAAW,eAAW,GACjCwvF,IACI3jF,GAAS,IACVuqzB,EAAQp2zB,UAAW,uBAAmB,GACzCwvF,IACI9iF,KAAYmlzB,KACbuE,EAAQp2zB,UAAW,wBAAoB,GAC1CwvF,IACI9iF,KAAYolzB,KACbsE,EAAQp2zB,UAAW,wBAAoB,GAC1CwvF,IACIxiF,KAAe+kzB,KAChBqE,EAAQp2zB,UAAW,cAAU,GAChCwvF,IACI9iF,KAAYunsB,KACbmiH,EAAQp2zB,UAAW,yBAAqB,GAC3CwvF,IACI9iF,KAAYk7oB,KACbwuK,EAAQp2zB,UAAW,yBAAqB,GAC3CwvF,IACI9iF,KAAYo1T,KACbs0f,EAAQp2zB,UAAW,uBAAmB,GACzCwvF,IACI9iF,KAAY6tU,KACb67e,EAAQp2zB,UAAW,sBAAkB,GACxCwvF,IACI3jF,GAAS,IACVuqzB,EAAQp2zB,UAAW,4BAAwB,GAC9CwvF,IACI3jF,EAAS,OACVuqzB,EAAQp2zB,UAAW,mBAAe,GACrCwvF,IACI3jF,EAAS,IACVuqzB,EAAQp2zB,UAAW,gBAAY,GAClCwvF,IACI3jF,EAAS,OACVuqzB,EAAQp2zB,UAAW,cAAU,GAChCwvF,IACI/hF,KACD2ozB,EAAQp2zB,UAAW,YAAQ,GAC9BwvF,IACI/hF,KACD2ozB,EAAQp2zB,UAAW,mBAAe,GACrCwvF,IACI/hF,KACD2ozB,EAAQp2zB,UAAW,cAAU,GAChCwvF,IACI/hF,KACD2ozB,EAAQp2zB,UAAW,qBAAiB,GACvCwvF,IACI/hF,KACD2ozB,EAAQp2zB,UAAW,kBAAc,GACpCwvF,IACI/hF,KACD2ozB,EAAQp2zB,UAAW,gBAAY,GAClCwvF,IACI/hF,KACD2ozB,EAAQp2zB,UAAW,oBAAgB,GACtCwvF,IACI/hF,KACD2ozB,EAAQp2zB,UAAW,qBAAiB,GACvCwvF,IACI/hF,KACD2ozB,EAAQp2zB,UAAW,wBAAoB,GAC1CwvF,IACI/hF,KACD2ozB,EAAQp2zB,UAAW,iBAAa,GACnCwvF,IACI/hF,KACD2ozB,EAAQp2zB,UAAW,gBAAY,GAClCwvF,IACI/hF,KACD2ozB,EAAQp2zB,UAAW,aAAS,GAC/BwvF,IACI/hF,KACD2ozB,EAAQp2zB,UAAW,iBAAa,GACnCwvF,IACI/hF,KACD2ozB,EAAQp2zB,UAAW,cAAU,GAChCo2zB,EAAU5muB,IACNzhF,GACDqozB,IAELlmtB,KN3zBC4pL,KAAUA,QAPH45a,eACFjirB,KAAM,OACNC,WAAY,SACZyJ,MAAO,UACPxJ,UAAW,SACXC,WAAY,4BOJpB,IAAI0myB,GAA+B,WAC/B,SAASA,EAAc30uB,GACnBh/E,KAAKiwJ,KAAO,EACZjwJ,KAAKq+sB,iBAAmB,IAAInorB,GAAK,EAAG,EAAG,EAAG,GAC1Cl2B,KAAKszP,YAAc,EACnBtzP,KAAKw+sB,gBAAkB,EACvBx+sB,KAAKy+sB,eAAiB,EACtBz+sB,KAAK0+sB,aAAe,EACpB1+sB,KAAKu+sB,eAAiB,IAAIrorB,GAAK,EAAG,EAAG,EAAG,GACxCl2B,KAAKg/E,QAAUA,EACfh/E,KAAKtD,mBA8qBT,OA5qBAi3zB,EAAct4zB,UAAU67U,aAAe,WACnCl3U,KAAK4+sB,8BACL5+sB,KAAKq3U,qBACLr3U,KAAK4zzB,eACL5zzB,KAAK03U,cACL13U,KAAK6zzB,cAAgB,EACrB7zzB,KAAK8zzB,YAAc9zzB,KAAKg/E,QAAQnxD,SAAS+qF,aACzC54G,KAAKg/E,QAAQ1tD,UAAU3vB,YAAY3B,KAAK8zzB,aACxC9zzB,KAAKu2U,wBACLv2U,KAAK2+sB,cAITg1G,EAAct4zB,UAAUk7U,sBAAwB,WAC5C,IAAIx2U,EAAQC,KACRg/E,EAAUh/E,KAAKg/E,QACfm3P,EAASn3P,EAAQo3P,eAKrB,GAJAp2U,KAAK+zzB,4BAA4B/0uB,EAAQyuuB,aAAa,IAClDztzB,KAAKg/E,QAAQlwD,QAAQryB,OAAS,GAAuC,IAAlCuD,KAAKq3U,kBAAkB56U,QAC1DuD,KAAKg0zB,uBAAuBh0zB,KAAKg/E,QAAQyuuB,aAAa,GAAI,UAE1DztzB,KAAKq3U,kBAAkB56U,OAAS,EAAG,CACnC,IAEIyX,EAAWiiU,EAAOjiU,SAClB6qsB,EAAc5oY,EAAOj2S,MAAMzT,KAC3BuyrB,EAAiB7oY,EAAOz1S,WACxBy+qB,EAAahpY,EAAOp4S,KACpBmkD,EAAS,EACTC,EAAS,EACTmjR,EAAQ,EACR07B,EAAQ,EACR/+S,EAAck0P,EAAOl0P,YACrBD,EAAam0P,EAAOn0P,WACpBo9nB,KACAxC,KACAq3G,EAAwC,SAAvB99e,EAAO/8S,YAAyC,QAAbllB,GAAmC,WAAbA,EACxE,aAAe,WAAciiU,EAAO/8S,YAItC29S,EAAeZ,EAAOngU,MAAMvZ,OAAS,EAAM05U,EAAOngU,MAAMzX,QAAQ,MAAQ,EAAMygF,EAAQrpD,cAAc3f,MAAQ,IAC1GwF,WAAW26T,EAAOngU,OAASwF,WAAW26T,EAAOngU,OAAS,KACxD8gU,EAAgBX,EAAOpgU,OAAOtZ,OAAS,EAAM05U,EAAOpgU,OAAOxX,QAAQ,MAAQ,EAC1EygF,EAAQrpD,cAAc5f,OAAS,IAAOyF,WAAW26T,EAAOpgU,QAAUyF,WAAW26T,EAAOpgU,QAAU,KAC/Fm+yB,EAAkB1nyB,GAAYuyrB,EAAaC,GAC3Cm1G,EAAW,EACXC,EAAW,EACXx8e,EAAezB,EAAOyB,aAGNzB,EAAO/xC,UACRpkS,KAAKq3U,kBAAkB56U,OAC1C,GAAmB,YAAf0itB,EAA0B,CAC1BpoY,EAAet5U,EAAkBs5U,GAAgB/3P,EAAQe,SAAS/pE,MAAQ+gU,EAC1ED,EAAgBr5U,EAAkBq5U,GAAiB93P,EAAQe,SAAShqE,OAAS+gU,EAE7E,IAAK,IADDvzT,EAAI,EACCpnB,EAAI,EAAGA,EAAI6D,KAAKq3U,kBAAkB56U,OAAQN,IAAK,CACpD,IAAI+jtB,EAAalgtB,KAAKq3U,kBAAkBl7U,GACpCsB,EAAkBuC,KAAK03U,WAAW13U,KAAKiwJ,SACvCjwJ,KAAK03U,WAAW13U,KAAKiwJ,OAAU2vW,KAAO5/f,KAAKiwJ,KAAO,EAAI5nJ,gBAE1D,IAAI83sB,EAAiB3zrB,GAAY0zrB,EAAuB,WAAG/pY,EAAO/xC,WAElE,GADApkS,KAAK0+sB,aAAerysB,KAAKC,IAAItM,KAAK0+sB,aAAcyB,EAAenqsB,OACrD,IAAN7Z,EACAg4zB,EAAWjyuB,EA3BL,GA2B8BF,EAAa,EACjDoyuB,EAAWjyuB,EA3BN,GA2B4B+xuB,EAAgBn+yB,QAAUksE,EAAck+nB,EAAepqsB,OAASksE,EAAc,EACxGk+nB,EAAepqsB,OAAS,OAE9B,CACD,IAAIijI,EAAWmnkB,EAAepqsB,OAASksE,EAAek+nB,EAAepqsB,OAASksE,EAC9E,GAAsB,eAAlBgyuB,EAAgC,CAChC,IAAI7zG,EAAiBxD,EAAar5rB,EAAI,GAAGxW,EAAI6vsB,EAAar5rB,EAAI,GAAGvN,MAjD/D,GAiDsFgsE,EACxF,GAAKo+nB,EAAgBxoY,EAAeuoY,EAAenqsB,MAAS+gU,EAAa,CACrE,IAAIspY,GAAiBzD,EAAar5rB,EAAI,GAAGvW,EAAKoysB,EAAc77rB,EAAI,GAAGvW,EAAKi1E,EAAc,EAClF26nB,EAAar5rB,EAAI,GAAGvW,EAAKoysB,EAAc77rB,EAAI,GAAGvW,EAAKi1E,EAAc,GApCxE,GAqCQo+nB,EAAgBrnkB,EAAW89L,GAC5B92U,KAAKsgtB,iBACL/8rB,EAAI,EACJ67rB,KACAxC,KACA16nB,EAASiyuB,EACThyuB,EAASiyuB,IAGTlyuB,EAAUk9nB,EAAc,GAAI,EAC5Bj9nB,EAAUk+nB,EAAiBrnkB,EAAU,QAIzC92D,EAAUk+nB,EAAiBp+nB,EAAa,EACxCG,EAAUi9nB,EAAc77rB,EAAI,GAAIvW,MAGnC,CACD,IAAIuzsB,EAAgB3D,EAAar5rB,EAAI,GAAGvW,EAAIoysB,EAAc77rB,EAAI,GAAGvW,EAAKi1E,EAAc,EAChF26nB,EAAar5rB,EAAI,GAAGvW,EAAIoysB,EAAc77rB,EAAI,GAAGvW,EAAKi1E,EAAc,EACpE,GAAKs+nB,EA1DJ,GA0DiCvnkB,EAAW89L,EAAc,CACvD,IAAI0pY,EAAiB5D,EAAar5rB,EAAI,GAAGxW,EAAI/M,KAAK0+sB,aA3EpD,GA4EO8B,EAAgB5oY,EAAeuoY,EAAenqsB,MAAS+gU,GACxD70P,EAASiyuB,EACThyuB,EAASiyuB,EACTx3G,KACAwC,KACAp/sB,KAAKsgtB,iBACL/8rB,EAAI,IAGJ2+D,EAASs+nB,EAAiBx+nB,EAAa,EACvCG,EAAUi9nB,EAAc,GAAI,QAIhCl9nB,EAASk9nB,EAAc77rB,EAAI,GAAGxW,EAC9Bo1E,EAASo+nB,EA3EZ,GA2E0Ct+nB,EAAc,GAIjEqjR,EAAQpjR,EAAUF,EAAa,EAAK41P,EACpCopD,EAAQ7+S,EAAUg+nB,EAAepqsB,OAAS,EAC1CqpsB,EAAc56sB,MAAOuI,EAAGm1E,EAAQl1E,EAAGm1E,IACnCy6nB,EAAap4sB,MAAOuI,EAAGu4V,EAAOt4V,EAAGg0X,EAAOhrX,MAAOmqsB,EAAenqsB,MAAOD,OAASoqsB,EAAepqsB,OAAS,IACtG/V,KAAK03U,WAAW13U,KAAKiwJ,MAAkB,WAAEzrJ,MACrCi8sB,YAAaP,EAAuB,WACpCn0T,OAASh/Y,EAAGm1E,EAAQl1E,EAAGm1E,GACvBxuB,MAAQ5mD,EAAGu4V,EAAOt4V,EAAGg0X,GACrBxzH,KAAM0yc,EAAuB,WAC7BhsY,KAAMgsY,EAAuB,WAC7BhqrB,MACInpB,EAAGqysB,EAAc77rB,GAAGxW,EAAKi1E,EAAa,EACtCh1E,EAAIoysB,EAAc77rB,GAAGvW,EAAKi1E,EAAc,EAAO++S,EAAQm/U,EAAepqsB,OACjEqpsB,EAAc77rB,GAAGvW,EAAKi1E,EAAc,EAAO++S,EAAQm/U,EAAepqsB,OACvEC,MAAO3J,KAAKE,IAAK6ysB,EAAc77rB,GAAGxW,EAAKi1E,EAAa,GAAOsjR,EAAQ66W,EAAenqsB,QAClFD,OAAUksE,EAAck+nB,EAAepqsB,OAAUksE,EAAck+nB,EAAepqsB,UAGtFwN,IAEJ,IAAI4jB,EAAannC,KAAK03U,WAAW,GAAe,WAChDvwS,EAAW/nC,QAAQ,SAAUuhtB,EAAW1usB,GACpC,IAAI8urB,EAAa,IAAI7qqB,GAAKyqrB,EAAgB,KAAK,EAAGA,EAAgB,KAAK,EAAGA,EAAgB,KAAS,MAAGA,EAAgB,KAAU,QAClH,IAAV1usB,IACAkizB,EAAWpzH,EAAWh0rB,EACtBqnzB,EAAWrzH,EAAW/zrB,GAE1BjN,EAAM0+sB,eAAiBpysB,KAAKC,IAAIvM,EAAM0+sB,eAAgBpysB,KAAKE,IAAI4nzB,GAAYpzH,EAAWh0rB,EAAIg0rB,EAAW/qrB,SACrGjW,EAAMy+sB,gBAAkBnysB,KAAKC,IAAIvM,EAAMy+sB,gBAAiBnysB,KAAKE,IAAI6nzB,GAAYrzH,EAAW/zrB,EAAI+zrB,EAAWhrrB,YAE3GghU,EAAgB/2U,KAAKy+sB,eAAiB1nY,EAAe/2U,KAAKy+sB,eAAiB1nY,EAC3ED,EAAiB92U,KAAKw+sB,gBAAkB1nY,EAAgB92U,KAAKw+sB,gBAAkB1nY,EAC/E92U,KAAKu+sB,gBACDxxsB,EAAGo6B,EAAW,GAAS,KAAK,EAAGn6B,EAAGm6B,EAAW,GAAS,KAAK,EAC3DnxB,MAAO+gU,EAAahhU,OAAQ+gU,OAG/B,CACD,IACIu9e,EACAC,EAFAC,EAAkBp+e,EAAO/xC,UAGzBowhB,EAAiBx0zB,KAAKq3U,kBAAkB56U,OAC5C43zB,EAAiC,eAAlBJ,EAAmCx2zB,EAAkBs5U,GAAiB/3P,EAAQe,SAAS/pE,MAAQw+yB,EACzGz9e,EAAcy9e,EAAmB/2zB,EAAkBs5U,GA3I1C,GA2IwEA,EACtFu9e,EAAkC,eAAlBL,EAAmCx2zB,EAAkBq5U,GA5IvD,GA4IsFA,EAC/Fr5U,EAAkBq5U,GAAkB93P,EAAQe,SAAShqE,OAASy+yB,EAAmB19e,EAAe09e,EACrGL,EAAW,EACXC,EAAWF,EAAgBn+yB,OA7HjB,GAqIL,IANDwyD,EAAY4tQ,EAAO12N,cACnBqgmB,EAAa,EACbC,EAAa,EACbV,EAAclpY,EAAOmpY,iBACrB15M,EAAgB,EAChBo6M,EAAe,EACnB,IAAS7jtB,EAAI,EAAGA,EAAI6D,KAAKq3U,kBAAkB56U,OAAQN,IAAK,CACpDg4zB,EAA8B,eAAlBF,EAAmCE,EAAWE,EAAeF,EACzEC,EAA8B,eAAlBH,EAAkCG,EAAYA,EAAWE,EACrE,IAAIhvb,EAAatlY,KAAKq3U,kBAAkBl7U,GAAe,WACnD8jtB,EAAe,IAAI7yrB,GAAK,EAAG,GACX,SAAhBiyrB,EACAY,EAAezzrB,GAAY84W,EAAYivb,GAElB,SAAhBl1G,EAELY,EAAezzrB,GADf84W,EAAannW,GAA4B,eAAlB81xB,EAAiCI,EAAcC,EAAehvb,EAAYivb,GAC1DA,GAGvCjvb,EAAa,GAEjBsgI,EAAgBv5f,KAAKC,IAAIs5f,EAAeq6M,EAAalqsB,QACrDiqsB,EAAe3zsB,KAAKC,IAAI0zsB,EAAcC,EAAajqsB,OAC/CiqsB,EAAajqsB,MAAQ,GAAKiqsB,EAAalqsB,OAAS,IAC1B,eAAlBk+yB,GACA3ud,EAAQ6ud,EAAYE,EAAc,EAClCrzb,EAAuB,UAAdz4T,EAA0B6rvB,EAAWE,EAAgBr0G,EAAalqsB,OAAS,EA3B5E,GA4BHq+yB,EA5BG,KA+BR9ud,EAAuB,UAAd/8R,EAAyB4rvB,EAAYl0G,EAAajqsB,MAAQ,EA/B3D,GAgCDm+yB,EAAWE,EAAcp0G,EAAajqsB,MAAQ,EAhC7C,GAiCRgrX,EAAQozb,EAAYE,EAAe,EAAMr0G,EAAalqsB,OAAS,IAG7D,IAAN5Z,IACA2jtB,EAAgC,eAAlBm0G,EAAkCE,EAA0B,UAAd5rvB,EACxD+8R,EAAS26W,EAAajqsB,MAAQ,EAAKm+yB,EACvCp0G,EAAgC,eAAlBk0G,EAAiD,UAAd1rvB,EAAyB6rvB,EACtEpzb,EAASi/U,EAAalqsB,OAAS,EAAKq+yB,GAExCj4zB,IAAMq4zB,EAAiB,IACvBz9e,EAAiC,eAAlBk9e,EAAkC5nzB,KAAKE,IAAK4nzB,EAAWE,EAAev0G,GAChFu0G,EAAcr0G,EA5CP,GA6CZlpY,EAAkC,eAAlBm9e,EAAmCK,EAAgB1uT,EAAgB,EA7CvE,GA8CRv5f,KAAKE,IAAK6nzB,EAAWE,EAAgBv0G,IAE7C//sB,KAAK4+sB,2BAA2Bp6sB,MAC5Bo5B,KAAM59B,KAAKq3U,kBAAkBl7U,GAAe,WAAG4Q,EAAGonzB,EAAUnnzB,EAAGonzB,EAC/Dp+yB,MAAOq+yB,EAAat+yB,OAAQu+yB,EAActzzB,QAAShB,KAAKq3U,kBAAkBl7U,GAAoB,gBAC9FswB,KAAM64W,EAAYhgC,MAAOA,EAAO07B,MAAOA,EACvCqrI,UAAW4zM,EAAajqsB,MAAOi9P,WAAYgtc,EAAalqsB,OACxDvZ,KAAMwD,KAAKq3U,kBAAkBl7U,GAAe,aAGpD6D,KAAKu+sB,gBAAmBxxsB,EAAG+ysB,EAAY9ysB,EAAG+ysB,EAAY/psB,MAAO+gU,EAAahhU,OAAQ+gU,MAI9F68e,EAAct4zB,UAAUiltB,eAAiB,WACrCtgtB,KAAKiwJ,OACDxyJ,EAAkBuC,KAAK03U,WAAW13U,KAAKiwJ,SACvCjwJ,KAAK03U,WAAW13U,KAAKiwJ,OAAU2vW,KAAO5/f,KAAKiwJ,KAAO,EAAI5nJ,iBAG9DsrzB,EAAct4zB,UAAU04zB,4BAA8B,SAAUv3zB,GAC5D,IAAI6D,EAAQm/E,GAAahjF,GAAc,OACvC,GAAI6D,GAASA,EAAM5D,OAAS,IACxBuD,KAAKy0zB,qBAAqBp0zB,GACtBL,KAAKg/E,QAAQI,OAAO3iF,OAAS,GAC7B,IAAK,IAAIN,EAAI,EAAGA,EAAIkE,EAAM5D,OAAQN,IAC9B6D,KAAK+zzB,4BAA4B1zzB,EAAMlE,KAKvDw3zB,EAAct4zB,UAAU24zB,uBAAyB,SAAUx3zB,EAAMkK,GAC7D,IAAIrG,EAAQm/E,GAAahjF,GAAc,OACvC,GAAI6D,GAASA,EAAM5D,OAAS,EAAG,CAC3B,IAAK,IAAIN,EAAI,EAAGA,EAAIkE,EAAM5D,OAAQN,IAC9B6D,KAAKq3U,kBAAkB7yU,MACnBkwzB,WAAYr0zB,EAAMlE,GAAS,KAC3BwmtB,WAAY3itB,KAAKg/E,QAAQlwD,QAAQ3yB,EAAI6D,KAAKg/E,QAAQlwD,QAAQryB,QAC1DomtB,cACA8xG,SAAUt0zB,EAAMlE,GAAW,SAGnC6D,KAAKq3U,kBAAkBx/S,KAAK2pD,IAC5B,IAAK,IAAIj+D,EAAI,EAAGA,EAAIvjB,KAAKq3U,kBAAkB56U,OAAQ8mB,IAC/CvjB,KAAKq3U,kBAAkB9zT,GAAe,WAAIvjB,KAAKg/E,QAAQlwD,QAAQvL,EAAIvjB,KAAKg/E,QAAQlwD,QAAQryB,UAIpGk3zB,EAAct4zB,UAAUo5zB,qBAAuB,SAAUj4zB,GAkBrD,IAAK,IAjBDo4zB,EACAh3xB,EACAojD,EACAm1J,EACAmvJ,EAKA6nT,EAGAxsmB,EAEAk0uB,EACA35xB,EACAC,EATA25xB,GAAkB,EAGlB51uB,EAAOl/E,KAAKg/E,QAAQG,iBACpBC,EAASp/E,KAAKg/E,QAAQI,OAEtBlrE,EAAWlU,KAAKg/E,QAAQo3P,eAAeliU,SAIlC/X,EAAI,EAAGA,EAAIK,EAAKC,OAAQN,IAAK,CAClCg6O,EAAc35O,EAAKL,GAAS,KAC5BgxrB,EAAa3wrB,EAAKL,GAAe,WAGjC,IAAK,IAAIiC,EAAK,EAAGozsB,EAF4B,IAA/BxxsB,KAAKg/E,QAAQI,OAAO3iF,QAAgB0wrB,IAAentrB,KAAKg/E,QAAQI,OAAO3iF,OACzDyiF,EAAKwB,aAAetB,EAAO+tmB,GAAYzsmB,aACnBtiF,EAAKozsB,EAAe/0sB,OAAQ2B,IAAM,CAC9E,IAAIqiF,EAAW+wnB,EAAepzsB,GAiB9B,GAhBA4iF,EAAa1pD,OAAO6+M,EAAYn2O,KAAKg/E,QAAQuyuB,sBAC7C5wuB,EAAaw1J,EAAYn2O,KAAKg/E,QAAQsyuB,qBACtC7wuB,EAASzjF,MAASS,EAAkBgjF,EAASzjF,OAAqCyjF,EAASzjF,MAArCyjF,EAASzjF,MAAMkQ,YAChEzP,EAAkBgjF,EAAS97C,QAAUlnC,EAAkBgjF,EAAS77C,KACjEo8C,GAAcP,EAAS97C,MAAQq8C,GAAcP,EAAS77C,IACtDkwxB,GAAkB,EAClBxvb,EAAc7nY,EAAkBgjF,EAASptE,OAA0BotE,EAAS97C,KAAO,MAAQ87C,EAAS77C,GAAlD67C,EAASptE,MAC3DuqB,EAAOngC,EAAkBgjF,EAASjqD,OAASoH,EAAO6iD,EAASjqD,MAC3Do+xB,EAAY50zB,KAAK+0zB,mBAAmBzvb,IAE9B7nY,EAAkBgjF,EAASzjF,QAAU2jF,IAAeF,EAASzjF,QACnE83zB,GAAkB,EAClBxvb,EAAc7nY,EAAkBgjF,EAASptE,OAA0BotE,EAASzjF,MAAMkQ,WAAhCuzE,EAASptE,MAC3DuqB,EAAOngC,EAAkBgjF,EAASjqD,OAASoH,EAAO6iD,EAASjqD,MAC3Do+xB,EAAY50zB,KAAK+0zB,mBAAmBzvb,IAEpCwvb,GAAmBr0uB,EAASK,YAAcL,EAASI,YAAmD,gBAArC7gF,KAAKg/E,QAAQo3P,eAAer4S,KAAwB,CACrH,IAAI+xD,KACA79C,OAAW,EACX+ixB,GAAehluB,UAAW,KAAMx5D,MAAOoH,GACvCq3xB,GAAejluB,UAAW,OAAQx5D,MAAOoH,GAC7C1C,EAAkB,QAAbhnB,GAAmC,WAAbA,EAAwB,OAAS,KAC5DinB,EAAkB,QAAbjnB,GAAmC,WAAbA,EAAwB,KAAO,OAC1D47E,EAAOtrF,KAAKwwzB,GACZlluB,EAAOtrF,KAAKywzB,GACZhjxB,GACI3uC,GAAI,cAAgB6prB,EAAa,eAAiBntrB,KAAK6zzB,cAAe74xB,GAAI,KAAMC,GAAI,KAAMC,GAAIA,EAAIC,GAAIA,IAE1G05xB,EAAkB70zB,KAAKg/E,QAAQnxD,SAASwrF,aAAa,iBAAkBpnE,EAAU69C,GAAQv+E,WAAW,IACpFA,WAAW,GAAG/N,aAAa,eAAgBi9E,EAASI,WAAW3zE,YAC/E2nzB,EAAgBtjzB,WAAW,GAAG/N,aAAa,eAAgBi9E,EAASK,WAAW5zE,YAC/ElN,KAAK8zzB,YAAYnyzB,YAAYkzzB,GAC7B70zB,KAAK6zzB,gBAELe,GAAaA,EAAmB,SAAKE,GACrCA,GAAkB,EAClB90zB,KAAKq3U,kBAAkB7yU,MACnBkwzB,WAAYpvb,EAAYq9U,WAAY/krB,EAAMilrB,cAAgBgyG,gBAAiBA,IAE/E70zB,KAAKq3U,kBAAkBr3U,KAAKq3U,kBAAkB56U,OAAS,GAAe,WAAE+H,KAAKhI,EAAKL,KAE7E24zB,IACLA,GAAkB,EAClB90zB,KAAKq3U,kBAAkBu9e,EAAiB,OAAe,WAAEpwzB,KAAKhI,EAAKL,QAKnFw3zB,EAAct4zB,UAAU05zB,mBAAqB,SAAUzvb,GACnD,IAAI4vb,EACAvlW,EACJ,GAAsC,IAAlC3vd,KAAKq3U,kBAAkB56U,OACvBy4zB,GAAiB,OAGjB,IAAK,IAAI3xyB,EAAI,EAAGA,EAAIvjB,KAAKq3U,kBAAkB56U,OAAQ8mB,IAAK,CACpD,GAAI+hX,IAAetlY,KAAKq3U,kBAAkB9zT,GAAe,WAAG,CACxD2xyB,GAAiB,EACjBvlW,EAAYpsc,EACZ,MAEKA,IAAMvjB,KAAKq3U,kBAAkB56U,OAAS,IAC3Cy4zB,GAAiB,GAI7B,OAASlivB,QAASkivB,EAAgBl4zB,MAAO2yd,IAE7CgkW,EAAct4zB,UAAUsjtB,WAAa,WACjC,IAGI/grB,EAEAi3xB,EALA71uB,EAAUh/E,KAAKg/E,QACfm3P,EAASn3P,EAAQo3P,eACjBrqO,EAAS/sB,EAAQnxD,SAIjBu7P,EAAW+sD,EAAO/xC,UAItB,GAHApkS,KAAKs3U,YAAcvrO,EAAO1/B,aAAc/oE,GAAI07E,EAAQh+E,QAAQsC,GAAK,kBACjEtD,KAAKihtB,qBACLjhtB,KAAKm1zB,oBACe,YAAhBh/e,EAAOp4S,KACP/9B,KAAK8nY,eAAe9nY,KAAKszP,kBAGzB,IAAK,IAAIn3P,EAAI,EAAGA,EAAI6D,KAAK4+sB,2BAA2BnitB,OAAQN,IAAK,CAC7D,IAAI6ktB,EAAShioB,EAAQh+E,QAAQsC,GAAK,iBAAmBnH,EACjDwwY,EAAS3tT,EAAQh+E,QAAQsC,GAAK,iBAAmBnH,EAAI,QACrD0hB,EAAO7d,KAAK4+sB,2BAA2BzitB,GAE3CyhC,GADAi3xB,EAAkBh3yB,EAAc,SACP,QAAUg3yB,EAAgBvxzB,GAAK,IAAMua,EAAW,KACzE,IAAI6Y,EAAS,IAAIR,GAAKrY,EAAQ,EAAGA,EAAQ,EAAGA,EAAY,MAAGA,EAAa,QACpE++rB,EAAe,IAAIj+nB,GAAS9gE,EAAY,MAAGA,EAAY,OACvDilX,EAAc,IAAI5+D,GAAW88Y,EAAQpjrB,EAAMu4S,EAAO4qY,YAAa,EAAGrqrB,GAEtE6M,GADc,IAAIhN,GAAWo2W,EAAQiwU,EAAa7vsB,EAAG6vsB,EAAa5vsB,EAAG,SAAU6Q,EAAW,KAAG,GAAI,IAClEurQ,EAAUA,EAAS5yP,MAAOx2B,KAAKs3U,aAC9Dt3U,KAAKs3U,YAAY31U,YAAYoqG,EAAOpoE,cAAcm/V,MAI9D6wb,EAAct4zB,UAAUysY,eAAiB,SAAU73O,GAC/C,IAQI1iJ,EARAyxE,EAAUh/E,KAAKg/E,QACfm3P,EAASn3P,EAAQo3P,eAEjB8qY,EAAY,IAAI9zrB,GAAK+oT,EAAOn0P,WAAYm0P,EAAOl0P,aAG/C8pB,EAAS/sB,EAAQnxD,SACjBkzrB,EAAc5qY,EAAO4qY,YAEzB,GAAI9wjB,GAAQ,GAAKA,EAAOjwJ,KAAK03U,WAAWj7U,OAAQ,CACxC+D,SAASosB,eAAe5sB,KAAKs3U,YAAYh0U,KACzC9C,SAASosB,eAAe5sB,KAAKs3U,YAAYh0U,IAAIiB,SAKjD,IAAK,IAHD6wzB,EAAgC,mBAAjBj/e,EAAOxoT,OAA+C,iBAAjBwoT,EAAOxoT,OAA6C,UAAjBwoT,EAAOxoT,MAC9FikB,EAAcwjxB,EAAc33zB,EAAkB04U,EAAOv4S,MAAQ,UAAYu4S,EAAOv4S,KAAOmjrB,EAAYvqrB,MACnGqb,EAAcujxB,GAAqC,IAAtBr0G,EAAY/qsB,MAAe,EAAwB+qsB,EAAY/qsB,MACvF7Z,EAAI,EAAGA,EAAI6D,KAAK03U,WAAWznL,GAAkB,WAAExzJ,OAAQN,IAAK,CACjE,IAAIgrC,EAAannC,KAAK03U,WAAWznL,GAAkB,WAAE9zJ,GACjDyosB,EAAgB74lB,EAAO1/B,aAAc/oE,GAAI07E,EAAQh+E,QAAQsC,GAAK,iBAAmBnH,IACjFmpY,EAAan+V,EAAwB,YACrCg6qB,EAAUnioB,EAAQh+E,QAAQsC,GAAK,uBAAyBnH,EACxDwwY,EAAS3tT,EAAQh+E,QAAQsC,GAAK,sBAAwBnH,EACtDijtB,EAAgBj4qB,EAAkB,MAClCy1qB,EAAez1qB,EAAiB,KACpC55B,GACIsrB,QAAQ,EAAOpB,KAAMw1xB,GAAqBjuuB,QAASA,EAASphD,KAAMuJ,EAAiB,KACnFxZ,MAAOwoT,EAAOxoT,MAAOmpK,SAAUq/I,EAAOr/I,UAE1C,IAAIsqhB,EAAkB,IAAIhrrB,GAAW+qrB,EAAS5zsB,EAAUqwB,KAAMiU,EAAaujxB,EAAcjuxB,EAAiB,KAAIyK,EAAa,EAAG,IAC9HgzpB,EAAcjjsB,YAAY8rB,GAAW2xrB,EAAe7xsB,EAAUogB,MAAOuzrB,EAAW3zsB,EAAUupL,SAAUsqhB,EAAiB97U,IAErH/hW,GADc,IAAIhN,GAAWo2W,EAAQiwU,EAAa7vsB,EAAG6vsB,EAAa5vsB,EAAG,QAASs4X,EAAY,GAAI,IAC/DnvD,EAAO/xC,UAAW+xC,EAAO/xC,UAAU5tQ,MAAOouqB,GACzE5ksB,KAAKs3U,YAAY31U,YAAYijsB,GAEjC,IAAIyc,OAAc,EAGlB,GAAkB,IAAdrhtB,KAAKiwJ,KAAY,CACjB,IAAImpL,EAAcnpL,EAAO,EAAK,IAAMjwJ,KAAK03U,WAAWj7U,OAChD6ktB,EAAanrY,EAAO/xC,UACpBm9a,EAAiB/0rB,GAAY4sT,EAAYkoY,GACzCE,EAAaxhtB,KAAKu+sB,eAAexxsB,EAAI/M,KAAKu+sB,eAAevosB,MAASursB,EAAevrsB,SAvC/E,GAyCFyrsB,EAAczhtB,KAAKu+sB,eAAexxsB,EAAI/M,KAAKu+sB,eAAevosB,MAC1DkY,EAAQluB,KAAKu+sB,eAAevxsB,EAAIhN,KAAKu+sB,eAAexosB,WA1ClD,GA2CF2rsB,EAAYD,EA3CV,GA2CgCF,EAAevrsB,MAAQ,IAC7DqrsB,EAAct1mB,EAAO1/B,aAAc/oE,GAAI07E,EAAQh+E,QAAQsC,GAAK,yBAC5D,IAAIq+sB,EAAkB51mB,EAAO1/B,aAAc/oE,GAAI07E,EAAQh+E,QAAQsC,GAAK,8BAChEs+sB,EAAmB71mB,EAAO1/B,aAAc/oE,GAAI07E,EAAQh+E,QAAQsC,GAAK,+BACjEu+sB,EAAY,MAAQJ,EAAa,IAAMvzrB,EAAO,OAASuzrB,EA/CrD,IA+C2E,KAAOvzrB,KACpF,OAASuzrB,EAhDP,IAgD6B,KAAOvzrB,KAAiB,MACvD4zrB,EAAW,MAAQN,EAAY,IAAMtzrB,EAAO,OAASszrB,EAjDnD,IAiDwE,KAAOtzrB,KACjF,OAASszrB,EAlDP,IAkD4B,KAAOtzrB,KAAiB,MACtD6zrB,EAAkB,IAAI3rrB,GAAW4oD,EAAQh+E,QAAQsC,GAAK,aAAc,UAAW,EAAG,UAAW,EAAG,GAAIw+sB,GACxGH,EAAgBhgtB,YAAYoqG,EAAO51E,SAAS4rrB,IAC5C,IAAIC,EAAsB,IAAI99Y,GAAWllP,EAAQh+E,QAAQsC,GAAK,kBAAmB,iBAAmB,EAAG,IAAI4yB,GAAKsrrB,IAA0BtzrB,KAAsBlY,GAAWkvW,IAAc,IACzLy8V,EAAgBhgtB,YAAYoqG,EAAOpoE,cAAcq+qB,IACjDhitB,KAAKukB,WAAWo9rB,GAChB,IAAIM,EAAmB,IAAI7rrB,GAAW4oD,EAAQh+E,QAAQsC,GAAK,cAAe,UAAW,EAAG,UAAW,EAAG,GAAIu+sB,GAC1GD,EAAiBjgtB,YAAYoqG,EAAO51E,SAAS8rrB,IAC7C,IAAIC,EAAuB,IAAIh+Y,GAAWllP,EAAQh+E,QAAQsC,GAAK,mBAAoB,iBAAmB,EAAG,IAAI4yB,GAAMurrB,EA1D7G,GA0DmIvzrB,IA1DnI,GAAA,IA0DoK,IAC1K0zrB,EAAiBjgtB,YAAYoqG,EAAOpoE,cAAcu+qB,IAClDlitB,KAAKukB,WAAWq9rB,GAChBP,EAAY1/sB,YAAYggtB,GACxBN,EAAY1/sB,YAAYigtB,GACxB,IAAIO,GACA7+sB,GAAM07E,EAAQh+E,QAAQsC,GAAK,eAC3ByJ,EAAK20sB,EACL10sB,EAAKkhB,EAAQqzrB,EAAexrsB,OAAS,EACrC6nB,KAAQ,UACR7M,YAAa,OACbC,aAAcswrB,EAAWt0rB,UACzBiE,cAAeqwrB,EAAWr0rB,WAC1BiE,cAAeowrB,EAAWv0rB,WAC1BoE,cAAe,SACf9jB,UAAa,GACbI,QAAW,EACXyxB,oBAAqB,IAEzBmirB,EAAY1/sB,YAAYoqG,EAAO36E,WAAW+wrB,EAAiB/oY,IAC3Dp5U,KAAKs3U,YAAY31U,YAAY0/sB,MAIzCsyG,EAAct4zB,UAAU4ltB,mBAAqB,WACzC,IAAIjioB,EAAUh/E,KAAKg/E,QACfm3P,EAASn3P,EAAQo3P,eACjB2oY,EAAc5oY,EAAOj2S,MAAMzT,KAE3B23Q,EAAY+xC,EAAOz1S,WAGnBlE,EAAWhQ,GADH2R,GAAUn+B,KAAKu+sB,eAAevosB,SAAwB+osB,EAAa36a,GAC7CA,GAClCpkS,KAAKq+sB,iBAAmB,IAAInorB,GAAMl2B,KAAKu+sB,eAAexxsB,EALxC,GAKuD/M,KAAKu+sB,eAAevxsB,EAL3E,GAKyFwvB,EAASzmB,OAAU/V,KAAKu+sB,eAAoB,SAAoBv+sB,KAAKu+sB,eAAqB,UAAoB/hrB,EAASzmB,QACzM,gBAAhBogU,EAAOp4S,KAAyB,EAAmB,IAAd/9B,KAAKiwJ,KANjC,GAMyD,IACvE,IAAIhxH,EAAgB,IAAIilS,GAAWllP,EAAQh+E,QAAQsC,GAAK,iBAAkB6yU,EAAO1mT,WAAY0mT,EAAO7xS,OAAQ,EAAGtkC,KAAKq+sB,iBAAkB,IAClIvmV,EAAe94S,EAAQnxD,SAAS8V,cAAc1E,GAClD64V,EAAapzX,MAAM2ka,cAAgB,OACnCrpa,KAAKs3U,YAAY31U,YAAYm2X,GAC7B93X,KAAKqitB,mBAAmBrjoB,EAASh/E,KAAKq+sB,iBAAiBrosB,MAAOhW,KAAKq+sB,iBAAiBtosB,OAAQogU,GAC5Fn2U,KAAKs3U,YAAY9zU,aAAa,YAAa,eAAiBxD,KAAK2uF,UAAU5hF,GAAO/M,KAAKq+sB,iBAAkB,GAAM,KAC1Gr+sB,KAAK2uF,UAAU3hF,GAAOhN,KAAKq+sB,iBAAkB,GAAM,MACxDr/nB,EAAQ1tD,UAAU3vB,YAAY3B,KAAKs3U,cAEvCq8e,EAAct4zB,UAAU85zB,kBAAoB,WACxC,IAAIn2uB,EAAUh/E,KAAKg/E,QACfm3P,EAASn3P,EAAQo3P,eACjBhyC,EAAY+xC,EAAOz1S,WACnBq+qB,EAAc5oY,EAAOj2S,MAAMzT,KAG3B21rB,EAAYjkrB,GAAUn+B,KAAKu+sB,eAAevosB,SAAwB+osB,EAAa36a,GAC/E5nQ,EAAWhQ,GAAY41rB,EAAWh+a,GAClC26a,GAEAx7qB,GADc,IAAIhN,GAAWyoD,EAAQh+E,QAAQsC,GAAK,eAAiBtD,KAAKu+sB,eAAgB,EAAKv+sB,KAAKu+sB,eAAevosB,MAAQ,EAAIhW,KAAKu+sB,eAAevxsB,EAAKwvB,EAASzmB,OAAS,EAAI,SAAUqssB,EAAW,IAClKh+a,EAAWA,EAAU5tQ,MAAOx2B,KAAKs3U,cAGxEq8e,EAAct4zB,UAAU+ntB,yBAA2B,SAAUvitB,GACzD,IAAIm+E,EAAUh/E,KAAKg/E,QACf73E,EAAStG,EAAEsG,OACXkuzB,EAAgBr2uB,EAAQh+E,QAAQsC,GAAK,sBACzC6D,EAAWtG,EAAE6F,KAAKnI,QAAQ,UAAY,EAClCiC,SAASiyG,iBAAiB5xG,EAAE89D,eAAe,GAAGvqB,QAASvzC,EAAE89D,eAAe,GAAGtqB,SADpCltC,EAE3C,IAAI4gvB,EACA5xa,EAASn3P,EAAQo3P,eACrB,GAAIjvU,EAAO7D,GAAG/E,QAAQ,gBAAkB,GAAK43U,EAAO3+S,SAAWx3B,KAAK4+sB,2BAA2BnitB,OAAS,EAAG,CACvG,IAAI05O,OAAc,EACd4qd,OAAa,EAEbvksB,OAAO,EACPohC,OAAO,EACPE,OAAS,EACT+T,OAAc,EACd+ypB,OAAgB,EACpBmjD,EAAa/oqB,EAAQnuB,OAAOgvB,YAAYrkE,WAAWrU,EAAO7D,GAAGpG,MAAM,KAAK,KAExE,IAAK,IADDqqE,EAAUyX,EAAQ1tD,UAAU1lB,wBACvBzP,EAAI,EAAGA,EAAI6D,KAAKq3U,kBAAkB56U,OAAQN,IAAK,CACpDg6O,EAAcn2O,KAAKq3U,kBAAkBl7U,GAErC4ksB,GADA6D,EAAgBpksB,SAASosB,eAAeoyD,EAAQh+E,QAAQsC,GAAK,iBAAmBnH,IACrDyP,wBAC3B,IAAIyhD,EAAS,IAAIn3B,GAAK7pB,KAAKE,IAAIw0rB,EAAWv0rB,KAAO+6D,EAAQ/6D,MAAOH,KAAKE,IAAIw0rB,EAAWr0rB,IAAM66D,EAAQ76D,KAAMq0rB,EAAW/qrB,MAAO+qrB,EAAWhrrB,QAIrI,GAHA6nB,EAAOgnqB,EAAc/xrB,aAAa,QAClCirB,EAASq4S,EAAO4qY,YAAYvqrB,MAC5Bqb,EAAcskS,EAAO4qY,YAAY/qsB,OAC5BvY,EAAkB04O,EAAwB,YAAI,CAC/C35O,EAAO25O,EAAwB,WAC/B,IAAK,IAAI5yN,EAAI,EAAGA,EAAI/mB,EAAKC,OAAQ8mB,IAC7B,GAAI/mB,EAAK+mB,GAAmB,iBAAMwkuB,EAA2B,eAAG,CAC5D/nvB,KAAKs1zB,uBAAuBn/e,EAAQv4S,EAAME,EAAQu3xB,EAAexjxB,EAAawb,GAC9E,cAOhBrtD,KAAK0zzB,4BAGbC,EAAct4zB,UAAUi6zB,uBAAyB,SAAUn/e,EAAQv4S,EAAME,EAAQx6B,EAAIuuC,EAAaxe,GAC9F,IAAItW,EACA4yU,EACA1hU,EACAC,EAeInR,EAVU,gBAFsB,SAAvBo5T,EAAO/8S,YAA+C,QAApB+8S,EAAOjiU,UAA0C,WAApBiiU,EAAOjiU,SACjF,aAAe,WAAaiiU,EAAO/8S,aAEhC+8S,EAAOktY,gBASD,OAFPp1rB,EAAOoF,EAAKtmB,EAAKsmB,EAAKrd,MAAQ,GAER,KADtBkY,EAAOmF,EAAKrmB,EAAKqmB,EAAW,QACO,OAASpF,EAbxC,IAawD,KAAOC,EAd9D,IAeD,OAASD,EAdT,IAcyB,KAAOC,EAf/B,IAegD,MAP9C,OAFPD,EAAOoF,EAAKtmB,EAAKsmB,EAAKrd,MAAQ,GAER,KADtBkY,EAAOmF,EAAKrmB,GACuB,OAASihB,EAPxC,IAOwD,KAAOC,EAR9D,IASD,OAASD,EART,IAQyB,KAAOC,EAT/B,IASgD,MAUpDioT,EAAOktY,gBASD,OAFPp1rB,EAAOoF,EAAKtmB,GAEU,KADtBmhB,EAAOmF,EAAKrmB,EAAKqmB,EAAKtd,OAAS,GACI,OAASkY,EA3BxC,IA2BwD,KAAOC,EA5B9D,IA6BD,OAASD,EA5BT,IA4ByB,KAAOC,EA7B/B,IA6BgD,MAP9C,OAFPD,EAAOoF,EAAKtmB,EAAKsmB,EAAU,OAEL,KADtBnF,EAAOmF,EAAKrmB,EAAKqmB,EAAKtd,OAAS,GACI,OAASkY,EArBxC,IAqBwD,KAAOC,EAtB9D,IAuBD,OAASD,EAtBT,IAsByB,KAAOC,EAvB/B,IAuBgD,MAS7DyhU,EAAc,IAAIv5T,GAAW9yB,EAAIs6B,EAAMiU,EAAa/T,EAAQ,EAAG,GAAI/gB,GACnE/c,KAAKg/E,QAAQ1tD,UAAU3vB,YAAY3B,KAAKg/E,QAAQnxD,SAASsI,SAASw5T,KAEtEgke,EAAct4zB,UAAUgntB,mBAAqB,SAAUrjoB,EAAShpE,EAAOD,EAAQogU,GAC3E,IAAIppU,EACAC,EAEAuozB,EAAQv2uB,EAAQe,SAAShzE,EACzByozB,EAAQx2uB,EAAQe,SAAS/yE,EACzBqjE,EAAa2O,EAAQe,SAAShqE,OAC9B4b,EAAYqtD,EAAQe,SAAS/pE,MAC7BorE,EAAapC,EAAQrpD,cAAc3f,MACnCsvL,EAActmH,EAAQrpD,cAAc5f,OACxC,GAAwB,UAApBogU,EAAOjiU,SACPlU,KAAK2uF,UAAYwnP,EAAOzoT,aAEvB,CACD,OAAQyoT,EAAOjiU,UACX,IAAK,MACL,IAAK,SACD8qE,EAAQe,SAAShqE,OAAUs6D,EAAat6D,EACxChJ,EAAKq0E,EAAa,EAAMprE,EAAQ,EAChChJ,EAAyB,QAApBmpU,EAAOjiU,SAAsBshzB,EAASA,EAAQx2uB,EAAQe,SAAShqE,OACpEipE,EAAQe,SAAS/yE,EAAyB,QAApBmpU,EAAOjiU,SAAsBshzB,EAAQz/yB,EAjBzD,GAiB4Ey/yB,EAC9E,MACJ,IAAK,OACL,IAAK,QACDx2uB,EAAQe,SAAS/pE,MAAS2b,EAAY3b,EACtCjJ,EAAyB,SAApBopU,EAAOjiU,SAAuBqhzB,EAAQA,EAAQv2uB,EAAQe,SAAS/pE,MACpEhJ,EAAKs4L,EAAc,EAAMvvL,EAAS,EAClCipE,EAAQe,SAAShzE,EAAyB,SAApBopU,EAAOjiU,SAAuBqhzB,EAAQv/yB,EAAQu/yB,EAG5E,OAAQp/e,EAAO9mR,WACX,IAAK,OACuB,QAApB8mR,EAAOjiU,UAA0C,WAApBiiU,EAAOjiU,SACpCnH,EAAIiyE,EAAQe,SAAShzE,EAGrBC,EAAIgyE,EAAQe,SAAS/yE,EAEzB,MACJ,IAAK,MACuB,QAApBmpU,EAAOjiU,UAA0C,WAApBiiU,EAAOjiU,SACpCnH,EAAIq0E,EAAaprE,EAGjBhJ,EAAIs4L,EAAcvvL,EAI9B/V,KAAK2uF,UAAY,IAAIhQ,GAAS5xE,EAAGC,KAGzC2mzB,EAAct4zB,UAAUuuN,eAAiB,SAAU/oN,GAC/Cb,KAAKojtB,yBAAyBvitB,GAC9BX,aAAaF,KAAKE,cAClBF,KAAKE,aAAeC,WAAWH,KAAK0zzB,yBAAyBp4zB,KAAK0E,MAAO,MAE7E2zzB,EAAct4zB,UAAUq4zB,yBAA2B,WAC3ClzzB,SAASosB,eAAe5sB,KAAKg/E,QAAQh+E,QAAQsC,GAAK,wBAClD9C,SAASosB,eAAe5sB,KAAKg/E,QAAQh+E,QAAQsC,GAAK,uBAAuBiB,UAGjFovzB,EAAct4zB,UAAUintB,eAAiB,SAAUzhtB,GAC/Cb,KAAKszP,YAAezyP,EAAEsG,OAAO7D,GAAG/E,QAAQ,gBAAkB,EAAMyB,KAAKszP,YAAc,EAC9EtzP,KAAKszP,YAAc,EACxBtzP,KAAK2+sB,cAETg1G,EAAct4zB,UAAUkpB,WAAa,SAAUvjB,GAC3CuE,GAAanB,IAAIpD,EAASwK,GAAQ0+E,gBAAiBlqF,KAAKsitB,eAAgBtitB,OAE5E2zzB,EAAct4zB,UAAUqB,iBAAmB,WACnCsD,KAAKg/E,QAAQgI,cAGjBhnF,KAAKg/E,QAAQ4G,GAAGp6E,GAAQ2+E,eAAgBnqF,KAAKojtB,yBAA0BpjtB,MACvEA,KAAKg/E,QAAQ4G,GAAGp6E,GAAQ4+E,cAAepqF,KAAK4pN,eAAgB5pN,QAEhE2zzB,EAAct4zB,UAAUuB,oBAAsB,WACtCoD,KAAKg/E,QAAQgI,cAGjBhnF,KAAKg/E,QAAQgH,IAAIx6E,GAAQ2+E,eAAgBnqF,KAAKojtB,0BAC9CpjtB,KAAKg/E,QAAQgH,IAAIx6E,GAAQ4+E,cAAepqF,KAAK4pN,kBAKjD+pmB,EAAct4zB,UAAUkkC,cAAgB,WACpC,MAAO,iBAOXo0xB,EAAct4zB,UAAUiX,QAAU,SAAU0sE,GAIxCh/E,KAAKpD,uBAEF+2zB,KCzrBP8B,GAAkC,WAClC,SAASA,EAAiB/1uB,GACtB1/E,KAAKg/E,QAAUU,EACf1/E,KAAKtD,mBAyFT,OAtFA+4zB,EAAiBp6zB,UAAUwkV,UAAY,SAAUh/U,GAC7C,IACI60zB,EAEAnozB,EAGAsQ,EAEAm1D,EACA2ivB,EACA30zB,EACA40zB,EAXA52uB,EAAUh/E,KAAKg/E,QAEfx4C,EAAW3lC,EAAEsG,OAAO7D,GAEpBm3D,KACAyoS,EAAYljW,KAAKg/E,QAAQu7nB,kBAEzBs7G,KAKJ,GAAIrvxB,EAASjoC,QAAQ,gBAAkB,EACnC,GAAIyB,KAAK81zB,cAAgBtvxB,EAAU,CAC/BmvxB,EAAiBn1zB,SAASosB,eAAeoyD,EAAQh+E,QAAQsC,GAAK,YAAc07E,EAAQ4rM,WAAa,WACjG,IAAImriB,EAAoBv1zB,SAASkN,uBAAuB,oBAExDkozB,EAASn2uB,GADT5hE,EAAO7d,KAAKg/E,QAAQnuB,OAAOgvB,YAAYrkE,WAAWgrB,EAAStpC,MAAM,KAAK,QAC/BgmW,EAAUnlU,KAAMihD,GACvD,IAAK,IAAI7iF,EAAI,EAAGA,EAAIw5zB,EAAexwvB,kBAAmBhpE,IAAK,CACvD6E,EAAU20zB,EAAepkzB,WAAWpV,GACpC62E,GAAU,EACVn1D,EAAOmhE,EAAQnuB,OAAOgvB,YAAY7+E,EAAQsC,GAAGpG,MAAM,KAAK,IACxD,IAAK,IAAIqmB,EAAI,EAAGA,EAAIwyyB,EAAkBt5zB,OAAQ8mB,IAC1C,GAAIviB,EAAQsC,KAAOyyzB,EAAkBxyyB,GAAGjgB,GAAI,CACxC0vE,GAAU,EACV,MAGJ4ivB,EAAOr3zB,QAAQsf,EAAqB,iBAAM,GAAKm1D,IAC/C6ivB,EAAkBrxzB,KAAKxD,GACvBy5D,EAAMj2D,KAAKqZ,IAGnB4jE,GAAiBjhF,SAASkN,uBAAuB,oBAAqB,mBAAoBsxE,GAC1F,IAAK,IAAI74D,EAAI,EAAGA,EAAI0vyB,EAAkBp5zB,OAAQ0pB,IAE1Cu7D,IADA1gF,EAAU60zB,EAAkB1vyB,IACP5U,WAAW,IAAM+yB,OAAQ4+T,EAAU5+T,OAAQ1G,KAAMslU,EAAUtlU,KAAMnwB,QAASy1V,EAAUz1V,UACzGzM,EAAQ8C,UAAUM,IAAI,oBACtBpE,KAAK81zB,YAActvxB,EAEvBj5B,GAAcsrB,QAAQ,EAAOpB,KAAMk5qB,GAAe3xnB,QAASA,EAASvkB,MAAOA,EAAO72D,SAAUiyzB,GAC5F72uB,EAAQx4D,QAAQmqrB,GAAepjsB,QAG/BmozB,GAAmB,OAIvBj0uB,GAAiBjhF,SAASkN,uBAAuB,oBAAqB,mBAAoBsxE,GAC1F02uB,GAAmB,EAEvB,OAAOA,GAKXD,EAAiBp6zB,UAAUqB,iBAAmB,WACtCsD,KAAKg/E,QAAQgI,aAGjBhnF,KAAKg/E,QAAQ4G,GAAGp6E,GAAQ2+E,eAAgBnqF,KAAK6/U,UAAW7/U,OAK5Dy1zB,EAAiBp6zB,UAAUuB,oBAAsB,WACzCoD,KAAKg/E,QAAQgI,aAGjBhnF,KAAKg/E,QAAQgH,IAAIx6E,GAAQ2+E,eAAgBnqF,KAAK6/U,YAKlD41e,EAAiBp6zB,UAAUkkC,cAAgB,WACvC,MAAO,oBAOXk2xB,EAAiBp6zB,UAAUiX,QAAU,SAAUotE,GAC3C1/E,KAAKpD,uBAEF64zB,KAGPO,GAAkC,WAClC,SAASA,EAAiBt2uB,GACtB1/E,KAAKg/E,QAAUU,EACf1/E,KAAKtD,mBA+FT,OA5FAs5zB,EAAiB36zB,UAAUq9Z,UAAY,SAAU73Z,GAC7C,IACI0M,EAIAsQ,EAGA83yB,EACA30zB,EACA40zB,EAVAz8wB,EAAYt4C,EAAEsG,OAEd63E,EAAUh/E,KAAKg/E,QACfvkB,KACAj0B,EAAW2S,EAAU71C,GAErByyzB,KAKAnmvB,EAAYoP,EAAQw/iB,kBACpB+0L,EAAWv0uB,EAAQh+E,QAAQsC,GAAK,YAAc07E,EAAQ4rM,WAAa,UACvE,GAAIpkP,EAASjoC,QAAQ,gBAAkB,EAEnC,GADAsC,EAAE2kB,iBACExlB,KAAKi2zB,cAAgBzvxB,EAAU,CAC/BmvxB,EAAiBn1zB,SAASosB,eAAe2myB,GAEzCqC,EAASn2uB,GADT5hE,EAAOmhE,EAAQnuB,OAAOgvB,YAAYrkE,WAAWgrB,EAAStpC,MAAM,KAAK,QAC1B0yE,EAAU7xC,KAAMihD,GACvD,IAAK,IAAI7iF,EAAI,EAAGA,EAAIw5zB,EAAexwvB,kBAAmBhpE,IAClD6E,EAAU20zB,EAAepkzB,WAAWpV,GACpC0hB,EAAOmhE,EAAQnuB,OAAOgvB,YAAY7+E,EAAQsC,GAAGpG,MAAM,KAAK,IACpD04zB,EAAOr3zB,QAAQsf,EAAqB,iBAAM,IAC1Ck4yB,EAAkBvxzB,KAAKxD,GACvBy5D,EAAMj2D,KAAKqZ,IAGnB4jE,GAAiBjhF,SAASkN,uBAAuB,oBAAqB,mBAAoBsxE,GAC1Fh/E,KAAKi2zB,YAAczvxB,EAEnB,IAAK,IADDqvxB,EAAoBr1zB,SAASkN,uBAAuB,oBAC/CyY,EAAI,EAAGA,EAAI4vyB,EAAkBt5zB,OAAQ0pB,IAAK,CAE/C,GADAnlB,EAAU+0zB,EAAkB5vyB,GACxB0vyB,EAAkBp5zB,OAAS,EAC3B,IAAK,IAAI8mB,EAAI,EAAGA,EAAIsyyB,EAAkBp5zB,OAAQ8mB,IACtCsyyB,EAAkBtyyB,GAAGjgB,KAAOtC,EAAQsC,IACpCuyzB,EAAkBtyyB,GAAGzf,UAAUS,OAAO,oBAE1Cm9E,GAAa1gF,EAAQuQ,WAAW,IAAM+yB,OAAQsrC,EAAUtrC,OAAQ1G,KAAMgyC,EAAUhyC,KAAMnwB,QAASmiE,EAAUniE,UACzGzM,EAAQ8C,UAAUM,IAAI,yBAI1Bs9E,GAAa1gF,EAAQuQ,WAAW,IAAM+yB,OAAQsrC,EAAUtrC,OAAQ1G,KAAMgyC,EAAUhyC,KAAMnwB,QAASmiE,EAAUniE,UACzGzM,EAAQ8C,UAAUM,IAAI,oBAE1BmJ,GAAcsrB,QAAQ,EAAOpB,KAAMs1xB,GAAc/tuB,QAASA,EAASvkB,MAAOA,EAAO72D,SAAUmyzB,GAC3F/2uB,EAAQx4D,QAAQumyB,GAAcx/yB,SAIlCk0E,GAAiBjhF,SAASkN,uBAAuB,oBAAqB,mBAAoBsxE,GAC1Fh/E,KAAKi2zB,YAAc,QAIvBx0uB,GAAiBjhF,SAASkN,uBAAuB,oBAAqB,mBAAoBsxE,GAC1Fh/E,KAAKi2zB,YAAc,IAM3BD,EAAiB36zB,UAAUqB,iBAAmB,WACtCsD,KAAKg/E,QAAQgI,aAGjBhnF,KAAKg/E,QAAQ4G,GAAGp6E,GAAQ0+E,gBAAiBlqF,KAAK04Z,UAAW14Z,OAK7Dg2zB,EAAiB36zB,UAAUuB,oBAAsB,WACzCoD,KAAKg/E,QAAQgI,aAGjBhnF,KAAKg/E,QAAQgH,IAAIx6E,GAAQ0+E,gBAAiBlqF,KAAK04Z,YAKnDs9Z,EAAiB36zB,UAAUkkC,cAAgB,WACvC,MAAO,oBAOXy2xB,EAAiB36zB,UAAUiX,QAAU,SAAUotE,GAC3C1/E,KAAKpD,uBAEFo5zB,KChMPE,GAAgC,WAChC,SAASA,EAAex2uB,GACpB1/E,KAAKg/E,QAAUU,EACf1/E,KAAKouY,gBAAkBpuY,KAAKg/E,QAAQovT,gBACpCpuY,KAAKm2zB,UAAYn2zB,KAAKg/E,QAAQh+E,QAAQsC,GAAK,kBAC3CtD,KAAKtD,mBAuIT,OApIAw5zB,EAAe76zB,UAAU2mI,cAAgB,SAAUnhI,GAC/C,IAAIiL,EACAI,EACA/E,EACA+5U,EACAk1e,GAC6B,IAA7Bv1zB,EAAE6F,KAAKnI,QAAQ,UACfyB,KAAK4xB,SAAU,EAEf9lB,GADAo1U,EAAWrgV,GACM89D,eAAe,GAAG7yD,MACnCI,EAAQg1U,EAASviR,eAAe,GAAGzyD,MACnC/E,EAAS+5U,EAAS/5U,SAGlBnH,KAAK4xB,QAA4B,UAAlB/wB,EAAEw/U,YACjBv0U,EAAQjL,EAAEiL,MACVI,EAAQrL,EAAEqL,MACV/E,EAAStG,EAAEsG,QAEf,IACInK,EAGA6tH,EACAn9F,EAIA2oyB,EAPA7vxB,EAAWr/B,EAAO7D,GAClBua,KAIAy4yB,KACA1psB,KAEApmF,EAASjoC,QAAQ,gBAAkB,IACnCsf,EAAO7d,KAAKg/E,QAAQnuB,OAAOgvB,YAAYrkE,WAAWgrB,EAAStpC,MAAM,KAAK,MAC3C,KAC3BF,EAAQ6gB,EAAa,OACrB7d,KAAK8f,aAAc,IAAIE,MAAOC,UAC9Bq2yB,EAAcz4yB,EAAW,KACzBw4yB,EAAax4yB,EAAc,QAAQ,KACnC+uG,GAAkBjrC,GAAc3hF,KAAKouY,gBAAgBpyW,OAAQs6xB,EAAat2zB,KAAKg/E,UACvEh/E,KAAKg/E,QAAQO,gBAAgBryE,WAAa,MAAQ00E,GAAY5kF,EAAOgD,KAAKg/E,UAC9Ex+E,SAASosB,eAAe5sB,KAAKm2zB,WAC7BtrsB,EAAarqH,SAASosB,eAAe5sB,KAAKm2zB,YAG1CtrsB,EAAa1pH,EAAc,OACvBmC,GAAItD,KAAKg/E,QAAQh+E,QAAQsC,GAAK,kBAC9BD,UAAW,sBACXE,OAAQ,4CAEZ/C,SAASosB,eAAe5sB,KAAKg/E,QAAQh+E,QAAQsC,GAAK,sBAAsB3B,YAAYkpH,KAExFn9F,EAAW4yD,GAAiBx0E,EAAOI,EAAOlM,KAAKg/E,QAAQ1tD,YAC9CtkB,EAAKhN,KAAKouY,gBAAwB,SAAI1gX,EAAS1gB,EAAI,GAAK0gB,EAAS1gB,EAC1EopzB,GACIv9xB,QAAQ,EAAOpB,KAAMu1xB,GAAkBnvyB,KAAMA,EAC7C7K,SACI0a,SAAUA,EAAUjB,KAAMmgG,EAAgBpwH,KAAM85zB,EAChDlyhB,UAAWpkS,KAAKouY,gBAAgBhqG,UAAWn1R,SAAUjP,KAAKouY,gBAAgBn/X,UAE9E+vE,QAASh/E,KAAKg/E,QACdh+E,QAASmG,EAAQoG,UAAW1M,GAEhCb,KAAKg/E,QAAQx4D,QAAQwmyB,GAAkBoJ,GAClCA,EAAWv9xB,OAiBZ74B,KAAKikW,iBAhBLjkW,KAAKwjW,WAAa,IAAIxtT,IAClBvW,QAAQ,EACRmlD,OAAQ,GACRpoF,KAAM45zB,EAAWpjzB,QAAc,KAC/B/D,SAAUmnzB,EAAWpjzB,QAAkB,SACvConB,QAASg8xB,EAAWpjzB,QAAc,KAClCswR,UACA51Q,SAAU0oyB,EAAWpjzB,QAAkB,SACvC8b,SAAUunyB,GACVzzhB,WAAY5iS,KAAKg/E,QAAQe,SACzBqkN,UAAWgyhB,EAAWpjzB,QAAmB,UACzCkI,MAAOlb,KAAKg/E,QAAQ9jE,QAExBlb,KAAKwjW,WAAWntT,SAASw0E,KAO7B7qH,KAAKikW,iBAGbiyd,EAAe76zB,UAAUuuN,eAAiB,SAAU/oN,GAChDb,KAAKgiI,cAAcnhI,GACnBX,aAAaF,KAAKE,cAClBF,KAAKE,aAAeC,WAAWH,KAAKikW,cAAc3oW,KAAK0E,MAAO,MAElEk2zB,EAAe76zB,UAAU4oW,cAAgB,WACjCzjW,SAASkN,uBAAuB,uBAAuBjR,OAAS,GAChE+D,SAASkN,uBAAuB,uBAAuB,GAAGnJ,UAMlE2xzB,EAAe76zB,UAAUqB,iBAAmB,WACpCsD,KAAKg/E,QAAQgI,cAGjBhnF,KAAKg/E,QAAQ4G,GAAGp6E,GAAQ2+E,eAAgBnqF,KAAKgiI,cAAehiI,MAC5DA,KAAKg/E,QAAQ4G,GAAGp6E,GAAQ4+E,cAAepqF,KAAK4pN,eAAgB5pN,QAKhEk2zB,EAAe76zB,UAAUuB,oBAAsB,WACvCoD,KAAKg/E,QAAQgI,cAGjBhnF,KAAKg/E,QAAQgH,IAAIx6E,GAAQ2+E,eAAgBnqF,KAAKgiI,eAC9ChiI,KAAKg/E,QAAQgH,IAAIx6E,GAAQ4+E,cAAepqF,KAAK4pN,kBAKjDssmB,EAAe76zB,UAAUkkC,cAAgB,WACrC,MAAO,kBAOX22xB,EAAe76zB,UAAUiX,QAAU,SAAUotE,GAIzC1/E,KAAKpD,uBAEFs5zB,KClJXK,GAAcnqtB,OAAQoqtB,GAAqBC,GAAoBC,GAAuBC,8RRMpE,cAKE,qBAKK,0CAUD,sBAKF,0EAoBC,qBAKD,iBAKH,kBAKI,0CAUH"}